[
  {
    "path": "FaceLivenessDetection/CMakeLists.txt",
    "content": "cmake_minimum_required (VERSION 2.8)\nproject (OpenFace)\n\nset(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/)\n\nset(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} \"${CMAKE_SOURCE_DIR}/cmake/modules/\")\n\nset(CMAKE_CONFIG_DIR etc/OpenFace)\nset(CONFIG_DIR \"${CMAKE_INSTALL_PREFIX}/${CMAKE_CONFIG_DIR}\")\nadd_definitions(-DCONFIG_DIR=\"${CONFIG_DIR}\")\n\nfind_package( OpenCV REQUIRED )\n\nMESSAGE(\"OpenCV information:\") \nMESSAGE(\"  OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}\") \nMESSAGE(\"  OpenCV_LIBRARIES: ${OpenCV_LIBRARIES}\") \nMESSAGE(\"  OpenCV_LIBRARY_DIRS: ${OpenCV_LIBRARY_DIRS}\") \ninclude_directories( ${OpenCV_INCLUDE_DIRS} )\n\nfind_package( Boost 1.5.9 REQUIRED COMPONENTS filesystem system)\nMESSAGE(\"Boost information:\") \nMESSAGE(\"  Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}\") \nMESSAGE(\"  Boost_LIBRARIES: ${Boost_LIBRARIES}\") \nMESSAGE(\"  Boost_LIBRARY_DIRS: ${Boost_LIBRARY_DIRS}\") \n\nINCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})\nINCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}/boost)\nLINK_DIRECTORIES(${Boost_LIBRARY_DIRS})\t\n\nfind_package(TBB REQUIRED)\n\n# Move LandmarkDetector model\nfile(GLOB files \"lib/local/LandmarkDetector/model/*.txt\")\nforeach(file ${files})\n\tif (MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/model)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/model)\n\telse(MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model)\n\tendif(MSVC)\n\n\tinstall(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model)\nendforeach()\n\n# Move the hierarchical LandmarkDetector models\nfile(GLOB files \"lib/local/LandmarkDetector/model/model*\")\nforeach(file ${files})\n\tif (MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/model)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/model)\n\telse(MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model)\n\tendif(MSVC)\n\n\tinstall(DIRECTORY ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model)\nendforeach()\n\nfile(GLOB files \"lib/local/LandmarkDetector/model/detection_validation/*.txt\")\nforeach(file ${files})\n\tif (MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/model/detection_validation)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/model/detection_validation)\n\telse(MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model/detection_validation)\n\tendif(MSVC)\n\n\tinstall(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model/detection_validation)\nendforeach()\n\nfile(GLOB files \"lib/local/LandmarkDetector/model/patch_experts/*.txt\")\nforeach(file ${files})\n\tif (MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/model/patch_experts)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/model/patch_experts)\n\telse(MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model/patch_experts)\n\tendif(MSVC)\n\n\tinstall(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model/patch_experts)\nendforeach()\n\nfile(GLOB files \"lib/local/LandmarkDetector/model/pdms/*.txt\")\nforeach(file ${files})\n\tif (MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/model/pdms)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/model/pdms)\n\telse(MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model/pdms)\n\tendif(MSVC)\n\n\tinstall(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model/pdms)\nendforeach()\n\n# Move OpenCV classifiers\nfile(GLOB files \"lib/3rdParty/OpenCV3.1/classifiers/*.xml\")\nforeach(file ${files})\n\tif (MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/classifiers)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/classifiers)\n\telse(MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/classifiers)\n\tendif(MSVC)\n\n\tinstall(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/classifiers)\nendforeach()\n\n# Move AU prediction modules\nfile(GLOB files \"lib/local/FaceAnalyser/AU_predictors/*.txt\")\nforeach(file ${files})\n\tif (MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/AU_predictors)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/AU_predictors)\n\telse(MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/AU_predictors)\n\tendif(MSVC)\n\n\tinstall(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/AU_predictors)\nendforeach()\n\n# Move AU prediction modules\nfile(GLOB files \"lib/local/FaceAnalyser/AU_predictors/svr*\")\nforeach(file ${files})\n\tif (MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/AU_predictors)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/AU_predictors)\n\telse(MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/AU_predictors)\n\tendif(MSVC)\n\n\tinstall(DIRECTORY ${file} DESTINATION ${CMAKE_CONFIG_DIR}/AU_predictors)\nendforeach()\n\n# Move AU prediction modules\nfile(GLOB files \"lib/local/FaceAnalyser/AU_predictors/svm*\")\nforeach(file ${files})\n\tif (MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/AU_predictors)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/AU_predictors)\n\telse(MSVC)\n\t\tfile(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/AU_predictors)\n\tendif(MSVC)\n\n\tinstall(DIRECTORY ${file} DESTINATION ${CMAKE_CONFIG_DIR}/AU_predictors)\nendforeach()\n\nif (${CMAKE_CXX_COMPILER_ID} STREQUAL \"GNU\")\n    execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)\n    if (GCC_VERSION VERSION_LESS 4.7)\n        set (CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -std=c++0x -msse -msse2 -msse3\")\n    else ()\n        set (CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -std=c++11 -msse -msse2 -msse3\")\n    endif ()\nelse ()\n    set (CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -std=c++11 -msse -msse2 -msse3\")\nendif ()\n\n# Boost\nif(WIN32)\n\tinclude_directories(lib/3rdParty/boost)\n\tinclude_directories(lib/3rdParty/boost/boost)\n\tlink_directories( ${PROJECT_SOURCE_DIR}/lib/3rdParty/boost/lib )\nelse()\n\tINCLUDE_DIRECTORIES(${BOOST_INCLUDE_DIR})\nendif()\n\n# dlib\ninclude_directories(lib/3rdParty/dlib/include)\n\n# dlib library\nadd_subdirectory(lib/3rdParty/dlib)\n\nadd_subdirectory(lib/local/LandmarkDetector)\n\n# executables\nadd_subdirectory(exe/FaceLivenessDetection)\n\n"
  },
  {
    "path": "FaceLivenessDetection/classifiers/haarcascade_frontalface_alt.xml",
    "content": "<?xml version=\"1.0\"?>\n<!--\n    Stump-based 20x20 gentle adaboost frontal face detector.\n    Created by Rainer Lienhart.\n\n////////////////////////////////////////////////////////////////////////////////////////\n\n  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n\n  By downloading, copying, installing or using the software you agree to this license.\n  If you do not agree to this license, do not download, install,\n  copy or use the software.\n\n\n                        Intel License Agreement\n                For Open Source Computer Vision Library\n\n Copyright (C) 2000, Intel Corporation, all rights reserved.\n Third party copyrights are property of their respective owners.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n   * Redistribution's of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n\n   * Redistribution's in binary form must reproduce the above copyright notice,\n     this list of conditions and the following disclaimer in the documentation\n     and/or other materials provided with the distribution.\n\n   * The name of Intel Corporation may not be used to endorse or promote products\n     derived from this software without specific prior written permission.\n\n This software is provided by the copyright holders and contributors \"as is\" and\n any express or implied warranties, including, but not limited to, the implied\n warranties of merchantability and fitness for a particular purpose are disclaimed.\n In no event shall the Intel Corporation or contributors be liable for any direct,\n indirect, incidental, special, exemplary, or consequential damages\n (including, but not limited to, procurement of substitute goods or services;\n loss of use, data, or profits; or business interruption) however caused\n and on any theory of liability, whether in contract, strict liability,\n or tort (including negligence or otherwise) arising in any way out of\n the use of this software, even if advised of the possibility of such damage.\n-->\n<opencv_storage>\n<cascade type_id=\"opencv-cascade-classifier\"><stageType>BOOST</stageType>\n  <featureType>HAAR</featureType>\n  <height>20</height>\n  <width>20</width>\n  <stageParams>\n    <maxWeakCount>213</maxWeakCount></stageParams>\n  <featureParams>\n    <maxCatCount>0</maxCatCount></featureParams>\n  <stageNum>22</stageNum>\n  <stages>\n    <_>\n      <maxWeakCount>3</maxWeakCount>\n      <stageThreshold>8.2268941402435303e-01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 0 4.0141958743333817e-03</internalNodes>\n          <leafValues>\n            3.3794190734624863e-02 8.3781069517135620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1 1.5151339583098888e-02</internalNodes>\n          <leafValues>\n            1.5141320228576660e-01 7.4888122081756592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2 4.2109931819140911e-03</internalNodes>\n          <leafValues>\n            9.0049281716346741e-02 6.3748198747634888e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>16</maxWeakCount>\n      <stageThreshold>6.9566087722778320e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3 1.6227109590545297e-03</internalNodes>\n          <leafValues>\n            6.9308586418628693e-02 7.1109461784362793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4 2.2906649392098188e-03</internalNodes>\n          <leafValues>\n            1.7958030104637146e-01 6.6686922311782837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5 5.0025708042085171e-03</internalNodes>\n          <leafValues>\n            1.6936729848384857e-01 6.5540069341659546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6 7.9659894108772278e-03</internalNodes>\n          <leafValues>\n            5.8663320541381836e-01 9.1414518654346466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7 -3.5227010957896709e-03</internalNodes>\n          <leafValues>\n            1.4131669700145721e-01 6.0318958759307861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8 3.6667689681053162e-02</internalNodes>\n          <leafValues>\n            3.6756721138954163e-01 7.9203182458877563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 9 9.3361474573612213e-03</internalNodes>\n          <leafValues>\n            6.1613857746124268e-01 2.0885099470615387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 10 8.6961314082145691e-03</internalNodes>\n          <leafValues>\n            2.8362309932708740e-01 6.3602739572525024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 11 1.1488880263641477e-03</internalNodes>\n          <leafValues>\n            2.2235809266567230e-01 5.8007007837295532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 12 -2.1484689787030220e-03</internalNodes>\n          <leafValues>\n            2.4064640700817108e-01 5.7870548963546753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 13 2.1219060290604830e-03</internalNodes>\n          <leafValues>\n            5.5596548318862915e-01 1.3622370362281799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 14 -9.3949146568775177e-02</internalNodes>\n          <leafValues>\n            8.5027372837066650e-01 4.7177401185035706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 15 1.3777789426967502e-03</internalNodes>\n          <leafValues>\n            5.9936738014221191e-01 2.8345298767089844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 16 7.3063157498836517e-02</internalNodes>\n          <leafValues>\n            4.3418860435485840e-01 7.0600342750549316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 17 3.6767389974556863e-04</internalNodes>\n          <leafValues>\n            3.0278879404067993e-01 6.0515749454498291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 18 -6.0479710809886456e-03</internalNodes>\n          <leafValues>\n            1.7984339594841003e-01 5.6752568483352661e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>21</maxWeakCount>\n      <stageThreshold>9.4985427856445312e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 19 -1.6510689631104469e-02</internalNodes>\n          <leafValues>\n            6.6442251205444336e-01 1.4248579740524292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 20 2.7052499353885651e-03</internalNodes>\n          <leafValues>\n            6.3253521919250488e-01 1.2884770333766937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 21 2.8069869149476290e-03</internalNodes>\n          <leafValues>\n            1.2402880191802979e-01 6.1931931972503662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 22 -1.5402400167658925e-03</internalNodes>\n          <leafValues>\n            1.4321430027484894e-01 5.6700158119201660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 23 -5.6386279175058007e-04</internalNodes>\n          <leafValues>\n            1.6574330627918243e-01 5.9052079916000366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 24 1.9253729842603207e-03</internalNodes>\n          <leafValues>\n            2.6955071091651917e-01 5.7388240098953247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 25 -5.0214841030538082e-03</internalNodes>\n          <leafValues>\n            1.8935389816761017e-01 5.7827740907669067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 26 2.6365420781075954e-03</internalNodes>\n          <leafValues>\n            2.3093290627002716e-01 5.6954258680343628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 27 -1.5127769438549876e-03</internalNodes>\n          <leafValues>\n            2.7596020698547363e-01 5.9566420316696167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 28 -1.0157439857721329e-02</internalNodes>\n          <leafValues>\n            1.7325380444526672e-01 5.5220472812652588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 29 -1.1953660286962986e-02</internalNodes>\n          <leafValues>\n            1.3394099473953247e-01 5.5590140819549561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 30 4.8859491944313049e-03</internalNodes>\n          <leafValues>\n            3.6287039518356323e-01 6.1888492107391357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 31 -8.0132916569709778e-02</internalNodes>\n          <leafValues>\n            9.1211050748825073e-02 5.4759448766708374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 32 1.0643280111253262e-03</internalNodes>\n          <leafValues>\n            3.7151429057121277e-01 5.7113999128341675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 33 -1.3419450260698795e-03</internalNodes>\n          <leafValues>\n            5.9533137083053589e-01 3.3180978894233704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 34 -5.4601140320301056e-02</internalNodes>\n          <leafValues>\n            1.8440659344196320e-01 5.6028461456298828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 35 2.9071690514683723e-03</internalNodes>\n          <leafValues>\n            3.5942441225051880e-01 6.1317151784896851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 36 7.4718717951327562e-04</internalNodes>\n          <leafValues>\n            5.9943532943725586e-01 3.4595629572868347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 37 4.3013808317482471e-03</internalNodes>\n          <leafValues>\n            4.1726520657539368e-01 6.9908452033996582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 38 4.5017572119832039e-03</internalNodes>\n          <leafValues>\n            4.5097151398658752e-01 7.8014570474624634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 39 2.4138500913977623e-02</internalNodes>\n          <leafValues>\n            5.4382127523422241e-01 1.3198269903659821e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>39</maxWeakCount>\n      <stageThreshold>1.8412969589233398e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 40 1.9212230108678341e-03</internalNodes>\n          <leafValues>\n            1.4152669906616211e-01 6.1998707056045532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 41 -1.2748669541906565e-04</internalNodes>\n          <leafValues>\n            6.1910742521286011e-01 1.8849289417266846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 42 5.1409931620582938e-04</internalNodes>\n          <leafValues>\n            1.4873969554901123e-01 5.8579277992248535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 43 4.1878609918057919e-03</internalNodes>\n          <leafValues>\n            2.7469098567962646e-01 6.3592398166656494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 44 5.1015717908740044e-03</internalNodes>\n          <leafValues>\n            5.8708512783050537e-01 2.1756289899349213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 45 -2.1448440384119749e-03</internalNodes>\n          <leafValues>\n            5.8809447288513184e-01 2.9795908927917480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 46 -2.8977119363844395e-03</internalNodes>\n          <leafValues>\n            2.3733270168304443e-01 5.8766472339630127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 47 -2.1610679104924202e-02</internalNodes>\n          <leafValues>\n            1.2206549942493439e-01 5.1942020654678345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 48 -4.6299318782985210e-03</internalNodes>\n          <leafValues>\n            2.6312309503555298e-01 5.8174091577529907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 49 5.9393711853772402e-04</internalNodes>\n          <leafValues>\n            3.6386200785636902e-01 5.6985449790954590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 50 5.3878661245107651e-02</internalNodes>\n          <leafValues>\n            4.3035310506820679e-01 7.5593662261962891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 51 1.8887349870055914e-03</internalNodes>\n          <leafValues>\n            2.1226030588150024e-01 5.6134271621704102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 52 -2.3635339457541704e-03</internalNodes>\n          <leafValues>\n            5.6318491697311401e-01 2.6427671313285828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 53 2.4017799645662308e-02</internalNodes>\n          <leafValues>\n            5.7971078157424927e-01 2.7517059445381165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 54 2.0543030404951423e-04</internalNodes>\n          <leafValues>\n            2.7052420377731323e-01 5.7525688409805298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 55 8.4790197433903813e-04</internalNodes>\n          <leafValues>\n            5.4356247186660767e-01 2.3348769545555115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 56 1.4091329649090767e-03</internalNodes>\n          <leafValues>\n            5.3194248676300049e-01 2.0631550252437592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 57 1.4642629539594054e-03</internalNodes>\n          <leafValues>\n            5.4189807176589966e-01 3.0688610672950745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 58 1.6352549428120255e-03</internalNodes>\n          <leafValues>\n            3.6953729391098022e-01 6.1128681898117065e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 59 8.3172752056270838e-04</internalNodes>\n          <leafValues>\n            3.5650369524955750e-01 6.0252362489700317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 60 -2.0998890977352858e-03</internalNodes>\n          <leafValues>\n            1.9139820337295532e-01 5.3628271818161011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 61 -7.4213981861248612e-04</internalNodes>\n          <leafValues>\n            3.8355550169944763e-01 5.5293101072311401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 62 3.2655049581080675e-03</internalNodes>\n          <leafValues>\n            4.3128961324691772e-01 7.1018958091735840e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 63 8.9134991867467761e-04</internalNodes>\n          <leafValues>\n            3.9848309755325317e-01 6.3919639587402344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 64 -1.5284179709851742e-02</internalNodes>\n          <leafValues>\n            2.3667329549789429e-01 5.4337137937545776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 65 4.8381411470472813e-03</internalNodes>\n          <leafValues>\n            5.8175009489059448e-01 3.2391890883445740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 66 -9.1093179071322083e-04</internalNodes>\n          <leafValues>\n            5.5405938625335693e-01 2.9118689894676208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 67 -6.1275060288608074e-03</internalNodes>\n          <leafValues>\n            1.7752550542354584e-01 5.1966291666030884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 68 -4.4576259097084403e-04</internalNodes>\n          <leafValues>\n            3.0241701006889343e-01 5.5335938930511475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 69 2.2646540775895119e-02</internalNodes>\n          <leafValues>\n            4.4149309396743774e-01 6.9753772020339966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 70 -1.8804960418492556e-03</internalNodes>\n          <leafValues>\n            2.7913948893547058e-01 5.4979521036148071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 71 7.0889107882976532e-03</internalNodes>\n          <leafValues>\n            5.2631992101669312e-01 2.3855470120906830e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 72 1.7318050377070904e-03</internalNodes>\n          <leafValues>\n            4.3193790316581726e-01 6.9836008548736572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 73 -6.8482700735330582e-03</internalNodes>\n          <leafValues>\n            3.0820429325103760e-01 5.3909200429916382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 74 -1.5062530110299122e-05</internalNodes>\n          <leafValues>\n            5.5219221115112305e-01 3.1203660368919373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 75 2.9475569725036621e-02</internalNodes>\n          <leafValues>\n            5.4013228416442871e-01 1.7706030607223511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 76 8.1387329846620560e-03</internalNodes>\n          <leafValues>\n            5.1786178350448608e-01 1.2110190093517303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 77 2.0942950621247292e-02</internalNodes>\n          <leafValues>\n            5.2902942895889282e-01 3.3112218976020813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 78 -9.5665529370307922e-03</internalNodes>\n          <leafValues>\n            7.4719941616058350e-01 4.4519689679145813e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>33</maxWeakCount>\n      <stageThreshold>1.5324139595031738e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 79 -2.8206960996612906e-04</internalNodes>\n          <leafValues>\n            2.0640860497951508e-01 6.0767322778701782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 80 1.6790600493550301e-03</internalNodes>\n          <leafValues>\n            5.8519971370697021e-01 1.2553839385509491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 81 6.9827912375330925e-04</internalNodes>\n          <leafValues>\n            9.4018429517745972e-02 5.7289612293243408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 82 7.8959012171253562e-04</internalNodes>\n          <leafValues>\n            1.7819879949092865e-01 5.6943088769912720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 83 -2.8560499195009470e-03</internalNodes>\n          <leafValues>\n            1.6383990645408630e-01 5.7886648178100586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 84 -3.8122469559311867e-03</internalNodes>\n          <leafValues>\n            2.0854400098323822e-01 5.5085647106170654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 85 1.5896620461717248e-03</internalNodes>\n          <leafValues>\n            5.7027608156204224e-01 1.8572150170803070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 86 1.0078339837491512e-02</internalNodes>\n          <leafValues>\n            5.1169431209564209e-01 2.1897700428962708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 87 -6.3526302576065063e-02</internalNodes>\n          <leafValues>\n            7.1313798427581787e-01 4.0438130497932434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 88 -9.1031491756439209e-03</internalNodes>\n          <leafValues>\n            2.5671818852424622e-01 5.4639732837677002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 89 -2.4035000242292881e-03</internalNodes>\n          <leafValues>\n            1.7006659507751465e-01 5.5909740924835205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 90 1.5226360410451889e-03</internalNodes>\n          <leafValues>\n            5.4105567932128906e-01 2.6190540194511414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 91 1.7997439950704575e-02</internalNodes>\n          <leafValues>\n            3.7324368953704834e-01 6.5352207422256470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 92 -6.4538191072642803e-03</internalNodes>\n          <leafValues>\n            2.6264819502830505e-01 5.5374461412429810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 93 -1.1880760081112385e-02</internalNodes>\n          <leafValues>\n            2.0037539303302765e-01 5.5447459220886230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 94 1.2713660253211856e-03</internalNodes>\n          <leafValues>\n            5.5919027328491211e-01 3.0319759249687195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 95 1.1376109905540943e-03</internalNodes>\n          <leafValues>\n            2.7304071187973022e-01 5.6465089321136475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 96 -4.2651998810470104e-03</internalNodes>\n          <leafValues>\n            1.4059090614318848e-01 5.4618209600448608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 97 -2.9602861031889915e-03</internalNodes>\n          <leafValues>\n            1.7950350046157837e-01 5.4592901468276978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 98 -8.8448226451873779e-03</internalNodes>\n          <leafValues>\n            5.7367831468582153e-01 2.8092199563980103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 99 -6.6430689767003059e-03</internalNodes>\n          <leafValues>\n            2.3706759512424469e-01 5.5038261413574219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 100 3.9997808635234833e-03</internalNodes>\n          <leafValues>\n            5.6081998348236084e-01 3.3042821288108826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 101 -4.1221720166504383e-03</internalNodes>\n          <leafValues>\n            1.6401059925556183e-01 5.3789931535720825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 102 1.5624909661710262e-02</internalNodes>\n          <leafValues>\n            5.2276492118835449e-01 2.2886039316654205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 103 -1.0356419719755650e-02</internalNodes>\n          <leafValues>\n            7.0161938667297363e-01 4.2529278993606567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 104 -8.7960809469223022e-03</internalNodes>\n          <leafValues>\n            2.7673470973968506e-01 5.3558301925659180e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 105 1.6226939857006073e-01</internalNodes>\n          <leafValues>\n            4.3422400951385498e-01 7.4425792694091797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 106 4.5542530715465546e-03</internalNodes>\n          <leafValues>\n            5.7264858484268188e-01 2.5821250677108765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 107 -2.1309209987521172e-03</internalNodes>\n          <leafValues>\n            2.1068480610847473e-01 5.3610187768936157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 108 -1.3208420015871525e-02</internalNodes>\n          <leafValues>\n            7.5937908887863159e-01 4.5524680614471436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 109 -6.5996676683425903e-02</internalNodes>\n          <leafValues>\n            1.2524759769439697e-01 5.3440397977828979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 110 7.9142656177282333e-03</internalNodes>\n          <leafValues>\n            3.3153840899467468e-01 5.6010431051254272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 111 2.0894279703497887e-02</internalNodes>\n          <leafValues>\n            5.5060499906539917e-01 2.7688381075859070e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>44</maxWeakCount>\n      <stageThreshold>2.1010639190673828e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 112 1.1961159761995077e-03</internalNodes>\n          <leafValues>\n            1.7626909911632538e-01 6.1562412977218628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 113 -1.8679830245673656e-03</internalNodes>\n          <leafValues>\n            6.1181068420410156e-01 1.8323999643325806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 114 -1.9579799845814705e-04</internalNodes>\n          <leafValues>\n            9.9044263362884521e-02 5.7238161563873291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 115 -8.0255657667294145e-04</internalNodes>\n          <leafValues>\n            5.5798798799514771e-01 2.3772829771041870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 116 -2.4510810617357492e-03</internalNodes>\n          <leafValues>\n            2.2314579784870148e-01 5.8589351177215576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 117 5.0361850298941135e-04</internalNodes>\n          <leafValues>\n            2.6539939641952515e-01 5.7941037416458130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 118 4.0293349884450436e-03</internalNodes>\n          <leafValues>\n            5.8038270473480225e-01 2.4848650395870209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 119 -1.4451709575951099e-02</internalNodes>\n          <leafValues>\n            1.8303519487380981e-01 5.4842048883438110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 120 2.0380979403853416e-03</internalNodes>\n          <leafValues>\n            3.3635589480400085e-01 6.0510927438735962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 121 -1.6155190533027053e-03</internalNodes>\n          <leafValues>\n            2.2866420447826385e-01 5.4412460327148438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 122 3.3458340913057327e-03</internalNodes>\n          <leafValues>\n            5.6259131431579590e-01 2.3923380672931671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 123 1.6379579901695251e-03</internalNodes>\n          <leafValues>\n            3.9069938659667969e-01 5.9646219015121460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 124 3.0251210555434227e-02</internalNodes>\n          <leafValues>\n            5.2484822273254395e-01 1.5757469832897186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 125 3.7251990288496017e-02</internalNodes>\n          <leafValues>\n            4.1943109035491943e-01 6.7484188079833984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 126 -2.5109790265560150e-02</internalNodes>\n          <leafValues>\n            1.8825499713420868e-01 5.4734510183334351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 127 -5.3099058568477631e-03</internalNodes>\n          <leafValues>\n            1.3399730622768402e-01 5.2271109819412231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 128 1.2086479691788554e-03</internalNodes>\n          <leafValues>\n            3.7620881199836731e-01 6.1096358299255371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 129 -2.1907679736614227e-02</internalNodes>\n          <leafValues>\n            2.6631429791450500e-01 5.4040068387985229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 130 5.4116579703986645e-03</internalNodes>\n          <leafValues>\n            5.3635787963867188e-01 2.2322730720043182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 131 6.9946326315402985e-02</internalNodes>\n          <leafValues>\n            5.3582328557968140e-01 2.4536980688571930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 132 3.4520021290518343e-04</internalNodes>\n          <leafValues>\n            2.4096719920635223e-01 5.3769302368164062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 133 1.2627709656953812e-03</internalNodes>\n          <leafValues>\n            5.4258567094802856e-01 3.1556931138038635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 134 2.2719509899616241e-02</internalNodes>\n          <leafValues>\n            4.1584059596061707e-01 6.5978652238845825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 135 -1.8111000536009669e-03</internalNodes>\n          <leafValues>\n            2.8112530708312988e-01 5.5052447319030762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 136 3.3469670452177525e-03</internalNodes>\n          <leafValues>\n            5.2600282430648804e-01 1.8914650380611420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 137 4.0791751234792173e-04</internalNodes>\n          <leafValues>\n            5.6735092401504517e-01 3.3442100882530212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 138 1.2734799645841122e-02</internalNodes>\n          <leafValues>\n            5.3435921669006348e-01 2.3956120014190674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 139 -7.3119727894663811e-03</internalNodes>\n          <leafValues>\n            6.0108900070190430e-01 4.0222078561782837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 140 -5.6948751211166382e-02</internalNodes>\n          <leafValues>\n            8.1991511583328247e-01 4.5431908965110779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 141 -5.0116591155529022e-03</internalNodes>\n          <leafValues>\n            2.2002810239791870e-01 5.3577107191085815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 142 6.0334368608891964e-03</internalNodes>\n          <leafValues>\n            4.4130811095237732e-01 7.1817511320114136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 143 3.9437441155314445e-03</internalNodes>\n          <leafValues>\n            5.4788607358932495e-01 2.7917331457138062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 144 -3.6591119132936001e-03</internalNodes>\n          <leafValues>\n            6.3578677177429199e-01 3.9897239208221436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 145 -3.8456181064248085e-03</internalNodes>\n          <leafValues>\n            3.4936860203742981e-01 5.3006649017333984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 146 -7.1926261298358440e-03</internalNodes>\n          <leafValues>\n            1.1196149885654449e-01 5.2296727895736694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 147 -5.2798941731452942e-02</internalNodes>\n          <leafValues>\n            2.3871029913425446e-01 5.4534512758255005e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 148 -7.9537667334079742e-03</internalNodes>\n          <leafValues>\n            7.5869178771972656e-01 4.4393768906593323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 149 -2.7344180271029472e-03</internalNodes>\n          <leafValues>\n            2.5654768943786621e-01 5.4893219470977783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 150 -1.8507939530536532e-03</internalNodes>\n          <leafValues>\n            6.7343479394912720e-01 4.2524749040603638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 151 1.5918919816613197e-02</internalNodes>\n          <leafValues>\n            5.4883527755737305e-01 2.2926619648933411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 152 -1.2687679845839739e-03</internalNodes>\n          <leafValues>\n            6.1043310165405273e-01 4.0223899483680725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 153 6.2883910723030567e-03</internalNodes>\n          <leafValues>\n            5.3108531236648560e-01 1.5361930429935455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 154 -6.2259892001748085e-03</internalNodes>\n          <leafValues>\n            1.7291119694709778e-01 5.2416062355041504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 155 -1.2132599949836731e-02</internalNodes>\n          <leafValues>\n            6.5977597236633301e-01 4.3251821398735046e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>50</maxWeakCount>\n      <stageThreshold>2.3918790817260742e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 156 -3.9184908382594585e-03</internalNodes>\n          <leafValues>\n            6.1034351587295532e-01 1.4693309366703033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 157 1.5971299726516008e-03</internalNodes>\n          <leafValues>\n            2.6323631405830383e-01 5.8964669704437256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 158 1.7780110239982605e-02</internalNodes>\n          <leafValues>\n            5.8728742599487305e-01 1.7603619396686554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 159 6.5334769897162914e-04</internalNodes>\n          <leafValues>\n            1.5678019821643829e-01 5.5960661172866821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 160 -2.8353091329336166e-04</internalNodes>\n          <leafValues>\n            1.9131539762020111e-01 5.7320362329483032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 161 1.6104689566418529e-03</internalNodes>\n          <leafValues>\n            2.9149138927459717e-01 5.6230807304382324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 162 -9.7750619053840637e-02</internalNodes>\n          <leafValues>\n            1.9434769451618195e-01 5.6482332944869995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 163 5.5182358482852578e-04</internalNodes>\n          <leafValues>\n            3.1346169114112854e-01 5.5046397447586060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 164 -1.2858220376074314e-02</internalNodes>\n          <leafValues>\n            2.5364819169044495e-01 5.7601428031921387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 165 4.1530239395797253e-03</internalNodes>\n          <leafValues>\n            5.7677221298217773e-01 3.6597740650177002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 166 1.7092459602281451e-03</internalNodes>\n          <leafValues>\n            2.8431910276412964e-01 5.9189391136169434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 167 7.5217359699308872e-03</internalNodes>\n          <leafValues>\n            4.0524271130561829e-01 6.1831092834472656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 168 2.2479810286313295e-03</internalNodes>\n          <leafValues>\n            5.7837551832199097e-01 3.1354010105133057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 169 5.2006211131811142e-02</internalNodes>\n          <leafValues>\n            5.5413120985031128e-01 1.9166369736194611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 170 1.2085529975593090e-02</internalNodes>\n          <leafValues>\n            4.0326559543609619e-01 6.6445910930633545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 171 1.4687820112158079e-05</internalNodes>\n          <leafValues>\n            3.5359779000282288e-01 5.7093828916549683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 172 7.1395188570022583e-06</internalNodes>\n          <leafValues>\n            3.0374449491500854e-01 5.6102699041366577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 173 -4.6001640148460865e-03</internalNodes>\n          <leafValues>\n            7.1810871362686157e-01 4.5803260803222656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 174 2.0058949012309313e-03</internalNodes>\n          <leafValues>\n            5.6219518184661865e-01 2.9536840319633484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 175 4.5050270855426788e-03</internalNodes>\n          <leafValues>\n            4.6153879165649414e-01 7.6190179586410522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 176 1.1746830306947231e-02</internalNodes>\n          <leafValues>\n            5.3438371419906616e-01 1.7725290358066559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 177 -5.8316338807344437e-02</internalNodes>\n          <leafValues>\n            1.6862459480762482e-01 5.3407722711563110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 178 2.3629379575140774e-04</internalNodes>\n          <leafValues>\n            3.7920561432838440e-01 6.0268038511276245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 179 -7.8156180679798126e-03</internalNodes>\n          <leafValues>\n            1.5128670632839203e-01 5.3243237733840942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 180 -1.0876160115003586e-02</internalNodes>\n          <leafValues>\n            2.0818220078945160e-01 5.3199452161788940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 181 -2.7745519764721394e-03</internalNodes>\n          <leafValues>\n            4.0982469916343689e-01 5.2103281021118164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 182 -7.8276381827890873e-04</internalNodes>\n          <leafValues>\n            5.6932741403579712e-01 3.4788420796394348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 183 1.3870409689843655e-02</internalNodes>\n          <leafValues>\n            5.3267508745193481e-01 2.2576980292797089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 184 -2.3674910888075829e-02</internalNodes>\n          <leafValues>\n            1.5513050556182861e-01 5.2007079124450684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 185 -1.4879409718560055e-05</internalNodes>\n          <leafValues>\n            5.5005669593811035e-01 3.8201761245727539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 186 3.6190641112625599e-03</internalNodes>\n          <leafValues>\n            4.2386838793754578e-01 6.6397482156753540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 187 -1.9817110151052475e-02</internalNodes>\n          <leafValues>\n            2.1500380337238312e-01 5.3823578357696533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 188 -3.8154039066284895e-03</internalNodes>\n          <leafValues>\n            6.6757112741470337e-01 4.2152971029281616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 189 -4.9775829538702965e-03</internalNodes>\n          <leafValues>\n            2.2672890126705170e-01 5.3863281011581421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 190 2.2441020701080561e-03</internalNodes>\n          <leafValues>\n            4.3086910247802734e-01 6.8557357788085938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 191 1.2282459996640682e-02</internalNodes>\n          <leafValues>\n            5.8366149663925171e-01 3.4674790501594543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 192 -2.8548699337989092e-03</internalNodes>\n          <leafValues>\n            7.0169448852539062e-01 4.3114539980888367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 193 -3.7875669077038765e-03</internalNodes>\n          <leafValues>\n            2.8953450918197632e-01 5.2249461412429810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 194 -1.2201230274513364e-03</internalNodes>\n          <leafValues>\n            2.9755708575248718e-01 5.4816448688507080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 195 1.0160599835216999e-02</internalNodes>\n          <leafValues>\n            4.8888179659843445e-01 8.1826978921890259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 196 -1.6174569725990295e-02</internalNodes>\n          <leafValues>\n            1.4814929664134979e-01 5.2399927377700806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 197 1.9292460754513741e-02</internalNodes>\n          <leafValues>\n            4.7863098978996277e-01 7.3781907558441162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 198 -3.2479539513587952e-03</internalNodes>\n          <leafValues>\n            7.3742228746414185e-01 4.4706439971923828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 199 -9.3803480267524719e-03</internalNodes>\n          <leafValues>\n            3.4891548752784729e-01 5.5379962921142578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 200 -1.2606129981577396e-02</internalNodes>\n          <leafValues>\n            2.3796869814395905e-01 5.3154432773590088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 201 -2.5621930137276649e-02</internalNodes>\n          <leafValues>\n            1.9646880030632019e-01 5.1387697458267212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 202 -7.5741496402770281e-05</internalNodes>\n          <leafValues>\n            5.5905228853225708e-01 3.3658531308174133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 203 -8.9210882782936096e-02</internalNodes>\n          <leafValues>\n            6.3404656946659088e-02 5.1626348495483398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 204 -2.7670480776578188e-03</internalNodes>\n          <leafValues>\n            7.3234677314758301e-01 4.4907060265541077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 205 2.7152578695677221e-04</internalNodes>\n          <leafValues>\n            4.1148349642753601e-01 5.9855180978775024e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>51</maxWeakCount>\n      <stageThreshold>2.4527879714965820e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 206 1.4786219689995050e-03</internalNodes>\n          <leafValues>\n            2.6635450124740601e-01 6.6433167457580566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 207 -1.8741659587249160e-03</internalNodes>\n          <leafValues>\n            6.1438488960266113e-01 2.5185129046440125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 208 -1.7151009524241090e-03</internalNodes>\n          <leafValues>\n            5.7663410902023315e-01 2.3974630236625671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 209 -1.8939269939437509e-03</internalNodes>\n          <leafValues>\n            5.6820458173751831e-01 2.5291448831558228e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 210 -5.3006052039563656e-03</internalNodes>\n          <leafValues>\n            1.6406759619712830e-01 5.5560797452926636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 211 -4.6662531793117523e-02</internalNodes>\n          <leafValues>\n            6.1231541633605957e-01 4.7628301382064819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 212 -7.9431332414969802e-04</internalNodes>\n          <leafValues>\n            5.7078588008880615e-01 2.8394040465354919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 213 1.4891670085489750e-02</internalNodes>\n          <leafValues>\n            4.0896728634834290e-01 6.0063672065734863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 214 -1.2046529445797205e-03</internalNodes>\n          <leafValues>\n            5.7124507427215576e-01 2.7052891254425049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 215 6.0619381256401539e-03</internalNodes>\n          <leafValues>\n            5.2625042200088501e-01 3.2622259855270386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 216 -2.5286648888140917e-03</internalNodes>\n          <leafValues>\n            6.8538308143615723e-01 4.1992568969726562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 217 -5.9010218828916550e-03</internalNodes>\n          <leafValues>\n            3.2662820816040039e-01 5.4348129034042358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 218 5.6702760048210621e-03</internalNodes>\n          <leafValues>\n            5.4684108495712280e-01 2.3190039396286011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 219 -3.0304100364446640e-03</internalNodes>\n          <leafValues>\n            5.5706679821014404e-01 2.7082380652427673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 220 2.9803649522364140e-03</internalNodes>\n          <leafValues>\n            3.7005689740180969e-01 5.8906257152557373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 221 -7.5840510427951813e-02</internalNodes>\n          <leafValues>\n            2.1400700509548187e-01 5.4199481010437012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 222 1.9262539222836494e-02</internalNodes>\n          <leafValues>\n            5.5267721414566040e-01 2.7265900373458862e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 223 1.8888259364757687e-04</internalNodes>\n          <leafValues>\n            3.9580118656158447e-01 6.0172098875045776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 224 2.9369549825787544e-02</internalNodes>\n          <leafValues>\n            5.2413737773895264e-01 1.4357580244541168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 225 1.0417619487270713e-03</internalNodes>\n          <leafValues>\n            3.3854091167449951e-01 5.9299832582473755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 226 2.6125640142709017e-03</internalNodes>\n          <leafValues>\n            5.4853779077529907e-01 3.0215978622436523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 227 9.6977467183023691e-04</internalNodes>\n          <leafValues>\n            3.3752760291099548e-01 5.5320328474044800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 228 5.9512659208849072e-04</internalNodes>\n          <leafValues>\n            5.6317430734634399e-01 3.3593991398811340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 229 -1.0156559944152832e-01</internalNodes>\n          <leafValues>\n            6.3735038042068481e-02 5.2304250001907349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 230 3.6156699061393738e-02</internalNodes>\n          <leafValues>\n            5.1369631290435791e-01 1.0295289754867554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 231 3.4624140243977308e-03</internalNodes>\n          <leafValues>\n            3.8793200254440308e-01 5.5582892894744873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 232 1.9554980099201202e-02</internalNodes>\n          <leafValues>\n            5.2500867843627930e-01 1.8758599460124969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 233 -2.3121440317481756e-03</internalNodes>\n          <leafValues>\n            6.6720288991928101e-01 4.6796411275863647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 234 -1.8605289515107870e-03</internalNodes>\n          <leafValues>\n            7.1633791923522949e-01 4.3346709012985229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 235 -9.4026362057775259e-04</internalNodes>\n          <leafValues>\n            3.0213609337806702e-01 5.6502032279968262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 236 -5.2418331615626812e-03</internalNodes>\n          <leafValues>\n            1.8200090527534485e-01 5.2502560615539551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 237 1.1729019752237946e-04</internalNodes>\n          <leafValues>\n            3.3891880512237549e-01 5.4459732770919800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 238 1.1878840159624815e-03</internalNodes>\n          <leafValues>\n            4.0853491425514221e-01 6.2535631656646729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 239 -1.0881359688937664e-02</internalNodes>\n          <leafValues>\n            3.3783990144729614e-01 5.7000827789306641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 240 1.7354859737679362e-03</internalNodes>\n          <leafValues>\n            4.2046359181404114e-01 6.5230387449264526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 241 -6.5119052305817604e-03</internalNodes>\n          <leafValues>\n            2.5952160358428955e-01 5.4281437397003174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 242 -1.2136430013924837e-03</internalNodes>\n          <leafValues>\n            6.1651438474655151e-01 3.9778938889503479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 243 -1.0354240424931049e-02</internalNodes>\n          <leafValues>\n            1.6280280053615570e-01 5.2195048332214355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 244 5.5858830455690622e-04</internalNodes>\n          <leafValues>\n            3.1996509432792664e-01 5.5035740137100220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 245 1.5299649909138680e-02</internalNodes>\n          <leafValues>\n            4.1039940714836121e-01 6.1223882436752319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 246 -2.1588210016489029e-02</internalNodes>\n          <leafValues>\n            1.0349129885435104e-01 5.1973849534988403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 247 -1.2834629416465759e-01</internalNodes>\n          <leafValues>\n            8.4938651323318481e-01 4.8931029438972473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 248 -2.2927189711481333e-03</internalNodes>\n          <leafValues>\n            3.1301578879356384e-01 5.4715752601623535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 249 7.9915106296539307e-02</internalNodes>\n          <leafValues>\n            4.8563209176063538e-01 6.0739892721176147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 250 -7.9441092908382416e-02</internalNodes>\n          <leafValues>\n            8.3946740627288818e-01 4.6245330572128296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 251 -5.2800010889768600e-03</internalNodes>\n          <leafValues>\n            1.8816959857940674e-01 5.3066980838775635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 252 1.0463109938427806e-03</internalNodes>\n          <leafValues>\n            5.2712291479110718e-01 2.5830659270286560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 253 2.6317298761568964e-04</internalNodes>\n          <leafValues>\n            4.2353048920631409e-01 5.7354408502578735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 254 -3.6173160187900066e-03</internalNodes>\n          <leafValues>\n            6.9343960285186768e-01 4.4954448938369751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 255 1.1421879753470421e-02</internalNodes>\n          <leafValues>\n            5.9009212255477905e-01 4.1381931304931641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 256 -1.9963278900831938e-03</internalNodes>\n          <leafValues>\n            6.4663827419281006e-01 4.3272399902343750e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>56</maxWeakCount>\n      <stageThreshold>2.7153350830078125e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 257 -9.9691245704889297e-03</internalNodes>\n          <leafValues>\n            6.1423242092132568e-01 2.4822120368480682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 258 7.3073059320449829e-04</internalNodes>\n          <leafValues>\n            5.7049518823623657e-01 2.3219659924507141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 259 6.4045301405712962e-04</internalNodes>\n          <leafValues>\n            2.1122519671916962e-01 5.8149331808090210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 260 4.5424019917845726e-03</internalNodes>\n          <leafValues>\n            2.9504820704460144e-01 5.8663117885589600e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 261 9.2477443104144186e-05</internalNodes>\n          <leafValues>\n            2.9909908771514893e-01 5.7913267612457275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 262 -8.6603146046400070e-03</internalNodes>\n          <leafValues>\n            2.8130298852920532e-01 5.6355422735214233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 263 8.0515816807746887e-03</internalNodes>\n          <leafValues>\n            3.5353690385818481e-01 6.0547572374343872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 264 4.3835240649059415e-04</internalNodes>\n          <leafValues>\n            5.5965322256088257e-01 2.7315109968185425e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 265 -9.8168973636347800e-05</internalNodes>\n          <leafValues>\n            5.9780317544937134e-01 3.6385610699653625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 266 -1.1298790341243148e-03</internalNodes>\n          <leafValues>\n            2.7552521228790283e-01 5.4327291250228882e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 267 6.4356150105595589e-03</internalNodes>\n          <leafValues>\n            4.3056419491767883e-01 7.0698332786560059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 268 -5.6829329580068588e-02</internalNodes>\n          <leafValues>\n            2.4952429533004761e-01 5.2949970960617065e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 269 4.0668169967830181e-03</internalNodes>\n          <leafValues>\n            5.4785531759262085e-01 2.4977239966392517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 270 4.8164798499783501e-05</internalNodes>\n          <leafValues>\n            3.9386010169982910e-01 5.7063561677932739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 271 6.1795017682015896e-03</internalNodes>\n          <leafValues>\n            4.4076061248779297e-01 7.3947668075561523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 272 6.4985752105712891e-03</internalNodes>\n          <leafValues>\n            5.4452431201934814e-01 2.4791529774665833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 273 -1.0211090557277203e-03</internalNodes>\n          <leafValues>\n            2.5447669625282288e-01 5.3389710187911987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 274 -5.4247528314590454e-03</internalNodes>\n          <leafValues>\n            2.7188581228256226e-01 5.3240692615509033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 275 -1.0559899965301156e-03</internalNodes>\n          <leafValues>\n            3.1782880425453186e-01 5.5345088243484497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 276 6.6465808777138591e-04</internalNodes>\n          <leafValues>\n            4.2842191457748413e-01 6.5581941604614258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 277 -2.7524109464138746e-04</internalNodes>\n          <leafValues>\n            5.9028607606887817e-01 3.8102629780769348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 278 4.2293202131986618e-03</internalNodes>\n          <leafValues>\n            3.8164898753166199e-01 5.7093858718872070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 279 -3.2868210691958666e-03</internalNodes>\n          <leafValues>\n            1.7477439343929291e-01 5.2595442533493042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 280 1.5611879643984139e-04</internalNodes>\n          <leafValues>\n            3.6017221212387085e-01 5.7256120443344116e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 281 -7.3621381488919724e-06</internalNodes>\n          <leafValues>\n            5.4018580913543701e-01 3.0444970726966858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 282 -1.4767250046133995e-02</internalNodes>\n          <leafValues>\n            3.2207700610160828e-01 5.5734348297119141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 283 2.4489590898156166e-02</internalNodes>\n          <leafValues>\n            4.3015280365943909e-01 6.5188127756118774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 284 -3.7652091123163700e-04</internalNodes>\n          <leafValues>\n            3.5645830631256104e-01 5.5982369184494019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 285 7.3657688517414499e-06</internalNodes>\n          <leafValues>\n            3.4907829761505127e-01 5.5618977546691895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 286 -1.5099939890205860e-02</internalNodes>\n          <leafValues>\n            1.7762720584869385e-01 5.3352999687194824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 287 -3.8316650316119194e-03</internalNodes>\n          <leafValues>\n            6.1496877670288086e-01 4.2213940620422363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 288 1.6925400123000145e-02</internalNodes>\n          <leafValues>\n            5.4130148887634277e-01 2.1665850281715393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 289 -3.0477850232273340e-03</internalNodes>\n          <leafValues>\n            6.4494907855987549e-01 4.3546178936958313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 290 3.2140589319169521e-03</internalNodes>\n          <leafValues>\n            5.4001551866531372e-01 3.5232171416282654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 291 -4.0023201145231724e-03</internalNodes>\n          <leafValues>\n            2.7745240926742554e-01 5.3384172916412354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 292 7.4182129465043545e-03</internalNodes>\n          <leafValues>\n            5.6767392158508301e-01 3.7028178572654724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 293 -8.8764587417244911e-03</internalNodes>\n          <leafValues>\n            7.7492219209671021e-01 4.5836889743804932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 294 2.7311739977449179e-03</internalNodes>\n          <leafValues>\n            5.3387218713760376e-01 3.9966610074043274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 295 -2.5082379579544067e-03</internalNodes>\n          <leafValues>\n            5.6119632720947266e-01 3.7774989008903503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 296 -8.0541074275970459e-03</internalNodes>\n          <leafValues>\n            2.9152289032936096e-01 5.1791828870773315e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 297 -9.7938813269138336e-04</internalNodes>\n          <leafValues>\n            5.5364328622817993e-01 3.7001928687095642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 298 -5.8745909482240677e-03</internalNodes>\n          <leafValues>\n            3.7543910741806030e-01 5.6793761253356934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 299 -4.4936719350516796e-03</internalNodes>\n          <leafValues>\n            7.0196992158889771e-01 4.4809499382972717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 300 -5.4389229044318199e-03</internalNodes>\n          <leafValues>\n            2.3103649914264679e-01 5.3133869171142578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 301 -7.5094640487805009e-04</internalNodes>\n          <leafValues>\n            5.8648687601089478e-01 4.1293430328369141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 302 1.4528800420521293e-05</internalNodes>\n          <leafValues>\n            3.7324070930480957e-01 5.6196212768554688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 303 4.0758069604635239e-02</internalNodes>\n          <leafValues>\n            5.3120911121368408e-01 2.7205219864845276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 304 6.6505931317806244e-03</internalNodes>\n          <leafValues>\n            4.7100159525871277e-01 6.6934937238693237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 305 4.5759351924061775e-03</internalNodes>\n          <leafValues>\n            5.1678192615509033e-01 1.6372759640216827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 306 6.5269311890006065e-03</internalNodes>\n          <leafValues>\n            5.3976088762283325e-01 2.9385319352149963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 307 -1.3660379685461521e-02</internalNodes>\n          <leafValues>\n            7.0864880084991455e-01 4.5322000980377197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 308 2.7358869090676308e-02</internalNodes>\n          <leafValues>\n            5.2064812183380127e-01 3.5892319679260254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 309 6.2197551596909761e-04</internalNodes>\n          <leafValues>\n            3.5070759057998657e-01 5.4411232471466064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 310 -3.3077080734074116e-03</internalNodes>\n          <leafValues>\n            5.8595228195190430e-01 4.0248918533325195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 311 -1.0631109587848186e-02</internalNodes>\n          <leafValues>\n            6.7432671785354614e-01 4.4226029515266418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 312 1.9441649317741394e-02</internalNodes>\n          <leafValues>\n            5.2827161550521851e-01 1.7979049682617188e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>71</maxWeakCount>\n      <stageThreshold>3.4554111480712891e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 313 -5.5052167735993862e-03</internalNodes>\n          <leafValues>\n            5.9147310256958008e-01 2.6265591382980347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 314 1.9562279339879751e-03</internalNodes>\n          <leafValues>\n            2.3125819861888885e-01 5.7416272163391113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 315 -8.8924784213304520e-03</internalNodes>\n          <leafValues>\n            1.6565300524234772e-01 5.6266540288925171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 316 8.3638377487659454e-02</internalNodes>\n          <leafValues>\n            5.4234498739242554e-01 1.9572949409484863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 317 1.2282270472496748e-03</internalNodes>\n          <leafValues>\n            3.4179040789604187e-01 5.9925037622451782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 318 5.7629169896245003e-03</internalNodes>\n          <leafValues>\n            3.7195819616317749e-01 6.0799038410186768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 319 -1.6417410224676132e-03</internalNodes>\n          <leafValues>\n            2.5774860382080078e-01 5.5769157409667969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 320 3.4113149158656597e-03</internalNodes>\n          <leafValues>\n            2.9507490992546082e-01 5.5141717195510864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 321 -1.1069320142269135e-02</internalNodes>\n          <leafValues>\n            7.5693589448928833e-01 4.4770789146423340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 322 3.4865971654653549e-02</internalNodes>\n          <leafValues>\n            5.5837088823318481e-01 2.6696211099624634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 323 6.5701099811121821e-04</internalNodes>\n          <leafValues>\n            5.6273132562637329e-01 2.9888901114463806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 324 -2.4339130148291588e-02</internalNodes>\n          <leafValues>\n            2.7711850404739380e-01 5.1088631153106689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 325 5.9435202274471521e-04</internalNodes>\n          <leafValues>\n            5.5806517601013184e-01 3.1203418970108032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 326 2.2971509024500847e-03</internalNodes>\n          <leafValues>\n            3.3302500844001770e-01 5.6790757179260254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 327 -3.7801829166710377e-03</internalNodes>\n          <leafValues>\n            2.9905349016189575e-01 5.3448081016540527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 328 -1.3420669734477997e-01</internalNodes>\n          <leafValues>\n            1.4638589322566986e-01 5.3925681114196777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 329 7.5224548345431685e-04</internalNodes>\n          <leafValues>\n            3.7469539046287537e-01 5.6927347183227539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 330 -4.0545541793107986e-02</internalNodes>\n          <leafValues>\n            2.7547478675842285e-01 5.4842978715896606e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 331 1.2572970008477569e-03</internalNodes>\n          <leafValues>\n            3.7445840239524841e-01 5.7560759782791138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 332 -7.4249948374927044e-03</internalNodes>\n          <leafValues>\n            7.5138592720031738e-01 4.7282311320304871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 333 5.0908129196614027e-04</internalNodes>\n          <leafValues>\n            5.4048967361450195e-01 2.9323211312294006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 334 -1.2808450264856219e-03</internalNodes>\n          <leafValues>\n            6.1697798967361450e-01 4.2733490467071533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 335 -1.8348860321566463e-03</internalNodes>\n          <leafValues>\n            2.0484960079193115e-01 5.2064722776412964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 336 2.7484869584441185e-02</internalNodes>\n          <leafValues>\n            5.2529847621917725e-01 1.6755220293998718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 337 2.2372419480234385e-03</internalNodes>\n          <leafValues>\n            5.2677828073501587e-01 2.7776581048965454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 338 -8.8635291904211044e-03</internalNodes>\n          <leafValues>\n            6.9545578956604004e-01 4.8120489716529846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 339 4.1753971017897129e-03</internalNodes>\n          <leafValues>\n            4.2918878793716431e-01 6.3491958379745483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 340 -1.7098189564421773e-03</internalNodes>\n          <leafValues>\n            2.9305368661880493e-01 5.3612488508224487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 341 6.5328548662364483e-03</internalNodes>\n          <leafValues>\n            4.4953250885009766e-01 7.4096941947937012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 342 -9.5372907817363739e-03</internalNodes>\n          <leafValues>\n            3.1491199135780334e-01 5.4165017604827881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 343 2.5310989469289780e-02</internalNodes>\n          <leafValues>\n            5.1218920946121216e-01 1.3117079436779022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 344 3.6460969597101212e-02</internalNodes>\n          <leafValues>\n            5.1759117841720581e-01 2.5913399457931519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 345 2.0854329690337181e-02</internalNodes>\n          <leafValues>\n            5.1371401548385620e-01 1.5823160111904144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 346 -8.7207747856155038e-04</internalNodes>\n          <leafValues>\n            5.5743098258972168e-01 4.3989789485931396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 347 -1.5227000403683633e-05</internalNodes>\n          <leafValues>\n            5.5489408969879150e-01 3.7080699205398560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 348 -8.4316509310156107e-04</internalNodes>\n          <leafValues>\n            3.3874198794364929e-01 5.5542111396789551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 349 3.6037859972566366e-03</internalNodes>\n          <leafValues>\n            5.3580617904663086e-01 3.4111711382865906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 350 -6.8057891912758350e-03</internalNodes>\n          <leafValues>\n            6.1252027750015259e-01 4.3458628654479980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 351 -4.7021660953760147e-02</internalNodes>\n          <leafValues>\n            2.3581659793853760e-01 5.1937389373779297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 352 -3.6954108625650406e-02</internalNodes>\n          <leafValues>\n            7.3231112957000732e-01 4.7609439492225647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 353 1.0439479956403375e-03</internalNodes>\n          <leafValues>\n            5.4194551706314087e-01 3.4113308787345886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 354 -2.1050689974799752e-04</internalNodes>\n          <leafValues>\n            2.8216940164566040e-01 5.5549472570419312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 355 -8.0831587314605713e-02</internalNodes>\n          <leafValues>\n            9.1299301385879517e-01 4.6974349021911621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 356 -3.6579059087671340e-04</internalNodes>\n          <leafValues>\n            6.0226702690124512e-01 3.9782929420471191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 357 -1.2545920617412776e-04</internalNodes>\n          <leafValues>\n            5.6132131814956665e-01 3.8455399870872498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 358 -6.8786486983299255e-02</internalNodes>\n          <leafValues>\n            2.2616119682788849e-01 5.3004968166351318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 359 1.2415789999067783e-02</internalNodes>\n          <leafValues>\n            4.0756919980049133e-01 5.8288121223449707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 360 -4.7174817882478237e-03</internalNodes>\n          <leafValues>\n            2.8272539377212524e-01 5.2677577733993530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 361 3.8136858493089676e-02</internalNodes>\n          <leafValues>\n            5.0747412443161011e-01 1.0236159712076187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 362 -2.8168049175292253e-03</internalNodes>\n          <leafValues>\n            6.1690068244934082e-01 4.3596929311752319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 363 8.1303603947162628e-03</internalNodes>\n          <leafValues>\n            4.5244330167770386e-01 7.6060950756072998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 364 6.0056019574403763e-03</internalNodes>\n          <leafValues>\n            5.2404087781906128e-01 1.8597120046615601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 365 1.9139319658279419e-02</internalNodes>\n          <leafValues>\n            5.2093791961669922e-01 2.3320719599723816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 366 1.6445759683847427e-02</internalNodes>\n          <leafValues>\n            5.4507029056549072e-01 3.2642349600791931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 367 -3.7356890738010406e-02</internalNodes>\n          <leafValues>\n            6.9990468025207520e-01 4.5332419872283936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 368 -1.9727900624275208e-02</internalNodes>\n          <leafValues>\n            2.6536649465560913e-01 5.4128098487854004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 369 6.6972579807043076e-03</internalNodes>\n          <leafValues>\n            4.4805660843849182e-01 7.1386522054672241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 370 7.4457528535276651e-04</internalNodes>\n          <leafValues>\n            4.2313501238822937e-01 5.4713201522827148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 371 1.1790640419349074e-03</internalNodes>\n          <leafValues>\n            5.3417021036148071e-01 3.1304550170898438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 372 3.4980610013008118e-02</internalNodes>\n          <leafValues>\n            5.1186597347259521e-01 3.4305301308631897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 373 5.6859792675822973e-04</internalNodes>\n          <leafValues>\n            3.5321870446205139e-01 5.4686397314071655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 374 -1.1340649798512459e-02</internalNodes>\n          <leafValues>\n            2.8423538804054260e-01 5.3487008810043335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 375 -6.6228108480572701e-03</internalNodes>\n          <leafValues>\n            6.8836402893066406e-01 4.4926649332046509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 376 -8.0160330981016159e-03</internalNodes>\n          <leafValues>\n            1.7098939418792725e-01 5.2243089675903320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 377 1.4206819469109178e-03</internalNodes>\n          <leafValues>\n            5.2908462285995483e-01 2.9933831095695496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 378 -2.7801711112260818e-03</internalNodes>\n          <leafValues>\n            6.4988541603088379e-01 4.4604998826980591e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 379 -1.4747589593753219e-03</internalNodes>\n          <leafValues>\n            3.2604381442070007e-01 5.3881132602691650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 380 -2.3830339312553406e-02</internalNodes>\n          <leafValues>\n            7.5289410352706909e-01 4.8012199997901917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 381 6.9369790144264698e-03</internalNodes>\n          <leafValues>\n            5.3351658582687378e-01 3.2614278793334961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 382 8.2806255668401718e-03</internalNodes>\n          <leafValues>\n            4.5803940296173096e-01 5.7378298044204712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 383 -1.0439500212669373e-02</internalNodes>\n          <leafValues>\n            2.5923201441764832e-01 5.2338278293609619e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>80</maxWeakCount>\n      <stageThreshold>3.9107288360595703e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 384 7.2006587870419025e-03</internalNodes>\n          <leafValues>\n            3.2588860392570496e-01 6.8498080968856812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 385 -2.8593589086085558e-03</internalNodes>\n          <leafValues>\n            5.8388811349868774e-01 2.5378298759460449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 386 6.8580528022721410e-04</internalNodes>\n          <leafValues>\n            5.7080817222595215e-01 2.8124240040779114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 387 7.9580191522836685e-03</internalNodes>\n          <leafValues>\n            2.5010511279106140e-01 5.5442607402801514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 388 -1.2124150525778532e-03</internalNodes>\n          <leafValues>\n            2.3853680491447449e-01 5.4333502054214478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 389 7.9426132142543793e-03</internalNodes>\n          <leafValues>\n            3.9550709724426270e-01 6.2207579612731934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 390 2.4630590341985226e-03</internalNodes>\n          <leafValues>\n            5.6397080421447754e-01 2.9923579096794128e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 391 -6.0396599583327770e-03</internalNodes>\n          <leafValues>\n            2.1865129470825195e-01 5.4116767644882202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 392 -1.2988339876756072e-03</internalNodes>\n          <leafValues>\n            2.3507060110569000e-01 5.3645849227905273e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 393 2.2299369447864592e-04</internalNodes>\n          <leafValues>\n            3.8041129708290100e-01 5.7296061515808105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 394 1.4654280385002494e-03</internalNodes>\n          <leafValues>\n            2.5101679563522339e-01 5.2582687139511108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 395 -8.1210042117163539e-04</internalNodes>\n          <leafValues>\n            5.9928238391876221e-01 3.8511589169502258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 396 -1.3836020370945334e-03</internalNodes>\n          <leafValues>\n            5.6813961267471313e-01 3.6365869641304016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 397 -2.7936449274420738e-02</internalNodes>\n          <leafValues>\n            1.4913170039653778e-01 5.3775602579116821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 398 -4.6919551095925272e-04</internalNodes>\n          <leafValues>\n            3.6924299597740173e-01 5.5724847316741943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 399 -4.9829659983515739e-03</internalNodes>\n          <leafValues>\n            6.7585092782974243e-01 4.5325040817260742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 400 1.8815309740602970e-03</internalNodes>\n          <leafValues>\n            5.3680229187011719e-01 2.9325398802757263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 401 -1.9067550078034401e-02</internalNodes>\n          <leafValues>\n            1.6493770480155945e-01 5.3300672769546509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 402 -4.6906559728085995e-03</internalNodes>\n          <leafValues>\n            1.9639259576797485e-01 5.1193618774414062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 403 5.9777139686048031e-03</internalNodes>\n          <leafValues>\n            4.6711719036102295e-01 7.0083981752395630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 404 -3.3303130418062210e-02</internalNodes>\n          <leafValues>\n            1.1554169654846191e-01 5.1041620969772339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 405 9.0744107961654663e-02</internalNodes>\n          <leafValues>\n            5.1496601104736328e-01 1.3061730563640594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 406 9.3555898638442159e-04</internalNodes>\n          <leafValues>\n            3.6054810881614685e-01 5.4398590326309204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 407 1.4901650138199329e-02</internalNodes>\n          <leafValues>\n            4.8862120509147644e-01 7.6875698566436768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 408 6.1594118596985936e-04</internalNodes>\n          <leafValues>\n            5.3568130731582642e-01 3.2409390807151794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 409 -5.0670988857746124e-02</internalNodes>\n          <leafValues>\n            1.8486219644546509e-01 5.2304041385650635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 410 6.8665749859064817e-04</internalNodes>\n          <leafValues>\n            3.8405799865722656e-01 5.5179458856582642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 411 8.3712432533502579e-03</internalNodes>\n          <leafValues>\n            4.2885640263557434e-01 6.1317539215087891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 412 -1.2953069526702166e-03</internalNodes>\n          <leafValues>\n            2.9136741161346436e-01 5.2807378768920898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 413 -4.1941680014133453e-02</internalNodes>\n          <leafValues>\n            7.5547999143600464e-01 4.8560309410095215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 414 -2.3529380559921265e-02</internalNodes>\n          <leafValues>\n            2.8382799029350281e-01 5.2560812234878540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 415 4.0857449173927307e-02</internalNodes>\n          <leafValues>\n            4.8709350824356079e-01 6.2772971391677856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 416 -2.5406869128346443e-02</internalNodes>\n          <leafValues>\n            7.0997077226638794e-01 4.5750290155410767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 417 -4.1415440500713885e-04</internalNodes>\n          <leafValues>\n            4.0308868885040283e-01 5.4694122076034546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 418 2.1824119612574577e-02</internalNodes>\n          <leafValues>\n            4.5020240545272827e-01 6.7687010765075684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 419 1.4114039950072765e-02</internalNodes>\n          <leafValues>\n            5.4428607225418091e-01 3.7917000055313110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 420 6.7214590671937913e-05</internalNodes>\n          <leafValues>\n            4.2004638910293579e-01 5.8734762668609619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 421 -7.9417638480663300e-03</internalNodes>\n          <leafValues>\n            3.7925618886947632e-01 5.5852657556533813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 422 -7.2144409641623497e-03</internalNodes>\n          <leafValues>\n            7.2531038522720337e-01 4.6035489439964294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 423 2.5817339774221182e-03</internalNodes>\n          <leafValues>\n            4.6933019161224365e-01 5.9002387523651123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 424 1.3409319519996643e-01</internalNodes>\n          <leafValues>\n            5.1492130756378174e-01 1.8088449537754059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 425 2.2962710354477167e-03</internalNodes>\n          <leafValues>\n            5.3997439146041870e-01 3.7178671360015869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 426 -2.1575849968940020e-03</internalNodes>\n          <leafValues>\n            2.4084959924221039e-01 5.1488637924194336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 427 -4.9196188338100910e-03</internalNodes>\n          <leafValues>\n            6.5735882520675659e-01 4.7387400269508362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 428 1.6267469618469477e-03</internalNodes>\n          <leafValues>\n            4.1928219795227051e-01 6.3031142950057983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 429 3.3413388882763684e-04</internalNodes>\n          <leafValues>\n            5.5402982234954834e-01 3.7021011114120483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 430 -2.6698080822825432e-02</internalNodes>\n          <leafValues>\n            1.7109179496765137e-01 5.1014107465744019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 431 -3.0561879277229309e-02</internalNodes>\n          <leafValues>\n            1.9042180478572845e-01 5.1687937974929810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 432 2.8511548880487680e-03</internalNodes>\n          <leafValues>\n            4.4475069642066956e-01 6.3138538599014282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 433 -3.6211479455232620e-02</internalNodes>\n          <leafValues>\n            2.4907270073890686e-01 5.3773492574691772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 434 -2.4115189444273710e-03</internalNodes>\n          <leafValues>\n            5.3812432289123535e-01 3.6642369627952576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 435 -7.7253201743587852e-04</internalNodes>\n          <leafValues>\n            5.5302321910858154e-01 3.5415500402450562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 436 2.9481729143299162e-04</internalNodes>\n          <leafValues>\n            4.1326990723609924e-01 5.6672430038452148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 437 -6.2334560789167881e-03</internalNodes>\n          <leafValues>\n            9.8787233233451843e-02 5.1986688375473022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 438 -2.6274729520082474e-02</internalNodes>\n          <leafValues>\n            9.1127492487430573e-02 5.0281071662902832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 439 5.3212260827422142e-03</internalNodes>\n          <leafValues>\n            4.7266489267349243e-01 6.2227207422256470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 440 -4.1129058226943016e-03</internalNodes>\n          <leafValues>\n            2.1574570238590240e-01 5.1378047466278076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 441 3.2457809429615736e-03</internalNodes>\n          <leafValues>\n            5.4107707738876343e-01 3.7217769026756287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 442 -1.6359709203243256e-02</internalNodes>\n          <leafValues>\n            7.7878749370574951e-01 4.6852919459342957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 443 3.2166109303943813e-04</internalNodes>\n          <leafValues>\n            5.4789870977401733e-01 4.2403739690780640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 444 6.4452440710738301e-04</internalNodes>\n          <leafValues>\n            5.3305608034133911e-01 3.5013249516487122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 445 -7.8909732401371002e-03</internalNodes>\n          <leafValues>\n            6.9235211610794067e-01 4.7265690565109253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 446 4.8336211591959000e-02</internalNodes>\n          <leafValues>\n            5.0559002161026001e-01 7.5749203562736511e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 447 -7.5178127735853195e-04</internalNodes>\n          <leafValues>\n            3.7837418913841248e-01 5.5385738611221313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 448 -2.4953910615295172e-03</internalNodes>\n          <leafValues>\n            3.0816510319709778e-01 5.3596121072769165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 449 -2.2385010961443186e-03</internalNodes>\n          <leafValues>\n            6.6339588165283203e-01 4.6493428945541382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 450 -1.7988430336117744e-03</internalNodes>\n          <leafValues>\n            6.5968447923660278e-01 4.3471878767013550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 451 8.7860915809869766e-03</internalNodes>\n          <leafValues>\n            5.2318328619003296e-01 2.3155799508094788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 452 3.6715380847454071e-03</internalNodes>\n          <leafValues>\n            5.2042502164840698e-01 2.9773768782615662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 453 -3.5336449742317200e-02</internalNodes>\n          <leafValues>\n            7.2388780117034912e-01 4.8615050315856934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 454 -6.9189240457490087e-04</internalNodes>\n          <leafValues>\n            3.1050220131874084e-01 5.2298247814178467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 455 -3.3946109469980001e-03</internalNodes>\n          <leafValues>\n            3.1389680504798889e-01 5.2101737260818481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 456 9.8569283727556467e-04</internalNodes>\n          <leafValues>\n            4.5365801453590393e-01 6.5850979089736938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 457 -5.0163101404905319e-02</internalNodes>\n          <leafValues>\n            1.8044540286064148e-01 5.1989167928695679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 458 -2.2367259953171015e-03</internalNodes>\n          <leafValues>\n            7.2557020187377930e-01 4.6513590216636658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 459 7.4326287722215056e-04</internalNodes>\n          <leafValues>\n            4.4129210710525513e-01 5.8985459804534912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 460 -9.3485182151198387e-04</internalNodes>\n          <leafValues>\n            3.5000529885292053e-01 5.3660178184509277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 461 1.7497939988970757e-02</internalNodes>\n          <leafValues>\n            4.9121949076652527e-01 8.3152848482131958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 462 -1.5200000489130616e-03</internalNodes>\n          <leafValues>\n            3.5702759027481079e-01 5.3705602884292603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 463 7.8003940870985389e-04</internalNodes>\n          <leafValues>\n            4.3537721037864685e-01 5.9673351049423218e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>103</maxWeakCount>\n      <stageThreshold>5.0610481262207031e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 464 -9.9945552647113800e-03</internalNodes>\n          <leafValues>\n            6.1625832319259644e-01 3.0545330047607422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 465 -1.1085229925811291e-03</internalNodes>\n          <leafValues>\n            5.8182948827743530e-01 3.1555780768394470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 466 1.0364380432292819e-03</internalNodes>\n          <leafValues>\n            2.5520521402359009e-01 5.6929117441177368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 467 6.8211311008781195e-04</internalNodes>\n          <leafValues>\n            3.6850899457931519e-01 5.9349310398101807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 468 -6.8057340104132891e-04</internalNodes>\n          <leafValues>\n            2.3323920369148254e-01 5.4747921228408813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 469 2.6068789884448051e-04</internalNodes>\n          <leafValues>\n            3.2574570178985596e-01 5.6675457954406738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 470 5.1607372006401420e-04</internalNodes>\n          <leafValues>\n            3.7447169423103333e-01 5.8454728126525879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 471 8.5007521556690335e-04</internalNodes>\n          <leafValues>\n            3.4203711152076721e-01 5.5228072404861450e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 472 -1.8607829697430134e-03</internalNodes>\n          <leafValues>\n            2.8044199943542480e-01 5.3754240274429321e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 473 -1.5033970121294260e-03</internalNodes>\n          <leafValues>\n            2.5790509581565857e-01 5.4989522695541382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 474 2.3478909861296415e-03</internalNodes>\n          <leafValues>\n            4.1751560568809509e-01 6.3137108087539673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 475 -2.8880240279249847e-04</internalNodes>\n          <leafValues>\n            5.8651697635650635e-01 4.0526661276817322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 476 8.9405477046966553e-03</internalNodes>\n          <leafValues>\n            5.2111411094665527e-01 2.3186540603637695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 477 -1.9327739253640175e-02</internalNodes>\n          <leafValues>\n            2.7534329891204834e-01 5.2415257692337036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 478 -2.0202060113660991e-04</internalNodes>\n          <leafValues>\n            5.7229787111282349e-01 3.6771959066390991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 479 2.1179069299250841e-03</internalNodes>\n          <leafValues>\n            4.4661080837249756e-01 5.5424308776855469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 480 -1.7743760254234076e-03</internalNodes>\n          <leafValues>\n            2.8132531046867371e-01 5.3009599447250366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 481 4.2234458960592747e-03</internalNodes>\n          <leafValues>\n            4.3997099995613098e-01 5.7954281568527222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 482 -1.4375220052897930e-02</internalNodes>\n          <leafValues>\n            2.9811179637908936e-01 5.2920591831207275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 483 -1.5349180437624454e-02</internalNodes>\n          <leafValues>\n            7.7052152156829834e-01 4.7481718659400940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 484 1.5152279956964776e-05</internalNodes>\n          <leafValues>\n            3.7188440561294556e-01 5.5768972635269165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 485 -9.1293919831514359e-03</internalNodes>\n          <leafValues>\n            3.6151960492134094e-01 5.2867668867111206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 486 2.2512159775942564e-03</internalNodes>\n          <leafValues>\n            5.3647047281265259e-01 3.4862980246543884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 487 -4.9696918576955795e-03</internalNodes>\n          <leafValues>\n            6.9276517629623413e-01 4.6768361330032349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 488 -1.2829010374844074e-02</internalNodes>\n          <leafValues>\n            7.7121537923812866e-01 4.6607351303100586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 489 -9.3660065904259682e-03</internalNodes>\n          <leafValues>\n            3.3749839663505554e-01 5.3512877225875854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 490 3.2452319283038378e-03</internalNodes>\n          <leafValues>\n            5.3251898288726807e-01 3.2896101474761963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 491 -1.1723560281097889e-02</internalNodes>\n          <leafValues>\n            6.8376529216766357e-01 4.7543001174926758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 492 2.9257940695970319e-05</internalNodes>\n          <leafValues>\n            3.5720878839492798e-01 5.3605020046234131e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 493 -2.2244219508138485e-05</internalNodes>\n          <leafValues>\n            5.5414271354675293e-01 3.5520640015602112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 494 5.0881509669125080e-03</internalNodes>\n          <leafValues>\n            5.0708442926406860e-01 1.2564620375633240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 495 2.7429679408669472e-02</internalNodes>\n          <leafValues>\n            5.2695602178573608e-01 1.6258180141448975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 496 -6.4142867922782898e-03</internalNodes>\n          <leafValues>\n            7.1455889940261841e-01 4.5841971039772034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 497 3.3479959238320589e-03</internalNodes>\n          <leafValues>\n            5.3986120223999023e-01 3.4946969151496887e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 498 -8.2635492086410522e-02</internalNodes>\n          <leafValues>\n            2.4391929805278778e-01 5.1602262258529663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 499 1.0261740535497665e-03</internalNodes>\n          <leafValues>\n            3.8868919014930725e-01 5.7679080963134766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 500 -1.6307090409100056e-03</internalNodes>\n          <leafValues>\n            3.3894580602645874e-01 5.3477007150650024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 501 2.4546680506318808e-03</internalNodes>\n          <leafValues>\n            4.6014139056205750e-01 6.3872468471527100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 502 -9.9476519972085953e-04</internalNodes>\n          <leafValues>\n            5.7698792219161987e-01 4.1203960776329041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 503 1.5409190207719803e-02</internalNodes>\n          <leafValues>\n            4.8787090182304382e-01 7.0898222923278809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 504 1.1784400558099151e-03</internalNodes>\n          <leafValues>\n            5.2635532617568970e-01 2.8952449560165405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 505 -2.7701919898390770e-02</internalNodes>\n          <leafValues>\n            1.4988289773464203e-01 5.2196067571640015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 506 -2.9505399987101555e-02</internalNodes>\n          <leafValues>\n            2.4893319234251976e-02 4.9998161196708679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 507 4.5159430010244250e-04</internalNodes>\n          <leafValues>\n            5.4646229743957520e-01 4.0296629071235657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 508 7.1772639639675617e-03</internalNodes>\n          <leafValues>\n            4.2710569500923157e-01 5.8662968873977661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 509 -7.4182048439979553e-02</internalNodes>\n          <leafValues>\n            6.8741792440414429e-01 4.9190279841423035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 510 -1.7254160717129707e-02</internalNodes>\n          <leafValues>\n            3.3706760406494141e-01 5.3487390279769897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 511 1.4851559884846210e-02</internalNodes>\n          <leafValues>\n            4.6267929673194885e-01 6.1299049854278564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 512 1.0002000257372856e-02</internalNodes>\n          <leafValues>\n            5.3461229801177979e-01 3.4234538674354553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 513 2.0138120744377375e-03</internalNodes>\n          <leafValues>\n            4.6438300609588623e-01 5.8243042230606079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 514 1.5135470312088728e-03</internalNodes>\n          <leafValues>\n            5.1963961124420166e-01 2.8561499714851379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 515 3.1381431035697460e-03</internalNodes>\n          <leafValues>\n            4.8381629586219788e-01 5.9585297107696533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 516 -5.1450440660119057e-03</internalNodes>\n          <leafValues>\n            8.9203029870986938e-01 4.7414121031761169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 517 -4.4736708514392376e-03</internalNodes>\n          <leafValues>\n            2.0339429378509521e-01 5.3372788429260254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 518 1.9628470763564110e-03</internalNodes>\n          <leafValues>\n            4.5716339349746704e-01 6.7258632183074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 519 5.4260450415313244e-03</internalNodes>\n          <leafValues>\n            5.2711081504821777e-01 2.8456708788871765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 520 4.9611460417509079e-04</internalNodes>\n          <leafValues>\n            4.1383129358291626e-01 5.7185977697372437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 521 9.3728788197040558e-03</internalNodes>\n          <leafValues>\n            5.2251511812210083e-01 2.8048470616340637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 522 6.0500897234305739e-04</internalNodes>\n          <leafValues>\n            5.2367687225341797e-01 3.3145239949226379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 523 5.6792551185935736e-04</internalNodes>\n          <leafValues>\n            4.5310598611831665e-01 6.2769711017608643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 524 2.4644339457154274e-02</internalNodes>\n          <leafValues>\n            5.1308518648147583e-01 2.0171439647674561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 525 -1.0290450416505337e-02</internalNodes>\n          <leafValues>\n            7.7865952253341675e-01 4.8766410350799561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 526 2.0629419013857841e-03</internalNodes>\n          <leafValues>\n            4.2885988950729370e-01 5.8812642097473145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 527 -5.0519481301307678e-03</internalNodes>\n          <leafValues>\n            3.5239779949188232e-01 5.2860087156295776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 528 -5.7692620903253555e-03</internalNodes>\n          <leafValues>\n            6.8410861492156982e-01 4.5880940556526184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 529 -4.5789941214025021e-04</internalNodes>\n          <leafValues>\n            3.5655200481414795e-01 5.4859781265258789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 530 -7.5918837683275342e-04</internalNodes>\n          <leafValues>\n            3.3687931299209595e-01 5.2541971206665039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 531 -1.7737259622663260e-03</internalNodes>\n          <leafValues>\n            3.4221610426902771e-01 5.4540151357650757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 532 -8.5610467940568924e-03</internalNodes>\n          <leafValues>\n            6.5336120128631592e-01 4.4858568906784058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 533 1.7277270089834929e-03</internalNodes>\n          <leafValues>\n            5.3075802326202393e-01 3.9253529906272888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 534 -2.8199609369039536e-02</internalNodes>\n          <leafValues>\n            6.8574589490890503e-01 4.5885840058326721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 535 -1.7781109781935811e-03</internalNodes>\n          <leafValues>\n            4.0378510951995850e-01 5.3698569536209106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 536 3.3177141449414194e-04</internalNodes>\n          <leafValues>\n            5.3997987508773804e-01 3.7057501077651978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 537 2.6385399978607893e-03</internalNodes>\n          <leafValues>\n            4.6654370427131653e-01 6.4527308940887451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 538 -2.1183069329708815e-03</internalNodes>\n          <leafValues>\n            5.9147810935974121e-01 4.0646770596504211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 539 -1.4773289673030376e-02</internalNodes>\n          <leafValues>\n            3.6420381069183350e-01 5.2947628498077393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 540 -1.6815440729260445e-02</internalNodes>\n          <leafValues>\n            2.6642319560050964e-01 5.1449728012084961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 541 -6.3370140269398689e-03</internalNodes>\n          <leafValues>\n            6.7795312404632568e-01 4.8520979285240173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 542 -4.4560048991115764e-05</internalNodes>\n          <leafValues>\n            5.6139647960662842e-01 4.1530540585517883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 543 -1.0240620467811823e-03</internalNodes>\n          <leafValues>\n            5.9644782543182373e-01 4.5663040876388550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 544 -2.3161689750850201e-03</internalNodes>\n          <leafValues>\n            2.9761150479316711e-01 5.1881599426269531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 545 5.3217571973800659e-01</internalNodes>\n          <leafValues>\n            5.1878392696380615e-01 2.2026319801807404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 546 -1.6643050312995911e-01</internalNodes>\n          <leafValues>\n            1.8660229444503784e-01 5.0603431463241577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 547 1.1253529787063599e-01</internalNodes>\n          <leafValues>\n            5.2121251821517944e-01 1.1850229650735855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 548 9.3046864494681358e-03</internalNodes>\n          <leafValues>\n            4.5899370312690735e-01 6.8261492252349854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 549 -4.6255099587142467e-03</internalNodes>\n          <leafValues>\n            3.0799409747123718e-01 5.2250087261199951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 550 -1.1116469651460648e-01</internalNodes>\n          <leafValues>\n            2.1010440587997437e-01 5.0808018445968628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 551 -1.0888439603149891e-02</internalNodes>\n          <leafValues>\n            5.7653552293777466e-01 4.7904640436172485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 552 5.8564301580190659e-03</internalNodes>\n          <leafValues>\n            5.0651001930236816e-01 1.5635989606380463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 553 5.4854389280080795e-02</internalNodes>\n          <leafValues>\n            4.9669149518013000e-01 7.2305107116699219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 554 -1.1197339743375778e-02</internalNodes>\n          <leafValues>\n            2.1949790418148041e-01 5.0987982749938965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 555 4.4069071300327778e-03</internalNodes>\n          <leafValues>\n            4.7784018516540527e-01 6.7709028720855713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 556 -6.3665293157100677e-02</internalNodes>\n          <leafValues>\n            1.9363629817962646e-01 5.0810241699218750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 557 -9.8081491887569427e-03</internalNodes>\n          <leafValues>\n            5.9990632534027100e-01 4.8103410005569458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 558 -2.1717099007219076e-03</internalNodes>\n          <leafValues>\n            3.3383339643478394e-01 5.2354729175567627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 559 -1.3315520249307156e-02</internalNodes>\n          <leafValues>\n            6.6170698404312134e-01 4.9192130565643311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 560 2.5442079640924931e-03</internalNodes>\n          <leafValues>\n            4.4887441396713257e-01 6.0821849107742310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 561 1.2037839740514755e-02</internalNodes>\n          <leafValues>\n            5.4093921184539795e-01 3.2924321293830872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 562 -2.0701050758361816e-02</internalNodes>\n          <leafValues>\n            6.8191200494766235e-01 4.5949959754943848e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 563 2.7608279138803482e-02</internalNodes>\n          <leafValues>\n            4.6307921409606934e-01 5.7672828435897827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 564 1.2370620388537645e-03</internalNodes>\n          <leafValues>\n            5.1653790473937988e-01 2.6350161433219910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 565 -3.7669338285923004e-02</internalNodes>\n          <leafValues>\n            2.5363931059837341e-01 5.2789801359176636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 566 -1.8057259730994701e-03</internalNodes>\n          <leafValues>\n            3.9851561188697815e-01 5.5175000429153442e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>111</maxWeakCount>\n      <stageThreshold>5.4620071411132812e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 567 4.4299028813838959e-03</internalNodes>\n          <leafValues>\n            2.8910180926322937e-01 6.3352262973785400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 568 -2.3813319858163595e-03</internalNodes>\n          <leafValues>\n            6.2117892503738403e-01 3.4774878621101379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 569 2.2915711160749197e-03</internalNodes>\n          <leafValues>\n            2.2544120252132416e-01 5.5821180343627930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 570 9.9457940086722374e-04</internalNodes>\n          <leafValues>\n            3.7117108702659607e-01 5.9300708770751953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 571 7.7164667891338468e-04</internalNodes>\n          <leafValues>\n            5.6517201662063599e-01 3.3479958772659302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 572 -1.1386410333216190e-03</internalNodes>\n          <leafValues>\n            3.0691260099411011e-01 5.5086308717727661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 573 -1.6403039626311511e-04</internalNodes>\n          <leafValues>\n            5.7628279924392700e-01 3.6990478634834290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 574 2.9793529392918572e-05</internalNodes>\n          <leafValues>\n            2.6442441344261169e-01 5.4379111528396606e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 575 8.5774902254343033e-03</internalNodes>\n          <leafValues>\n            5.0511389970779419e-01 1.7957249283790588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 576 -2.6032689493149519e-04</internalNodes>\n          <leafValues>\n            5.8269691467285156e-01 4.4468268752098083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 577 -6.1404630541801453e-03</internalNodes>\n          <leafValues>\n            3.1138521432876587e-01 5.3469717502593994e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 578 -2.3086950182914734e-02</internalNodes>\n          <leafValues>\n            3.2779461145401001e-01 5.3311979770660400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 579 -1.4243650250136852e-02</internalNodes>\n          <leafValues>\n            7.3817098140716553e-01 4.5880630612373352e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 580 1.9487129524350166e-02</internalNodes>\n          <leafValues>\n            5.2566307783126831e-01 2.2744719684123993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 581 -9.6681108698248863e-04</internalNodes>\n          <leafValues>\n            5.5112308263778687e-01 3.8150069117546082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 582 3.1474709976464510e-03</internalNodes>\n          <leafValues>\n            5.4256367683410645e-01 2.5437268614768982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 583 -1.8026070029009134e-04</internalNodes>\n          <leafValues>\n            5.3801918029785156e-01 3.4063041210174561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 584 -6.0266260989010334e-03</internalNodes>\n          <leafValues>\n            3.0358019471168518e-01 5.4205721616744995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 585 4.4462960795499384e-04</internalNodes>\n          <leafValues>\n            3.9909970760345459e-01 5.6601101160049438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 586 2.2609760053455830e-03</internalNodes>\n          <leafValues>\n            5.5628067255020142e-01 3.9406880736351013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 587 5.1133058965206146e-02</internalNodes>\n          <leafValues>\n            4.6096539497375488e-01 7.1185618638992310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 588 -1.7786309123039246e-02</internalNodes>\n          <leafValues>\n            2.3161660134792328e-01 5.3221440315246582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 589 -4.9679628573358059e-03</internalNodes>\n          <leafValues>\n            2.3307719826698303e-01 5.1220291852951050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 590 2.0667689386755228e-03</internalNodes>\n          <leafValues>\n            4.6574440598487854e-01 6.4554882049560547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 591 7.4413768015801907e-03</internalNodes>\n          <leafValues>\n            5.1543921232223511e-01 2.3616339266300201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 592 -3.6277279723435640e-03</internalNodes>\n          <leafValues>\n            6.2197732925415039e-01 4.4766610860824585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 593 -5.3530759178102016e-03</internalNodes>\n          <leafValues>\n            1.8373550474643707e-01 5.1022082567214966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 594 1.4530919492244720e-01</internalNodes>\n          <leafValues>\n            5.1459872722625732e-01 1.5359309315681458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 595 2.4394490756094456e-03</internalNodes>\n          <leafValues>\n            5.3436601161956787e-01 3.6246618628501892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 596 -3.1283390708267689e-03</internalNodes>\n          <leafValues>\n            6.2150079011917114e-01 4.8455920815467834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 597 1.7940260004252195e-03</internalNodes>\n          <leafValues>\n            4.2992618680000305e-01 5.8241981267929077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 598 3.6253821104764938e-02</internalNodes>\n          <leafValues>\n            5.2603340148925781e-01 1.4394679665565491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 599 -5.1746722310781479e-03</internalNodes>\n          <leafValues>\n            3.5065388679504395e-01 5.2870452404022217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 600 6.5383297624066472e-04</internalNodes>\n          <leafValues>\n            4.8096409440040588e-01 6.1220401525497437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 601 -2.6480229571461678e-02</internalNodes>\n          <leafValues>\n            1.1393620073795319e-01 5.0455862283706665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 602 -3.0440660193562508e-03</internalNodes>\n          <leafValues>\n            6.3520950078964233e-01 4.7947341203689575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 603 3.6993520334362984e-03</internalNodes>\n          <leafValues>\n            5.1311182975769043e-01 2.4985109269618988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 604 -3.6762931267730892e-04</internalNodes>\n          <leafValues>\n            5.4213947057723999e-01 3.7095320224761963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 605 -4.1382260620594025e-02</internalNodes>\n          <leafValues>\n            1.8949599564075470e-01 5.0816917419433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 606 -1.0532729793339968e-03</internalNodes>\n          <leafValues>\n            6.4543670415878296e-01 4.7836089134216309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 607 -2.1648600231856108e-03</internalNodes>\n          <leafValues>\n            6.2150311470031738e-01 4.4998261332511902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 608 -5.6747748749330640e-04</internalNodes>\n          <leafValues>\n            3.7126109004020691e-01 5.4193347692489624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 609 1.7375840246677399e-01</internalNodes>\n          <leafValues>\n            5.0236439704895020e-01 1.2157420068979263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 610 -2.9049699660390615e-03</internalNodes>\n          <leafValues>\n            3.2402679324150085e-01 5.3818839788436890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 611 1.2299539521336555e-03</internalNodes>\n          <leafValues>\n            4.1655078530311584e-01 5.7034862041473389e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 612 -5.4329237900674343e-04</internalNodes>\n          <leafValues>\n            3.8540428876876831e-01 5.5475491285324097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 613 -8.3297258242964745e-03</internalNodes>\n          <leafValues>\n            2.2044940292835236e-01 5.0970828533172607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 614 -1.0417630255687982e-04</internalNodes>\n          <leafValues>\n            5.6070661544799805e-01 4.3030360341072083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 615 3.1204700469970703e-02</internalNodes>\n          <leafValues>\n            4.6216571331024170e-01 6.9820040464401245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 616 7.8943502157926559e-03</internalNodes>\n          <leafValues>\n            5.2695941925048828e-01 2.2690680623054504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 617 -4.3645310215651989e-03</internalNodes>\n          <leafValues>\n            6.3592231273651123e-01 4.5379561185836792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 618 7.6793059706687927e-03</internalNodes>\n          <leafValues>\n            5.2747678756713867e-01 2.7404838800430298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 619 -2.5431139394640923e-02</internalNodes>\n          <leafValues>\n            2.0385199785232544e-01 5.0717329978942871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 620 8.2000601105391979e-04</internalNodes>\n          <leafValues>\n            4.5874550938606262e-01 6.1198681592941284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 621 2.9284600168466568e-03</internalNodes>\n          <leafValues>\n            5.0712740421295166e-01 2.0282049477100372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 622 4.5256470912136137e-05</internalNodes>\n          <leafValues>\n            4.8121041059494019e-01 5.4308217763900757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 623 1.3158309739083052e-03</internalNodes>\n          <leafValues>\n            4.6258139610290527e-01 6.7793232202529907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 624 1.5870389761403203e-03</internalNodes>\n          <leafValues>\n            5.3862917423248291e-01 3.4314650297164917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 625 -2.1539660170674324e-02</internalNodes>\n          <leafValues>\n            2.5942500680685043e-02 5.0032228231430054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 626 1.4334480278193951e-02</internalNodes>\n          <leafValues>\n            5.2028447389602661e-01 1.5906329452991486e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 627 -8.3881383761763573e-03</internalNodes>\n          <leafValues>\n            7.2824811935424805e-01 4.6480441093444824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 628 9.1906841844320297e-03</internalNodes>\n          <leafValues>\n            5.5623567104339600e-01 3.9231911301612854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 629 -5.8453059755265713e-03</internalNodes>\n          <leafValues>\n            6.8033927679061890e-01 4.6291279792785645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 630 -5.4707799106836319e-02</internalNodes>\n          <leafValues>\n            2.5616711378097534e-01 5.2061259746551514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 631 9.1142775490880013e-03</internalNodes>\n          <leafValues>\n            5.1896202564239502e-01 3.0538770556449890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 632 -1.5575000084936619e-02</internalNodes>\n          <leafValues>\n            1.2950749695301056e-01 5.1690948009490967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 633 -1.2050600344082341e-04</internalNodes>\n          <leafValues>\n            5.7350981235504150e-01 4.2308250069618225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 634 1.2273970060050488e-03</internalNodes>\n          <leafValues>\n            5.2898782491683960e-01 4.0797919034957886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 635 -1.2186600361019373e-03</internalNodes>\n          <leafValues>\n            6.5756398439407349e-01 4.5744091272354126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 636 -3.3256649039685726e-03</internalNodes>\n          <leafValues>\n            3.6280471086502075e-01 5.1950198411941528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 637 -1.3288309797644615e-02</internalNodes>\n          <leafValues>\n            1.2842659652233124e-01 5.0434887409210205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 638 -3.3839771058410406e-03</internalNodes>\n          <leafValues>\n            6.2922400236129761e-01 4.7575059533119202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 639 -2.1954220533370972e-01</internalNodes>\n          <leafValues>\n            1.4877319335937500e-01 5.0650137662887573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 640 4.9111708067357540e-03</internalNodes>\n          <leafValues>\n            4.2561021447181702e-01 5.6658387184143066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 641 -1.8744950648397207e-04</internalNodes>\n          <leafValues>\n            4.0041440725326538e-01 5.5868571996688843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 642 -5.2178641781210899e-03</internalNodes>\n          <leafValues>\n            6.0091161727905273e-01 4.8127061128616333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 643 -1.1111519997939467e-03</internalNodes>\n          <leafValues>\n            3.5149338841438293e-01 5.2870899438858032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 644 4.4036400504410267e-03</internalNodes>\n          <leafValues>\n            4.6422758698463440e-01 5.9240859746932983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 645 1.2299499660730362e-01</internalNodes>\n          <leafValues>\n            5.0255292654037476e-01 6.9152481853961945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 646 -1.2313510291278362e-02</internalNodes>\n          <leafValues>\n            5.8845919370651245e-01 4.9340128898620605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 647 4.1471039876341820e-03</internalNodes>\n          <leafValues>\n            4.3722391128540039e-01 5.8934777975082397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 648 -3.5502649843692780e-03</internalNodes>\n          <leafValues>\n            4.3275511264801025e-01 5.3962701559066772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 649 -1.9224269315600395e-02</internalNodes>\n          <leafValues>\n            1.9131340086460114e-01 5.0683307647705078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 650 1.4395059552043676e-03</internalNodes>\n          <leafValues>\n            5.3081780672073364e-01 4.2435330152511597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 651 -6.7751999013125896e-03</internalNodes>\n          <leafValues>\n            6.3653957843780518e-01 4.5400860905647278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 652 7.0119630545377731e-03</internalNodes>\n          <leafValues>\n            5.1898342370986938e-01 3.0261999368667603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 653 5.4014651104807854e-03</internalNodes>\n          <leafValues>\n            5.1050621271133423e-01 2.5576829910278320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 654 9.0274988906458020e-04</internalNodes>\n          <leafValues>\n            4.6969148516654968e-01 5.8618277311325073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 655 1.1474450118839741e-02</internalNodes>\n          <leafValues>\n            5.0536459684371948e-01 1.5271779894828796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 656 -6.7023430019617081e-03</internalNodes>\n          <leafValues>\n            6.5089809894561768e-01 4.8906040191650391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 657 -2.0462959073483944e-03</internalNodes>\n          <leafValues>\n            6.2418168783187866e-01 4.5146000385284424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 658 -9.9951568990945816e-03</internalNodes>\n          <leafValues>\n            3.4327811002731323e-01 5.4009538888931274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 659 -3.5700708627700806e-02</internalNodes>\n          <leafValues>\n            1.8780590593814850e-01 5.0740778446197510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 660 4.5584561303257942e-04</internalNodes>\n          <leafValues>\n            3.8052770495414734e-01 5.4025697708129883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 661 -5.4260600358247757e-02</internalNodes>\n          <leafValues>\n            6.8437147140502930e-01 4.5950970053672791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 662 6.0600461438298225e-03</internalNodes>\n          <leafValues>\n            5.5029052495956421e-01 4.5005279779434204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 663 -6.4791832119226456e-03</internalNodes>\n          <leafValues>\n            3.3688580989837646e-01 5.3107571601867676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 664 -1.4939469983801246e-03</internalNodes>\n          <leafValues>\n            6.4876401424407959e-01 4.7561758756637573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 665 1.4610530342906713e-05</internalNodes>\n          <leafValues>\n            4.0345790982246399e-01 5.4510641098022461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 666 -7.2321938350796700e-03</internalNodes>\n          <leafValues>\n            6.3868737220764160e-01 4.8247399926185608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 667 -4.0645818226039410e-03</internalNodes>\n          <leafValues>\n            2.9864218831062317e-01 5.1573359966278076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 668 3.0463080853223801e-02</internalNodes>\n          <leafValues>\n            5.0221997499465942e-01 7.1599560976028442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 669 -8.0544911324977875e-03</internalNodes>\n          <leafValues>\n            6.4924520254135132e-01 4.6192750334739685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 670 3.9505138993263245e-02</internalNodes>\n          <leafValues>\n            5.1505708694458008e-01 2.4506139755249023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 671 8.4530208259820938e-03</internalNodes>\n          <leafValues>\n            4.5736691355705261e-01 6.3940370082855225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 672 -1.1688120430335402e-03</internalNodes>\n          <leafValues>\n            3.8655120134353638e-01 5.4836612939834595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 673 2.8070670086890459e-03</internalNodes>\n          <leafValues>\n            5.1285791397094727e-01 2.7014800906181335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 674 4.7365209320560098e-04</internalNodes>\n          <leafValues>\n            4.0515819191932678e-01 5.3874611854553223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 675 1.1741080321371555e-02</internalNodes>\n          <leafValues>\n            5.2959501743316650e-01 3.7194138765335083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 676 3.1833238899707794e-03</internalNodes>\n          <leafValues>\n            4.7894069552421570e-01 6.8951261043548584e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 677 7.0241501089185476e-04</internalNodes>\n          <leafValues>\n            5.3844892978668213e-01 3.9180809259414673e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>102</maxWeakCount>\n      <stageThreshold>5.0169731140136719e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 678 1.7059929668903351e-02</internalNodes>\n          <leafValues>\n            3.9485278725624084e-01 7.1425348520278931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 679 2.1840840578079224e-02</internalNodes>\n          <leafValues>\n            3.3703160285949707e-01 6.0900169610977173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 680 2.4520049919374287e-04</internalNodes>\n          <leafValues>\n            3.5005760192871094e-01 5.9879022836685181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 681 8.3272606134414673e-03</internalNodes>\n          <leafValues>\n            3.2675281167030334e-01 5.6972408294677734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 682 5.7148298947140574e-04</internalNodes>\n          <leafValues>\n            3.0445998907089233e-01 5.5316567420959473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 683 6.7373987985774875e-04</internalNodes>\n          <leafValues>\n            3.6500120162963867e-01 5.6726312637329102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 684 3.4681590477703139e-05</internalNodes>\n          <leafValues>\n            3.3135411143302917e-01 5.3887271881103516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 685 -5.8563398197293282e-03</internalNodes>\n          <leafValues>\n            2.6979428529739380e-01 5.4987788200378418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 686 8.5102273151278496e-03</internalNodes>\n          <leafValues>\n            5.2693581581115723e-01 2.7628791332244873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 687 -6.9817207753658295e-02</internalNodes>\n          <leafValues>\n            2.9096031188964844e-01 5.2592468261718750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 688 -8.6113670840859413e-04</internalNodes>\n          <leafValues>\n            5.8925771713256836e-01 4.0736979246139526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 689 9.7149249631911516e-04</internalNodes>\n          <leafValues>\n            3.5235640406608582e-01 5.4158622026443481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 690 -1.4727490452060010e-05</internalNodes>\n          <leafValues>\n            5.4230177402496338e-01 3.5031560063362122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 691 4.8420291393995285e-02</internalNodes>\n          <leafValues>\n            5.1939457654953003e-01 3.4111958742141724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 692 1.3257140526548028e-03</internalNodes>\n          <leafValues>\n            3.1577691435813904e-01 5.3353762626647949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 693 1.4922149603080470e-05</internalNodes>\n          <leafValues>\n            4.4512999057769775e-01 5.5365538597106934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 694 -2.7173398993909359e-03</internalNodes>\n          <leafValues>\n            3.0317419767379761e-01 5.2480888366699219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 695 2.9219500720500946e-03</internalNodes>\n          <leafValues>\n            4.7814530134201050e-01 6.6060417890548706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 696 -1.9804988987743855e-03</internalNodes>\n          <leafValues>\n            3.1863081455230713e-01 5.2876251935958862e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 697 -4.0012109093368053e-03</internalNodes>\n          <leafValues>\n            6.4135968685150146e-01 4.7499281167984009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 698 -4.3491991236805916e-03</internalNodes>\n          <leafValues>\n            1.5074980258941650e-01 5.0989967584609985e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 699 1.3490889687091112e-03</internalNodes>\n          <leafValues>\n            4.3161588907241821e-01 5.8811670541763306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 700 1.8597070127725601e-02</internalNodes>\n          <leafValues>\n            4.7355538606643677e-01 9.0897941589355469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 701 -1.8562379991635680e-03</internalNodes>\n          <leafValues>\n            3.5531890392303467e-01 5.5778372287750244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 702 2.2940430790185928e-03</internalNodes>\n          <leafValues>\n            4.5000949501991272e-01 6.5808779001235962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 703 2.9982850537635386e-04</internalNodes>\n          <leafValues>\n            5.6292420625686646e-01 3.9758789539337158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 704 3.5455459728837013e-03</internalNodes>\n          <leafValues>\n            5.3815472126007080e-01 3.6054858565330505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 705 9.6104722470045090e-03</internalNodes>\n          <leafValues>\n            5.2559971809387207e-01 1.7967459559440613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 706 -6.2783220782876015e-03</internalNodes>\n          <leafValues>\n            2.2728569805622101e-01 5.1140302419662476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 707 3.4598479978740215e-03</internalNodes>\n          <leafValues>\n            4.6263080835342407e-01 6.6082191467285156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 708 -1.3112019514665008e-03</internalNodes>\n          <leafValues>\n            6.3175398111343384e-01 4.4368579983711243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 709 2.6876179035753012e-03</internalNodes>\n          <leafValues>\n            5.4211097955703735e-01 4.0540221333503723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 710 3.9118169806897640e-03</internalNodes>\n          <leafValues>\n            5.3584778308868408e-01 3.2734549045562744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 711 -1.4206450432538986e-02</internalNodes>\n          <leafValues>\n            7.7935767173767090e-01 4.9757811427116394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 712 7.1705528534948826e-04</internalNodes>\n          <leafValues>\n            5.2973198890686035e-01 3.5609039664268494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 713 1.6635019565001130e-03</internalNodes>\n          <leafValues>\n            4.6780940890312195e-01 5.8164817094802856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 714 3.3686188980937004e-03</internalNodes>\n          <leafValues>\n            5.2767342329025269e-01 3.4464201331138611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 715 1.2799530290067196e-02</internalNodes>\n          <leafValues>\n            4.8346799612045288e-01 7.4721592664718628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 716 3.3901201095432043e-03</internalNodes>\n          <leafValues>\n            4.5118591189384460e-01 6.4017212390899658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 717 4.7070779837667942e-03</internalNodes>\n          <leafValues>\n            5.3356587886810303e-01 3.5552209615707397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 718 1.4819339849054813e-03</internalNodes>\n          <leafValues>\n            4.2507070302963257e-01 5.7727241516113281e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 719 -6.9995759986341000e-03</internalNodes>\n          <leafValues>\n            3.0033200979232788e-01 5.2929002046585083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 720 1.5939010307192802e-02</internalNodes>\n          <leafValues>\n            5.0673192739486694e-01 1.6755819320678711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 721 7.6377349905669689e-03</internalNodes>\n          <leafValues>\n            4.7950699925422668e-01 7.0856010913848877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 722 6.7334040068089962e-03</internalNodes>\n          <leafValues>\n            5.1331132650375366e-01 2.1624700725078583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 723 -1.2858809903264046e-02</internalNodes>\n          <leafValues>\n            1.9388419389724731e-01 5.2513718605041504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 724 -6.2270800117403269e-04</internalNodes>\n          <leafValues>\n            5.6865382194519043e-01 4.1978681087493896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 725 -5.2651681471616030e-04</internalNodes>\n          <leafValues>\n            4.2241689562797546e-01 5.4296958446502686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 726 1.1075099930167198e-02</internalNodes>\n          <leafValues>\n            5.1137751340866089e-01 2.5145179033279419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 727 -3.6728251725435257e-02</internalNodes>\n          <leafValues>\n            7.1946620941162109e-01 4.8496189713478088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 728 -2.8207109426148236e-04</internalNodes>\n          <leafValues>\n            3.8402619957923889e-01 5.3944462537765503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 729 -2.7489690110087395e-03</internalNodes>\n          <leafValues>\n            5.9370887279510498e-01 4.5691820979118347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 730 1.0047519579529762e-02</internalNodes>\n          <leafValues>\n            5.1385760307312012e-01 2.8022980690002441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 731 -8.1497840583324432e-03</internalNodes>\n          <leafValues>\n            6.0900372266769409e-01 4.6361210942268372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 732 -6.8833888508379459e-03</internalNodes>\n          <leafValues>\n            3.4586110711097717e-01 5.2546602487564087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 733 -1.4039360394235700e-05</internalNodes>\n          <leafValues>\n            5.6931042671203613e-01 4.0820831060409546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 734 1.5498419525101781e-03</internalNodes>\n          <leafValues>\n            4.3505370616912842e-01 5.8065170049667358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 735 -6.7841499112546444e-03</internalNodes>\n          <leafValues>\n            1.4688730239868164e-01 5.1827752590179443e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 736 2.1705629478674382e-04</internalNodes>\n          <leafValues>\n            5.2935242652893066e-01 3.4561741352081299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 737 3.1198898795992136e-04</internalNodes>\n          <leafValues>\n            4.6524509787559509e-01 5.9424138069152832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 738 5.4507530294358730e-03</internalNodes>\n          <leafValues>\n            4.6535089612007141e-01 7.0248460769653320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 739 -2.5818689027801156e-04</internalNodes>\n          <leafValues>\n            5.4972952604293823e-01 3.7689670920372009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 740 -1.7442539334297180e-02</internalNodes>\n          <leafValues>\n            3.9190879464149475e-01 5.4574978351593018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 741 -4.5343529433012009e-02</internalNodes>\n          <leafValues>\n            1.6313570737838745e-01 5.1549088954925537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 742 1.9190689781680703e-03</internalNodes>\n          <leafValues>\n            5.1458978652954102e-01 2.7918958663940430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 743 -6.0177869163453579e-03</internalNodes>\n          <leafValues>\n            6.5176361799240112e-01 4.7563329339027405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 744 -4.0720738470554352e-03</internalNodes>\n          <leafValues>\n            5.5146527290344238e-01 4.0926858782768250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 745 3.9855059003457427e-04</internalNodes>\n          <leafValues>\n            3.1652408838272095e-01 5.2855509519577026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 746 -6.5418570302426815e-03</internalNodes>\n          <leafValues>\n            6.8533778190612793e-01 4.6528089046478271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 747 3.4845089539885521e-03</internalNodes>\n          <leafValues>\n            5.4845881462097168e-01 4.5027598738670349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 748 -1.3696780428290367e-02</internalNodes>\n          <leafValues>\n            6.3957798480987549e-01 4.5725551247596741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 749 -1.7347140237689018e-02</internalNodes>\n          <leafValues>\n            2.7510729432106018e-01 5.1816147565841675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 750 -4.0885428898036480e-03</internalNodes>\n          <leafValues>\n            3.3256360888481140e-01 5.1949840784072876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 751 -9.4687901437282562e-03</internalNodes>\n          <leafValues>\n            5.9422808885574341e-01 4.8518198728561401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 752 1.7084840219467878e-03</internalNodes>\n          <leafValues>\n            4.1671109199523926e-01 5.5198061466217041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 753 9.4809094443917274e-03</internalNodes>\n          <leafValues>\n            5.4338949918746948e-01 4.2085149884223938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 754 -4.7389650717377663e-03</internalNodes>\n          <leafValues>\n            6.4071899652481079e-01 4.5606550574302673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 755 6.5761050209403038e-03</internalNodes>\n          <leafValues>\n            5.2145552635192871e-01 2.2582270205020905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 756 -2.1690549328923225e-03</internalNodes>\n          <leafValues>\n            3.1515279412269592e-01 5.1567047834396362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 757 1.4660170301795006e-02</internalNodes>\n          <leafValues>\n            4.8708370327949524e-01 6.6899412870407104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 758 1.7231999663636088e-04</internalNodes>\n          <leafValues>\n            3.5697489976882935e-01 5.2510780096054077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 759 -2.1803760901093483e-02</internalNodes>\n          <leafValues>\n            8.8259208202362061e-01 4.9663299322128296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 760 -9.4736106693744659e-02</internalNodes>\n          <leafValues>\n            1.4461620151996613e-01 5.0611138343811035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 761 5.5825551971793175e-03</internalNodes>\n          <leafValues>\n            5.3964787721633911e-01 4.2380660772323608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 762 1.9517090404406190e-03</internalNodes>\n          <leafValues>\n            4.1704109311103821e-01 5.4977869987487793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 763 1.2149900197982788e-02</internalNodes>\n          <leafValues>\n            4.6983671188354492e-01 5.6642740964889526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 764 -7.5169620104134083e-03</internalNodes>\n          <leafValues>\n            6.2677729129791260e-01 4.4631358981132507e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 765 -7.1667909622192383e-02</internalNodes>\n          <leafValues>\n            3.0970111489295959e-01 5.2210032939910889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 766 -8.8292419910430908e-02</internalNodes>\n          <leafValues>\n            8.1123888492584229e-02 5.0063651800155640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 767 3.1063079833984375e-02</internalNodes>\n          <leafValues>\n            5.1555037498474121e-01 1.2822559475898743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 768 4.6621840447187424e-02</internalNodes>\n          <leafValues>\n            4.6997779607772827e-01 7.3639607429504395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 769 -1.2189489789307117e-02</internalNodes>\n          <leafValues>\n            3.9205300807952881e-01 5.5189967155456543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 770 1.3016110286116600e-02</internalNodes>\n          <leafValues>\n            5.2606582641601562e-01 3.6851361393928528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 771 -3.4952899441123009e-03</internalNodes>\n          <leafValues>\n            6.3392949104309082e-01 4.7162809967994690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 772 -4.4015039748046547e-05</internalNodes>\n          <leafValues>\n            5.3330272436141968e-01 3.7761849164962769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 773 -1.0966490209102631e-01</internalNodes>\n          <leafValues>\n            1.7653420567512512e-01 5.1983469724655151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 774 -9.0279558207839727e-04</internalNodes>\n          <leafValues>\n            5.3241598606109619e-01 3.8389080762863159e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 775 7.1126641705632210e-04</internalNodes>\n          <leafValues>\n            4.6479299664497375e-01 5.7552242279052734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 776 -3.1250279862433672e-03</internalNodes>\n          <leafValues>\n            3.2367089390754700e-01 5.1667708158493042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 777 2.4144679773598909e-03</internalNodes>\n          <leafValues>\n            4.7874391078948975e-01 6.4597177505493164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 778 4.4391240226104856e-04</internalNodes>\n          <leafValues>\n            4.4093081355094910e-01 6.0102558135986328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 779 -2.2611189342569560e-04</internalNodes>\n          <leafValues>\n            4.0381139516830444e-01 5.4932558536529541e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>135</maxWeakCount>\n      <stageThreshold>6.6669120788574219e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 780 -4.6901289373636246e-02</internalNodes>\n          <leafValues>\n            6.6001719236373901e-01 3.7438011169433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 781 -1.4568349579349160e-03</internalNodes>\n          <leafValues>\n            5.7839912176132202e-01 3.4377971291542053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 782 5.5598369799554348e-03</internalNodes>\n          <leafValues>\n            3.6222669482231140e-01 5.9082162380218506e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 783 7.3170487303286791e-04</internalNodes>\n          <leafValues>\n            5.5004191398620605e-01 2.8735581040382385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 784 1.3318009441718459e-03</internalNodes>\n          <leafValues>\n            2.6731699705123901e-01 5.4310190677642822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 785 2.4347059661522508e-04</internalNodes>\n          <leafValues>\n            3.8550278544425964e-01 5.7413887977600098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 786 -3.0512469820678234e-03</internalNodes>\n          <leafValues>\n            5.5032098293304443e-01 3.4628450870513916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 787 -6.8657199153676629e-04</internalNodes>\n          <leafValues>\n            3.2912218570709229e-01 5.4295092821121216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 788 1.4668200165033340e-03</internalNodes>\n          <leafValues>\n            3.5883820056915283e-01 5.3518110513687134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 789 3.2021870720200241e-04</internalNodes>\n          <leafValues>\n            4.2968419194221497e-01 5.7002341747283936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 790 7.4122188379988074e-04</internalNodes>\n          <leafValues>\n            5.2821648120880127e-01 3.3668708801269531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 791 3.8330298848450184e-03</internalNodes>\n          <leafValues>\n            4.5595678687095642e-01 6.2573361396789551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 792 -1.5456439927220345e-02</internalNodes>\n          <leafValues>\n            2.3501169681549072e-01 5.1294529438018799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 793 2.6796779129654169e-03</internalNodes>\n          <leafValues>\n            5.3294152021408081e-01 4.1550621390342712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 794 2.8296569362282753e-03</internalNodes>\n          <leafValues>\n            4.2730879783630371e-01 5.8045381307601929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 795 -3.9444249123334885e-03</internalNodes>\n          <leafValues>\n            2.9126119613647461e-01 5.2026861906051636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 796 2.7179559692740440e-03</internalNodes>\n          <leafValues>\n            5.3076881170272827e-01 3.5856771469116211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 797 5.9077627956867218e-03</internalNodes>\n          <leafValues>\n            4.7037750482559204e-01 5.9415858983993530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 798 -4.2240349575877190e-03</internalNodes>\n          <leafValues>\n            2.1415670216083527e-01 5.0887960195541382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 799 4.0725888684391975e-03</internalNodes>\n          <leafValues>\n            4.7664138674736023e-01 6.8410611152648926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 800 1.0149530135095119e-02</internalNodes>\n          <leafValues>\n            5.3607988357543945e-01 3.7484970688819885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 801 -1.8864999583456665e-04</internalNodes>\n          <leafValues>\n            5.7201302051544189e-01 3.8538050651550293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 802 -4.8864358104765415e-03</internalNodes>\n          <leafValues>\n            3.6931228637695312e-01 5.3409588336944580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 803 2.6158479973673820e-02</internalNodes>\n          <leafValues>\n            4.9623748660087585e-01 6.0599899291992188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 804 4.8560759751126170e-04</internalNodes>\n          <leafValues>\n            4.4389459490776062e-01 6.0124689340591431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 805 1.1268709786236286e-02</internalNodes>\n          <leafValues>\n            5.2442502975463867e-01 1.8403880298137665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 806 -2.8114619199186563e-03</internalNodes>\n          <leafValues>\n            6.0602837800979614e-01 4.4098970293998718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 807 -5.6112729944288731e-03</internalNodes>\n          <leafValues>\n            3.8911709189414978e-01 5.5892372131347656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 808 8.5680093616247177e-03</internalNodes>\n          <leafValues>\n            5.0693458318710327e-01 2.0626190304756165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 809 -3.8172779022715986e-04</internalNodes>\n          <leafValues>\n            5.8822017908096313e-01 4.1926109790802002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 810 -1.7680290329735726e-04</internalNodes>\n          <leafValues>\n            5.5336058139801025e-01 4.0033689141273499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 811 6.5112537704408169e-03</internalNodes>\n          <leafValues>\n            3.3101469278335571e-01 5.4441910982131958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 812 -6.5948683186434209e-05</internalNodes>\n          <leafValues>\n            5.4338318109512329e-01 3.9449059963226318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 813 6.9939051754772663e-03</internalNodes>\n          <leafValues>\n            5.6003582477569580e-01 4.1927140951156616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 814 -4.6744439750909805e-03</internalNodes>\n          <leafValues>\n            6.6854667663574219e-01 4.6049609780311584e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 815 1.1589850299060345e-02</internalNodes>\n          <leafValues>\n            5.3571212291717529e-01 2.9268300533294678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 816 1.3007840141654015e-02</internalNodes>\n          <leafValues>\n            4.6798178553581238e-01 7.3074632883071899e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 817 -1.1008579749614000e-03</internalNodes>\n          <leafValues>\n            3.9375010132789612e-01 5.4150652885437012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 818 6.0472649056464434e-04</internalNodes>\n          <leafValues>\n            4.2423760890960693e-01 5.6040412187576294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 819 -1.4494840055704117e-02</internalNodes>\n          <leafValues>\n            3.6312100291252136e-01 5.2931827306747437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 820 -5.3056948818266392e-03</internalNodes>\n          <leafValues>\n            6.8604522943496704e-01 4.6218210458755493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 821 -8.1829127157106996e-04</internalNodes>\n          <leafValues>\n            3.9440968632698059e-01 5.4204392433166504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 822 -1.9077520817518234e-02</internalNodes>\n          <leafValues>\n            1.9626219570636749e-01 5.0378918647766113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 823 3.5549470339901745e-04</internalNodes>\n          <leafValues>\n            4.0862590074539185e-01 5.6139731407165527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 824 1.9679730758070946e-03</internalNodes>\n          <leafValues>\n            4.4891211390495300e-01 5.9261232614517212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 825 6.9189141504466534e-03</internalNodes>\n          <leafValues>\n            5.3359258174896240e-01 3.7283858656883240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 826 2.9872779268771410e-03</internalNodes>\n          <leafValues>\n            5.1113212108612061e-01 2.9756438732147217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 827 -6.2264618463814259e-03</internalNodes>\n          <leafValues>\n            5.5414897203445435e-01 4.8245379328727722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 828 1.3353300280869007e-02</internalNodes>\n          <leafValues>\n            4.5864239335060120e-01 6.4147979021072388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 829 3.3505238592624664e-02</internalNodes>\n          <leafValues>\n            5.3924250602722168e-01 3.4299948811531067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 830 -2.5294460356235504e-03</internalNodes>\n          <leafValues>\n            1.7037139832973480e-01 5.0133150815963745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 831 -1.2801629491150379e-03</internalNodes>\n          <leafValues>\n            5.3054618835449219e-01 4.6974050998687744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 832 7.0687388069927692e-03</internalNodes>\n          <leafValues>\n            4.6155458688735962e-01 6.4365047216415405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 833 9.6880499040707946e-04</internalNodes>\n          <leafValues>\n            4.8335990309715271e-01 6.0438942909240723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 834 3.9647659286856651e-03</internalNodes>\n          <leafValues>\n            5.1876372098922729e-01 3.2318168878555298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 835 -2.2057730704545975e-02</internalNodes>\n          <leafValues>\n            4.0792569518089294e-01 5.2009809017181396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 836 -6.6906312713399529e-04</internalNodes>\n          <leafValues>\n            5.3316092491149902e-01 3.8156008720397949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 837 -6.7009328631684184e-04</internalNodes>\n          <leafValues>\n            5.6554222106933594e-01 4.6889019012451172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 838 7.4284552829340100e-04</internalNodes>\n          <leafValues>\n            4.5343810319900513e-01 6.2874001264572144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 839 2.2227810695767403e-03</internalNodes>\n          <leafValues>\n            5.3506332635879517e-01 3.3036559820175171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 840 -5.4130521602928638e-03</internalNodes>\n          <leafValues>\n            1.1136870086193085e-01 5.0054347515106201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 841 -1.4520040167553816e-05</internalNodes>\n          <leafValues>\n            5.6287378072738647e-01 4.3251338601112366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 842 2.3369169502984732e-04</internalNodes>\n          <leafValues>\n            4.1658350825309753e-01 5.4477912187576294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 843 4.2894547805190086e-03</internalNodes>\n          <leafValues>\n            4.8603910207748413e-01 6.7786490917205811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 844 5.9103150852024555e-03</internalNodes>\n          <leafValues>\n            5.2623051404953003e-01 3.6121138930320740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 845 1.2900539673864841e-02</internalNodes>\n          <leafValues>\n            5.3193771839141846e-01 3.2502880692481995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 846 4.6982979401946068e-03</internalNodes>\n          <leafValues>\n            4.6182450652122498e-01 6.6659259796142578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 847 1.0439859703183174e-02</internalNodes>\n          <leafValues>\n            5.5056709051132202e-01 3.8836041092872620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 848 3.0443191062659025e-03</internalNodes>\n          <leafValues>\n            4.6978530287742615e-01 7.3018449544906616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 849 -6.1593751888722181e-04</internalNodes>\n          <leafValues>\n            3.8308390974998474e-01 5.4649841785430908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 850 -3.4247159492224455e-03</internalNodes>\n          <leafValues>\n            2.5663000345230103e-01 5.0895309448242188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 851 -9.3538565561175346e-03</internalNodes>\n          <leafValues>\n            6.4699661731719971e-01 4.9407958984375000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 852 5.2338998764753342e-02</internalNodes>\n          <leafValues>\n            4.7459828853607178e-01 7.8787708282470703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 853 3.5765620414167643e-03</internalNodes>\n          <leafValues>\n            5.3066647052764893e-01 2.7484980225563049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 854 7.1555317845195532e-04</internalNodes>\n          <leafValues>\n            5.4131257534027100e-01 4.0419089794158936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 855 -1.0516679845750332e-02</internalNodes>\n          <leafValues>\n            6.1585122346878052e-01 4.8152831196784973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 856 7.7347927726805210e-03</internalNodes>\n          <leafValues>\n            4.6958059072494507e-01 7.0289808511734009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 857 -4.3226778507232666e-03</internalNodes>\n          <leafValues>\n            2.8495660424232483e-01 5.3046840429306030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 858 -2.5534399319440126e-03</internalNodes>\n          <leafValues>\n            7.0569849014282227e-01 4.6888920664787292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 859 1.0268510231981054e-04</internalNodes>\n          <leafValues>\n            3.9029321074485779e-01 5.5734640359878540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 860 7.1395188570022583e-06</internalNodes>\n          <leafValues>\n            3.6842319369316101e-01 5.2639877796173096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 861 -1.6711989883333445e-03</internalNodes>\n          <leafValues>\n            3.8491758704185486e-01 5.3872710466384888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 862 4.9260449595749378e-03</internalNodes>\n          <leafValues>\n            4.7297719120979309e-01 7.4472510814666748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 863 4.3908702209591866e-03</internalNodes>\n          <leafValues>\n            4.8091810941696167e-01 5.5919218063354492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 864 -1.7793629318475723e-02</internalNodes>\n          <leafValues>\n            6.9036781787872314e-01 4.6769270300865173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 865 2.0469669252634048e-03</internalNodes>\n          <leafValues>\n            5.3706902265548706e-01 3.3081620931625366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 866 2.9891489073634148e-02</internalNodes>\n          <leafValues>\n            5.1398652791976929e-01 3.3090591430664062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 867 1.5494900289922953e-03</internalNodes>\n          <leafValues>\n            4.6602371335029602e-01 6.0783427953720093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 868 1.4956969534978271e-03</internalNodes>\n          <leafValues>\n            4.4048359990119934e-01 5.8639198541641235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 869 9.5885928021743894e-04</internalNodes>\n          <leafValues>\n            5.4359710216522217e-01 4.2085230350494385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 870 4.9643701640889049e-04</internalNodes>\n          <leafValues>\n            5.3705781698226929e-01 4.0006220340728760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 871 -2.7280810754746199e-03</internalNodes>\n          <leafValues>\n            5.6594127416610718e-01 4.2596429586410522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 872 2.3026480339467525e-03</internalNodes>\n          <leafValues>\n            5.1616579294204712e-01 3.3508691191673279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 873 2.5151631236076355e-01</internalNodes>\n          <leafValues>\n            4.8696619272232056e-01 7.1473097801208496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 874 -4.6328022144734859e-03</internalNodes>\n          <leafValues>\n            2.7274489402770996e-01 5.0837898254394531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 875 -4.0434490889310837e-02</internalNodes>\n          <leafValues>\n            6.8514388799667358e-01 5.0217670202255249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 876 1.4972220014897175e-05</internalNodes>\n          <leafValues>\n            4.2844650149345398e-01 5.5225551128387451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 877 -2.4050309730228037e-04</internalNodes>\n          <leafValues>\n            4.2261189222335815e-01 5.3900748491287231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 878 2.3657839745283127e-02</internalNodes>\n          <leafValues>\n            4.7446319460868835e-01 7.5043660402297974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 879 -8.1449104472994804e-03</internalNodes>\n          <leafValues>\n            4.2450588941574097e-01 5.5383628606796265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 880 -3.6992130335420370e-03</internalNodes>\n          <leafValues>\n            5.9523570537567139e-01 4.5297130942344666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 881 -6.7718601785600185e-03</internalNodes>\n          <leafValues>\n            4.1377940773963928e-01 5.4733997583389282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 882 4.2669530957937241e-03</internalNodes>\n          <leafValues>\n            4.4841149449348450e-01 5.7979941368103027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 883 1.7791989957913756e-03</internalNodes>\n          <leafValues>\n            5.6248587369918823e-01 4.4324448704719543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 884 1.6774770338088274e-03</internalNodes>\n          <leafValues>\n            4.6377518773078918e-01 6.3642418384552002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 885 1.1732629500329494e-03</internalNodes>\n          <leafValues>\n            4.5445030927658081e-01 5.9144157171249390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 886 8.6998171173036098e-04</internalNodes>\n          <leafValues>\n            5.3347527980804443e-01 3.8859179615974426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 887 7.6378340600058436e-04</internalNodes>\n          <leafValues>\n            5.3985852003097534e-01 3.7449419498443604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 888 1.5684569370932877e-04</internalNodes>\n          <leafValues>\n            4.3178731203079224e-01 5.6146162748336792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 889 -2.1511370316147804e-02</internalNodes>\n          <leafValues>\n            1.7859250307083130e-01 5.1855427026748657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 890 1.3081369979772717e-04</internalNodes>\n          <leafValues>\n            4.3424990773200989e-01 5.6828498840332031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 891 2.1992040798068047e-02</internalNodes>\n          <leafValues>\n            5.1617169380187988e-01 2.3793940246105194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 892 -8.0136500764638186e-04</internalNodes>\n          <leafValues>\n            5.9867632389068604e-01 4.4664269685745239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 893 -8.2736099138855934e-03</internalNodes>\n          <leafValues>\n            4.1082179546356201e-01 5.2510571479797363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 894 3.6831789184361696e-03</internalNodes>\n          <leafValues>\n            5.1738142967224121e-01 3.3975180983543396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 895 -7.9525681212544441e-03</internalNodes>\n          <leafValues>\n            6.8889832496643066e-01 4.8459240794181824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 896 1.5382299898192286e-03</internalNodes>\n          <leafValues>\n            5.1785671710968018e-01 3.4541139006614685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 897 -1.4043530449271202e-02</internalNodes>\n          <leafValues>\n            1.6784210503101349e-01 5.1886677742004395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 898 1.4315890148282051e-03</internalNodes>\n          <leafValues>\n            4.3682569265365601e-01 5.6557738780975342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 899 -3.4014228731393814e-02</internalNodes>\n          <leafValues>\n            7.8022962808609009e-01 4.9592170119285583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 900 -1.2027299962937832e-02</internalNodes>\n          <leafValues>\n            1.5851010382175446e-01 5.0322318077087402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 901 1.3316619396209717e-01</internalNodes>\n          <leafValues>\n            5.1633048057556152e-01 2.7551281452178955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 902 -1.5221949433907866e-03</internalNodes>\n          <leafValues>\n            3.7283179163932800e-01 5.2145522832870483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 903 -9.3929271679371595e-04</internalNodes>\n          <leafValues>\n            5.8383792638778687e-01 4.5111650228500366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 904 2.7719739824533463e-02</internalNodes>\n          <leafValues>\n            4.7282868623733521e-01 7.3315447568893433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 905 3.1030150130391121e-03</internalNodes>\n          <leafValues>\n            5.3022021055221558e-01 4.1015630960464478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 906 7.7861219644546509e-02</internalNodes>\n          <leafValues>\n            4.9983340501785278e-01 1.2729619443416595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 907 -1.5854939818382263e-02</internalNodes>\n          <leafValues>\n            5.0833359360694885e-02 5.1656562089920044e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 908 -4.9725300632417202e-03</internalNodes>\n          <leafValues>\n            6.7981338500976562e-01 4.6842318773269653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 909 -9.7676506265997887e-04</internalNodes>\n          <leafValues>\n            6.0107719898223877e-01 4.7889319062232971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 910 -2.4647710379213095e-03</internalNodes>\n          <leafValues>\n            3.3933979272842407e-01 5.2205038070678711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 911 -6.7937700077891350e-03</internalNodes>\n          <leafValues>\n            4.3651369214057922e-01 5.2396631240844727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 912 3.2608021050691605e-02</internalNodes>\n          <leafValues>\n            5.0527238845825195e-01 2.4252149462699890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 913 -5.8514421107247472e-04</internalNodes>\n          <leafValues>\n            5.7339739799499512e-01 4.7585740685462952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 914 -2.9632600024342537e-02</internalNodes>\n          <leafValues>\n            3.8922891020774841e-01 5.2635979652404785e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>137</maxWeakCount>\n      <stageThreshold>6.7698921203613281e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 915 4.6550851315259933e-02</internalNodes>\n          <leafValues>\n            3.2769501209259033e-01 6.2405228614807129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 916 7.9537127166986465e-03</internalNodes>\n          <leafValues>\n            4.2564851045608521e-01 6.9429391622543335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 917 6.8221561377868056e-04</internalNodes>\n          <leafValues>\n            3.7114870548248291e-01 5.9007328748703003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 918 -1.9348249770700932e-04</internalNodes>\n          <leafValues>\n            2.0411339402198792e-01 5.3005450963973999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 919 -2.6710508973337710e-04</internalNodes>\n          <leafValues>\n            5.4161262512207031e-01 3.1031790375709534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 920 2.7818060480058193e-03</internalNodes>\n          <leafValues>\n            5.2778327465057373e-01 3.4670698642730713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 921 -4.6779078547842801e-04</internalNodes>\n          <leafValues>\n            5.3082311153411865e-01 3.2944920659065247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 922 -3.0335160772665404e-05</internalNodes>\n          <leafValues>\n            5.7738727331161499e-01 3.8520970940589905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 923 7.8038009814918041e-04</internalNodes>\n          <leafValues>\n            4.3174389004707336e-01 6.1500579118728638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 924 -4.2553851380944252e-03</internalNodes>\n          <leafValues>\n            2.9339039325714111e-01 5.3242927789688110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 925 -2.4735610350035131e-04</internalNodes>\n          <leafValues>\n            5.4688447713851929e-01 3.8430300354957581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 926 -1.4724259381182492e-04</internalNodes>\n          <leafValues>\n            4.2815428972244263e-01 5.7555872201919556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 927 1.1864770203828812e-03</internalNodes>\n          <leafValues>\n            3.7473011016845703e-01 5.4714661836624146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 928 2.3936580400913954e-03</internalNodes>\n          <leafValues>\n            4.5377838611602783e-01 6.1115288734436035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 929 -1.5390539774671197e-03</internalNodes>\n          <leafValues>\n            2.9713419079780579e-01 5.1895380020141602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 930 -7.1968790143728256e-03</internalNodes>\n          <leafValues>\n            6.6990667581558228e-01 4.7264769673347473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 931 -4.1499789222143590e-04</internalNodes>\n          <leafValues>\n            3.3849540352821350e-01 5.2603179216384888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 932 4.4359830208122730e-03</internalNodes>\n          <leafValues>\n            5.3991222381591797e-01 3.9201408624649048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 933 2.6606200262904167e-03</internalNodes>\n          <leafValues>\n            4.4825780391693115e-01 6.1196178197860718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 934 -1.5287200221791863e-03</internalNodes>\n          <leafValues>\n            3.7112379074096680e-01 5.3402662277221680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 935 -4.7397250309586525e-03</internalNodes>\n          <leafValues>\n            6.0310882329940796e-01 4.4551450014114380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 936 -1.4829129911959171e-02</internalNodes>\n          <leafValues>\n            2.8387540578842163e-01 5.3418618440628052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 937 9.2275557108223438e-04</internalNodes>\n          <leafValues>\n            5.2095472812652588e-01 3.3616539835929871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 938 8.3529807627201080e-02</internalNodes>\n          <leafValues>\n            5.1199698448181152e-01 8.1164449453353882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 939 -7.5633148662745953e-04</internalNodes>\n          <leafValues>\n            3.3171200752258301e-01 5.1898312568664551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 940 9.8403859883546829e-03</internalNodes>\n          <leafValues>\n            5.2475982904434204e-01 2.3349590599536896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 941 -1.5953830443322659e-03</internalNodes>\n          <leafValues>\n            5.7500940561294556e-01 4.2956221103668213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 942 3.4766020689858124e-05</internalNodes>\n          <leafValues>\n            4.3424451351165771e-01 5.5640292167663574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 943 2.9862910509109497e-02</internalNodes>\n          <leafValues>\n            4.5791471004486084e-01 6.5791881084442139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 944 1.1325590312480927e-02</internalNodes>\n          <leafValues>\n            5.2743119001388550e-01 3.6738881468772888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 945 -8.7828645482659340e-03</internalNodes>\n          <leafValues>\n            7.1003687381744385e-01 4.6421670913696289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 946 4.3639959767460823e-03</internalNodes>\n          <leafValues>\n            5.2792161703109741e-01 2.7058771252632141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 947 4.1804728098213673e-03</internalNodes>\n          <leafValues>\n            5.0725251436233521e-01 2.4490830302238464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 948 -4.5668511302210391e-04</internalNodes>\n          <leafValues>\n            4.2831051349639893e-01 5.5486911535263062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 949 -3.7140368949621916e-03</internalNodes>\n          <leafValues>\n            5.5193877220153809e-01 4.1036531329154968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 950 -2.5304289534687996e-02</internalNodes>\n          <leafValues>\n            6.8670022487640381e-01 4.8698890209197998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 951 -3.4454080741852522e-04</internalNodes>\n          <leafValues>\n            3.7288740277290344e-01 5.2876931428909302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 952 -8.3935231668874621e-04</internalNodes>\n          <leafValues>\n            6.0601520538330078e-01 4.6160620450973511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 953 1.7280049622058868e-02</internalNodes>\n          <leafValues>\n            5.0496357679367065e-01 1.8198239803314209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 954 -6.3595077954232693e-03</internalNodes>\n          <leafValues>\n            1.6312399506568909e-01 5.2327787876129150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 955 1.0298109846189618e-03</internalNodes>\n          <leafValues>\n            4.4632780551910400e-01 6.1765491962432861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 956 1.0117109632119536e-03</internalNodes>\n          <leafValues>\n            5.4733848571777344e-01 4.3006989359855652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 957 -1.0308800265192986e-02</internalNodes>\n          <leafValues>\n            1.1669850349426270e-01 5.0008672475814819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 958 5.4682018235325813e-03</internalNodes>\n          <leafValues>\n            4.7692871093750000e-01 6.7192137241363525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 959 -9.1696460731327534e-04</internalNodes>\n          <leafValues>\n            3.4710898995399475e-01 5.1781648397445679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 960 2.3922820109874010e-03</internalNodes>\n          <leafValues>\n            4.7852361202239990e-01 6.2163108587265015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 961 -7.5573818758130074e-03</internalNodes>\n          <leafValues>\n            5.8147960901260376e-01 4.4100850820541382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 962 -7.7024032361805439e-04</internalNodes>\n          <leafValues>\n            3.8780000805854797e-01 5.4657220840454102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 963 -8.7125990539789200e-03</internalNodes>\n          <leafValues>\n            1.6600510478019714e-01 4.9958360195159912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 964 -1.0306320153176785e-02</internalNodes>\n          <leafValues>\n            4.0933910012245178e-01 5.2742338180541992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 965 -2.0940979011356831e-03</internalNodes>\n          <leafValues>\n            6.2061947584152222e-01 4.5722800493240356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 966 6.8099051713943481e-03</internalNodes>\n          <leafValues>\n            5.5677592754364014e-01 4.1556000709533691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 967 -1.0746059706434608e-03</internalNodes>\n          <leafValues>\n            5.6389278173446655e-01 4.3530249595642090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 968 2.1550289820879698e-03</internalNodes>\n          <leafValues>\n            4.8262658715248108e-01 6.7497581243515015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 969 3.1742319464683533e-02</internalNodes>\n          <leafValues>\n            5.0483798980712891e-01 1.8832489848136902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 970 -7.8382723033428192e-02</internalNodes>\n          <leafValues>\n            2.3695489764213562e-01 5.2601581811904907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 971 5.7415119372308254e-03</internalNodes>\n          <leafValues>\n            5.0488287210464478e-01 2.7764698863029480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 972 -2.9014600440859795e-03</internalNodes>\n          <leafValues>\n            6.2386047840118408e-01 4.6933171153068542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 973 -2.6427931152284145e-03</internalNodes>\n          <leafValues>\n            3.3141419291496277e-01 5.1697772741317749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 974 -1.0949660092592239e-01</internalNodes>\n          <leafValues>\n            2.3800450563430786e-01 5.1834410429000854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 975 7.4075913289561868e-05</internalNodes>\n          <leafValues>\n            4.0696358680725098e-01 5.3621500730514526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 976 -5.0593802006915212e-04</internalNodes>\n          <leafValues>\n            5.5067062377929688e-01 4.3745940923690796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 977 -8.2131777890026569e-04</internalNodes>\n          <leafValues>\n            5.5257099866867065e-01 4.2093759775161743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 978 -6.0276539443293586e-05</internalNodes>\n          <leafValues>\n            5.4554748535156250e-01 4.7482660412788391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 979 6.8065142259001732e-03</internalNodes>\n          <leafValues>\n            5.1579958200454712e-01 3.4245771169662476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 980 1.7202789895236492e-03</internalNodes>\n          <leafValues>\n            5.0132077932357788e-01 6.3312637805938721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 981 -1.3016929733566940e-04</internalNodes>\n          <leafValues>\n            5.5397182703018188e-01 4.2268699407577515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 982 -4.8016388900578022e-03</internalNodes>\n          <leafValues>\n            4.4250950217247009e-01 5.4307800531387329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 983 -2.5399310979992151e-03</internalNodes>\n          <leafValues>\n            7.1457821130752563e-01 4.6976050734519958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 984 -1.4278929447755218e-03</internalNodes>\n          <leafValues>\n            4.0704450011253357e-01 5.3996050357818604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 985 -2.5142550468444824e-02</internalNodes>\n          <leafValues>\n            7.8846907615661621e-01 4.7473520040512085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 986 -3.8899609353393316e-03</internalNodes>\n          <leafValues>\n            4.2961919307708740e-01 5.5771100521087646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 987 4.3947459198534489e-03</internalNodes>\n          <leafValues>\n            4.6931621432304382e-01 7.0239442586898804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 988 2.4678420275449753e-02</internalNodes>\n          <leafValues>\n            5.2423220872879028e-01 3.8125100731849670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 989 3.8047678768634796e-02</internalNodes>\n          <leafValues>\n            5.0117397308349609e-01 1.6878280043601990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 990 7.9424865543842316e-03</internalNodes>\n          <leafValues>\n            4.8285821080207825e-01 6.3695681095123291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 991 -1.5110049862414598e-03</internalNodes>\n          <leafValues>\n            5.9064859151840210e-01 4.4876679778099060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 992 6.4201741479337215e-03</internalNodes>\n          <leafValues>\n            5.2410978078842163e-01 2.9905700683593750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 993 -2.9802159406244755e-03</internalNodes>\n          <leafValues>\n            3.0414658784866333e-01 5.0784897804260254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 994 -7.4580078944563866e-04</internalNodes>\n          <leafValues>\n            4.1281390190124512e-01 5.2568262815475464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 995 -1.0470950044691563e-02</internalNodes>\n          <leafValues>\n            5.8083951473236084e-01 4.4942960143089294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 996 9.3369204550981522e-03</internalNodes>\n          <leafValues>\n            5.2465528249740601e-01 2.6589488983154297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 997 2.7936900034546852e-02</internalNodes>\n          <leafValues>\n            4.6749550104141235e-01 7.0872569084167480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 998 7.4277678504586220e-03</internalNodes>\n          <leafValues>\n            5.4094868898391724e-01 3.7585180997848511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 999 -2.3584509268403053e-02</internalNodes>\n          <leafValues>\n            3.7586399912834167e-01 5.2385509014129639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1000 1.1452640173956752e-03</internalNodes>\n          <leafValues>\n            4.3295788764953613e-01 5.8042472600936890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1001 -4.3468660442158580e-04</internalNodes>\n          <leafValues>\n            5.2806180715560913e-01 3.8730698823928833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1002 1.0648540221154690e-02</internalNodes>\n          <leafValues>\n            4.9021130800247192e-01 5.6812518835067749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1003 -3.9418050437234342e-04</internalNodes>\n          <leafValues>\n            5.5708801746368408e-01 4.3182510137557983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1004 -1.3270479394122958e-04</internalNodes>\n          <leafValues>\n            5.6584399938583374e-01 4.3435549736022949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1005 -2.0125510636717081e-03</internalNodes>\n          <leafValues>\n            6.0567390918731689e-01 4.5375239849090576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1006 2.4854319635778666e-03</internalNodes>\n          <leafValues>\n            5.3904771804809570e-01 4.1380101442337036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1007 1.8237880431115627e-03</internalNodes>\n          <leafValues>\n            4.3548288941383362e-01 5.7171887159347534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1008 -1.6656659543514252e-02</internalNodes>\n          <leafValues>\n            3.0109131336212158e-01 5.2161228656768799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1009 8.0349558265879750e-04</internalNodes>\n          <leafValues>\n            5.3001511096954346e-01 3.8183969259262085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1010 3.4170378930866718e-03</internalNodes>\n          <leafValues>\n            5.3280287981033325e-01 4.2414000630378723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1011 -3.6222729249857366e-04</internalNodes>\n          <leafValues>\n            5.4917281866073608e-01 4.1869771480560303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1012 -1.1630020290613174e-01</internalNodes>\n          <leafValues>\n            1.4407220482826233e-01 5.2264511585235596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1013 -1.4695010147988796e-02</internalNodes>\n          <leafValues>\n            7.7477252483367920e-01 4.7157171368598938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1014 2.1972130052745342e-03</internalNodes>\n          <leafValues>\n            5.3554338216781616e-01 3.3156448602676392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1015 -4.6965209185145795e-04</internalNodes>\n          <leafValues>\n            5.7672351598739624e-01 4.4581368565559387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1016 6.5144998952746391e-03</internalNodes>\n          <leafValues>\n            5.2156740427017212e-01 3.6478888988494873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1017 2.1300060674548149e-02</internalNodes>\n          <leafValues>\n            4.9942049384117126e-01 1.5679509937763214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1018 3.1881409231573343e-03</internalNodes>\n          <leafValues>\n            4.7422000765800476e-01 6.2872701883316040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1019 9.0019777417182922e-04</internalNodes>\n          <leafValues>\n            5.3479540348052979e-01 3.9437520503997803e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1020 -5.1772277802228928e-03</internalNodes>\n          <leafValues>\n            6.7271918058395386e-01 5.0131380558013916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1021 -4.3764649890363216e-03</internalNodes>\n          <leafValues>\n            3.1066751480102539e-01 5.1287931203842163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1022 2.6299960445612669e-03</internalNodes>\n          <leafValues>\n            4.8863101005554199e-01 5.7552158832550049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1023 -2.0458688959479332e-03</internalNodes>\n          <leafValues>\n            6.0257941484451294e-01 4.5580768585205078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1024 6.9482706487178802e-02</internalNodes>\n          <leafValues>\n            5.2407479286193848e-01 2.1852590143680573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1025 2.4048939347267151e-02</internalNodes>\n          <leafValues>\n            5.0118672847747803e-01 2.0906220376491547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1026 3.1095340382307768e-03</internalNodes>\n          <leafValues>\n            4.8667120933532715e-01 7.1085482835769653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1027 -1.2503260513767600e-03</internalNodes>\n          <leafValues>\n            3.4078910946846008e-01 5.1561951637268066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1028 -1.0281190043315291e-03</internalNodes>\n          <leafValues>\n            5.5755722522735596e-01 4.4394320249557495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1029 -8.8893622159957886e-03</internalNodes>\n          <leafValues>\n            6.4020007848739624e-01 4.6204420924186707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1030 -6.1094801640138030e-04</internalNodes>\n          <leafValues>\n            3.7664419412612915e-01 5.4488998651504517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1031 -5.7686357758939266e-03</internalNodes>\n          <leafValues>\n            3.3186489343643188e-01 5.1336771249771118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1032 1.8506490159779787e-03</internalNodes>\n          <leafValues>\n            4.9035701155662537e-01 6.4069348573684692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1033 -9.9799469113349915e-02</internalNodes>\n          <leafValues>\n            1.5360510349273682e-01 5.0155621767044067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1034 -3.5128349065780640e-01</internalNodes>\n          <leafValues>\n            5.8823131024837494e-02 5.1743787527084351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1035 -4.5244570821523666e-02</internalNodes>\n          <leafValues>\n            6.9614887237548828e-01 4.6778729557991028e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1036 7.1481578052043915e-02</internalNodes>\n          <leafValues>\n            5.1679861545562744e-01 1.0380929708480835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1037 2.1895780228078365e-03</internalNodes>\n          <leafValues>\n            4.2730781435966492e-01 5.5320608615875244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1038 -5.9242651332169771e-04</internalNodes>\n          <leafValues>\n            4.6389439702033997e-01 5.2763891220092773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1039 1.6788389766588807e-03</internalNodes>\n          <leafValues>\n            5.3016489744186401e-01 3.9320349693298340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1040 -2.2163488902151585e-03</internalNodes>\n          <leafValues>\n            5.6306940317153931e-01 4.7570338845252991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1041 1.1568699846975505e-04</internalNodes>\n          <leafValues>\n            4.3075358867645264e-01 5.5357027053833008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1042 -7.2017288766801357e-03</internalNodes>\n          <leafValues>\n            1.4448820054531097e-01 5.1930642127990723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1043 8.9081272017210722e-04</internalNodes>\n          <leafValues>\n            4.3844321370124817e-01 5.5936211347579956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1044 1.9605009583756328e-04</internalNodes>\n          <leafValues>\n            5.3404158353805542e-01 4.7059568762779236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1045 5.2022142335772514e-04</internalNodes>\n          <leafValues>\n            5.2138561010360718e-01 3.8100790977478027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1046 9.4588572392240167e-04</internalNodes>\n          <leafValues>\n            4.7694149613380432e-01 6.1307388544082642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1047 9.1698471806012094e-05</internalNodes>\n          <leafValues>\n            4.2450091242790222e-01 5.4293632507324219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1048 2.1833200007677078e-03</internalNodes>\n          <leafValues>\n            5.4577308893203735e-01 4.1910758614540100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1049 -8.6039671441540122e-04</internalNodes>\n          <leafValues>\n            5.7645887136459351e-01 4.4716599583625793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1050 -1.3236239552497864e-02</internalNodes>\n          <leafValues>\n            6.3728231191635132e-01 4.6950098872184753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1051 4.3376701069064438e-04</internalNodes>\n          <leafValues>\n            5.3178739547729492e-01 3.9458298683166504e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>140</maxWeakCount>\n      <stageThreshold>6.9229873657226562e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1052 -2.4847149848937988e-02</internalNodes>\n          <leafValues>\n            6.5555167198181152e-01 3.8733118772506714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1053 6.1348611488938332e-03</internalNodes>\n          <leafValues>\n            3.7480720877647400e-01 5.9739977121353149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1054 6.4498498104512691e-03</internalNodes>\n          <leafValues>\n            5.4254919290542603e-01 2.5488111376762390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1055 6.3491211039945483e-04</internalNodes>\n          <leafValues>\n            2.4624420702457428e-01 5.3872537612915039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1056 1.4023890253156424e-03</internalNodes>\n          <leafValues>\n            5.5943220853805542e-01 3.5286578536033630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1057 3.0044000595808029e-04</internalNodes>\n          <leafValues>\n            3.9585039019584656e-01 5.7659381628036499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1058 1.0042409849120304e-04</internalNodes>\n          <leafValues>\n            3.6989969015121460e-01 5.5349981784820557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1059 -5.0841490738093853e-03</internalNodes>\n          <leafValues>\n            3.7110909819602966e-01 5.5478000640869141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1060 -1.9537260755896568e-02</internalNodes>\n          <leafValues>\n            7.4927550554275513e-01 4.5792970061302185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1061 -7.4532740654831287e-06</internalNodes>\n          <leafValues>\n            5.6497871875762939e-01 3.9040699601173401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1062 -3.6079459823668003e-03</internalNodes>\n          <leafValues>\n            3.3810880780220032e-01 5.2678012847900391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1063 2.0697501022368670e-03</internalNodes>\n          <leafValues>\n            5.5192911624908447e-01 3.7143889069557190e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1064 -4.6463840408250690e-04</internalNodes>\n          <leafValues>\n            5.6082147359848022e-01 4.1135668754577637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1065 7.5490452582016587e-04</internalNodes>\n          <leafValues>\n            3.5592061281204224e-01 5.3293561935424805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1066 -9.8322238773107529e-04</internalNodes>\n          <leafValues>\n            5.4147958755493164e-01 3.7632051110267639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1067 -1.9940640777349472e-02</internalNodes>\n          <leafValues>\n            6.3479030132293701e-01 4.7052991390228271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1068 3.7680300883948803e-03</internalNodes>\n          <leafValues>\n            3.9134898781776428e-01 5.5637162923812866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1069 -9.4528505578637123e-03</internalNodes>\n          <leafValues>\n            2.5548928976058960e-01 5.2151167392730713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1070 2.9560849070549011e-03</internalNodes>\n          <leafValues>\n            5.1746791601181030e-01 3.0639201402664185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1071 9.1078737750649452e-03</internalNodes>\n          <leafValues>\n            5.3884482383728027e-01 2.8859630227088928e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1072 1.8219229532405734e-03</internalNodes>\n          <leafValues>\n            4.3360430002212524e-01 5.8521968126296997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1073 1.4688739553093910e-02</internalNodes>\n          <leafValues>\n            5.2873617410659790e-01 2.8700059652328491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1074 -1.4387990348041058e-02</internalNodes>\n          <leafValues>\n            7.0194488763809204e-01 4.6473708748817444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1075 -1.8986649811267853e-02</internalNodes>\n          <leafValues>\n            2.9865521192550659e-01 5.2470117807388306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1076 1.1527639580890536e-03</internalNodes>\n          <leafValues>\n            4.3234738707542419e-01 5.9316617250442505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1077 1.0933670215308666e-02</internalNodes>\n          <leafValues>\n            5.2868640422821045e-01 3.1303191184997559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1078 -1.4932730235159397e-02</internalNodes>\n          <leafValues>\n            2.6584190130233765e-01 5.0840771198272705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1079 -2.9970539617352188e-04</internalNodes>\n          <leafValues>\n            5.4635268449783325e-01 3.7407240271568298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1080 4.1677621193230152e-03</internalNodes>\n          <leafValues>\n            4.7034969925880432e-01 7.4357217550277710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1081 -6.3905320130288601e-03</internalNodes>\n          <leafValues>\n            2.0692589879035950e-01 5.2805382013320923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1082 4.5029609464108944e-03</internalNodes>\n          <leafValues>\n            5.1826488971710205e-01 3.4835430979728699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1083 -9.2040365561842918e-03</internalNodes>\n          <leafValues>\n            6.8037772178649902e-01 4.9323600530624390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1084 8.1327259540557861e-02</internalNodes>\n          <leafValues>\n            5.0583988428115845e-01 2.2530519962310791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1085 -1.5079280734062195e-01</internalNodes>\n          <leafValues>\n            2.9634249210357666e-01 5.2646797895431519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1086 3.3179009333252907e-03</internalNodes>\n          <leafValues>\n            4.6554958820343018e-01 7.0729321241378784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1087 7.7402801252901554e-04</internalNodes>\n          <leafValues>\n            4.7803479433059692e-01 5.6682378053665161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1088 6.8199541419744492e-04</internalNodes>\n          <leafValues>\n            4.2869961261749268e-01 5.7221567630767822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1089 5.3671570494771004e-03</internalNodes>\n          <leafValues>\n            5.2993071079254150e-01 3.1146219372749329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1090 9.7018666565418243e-05</internalNodes>\n          <leafValues>\n            3.6746388673782349e-01 5.2694618701934814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1091 -1.2534089386463165e-01</internalNodes>\n          <leafValues>\n            2.3514920473098755e-01 5.2457910776138306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1092 -5.2516269497573376e-03</internalNodes>\n          <leafValues>\n            7.1159368753433228e-01 4.6937671303749084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1093 -7.8342109918594360e-03</internalNodes>\n          <leafValues>\n            4.4626510143280029e-01 5.4090857505798340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1094 -1.1310069821774960e-03</internalNodes>\n          <leafValues>\n            5.9456187486648560e-01 4.4176620244979858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1095 1.7601120052859187e-03</internalNodes>\n          <leafValues>\n            5.3532499074935913e-01 3.9734530448913574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1096 -8.1581249833106995e-04</internalNodes>\n          <leafValues>\n            3.7602680921554565e-01 5.2647268772125244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1097 -3.8687589112669230e-03</internalNodes>\n          <leafValues>\n            6.3099128007888794e-01 4.7498199343681335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1098 1.5207129763439298e-03</internalNodes>\n          <leafValues>\n            5.2301818132400513e-01 3.3612239360809326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1099 5.4586738348007202e-01</internalNodes>\n          <leafValues>\n            5.1671397686004639e-01 1.1726350337266922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1100 1.5650190412998199e-02</internalNodes>\n          <leafValues>\n            4.9794390797615051e-01 1.3932949304580688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1101 -1.1731860227882862e-02</internalNodes>\n          <leafValues>\n            7.1296507120132446e-01 4.9211961030960083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1102 -6.1765122227370739e-03</internalNodes>\n          <leafValues>\n            2.2881029546260834e-01 5.0497019290924072e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1103 2.2457661107182503e-03</internalNodes>\n          <leafValues>\n            4.6324339509010315e-01 6.0487258434295654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1104 -5.1915869116783142e-03</internalNodes>\n          <leafValues>\n            6.4674210548400879e-01 4.6021929383277893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1105 -2.3827880620956421e-02</internalNodes>\n          <leafValues>\n            1.4820009469985962e-01 5.2260792255401611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1106 1.0284580057486892e-03</internalNodes>\n          <leafValues>\n            5.1354891061782837e-01 3.3759570121765137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1107 -1.0078850202262402e-02</internalNodes>\n          <leafValues>\n            2.7405610680580139e-01 5.3035670518875122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1108 2.6168930344283581e-03</internalNodes>\n          <leafValues>\n            5.3326708078384399e-01 3.9724540710449219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1109 5.4385367548093200e-04</internalNodes>\n          <leafValues>\n            5.3656041622161865e-01 4.0634119510650635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1110 5.3510512225329876e-03</internalNodes>\n          <leafValues>\n            4.6537590026855469e-01 6.8890458345413208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1111 -1.5274790348485112e-03</internalNodes>\n          <leafValues>\n            5.4495012760162354e-01 3.6247238516807556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1112 -8.0624416470527649e-02</internalNodes>\n          <leafValues>\n            1.6560870409011841e-01 5.0002872943878174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1113 2.2192029282450676e-02</internalNodes>\n          <leafValues>\n            5.1327311992645264e-01 2.0028080046176910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1114 7.3100631125271320e-03</internalNodes>\n          <leafValues>\n            4.6179479360580444e-01 6.3665360212326050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1115 -6.4063072204589844e-03</internalNodes>\n          <leafValues>\n            5.9162509441375732e-01 4.8678609728813171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1116 -7.6415040530264378e-04</internalNodes>\n          <leafValues>\n            3.8884091377258301e-01 5.3157979249954224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1117 7.6734489994123578e-04</internalNodes>\n          <leafValues>\n            4.1590648889541626e-01 5.6052798032760620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1118 6.1474501853808761e-04</internalNodes>\n          <leafValues>\n            3.0890220403671265e-01 5.1201480627059937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1119 -5.0105270929634571e-03</internalNodes>\n          <leafValues>\n            3.9721998572349548e-01 5.2073061466217041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1120 -8.6909132078289986e-03</internalNodes>\n          <leafValues>\n            6.2574082612991333e-01 4.6085759997367859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1121 -1.6391459852457047e-02</internalNodes>\n          <leafValues>\n            2.0852099359035492e-01 5.2422660589218140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1122 4.0973909199237823e-04</internalNodes>\n          <leafValues>\n            5.2224272489547729e-01 3.7803208827972412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1123 -2.5242289993911982e-03</internalNodes>\n          <leafValues>\n            5.8039271831512451e-01 4.6118900179862976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1124 5.0945312250405550e-04</internalNodes>\n          <leafValues>\n            4.4012719392776489e-01 5.8460158109664917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1125 1.9656419754028320e-03</internalNodes>\n          <leafValues>\n            5.3223252296447754e-01 4.1845908761024475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1126 5.6298897834494710e-04</internalNodes>\n          <leafValues>\n            3.7418448925018311e-01 5.2345657348632812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1127 -6.7946797935292125e-04</internalNodes>\n          <leafValues>\n            4.6310418844223022e-01 5.3564780950546265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1128 7.2856349870562553e-03</internalNodes>\n          <leafValues>\n            5.0446701049804688e-01 2.3775640130043030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1129 -1.7459489405155182e-02</internalNodes>\n          <leafValues>\n            7.2891211509704590e-01 5.0504350662231445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1130 -2.5421749800443649e-02</internalNodes>\n          <leafValues>\n            6.6671347618103027e-01 4.6781000494956970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1131 -1.5647639520466328e-03</internalNodes>\n          <leafValues>\n            4.3917590379714966e-01 5.3236269950866699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1132 1.1444360017776489e-02</internalNodes>\n          <leafValues>\n            4.3464401364326477e-01 5.6800121068954468e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1133 -6.7352550104260445e-04</internalNodes>\n          <leafValues>\n            4.4771409034729004e-01 5.2968120574951172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1134 9.3194209039211273e-03</internalNodes>\n          <leafValues>\n            4.7402000427246094e-01 7.4626070261001587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1135 1.3328490604180843e-04</internalNodes>\n          <leafValues>\n            5.3650617599487305e-01 4.7521349787712097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1136 -7.8815799206495285e-03</internalNodes>\n          <leafValues>\n            1.7522190511226654e-01 5.0152552127838135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1137 -5.7985680177807808e-03</internalNodes>\n          <leafValues>\n            7.2712367773056030e-01 4.8962008953094482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1138 -3.8922499516047537e-04</internalNodes>\n          <leafValues>\n            4.0039089322090149e-01 5.3449410200119019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1139 -1.9288610201328993e-03</internalNodes>\n          <leafValues>\n            5.6056129932403564e-01 4.8039558529853821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1140 8.4214154630899429e-03</internalNodes>\n          <leafValues>\n            4.7532469034194946e-01 7.6236087083816528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1141 8.1655876711010933e-03</internalNodes>\n          <leafValues>\n            5.3932619094848633e-01 4.1916438937187195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1142 4.8280550981871784e-04</internalNodes>\n          <leafValues>\n            4.2408001422882080e-01 5.3998219966888428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1143 -2.7186630759388208e-03</internalNodes>\n          <leafValues>\n            4.2445999383926392e-01 5.4249238967895508e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1144 -1.2507230043411255e-02</internalNodes>\n          <leafValues>\n            5.8958417177200317e-01 4.5504111051559448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1145 -2.4286519736051559e-02</internalNodes>\n          <leafValues>\n            2.6471349596977234e-01 5.1891797780990601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1146 -2.9676330741494894e-03</internalNodes>\n          <leafValues>\n            7.3476827144622803e-01 4.7497498989105225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1147 -1.2528999708592892e-02</internalNodes>\n          <leafValues>\n            2.7560499310493469e-01 5.1775997877120972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1148 -1.0104000102728605e-03</internalNodes>\n          <leafValues>\n            3.5105609893798828e-01 5.1447242498397827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1149 -2.1348530426621437e-03</internalNodes>\n          <leafValues>\n            5.6379258632659912e-01 4.6673199534416199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1150 1.9564259797334671e-02</internalNodes>\n          <leafValues>\n            4.6145731210708618e-01 6.1376398801803589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1151 -9.7146347165107727e-02</internalNodes>\n          <leafValues>\n            2.9983788728713989e-01 5.1935559511184692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1152 4.5014568604528904e-03</internalNodes>\n          <leafValues>\n            5.0778847932815552e-01 3.0457559227943420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1153 6.3706971704959869e-03</internalNodes>\n          <leafValues>\n            4.8610189557075500e-01 6.8875008821487427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1154 -9.0721528977155685e-03</internalNodes>\n          <leafValues>\n            1.6733959317207336e-01 5.0175631046295166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1155 -5.3537208586931229e-03</internalNodes>\n          <leafValues>\n            2.6927569508552551e-01 5.2426332235336304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1156 -1.0932840406894684e-02</internalNodes>\n          <leafValues>\n            7.1838641166687012e-01 4.7360289096832275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1157 8.2356072962284088e-03</internalNodes>\n          <leafValues>\n            5.2239668369293213e-01 2.3898629844188690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1158 -1.0038160253316164e-03</internalNodes>\n          <leafValues>\n            5.7193559408187866e-01 4.4339430332183838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1159 4.0859128348529339e-03</internalNodes>\n          <leafValues>\n            5.4728418588638306e-01 4.1488361358642578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1160 1.5485419332981110e-01</internalNodes>\n          <leafValues>\n            4.9738121032714844e-01 6.1061598360538483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1161 2.0897459762636572e-04</internalNodes>\n          <leafValues>\n            4.7091740369796753e-01 5.4238891601562500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1162 3.3316991175524890e-04</internalNodes>\n          <leafValues>\n            4.0896269679069519e-01 5.3009921312332153e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1163 -1.0813400149345398e-02</internalNodes>\n          <leafValues>\n            6.1043697595596313e-01 4.9573341012001038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1164 4.5656010508537292e-02</internalNodes>\n          <leafValues>\n            5.0696891546249390e-01 2.8666600584983826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1165 1.2569549726322293e-03</internalNodes>\n          <leafValues>\n            4.8469170928001404e-01 6.3181710243225098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1166 -1.2015070021152496e-01</internalNodes>\n          <leafValues>\n            6.0526140034198761e-02 4.9809598922729492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1167 -1.0533799650147557e-04</internalNodes>\n          <leafValues>\n            5.3631097078323364e-01 4.7080421447753906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1168 -2.0703190565109253e-01</internalNodes>\n          <leafValues>\n            5.9660330414772034e-02 4.9790981411933899e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1169 1.2909180077258497e-04</internalNodes>\n          <leafValues>\n            4.7129771113395691e-01 5.3779977560043335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1170 3.8818528992123902e-04</internalNodes>\n          <leafValues>\n            4.3635380268096924e-01 5.5341911315917969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1171 -2.9243610333651304e-03</internalNodes>\n          <leafValues>\n            5.8111858367919922e-01 4.8252159357070923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1172 8.3882332546636462e-04</internalNodes>\n          <leafValues>\n            5.3117001056671143e-01 4.0381389856338501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1173 -1.9061550265178084e-03</internalNodes>\n          <leafValues>\n            3.7707018852233887e-01 5.2600151300430298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1174 8.9514348655939102e-03</internalNodes>\n          <leafValues>\n            4.7661679983139038e-01 7.6821839809417725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1175 1.3083459809422493e-02</internalNodes>\n          <leafValues>\n            5.2644628286361694e-01 3.0622220039367676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1176 -2.1159330010414124e-01</internalNodes>\n          <leafValues>\n            6.7371982336044312e-01 4.6958100795745850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1177 3.1493250280618668e-03</internalNodes>\n          <leafValues>\n            5.6448352336883545e-01 4.3869531154632568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1178 3.9754100725986063e-04</internalNodes>\n          <leafValues>\n            4.5260611176490784e-01 5.8956301212310791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1179 -1.3814480043947697e-03</internalNodes>\n          <leafValues>\n            6.0705822706222534e-01 4.9424138665199280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1180 -5.8122188784182072e-04</internalNodes>\n          <leafValues>\n            5.9982132911682129e-01 4.5082521438598633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1181 -2.3905329871922731e-03</internalNodes>\n          <leafValues>\n            4.2055889964103699e-01 5.2238482236862183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1182 2.7268929407000542e-02</internalNodes>\n          <leafValues>\n            5.2064472436904907e-01 3.5633018612861633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1183 -3.7658358924090862e-03</internalNodes>\n          <leafValues>\n            3.1447041034698486e-01 5.2188140153884888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1184 -1.4903489500284195e-03</internalNodes>\n          <leafValues>\n            3.3801960945129395e-01 5.1244372129440308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1185 -1.7428230494260788e-02</internalNodes>\n          <leafValues>\n            5.8299607038497925e-01 4.9197259545326233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1186 -1.5278030186891556e-02</internalNodes>\n          <leafValues>\n            6.1631447076797485e-01 4.6178871393203735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1187 3.1995609402656555e-02</internalNodes>\n          <leafValues>\n            5.1663571596145630e-01 1.7127640545368195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1188 -3.8256710395216942e-03</internalNodes>\n          <leafValues>\n            3.4080120921134949e-01 5.1313877105712891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1189 -8.5186436772346497e-03</internalNodes>\n          <leafValues>\n            6.1055189371109009e-01 4.9979418516159058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1190 9.0641621500253677e-04</internalNodes>\n          <leafValues>\n            4.3272709846496582e-01 5.5823111534118652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1191 1.0344849899411201e-02</internalNodes>\n          <leafValues>\n            4.8556530475616455e-01 5.4524201154708862e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>160</maxWeakCount>\n      <stageThreshold>7.9249076843261719e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1192 7.8981826081871986e-03</internalNodes>\n          <leafValues>\n            3.3325248956680298e-01 5.9464621543884277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1193 1.6170160379260778e-03</internalNodes>\n          <leafValues>\n            3.4906411170959473e-01 5.5778688192367554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1194 -5.5449741194024682e-04</internalNodes>\n          <leafValues>\n            5.5425661802291870e-01 3.2915300130844116e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1195 1.5428980113938451e-03</internalNodes>\n          <leafValues>\n            3.6125791072845459e-01 5.5459791421890259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1196 -1.0329450014978647e-03</internalNodes>\n          <leafValues>\n            3.5301390290260315e-01 5.5761402845382690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1197 7.7698158565908670e-04</internalNodes>\n          <leafValues>\n            3.9167788624763489e-01 5.6453210115432739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1198 1.4320300519466400e-01</internalNodes>\n          <leafValues>\n            4.6674820780754089e-01 7.0236331224441528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1199 -7.3866490274667740e-03</internalNodes>\n          <leafValues>\n            3.0736848711967468e-01 5.2892577648162842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1200 -6.2936742324382067e-04</internalNodes>\n          <leafValues>\n            5.6221181154251099e-01 4.0370491147041321e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1201 7.8893528552725911e-04</internalNodes>\n          <leafValues>\n            5.2676612138748169e-01 3.5578748583793640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1202 -1.2228050269186497e-02</internalNodes>\n          <leafValues>\n            6.6683208942413330e-01 4.6255499124526978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1203 3.5420239437371492e-03</internalNodes>\n          <leafValues>\n            5.5214381217956543e-01 3.8696730136871338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1204 -1.0585320414975286e-03</internalNodes>\n          <leafValues>\n            3.6286780238151550e-01 5.3209269046783447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1205 1.4935660146875307e-05</internalNodes>\n          <leafValues>\n            4.6324449777603149e-01 5.3633230924606323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1206 5.2537708543241024e-03</internalNodes>\n          <leafValues>\n            5.1322317123413086e-01 3.2657089829444885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1207 -8.2338023930788040e-03</internalNodes>\n          <leafValues>\n            6.6936898231506348e-01 4.7741401195526123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1208 2.1866810129722580e-05</internalNodes>\n          <leafValues>\n            4.0538620948791504e-01 5.4579311609268188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1209 -3.8150229956954718e-03</internalNodes>\n          <leafValues>\n            6.4549958705902100e-01 4.7931781411170959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1210 1.1105879675596952e-03</internalNodes>\n          <leafValues>\n            5.2704071998596191e-01 3.5296788811683655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1211 -5.7707689702510834e-03</internalNodes>\n          <leafValues>\n            3.8035470247268677e-01 5.3529578447341919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1212 -3.0158339068293571e-03</internalNodes>\n          <leafValues>\n            5.3394031524658203e-01 3.8871330022811890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1213 -8.5453689098358154e-04</internalNodes>\n          <leafValues>\n            3.5646161437034607e-01 5.2736037969589233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1214 1.1050510220229626e-02</internalNodes>\n          <leafValues>\n            4.6719071269035339e-01 6.8497377634048462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1215 4.2605839669704437e-02</internalNodes>\n          <leafValues>\n            5.1514732837677002e-01 7.0220090448856354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1216 -3.0781750101596117e-03</internalNodes>\n          <leafValues>\n            3.0416610836982727e-01 5.1526021957397461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1217 -5.4815728217363358e-03</internalNodes>\n          <leafValues>\n            6.4302957057952881e-01 4.8972299695014954e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1218 3.1881860923022032e-03</internalNodes>\n          <leafValues>\n            5.3074932098388672e-01 3.8262099027633667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1219 3.5947180003859103e-04</internalNodes>\n          <leafValues>\n            4.6500471234321594e-01 5.4219049215316772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1220 -4.0705031715333462e-03</internalNodes>\n          <leafValues>\n            2.8496798872947693e-01 5.0791162252426147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1221 -1.4594170264899731e-02</internalNodes>\n          <leafValues>\n            2.9716458916664124e-01 5.1284617185592651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1222 -1.1947689927183092e-04</internalNodes>\n          <leafValues>\n            5.6310981512069702e-01 4.3430820107460022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1223 -6.9344649091362953e-04</internalNodes>\n          <leafValues>\n            4.4035780429840088e-01 5.3599590063095093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1224 1.4834799912932795e-05</internalNodes>\n          <leafValues>\n            3.4210088849067688e-01 5.1646977663040161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1225 9.0296985581517220e-03</internalNodes>\n          <leafValues>\n            4.6393430233001709e-01 6.1140751838684082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1226 -8.0640818923711777e-03</internalNodes>\n          <leafValues>\n            2.8201588988304138e-01 5.0754940509796143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1227 2.6062119752168655e-02</internalNodes>\n          <leafValues>\n            5.2089059352874756e-01 2.6887780427932739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1228 1.7314659431576729e-02</internalNodes>\n          <leafValues>\n            4.6637138724327087e-01 6.7385399341583252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1229 2.2666640579700470e-02</internalNodes>\n          <leafValues>\n            5.2093499898910522e-01 2.2127239406108856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1230 -2.1965929772704840e-03</internalNodes>\n          <leafValues>\n            6.0631012916564941e-01 4.5381900668144226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1231 -9.5282476395368576e-03</internalNodes>\n          <leafValues>\n            4.6352049708366394e-01 5.2474308013916016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1232 8.0943619832396507e-03</internalNodes>\n          <leafValues>\n            5.2894401550292969e-01 3.9138820767402649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1233 -7.2877332568168640e-02</internalNodes>\n          <leafValues>\n            7.7520018815994263e-01 4.9902349710464478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1234 -6.9009521976113319e-03</internalNodes>\n          <leafValues>\n            2.4280390143394470e-01 5.0480902194976807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1235 -1.1308239772915840e-02</internalNodes>\n          <leafValues>\n            5.7343649864196777e-01 4.8423761129379272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1236 5.9613201767206192e-02</internalNodes>\n          <leafValues>\n            5.0298362970352173e-01 2.5249770283699036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1237 -2.8624620754271746e-03</internalNodes>\n          <leafValues>\n            6.0730451345443726e-01 4.8984599113464355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1238 4.4781449250876904e-03</internalNodes>\n          <leafValues>\n            5.0152891874313354e-01 2.2203169763088226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1239 -1.7513240454718471e-03</internalNodes>\n          <leafValues>\n            6.6144287586212158e-01 4.9338689446449280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1240 4.0163420140743256e-02</internalNodes>\n          <leafValues>\n            5.1808780431747437e-01 3.7410449981689453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1241 3.4768949262797832e-04</internalNodes>\n          <leafValues>\n            4.7204169631004333e-01 5.8180320262908936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1242 2.6551650371402502e-03</internalNodes>\n          <leafValues>\n            3.8050109148025513e-01 5.2213358879089355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1243 -8.7706279009580612e-03</internalNodes>\n          <leafValues>\n            2.9441660642623901e-01 5.2312952280044556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1244 -5.5122091434895992e-03</internalNodes>\n          <leafValues>\n            7.3461771011352539e-01 4.7228169441223145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1245 6.8672042107209563e-04</internalNodes>\n          <leafValues>\n            5.4528760910034180e-01 4.2424130439758301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1246 5.6019669864326715e-04</internalNodes>\n          <leafValues>\n            4.3988621234893799e-01 5.6012850999832153e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1247 2.4143769405782223e-03</internalNodes>\n          <leafValues>\n            4.7416868805885315e-01 6.1366218328475952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1248 -1.5680900542065501e-03</internalNodes>\n          <leafValues>\n            6.0445529222488403e-01 4.5164099335670471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1249 -3.6827491130679846e-03</internalNodes>\n          <leafValues>\n            2.4524590373039246e-01 5.2949821949005127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1250 -2.9409190756268799e-04</internalNodes>\n          <leafValues>\n            3.7328380346298218e-01 5.2514511346817017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1251 4.2847759323194623e-04</internalNodes>\n          <leafValues>\n            5.4988098144531250e-01 4.0655350685119629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1252 -4.8817070201039314e-03</internalNodes>\n          <leafValues>\n            2.1399089694023132e-01 4.9999570846557617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1253 2.7272020815871656e-04</internalNodes>\n          <leafValues>\n            4.6502870321273804e-01 5.8134287595748901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1254 2.0947199664078653e-04</internalNodes>\n          <leafValues>\n            4.3874868750572205e-01 5.5727928876876831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1255 4.8501189798116684e-02</internalNodes>\n          <leafValues>\n            5.2449727058410645e-01 3.2128891348838806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1256 -4.5166411437094212e-03</internalNodes>\n          <leafValues>\n            6.0568130016326904e-01 4.5458820462226868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1257 -1.2291680090129375e-02</internalNodes>\n          <leafValues>\n            2.0409290492534637e-01 5.1522141695022583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1258 4.8549679922871292e-04</internalNodes>\n          <leafValues>\n            5.2376049757003784e-01 3.7395030260086060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1259 3.0556049197912216e-02</internalNodes>\n          <leafValues>\n            4.9605339765548706e-01 5.9382462501525879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1260 -1.5105320198927075e-04</internalNodes>\n          <leafValues>\n            5.3513038158416748e-01 4.1452041268348694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1261 2.4937440175563097e-03</internalNodes>\n          <leafValues>\n            4.6933668851852417e-01 5.5149412155151367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1262 -1.2382130138576031e-02</internalNodes>\n          <leafValues>\n            6.7913967370986938e-01 4.6816679835319519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1263 -5.1333461888134480e-03</internalNodes>\n          <leafValues>\n            3.6087390780448914e-01 5.2291601896286011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1264 5.1919277757406235e-04</internalNodes>\n          <leafValues>\n            5.3000730276107788e-01 3.6336138844490051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1265 1.5060420334339142e-01</internalNodes>\n          <leafValues>\n            5.1573169231414795e-01 2.2117820382118225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1266 7.7144149690866470e-03</internalNodes>\n          <leafValues>\n            4.4104969501495361e-01 5.7766091823577881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1267 9.4443522393703461e-03</internalNodes>\n          <leafValues>\n            5.4018551111221313e-01 3.7566500902175903e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1268 2.5006249779835343e-04</internalNodes>\n          <leafValues>\n            4.3682709336280823e-01 5.6073749065399170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1269 -3.3077150583267212e-03</internalNodes>\n          <leafValues>\n            4.2447990179061890e-01 5.5182307958602905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1270 7.4048910755664110e-04</internalNodes>\n          <leafValues>\n            4.4969621300697327e-01 5.9005767107009888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1271 4.4092051684856415e-02</internalNodes>\n          <leafValues>\n            5.2934932708740234e-01 3.1563550233840942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1272 3.3639909233897924e-03</internalNodes>\n          <leafValues>\n            4.4832968711853027e-01 5.8486622571945190e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1273 -3.9760079234838486e-03</internalNodes>\n          <leafValues>\n            4.5595070719718933e-01 5.4836392402648926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1274 2.7716930489987135e-03</internalNodes>\n          <leafValues>\n            5.3417861461639404e-01 3.7924841046333313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1275 -2.4123019829858094e-04</internalNodes>\n          <leafValues>\n            5.6671887636184692e-01 4.5769730210304260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1276 4.9425667384639382e-04</internalNodes>\n          <leafValues>\n            4.4212448596954346e-01 5.6287872791290283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1277 -3.8876468897797167e-04</internalNodes>\n          <leafValues>\n            4.2883709073066711e-01 5.3910630941390991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1278 -5.0048898905515671e-02</internalNodes>\n          <leafValues>\n            6.8995130062103271e-01 4.7037428617477417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1279 -3.6635480821132660e-02</internalNodes>\n          <leafValues>\n            2.2177790105342865e-01 5.1918262243270874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1280 2.4273579474538565e-03</internalNodes>\n          <leafValues>\n            5.1362240314483643e-01 3.4973978996276855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1281 1.9558030180633068e-03</internalNodes>\n          <leafValues>\n            4.8261928558349609e-01 6.4083808660507202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1282 -1.7494610510766506e-03</internalNodes>\n          <leafValues>\n            3.9228358864784241e-01 5.2726852893829346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1283 1.3955079950392246e-02</internalNodes>\n          <leafValues>\n            5.0782018899917603e-01 8.4165048599243164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1284 -2.1896739781368524e-04</internalNodes>\n          <leafValues>\n            5.5204898118972778e-01 4.3142348527908325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1285 -1.5131309628486633e-03</internalNodes>\n          <leafValues>\n            3.9346051216125488e-01 5.3825712203979492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1286 -4.3622800149023533e-03</internalNodes>\n          <leafValues>\n            7.3706287145614624e-01 4.7364759445190430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1287 6.5160587430000305e-02</internalNodes>\n          <leafValues>\n            5.1592797040939331e-01 3.2815951108932495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1288 -2.3567399475723505e-03</internalNodes>\n          <leafValues>\n            3.6728268861770630e-01 5.1728862524032593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1289 1.5146659687161446e-02</internalNodes>\n          <leafValues>\n            5.0314939022064209e-01 6.6876041889190674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1290 -2.2850960493087769e-02</internalNodes>\n          <leafValues>\n            6.7675197124481201e-01 4.7095969319343567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1291 4.8867650330066681e-03</internalNodes>\n          <leafValues>\n            5.2579981088638306e-01 4.0598788857460022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1292 1.7619599821045995e-03</internalNodes>\n          <leafValues>\n            4.6962729096412659e-01 6.6882789134979248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1293 -1.2942519970238209e-03</internalNodes>\n          <leafValues>\n            4.3207129836082458e-01 5.3442817926406860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1294 1.0929949581623077e-02</internalNodes>\n          <leafValues>\n            4.9977061152458191e-01 1.6374860703945160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1295 2.9958489903947338e-05</internalNodes>\n          <leafValues>\n            4.2824178934097290e-01 5.6332242488861084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1296 -6.5884361974895000e-03</internalNodes>\n          <leafValues>\n            6.7721211910247803e-01 4.7005268931388855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1297 3.2527779694646597e-03</internalNodes>\n          <leafValues>\n            5.3133970499038696e-01 4.5361489057540894e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1298 -4.0435739792883396e-03</internalNodes>\n          <leafValues>\n            5.6600618362426758e-01 4.4133889675140381e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1299 -1.2523540062829852e-03</internalNodes>\n          <leafValues>\n            3.7319138646125793e-01 5.3564518690109253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1300 1.9246719602961093e-04</internalNodes>\n          <leafValues>\n            5.1899862289428711e-01 3.7388110160827637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1301 -3.8589671254158020e-02</internalNodes>\n          <leafValues>\n            2.9563739895820618e-01 5.1888108253479004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1302 1.5489870565943420e-04</internalNodes>\n          <leafValues>\n            4.3471351265907288e-01 5.5095332860946655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1303 -3.3763848245143890e-02</internalNodes>\n          <leafValues>\n            3.2303300499916077e-01 5.1954758167266846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1304 -8.2657067105174065e-03</internalNodes>\n          <leafValues>\n            5.9754890203475952e-01 4.5521140098571777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1305 1.4481440302915871e-05</internalNodes>\n          <leafValues>\n            4.7456780076026917e-01 5.4974269866943359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1306 1.4951299817766994e-05</internalNodes>\n          <leafValues>\n            4.3244731426239014e-01 5.4806441068649292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1307 -1.8741799518465996e-02</internalNodes>\n          <leafValues>\n            1.5800529718399048e-01 5.1785331964492798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1308 1.7572239739820361e-03</internalNodes>\n          <leafValues>\n            4.5176368951797485e-01 5.7737642526626587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1309 -3.1391119118779898e-03</internalNodes>\n          <leafValues>\n            4.1496479511260986e-01 5.4608422517776489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1310 6.6656779381446540e-05</internalNodes>\n          <leafValues>\n            4.0390908718109131e-01 5.2930849790573120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1311 6.7743421532213688e-03</internalNodes>\n          <leafValues>\n            4.7676518559455872e-01 6.1219561100006104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1312 -7.3868161998689175e-03</internalNodes>\n          <leafValues>\n            3.5862588882446289e-01 5.1872807741165161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1313 1.4040930196642876e-02</internalNodes>\n          <leafValues>\n            4.7121399641036987e-01 5.5761557817459106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1314 -5.5258329957723618e-03</internalNodes>\n          <leafValues>\n            2.6610270142555237e-01 5.0392812490463257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1315 3.8684239983558655e-01</internalNodes>\n          <leafValues>\n            5.1443397998809814e-01 2.5258991122245789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1316 1.1459240340627730e-04</internalNodes>\n          <leafValues>\n            4.2849949002265930e-01 5.4233711957931519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1317 -1.8467569723725319e-02</internalNodes>\n          <leafValues>\n            3.8858351111412048e-01 5.2130621671676636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1318 -4.5907011372037232e-04</internalNodes>\n          <leafValues>\n            5.4125630855560303e-01 4.2359098792076111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1319 1.2527540093287826e-03</internalNodes>\n          <leafValues>\n            4.8993051052093506e-01 6.6240912675857544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1320 1.4910609461367130e-03</internalNodes>\n          <leafValues>\n            5.2867782115936279e-01 4.0400519967079163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1321 -7.5435562757775187e-04</internalNodes>\n          <leafValues>\n            6.0329902172088623e-01 4.7951200604438782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1322 -6.9478838704526424e-03</internalNodes>\n          <leafValues>\n            4.0844011306762695e-01 5.3735041618347168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1323 2.8092920547351241e-04</internalNodes>\n          <leafValues>\n            4.8460629582405090e-01 5.7593822479248047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1324 9.6073717577382922e-04</internalNodes>\n          <leafValues>\n            5.1647412776947021e-01 3.5549798607826233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1325 -2.6883929967880249e-04</internalNodes>\n          <leafValues>\n            5.6775820255279541e-01 4.7317659854888916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1326 2.1599370520561934e-03</internalNodes>\n          <leafValues>\n            4.7314870357513428e-01 7.0705670118331909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1327 5.6235301308333874e-03</internalNodes>\n          <leafValues>\n            5.2402430772781372e-01 2.7817919850349426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1328 -5.0243991427123547e-03</internalNodes>\n          <leafValues>\n            2.8370139002799988e-01 5.0623041391372681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1329 -9.7611639648675919e-03</internalNodes>\n          <leafValues>\n            7.4007177352905273e-01 4.9345690011978149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1330 4.1515100747346878e-03</internalNodes>\n          <leafValues>\n            5.1191312074661255e-01 3.4070080518722534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1331 6.2465080991387367e-03</internalNodes>\n          <leafValues>\n            4.9237880110740662e-01 6.5790587663650513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1332 -7.0597478188574314e-03</internalNodes>\n          <leafValues>\n            2.4347110092639923e-01 5.0328421592712402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1333 -2.0587709732353687e-03</internalNodes>\n          <leafValues>\n            5.9003108739852905e-01 4.6950870752334595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1334 -2.4146060459315777e-03</internalNodes>\n          <leafValues>\n            3.6473178863525391e-01 5.1892018318176270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1335 -1.4817609917372465e-03</internalNodes>\n          <leafValues>\n            6.0349482297897339e-01 4.9401280283927917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1336 -6.3016400672495365e-03</internalNodes>\n          <leafValues>\n            5.8189898729324341e-01 4.5604279637336731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1337 3.4763428848236799e-03</internalNodes>\n          <leafValues>\n            5.2174758911132812e-01 3.4839931130409241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1338 -2.2250870242714882e-02</internalNodes>\n          <leafValues>\n            2.3607000708580017e-01 5.0320827960968018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1339 -3.0612550675868988e-02</internalNodes>\n          <leafValues>\n            6.4991867542266846e-01 4.9149191379547119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1340 1.3057479634881020e-02</internalNodes>\n          <leafValues>\n            4.4133231043815613e-01 5.6837642192840576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1341 -6.0095742810517550e-04</internalNodes>\n          <leafValues>\n            4.3597310781478882e-01 5.3334832191467285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1342 -4.1514250915497541e-04</internalNodes>\n          <leafValues>\n            5.5040627717971802e-01 4.3260601162910461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1343 -1.3776290230453014e-02</internalNodes>\n          <leafValues>\n            4.0641129016876221e-01 5.2015489339828491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1344 -3.2296508550643921e-02</internalNodes>\n          <leafValues>\n            4.7351971268653870e-02 4.9771949648857117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1345 5.3556978702545166e-02</internalNodes>\n          <leafValues>\n            4.8817330598831177e-01 6.6669392585754395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1346 8.1889545544981956e-03</internalNodes>\n          <leafValues>\n            5.4000371694564819e-01 4.2408201098442078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1347 2.1055320394225419e-04</internalNodes>\n          <leafValues>\n            4.8020479083061218e-01 5.5638527870178223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1348 -2.4382730480283499e-03</internalNodes>\n          <leafValues>\n            7.3877930641174316e-01 4.7736850380897522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1349 3.2835570164024830e-03</internalNodes>\n          <leafValues>\n            5.2885460853576660e-01 3.1712919473648071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1350 2.3729570675641298e-03</internalNodes>\n          <leafValues>\n            4.7508129477500916e-01 7.0601707696914673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1351 -1.4541699783876538e-03</internalNodes>\n          <leafValues>\n            3.8117301464080811e-01 5.3307390213012695e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>177</maxWeakCount>\n      <stageThreshold>8.7696029663085938e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1352 5.5755238980054855e-02</internalNodes>\n          <leafValues>\n            4.0191569924354553e-01 6.8060368299484253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1353 2.4730248842388391e-03</internalNodes>\n          <leafValues>\n            3.3511489629745483e-01 5.9657198190689087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1354 -3.5031698644161224e-04</internalNodes>\n          <leafValues>\n            5.5577081441879272e-01 3.4822869300842285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1355 5.4167630150914192e-04</internalNodes>\n          <leafValues>\n            4.2608588933944702e-01 5.6933808326721191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1356 7.7193678589537740e-04</internalNodes>\n          <leafValues>\n            3.4942400455474854e-01 5.4336887598037720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1357 -1.5999219613149762e-03</internalNodes>\n          <leafValues>\n            4.0284991264343262e-01 5.4843592643737793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1358 -1.1832080053864047e-04</internalNodes>\n          <leafValues>\n            3.8069018721580505e-01 5.4254651069641113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1359 3.2909031142480671e-04</internalNodes>\n          <leafValues>\n            2.6201000809669495e-01 5.4295217990875244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1360 2.9518108931370080e-04</internalNodes>\n          <leafValues>\n            3.7997689843177795e-01 5.3992640972137451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1361 9.0466710389591753e-05</internalNodes>\n          <leafValues>\n            4.4336450099945068e-01 5.4402261972427368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1362 1.5007190086180344e-05</internalNodes>\n          <leafValues>\n            3.7196549773216248e-01 5.4091197252273560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1363 1.3935610651969910e-01</internalNodes>\n          <leafValues>\n            5.5253958702087402e-01 4.4790428876876831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1364 1.6461990308016539e-03</internalNodes>\n          <leafValues>\n            4.2645010352134705e-01 5.7721698284149170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1365 4.9984431825578213e-04</internalNodes>\n          <leafValues>\n            4.3595260381698608e-01 5.6858712434768677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1366 -1.0971280280500650e-03</internalNodes>\n          <leafValues>\n            3.3901369571685791e-01 5.2054089307785034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1367 6.6919892560690641e-04</internalNodes>\n          <leafValues>\n            4.5574560761451721e-01 5.9806597232818604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1368 8.6471042595803738e-04</internalNodes>\n          <leafValues>\n            5.1348412036895752e-01 2.9440331459045410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1369 -2.7182599296793342e-04</internalNodes>\n          <leafValues>\n            3.9065781235694885e-01 5.3771811723709106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1370 3.0249499104684219e-05</internalNodes>\n          <leafValues>\n            3.6796098947525024e-01 5.2256888151168823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1371 -8.5225896909832954e-03</internalNodes>\n          <leafValues>\n            7.2931021451950073e-01 4.8923650383949280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1372 1.6705560265108943e-03</internalNodes>\n          <leafValues>\n            4.3453249335289001e-01 5.6961381435394287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1373 -7.1433838456869125e-03</internalNodes>\n          <leafValues>\n            2.5912800431251526e-01 5.2256238460540771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1374 -1.6319369897246361e-02</internalNodes>\n          <leafValues>\n            6.9222790002822876e-01 4.6515759825706482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1375 4.8034260980784893e-03</internalNodes>\n          <leafValues>\n            5.3522628545761108e-01 3.2863029837608337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1376 -7.5421929359436035e-03</internalNodes>\n          <leafValues>\n            2.0405440032482147e-01 5.0345462560653687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1377 -1.4363110065460205e-02</internalNodes>\n          <leafValues>\n            6.8048888444900513e-01 4.8890590667724609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1378 8.9063588529825211e-04</internalNodes>\n          <leafValues>\n            5.3106957674026489e-01 3.8954809308052063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1379 -4.4060191139578819e-03</internalNodes>\n          <leafValues>\n            5.7415628433227539e-01 4.3724268674850464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1380 -1.8862540309783071e-04</internalNodes>\n          <leafValues>\n            2.8317859768867493e-01 5.0982052087783813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1381 -3.7979281041771173e-03</internalNodes>\n          <leafValues>\n            3.3725079894065857e-01 5.2465802431106567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1382 1.4627049677073956e-04</internalNodes>\n          <leafValues>\n            5.3066742420196533e-01 3.9117100834846497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1383 -4.9164638767251745e-05</internalNodes>\n          <leafValues>\n            5.4624962806701660e-01 3.9427208900451660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1384 -3.3582501113414764e-02</internalNodes>\n          <leafValues>\n            2.1578240394592285e-01 5.0482118129730225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1385 -3.5339309833943844e-03</internalNodes>\n          <leafValues>\n            6.4653122425079346e-01 4.8726969957351685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1386 5.0144111737608910e-03</internalNodes>\n          <leafValues>\n            4.6176680922508240e-01 6.2480747699737549e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1387 1.8817370757460594e-02</internalNodes>\n          <leafValues>\n            5.2206891775131226e-01 2.0000520348548889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1388 -1.3434339780360460e-03</internalNodes>\n          <leafValues>\n            4.0145379304885864e-01 5.3016197681427002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1389 1.7557960236445069e-03</internalNodes>\n          <leafValues>\n            4.7940391302108765e-01 5.6531697511672974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1390 -9.5637463033199310e-02</internalNodes>\n          <leafValues>\n            2.0341950654983521e-01 5.0067067146301270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1391 -2.2241229191422462e-02</internalNodes>\n          <leafValues>\n            7.6724731922149658e-01 5.0463402271270752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1392 -1.5575819648802280e-02</internalNodes>\n          <leafValues>\n            7.4903422594070435e-01 4.7558510303497314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1393 5.3599118255078793e-03</internalNodes>\n          <leafValues>\n            5.3653037548065186e-01 4.0046709775924683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1394 -2.1763499826192856e-02</internalNodes>\n          <leafValues>\n            7.4015498161315918e-02 4.9641749262809753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1395 -1.6561590135097504e-01</internalNodes>\n          <leafValues>\n            2.8591030836105347e-01 5.2180862426757812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1396 1.6461320046801120e-04</internalNodes>\n          <leafValues>\n            4.1916158795356750e-01 5.3807932138442993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1397 -8.9077502489089966e-03</internalNodes>\n          <leafValues>\n            6.2731927633285522e-01 4.8774048686027527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1398 8.6346449097618461e-04</internalNodes>\n          <leafValues>\n            5.1599407196044922e-01 3.6710259318351746e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1399 -1.3751760125160217e-03</internalNodes>\n          <leafValues>\n            5.8843767642974854e-01 4.5790839195251465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1400 -1.4081239933148026e-03</internalNodes>\n          <leafValues>\n            3.5605099797248840e-01 5.1399451494216919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1401 -3.9342888630926609e-03</internalNodes>\n          <leafValues>\n            5.9942889213562012e-01 4.6642720699310303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1402 -3.1966928392648697e-02</internalNodes>\n          <leafValues>\n            3.3454620838165283e-01 5.1441830396652222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1403 -1.5089280168467667e-05</internalNodes>\n          <leafValues>\n            5.5826562643051147e-01 4.4140571355819702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1404 5.1994470413774252e-04</internalNodes>\n          <leafValues>\n            4.6236801147460938e-01 6.1689937114715576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1405 -3.4220460802316666e-03</internalNodes>\n          <leafValues>\n            6.5570747852325439e-01 4.9748051166534424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1406 1.7723299970384687e-04</internalNodes>\n          <leafValues>\n            5.2695018053054810e-01 3.9019080996513367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1407 1.5716759953647852e-03</internalNodes>\n          <leafValues>\n            4.6333730220794678e-01 5.7904577255249023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1408 -8.9041329920291901e-03</internalNodes>\n          <leafValues>\n            2.6896080374717712e-01 5.0535911321640015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1409 4.0677518700249493e-04</internalNodes>\n          <leafValues>\n            5.4566031694412231e-01 4.3298989534378052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1410 6.7604780197143555e-03</internalNodes>\n          <leafValues>\n            4.6489939093589783e-01 6.6897618770599365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1411 2.9100088868290186e-03</internalNodes>\n          <leafValues>\n            5.3097039461135864e-01 3.3778399229049683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1412 1.3885459629818797e-03</internalNodes>\n          <leafValues>\n            4.0747389197349548e-01 5.3491330146789551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1413 -7.6764263212680817e-02</internalNodes>\n          <leafValues>\n            1.9921760261058807e-01 5.2282422780990601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1414 -2.2688310127705336e-04</internalNodes>\n          <leafValues>\n            5.4385018348693848e-01 4.2530721426010132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1415 -6.3094152137637138e-03</internalNodes>\n          <leafValues>\n            4.2591789364814758e-01 5.3789097070693970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1416 -1.1007279902696609e-01</internalNodes>\n          <leafValues>\n            6.9041568040847778e-01 4.7217491269111633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1417 2.8619659133255482e-04</internalNodes>\n          <leafValues>\n            4.5249149203300476e-01 5.5483061075210571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1418 2.9425329557852820e-05</internalNodes>\n          <leafValues>\n            5.3703737258911133e-01 4.2364639043807983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1419 -2.4886570870876312e-02</internalNodes>\n          <leafValues>\n            6.4235579967498779e-01 4.9693039059638977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1420 3.3148851245641708e-02</internalNodes>\n          <leafValues>\n            4.9884751439094543e-01 1.6138119995594025e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1421 7.8491691965609789e-04</internalNodes>\n          <leafValues>\n            5.4160261154174805e-01 4.2230090498924255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1422 4.7087189741432667e-03</internalNodes>\n          <leafValues>\n            4.5763289928436279e-01 6.0275578498840332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1423 2.4144479539245367e-03</internalNodes>\n          <leafValues>\n            5.3089731931686401e-01 4.4224989414215088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1424 1.9523180089890957e-03</internalNodes>\n          <leafValues>\n            4.7056341171264648e-01 6.6633248329162598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1425 1.3031980488449335e-03</internalNodes>\n          <leafValues>\n            4.4061261415481567e-01 5.5269622802734375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1426 4.4735497795045376e-03</internalNodes>\n          <leafValues>\n            5.1290237903594971e-01 3.3014988899230957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1427 -2.6652868837118149e-03</internalNodes>\n          <leafValues>\n            3.1354710459709167e-01 5.1750361919403076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1428 1.3666770246345550e-04</internalNodes>\n          <leafValues>\n            4.1193708777427673e-01 5.3068768978118896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1429 -1.7126450315117836e-02</internalNodes>\n          <leafValues>\n            6.1778062582015991e-01 4.8365789651870728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1430 -2.6601430727168918e-04</internalNodes>\n          <leafValues>\n            3.6543309688568115e-01 5.1697367429733276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1431 -2.2932380437850952e-02</internalNodes>\n          <leafValues>\n            3.4909150004386902e-01 5.1639920473098755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1432 2.3316550068557262e-03</internalNodes>\n          <leafValues>\n            5.1662999391555786e-01 3.7093898653984070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1433 1.6925660893321037e-02</internalNodes>\n          <leafValues>\n            5.0147360563278198e-01 8.0539882183074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1434 -8.9858826249837875e-03</internalNodes>\n          <leafValues>\n            6.4707887172698975e-01 4.6570208668708801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1435 -1.1874699965119362e-02</internalNodes>\n          <leafValues>\n            3.2463788986206055e-01 5.2587550878524780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1436 1.9350569345988333e-04</internalNodes>\n          <leafValues>\n            5.1919418573379517e-01 3.8396438956260681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1437 5.8713490143418312e-03</internalNodes>\n          <leafValues>\n            4.9181339144706726e-01 6.1870431900024414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1438 -2.4838790297508240e-01</internalNodes>\n          <leafValues>\n            1.8368029594421387e-01 4.9881500005722046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1439 1.2256000190973282e-02</internalNodes>\n          <leafValues>\n            5.2270537614822388e-01 3.6320298910140991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1440 8.3990179700776935e-04</internalNodes>\n          <leafValues>\n            4.4902500510215759e-01 5.7741481065750122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1441 2.5407369248569012e-03</internalNodes>\n          <leafValues>\n            4.8047870397567749e-01 5.8582991361618042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1442 -1.4822429977357388e-02</internalNodes>\n          <leafValues>\n            2.5210499763488770e-01 5.0235372781753540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1443 -5.7973959483206272e-03</internalNodes>\n          <leafValues>\n            5.9966957569122314e-01 4.8537150025367737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1444 7.2662148158997297e-04</internalNodes>\n          <leafValues>\n            5.1537168025970459e-01 3.6717799305915833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1445 -1.7232580110430717e-02</internalNodes>\n          <leafValues>\n            6.6217190027236938e-01 4.9946561455726624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1446 7.8624086454510689e-03</internalNodes>\n          <leafValues>\n            4.6333950757980347e-01 6.2561017274856567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1447 -4.7343620099127293e-03</internalNodes>\n          <leafValues>\n            3.6155730485916138e-01 5.2818852663040161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1448 8.3048478700220585e-04</internalNodes>\n          <leafValues>\n            4.4428890943527222e-01 5.5509579181671143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1449 7.6602199114859104e-03</internalNodes>\n          <leafValues>\n            5.1629352569580078e-01 2.6133549213409424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1450 -4.1048377752304077e-03</internalNodes>\n          <leafValues>\n            2.7896320819854736e-01 5.0190317630767822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1451 4.8512578941881657e-03</internalNodes>\n          <leafValues>\n            4.9689841270446777e-01 5.6616681814193726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1452 9.9896453320980072e-04</internalNodes>\n          <leafValues>\n            4.4456079602241516e-01 5.5518132448196411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1453 -2.7023631334304810e-01</internalNodes>\n          <leafValues>\n            2.9388209804892540e-02 5.1513141393661499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1454 -1.3090680353343487e-02</internalNodes>\n          <leafValues>\n            5.6993997097015381e-01 4.4474598765373230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1455 -9.4342790544033051e-03</internalNodes>\n          <leafValues>\n            4.3054661154747009e-01 5.4878950119018555e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1456 -1.5482039889320731e-03</internalNodes>\n          <leafValues>\n            3.6803171038627625e-01 5.1280808448791504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1457 5.3746132180094719e-03</internalNodes>\n          <leafValues>\n            4.8389169573783875e-01 6.1015558242797852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1458 1.5786769799888134e-03</internalNodes>\n          <leafValues>\n            5.3252232074737549e-01 4.1185480356216431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1459 3.6856050137430429e-03</internalNodes>\n          <leafValues>\n            4.8109480738639832e-01 6.2523031234741211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1460 9.3887019902467728e-03</internalNodes>\n          <leafValues>\n            5.2002298831939697e-01 3.6294108629226685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1461 1.2792630121111870e-02</internalNodes>\n          <leafValues>\n            4.9617099761962891e-01 6.7380160093307495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1462 -3.3661040943115950e-03</internalNodes>\n          <leafValues>\n            4.0602791309356689e-01 5.2835988998413086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1463 3.9771420415490866e-04</internalNodes>\n          <leafValues>\n            4.6741139888763428e-01 5.9007751941680908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1464 1.4868030557408929e-03</internalNodes>\n          <leafValues>\n            4.5191168785095215e-01 6.0820537805557251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1465 -8.8686749339103699e-02</internalNodes>\n          <leafValues>\n            2.8078991174697876e-01 5.1809918880462646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1466 -7.4296112870797515e-05</internalNodes>\n          <leafValues>\n            5.2955842018127441e-01 4.0876251459121704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1467 -1.4932939848222304e-05</internalNodes>\n          <leafValues>\n            5.4614001512527466e-01 4.5385429263114929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1468 5.9162238612771034e-03</internalNodes>\n          <leafValues>\n            5.3291612863540649e-01 4.1921341419219971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1469 1.1141640134155750e-03</internalNodes>\n          <leafValues>\n            4.5120179653167725e-01 5.7062172889709473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1470 8.9249362645205110e-05</internalNodes>\n          <leafValues>\n            4.5778059959411621e-01 5.8976382017135620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1471 2.5319510605186224e-03</internalNodes>\n          <leafValues>\n            5.2996039390563965e-01 3.3576390147209167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1472 1.2426200322806835e-02</internalNodes>\n          <leafValues>\n            4.9590590596199036e-01 1.3466019928455353e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1473 2.8335750102996826e-02</internalNodes>\n          <leafValues>\n            5.1170790195465088e-01 6.1043637106195092e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1474 6.6165882162749767e-03</internalNodes>\n          <leafValues>\n            4.7363498806953430e-01 7.0116281509399414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1475 8.0468766391277313e-03</internalNodes>\n          <leafValues>\n            5.2164179086685181e-01 3.2828199863433838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1476 -1.1193980462849140e-03</internalNodes>\n          <leafValues>\n            5.8098608255386353e-01 4.5637390017509460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1477 1.3277590274810791e-02</internalNodes>\n          <leafValues>\n            5.3983622789382935e-01 4.1039010882377625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1478 4.8794739996083081e-04</internalNodes>\n          <leafValues>\n            4.2492860555648804e-01 5.4105907678604126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1479 1.1243170127272606e-02</internalNodes>\n          <leafValues>\n            5.2699637413024902e-01 3.4382158517837524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1480 -8.9896668214350939e-04</internalNodes>\n          <leafValues>\n            5.6330758333206177e-01 4.4566130638122559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1481 6.6677159629762173e-03</internalNodes>\n          <leafValues>\n            5.3128892183303833e-01 4.3626791238784790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1482 2.8947299346327782e-02</internalNodes>\n          <leafValues>\n            4.7017949819564819e-01 6.5757977962493896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1483 -2.3400049656629562e-02</internalNodes>\n          <leafValues>\n            0. 5.1373988389968872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1484 -8.9117050170898438e-02</internalNodes>\n          <leafValues>\n            2.3745279759168625e-02 4.9424308538436890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1485 -1.4054600149393082e-02</internalNodes>\n          <leafValues>\n            3.1273230910301208e-01 5.1175111532211304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1486 8.1239398568868637e-03</internalNodes>\n          <leafValues>\n            5.0090491771697998e-01 2.5200259685516357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1487 -4.9964650534093380e-03</internalNodes>\n          <leafValues>\n            6.3871437311172485e-01 4.9278119206428528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1488 3.1253970228135586e-03</internalNodes>\n          <leafValues>\n            5.1368498802185059e-01 3.6804521083831787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1489 6.7669642157852650e-03</internalNodes>\n          <leafValues>\n            5.5098438262939453e-01 4.3636319041252136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1490 -2.3711440153419971e-03</internalNodes>\n          <leafValues>\n            6.1623352766036987e-01 4.5869469642639160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1491 -5.3522791713476181e-03</internalNodes>\n          <leafValues>\n            6.1854577064514160e-01 4.9204909801483154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1492 -1.5968859195709229e-02</internalNodes>\n          <leafValues>\n            1.3826179504394531e-01 4.9832528829574585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1493 4.7676060348749161e-03</internalNodes>\n          <leafValues>\n            4.6880578994750977e-01 5.4900461435317993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1494 -2.4714691098779440e-03</internalNodes>\n          <leafValues>\n            2.3685149848461151e-01 5.0039529800415039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1495 -7.1033788844943047e-04</internalNodes>\n          <leafValues>\n            5.8563941717147827e-01 4.7215330600738525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1496 -1.4117559790611267e-01</internalNodes>\n          <leafValues>\n            8.6900062859058380e-02 4.9615910649299622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1497 1.0651809722185135e-01</internalNodes>\n          <leafValues>\n            5.1388370990753174e-01 1.7410050332546234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1498 -5.2744749933481216e-02</internalNodes>\n          <leafValues>\n            7.3536360263824463e-01 4.7728818655014038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1499 -4.7431760467588902e-03</internalNodes>\n          <leafValues>\n            3.8844060897827148e-01 5.2927017211914062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1500 9.9676765967160463e-04</internalNodes>\n          <leafValues>\n            5.2234929800033569e-01 4.0034240484237671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1501 8.0284131690859795e-03</internalNodes>\n          <leafValues>\n            4.9591061472892761e-01 7.2129642963409424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1502 8.6025858763605356e-04</internalNodes>\n          <leafValues>\n            4.4448840618133545e-01 5.5384761095046997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1503 9.3191501218825579e-04</internalNodes>\n          <leafValues>\n            5.3983712196350098e-01 4.1632440686225891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1504 -2.5082060601562262e-03</internalNodes>\n          <leafValues>\n            5.8542650938034058e-01 4.5625001192092896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1505 -2.1378761157393456e-03</internalNodes>\n          <leafValues>\n            4.6080690622329712e-01 5.2802592515945435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1506 -2.1546049974858761e-03</internalNodes>\n          <leafValues>\n            3.7911269068717957e-01 5.2559971809387207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1507 -7.6214009895920753e-03</internalNodes>\n          <leafValues>\n            5.9986090660095215e-01 4.9520739912986755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1508 2.2055360022932291e-03</internalNodes>\n          <leafValues>\n            4.4842061400413513e-01 5.5885308980941772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1509 1.2586950324475765e-03</internalNodes>\n          <leafValues>\n            5.4507470130920410e-01 4.4238409399986267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1510 -5.0926720723509789e-03</internalNodes>\n          <leafValues>\n            4.1182750463485718e-01 5.2630358934402466e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1511 -2.5095739401876926e-03</internalNodes>\n          <leafValues>\n            5.7879078388214111e-01 4.9984949827194214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1512 -7.7327556908130646e-02</internalNodes>\n          <leafValues>\n            8.3978658914566040e-01 4.8111200332641602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1513 -4.1485819965600967e-02</internalNodes>\n          <leafValues>\n            2.4086110293865204e-01 5.1769930124282837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1514 1.0355669655837119e-04</internalNodes>\n          <leafValues>\n            4.3553608655929565e-01 5.4170542955398560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1515 1.3255809899419546e-03</internalNodes>\n          <leafValues>\n            5.4539710283279419e-01 4.8940950632095337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1516 -8.0598732456564903e-03</internalNodes>\n          <leafValues>\n            5.7710242271423340e-01 4.5779189467430115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1517 1.9058620557188988e-02</internalNodes>\n          <leafValues>\n            5.1698678731918335e-01 3.4004750847816467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1518 -3.5057891160249710e-02</internalNodes>\n          <leafValues>\n            2.2032439708709717e-01 5.0005030632019043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1519 5.7296059094369411e-03</internalNodes>\n          <leafValues>\n            5.0434082746505737e-01 6.5975707769393921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1520 -1.1648329906165600e-02</internalNodes>\n          <leafValues>\n            2.1862849593162537e-01 4.9966529011726379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1521 1.4544479781761765e-03</internalNodes>\n          <leafValues>\n            5.0076818466186523e-01 5.5037277936935425e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1522 -2.5030909455381334e-04</internalNodes>\n          <leafValues>\n            4.1298410296440125e-01 5.2416700124740601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1523 -8.2907272735610604e-04</internalNodes>\n          <leafValues>\n            5.4128682613372803e-01 4.9744960665702820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1524 1.0862209601327777e-03</internalNodes>\n          <leafValues>\n            4.6055299043655396e-01 5.8792287111282349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1525 2.0000500080641359e-04</internalNodes>\n          <leafValues>\n            5.2788549661636353e-01 4.7052091360092163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1526 2.9212920926511288e-03</internalNodes>\n          <leafValues>\n            5.1296097040176392e-01 3.7555369734764099e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1527 2.5387400761246681e-02</internalNodes>\n          <leafValues>\n            4.8226919770240784e-01 5.7907682657241821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1528 -3.1968469265848398e-03</internalNodes>\n          <leafValues>\n            5.2483952045440674e-01 3.9628401398658752e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>182</maxWeakCount>\n      <stageThreshold>9.0253349304199219e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1529 5.8031738735735416e-03</internalNodes>\n          <leafValues>\n            3.4989839792251587e-01 5.9619832038879395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1530 -9.0003069490194321e-03</internalNodes>\n          <leafValues>\n            6.8166369199752808e-01 4.4785520434379578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1531 -1.1549659539014101e-03</internalNodes>\n          <leafValues>\n            5.5857062339782715e-01 3.5782510042190552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1532 -1.1069850297644734e-03</internalNodes>\n          <leafValues>\n            5.3650361299514771e-01 3.0504280328750610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1533 1.0308309720130637e-04</internalNodes>\n          <leafValues>\n            3.6390951275825500e-01 5.3446358442306519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1534 -5.0984839908778667e-03</internalNodes>\n          <leafValues>\n            2.8591570258140564e-01 5.5042648315429688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1535 8.2572200335562229e-04</internalNodes>\n          <leafValues>\n            5.2365237474441528e-01 3.4760418534278870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1536 9.9783325567841530e-03</internalNodes>\n          <leafValues>\n            4.7503221035003662e-01 6.2196469306945801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1537 -3.7402529269456863e-02</internalNodes>\n          <leafValues>\n            3.3433759212493896e-01 5.2780628204345703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1538 4.8548257909715176e-03</internalNodes>\n          <leafValues>\n            5.1921808719635010e-01 3.7004441022872925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1539 -1.8664470408111811e-03</internalNodes>\n          <leafValues>\n            2.9298439621925354e-01 5.0919449329376221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1540 1.6888890415430069e-02</internalNodes>\n          <leafValues>\n            3.6868458986282349e-01 5.4312258958816528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1541 -5.8372621424496174e-03</internalNodes>\n          <leafValues>\n            3.6321839690208435e-01 5.2213358879089355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1542 -1.4713739510625601e-03</internalNodes>\n          <leafValues>\n            5.8706837892532349e-01 4.7006508708000183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1543 -1.1522950371727347e-03</internalNodes>\n          <leafValues>\n            3.1958949565887451e-01 5.1409542560577393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1544 -4.2560300789773464e-03</internalNodes>\n          <leafValues>\n            6.3018590211868286e-01 4.8149210214614868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1545 -6.7378291860222816e-03</internalNodes>\n          <leafValues>\n            1.9770480692386627e-01 5.0258082151412964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1546 1.1382670141756535e-02</internalNodes>\n          <leafValues>\n            4.9541321396827698e-01 6.8670457601547241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1547 5.1794708706438541e-03</internalNodes>\n          <leafValues>\n            5.1644277572631836e-01 3.3506479859352112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1548 -1.1743789911270142e-01</internalNodes>\n          <leafValues>\n            2.3152460157871246e-01 5.2344137430191040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1549 2.8703449293971062e-02</internalNodes>\n          <leafValues>\n            4.6642971038818359e-01 6.7225211858749390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1550 4.8231030814349651e-03</internalNodes>\n          <leafValues>\n            5.2208751440048218e-01 2.7235329151153564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1551 2.6798530016094446e-03</internalNodes>\n          <leafValues>\n            5.0792771577835083e-01 2.9069489240646362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1552 8.0504082143306732e-03</internalNodes>\n          <leafValues>\n            4.8859509825706482e-01 6.3950210809707642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1553 4.8054959625005722e-03</internalNodes>\n          <leafValues>\n            5.1972568035125732e-01 3.6566638946533203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1554 -2.2420159075409174e-03</internalNodes>\n          <leafValues>\n            6.1534678936004639e-01 4.7637018561363220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1555 -1.3757710345089436e-02</internalNodes>\n          <leafValues>\n            2.6373448967933655e-01 5.0309032201766968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1556 -1.0338299721479416e-01</internalNodes>\n          <leafValues>\n            2.2875219583511353e-01 5.1824611425399780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1557 -9.4432085752487183e-03</internalNodes>\n          <leafValues>\n            6.9533038139343262e-01 4.6949490904808044e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1558 8.0271181650459766e-04</internalNodes>\n          <leafValues>\n            5.4506552219390869e-01 4.2687839269638062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1559 -4.1945669800043106e-03</internalNodes>\n          <leafValues>\n            6.0913878679275513e-01 4.5716428756713867e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1560 1.0942210443317890e-02</internalNodes>\n          <leafValues>\n            5.2410632371902466e-01 3.2845470309257507e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1561 -5.7841069065034389e-04</internalNodes>\n          <leafValues>\n            5.3879290819168091e-01 4.1793689131736755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1562 -2.0888620056211948e-03</internalNodes>\n          <leafValues>\n            4.2926910519599915e-01 5.3017157316207886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1563 3.2383969519287348e-03</internalNodes>\n          <leafValues>\n            3.7923479080200195e-01 5.2207440137863159e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1564 4.9075027927756310e-03</internalNodes>\n          <leafValues>\n            5.2372831106185913e-01 4.1267579793930054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1565 -3.2277941703796387e-02</internalNodes>\n          <leafValues>\n            1.9476559758186340e-01 4.9945020675659180e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1566 -8.9711230248212814e-03</internalNodes>\n          <leafValues>\n            6.0112851858139038e-01 4.9290320277214050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1567 1.5321089886128902e-02</internalNodes>\n          <leafValues>\n            5.0097537040710449e-01 2.0398220419883728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1568 2.0855569746345282e-03</internalNodes>\n          <leafValues>\n            4.8621898889541626e-01 5.7216948270797729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1569 5.0615021027624607e-03</internalNodes>\n          <leafValues>\n            5.0002187490463257e-01 1.8018059432506561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1570 -3.7174751050770283e-03</internalNodes>\n          <leafValues>\n            5.5301171541213989e-01 4.8975929617881775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1571 -1.2170500122010708e-02</internalNodes>\n          <leafValues>\n            4.1786059737205505e-01 5.3837239742279053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1572 4.6248398721218109e-03</internalNodes>\n          <leafValues>\n            4.9971699714660645e-01 5.7613271474838257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1573 -2.1040429419372231e-04</internalNodes>\n          <leafValues>\n            5.3318071365356445e-01 4.0976810455322266e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1574 -1.4641780406236649e-02</internalNodes>\n          <leafValues>\n            5.7559251785278320e-01 5.0517761707305908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1575 3.3199489116668701e-03</internalNodes>\n          <leafValues>\n            4.5769768953323364e-01 6.0318058729171753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1576 3.7236879579722881e-03</internalNodes>\n          <leafValues>\n            4.3803969025611877e-01 5.4158830642700195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1577 8.2951161311939359e-04</internalNodes>\n          <leafValues>\n            5.1630318164825439e-01 3.7022191286087036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1578 -1.1408490128815174e-02</internalNodes>\n          <leafValues>\n            6.0729467868804932e-01 4.8625651001930237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1579 -4.5320121571421623e-03</internalNodes>\n          <leafValues>\n            3.2924759387969971e-01 5.0889629125595093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1580 5.1276017911732197e-03</internalNodes>\n          <leafValues>\n            4.8297679424285889e-01 6.1227089166641235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1581 9.8583158105611801e-03</internalNodes>\n          <leafValues>\n            4.6606799960136414e-01 6.5561771392822266e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1582 3.6985918879508972e-02</internalNodes>\n          <leafValues>\n            5.2048492431640625e-01 1.6904720664024353e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1583 4.6491161920130253e-03</internalNodes>\n          <leafValues>\n            5.1673221588134766e-01 3.7252250313758850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1584 -4.2664702050387859e-03</internalNodes>\n          <leafValues>\n            6.4064931869506836e-01 4.9873429536819458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1585 -4.7956590424291790e-04</internalNodes>\n          <leafValues>\n            5.8972930908203125e-01 4.4648739695549011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1586 3.6827160511165857e-03</internalNodes>\n          <leafValues>\n            5.4415607452392578e-01 3.4726628661155701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1587 -1.0059880092740059e-02</internalNodes>\n          <leafValues>\n            2.1431629359722137e-01 5.0048297643661499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1588 -3.0361840617842972e-04</internalNodes>\n          <leafValues>\n            5.3864240646362305e-01 4.5903238654136658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1589 -1.4545479789376259e-03</internalNodes>\n          <leafValues>\n            5.7511842250823975e-01 4.4970950484275818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1590 1.6515209572389722e-03</internalNodes>\n          <leafValues>\n            5.4219377040863037e-01 4.2385208606719971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1591 -7.8468639403581619e-03</internalNodes>\n          <leafValues>\n            4.0779209136962891e-01 5.2581572532653809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1592 -5.1259850151836872e-03</internalNodes>\n          <leafValues>\n            4.2292758822441101e-01 5.4794532060623169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1593 -3.6890961229801178e-02</internalNodes>\n          <leafValues>\n            6.5963757038116455e-01 4.6746781468391418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1594 2.4035639944486320e-04</internalNodes>\n          <leafValues>\n            4.2511358857154846e-01 5.5732029676437378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1595 -1.5150169929256663e-05</internalNodes>\n          <leafValues>\n            5.2592468261718750e-01 4.0741148591041565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1596 2.2108471021056175e-03</internalNodes>\n          <leafValues>\n            4.6717229485511780e-01 5.8863520622253418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1597 -1.1568620102480054e-03</internalNodes>\n          <leafValues>\n            5.7110661268234253e-01 4.4871619343757629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1598 4.9996292218565941e-03</internalNodes>\n          <leafValues>\n            5.2641981840133667e-01 2.8983271121978760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1599 -1.4656189596280456e-03</internalNodes>\n          <leafValues>\n            3.8917380571365356e-01 5.1978719234466553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1600 -1.1975039960816503e-03</internalNodes>\n          <leafValues>\n            5.7958728075027466e-01 4.9279558658599854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1601 -4.4954330660402775e-03</internalNodes>\n          <leafValues>\n            2.3776030540466309e-01 5.0125551223754883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1602 1.4997160178609192e-04</internalNodes>\n          <leafValues>\n            4.8766261339187622e-01 5.6176078319549561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1603 2.6391509454697371e-03</internalNodes>\n          <leafValues>\n            5.1680880784988403e-01 3.7655091285705566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1604 -2.9368131072260439e-04</internalNodes>\n          <leafValues>\n            5.4466491937637329e-01 4.8746308684349060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1605 1.4211760135367513e-03</internalNodes>\n          <leafValues>\n            4.6878978610038757e-01 6.6913318634033203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1606 7.9427637159824371e-02</internalNodes>\n          <leafValues>\n            5.1934438943862915e-01 2.7329459786415100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1607 7.9937502741813660e-02</internalNodes>\n          <leafValues>\n            4.9717310070991516e-01 1.7820839583873749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1608 1.1089259758591652e-02</internalNodes>\n          <leafValues>\n            5.1659947633743286e-01 3.2094758749008179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1609 1.6560709627810866e-04</internalNodes>\n          <leafValues>\n            4.0584719181060791e-01 5.3072762489318848e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1610 -5.3354292176663876e-03</internalNodes>\n          <leafValues>\n            3.4450569748878479e-01 5.1581299304962158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1611 1.1287260567769408e-03</internalNodes>\n          <leafValues>\n            4.5948630571365356e-01 6.0755330324172974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1612 -2.1969219669699669e-02</internalNodes>\n          <leafValues>\n            1.6804009675979614e-01 5.2285957336425781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1613 -2.1775320055894554e-04</internalNodes>\n          <leafValues>\n            3.8615968823432922e-01 5.2156728506088257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1614 2.0200149447191507e-04</internalNodes>\n          <leafValues>\n            5.5179792642593384e-01 4.3630391359329224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1615 -2.1733149886131287e-02</internalNodes>\n          <leafValues>\n            7.9994601011276245e-01 4.7898510098457336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1616 -8.4399932529777288e-04</internalNodes>\n          <leafValues>\n            4.0859758853912354e-01 5.3747731447219849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1617 -4.3895249837078154e-04</internalNodes>\n          <leafValues>\n            5.4704052209854126e-01 4.3661430478096008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1618 1.5092400135472417e-03</internalNodes>\n          <leafValues>\n            4.9889969825744629e-01 5.8421492576599121e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1619 -3.5547839943319559e-03</internalNodes>\n          <leafValues>\n            6.7536902427673340e-01 4.7210058569908142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1620 4.8191400128416717e-04</internalNodes>\n          <leafValues>\n            5.4158538579940796e-01 4.3571090698242188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1621 -6.0264398343861103e-03</internalNodes>\n          <leafValues>\n            2.2585099935531616e-01 4.9918809533119202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1622 -1.1668140068650246e-02</internalNodes>\n          <leafValues>\n            6.2565547227859497e-01 4.9274989962577820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1623 -2.8718370012938976e-03</internalNodes>\n          <leafValues>\n            3.9477849006652832e-01 5.2458018064498901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1624 1.7051169648766518e-02</internalNodes>\n          <leafValues>\n            4.7525110840797424e-01 5.7942241430282593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1625 -1.3352080248296261e-02</internalNodes>\n          <leafValues>\n            6.0411047935485840e-01 4.5445358753204346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1626 -3.9301801007241011e-04</internalNodes>\n          <leafValues>\n            4.2582759261131287e-01 5.5449050664901733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1627 3.0483349692076445e-03</internalNodes>\n          <leafValues>\n            5.2334201335906982e-01 3.7802729010581970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1628 -4.3579288758337498e-03</internalNodes>\n          <leafValues>\n            6.3718891143798828e-01 4.8386740684509277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1629 5.6661018170416355e-03</internalNodes>\n          <leafValues>\n            5.3747057914733887e-01 4.1636660695075989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1630 6.0677339206449687e-05</internalNodes>\n          <leafValues>\n            4.6387958526611328e-01 5.3116250038146973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1631 3.6738160997629166e-02</internalNodes>\n          <leafValues>\n            4.6886560320854187e-01 6.4665240049362183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1632 8.6528137326240540e-03</internalNodes>\n          <leafValues>\n            5.2043187618255615e-01 2.1886579692363739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1633 -1.5371359884738922e-01</internalNodes>\n          <leafValues>\n            1.6303719580173492e-01 4.9588400125503540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1634 -4.1560421232134104e-04</internalNodes>\n          <leafValues>\n            5.7744592428207397e-01 4.6964588761329651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1635 -1.2640169588848948e-03</internalNodes>\n          <leafValues>\n            3.9771759510040283e-01 5.2171981334686279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1636 -3.5473341122269630e-03</internalNodes>\n          <leafValues>\n            6.0465282201766968e-01 4.8083150386810303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1637 3.0019069527043030e-05</internalNodes>\n          <leafValues>\n            3.9967238903045654e-01 5.2282011508941650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1638 1.3113019522279501e-03</internalNodes>\n          <leafValues>\n            4.7121581435203552e-01 5.7659977674484253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1639 -1.3374709524214268e-03</internalNodes>\n          <leafValues>\n            4.1095849871635437e-01 5.2531701326370239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1640 2.0876709371805191e-02</internalNodes>\n          <leafValues>\n            5.2029937505722046e-01 1.7579819262027740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1641 -7.5497948564589024e-03</internalNodes>\n          <leafValues>\n            6.5666097402572632e-01 4.6949750185012817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1642 2.4188550189137459e-02</internalNodes>\n          <leafValues>\n            5.1286739110946655e-01 3.3702209591865540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1643 -2.9358828905969858e-03</internalNodes>\n          <leafValues>\n            6.5807867050170898e-01 4.6945410966873169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1644 5.7557929307222366e-02</internalNodes>\n          <leafValues>\n            5.1464450359344482e-01 2.7752599120140076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1645 -1.1343370424583554e-03</internalNodes>\n          <leafValues>\n            3.8366019725799561e-01 5.1926672458648682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1646 1.6816999763250351e-02</internalNodes>\n          <leafValues>\n            5.0855928659439087e-01 6.1772608757019043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1647 5.0535178743302822e-03</internalNodes>\n          <leafValues>\n            5.1387631893157959e-01 3.6847919225692749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1648 -4.5874710194766521e-03</internalNodes>\n          <leafValues>\n            5.9896552562713623e-01 4.8352020978927612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1649 1.6882460331544280e-03</internalNodes>\n          <leafValues>\n            4.5094868540763855e-01 5.7230567932128906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1650 -1.6554000321775675e-03</internalNodes>\n          <leafValues>\n            3.4967708587646484e-01 5.2433192729949951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1651 -1.9373800605535507e-02</internalNodes>\n          <leafValues>\n            1.1205369979143143e-01 4.9687129259109497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1652 1.0374450124800205e-02</internalNodes>\n          <leafValues>\n            5.1481968164443970e-01 4.3952131271362305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1653 1.4973050565458834e-04</internalNodes>\n          <leafValues>\n            4.0849998593330383e-01 5.2698868513107300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1654 -4.2981930077075958e-02</internalNodes>\n          <leafValues>\n            6.3941049575805664e-01 5.0185042619705200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1655 8.3065936341881752e-03</internalNodes>\n          <leafValues>\n            4.7075539827346802e-01 6.6983532905578613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1656 -4.1285790503025055e-03</internalNodes>\n          <leafValues>\n            4.5413690805435181e-01 5.3236472606658936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1657 1.7399420030415058e-03</internalNodes>\n          <leafValues>\n            4.3339619040489197e-01 5.4398661851882935e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1658 1.1739750334527344e-04</internalNodes>\n          <leafValues>\n            4.5796871185302734e-01 5.5434262752532959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1659 1.8585780344437808e-04</internalNodes>\n          <leafValues>\n            4.3246439099311829e-01 5.4267549514770508e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1660 5.5587692186236382e-03</internalNodes>\n          <leafValues>\n            5.2572208642959595e-01 3.5506111383438110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1661 -7.9851560294628143e-03</internalNodes>\n          <leafValues>\n            6.0430181026458740e-01 4.6306359767913818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1662 6.0594122624024749e-04</internalNodes>\n          <leafValues>\n            4.5982548594474792e-01 5.5331951379776001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1663 -2.2983040253166109e-04</internalNodes>\n          <leafValues>\n            4.1307520866394043e-01 5.3224611282348633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1664 4.3740210821852088e-04</internalNodes>\n          <leafValues>\n            4.0430399775505066e-01 5.4092890024185181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1665 2.9482020181603730e-04</internalNodes>\n          <leafValues>\n            4.4949638843536377e-01 5.6288522481918335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1666 1.0312659665942192e-02</internalNodes>\n          <leafValues>\n            5.1775109767913818e-01 2.7043169736862183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1667 -7.7241109684109688e-03</internalNodes>\n          <leafValues>\n            1.9880190491676331e-01 4.9805539846420288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1668 -4.6797208487987518e-03</internalNodes>\n          <leafValues>\n            6.6447502374649048e-01 5.0182962417602539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1669 -5.0755459815263748e-03</internalNodes>\n          <leafValues>\n            3.8983049988746643e-01 5.1852691173553467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1670 2.2479740437120199e-03</internalNodes>\n          <leafValues>\n            4.8018088936805725e-01 5.6603360176086426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1671 8.3327008178457618e-04</internalNodes>\n          <leafValues>\n            5.2109199762344360e-01 3.9571881294250488e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1672 -4.1279330849647522e-02</internalNodes>\n          <leafValues>\n            6.1545419692993164e-01 5.0070542097091675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1673 -5.0930189900100231e-04</internalNodes>\n          <leafValues>\n            3.9759421348571777e-01 5.2284038066864014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1674 1.2568780221045017e-03</internalNodes>\n          <leafValues>\n            4.9791380763053894e-01 5.9391832351684570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1675 8.0048497766256332e-03</internalNodes>\n          <leafValues>\n            4.9844971299171448e-01 1.6333660483360291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1676 -1.1879300000146031e-03</internalNodes>\n          <leafValues>\n            5.9049648046493530e-01 4.9426248669624329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1677 6.1948952497914433e-04</internalNodes>\n          <leafValues>\n            4.1995579004287720e-01 5.3287261724472046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1678 6.6829859279096127e-03</internalNodes>\n          <leafValues>\n            5.4186028242111206e-01 4.9058890342712402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1679 -3.7062340416014194e-03</internalNodes>\n          <leafValues>\n            3.7259390950202942e-01 5.1380002498626709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1680 -3.9739411324262619e-02</internalNodes>\n          <leafValues>\n            6.4789611101150513e-01 5.0503468513488770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1681 1.4085009461268783e-03</internalNodes>\n          <leafValues>\n            4.6823391318321228e-01 6.3778841495513916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1682 3.9322688826359808e-04</internalNodes>\n          <leafValues>\n            5.4585301876068115e-01 4.1504821181297302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1683 -1.8979819724336267e-03</internalNodes>\n          <leafValues>\n            3.6901599168777466e-01 5.1497042179107666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1684 -1.3970440253615379e-02</internalNodes>\n          <leafValues>\n            6.0505628585815430e-01 4.8113578557968140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1685 -1.0100819915533066e-01</internalNodes>\n          <leafValues>\n            2.0170800387859344e-01 4.9923619627952576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1686 -1.7346920445561409e-02</internalNodes>\n          <leafValues>\n            5.7131487131118774e-01 4.8994860053062439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1687 1.5619759506080300e-04</internalNodes>\n          <leafValues>\n            4.2153888940811157e-01 5.3926420211791992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1688 1.3438929617404938e-01</internalNodes>\n          <leafValues>\n            5.1361519098281860e-01 3.7676128745079041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1689 -2.4582240730524063e-02</internalNodes>\n          <leafValues>\n            7.0273578166961670e-01 4.7479069232940674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1690 -3.8553720805794001e-03</internalNodes>\n          <leafValues>\n            4.3174090981483459e-01 5.4277169704437256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1691 -2.3165249731391668e-03</internalNodes>\n          <leafValues>\n            5.9426987171173096e-01 4.6186479926109314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1692 -4.8518120311200619e-03</internalNodes>\n          <leafValues>\n            6.1915689706802368e-01 4.8848950862884521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1693 2.4699938949197531e-03</internalNodes>\n          <leafValues>\n            5.2566647529602051e-01 4.0171998739242554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1694 4.5496959239244461e-02</internalNodes>\n          <leafValues>\n            5.2378678321838379e-01 2.6857739686965942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1695 -2.0319599658250809e-02</internalNodes>\n          <leafValues>\n            2.1304459869861603e-01 4.9797388911247253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1696 2.6994998916052282e-04</internalNodes>\n          <leafValues>\n            4.8140418529510498e-01 5.5431222915649414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1697 -1.8232699949294329e-03</internalNodes>\n          <leafValues>\n            6.4825797080993652e-01 4.7099891304969788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1698 -6.3015790656208992e-03</internalNodes>\n          <leafValues>\n            4.5819279551506042e-01 5.3062361478805542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1699 -2.4139499873854220e-04</internalNodes>\n          <leafValues>\n            5.2320867776870728e-01 4.0517631173133850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1700 -1.0330369696021080e-03</internalNodes>\n          <leafValues>\n            5.5562019348144531e-01 4.7891938686370850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1701 1.8041160365100950e-04</internalNodes>\n          <leafValues>\n            5.2294427156448364e-01 4.0118101239204407e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1702 -6.1407860368490219e-02</internalNodes>\n          <leafValues>\n            6.2986820936203003e-01 5.0107032060623169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1703 -6.9543913006782532e-02</internalNodes>\n          <leafValues>\n            7.2282809019088745e-01 4.7731840610504150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1704 -7.0542663335800171e-02</internalNodes>\n          <leafValues>\n            2.2695130109786987e-01 5.1825290918350220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1705 2.4423799477517605e-03</internalNodes>\n          <leafValues>\n            5.2370971441268921e-01 4.0981510281562805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1706 1.5494349645450711e-03</internalNodes>\n          <leafValues>\n            4.7737509012222290e-01 5.4680430889129639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1707 -2.3914219811558723e-02</internalNodes>\n          <leafValues>\n            7.1469759941101074e-01 4.7838249802589417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1708 -1.2453690171241760e-02</internalNodes>\n          <leafValues>\n            2.6352968811988831e-01 5.2411228418350220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1709 -2.0760179904755205e-04</internalNodes>\n          <leafValues>\n            3.6237570643424988e-01 5.1136088371276855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1710 2.9781080229440704e-05</internalNodes>\n          <leafValues>\n            4.7059321403503418e-01 5.4328018426895142e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>211</maxWeakCount>\n      <stageThreshold>1.0474919891357422e+02</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1711 1.1772749945521355e-02</internalNodes>\n          <leafValues>\n            3.8605189323425293e-01 6.4211672544479370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1712 2.7037570253014565e-02</internalNodes>\n          <leafValues>\n            4.3856549263000488e-01 6.7540389299392700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1713 -3.6419500247575343e-05</internalNodes>\n          <leafValues>\n            5.4871010780334473e-01 3.4233158826828003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1714 1.9995409529656172e-03</internalNodes>\n          <leafValues>\n            3.2305321097373962e-01 5.4003179073333740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1715 4.5278300531208515e-03</internalNodes>\n          <leafValues>\n            5.0916397571563721e-01 2.9350438714027405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1716 4.7890920541249216e-04</internalNodes>\n          <leafValues>\n            4.1781538724899292e-01 5.3440642356872559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1717 1.1720920447260141e-03</internalNodes>\n          <leafValues>\n            2.8991821408271790e-01 5.1320707798004150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1718 9.5305702416226268e-04</internalNodes>\n          <leafValues>\n            4.2801249027252197e-01 5.5608451366424561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1719 1.5099150004971307e-05</internalNodes>\n          <leafValues>\n            4.0448719263076782e-01 5.4047602415084839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1720 -6.0817901976406574e-04</internalNodes>\n          <leafValues>\n            4.2717689275741577e-01 5.5034661293029785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1721 3.3224520739167929e-03</internalNodes>\n          <leafValues>\n            3.9627239108085632e-01 5.3697347640991211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1722 -1.1037490330636501e-03</internalNodes>\n          <leafValues>\n            4.7271779179573059e-01 5.2377498149871826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1723 -1.4350269921123981e-03</internalNodes>\n          <leafValues>\n            5.6030082702636719e-01 4.2235091328620911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1724 2.0767399109899998e-03</internalNodes>\n          <leafValues>\n            5.2259171009063721e-01 4.7327259182929993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1725 -1.6412809782195836e-04</internalNodes>\n          <leafValues>\n            3.9990758895874023e-01 5.4327398538589478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1726 8.8302437216043472e-03</internalNodes>\n          <leafValues>\n            4.6783858537673950e-01 6.0273271799087524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1727 -1.0552070103585720e-02</internalNodes>\n          <leafValues>\n            3.4939670562744141e-01 5.2139747142791748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1728 -2.2731600329279900e-03</internalNodes>\n          <leafValues>\n            6.1858189105987549e-01 4.7490629553794861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1729 -8.4786332445219159e-04</internalNodes>\n          <leafValues>\n            5.2853411436080933e-01 3.8434821367263794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1730 1.2081359745934606e-03</internalNodes>\n          <leafValues>\n            5.3606408834457397e-01 3.4473359584808350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1731 2.6512730401009321e-03</internalNodes>\n          <leafValues>\n            4.5582920312881470e-01 6.1939620971679688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1732 -1.1012479662895203e-03</internalNodes>\n          <leafValues>\n            3.6802300810813904e-01 5.3276282548904419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1733 4.9561518244445324e-04</internalNodes>\n          <leafValues>\n            3.9605951309204102e-01 5.2749407291412354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1734 -4.3901771306991577e-02</internalNodes>\n          <leafValues>\n            7.0204448699951172e-01 4.9928390979766846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1735 3.4690350294113159e-02</internalNodes>\n          <leafValues>\n            5.0491642951965332e-01 2.7666029334068298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1736 -2.7442190330475569e-03</internalNodes>\n          <leafValues>\n            2.6726329326629639e-01 5.2749711275100708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1737 3.3316588960587978e-03</internalNodes>\n          <leafValues>\n            4.5794829726219177e-01 6.0011017322540283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1738 -2.0044570788741112e-02</internalNodes>\n          <leafValues>\n            3.1715941429138184e-01 5.2357178926467896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1739 1.3492030557245016e-03</internalNodes>\n          <leafValues>\n            5.2653628587722778e-01 4.0343248844146729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1740 2.9702018946409225e-03</internalNodes>\n          <leafValues>\n            5.3324568271636963e-01 4.5719841122627258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1741 6.3039981760084629e-03</internalNodes>\n          <leafValues>\n            4.5933109521865845e-01 6.0346359014511108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1742 -1.2936590239405632e-02</internalNodes>\n          <leafValues>\n            4.4379639625549316e-01 5.3729712963104248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1743 4.0148729458451271e-03</internalNodes>\n          <leafValues>\n            4.6803238987922668e-01 6.4378339052200317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1744 -2.6401679497212172e-03</internalNodes>\n          <leafValues>\n            3.7096318602561951e-01 5.3143328428268433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1745 1.3918439857661724e-02</internalNodes>\n          <leafValues>\n            4.7235551476478577e-01 7.1308088302612305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1746 -4.5087869511917233e-04</internalNodes>\n          <leafValues>\n            4.4923940300941467e-01 5.3704041242599487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1747 2.5384349282830954e-04</internalNodes>\n          <leafValues>\n            4.4068640470504761e-01 5.5144029855728149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1748 2.2710000630468130e-03</internalNodes>\n          <leafValues>\n            4.6824169158935547e-01 5.9679841995239258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1749 2.4120779708027840e-03</internalNodes>\n          <leafValues>\n            5.0793921947479248e-01 3.0185988545417786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1750 -3.6025670851813629e-05</internalNodes>\n          <leafValues>\n            5.6010371446609497e-01 4.4710969924926758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1751 -7.4905529618263245e-03</internalNodes>\n          <leafValues>\n            2.2075350582599640e-01 4.9899441003799438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1752 -1.7513120546936989e-02</internalNodes>\n          <leafValues>\n            6.5312159061431885e-01 5.0176489353179932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1753 1.4281630516052246e-01</internalNodes>\n          <leafValues>\n            4.9679630994796753e-01 1.4820620417594910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1754 5.5345268920063972e-03</internalNodes>\n          <leafValues>\n            4.8989468812942505e-01 5.9542238712310791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1755 -9.6323591424152255e-04</internalNodes>\n          <leafValues>\n            3.9271169900894165e-01 5.1960742473602295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1756 -2.0370010752230883e-03</internalNodes>\n          <leafValues>\n            5.6133252382278442e-01 4.8848581314086914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1757 1.6614829655736685e-03</internalNodes>\n          <leafValues>\n            4.4728800654411316e-01 5.5788809061050415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1758 -3.1188090797513723e-03</internalNodes>\n          <leafValues>\n            3.8405328989028931e-01 5.3974777460098267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1759 -6.4000617712736130e-03</internalNodes>\n          <leafValues>\n            5.8439838886260986e-01 4.5332181453704834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1760 3.1319601112045348e-04</internalNodes>\n          <leafValues>\n            5.4392218589782715e-01 4.2347279191017151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1761 -1.8222099170088768e-02</internalNodes>\n          <leafValues>\n            1.2884649634361267e-01 4.9584048986434937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1762 8.7969247251749039e-03</internalNodes>\n          <leafValues>\n            4.9512979388237000e-01 7.1534800529479980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1763 -4.2395070195198059e-03</internalNodes>\n          <leafValues>\n            3.9465999603271484e-01 5.1949369907379150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1764 9.7086271271109581e-03</internalNodes>\n          <leafValues>\n            4.8975038528442383e-01 6.0649001598358154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1765 -3.9934171363711357e-03</internalNodes>\n          <leafValues>\n            3.2454401254653931e-01 5.0608289241790771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1766 -1.6785059124231339e-02</internalNodes>\n          <leafValues>\n            1.5819530189037323e-01 5.2037787437438965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1767 1.8272090703248978e-02</internalNodes>\n          <leafValues>\n            4.6809351444244385e-01 6.6269791126251221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1768 5.6872838176786900e-03</internalNodes>\n          <leafValues>\n            5.2116978168487549e-01 3.5121849179267883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1769 -1.0739039862528443e-03</internalNodes>\n          <leafValues>\n            5.7683861255645752e-01 4.5298451185226440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1770 -3.7093870341777802e-03</internalNodes>\n          <leafValues>\n            4.5077630877494812e-01 5.3135812282562256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1771 -2.1110709349159151e-04</internalNodes>\n          <leafValues>\n            5.4608201980590820e-01 4.3333768844604492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1772 1.0670139454305172e-03</internalNodes>\n          <leafValues>\n            5.3718560934066772e-01 4.0783908963203430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1773 3.5943021066486835e-03</internalNodes>\n          <leafValues>\n            4.4712871313095093e-01 5.6438362598419189e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1774 -5.1776031032204628e-03</internalNodes>\n          <leafValues>\n            4.4993931055068970e-01 5.2803301811218262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1775 -2.5414369883947074e-04</internalNodes>\n          <leafValues>\n            5.5161732435226440e-01 4.4077080488204956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1776 6.3522560521960258e-03</internalNodes>\n          <leafValues>\n            5.1941901445388794e-01 2.4652279913425446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1777 -4.4205080484971404e-04</internalNodes>\n          <leafValues>\n            3.8307058811187744e-01 5.1396822929382324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1778 7.4488727841526270e-04</internalNodes>\n          <leafValues>\n            4.8910909891128540e-01 5.9747868776321411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1779 -3.5116379149258137e-03</internalNodes>\n          <leafValues>\n            7.4136817455291748e-01 4.7687649726867676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1780 -1.2540910392999649e-02</internalNodes>\n          <leafValues>\n            3.6488190293312073e-01 5.2528268098831177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1781 9.4931852072477341e-03</internalNodes>\n          <leafValues>\n            5.1004928350448608e-01 3.6295869946479797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1782 1.2961150147020817e-02</internalNodes>\n          <leafValues>\n            5.2324420213699341e-01 4.3335610628128052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1783 4.7209449112415314e-03</internalNodes>\n          <leafValues>\n            4.6481490135192871e-01 6.3310527801513672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1784 -2.3119079414755106e-03</internalNodes>\n          <leafValues>\n            5.9303098917007446e-01 4.5310580730438232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1785 -2.8262299019843340e-03</internalNodes>\n          <leafValues>\n            3.8704779744148254e-01 5.2571010589599609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1786 -1.4311339473351836e-03</internalNodes>\n          <leafValues>\n            5.5225032567977905e-01 4.5618548989295959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1787 1.9378310535103083e-03</internalNodes>\n          <leafValues>\n            4.5462208986282349e-01 5.7369667291641235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1788 2.6343559147790074e-04</internalNodes>\n          <leafValues>\n            5.3457391262054443e-01 4.5718750357627869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1789 7.8257522545754910e-04</internalNodes>\n          <leafValues>\n            3.9678159356117249e-01 5.2201879024505615e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1790 -1.9550440832972527e-02</internalNodes>\n          <leafValues>\n            2.8296428918838501e-01 5.2435082197189331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1791 4.3914958951063454e-04</internalNodes>\n          <leafValues>\n            4.5900669693946838e-01 5.8990901708602905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1792 2.1452000364661217e-02</internalNodes>\n          <leafValues>\n            5.2314108610153198e-01 2.8553789854049683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1793 5.8973580598831177e-04</internalNodes>\n          <leafValues>\n            4.3972569704055786e-01 5.5064219236373901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1794 -2.6157610118389130e-02</internalNodes>\n          <leafValues>\n            3.1350791454315186e-01 5.1891750097274780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1795 -1.3959860429167747e-02</internalNodes>\n          <leafValues>\n            3.2132729887962341e-01 5.0407177209854126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1796 -6.3699018210172653e-03</internalNodes>\n          <leafValues>\n            6.3875448703765869e-01 4.8495069146156311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1797 -8.5613820701837540e-03</internalNodes>\n          <leafValues>\n            2.7591320872306824e-01 5.0320190191268921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1798 9.6622901037335396e-04</internalNodes>\n          <leafValues>\n            4.6856409311294556e-01 5.8348792791366577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1799 7.6550268568098545e-04</internalNodes>\n          <leafValues>\n            5.1752072572708130e-01 3.8964220881462097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1800 -8.1833340227603912e-03</internalNodes>\n          <leafValues>\n            2.0691369473934174e-01 5.2081221342086792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1801 -9.3976939097046852e-03</internalNodes>\n          <leafValues>\n            6.1340910196304321e-01 4.6412229537963867e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1802 4.8028980381786823e-03</internalNodes>\n          <leafValues>\n            5.4541081190109253e-01 4.3952199816703796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1803 -3.5680569708347321e-03</internalNodes>\n          <leafValues>\n            6.3444852828979492e-01 4.6810939908027649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1804 4.0733120404183865e-03</internalNodes>\n          <leafValues>\n            5.2926832437515259e-01 4.0156200528144836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1805 1.2568129459396005e-03</internalNodes>\n          <leafValues>\n            4.3929880857467651e-01 5.4528248310089111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1806 -2.9065010603517294e-03</internalNodes>\n          <leafValues>\n            5.8988320827484131e-01 4.8633798956871033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1807 -2.4409340694546700e-03</internalNodes>\n          <leafValues>\n            4.0693649649620056e-01 5.2474218606948853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1808 2.4830700829625130e-02</internalNodes>\n          <leafValues>\n            5.1827257871627808e-01 3.6825248599052429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1809 -4.8854008316993713e-02</internalNodes>\n          <leafValues>\n            1.3075779378414154e-01 4.9612811207771301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1810 -1.6110379947349429e-03</internalNodes>\n          <leafValues>\n            6.4210057258605957e-01 4.8726621270179749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1811 -9.7009479999542236e-02</internalNodes>\n          <leafValues>\n            4.7769349068403244e-02 4.9509888887405396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1812 1.1209240183234215e-03</internalNodes>\n          <leafValues>\n            4.6162670850753784e-01 5.3547459840774536e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1813 -1.3064090162515640e-03</internalNodes>\n          <leafValues>\n            6.2618541717529297e-01 4.6388059854507446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1814 4.5771620352752507e-04</internalNodes>\n          <leafValues>\n            5.3844177722930908e-01 4.6466401219367981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1815 -6.3149951165542006e-04</internalNodes>\n          <leafValues>\n            3.8040471076965332e-01 5.1302570104598999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1816 1.4505970466416329e-04</internalNodes>\n          <leafValues>\n            4.5543101429939270e-01 5.6644618511199951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1817 -1.6474550589919090e-02</internalNodes>\n          <leafValues>\n            6.5969580411911011e-01 4.7158598899841309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1818 1.3369579799473286e-02</internalNodes>\n          <leafValues>\n            5.1954662799835205e-01 3.0359649658203125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1819 1.0271780047332868e-04</internalNodes>\n          <leafValues>\n            5.2291762828826904e-01 4.1070660948753357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1820 -5.5311559699475765e-03</internalNodes>\n          <leafValues>\n            6.3528877496719360e-01 4.9609071016311646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1821 -2.6187049224972725e-03</internalNodes>\n          <leafValues>\n            3.8245460391044617e-01 5.1409840583801270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1822 5.0834268331527710e-03</internalNodes>\n          <leafValues>\n            4.9504399299621582e-01 6.2208187580108643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1823 7.9818159341812134e-02</internalNodes>\n          <leafValues>\n            4.9523359537124634e-01 1.3224759697914124e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1824 -9.9226586520671844e-02</internalNodes>\n          <leafValues>\n            7.5427287817001343e-01 5.0084167718887329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1825 -6.5174017800018191e-04</internalNodes>\n          <leafValues>\n            3.6993029713630676e-01 5.1301211118698120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1826 -1.8996849656105042e-02</internalNodes>\n          <leafValues>\n            6.6891789436340332e-01 4.9212029576301575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1827 1.7346899956464767e-02</internalNodes>\n          <leafValues>\n            4.9833008646965027e-01 1.8591980636119843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1828 5.5082101607695222e-04</internalNodes>\n          <leafValues>\n            4.5744240283966064e-01 5.5221217870712280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1829 2.0056050270795822e-03</internalNodes>\n          <leafValues>\n            5.1317447423934937e-01 3.8564699888229370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1830 -7.7688191086053848e-03</internalNodes>\n          <leafValues>\n            4.3617001175880432e-01 5.4343092441558838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1831 5.0878278911113739e-02</internalNodes>\n          <leafValues>\n            4.6827208995819092e-01 6.8406397104263306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1832 -2.2901780903339386e-03</internalNodes>\n          <leafValues>\n            4.3292450904846191e-01 5.3060990571975708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1833 -1.5715380141045898e-04</internalNodes>\n          <leafValues>\n            5.3700572252273560e-01 4.3781641125679016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1834 1.0519240051507950e-01</internalNodes>\n          <leafValues>\n            5.1372742652893066e-01 6.7361466586589813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1835 2.7198919560760260e-03</internalNodes>\n          <leafValues>\n            4.1120609641075134e-01 5.2556651830673218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1836 4.8337779939174652e-02</internalNodes>\n          <leafValues>\n            5.4046237468719482e-01 4.4389671087265015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1837 9.5703761326149106e-04</internalNodes>\n          <leafValues>\n            4.3559691309928894e-01 5.3995108604431152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1838 -2.5371259078383446e-02</internalNodes>\n          <leafValues>\n            5.9951752424240112e-01 5.0310248136520386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1839 5.2457951009273529e-02</internalNodes>\n          <leafValues>\n            4.9502879381179810e-01 1.3983510434627533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1840 -1.2365629896521568e-02</internalNodes>\n          <leafValues>\n            6.3972991704940796e-01 4.9641060829162598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1841 -1.4589719474315643e-01</internalNodes>\n          <leafValues>\n            1.0016699880361557e-01 4.9463221430778503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1842 -1.5908600762486458e-02</internalNodes>\n          <leafValues>\n            3.3123299479484558e-01 5.2083408832550049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1843 3.9486068999394774e-04</internalNodes>\n          <leafValues>\n            4.4063639640808105e-01 5.4261028766632080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1844 -5.2454001270234585e-03</internalNodes>\n          <leafValues>\n            2.7995899319648743e-01 5.1899671554565430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1845 -5.0421799533069134e-03</internalNodes>\n          <leafValues>\n            6.9875800609588623e-01 4.7521421313285828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1846 2.9812189750373363e-03</internalNodes>\n          <leafValues>\n            4.9832889437675476e-01 6.3074797391891479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1847 -7.2884308174252510e-03</internalNodes>\n          <leafValues>\n            2.9823330044746399e-01 5.0268697738647461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1848 1.5094350092113018e-03</internalNodes>\n          <leafValues>\n            5.3084421157836914e-01 3.8329708576202393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1849 -9.3340799212455750e-03</internalNodes>\n          <leafValues>\n            2.0379640161991119e-01 4.9698171019554138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1850 2.8667140752077103e-02</internalNodes>\n          <leafValues>\n            5.0256967544555664e-01 6.9280272722244263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1851 1.7019680142402649e-01</internalNodes>\n          <leafValues>\n            4.9600529670715332e-01 1.4764429628849030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1852 -3.2614478841423988e-03</internalNodes>\n          <leafValues>\n            5.6030637025833130e-01 4.8260560631752014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1853 5.5769277969375253e-04</internalNodes>\n          <leafValues>\n            5.2055621147155762e-01 4.1296330094337463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1854 3.6258339881896973e-01</internalNodes>\n          <leafValues>\n            5.2216529846191406e-01 3.7686121463775635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1855 -1.1615130119025707e-02</internalNodes>\n          <leafValues>\n            6.0226827859878540e-01 4.6374899148941040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1856 -4.0795197710394859e-03</internalNodes>\n          <leafValues>\n            4.0704470872879028e-01 5.3374791145324707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1857 5.7204300537705421e-04</internalNodes>\n          <leafValues>\n            4.6018350124359131e-01 5.9003931283950806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1858 6.7543348995968699e-04</internalNodes>\n          <leafValues>\n            5.3982520103454590e-01 4.3454289436340332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1859 6.3295697327703238e-04</internalNodes>\n          <leafValues>\n            5.2015632390975952e-01 4.0513589978218079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1860 1.2435320531949401e-03</internalNodes>\n          <leafValues>\n            4.6423879265785217e-01 5.5474412441253662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1861 -4.7363857738673687e-03</internalNodes>\n          <leafValues>\n            6.1985671520233154e-01 4.6725520491600037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1862 -6.4658462069928646e-03</internalNodes>\n          <leafValues>\n            6.8373328447341919e-01 5.0190007686614990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1863 3.5017321351915598e-04</internalNodes>\n          <leafValues>\n            4.3448030948638916e-01 5.3636229038238525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1864 1.5754920605104417e-04</internalNodes>\n          <leafValues>\n            4.7600790858268738e-01 5.7320207357406616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1865 9.9774366244673729e-03</internalNodes>\n          <leafValues>\n            5.0909858942031860e-01 3.6350399255752563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1866 -4.1464529931545258e-04</internalNodes>\n          <leafValues>\n            5.5700647830963135e-01 4.5938020944595337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1867 -3.5888899583369493e-04</internalNodes>\n          <leafValues>\n            5.3568458557128906e-01 4.3391349911689758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1868 4.0463250479660928e-04</internalNodes>\n          <leafValues>\n            4.4398030638694763e-01 5.4367768764495850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1869 -8.2184787606820464e-04</internalNodes>\n          <leafValues>\n            4.0422949194908142e-01 5.1762992143630981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1870 5.9467419050633907e-03</internalNodes>\n          <leafValues>\n            4.9276518821716309e-01 5.6337797641754150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1871 -2.1753389388322830e-02</internalNodes>\n          <leafValues>\n            8.0062937736511230e-01 4.8008409142494202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1872 -1.4540379866957664e-02</internalNodes>\n          <leafValues>\n            3.9460548758506775e-01 5.1822227239608765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1873 -4.0510769933462143e-02</internalNodes>\n          <leafValues>\n            2.1324990317225456e-02 4.9357929825782776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1874 -5.8458268176764250e-04</internalNodes>\n          <leafValues>\n            4.0127959847450256e-01 5.3140252828598022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1875 5.5151800625026226e-03</internalNodes>\n          <leafValues>\n            4.6424189209938049e-01 5.8962607383728027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1876 -6.0626221820712090e-03</internalNodes>\n          <leafValues>\n            6.5021592378616333e-01 5.0164777040481567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1877 9.4535842537879944e-02</internalNodes>\n          <leafValues>\n            5.2647089958190918e-01 4.1268271207809448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1878 4.7315051779150963e-03</internalNodes>\n          <leafValues>\n            4.8791998624801636e-01 5.8924478292465210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1879 -5.2571471314877272e-04</internalNodes>\n          <leafValues>\n            3.9172801375389099e-01 5.1894128322601318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1880 -2.5464049540460110e-03</internalNodes>\n          <leafValues>\n            5.8375990390777588e-01 4.9857059121131897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1881 -2.6075689122080803e-02</internalNodes>\n          <leafValues>\n            1.2619839608669281e-01 4.9558219313621521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1882 -5.4779709316790104e-03</internalNodes>\n          <leafValues>\n            5.7225137948989868e-01 5.0102657079696655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1883 5.1337741315364838e-03</internalNodes>\n          <leafValues>\n            5.2732622623443604e-01 4.2263761162757874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1884 4.7944980906322598e-04</internalNodes>\n          <leafValues>\n            4.4500669836997986e-01 5.8195871114730835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1885 -2.1114079281687737e-03</internalNodes>\n          <leafValues>\n            5.7576531171798706e-01 4.5117148756980896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1886 -1.3179990462958813e-02</internalNodes>\n          <leafValues>\n            1.8843810260295868e-01 5.1607340574264526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1887 -4.7968099825084209e-03</internalNodes>\n          <leafValues>\n            6.5897899866104126e-01 4.7361189126968384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1888 6.7483168095350266e-03</internalNodes>\n          <leafValues>\n            5.2594298124313354e-01 3.3563950657844543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1889 1.4623369788751006e-03</internalNodes>\n          <leafValues>\n            5.3552711009979248e-01 4.2640921473503113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1890 4.7645159065723419e-03</internalNodes>\n          <leafValues>\n            5.0344067811965942e-01 5.7868278026580811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1891 6.8066660314798355e-03</internalNodes>\n          <leafValues>\n            4.7566050291061401e-01 6.6778290271759033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1892 3.6608621012419462e-03</internalNodes>\n          <leafValues>\n            5.3696119785308838e-01 4.3115469813346863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1893 2.1449640393257141e-02</internalNodes>\n          <leafValues>\n            4.9686419963836670e-01 1.8888160586357117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1894 4.1678901761770248e-03</internalNodes>\n          <leafValues>\n            4.9307331442832947e-01 5.8153688907623291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1895 8.6467564105987549e-03</internalNodes>\n          <leafValues>\n            5.2052050828933716e-01 4.1325950622558594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1896 -3.6114078829996288e-04</internalNodes>\n          <leafValues>\n            5.4835551977157593e-01 4.8009279370307922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1897 1.0808729566633701e-03</internalNodes>\n          <leafValues>\n            4.6899020671844482e-01 6.0414212942123413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1898 5.7719959877431393e-03</internalNodes>\n          <leafValues>\n            5.1711422204971313e-01 3.0532771348953247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1899 1.5720770461484790e-03</internalNodes>\n          <leafValues>\n            5.2199780941009521e-01 4.1788038611412048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1900 -1.9307859474793077e-03</internalNodes>\n          <leafValues>\n            5.8603698015213013e-01 4.8129200935363770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1901 -7.8926272690296173e-03</internalNodes>\n          <leafValues>\n            1.7492769658565521e-01 4.9717339873313904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1902 -2.2224679123610258e-03</internalNodes>\n          <leafValues>\n            4.3425890803337097e-01 5.2128481864929199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1903 1.9011989934369922e-03</internalNodes>\n          <leafValues>\n            4.7651869058609009e-01 6.8920552730560303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1904 2.7576119173318148e-03</internalNodes>\n          <leafValues>\n            5.2621912956237793e-01 4.3374860286712646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1905 5.1787449046969414e-03</internalNodes>\n          <leafValues>\n            4.8040691018104553e-01 7.8437292575836182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1906 -9.0273341629654169e-04</internalNodes>\n          <leafValues>\n            4.1208469867706299e-01 5.3534239530563354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1907 5.1797959022223949e-03</internalNodes>\n          <leafValues>\n            4.7403728961944580e-01 6.4259600639343262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1908 -1.0114000178873539e-02</internalNodes>\n          <leafValues>\n            2.4687920510768890e-01 5.1750177145004272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1909 -1.8617060035467148e-02</internalNodes>\n          <leafValues>\n            5.7562941312789917e-01 4.6289789676666260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1910 5.9225959703326225e-03</internalNodes>\n          <leafValues>\n            5.1696258783340454e-01 3.2142710685729980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1911 -6.2945079989731312e-03</internalNodes>\n          <leafValues>\n            3.8720148801803589e-01 5.1416367292404175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1912 6.5353019163012505e-03</internalNodes>\n          <leafValues>\n            4.8530489206314087e-01 6.3104897737503052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1913 1.0878399480134249e-03</internalNodes>\n          <leafValues>\n            5.1173150539398193e-01 3.7232589721679688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1914 -2.2542240098118782e-02</internalNodes>\n          <leafValues>\n            5.6927400827407837e-01 4.8871129751205444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1915 -3.0065660830587149e-03</internalNodes>\n          <leafValues>\n            2.5560128688812256e-01 5.0039929151535034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1916 7.4741272255778313e-03</internalNodes>\n          <leafValues>\n            4.8108729720115662e-01 5.6759268045425415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1917 2.6162320747971535e-02</internalNodes>\n          <leafValues>\n            4.9711948633193970e-01 1.7772370576858521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1918 9.4352738233283162e-04</internalNodes>\n          <leafValues>\n            4.9400109052658081e-01 5.4912507534027100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1919 3.3363241702318192e-02</internalNodes>\n          <leafValues>\n            5.0076121091842651e-01 2.7907240390777588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1920 -1.5118650160729885e-02</internalNodes>\n          <leafValues>\n            7.0595788955688477e-01 4.9730318784713745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1921 9.8648946732282639e-04</internalNodes>\n          <leafValues>\n            5.1286202669143677e-01 3.7767618894577026e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>213</maxWeakCount>\n      <stageThreshold>1.0576110076904297e+02</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1922 -9.5150798559188843e-02</internalNodes>\n          <leafValues>\n            6.4707571268081665e-01 4.0172868967056274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1923 6.2702340073883533e-03</internalNodes>\n          <leafValues>\n            3.9998221397399902e-01 5.7464492321014404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1924 3.0018089455552399e-04</internalNodes>\n          <leafValues>\n            3.5587701201438904e-01 5.5388098955154419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1925 1.1757409665733576e-03</internalNodes>\n          <leafValues>\n            4.2565348744392395e-01 5.3826177120208740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1926 4.4235268433112651e-05</internalNodes>\n          <leafValues>\n            3.6829081177711487e-01 5.5899268388748169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1927 -2.9936920327600092e-05</internalNodes>\n          <leafValues>\n            5.4524701833724976e-01 4.0203678607940674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1928 3.0073199886828661e-03</internalNodes>\n          <leafValues>\n            5.2390581369400024e-01 3.3178439736366272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1929 -1.0513889603316784e-02</internalNodes>\n          <leafValues>\n            4.3206891417503357e-01 5.3079837560653687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1930 8.3476826548576355e-03</internalNodes>\n          <leafValues>\n            4.5046371221542358e-01 6.4532989263534546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1931 -3.1492270063608885e-03</internalNodes>\n          <leafValues>\n            4.3134251236915588e-01 5.3705251216888428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1932 -1.4435649973165710e-05</internalNodes>\n          <leafValues>\n            5.3266030550003052e-01 3.8179719448089600e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1933 -4.2855090578086674e-04</internalNodes>\n          <leafValues>\n            4.3051639199256897e-01 5.3820097446441650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1934 1.5062429883982986e-04</internalNodes>\n          <leafValues>\n            4.2359709739685059e-01 5.5449652671813965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1935 7.1559831500053406e-02</internalNodes>\n          <leafValues>\n            5.3030598163604736e-01 2.6788029074668884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1936 8.4095180500298738e-04</internalNodes>\n          <leafValues>\n            3.5571089386940002e-01 5.2054339647293091e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1937 6.2986500561237335e-02</internalNodes>\n          <leafValues>\n            5.2253627777099609e-01 2.8613761067390442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1938 -3.3798629883676767e-03</internalNodes>\n          <leafValues>\n            3.6241859197616577e-01 5.2016979455947876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1939 -1.1810739670181647e-04</internalNodes>\n          <leafValues>\n            5.4744768142700195e-01 3.9598938822746277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1940 -5.4505601292476058e-04</internalNodes>\n          <leafValues>\n            3.7404221296310425e-01 5.2157157659530640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1941 -1.8454910023137927e-03</internalNodes>\n          <leafValues>\n            5.8930522203445435e-01 4.5844489336013794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1942 -4.3832371011376381e-04</internalNodes>\n          <leafValues>\n            4.0845820307731628e-01 5.3853511810302734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1943 -2.4000830017030239e-03</internalNodes>\n          <leafValues>\n            3.7774550914764404e-01 5.2935802936553955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1944 -9.8795741796493530e-02</internalNodes>\n          <leafValues>\n            2.9636120796203613e-01 5.0700891017913818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1945 3.1798239797353745e-03</internalNodes>\n          <leafValues>\n            4.8776328563690186e-01 6.7264437675476074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1946 3.2406419632025063e-04</internalNodes>\n          <leafValues>\n            4.3669110536575317e-01 5.5611097812652588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1947 -3.2547250390052795e-02</internalNodes>\n          <leafValues>\n            3.1281578540802002e-01 5.3086161613464355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1948 -7.7561130747199059e-03</internalNodes>\n          <leafValues>\n            6.5602248907089233e-01 4.6398720145225525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1949 1.6027249395847321e-02</internalNodes>\n          <leafValues>\n            5.1726800203323364e-01 3.1418979167938232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1950 7.1002350523485802e-06</internalNodes>\n          <leafValues>\n            4.0844461321830750e-01 5.3362947702407837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1951 7.3422808200120926e-03</internalNodes>\n          <leafValues>\n            4.9669221043586731e-01 6.6034650802612305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1952 -1.6970280557870865e-03</internalNodes>\n          <leafValues>\n            5.9082370996475220e-01 4.5001828670501709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1953 2.4118260480463505e-03</internalNodes>\n          <leafValues>\n            5.3151607513427734e-01 3.5997208952903748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1954 -5.5300937965512276e-03</internalNodes>\n          <leafValues>\n            2.3340409994125366e-01 4.9968141317367554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1955 -2.6478730142116547e-03</internalNodes>\n          <leafValues>\n            5.8809357881546021e-01 4.6847340464591980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1956 1.1295629665255547e-02</internalNodes>\n          <leafValues>\n            4.9837771058082581e-01 1.8845909833908081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1957 -6.6952878842130303e-04</internalNodes>\n          <leafValues>\n            5.8721381425857544e-01 4.7990199923515320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1958 1.4410680159926414e-03</internalNodes>\n          <leafValues>\n            5.1311892271041870e-01 3.5010111331939697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1959 2.4637870956212282e-03</internalNodes>\n          <leafValues>\n            5.3393721580505371e-01 4.1176390647888184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1960 3.3114518737420440e-04</internalNodes>\n          <leafValues>\n            4.3133831024169922e-01 5.3982460498809814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1961 -3.3557269722223282e-02</internalNodes>\n          <leafValues>\n            2.6753368973731995e-01 5.1791548728942871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1962 1.8539419397711754e-02</internalNodes>\n          <leafValues>\n            4.9738699197769165e-01 2.3171770572662354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1963 -2.9698139405809343e-04</internalNodes>\n          <leafValues>\n            5.5297082662582397e-01 4.6436640620231628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1964 -4.5577259152196348e-04</internalNodes>\n          <leafValues>\n            5.6295841932296753e-01 4.4691911339759827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1965 -1.0158980265259743e-02</internalNodes>\n          <leafValues>\n            6.7062127590179443e-01 4.9259188771247864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1966 -2.2413829356082715e-05</internalNodes>\n          <leafValues>\n            5.2394217252731323e-01 3.9129018783569336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1967 7.2034963523037732e-05</internalNodes>\n          <leafValues>\n            4.7994381189346313e-01 5.5017888545989990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1968 -6.9267209619283676e-03</internalNodes>\n          <leafValues>\n            6.9300097227096558e-01 4.6980848908424377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1969 -7.6997838914394379e-03</internalNodes>\n          <leafValues>\n            4.0996238589286804e-01 5.4808831214904785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1970 -7.3130549862980843e-03</internalNodes>\n          <leafValues>\n            3.2834759354591370e-01 5.0578862428665161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1971 1.9650589674711227e-03</internalNodes>\n          <leafValues>\n            4.9780470132827759e-01 6.3982498645782471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1972 7.1647600270807743e-03</internalNodes>\n          <leafValues>\n            4.6611601114273071e-01 6.2221372127532959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1973 -2.4078639224171638e-02</internalNodes>\n          <leafValues>\n            2.3346449434757233e-01 5.2221620082855225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1974 -2.1027969196438789e-02</internalNodes>\n          <leafValues>\n            1.1836539953947067e-01 4.9382260441780090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1975 3.6017020465806127e-04</internalNodes>\n          <leafValues>\n            5.3250199556350708e-01 4.1167110204696655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1976 -1.7219729721546173e-02</internalNodes>\n          <leafValues>\n            6.2787622213363647e-01 4.6642690896987915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1977 -7.8672142699360847e-03</internalNodes>\n          <leafValues>\n            3.4034150838851929e-01 5.2497369050979614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1978 -4.4777389848604798e-04</internalNodes>\n          <leafValues>\n            3.6104118824005127e-01 5.0862592458724976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1979 5.5486010387539864e-03</internalNodes>\n          <leafValues>\n            4.8842659592628479e-01 6.2034982442855835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1980 -6.9461148232221603e-03</internalNodes>\n          <leafValues>\n            2.6259300112724304e-01 5.0110971927642822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1981 1.3569870498031378e-04</internalNodes>\n          <leafValues>\n            4.3407949805259705e-01 5.6283122301101685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1982 -4.5880250632762909e-02</internalNodes>\n          <leafValues>\n            6.5079987049102783e-01 4.6962749958038330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1983 -2.1582560613751411e-02</internalNodes>\n          <leafValues>\n            3.8265028595924377e-01 5.2876168489456177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1984 -2.0209539681673050e-02</internalNodes>\n          <leafValues>\n            3.2333680987358093e-01 5.0744771957397461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1985 5.8496710844337940e-03</internalNodes>\n          <leafValues>\n            5.1776039600372314e-01 4.4896709918975830e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1986 -5.7476379879517481e-05</internalNodes>\n          <leafValues>\n            4.0208509564399719e-01 5.2463638782501221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1987 -1.1513100471347570e-03</internalNodes>\n          <leafValues>\n            6.3150721788406372e-01 4.9051541090011597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1988 1.9862831104546785e-03</internalNodes>\n          <leafValues>\n            4.7024598717689514e-01 6.4971512556076050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1989 -5.2719512023031712e-03</internalNodes>\n          <leafValues>\n            3.6503839492797852e-01 5.2276527881622314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1990 1.2662699446082115e-03</internalNodes>\n          <leafValues>\n            5.1661008596420288e-01 3.8776180148124695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1991 -6.2919440679252148e-03</internalNodes>\n          <leafValues>\n            7.3758941888809204e-01 5.0238478183746338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1992 6.7360111279413104e-04</internalNodes>\n          <leafValues>\n            4.4232261180877686e-01 5.4955857992172241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1993 -1.0523450328037143e-03</internalNodes>\n          <leafValues>\n            5.9763962030410767e-01 4.8595830798149109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1994 -4.4216238893568516e-04</internalNodes>\n          <leafValues>\n            5.9559392929077148e-01 4.3989309668540955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1995 1.1747940443456173e-03</internalNodes>\n          <leafValues>\n            5.3498882055282593e-01 4.6050581336021423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1996 5.2457437850534916e-03</internalNodes>\n          <leafValues>\n            5.0491911172866821e-01 2.9415771365165710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1997 -2.4539720267057419e-02</internalNodes>\n          <leafValues>\n            2.5501778721809387e-01 5.2185869216918945e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1998 7.3793041519820690e-04</internalNodes>\n          <leafValues>\n            4.4248610734939575e-01 5.4908162355422974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1999 1.4233799884095788e-03</internalNodes>\n          <leafValues>\n            5.3195142745971680e-01 4.0813559293746948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2000 -2.4149110540747643e-03</internalNodes>\n          <leafValues>\n            4.0876591205596924e-01 5.2389502525329590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2001 -1.2165299849584699e-03</internalNodes>\n          <leafValues>\n            5.6745791435241699e-01 4.9080529808998108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2002 -1.2438809499144554e-03</internalNodes>\n          <leafValues>\n            4.1294258832931519e-01 5.2561181783676147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2003 6.1942739412188530e-03</internalNodes>\n          <leafValues>\n            5.0601941347122192e-01 7.3136532306671143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2004 -1.6607169527560472e-03</internalNodes>\n          <leafValues>\n            5.9796321392059326e-01 4.5963698625564575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2005 -2.7316259220242500e-02</internalNodes>\n          <leafValues>\n            4.1743651032447815e-01 5.3088420629501343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2006 -1.5845570014789701e-03</internalNodes>\n          <leafValues>\n            5.6158047914505005e-01 4.5194861292839050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2007 -1.5514739789068699e-03</internalNodes>\n          <leafValues>\n            4.0761870145797729e-01 5.3607851266860962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2008 3.8446558755822480e-04</internalNodes>\n          <leafValues>\n            4.3472939729690552e-01 5.4304420948028564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2009 -1.4672259800136089e-02</internalNodes>\n          <leafValues>\n            1.6593049466609955e-01 5.1460939645767212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2010 8.1608882173895836e-03</internalNodes>\n          <leafValues>\n            4.9618190526962280e-01 1.8847459554672241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2011 1.1121659772470593e-03</internalNodes>\n          <leafValues>\n            4.8682639002799988e-01 6.0938161611557007e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2012 -7.2603770531713963e-03</internalNodes>\n          <leafValues>\n            6.2843251228332520e-01 4.6903759241104126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2013 -2.4046430189628154e-04</internalNodes>\n          <leafValues>\n            5.5750000476837158e-01 4.0460440516471863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2014 -2.3348190006799996e-04</internalNodes>\n          <leafValues>\n            4.1157621145248413e-01 5.2528482675552368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2015 5.5736480280756950e-03</internalNodes>\n          <leafValues>\n            4.7300729155540466e-01 5.6901007890701294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2016 3.0623769387602806e-02</internalNodes>\n          <leafValues>\n            4.9718868732452393e-01 1.7400950193405151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2017 9.2074798885732889e-04</internalNodes>\n          <leafValues>\n            5.3721177577972412e-01 4.3548721075057983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2018 -4.3550739064812660e-05</internalNodes>\n          <leafValues>\n            5.3668838739395142e-01 4.3473169207572937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2019 -6.6452710889279842e-03</internalNodes>\n          <leafValues>\n            3.4355181455612183e-01 5.1605331897735596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2020 4.3221998959779739e-02</internalNodes>\n          <leafValues>\n            4.7667920589447021e-01 7.2936528921127319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2021 2.2331769578158855e-03</internalNodes>\n          <leafValues>\n            5.0293159484863281e-01 5.6331712007522583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2022 3.1829739455133677e-03</internalNodes>\n          <leafValues>\n            4.0160921216011047e-01 5.1921367645263672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2023 -1.8027749320026487e-04</internalNodes>\n          <leafValues>\n            4.0883159637451172e-01 5.4179197549819946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2024 -5.2934689447283745e-03</internalNodes>\n          <leafValues>\n            4.0756770968437195e-01 5.2435618638992310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2025 1.2750959722325206e-03</internalNodes>\n          <leafValues>\n            4.9132829904556274e-01 6.3870108127593994e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2026 4.3385322205722332e-03</internalNodes>\n          <leafValues>\n            5.0316721200942993e-01 2.9473468661308289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2027 8.5250744596123695e-03</internalNodes>\n          <leafValues>\n            4.9497890472412109e-01 6.3088691234588623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2028 -9.4266352243721485e-04</internalNodes>\n          <leafValues>\n            5.3283667564392090e-01 4.2856499552726746e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2029 1.3609660090878606e-03</internalNodes>\n          <leafValues>\n            4.9915251135826111e-01 5.9415012598037720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2030 4.4782509212382138e-04</internalNodes>\n          <leafValues>\n            4.5735040307044983e-01 5.8544808626174927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2031 1.3360050506889820e-03</internalNodes>\n          <leafValues>\n            4.6043589711189270e-01 5.8490520715713501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2032 -6.0967548051849008e-04</internalNodes>\n          <leafValues>\n            3.9693889021873474e-01 5.2294230461120605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2033 -2.3656780831515789e-03</internalNodes>\n          <leafValues>\n            5.8083200454711914e-01 4.8983570933341980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2034 1.0734340175986290e-03</internalNodes>\n          <leafValues>\n            4.3512108922004700e-01 5.4700392484664917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2035 2.1923359017819166e-03</internalNodes>\n          <leafValues>\n            5.3550601005554199e-01 3.8429039716720581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2036 5.4968618787825108e-03</internalNodes>\n          <leafValues>\n            5.0181388854980469e-01 2.8271919488906860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2037 -7.5368821620941162e-02</internalNodes>\n          <leafValues>\n            1.2250760197639465e-01 5.1488268375396729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2038 2.5134470313787460e-02</internalNodes>\n          <leafValues>\n            4.7317668795585632e-01 7.0254462957382202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2039 -2.9358599931583740e-05</internalNodes>\n          <leafValues>\n            5.4305320978164673e-01 4.6560868620872498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2040 -5.8355910005047917e-04</internalNodes>\n          <leafValues>\n            4.0310400724411011e-01 5.1901197433471680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2041 -2.6639450807124376e-03</internalNodes>\n          <leafValues>\n            4.3081268668174744e-01 5.1617711782455444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2042 -1.3804089976474643e-03</internalNodes>\n          <leafValues>\n            6.2198299169540405e-01 4.6955159306526184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2043 1.2313219485804439e-03</internalNodes>\n          <leafValues>\n            5.3793638944625854e-01 4.4258311390876770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2044 -1.4644179827882908e-05</internalNodes>\n          <leafValues>\n            5.2816402912139893e-01 4.2225030064582825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2045 -1.2818809598684311e-02</internalNodes>\n          <leafValues>\n            2.5820928812026978e-01 5.1799327135086060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2046 2.2852189838886261e-02</internalNodes>\n          <leafValues>\n            4.7786930203437805e-01 7.6092642545700073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2047 8.2305970136076212e-04</internalNodes>\n          <leafValues>\n            5.3409922122955322e-01 4.6717241406440735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2048 1.2770120054483414e-02</internalNodes>\n          <leafValues>\n            4.9657610058784485e-01 1.4723660051822662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2049 -5.0051510334014893e-02</internalNodes>\n          <leafValues>\n            6.4149940013885498e-01 5.0165921449661255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2050 1.5775270760059357e-02</internalNodes>\n          <leafValues>\n            4.5223200321197510e-01 5.6853622198104858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2051 -1.8501620739698410e-02</internalNodes>\n          <leafValues>\n            2.7647489309310913e-01 5.1379591226577759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2052 2.4626250378787518e-03</internalNodes>\n          <leafValues>\n            5.1419419050216675e-01 3.7954080104827881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2053 6.2916167080402374e-02</internalNodes>\n          <leafValues>\n            5.0606489181518555e-01 6.5804338455200195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2054 -2.1648500478477217e-05</internalNodes>\n          <leafValues>\n            5.1953881978988647e-01 4.0198868513107300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2055 2.1180990152060986e-03</internalNodes>\n          <leafValues>\n            4.9623650312423706e-01 5.9544587135314941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2056 -1.6634890809655190e-02</internalNodes>\n          <leafValues>\n            3.7579330801963806e-01 5.1754468679428101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2057 -2.8899470344185829e-03</internalNodes>\n          <leafValues>\n            6.6240137815475464e-01 5.0571787357330322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2058 7.6783262193202972e-02</internalNodes>\n          <leafValues>\n            4.7957968711853027e-01 8.0477148294448853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2059 3.9170677773654461e-03</internalNodes>\n          <leafValues>\n            4.9378821253776550e-01 5.7199418544769287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2060 -7.2670601308345795e-02</internalNodes>\n          <leafValues>\n            5.3894560784101486e-02 4.9439039826393127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2061 5.4039502143859863e-01</internalNodes>\n          <leafValues>\n            5.1297742128372192e-01 1.1433389782905579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2062 2.9510019812732935e-03</internalNodes>\n          <leafValues>\n            4.5283439755439758e-01 5.6985741853713989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2063 3.4508369863033295e-03</internalNodes>\n          <leafValues>\n            5.3577268123626709e-01 4.2187309265136719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2064 -4.2077939724549651e-04</internalNodes>\n          <leafValues>\n            5.9161728620529175e-01 4.6379259228706360e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2065 3.3051050268113613e-03</internalNodes>\n          <leafValues>\n            5.2733850479125977e-01 4.3820428848266602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2066 4.7735060798004270e-04</internalNodes>\n          <leafValues>\n            4.0465280413627625e-01 5.1818847656250000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2067 -2.5928510352969170e-02</internalNodes>\n          <leafValues>\n            7.4522358179092407e-01 5.0893861055374146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2068 -2.9729790985584259e-03</internalNodes>\n          <leafValues>\n            3.2954359054565430e-01 5.0587952136993408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2069 5.8508329093456268e-03</internalNodes>\n          <leafValues>\n            4.8571440577507019e-01 5.7930248975753784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2070 -4.5967519283294678e-02</internalNodes>\n          <leafValues>\n            4.3127310276031494e-01 5.3806531429290771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2071 1.5585960447788239e-01</internalNodes>\n          <leafValues>\n            5.1961702108383179e-01 1.6847139596939087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2072 1.5164829790592194e-02</internalNodes>\n          <leafValues>\n            4.7357571125030518e-01 6.7350268363952637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2073 -1.0604249546304345e-03</internalNodes>\n          <leafValues>\n            5.8229267597198486e-01 4.7757029533386230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2074 6.6476291976869106e-03</internalNodes>\n          <leafValues>\n            4.9991989135742188e-01 2.3195350170135498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2075 -1.2231130152940750e-02</internalNodes>\n          <leafValues>\n            4.7508931159973145e-01 5.2629822492599487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2076 5.6528882123529911e-03</internalNodes>\n          <leafValues>\n            5.0697678327560425e-01 3.5618188977241516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2077 1.2977829901501536e-03</internalNodes>\n          <leafValues>\n            4.8756939172744751e-01 5.6190627813339233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2078 1.0781589895486832e-02</internalNodes>\n          <leafValues>\n            4.7507700324058533e-01 6.7823082208633423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2079 2.8654779307544231e-03</internalNodes>\n          <leafValues>\n            5.3054618835449219e-01 4.2907360196113586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2080 2.8663428965955973e-03</internalNodes>\n          <leafValues>\n            4.5184791088104248e-01 5.5393511056900024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2081 -5.1983320154249668e-03</internalNodes>\n          <leafValues>\n            4.1491198539733887e-01 5.4341888427734375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2082 5.3739990107715130e-03</internalNodes>\n          <leafValues>\n            4.7178968787193298e-01 6.5076571702957153e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2083 -1.4641529880464077e-02</internalNodes>\n          <leafValues>\n            2.1721640229225159e-01 5.1617771387100220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2084 -1.5042580344015732e-05</internalNodes>\n          <leafValues>\n            5.3373837471008301e-01 4.2988368868827820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2085 -1.1875660129589960e-04</internalNodes>\n          <leafValues>\n            4.6045941114425659e-01 5.5824470520019531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2086 1.6995530575513840e-02</internalNodes>\n          <leafValues>\n            4.9458950757980347e-01 7.3880076408386230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2087 -3.5095941275358200e-02</internalNodes>\n          <leafValues>\n            7.0055091381072998e-01 4.9775910377502441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2088 2.4217350874096155e-03</internalNodes>\n          <leafValues>\n            4.4662651419639587e-01 5.4776942729949951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2089 -9.6340337768197060e-04</internalNodes>\n          <leafValues>\n            4.7140988707542419e-01 5.3133380413055420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2090 1.6391130338888615e-04</internalNodes>\n          <leafValues>\n            4.3315461277961731e-01 5.3422421216964722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2091 -2.1141460165381432e-02</internalNodes>\n          <leafValues>\n            2.6447001099586487e-01 5.2044987678527832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2092 8.7775202700868249e-04</internalNodes>\n          <leafValues>\n            5.2083498239517212e-01 4.1527429223060608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2093 -2.7943920344114304e-02</internalNodes>\n          <leafValues>\n            6.3441252708435059e-01 5.0188118219375610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2094 6.7297378554940224e-03</internalNodes>\n          <leafValues>\n            5.0504380464553833e-01 3.5008639097213745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2095 2.3281039670109749e-02</internalNodes>\n          <leafValues>\n            4.9663180112838745e-01 6.9686770439147949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2096 -1.1644979938864708e-02</internalNodes>\n          <leafValues>\n            3.3002600073814392e-01 5.0496298074722290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2097 1.5764309093356133e-02</internalNodes>\n          <leafValues>\n            4.9915981292724609e-01 7.3211538791656494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2098 -1.3611479662358761e-03</internalNodes>\n          <leafValues>\n            3.9117351174354553e-01 5.1606708765029907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2099 -8.1522337859496474e-04</internalNodes>\n          <leafValues>\n            5.6289112567901611e-01 4.9497190117835999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2100 -6.0066272271797061e-04</internalNodes>\n          <leafValues>\n            5.8535951375961304e-01 4.5505958795547485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2101 4.9715518252924085e-04</internalNodes>\n          <leafValues>\n            4.2714700102806091e-01 5.4435992240905762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2102 2.3475370835512877e-03</internalNodes>\n          <leafValues>\n            5.1431107521057129e-01 3.8876569271087646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2103 -8.9261569082736969e-03</internalNodes>\n          <leafValues>\n            6.0445022583007812e-01 4.9717208743095398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2104 -1.3919910416007042e-02</internalNodes>\n          <leafValues>\n            2.5831609964370728e-01 5.0003677606582642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2105 1.0209949687123299e-03</internalNodes>\n          <leafValues>\n            4.8573741316795349e-01 5.5603581666946411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2106 -2.7441629208624363e-03</internalNodes>\n          <leafValues>\n            5.9368848800659180e-01 4.6457770466804504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2107 -1.6200130805373192e-02</internalNodes>\n          <leafValues>\n            3.1630149483680725e-01 5.1934951543807983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2108 4.3331980705261230e-03</internalNodes>\n          <leafValues>\n            5.0612241029739380e-01 3.4588789939880371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2109 5.8497930876910686e-04</internalNodes>\n          <leafValues>\n            4.7790178656578064e-01 5.8701777458190918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2110 -2.2466450463980436e-03</internalNodes>\n          <leafValues>\n            4.2978510260581970e-01 5.3747731447219849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2111 2.3146099410951138e-03</internalNodes>\n          <leafValues>\n            5.4386717081069946e-01 4.6409699320793152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2112 8.7679121643304825e-03</internalNodes>\n          <leafValues>\n            4.7268930077552795e-01 6.7717897891998291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2113 -2.2448020172305405e-04</internalNodes>\n          <leafValues>\n            4.2291730642318726e-01 5.4280489683151245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2114 -7.4336021207273006e-03</internalNodes>\n          <leafValues>\n            6.0988807678222656e-01 4.6836739778518677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2115 -2.3189240600913763e-03</internalNodes>\n          <leafValues>\n            5.6894367933273315e-01 4.4242420792579651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2116 -2.1042178850620985e-03</internalNodes>\n          <leafValues>\n            3.7622210383415222e-01 5.1870870590209961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2117 4.6034841216169298e-04</internalNodes>\n          <leafValues>\n            4.6994051337242126e-01 5.7712072134017944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2118 1.0547629790380597e-03</internalNodes>\n          <leafValues>\n            4.4652169942855835e-01 5.6017017364501953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2119 8.7148818420246243e-04</internalNodes>\n          <leafValues>\n            5.4498052597045898e-01 3.9147090911865234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2120 3.3364820410497487e-04</internalNodes>\n          <leafValues>\n            4.5640090107917786e-01 5.6457388401031494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2121 -1.4853250468149781e-03</internalNodes>\n          <leafValues>\n            5.7473778724670410e-01 4.6927788853645325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2122 3.0251620337367058e-03</internalNodes>\n          <leafValues>\n            5.1661968231201172e-01 3.7628141045570374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2123 5.0280741415917873e-03</internalNodes>\n          <leafValues>\n            5.0021117925643921e-01 6.1515271663665771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2124 -5.8164511574432254e-04</internalNodes>\n          <leafValues>\n            5.3945982456207275e-01 4.3907511234283447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2125 4.5141529291868210e-02</internalNodes>\n          <leafValues>\n            5.1883268356323242e-01 2.0630359649658203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2126 -1.0795620037242770e-03</internalNodes>\n          <leafValues>\n            3.9046850800514221e-01 5.1379072666168213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2127 1.5995999274309725e-04</internalNodes>\n          <leafValues>\n            4.8953229188919067e-01 5.4275041818618774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2128 -1.9359270110726357e-02</internalNodes>\n          <leafValues>\n            6.9752287864685059e-01 4.7735071182250977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2129 2.0725509524345398e-01</internalNodes>\n          <leafValues>\n            5.2336359024047852e-01 3.0349919199943542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2130 -4.1953290929086506e-04</internalNodes>\n          <leafValues>\n            5.4193967580795288e-01 4.4601860642433167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2131 2.2582069505006075e-03</internalNodes>\n          <leafValues>\n            4.8157641291618347e-01 6.0274088382720947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2132 -6.7811207845807076e-03</internalNodes>\n          <leafValues>\n            3.9802789688110352e-01 5.1833057403564453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2133 1.1154309846460819e-02</internalNodes>\n          <leafValues>\n            5.4312318563461304e-01 4.1887599229812622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2134 4.3162431567907333e-02</internalNodes>\n          <leafValues>\n            4.7382280230522156e-01 6.5229612588882446e-01</leafValues></_></weakClassifiers></_></stages>\n  <features>\n    <_>\n      <rects>\n        <_>\n          3 7 14 4 -1.</_>\n        <_>\n          3 9 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          7 2 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 9 -1.</_>\n        <_>\n          1 10 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 6 -1.</_>\n        <_>\n          5 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 3 -1.</_>\n        <_>\n          9 5 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 9 -1.</_>\n        <_>\n          4 3 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 10 8 -1.</_>\n        <_>\n          6 13 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 8 -1.</_>\n        <_>\n          3 10 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 10 -1.</_>\n        <_>\n          14 1 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 5 12 -1.</_>\n        <_>\n          7 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 3 -1.</_>\n        <_>\n          7 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 17 2 -1.</_>\n        <_>\n          1 9 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 2 -1.</_>\n        <_>\n          16 7 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 2 2 -1.</_>\n        <_>\n          5 18 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 12 -1.</_>\n        <_>\n          14 2 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 12 -1.</_>\n        <_>\n          4 0 2 6 2.</_>\n        <_>\n          6 6 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 8 -1.</_>\n        <_>\n          8 11 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 2 -1.</_>\n        <_>\n          5 8 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 3 -1.</_>\n        <_>\n          15 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 9 -1.</_>\n        <_>\n          5 6 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 12 -1.</_>\n        <_>\n          3 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 5 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 8 -1.</_>\n        <_>\n          5 10 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 9 -1.</_>\n        <_>\n          8 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 8 -1.</_>\n        <_>\n          9 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 17 -1.</_>\n        <_>\n          9 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 4 -1.</_>\n        <_>\n          11 0 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 4 -1.</_>\n        <_>\n          7 1 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 16 -1.</_>\n        <_>\n          14 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 8 -1.</_>\n        <_>\n          0 5 9 4 2.</_>\n        <_>\n          9 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 10 4 -1.</_>\n        <_>\n          13 15 5 2 2.</_>\n        <_>\n          8 17 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 4 8 -1.</_>\n        <_>\n          3 1 2 4 2.</_>\n        <_>\n          5 5 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 10 -1.</_>\n        <_>\n          10 6 7 5 2.</_>\n        <_>\n          3 11 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 16 -1.</_>\n        <_>\n          4 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 20 2 -1.</_>\n        <_>\n          0 19 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 9 6 -1.</_>\n        <_>\n          0 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 4 -1.</_>\n        <_>\n          5 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 16 -1.</_>\n        <_>\n          9 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 8 -1.</_>\n        <_>\n          3 10 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 8 2 -1.</_>\n        <_>\n          12 3 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 12 -1.</_>\n        <_>\n          8 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 6 -1.</_>\n        <_>\n          15 3 4 3 2.</_>\n        <_>\n          11 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 19 -1.</_>\n        <_>\n          9 1 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 4 -1.</_>\n        <_>\n          11 0 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 9 3 -1.</_>\n        <_>\n          6 1 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 10 4 -1.</_>\n        <_>\n          13 15 5 2 2.</_>\n        <_>\n          8 17 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 10 -1.</_>\n        <_>\n          3 3 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 15 15 -1.</_>\n        <_>\n          3 9 15 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 6 -1.</_>\n        <_>\n          6 7 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 10 -1.</_>\n        <_>\n          10 4 6 5 2.</_>\n        <_>\n          4 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 4 -1.</_>\n        <_>\n          8 4 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 2 -1.</_>\n        <_>\n          15 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 2 2 -1.</_>\n        <_>\n          3 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 1 3 -1.</_>\n        <_>\n          16 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 6 4 -1.</_>\n        <_>\n          3 15 3 2 2.</_>\n        <_>\n          6 17 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 2 -1.</_>\n        <_>\n          6 8 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 1 3 -1.</_>\n        <_>\n          3 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 2 -1.</_>\n        <_>\n          6 1 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 2 -1.</_>\n        <_>\n          7 16 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 4 6 -1.</_>\n        <_>\n          0 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 2 -1.</_>\n        <_>\n          8 12 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 1 9 -1.</_>\n        <_>\n          6 6 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 3 2 -1.</_>\n        <_>\n          11 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 4 -1.</_>\n        <_>\n          9 6 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 3 2 -1.</_>\n        <_>\n          8 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 3 3 -1.</_>\n        <_>\n          11 17 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 2 -1.</_>\n        <_>\n          8 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 2 -1.</_>\n        <_>\n          11 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 13 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 4 -1.</_>\n        <_>\n          10 10 9 2 2.</_>\n        <_>\n          1 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 3 3 -1.</_>\n        <_>\n          0 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 6 -1.</_>\n        <_>\n          11 1 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 6 -1.</_>\n        <_>\n          9 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 9 -1.</_>\n        <_>\n          1 3 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 2 6 -1.</_>\n        <_>\n          12 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 19 8 -1.</_>\n        <_>\n          0 9 19 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 1 -1.</_>\n        <_>\n          7 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 1 -1.</_>\n        <_>\n          13 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 6 -1.</_>\n        <_>\n          5 13 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 1 -1.</_>\n        <_>\n          13 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 6 -1.</_>\n        <_>\n          4 6 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 6 -1.</_>\n        <_>\n          15 14 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 2 -1.</_>\n        <_>\n          10 3 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 1 -1.</_>\n        <_>\n          10 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 4 14 -1.</_>\n        <_>\n          3 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 4 -1.</_>\n        <_>\n          11 0 2 2 2.</_>\n        <_>\n          9 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 1 14 -1.</_>\n        <_>\n          7 12 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 0 1 4 -1.</_>\n        <_>\n          19 2 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 4 -1.</_>\n        <_>\n          8 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 3 2 -1.</_>\n        <_>\n          10 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 2 -1.</_>\n        <_>\n          9 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 6 -1.</_>\n        <_>\n          3 14 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 2 12 -1.</_>\n        <_>\n          10 12 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 3 2 -1.</_>\n        <_>\n          8 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 2 -1.</_>\n        <_>\n          11 0 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 3 -1.</_>\n        <_>\n          5 12 9 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 2 -1.</_>\n        <_>\n          11 0 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 5 -1.</_>\n        <_>\n          7 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 4 -1.</_>\n        <_>\n          10 0 2 2 2.</_>\n        <_>\n          8 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 1 3 -1.</_>\n        <_>\n          3 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 5 3 -1.</_>\n        <_>\n          8 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 12 -1.</_>\n        <_>\n          5 4 5 6 2.</_>\n        <_>\n          10 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 12 -1.</_>\n        <_>\n          9 10 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 12 14 -1.</_>\n        <_>\n          2 2 6 7 2.</_>\n        <_>\n          8 9 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 4 -1.</_>\n        <_>\n          7 6 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 11 8 -1.</_>\n        <_>\n          4 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 4 -1.</_>\n        <_>\n          3 12 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 2 -1.</_>\n        <_>\n          0 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 2 -1.</_>\n        <_>\n          9 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 15 -1.</_>\n        <_>\n          10 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 8 6 -1.</_>\n        <_>\n          3 14 4 3 2.</_>\n        <_>\n          7 17 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 2 2 -1.</_>\n        <_>\n          14 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 6 -1.</_>\n        <_>\n          1 13 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 3 -1.</_>\n        <_>\n          15 4 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 14 6 -1.</_>\n        <_>\n          2 9 7 3 2.</_>\n        <_>\n          9 12 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 4 -1.</_>\n        <_>\n          5 9 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          6 9 4 4 2.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 2 -1.</_>\n        <_>\n          14 2 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 2 -1.</_>\n        <_>\n          3 4 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 8 -1.</_>\n        <_>\n          11 14 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 3 -1.</_>\n        <_>\n          0 1 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 8 -1.</_>\n        <_>\n          11 5 9 4 2.</_>\n        <_>\n          2 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 6 -1.</_>\n        <_>\n          6 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 1 1 3 -1.</_>\n        <_>\n          19 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 6 -1.</_>\n        <_>\n          9 6 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 1 1 3 -1.</_>\n        <_>\n          19 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 3 -1.</_>\n        <_>\n          3 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 8 12 -1.</_>\n        <_>\n          12 4 4 6 2.</_>\n        <_>\n          8 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 3 -1.</_>\n        <_>\n          7 2 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 9 10 -1.</_>\n        <_>\n          6 6 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 12 -1.</_>\n        <_>\n          2 4 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 5 3 -1.</_>\n        <_>\n          7 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 3 3 -1.</_>\n        <_>\n          15 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 3 -1.</_>\n        <_>\n          6 15 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 3 3 -1.</_>\n        <_>\n          15 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 3 3 -1.</_>\n        <_>\n          2 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 12 -1.</_>\n        <_>\n          10 7 6 6 2.</_>\n        <_>\n          4 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 6 -1.</_>\n        <_>\n          10 7 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 5 2 -1.</_>\n        <_>\n          8 10 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 8 -1.</_>\n        <_>\n          9 10 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 6 -1.</_>\n        <_>\n          8 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 3 -1.</_>\n        <_>\n          12 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 1 -1.</_>\n        <_>\n          7 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 7 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 9 -1.</_>\n        <_>\n          7 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 1 -1.</_>\n        <_>\n          9 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 8 -1.</_>\n        <_>\n          2 12 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 2 6 -1.</_>\n        <_>\n          14 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 15 -1.</_>\n        <_>\n          1 10 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          10 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 7 14 -1.</_>\n        <_>\n          6 13 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 6 -1.</_>\n        <_>\n          13 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 4 -1.</_>\n        <_>\n          6 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 10 -1.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 4 6 -1.</_>\n        <_>\n          3 9 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 6 10 -1.</_>\n        <_>\n          15 3 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 10 -1.</_>\n        <_>\n          5 7 4 5 2.</_>\n        <_>\n          9 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 12 -1.</_>\n        <_>\n          10 4 6 6 2.</_>\n        <_>\n          4 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 9 -1.</_>\n        <_>\n          3 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 2 5 -1.</_>\n        <_>\n          11 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 5 -1.</_>\n        <_>\n          8 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 3 -1.</_>\n        <_>\n          10 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 2 -1.</_>\n        <_>\n          8 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 6 -1.</_>\n        <_>\n          4 14 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 5 9 -1.</_>\n        <_>\n          11 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 2 -1.</_>\n        <_>\n          6 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 5 -1.</_>\n        <_>\n          12 0 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          8 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 1 9 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 8 -1.</_>\n        <_>\n          3 2 2 4 2.</_>\n        <_>\n          5 6 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 4 6 -1.</_>\n        <_>\n          13 14 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 4 6 -1.</_>\n        <_>\n          3 14 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 4 -1.</_>\n        <_>\n          13 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 4 3 -1.</_>\n        <_>\n          4 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 11 8 -1.</_>\n        <_>\n          7 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 4 -1.</_>\n        <_>\n          8 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 1 -1.</_>\n        <_>\n          11 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 3 -1.</_>\n        <_>\n          5 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 6 -1.</_>\n        <_>\n          10 9 10 3 2.</_>\n        <_>\n          0 12 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 5 -1.</_>\n        <_>\n          9 6 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 1 3 -1.</_>\n        <_>\n          11 1 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 4 2 -1.</_>\n        <_>\n          4 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 4 3 -1.</_>\n        <_>\n          12 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 4 -1.</_>\n        <_>\n          7 0 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 8 -1.</_>\n        <_>\n          10 7 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 3 6 -1.</_>\n        <_>\n          0 7 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 4 -1.</_>\n        <_>\n          13 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 4 -1.</_>\n        <_>\n          4 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 8 -1.</_>\n        <_>\n          11 9 6 4 2.</_>\n        <_>\n          5 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 3 -1.</_>\n        <_>\n          9 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 2 4 -1.</_>\n        <_>\n          10 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 1 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 6 6 -1.</_>\n        <_>\n          15 3 3 3 2.</_>\n        <_>\n          12 6 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 6 -1.</_>\n        <_>\n          0 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 8 14 -1.</_>\n        <_>\n          12 3 4 7 2.</_>\n        <_>\n          8 10 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 7 15 -1.</_>\n        <_>\n          4 9 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 6 8 -1.</_>\n        <_>\n          15 2 3 4 2.</_>\n        <_>\n          12 6 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 6 8 -1.</_>\n        <_>\n          2 2 3 4 2.</_>\n        <_>\n          5 6 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 7 -1.</_>\n        <_>\n          8 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 8 14 -1.</_>\n        <_>\n          4 3 4 7 2.</_>\n        <_>\n          8 10 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 6 -1.</_>\n        <_>\n          18 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 6 -1.</_>\n        <_>\n          18 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 6 -1.</_>\n        <_>\n          0 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 6 -1.</_>\n        <_>\n          1 7 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 7 -1.</_>\n        <_>\n          3 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 14 -1.</_>\n        <_>\n          7 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 13 10 -1.</_>\n        <_>\n          3 12 13 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 2 2 -1.</_>\n        <_>\n          11 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 4 -1.</_>\n        <_>\n          2 11 8 2 2.</_>\n        <_>\n          10 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 9 -1.</_>\n        <_>\n          6 13 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 1 6 -1.</_>\n        <_>\n          14 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 1 -1.</_>\n        <_>\n          7 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 5 -1.</_>\n        <_>\n          8 8 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 5 4 -1.</_>\n        <_>\n          1 8 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 17 6 -1.</_>\n        <_>\n          3 3 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 2 -1.</_>\n        <_>\n          10 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 2 -1.</_>\n        <_>\n          10 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          9 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          8 10 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 4 -1.</_>\n        <_>\n          9 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          10 7 6 3 2.</_>\n        <_>\n          4 10 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          9 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 8 -1.</_>\n        <_>\n          8 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 6 -1.</_>\n        <_>\n          11 0 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 8 -1.</_>\n        <_>\n          8 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 13 -1.</_>\n        <_>\n          14 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 3 6 -1.</_>\n        <_>\n          8 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 13 -1.</_>\n        <_>\n          14 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 4 -1.</_>\n        <_>\n          0 7 5 2 2.</_>\n        <_>\n          5 9 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 13 -1.</_>\n        <_>\n          14 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 13 -1.</_>\n        <_>\n          3 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 1 -1.</_>\n        <_>\n          9 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 1 -1.</_>\n        <_>\n          9 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 4 4 -1.</_>\n        <_>\n          12 16 2 2 2.</_>\n        <_>\n          10 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 3 -1.</_>\n        <_>\n          10 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 2 -1.</_>\n        <_>\n          8 5 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 6 -1.</_>\n        <_>\n          6 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 12 -1.</_>\n        <_>\n          9 11 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 8 -1.</_>\n        <_>\n          4 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 8 5 -1.</_>\n        <_>\n          12 2 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 3 -1.</_>\n        <_>\n          0 9 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 5 -1.</_>\n        <_>\n          4 2 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 4 -1.</_>\n        <_>\n          13 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 1 -1.</_>\n        <_>\n          12 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 3 -1.</_>\n        <_>\n          7 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 6 -1.</_>\n        <_>\n          11 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 2 6 -1.</_>\n        <_>\n          12 16 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 3 3 -1.</_>\n        <_>\n          8 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 5 -1.</_>\n        <_>\n          12 0 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 9 -1.</_>\n        <_>\n          8 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 1 -1.</_>\n        <_>\n          12 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          8 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 4 2 -1.</_>\n        <_>\n          5 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 6 -1.</_>\n        <_>\n          2 3 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 2 -1.</_>\n        <_>\n          7 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 6 2 -1.</_>\n        <_>\n          16 8 3 1 2.</_>\n        <_>\n          13 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 6 -1.</_>\n        <_>\n          6 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          10 13 10 2 2.</_>\n        <_>\n          0 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 5 -1.</_>\n        <_>\n          9 7 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 2 -1.</_>\n        <_>\n          11 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 2 -1.</_>\n        <_>\n          1 8 3 1 2.</_>\n        <_>\n          4 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          10 2 10 1 2.</_>\n        <_>\n          0 3 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 5 3 -1.</_>\n        <_>\n          7 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          10 13 3 3 2.</_>\n        <_>\n          7 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 1 6 -1.</_>\n        <_>\n          16 13 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 1 6 -1.</_>\n        <_>\n          3 13 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 12 -1.</_>\n        <_>\n          11 4 7 6 2.</_>\n        <_>\n          4 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 3 -1.</_>\n        <_>\n          6 7 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 4 10 -1.</_>\n        <_>\n          3 1 2 5 2.</_>\n        <_>\n          5 6 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 2 -1.</_>\n        <_>\n          5 7 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 3 -1.</_>\n        <_>\n          15 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 4 -1.</_>\n        <_>\n          8 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 1 12 -1.</_>\n        <_>\n          13 10 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          4 5 6 6 2.</_>\n        <_>\n          10 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 7 3 -1.</_>\n        <_>\n          7 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 3 -1.</_>\n        <_>\n          3 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          10 2 7 1 2.</_>\n        <_>\n          3 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 3 10 -1.</_>\n        <_>\n          1 1 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 5 -1.</_>\n        <_>\n          11 0 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 2 -1.</_>\n        <_>\n          8 7 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          7 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 3 -1.</_>\n        <_>\n          7 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 6 -1.</_>\n        <_>\n          16 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 6 -1.</_>\n        <_>\n          6 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 17 10 -1.</_>\n        <_>\n          0 9 17 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 15 16 -1.</_>\n        <_>\n          3 12 15 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 4 -1.</_>\n        <_>\n          7 17 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 9 -1.</_>\n        <_>\n          15 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 2 -1.</_>\n        <_>\n          2 4 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 7 9 -1.</_>\n        <_>\n          13 9 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          10 2 10 3 2.</_>\n        <_>\n          0 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 3 4 -1.</_>\n        <_>\n          13 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 3 4 -1.</_>\n        <_>\n          4 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 3 -1.</_>\n        <_>\n          9 5 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 8 -1.</_>\n        <_>\n          7 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 6 -1.</_>\n        <_>\n          0 14 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 4 6 -1.</_>\n        <_>\n          4 13 2 3 2.</_>\n        <_>\n          6 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          10 0 4 6 2.</_>\n        <_>\n          6 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 2 -1.</_>\n        <_>\n          2 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 1 2 -1.</_>\n        <_>\n          3 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 1 -1.</_>\n        <_>\n          8 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 7 3 6 -1.</_>\n        <_>\n          17 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 2 -1.</_>\n        <_>\n          8 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 5 3 -1.</_>\n        <_>\n          11 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 5 3 -1.</_>\n        <_>\n          4 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 3 1 2 -1.</_>\n        <_>\n          19 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 3 -1.</_>\n        <_>\n          5 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 7 3 6 -1.</_>\n        <_>\n          17 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 3 6 -1.</_>\n        <_>\n          0 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 6 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 2 -1.</_>\n        <_>\n          12 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 2 -1.</_>\n        <_>\n          6 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 6 -1.</_>\n        <_>\n          8 3 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 3 -1.</_>\n        <_>\n          6 7 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 15 -1.</_>\n        <_>\n          16 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 3 2 -1.</_>\n        <_>\n          1 11 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 1 10 -1.</_>\n        <_>\n          14 9 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 12 -1.</_>\n        <_>\n          2 1 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 2 -1.</_>\n        <_>\n          11 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 2 -1.</_>\n        <_>\n          7 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 5 -1.</_>\n        <_>\n          8 8 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          3 0 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 2 -1.</_>\n        <_>\n          12 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 8 -1.</_>\n        <_>\n          8 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 5 3 -1.</_>\n        <_>\n          8 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 4 3 -1.</_>\n        <_>\n          7 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 2 -1.</_>\n        <_>\n          12 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 15 7 2 2.</_>\n        <_>\n          10 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 4 -1.</_>\n        <_>\n          10 2 8 2 2.</_>\n        <_>\n          2 4 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          3 8 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 2 -1.</_>\n        <_>\n          5 7 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 5 -1.</_>\n        <_>\n          10 7 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 2 -1.</_>\n        <_>\n          0 14 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 4 -1.</_>\n        <_>\n          1 7 3 2 2.</_>\n        <_>\n          4 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 1 12 -1.</_>\n        <_>\n          12 12 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          10 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 3 -1.</_>\n        <_>\n          14 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 3 -1.</_>\n        <_>\n          4 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 3 -1.</_>\n        <_>\n          8 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 2 4 -1.</_>\n        <_>\n          5 2 1 2 2.</_>\n        <_>\n          6 4 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 11 3 -1.</_>\n        <_>\n          5 6 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 5 -1.</_>\n        <_>\n          12 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 1 12 -1.</_>\n        <_>\n          7 12 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 3 -1.</_>\n        <_>\n          4 2 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          12 5 3 5 2.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 12 -1.</_>\n        <_>\n          5 5 4 6 2.</_>\n        <_>\n          9 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 2 -1.</_>\n        <_>\n          4 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 12 2 -1.</_>\n        <_>\n          8 18 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 4 16 -1.</_>\n        <_>\n          7 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 8 -1.</_>\n        <_>\n          7 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 1 -1.</_>\n        <_>\n          7 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 2 4 -1.</_>\n        <_>\n          11 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 8 -1.</_>\n        <_>\n          3 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 12 -1.</_>\n        <_>\n          7 7 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 2 -1.</_>\n        <_>\n          6 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 6 -1.</_>\n        <_>\n          16 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 2 -1.</_>\n        <_>\n          3 4 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 4 2 -1.</_>\n        <_>\n          2 17 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          10 13 3 3 2.</_>\n        <_>\n          7 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 4 -1.</_>\n        <_>\n          8 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 6 -1.</_>\n        <_>\n          0 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 3 -1.</_>\n        <_>\n          9 6 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 14 -1.</_>\n        <_>\n          9 6 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 4 -1.</_>\n        <_>\n          6 14 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 7 6 -1.</_>\n        <_>\n          10 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 2 -1.</_>\n        <_>\n          1 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 1 -1.</_>\n        <_>\n          6 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 10 -1.</_>\n        <_>\n          0 8 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 15 1 2 -1.</_>\n        <_>\n          19 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 8 -1.</_>\n        <_>\n          2 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 4 -1.</_>\n        <_>\n          11 1 9 2 2.</_>\n        <_>\n          2 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 1 2 -1.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 6 -1.</_>\n        <_>\n          10 2 5 3 2.</_>\n        <_>\n          5 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 4 -1.</_>\n        <_>\n          10 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 8 -1.</_>\n        <_>\n          8 5 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 4 3 -1.</_>\n        <_>\n          15 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 1 -1.</_>\n        <_>\n          9 18 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 4 3 -1.</_>\n        <_>\n          9 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 4 3 -1.</_>\n        <_>\n          7 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 15 1 2 -1.</_>\n        <_>\n          19 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 8 4 -1.</_>\n        <_>\n          0 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 4 -1.</_>\n        <_>\n          11 3 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          3 16 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 6 -1.</_>\n        <_>\n          6 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 14 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 3 4 -1.</_>\n        <_>\n          4 10 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 2 -1.</_>\n        <_>\n          13 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 4 -1.</_>\n        <_>\n          7 3 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 2 3 -1.</_>\n        <_>\n          2 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 12 -1.</_>\n        <_>\n          9 12 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 4 6 -1.</_>\n        <_>\n          3 14 2 3 2.</_>\n        <_>\n          5 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 15 2 2 -1.</_>\n        <_>\n          16 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 2 2 -1.</_>\n        <_>\n          2 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 3 -1.</_>\n        <_>\n          8 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 1 -1.</_>\n        <_>\n          10 7 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 3 -1.</_>\n        <_>\n          7 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 2 -1.</_>\n        <_>\n          9 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 5 -1.</_>\n        <_>\n          12 1 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 6 -1.</_>\n        <_>\n          7 2 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 6 5 -1.</_>\n        <_>\n          14 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 2 -1.</_>\n        <_>\n          9 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 1 3 -1.</_>\n        <_>\n          10 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 2 -1.</_>\n        <_>\n          6 6 1 1 2.</_>\n        <_>\n          7 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 4 -1.</_>\n        <_>\n          11 11 9 2 2.</_>\n        <_>\n          2 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 2 -1.</_>\n        <_>\n          6 6 1 1 2.</_>\n        <_>\n          7 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 2 -1.</_>\n        <_>\n          0 16 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 2 3 -1.</_>\n        <_>\n          4 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 3 -1.</_>\n        <_>\n          8 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 3 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 4 -1.</_>\n        <_>\n          12 7 3 2 2.</_>\n        <_>\n          9 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 6 -1.</_>\n        <_>\n          4 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 4 4 -1.</_>\n        <_>\n          13 15 2 2 2.</_>\n        <_>\n          11 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 2 -1.</_>\n        <_>\n          7 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 3 -1.</_>\n        <_>\n          13 1 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 4 4 -1.</_>\n        <_>\n          5 15 2 2 2.</_>\n        <_>\n          7 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 7 -1.</_>\n        <_>\n          9 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 3 -1.</_>\n        <_>\n          9 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 5 3 -1.</_>\n        <_>\n          7 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 3 -1.</_>\n        <_>\n          11 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 10 -1.</_>\n        <_>\n          6 14 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 6 2 -1.</_>\n        <_>\n          10 11 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 6 2 -1.</_>\n        <_>\n          7 11 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 1 -1.</_>\n        <_>\n          11 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 2 -1.</_>\n        <_>\n          7 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 5 -1.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 2 12 -1.</_>\n        <_>\n          7 11 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 3 -1.</_>\n        <_>\n          5 1 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 6 -1.</_>\n        <_>\n          18 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 6 -1.</_>\n        <_>\n          0 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 4 3 -1.</_>\n        <_>\n          7 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 6 -1.</_>\n        <_>\n          18 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 6 -1.</_>\n        <_>\n          0 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 6 3 -1.</_>\n        <_>\n          8 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 4 -1.</_>\n        <_>\n          8 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 6 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 2 -1.</_>\n        <_>\n          7 4 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          10 14 7 2 2.</_>\n        <_>\n          3 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 6 2 -1.</_>\n        <_>\n          6 15 3 1 2.</_>\n        <_>\n          9 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 2 -1.</_>\n        <_>\n          14 16 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 12 8 -1.</_>\n        <_>\n          2 16 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 7 2 -1.</_>\n        <_>\n          7 8 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 2 -1.</_>\n        <_>\n          0 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 5 -1.</_>\n        <_>\n          9 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 8 -1.</_>\n        <_>\n          8 5 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 4 -1.</_>\n        <_>\n          10 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 3 2 -1.</_>\n        <_>\n          4 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 3 -1.</_>\n        <_>\n          11 4 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 3 -1.</_>\n        <_>\n          7 4 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 5 2 -1.</_>\n        <_>\n          14 12 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 9 -1.</_>\n        <_>\n          3 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 13 -1.</_>\n        <_>\n          14 6 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 8 -1.</_>\n        <_>\n          3 6 7 4 2.</_>\n        <_>\n          10 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 11 -1.</_>\n        <_>\n          16 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 12 12 -1.</_>\n        <_>\n          3 4 6 6 2.</_>\n        <_>\n          9 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 5 3 -1.</_>\n        <_>\n          11 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 4 2 -1.</_>\n        <_>\n          4 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 2 -1.</_>\n        <_>\n          9 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 3 -1.</_>\n        <_>\n          5 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 3 -1.</_>\n        <_>\n          11 0 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 2 -1.</_>\n        <_>\n          5 6 3 1 2.</_>\n        <_>\n          8 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 4 3 -1.</_>\n        <_>\n          12 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 3 2 -1.</_>\n        <_>\n          3 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 2 -1.</_>\n        <_>\n          9 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 5 3 -1.</_>\n        <_>\n          4 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 4 3 -1.</_>\n        <_>\n          12 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 2 -1.</_>\n        <_>\n          9 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          8 10 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 6 3 -1.</_>\n        <_>\n          2 13 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 3 2 -1.</_>\n        <_>\n          16 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 18 2 -1.</_>\n        <_>\n          7 18 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 3 2 -1.</_>\n        <_>\n          16 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 3 2 -1.</_>\n        <_>\n          1 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 8 3 -1.</_>\n        <_>\n          5 15 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 14 -1.</_>\n        <_>\n          10 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 14 -1.</_>\n        <_>\n          8 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 3 -1.</_>\n        <_>\n          13 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 6 1 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          9 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 3 -1.</_>\n        <_>\n          8 0 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 18 -1.</_>\n        <_>\n          4 9 16 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 14 -1.</_>\n        <_>\n          1 8 16 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 15 4 -1.</_>\n        <_>\n          8 9 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 7 3 -1.</_>\n        <_>\n          6 13 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 2 3 -1.</_>\n        <_>\n          14 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 14 -1.</_>\n        <_>\n          2 3 8 7 2.</_>\n        <_>\n          10 10 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 2 3 -1.</_>\n        <_>\n          4 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 3 -1.</_>\n        <_>\n          1 2 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 11 -1.</_>\n        <_>\n          16 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 1 -1.</_>\n        <_>\n          9 0 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 7 -1.</_>\n        <_>\n          17 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 3 7 -1.</_>\n        <_>\n          2 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 12 -1.</_>\n        <_>\n          7 12 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 11 -1.</_>\n        <_>\n          2 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 20 -1.</_>\n        <_>\n          14 0 3 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 1 2 -1.</_>\n        <_>\n          0 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 8 -1.</_>\n        <_>\n          10 5 5 4 2.</_>\n        <_>\n          5 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 7 6 2 2.</_>\n        <_>\n          10 9 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 4 -1.</_>\n        <_>\n          5 1 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 4 -1.</_>\n        <_>\n          12 7 3 2 2.</_>\n        <_>\n          9 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 6 -1.</_>\n        <_>\n          5 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 6 4 -1.</_>\n        <_>\n          12 16 3 2 2.</_>\n        <_>\n          9 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 12 -1.</_>\n        <_>\n          9 10 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 18 -1.</_>\n        <_>\n          9 1 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 2 -1.</_>\n        <_>\n          8 12 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 2 -1.</_>\n        <_>\n          8 9 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 6 -1.</_>\n        <_>\n          9 0 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 3 2 -1.</_>\n        <_>\n          11 19 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 17 4 -1.</_>\n        <_>\n          1 3 17 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 17 -1.</_>\n        <_>\n          12 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 1 -1.</_>\n        <_>\n          6 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 3 -1.</_>\n        <_>\n          18 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 4 -1.</_>\n        <_>\n          8 6 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 10 -1.</_>\n        <_>\n          4 10 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 4 2 -1.</_>\n        <_>\n          7 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 6 -1.</_>\n        <_>\n          17 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 6 -1.</_>\n        <_>\n          9 7 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 6 -1.</_>\n        <_>\n          17 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 4 -1.</_>\n        <_>\n          9 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 3 -1.</_>\n        <_>\n          0 13 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 3 -1.</_>\n        <_>\n          3 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 7 -1.</_>\n        <_>\n          9 6 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 1 3 -1.</_>\n        <_>\n          14 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 14 -1.</_>\n        <_>\n          3 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 5 6 -1.</_>\n        <_>\n          12 16 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 5 6 -1.</_>\n        <_>\n          4 16 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 2 -1.</_>\n        <_>\n          12 10 1 1 2.</_>\n        <_>\n          11 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 14 -1.</_>\n        <_>\n          6 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 2 3 -1.</_>\n        <_>\n          10 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 3 -1.</_>\n        <_>\n          0 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 12 6 -1.</_>\n        <_>\n          5 14 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 9 -1.</_>\n        <_>\n          6 14 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 2 -1.</_>\n        <_>\n          12 10 1 1 2.</_>\n        <_>\n          11 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 1 3 -1.</_>\n        <_>\n          5 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 13 3 -1.</_>\n        <_>\n          4 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 6 -1.</_>\n        <_>\n          6 7 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          8 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 3 -1.</_>\n        <_>\n          8 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 3 -1.</_>\n        <_>\n          15 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 5 3 -1.</_>\n        <_>\n          1 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 12 -1.</_>\n        <_>\n          7 7 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 10 -1.</_>\n        <_>\n          0 1 3 5 2.</_>\n        <_>\n          3 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 3 -1.</_>\n        <_>\n          16 2 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 3 5 -1.</_>\n        <_>\n          13 2 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 6 -1.</_>\n        <_>\n          0 5 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 1 -1.</_>\n        <_>\n          9 18 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 2 -1.</_>\n        <_>\n          12 10 1 1 2.</_>\n        <_>\n          11 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 2 2 -1.</_>\n        <_>\n          7 10 1 1 2.</_>\n        <_>\n          8 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 4 -1.</_>\n        <_>\n          11 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 8 -1.</_>\n        <_>\n          9 12 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 3 -1.</_>\n        <_>\n          13 1 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          9 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 10 -1.</_>\n        <_>\n          10 7 5 5 2.</_>\n        <_>\n          5 12 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 8 2 -1.</_>\n        <_>\n          3 18 4 1 2.</_>\n        <_>\n          7 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 8 -1.</_>\n        <_>\n          12 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 8 -1.</_>\n        <_>\n          6 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 7 -1.</_>\n        <_>\n          12 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 1 -1.</_>\n        <_>\n          8 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 3 -1.</_>\n        <_>\n          15 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 2 -1.</_>\n        <_>\n          7 15 1 1 2.</_>\n        <_>\n          8 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 3 -1.</_>\n        <_>\n          15 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 7 -1.</_>\n        <_>\n          7 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 7 -1.</_>\n        <_>\n          18 1 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 8 20 -1.</_>\n        <_>\n          2 10 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 6 -1.</_>\n        <_>\n          3 2 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 2 -1.</_>\n        <_>\n          4 4 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 5 -1.</_>\n        <_>\n          16 0 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 4 -1.</_>\n        <_>\n          8 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 5 -1.</_>\n        <_>\n          16 0 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 13 -1.</_>\n        <_>\n          3 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 5 -1.</_>\n        <_>\n          16 0 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 5 -1.</_>\n        <_>\n          2 0 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 3 6 -1.</_>\n        <_>\n          14 14 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 3 6 -1.</_>\n        <_>\n          3 14 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 3 -1.</_>\n        <_>\n          16 2 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 10 -1.</_>\n        <_>\n          8 7 1 5 2.</_>\n        <_>\n          9 12 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 4 -1.</_>\n        <_>\n          11 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 3 -1.</_>\n        <_>\n          0 2 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 1 3 -1.</_>\n        <_>\n          13 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 3 5 -1.</_>\n        <_>\n          8 15 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 14 -1.</_>\n        <_>\n          10 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 5 6 -1.</_>\n        <_>\n          0 7 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 4 -1.</_>\n        <_>\n          9 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 10 -1.</_>\n        <_>\n          6 0 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 14 -1.</_>\n        <_>\n          10 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 14 -1.</_>\n        <_>\n          8 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 1 3 -1.</_>\n        <_>\n          13 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 3 -1.</_>\n        <_>\n          6 1 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 18 -1.</_>\n        <_>\n          19 1 1 9 2.</_>\n        <_>\n          18 10 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 3 -1.</_>\n        <_>\n          2 2 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 18 -1.</_>\n        <_>\n          19 1 1 9 2.</_>\n        <_>\n          18 10 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 4 6 -1.</_>\n        <_>\n          1 14 2 3 2.</_>\n        <_>\n          3 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 7 6 -1.</_>\n        <_>\n          10 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 4 -1.</_>\n        <_>\n          12 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 5 6 -1.</_>\n        <_>\n          5 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 1 8 -1.</_>\n        <_>\n          14 10 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 6 -1.</_>\n        <_>\n          1 7 9 3 2.</_>\n        <_>\n          10 10 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          9 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 5 -1.</_>\n        <_>\n          7 9 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 3 -1.</_>\n        <_>\n          9 6 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 4 -1.</_>\n        <_>\n          7 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 19 9 -1.</_>\n        <_>\n          1 3 19 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 3 6 -1.</_>\n        <_>\n          3 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 4 4 -1.</_>\n        <_>\n          15 7 2 2 2.</_>\n        <_>\n          13 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 4 4 -1.</_>\n        <_>\n          3 7 2 2 2.</_>\n        <_>\n          5 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 10 8 -1.</_>\n        <_>\n          9 10 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 12 -1.</_>\n        <_>\n          3 14 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 12 -1.</_>\n        <_>\n          11 5 5 6 2.</_>\n        <_>\n          6 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 4 -1.</_>\n        <_>\n          9 6 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 1 -1.</_>\n        <_>\n          13 2 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 1 -1.</_>\n        <_>\n          5 2 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 3 -1.</_>\n        <_>\n          13 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 1 4 -1.</_>\n        <_>\n          0 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 3 -1.</_>\n        <_>\n          13 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 2 -1.</_>\n        <_>\n          9 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 9 2 -1.</_>\n        <_>\n          6 16 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 4 -1.</_>\n        <_>\n          18 6 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 16 3 2 -1.</_>\n        <_>\n          15 17 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 9 -1.</_>\n        <_>\n          0 3 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          9 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          8 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          9 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 12 -1.</_>\n        <_>\n          11 6 4 6 2.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 12 -1.</_>\n        <_>\n          5 6 4 6 2.</_>\n        <_>\n          9 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 3 2 -1.</_>\n        <_>\n          2 17 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 6 6 -1.</_>\n        <_>\n          2 14 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 6 3 -1.</_>\n        <_>\n          6 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 5 3 -1.</_>\n        <_>\n          14 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 5 3 -1.</_>\n        <_>\n          14 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 2 -1.</_>\n        <_>\n          7 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 5 3 -1.</_>\n        <_>\n          1 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          10 13 2 3 2.</_>\n        <_>\n          8 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 3 -1.</_>\n        <_>\n          8 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 4 -1.</_>\n        <_>\n          12 2 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          0 2 10 1 2.</_>\n        <_>\n          10 3 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 1 -1.</_>\n        <_>\n          6 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 3 6 -1.</_>\n        <_>\n          2 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 8 -1.</_>\n        <_>\n          17 12 3 4 2.</_>\n        <_>\n          14 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 10 6 -1.</_>\n        <_>\n          4 13 5 3 2.</_>\n        <_>\n          9 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 1 2 -1.</_>\n        <_>\n          14 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 2 -1.</_>\n        <_>\n          14 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 2 -1.</_>\n        <_>\n          4 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 9 2 -1.</_>\n        <_>\n          8 13 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 6 -1.</_>\n        <_>\n          11 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 12 -1.</_>\n        <_>\n          5 12 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 6 -1.</_>\n        <_>\n          11 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 6 -1.</_>\n        <_>\n          6 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 11 3 -1.</_>\n        <_>\n          5 5 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 5 10 -1.</_>\n        <_>\n          7 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 18 2 -1.</_>\n        <_>\n          2 9 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 5 3 -1.</_>\n        <_>\n          7 18 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 1 -1.</_>\n        <_>\n          9 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 6 6 -1.</_>\n        <_>\n          0 14 3 3 2.</_>\n        <_>\n          3 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 1 -1.</_>\n        <_>\n          9 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 12 1 -1.</_>\n        <_>\n          7 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 7 -1.</_>\n        <_>\n          14 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 2 -1.</_>\n        <_>\n          1 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 9 -1.</_>\n        <_>\n          10 12 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 2 -1.</_>\n        <_>\n          5 1 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 2 3 -1.</_>\n        <_>\n          17 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 2 3 -1.</_>\n        <_>\n          1 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          10 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 3 -1.</_>\n        <_>\n          8 5 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 6 -1.</_>\n        <_>\n          9 5 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 12 12 -1.</_>\n        <_>\n          3 4 6 6 2.</_>\n        <_>\n          9 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 15 -1.</_>\n        <_>\n          11 2 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 6 17 -1.</_>\n        <_>\n          4 2 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 7 -1.</_>\n        <_>\n          14 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 7 -1.</_>\n        <_>\n          3 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 15 -1.</_>\n        <_>\n          11 2 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 15 -1.</_>\n        <_>\n          7 2 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 9 3 6 -1.</_>\n        <_>\n          17 11 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 6 -1.</_>\n        <_>\n          8 7 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 6 -1.</_>\n        <_>\n          10 10 9 3 2.</_>\n        <_>\n          1 13 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 9 -1.</_>\n        <_>\n          0 12 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 3 4 -1.</_>\n        <_>\n          5 14 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 16 12 -1.</_>\n        <_>\n          3 9 16 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 12 12 -1.</_>\n        <_>\n          1 1 6 6 2.</_>\n        <_>\n          7 7 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 2 4 -1.</_>\n        <_>\n          11 4 1 2 2.</_>\n        <_>\n          10 6 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 2 -1.</_>\n        <_>\n          0 9 5 1 2.</_>\n        <_>\n          5 10 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 3 3 -1.</_>\n        <_>\n          9 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 9 2 -1.</_>\n        <_>\n          3 13 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 6 -1.</_>\n        <_>\n          3 6 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 4 -1.</_>\n        <_>\n          12 7 3 2 2.</_>\n        <_>\n          9 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 8 -1.</_>\n        <_>\n          4 0 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 12 -1.</_>\n        <_>\n          9 11 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 10 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 8 3 -1.</_>\n        <_>\n          6 18 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 2 -1.</_>\n        <_>\n          13 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 5 -1.</_>\n        <_>\n          9 5 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 3 6 -1.</_>\n        <_>\n          12 16 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 8 2 -1.</_>\n        <_>\n          1 12 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 3 6 -1.</_>\n        <_>\n          0 7 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 2 -1.</_>\n        <_>\n          13 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 4 6 -1.</_>\n        <_>\n          4 14 2 3 2.</_>\n        <_>\n          6 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 2 -1.</_>\n        <_>\n          13 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 8 -1.</_>\n        <_>\n          17 0 3 4 2.</_>\n        <_>\n          14 4 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 3 2 -1.</_>\n        <_>\n          8 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 0 4 6 2.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 10 -1.</_>\n        <_>\n          15 0 1 5 2.</_>\n        <_>\n          14 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 8 6 -1.</_>\n        <_>\n          5 3 4 3 2.</_>\n        <_>\n          9 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 2 -1.</_>\n        <_>\n          9 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 4 3 -1.</_>\n        <_>\n          15 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 2 3 -1.</_>\n        <_>\n          8 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 4 -1.</_>\n        <_>\n          10 13 7 2 2.</_>\n        <_>\n          3 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 3 -1.</_>\n        <_>\n          1 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 1 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 16 15 -1.</_>\n        <_>\n          3 10 16 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 4 2 -1.</_>\n        <_>\n          8 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 10 -1.</_>\n        <_>\n          10 4 6 5 2.</_>\n        <_>\n          4 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          10 12 2 4 2.</_>\n        <_>\n          8 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 3 2 -1.</_>\n        <_>\n          13 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 3 2 -1.</_>\n        <_>\n          8 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 14 -1.</_>\n        <_>\n          9 0 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 3 -1.</_>\n        <_>\n          10 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 2 3 -1.</_>\n        <_>\n          10 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 6 -1.</_>\n        <_>\n          0 11 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 2 -1.</_>\n        <_>\n          6 1 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 7 3 -1.</_>\n        <_>\n          6 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 8 9 -1.</_>\n        <_>\n          8 13 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 3 2 -1.</_>\n        <_>\n          6 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 8 -1.</_>\n        <_>\n          17 1 3 4 2.</_>\n        <_>\n          14 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 8 -1.</_>\n        <_>\n          0 1 3 4 2.</_>\n        <_>\n          3 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 6 -1.</_>\n        <_>\n          10 2 9 3 2.</_>\n        <_>\n          1 5 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 1 -1.</_>\n        <_>\n          10 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 4 6 -1.</_>\n        <_>\n          15 2 2 3 2.</_>\n        <_>\n          13 5 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 1 3 -1.</_>\n        <_>\n          13 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 5 3 -1.</_>\n        <_>\n          2 17 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 4 6 -1.</_>\n        <_>\n          15 2 2 3 2.</_>\n        <_>\n          13 5 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 6 -1.</_>\n        <_>\n          3 2 2 3 2.</_>\n        <_>\n          5 5 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 1 2 -1.</_>\n        <_>\n          13 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 2 -1.</_>\n        <_>\n          5 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 2 -1.</_>\n        <_>\n          13 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 2 2 -1.</_>\n        <_>\n          6 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 17 3 2 -1.</_>\n        <_>\n          13 18 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 4 4 -1.</_>\n        <_>\n          6 16 2 2 2.</_>\n        <_>\n          8 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 3 -1.</_>\n        <_>\n          9 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 6 -1.</_>\n        <_>\n          9 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 2 3 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 6 -1.</_>\n        <_>\n          1 12 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 2 -1.</_>\n        <_>\n          8 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 2 -1.</_>\n        <_>\n          7 10 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 2 3 -1.</_>\n        <_>\n          8 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 3 4 -1.</_>\n        <_>\n          18 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 18 1 -1.</_>\n        <_>\n          7 19 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 2 -1.</_>\n        <_>\n          10 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 1 6 -1.</_>\n        <_>\n          1 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 8 3 -1.</_>\n        <_>\n          12 17 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 3 4 -1.</_>\n        <_>\n          1 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 2 -1.</_>\n        <_>\n          7 11 1 1 2.</_>\n        <_>\n          8 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 2 5 -1.</_>\n        <_>\n          11 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 5 -1.</_>\n        <_>\n          8 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          5 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 19 15 1 -1.</_>\n        <_>\n          9 19 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 15 1 -1.</_>\n        <_>\n          6 19 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 15 -1.</_>\n        <_>\n          7 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 5 -1.</_>\n        <_>\n          9 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 7 -1.</_>\n        <_>\n          10 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 3 3 -1.</_>\n        <_>\n          16 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 3 3 -1.</_>\n        <_>\n          1 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 3 -1.</_>\n        <_>\n          6 7 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 6 2 -1.</_>\n        <_>\n          0 16 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 4 -1.</_>\n        <_>\n          7 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 4 10 -1.</_>\n        <_>\n          16 10 2 5 2.</_>\n        <_>\n          14 15 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 2 -1.</_>\n        <_>\n          4 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 2 -1.</_>\n        <_>\n          11 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 4 10 -1.</_>\n        <_>\n          2 10 2 5 2.</_>\n        <_>\n          4 15 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 6 -1.</_>\n        <_>\n          10 13 10 3 2.</_>\n        <_>\n          0 16 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 2 15 -1.</_>\n        <_>\n          1 5 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          10 7 9 2 2.</_>\n        <_>\n          1 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 17 -1.</_>\n        <_>\n          1 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 6 -1.</_>\n        <_>\n          10 6 8 3 2.</_>\n        <_>\n          2 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 1 3 -1.</_>\n        <_>\n          8 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 2 -1.</_>\n        <_>\n          8 16 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 2 -1.</_>\n        <_>\n          5 2 4 1 2.</_>\n        <_>\n          9 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 6 -1.</_>\n        <_>\n          6 14 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 2 -1.</_>\n        <_>\n          9 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 6 -1.</_>\n        <_>\n          18 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 2 -1.</_>\n        <_>\n          9 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 6 -1.</_>\n        <_>\n          18 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 1 3 -1.</_>\n        <_>\n          9 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 6 -1.</_>\n        <_>\n          18 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 2 6 -1.</_>\n        <_>\n          0 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          9 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 3 -1.</_>\n        <_>\n          3 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 4 3 -1.</_>\n        <_>\n          13 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 6 -1.</_>\n        <_>\n          5 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 4 3 -1.</_>\n        <_>\n          3 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 15 5 -1.</_>\n        <_>\n          8 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 2 -1.</_>\n        <_>\n          7 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 9 -1.</_>\n        <_>\n          11 3 1 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 6 -1.</_>\n        <_>\n          10 6 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 3 -1.</_>\n        <_>\n          9 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 9 -1.</_>\n        <_>\n          2 9 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 3 5 -1.</_>\n        <_>\n          10 13 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 3 -1.</_>\n        <_>\n          9 7 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 2 -1.</_>\n        <_>\n          9 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 2 -1.</_>\n        <_>\n          9 9 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 3 1 -1.</_>\n        <_>\n          11 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 11 15 -1.</_>\n        <_>\n          0 6 11 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 1 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 6 4 -1.</_>\n        <_>\n          5 16 3 2 2.</_>\n        <_>\n          8 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 8 -1.</_>\n        <_>\n          6 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 6 -1.</_>\n        <_>\n          5 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 10 -1.</_>\n        <_>\n          11 6 4 5 2.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 10 -1.</_>\n        <_>\n          5 6 4 5 2.</_>\n        <_>\n          9 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 2 -1.</_>\n        <_>\n          9 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 8 2 -1.</_>\n        <_>\n          5 13 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 8 2 -1.</_>\n        <_>\n          10 3 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 10 -1.</_>\n        <_>\n          4 0 1 5 2.</_>\n        <_>\n          5 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 2 -1.</_>\n        <_>\n          9 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 3 -1.</_>\n        <_>\n          2 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 2 -1.</_>\n        <_>\n          8 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 6 -1.</_>\n        <_>\n          17 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 3 4 -1.</_>\n        <_>\n          2 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 4 6 -1.</_>\n        <_>\n          14 10 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 3 8 -1.</_>\n        <_>\n          2 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          8 16 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 2 2 -1.</_>\n        <_>\n          3 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 4 6 -1.</_>\n        <_>\n          14 10 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 4 6 -1.</_>\n        <_>\n          2 10 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 6 -1.</_>\n        <_>\n          10 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 6 -1.</_>\n        <_>\n          8 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 6 -1.</_>\n        <_>\n          12 2 1 3 2.</_>\n        <_>\n          11 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 5 -1.</_>\n        <_>\n          8 6 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 1 3 6 -1.</_>\n        <_>\n          17 3 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 3 2 -1.</_>\n        <_>\n          10 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 2 -1.</_>\n        <_>\n          9 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 5 2 -1.</_>\n        <_>\n          12 4 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 5 12 -1.</_>\n        <_>\n          7 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 2 -1.</_>\n        <_>\n          4 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 4 2 -1.</_>\n        <_>\n          13 14 2 1 2.</_>\n        <_>\n          11 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 1 3 -1.</_>\n        <_>\n          5 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 1 -1.</_>\n        <_>\n          10 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 1 -1.</_>\n        <_>\n          7 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 3 -1.</_>\n        <_>\n          9 18 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 1 3 -1.</_>\n        <_>\n          4 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 3 -1.</_>\n        <_>\n          12 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 3 -1.</_>\n        <_>\n          4 6 12 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 3 -1.</_>\n        <_>\n          9 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 3 3 -1.</_>\n        <_>\n          5 9 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 17 -1.</_>\n        <_>\n          9 0 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 3 -1.</_>\n        <_>\n          9 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 15 -1.</_>\n        <_>\n          9 10 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 2 3 -1.</_>\n        <_>\n          8 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 5 -1.</_>\n        <_>\n          9 1 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          0 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 5 3 -1.</_>\n        <_>\n          2 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 9 15 -1.</_>\n        <_>\n          2 10 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 12 10 -1.</_>\n        <_>\n          11 0 6 5 2.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 3 -1.</_>\n        <_>\n          6 1 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 1 -1.</_>\n        <_>\n          12 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 2 10 -1.</_>\n        <_>\n          3 1 1 5 2.</_>\n        <_>\n          4 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 1 -1.</_>\n        <_>\n          13 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 4 6 -1.</_>\n        <_>\n          4 15 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 1 -1.</_>\n        <_>\n          13 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 1 -1.</_>\n        <_>\n          6 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 2 -1.</_>\n        <_>\n          5 7 1 1 2.</_>\n        <_>\n          6 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 2 -1.</_>\n        <_>\n          16 4 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 18 -1.</_>\n        <_>\n          0 2 1 9 2.</_>\n        <_>\n          1 11 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          10 2 9 2 2.</_>\n        <_>\n          1 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 3 -1.</_>\n        <_>\n          9 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 5 3 -1.</_>\n        <_>\n          11 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 7 3 -1.</_>\n        <_>\n          6 5 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 17 3 3 -1.</_>\n        <_>\n          13 18 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 4 -1.</_>\n        <_>\n          9 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 4 -1.</_>\n        <_>\n          11 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 9 3 -1.</_>\n        <_>\n          3 17 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 8 -1.</_>\n        <_>\n          12 0 1 4 2.</_>\n        <_>\n          11 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          0 8 3 6 2.</_>\n        <_>\n          3 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 4 12 -1.</_>\n        <_>\n          10 13 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 8 14 -1.</_>\n        <_>\n          5 10 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 1 -1.</_>\n        <_>\n          14 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 4 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 5 8 -1.</_>\n        <_>\n          10 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 8 -1.</_>\n        <_>\n          8 1 2 4 2.</_>\n        <_>\n          10 5 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 1 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 3 4 -1.</_>\n        <_>\n          9 9 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 6 -1.</_>\n        <_>\n          18 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          9 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 1 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 3 6 -1.</_>\n        <_>\n          12 13 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 10 -1.</_>\n        <_>\n          10 4 9 5 2.</_>\n        <_>\n          1 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 9 -1.</_>\n        <_>\n          8 9 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 3 -1.</_>\n        <_>\n          8 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 4 3 -1.</_>\n        <_>\n          14 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 3 10 -1.</_>\n        <_>\n          6 10 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 1 6 -1.</_>\n        <_>\n          0 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 1 3 -1.</_>\n        <_>\n          10 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 4 3 -1.</_>\n        <_>\n          2 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 8 -1.</_>\n        <_>\n          19 3 1 4 2.</_>\n        <_>\n          18 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 8 -1.</_>\n        <_>\n          0 3 1 4 2.</_>\n        <_>\n          1 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 10 -1.</_>\n        <_>\n          10 7 7 5 2.</_>\n        <_>\n          3 12 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 19 3 -1.</_>\n        <_>\n          0 8 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 3 -1.</_>\n        <_>\n          12 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 1 3 -1.</_>\n        <_>\n          0 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 3 -1.</_>\n        <_>\n          12 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 3 -1.</_>\n        <_>\n          5 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 2 -1.</_>\n        <_>\n          8 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 12 -1.</_>\n        <_>\n          8 3 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 2 3 -1.</_>\n        <_>\n          13 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 4 -1.</_>\n        <_>\n          0 12 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 17 14 -1.</_>\n        <_>\n          2 7 17 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 4 -1.</_>\n        <_>\n          14 6 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 4 -1.</_>\n        <_>\n          3 6 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 2 -1.</_>\n        <_>\n          13 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 2 -1.</_>\n        <_>\n          0 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 14 2 -1.</_>\n        <_>\n          13 11 7 1 2.</_>\n        <_>\n          6 12 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 2 -1.</_>\n        <_>\n          8 5 1 1 2.</_>\n        <_>\n          9 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 3 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 3 12 -1.</_>\n        <_>\n          2 1 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 1 3 -1.</_>\n        <_>\n          17 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 1 3 -1.</_>\n        <_>\n          2 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 1 3 -1.</_>\n        <_>\n          14 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 2 3 -1.</_>\n        <_>\n          7 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          10 13 2 3 2.</_>\n        <_>\n          8 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 1 3 -1.</_>\n        <_>\n          5 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 20 -1.</_>\n        <_>\n          16 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 6 -1.</_>\n        <_>\n          5 1 1 3 2.</_>\n        <_>\n          6 4 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 12 -1.</_>\n        <_>\n          15 2 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 1 8 -1.</_>\n        <_>\n          14 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 10 -1.</_>\n        <_>\n          1 4 7 5 2.</_>\n        <_>\n          8 9 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 14 -1.</_>\n        <_>\n          14 6 3 7 2.</_>\n        <_>\n          11 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 14 -1.</_>\n        <_>\n          3 6 3 7 2.</_>\n        <_>\n          6 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 15 2 -1.</_>\n        <_>\n          9 9 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 15 2 -1.</_>\n        <_>\n          6 9 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 9 -1.</_>\n        <_>\n          6 14 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 8 -1.</_>\n        <_>\n          8 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 2 6 -1.</_>\n        <_>\n          14 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 4 -1.</_>\n        <_>\n          5 7 3 2 2.</_>\n        <_>\n          8 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 19 -1.</_>\n        <_>\n          7 1 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 5 -1.</_>\n        <_>\n          4 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 6 2 -1.</_>\n        <_>\n          12 18 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 6 2 -1.</_>\n        <_>\n          2 18 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 6 -1.</_>\n        <_>\n          17 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 3 -1.</_>\n        <_>\n          8 18 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 6 -1.</_>\n        <_>\n          10 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 6 -1.</_>\n        <_>\n          17 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 2 3 -1.</_>\n        <_>\n          8 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 2 -1.</_>\n        <_>\n          11 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 6 -1.</_>\n        <_>\n          0 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 6 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 2 -1.</_>\n        <_>\n          5 6 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 4 -1.</_>\n        <_>\n          11 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 5 9 -1.</_>\n        <_>\n          1 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 2 3 -1.</_>\n        <_>\n          13 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 3 -1.</_>\n        <_>\n          7 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 8 -1.</_>\n        <_>\n          2 15 18 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          5 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 2 -1.</_>\n        <_>\n          12 6 2 1 2.</_>\n        <_>\n          10 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 2 -1.</_>\n        <_>\n          6 6 2 1 2.</_>\n        <_>\n          8 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 4 -1.</_>\n        <_>\n          11 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 2 7 -1.</_>\n        <_>\n          8 1 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 15 14 -1.</_>\n        <_>\n          4 9 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          9 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 18 4 -1.</_>\n        <_>\n          11 3 9 2 2.</_>\n        <_>\n          2 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 3 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 2 -1.</_>\n        <_>\n          7 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 7 -1.</_>\n        <_>\n          9 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 2 3 -1.</_>\n        <_>\n          6 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 14 18 -1.</_>\n        <_>\n          6 9 14 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 6 3 -1.</_>\n        <_>\n          2 17 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          10 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 3 -1.</_>\n        <_>\n          7 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 3 -1.</_>\n        <_>\n          7 13 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 2 -1.</_>\n        <_>\n          9 12 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 6 -1.</_>\n        <_>\n          5 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 2 -1.</_>\n        <_>\n          11 13 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 6 -1.</_>\n        <_>\n          6 10 4 3 2.</_>\n        <_>\n          10 13 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 4 -1.</_>\n        <_>\n          11 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 3 -1.</_>\n        <_>\n          9 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 1 9 -1.</_>\n        <_>\n          13 6 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 14 6 -1.</_>\n        <_>\n          1 15 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 1 6 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 8 -1.</_>\n        <_>\n          1 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 18 -1.</_>\n        <_>\n          18 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 6 2 -1.</_>\n        <_>\n          2 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 8 6 -1.</_>\n        <_>\n          9 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 6 -1.</_>\n        <_>\n          6 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 3 -1.</_>\n        <_>\n          14 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 18 -1.</_>\n        <_>\n          1 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 18 2 -1.</_>\n        <_>\n          10 18 9 1 2.</_>\n        <_>\n          1 19 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 2 2 -1.</_>\n        <_>\n          3 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 5 3 -1.</_>\n        <_>\n          8 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 2 3 -1.</_>\n        <_>\n          8 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 2 -1.</_>\n        <_>\n          9 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 5 2 -1.</_>\n        <_>\n          15 6 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 5 2 -1.</_>\n        <_>\n          0 6 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 14 1 6 -1.</_>\n        <_>\n          17 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 3 -1.</_>\n        <_>\n          5 9 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 18 -1.</_>\n        <_>\n          2 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 1 3 -1.</_>\n        <_>\n          17 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 1 6 -1.</_>\n        <_>\n          2 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 8 1 2 -1.</_>\n        <_>\n          19 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 3 -1.</_>\n        <_>\n          6 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 3 -1.</_>\n        <_>\n          9 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 1 3 -1.</_>\n        <_>\n          2 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 8 2 -1.</_>\n        <_>\n          16 4 4 1 2.</_>\n        <_>\n          12 5 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 8 2 -1.</_>\n        <_>\n          0 4 4 1 2.</_>\n        <_>\n          4 5 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 18 4 -1.</_>\n        <_>\n          2 18 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 4 -1.</_>\n        <_>\n          7 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 3 -1.</_>\n        <_>\n          4 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 20 -1.</_>\n        <_>\n          2 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 8 -1.</_>\n        <_>\n          14 4 2 4 2.</_>\n        <_>\n          12 8 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 2 -1.</_>\n        <_>\n          6 7 1 1 2.</_>\n        <_>\n          7 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 2 3 -1.</_>\n        <_>\n          10 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          8 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 6 12 -1.</_>\n        <_>\n          8 8 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 11 12 -1.</_>\n        <_>\n          4 4 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 11 -1.</_>\n        <_>\n          16 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 4 3 -1.</_>\n        <_>\n          0 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 3 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 2 -1.</_>\n        <_>\n          5 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 3 3 -1.</_>\n        <_>\n          10 15 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          9 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 3 3 -1.</_>\n        <_>\n          10 15 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 2 -1.</_>\n        <_>\n          8 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 4 -1.</_>\n        <_>\n          10 10 8 2 2.</_>\n        <_>\n          2 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 4 17 -1.</_>\n        <_>\n          4 3 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 7 -1.</_>\n        <_>\n          15 13 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 6 1 -1.</_>\n        <_>\n          5 2 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 4 -1.</_>\n        <_>\n          9 2 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 0 4 6 2.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 2 -1.</_>\n        <_>\n          14 7 1 1 2.</_>\n        <_>\n          13 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 14 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 2 3 -1.</_>\n        <_>\n          14 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 12 -1.</_>\n        <_>\n          3 8 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 16 2 -1.</_>\n        <_>\n          3 0 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 3 -1.</_>\n        <_>\n          6 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 6 3 -1.</_>\n        <_>\n          8 16 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 1 6 -1.</_>\n        <_>\n          0 12 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 3 -1.</_>\n        <_>\n          10 10 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 2 3 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 1 -1.</_>\n        <_>\n          5 7 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 19 -1.</_>\n        <_>\n          10 0 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 6 -1.</_>\n        <_>\n          10 6 10 3 2.</_>\n        <_>\n          0 9 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 2 2 -1.</_>\n        <_>\n          3 6 1 1 2.</_>\n        <_>\n          4 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 2 2 -1.</_>\n        <_>\n          16 6 1 1 2.</_>\n        <_>\n          15 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 2 2 -1.</_>\n        <_>\n          3 6 1 1 2.</_>\n        <_>\n          4 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 1 12 -1.</_>\n        <_>\n          14 10 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 10 -1.</_>\n        <_>\n          2 5 8 5 2.</_>\n        <_>\n          10 10 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 2 2 -1.</_>\n        <_>\n          1 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 5 -1.</_>\n        <_>\n          10 0 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 5 -1.</_>\n        <_>\n          5 0 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 17 -1.</_>\n        <_>\n          11 2 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 17 -1.</_>\n        <_>\n          8 2 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 2 9 -1.</_>\n        <_>\n          15 11 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 2 9 -1.</_>\n        <_>\n          4 11 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 14 4 -1.</_>\n        <_>\n          5 16 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 1 -1.</_>\n        <_>\n          7 4 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 12 -1.</_>\n        <_>\n          9 12 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 6 -1.</_>\n        <_>\n          12 3 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 6 -1.</_>\n        <_>\n          5 2 3 3 2.</_>\n        <_>\n          8 5 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 6 4 -1.</_>\n        <_>\n          12 16 3 2 2.</_>\n        <_>\n          9 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 3 -1.</_>\n        <_>\n          7 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 9 10 -1.</_>\n        <_>\n          7 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 4 -1.</_>\n        <_>\n          7 9 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 6 -1.</_>\n        <_>\n          11 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 5 3 -1.</_>\n        <_>\n          7 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 6 -1.</_>\n        <_>\n          10 11 3 3 2.</_>\n        <_>\n          7 14 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 9 -1.</_>\n        <_>\n          0 3 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 1 6 -1.</_>\n        <_>\n          13 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 1 6 -1.</_>\n        <_>\n          6 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 2 3 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 3 -1.</_>\n        <_>\n          7 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 11 3 -1.</_>\n        <_>\n          9 1 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 3 -1.</_>\n        <_>\n          0 7 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 1 2 -1.</_>\n        <_>\n          10 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 6 -1.</_>\n        <_>\n          10 6 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 1 -1.</_>\n        <_>\n          9 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 12 1 -1.</_>\n        <_>\n          7 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 2 -1.</_>\n        <_>\n          6 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 1 -1.</_>\n        <_>\n          9 0 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 2 1 -1.</_>\n        <_>\n          8 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 9 13 -1.</_>\n        <_>\n          9 4 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 4 2 -1.</_>\n        <_>\n          6 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 6 -1.</_>\n        <_>\n          16 2 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 6 3 -1.</_>\n        <_>\n          0 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 3 10 -1.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 3 -1.</_>\n        <_>\n          10 4 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 8 -1.</_>\n        <_>\n          9 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 13 -1.</_>\n        <_>\n          9 6 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 0 4 6 2.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 8 -1.</_>\n        <_>\n          16 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 6 -1.</_>\n        <_>\n          7 0 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 8 -1.</_>\n        <_>\n          16 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 6 -1.</_>\n        <_>\n          0 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 2 -1.</_>\n        <_>\n          12 12 3 1 2.</_>\n        <_>\n          9 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 2 2 -1.</_>\n        <_>\n          12 6 1 1 2.</_>\n        <_>\n          11 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 2 -1.</_>\n        <_>\n          7 9 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 2 2 -1.</_>\n        <_>\n          12 6 1 1 2.</_>\n        <_>\n          11 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 12 8 -1.</_>\n        <_>\n          7 4 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 5 3 -1.</_>\n        <_>\n          13 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 3 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 2 3 -1.</_>\n        <_>\n          14 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 1 3 -1.</_>\n        <_>\n          5 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 2 3 -1.</_>\n        <_>\n          13 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 3 -1.</_>\n        <_>\n          5 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 3 -1.</_>\n        <_>\n          9 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 2 2 -1.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 4 -1.</_>\n        <_>\n          15 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 2 -1.</_>\n        <_>\n          3 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 2 2 -1.</_>\n        <_>\n          13 15 1 1 2.</_>\n        <_>\n          12 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 2 -1.</_>\n        <_>\n          9 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 14 9 -1.</_>\n        <_>\n          4 14 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 4 3 -1.</_>\n        <_>\n          7 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 4 -1.</_>\n        <_>\n          15 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 1 4 -1.</_>\n        <_>\n          4 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          16 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 12 -1.</_>\n        <_>\n          4 1 1 6 2.</_>\n        <_>\n          5 7 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 6 6 -1.</_>\n        <_>\n          14 14 3 3 2.</_>\n        <_>\n          11 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 6 6 -1.</_>\n        <_>\n          3 14 3 3 2.</_>\n        <_>\n          6 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 17 3 2 -1.</_>\n        <_>\n          14 18 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 3 2 -1.</_>\n        <_>\n          3 18 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          16 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 13 -1.</_>\n        <_>\n          2 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 2 2 -1.</_>\n        <_>\n          6 15 1 1 2.</_>\n        <_>\n          7 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 6 -1.</_>\n        <_>\n          10 11 4 3 2.</_>\n        <_>\n          6 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 2 2 -1.</_>\n        <_>\n          7 6 1 1 2.</_>\n        <_>\n          8 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 6 -1.</_>\n        <_>\n          10 2 8 3 2.</_>\n        <_>\n          2 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 3 10 -1.</_>\n        <_>\n          11 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 10 -1.</_>\n        <_>\n          6 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 2 -1.</_>\n        <_>\n          11 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 1 3 -1.</_>\n        <_>\n          10 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 18 -1.</_>\n        <_>\n          1 2 2 9 2.</_>\n        <_>\n          3 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 12 -1.</_>\n        <_>\n          12 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 1 6 -1.</_>\n        <_>\n          0 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 3 -1.</_>\n        <_>\n          8 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 2 -1.</_>\n        <_>\n          11 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 2 -1.</_>\n        <_>\n          8 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 1 -1.</_>\n        <_>\n          11 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 3 -1.</_>\n        <_>\n          9 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 8 6 -1.</_>\n        <_>\n          16 7 4 3 2.</_>\n        <_>\n          12 10 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 6 -1.</_>\n        <_>\n          0 7 4 3 2.</_>\n        <_>\n          4 10 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 10 -1.</_>\n        <_>\n          19 2 1 5 2.</_>\n        <_>\n          18 7 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 4 -1.</_>\n        <_>\n          3 2 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 1 -1.</_>\n        <_>\n          11 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 2 -1.</_>\n        <_>\n          7 15 1 1 2.</_>\n        <_>\n          8 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 1 6 -1.</_>\n        <_>\n          11 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 1 6 -1.</_>\n        <_>\n          8 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 2 1 -1.</_>\n        <_>\n          14 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 2 3 -1.</_>\n        <_>\n          8 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 7 4 -1.</_>\n        <_>\n          12 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 3 -1.</_>\n        <_>\n          4 15 12 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 2 -1.</_>\n        <_>\n          11 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 2 -1.</_>\n        <_>\n          4 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 6 -1.</_>\n        <_>\n          10 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 2 -1.</_>\n        <_>\n          7 13 1 1 2.</_>\n        <_>\n          8 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 14 4 -1.</_>\n        <_>\n          11 11 7 2 2.</_>\n        <_>\n          4 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 18 2 -1.</_>\n        <_>\n          7 18 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 2 2 -1.</_>\n        <_>\n          12 18 1 1 2.</_>\n        <_>\n          11 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 2 2 -1.</_>\n        <_>\n          7 18 1 1 2.</_>\n        <_>\n          8 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 8 2 -1.</_>\n        <_>\n          12 19 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 2 -1.</_>\n        <_>\n          7 15 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          10 12 2 4 2.</_>\n        <_>\n          8 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 3 3 -1.</_>\n        <_>\n          4 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 2 -1.</_>\n        <_>\n          9 10 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 15 -1.</_>\n        <_>\n          7 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 12 14 -1.</_>\n        <_>\n          12 6 4 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 3 3 -1.</_>\n        <_>\n          5 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          12 1 4 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 2 -1.</_>\n        <_>\n          3 1 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 4 5 -1.</_>\n        <_>\n          10 12 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 4 5 -1.</_>\n        <_>\n          8 12 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 10 -1.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 5 2 -1.</_>\n        <_>\n          2 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 2 -1.</_>\n        <_>\n          7 11 1 1 2.</_>\n        <_>\n          8 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 3 3 -1.</_>\n        <_>\n          14 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 3 3 -1.</_>\n        <_>\n          3 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          8 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 3 3 -1.</_>\n        <_>\n          13 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 3 -1.</_>\n        <_>\n          0 10 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 3 3 -1.</_>\n        <_>\n          13 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 8 -1.</_>\n        <_>\n          9 12 1 4 2.</_>\n        <_>\n          10 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 2 2 -1.</_>\n        <_>\n          12 7 1 1 2.</_>\n        <_>\n          11 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 6 4 -1.</_>\n        <_>\n          3 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 2 3 -1.</_>\n        <_>\n          10 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          9 7 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 8 4 -1.</_>\n        <_>\n          12 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 2 -1.</_>\n        <_>\n          10 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 4 2 -1.</_>\n        <_>\n          6 15 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 13 -1.</_>\n        <_>\n          13 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 13 -1.</_>\n        <_>\n          6 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 9 -1.</_>\n        <_>\n          9 9 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 7 12 -1.</_>\n        <_>\n          4 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 2 -1.</_>\n        <_>\n          13 12 1 1 2.</_>\n        <_>\n          12 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 2 -1.</_>\n        <_>\n          6 12 1 1 2.</_>\n        <_>\n          7 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          10 9 2 1 2.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 2 2 -1.</_>\n        <_>\n          3 6 1 1 2.</_>\n        <_>\n          4 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 3 2 -1.</_>\n        <_>\n          16 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 19 4 -1.</_>\n        <_>\n          0 9 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 1 -1.</_>\n        <_>\n          10 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 12 -1.</_>\n        <_>\n          9 10 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 4 1 -1.</_>\n        <_>\n          12 18 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 4 -1.</_>\n        <_>\n          1 7 3 2 2.</_>\n        <_>\n          4 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 13 -1.</_>\n        <_>\n          14 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 13 -1.</_>\n        <_>\n          4 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 8 -1.</_>\n        <_>\n          10 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 2 5 -1.</_>\n        <_>\n          9 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 9 1 -1.</_>\n        <_>\n          11 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 9 1 -1.</_>\n        <_>\n          6 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 10 -1.</_>\n        <_>\n          7 0 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 5 3 -1.</_>\n        <_>\n          7 18 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 1 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 3 2 -1.</_>\n        <_>\n          2 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 6 -1.</_>\n        <_>\n          6 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 4 -1.</_>\n        <_>\n          11 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 4 -1.</_>\n        <_>\n          8 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 4 -1.</_>\n        <_>\n          9 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 8 3 -1.</_>\n        <_>\n          6 14 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 3 4 -1.</_>\n        <_>\n          10 15 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 17 -1.</_>\n        <_>\n          10 2 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 1 -1.</_>\n        <_>\n          9 0 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 3 4 -1.</_>\n        <_>\n          9 15 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 3 -1.</_>\n        <_>\n          7 14 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 3 3 -1.</_>\n        <_>\n          9 16 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 10 -1.</_>\n        <_>\n          6 7 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 8 8 -1.</_>\n        <_>\n          2 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 16 2 2 -1.</_>\n        <_>\n          14 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 2 2 -1.</_>\n        <_>\n          4 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 6 -1.</_>\n        <_>\n          10 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 4 6 -1.</_>\n        <_>\n          6 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 6 -1.</_>\n        <_>\n          12 0 2 3 2.</_>\n        <_>\n          10 3 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 2 -1.</_>\n        <_>\n          0 4 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 2 -1.</_>\n        <_>\n          16 0 4 1 2.</_>\n        <_>\n          12 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 8 -1.</_>\n        <_>\n          2 16 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 7 2 10 -1.</_>\n        <_>\n          18 7 1 5 2.</_>\n        <_>\n          17 12 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 2 10 -1.</_>\n        <_>\n          1 7 1 5 2.</_>\n        <_>\n          2 12 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 3 6 -1.</_>\n        <_>\n          15 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 2 -1.</_>\n        <_>\n          6 4 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 2 -1.</_>\n        <_>\n          0 0 4 1 2.</_>\n        <_>\n          4 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 6 2 -1.</_>\n        <_>\n          1 14 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 4 -1.</_>\n        <_>\n          11 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 1 -1.</_>\n        <_>\n          8 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 2 -1.</_>\n        <_>\n          10 6 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 2 -1.</_>\n        <_>\n          15 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 1 2 -1.</_>\n        <_>\n          6 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 1 3 -1.</_>\n        <_>\n          13 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 1 2 -1.</_>\n        <_>\n          2 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 3 -1.</_>\n        <_>\n          12 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 3 -1.</_>\n        <_>\n          0 1 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 2 -1.</_>\n        <_>\n          9 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 3 -1.</_>\n        <_>\n          5 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 3 -1.</_>\n        <_>\n          18 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 8 6 -1.</_>\n        <_>\n          3 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          10 2 10 3 2.</_>\n        <_>\n          0 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 4 -1.</_>\n        <_>\n          5 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 15 2 -1.</_>\n        <_>\n          8 10 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 11 -1.</_>\n        <_>\n          9 0 6 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 6 -1.</_>\n        <_>\n          13 0 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 19 2 1 -1.</_>\n        <_>\n          1 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 4 10 -1.</_>\n        <_>\n          18 10 2 5 2.</_>\n        <_>\n          16 15 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 10 3 -1.</_>\n        <_>\n          4 9 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 3 3 -1.</_>\n        <_>\n          14 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 4 10 -1.</_>\n        <_>\n          0 10 2 5 2.</_>\n        <_>\n          2 15 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 6 -1.</_>\n        <_>\n          18 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 3 -1.</_>\n        <_>\n          6 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 7 2 -1.</_>\n        <_>\n          7 8 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 6 -1.</_>\n        <_>\n          0 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 1 -1.</_>\n        <_>\n          12 1 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 6 -1.</_>\n        <_>\n          6 0 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 14 -1.</_>\n        <_>\n          7 1 6 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 3 -1.</_>\n        <_>\n          8 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 2 -1.</_>\n        <_>\n          9 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 2 -1.</_>\n        <_>\n          8 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 5 -1.</_>\n        <_>\n          11 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 5 -1.</_>\n        <_>\n          8 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 10 -1.</_>\n        <_>\n          14 0 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 2 -1.</_>\n        <_>\n          4 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 6 -1.</_>\n        <_>\n          18 3 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 10 -1.</_>\n        <_>\n          1 13 18 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 10 -1.</_>\n        <_>\n          14 0 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 7 -1.</_>\n        <_>\n          17 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 10 -1.</_>\n        <_>\n          5 0 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 7 -1.</_>\n        <_>\n          17 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 1 2 -1.</_>\n        <_>\n          0 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 10 -1.</_>\n        <_>\n          18 1 1 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 10 -1.</_>\n        <_>\n          1 1 1 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 4 -1.</_>\n        <_>\n          11 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 3 3 -1.</_>\n        <_>\n          3 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 6 -1.</_>\n        <_>\n          12 0 1 3 2.</_>\n        <_>\n          11 3 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 6 -1.</_>\n        <_>\n          7 0 1 3 2.</_>\n        <_>\n          8 3 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 7 -1.</_>\n        <_>\n          17 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 3 7 -1.</_>\n        <_>\n          2 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 16 -1.</_>\n        <_>\n          16 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 16 -1.</_>\n        <_>\n          2 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 8 -1.</_>\n        <_>\n          10 0 8 4 2.</_>\n        <_>\n          2 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 5 3 -1.</_>\n        <_>\n          6 9 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 4 -1.</_>\n        <_>\n          9 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 15 1 -1.</_>\n        <_>\n          5 7 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 7 9 -1.</_>\n        <_>\n          8 5 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 16 4 -1.</_>\n        <_>\n          1 7 8 2 2.</_>\n        <_>\n          9 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 2 -1.</_>\n        <_>\n          6 13 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 3 3 -1.</_>\n        <_>\n          8 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 14 10 -1.</_>\n        <_>\n          11 5 7 5 2.</_>\n        <_>\n          4 10 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 3 2 -1.</_>\n        <_>\n          4 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 1 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 6 -1.</_>\n        <_>\n          4 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 3 -1.</_>\n        <_>\n          7 11 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 2 -1.</_>\n        <_>\n          9 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 1 -1.</_>\n        <_>\n          8 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 1 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 4 -1.</_>\n        <_>\n          11 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 8 -1.</_>\n        <_>\n          2 16 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 15 2 -1.</_>\n        <_>\n          0 16 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 6 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 4 -1.</_>\n        <_>\n          10 5 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 9 6 -1.</_>\n        <_>\n          8 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 19 15 1 -1.</_>\n        <_>\n          7 19 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 4 -1.</_>\n        <_>\n          11 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          0 17 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 4 -1.</_>\n        <_>\n          11 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 3 4 -1.</_>\n        <_>\n          8 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 3 -1.</_>\n        <_>\n          9 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 6 -1.</_>\n        <_>\n          8 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 12 -1.</_>\n        <_>\n          9 10 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 4 3 -1.</_>\n        <_>\n          8 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 8 2 -1.</_>\n        <_>\n          13 18 4 1 2.</_>\n        <_>\n          9 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 8 2 -1.</_>\n        <_>\n          1 19 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 6 15 -1.</_>\n        <_>\n          15 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 2 -1.</_>\n        <_>\n          9 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 3 -1.</_>\n        <_>\n          9 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 15 -1.</_>\n        <_>\n          3 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 8 -1.</_>\n        <_>\n          11 1 7 4 2.</_>\n        <_>\n          4 5 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 4 16 -1.</_>\n        <_>\n          2 4 2 8 2.</_>\n        <_>\n          4 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 12 -1.</_>\n        <_>\n          12 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 12 -1.</_>\n        <_>\n          4 5 5 6 2.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 3 -1.</_>\n        <_>\n          5 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 4 10 -1.</_>\n        <_>\n          14 2 2 5 2.</_>\n        <_>\n          12 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 7 3 -1.</_>\n        <_>\n          6 5 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 2 -1.</_>\n        <_>\n          11 0 9 1 2.</_>\n        <_>\n          2 1 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 2 -1.</_>\n        <_>\n          0 0 9 1 2.</_>\n        <_>\n          9 1 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 4 6 -1.</_>\n        <_>\n          15 13 2 3 2.</_>\n        <_>\n          13 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 4 6 -1.</_>\n        <_>\n          3 13 2 3 2.</_>\n        <_>\n          5 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 6 -1.</_>\n        <_>\n          10 15 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 10 -1.</_>\n        <_>\n          5 9 5 5 2.</_>\n        <_>\n          10 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 2 -1.</_>\n        <_>\n          13 4 2 1 2.</_>\n        <_>\n          11 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 8 -1.</_>\n        <_>\n          10 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 4 10 -1.</_>\n        <_>\n          14 2 2 5 2.</_>\n        <_>\n          12 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 2 1 -1.</_>\n        <_>\n          9 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 1 12 -1.</_>\n        <_>\n          10 9 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 9 -1.</_>\n        <_>\n          3 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 4 10 -1.</_>\n        <_>\n          14 2 2 5 2.</_>\n        <_>\n          12 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 4 10 -1.</_>\n        <_>\n          4 2 2 5 2.</_>\n        <_>\n          6 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 2 -1.</_>\n        <_>\n          13 4 2 1 2.</_>\n        <_>\n          11 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 6 3 -1.</_>\n        <_>\n          0 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 2 -1.</_>\n        <_>\n          13 4 2 1 2.</_>\n        <_>\n          11 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 3 2 -1.</_>\n        <_>\n          7 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 2 -1.</_>\n        <_>\n          13 4 2 1 2.</_>\n        <_>\n          11 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 2 -1.</_>\n        <_>\n          5 4 2 1 2.</_>\n        <_>\n          7 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 12 -1.</_>\n        <_>\n          14 0 1 6 2.</_>\n        <_>\n          13 6 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 10 -1.</_>\n        <_>\n          7 0 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 8 -1.</_>\n        <_>\n          3 4 17 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 4 -1.</_>\n        <_>\n          0 6 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 8 2 -1.</_>\n        <_>\n          4 3 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 4 -1.</_>\n        <_>\n          5 7 3 2 2.</_>\n        <_>\n          8 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 9 -1.</_>\n        <_>\n          8 6 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 1 4 -1.</_>\n        <_>\n          8 17 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 7 -1.</_>\n        <_>\n          8 5 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 4 10 -1.</_>\n        <_>\n          4 2 2 5 2.</_>\n        <_>\n          6 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 2 -1.</_>\n        <_>\n          3 1 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 15 -1.</_>\n        <_>\n          2 7 16 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 2 -1.</_>\n        <_>\n          15 3 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 2 -1.</_>\n        <_>\n          10 3 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 15 -1.</_>\n        <_>\n          4 10 16 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 6 -1.</_>\n        <_>\n          7 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 2 -1.</_>\n        <_>\n          11 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 1 -1.</_>\n        <_>\n          9 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 3 -1.</_>\n        <_>\n          9 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 2 -1.</_>\n        <_>\n          0 3 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 12 1 -1.</_>\n        <_>\n          5 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 14 -1.</_>\n        <_>\n          7 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 0 4 5 2.</_>\n        <_>\n          4 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 2 -1.</_>\n        <_>\n          10 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 2 -1.</_>\n        <_>\n          9 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 16 -1.</_>\n        <_>\n          7 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 2 6 -1.</_>\n        <_>\n          2 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 6 -1.</_>\n        <_>\n          13 13 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 2 6 -1.</_>\n        <_>\n          3 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 2 -1.</_>\n        <_>\n          14 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 2 -1.</_>\n        <_>\n          0 9 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 2 -1.</_>\n        <_>\n          14 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 6 -1.</_>\n        <_>\n          0 2 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 6 -1.</_>\n        <_>\n          4 13 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 1 3 -1.</_>\n        <_>\n          9 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 12 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 2 -1.</_>\n        <_>\n          8 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 3 -1.</_>\n        <_>\n          4 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 2 -1.</_>\n        <_>\n          9 6 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 1 3 -1.</_>\n        <_>\n          4 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 6 -1.</_>\n        <_>\n          14 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 7 -1.</_>\n        <_>\n          8 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 3 -1.</_>\n        <_>\n          10 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 3 -1.</_>\n        <_>\n          9 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 11 3 -1.</_>\n        <_>\n          5 11 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 1 -1.</_>\n        <_>\n          10 7 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 2 -1.</_>\n        <_>\n          10 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          9 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 2 -1.</_>\n        <_>\n          11 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 2 -1.</_>\n        <_>\n          7 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 2 4 -1.</_>\n        <_>\n          14 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 2 -1.</_>\n        <_>\n          8 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 17 6 3 -1.</_>\n        <_>\n          14 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          4 5 6 6 2.</_>\n        <_>\n          10 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 15 4 -1.</_>\n        <_>\n          5 4 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 4 1 -1.</_>\n        <_>\n          13 2 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 2 -1.</_>\n        <_>\n          4 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 3 -1.</_>\n        <_>\n          9 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 2 3 -1.</_>\n        <_>\n          13 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 4 -1.</_>\n        <_>\n          7 12 2 2 2.</_>\n        <_>\n          9 14 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 2 2 -1.</_>\n        <_>\n          11 11 1 1 2.</_>\n        <_>\n          10 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 2 2 -1.</_>\n        <_>\n          11 11 1 1 2.</_>\n        <_>\n          10 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 6 3 -1.</_>\n        <_>\n          0 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 2 2 -1.</_>\n        <_>\n          11 11 1 1 2.</_>\n        <_>\n          10 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 2 2 -1.</_>\n        <_>\n          8 11 1 1 2.</_>\n        <_>\n          9 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 4 -1.</_>\n        <_>\n          12 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 4 -1.</_>\n        <_>\n          4 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 4 1 -1.</_>\n        <_>\n          13 2 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 1 -1.</_>\n        <_>\n          5 2 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 2 -1.</_>\n        <_>\n          12 0 2 1 2.</_>\n        <_>\n          10 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 3 1 -1.</_>\n        <_>\n          8 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 8 -1.</_>\n        <_>\n          10 11 2 4 2.</_>\n        <_>\n          8 15 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 15 2 -1.</_>\n        <_>\n          3 19 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 2 12 -1.</_>\n        <_>\n          2 6 1 6 2.</_>\n        <_>\n          3 12 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 3 -1.</_>\n        <_>\n          9 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 2 -1.</_>\n        <_>\n          8 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 3 1 -1.</_>\n        <_>\n          12 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 1 -1.</_>\n        <_>\n          7 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 2 -1.</_>\n        <_>\n          11 2 2 1 2.</_>\n        <_>\n          9 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 3 -1.</_>\n        <_>\n          4 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 14 -1.</_>\n        <_>\n          7 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 12 3 -1.</_>\n        <_>\n          8 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 6 -1.</_>\n        <_>\n          9 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 8 -1.</_>\n        <_>\n          9 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 12 -1.</_>\n        <_>\n          9 10 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 8 -1.</_>\n        <_>\n          2 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 2 -1.</_>\n        <_>\n          12 1 3 1 2.</_>\n        <_>\n          9 2 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 12 14 -1.</_>\n        <_>\n          1 10 12 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          10 12 2 1 2.</_>\n        <_>\n          8 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 2 -1.</_>\n        <_>\n          1 9 5 1 2.</_>\n        <_>\n          6 10 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 3 -1.</_>\n        <_>\n          6 9 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 5 3 -1.</_>\n        <_>\n          9 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 3 -1.</_>\n        <_>\n          8 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 2 -1.</_>\n        <_>\n          7 8 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 2 -1.</_>\n        <_>\n          5 7 4 1 2.</_>\n        <_>\n          9 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 2 -1.</_>\n        <_>\n          4 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 3 3 -1.</_>\n        <_>\n          5 9 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 6 -1.</_>\n        <_>\n          18 3 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 6 -1.</_>\n        <_>\n          1 3 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 14 1 2 -1.</_>\n        <_>\n          17 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 4 3 -1.</_>\n        <_>\n          6 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 3 -1.</_>\n        <_>\n          5 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 8 -1.</_>\n        <_>\n          12 5 3 4 2.</_>\n        <_>\n          9 9 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 8 -1.</_>\n        <_>\n          5 5 3 4 2.</_>\n        <_>\n          8 9 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 6 -1.</_>\n        <_>\n          16 4 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 20 -1.</_>\n        <_>\n          3 0 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 3 2 -1.</_>\n        <_>\n          13 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 2 -1.</_>\n        <_>\n          6 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 1 -1.</_>\n        <_>\n          11 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 3 -1.</_>\n        <_>\n          4 0 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 2 5 -1.</_>\n        <_>\n          15 0 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 2 -1.</_>\n        <_>\n          5 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 15 -1.</_>\n        <_>\n          9 0 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 1 -1.</_>\n        <_>\n          7 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 4 -1.</_>\n        <_>\n          13 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 1 -1.</_>\n        <_>\n          7 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 2 -1.</_>\n        <_>\n          12 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 6 -1.</_>\n        <_>\n          0 4 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 2 -1.</_>\n        <_>\n          12 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 3 3 -1.</_>\n        <_>\n          2 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 6 10 -1.</_>\n        <_>\n          16 8 3 5 2.</_>\n        <_>\n          13 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 2 -1.</_>\n        <_>\n          0 10 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 2 -1.</_>\n        <_>\n          13 11 1 1 2.</_>\n        <_>\n          12 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 3 3 -1.</_>\n        <_>\n          3 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 2 -1.</_>\n        <_>\n          12 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 2 -1.</_>\n        <_>\n          5 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 9 9 -1.</_>\n        <_>\n          9 8 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 7 -1.</_>\n        <_>\n          6 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 5 -1.</_>\n        <_>\n          9 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 2 -1.</_>\n        <_>\n          6 11 1 1 2.</_>\n        <_>\n          7 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 3 2 -1.</_>\n        <_>\n          15 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 3 2 -1.</_>\n        <_>\n          2 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 8 -1.</_>\n        <_>\n          17 12 3 4 2.</_>\n        <_>\n          14 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 6 -1.</_>\n        <_>\n          7 8 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 17 -1.</_>\n        <_>\n          8 2 6 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 1 -1.</_>\n        <_>\n          7 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 5 -1.</_>\n        <_>\n          9 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 5 -1.</_>\n        <_>\n          7 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          10 9 6 2 2.</_>\n        <_>\n          4 11 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 6 2 -1.</_>\n        <_>\n          5 15 3 1 2.</_>\n        <_>\n          8 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 3 -1.</_>\n        <_>\n          10 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 2 -1.</_>\n        <_>\n          0 13 10 1 2.</_>\n        <_>\n          10 14 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 8 -1.</_>\n        <_>\n          10 9 6 4 2.</_>\n        <_>\n          4 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 3 6 -1.</_>\n        <_>\n          8 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 2 -1.</_>\n        <_>\n          10 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 2 -1.</_>\n        <_>\n          9 12 1 1 2.</_>\n        <_>\n          10 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 14 4 -1.</_>\n        <_>\n          11 11 7 2 2.</_>\n        <_>\n          4 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 2 -1.</_>\n        <_>\n          8 6 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 3 -1.</_>\n        <_>\n          12 10 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 1 2 -1.</_>\n        <_>\n          2 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 6 12 -1.</_>\n        <_>\n          16 8 3 6 2.</_>\n        <_>\n          13 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 12 -1.</_>\n        <_>\n          1 8 3 6 2.</_>\n        <_>\n          4 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 10 -1.</_>\n        <_>\n          12 0 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 8 4 -1.</_>\n        <_>\n          5 11 4 2 2.</_>\n        <_>\n          9 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 8 4 -1.</_>\n        <_>\n          14 16 4 2 2.</_>\n        <_>\n          10 18 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 6 -1.</_>\n        <_>\n          9 7 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 10 -1.</_>\n        <_>\n          10 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 9 -1.</_>\n        <_>\n          8 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 19 2 1 -1.</_>\n        <_>\n          12 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 9 -1.</_>\n        <_>\n          3 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 4 -1.</_>\n        <_>\n          9 5 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 4 -1.</_>\n        <_>\n          9 6 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 2 8 -1.</_>\n        <_>\n          14 9 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 5 12 -1.</_>\n        <_>\n          7 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 2 6 -1.</_>\n        <_>\n          14 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 2 6 -1.</_>\n        <_>\n          4 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 10 4 -1.</_>\n        <_>\n          13 15 5 2 2.</_>\n        <_>\n          8 17 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 2 2 -1.</_>\n        <_>\n          7 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 2 -1.</_>\n        <_>\n          11 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 6 -1.</_>\n        <_>\n          2 2 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 2 -1.</_>\n        <_>\n          11 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 10 3 -1.</_>\n        <_>\n          4 12 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 2 -1.</_>\n        <_>\n          11 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 2 -1.</_>\n        <_>\n          3 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 6 -1.</_>\n        <_>\n          0 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 3 -1.</_>\n        <_>\n          9 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 2 -1.</_>\n        <_>\n          6 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 3 -1.</_>\n        <_>\n          15 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 2 2 -1.</_>\n        <_>\n          10 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 4 3 -1.</_>\n        <_>\n          5 1 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 1 -1.</_>\n        <_>\n          10 0 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 3 -1.</_>\n        <_>\n          15 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 4 -1.</_>\n        <_>\n          1 4 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 6 -1.</_>\n        <_>\n          16 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 3 6 -1.</_>\n        <_>\n          1 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 6 -1.</_>\n        <_>\n          12 2 6 3 2.</_>\n        <_>\n          6 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 3 -1.</_>\n        <_>\n          8 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 14 6 -1.</_>\n        <_>\n          11 2 7 3 2.</_>\n        <_>\n          4 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 3 -1.</_>\n        <_>\n          8 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 3 -1.</_>\n        <_>\n          15 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 2 -1.</_>\n        <_>\n          7 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 3 -1.</_>\n        <_>\n          7 13 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 4 -1.</_>\n        <_>\n          5 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 3 -1.</_>\n        <_>\n          12 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 3 -1.</_>\n        <_>\n          7 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 3 6 -1.</_>\n        <_>\n          17 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 7 -1.</_>\n        <_>\n          7 6 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 3 6 -1.</_>\n        <_>\n          17 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 3 -1.</_>\n        <_>\n          3 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 3 6 -1.</_>\n        <_>\n          17 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 3 6 -1.</_>\n        <_>\n          2 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 1 -1.</_>\n        <_>\n          7 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 8 7 -1.</_>\n        <_>\n          4 9 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 2 -1.</_>\n        <_>\n          12 12 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 2 -1.</_>\n        <_>\n          0 12 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 3 -1.</_>\n        <_>\n          9 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          4 10 6 2 2.</_>\n        <_>\n          10 12 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 7 -1.</_>\n        <_>\n          10 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 5 -1.</_>\n        <_>\n          8 2 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 4 6 -1.</_>\n        <_>\n          11 12 2 3 2.</_>\n        <_>\n          9 15 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 6 -1.</_>\n        <_>\n          9 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 2 -1.</_>\n        <_>\n          15 5 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 4 -1.</_>\n        <_>\n          14 4 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 6 1 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 10 -1.</_>\n        <_>\n          9 7 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 6 -1.</_>\n        <_>\n          11 12 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 1 -1.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 2 2 -1.</_>\n        <_>\n          10 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 2 2 -1.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 2 -1.</_>\n        <_>\n          13 7 1 1 2.</_>\n        <_>\n          12 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 2 -1.</_>\n        <_>\n          5 7 1 1 2.</_>\n        <_>\n          6 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 14 -1.</_>\n        <_>\n          14 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 14 -1.</_>\n        <_>\n          5 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 14 -1.</_>\n        <_>\n          14 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 3 16 -1.</_>\n        <_>\n          5 2 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 10 -1.</_>\n        <_>\n          7 7 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 7 3 -1.</_>\n        <_>\n          6 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 10 12 -1.</_>\n        <_>\n          14 2 5 6 2.</_>\n        <_>\n          9 8 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 2 -1.</_>\n        <_>\n          6 8 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          8 16 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 3 -1.</_>\n        <_>\n          6 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 6 -1.</_>\n        <_>\n          16 4 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 2 -1.</_>\n        <_>\n          6 6 2 1 2.</_>\n        <_>\n          8 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 6 -1.</_>\n        <_>\n          16 4 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 6 -1.</_>\n        <_>\n          0 4 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 6 -1.</_>\n        <_>\n          9 6 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 10 -1.</_>\n        <_>\n          3 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          9 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 3 -1.</_>\n        <_>\n          3 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 3 2 -1.</_>\n        <_>\n          13 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 10 4 -1.</_>\n        <_>\n          2 16 5 2 2.</_>\n        <_>\n          7 18 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 6 -1.</_>\n        <_>\n          10 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 1 3 -1.</_>\n        <_>\n          7 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 16 6 3 -1.</_>\n        <_>\n          14 17 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 10 3 -1.</_>\n        <_>\n          7 5 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 4 -1.</_>\n        <_>\n          0 6 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 9 -1.</_>\n        <_>\n          13 14 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 9 -1.</_>\n        <_>\n          4 14 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 1 -1.</_>\n        <_>\n          9 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 17 -1.</_>\n        <_>\n          7 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 3 -1.</_>\n        <_>\n          10 3 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 4 -1.</_>\n        <_>\n          7 2 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 8 2 -1.</_>\n        <_>\n          12 2 4 1 2.</_>\n        <_>\n          8 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 6 -1.</_>\n        <_>\n          8 3 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 2 2 -1.</_>\n        <_>\n          9 18 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 14 -1.</_>\n        <_>\n          1 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 7 3 -1.</_>\n        <_>\n          12 1 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 1 2 -1.</_>\n        <_>\n          1 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 8 -1.</_>\n        <_>\n          15 12 1 4 2.</_>\n        <_>\n          14 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 7 3 -1.</_>\n        <_>\n          1 1 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 8 -1.</_>\n        <_>\n          15 12 1 4 2.</_>\n        <_>\n          14 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 0 4 6 2.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 9 -1.</_>\n        <_>\n          6 4 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 2 2 -1.</_>\n        <_>\n          5 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 6 6 -1.</_>\n        <_>\n          16 14 3 3 2.</_>\n        <_>\n          13 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 20 2 -1.</_>\n        <_>\n          0 17 10 1 2.</_>\n        <_>\n          10 18 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 2 6 -1.</_>\n        <_>\n          11 3 1 3 2.</_>\n        <_>\n          10 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 2 -1.</_>\n        <_>\n          8 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 13 -1.</_>\n        <_>\n          10 7 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 10 5 -1.</_>\n        <_>\n          10 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 10 -1.</_>\n        <_>\n          10 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 1 -1.</_>\n        <_>\n          6 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 7 -1.</_>\n        <_>\n          10 3 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 7 -1.</_>\n        <_>\n          7 3 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 5 -1.</_>\n        <_>\n          7 7 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 4 3 -1.</_>\n        <_>\n          5 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 12 6 -1.</_>\n        <_>\n          14 14 6 3 2.</_>\n        <_>\n          8 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          0 13 10 2 2.</_>\n        <_>\n          10 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 14 2 -1.</_>\n        <_>\n          11 5 7 1 2.</_>\n        <_>\n          4 6 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 10 12 -1.</_>\n        <_>\n          1 2 5 6 2.</_>\n        <_>\n          6 8 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 3 -1.</_>\n        <_>\n          6 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 2 3 -1.</_>\n        <_>\n          8 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 4 2 -1.</_>\n        <_>\n          5 15 2 1 2.</_>\n        <_>\n          7 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 1 3 -1.</_>\n        <_>\n          10 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 4 4 -1.</_>\n        <_>\n          8 16 2 2 2.</_>\n        <_>\n          10 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 6 -1.</_>\n        <_>\n          6 14 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 5 2 -1.</_>\n        <_>\n          2 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 6 6 -1.</_>\n        <_>\n          16 14 3 3 2.</_>\n        <_>\n          13 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 4 -1.</_>\n        <_>\n          7 9 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 6 6 -1.</_>\n        <_>\n          16 14 3 3 2.</_>\n        <_>\n          13 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 1 6 -1.</_>\n        <_>\n          0 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 20 -1.</_>\n        <_>\n          5 10 15 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 6 6 -1.</_>\n        <_>\n          1 14 3 3 2.</_>\n        <_>\n          4 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 6 -1.</_>\n        <_>\n          10 14 2 3 2.</_>\n        <_>\n          8 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 1 -1.</_>\n        <_>\n          8 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 4 6 -1.</_>\n        <_>\n          14 14 2 3 2.</_>\n        <_>\n          12 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 4 6 -1.</_>\n        <_>\n          4 14 2 3 2.</_>\n        <_>\n          6 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 2 6 -1.</_>\n        <_>\n          14 14 1 3 2.</_>\n        <_>\n          13 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 2 6 -1.</_>\n        <_>\n          5 14 1 3 2.</_>\n        <_>\n          6 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 12 -1.</_>\n        <_>\n          7 4 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 2 -1.</_>\n        <_>\n          4 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 13 -1.</_>\n        <_>\n          11 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 13 -1.</_>\n        <_>\n          8 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 3 -1.</_>\n        <_>\n          10 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 3 2 -1.</_>\n        <_>\n          4 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 6 8 -1.</_>\n        <_>\n          16 12 3 4 2.</_>\n        <_>\n          13 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 5 -1.</_>\n        <_>\n          9 6 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 2 7 -1.</_>\n        <_>\n          17 11 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 8 2 -1.</_>\n        <_>\n          7 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 3 -1.</_>\n        <_>\n          6 10 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 4 3 -1.</_>\n        <_>\n          4 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 4 3 -1.</_>\n        <_>\n          11 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 17 12 -1.</_>\n        <_>\n          1 8 17 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 4 3 -1.</_>\n        <_>\n          11 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 3 -1.</_>\n        <_>\n          4 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 5 3 -1.</_>\n        <_>\n          12 4 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 2 7 -1.</_>\n        <_>\n          2 11 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 8 -1.</_>\n        <_>\n          16 12 1 4 2.</_>\n        <_>\n          15 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 11 3 -1.</_>\n        <_>\n          4 9 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 2 -1.</_>\n        <_>\n          12 13 3 1 2.</_>\n        <_>\n          9 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 4 3 -1.</_>\n        <_>\n          6 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          10 12 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 3 -1.</_>\n        <_>\n          5 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 3 -1.</_>\n        <_>\n          9 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 3 -1.</_>\n        <_>\n          0 3 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 8 -1.</_>\n        <_>\n          16 12 1 4 2.</_>\n        <_>\n          15 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 8 -1.</_>\n        <_>\n          3 12 1 4 2.</_>\n        <_>\n          4 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 3 6 -1.</_>\n        <_>\n          14 15 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 3 6 -1.</_>\n        <_>\n          3 15 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 2 -1.</_>\n        <_>\n          11 5 5 1 2.</_>\n        <_>\n          6 6 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 14 6 -1.</_>\n        <_>\n          2 17 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 2 2 -1.</_>\n        <_>\n          4 16 1 1 2.</_>\n        <_>\n          5 17 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 2 3 -1.</_>\n        <_>\n          10 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 20 2 -1.</_>\n        <_>\n          0 17 10 1 2.</_>\n        <_>\n          10 18 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 1 3 -1.</_>\n        <_>\n          13 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 3 2 -1.</_>\n        <_>\n          9 13 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 3 3 -1.</_>\n        <_>\n          13 2 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 2 2 -1.</_>\n        <_>\n          3 18 1 1 2.</_>\n        <_>\n          4 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 4 -1.</_>\n        <_>\n          10 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 3 -1.</_>\n        <_>\n          6 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 5 2 -1.</_>\n        <_>\n          13 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 2 -1.</_>\n        <_>\n          7 14 3 1 2.</_>\n        <_>\n          10 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 4 -1.</_>\n        <_>\n          12 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 12 6 -1.</_>\n        <_>\n          5 13 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 5 2 -1.</_>\n        <_>\n          14 12 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 14 4 -1.</_>\n        <_>\n          2 15 7 2 2.</_>\n        <_>\n          9 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 2 -1.</_>\n        <_>\n          10 7 7 1 2.</_>\n        <_>\n          3 8 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 4 2 -1.</_>\n        <_>\n          1 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 14 -1.</_>\n        <_>\n          16 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 1 3 -1.</_>\n        <_>\n          4 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 14 -1.</_>\n        <_>\n          16 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 3 7 -1.</_>\n        <_>\n          2 10 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 9 2 -1.</_>\n        <_>\n          8 13 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 1 -1.</_>\n        <_>\n          10 6 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 4 -1.</_>\n        <_>\n          8 4 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 2 -1.</_>\n        <_>\n          0 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 9 -1.</_>\n        <_>\n          5 6 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 10 -1.</_>\n        <_>\n          15 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 2 7 -1.</_>\n        <_>\n          9 2 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 12 1 -1.</_>\n        <_>\n          11 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 9 1 -1.</_>\n        <_>\n          6 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 1 4 -1.</_>\n        <_>\n          15 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 4 -1.</_>\n        <_>\n          7 10 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 1 6 -1.</_>\n        <_>\n          15 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 6 3 -1.</_>\n        <_>\n          7 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 2 16 -1.</_>\n        <_>\n          15 3 1 8 2.</_>\n        <_>\n          14 11 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 1 6 -1.</_>\n        <_>\n          4 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 5 2 -1.</_>\n        <_>\n          12 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 4 2 -1.</_>\n        <_>\n          6 18 2 1 2.</_>\n        <_>\n          8 19 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 10 -1.</_>\n        <_>\n          10 4 8 5 2.</_>\n        <_>\n          2 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 1 10 -1.</_>\n        <_>\n          6 10 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 2 -1.</_>\n        <_>\n          9 8 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 2 -1.</_>\n        <_>\n          6 8 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 6 -1.</_>\n        <_>\n          9 7 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 2 -1.</_>\n        <_>\n          9 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 3 -1.</_>\n        <_>\n          1 1 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 7 2 -1.</_>\n        <_>\n          11 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 18 -1.</_>\n        <_>\n          5 7 10 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 3 2 -1.</_>\n        <_>\n          18 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 1 3 -1.</_>\n        <_>\n          8 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          3 16 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 4 -1.</_>\n        <_>\n          1 2 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 5 2 -1.</_>\n        <_>\n          12 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 5 2 -1.</_>\n        <_>\n          3 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 3 -1.</_>\n        <_>\n          10 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 2 3 -1.</_>\n        <_>\n          8 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 3 -1.</_>\n        <_>\n          14 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 3 -1.</_>\n        <_>\n          7 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 4 -1.</_>\n        <_>\n          10 6 5 2 2.</_>\n        <_>\n          5 8 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 1 6 -1.</_>\n        <_>\n          9 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 2 -1.</_>\n        <_>\n          11 12 1 1 2.</_>\n        <_>\n          10 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 3 -1.</_>\n        <_>\n          4 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 6 -1.</_>\n        <_>\n          14 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 2 3 -1.</_>\n        <_>\n          8 18 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 6 -1.</_>\n        <_>\n          16 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 6 -1.</_>\n        <_>\n          0 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 2 3 -1.</_>\n        <_>\n          14 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 8 1 -1.</_>\n        <_>\n          8 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 3 -1.</_>\n        <_>\n          8 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 10 6 -1.</_>\n        <_>\n          5 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 2 -1.</_>\n        <_>\n          8 16 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 6 -1.</_>\n        <_>\n          7 12 2 3 2.</_>\n        <_>\n          9 15 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 3 1 -1.</_>\n        <_>\n          11 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 10 -1.</_>\n        <_>\n          9 7 1 5 2.</_>\n        <_>\n          10 12 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 6 -1.</_>\n        <_>\n          10 0 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 2 6 -1.</_>\n        <_>\n          3 13 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 1 2 -1.</_>\n        <_>\n          16 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 6 6 -1.</_>\n        <_>\n          1 14 3 3 2.</_>\n        <_>\n          4 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 6 -1.</_>\n        <_>\n          14 1 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 2 2 -1.</_>\n        <_>\n          8 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 3 -1.</_>\n        <_>\n          10 9 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          8 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 3 -1.</_>\n        <_>\n          14 0 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 9 -1.</_>\n        <_>\n          7 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 4 15 -1.</_>\n        <_>\n          11 5 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 15 -1.</_>\n        <_>\n          7 5 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 3 -1.</_>\n        <_>\n          14 0 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 3 -1.</_>\n        <_>\n          5 0 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 2 -1.</_>\n        <_>\n          12 12 1 1 2.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 2 2 -1.</_>\n        <_>\n          7 12 1 1 2.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 4 -1.</_>\n        <_>\n          13 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 3 -1.</_>\n        <_>\n          4 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 2 -1.</_>\n        <_>\n          12 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 3 2 -1.</_>\n        <_>\n          9 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 2 -1.</_>\n        <_>\n          10 9 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 3 2 -1.</_>\n        <_>\n          9 9 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 4 -1.</_>\n        <_>\n          13 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 4 -1.</_>\n        <_>\n          6 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 4 -1.</_>\n        <_>\n          10 14 6 2 2.</_>\n        <_>\n          4 16 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 2 3 -1.</_>\n        <_>\n          8 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 3 8 -1.</_>\n        <_>\n          10 14 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 8 -1.</_>\n        <_>\n          8 10 2 4 2.</_>\n        <_>\n          10 14 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 1 -1.</_>\n        <_>\n          11 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 6 -1.</_>\n        <_>\n          9 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 1 -1.</_>\n        <_>\n          11 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 1 -1.</_>\n        <_>\n          8 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 14 -1.</_>\n        <_>\n          5 9 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 2 10 -1.</_>\n        <_>\n          2 1 1 5 2.</_>\n        <_>\n          3 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 2 3 -1.</_>\n        <_>\n          14 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 3 3 -1.</_>\n        <_>\n          3 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 3 3 -1.</_>\n        <_>\n          17 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 3 -1.</_>\n        <_>\n          0 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 6 2 -1.</_>\n        <_>\n          16 5 3 1 2.</_>\n        <_>\n          13 6 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 19 12 1 -1.</_>\n        <_>\n          8 19 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 4 -1.</_>\n        <_>\n          12 14 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 1 3 -1.</_>\n        <_>\n          3 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 6 4 -1.</_>\n        <_>\n          11 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 3 10 -1.</_>\n        <_>\n          3 10 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 2 4 -1.</_>\n        <_>\n          12 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 4 -1.</_>\n        <_>\n          7 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 3 -1.</_>\n        <_>\n          10 14 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 3 -1.</_>\n        <_>\n          10 1 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 2 -1.</_>\n        <_>\n          11 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 2 -1.</_>\n        <_>\n          8 6 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 2 -1.</_>\n        <_>\n          9 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 6 -1.</_>\n        <_>\n          2 11 8 3 2.</_>\n        <_>\n          10 14 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 2 -1.</_>\n        <_>\n          13 7 1 1 2.</_>\n        <_>\n          12 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 3 -1.</_>\n        <_>\n          9 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 2 -1.</_>\n        <_>\n          10 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 12 -1.</_>\n        <_>\n          5 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 2 -1.</_>\n        <_>\n          13 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 2 -1.</_>\n        <_>\n          5 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 2 3 -1.</_>\n        <_>\n          4 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 6 -1.</_>\n        <_>\n          10 14 1 3 2.</_>\n        <_>\n          9 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 3 2 -1.</_>\n        <_>\n          9 14 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 6 -1.</_>\n        <_>\n          11 5 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 6 -1.</_>\n        <_>\n          7 5 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 1 2 -1.</_>\n        <_>\n          13 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 2 -1.</_>\n        <_>\n          0 3 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 1 2 -1.</_>\n        <_>\n          13 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 2 -1.</_>\n        <_>\n          5 7 1 1 2.</_>\n        <_>\n          6 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 7 -1.</_>\n        <_>\n          13 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 1 2 -1.</_>\n        <_>\n          6 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 7 -1.</_>\n        <_>\n          12 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 16 -1.</_>\n        <_>\n          0 3 1 8 2.</_>\n        <_>\n          1 11 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 7 -1.</_>\n        <_>\n          12 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 7 -1.</_>\n        <_>\n          7 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 8 4 -1.</_>\n        <_>\n          11 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 8 4 -1.</_>\n        <_>\n          5 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 7 -1.</_>\n        <_>\n          13 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 7 -1.</_>\n        <_>\n          6 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 14 -1.</_>\n        <_>\n          18 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 4 -1.</_>\n        <_>\n          6 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 1 2 -1.</_>\n        <_>\n          14 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 6 -1.</_>\n        <_>\n          0 1 9 3 2.</_>\n        <_>\n          9 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 1 2 -1.</_>\n        <_>\n          14 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 14 -1.</_>\n        <_>\n          0 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 12 -1.</_>\n        <_>\n          18 0 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 3 -1.</_>\n        <_>\n          0 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 14 16 -1.</_>\n        <_>\n          6 8 14 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 12 -1.</_>\n        <_>\n          1 0 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 7 -1.</_>\n        <_>\n          14 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 1 2 -1.</_>\n        <_>\n          5 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 6 -1.</_>\n        <_>\n          14 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 7 2 -1.</_>\n        <_>\n          5 8 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 9 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 1 -1.</_>\n        <_>\n          7 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 4 -1.</_>\n        <_>\n          16 0 3 2 2.</_>\n        <_>\n          13 2 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 12 -1.</_>\n        <_>\n          1 6 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 17 12 -1.</_>\n        <_>\n          3 6 17 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 7 3 -1.</_>\n        <_>\n          5 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 3 3 -1.</_>\n        <_>\n          3 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 6 -1.</_>\n        <_>\n          14 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 6 -1.</_>\n        <_>\n          0 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 3 -1.</_>\n        <_>\n          4 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 6 -1.</_>\n        <_>\n          18 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 9 -1.</_>\n        <_>\n          10 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 2 -1.</_>\n        <_>\n          6 6 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 2 -1.</_>\n        <_>\n          6 5 2 1 2.</_>\n        <_>\n          8 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 2 3 -1.</_>\n        <_>\n          10 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 1 3 -1.</_>\n        <_>\n          9 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 2 -1.</_>\n        <_>\n          9 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 4 3 -1.</_>\n        <_>\n          0 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 6 -1.</_>\n        <_>\n          6 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 4 -1.</_>\n        <_>\n          1 0 3 2 2.</_>\n        <_>\n          4 2 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 7 -1.</_>\n        <_>\n          14 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 2 -1.</_>\n        <_>\n          9 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 6 10 -1.</_>\n        <_>\n          11 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 19 2 -1.</_>\n        <_>\n          0 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 9 -1.</_>\n        <_>\n          9 8 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 7 -1.</_>\n        <_>\n          5 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 12 -1.</_>\n        <_>\n          10 6 2 6 2.</_>\n        <_>\n          8 12 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 4 -1.</_>\n        <_>\n          0 4 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 7 -1.</_>\n        <_>\n          9 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 4 -1.</_>\n        <_>\n          10 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 4 -1.</_>\n        <_>\n          9 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 1 -1.</_>\n        <_>\n          9 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 4 4 -1.</_>\n        <_>\n          7 14 2 2 2.</_>\n        <_>\n          9 16 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 4 6 -1.</_>\n        <_>\n          15 14 2 3 2.</_>\n        <_>\n          13 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 1 8 -1.</_>\n        <_>\n          7 12 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 2 8 -1.</_>\n        <_>\n          17 0 1 4 2.</_>\n        <_>\n          16 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 2 8 -1.</_>\n        <_>\n          2 0 1 4 2.</_>\n        <_>\n          3 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 3 -1.</_>\n        <_>\n          6 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 3 10 -1.</_>\n        <_>\n          7 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 2 -1.</_>\n        <_>\n          9 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 8 -1.</_>\n        <_>\n          7 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          9 10 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 3 3 -1.</_>\n        <_>\n          7 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 2 -1.</_>\n        <_>\n          6 1 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 14 -1.</_>\n        <_>\n          7 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 1 -1.</_>\n        <_>\n          7 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          9 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 9 -1.</_>\n        <_>\n          10 3 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 14 2 3 -1.</_>\n        <_>\n          18 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 3 1 -1.</_>\n        <_>\n          8 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 4 -1.</_>\n        <_>\n          11 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 3 6 -1.</_>\n        <_>\n          8 14 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 4 -1.</_>\n        <_>\n          11 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 4 -1.</_>\n        <_>\n          8 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 9 -1.</_>\n        <_>\n          7 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 2 3 -1.</_>\n        <_>\n          0 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 8 3 -1.</_>\n        <_>\n          8 3 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 6 -1.</_>\n        <_>\n          0 4 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 3 -1.</_>\n        <_>\n          9 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 4 -1.</_>\n        <_>\n          0 17 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 6 -1.</_>\n        <_>\n          1 17 18 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 6 -1.</_>\n        <_>\n          0 0 5 3 2.</_>\n        <_>\n          5 3 5 3 2.</_></rects></_></features></cascade>\n</opencv_storage>\n"
  },
  {
    "path": "FaceLivenessDetection/classifiers/haarcascade_frontalface_alt_tree.xml",
    "content": "<?xml version=\"1.0\"?>\n<!--\n    Stump-based 20x20 gentle adaboost frontal face detector.\n    This detector uses tree of stage classifiers instead of a cascade\n    Created by Rainer Lienhart.\n\n////////////////////////////////////////////////////////////////////////////////////////\n\n  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n\n  By downloading, copying, installing or using the software you agree to this license.\n  If you do not agree to this license, do not download, install,\n  copy or use the software.\n\n\n                        Intel License Agreement\n                For Open Source Computer Vision Library\n\n Copyright (C) 2000, Intel Corporation, all rights reserved.\n Third party copyrights are property of their respective owners.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n   * Redistribution's of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n\n   * Redistribution's in binary form must reproduce the above copyright notice,\n     this list of conditions and the following disclaimer in the documentation\n     and/or other materials provided with the distribution.\n\n   * The name of Intel Corporation may not be used to endorse or promote products\n     derived from this software without specific prior written permission.\n\n This software is provided by the copyright holders and contributors \"as is\" and\n any express or implied warranties, including, but not limited to, the implied\n warranties of merchantability and fitness for a particular purpose are disclaimed.\n In no event shall the Intel Corporation or contributors be liable for any direct,\n indirect, incidental, special, exemplary, or consequential damages\n (including, but not limited to, procurement of substitute goods or services;\n loss of use, data, or profits; or business interruption) however caused\n and on any theory of liability, whether in contract, strict liability,\n or tort (including negligence or otherwise) arising in any way out of\n the use of this software, even if advised of the possibility of such damage.\n-->\n<opencv_storage>\n<cascade type_id=\"opencv-cascade-classifier\"><stageType>BOOST</stageType>\n  <featureType>HAAR</featureType>\n  <height>20</height>\n  <width>20</width>\n  <stageParams>\n    <maxWeakCount>406</maxWeakCount></stageParams>\n  <featureParams>\n    <maxCatCount>0</maxCatCount></featureParams>\n  <stageNum>47</stageNum>\n  <stages>\n    <_>\n      <maxWeakCount>3</maxWeakCount>\n      <stageThreshold>-1.3442519903182983e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 0 3.7895569112151861e-03</internalNodes>\n          <leafValues>\n            -9.2945802211761475e-01 6.4119851589202881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1 1.2098110280930996e-02</internalNodes>\n          <leafValues>\n            -7.1810090541839600e-01 4.7141009569168091e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2 1.2138449819758534e-03</internalNodes>\n          <leafValues>\n            -7.2831612825393677e-01 3.0330690741539001e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>9</maxWeakCount>\n      <stageThreshold>-1.6378560066223145e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3 8.7510552257299423e-03</internalNodes>\n          <leafValues>\n            -8.5947072505950928e-01 3.6881381273269653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4 2.1986700594425201e-02</internalNodes>\n          <leafValues>\n            -6.0180151462554932e-01 3.2897830009460449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5 6.4913398819044232e-04</internalNodes>\n          <leafValues>\n            -7.9431951045989990e-01 2.5493299961090088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6 -1.0192029876634479e-03</internalNodes>\n          <leafValues>\n            2.2729329764842987e-01 -6.3627982139587402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7 1.3674780493602157e-03</internalNodes>\n          <leafValues>\n            -6.0014182329177856e-01 2.4118369817733765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8 1.0245250305160880e-03</internalNodes>\n          <leafValues>\n            -5.8542472124099731e-01 1.2550109624862671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 9 1.8465859815478325e-02</internalNodes>\n          <leafValues>\n            1.9563560187816620e-01 -6.7630231380462646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 10 4.0901508182287216e-03</internalNodes>\n          <leafValues>\n            -4.4916498661041260e-01 2.6677688956260681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 11 1.1358099989593029e-02</internalNodes>\n          <leafValues>\n            1.8783229589462280e-01 -6.1379361152648926e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>16</maxWeakCount>\n      <stageThreshold>-1.7317579984664917e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 12 -1.1588949710130692e-02</internalNodes>\n          <leafValues>\n            3.4567040205001831e-01 -7.6478981971740723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 13 5.1809530705213547e-03</internalNodes>\n          <leafValues>\n            2.4104920029640198e-01 -6.9623559713363647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 14 2.1468549966812134e-03</internalNodes>\n          <leafValues>\n            -8.0553662776947021e-01 1.9838610291481018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 15 -3.6556499544531107e-03</internalNodes>\n          <leafValues>\n            -7.1833139657974243e-01 1.2305679917335510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 16 -1.9701640121638775e-03</internalNodes>\n          <leafValues>\n            2.2777689993381500e-01 -4.7520169615745544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 17 -3.3645539078861475e-03</internalNodes>\n          <leafValues>\n            -4.6095049381256104e-01 2.0394650101661682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 18 -7.4126059189438820e-05</internalNodes>\n          <leafValues>\n            1.8213239312171936e-01 -4.7829270362854004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 19 -1.7571110278367996e-02</internalNodes>\n          <leafValues>\n            -7.1737551689147949e-01 1.1311130225658417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 20 6.3840472139418125e-03</internalNodes>\n          <leafValues>\n            -4.0205681324005127e-01 2.0730289816856384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 21 -1.4723399654030800e-02</internalNodes>\n          <leafValues>\n            -6.7558771371841431e-01 6.8973086774349213e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 22 -5.2889222279191017e-03</internalNodes>\n          <leafValues>\n            -6.2105172872543335e-01 1.3349360227584839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 23 2.7743630111217499e-02</internalNodes>\n          <leafValues>\n            1.1760850250720978e-01 -5.4641121625900269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 24 3.9427559822797775e-02</internalNodes>\n          <leafValues>\n            -2.1134279668331146e-01 3.9452999830245972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 25 8.6949411779642105e-03</internalNodes>\n          <leafValues>\n            1.2580950558185577e-01 -4.7989100217819214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 26 2.8245279099792242e-03</internalNodes>\n          <leafValues>\n            1.9653140008449554e-01 -4.0256679058074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 27 -2.8915189206600189e-02</internalNodes>\n          <leafValues>\n            -8.0616527795791626e-01 8.1882260739803314e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>29</maxWeakCount>\n      <stageThreshold>-1.9308480024337769e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 28 8.0171944573521614e-03</internalNodes>\n          <leafValues>\n            -6.8981552124023438e-01 2.4136860668659210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 29 -2.4478728882968426e-03</internalNodes>\n          <leafValues>\n            2.1353200078010559e-01 -6.4146691560745239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 30 1.7917619552463293e-03</internalNodes>\n          <leafValues>\n            -6.1445468664169312e-01 1.9236929714679718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 31 4.3905500206165016e-04</internalNodes>\n          <leafValues>\n            -7.5360429286956787e-01 1.5696890652179718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 32 -3.6769549478776753e-04</internalNodes>\n          <leafValues>\n            1.7380510270595551e-01 -5.8404499292373657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 33 -4.2802388779819012e-03</internalNodes>\n          <leafValues>\n            -6.6968989372253418e-01 1.1289729923009872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 34 3.5238768905401230e-03</internalNodes>\n          <leafValues>\n            1.2501940131187439e-01 -7.3299217224121094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 35 7.9299701610580087e-04</internalNodes>\n          <leafValues>\n            -4.4966199994087219e-01 2.1590930223464966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 36 4.4371088733896613e-04</internalNodes>\n          <leafValues>\n            -3.8909769058227539e-01 2.1181149780750275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 37 -2.7145470958203077e-03</internalNodes>\n          <leafValues>\n            -4.6716868877410889e-01 1.5038399398326874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 38 -6.9272058317437768e-04</internalNodes>\n          <leafValues>\n            -5.8596551418304443e-01 1.1714380234479904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 39 4.9261808395385742e-02</internalNodes>\n          <leafValues>\n            -1.3800150156021118e-01 4.9366238713264465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 40 -2.2837519645690918e-02</internalNodes>\n          <leafValues>\n            -6.3743507862091064e-01 1.2324090301990509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 41 4.8372112214565277e-03</internalNodes>\n          <leafValues>\n            -1.2391629815101624e-01 1.0620889812707901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 42 1.0256259702146053e-02</internalNodes>\n          <leafValues>\n            -1.8767049908638000e-01 2.9824170470237732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 43 1.0618680156767368e-02</internalNodes>\n          <leafValues>\n            1.0612460225820541e-01 -3.3244881033897400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 44 2.4113139137625694e-02</internalNodes>\n          <leafValues>\n            8.7200611829757690e-02 -6.6846621036529541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 45 -3.6754710599780083e-03</internalNodes>\n          <leafValues>\n            1.1043280363082886e-01 -4.4581958651542664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 46 -3.8996201008558273e-02</internalNodes>\n          <leafValues>\n            -7.0228111743927002e-01 8.1809490919113159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 47 1.5777100343257189e-03</internalNodes>\n          <leafValues>\n            1.5954199433326721e-01 -3.2860770821571350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 48 9.1089410707354546e-03</internalNodes>\n          <leafValues>\n            1.0326369851827621e-01 -4.4402560591697693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 49 -1.7051609233021736e-02</internalNodes>\n          <leafValues>\n            -5.5853348970413208e-01 6.2711499631404877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 50 1.3652660418301821e-03</internalNodes>\n          <leafValues>\n            -5.3934460878372192e-01 7.0839896798133850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 51 -1.1186149902641773e-02</internalNodes>\n          <leafValues>\n            -4.7260180115699768e-01 8.1019416451454163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 52 -1.1705270037055016e-02</internalNodes>\n          <leafValues>\n            2.4750089645385742e-01 -1.7778989672660828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 53 -9.7736932337284088e-02</internalNodes>\n          <leafValues>\n            -5.6177508831024170e-01 8.0921821296215057e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 54 -8.5228063166141510e-02</internalNodes>\n          <leafValues>\n            -5.2233248949050903e-01 7.2821393609046936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 55 -3.6733459681272507e-02</internalNodes>\n          <leafValues>\n            4.3623578548431396e-01 -9.9339507520198822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 56 -3.6704430822283030e-03</internalNodes>\n          <leafValues>\n            1.4834220707416534e-01 -2.7119669318199158e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>36</maxWeakCount>\n      <stageThreshold>-2.0711259841918945e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 57 -1.1610370129346848e-03</internalNodes>\n          <leafValues>\n            -5.6377887725830078e-01 2.3568780720233917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 58 1.1830299627035856e-03</internalNodes>\n          <leafValues>\n            1.5724280476570129e-01 -6.7728179693222046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 59 -2.1273950114846230e-03</internalNodes>\n          <leafValues>\n            -6.6150152683258057e-01 1.4943139255046844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 60 -1.1893469840288162e-01</internalNodes>\n          <leafValues>\n            5.3225821256637573e-01 -2.2968369722366333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 61 -1.3624870218336582e-02</internalNodes>\n          <leafValues>\n            -6.0635501146316528e-01 1.7001089453697205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 62 -6.3198682619258761e-04</internalNodes>\n          <leafValues>\n            -6.8972241878509521e-01 1.1584629863500595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 63 -4.4108428992331028e-03</internalNodes>\n          <leafValues>\n            -6.2967002391815186e-01 1.2430600076913834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 64 -2.2982239723205566e-02</internalNodes>\n          <leafValues>\n            -5.0497251749038696e-01 1.6636120155453682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 65 -2.3721898905932903e-03</internalNodes>\n          <leafValues>\n            -6.2462240457534790e-01 1.3793750107288361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 66 8.7364763021469116e-03</internalNodes>\n          <leafValues>\n            1.3996620476245880e-01 -5.4822951555252075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 67 6.7737072706222534e-02</internalNodes>\n          <leafValues>\n            -1.9172480702400208e-01 5.4700487852096558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 68 -4.0138149634003639e-03</internalNodes>\n          <leafValues>\n            -5.5429118871688843e-01 1.4517059922218323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 69 1.2857170077040792e-04</internalNodes>\n          <leafValues>\n            -5.1031237840652466e-01 1.1023940145969391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 70 -3.9688948541879654e-02</internalNodes>\n          <leafValues>\n            -6.1830729246139526e-01 9.6676096320152283e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 71 -1.6646150033921003e-03</internalNodes>\n          <leafValues>\n            1.6449889540672302e-01 -3.7186318635940552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 72 5.3499247878789902e-03</internalNodes>\n          <leafValues>\n            1.1145050078630447e-01 -3.7441021203994751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 73 -2.2904010489583015e-02</internalNodes>\n          <leafValues>\n            -5.8097589015960693e-01 1.1077260226011276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 74 1.0703450068831444e-02</internalNodes>\n          <leafValues>\n            4.4733259826898575e-02 -5.8116632699966431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 75 -4.2331559234298766e-04</internalNodes>\n          <leafValues>\n            -5.4423791170120239e-01 8.7089292705059052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 76 1.5554429963231087e-02</internalNodes>\n          <leafValues>\n            5.6884340941905975e-02 -3.7645170092582703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 77 -2.0539449527859688e-02</internalNodes>\n          <leafValues>\n            -3.8714569807052612e-01 1.1833839863538742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 78 -3.1234358903020620e-03</internalNodes>\n          <leafValues>\n            8.3635427057743073e-02 -1.9862389564514160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 79 2.3932829499244690e-02</internalNodes>\n          <leafValues>\n            7.9600542783737183e-02 -6.5370100736618042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 80 8.3920456469058990e-02</internalNodes>\n          <leafValues>\n            -1.0653129965066910e-01 4.8772820830345154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 81 1.6003159806132317e-02</internalNodes>\n          <leafValues>\n            8.3643212914466858e-02 -5.9207731485366821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 82 5.8071441017091274e-03</internalNodes>\n          <leafValues>\n            8.7997503578662872e-02 -3.3279138803482056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 83 -8.1104427576065063e-02</internalNodes>\n          <leafValues>\n            6.3775187730789185e-01 -6.7692361772060394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 84 4.5403029769659042e-02</internalNodes>\n          <leafValues>\n            -5.1510389894247055e-02 3.0225670337677002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 85 1.3877229765057564e-02</internalNodes>\n          <leafValues>\n            9.9967628717422485e-02 -4.6520909667015076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 86 3.4590709954500198e-02</internalNodes>\n          <leafValues>\n            -9.7614437341690063e-02 3.4678751230239868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 87 1.5704549849033356e-02</internalNodes>\n          <leafValues>\n            7.6344117522239685e-02 -5.3356319665908813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 88 -1.0420549660921097e-01</internalNodes>\n          <leafValues>\n            6.1890971660614014e-01 -4.4259760528802872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 89 1.3443189859390259e-01</internalNodes>\n          <leafValues>\n            -5.9853021055459976e-02 6.3635712862014771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 90 -2.5646309368312359e-03</internalNodes>\n          <leafValues>\n            -5.3600472211837769e-01 7.3116026818752289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 91 1.8647089600563049e-02</internalNodes>\n          <leafValues>\n            6.9856151938438416e-02 -5.6878322362899780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 92 1.5159539878368378e-02</internalNodes>\n          <leafValues>\n            1.8206339329481125e-02 -2.7663159370422363e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>7</maxWeakCount>\n      <stageThreshold>-2.1360809803009033e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 93 1.4778429269790649e-01</internalNodes>\n          <leafValues>\n            -8.9933121204376221e-01 5.7035928964614868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 94 2.9984670877456665e-01</internalNodes>\n          <leafValues>\n            -6.5394151210784912e-01 3.5054451227188110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 95 -7.9061716794967651e-02</internalNodes>\n          <leafValues>\n            4.4085291028022766e-01 -6.5087568759918213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 96 5.8428961783647537e-02</internalNodes>\n          <leafValues>\n            -4.2665359377861023e-01 5.8410567045211792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 97 -1.4664280228316784e-02</internalNodes>\n          <leafValues>\n            3.2435241341590881e-01 -5.9659618139266968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 98 3.9517199993133545e-01</internalNodes>\n          <leafValues>\n            -7.5798347592353821e-02 4.8659950494766235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 99 1.1040589958429337e-01</internalNodes>\n          <leafValues>\n            -8.4556102752685547e-01 2.1374569833278656e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>50</maxWeakCount>\n      <stageThreshold>-1.8755869865417480e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 100 3.7777079269289970e-03</internalNodes>\n          <leafValues>\n            1.8744400143623352e-01 -6.5354061126708984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 101 5.3003188222646713e-03</internalNodes>\n          <leafValues>\n            9.3951843678951263e-02 -5.6917887926101685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 102 -5.5426009930670261e-03</internalNodes>\n          <leafValues>\n            1.6031709313392639e-01 -5.1822239160537720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 103 -9.1971885412931442e-03</internalNodes>\n          <leafValues>\n            -5.7420462369918823e-01 1.4791400730609894e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 104 5.3701602155342698e-04</internalNodes>\n          <leafValues>\n            -7.0449697971343994e-01 1.0752149671316147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 105 -2.2125479299575090e-03</internalNodes>\n          <leafValues>\n            -5.0877428054809570e-01 1.1367189884185791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 106 1.1675730347633362e-02</internalNodes>\n          <leafValues>\n            8.4258683025836945e-02 -6.7384701967239380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 107 -2.0404369570314884e-03</internalNodes>\n          <leafValues>\n            1.6251119971275330e-01 -4.1435649991035461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 108 -7.6540438458323479e-03</internalNodes>\n          <leafValues>\n            -4.2833179235458374e-01 1.3060709834098816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 109 2.9370479285717010e-02</internalNodes>\n          <leafValues>\n            5.4651051759719849e-02 -3.4795379638671875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 110 -9.5828901976346970e-03</internalNodes>\n          <leafValues>\n            -4.8620718717575073e-01 1.1706890165805817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 111 6.0666278004646301e-03</internalNodes>\n          <leafValues>\n            -3.6553880572319031e-01 8.7813600897789001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 112 1.7992249922826886e-03</internalNodes>\n          <leafValues>\n            1.6035990417003632e-01 -3.0859109759330750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 113 -1.0092309676110744e-02</internalNodes>\n          <leafValues>\n            -3.9505869150161743e-01 1.1514779925346375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 114 2.5171819142997265e-03</internalNodes>\n          <leafValues>\n            -3.0043110251426697e-01 1.8256050348281860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 115 -1.7089240252971649e-02</internalNodes>\n          <leafValues>\n            -5.2173590660095215e-01 9.7457267343997955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 116 -5.5856268852949142e-02</internalNodes>\n          <leafValues>\n            5.3540021181106567e-01 -8.9221552014350891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 117 -2.3930610623210669e-03</internalNodes>\n          <leafValues>\n            -4.7012439370155334e-01 8.6141407489776611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 118 3.6918919067829847e-03</internalNodes>\n          <leafValues>\n            -2.7755591273307800e-01 1.5186099708080292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 119 2.1945969201624393e-03</internalNodes>\n          <leafValues>\n            -1.6867069900035858e-01 1.1952520161867142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 120 2.9675459954887629e-03</internalNodes>\n          <leafValues>\n            -3.8940680027008057e-01 1.0388910025358200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 121 1.9976729527115822e-03</internalNodes>\n          <leafValues>\n            9.1141343116760254e-02 -4.1050049662590027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 122 -2.0369699224829674e-02</internalNodes>\n          <leafValues>\n            -5.9968769550323486e-01 6.9301806390285492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 123 2.3318571038544178e-03</internalNodes>\n          <leafValues>\n            6.1892550438642502e-02 -3.2886800169944763e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 124 -4.2863588780164719e-02</internalNodes>\n          <leafValues>\n            -7.3844969272613525e-01 5.7071659713983536e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 125 1.1471749749034643e-03</internalNodes>\n          <leafValues>\n            -5.1379621028900146e-01 7.1196496486663818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 126 -1.3735669665038586e-02</internalNodes>\n          <leafValues>\n            -5.3785508871078491e-01 6.5542042255401611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 127 4.7165591269731522e-02</internalNodes>\n          <leafValues>\n            4.5389361679553986e-02 -6.8944799900054932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 128 -1.1204879730939865e-02</internalNodes>\n          <leafValues>\n            1.6932639479637146e-01 -2.3061719536781311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 129 -1.5478420257568359e-01</internalNodes>\n          <leafValues>\n            -7.7705371379852295e-01 1.2142470106482506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 130 5.8086342178285122e-03</internalNodes>\n          <leafValues>\n            1.1318100243806839e-01 -3.3206319808959961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 131 -2.8529569506645203e-02</internalNodes>\n          <leafValues>\n            -5.6747281551361084e-01 4.8734560608863831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 132 -3.8758948445320129e-02</internalNodes>\n          <leafValues>\n            5.9423100948333740e-01 -7.5139336287975311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 133 3.1037809327244759e-02</internalNodes>\n          <leafValues>\n            5.1973540335893631e-02 -5.8552652597427368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 134 7.4786080404010136e-06</internalNodes>\n          <leafValues>\n            -2.7623200416564941e-01 1.4088490605354309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 135 3.1000260263681412e-02</internalNodes>\n          <leafValues>\n            3.1331729143857956e-02 -5.6860172748565674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 136 -4.9860659986734390e-02</internalNodes>\n          <leafValues>\n            -8.2924622297286987e-01 3.8801580667495728e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 137 -4.2323280125856400e-02</internalNodes>\n          <leafValues>\n            -4.3062108755111694e-01 1.6579480841755867e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 138 9.1987219639122486e-04</internalNodes>\n          <leafValues>\n            -2.1154449880123138e-01 1.5517529845237732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 139 2.0559869706630707e-01</internalNodes>\n          <leafValues>\n            -6.2403179705142975e-02 3.2229611277580261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 140 2.9118418693542480e-01</internalNodes>\n          <leafValues>\n            3.9228469133377075e-02 -9.4128221273422241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 141 7.8337509185075760e-03</internalNodes>\n          <leafValues>\n            -1.4806599915027618e-01 1.7849209904670715e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 142 1.1393319815397263e-02</internalNodes>\n          <leafValues>\n            7.7987723052501678e-02 -4.2424258589744568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 143 -9.1807022690773010e-02</internalNodes>\n          <leafValues>\n            3.3689481019973755e-01 -5.6174129247665405e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 144 -1.6038250178098679e-02</internalNodes>\n          <leafValues>\n            -2.4954010546207428e-01 1.4570869505405426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 145 5.4830290377140045e-02</internalNodes>\n          <leafValues>\n            -1.5496000647544861e-01 2.0329600572586060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 146 2.4449700489640236e-02</internalNodes>\n          <leafValues>\n            6.0974378138780594e-02 -6.3072341680526733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 147 2.9260670766234398e-02</internalNodes>\n          <leafValues>\n            4.6833608299493790e-02 -3.7985381484031677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 148 3.9965552277863026e-03</internalNodes>\n          <leafValues>\n            -1.6927300393581390e-01 1.9100320339202881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 149 -6.9938853383064270e-02</internalNodes>\n          <leafValues>\n            5.4655587673187256e-01 -5.4965749382972717e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>25</maxWeakCount>\n      <stageThreshold>-1.9646480083465576e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 150 4.5835621654987335e-02</internalNodes>\n          <leafValues>\n            -4.9982848763465881e-01 4.0961080789566040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 151 2.6363100856542587e-02</internalNodes>\n          <leafValues>\n            -3.9193201065063477e-01 5.1567757129669189e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 152 1.5189830213785172e-02</internalNodes>\n          <leafValues>\n            -5.2216362953186035e-01 3.1368219852447510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 153 -2.0805280655622482e-02</internalNodes>\n          <leafValues>\n            3.7614479660987854e-01 -4.7375538945198059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 154 -7.4902721680700779e-03</internalNodes>\n          <leafValues>\n            1.6283489763736725e-01 -7.0384472608566284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 155 2.7719369530677795e-01</internalNodes>\n          <leafValues>\n            -1.6404120624065399e-01 3.3481580018997192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 156 6.4188443124294281e-02</internalNodes>\n          <leafValues>\n            -8.0176621675491333e-01 1.2763829529285431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 157 4.0668170899152756e-02</internalNodes>\n          <leafValues>\n            -3.3386930823326111e-01 2.8456181287765503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 158 7.4888020753860474e-03</internalNodes>\n          <leafValues>\n            -3.7188920378684998e-01 2.5932261347770691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 159 6.4942672848701477e-02</internalNodes>\n          <leafValues>\n            1.0372909903526306e-01 -7.1671068668365479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 160 -2.1149769891053438e-03</internalNodes>\n          <leafValues>\n            -7.5683927536010742e-01 7.9019591212272644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 161 -4.8293141298927367e-04</internalNodes>\n          <leafValues>\n            -4.9852079153060913e-01 8.1111326813697815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 162 1.3996459543704987e-01</internalNodes>\n          <leafValues>\n            8.7497599422931671e-02 -7.6389372348785400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 163 5.2211988717317581e-02</internalNodes>\n          <leafValues>\n            3.1640481203794479e-02 -5.3281372785568237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 164 3.0680459458380938e-03</internalNodes>\n          <leafValues>\n            -6.2458527088165283e-01 1.3869540393352509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 165 5.0478860735893250e-02</internalNodes>\n          <leafValues>\n            7.9063497483730316e-02 -7.4017041921615601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 166 -8.5122063755989075e-03</internalNodes>\n          <leafValues>\n            -4.9971660971641541e-01 1.1132259666919708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 167 7.0091806352138519e-02</internalNodes>\n          <leafValues>\n            9.7081907093524933e-02 -6.1879187822341919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 168 -2.7261190116405487e-03</internalNodes>\n          <leafValues>\n            9.7546629607677460e-02 -5.7760041952133179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 169 1.0676559992134571e-02</internalNodes>\n          <leafValues>\n            -2.9058128595352173e-01 1.8426120281219482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 170 6.3848652644082904e-04</internalNodes>\n          <leafValues>\n            1.3869750499725342e-01 -4.2546540498733521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 171 -4.7957260161638260e-02</internalNodes>\n          <leafValues>\n            -7.3249137401580811e-01 4.1188109666109085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 172 1.7140049487352371e-02</internalNodes>\n          <leafValues>\n            -3.1973451375961304e-01 1.6840089857578278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 173 7.8544542193412781e-02</internalNodes>\n          <leafValues>\n            5.0053231418132782e-02 -7.1410048007965088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 174 -1.1342849582433701e-02</internalNodes>\n          <leafValues>\n            -3.8810971379280090e-01 1.2976409494876862e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>53</maxWeakCount>\n      <stageThreshold>-2.1222629547119141e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 175 -8.6751781054772437e-05</internalNodes>\n          <leafValues>\n            2.5179910659790039e-01 -6.7723119258880615e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 176 2.0550179481506348e-01</internalNodes>\n          <leafValues>\n            2.0217150449752808e-02 -3.3618199825286865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 177 1.3893260061740875e-01</internalNodes>\n          <leafValues>\n            1.0678269714117050e-01 -8.6710119247436523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 178 2.6432450395077467e-03</internalNodes>\n          <leafValues>\n            -4.1057088971138000e-01 2.5603920221328735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 179 -1.6145260306075215e-03</internalNodes>\n          <leafValues>\n            1.7448160052299500e-01 -5.0290131568908691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 180 -4.6492749825119972e-03</internalNodes>\n          <leafValues>\n            -8.3960932493209839e-01 1.0409969836473465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 181 -5.5983918718993664e-03</internalNodes>\n          <leafValues>\n            -5.2673357725143433e-01 1.2114489823579788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 182 2.1482799202203751e-03</internalNodes>\n          <leafValues>\n            8.6831927299499512e-02 -5.2384740114212036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 183 -2.2942349314689636e-03</internalNodes>\n          <leafValues>\n            1.5666730701923370e-01 -3.9387580752372742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 184 -1.0809659725055099e-03</internalNodes>\n          <leafValues>\n            9.4777546823024750e-02 -5.7967597246170044e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 185 -1.8739879131317139e-02</internalNodes>\n          <leafValues>\n            -4.3780770897865295e-01 1.2754319608211517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 186 -2.0956669468432665e-03</internalNodes>\n          <leafValues>\n            2.1275860071182251e-01 -1.7645539343357086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 187 -6.1370119452476501e-02</internalNodes>\n          <leafValues>\n            -6.7007988691329956e-01 8.5291177034378052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 188 -4.5074969530105591e-02</internalNodes>\n          <leafValues>\n            -4.7614151239395142e-01 3.8384389132261276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 189 4.5961341820657253e-03</internalNodes>\n          <leafValues>\n            9.0776696801185608e-02 -5.3642177581787109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 190 -5.6205179542303085e-02</internalNodes>\n          <leafValues>\n            -4.4128128886222839e-01 2.6340639218688011e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 191 -1.7070030793547630e-02</internalNodes>\n          <leafValues>\n            3.1962528824806213e-01 -1.5699079632759094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 192 1.3778540305793285e-02</internalNodes>\n          <leafValues>\n            -4.1468238830566406e-01 1.0832040011882782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 193 5.6932470761239529e-03</internalNodes>\n          <leafValues>\n            1.0973270237445831e-01 -4.1420969367027283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 194 1.1573060182854533e-03</internalNodes>\n          <leafValues>\n            -4.6996459364891052e-01 1.4088229835033417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 195 -4.3259391532046720e-05</internalNodes>\n          <leafValues>\n            -5.9117478132247925e-01 7.2208836674690247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 196 -1.4467669825535268e-04</internalNodes>\n          <leafValues>\n            1.4340500533580780e-01 -2.0809020102024078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 197 -3.0667539685964584e-02</internalNodes>\n          <leafValues>\n            -6.4181727170944214e-01 7.6316222548484802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 198 6.4002368599176407e-03</internalNodes>\n          <leafValues>\n            -1.5426200628280640e-01 2.0618820190429688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 199 2.7318780776113272e-03</internalNodes>\n          <leafValues>\n            -1.8429130315780640e-01 2.2046269476413727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 200 -4.1759859770536423e-02</internalNodes>\n          <leafValues>\n            5.1284658908843994e-01 -4.3097220361232758e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 201 -3.0174419283866882e-02</internalNodes>\n          <leafValues>\n            -3.6134809255599976e-01 1.1633390188217163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 202 6.8081771023571491e-03</internalNodes>\n          <leafValues>\n            -2.5953280925750732e-01 1.4927390217781067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 203 4.3430369347333908e-02</internalNodes>\n          <leafValues>\n            6.8601243197917938e-02 -5.8221191167831421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 204 2.1121300756931305e-02</internalNodes>\n          <leafValues>\n            -8.5372917354106903e-02 8.0498583614826202e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 205 9.9840283393859863e-02</internalNodes>\n          <leafValues>\n            5.3292520344257355e-02 -7.1819657087326050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 206 5.6953770108520985e-03</internalNodes>\n          <leafValues>\n            -8.8976107537746429e-02 1.3483940064907074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 207 -5.9984568506479263e-02</internalNodes>\n          <leafValues>\n            6.8324291706085205e-01 -5.1916271448135376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 208 5.9353262186050415e-03</internalNodes>\n          <leafValues>\n            1.0305190086364746e-01 -2.5361439585685730e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 209 -7.4867930379696190e-05</internalNodes>\n          <leafValues>\n            1.3340729475021362e-01 -2.9323559999465942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 210 -2.5437519070692360e-04</internalNodes>\n          <leafValues>\n            1.5335780382156372e-01 -1.9387570023536682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 211 7.7576987678185105e-04</internalNodes>\n          <leafValues>\n            -3.1155571341514587e-01 1.0632509738206863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 212 5.4478500038385391e-02</internalNodes>\n          <leafValues>\n            2.6277480646967888e-02 -6.6687411069869995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 213 1.2692850083112717e-02</internalNodes>\n          <leafValues>\n            9.3613043427467346e-02 -3.9152190089225769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 214 -3.0766960233449936e-02</internalNodes>\n          <leafValues>\n            -5.9238088130950928e-01 4.8314999788999557e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 215 -1.9366150721907616e-02</internalNodes>\n          <leafValues>\n            4.3661609292030334e-01 -8.8672943413257599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 216 -2.8705620206892490e-03</internalNodes>\n          <leafValues>\n            1.5244780480861664e-01 -1.3861170411109924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 217 4.0003698319196701e-02</internalNodes>\n          <leafValues>\n            5.8748051524162292e-02 -6.9119709730148315e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 218 -8.1130467355251312e-02</internalNodes>\n          <leafValues>\n            -7.8684318065643311e-01 2.0421498920768499e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 219 -2.1017501130700111e-03</internalNodes>\n          <leafValues>\n            1.9100449979305267e-01 -1.9659680128097534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 220 8.6481617763638496e-03</internalNodes>\n          <leafValues>\n            8.8689289987087250e-02 -3.7414151430130005e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 221 -5.2429020404815674e-02</internalNodes>\n          <leafValues>\n            -7.2615998983383179e-01 3.9465688169002533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 222 3.4464800264686346e-03</internalNodes>\n          <leafValues>\n            -1.1640899628400803e-01 2.7386268973350525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 223 -7.0581152103841305e-03</internalNodes>\n          <leafValues>\n            -3.6283940076828003e-01 9.2023678123950958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 224 -5.7412259280681610e-02</internalNodes>\n          <leafValues>\n            -8.8839381933212280e-01 2.6647759601473808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 225 3.3479030244052410e-03</internalNodes>\n          <leafValues>\n            -1.4884050190448761e-01 1.8366430699825287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 226 -5.3958419710397720e-02</internalNodes>\n          <leafValues>\n            3.8098138570785522e-01 -4.4046580791473389e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 227 -2.5719689205288887e-02</internalNodes>\n          <leafValues>\n            3.2570821046829224e-01 -1.0078220069408417e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>44</maxWeakCount>\n      <stageThreshold>-2.1038460731506348e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 228 1.2441220134496689e-01</internalNodes>\n          <leafValues>\n            -3.8573729991912842e-01 3.9273661375045776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 229 3.7802878767251968e-02</internalNodes>\n          <leafValues>\n            -4.7028678655624390e-01 3.5786831378936768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 230 3.0441429466009140e-02</internalNodes>\n          <leafValues>\n            -3.9460399746894836e-01 3.2518500089645386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 231 3.9223438943736255e-04</internalNodes>\n          <leafValues>\n            -4.5166510343551636e-01 1.9672380387783051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 232 3.9077710360288620e-02</internalNodes>\n          <leafValues>\n            -2.1073329448699951e-01 4.3864768743515015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 233 -8.9118082541972399e-05</internalNodes>\n          <leafValues>\n            1.5196959674358368e-01 -5.9563517570495605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 234 8.8415127247571945e-03</internalNodes>\n          <leafValues>\n            -4.9292489886283875e-01 1.7406579852104187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 235 1.3666059821844101e-02</internalNodes>\n          <leafValues>\n            9.2861749231815338e-02 -5.5182307958602905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 236 -6.1203300952911377e-02</internalNodes>\n          <leafValues>\n            -6.7985290288925171e-01 1.0049080103635788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 237 5.7719892356544733e-04</internalNodes>\n          <leafValues>\n            -5.8301997184753418e-01 1.1089629679918289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 238 2.8370460495352745e-04</internalNodes>\n          <leafValues>\n            -5.9793341159820557e-01 9.3898378312587738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 239 1.7665980383753777e-02</internalNodes>\n          <leafValues>\n            -2.2015470266342163e-01 3.4533089399337769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 240 2.5697330012917519e-02</internalNodes>\n          <leafValues>\n            -3.6195701360702515e-01 1.6877350211143494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 241 -4.0316689759492874e-02</internalNodes>\n          <leafValues>\n            2.2964400053024292e-01 -2.9301440715789795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 242 4.6522719785571098e-03</internalNodes>\n          <leafValues>\n            -5.8995968103408813e-01 1.0466910153627396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 243 -1.3406000100076199e-02</internalNodes>\n          <leafValues>\n            -3.9572098851203918e-01 8.3528116345405579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 244 3.6127280443906784e-02</internalNodes>\n          <leafValues>\n            9.4165802001953125e-02 -5.4097181558609009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 245 2.2792080417275429e-03</internalNodes>\n          <leafValues>\n            1.2819069623947144e-01 -3.6514538526535034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 246 1.4454070478677750e-03</internalNodes>\n          <leafValues>\n            -2.3281599581241608e-01 1.9829919934272766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 247 5.7482529431581497e-02</internalNodes>\n          <leafValues>\n            7.5042396783828735e-02 -5.7704979181289673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 248 3.3360819797962904e-03</internalNodes>\n          <leafValues>\n            8.8012017309665680e-02 -4.6779251098632812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 249 3.7225749343633652e-02</internalNodes>\n          <leafValues>\n            3.2155111432075500e-02 -6.6346621513366699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 250 1.6612760722637177e-02</internalNodes>\n          <leafValues>\n            9.1689839959144592e-02 -5.2128171920776367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 251 2.0543249323964119e-02</internalNodes>\n          <leafValues>\n            -2.8753378987312317e-01 1.4261309802532196e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 252 -1.5633470320608467e-04</internalNodes>\n          <leafValues>\n            2.0246730744838715e-01 -2.2424469888210297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 253 1.2188810110092163e-01</internalNodes>\n          <leafValues>\n            -1.6461309790611267e-01 1.7583920061588287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 254 4.6413440257310867e-02</internalNodes>\n          <leafValues>\n            -6.8978017568588257e-01 6.4349927008152008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 255 1.4946439862251282e-01</internalNodes>\n          <leafValues>\n            3.9805840700864792e-02 -7.0177328586578369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 256 1.4346869662404060e-02</internalNodes>\n          <leafValues>\n            9.2628777027130127e-02 -4.6314170956611633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 257 3.6158718168735504e-02</internalNodes>\n          <leafValues>\n            6.4412936568260193e-02 -6.5277212858200073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 258 -5.5098228156566620e-02</internalNodes>\n          <leafValues>\n            -6.1021989583969116e-01 6.6034287214279175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 259 -3.2978600356727839e-03</internalNodes>\n          <leafValues>\n            8.6579866707324982e-02 -2.1844820678234100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 260 4.1257790289819241e-03</internalNodes>\n          <leafValues>\n            -4.4980299472808838e-01 9.3251250684261322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 261 3.3465269953012466e-02</internalNodes>\n          <leafValues>\n            1.4524499885737896e-02 -4.0200001001358032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 262 -2.2584630176424980e-02</internalNodes>\n          <leafValues>\n            -6.0067617893218994e-01 6.4416721463203430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 263 -7.1505038067698479e-03</internalNodes>\n          <leafValues>\n            6.7139469087123871e-02 -1.2947300076484680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 264 -5.1440041512250900e-02</internalNodes>\n          <leafValues>\n            -4.8466479778289795e-01 8.2093752920627594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 265 -1.9100949168205261e-02</internalNodes>\n          <leafValues>\n            -3.5394379496574402e-01 1.0851690173149109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 266 6.9468282163143158e-03</internalNodes>\n          <leafValues>\n            1.5407569706439972e-01 -2.3040190339088440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 267 -2.3886600509285927e-02</internalNodes>\n          <leafValues>\n            4.9007979035377502e-01 -5.9650428593158722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 268 -1.3964619720354676e-03</internalNodes>\n          <leafValues>\n            -3.3704701066017151e-01 1.1569459736347198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 269 2.6320600882172585e-02</internalNodes>\n          <leafValues>\n            -3.9132680743932724e-02 3.7615358829498291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 270 5.0336541607975960e-03</internalNodes>\n          <leafValues>\n            -3.5457020998001099e-01 1.0786720365285873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 271 -1.1523960158228874e-02</internalNodes>\n          <leafValues>\n            3.5148641467094421e-01 -1.1373709887266159e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>72</maxWeakCount>\n      <stageThreshold>-1.9109580516815186e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 272 -5.6698019616305828e-03</internalNodes>\n          <leafValues>\n            2.5299090147018433e-01 -5.5377197265625000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 273 1.2186550302430987e-03</internalNodes>\n          <leafValues>\n            9.1723538935184479e-02 -6.5661650896072388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 274 3.1903409399092197e-03</internalNodes>\n          <leafValues>\n            1.2116809934377670e-01 -5.4405361413955688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 275 -1.2117680162191391e-02</internalNodes>\n          <leafValues>\n            -6.8211251497268677e-01 1.1178220063447952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 276 2.2634069900959730e-03</internalNodes>\n          <leafValues>\n            -5.6313961744308472e-01 9.9629260599613190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 277 2.2871519904583693e-03</internalNodes>\n          <leafValues>\n            -5.0227242708206177e-01 1.1288029700517654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 278 -7.4018500745296478e-03</internalNodes>\n          <leafValues>\n            -5.0622308254241943e-01 1.0325270146131516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 279 6.5725757740437984e-03</internalNodes>\n          <leafValues>\n            3.1603671610355377e-02 -4.5879349112510681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 280 -1.7237069085240364e-02</internalNodes>\n          <leafValues>\n            -3.6556100845336914e-01 1.4122049510478973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 281 -1.7646619817242026e-03</internalNodes>\n          <leafValues>\n            1.8962210416793823e-01 -3.4349760413169861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 282 2.6085950434207916e-02</internalNodes>\n          <leafValues>\n            8.7369233369827271e-02 -5.3332161903381348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 283 8.5357967764139175e-03</internalNodes>\n          <leafValues>\n            -3.7360730767250061e-01 1.4508520066738129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 284 -6.2934341840445995e-03</internalNodes>\n          <leafValues>\n            -4.5775079727172852e-01 1.0016269981861115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 285 9.7081549465656281e-02</internalNodes>\n          <leafValues>\n            3.3761640079319477e-03 -8.4679859876632690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 286 -9.9455721676349640e-02</internalNodes>\n          <leafValues>\n            7.7892357110977173e-01 -5.4456088691949844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 287 3.9128549396991730e-02</internalNodes>\n          <leafValues>\n            3.9479929953813553e-02 -4.6620211005210876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 288 6.8423762917518616e-02</internalNodes>\n          <leafValues>\n            4.8163410276174545e-02 -8.1910741329193115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 289 -1.7304550856351852e-02</internalNodes>\n          <leafValues>\n            -4.6001830697059631e-01 2.1781340241432190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 290 4.5203989429865032e-05</internalNodes>\n          <leafValues>\n            1.5590970218181610e-01 -2.5734600424766541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 291 -5.3720749914646149e-02</internalNodes>\n          <leafValues>\n            -7.3984587192535400e-01 2.3658139631152153e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 292 -2.1576840663328767e-04</internalNodes>\n          <leafValues>\n            1.1803720146417618e-01 -3.5380458831787109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 293 1.2613219441846013e-03</internalNodes>\n          <leafValues>\n            -1.8313080072402954e-01 1.6306960582733154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 294 2.2714029997587204e-02</internalNodes>\n          <leafValues>\n            -9.5647342503070831e-02 3.8062781095504761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 295 2.0958330482244492e-02</internalNodes>\n          <leafValues>\n            6.1185598373413086e-02 -5.2644938230514526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 296 1.5458449721336365e-02</internalNodes>\n          <leafValues>\n            6.4466789364814758e-02 -4.7441288828849792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 297 -5.0828810781240463e-03</internalNodes>\n          <leafValues>\n            1.0018830001354218e-01 -3.6397251486778259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 298 1.1842510430142283e-03</internalNodes>\n          <leafValues>\n            -2.0603519678115845e-01 1.7129589617252350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 299 5.0187770277261734e-02</internalNodes>\n          <leafValues>\n            -7.0924967527389526e-02 1.0435319691896439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 300 1.7535200715065002e-01</internalNodes>\n          <leafValues>\n            3.7766210734844208e-02 -8.0802738666534424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 301 -6.8425558507442474e-02</internalNodes>\n          <leafValues>\n            -5.0214898586273193e-01 5.4671119898557663e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 302 2.2496099118143320e-03</internalNodes>\n          <leafValues>\n            -2.8013509511947632e-01 1.0950099676847458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 303 8.5355632007122040e-02</internalNodes>\n          <leafValues>\n            3.3376980572938919e-02 -7.3676842451095581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 304 -2.8825979679822922e-02</internalNodes>\n          <leafValues>\n            -4.8528099060058594e-01 4.9596078693866730e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 305 -1.3562700478360057e-03</internalNodes>\n          <leafValues>\n            1.8493090569972992e-01 -1.6541489958763123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 306 1.5731659950688481e-03</internalNodes>\n          <leafValues>\n            9.0431816875934601e-02 -3.0193880200386047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 307 -5.2912188693881035e-03</internalNodes>\n          <leafValues>\n            -4.3963611125946045e-01 4.6880699694156647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 308 4.2200140655040741e-02</internalNodes>\n          <leafValues>\n            -7.5348012149333954e-02 3.7712809443473816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 309 3.1030770391225815e-02</internalNodes>\n          <leafValues>\n            6.6053368151187897e-02 -4.7378420829772949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 310 8.0451928079128265e-03</internalNodes>\n          <leafValues>\n            -7.7326983213424683e-02 3.4898889064788818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 311 2.3791180923581123e-02</internalNodes>\n          <leafValues>\n            4.8629928380250931e-02 -5.8155477046966553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 312 -2.6884680613875389e-02</internalNodes>\n          <leafValues>\n            7.3852258920669556e-01 -4.0025118738412857e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 313 -1.7013859469443560e-03</internalNodes>\n          <leafValues>\n            1.4116409420967102e-01 -1.8305079638957977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 314 -3.2258979976177216e-02</internalNodes>\n          <leafValues>\n            -6.4598697423934937e-01 4.1774179786443710e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 315 -9.1719552874565125e-02</internalNodes>\n          <leafValues>\n            6.3651692867279053e-01 -4.4406279921531677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 316 1.1253220029175282e-02</internalNodes>\n          <leafValues>\n            -1.0398969799280167e-01 2.4386499822139740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 317 9.1702006757259369e-03</internalNodes>\n          <leafValues>\n            -1.0142300277948380e-01 1.7325720191001892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 318 -3.7584431469440460e-02</internalNodes>\n          <leafValues>\n            -6.5999048948287964e-01 3.5357259213924408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 319 1.4904039562679827e-04</internalNodes>\n          <leafValues>\n            -1.2504950165748596e-01 1.0161379724740982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 320 5.6240631965920329e-04</internalNodes>\n          <leafValues>\n            -2.1511219441890717e-01 1.0537440329790115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 321 -1.7314270138740540e-02</internalNodes>\n          <leafValues>\n            -1.6798290610313416e-01 6.1207499355077744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 322 -1.5429870225489140e-02</internalNodes>\n          <leafValues>\n            2.5674480199813843e-01 -9.7193486988544464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 323 -1.5612079761922359e-02</internalNodes>\n          <leafValues>\n            -3.5797500610351562e-01 6.9260068237781525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 324 7.4424187187105417e-04</internalNodes>\n          <leafValues>\n            -1.5740460157394409e-01 1.4921070635318756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 325 7.9008340835571289e-02</internalNodes>\n          <leafValues>\n            3.5924728959798813e-02 -6.4907592535018921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 326 -3.3477540127933025e-03</internalNodes>\n          <leafValues>\n            -2.5794708728790283e-01 8.1626862287521362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 327 3.5589419305324554e-02</internalNodes>\n          <leafValues>\n            -4.6870049089193344e-02 5.3945267200469971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 328 7.6168961822986603e-04</internalNodes>\n          <leafValues>\n            8.0409869551658630e-02 -2.8045970201492310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 329 9.6126887947320938e-03</internalNodes>\n          <leafValues>\n            9.2715777456760406e-02 -2.2755210101604462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 330 3.4582789987325668e-02</internalNodes>\n          <leafValues>\n            -9.5495507121086121e-02 2.8116491436958313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 331 -8.2031842321157455e-03</internalNodes>\n          <leafValues>\n            -3.3162289857864380e-01 4.0629711002111435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 332 2.5540109723806381e-02</internalNodes>\n          <leafValues>\n            7.0458933711051941e-02 -3.2799351215362549e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 333 -3.1389920040965080e-03</internalNodes>\n          <leafValues>\n            1.2529349327087402e-01 -6.0766801238059998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 334 4.5892409980297089e-03</internalNodes>\n          <leafValues>\n            -9.5335446298122406e-02 2.4738679826259613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 335 -2.3260030895471573e-02</internalNodes>\n          <leafValues>\n            -2.3823159933090210e-01 3.3502969890832901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 336 1.7964519793167710e-03</internalNodes>\n          <leafValues>\n            8.9843861758708954e-02 -2.8049159049987793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 337 -1.0952910035848618e-01</internalNodes>\n          <leafValues>\n            -4.6206548810005188e-01 7.4333418160676956e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 338 6.8442770279943943e-03</internalNodes>\n          <leafValues>\n            7.3520109057426453e-02 -3.6190700531005859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 339 -7.3719851672649384e-02</internalNodes>\n          <leafValues>\n            4.1131800413131714e-01 -6.8293057382106781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 340 9.4485012814402580e-03</internalNodes>\n          <leafValues>\n            -1.2132299691438675e-01 2.1491959691047668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 341 -7.4686057865619659e-02</internalNodes>\n          <leafValues>\n            2.4292010068893433e-01 -3.8520719856023788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 342 -1.8958229571580887e-02</internalNodes>\n          <leafValues>\n            -3.7263819575309753e-01 6.8381950259208679e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 343 -8.3170487778261304e-04</internalNodes>\n          <leafValues>\n            9.5785446465015411e-02 -1.0169020295143127e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>54</maxWeakCount>\n      <stageThreshold>-2.0048389434814453e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 344 1.5233230590820312e-01</internalNodes>\n          <leafValues>\n            -3.1805351376533508e-01 4.7039988636970520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 345 8.8482722640037537e-03</internalNodes>\n          <leafValues>\n            -3.6134269833564758e-01 2.7332958579063416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 346 2.9788410291075706e-02</internalNodes>\n          <leafValues>\n            -2.8059279918670654e-01 3.6270239949226379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 347 5.2725639194250107e-02</internalNodes>\n          <leafValues>\n            -1.9320569932460785e-01 3.5507258772850037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 348 2.6077419519424438e-02</internalNodes>\n          <leafValues>\n            -3.7120199203491211e-01 2.7038440108299255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 349 -4.4878520071506500e-02</internalNodes>\n          <leafValues>\n            2.9119300842285156e-01 -3.5178241133689880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 350 -9.3984341947361827e-04</internalNodes>\n          <leafValues>\n            -6.0143661499023438e-01 1.1815790086984634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 351 3.1817350536584854e-03</internalNodes>\n          <leafValues>\n            -6.1632722616195679e-01 1.0581470280885696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 352 -6.2214181525632739e-04</internalNodes>\n          <leafValues>\n            1.1701049655675888e-01 -6.1873781681060791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 353 5.4993429221212864e-03</internalNodes>\n          <leafValues>\n            7.1740642189979553e-02 -3.2122710347175598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 354 7.0621701888740063e-03</internalNodes>\n          <leafValues>\n            -3.0814599990844727e-01 1.8299129605293274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 355 -3.4492298960685730e-02</internalNodes>\n          <leafValues>\n            -3.6952570080757141e-01 1.1142779886722565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 356 -5.3783431649208069e-02</internalNodes>\n          <leafValues>\n            -6.6689962148666382e-01 8.4863640367984772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 357 -2.0194910466670990e-02</internalNodes>\n          <leafValues>\n            -4.2300069332122803e-01 5.6325469166040421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 358 -7.6839578105136752e-04</internalNodes>\n          <leafValues>\n            1.3547450304031372e-01 -3.5696288943290710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 359 6.6877179779112339e-03</internalNodes>\n          <leafValues>\n            -3.4379830956459045e-01 1.3302099704742432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 360 1.1147409677505493e-01</internalNodes>\n          <leafValues>\n            -4.9523550271987915e-01 9.7303003072738647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 361 -8.5021732375025749e-03</internalNodes>\n          <leafValues>\n            -5.1778990030288696e-01 6.7188903689384460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 362 -1.8897019326686859e-02</internalNodes>\n          <leafValues>\n            -4.7064769268035889e-01 9.0873777866363525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 363 5.7387170381844044e-03</internalNodes>\n          <leafValues>\n            -1.4860689640045166e-01 3.0976840853691101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 364 3.2604049891233444e-02</internalNodes>\n          <leafValues>\n            7.8677706420421600e-02 -5.4713827371597290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 365 1.8975350030814297e-05</internalNodes>\n          <leafValues>\n            -2.4359850585460663e-01 9.8908931016921997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 366 -1.9267159514129162e-03</internalNodes>\n          <leafValues>\n            -5.0522977113723755e-01 7.5119331479072571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 367 -7.7145430259406567e-03</internalNodes>\n          <leafValues>\n            -2.5014960765838623e-01 1.0211499780416489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 368 -1.8806649371981621e-02</internalNodes>\n          <leafValues>\n            -4.3269169330596924e-01 1.1147680133581161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 369 2.9912199825048447e-02</internalNodes>\n          <leafValues>\n            4.6748448163270950e-02 -5.8818292617797852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 370 -7.4260600376874208e-04</internalNodes>\n          <leafValues>\n            1.8389309942722321e-01 -2.0138260722160339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 371 4.0662181563675404e-03</internalNodes>\n          <leafValues>\n            -4.4948458671569824e-01 8.6881376802921295e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 372 1.8681669607758522e-02</internalNodes>\n          <leafValues>\n            -1.7103520035743713e-01 2.2931230068206787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 373 4.6580690890550613e-02</internalNodes>\n          <leafValues>\n            4.3874379247426987e-02 -6.6704601049423218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 374 -1.5030739828944206e-02</internalNodes>\n          <leafValues>\n            -7.6569449901580811e-01 4.2524490505456924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 375 6.3602820038795471e-02</internalNodes>\n          <leafValues>\n            3.3629488199949265e-02 -8.6777329444885254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 376 -3.3613100647926331e-02</internalNodes>\n          <leafValues>\n            -6.7464047670364380e-01 4.5196920633316040e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 377 -4.4314529746770859e-02</internalNodes>\n          <leafValues>\n            -4.7056430578231812e-01 2.0987950265407562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 378 2.9175819829106331e-02</internalNodes>\n          <leafValues>\n            5.6036490947008133e-02 -6.5745961666107178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 379 8.4737781435251236e-03</internalNodes>\n          <leafValues>\n            -1.2312129884958267e-01 3.6037188768386841e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 380 -2.6930740103125572e-02</internalNodes>\n          <leafValues>\n            -6.5255117416381836e-01 6.0726620256900787e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 381 3.7930138409137726e-02</internalNodes>\n          <leafValues>\n            -1.5491360425949097e-01 2.1770450472831726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 382 1.6430050134658813e-02</internalNodes>\n          <leafValues>\n            -2.5250691175460815e-01 1.5458230674266815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 383 5.1079809665679932e-02</internalNodes>\n          <leafValues>\n            3.0773499980568886e-02 -6.4929312467575073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 384 1.6663300339132547e-03</internalNodes>\n          <leafValues>\n            -3.7425559759140015e-01 8.1392176449298859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 385 -9.0896980836987495e-03</internalNodes>\n          <leafValues>\n            1.7854049801826477e-01 -7.6578080654144287e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 386 2.0629199221730232e-02</internalNodes>\n          <leafValues>\n            7.2373263537883759e-02 -4.2050579190254211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 387 8.2410024479031563e-03</internalNodes>\n          <leafValues>\n            3.2896678894758224e-02 -3.7325268983840942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 388 -4.6126499772071838e-02</internalNodes>\n          <leafValues>\n            -3.7356421351432800e-01 7.7336780726909637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 389 -8.3484929054975510e-03</internalNodes>\n          <leafValues>\n            1.8690130114555359e-01 -1.5126839280128479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 390 -4.7689080238342285e-02</internalNodes>\n          <leafValues>\n            -4.0730020403862000e-01 8.7598368525505066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 391 -5.0166220171377063e-04</internalNodes>\n          <leafValues>\n            1.2036769837141037e-01 -2.4717660248279572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 392 2.1794239728478715e-05</internalNodes>\n          <leafValues>\n            -2.9800811409950256e-01 1.2065000087022781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 393 -7.0597290992736816e-02</internalNodes>\n          <leafValues>\n            -6.8116611242294312e-01 6.4198948442935944e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 394 -6.4999358728528023e-03</internalNodes>\n          <leafValues>\n            2.6219159364700317e-01 -1.4015009999275208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 395 5.3664338774979115e-03</internalNodes>\n          <leafValues>\n            -3.4273180365562439e-01 9.2048570513725281e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 396 -1.3341950252652168e-02</internalNodes>\n          <leafValues>\n            4.0258079767227173e-01 -7.2052307426929474e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 397 1.2243090197443962e-02</internalNodes>\n          <leafValues>\n            -8.2426831126213074e-02 3.8369199633598328e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>100</maxWeakCount>\n      <stageThreshold>-1.8743180036544800e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 398 -2.8617910575121641e-03</internalNodes>\n          <leafValues>\n            2.1443170309066772e-01 -5.1532137393951416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 399 1.9125089747831225e-03</internalNodes>\n          <leafValues>\n            1.4483030140399933e-01 -6.1175411939620972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 400 4.8059499822556973e-03</internalNodes>\n          <leafValues>\n            -4.4235628843307495e-01 1.3466580212116241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 401 -9.5777623355388641e-02</internalNodes>\n          <leafValues>\n            -4.8914781212806702e-01 1.3169640302658081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 402 -8.9395968243479729e-03</internalNodes>\n          <leafValues>\n            1.4790549874305725e-01 -4.6696281433105469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 403 8.1128235906362534e-03</internalNodes>\n          <leafValues>\n            5.0671331584453583e-02 -4.0227508544921875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 404 2.2638900554738939e-04</internalNodes>\n          <leafValues>\n            -5.0928252935409546e-01 8.2113206386566162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 405 -6.1516009736806154e-04</internalNodes>\n          <leafValues>\n            -3.8136801123619080e-01 1.0157950222492218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 406 -3.2050691079348326e-03</internalNodes>\n          <leafValues>\n            -5.8352458477020264e-01 6.2385398894548416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 407 5.4250762332230806e-04</internalNodes>\n          <leafValues>\n            -2.5548499822616577e-01 1.4832200109958649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 408 1.0713520459830761e-03</internalNodes>\n          <leafValues>\n            -3.5334318876266479e-01 1.1791589856147766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 409 -1.7755989683791995e-03</internalNodes>\n          <leafValues>\n            -3.4087279438972473e-01 9.4740107655525208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 410 -9.3014203011989594e-02</internalNodes>\n          <leafValues>\n            7.4685460329055786e-01 -5.2443340420722961e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 411 -1.4192130416631699e-02</internalNodes>\n          <leafValues>\n            -3.1433999538421631e-01 9.0452186763286591e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 412 -5.3375191055238247e-04</internalNodes>\n          <leafValues>\n            1.4119710028171539e-01 -2.0296710729598999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 413 9.4844609498977661e-02</internalNodes>\n          <leafValues>\n            1.4625679701566696e-02 -6.2215209007263184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 414 1.1853160103783011e-03</internalNodes>\n          <leafValues>\n            -2.5984010100364685e-01 1.2153120338916779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 415 -2.4541220627725124e-03</internalNodes>\n          <leafValues>\n            7.1894593536853790e-02 -3.9803519845008850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 416 6.8703000433743000e-03</internalNodes>\n          <leafValues>\n            6.8626098334789276e-02 -3.8565808534622192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 417 -6.0411270707845688e-02</internalNodes>\n          <leafValues>\n            -4.8482391238212585e-01 2.0706020295619965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 418 -4.6826168545521796e-04</internalNodes>\n          <leafValues>\n            9.5856241881847382e-02 -3.1230351328849792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 419 -3.3507338957861066e-04</internalNodes>\n          <leafValues>\n            7.8128658235073090e-02 -9.4751000404357910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 420 3.6313060671091080e-02</internalNodes>\n          <leafValues>\n            4.4824421405792236e-02 -6.3693147897720337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 421 3.8052719901315868e-04</internalNodes>\n          <leafValues>\n            -2.1931269764900208e-01 1.1780519783496857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 422 -5.0964631140232086e-02</internalNodes>\n          <leafValues>\n            5.5783379077911377e-01 -4.3869689106941223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 423 -7.6198756694793701e-02</internalNodes>\n          <leafValues>\n            6.7789608240127563e-01 -1.7935890704393387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 424 -1.2677020393311977e-02</internalNodes>\n          <leafValues>\n            -6.0731011629104614e-01 4.9086190760135651e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 425 -3.6766629200428724e-03</internalNodes>\n          <leafValues>\n            1.5226639807224274e-01 -1.9953680038452148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 426 -3.8846738636493683e-02</internalNodes>\n          <leafValues>\n            -7.7045238018035889e-01 3.3732470124959946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 427 9.4217229634523392e-03</internalNodes>\n          <leafValues>\n            -6.9929488003253937e-02 1.3669140636920929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 428 7.3391180485486984e-03</internalNodes>\n          <leafValues>\n            -1.2133339792490005e-01 2.1175499260425568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 429 1.2211379595100880e-02</internalNodes>\n          <leafValues>\n            6.7636847496032715e-02 -4.3353718519210815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 430 -9.3064550310373306e-03</internalNodes>\n          <leafValues>\n            -3.4682491421699524e-01 6.4062312245368958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 431 5.2111309021711349e-02</internalNodes>\n          <leafValues>\n            -3.4146990627050400e-02 3.8904741406440735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 432 -4.3582019861787558e-04</internalNodes>\n          <leafValues>\n            1.3956509530544281e-01 -1.8289420008659363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 433 -1.0575359687209129e-02</internalNodes>\n          <leafValues>\n            -2.7782461047172546e-01 8.5667066276073456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 434 1.4794029993936419e-03</internalNodes>\n          <leafValues>\n            -2.3154720664024353e-01 1.1765889823436737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 435 9.4746891409158707e-03</internalNodes>\n          <leafValues>\n            -1.3345280289649963e-01 1.8066969513893127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 436 8.3355188369750977e-02</internalNodes>\n          <leafValues>\n            3.3563960343599319e-02 -7.2860741615295410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 437 -6.6629007458686829e-02</internalNodes>\n          <leafValues>\n            3.8058251142501831e-01 -3.3490750938653946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 438 5.0287488847970963e-03</internalNodes>\n          <leafValues>\n            -1.1418010294437408e-01 2.1534989774227142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 439 5.1222002506256104e-01</internalNodes>\n          <leafValues>\n            7.6377480290830135e-03 -6.5067559480667114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 440 1.2300059944391251e-01</internalNodes>\n          <leafValues>\n            3.8879081606864929e-02 -5.9420442581176758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 441 -1.1227129725739360e-03</internalNodes>\n          <leafValues>\n            1.0235410183668137e-01 -1.1207509785890579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 442 -6.2220949679613113e-02</internalNodes>\n          <leafValues>\n            -5.1173472404479980e-01 4.1879799216985703e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 443 -2.6323389261960983e-02</internalNodes>\n          <leafValues>\n            3.4005990624427795e-01 -5.0624471157789230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 444 -1.8875019624829292e-02</internalNodes>\n          <leafValues>\n            -5.4550838470458984e-01 4.1524920612573624e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 445 -3.4034788608551025e-01</internalNodes>\n          <leafValues>\n            -9.1541802883148193e-01 1.6561320051550865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 446 -8.0456008436158299e-04</internalNodes>\n          <leafValues>\n            1.4270770549774170e-01 -1.2901450693607330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 447 -3.9579509757459164e-03</internalNodes>\n          <leafValues>\n            -3.3408370614051819e-01 5.8637548238039017e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 448 1.8336549401283264e-02</internalNodes>\n          <leafValues>\n            -4.5632220804691315e-02 5.2696329355239868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 449 -5.7686101645231247e-02</internalNodes>\n          <leafValues>\n            -5.7604360580444336e-01 3.9550099521875381e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 450 -8.6881890892982483e-03</internalNodes>\n          <leafValues>\n            2.0929679274559021e-01 -1.0309000313282013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 451 2.0318549871444702e-01</internalNodes>\n          <leafValues>\n            9.4080818817019463e-03 -9.9389547109603882e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 452 2.0097799599170685e-02</internalNodes>\n          <leafValues>\n            5.6577399373054504e-02 -3.7819018959999084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 453 1.3217139989137650e-02</internalNodes>\n          <leafValues>\n            -7.4322126805782318e-02 1.7874650657176971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 454 -9.1346688568592072e-03</internalNodes>\n          <leafValues>\n            -4.9356880784034729e-01 3.7799369543790817e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 455 8.7239191634580493e-04</internalNodes>\n          <leafValues>\n            -1.3848680257797241e-01 1.1516919732093811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 456 -3.4609009162522852e-04</internalNodes>\n          <leafValues>\n            -1.6371829807758331e-01 1.1949790269136429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 457 -9.8570866975933313e-04</internalNodes>\n          <leafValues>\n            -5.4642897844314575e-01 4.4689279049634933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 458 1.0218559764325619e-02</internalNodes>\n          <leafValues>\n            -1.1570169776678085e-01 1.6723839938640594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 459 2.6702679693698883e-02</internalNodes>\n          <leafValues>\n            4.3922040611505508e-02 -4.5120438933372498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 460 -2.0299260504543781e-03</internalNodes>\n          <leafValues>\n            1.1932279914617538e-01 -1.6979490220546722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 461 -8.8023602962493896e-02</internalNodes>\n          <leafValues>\n            -8.0279791355133057e-01 9.4295190647244453e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 462 -1.3109110295772552e-02</internalNodes>\n          <leafValues>\n            -3.0865308642387390e-01 6.0802049934864044e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 463 -9.9501870572566986e-03</internalNodes>\n          <leafValues>\n            1.8400619924068451e-01 -4.6465478837490082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 464 -3.4293539356440306e-03</internalNodes>\n          <leafValues>\n            2.6682999730110168e-01 -9.9338643252849579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 465 5.4729141294956207e-02</internalNodes>\n          <leafValues>\n            2.8731130063533783e-02 -7.7745848894119263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 466 7.2012972086668015e-03</internalNodes>\n          <leafValues>\n            4.4892478734254837e-02 -3.8289341330528259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 467 4.2047120630741119e-02</internalNodes>\n          <leafValues>\n            -2.2562339901924133e-02 4.0646651387214661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 468 4.4444389641284943e-03</internalNodes>\n          <leafValues>\n            9.1204106807708740e-02 -1.8748210370540619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 469 2.8441840782761574e-02</internalNodes>\n          <leafValues>\n            4.0668040513992310e-02 -4.0552121400833130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 470 -1.5141829848289490e-02</internalNodes>\n          <leafValues>\n            2.4799869954586029e-01 -8.3607338368892670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 471 3.9388090372085571e-02</internalNodes>\n          <leafValues>\n            2.4279279634356499e-02 -7.6827299594879150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 472 6.1649468261748552e-04</internalNodes>\n          <leafValues>\n            -1.7249910533428192e-01 1.0311610251665115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 473 2.6001650840044022e-02</internalNodes>\n          <leafValues>\n            2.2825349122285843e-02 -7.7545452117919922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 474 1.4940380351617932e-03</internalNodes>\n          <leafValues>\n            -1.1028409749269485e-01 1.6966749727725983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 475 -1.3777149841189384e-02</internalNodes>\n          <leafValues>\n            -3.8424721360206604e-01 3.0320269986987114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 476 9.9619822576642036e-03</internalNodes>\n          <leafValues>\n            -5.3764659911394119e-02 3.7887129187583923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 477 3.2952039036899805e-03</internalNodes>\n          <leafValues>\n            9.4384163618087769e-02 -3.2762721180915833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 478 5.7747410610318184e-03</internalNodes>\n          <leafValues>\n            5.7114940136671066e-02 -3.0719769001007080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 479 -4.8392590135335922e-02</internalNodes>\n          <leafValues>\n            1.7021059989929199e-01 -8.7045513093471527e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 480 5.6376052089035511e-04</internalNodes>\n          <leafValues>\n            -9.3816302716732025e-02 2.0642310380935669e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 481 -2.3873809725046158e-02</internalNodes>\n          <leafValues>\n            -3.0082350969314575e-01 1.7477719113230705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 482 -1.0526900179684162e-02</internalNodes>\n          <leafValues>\n            -3.4418928623199463e-01 5.7995639741420746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 483 2.2288670763373375e-02</internalNodes>\n          <leafValues>\n            -5.7179849594831467e-02 1.9739510118961334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 484 -1.4589070342481136e-02</internalNodes>\n          <leafValues>\n            -4.5168799161911011e-01 4.1490409523248672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 485 -4.6936370432376862e-02</internalNodes>\n          <leafValues>\n            2.0457950234413147e-01 -5.1769189536571503e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 486 5.3777720313519239e-04</internalNodes>\n          <leafValues>\n            -3.9481449127197266e-01 4.5076690614223480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 487 -2.2181039676070213e-03</internalNodes>\n          <leafValues>\n            -2.4575619399547577e-01 1.0261219739913940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 488 3.5076549649238586e-01</internalNodes>\n          <leafValues>\n            1.9791129976511002e-02 -9.5161467790603638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 489 -2.6712059974670410e-02</internalNodes>\n          <leafValues>\n            2.2393140196800232e-01 -4.5580100268125534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 490 -3.9627091027796268e-03</internalNodes>\n          <leafValues>\n            -2.4207019805908203e-01 7.6588593423366547e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 491 -4.7878702171146870e-03</internalNodes>\n          <leafValues>\n            1.2655270099639893e-01 -1.1964710056781769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 492 7.1042939089238644e-03</internalNodes>\n          <leafValues>\n            -9.2130422592163086e-02 2.1519139409065247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 493 -2.2581929442822002e-05</internalNodes>\n          <leafValues>\n            6.0634609311819077e-02 -1.5848989784717560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 494 -7.8060641884803772e-02</internalNodes>\n          <leafValues>\n            3.4822109341621399e-01 -5.3173709660768509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 495 2.7555850148200989e-01</internalNodes>\n          <leafValues>\n            7.4112107977271080e-03 -1.0000040531158447e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 496 1.9652329385280609e-01</internalNodes>\n          <leafValues>\n            2.0131109282374382e-02 -8.5326671600341797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 497 -1.6801860183477402e-03</internalNodes>\n          <leafValues>\n            7.7082179486751556e-02 -2.2620369493961334e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>71</maxWeakCount>\n      <stageThreshold>-1.9982930421829224e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 498 -1.8814710900187492e-02</internalNodes>\n          <leafValues>\n            3.7744289636611938e-01 -4.0770640969276428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 499 -2.3191049695014954e-02</internalNodes>\n          <leafValues>\n            3.4049031138420105e-01 -3.6144611239433289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 500 3.1333088874816895e-02</internalNodes>\n          <leafValues>\n            -4.3613511323928833e-01 1.9668689370155334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 501 -1.1318700388073921e-02</internalNodes>\n          <leafValues>\n            1.1685170233249664e-01 -5.6359791755676270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 502 -3.1084290822036564e-04</internalNodes>\n          <leafValues>\n            -4.3396338820457458e-01 1.4264069497585297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 503 8.7350063025951385e-02</internalNodes>\n          <leafValues>\n            -1.9952809810638428e-01 3.3043611049652100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 504 -2.9018519446253777e-02</internalNodes>\n          <leafValues>\n            3.2315209507942200e-01 -2.1707040071487427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 505 5.9860680252313614e-02</internalNodes>\n          <leafValues>\n            -1.8764750659465790e-01 2.7651038765907288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 506 -2.9682170599699020e-02</internalNodes>\n          <leafValues>\n            -4.6436330676078796e-01 1.1129009723663330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 507 -2.2648361045867205e-03</internalNodes>\n          <leafValues>\n            -2.7163028717041016e-01 8.6916759610176086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 508 -1.6869819955900311e-03</internalNodes>\n          <leafValues>\n            1.7998990416526794e-01 -2.7152928709983826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 509 1.0256370296701789e-03</internalNodes>\n          <leafValues>\n            -4.3248209357261658e-01 1.0256689786911011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 510 -3.1762920320034027e-02</internalNodes>\n          <leafValues>\n            -6.4419168233871460e-01 6.7505106329917908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 511 -8.5913296788930893e-03</internalNodes>\n          <leafValues>\n            -3.7672510743141174e-01 7.2900757193565369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 512 -2.1636451128870249e-03</internalNodes>\n          <leafValues>\n            -4.2209509015083313e-01 1.0724630206823349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 513 6.0111237689852715e-04</internalNodes>\n          <leafValues>\n            6.1302110552787781e-02 -3.8004979491233826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 514 -6.1244412790983915e-05</internalNodes>\n          <leafValues>\n            7.4765786528587341e-02 -5.2644491195678711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 515 -2.3666430264711380e-02</internalNodes>\n          <leafValues>\n            -5.6801301240921021e-01 3.6377541720867157e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 516 -1.4256609603762627e-02</internalNodes>\n          <leafValues>\n            -5.3446692228317261e-01 6.2768869102001190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 517 -1.5713909640908241e-02</internalNodes>\n          <leafValues>\n            3.1898561120033264e-01 -1.1541239917278290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 518 -5.9286020696163177e-02</internalNodes>\n          <leafValues>\n            -5.7135957479476929e-01 8.1775680184364319e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 519 -4.4122908264398575e-02</internalNodes>\n          <leafValues>\n            -7.0591008663177490e-01 2.0833099260926247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 520 -7.2728260420262814e-04</internalNodes>\n          <leafValues>\n            1.0819850116968155e-01 -3.8077458739280701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 521 -6.6653728485107422e-02</internalNodes>\n          <leafValues>\n            -6.0824638605117798e-01 4.3248821049928665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 522 2.3679709993302822e-03</internalNodes>\n          <leafValues>\n            -2.9793098568916321e-01 1.2091939896345139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 523 3.3566180616617203e-02</internalNodes>\n          <leafValues>\n            3.6464620381593704e-02 -5.5766987800598145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 524 -5.3138811141252518e-02</internalNodes>\n          <leafValues>\n            -5.6245392560958862e-01 6.5296277403831482e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 525 -2.9401908977888525e-04</internalNodes>\n          <leafValues>\n            -5.8417952060699463e-01 5.0005510449409485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 526 -4.8085048911161721e-04</internalNodes>\n          <leafValues>\n            1.4018669724464417e-01 -2.4792720377445221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 527 4.7777060419321060e-02</internalNodes>\n          <leafValues>\n            5.5672798305749893e-02 -5.9540742635726929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 528 3.3423870801925659e-02</internalNodes>\n          <leafValues>\n            -1.4370389282703400e-01 2.3300980031490326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 529 2.0432810485363007e-01</internalNodes>\n          <leafValues>\n            4.5327048748731613e-02 -7.4164307117462158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 530 1.4106060564517975e-01</internalNodes>\n          <leafValues>\n            -3.9674291014671326e-01 8.1692866981029510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 531 1.0005939839174971e-04</internalNodes>\n          <leafValues>\n            -2.2317939996719360e-01 1.3917629420757294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 532 6.0689389705657959e-02</internalNodes>\n          <leafValues>\n            3.4324988722801208e-02 -8.2796847820281982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 533 -3.6456179805099964e-03</internalNodes>\n          <leafValues>\n            1.5286439657211304e-01 -1.4005979895591736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 534 3.1945340335369110e-02</internalNodes>\n          <leafValues>\n            6.5343692898750305e-02 -4.4296088814735413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 535 2.3428380489349365e-02</internalNodes>\n          <leafValues>\n            2.5527309626340866e-02 -6.3270658254623413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 536 4.6067949384450912e-02</internalNodes>\n          <leafValues>\n            4.3579101562500000e-02 -6.4929872751235962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 537 -5.8055151253938675e-02</internalNodes>\n          <leafValues>\n            -6.3957542181015015e-01 1.4028750360012054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 538 3.8783740252256393e-02</internalNodes>\n          <leafValues>\n            5.1233518868684769e-02 -5.4144388437271118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 539 -1.2765520252287388e-02</internalNodes>\n          <leafValues>\n            2.7082890272140503e-01 -9.1927766799926758e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 540 -3.1400551088154316e-03</internalNodes>\n          <leafValues>\n            -3.4679821133613586e-01 8.3973668515682220e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 541 -1.9719999283552170e-02</internalNodes>\n          <leafValues>\n            -2.0476959645748138e-01 6.3232198357582092e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 542 3.2241051085293293e-03</internalNodes>\n          <leafValues>\n            9.6259713172912598e-02 -2.8098219633102417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 543 -5.9271860867738724e-02</internalNodes>\n          <leafValues>\n            -2.6686909794807434e-01 3.2907258719205856e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 544 1.5636639669537544e-02</internalNodes>\n          <leafValues>\n            6.9188073277473450e-02 -4.1761711239814758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 545 -8.8900122791528702e-03</internalNodes>\n          <leafValues>\n            1.9603550434112549e-01 -1.1249750107526779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 546 2.4458909407258034e-02</internalNodes>\n          <leafValues>\n            5.6988969445228577e-02 -5.1025021076202393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 547 1.0101319849491119e-01</internalNodes>\n          <leafValues>\n            9.4210049137473106e-03 -3.6691328883171082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 548 9.0739831328392029e-02</internalNodes>\n          <leafValues>\n            5.3999878466129303e-02 -5.1181477308273315e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 549 -4.9557868391275406e-02</internalNodes>\n          <leafValues>\n            -6.2467038631439209e-01 4.0988270193338394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 550 2.6558348536491394e-01</internalNodes>\n          <leafValues>\n            -8.6136549711227417e-02 3.2438439130783081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 551 1.8632459687069058e-03</internalNodes>\n          <leafValues>\n            -5.4563361406326294e-01 5.8684051036834717e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 552 1.1804940178990364e-02</internalNodes>\n          <leafValues>\n            -2.0603899657726288e-01 1.4167340099811554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 553 6.8137067137286067e-04</internalNodes>\n          <leafValues>\n            -2.0806470513343811e-01 9.2627376317977905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 554 5.7278381427749991e-04</internalNodes>\n          <leafValues>\n            -4.3170881271362305e-01 6.3360363245010376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 555 -1.1041999794542789e-02</internalNodes>\n          <leafValues>\n            1.8144379556179047e-01 -4.1707839816808701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 556 9.5696747303009033e-03</internalNodes>\n          <leafValues>\n            -1.2098339945077896e-01 2.1607619524002075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 557 7.4274197220802307e-02</internalNodes>\n          <leafValues>\n            2.6399549096822739e-02 -7.7601867914199829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 558 -2.5815829634666443e-02</internalNodes>\n          <leafValues>\n            5.3497368097305298e-01 -5.2025150507688522e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 559 -6.3314691185951233e-02</internalNodes>\n          <leafValues>\n            5.1900321245193481e-01 -1.9329590722918510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 560 -6.6432490944862366e-02</internalNodes>\n          <leafValues>\n            7.2140932083129883e-01 -3.2882031053304672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 561 -7.5749039649963379e-02</internalNodes>\n          <leafValues>\n            4.1485249996185303e-01 -5.5451728403568268e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 562 -2.0296040922403336e-02</internalNodes>\n          <leafValues>\n            -3.3250689506530762e-01 8.2397893071174622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 563 2.2172650322318077e-02</internalNodes>\n          <leafValues>\n            -1.4419150352478027e-01 1.7280860245227814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 564 4.2085880413651466e-03</internalNodes>\n          <leafValues>\n            -3.0237489938735962e-01 8.6699083447456360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 565 6.8267330527305603e-02</internalNodes>\n          <leafValues>\n            8.7291244417428970e-03 -3.6955729126930237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 566 5.1220320165157318e-03</internalNodes>\n          <leafValues>\n            -2.0824980735778809e-01 1.4530059695243835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 567 -5.3114328533411026e-02</internalNodes>\n          <leafValues>\n            -5.5142301321029663e-01 4.3421190232038498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 568 -4.9739979207515717e-02</internalNodes>\n          <leafValues>\n            4.4077101349830627e-01 -6.4349673688411713e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>94</maxWeakCount>\n      <stageThreshold>-1.8377989530563354e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 569 -3.3883380820043385e-04</internalNodes>\n          <leafValues>\n            1.8997849524021149e-01 -4.6184849739074707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 570 -1.5632030554115772e-03</internalNodes>\n          <leafValues>\n            1.9381409883499146e-01 -4.3518841266632080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 571 1.5552520053461194e-03</internalNodes>\n          <leafValues>\n            -4.7420310974121094e-01 1.2137629836797714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 572 -3.1417120248079300e-02</internalNodes>\n          <leafValues>\n            -3.9096689224243164e-01 1.0951930284500122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 573 -3.2835190650075674e-03</internalNodes>\n          <leafValues>\n            1.6428950428962708e-01 -3.2751929759979248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 574 5.8749080635607243e-03</internalNodes>\n          <leafValues>\n            7.6225973665714264e-02 -4.3470710515975952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 575 4.4846539385616779e-03</internalNodes>\n          <leafValues>\n            1.2197560071945190e-01 -4.4872379302978516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 576 1.9835829734802246e-03</internalNodes>\n          <leafValues>\n            -6.2911021709442139e-01 1.0122530162334442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 577 1.2609469704329967e-02</internalNodes>\n          <leafValues>\n            1.0438250005245209e-01 -3.5015499591827393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 578 -4.7475768951699138e-04</internalNodes>\n          <leafValues>\n            1.1008159816265106e-01 -3.0429539084434509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 579 3.2356760930269957e-03</internalNodes>\n          <leafValues>\n            -2.7057901024818420e-01 1.2746180593967438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 580 9.9898613989353180e-03</internalNodes>\n          <leafValues>\n            6.3906982541084290e-02 -4.7118431329727173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 581 5.6069239508360624e-04</internalNodes>\n          <leafValues>\n            -3.1783330440521240e-01 1.0404340177774429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 582 -5.7694699615240097e-02</internalNodes>\n          <leafValues>\n            -5.1342570781707764e-01 2.6394980028271675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 583 5.5947788059711456e-03</internalNodes>\n          <leafValues>\n            7.6774753630161285e-02 -4.3374261260032654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 584 -3.8770840037614107e-03</internalNodes>\n          <leafValues>\n            1.3988199830055237e-01 -2.0221559703350067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 585 -4.7874201089143753e-02</internalNodes>\n          <leafValues>\n            -4.7928389906883240e-01 6.8043030798435211e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 586 2.5817550718784332e-02</internalNodes>\n          <leafValues>\n            -4.5524198561906815e-02 3.9452901482582092e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 587 1.6696650709491223e-04</internalNodes>\n          <leafValues>\n            -3.0880719423294067e-01 1.0875239968299866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 588 9.8888948559761047e-04</internalNodes>\n          <leafValues>\n            6.8699032068252563e-02 -4.1813009977340698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 589 -3.4260770771652460e-03</internalNodes>\n          <leafValues>\n            -2.8929701447486877e-01 1.1479649692773819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 590 6.6044367849826813e-02</internalNodes>\n          <leafValues>\n            1.6809269785881042e-02 -3.3534801006317139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 591 2.8318059630692005e-03</internalNodes>\n          <leafValues>\n            -3.9482170343399048e-01 8.5598722100257874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 592 4.2680549621582031e-01</internalNodes>\n          <leafValues>\n            5.0977780483663082e-03 -5.9331178665161133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 593 1.1960650235414505e-01</internalNodes>\n          <leafValues>\n            2.7437770739197731e-02 -7.6616281270980835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 594 1.9571319222450256e-02</internalNodes>\n          <leafValues>\n            -1.1966180056333542e-01 2.3962239921092987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 595 -1.7432469874620438e-02</internalNodes>\n          <leafValues>\n            -5.8530348539352417e-01 5.6400340050458908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 596 -1.1196629703044891e-01</internalNodes>\n          <leafValues>\n            -6.7248320579528809e-01 2.9150659218430519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 597 -4.5747519470751286e-03</internalNodes>\n          <leafValues>\n            -4.7730261087417603e-01 5.6612998247146606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 598 -5.1501519046723843e-03</internalNodes>\n          <leafValues>\n            1.1510629951953888e-01 -1.0732329636812210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 599 2.9034249484539032e-02</internalNodes>\n          <leafValues>\n            -5.3368709981441498e-02 6.4226460456848145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 600 -1.8050910439342260e-03</internalNodes>\n          <leafValues>\n            1.2795349955558777e-01 -1.2329389899969101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 601 -2.4374839849770069e-03</internalNodes>\n          <leafValues>\n            -3.5312348604202271e-01 8.7703153491020203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 602 -1.9070079550147057e-02</internalNodes>\n          <leafValues>\n            -4.0662440657615662e-01 4.3273188173770905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 603 -5.0454240292310715e-02</internalNodes>\n          <leafValues>\n            -8.1198102235794067e-01 2.8289109468460083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 604 1.6544000245630741e-03</internalNodes>\n          <leafValues>\n            -1.6964040696620941e-01 1.2194740027189255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 605 -4.6791311353445053e-02</internalNodes>\n          <leafValues>\n            4.0614441037178040e-01 -6.1174858361482620e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 606 -5.5953849107027054e-02</internalNodes>\n          <leafValues>\n            -8.2662910223007202e-01 2.7774749323725700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 607 1.4469559537246823e-03</internalNodes>\n          <leafValues>\n            -1.4953869581222534e-01 1.5966990590095520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 608 -1.2529050000011921e-02</internalNodes>\n          <leafValues>\n            -4.2504650354385376e-01 2.1658079698681831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 609 1.1086500016972423e-03</internalNodes>\n          <leafValues>\n            -3.6006990075111389e-01 6.4415097236633301e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 610 3.9361778646707535e-02</internalNodes>\n          <leafValues>\n            8.2419048994779587e-03 -7.5303071737289429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 611 1.8823929131031036e-02</internalNodes>\n          <leafValues>\n            4.4821120798587799e-02 -5.0604110956192017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 612 -3.2083000987768173e-02</internalNodes>\n          <leafValues>\n            3.1431311368942261e-01 -3.9181869477033615e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 613 -3.1081929802894592e-02</internalNodes>\n          <leafValues>\n            -7.6903742551803589e-01 3.0742960050702095e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 614 2.3218210786581039e-02</internalNodes>\n          <leafValues>\n            -5.7748749852180481e-02 2.8955349326133728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 615 -1.1492100311443210e-03</internalNodes>\n          <leafValues>\n            1.1501409858465195e-01 -1.9310690462589264e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 616 -1.6593940556049347e-02</internalNodes>\n          <leafValues>\n            -4.2298540472984314e-01 4.3738979846239090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 617 -1.0146570391952991e-02</internalNodes>\n          <leafValues>\n            2.5579848885536194e-01 -9.1966241598129272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 618 -1.3054019771516323e-02</internalNodes>\n          <leafValues>\n            1.8339529633522034e-01 -4.0160831063985825e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 619 3.7463540211319923e-03</internalNodes>\n          <leafValues>\n            -1.2586769461631775e-01 2.2247019410133362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 620 -4.8463590443134308e-02</internalNodes>\n          <leafValues>\n            -5.8155900239944458e-01 2.9713390395045280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 621 6.4649381674826145e-03</internalNodes>\n          <leafValues>\n            9.3169108033180237e-02 -2.9046580195426941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 622 1.5607809647917747e-02</internalNodes>\n          <leafValues>\n            4.7331970185041428e-02 -4.4805559515953064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 623 -5.8314641937613487e-03</internalNodes>\n          <leafValues>\n            9.8941758275032043e-02 -2.2056859731674194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 624 7.3607802391052246e-02</internalNodes>\n          <leafValues>\n            1.6780460253357887e-02 -5.4953122138977051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 625 -6.4223129302263260e-03</internalNodes>\n          <leafValues>\n            -2.9647961258888245e-01 7.3539912700653076e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 626 2.2267029635258950e-05</internalNodes>\n          <leafValues>\n            -3.4211820363998413e-01 4.1858270764350891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 627 3.7273630499839783e-02</internalNodes>\n          <leafValues>\n            2.7458079159259796e-02 -7.8551971912384033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 628 4.2738770134747028e-03</internalNodes>\n          <leafValues>\n            -8.2514517009258270e-02 1.0404880344867706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 629 1.1906049912795424e-03</internalNodes>\n          <leafValues>\n            -1.6300439834594727e-01 1.5300649404525757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 630 8.7800435721874237e-03</internalNodes>\n          <leafValues>\n            -9.2885948717594147e-02 1.3147510588169098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 631 2.4151368997991085e-03</internalNodes>\n          <leafValues>\n            4.7598559409379959e-02 -4.4829669594764709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 632 -2.7428340166807175e-02</internalNodes>\n          <leafValues>\n            1.9811069965362549e-01 -5.5979698896408081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 633 -1.4117059763520956e-03</internalNodes>\n          <leafValues>\n            -2.1138970553874969e-01 1.0409740358591080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 634 -2.0210200548171997e-01</internalNodes>\n          <leafValues>\n            -7.7120232582092285e-01 7.0582218468189240e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 635 -4.1451320052146912e-02</internalNodes>\n          <leafValues>\n            2.8295141458511353e-01 -7.1323528885841370e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 636 4.8561887815594673e-03</internalNodes>\n          <leafValues>\n            8.6693897843360901e-02 -2.3541820049285889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 637 -4.4662880100077018e-05</internalNodes>\n          <leafValues>\n            1.3257139921188354e-01 -2.0168599486351013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 638 3.7671580910682678e-02</internalNodes>\n          <leafValues>\n            -7.4952289462089539e-02 3.3843380212783813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 639 7.4343256652355194e-02</internalNodes>\n          <leafValues>\n            3.2905030995607376e-02 -7.3536777496337891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 640 -1.0186419822275639e-02</internalNodes>\n          <leafValues>\n            -3.1277081370353699e-01 4.4163990765810013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 641 -2.4506879970431328e-02</internalNodes>\n          <leafValues>\n            -6.1346518993377686e-01 2.9692139476537704e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 642 -3.8238149136304855e-02</internalNodes>\n          <leafValues>\n            3.5583540797233582e-01 -4.8388618975877762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 643 1.7983660101890564e-01</internalNodes>\n          <leafValues>\n            1.9501589238643646e-02 -9.8485881090164185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 644 8.4765878273174167e-04</internalNodes>\n          <leafValues>\n            -2.7960330247879028e-01 7.8323036432266235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 645 3.7178809288889170e-03</internalNodes>\n          <leafValues>\n            7.2525441646575928e-02 -2.4067409336566925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 646 -9.0932317078113556e-02</internalNodes>\n          <leafValues>\n            -7.1539151668548584e-01 8.8080493733286858e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 647 -8.0087810754776001e-02</internalNodes>\n          <leafValues>\n            -6.7830717563629150e-01 2.4904320016503334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 648 7.6924148015677929e-03</internalNodes>\n          <leafValues>\n            -5.0967499613761902e-02 1.1952529847621918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 649 4.1485231369733810e-02</internalNodes>\n          <leafValues>\n            -4.9493920058012009e-02 3.5386860370635986e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 650 3.4051608294248581e-02</internalNodes>\n          <leafValues>\n            4.2200978845357895e-02 -5.0110721588134766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 651 -2.6235830038785934e-02</internalNodes>\n          <leafValues>\n            4.4934839010238647e-01 -4.1851200163364410e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 652 -5.1373958587646484e-02</internalNodes>\n          <leafValues>\n            -9.5942801237106323e-01 1.7192790284752846e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 653 -2.6742739602923393e-02</internalNodes>\n          <leafValues>\n            -6.5632241964340210e-01 2.1778080612421036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 654 -1.3730529462918639e-03</internalNodes>\n          <leafValues>\n            -1.8638509511947632e-01 4.1139349341392517e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 655 1.0963230160996318e-03</internalNodes>\n          <leafValues>\n            -1.4219370484352112e-01 1.3832019269466400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 656 -4.5011811889708042e-03</internalNodes>\n          <leafValues>\n            -1.8468600511550903e-01 9.1024190187454224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 657 4.4253250234760344e-04</internalNodes>\n          <leafValues>\n            -1.2736940383911133e-01 1.3655360043048859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 658 3.0500710010528564e-02</internalNodes>\n          <leafValues>\n            -5.8146148920059204e-02 2.4189910292625427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 659 -1.1691919714212418e-01</internalNodes>\n          <leafValues>\n            -5.5466407537460327e-01 3.0249029397964478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 660 -9.5684931147843599e-04</internalNodes>\n          <leafValues>\n            5.1899868994951248e-02 -1.4152799546718597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 661 1.3096149777993560e-03</internalNodes>\n          <leafValues>\n            -1.4248229563236237e-01 1.2227780371904373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 662 3.4988880157470703e-02</internalNodes>\n          <leafValues>\n            2.7653129771351814e-02 -6.1738812923431396e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>82</maxWeakCount>\n      <stageThreshold>-1.9031070470809937e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 663 1.6489429771900177e-01</internalNodes>\n          <leafValues>\n            -2.5657209753990173e-01 4.1277718544006348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 664 2.0584860816597939e-02</internalNodes>\n          <leafValues>\n            -5.2442210912704468e-01 1.4910830557346344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 665 8.8764587417244911e-04</internalNodes>\n          <leafValues>\n            1.3334700465202332e-01 -5.2259522676467896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 666 -1.3320889556780457e-03</internalNodes>\n          <leafValues>\n            -3.6568748950958252e-01 2.0482279360294342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 667 7.7916197478771210e-02</internalNodes>\n          <leafValues>\n            -2.1557159721851349e-01 3.1069579720497131e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 668 2.4321360979229212e-03</internalNodes>\n          <leafValues>\n            -4.4742551445960999e-01 1.0638339817523956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 669 -5.8699389919638634e-03</internalNodes>\n          <leafValues>\n            -3.8800778985023499e-01 1.4410589635372162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 670 6.9754302501678467e-02</internalNodes>\n          <leafValues>\n            1.3224910013377666e-02 -8.0096632242202759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 671 3.8338101003319025e-03</internalNodes>\n          <leafValues>\n            -4.3139308691024780e-01 1.4253990352153778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 672 -1.5829030424356461e-02</internalNodes>\n          <leafValues>\n            3.0954799056053162e-01 -1.2232720106840134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 673 6.6198296844959259e-02</internalNodes>\n          <leafValues>\n            -2.0558249950408936e-01 1.9531220197677612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 674 1.7639519646763802e-02</internalNodes>\n          <leafValues>\n            1.0770589858293533e-01 -4.3488320708274841e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 675 -1.1082629673182964e-02</internalNodes>\n          <leafValues>\n            -3.6149570345878601e-01 1.1327210068702698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 676 -3.6515299230813980e-02</internalNodes>\n          <leafValues>\n            -4.3912211060523987e-01 5.5279448628425598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 677 -3.3373299986124039e-02</internalNodes>\n          <leafValues>\n            -5.6869208812713623e-01 8.4043957293033600e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 678 8.1395559012889862e-02</internalNodes>\n          <leafValues>\n            -1.4235010743141174e-01 2.8748288750648499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 679 -4.3892292305827141e-03</internalNodes>\n          <leafValues>\n            -3.4859830141067505e-01 1.1650340259075165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 680 -6.3558202236890793e-03</internalNodes>\n          <leafValues>\n            -3.3823049068450928e-01 1.1005490273237228e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 681 2.0912459120154381e-02</internalNodes>\n          <leafValues>\n            7.8197829425334930e-02 -4.6337550878524780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 682 1.1600360274314880e-01</internalNodes>\n          <leafValues>\n            -2.0528669655323029e-01 1.5923389792442322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 683 1.6316600143909454e-02</internalNodes>\n          <leafValues>\n            -1.0633999854326248e-01 3.3453521132469177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 684 -2.8488141298294067e-01</internalNodes>\n          <leafValues>\n            5.1638001203536987e-01 -3.9357859641313553e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 685 2.4155430495738983e-02</internalNodes>\n          <leafValues>\n            -7.1670228242874146e-01 5.0031550228595734e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 686 1.1413260363042355e-02</internalNodes>\n          <leafValues>\n            5.9236031025648117e-02 -3.8141900300979614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 687 -2.4304199963808060e-02</internalNodes>\n          <leafValues>\n            4.3475851416587830e-01 -8.6574159562587738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 688 -1.5267609851434827e-03</internalNodes>\n          <leafValues>\n            -6.4307600259780884e-01 5.1642779260873795e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 689 1.0073349811136723e-02</internalNodes>\n          <leafValues>\n            7.5743027031421661e-02 -4.2902961373329163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 690 -8.1224881112575531e-02</internalNodes>\n          <leafValues>\n            -4.0827330946922302e-01 5.5444631725549698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 691 1.5149010345339775e-02</internalNodes>\n          <leafValues>\n            5.3084861487150192e-02 -5.4495412111282349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 692 -5.3490739315748215e-02</internalNodes>\n          <leafValues>\n            -4.7422149777412415e-01 3.9420779794454575e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 693 -4.0884271264076233e-02</internalNodes>\n          <leafValues>\n            -8.8557797670364380e-01 3.2042708247900009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 694 -4.2768509592860937e-04</internalNodes>\n          <leafValues>\n            -3.0554470419883728e-01 5.1432881504297256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 695 1.8441269174218178e-02</internalNodes>\n          <leafValues>\n            8.0688089132308960e-02 -3.5884049534797668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 696 -4.7630790621042252e-02</internalNodes>\n          <leafValues>\n            -4.6131908893585205e-01 6.0592770576477051e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 697 8.2442145794630051e-03</internalNodes>\n          <leafValues>\n            8.9793607592582703e-02 -3.7605780363082886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 698 1.0003759711980820e-01</internalNodes>\n          <leafValues>\n            -8.3760380744934082e-02 3.9221811294555664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 699 -2.8420550748705864e-02</internalNodes>\n          <leafValues>\n            -6.9483548402786255e-01 4.9100410193204880e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 700 5.6485999375581741e-02</internalNodes>\n          <leafValues>\n            4.4795661233365536e-03 -7.5373399257659912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 701 1.0085420217365026e-03</internalNodes>\n          <leafValues>\n            -3.7881261110305786e-01 7.8376993536949158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 702 -1.2643639929592609e-03</internalNodes>\n          <leafValues>\n            7.5486026704311371e-02 -3.1015640497207642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 703 1.4146340079605579e-02</internalNodes>\n          <leafValues>\n            -8.1805020570755005e-02 3.7313848733901978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 704 -3.1549399718642235e-03</internalNodes>\n          <leafValues>\n            -2.1241660416126251e-01 8.9129790663719177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 705 1.4796239556744695e-03</internalNodes>\n          <leafValues>\n            -2.1479040384292603e-01 1.3543279469013214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 706 -3.1343609094619751e-02</internalNodes>\n          <leafValues>\n            -5.8114588260650635e-01 4.8576328903436661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 707 -7.6149761676788330e-02</internalNodes>\n          <leafValues>\n            -5.3774517774581909e-01 4.8339068889617920e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 708 -6.1668939888477325e-02</internalNodes>\n          <leafValues>\n            -8.4525662660598755e-01 1.7448999278713018e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 709 -2.7084920555353165e-02</internalNodes>\n          <leafValues>\n            -5.0659137964248657e-01 4.7709420323371887e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 710 -2.4240929633378983e-02</internalNodes>\n          <leafValues>\n            -3.8534450531005859e-01 5.0300780683755875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 711 4.1979398578405380e-02</internalNodes>\n          <leafValues>\n            -1.0378009825944901e-01 2.6236268877983093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 712 2.3717690259218216e-02</internalNodes>\n          <leafValues>\n            5.6897271424531937e-02 -2.8959441184997559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 713 -1.8669789656996727e-02</internalNodes>\n          <leafValues>\n            -3.9924529194831848e-01 7.3442213237285614e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 714 -1.4987000264227390e-02</internalNodes>\n          <leafValues>\n            -3.2296919822692871e-01 4.1676748543977737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 715 8.7209865450859070e-03</internalNodes>\n          <leafValues>\n            1.3521389663219452e-01 -1.8224580585956573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 716 -1.2239219620823860e-02</internalNodes>\n          <leafValues>\n            1.5540809929370880e-01 -1.5208069980144501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 717 -4.8744980245828629e-02</internalNodes>\n          <leafValues>\n            -3.6606758832931519e-01 6.3152566552162170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 718 -3.8249569479376078e-03</internalNodes>\n          <leafValues>\n            8.3472989499568939e-02 -2.4186329543590546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 719 1.5581659972667694e-01</internalNodes>\n          <leafValues>\n            3.1953960657119751e-02 -6.7813181877136230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 720 6.8241581320762634e-02</internalNodes>\n          <leafValues>\n            1.5478439629077911e-02 -4.2029750347137451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 721 -9.5974646508693695e-02</internalNodes>\n          <leafValues>\n            -9.5647841691970825e-01 2.1444590762257576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 722 -1.2618429958820343e-02</internalNodes>\n          <leafValues>\n            -5.0544857978820801e-01 3.0875260010361671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 723 7.2727642953395844e-02</internalNodes>\n          <leafValues>\n            4.7215349972248077e-02 -4.5075151324272156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 724 2.9923219233751297e-02</internalNodes>\n          <leafValues>\n            -8.1444352865219116e-02 3.1656229496002197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 725 1.9138090312480927e-02</internalNodes>\n          <leafValues>\n            6.8187400698661804e-02 -3.4876790642738342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 726 -3.4314721822738647e-02</internalNodes>\n          <leafValues>\n            -5.5220371484756470e-01 3.7325009703636169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 727 5.2559198811650276e-03</internalNodes>\n          <leafValues>\n            6.4786978065967560e-02 -3.6363509297370911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 728 1.4092399738729000e-02</internalNodes>\n          <leafValues>\n            -4.8704359680414200e-02 2.7677831053733826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 729 -9.0101473033428192e-03</internalNodes>\n          <leafValues>\n            2.3452599346637726e-01 -1.3140350580215454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 730 9.6720218658447266e-02</internalNodes>\n          <leafValues>\n            2.6661360636353493e-02 -7.7422797679901123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 731 8.5365071892738342e-02</internalNodes>\n          <leafValues>\n            2.3529909551143646e-02 -7.0710861682891846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 732 2.4384429678320885e-02</internalNodes>\n          <leafValues>\n            -6.2648482620716095e-02 3.7251880764961243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 733 3.6380778998136520e-02</internalNodes>\n          <leafValues>\n            4.3358739465475082e-02 -6.0222417116165161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 734 -5.3780268877744675e-02</internalNodes>\n          <leafValues>\n            -3.3441001176834106e-01 3.5700578242540359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 735 -1.4787100255489349e-02</internalNodes>\n          <leafValues>\n            2.9136168956756592e-01 -7.4075296521186829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 736 1.2491010129451752e-03</internalNodes>\n          <leafValues>\n            4.1654240339994431e-02 -9.3758836388587952e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 737 -2.7572909370064735e-02</internalNodes>\n          <leafValues>\n            -3.1398218870162964e-01 7.2411999106407166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 738 -7.8866451978683472e-02</internalNodes>\n          <leafValues>\n            6.0655838251113892e-01 -2.3838050663471222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 739 -6.9339312613010406e-02</internalNodes>\n          <leafValues>\n            7.1137732267379761e-01 -2.9814269393682480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 740 9.4372592866420746e-02</internalNodes>\n          <leafValues>\n            3.3579438924789429e-02 -5.9774041175842285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 741 -2.6048649102449417e-02</internalNodes>\n          <leafValues>\n            -4.0574911236763000e-01 5.5603530257940292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 742 -7.3630206286907196e-02</internalNodes>\n          <leafValues>\n            -6.0780352354049683e-01 2.5251649320125580e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 743 -1.8610449507832527e-02</internalNodes>\n          <leafValues>\n            2.4013559520244598e-01 -9.5389783382415771e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 744 1.3329629600048065e-01</internalNodes>\n          <leafValues>\n            -6.9742381572723389e-02 1.3323000073432922e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>112</maxWeakCount>\n      <stageThreshold>-1.6909840106964111e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 745 -4.1724857874214649e-03</internalNodes>\n          <leafValues>\n            1.9310890138149261e-01 -4.9630740284919739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 746 9.6606701845303178e-04</internalNodes>\n          <leafValues>\n            -5.4340302944183350e-01 1.2434119731187820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 747 1.0261629940941930e-03</internalNodes>\n          <leafValues>\n            -4.6321579813957214e-01 1.1160290241241455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 748 3.6368470173329115e-03</internalNodes>\n          <leafValues>\n            8.2918949425220490e-02 -3.6662510037422180e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 749 -2.8364539612084627e-03</internalNodes>\n          <leafValues>\n            -6.7365992069244385e-01 6.5546013414859772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 750 -1.0111520532518625e-03</internalNodes>\n          <leafValues>\n            1.4055189490318298e-01 -3.5270330309867859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 751 -2.5434889830648899e-03</internalNodes>\n          <leafValues>\n            1.4191180467605591e-01 -2.8350821137428284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 752 3.3014779910445213e-03</internalNodes>\n          <leafValues>\n            4.6553891152143478e-02 -4.8537290096282959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 753 -1.1802930384874344e-02</internalNodes>\n          <leafValues>\n            -3.7958830595016479e-01 9.2071913182735443e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 754 -1.3293370138853788e-03</internalNodes>\n          <leafValues>\n            1.7311429977416992e-01 -1.6890439391136169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 755 1.4958450198173523e-01</internalNodes>\n          <leafValues>\n            3.7626601755619049e-02 -8.0016881227493286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 756 1.6352189704775810e-03</internalNodes>\n          <leafValues>\n            -2.0858129858970642e-01 1.5985429286956787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 757 1.5483440365642309e-03</internalNodes>\n          <leafValues>\n            -1.7578269541263580e-01 1.7560100555419922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 758 -3.5674259066581726e-02</internalNodes>\n          <leafValues>\n            -4.6057531237602234e-01 4.3983791023492813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 759 -1.4558699913322926e-02</internalNodes>\n          <leafValues>\n            -3.3587411046028137e-01 8.3965480327606201e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 760 5.2891410887241364e-03</internalNodes>\n          <leafValues>\n            -3.5635179281234741e-01 9.4101972877979279e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 761 -9.8066125065088272e-04</internalNodes>\n          <leafValues>\n            -4.4301840662956238e-01 6.4368210732936859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 762 -4.0704999119043350e-02</internalNodes>\n          <leafValues>\n            -5.9700322151184082e-01 1.7846770584583282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 763 2.9682040214538574e-02</internalNodes>\n          <leafValues>\n            3.8127020001411438e-02 -6.6795140504837036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 764 -1.7841320368461311e-04</internalNodes>\n          <leafValues>\n            7.4118576943874359e-02 -3.2121241092681885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 765 1.0050840210169554e-03</internalNodes>\n          <leafValues>\n            -2.0642249286174774e-01 1.2194109708070755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 766 -1.6711819916963577e-03</internalNodes>\n          <leafValues>\n            -2.6586419343948364e-01 7.1882687509059906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 767 -6.9955319166183472e-02</internalNodes>\n          <leafValues>\n            5.0097060203552246e-01 -5.2172549068927765e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 768 8.3406828343868256e-03</internalNodes>\n          <leafValues>\n            -6.9546110928058624e-02 1.6949440538883209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 769 1.5483159571886063e-02</internalNodes>\n          <leafValues>\n            -9.5865622162818909e-02 2.8736731410026550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 770 -4.2621988803148270e-02</internalNodes>\n          <leafValues>\n            -2.5160768628120422e-01 1.1381790041923523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 771 3.6459038965404034e-03</internalNodes>\n          <leafValues>\n            7.0138469338417053e-02 -4.0376278758049011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 772 -1.8889949424192309e-03</internalNodes>\n          <leafValues>\n            1.4695550501346588e-01 -1.7879849672317505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 773 -3.4749018959701061e-03</internalNodes>\n          <leafValues>\n            -2.4985860288143158e-01 1.0349679738283157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 774 -3.7792209535837173e-02</internalNodes>\n          <leafValues>\n            -6.5756058692932129e-01 2.3007599636912346e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 775 -4.0167139377444983e-04</internalNodes>\n          <leafValues>\n            1.4987960457801819e-01 -1.4527609944343567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 776 3.4890990704298019e-02</internalNodes>\n          <leafValues>\n            -4.5207828283309937e-02 5.1295852661132812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 777 -9.5964537467807531e-04</internalNodes>\n          <leafValues>\n            1.4688290655612946e-01 -1.7244540154933929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 778 -9.6461333334445953e-02</internalNodes>\n          <leafValues>\n            -7.1814310550689697e-01 3.2587919384241104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 779 -1.1924919672310352e-03</internalNodes>\n          <leafValues>\n            1.3805310428142548e-01 -1.4162309467792511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 780 -1.6420070081949234e-02</internalNodes>\n          <leafValues>\n            -4.1954740881919861e-01 4.3040689080953598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 781 -6.1112269759178162e-02</internalNodes>\n          <leafValues>\n            3.7761390209197998e-01 -5.6264769285917282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 782 -3.1682170927524567e-02</internalNodes>\n          <leafValues>\n            2.1038809418678284e-01 -5.4475009441375732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 783 -7.4058552272617817e-03</internalNodes>\n          <leafValues>\n            -1.8709950149059296e-01 1.0876149684190750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 784 -2.8892440604977310e-04</internalNodes>\n          <leafValues>\n            6.9734372198581696e-02 -2.4516759812831879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 785 -7.9921782016754150e-03</internalNodes>\n          <leafValues>\n            -2.4069899320602417e-01 8.8012270629405975e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 786 -6.4670671708881855e-03</internalNodes>\n          <leafValues>\n            2.0819950103759766e-01 -6.9062210619449615e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 787 -5.3345328196883202e-03</internalNodes>\n          <leafValues>\n            3.2469388842582703e-01 -7.4058808386325836e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 788 -6.7914440296590328e-03</internalNodes>\n          <leafValues>\n            -1.7014460265636444e-01 3.7378448992967606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 789 1.6337619721889496e-01</internalNodes>\n          <leafValues>\n            1.9682100042700768e-02 -9.1652041673660278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 790 1.1759659647941589e-01</internalNodes>\n          <leafValues>\n            8.8446342851966619e-04 -7.8050827980041504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 791 -1.1682280153036118e-01</internalNodes>\n          <leafValues>\n            -9.6009898185729980e-01 1.7070280387997627e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 792 4.6899251639842987e-02</internalNodes>\n          <leafValues>\n            4.7891899943351746e-02 -3.2044771313667297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 793 -4.0058898739516735e-03</internalNodes>\n          <leafValues>\n            1.1414390057325363e-01 -1.5711469948291779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 794 -4.4986438297200948e-05</internalNodes>\n          <leafValues>\n            2.9008099436759949e-01 -4.2413331568241119e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 795 2.1421080455183983e-03</internalNodes>\n          <leafValues>\n            -3.3137580752372742e-01 5.3943689912557602e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 796 -7.1408763527870178e-02</internalNodes>\n          <leafValues>\n            -8.8519471883773804e-01 9.3488330021500587e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 797 -1.3733670115470886e-01</internalNodes>\n          <leafValues>\n            -8.3241897821426392e-01 1.7800329253077507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 798 6.1765720602124929e-04</internalNodes>\n          <leafValues>\n            -1.9419220089912415e-01 6.8034619092941284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 799 -6.7170798778533936e-02</internalNodes>\n          <leafValues>\n            -5.7243210077285767e-01 3.0333630740642548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 800 2.4611391127109528e-03</internalNodes>\n          <leafValues>\n            -1.0570179671049118e-01 1.8801900744438171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 801 5.0573959015309811e-03</internalNodes>\n          <leafValues>\n            -6.5921753644943237e-02 2.9868951439857483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 802 1.4213779941201210e-02</internalNodes>\n          <leafValues>\n            6.3767880201339722e-02 -2.1217249333858490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 803 -2.0629619248211384e-03</internalNodes>\n          <leafValues>\n            -2.6714050769805908e-01 7.6817572116851807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 804 3.3787779510021210e-02</internalNodes>\n          <leafValues>\n            2.1774150431156158e-02 -7.4938130378723145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 805 -2.7371870353817940e-02</internalNodes>\n          <leafValues>\n            3.2008060812950134e-01 -5.9622511267662048e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 806 2.8310349211096764e-02</internalNodes>\n          <leafValues>\n            4.4150609523057938e-02 -4.4278699159622192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 807 3.7205279804766178e-03</internalNodes>\n          <leafValues>\n            -1.3136489689350128e-01 1.5447700023651123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 808 2.3320990148931742e-03</internalNodes>\n          <leafValues>\n            -1.0849229991436005e-01 2.2682890295982361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 809 7.6775359921157360e-03</internalNodes>\n          <leafValues>\n            4.9520388245582581e-02 -3.8854768872261047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 810 -2.9863099916838109e-04</internalNodes>\n          <leafValues>\n            -1.9632560014724731e-01 8.3448931574821472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 811 6.1346050351858139e-03</internalNodes>\n          <leafValues>\n            5.1433250308036804e-02 -3.0831611156463623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 812 3.1090779229998589e-02</internalNodes>\n          <leafValues>\n            2.4180799722671509e-02 -6.0184460878372192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 813 2.9320400953292847e-01</internalNodes>\n          <leafValues>\n            1.1811030097305775e-02 -9.6253931522369385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 814 -6.6321907797828317e-04</internalNodes>\n          <leafValues>\n            1.0245270282030106e-01 -1.4200760424137115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 815 4.4736359268426895e-02</internalNodes>\n          <leafValues>\n            -1.1238799989223480e-01 1.7392039299011230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 816 -1.5153390355408192e-02</internalNodes>\n          <leafValues>\n            -1.6100360453128815e-01 3.1116949394345284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 817 -1.1029309825971723e-03</internalNodes>\n          <leafValues>\n            1.2128510326147079e-01 -1.6182290017604828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 818 -2.8973959852010012e-03</internalNodes>\n          <leafValues>\n            1.0827620327472687e-01 -5.3621310740709305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 819 -9.5785204321146011e-03</internalNodes>\n          <leafValues>\n            -1.6808320581912994e-01 8.5053622722625732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 820 9.9092386662960052e-02</internalNodes>\n          <leafValues>\n            -1.5469879843294621e-02 4.1138508915901184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 821 3.7229780107736588e-02</internalNodes>\n          <leafValues>\n            -5.2865970879793167e-02 3.1804299354553223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 822 -2.4716049432754517e-02</internalNodes>\n          <leafValues>\n            -4.0339410305023193e-01 2.9964840039610863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 823 -9.8965302109718323e-02</internalNodes>\n          <leafValues>\n            5.8510482311248779e-01 -2.6924170553684235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 824 -9.6337851136922836e-03</internalNodes>\n          <leafValues>\n            -1.7467470467090607e-01 7.5126871466636658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 825 1.0483879595994949e-03</internalNodes>\n          <leafValues>\n            -1.3728469610214233e-01 1.0684580355882645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 826 4.2523849755525589e-02</internalNodes>\n          <leafValues>\n            1.6578629612922668e-02 -5.6332737207412720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 827 -3.0866260640323162e-03</internalNodes>\n          <leafValues>\n            7.5264893472194672e-02 -1.9476540386676788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 828 2.8643399477005005e-02</internalNodes>\n          <leafValues>\n            -6.7578136920928955e-02 2.5766220688819885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 829 -1.0627339594066143e-02</internalNodes>\n          <leafValues>\n            -2.2384619712829590e-01 7.2172448039054871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 830 4.6080970205366611e-03</internalNodes>\n          <leafValues>\n            5.0876080989837646e-02 -1.4076329767704010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 831 2.9914160259068012e-03</internalNodes>\n          <leafValues>\n            -9.7337983548641205e-02 1.7665959894657135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 832 -7.7902628108859062e-03</internalNodes>\n          <leafValues>\n            -9.8008237779140472e-02 3.7403069436550140e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 833 -6.1339238891378045e-04</internalNodes>\n          <leafValues>\n            9.9036023020744324e-02 -1.6265949606895447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 834 -1.0234319604933262e-02</internalNodes>\n          <leafValues>\n            2.3654979467391968e-01 -3.7817131727933884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 835 -1.1867409572005272e-02</internalNodes>\n          <leafValues>\n            -8.5035067796707153e-01 1.9063299521803856e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 836 4.1437768377363682e-03</internalNodes>\n          <leafValues>\n            8.7878346443176270e-02 -9.4404630362987518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 837 -5.1355729810893536e-03</internalNodes>\n          <leafValues>\n            -3.5699799656867981e-01 4.1546490043401718e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 838 -1.5296200290322304e-03</internalNodes>\n          <leafValues>\n            7.7694572508335114e-02 -4.3186578899621964e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 839 -2.7581020258367062e-03</internalNodes>\n          <leafValues>\n            1.9065889716148376e-01 -8.0679900944232941e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 840 2.8375169634819031e-01</internalNodes>\n          <leafValues>\n            6.2291761860251427e-03 -8.8578152656555176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 841 -2.4612499773502350e-01</internalNodes>\n          <leafValues>\n            -7.0548111200332642e-01 2.1798960864543915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 842 -3.9965631440281868e-03</internalNodes>\n          <leafValues>\n            -1.9710969924926758e-01 8.0300606787204742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 843 -8.4951231256127357e-03</internalNodes>\n          <leafValues>\n            2.1296609938144684e-01 -8.2974627614021301e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 844 4.7206480056047440e-02</internalNodes>\n          <leafValues>\n            9.7466083243489265e-03 -7.0066297054290771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 845 3.7802560254931450e-03</internalNodes>\n          <leafValues>\n            7.7478893101215363e-02 -2.3372000455856323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 846 4.4631671160459518e-02</internalNodes>\n          <leafValues>\n            -2.1464770659804344e-02 3.2136338949203491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 847 6.8157288478687406e-04</internalNodes>\n          <leafValues>\n            1.2177070230245590e-01 -1.2063200026750565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 848 -6.9712452590465546e-02</internalNodes>\n          <leafValues>\n            -9.4828051328659058e-01 1.2017440050840378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 849 -4.8821792006492615e-03</internalNodes>\n          <leafValues>\n            -2.1774840354919434e-01 7.7113322913646698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 850 3.4387600608170033e-03</internalNodes>\n          <leafValues>\n            -1.8093569576740265e-01 9.3595556914806366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 851 -2.5215700268745422e-02</internalNodes>\n          <leafValues>\n            -5.5714958906173706e-01 2.7420820668339729e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 852 7.4309771880507469e-03</internalNodes>\n          <leafValues>\n            -4.6630490571260452e-02 2.1024890244007111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 853 -1.5789959579706192e-02</internalNodes>\n          <leafValues>\n            -3.3443140983581543e-01 4.6291690319776535e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 854 3.5080160014331341e-03</internalNodes>\n          <leafValues>\n            -6.4612612128257751e-02 2.2737669944763184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 855 4.4291261583566666e-02</internalNodes>\n          <leafValues>\n            2.2642729803919792e-02 -7.0683121681213379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 856 1.9108189269900322e-02</internalNodes>\n          <leafValues>\n            -3.5893321037292480e-02 1.4613699913024902e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>99</maxWeakCount>\n      <stageThreshold>-1.8724700212478638e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 857 -1.6636669635772705e-02</internalNodes>\n          <leafValues>\n            2.5966519117355347e-01 -4.1162249445915222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 858 2.9865810647606850e-02</internalNodes>\n          <leafValues>\n            -3.3182668685913086e-01 2.0545999705791473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 859 9.1892024502158165e-03</internalNodes>\n          <leafValues>\n            -3.4481799602508545e-01 1.8148690462112427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 860 2.8450509998947382e-03</internalNodes>\n          <leafValues>\n            -3.2904830574989319e-01 9.4392292201519012e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 861 3.4257639199495316e-02</internalNodes>\n          <leafValues>\n            -3.2212799787521362e-01 1.7332050204277039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 862 3.4367710351943970e-02</internalNodes>\n          <leafValues>\n            -3.2593810558319092e-01 1.7473269999027252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 863 9.0881884098052979e-03</internalNodes>\n          <leafValues>\n            1.0527010262012482e-01 -4.8131370544433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 864 -5.0939731299877167e-03</internalNodes>\n          <leafValues>\n            1.7374989390373230e-01 -2.7883121371269226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 865 1.1773620499297976e-03</internalNodes>\n          <leafValues>\n            -4.2217200994491577e-01 1.0231760144233704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 866 3.6797609180212021e-02</internalNodes>\n          <leafValues>\n            1.1229369789361954e-01 -3.8409191370010376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 867 -7.2484882548451424e-04</internalNodes>\n          <leafValues>\n            -4.4795128703117371e-01 8.5079587996006012e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 868 1.2603210285305977e-02</internalNodes>\n          <leafValues>\n            6.0475040227174759e-02 -3.5327509045600891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 869 5.1925552543252707e-04</internalNodes>\n          <leafValues>\n            -3.1916388869285583e-01 1.1903370171785355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 870 -1.3244180008769035e-02</internalNodes>\n          <leafValues>\n            2.1975730359554291e-01 -9.5025591552257538e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 871 -2.7882310096174479e-03</internalNodes>\n          <leafValues>\n            -2.7294808626174927e-01 1.2419769912958145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 872 2.6591470465064049e-02</internalNodes>\n          <leafValues>\n            6.0452010482549667e-02 -3.9637029170989990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 873 1.2505210004746914e-02</internalNodes>\n          <leafValues>\n            7.8631103038787842e-02 -4.0303888916969299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 874 -1.3857340440154076e-02</internalNodes>\n          <leafValues>\n            2.5759750604629517e-01 -1.0351459681987762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 875 7.2099752724170685e-02</internalNodes>\n          <leafValues>\n            -5.5193781852722168e-01 6.0020800679922104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 876 -9.8338630050420761e-04</internalNodes>\n          <leafValues>\n            -3.1915199756622314e-01 8.7977647781372070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 877 -5.8390170335769653e-02</internalNodes>\n          <leafValues>\n            -5.5988979339599609e-01 5.2990190684795380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 878 4.2504342272877693e-03</internalNodes>\n          <leafValues>\n            -2.8897258639335632e-01 9.2816516757011414e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 879 -3.2332520931959152e-02</internalNodes>\n          <leafValues>\n            -4.8713520169258118e-01 6.0787629336118698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 880 4.7365639358758926e-02</internalNodes>\n          <leafValues>\n            -1.0111550241708755e-01 3.2597780227661133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 881 -3.8943330291658640e-03</internalNodes>\n          <leafValues>\n            1.9173160195350647e-01 -1.6729380190372467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 882 5.7729199528694153e-02</internalNodes>\n          <leafValues>\n            3.6343291401863098e-02 -7.3161131143569946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 883 -1.8925540149211884e-02</internalNodes>\n          <leafValues>\n            3.2471498847007751e-01 -8.6188063025474548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 884 -3.9679601788520813e-02</internalNodes>\n          <leafValues>\n            -4.1826680302619934e-01 5.3354211151599884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 885 -2.0733650773763657e-02</internalNodes>\n          <leafValues>\n            -4.1205188632011414e-01 6.3596852123737335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 886 1.5387910604476929e-01</internalNodes>\n          <leafValues>\n            1.9954150542616844e-02 -5.7643288373947144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 887 1.2131260335445404e-01</internalNodes>\n          <leafValues>\n            4.4516459107398987e-02 -5.9093242883682251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 888 2.7478559786686674e-05</internalNodes>\n          <leafValues>\n            -4.0688499808311462e-01 5.2828099578619003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 889 8.8893681764602661e-02</internalNodes>\n          <leafValues>\n            5.1985241472721100e-02 -5.0228989124298096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 890 2.8169099241495132e-03</internalNodes>\n          <leafValues>\n            6.7726433277130127e-02 -1.3582049310207367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 891 -1.7215269326698035e-04</internalNodes>\n          <leafValues>\n            8.9616917073726654e-02 -2.9589369893074036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 892 -3.1830620020627975e-02</internalNodes>\n          <leafValues>\n            -5.6433600187301636e-01 2.2822249680757523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 893 -6.3334330916404724e-02</internalNodes>\n          <leafValues>\n            -8.2371699810028076e-01 2.7576120570302010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 894 -6.9032818078994751e-02</internalNodes>\n          <leafValues>\n            -6.9788217544555664e-01 3.3770920708775520e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 895 2.1021519787609577e-03</internalNodes>\n          <leafValues>\n            -2.7244049310684204e-01 8.6922891438007355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 896 3.4065779298543930e-02</internalNodes>\n          <leafValues>\n            1.7670579254627228e-02 -4.3001320958137512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 897 8.1215314567089081e-03</internalNodes>\n          <leafValues>\n            -1.5942670404911041e-01 1.6256070137023926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 898 -1.6329119680449367e-03</internalNodes>\n          <leafValues>\n            4.2009588330984116e-02 -3.2923451066017151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 899 -3.9110329002141953e-02</internalNodes>\n          <leafValues>\n            -6.0666251182556152e-01 4.1248850524425507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 900 -2.3188870400190353e-02</internalNodes>\n          <leafValues>\n            -5.5365419387817383e-01 1.7315510660409927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 901 -6.2944158911705017e-02</internalNodes>\n          <leafValues>\n            -5.3853708505630493e-01 4.1758351027965546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 902 -8.5414372384548187e-02</internalNodes>\n          <leafValues>\n            -9.3122452497482300e-01 -9.1123272432014346e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 903 -4.1963338851928711e-02</internalNodes>\n          <leafValues>\n            -5.6720697879791260e-01 3.9175700396299362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 904 1.1165619827806950e-02</internalNodes>\n          <leafValues>\n            -6.7815810441970825e-02 2.9003840684890747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 905 -1.3730769976973534e-02</internalNodes>\n          <leafValues>\n            3.2328099012374878e-01 -1.0592839866876602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 906 -7.5793050229549408e-02</internalNodes>\n          <leafValues>\n            5.5545729398727417e-01 -3.2934208866208792e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 907 2.7008100878447294e-03</internalNodes>\n          <leafValues>\n            1.5311180055141449e-01 -1.6604180634021759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 908 1.0164660401642323e-02</internalNodes>\n          <leafValues>\n            7.6404631137847900e-02 -2.8745749592781067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 909 -5.9808149933815002e-02</internalNodes>\n          <leafValues>\n            -7.3486739397048950e-01 3.0370820313692093e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 910 9.6447616815567017e-02</internalNodes>\n          <leafValues>\n            2.6198839768767357e-02 -6.6001427173614502e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 911 3.2350219786167145e-02</internalNodes>\n          <leafValues>\n            4.1407719254493713e-02 -4.7442498803138733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 912 2.3717279732227325e-01</internalNodes>\n          <leafValues>\n            -9.5941081643104553e-02 2.4070499837398529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 913 -4.0942471474409103e-02</internalNodes>\n          <leafValues>\n            -4.0582120418548584e-01 6.4327560365200043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 914 -3.4409161657094955e-02</internalNodes>\n          <leafValues>\n            -7.4849551916122437e-01 2.2520760074257851e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 915 1.3847379386425018e-01</internalNodes>\n          <leafValues>\n            2.8472309932112694e-02 -7.0612120628356934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 916 4.6567160636186600e-02</internalNodes>\n          <leafValues>\n            -4.1168119758367538e-02 6.9962567090988159e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 917 -3.0492639169096947e-02</internalNodes>\n          <leafValues>\n            -6.5116977691650391e-01 3.9995279163122177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 918 8.6345896124839783e-03</internalNodes>\n          <leafValues>\n            -1.1207970231771469e-01 7.7241696417331696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 919 3.1845968216657639e-02</internalNodes>\n          <leafValues>\n            -1.1552079766988754e-01 1.7539389431476593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 920 1.7124590277671814e-01</internalNodes>\n          <leafValues>\n            5.0687979906797409e-02 -4.7042238712310791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 921 5.2879499271512032e-03</internalNodes>\n          <leafValues>\n            6.5041497349739075e-02 -2.8894019126892090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 922 1.0060779750347137e-02</internalNodes>\n          <leafValues>\n            6.3689216971397400e-02 -2.6081889867782593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 923 3.3330768346786499e-02</internalNodes>\n          <leafValues>\n            3.4809298813343048e-02 -5.7845467329025269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 924 -5.2802279591560364e-02</internalNodes>\n          <leafValues>\n            -6.8521040678024292e-01 1.7583779990673065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 925 -1.5452199615538120e-02</internalNodes>\n          <leafValues>\n            3.1395891308784485e-01 -7.7611543238162994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 926 -6.5528601408004761e-04</internalNodes>\n          <leafValues>\n            5.6181360036134720e-02 -1.5184390544891357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 927 3.7062149494886398e-02</internalNodes>\n          <leafValues>\n            2.8928549960255623e-02 -7.0487600564956665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 928 -5.7728089392185211e-02</internalNodes>\n          <leafValues>\n            -4.3192410469055176e-01 9.2153800651431084e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 929 -2.2813139948993921e-03</internalNodes>\n          <leafValues>\n            1.0200300067663193e-01 -2.1657040715217590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 930 2.6513230055570602e-02</internalNodes>\n          <leafValues>\n            -8.3650946617126465e-02 3.0740359425544739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 931 7.3622196912765503e-02</internalNodes>\n          <leafValues>\n            3.0683049932122231e-02 -7.1910232305526733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 932 -1.3022350147366524e-02</internalNodes>\n          <leafValues>\n            -3.6386561393737793e-01 2.5367209687829018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 933 -1.3319820165634155e-02</internalNodes>\n          <leafValues>\n            -5.1884061098098755e-01 3.5935029387474060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 934 2.3190369829535484e-03</internalNodes>\n          <leafValues>\n            -6.1515200883150101e-02 7.1100451052188873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 935 -2.1372830495238304e-02</internalNodes>\n          <leafValues>\n            -5.0247579813003540e-01 3.9844810962677002e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 936 2.4474589154124260e-02</internalNodes>\n          <leafValues>\n            -4.7960858792066574e-02 2.6931110024452209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 937 -1.0679869912564754e-02</internalNodes>\n          <leafValues>\n            3.1474280357360840e-01 -8.4758952260017395e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 938 4.8961799591779709e-02</internalNodes>\n          <leafValues>\n            2.7358099818229675e-02 -3.8229361176490784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 939 3.2376348972320557e-02</internalNodes>\n          <leafValues>\n            -4.7090999782085419e-02 4.5985230803489685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 940 -1.0995220392942429e-02</internalNodes>\n          <leafValues>\n            -1.8544240295886993e-01 3.6006979644298553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 941 1.7626030743122101e-01</internalNodes>\n          <leafValues>\n            2.4375159293413162e-02 -7.7686601877212524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 942 7.9778492450714111e-02</internalNodes>\n          <leafValues>\n            3.3787339925765991e-03 -7.2928887605667114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 943 -1.1329210363328457e-02</internalNodes>\n          <leafValues>\n            -4.6397671103477478e-01 3.9380829781293869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 944 6.3431300222873688e-02</internalNodes>\n          <leafValues>\n            -9.7074061632156372e-02 1.0118869692087173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 945 -1.2691849842667580e-02</internalNodes>\n          <leafValues>\n            2.8142300248146057e-01 -7.2105713188648224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 946 -7.8238412737846375e-02</internalNodes>\n          <leafValues>\n            5.7400637865066528e-01 -1.8400549888610840e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 947 3.9532519876956940e-02</internalNodes>\n          <leafValues>\n            4.3154988437891006e-02 -5.2327841520309448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 948 1.5355779789388180e-02</internalNodes>\n          <leafValues>\n            -4.7316178679466248e-02 4.6925771236419678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 949 -6.4018620178103447e-03</internalNodes>\n          <leafValues>\n            1.3297230005264282e-01 -1.4365619421005249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 950 -1.0567340254783630e-01</internalNodes>\n          <leafValues>\n            2.0206320285797119e-01 -1.4406460337340832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 951 2.8163839131593704e-02</internalNodes>\n          <leafValues>\n            7.1180991828441620e-02 -3.1034231185913086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 952 1.1702980101108551e-01</internalNodes>\n          <leafValues>\n            1.1619930155575275e-02 -7.1530961990356445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 953 -3.8921568542718887e-02</internalNodes>\n          <leafValues>\n            2.4412679672241211e-01 -8.2244850695133209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 954 -2.8435489162802696e-02</internalNodes>\n          <leafValues>\n            -3.6785170435905457e-01 3.8488820195198059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 955 -3.6393549293279648e-02</internalNodes>\n          <leafValues>\n            5.2206730842590332e-01 -4.7079380601644516e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>139</maxWeakCount>\n      <stageThreshold>-1.7121059894561768e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 956 -2.1428510546684265e-02</internalNodes>\n          <leafValues>\n            1.9014079868793488e-01 -5.0612741708755493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 957 2.0596129819750786e-02</internalNodes>\n          <leafValues>\n            -2.9283228516578674e-01 2.4655179679393768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 958 2.7893469668924809e-03</internalNodes>\n          <leafValues>\n            1.1085920035839081e-01 -4.6909829974174500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 959 4.4722640886902809e-03</internalNodes>\n          <leafValues>\n            -2.8250780701637268e-01 1.4564670622348785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 960 -1.0463190264999866e-03</internalNodes>\n          <leafValues>\n            -2.6603269577026367e-01 1.2815919518470764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 961 1.5831940108910203e-03</internalNodes>\n          <leafValues>\n            -6.3467299938201904e-01 7.1003831923007965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 962 -7.3153319135599304e-06</internalNodes>\n          <leafValues>\n            1.0248930007219315e-01 -3.4815961122512817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 963 5.4208859801292419e-03</internalNodes>\n          <leafValues>\n            5.9830531477928162e-02 -3.1387779116630554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 964 1.2645759852603078e-03</internalNodes>\n          <leafValues>\n            -2.2709150612354279e-01 1.3160009682178497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 965 3.0235300073400140e-05</internalNodes>\n          <leafValues>\n            -2.6413309574127197e-01 2.8918080031871796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 966 1.5345469582825899e-03</internalNodes>\n          <leafValues>\n            -4.0711951255798340e-01 6.9787837564945221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 967 6.8222070112824440e-03</internalNodes>\n          <leafValues>\n            -1.5069720149040222e-01 2.1888419985771179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 968 -9.8558319732546806e-03</internalNodes>\n          <leafValues>\n            -3.5441368818283081e-01 8.6026392877101898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 969 -2.9890429228544235e-02</internalNodes>\n          <leafValues>\n            2.2117440402507782e-01 -2.8611009940505028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 970 -2.6285760104656219e-03</internalNodes>\n          <leafValues>\n            9.8204180598258972e-02 -2.7149739861488342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 971 3.2039839425124228e-04</internalNodes>\n          <leafValues>\n            -9.8540462553501129e-02 1.8785539269447327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 972 1.1079469695687294e-03</internalNodes>\n          <leafValues>\n            6.4034536480903625e-02 -4.3082669377326965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 973 -9.1538369655609131e-02</internalNodes>\n          <leafValues>\n            -5.2440929412841797e-01 1.2250489555299282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 974 4.3205898255109787e-02</internalNodes>\n          <leafValues>\n            9.6655867993831635e-02 -2.6809310913085938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 975 9.1920839622616768e-04</internalNodes>\n          <leafValues>\n            -1.3260160386562347e-01 1.2358319759368896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 976 8.9521165937185287e-03</internalNodes>\n          <leafValues>\n            8.6445420980453491e-02 -2.3219430446624756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 977 5.6190020404756069e-03</internalNodes>\n          <leafValues>\n            -6.0304049402475357e-02 1.5070669353008270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 978 3.7380240391939878e-03</internalNodes>\n          <leafValues>\n            -1.8652540445327759e-01 1.3011780381202698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 979 -4.4416960328817368e-02</internalNodes>\n          <leafValues>\n            1.9036759436130524e-01 -1.7527159303426743e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 980 1.9832739606499672e-02</internalNodes>\n          <leafValues>\n            -5.3527630865573883e-02 4.0238130092620850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 981 1.2155610136687756e-02</internalNodes>\n          <leafValues>\n            9.1288566589355469e-02 -2.6862761378288269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 982 5.0532341003417969e-02</internalNodes>\n          <leafValues>\n            3.1295180320739746e-02 -6.2836539745330811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 983 -1.7635909607633948e-03</internalNodes>\n          <leafValues>\n            5.6185219436883926e-02 -2.1861009299755096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 984 4.9412921071052551e-03</internalNodes>\n          <leafValues>\n            5.5915899574756622e-02 -3.5954388976097107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 985 -1.1536119878292084e-01</internalNodes>\n          <leafValues>\n            -5.3168737888336182e-01 7.9654296860098839e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 986 -2.0473708864301443e-03</internalNodes>\n          <leafValues>\n            7.9633012413978577e-02 -2.5389900803565979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 987 4.7814860008656979e-03</internalNodes>\n          <leafValues>\n            -9.4149880111217499e-02 1.1631009727716446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 988 2.1274939179420471e-02</internalNodes>\n          <leafValues>\n            -4.7486610710620880e-02 3.7564519047737122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 989 5.1177050918340683e-03</internalNodes>\n          <leafValues>\n            7.4936643242835999e-02 -2.6105350255966187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 990 -1.3952000066637993e-02</internalNodes>\n          <leafValues>\n            2.3960170149803162e-01 -9.6836768090724945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 991 -1.3828179799020290e-02</internalNodes>\n          <leafValues>\n            -3.9605268836021423e-01 5.8639749884605408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 992 -4.7117020934820175e-02</internalNodes>\n          <leafValues>\n            -5.5717539787292480e-01 3.1678650528192520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 993 1.0515590198338032e-02</internalNodes>\n          <leafValues>\n            -4.3930530548095703e-02 8.5277959704399109e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 994 4.0591089054942131e-03</internalNodes>\n          <leafValues>\n            -1.0774219781160355e-01 1.6283099353313446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 995 -3.0376210808753967e-02</internalNodes>\n          <leafValues>\n            2.0997379720211029e-01 -9.9417790770530701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 996 -6.6932791378349066e-04</internalNodes>\n          <leafValues>\n            -3.4863340854644775e-01 5.9148021042346954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 997 -1.4665089547634125e-02</internalNodes>\n          <leafValues>\n            -4.3786540627479553e-01 2.8008179739117622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 998 -3.5847770050168037e-03</internalNodes>\n          <leafValues>\n            9.6611537039279938e-02 -1.7948310077190399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 999 -5.5043050087988377e-03</internalNodes>\n          <leafValues>\n            -3.3546659350395203e-01 7.5057849287986755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1000 1.0141800157725811e-03</internalNodes>\n          <leafValues>\n            -1.8602859973907471e-01 8.6880050599575043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1001 1.4642399735748768e-02</internalNodes>\n          <leafValues>\n            2.6652090251445770e-02 -2.6002681255340576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1002 -5.8538499288260937e-03</internalNodes>\n          <leafValues>\n            -1.4993189275264740e-01 1.2684640288352966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1003 -5.3472168743610382e-02</internalNodes>\n          <leafValues>\n            5.2131122350692749e-01 -2.0375749096274376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1004 -7.6695926487445831e-02</internalNodes>\n          <leafValues>\n            4.5817071199417114e-01 -3.4876950085163116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1005 -5.9094227617606521e-04</internalNodes>\n          <leafValues>\n            1.1570499837398529e-01 -1.2966969609260559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1006 -4.3543361127376556e-02</internalNodes>\n          <leafValues>\n            -8.2132732868194580e-01 2.0535599440336227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1007 5.0691701471805573e-02</internalNodes>\n          <leafValues>\n            -3.6280639469623566e-02 4.0212449431419373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1008 1.3124669902026653e-02</internalNodes>\n          <leafValues>\n            -8.3614267408847809e-02 2.0441520214080811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1009 3.5445049405097961e-01</internalNodes>\n          <leafValues>\n            1.4580509625375271e-02 -5.6883698701858521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1010 -2.1929910406470299e-02</internalNodes>\n          <leafValues>\n            1.6368280351161957e-01 -1.0018540173768997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1011 3.8168739527463913e-02</internalNodes>\n          <leafValues>\n            3.5331390798091888e-02 -5.3782612085342407e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1012 6.3126571476459503e-03</internalNodes>\n          <leafValues>\n            5.6145761162042618e-02 -2.8158029913902283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1013 -4.3002668768167496e-02</internalNodes>\n          <leafValues>\n            -6.4804542064666748e-01 1.7478020861744881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1014 2.4681850336492062e-03</internalNodes>\n          <leafValues>\n            -1.1719709634780884e-01 1.3693059980869293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1015 4.5261289924383163e-02</internalNodes>\n          <leafValues>\n            1.5927750617265701e-02 -7.1915590763092041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1016 -4.2067110538482666e-02</internalNodes>\n          <leafValues>\n            -6.4201879501342773e-01 2.0196499302983284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1017 3.9601750904694200e-04</internalNodes>\n          <leafValues>\n            -3.1774568557739258e-01 7.6843477785587311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1018 -1.2469319626688957e-02</internalNodes>\n          <leafValues>\n            1.9531419873237610e-01 -7.8799232840538025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1019 7.9188523814082146e-03</internalNodes>\n          <leafValues>\n            5.6721080094575882e-02 -2.6906439661979675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1020 -6.2929331324994564e-03</internalNodes>\n          <leafValues>\n            1.5688340365886688e-01 -9.9287010729312897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1021 2.2974120453000069e-02</internalNodes>\n          <leafValues>\n            -6.6930226981639862e-02 2.4427099525928497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1022 -9.1710267588496208e-03</internalNodes>\n          <leafValues>\n            -2.9078531265258789e-01 5.9312019497156143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1023 -9.5892272889614105e-02</internalNodes>\n          <leafValues>\n            -6.3700878620147705e-01 1.3278760015964508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1024 5.6696119718253613e-03</internalNodes>\n          <leafValues>\n            5.6131001561880112e-02 -2.9535120725631714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1025 -1.3495329767465591e-02</internalNodes>\n          <leafValues>\n            2.0205779373645782e-01 -6.3128583133220673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1026 1.6108239069581032e-02</internalNodes>\n          <leafValues>\n            4.5092061161994934e-02 -3.6163818836212158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1027 1.1768710101023316e-03</internalNodes>\n          <leafValues>\n            -1.9879919290542603e-01 1.3078540563583374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1028 1.4128970215097070e-03</internalNodes>\n          <leafValues>\n            -2.0856089890003204e-01 8.1473708152770996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1029 -4.3028060346841812e-02</internalNodes>\n          <leafValues>\n            -2.8687548637390137e-01 2.9704660177230835e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1030 -1.0961409658193588e-02</internalNodes>\n          <leafValues>\n            4.8846191167831421e-01 -3.5002779215574265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1031 -4.5575079275295138e-04</internalNodes>\n          <leafValues>\n            1.0644569993019104e-01 -1.0506340116262436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1032 -5.0013329833745956e-02</internalNodes>\n          <leafValues>\n            -8.2039457559585571e-01 1.8604470416903496e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1033 -4.6841200441122055e-02</internalNodes>\n          <leafValues>\n            -8.6972111463546753e-01 3.9388639852404594e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1034 -8.0362131120637059e-04</internalNodes>\n          <leafValues>\n            1.4196899533271790e-01 -1.2184119969606400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1035 1.9802400842308998e-02</internalNodes>\n          <leafValues>\n            4.0857948362827301e-02 -3.6116421222686768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1036 2.1874029189348221e-02</internalNodes>\n          <leafValues>\n            -5.8230601251125336e-02 2.4490930140018463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1037 3.2371848821640015e-02</internalNodes>\n          <leafValues>\n            2.6172259822487831e-02 -4.0803569555282593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1038 -7.0319771766662598e-03</internalNodes>\n          <leafValues>\n            -2.5175130367279053e-01 6.0090810060501099e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1039 2.6019799988716841e-03</internalNodes>\n          <leafValues>\n            -7.0827886462211609e-02 2.0735129714012146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1040 -3.1531439162790775e-03</internalNodes>\n          <leafValues>\n            1.7268289625644684e-01 -1.1326900124549866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1041 5.8357551693916321e-02</internalNodes>\n          <leafValues>\n            1.4668770134449005e-02 -9.2907238006591797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1042 3.6941959988325834e-03</internalNodes>\n          <leafValues>\n            6.6812008619308472e-02 -2.0454549789428711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1043 1.8183739855885506e-02</internalNodes>\n          <leafValues>\n            -3.5921659320592880e-02 2.3765130341053009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1044 -4.4514648616313934e-03</internalNodes>\n          <leafValues>\n            -1.8156670033931732e-01 8.0072969198226929e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1045 3.5554010421037674e-02</internalNodes>\n          <leafValues>\n            1.1413309723138809e-02 -3.9503180980682373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1046 1.6067499294877052e-02</internalNodes>\n          <leafValues>\n            -4.9147009849548340e-02 3.0306708812713623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1047 3.6372188478708267e-02</internalNodes>\n          <leafValues>\n            2.3675160482525826e-02 -6.8069261312484741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1048 -7.4834008701145649e-03</internalNodes>\n          <leafValues>\n            2.4146680533885956e-01 -5.8301728218793869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1049 -7.2762509807944298e-03</internalNodes>\n          <leafValues>\n            -2.2373069822788239e-01 5.0284590572118759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1050 -4.7946218401193619e-03</internalNodes>\n          <leafValues>\n            -2.1922710537910461e-01 6.6698201000690460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1051 -1.3066439889371395e-02</internalNodes>\n          <leafValues>\n            2.2604539990425110e-01 -3.7037428468465805e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1052 2.3257338907569647e-03</internalNodes>\n          <leafValues>\n            -8.1509239971637726e-02 2.3270750045776367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1053 -1.1436239816248417e-02</internalNodes>\n          <leafValues>\n            6.7732691764831543e-02 -3.3069651573896408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1054 6.7957569845020771e-03</internalNodes>\n          <leafValues>\n            9.3188859522342682e-02 -1.8542419373989105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1055 -5.2705928683280945e-02</internalNodes>\n          <leafValues>\n            4.0707829594612122e-01 -2.5846559554338455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1056 1.2774269282817841e-01</internalNodes>\n          <leafValues>\n            1.7207339406013489e-02 -8.8952672481536865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1057 -2.7999880909919739e-01</internalNodes>\n          <leafValues>\n            -9.1963422298431396e-01 2.5054879370145500e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1058 1.2669020332396030e-02</internalNodes>\n          <leafValues>\n            -7.3152393102645874e-02 2.0872280001640320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1059 -1.5894599258899689e-02</internalNodes>\n          <leafValues>\n            1.1266420036554337e-01 -4.0140561759471893e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1060 5.3938169032335281e-02</internalNodes>\n          <leafValues>\n            3.0137389898300171e-02 -5.0454300642013550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1061 7.3805922875180840e-04</internalNodes>\n          <leafValues>\n            -3.5923779010772705e-01 3.3418480306863785e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1062 4.7065159305930138e-03</internalNodes>\n          <leafValues>\n            4.4195190072059631e-01 -3.9396088570356369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1063 3.0945870094001293e-03</internalNodes>\n          <leafValues>\n            -7.1224376559257507e-02 1.2306260317564011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1064 -3.2640039920806885e-02</internalNodes>\n          <leafValues>\n            -4.4644719362258911e-01 3.4509830176830292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1065 -7.8390557318925858e-03</internalNodes>\n          <leafValues>\n            -9.9895596504211426e-02 3.3491879701614380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1066 7.6504289172589779e-03</internalNodes>\n          <leafValues>\n            5.5107340216636658e-02 -2.4002109467983246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1067 3.8153179921209812e-03</internalNodes>\n          <leafValues>\n            -5.7143520563840866e-02 1.7120680212974548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1068 1.4295349828898907e-02</internalNodes>\n          <leafValues>\n            -5.5747661739587784e-02 2.6719009876251221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1069 -1.8241480574943125e-04</internalNodes>\n          <leafValues>\n            4.7362379729747772e-02 -2.1473219990730286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1070 -3.1916480511426926e-02</internalNodes>\n          <leafValues>\n            -1.4398300647735596e-01 9.2526309192180634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1071 -7.6755490154027939e-03</internalNodes>\n          <leafValues>\n            1.2513080239295959e-01 -5.2855581045150757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1072 1.4152109622955322e-02</internalNodes>\n          <leafValues>\n            -5.8198999613523483e-02 2.4444380402565002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1073 -1.6701059415936470e-02</internalNodes>\n          <leafValues>\n            -3.0269339680671692e-01 2.5713469833135605e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1074 3.5869849380105734e-03</internalNodes>\n          <leafValues>\n            -1.1999790370464325e-01 1.2468840181827545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1075 3.7683059927076101e-03</internalNodes>\n          <leafValues>\n            5.0271350890398026e-02 -2.0477029681205750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1076 9.9043175578117371e-04</internalNodes>\n          <leafValues>\n            -8.5413850843906403e-02 1.6316239535808563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1077 9.3151312321424484e-03</internalNodes>\n          <leafValues>\n            9.4177378341555595e-03 -3.5209101438522339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1078 -1.5002860163804144e-04</internalNodes>\n          <leafValues>\n            8.3480976521968842e-02 -1.7047779262065887e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1079 8.7790598627179861e-04</internalNodes>\n          <leafValues>\n            -1.1054719984531403e-01 1.1750820279121399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1080 -3.7630271166563034e-02</internalNodes>\n          <leafValues>\n            5.0325840711593628e-01 -2.6165060698986053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1081 5.6488867849111557e-03</internalNodes>\n          <leafValues>\n            7.4713237583637238e-02 -1.4058519899845123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1082 -1.4621330192312598e-03</internalNodes>\n          <leafValues>\n            6.7465327680110931e-02 -2.0143230259418488e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1083 5.3189881145954132e-03</internalNodes>\n          <leafValues>\n            -3.5997938364744186e-02 3.7376481294631958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1084 2.1019520238041878e-02</internalNodes>\n          <leafValues>\n            2.7063809335231781e-02 -5.0199657678604126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1085 -1.1328969895839691e-01</internalNodes>\n          <leafValues>\n            -7.4395442008972168e-01 1.3778089545667171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1086 -6.1144838109612465e-03</internalNodes>\n          <leafValues>\n            1.4044840633869171e-01 -8.7939672172069550e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1087 -7.7648349106311798e-03</internalNodes>\n          <leafValues>\n            -1.4341640472412109e-01 4.3061099946498871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1088 -9.1335996985435486e-02</internalNodes>\n          <leafValues>\n            -6.3246071338653564e-01 2.0902950316667557e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1089 -1.6339610517024994e-01</internalNodes>\n          <leafValues>\n            -7.7071088552474976e-01 1.3627690263092518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1090 5.3004521131515503e-01</internalNodes>\n          <leafValues>\n            1.2292830273509026e-02 -7.9708522558212280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1091 -3.0609068926423788e-03</internalNodes>\n          <leafValues>\n            5.7478528469800949e-02 -8.8626816868782043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1092 1.3204859569668770e-03</internalNodes>\n          <leafValues>\n            -1.0473939776420593e-01 1.2416320294141769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1093 -6.6045127809047699e-02</internalNodes>\n          <leafValues>\n            -7.0403701066970825e-01 7.2672651149332523e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1094 5.2080051973462105e-03</internalNodes>\n          <leafValues>\n            7.3289416730403900e-02 -1.6105780005455017e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>106</maxWeakCount>\n      <stageThreshold>-1.8098859786987305e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1095 -2.4040700867772102e-02</internalNodes>\n          <leafValues>\n            2.4318559467792511e-01 -3.8189288973808289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1096 2.6374191045761108e-01</internalNodes>\n          <leafValues>\n            -2.5091141462326050e-01 2.7231940627098083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1097 3.3161949831992388e-03</internalNodes>\n          <leafValues>\n            -2.8115370869636536e-01 2.2977580130100250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1098 2.5751669891178608e-03</internalNodes>\n          <leafValues>\n            -6.4815878868103027e-01 8.3049327135086060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1099 1.2843149714171886e-02</internalNodes>\n          <leafValues>\n            -5.4388070106506348e-01 8.6304552853107452e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1100 1.3005360029637814e-02</internalNodes>\n          <leafValues>\n            -2.6411589980125427e-01 2.2107879817485809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1101 2.6304060593247414e-02</internalNodes>\n          <leafValues>\n            -2.2276160120964050e-01 2.2458629310131073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1102 -6.8887993693351746e-02</internalNodes>\n          <leafValues>\n            4.4677790999412537e-01 -1.8398750573396683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1103 1.5864400193095207e-02</internalNodes>\n          <leafValues>\n            -3.3532321453094482e-01 1.6380620002746582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1104 -7.1481592021882534e-03</internalNodes>\n          <leafValues>\n            -3.5999459028244019e-01 1.0679650306701660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1105 -1.2002130039036274e-02</internalNodes>\n          <leafValues>\n            -3.7498581409454346e-01 9.6759349107742310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1106 -2.6663220487535000e-03</internalNodes>\n          <leafValues>\n            -3.8941639661788940e-01 5.9776391834020615e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1107 5.2618351764976978e-04</internalNodes>\n          <leafValues>\n            -3.0557510256767273e-01 1.0778070241212845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1108 -4.0705721825361252e-02</internalNodes>\n          <leafValues>\n            -5.8572947978973389e-01 4.0660858154296875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1109 -8.7929163128137589e-03</internalNodes>\n          <leafValues>\n            2.3699410259723663e-01 -1.3827539980411530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1110 -2.2475840523838997e-03</internalNodes>\n          <leafValues>\n            -3.5475319623947144e-01 8.9079782366752625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1111 5.8501982130110264e-03</internalNodes>\n          <leafValues>\n            9.1695636510848999e-02 -3.3329799771308899e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1112 -3.9623910561203957e-03</internalNodes>\n          <leafValues>\n            -1.9845740497112274e-01 1.2363869696855545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1113 -1.7685770289972425e-03</internalNodes>\n          <leafValues>\n            7.3684811592102051e-02 -4.5862528681755066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1114 6.3303880393505096e-02</internalNodes>\n          <leafValues>\n            4.8690151423215866e-02 -5.7301318645477295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1115 7.9875197261571884e-03</internalNodes>\n          <leafValues>\n            -8.1072300672531128e-01 2.7054410427808762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1116 -1.3520400039851665e-02</internalNodes>\n          <leafValues>\n            1.6274809837341309e-01 -1.6841860115528107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1117 4.8139609396457672e-02</internalNodes>\n          <leafValues>\n            4.5234218239784241e-02 -5.7300239801406860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1118 5.0355647690594196e-03</internalNodes>\n          <leafValues>\n            6.5225511789321899e-02 -2.5856611132621765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1119 1.9625260028988123e-04</internalNodes>\n          <leafValues>\n            1.4221550524234772e-01 -1.8481519818305969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1120 2.5747891049832106e-03</internalNodes>\n          <leafValues>\n            -3.5904300212860107e-01 7.5663506984710693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1121 -4.0524629876017570e-03</internalNodes>\n          <leafValues>\n            -2.1212129294872284e-01 1.1840210109949112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1122 5.6920260190963745e-02</internalNodes>\n          <leafValues>\n            -4.3657299131155014e-02 3.8774600625038147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1123 3.7986990064382553e-02</internalNodes>\n          <leafValues>\n            -8.1706330180168152e-02 3.9529800415039062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1124 -2.2731529548764229e-02</internalNodes>\n          <leafValues>\n            -3.4693419933319092e-01 6.8438567221164703e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1125 9.9069473799318075e-04</internalNodes>\n          <leafValues>\n            -3.6681869626045227e-01 6.1036650091409683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1126 -4.3086782097816467e-03</internalNodes>\n          <leafValues>\n            1.4361980557441711e-01 -9.6160076558589935e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1127 -2.5202209129929543e-02</internalNodes>\n          <leafValues>\n            -4.6109348535537720e-01 5.9420660138130188e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1128 -3.3597718924283981e-02</internalNodes>\n          <leafValues>\n            -4.7127521038055420e-01 9.6356319263577461e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1129 -4.6891071833670139e-03</internalNodes>\n          <leafValues>\n            1.9676209986209869e-01 -1.1853359639644623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1130 2.4549920111894608e-02</internalNodes>\n          <leafValues>\n            -4.5542590320110321e-02 2.8717058897018433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1131 -1.8802500562742352e-03</internalNodes>\n          <leafValues>\n            -2.9892438650131226e-01 8.0199889838695526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1132 2.0160999894142151e-01</internalNodes>\n          <leafValues>\n            3.0502580106258392e-02 -4.8414209485054016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1133 -6.9803953170776367e-02</internalNodes>\n          <leafValues>\n            -6.2382811307907104e-01 3.5180661827325821e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1134 9.1318902559578419e-04</internalNodes>\n          <leafValues>\n            -1.9935069978237152e-01 6.8270348012447357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1135 1.4578959904611111e-02</internalNodes>\n          <leafValues>\n            1.0063359886407852e-01 -2.5353130698204041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1136 5.0130348652601242e-02</internalNodes>\n          <leafValues>\n            5.7192109525203705e-02 -4.1628059744834900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1137 -1.8048109486699104e-02</internalNodes>\n          <leafValues>\n            -4.4572651386260986e-01 5.0399489700794220e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1138 1.4818160235881805e-01</internalNodes>\n          <leafValues>\n            1.6779610887169838e-02 -4.5810478925704956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1139 -2.6285950094461441e-02</internalNodes>\n          <leafValues>\n            3.5442620515823364e-01 -6.1184428632259369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1140 -1.8414109945297241e-02</internalNodes>\n          <leafValues>\n            -3.2132109999656677e-01 7.6148152351379395e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1141 6.1610070988535881e-03</internalNodes>\n          <leafValues>\n            8.7946079671382904e-02 -2.5913208723068237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1142 -2.5900160893797874e-02</internalNodes>\n          <leafValues>\n            3.0681431293487549e-01 -6.5600410103797913e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1143 1.5014899894595146e-02</internalNodes>\n          <leafValues>\n            -5.6076969951391220e-02 3.8661429286003113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1144 -4.3112158775329590e-02</internalNodes>\n          <leafValues>\n            5.5926108360290527e-01 -3.9232630282640457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1145 -2.1485170349478722e-02</internalNodes>\n          <leafValues>\n            -4.6384871006011963e-01 4.8264618963003159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1146 -2.5131789967417717e-02</internalNodes>\n          <leafValues>\n            -4.8091739416122437e-01 4.1346170008182526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1147 4.1451459401287138e-04</internalNodes>\n          <leafValues>\n            4.4691830873489380e-02 -4.2174011468887329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1148 1.0218570008873940e-02</internalNodes>\n          <leafValues>\n            5.3744480013847351e-02 -1.9395479559898376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1149 -2.0342700183391571e-02</internalNodes>\n          <leafValues>\n            2.9722499847412109e-01 -7.1297563612461090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1150 -3.0666049569845200e-02</internalNodes>\n          <leafValues>\n            -3.9920780062675476e-01 4.5510981231927872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1151 -3.2767441123723984e-02</internalNodes>\n          <leafValues>\n            -5.0248539447784424e-01 4.4888608157634735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1152 -5.4365001618862152e-02</internalNodes>\n          <leafValues>\n            -4.7751170396804810e-01 4.1882470250129700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1153 -2.9916359111666679e-02</internalNodes>\n          <leafValues>\n            3.5793611407279968e-01 -6.1831939965486526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1154 1.0144179686903954e-02</internalNodes>\n          <leafValues>\n            -1.5790919959545135e-01 5.7373359799385071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1155 1.5639010071754456e-01</internalNodes>\n          <leafValues>\n            3.2949700951576233e-02 -6.4462232589721680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1156 5.4447978734970093e-02</internalNodes>\n          <leafValues>\n            -4.1508059948682785e-02 1.2866689264774323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1157 -3.9772719144821167e-02</internalNodes>\n          <leafValues>\n            -6.8962317705154419e-01 2.9046570882201195e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1158 6.9650667719542980e-03</internalNodes>\n          <leafValues>\n            -9.4761677086353302e-02 1.8257130682468414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1159 -5.1617428660392761e-02</internalNodes>\n          <leafValues>\n            -4.4907289743423462e-01 4.3913140892982483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1160 -2.6814609766006470e-02</internalNodes>\n          <leafValues>\n            -2.2568839788436890e-01 5.4928071796894073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1161 1.3181920163333416e-02</internalNodes>\n          <leafValues>\n            8.0101907253265381e-02 -2.8673300147056580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1162 1.4241590164601803e-02</internalNodes>\n          <leafValues>\n            -8.4264412522315979e-02 2.1000739932060242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1163 3.1410539522767067e-03</internalNodes>\n          <leafValues>\n            1.3257560133934021e-01 -1.5610539913177490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1164 1.0995150357484818e-01</internalNodes>\n          <leafValues>\n            1.2388270348310471e-02 -4.0302368998527527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1165 1.7845850437879562e-02</internalNodes>\n          <leafValues>\n            5.2870228886604309e-02 -3.7930241227149963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1166 1.0851990431547165e-02</internalNodes>\n          <leafValues>\n            -5.4071258753538132e-02 3.5186240077018738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1167 -2.5958200916647911e-02</internalNodes>\n          <leafValues>\n            4.1978350281715393e-01 -4.0477428585290909e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1168 4.0990379638969898e-03</internalNodes>\n          <leafValues>\n            5.0911288708448410e-02 -3.5974949598312378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1169 1.4909840188920498e-02</internalNodes>\n          <leafValues>\n            -6.1437230557203293e-02 2.8947550058364868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1170 4.0265037678182125e-03</internalNodes>\n          <leafValues>\n            1.0686399787664413e-01 -1.2979680299758911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1171 3.9495688676834106e-01</internalNodes>\n          <leafValues>\n            -2.8920559212565422e-02 6.3535267114639282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1172 1.2874379754066467e-02</internalNodes>\n          <leafValues>\n            -1.1910410225391388e-01 1.2068430334329605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1173 -4.8598181456327438e-02</internalNodes>\n          <leafValues>\n            4.6885690093040466e-01 -4.2797289788722992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1174 1.5357979573309422e-03</internalNodes>\n          <leafValues>\n            -3.0882269144058228e-01 6.3154831528663635e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1175 3.5379750188440084e-03</internalNodes>\n          <leafValues>\n            1.0132449865341187e-01 -1.7726400494575500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1176 -1.9441220909357071e-02</internalNodes>\n          <leafValues>\n            2.3254390060901642e-01 -5.3732268512248993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1177 2.5940369814634323e-03</internalNodes>\n          <leafValues>\n            -3.5682299733161926e-01 5.0598859786987305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1178 5.9910379350185394e-02</internalNodes>\n          <leafValues>\n            -2.4030869826674461e-02 1.7003220319747925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1179 -1.1181759648025036e-02</internalNodes>\n          <leafValues>\n            3.4869500994682312e-01 -6.2812417745590210e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1180 4.9201812362298369e-04</internalNodes>\n          <leafValues>\n            -1.2642909586429596e-01 3.6503899842500687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1181 6.7902177572250366e-02</internalNodes>\n          <leafValues>\n            -4.2887088656425476e-01 4.6336911618709564e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1182 1.5728829428553581e-02</internalNodes>\n          <leafValues>\n            -6.3028946518898010e-02 1.6275769472122192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1183 -1.4824390411376953e-02</internalNodes>\n          <leafValues>\n            -5.3391677141189575e-01 3.2132621854543686e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1184 -1.9706260412931442e-02</internalNodes>\n          <leafValues>\n            2.5455629825592041e-01 -3.0816650018095970e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1185 9.6607124432921410e-03</internalNodes>\n          <leafValues>\n            9.2674352228641510e-02 -1.7940239608287811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1186 -4.9929421395063400e-02</internalNodes>\n          <leafValues>\n            2.6743340492248535e-01 -2.5595119222998619e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1187 7.3459640145301819e-02</internalNodes>\n          <leafValues>\n            -5.8698959648609161e-02 2.8898829221725464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1188 -8.6538150208070874e-04</internalNodes>\n          <leafValues>\n            -1.4318460226058960e-01 6.5386183559894562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1189 -1.0462219826877117e-02</internalNodes>\n          <leafValues>\n            -3.2498508691787720e-01 5.4955318570137024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1190 -6.3478751108050346e-03</internalNodes>\n          <leafValues>\n            -1.0396370291709900e-01 4.0321409702301025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1191 1.1406400054693222e-01</internalNodes>\n          <leafValues>\n            2.6192039251327515e-02 -6.6177910566329956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1192 -2.6893770322203636e-02</internalNodes>\n          <leafValues>\n            -3.5338699817657471e-01 1.9753590226173401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1193 8.0600962042808533e-02</internalNodes>\n          <leafValues>\n            2.8878480195999146e-02 -5.4975187778472900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1194 -7.4676960706710815e-02</internalNodes>\n          <leafValues>\n            -3.4416058659553528e-01 2.6990719139575958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1195 -7.7004089951515198e-02</internalNodes>\n          <leafValues>\n            4.0045699477195740e-01 -4.5340269804000854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1196 -8.6920477449893951e-02</internalNodes>\n          <leafValues>\n            -3.4687021374702454e-01 3.9195980876684189e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1197 -4.3200692161917686e-03</internalNodes>\n          <leafValues>\n            7.5932569801807404e-02 -2.3720650374889374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1198 -3.4127760678529739e-02</internalNodes>\n          <leafValues>\n            -4.1994720697402954e-01 4.3633870780467987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1199 2.1845370531082153e-02</internalNodes>\n          <leafValues>\n            -5.8681700378656387e-02 3.2972678542137146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1200 1.0037229955196381e-01</internalNodes>\n          <leafValues>\n            4.2507208883762360e-02 -4.3366080522537231e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>157</maxWeakCount>\n      <stageThreshold>-1.5512030124664307e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1201 -2.8922120109200478e-03</internalNodes>\n          <leafValues>\n            1.4381329715251923e-01 -4.0896520018577576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1202 -3.2057950738817453e-03</internalNodes>\n          <leafValues>\n            -3.3472418785095215e-01 1.2834690511226654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1203 -1.4795559764024802e-05</internalNodes>\n          <leafValues>\n            1.0139170289039612e-01 -4.4680911302566528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1204 3.7529919063672423e-04</internalNodes>\n          <leafValues>\n            -2.8604930639266968e-01 1.5357840061187744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1205 4.9170467536896467e-04</internalNodes>\n          <leafValues>\n            -2.8404960036277771e-01 1.3163900375366211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1206 1.6417380422353745e-02</internalNodes>\n          <leafValues>\n            7.9901106655597687e-02 -2.8092819452285767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1207 1.0119860060513020e-02</internalNodes>\n          <leafValues>\n            1.0026869922876358e-01 -4.0932568907737732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1208 -6.5251751802861691e-03</internalNodes>\n          <leafValues>\n            -3.3101710677146912e-01 9.6044629812240601e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1209 6.1215078458189964e-03</internalNodes>\n          <leafValues>\n            -3.5483101010322571e-01 8.4309920668601990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1210 2.5817379355430603e-03</internalNodes>\n          <leafValues>\n            8.3384357392787933e-02 -2.8031709790229797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1211 -1.3406439684331417e-03</internalNodes>\n          <leafValues>\n            1.5083800256252289e-01 -1.4946520328521729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1212 3.3681320492178202e-03</internalNodes>\n          <leafValues>\n            4.2112700641155243e-02 -2.2309710085391998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1213 2.8937528841197491e-03</internalNodes>\n          <leafValues>\n            8.2953810691833496e-02 -2.9152309894561768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1214 3.3696501050144434e-03</internalNodes>\n          <leafValues>\n            4.8548549413681030e-02 -1.9542780518531799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1215 -7.1538880467414856e-02</internalNodes>\n          <leafValues>\n            5.2008682489395142e-01 -4.2644441127777100e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1216 7.6072360388934612e-03</internalNodes>\n          <leafValues>\n            -8.5208661854267120e-02 1.1523310095071793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1217 1.9313229713588953e-03</internalNodes>\n          <leafValues>\n            8.9357398450374603e-02 -2.3614349961280823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1218 9.0475968318060040e-04</internalNodes>\n          <leafValues>\n            -7.7408589422702789e-02 1.6829580068588257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1219 1.1103670112788677e-02</internalNodes>\n          <leafValues>\n            -9.5963977277278900e-02 2.0391720533370972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1220 -3.1021970789879560e-03</internalNodes>\n          <leafValues>\n            -3.8605719804763794e-01 4.6329721808433533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1221 1.1446890421211720e-03</internalNodes>\n          <leafValues>\n            -2.8306689858436584e-01 5.8978211134672165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1222 7.7077788300812244e-03</internalNodes>\n          <leafValues>\n            1.0474249720573425e-01 -1.7146070301532745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1223 4.9893710762262344e-02</internalNodes>\n          <leafValues>\n            -6.4692601561546326e-02 3.0140951275825500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1224 -1.4937819913029671e-02</internalNodes>\n          <leafValues>\n            -2.7854371070861816e-01 7.0895470678806305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1225 -2.5303829461336136e-03</internalNodes>\n          <leafValues>\n            1.2108519673347473e-01 -1.4635290205478668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1226 2.8611259534955025e-02</internalNodes>\n          <leafValues>\n            -5.0357531756162643e-02 4.0651878714561462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1227 3.6244060844182968e-02</internalNodes>\n          <leafValues>\n            4.4577218592166901e-02 -5.6234288215637207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1228 -3.0544339679181576e-03</internalNodes>\n          <leafValues>\n            1.1526989936828613e-01 -2.7371090650558472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1229 -1.3101019430905581e-03</internalNodes>\n          <leafValues>\n            -2.6798000931739807e-01 5.9726651757955551e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1230 1.0702989529818296e-03</internalNodes>\n          <leafValues>\n            -1.5439410507678986e-01 1.1206989735364914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1231 -2.3467160761356354e-02</internalNodes>\n          <leafValues>\n            -6.2424921989440918e-01 2.6010479778051376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1232 -2.2787749767303467e-02</internalNodes>\n          <leafValues>\n            1.7903989553451538e-01 -6.8230852484703064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1233 7.5017688795924187e-03</internalNodes>\n          <leafValues>\n            5.2637178450822830e-02 -3.3333471417427063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1234 1.3881090097129345e-02</internalNodes>\n          <leafValues>\n            6.5118886530399323e-02 -2.4152719974517822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1235 -8.7769115343689919e-03</internalNodes>\n          <leafValues>\n            1.9925190508365631e-01 -8.8063232600688934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1236 2.6523560285568237e-02</internalNodes>\n          <leafValues>\n            4.6574778854846954e-02 -3.6550509929656982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1237 7.2263809852302074e-03</internalNodes>\n          <leafValues>\n            -1.0806850343942642e-01 1.5131799876689911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1238 2.3426050320267677e-03</internalNodes>\n          <leafValues>\n            -1.5072929859161377e-01 9.9945023655891418e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1239 -2.8811080483137630e-05</internalNodes>\n          <leafValues>\n            6.1413038522005081e-02 -2.4344439804553986e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1240 -1.3911900110542774e-02</internalNodes>\n          <leafValues>\n            -3.1010839343070984e-01 2.4895850569009781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1241 2.4768780916929245e-02</internalNodes>\n          <leafValues>\n            2.3218030110001564e-02 -6.5071028470993042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1242 -6.0916407965123653e-03</internalNodes>\n          <leafValues>\n            5.9768490493297577e-02 -2.5360348820686340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1243 -9.7264908254146576e-03</internalNodes>\n          <leafValues>\n            -2.5584441423416138e-01 5.5554620921611786e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1244 9.7499042749404907e-02</internalNodes>\n          <leafValues>\n            5.3867488168179989e-03 -7.3567670583724976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1245 3.0411418993026018e-03</internalNodes>\n          <leafValues>\n            -1.3759210705757141e-01 1.2143649905920029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1246 2.7967148926109076e-03</internalNodes>\n          <leafValues>\n            1.8048660457134247e-01 -8.4527000784873962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1247 1.0707279667258263e-02</internalNodes>\n          <leafValues>\n            -4.3970860540866852e-02 3.1042009592056274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1248 1.7561139538884163e-03</internalNodes>\n          <leafValues>\n            5.1866840571165085e-02 -2.2768710553646088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1249 -3.0384738929569721e-03</internalNodes>\n          <leafValues>\n            7.1652042865753174e-01 -2.2465929388999939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1250 -9.4161480665206909e-02</internalNodes>\n          <leafValues>\n            -7.9338562488555908e-01 1.3117490336298943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1251 -2.3869009688496590e-02</internalNodes>\n          <leafValues>\n            4.9338179826736450e-01 -3.2169021666049957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1252 -3.9958588778972626e-02</internalNodes>\n          <leafValues>\n            -1.8914769589900970e-01 2.8500700369477272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1253 6.9391070865094662e-03</internalNodes>\n          <leafValues>\n            3.9777211844921112e-02 -3.9105901122093201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1254 -3.3596780151128769e-02</internalNodes>\n          <leafValues>\n            -5.6830072402954102e-01 2.1618509665131569e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1255 -1.4079840481281281e-01</internalNodes>\n          <leafValues>\n            -7.9014372825622559e-01 1.4884609729051590e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1256 -5.7346289977431297e-03</internalNodes>\n          <leafValues>\n            -1.5512639284133911e-01 4.2879570275545120e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1257 -5.2841830998659134e-02</internalNodes>\n          <leafValues>\n            3.0823838710784912e-01 -5.0709690898656845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1258 1.5207099728286266e-02</internalNodes>\n          <leafValues>\n            -2.5789769366383553e-02 3.3292320370674133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1259 -5.8392022037878633e-04</internalNodes>\n          <leafValues>\n            8.8900387287139893e-02 -1.6297949850559235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1260 -3.3715530298650265e-03</internalNodes>\n          <leafValues>\n            -1.7890229821205139e-01 7.5376607477664948e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1261 -1.2047060299664736e-03</internalNodes>\n          <leafValues>\n            1.0491970181465149e-01 -1.2970739603042603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1262 5.5276479572057724e-02</internalNodes>\n          <leafValues>\n            -4.3197508901357651e-02 3.7212029099464417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1263 3.9330609142780304e-02</internalNodes>\n          <leafValues>\n            3.0416399240493774e-02 -4.9076101183891296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1264 -9.7229599487036467e-04</internalNodes>\n          <leafValues>\n            -2.1895459294319153e-01 3.9032708853483200e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1265 -5.6048069149255753e-02</internalNodes>\n          <leafValues>\n            4.1632568836212158e-01 -3.3747311681509018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1266 7.1376740932464600e-02</internalNodes>\n          <leafValues>\n            1.2129209935665131e-02 -6.4814078807830811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1267 1.4940260443836451e-03</internalNodes>\n          <leafValues>\n            -2.1393610537052155e-01 8.4887221455574036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1268 -3.2299170270562172e-03</internalNodes>\n          <leafValues>\n            9.0792432427406311e-02 -9.5816053450107574e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1269 4.2182870209217072e-02</internalNodes>\n          <leafValues>\n            -6.6914401948451996e-02 2.5217619538307190e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1270 -6.5001910552382469e-03</internalNodes>\n          <leafValues>\n            -1.2149559706449509e-01 3.7367988377809525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1271 1.9457129761576653e-02</internalNodes>\n          <leafValues>\n            5.0163779407739639e-02 -2.8700378537178040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1272 3.7291388958692551e-02</internalNodes>\n          <leafValues>\n            2.9608439654111862e-02 -5.7222497463226318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1273 -2.5571519508957863e-02</internalNodes>\n          <leafValues>\n            4.3941849470138550e-01 -3.6532308906316757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1274 -7.9122912138700485e-03</internalNodes>\n          <leafValues>\n            -2.9618510603904724e-01 3.5483270883560181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1275 3.0267490074038506e-03</internalNodes>\n          <leafValues>\n            -1.2113779783248901e-01 1.1271420121192932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1276 -2.1035820245742798e-02</internalNodes>\n          <leafValues>\n            2.9206061363220215e-01 -3.1001489609479904e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1277 -1.2911420315504074e-02</internalNodes>\n          <leafValues>\n            -5.4194331169128418e-01 2.6756240054965019e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1278 5.5096071213483810e-02</internalNodes>\n          <leafValues>\n            8.4169982001185417e-03 -6.2873458862304688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1279 -6.3893562182784081e-03</internalNodes>\n          <leafValues>\n            -2.0784839987754822e-01 6.0436788946390152e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1280 1.0858760215342045e-02</internalNodes>\n          <leafValues>\n            -7.8497253358364105e-02 1.2957990169525146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1281 -1.5859620645642281e-02</internalNodes>\n          <leafValues>\n            1.5772910416126251e-01 -1.0143510252237320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1282 1.5203879773616791e-01</internalNodes>\n          <leafValues>\n            2.1721320226788521e-02 -3.1713140010833740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1283 1.7942039296030998e-02</internalNodes>\n          <leafValues>\n            -8.4816932678222656e-02 1.7697300016880035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1284 8.8212518021464348e-03</internalNodes>\n          <leafValues>\n            5.1800601184368134e-02 -2.1443609893321991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1285 1.5715289860963821e-02</internalNodes>\n          <leafValues>\n            4.2525820434093475e-02 -3.2278341054916382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1286 -2.4744209367781878e-03</internalNodes>\n          <leafValues>\n            1.0828550159931183e-01 -1.2953069806098938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1287 1.2597530148923397e-02</internalNodes>\n          <leafValues>\n            -6.0251701623201370e-02 2.7512151002883911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1288 -1.0955630568787456e-03</internalNodes>\n          <leafValues>\n            -5.4244071245193481e-01 2.8166439384222031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1289 -1.4035019557923079e-03</internalNodes>\n          <leafValues>\n            -2.3625169694423676e-01 6.1887249350547791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1290 -7.7294543385505676e-02</internalNodes>\n          <leafValues>\n            -5.2141982316970825e-01 1.1844149790704250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1291 -7.5442157685756683e-02</internalNodes>\n          <leafValues>\n            -7.1588802337646484e-01 1.7151419073343277e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1292 -6.5148338675498962e-02</internalNodes>\n          <leafValues>\n            2.4099840223789215e-01 -5.0278738141059875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1293 -1.0481229983270168e-03</internalNodes>\n          <leafValues>\n            6.5461628139019012e-02 -1.9198420643806458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1294 2.0919230300933123e-03</internalNodes>\n          <leafValues>\n            4.8702161759138107e-02 -2.0062549412250519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1295 -4.2849369347095490e-02</internalNodes>\n          <leafValues>\n            -4.6154209971427917e-01 2.9137039557099342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1296 -4.5563629828393459e-03</internalNodes>\n          <leafValues>\n            1.3732179999351501e-01 -7.3871016502380371e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1297 6.7648440599441528e-03</internalNodes>\n          <leafValues>\n            -6.3866026699542999e-02 2.7578699588775635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1298 4.2252071201801300e-02</internalNodes>\n          <leafValues>\n            1.3583010062575340e-02 -6.2714421749114990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1299 -3.5438220947980881e-02</internalNodes>\n          <leafValues>\n            -5.2436131238937378e-01 2.1047530695796013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1300 -5.3693209774792194e-03</internalNodes>\n          <leafValues>\n            1.8366709351539612e-01 -6.6432453691959381e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1301 1.3521539513021708e-03</internalNodes>\n          <leafValues>\n            5.8834321796894073e-02 -2.2455100715160370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1302 -3.2204028218984604e-02</internalNodes>\n          <leafValues>\n            -4.8017048835754395e-01 9.2976661399006844e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1303 4.0550291305407882e-04</internalNodes>\n          <leafValues>\n            -8.5948407649993896e-02 2.0100370049476624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1304 -3.8419410120695829e-03</internalNodes>\n          <leafValues>\n            2.0595569908618927e-01 -6.6863708198070526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1305 -4.5518199913203716e-03</internalNodes>\n          <leafValues>\n            -2.2908920049667358e-01 5.8954399079084396e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1306 -4.9340371042490005e-02</internalNodes>\n          <leafValues>\n            -3.8995718955993652e-01 1.6714079305529594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1307 8.6456492543220520e-02</internalNodes>\n          <leafValues>\n            -3.2278828322887421e-02 3.6371639370918274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1308 5.1636258140206337e-03</internalNodes>\n          <leafValues>\n            -1.7399039864540100e-01 5.6017149239778519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1309 3.5364869982004166e-03</internalNodes>\n          <leafValues>\n            -7.9630948603153229e-02 1.6313460469245911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1310 -4.3170839548110962e-02</internalNodes>\n          <leafValues>\n            -3.7036859989166260e-01 1.9841130822896957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1311 6.1772209592163563e-03</internalNodes>\n          <leafValues>\n            5.9052169322967529e-02 -2.3701970279216766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1312 -2.2244770079851151e-02</internalNodes>\n          <leafValues>\n            2.5762718915939331e-01 -2.2968450561165810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1313 5.0163730978965759e-02</internalNodes>\n          <leafValues>\n            1.7468400299549103e-02 -6.8128740787506104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1314 -3.0043811420910060e-04</internalNodes>\n          <leafValues>\n            5.5781401693820953e-02 -1.2685780227184296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1315 1.9783550500869751e-01</internalNodes>\n          <leafValues>\n            1.2211419641971588e-02 -8.6064267158508301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1316 6.5362468361854553e-02</internalNodes>\n          <leafValues>\n            4.1287927888333797e-03 -6.2948238849639893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1317 -1.8684990704059601e-02</internalNodes>\n          <leafValues>\n            -2.4377359449863434e-01 4.3232489377260208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1318 -7.5593511573970318e-03</internalNodes>\n          <leafValues>\n            1.7254440486431122e-01 -1.6871780157089233e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1319 1.4699660241603851e-03</internalNodes>\n          <leafValues>\n            -1.5561489760875702e-01 6.9231852889060974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1320 1.1925940215587616e-01</internalNodes>\n          <leafValues>\n            -2.6341190561652184e-02 4.4847229123115540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1321 1.3763479888439178e-02</internalNodes>\n          <leafValues>\n            3.1852710992097855e-02 -3.8184550404548645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1322 1.2966440059244633e-02</internalNodes>\n          <leafValues>\n            -3.9391368627548218e-02 1.9092699885368347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1323 -1.1041419580578804e-02</internalNodes>\n          <leafValues>\n            -2.7309378981590271e-01 4.7777820378541946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1324 6.8364411592483521e-01</internalNodes>\n          <leafValues>\n            9.6240043640136719e-03 -9.7447502613067627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1325 -2.4255160242319107e-03</internalNodes>\n          <leafValues>\n            -2.5439569354057312e-01 4.0732551366090775e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1326 6.4529682276770473e-04</internalNodes>\n          <leafValues>\n            -1.3824179768562317e-01 7.4660047888755798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1327 -2.2386180236935616e-02</internalNodes>\n          <leafValues>\n            3.9404779672622681e-01 -4.2591951787471771e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1328 -6.4325161278247833e-02</internalNodes>\n          <leafValues>\n            -9.6853357553482056e-01 5.4289568215608597e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1329 4.0803711861371994e-02</internalNodes>\n          <leafValues>\n            1.4779980294406414e-02 -7.5445967912673950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1330 -2.4066439364105463e-03</internalNodes>\n          <leafValues>\n            7.6213918626308441e-02 -8.1325337290763855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1331 -4.9865059554576874e-02</internalNodes>\n          <leafValues>\n            -7.8447979688644409e-01 1.5130150131881237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1332 -8.9749991893768311e-02</internalNodes>\n          <leafValues>\n            -9.0076518058776855e-01 4.0898341685533524e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1333 2.1489290520548820e-03</internalNodes>\n          <leafValues>\n            -7.7873408794403076e-02 1.4538989961147308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1334 1.8653910374268889e-03</internalNodes>\n          <leafValues>\n            -5.1264639943838120e-02 1.4514209330081940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1335 5.4189950227737427e-02</internalNodes>\n          <leafValues>\n            1.6740569844841957e-02 -7.2964847087860107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1336 -3.7668810691684484e-03</internalNodes>\n          <leafValues>\n            1.5345999598503113e-01 -5.9867210686206818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1337 -1.5151940286159515e-01</internalNodes>\n          <leafValues>\n            -8.2612198591232300e-01 1.4488279819488525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1338 1.0246659629046917e-02</internalNodes>\n          <leafValues>\n            -6.3145689666271210e-02 1.8994790315628052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1339 1.0578270070254803e-02</internalNodes>\n          <leafValues>\n            5.9726748615503311e-02 -1.9162079691886902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1340 1.5032970346510410e-02</internalNodes>\n          <leafValues>\n            -7.3868520557880402e-02 1.5511709451675415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1341 -4.2136289179325104e-02</internalNodes>\n          <leafValues>\n            -6.8733322620391846e-01 1.6604630276560783e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1342 1.8628799589350820e-03</internalNodes>\n          <leafValues>\n            -1.5732850134372711e-01 7.5714908540248871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1343 2.4659639224410057e-02</internalNodes>\n          <leafValues>\n            9.7081139683723450e-02 -1.6045799851417542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1344 1.9145730137825012e-01</internalNodes>\n          <leafValues>\n            7.1056559681892395e-03 -7.5537341833114624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1345 -3.0167160555720329e-02</internalNodes>\n          <leafValues>\n            1.7002609372138977e-01 -8.6163826286792755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1346 9.2923697084188461e-03</internalNodes>\n          <leafValues>\n            4.3352611362934113e-02 -1.9533480703830719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1347 -1.9069829722866416e-03</internalNodes>\n          <leafValues>\n            8.2421518862247467e-02 -1.4644089341163635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1348 3.1027841032482684e-04</internalNodes>\n          <leafValues>\n            -1.1879319697618484e-01 9.4635762274265289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1349 4.4492271263152361e-04</internalNodes>\n          <leafValues>\n            -1.5645760297775269e-01 6.8512812256813049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1350 -1.2095469981431961e-02</internalNodes>\n          <leafValues>\n            -9.0144127607345581e-02 3.0050620436668396e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1351 -2.0358909387141466e-03</internalNodes>\n          <leafValues>\n            1.3586470484733582e-01 -7.2631262242794037e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1352 -9.3594277277588844e-03</internalNodes>\n          <leafValues>\n            1.1376120150089264e-01 -3.9632719010114670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1353 4.2418478988111019e-03</internalNodes>\n          <leafValues>\n            -8.1519439816474915e-02 1.5766209363937378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1354 -5.9963759034872055e-02</internalNodes>\n          <leafValues>\n            -2.3273150622844696e-01 2.0836880430579185e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1355 4.6651167795062065e-03</internalNodes>\n          <leafValues>\n            1.3135330379009247e-01 -1.2394910305738449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1356 6.2358117429539561e-04</internalNodes>\n          <leafValues>\n            -1.2920179963111877e-01 6.5220557153224945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1357 2.0561330020427704e-03</internalNodes>\n          <leafValues>\n            -6.2910877168178558e-02 1.6288000345230103e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>127</maxWeakCount>\n      <stageThreshold>-1.7598799467086792e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1358 1.1216440051794052e-01</internalNodes>\n          <leafValues>\n            -2.9065090417861938e-01 3.1510210037231445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1359 2.7850609272718430e-02</internalNodes>\n          <leafValues>\n            -3.9972350001335144e-01 1.7894990742206573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1360 4.0804240852594376e-02</internalNodes>\n          <leafValues>\n            -2.4171060323715210e-01 2.2376739978790283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1361 1.3134710025042295e-03</internalNodes>\n          <leafValues>\n            -4.2230761051177979e-01 6.9066837430000305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1362 3.9736120961606503e-03</internalNodes>\n          <leafValues>\n            -5.5243992805480957e-01 1.0362079739570618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1363 -9.7877913503907621e-05</internalNodes>\n          <leafValues>\n            7.0300459861755371e-02 -4.1970318555831909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1364 6.2921550124883652e-03</internalNodes>\n          <leafValues>\n            -3.0629968643188477e-01 1.3072040677070618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1365 -8.7216142565011978e-03</internalNodes>\n          <leafValues>\n            -4.1267630457878113e-01 7.2738148272037506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1366 -5.8611109852790833e-02</internalNodes>\n          <leafValues>\n            1.9491520524024963e-01 -1.9737449288368225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1367 -4.6104468405246735e-02</internalNodes>\n          <leafValues>\n            -2.6274758577346802e-01 2.4362189695239067e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1368 -5.2685278933495283e-04</internalNodes>\n          <leafValues>\n            7.9876311123371124e-02 -4.4358581304550171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1369 -2.5521939620375633e-02</internalNodes>\n          <leafValues>\n            -4.4183689355850220e-01 1.0705660097301006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1370 -6.8350387737154961e-03</internalNodes>\n          <leafValues>\n            -3.9501190185546875e-01 7.8441992402076721e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1371 6.1055209487676620e-02</internalNodes>\n          <leafValues>\n            3.5330320242792368e-03 -6.0677450895309448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1372 4.7110877931118011e-03</internalNodes>\n          <leafValues>\n            -1.9310380518436432e-01 1.5259410440921783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1373 3.7552498281002045e-02</internalNodes>\n          <leafValues>\n            6.9572687149047852e-02 -4.1588190197944641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1374 4.0887430310249329e-02</internalNodes>\n          <leafValues>\n            -1.3596929609775543e-01 2.4894300103187561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1375 2.6306639483664185e-05</internalNodes>\n          <leafValues>\n            -2.5603210926055908e-01 1.1001589894294739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1376 9.4716809689998627e-03</internalNodes>\n          <leafValues>\n            -2.2197020053863525e-01 1.3640490174293518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1377 3.4596489276736975e-03</internalNodes>\n          <leafValues>\n            1.5568970143795013e-01 -1.8454350531101227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1378 -8.1670414656400681e-03</internalNodes>\n          <leafValues>\n            -3.7346610426902771e-01 8.2206420600414276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1379 4.7045178711414337e-02</internalNodes>\n          <leafValues>\n            1.2655580416321754e-02 -6.9167500734329224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1380 -1.9954189192503691e-03</internalNodes>\n          <leafValues>\n            -4.2871651053428650e-01 6.0119848698377609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1381 -3.2797679305076599e-02</internalNodes>\n          <leafValues>\n            -5.8513718843460083e-01 3.9739210158586502e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1382 4.3516121804714203e-02</internalNodes>\n          <leafValues>\n            3.6311239004135132e-02 -5.8556967973709106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1383 -1.3213600032031536e-02</internalNodes>\n          <leafValues>\n            2.1160380542278290e-01 -8.9618362486362457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1384 -3.8574080914258957e-02</internalNodes>\n          <leafValues>\n            -5.9375947713851929e-01 3.7297870963811874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1385 -1.5351839363574982e-01</internalNodes>\n          <leafValues>\n            4.4116440415382385e-01 -5.9058368206024170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1386 -1.4133240096271038e-02</internalNodes>\n          <leafValues>\n            -3.4045210480690002e-01 6.6277496516704559e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1387 1.4061010442674160e-02</internalNodes>\n          <leafValues>\n            1.1312460154294968e-01 -1.9001239538192749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1388 3.5457469522953033e-02</internalNodes>\n          <leafValues>\n            3.7297818809747696e-02 -5.3568178415298462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1389 -1.2931039556860924e-02</internalNodes>\n          <leafValues>\n            -2.8593328595161438e-01 5.8341801166534424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1390 -1.1986999772489071e-02</internalNodes>\n          <leafValues>\n            -4.0216270089149475e-01 4.7841191291809082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1391 -1.3723289594054222e-02</internalNodes>\n          <leafValues>\n            2.0238439738750458e-01 -8.9290492236614227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1392 1.5990810468792915e-02</internalNodes>\n          <leafValues>\n            -6.1742551624774933e-02 3.9387008547782898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1393 -1.4505759812891483e-02</internalNodes>\n          <leafValues>\n            -3.5829049348831177e-01 4.3789908289909363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1394 3.1443528831005096e-02</internalNodes>\n          <leafValues>\n            -6.7374527454376221e-02 2.8779721260070801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1395 3.4287340939044952e-02</internalNodes>\n          <leafValues>\n            5.6390259414911270e-02 -3.3407160639762878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1396 8.8674569269642234e-05</internalNodes>\n          <leafValues>\n            -2.8655600547790527e-01 7.0318557322025299e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1397 1.8266469240188599e-02</internalNodes>\n          <leafValues>\n            -5.2221570163965225e-02 1.7026390135288239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1398 6.1769630759954453e-02</internalNodes>\n          <leafValues>\n            -6.8800583481788635e-02 2.7483311295509338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1399 -2.3383310064673424e-02</internalNodes>\n          <leafValues>\n            -2.7845630049705505e-01 2.4131359532475471e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1400 -1.1182860285043716e-01</internalNodes>\n          <leafValues>\n            4.5687168836593628e-01 -4.3217949569225311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1401 -6.4386896789073944e-02</internalNodes>\n          <leafValues>\n            -3.4228751063346863e-01 6.4063712954521179e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1402 2.1763430535793304e-01</internalNodes>\n          <leafValues>\n            -6.0564499348402023e-02 3.6352708935737610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1403 -4.9456087872385979e-03</internalNodes>\n          <leafValues>\n            -1.6526390612125397e-01 4.6035580337047577e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1404 -1.2704910477623343e-03</internalNodes>\n          <leafValues>\n            -2.5035798549652100e-01 8.2336440682411194e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1405 2.6536729186773300e-02</internalNodes>\n          <leafValues>\n            -1.3919049501419067e-01 1.9524000585079193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1406 -2.0027440041303635e-02</internalNodes>\n          <leafValues>\n            -3.7472829222679138e-01 5.3981021046638489e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1407 -6.1987549066543579e-02</internalNodes>\n          <leafValues>\n            -1.4436429738998413e-01 1.5863290056586266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1408 2.3037059232592583e-02</internalNodes>\n          <leafValues>\n            3.8429230451583862e-02 -4.8479309678077698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1409 5.7958271354436874e-02</internalNodes>\n          <leafValues>\n            2.0750140771269798e-02 -7.6776617765426636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1410 5.4419268853962421e-03</internalNodes>\n          <leafValues>\n            7.2074413299560547e-02 -2.4254220724105835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1411 7.2400430217385292e-03</internalNodes>\n          <leafValues>\n            -8.2432948052883148e-02 1.8463499844074249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1412 1.4847779646515846e-02</internalNodes>\n          <leafValues>\n            5.6245408952236176e-02 -3.6297059059143066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1413 1.2084879912436008e-02</internalNodes>\n          <leafValues>\n            -6.3536256551742554e-02 2.8614228963851929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1414 8.0831356346607208e-02</internalNodes>\n          <leafValues>\n            4.7143958508968353e-02 -4.9968090653419495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1415 1.9218639936298132e-03</internalNodes>\n          <leafValues>\n            -4.0469148755073547e-01 2.2093040868639946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1416 -1.4179679565131664e-02</internalNodes>\n          <leafValues>\n            -1.8520280718803406e-01 8.6823917925357819e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1417 -2.9600440029753372e-05</internalNodes>\n          <leafValues>\n            7.4054829776287079e-02 -1.9331359863281250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1418 1.7121590208262205e-03</internalNodes>\n          <leafValues>\n            -4.9954649806022644e-01 3.8273740559816360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1419 -1.3207949697971344e-01</internalNodes>\n          <leafValues>\n            5.2964788675308228e-01 -1.0363499633967876e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1420 3.6922071129083633e-02</internalNodes>\n          <leafValues>\n            1.9587470218539238e-02 -8.8954067230224609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1421 -7.3079409048659727e-06</internalNodes>\n          <leafValues>\n            6.4993053674697876e-02 -1.7331290245056152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1422 -3.5222709178924561e-02</internalNodes>\n          <leafValues>\n            -3.6849930882453918e-01 5.0565738230943680e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1423 -5.5531110614538193e-02</internalNodes>\n          <leafValues>\n            3.1555691361427307e-01 -4.5015729963779449e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1424 1.8762869760394096e-02</internalNodes>\n          <leafValues>\n            -1.9359070062637329e-01 7.9093530774116516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1425 2.4971760809421539e-02</internalNodes>\n          <leafValues>\n            -8.1862196326255798e-02 2.1014890074729919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1426 -2.0817129407078028e-03</internalNodes>\n          <leafValues>\n            -1.7723660171031952e-01 9.1757282614707947e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1427 -1.1499860137701035e-01</internalNodes>\n          <leafValues>\n            5.0862562656402588e-01 -1.8267450854182243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1428 3.2068958878517151e-01</internalNodes>\n          <leafValues>\n            2.1651009097695351e-02 -7.6685470342636108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1429 -8.1451296806335449e-02</internalNodes>\n          <leafValues>\n            -4.6331760287284851e-01 2.9383579269051552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1430 -1.5007940120995045e-02</internalNodes>\n          <leafValues>\n            -3.9308649301528931e-01 3.6867558956146240e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1431 2.3795820772647858e-02</internalNodes>\n          <leafValues>\n            -3.2482311129570007e-02 1.6764250397682190e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1432 -8.8508807122707367e-02</internalNodes>\n          <leafValues>\n            7.2103458642959595e-01 -2.1140210330486298e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1433 4.5011121779680252e-02</internalNodes>\n          <leafValues>\n            -2.5326130911707878e-02 2.8062760829925537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1434 1.9286990165710449e-02</internalNodes>\n          <leafValues>\n            6.5771162509918213e-02 -2.5697788596153259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1435 2.2137619554996490e-02</internalNodes>\n          <leafValues>\n            3.9154991507530212e-02 -1.9145630300045013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1436 2.9847979545593262e-02</internalNodes>\n          <leafValues>\n            -1.2521019577980042e-01 1.4867870509624481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1437 -6.8392023444175720e-02</internalNodes>\n          <leafValues>\n            2.6023870706558228e-01 -4.7525301575660706e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1438 6.8003371357917786e-02</internalNodes>\n          <leafValues>\n            -4.5898560434579849e-02 4.0107101202011108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1439 5.6098159402608871e-02</internalNodes>\n          <leafValues>\n            2.3277789354324341e-02 -8.4457129240036011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1440 -1.3024089857935905e-02</internalNodes>\n          <leafValues>\n            -3.8348990678787231e-01 3.8314189761877060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1441 1.2594680301845074e-02</internalNodes>\n          <leafValues>\n            -6.7616842687129974e-02 2.9852440953254700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1442 -4.9063879996538162e-02</internalNodes>\n          <leafValues>\n            -5.5862659215927124e-01 2.8511619195342064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1443 -1.5734169632196426e-02</internalNodes>\n          <leafValues>\n            2.5611931085586548e-01 -5.9407141059637070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1444 1.4674849808216095e-02</internalNodes>\n          <leafValues>\n            -6.3001021742820740e-02 2.7854999899864197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1445 2.5068029761314392e-02</internalNodes>\n          <leafValues>\n            -7.8861348330974579e-02 1.0577370226383209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1446 7.4170758016407490e-03</internalNodes>\n          <leafValues>\n            -3.5775899887084961e-01 4.8707701265811920e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1447 -7.7149281278252602e-03</internalNodes>\n          <leafValues>\n            -1.8049560487270355e-01 9.7531601786613464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1448 4.9982070922851562e-02</internalNodes>\n          <leafValues>\n            2.1009320393204689e-02 -7.6537537574768066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1449 -1.6759630292654037e-02</internalNodes>\n          <leafValues>\n            -5.9045380353927612e-01 2.6948049664497375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1450 3.7632828950881958e-01</internalNodes>\n          <leafValues>\n            2.1989850327372551e-02 -6.1461311578750610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1451 5.2720829844474792e-02</internalNodes>\n          <leafValues>\n            -3.9074160158634186e-02 2.6600670814514160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1452 2.6270199567079544e-02</internalNodes>\n          <leafValues>\n            -9.3863986432552338e-02 2.2280269861221313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1453 -2.5664661079645157e-03</internalNodes>\n          <leafValues>\n            -1.8621809780597687e-01 9.8519712686538696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1454 5.3800269961357117e-03</internalNodes>\n          <leafValues>\n            1.2816059589385986e-01 -1.3671700656414032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1455 2.5200050324201584e-02</internalNodes>\n          <leafValues>\n            3.0875589698553085e-02 -2.9681420326232910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1456 2.5444060564041138e-02</internalNodes>\n          <leafValues>\n            4.3978411704301834e-02 -4.0505328774452209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1457 -2.4715809151530266e-02</internalNodes>\n          <leafValues>\n            -5.8492290973663330e-01 2.3179760202765465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1458 -1.6159649938344955e-02</internalNodes>\n          <leafValues>\n            -3.1950500607490540e-01 4.4603530317544937e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1459 6.5401610918343067e-03</internalNodes>\n          <leafValues>\n            -5.8575991541147232e-02 7.4016787111759186e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1460 -4.3940648436546326e-02</internalNodes>\n          <leafValues>\n            -7.7211838960647583e-01 1.9352979958057404e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1461 -4.5612620306201279e-04</internalNodes>\n          <leafValues>\n            3.0397420749068260e-02 -2.6982998847961426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1462 2.8633379843086004e-03</internalNodes>\n          <leafValues>\n            -1.6874340176582336e-01 8.8886268436908722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1463 -5.9488460421562195e-02</internalNodes>\n          <leafValues>\n            -3.4058949351310730e-01 2.4625880643725395e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1464 3.0714470893144608e-02</internalNodes>\n          <leafValues>\n            3.1796399503946304e-02 -4.1572770476341248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1465 -2.2330379113554955e-02</internalNodes>\n          <leafValues>\n            1.2896050512790680e-01 -2.4232570081949234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1466 2.3971609771251678e-02</internalNodes>\n          <leafValues>\n            -7.6858058571815491e-02 2.0360720157623291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1467 -6.0696780681610107e-02</internalNodes>\n          <leafValues>\n            -7.2060132026672363e-01 1.1617880314588547e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1468 -6.8362243473529816e-02</internalNodes>\n          <leafValues>\n            3.5825181007385254e-01 -4.4807899743318558e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1469 1.3451039791107178e-01</internalNodes>\n          <leafValues>\n            2.6008069515228271e-02 -2.5077620148658752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1470 1.3341170549392700e-01</internalNodes>\n          <leafValues>\n            4.7138180583715439e-02 -3.9661580324172974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1471 2.0524330437183380e-02</internalNodes>\n          <leafValues>\n            4.3894171714782715e-02 -2.8501969575881958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1472 4.1543610394001007e-02</internalNodes>\n          <leafValues>\n            2.5452220812439919e-02 -5.9377658367156982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1473 -7.1573443710803986e-02</internalNodes>\n          <leafValues>\n            -7.8743761777877808e-01 1.3979320414364338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1474 6.6264629364013672e-02</internalNodes>\n          <leafValues>\n            2.2939130663871765e-02 -5.4304981231689453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1475 4.4609569013118744e-03</internalNodes>\n          <leafValues>\n            5.0688140094280243e-02 -2.0599000155925751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1476 1.4859540387988091e-02</internalNodes>\n          <leafValues>\n            -7.3408462107181549e-02 1.9902250170707703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1477 -3.9625339210033417e-02</internalNodes>\n          <leafValues>\n            -5.3522932529449463e-01 9.3211038038134575e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1478 -9.6143726259469986e-03</internalNodes>\n          <leafValues>\n            2.7664861083030701e-01 -6.3087522983551025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1479 5.4589830338954926e-02</internalNodes>\n          <leafValues>\n            2.4962859228253365e-02 -5.8171188831329346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1480 1.3770899735391140e-02</internalNodes>\n          <leafValues>\n            -2.2891749441623688e-01 6.9963671267032623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1481 8.6862340569496155e-02</internalNodes>\n          <leafValues>\n            2.4058010429143906e-02 -5.8642482757568359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1482 -2.2433010861277580e-02</internalNodes>\n          <leafValues>\n            -9.2169362306594849e-01 1.3281799852848053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1483 -7.3779597878456116e-02</internalNodes>\n          <leafValues>\n            3.8463789224624634e-01 -8.5962712764739990e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1484 2.9300490859895945e-04</internalNodes>\n          <leafValues>\n            -1.7170579731464386e-01 8.8520109653472900e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>178</maxWeakCount>\n      <stageThreshold>-1.5360039472579956e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1485 5.3288340568542480e-03</internalNodes>\n          <leafValues>\n            -2.6616770029067993e-01 1.7760449647903442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1486 -4.0987450629472733e-03</internalNodes>\n          <leafValues>\n            1.2358420342206955e-01 -3.0805110931396484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1487 -5.5853058584034443e-03</internalNodes>\n          <leafValues>\n            -5.0533992052078247e-01 6.2050119042396545e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1488 -5.1797390915453434e-04</internalNodes>\n          <leafValues>\n            6.9178067147731781e-02 -3.4831359982490540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1489 5.3605018183588982e-03</internalNodes>\n          <leafValues>\n            6.5158672630786896e-02 -4.6262231469154358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1490 3.0114270746707916e-02</internalNodes>\n          <leafValues>\n            -6.4132362604141235e-02 7.1070060133934021e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1491 8.9014291763305664e-02</internalNodes>\n          <leafValues>\n            4.2987130582332611e-02 -6.0177898406982422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1492 1.5248140553012490e-03</internalNodes>\n          <leafValues>\n            -3.3071789145469666e-01 7.1408301591873169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1493 1.8556410213932395e-03</internalNodes>\n          <leafValues>\n            -3.4727120399475098e-01 7.0630677044391632e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1494 -1.6151620075106621e-02</internalNodes>\n          <leafValues>\n            -2.5611770153045654e-01 7.1255698800086975e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1495 -3.1278008827939630e-04</internalNodes>\n          <leafValues>\n            7.3420330882072449e-02 -2.9594621062278748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1496 -6.0263078921707347e-05</internalNodes>\n          <leafValues>\n            6.6566191613674164e-02 -2.1802450716495514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1497 7.6520902803167701e-04</internalNodes>\n          <leafValues>\n            7.5537197291851044e-02 -3.7677881121635437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1498 -6.9589070975780487e-02</internalNodes>\n          <leafValues>\n            3.9810648560523987e-01 -2.5841819122433662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1499 -9.8529577255249023e-02</internalNodes>\n          <leafValues>\n            6.7321968078613281e-01 -3.3925469964742661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1500 4.9950059503316879e-02</internalNodes>\n          <leafValues>\n            6.1660569161176682e-02 -3.7851110100746155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1501 3.9009240572340786e-04</internalNodes>\n          <leafValues>\n            -9.6428610384464264e-02 2.1700200438499451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1502 -7.1598717477172613e-04</internalNodes>\n          <leafValues>\n            -1.8358109891414642e-01 1.0587400197982788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1503 3.8064830005168915e-03</internalNodes>\n          <leafValues>\n            -1.7527610063552856e-01 1.1430399864912033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1504 6.5288757905364037e-03</internalNodes>\n          <leafValues>\n            6.7994527518749237e-02 -3.0726119875907898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1505 2.2182099055498838e-03</internalNodes>\n          <leafValues>\n            -2.7935230731964111e-01 5.8790720999240875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1506 1.7800349451135844e-04</internalNodes>\n          <leafValues>\n            9.9489107728004456e-02 -2.6616880297660828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1507 -3.2656680792570114e-02</internalNodes>\n          <leafValues>\n            5.8734762668609619e-01 -2.6545880362391472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1508 2.6773350313305855e-02</internalNodes>\n          <leafValues>\n            3.6414410918951035e-02 -3.7188830971717834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1509 1.2780309654772282e-02</internalNodes>\n          <leafValues>\n            -8.4540523588657379e-02 1.7853260040283203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1510 5.5374070070683956e-03</internalNodes>\n          <leafValues>\n            -1.0892049968242645e-01 1.4403919875621796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1511 -7.1258977986872196e-03</internalNodes>\n          <leafValues>\n            1.9850020110607147e-01 -8.3359397947788239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1512 8.0109452828764915e-03</internalNodes>\n          <leafValues>\n            4.8844348639249802e-02 -2.8590029478073120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1513 -2.7231130748987198e-02</internalNodes>\n          <leafValues>\n            -6.8558162450790405e-01 2.1877769380807877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1514 -2.0928949117660522e-02</internalNodes>\n          <leafValues>\n            -2.0820230245590210e-01 2.6585230603814125e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1515 3.9801741950213909e-03</internalNodes>\n          <leafValues>\n            6.7004777491092682e-02 -2.3015810549259186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1516 2.1598068997263908e-03</internalNodes>\n          <leafValues>\n            -9.3109019100666046e-02 1.7235539853572845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1517 9.9411439150571823e-03</internalNodes>\n          <leafValues>\n            -4.4999819248914719e-02 3.1830498576164246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1518 -1.7938859760761261e-02</internalNodes>\n          <leafValues>\n            -2.1515959501266479e-01 7.2462916374206543e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1519 -1.5030350368760992e-05</internalNodes>\n          <leafValues>\n            9.1437973082065582e-02 -1.6706299781799316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1520 4.2446260340511799e-03</internalNodes>\n          <leafValues>\n            6.4810760319232941e-02 -1.0556270182132721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1521 7.4575991675374098e-06</internalNodes>\n          <leafValues>\n            -2.6309689879417419e-01 5.6588400155305862e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1522 -1.0457210242748260e-02</internalNodes>\n          <leafValues>\n            1.6078880429267883e-01 -7.2708033025264740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1523 -1.2225599493831396e-03</internalNodes>\n          <leafValues>\n            1.1558330059051514e-01 -1.2233489751815796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1524 1.6061630100011826e-02</internalNodes>\n          <leafValues>\n            2.8201790526509285e-02 -5.0996178388595581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1525 -1.6162030398845673e-02</internalNodes>\n          <leafValues>\n            -3.3857521414756775e-01 3.5924781113862991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1526 7.2181350551545620e-03</internalNodes>\n          <leafValues>\n            -7.2706200182437897e-02 1.0624659806489944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1527 -1.0416660457849503e-02</internalNodes>\n          <leafValues>\n            1.6205810010433197e-01 -9.4567760825157166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1528 1.3946600258350372e-02</internalNodes>\n          <leafValues>\n            5.4169639945030212e-02 -3.2068040966987610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1529 1.2734119780361652e-02</internalNodes>\n          <leafValues>\n            -8.6066111922264099e-02 1.9648639857769012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1530 -2.7858370915055275e-02</internalNodes>\n          <leafValues>\n            -2.8409239649772644e-01 2.6706550270318985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1531 -9.8931521177291870e-02</internalNodes>\n          <leafValues>\n            5.8457607030868530e-01 -2.1955510601401329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1532 2.3434299509972334e-03</internalNodes>\n          <leafValues>\n            9.6475467085838318e-02 -1.2095340341329575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1533 -2.3025700356811285e-03</internalNodes>\n          <leafValues>\n            7.3297969996929169e-02 -2.2309069335460663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1534 3.0791079625487328e-02</internalNodes>\n          <leafValues>\n            1.1463879607617855e-02 -2.4034079909324646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1535 -8.4339501336216927e-03</internalNodes>\n          <leafValues>\n            2.9611539840698242e-01 -4.2663689702749252e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1536 -3.4617669880390167e-03</internalNodes>\n          <leafValues>\n            -2.1257869899272919e-01 4.2709458619356155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1537 -3.3371929079294205e-02</internalNodes>\n          <leafValues>\n            3.5299271345138550e-01 -3.5570569336414337e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1538 -3.7238128483295441e-02</internalNodes>\n          <leafValues>\n            -5.9177130460739136e-01 2.6775840669870377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1539 -2.0860069990158081e-01</internalNodes>\n          <leafValues>\n            -5.7595241069793701e-01 1.9763559103012085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1540 -6.8279817700386047e-02</internalNodes>\n          <leafValues>\n            3.4582608938217163e-01 -3.7861179560422897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1541 1.1600320227444172e-02</internalNodes>\n          <leafValues>\n            5.7685580104589462e-02 -2.6008209586143494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1542 -6.7218959331512451e-02</internalNodes>\n          <leafValues>\n            -4.5048278570175171e-01 1.2495189905166626e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1543 -5.1632397808134556e-03</internalNodes>\n          <leafValues>\n            1.6146700084209442e-01 -7.6975770294666290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1544 4.0113311260938644e-02</internalNodes>\n          <leafValues>\n            1.3131230138242245e-02 -4.5731449127197266e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1545 3.7837740033864975e-02</internalNodes>\n          <leafValues>\n            2.3001920431852341e-02 -5.3636288642883301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1546 2.6023429818451405e-03</internalNodes>\n          <leafValues>\n            -6.1007440090179443e-02 1.7084220051765442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1547 -7.1841642260551453e-02</internalNodes>\n          <leafValues>\n            -5.8330380916595459e-01 2.0075250416994095e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1548 -8.2885712618008256e-04</internalNodes>\n          <leafValues>\n            5.3465340286493301e-02 -1.9092260301113129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1549 -8.1979477545246482e-04</internalNodes>\n          <leafValues>\n            -2.3775930702686310e-01 4.5844908803701401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1550 1.0474859736859798e-02</internalNodes>\n          <leafValues>\n            -4.0103420615196228e-02 2.4948400259017944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1551 -6.3726361840963364e-03</internalNodes>\n          <leafValues>\n            -1.7087849974632263e-01 7.2894603013992310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1552 -3.6113489419221878e-02</internalNodes>\n          <leafValues>\n            -3.6879929900169373e-01 1.8331730738282204e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1553 5.4730800911784172e-04</internalNodes>\n          <leafValues>\n            7.2073057293891907e-02 -1.8893779814243317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1554 1.7547659575939178e-02</internalNodes>\n          <leafValues>\n            -9.4452597200870514e-02 1.3311000168323517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1555 6.3078789971768856e-03</internalNodes>\n          <leafValues>\n            7.6223470270633698e-02 -1.6668230295181274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1556 2.5120719801634550e-03</internalNodes>\n          <leafValues>\n            5.0375527143478394e-01 -2.2624349221587181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1557 4.5274170115590096e-03</internalNodes>\n          <leafValues>\n            -1.3446590304374695e-01 9.9167577922344208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1558 -1.4772829308640212e-04</internalNodes>\n          <leafValues>\n            3.9675179868936539e-02 -6.0015488415956497e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1559 1.4728739857673645e-02</internalNodes>\n          <leafValues>\n            3.9208918809890747e-02 -3.0560019612312317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1560 -5.6161261163651943e-03</internalNodes>\n          <leafValues>\n            -1.0845050215721130e-01 4.7754660248756409e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1561 -9.8265614360570908e-03</internalNodes>\n          <leafValues>\n            1.6729339957237244e-01 -7.6756693422794342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1562 1.7972329631447792e-02</internalNodes>\n          <leafValues>\n            -5.9147968888282776e-02 1.2773279845714569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1563 1.1233139783143997e-02</internalNodes>\n          <leafValues>\n            -9.2626020312309265e-02 1.5735739469528198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1564 1.3678249670192599e-03</internalNodes>\n          <leafValues>\n            -5.6156760454177856e-01 2.1800750866532326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1565 -4.1535100899636745e-03</internalNodes>\n          <leafValues>\n            -2.6951169967651367e-01 4.1213478893041611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1566 -6.7194692790508270e-02</internalNodes>\n          <leafValues>\n            5.6008362770080566e-01 -2.0973740145564079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1567 -8.0572411417961121e-02</internalNodes>\n          <leafValues>\n            -7.5846642255783081e-01 1.6614310443401337e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1568 -9.7504993900656700e-03</internalNodes>\n          <leafValues>\n            2.2781279683113098e-01 -4.0246330201625824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1569 5.6034037843346596e-03</internalNodes>\n          <leafValues>\n            -7.5519852340221405e-02 1.6372010111808777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1570 -1.0232060216367245e-02</internalNodes>\n          <leafValues>\n            -3.5803198814392090e-01 4.6331088989973068e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1571 2.8616760391741991e-03</internalNodes>\n          <leafValues>\n            6.7746236920356750e-02 -1.6429120302200317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1572 7.7214869670569897e-03</internalNodes>\n          <leafValues>\n            3.4494820982217789e-02 -1.7762580513954163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1573 -7.0147789083421230e-03</internalNodes>\n          <leafValues>\n            1.7282240092754364e-01 -6.5176323056221008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1574 5.0470869988203049e-02</internalNodes>\n          <leafValues>\n            -2.7071960270404816e-02 3.5509440302848816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1575 -5.7124681770801544e-03</internalNodes>\n          <leafValues>\n            -1.5901079773902893e-01 7.9559110105037689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1576 8.7470682337880135e-03</internalNodes>\n          <leafValues>\n            3.7789858877658844e-02 -1.9156649708747864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1577 2.0058929920196533e-02</internalNodes>\n          <leafValues>\n            2.7415299788117409e-02 -3.8070109486579895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1578 -1.8094859551638365e-03</internalNodes>\n          <leafValues>\n            1.0538379848003387e-01 -1.4996549487113953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1579 -7.3339277878403664e-03</internalNodes>\n          <leafValues>\n            2.9203268885612488e-01 -6.1218190938234329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1580 4.4179419055581093e-03</internalNodes>\n          <leafValues>\n            1.8868620693683624e-01 -5.8132741600275040e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1581 -1.3543309643864632e-02</internalNodes>\n          <leafValues>\n            -4.9409559369087219e-01 2.2855930030345917e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1582 3.6197271198034286e-02</internalNodes>\n          <leafValues>\n            -2.6089120656251907e-02 3.0890250205993652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1583 -1.1831840127706528e-01</internalNodes>\n          <leafValues>\n            -5.9094661474227905e-01 1.8215280026197433e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1584 7.5656071305274963e-02</internalNodes>\n          <leafValues>\n            -3.5965580493211746e-02 3.0386120080947876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1585 -1.3134519569575787e-02</internalNodes>\n          <leafValues>\n            -2.6306131482124329e-01 4.2262919247150421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1586 1.8981160596013069e-02</internalNodes>\n          <leafValues>\n            -2.6483630761504173e-02 1.9371989369392395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1587 -4.6003229916095734e-02</internalNodes>\n          <leafValues>\n            4.0513500571250916e-01 -2.4454200640320778e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1588 -1.3232730329036713e-02</internalNodes>\n          <leafValues>\n            -2.9721269011497498e-01 4.7959219664335251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1589 1.9586850702762604e-01</internalNodes>\n          <leafValues>\n            1.0540399700403214e-02 -8.6647927761077881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1590 9.6459556370973587e-03</internalNodes>\n          <leafValues>\n            -7.1334943175315857e-02 1.1469510197639465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1591 -3.9044579025357962e-03</internalNodes>\n          <leafValues>\n            1.0740319639444351e-01 -9.8514996469020844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1592 1.6896370798349380e-02</internalNodes>\n          <leafValues>\n            -7.6805070042610168e-02 1.9533200562000275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1593 -5.5025662295520306e-03</internalNodes>\n          <leafValues>\n            5.0643190741539001e-02 -2.0898430049419403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1594 -1.9621569663286209e-02</internalNodes>\n          <leafValues>\n            -2.9651358723640442e-01 3.2955050468444824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1595 7.7158107887953520e-04</internalNodes>\n          <leafValues>\n            4.6017099171876907e-02 -1.9982999563217163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1596 -1.1102840304374695e-01</internalNodes>\n          <leafValues>\n            5.7578712701797485e-01 -1.7741529271006584e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1597 1.4945500297471881e-03</internalNodes>\n          <leafValues>\n            4.7335729002952576e-02 -2.0898909866809845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1598 5.0667919218540192e-02</internalNodes>\n          <leafValues>\n            -1.8657619133591652e-02 3.4070459008216858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1599 1.6073169186711311e-02</internalNodes>\n          <leafValues>\n            -3.6449488252401352e-02 2.6568078994750977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1600 -2.6536740362644196e-02</internalNodes>\n          <leafValues>\n            -3.6141690611839294e-01 2.9734270647168159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1601 -5.2550169639289379e-03</internalNodes>\n          <leafValues>\n            -1.3104499876499176e-01 8.2153528928756714e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1602 -1.6678560525178909e-02</internalNodes>\n          <leafValues>\n            3.1324890255928040e-01 -4.5052528381347656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1603 3.4808400087058544e-03</internalNodes>\n          <leafValues>\n            8.2945778965950012e-02 -1.5753500163555145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1604 -8.0889053642749786e-02</internalNodes>\n          <leafValues>\n            -6.4314198493957520e-01 7.1740332059562206e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1605 -5.4260632023215294e-03</internalNodes>\n          <leafValues>\n            1.3533130288124084e-01 -1.0547909885644913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1606 1.6630839556455612e-02</internalNodes>\n          <leafValues>\n            4.1602101176977158e-02 -2.6668208837509155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1607 1.7991060158237815e-03</internalNodes>\n          <leafValues>\n            5.9531088918447495e-02 -1.8355309963226318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1608 2.7219969779253006e-02</internalNodes>\n          <leafValues>\n            -2.6586830615997314e-02 2.2722280025482178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1609 -9.6450755372643471e-03</internalNodes>\n          <leafValues>\n            -2.1428169310092926e-01 4.9515731632709503e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1610 8.3123803138732910e-02</internalNodes>\n          <leafValues>\n            -4.2176891118288040e-02 3.0793419480323792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1611 1.4406450092792511e-02</internalNodes>\n          <leafValues>\n            -2.9500020667910576e-02 3.2144379615783691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1612 4.7938730567693710e-03</internalNodes>\n          <leafValues>\n            5.1244091242551804e-02 -1.0931850224733353e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1613 -2.8978011105209589e-03</internalNodes>\n          <leafValues>\n            -1.4344370365142822e-01 6.6597223281860352e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1614 -4.5887690037488937e-02</internalNodes>\n          <leafValues>\n            1.8003830313682556e-01 -1.5642790123820305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1615 -5.4717700928449631e-02</internalNodes>\n          <leafValues>\n            -3.5110801458358765e-01 3.0438890680670738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1616 -1.9787369295954704e-02</internalNodes>\n          <leafValues>\n            9.3385331332683563e-02 -4.9382571130990982e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1617 2.5110379792749882e-03</internalNodes>\n          <leafValues>\n            -6.6672600805759430e-02 1.4406199753284454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1618 5.3660150617361069e-02</internalNodes>\n          <leafValues>\n            1.4468840323388577e-02 -6.7007470130920410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1619 -8.1825470551848412e-03</internalNodes>\n          <leafValues>\n            1.1510120332241058e-01 -8.0932617187500000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1620 -3.5225939936935902e-03</internalNodes>\n          <leafValues>\n            -1.4181140065193176e-01 6.1330620199441910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1621 2.8271550312638283e-02</internalNodes>\n          <leafValues>\n            -2.8353890404105186e-02 3.7045130133628845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1622 -6.4923018217086792e-02</internalNodes>\n          <leafValues>\n            -4.6481159329414368e-01 2.2807259112596512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1623 -3.5065850615501404e-01</internalNodes>\n          <leafValues>\n            -8.2529050111770630e-01 1.1031460016965866e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1624 5.1821782253682613e-03</internalNodes>\n          <leafValues>\n            3.6583270877599716e-02 -2.4567179381847382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1625 9.2609220882877707e-04</internalNodes>\n          <leafValues>\n            -6.1898738145828247e-02 1.9307570159435272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1626 2.5952830910682678e-03</internalNodes>\n          <leafValues>\n            4.3015718460083008e-02 -1.9770270586013794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1627 3.4880579914897680e-03</internalNodes>\n          <leafValues>\n            -6.8296536803245544e-02 1.5725280344486237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1628 2.4002529680728912e-03</internalNodes>\n          <leafValues>\n            -6.8618178367614746e-02 6.8551987409591675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1629 1.2020230060443282e-03</internalNodes>\n          <leafValues>\n            -1.2073139846324921e-01 9.5026522874832153e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1630 -2.0470360293984413e-02</internalNodes>\n          <leafValues>\n            -1.2891639769077301e-01 7.9386599361896515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1631 -5.9516180306673050e-02</internalNodes>\n          <leafValues>\n            2.4869689345359802e-01 -4.9729160964488983e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1632 -1.0568950325250626e-02</internalNodes>\n          <leafValues>\n            -1.8583840131759644e-01 2.0700320601463318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1633 -1.4192920178174973e-02</internalNodes>\n          <leafValues>\n            -3.8137429952621460e-01 2.9879279434680939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1634 -2.4968578945845366e-03</internalNodes>\n          <leafValues>\n            9.1516681015491486e-02 -5.0178311765193939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1635 1.7714010027702898e-04</internalNodes>\n          <leafValues>\n            -1.1470019817352295e-01 9.9245697259902954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1636 7.8318670392036438e-02</internalNodes>\n          <leafValues>\n            3.6057420074939728e-03 -9.9996072053909302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1637 1.5502399764955044e-03</internalNodes>\n          <leafValues>\n            -1.2888610363006592e-01 7.9822011291980743e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1638 -6.6678877919912338e-03</internalNodes>\n          <leafValues>\n            -8.8244557380676270e-02 2.8102599084377289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1639 -4.0497239679098129e-03</internalNodes>\n          <leafValues>\n            -1.4427180588245392e-01 8.7126396596431732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1640 -3.5481531172990799e-02</internalNodes>\n          <leafValues>\n            -4.4681170582771301e-01 1.4808270148932934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1641 -1.2597720138728619e-02</internalNodes>\n          <leafValues>\n            8.9324191212654114e-02 -1.2518140673637390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1642 7.4662449769675732e-03</internalNodes>\n          <leafValues>\n            7.4888199567794800e-02 -1.3587780296802521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1643 -6.7536987364292145e-02</internalNodes>\n          <leafValues>\n            2.3416820168495178e-01 -4.0952268987894058e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1644 8.2704171538352966e-02</internalNodes>\n          <leafValues>\n            7.6422439888119698e-03 -8.5177552700042725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1645 -7.1595138870179653e-03</internalNodes>\n          <leafValues>\n            -1.8738010525703430e-01 5.5288419127464294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1646 -1.0481069795787334e-02</internalNodes>\n          <leafValues>\n            1.8271109461784363e-01 -5.9641968458890915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1647 4.5238467864692211e-03</internalNodes>\n          <leafValues>\n            -8.3817601203918457e-02 1.4822180569171906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1648 -2.6731120306067169e-04</internalNodes>\n          <leafValues>\n            -2.0896770060062408e-01 4.5835729688405991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1649 3.3838581293821335e-02</internalNodes>\n          <leafValues>\n            4.2582869529724121e-02 -2.1883819997310638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1650 2.2287720348685980e-03</internalNodes>\n          <leafValues>\n            -1.3284230232238770e-01 8.1795319914817810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1651 -5.4200361482799053e-03</internalNodes>\n          <leafValues>\n            -1.3896510004997253e-01 7.1154713630676270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1652 -4.9642968922853470e-02</internalNodes>\n          <leafValues>\n            4.8901641368865967e-01 -1.1556959711015224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1653 3.3323399256914854e-03</internalNodes>\n          <leafValues>\n            5.1426161080598831e-02 -1.8269440531730652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1654 2.4343939498066902e-02</internalNodes>\n          <leafValues>\n            -3.1839560717344284e-02 1.2758859992027283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1655 -2.3774489760398865e-02</internalNodes>\n          <leafValues>\n            3.2773551344871521e-01 -2.7216760441660881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1656 3.6809889134019613e-03</internalNodes>\n          <leafValues>\n            5.2922040224075317e-02 -1.2880720198154449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1657 -3.2609070185571909e-03</internalNodes>\n          <leafValues>\n            -1.4948120713233948e-01 6.5733537077903748e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1658 1.0793889872729778e-02</internalNodes>\n          <leafValues>\n            -3.2969951629638672e-02 3.2955420017242432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1659 5.4287910461425781e-04</internalNodes>\n          <leafValues>\n            -1.0678680241107941e-01 9.8564229905605316e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1660 1.1902759782969952e-02</internalNodes>\n          <leafValues>\n            3.5682920366525650e-02 -3.1317448616027832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1661 2.4277849588543177e-03</internalNodes>\n          <leafValues>\n            -6.2080658972263336e-02 1.7598509788513184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1662 -4.4930889271199703e-03</internalNodes>\n          <leafValues>\n            1.1790850013494492e-01 -1.0593199729919434e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>143</maxWeakCount>\n      <stageThreshold>-1.7262409925460815e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1663 -2.0656470209360123e-02</internalNodes>\n          <leafValues>\n            2.5365149974822998e-01 -3.1044611334800720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1664 -3.6518350243568420e-02</internalNodes>\n          <leafValues>\n            2.4484130740165710e-01 -2.3221190273761749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1665 4.9312350153923035e-01</internalNodes>\n          <leafValues>\n            -1.6275240480899811e-01 2.8116190433502197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1666 2.0970099285477772e-05</internalNodes>\n          <leafValues>\n            -3.0840009450912476e-01 1.7317549884319305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1667 1.3082929886877537e-02</internalNodes>\n          <leafValues>\n            -2.5983220338821411e-01 1.5675869584083557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1668 -4.3061940232291818e-04</internalNodes>\n          <leafValues>\n            7.8543603420257568e-02 -3.9016070961952209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1669 -1.6367400065064430e-02</internalNodes>\n          <leafValues>\n            -4.3000039458274841e-01 7.4141636490821838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1670 3.6269389092922211e-02</internalNodes>\n          <leafValues>\n            -1.7073200643062592e-01 1.8045969307422638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1671 1.2340269982814789e-02</internalNodes>\n          <leafValues>\n            8.8775381445884705e-02 -3.4402659535408020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1672 -7.3516286909580231e-02</internalNodes>\n          <leafValues>\n            -4.1623479127883911e-01 -2.9528199229389429e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1673 4.6191830188035965e-04</internalNodes>\n          <leafValues>\n            6.5629899501800537e-02 -4.1018250584602356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1674 -1.4744039624929428e-02</internalNodes>\n          <leafValues>\n            2.2775030136108398e-01 -7.9184867441654205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1675 4.2559150606393814e-03</internalNodes>\n          <leafValues>\n            -2.4004960060119629e-01 1.1321090161800385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1676 -3.6180280148983002e-03</internalNodes>\n          <leafValues>\n            -2.7612069249153137e-01 1.0118050128221512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1677 4.6012919396162033e-02</internalNodes>\n          <leafValues>\n            4.5763589441776276e-02 -5.4713648557662964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1678 -1.6181809827685356e-02</internalNodes>\n          <leafValues>\n            1.9489669799804688e-01 -7.3955342173576355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1679 -2.3682719984208234e-05</internalNodes>\n          <leafValues>\n            1.1729680001735687e-01 -1.9396829605102539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1680 -2.1599140018224716e-03</internalNodes>\n          <leafValues>\n            -4.5654550194740295e-01 4.2699530720710754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1681 -7.9827345907688141e-03</internalNodes>\n          <leafValues>\n            -5.4107201099395752e-01 4.0036130696535110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1682 -8.1530469469726086e-04</internalNodes>\n          <leafValues>\n            -2.0640519261360168e-01 6.6795073449611664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1683 -4.7501060180366039e-03</internalNodes>\n          <leafValues>\n            -3.6572128534317017e-01 7.5665749609470367e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1684 -3.4870140254497528e-02</internalNodes>\n          <leafValues>\n            -8.0093812942504883e-01 2.2356539964675903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1685 -1.9949559122323990e-02</internalNodes>\n          <leafValues>\n            -3.9110630750656128e-01 4.6844650059938431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1686 -5.9008211828768253e-03</internalNodes>\n          <leafValues>\n            9.0756498277187347e-02 -1.7600280046463013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1687 -1.4019970549270511e-03</internalNodes>\n          <leafValues>\n            -2.9260930418968201e-01 6.4894109964370728e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1688 -2.2886939346790314e-02</internalNodes>\n          <leafValues>\n            -4.8391869664192200e-01 5.0514958798885345e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1689 -1.0039290413260460e-02</internalNodes>\n          <leafValues>\n            2.6921668648719788e-01 -7.5274370610713959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1690 1.6729189082980156e-02</internalNodes>\n          <leafValues>\n            -7.3217533528804779e-02 2.2045159339904785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1691 -2.0423909649252892e-02</internalNodes>\n          <leafValues>\n            -4.5161980390548706e-01 4.5858111232519150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1692 -3.5104680806398392e-02</internalNodes>\n          <leafValues>\n            -5.5169981718063354e-01 2.3118300363421440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1693 1.0697999969124794e-02</internalNodes>\n          <leafValues>\n            3.3516589552164078e-02 -5.2482652664184570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1694 -3.8978241384029388e-02</internalNodes>\n          <leafValues>\n            -6.2331187725067139e-01 2.6838419958949089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1695 4.8226700164377689e-03</internalNodes>\n          <leafValues>\n            -1.1215549707412720e-01 1.5613789856433868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1696 3.6878231167793274e-01</internalNodes>\n          <leafValues>\n            1.9857980310916901e-02 -6.1260747909545898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1697 -7.7059920877218246e-03</internalNodes>\n          <leafValues>\n            -3.7371110916137695e-01 4.3724238872528076e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1698 -6.6843323409557343e-02</internalNodes>\n          <leafValues>\n            -5.0772088766098022e-01 2.4401089176535606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1699 3.7273049354553223e-02</internalNodes>\n          <leafValues>\n            3.6522880196571350e-02 -4.3735611438751221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1700 -3.3105209469795227e-02</internalNodes>\n          <leafValues>\n            -3.4438988566398621e-01 3.2440148293972015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1701 5.3402669727802277e-03</internalNodes>\n          <leafValues>\n            9.2385761439800262e-02 -1.7823779582977295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1702 2.1542439237236977e-02</internalNodes>\n          <leafValues>\n            -1.9848670065402985e-01 5.1953200250864029e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1703 3.3289310336112976e-01</internalNodes>\n          <leafValues>\n            -6.0750268399715424e-02 2.8925099968910217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1704 -6.6301261540502310e-04</internalNodes>\n          <leafValues>\n            3.3636718988418579e-02 -2.8510418534278870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1705 4.6686761081218719e-02</internalNodes>\n          <leafValues>\n            -4.9883669614791870e-01 3.3776078373193741e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1706 -2.2452229168266058e-03</internalNodes>\n          <leafValues>\n            -1.9685390591621399e-01 9.5161177217960358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1707 -1.1499020271003246e-02</internalNodes>\n          <leafValues>\n            -3.2423889636993408e-01 5.2468359470367432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1708 1.3134529814124107e-02</internalNodes>\n          <leafValues>\n            -6.7538492381572723e-02 2.7605938911437988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1709 -1.5978980809450150e-02</internalNodes>\n          <leafValues>\n            3.1496050953865051e-01 -7.6657392084598541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1710 2.4199750274419785e-02</internalNodes>\n          <leafValues>\n            5.5836521089076996e-02 -3.6609899997711182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1711 4.0229028090834618e-03</internalNodes>\n          <leafValues>\n            -1.3053479790687561e-01 1.3470110297203064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1712 -1.4172590337693691e-02</internalNodes>\n          <leafValues>\n            -8.8616542518138885e-02 5.5053278803825378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1713 1.8967399373650551e-02</internalNodes>\n          <leafValues>\n            5.1348548382520676e-02 -3.1439921259880066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1714 2.6502970606088638e-02</internalNodes>\n          <leafValues>\n            -1.1065970361232758e-01 8.8080927729606628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1715 -3.9654489606618881e-02</internalNodes>\n          <leafValues>\n            -5.0742971897125244e-01 3.2999441027641296e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1716 -8.9988503605127335e-03</internalNodes>\n          <leafValues>\n            1.2830139696598053e-01 -7.3064133524894714e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1717 7.4613288044929504e-02</internalNodes>\n          <leafValues>\n            3.1729809939861298e-02 -5.3899657726287842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1718 3.3414870500564575e-02</internalNodes>\n          <leafValues>\n            -6.1130590736865997e-02 2.4669900536537170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1719 9.6071150619536638e-04</internalNodes>\n          <leafValues>\n            1.2528179585933685e-01 -1.4304199814796448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1720 -8.6224973201751709e-03</internalNodes>\n          <leafValues>\n            -2.2081799805164337e-01 4.7569438815116882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1721 3.9893008768558502e-02</internalNodes>\n          <leafValues>\n            -5.1774360239505768e-02 3.1735679507255554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1722 8.5388116538524628e-02</internalNodes>\n          <leafValues>\n            -3.5584390163421631e-02 4.1974198818206787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1723 6.3205747865140438e-03</internalNodes>\n          <leafValues>\n            6.9412536919116974e-02 -2.9979988932609558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1724 -5.8932311832904816e-02</internalNodes>\n          <leafValues>\n            -4.6194219589233398e-01 2.2290540859103203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1725 -1.0054419748485088e-02</internalNodes>\n          <leafValues>\n            2.3649129271507263e-01 -6.6811926662921906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1726 -2.5194720365107059e-05</internalNodes>\n          <leafValues>\n            7.8815452754497528e-02 -1.1585489660501480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1727 -5.9346649795770645e-02</internalNodes>\n          <leafValues>\n            -5.8799749612808228e-01 3.0486419796943665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1728 2.0421659573912621e-02</internalNodes>\n          <leafValues>\n            3.9184041321277618e-02 -2.6986798644065857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1729 -4.0381640195846558e-02</internalNodes>\n          <leafValues>\n            -6.1601102352142334e-01 2.5353100150823593e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1730 1.7877650260925293e-01</internalNodes>\n          <leafValues>\n            -5.7135760784149170e-02 1.7361579835414886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1731 -2.2120740264654160e-02</internalNodes>\n          <leafValues>\n            -3.7697589397430420e-01 4.2690049856901169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1732 1.1585020273923874e-01</internalNodes>\n          <leafValues>\n            9.8102567717432976e-03 -6.1380887031555176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1733 9.7944810986518860e-02</internalNodes>\n          <leafValues>\n            3.6329559981822968e-02 -4.5240780711174011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1734 -2.9123030602931976e-02</internalNodes>\n          <leafValues>\n            -6.5607357025146484e-01 8.4500880911946297e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1735 -1.3053599745035172e-02</internalNodes>\n          <leafValues>\n            -3.4685650467872620e-01 4.6511679887771606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1736 1.3451489619910717e-02</internalNodes>\n          <leafValues>\n            3.4420430660247803e-02 -1.0168869793415070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1737 -2.3957140743732452e-02</internalNodes>\n          <leafValues>\n            -8.4189480543136597e-01 1.9317319616675377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1738 -1.3450190424919128e-01</internalNodes>\n          <leafValues>\n            3.9132338762283325e-01 -2.1901259198784828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1739 -1.0342430323362350e-01</internalNodes>\n          <leafValues>\n            6.0790222883224487e-01 -2.5869879871606827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1740 -4.1464429348707199e-02</internalNodes>\n          <leafValues>\n            -3.9631319046020508e-01 3.7771981209516525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1741 -3.4945748746395111e-02</internalNodes>\n          <leafValues>\n            -4.5746931433677673e-01 3.2913569360971451e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1742 1.4289909973740578e-02</internalNodes>\n          <leafValues>\n            -5.0757531076669693e-02 3.1772908568382263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1743 -5.4311589337885380e-03</internalNodes>\n          <leafValues>\n            2.4708689749240875e-01 -7.8526623547077179e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1744 2.6972589548677206e-03</internalNodes>\n          <leafValues>\n            -3.4061861038208008e-01 5.0948519259691238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1745 -4.3831961229443550e-03</internalNodes>\n          <leafValues>\n            8.0095797777175903e-02 -2.0902189612388611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1746 -1.5958329662680626e-02</internalNodes>\n          <leafValues>\n            -2.4625590443611145e-01 5.8348231017589569e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1747 4.5252371579408646e-02</internalNodes>\n          <leafValues>\n            4.1630141437053680e-02 -3.5550931096076965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1748 -1.8278149887919426e-02</internalNodes>\n          <leafValues>\n            3.0804929137229919e-01 -4.7184839844703674e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1749 2.5277629494667053e-02</internalNodes>\n          <leafValues>\n            2.9698649421334267e-02 -5.3776097297668457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1750 7.2078350931406021e-03</internalNodes>\n          <leafValues>\n            -1.2820510566234589e-01 1.1753190308809280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1751 -1.4014700055122375e-01</internalNodes>\n          <leafValues>\n            -4.5020869374275208e-01 3.2753791660070419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1752 -4.5832369476556778e-02</internalNodes>\n          <leafValues>\n            -4.2000839114189148e-01 2.4114929139614105e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1753 -4.3976899236440659e-02</internalNodes>\n          <leafValues>\n            -4.5973241329193115e-01 3.3604741096496582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1754 -1.0124820284545422e-02</internalNodes>\n          <leafValues>\n            1.6260810196399689e-01 -6.6449157893657684e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1755 -1.3071260182186961e-03</internalNodes>\n          <leafValues>\n            1.1608310043811798e-01 -1.3168659806251526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1756 4.5284889638423920e-02</internalNodes>\n          <leafValues>\n            3.5751760005950928e-02 -4.4795739650726318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1757 -2.0851079374551773e-02</internalNodes>\n          <leafValues>\n            2.4665319919586182e-01 -6.5854541957378387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1758 2.6742550544440746e-03</internalNodes>\n          <leafValues>\n            5.1683109253644943e-02 -1.3699389994144440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1759 1.3148089637979865e-03</internalNodes>\n          <leafValues>\n            7.7798873186111450e-02 -2.1064509451389313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1760 -1.8174739554524422e-02</internalNodes>\n          <leafValues>\n            1.7355039715766907e-01 -7.2417192161083221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1761 1.4314319938421249e-02</internalNodes>\n          <leafValues>\n            8.1756986677646637e-02 -1.7111450433731079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1762 -1.6486430540680885e-02</internalNodes>\n          <leafValues>\n            2.2809509932994843e-01 -6.5906368196010590e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1763 3.0756060034036636e-02</internalNodes>\n          <leafValues>\n            3.8717139512300491e-02 -4.0505141019821167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1764 2.6106089353561401e-02</internalNodes>\n          <leafValues>\n            3.0850199982523918e-02 -2.7759250998497009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1765 8.0401107668876648e-02</internalNodes>\n          <leafValues>\n            2.9792500659823418e-02 -4.4742569327354431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1766 -1.8350789323449135e-02</internalNodes>\n          <leafValues>\n            1.1515419930219650e-01 -2.8744319453835487e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1767 3.4827049821615219e-02</internalNodes>\n          <leafValues>\n            2.8738139197230339e-02 -4.8401808738708496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1768 -8.8250182569026947e-02</internalNodes>\n          <leafValues>\n            -4.2635539174079895e-01 3.0173489823937416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1769 1.4836989343166351e-01</internalNodes>\n          <leafValues>\n            2.2089749574661255e-02 -5.5364227294921875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1770 -1.8949609249830246e-02</internalNodes>\n          <leafValues>\n            -2.3020160198211670e-01 3.9267301559448242e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1771 -5.6775949895381927e-02</internalNodes>\n          <leafValues>\n            3.5013529658317566e-01 -4.0862828493118286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1772 6.2286540865898132e-02</internalNodes>\n          <leafValues>\n            2.2344540804624557e-02 -7.1082341670989990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1773 -3.8629550486803055e-02</internalNodes>\n          <leafValues>\n            -3.2933491468429565e-01 3.8508068770170212e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1774 2.8154330328106880e-02</internalNodes>\n          <leafValues>\n            -7.3690913617610931e-02 1.8824370205402374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1775 -1.0570179671049118e-02</internalNodes>\n          <leafValues>\n            -2.7806881070137024e-01 4.7679189592599869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1776 5.6604571640491486e-02</internalNodes>\n          <leafValues>\n            2.4767610430717468e-01 -5.6830938905477524e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1777 -2.8522670269012451e-01</internalNodes>\n          <leafValues>\n            5.2345401048660278e-01 -2.3652829229831696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1778 3.4807138144969940e-02</internalNodes>\n          <leafValues>\n            2.4819910526275635e-02 -4.3205270171165466e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1779 -2.3218799382448196e-02</internalNodes>\n          <leafValues>\n            2.9929161071777344e-01 -4.4712670147418976e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1780 -6.3094392418861389e-02</internalNodes>\n          <leafValues>\n            3.3279260993003845e-01 -1.6075499355792999e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1781 3.0182430148124695e-01</internalNodes>\n          <leafValues>\n            -7.5196906924247742e-02 1.9139809906482697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1782 2.3077869787812233e-02</internalNodes>\n          <leafValues>\n            3.6844979971647263e-02 -2.8761258721351624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1783 1.0964149981737137e-01</internalNodes>\n          <leafValues>\n            3.7548121064901352e-02 -4.1763558983802795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1784 2.9672039672732353e-02</internalNodes>\n          <leafValues>\n            -7.8409820795059204e-02 1.3064210116863251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1785 6.3356538303196430e-03</internalNodes>\n          <leafValues>\n            6.7014321684837341e-02 -2.0481500029563904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1786 -1.9940949976444244e-02</internalNodes>\n          <leafValues>\n            8.4663636982440948e-02 -4.2069409042596817e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1787 -4.7988001257181168e-02</internalNodes>\n          <leafValues>\n            -6.1099517345428467e-01 2.2842260077595711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1788 4.8280019313097000e-02</internalNodes>\n          <leafValues>\n            7.4727279134094715e-03 -7.5153297185897827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1789 -2.5825301418080926e-04</internalNodes>\n          <leafValues>\n            3.5517089068889618e-02 -3.2686069607734680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1790 -4.8175308853387833e-02</internalNodes>\n          <leafValues>\n            -5.8099460601806641e-01 1.9760759547352791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1791 -2.8606340289115906e-02</internalNodes>\n          <leafValues>\n            3.2096970081329346e-01 -4.0734320878982544e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1792 -4.3328531086444855e-02</internalNodes>\n          <leafValues>\n            -3.3021429181098938e-01 3.1527239829301834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1793 2.2753410041332245e-02</internalNodes>\n          <leafValues>\n            3.7327829748392105e-02 -3.6291739344596863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1794 1.8975350030814297e-05</internalNodes>\n          <leafValues>\n            -1.1503349989652634e-01 4.1816640645265579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1795 1.8077540397644043e-01</internalNodes>\n          <leafValues>\n            -5.5751871317625046e-02 2.2424830496311188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1796 -1.2539149820804596e-01</internalNodes>\n          <leafValues>\n            -8.8098400831222534e-01 3.8788339588791132e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1797 -8.0908974632620811e-03</internalNodes>\n          <leafValues>\n            2.6210701465606689e-01 -5.3706649690866470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1798 9.9102966487407684e-03</internalNodes>\n          <leafValues>\n            -1.2978099286556244e-01 8.3635807037353516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1799 2.4792920798063278e-02</internalNodes>\n          <leafValues>\n            -1.4584439992904663e-01 9.2305660247802734e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1800 4.5074880123138428e-02</internalNodes>\n          <leafValues>\n            -7.2375498712062836e-02 2.6057431101799011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1801 -7.9205513000488281e-02</internalNodes>\n          <leafValues>\n            -6.2073522806167603e-01 2.1323349326848984e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1802 -4.4725250452756882e-02</internalNodes>\n          <leafValues>\n            -6.4248198270797729e-01 9.5317112281918526e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1803 -3.4065779298543930e-02</internalNodes>\n          <leafValues>\n            3.0759710073471069e-01 -4.2296990752220154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1804 -2.9756739735603333e-02</internalNodes>\n          <leafValues>\n            2.5211650133132935e-01 -3.1183030456304550e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1805 -3.2026950269937515e-02</internalNodes>\n          <leafValues>\n            -5.5300801992416382e-01 2.8021570295095444e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>193</maxWeakCount>\n      <stageThreshold>-1.4976780414581299e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1806 2.8652619570493698e-02</internalNodes>\n          <leafValues>\n            -2.1822139620780945e-01 2.2675579786300659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1807 4.3320041149854660e-03</internalNodes>\n          <leafValues>\n            -2.8597879409790039e-01 1.0589209944009781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1808 5.6604119017720222e-03</internalNodes>\n          <leafValues>\n            8.8295452296733856e-02 -3.8920480012893677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1809 2.4440148845314980e-03</internalNodes>\n          <leafValues>\n            -3.5482680797576904e-01 9.9362373352050781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1810 2.2643520496785641e-03</internalNodes>\n          <leafValues>\n            -2.8858441114425659e-01 8.8367857038974762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1811 5.3952648304402828e-03</internalNodes>\n          <leafValues>\n            8.5537381470203400e-02 -3.0366399884223938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1812 -7.2699488373473287e-04</internalNodes>\n          <leafValues>\n            7.4840240180492401e-02 -3.4039780497550964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1813 -9.7503658616915345e-04</internalNodes>\n          <leafValues>\n            1.2008629739284515e-01 -2.5634410977363586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1814 4.0540988557040691e-03</internalNodes>\n          <leafValues>\n            6.7266032099723816e-02 -3.5701939463615417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1815 2.5258921086788177e-03</internalNodes>\n          <leafValues>\n            -4.1966471076011658e-01 5.5665798485279083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1816 -1.2021360453218222e-03</internalNodes>\n          <leafValues>\n            1.0004480183124542e-01 -2.1932320296764374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1817 7.7549100387841463e-04</internalNodes>\n          <leafValues>\n            -1.3562729954719543e-01 1.1973659694194794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1818 -5.0699848681688309e-02</internalNodes>\n          <leafValues>\n            4.5418289303779602e-01 -3.9030350744724274e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1819 1.3364490121603012e-02</internalNodes>\n          <leafValues>\n            1.1166039854288101e-01 -1.7938789725303650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1820 -1.5418980270624161e-02</internalNodes>\n          <leafValues>\n            -3.5180059075355530e-01 4.7354999929666519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1821 -4.2981099337339401e-02</internalNodes>\n          <leafValues>\n            3.9232799410820007e-01 -4.5337028801441193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1822 6.2867929227650166e-03</internalNodes>\n          <leafValues>\n            6.4331822097301483e-02 -2.2239510715007782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1823 -3.5951940808445215e-03</internalNodes>\n          <leafValues>\n            9.5404297113418579e-02 -1.5338289737701416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1824 -7.6760917901992798e-02</internalNodes>\n          <leafValues>\n            -6.5099817514419556e-01 1.7283650115132332e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1825 4.6225200640037656e-04</internalNodes>\n          <leafValues>\n            -4.3415609002113342e-01 2.5241859257221222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1826 7.5868278509005904e-04</internalNodes>\n          <leafValues>\n            -1.4624330401420593e-01 9.6319071948528290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1827 -5.0252641085535288e-04</internalNodes>\n          <leafValues>\n            1.3584020733833313e-01 -2.3181040585041046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1828 9.7315143793821335e-03</internalNodes>\n          <leafValues>\n            -8.5155591368675232e-02 2.0156989991664886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1829 -2.6432229205965996e-02</internalNodes>\n          <leafValues>\n            -3.7002518773078918e-01 2.4616630747914314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1830 -4.4683468877337873e-04</internalNodes>\n          <leafValues>\n            1.0048960149288177e-01 -1.8588609993457794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1831 1.9872789271175861e-03</internalNodes>\n          <leafValues>\n            5.3223919123411179e-02 -3.1603801250457764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1832 3.1368629424832761e-04</internalNodes>\n          <leafValues>\n            -1.3213190436363220e-01 9.5771767199039459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1833 5.9834700077772141e-03</internalNodes>\n          <leafValues>\n            -7.5681813061237335e-02 1.5230950713157654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1834 -5.0965389236807823e-03</internalNodes>\n          <leafValues>\n            -1.8477819859981537e-01 7.6022140681743622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1835 -1.9187610596418381e-02</internalNodes>\n          <leafValues>\n            2.1431809663772583e-01 -4.9764219671487808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1836 2.3320479318499565e-02</internalNodes>\n          <leafValues>\n            -4.8689320683479309e-02 2.6578998565673828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1837 -6.9449091097339988e-04</internalNodes>\n          <leafValues>\n            -1.5433350205421448e-01 8.7410651147365570e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1838 4.8893648199737072e-03</internalNodes>\n          <leafValues>\n            5.1342789083719254e-02 -2.6165360212326050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1839 -2.7428869158029556e-02</internalNodes>\n          <leafValues>\n            -3.7972038984298706e-01 3.1821161508560181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1840 -1.7734549939632416e-02</internalNodes>\n          <leafValues>\n            1.9976620376110077e-01 -6.2318049371242523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1841 1.5148259699344635e-01</internalNodes>\n          <leafValues>\n            7.4510741978883743e-03 -5.8031332492828369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1842 1.5324390260502696e-03</internalNodes>\n          <leafValues>\n            -1.2510550022125244e-01 1.0431899875402451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1843 -1.2310810387134552e-02</internalNodes>\n          <leafValues>\n            -2.3539729416370392e-01 5.3646210581064224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1844 -1.1210800148546696e-02</internalNodes>\n          <leafValues>\n            1.0759239643812180e-01 -1.2055230140686035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1845 2.7532500680536032e-03</internalNodes>\n          <leafValues>\n            -6.6479906439781189e-02 1.7321150004863739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1846 -8.4678819403052330e-03</internalNodes>\n          <leafValues>\n            -3.1850680708885193e-01 4.2280819267034531e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1847 -7.3283319361507893e-03</internalNodes>\n          <leafValues>\n            -1.6369259357452393e-01 3.1772349029779434e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1848 4.7156549990177155e-02</internalNodes>\n          <leafValues>\n            -6.1667099595069885e-02 1.7410990595817566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1849 8.2125868648290634e-03</internalNodes>\n          <leafValues>\n            6.7069798707962036e-02 -2.2030070424079895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1850 7.6550841331481934e-03</internalNodes>\n          <leafValues>\n            6.1422310769557953e-02 -1.9357620179653168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1851 -4.5372851192951202e-02</internalNodes>\n          <leafValues>\n            -4.7565659880638123e-01 2.2869469597935677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1852 3.7434820551425219e-03</internalNodes>\n          <leafValues>\n            -9.0940922498703003e-02 1.3841210305690765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1853 2.3490150924772024e-03</internalNodes>\n          <leafValues>\n            6.3291497528553009e-02 -1.5506389737129211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1854 -2.4149749428033829e-02</internalNodes>\n          <leafValues>\n            3.4588441252708435e-01 -3.1525820493698120e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1855 1.4878350310027599e-02</internalNodes>\n          <leafValues>\n            2.4215059354901314e-02 -3.2387629151344299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1856 2.9843160882592201e-02</internalNodes>\n          <leafValues>\n            -2.7817690744996071e-02 4.0939471125602722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1857 7.1600051596760750e-03</internalNodes>\n          <leafValues>\n            -4.6596240252256393e-02 7.4547067284584045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1858 5.6267209351062775e-02</internalNodes>\n          <leafValues>\n            2.9551850631833076e-02 -4.0098059177398682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1859 -4.5356149785220623e-03</internalNodes>\n          <leafValues>\n            8.1820577383041382e-02 -1.0619299858808517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1860 -1.3697359710931778e-02</internalNodes>\n          <leafValues>\n            -1.9359089434146881e-01 7.0917747914791107e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1861 -1.5458730049431324e-03</internalNodes>\n          <leafValues>\n            -2.1987679600715637e-01 2.8396489098668098e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1862 2.9332858975976706e-03</internalNodes>\n          <leafValues>\n            -7.6153233647346497e-02 1.6460180282592773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1863 3.4973609726876020e-03</internalNodes>\n          <leafValues>\n            -6.8196080625057220e-02 1.6717350482940674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1864 -1.8307069316506386e-02</internalNodes>\n          <leafValues>\n            -1.8867099285125732e-01 6.9932736456394196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1865 -1.7092080414295197e-01</internalNodes>\n          <leafValues>\n            -5.0067770481109619e-01 7.8164357692003250e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1866 4.1620130650699139e-03</internalNodes>\n          <leafValues>\n            5.5900041013956070e-02 -2.2972549498081207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1867 -1.9724309444427490e-02</internalNodes>\n          <leafValues>\n            3.2998558878898621e-01 -3.6602400243282318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1868 5.3331600502133369e-03</internalNodes>\n          <leafValues>\n            -1.4134259521961212e-01 8.8277637958526611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1869 -4.2182218283414841e-02</internalNodes>\n          <leafValues>\n            -6.6718780994415283e-01 1.5770509839057922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1870 -5.2826730534434319e-03</internalNodes>\n          <leafValues>\n            1.7025630176067352e-01 -6.8491317331790924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1871 -2.3227441124618053e-03</internalNodes>\n          <leafValues>\n            7.2378590703010559e-02 -1.0066709667444229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1872 -1.6239390242844820e-03</internalNodes>\n          <leafValues>\n            -2.2501319646835327e-01 5.5898498743772507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1873 5.6083410978317261e-02</internalNodes>\n          <leafValues>\n            1.3646169565618038e-02 -4.9306789040565491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1874 -3.0199930071830750e-02</internalNodes>\n          <leafValues>\n            2.3070830106735229e-01 -5.3645938634872437e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1875 1.9157670438289642e-02</internalNodes>\n          <leafValues>\n            3.6830320954322815e-02 -3.9522978663444519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1876 3.5853029694408178e-03</internalNodes>\n          <leafValues>\n            -6.1893220990896225e-02 1.7583209276199341e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1877 -2.8775330632925034e-02</internalNodes>\n          <leafValues>\n            -3.1838440895080566e-01 2.3103740066289902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1878 2.5611401069909334e-03</internalNodes>\n          <leafValues>\n            -1.0484419763088226e-01 9.7152568399906158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1879 -3.1554490327835083e-02</internalNodes>\n          <leafValues>\n            2.9366511106491089e-01 -2.4189069867134094e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1880 -7.3520588921383023e-04</internalNodes>\n          <leafValues>\n            9.7711041569709778e-02 -1.5248039364814758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1881 -4.7993879765272141e-02</internalNodes>\n          <leafValues>\n            -9.4587820768356323e-01 9.0406481176614761e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1882 5.2936570718884468e-03</internalNodes>\n          <leafValues>\n            3.3320371061563492e-02 -3.1268939375877380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1883 1.6903249546885490e-02</internalNodes>\n          <leafValues>\n            -2.4132709950208664e-02 2.8483408689498901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1884 -7.0723611861467361e-03</internalNodes>\n          <leafValues>\n            -1.7524200677871704e-01 7.2713881731033325e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1885 6.4191617071628571e-02</internalNodes>\n          <leafValues>\n            -2.0969670265913010e-02 3.5402628779411316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1886 2.9694940894842148e-03</internalNodes>\n          <leafValues>\n            -7.5086936354637146e-02 1.4321349561214447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1887 -2.0105259492993355e-02</internalNodes>\n          <leafValues>\n            6.0784012079238892e-01 -1.8104499205946922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1888 -1.3169869780540466e-02</internalNodes>\n          <leafValues>\n            -5.4678368568420410e-01 2.4742240086197853e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1889 -1.4226729981601238e-02</internalNodes>\n          <leafValues>\n            -4.6722590923309326e-01 3.1489629298448563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1890 3.7746191024780273e-02</internalNodes>\n          <leafValues>\n            -3.8495831191539764e-02 3.5333481431007385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1891 -3.8704369217157364e-03</internalNodes>\n          <leafValues>\n            1.4984290301799774e-01 -5.6549768894910812e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1892 -1.1565440334379673e-02</internalNodes>\n          <leafValues>\n            -1.5227930247783661e-01 7.6062962412834167e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1893 -8.8854476809501648e-02</internalNodes>\n          <leafValues>\n            -7.2967928647994995e-01 4.8231678083539009e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1894 -2.0447981078177691e-03</internalNodes>\n          <leafValues>\n            1.4148180186748505e-01 -8.3200357854366302e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1895 -1.1762860231101513e-02</internalNodes>\n          <leafValues>\n            -4.0200519561767578e-01 2.6679439470171928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1896 -1.7539029940962791e-02</internalNodes>\n          <leafValues>\n            -3.7316259741783142e-01 3.0171979218721390e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1897 3.8314110133796930e-03</internalNodes>\n          <leafValues>\n            -9.3409948050975800e-02 7.9503498971462250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1898 -1.4472359791398048e-02</internalNodes>\n          <leafValues>\n            3.4333580732345581e-01 -4.3657060712575912e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1899 -2.6516690850257874e-02</internalNodes>\n          <leafValues>\n            -4.8230230808258057e-01 1.6811650246381760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1900 -3.3194791525602341e-02</internalNodes>\n          <leafValues>\n            -4.3580260872840881e-01 2.2644890472292900e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1901 4.4987560249865055e-03</internalNodes>\n          <leafValues>\n            -3.2281540334224701e-02 8.9946307241916656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1902 3.6823831032961607e-03</internalNodes>\n          <leafValues>\n            -6.8755462765693665e-02 1.4339810609817505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1903 -1.1184140294790268e-01</internalNodes>\n          <leafValues>\n            -7.7756762504577637e-01 5.2246451377868652e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1904 -7.3255039751529694e-02</internalNodes>\n          <leafValues>\n            -5.5630749464035034e-01 1.9127149134874344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1905 2.9855769127607346e-02</internalNodes>\n          <leafValues>\n            2.1178830415010452e-02 -4.0850040316581726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1906 -7.3472231626510620e-02</internalNodes>\n          <leafValues>\n            8.2820487022399902e-01 -1.2452909722924232e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1907 -7.2046648710966110e-04</internalNodes>\n          <leafValues>\n            9.9630527198314667e-02 -9.5278859138488770e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1908 -3.8003330701030791e-04</internalNodes>\n          <leafValues>\n            1.0231109708547592e-01 -1.0351389646530151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1909 -4.5453108847141266e-02</internalNodes>\n          <leafValues>\n            -6.4885061979293823e-01 1.1966000311076641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1910 -5.1456969231367111e-04</internalNodes>\n          <leafValues>\n            -1.5083299577236176e-01 6.6544473171234131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1911 2.7949180454015732e-02</internalNodes>\n          <leafValues>\n            1.7186399549245834e-02 -3.7501189112663269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1912 6.3039876520633698e-02</internalNodes>\n          <leafValues>\n            -4.3821588158607483e-02 2.4789440631866455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1913 -2.2690258920192719e-03</internalNodes>\n          <leafValues>\n            7.4712008237838745e-02 -1.1131580173969269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1914 -3.8063840474933386e-03</internalNodes>\n          <leafValues>\n            -1.5530909597873688e-01 6.5264508128166199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1915 3.7190090864896774e-02</internalNodes>\n          <leafValues>\n            -2.9698630794882774e-02 2.3071870207786560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1916 2.1895840764045715e-02</internalNodes>\n          <leafValues>\n            1.5778519213199615e-02 -6.3006269931793213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1917 -3.1993988901376724e-02</internalNodes>\n          <leafValues>\n            2.6250898838043213e-01 -2.4627109989523888e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1918 -1.6778679564595222e-02</internalNodes>\n          <leafValues>\n            -4.2436981201171875e-01 2.2607849910855293e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1919 5.2477661520242691e-02</internalNodes>\n          <leafValues>\n            -1.6188420355319977e-02 3.1766140460968018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1920 1.0443729907274246e-01</internalNodes>\n          <leafValues>\n            1.1290200054645538e-02 -8.6021018028259277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1921 -6.5574781037867069e-03</internalNodes>\n          <leafValues>\n            1.2225849926471710e-01 -5.6091431528329849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1922 1.6797389835119247e-02</internalNodes>\n          <leafValues>\n            3.5811539739370346e-02 -3.1163010001182556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1923 5.0427159294486046e-03</internalNodes>\n          <leafValues>\n            -5.0439529120922089e-02 6.3930332660675049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1924 -3.4571789205074310e-02</internalNodes>\n          <leafValues>\n            -5.6278371810913086e-01 1.6692740842700005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1925 3.7999521009624004e-03</internalNodes>\n          <leafValues>\n            -6.8566747009754181e-02 9.6017867326736450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1926 -1.1995599605143070e-02</internalNodes>\n          <leafValues>\n            1.3819910585880280e-01 -7.1510016918182373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1927 1.1098429560661316e-02</internalNodes>\n          <leafValues>\n            5.3506620228290558e-02 -1.0482089966535568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1928 -1.2905290722846985e-01</internalNodes>\n          <leafValues>\n            -6.7262178659439087e-01 1.5195850282907486e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1929 6.3130040653049946e-03</internalNodes>\n          <leafValues>\n            -6.1030130833387375e-02 1.0355649888515472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1930 4.0955888107419014e-03</internalNodes>\n          <leafValues>\n            7.0534646511077881e-02 -1.4484269917011261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1931 -1.0530550032854080e-02</internalNodes>\n          <leafValues>\n            9.8569639027118683e-02 -3.7973210215568542e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1932 3.6035990342497826e-03</internalNodes>\n          <leafValues>\n            5.1277790218591690e-02 -1.8671560287475586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1933 1.1999369598925114e-03</internalNodes>\n          <leafValues>\n            -6.3231408596038818e-02 1.0446310043334961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1934 -1.9585370318964124e-04</internalNodes>\n          <leafValues>\n            8.6044862866401672e-02 -1.1856850236654282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1935 -1.2213560193777084e-01</internalNodes>\n          <leafValues>\n            -8.8419800996780396e-01 6.3145011663436890e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1936 -7.7650691382586956e-03</internalNodes>\n          <leafValues>\n            1.3725960254669189e-01 -8.0412857234477997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1937 1.5734319388866425e-01</internalNodes>\n          <leafValues>\n            1.2743320316076279e-02 -6.5401297807693481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1938 -7.6066371984779835e-03</internalNodes>\n          <leafValues>\n            -1.3797719776630402e-01 7.6062493026256561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1939 -4.3096300214529037e-03</internalNodes>\n          <leafValues>\n            1.1195199936628342e-01 -3.2390709966421127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1940 -3.2239840365946293e-03</internalNodes>\n          <leafValues>\n            2.1420599520206451e-01 -5.8244630694389343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1941 8.3754826337099075e-03</internalNodes>\n          <leafValues>\n            4.7615598887205124e-02 -2.4216049909591675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1942 3.0904430896043777e-03</internalNodes>\n          <leafValues>\n            -9.0418681502342224e-02 9.9244832992553711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1943 9.8243616521358490e-03</internalNodes>\n          <leafValues>\n            -4.4643919914960861e-02 1.0423039644956589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1944 -3.2808810938149691e-03</internalNodes>\n          <leafValues>\n            -1.9123159348964691e-01 6.3141517341136932e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1945 3.6370379384607077e-03</internalNodes>\n          <leafValues>\n            3.6944739520549774e-02 -1.1988619714975357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1946 7.8952945768833160e-03</internalNodes>\n          <leafValues>\n            -7.1313530206680298e-02 1.6107399761676788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1947 -3.3853040076792240e-03</internalNodes>\n          <leafValues>\n            -1.1704929918050766e-01 2.5579249486327171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1948 -2.6786550879478455e-03</internalNodes>\n          <leafValues>\n            -1.7064009606838226e-01 6.0627460479736328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1949 -4.5887688174843788e-03</internalNodes>\n          <leafValues>\n            3.4779790788888931e-02 -6.8817831575870514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1950 -6.1642300337553024e-02</internalNodes>\n          <leafValues>\n            5.1108109951019287e-01 -1.9752239808440208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1951 2.5235159322619438e-02</internalNodes>\n          <leafValues>\n            2.0203070715069771e-02 -3.4359911084175110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1952 -2.1312809549272060e-03</internalNodes>\n          <leafValues>\n            5.4698210209608078e-02 -1.6512370109558105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1953 -8.2598842680454254e-02</internalNodes>\n          <leafValues>\n            3.3804669976234436e-01 -2.8026569634675980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1954 -5.6678601540625095e-03</internalNodes>\n          <leafValues>\n            -3.3786231279373169e-01 2.9727049171924591e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1955 -9.3317396938800812e-02</internalNodes>\n          <leafValues>\n            -6.7238032817840576e-01 2.0025020930916071e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1956 9.2052231775596738e-04</internalNodes>\n          <leafValues>\n            -1.3974259793758392e-01 6.3175596296787262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1957 5.1411538152024150e-04</internalNodes>\n          <leafValues>\n            -8.1585250794887543e-02 5.9324279427528381e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1958 -6.7130490206182003e-03</internalNodes>\n          <leafValues>\n            -1.6645990312099457e-01 6.1560809612274170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1959 3.1578689813613892e-03</internalNodes>\n          <leafValues>\n            -1.0710070282220840e-01 6.6695116460323334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1960 1.2202030047774315e-02</internalNodes>\n          <leafValues>\n            -2.4845300242304802e-02 4.2458030581474304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1961 -2.8585169464349747e-02</internalNodes>\n          <leafValues>\n            2.3526839911937714e-01 -2.1121440455317497e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1962 2.3390499409288168e-03</internalNodes>\n          <leafValues>\n            6.4441107213497162e-02 -1.4063580334186554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1963 3.5900938510894775e-01</internalNodes>\n          <leafValues>\n            1.2122919782996178e-02 -7.3121142387390137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1964 7.6048658229410648e-03</internalNodes>\n          <leafValues>\n            -4.0700931102037430e-02 2.3581039905548096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1965 4.4263368472456932e-03</internalNodes>\n          <leafValues>\n            5.3039629012346268e-02 -1.5912020206451416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1966 8.5811351891607046e-04</internalNodes>\n          <leafValues>\n            -8.5265956819057465e-02 1.0489220172166824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1967 -4.2959367856383324e-03</internalNodes>\n          <leafValues>\n            -1.2851840257644653e-01 6.2752753496170044e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1968 4.4881720095872879e-03</internalNodes>\n          <leafValues>\n            6.4671441912651062e-02 -1.8789650499820709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1969 -4.9869619309902191e-02</internalNodes>\n          <leafValues>\n            2.1496759355068207e-01 -3.5577021539211273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1970 -1.1942230165004730e-01</internalNodes>\n          <leafValues>\n            -6.7953938245773315e-01 1.5091570094227791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1971 6.2965508550405502e-04</internalNodes>\n          <leafValues>\n            -9.2145420610904694e-02 6.1806648969650269e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1972 2.9381969943642616e-03</internalNodes>\n          <leafValues>\n            1.7903240025043488e-01 -4.9355998635292053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1973 -2.2860679775476456e-02</internalNodes>\n          <leafValues>\n            2.0976249873638153e-01 -3.1370889395475388e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1974 4.3369621038436890e-02</internalNodes>\n          <leafValues>\n            1.8286330625414848e-02 -5.1288998126983643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1975 1.9932509958744049e-01</internalNodes>\n          <leafValues>\n            6.7204708466306329e-04 -8.9769357442855835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1976 8.0751203000545502e-02</internalNodes>\n          <leafValues>\n            -2.0869649946689606e-02 4.3768700957298279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1977 1.5349129680544138e-03</internalNodes>\n          <leafValues>\n            3.6761760711669922e-02 -2.2203999757766724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1978 -3.6580949090421200e-03</internalNodes>\n          <leafValues>\n            -1.5471710264682770e-01 6.7229896783828735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1979 2.4743290618062019e-02</internalNodes>\n          <leafValues>\n            -5.5474709719419479e-02 1.7429579794406891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1980 -1.6451500356197357e-02</internalNodes>\n          <leafValues>\n            1.8817320466041565e-01 -5.5719010531902313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1981 -8.4505761042237282e-03</internalNodes>\n          <leafValues>\n            -3.2943668961524963e-01 2.2743720561265945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1982 2.9369179159402847e-02</internalNodes>\n          <leafValues>\n            1.5479310415685177e-02 -5.9099632501602173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1983 1.0524799674749374e-01</internalNodes>\n          <leafValues>\n            2.1177560556679964e-03 -4.9212720990180969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1984 -2.7816150337457657e-02</internalNodes>\n          <leafValues>\n            3.6421439051628113e-01 -2.5163119658827782e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1985 5.3339339792728424e-03</internalNodes>\n          <leafValues>\n            -4.8402350395917892e-02 3.9851561188697815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1986 1.1682730168104172e-02</internalNodes>\n          <leafValues>\n            2.4898340925574303e-02 -3.5719999670982361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1987 8.9094992727041245e-03</internalNodes>\n          <leafValues>\n            4.6579260379076004e-02 -1.5088100731372833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1988 7.3203681968152523e-03</internalNodes>\n          <leafValues>\n            7.0891879498958588e-02 -1.3278549909591675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1989 -2.0311130210757256e-02</internalNodes>\n          <leafValues>\n            1.7783379554748535e-01 -3.7538051605224609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1990 1.3689160114154220e-03</internalNodes>\n          <leafValues>\n            -1.2096449732780457e-01 7.8017823398113251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1991 7.6994091272354126e-02</internalNodes>\n          <leafValues>\n            -8.7762605398893356e-03 3.2993561029434204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1992 8.8949268683791161e-03</internalNodes>\n          <leafValues>\n            -5.5553250014781952e-02 1.6372109949588776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1993 -1.8518440425395966e-02</internalNodes>\n          <leafValues>\n            -1.4479570090770721e-01 3.0250260606408119e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1994 -4.0174879133701324e-02</internalNodes>\n          <leafValues>\n            -2.4990509450435638e-01 4.0788788348436356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1995 6.5176486968994141e-02</internalNodes>\n          <leafValues>\n            -1.4393090270459652e-02 3.7707069516181946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1996 -1.4845930039882660e-02</internalNodes>\n          <leafValues>\n            2.7375608682632446e-01 -3.3898409456014633e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1997 -6.1434650421142578e-01</internalNodes>\n          <leafValues>\n            -6.9167751073837280e-01 4.0905540809035301e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1998 1.4119890332221985e-01</internalNodes>\n          <leafValues>\n            1.6643870621919632e-02 -5.8944582939147949e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>157</maxWeakCount>\n      <stageThreshold>-1.5337220430374146e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1999 2.1962670609354973e-02</internalNodes>\n          <leafValues>\n            -3.0903491377830505e-01 2.1529789268970490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2000 5.1272530108690262e-02</internalNodes>\n          <leafValues>\n            -2.2286629676818848e-01 2.9869711399078369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2001 4.1870009154081345e-02</internalNodes>\n          <leafValues>\n            -2.7849119901657104e-01 2.0416070520877838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2002 6.7551871761679649e-03</internalNodes>\n          <leafValues>\n            -2.1988549828529358e-01 7.3887020349502563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2003 1.7311690375208855e-02</internalNodes>\n          <leafValues>\n            -3.4227430820465088e-01 1.3190160691738129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2004 1.5399109572172165e-02</internalNodes>\n          <leafValues>\n            -2.3149499297142029e-01 1.8828059732913971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2005 -1.0792730376124382e-02</internalNodes>\n          <leafValues>\n            -3.0813691020011902e-01 1.1191529780626297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2006 8.5879449034109712e-04</internalNodes>\n          <leafValues>\n            7.2238206863403320e-02 -4.4624349474906921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2007 9.2791311908513308e-04</internalNodes>\n          <leafValues>\n            -2.9247429966926575e-01 9.3132883310317993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2008 -8.5785696282982826e-03</internalNodes>\n          <leafValues>\n            2.0642790198326111e-01 -1.1203339695930481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2009 -1.8951490521430969e-02</internalNodes>\n          <leafValues>\n            -3.9317628741264343e-01 6.7260466516017914e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2010 3.4939948469400406e-02</internalNodes>\n          <leafValues>\n            2.8045989573001862e-02 -5.7410031557083130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2011 -4.2870659381151199e-02</internalNodes>\n          <leafValues>\n            -5.9856891632080078e-01 3.4607890993356705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2012 5.4958608234301209e-04</internalNodes>\n          <leafValues>\n            -4.1193041205406189e-01 6.7322418093681335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2013 2.2494920995086432e-03</internalNodes>\n          <leafValues>\n            1.3482889533042908e-01 -1.9777689874172211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2014 -9.2442613095045090e-03</internalNodes>\n          <leafValues>\n            -1.7850719392299652e-01 7.6734513044357300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2015 1.2210760032758117e-03</internalNodes>\n          <leafValues>\n            -3.4616300463676453e-01 7.5431950390338898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2016 1.3654090464115143e-02</internalNodes>\n          <leafValues>\n            7.7861636877059937e-02 -4.3963378667831421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2017 1.7332829535007477e-02</internalNodes>\n          <leafValues>\n            4.8317600041627884e-02 -4.1461798548698425e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2018 -1.6807779669761658e-02</internalNodes>\n          <leafValues>\n            2.3211599886417389e-01 -8.2342058420181274e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2019 3.2203171402215958e-02</internalNodes>\n          <leafValues>\n            3.4065268933773041e-02 -5.9796607494354248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2020 1.6777820885181427e-02</internalNodes>\n          <leafValues>\n            -5.9402968734502792e-02 1.6782909631729126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2021 1.3074859976768494e-02</internalNodes>\n          <leafValues>\n            -1.0592609643936157e-01 2.3796890676021576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2022 9.4082832336425781e-02</internalNodes>\n          <leafValues>\n            1.0573189705610275e-02 -5.3249269723892212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2023 -7.6036658138036728e-03</internalNodes>\n          <leafValues>\n            -2.3031429946422577e-01 1.0104469954967499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2024 8.2368071889504790e-04</internalNodes>\n          <leafValues>\n            4.6598970890045166e-02 -1.0087580233812332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2025 -7.6875449158251286e-03</internalNodes>\n          <leafValues>\n            -2.6123398542404175e-01 7.3543973267078400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2026 -3.3729180693626404e-02</internalNodes>\n          <leafValues>\n            2.1907149255275726e-01 -2.1958939731121063e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2027 1.3204690068960190e-02</internalNodes>\n          <leafValues>\n            -1.4203189313411713e-01 1.5107029676437378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2028 8.5354369366541505e-04</internalNodes>\n          <leafValues>\n            -2.4303670227527618e-01 8.3283171057701111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2029 -1.4071330428123474e-02</internalNodes>\n          <leafValues>\n            -3.6977100372314453e-01 5.5142328143119812e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2030 -1.1115919798612595e-02</internalNodes>\n          <leafValues>\n            -4.6575489640235901e-01 2.7285559102892876e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2031 1.3858900405466557e-02</internalNodes>\n          <leafValues>\n            -9.1722346842288971e-02 1.9947899878025055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2032 8.5548251867294312e-02</internalNodes>\n          <leafValues>\n            2.6189789175987244e-02 -3.6603820323944092e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2033 -1.9484929740428925e-02</internalNodes>\n          <leafValues>\n            1.7259980738162994e-01 -8.9445300400257111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2034 2.1631179377436638e-02</internalNodes>\n          <leafValues>\n            -5.6183289736509323e-02 6.7707277834415436e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2035 1.9267840310931206e-02</internalNodes>\n          <leafValues>\n            5.5609680712223053e-02 -2.9480481147766113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2036 1.1855900287628174e-02</internalNodes>\n          <leafValues>\n            6.8580061197280884e-02 -2.7094689011573792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2037 1.7135039670392871e-03</internalNodes>\n          <leafValues>\n            -1.5590840578079224e-01 9.4477489590644836e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2038 6.2993362545967102e-02</internalNodes>\n          <leafValues>\n            2.9042679816484451e-02 -2.5151410698890686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2039 1.7328880727291107e-02</internalNodes>\n          <leafValues>\n            -4.3562661856412888e-02 3.4017661213874817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2040 2.4053089320659637e-02</internalNodes>\n          <leafValues>\n            3.7450179457664490e-02 -2.8990021347999573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2041 2.1294029429554939e-02</internalNodes>\n          <leafValues>\n            4.8889711499214172e-02 -3.6390760540962219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2042 9.2860676348209381e-02</internalNodes>\n          <leafValues>\n            -3.6604419350624084e-02 3.2365238666534424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2043 2.1167730446904898e-03</internalNodes>\n          <leafValues>\n            8.7506070733070374e-02 -1.8339939415454865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2044 -8.7125040590763092e-02</internalNodes>\n          <leafValues>\n            -4.6162751317024231e-01 3.1342040747404099e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2045 1.9298809766769409e-01</internalNodes>\n          <leafValues>\n            2.9041619971394539e-02 -4.4543629884719849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2046 -2.4475890313624404e-05</internalNodes>\n          <leafValues>\n            5.9352759271860123e-02 -2.0239880681037903e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2047 -3.4894149750471115e-02</internalNodes>\n          <leafValues>\n            -4.5676550269126892e-01 3.5249751061201096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2048 1.9192209839820862e-01</internalNodes>\n          <leafValues>\n            -4.0733739733695984e-02 1.5444849431514740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2049 -2.3085139691829681e-02</internalNodes>\n          <leafValues>\n            7.1740321815013885e-02 -2.0493650436401367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2050 2.9535569250583649e-02</internalNodes>\n          <leafValues>\n            4.0762118995189667e-02 -3.6926439404487610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2051 -3.6492519080638885e-02</internalNodes>\n          <leafValues>\n            -5.4941332340240479e-01 2.5431329384446144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2052 4.0696229785680771e-02</internalNodes>\n          <leafValues>\n            1.0515309870243073e-02 -4.9906229972839355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2053 -3.6384560167789459e-02</internalNodes>\n          <leafValues>\n            -2.4736070632934570e-01 5.3187850862741470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2054 3.7000048905611038e-02</internalNodes>\n          <leafValues>\n            -4.6731691807508469e-02 3.0095300078392029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2055 3.7872981280088425e-02</internalNodes>\n          <leafValues>\n            4.5600850135087967e-02 -3.3789730072021484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2056 -1.6164340078830719e-02</internalNodes>\n          <leafValues>\n            1.9655610620975494e-01 -5.6567810475826263e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2057 2.4253420531749725e-01</internalNodes>\n          <leafValues>\n            3.7772599607706070e-02 -3.6190840601921082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2058 -1.7429869621992111e-02</internalNodes>\n          <leafValues>\n            7.8519687056541443e-02 -1.9835950806736946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2059 1.4150669798254967e-02</internalNodes>\n          <leafValues>\n            -1.5143400430679321e-01 1.2028410285711288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2060 6.3771687448024750e-02</internalNodes>\n          <leafValues>\n            6.8969810381531715e-03 -8.0511492490768433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2061 1.1273720301687717e-03</internalNodes>\n          <leafValues>\n            -2.6931971311569214e-01 5.2550218999385834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2062 -3.8293499499559402e-02</internalNodes>\n          <leafValues>\n            2.0563830435276031e-01 -2.1474370732903481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2063 5.0103109329938889e-02</internalNodes>\n          <leafValues>\n            2.3352440446615219e-02 -5.4645192623138428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2064 -4.0057931095361710e-02</internalNodes>\n          <leafValues>\n            2.4553330242633820e-01 -3.3474709838628769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2065 1.8415290862321854e-02</internalNodes>\n          <leafValues>\n            -7.5977481901645660e-02 1.8510019779205322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2066 1.0548150166869164e-02</internalNodes>\n          <leafValues>\n            6.6050186753273010e-02 -6.4367741346359253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2067 7.3007687926292419e-02</internalNodes>\n          <leafValues>\n            -2.6471909135580063e-02 4.6508520841598511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2068 -3.4658040851354599e-02</internalNodes>\n          <leafValues>\n            2.7848151326179504e-01 -4.6662889420986176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2069 1.6924630850553513e-02</internalNodes>\n          <leafValues>\n            1.1554700136184692e-01 -1.1504360288381577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2070 -7.4245870113372803e-02</internalNodes>\n          <leafValues>\n            -4.3072721362113953e-01 1.6461249440908432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2071 -7.3406308889389038e-02</internalNodes>\n          <leafValues>\n            -5.6626558303833008e-01 2.3453989997506142e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2072 1.2397419661283493e-01</internalNodes>\n          <leafValues>\n            -5.4616708308458328e-02 1.0024350136518478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2073 -1.6235560178756714e-02</internalNodes>\n          <leafValues>\n            -1.9912120699882507e-01 6.8537697196006775e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2074 -3.0137969180941582e-02</internalNodes>\n          <leafValues>\n            -3.3398950099945068e-01 2.2806070744991302e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2075 -8.1836536526679993e-02</internalNodes>\n          <leafValues>\n            4.0628650784492493e-01 -3.7828210741281509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2076 5.2240878343582153e-01</internalNodes>\n          <leafValues>\n            1.8094440922141075e-02 -4.3477010726928711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2077 1.4845579862594604e-02</internalNodes>\n          <leafValues>\n            -7.0279222726821899e-01 1.9977509975433350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2078 -5.5507790297269821e-02</internalNodes>\n          <leafValues>\n            5.1214778423309326e-01 -2.8097610920667648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2079 -2.7078049257397652e-02</internalNodes>\n          <leafValues>\n            3.0834761261940002e-01 -4.0676809847354889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2080 -2.4416339583694935e-03</internalNodes>\n          <leafValues>\n            -1.2054579704999924e-01 5.9857279062271118e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2081 1.5043720602989197e-01</internalNodes>\n          <leafValues>\n            -6.0036379843950272e-02 2.2021989524364471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2082 -4.1030261665582657e-02</internalNodes>\n          <leafValues>\n            -3.3254709839820862e-01 2.5029130280017853e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2083 1.4609499834477901e-02</internalNodes>\n          <leafValues>\n            5.1357660442590714e-02 -2.8190329670906067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2084 1.2588420510292053e-01</internalNodes>\n          <leafValues>\n            6.7158509045839310e-03 -4.9155730009078979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2085 -3.7784978747367859e-02</internalNodes>\n          <leafValues>\n            5.1675951480865479e-01 -2.7236010879278183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2086 -1.8090210855007172e-02</internalNodes>\n          <leafValues>\n            -3.5778409242630005e-01 3.5485059022903442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2087 -3.9881139993667603e-02</internalNodes>\n          <leafValues>\n            -4.8079541325569153e-01 2.7166770771145821e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2088 7.3324372060596943e-03</internalNodes>\n          <leafValues>\n            -5.3297691047191620e-02 1.1757290363311768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2089 -6.9262558827176690e-04</internalNodes>\n          <leafValues>\n            -1.4501209557056427e-01 9.2885218560695648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2090 -8.2166977226734161e-02</internalNodes>\n          <leafValues>\n            2.3127609491348267e-01 -5.6990649551153183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2091 3.8556379731744528e-03</internalNodes>\n          <leafValues>\n            9.5330670475959778e-02 -1.5586289763450623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2092 -7.4245668947696686e-03</internalNodes>\n          <leafValues>\n            -2.7692940831184387e-01 3.5343449562788010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2093 2.2808350622653961e-02</internalNodes>\n          <leafValues>\n            4.6904660761356354e-02 -3.3659911155700684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2094 8.2916222512722015e-02</internalNodes>\n          <leafValues>\n            2.8655149508267641e-03 -5.2691662311553955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2095 -5.2402060478925705e-02</internalNodes>\n          <leafValues>\n            -6.9835901260375977e-01 1.8587840721011162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2096 1.5193739905953407e-02</internalNodes>\n          <leafValues>\n            -6.0126390308141708e-02 2.5917008519172668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2097 -1.4240809716284275e-02</internalNodes>\n          <leafValues>\n            2.7056190371513367e-01 -6.4629502594470978e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2098 -3.2158840913325548e-03</internalNodes>\n          <leafValues>\n            -9.3549117445945740e-02 2.8090029954910278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2099 4.7198659740388393e-03</internalNodes>\n          <leafValues>\n            -1.8783959746360779e-01 7.1021787822246552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2100 -2.5415599346160889e-02</internalNodes>\n          <leafValues>\n            -3.3236810564994812e-01 4.0915489196777344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2101 4.2758490890264511e-02</internalNodes>\n          <leafValues>\n            2.6150930672883987e-02 -5.1128530502319336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2102 4.2231049388647079e-02</internalNodes>\n          <leafValues>\n            -2.1398520097136497e-02 1.7453899979591370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2103 -2.0674670115113258e-02</internalNodes>\n          <leafValues>\n            2.5898760557174683e-01 -5.6440889835357666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2104 2.8976969420909882e-02</internalNodes>\n          <leafValues>\n            -2.0763730630278587e-02 9.6909962594509125e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2105 3.4173950552940369e-03</internalNodes>\n          <leafValues>\n            9.3572951853275299e-02 -1.5996080636978149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2106 6.7922919988632202e-02</internalNodes>\n          <leafValues>\n            1.6243519261479378e-02 -7.4624717235565186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2107 -9.0270619839429855e-03</internalNodes>\n          <leafValues>\n            3.3382698893547058e-01 -3.8774389773607254e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2108 -2.8317999094724655e-02</internalNodes>\n          <leafValues>\n            -3.6276119947433472e-01 2.3800129070878029e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2109 -1.5302050160244107e-03</internalNodes>\n          <leafValues>\n            -1.8413589894771576e-01 7.0150263607501984e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2110 8.4196459501981735e-03</internalNodes>\n          <leafValues>\n            9.0586692094802856e-02 -6.1134628951549530e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2111 4.4346109032630920e-02</internalNodes>\n          <leafValues>\n            6.1388049274682999e-02 -2.1231949329376221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2112 2.5921100750565529e-02</internalNodes>\n          <leafValues>\n            -3.5028610378503799e-02 2.2107489407062531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2113 -6.0503371059894562e-03</internalNodes>\n          <leafValues>\n            -3.2179000973701477e-01 3.9333820343017578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2114 -2.5171019136905670e-02</internalNodes>\n          <leafValues>\n            6.9517672061920166e-01 -1.8360199406743050e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2115 -5.2073050290346146e-02</internalNodes>\n          <leafValues>\n            -7.4727028608322144e-01 1.9030340015888214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2116 -1.3639439828693867e-02</internalNodes>\n          <leafValues>\n            -6.2003239989280701e-02 4.1589640080928802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2117 -3.8377299904823303e-02</internalNodes>\n          <leafValues>\n            3.8518410921096802e-01 -3.1509511172771454e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2118 -1.4677719771862030e-01</internalNodes>\n          <leafValues>\n            -6.0099261999130249e-01 1.0989420115947723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2119 2.0508460700511932e-02</internalNodes>\n          <leafValues>\n            5.6464750319719315e-02 -2.5149369239807129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2120 2.3784590885043144e-02</internalNodes>\n          <leafValues>\n            5.8459620922803879e-02 -2.2233340144157410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2121 1.8658170476555824e-02</internalNodes>\n          <leafValues>\n            -7.3706217110157013e-02 1.8556639552116394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2122 -2.6653500273823738e-02</internalNodes>\n          <leafValues>\n            2.1061730384826660e-01 -6.8629503250122070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2123 -7.5975798070430756e-02</internalNodes>\n          <leafValues>\n            -4.8535370826721191e-01 2.7239590883255005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2124 5.3205721080303192e-02</internalNodes>\n          <leafValues>\n            5.1950141787528992e-03 -4.7940468788146973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2125 4.1206479072570801e-02</internalNodes>\n          <leafValues>\n            1.9166460260748863e-02 -6.4439648389816284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2126 2.2624490782618523e-02</internalNodes>\n          <leafValues>\n            1.7490459606051445e-02 -2.0645530521869659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2127 2.1147429943084717e-02</internalNodes>\n          <leafValues>\n            -3.2944951206445694e-02 3.5154509544372559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2128 1.3374770060181618e-02</internalNodes>\n          <leafValues>\n            4.0784850716590881e-02 -1.9725930690765381e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2129 4.2831092141568661e-03</internalNodes>\n          <leafValues>\n            -8.5159152746200562e-02 1.4025710523128510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2130 6.3718900084495544e-02</internalNodes>\n          <leafValues>\n            -4.9198199994862080e-03 4.5491519570350647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2131 1.2082169763743877e-02</internalNodes>\n          <leafValues>\n            5.3176809102296829e-02 -2.6156601309776306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2132 1.8195409327745438e-02</internalNodes>\n          <leafValues>\n            -3.8999419659376144e-02 3.3412361145019531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2133 2.8948329389095306e-02</internalNodes>\n          <leafValues>\n            3.9750248193740845e-02 -3.4182530641555786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2134 -9.3633607029914856e-02</internalNodes>\n          <leafValues>\n            -9.4571298360824585e-01 3.0850030016154051e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2135 3.4850560128688812e-02</internalNodes>\n          <leafValues>\n            3.1342729926109314e-02 -3.5700461268424988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2136 1.2895749509334564e-01</internalNodes>\n          <leafValues>\n            -3.9653491228818893e-02 3.7412929534912109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2137 2.3297289386391640e-02</internalNodes>\n          <leafValues>\n            2.5941710919141769e-02 -4.7231191396713257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2138 1.5667669475078583e-02</internalNodes>\n          <leafValues>\n            -8.1445790827274323e-02 1.5750789642333984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2139 1.1425570119172335e-03</internalNodes>\n          <leafValues>\n            6.3901476562023163e-02 -2.0547799766063690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2140 -5.5744551122188568e-02</internalNodes>\n          <leafValues>\n            -3.4481841325759888e-01 1.1300710029900074e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2141 -9.2509537935256958e-02</internalNodes>\n          <leafValues>\n            8.9074200391769409e-01 -1.5398530289530754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2142 -5.5660872021690011e-04</internalNodes>\n          <leafValues>\n            8.7056189775466919e-02 -5.1321998238563538e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2143 -1.4538520015776157e-02</internalNodes>\n          <leafValues>\n            -4.5140060782432556e-01 2.8146119788289070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2144 -3.7515729665756226e-02</internalNodes>\n          <leafValues>\n            -7.3286539316177368e-01 6.7265569232404232e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2145 -1.5516959829255939e-03</internalNodes>\n          <leafValues>\n            9.1213479638099670e-02 -1.3395330309867859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2146 -9.5461420714855194e-02</internalNodes>\n          <leafValues>\n            -9.5529359579086304e-01 2.3820339702069759e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2147 -1.2917599640786648e-02</internalNodes>\n          <leafValues>\n            2.7040511369705200e-01 -4.6904701739549637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2148 7.9802395775914192e-03</internalNodes>\n          <leafValues>\n            5.5390980094671249e-02 -2.0667399466037750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2149 6.6025177948176861e-03</internalNodes>\n          <leafValues>\n            6.6448308527469635e-02 -1.9922210276126862e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2150 1.7824679613113403e-02</internalNodes>\n          <leafValues>\n            -1.4532490074634552e-01 8.9904323220252991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2151 -2.3261539638042450e-02</internalNodes>\n          <leafValues>\n            4.8062869906425476e-01 -2.7084289118647575e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2152 -5.3659449331462383e-03</internalNodes>\n          <leafValues>\n            -1.9143599271774292e-01 7.0398069918155670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2153 -2.0775340497493744e-02</internalNodes>\n          <leafValues>\n            1.6774240136146545e-01 -8.9455418288707733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2154 6.2107890844345093e-02</internalNodes>\n          <leafValues>\n            1.2815490365028381e-02 -6.4452892541885376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2155 -4.4327871873974800e-03</internalNodes>\n          <leafValues>\n            1.3405950367450714e-01 -1.0231850296258926e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>210</maxWeakCount>\n      <stageThreshold>-1.4604519605636597e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2156 -4.6693067997694016e-03</internalNodes>\n          <leafValues>\n            1.4297600090503693e-01 -3.5293748974800110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2157 -5.8510829694569111e-04</internalNodes>\n          <leafValues>\n            -2.2447289526462555e-01 7.3556646704673767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2158 -3.4788011107593775e-03</internalNodes>\n          <leafValues>\n            1.0603249818086624e-01 -2.5625610351562500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2159 6.2952568987384439e-04</internalNodes>\n          <leafValues>\n            4.1076458990573883e-02 -3.6061421036720276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2160 2.1010650380048901e-04</internalNodes>\n          <leafValues>\n            -2.4425220489501953e-01 1.0942090302705765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2161 -2.6671579107642174e-03</internalNodes>\n          <leafValues>\n            8.4581501781940460e-02 -2.7449008822441101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2162 7.1533219888806343e-03</internalNodes>\n          <leafValues>\n            -1.2603819370269775e-01 2.0079800486564636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2163 -2.3616119287908077e-03</internalNodes>\n          <leafValues>\n            1.6627199947834015e-01 -1.3186289370059967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2164 3.9599660784006119e-02</internalNodes>\n          <leafValues>\n            5.5119238793849945e-02 -3.4003400802612305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2165 1.9385309424251318e-03</internalNodes>\n          <leafValues>\n            -2.0686650276184082e-01 1.0400419682264328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2166 4.3686539866030216e-03</internalNodes>\n          <leafValues>\n            6.4766593277454376e-02 -2.7426311373710632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2167 -3.9834968629293144e-04</internalNodes>\n          <leafValues>\n            5.2820999175310135e-02 -2.2684779763221741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2168 -5.2277399227023125e-03</internalNodes>\n          <leafValues>\n            -2.5515750050544739e-01 7.6405368745326996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2169 -1.0445619933307171e-02</internalNodes>\n          <leafValues>\n            1.3513970375061035e-01 -5.0032071769237518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2170 -2.0478919614106417e-03</internalNodes>\n          <leafValues>\n            -2.7669870853424072e-01 5.4732039570808411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2171 9.1795288026332855e-03</internalNodes>\n          <leafValues>\n            -1.2642470002174377e-01 1.9979229569435120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2172 9.4128772616386414e-04</internalNodes>\n          <leafValues>\n            -4.0286481380462646e-01 3.8918491452932358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2173 -4.0410319343209267e-03</internalNodes>\n          <leafValues>\n            -2.0108319818973541e-01 5.1456429064273834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2174 -1.2742569670081139e-02</internalNodes>\n          <leafValues>\n            2.2716869413852692e-01 -6.8204790353775024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2175 -4.6246009878814220e-03</internalNodes>\n          <leafValues>\n            -2.5854289531707764e-01 7.8878343105316162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2176 -6.4845927990972996e-03</internalNodes>\n          <leafValues>\n            -3.1391140818595886e-01 7.1605153381824493e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2177 -4.8291690647602081e-02</internalNodes>\n          <leafValues>\n            2.5488480925559998e-01 -2.1891580894589424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2178 8.4315962158143520e-04</internalNodes>\n          <leafValues>\n            -1.6529269516468048e-01 8.9575611054897308e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2179 -1.0773389786481857e-01</internalNodes>\n          <leafValues>\n            -6.0115939378738403e-01 3.3779250225052238e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2180 -4.5969419181346893e-02</internalNodes>\n          <leafValues>\n            3.6489740014076233e-01 -3.9942290633916855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2181 -1.6649639233946800e-02</internalNodes>\n          <leafValues>\n            -1.1858119815587997e-01 1.0585139691829681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2182 -1.4521550387144089e-02</internalNodes>\n          <leafValues>\n            -3.7954211235046387e-01 3.4867148846387863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2183 1.3591590104624629e-03</internalNodes>\n          <leafValues>\n            -2.3180609941482544e-01 5.0401471555233002e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2184 -5.8343587443232536e-04</internalNodes>\n          <leafValues>\n            -2.8496581315994263e-01 4.0894281119108200e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2185 7.9833306372165680e-03</internalNodes>\n          <leafValues>\n            -3.6992359906435013e-02 1.6985300183296204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2186 9.9762203171849251e-04</internalNodes>\n          <leafValues>\n            6.4871042966842651e-02 -1.8648339807987213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2187 -4.6869087964296341e-03</internalNodes>\n          <leafValues>\n            7.6987423002719879e-02 -8.1482626497745514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2188 3.0047740787267685e-02</internalNodes>\n          <leafValues>\n            -2.9839929193258286e-02 4.3676841259002686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2189 1.8069539219141006e-02</internalNodes>\n          <leafValues>\n            2.7509700506925583e-02 -4.2724269628524780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2190 -1.5088430047035217e-01</internalNodes>\n          <leafValues>\n            -6.7918521165847778e-01 1.8012860789895058e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2191 -2.5836290791630745e-02</internalNodes>\n          <leafValues>\n            2.5797989964485168e-01 -3.5906858742237091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2192 1.8183529376983643e-02</internalNodes>\n          <leafValues>\n            3.5895019769668579e-02 -3.7197691202163696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2193 6.3127309083938599e-02</internalNodes>\n          <leafValues>\n            -7.3392972350120544e-02 1.2563429772853851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2194 -6.6507689189165831e-04</internalNodes>\n          <leafValues>\n            8.5442617535591125e-02 -1.5228550136089325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2195 1.0104980319738388e-02</internalNodes>\n          <leafValues>\n            3.4569118171930313e-02 -2.2657699882984161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2196 -1.2355949729681015e-02</internalNodes>\n          <leafValues>\n            1.5785010159015656e-01 -7.4710778892040253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2197 1.5728179365396500e-02</internalNodes>\n          <leafValues>\n            6.8844422698020935e-02 -1.6961769759654999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2198 1.5084549886523746e-05</internalNodes>\n          <leafValues>\n            -1.3695539534091949e-01 9.0837597846984863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2199 2.9634479433298111e-02</internalNodes>\n          <leafValues>\n            4.9822349101305008e-02 -2.6809689402580261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2200 2.8015200048685074e-02</internalNodes>\n          <leafValues>\n            -8.1799760460853577e-02 1.7842799425125122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2201 2.3299450986087322e-03</internalNodes>\n          <leafValues>\n            6.9535210728645325e-02 -1.8205040693283081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2202 1.3453120365738869e-02</internalNodes>\n          <leafValues>\n            -7.0231497287750244e-02 1.8492579460144043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2203 1.4049040153622627e-02</internalNodes>\n          <leafValues>\n            7.6328299939632416e-02 -1.7219689488410950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2204 -1.4648989774286747e-02</internalNodes>\n          <leafValues>\n            3.4281060099601746e-01 -4.3134819716215134e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2205 1.4879769878461957e-04</internalNodes>\n          <leafValues>\n            -2.7614209055900574e-01 7.3140732944011688e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2206 -6.8892319686710835e-03</internalNodes>\n          <leafValues>\n            -1.8386749923229218e-01 6.5872021019458771e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2207 1.2898260029032826e-03</internalNodes>\n          <leafValues>\n            -1.1688020080327988e-01 1.1173330247402191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2208 -2.5763860321603715e-04</internalNodes>\n          <leafValues>\n            8.9391976594924927e-02 -1.4183540642261505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2209 1.3652349822223186e-02</internalNodes>\n          <leafValues>\n            2.5085829198360443e-02 -1.7959770560264587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2210 -5.7484027929604053e-03</internalNodes>\n          <leafValues>\n            1.6128179430961609e-01 -7.9023167490959167e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2211 -1.1682719923555851e-02</internalNodes>\n          <leafValues>\n            -1.8493950366973877e-01 4.5419961214065552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2212 2.7498970739543438e-03</internalNodes>\n          <leafValues>\n            -6.5800942480564117e-02 1.9426700472831726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2213 -1.1797569459304214e-03</internalNodes>\n          <leafValues>\n            5.3563870489597321e-02 -5.5225171148777008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2214 -3.7005849182605743e-02</internalNodes>\n          <leafValues>\n            -5.1369887590408325e-01 2.4779239669442177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2215 2.3432020097970963e-02</internalNodes>\n          <leafValues>\n            1.4517559669911861e-02 -3.2621389627456665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2216 -2.4803660809993744e-02</internalNodes>\n          <leafValues>\n            4.1374489665031433e-01 -3.1516589224338531e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2217 -9.1133005917072296e-03</internalNodes>\n          <leafValues>\n            -2.3262369632720947e-01 6.5307170152664185e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2218 -7.2223007678985596e-02</internalNodes>\n          <leafValues>\n            3.1365010142326355e-01 -4.0287811309099197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2219 6.4163007773458958e-03</internalNodes>\n          <leafValues>\n            4.4151920825242996e-02 -1.4439010620117188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2220 5.4361939430236816e-02</internalNodes>\n          <leafValues>\n            -4.9821659922599792e-02 2.6239651441574097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2221 -5.9238062240183353e-03</internalNodes>\n          <leafValues>\n            7.4054516851902008e-02 -7.2215773165225983e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2222 -3.4175089094787836e-03</internalNodes>\n          <leafValues>\n            -3.0714958906173706e-01 3.9461899548768997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2223 1.1367879807949066e-02</internalNodes>\n          <leafValues>\n            -4.8698928207159042e-02 1.0077890008687973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2224 2.3361030034720898e-03</internalNodes>\n          <leafValues>\n            4.9539480358362198e-02 -2.3815050721168518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2225 -7.2044372791424394e-04</internalNodes>\n          <leafValues>\n            9.6084482967853546e-02 -9.8123528063297272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2226 -3.4777939436025918e-04</internalNodes>\n          <leafValues>\n            1.0546120256185532e-01 -1.0600890219211578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2227 -6.6456091590225697e-03</internalNodes>\n          <leafValues>\n            -1.7471200227737427e-01 4.7264128923416138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2228 4.4261440634727478e-02</internalNodes>\n          <leafValues>\n            -4.0742669254541397e-02 2.8637731075286865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2229 3.4959740936756134e-02</internalNodes>\n          <leafValues>\n            1.3479149900376797e-02 -4.4233149290084839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2230 -2.5971820577979088e-02</internalNodes>\n          <leafValues>\n            -4.6334660053253174e-01 2.5301979854702950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2231 1.8818200333043933e-03</internalNodes>\n          <leafValues>\n            -7.2344467043876648e-02 1.5579940378665924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2232 3.2623678445816040e-02</internalNodes>\n          <leafValues>\n            1.8171060830354691e-02 -6.3472539186477661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2233 1.5041300095617771e-02</internalNodes>\n          <leafValues>\n            -5.3582038730382919e-02 1.8320439755916595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2234 -5.5875489488244057e-03</internalNodes>\n          <leafValues>\n            1.5442819893360138e-01 -6.9521442055702209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2235 3.9029030594974756e-03</internalNodes>\n          <leafValues>\n            7.2893843054771423e-02 -1.3542290031909943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2236 4.5964889228343964e-02</internalNodes>\n          <leafValues>\n            2.1482560783624649e-02 -5.4532879590988159e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2237 -7.4338473379611969e-02</internalNodes>\n          <leafValues>\n            -7.1795612573623657e-01 3.5341270267963409e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2238 2.0902850665152073e-03</internalNodes>\n          <leafValues>\n            4.3308760970830917e-02 -2.5078159570693970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2239 -7.5608417391777039e-02</internalNodes>\n          <leafValues>\n            2.7488818764686584e-01 -3.4967329353094101e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2240 5.1200888119637966e-03</internalNodes>\n          <leafValues>\n            4.7384329140186310e-02 -2.6794269680976868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2241 -2.0140670239925385e-02</internalNodes>\n          <leafValues>\n            7.2039432823657990e-02 -4.4537059962749481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2242 2.6719279587268829e-02</internalNodes>\n          <leafValues>\n            -6.0671631246805191e-02 2.4019980430603027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2243 -2.3299809545278549e-03</internalNodes>\n          <leafValues>\n            -1.4848700165748596e-01 6.3779368996620178e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2244 1.4248250052332878e-02</internalNodes>\n          <leafValues>\n            3.9471931755542755e-02 -2.7790299057960510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2245 -6.8691447377204895e-02</internalNodes>\n          <leafValues>\n            3.1307551264762878e-01 -2.2111769765615463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2246 -6.5213128924369812e-02</internalNodes>\n          <leafValues>\n            3.6191588640213013e-01 -3.1089780852198601e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2247 -1.4469860121607780e-02</internalNodes>\n          <leafValues>\n            -1.9942939281463623e-01 2.6489760726690292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2248 -9.4575136899948120e-03</internalNodes>\n          <leafValues>\n            -2.9698899388313293e-01 3.6693658679723740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2249 -1.8222700059413910e-01</internalNodes>\n          <leafValues>\n            -4.0887731313705444e-01 7.3904348537325859e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2250 -2.3991869390010834e-01</internalNodes>\n          <leafValues>\n            -9.5519691705703735e-01 1.0895749554038048e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2251 -1.4964600093662739e-02</internalNodes>\n          <leafValues>\n            1.3325509428977966e-01 -6.4146116375923157e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2252 1.1056339740753174e-01</internalNodes>\n          <leafValues>\n            -2.1147079765796661e-02 5.2262008190155029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2253 -1.1857460252940655e-02</internalNodes>\n          <leafValues>\n            -2.6103261113166809e-01 2.4917129427194595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2254 1.7032399773597717e-02</internalNodes>\n          <leafValues>\n            -4.2655009776353836e-02 2.4324589967727661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2255 -6.6315201111137867e-03</internalNodes>\n          <leafValues>\n            -2.7996608614921570e-01 4.7972209751605988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2256 -1.3527619885280728e-03</internalNodes>\n          <leafValues>\n            -1.7117640376091003e-01 6.8423986434936523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2257 5.8159399777650833e-02</internalNodes>\n          <leafValues>\n            1.4452300034463406e-02 -3.6640700697898865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2258 9.6522513777017593e-03</internalNodes>\n          <leafValues>\n            6.4102686941623688e-02 -1.9386090338230133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2259 4.6681659296154976e-03</internalNodes>\n          <leafValues>\n            -6.4305387437343597e-02 1.2191460281610489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2260 4.8228199593722820e-03</internalNodes>\n          <leafValues>\n            4.2306859046220779e-02 -2.5486230850219727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2261 7.2615491226315498e-03</internalNodes>\n          <leafValues>\n            -4.4169031083583832e-02 1.9888080656528473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2262 2.7650638949126005e-03</internalNodes>\n          <leafValues>\n            5.6748721748590469e-02 -1.8802900612354279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2263 -1.2599739711731672e-03</internalNodes>\n          <leafValues>\n            2.9681721329689026e-01 -3.0795339494943619e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2264 -1.4079749584197998e-02</internalNodes>\n          <leafValues>\n            1.2790699303150177e-01 -7.7078782021999359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2265 4.1978028602898121e-03</internalNodes>\n          <leafValues>\n            -3.2651171088218689e-02 4.4282011687755585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2266 7.4891891563311219e-04</internalNodes>\n          <leafValues>\n            -1.1801239848136902e-01 1.0196279734373093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2267 3.9699498564004898e-02</internalNodes>\n          <leafValues>\n            1.6263889148831367e-02 -3.2391819357872009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2268 2.9685199260711670e-03</internalNodes>\n          <leafValues>\n            5.0729360431432724e-02 -2.2522340714931488e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2269 3.0207540839910507e-03</internalNodes>\n          <leafValues>\n            -6.4312063157558441e-02 6.3618481159210205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2270 -1.0064570233225822e-03</internalNodes>\n          <leafValues>\n            -2.2469790279865265e-01 4.3256420642137527e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2271 1.6607339493930340e-03</internalNodes>\n          <leafValues>\n            -5.8126531541347504e-02 5.9540931135416031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2272 4.9640638753771782e-03</internalNodes>\n          <leafValues>\n            -4.8804368823766708e-02 1.8437810242176056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2273 1.7194069921970367e-01</internalNodes>\n          <leafValues>\n            3.6377978976815939e-03 -1.0000029802322388e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2274 -2.0992290228605270e-03</internalNodes>\n          <leafValues>\n            1.1951360106468201e-01 -8.8613957166671753e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2275 -4.0529989637434483e-03</internalNodes>\n          <leafValues>\n            -2.0199899375438690e-01 5.3564589470624924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2276 1.5536800492554903e-03</internalNodes>\n          <leafValues>\n            -9.6797212958335876e-02 9.5135137438774109e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2277 2.2837040014564991e-03</internalNodes>\n          <leafValues>\n            -4.5535419136285782e-02 1.4682759344577789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2278 -1.0094629600644112e-02</internalNodes>\n          <leafValues>\n            -1.8853099644184113e-01 4.8864368349313736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2279 -7.0200799964368343e-03</internalNodes>\n          <leafValues>\n            1.4628750085830688e-01 -4.2158648371696472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2280 3.4074939321726561e-03</internalNodes>\n          <leafValues>\n            -7.7149718999862671e-02 1.3702009618282318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2281 3.9907437749207020e-03</internalNodes>\n          <leafValues>\n            -6.4178831875324249e-02 8.5484616458415985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2282 2.0611559972167015e-02</internalNodes>\n          <leafValues>\n            3.7988938391208649e-02 -2.9359170794487000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2283 -1.9768020138144493e-03</internalNodes>\n          <leafValues>\n            6.0499001294374466e-02 -1.6910280287265778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2284 -2.4783300235867500e-02</internalNodes>\n          <leafValues>\n            -5.5052608251571655e-01 1.5831759199500084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2285 -1.5710920095443726e-02</internalNodes>\n          <leafValues>\n            1.9716830551624298e-01 -3.1884010881185532e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2286 1.0070169810205698e-03</internalNodes>\n          <leafValues>\n            4.6532750129699707e-02 -2.1853099763393402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2287 -3.7466569337993860e-03</internalNodes>\n          <leafValues>\n            -2.5379389524459839e-01 3.9463929831981659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2288 4.5849520713090897e-02</internalNodes>\n          <leafValues>\n            1.3636340387165546e-02 -6.2976127862930298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2289 -1.1040110141038895e-02</internalNodes>\n          <leafValues>\n            2.4939639866352081e-01 -3.8895469158887863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2290 -4.2415689677000046e-03</internalNodes>\n          <leafValues>\n            -2.1564769744873047e-01 4.5613430440425873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2291 -3.1175611075013876e-03</internalNodes>\n          <leafValues>\n            1.0641460120677948e-01 -1.2268310040235519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2292 -2.3725910577923059e-03</internalNodes>\n          <leafValues>\n            2.0573639869689941e-01 -6.6338561475276947e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2293 -3.6906299646943808e-03</internalNodes>\n          <leafValues>\n            -1.5802620351314545e-01 6.6760621964931488e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2294 1.0908120311796665e-03</internalNodes>\n          <leafValues>\n            -1.7830020189285278e-01 5.7181321084499359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2295 -1.3929420150816441e-02</internalNodes>\n          <leafValues>\n            -1.4185859262943268e-01 5.8131370693445206e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2296 -2.8283370658755302e-02</internalNodes>\n          <leafValues>\n            2.6451000571250916e-01 -4.5332599431276321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2297 -3.9213709533214569e-04</internalNodes>\n          <leafValues>\n            7.6039716601371765e-02 -8.4666326642036438e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2298 -2.0424809772521257e-03</internalNodes>\n          <leafValues>\n            -1.6393850743770599e-01 5.7595171034336090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2299 -6.0634050518274307e-02</internalNodes>\n          <leafValues>\n            2.4343550205230713e-01 -1.3630810193717480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2300 5.5472988635301590e-02</internalNodes>\n          <leafValues>\n            1.2274630367755890e-02 -7.6161897182464600e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2301 2.6451710611581802e-02</internalNodes>\n          <leafValues>\n            -1.6103159636259079e-02 1.4696520566940308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2302 -6.5615847706794739e-02</internalNodes>\n          <leafValues>\n            -6.6936880350112915e-01 1.2788389809429646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2303 -2.9287360608577728e-02</internalNodes>\n          <leafValues>\n            3.8422039151191711e-01 -2.0979570224881172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2304 -8.7814256548881531e-02</internalNodes>\n          <leafValues>\n            -5.5386292934417725e-01 1.6540929675102234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2305 4.0213011205196381e-02</internalNodes>\n          <leafValues>\n            5.5229798890650272e-03 -1.5169410407543182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2306 7.5501110404729843e-03</internalNodes>\n          <leafValues>\n            -5.3081061691045761e-02 1.6791249811649323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2307 7.5557199306786060e-03</internalNodes>\n          <leafValues>\n            4.9213249236345291e-02 -1.8097420036792755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2308 4.2264759540557861e-02</internalNodes>\n          <leafValues>\n            9.8954448476433754e-03 -8.7265938520431519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2309 -1.5821179375052452e-02</internalNodes>\n          <leafValues>\n            -4.9515271186828613e-01 1.0424910113215446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2310 4.4557699002325535e-03</internalNodes>\n          <leafValues>\n            -5.2823610603809357e-02 1.7409110069274902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2311 -6.3567152246832848e-03</internalNodes>\n          <leafValues>\n            1.0278800129890442e-01 -9.4062283635139465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2312 2.1308339200913906e-03</internalNodes>\n          <leafValues>\n            -5.7343449443578720e-02 1.5747800469398499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2313 6.4157308079302311e-03</internalNodes>\n          <leafValues>\n            4.1112188249826431e-02 -2.6482531428337097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2314 -1.0572739690542221e-01</internalNodes>\n          <leafValues>\n            -9.2719399929046631e-01 8.6396038532257080e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2315 6.1298489570617676e-02</internalNodes>\n          <leafValues>\n            1.1242480017244816e-02 -5.2976250648498535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2316 1.0018650442361832e-02</internalNodes>\n          <leafValues>\n            -6.1801191419363022e-02 1.5441860258579254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2317 2.3613891098648310e-03</internalNodes>\n          <leafValues>\n            -3.9282340556383133e-02 8.8061779737472534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2318 -4.7975129564292729e-04</internalNodes>\n          <leafValues>\n            -1.0663200169801712e-01 8.3887517452239990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2319 7.3982410132884979e-02</internalNodes>\n          <leafValues>\n            4.7058681957423687e-03 -6.0129082202911377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2320 6.3821911811828613e-02</internalNodes>\n          <leafValues>\n            1.1372390203177929e-02 -7.4044847488403320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2321 4.6818208647891879e-04</internalNodes>\n          <leafValues>\n            -7.6545506715774536e-02 5.3563810884952545e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2322 4.3877989053726196e-01</internalNodes>\n          <leafValues>\n            1.2420959770679474e-02 -6.8776041269302368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2323 2.8831470757722855e-02</internalNodes>\n          <leafValues>\n            1.5150110237300396e-02 -1.3229629397392273e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2324 6.7726813256740570e-02</internalNodes>\n          <leafValues>\n            -1.8901329487562180e-02 4.8799818754196167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2325 9.5125466585159302e-02</internalNodes>\n          <leafValues>\n            1.2518660165369511e-02 -7.4607741832733154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2326 3.4629011061042547e-03</internalNodes>\n          <leafValues>\n            -6.4396522939205170e-02 1.3450330495834351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2327 -1.0220340453088284e-02</internalNodes>\n          <leafValues>\n            -1.2102399766445160e-01 3.5081598907709122e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2328 -2.5227791070938110e-01</internalNodes>\n          <leafValues>\n            5.3186398744583130e-01 -1.7373610287904739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2329 4.7006108798086643e-03</internalNodes>\n          <leafValues>\n            2.6264479383826256e-02 -1.6305670142173767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2330 8.0487072467803955e-02</internalNodes>\n          <leafValues>\n            -1.1193430051207542e-02 7.3598998785018921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2331 -3.8025099784135818e-03</internalNodes>\n          <leafValues>\n            -1.1756920069456100e-01 6.4899243414402008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2332 -5.1970399916172028e-02</internalNodes>\n          <leafValues>\n            2.1764869987964630e-01 -4.6299580484628677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2333 -1.2381119653582573e-02</internalNodes>\n          <leafValues>\n            -1.3483320176601410e-01 7.0956252515316010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2334 4.6567008830606937e-03</internalNodes>\n          <leafValues>\n            8.4818847477436066e-02 -1.0850810259580612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2335 2.4520549923181534e-02</internalNodes>\n          <leafValues>\n            -5.6512400507926941e-02 2.0845490694046021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2336 -6.0728159733116627e-03</internalNodes>\n          <leafValues>\n            1.0253319889307022e-01 -1.0739710181951523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2337 1.3803950278088450e-03</internalNodes>\n          <leafValues>\n            -1.2355019897222519e-01 3.8523931056261063e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2338 8.3129312843084335e-03</internalNodes>\n          <leafValues>\n            5.0441969186067581e-02 -1.7901860177516937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2339 6.8436772562563419e-04</internalNodes>\n          <leafValues>\n            -6.1334688216447830e-02 4.9543838948011398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2340 7.1589440107345581e-02</internalNodes>\n          <leafValues>\n            1.1258729733526707e-02 -7.2902548313140869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2341 -3.9251110865734518e-04</internalNodes>\n          <leafValues>\n            -2.9022648930549622e-01 1.3908719643950462e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2342 -1.6948020085692406e-02</internalNodes>\n          <leafValues>\n            1.4616020023822784e-01 -5.6298948824405670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2343 2.3180670104920864e-03</internalNodes>\n          <leafValues>\n            2.0289139449596405e-01 -4.3649390339851379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2344 7.9764174297451973e-03</internalNodes>\n          <leafValues>\n            -4.8768021166324615e-02 1.8070909380912781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2345 -1.1533150449395180e-02</internalNodes>\n          <leafValues>\n            -1.4238800108432770e-01 5.6691840291023254e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2346 -5.4723728680983186e-04</internalNodes>\n          <leafValues>\n            -2.3844610154628754e-01 3.2061301171779633e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2347 -1.1751300189644098e-03</internalNodes>\n          <leafValues>\n            2.5394979864358902e-02 -8.9872613549232483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2348 1.3655239716172218e-02</internalNodes>\n          <leafValues>\n            -2.7230219915509224e-02 3.3419778943061829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2349 4.1803810745477676e-03</internalNodes>\n          <leafValues>\n            2.6914540678262711e-02 -1.2557040154933929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2350 3.1565671088173985e-04</internalNodes>\n          <leafValues>\n            6.2177520245313644e-02 -1.3345809280872345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2351 7.4048307724297047e-03</internalNodes>\n          <leafValues>\n            3.1548298895359039e-02 -2.8247129917144775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2352 -1.3977429829537868e-02</internalNodes>\n          <leafValues>\n            1.2342610210180283e-01 -8.0493018031120300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2353 -1.4240520074963570e-02</internalNodes>\n          <leafValues>\n            -2.3979499936103821e-01 1.8016669899225235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2354 -2.2901569306850433e-01</internalNodes>\n          <leafValues>\n            -4.2895668745040894e-01 2.0032370463013649e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2355 2.6522560045123100e-02</internalNodes>\n          <leafValues>\n            -2.9899509623646736e-02 3.1195539236068726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2356 5.0723659805953503e-03</internalNodes>\n          <leafValues>\n            6.2117800116539001e-02 -1.5442310273647308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2357 2.2340700961649418e-03</internalNodes>\n          <leafValues>\n            3.0717259272933006e-02 -1.4656220376491547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2358 -4.6348381787538528e-02</internalNodes>\n          <leafValues>\n            -6.7844080924987793e-01 1.2258620001375675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2359 -3.0467000324279070e-03</internalNodes>\n          <leafValues>\n            1.0547509789466858e-01 -5.4426789283752441e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2360 7.0065702311694622e-03</internalNodes>\n          <leafValues>\n            -5.2537959069013596e-02 2.4259300529956818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2361 -2.7783720288425684e-03</internalNodes>\n          <leafValues>\n            -1.0732100158929825e-01 7.4064619839191437e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2362 -4.2294961167499423e-04</internalNodes>\n          <leafValues>\n            6.8151466548442841e-02 -1.4117160439491272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2363 -8.7614007294178009e-02</internalNodes>\n          <leafValues>\n            -6.5271192789077759e-01 3.3460480626672506e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2364 1.2552930042147636e-02</internalNodes>\n          <leafValues>\n            3.3235169947147369e-02 -2.6571980118751526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2365 -2.1863510832190514e-02</internalNodes>\n          <leafValues>\n            1.5599909424781799e-01 -3.7561919540166855e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>189</maxWeakCount>\n      <stageThreshold>-1.6477719545364380e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2366 1.9715659320354462e-02</internalNodes>\n          <leafValues>\n            -4.0786159038543701e-01 1.6317300498485565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2367 4.9977540969848633e-02</internalNodes>\n          <leafValues>\n            -2.5753161311149597e-01 2.3471170663833618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2368 3.4774339292198420e-04</internalNodes>\n          <leafValues>\n            -2.7148011326789856e-01 1.5202049911022186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2369 8.2787703722715378e-03</internalNodes>\n          <leafValues>\n            8.6229562759399414e-02 -4.2272651195526123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2370 1.2891810387372971e-02</internalNodes>\n          <leafValues>\n            -2.7589491009712219e-01 9.9677331745624542e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2371 -5.2444688044488430e-03</internalNodes>\n          <leafValues>\n            1.4687310159206390e-01 -1.8090559542179108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2372 4.7363140038214624e-04</internalNodes>\n          <leafValues>\n            1.1544570326805115e-01 -2.3242090642452240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2373 1.0767930187284946e-02</internalNodes>\n          <leafValues>\n            -2.3256160318851471e-01 5.7885929942131042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2374 -2.0576089154928923e-03</internalNodes>\n          <leafValues>\n            -4.0554818511009216e-01 6.1086129397153854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2375 1.2648279964923859e-01</internalNodes>\n          <leafValues>\n            2.5926080998033285e-03 -6.0955828428268433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2376 2.2029090672731400e-02</internalNodes>\n          <leafValues>\n            -2.3835970461368561e-01 1.1523839831352234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2377 8.6279091192409396e-04</internalNodes>\n          <leafValues>\n            -2.4382559955120087e-01 4.8174999654293060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2378 6.1232252046465874e-03</internalNodes>\n          <leafValues>\n            -3.3293130993843079e-01 7.3860548436641693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2379 1.8321570241823792e-03</internalNodes>\n          <leafValues>\n            7.4964806437492371e-02 -3.6050680279731750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2380 1.3176959939301014e-02</internalNodes>\n          <leafValues>\n            7.8650407493114471e-02 -3.0009350180625916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2381 -1.5092800371348858e-02</internalNodes>\n          <leafValues>\n            -4.5663359761238098e-01 4.5359719544649124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2382 -3.9765550754964352e-03</internalNodes>\n          <leafValues>\n            -3.7404119968414307e-01 5.7276591658592224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2383 -1.2558099813759327e-02</internalNodes>\n          <leafValues>\n            1.8079389631748199e-01 -9.0798392891883850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2384 1.1346530169248581e-02</internalNodes>\n          <leafValues>\n            6.7842416465282440e-02 -3.3354648947715759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2385 3.0938379932194948e-03</internalNodes>\n          <leafValues>\n            -6.4362257719039917e-02 1.6250990331172943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2386 -7.9837916418910027e-03</internalNodes>\n          <leafValues>\n            -2.8237259387969971e-01 6.4243227243423462e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2387 5.3257539868354797e-02</internalNodes>\n          <leafValues>\n            -1.1842279881238937e-01 1.5403720736503601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2388 -3.2308440655469894e-02</internalNodes>\n          <leafValues>\n            -3.8174659013748169e-01 4.6444781124591827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2389 7.4837519787251949e-03</internalNodes>\n          <leafValues>\n            1.0087630152702332e-01 -1.7848369479179382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2390 1.4075540006160736e-02</internalNodes>\n          <leafValues>\n            -1.3612699508666992e-01 1.2589199841022491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2391 1.1945860460400581e-02</internalNodes>\n          <leafValues>\n            -4.6452131122350693e-02 3.1823348999023438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2392 4.9774140119552612e-02</internalNodes>\n          <leafValues>\n            3.7373390048742294e-02 -4.3919241428375244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2393 1.1070669861510396e-03</internalNodes>\n          <leafValues>\n            3.3163610845804214e-02 -1.8855419754981995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2394 -2.8594989329576492e-02</internalNodes>\n          <leafValues>\n            -3.6906918883323669e-01 4.1930228471755981e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2395 -7.6013091020286083e-03</internalNodes>\n          <leafValues>\n            5.2191480994224548e-02 -2.4689050018787384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2396 1.3114510476589203e-01</internalNodes>\n          <leafValues>\n            -5.7957381010055542e-02 2.7318599820137024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2397 -7.4186350502714049e-06</internalNodes>\n          <leafValues>\n            1.1802060157060623e-01 -1.0745350271463394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2398 3.1472120434045792e-02</internalNodes>\n          <leafValues>\n            -7.1733877062797546e-02 2.5617578625679016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2399 3.8700491189956665e-02</internalNodes>\n          <leafValues>\n            4.2863689363002777e-02 -6.0855817794799805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2400 -3.9322520606219769e-03</internalNodes>\n          <leafValues>\n            -2.2127309441566467e-01 6.5617948770523071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2401 2.3144779726862907e-02</internalNodes>\n          <leafValues>\n            -6.8200387060642242e-02 1.6107009351253510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2402 4.4043041765689850e-02</internalNodes>\n          <leafValues>\n            -5.4092731326818466e-02 2.7009010314941406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2403 1.6363389790058136e-02</internalNodes>\n          <leafValues>\n            -6.7165039479732513e-02 1.4292019605636597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2404 4.0575690567493439e-02</internalNodes>\n          <leafValues>\n            2.7095599099993706e-02 -5.1922810077667236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2405 -8.1591978669166565e-02</internalNodes>\n          <leafValues>\n            3.6290401220321655e-01 -5.0641149282455444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2406 9.6564572304487228e-03</internalNodes>\n          <leafValues>\n            -6.5868496894836426e-02 2.0459869503974915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2407 4.3875370174646378e-02</internalNodes>\n          <leafValues>\n            2.8287120163440704e-02 -4.7316759824752808e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2408 -5.3375590592622757e-02</internalNodes>\n          <leafValues>\n            -6.3912391662597656e-01 1.9213579595088959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2409 -4.2789369821548462e-02</internalNodes>\n          <leafValues>\n            3.7414470314979553e-01 -3.6020539700984955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2410 -1.4193350449204445e-02</internalNodes>\n          <leafValues>\n            -3.0562171339988708e-01 5.1724649965763092e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2411 -5.2947051823139191e-02</internalNodes>\n          <leafValues>\n            2.2203849256038666e-01 -2.7123190462589264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2412 3.0441719293594360e-01</internalNodes>\n          <leafValues>\n            2.8107000514864922e-02 -5.1486051082611084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2413 9.6917577087879181e-02</internalNodes>\n          <leafValues>\n            7.5603500008583069e-03 -5.4642218351364136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2414 4.5469900942407548e-04</internalNodes>\n          <leafValues>\n            -2.2257779538631439e-01 5.9663061052560806e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2415 6.4785419963300228e-03</internalNodes>\n          <leafValues>\n            7.0507273077964783e-02 -8.6525917053222656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2416 9.5442440360784531e-03</internalNodes>\n          <leafValues>\n            1.1858390271663666e-01 -1.2846529483795166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2417 1.0664040222764015e-02</internalNodes>\n          <leafValues>\n            6.0251180082559586e-02 -2.3454129695892334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2418 -5.9601400047540665e-02</internalNodes>\n          <leafValues>\n            -4.9083110690116882e-01 3.1179970130324364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2419 -1.4810609631240368e-02</internalNodes>\n          <leafValues>\n            1.7928470671176910e-01 -5.3788300603628159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2420 2.4988459423184395e-02</internalNodes>\n          <leafValues>\n            4.5585051178932190e-02 -3.1542968750000000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2421 3.7159871309995651e-02</internalNodes>\n          <leafValues>\n            -2.5552989915013313e-02 1.2824480235576630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2422 -3.6023799329996109e-02</internalNodes>\n          <leafValues>\n            3.0338558554649353e-01 -5.0723869353532791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2423 -4.0073681622743607e-02</internalNodes>\n          <leafValues>\n            -3.5327419638633728e-01 2.5542749091982841e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2424 1.0118799656629562e-01</internalNodes>\n          <leafValues>\n            1.4954050071537495e-02 -8.5275518894195557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2425 1.2551939487457275e-01</internalNodes>\n          <leafValues>\n            -5.5777598172426224e-02 3.5162329673767090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2426 -1.0094200260937214e-02</internalNodes>\n          <leafValues>\n            -7.9517722129821777e-01 1.6658289358019829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2427 2.7957880869507790e-02</internalNodes>\n          <leafValues>\n            3.0823230743408203e-02 -2.9073038697242737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2428 3.6360241472721100e-02</internalNodes>\n          <leafValues>\n            2.7960959821939468e-02 -4.7691631317138672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2429 -9.9100463092327118e-02</internalNodes>\n          <leafValues>\n            -3.0804800987243652e-01 4.2725458741188049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2430 -5.8572040870785713e-04</internalNodes>\n          <leafValues>\n            5.9227660298347473e-02 -2.3531119525432587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2431 -5.1202569156885147e-02</internalNodes>\n          <leafValues>\n            -5.2199620008468628e-01 1.4952239580452442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2432 -6.7564798519015312e-03</internalNodes>\n          <leafValues>\n            1.4085020124912262e-01 -9.0452179312705994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2433 -4.8959780484437943e-02</internalNodes>\n          <leafValues>\n            -6.6878128051757812e-01 2.0590359345078468e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2434 1.4971289783716202e-04</internalNodes>\n          <leafValues>\n            -1.8641050159931183e-01 6.5254852175712585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2435 -3.4409679472446442e-02</internalNodes>\n          <leafValues>\n            -6.5235960483551025e-01 1.4693650417029858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2436 6.4725689589977264e-02</internalNodes>\n          <leafValues>\n            1.2329719960689545e-02 -8.4077721834182739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2437 1.7888710135594010e-03</internalNodes>\n          <leafValues>\n            -3.3088308572769165e-01 2.3944050073623657e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2438 7.4999839067459106e-02</internalNodes>\n          <leafValues>\n            2.6347629725933075e-02 -4.4841340184211731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2439 -1.3695800304412842e-01</internalNodes>\n          <leafValues>\n            -5.7192331552505493e-01 1.2316530337557197e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2440 8.7679617106914520e-02</internalNodes>\n          <leafValues>\n            9.1852411627769470e-02 -1.4714670181274414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2441 -1.4691170305013657e-02</internalNodes>\n          <leafValues>\n            -2.7389299869537354e-01 5.5910948663949966e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2442 1.8059760332107544e-01</internalNodes>\n          <leafValues>\n            1.8475739285349846e-02 -6.2247991561889648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2443 -6.9349152036011219e-03</internalNodes>\n          <leafValues>\n            -1.6723890602588654e-01 4.2348120361566544e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2444 -4.5395728200674057e-02</internalNodes>\n          <leafValues>\n            5.6401878595352173e-01 -2.0763039588928223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2445 -3.7714779376983643e-02</internalNodes>\n          <leafValues>\n            -4.9726399779319763e-01 1.3457749970257282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2446 -6.6780918277800083e-03</internalNodes>\n          <leafValues>\n            1.5654189884662628e-01 -7.9254247248172760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2447 -3.5693418234586716e-02</internalNodes>\n          <leafValues>\n            3.2214561104774475e-01 -2.7933960780501366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2448 2.0231369417160749e-03</internalNodes>\n          <leafValues>\n            -2.0472900569438934e-01 6.0136921703815460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2449 7.7706989832222462e-03</internalNodes>\n          <leafValues>\n            -6.2275718897581100e-02 1.3619600236415863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2450 -2.3846060037612915e-02</internalNodes>\n          <leafValues>\n            -6.4280962944030762e-01 1.9216870889067650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2451 3.8112789392471313e-02</internalNodes>\n          <leafValues>\n            1.6926249489188194e-02 -3.2001879811286926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2452 -8.1509854644536972e-03</internalNodes>\n          <leafValues>\n            -1.8527400493621826e-01 6.7431643605232239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2453 3.0041670799255371e-01</internalNodes>\n          <leafValues>\n            -3.4997869282960892e-02 3.7719568610191345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2454 3.2188769546337426e-04</internalNodes>\n          <leafValues>\n            -4.3860068917274475e-01 3.1008180230855942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2455 9.9805131554603577e-02</internalNodes>\n          <leafValues>\n            2.1043010056018829e-02 -2.4182139337062836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2456 -1.3132029771804810e-01</internalNodes>\n          <leafValues>\n            -6.0744529962539673e-01 1.9127229228615761e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2457 -4.4457878917455673e-02</internalNodes>\n          <leafValues>\n            -2.8207719326019287e-01 1.6199590638279915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2458 -5.3282459266483784e-03</internalNodes>\n          <leafValues>\n            1.9118839502334595e-01 -6.4483523368835449e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2459 4.0367528796195984e-02</internalNodes>\n          <leafValues>\n            1.6362620517611504e-02 -5.5463272333145142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2460 -8.7769925594329834e-03</internalNodes>\n          <leafValues>\n            -3.8903188705444336e-01 3.1277969479560852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2461 -1.5031780116260052e-02</internalNodes>\n          <leafValues>\n            4.4966968894004822e-01 -1.8708650022745132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2462 -3.2085120677947998e-02</internalNodes>\n          <leafValues>\n            2.2872669994831085e-01 -5.2647799253463745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2463 1.7735429573804140e-03</internalNodes>\n          <leafValues>\n            1.0644569993019104e-01 -1.1970230191946030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2464 5.9195980429649353e-02</internalNodes>\n          <leafValues>\n            -6.4485557377338409e-02 1.8440729379653931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2465 1.1976130306720734e-02</internalNodes>\n          <leafValues>\n            -4.6655338257551193e-02 2.2750610113143921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2466 -7.3619361501187086e-04</internalNodes>\n          <leafValues>\n            6.4427956938743591e-02 -1.9669359922409058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2467 1.1274980008602142e-01</internalNodes>\n          <leafValues>\n            -3.2603729516267776e-02 2.6165801286697388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2468 -2.9639130458235741e-02</internalNodes>\n          <leafValues>\n            -2.4286089837551117e-01 5.2550770342350006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2469 -4.8972599208354950e-02</internalNodes>\n          <leafValues>\n            2.9013419151306152e-01 -3.9936609566211700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2470 -2.0732060074806213e-03</internalNodes>\n          <leafValues>\n            6.6728956997394562e-02 -1.8385919928550720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2471 1.8652489781379700e-01</internalNodes>\n          <leafValues>\n            2.5788070634007454e-02 -3.0477121472358704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2472 -6.4846210181713104e-02</internalNodes>\n          <leafValues>\n            5.8964151144027710e-01 -2.1531870588660240e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2473 5.9668030589818954e-02</internalNodes>\n          <leafValues>\n            9.0434495359659195e-03 -8.9928478002548218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2474 -2.2810790687799454e-02</internalNodes>\n          <leafValues>\n            -5.5689752101898193e-01 2.1036420017480850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2475 -4.3924558907747269e-02</internalNodes>\n          <leafValues>\n            -7.7569800615310669e-01 1.3244120404124260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2476 -8.1411283463239670e-03</internalNodes>\n          <leafValues>\n            -1.6145749390125275e-01 6.3869751989841461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2477 -1.7681140452623367e-02</internalNodes>\n          <leafValues>\n            -1.7088229954242706e-01 4.4323820620775223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2478 3.5615780949592590e-01</internalNodes>\n          <leafValues>\n            1.3911530375480652e-02 -8.2366949319839478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2479 8.9791387319564819e-02</internalNodes>\n          <leafValues>\n            -3.3068671822547913e-02 3.9501950144767761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2480 -5.1039960235357285e-02</internalNodes>\n          <leafValues>\n            -4.9687319993972778e-01 2.4911910295486450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2481 4.4502970576286316e-01</internalNodes>\n          <leafValues>\n            1.3085749931633472e-02 -7.1374338865280151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2482 -3.1571299768984318e-03</internalNodes>\n          <leafValues>\n            -2.3235230147838593e-01 4.5422729104757309e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2483 2.2295509278774261e-01</internalNodes>\n          <leafValues>\n            2.5272920727729797e-02 -4.5817920565605164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2484 8.1787049770355225e-02</internalNodes>\n          <leafValues>\n            -5.6966669857501984e-02 2.0633119344711304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2485 1.2290639802813530e-02</internalNodes>\n          <leafValues>\n            1.0433530062437057e-01 -1.4129990339279175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2486 3.2738980371505022e-03</internalNodes>\n          <leafValues>\n            -1.9929160177707672e-01 5.7900499552488327e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2487 3.1915940344333649e-03</internalNodes>\n          <leafValues>\n            -2.8649568557739258e-01 3.8445938378572464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2488 -6.9429136812686920e-02</internalNodes>\n          <leafValues>\n            3.9995300769805908e-01 -2.9228420928120613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2489 3.0896291136741638e-01</internalNodes>\n          <leafValues>\n            4.5684990473091602e-03 -9.7593581676483154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2490 6.0547169297933578e-02</internalNodes>\n          <leafValues>\n            -1.7227350175380707e-01 7.3367759585380554e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2491 8.0296747386455536e-02</internalNodes>\n          <leafValues>\n            1.2790890410542488e-02 -2.9636448621749878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2492 9.8309047520160675e-02</internalNodes>\n          <leafValues>\n            1.7421530559659004e-02 -7.3428112268447876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2493 -6.0651078820228577e-02</internalNodes>\n          <leafValues>\n            -8.9268088340759277e-01 9.2950398102402687e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2494 -1.1067830026149750e-02</internalNodes>\n          <leafValues>\n            3.6940470337867737e-01 -3.2281860709190369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2495 -1.7252689227461815e-02</internalNodes>\n          <leafValues>\n            2.0163689553737640e-01 -3.0649609863758087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2496 1.1417149752378464e-01</internalNodes>\n          <leafValues>\n            -7.2567440569400787e-02 1.4580799639225006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2497 -1.1878489749506116e-04</internalNodes>\n          <leafValues>\n            6.6703669726848602e-02 -1.2044110149145126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2498 4.2538821697235107e-02</internalNodes>\n          <leafValues>\n            1.4235669374465942e-01 -9.3128196895122528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2499 4.6220790594816208e-02</internalNodes>\n          <leafValues>\n            -4.5348118990659714e-02 2.6667690277099609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2500 -1.2598860263824463e-01</internalNodes>\n          <leafValues>\n            -6.2195998430252075e-01 1.9361790269613266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2501 1.4336410164833069e-01</internalNodes>\n          <leafValues>\n            1.5602460131049156e-02 -3.4269729256629944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2502 1.4853400178253651e-02</internalNodes>\n          <leafValues>\n            -1.9399890303611755e-01 5.9365049004554749e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2503 2.9607299715280533e-02</internalNodes>\n          <leafValues>\n            2.9370859265327454e-02 -1.1840560287237167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2504 4.5151200145483017e-02</internalNodes>\n          <leafValues>\n            -3.1025370582938194e-02 4.2335650324821472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2505 1.7347050830721855e-02</internalNodes>\n          <leafValues>\n            5.2468661218881607e-02 -1.7071889340877533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2506 4.8696789890527725e-02</internalNodes>\n          <leafValues>\n            1.3757590204477310e-02 -7.3853892087936401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2507 -2.5120940059423447e-02</internalNodes>\n          <leafValues>\n            -2.6077219843864441e-01 3.6249000579118729e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2508 -1.4412039890885353e-02</internalNodes>\n          <leafValues>\n            1.8435400724411011e-01 -5.5376049131155014e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2509 1.6011130064725876e-02</internalNodes>\n          <leafValues>\n            -3.3822190016508102e-02 9.8490990698337555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2510 -6.3778877258300781e-02</internalNodes>\n          <leafValues>\n            3.9596658945083618e-01 -2.6605289429426193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2511 -1.2431790120899677e-02</internalNodes>\n          <leafValues>\n            -2.7103281021118164e-01 5.1153909415006638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2512 1.5430289506912231e-01</internalNodes>\n          <leafValues>\n            -2.9742069542407990e-02 3.6223879456520081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2513 6.8953618407249451e-02</internalNodes>\n          <leafValues>\n            1.4560540206730366e-02 -7.1308761835098267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2514 2.6809390634298325e-02</internalNodes>\n          <leafValues>\n            3.0903020873665810e-02 -3.1453761458396912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2515 -5.4339639842510223e-02</internalNodes>\n          <leafValues>\n            -5.7081592082977295e-01 6.3606691546738148e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2516 -7.4291341006755829e-03</internalNodes>\n          <leafValues>\n            -2.1167820692062378e-01 5.4728411138057709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2517 1.5004719607532024e-02</internalNodes>\n          <leafValues>\n            -1.3576979935169220e-01 3.6672618240118027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2518 2.3438859730958939e-02</internalNodes>\n          <leafValues>\n            -6.2095177173614502e-01 1.7451370134949684e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2519 2.1869429945945740e-01</internalNodes>\n          <leafValues>\n            -2.5175819173455238e-02 2.4256730079650879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2520 7.2554901242256165e-02</internalNodes>\n          <leafValues>\n            3.0378310009837151e-02 -3.5316839814186096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2521 -6.0775190591812134e-02</internalNodes>\n          <leafValues>\n            6.1231142282485962e-01 -2.9397750273346901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2522 1.0405359789729118e-02</internalNodes>\n          <leafValues>\n            -4.8925351351499557e-02 2.0042200386524200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2523 -4.4559161178767681e-03</internalNodes>\n          <leafValues>\n            -1.8175999820232391e-01 5.1460109651088715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2524 5.3141661919653416e-03</internalNodes>\n          <leafValues>\n            1.0836429893970490e-01 -1.1464370042085648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2525 2.8129909187555313e-02</internalNodes>\n          <leafValues>\n            4.8452459275722504e-02 -1.0588149726390839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2526 -1.0029030032455921e-02</internalNodes>\n          <leafValues>\n            -2.8854200243949890e-01 4.6509381383657455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2527 4.1623760014772415e-02</internalNodes>\n          <leafValues>\n            -5.2424181252717972e-02 2.4638059735298157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2528 1.7407029867172241e-02</internalNodes>\n          <leafValues>\n            -5.9511799365282059e-02 2.2489009797573090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2529 -9.1012917459011078e-02</internalNodes>\n          <leafValues>\n            3.8434851169586182e-01 -2.6776079088449478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2530 -5.5964559316635132e-02</internalNodes>\n          <leafValues>\n            3.3512559533119202e-01 -3.7086669355630875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2531 -2.3191609978675842e-01</internalNodes>\n          <leafValues>\n            -7.9937142133712769e-01 1.6157710924744606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2532 1.5095779672265053e-02</internalNodes>\n          <leafValues>\n            1.9562739878892899e-02 -4.7588780522346497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2533 -6.3537202775478363e-02</internalNodes>\n          <leafValues>\n            5.5103862285614014e-01 -9.9191991612315178e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2534 5.0780471414327621e-02</internalNodes>\n          <leafValues>\n            -5.0766121596097946e-02 1.9856730103492737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2535 3.3435709774494171e-02</internalNodes>\n          <leafValues>\n            1.7100030556321144e-02 -3.9106050133705139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2536 2.7236310765147209e-02</internalNodes>\n          <leafValues>\n            1.9491130486130714e-02 -4.9955821037292480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2537 3.6144461482763290e-02</internalNodes>\n          <leafValues>\n            1.9712809473276138e-02 -4.7714808583259583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2538 -3.7110898643732071e-02</internalNodes>\n          <leafValues>\n            -7.1080970764160156e-01 1.3297240249812603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2539 -1.6986919799819589e-03</internalNodes>\n          <leafValues>\n            -1.1454039812088013e-01 5.3833190351724625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2540 7.0956937270238996e-04</internalNodes>\n          <leafValues>\n            -1.1852429807186127e-01 8.6146153509616852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2541 -3.9854459464550018e-02</internalNodes>\n          <leafValues>\n            -2.1784169971942902e-01 7.9314615577459335e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2542 -2.6265300810337067e-02</internalNodes>\n          <leafValues>\n            5.1828277111053467e-01 -1.9502539187669754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2543 1.5767179429531097e-03</internalNodes>\n          <leafValues>\n            -9.0025149285793304e-02 4.3614149093627930e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2544 8.4500849246978760e-02</internalNodes>\n          <leafValues>\n            1.9108800217509270e-02 -5.8049428462982178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2545 5.8061029762029648e-02</internalNodes>\n          <leafValues>\n            5.1128780469298363e-03 -3.6629718542098999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2546 -8.6446420755237341e-04</internalNodes>\n          <leafValues>\n            9.8551221191883087e-02 -9.9286876618862152e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2547 -1.6358779743313789e-02</internalNodes>\n          <leafValues>\n            -2.2353939712047577e-01 4.5100010931491852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2548 1.2069500051438808e-02</internalNodes>\n          <leafValues>\n            -3.0885580927133560e-02 3.5933670401573181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2549 6.4932592213153839e-02</internalNodes>\n          <leafValues>\n            8.9946594089269638e-03 -6.5505272150039673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2550 -1.6384720802307129e-02</internalNodes>\n          <leafValues>\n            1.8374380469322205e-01 -5.8319728821516037e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2551 3.6467831581830978e-02</internalNodes>\n          <leafValues>\n            3.3053800463676453e-02 -3.1176608800888062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2552 -4.8026088625192642e-03</internalNodes>\n          <leafValues>\n            -1.3096930086612701e-01 8.8815420866012573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2553 -9.7134411334991455e-03</internalNodes>\n          <leafValues>\n            1.2485890090465546e-01 -4.5851919800043106e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2554 -3.6871319753117859e-04</internalNodes>\n          <leafValues>\n            1.0798580199480057e-01 -1.0795330256223679e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>248</maxWeakCount>\n      <stageThreshold>-1.3472950458526611e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2555 4.8573319800198078e-03</internalNodes>\n          <leafValues>\n            -2.2165919840335846e-01 2.0661990344524384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2556 -9.0601091505959630e-04</internalNodes>\n          <leafValues>\n            9.2684216797351837e-02 -3.4692689776420593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2557 3.8109601009637117e-03</internalNodes>\n          <leafValues>\n            -4.7693979740142822e-01 7.2208866477012634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2558 -1.9349349895492196e-03</internalNodes>\n          <leafValues>\n            -2.3474289476871490e-01 1.0308369994163513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2559 4.6932199038565159e-03</internalNodes>\n          <leafValues>\n            -2.1755599975585938e-01 1.0297770053148270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2560 -4.5681721530854702e-03</internalNodes>\n          <leafValues>\n            -3.2979539036750793e-01 6.2108699232339859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2561 2.0976159721612930e-03</internalNodes>\n          <leafValues>\n            -2.7585551142692566e-01 7.4447788298130035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2562 -2.3434460163116455e-02</internalNodes>\n          <leafValues>\n            -2.4517090618610382e-01 2.0888300612568855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2563 -7.5489659793674946e-03</internalNodes>\n          <leafValues>\n            -2.3539499938488007e-01 8.0594792962074280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2564 -1.3637889642268419e-03</internalNodes>\n          <leafValues>\n            1.2462289631366730e-01 -1.4383980631828308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2565 2.0881770178675652e-02</internalNodes>\n          <leafValues>\n            -2.5486978888511658e-01 7.0480130612850189e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2566 -1.6712560318410397e-03</internalNodes>\n          <leafValues>\n            -1.4747080206871033e-01 9.3597747385501862e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2567 -5.8552708476781845e-02</internalNodes>\n          <leafValues>\n            3.7929660081863403e-01 -3.7892241030931473e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2568 -4.7591641545295715e-02</internalNodes>\n          <leafValues>\n            3.4769389033317566e-01 -2.9484409838914871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2569 5.7788072153925896e-03</internalNodes>\n          <leafValues>\n            4.1627179831266403e-02 -3.8012310862541199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2570 6.1923051252961159e-03</internalNodes>\n          <leafValues>\n            -7.9854242503643036e-02 1.4662300050258636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2571 8.6211357265710831e-03</internalNodes>\n          <leafValues>\n            -7.9052597284317017e-02 1.9707180559635162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2572 3.8787689805030823e-01</internalNodes>\n          <leafValues>\n            9.9500510841608047e-03 -5.4955279827117920e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2573 1.2184830009937286e-01</internalNodes>\n          <leafValues>\n            2.1560879424214363e-02 -7.1182191371917725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2574 5.6779510341584682e-03</internalNodes>\n          <leafValues>\n            5.0778731703758240e-02 -1.9817540049552917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2575 -3.2407268881797791e-02</internalNodes>\n          <leafValues>\n            -6.5776360034942627e-01 1.8930230289697647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2576 2.3834649473428726e-03</internalNodes>\n          <leafValues>\n            3.5910621285438538e-02 -1.9386079907417297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2577 4.4861159403808415e-04</internalNodes>\n          <leafValues>\n            6.3049189746379852e-02 -2.3067280650138855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2578 2.8381360694766045e-02</internalNodes>\n          <leafValues>\n            1.3798769563436508e-02 -2.0287990570068359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2579 -2.7084869798272848e-03</internalNodes>\n          <leafValues>\n            -1.6455270349979401e-01 8.1182733178138733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2580 -1.3218579813838005e-02</internalNodes>\n          <leafValues>\n            1.2929069995880127e-01 -4.9410581588745117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2581 1.8623949727043509e-03</internalNodes>\n          <leafValues>\n            -2.7398198843002319e-01 4.5746099203824997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2582 -6.6727721132338047e-03</internalNodes>\n          <leafValues>\n            -1.5167540311813354e-01 5.5587619543075562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2583 1.9492399878799915e-03</internalNodes>\n          <leafValues>\n            -8.5547126829624176e-02 1.3712610304355621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2584 -7.0978812873363495e-02</internalNodes>\n          <leafValues>\n            -7.7429318428039551e-01 5.5506629869341850e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2585 5.7003321126103401e-03</internalNodes>\n          <leafValues>\n            6.0299661010503769e-02 -2.3000110685825348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2586 6.6310778260231018e-02</internalNodes>\n          <leafValues>\n            -8.5690699517726898e-02 1.5169920027256012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2587 -8.5291899740695953e-03</internalNodes>\n          <leafValues>\n            1.4297589659690857e-01 -9.1805547475814819e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2588 5.1141469739377499e-03</internalNodes>\n          <leafValues>\n            4.6917989850044250e-02 -1.3319849967956543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2589 1.9523530500009656e-03</internalNodes>\n          <leafValues>\n            -1.4177489280700684e-01 1.0524170100688934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2590 1.9558310508728027e-01</internalNodes>\n          <leafValues>\n            1.4478860422968864e-02 -7.9985427856445312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2591 5.3029200062155724e-03</internalNodes>\n          <leafValues>\n            3.7237700074911118e-02 -2.6131349802017212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2592 6.4814360812306404e-03</internalNodes>\n          <leafValues>\n            -4.9092698842287064e-02 2.5681778788566589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2593 -6.1802868731319904e-03</internalNodes>\n          <leafValues>\n            -2.1317920088768005e-01 6.1390031129121780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2594 1.9895739387720823e-03</internalNodes>\n          <leafValues>\n            -7.1335382759571075e-02 1.3002429902553558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2595 -4.2928531183861196e-04</internalNodes>\n          <leafValues>\n            7.2383478283882141e-02 -1.5643799304962158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2596 -4.5690318802371621e-04</internalNodes>\n          <leafValues>\n            7.5732357800006866e-02 -1.0932859778404236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2597 -1.3333739340305328e-01</internalNodes>\n          <leafValues>\n            -5.4889208078384399e-01 1.9494550302624702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2598 8.2705507520586252e-04</internalNodes>\n          <leafValues>\n            -1.8739989399909973e-01 5.7498261332511902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2599 -1.6954699531197548e-03</internalNodes>\n          <leafValues>\n            -1.4100700616836548e-01 8.6548388004302979e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2600 9.8944529891014099e-03</internalNodes>\n          <leafValues>\n            1.7898159101605415e-02 -3.1395688652992249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2601 6.0766572132706642e-03</internalNodes>\n          <leafValues>\n            -1.3120110332965851e-01 9.1578528285026550e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2602 -3.5680279135704041e-02</internalNodes>\n          <leafValues>\n            -3.8880988955497742e-01 1.1377809569239616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2603 8.7540567619726062e-04</internalNodes>\n          <leafValues>\n            5.3022928535938263e-02 -2.1509949862957001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2604 1.9438719609752297e-03</internalNodes>\n          <leafValues>\n            -8.1035703420639038e-02 1.3382309675216675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2605 5.6398138403892517e-02</internalNodes>\n          <leafValues>\n            1.4857930131256580e-02 -6.9551151990890503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2606 -1.0274930391460657e-03</internalNodes>\n          <leafValues>\n            -1.9196349382400513e-01 4.7596029937267303e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2607 -3.3568819053471088e-03</internalNodes>\n          <leafValues>\n            1.0466050356626511e-01 -1.0170979797840118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2608 1.1734040081501007e-01</internalNodes>\n          <leafValues>\n            -4.6565439552068710e-02 2.0878739655017853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2609 8.8005866855382919e-03</internalNodes>\n          <leafValues>\n            9.1754652559757233e-02 -1.2221500277519226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2610 2.4095149710774422e-03</internalNodes>\n          <leafValues>\n            -3.6752160638570786e-02 2.3443439602851868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2611 -2.8434590785764158e-04</internalNodes>\n          <leafValues>\n            -1.9996729493141174e-01 4.7353159636259079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2612 1.7623709514737129e-02</internalNodes>\n          <leafValues>\n            -2.2765519097447395e-02 2.5646668672561646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2613 1.4121740125119686e-02</internalNodes>\n          <leafValues>\n            2.2659989073872566e-02 -4.2449080944061279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2614 -1.5290649607777596e-02</internalNodes>\n          <leafValues>\n            2.4445760250091553e-01 -4.3145630508661270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2615 -2.5426879525184631e-02</internalNodes>\n          <leafValues>\n            4.1280931234359741e-01 -2.5002820417284966e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2616 8.7438793852925301e-03</internalNodes>\n          <leafValues>\n            4.1931539773941040e-02 -1.2433040142059326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2617 4.1642960160970688e-02</internalNodes>\n          <leafValues>\n            2.1535869687795639e-02 -4.9062231183052063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2618 7.0692330598831177e-02</internalNodes>\n          <leafValues>\n            -2.4307090789079666e-02 3.3606329560279846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2619 -7.7690348029136658e-02</internalNodes>\n          <leafValues>\n            -7.3883998394012451e-01 1.3576829805970192e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2620 3.7781539140269160e-04</internalNodes>\n          <leafValues>\n            -9.6697732806205750e-02 9.4690509140491486e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2621 -1.1192850070074201e-03</internalNodes>\n          <leafValues>\n            -2.1631820499897003e-01 4.4235199689865112e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2622 5.9772249311208725e-02</internalNodes>\n          <leafValues>\n            -3.2024260610342026e-02 3.0602660775184631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2623 -1.5417120419442654e-02</internalNodes>\n          <leafValues>\n            -3.4087839722633362e-01 2.8097979724407196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2624 -6.3111339695751667e-03</internalNodes>\n          <leafValues>\n            1.5327680110931396e-01 -4.7901459038257599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2625 -1.8826499581336975e-02</internalNodes>\n          <leafValues>\n            -1.5269599854946136e-01 6.0955628752708435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2626 -3.9223838597536087e-02</internalNodes>\n          <leafValues>\n            2.6624131202697754e-01 -7.6400930993258953e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2627 -4.8653159290552139e-02</internalNodes>\n          <leafValues>\n            -4.5488500595092773e-01 1.9853049889206886e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2628 6.7260518670082092e-02</internalNodes>\n          <leafValues>\n            1.0999150108546019e-03 -7.5273478031158447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2629 1.2728190049529076e-03</internalNodes>\n          <leafValues>\n            -7.8121297061443329e-02 1.1816550046205521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2630 -9.4147026538848877e-02</internalNodes>\n          <leafValues>\n            -5.2153587341308594e-01 1.4973170123994350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2631 -4.7454461455345154e-02</internalNodes>\n          <leafValues>\n            2.6547148823738098e-01 -3.0587410554289818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2632 -5.6014367146417499e-04</internalNodes>\n          <leafValues>\n            -1.0506449639797211e-01 6.0161281377077103e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2633 -2.9601220740005374e-04</internalNodes>\n          <leafValues>\n            6.2257450073957443e-02 -1.3126540184020996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2634 -2.0918490365147591e-02</internalNodes>\n          <leafValues>\n            -2.0831510424613953e-01 2.6843119412660599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2635 -7.2696260176599026e-03</internalNodes>\n          <leafValues>\n            -1.6227640211582184e-01 6.1937049031257629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2636 7.2555372025817633e-04</internalNodes>\n          <leafValues>\n            -1.0315939784049988e-01 6.8040877580642700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2637 2.0828839391469955e-02</internalNodes>\n          <leafValues>\n            -4.4557690620422363e-02 2.2167469561100006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2638 8.7201192975044250e-02</internalNodes>\n          <leafValues>\n            9.5432223752140999e-03 -5.8706420660018921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2639 4.1596628725528717e-02</internalNodes>\n          <leafValues>\n            -3.0774539336562157e-02 2.8809019923210144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2640 -2.6154879480600357e-02</internalNodes>\n          <leafValues>\n            -5.9353542327880859e-01 1.4388410374522209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2641 2.7175429463386536e-01</internalNodes>\n          <leafValues>\n            1.3717720285058022e-02 -5.4619067907333374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2642 2.1811699494719505e-02</internalNodes>\n          <leafValues>\n            -1.6798110678792000e-02 2.9062330722808838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2643 -1.9965929910540581e-02</internalNodes>\n          <leafValues>\n            -4.3052119016647339e-01 1.8917759880423546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2644 -1.1561929713934660e-03</internalNodes>\n          <leafValues>\n            8.8031537830829620e-02 -1.9590209424495697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2645 -1.6627550357952714e-03</internalNodes>\n          <leafValues>\n            8.9111559092998505e-02 -9.0959653258323669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2646 -1.7325150547549129e-03</internalNodes>\n          <leafValues>\n            -1.1540830135345459e-01 5.3636670112609863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2647 -3.9231408387422562e-02</internalNodes>\n          <leafValues>\n            6.2471270561218262e-01 -1.3666920363903046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2648 1.0423580184578896e-02</internalNodes>\n          <leafValues>\n            2.4711130186915398e-02 -1.6751749813556671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2649 2.2725639864802361e-03</internalNodes>\n          <leafValues>\n            -5.5126778781414032e-02 1.4781460165977478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2650 -3.9644641801714897e-03</internalNodes>\n          <leafValues>\n            1.1337990313768387e-01 -6.8672053515911102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2651 4.0544760413467884e-03</internalNodes>\n          <leafValues>\n            4.0180210024118423e-02 -2.3837350308895111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2652 2.0538640674203634e-03</internalNodes>\n          <leafValues>\n            3.2863691449165344e-02 -1.2495829910039902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2653 2.9705381020903587e-03</internalNodes>\n          <leafValues>\n            4.1810061782598495e-02 -2.0539659261703491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2654 -8.3381328731775284e-03</internalNodes>\n          <leafValues>\n            9.2258736491203308e-02 -3.8435179740190506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2655 1.5640279743820429e-03</internalNodes>\n          <leafValues>\n            -9.6661567687988281e-02 8.5594817996025085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2656 -3.7052970379590988e-02</internalNodes>\n          <leafValues>\n            -7.7915471792221069e-01 1.0418290272355080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2657 -1.0109930299222469e-02</internalNodes>\n          <leafValues>\n            1.2499059736728668e-01 -6.4437836408615112e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2658 -7.9335980117321014e-02</internalNodes>\n          <leafValues>\n            7.0784372091293335e-01 -3.1601081136614084e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2659 -2.5811919476836920e-03</internalNodes>\n          <leafValues>\n            -1.6802759468555450e-01 6.7257612943649292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2660 1.8863540142774582e-02</internalNodes>\n          <leafValues>\n            -5.2749298512935638e-02 1.4578150212764740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2661 6.1697891214862466e-04</internalNodes>\n          <leafValues>\n            -9.6527166664600372e-02 9.3077242374420166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2662 -9.9242655560374260e-03</internalNodes>\n          <leafValues>\n            1.2164440006017685e-01 -2.6439830660820007e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2663 -4.7382008284330368e-02</internalNodes>\n          <leafValues>\n            -3.7194240093231201e-01 2.4884449318051338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2664 3.8585590664297342e-03</internalNodes>\n          <leafValues>\n            -4.2420830577611923e-02 1.1997900158166885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2665 2.3721279576420784e-03</internalNodes>\n          <leafValues>\n            -7.2769053280353546e-02 1.3027629256248474e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2666 -3.1968571245670319e-02</internalNodes>\n          <leafValues>\n            -4.7088149189949036e-01 1.8863039091229439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2667 -7.2849751450121403e-04</internalNodes>\n          <leafValues>\n            2.8128319978713989e-01 -3.0785139650106430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2668 -1.2096880003809929e-02</internalNodes>\n          <leafValues>\n            -7.0163071155548096e-01 1.3336709700524807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2669 -1.7658369615674019e-02</internalNodes>\n          <leafValues>\n            1.9193160533905029e-01 -4.7951001673936844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2670 -1.0974059812724590e-02</internalNodes>\n          <leafValues>\n            -2.7307328581809998e-01 2.8784489259123802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2671 -1.8560180440545082e-02</internalNodes>\n          <leafValues>\n            -4.4306761026382446e-01 2.0472019910812378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2672 1.3861100189387798e-02</internalNodes>\n          <leafValues>\n            -3.7471339106559753e-02 1.0929849743843079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2673 5.6243170052766800e-02</internalNodes>\n          <leafValues>\n            1.3322129845619202e-02 -6.1972159147262573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2674 -1.3746799901127815e-02</internalNodes>\n          <leafValues>\n            1.8980909883975983e-01 -4.3810151517391205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2675 -2.0494889758992940e-04</internalNodes>\n          <leafValues>\n            -1.4809520542621613e-01 5.9458550065755844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2676 1.1416030116379261e-02</internalNodes>\n          <leafValues>\n            4.5111801475286484e-02 -1.7277219891548157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2677 4.1169788688421249e-02</internalNodes>\n          <leafValues>\n            -2.3442840203642845e-02 3.3413231372833252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2678 -9.6223354339599609e-03</internalNodes>\n          <leafValues>\n            -1.6086310148239136e-01 3.3183149993419647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2679 1.5951909590512514e-03</internalNodes>\n          <leafValues>\n            -6.3590511679649353e-02 1.3396669924259186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2680 -6.3169049099087715e-03</internalNodes>\n          <leafValues>\n            -1.6365319490432739e-01 5.1552049815654755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2681 4.6467378735542297e-02</internalNodes>\n          <leafValues>\n            -2.5627709925174713e-02 3.8097569346427917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2682 9.1598592698574066e-02</internalNodes>\n          <leafValues>\n            4.2748241685330868e-03 -5.9740132093429565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2683 -1.0416290024295449e-03</internalNodes>\n          <leafValues>\n            -1.4733889698982239e-01 5.5105950683355331e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2684 -2.3334469646215439e-02</internalNodes>\n          <leafValues>\n            9.2266462743282318e-02 -5.3653880953788757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2685 -6.3067381270229816e-03</internalNodes>\n          <leafValues>\n            -1.6974699497222900e-01 6.0046479105949402e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2686 5.2549671381711960e-03</internalNodes>\n          <leafValues>\n            -8.8989406824111938e-02 4.7306548804044724e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2687 -1.0699460282921791e-02</internalNodes>\n          <leafValues>\n            -1.5823520720005035e-01 5.1100831478834152e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2688 -5.4387808777391911e-03</internalNodes>\n          <leafValues>\n            1.2524560093879700e-01 -3.9472699165344238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2689 3.4613600000739098e-03</internalNodes>\n          <leafValues>\n            -6.8892680108547211e-02 1.7920389771461487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2690 -1.7894359305500984e-02</internalNodes>\n          <leafValues>\n            -9.4599656760692596e-02 6.2322728335857391e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2691 -2.1147909760475159e-01</internalNodes>\n          <leafValues>\n            -8.6275768280029297e-01 9.4653964042663574e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2692 1.4149859780445695e-03</internalNodes>\n          <leafValues>\n            -8.6214788258075714e-02 4.0635921061038971e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2693 -1.5357299707829952e-03</internalNodes>\n          <leafValues>\n            9.9525436758995056e-02 -7.7558159828186035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2694 2.8714749496430159e-03</internalNodes>\n          <leafValues>\n            -6.3778772950172424e-02 1.1251030117273331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2695 1.8400069326162338e-02</internalNodes>\n          <leafValues>\n            2.3700669407844543e-02 -3.5953688621520996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2696 -7.3078006505966187e-02</internalNodes>\n          <leafValues>\n            -8.3836638927459717e-01 2.1687510889023542e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2697 9.8323542624711990e-03</internalNodes>\n          <leafValues>\n            -5.3899969905614853e-02 1.6186970472335815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2698 2.2987959906458855e-02</internalNodes>\n          <leafValues>\n            1.5955159440636635e-02 -3.3074310421943665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2699 -5.4363980889320374e-03</internalNodes>\n          <leafValues>\n            -1.3372650742530823e-01 5.8162450790405273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2700 1.0177739895880222e-02</internalNodes>\n          <leafValues>\n            -5.7901948690414429e-02 4.0789060294628143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2701 -5.1690369844436646e-02</internalNodes>\n          <leafValues>\n            4.7881290316581726e-01 -2.0051179453730583e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2702 -4.6395331621170044e-02</internalNodes>\n          <leafValues>\n            3.5422900319099426e-01 -1.6692889854311943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2703 4.0920148603618145e-04</internalNodes>\n          <leafValues>\n            -5.8872789144515991e-02 1.3617689907550812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2704 3.0743801034986973e-03</internalNodes>\n          <leafValues>\n            3.1892731785774231e-02 -2.9396781325340271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2705 1.3438959419727325e-01</internalNodes>\n          <leafValues>\n            1.5018840320408344e-02 -5.1557308435440063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2706 -4.4954590499401093e-02</internalNodes>\n          <leafValues>\n            -6.5404319763183594e-01 5.8901738375425339e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2707 -4.1479051113128662e-02</internalNodes>\n          <leafValues>\n            -5.6925541162490845e-01 1.3012220151722431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2708 2.9117099940776825e-02</internalNodes>\n          <leafValues>\n            -1.9148029386997223e-02 1.8318380415439606e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2709 5.1073249429464340e-02</internalNodes>\n          <leafValues>\n            1.5260309912264347e-02 -4.9480628967285156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2710 7.0886377943679690e-04</internalNodes>\n          <leafValues>\n            8.7698653340339661e-02 -7.3333673179149628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2711 1.1835389770567417e-02</internalNodes>\n          <leafValues>\n            -3.9189878851175308e-02 2.0834849774837494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2712 -4.2260489426553249e-03</internalNodes>\n          <leafValues>\n            -1.8733769655227661e-01 7.4666850268840790e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2713 3.4847799688577652e-02</internalNodes>\n          <leafValues>\n            -3.0572960153222084e-02 2.6511108875274658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2714 1.2932980433106422e-02</internalNodes>\n          <leafValues>\n            2.2224349901080132e-02 -2.3204100131988525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2715 -3.4806900657713413e-03</internalNodes>\n          <leafValues>\n            6.0548238456249237e-02 -1.3034850358963013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2716 1.7225079238414764e-02</internalNodes>\n          <leafValues>\n            -6.7219920456409454e-03 1.1128149926662445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2717 -2.4316289927810431e-03</internalNodes>\n          <leafValues>\n            -1.8720659613609314e-01 4.1284140199422836e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2718 -1.1786689981818199e-02</internalNodes>\n          <leafValues>\n            1.5917420387268066e-01 -3.0763400718569756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2719 -5.3132520988583565e-03</internalNodes>\n          <leafValues>\n            -1.3786070048809052e-01 5.4246630519628525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2720 -2.0012039691209793e-02</internalNodes>\n          <leafValues>\n            2.9359638690948486e-01 -2.6866350322961807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2721 2.0955558866262436e-03</internalNodes>\n          <leafValues>\n            6.7963063716888428e-02 -1.2520860135555267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2722 -3.9648640900850296e-02</internalNodes>\n          <leafValues>\n            -5.8195388317108154e-01 1.3146690092980862e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2723 -3.4485850483179092e-02</internalNodes>\n          <leafValues>\n            4.5559158921241760e-01 -1.8659429624676704e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2724 -4.4569540768861771e-02</internalNodes>\n          <leafValues>\n            -9.2067569494247437e-01 5.3931041620671749e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2725 -1.1394550092518330e-03</internalNodes>\n          <leafValues>\n            -2.1932439506053925e-01 3.6249380558729172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2726 -3.7044081836938858e-02</internalNodes>\n          <leafValues>\n            1.6192549467086792e-01 -4.7661919146776199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2727 1.9300490617752075e-02</internalNodes>\n          <leafValues>\n            -5.4432831704616547e-02 1.4432109892368317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2728 -1.4382150257006288e-03</internalNodes>\n          <leafValues>\n            -6.7343980073928833e-02 4.2511381208896637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2729 3.8761008530855179e-02</internalNodes>\n          <leafValues>\n            1.4171930029988289e-02 -5.3382647037506104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2730 -1.5265800058841705e-01</internalNodes>\n          <leafValues>\n            -9.1533327102661133e-01 2.1413750946521759e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2731 -8.4089813753962517e-03</internalNodes>\n          <leafValues>\n            1.7705249786376953e-01 -4.3753430247306824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2732 -1.6673170030117035e-01</internalNodes>\n          <leafValues>\n            -5.6390452384948730e-01 7.5904577970504761e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2733 -7.3619261384010315e-03</internalNodes>\n          <leafValues>\n            -1.9691839814186096e-01 3.9698500186204910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2734 -9.9920090287923813e-03</internalNodes>\n          <leafValues>\n            -1.3419510424137115e-01 6.3489198684692383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2735 -2.2656610235571861e-03</internalNodes>\n          <leafValues>\n            7.9676061868667603e-02 -1.0685960203409195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2736 -1.3868820667266846e-01</internalNodes>\n          <leafValues>\n            -4.7306931018829346e-01 1.5354130417108536e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2737 -1.3284240663051605e-01</internalNodes>\n          <leafValues>\n            -8.7984371185302734e-01 7.0595988072454929e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2738 -2.4882299825549126e-02</internalNodes>\n          <leafValues>\n            1.3333520293235779e-01 -4.0933601558208466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2739 -6.6814320161938667e-03</internalNodes>\n          <leafValues>\n            -1.0295540094375610e-01 7.4870042502880096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2740 6.0326699167490005e-02</internalNodes>\n          <leafValues>\n            1.3355839997529984e-02 -3.7602999806404114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2741 -8.5582301020622253e-02</internalNodes>\n          <leafValues>\n            2.1200770139694214e-01 -3.8742028176784515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2742 -1.2076400220394135e-02</internalNodes>\n          <leafValues>\n            -8.2457520067691803e-02 6.7780442535877228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2743 2.0311089232563972e-02</internalNodes>\n          <leafValues>\n            -1.1817990243434906e-01 6.4830578863620758e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2744 -3.9900741539895535e-03</internalNodes>\n          <leafValues>\n            -1.5723599493503571e-01 5.3033929318189621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2745 -1.4961370034143329e-03</internalNodes>\n          <leafValues>\n            2.4392129480838776e-01 -3.1170839443802834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2746 1.8568099767435342e-04</internalNodes>\n          <leafValues>\n            -1.9409550726413727e-01 4.5490209013223648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2747 1.4796480536460876e-01</internalNodes>\n          <leafValues>\n            6.2650348991155624e-03 -9.9987298250198364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2748 1.6918669641017914e-01</internalNodes>\n          <leafValues>\n            4.2962608858942986e-04 -3.5496100783348083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2749 -1.9380000594537705e-04</internalNodes>\n          <leafValues>\n            -1.3056799769401550e-01 5.4877169430255890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2750 -6.2729098135605454e-04</internalNodes>\n          <leafValues>\n            4.1053570806980133e-02 -8.3174988627433777e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2751 -2.6877908967435360e-03</internalNodes>\n          <leafValues>\n            1.5513989329338074e-01 -5.5573899298906326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2752 -7.6885253190994263e-02</internalNodes>\n          <leafValues>\n            -6.1440211534500122e-01 3.2789220567792654e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2753 -1.6956549370661378e-04</internalNodes>\n          <leafValues>\n            6.0934148728847504e-02 -1.4717090129852295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2754 3.7390850484371185e-02</internalNodes>\n          <leafValues>\n            8.8595114648342133e-03 -2.3843410611152649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2755 -3.7611280567944050e-03</internalNodes>\n          <leafValues>\n            -1.1896059662103653e-01 5.4526679217815399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2756 -7.5538672506809235e-02</internalNodes>\n          <leafValues>\n            1. -2.8170819859951735e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2757 5.1163119496777654e-04</internalNodes>\n          <leafValues>\n            -1.1333829909563065e-01 6.8293251097202301e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2758 -5.4373521357774734e-02</internalNodes>\n          <leafValues>\n            5.6772488355636597e-01 -5.5303489789366722e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2759 -1.2200759723782539e-02</internalNodes>\n          <leafValues>\n            2.6310768723487854e-01 -3.5334069281816483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2760 6.5340757369995117e-02</internalNodes>\n          <leafValues>\n            8.2145677879452705e-03 -9.7914510965347290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2761 -9.7028106451034546e-02</internalNodes>\n          <leafValues>\n            -7.5845307111740112e-01 6.8704010918736458e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2762 -4.9768280237913132e-02</internalNodes>\n          <leafValues>\n            -8.0786317586898804e-01 1.3162019895389676e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2763 -2.9802118660882115e-04</internalNodes>\n          <leafValues>\n            8.5099622607231140e-02 -9.1054826974868774e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2764 1.0124569758772850e-02</internalNodes>\n          <leafValues>\n            -8.9172579348087311e-02 7.7402189373970032e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2765 8.1574246287345886e-03</internalNodes>\n          <leafValues>\n            -6.4016029238700867e-02 1.2462829798460007e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2766 -1.2093920260667801e-02</internalNodes>\n          <leafValues>\n            -1.8433560431003571e-01 4.9659188836812973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2767 -1.1906909756362438e-02</internalNodes>\n          <leafValues>\n            2.6277810335159302e-01 -2.9921159148216248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2768 -8.1438422203063965e-02</internalNodes>\n          <leafValues>\n            -6.4389252662658691e-01 1.7232710495591164e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2769 1.4961180277168751e-03</internalNodes>\n          <leafValues>\n            -1.2228660285472870e-01 5.7763870805501938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2770 -2.2651249542832375e-02</internalNodes>\n          <leafValues>\n            -1.1090759932994843e-01 7.0385642349720001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2771 -2.3789770901203156e-02</internalNodes>\n          <leafValues>\n            2.9644450545310974e-01 -2.5997739285230637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2772 1.4299990143626928e-03</internalNodes>\n          <leafValues>\n            -8.9716851711273193e-02 5.6030821055173874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2773 -4.1593458503484726e-02</internalNodes>\n          <leafValues>\n            -5.8160471916198730e-01 1.1599930003285408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2774 -2.5586199481040239e-03</internalNodes>\n          <leafValues>\n            6.2241408973932266e-02 -1.1328329890966415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2775 -1.0252290219068527e-01</internalNodes>\n          <leafValues>\n            -8.5185718536376953e-01 8.2774916663765907e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2776 -3.1799520365893841e-03</internalNodes>\n          <leafValues>\n            -1.3918060064315796e-01 5.3719218820333481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2777 -3.9835860952734947e-03</internalNodes>\n          <leafValues>\n            1.5531490743160248e-01 -5.3399000316858292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2778 1.0895960032939911e-02</internalNodes>\n          <leafValues>\n            3.9084900170564651e-02 -2.1268959343433380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2779 1.7865100875496864e-02</internalNodes>\n          <leafValues>\n            -2.5146210566163063e-02 3.3581560850143433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2780 5.5075511336326599e-03</internalNodes>\n          <leafValues>\n            2.3314310237765312e-02 -9.3666307628154755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2781 2.0092551130801439e-03</internalNodes>\n          <leafValues>\n            5.7231310755014420e-02 -1.4091749489307404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2782 -1.2218699790537357e-02</internalNodes>\n          <leafValues>\n            1.9243550300598145e-01 -2.4631109088659286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2783 1.8039119895547628e-03</internalNodes>\n          <leafValues>\n            5.5793199688196182e-02 -1.2940339744091034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2784 2.2159840911626816e-02</internalNodes>\n          <leafValues>\n            -9.0001197531819344e-03 5.2156221866607666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2785 -3.5827290266752243e-02</internalNodes>\n          <leafValues>\n            -6.2905979156494141e-01 1.1712389998137951e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2786 8.9478418231010437e-03</internalNodes>\n          <leafValues>\n            -3.7455581128597260e-02 1.0906309634447098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2787 -1.2861900031566620e-01</internalNodes>\n          <leafValues>\n            -3.9527180790901184e-01 1.8151529133319855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2788 1.8464029999449849e-03</internalNodes>\n          <leafValues>\n            -3.3952530473470688e-02 9.6596188843250275e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2789 2.8246780857443810e-03</internalNodes>\n          <leafValues>\n            -6.2633261084556580e-02 1.1198879778385162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2790 6.9075852632522583e-02</internalNodes>\n          <leafValues>\n            1.3590560294687748e-02 -5.2598261833190918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2791 -8.0794151872396469e-03</internalNodes>\n          <leafValues>\n            1.3081569969654083e-01 -5.0100728869438171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2792 -3.7193649914115667e-03</internalNodes>\n          <leafValues>\n            -1.4887580275535583e-01 5.1823489367961884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2793 2.0610638894140720e-03</internalNodes>\n          <leafValues>\n            -6.5545938909053802e-02 1.1345130205154419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2794 -6.0795281082391739e-02</internalNodes>\n          <leafValues>\n            -7.8219258785247803e-01 4.5540397986769676e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2795 -7.3096780106425285e-03</internalNodes>\n          <leafValues>\n            -1.9586810469627380e-01 3.5591870546340942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2796 -2.3796008899807930e-03</internalNodes>\n          <leafValues>\n            4.3329920619726181e-02 -6.0119420289993286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2797 -3.7874478846788406e-02</internalNodes>\n          <leafValues>\n            1.6700419783592224e-01 -4.1082471609115601e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2798 -1.1011550202965736e-02</internalNodes>\n          <leafValues>\n            -7.9715803265571594e-02 3.2247040420770645e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2799 -1.5278880018740892e-03</internalNodes>\n          <leafValues>\n            9.7541913390159607e-02 -9.4694830477237701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2800 3.7144418805837631e-02</internalNodes>\n          <leafValues>\n            -4.4054100289940834e-03 4.4159731268882751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2801 -4.9948949366807938e-02</internalNodes>\n          <leafValues>\n            -8.0400061607360840e-01 9.0302517637610435e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2802 -1.8558859825134277e-02</internalNodes>\n          <leafValues>\n            1.8556900322437286e-01 -2.6648480445146561e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>208</maxWeakCount>\n      <stageThreshold>-1.5900419950485229e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2803 5.9106469154357910e-02</internalNodes>\n          <leafValues>\n            -1.9395799934864044e-01 2.7272081375122070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2804 2.6784019544720650e-02</internalNodes>\n          <leafValues>\n            -4.2093229293823242e-01 1.2330240011215210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2805 8.6407009512186050e-03</internalNodes>\n          <leafValues>\n            -3.0236870050430298e-01 1.3153509795665741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2806 -1.1792869772762060e-03</internalNodes>\n          <leafValues>\n            8.2713536918163300e-02 -3.5140541195869446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2807 -2.2481461055576801e-03</internalNodes>\n          <leafValues>\n            -5.1323968172073364e-01 5.4614610970020294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2808 5.7527530007064342e-03</internalNodes>\n          <leafValues>\n            -1.9243009388446808e-01 1.3872030377388000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2809 1.0034020058810711e-02</internalNodes>\n          <leafValues>\n            6.0773681849241257e-02 -3.1631371378898621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2810 -3.2057110220193863e-03</internalNodes>\n          <leafValues>\n            1.3471069931983948e-01 -1.6333019733428955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2811 1.3803630135953426e-02</internalNodes>\n          <leafValues>\n            7.4590288102626801e-02 -2.7751418948173523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2812 -1.9213010370731354e-01</internalNodes>\n          <leafValues>\n            2.6890340447425842e-01 -6.6552907228469849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2813 -7.0279821753501892e-02</internalNodes>\n          <leafValues>\n            -3.2870158553123474e-01 4.9912039190530777e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2814 3.1519670039415359e-02</internalNodes>\n          <leafValues>\n            3.5865701735019684e-02 -5.0489199161529541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2815 -1.1164420284330845e-02</internalNodes>\n          <leafValues>\n            -2.7422958612442017e-01 7.3949173092842102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2816 6.1416681855916977e-03</internalNodes>\n          <leafValues>\n            -8.7944798171520233e-02 1.5492740273475647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2817 2.5183141231536865e-01</internalNodes>\n          <leafValues>\n            -9.3605853617191315e-02 1.8827579915523529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2818 -1.9524399191141129e-02</internalNodes>\n          <leafValues>\n            -2.8733500838279724e-01 4.9147769808769226e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2819 -2.1689489483833313e-02</internalNodes>\n          <leafValues>\n            -3.3415651321411133e-01 4.8450991511344910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2820 3.4099910408258438e-02</internalNodes>\n          <leafValues>\n            -1.4776800572872162e-01 1.1322359740734100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2821 -2.0377550274133682e-02</internalNodes>\n          <leafValues>\n            -2.9778409004211426e-01 5.6795541197061539e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2822 2.3986540734767914e-02</internalNodes>\n          <leafValues>\n            -5.5139839649200439e-02 3.5672488808631897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2823 -1.4578890055418015e-02</internalNodes>\n          <leafValues>\n            -3.3595868945121765e-01 4.9776330590248108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2824 -5.4530607303604484e-04</internalNodes>\n          <leafValues>\n            1.4906319975852966e-01 -1.2674619257450104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2825 3.0076410621404648e-03</internalNodes>\n          <leafValues>\n            -3.8654258847236633e-01 3.7338510155677795e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2826 6.1654142336919904e-04</internalNodes>\n          <leafValues>\n            7.0350617170333862e-02 -2.7769538760185242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2827 5.1461078226566315e-02</internalNodes>\n          <leafValues>\n            2.7613859623670578e-02 -4.9107590317726135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2828 5.5607639253139496e-02</internalNodes>\n          <leafValues>\n            2.7626939117908478e-02 -2.9615479707717896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2829 2.9709029942750931e-02</internalNodes>\n          <leafValues>\n            6.5961636602878571e-02 -2.0508719980716705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2830 3.4046828746795654e-02</internalNodes>\n          <leafValues>\n            -3.8902580738067627e-02 2.4681000411510468e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2831 2.4807849898934364e-02</internalNodes>\n          <leafValues>\n            3.5015519708395004e-02 -4.1401639580726624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2832 4.0748160332441330e-02</internalNodes>\n          <leafValues>\n            4.2967729270458221e-02 -3.2043859362602234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2833 1.0664659552276134e-02</internalNodes>\n          <leafValues>\n            5.6952890008687973e-02 -2.4745999276638031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2834 -6.3090369105339050e-02</internalNodes>\n          <leafValues>\n            1.6899240016937256e-01 -1.8692910671234131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2835 3.4371189773082733e-02</internalNodes>\n          <leafValues>\n            -4.7546751797199249e-02 3.2781639695167542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2836 -1.2518119812011719e-01</internalNodes>\n          <leafValues>\n            -5.6282979249954224e-01 1.3721459545195103e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2837 -2.2273709997534752e-02</internalNodes>\n          <leafValues>\n            2.8452938795089722e-01 -4.7334741801023483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2838 3.1560619827359915e-03</internalNodes>\n          <leafValues>\n            6.7093066871166229e-02 -1.5777610242366791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2839 -8.5235182195901871e-03</internalNodes>\n          <leafValues>\n            -4.5404490828514099e-01 3.0238900333642960e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2840 9.4529008492827415e-03</internalNodes>\n          <leafValues>\n            -5.5023040622472763e-02 1.4025360345840454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2841 -1.5268090181052685e-02</internalNodes>\n          <leafValues>\n            -4.1039389371871948e-01 3.3160910010337830e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2842 1.0665830224752426e-02</internalNodes>\n          <leafValues>\n            -1.1716780066490173e-01 9.5943398773670197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2843 -1.8211569637060165e-02</internalNodes>\n          <leafValues>\n            -2.4850100278854370e-01 6.7713633179664612e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2844 2.9094598721712828e-04</internalNodes>\n          <leafValues>\n            4.9981009215116501e-02 -2.2298039495944977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2845 1.2524049961939454e-03</internalNodes>\n          <leafValues>\n            -2.3567390441894531e-01 6.0058139264583588e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2846 -1.0200130194425583e-01</internalNodes>\n          <leafValues>\n            4.6817669272422791e-01 -1.4046870172023773e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2847 -5.3803320974111557e-02</internalNodes>\n          <leafValues>\n            -3.8875138759613037e-01 3.8533151149749756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2848 3.5919819027185440e-02</internalNodes>\n          <leafValues>\n            1.7687749117612839e-02 -6.3149172067642212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2849 -9.9846003577113152e-03</internalNodes>\n          <leafValues>\n            2.3914399743080139e-01 -5.8490000665187836e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2850 2.2157909348607063e-02</internalNodes>\n          <leafValues>\n            -4.4814221560955048e-02 1.9423240423202515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2851 -1.4240739867091179e-02</internalNodes>\n          <leafValues>\n            -3.7670499086380005e-01 3.4929048269987106e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2852 -5.9150479733943939e-02</internalNodes>\n          <leafValues>\n            1.6816680133342743e-01 -3.5232000052928925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2853 3.6074228584766388e-02</internalNodes>\n          <leafValues>\n            2.2868489846587181e-02 -5.7828897237777710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2854 5.7692300528287888e-02</internalNodes>\n          <leafValues>\n            -2.1003179252147675e-02 3.0750969052314758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2855 -5.6619398295879364e-02</internalNodes>\n          <leafValues>\n            2.3383679986000061e-01 -5.5003248155117035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2856 -1.0697569698095322e-02</internalNodes>\n          <leafValues>\n            -1.3236419856548309e-01 9.1536827385425568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2857 4.2940411367453635e-04</internalNodes>\n          <leafValues>\n            5.2362058311700821e-02 -2.3470179736614227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2858 3.9490307681262493e-03</internalNodes>\n          <leafValues>\n            5.8583620935678482e-02 -8.2533597946166992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2859 2.9810430482029915e-02</internalNodes>\n          <leafValues>\n            7.1684047579765320e-02 -1.6931280493736267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2860 -1.1462910100817680e-02</internalNodes>\n          <leafValues>\n            -2.6410359144210815e-01 4.4687580317258835e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2861 2.2996390238404274e-02</internalNodes>\n          <leafValues>\n            3.2992180436849594e-02 -3.4358990192413330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2862 -5.6792609393596649e-02</internalNodes>\n          <leafValues>\n            -7.5760507583618164e-01 2.4003670550882816e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2863 -4.4709402136504650e-03</internalNodes>\n          <leafValues>\n            1.6277609765529633e-01 -6.8193063139915466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2864 -1.2394989840686321e-02</internalNodes>\n          <leafValues>\n            -4.3603330850601196e-01 2.8416140004992485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2865 2.9185590147972107e-01</internalNodes>\n          <leafValues>\n            -3.3300530165433884e-02 3.9866968989372253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2866 3.3633329439908266e-03</internalNodes>\n          <leafValues>\n            -1.0972090065479279e-01 5.6931249797344208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2867 -3.5175260156393051e-02</internalNodes>\n          <leafValues>\n            -5.7213717699050903e-01 2.0903490483760834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2868 -1.2044839560985565e-02</internalNodes>\n          <leafValues>\n            9.1090522706508636e-02 -1.1947949975728989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2869 6.5466752275824547e-03</internalNodes>\n          <leafValues>\n            2.2512340545654297e-01 -5.8309450745582581e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2870 -3.3635019790381193e-03</internalNodes>\n          <leafValues>\n            8.3123452961444855e-02 -1.6144299507141113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2871 -2.3451250046491623e-02</internalNodes>\n          <leafValues>\n            2.5118809938430786e-01 -4.8030331730842590e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2872 1.9356099888682365e-02</internalNodes>\n          <leafValues>\n            5.8134589344263077e-02 -2.0791250467300415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2873 -8.9994952082633972e-02</internalNodes>\n          <leafValues>\n            -7.5068491697311401e-01 1.4169859699904919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2874 1.2888260185718536e-02</internalNodes>\n          <leafValues>\n            3.3752571791410446e-02 -2.5715011358261108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2875 1.8961170688271523e-02</internalNodes>\n          <leafValues>\n            3.4717381000518799e-02 -3.6027848720550537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2876 -2.0835550501942635e-02</internalNodes>\n          <leafValues>\n            5.7851308584213257e-01 -2.2111309692263603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2877 1.0018779896199703e-02</internalNodes>\n          <leafValues>\n            -3.9775848388671875e-02 2.6814839243888855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2878 -8.7516820058226585e-03</internalNodes>\n          <leafValues>\n            1.1257819831371307e-01 -4.8538278788328171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2879 -6.2366750091314316e-02</internalNodes>\n          <leafValues>\n            -6.6089111566543579e-01 1.6852140426635742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2880 -1.9582180306315422e-02</internalNodes>\n          <leafValues>\n            -2.1182540059089661e-01 3.5702988505363464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2881 2.2675599902868271e-03</internalNodes>\n          <leafValues>\n            6.1212919652462006e-02 -2.0048849284648895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2882 -4.6558458358049393e-02</internalNodes>\n          <leafValues>\n            -5.6454938650131226e-01 9.2866625636816025e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2883 -7.7152079902589321e-03</internalNodes>\n          <leafValues>\n            1.5039919316768646e-01 -8.3328150212764740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2884 4.1551668196916580e-02</internalNodes>\n          <leafValues>\n            2.6247739791870117e-02 -3.2347521185874939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2885 -2.1789079532027245e-02</internalNodes>\n          <leafValues>\n            -3.2375821471214294e-01 3.1726188957691193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2886 1.9698198884725571e-03</internalNodes>\n          <leafValues>\n            -9.2564247548580170e-02 1.0823410004377365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2887 -5.2744988352060318e-03</internalNodes>\n          <leafValues>\n            -1.3990330696105957e-01 7.7120877802371979e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2888 5.6007660925388336e-02</internalNodes>\n          <leafValues>\n            -1.0328499972820282e-01 1.1455559730529785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2889 2.2741030156612396e-01</internalNodes>\n          <leafValues>\n            1.6028450801968575e-02 -6.8145108222961426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2890 5.1362380385398865e-02</internalNodes>\n          <leafValues>\n            -2.3025810718536377e-02 1.5446029603481293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2891 -1.3017069548368454e-02</internalNodes>\n          <leafValues>\n            -3.2606399059295654e-01 3.2892610877752304e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2892 1.5782029926776886e-01</internalNodes>\n          <leafValues>\n            -3.9765262044966221e-03 7.7765262126922607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2893 -9.9805086851119995e-02</internalNodes>\n          <leafValues>\n            6.8609541654586792e-01 -1.4648180454969406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2894 3.7506350874900818e-01</internalNodes>\n          <leafValues>\n            1.4925800263881683e-02 -8.3105468750000000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2895 -7.9828302841633558e-04</internalNodes>\n          <leafValues>\n            -2.0161899924278259e-01 4.7897689044475555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2896 -2.1241609752178192e-01</internalNodes>\n          <leafValues>\n            -3.4409451484680176e-01 1.0950430296361446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2897 3.9451681077480316e-02</internalNodes>\n          <leafValues>\n            1.3966959901154041e-02 -7.2163110971450806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2898 -2.9185509309172630e-02</internalNodes>\n          <leafValues>\n            -2.7462458610534668e-01 3.5496920347213745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2899 2.7055600658059120e-02</internalNodes>\n          <leafValues>\n            -4.6995740383863449e-02 2.9289430379867554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2900 -2.6052350178360939e-02</internalNodes>\n          <leafValues>\n            2.0752039551734924e-01 -3.6353081464767456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2901 5.7216219604015350e-02</internalNodes>\n          <leafValues>\n            1.8895739689469337e-02 -5.7143908739089966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2902 -1.7151840031147003e-02</internalNodes>\n          <leafValues>\n            -3.3009570837020874e-01 3.8528628647327423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2903 -1.2304399907588959e-01</internalNodes>\n          <leafValues>\n            -7.8316390514373779e-01 1.1679390445351601e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2904 5.6786160916090012e-02</internalNodes>\n          <leafValues>\n            1.1063819751143456e-02 -5.3526097536087036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2905 1.1942840367555618e-01</internalNodes>\n          <leafValues>\n            9.5137851312756538e-03 -9.0637218952178955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2906 6.7707143723964691e-02</internalNodes>\n          <leafValues>\n            -3.9227519184350967e-02 2.8176560997962952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2907 -5.4918881505727768e-02</internalNodes>\n          <leafValues>\n            -6.2061691284179688e-01 1.6072269529104233e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2908 9.2878006398677826e-03</internalNodes>\n          <leafValues>\n            -5.0339490175247192e-02 1.9040100276470184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2909 -1.3141489587724209e-02</internalNodes>\n          <leafValues>\n            1.8629829585552216e-01 -7.5528547167778015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2910 2.9876120970584452e-04</internalNodes>\n          <leafValues>\n            -1.6163469851016998e-01 5.3589500486850739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2911 1.0153599828481674e-01</internalNodes>\n          <leafValues>\n            1.8458279967308044e-01 -6.2570616602897644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2912 2.7205729484558105e-01</internalNodes>\n          <leafValues>\n            1.3762479647994041e-02 -4.9364060163497925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2913 5.8730211108922958e-02</internalNodes>\n          <leafValues>\n            -2.3933680355548859e-01 7.9166807234287262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2914 1.9694259390234947e-02</internalNodes>\n          <leafValues>\n            3.7195280194282532e-02 -2.6109260320663452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2915 -1.0566900164121762e-04</internalNodes>\n          <leafValues>\n            6.7052997648715973e-02 -1.6515819728374481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2916 -1.9761279225349426e-02</internalNodes>\n          <leafValues>\n            8.6443692445755005e-02 -6.8657971918582916e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2917 5.3168509155511856e-02</internalNodes>\n          <leafValues>\n            2.9767790809273720e-02 -3.5225778818130493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2918 2.6071069762110710e-02</internalNodes>\n          <leafValues>\n            2.5216359645128250e-02 -1.4159369468688965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2919 -2.8720689937472343e-02</internalNodes>\n          <leafValues>\n            3.5941401124000549e-01 -2.9199620708823204e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2920 1.2989250011742115e-02</internalNodes>\n          <leafValues>\n            4.0009770542383194e-02 -1.9973039627075195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2921 -5.8176040649414062e-02</internalNodes>\n          <leafValues>\n            2.9345899820327759e-01 -4.3967530131340027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2922 2.8285140171647072e-02</internalNodes>\n          <leafValues>\n            3.7457428872585297e-02 -3.1361749768257141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2923 4.2701218277215958e-02</internalNodes>\n          <leafValues>\n            -2.0987769588828087e-02 5.0845777988433838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2924 2.4763600900769234e-02</internalNodes>\n          <leafValues>\n            -1.1869250237941742e-01 9.4457350671291351e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2925 -2.8076129965484142e-03</internalNodes>\n          <leafValues>\n            -2.3249779641628265e-01 4.5222718268632889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2926 -7.5583919882774353e-02</internalNodes>\n          <leafValues>\n            -4.5907029509544373e-01 1.2932280078530312e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2927 8.3796821534633636e-02</internalNodes>\n          <leafValues>\n            -1.5801630914211273e-02 6.8670481443405151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2928 -3.7072401493787766e-02</internalNodes>\n          <leafValues>\n            5.4146029055118561e-02 -4.2207449674606323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2929 2.4691069498658180e-02</internalNodes>\n          <leafValues>\n            2.6097679510712624e-02 -3.7760400772094727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2930 -2.7743929997086525e-02</internalNodes>\n          <leafValues>\n            -7.8631508350372314e-01 4.7534159384667873e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2931 1.9119970500469208e-02</internalNodes>\n          <leafValues>\n            2.6497760787606239e-02 -3.6489969491958618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2932 3.3773269969969988e-03</internalNodes>\n          <leafValues>\n            3.1966090202331543e-02 -3.2346761226654053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2933 1.9876819103956223e-02</internalNodes>\n          <leafValues>\n            -3.5128418356180191e-02 2.9078298807144165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2934 1.0035640001296997e-01</internalNodes>\n          <leafValues>\n            1.4607840217649937e-02 -5.2812242507934570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2935 -1.6163289546966553e-02</internalNodes>\n          <leafValues>\n            -1.0158140212297440e-01 1.1796499788761139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2936 1.0253380052745342e-02</internalNodes>\n          <leafValues>\n            3.6024410277605057e-02 -1.6520780324935913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2937 9.0665705502033234e-03</internalNodes>\n          <leafValues>\n            -3.4731701016426086e-02 3.7327200174331665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2938 3.0124900862574577e-02</internalNodes>\n          <leafValues>\n            5.1758479326963425e-02 -2.3582160472869873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2939 -6.6870311275124550e-03</internalNodes>\n          <leafValues>\n            4.3394241482019424e-02 -2.5202989578247070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2940 -2.0257479045540094e-03</internalNodes>\n          <leafValues>\n            -1.2479010224342346e-01 3.9309531450271606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2941 2.3254070430994034e-02</internalNodes>\n          <leafValues>\n            -4.7446910291910172e-02 2.3287700116634369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2942 2.3867199197411537e-02</internalNodes>\n          <leafValues>\n            -2.7421670034527779e-02 1.4630970358848572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2943 -4.0523000061511993e-02</internalNodes>\n          <leafValues>\n            -4.0472960472106934e-01 3.0415959656238556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2944 1.9958209991455078e-01</internalNodes>\n          <leafValues>\n            2.2049469873309135e-02 -4.6558481454849243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2945 -1.2990590184926987e-02</internalNodes>\n          <leafValues>\n            -1.7970620095729828e-01 5.8874938637018204e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2946 2.5623949244618416e-02</internalNodes>\n          <leafValues>\n            9.9402610212564468e-03 -2.6575279235839844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2947 -3.2004870474338531e-02</internalNodes>\n          <leafValues>\n            2.5087380409240723e-01 -4.6291470527648926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2948 1.8758419901132584e-02</internalNodes>\n          <leafValues>\n            -2.2038230672478676e-02 9.4407431781291962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2949 4.5425668358802795e-02</internalNodes>\n          <leafValues>\n            2.3371569812297821e-02 -4.8393398523330688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2950 1.5670580789446831e-02</internalNodes>\n          <leafValues>\n            -5.5109858512878418e-02 1.9907830655574799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2951 5.1336981356143951e-02</internalNodes>\n          <leafValues>\n            2.6425419375300407e-02 -4.4082790613174438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2952 4.0884170681238174e-02</internalNodes>\n          <leafValues>\n            2.0071209967136383e-01 -3.4887779504060745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2953 6.9165557622909546e-02</internalNodes>\n          <leafValues>\n            -2.9303310438990593e-02 3.4936821460723877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2954 4.7967158257961273e-02</internalNodes>\n          <leafValues>\n            -2.4416960775852203e-02 2.7018651366233826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2955 4.4068440794944763e-02</internalNodes>\n          <leafValues>\n            -4.0497269481420517e-02 2.4382269382476807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2956 -1.0287550091743469e-01</internalNodes>\n          <leafValues>\n            7.1105289459228516e-01 -9.9055245518684387e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2957 2.2407740354537964e-01</internalNodes>\n          <leafValues>\n            -5.4946999996900558e-02 1.9853439927101135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2958 -9.6570551395416260e-03</internalNodes>\n          <leafValues>\n            -2.5050228834152222e-01 3.7410989403724670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2959 7.9199701547622681e-02</internalNodes>\n          <leafValues>\n            -2.2147569805383682e-02 4.8771071434020996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2960 4.5983199030160904e-02</internalNodes>\n          <leafValues>\n            8.2229733467102051e-02 -3.9335750043392181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2961 4.2670449614524841e-01</internalNodes>\n          <leafValues>\n            1.7132800072431564e-02 -5.3996258974075317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2962 1.5413990616798401e-01</internalNodes>\n          <leafValues>\n            1.1902350001037121e-02 -6.8533718585968018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2963 -1.7699889838695526e-01</internalNodes>\n          <leafValues>\n            -6.3113832473754883e-01 1.2545200064778328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2964 -2.3769829422235489e-02</internalNodes>\n          <leafValues>\n            -1.4281429350376129e-01 1.4284349977970123e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2965 -8.3290286362171173e-02</internalNodes>\n          <leafValues>\n            3.6433398723602295e-01 -2.5287430733442307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2966 -3.0276349280029535e-03</internalNodes>\n          <leafValues>\n            -1.7501260340213776e-01 3.5528600215911865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2967 9.3518232461065054e-04</internalNodes>\n          <leafValues>\n            -3.4317269921302795e-01 2.8196020051836967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2968 8.6792530491948128e-03</internalNodes>\n          <leafValues>\n            9.1854788362979889e-02 -1.1349800229072571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2969 -4.3289531022310257e-03</internalNodes>\n          <leafValues>\n            7.6560527086257935e-02 -1.2850379943847656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2970 6.1485089361667633e-02</internalNodes>\n          <leafValues>\n            4.0065501816570759e-03 -4.2798730731010437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2971 -2.3108569905161858e-02</internalNodes>\n          <leafValues>\n            -3.2999789714813232e-01 3.1228100880980492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2972 -6.3490739557892084e-04</internalNodes>\n          <leafValues>\n            5.3318761289119720e-02 -6.0307938605546951e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2973 -4.1278889402747154e-03</internalNodes>\n          <leafValues>\n            1.5029670298099518e-01 -8.9805796742439270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2974 1.5408970415592194e-01</internalNodes>\n          <leafValues>\n            -2.3309229873120785e-03 9.6946477890014648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2975 1.8083740025758743e-02</internalNodes>\n          <leafValues>\n            -4.6674519777297974e-02 2.1941949427127838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2976 -6.0022968798875809e-02</internalNodes>\n          <leafValues>\n            3.7283098697662354e-01 -1.3637940399348736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2977 -1.6025049984455109e-01</internalNodes>\n          <leafValues>\n            3.9442360401153564e-01 -2.4808609858155251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2978 -2.3220200091600418e-02</internalNodes>\n          <leafValues>\n            -2.8352069854736328e-01 3.8456469774246216e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2979 3.2353829592466354e-02</internalNodes>\n          <leafValues>\n            3.0197540298104286e-02 -3.5371699929237366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2980 -1.2930749915540218e-02</internalNodes>\n          <leafValues>\n            -1.8275280296802521e-01 4.0219429880380630e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2981 -2.9022840317338705e-03</internalNodes>\n          <leafValues>\n            5.7583440095186234e-02 -1.8175080418586731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2982 3.7042409181594849e-02</internalNodes>\n          <leafValues>\n            2.3471569642424583e-02 -3.7222048640251160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2983 -1.4371460676193237e-01</internalNodes>\n          <leafValues>\n            -6.7353278398513794e-01 1.3768459670245647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2984 -1.0714099742472172e-02</internalNodes>\n          <leafValues>\n            2.3074600100517273e-01 -5.9898581355810165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2985 1.1370699852705002e-02</internalNodes>\n          <leafValues>\n            -5.5859100073575974e-02 2.1604159474372864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2986 -3.3829350024461746e-02</internalNodes>\n          <leafValues>\n            -3.2868561148643494e-01 1.6743719577789307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2987 3.6406058818101883e-02</internalNodes>\n          <leafValues>\n            2.3512810468673706e-02 -4.7999539971351624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2988 -3.9853308349847794e-02</internalNodes>\n          <leafValues>\n            3.0388408899307251e-01 -2.2388210520148277e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2989 2.3857640102505684e-02</internalNodes>\n          <leafValues>\n            -4.3960139155387878e-02 2.5021830201148987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2990 -8.6149327456951141e-02</internalNodes>\n          <leafValues>\n            -9.2641222476959229e-01 1.0180849581956863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2991 -2.7360459789633751e-02</internalNodes>\n          <leafValues>\n            -4.5331078767776489e-01 1.8517250195145607e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2992 4.6891667880117893e-03</internalNodes>\n          <leafValues>\n            1.4983110129833221e-02 -9.8690867424011230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2993 3.6140959709882736e-02</internalNodes>\n          <leafValues>\n            2.1240329369902611e-02 -4.2275610566139221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2994 1.0714419931173325e-01</internalNodes>\n          <leafValues>\n            -4.1592169553041458e-02 2.4880869686603546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2995 -1.2024450115859509e-02</internalNodes>\n          <leafValues>\n            -1.8906030058860779e-01 5.5290900170803070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2996 2.1671090275049210e-02</internalNodes>\n          <leafValues>\n            -3.7164088338613510e-02 2.9896330833435059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2997 -3.3205719664692879e-03</internalNodes>\n          <leafValues>\n            -9.1837689280509949e-02 1.1810839921236038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2998 -8.4256403148174286e-02</internalNodes>\n          <leafValues>\n            -5.4935282468795776e-01 4.6934271231293678e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2999 -2.7107410132884979e-03</internalNodes>\n          <leafValues>\n            5.2301179617643356e-02 -2.1932560205459595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3000 -1.9661630503833294e-03</internalNodes>\n          <leafValues>\n            6.9522850215435028e-02 -1.2369599938392639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3001 1.0835859924554825e-01</internalNodes>\n          <leafValues>\n            -1.6028439626097679e-02 6.7538297176361084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3002 -4.0661569684743881e-02</internalNodes>\n          <leafValues>\n            2.8239870071411133e-01 -1.8643079325556755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3003 9.4869043678045273e-03</internalNodes>\n          <leafValues>\n            -1.4204730093479156e-01 7.4218176305294037e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3004 -8.1196203827857971e-03</internalNodes>\n          <leafValues>\n            1.2733109295368195e-01 -7.5325429439544678e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3005 -3.6718908697366714e-02</internalNodes>\n          <leafValues>\n            2.5209701061248779e-01 -3.8642361760139465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3006 4.2515851557254791e-02</internalNodes>\n          <leafValues>\n            3.4613508731126785e-02 -3.1406149268150330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3007 -1.6484249383211136e-02</internalNodes>\n          <leafValues>\n            -3.4622931480407715e-01 2.6470340788364410e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3008 1.8608599901199341e-02</internalNodes>\n          <leafValues>\n            3.1125839799642563e-02 -2.3837919533252716e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3009 -1.0872060433030128e-02</internalNodes>\n          <leafValues>\n            2.3061220347881317e-01 -4.3469380587339401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3010 -4.0728081017732620e-02</internalNodes>\n          <leafValues>\n            1.3258880376815796e-01 -3.8833290338516235e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>240</maxWeakCount>\n      <stageThreshold>-1.3404430150985718e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3011 2.7802670374512672e-02</internalNodes>\n          <leafValues>\n            -1.8535159528255463e-01 2.3777860403060913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3012 1.6392730176448822e-03</internalNodes>\n          <leafValues>\n            -2.6787629723548889e-01 1.1733309924602509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3013 -3.0419689137488604e-03</internalNodes>\n          <leafValues>\n            1.9552859663963318e-01 -1.3240019977092743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3014 -2.7744288672693074e-04</internalNodes>\n          <leafValues>\n            6.0701820999383926e-02 -3.0465421080589294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3015 -2.7942769229412079e-03</internalNodes>\n          <leafValues>\n            -2.5370940566062927e-01 7.6147846877574921e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3016 7.4005699716508389e-03</internalNodes>\n          <leafValues>\n            6.5623492002487183e-02 -3.0128520727157593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3017 1.1316470336169004e-03</internalNodes>\n          <leafValues>\n            -1.3232930004596710e-01 1.3622519373893738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3018 -8.7306648492813110e-03</internalNodes>\n          <leafValues>\n            -1.0246229916810989e-01 1.0649880394339561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3019 -6.4327879808843136e-03</internalNodes>\n          <leafValues>\n            -2.1301789581775665e-01 7.7425397932529449e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3020 -1.3303949963301420e-03</internalNodes>\n          <leafValues>\n            9.6234247088432312e-02 -1.7086009681224823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3021 -2.3770590778440237e-03</internalNodes>\n          <leafValues>\n            1.1657089740037918e-01 -1.5135769546031952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3022 -5.3865360096096992e-03</internalNodes>\n          <leafValues>\n            -1.6851960122585297e-01 4.4324558228254318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3023 -5.6973858736455441e-03</internalNodes>\n          <leafValues>\n            -2.4702399969100952e-01 7.7735342085361481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3024 4.5654520392417908e-02</internalNodes>\n          <leafValues>\n            -1.6687670722603798e-02 1.4222119748592377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3025 -1.4929420103726443e-05</internalNodes>\n          <leafValues>\n            -3.2725390791893005e-01 4.8142101615667343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3026 -1.7635900294408202e-03</internalNodes>\n          <leafValues>\n            7.0115849375724792e-02 -1.6864499077200890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3027 1.9133860478177667e-03</internalNodes>\n          <leafValues>\n            -1.9570820033550262e-01 9.0169131755828857e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3028 -1.9309469498693943e-03</internalNodes>\n          <leafValues>\n            1.1824289709329605e-01 -1.2146709859371185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3029 9.7775761969387531e-04</internalNodes>\n          <leafValues>\n            1.1657200008630753e-01 -1.2770849466323853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3030 -5.2643800154328346e-03</internalNodes>\n          <leafValues>\n            1.9958360493183136e-01 -6.2928676605224609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3031 -2.2730689961463213e-03</internalNodes>\n          <leafValues>\n            -2.1804699301719666e-01 6.6565290093421936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3032 -3.5128789022564888e-03</internalNodes>\n          <leafValues>\n            8.1114247441291809e-02 -1.4230330288410187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3033 2.8102330397814512e-03</internalNodes>\n          <leafValues>\n            6.0884710401296616e-02 -2.2008429467678070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3034 -2.3211359977722168e-02</internalNodes>\n          <leafValues>\n            2.3182259500026703e-01 -3.4014280885457993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3035 -8.7068388238549232e-03</internalNodes>\n          <leafValues>\n            -2.0691269636154175e-01 6.8004116415977478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3036 7.0584798231720924e-03</internalNodes>\n          <leafValues>\n            -1.0500799864530563e-01 1.2610189616680145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3037 -6.8878240883350372e-02</internalNodes>\n          <leafValues>\n            4.2687618732452393e-01 -3.1305618584156036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3038 -1.2785149738192558e-02</internalNodes>\n          <leafValues>\n            -2.0268030464649200e-01 3.2005790621042252e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3039 -4.2242300696671009e-03</internalNodes>\n          <leafValues>\n            -2.1619689464569092e-01 7.5660832226276398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3040 -4.1660640388727188e-02</internalNodes>\n          <leafValues>\n            3.5601380467414856e-01 -3.6500900983810425e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3041 1.4983239583671093e-02</internalNodes>\n          <leafValues>\n            3.3663559705018997e-02 -4.3016681075096130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3042 1.8940219888463616e-03</internalNodes>\n          <leafValues>\n            -7.7785640954971313e-02 1.4130039513111115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3043 -1.0271830251440406e-03</internalNodes>\n          <leafValues>\n            6.1292048543691635e-02 -1.8569129705429077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3044 -1.0491760447621346e-02</internalNodes>\n          <leafValues>\n            -2.1280039846897125e-01 4.6641569584608078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3045 4.1263508610427380e-03</internalNodes>\n          <leafValues>\n            -6.3113473355770111e-02 2.1683399379253387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3046 2.1284529939293861e-02</internalNodes>\n          <leafValues>\n            -1.9541380926966667e-02 4.0555500984191895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3047 6.0370927676558495e-03</internalNodes>\n          <leafValues>\n            6.1322800815105438e-02 -1.7558750510215759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3048 2.8550080023705959e-03</internalNodes>\n          <leafValues>\n            -3.7402968853712082e-02 8.6794376373291016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3049 -3.0839299783110619e-02</internalNodes>\n          <leafValues>\n            4.5826399326324463e-01 -2.2824319079518318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3050 -1.2664640322327614e-02</internalNodes>\n          <leafValues>\n            -1.5179179608821869e-01 3.8325909525156021e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3051 8.4788333624601364e-03</internalNodes>\n          <leafValues>\n            -7.9164452850818634e-02 1.3821309804916382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3052 -9.0271160006523132e-03</internalNodes>\n          <leafValues>\n            2.0483429729938507e-01 -5.8428239077329636e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3053 -5.3999028168618679e-03</internalNodes>\n          <leafValues>\n            -1.9563870131969452e-01 6.2881819903850555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3054 4.8698568716645241e-03</internalNodes>\n          <leafValues>\n            4.7269448637962341e-02 -2.0357230305671692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3055 -5.6715728715062141e-03</internalNodes>\n          <leafValues>\n            1.6232620179653168e-01 -7.2473183274269104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3056 -6.3621107256039977e-04</internalNodes>\n          <leafValues>\n            -1.7648829519748688e-01 6.1553929001092911e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3057 -5.7404721155762672e-03</internalNodes>\n          <leafValues>\n            -2.3773890733718872e-01 4.8493091017007828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3058 2.3313059937208891e-03</internalNodes>\n          <leafValues>\n            -9.8087467253208160e-02 7.6705731451511383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3059 2.6579289697110653e-03</internalNodes>\n          <leafValues>\n            -1.0429590195417404e-01 1.3275440037250519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3060 -1.2426489964127541e-02</internalNodes>\n          <leafValues>\n            -1.7686119675636292e-01 7.8797861933708191e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3061 3.7596069741994143e-03</internalNodes>\n          <leafValues>\n            5.8028500527143478e-02 -2.0235699415206909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3062 -1.3941819779574871e-02</internalNodes>\n          <leafValues>\n            2.9365628957748413e-01 -3.1069029122591019e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3063 2.4605529382824898e-02</internalNodes>\n          <leafValues>\n            -4.9767840653657913e-02 2.0446600019931793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3064 1.1572279781103134e-01</internalNodes>\n          <leafValues>\n            5.7542040012776852e-03 -5.5789208412170410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3065 1.4880299568176270e-03</internalNodes>\n          <leafValues>\n            -1.2870499491691589e-01 8.6191363632678986e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3066 -1.0085869580507278e-02</internalNodes>\n          <leafValues>\n            -1.8718029558658600e-01 2.7143789455294609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3067 -4.0125781670212746e-03</internalNodes>\n          <leafValues>\n            -1.4843569695949554e-01 6.1482351273298264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3068 4.5241288840770721e-02</internalNodes>\n          <leafValues>\n            -2.2187199443578720e-02 4.9022749066352844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3069 -5.4588477360084653e-04</internalNodes>\n          <leafValues>\n            1.0740750283002853e-01 -9.4784751534461975e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3070 1.0822109878063202e-02</internalNodes>\n          <leafValues>\n            -1.1820139735937119e-01 8.4009647369384766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3071 6.4339267555624247e-04</internalNodes>\n          <leafValues>\n            -1.1072149872779846e-01 8.4126397967338562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3072 9.3544989824295044e-02</internalNodes>\n          <leafValues>\n            6.1726439744234085e-03 -3.8121530413627625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3073 -3.9214221760630608e-03</internalNodes>\n          <leafValues>\n            1.2969920039176941e-01 -7.5530029833316803e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3074 -4.5141312293708324e-03</internalNodes>\n          <leafValues>\n            -2.1222509443759918e-01 5.0941351801156998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3075 5.1563870161771774e-02</internalNodes>\n          <leafValues>\n            1.1215999722480774e-02 -8.4125047922134399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3076 -3.7086829543113708e-02</internalNodes>\n          <leafValues>\n            -3.3443790674209595e-01 1.2198350392282009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3077 -1.5274320030584931e-03</internalNodes>\n          <leafValues>\n            1.7022849619388580e-01 -5.3171109408140182e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3078 -3.3183719497174025e-03</internalNodes>\n          <leafValues>\n            1.4972689747810364e-01 -3.9522700011730194e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3079 -1.0695139877498150e-02</internalNodes>\n          <leafValues>\n            -2.0767690241336823e-01 4.8223540186882019e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3080 8.0909933894872665e-03</internalNodes>\n          <leafValues>\n            -5.5572569370269775e-02 8.1361941993236542e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3081 8.9193560415878892e-04</internalNodes>\n          <leafValues>\n            -1.4888229966163635e-01 5.6974019855260849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3082 2.1180939802434295e-04</internalNodes>\n          <leafValues>\n            -1.8776890635490417e-01 4.5087080448865891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3083 6.8865409120917320e-03</internalNodes>\n          <leafValues>\n            -7.4651539325714111e-02 1.1806459724903107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3084 3.8009819388389587e-01</internalNodes>\n          <leafValues>\n            9.6241412684321404e-03 -5.0257128477096558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3085 9.4844900071620941e-02</internalNodes>\n          <leafValues>\n            2.0284110680222511e-02 -3.9478880167007446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3086 -1.1133160296594724e-04</internalNodes>\n          <leafValues>\n            5.3717028349637985e-02 -1.5433239936828613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3087 3.5911630839109421e-02</internalNodes>\n          <leafValues>\n            -2.4374049156904221e-02 3.5077759623527527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3088 -2.9291780665516853e-02</internalNodes>\n          <leafValues>\n            -4.9002739787101746e-01 2.1694840863347054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3089 -2.4277189746499062e-02</internalNodes>\n          <leafValues>\n            -5.0206911563873291e-01 1.5807420015335083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3090 1.2620110064744949e-02</internalNodes>\n          <leafValues>\n            -4.8637848347425461e-02 2.1370050311088562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3091 -4.1045118123292923e-03</internalNodes>\n          <leafValues>\n            -1.6757939755916595e-01 6.2675923109054565e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3092 -2.3477169871330261e-01</internalNodes>\n          <leafValues>\n            6.2205511331558228e-01 -1.3949319720268250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3093 -6.7914247512817383e-02</internalNodes>\n          <leafValues>\n            -9.7014141082763672e-01 1.0490460321307182e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3094 1.4207609929144382e-03</internalNodes>\n          <leafValues>\n            -6.0801118612289429e-02 1.3500739634037018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3095 -5.0894408486783504e-03</internalNodes>\n          <leafValues>\n            -1.6992169618606567e-01 5.0795670598745346e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3096 -1.9226800650358200e-02</internalNodes>\n          <leafValues>\n            9.8861172795295715e-02 -3.3686220645904541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3097 1.0590540245175362e-02</internalNodes>\n          <leafValues>\n            5.9616900980472565e-02 -1.6495449841022491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3098 3.3726880792528391e-03</internalNodes>\n          <leafValues>\n            -3.8652341812849045e-02 5.5400568991899490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3099 -8.9012801647186279e-02</internalNodes>\n          <leafValues>\n            4.0750509500503540e-01 -2.4150330573320389e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3100 -2.3359079658985138e-01</internalNodes>\n          <leafValues>\n            -7.2641909122467041e-01 6.5185138955712318e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3101 -2.2732259333133698e-01</internalNodes>\n          <leafValues>\n            -8.9977008104324341e-01 9.1146891936659813e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3102 -2.9601769521832466e-02</internalNodes>\n          <leafValues>\n            -4.3270850181579590e-01 1.6021190211176872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3103 -6.9494689814746380e-03</internalNodes>\n          <leafValues>\n            1.5218999981880188e-01 -6.1896830797195435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3104 -1.9150479929521680e-03</internalNodes>\n          <leafValues>\n            7.2570547461509705e-02 -1.3121089339256287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3105 8.5106380283832550e-03</internalNodes>\n          <leafValues>\n            -5.7326089590787888e-02 1.5743100643157959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3106 -2.4363139644265175e-02</internalNodes>\n          <leafValues>\n            9.5700822770595551e-02 -5.8364428579807281e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3107 -2.2522659972310066e-02</internalNodes>\n          <leafValues>\n            -4.6943131089210510e-01 2.0241359248757362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3108 -4.4660381972789764e-03</internalNodes>\n          <leafValues>\n            7.6211109757423401e-02 -8.1844657659530640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3109 -4.2101819999516010e-03</internalNodes>\n          <leafValues>\n            -2.2083589434623718e-01 4.7010198235511780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3110 5.7130381464958191e-03</internalNodes>\n          <leafValues>\n            -6.2254000455141068e-02 5.2705820649862289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3111 -5.6021669879555702e-03</internalNodes>\n          <leafValues>\n            -1.8985760211944580e-01 5.0114821642637253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3112 -2.2042069584131241e-02</internalNodes>\n          <leafValues>\n            8.7683752179145813e-02 -2.4777179583907127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3113 -2.1817081142216921e-03</internalNodes>\n          <leafValues>\n            1.6766600310802460e-01 -6.6771760582923889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3114 2.4545300751924515e-02</internalNodes>\n          <leafValues>\n            4.9205120652914047e-02 -2.2503720223903656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3115 -2.4728688877075911e-03</internalNodes>\n          <leafValues>\n            1.3539670407772064e-01 -6.2330130487680435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3116 2.3717728909105062e-03</internalNodes>\n          <leafValues>\n            5.7926058769226074e-02 -1.3325250148773193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3117 -3.8999661803245544e-02</internalNodes>\n          <leafValues>\n            2.9875481128692627e-01 -3.0257239937782288e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3118 -1.7835620092228055e-03</internalNodes>\n          <leafValues>\n            9.2680282890796661e-02 -7.4350588023662567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3119 1.9984450191259384e-02</internalNodes>\n          <leafValues>\n            2.2409349679946899e-02 -4.1501939296722412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3120 4.1170548647642136e-03</internalNodes>\n          <leafValues>\n            5.3432278335094452e-02 -1.5092259645462036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3121 4.3995600193738937e-02</internalNodes>\n          <leafValues>\n            1.1389889754354954e-02 -6.6494518518447876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3122 -3.5350578837096691e-03</internalNodes>\n          <leafValues>\n            1.1005590111017227e-01 -7.6377056539058685e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3123 1.4632029924541712e-03</internalNodes>\n          <leafValues>\n            -5.6962151080369949e-02 1.3184599578380585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3124 -4.9925539642572403e-03</internalNodes>\n          <leafValues>\n            -1.4675070345401764e-01 5.5129978805780411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3125 -7.8646428883075714e-02</internalNodes>\n          <leafValues>\n            -5.2768182754516602e-01 1.3662739656865597e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3126 -4.3559111654758453e-03</internalNodes>\n          <leafValues>\n            9.1798119246959686e-02 -5.7598169893026352e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3127 8.2531487569212914e-03</internalNodes>\n          <leafValues>\n            -6.5613977611064911e-02 1.3083070516586304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3128 -3.5033349413424730e-03</internalNodes>\n          <leafValues>\n            -1.2742599844932556e-01 6.0875169932842255e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3129 3.9662471972405910e-03</internalNodes>\n          <leafValues>\n            -5.5715151131153107e-02 1.4783249795436859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3130 -1.0260219685733318e-02</internalNodes>\n          <leafValues>\n            -1.3472290337085724e-01 4.4514350593090057e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3131 3.6724930396303535e-04</internalNodes>\n          <leafValues>\n            -1.3727700710296631e-01 6.1179649084806442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3132 1.9500199705362320e-02</internalNodes>\n          <leafValues>\n            -5.9033330529928207e-02 1.5589320659637451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3133 1.4041420072317123e-02</internalNodes>\n          <leafValues>\n            2.2140439599752426e-02 -4.2831090092658997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3134 3.8459740579128265e-02</internalNodes>\n          <leafValues>\n            1.6875730827450752e-02 -5.2425742149353027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3135 -2.5901539251208305e-02</internalNodes>\n          <leafValues>\n            2.5163099169731140e-01 -3.2579511404037476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3136 2.8264479711651802e-02</internalNodes>\n          <leafValues>\n            2.1297719329595566e-02 -2.3978309333324432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3137 -5.3067881613969803e-02</internalNodes>\n          <leafValues>\n            7.6594692468643188e-01 -1.0163240134716034e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3138 1.6842440236359835e-03</internalNodes>\n          <leafValues>\n            4.0168728679418564e-02 -2.1810980141162872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3139 6.5255112713202834e-04</internalNodes>\n          <leafValues>\n            -3.2155249267816544e-02 2.6028048992156982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3140 -1.5381099283695221e-01</internalNodes>\n          <leafValues>\n            -7.9570180177688599e-01 9.9420538172125816e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3141 -1.7530319746583700e-04</internalNodes>\n          <leafValues>\n            6.1257161200046539e-02 -1.1830890178680420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3142 1.1829809518530965e-03</internalNodes>\n          <leafValues>\n            -8.2589529454708099e-02 5.8234758675098419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3143 1.4753890223801136e-02</internalNodes>\n          <leafValues>\n            4.6728778630495071e-02 -1.9874340295791626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3144 1.0592579841613770e-02</internalNodes>\n          <leafValues>\n            -5.7157158851623535e-02 1.2261729687452316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3145 -4.6638969331979752e-02</internalNodes>\n          <leafValues>\n            3.9221999049186707e-01 -1.8770450726151466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3146 -2.2761020809412003e-03</internalNodes>\n          <leafValues>\n            -1.9819819927215576e-01 3.2669950276613235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3147 -8.9252636826131493e-05</internalNodes>\n          <leafValues>\n            -1.7795699834823608e-01 4.5088160783052444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3148 -4.8888921737670898e-03</internalNodes>\n          <leafValues>\n            3.7973329424858093e-01 -2.5622500106692314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3149 -4.7039450146257877e-03</internalNodes>\n          <leafValues>\n            -1.4075440168380737e-01 5.1885869354009628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3150 6.8887867964804173e-03</internalNodes>\n          <leafValues>\n            -6.0707900673151016e-02 6.7318782210350037e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3151 9.4449967145919800e-02</internalNodes>\n          <leafValues>\n            -4.3975159525871277e-02 1.6885830461978912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3152 5.1520671695470810e-02</internalNodes>\n          <leafValues>\n            3.8239071145653725e-03 -6.3077712059020996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3153 6.3957129605114460e-03</internalNodes>\n          <leafValues>\n            4.4094309210777283e-02 -1.8156020343303680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3154 -4.9659270793199539e-02</internalNodes>\n          <leafValues>\n            1.1174239963293076e-01 -5.5821210145950317e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3155 -6.9081829860806465e-03</internalNodes>\n          <leafValues>\n            -1.4038950204849243e-01 5.9535760432481766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3156 9.2546567320823669e-03</internalNodes>\n          <leafValues>\n            -3.3587910234928131e-02 5.8593101799488068e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3157 5.0454521551728249e-03</internalNodes>\n          <leafValues>\n            5.3777661174535751e-02 -1.3626030087471008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3158 -3.3333420753479004e-02</internalNodes>\n          <leafValues>\n            2.4641269445419312e-01 -3.1888678669929504e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3159 6.1201080679893494e-02</internalNodes>\n          <leafValues>\n            2.0013030618429184e-02 -3.9326569437980652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3160 -1.0175120085477829e-02</internalNodes>\n          <leafValues>\n            7.5324602425098419e-02 -3.9622548967599869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3161 1.0271370410919189e-02</internalNodes>\n          <leafValues>\n            -5.2234519273042679e-02 1.7939470708370209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3162 -5.1337860524654388e-02</internalNodes>\n          <leafValues>\n            -3.1097239255905151e-01 2.1656470373272896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3163 2.3615739773958921e-03</internalNodes>\n          <leafValues>\n            -6.4843319356441498e-02 1.1771979928016663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3164 -2.7691819705069065e-03</internalNodes>\n          <leafValues>\n            1.4682589471340179e-01 -5.7794518768787384e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3165 2.1457809954881668e-02</internalNodes>\n          <leafValues>\n            2.5269350036978722e-02 -3.3404821157455444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3166 -5.9619098901748657e-03</internalNodes>\n          <leafValues>\n            9.9241338670253754e-02 -3.5371959209442139e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3167 7.5217390060424805e-01</internalNodes>\n          <leafValues>\n            7.7095897868275642e-03 -8.6434108018875122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3168 -9.2514551943168044e-04</internalNodes>\n          <leafValues>\n            3.8251910358667374e-02 -7.5597628951072693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3169 4.0818289853632450e-03</internalNodes>\n          <leafValues>\n            6.6699139773845673e-02 -1.1289499700069427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3170 1.6256010159850121e-02</internalNodes>\n          <leafValues>\n            -1.8782900646328926e-02 1.8875749409198761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3171 -9.3405954539775848e-03</internalNodes>\n          <leafValues>\n            -1.6462349891662598e-01 4.6859718859195709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3172 -3.8136378861963749e-04</internalNodes>\n          <leafValues>\n            6.0498170554637909e-02 -1.0089360177516937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3173 -2.3470960557460785e-02</internalNodes>\n          <leafValues>\n            1.8546760082244873e-01 -3.9577301591634750e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3174 -7.8684352338314056e-02</internalNodes>\n          <leafValues>\n            -6.0540008544921875e-01 1.3162979856133461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3175 1.0616140067577362e-01</internalNodes>\n          <leafValues>\n            9.4080185517668724e-03 -7.2416877746582031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3176 -6.9211378693580627e-02</internalNodes>\n          <leafValues>\n            -9.2819648981094360e-01 5.4140980355441570e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3177 -4.3828289955854416e-02</internalNodes>\n          <leafValues>\n            5.4933768510818481e-01 -1.5516829676926136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3178 5.6881271302700043e-03</internalNodes>\n          <leafValues>\n            3.7328861653804779e-02 -1.2019480019807816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3179 3.6933881044387817e-01</internalNodes>\n          <leafValues>\n            -9.9545158445835114e-03 8.1607538461685181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3180 -1.0447519831359386e-02</internalNodes>\n          <leafValues>\n            1.4190499484539032e-01 -4.9798399209976196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3181 1.5151320025324821e-02</internalNodes>\n          <leafValues>\n            2.2705320268869400e-02 -3.4523698687553406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3182 1.2503850460052490e-01</internalNodes>\n          <leafValues>\n            -2.7150910347700119e-02 3.0379050970077515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3183 -9.1995187103748322e-03</internalNodes>\n          <leafValues>\n            -1.7020559310913086e-01 4.4314298778772354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3184 7.1795531548559666e-03</internalNodes>\n          <leafValues>\n            -7.8971788287162781e-02 6.3919156789779663e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3185 -1.8217830359935760e-01</internalNodes>\n          <leafValues>\n            -9.7598892450332642e-01 7.1003441698849201e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3186 1.5047369743115269e-05</internalNodes>\n          <leafValues>\n            -9.8960377275943756e-02 3.9371099323034286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3187 -3.8763400167226791e-02</internalNodes>\n          <leafValues>\n            -5.9095138311386108e-01 1.0429039597511292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3188 -4.3799880892038345e-02</internalNodes>\n          <leafValues>\n            2.5290209054946899e-01 -9.5704924315214157e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3189 -5.6705519556999207e-02</internalNodes>\n          <leafValues>\n            -7.2466772794723511e-01 9.0332692489027977e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3190 7.5183928012847900e-02</internalNodes>\n          <leafValues>\n            -6.7565650679171085e-03 7.3075437545776367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3191 -6.4183590002357960e-03</internalNodes>\n          <leafValues>\n            8.5421830415725708e-02 -7.6056882739067078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3192 1.3349299551919103e-03</internalNodes>\n          <leafValues>\n            6.9977663457393646e-02 -9.2187918722629547e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3193 2.8028399683535099e-03</internalNodes>\n          <leafValues>\n            -5.0953198224306107e-02 1.2934680283069611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3194 -6.4196899533271790e-02</internalNodes>\n          <leafValues>\n            -6.1751341819763184e-01 8.7323756888508797e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3195 1.7879910301417112e-03</internalNodes>\n          <leafValues>\n            -5.9445429593324661e-02 1.1325009912252426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3196 2.3370790295302868e-03</internalNodes>\n          <leafValues>\n            2.2643320262432098e-02 -1.7427070438861847e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3197 2.1500359289348125e-03</internalNodes>\n          <leafValues>\n            -5.1846258342266083e-02 1.5027989447116852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3198 -2.9744949191808701e-02</internalNodes>\n          <leafValues>\n            -1.7235560715198517e-01 1.6160540282726288e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3199 -2.9182229191064835e-03</internalNodes>\n          <leafValues>\n            -1.1646019667387009e-01 5.3380940109491348e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3200 -5.2581899799406528e-03</internalNodes>\n          <leafValues>\n            -8.4262102842330933e-02 3.6880351603031158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3201 2.0302489399909973e-02</internalNodes>\n          <leafValues>\n            -5.3297229111194611e-02 1.6949890553951263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3202 3.1120770145207644e-03</internalNodes>\n          <leafValues>\n            4.4630430638790131e-02 -1.4054660499095917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3203 -7.7524736523628235e-02</internalNodes>\n          <leafValues>\n            -6.5038281679153442e-01 1.0468889959156513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3204 2.0978450775146484e-02</internalNodes>\n          <leafValues>\n            -3.0001569539308548e-02 1.9233350455760956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3205 2.0581670105457306e-03</internalNodes>\n          <leafValues>\n            5.1535431295633316e-02 -1.3114020228385925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3206 -7.8407032415270805e-03</internalNodes>\n          <leafValues>\n            -1.3882939517498016e-01 5.0657931715250015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3207 -7.1894749999046326e-02</internalNodes>\n          <leafValues>\n            2.1866980195045471e-01 -3.3615190535783768e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3208 1.4218500256538391e-01</internalNodes>\n          <leafValues>\n            1.2880220077931881e-02 -5.8853518962860107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3209 4.4800378382205963e-03</internalNodes>\n          <leafValues>\n            -5.5522039532661438e-02 1.1976230144500732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3210 -9.4673000276088715e-03</internalNodes>\n          <leafValues>\n            -1.2036380171775818e-01 3.0232360586524010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3211 -1.2275399640202522e-03</internalNodes>\n          <leafValues>\n            8.3563826978206635e-02 -8.7046720087528229e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3212 -6.2556960619986057e-03</internalNodes>\n          <leafValues>\n            6.9355137646198273e-02 -3.5146340727806091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3213 6.4953900873661041e-02</internalNodes>\n          <leafValues>\n            -1.9296510145068169e-02 3.4898158907890320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3214 -3.2067541033029556e-03</internalNodes>\n          <leafValues>\n            -1.5205690264701843e-01 5.5897928774356842e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3215 -4.8260089010000229e-02</internalNodes>\n          <leafValues>\n            -6.0309630632400513e-01 1.0463859885931015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3216 -4.2638331651687622e-03</internalNodes>\n          <leafValues>\n            -1.5278290212154388e-01 1.8424319103360176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3217 4.9363691359758377e-02</internalNodes>\n          <leafValues>\n            -2.5442009791731834e-02 3.9227759838104248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3218 2.3624610621482134e-03</internalNodes>\n          <leafValues>\n            3.8519620895385742e-01 -1.7071360722184181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3219 2.5921489577740431e-03</internalNodes>\n          <leafValues>\n            -1.5459729731082916e-01 4.3975789099931717e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3220 1.1510170064866543e-02</internalNodes>\n          <leafValues>\n            6.0740210115909576e-02 -9.8671890795230865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3221 3.9182868786156178e-03</internalNodes>\n          <leafValues>\n            2.6165749877691269e-02 -2.9697629809379578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3222 7.3265641927719116e-02</internalNodes>\n          <leafValues>\n            5.5715530179440975e-03 -3.0474159121513367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3223 -4.8912810161709785e-03</internalNodes>\n          <leafValues>\n            1.2753780186176300e-01 -6.6236838698387146e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3224 -1.3187030330300331e-02</internalNodes>\n          <leafValues>\n            -2.0257690548896790e-01 3.0369829386472702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3225 1.8196239834651351e-03</internalNodes>\n          <leafValues>\n            4.9198139458894730e-02 -1.3782709836959839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3226 -1.0299400426447392e-02</internalNodes>\n          <leafValues>\n            1.3534359633922577e-01 -2.9193470254540443e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3227 1.7157079279422760e-01</internalNodes>\n          <leafValues>\n            -9.5548974350094795e-03 7.1399718523025513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3228 -3.4571110736578703e-03</internalNodes>\n          <leafValues>\n            6.1094630509614944e-02 -7.6816998422145844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3229 3.3349241130053997e-04</internalNodes>\n          <leafValues>\n            -1.8768610060214996e-01 3.9411719888448715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3230 5.6019209325313568e-02</internalNodes>\n          <leafValues>\n            8.5914824157953262e-03 -7.3577058315277100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3231 6.2299368437379599e-04</internalNodes>\n          <leafValues>\n            -9.4062000513076782e-02 6.7965887486934662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3232 -1.4288679696619511e-02</internalNodes>\n          <leafValues>\n            2.4144929647445679e-01 -2.7025459334254265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3233 -9.9114552140235901e-03</internalNodes>\n          <leafValues>\n            -1.5346029400825500e-01 5.3243361413478851e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3234 -7.0727966725826263e-02</internalNodes>\n          <leafValues>\n            -7.1243101358413696e-01 7.4889077804982662e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3235 1.6112169250845909e-02</internalNodes>\n          <leafValues>\n            -3.5437509417533875e-02 2.2026020288467407e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3236 2.9938609804958105e-03</internalNodes>\n          <leafValues>\n            1.1530820280313492e-02 -9.2017240822315216e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3237 1.4030840247869492e-03</internalNodes>\n          <leafValues>\n            5.4302141070365906e-02 -1.1777610331773758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3238 -8.9894913136959076e-02</internalNodes>\n          <leafValues>\n            -6.7658591270446777e-01 1.5741019742563367e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3239 2.7459259144961834e-03</internalNodes>\n          <leafValues>\n            2.9860800132155418e-02 -2.2091430425643921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3240 2.2225940600037575e-02</internalNodes>\n          <leafValues>\n            -4.6592909842729568e-02 8.0418691039085388e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3241 4.4512529857456684e-03</internalNodes>\n          <leafValues>\n            1.0706499963998795e-01 -6.5101496875286102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3242 -2.1191150881350040e-03</internalNodes>\n          <leafValues>\n            3.9871860295534134e-02 -5.2555959671735764e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3243 1.0229589790105820e-01</internalNodes>\n          <leafValues>\n            1.3386270031332970e-02 -4.5546561479568481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3244 -6.8260570988059044e-03</internalNodes>\n          <leafValues>\n            1.2695349752902985e-01 -5.9704031795263290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3245 -5.6890580803155899e-02</internalNodes>\n          <leafValues>\n            4.0180799365043640e-01 -1.6048269346356392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3246 -1.8590029329061508e-02</internalNodes>\n          <leafValues>\n            -4.0374109148979187e-01 1.3502580113708973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3247 3.3882200717926025e-02</internalNodes>\n          <leafValues>\n            7.8824451193213463e-03 -7.9268622398376465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3248 1.8759339582175016e-03</internalNodes>\n          <leafValues>\n            -3.4521240741014481e-02 1.8177880346775055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3249 1.5652549918740988e-03</internalNodes>\n          <leafValues>\n            4.8419889062643051e-02 -1.5185169875621796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3250 3.9563868194818497e-03</internalNodes>\n          <leafValues>\n            -4.2162090539932251e-02 7.8943721950054169e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>199</maxWeakCount>\n      <stageThreshold>-1.4275209903717041e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3251 8.8487491011619568e-02</internalNodes>\n          <leafValues>\n            -2.2935929894447327e-01 2.4001109600067139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3252 4.3344359844923019e-02</internalNodes>\n          <leafValues>\n            -1.9927449524402618e-01 2.0298740267753601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3253 1.5985079109668732e-02</internalNodes>\n          <leafValues>\n            -1.9890889525413513e-01 1.9233879446983337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3254 9.8411232233047485e-02</internalNodes>\n          <leafValues>\n            -9.4830892980098724e-02 2.4474050104618073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3255 1.0079979896545410e-02</internalNodes>\n          <leafValues>\n            -4.8000910878181458e-01 5.9808451682329178e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3256 6.2629938125610352e-02</internalNodes>\n          <leafValues>\n            -1.5902659296989441e-01 1.5163069963455200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3257 1.3623869977891445e-02</internalNodes>\n          <leafValues>\n            -2.7451339364051819e-01 9.0433366596698761e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3258 -3.8067731074988842e-03</internalNodes>\n          <leafValues>\n            -2.9342180490493774e-01 7.3020830750465393e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3259 -1.4649610035121441e-02</internalNodes>\n          <leafValues>\n            2.6059079170227051e-01 -9.5248378813266754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3260 -4.9288192531093955e-04</internalNodes>\n          <leafValues>\n            5.9352219104766846e-02 -2.8081470727920532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3261 -5.1220930181443691e-03</internalNodes>\n          <leafValues>\n            -2.4218030273914337e-01 8.1701509654521942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3262 3.3120220177806914e-04</internalNodes>\n          <leafValues>\n            -4.0093910694122314e-01 3.4026090055704117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3263 -7.4724480509757996e-04</internalNodes>\n          <leafValues>\n            6.0560788959264755e-02 -2.9127869009971619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3264 4.8829670995473862e-02</internalNodes>\n          <leafValues>\n            -7.2298422455787659e-02 2.6132971048355103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3265 2.6994010433554649e-02</internalNodes>\n          <leafValues>\n            9.5457129180431366e-02 -2.6758649945259094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3266 -2.1151660475879908e-03</internalNodes>\n          <leafValues>\n            -2.5773069262504578e-01 5.3247869014739990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3267 2.2652999177807942e-05</internalNodes>\n          <leafValues>\n            -3.0092310905456543e-01 5.9096790850162506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3268 1.1034930124878883e-02</internalNodes>\n          <leafValues>\n            -7.4277937412261963e-02 1.9048790633678436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3269 -1.0275219567120075e-02</internalNodes>\n          <leafValues>\n            -3.2835999131202698e-01 4.9218688160181046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3270 -8.3319991827011108e-03</internalNodes>\n          <leafValues>\n            -2.9651468992233276e-01 3.9428789168596268e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3271 5.0808671861886978e-02</internalNodes>\n          <leafValues>\n            -4.7661241143941879e-02 3.7404251098632812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3272 -1.2126479996368289e-03</internalNodes>\n          <leafValues>\n            -1.2148889899253845e-01 6.5059438347816467e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3273 4.1254470124840736e-03</internalNodes>\n          <leafValues>\n            -1.4912040531635284e-01 1.1146119982004166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3274 -1.8284359946846962e-02</internalNodes>\n          <leafValues>\n            -2.8573518991470337e-01 5.9268131852149963e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3275 1.4156280457973480e-01</internalNodes>\n          <leafValues>\n            -3.4436151385307312e-02 4.6374419331550598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3276 -3.6982420831918716e-02</internalNodes>\n          <leafValues>\n            -5.0853198766708374e-01 2.5087080895900726e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3277 5.0303530879318714e-03</internalNodes>\n          <leafValues>\n            9.4626903533935547e-02 -1.6120310127735138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3278 -4.6149080991744995e-01</internalNodes>\n          <leafValues>\n            4.5096570253372192e-01 -3.1209290027618408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3279 -1.9794689491391182e-02</internalNodes>\n          <leafValues>\n            -4.1046530008316040e-01 3.8790289312601089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3280 -2.3872030898928642e-02</internalNodes>\n          <leafValues>\n            -1.5252740681171417e-01 9.2825219035148621e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3281 1.8736299825832248e-03</internalNodes>\n          <leafValues>\n            -1.9186599552631378e-01 6.9048486649990082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3282 5.8244299143552780e-02</internalNodes>\n          <leafValues>\n            -2.2612230852246284e-02 2.1975080668926239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3283 1.5281150117516518e-02</internalNodes>\n          <leafValues>\n            5.6379750370979309e-02 -2.4171100556850433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3284 1.3347120583057404e-01</internalNodes>\n          <leafValues>\n            -4.1846349835395813e-02 1.3641799986362457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3285 -1.8359240144491196e-02</internalNodes>\n          <leafValues>\n            1.3650700449943542e-01 -1.0537090152502060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3286 -1.1236529797315598e-02</internalNodes>\n          <leafValues>\n            -2.1045160293579102e-01 6.1872761696577072e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3287 -7.2013743221759796e-02</internalNodes>\n          <leafValues>\n            -3.8488849997520447e-01 3.6731179803609848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3288 -1.9893420860171318e-02</internalNodes>\n          <leafValues>\n            1.9913719594478607e-01 -5.4470948874950409e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3289 -8.1342989578843117e-03</internalNodes>\n          <leafValues>\n            -2.7529388666152954e-01 4.7152820974588394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3290 -1.3614459894597530e-02</internalNodes>\n          <leafValues>\n            1.9248710572719574e-01 -6.0025930404663086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3291 -6.4553669653832912e-03</internalNodes>\n          <leafValues>\n            -2.1480080485343933e-01 6.2654919922351837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3292 -7.2288706898689270e-02</internalNodes>\n          <leafValues>\n            -5.3200727701187134e-01 2.2132480517029762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3293 -7.0425979793071747e-02</internalNodes>\n          <leafValues>\n            -3.2588490843772888e-01 3.7150900810956955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3294 -1.2219670228660107e-02</internalNodes>\n          <leafValues>\n            -6.5945722162723541e-02 2.8728110715746880e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3295 6.9816941395401955e-03</internalNodes>\n          <leafValues>\n            -2.8508388996124268e-01 4.2512468993663788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3296 -2.1437550894916058e-03</internalNodes>\n          <leafValues>\n            -1.0019320249557495e-01 7.1198999881744385e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3297 -1.5813990030437708e-03</internalNodes>\n          <leafValues>\n            -1.2926709651947021e-01 9.5332272350788116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3298 2.1735160771640949e-05</internalNodes>\n          <leafValues>\n            -1.9246159493923187e-01 5.3724698722362518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3299 -1.0075280070304871e-01</internalNodes>\n          <leafValues>\n            5.8181059360504150e-01 -2.1155519410967827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3300 8.0153037561103702e-04</internalNodes>\n          <leafValues>\n            -1.6752170026302338e-01 6.1912689357995987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3301 -1.3424370437860489e-02</internalNodes>\n          <leafValues>\n            1.7007820308208466e-01 -6.5821729600429535e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3302 2.5006510317325592e-02</internalNodes>\n          <leafValues>\n            3.1838789582252502e-02 -3.5664460062980652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3303 -2.3061310872435570e-02</internalNodes>\n          <leafValues>\n            -5.3446078300476074e-01 2.0500430837273598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3304 -8.1409228732809424e-04</internalNodes>\n          <leafValues>\n            7.3716811835765839e-02 -9.8385728895664215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3305 -1.3083440251648426e-02</internalNodes>\n          <leafValues>\n            2.3585100471973419e-01 -4.7893758863210678e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3306 1.0480909608304501e-02</internalNodes>\n          <leafValues>\n            -6.7725770175457001e-02 1.1783230304718018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3307 -4.3198268860578537e-02</internalNodes>\n          <leafValues>\n            -4.3816858530044556e-01 2.5101570412516594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3308 -3.2453269232064486e-03</internalNodes>\n          <leafValues>\n            -2.2451759874820709e-01 4.3056890368461609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3309 -1.6294110100716352e-03</internalNodes>\n          <leafValues>\n            -2.3388780653476715e-01 4.5073401182889938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3310 -3.2911408692598343e-02</internalNodes>\n          <leafValues>\n            2.1012680232524872e-01 -2.1296700462698936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3311 1.4785619896429125e-05</internalNodes>\n          <leafValues>\n            -7.0854157209396362e-02 1.4696949720382690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3312 -6.0208540409803391e-02</internalNodes>\n          <leafValues>\n            -5.2135831117630005e-01 1.9577400758862495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3313 1.1327289976179600e-03</internalNodes>\n          <leafValues>\n            4.4817470014095306e-02 -2.4390450119972229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3314 8.3639882504940033e-03</internalNodes>\n          <leafValues>\n            -5.6976079940795898e-02 1.1684290319681168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3315 1.4313389547169209e-02</internalNodes>\n          <leafValues>\n            4.7445211559534073e-02 -2.2202989459037781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3316 -1.1530060321092606e-01</internalNodes>\n          <leafValues>\n            8.6662977933883667e-01 -4.2397230863571167e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3317 -2.0798090845346451e-02</internalNodes>\n          <leafValues>\n            2.8666529059410095e-01 -4.0919508785009384e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3318 -1.8268700689077377e-02</internalNodes>\n          <leafValues>\n            1.3087140023708344e-01 -4.5348200947046280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3319 -2.5494489073753357e-01</internalNodes>\n          <leafValues>\n            -3.2410839200019836e-01 4.0496330708265305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3320 -2.1786570549011230e-02</internalNodes>\n          <leafValues>\n            3.3126661181449890e-01 -3.7021800875663757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3321 4.2743898928165436e-02</internalNodes>\n          <leafValues>\n            3.2316859811544418e-02 -3.5259619355201721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3322 3.4730590879917145e-02</internalNodes>\n          <leafValues>\n            3.4049548208713531e-02 -2.1393370628356934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3323 -8.8458160462323576e-05</internalNodes>\n          <leafValues>\n            -3.1134480237960815e-01 3.9364520460367203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3324 2.2288469970226288e-01</internalNodes>\n          <leafValues>\n            -8.7889749556779861e-03 8.6566871404647827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3325 2.7045139670372009e-01</internalNodes>\n          <leafValues>\n            -5.2694901823997498e-02 1.8746510148048401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3326 -2.4789940565824509e-02</internalNodes>\n          <leafValues>\n            2.7650299668312073e-01 -2.7306249365210533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3327 -3.5731170326471329e-02</internalNodes>\n          <leafValues>\n            4.1157469153404236e-01 -2.2886089980602264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3328 4.7842580825090408e-02</internalNodes>\n          <leafValues>\n            2.2989360615611076e-02 -4.1287249326705933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3329 -3.1846091151237488e-02</internalNodes>\n          <leafValues>\n            3.8073039054870605e-01 -2.9582230374217033e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3330 -6.9219218567013741e-03</internalNodes>\n          <leafValues>\n            -1.3741379976272583e-01 4.8710118979215622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3331 4.1339758783578873e-02</internalNodes>\n          <leafValues>\n            4.4119630008935928e-02 -2.3561610281467438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3332 -3.4157071262598038e-02</internalNodes>\n          <leafValues>\n            -2.4877929687500000e-01 1.1872059665620327e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3333 -1.2198990210890770e-02</internalNodes>\n          <leafValues>\n            -2.1426199376583099e-01 5.1533300429582596e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3334 -7.9321218654513359e-03</internalNodes>\n          <leafValues>\n            8.1553332507610321e-02 -6.9921717047691345e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3335 -4.2665388435125351e-02</internalNodes>\n          <leafValues>\n            -5.0616562366485596e-01 1.9237969070672989e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3336 3.5445880144834518e-02</internalNodes>\n          <leafValues>\n            -1.6394840553402901e-02 1.7057849466800690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3337 4.5686280727386475e-01</internalNodes>\n          <leafValues>\n            1.9264170899987221e-02 -5.4413592815399170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3338 3.1118420884013176e-02</internalNodes>\n          <leafValues>\n            -3.0776979401707649e-02 1.3581100106239319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3339 -1.6103679314255714e-02</internalNodes>\n          <leafValues>\n            2.1244280040264130e-01 -4.8341780900955200e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3340 5.7916441000998020e-03</internalNodes>\n          <leafValues>\n            -7.3984377086162567e-02 3.5749029368162155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3341 -6.5660297870635986e-02</internalNodes>\n          <leafValues>\n            2.6183378696441650e-01 -4.1004821658134460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3342 8.1464983522891998e-02</internalNodes>\n          <leafValues>\n            1.2928999960422516e-02 -3.5362771153450012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3343 1.2561170384287834e-02</internalNodes>\n          <leafValues>\n            -1.9108769297599792e-01 6.9965943694114685e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3344 7.8783802688121796e-02</internalNodes>\n          <leafValues>\n            -5.4801939986646175e-03 3.9217329025268555e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3345 3.3984828740358353e-02</internalNodes>\n          <leafValues>\n            8.4328763186931610e-02 -1.2477640062570572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3346 1.7718339338898659e-02</internalNodes>\n          <leafValues>\n            4.4793829321861267e-02 -1.9760879874229431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3347 -9.8835285753011703e-03</internalNodes>\n          <leafValues>\n            -1.5149329602718353e-01 6.7348048090934753e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3348 2.3850230500102043e-02</internalNodes>\n          <leafValues>\n            -3.3219821751117706e-02 1.6131630539894104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3349 -3.9590701460838318e-02</internalNodes>\n          <leafValues>\n            3.9903929829597473e-01 -2.8885990381240845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3350 3.4961920231580734e-02</internalNodes>\n          <leafValues>\n            2.2103229537606239e-02 -5.2885407209396362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3351 9.4825841486454010e-02</internalNodes>\n          <leafValues>\n            9.5985615625977516e-03 -8.2035672664642334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3352 -1.0215540230274200e-01</internalNodes>\n          <leafValues>\n            -2.0551559329032898e-01 3.0388559680432081e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3353 -9.3128867447376251e-03</internalNodes>\n          <leafValues>\n            3.6827068775892258e-02 -2.4656419456005096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3354 -5.4135788232088089e-03</internalNodes>\n          <leafValues>\n            -2.3878090083599091e-01 4.1015189141035080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3355 -2.6281980797648430e-02</internalNodes>\n          <leafValues>\n            2.7853861451148987e-01 -3.6868080496788025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3356 -9.9223516881465912e-03</internalNodes>\n          <leafValues>\n            -2.5322121381759644e-01 3.3522550016641617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3357 -1.7109709978103638e-01</internalNodes>\n          <leafValues>\n            -2.9404911398887634e-01 3.2432679086923599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3358 -8.7599586695432663e-03</internalNodes>\n          <leafValues>\n            6.8787500262260437e-02 -1.0647170245647430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3359 1.2942530214786530e-01</internalNodes>\n          <leafValues>\n            1.3241300359368324e-02 -6.8923670053482056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3360 -4.7723919153213501e-02</internalNodes>\n          <leafValues>\n            2.2214810550212860e-01 -2.8517080470919609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3361 1.0812310129404068e-01</internalNodes>\n          <leafValues>\n            1.1902020312845707e-02 -7.7915120124816895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3362 -2.7494689449667931e-02</internalNodes>\n          <leafValues>\n            -3.0192640423774719e-01 2.8540210798382759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3363 -4.9534138292074203e-02</internalNodes>\n          <leafValues>\n            -3.0015140771865845e-01 3.1750950962305069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3364 -1.0358350351452827e-02</internalNodes>\n          <leafValues>\n            1.2287119776010513e-01 -3.9123039692640305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3365 -3.2705869525671005e-02</internalNodes>\n          <leafValues>\n            -3.3354911208152771e-01 2.7965290471911430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3366 -1.3580479659140110e-02</internalNodes>\n          <leafValues>\n            1.1192899942398071e-01 -4.9471028149127960e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3367 5.5075851269066334e-03</internalNodes>\n          <leafValues>\n            -1.3118129968643188e-01 6.9403477013111115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3368 7.5508110225200653e-02</internalNodes>\n          <leafValues>\n            -2.9019629582762718e-02 3.9413800835609436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3369 5.6811410933732986e-02</internalNodes>\n          <leafValues>\n            2.6788659393787384e-02 -4.1989549994468689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3370 5.0004580989480019e-03</internalNodes>\n          <leafValues>\n            4.6239160001277924e-02 -6.7620649933815002e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3371 1.9717490300536156e-02</internalNodes>\n          <leafValues>\n            -6.0402508825063705e-02 1.6632139682769775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3372 -6.4729452133178711e-02</internalNodes>\n          <leafValues>\n            -5.2484118938446045e-01 2.7922600507736206e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3373 -3.0683130025863647e-02</internalNodes>\n          <leafValues>\n            2.1945460140705109e-01 -4.8111628741025925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3374 8.1467535346746445e-03</internalNodes>\n          <leafValues>\n            6.0279220342636108e-02 -1.1600890010595322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3375 7.9492190852761269e-03</internalNodes>\n          <leafValues>\n            8.3563491702079773e-02 -1.6053000092506409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3376 -2.2406199946999550e-02</internalNodes>\n          <leafValues>\n            2.8271418809890747e-01 -2.8184479102492332e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3377 8.2993790507316589e-02</internalNodes>\n          <leafValues>\n            1.0475059971213341e-02 -9.6875292062759399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3378 -7.0176632143557072e-03</internalNodes>\n          <leafValues>\n            -1.3753229379653931e-01 6.8205498158931732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3379 -9.7560193389654160e-03</internalNodes>\n          <leafValues>\n            -1.3707080483436584e-01 7.2890587151050568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3380 -5.2217379212379456e-02</internalNodes>\n          <leafValues>\n            -6.4300441741943359e-01 1.4492220245301723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3381 -7.8029942233115435e-04</internalNodes>\n          <leafValues>\n            -2.6479271054267883e-01 3.3517841249704361e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3382 3.7919931113719940e-02</internalNodes>\n          <leafValues>\n            -8.4846787154674530e-02 1.1260589957237244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3383 3.0561289750039577e-03</internalNodes>\n          <leafValues>\n            4.8086941242218018e-02 -1.9009250402450562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3384 6.5862268209457397e-02</internalNodes>\n          <leafValues>\n            -5.2452040836215019e-03 9.1280621290206909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3385 1.5568210184574127e-01</internalNodes>\n          <leafValues>\n            2.0884050056338310e-02 -4.9580439925193787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3386 -1.9058469915762544e-03</internalNodes>\n          <leafValues>\n            1.8305900692939758e-01 -4.9756310880184174e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3387 -9.8356999456882477e-02</internalNodes>\n          <leafValues>\n            4.8020449280738831e-01 -2.0384309813380241e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3388 4.2754490859806538e-03</internalNodes>\n          <leafValues>\n            4.0095929056406021e-02 -1.4071129262447357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3389 -1.4033010229468346e-02</internalNodes>\n          <leafValues>\n            -2.0791560411453247e-01 5.2576299756765366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3390 8.0179408192634583e-02</internalNodes>\n          <leafValues>\n            -2.5790559127926826e-02 3.7651219964027405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3391 1.8175759911537170e-01</internalNodes>\n          <leafValues>\n            1.1428649537265301e-02 -8.3382111787796021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3392 -1.9141690805554390e-02</internalNodes>\n          <leafValues>\n            -5.0522857904434204e-01 1.2605519965291023e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3393 -5.1260828971862793e-02</internalNodes>\n          <leafValues>\n            5.8292531967163086e-01 -1.6109749674797058e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3394 6.4478136599063873e-02</internalNodes>\n          <leafValues>\n            1.0237329639494419e-02 -6.0302352905273438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3395 3.1238300725817680e-02</internalNodes>\n          <leafValues>\n            2.0845850929617882e-02 -3.9785829186439514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3396 -5.0772321410477161e-03</internalNodes>\n          <leafValues>\n            1.2331540137529373e-01 -3.5224981606006622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3397 -1.9385579507797956e-03</internalNodes>\n          <leafValues>\n            1.5726689994335175e-01 -7.3316320776939392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3398 2.4099789559841156e-02</internalNodes>\n          <leafValues>\n            -1.1178609728813171e-01 1.0738980025053024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3399 -8.8700000196695328e-03</internalNodes>\n          <leafValues>\n            -3.6048200726509094e-01 2.7034249156713486e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3400 -3.7424121052026749e-02</internalNodes>\n          <leafValues>\n            -3.5229408740997314e-01 1.6786530613899231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3401 -2.0067069679498672e-02</internalNodes>\n          <leafValues>\n            -2.7460938692092896e-01 3.9532590657472610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3402 6.5169870853424072e-02</internalNodes>\n          <leafValues>\n            1.1402159929275513e-02 -2.4819959700107574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3403 3.8157470524311066e-02</internalNodes>\n          <leafValues>\n            4.6323310583829880e-02 -2.0989510416984558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3404 1.1075180023908615e-02</internalNodes>\n          <leafValues>\n            3.4411158412694931e-02 -5.1256500184535980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3405 1.1583480238914490e-01</internalNodes>\n          <leafValues>\n            4.2282830923795700e-02 -2.1705499291419983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3406 -4.6720780432224274e-02</internalNodes>\n          <leafValues>\n            2.3093520104885101e-01 -8.3234477788209915e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3407 1.2567450106143951e-01</internalNodes>\n          <leafValues>\n            -4.9882501363754272e-02 2.1018449962139130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3408 1.8088010256178677e-04</internalNodes>\n          <leafValues>\n            -1.1836589872837067e-01 8.4278896450996399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3409 1.0470690205693245e-02</internalNodes>\n          <leafValues>\n            -8.6210608482360840e-02 1.1760850250720978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3410 5.8065719902515411e-02</internalNodes>\n          <leafValues>\n            1.5582700259983540e-02 -7.4217921495437622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3411 2.2783069871366024e-03</internalNodes>\n          <leafValues>\n            -1.9151380658149719e-01 4.7990638762712479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3412 -6.9596558809280396e-02</internalNodes>\n          <leafValues>\n            -7.3241692781448364e-01 1.1130559723824263e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3413 5.8907870203256607e-02</internalNodes>\n          <leafValues>\n            1.6878390684723854e-02 -5.4400408267974854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3414 -8.0658823251724243e-02</internalNodes>\n          <leafValues>\n            2.9922959208488464e-01 -1.8570570275187492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3415 1.7686929553747177e-02</internalNodes>\n          <leafValues>\n            4.2936161160469055e-02 -2.2591550648212433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3416 -1.6319070011377335e-02</internalNodes>\n          <leafValues>\n            1.8889640271663666e-01 -4.7047398984432220e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3417 -3.9527568966150284e-02</internalNodes>\n          <leafValues>\n            -3.2657331228256226e-01 2.8762219473719597e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3418 1.9769819919019938e-03</internalNodes>\n          <leafValues>\n            -8.8217496871948242e-02 5.7402729988098145e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3419 -3.0272029340267181e-02</internalNodes>\n          <leafValues>\n            -5.1177912950515747e-01 1.7359249293804169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3420 5.3786419332027435e-02</internalNodes>\n          <leafValues>\n            1.2071570381522179e-02 -4.0201959013938904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3421 -9.4136483967304230e-03</internalNodes>\n          <leafValues>\n            2.4728150665760040e-01 -3.6734741181135178e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3422 -5.9014528989791870e-02</internalNodes>\n          <leafValues>\n            -1.3277289271354675e-01 1.5220739878714085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3423 8.9417606592178345e-02</internalNodes>\n          <leafValues>\n            -2.5917148590087891e-01 3.7563629448413849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3424 -8.7996140122413635e-02</internalNodes>\n          <leafValues>\n            4.9200880527496338e-01 -2.1210839971899986e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3425 -5.0747569650411606e-02</internalNodes>\n          <leafValues>\n            -4.8567768931388855e-01 2.0005319267511368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3426 -3.8918260484933853e-02</internalNodes>\n          <leafValues>\n            -8.9558547735214233e-01 7.8960238024592400e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3427 2.0968139171600342e-02</internalNodes>\n          <leafValues>\n            -5.4431710392236710e-02 1.6123360395431519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3428 -3.2103069126605988e-02</internalNodes>\n          <leafValues>\n            -3.6822700500488281e-01 1.9163349643349648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3429 5.5592609569430351e-03</internalNodes>\n          <leafValues>\n            7.8368440270423889e-02 -1.1842489987611771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3430 5.9554249048233032e-02</internalNodes>\n          <leafValues>\n            -5.2290938794612885e-02 3.6194879561662674e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3431 -1.0973160155117512e-02</internalNodes>\n          <leafValues>\n            1.5855990350246429e-01 -5.5804491043090820e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3432 -1.1934650130569935e-02</internalNodes>\n          <leafValues>\n            -2.5717508792877197e-01 3.2829850912094116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3433 6.0441631823778152e-02</internalNodes>\n          <leafValues>\n            -3.8720801472663879e-02 2.2971870005130768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3434 -8.2118069985881448e-04</internalNodes>\n          <leafValues>\n            6.9738790392875671e-02 -1.5992000699043274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3435 2.0469389855861664e-02</internalNodes>\n          <leafValues>\n            -8.4349267184734344e-02 1.0139500349760056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3436 -7.6305761933326721e-02</internalNodes>\n          <leafValues>\n            8.3174228668212891e-01 -5.0806580111384392e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3437 6.0551889240741730e-02</internalNodes>\n          <leafValues>\n            -3.7971161305904388e-02 2.1850149333477020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3438 -4.1085779666900635e-03</internalNodes>\n          <leafValues>\n            -1.1496649682521820e-01 3.6647479981184006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3439 1.2399969622492790e-02</internalNodes>\n          <leafValues>\n            6.2838301062583923e-02 -1.4144660532474518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3440 -7.1455702185630798e-02</internalNodes>\n          <leafValues>\n            -4.2673790454864502e-01 1.3947109691798687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3441 3.3709030598402023e-02</internalNodes>\n          <leafValues>\n            -1.2713599950075150e-02 7.4775099754333496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3442 3.4742768853902817e-02</internalNodes>\n          <leafValues>\n            2.0969500765204430e-02 -1.4630280435085297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3443 -4.3705299496650696e-02</internalNodes>\n          <leafValues>\n            1.8064750730991364e-01 -5.2335180342197418e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3444 8.4926873445510864e-02</internalNodes>\n          <leafValues>\n            6.9014527834951878e-03 -2.6073959469795227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3445 -1.7119079828262329e-02</internalNodes>\n          <leafValues>\n            -1.4590080082416534e-01 6.7484676837921143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3446 3.3630719780921936e-01</internalNodes>\n          <leafValues>\n            7.8989071771502495e-03 -8.3852928876876831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3447 1.2371230125427246e-01</internalNodes>\n          <leafValues>\n            -2.5482710450887680e-02 3.9098039269447327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3448 -1.1195900291204453e-01</internalNodes>\n          <leafValues>\n            -3.8317111134529114e-01 6.0780011117458344e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3449 -1.0881890356540680e-01</internalNodes>\n          <leafValues>\n            -7.1362990140914917e-01 1.2700069695711136e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>268</maxWeakCount>\n      <stageThreshold>-1.3290590047836304e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3450 9.6844611689448357e-03</internalNodes>\n          <leafValues>\n            -1.9455039501190186e-01 2.0048019289970398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3451 -6.6196201369166374e-03</internalNodes>\n          <leafValues>\n            9.2211641371250153e-02 -3.4824401140213013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3452 5.6163137778639793e-03</internalNodes>\n          <leafValues>\n            6.6767610609531403e-02 -4.1172260046005249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3453 -1.6882510390132666e-03</internalNodes>\n          <leafValues>\n            7.2629712522029877e-02 -2.0694479346275330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3454 -2.9599820263683796e-03</internalNodes>\n          <leafValues>\n            -2.0635899901390076e-01 7.7335417270660400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3455 1.7798959743231535e-03</internalNodes>\n          <leafValues>\n            -3.2149469852447510e-01 6.4107127487659454e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3456 -4.0264189010486007e-04</internalNodes>\n          <leafValues>\n            7.9512253403663635e-02 -2.4051089584827423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3457 -5.0024548545479774e-04</internalNodes>\n          <leafValues>\n            8.6675606667995453e-02 -2.0504170656204224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3458 -2.0284270867705345e-03</internalNodes>\n          <leafValues>\n            1.4322499930858612e-01 -1.2220569700002670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3459 6.0648359358310699e-03</internalNodes>\n          <leafValues>\n            3.7860579788684845e-02 -2.4375459551811218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3460 9.6257496625185013e-03</internalNodes>\n          <leafValues>\n            5.7141840457916260e-02 -2.8827920556068420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3461 2.5888499803841114e-03</internalNodes>\n          <leafValues>\n            -1.8906019628047943e-01 8.6430206894874573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3462 2.9090950265526772e-03</internalNodes>\n          <leafValues>\n            -8.3108469843864441e-02 1.7618839442729950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3463 2.2233440540730953e-03</internalNodes>\n          <leafValues>\n            2.0150169730186462e-02 -2.4882750213146210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3464 -9.8997671157121658e-03</internalNodes>\n          <leafValues>\n            -2.0639769732952118e-01 6.0985010117292404e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3465 1.9689390435814857e-02</internalNodes>\n          <leafValues>\n            -3.4452438354492188e-02 2.0069779455661774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3466 2.1106770262122154e-02</internalNodes>\n          <leafValues>\n            4.3886858969926834e-02 -2.6610890030860901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3467 -7.2028310969471931e-03</internalNodes>\n          <leafValues>\n            1.7015519738197327e-01 -5.4639339447021484e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3468 4.0647671557962894e-03</internalNodes>\n          <leafValues>\n            5.2182808518409729e-02 -2.1304030716419220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3469 -2.8419198933988810e-03</internalNodes>\n          <leafValues>\n            5.3180210292339325e-02 -1.7669560015201569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3470 -4.9461819231510162e-02</internalNodes>\n          <leafValues>\n            3.7221330404281616e-01 -3.3969849348068237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3471 4.3024159967899323e-02</internalNodes>\n          <leafValues>\n            3.1251549720764160e-02 -3.1831890344619751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3472 -7.0111698005348444e-04</internalNodes>\n          <leafValues>\n            -2.0340210199356079e-01 5.8964170515537262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3473 5.7489587925374508e-04</internalNodes>\n          <leafValues>\n            -9.4937190413475037e-02 1.0538189858198166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3474 -1.4911209291312844e-04</internalNodes>\n          <leafValues>\n            6.8423688411712646e-02 -1.8207779526710510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3475 8.7993890047073364e-03</internalNodes>\n          <leafValues>\n            3.3866070210933685e-02 -1.1625579744577408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3476 -8.7150773033499718e-03</internalNodes>\n          <leafValues>\n            1.8041290342807770e-01 -6.5721526741981506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3477 -1.3727629557251930e-02</internalNodes>\n          <leafValues>\n            -1.3337810337543488e-01 3.5966601222753525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3478 -2.3620850406587124e-03</internalNodes>\n          <leafValues>\n            -1.9088070094585419e-01 6.1849810183048248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3479 1.7863539978861809e-03</internalNodes>\n          <leafValues>\n            -8.3071537315845490e-02 9.8926126956939697e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3480 -9.4514712691307068e-03</internalNodes>\n          <leafValues>\n            -1.8024919927120209e-01 6.0146760195493698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3481 4.8195280134677887e-02</internalNodes>\n          <leafValues>\n            -2.6617299765348434e-02 3.0134469270706177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3482 -1.2248229468241334e-03</internalNodes>\n          <leafValues>\n            -2.3560139536857605e-01 4.5572910457849503e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3483 -4.2851101607084274e-02</internalNodes>\n          <leafValues>\n            1.6086329519748688e-01 -2.3455940186977386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3484 3.4798709675669670e-03</internalNodes>\n          <leafValues>\n            7.6882630586624146e-02 -1.3299170136451721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3485 -3.9859190583229065e-03</internalNodes>\n          <leafValues>\n            4.3115191161632538e-02 -2.3132759332656860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3486 4.3139848858118057e-02</internalNodes>\n          <leafValues>\n            -3.6780070513486862e-02 2.3883450031280518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3487 -1.7436629161238670e-02</internalNodes>\n          <leafValues>\n            -1.4046260714530945e-01 5.9077050536870956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3488 -7.5254887342453003e-02</internalNodes>\n          <leafValues>\n            3.6328521370887756e-01 -3.1380280852317810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3489 6.0125540941953659e-02</internalNodes>\n          <leafValues>\n            8.2496693357825279e-03 -2.3485200107097626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3490 1.2755369534716010e-03</internalNodes>\n          <leafValues>\n            -1.2268169969320297e-01 9.0071536600589752e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3491 -1.3465109514072537e-03</internalNodes>\n          <leafValues>\n            -1.4554239809513092e-01 7.0761166512966156e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3492 2.3758469149470329e-02</internalNodes>\n          <leafValues>\n            -5.1834989339113235e-02 1.7583900690078735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3493 2.2376580163836479e-03</internalNodes>\n          <leafValues>\n            9.1763339936733246e-02 -1.1206050217151642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3494 3.8662939332425594e-03</internalNodes>\n          <leafValues>\n            6.2390189617872238e-02 -1.5142339468002319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3495 7.6868042349815369e-02</internalNodes>\n          <leafValues>\n            -2.7640199288725853e-02 3.7636131048202515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3496 1.6617199406027794e-02</internalNodes>\n          <leafValues>\n            3.3067818731069565e-02 -3.0950650572776794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3497 -4.6145029366016388e-02</internalNodes>\n          <leafValues>\n            1.0798139870166779e-01 -5.8277439326047897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3498 9.8206609487533569e-02</internalNodes>\n          <leafValues>\n            1.7502160742878914e-02 -5.0861918926239014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3499 4.7838049940764904e-03</internalNodes>\n          <leafValues>\n            -1.0207810252904892e-01 5.7796850800514221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3500 2.0467689260840416e-02</internalNodes>\n          <leafValues>\n            -2.0362010225653648e-02 4.5001450181007385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3501 1.5141700394451618e-02</internalNodes>\n          <leafValues>\n            2.8140379115939140e-02 -8.5130028426647186e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3502 5.2229189313948154e-03</internalNodes>\n          <leafValues>\n            -5.7789258658885956e-02 1.5580329298973083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3503 1.8871299922466278e-02</internalNodes>\n          <leafValues>\n            2.7053799480199814e-02 -1.2046360224485397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3504 4.5608580112457275e-03</internalNodes>\n          <leafValues>\n            -7.9567588865756989e-02 1.1571010202169418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3505 -1.2172549962997437e-02</internalNodes>\n          <leafValues>\n            -1.6149179637432098e-01 2.4571539834141731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3506 -1.6468809545040131e-01</internalNodes>\n          <leafValues>\n            -6.5712791681289673e-01 1.2428689748048782e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3507 1.8241419456899166e-03</internalNodes>\n          <leafValues>\n            -9.1526739299297333e-02 8.7851390242576599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3508 -5.4591207299381495e-04</internalNodes>\n          <leafValues>\n            -1.2581209838390350e-01 6.6968381404876709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3509 2.1177160087972879e-03</internalNodes>\n          <leafValues>\n            1.4261330664157867e-01 -6.1729468405246735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3510 1.1853260220959783e-03</internalNodes>\n          <leafValues>\n            -9.1425627470016479e-02 9.2089362442493439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3511 7.9899299889802933e-03</internalNodes>\n          <leafValues>\n            -6.3119217753410339e-02 1.5446299314498901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3512 4.5044990256428719e-03</internalNodes>\n          <leafValues>\n            4.0920298546552658e-02 -2.2475910186767578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3513 7.4563547968864441e-03</internalNodes>\n          <leafValues>\n            -3.9540700614452362e-02 2.4208679795265198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3514 6.3897971995174885e-03</internalNodes>\n          <leafValues>\n            5.2900739014148712e-02 -1.7378969490528107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3515 -5.9052068740129471e-02</internalNodes>\n          <leafValues>\n            -4.7957658767700195e-01 8.3919316530227661e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3516 -5.3746208548545837e-02</internalNodes>\n          <leafValues>\n            -5.0854432582855225e-01 1.6880670562386513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3517 -9.1852366924285889e-02</internalNodes>\n          <leafValues>\n            1.9466249644756317e-01 -1.1129629798233509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3518 1.5038819611072540e-01</internalNodes>\n          <leafValues>\n            -2.0112350583076477e-02 4.4738510251045227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3519 -2.1317429840564728e-02</internalNodes>\n          <leafValues>\n            2.9676139354705811e-01 -2.8231840580701828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3520 1.2711419723927975e-02</internalNodes>\n          <leafValues>\n            3.3570941537618637e-02 -2.8972589969635010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3521 -9.3287907540798187e-02</internalNodes>\n          <leafValues>\n            6.4380300045013428e-01 -1.4923879876732826e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3522 -4.5716729946434498e-03</internalNodes>\n          <leafValues>\n            -2.6994249224662781e-01 3.3246111124753952e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3523 -3.4010890522040427e-04</internalNodes>\n          <leafValues>\n            8.1715546548366547e-02 -1.0642260313034058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3524 -2.6096890214830637e-03</internalNodes>\n          <leafValues>\n            1.8403419852256775e-01 -6.4724236726760864e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3525 4.6332611236721277e-04</internalNodes>\n          <leafValues>\n            -1.4283409714698792e-01 4.2033299803733826e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3526 1.4095300436019897e-01</internalNodes>\n          <leafValues>\n            9.4516919925808907e-03 -7.7727228403091431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3527 2.0406199619174004e-03</internalNodes>\n          <leafValues>\n            -6.6505432128906250e-02 1.1805409938097000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3528 -2.2302009165287018e-02</internalNodes>\n          <leafValues>\n            -1.0419870167970657e-01 8.9387677609920502e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3529 3.9168349467217922e-03</internalNodes>\n          <leafValues>\n            2.5769380852580070e-02 -1.6625499725341797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3530 6.1153857968747616e-03</internalNodes>\n          <leafValues>\n            -6.2531687319278717e-02 1.4075349271297455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3531 -2.9564529540948570e-05</internalNodes>\n          <leafValues>\n            4.6978309750556946e-02 -1.0862989723682404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3532 1.4300559996627271e-04</internalNodes>\n          <leafValues>\n            -1.0005149990320206e-01 8.0335728824138641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3533 1.1430789716541767e-02</internalNodes>\n          <leafValues>\n            2.3201359435915947e-02 -3.1366908550262451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3534 -1.3724610209465027e-02</internalNodes>\n          <leafValues>\n            1.2814410030841827e-01 -6.1290029436349869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3535 -4.5548770576715469e-02</internalNodes>\n          <leafValues>\n            -4.7528308629989624e-01 1.3631340116262436e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3536 7.6914107194170356e-04</internalNodes>\n          <leafValues>\n            -8.9416027069091797e-02 9.6091486513614655e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3537 6.3840910792350769e-02</internalNodes>\n          <leafValues>\n            1.6064060851931572e-02 -3.8221898674964905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3538 -7.2662779130041599e-03</internalNodes>\n          <leafValues>\n            -2.1940490603446960e-01 3.8170509040355682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3539 -1.2828599661588669e-02</internalNodes>\n          <leafValues>\n            1.4705429971218109e-01 -5.5832669138908386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3540 -9.1467969119548798e-02</internalNodes>\n          <leafValues>\n            -7.9265332221984863e-01 1.0404639877378941e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3541 -2.7164160273969173e-03</internalNodes>\n          <leafValues>\n            -1.7725169658660889e-01 5.6455809623003006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3542 -1.0097579658031464e-01</internalNodes>\n          <leafValues>\n            -5.9372657537460327e-01 1.3162240386009216e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3543 -3.7983559072017670e-02</internalNodes>\n          <leafValues>\n            -1.5072999894618988e-01 1.9557390362024307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3544 5.3728191414847970e-04</internalNodes>\n          <leafValues>\n            5.2257049828767776e-02 -1.7996260523796082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3545 1.2443910352885723e-02</internalNodes>\n          <leafValues>\n            -2.8953019529581070e-02 2.5448489189147949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3546 -1.8171280622482300e-02</internalNodes>\n          <leafValues>\n            3.2203981280326843e-01 -3.1395100057125092e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3547 -3.0619159340858459e-02</internalNodes>\n          <leafValues>\n            -1.2817279994487762e-01 6.0485020279884338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3548 2.8726200107485056e-03</internalNodes>\n          <leafValues>\n            -1.4807400107383728e-01 5.3796000778675079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3549 -2.8772678971290588e-01</internalNodes>\n          <leafValues>\n            -8.3234447240829468e-01 3.6127590574324131e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3550 4.1057071089744568e-01</internalNodes>\n          <leafValues>\n            8.3212452009320259e-03 -8.2476407289505005e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3551 1.6370510682463646e-02</internalNodes>\n          <leafValues>\n            -2.4849100038409233e-02 1.6309140622615814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3552 5.3615570068359375e-02</internalNodes>\n          <leafValues>\n            1.8034080043435097e-02 -4.6126970648765564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3553 -1.0296109830960631e-03</internalNodes>\n          <leafValues>\n            3.8824349641799927e-02 -7.3625981807708740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3554 -6.3063339330255985e-03</internalNodes>\n          <leafValues>\n            1.3288870453834534e-01 -5.5812060832977295e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3555 6.8714357912540436e-03</internalNodes>\n          <leafValues>\n            6.9562442600727081e-02 -1.1383140087127686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3556 -8.3098851609975100e-04</internalNodes>\n          <leafValues>\n            1.0002700239419937e-01 -8.5704028606414795e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3557 1.3288210146129131e-02</internalNodes>\n          <leafValues>\n            4.2606260627508163e-02 -1.1729510128498077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3558 1.7035039141774178e-02</internalNodes>\n          <leafValues>\n            -4.2757850140333176e-02 2.2400109469890594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3559 3.2128300517797470e-02</internalNodes>\n          <leafValues>\n            1.5296909958124161e-02 -5.3317558765411377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3560 1.1440330184996128e-02</internalNodes>\n          <leafValues>\n            -5.8955609798431396e-02 1.2842489778995514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3561 2.5446009822189808e-03</internalNodes>\n          <leafValues>\n            4.6037770807743073e-02 -1.4760190248489380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3562 -3.5062368959188461e-02</internalNodes>\n          <leafValues>\n            -3.4721338748931885e-01 2.4020459502935410e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3563 4.6889069490134716e-03</internalNodes>\n          <leafValues>\n            -8.2460209727287292e-02 7.6254382729530334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3564 -1.5067459571582731e-05</internalNodes>\n          <leafValues>\n            5.8223988860845566e-02 -1.3496190309524536e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3565 -6.5259548136964440e-04</internalNodes>\n          <leafValues>\n            3.6780450493097305e-02 -7.0881396532058716e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3566 4.5456850784830749e-04</internalNodes>\n          <leafValues>\n            5.9895541518926620e-02 -1.4553959667682648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3567 -1.0570470243692398e-01</internalNodes>\n          <leafValues>\n            1.3766160607337952e-01 -2.2337099537253380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3568 -4.6019242145121098e-03</internalNodes>\n          <leafValues>\n            -3.3811721205711365e-01 2.2578509524464607e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3569 5.5374279618263245e-03</internalNodes>\n          <leafValues>\n            -4.1250869631767273e-02 9.4750680029392242e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3570 -2.7569069061428308e-03</internalNodes>\n          <leafValues>\n            1.7380860447883606e-01 -4.5417640358209610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3571 4.1876680916175246e-04</internalNodes>\n          <leafValues>\n            -5.5233258754014969e-02 5.8342628180980682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3572 -2.4587850202806294e-04</internalNodes>\n          <leafValues>\n            -8.9373029768466949e-02 8.1158749759197235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3573 -7.4991412460803986e-02</internalNodes>\n          <leafValues>\n            -5.9057062864303589e-01 6.7846179008483887e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3574 1.7898950027301908e-03</internalNodes>\n          <leafValues>\n            5.2262220531702042e-02 -1.5884269773960114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3575 -3.2704160548746586e-03</internalNodes>\n          <leafValues>\n            1.1216899752616882e-01 -6.2488421797752380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3576 -1.7803650349378586e-02</internalNodes>\n          <leafValues>\n            -4.5739078521728516e-01 1.6650289297103882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3577 -3.3537930250167847e-01</internalNodes>\n          <leafValues>\n            -8.2564651966094971e-01 7.1495971642434597e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3578 1.1451829969882965e-01</internalNodes>\n          <leafValues>\n            -1.8937719985842705e-02 4.1076439619064331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3579 6.5141052007675171e-02</internalNodes>\n          <leafValues>\n            1.1196400038897991e-02 -7.6225310564041138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3580 -1.8442489206790924e-02</internalNodes>\n          <leafValues>\n            1.4006440341472626e-01 -5.1568318158388138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3581 2.0362680777907372e-02</internalNodes>\n          <leafValues>\n            2.7635680511593819e-02 -2.2622610628604889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3582 -5.4255980066955090e-03</internalNodes>\n          <leafValues>\n            -1.4688220620155334e-01 5.1294069737195969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3583 -1.4608480036258698e-02</internalNodes>\n          <leafValues>\n            2.8014749288558960e-01 -3.2668899744749069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3584 1.2462410377338529e-03</internalNodes>\n          <leafValues>\n            -2.0888839662075043e-01 3.3212959766387939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3585 -5.1487259566783905e-02</internalNodes>\n          <leafValues>\n            1.9872699677944183e-01 -1.0376259684562683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3586 -1.4138059690594673e-02</internalNodes>\n          <leafValues>\n            -1.6193750500679016e-01 4.6604789793491364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3587 -8.3356946706771851e-03</internalNodes>\n          <leafValues>\n            1.6429559886455536e-01 -4.2695630341768265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3588 9.5129031687974930e-03</internalNodes>\n          <leafValues>\n            4.4999569654464722e-02 -1.5971189737319946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3589 -7.0411129854619503e-03</internalNodes>\n          <leafValues>\n            7.0638000965118408e-01 -9.1527765616774559e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3590 -4.0637628990225494e-04</internalNodes>\n          <leafValues>\n            7.0747792720794678e-02 -1.0194250196218491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3591 4.2529408819973469e-03</internalNodes>\n          <leafValues>\n            3.1937479972839355e-02 -1.0357219725847244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3592 -1.9221140246372670e-04</internalNodes>\n          <leafValues>\n            1.0241460055112839e-01 -8.9996367692947388e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3593 -1.3621139805763960e-03</internalNodes>\n          <leafValues>\n            -1.8157319724559784e-01 2.3933520540595055e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3594 -9.3250330537557602e-03</internalNodes>\n          <leafValues>\n            1.5883359313011169e-01 -4.5317139476537704e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3595 -3.4641081094741821e-01</internalNodes>\n          <leafValues>\n            -3.5901129245758057e-01 9.8646534606814384e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3596 1.7026960849761963e-02</internalNodes>\n          <leafValues>\n            -5.9731051325798035e-02 1.2576000392436981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3597 -3.9226989611051977e-04</internalNodes>\n          <leafValues>\n            6.4828976988792419e-02 -9.2051766812801361e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3598 7.0719248615205288e-03</internalNodes>\n          <leafValues>\n            3.7144500762224197e-02 -1.9167420268058777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3599 2.9001249931752682e-03</internalNodes>\n          <leafValues>\n            -6.2633208930492401e-02 5.3248930722475052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3600 -2.4164669215679169e-02</internalNodes>\n          <leafValues>\n            3.0798891186714172e-01 -2.6505900546908379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3601 -7.5509406626224518e-02</internalNodes>\n          <leafValues>\n            -6.1827278137207031e-01 7.8803002834320068e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3602 -2.6605799212120473e-04</internalNodes>\n          <leafValues>\n            6.9619670510292053e-02 -9.9268868565559387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3603 2.3389840498566628e-03</internalNodes>\n          <leafValues>\n            4.2269691824913025e-02 -1.6290849447250366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3604 -1.2518429430201650e-03</internalNodes>\n          <leafValues>\n            9.0814828872680664e-02 -7.9618006944656372e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3605 -1.9330839859321713e-03</internalNodes>\n          <leafValues>\n            7.6956093311309814e-02 -6.5234251320362091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3606 2.3863440379500389e-02</internalNodes>\n          <leafValues>\n            -7.7985651791095734e-02 9.7926571965217590e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3607 -5.1995079964399338e-02</internalNodes>\n          <leafValues>\n            -2.0676060020923615e-01 1.2264530174434185e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3608 -9.4953901134431362e-04</internalNodes>\n          <leafValues>\n            7.2090931236743927e-02 -1.2452449649572372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3609 -9.0458765625953674e-03</internalNodes>\n          <leafValues>\n            -1.0756769776344299e-01 2.6017999276518822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3610 3.2019101083278656e-02</internalNodes>\n          <leafValues>\n            -4.4689521193504333e-02 1.6712300479412079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3611 -7.1996808983385563e-03</internalNodes>\n          <leafValues>\n            -1.2065560370683670e-01 5.3329549729824066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3612 9.7247883677482605e-02</internalNodes>\n          <leafValues>\n            -2.0059280097484589e-02 4.1321530938148499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3613 1.7411670414730906e-03</internalNodes>\n          <leafValues>\n            2.5265200063586235e-02 -1.1400379985570908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3614 -1.5694150328636169e-01</internalNodes>\n          <leafValues>\n            -9.6121889352798462e-01 7.4661090038716793e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3615 -2.0573820918798447e-02</internalNodes>\n          <leafValues>\n            1.3207539916038513e-01 -5.3688809275627136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3616 2.0626350305974483e-03</internalNodes>\n          <leafValues>\n            3.7869140505790710e-02 -2.0333750545978546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3617 1.2381599843502045e-01</internalNodes>\n          <leafValues>\n            2.3662589956074953e-03 -4.8794668912887573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3618 3.1255739741027355e-03</internalNodes>\n          <leafValues>\n            -6.4476020634174347e-02 1.5053239464759827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3619 1.8766360357403755e-02</internalNodes>\n          <leafValues>\n            1.2639230117201805e-02 -1.9121849536895752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3620 -8.6109619587659836e-03</internalNodes>\n          <leafValues>\n            -1.1916559934616089e-01 6.6547170281410217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3621 1.4604110270738602e-02</internalNodes>\n          <leafValues>\n            -2.1980939432978630e-02 2.6832428574562073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3622 1.8387939780950546e-03</internalNodes>\n          <leafValues>\n            -1.1506830155849457e-01 6.0840509831905365e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3623 -5.7930707931518555e-01</internalNodes>\n          <leafValues>\n            -1. 3.7629920989274979e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3624 1.8690739572048187e-01</internalNodes>\n          <leafValues>\n            6.2871198169887066e-03 -9.2426669597625732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3625 1.8341749906539917e-02</internalNodes>\n          <leafValues>\n            1.7516769468784332e-02 -1.6519400477409363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3626 -1.4776510186493397e-02</internalNodes>\n          <leafValues>\n            2.5068140029907227e-01 -2.6199640706181526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3627 4.4032301753759384e-02</internalNodes>\n          <leafValues>\n            1.1479279957711697e-02 -6.4663171768188477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3628 3.5362939815968275e-03</internalNodes>\n          <leafValues>\n            4.8670079559087753e-02 -1.3171669840812683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3629 -4.5765978284180164e-03</internalNodes>\n          <leafValues>\n            1.2401209771633148e-01 -5.3882170468568802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3630 3.0529699288308620e-03</internalNodes>\n          <leafValues>\n            -5.2538860589265823e-02 1.2860049307346344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3631 -1.1333939619362354e-02</internalNodes>\n          <leafValues>\n            -1.6732269525527954e-01 1.2890639714896679e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3632 2.7712888550013304e-04</internalNodes>\n          <leafValues>\n            6.5776027739048004e-02 -9.4573900103569031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3633 5.4571928922086954e-04</internalNodes>\n          <leafValues>\n            -5.9766601771116257e-02 1.3265900313854218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3634 6.2958751805126667e-03</internalNodes>\n          <leafValues>\n            2.8854750096797943e-02 -2.4328909814357758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3635 1.5611880226060748e-03</internalNodes>\n          <leafValues>\n            -5.6346539407968521e-02 8.0620631575584412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3636 1.0501279681921005e-01</internalNodes>\n          <leafValues>\n            -1.4052099548280239e-02 5.5927920341491699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3637 3.6907300353050232e-02</internalNodes>\n          <leafValues>\n            1.5443010255694389e-02 -2.0881450176239014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3638 -4.0569249540567398e-02</internalNodes>\n          <leafValues>\n            1.5851789712905884e-01 -4.3176181614398956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3639 -7.2549749165773392e-03</internalNodes>\n          <leafValues>\n            -2.6104170083999634e-01 1.7242910340428352e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3640 4.5905262231826782e-03</internalNodes>\n          <leafValues>\n            -3.8419000804424286e-02 1.7464800179004669e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3641 -4.2836060747504234e-03</internalNodes>\n          <leafValues>\n            -1.2006240338087082e-01 4.1917610913515091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3642 -1.0835780203342438e-01</internalNodes>\n          <leafValues>\n            5.4927551746368408e-01 -1.2255569919943810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3643 6.4851208589971066e-03</internalNodes>\n          <leafValues>\n            4.4952411204576492e-02 -1.6583940386772156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3644 -2.3725129663944244e-02</internalNodes>\n          <leafValues>\n            5.7158672809600830e-01 -1.2361500412225723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3645 -3.0070519074797630e-02</internalNodes>\n          <leafValues>\n            -3.0609959363937378e-01 1.1695429682731628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3646 -7.9774633049964905e-03</internalNodes>\n          <leafValues>\n            -1.8185980618000031e-01 3.6925770342350006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3647 -1.7213199287652969e-02</internalNodes>\n          <leafValues>\n            1.2317930161952972e-01 -3.6632679402828217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3648 -1.4119789702817798e-03</internalNodes>\n          <leafValues>\n            -5.0499087572097778e-01 1.3695210218429565e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3649 2.9909020289778709e-02</internalNodes>\n          <leafValues>\n            -2.3535439744591713e-02 1.4312979578971863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3650 -1.1660479940474033e-02</internalNodes>\n          <leafValues>\n            -1.7822280526161194e-01 4.0250599384307861e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3651 -8.9040184393525124e-03</internalNodes>\n          <leafValues>\n            3.5567161440849304e-01 -2.4783140048384666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3652 -1.1394720058888197e-03</internalNodes>\n          <leafValues>\n            -1.4268599450588226e-01 4.9102801829576492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3653 2.9107509180903435e-03</internalNodes>\n          <leafValues>\n            -5.4471809417009354e-02 1.3025890290737152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3654 1.7640810459852219e-02</internalNodes>\n          <leafValues>\n            2.0184019580483437e-02 -4.1954588890075684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3655 5.0001900643110275e-02</internalNodes>\n          <leafValues>\n            1.1975940316915512e-02 -5.1889878511428833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3656 2.7523660100996494e-03</internalNodes>\n          <leafValues>\n            -6.0628410428762436e-02 1.1169119924306870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3657 -3.1753338873386383e-02</internalNodes>\n          <leafValues>\n            -2.2611990571022034e-01 1.5267389826476574e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3658 -1.2823809869587421e-02</internalNodes>\n          <leafValues>\n            2.3027139902114868e-01 -2.9404800385236740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3659 5.2626157412305474e-04</internalNodes>\n          <leafValues>\n            -1.5677809715270996e-01 4.9938481301069260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3660 1.2779150158166885e-02</internalNodes>\n          <leafValues>\n            -5.8851849287748337e-02 1.2255299836397171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3661 7.7667668461799622e-02</internalNodes>\n          <leafValues>\n            4.6644411049783230e-03 -5.0614321231842041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3662 -5.2286800928413868e-03</internalNodes>\n          <leafValues>\n            -1.8939809501171112e-01 4.4714428484439850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3663 8.4478305652737617e-03</internalNodes>\n          <leafValues>\n            3.9108898490667343e-02 -1.4809159934520721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3664 5.5970861576497555e-03</internalNodes>\n          <leafValues>\n            5.4664470255374908e-02 -1.4698089659214020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3665 1.6882989555597305e-02</internalNodes>\n          <leafValues>\n            -4.6449739485979080e-02 1.4121970534324646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3666 -6.1205658130347729e-04</internalNodes>\n          <leafValues>\n            -1.3906019926071167e-01 5.2586868405342102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3667 -3.6216019652783871e-03</internalNodes>\n          <leafValues>\n            5.3345881402492523e-02 -3.8361679762601852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3668 -1.4149090275168419e-03</internalNodes>\n          <leafValues>\n            2.0082549750804901e-01 -3.5985361784696579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3669 2.4758750805631280e-04</internalNodes>\n          <leafValues>\n            -1.8205779790878296e-01 1.5915339812636375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3670 1.3457840681076050e-01</internalNodes>\n          <leafValues>\n            9.7890906035900116e-03 -7.2879707813262939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3671 1.1352010071277618e-02</internalNodes>\n          <leafValues>\n            -3.5553149878978729e-02 6.3222207129001617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3672 -7.9044885933399200e-03</internalNodes>\n          <leafValues>\n            9.0774089097976685e-02 -9.8796442151069641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3673 7.9050168395042419e-02</internalNodes>\n          <leafValues>\n            4.7087217681109905e-03 -6.0529369115829468e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3674 8.9114397997036576e-04</internalNodes>\n          <leafValues>\n            -9.0216107666492462e-02 8.4293842315673828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3675 4.1404040530323982e-03</internalNodes>\n          <leafValues>\n            6.0314171016216278e-02 -1.2171939760446548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3676 -9.2683091759681702e-02</internalNodes>\n          <leafValues>\n            6.7853301763534546e-01 -1.0615170001983643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3677 4.2872380465269089e-02</internalNodes>\n          <leafValues>\n            7.3283850215375423e-03 -5.2321487665176392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3678 -3.0652560293674469e-02</internalNodes>\n          <leafValues>\n            -6.5578341484069824e-01 9.7402445971965790e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3679 7.5054399669170380e-02</internalNodes>\n          <leafValues>\n            -1.1660519987344742e-02 3.7559139728546143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3680 9.3033112585544586e-02</internalNodes>\n          <leafValues>\n            7.4912221170961857e-03 -8.1748551130294800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3681 -4.0522208437323570e-03</internalNodes>\n          <leafValues>\n            3.6431130766868591e-01 -1.8015889450907707e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3682 1.0411429684609175e-03</internalNodes>\n          <leafValues>\n            -1.9623729586601257e-01 3.4336969256401062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3683 4.0790800005197525e-02</internalNodes>\n          <leafValues>\n            1.7464859411120415e-02 -3.8497269153594971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3684 -1.8009789346251637e-04</internalNodes>\n          <leafValues>\n            5.2157621830701828e-02 -1.2038189917802811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3685 -3.5496380180120468e-02</internalNodes>\n          <leafValues>\n            2.1371629834175110e-01 -9.4601595774292946e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3686 -1.2321450049057603e-03</internalNodes>\n          <leafValues>\n            -1.2999939918518066e-01 4.8752531409263611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3687 -6.6326446831226349e-02</internalNodes>\n          <leafValues>\n            -5.0795209407806396e-01 5.8305650018155575e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3688 -2.7689670678228140e-03</internalNodes>\n          <leafValues>\n            1.2596920132637024e-01 -5.5794779211282730e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3689 3.9610429666936398e-03</internalNodes>\n          <leafValues>\n            -8.4471739828586578e-02 6.2092550098896027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3690 -7.5474479235708714e-03</internalNodes>\n          <leafValues>\n            -2.0992270112037659e-01 3.1419910490512848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3691 -3.2456999178975821e-03</internalNodes>\n          <leafValues>\n            5.6223601102828979e-02 -3.6774989217519760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3692 -5.0519341602921486e-03</internalNodes>\n          <leafValues>\n            9.4136670231819153e-02 -8.0893777310848236e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3693 2.1375959739089012e-02</internalNodes>\n          <leafValues>\n            4.9529589712619781e-02 -4.7989148646593094e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3694 -1.6724619269371033e-01</internalNodes>\n          <leafValues>\n            -9.3551367521286011e-01 7.4155409820377827e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3695 6.4946119673550129e-03</internalNodes>\n          <leafValues>\n            -3.6735821515321732e-02 1.0955040156841278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3696 -5.5810972116887569e-03</internalNodes>\n          <leafValues>\n            -1.2764470279216766e-01 5.8691799640655518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3697 -7.0414197398349643e-04</internalNodes>\n          <leafValues>\n            3.9361558854579926e-02 -7.4844732880592346e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3698 -7.3160971514880657e-03</internalNodes>\n          <leafValues>\n            2.1767179667949677e-01 -3.8703199476003647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3699 -5.4676099680364132e-03</internalNodes>\n          <leafValues>\n            -5.3973350673913956e-02 5.5032800883054733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3700 4.3309312313795090e-03</internalNodes>\n          <leafValues>\n            5.7104710489511490e-02 -1.2603929638862610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3701 2.8189779259264469e-03</internalNodes>\n          <leafValues>\n            -3.9729248732328415e-02 9.2701591551303864e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3702 -4.7759278677403927e-03</internalNodes>\n          <leafValues>\n            -1.2856410443782806e-01 6.1216689646244049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3703 6.3424631953239441e-02</internalNodes>\n          <leafValues>\n            -4.8541268333792686e-03 5.9883451461791992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3704 -3.5035109613090754e-03</internalNodes>\n          <leafValues>\n            1.0191550105810165e-01 -9.8801277577877045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3705 -4.1303951293230057e-03</internalNodes>\n          <leafValues>\n            1.0890380293130875e-01 -3.8225919008255005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3706 -2.2271529305726290e-03</internalNodes>\n          <leafValues>\n            -1.3501960039138794e-01 5.1316611468791962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3707 -1.0730850044637918e-03</internalNodes>\n          <leafValues>\n            5.1526721566915512e-02 -7.4171036481857300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3708 -7.7973678708076477e-04</internalNodes>\n          <leafValues>\n            7.0857577025890350e-02 -1.1204849928617477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3709 -5.5701348930597305e-02</internalNodes>\n          <leafValues>\n            3.9836230874061584e-01 -5.2183559164404869e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3710 1.0608229786157608e-02</internalNodes>\n          <leafValues>\n            -3.2323788851499557e-02 2.1950970590114594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3711 -9.8208207637071609e-03</internalNodes>\n          <leafValues>\n            -1.6507670283317566e-01 4.2444411665201187e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3712 1.4465330168604851e-03</internalNodes>\n          <leafValues>\n            -7.8392669558525085e-02 8.1393733620643616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3713 -4.4582188129425049e-03</internalNodes>\n          <leafValues>\n            -9.2314578592777252e-02 3.8734171539545059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3714 5.6474958546459675e-03</internalNodes>\n          <leafValues>\n            3.9651289582252502e-02 -1.7495639622211456e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3715 4.2097918689250946e-02</internalNodes>\n          <leafValues>\n            -1.1850739829242229e-02 1.2762710452079773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3716 6.9958101958036423e-03</internalNodes>\n          <leafValues>\n            -4.7668740153312683e-02 1.4204859733581543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3717 3.8686778396368027e-02</internalNodes>\n          <leafValues>\n            1.3582780025899410e-02 -4.7315898537635803e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>238</maxWeakCount>\n      <stageThreshold>-1.4597640037536621e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3718 3.5009320825338364e-02</internalNodes>\n          <leafValues>\n            -2.7020230889320374e-01 2.0429250597953796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3719 -3.6780539900064468e-02</internalNodes>\n          <leafValues>\n            1.5254889428615570e-01 -2.6741871237754822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3720 5.6993318721652031e-03</internalNodes>\n          <leafValues>\n            1.6803050041198730e-01 -2.3068240284919739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3721 7.5601637363433838e-02</internalNodes>\n          <leafValues>\n            -1.5271709859371185e-01 1.9510839879512787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3722 -1.7248390242457390e-02</internalNodes>\n          <leafValues>\n            2.9379200935363770e-01 -9.8869532346725464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3723 2.8574180323630571e-03</internalNodes>\n          <leafValues>\n            -1.9790470600128174e-01 8.3361737430095673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3724 3.1029269099235535e-02</internalNodes>\n          <leafValues>\n            -2.1582309901714325e-01 1.1695130169391632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3725 -7.1099428460001945e-03</internalNodes>\n          <leafValues>\n            -2.5206819176673889e-01 3.6116510629653931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3726 4.5894421637058258e-03</internalNodes>\n          <leafValues>\n            -2.9707619547843933e-01 1.0743969678878784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3727 -7.0509258657693863e-03</internalNodes>\n          <leafValues>\n            -4.5635029673576355e-01 4.1864778846502304e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3728 6.6762260394170880e-04</internalNodes>\n          <leafValues>\n            -1.7432719469070435e-01 1.2306489795446396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3729 -3.6481819115579128e-03</internalNodes>\n          <leafValues>\n            -4.0347629785537720e-01 4.9114771187305450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3730 2.2194240242242813e-02</internalNodes>\n          <leafValues>\n            6.1241529881954193e-02 -3.4557360410690308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3731 -1.1259679449722171e-03</internalNodes>\n          <leafValues>\n            5.2013769745826721e-02 -2.8461641073226929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3732 -1.5913739800453186e-02</internalNodes>\n          <leafValues>\n            -2.7667850255966187e-01 7.5852021574974060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3733 5.7643437758088112e-03</internalNodes>\n          <leafValues>\n            -2.7182090282440186e-01 6.6790662705898285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3734 -4.2196471244096756e-02</internalNodes>\n          <leafValues>\n            1.5786080062389374e-01 -1.0557679831981659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3735 -1.8624680116772652e-02</internalNodes>\n          <leafValues>\n            -2.5504299998283386e-01 4.7586869448423386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3736 -9.5020089065656066e-04</internalNodes>\n          <leafValues>\n            4.9903839826583862e-02 -2.9068550467491150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3737 2.0823240280151367e-02</internalNodes>\n          <leafValues>\n            2.6825139299035072e-02 -2.0558500289916992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3738 -1.3118459843099117e-02</internalNodes>\n          <leafValues>\n            -2.2395209968090057e-01 6.9013498723506927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3739 -8.6902417242527008e-03</internalNodes>\n          <leafValues>\n            1.9493189454078674e-01 -3.7850689142942429e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3740 4.5589819550514221e-02</internalNodes>\n          <leafValues>\n            2.5170389562845230e-02 -5.7766669988632202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3741 -4.8458490520715714e-02</internalNodes>\n          <leafValues>\n            9.5191553235054016e-02 -1.4320190250873566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3742 -7.2761103510856628e-02</internalNodes>\n          <leafValues>\n            -6.5967410802841187e-01 2.1175239235162735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3743 -5.3840368986129761e-02</internalNodes>\n          <leafValues>\n            -3.6426779627799988e-01 2.4827929213643074e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3744 2.3190240608528256e-04</internalNodes>\n          <leafValues>\n            -1.4767690002918243e-01 8.3764038980007172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3745 -3.4166979603469372e-03</internalNodes>\n          <leafValues>\n            -1.7865709960460663e-01 6.0721088200807571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3746 4.9744218587875366e-02</internalNodes>\n          <leafValues>\n            1.8918199464678764e-02 -6.6629868745803833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3747 6.6813439130783081e-02</internalNodes>\n          <leafValues>\n            -2.8286559507250786e-02 1.7401529848575592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3748 3.1445559114217758e-02</internalNodes>\n          <leafValues>\n            5.2556060254573822e-02 -3.0884549021720886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3749 3.9593618363142014e-02</internalNodes>\n          <leafValues>\n            -6.4875252544879913e-02 2.5706759095191956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3750 1.8663380295038223e-02</internalNodes>\n          <leafValues>\n            -5.9568431228399277e-02 2.1532599627971649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3751 4.0150571614503860e-02</internalNodes>\n          <leafValues>\n            1.9589129835367203e-02 -3.5392150282859802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3752 -1.8263690173625946e-02</internalNodes>\n          <leafValues>\n            -3.1224039196968079e-01 4.1845381259918213e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3753 -2.2579960525035858e-02</internalNodes>\n          <leafValues>\n            -1.4898709952831268e-01 1.7757140100002289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3754 8.5281759500503540e-02</internalNodes>\n          <leafValues>\n            2.4866759777069092e-02 -5.2197951078414917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3755 4.9491669051349163e-03</internalNodes>\n          <leafValues>\n            4.0433339774608612e-02 -1.1230610311031342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3756 -2.7419520542025566e-02</internalNodes>\n          <leafValues>\n            -4.1119968891143799e-01 3.0549079179763794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3757 3.8277640938758850e-02</internalNodes>\n          <leafValues>\n            1.2211250141263008e-02 -8.1860828399658203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3758 -2.1632280200719833e-02</internalNodes>\n          <leafValues>\n            2.2030480206012726e-01 -5.5459130555391312e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3759 -2.4522699415683746e-01</internalNodes>\n          <leafValues>\n            4.1013330221176147e-01 -2.7000149711966515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3760 3.9314631372690201e-02</internalNodes>\n          <leafValues>\n            -3.1242560595273972e-02 3.6714181303977966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3761 1.3630360364913940e-02</internalNodes>\n          <leafValues>\n            -1.3902300596237183e-01 9.5946237444877625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3762 -6.7042862065136433e-03</internalNodes>\n          <leafValues>\n            7.8772000968456268e-02 -1.4522729814052582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3763 2.3312810808420181e-02</internalNodes>\n          <leafValues>\n            2.2815790027379990e-02 -4.4990560412406921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3764 3.0621029436588287e-02</internalNodes>\n          <leafValues>\n            -6.9781273603439331e-02 1.5422509610652924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3765 5.2047189325094223e-02</internalNodes>\n          <leafValues>\n            -1.7720200121402740e-02 4.4397410750389099e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3766 2.0850539207458496e-02</internalNodes>\n          <leafValues>\n            -5.2309051156044006e-02 2.0608800649642944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3767 8.2694664597511292e-03</internalNodes>\n          <leafValues>\n            7.7132821083068848e-02 -1.9474139809608459e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3768 5.5706288665533066e-02</internalNodes>\n          <leafValues>\n            3.3715151250362396e-02 -3.5783401131629944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3769 -2.5406919419765472e-02</internalNodes>\n          <leafValues>\n            -2.1424999833106995e-01 5.3813599050045013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3770 3.7127479445189238e-03</internalNodes>\n          <leafValues>\n            5.7478290051221848e-02 -1.7734010517597198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3771 9.8399087786674500e-02</internalNodes>\n          <leafValues>\n            -3.5304271150380373e-03 7.7086448669433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3772 -7.0944158360362053e-03</internalNodes>\n          <leafValues>\n            -1.3782690465450287e-01 7.0290572941303253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3773 -7.8213073313236237e-02</internalNodes>\n          <leafValues>\n            4.6844071149826050e-01 -4.8642340116202831e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3774 3.0407020822167397e-02</internalNodes>\n          <leafValues>\n            -2.8489479795098305e-02 3.4157308936119080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3775 1.7667879583314061e-03</internalNodes>\n          <leafValues>\n            -1.4614230394363403e-01 2.3572970181703568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3776 7.1991011500358582e-02</internalNodes>\n          <leafValues>\n            -3.5075180232524872e-02 2.8865718841552734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3777 5.0020869821310043e-02</internalNodes>\n          <leafValues>\n            2.4096360430121422e-02 -3.3890551328659058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3778 -1.7998270690441132e-02</internalNodes>\n          <leafValues>\n            2.9191690683364868e-01 -4.1259169578552246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3779 -8.6585222743451595e-04</internalNodes>\n          <leafValues>\n            -1.2248259782791138e-01 5.9690121561288834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3780 5.7470470666885376e-02</internalNodes>\n          <leafValues>\n            2.1541740745306015e-02 -4.7508370876312256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3781 -1.6517810523509979e-02</internalNodes>\n          <leafValues>\n            1.6598740220069885e-01 -3.9656970649957657e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3782 2.1703030914068222e-02</internalNodes>\n          <leafValues>\n            -3.8327228277921677e-02 3.3476251363754272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3783 -6.1237839981913567e-03</internalNodes>\n          <leafValues>\n            -1.4342689514160156e-01 2.6313329115509987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3784 -1.0893509723246098e-02</internalNodes>\n          <leafValues>\n            -7.9468882083892822e-01 1.2403479777276516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3785 -3.8589738309383392e-02</internalNodes>\n          <leafValues>\n            3.3763501048088074e-01 -1.8747940659523010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3786 1.3378040166571736e-03</internalNodes>\n          <leafValues>\n            -3.6288881301879883e-01 2.9460189864039421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3787 2.7590300305746496e-04</internalNodes>\n          <leafValues>\n            7.6419189572334290e-02 -8.6953632533550262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3788 7.9552736133337021e-03</internalNodes>\n          <leafValues>\n            5.2696179598569870e-02 -1.9200770556926727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3789 -1.2174629606306553e-02</internalNodes>\n          <leafValues>\n            8.4013037383556366e-02 -2.1740090101957321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3790 -1.6361070796847343e-02</internalNodes>\n          <leafValues>\n            -2.5493758916854858e-01 3.8582589477300644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3791 -3.4992128610610962e-02</internalNodes>\n          <leafValues>\n            2.5760510563850403e-01 -1.5727080404758453e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3792 -7.6113208197057247e-03</internalNodes>\n          <leafValues>\n            1.9114670157432556e-01 -5.2980780601501465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3793 5.0110749900341034e-02</internalNodes>\n          <leafValues>\n            2.4265250191092491e-02 -5.1509189605712891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3794 -9.1486647725105286e-03</internalNodes>\n          <leafValues>\n            -3.3170440793037415e-01 2.6774439960718155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3795 8.3293259143829346e-02</internalNodes>\n          <leafValues>\n            4.2860410176217556e-03 -3.0381551384925842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3796 -1.9334359094500542e-02</internalNodes>\n          <leafValues>\n            3.8916379213333130e-01 -2.4908309802412987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3797 -7.2061046957969666e-02</internalNodes>\n          <leafValues>\n            4.1184291243553162e-01 -2.5687059387564659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3798 2.2506359964609146e-02</internalNodes>\n          <leafValues>\n            -2.1196739375591278e-01 5.3825020790100098e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3799 5.5772401392459869e-02</internalNodes>\n          <leafValues>\n            -2.3104140534996986e-02 9.1578252613544464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3800 -2.6210390031337738e-02</internalNodes>\n          <leafValues>\n            3.3509409427642822e-01 -3.4225810319185257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3801 -4.6085331588983536e-02</internalNodes>\n          <leafValues>\n            -5.3006750345230103e-01 1.9083080813288689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3802 -3.2998260110616684e-02</internalNodes>\n          <leafValues>\n            3.0701389908790588e-01 -3.1638059765100479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3803 1.0677659884095192e-02</internalNodes>\n          <leafValues>\n            3.8186781108379364e-02 -2.0256699621677399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3804 3.7972650025039911e-03</internalNodes>\n          <leafValues>\n            7.8951433300971985e-02 -1.3040140271186829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3805 -2.4965009652078152e-03</internalNodes>\n          <leafValues>\n            -1.9799210131168365e-01 3.0743129551410675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3806 1.4203139580786228e-02</internalNodes>\n          <leafValues>\n            -4.5443460345268250e-02 2.1806409955024719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3807 7.7012999099679291e-05</internalNodes>\n          <leafValues>\n            -2.5858289003372192e-01 4.2508359998464584e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3808 2.3724909406155348e-03</internalNodes>\n          <leafValues>\n            -1.5815889835357666e-01 6.1494071036577225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3809 -8.4086082875728607e-02</internalNodes>\n          <leafValues>\n            -9.3704527616500854e-01 8.3687662845477462e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3810 -2.2892290726304054e-02</internalNodes>\n          <leafValues>\n            4.2960539460182190e-01 -2.7215819805860519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3811 -1.1238969862461090e-01</internalNodes>\n          <leafValues>\n            -2.0607289671897888e-01 1.7798800021409988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3812 6.8175032734870911e-02</internalNodes>\n          <leafValues>\n            -4.2019781470298767e-01 2.5051090866327286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3813 -1.0620189830660820e-02</internalNodes>\n          <leafValues>\n            -2.1870230138301849e-01 2.4231420829892159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3814 2.9390859417617321e-03</internalNodes>\n          <leafValues>\n            8.8470183312892914e-02 -1.1958040297031403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3815 5.6766260415315628e-02</internalNodes>\n          <leafValues>\n            -5.8820329606533051e-02 1.7845800518989563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3816 -7.3099520523101091e-04</internalNodes>\n          <leafValues>\n            3.0122080445289612e-01 -3.4890830516815186e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3817 3.4174978733062744e-02</internalNodes>\n          <leafValues>\n            1.9614150747656822e-02 -1.7419980466365814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3818 3.3152099698781967e-02</internalNodes>\n          <leafValues>\n            2.9344469308853149e-02 -3.5163739323616028e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3819 1.7158590257167816e-02</internalNodes>\n          <leafValues>\n            -4.7744009643793106e-02 2.0690310001373291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3820 -3.3270310610532761e-02</internalNodes>\n          <leafValues>\n            -3.6818051338195801e-01 3.0547879636287689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3821 -7.5228337664157152e-04</internalNodes>\n          <leafValues>\n            -1.0068210214376450e-01 3.7446059286594391e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3822 -5.7363631203770638e-03</internalNodes>\n          <leafValues>\n            -2.9704639315605164e-01 3.0889809131622314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3823 3.4203678369522095e-02</internalNodes>\n          <leafValues>\n            3.2694388180971146e-02 -1.9386410713195801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3824 1.1759670078754425e-01</internalNodes>\n          <leafValues>\n            2.8010509908199310e-02 -3.4469729661941528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3825 3.5684760659933090e-02</internalNodes>\n          <leafValues>\n            1.4612049795687199e-02 -3.2323908805847168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3826 -1.4562480151653290e-01</internalNodes>\n          <leafValues>\n            -4.3703469634056091e-01 2.0697519183158875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3827 8.0413380637764931e-03</internalNodes>\n          <leafValues>\n            1.8440550193190575e-02 -3.2272771000862122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3828 5.3446288220584393e-03</internalNodes>\n          <leafValues>\n            5.0503399223089218e-02 -1.8428540229797363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3829 8.6473226547241211e-02</internalNodes>\n          <leafValues>\n            6.2484769150614738e-03 -9.3612897396087646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3830 6.6168710589408875e-02</internalNodes>\n          <leafValues>\n            -5.9868391603231430e-02 1.5810599923133850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3831 2.8978990390896797e-02</internalNodes>\n          <leafValues>\n            2.8844339773058891e-02 -2.8269919753074646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3832 1.8636519089341164e-02</internalNodes>\n          <leafValues>\n            -5.1709290593862534e-02 1.7777459323406219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3833 -2.6881769299507141e-02</internalNodes>\n          <leafValues>\n            7.3635026812553406e-02 -3.6229219287633896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3834 -1.3696019537746906e-02</internalNodes>\n          <leafValues>\n            1.8215629458427429e-01 -5.9880878776311874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3835 -4.1931979358196259e-03</internalNodes>\n          <leafValues>\n            -9.3321792781352997e-02 2.7901070192456245e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3836 2.2784220054745674e-02</internalNodes>\n          <leafValues>\n            3.0631329864263535e-02 -2.8531938791275024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3837 -8.3819748833775520e-03</internalNodes>\n          <leafValues>\n            -2.3251660168170929e-01 5.0801441073417664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3838 -6.4928620122373104e-03</internalNodes>\n          <leafValues>\n            1.1060830205678940e-01 -8.3281010389328003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3839 5.5866848677396774e-02</internalNodes>\n          <leafValues>\n            2.3439039289951324e-01 -4.5191779732704163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3840 -1.0926710441708565e-02</internalNodes>\n          <leafValues>\n            2.0532840490341187e-01 -5.0775919109582901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3841 1.7515379935503006e-02</internalNodes>\n          <leafValues>\n            3.6728449165821075e-02 -3.0638590455055237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3842 1.4543980360031128e-02</internalNodes>\n          <leafValues>\n            4.4784490019083023e-02 -2.0757840573787689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3843 1.7274370184168220e-03</internalNodes>\n          <leafValues>\n            2.3706600069999695e-02 -1.8639369308948517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3844 2.0160499960184097e-02</internalNodes>\n          <leafValues>\n            4.1744660586118698e-02 -2.1943749487400055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3845 -5.5732231587171555e-02</internalNodes>\n          <leafValues>\n            -3.7666681408882141e-01 7.3045571334660053e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3846 -4.2138090357184410e-03</internalNodes>\n          <leafValues>\n            1.1314260214567184e-01 -8.4451928734779358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3847 -5.7113498449325562e-02</internalNodes>\n          <leafValues>\n            -4.1903460025787354e-01 4.2158551514148712e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3848 -3.3385161310434341e-02</internalNodes>\n          <leafValues>\n            -3.9007860422134399e-01 2.5290969759225845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3849 -8.5305999964475632e-03</internalNodes>\n          <leafValues>\n            5.3572379052639008e-02 -1.2238460034132004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3850 -1.5144890174269676e-02</internalNodes>\n          <leafValues>\n            4.5743760466575623e-01 -2.5002999231219292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3851 7.5857941992580891e-03</internalNodes>\n          <leafValues>\n            2.6268539950251579e-02 -9.8890319466590881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3852 -6.4347468316555023e-02</internalNodes>\n          <leafValues>\n            2.2607059776782990e-01 -4.1821580380201340e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3853 6.5772183239459991e-02</internalNodes>\n          <leafValues>\n            2.4147959426045418e-02 -4.0227779746055603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3854 -1.0496930032968521e-01</internalNodes>\n          <leafValues>\n            -4.6343261003494263e-01 1.9134109839797020e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3855 9.6320390701293945e-02</internalNodes>\n          <leafValues>\n            8.7147848680615425e-03 -3.5269328951835632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3856 1.6651069745421410e-02</internalNodes>\n          <leafValues>\n            -2.3842410743236542e-01 3.8928661495447159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3857 5.8829918503761292e-02</internalNodes>\n          <leafValues>\n            -1.6538100317120552e-02 3.3465591073036194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3858 5.2411198616027832e-02</internalNodes>\n          <leafValues>\n            -1.9688919186592102e-02 4.6966078877449036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3859 1.2325269635766745e-03</internalNodes>\n          <leafValues>\n            -1.2056189775466919e-01 5.0563529133796692e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3860 -2.4530949071049690e-02</internalNodes>\n          <leafValues>\n            -3.9168059825897217e-01 2.3108620196580887e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3861 3.5507690161466599e-02</internalNodes>\n          <leafValues>\n            2.0499339327216148e-02 -3.6233830451965332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3862 -1.5282739885151386e-02</internalNodes>\n          <leafValues>\n            -2.4604129791259766e-01 3.4749999642372131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3863 6.0466449707746506e-02</internalNodes>\n          <leafValues>\n            -5.5071748793125153e-02 2.0428660511970520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3864 6.5809831023216248e-02</internalNodes>\n          <leafValues>\n            -7.1466080844402313e-02 1.2002970278263092e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3865 -7.9543672502040863e-02</internalNodes>\n          <leafValues>\n            4.9044218659400940e-01 -7.8059309162199497e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3866 7.1057200431823730e-02</internalNodes>\n          <leafValues>\n            4.4219430536031723e-02 -2.1077010035514832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3867 1.2412209762260318e-03</internalNodes>\n          <leafValues>\n            9.9759846925735474e-02 -7.4065141379833221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3868 4.3900560587644577e-02</internalNodes>\n          <leafValues>\n            2.0245339721441269e-02 -4.7800138592720032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3869 1.3814829289913177e-01</internalNodes>\n          <leafValues>\n            -3.4169729799032211e-02 2.0662400126457214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3870 6.4026713371276855e-02</internalNodes>\n          <leafValues>\n            1.7396930605173111e-02 -5.7749879360198975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3871 -1.2456770054996014e-02</internalNodes>\n          <leafValues>\n            -1.6710869967937469e-01 1.2106380425393581e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3872 3.7183608859777451e-02</internalNodes>\n          <leafValues>\n            -1.9024299457669258e-02 4.4476169347763062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3873 -3.4905251115560532e-02</internalNodes>\n          <leafValues>\n            -1.4648060500621796e-01 2.0895779132843018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3874 6.1689559370279312e-02</internalNodes>\n          <leafValues>\n            1.2428649701178074e-02 -7.1737641096115112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3875 -2.7358489111065865e-02</internalNodes>\n          <leafValues>\n            -2.4311469495296478e-01 2.6138730347156525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3876 6.3740741461515427e-03</internalNodes>\n          <leafValues>\n            -8.2593016326427460e-02 1.1356580257415771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3877 -1.0299839824438095e-01</internalNodes>\n          <leafValues>\n            4.5398610830307007e-01 -1.6315529122948647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3878 -1.4695020392537117e-02</internalNodes>\n          <leafValues>\n            -1.8050310015678406e-01 4.8061780631542206e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3879 6.0288330132607371e-05</internalNodes>\n          <leafValues>\n            -9.8974503576755524e-02 3.8105670362710953e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3880 -1.3763650320470333e-02</internalNodes>\n          <leafValues>\n            4.5689401030540466e-01 -2.0808599889278412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3881 5.1598600111901760e-03</internalNodes>\n          <leafValues>\n            2.8479820117354393e-02 -1.9778659939765930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3882 6.6321617923676968e-03</internalNodes>\n          <leafValues>\n            -6.1560358852148056e-02 1.4045900106430054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3883 -1.1073590256273746e-02</internalNodes>\n          <leafValues>\n            1.1272329837083817e-01 -3.8423039019107819e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3884 7.3836948722600937e-03</internalNodes>\n          <leafValues>\n            2.4575280025601387e-02 -3.3994451165199280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3885 -1.9277689978480339e-02</internalNodes>\n          <leafValues>\n            1.5732249617576599e-01 -5.8382220566272736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3886 -2.6209199801087379e-02</internalNodes>\n          <leafValues>\n            -3.2575431466102600e-01 3.5296149551868439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3887 1.3872079551219940e-02</internalNodes>\n          <leafValues>\n            2.7504689991474152e-02 -2.0510050654411316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3888 2.5171930901706219e-03</internalNodes>\n          <leafValues>\n            6.9805637001991272e-02 -1.1518660187721252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3889 6.7753292620182037e-02</internalNodes>\n          <leafValues>\n            -3.7268139421939850e-02 2.3363080620765686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3890 -2.4352179840207100e-02</internalNodes>\n          <leafValues>\n            -2.1191249787807465e-01 4.2971581220626831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3891 -1.5085450373589993e-02</internalNodes>\n          <leafValues>\n            1.4743280410766602e-01 -3.8589131087064743e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3892 3.0052060261368752e-02</internalNodes>\n          <leafValues>\n            4.3882489204406738e-02 -2.0401340723037720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3893 -7.9878583550453186e-02</internalNodes>\n          <leafValues>\n            7.1355827152729034e-02 -3.5806309431791306e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3894 -4.9845650792121887e-02</internalNodes>\n          <leafValues>\n            2.8991028666496277e-01 -2.9193209484219551e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3895 6.0983549803495407e-02</internalNodes>\n          <leafValues>\n            1.1078090406954288e-02 -8.0549037456512451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3896 -2.4187229573726654e-02</internalNodes>\n          <leafValues>\n            2.0816670358181000e-01 -4.0332991629838943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3897 2.9581909999251366e-02</internalNodes>\n          <leafValues>\n            1.7189880833029747e-02 -3.0174249410629272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3898 -9.6158936619758606e-02</internalNodes>\n          <leafValues>\n            -3.6115181446075439e-01 2.1451879292726517e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3899 1.1087789898738265e-03</internalNodes>\n          <leafValues>\n            6.0711268335580826e-02 -1.2995730340480804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3900 3.6577019840478897e-02</internalNodes>\n          <leafValues>\n            -1.5757689252495766e-02 6.1568331718444824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3901 8.9887566864490509e-02</internalNodes>\n          <leafValues>\n            7.5012152083218098e-03 -8.4639918804168701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3902 5.2048689685761929e-03</internalNodes>\n          <leafValues>\n            -5.0408910959959030e-02 1.5618799626827240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3903 3.4727361053228378e-02</internalNodes>\n          <leafValues>\n            2.1034790202975273e-02 -2.1834190189838409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3904 -5.4695051163434982e-02</internalNodes>\n          <leafValues>\n            -8.3126282691955566e-01 8.9029762893915176e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3905 1.5987730026245117e-01</internalNodes>\n          <leafValues>\n            8.5425339639186859e-03 -6.9280862808227539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3906 -3.8558691740036011e-02</internalNodes>\n          <leafValues>\n            -2.7078241109848022e-01 2.7025369927287102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3907 -7.1866370737552643e-02</internalNodes>\n          <leafValues>\n            -3.9044618606567383e-01 1.0923280380666256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3908 1.9590340554714203e-01</internalNodes>\n          <leafValues>\n            1.3423370197415352e-02 -5.4260522127151489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3909 -2.2330079227685928e-02</internalNodes>\n          <leafValues>\n            -1.7275239527225494e-01 2.9058510437607765e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3910 5.1018559932708740e-01</internalNodes>\n          <leafValues>\n            1.1418639682233334e-02 -6.7876529693603516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3911 -1.1239909566938877e-02</internalNodes>\n          <leafValues>\n            1.1462499946355820e-01 -5.6867629289627075e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3912 1.7486160621047020e-02</internalNodes>\n          <leafValues>\n            5.2641868591308594e-02 -1.6195179522037506e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3913 -1.4517609961330891e-03</internalNodes>\n          <leafValues>\n            -1.0877469927072525e-01 5.6960400193929672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3914 3.7016559392213821e-02</internalNodes>\n          <leafValues>\n            1.7460089176893234e-02 -4.6505320072174072e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3915 -8.6366441100835800e-03</internalNodes>\n          <leafValues>\n            7.3076270520687103e-02 -1.0616590082645416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3916 1.9361129961907864e-03</internalNodes>\n          <leafValues>\n            -1.4585369825363159e-01 5.9394489973783493e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3917 -2.3119550198316574e-02</internalNodes>\n          <leafValues>\n            -9.4876237213611603e-02 3.0387479811906815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3918 6.3178739510476589e-03</internalNodes>\n          <leafValues>\n            -1.0537099838256836e-01 7.7892847359180450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3919 1.0961949825286865e-02</internalNodes>\n          <leafValues>\n            -6.6041983664035797e-02 1.0566339641809464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3920 -4.2129520326852798e-02</internalNodes>\n          <leafValues>\n            2.4344080686569214e-01 -5.1573678851127625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3921 4.5132819563150406e-02</internalNodes>\n          <leafValues>\n            1.0772050358355045e-02 -7.6156777143478394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3922 9.4924736768007278e-03</internalNodes>\n          <leafValues>\n            4.5273378491401672e-02 -1.8770030140876770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3923 -1.1573860049247742e-01</internalNodes>\n          <leafValues>\n            4.4831728935241699e-01 -8.6225848644971848e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3924 1.5801179688423872e-03</internalNodes>\n          <leafValues>\n            -1.0931409895420074e-01 7.9391218721866608e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3925 -4.4442281126976013e-02</internalNodes>\n          <leafValues>\n            3.3827048540115356e-01 -2.6649719104170799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3926 -6.5993092954158783e-02</internalNodes>\n          <leafValues>\n            -5.3106492757797241e-01 1.7543010413646698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3927 -1.0968820191919804e-02</internalNodes>\n          <leafValues>\n            -1.6612820327281952e-01 4.9488350749015808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3928 3.8149021565914154e-02</internalNodes>\n          <leafValues>\n            -4.1509900242090225e-02 2.0616669952869415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3929 4.0625538676977158e-03</internalNodes>\n          <leafValues>\n            4.8925049602985382e-02 -8.4866181015968323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3930 3.2693019602447748e-03</internalNodes>\n          <leafValues>\n            -1.1883019655942917e-01 8.6803138256072998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3931 -1.2488859938457608e-03</internalNodes>\n          <leafValues>\n            -1.4354729652404785e-01 2.1422969177365303e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3932 -1.7064889892935753e-02</internalNodes>\n          <leafValues>\n            -5.2316349744796753e-01 1.6529040411114693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3933 -2.3354699835181236e-02</internalNodes>\n          <leafValues>\n            -1.9698520004749298e-01 2.1972300484776497e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3934 2.7899529784917831e-02</internalNodes>\n          <leafValues>\n            3.8033228367567062e-02 -2.2323200106620789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3935 -6.7869402468204498e-02</internalNodes>\n          <leafValues>\n            -4.2076128721237183e-01 1.0559639893472195e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3936 5.7542059570550919e-02</internalNodes>\n          <leafValues>\n            -4.2111430317163467e-02 2.3515710234642029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3937 -2.1877309679985046e-01</internalNodes>\n          <leafValues>\n            6.9553351402282715e-01 -9.9031934514641762e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3938 3.7776291370391846e-01</internalNodes>\n          <leafValues>\n            -2.4721829220652580e-02 3.0367389321327209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3939 4.1029900312423706e-02</internalNodes>\n          <leafValues>\n            2.1999280899763107e-02 -2.4707089364528656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3940 2.5587070733308792e-02</internalNodes>\n          <leafValues>\n            4.2045179754495621e-02 -2.2333100438117981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3941 6.7200772464275360e-02</internalNodes>\n          <leafValues>\n            -1.6648389399051666e-02 2.4265660345554352e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3942 2.8230389580130577e-02</internalNodes>\n          <leafValues>\n            2.9572259634733200e-02 -3.0128848552703857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3943 2.4588680267333984e-01</internalNodes>\n          <leafValues>\n            1.9440819742158055e-03 -4.2153918743133545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3944 -9.5752447843551636e-02</internalNodes>\n          <leafValues>\n            -6.4711397886276245e-01 1.3180449604988098e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3945 -1.0596579872071743e-02</internalNodes>\n          <leafValues>\n            -2.0484970510005951e-01 2.8054440394043922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3946 6.7103967070579529e-02</internalNodes>\n          <leafValues>\n            2.9053989797830582e-02 -2.6770511269569397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3947 -7.9280838370323181e-02</internalNodes>\n          <leafValues>\n            2.1911109983921051e-01 -1.5684010460972786e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3948 -4.0710358880460262e-03</internalNodes>\n          <leafValues>\n            2.2031579911708832e-01 -4.0581289678812027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3949 3.7690360099077225e-02</internalNodes>\n          <leafValues>\n            -1.2946240603923798e-01 6.1921589076519012e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3950 1.8453929573297501e-02</internalNodes>\n          <leafValues>\n            -3.2800889015197754e-01 2.9745969921350479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3951 1.5218369662761688e-01</internalNodes>\n          <leafValues>\n            1.1928870342671871e-02 -4.3678689002990723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3952 1.0948959738016129e-01</internalNodes>\n          <leafValues>\n            2.4663779884576797e-02 -3.1567180156707764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3953 -4.4906709343194962e-02</internalNodes>\n          <leafValues>\n            2.3082759976387024e-01 -2.2163389250636101e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3954 1.4668619632720947e-01</internalNodes>\n          <leafValues>\n            1.8490659072995186e-02 -4.6669480204582214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3955 -4.0597580373287201e-02</internalNodes>\n          <leafValues>\n            2.0691379904747009e-01 -4.1412089020013809e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>293</maxWeakCount>\n      <stageThreshold>-1.3393770456314087e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3956 2.5723339058458805e-03</internalNodes>\n          <leafValues>\n            -2.4097059667110443e-01 1.5659730136394501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3957 5.7603712193667889e-03</internalNodes>\n          <leafValues>\n            -4.3601021170616150e-01 8.0516032874584198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3958 -1.0138600319623947e-01</internalNodes>\n          <leafValues>\n            3.9704030752182007e-01 -6.5761536359786987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3959 1.3221249682828784e-03</internalNodes>\n          <leafValues>\n            -4.2382979393005371e-01 2.8659680858254433e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3960 5.4164527682587504e-04</internalNodes>\n          <leafValues>\n            6.7418687045574188e-02 -3.1019261479377747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3961 2.4447739124298096e-03</internalNodes>\n          <leafValues>\n            1.3928419910371304e-02 -2.4488939344882965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3962 1.4049450401216745e-03</internalNodes>\n          <leafValues>\n            -1.5040999650955200e-01 1.2638579308986664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3963 1.1241709580644965e-03</internalNodes>\n          <leafValues>\n            -2.7436348795890808e-01 7.1175657212734222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3964 -1.3413740089163184e-03</internalNodes>\n          <leafValues>\n            -3.7685438990592957e-01 5.0038158893585205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3965 4.1714560240507126e-02</internalNodes>\n          <leafValues>\n            1.1733000166714191e-02 -5.4509437084197998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3966 2.1810019388794899e-03</internalNodes>\n          <leafValues>\n            -2.0847110450267792e-01 8.4929227828979492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3967 1.9655700773000717e-02</internalNodes>\n          <leafValues>\n            2.9568189755082130e-02 -2.4840490520000458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3968 4.9905799096450210e-04</internalNodes>\n          <leafValues>\n            -1.7222259938716888e-01 9.3910522758960724e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3969 3.3110571093857288e-03</internalNodes>\n          <leafValues>\n            7.9480826854705811e-02 -1.8249939382076263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3970 3.4921199548989534e-03</internalNodes>\n          <leafValues>\n            6.0159709304571152e-02 -2.3041090369224548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3971 1.3379369629547000e-03</internalNodes>\n          <leafValues>\n            -7.8347019851207733e-02 1.5814539790153503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3972 -3.4234288614243269e-04</internalNodes>\n          <leafValues>\n            -1.5121580660343170e-01 9.5998182892799377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3973 -7.2008459828794003e-03</internalNodes>\n          <leafValues>\n            1.0716210305690765e-01 -1.2086699903011322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3974 -3.3037480898201466e-03</internalNodes>\n          <leafValues>\n            -1.9142769277095795e-01 7.1347109973430634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3975 -8.1909723579883575e-02</internalNodes>\n          <leafValues>\n            -8.5086518526077271e-01 6.6832960583269596e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3976 -5.2563002100214362e-04</internalNodes>\n          <leafValues>\n            7.1854703128337860e-02 -2.3162660002708435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3977 -2.1477319300174713e-02</internalNodes>\n          <leafValues>\n            2.2399149835109711e-01 -3.2982278615236282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3978 -5.6700430810451508e-02</internalNodes>\n          <leafValues>\n            5.1475530862808228e-01 -2.3378230631351471e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3979 1.8419699743390083e-02</internalNodes>\n          <leafValues>\n            1.8853360787034035e-02 -4.4701090455055237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3980 -8.8926553726196289e-03</internalNodes>\n          <leafValues>\n            1.8497599661350250e-01 -6.6978506743907928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3981 1.2642369605600834e-02</internalNodes>\n          <leafValues>\n            8.6571149528026581e-02 -1.4233930408954620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3982 8.0502573400735855e-03</internalNodes>\n          <leafValues>\n            -7.7052421867847443e-02 2.1340900659561157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3983 -6.9165248423814774e-03</internalNodes>\n          <leafValues>\n            -1.7848269641399384e-01 5.6415598839521408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3984 -1.4194440096616745e-02</internalNodes>\n          <leafValues>\n            1.8763299286365509e-01 -6.7588217556476593e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3985 3.5530389286577702e-03</internalNodes>\n          <leafValues>\n            3.8925249129533768e-02 -1.4981240034103394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3986 4.8001301474869251e-03</internalNodes>\n          <leafValues>\n            4.4963311403989792e-02 -2.4595139920711517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3987 9.0420730412006378e-03</internalNodes>\n          <leafValues>\n            -5.3614400327205658e-02 1.3824699819087982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3988 4.3342178687453270e-03</internalNodes>\n          <leafValues>\n            -8.6166441440582275e-02 1.2793409824371338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3989 1.2264699675142765e-02</internalNodes>\n          <leafValues>\n            3.6203060299158096e-02 -3.7494099140167236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3990 4.9155529588460922e-02</internalNodes>\n          <leafValues>\n            -9.1319262981414795e-02 1.2587989866733551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3991 -5.8642931981012225e-04</internalNodes>\n          <leafValues>\n            9.3702591955661774e-02 -1.0736119747161865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3992 3.2971050590276718e-02</internalNodes>\n          <leafValues>\n            2.7238529175519943e-02 -4.5005699992179871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3993 1.6174600459635258e-03</internalNodes>\n          <leafValues>\n            3.2863009721040726e-02 -1.4241309463977814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3994 1.0178020456805825e-03</internalNodes>\n          <leafValues>\n            6.9898538291454315e-02 -1.7507210373878479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3995 3.4081579651683569e-03</internalNodes>\n          <leafValues>\n            -7.7970616519451141e-02 5.8423690497875214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3996 -6.9078300148248672e-03</internalNodes>\n          <leafValues>\n            1.1711090058088303e-01 -9.5380999147891998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3997 -7.8317627776414156e-04</internalNodes>\n          <leafValues>\n            6.3730940222740173e-02 -8.8190883398056030e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3998 -1.3578870333731174e-02</internalNodes>\n          <leafValues>\n            -2.7168250083923340e-01 3.9688158780336380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3999 -8.0021530389785767e-02</internalNodes>\n          <leafValues>\n            6.0115522146224976e-01 -2.4968839716166258e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4000 -1.7085570143535733e-03</internalNodes>\n          <leafValues>\n            1.0888680070638657e-01 -1.0520359873771667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4001 8.5700387135148048e-03</internalNodes>\n          <leafValues>\n            -4.1784621775150299e-02 1.4857980608940125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4002 1.5518560074269772e-02</internalNodes>\n          <leafValues>\n            2.1855160593986511e-02 -4.5708781480789185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4003 -1.5739940572530031e-03</internalNodes>\n          <leafValues>\n            5.0655461847782135e-02 -6.9658473134040833e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4004 -1.0979890357702971e-03</internalNodes>\n          <leafValues>\n            7.9917587339878082e-02 -1.1895059794187546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4005 -2.6248019188642502e-02</internalNodes>\n          <leafValues>\n            7.0614987611770630e-01 -1.3660780154168606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4006 -1.0281460359692574e-02</internalNodes>\n          <leafValues>\n            -1.8412110209465027e-01 6.6442340612411499e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4007 -3.6530280485749245e-03</internalNodes>\n          <leafValues>\n            1.2995550036430359e-01 -5.8351561427116394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4008 7.8363716602325439e-03</internalNodes>\n          <leafValues>\n            2.7073230594396591e-02 -3.3601909875869751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4009 -1.5283710323274136e-02</internalNodes>\n          <leafValues>\n            2.5562399625778198e-01 -3.5940971225500107e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4010 -6.7279259674251080e-03</internalNodes>\n          <leafValues>\n            2.4661159515380859e-01 -4.8673499375581741e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4011 1.7807850241661072e-01</internalNodes>\n          <leafValues>\n            6.0471030883491039e-03 -7.2566151618957520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4012 -1.0486179962754250e-03</internalNodes>\n          <leafValues>\n            -1.9335940480232239e-01 5.0940699875354767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4013 8.9163314551115036e-03</internalNodes>\n          <leafValues>\n            3.3024791628122330e-02 -1.6986289620399475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4014 4.0643039392307401e-04</internalNodes>\n          <leafValues>\n            -1.3117119669914246e-01 6.6818282008171082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4015 -4.7499048709869385e-01</internalNodes>\n          <leafValues>\n            -4.0152749419212341e-01 6.3146720640361309e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4016 1.0430049896240234e-01</internalNodes>\n          <leafValues>\n            2.4024970829486847e-02 -3.2695800065994263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4017 -5.1650121808052063e-02</internalNodes>\n          <leafValues>\n            1.6934829950332642e-01 -1.5539200045168400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4018 4.0506269782781601e-02</internalNodes>\n          <leafValues>\n            -2.2082980722188950e-02 3.9694729447364807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4019 2.4179749190807343e-02</internalNodes>\n          <leafValues>\n            2.1926779299974442e-02 -4.3460670113563538e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4020 -3.0531319789588451e-03</internalNodes>\n          <leafValues>\n            -1.4108030498027802e-01 5.6175179779529572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4021 -1.7123650759458542e-02</internalNodes>\n          <leafValues>\n            -6.3341897726058960e-01 9.8466947674751282e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4022 4.1705969721078873e-02</internalNodes>\n          <leafValues>\n            1.0977629572153091e-02 -6.7681282758712769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4023 4.3895491398870945e-03</internalNodes>\n          <leafValues>\n            -5.7781290262937546e-02 1.5501640737056732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4024 -4.4786250218749046e-03</internalNodes>\n          <leafValues>\n            -1.6706019639968872e-01 4.6572938561439514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4025 4.8733421135693789e-04</internalNodes>\n          <leafValues>\n            -1.5037140250205994e-01 4.6920441091060638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4026 1.5530640259385109e-02</internalNodes>\n          <leafValues>\n            2.2556010633707047e-02 -3.2370451092720032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4027 4.5443180948495865e-02</internalNodes>\n          <leafValues>\n            -9.8806591704487801e-03 6.0815322399139404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4028 -7.7960297465324402e-02</internalNodes>\n          <leafValues>\n            4.0743818879127502e-01 -1.8391529098153114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4029 -4.5014719944447279e-04</internalNodes>\n          <leafValues>\n            -3.8319730758666992e-01 1.3420820236206055e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4030 -2.1852780133485794e-02</internalNodes>\n          <leafValues>\n            -4.4697651267051697e-01 1.5379330143332481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4031 -6.3410878181457520e-02</internalNodes>\n          <leafValues>\n            3.9926728606224060e-01 -2.2168820723891258e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4032 -6.6417120397090912e-03</internalNodes>\n          <leafValues>\n            -1.4594499766826630e-01 5.1541730761528015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4033 2.0355410873889923e-02</internalNodes>\n          <leafValues>\n            -2.3113679140806198e-02 1.8792650103569031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4034 9.2754261568188667e-03</internalNodes>\n          <leafValues>\n            -5.5808931589126587e-02 1.3504269719123840e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4035 -6.4075283706188202e-02</internalNodes>\n          <leafValues>\n            2.6259770989418030e-01 -3.1913250684738159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4036 5.7537898421287537e-02</internalNodes>\n          <leafValues>\n            3.4703690558671951e-02 -2.7203989028930664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4037 -1.3369999825954437e-02</internalNodes>\n          <leafValues>\n            -1.0251790285110474e-01 2.0719829946756363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4038 2.9637520201504230e-03</internalNodes>\n          <leafValues>\n            -5.7579819113016129e-02 1.3346299529075623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4039 -4.7313207760453224e-03</internalNodes>\n          <leafValues>\n            -1.4229220151901245e-01 5.3106248378753662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4040 1.2967540323734283e-01</internalNodes>\n          <leafValues>\n            -2.1926470100879669e-02 3.3583769202232361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4041 -2.8757948894053698e-03</internalNodes>\n          <leafValues>\n            7.4970930814743042e-02 -1.0183060169219971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4042 -1.3546359725296497e-02</internalNodes>\n          <leafValues>\n            -1.5313720703125000e-01 5.2247390151023865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4043 6.3532173633575439e-02</internalNodes>\n          <leafValues>\n            9.1543495655059814e-03 -7.4869108200073242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4044 -1.0261409915983677e-02</internalNodes>\n          <leafValues>\n            1.2742519378662109e-01 -5.6786071509122849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4045 -4.3331928551197052e-02</internalNodes>\n          <leafValues>\n            -6.1829072237014771e-01 8.0406935885548592e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4046 4.0195342153310776e-03</internalNodes>\n          <leafValues>\n            -5.4130308330059052e-02 1.4864480495452881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4047 6.7003332078456879e-03</internalNodes>\n          <leafValues>\n            3.7507299333810806e-02 -1.9986230134963989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4048 -1.1208239942789078e-02</internalNodes>\n          <leafValues>\n            -1.4704710245132446e-01 5.7189401239156723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4049 -3.7890970706939697e-03</internalNodes>\n          <leafValues>\n            1.5529400110244751e-01 -3.7930488586425781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4050 -1.1098479852080345e-02</internalNodes>\n          <leafValues>\n            1.7850440740585327e-01 -4.5689649879932404e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4051 -7.3761218227446079e-03</internalNodes>\n          <leafValues>\n            -1.0891640186309814e-01 7.4425593018531799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4052 -3.2149269245564938e-03</internalNodes>\n          <leafValues>\n            9.0641707181930542e-02 -9.4377033412456512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4053 -3.5010059364140034e-03</internalNodes>\n          <leafValues>\n            -1.3498190045356750e-01 6.6652722656726837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4054 -1.4920319699740503e-05</internalNodes>\n          <leafValues>\n            -1.0505480319261551e-01 8.4583170711994171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4055 9.5882397145032883e-03</internalNodes>\n          <leafValues>\n            1.9421499222517014e-02 -2.4732840061187744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4056 5.7274959981441498e-02</internalNodes>\n          <leafValues>\n            8.1852423027157784e-03 -7.9508548974990845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4057 2.4549640715122223e-02</internalNodes>\n          <leafValues>\n            -1.5515980310738087e-02 4.8995479941368103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4058 -4.6792559325695038e-02</internalNodes>\n          <leafValues>\n            -8.4720087051391602e-01 9.0526090934872627e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4059 3.1038739252835512e-03</internalNodes>\n          <leafValues>\n            -5.3271029144525528e-02 7.8815557062625885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4060 -3.4241031855344772e-02</internalNodes>\n          <leafValues>\n            -4.8161220550537109e-01 1.3654340058565140e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4061 4.4056270271539688e-03</internalNodes>\n          <leafValues>\n            -4.9280438572168350e-02 7.8709162771701813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4062 2.3878510110080242e-03</internalNodes>\n          <leafValues>\n            -7.6887659728527069e-02 8.4614582359790802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4063 -1.1621230281889439e-02</internalNodes>\n          <leafValues>\n            -2.3086050152778625e-01 2.2584810853004456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4064 2.5225759018212557e-03</internalNodes>\n          <leafValues>\n            -5.0813131034374237e-02 1.3810400664806366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4065 1.3507470488548279e-01</internalNodes>\n          <leafValues>\n            7.5730998069047928e-03 -4.7955051064491272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4066 -2.2317951079457998e-03</internalNodes>\n          <leafValues>\n            -9.0258792042732239e-02 8.3118766546249390e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4067 -3.0061710625886917e-02</internalNodes>\n          <leafValues>\n            -5.1799142360687256e-01 1.2881710194051266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4068 -4.5464351773262024e-02</internalNodes>\n          <leafValues>\n            2.0660980045795441e-01 -3.4860398620367050e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4069 -9.2374589294195175e-03</internalNodes>\n          <leafValues>\n            -1.4695020020008087e-01 3.1320258975028992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4070 6.0185948386788368e-03</internalNodes>\n          <leafValues>\n            6.3885621726512909e-02 -1.1779619753360748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4071 -1.0322810150682926e-02</internalNodes>\n          <leafValues>\n            1.7958350479602814e-01 -4.6830028295516968e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4072 -1.7961780540645123e-03</internalNodes>\n          <leafValues>\n            -1.1374049633741379e-01 6.1730381101369858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4073 7.1363700553774834e-03</internalNodes>\n          <leafValues>\n            3.3574521541595459e-02 -1.5472589433193207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4074 6.9487772881984711e-02</internalNodes>\n          <leafValues>\n            -5.9162009507417679e-02 1.3841110467910767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4075 -3.8321871310472488e-02</internalNodes>\n          <leafValues>\n            1.5628719329833984e-01 -3.1815651804208755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4076 3.9706169627606869e-03</internalNodes>\n          <leafValues>\n            5.1252529025077820e-02 -1.7615999281406403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4077 -3.9275288581848145e-03</internalNodes>\n          <leafValues>\n            7.8947998583316803e-02 -5.1486730575561523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4078 1.9882800988852978e-03</internalNodes>\n          <leafValues>\n            -5.0474651157855988e-02 1.3366329669952393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4079 -1.6472870483994484e-03</internalNodes>\n          <leafValues>\n            4.9180198460817337e-02 -5.3437490016222000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4080 -1.1580109596252441e-02</internalNodes>\n          <leafValues>\n            -1.3224309682846069e-01 5.8321509510278702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4081 4.3496791273355484e-02</internalNodes>\n          <leafValues>\n            -2.3527380079030991e-02 1.2179140001535416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4082 1.8956169951707125e-03</internalNodes>\n          <leafValues>\n            5.6072939187288284e-02 -1.1997289955615997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4083 2.4906420148909092e-03</internalNodes>\n          <leafValues>\n            -1.2799920141696930e-01 3.5218570381402969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4084 -6.0253150761127472e-02</internalNodes>\n          <leafValues>\n            -7.8707909584045410e-01 7.7965850941836834e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4085 -1.5306809917092323e-02</internalNodes>\n          <leafValues>\n            -1.2276060134172440e-01 4.2537391185760498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4086 3.6899570841342211e-04</internalNodes>\n          <leafValues>\n            -1.2192569673061371e-01 5.9650231152772903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4087 3.0398070812225342e-03</internalNodes>\n          <leafValues>\n            -6.3023842871189117e-02 5.0918091088533401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4088 -3.5760499304160476e-04</internalNodes>\n          <leafValues>\n            -7.6859332621097565e-02 8.6624316871166229e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4089 -2.7939230203628540e-03</internalNodes>\n          <leafValues>\n            1.3074369728565216e-01 -4.6912711113691330e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4090 4.2060539126396179e-03</internalNodes>\n          <leafValues>\n            -5.3119719028472900e-02 1.2866240739822388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4091 5.1448699086904526e-02</internalNodes>\n          <leafValues>\n            1.1080370284616947e-02 -4.1434210538864136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4092 3.2859880477190018e-02</internalNodes>\n          <leafValues>\n            1.7495309934020042e-02 -3.7538790702819824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4093 -4.8408061265945435e-02</internalNodes>\n          <leafValues>\n            1.7011879384517670e-01 -2.3726450279355049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4094 1.4061340130865574e-02</internalNodes>\n          <leafValues>\n            2.5981390848755836e-02 -2.7635771036148071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4095 5.2196439355611801e-02</internalNodes>\n          <leafValues>\n            -9.5534622669219971e-03 1.0973469913005829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4096 4.4780261814594269e-02</internalNodes>\n          <leafValues>\n            -2.7032930403947830e-02 2.7434709668159485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4097 -3.7703409325331450e-03</internalNodes>\n          <leafValues>\n            -1.4412869513034821e-01 5.2342470735311508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4098 -4.1479258798062801e-03</internalNodes>\n          <leafValues>\n            -1.3706830143928528e-01 4.9621090292930603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4099 1.4685150235891342e-02</internalNodes>\n          <leafValues>\n            -4.9949668347835541e-02 1.3658650219440460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4100 1.0325849987566471e-02</internalNodes>\n          <leafValues>\n            8.3659462630748749e-02 -1.0378009825944901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4101 -1.7972270143218338e-04</internalNodes>\n          <leafValues>\n            -8.6658917367458344e-02 2.2592369467020035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4102 2.0081000402569771e-02</internalNodes>\n          <leafValues>\n            -1.9589949399232864e-02 3.4358739852905273e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4103 -2.2905580699443817e-02</internalNodes>\n          <leafValues>\n            -4.2482820153236389e-01 1.5416770242154598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4104 -5.5506028234958649e-02</internalNodes>\n          <leafValues>\n            7.3143810033798218e-01 -9.4347409904003143e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4105 -1.7899540252983570e-03</internalNodes>\n          <leafValues>\n            -8.1951782107353210e-02 3.5823788493871689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4106 -8.0740358680486679e-04</internalNodes>\n          <leafValues>\n            8.6620979011058807e-02 -7.8758612275123596e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4107 2.4445019662380219e-02</internalNodes>\n          <leafValues>\n            -2.2004250437021255e-02 9.4158843159675598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4108 -7.5640110298991203e-03</internalNodes>\n          <leafValues>\n            1.2011729925870895e-01 -7.2349771857261658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4109 2.3397218901664019e-03</internalNodes>\n          <leafValues>\n            -8.1034347414970398e-02 9.8173618316650391e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4110 -3.1817611306905746e-02</internalNodes>\n          <leafValues>\n            -3.5730469226837158e-01 1.9601309671998024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4111 1.0028080083429813e-02</internalNodes>\n          <leafValues>\n            -2.4160459637641907e-02 3.1340339779853821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4112 9.0504523541312665e-05</internalNodes>\n          <leafValues>\n            5.8050628751516342e-02 -1.1760439723730087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4113 -2.1010750904679298e-02</internalNodes>\n          <leafValues>\n            -2.0346039533615112e-01 3.4145411103963852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4114 -7.1200268575921655e-04</internalNodes>\n          <leafValues>\n            6.3303150236606598e-02 -1.0497389733791351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4115 -7.6272932346910238e-04</internalNodes>\n          <leafValues>\n            -7.4432566761970520e-02 3.4912228584289551e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4116 -5.8506328612565994e-02</internalNodes>\n          <leafValues>\n            5.5758380889892578e-01 -1.2666489928960800e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4117 2.4057500995695591e-03</internalNodes>\n          <leafValues>\n            4.4605068862438202e-02 -1.1581590026617050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4118 -1.9729519262909889e-02</internalNodes>\n          <leafValues>\n            -4.7550109028816223e-01 1.5548559837043285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4119 -2.2645130753517151e-02</internalNodes>\n          <leafValues>\n            1.1828950047492981e-01 -2.2170929238200188e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4120 -1.3123790267854929e-03</internalNodes>\n          <leafValues>\n            5.0635538995265961e-02 -1.3423310220241547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4121 -5.9856739826500416e-03</internalNodes>\n          <leafValues>\n            5.4273821413516998e-02 -6.9639056921005249e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4122 5.2245449274778366e-02</internalNodes>\n          <leafValues>\n            -1.8341360613703728e-02 4.1689381003379822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4123 -4.6837949194014072e-03</internalNodes>\n          <leafValues>\n            -1.2121260166168213e-01 3.9187919348478317e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4124 -1.5208399854600430e-02</internalNodes>\n          <leafValues>\n            -9.6487842500209808e-02 6.5325021743774414e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4125 -5.7328920811414719e-03</internalNodes>\n          <leafValues>\n            2.1023470163345337e-01 -3.1721260398626328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4126 -3.7612610030919313e-03</internalNodes>\n          <leafValues>\n            1.0085880011320114e-01 -6.1392951756715775e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4127 -1.0980520397424698e-02</internalNodes>\n          <leafValues>\n            -1.8342439830303192e-01 1.7121249809861183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4128 2.7213071007281542e-03</internalNodes>\n          <leafValues>\n            -5.8404140174388885e-02 1.0729049891233444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4129 -1.8969269469380379e-02</internalNodes>\n          <leafValues>\n            7.4764728546142578e-02 -3.4056201577186584e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4130 -7.1104627568274736e-04</internalNodes>\n          <leafValues>\n            -1.4749570190906525e-01 5.2447158843278885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4131 9.4774961471557617e-03</internalNodes>\n          <leafValues>\n            -2.5232490152120590e-02 1.0677599906921387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4132 1.0275880247354507e-01</internalNodes>\n          <leafValues>\n            1.0039360262453556e-02 -6.4630568027496338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4133 -1.1228179931640625e-01</internalNodes>\n          <leafValues>\n            -5.7247608900070190e-01 6.3971187919378281e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4134 -2.5683579966425896e-02</internalNodes>\n          <leafValues>\n            -3.2004079222679138e-01 1.7239449545741081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4135 2.5494299829006195e-02</internalNodes>\n          <leafValues>\n            -2.2127779200673103e-02 1.1838120222091675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4136 -3.0458789318799973e-02</internalNodes>\n          <leafValues>\n            -5.8747881650924683e-01 9.8222652450203896e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4137 -2.7816120535135269e-02</internalNodes>\n          <leafValues>\n            3.6785709857940674e-01 -1.2260340154170990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4138 -1.2768269516527653e-03</internalNodes>\n          <leafValues>\n            2.4150429666042328e-01 -2.4503409862518311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4139 -7.6435826718807220e-02</internalNodes>\n          <leafValues>\n            -6.3471722602844238e-01 2.7080429717898369e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4140 3.7574430461972952e-04</internalNodes>\n          <leafValues>\n            -1.3316820561885834e-01 4.6189591288566589e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4141 1.3193810358643532e-02</internalNodes>\n          <leafValues>\n            2.6501480489969254e-02 -6.8515978753566742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4142 -6.3689619302749634e-02</internalNodes>\n          <leafValues>\n            4.1126638650894165e-01 -1.5647120773792267e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4143 -8.0426287604495883e-04</internalNodes>\n          <leafValues>\n            -9.4006098806858063e-02 3.1002070754766464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4144 8.2476891111582518e-04</internalNodes>\n          <leafValues>\n            -1.5928819775581360e-01 3.7096790969371796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4145 4.8443409614264965e-03</internalNodes>\n          <leafValues>\n            -2.5698879733681679e-02 1.5079009532928467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4146 2.2941319271922112e-02</internalNodes>\n          <leafValues>\n            2.2941149771213531e-02 -2.7759069204330444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4147 5.6285588070750237e-03</internalNodes>\n          <leafValues>\n            2.0121619105339050e-02 -6.3584417104721069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4148 -8.1927451537922025e-04</internalNodes>\n          <leafValues>\n            5.5934138596057892e-02 -1.0776060074567795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4149 5.1910132169723511e-03</internalNodes>\n          <leafValues>\n            -2.6781970635056496e-02 5.5094171315431595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4150 -2.0220499485731125e-02</internalNodes>\n          <leafValues>\n            -1.2501780688762665e-01 5.9274829924106598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4151 -3.6798599176108837e-03</internalNodes>\n          <leafValues>\n            6.0474321246147156e-02 -5.9632349759340286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4152 1.0483860038220882e-02</internalNodes>\n          <leafValues>\n            -5.3652260452508926e-02 1.2906110286712646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4153 1.7904460430145264e-02</internalNodes>\n          <leafValues>\n            1.4318290166556835e-02 -2.7349731326103210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4154 3.3693820238113403e-01</internalNodes>\n          <leafValues>\n            -8.6311781778931618e-03 7.3288571834564209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4155 -1.0807479918003082e-01</internalNodes>\n          <leafValues>\n            -5.0707489252090454e-01 6.7152627743780613e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4156 -1.2219610065221786e-01</internalNodes>\n          <leafValues>\n            -7.9352718591690063e-01 7.4890498071908951e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4157 -3.7357630208134651e-03</internalNodes>\n          <leafValues>\n            -1.5436430275440216e-01 1.9933359697461128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4158 4.7283530235290527e-02</internalNodes>\n          <leafValues>\n            -3.2180741429328918e-02 2.2332429885864258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4159 -4.8949089832603931e-03</internalNodes>\n          <leafValues>\n            -1.4440849423408508e-01 2.7687419205904007e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4160 -4.6767960302531719e-03</internalNodes>\n          <leafValues>\n            4.2589519172906876e-02 -1.3181249797344208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4161 -4.0526568889617920e-02</internalNodes>\n          <leafValues>\n            1.5155360102653503e-01 -1.3137400150299072e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4162 5.1309340633451939e-03</internalNodes>\n          <leafValues>\n            -4.2436398565769196e-02 1.9428129494190216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4163 4.9947341904044151e-03</internalNodes>\n          <leafValues>\n            2.0656300708651543e-02 -1.8332560360431671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4164 -1.0946449823677540e-02</internalNodes>\n          <leafValues>\n            -1.1576370149850845e-01 6.1964198946952820e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4165 -6.7135482095181942e-03</internalNodes>\n          <leafValues>\n            1.5796749293804169e-01 -3.5399619489908218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4166 -3.0990630388259888e-02</internalNodes>\n          <leafValues>\n            -1.7271049320697784e-01 3.7916570901870728e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4167 -2.7503890451043844e-03</internalNodes>\n          <leafValues>\n            4.1495159268379211e-02 -5.5152788758277893e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4168 -2.4700429290533066e-02</internalNodes>\n          <leafValues>\n            2.9076111316680908e-01 -2.0552640780806541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4169 -1.7607269808650017e-02</internalNodes>\n          <leafValues>\n            -9.8671503365039825e-02 3.2800450921058655e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4170 8.7928329594433308e-04</internalNodes>\n          <leafValues>\n            3.6442421376705170e-02 -1.7518040537834167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4171 6.9036949425935745e-03</internalNodes>\n          <leafValues>\n            2.1444270387291908e-02 -1.1997299641370773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4172 -2.2592858877032995e-03</internalNodes>\n          <leafValues>\n            9.5944248139858246e-02 -8.1264480948448181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4173 1.5885939821600914e-02</internalNodes>\n          <leafValues>\n            -3.1494110822677612e-02 8.7531946599483490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4174 1.9379710778594017e-02</internalNodes>\n          <leafValues>\n            -3.5075489431619644e-02 1.6199189424514771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4175 -2.3565329611301422e-02</internalNodes>\n          <leafValues>\n            9.9367812275886536e-02 -5.0409961491823196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4176 -6.2582190148532391e-03</internalNodes>\n          <leafValues>\n            -1.5962609648704529e-01 5.6871950626373291e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4177 1.0289040394127369e-02</internalNodes>\n          <leafValues>\n            3.2422259449958801e-02 -1.1825840175151825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4178 -5.8485912159085274e-03</internalNodes>\n          <leafValues>\n            1.9107459485530853e-01 -3.7084739655256271e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4179 -8.5805162787437439e-02</internalNodes>\n          <leafValues>\n            -4.0877249836921692e-01 1.2781100347638130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4180 -2.4852859787642956e-03</internalNodes>\n          <leafValues>\n            -1.0116399824619293e-01 5.6311480700969696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4181 -7.1535720489919186e-03</internalNodes>\n          <leafValues>\n            -4.4118609279394150e-02 2.2217169404029846e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4182 1.2644700473174453e-03</internalNodes>\n          <leafValues>\n            6.5305598080158234e-02 -1.2273000180721283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4183 3.9825689047574997e-02</internalNodes>\n          <leafValues>\n            -5.0402980297803879e-02 1.4424259960651398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4184 1.3322670012712479e-02</internalNodes>\n          <leafValues>\n            2.3235419392585754e-01 -2.8198169544339180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4185 2.1017350256443024e-02</internalNodes>\n          <leafValues>\n            -1.9653260707855225e-02 1.0432569682598114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4186 2.4515210092067719e-01</internalNodes>\n          <leafValues>\n            8.4479590877890587e-03 -7.4833422899246216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4187 4.3030278757214546e-03</internalNodes>\n          <leafValues>\n            3.1172480434179306e-02 -9.4183586537837982e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4188 2.2224480286240578e-02</internalNodes>\n          <leafValues>\n            -3.9602920413017273e-02 1.5614870190620422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4189 -8.5019748657941818e-03</internalNodes>\n          <leafValues>\n            -1.0852319747209549e-01 2.8045600280165672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4190 1.0845540091395378e-02</internalNodes>\n          <leafValues>\n            -6.5594159066677094e-02 1.0217399895191193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4191 1.7696369905024767e-03</internalNodes>\n          <leafValues>\n            7.5369141995906830e-02 -9.5298826694488525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4192 1.0289049893617630e-01</internalNodes>\n          <leafValues>\n            -1.1767229996621609e-02 4.8167210817337036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4193 -3.5074170678853989e-02</internalNodes>\n          <leafValues>\n            -2.6299050450325012e-01 1.0002779774367809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4194 3.8302998989820480e-02</internalNodes>\n          <leafValues>\n            1.0883949697017670e-02 -5.8092927932739258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4195 1.2183119542896748e-02</internalNodes>\n          <leafValues>\n            3.1098999083042145e-02 -5.4257929325103760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4196 2.0388139411807060e-02</internalNodes>\n          <leafValues>\n            -3.7379540503025055e-02 1.8725450336933136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4197 6.5857400186359882e-03</internalNodes>\n          <leafValues>\n            -4.4194780290126801e-02 6.0033790767192841e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4198 5.8739529922604561e-03</internalNodes>\n          <leafValues>\n            3.9219710975885391e-02 -1.5857939422130585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4199 -7.8279033303260803e-02</internalNodes>\n          <leafValues>\n            2.1789179742336273e-01 -1.0094420053064823e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4200 1.5336579643189907e-02</internalNodes>\n          <leafValues>\n            -3.1219519674777985e-02 2.2452400624752045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4201 1.4171670190989971e-03</internalNodes>\n          <leafValues>\n            -1.6625450551509857e-01 2.7684109285473824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4202 -3.4021309111267328e-03</internalNodes>\n          <leafValues>\n            -2.8452378511428833e-01 2.2661060094833374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4203 -1.9340340048074722e-02</internalNodes>\n          <leafValues>\n            5.2300518751144409e-01 -5.0734821707010269e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4204 -1.6514319926500320e-02</internalNodes>\n          <leafValues>\n            7.0619380474090576e-01 -8.2714930176734924e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4205 -6.4589809626340866e-03</internalNodes>\n          <leafValues>\n            -1.2104330211877823e-01 3.8718421012163162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4206 -4.3003219179809093e-03</internalNodes>\n          <leafValues>\n            -1.2103659659624100e-01 5.5335890501737595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4207 1.0784200392663479e-02</internalNodes>\n          <leafValues>\n            -3.8975819945335388e-02 1.9870519638061523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4208 -1.1527650058269501e-03</internalNodes>\n          <leafValues>\n            9.3596100807189941e-02 -6.4248889684677124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4209 -4.2101260274648666e-02</internalNodes>\n          <leafValues>\n            -3.0032190680503845e-01 1.5909299254417419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4210 3.0202090274542570e-03</internalNodes>\n          <leafValues>\n            -6.5310478210449219e-02 9.4754762947559357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4211 2.9999990016222000e-02</internalNodes>\n          <leafValues>\n            1.7673229798674583e-02 -2.2457149624824524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4212 -1.3678170507773757e-03</internalNodes>\n          <leafValues>\n            1.3394910097122192e-01 -5.0086550414562225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4213 -2.3151950910687447e-02</internalNodes>\n          <leafValues>\n            -1.8310110270977020e-01 1.9103579223155975e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4214 6.3826322555541992e-02</internalNodes>\n          <leafValues>\n            7.5651248916983604e-03 -8.3116590976715088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4215 -1.4831620454788208e-01</internalNodes>\n          <leafValues>\n            -1. 3.4445689525455236e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4216 1.3207890151534230e-04</internalNodes>\n          <leafValues>\n            5.1135819405317307e-02 -1.1863200366497040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4217 6.6078707575798035e-02</internalNodes>\n          <leafValues>\n            7.1528651751577854e-03 -4.2906388640403748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4218 6.1758249066770077e-03</internalNodes>\n          <leafValues>\n            -5.9010580182075500e-02 1.0781309753656387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4219 -3.3506110310554504e-02</internalNodes>\n          <leafValues>\n            -3.7636739015579224e-01 1.7037799581885338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4220 -9.7032980993390083e-03</internalNodes>\n          <leafValues>\n            1.3820339739322662e-01 -4.3922200798988342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4221 -7.2475131601095200e-03</internalNodes>\n          <leafValues>\n            -2.2192749381065369e-01 1.2801939621567726e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4222 -5.3309328854084015e-02</internalNodes>\n          <leafValues>\n            -4.5594760775566101e-01 1.2495010159909725e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4223 1.0387069545686245e-02</internalNodes>\n          <leafValues>\n            -5.1624130457639694e-02 1.2236239761114120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4224 6.7208573222160339e-02</internalNodes>\n          <leafValues>\n            3.1655121594667435e-02 -2.1086180210113525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4225 -1.5143319964408875e-02</internalNodes>\n          <leafValues>\n            1.7224070429801941e-01 -2.9209939762949944e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4226 -3.9284970611333847e-02</internalNodes>\n          <leafValues>\n            -4.8226779699325562e-01 1.4366200193762779e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4227 -5.1000402309000492e-03</internalNodes>\n          <leafValues>\n            1.3700410723686218e-01 -4.3541591614484787e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4228 4.7284159809350967e-03</internalNodes>\n          <leafValues>\n            6.5495520830154419e-02 -1.2913839519023895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4229 -1.1877629905939102e-02</internalNodes>\n          <leafValues>\n            2.0146130025386810e-01 -2.3640049621462822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4230 -4.5396368950605392e-03</internalNodes>\n          <leafValues>\n            -1.6872450709342957e-01 4.4881179928779602e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4231 -8.0548608675599098e-03</internalNodes>\n          <leafValues>\n            6.5916322171688080e-02 -4.5184228569269180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4232 -4.3037731200456619e-02</internalNodes>\n          <leafValues>\n            1.2817430496215820e-01 -6.3021719455718994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4233 1.0952279716730118e-01</internalNodes>\n          <leafValues>\n            6.0560060665011406e-03 -5.1614511013031006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4234 -7.0019549457356334e-04</internalNodes>\n          <leafValues>\n            -1.2845410406589508e-01 4.9936100840568542e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4235 -2.9595570595120080e-05</internalNodes>\n          <leafValues>\n            6.7076332867145538e-02 -9.0397119522094727e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4236 1.7749640345573425e-01</internalNodes>\n          <leafValues>\n            -7.6472861692309380e-03 8.9716571569442749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4237 -5.5364448577165604e-02</internalNodes>\n          <leafValues>\n            -6.5513938665390015e-01 6.7208600230515003e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4238 -5.1461409777402878e-02</internalNodes>\n          <leafValues>\n            -6.5337532758712769e-01 8.9703118428587914e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4239 -2.6581719517707825e-02</internalNodes>\n          <leafValues>\n            -2.8116428852081299e-01 1.7766090109944344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4240 -6.9034337997436523e-02</internalNodes>\n          <leafValues>\n            9.2583978176116943e-01 -6.2460578046739101e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4241 -3.0205730348825455e-02</internalNodes>\n          <leafValues>\n            2.3784290254116058e-01 -1.6295459121465683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4242 -9.1226873919367790e-03</internalNodes>\n          <leafValues>\n            -1.4569890499114990e-01 4.5654390007257462e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4243 -2.1233780682086945e-01</internalNodes>\n          <leafValues>\n            1.6472199559211731e-01 -1.4758829958736897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4244 -2.6254689320921898e-02</internalNodes>\n          <leafValues>\n            3.0381628870964050e-01 -2.0108530297875404e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4245 3.0262209475040436e-03</internalNodes>\n          <leafValues>\n            -1.5298280119895935e-01 2.6878539472818375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4246 8.3838596940040588e-02</internalNodes>\n          <leafValues>\n            1.0042349807918072e-02 -5.9345102310180664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4247 1.8845759332180023e-02</internalNodes>\n          <leafValues>\n            -4.5260541141033173e-02 8.4220200777053833e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4248 -4.8671411350369453e-03</internalNodes>\n          <leafValues>\n            -1.1234840005636215e-01 5.6676398962736130e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>243</maxWeakCount>\n      <stageThreshold>-1.4994510412216187e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 4249 1.1900869756937027e-01</internalNodes>\n          <leafValues>\n            -2.0186680555343628e-01 2.4417600035667419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4250 2.1277489140629768e-02</internalNodes>\n          <leafValues>\n            -2.3454399406909943e-01 1.6303069889545441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4251 3.7066950462758541e-03</internalNodes>\n          <leafValues>\n            -2.0559909939765930e-01 1.4982059597969055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4252 3.2929550856351852e-02</internalNodes>\n          <leafValues>\n            7.8803077340126038e-02 -3.3688440918922424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4253 2.5057960301637650e-02</internalNodes>\n          <leafValues>\n            -1.5932090580463409e-01 1.6405050456523895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4254 6.5863109193742275e-04</internalNodes>\n          <leafValues>\n            -2.7804228663444519e-01 8.3028919994831085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4255 -6.6210910677909851e-02</internalNodes>\n          <leafValues>\n            -3.6402150988578796e-01 6.0067348182201385e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4256 4.2186300270259380e-03</internalNodes>\n          <leafValues>\n            -1.8551510572433472e-01 1.2828220427036285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4257 1.7119459807872772e-03</internalNodes>\n          <leafValues>\n            -2.1572509407997131e-01 8.6879499256610870e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4258 -2.1390480920672417e-02</internalNodes>\n          <leafValues>\n            1.1124739795923233e-01 -1.4486509561538696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4259 5.5712480098009109e-03</internalNodes>\n          <leafValues>\n            6.2546879053115845e-02 -3.1598201394081116e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4260 4.5709838159382343e-03</internalNodes>\n          <leafValues>\n            -2.3647899925708771e-01 3.8399569690227509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4261 -1.7086030915379524e-02</internalNodes>\n          <leafValues>\n            2.0653559267520905e-01 -8.6405612528324127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4262 -3.0640950426459312e-02</internalNodes>\n          <leafValues>\n            4.1523000597953796e-01 -2.5601850822567940e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4263 2.5803469121456146e-02</internalNodes>\n          <leafValues>\n            4.0156230330467224e-02 -3.7444010376930237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4264 2.6425920426845551e-02</internalNodes>\n          <leafValues>\n            4.2625781148672104e-02 -4.1888910531997681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4265 -1.1849730275571346e-02</internalNodes>\n          <leafValues>\n            -3.0619880557060242e-01 5.1505949348211288e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4266 -1.6269849613308907e-02</internalNodes>\n          <leafValues>\n            -1.9878490269184113e-01 4.2683240026235580e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4267 -2.4036159738898277e-02</internalNodes>\n          <leafValues>\n            -3.3211991190910339e-01 4.6091418713331223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4268 7.3583971243351698e-04</internalNodes>\n          <leafValues>\n            -2.0677410066127777e-01 5.7418260723352432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4269 -2.0423160865902901e-02</internalNodes>\n          <leafValues>\n            -2.6922059059143066e-01 4.4893719255924225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4270 1.9533000886440277e-03</internalNodes>\n          <leafValues>\n            4.3481849133968353e-02 -1.4295850694179535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4271 3.3202540129423141e-02</internalNodes>\n          <leafValues>\n            6.1112720519304276e-02 -2.0773139595985413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4272 2.1049549803137779e-02</internalNodes>\n          <leafValues>\n            -5.5196329951286316e-02 1.7273330688476562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4273 -4.2487941682338715e-03</internalNodes>\n          <leafValues>\n            -3.1202110648155212e-01 3.5714551806449890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4274 1.4544890262186527e-02</internalNodes>\n          <leafValues>\n            -1.2891520559787750e-01 1.0874609649181366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4275 4.4858800247311592e-03</internalNodes>\n          <leafValues>\n            5.0264850258827209e-02 -2.2729620337486267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4276 -7.2019517421722412e-02</internalNodes>\n          <leafValues>\n            -5.0357151031494141e-01 2.4909170344471931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4277 7.4088312685489655e-02</internalNodes>\n          <leafValues>\n            -2.6110179722309113e-02 4.6904951333999634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4278 -1.9376210868358612e-02</internalNodes>\n          <leafValues>\n            -8.7742328643798828e-02 5.2696809172630310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4279 -1.5192059800028801e-02</internalNodes>\n          <leafValues>\n            -1.6470350325107574e-01 7.4841916561126709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4280 6.7975218407809734e-03</internalNodes>\n          <leafValues>\n            -1.2512689828872681e-01 8.2092992961406708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4281 -1.9816169515252113e-03</internalNodes>\n          <leafValues>\n            6.1259880661964417e-02 -1.9138810038566589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4282 -4.0343839675188065e-02</internalNodes>\n          <leafValues>\n            -3.4634640812873840e-01 3.3814091235399246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4283 -9.7851715981960297e-03</internalNodes>\n          <leafValues>\n            2.4771960079669952e-01 -5.1031429320573807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4284 1.3061050325632095e-02</internalNodes>\n          <leafValues>\n            -5.9378169476985931e-02 1.4298720657825470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4285 1.2519969604909420e-02</internalNodes>\n          <leafValues>\n            -1.0087440162897110e-01 2.0617449283599854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4286 6.1620049178600311e-02</internalNodes>\n          <leafValues>\n            1.0850620456039906e-02 -4.9976751208305359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4287 1.5351610258221626e-02</internalNodes>\n          <leafValues>\n            3.0459180474281311e-02 -4.0248531103134155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4288 6.7390319891273975e-03</internalNodes>\n          <leafValues>\n            -1.5230870246887207e-01 3.4763731062412262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4289 2.7166040614247322e-02</internalNodes>\n          <leafValues>\n            3.2465178519487381e-02 -3.7905651330947876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4290 -4.9443650990724564e-02</internalNodes>\n          <leafValues>\n            -4.1042488813400269e-01 1.5265700407326221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4291 3.2999709248542786e-02</internalNodes>\n          <leafValues>\n            2.8922239318490028e-02 -4.3119680881500244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4292 3.7604149430990219e-02</internalNodes>\n          <leafValues>\n            2.0920699462294579e-02 -3.5471540689468384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4293 1.7311640083789825e-02</internalNodes>\n          <leafValues>\n            -1.5490870177745819e-01 7.3543228209018707e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4294 -1.7037079669535160e-03</internalNodes>\n          <leafValues>\n            -9.5346920192241669e-02 5.1517289131879807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4295 -1.5008790418505669e-02</internalNodes>\n          <leafValues>\n            2.1057499945163727e-01 -5.2197169512510300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4296 -4.1283361613750458e-02</internalNodes>\n          <leafValues>\n            -4.8727679252624512e-01 1.6686370596289635e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4297 -1.7190299928188324e-02</internalNodes>\n          <leafValues>\n            2.3070749640464783e-01 -5.7094439864158630e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4298 3.9707008749246597e-02</internalNodes>\n          <leafValues>\n            1.7016230151057243e-02 -3.8233861327171326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4299 4.7051470726728439e-02</internalNodes>\n          <leafValues>\n            4.2239248752593994e-02 -2.8050369024276733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4300 -1.1948949657380581e-02</internalNodes>\n          <leafValues>\n            -2.3056490719318390e-01 2.6532189920544624e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4301 -7.9857409000396729e-02</internalNodes>\n          <leafValues>\n            -8.4963917732238770e-01 1.2582180090248585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4302 2.5627639144659042e-02</internalNodes>\n          <leafValues>\n            2.3311240598559380e-02 -2.4923819303512573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4303 -3.1094370409846306e-02</internalNodes>\n          <leafValues>\n            -2.3769870400428772e-01 4.6116128563880920e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4304 4.6573221683502197e-02</internalNodes>\n          <leafValues>\n            2.8770290315151215e-02 -5.3739601373672485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4305 -5.4066929966211319e-02</internalNodes>\n          <leafValues>\n            2.7794760465621948e-01 -4.7770768404006958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4306 1.8918470013886690e-03</internalNodes>\n          <leafValues>\n            -9.8254829645156860e-02 4.7856420278549194e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4307 3.3229328691959381e-02</internalNodes>\n          <leafValues>\n            -5.2595350891351700e-02 2.3564100265502930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4308 1.1775200255215168e-03</internalNodes>\n          <leafValues>\n            -2.3401489853858948e-01 2.6142070069909096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4309 1.9482020288705826e-03</internalNodes>\n          <leafValues>\n            -1.5223619341850281e-01 7.8751467168331146e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4310 5.5945508182048798e-02</internalNodes>\n          <leafValues>\n            1.1540699750185013e-02 -1.9889539480209351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4311 2.9455369338393211e-02</internalNodes>\n          <leafValues>\n            3.3315770328044891e-02 -3.2850489020347595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4312 4.0880320593714714e-03</internalNodes>\n          <leafValues>\n            -8.6178407073020935e-02 7.9575799405574799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4313 -5.9127728454768658e-03</internalNodes>\n          <leafValues>\n            -1.7738300561904907e-01 6.0648940503597260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4314 -6.2419679015874863e-02</internalNodes>\n          <leafValues>\n            2.4396699666976929e-01 -3.3243889920413494e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4315 -3.7195120006799698e-02</internalNodes>\n          <leafValues>\n            2.6807048916816711e-01 -3.9979271590709686e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4316 -1.4324760437011719e-01</internalNodes>\n          <leafValues>\n            2.9332828521728516e-01 -2.6897290721535683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4317 -4.2845219373703003e-02</internalNodes>\n          <leafValues>\n            -2.5283750891685486e-01 4.1232049465179443e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4318 1.1560089886188507e-01</internalNodes>\n          <leafValues>\n            -1.4965849928557873e-02 2.4187250435352325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4319 5.0169471651315689e-02</internalNodes>\n          <leafValues>\n            8.8590547442436218e-02 -1.2442570179700851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4320 1.0200110077857971e-01</internalNodes>\n          <leafValues>\n            1.2396319769322872e-02 -3.6982178688049316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4321 -5.2397060208022594e-03</internalNodes>\n          <leafValues>\n            -2.5912949442863464e-01 4.0550298988819122e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4322 -1.9227810204029083e-02</internalNodes>\n          <leafValues>\n            2.0064230263233185e-01 -6.5223582088947296e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4323 -1.1133120395243168e-02</internalNodes>\n          <leafValues>\n            -4.6262189745903015e-01 2.4428030475974083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4324 9.7551010549068451e-02</internalNodes>\n          <leafValues>\n            1.2901189737021923e-02 -7.4022471904754639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4325 4.6071741729974747e-02</internalNodes>\n          <leafValues>\n            1.8453989177942276e-02 -4.8419821262359619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4326 -8.3533532917499542e-02</internalNodes>\n          <leafValues>\n            -8.8434767723083496e-01 1.6764779575169086e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4327 6.0535832308232784e-03</internalNodes>\n          <leafValues>\n            -1.5865640342235565e-01 6.7758671939373016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4328 -1.3178240042179823e-03</internalNodes>\n          <leafValues>\n            -8.7943129241466522e-02 6.6591359674930573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4329 -2.0939730107784271e-02</internalNodes>\n          <leafValues>\n            2.3358969390392303e-01 -5.2145671099424362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4330 -8.8145419955253601e-02</internalNodes>\n          <leafValues>\n            4.8081308603286743e-01 -1.1917640455067158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4331 1.6344599425792694e-02</internalNodes>\n          <leafValues>\n            -5.3838059306144714e-02 2.2349910438060760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4332 -2.2833999991416931e-01</internalNodes>\n          <leafValues>\n            3.6013820767402649e-01 -1.8727909773588181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4333 8.4737362340092659e-03</internalNodes>\n          <leafValues>\n            -5.6207131594419479e-02 1.6089470684528351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4334 -9.8505034111440182e-04</internalNodes>\n          <leafValues>\n            1.0108830034732819e-01 -1.0455229878425598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4335 4.9648447893559933e-03</internalNodes>\n          <leafValues>\n            -7.9359367489814758e-02 1.3140240311622620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4336 -1.3171610422432423e-02</internalNodes>\n          <leafValues>\n            -1.2099819630384445e-01 3.7730131298303604e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4337 8.2112876698374748e-03</internalNodes>\n          <leafValues>\n            -5.3597409278154373e-02 2.2156579792499542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4338 -4.8930559307336807e-02</internalNodes>\n          <leafValues>\n            -3.9349249005317688e-01 1.9850309938192368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4339 7.4527352117002010e-03</internalNodes>\n          <leafValues>\n            5.8218438178300858e-02 -2.5317558646202087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4340 7.7388651669025421e-02</internalNodes>\n          <leafValues>\n            -5.7724680751562119e-02 2.0154540240764618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4341 4.9968929961323738e-03</internalNodes>\n          <leafValues>\n            8.9260630309581757e-02 -1.3082459568977356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4342 -4.0977269411087036e-02</internalNodes>\n          <leafValues>\n            -1.7190429568290710e-01 2.2051449865102768e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4343 3.0041709542274475e-03</internalNodes>\n          <leafValues>\n            4.5379869639873505e-02 -2.4130369722843170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4344 1.5435700118541718e-01</internalNodes>\n          <leafValues>\n            -3.2916471362113953e-02 3.2090398669242859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4345 1.5153509564697742e-02</internalNodes>\n          <leafValues>\n            5.3576458245515823e-02 -1.6273179650306702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4346 9.5209293067455292e-02</internalNodes>\n          <leafValues>\n            1.3132530264556408e-02 -4.3389630317687988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4347 -2.2066019475460052e-02</internalNodes>\n          <leafValues>\n            1.8358850479125977e-01 -5.3995680063962936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4348 -4.0623430162668228e-02</internalNodes>\n          <leafValues>\n            -4.5687249302864075e-01 1.1119400151073933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4349 -2.1428579930216074e-03</internalNodes>\n          <leafValues>\n            9.5221467316150665e-02 -1.0431689769029617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4350 -9.6598910167813301e-03</internalNodes>\n          <leafValues>\n            -2.8121781349182129e-01 3.1387180089950562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4351 -1.7860020697116852e-01</internalNodes>\n          <leafValues>\n            4.6675390005111694e-01 -2.2296290844678879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4352 -2.0536049269139767e-03</internalNodes>\n          <leafValues>\n            -8.8460110127925873e-02 2.5863479822874069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4353 -4.6333461068570614e-03</internalNodes>\n          <leafValues>\n            6.0720779001712799e-02 -1.6562700271606445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4354 4.6847991645336151e-02</internalNodes>\n          <leafValues>\n            -4.0696758776903152e-02 1.0598970204591751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4355 -9.0538233518600464e-02</internalNodes>\n          <leafValues>\n            -6.3367050886154175e-01 1.6277700662612915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4356 -6.6260926425457001e-02</internalNodes>\n          <leafValues>\n            -2.8792759776115417e-01 6.1133177950978279e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4357 2.4731729179620743e-02</internalNodes>\n          <leafValues>\n            4.0057931095361710e-02 -2.3272530734539032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4358 -1.3736580312252045e-01</internalNodes>\n          <leafValues>\n            4.7250029444694519e-01 -8.2997139543294907e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4359 -6.3414901494979858e-02</internalNodes>\n          <leafValues>\n            4.3039301037788391e-01 -2.1049000322818756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4360 -3.3071819692850113e-02</internalNodes>\n          <leafValues>\n            -1.1073499917984009e-01 3.3718731254339218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4361 1.0934790223836899e-01</internalNodes>\n          <leafValues>\n            1.3508499599993229e-02 -6.5502017736434937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4362 1.5925880521535873e-02</internalNodes>\n          <leafValues>\n            3.3672690391540527e-02 -7.0779062807559967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4363 -7.4891438707709312e-03</internalNodes>\n          <leafValues>\n            -2.6472839713096619e-01 3.8183860480785370e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4364 9.8611623980104923e-04</internalNodes>\n          <leafValues>\n            -1.6149909794330597e-01 2.9475390911102295e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4365 2.5206479430198669e-01</internalNodes>\n          <leafValues>\n            -3.2382488250732422e-02 3.1068611145019531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4366 -2.8892729431390762e-02</internalNodes>\n          <leafValues>\n            -4.9116641283035278e-01 1.4923149719834328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4367 -5.5389881134033203e-02</internalNodes>\n          <leafValues>\n            5.7543408870697021e-01 -1.8582839518785477e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4368 3.1414598226547241e-02</internalNodes>\n          <leafValues>\n            2.0720759406685829e-02 -9.4729647040367126e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4369 2.8307519387453794e-03</internalNodes>\n          <leafValues>\n            -2.2519350051879883e-01 4.1564159095287323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4370 -3.3751260489225388e-02</internalNodes>\n          <leafValues>\n            -1.6646580398082733e-01 7.2693623602390289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4371 -3.8290288299322128e-02</internalNodes>\n          <leafValues>\n            7.9213732481002808e-01 -1.1434529908001423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4372 -1.7989480867981911e-02</internalNodes>\n          <leafValues>\n            1.1361669749021530e-01 -4.4032510370016098e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4373 1.8146529793739319e-02</internalNodes>\n          <leafValues>\n            3.4219540655612946e-02 -2.5041630864143372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4374 -6.9133192300796509e-02</internalNodes>\n          <leafValues>\n            -2.9793199896812439e-01 4.9929767847061157e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4375 1.2525920569896698e-01</internalNodes>\n          <leafValues>\n            1.0709079913794994e-02 -7.6342308521270752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4376 3.7683561444282532e-02</internalNodes>\n          <leafValues>\n            -3.4866910427808762e-02 1.9532379508018494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4377 -7.6676071621477604e-03</internalNodes>\n          <leafValues>\n            1.7114819586277008e-01 -5.1101781427860260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4378 3.5654550883919001e-03</internalNodes>\n          <leafValues>\n            -6.9071911275386810e-02 6.5724693238735199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4379 -1.8968600779771805e-02</internalNodes>\n          <leafValues>\n            -4.0976929664611816e-01 2.0560229197144508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4380 -2.0211370661854744e-02</internalNodes>\n          <leafValues>\n            3.3508920669555664e-01 -2.7907410636544228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4381 -1.9064599648118019e-02</internalNodes>\n          <leafValues>\n            1.9361929595470428e-01 -4.8648219555616379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4382 1.0313340276479721e-01</internalNodes>\n          <leafValues>\n            1.9382460042834282e-02 -1.1198680102825165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4383 9.8863355815410614e-03</internalNodes>\n          <leafValues>\n            -2.4043160676956177e-01 4.4305600225925446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4384 4.3293699622154236e-02</internalNodes>\n          <leafValues>\n            1.0728780180215836e-02 -6.4660537242889404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4385 6.1878331005573273e-02</internalNodes>\n          <leafValues>\n            1.0291899554431438e-02 -7.2967112064361572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4386 9.7703160718083382e-03</internalNodes>\n          <leafValues>\n            3.1311180442571640e-02 -1.5605080127716064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4387 -8.3175063133239746e-02</internalNodes>\n          <leafValues>\n            -3.3045348525047302e-01 2.3997390642762184e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4388 -3.1724658608436584e-01</internalNodes>\n          <leafValues>\n            5.4760771989822388e-01 -1.7853379249572754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4389 6.7434520460665226e-03</internalNodes>\n          <leafValues>\n            -6.6969439387321472e-02 1.2657959759235382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4390 4.0886890143156052e-02</internalNodes>\n          <leafValues>\n            4.3191551230847836e-03 -2.2032399475574493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4391 6.4959921874105930e-03</internalNodes>\n          <leafValues>\n            5.4097741842269897e-02 -1.5504899621009827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4392 -3.2832350581884384e-02</internalNodes>\n          <leafValues>\n            3.0770578980445862e-01 -2.4346910417079926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4393 -1.6127960756421089e-02</internalNodes>\n          <leafValues>\n            -1.0477919876575470e-01 9.1267466545104980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4394 3.4646671265363693e-02</internalNodes>\n          <leafValues>\n            1.4030230231583118e-02 -1.8207600712776184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4395 -3.3005408942699432e-02</internalNodes>\n          <leafValues>\n            3.8698929548263550e-01 -2.1859629079699516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4396 -4.3908338993787766e-02</internalNodes>\n          <leafValues>\n            -3.0621778964996338e-01 2.2774800658226013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4397 2.4842899292707443e-02</internalNodes>\n          <leafValues>\n            3.2077241688966751e-02 -2.5279021263122559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4398 1.0331260040402412e-02</internalNodes>\n          <leafValues>\n            -6.0551200062036514e-02 1.2119130045175552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4399 -6.7832246422767639e-02</internalNodes>\n          <leafValues>\n            -5.5833387374877930e-01 1.5336999669671059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4400 3.4947868436574936e-02</internalNodes>\n          <leafValues>\n            1.1647179722785950e-02 -2.5563651323318481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4401 -2.5261789560317993e-02</internalNodes>\n          <leafValues>\n            3.2832020521163940e-01 -2.3357210680842400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4402 7.5701558962464333e-03</internalNodes>\n          <leafValues>\n            7.1183882653713226e-02 -8.3878181874752045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4403 1.1809100210666656e-01</internalNodes>\n          <leafValues>\n            -4.1809991002082825e-02 2.2083349525928497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4404 3.6332231014966965e-02</internalNodes>\n          <leafValues>\n            1.7415270209312439e-01 -5.1788080483675003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4405 1.3216850347816944e-02</internalNodes>\n          <leafValues>\n            -4.7699850797653198e-01 1.8878389149904251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4406 1.4325110241770744e-02</internalNodes>\n          <leafValues>\n            2.1834760904312134e-02 -1.3961690664291382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4407 1.3779220171272755e-03</internalNodes>\n          <leafValues>\n            -2.0156779885292053e-01 3.9925381541252136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4408 1.4492850005626678e-01</internalNodes>\n          <leafValues>\n            -3.3947311341762543e-02 1.4805939793586731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4409 2.0336720347404480e-01</internalNodes>\n          <leafValues>\n            -2.8280159458518028e-02 3.0469599366188049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4410 -3.0550520867109299e-02</internalNodes>\n          <leafValues>\n            1.5751589834690094e-01 -3.4339658915996552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4411 -1.1067859828472137e-02</internalNodes>\n          <leafValues>\n            2.4688349664211273e-01 -3.7554491311311722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4412 2.5981210172176361e-02</internalNodes>\n          <leafValues>\n            2.1994030103087425e-02 -1.4765749871730804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4413 -4.8331938683986664e-02</internalNodes>\n          <leafValues>\n            -2.5580298900604248e-01 3.2857868820428848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4414 1.5268280170857906e-02</internalNodes>\n          <leafValues>\n            6.2162041664123535e-02 -5.1811810582876205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4415 -2.4390730261802673e-01</internalNodes>\n          <leafValues>\n            5.0339847803115845e-01 -1.6864169389009476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4416 -3.2398870680481195e-03</internalNodes>\n          <leafValues>\n            -1.3850170373916626e-01 6.3738316297531128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4417 6.1450928449630737e-02</internalNodes>\n          <leafValues>\n            -5.6962829083204269e-02 1.4706780016422272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4418 4.3161489069461823e-02</internalNodes>\n          <leafValues>\n            2.3441100493073463e-02 -2.6922780275344849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4419 -1.1370860040187836e-02</internalNodes>\n          <leafValues>\n            -2.6135998964309692e-01 3.3624760806560516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4420 -1.5418549999594688e-02</internalNodes>\n          <leafValues>\n            2.2153179347515106e-01 -4.0866490453481674e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4421 4.5487228780984879e-02</internalNodes>\n          <leafValues>\n            -3.1598750501871109e-02 2.5687301158905029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4422 -1.5879619866609573e-02</internalNodes>\n          <leafValues>\n            -2.9981338977813721e-01 2.7006199583411217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4423 5.7012498378753662e-02</internalNodes>\n          <leafValues>\n            1.5179580077528954e-02 -5.2078807353973389e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4424 -1.5038490295410156e-01</internalNodes>\n          <leafValues>\n            2.5164321064949036e-01 -4.0796510875225067e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4425 -4.2246039956808090e-02</internalNodes>\n          <leafValues>\n            -4.8303580284118652e-01 1.9222039729356766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4426 -7.4928469955921173e-02</internalNodes>\n          <leafValues>\n            -9.5458990335464478e-01 4.4229729101061821e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4427 -2.1251840516924858e-02</internalNodes>\n          <leafValues>\n            3.1850698590278625e-01 -2.8021970763802528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4428 5.3983781486749649e-02</internalNodes>\n          <leafValues>\n            2.7037480846047401e-02 -3.4430688619613647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4429 3.3572580665349960e-02</internalNodes>\n          <leafValues>\n            -7.6545879244804382e-02 1.4255550503730774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4430 -6.7975879646837711e-03</internalNodes>\n          <leafValues>\n            1.7748320102691650e-01 -4.3155338615179062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4431 -1.3311849907040596e-03</internalNodes>\n          <leafValues>\n            1.5498100221157074e-01 -7.6261833310127258e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4432 3.9364699274301529e-02</internalNodes>\n          <leafValues>\n            3.6991588771343231e-02 -2.4243550002574921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4433 -6.8364520557224751e-03</internalNodes>\n          <leafValues>\n            1.0743640363216400e-01 -9.3058176338672638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4434 1.6118010506033897e-02</internalNodes>\n          <leafValues>\n            -3.5690911114215851e-02 2.4185790121555328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4435 -7.0620089769363403e-02</internalNodes>\n          <leafValues>\n            6.3363391160964966e-01 -1.2438289821147919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4436 4.4361630082130432e-01</internalNodes>\n          <leafValues>\n            -3.7221789360046387e-02 1.1892700195312500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4437 -8.1899233162403107e-02</internalNodes>\n          <leafValues>\n            3.4853339195251465e-01 -2.5211019441485405e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4438 -8.2997446879744530e-03</internalNodes>\n          <leafValues>\n            -3.0899089574813843e-01 2.5778239592909813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4439 -2.9730390757322311e-02</internalNodes>\n          <leafValues>\n            -3.0759811401367188e-01 2.5530820712447166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4440 -2.6014490053057671e-02</internalNodes>\n          <leafValues>\n            -1.2162390351295471e-01 1.8338350579142570e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4441 4.5121149742044508e-04</internalNodes>\n          <leafValues>\n            -5.4737848043441772e-01 1.3564749620854855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4442 1.8679940700531006e-01</internalNodes>\n          <leafValues>\n            7.8039847314357758e-02 -5.8137271553277969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4443 3.1894310377538204e-03</internalNodes>\n          <leafValues>\n            -2.4976019561290741e-01 3.0865840613842010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4444 -2.9449069872498512e-02</internalNodes>\n          <leafValues>\n            1.0489200055599213e-01 -4.8869129270315170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4445 2.9614970088005066e-02</internalNodes>\n          <leafValues>\n            -2.2261720150709152e-02 3.4992438554763794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4446 3.9882060140371323e-02</internalNodes>\n          <leafValues>\n            9.6727507188916206e-03 -6.7914432287216187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4447 -2.4404419586062431e-02</internalNodes>\n          <leafValues>\n            -2.6743829250335693e-01 3.0360370874404907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4448 4.3481849133968353e-02</internalNodes>\n          <leafValues>\n            -2.3372199386358261e-02 2.1356420218944550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4449 -4.8128370195627213e-02</internalNodes>\n          <leafValues>\n            -3.6890029907226562e-01 2.2832820191979408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4450 -1.3142440002411604e-03</internalNodes>\n          <leafValues>\n            5.6764688342809677e-02 -1.3795310258865356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4451 2.1767991129308939e-03</internalNodes>\n          <leafValues>\n            8.2446262240409851e-02 -1.0511689633131027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4452 -2.7471050620079041e-02</internalNodes>\n          <leafValues>\n            9.6438340842723846e-02 -5.1520779728889465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4453 5.2003171294927597e-02</internalNodes>\n          <leafValues>\n            -2.3240759968757629e-02 3.5900598764419556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4454 2.9681740328669548e-02</internalNodes>\n          <leafValues>\n            1.4641559682786465e-02 -2.1500889956951141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4455 -4.7545950859785080e-02</internalNodes>\n          <leafValues>\n            -3.8834908604621887e-01 2.2062640637159348e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4456 -9.6900813281536102e-02</internalNodes>\n          <leafValues>\n            -4.3412810564041138e-01 6.4087379723787308e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4457 -3.8218989968299866e-01</internalNodes>\n          <leafValues>\n            -9.0176671743392944e-01 7.9825157299637794e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4458 -3.4389309585094452e-02</internalNodes>\n          <leafValues>\n            -3.1850269436836243e-01 9.1135511174798012e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4459 3.9068788290023804e-02</internalNodes>\n          <leafValues>\n            2.8420960530638695e-02 -2.6570749282836914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4460 1.0031700134277344e-01</internalNodes>\n          <leafValues>\n            -1.6155399382114410e-02 1.2212689965963364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4461 -1.0857210308313370e-01</internalNodes>\n          <leafValues>\n            3.7742871046066284e-01 -2.4014420807361603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4462 -4.3303978600306436e-05</internalNodes>\n          <leafValues>\n            2.0308060571551323e-02 -1.3060510158538818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4463 -3.8757279515266418e-02</internalNodes>\n          <leafValues>\n            -1.5826420485973358e-01 4.9129229038953781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4464 6.8668089807033539e-02</internalNodes>\n          <leafValues>\n            5.5041261948645115e-03 -7.2222518920898438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4465 -4.4268090277910233e-03</internalNodes>\n          <leafValues>\n            8.2263059914112091e-02 -1.0354729741811752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4466 -3.1016240245662630e-04</internalNodes>\n          <leafValues>\n            9.0432256460189819e-02 -1.0348629951477051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4467 3.7703070789575577e-02</internalNodes>\n          <leafValues>\n            6.0126338154077530e-02 -1.6111390292644501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4468 4.1672129184007645e-02</internalNodes>\n          <leafValues>\n            8.5145309567451477e-03 -2.4217429757118225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4469 -6.6434321925044060e-03</internalNodes>\n          <leafValues>\n            -2.7172479033470154e-01 3.1463291496038437e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4470 -4.0658649057149887e-02</internalNodes>\n          <leafValues>\n            -1.1673620343208313e-01 1.4849590137600899e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4471 -3.0082110315561295e-03</internalNodes>\n          <leafValues>\n            4.0028568357229233e-02 -2.3079049587249756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4472 -4.4187769293785095e-02</internalNodes>\n          <leafValues>\n            -1.7888109385967255e-01 1.7313620075583458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4473 -1.1813719756901264e-02</internalNodes>\n          <leafValues>\n            1.5633359551429749e-01 -5.4751630872488022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4474 -2.4433450400829315e-01</internalNodes>\n          <leafValues>\n            4.0716889500617981e-01 -3.8216509856283665e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4475 4.7230181097984314e-01</internalNodes>\n          <leafValues>\n            -5.5454619228839874e-02 1.6410639882087708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4476 1.7955109942704439e-03</internalNodes>\n          <leafValues>\n            9.5228001475334167e-02 -1.2934769690036774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4477 -5.0934039056301117e-02</internalNodes>\n          <leafValues>\n            2.2153440117835999e-01 -3.7975560873746872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4478 -5.9531718492507935e-02</internalNodes>\n          <leafValues>\n            -4.2974939942359924e-01 1.3196409679949284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4479 -3.5149399191141129e-02</internalNodes>\n          <leafValues>\n            -2.1232509613037109e-01 3.6872539669275284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4480 -8.2134327385574579e-04</internalNodes>\n          <leafValues>\n            7.4890241026878357e-02 -6.9701731204986572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4481 6.3945869915187359e-03</internalNodes>\n          <leafValues>\n            8.0602109432220459e-02 -1.0488619655370712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4482 6.3735827803611755e-02</internalNodes>\n          <leafValues>\n            1.1988660320639610e-02 -5.9508371353149414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4483 6.6942021250724792e-02</internalNodes>\n          <leafValues>\n            1.0711859911680222e-02 -7.0240277051925659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4484 3.5445358604192734e-02</internalNodes>\n          <leafValues>\n            8.8395569473505020e-03 -2.0588539540767670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4485 8.2025423645973206e-02</internalNodes>\n          <leafValues>\n            1.1511360295116901e-02 -6.7081338167190552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4486 -1.2151840329170227e-01</internalNodes>\n          <leafValues>\n            3.9124768972396851e-01 -6.0432488098740578e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4487 1.3732859492301941e-01</internalNodes>\n          <leafValues>\n            -1.6136020421981812e-02 4.6182548999786377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4488 -1.6075259447097778e-01</internalNodes>\n          <leafValues>\n            -1. 2.4232869036495686e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4489 6.3080438412725925e-03</internalNodes>\n          <leafValues>\n            4.3026689440011978e-02 -1.9072249531745911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4490 -8.5772968828678131e-02</internalNodes>\n          <leafValues>\n            -5.3327548503875732e-01 1.4197999611496925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4491 5.5853448808193207e-02</internalNodes>\n          <leafValues>\n            4.0535259991884232e-02 -2.0816819369792938e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>350</maxWeakCount>\n      <stageThreshold>-1.3171190023422241e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 4492 -1.1009960435330868e-02</internalNodes>\n          <leafValues>\n            1.6106800734996796e-01 -2.3270499706268311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4493 5.6892321445047855e-03</internalNodes>\n          <leafValues>\n            -2.2233660519123077e-01 1.2257739901542664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4494 4.3932348489761353e-03</internalNodes>\n          <leafValues>\n            -1.5293380618095398e-01 1.5888489782810211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4495 -5.0024059601128101e-04</internalNodes>\n          <leafValues>\n            6.1716180294752121e-02 -2.3175540566444397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4496 4.2015648796223104e-04</internalNodes>\n          <leafValues>\n            -3.0259498953819275e-01 6.1093948781490326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4497 -4.2626978829503059e-03</internalNodes>\n          <leafValues>\n            -2.4387679994106293e-01 6.9513782858848572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4498 6.5330968936905265e-04</internalNodes>\n          <leafValues>\n            -3.7112379074096680e-01 4.6169780194759369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4499 -1.0163539648056030e-01</internalNodes>\n          <leafValues>\n            4.5089960098266602e-01 -1.4424510300159454e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4500 -1.3200199464336038e-03</internalNodes>\n          <leafValues>\n            7.5765132904052734e-02 -1.9461849331855774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4501 -9.8261423408985138e-03</internalNodes>\n          <leafValues>\n            -2.7440890669822693e-01 5.2373219281435013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4502 -6.6574551165103912e-02</internalNodes>\n          <leafValues>\n            4.2804849147796631e-01 -3.2640948891639709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4503 -9.1772843152284622e-03</internalNodes>\n          <leafValues>\n            -2.5876390933990479e-01 6.1596788465976715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4504 -2.5353950913995504e-03</internalNodes>\n          <leafValues>\n            1.1473689973354340e-01 -1.0097979754209518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4505 4.9194418825209141e-03</internalNodes>\n          <leafValues>\n            4.0027469396591187e-02 -1.6378170251846313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4506 -1.6810640227049589e-03</internalNodes>\n          <leafValues>\n            -1.3706670701503754e-01 8.0321729183197021e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4507 2.1476070396602154e-03</internalNodes>\n          <leafValues>\n            -2.3408600687980652e-01 4.3113950639963150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4508 -3.3502440899610519e-02</internalNodes>\n          <leafValues>\n            -2.4204289913177490e-01 4.9100209027528763e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4509 1.4241789281368256e-01</internalNodes>\n          <leafValues>\n            -2.8680980205535889e-02 4.7807058691978455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4510 5.8733951300382614e-04</internalNodes>\n          <leafValues>\n            -2.1685610711574554e-01 4.8530109226703644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4511 -1.2295519700273871e-03</internalNodes>\n          <leafValues>\n            9.3180246651172638e-02 -1.0158210247755051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4512 1.1210669763386250e-02</internalNodes>\n          <leafValues>\n            3.6210179328918457e-02 -2.3106449842453003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4513 -2.5235990062355995e-02</internalNodes>\n          <leafValues>\n            8.5747621953487396e-02 -5.4415158927440643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4514 -1.0014030151069164e-02</internalNodes>\n          <leafValues>\n            -1.9362440705299377e-01 5.0274729728698730e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4515 -4.5554949901998043e-03</internalNodes>\n          <leafValues>\n            8.8674992322921753e-02 -1.4237509667873383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4516 -9.5264799892902374e-03</internalNodes>\n          <leafValues>\n            2.6754239201545715e-01 -3.7632450461387634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4517 2.3753349669277668e-03</internalNodes>\n          <leafValues>\n            3.9261918514966965e-02 -1.4199909567832947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4518 1.2389000039547682e-03</internalNodes>\n          <leafValues>\n            6.8643912672996521e-02 -1.8060870468616486e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4519 -1.5835729427635670e-03</internalNodes>\n          <leafValues>\n            -1.3684159517288208e-01 5.7875689119100571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4520 6.5202586352825165e-02</internalNodes>\n          <leafValues>\n            -3.4448388963937759e-02 2.5318139791488647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4521 6.6306376538705081e-05</internalNodes>\n          <leafValues>\n            -8.4601633250713348e-02 9.1657586395740509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4522 1.5117590010049753e-05</internalNodes>\n          <leafValues>\n            -9.3343816697597504e-02 1.1079390347003937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4523 -2.2637350484728813e-03</internalNodes>\n          <leafValues>\n            -1.9531199336051941e-01 3.8263510912656784e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4524 6.5463641658425331e-04</internalNodes>\n          <leafValues>\n            4.7860879451036453e-02 -1.6354900598526001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4525 5.0345290452241898e-02</internalNodes>\n          <leafValues>\n            -1.5618369914591312e-02 5.2660512924194336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4526 8.5375197231769562e-03</internalNodes>\n          <leafValues>\n            3.3894728869199753e-02 -2.7040940523147583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4527 -6.1621618270874023e-01</internalNodes>\n          <leafValues>\n            -9.3156081438064575e-01 2.6866910047829151e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4528 -2.6742840185761452e-02</internalNodes>\n          <leafValues>\n            1.2415560334920883e-01 -8.1576861441135406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4529 -1.4756740070879459e-02</internalNodes>\n          <leafValues>\n            -4.4224148988723755e-01 2.4418739601969719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4530 1.2045809999108315e-02</internalNodes>\n          <leafValues>\n            -8.4552876651287079e-02 9.2735297977924347e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4531 -4.0131900459527969e-02</internalNodes>\n          <leafValues>\n            -2.5734719634056091e-01 1.0692110285162926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4532 -1.0760580189526081e-03</internalNodes>\n          <leafValues>\n            2.8027180582284927e-02 -2.6805961132049561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4533 7.7456878498196602e-03</internalNodes>\n          <leafValues>\n            -3.6401689052581787e-02 2.6165041327476501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4534 1.3539849780499935e-02</internalNodes>\n          <leafValues>\n            2.8945919126272202e-02 -2.8003379702568054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4535 -1.2464780360460281e-02</internalNodes>\n          <leafValues>\n            -3.6258488893508911e-01 1.3006039895117283e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4536 3.5297829657793045e-02</internalNodes>\n          <leafValues>\n            1.2918749824166298e-02 -5.6460797786712646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4537 -5.5710550397634506e-02</internalNodes>\n          <leafValues>\n            1.2794859707355499e-01 -3.8257118314504623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4538 -4.5230439864099026e-03</internalNodes>\n          <leafValues>\n            -9.9410563707351685e-02 7.8997522592544556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4539 2.9874469619244337e-03</internalNodes>\n          <leafValues>\n            -4.8509139567613602e-02 1.1298680305480957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4540 -6.3613310456275940e-02</internalNodes>\n          <leafValues>\n            -6.6647279262542725e-01 1.1221170425415039e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4541 1.3244490139186382e-02</internalNodes>\n          <leafValues>\n            -6.1976868659257889e-02 1.3122899830341339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4542 -3.6382430698722601e-04</internalNodes>\n          <leafValues>\n            4.3054241687059402e-02 -1.6996359825134277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4543 -2.1500189602375031e-01</internalNodes>\n          <leafValues>\n            -4.6784079074859619e-01 1.2286320328712463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4544 6.0248938389122486e-03</internalNodes>\n          <leafValues>\n            -5.1475919783115387e-02 1.5234859287738800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4545 4.3000571429729462e-02</internalNodes>\n          <leafValues>\n            3.8120739627629519e-03 -7.5349187850952148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4546 8.5592586547136307e-03</internalNodes>\n          <leafValues>\n            2.4470439180731773e-02 -3.2796609401702881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4547 2.9510160675272346e-04</internalNodes>\n          <leafValues>\n            -7.6456926763057709e-02 6.8010047078132629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4548 9.9761411547660828e-04</internalNodes>\n          <leafValues>\n            -8.4680661559104919e-02 9.6316136419773102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4549 5.0175599753856659e-03</internalNodes>\n          <leafValues>\n            -3.9048101752996445e-02 1.0983789712190628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4550 5.5693010799586773e-03</internalNodes>\n          <leafValues>\n            4.0719300508499146e-02 -1.8395960330963135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4551 1.0486049577593803e-03</internalNodes>\n          <leafValues>\n            -4.4622048735618591e-02 7.0918112993240356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4552 3.2043100800365210e-03</internalNodes>\n          <leafValues>\n            -5.8839108794927597e-02 1.2777310609817505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4553 -1.0644660145044327e-01</internalNodes>\n          <leafValues>\n            4.3339949846267700e-01 -1.2449969537556171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4554 -8.9908082736656070e-04</internalNodes>\n          <leafValues>\n            -1.1510500311851501e-01 6.3306562602519989e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4555 2.9652470257133245e-03</internalNodes>\n          <leafValues>\n            -3.1290680170059204e-02 7.2845660150051117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4556 8.9800870046019554e-04</internalNodes>\n          <leafValues>\n            -8.6840502917766571e-02 1.0022729635238647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4557 -2.1874029189348221e-02</internalNodes>\n          <leafValues>\n            7.6143169403076172e-01 -4.5735938474535942e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4558 1.4919589739292860e-03</internalNodes>\n          <leafValues>\n            8.2724168896675110e-02 -9.6837893128395081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4559 -2.4136069696396589e-03</internalNodes>\n          <leafValues>\n            6.2480941414833069e-02 -5.0549559295177460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4560 1.2893830426037312e-02</internalNodes>\n          <leafValues>\n            -3.3901989459991455e-02 2.8036591410636902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4561 -1.9992720335721970e-03</internalNodes>\n          <leafValues>\n            -1.7152810096740723e-01 4.0084149688482285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4562 1.3713949592784047e-03</internalNodes>\n          <leafValues>\n            -1.2216719985008240e-01 6.2122181057929993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4563 -8.9740045368671417e-03</internalNodes>\n          <leafValues>\n            -1.7094230651855469e-01 4.4032000005245209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4564 -2.9300691094249487e-03</internalNodes>\n          <leafValues>\n            1.2364040315151215e-01 -6.3765726983547211e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4565 -8.0555928871035576e-03</internalNodes>\n          <leafValues>\n            1.1552560329437256e-01 -4.4458869844675064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4566 6.4662001095712185e-03</internalNodes>\n          <leafValues>\n            7.5147427618503571e-02 -1.1281009763479233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4567 -1.9541789591312408e-01</internalNodes>\n          <leafValues>\n            -8.6494231224060059e-01 3.1826570630073547e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4568 -1.5740759670734406e-01</internalNodes>\n          <leafValues>\n            -7.2405809164047241e-01 9.4235781580209732e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4569 -3.1526461243629456e-02</internalNodes>\n          <leafValues>\n            -3.8218951225280762e-01 1.6386790201067924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4570 5.0439048558473587e-02</internalNodes>\n          <leafValues>\n            -2.7623040601611137e-02 2.7306279540061951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4571 -5.5078428704291582e-04</internalNodes>\n          <leafValues>\n            4.9623548984527588e-02 -5.4462801665067673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4572 1.5047970227897167e-03</internalNodes>\n          <leafValues>\n            -6.2058940529823303e-02 1.2204010039567947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4573 -4.5796841382980347e-02</internalNodes>\n          <leafValues>\n            -9.3314772844314575e-01 6.8162381649017334e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4574 -9.3235643580555916e-03</internalNodes>\n          <leafValues>\n            -2.7436700463294983e-01 2.7820749208331108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4575 1.0689129680395126e-01</internalNodes>\n          <leafValues>\n            4.7212988138198853e-03 -4.4037041068077087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4576 1.1234519770368934e-03</internalNodes>\n          <leafValues>\n            -1.4162249863147736e-01 4.7511368989944458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4577 6.7312899045646191e-03</internalNodes>\n          <leafValues>\n            -4.5881479978561401e-02 1.1342740058898926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4578 4.1264150291681290e-02</internalNodes>\n          <leafValues>\n            1.1406780220568180e-02 -6.2894171476364136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4579 -7.3788799345493317e-02</internalNodes>\n          <leafValues>\n            -4.1924831271171570e-01 7.9344836995005608e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4580 -3.2669529318809509e-02</internalNodes>\n          <leafValues>\n            2.2224910557270050e-01 -3.0845979228615761e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4581 -5.9001590125262737e-03</internalNodes>\n          <leafValues>\n            -1.5003520250320435e-01 4.5819710940122604e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4582 -7.4141867458820343e-02</internalNodes>\n          <leafValues>\n            5.6236612796783447e-01 -1.1184119619429111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4583 -1.7110589891672134e-02</internalNodes>\n          <leafValues>\n            -3.0888330936431885e-01 1.7340350896120071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4584 2.4508470669388771e-03</internalNodes>\n          <leafValues>\n            -5.7074081152677536e-02 1.1306890100240707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4585 -2.1157979965209961e-02</internalNodes>\n          <leafValues>\n            2.0264630019664764e-01 -1.4705169945955276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4586 7.1819419972598553e-03</internalNodes>\n          <leafValues>\n            2.9788199812173843e-02 -2.2308370471000671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4587 5.0557879731059074e-03</internalNodes>\n          <leafValues>\n            -2.6257280260324478e-02 1.2028290331363678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4588 1.2610659934580326e-02</internalNodes>\n          <leafValues>\n            2.5965299457311630e-02 -2.5755238533020020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4589 3.0165250791469589e-05</internalNodes>\n          <leafValues>\n            -1.1994919925928116e-01 2.8916500508785248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4590 -1.3415860012173653e-03</internalNodes>\n          <leafValues>\n            2.0592840015888214e-01 -3.2803039997816086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4591 5.9342157328501344e-04</internalNodes>\n          <leafValues>\n            4.9788691103458405e-02 -7.0998527109622955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4592 -1.5428929589688778e-02</internalNodes>\n          <leafValues>\n            3.2733771204948425e-01 -2.0239489153027534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4593 -1.1928460298804566e-04</internalNodes>\n          <leafValues>\n            2.6405010372400284e-02 -1.4666070044040680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4594 -2.1726880222558975e-02</internalNodes>\n          <leafValues>\n            -4.4014349579811096e-01 1.4264649711549282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4595 -3.0710769817233086e-02</internalNodes>\n          <leafValues>\n            1.3549150526523590e-01 -1.7586210742592812e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4596 4.3861479498445988e-03</internalNodes>\n          <leafValues>\n            5.4423790425062180e-02 -1.1234579980373383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4597 4.7966800630092621e-03</internalNodes>\n          <leafValues>\n            -4.3494079262018204e-02 1.3108870387077332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4598 2.2497470490634441e-03</internalNodes>\n          <leafValues>\n            5.9489808976650238e-02 -1.0955479741096497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4599 4.3578739278018475e-03</internalNodes>\n          <leafValues>\n            5.9186179190874100e-02 -1.3026049733161926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4600 2.0433720201253891e-03</internalNodes>\n          <leafValues>\n            -5.1625490188598633e-02 1.3787810504436493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4601 -2.0268680527806282e-03</internalNodes>\n          <leafValues>\n            8.8105127215385437e-02 -8.5867561399936676e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4602 -6.5703789005056024e-04</internalNodes>\n          <leafValues>\n            7.1044988930225372e-02 -9.0751543641090393e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4603 4.4309969991445541e-02</internalNodes>\n          <leafValues>\n            -1.1522290296852589e-02 2.2733740508556366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4604 4.6578957699239254e-03</internalNodes>\n          <leafValues>\n            -4.6123549342155457e-02 1.5277029573917389e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4605 -4.0960058569908142e-02</internalNodes>\n          <leafValues>\n            -5.5988901853561401e-01 1.2064740061759949e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4606 -6.7416871897876263e-03</internalNodes>\n          <leafValues>\n            1.0484070330858231e-01 -6.5152801573276520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4607 -2.9713090043514967e-04</internalNodes>\n          <leafValues>\n            3.2221201807260513e-02 -8.4709979593753815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4608 -8.0926045775413513e-03</internalNodes>\n          <leafValues>\n            -1.6476640105247498e-01 4.5700121670961380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4609 4.0710348635911942e-02</internalNodes>\n          <leafValues>\n            1.0099260136485100e-02 -1.0893329977989197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4610 -1.1402929667383432e-03</internalNodes>\n          <leafValues>\n            -1.9269819557666779e-01 4.4590830802917480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4611 -2.0306430757045746e-02</internalNodes>\n          <leafValues>\n            6.8668061494827271e-01 -9.8533723503351212e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4612 4.8631370067596436e-02</internalNodes>\n          <leafValues>\n            1.1991590261459351e-02 -6.4770907163619995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4613 -5.4414950311183929e-02</internalNodes>\n          <leafValues>\n            3.4730699658393860e-01 -1.1940590105950832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4614 -5.9532530605792999e-02</internalNodes>\n          <leafValues>\n            3.6410269141197205e-01 -1.6050819307565689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4615 -3.5089451819658279e-02</internalNodes>\n          <leafValues>\n            -1.9252899289131165e-01 2.3598629981279373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4616 5.7658711448311806e-03</internalNodes>\n          <leafValues>\n            -4.6293850988149643e-02 1.5287970006465912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4617 -2.3687579669058323e-03</internalNodes>\n          <leafValues>\n            5.7345230132341385e-02 -8.8195472955703735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4618 -2.7341600507497787e-03</internalNodes>\n          <leafValues>\n            -2.3896160721778870e-01 2.5761809200048447e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4619 -9.1599775478243828e-03</internalNodes>\n          <leafValues>\n            1.0037499666213989e-01 -2.6731979101896286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4620 -5.0623171031475067e-02</internalNodes>\n          <leafValues>\n            4.6908378601074219e-01 -1.3880429789423943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4621 -4.3487590737640858e-03</internalNodes>\n          <leafValues>\n            -1.4812940359115601e-01 5.2115358412265778e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4622 4.0859800577163696e-01</internalNodes>\n          <leafValues>\n            1.5454529784619808e-02 -4.6494269371032715e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4623 5.3104009479284286e-02</internalNodes>\n          <leafValues>\n            7.8609427437186241e-03 -5.3555142879486084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4624 -4.1035288013517857e-03</internalNodes>\n          <leafValues>\n            -1.3777880370616913e-01 4.6847809106111526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4625 -2.7622529305517673e-03</internalNodes>\n          <leafValues>\n            5.2303940057754517e-02 -9.4970837235450745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4626 9.3903020024299622e-03</internalNodes>\n          <leafValues>\n            -2.3493729531764984e-02 3.6259791254997253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4627 2.3771630600094795e-02</internalNodes>\n          <leafValues>\n            8.0746166408061981e-02 -8.2893602550029755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4628 2.8008709196001291e-03</internalNodes>\n          <leafValues>\n            -2.6595699787139893e-01 2.8534680604934692e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4629 -6.3013769686222076e-03</internalNodes>\n          <leafValues>\n            8.0481633543968201e-02 -2.9016179963946342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4630 -5.1433448679745197e-03</internalNodes>\n          <leafValues>\n            -1.1473509669303894e-01 5.8448631316423416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4631 1.0679479455575347e-03</internalNodes>\n          <leafValues>\n            -3.1661890447139740e-02 5.4522778838872910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4632 1.5213950537145138e-03</internalNodes>\n          <leafValues>\n            -6.2172550708055496e-02 9.7601316869258881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4633 -3.3779911696910858e-02</internalNodes>\n          <leafValues>\n            -4.9582698941230774e-01 1.2093319557607174e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4634 -1.0505370050668716e-01</internalNodes>\n          <leafValues>\n            -9.8738801479339600e-01 5.1499558612704277e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4635 1.9685840234160423e-02</internalNodes>\n          <leafValues>\n            -5.6189429014921188e-02 9.1260537505149841e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4636 6.6470399498939514e-02</internalNodes>\n          <leafValues>\n            1.4097889885306358e-02 -4.5731648802757263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4637 -1.5898099169135094e-02</internalNodes>\n          <leafValues>\n            -2.3317760229110718e-01 1.1369620449841022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4638 4.0450799278914928e-03</internalNodes>\n          <leafValues>\n            4.3345049023628235e-02 -1.5908020734786987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4639 -3.3486548811197281e-02</internalNodes>\n          <leafValues>\n            1.3086590170860291e-01 -3.4327559173107147e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4640 2.1458480507135391e-02</internalNodes>\n          <leafValues>\n            -5.0213351845741272e-02 1.1467009782791138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4641 1.1672739684581757e-01</internalNodes>\n          <leafValues>\n            -3.4590030554682016e-03 4.4156730175018311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4642 -5.0386278890073299e-03</internalNodes>\n          <leafValues>\n            -1.3995400071144104e-01 4.0854398161172867e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4643 3.7261120975017548e-02</internalNodes>\n          <leafValues>\n            -1.6399189829826355e-02 2.3627850413322449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4644 -1.7991460859775543e-02</internalNodes>\n          <leafValues>\n            -5.6703627109527588e-01 1.0185079649090767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4645 1.0748039931058884e-01</internalNodes>\n          <leafValues>\n            1.8287489656358957e-03 -7.8705781698226929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4646 -2.1439619362354279e-02</internalNodes>\n          <leafValues>\n            1.8347090482711792e-01 -3.2410789281129837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4647 6.8095367169007659e-04</internalNodes>\n          <leafValues>\n            4.1675068438053131e-02 -8.9301638305187225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4648 -6.8581351079046726e-03</internalNodes>\n          <leafValues>\n            -1.4511869847774506e-01 5.1585499197244644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4649 1.5318280458450317e-01</internalNodes>\n          <leafValues>\n            3.1881679315119982e-03 -4.4190090894699097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4650 2.2777369245886803e-02</internalNodes>\n          <leafValues>\n            -4.3234121054410934e-02 1.7477220296859741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4651 6.6160550341010094e-03</internalNodes>\n          <leafValues>\n            4.3140821158885956e-02 -1.7188510298728943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4652 -8.8224448263645172e-03</internalNodes>\n          <leafValues>\n            1.3203169405460358e-01 -4.7509200870990753e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4653 -5.1209977827966213e-03</internalNodes>\n          <leafValues>\n            -1.8979160487651825e-01 5.7657308876514435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4654 -1.0311880148947239e-02</internalNodes>\n          <leafValues>\n            3.2286819815635681e-01 -1.9725019112229347e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4655 -2.5065759196877480e-02</internalNodes>\n          <leafValues>\n            -3.6572399735450745e-01 1.8344869837164879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4656 -1.4318429864943027e-02</internalNodes>\n          <leafValues>\n            1.5795469284057617e-01 -3.8276918232440948e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4657 -5.7383939623832703e-02</internalNodes>\n          <leafValues>\n            -3.6835289001464844e-01 1.6900209710001945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4658 -4.3680299073457718e-02</internalNodes>\n          <leafValues>\n            4.4766798615455627e-01 -1.3710459694266319e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4659 -2.4289099872112274e-01</internalNodes>\n          <leafValues>\n            -7.5490927696228027e-01 8.9195184409618378e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4660 3.8089449517428875e-03</internalNodes>\n          <leafValues>\n            -6.2916718423366547e-02 9.4282902777194977e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4661 8.9389752247370780e-05</internalNodes>\n          <leafValues>\n            -1.1253400146961212e-01 9.9447913467884064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4662 2.7378369122743607e-03</internalNodes>\n          <leafValues>\n            7.4880510568618774e-02 -9.9257610738277435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4663 2.3680560290813446e-02</internalNodes>\n          <leafValues>\n            1.2105870060622692e-02 -1.1780750006437302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4664 -4.6060070395469666e-02</internalNodes>\n          <leafValues>\n            3.9799740910530090e-01 -1.7129369080066681e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4665 2.1130219101905823e-03</internalNodes>\n          <leafValues>\n            -6.0906849801540375e-02 4.9974281340837479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4666 1.4753149822354317e-02</internalNodes>\n          <leafValues>\n            1.6629729419946671e-02 -3.7806668877601624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4667 3.5430908203125000e-02</internalNodes>\n          <leafValues>\n            -2.3844370618462563e-02 2.6354551315307617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4668 -5.0745099782943726e-02</internalNodes>\n          <leafValues>\n            -2.3141309618949890e-01 2.8320349752902985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4669 8.9874058961868286e-02</internalNodes>\n          <leafValues>\n            -1.0191249661147594e-02 2.6277700066566467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4670 -2.7411670889705420e-03</internalNodes>\n          <leafValues>\n            -1.3828440010547638e-01 4.6966280788183212e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4671 8.7385937571525574e-02</internalNodes>\n          <leafValues>\n            1.7351199639961123e-03 -8.0810409784317017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4672 -2.9055110644549131e-03</internalNodes>\n          <leafValues>\n            6.6193267703056335e-02 -9.5981188118457794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4673 -5.1255577802658081e-01</internalNodes>\n          <leafValues>\n            -1. 8.6886010831221938e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4674 -1.3281259685754776e-02</internalNodes>\n          <leafValues>\n            1.0134270042181015e-01 -6.4344279468059540e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4675 5.3660940378904343e-02</internalNodes>\n          <leafValues>\n            3.2843649387359619e-03 -8.0011987686157227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4676 3.9290629327297211e-02</internalNodes>\n          <leafValues>\n            9.0429633855819702e-03 -6.7074328660964966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4677 6.5197132527828217e-02</internalNodes>\n          <leafValues>\n            4.4964649714529514e-03 -9.7931307554244995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4678 3.2505281269550323e-02</internalNodes>\n          <leafValues>\n            -1.2679249979555607e-02 4.9774479866027832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4679 -6.5749078989028931e-02</internalNodes>\n          <leafValues>\n            -3.7844368815422058e-01 5.9391320683062077e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4680 -6.0045070946216583e-02</internalNodes>\n          <leafValues>\n            -3.9957770705223083e-01 1.4155699871480465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4681 -4.6631351113319397e-02</internalNodes>\n          <leafValues>\n            1.6843810677528381e-01 -3.7634961307048798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4682 1.8095660198014230e-04</internalNodes>\n          <leafValues>\n            -1.0198330134153366e-01 7.2940513491630554e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4683 -3.7607289850711823e-03</internalNodes>\n          <leafValues>\n            4.5154098421335220e-02 -5.4370220750570297e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4684 -5.0964287947863340e-04</internalNodes>\n          <leafValues>\n            1.6106060147285461e-01 -5.4398071020841599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4685 -1.6095000319182873e-03</internalNodes>\n          <leafValues>\n            -2.1058610081672668e-01 3.0864259228110313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4686 -5.4673491977155209e-03</internalNodes>\n          <leafValues>\n            1.9076080620288849e-01 -3.2738618552684784e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4687 4.1697090491652489e-03</internalNodes>\n          <leafValues>\n            2.0009849220514297e-02 -6.8173840641975403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4688 3.2709140796214342e-03</internalNodes>\n          <leafValues>\n            -1.1110019683837891e-01 5.8211889117956161e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4689 -5.1663857884705067e-03</internalNodes>\n          <leafValues>\n            -8.5210792720317841e-02 3.3905100077390671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4690 -1.2914719991385937e-02</internalNodes>\n          <leafValues>\n            -1.3726939260959625e-01 4.8348769545555115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4691 -3.8130749017000198e-03</internalNodes>\n          <leafValues>\n            -1.1084940284490585e-01 3.2373629510402679e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4692 -5.7762481272220612e-02</internalNodes>\n          <leafValues>\n            2.1701450645923615e-01 -2.9828049242496490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4693 -2.2619909141212702e-03</internalNodes>\n          <leafValues>\n            3.5641018301248550e-02 -5.5289078503847122e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4694 5.2979849278926849e-02</internalNodes>\n          <leafValues>\n            7.7050398103892803e-03 -7.2121208906173706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4695 -3.3839911222457886e-01</internalNodes>\n          <leafValues>\n            -9.4540262222290039e-01 4.5049181208014488e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4696 5.2918092114850879e-04</internalNodes>\n          <leafValues>\n            4.1633930057287216e-02 -1.3283179700374603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4697 2.8239609673619270e-03</internalNodes>\n          <leafValues>\n            1.3815909624099731e-01 -1.1371930129826069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4698 -2.1569489035755396e-03</internalNodes>\n          <leafValues>\n            6.3553653657436371e-02 -8.4683336317539215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4699 4.1426848620176315e-03</internalNodes>\n          <leafValues>\n            4.1431330144405365e-02 -9.1413199901580811e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4700 -1.1016559787094593e-02</internalNodes>\n          <leafValues>\n            8.0382406711578369e-02 -8.3978570997714996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4701 -6.5561989322304726e-03</internalNodes>\n          <leafValues>\n            -1.3563759624958038e-01 3.4514341503381729e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4702 -2.2384698968380690e-03</internalNodes>\n          <leafValues>\n            -1.2900340557098389e-01 6.0718830674886703e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4703 -1.2789719738066196e-02</internalNodes>\n          <leafValues>\n            2.6254388689994812e-01 -2.5295289233326912e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4704 -1.1028759926557541e-01</internalNodes>\n          <leafValues>\n            -4.0324538946151733e-01 1.3996849767863750e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4705 2.9025289695709944e-03</internalNodes>\n          <leafValues>\n            -6.0133900493383408e-02 4.0657509118318558e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4706 1.3041580095887184e-03</internalNodes>\n          <leafValues>\n            -1.1271840333938599e-01 5.3001549094915390e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4707 4.8518911004066467e-02</internalNodes>\n          <leafValues>\n            9.9352700635790825e-03 -3.3844459056854248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4708 -5.0848070532083511e-03</internalNodes>\n          <leafValues>\n            -1.3072639703750610e-01 4.7106929123401642e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4709 5.7023460976779461e-03</internalNodes>\n          <leafValues>\n            -5.2840489894151688e-02 1.2418749928474426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4710 -2.7858179528266191e-03</internalNodes>\n          <leafValues>\n            -9.6685640513896942e-02 6.6828437149524689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4711 -3.0082210432738066e-03</internalNodes>\n          <leafValues>\n            7.1778140962123871e-02 -3.8511540740728378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4712 6.9350451231002808e-03</internalNodes>\n          <leafValues>\n            -5.7932149618864059e-02 1.0691670328378677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4713 -4.7064341604709625e-02</internalNodes>\n          <leafValues>\n            1.0284499824047089e-01 -2.7998289093375206e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4714 -8.2645736634731293e-02</internalNodes>\n          <leafValues>\n            -8.5849452018737793e-01 6.3560227863490582e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4715 8.9476434513926506e-03</internalNodes>\n          <leafValues>\n            -3.9904471486806870e-02 6.6897280514240265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4716 3.0593979358673096e-01</internalNodes>\n          <leafValues>\n            7.2277039289474487e-03 -7.9749721288681030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4717 -5.8336472138762474e-03</internalNodes>\n          <leafValues>\n            -1.9526490569114685e-01 2.4196550250053406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4718 -5.3784619085490704e-03</internalNodes>\n          <leafValues>\n            7.1967631578445435e-02 -9.1547563672065735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4719 9.2504899948835373e-03</internalNodes>\n          <leafValues>\n            3.6146361380815506e-02 -7.4494920670986176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4720 3.7581291049718857e-02</internalNodes>\n          <leafValues>\n            -2.0222729071974754e-02 3.3224269747734070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4721 -4.6818740665912628e-02</internalNodes>\n          <leafValues>\n            -5.0513672828674316e-01 1.2870309874415398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4722 3.3507939428091049e-02</internalNodes>\n          <leafValues>\n            -1.8688799813389778e-02 3.0542388558387756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4723 6.8437248468399048e-02</internalNodes>\n          <leafValues>\n            -6.2482542125508189e-04 8.3963787555694580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4724 1.0151940397918224e-02</internalNodes>\n          <leafValues>\n            2.5653729215264320e-02 -2.1830080449581146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4725 -1.3866250216960907e-01</internalNodes>\n          <leafValues>\n            5.7341670989990234e-01 -6.0921781696379185e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4726 -1.1214310070499778e-03</internalNodes>\n          <leafValues>\n            7.0692487061023712e-02 -8.2995750010013580e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4727 1.4782310463488102e-03</internalNodes>\n          <leafValues>\n            -3.5161279141902924e-02 5.8569159358739853e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4728 -2.3407500702887774e-03</internalNodes>\n          <leafValues>\n            1.2667399644851685e-01 -7.7700607478618622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4729 4.3265568092465401e-03</internalNodes>\n          <leafValues>\n            3.1229879707098007e-02 -1.1680649966001511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4730 -3.2252248376607895e-02</internalNodes>\n          <leafValues>\n            -5.4395800828933716e-01 1.0386509820818901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4731 -7.1836792631074786e-04</internalNodes>\n          <leafValues>\n            -6.3850082457065582e-02 4.8989679664373398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4732 1.1035969946533442e-03</internalNodes>\n          <leafValues>\n            -7.1095839142799377e-02 8.3087973296642303e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4733 -1.0265519842505455e-02</internalNodes>\n          <leafValues>\n            1.1647050082683563e-01 -2.8178630396723747e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4734 7.2632037103176117e-02</internalNodes>\n          <leafValues>\n            7.5578331016004086e-03 -7.1635490655899048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4735 1.2232369929552078e-01</internalNodes>\n          <leafValues>\n            -3.9898478426039219e-03 6.0708892345428467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4736 -1.4398260414600372e-01</internalNodes>\n          <leafValues>\n            8.5836321115493774e-01 -5.8769038878381252e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4737 5.9525449760258198e-03</internalNodes>\n          <leafValues>\n            2.1712759509682655e-02 -1.5896700322628021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4738 -1.3158279471099377e-03</internalNodes>\n          <leafValues>\n            8.3239771425724030e-02 -7.1944266557693481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4739 -3.5782668739557266e-02</internalNodes>\n          <leafValues>\n            -3.1888490915298462e-01 6.7262151278555393e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4740 1.4122560387477279e-03</internalNodes>\n          <leafValues>\n            -6.9247573614120483e-02 8.8037729263305664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4741 -1.6188029199838638e-02</internalNodes>\n          <leafValues>\n            -6.0439001768827438e-02 6.7530423402786255e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4742 -2.8433150146156549e-03</internalNodes>\n          <leafValues>\n            6.4466439187526703e-02 -1.0504409670829773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4743 -1.5944750048220158e-03</internalNodes>\n          <leafValues>\n            -5.1919359713792801e-02 5.3710401058197021e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4744 1.8808269500732422e-01</internalNodes>\n          <leafValues>\n            -8.1325937062501907e-03 7.0354807376861572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4745 -3.3552229404449463e-02</internalNodes>\n          <leafValues>\n            -3.1318250298500061e-01 2.4297190830111504e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4746 -1.5341060236096382e-02</internalNodes>\n          <leafValues>\n            2.3687170445919037e-01 -2.8020450845360756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4747 -1.3534810394048691e-02</internalNodes>\n          <leafValues>\n            -3.1544640660285950e-01 2.3011740297079086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4748 3.2969659660011530e-03</internalNodes>\n          <leafValues>\n            3.2923359423875809e-02 -1.5933570265769958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4749 -4.4846888631582260e-02</internalNodes>\n          <leafValues>\n            1.2876190245151520e-01 -1.7795780673623085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4750 5.1291137933731079e-03</internalNodes>\n          <leafValues>\n            3.2709009945392609e-02 -1.7871360480785370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4751 1.1287770466879010e-03</internalNodes>\n          <leafValues>\n            -7.6234400272369385e-02 7.1267232298851013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4752 1.2759109959006310e-02</internalNodes>\n          <leafValues>\n            -5.1268041133880615e-02 1.2901780009269714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4753 5.3586461581289768e-04</internalNodes>\n          <leafValues>\n            6.6144347190856934e-02 -6.8021528422832489e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4754 5.8012880617752671e-04</internalNodes>\n          <leafValues>\n            7.5946256518363953e-02 -7.2426833212375641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4755 9.8113536834716797e-02</internalNodes>\n          <leafValues>\n            4.4115697965025902e-03 -5.7646822929382324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4756 3.2547891139984131e-01</internalNodes>\n          <leafValues>\n            -2.8849789872765541e-02 2.3245050013065338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4757 1.6109529882669449e-02</internalNodes>\n          <leafValues>\n            2.6149509474635124e-02 -2.2507910430431366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4758 1.6630800440907478e-02</internalNodes>\n          <leafValues>\n            -5.6001648306846619e-02 1.0011140257120132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4759 1.2567469850182533e-02</internalNodes>\n          <leafValues>\n            1.1760590225458145e-01 -2.5833690539002419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4760 2.4531960487365723e-02</internalNodes>\n          <leafValues>\n            2.1979559212923050e-02 -2.4158330261707306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4761 5.1343659870326519e-03</internalNodes>\n          <leafValues>\n            -1.3964179903268814e-02 1.0398290306329727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4762 -1.1144300224259496e-03</internalNodes>\n          <leafValues>\n            -8.1608608365058899e-02 6.4991973340511322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4763 -6.8641006946563721e-02</internalNodes>\n          <leafValues>\n            3.7113350629806519e-01 -1.7774619162082672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4764 8.8211498223245144e-04</internalNodes>\n          <leafValues>\n            -8.4080681204795837e-02 6.2524639070034027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4765 1.0471940040588379e-03</internalNodes>\n          <leafValues>\n            6.9488562643527985e-02 -8.3000160753726959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4766 1.6197249293327332e-02</internalNodes>\n          <leafValues>\n            1.6007730737328529e-02 -3.4216699004173279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4767 -2.2690620273351669e-02</internalNodes>\n          <leafValues>\n            1.3959160447120667e-01 -4.2305570095777512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4768 -4.1030000895261765e-02</internalNodes>\n          <leafValues>\n            -3.4669420123100281e-01 1.7233539372682571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4769 8.5194930434226990e-02</internalNodes>\n          <leafValues>\n            -8.8493460789322853e-03 6.0639351606369019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4770 3.9775099605321884e-02</internalNodes>\n          <leafValues>\n            6.5457229502499104e-03 -9.3794268369674683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4771 -1.8673250451683998e-02</internalNodes>\n          <leafValues>\n            8.4701649844646454e-02 -2.1742990240454674e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4772 -1.1632209643721581e-02</internalNodes>\n          <leafValues>\n            -1.6503639519214630e-01 3.2852791249752045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4773 -2.1068679634481668e-03</internalNodes>\n          <leafValues>\n            2.5774169713258743e-02 -1.0540559887886047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4774 -1.0474229929968715e-03</internalNodes>\n          <leafValues>\n            5.3470570594072342e-02 -1.0844449698925018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4775 6.6169992089271545e-02</internalNodes>\n          <leafValues>\n            2.6304489001631737e-03 -4.3908849358558655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4776 -1.2816500384360552e-03</internalNodes>\n          <leafValues>\n            -8.8744208216667175e-02 6.7286081612110138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4777 -1.2601809576153755e-02</internalNodes>\n          <leafValues>\n            2.3047180473804474e-01 -1.4204639941453934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4778 3.1882619950920343e-03</internalNodes>\n          <leafValues>\n            -6.0790609568357468e-02 9.3256607651710510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4779 -4.4821877963840961e-03</internalNodes>\n          <leafValues>\n            -7.4911139905452728e-02 3.5563640296459198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4780 1.3803370529785752e-03</internalNodes>\n          <leafValues>\n            -6.5355330705642700e-02 8.9660577476024628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4781 9.3855522572994232e-03</internalNodes>\n          <leafValues>\n            2.2601179778575897e-02 -1.6038919985294342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4782 -3.3057469408959150e-03</internalNodes>\n          <leafValues>\n            -9.3390651047229767e-02 5.6599788367748260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4783 -1.4823249541223049e-02</internalNodes>\n          <leafValues>\n            6.3946582376956940e-02 -3.7617258727550507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4784 -2.4304309859871864e-02</internalNodes>\n          <leafValues>\n            1.1825300008058548e-01 -5.3607080131769180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4785 -2.6398031041026115e-03</internalNodes>\n          <leafValues>\n            -7.8462429344654083e-02 4.7125939279794693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4786 -6.6844499669969082e-03</internalNodes>\n          <leafValues>\n            -1.4298090338706970e-01 5.4876580834388733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4787 -1.8713249592110515e-03</internalNodes>\n          <leafValues>\n            6.5964557230472565e-02 -5.9726029634475708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4788 -5.0526339560747147e-02</internalNodes>\n          <leafValues>\n            5.2933692932128906e-01 -1.0625099763274193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4789 -7.1036286652088165e-02</internalNodes>\n          <leafValues>\n            -3.3027708530426025e-01 5.6759058497846127e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4790 -5.4212540388107300e-02</internalNodes>\n          <leafValues>\n            3.7536340951919556e-01 -1.6479549929499626e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4791 1.4903850387781858e-04</internalNodes>\n          <leafValues>\n            -5.2896250039339066e-02 1.0646480321884155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4792 1.0254220105707645e-03</internalNodes>\n          <leafValues>\n            -5.1714900881052017e-02 1.0771189630031586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4793 7.6022921130061150e-03</internalNodes>\n          <leafValues>\n            2.4376839399337769e-02 -1.2493179738521576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4794 6.8572920281440020e-04</internalNodes>\n          <leafValues>\n            7.1341581642627716e-02 -7.6490812003612518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4795 -1.3697240501642227e-03</internalNodes>\n          <leafValues>\n            -1.5173940360546112e-01 3.9827719330787659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4796 -2.4336120113730431e-03</internalNodes>\n          <leafValues>\n            6.5315209329128265e-02 -7.9230897128582001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4797 -1.4390869997441769e-02</internalNodes>\n          <leafValues>\n            -2.3706260323524475e-01 1.6740530729293823e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4798 7.8907981514930725e-02</internalNodes>\n          <leafValues>\n            -4.2810469865798950e-02 1.4248989522457123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4799 1.0681129992008209e-01</internalNodes>\n          <leafValues>\n            3.4115819726139307e-03 -7.7656471729278564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4800 5.1377359777688980e-02</internalNodes>\n          <leafValues>\n            1.0703410021960735e-02 -5.3400570154190063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4801 -8.6883217096328735e-02</internalNodes>\n          <leafValues>\n            1. -3.0740019865334034e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4802 -2.4080339353531599e-03</internalNodes>\n          <leafValues>\n            -1.0685530304908752e-01 4.9721568822860718e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4803 -1.5590289607644081e-02</internalNodes>\n          <leafValues>\n            1.0636159777641296e-01 -2.4414319545030594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4804 2.3770150728523731e-03</internalNodes>\n          <leafValues>\n            3.9840381592512131e-02 -1.4689840376377106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4805 -9.0648621320724487e-02</internalNodes>\n          <leafValues>\n            1.8861660361289978e-01 -1.2951680459082127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4806 4.4955732300877571e-03</internalNodes>\n          <leafValues>\n            -2.6563400402665138e-02 2.3943750560283661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4807 -6.4725756645202637e-02</internalNodes>\n          <leafValues>\n            -5.4622077941894531e-01 9.2595359310507774e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4808 2.1703580394387245e-02</internalNodes>\n          <leafValues>\n            -8.8741881772875786e-03 6.4019817113876343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4809 6.1110239475965500e-02</internalNodes>\n          <leafValues>\n            9.5075201243162155e-03 -4.3702909350395203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4810 2.0086880773305893e-02</internalNodes>\n          <leafValues>\n            2.2985199466347694e-02 -2.2840890288352966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4811 4.1216641664505005e-02</internalNodes>\n          <leafValues>\n            -1.4420590363442898e-02 1.3452969491481781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4812 -2.3712279275059700e-02</internalNodes>\n          <leafValues>\n            -2.9533639550209045e-01 1.8435720354318619e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4813 -6.8324371241033077e-03</internalNodes>\n          <leafValues>\n            1.2094250321388245e-01 -4.3016240000724792e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4814 1.0880210250616074e-01</internalNodes>\n          <leafValues>\n            -1.0228149592876434e-02 5.2824842929840088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4815 9.8231732845306396e-03</internalNodes>\n          <leafValues>\n            4.1886411607265472e-02 -1.3665479421615601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4816 -1.5005770139396191e-02</internalNodes>\n          <leafValues>\n            1.8148930370807648e-01 -3.0691139400005341e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4817 -4.4110611081123352e-01</internalNodes>\n          <leafValues>\n            -1. 1.4937899541109800e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4818 -3.4122800827026367e-01</internalNodes>\n          <leafValues>\n            -4.9184858798980713e-01 1.0096929967403412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4819 9.3225948512554169e-03</internalNodes>\n          <leafValues>\n            -2.2894829511642456e-02 7.0796586573123932e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4820 7.3594371788203716e-03</internalNodes>\n          <leafValues>\n            1.3842869549989700e-02 -3.6142700910568237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4821 -8.4109082818031311e-02</internalNodes>\n          <leafValues>\n            -6.2284982204437256e-01 7.3129259981215000e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4822 1.0704870335757732e-02</internalNodes>\n          <leafValues>\n            -4.2617131024599075e-02 1.1360719799995422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4823 1.1478140018880367e-02</internalNodes>\n          <leafValues>\n            3.6586448550224304e-02 -9.6474952995777130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4824 1.6416399739682674e-03</internalNodes>\n          <leafValues>\n            -9.8777309060096741e-02 5.5158369243144989e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4825 -1.5731199528090656e-04</internalNodes>\n          <leafValues>\n            -6.1207920312881470e-02 5.6053601205348969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4826 4.1953278705477715e-03</internalNodes>\n          <leafValues>\n            5.0657391548156738e-02 -1.0238680243492126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4827 -1.6238249838352203e-02</internalNodes>\n          <leafValues>\n            1.1267519742250443e-01 -1.3786830008029938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4828 3.2428819686174393e-02</internalNodes>\n          <leafValues>\n            -2.5513019412755966e-02 2.3171940445899963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4829 -8.3901472389698029e-03</internalNodes>\n          <leafValues>\n            -6.2842369079589844e-02 2.3776959627866745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4830 4.9057020805776119e-03</internalNodes>\n          <leafValues>\n            5.7676758617162704e-02 -1.2715479731559753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4831 1.4458860270678997e-02</internalNodes>\n          <leafValues>\n            -5.0932768732309341e-02 6.2239319086074829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4832 1.2484519928693771e-01</internalNodes>\n          <leafValues>\n            -1.1612229980528355e-02 4.9361020326614380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4833 4.8587709665298462e-01</internalNodes>\n          <leafValues>\n            4.8130601644515991e-03 -5.5395811796188354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4834 1.6886210441589355e-01</internalNodes>\n          <leafValues>\n            7.8053288161754608e-03 -7.3394978046417236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4835 -2.1220340568106622e-04</internalNodes>\n          <leafValues>\n            3.1656648963689804e-02 -1.0314700007438660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4836 1.9249629694968462e-03</internalNodes>\n          <leafValues>\n            5.5135779082775116e-02 -1.0309369862079620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4837 -2.8178339824080467e-02</internalNodes>\n          <leafValues>\n            1.1637330055236816e-01 -3.4630060195922852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4838 -1.4069500379264355e-02</internalNodes>\n          <leafValues>\n            -1.4737719297409058e-01 4.4723790138959885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4839 -1.2483589816838503e-03</internalNodes>\n          <leafValues>\n            -1.1185120046138763e-01 6.8806178867816925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4840 5.3278112318366766e-04</internalNodes>\n          <leafValues>\n            -9.3908883631229401e-02 6.7072838544845581e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4841 1.1722769588232040e-02</internalNodes>\n          <leafValues>\n            -1.9012469798326492e-02 1.8834389746189117e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>249</maxWeakCount>\n      <stageThreshold>-1.4526200294494629e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 4842 5.8254651725292206e-02</internalNodes>\n          <leafValues>\n            -2.3232789337635040e-01 2.1454159915447235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4843 3.4433450549840927e-02</internalNodes>\n          <leafValues>\n            -2.6520681381225586e-01 1.3274359703063965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4844 1.4937009662389755e-02</internalNodes>\n          <leafValues>\n            -2.3927900195121765e-01 1.5786519646644592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4845 3.1153639778494835e-02</internalNodes>\n          <leafValues>\n            -1.5004000067710876e-01 1.6116039454936981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4846 2.6988480240106583e-03</internalNodes>\n          <leafValues>\n            -2.3409889638423920e-01 9.9983781576156616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4847 9.2046073405072093e-05</internalNodes>\n          <leafValues>\n            -2.9268169403076172e-01 4.7872740775346756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4848 5.0020251364912838e-05</internalNodes>\n          <leafValues>\n            -3.6815708875656128e-01 5.8189608156681061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4849 -1.4902159571647644e-02</internalNodes>\n          <leafValues>\n            -3.8818851113319397e-01 2.6158519089221954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4850 2.0448720082640648e-02</internalNodes>\n          <leafValues>\n            6.0846891254186630e-02 -3.0645281076431274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4851 6.2656581576447934e-05</internalNodes>\n          <leafValues>\n            -1.7161040008068085e-01 1.0800299793481827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4852 -7.0627559907734394e-03</internalNodes>\n          <leafValues>\n            -2.3428949713706970e-01 7.6327130198478699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4853 -2.9078179504722357e-03</internalNodes>\n          <leafValues>\n            -2.1010600030422211e-01 7.8605473041534424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4854 -3.6554310470819473e-02</internalNodes>\n          <leafValues>\n            1.7013889551162720e-01 -1.2837870419025421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4855 -1.3991629704833031e-02</internalNodes>\n          <leafValues>\n            -1.5198560059070587e-01 3.1168300658464432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4856 7.4681073427200317e-02</internalNodes>\n          <leafValues>\n            3.6079999059438705e-02 -4.6322378516197205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4857 -1.0407929867506027e-01</internalNodes>\n          <leafValues>\n            -3.1802299618721008e-01 2.0612560212612152e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4858 1.2444700114428997e-02</internalNodes>\n          <leafValues>\n            7.7818617224693298e-02 -1.6825589537620544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4859 3.4679330885410309e-02</internalNodes>\n          <leafValues>\n            3.2584380358457565e-02 -2.6884159445762634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4860 -2.9028469696640968e-02</internalNodes>\n          <leafValues>\n            -4.4522678852081299e-01 2.9661040753126144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4861 2.3345749650616199e-04</internalNodes>\n          <leafValues>\n            -1.3071049749851227e-01 6.1756659299135208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4862 3.6993178725242615e-01</internalNodes>\n          <leafValues>\n            1.7400909215211868e-02 -7.0418548583984375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4863 -2.1505730226635933e-02</internalNodes>\n          <leafValues>\n            -2.4095299839973450e-01 2.8891649097204208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4864 5.4181810468435287e-02</internalNodes>\n          <leafValues>\n            -8.4053620696067810e-02 1.3876989483833313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4865 -3.2677378505468369e-02</internalNodes>\n          <leafValues>\n            -2.9904881119728088e-01 2.8195250779390335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4866 1.1804300360381603e-02</internalNodes>\n          <leafValues>\n            4.9124121665954590e-02 -2.5538289546966553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4867 -9.5703108236193657e-03</internalNodes>\n          <leafValues>\n            1.1865220218896866e-01 -7.9305157065391541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4868 -8.5534068057313561e-04</internalNodes>\n          <leafValues>\n            -9.0315766632556915e-02 1.2984269857406616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4869 7.1445330977439880e-02</internalNodes>\n          <leafValues>\n            1.4396210201084614e-02 -5.3161299228668213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4870 6.1263251118361950e-03</internalNodes>\n          <leafValues>\n            -2.4559390544891357e-01 4.8353280872106552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4871 -4.8277149908244610e-03</internalNodes>\n          <leafValues>\n            -2.3828850686550140e-01 7.5664043426513672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4872 -2.6015359908342361e-03</internalNodes>\n          <leafValues>\n            4.5826680958271027e-02 -2.4928370118141174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4873 -4.7515620826743543e-04</internalNodes>\n          <leafValues>\n            3.8604840636253357e-02 -1.3118830323219299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4874 -5.4591469466686249e-02</internalNodes>\n          <leafValues>\n            5.5260437726974487e-01 -1.9622489809989929e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4875 5.3931411355733871e-02</internalNodes>\n          <leafValues>\n            -4.8285599797964096e-02 2.2110609710216522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4876 -9.1672148555517197e-03</internalNodes>\n          <leafValues>\n            -2.5744551420211792e-01 4.0833171457052231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4877 -2.9818129260092974e-03</internalNodes>\n          <leafValues>\n            -7.5891457498073578e-02 6.0899209231138229e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4878 7.4697382748126984e-02</internalNodes>\n          <leafValues>\n            3.6657888442277908e-02 -2.6946181058883667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4879 -2.7006270363926888e-02</internalNodes>\n          <leafValues>\n            1.8391659855842590e-01 -5.5832479149103165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4880 -6.0810879804193974e-03</internalNodes>\n          <leafValues>\n            -3.2777228951454163e-01 3.5269659012556076e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4881 3.8182068616151810e-02</internalNodes>\n          <leafValues>\n            -5.6075371801853180e-02 2.1839509904384613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4882 9.5723047852516174e-03</internalNodes>\n          <leafValues>\n            8.4293976426124573e-02 -1.1767770349979401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4883 7.8028216958045959e-02</internalNodes>\n          <leafValues>\n            5.6959469802677631e-03 -8.1442731618881226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4884 -3.2862029969692230e-02</internalNodes>\n          <leafValues>\n            -4.7212830185890198e-01 1.9418969750404358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4885 4.2359679937362671e-02</internalNodes>\n          <leafValues>\n            -1.7929280176758766e-02 3.1368249654769897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4886 -2.1030420437455177e-02</internalNodes>\n          <leafValues>\n            1.4199249446392059e-01 -6.7171506583690643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4887 -4.6487968415021896e-02</internalNodes>\n          <leafValues>\n            -3.0455109477043152e-01 3.1824499368667603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4888 -8.5280627012252808e-02</internalNodes>\n          <leafValues>\n            2.4725529551506042e-01 -4.0726520121097565e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4889 4.7598700039088726e-03</internalNodes>\n          <leafValues>\n            -6.4076490700244904e-02 1.0103560239076614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4890 6.0733199119567871e-02</internalNodes>\n          <leafValues>\n            -8.8772647082805634e-02 1.1654719710350037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4891 5.4770488291978836e-02</internalNodes>\n          <leafValues>\n            2.2390449419617653e-02 -4.9855118989944458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4892 -3.7478970625670627e-05</internalNodes>\n          <leafValues>\n            6.2433928251266479e-02 -1.6515359282493591e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4893 -2.3898750543594360e-02</internalNodes>\n          <leafValues>\n            -1.9021050631999969e-01 1.4979549683630466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4894 -1.8465859815478325e-02</internalNodes>\n          <leafValues>\n            2.3008669912815094e-01 -4.5363288372755051e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4895 -3.8619639817625284e-03</internalNodes>\n          <leafValues>\n            -1.1168369650840759e-01 7.9550966620445251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4896 6.0682989656925201e-02</internalNodes>\n          <leafValues>\n            2.5401040911674500e-02 -4.1787821054458618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4897 -6.1235381290316582e-03</internalNodes>\n          <leafValues>\n            -2.4201570451259613e-01 1.9984690472483635e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4898 -2.7558460831642151e-02</internalNodes>\n          <leafValues>\n            -4.5678210258483887e-01 2.0328069105744362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4899 2.4938629940152168e-02</internalNodes>\n          <leafValues>\n            -3.8399018347263336e-02 1.3205289840698242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4900 -4.7081429511308670e-02</internalNodes>\n          <leafValues>\n            3.1839731335639954e-01 -3.2127480953931808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4901 6.2321990728378296e-02</internalNodes>\n          <leafValues>\n            1.7846960574388504e-02 -5.0114768743515015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4902 -5.5789871839806437e-04</internalNodes>\n          <leafValues>\n            1.0673029720783234e-01 -9.0454310178756714e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4903 -2.0528730005025864e-02</internalNodes>\n          <leafValues>\n            2.2777000069618225e-01 -4.6683758497238159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4904 1.4043749542906880e-03</internalNodes>\n          <leafValues>\n            -2.0688509941101074e-01 6.7320853471755981e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4905 3.1474549323320389e-02</internalNodes>\n          <leafValues>\n            2.5873050093650818e-02 -3.1385809183120728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4906 -3.1364340335130692e-02</internalNodes>\n          <leafValues>\n            -3.5079669952392578e-01 2.4890480563044548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4907 -1.0076019912958145e-01</internalNodes>\n          <leafValues>\n            -2.2738389670848846e-01 1.0731879621744156e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4908 1.4409960247576237e-02</internalNodes>\n          <leafValues>\n            2.4001860618591309e-01 -3.8389049470424652e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4909 5.6410171091556549e-02</internalNodes>\n          <leafValues>\n            -4.0667269378900528e-02 1.9880810379981995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4910 -1.4310100115835667e-02</internalNodes>\n          <leafValues>\n            -2.2484239935874939e-01 5.1415968686342239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4911 3.8093481212854385e-02</internalNodes>\n          <leafValues>\n            1.0602000169456005e-02 -6.5031349658966064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4912 7.3483381420373917e-03</internalNodes>\n          <leafValues>\n            3.7624299526214600e-02 -2.3660179972648621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4913 1.5990389883518219e-01</internalNodes>\n          <leafValues>\n            -3.1958691775798798e-02 7.8257188200950623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4914 7.5298376381397247e-02</internalNodes>\n          <leafValues>\n            -2.2225739434361458e-02 4.7734829783439636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4915 1.0515630245208740e-02</internalNodes>\n          <leafValues>\n            2.4979539215564728e-02 -4.3517309427261353e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4916 1.1720249801874161e-01</internalNodes>\n          <leafValues>\n            -3.7235978990793228e-02 2.6529499888420105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4917 1.5799700122443028e-05</internalNodes>\n          <leafValues>\n            -1.0837449878454208e-01 7.2809703648090363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4918 1.2115119956433773e-02</internalNodes>\n          <leafValues>\n            6.5032199025154114e-02 -1.4378160238265991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4919 -1.7766270786523819e-02</internalNodes>\n          <leafValues>\n            1.0095430165529251e-01 -2.4499140679836273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4920 4.2227920144796371e-02</internalNodes>\n          <leafValues>\n            -3.6625079810619354e-02 2.8341490030288696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4921 2.4346679449081421e-02</internalNodes>\n          <leafValues>\n            2.4560010060667992e-02 -1.9787840545177460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4922 3.1748838722705841e-02</internalNodes>\n          <leafValues>\n            2.9603859409689903e-02 -3.0412709712982178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4923 -5.2616238594055176e-02</internalNodes>\n          <leafValues>\n            1.7751359939575195e-01 -3.1825721263885498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4924 -5.4358910769224167e-02</internalNodes>\n          <leafValues>\n            2.2886650264263153e-01 -4.0221411734819412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4925 1.1845750268548727e-03</internalNodes>\n          <leafValues>\n            6.1528120189905167e-02 -1.2204740196466446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4926 -3.6325298249721527e-02</internalNodes>\n          <leafValues>\n            -2.9528170824050903e-01 3.3452831208705902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4927 1.5100809931755066e-01</internalNodes>\n          <leafValues>\n            -2.5661900639533997e-02 3.8788089156150818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4928 2.8278939425945282e-02</internalNodes>\n          <leafValues>\n            -3.5951491445302963e-02 2.5251358747482300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4929 -8.3803251385688782e-02</internalNodes>\n          <leafValues>\n            -7.2599482536315918e-01 4.1993269696831703e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4930 -2.9865629039704800e-04</internalNodes>\n          <leafValues>\n            5.5302988737821579e-02 -1.6678869724273682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4931 -1.6872739419341087e-02</internalNodes>\n          <leafValues>\n            -1.9040539860725403e-01 5.2307758480310440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4932 -5.9451311826705933e-02</internalNodes>\n          <leafValues>\n            -4.7634351253509521e-01 2.0981209352612495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4933 -1.8378829583525658e-02</internalNodes>\n          <leafValues>\n            6.6858462989330292e-02 -6.0389090329408646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4934 4.8198848962783813e-02</internalNodes>\n          <leafValues>\n            4.2580351233482361e-02 -2.6010730862617493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4935 -4.3217130005359650e-02</internalNodes>\n          <leafValues>\n            -2.5067010521888733e-01 1.7225300893187523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4936 -6.3647949136793613e-03</internalNodes>\n          <leafValues>\n            -1.6788710653781891e-01 6.8857319653034210e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4937 2.4770569801330566e-01</internalNodes>\n          <leafValues>\n            -3.3154450356960297e-02 1.4794079959392548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4938 -1.1216869950294495e-01</internalNodes>\n          <leafValues>\n            5.1129728555679321e-01 -1.7360100522637367e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4939 3.6601010710000992e-02</internalNodes>\n          <leafValues>\n            -4.3869979679584503e-02 1.9755239784717560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4940 -7.2332553565502167e-02</internalNodes>\n          <leafValues>\n            -8.2932412624359131e-01 1.1810120195150375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4941 7.7837951481342316e-02</internalNodes>\n          <leafValues>\n            2.4520579725503922e-02 -2.7260521054267883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4942 7.2094596922397614e-02</internalNodes>\n          <leafValues>\n            3.7606250494718552e-02 -2.7291780710220337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4943 -8.7373353540897369e-02</internalNodes>\n          <leafValues>\n            -9.5344787836074829e-01 3.2734218984842300e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4944 -3.6240059882402420e-02</internalNodes>\n          <leafValues>\n            -3.2300001382827759e-01 2.6389310136437416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4945 -8.7862694635987282e-03</internalNodes>\n          <leafValues>\n            -1.4808210730552673e-01 4.6761561185121536e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4946 6.5432381816208363e-03</internalNodes>\n          <leafValues>\n            6.0071479529142380e-02 -1.5036399662494659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4947 2.7910009957849979e-03</internalNodes>\n          <leafValues>\n            -7.9585656523704529e-02 6.4064942300319672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4948 2.9471930116415024e-02</internalNodes>\n          <leafValues>\n            3.6904528737068176e-02 -2.7659609913825989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4949 -4.4924151152372360e-02</internalNodes>\n          <leafValues>\n            3.5313630104064941e-01 -2.7219140902161598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4950 7.8969523310661316e-02</internalNodes>\n          <leafValues>\n            1.0873800143599510e-02 -9.3217527866363525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4951 -3.1053030863404274e-02</internalNodes>\n          <leafValues>\n            2.4087889492511749e-01 -2.7155969291925430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4952 5.0429090857505798e-02</internalNodes>\n          <leafValues>\n            -5.4164800792932510e-02 2.0343920588493347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4953 -3.7637658417224884e-02</internalNodes>\n          <leafValues>\n            3.2998979091644287e-01 -3.4573089331388474e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4954 -1.7269999952986836e-03</internalNodes>\n          <leafValues>\n            -1.2339779734611511e-01 7.5958393514156342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4955 1.2604339979588985e-02</internalNodes>\n          <leafValues>\n            3.6150000989437103e-02 -2.1591770648956299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4956 1.1010640300810337e-02</internalNodes>\n          <leafValues>\n            -1.4330290257930756e-01 6.3043266534805298e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4957 1.3539699837565422e-02</internalNodes>\n          <leafValues>\n            -7.8418523073196411e-02 1.8389409780502319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4958 -3.8949768990278244e-02</internalNodes>\n          <leafValues>\n            3.4183630347251892e-01 -2.9505429789423943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4959 -4.9093078821897507e-02</internalNodes>\n          <leafValues>\n            -3.6278200149536133e-01 1.7093619331717491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4960 4.2306110262870789e-03</internalNodes>\n          <leafValues>\n            5.8190550655126572e-02 -1.8383790552616119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4961 8.9376904070377350e-03</internalNodes>\n          <leafValues>\n            -5.1576498895883560e-02 1.9376990199089050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4962 4.0846280753612518e-02</internalNodes>\n          <leafValues>\n            1.3241729699075222e-02 -7.0892220735549927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4963 -3.6945961415767670e-02</internalNodes>\n          <leafValues>\n            -3.4456318616867065e-01 7.1702878922224045e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4964 -1.2924180366098881e-02</internalNodes>\n          <leafValues>\n            -1.9354179501533508e-01 4.8157788813114166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4965 3.3079650253057480e-02</internalNodes>\n          <leafValues>\n            -5.1704820245504379e-02 1.3492329418659210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4966 2.2233519703149796e-02</internalNodes>\n          <leafValues>\n            5.2919991314411163e-02 -1.7628639936447144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4967 -1.4483500272035599e-02</internalNodes>\n          <leafValues>\n            1.5105240046977997e-01 -3.9817798882722855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4968 1.5934909880161285e-01</internalNodes>\n          <leafValues>\n            -3.3422928303480148e-02 2.8085818886756897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4969 1.2470430135726929e-01</internalNodes>\n          <leafValues>\n            1.1225829832255840e-02 -4.5520108938217163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4970 7.0243299007415771e-02</internalNodes>\n          <leafValues>\n            2.6213169097900391e-02 -3.4778589010238647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4971 6.1747688055038452e-01</internalNodes>\n          <leafValues>\n            9.0320473536849022e-03 -5.5216097831726074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4972 7.7007927000522614e-02</internalNodes>\n          <leafValues>\n            9.3850009143352509e-03 -6.9495117664337158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4973 4.2874120175838470e-02</internalNodes>\n          <leafValues>\n            -3.3166319131851196e-02 1.3550239801406860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4974 -2.4558259174227715e-02</internalNodes>\n          <leafValues>\n            3.8989260792732239e-01 -2.0506320521235466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4975 1.0723150335252285e-02</internalNodes>\n          <leafValues>\n            -5.1526758819818497e-02 8.9461207389831543e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4976 3.8331970572471619e-02</internalNodes>\n          <leafValues>\n            -3.9952859282493591e-02 1.8591549992561340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4977 1.2556019425392151e-01</internalNodes>\n          <leafValues>\n            5.1561538130044937e-03 -8.4782391786575317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4978 1.1590070277452469e-01</internalNodes>\n          <leafValues>\n            9.7828712314367294e-03 -7.6437431573867798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4979 -1.5016060322523117e-02</internalNodes>\n          <leafValues>\n            -1.8328569829463959e-01 3.2125338912010193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4980 -4.1521931998431683e-03</internalNodes>\n          <leafValues>\n            9.8160982131958008e-02 -8.2769006490707397e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4981 1.4998050173744559e-03</internalNodes>\n          <leafValues>\n            4.1228689253330231e-02 -8.4460526704788208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4982 3.8117531687021255e-02</internalNodes>\n          <leafValues>\n            1.9691960886120796e-02 -3.9931151270866394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4983 9.4391452148556709e-04</internalNodes>\n          <leafValues>\n            -1.9674700498580933e-01 5.6476209312677383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4984 2.4907960323616862e-04</internalNodes>\n          <leafValues>\n            9.2797473073005676e-02 -1.0708689689636230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4985 2.5447670370340347e-02</internalNodes>\n          <leafValues>\n            -2.5304390117526054e-02 1.0032439976930618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4986 -2.8884090483188629e-02</internalNodes>\n          <leafValues>\n            -1.7259830236434937e-01 4.9671061336994171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4987 1.2102840095758438e-01</internalNodes>\n          <leafValues>\n            -5.5194748565554619e-03 9.5438259840011597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4988 -7.9245921224355698e-03</internalNodes>\n          <leafValues>\n            6.4903482794761658e-02 -1.2671549618244171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4989 -6.5536066889762878e-02</internalNodes>\n          <leafValues>\n            -3.7892189621925354e-01 1.6463089734315872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4990 -1.6883460804820061e-02</internalNodes>\n          <leafValues>\n            5.8534818887710571e-01 -1.4671769924461842e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4991 6.7252418957650661e-03</internalNodes>\n          <leafValues>\n            2.7604229748249054e-02 -3.4817421436309814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4992 -6.3783898949623108e-02</internalNodes>\n          <leafValues>\n            -3.9567160606384277e-01 1.9867889583110809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4993 1.8600550293922424e-01</internalNodes>\n          <leafValues>\n            -4.5898579061031342e-02 7.3586076498031616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4994 4.9724031239748001e-02</internalNodes>\n          <leafValues>\n            -2.0517630502581596e-02 4.3107840418815613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4995 1.5011380426585674e-02</internalNodes>\n          <leafValues>\n            4.0192149579524994e-02 -1.0242489725351334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4996 -1.5085030347108841e-02</internalNodes>\n          <leafValues>\n            2.3888920247554779e-01 -3.5642918199300766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4997 -1.2931490316987038e-02</internalNodes>\n          <leafValues>\n            -3.6863088607788086e-01 1.7377890646457672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4998 -1.3186899945139885e-02</internalNodes>\n          <leafValues>\n            -4.3170270323753357e-01 1.7947910353541374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4999 -6.6814959049224854e-02</internalNodes>\n          <leafValues>\n            4.1336119174957275e-01 -2.0904310047626495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5000 4.4064331799745560e-02</internalNodes>\n          <leafValues>\n            -3.8615190982818604e-01 2.1414510905742645e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5001 4.1341730952262878e-01</internalNodes>\n          <leafValues>\n            1.0130990296602249e-02 -4.7053098678588867e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5002 2.4443659931421280e-02</internalNodes>\n          <leafValues>\n            9.3184120953083038e-02 -8.6774162948131561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5003 1.5779680013656616e-01</internalNodes>\n          <leafValues>\n            4.8137311823666096e-03 -5.8746212720870972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5004 -2.0141510292887688e-02</internalNodes>\n          <leafValues>\n            2.2643919289112091e-01 -4.6824630349874496e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5005 3.8796770386397839e-03</internalNodes>\n          <leafValues>\n            -7.7155217528343201e-02 3.6106169223785400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5006 1.5064960345625877e-02</internalNodes>\n          <leafValues>\n            -5.6656859815120697e-02 1.4758649468421936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5007 1.2925310060381889e-02</internalNodes>\n          <leafValues>\n            3.5308018326759338e-02 -1.1645320057868958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5008 -1.4788310043513775e-02</internalNodes>\n          <leafValues>\n            -1.1459939926862717e-01 7.5000070035457611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5009 -2.0497168879956007e-03</internalNodes>\n          <leafValues>\n            4.2067401111125946e-02 -7.0409573614597321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5010 8.9428946375846863e-03</internalNodes>\n          <leafValues>\n            5.3989838808774948e-02 -1.5380840003490448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5011 1.0064999759197235e-01</internalNodes>\n          <leafValues>\n            -2.9709249734878540e-02 3.1293758749961853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5012 -4.6580079942941666e-02</internalNodes>\n          <leafValues>\n            -7.2227877378463745e-01 1.3004340231418610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5013 -3.8618590682744980e-02</internalNodes>\n          <leafValues>\n            3.3867758512496948e-01 -2.1726610139012337e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5014 8.5657741874456406e-03</internalNodes>\n          <leafValues>\n            7.0621289312839508e-02 -1.3055880367755890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5015 -1.0986299812793732e-01</internalNodes>\n          <leafValues>\n            3.7974509596824646e-01 -5.1755867898464203e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5016 3.0184251070022583e-01</internalNodes>\n          <leafValues>\n            -2.4274839088320732e-02 3.6632651090621948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5017 -5.3246088325977325e-02</internalNodes>\n          <leafValues>\n            -5.5290502309799194e-01 6.2071220017969608e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5018 3.6629870533943176e-02</internalNodes>\n          <leafValues>\n            2.3161249235272408e-02 -3.5514861345291138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5019 6.9993197917938232e-02</internalNodes>\n          <leafValues>\n            8.9623704552650452e-03 -8.2245421409606934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5020 -8.7623577564954758e-03</internalNodes>\n          <leafValues>\n            -2.8028720617294312e-01 2.6217460632324219e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5021 1.5275989659130573e-02</internalNodes>\n          <leafValues>\n            -5.0123069435358047e-02 1.5774080157279968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5022 1.8836189806461334e-01</internalNodes>\n          <leafValues>\n            1.1483459733426571e-02 -7.4004447460174561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5023 -1.4518629759550095e-02</internalNodes>\n          <leafValues>\n            8.2921922206878662e-02 -5.2536141127347946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5024 1.9221989437937737e-02</internalNodes>\n          <leafValues>\n            4.0790341794490814e-02 -2.0889760553836823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5025 -3.1274989247322083e-02</internalNodes>\n          <leafValues>\n            8.0864340066909790e-01 -1.0754980146884918e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5026 -4.9813431687653065e-03</internalNodes>\n          <leafValues>\n            -1.9617860019207001e-01 4.1330069303512573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5027 3.7296909838914871e-02</internalNodes>\n          <leafValues>\n            3.0313879251480103e-02 -2.7336311340332031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5028 -1.9014550372958183e-02</internalNodes>\n          <leafValues>\n            1.3439440727233887e-01 -6.0782499611377716e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5029 -7.9229613766074181e-03</internalNodes>\n          <leafValues>\n            -7.9689770936965942e-02 4.0497440844774246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5030 9.6371799707412720e-02</internalNodes>\n          <leafValues>\n            -2.5576870888471603e-02 3.2440510392189026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5031 -1.7210310325026512e-02</internalNodes>\n          <leafValues>\n            2.9772299528121948e-01 -3.0994139611721039e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5032 1.0736179538071156e-02</internalNodes>\n          <leafValues>\n            -7.0299342274665833e-02 1.2448900192975998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5033 -4.0398869663476944e-02</internalNodes>\n          <leafValues>\n            -6.4470887184143066e-01 6.9025149568915367e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5034 -3.1870428472757339e-02</internalNodes>\n          <leafValues>\n            -5.3339338302612305e-01 1.5221790410578251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5035 3.6518078297376633e-02</internalNodes>\n          <leafValues>\n            -7.7875651419162750e-02 1.4458900690078735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5036 1.2330260127782822e-01</internalNodes>\n          <leafValues>\n            1.7689300701022148e-02 -5.1895797252655029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5037 1.0086199641227722e-01</internalNodes>\n          <leafValues>\n            6.6002830862998962e-03 -5.5289500951766968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5038 1.0026770085096359e-01</internalNodes>\n          <leafValues>\n            1.0175090283155441e-02 -7.1554392576217651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5039 3.6956761032342911e-02</internalNodes>\n          <leafValues>\n            2.2131860256195068e-02 -3.1452280282974243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5040 8.5017476230859756e-03</internalNodes>\n          <leafValues>\n            4.9146678298711777e-02 -1.5193499624729156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5041 5.3833048790693283e-02</internalNodes>\n          <leafValues>\n            2.5698679964989424e-03 -5.0750207901000977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5042 4.8958938568830490e-02</internalNodes>\n          <leafValues>\n            9.2353876680135727e-03 -7.9371142387390137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5043 4.0810879319906235e-02</internalNodes>\n          <leafValues>\n            -4.6270430088043213e-02 1.9726410508155823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5044 -3.3165120985358953e-03</internalNodes>\n          <leafValues>\n            -2.1495009958744049e-01 3.8868401199579239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5045 4.8434760537929833e-04</internalNodes>\n          <leafValues>\n            -1.7870649695396423e-01 5.7129681110382080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5046 7.9494096338748932e-02</internalNodes>\n          <leafValues>\n            -2.2463550791144371e-02 3.6770978569984436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5047 -8.8844364508986473e-03</internalNodes>\n          <leafValues>\n            -3.3796560764312744e-01 2.5869650766253471e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5048 -1.0575620457530022e-02</internalNodes>\n          <leafValues>\n            1.2438619881868362e-01 -6.8147383630275726e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5049 7.3358109220862389e-03</internalNodes>\n          <leafValues>\n            -4.3375171720981598e-02 1.5483480691909790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5050 4.2306821793317795e-02</internalNodes>\n          <leafValues>\n            1.0016439855098724e-01 -8.8011689484119415e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5051 7.1759216487407684e-02</internalNodes>\n          <leafValues>\n            -8.9269876480102539e-03 2.3254199326038361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5052 -2.2478280588984489e-02</internalNodes>\n          <leafValues>\n            -5.4057407379150391e-01 1.4396119862794876e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5053 -2.5606580078601837e-02</internalNodes>\n          <leafValues>\n            -4.3508179485797882e-02 6.4285047352313995e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5054 2.5733409449458122e-02</internalNodes>\n          <leafValues>\n            2.3084849119186401e-02 -3.4278741478919983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5055 -7.0163339376449585e-02</internalNodes>\n          <leafValues>\n            4.0744331479072571e-01 -1.1836090125143528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5056 -1.2527329847216606e-02</internalNodes>\n          <leafValues>\n            9.1184526681900024e-02 -8.7035633623600006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5057 5.9983458369970322e-02</internalNodes>\n          <leafValues>\n            3.6528799682855606e-03 -8.0261522531509399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5058 -5.2271911408752203e-04</internalNodes>\n          <leafValues>\n            6.9573827087879181e-02 -1.2091639637947083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5059 -2.0996539294719696e-01</internalNodes>\n          <leafValues>\n            -4.6747279167175293e-01 9.4682360067963600e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5060 -1.8358640372753143e-02</internalNodes>\n          <leafValues>\n            1.4919880032539368e-01 -5.7198900729417801e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5061 -1.3342049904167652e-02</internalNodes>\n          <leafValues>\n            1.4447879791259766e-01 -2.2494640201330185e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5062 -3.0613059177994728e-02</internalNodes>\n          <leafValues>\n            -3.3590090274810791e-01 2.4433709681034088e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5063 -1.9018750637769699e-02</internalNodes>\n          <leafValues>\n            1.5518119931221008e-01 -2.5613630190491676e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5064 -4.5201808214187622e-02</internalNodes>\n          <leafValues>\n            4.8730811476707458e-01 -1.7641659826040268e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5065 6.3432596623897552e-02</internalNodes>\n          <leafValues>\n            -5.1946818828582764e-02 1.2361440062522888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5066 3.4017860889434814e-03</internalNodes>\n          <leafValues>\n            -1.7030030488967896e-01 5.4143410176038742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5067 -8.5307076573371887e-02</internalNodes>\n          <leafValues>\n            -7.1878427267074585e-01 1.0392259806394577e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5068 -5.3066499531269073e-02</internalNodes>\n          <leafValues>\n            5.2359157800674438e-01 -1.8369760364294052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5069 -2.8319370001554489e-02</internalNodes>\n          <leafValues>\n            -1.1979889869689941e-01 5.8951549232006073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5070 -8.7353803217411041e-02</internalNodes>\n          <leafValues>\n            2.7089080214500427e-01 -2.9345329850912094e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5071 2.7152231335639954e-01</internalNodes>\n          <leafValues>\n            -1.1648589745163918e-02 5.5842977762222290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5072 1.9388480111956596e-02</internalNodes>\n          <leafValues>\n            5.0895590335130692e-02 -1.7962279915809631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5073 2.1159179508686066e-02</internalNodes>\n          <leafValues>\n            -4.8424899578094482e-02 9.5020256936550140e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5074 1.2039250135421753e-01</internalNodes>\n          <leafValues>\n            9.2587787657976151e-03 -8.7804621458053589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5075 5.0090719014406204e-02</internalNodes>\n          <leafValues>\n            -2.1926950663328171e-02 2.0202030241489410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5076 -5.5227670818567276e-03</internalNodes>\n          <leafValues>\n            2.1560280025005341e-01 -3.6554779857397079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5077 2.7551440522074699e-02</internalNodes>\n          <leafValues>\n            -3.2782018184661865e-02 1.6503919661045074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5078 -2.5543190538883209e-02</internalNodes>\n          <leafValues>\n            -3.6424461007118225e-01 2.1275209262967110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5079 -2.6791828870773315e-01</internalNodes>\n          <leafValues>\n            4.8525270819664001e-01 -4.7535290941596031e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5080 -1.6798110306262970e-01</internalNodes>\n          <leafValues>\n            3.9280641078948975e-01 -1.9414989277720451e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5081 4.5900348573923111e-02</internalNodes>\n          <leafValues>\n            -3.6706160753965378e-02 2.0677609741687775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5082 3.6797890788875520e-04</internalNodes>\n          <leafValues>\n            -8.7039902806282043e-02 9.2830970883369446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5083 -9.9194556474685669e-02</internalNodes>\n          <leafValues>\n            -3.6096671223640442e-01 2.1962769329547882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5084 8.0924080975819379e-05</internalNodes>\n          <leafValues>\n            -7.9007692635059357e-02 9.5904067158699036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5085 7.0894961245357990e-03</internalNodes>\n          <leafValues>\n            3.7076078355312347e-02 -5.0917111337184906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5086 -1.2181960046291351e-03</internalNodes>\n          <leafValues>\n            4.9094028770923615e-02 -1.5975970029830933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5087 -9.2138662934303284e-02</internalNodes>\n          <leafValues>\n            5.5284732580184937e-01 -1.3595860451459885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5088 6.2209279276430607e-03</internalNodes>\n          <leafValues>\n            4.6889189630746841e-02 -1.8105800449848175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5089 6.5014839172363281e-02</internalNodes>\n          <leafValues>\n            9.4407051801681519e-03 -5.1224017143249512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5090 5.4055921733379364e-02</internalNodes>\n          <leafValues>\n            1.6289059072732925e-02 -4.2684501409530640e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>368</maxWeakCount>\n      <stageThreshold>-1.3073990345001221e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 5091 3.7594079971313477e-02</internalNodes>\n          <leafValues>\n            -1.5953080356121063e-01 2.4245350062847137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5092 4.0349629707634449e-03</internalNodes>\n          <leafValues>\n            -2.5617128610610962e-01 8.0420561134815216e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5093 2.1681638900190592e-03</internalNodes>\n          <leafValues>\n            -2.8089070320129395e-01 7.0903629064559937e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5094 -7.4014628808072302e-06</internalNodes>\n          <leafValues>\n            4.9326181411743164e-02 -1.9688490033149719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5095 -2.2384349722415209e-03</internalNodes>\n          <leafValues>\n            6.8618856370449066e-02 -2.1775339543819427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5096 2.9939650557935238e-03</internalNodes>\n          <leafValues>\n            -2.4257700145244598e-01 2.9716130346059799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5097 4.5135850086808205e-03</internalNodes>\n          <leafValues>\n            8.9443869888782501e-02 -1.9461549818515778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5098 3.8457550108432770e-03</internalNodes>\n          <leafValues>\n            5.0935801118612289e-02 -2.7721929550170898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5099 4.0572669240646064e-04</internalNodes>\n          <leafValues>\n            -8.5517741739749908e-02 1.6446280479431152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5100 -7.0624578256683890e-06</internalNodes>\n          <leafValues>\n            7.8454487025737762e-02 -1.2395980209112167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5101 -2.8428720543161035e-04</internalNodes>\n          <leafValues>\n            1.0774250328540802e-01 -1.2222009897232056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5102 7.3404680006206036e-03</internalNodes>\n          <leafValues>\n            4.7837160527706146e-02 -2.4441170692443848e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5103 3.6235509905964136e-03</internalNodes>\n          <leafValues>\n            -3.1533789634704590e-01 3.5066880285739899e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5104 -1.5671759610995650e-03</internalNodes>\n          <leafValues>\n            -1.7147080600261688e-01 6.5121836960315704e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5105 4.2834067717194557e-03</internalNodes>\n          <leafValues>\n            -1.3190010190010071e-01 9.2709146440029144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5106 -8.9772082865238190e-03</internalNodes>\n          <leafValues>\n            1.2469480186700821e-01 -2.8118500486016273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5107 5.5919871665537357e-03</internalNodes>\n          <leafValues>\n            4.8671621829271317e-02 -2.2460219264030457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5108 1.1782390065491199e-02</internalNodes>\n          <leafValues>\n            3.1041109934449196e-02 -2.9882109165191650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5109 -5.5568912066519260e-03</internalNodes>\n          <leafValues>\n            1.3689100742340088e-01 -7.7152192592620850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5110 1.7162049189209938e-02</internalNodes>\n          <leafValues>\n            -4.0298670530319214e-02 1.1232800036668777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5111 3.5631000064313412e-03</internalNodes>\n          <leafValues>\n            5.6056100875139236e-02 -1.9608840346336365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5112 2.2586699575185776e-02</internalNodes>\n          <leafValues>\n            1.1250300332903862e-02 -5.0490778684616089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5113 2.6307879015803337e-03</internalNodes>\n          <leafValues>\n            4.1528269648551941e-02 -2.2185860574245453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5114 -1.0008380049839616e-03</internalNodes>\n          <leafValues>\n            5.9657059609889984e-02 -1.5395790338516235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5115 -7.1316999383270741e-03</internalNodes>\n          <leafValues>\n            1.0590689629316330e-01 -8.9700952172279358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5116 -6.1685360968112946e-02</internalNodes>\n          <leafValues>\n            1.2677849829196930e-01 -2.2709969431161880e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5117 1.3120709918439388e-02</internalNodes>\n          <leafValues>\n            -6.3731230795383453e-02 1.5842080116271973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5118 3.2676599919795990e-02</internalNodes>\n          <leafValues>\n            2.5724250823259354e-02 -3.3406201004981995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5119 1.8886770308017731e-01</internalNodes>\n          <leafValues>\n            -1.7100410535931587e-02 5.3700131177902222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5120 -1.6522880468983203e-04</internalNodes>\n          <leafValues>\n            5.4908581078052521e-02 -1.1608000099658966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5121 -1.4789770357310772e-03</internalNodes>\n          <leafValues>\n            7.7602192759513855e-02 -1.0971190035343170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5122 -1.2441210448741913e-02</internalNodes>\n          <leafValues>\n            -1.4090730249881744e-01 6.8732522428035736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5123 1.9457910209894180e-02</internalNodes>\n          <leafValues>\n            -3.7276178598403931e-02 2.6319879293441772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5124 -2.9123809654265642e-03</internalNodes>\n          <leafValues>\n            -1.8960340321063995e-01 2.9360920190811157e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5125 -2.3870699107646942e-02</internalNodes>\n          <leafValues>\n            2.5528749823570251e-01 -3.1279411166906357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5126 -2.6912079192698002e-03</internalNodes>\n          <leafValues>\n            -1.4431649446487427e-01 4.8498779535293579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5127 -1.7636029515415430e-03</internalNodes>\n          <leafValues>\n            -1.3328640162944794e-01 5.4250828921794891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5128 -1.8844179809093475e-02</internalNodes>\n          <leafValues>\n            1.1653099954128265e-01 -3.8028150796890259e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5129 3.8752850145101547e-02</internalNodes>\n          <leafValues>\n            -3.6811299622058868e-02 2.1002089977264404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5130 9.4316434115171432e-03</internalNodes>\n          <leafValues>\n            5.7964589446783066e-02 -1.8342800438404083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5131 -1.1705379933118820e-02</internalNodes>\n          <leafValues>\n            1.7905050516128540e-01 -4.9799650907516479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5132 -4.4072889722883701e-03</internalNodes>\n          <leafValues>\n            -1.9810500741004944e-01 4.4608719646930695e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5133 -4.7192219644784927e-03</internalNodes>\n          <leafValues>\n            -1.8307499587535858e-01 4.2252171784639359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5134 -4.5182029716670513e-03</internalNodes>\n          <leafValues>\n            9.5572151243686676e-02 -6.0799460858106613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5135 -5.4851798340678215e-03</internalNodes>\n          <leafValues>\n            -1.7556129395961761e-01 4.0092539042234421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5136 -9.9079031497240067e-04</internalNodes>\n          <leafValues>\n            -1.3978339731693268e-01 4.8252910375595093e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5137 -5.0425329245626926e-03</internalNodes>\n          <leafValues>\n            -8.8625833392143250e-02 7.9794026911258698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5138 -6.3926707953214645e-03</internalNodes>\n          <leafValues>\n            3.5854909569025040e-02 -8.5030712187290192e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5139 -1.1408809572458267e-02</internalNodes>\n          <leafValues>\n            7.7756106853485107e-02 -1.0200379788875580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5140 5.9286449104547501e-02</internalNodes>\n          <leafValues>\n            6.4652841538190842e-03 -4.9082350730895996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5141 -5.7389298453927040e-03</internalNodes>\n          <leafValues>\n            -1.6221189498901367e-01 5.9541791677474976e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5142 4.4626160524785519e-03</internalNodes>\n          <leafValues>\n            -2.4659389629960060e-02 2.8509560227394104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5143 -7.4683688580989838e-04</internalNodes>\n          <leafValues>\n            5.5159430950880051e-02 -1.4510269463062286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5144 7.5665451586246490e-03</internalNodes>\n          <leafValues>\n            -3.0510440468788147e-02 9.2685796320438385e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5145 8.1203378736972809e-02</internalNodes>\n          <leafValues>\n            8.3315223455429077e-03 -8.8626891374588013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5146 2.5454829446971416e-03</internalNodes>\n          <leafValues>\n            -5.4131258279085159e-02 1.6551689803600311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5147 5.6319180876016617e-02</internalNodes>\n          <leafValues>\n            1.5744749456644058e-02 -4.6605950593948364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5148 -2.7670960873365402e-02</internalNodes>\n          <leafValues>\n            2.7910009026527405e-01 -2.1267570555210114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5149 5.7495549321174622e-02</internalNodes>\n          <leafValues>\n            1.3765430077910423e-02 -5.6881892681121826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5150 1.1847530258819461e-03</internalNodes>\n          <leafValues>\n            6.3452966511249542e-02 -1.6044929623603821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5151 4.2551690712571144e-03</internalNodes>\n          <leafValues>\n            6.3017703592777252e-02 -1.3584609329700470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5152 -2.1190859377384186e-02</internalNodes>\n          <leafValues>\n            1.9623500108718872e-01 -2.8249129652976990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5153 8.3922911435365677e-03</internalNodes>\n          <leafValues>\n            -6.2064249068498611e-02 1.1225070059299469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5154 -3.5534579306840897e-02</internalNodes>\n          <leafValues>\n            1.8565779924392700e-01 -2.1027710288763046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5155 -9.2783384025096893e-03</internalNodes>\n          <leafValues>\n            -1.6255140304565430e-01 5.3493771702051163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5156 -7.4480189941823483e-03</internalNodes>\n          <leafValues>\n            5.6045979261398315e-02 -2.7357129380106926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5157 3.4573610872030258e-02</internalNodes>\n          <leafValues>\n            2.7872329577803612e-02 -2.5443691015243530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5158 1.0644230060279369e-02</internalNodes>\n          <leafValues>\n            -2.5041149929165840e-02 1.2895500659942627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5159 -6.9164121523499489e-03</internalNodes>\n          <leafValues>\n            5.5145461112260818e-02 -1.4286629855632782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5160 4.0446728467941284e-02</internalNodes>\n          <leafValues>\n            4.3409019708633423e-03 -3.0095139145851135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5161 -2.1182280033826828e-02</internalNodes>\n          <leafValues>\n            2.3987750709056854e-01 -3.0267970636487007e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5162 -1.8278649076819420e-02</internalNodes>\n          <leafValues>\n            -2.8024369478225708e-01 2.0352259278297424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5163 -6.0500060208141804e-03</internalNodes>\n          <leafValues>\n            -1.5138089656829834e-01 4.5843418687582016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5164 -7.4632540345191956e-03</internalNodes>\n          <leafValues>\n            7.3087826371192932e-02 -3.9645120501518250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5165 -3.1640689820051193e-02</internalNodes>\n          <leafValues>\n            3.8544759154319763e-01 -1.8987689167261124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5166 -4.9488719552755356e-02</internalNodes>\n          <leafValues>\n            -3.7455439567565918e-01 4.6011591330170631e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5167 -2.4384791031479836e-03</internalNodes>\n          <leafValues>\n            -1.0864440351724625e-01 7.0171296596527100e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5168 7.4253929778933525e-03</internalNodes>\n          <leafValues>\n            -4.4223289936780930e-02 7.5678370893001556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5169 -5.3592741489410400e-02</internalNodes>\n          <leafValues>\n            1.9981780648231506e-01 -3.8047380745410919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5170 -2.1555580198764801e-02</internalNodes>\n          <leafValues>\n            -5.2737689018249512e-01 7.7934260480105877e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5171 4.1731819510459900e-03</internalNodes>\n          <leafValues>\n            3.8742069154977798e-02 -1.6946560144424438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5172 4.1882280260324478e-02</internalNodes>\n          <leafValues>\n            -1.1853899806737900e-02 2.9235321283340454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5173 -2.2035069763660431e-02</internalNodes>\n          <leafValues>\n            -1.3629269599914551e-01 4.7323219478130341e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5174 1.6916249878704548e-03</internalNodes>\n          <leafValues>\n            -4.9461908638477325e-02 7.4048481881618500e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5175 -1.9994638860225677e-03</internalNodes>\n          <leafValues>\n            9.3016393482685089e-02 -7.5230561196804047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5176 -8.7527623400092125e-03</internalNodes>\n          <leafValues>\n            8.4076300263404846e-02 -3.7777189165353775e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5177 2.8121439740061760e-02</internalNodes>\n          <leafValues>\n            3.8471631705760956e-02 -1.9039680063724518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5178 2.4713769555091858e-02</internalNodes>\n          <leafValues>\n            -1.1225669644773006e-02 1.3408440351486206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5179 2.1718820556998253e-02</internalNodes>\n          <leafValues>\n            -1.7361419275403023e-02 3.4876769781112671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5180 -4.3202299624681473e-02</internalNodes>\n          <leafValues>\n            -5.1877439022064209e-01 1.2914709746837616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5181 -1.6658119857311249e-03</internalNodes>\n          <leafValues>\n            -3.0727219581604004e-01 1.9104089587926865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5182 -3.2269109040498734e-02</internalNodes>\n          <leafValues>\n            3.1825730204582214e-01 -6.1126789078116417e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5183 -9.6689872443675995e-03</internalNodes>\n          <leafValues>\n            3.3182978630065918e-01 -1.8409479409456253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5184 1.7683519981801510e-03</internalNodes>\n          <leafValues>\n            3.1587228178977966e-02 -1.1481689661741257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5185 3.4618038684129715e-02</internalNodes>\n          <leafValues>\n            -1.8013959750533104e-02 3.4668689966201782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5186 -9.3643896281719208e-02</internalNodes>\n          <leafValues>\n            -5.1143682003021240e-01 1.4282460324466228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5187 4.3095857836306095e-03</internalNodes>\n          <leafValues>\n            2.4471389129757881e-02 -2.3517690598964691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5188 6.6311933100223541e-02</internalNodes>\n          <leafValues>\n            -1.5711139887571335e-02 2.4676759541034698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5189 -9.2896772548556328e-03</internalNodes>\n          <leafValues>\n            -1.3924039900302887e-01 4.8822149634361267e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5190 -3.3214599825441837e-03</internalNodes>\n          <leafValues>\n            1.3379609584808350e-01 -3.6818679422140121e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5191 4.0180981159210205e-02</internalNodes>\n          <leafValues>\n            -1.2793520465493202e-02 5.2580958604812622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5192 8.7590962648391724e-02</internalNodes>\n          <leafValues>\n            1.2522599659860134e-02 -5.5810731649398804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5193 3.5475298762321472e-02</internalNodes>\n          <leafValues>\n            2.3128280416131020e-02 -2.7402919530868530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5194 5.2033789455890656e-02</internalNodes>\n          <leafValues>\n            -6.1640930362045765e-03 1.9052730500698090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5195 -1.3046549260616302e-01</internalNodes>\n          <leafValues>\n            2.5712540745735168e-01 -2.3529190570116043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5196 2.8882310725748539e-03</internalNodes>\n          <leafValues>\n            -6.0755409300327301e-02 6.0243420302867889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5197 1.5083160251379013e-02</internalNodes>\n          <leafValues>\n            2.1192179992794991e-02 -2.8479540348052979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5198 8.0875161802396178e-04</internalNodes>\n          <leafValues>\n            -8.5497900843620300e-02 5.4305519908666611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5199 1.4947880059480667e-02</internalNodes>\n          <leafValues>\n            -5.7983450591564178e-02 1.0115720331668854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5200 -4.5683588832616806e-02</internalNodes>\n          <leafValues>\n            -3.9345711469650269e-01 1.7556620761752129e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5201 -9.4226107466965914e-04</internalNodes>\n          <leafValues>\n            1.3064099848270416e-01 -5.1675319671630859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5202 -2.8342329896986485e-03</internalNodes>\n          <leafValues>\n            1.5992760658264160e-01 -3.4787811338901520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5203 -1.8812920898199081e-02</internalNodes>\n          <leafValues>\n            -2.9807311296463013e-01 2.2536030039191246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5204 1.9601570442318916e-02</internalNodes>\n          <leafValues>\n            1.3461099937558174e-02 -1.6885930299758911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5205 -6.4929589629173279e-02</internalNodes>\n          <leafValues>\n            -7.1198761463165283e-01 8.5184276103973389e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5206 -1.4283999800682068e-02</internalNodes>\n          <leafValues>\n            -7.8602321445941925e-02 4.2226359248161316e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5207 2.5105919688940048e-02</internalNodes>\n          <leafValues>\n            -2.9744949191808701e-02 2.2586929798126221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5208 3.8459669798612595e-02</internalNodes>\n          <leafValues>\n            1.7592959105968475e-02 -3.4457311034202576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5209 2.9701360035687685e-03</internalNodes>\n          <leafValues>\n            -5.2914209663867950e-02 1.1567460000514984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5210 -3.5584170836955309e-03</internalNodes>\n          <leafValues>\n            1.2957760691642761e-01 -6.1714299023151398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5211 5.5475500412285328e-03</internalNodes>\n          <leafValues>\n            4.9168299883604050e-02 -1.2925429642200470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5212 7.1379862725734711e-02</internalNodes>\n          <leafValues>\n            -1.1528199538588524e-02 3.2423359155654907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5213 -1.1731989681720734e-01</internalNodes>\n          <leafValues>\n            -9.0184438228607178e-01 6.3025541603565216e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5214 2.2931929677724838e-02</internalNodes>\n          <leafValues>\n            -1.1425419710576534e-02 4.1168990731239319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5215 3.6658400204032660e-03</internalNodes>\n          <leafValues>\n            2.8030570596456528e-02 -2.0567989349365234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5216 -7.0796072483062744e-02</internalNodes>\n          <leafValues>\n            -2.1817129850387573e-01 1.2820649892091751e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5217 6.7239440977573395e-03</internalNodes>\n          <leafValues>\n            -4.2305160313844681e-02 1.4150319993495941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5218 -2.0242671016603708e-03</internalNodes>\n          <leafValues>\n            9.1976962983608246e-02 -4.6815071254968643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5219 2.3123170249164104e-03</internalNodes>\n          <leafValues>\n            -7.1074202656745911e-02 9.8617300391197205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5220 2.7525359764695168e-03</internalNodes>\n          <leafValues>\n            -5.0785668194293976e-02 7.5282126665115356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5221 -3.4460208844393492e-03</internalNodes>\n          <leafValues>\n            9.6368476748466492e-02 -7.8051783144474030e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5222 -1.1416469700634480e-02</internalNodes>\n          <leafValues>\n            -1.1313349753618240e-01 7.5080856680870056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5223 3.0283999876701273e-05</internalNodes>\n          <leafValues>\n            -1.3886189460754395e-01 4.3761149048805237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5224 -1.4150349888950586e-03</internalNodes>\n          <leafValues>\n            3.7164621055126190e-02 -1.1095599830150604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5225 -1.9245060393586755e-03</internalNodes>\n          <leafValues>\n            7.0604592561721802e-02 -9.4269059598445892e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5226 3.0031649395823479e-02</internalNodes>\n          <leafValues>\n            -5.1407739520072937e-02 1.6337560117244720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5227 -2.5132829323410988e-03</internalNodes>\n          <leafValues>\n            -1.4933520555496216e-01 5.1749840378761292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5228 1.9437290029600263e-04</internalNodes>\n          <leafValues>\n            -4.8553969711065292e-02 1.0562740266323090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5229 2.9679399449378252e-03</internalNodes>\n          <leafValues>\n            3.6664169281721115e-02 -1.5650020539760590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5230 3.2629880588501692e-03</internalNodes>\n          <leafValues>\n            4.2934000492095947e-02 -1.4514559507369995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5231 2.9959511011838913e-03</internalNodes>\n          <leafValues>\n            -6.3821822404861450e-02 9.3514777719974518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5232 -1.5483190305531025e-02</internalNodes>\n          <leafValues>\n            -2.0184549689292908e-01 3.1191380694508553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5233 -2.3956559598445892e-02</internalNodes>\n          <leafValues>\n            3.6116409301757812e-01 -2.4698240682482719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5234 -1.7136270180344582e-02</internalNodes>\n          <leafValues>\n            -2.6252090930938721e-01 2.4616269394755363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5235 -6.2233610078692436e-03</internalNodes>\n          <leafValues>\n            1.1059129983186722e-01 -5.7947199791669846e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5236 2.9878519475460052e-02</internalNodes>\n          <leafValues>\n            7.8794546425342560e-03 -2.8504589200019836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5237 -9.6910241991281509e-03</internalNodes>\n          <leafValues>\n            -1.5696419775485992e-01 3.8263391703367233e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5238 -1.2825420498847961e-01</internalNodes>\n          <leafValues>\n            2.8350758552551270e-01 -2.7224350720643997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5239 -3.9670959813520312e-04</internalNodes>\n          <leafValues>\n            -1.3316330313682556e-01 5.3896941244602203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5240 -8.2217011367902160e-04</internalNodes>\n          <leafValues>\n            -1.3680179417133331e-01 7.7957339584827423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5241 7.4795359978452325e-05</internalNodes>\n          <leafValues>\n            -9.0496443212032318e-02 6.8528160452842712e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5242 9.3816556036472321e-03</internalNodes>\n          <leafValues>\n            -9.9184580147266388e-02 6.4078651368618011e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5243 -6.6485297866165638e-03</internalNodes>\n          <leafValues>\n            1.4783580601215363e-01 -4.6988330781459808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5244 -5.5821631103754044e-03</internalNodes>\n          <leafValues>\n            -1.3562120497226715e-01 5.5308390408754349e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5245 -3.0224759131669998e-02</internalNodes>\n          <leafValues>\n            3.4760668873786926e-01 -1.6698839142918587e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5246 -2.7506949380040169e-02</internalNodes>\n          <leafValues>\n            2.8031051158905029e-01 -1.0123490355908871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5247 1.5043930150568485e-02</internalNodes>\n          <leafValues>\n            1.5279079787433147e-02 -3.9506959915161133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5248 9.2139653861522675e-03</internalNodes>\n          <leafValues>\n            2.6678409427404404e-02 -1.4255590736865997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5249 6.3955582678318024e-02</internalNodes>\n          <leafValues>\n            6.2569188885390759e-03 -8.8076668977737427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5250 3.0171850085025653e-05</internalNodes>\n          <leafValues>\n            -1.1047919839620590e-01 5.1936849951744080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5251 -5.1049161702394485e-03</internalNodes>\n          <leafValues>\n            2.1350729465484619e-01 -2.7889270335435867e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5252 -9.1436346992850304e-03</internalNodes>\n          <leafValues>\n            -1.9197109341621399e-01 3.0341459438204765e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5253 -7.6746046543121338e-02</internalNodes>\n          <leafValues>\n            -7.2468912601470947e-01 7.1879802271723747e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5254 4.8780560493469238e-02</internalNodes>\n          <leafValues>\n            -2.1447779610753059e-02 3.0364468693733215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5255 4.2551410198211670e-01</internalNodes>\n          <leafValues>\n            6.3504311256110668e-03 -9.4783991575241089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5256 2.2590209264308214e-03</internalNodes>\n          <leafValues>\n            1.8893169239163399e-02 -1.9443869590759277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5257 -3.8309961091727018e-03</internalNodes>\n          <leafValues>\n            -1.2813219428062439e-01 4.7748729586601257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5258 7.5495108030736446e-03</internalNodes>\n          <leafValues>\n            -6.7982822656631470e-02 7.6470799744129181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5259 1.4784730039536953e-02</internalNodes>\n          <leafValues>\n            -3.4885041415691376e-02 1.7936830222606659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5260 5.6762639433145523e-02</internalNodes>\n          <leafValues>\n            1.2816789560019970e-02 -4.8105829954147339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5261 -2.5854599662125111e-03</internalNodes>\n          <leafValues>\n            1.2653970718383789e-01 -4.7761850059032440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5262 -5.5542518384754658e-03</internalNodes>\n          <leafValues>\n            7.2126902639865875e-02 -3.8657661527395248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5263 2.6672501116991043e-03</internalNodes>\n          <leafValues>\n            -6.1485260725021362e-02 1.2647840380668640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5264 -2.2879959642887115e-01</internalNodes>\n          <leafValues>\n            -4.8435351252555847e-01 4.5618140138685703e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5265 3.7851329892873764e-02</internalNodes>\n          <leafValues>\n            1.8769560381770134e-02 -3.0806949734687805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5266 2.4275709874927998e-03</internalNodes>\n          <leafValues>\n            -7.1589171886444092e-02 8.1694543361663818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5267 -7.9000797122716904e-03</internalNodes>\n          <leafValues>\n            -1.2589320540428162e-01 4.7421310096979141e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5268 -6.7925411276519299e-03</internalNodes>\n          <leafValues>\n            6.1758730560541153e-02 -5.3803559392690659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5269 -1.7522360384464264e-01</internalNodes>\n          <leafValues>\n            3.3726111054420471e-01 -1.7961960285902023e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5270 6.6033959388732910e-02</internalNodes>\n          <leafValues>\n            4.4206557795405388e-03 -5.5819147825241089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5271 5.1699979230761528e-03</internalNodes>\n          <leafValues>\n            5.3349301218986511e-02 -1.2245289981365204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5272 1.2047989666461945e-01</internalNodes>\n          <leafValues>\n            -6.9788158871233463e-03 7.9341912269592285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5273 -4.2617730796337128e-03</internalNodes>\n          <leafValues>\n            7.8014120459556580e-02 -6.8260386586189270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5274 3.0685370787978172e-02</internalNodes>\n          <leafValues>\n            9.3320813030004501e-03 -2.7420249581336975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5275 -6.8651121109724045e-03</internalNodes>\n          <leafValues>\n            -1.3084979355335236e-01 4.7273408621549606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5276 -3.9284229278564453e-03</internalNodes>\n          <leafValues>\n            1.1553719639778137e-01 -5.5044289678335190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5277 -4.2112590745091438e-03</internalNodes>\n          <leafValues>\n            1.3730779290199280e-01 -5.2514389157295227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5278 -7.6999869197607040e-03</internalNodes>\n          <leafValues>\n            -3.4011191129684448e-01 1.7478680238127708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5279 -1.1867909692227840e-02</internalNodes>\n          <leafValues>\n            2.5731179118156433e-01 -2.5691770017147064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5280 5.3619472309947014e-03</internalNodes>\n          <leafValues>\n            1.1936780065298080e-02 -2.8930050134658813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5281 -2.3130229674279690e-03</internalNodes>\n          <leafValues>\n            -1.0821309685707092e-01 5.3640749305486679e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5282 -2.2222870588302612e-01</internalNodes>\n          <leafValues>\n            3.1654310226440430e-01 -1.4542319811880589e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5283 6.2593920156359673e-03</internalNodes>\n          <leafValues>\n            3.7795171141624451e-02 -1.5100699663162231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5284 3.4754760563373566e-03</internalNodes>\n          <leafValues>\n            -6.3047468662261963e-02 8.5025683045387268e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5285 -2.8249478782527149e-04</internalNodes>\n          <leafValues>\n            -1.1442869901657104e-01 5.6041400879621506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5286 4.8107700422406197e-04</internalNodes>\n          <leafValues>\n            -9.6898466348648071e-02 2.8347050771117210e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5287 2.4178959429264069e-02</internalNodes>\n          <leafValues>\n            -2.1033059805631638e-02 2.5629448890686035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5288 2.9526960104703903e-02</internalNodes>\n          <leafValues>\n            1.6122579574584961e-02 -3.4472090005874634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5289 -3.0501780565828085e-03</internalNodes>\n          <leafValues>\n            -1.3633529841899872e-01 4.0983788669109344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5290 1.0082300286740065e-03</internalNodes>\n          <leafValues>\n            -6.0927029699087143e-02 4.0717199444770813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5291 -3.0384280253201723e-03</internalNodes>\n          <leafValues>\n            6.1883278191089630e-02 -9.7887121140956879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5292 3.2816259190440178e-03</internalNodes>\n          <leafValues>\n            -4.7950621694326401e-02 6.2675401568412781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5293 1.3182610273361206e-02</internalNodes>\n          <leafValues>\n            2.2476239502429962e-01 -2.5649169459939003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5294 -2.3278119042515755e-03</internalNodes>\n          <leafValues>\n            7.3735602200031281e-02 -5.1023889333009720e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5295 -1.0695509612560272e-02</internalNodes>\n          <leafValues>\n            -7.5625538825988770e-01 7.3301601223647594e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5296 7.8046746551990509e-02</internalNodes>\n          <leafValues>\n            1.8139410531148314e-03 -6.2067931890487671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5297 5.6678339838981628e-02</internalNodes>\n          <leafValues>\n            6.2128840945661068e-03 -7.8200930356979370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5298 7.2442921809852123e-03</internalNodes>\n          <leafValues>\n            -4.8852469772100449e-02 1.0644549876451492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5299 -6.6754333674907684e-02</internalNodes>\n          <leafValues>\n            -6.4796060323715210e-01 8.7654050439596176e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5300 -3.4662630409002304e-02</internalNodes>\n          <leafValues>\n            3.3293959498405457e-01 -1.7286069691181183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5301 -1.5084750019013882e-02</internalNodes>\n          <leafValues>\n            -1.2696580588817596e-01 4.5507699251174927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5302 -2.3421730846166611e-02</internalNodes>\n          <leafValues>\n            -2.5279340147972107e-01 1.5818970277905464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5303 2.5689320638775826e-02</internalNodes>\n          <leafValues>\n            -3.7194628268480301e-02 1.6223169863224030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5304 6.3883140683174133e-03</internalNodes>\n          <leafValues>\n            3.0617009848356247e-02 -1.3695000112056732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5305 -1.0519590228796005e-01</internalNodes>\n          <leafValues>\n            -8.4453481435775757e-01 6.6635669209063053e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5306 1.8773669376969337e-02</internalNodes>\n          <leafValues>\n            4.6610347926616669e-03 -1.7115519940853119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5307 -1.3318320270627737e-03</internalNodes>\n          <leafValues>\n            6.5780423581600189e-02 -8.7241567671298981e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5308 -2.1417330205440521e-01</internalNodes>\n          <leafValues>\n            4.7866639494895935e-01 -3.0801231041550636e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5309 -5.5097872018814087e-01</internalNodes>\n          <leafValues>\n            -6.3633698225021362e-01 8.8994754478335381e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5310 -3.3415539655834436e-03</internalNodes>\n          <leafValues>\n            1.2846040725708008e-01 -3.2317079603672028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5311 1.0858159512281418e-03</internalNodes>\n          <leafValues>\n            -1.1438050121068954e-01 4.7090869396924973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5312 4.2784498073160648e-03</internalNodes>\n          <leafValues>\n            4.3842699378728867e-02 -8.0856688320636749e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5313 -2.0054390188306570e-03</internalNodes>\n          <leafValues>\n            1.0532370209693909e-01 -5.0866328179836273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5314 -3.4336079843342304e-03</internalNodes>\n          <leafValues>\n            -7.9986043274402618e-02 4.2570270597934723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5315 -1.2204749509692192e-03</internalNodes>\n          <leafValues>\n            4.1162941604852676e-02 -1.3378110527992249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5316 -1.3440379500389099e-01</internalNodes>\n          <leafValues>\n            -5.2044588327407837e-01 2.9635489918291569e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5317 1.4581819996237755e-02</internalNodes>\n          <leafValues>\n            -1.9067969173192978e-02 4.0065661072731018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5318 -2.8450360987335443e-03</internalNodes>\n          <leafValues>\n            -5.8998711407184601e-02 3.1797751784324646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5319 4.8618339933454990e-03</internalNodes>\n          <leafValues>\n            3.9754759520292282e-02 -1.4741879701614380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5320 5.6295008398592472e-03</internalNodes>\n          <leafValues>\n            -4.2094878852367401e-02 4.1394129395484924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5321 -4.5936359092593193e-03</internalNodes>\n          <leafValues>\n            2.0751099288463593e-01 -2.7909379452466965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5322 -3.0693739652633667e-02</internalNodes>\n          <leafValues>\n            -3.4029048681259155e-01 5.0333337858319283e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5323 3.1476689036935568e-04</internalNodes>\n          <leafValues>\n            -8.8118873536586761e-02 6.3354291021823883e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5324 -3.4313879441469908e-03</internalNodes>\n          <leafValues>\n            5.9088770300149918e-02 -6.7773580551147461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5325 -3.4075058647431433e-04</internalNodes>\n          <leafValues>\n            -9.8268762230873108e-02 5.8783698827028275e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5326 -3.7829359062016010e-03</internalNodes>\n          <leafValues>\n            1.7841720581054688e-01 -4.6912178397178650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5327 -4.6322058886289597e-02</internalNodes>\n          <leafValues>\n            -1.6307410597801208e-01 3.9191931486129761e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5328 1.8471380695700645e-02</internalNodes>\n          <leafValues>\n            1.5975039452314377e-02 -2.8808701038360596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5329 9.0416809543967247e-03</internalNodes>\n          <leafValues>\n            -3.1815830618143082e-02 1.6392929852008820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5330 -3.1387940049171448e-02</internalNodes>\n          <leafValues>\n            1.5696319937705994e-01 -1.5333149582147598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5331 -7.5614887464325875e-05</internalNodes>\n          <leafValues>\n            7.4591353535652161e-02 -8.4359541535377502e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5332 -2.3939300328493118e-02</internalNodes>\n          <leafValues>\n            -1.1604589968919754e-01 3.0868789181113243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5333 2.2537580225616693e-03</internalNodes>\n          <leafValues>\n            4.0261909365653992e-02 -1.6604030132293701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5334 -5.3389810025691986e-02</internalNodes>\n          <leafValues>\n            1.0318890213966370e-01 -2.0877240225672722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5335 5.6420508772134781e-03</internalNodes>\n          <leafValues>\n            -4.6839520335197449e-02 1.1634089797735214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5336 4.2355400510132313e-03</internalNodes>\n          <leafValues>\n            2.5631250813603401e-02 -9.3193583190441132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5337 -2.1929260343313217e-02</internalNodes>\n          <leafValues>\n            -3.5141220688819885e-01 1.5704020857810974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5338 1.3050789944827557e-02</internalNodes>\n          <leafValues>\n            -7.6834131032228470e-03 1.3095930218696594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5339 2.2426109760999680e-02</internalNodes>\n          <leafValues>\n            6.3964631408452988e-03 -8.0513131618499756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5340 -8.8755652308464050e-02</internalNodes>\n          <leafValues>\n            3.9323249459266663e-01 -1.0365420021116734e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5341 1.1768270283937454e-02</internalNodes>\n          <leafValues>\n            -7.5270563364028931e-02 7.1183227002620697e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5342 2.1221570670604706e-02</internalNodes>\n          <leafValues>\n            2.4082770571112633e-02 -1.6292670369148254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5343 -5.2887611091136932e-02</internalNodes>\n          <leafValues>\n            3.3231079578399658e-01 -1.5548040159046650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5344 2.5847768783569336e-01</internalNodes>\n          <leafValues>\n            9.5278248190879822e-03 -6.3773447275161743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5345 -2.8695159126073122e-03</internalNodes>\n          <leafValues>\n            -9.8719991743564606e-02 5.5244650691747665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5346 1.2492690235376358e-01</internalNodes>\n          <leafValues>\n            1.9365450134500861e-03 -9.9999272823333740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5347 4.3900720775127411e-02</internalNodes>\n          <leafValues>\n            -1.6385570168495178e-02 3.7183851003646851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5348 5.2520469762384892e-03</internalNodes>\n          <leafValues>\n            4.7758270055055618e-02 -1.3461829721927643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5349 -2.0031959284096956e-03</internalNodes>\n          <leafValues>\n            8.3587102591991425e-02 -6.7750580608844757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5350 4.4535310007631779e-03</internalNodes>\n          <leafValues>\n            -8.9202463626861572e-02 4.6748258173465729e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5351 1.5174630284309387e-01</internalNodes>\n          <leafValues>\n            5.6481529027223587e-03 -8.2450437545776367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5352 -6.1992209404706955e-02</internalNodes>\n          <leafValues>\n            -4.3334591388702393e-01 5.3922580555081367e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5353 -9.3085348606109619e-02</internalNodes>\n          <leafValues>\n            5.2169102430343628e-01 -9.9382782354950905e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5354 -4.9394429661333561e-03</internalNodes>\n          <leafValues>\n            -2.0004139840602875e-01 2.7710979804396629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5355 -1.3681269483640790e-03</internalNodes>\n          <leafValues>\n            8.5065416991710663e-02 -7.4542969465255737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5356 -2.7988219517283142e-04</internalNodes>\n          <leafValues>\n            -7.6987631618976593e-02 6.8912938237190247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5357 -3.2129848841577768e-03</internalNodes>\n          <leafValues>\n            1.5940999984741211e-01 -3.4221589565277100e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5358 3.9533369243144989e-02</internalNodes>\n          <leafValues>\n            3.1095379963517189e-03 -8.5460907220840454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5359 2.0442719105631113e-03</internalNodes>\n          <leafValues>\n            -6.4074553549289703e-02 7.8644759953022003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5360 -2.0770760253071785e-02</internalNodes>\n          <leafValues>\n            -3.1129410862922668e-01 4.3864948675036430e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5361 -4.7200381755828857e-02</internalNodes>\n          <leafValues>\n            1.0526890307664871e-01 -5.1456131041049957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5362 1.3096869923174381e-02</internalNodes>\n          <leafValues>\n            9.9430568516254425e-03 -1.4253680408000946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5363 -1.0935390368103981e-02</internalNodes>\n          <leafValues>\n            -1.6756610572338104e-01 3.5863548517227173e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5364 -1.6354349255561829e-01</internalNodes>\n          <leafValues>\n            -8.2129329442977905e-01 1.9741130527108908e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5365 3.8668718189001083e-02</internalNodes>\n          <leafValues>\n            -1.1329679749906063e-02 4.7532460093498230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5366 6.0949958860874176e-02</internalNodes>\n          <leafValues>\n            1.1516530066728592e-02 -5.7472079992294312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5367 -1.2101690284907818e-02</internalNodes>\n          <leafValues>\n            1.5505610406398773e-01 -3.2629158347845078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5368 -1.0064270347356796e-02</internalNodes>\n          <leafValues>\n            -9.2389531433582306e-02 3.2318059355020523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5369 -5.8900681324303150e-03</internalNodes>\n          <leafValues>\n            -2.6503130793571472e-01 1.9127139821648598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5370 -3.1361039727926254e-02</internalNodes>\n          <leafValues>\n            5.6730771064758301e-01 -9.6010044217109680e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5371 -4.7777321189641953e-02</internalNodes>\n          <leafValues>\n            5.9038662910461426e-01 -7.4091539718210697e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5372 -1.0792270302772522e-02</internalNodes>\n          <leafValues>\n            -1.2814930081367493e-01 4.0264949202537537e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5373 -1.4374120160937309e-02</internalNodes>\n          <leafValues>\n            2.0772540569305420e-01 -2.9854990541934967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5374 5.2079811692237854e-02</internalNodes>\n          <leafValues>\n            -3.8335260469466448e-03 7.5818628072738647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5375 6.1354418285191059e-03</internalNodes>\n          <leafValues>\n            3.0476450920104980e-02 -1.7281690239906311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5376 -3.0654598958790302e-03</internalNodes>\n          <leafValues>\n            5.8025300502777100e-02 -7.9617038369178772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5377 5.7721929624676704e-03</internalNodes>\n          <leafValues>\n            -3.6747518926858902e-02 1.6319790482521057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5378 2.7028471231460571e-01</internalNodes>\n          <leafValues>\n            -3.9847781881690025e-03 4.9476540088653564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5379 -1.5034529566764832e-01</internalNodes>\n          <leafValues>\n            -5.2624911069869995e-01 1.0567910037934780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5380 7.6101601123809814e-02</internalNodes>\n          <leafValues>\n            -2.3525250144302845e-03 9.1819989681243896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5381 -5.5953811854124069e-02</internalNodes>\n          <leafValues>\n            -7.8321272134780884e-01 6.8363421596586704e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5382 -2.4320950731635094e-02</internalNodes>\n          <leafValues>\n            2.2739610075950623e-01 -1.1622290126979351e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5383 1.6274319961667061e-02</internalNodes>\n          <leafValues>\n            1.4024170115590096e-02 -3.4222239255905151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5384 7.7015208080410957e-04</internalNodes>\n          <leafValues>\n            -4.4768709689378738e-02 5.7412229478359222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5385 1.3995269546285272e-03</internalNodes>\n          <leafValues>\n            -6.0614239424467087e-02 8.4398999810218811e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5386 -2.0544769242405891e-02</internalNodes>\n          <leafValues>\n            -1.8160410225391388e-01 2.0795119926333427e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5387 -3.6872550845146179e-02</internalNodes>\n          <leafValues>\n            2.6817229390144348e-01 -1.9921269267797470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5388 -2.5466610677540302e-03</internalNodes>\n          <leafValues>\n            -1.3361929357051849e-01 1.9191939383745193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5389 3.3513590693473816e-02</internalNodes>\n          <leafValues>\n            9.8206587135791779e-03 -5.2659887075424194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5390 -5.5437661707401276e-02</internalNodes>\n          <leafValues>\n            4.5292490720748901e-01 -9.3475803732872009e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5391 -5.3564338013529778e-03</internalNodes>\n          <leafValues>\n            -1.4787580072879791e-01 3.3617950975894928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5392 1.1551200412213802e-02</internalNodes>\n          <leafValues>\n            -3.2851058989763260e-02 6.3716597855091095e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5393 7.2917826473712921e-02</internalNodes>\n          <leafValues>\n            -1.6388719901442528e-02 3.1580808758735657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5394 -8.9563012123107910e-02</internalNodes>\n          <leafValues>\n            7.5366562604904175e-01 -2.0717559382319450e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5395 -2.2225419525057077e-03</internalNodes>\n          <leafValues>\n            -9.2733852565288544e-02 6.0395851731300354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5396 -1.7847110331058502e-01</internalNodes>\n          <leafValues>\n            4.7988530993461609e-01 -1.0481510311365128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5397 6.7723011597990990e-03</internalNodes>\n          <leafValues>\n            5.2660830318927765e-02 -1.0471290349960327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5398 2.8399130329489708e-02</internalNodes>\n          <leafValues>\n            -2.2862000390887260e-02 2.5348138809204102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5399 -7.0053818635642529e-03</internalNodes>\n          <leafValues>\n            -1.3017000257968903e-01 4.3448921293020248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5400 -5.1440461538732052e-03</internalNodes>\n          <leafValues>\n            -1.4800100028514862e-01 4.5171629637479782e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5401 -1.1269059963524342e-02</internalNodes>\n          <leafValues>\n            1.1185359954833984e-01 -5.4867088794708252e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5402 2.2866109386086464e-02</internalNodes>\n          <leafValues>\n            -1.5563690103590488e-02 2.1705490350723267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5403 5.1559228450059891e-02</internalNodes>\n          <leafValues>\n            1.0421809740364552e-02 -5.3233247995376587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5404 1.8902059644460678e-02</internalNodes>\n          <leafValues>\n            -3.0878869816660881e-02 5.5574499070644379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5405 5.5700382217764854e-03</internalNodes>\n          <leafValues>\n            5.3661361336708069e-02 -9.4876497983932495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5406 -2.3021729663014412e-02</internalNodes>\n          <leafValues>\n            1.2766240537166595e-01 -2.2307910025119781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5407 7.1334750391542912e-03</internalNodes>\n          <leafValues>\n            3.1089689582586288e-02 -1.6293430328369141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5408 -2.9335260391235352e-02</internalNodes>\n          <leafValues>\n            1.0503090173006058e-01 -2.6008550077676773e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5409 4.6253278851509094e-02</internalNodes>\n          <leafValues>\n            7.8362170606851578e-03 -6.6226661205291748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5410 3.9622580516152084e-04</internalNodes>\n          <leafValues>\n            -9.4567127525806427e-02 2.6796899735927582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5411 -1.1323750019073486e-02</internalNodes>\n          <leafValues>\n            7.4313652515411377e-01 -6.7432140931487083e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5412 -1.7217209935188293e-01</internalNodes>\n          <leafValues>\n            -7.1483498811721802e-01 8.1747565418481827e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5413 1.8156579462811351e-03</internalNodes>\n          <leafValues>\n            4.8135720193386078e-02 -1.0678470134735107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5414 5.8022491633892059e-02</internalNodes>\n          <leafValues>\n            -7.4218288064002991e-03 3.8226440548896790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5415 1.4357370091602206e-03</internalNodes>\n          <leafValues>\n            -2.2542880475521088e-01 2.1576719358563423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5416 5.5960440076887608e-03</internalNodes>\n          <leafValues>\n            2.5731930136680603e-01 -2.1246509626507759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5417 2.5314849335700274e-03</internalNodes>\n          <leafValues>\n            -3.6227720975875854e-01 1.5138260088860989e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5418 -4.2207110673189163e-03</internalNodes>\n          <leafValues>\n            -4.6638991683721542e-02 2.6125539094209671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5419 -5.4260431788861752e-03</internalNodes>\n          <leafValues>\n            1.0110379755496979e-01 -5.2066121250391006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5420 1.6170790186151862e-03</internalNodes>\n          <leafValues>\n            -4.1680540889501572e-02 9.6459351480007172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5421 -3.2414530869573355e-03</internalNodes>\n          <leafValues>\n            -1.2638680636882782e-01 3.9169210940599442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5422 4.5421482063829899e-03</internalNodes>\n          <leafValues>\n            -2.9149880632758141e-02 6.9948889315128326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5423 5.3024510852992535e-03</internalNodes>\n          <leafValues>\n            -7.9129062592983246e-02 6.1111859977245331e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5424 -4.6412080526351929e-02</internalNodes>\n          <leafValues>\n            3.1127449870109558e-01 -6.2580788508057594e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5425 -6.2991487793624401e-03</internalNodes>\n          <leafValues>\n            -8.3928130567073822e-02 6.6761530935764313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5426 7.9948090016841888e-02</internalNodes>\n          <leafValues>\n            2.6887101121246815e-03 -5.6553709506988525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5427 9.9693494848906994e-04</internalNodes>\n          <leafValues>\n            -7.2051003575325012e-02 9.2260897159576416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5428 -2.1847949828952551e-03</internalNodes>\n          <leafValues>\n            8.3864517509937286e-02 -6.6099606454372406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5429 -1.5286840498447418e-01</internalNodes>\n          <leafValues>\n            6.1705768108367920e-01 -8.1674018874764442e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5430 1.7121130600571632e-02</internalNodes>\n          <leafValues>\n            2.6676440611481667e-02 -1.4158309996128082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5431 1.8799189710989594e-03</internalNodes>\n          <leafValues>\n            -7.7865563333034515e-02 6.7955218255519867e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5432 5.5029629729688168e-03</internalNodes>\n          <leafValues>\n            -7.9979859292507172e-02 6.4055956900119781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5433 2.7474550530314445e-02</internalNodes>\n          <leafValues>\n            6.0482721775770187e-02 -8.8957548141479492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5434 2.7708879113197327e-01</internalNodes>\n          <leafValues>\n            4.4098719954490662e-03 -1.0000040531158447e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5435 -4.9538668245077133e-03</internalNodes>\n          <leafValues>\n            1.4720940589904785e-01 -3.5671569406986237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5436 4.7095369547605515e-02</internalNodes>\n          <leafValues>\n            -6.0950522311031818e-03 2.4319580197334290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5437 -3.1939700711518526e-03</internalNodes>\n          <leafValues>\n            -1.3417580723762512e-01 3.9335511624813080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5438 3.5586568992584944e-03</internalNodes>\n          <leafValues>\n            2.1399470046162605e-02 -4.3609801679849625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5439 -1.0028639808297157e-02</internalNodes>\n          <leafValues>\n            1.6288889944553375e-01 -3.1448449939489365e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5440 -2.9802629724144936e-03</internalNodes>\n          <leafValues>\n            -7.0220857858657837e-02 3.7910789251327515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5441 1.7347529530525208e-02</internalNodes>\n          <leafValues>\n            1.1053959839046001e-02 -4.5107790827751160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5442 -4.4207129627466202e-02</internalNodes>\n          <leafValues>\n            1.4115320146083832e-01 -6.2362072058022022e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5443 -3.2249989453703165e-03</internalNodes>\n          <leafValues>\n            -1.0305760055780411e-01 4.9647849053144455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5444 7.5196991674602032e-03</internalNodes>\n          <leafValues>\n            -2.8604390099644661e-02 9.8367802798748016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5445 -6.1209458857774734e-02</internalNodes>\n          <leafValues>\n            2.2113859653472900e-01 -2.9835490509867668e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5446 2.0107250660657883e-02</internalNodes>\n          <leafValues>\n            1.6412479802966118e-02 -1.2316829711198807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5447 -1.6578679904341698e-02</internalNodes>\n          <leafValues>\n            -2.3395630717277527e-01 3.0250690877437592e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5448 -6.0900870710611343e-02</internalNodes>\n          <leafValues>\n            3.1688570976257324e-01 -1.8433200195431709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5449 4.2772209271788597e-03</internalNodes>\n          <leafValues>\n            -4.3859448283910751e-02 1.2858760356903076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5450 6.6130697727203369e-02</internalNodes>\n          <leafValues>\n            2.0941190421581268e-02 -2.0549100637435913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5451 2.5896991137415171e-03</internalNodes>\n          <leafValues>\n            -8.2597322762012482e-02 7.7048726379871368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5452 -1.7113700509071350e-02</internalNodes>\n          <leafValues>\n            -9.9560201168060303e-02 2.0174279808998108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5453 6.2078679911792278e-03</internalNodes>\n          <leafValues>\n            -1.5074240043759346e-02 3.5393691062927246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5454 -3.3676949143409729e-01</internalNodes>\n          <leafValues>\n            -4.9838671088218689e-01 7.4067250825464725e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5455 5.0239380449056625e-02</internalNodes>\n          <leafValues>\n            -1.8589239567518234e-02 2.8223350644111633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5456 1.1036300100386143e-02</internalNodes>\n          <leafValues>\n            2.9623959213495255e-02 -2.0078790187835693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5457 6.0965020209550858e-02</internalNodes>\n          <leafValues>\n            -1.1036460287868977e-02 5.0334519147872925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5458 1.5966590493917465e-02</internalNodes>\n          <leafValues>\n            1.3941870070993900e-02 -2.4742470681667328e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>243</maxWeakCount>\n      <stageThreshold>-1.4138590097427368e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 5459 -3.8829419761896133e-02</internalNodes>\n          <leafValues>\n            3.1823828816413879e-01 -1.4062009751796722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5460 -6.7771300673484802e-02</internalNodes>\n          <leafValues>\n            2.0526969432830811e-01 -1.7867469787597656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5461 9.3152940273284912e-02</internalNodes>\n          <leafValues>\n            -1.3293810188770294e-01 2.3252120614051819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5462 -6.0846367850899696e-03</internalNodes>\n          <leafValues>\n            1.9817650318145752e-01 -1.5535140037536621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5463 -1.7230149358510971e-02</internalNodes>\n          <leafValues>\n            2.5784310698509216e-01 -9.0387366712093353e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5464 4.1907798498868942e-02</internalNodes>\n          <leafValues>\n            6.2066148966550827e-02 -3.2303139567375183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5465 -3.4084350336343050e-03</internalNodes>\n          <leafValues>\n            -3.1667909026145935e-01 6.0275040566921234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5466 3.4909289330244064e-02</internalNodes>\n          <leafValues>\n            -1.2456309795379639e-01 1.6099859774112701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5467 1.1676900088787079e-02</internalNodes>\n          <leafValues>\n            -1.8025660514831543e-01 1.2234430015087128e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5468 -1.2773449998348951e-03</internalNodes>\n          <leafValues>\n            -2.4735580384731293e-01 6.2129739671945572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5469 1.6917299479246140e-02</internalNodes>\n          <leafValues>\n            6.9671042263507843e-02 -2.5292581319808960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5470 2.5656640529632568e-02</internalNodes>\n          <leafValues>\n            2.6212580502033234e-02 -1.6348999738693237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5471 1.9884048961102962e-03</internalNodes>\n          <leafValues>\n            -3.1018510460853577e-01 5.0259251147508621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5472 4.2548488825559616e-02</internalNodes>\n          <leafValues>\n            1.7065819352865219e-02 -4.7830620408058167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5473 6.0466718859970570e-03</internalNodes>\n          <leafValues>\n            -2.2118049860000610e-01 7.2842411696910858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5474 -8.0229081213474274e-03</internalNodes>\n          <leafValues>\n            -1.4530059695243835e-01 4.9906261265277863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5475 3.7937261164188385e-02</internalNodes>\n          <leafValues>\n            -3.4007780253887177e-02 4.3715330958366394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5476 -5.2960298955440521e-02</internalNodes>\n          <leafValues>\n            -2.8856590390205383e-01 1.8457209691405296e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5477 7.5578060932457447e-03</internalNodes>\n          <leafValues>\n            -2.3534600436687469e-01 6.0302570462226868e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5478 -1.5554980374872684e-02</internalNodes>\n          <leafValues>\n            -2.6567730307579041e-01 5.5279370397329330e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5479 3.4035260323435068e-03</internalNodes>\n          <leafValues>\n            4.6175889670848846e-02 -3.3651891350746155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5480 -1.9370270892977715e-02</internalNodes>\n          <leafValues>\n            1.9603839516639709e-01 -8.0186828970909119e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5481 2.1719569340348244e-02</internalNodes>\n          <leafValues>\n            4.1932079941034317e-02 -3.4327590465545654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5482 -3.8787510129623115e-04</internalNodes>\n          <leafValues>\n            -2.5382238626480103e-01 4.5200780034065247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5483 3.3794559538364410e-02</internalNodes>\n          <leafValues>\n            -6.4901560544967651e-02 2.1238659322261810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5484 -9.1701336205005646e-03</internalNodes>\n          <leafValues>\n            -2.3874589800834656e-01 4.0796380490064621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5485 -1.3741330476477742e-03</internalNodes>\n          <leafValues>\n            -1.6430020332336426e-01 8.1496283411979675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5486 -1.2352719902992249e-02</internalNodes>\n          <leafValues>\n            1.6805070638656616e-01 -5.7883970439434052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5487 -1.1177700012922287e-02</internalNodes>\n          <leafValues>\n            -1.9775860011577606e-01 6.3408702611923218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5488 2.5044390931725502e-03</internalNodes>\n          <leafValues>\n            -1.2900459766387939e-01 5.8973610401153564e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5489 2.1939110010862350e-03</internalNodes>\n          <leafValues>\n            1.4937159419059753e-01 -7.9897291958332062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5490 -4.6443499624729156e-02</internalNodes>\n          <leafValues>\n            -4.4332349300384521e-01 2.0691359415650368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5491 -3.8867309689521790e-02</internalNodes>\n          <leafValues>\n            -5.3450870513916016e-01 2.1435650065541267e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5492 -2.0838780328631401e-03</internalNodes>\n          <leafValues>\n            5.3876239806413651e-02 -1.6674530506134033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5493 -1.7784969881176949e-02</internalNodes>\n          <leafValues>\n            2.5898349285125732e-01 -6.5794423222541809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5494 -9.9478460848331451e-02</internalNodes>\n          <leafValues>\n            -7.2332090139389038e-01 6.1601991765201092e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5495 -2.5733250658959150e-03</internalNodes>\n          <leafValues>\n            7.2027653455734253e-02 -1.7522309720516205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5496 6.9977439939975739e-02</internalNodes>\n          <leafValues>\n            -3.0238330364227295e-02 3.9809378981590271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5497 -1.0880780406296253e-02</internalNodes>\n          <leafValues>\n            -3.0606269836425781e-01 4.5210558921098709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5498 4.8081401735544205e-02</internalNodes>\n          <leafValues>\n            4.3911099433898926e-02 -2.5686219334602356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5499 7.9688243567943573e-02</internalNodes>\n          <leafValues>\n            -3.3741600811481476e-02 3.6532700061798096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5500 -1.5404020436108112e-02</internalNodes>\n          <leafValues>\n            -1.7731459438800812e-01 2.3800730705261230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5501 -3.6643899977207184e-02</internalNodes>\n          <leafValues>\n            -6.3931107521057129e-01 1.7518630251288414e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5502 -1.3072500005364418e-02</internalNodes>\n          <leafValues>\n            -2.4119360744953156e-01 5.8876950293779373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5503 -2.5379280559718609e-03</internalNodes>\n          <leafValues>\n            -2.0509210228919983e-01 5.8915760368108749e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5504 4.7491278499364853e-02</internalNodes>\n          <leafValues>\n            2.2842779755592346e-02 -3.9453479647636414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5505 -2.1489640697836876e-02</internalNodes>\n          <leafValues>\n            -3.1091120839118958e-01 3.8020871579647064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5506 1.3841330073773861e-02</internalNodes>\n          <leafValues>\n            -5.6039519608020782e-02 2.1308979392051697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5507 4.9399589188396931e-03</internalNodes>\n          <leafValues>\n            -1.8838630616664886e-01 6.2171839177608490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5508 1.3483439572155476e-02</internalNodes>\n          <leafValues>\n            3.6875329911708832e-02 -2.4952369928359985e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5509 -8.4225656464695930e-03</internalNodes>\n          <leafValues>\n            7.1501091122627258e-02 -1.3996620476245880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5510 -4.3786991387605667e-02</internalNodes>\n          <leafValues>\n            2.0128419995307922e-01 -5.3744260221719742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5511 -1.0068439878523350e-02</internalNodes>\n          <leafValues>\n            -1.6707019507884979e-01 6.1345089226961136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5512 2.4383061099797487e-03</internalNodes>\n          <leafValues>\n            -1.2105459719896317e-01 4.9807701259851456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5513 3.2083820551633835e-03</internalNodes>\n          <leafValues>\n            -5.6045360863208771e-02 1.7955709993839264e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5514 -2.0389519631862640e-02</internalNodes>\n          <leafValues>\n            -3.1983590126037598e-01 3.4141618758440018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5515 -2.2914420813322067e-02</internalNodes>\n          <leafValues>\n            -3.9454650878906250e-01 2.3838970810174942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5516 1.8566900864243507e-02</internalNodes>\n          <leafValues>\n            3.8432560861110687e-02 -2.2991999983787537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5517 -1.0277030058205128e-02</internalNodes>\n          <leafValues>\n            2.2557449340820312e-01 -4.9223229289054871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5518 -9.7914133220911026e-03</internalNodes>\n          <leafValues>\n            1.9327880442142487e-01 -3.6139059811830521e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5519 1.2699839659035206e-02</internalNodes>\n          <leafValues>\n            5.6297991424798965e-02 -2.0981599390506744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5520 3.9867468178272247e-02</internalNodes>\n          <leafValues>\n            9.4982674345374107e-03 -4.7686201333999634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5521 3.3704519271850586e-02</internalNodes>\n          <leafValues>\n            1.8848460167646408e-02 -5.3707981109619141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5522 -3.3695269376039505e-02</internalNodes>\n          <leafValues>\n            -2.7003350853919983e-01 3.8956340402364731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5523 2.3961249738931656e-02</internalNodes>\n          <leafValues>\n            -9.5000430941581726e-02 1.0282819718122482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5524 8.2990229129791260e-02</internalNodes>\n          <leafValues>\n            3.7828568369150162e-02 -3.0267751216888428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5525 1.6537210345268250e-01</internalNodes>\n          <leafValues>\n            2.3912150412797928e-02 -4.1214409470558167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5526 1.8202569335699081e-02</internalNodes>\n          <leafValues>\n            2.6127459481358528e-02 -6.9227010011672974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5527 -4.5322380959987640e-02</internalNodes>\n          <leafValues>\n            -4.4437649846076965e-01 2.1279569715261459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5528 4.7620609402656555e-02</internalNodes>\n          <leafValues>\n            -3.4070000052452087e-02 2.1065680682659149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5529 1.0596530046314001e-03</internalNodes>\n          <leafValues>\n            9.8347820341587067e-02 -9.2732593417167664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5530 3.2028049230575562e-02</internalNodes>\n          <leafValues>\n            2.3833949118852615e-02 -4.3276590108871460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5531 -1.3764370232820511e-02</internalNodes>\n          <leafValues>\n            -4.1726619005203247e-01 2.1883359178900719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5532 3.6652158945798874e-02</internalNodes>\n          <leafValues>\n            -2.6851410046219826e-02 1.0051230341196060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5533 -1.5507760457694530e-02</internalNodes>\n          <leafValues>\n            4.8519268631935120e-01 -2.4900710210204124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5534 7.1460101753473282e-03</internalNodes>\n          <leafValues>\n            5.7906471192836761e-02 -5.1613971590995789e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5535 2.4280229583382607e-02</internalNodes>\n          <leafValues>\n            -3.7341829389333725e-02 2.9201799631118774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5536 -8.3522319793701172e-02</internalNodes>\n          <leafValues>\n            3.7447971105575562e-01 -3.4602559171617031e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5537 3.1485721468925476e-02</internalNodes>\n          <leafValues>\n            2.4092009291052818e-02 -3.9594879746437073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5538 9.4820279628038406e-03</internalNodes>\n          <leafValues>\n            -7.3714673519134521e-02 1.3066330552101135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5539 4.0116958320140839e-02</internalNodes>\n          <leafValues>\n            3.0453719198703766e-02 -3.0641159415245056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5540 -5.2815478295087814e-02</internalNodes>\n          <leafValues>\n            4.5792409777641296e-01 -2.3906230926513672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5541 4.6821571886539459e-03</internalNodes>\n          <leafValues>\n            -8.8395930826663971e-02 1.2858130037784576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5542 -1.3448280096054077e-01</internalNodes>\n          <leafValues>\n            -2.7471750974655151e-01 1.5970310196280479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5543 5.4646627977490425e-03</internalNodes>\n          <leafValues>\n            -2.1628439426422119e-01 4.3035320937633514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5544 -3.5996358841657639e-02</internalNodes>\n          <leafValues>\n            -4.8524090647697449e-01 1.0563749819993973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5545 2.5235998630523682e-01</internalNodes>\n          <leafValues>\n            9.3745701014995575e-03 -8.8613390922546387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5546 -2.5067269802093506e-02</internalNodes>\n          <leafValues>\n            -2.2364640235900879e-01 3.7146601825952530e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5547 -1.4150329865515232e-02</internalNodes>\n          <leafValues>\n            3.7856650352478027e-01 -2.7817489579319954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5548 1.0049570351839066e-01</internalNodes>\n          <leafValues>\n            1.1244839988648891e-02 -7.1869522333145142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5549 1.9989080727100372e-02</internalNodes>\n          <leafValues>\n            2.6056809350848198e-02 -3.2147800922393799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5550 -4.9160558730363846e-02</internalNodes>\n          <leafValues>\n            -2.3164880275726318e-01 1.6317559406161308e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5551 2.2118790075182915e-02</internalNodes>\n          <leafValues>\n            -5.0569478422403336e-02 1.7572580277919769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5552 -7.6390360482037067e-03</internalNodes>\n          <leafValues>\n            2.2264319658279419e-01 -4.3685391545295715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5553 -1.6813250258564949e-03</internalNodes>\n          <leafValues>\n            5.5582441389560699e-02 -1.7739319801330566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5554 -1.6619000583887100e-02</internalNodes>\n          <leafValues>\n            -2.7812969684600830e-01 1.9737830385565758e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5555 -3.2801620662212372e-02</internalNodes>\n          <leafValues>\n            -2.3325189948081970e-01 3.6663819104433060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5556 2.4526590108871460e-01</internalNodes>\n          <leafValues>\n            -2.9738940298557281e-02 3.1338408589363098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5557 -1.7271770164370537e-02</internalNodes>\n          <leafValues>\n            5.2818918228149414e-01 -1.4151779934763908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5558 2.0111909136176109e-02</internalNodes>\n          <leafValues>\n            2.7173580601811409e-02 -8.3122722804546356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5559 1.6076749190688133e-02</internalNodes>\n          <leafValues>\n            5.6346639990806580e-02 -1.5893140435218811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5560 -1.0179769992828369e-01</internalNodes>\n          <leafValues>\n            6.0448008775711060e-01 -7.6062050648033619e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5561 -4.4865649193525314e-02</internalNodes>\n          <leafValues>\n            3.3077031373977661e-01 -2.5329189375042915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5562 2.7094980701804161e-02</internalNodes>\n          <leafValues>\n            -6.9251723587512970e-02 1.5350599586963654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5563 -3.7675891071557999e-02</internalNodes>\n          <leafValues>\n            -3.1949838995933533e-01 2.9909679666161537e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5564 -8.2310457946732640e-04</internalNodes>\n          <leafValues>\n            6.0612969100475311e-02 -1.0531579703092575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5565 5.5686049163341522e-02</internalNodes>\n          <leafValues>\n            -4.0920350700616837e-02 2.2959649562835693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5566 -1.6866069927345961e-04</internalNodes>\n          <leafValues>\n            -7.7643588185310364e-02 2.9549270868301392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5567 -2.3873209953308105e-02</internalNodes>\n          <leafValues>\n            2.7944079041481018e-01 -3.1888458877801895e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5568 -1.5003600157797337e-02</internalNodes>\n          <leafValues>\n            2.5077390670776367e-01 -4.5932788401842117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5569 -1.4522319659590721e-02</internalNodes>\n          <leafValues>\n            -1.6453540325164795e-01 5.5180910974740982e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5570 -7.4650160968303680e-03</internalNodes>\n          <leafValues>\n            -1.2690469622612000e-01 7.1543112397193909e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5571 5.4984640330076218e-02</internalNodes>\n          <leafValues>\n            -1.3730799779295921e-02 6.5119642019271851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5572 -8.8030762970447540e-02</internalNodes>\n          <leafValues>\n            2.5416490435600281e-01 -1.2233870103955269e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5573 -3.6195501685142517e-02</internalNodes>\n          <leafValues>\n            -4.4917309284210205e-01 2.1093770861625671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5574 3.7063211202621460e-02</internalNodes>\n          <leafValues>\n            -6.6644148901104927e-03 2.4940170347690582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5575 -1.0568380355834961e-02</internalNodes>\n          <leafValues>\n            -4.1061571240425110e-01 2.1398089826107025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5576 1.2662780284881592e-01</internalNodes>\n          <leafValues>\n            5.2506178617477417e-03 -3.3240249752998352e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5577 -8.7341770995408297e-04</internalNodes>\n          <leafValues>\n            3.2687219977378845e-01 -2.7704829350113869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5578 -1.0967969428747892e-03</internalNodes>\n          <leafValues>\n            -2.7710831165313721e-01 3.6352828145027161e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5579 -7.9738020896911621e-02</internalNodes>\n          <leafValues>\n            -5.8329159021377563e-01 1.4061779715120792e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5580 -3.8278030697256327e-03</internalNodes>\n          <leafValues>\n            3.5459451377391815e-02 -1.3996809720993042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5581 2.0333999767899513e-02</internalNodes>\n          <leafValues>\n            -2.1421350538730621e-02 5.1610380411148071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5582 7.5564032886177301e-04</internalNodes>\n          <leafValues>\n            -1.0803470015525818e-01 3.3538289368152618e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5583 1.7855849862098694e-01</internalNodes>\n          <leafValues>\n            9.4842249527573586e-03 -8.1858187913894653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5584 -3.4745071083307266e-02</internalNodes>\n          <leafValues>\n            -5.8172190189361572e-01 1.1315549723803997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5585 5.1304209046065807e-03</internalNodes>\n          <leafValues>\n            -1.0659860074520111e-01 7.4440896511077881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5586 -3.3936198800802231e-02</internalNodes>\n          <leafValues>\n            -4.5997759699821472e-01 1.5264419838786125e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5587 -1.0171560570597649e-03</internalNodes>\n          <leafValues>\n            1.0301309823989868e-01 -8.9842960238456726e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5588 6.3489019870758057e-02</internalNodes>\n          <leafValues>\n            6.8669100292026997e-03 -7.6022517681121826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5589 2.4077939987182617e-01</internalNodes>\n          <leafValues>\n            -2.1571479737758636e-02 4.1113030910491943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5590 -5.1963441073894501e-02</internalNodes>\n          <leafValues>\n            -2.8517320752143860e-01 4.0943060070276260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5591 3.6408171057701111e-02</internalNodes>\n          <leafValues>\n            -5.0460960716009140e-02 1.6671819984912872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5592 9.6712149679660797e-03</internalNodes>\n          <leafValues>\n            -4.8915110528469086e-02 1.8224430084228516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5593 2.2268150001764297e-02</internalNodes>\n          <leafValues>\n            6.1390981078147888e-02 -1.5445849299430847e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5594 -7.0929281413555145e-02</internalNodes>\n          <leafValues>\n            5.0010168552398682e-01 -3.9896317757666111e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5595 2.0806699467357248e-04</internalNodes>\n          <leafValues>\n            -1.4475630223751068e-01 6.3607528805732727e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5596 -9.2365043237805367e-03</internalNodes>\n          <leafValues>\n            -2.1817289292812347e-01 3.8856260478496552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5597 2.2781990468502045e-02</internalNodes>\n          <leafValues>\n            2.0108619704842567e-02 -3.8452360033988953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5598 -7.0844120346009731e-03</internalNodes>\n          <leafValues>\n            -4.8885490745306015e-02 4.6367339789867401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5599 -8.4006279706954956e-02</internalNodes>\n          <leafValues>\n            3.5921669006347656e-01 -2.2461889311671257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5600 -7.0446580648422241e-02</internalNodes>\n          <leafValues>\n            -8.8395321369171143e-01 2.9730550013482571e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5601 4.8899810761213303e-02</internalNodes>\n          <leafValues>\n            2.3936219513416290e-02 -3.6770141124725342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5602 2.9677329584956169e-02</internalNodes>\n          <leafValues>\n            1.6608120873570442e-02 -2.2972689568996429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5603 2.5721399579197168e-03</internalNodes>\n          <leafValues>\n            -3.2572209835052490e-01 2.4146009236574173e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5604 1.6117929480969906e-03</internalNodes>\n          <leafValues>\n            2.9355300590395927e-02 -3.7541579455137253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5605 1.7546640709042549e-02</internalNodes>\n          <leafValues>\n            -5.0879240036010742e-02 1.5283130109310150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5606 -4.6326398849487305e-02</internalNodes>\n          <leafValues>\n            -2.2843320667743683e-01 1.4442530460655689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5607 -3.3205670118331909e-01</internalNodes>\n          <leafValues>\n            7.4457818269729614e-01 -1.0856879875063896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5608 -4.2317830026149750e-02</internalNodes>\n          <leafValues>\n            -1.4666019380092621e-01 5.7799231261014938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5609 3.2436659093946218e-03</internalNodes>\n          <leafValues>\n            5.4021451622247696e-02 -1.7029410600662231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5610 -2.0900890231132507e-02</internalNodes>\n          <leafValues>\n            -4.0789291262626648e-01 2.5334810838103294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5611 2.0325010642409325e-02</internalNodes>\n          <leafValues>\n            3.3015929162502289e-02 -2.4503390491008759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5612 -4.6341929584741592e-02</internalNodes>\n          <leafValues>\n            1.5976649522781372e-01 -4.1177939623594284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5613 -3.4356329590082169e-02</internalNodes>\n          <leafValues>\n            1.6021409630775452e-01 -6.2500953674316406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5614 2.4465970695018768e-02</internalNodes>\n          <leafValues>\n            -3.7487599998712540e-02 2.2807280719280243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5615 -1.8139539286494255e-02</internalNodes>\n          <leafValues>\n            -1.5909589827060699e-01 6.0539811849594116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5616 6.4394161105155945e-02</internalNodes>\n          <leafValues>\n            6.6441670060157776e-03 -7.4860227108001709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5617 9.6367759397253394e-04</internalNodes>\n          <leafValues>\n            -9.0620808303356171e-02 9.4118133187294006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5618 2.0024490356445312e-01</internalNodes>\n          <leafValues>\n            5.9731658548116684e-03 -8.2521688938140869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5619 -6.3498668372631073e-02</internalNodes>\n          <leafValues>\n            -6.9635838270187378e-01 9.3487137928605080e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5620 -1.9232399761676788e-02</internalNodes>\n          <leafValues>\n            1.1236680299043655e-01 -2.9199739918112755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5621 2.5418749451637268e-01</internalNodes>\n          <leafValues>\n            1.3959039933979511e-02 -5.1584947109222412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5622 1.0437460243701935e-01</internalNodes>\n          <leafValues>\n            -2.7743030339479446e-02 2.7373430132865906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5623 8.5034370422363281e-03</internalNodes>\n          <leafValues>\n            5.4144650697708130e-02 -1.3029509782791138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5624 5.2647730335593224e-03</internalNodes>\n          <leafValues>\n            -4.8077501356601715e-02 1.0371380299329758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5625 -2.4193519726395607e-02</internalNodes>\n          <leafValues>\n            1.9932989776134491e-01 -3.7111040204763412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5626 -4.6968772076070309e-03</internalNodes>\n          <leafValues>\n            -6.5797090530395508e-02 3.3837348222732544e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5627 -2.3464579135179520e-02</internalNodes>\n          <leafValues>\n            -2.6043030619621277e-01 3.0933089554309845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5628 -2.9029840603470802e-02</internalNodes>\n          <leafValues>\n            2.0683619379997253e-01 -2.7628650888800621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5629 7.9100236296653748e-02</internalNodes>\n          <leafValues>\n            7.7356752008199692e-03 -9.1816711425781250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5630 6.2152887694537640e-03</internalNodes>\n          <leafValues>\n            -7.3988027870655060e-02 8.7727412581443787e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5631 -6.7013278603553772e-02</internalNodes>\n          <leafValues>\n            3.7628298997879028e-01 -2.0892709493637085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5632 -7.9359989613294601e-03</internalNodes>\n          <leafValues>\n            -8.9532703161239624e-02 6.6559307277202606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5633 1.3035970041528344e-03</internalNodes>\n          <leafValues>\n            -6.6657140851020813e-02 1.1399099975824356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5634 -1.1964319646358490e-01</internalNodes>\n          <leafValues>\n            -6.0656189918518066e-01 7.3508038185536861e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5635 -2.2869240492582321e-03</internalNodes>\n          <leafValues>\n            7.3336817324161530e-02 -1.1889570206403732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5636 -1.1462569981813431e-01</internalNodes>\n          <leafValues>\n            2.9288530349731445e-01 -6.7763519473373890e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5637 4.8477489501237869e-02</internalNodes>\n          <leafValues>\n            -1.7062950879335403e-02 4.2953211069107056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5638 -1.3129960279911757e-03</internalNodes>\n          <leafValues>\n            -7.4319638311862946e-02 6.2149789184331894e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5639 -6.6344782710075378e-02</internalNodes>\n          <leafValues>\n            -5.8945667743682861e-01 1.3225819915533066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5640 -4.6543189091607928e-04</internalNodes>\n          <leafValues>\n            5.7886548340320587e-02 -6.4295299351215363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5641 -1.3286540284752846e-02</internalNodes>\n          <leafValues>\n            1.4123329520225525e-01 -6.1506468802690506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5642 7.3928399942815304e-03</internalNodes>\n          <leafValues>\n            -7.2719991207122803e-02 4.2179141193628311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5643 -4.7434169799089432e-02</internalNodes>\n          <leafValues>\n            3.2672271132469177e-01 -2.9001530259847641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5644 1.3546790182590485e-01</internalNodes>\n          <leafValues>\n            1.0393570177257061e-02 -4.5354479551315308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5645 -2.5216810405254364e-02</internalNodes>\n          <leafValues>\n            -1.9075979292392731e-01 4.1522741317749023e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5646 -4.9431398510932922e-02</internalNodes>\n          <leafValues>\n            -9.4192171096801758e-01 3.5473550669848919e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5647 -4.8375181853771210e-02</internalNodes>\n          <leafValues>\n            -8.3028668165206909e-01 7.2369067929685116e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5648 -1.4348509721457958e-02</internalNodes>\n          <leafValues>\n            -2.1860499680042267e-01 3.1486429274082184e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5649 -5.5373171344399452e-03</internalNodes>\n          <leafValues>\n            -2.1521030366420746e-01 4.4235888868570328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5650 2.1771800518035889e-01</internalNodes>\n          <leafValues>\n            -5.0501842051744461e-03 4.9025520682334900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5651 1.7441399395465851e-01</internalNodes>\n          <leafValues>\n            -9.7074145451188087e-03 7.4196231365203857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5652 8.8840499520301819e-02</internalNodes>\n          <leafValues>\n            -5.8005251921713352e-03 3.3403220772743225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5653 -3.8012791424989700e-02</internalNodes>\n          <leafValues>\n            5.0677591562271118e-01 -1.3809430412948132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5654 -6.3611388206481934e-02</internalNodes>\n          <leafValues>\n            -5.6696820259094238e-01 7.9266652464866638e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5655 9.8358482122421265e-02</internalNodes>\n          <leafValues>\n            3.4634899348020554e-02 -1.9651760160923004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5656 2.2929610684514046e-02</internalNodes>\n          <leafValues>\n            -4.4682640582323074e-02 6.0062419623136520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5657 -3.9763651788234711e-02</internalNodes>\n          <leafValues>\n            -2.8310349583625793e-01 2.6087069883942604e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5658 1.1215689778327942e-01</internalNodes>\n          <leafValues>\n            -4.3225709348917007e-02 1.5505640208721161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5659 -1.4957940578460693e-01</internalNodes>\n          <leafValues>\n            4.1476088762283325e-01 -2.5112669914960861e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5660 1.4239370357245207e-03</internalNodes>\n          <leafValues>\n            -2.2813330590724945e-01 2.2414619103074074e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5661 -1.1346139945089817e-02</internalNodes>\n          <leafValues>\n            -2.6083931326866150e-01 2.6456480845808983e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5662 -9.0518407523632050e-02</internalNodes>\n          <leafValues>\n            6.0067182779312134e-01 -1.2559159658849239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5663 3.6097481846809387e-02</internalNodes>\n          <leafValues>\n            1.9451009109616280e-02 -4.0998241305351257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5664 -2.5657469406723976e-02</internalNodes>\n          <leafValues>\n            2.3453080654144287e-01 -3.2354518771171570e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5665 -9.2462729662656784e-03</internalNodes>\n          <leafValues>\n            1.4458569884300232e-01 -5.7280141860246658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5666 6.1006739735603333e-02</internalNodes>\n          <leafValues>\n            1.9963319599628448e-01 -3.5018790513277054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5667 -2.2736669052392244e-03</internalNodes>\n          <leafValues>\n            -2.7180460095405579e-01 3.5324309021234512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5668 -1.1173350363969803e-01</internalNodes>\n          <leafValues>\n            2.6010888814926147e-01 -8.4183625876903534e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5669 1.4601589739322662e-01</internalNodes>\n          <leafValues>\n            -4.3707858771085739e-02 1.9343809783458710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5670 -3.9008598774671555e-02</internalNodes>\n          <leafValues>\n            -2.4021549522876740e-01 1.9324809312820435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5671 -3.2065149396657944e-02</internalNodes>\n          <leafValues>\n            -1.4616030454635620e-01 5.0410438328981400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5672 -3.9755292236804962e-03</internalNodes>\n          <leafValues>\n            8.6786061525344849e-02 -7.5101003050804138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5673 -2.2264609113335609e-02</internalNodes>\n          <leafValues>\n            -1.7820209264755249e-01 4.2221881449222565e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5674 -6.0096651315689087e-02</internalNodes>\n          <leafValues>\n            3.3062270283699036e-01 -1.3347219675779343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5675 -8.3170406520366669e-02</internalNodes>\n          <leafValues>\n            6.9863271713256836e-01 -1.1014309711754322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5676 -7.7182397246360779e-02</internalNodes>\n          <leafValues>\n            -2.5630331039428711e-01 8.8049499318003654e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5677 6.8902172148227692e-02</internalNodes>\n          <leafValues>\n            1.0996440425515175e-02 -6.3520067930221558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5678 -5.0353281199932098e-02</internalNodes>\n          <leafValues>\n            2.2927890717983246e-01 -3.2763719558715820e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5679 2.4320879019796848e-03</internalNodes>\n          <leafValues>\n            -1.3213059306144714e-01 7.1088582277297974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5680 -1.4196460135281086e-02</internalNodes>\n          <leafValues>\n            7.1845069527626038e-02 -4.5263659209012985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5681 -4.5774779282510281e-03</internalNodes>\n          <leafValues>\n            -2.5832280516624451e-01 2.9419040307402611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5682 -1.4008210273459554e-03</internalNodes>\n          <leafValues>\n            4.4636521488428116e-02 -1.2310150265693665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5683 3.5062711685895920e-02</internalNodes>\n          <leafValues>\n            -1.8722500652074814e-02 4.5533668994903564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5684 3.9364919066429138e-02</internalNodes>\n          <leafValues>\n            -3.8776830770075321e-03 4.8229390382766724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5685 2.9430290684103966e-02</internalNodes>\n          <leafValues>\n            -5.6632690131664276e-02 1.3604450225830078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5686 7.9320840537548065e-02</internalNodes>\n          <leafValues>\n            -4.0827351622283459e-03 9.9998551607131958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5687 4.2696330696344376e-02</internalNodes>\n          <leafValues>\n            2.3583339527249336e-02 -3.7798878550529480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5688 2.5937719270586967e-02</internalNodes>\n          <leafValues>\n            5.0283338874578476e-02 -6.7249342799186707e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5689 2.7053659781813622e-02</internalNodes>\n          <leafValues>\n            1.0406839847564697e-01 -1.0069710016250610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5690 3.0322301387786865e-01</internalNodes>\n          <leafValues>\n            -5.1615409553050995e-02 1.2398669868707657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5691 7.4373193085193634e-02</internalNodes>\n          <leafValues>\n            -2.9979649931192398e-02 2.5944980978965759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5692 4.6059768646955490e-02</internalNodes>\n          <leafValues>\n            6.1678960919380188e-03 -7.0887911319732666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5693 3.6883510649204254e-02</internalNodes>\n          <leafValues>\n            1.5985019505023956e-02 -4.4436019659042358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5694 1.3493379950523376e-01</internalNodes>\n          <leafValues>\n            8.8313389569520950e-03 -7.3426938056945801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5695 1.4799199998378754e-01</internalNodes>\n          <leafValues>\n            6.9719799794256687e-03 -8.2078450918197632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5696 3.9690379053354263e-02</internalNodes>\n          <leafValues>\n            -1.8247799947857857e-02 2.6955920457839966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5697 -5.3511280566453934e-02</internalNodes>\n          <leafValues>\n            2.0000250637531281e-01 -3.9136700332164764e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5698 6.3795700669288635e-02</internalNodes>\n          <leafValues>\n            1.1616130359470844e-02 -2.5315120816230774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5699 -8.1078916788101196e-02</internalNodes>\n          <leafValues>\n            -7.7582788467407227e-01 9.7084697335958481e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5700 -4.8272658139467239e-02</internalNodes>\n          <leafValues>\n            -3.0734309554100037e-01 1.1298010125756264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5701 4.3912570923566818e-02</internalNodes>\n          <leafValues>\n            -3.9403300732374191e-02 1.9216950237751007e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>394</maxWeakCount>\n      <stageThreshold>-1.2940989732742310e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 5702 1.9188739359378815e-02</internalNodes>\n          <leafValues>\n            -2.1150399744510651e-01 1.3286529481410980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5703 -8.1222038716077805e-03</internalNodes>\n          <leafValues>\n            9.2491082847118378e-02 -1.7585119605064392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5704 1.5851219650357962e-03</internalNodes>\n          <leafValues>\n            -2.8565698862075806e-01 6.6710568964481354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5705 -4.3140850029885769e-03</internalNodes>\n          <leafValues>\n            -1.3885229825973511e-01 5.2694689482450485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5706 -1.7131429631263018e-03</internalNodes>\n          <leafValues>\n            1.3135610520839691e-01 -1.3149109482765198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5707 6.8447366356849670e-02</internalNodes>\n          <leafValues>\n            9.3052154406905174e-03 -2.5063261389732361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5708 -2.4445978924632072e-03</internalNodes>\n          <leafValues>\n            -1.7205530405044556e-01 9.8322823643684387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5709 1.0310600046068430e-03</internalNodes>\n          <leafValues>\n            2.3039160296320915e-02 -2.7527621388435364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5710 7.4603251414373517e-04</internalNodes>\n          <leafValues>\n            -2.3276780545711517e-01 5.2693009376525879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5711 -6.6399492789059877e-04</internalNodes>\n          <leafValues>\n            6.8990781903266907e-02 -8.4687709808349609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5712 -4.0997468749992549e-04</internalNodes>\n          <leafValues>\n            1.0501380264759064e-01 -1.0819009691476822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5713 -1.8094549886882305e-03</internalNodes>\n          <leafValues>\n            -1.8178839981555939e-01 4.4184140861034393e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5714 9.3385757645592093e-04</internalNodes>\n          <leafValues>\n            -1.4622689783573151e-01 7.2726443409919739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5715 -3.8197741378098726e-04</internalNodes>\n          <leafValues>\n            2.4009939283132553e-02 -1.7295800149440765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5716 -1.4950280310586095e-03</internalNodes>\n          <leafValues>\n            -1.9403380155563354e-01 4.8807919025421143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5717 -1.0159100405871868e-02</internalNodes>\n          <leafValues>\n            1.9173899292945862e-01 -5.2749071270227432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5718 5.9903519286308438e-05</internalNodes>\n          <leafValues>\n            -1.0791549831628799e-01 9.0988166630268097e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5719 -3.1967550516128540e-02</internalNodes>\n          <leafValues>\n            4.1109889745712280e-01 -2.2650640457868576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5720 1.4343270100653172e-02</internalNodes>\n          <leafValues>\n            2.4315539747476578e-02 -4.2680150270462036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5721 1.1039529927074909e-02</internalNodes>\n          <leafValues>\n            -6.2717013061046600e-02 1.1330530047416687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5722 -8.4228850901126862e-03</internalNodes>\n          <leafValues>\n            -2.1369309723377228e-01 4.2059201747179031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5723 -2.0549839362502098e-02</internalNodes>\n          <leafValues>\n            1.5161630511283875e-01 -2.4594139307737350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5724 -6.5411031246185303e-03</internalNodes>\n          <leafValues>\n            1.4883629977703094e-01 -6.1179339885711670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5725 -1.3324400410056114e-02</internalNodes>\n          <leafValues>\n            -2.0791970193386078e-01 4.8333309590816498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5726 7.0111267268657684e-02</internalNodes>\n          <leafValues>\n            -2.6863219216465950e-02 3.6322259902954102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5727 -2.6973750209435821e-04</internalNodes>\n          <leafValues>\n            6.0876660048961639e-02 -1.1272370070219040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5728 -1.3509000418707728e-03</internalNodes>\n          <leafValues>\n            -1.8552079796791077e-01 5.2154958248138428e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5729 -2.8083190321922302e-02</internalNodes>\n          <leafValues>\n            3.5111880302429199e-01 -2.3596329614520073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5730 -1.0003290139138699e-02</internalNodes>\n          <leafValues>\n            -2.9058480262756348e-01 3.2125689089298248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5731 -1.6111029544845223e-03</internalNodes>\n          <leafValues>\n            9.8113670945167542e-02 -5.2203711122274399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5732 -1.8411900848150253e-02</internalNodes>\n          <leafValues>\n            -1.8082669377326965e-01 5.4536700248718262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5733 -7.1738816797733307e-02</internalNodes>\n          <leafValues>\n            -7.6654988527297974e-01 3.3518690615892410e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5734 -2.7943260502070189e-03</internalNodes>\n          <leafValues>\n            1.5871369838714600e-01 -6.4271800220012665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5735 -1.6874749958515167e-01</internalNodes>\n          <leafValues>\n            -6.9956189393997192e-01 4.8861699178814888e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5736 -1.2672400334849954e-03</internalNodes>\n          <leafValues>\n            3.1616039574146271e-02 -2.4953269958496094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5737 2.0807750523090363e-02</internalNodes>\n          <leafValues>\n            1.7053410410881042e-02 -2.4331410229206085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5738 -1.5869849594309926e-03</internalNodes>\n          <leafValues>\n            9.3171089887619019e-02 -8.1361927092075348e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5739 -1.0014690458774567e-02</internalNodes>\n          <leafValues>\n            -2.7789619565010071e-01 2.6569239795207977e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5740 -5.7948171161115170e-03</internalNodes>\n          <leafValues>\n            -2.2287739813327789e-01 3.5975661128759384e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5741 2.7189950924366713e-03</internalNodes>\n          <leafValues>\n            -9.0631909668445587e-02 5.6820400059223175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5742 3.8845159113407135e-02</internalNodes>\n          <leafValues>\n            1.2280859984457493e-02 -5.8521348237991333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5743 -1.4158680103719234e-02</internalNodes>\n          <leafValues>\n            1.8153870105743408e-01 -3.1109429895877838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5744 -1.8278600275516510e-01</internalNodes>\n          <leafValues>\n            -9.0013808012008667e-01 7.6544750481843948e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5745 2.7588419616222382e-02</internalNodes>\n          <leafValues>\n            -1.2460039928555489e-02 2.0069369673728943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5746 -1.4784430153667927e-02</internalNodes>\n          <leafValues>\n            -8.9910492300987244e-02 8.1648677587509155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5747 1.1625719815492630e-01</internalNodes>\n          <leafValues>\n            2.3692469112575054e-03 -9.9998068809509277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5748 3.5341090988367796e-03</internalNodes>\n          <leafValues>\n            -6.1760541051626205e-02 1.3490639626979828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5749 5.1878788508474827e-03</internalNodes>\n          <leafValues>\n            1.8745860084891319e-02 -1.7449170351028442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5750 7.9457357525825500e-02</internalNodes>\n          <leafValues>\n            -2.3402990773320198e-02 3.3502200245857239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5751 2.7684379369020462e-02</internalNodes>\n          <leafValues>\n            2.3663910105824471e-02 -3.3256360888481140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5752 -4.4806320220232010e-03</internalNodes>\n          <leafValues>\n            -1.4658750593662262e-01 4.7376811504364014e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5753 5.6939688511192799e-03</internalNodes>\n          <leafValues>\n            -5.6776121258735657e-02 6.7580856382846832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5754 7.7299480326473713e-03</internalNodes>\n          <leafValues>\n            -3.1156649813055992e-02 2.3102590441703796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5755 3.9786100387573242e-03</internalNodes>\n          <leafValues>\n            -5.6882441043853760e-02 1.3271529972553253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5756 -1.1275880038738251e-02</internalNodes>\n          <leafValues>\n            -2.0938649773597717e-01 3.5291459411382675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5757 -2.4308220017701387e-03</internalNodes>\n          <leafValues>\n            -2.0176360011100769e-01 3.4513931721448898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5758 5.7369591668248177e-03</internalNodes>\n          <leafValues>\n            -5.5607158690690994e-02 1.1532089859247208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5759 4.6170800924301147e-03</internalNodes>\n          <leafValues>\n            -5.6083500385284424e-02 8.1762917339801788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5760 -4.7089671716094017e-03</internalNodes>\n          <leafValues>\n            -1.3351219892501831e-01 5.6296080350875854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5761 -3.2688070088624954e-02</internalNodes>\n          <leafValues>\n            2.7922388911247253e-01 -1.0867659933865070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5762 8.8686197996139526e-02</internalNodes>\n          <leafValues>\n            1.8268220126628876e-02 -3.5637390613555908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5763 4.5751677826046944e-03</internalNodes>\n          <leafValues>\n            -5.1558461040258408e-02 6.3948810100555420e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5764 4.9765850417315960e-03</internalNodes>\n          <leafValues>\n            -5.4684590548276901e-02 1.1907110363245010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5765 -6.4881290309131145e-03</internalNodes>\n          <leafValues>\n            -9.9121123552322388e-02 2.6508849114179611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5766 2.4523450993001461e-03</internalNodes>\n          <leafValues>\n            -9.5045946538448334e-02 6.6802926361560822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5767 7.0354789495468140e-03</internalNodes>\n          <leafValues>\n            1.0705590248107910e-01 -6.2395099550485611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5768 4.2746789753437042e-02</internalNodes>\n          <leafValues>\n            -1.6092179343104362e-02 4.3256199359893799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5769 -4.5301730278879404e-04</internalNodes>\n          <leafValues>\n            3.6420568823814392e-02 -9.9322892725467682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5770 -5.2631930448114872e-03</internalNodes>\n          <leafValues>\n            -1.1416749656200409e-01 5.7260219007730484e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5771 1.0581909446045756e-03</internalNodes>\n          <leafValues>\n            3.3220488578081131e-02 -1.1831220239400864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5772 2.5088949128985405e-02</internalNodes>\n          <leafValues>\n            -6.0655020177364349e-02 1.2601740658283234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5773 2.4252159893512726e-01</internalNodes>\n          <leafValues>\n            2.2060840856283903e-03 -1.0000120401382446e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5774 -1.4393079280853271e-01</internalNodes>\n          <leafValues>\n            3.7419798970222473e-01 -2.2252110764384270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5775 -6.0972762294113636e-03</internalNodes>\n          <leafValues>\n            -1.1038099974393845e-01 4.5996960252523422e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5776 6.1375470831990242e-03</internalNodes>\n          <leafValues>\n            3.8307808339595795e-02 -1.8086770176887512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5777 -3.6617079749703407e-03</internalNodes>\n          <leafValues>\n            3.8439918309450150e-02 -6.2540791928768158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5778 -1.5854850411415100e-01</internalNodes>\n          <leafValues>\n            3.4469398856163025e-01 -1.9837500527501106e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5779 6.7219287157058716e-02</internalNodes>\n          <leafValues>\n            9.5165139064192772e-03 -5.0206458568572998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5780 2.2499680053442717e-03</internalNodes>\n          <leafValues>\n            -1.3063929975032806e-01 6.4832933247089386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5781 8.4626786410808563e-02</internalNodes>\n          <leafValues>\n            5.9339799918234348e-03 -4.1516590118408203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5782 -9.5411221263930202e-04</internalNodes>\n          <leafValues>\n            -9.3790747225284576e-02 7.5486607849597931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5783 -7.6813949272036552e-03</internalNodes>\n          <leafValues>\n            -1.4821960031986237e-01 2.9010580852627754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5784 -2.5593319907784462e-02</internalNodes>\n          <leafValues>\n            1.4859579503536224e-01 -4.7195930033922195e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5785 2.1508369594812393e-02</internalNodes>\n          <leafValues>\n            2.3782620206475258e-02 -9.6659287810325623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5786 3.4463100135326385e-02</internalNodes>\n          <leafValues>\n            -3.7410069257020950e-02 2.2015300393104553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5787 -3.7860300391912460e-02</internalNodes>\n          <leafValues>\n            -5.0047469139099121e-01 1.4059869572520256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5788 1.2028450146317482e-03</internalNodes>\n          <leafValues>\n            -6.5087057650089264e-02 8.9583486318588257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5789 1.6753520816564560e-02</internalNodes>\n          <leafValues>\n            4.9179811030626297e-03 -4.3030908703804016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5790 1.6640779795125127e-03</internalNodes>\n          <leafValues>\n            4.0807429701089859e-02 -1.4469960331916809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5791 3.4473428968340158e-03</internalNodes>\n          <leafValues>\n            -3.9910178631544113e-02 1.5272960066795349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5792 8.9918142184615135e-03</internalNodes>\n          <leafValues>\n            7.1071267127990723e-02 -8.6169913411140442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5793 8.3185202674940228e-04</internalNodes>\n          <leafValues>\n            -2.5739189982414246e-01 1.7941089347004890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5794 -6.8142730742692947e-03</internalNodes>\n          <leafValues>\n            1.3823160529136658e-01 -5.3994540125131607e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5795 2.9746210202574730e-03</internalNodes>\n          <leafValues>\n            -4.1550260037183762e-02 3.9839770644903183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5796 2.5836620479822159e-03</internalNodes>\n          <leafValues>\n            -7.0656493306159973e-02 9.5045506954193115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5797 2.7143809711560607e-04</internalNodes>\n          <leafValues>\n            5.8070071041584015e-02 -1.2781760096549988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5798 3.5418298840522766e-01</internalNodes>\n          <leafValues>\n            5.4909070022404194e-03 -9.7960698604583740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5799 2.5318650528788567e-02</internalNodes>\n          <leafValues>\n            -1.4410969801247120e-02 2.6219129562377930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5800 -2.2658439411316067e-04</internalNodes>\n          <leafValues>\n            5.2997849881649017e-02 -1.1629349738359451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5801 6.8859090097248554e-03</internalNodes>\n          <leafValues>\n            1.6437310725450516e-02 -2.0349490642547607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5802 1.1607459746301174e-02</internalNodes>\n          <leafValues>\n            -3.6651011556386948e-02 1.5184010565280914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5803 -4.8253959976136684e-03</internalNodes>\n          <leafValues>\n            -2.3476150631904602e-01 3.7914011627435684e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5804 2.5656020734459162e-03</internalNodes>\n          <leafValues>\n            3.5185638815164566e-02 -1.8540710210800171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5805 1.2601399421691895e-01</internalNodes>\n          <leafValues>\n            -9.8542850464582443e-03 2.5520691275596619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5806 2.7164958883076906e-03</internalNodes>\n          <leafValues>\n            -2.1748440340161324e-02 2.5467529892921448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5807 3.2356029748916626e-01</internalNodes>\n          <leafValues>\n            8.8657345622777939e-03 -7.0383572578430176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5808 -8.4016058826819062e-04</internalNodes>\n          <leafValues>\n            3.6831360310316086e-02 -1.4953260123729706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5809 3.3291990403085947e-03</internalNodes>\n          <leafValues>\n            4.8185840249061584e-02 -1.2290470302104950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5810 2.1130539476871490e-01</internalNodes>\n          <leafValues>\n            6.5245870500802994e-03 -8.8293862342834473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5811 5.0388509407639503e-03</internalNodes>\n          <leafValues>\n            -6.7079946398735046e-02 3.7849709391593933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5812 -2.7862399816513062e-02</internalNodes>\n          <leafValues>\n            3.3469489216804504e-01 -1.8816500902175903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5813 3.8636629469692707e-03</internalNodes>\n          <leafValues>\n            4.3644730001688004e-02 -1.7481489479541779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5814 1.0480300337076187e-01</internalNodes>\n          <leafValues>\n            -1.5737529844045639e-02 4.2094239592552185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5815 -3.4130848944187164e-03</internalNodes>\n          <leafValues>\n            -1.0835570096969604e-01 4.3717790395021439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5816 -4.6396970748901367e-02</internalNodes>\n          <leafValues>\n            -7.5680077075958252e-01 8.6701400578022003e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5817 5.3708078339695930e-03</internalNodes>\n          <leafValues>\n            -4.1797801852226257e-02 1.4824719727039337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5818 -6.1126388609409332e-03</internalNodes>\n          <leafValues>\n            1.8673719465732574e-01 -4.3387491255998611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5819 4.2509321123361588e-02</internalNodes>\n          <leafValues>\n            1.1690679937601089e-02 -4.3740659952163696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5820 1.0473020374774933e-02</internalNodes>\n          <leafValues>\n            4.3143630027770996e-02 -1.5654399991035461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5821 -4.7223959118127823e-02</internalNodes>\n          <leafValues>\n            -7.4483537673950195e-01 3.4918629098683596e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5822 5.3090360015630722e-02</internalNodes>\n          <leafValues>\n            1.0408150032162666e-02 -5.3499448299407959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5823 -7.0432561915367842e-04</internalNodes>\n          <leafValues>\n            3.3384170383214951e-02 -7.3706030845642090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5824 7.5942431576550007e-03</internalNodes>\n          <leafValues>\n            -2.9107049107551575e-02 1.9468860328197479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5825 2.2676989436149597e-02</internalNodes>\n          <leafValues>\n            3.3803820610046387e-02 -2.7627611160278320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5826 6.6533521749079227e-03</internalNodes>\n          <leafValues>\n            -2.6578240096569061e-02 2.4283319711685181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5827 3.7712270859628916e-03</internalNodes>\n          <leafValues>\n            2.6554299518465996e-02 -6.4952917397022247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5828 -2.0740530453622341e-03</internalNodes>\n          <leafValues>\n            -1.7968970537185669e-01 3.1532160937786102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5829 -1.5632519498467445e-03</internalNodes>\n          <leafValues>\n            5.3109679371118546e-02 -8.7415628135204315e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5830 1.2540889903903008e-02</internalNodes>\n          <leafValues>\n            -3.4136459231376648e-02 2.2097539901733398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5831 -3.2660199794918299e-03</internalNodes>\n          <leafValues>\n            -5.5261608213186264e-02 3.2669559121131897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5832 -8.2185603678226471e-03</internalNodes>\n          <leafValues>\n            -1.4478379487991333e-01 5.5743928998708725e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5833 -5.5811040103435516e-02</internalNodes>\n          <leafValues>\n            1.7237940430641174e-01 -1.4456519857048988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5834 -1.4723159372806549e-01</internalNodes>\n          <leafValues>\n            -8.1392312049865723e-01 7.4356291443109512e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5835 -5.8468529023230076e-03</internalNodes>\n          <leafValues>\n            -6.9043442606925964e-02 1.9456790760159492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5836 1.9462220370769501e-02</internalNodes>\n          <leafValues>\n            -3.5472229123115540e-02 1.6666300594806671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5837 5.8353468775749207e-02</internalNodes>\n          <leafValues>\n            3.0551329255104065e-03 -3.9289128780364990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5838 4.3785829097032547e-02</internalNodes>\n          <leafValues>\n            1.3574630022048950e-02 -4.6152359247207642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5839 -5.1904350519180298e-02</internalNodes>\n          <leafValues>\n            6.3802438974380493e-01 -9.6664745360612869e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5840 -7.7811058145016432e-04</internalNodes>\n          <leafValues>\n            -9.9303223192691803e-02 5.6094601750373840e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5841 4.9657518975436687e-03</internalNodes>\n          <leafValues>\n            4.1419368237257004e-02 -1.1274819821119308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5842 -5.4516079835593700e-03</internalNodes>\n          <leafValues>\n            1.7399060726165771e-01 -4.1147731244564056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5843 5.0428751856088638e-03</internalNodes>\n          <leafValues>\n            -4.1255220770835876e-02 1.3794229924678802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5844 -1.6985220136120915e-03</internalNodes>\n          <leafValues>\n            -2.2874790430068970e-01 2.5274980813264847e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5845 8.2764238119125366e-02</internalNodes>\n          <leafValues>\n            3.3066510222852230e-03 -6.9113439321517944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5846 3.9285849779844284e-03</internalNodes>\n          <leafValues>\n            -7.9043358564376831e-02 6.6218852996826172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5847 -3.0601240694522858e-02</internalNodes>\n          <leafValues>\n            -2.6517450809478760e-01 1.6467850655317307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5848 -1.9941160455346107e-02</internalNodes>\n          <leafValues>\n            1.5431809425354004e-01 -3.6100689321756363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5849 8.0520063638687134e-02</internalNodes>\n          <leafValues>\n            1.7015919089317322e-02 -3.3448880910873413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5850 7.0323847234249115e-02</internalNodes>\n          <leafValues>\n            1.7122440040111542e-02 -3.3302140235900879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5851 -5.2850939333438873e-02</internalNodes>\n          <leafValues>\n            6.2421400099992752e-02 -1.4690199866890907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5852 -7.1594159817323089e-04</internalNodes>\n          <leafValues>\n            -1.1335150152444839e-01 5.2260790020227432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5853 2.1469970047473907e-01</internalNodes>\n          <leafValues>\n            9.9299731664359570e-04 -9.9997580051422119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5854 8.7042592465877533e-02</internalNodes>\n          <leafValues>\n            -1.2329760007560253e-02 5.0260668992996216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5855 -5.8731262106448412e-04</internalNodes>\n          <leafValues>\n            -9.9346466362476349e-02 5.1705610007047653e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5856 -4.4215220957994461e-02</internalNodes>\n          <leafValues>\n            -3.9368900656700134e-01 1.3920850120484829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5857 -8.7676227092742920e-02</internalNodes>\n          <leafValues>\n            3.0157440900802612e-01 -6.8702381104230881e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5858 -4.8453990370035172e-02</internalNodes>\n          <leafValues>\n            2.5477871298789978e-01 -2.2457750514149666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5859 -2.1567570511251688e-03</internalNodes>\n          <leafValues>\n            -1.3562899827957153e-01 3.1725399196147919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5860 3.9050900377333164e-03</internalNodes>\n          <leafValues>\n            4.9100890755653381e-02 -1.1861059814691544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5861 -3.9808028377592564e-03</internalNodes>\n          <leafValues>\n            4.8333909362554550e-02 -5.5897079408168793e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5862 2.9744929634034634e-03</internalNodes>\n          <leafValues>\n            -6.4802452921867371e-02 9.3583501875400543e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5863 2.5875229388475418e-02</internalNodes>\n          <leafValues>\n            1.8487609922885895e-02 -3.3436349034309387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5864 -1.9373580580577254e-03</internalNodes>\n          <leafValues>\n            2.2000649571418762e-01 -2.5404980406165123e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5865 -2.0171629264950752e-02</internalNodes>\n          <leafValues>\n            -7.8228309750556946e-02 4.5462790876626968e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5866 -2.6088140904903412e-02</internalNodes>\n          <leafValues>\n            1.7637069523334503e-01 -4.5097298920154572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5867 -2.6868300512433052e-02</internalNodes>\n          <leafValues>\n            -3.2656419277191162e-01 1.7994230613112450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5868 -7.0211151614785194e-04</internalNodes>\n          <leafValues>\n            3.9671998471021652e-02 -1.4533540606498718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5869 8.3507681265473366e-03</internalNodes>\n          <leafValues>\n            -2.3051729425787926e-02 1.8850760161876678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5870 4.6823569573462009e-03</internalNodes>\n          <leafValues>\n            2.9996560886502266e-02 -2.0701029896736145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5871 3.3109660726040602e-03</internalNodes>\n          <leafValues>\n            5.6536730378866196e-02 -1.6835589706897736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5872 7.6425541192293167e-03</internalNodes>\n          <leafValues>\n            -4.1423950344324112e-02 1.2557519972324371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5873 -2.4713110178709030e-03</internalNodes>\n          <leafValues>\n            7.2156153619289398e-02 -1.0767730325460434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5874 -9.9495360627770424e-03</internalNodes>\n          <leafValues>\n            -1.8187619745731354e-01 3.3567231148481369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5875 1.9820800516754389e-03</internalNodes>\n          <leafValues>\n            -5.6488718837499619e-02 1.0741490125656128e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5876 2.3254439234733582e-02</internalNodes>\n          <leafValues>\n            -1.6543349251151085e-02 3.6466678977012634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5877 -5.4177921265363693e-02</internalNodes>\n          <leafValues>\n            -1. 3.3418419770896435e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5878 6.1567849479615688e-04</internalNodes>\n          <leafValues>\n            4.0159329771995544e-02 -1.6460220515727997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5879 -4.2699510231614113e-03</internalNodes>\n          <leafValues>\n            -5.6978620588779449e-02 4.4480901211500168e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5880 1.9749389030039310e-03</internalNodes>\n          <leafValues>\n            5.9283681213855743e-02 -1.0791260004043579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5881 -5.8583128266036510e-03</internalNodes>\n          <leafValues>\n            1.3734050095081329e-01 -3.4231521189212799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5882 -7.2995189111679792e-04</internalNodes>\n          <leafValues>\n            -1.0075060278177261e-01 5.4733160883188248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5883 -2.9930740594863892e-02</internalNodes>\n          <leafValues>\n            6.3882559537887573e-02 -4.1027020663022995e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5884 -5.1738750189542770e-02</internalNodes>\n          <leafValues>\n            -7.2713458538055420e-01 7.4993381276726723e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5885 2.4021189659833908e-02</internalNodes>\n          <leafValues>\n            7.8491801396012306e-03 -5.5794471502304077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5886 -3.7574321031570435e-03</internalNodes>\n          <leafValues>\n            -1.6086879372596741e-01 3.1015990301966667e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5887 -6.2635682523250580e-02</internalNodes>\n          <leafValues>\n            9.0577863156795502e-02 -2.9033770784735680e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5888 1.9363429397344589e-02</internalNodes>\n          <leafValues>\n            -4.9920588731765747e-02 1.2835779786109924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5889 -3.5072889178991318e-02</internalNodes>\n          <leafValues>\n            2.1391840279102325e-01 -8.8168960064649582e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5890 -1.3243310153484344e-02</internalNodes>\n          <leafValues>\n            2.3349699378013611e-01 -2.3088019341230392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5891 -3.1290829181671143e-02</internalNodes>\n          <leafValues>\n            -6.9495099782943726e-01 9.3020889908075333e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5892 7.2391419671475887e-03</internalNodes>\n          <leafValues>\n            2.8485849499702454e-02 -1.8310770392417908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5893 6.6785318776965141e-03</internalNodes>\n          <leafValues>\n            -4.9132950603961945e-02 5.4181691259145737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5894 -3.6825571209192276e-02</internalNodes>\n          <leafValues>\n            3.3120208978652954e-01 -2.1359929814934731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5895 -4.5507341623306274e-02</internalNodes>\n          <leafValues>\n            -1.2893490493297577e-01 4.9545988440513611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5896 7.7639957889914513e-03</internalNodes>\n          <leafValues>\n            -3.6255620419979095e-02 1.5321409702301025e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5897 6.0417611151933670e-02</internalNodes>\n          <leafValues>\n            4.5740022324025631e-03 -6.7541092634201050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5898 2.4624960497021675e-03</internalNodes>\n          <leafValues>\n            5.3674161434173584e-02 -1.1326540261507034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5899 7.3594506829977036e-05</internalNodes>\n          <leafValues>\n            -3.5648930817842484e-02 2.5458969175815582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5900 -4.0958370082080364e-03</internalNodes>\n          <leafValues>\n            1.5562909841537476e-01 -3.9390601217746735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5901 2.8689370083156973e-05</internalNodes>\n          <leafValues>\n            -8.4823302924633026e-02 3.8254238665103912e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5902 -4.6220528893172741e-03</internalNodes>\n          <leafValues>\n            -1.8994529545307159e-01 3.3508758991956711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5903 -8.5343196988105774e-03</internalNodes>\n          <leafValues>\n            1.1212539672851562e-01 -3.3968489617109299e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5904 -5.8803848922252655e-02</internalNodes>\n          <leafValues>\n            -5.1244312524795532e-01 1.0789549909532070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5905 6.0719929635524750e-02</internalNodes>\n          <leafValues>\n            -1.2555030174553394e-02 2.2509759664535522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5906 1.1038020020350814e-03</internalNodes>\n          <leafValues>\n            -9.6294492483139038e-02 5.6727480143308640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5907 -3.8484560791403055e-03</internalNodes>\n          <leafValues>\n            4.0573459118604660e-02 -2.5326859205961227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5908 -1.0771050117909908e-02</internalNodes>\n          <leafValues>\n            8.8735632598400116e-02 -5.5628679692745209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5909 1.2016809545457363e-02</internalNodes>\n          <leafValues>\n            2.3566279560327530e-02 -2.4590580165386200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5910 -1.1656560236588120e-03</internalNodes>\n          <leafValues>\n            -3.7417300045490265e-02 1.6503289341926575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5911 3.2137628644704819e-02</internalNodes>\n          <leafValues>\n            1.4245970174670219e-02 -2.6480850577354431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5912 2.3331670090556145e-02</internalNodes>\n          <leafValues>\n            -3.5288721323013306e-02 1.8447829782962799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5913 -1.2685320340096951e-02</internalNodes>\n          <leafValues>\n            -1.1757309734821320e-01 1.6436910256743431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5914 7.3903938755393028e-05</internalNodes>\n          <leafValues>\n            -1.0271479934453964e-01 7.4301436543464661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5915 -1.0925470292568207e-01</internalNodes>\n          <leafValues>\n            -8.3165317773818970e-01 5.6438110768795013e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5916 -1.3324350118637085e-01</internalNodes>\n          <leafValues>\n            7.7729821205139160e-01 -8.3403270691633224e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5917 8.9381448924541473e-04</internalNodes>\n          <leafValues>\n            -5.9524301439523697e-02 4.1173089295625687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5918 1.0318649932742119e-02</internalNodes>\n          <leafValues>\n            1.5926430001854897e-02 -3.1637790799140930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5919 -5.2297548390924931e-03</internalNodes>\n          <leafValues>\n            -7.1166560053825378e-02 3.3489290624856949e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5920 1.6409620642662048e-02</internalNodes>\n          <leafValues>\n            -2.6454120874404907e-02 1.9589969515800476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5921 1.4068709686398506e-02</internalNodes>\n          <leafValues>\n            -3.9364140480756760e-02 1.3977420330047607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5922 6.6486410796642303e-03</internalNodes>\n          <leafValues>\n            6.4070828258991241e-02 -1.0493399947881699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5923 -1.8030619248747826e-02</internalNodes>\n          <leafValues>\n            8.3942912518978119e-02 -1.3399159535765648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5924 -4.4034369289875031e-02</internalNodes>\n          <leafValues>\n            -5.5825459957122803e-01 9.7633162513375282e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5925 -8.0966893583536148e-03</internalNodes>\n          <leafValues>\n            -2.0489789545536041e-01 2.6520200073719025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5926 5.0180461257696152e-03</internalNodes>\n          <leafValues>\n            -1.1661209911108017e-01 4.5791670680046082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5927 -1.7064629122614861e-02</internalNodes>\n          <leafValues>\n            2.6282730698585510e-01 -2.0390639081597328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5928 7.1850173175334930e-02</internalNodes>\n          <leafValues>\n            -6.9503681734204292e-03 6.7032539844512939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5929 -5.6914370507001877e-02</internalNodes>\n          <leafValues>\n            -1.3477900624275208e-01 1.8399080261588097e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5930 -3.2365729566663504e-03</internalNodes>\n          <leafValues>\n            6.9673851132392883e-02 -7.2314530611038208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5931 4.1818909347057343e-02</internalNodes>\n          <leafValues>\n            1.1151459999382496e-02 -5.1680111885070801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5932 -6.1106588691473007e-03</internalNodes>\n          <leafValues>\n            -1.3163940608501434e-01 4.3796509504318237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5933 -3.5560909658670425e-02</internalNodes>\n          <leafValues>\n            6.8005502223968506e-02 -3.6331020295619965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5934 6.8789169192314148e-02</internalNodes>\n          <leafValues>\n            1.4698959887027740e-02 -3.8212299346923828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5935 -7.8313373029232025e-02</internalNodes>\n          <leafValues>\n            2.0296069979667664e-01 -8.6810020729899406e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5936 3.9626220241189003e-03</internalNodes>\n          <leafValues>\n            -3.5797890275716782e-02 1.3905510306358337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5937 -3.3874038606882095e-02</internalNodes>\n          <leafValues>\n            -2.2253429889678955e-01 7.5455638580024242e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5938 -6.4755856990814209e-02</internalNodes>\n          <leafValues>\n            4.7521549463272095e-01 -1.0970680043101311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5939 2.6647940278053284e-02</internalNodes>\n          <leafValues>\n            1.5445309691131115e-02 -2.6785778999328613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5940 -3.0731109902262688e-02</internalNodes>\n          <leafValues>\n            -4.7668689489364624e-01 9.6429884433746338e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5941 -2.4022700265049934e-02</internalNodes>\n          <leafValues>\n            -1.0633960366249084e-01 1.2849040329456329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5942 -1.3036349555477500e-03</internalNodes>\n          <leafValues>\n            7.3524177074432373e-02 -6.8074919283390045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5943 -9.8344050347805023e-03</internalNodes>\n          <leafValues>\n            -1.1843550205230713e-01 4.2866699397563934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5944 8.7102197110652924e-02</internalNodes>\n          <leafValues>\n            -4.0088258683681488e-02 1.7804540693759918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5945 2.0411569625139236e-02</internalNodes>\n          <leafValues>\n            1.6849989071488380e-02 -3.8953658938407898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5946 9.5875263214111328e-02</internalNodes>\n          <leafValues>\n            5.9905550442636013e-03 -8.1525659561157227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5947 6.4893220551311970e-03</internalNodes>\n          <leafValues>\n            -2.4039229378104210e-02 5.3871169686317444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5948 -9.6279237186536193e-04</internalNodes>\n          <leafValues>\n            9.4299189746379852e-02 -6.4436018466949463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5949 -3.7659960798919201e-04</internalNodes>\n          <leafValues>\n            -6.2296878546476364e-02 4.1251849383115768e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5950 6.5272641368210316e-03</internalNodes>\n          <leafValues>\n            5.1325131207704544e-02 -1.3037790358066559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5951 2.1429110318422318e-02</internalNodes>\n          <leafValues>\n            -1.1989659629762173e-02 2.6280459761619568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5952 -5.0938720814883709e-03</internalNodes>\n          <leafValues>\n            6.3418947160243988e-02 -9.0566337108612061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5953 -2.5309680495411158e-03</internalNodes>\n          <leafValues>\n            6.0297761112451553e-02 -2.5049470365047455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5954 -1.5915350522845984e-03</internalNodes>\n          <leafValues>\n            -1.2171190232038498e-01 3.7737991660833359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5955 -3.4030709415674210e-02</internalNodes>\n          <leafValues>\n            4.6413430571556091e-01 -3.5409750416874886e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5956 5.1074200309813023e-03</internalNodes>\n          <leafValues>\n            3.9823830127716064e-02 -1.2645539641380310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5957 -9.6449116244912148e-03</internalNodes>\n          <leafValues>\n            3.3464258909225464e-01 -6.6040740348398685e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5958 1.1422860436141491e-02</internalNodes>\n          <leafValues>\n            -3.6080420017242432e-02 1.3714550435543060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5959 -5.1042139530181885e-03</internalNodes>\n          <leafValues>\n            -9.3986809253692627e-02 2.8844779357314110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5960 -2.6332271099090576e-01</internalNodes>\n          <leafValues>\n            4.9980929493904114e-01 -1.0173249989748001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5961 -2.4556639790534973e-01</internalNodes>\n          <leafValues>\n            -8.1778347492218018e-01 6.9596339017152786e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5962 -2.1419329941272736e-01</internalNodes>\n          <leafValues>\n            -5.1040518283843994e-01 9.4540230929851532e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5963 -1.4363219961524010e-02</internalNodes>\n          <leafValues>\n            -9.1000981628894806e-02 2.4646669626235962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5964 -1.2388969771564007e-03</internalNodes>\n          <leafValues>\n            1.1544570326805115e-01 -4.9565620720386505e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5965 2.1015120670199394e-02</internalNodes>\n          <leafValues>\n            -1.7765879631042480e-02 1.9577859342098236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5966 -4.1783051565289497e-03</internalNodes>\n          <leafValues>\n            -1.1172860115766525e-01 4.4625449925661087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5967 2.0896939095109701e-03</internalNodes>\n          <leafValues>\n            -3.3988729119300842e-02 6.5539501607418060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5968 1.6410060226917267e-02</internalNodes>\n          <leafValues>\n            -2.0373269915580750e-02 2.5331538915634155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5969 -6.4266882836818695e-02</internalNodes>\n          <leafValues>\n            -6.5880149602890015e-01 3.4550630953162909e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5970 6.8898178869858384e-04</internalNodes>\n          <leafValues>\n            6.7643247544765472e-02 -8.7556242942810059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5971 5.6662331335246563e-03</internalNodes>\n          <leafValues>\n            3.0638309195637703e-02 -1.1895540356636047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5972 -4.3778121471405029e-02</internalNodes>\n          <leafValues>\n            -2.8309130668640137e-01 1.7713630571961403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5973 3.4748481120914221e-03</internalNodes>\n          <leafValues>\n            -9.5787122845649719e-02 4.2630400508642197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5974 -1.1673940345644951e-02</internalNodes>\n          <leafValues>\n            -1.0502570122480392e-01 5.0903890281915665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5975 -3.4004659391939640e-03</internalNodes>\n          <leafValues>\n            1.0470719635486603e-01 -4.0939141064882278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5976 2.7091780211776495e-03</internalNodes>\n          <leafValues>\n            -6.0524601489305496e-02 1.3978950679302216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5977 -1.7439300194382668e-02</internalNodes>\n          <leafValues>\n            -3.2391169667243958e-01 1.4630249701440334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5978 -1.2598330155014992e-02</internalNodes>\n          <leafValues>\n            -2.0682629942893982e-01 2.5501869618892670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5979 1.8755869939923286e-02</internalNodes>\n          <leafValues>\n            -4.7925960272550583e-02 1.0864380002021790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5980 -4.2074159719049931e-03</internalNodes>\n          <leafValues>\n            -8.2077808678150177e-02 6.3647769391536713e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5981 -1.6427719674538821e-04</internalNodes>\n          <leafValues>\n            1.0120390355587006e-01 -3.4067928791046143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5982 4.3847691267728806e-02</internalNodes>\n          <leafValues>\n            6.0980222187936306e-03 -8.3685982227325439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5983 -3.9284680038690567e-02</internalNodes>\n          <leafValues>\n            2.8250560164451599e-01 -2.2389259189367294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5984 3.8550909608602524e-02</internalNodes>\n          <leafValues>\n            1.5570489689707756e-02 -3.3978620171546936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5985 -6.9177031517028809e-02</internalNodes>\n          <leafValues>\n            1.2258320301771164e-01 -1.7850179225206375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5986 -1.9251030171290040e-03</internalNodes>\n          <leafValues>\n            -1.0687749832868576e-01 4.6379510313272476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5987 -8.6635202169418335e-03</internalNodes>\n          <leafValues>\n            9.6412748098373413e-02 -1.7563249915838242e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5988 1.3393509387969971e-01</internalNodes>\n          <leafValues>\n            6.3692941330373287e-03 -7.0170587301254272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5989 4.1082348674535751e-02</internalNodes>\n          <leafValues>\n            -1.1077569797635078e-02 1.3463750481605530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5990 1.4911450445652008e-01</internalNodes>\n          <leafValues>\n            9.5263421535491943e-03 -5.0872552394866943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5991 -5.2500818856060505e-03</internalNodes>\n          <leafValues>\n            7.0025578141212463e-02 -4.2880270630121231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5992 2.2823570296168327e-02</internalNodes>\n          <leafValues>\n            -4.1884049773216248e-02 1.1770319938659668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5993 -8.5306530818343163e-03</internalNodes>\n          <leafValues>\n            6.1222139745950699e-02 -2.4944549426436424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5994 1.1971729807555676e-02</internalNodes>\n          <leafValues>\n            3.9662770926952362e-02 -1.6267740726470947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5995 -3.8938269019126892e-02</internalNodes>\n          <leafValues>\n            2.5743520259857178e-01 -1.6356239095330238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5996 -2.1706389263272285e-02</internalNodes>\n          <leafValues>\n            -3.1998679041862488e-01 1.7135290428996086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5997 6.6900630481541157e-03</internalNodes>\n          <leafValues>\n            2.6101849973201752e-02 -1.0980729758739471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5998 -7.2270832955837250e-02</internalNodes>\n          <leafValues>\n            1.9431130588054657e-01 -2.6044359430670738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5999 -6.7073688842356205e-03</internalNodes>\n          <leafValues>\n            -1.7747850716114044e-01 4.5862998813390732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6000 5.5019360035657883e-02</internalNodes>\n          <leafValues>\n            -8.3471573889255524e-03 6.0511541366577148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6001 1.3142649829387665e-01</internalNodes>\n          <leafValues>\n            -5.7535418309271336e-03 2.9167538881301880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6002 -1.6564460238441825e-03</internalNodes>\n          <leafValues>\n            7.0003032684326172e-02 -6.2690876424312592e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6003 1.5445409715175629e-01</internalNodes>\n          <leafValues>\n            6.1896732077002525e-03 -7.4323302507400513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6004 -5.0357519648969173e-03</internalNodes>\n          <leafValues>\n            -1.1333289742469788e-01 3.8741771131753922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6005 2.2772569209337234e-03</internalNodes>\n          <leafValues>\n            -1.1340530216693878e-01 2.1319400519132614e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6006 3.3173530828207731e-03</internalNodes>\n          <leafValues>\n            4.4273331761360168e-02 -1.0459829866886139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6007 -2.9692800715565681e-02</internalNodes>\n          <leafValues>\n            9.2483766376972198e-02 -2.3342609405517578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6008 6.2937840819358826e-02</internalNodes>\n          <leafValues>\n            -1.2998280115425587e-02 3.8887938857078552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6009 3.6641359329223633e-03</internalNodes>\n          <leafValues>\n            3.2099820673465729e-02 -3.9647988975048065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6010 4.4782999902963638e-03</internalNodes>\n          <leafValues>\n            -4.5701328665018082e-02 1.0697010159492493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6011 1.8147319788113236e-03</internalNodes>\n          <leafValues>\n            -3.2871820032596588e-02 1.0647939890623093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6012 4.8941639252007008e-03</internalNodes>\n          <leafValues>\n            2.7911009266972542e-02 -2.1725590527057648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6013 -4.4425828382372856e-03</internalNodes>\n          <leafValues>\n            -1.3470150530338287e-01 1.0781410150229931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6014 -2.5493400171399117e-02</internalNodes>\n          <leafValues>\n            6.8371468782424927e-01 -7.7452720142900944e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6015 2.7835449203848839e-02</internalNodes>\n          <leafValues>\n            2.4144299328327179e-02 -1.5170599520206451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6016 7.5548859313130379e-03</internalNodes>\n          <leafValues>\n            -4.7643400728702545e-02 1.1925770342350006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6017 1.0329609736800194e-02</internalNodes>\n          <leafValues>\n            1.8646810203790665e-02 -1.6122570633888245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6018 -1.2393389828503132e-02</internalNodes>\n          <leafValues>\n            6.0304921865463257e-01 -7.7566630207002163e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6019 1.3833769597113132e-02</internalNodes>\n          <leafValues>\n            -2.7617299929261208e-02 5.1266878843307495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6020 -2.5669319555163383e-02</internalNodes>\n          <leafValues>\n            2.3801359534263611e-01 -2.3971909657120705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6021 -5.2043660543859005e-03</internalNodes>\n          <leafValues>\n            -1.0721790045499802e-01 2.6645049452781677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6022 3.4628969151526690e-03</internalNodes>\n          <leafValues>\n            5.4313410073518753e-02 -1.3458320498466492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6023 -1.9220679998397827e-02</internalNodes>\n          <leafValues>\n            7.2996392846107483e-02 -4.0652111172676086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6024 -2.5009829550981522e-03</internalNodes>\n          <leafValues>\n            -7.7671296894550323e-02 5.9096541255712509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6025 -8.5285156965255737e-03</internalNodes>\n          <leafValues>\n            4.9050811678171158e-02 -6.4078353345394135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6026 4.3327538296580315e-03</internalNodes>\n          <leafValues>\n            2.5221010670065880e-02 -1.9358980655670166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6027 3.6595970392227173e-02</internalNodes>\n          <leafValues>\n            -1.6262590885162354e-02 1.5651239454746246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6028 -1.1795730097219348e-03</internalNodes>\n          <leafValues>\n            -7.2468072175979614e-02 7.0449486374855042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6029 -1.3975829817354679e-02</internalNodes>\n          <leafValues>\n            -1.1789470165967941e-01 2.1292049437761307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6030 -1.3828700175508857e-03</internalNodes>\n          <leafValues>\n            7.9283542931079865e-02 -9.5104120671749115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6031 -2.9435830656439066e-03</internalNodes>\n          <leafValues>\n            7.0368431508541107e-02 -3.3217910677194595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6032 9.5262555405497551e-03</internalNodes>\n          <leafValues>\n            -2.9733620584011078e-02 1.6670459508895874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6033 -9.0114273130893707e-02</internalNodes>\n          <leafValues>\n            -1.6625370085239410e-01 8.6199166253209114e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6034 -1.2089919764548540e-03</internalNodes>\n          <leafValues>\n            8.1083856523036957e-02 -7.3029123246669769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6035 -1.4199960231781006e-01</internalNodes>\n          <leafValues>\n            -1. 2.2284830920398235e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6036 8.0690719187259674e-03</internalNodes>\n          <leafValues>\n            4.7412220388650894e-02 -1.0178930312395096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6037 -4.7410889528691769e-03</internalNodes>\n          <leafValues>\n            1.2051119655370712e-01 -4.9957480281591415e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6038 -1.6977200284600258e-03</internalNodes>\n          <leafValues>\n            -2.4171440303325653e-01 1.9534369930624962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6039 -2.8892089612782001e-03</internalNodes>\n          <leafValues>\n            2.5727990269660950e-01 -1.1625059880316257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6040 -1.5177440363913774e-03</internalNodes>\n          <leafValues>\n            -9.8784193396568298e-02 4.6706128865480423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6041 1.4197319746017456e-01</internalNodes>\n          <leafValues>\n            -2.5096370372921228e-03 7.5450611114501953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6042 9.7517937421798706e-02</internalNodes>\n          <leafValues>\n            -6.9059049710631371e-03 6.5184432268142700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6043 1.3567379675805569e-02</internalNodes>\n          <leafValues>\n            -7.6325193047523499e-02 8.8054582476615906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6044 8.0981463193893433e-02</internalNodes>\n          <leafValues>\n            1.5558109618723392e-02 -3.4601628780364990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6045 -4.7192731872200966e-03</internalNodes>\n          <leafValues>\n            8.1620022654533386e-02 -4.6072289347648621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6046 2.0368969999253750e-03</internalNodes>\n          <leafValues>\n            -4.4817630201578140e-02 1.2861390411853790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6047 -1.7878509825095534e-03</internalNodes>\n          <leafValues>\n            4.3731331825256348e-02 -4.4995948672294617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6048 -7.1685528382658958e-03</internalNodes>\n          <leafValues>\n            -1.3597999513149261e-01 3.8796991109848022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6049 -6.7460887134075165e-02</internalNodes>\n          <leafValues>\n            -2.9265740513801575e-01 3.5135280340909958e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6050 -1.5598500147461891e-02</internalNodes>\n          <leafValues>\n            2.3105660080909729e-01 -2.2405069321393967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6051 -2.1026479080319405e-02</internalNodes>\n          <leafValues>\n            -1.5283830463886261e-01 3.1531449407339096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6052 -1.0558360069990158e-01</internalNodes>\n          <leafValues>\n            -6.8366038799285889e-01 6.8997950293123722e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6053 -3.6966579500585794e-03</internalNodes>\n          <leafValues>\n            3.4315150231122971e-02 -4.8922799527645111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6054 -6.0826627304777503e-04</internalNodes>\n          <leafValues>\n            -5.2638430148363113e-02 8.9546948671340942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6055 -2.8936540707945824e-02</internalNodes>\n          <leafValues>\n            4.1818480938673019e-02 -1.3818169943988323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6056 -5.8082528412342072e-03</internalNodes>\n          <leafValues>\n            6.7874796688556671e-02 -8.5578799247741699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6057 -4.6095378696918488e-02</internalNodes>\n          <leafValues>\n            -1.2584780156612396e-01 2.0466970279812813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6058 5.2972920238971710e-02</internalNodes>\n          <leafValues>\n            -1.2453259900212288e-02 3.4565049409866333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6059 4.9351599067449570e-02</internalNodes>\n          <leafValues>\n            1.0901239700615406e-02 -4.8506981134414673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6060 4.4377800077199936e-02</internalNodes>\n          <leafValues>\n            9.9294837564229965e-03 -4.3877899646759033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6061 -1.1464890092611313e-01</internalNodes>\n          <leafValues>\n            2.6874598860740662e-01 -9.2000560835003853e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6062 1.6887830197811127e-01</internalNodes>\n          <leafValues>\n            5.7101310230791569e-03 -8.5972881317138672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6063 5.1198098808526993e-02</internalNodes>\n          <leafValues>\n            -8.5723921656608582e-03 1.3395169377326965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6064 -3.0789880547672510e-03</internalNodes>\n          <leafValues>\n            -1.0338760167360306e-01 4.3459478765726089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6065 4.7223128378391266e-02</internalNodes>\n          <leafValues>\n            8.1934239715337753e-03 -4.3803408741950989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6066 -7.6270569115877151e-03</internalNodes>\n          <leafValues>\n            1.8713890016078949e-01 -2.4660250172019005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6067 5.4106907919049263e-03</internalNodes>\n          <leafValues>\n            4.1099831461906433e-02 -7.8868232667446136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6068 -1.4900229871273041e-03</internalNodes>\n          <leafValues>\n            -2.0115040242671967e-01 3.1898159533739090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6069 -8.3831608295440674e-02</internalNodes>\n          <leafValues>\n            5.8017939329147339e-01 -5.2973427809774876e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6070 6.2233800999820232e-03</internalNodes>\n          <leafValues>\n            -3.9786059409379959e-02 1.2283950299024582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6071 1.1475080251693726e-01</internalNodes>\n          <leafValues>\n            -1.1975419707596302e-02 2.1586710214614868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6072 -1.5253260498866439e-03</internalNodes>\n          <leafValues>\n            1.3804529607295990e-01 -3.9941880851984024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6073 -5.2878521382808685e-03</internalNodes>\n          <leafValues>\n            -1.2790650129318237e-01 3.2893560826778412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6074 8.9670647867023945e-04</internalNodes>\n          <leafValues>\n            -1.2481059879064560e-01 4.4544249773025513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6075 3.8421660661697388e-02</internalNodes>\n          <leafValues>\n            7.7155791223049164e-03 -6.5575468540191650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6076 -9.3785318313166499e-04</internalNodes>\n          <leafValues>\n            5.5608510971069336e-02 -8.9876912534236908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6077 1.9965849351137877e-03</internalNodes>\n          <leafValues>\n            -2.5297610089182854e-02 1.9413180649280548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6078 4.5782068627886474e-04</internalNodes>\n          <leafValues>\n            3.9089199155569077e-02 -1.2908570468425751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6079 3.8373940624296665e-03</internalNodes>\n          <leafValues>\n            -2.8748869895935059e-02 1.9429750740528107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6080 3.7142829387448728e-04</internalNodes>\n          <leafValues>\n            3.8272358477115631e-02 -1.3759189844131470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6081 7.5116259977221489e-03</internalNodes>\n          <leafValues>\n            -1.4461129903793335e-02 1.2656949460506439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6082 -5.0362840294837952e-02</internalNodes>\n          <leafValues>\n            3.5183578729629517e-01 -1.4051860198378563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6083 3.9921641349792480e-02</internalNodes>\n          <leafValues>\n            2.7280429378151894e-02 -1.9958199560642242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6084 2.2605259716510773e-01</internalNodes>\n          <leafValues>\n            -6.8001961335539818e-03 7.3006898164749146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6085 1.1081779748201370e-01</internalNodes>\n          <leafValues>\n            4.3370737694203854e-03 -8.6829161643981934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6086 -9.7494889050722122e-03</internalNodes>\n          <leafValues>\n            -6.3740663230419159e-02 8.4537997841835022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6087 -2.2887689992785454e-03</internalNodes>\n          <leafValues>\n            9.9654018878936768e-02 -4.1565418243408203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6088 2.0008319988846779e-03</internalNodes>\n          <leafValues>\n            -5.5650699883699417e-02 1.0709869861602783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6089 -1.5160050243139267e-02</internalNodes>\n          <leafValues>\n            -1.4098760485649109e-01 3.8741599768400192e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6090 -6.3132969662547112e-03</internalNodes>\n          <leafValues>\n            -1. 4.4605308212339878e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6091 -1.3970009982585907e-02</internalNodes>\n          <leafValues>\n            1.2481089681386948e-01 -2.1425830200314522e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6092 -4.4321279972791672e-02</internalNodes>\n          <leafValues>\n            -5.3340071439743042e-01 1.0165239684283733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6093 1.4885979471728206e-03</internalNodes>\n          <leafValues>\n            -4.8868600279092789e-02 3.6077901721000671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6094 6.5139681100845337e-02</internalNodes>\n          <leafValues>\n            7.6331058517098427e-03 -5.8781641721725464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6095 -2.0741410553455353e-02</internalNodes>\n          <leafValues>\n            -2.9658278822898865e-01 1.8622800707817078e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>394</maxWeakCount>\n      <stageThreshold>-1.2940989732742310e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 6096 1.9188739359378815e-02</internalNodes>\n          <leafValues>\n            -2.1150399744510651e-01 1.3286529481410980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6097 -8.1222038716077805e-03</internalNodes>\n          <leafValues>\n            9.2491082847118378e-02 -1.7585119605064392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6098 1.5851219650357962e-03</internalNodes>\n          <leafValues>\n            -2.8565698862075806e-01 6.6710568964481354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6099 -4.3140850029885769e-03</internalNodes>\n          <leafValues>\n            -1.3885229825973511e-01 5.2694689482450485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6100 -1.7131429631263018e-03</internalNodes>\n          <leafValues>\n            1.3135610520839691e-01 -1.3149109482765198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6101 6.8447366356849670e-02</internalNodes>\n          <leafValues>\n            9.3052154406905174e-03 -2.5063261389732361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6102 -2.4445978924632072e-03</internalNodes>\n          <leafValues>\n            -1.7205530405044556e-01 9.8322823643684387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6103 1.0310600046068430e-03</internalNodes>\n          <leafValues>\n            2.3039160296320915e-02 -2.7527621388435364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6104 7.4603251414373517e-04</internalNodes>\n          <leafValues>\n            -2.3276780545711517e-01 5.2693009376525879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6105 -6.6399492789059877e-04</internalNodes>\n          <leafValues>\n            6.8990781903266907e-02 -8.4687709808349609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6106 -4.0997468749992549e-04</internalNodes>\n          <leafValues>\n            1.0501380264759064e-01 -1.0819009691476822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6107 -1.8094549886882305e-03</internalNodes>\n          <leafValues>\n            -1.8178839981555939e-01 4.4184140861034393e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6108 9.3385757645592093e-04</internalNodes>\n          <leafValues>\n            -1.4622689783573151e-01 7.2726443409919739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6109 -3.8197741378098726e-04</internalNodes>\n          <leafValues>\n            2.4009939283132553e-02 -1.7295800149440765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6110 -1.4950280310586095e-03</internalNodes>\n          <leafValues>\n            -1.9403380155563354e-01 4.8807919025421143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6111 -1.0159100405871868e-02</internalNodes>\n          <leafValues>\n            1.9173899292945862e-01 -5.2749071270227432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6112 5.9903519286308438e-05</internalNodes>\n          <leafValues>\n            -1.0791549831628799e-01 9.0988166630268097e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6113 -3.1967550516128540e-02</internalNodes>\n          <leafValues>\n            4.1109889745712280e-01 -2.2650640457868576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6114 1.4343270100653172e-02</internalNodes>\n          <leafValues>\n            2.4315539747476578e-02 -4.2680150270462036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6115 1.1039529927074909e-02</internalNodes>\n          <leafValues>\n            -6.2717013061046600e-02 1.1330530047416687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6116 -8.4228850901126862e-03</internalNodes>\n          <leafValues>\n            -2.1369309723377228e-01 4.2059201747179031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6117 -2.0549839362502098e-02</internalNodes>\n          <leafValues>\n            1.5161630511283875e-01 -2.4594139307737350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6118 -6.5411031246185303e-03</internalNodes>\n          <leafValues>\n            1.4883629977703094e-01 -6.1179339885711670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6119 -1.3324400410056114e-02</internalNodes>\n          <leafValues>\n            -2.0791970193386078e-01 4.8333309590816498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6120 7.0111267268657684e-02</internalNodes>\n          <leafValues>\n            -2.6863219216465950e-02 3.6322259902954102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6121 -2.6973750209435821e-04</internalNodes>\n          <leafValues>\n            6.0876660048961639e-02 -1.1272370070219040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6122 -1.3509000418707728e-03</internalNodes>\n          <leafValues>\n            -1.8552079796791077e-01 5.2154958248138428e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6123 -2.8083190321922302e-02</internalNodes>\n          <leafValues>\n            3.5111880302429199e-01 -2.3596329614520073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6124 -1.0003290139138699e-02</internalNodes>\n          <leafValues>\n            -2.9058480262756348e-01 3.2125689089298248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6125 -1.6111029544845223e-03</internalNodes>\n          <leafValues>\n            9.8113670945167542e-02 -5.2203711122274399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6126 -1.8411900848150253e-02</internalNodes>\n          <leafValues>\n            -1.8082669377326965e-01 5.4536700248718262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6127 -7.1738816797733307e-02</internalNodes>\n          <leafValues>\n            -7.6654988527297974e-01 3.3518690615892410e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6128 -2.7943260502070189e-03</internalNodes>\n          <leafValues>\n            1.5871369838714600e-01 -6.4271800220012665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6129 -1.6874749958515167e-01</internalNodes>\n          <leafValues>\n            -6.9956189393997192e-01 4.8861699178814888e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6130 -1.2672400334849954e-03</internalNodes>\n          <leafValues>\n            3.1616039574146271e-02 -2.4953269958496094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6131 2.0807750523090363e-02</internalNodes>\n          <leafValues>\n            1.7053410410881042e-02 -2.4331410229206085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6132 -1.5869849594309926e-03</internalNodes>\n          <leafValues>\n            9.3171089887619019e-02 -8.1361927092075348e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6133 -1.0014690458774567e-02</internalNodes>\n          <leafValues>\n            -2.7789619565010071e-01 2.6569239795207977e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6134 -5.7948171161115170e-03</internalNodes>\n          <leafValues>\n            -2.2287739813327789e-01 3.5975661128759384e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6135 2.7189950924366713e-03</internalNodes>\n          <leafValues>\n            -9.0631909668445587e-02 5.6820400059223175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6136 3.8845159113407135e-02</internalNodes>\n          <leafValues>\n            1.2280859984457493e-02 -5.8521348237991333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6137 -1.4158680103719234e-02</internalNodes>\n          <leafValues>\n            1.8153870105743408e-01 -3.1109429895877838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6138 -1.8278600275516510e-01</internalNodes>\n          <leafValues>\n            -9.0013808012008667e-01 7.6544750481843948e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6139 2.7588419616222382e-02</internalNodes>\n          <leafValues>\n            -1.2460039928555489e-02 2.0069369673728943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6140 -1.4784430153667927e-02</internalNodes>\n          <leafValues>\n            -8.9910492300987244e-02 8.1648677587509155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6141 1.1625719815492630e-01</internalNodes>\n          <leafValues>\n            2.3692469112575054e-03 -9.9998068809509277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6142 3.5341090988367796e-03</internalNodes>\n          <leafValues>\n            -6.1760541051626205e-02 1.3490639626979828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6143 5.1878788508474827e-03</internalNodes>\n          <leafValues>\n            1.8745860084891319e-02 -1.7449170351028442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6144 7.9457357525825500e-02</internalNodes>\n          <leafValues>\n            -2.3402990773320198e-02 3.3502200245857239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6145 2.7684379369020462e-02</internalNodes>\n          <leafValues>\n            2.3663910105824471e-02 -3.3256360888481140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6146 -4.4806320220232010e-03</internalNodes>\n          <leafValues>\n            -1.4658750593662262e-01 4.7376811504364014e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6147 5.6939688511192799e-03</internalNodes>\n          <leafValues>\n            -5.6776121258735657e-02 6.7580856382846832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6148 7.7299480326473713e-03</internalNodes>\n          <leafValues>\n            -3.1156649813055992e-02 2.3102590441703796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6149 3.9786100387573242e-03</internalNodes>\n          <leafValues>\n            -5.6882441043853760e-02 1.3271529972553253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6150 -1.1275880038738251e-02</internalNodes>\n          <leafValues>\n            -2.0938649773597717e-01 3.5291459411382675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6151 -2.4308220017701387e-03</internalNodes>\n          <leafValues>\n            -2.0176360011100769e-01 3.4513931721448898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6152 5.7369591668248177e-03</internalNodes>\n          <leafValues>\n            -5.5607158690690994e-02 1.1532089859247208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6153 4.6170800924301147e-03</internalNodes>\n          <leafValues>\n            -5.6083500385284424e-02 8.1762917339801788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6154 -4.7089671716094017e-03</internalNodes>\n          <leafValues>\n            -1.3351219892501831e-01 5.6296080350875854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6155 -3.2688070088624954e-02</internalNodes>\n          <leafValues>\n            2.7922388911247253e-01 -1.0867659933865070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6156 8.8686197996139526e-02</internalNodes>\n          <leafValues>\n            1.8268220126628876e-02 -3.5637390613555908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6157 4.5751677826046944e-03</internalNodes>\n          <leafValues>\n            -5.1558461040258408e-02 6.3948810100555420e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6158 4.9765850417315960e-03</internalNodes>\n          <leafValues>\n            -5.4684590548276901e-02 1.1907110363245010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6159 -6.4881290309131145e-03</internalNodes>\n          <leafValues>\n            -9.9121123552322388e-02 2.6508849114179611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6160 2.4523450993001461e-03</internalNodes>\n          <leafValues>\n            -9.5045946538448334e-02 6.6802926361560822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6161 7.0354789495468140e-03</internalNodes>\n          <leafValues>\n            1.0705590248107910e-01 -6.2395099550485611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6162 4.2746789753437042e-02</internalNodes>\n          <leafValues>\n            -1.6092179343104362e-02 4.3256199359893799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6163 -4.5301730278879404e-04</internalNodes>\n          <leafValues>\n            3.6420568823814392e-02 -9.9322892725467682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6164 -5.2631930448114872e-03</internalNodes>\n          <leafValues>\n            -1.1416749656200409e-01 5.7260219007730484e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6165 1.0581909446045756e-03</internalNodes>\n          <leafValues>\n            3.3220488578081131e-02 -1.1831220239400864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6166 2.5088949128985405e-02</internalNodes>\n          <leafValues>\n            -6.0655020177364349e-02 1.2601740658283234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6167 2.4252159893512726e-01</internalNodes>\n          <leafValues>\n            2.2060840856283903e-03 -1.0000120401382446e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6168 -1.4393079280853271e-01</internalNodes>\n          <leafValues>\n            3.7419798970222473e-01 -2.2252110764384270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6169 -6.0972762294113636e-03</internalNodes>\n          <leafValues>\n            -1.1038099974393845e-01 4.5996960252523422e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6170 6.1375470831990242e-03</internalNodes>\n          <leafValues>\n            3.8307808339595795e-02 -1.8086770176887512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6171 -3.6617079749703407e-03</internalNodes>\n          <leafValues>\n            3.8439918309450150e-02 -6.2540791928768158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6172 -1.5854850411415100e-01</internalNodes>\n          <leafValues>\n            3.4469398856163025e-01 -1.9837500527501106e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6173 6.7219287157058716e-02</internalNodes>\n          <leafValues>\n            9.5165139064192772e-03 -5.0206458568572998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6174 2.2499680053442717e-03</internalNodes>\n          <leafValues>\n            -1.3063929975032806e-01 6.4832933247089386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6175 8.4626786410808563e-02</internalNodes>\n          <leafValues>\n            5.9339799918234348e-03 -4.1516590118408203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6176 -9.5411221263930202e-04</internalNodes>\n          <leafValues>\n            -9.3790747225284576e-02 7.5486607849597931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6177 -7.6813949272036552e-03</internalNodes>\n          <leafValues>\n            -1.4821960031986237e-01 2.9010580852627754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6178 -2.5593319907784462e-02</internalNodes>\n          <leafValues>\n            1.4859579503536224e-01 -4.7195930033922195e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6179 2.1508369594812393e-02</internalNodes>\n          <leafValues>\n            2.3782620206475258e-02 -9.6659287810325623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6180 3.4463100135326385e-02</internalNodes>\n          <leafValues>\n            -3.7410069257020950e-02 2.2015300393104553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6181 -3.7860300391912460e-02</internalNodes>\n          <leafValues>\n            -5.0047469139099121e-01 1.4059869572520256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6182 1.2028450146317482e-03</internalNodes>\n          <leafValues>\n            -6.5087057650089264e-02 8.9583486318588257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6183 1.6753520816564560e-02</internalNodes>\n          <leafValues>\n            4.9179811030626297e-03 -4.3030908703804016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6184 1.6640779795125127e-03</internalNodes>\n          <leafValues>\n            4.0807429701089859e-02 -1.4469960331916809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6185 3.4473428968340158e-03</internalNodes>\n          <leafValues>\n            -3.9910178631544113e-02 1.5272960066795349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6186 8.9918142184615135e-03</internalNodes>\n          <leafValues>\n            7.1071267127990723e-02 -8.6169913411140442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6187 8.3185202674940228e-04</internalNodes>\n          <leafValues>\n            -2.5739189982414246e-01 1.7941089347004890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6188 -6.8142730742692947e-03</internalNodes>\n          <leafValues>\n            1.3823160529136658e-01 -5.3994540125131607e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6189 2.9746210202574730e-03</internalNodes>\n          <leafValues>\n            -4.1550260037183762e-02 3.9839770644903183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6190 2.5836620479822159e-03</internalNodes>\n          <leafValues>\n            -7.0656493306159973e-02 9.5045506954193115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6191 2.7143809711560607e-04</internalNodes>\n          <leafValues>\n            5.8070071041584015e-02 -1.2781760096549988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6192 3.5418298840522766e-01</internalNodes>\n          <leafValues>\n            5.4909070022404194e-03 -9.7960698604583740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6193 2.5318650528788567e-02</internalNodes>\n          <leafValues>\n            -1.4410969801247120e-02 2.6219129562377930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6194 -2.2658439411316067e-04</internalNodes>\n          <leafValues>\n            5.2997849881649017e-02 -1.1629349738359451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6195 6.8859090097248554e-03</internalNodes>\n          <leafValues>\n            1.6437310725450516e-02 -2.0349490642547607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6196 1.1607459746301174e-02</internalNodes>\n          <leafValues>\n            -3.6651011556386948e-02 1.5184010565280914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6197 -4.8253959976136684e-03</internalNodes>\n          <leafValues>\n            -2.3476150631904602e-01 3.7914011627435684e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6198 2.5656020734459162e-03</internalNodes>\n          <leafValues>\n            3.5185638815164566e-02 -1.8540710210800171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6199 1.2601399421691895e-01</internalNodes>\n          <leafValues>\n            -9.8542850464582443e-03 2.5520691275596619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6200 2.7164958883076906e-03</internalNodes>\n          <leafValues>\n            -2.1748440340161324e-02 2.5467529892921448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6201 3.2356029748916626e-01</internalNodes>\n          <leafValues>\n            8.8657345622777939e-03 -7.0383572578430176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6202 -8.4016058826819062e-04</internalNodes>\n          <leafValues>\n            3.6831360310316086e-02 -1.4953260123729706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6203 3.3291990403085947e-03</internalNodes>\n          <leafValues>\n            4.8185840249061584e-02 -1.2290470302104950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6204 2.1130539476871490e-01</internalNodes>\n          <leafValues>\n            6.5245870500802994e-03 -8.8293862342834473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6205 5.0388509407639503e-03</internalNodes>\n          <leafValues>\n            -6.7079946398735046e-02 3.7849709391593933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6206 -2.7862399816513062e-02</internalNodes>\n          <leafValues>\n            3.3469489216804504e-01 -1.8816500902175903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6207 3.8636629469692707e-03</internalNodes>\n          <leafValues>\n            4.3644730001688004e-02 -1.7481489479541779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6208 1.0480300337076187e-01</internalNodes>\n          <leafValues>\n            -1.5737529844045639e-02 4.2094239592552185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6209 -3.4130848944187164e-03</internalNodes>\n          <leafValues>\n            -1.0835570096969604e-01 4.3717790395021439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6210 -4.6396970748901367e-02</internalNodes>\n          <leafValues>\n            -7.5680077075958252e-01 8.6701400578022003e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6211 5.3708078339695930e-03</internalNodes>\n          <leafValues>\n            -4.1797801852226257e-02 1.4824719727039337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6212 -6.1126388609409332e-03</internalNodes>\n          <leafValues>\n            1.8673719465732574e-01 -4.3387491255998611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6213 4.2509321123361588e-02</internalNodes>\n          <leafValues>\n            1.1690679937601089e-02 -4.3740659952163696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6214 1.0473020374774933e-02</internalNodes>\n          <leafValues>\n            4.3143630027770996e-02 -1.5654399991035461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6215 -4.7223959118127823e-02</internalNodes>\n          <leafValues>\n            -7.4483537673950195e-01 3.4918629098683596e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6216 5.3090360015630722e-02</internalNodes>\n          <leafValues>\n            1.0408150032162666e-02 -5.3499448299407959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6217 -7.0432561915367842e-04</internalNodes>\n          <leafValues>\n            3.3384170383214951e-02 -7.3706030845642090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6218 7.5942431576550007e-03</internalNodes>\n          <leafValues>\n            -2.9107049107551575e-02 1.9468860328197479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6219 2.2676989436149597e-02</internalNodes>\n          <leafValues>\n            3.3803820610046387e-02 -2.7627611160278320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6220 6.6533521749079227e-03</internalNodes>\n          <leafValues>\n            -2.6578240096569061e-02 2.4283319711685181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6221 3.7712270859628916e-03</internalNodes>\n          <leafValues>\n            2.6554299518465996e-02 -6.4952917397022247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6222 -2.0740530453622341e-03</internalNodes>\n          <leafValues>\n            -1.7968970537185669e-01 3.1532160937786102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6223 -1.5632519498467445e-03</internalNodes>\n          <leafValues>\n            5.3109679371118546e-02 -8.7415628135204315e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6224 1.2540889903903008e-02</internalNodes>\n          <leafValues>\n            -3.4136459231376648e-02 2.2097539901733398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6225 -3.2660199794918299e-03</internalNodes>\n          <leafValues>\n            -5.5261608213186264e-02 3.2669559121131897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6226 -8.2185603678226471e-03</internalNodes>\n          <leafValues>\n            -1.4478379487991333e-01 5.5743928998708725e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6227 -5.5811040103435516e-02</internalNodes>\n          <leafValues>\n            1.7237940430641174e-01 -1.4456519857048988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6228 -1.4723159372806549e-01</internalNodes>\n          <leafValues>\n            -8.1392312049865723e-01 7.4356291443109512e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6229 -5.8468529023230076e-03</internalNodes>\n          <leafValues>\n            -6.9043442606925964e-02 1.9456790760159492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6230 1.9462220370769501e-02</internalNodes>\n          <leafValues>\n            -3.5472229123115540e-02 1.6666300594806671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6231 5.8353468775749207e-02</internalNodes>\n          <leafValues>\n            3.0551329255104065e-03 -3.9289128780364990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6232 4.3785829097032547e-02</internalNodes>\n          <leafValues>\n            1.3574630022048950e-02 -4.6152359247207642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6233 -5.1904350519180298e-02</internalNodes>\n          <leafValues>\n            6.3802438974380493e-01 -9.6664745360612869e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6234 -7.7811058145016432e-04</internalNodes>\n          <leafValues>\n            -9.9303223192691803e-02 5.6094601750373840e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6235 4.9657518975436687e-03</internalNodes>\n          <leafValues>\n            4.1419368237257004e-02 -1.1274819821119308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6236 -5.4516079835593700e-03</internalNodes>\n          <leafValues>\n            1.7399060726165771e-01 -4.1147731244564056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6237 5.0428751856088638e-03</internalNodes>\n          <leafValues>\n            -4.1255220770835876e-02 1.3794229924678802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6238 -1.6985220136120915e-03</internalNodes>\n          <leafValues>\n            -2.2874790430068970e-01 2.5274980813264847e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6239 8.2764238119125366e-02</internalNodes>\n          <leafValues>\n            3.3066510222852230e-03 -6.9113439321517944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6240 3.9285849779844284e-03</internalNodes>\n          <leafValues>\n            -7.9043358564376831e-02 6.6218852996826172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6241 -3.0601240694522858e-02</internalNodes>\n          <leafValues>\n            -2.6517450809478760e-01 1.6467850655317307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6242 -1.9941160455346107e-02</internalNodes>\n          <leafValues>\n            1.5431809425354004e-01 -3.6100689321756363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6243 8.0520063638687134e-02</internalNodes>\n          <leafValues>\n            1.7015919089317322e-02 -3.3448880910873413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6244 7.0323847234249115e-02</internalNodes>\n          <leafValues>\n            1.7122440040111542e-02 -3.3302140235900879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6245 -5.2850939333438873e-02</internalNodes>\n          <leafValues>\n            6.2421400099992752e-02 -1.4690199866890907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6246 -7.1594159817323089e-04</internalNodes>\n          <leafValues>\n            -1.1335150152444839e-01 5.2260790020227432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6247 2.1469970047473907e-01</internalNodes>\n          <leafValues>\n            9.9299731664359570e-04 -9.9997580051422119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6248 8.7042592465877533e-02</internalNodes>\n          <leafValues>\n            -1.2329760007560253e-02 5.0260668992996216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6249 -5.8731262106448412e-04</internalNodes>\n          <leafValues>\n            -9.9346466362476349e-02 5.1705610007047653e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6250 -4.4215220957994461e-02</internalNodes>\n          <leafValues>\n            -3.9368900656700134e-01 1.3920850120484829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6251 -8.7676227092742920e-02</internalNodes>\n          <leafValues>\n            3.0157440900802612e-01 -6.8702381104230881e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6252 -4.8453990370035172e-02</internalNodes>\n          <leafValues>\n            2.5477871298789978e-01 -2.2457750514149666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6253 -2.1567570511251688e-03</internalNodes>\n          <leafValues>\n            -1.3562899827957153e-01 3.1725399196147919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6254 3.9050900377333164e-03</internalNodes>\n          <leafValues>\n            4.9100890755653381e-02 -1.1861059814691544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6255 -3.9808028377592564e-03</internalNodes>\n          <leafValues>\n            4.8333909362554550e-02 -5.5897079408168793e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6256 2.9744929634034634e-03</internalNodes>\n          <leafValues>\n            -6.4802452921867371e-02 9.3583501875400543e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6257 2.5875229388475418e-02</internalNodes>\n          <leafValues>\n            1.8487609922885895e-02 -3.3436349034309387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6258 -1.9373580580577254e-03</internalNodes>\n          <leafValues>\n            2.2000649571418762e-01 -2.5404980406165123e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6259 -2.0171629264950752e-02</internalNodes>\n          <leafValues>\n            -7.8228309750556946e-02 4.5462790876626968e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6260 -2.6088140904903412e-02</internalNodes>\n          <leafValues>\n            1.7637069523334503e-01 -4.5097298920154572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6261 -2.6868300512433052e-02</internalNodes>\n          <leafValues>\n            -3.2656419277191162e-01 1.7994230613112450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6262 -7.0211151614785194e-04</internalNodes>\n          <leafValues>\n            3.9671998471021652e-02 -1.4533540606498718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6263 8.3507681265473366e-03</internalNodes>\n          <leafValues>\n            -2.3051729425787926e-02 1.8850760161876678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6264 4.6823569573462009e-03</internalNodes>\n          <leafValues>\n            2.9996560886502266e-02 -2.0701029896736145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6265 3.3109660726040602e-03</internalNodes>\n          <leafValues>\n            5.6536730378866196e-02 -1.6835589706897736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6266 7.6425541192293167e-03</internalNodes>\n          <leafValues>\n            -4.1423950344324112e-02 1.2557519972324371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6267 -2.4713110178709030e-03</internalNodes>\n          <leafValues>\n            7.2156153619289398e-02 -1.0767730325460434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6268 -9.9495360627770424e-03</internalNodes>\n          <leafValues>\n            -1.8187619745731354e-01 3.3567231148481369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6269 1.9820800516754389e-03</internalNodes>\n          <leafValues>\n            -5.6488718837499619e-02 1.0741490125656128e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6270 2.3254439234733582e-02</internalNodes>\n          <leafValues>\n            -1.6543349251151085e-02 3.6466678977012634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6271 -5.4177921265363693e-02</internalNodes>\n          <leafValues>\n            -1. 3.3418419770896435e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6272 6.1567849479615688e-04</internalNodes>\n          <leafValues>\n            4.0159329771995544e-02 -1.6460220515727997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6273 -4.2699510231614113e-03</internalNodes>\n          <leafValues>\n            -5.6978620588779449e-02 4.4480901211500168e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6274 1.9749389030039310e-03</internalNodes>\n          <leafValues>\n            5.9283681213855743e-02 -1.0791260004043579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6275 -5.8583128266036510e-03</internalNodes>\n          <leafValues>\n            1.3734050095081329e-01 -3.4231521189212799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6276 -7.2995189111679792e-04</internalNodes>\n          <leafValues>\n            -1.0075060278177261e-01 5.4733160883188248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6277 -2.9930740594863892e-02</internalNodes>\n          <leafValues>\n            6.3882559537887573e-02 -4.1027020663022995e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6278 -5.1738750189542770e-02</internalNodes>\n          <leafValues>\n            -7.2713458538055420e-01 7.4993381276726723e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6279 2.4021189659833908e-02</internalNodes>\n          <leafValues>\n            7.8491801396012306e-03 -5.5794471502304077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6280 -3.7574321031570435e-03</internalNodes>\n          <leafValues>\n            -1.6086879372596741e-01 3.1015990301966667e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6281 -6.2635682523250580e-02</internalNodes>\n          <leafValues>\n            9.0577863156795502e-02 -2.9033770784735680e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6282 1.9363429397344589e-02</internalNodes>\n          <leafValues>\n            -4.9920588731765747e-02 1.2835779786109924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6283 -3.5072889178991318e-02</internalNodes>\n          <leafValues>\n            2.1391840279102325e-01 -8.8168960064649582e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6284 -1.3243310153484344e-02</internalNodes>\n          <leafValues>\n            2.3349699378013611e-01 -2.3088019341230392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6285 -3.1290829181671143e-02</internalNodes>\n          <leafValues>\n            -6.9495099782943726e-01 9.3020889908075333e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6286 7.2391419671475887e-03</internalNodes>\n          <leafValues>\n            2.8485849499702454e-02 -1.8310770392417908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6287 6.6785318776965141e-03</internalNodes>\n          <leafValues>\n            -4.9132950603961945e-02 5.4181691259145737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6288 -3.6825571209192276e-02</internalNodes>\n          <leafValues>\n            3.3120208978652954e-01 -2.1359929814934731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6289 -4.5507341623306274e-02</internalNodes>\n          <leafValues>\n            -1.2893490493297577e-01 4.9545988440513611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6290 7.7639957889914513e-03</internalNodes>\n          <leafValues>\n            -3.6255620419979095e-02 1.5321409702301025e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6291 6.0417611151933670e-02</internalNodes>\n          <leafValues>\n            4.5740022324025631e-03 -6.7541092634201050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6292 2.4624960497021675e-03</internalNodes>\n          <leafValues>\n            5.3674161434173584e-02 -1.1326540261507034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6293 7.3594506829977036e-05</internalNodes>\n          <leafValues>\n            -3.5648930817842484e-02 2.5458969175815582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6294 -4.0958370082080364e-03</internalNodes>\n          <leafValues>\n            1.5562909841537476e-01 -3.9390601217746735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6295 2.8689370083156973e-05</internalNodes>\n          <leafValues>\n            -8.4823302924633026e-02 3.8254238665103912e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6296 -4.6220528893172741e-03</internalNodes>\n          <leafValues>\n            -1.8994529545307159e-01 3.3508758991956711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6297 -8.5343196988105774e-03</internalNodes>\n          <leafValues>\n            1.1212539672851562e-01 -3.3968489617109299e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6298 -5.8803848922252655e-02</internalNodes>\n          <leafValues>\n            -5.1244312524795532e-01 1.0789549909532070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6299 6.0719929635524750e-02</internalNodes>\n          <leafValues>\n            -1.2555030174553394e-02 2.2509759664535522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6300 1.1038020020350814e-03</internalNodes>\n          <leafValues>\n            -9.6294492483139038e-02 5.6727480143308640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6301 -3.8484560791403055e-03</internalNodes>\n          <leafValues>\n            4.0573459118604660e-02 -2.5326859205961227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6302 -1.0771050117909908e-02</internalNodes>\n          <leafValues>\n            8.8735632598400116e-02 -5.5628679692745209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6303 1.2016809545457363e-02</internalNodes>\n          <leafValues>\n            2.3566279560327530e-02 -2.4590580165386200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6304 -1.1656560236588120e-03</internalNodes>\n          <leafValues>\n            -3.7417300045490265e-02 1.6503289341926575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6305 3.2137628644704819e-02</internalNodes>\n          <leafValues>\n            1.4245970174670219e-02 -2.6480850577354431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6306 2.3331670090556145e-02</internalNodes>\n          <leafValues>\n            -3.5288721323013306e-02 1.8447829782962799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6307 -1.2685320340096951e-02</internalNodes>\n          <leafValues>\n            -1.1757309734821320e-01 1.6436910256743431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6308 7.3903938755393028e-05</internalNodes>\n          <leafValues>\n            -1.0271479934453964e-01 7.4301436543464661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6309 -1.0925470292568207e-01</internalNodes>\n          <leafValues>\n            -8.3165317773818970e-01 5.6438110768795013e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6310 -1.3324350118637085e-01</internalNodes>\n          <leafValues>\n            7.7729821205139160e-01 -8.3403270691633224e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6311 8.9381448924541473e-04</internalNodes>\n          <leafValues>\n            -5.9524301439523697e-02 4.1173089295625687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6312 1.0318649932742119e-02</internalNodes>\n          <leafValues>\n            1.5926430001854897e-02 -3.1637790799140930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6313 -5.2297548390924931e-03</internalNodes>\n          <leafValues>\n            -7.1166560053825378e-02 3.3489290624856949e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6314 1.6409620642662048e-02</internalNodes>\n          <leafValues>\n            -2.6454120874404907e-02 1.9589969515800476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6315 1.4068709686398506e-02</internalNodes>\n          <leafValues>\n            -3.9364140480756760e-02 1.3977420330047607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6316 6.6486410796642303e-03</internalNodes>\n          <leafValues>\n            6.4070828258991241e-02 -1.0493399947881699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6317 -1.8030619248747826e-02</internalNodes>\n          <leafValues>\n            8.3942912518978119e-02 -1.3399159535765648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6318 -4.4034369289875031e-02</internalNodes>\n          <leafValues>\n            -5.5825459957122803e-01 9.7633162513375282e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6319 -8.0966893583536148e-03</internalNodes>\n          <leafValues>\n            -2.0489789545536041e-01 2.6520200073719025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6320 5.0180461257696152e-03</internalNodes>\n          <leafValues>\n            -1.1661209911108017e-01 4.5791670680046082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6321 -1.7064629122614861e-02</internalNodes>\n          <leafValues>\n            2.6282730698585510e-01 -2.0390639081597328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6322 7.1850173175334930e-02</internalNodes>\n          <leafValues>\n            -6.9503681734204292e-03 6.7032539844512939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6323 -5.6914370507001877e-02</internalNodes>\n          <leafValues>\n            -1.3477900624275208e-01 1.8399080261588097e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6324 -3.2365729566663504e-03</internalNodes>\n          <leafValues>\n            6.9673851132392883e-02 -7.2314530611038208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6325 4.1818909347057343e-02</internalNodes>\n          <leafValues>\n            1.1151459999382496e-02 -5.1680111885070801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6326 -6.1106588691473007e-03</internalNodes>\n          <leafValues>\n            -1.3163940608501434e-01 4.3796509504318237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6327 -3.5560909658670425e-02</internalNodes>\n          <leafValues>\n            6.8005502223968506e-02 -3.6331020295619965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6328 6.8789169192314148e-02</internalNodes>\n          <leafValues>\n            1.4698959887027740e-02 -3.8212299346923828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6329 -7.8313373029232025e-02</internalNodes>\n          <leafValues>\n            2.0296069979667664e-01 -8.6810020729899406e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6330 3.9626220241189003e-03</internalNodes>\n          <leafValues>\n            -3.5797890275716782e-02 1.3905510306358337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6331 -3.3874038606882095e-02</internalNodes>\n          <leafValues>\n            -2.2253429889678955e-01 7.5455638580024242e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6332 -6.4755856990814209e-02</internalNodes>\n          <leafValues>\n            4.7521549463272095e-01 -1.0970680043101311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6333 2.6647940278053284e-02</internalNodes>\n          <leafValues>\n            1.5445309691131115e-02 -2.6785778999328613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6334 -3.0731109902262688e-02</internalNodes>\n          <leafValues>\n            -4.7668689489364624e-01 9.6429884433746338e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6335 -2.4022700265049934e-02</internalNodes>\n          <leafValues>\n            -1.0633960366249084e-01 1.2849040329456329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6336 -1.3036349555477500e-03</internalNodes>\n          <leafValues>\n            7.3524177074432373e-02 -6.8074919283390045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6337 -9.8344050347805023e-03</internalNodes>\n          <leafValues>\n            -1.1843550205230713e-01 4.2866699397563934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6338 8.7102197110652924e-02</internalNodes>\n          <leafValues>\n            -4.0088258683681488e-02 1.7804540693759918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6339 2.0411569625139236e-02</internalNodes>\n          <leafValues>\n            1.6849989071488380e-02 -3.8953658938407898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6340 9.5875263214111328e-02</internalNodes>\n          <leafValues>\n            5.9905550442636013e-03 -8.1525659561157227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6341 6.4893220551311970e-03</internalNodes>\n          <leafValues>\n            -2.4039229378104210e-02 5.3871169686317444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6342 -9.6279237186536193e-04</internalNodes>\n          <leafValues>\n            9.4299189746379852e-02 -6.4436018466949463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6343 -3.7659960798919201e-04</internalNodes>\n          <leafValues>\n            -6.2296878546476364e-02 4.1251849383115768e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6344 6.5272641368210316e-03</internalNodes>\n          <leafValues>\n            5.1325131207704544e-02 -1.3037790358066559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6345 2.1429110318422318e-02</internalNodes>\n          <leafValues>\n            -1.1989659629762173e-02 2.6280459761619568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6346 -5.0938720814883709e-03</internalNodes>\n          <leafValues>\n            6.3418947160243988e-02 -9.0566337108612061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6347 -2.5309680495411158e-03</internalNodes>\n          <leafValues>\n            6.0297761112451553e-02 -2.5049470365047455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6348 -1.5915350522845984e-03</internalNodes>\n          <leafValues>\n            -1.2171190232038498e-01 3.7737991660833359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6349 -3.4030709415674210e-02</internalNodes>\n          <leafValues>\n            4.6413430571556091e-01 -3.5409750416874886e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6350 5.1074200309813023e-03</internalNodes>\n          <leafValues>\n            3.9823830127716064e-02 -1.2645539641380310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6351 -9.6449116244912148e-03</internalNodes>\n          <leafValues>\n            3.3464258909225464e-01 -6.6040740348398685e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6352 1.1422860436141491e-02</internalNodes>\n          <leafValues>\n            -3.6080420017242432e-02 1.3714550435543060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6353 -5.1042139530181885e-03</internalNodes>\n          <leafValues>\n            -9.3986809253692627e-02 2.8844779357314110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6354 -2.6332271099090576e-01</internalNodes>\n          <leafValues>\n            4.9980929493904114e-01 -1.0173249989748001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6355 -2.4556639790534973e-01</internalNodes>\n          <leafValues>\n            -8.1778347492218018e-01 6.9596339017152786e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6356 -2.1419329941272736e-01</internalNodes>\n          <leafValues>\n            -5.1040518283843994e-01 9.4540230929851532e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6357 -1.4363219961524010e-02</internalNodes>\n          <leafValues>\n            -9.1000981628894806e-02 2.4646669626235962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6358 -1.2388969771564007e-03</internalNodes>\n          <leafValues>\n            1.1544570326805115e-01 -4.9565620720386505e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6359 2.1015120670199394e-02</internalNodes>\n          <leafValues>\n            -1.7765879631042480e-02 1.9577859342098236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6360 -4.1783051565289497e-03</internalNodes>\n          <leafValues>\n            -1.1172860115766525e-01 4.4625449925661087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6361 2.0896939095109701e-03</internalNodes>\n          <leafValues>\n            -3.3988729119300842e-02 6.5539501607418060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6362 1.6410060226917267e-02</internalNodes>\n          <leafValues>\n            -2.0373269915580750e-02 2.5331538915634155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6363 -6.4266882836818695e-02</internalNodes>\n          <leafValues>\n            -6.5880149602890015e-01 3.4550630953162909e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6364 6.8898178869858384e-04</internalNodes>\n          <leafValues>\n            6.7643247544765472e-02 -8.7556242942810059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6365 5.6662331335246563e-03</internalNodes>\n          <leafValues>\n            3.0638309195637703e-02 -1.1895540356636047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6366 -4.3778121471405029e-02</internalNodes>\n          <leafValues>\n            -2.8309130668640137e-01 1.7713630571961403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6367 3.4748481120914221e-03</internalNodes>\n          <leafValues>\n            -9.5787122845649719e-02 4.2630400508642197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6368 -1.1673940345644951e-02</internalNodes>\n          <leafValues>\n            -1.0502570122480392e-01 5.0903890281915665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6369 -3.4004659391939640e-03</internalNodes>\n          <leafValues>\n            1.0470719635486603e-01 -4.0939141064882278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6370 2.7091780211776495e-03</internalNodes>\n          <leafValues>\n            -6.0524601489305496e-02 1.3978950679302216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6371 -1.7439300194382668e-02</internalNodes>\n          <leafValues>\n            -3.2391169667243958e-01 1.4630249701440334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6372 -1.2598330155014992e-02</internalNodes>\n          <leafValues>\n            -2.0682629942893982e-01 2.5501869618892670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6373 1.8755869939923286e-02</internalNodes>\n          <leafValues>\n            -4.7925960272550583e-02 1.0864380002021790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6374 -4.2074159719049931e-03</internalNodes>\n          <leafValues>\n            -8.2077808678150177e-02 6.3647769391536713e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6375 -1.6427719674538821e-04</internalNodes>\n          <leafValues>\n            1.0120390355587006e-01 -3.4067928791046143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6376 4.3847691267728806e-02</internalNodes>\n          <leafValues>\n            6.0980222187936306e-03 -8.3685982227325439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6377 -3.9284680038690567e-02</internalNodes>\n          <leafValues>\n            2.8250560164451599e-01 -2.2389259189367294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6378 3.8550909608602524e-02</internalNodes>\n          <leafValues>\n            1.5570489689707756e-02 -3.3978620171546936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6379 -6.9177031517028809e-02</internalNodes>\n          <leafValues>\n            1.2258320301771164e-01 -1.7850179225206375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6380 -1.9251030171290040e-03</internalNodes>\n          <leafValues>\n            -1.0687749832868576e-01 4.6379510313272476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6381 -8.6635202169418335e-03</internalNodes>\n          <leafValues>\n            9.6412748098373413e-02 -1.7563249915838242e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6382 1.3393509387969971e-01</internalNodes>\n          <leafValues>\n            6.3692941330373287e-03 -7.0170587301254272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6383 4.1082348674535751e-02</internalNodes>\n          <leafValues>\n            -1.1077569797635078e-02 1.3463750481605530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6384 1.4911450445652008e-01</internalNodes>\n          <leafValues>\n            9.5263421535491943e-03 -5.0872552394866943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6385 -5.2500818856060505e-03</internalNodes>\n          <leafValues>\n            7.0025578141212463e-02 -4.2880270630121231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6386 2.2823570296168327e-02</internalNodes>\n          <leafValues>\n            -4.1884049773216248e-02 1.1770319938659668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6387 -8.5306530818343163e-03</internalNodes>\n          <leafValues>\n            6.1222139745950699e-02 -2.4944549426436424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6388 1.1971729807555676e-02</internalNodes>\n          <leafValues>\n            3.9662770926952362e-02 -1.6267740726470947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6389 -3.8938269019126892e-02</internalNodes>\n          <leafValues>\n            2.5743520259857178e-01 -1.6356239095330238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6390 -2.1706389263272285e-02</internalNodes>\n          <leafValues>\n            -3.1998679041862488e-01 1.7135290428996086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6391 6.6900630481541157e-03</internalNodes>\n          <leafValues>\n            2.6101849973201752e-02 -1.0980729758739471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6392 -7.2270832955837250e-02</internalNodes>\n          <leafValues>\n            1.9431130588054657e-01 -2.6044359430670738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6393 -6.7073688842356205e-03</internalNodes>\n          <leafValues>\n            -1.7747850716114044e-01 4.5862998813390732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6394 5.5019360035657883e-02</internalNodes>\n          <leafValues>\n            -8.3471573889255524e-03 6.0511541366577148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6395 1.3142649829387665e-01</internalNodes>\n          <leafValues>\n            -5.7535418309271336e-03 2.9167538881301880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6396 -1.6564460238441825e-03</internalNodes>\n          <leafValues>\n            7.0003032684326172e-02 -6.2690876424312592e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6397 1.5445409715175629e-01</internalNodes>\n          <leafValues>\n            6.1896732077002525e-03 -7.4323302507400513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6398 -5.0357519648969173e-03</internalNodes>\n          <leafValues>\n            -1.1333289742469788e-01 3.8741771131753922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6399 2.2772569209337234e-03</internalNodes>\n          <leafValues>\n            -1.1340530216693878e-01 2.1319400519132614e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6400 3.3173530828207731e-03</internalNodes>\n          <leafValues>\n            4.4273331761360168e-02 -1.0459829866886139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6401 -2.9692800715565681e-02</internalNodes>\n          <leafValues>\n            9.2483766376972198e-02 -2.3342609405517578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6402 6.2937840819358826e-02</internalNodes>\n          <leafValues>\n            -1.2998280115425587e-02 3.8887938857078552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6403 3.6641359329223633e-03</internalNodes>\n          <leafValues>\n            3.2099820673465729e-02 -3.9647988975048065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6404 4.4782999902963638e-03</internalNodes>\n          <leafValues>\n            -4.5701328665018082e-02 1.0697010159492493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6405 1.8147319788113236e-03</internalNodes>\n          <leafValues>\n            -3.2871820032596588e-02 1.0647939890623093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6406 4.8941639252007008e-03</internalNodes>\n          <leafValues>\n            2.7911009266972542e-02 -2.1725590527057648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6407 -4.4425828382372856e-03</internalNodes>\n          <leafValues>\n            -1.3470150530338287e-01 1.0781410150229931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6408 -2.5493400171399117e-02</internalNodes>\n          <leafValues>\n            6.8371468782424927e-01 -7.7452720142900944e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6409 2.7835449203848839e-02</internalNodes>\n          <leafValues>\n            2.4144299328327179e-02 -1.5170599520206451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6410 7.5548859313130379e-03</internalNodes>\n          <leafValues>\n            -4.7643400728702545e-02 1.1925770342350006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6411 1.0329609736800194e-02</internalNodes>\n          <leafValues>\n            1.8646810203790665e-02 -1.6122570633888245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6412 -1.2393389828503132e-02</internalNodes>\n          <leafValues>\n            6.0304921865463257e-01 -7.7566630207002163e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6413 1.3833769597113132e-02</internalNodes>\n          <leafValues>\n            -2.7617299929261208e-02 5.1266878843307495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6414 -2.5669319555163383e-02</internalNodes>\n          <leafValues>\n            2.3801359534263611e-01 -2.3971909657120705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6415 -5.2043660543859005e-03</internalNodes>\n          <leafValues>\n            -1.0721790045499802e-01 2.6645049452781677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6416 3.4628969151526690e-03</internalNodes>\n          <leafValues>\n            5.4313410073518753e-02 -1.3458320498466492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6417 -1.9220679998397827e-02</internalNodes>\n          <leafValues>\n            7.2996392846107483e-02 -4.0652111172676086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6418 -2.5009829550981522e-03</internalNodes>\n          <leafValues>\n            -7.7671296894550323e-02 5.9096541255712509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6419 -8.5285156965255737e-03</internalNodes>\n          <leafValues>\n            4.9050811678171158e-02 -6.4078353345394135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6420 4.3327538296580315e-03</internalNodes>\n          <leafValues>\n            2.5221010670065880e-02 -1.9358980655670166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6421 3.6595970392227173e-02</internalNodes>\n          <leafValues>\n            -1.6262590885162354e-02 1.5651239454746246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6422 -1.1795730097219348e-03</internalNodes>\n          <leafValues>\n            -7.2468072175979614e-02 7.0449486374855042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6423 -1.3975829817354679e-02</internalNodes>\n          <leafValues>\n            -1.1789470165967941e-01 2.1292049437761307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6424 -1.3828700175508857e-03</internalNodes>\n          <leafValues>\n            7.9283542931079865e-02 -9.5104120671749115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6425 -2.9435830656439066e-03</internalNodes>\n          <leafValues>\n            7.0368431508541107e-02 -3.3217910677194595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6426 9.5262555405497551e-03</internalNodes>\n          <leafValues>\n            -2.9733620584011078e-02 1.6670459508895874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6427 -9.0114273130893707e-02</internalNodes>\n          <leafValues>\n            -1.6625370085239410e-01 8.6199166253209114e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6428 -1.2089919764548540e-03</internalNodes>\n          <leafValues>\n            8.1083856523036957e-02 -7.3029123246669769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6429 -1.4199960231781006e-01</internalNodes>\n          <leafValues>\n            -1. 2.2284830920398235e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6430 8.0690719187259674e-03</internalNodes>\n          <leafValues>\n            4.7412220388650894e-02 -1.0178930312395096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6431 -4.7410889528691769e-03</internalNodes>\n          <leafValues>\n            1.2051119655370712e-01 -4.9957480281591415e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6432 -1.6977200284600258e-03</internalNodes>\n          <leafValues>\n            -2.4171440303325653e-01 1.9534369930624962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6433 -2.8892089612782001e-03</internalNodes>\n          <leafValues>\n            2.5727990269660950e-01 -1.1625059880316257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6434 -1.5177440363913774e-03</internalNodes>\n          <leafValues>\n            -9.8784193396568298e-02 4.6706128865480423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6435 1.4197319746017456e-01</internalNodes>\n          <leafValues>\n            -2.5096370372921228e-03 7.5450611114501953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6436 9.7517937421798706e-02</internalNodes>\n          <leafValues>\n            -6.9059049710631371e-03 6.5184432268142700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6437 1.3567379675805569e-02</internalNodes>\n          <leafValues>\n            -7.6325193047523499e-02 8.8054582476615906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6438 8.0981463193893433e-02</internalNodes>\n          <leafValues>\n            1.5558109618723392e-02 -3.4601628780364990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6439 -4.7192731872200966e-03</internalNodes>\n          <leafValues>\n            8.1620022654533386e-02 -4.6072289347648621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6440 2.0368969999253750e-03</internalNodes>\n          <leafValues>\n            -4.4817630201578140e-02 1.2861390411853790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6441 -1.7878509825095534e-03</internalNodes>\n          <leafValues>\n            4.3731331825256348e-02 -4.4995948672294617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6442 -7.1685528382658958e-03</internalNodes>\n          <leafValues>\n            -1.3597999513149261e-01 3.8796991109848022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6443 -6.7460887134075165e-02</internalNodes>\n          <leafValues>\n            -2.9265740513801575e-01 3.5135280340909958e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6444 -1.5598500147461891e-02</internalNodes>\n          <leafValues>\n            2.3105660080909729e-01 -2.2405069321393967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6445 -2.1026479080319405e-02</internalNodes>\n          <leafValues>\n            -1.5283830463886261e-01 3.1531449407339096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6446 -1.0558360069990158e-01</internalNodes>\n          <leafValues>\n            -6.8366038799285889e-01 6.8997950293123722e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6447 -3.6966579500585794e-03</internalNodes>\n          <leafValues>\n            3.4315150231122971e-02 -4.8922799527645111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6448 -6.0826627304777503e-04</internalNodes>\n          <leafValues>\n            -5.2638430148363113e-02 8.9546948671340942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6449 -2.8936540707945824e-02</internalNodes>\n          <leafValues>\n            4.1818480938673019e-02 -1.3818169943988323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6450 -5.8082528412342072e-03</internalNodes>\n          <leafValues>\n            6.7874796688556671e-02 -8.5578799247741699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6451 -4.6095378696918488e-02</internalNodes>\n          <leafValues>\n            -1.2584780156612396e-01 2.0466970279812813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6452 5.2972920238971710e-02</internalNodes>\n          <leafValues>\n            -1.2453259900212288e-02 3.4565049409866333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6453 4.9351599067449570e-02</internalNodes>\n          <leafValues>\n            1.0901239700615406e-02 -4.8506981134414673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6454 4.4377800077199936e-02</internalNodes>\n          <leafValues>\n            9.9294837564229965e-03 -4.3877899646759033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6455 -1.1464890092611313e-01</internalNodes>\n          <leafValues>\n            2.6874598860740662e-01 -9.2000560835003853e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6456 1.6887830197811127e-01</internalNodes>\n          <leafValues>\n            5.7101310230791569e-03 -8.5972881317138672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6457 5.1198098808526993e-02</internalNodes>\n          <leafValues>\n            -8.5723921656608582e-03 1.3395169377326965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6458 -3.0789880547672510e-03</internalNodes>\n          <leafValues>\n            -1.0338760167360306e-01 4.3459478765726089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6459 4.7223128378391266e-02</internalNodes>\n          <leafValues>\n            8.1934239715337753e-03 -4.3803408741950989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6460 -7.6270569115877151e-03</internalNodes>\n          <leafValues>\n            1.8713890016078949e-01 -2.4660250172019005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6461 5.4106907919049263e-03</internalNodes>\n          <leafValues>\n            4.1099831461906433e-02 -7.8868232667446136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6462 -1.4900229871273041e-03</internalNodes>\n          <leafValues>\n            -2.0115040242671967e-01 3.1898159533739090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6463 -8.3831608295440674e-02</internalNodes>\n          <leafValues>\n            5.8017939329147339e-01 -5.2973427809774876e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6464 6.2233800999820232e-03</internalNodes>\n          <leafValues>\n            -3.9786059409379959e-02 1.2283950299024582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6465 1.1475080251693726e-01</internalNodes>\n          <leafValues>\n            -1.1975419707596302e-02 2.1586710214614868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6466 -1.5253260498866439e-03</internalNodes>\n          <leafValues>\n            1.3804529607295990e-01 -3.9941880851984024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6467 -5.2878521382808685e-03</internalNodes>\n          <leafValues>\n            -1.2790650129318237e-01 3.2893560826778412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6468 8.9670647867023945e-04</internalNodes>\n          <leafValues>\n            -1.2481059879064560e-01 4.4544249773025513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6469 3.8421660661697388e-02</internalNodes>\n          <leafValues>\n            7.7155791223049164e-03 -6.5575468540191650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6470 -9.3785318313166499e-04</internalNodes>\n          <leafValues>\n            5.5608510971069336e-02 -8.9876912534236908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6471 1.9965849351137877e-03</internalNodes>\n          <leafValues>\n            -2.5297610089182854e-02 1.9413180649280548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6472 4.5782068627886474e-04</internalNodes>\n          <leafValues>\n            3.9089199155569077e-02 -1.2908570468425751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6473 3.8373940624296665e-03</internalNodes>\n          <leafValues>\n            -2.8748869895935059e-02 1.9429750740528107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6474 3.7142829387448728e-04</internalNodes>\n          <leafValues>\n            3.8272358477115631e-02 -1.3759189844131470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6475 7.5116259977221489e-03</internalNodes>\n          <leafValues>\n            -1.4461129903793335e-02 1.2656949460506439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6476 -5.0362840294837952e-02</internalNodes>\n          <leafValues>\n            3.5183578729629517e-01 -1.4051860198378563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6477 3.9921641349792480e-02</internalNodes>\n          <leafValues>\n            2.7280429378151894e-02 -1.9958199560642242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6478 2.2605259716510773e-01</internalNodes>\n          <leafValues>\n            -6.8001961335539818e-03 7.3006898164749146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6479 1.1081779748201370e-01</internalNodes>\n          <leafValues>\n            4.3370737694203854e-03 -8.6829161643981934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6480 -9.7494889050722122e-03</internalNodes>\n          <leafValues>\n            -6.3740663230419159e-02 8.4537997841835022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6481 -2.2887689992785454e-03</internalNodes>\n          <leafValues>\n            9.9654018878936768e-02 -4.1565418243408203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6482 2.0008319988846779e-03</internalNodes>\n          <leafValues>\n            -5.5650699883699417e-02 1.0709869861602783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6483 -1.5160050243139267e-02</internalNodes>\n          <leafValues>\n            -1.4098760485649109e-01 3.8741599768400192e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6484 -6.3132969662547112e-03</internalNodes>\n          <leafValues>\n            -1. 4.4605308212339878e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6485 -1.3970009982585907e-02</internalNodes>\n          <leafValues>\n            1.2481089681386948e-01 -2.1425830200314522e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6486 -4.4321279972791672e-02</internalNodes>\n          <leafValues>\n            -5.3340071439743042e-01 1.0165239684283733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6487 1.4885979471728206e-03</internalNodes>\n          <leafValues>\n            -4.8868600279092789e-02 3.6077901721000671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6488 6.5139681100845337e-02</internalNodes>\n          <leafValues>\n            7.6331058517098427e-03 -5.8781641721725464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6489 -2.0741410553455353e-02</internalNodes>\n          <leafValues>\n            -2.9658278822898865e-01 1.8622800707817078e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>396</maxWeakCount>\n      <stageThreshold>-1.2181390523910522e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 6490 1.3575689867138863e-02</internalNodes>\n          <leafValues>\n            -1.4249590039253235e-01 2.3337620496749878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6491 -7.5882389210164547e-03</internalNodes>\n          <leafValues>\n            8.6464479565620422e-02 -2.3954319953918457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6492 4.2986529879271984e-03</internalNodes>\n          <leafValues>\n            5.0282090902328491e-02 -3.5250121355056763e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6493 -1.9793119281530380e-02</internalNodes>\n          <leafValues>\n            -1.6827470064163208e-01 4.3712720274925232e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6494 6.6613829694688320e-03</internalNodes>\n          <leafValues>\n            -2.0371539890766144e-01 7.1225747466087341e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6495 3.2715050037950277e-03</internalNodes>\n          <leafValues>\n            5.4536718875169754e-02 -2.2428829967975616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6496 -3.6143321543931961e-02</internalNodes>\n          <leafValues>\n            5.5044889450073242e-01 -2.3597210645675659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6497 3.1145319808274508e-03</internalNodes>\n          <leafValues>\n            2.2049430757761002e-02 -3.0109429359436035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6498 8.9540961198508739e-04</internalNodes>\n          <leafValues>\n            -1.2279850244522095e-01 1.0751420259475708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6499 8.0573331797495484e-04</internalNodes>\n          <leafValues>\n            -8.7587781250476837e-02 5.4632049053907394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6500 -6.5726130269467831e-03</internalNodes>\n          <leafValues>\n            -1.5649870038032532e-01 7.6560758054256439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6501 2.2269350010901690e-03</internalNodes>\n          <leafValues>\n            2.9490780085325241e-02 -5.9210199862718582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6502 6.2076752074062824e-03</internalNodes>\n          <leafValues>\n            7.5727343559265137e-02 -1.7675329744815826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6503 6.0021011158823967e-03</internalNodes>\n          <leafValues>\n            -7.8353807330131531e-02 1.4492890238761902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6504 1.1996340006589890e-02</internalNodes>\n          <leafValues>\n            2.8644030913710594e-02 -3.1982469558715820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6505 6.7174229770898819e-03</internalNodes>\n          <leafValues>\n            -1.0739900171756744e-01 1.3106329739093781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6506 5.7567027397453785e-04</internalNodes>\n          <leafValues>\n            -6.4126797020435333e-02 1.6293540596961975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6507 3.9552329108119011e-03</internalNodes>\n          <leafValues>\n            3.7347421050071716e-02 -1.5253570675849915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6508 1.5598450554534793e-03</internalNodes>\n          <leafValues>\n            -9.8687313497066498e-02 9.8718203604221344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6509 -8.4324590861797333e-03</internalNodes>\n          <leafValues>\n            2.0905649662017822e-01 -6.0484018176794052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6510 8.7580326944589615e-03</internalNodes>\n          <leafValues>\n            5.0603430718183517e-02 -2.1845470368862152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6511 -1.1965750157833099e-01</internalNodes>\n          <leafValues>\n            2.6711589097976685e-01 -7.4574039317667484e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6512 2.0653149113059044e-03</internalNodes>\n          <leafValues>\n            3.5194810479879379e-02 -2.5230750441551208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6513 -5.7491107145324349e-04</internalNodes>\n          <leafValues>\n            8.2424223423004150e-02 -1.0830479860305786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6514 -6.7591401748359203e-03</internalNodes>\n          <leafValues>\n            -1.3704189658164978e-01 7.0154368877410889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6515 1.8210740759968758e-02</internalNodes>\n          <leafValues>\n            -2.5407770648598671e-02 1.0123729705810547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6516 -8.8006846606731415e-02</internalNodes>\n          <leafValues>\n            3.6638718843460083e-01 -3.0893180519342422e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6517 -4.4944360852241516e-03</internalNodes>\n          <leafValues>\n            -1.5753810107707977e-01 6.0070630162954330e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6518 -6.3741360791027546e-03</internalNodes>\n          <leafValues>\n            2.1189889311790466e-01 -3.9567999541759491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6519 -3.1097440049052238e-02</internalNodes>\n          <leafValues>\n            -5.9965521097183228e-01 9.9493442103266716e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6520 5.8496380224823952e-03</internalNodes>\n          <leafValues>\n            2.8244689106941223e-02 -2.9778000712394714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6521 -2.2763800807297230e-03</internalNodes>\n          <leafValues>\n            1.0270419716835022e-01 -7.3711991310119629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6522 3.9103049784898758e-03</internalNodes>\n          <leafValues>\n            5.2445668727159500e-02 -2.0123919844627380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6523 2.8906730003654957e-03</internalNodes>\n          <leafValues>\n            -2.1692280471324921e-01 3.7294570356607437e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6524 4.5904931612312794e-03</internalNodes>\n          <leafValues>\n            -8.1276580691337585e-02 1.1013159900903702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6525 -3.4245800226926804e-02</internalNodes>\n          <leafValues>\n            -1.1541730165481567e-01 1.4384049922227859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6526 -1.7881620442494750e-04</internalNodes>\n          <leafValues>\n            6.2885977327823639e-02 -1.3267129659652710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6527 -4.0114559233188629e-03</internalNodes>\n          <leafValues>\n            -1.8961720168590546e-01 3.6701768636703491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6528 3.1429999507963657e-03</internalNodes>\n          <leafValues>\n            -4.9915120005607605e-02 1.7299769818782806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6529 7.8082352876663208e-02</internalNodes>\n          <leafValues>\n            4.7195390798151493e-03 -3.4015879034996033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6530 2.0370949804782867e-01</internalNodes>\n          <leafValues>\n            -2.1733140572905540e-02 3.7422651052474976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6531 9.7424820065498352e-02</internalNodes>\n          <leafValues>\n            -6.8117439514026046e-04 4.9639159440994263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6532 -2.6366419624537230e-03</internalNodes>\n          <leafValues>\n            -1.8532100319862366e-01 4.3768830597400665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6533 4.1020149365067482e-04</internalNodes>\n          <leafValues>\n            2.7802910655736923e-02 -8.7706968188285828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6534 -5.9666559100151062e-02</internalNodes>\n          <leafValues>\n            -5.6872707605361938e-01 1.3388640247285366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6535 -5.1892381161451340e-03</internalNodes>\n          <leafValues>\n            5.0499498844146729e-02 -1.4465869963169098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6536 1.0377140343189240e-01</internalNodes>\n          <leafValues>\n            -1.8952060490846634e-02 4.1107979416847229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6537 -1.4075759798288345e-02</internalNodes>\n          <leafValues>\n            -2.0367360115051270e-01 3.2513279467821121e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6538 -6.8877148441970348e-03</internalNodes>\n          <leafValues>\n            1.2401729822158813e-01 -7.6617129147052765e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6539 2.9345849528908730e-02</internalNodes>\n          <leafValues>\n            8.4471162408590317e-03 -3.4656980633735657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6540 -8.3123557269573212e-03</internalNodes>\n          <leafValues>\n            -1.9180110096931458e-01 3.8585629314184189e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6541 6.4493268728256226e-02</internalNodes>\n          <leafValues>\n            -2.7158880606293678e-02 3.0217999219894409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6542 8.0413377145305276e-04</internalNodes>\n          <leafValues>\n            -1.0444170236587524e-01 6.4721979200839996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6543 -6.5569980069994926e-03</internalNodes>\n          <leafValues>\n            -1.0658600181341171e-01 2.5238489732146263e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6544 -3.8326930254697800e-02</internalNodes>\n          <leafValues>\n            -6.8506389856338501e-01 9.6486946567893028e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6545 -4.0327329188585281e-02</internalNodes>\n          <leafValues>\n            1.9759850203990936e-01 -2.5184169411659241e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6546 6.1981407925486565e-03</internalNodes>\n          <leafValues>\n            4.6415790915489197e-02 -1.7171670496463776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6547 3.7465501576662064e-02</internalNodes>\n          <leafValues>\n            -1.5010279603302479e-02 8.6962252855300903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6548 -6.0584479942917824e-03</internalNodes>\n          <leafValues>\n            6.9242753088474274e-02 -9.4594202935695648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6549 -1.4991699717938900e-02</internalNodes>\n          <leafValues>\n            -1.4969819784164429e-01 4.6579450368881226e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6550 6.4760357141494751e-02</internalNodes>\n          <leafValues>\n            -2.6089169085025787e-02 2.7072009444236755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6551 5.9020328521728516e-01</internalNodes>\n          <leafValues>\n            3.9715780876576900e-03 -6.3918071985244751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6552 7.3892213404178619e-02</internalNodes>\n          <leafValues>\n            -6.2506332993507385e-02 1.3100719451904297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6553 4.3928170204162598e-01</internalNodes>\n          <leafValues>\n            5.0452877767384052e-03 -3.7628439068794250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6554 1.0192040354013443e-01</internalNodes>\n          <leafValues>\n            2.2053290158510208e-02 -3.3408200740814209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6555 1.1084219813346863e-01</internalNodes>\n          <leafValues>\n            1.6215540468692780e-02 -3.4900701045989990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6556 5.5628088302910328e-03</internalNodes>\n          <leafValues>\n            -5.2196711301803589e-02 1.1796370148658752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6557 -6.3897081417962909e-04</internalNodes>\n          <leafValues>\n            -1.5659700334072113e-01 4.4744450598955154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6558 -3.5426639951765537e-03</internalNodes>\n          <leafValues>\n            1.4490570127964020e-01 -4.2518708854913712e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6559 -3.3016160130500793e-02</internalNodes>\n          <leafValues>\n            -3.6942940950393677e-01 7.6470980420708656e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6560 9.6050858497619629e-02</internalNodes>\n          <leafValues>\n            6.5154801122844219e-03 -8.7827038764953613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6561 -4.9572009593248367e-02</internalNodes>\n          <leafValues>\n            -4.2723020911216736e-01 3.1567770056426525e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6562 2.5885479408316314e-04</internalNodes>\n          <leafValues>\n            -1.5689669549465179e-01 3.8051828742027283e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6563 -1.5898289857432246e-03</internalNodes>\n          <leafValues>\n            -1.8845720589160919e-01 2.4630049243569374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6564 -1.3463890354614705e-04</internalNodes>\n          <leafValues>\n            1.4452700316905975e-01 -4.4172260910272598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6565 1.1674249544739723e-02</internalNodes>\n          <leafValues>\n            -2.5676380842924118e-02 1.9527709484100342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6566 -2.3507000878453255e-02</internalNodes>\n          <leafValues>\n            -3.2271888852119446e-01 1.8514839932322502e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6567 3.1225800514221191e-02</internalNodes>\n          <leafValues>\n            -1.9622299820184708e-02 1.4570100605487823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6568 8.0607319250702858e-04</internalNodes>\n          <leafValues>\n            4.4379990547895432e-02 -1.3635620474815369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6569 -2.6445880532264709e-01</internalNodes>\n          <leafValues>\n            4.1771200299263000e-01 -6.3821650110185146e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6570 3.5479381680488586e-02</internalNodes>\n          <leafValues>\n            -2.2758480161428452e-02 2.6946100592613220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6571 -3.8137599825859070e-02</internalNodes>\n          <leafValues>\n            -3.6719909310340881e-01 1.8722059205174446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6572 3.9108810015022755e-03</internalNodes>\n          <leafValues>\n            -1.8176819384098053e-01 3.9054948836565018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6573 4.1834539733827114e-03</internalNodes>\n          <leafValues>\n            4.8676248639822006e-02 -1.3558860123157501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6574 -4.6641420572996140e-02</internalNodes>\n          <leafValues>\n            -5.8741682767868042e-01 9.8590552806854248e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6575 1.1950139887630939e-02</internalNodes>\n          <leafValues>\n            -2.5506049394607544e-02 2.7971199154853821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6576 -6.3585072755813599e-02</internalNodes>\n          <leafValues>\n            -7.0940697193145752e-01 8.8691459968686104e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6577 9.7221415489912033e-03</internalNodes>\n          <leafValues>\n            -2.7885029092431068e-02 5.4626680910587311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6578 -1.6111459583044052e-02</internalNodes>\n          <leafValues>\n            -6.8265482783317566e-02 8.0932967364788055e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6579 -7.9950511455535889e-02</internalNodes>\n          <leafValues>\n            2.0425680279731750e-01 -3.4306850284337997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6580 3.1421340536326170e-03</internalNodes>\n          <leafValues>\n            4.2196881026029587e-02 -1.5366910398006439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6581 2.9253180400701240e-05</internalNodes>\n          <leafValues>\n            -7.6382257044315338e-02 3.1748879700899124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6582 -5.4587088525295258e-02</internalNodes>\n          <leafValues>\n            -6.4891487360000610e-01 9.1545386239886284e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6583 -2.1083420142531395e-02</internalNodes>\n          <leafValues>\n            1.9058999419212341e-01 -2.4686640128493309e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6584 3.9170900708995759e-04</internalNodes>\n          <leafValues>\n            -1.0570889711380005e-01 5.2946768701076508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6585 2.2588829696178436e-01</internalNodes>\n          <leafValues>\n            2.3077470250427723e-03 -9.2606049776077271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6586 -1.8899979069828987e-02</internalNodes>\n          <leafValues>\n            1.4503970742225647e-01 -3.8506619632244110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6587 -8.7533425539731979e-03</internalNodes>\n          <leafValues>\n            8.3958826959133148e-02 -3.7479098886251450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6588 -2.0821259915828705e-01</internalNodes>\n          <leafValues>\n            -6.7948538064956665e-01 9.8609952256083488e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6589 1.6270060092210770e-02</internalNodes>\n          <leafValues>\n            1.4115580357611179e-02 -1.8218359351158142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6590 3.0145489145070314e-03</internalNodes>\n          <leafValues>\n            5.2013739943504333e-02 -1.1450190097093582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6591 1.8547449260950089e-02</internalNodes>\n          <leafValues>\n            -2.5681620463728905e-02 1.6456380486488342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6592 4.2732958681881428e-03</internalNodes>\n          <leafValues>\n            -5.9573240578174591e-02 1.0390280187129974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6593 -2.8249630704522133e-02</internalNodes>\n          <leafValues>\n            -7.8161589801311493e-02 2.9064230620861053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6594 -1.5538600273430347e-02</internalNodes>\n          <leafValues>\n            -1.4481380581855774e-01 3.8434058427810669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6595 3.8620950654149055e-03</internalNodes>\n          <leafValues>\n            -3.8745380938053131e-02 9.8183527588844299e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6596 1.5253369696438313e-02</internalNodes>\n          <leafValues>\n            1.7946500331163406e-02 -3.0948030948638916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6597 -4.2140888981521130e-03</internalNodes>\n          <leafValues>\n            5.7521570473909378e-02 -2.7782430872321129e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6598 -2.1610679104924202e-03</internalNodes>\n          <leafValues>\n            1.0617449879646301e-01 -5.9411250054836273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6599 -1.8687519477680326e-03</internalNodes>\n          <leafValues>\n            -1.2807689607143402e-01 4.7781638801097870e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6600 -6.2083022203296423e-04</internalNodes>\n          <leafValues>\n            1.1725349724292755e-01 -4.7861199826002121e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6601 -2.5575871113687754e-03</internalNodes>\n          <leafValues>\n            5.7900648564100266e-02 -8.4036856889724731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6602 4.1207410395145416e-03</internalNodes>\n          <leafValues>\n            5.4239779710769653e-02 -1.2611140310764313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6603 1.7525779083371162e-02</internalNodes>\n          <leafValues>\n            2.8792750090360641e-02 -1.9793170690536499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6604 -1.9012490287423134e-02</internalNodes>\n          <leafValues>\n            1.1444319784641266e-01 -6.6813051700592041e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6605 9.5198452472686768e-03</internalNodes>\n          <leafValues>\n            -3.9105638861656189e-02 8.8588982820510864e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6606 7.7857482247054577e-03</internalNodes>\n          <leafValues>\n            4.7903850674629211e-02 -1.1941280215978622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6607 -2.5355129037052393e-03</internalNodes>\n          <leafValues>\n            6.1377499252557755e-02 -5.1576390862464905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6608 1.3886679708957672e-01</internalNodes>\n          <leafValues>\n            7.1258218958973885e-03 -7.5076061487197876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6609 -3.0958889983594418e-03</internalNodes>\n          <leafValues>\n            7.3432266712188721e-02 -4.0409181267023087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6610 4.7118910588324070e-03</internalNodes>\n          <leafValues>\n            2.2374270483851433e-02 -2.3885080218315125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6611 6.3587618060410023e-03</internalNodes>\n          <leafValues>\n            5.3684379905462265e-02 -1.3398240506649017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6612 6.8367011845111847e-02</internalNodes>\n          <leafValues>\n            -3.6103919148445129e-02 1.7410080134868622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6613 -3.2802459318190813e-03</internalNodes>\n          <leafValues>\n            -1.4603079855442047e-01 4.8215139657258987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6614 -6.6430270671844482e-02</internalNodes>\n          <leafValues>\n            4.6738991141319275e-01 -1.3140380382537842e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6615 -4.2274069041013718e-02</internalNodes>\n          <leafValues>\n            -6.3253331184387207e-01 1.0359439998865128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6616 -1.0691370116546750e-03</internalNodes>\n          <leafValues>\n            -1.1469829827547073e-01 4.5048121362924576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6617 5.4235469549894333e-02</internalNodes>\n          <leafValues>\n            -1.9809609279036522e-02 3.1430730223655701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6618 -7.2852471930673346e-06</internalNodes>\n          <leafValues>\n            5.8051250874996185e-02 -1.0246170312166214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6619 2.0893309265375137e-02</internalNodes>\n          <leafValues>\n            1.5608809888362885e-02 -2.1545739471912384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6620 -5.3765181452035904e-02</internalNodes>\n          <leafValues>\n            2.0559239387512207e-01 -3.2525919377803802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6621 -1.5972670167684555e-02</internalNodes>\n          <leafValues>\n            -1.7119890451431274e-01 1.4773829840123653e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6622 -1.4591409824788570e-02</internalNodes>\n          <leafValues>\n            -2.3046019673347473e-01 2.3345010355114937e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6623 2.4016639217734337e-03</internalNodes>\n          <leafValues>\n            -2.8272429481148720e-02 9.5124237239360809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6624 -2.0430689677596092e-02</internalNodes>\n          <leafValues>\n            4.0655559301376343e-01 -1.6212539747357368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6625 8.1926792860031128e-02</internalNodes>\n          <leafValues>\n            8.7937163189053535e-03 -4.0210300683975220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6626 -1.2892849743366241e-02</internalNodes>\n          <leafValues>\n            -1.1946929991245270e-01 4.5022130012512207e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6627 9.4712682068347931e-02</internalNodes>\n          <leafValues>\n            -1.0760080069303513e-02 2.1693980693817139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6628 4.0901689790189266e-03</internalNodes>\n          <leafValues>\n            -8.4592603147029877e-02 7.0457696914672852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6629 -1.2496539950370789e-01</internalNodes>\n          <leafValues>\n            2.8276950120925903e-01 -4.2760102078318596e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6630 1.5758169814944267e-02</internalNodes>\n          <leafValues>\n            -4.8926588147878647e-02 1.2380229681730270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6631 -5.2818129770457745e-03</internalNodes>\n          <leafValues>\n            6.1836440116167068e-02 -3.6712940782308578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6632 8.6735859513282776e-03</internalNodes>\n          <leafValues>\n            -4.7372240573167801e-02 1.5809150040149689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6633 -5.2273580804467201e-03</internalNodes>\n          <leafValues>\n            -1.1694569885730743e-01 2.9156440868973732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6634 6.1831828206777573e-02</internalNodes>\n          <leafValues>\n            8.0447606742382050e-03 -6.8530529737472534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6635 6.6815607249736786e-02</internalNodes>\n          <leafValues>\n            -8.4813889116048813e-03 1.4523769915103912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6636 -1.0062000155448914e-01</internalNodes>\n          <leafValues>\n            7.4605828523635864e-01 -6.8016690202057362e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6637 -1.4751539565622807e-02</internalNodes>\n          <leafValues>\n            -1.4893519878387451e-01 3.9579190313816071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6638 3.4616589546203613e-02</internalNodes>\n          <leafValues>\n            -2.0749099552631378e-02 2.8549820184707642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6639 -1.2966389954090118e-01</internalNodes>\n          <leafValues>\n            -5.5446487665176392e-01 4.6082548797130585e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6640 7.4035510420799255e-02</internalNodes>\n          <leafValues>\n            5.3174998611211777e-03 -8.4149527549743652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6641 1.0177110135555267e-01</internalNodes>\n          <leafValues>\n            -7.6451660133898258e-03 3.5442221164703369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6642 8.9658737182617188e-02</internalNodes>\n          <leafValues>\n            -9.3901483342051506e-03 5.0577938556671143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6643 -1.6180740296840668e-01</internalNodes>\n          <leafValues>\n            -6.5451782941818237e-01 8.7116202339529991e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6644 1.8784119747579098e-03</internalNodes>\n          <leafValues>\n            5.2064418792724609e-02 -9.0741947293281555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6645 1.9505689851939678e-03</internalNodes>\n          <leafValues>\n            -5.4091621190309525e-02 3.5506200045347214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6646 -6.0789179988205433e-03</internalNodes>\n          <leafValues>\n            1.2238519638776779e-01 -4.6803738921880722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6647 -2.2403250634670258e-01</internalNodes>\n          <leafValues>\n            -7.7728492021560669e-01 2.3639709688723087e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6648 -1.3039590418338776e-01</internalNodes>\n          <leafValues>\n            -2.7692648768424988e-01 2.1548289805650711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6649 7.2587423026561737e-02</internalNodes>\n          <leafValues>\n            1.0621299967169762e-02 -1.6270780563354492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6650 7.3180042207241058e-02</internalNodes>\n          <leafValues>\n            -1.7519259825348854e-02 3.3697870373725891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6651 -3.4525979310274124e-02</internalNodes>\n          <leafValues>\n            -5.3538697957992554e-01 1.0397709906101227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6652 2.3753559216856956e-03</internalNodes>\n          <leafValues>\n            5.1910828799009323e-02 -9.6959516406059265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6653 -6.8947779946029186e-03</internalNodes>\n          <leafValues>\n            8.2409977912902832e-02 -2.3098999634385109e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6654 -9.4773292541503906e-02</internalNodes>\n          <leafValues>\n            -7.0510691404342651e-01 7.7322297729551792e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6655 5.6327427737414837e-03</internalNodes>\n          <leafValues>\n            1.7960680648684502e-02 -7.2307042777538300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6656 6.6090249456465244e-03</internalNodes>\n          <leafValues>\n            -3.6701079457998276e-02 1.3706339895725250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6657 -2.4978399276733398e-02</internalNodes>\n          <leafValues>\n            -1.6281390190124512e-01 7.6992698013782501e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6658 -6.0882410034537315e-03</internalNodes>\n          <leafValues>\n            1.0555619746446609e-01 -4.8507411032915115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6659 6.1161588877439499e-02</internalNodes>\n          <leafValues>\n            1.1127579491585493e-03 -5.6657880544662476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6660 -3.8722809404134750e-02</internalNodes>\n          <leafValues>\n            -5.9797358512878418e-01 8.4153199568390846e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6661 6.2335198745131493e-03</internalNodes>\n          <leafValues>\n            3.1563021242618561e-02 -1.8769240379333496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6662 1.6939510405063629e-01</internalNodes>\n          <leafValues>\n            -1.7183739691972733e-02 3.1440049409866333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6663 8.5851341485977173e-02</internalNodes>\n          <leafValues>\n            5.7081878185272217e-03 -4.9966809153556824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6664 -2.0315010100603104e-02</internalNodes>\n          <leafValues>\n            -1.2359900027513504e-01 4.4704839587211609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6665 -4.0276069194078445e-03</internalNodes>\n          <leafValues>\n            4.7957219183444977e-02 -9.7137056291103363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6666 -3.9274509996175766e-02</internalNodes>\n          <leafValues>\n            1.8804270029067993e-01 -2.9754199087619781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6667 -2.1163629367947578e-02</internalNodes>\n          <leafValues>\n            -1.5724900364875793e-01 3.9636529982089996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6668 4.0783579461276531e-03</internalNodes>\n          <leafValues>\n            -4.7562818974256516e-02 1.0976249724626541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6669 1.0180410463362932e-03</internalNodes>\n          <leafValues>\n            -6.6306091845035553e-02 9.8773077130317688e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6670 2.8516049496829510e-03</internalNodes>\n          <leafValues>\n            -5.1101740449666977e-02 9.6994958817958832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6671 4.8373742029070854e-03</internalNodes>\n          <leafValues>\n            4.0866550058126450e-02 -1.2480360269546509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6672 -3.4715479705482721e-04</internalNodes>\n          <leafValues>\n            4.1778691112995148e-02 -1.2574540078639984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6673 -6.3760261982679367e-03</internalNodes>\n          <leafValues>\n            1.5754230320453644e-01 -4.1692778468132019e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6674 -1.2534069828689098e-02</internalNodes>\n          <leafValues>\n            -1.3565440475940704e-01 4.1295569390058517e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6675 -2.3321550339460373e-02</internalNodes>\n          <leafValues>\n            1.2518349289894104e-01 -1.3427260331809521e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6676 2.1691620349884033e-03</internalNodes>\n          <leafValues>\n            1.4331200718879700e-01 -3.5120349377393723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6677 -5.0005540251731873e-02</internalNodes>\n          <leafValues>\n            2.1500219404697418e-01 -2.7628419920802116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6678 1.3818169943988323e-02</internalNodes>\n          <leafValues>\n            2.2208500653505325e-02 -2.6048558950424194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6679 -1.1389379948377609e-01</internalNodes>\n          <leafValues>\n            -2.6434680819511414e-01 5.8247619308531284e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6680 1.4204699546098709e-03</internalNodes>\n          <leafValues>\n            -7.1546286344528198e-02 7.0379182696342468e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6681 1.2329610064625740e-02</internalNodes>\n          <leafValues>\n            2.9475130140781403e-02 -1.9224089384078979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6682 3.4679430536925793e-03</internalNodes>\n          <leafValues>\n            -6.1920940876007080e-02 9.0893089771270752e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6683 -1.2088479846715927e-01</internalNodes>\n          <leafValues>\n            4.6626859903335571e-01 -2.7361230459064245e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6684 -1.5827519819140434e-02</internalNodes>\n          <leafValues>\n            -9.5342837274074554e-02 5.5003169924020767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6685 -5.3695850074291229e-03</internalNodes>\n          <leafValues>\n            1.6891020536422729e-01 -4.6700950711965561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6686 5.2695080637931824e-02</internalNodes>\n          <leafValues>\n            -5.6889699772000313e-03 9.0487861633300781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6687 -1.1397979687899351e-03</internalNodes>\n          <leafValues>\n            3.4316681325435638e-02 -7.5787901878356934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6688 -2.8946578968316317e-03</internalNodes>\n          <leafValues>\n            7.5482390820980072e-02 -7.6466552913188934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6689 -5.1091420464217663e-03</internalNodes>\n          <leafValues>\n            -1.2294950336217880e-01 4.9972750246524811e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6690 1.8837359966710210e-03</internalNodes>\n          <leafValues>\n            4.3406400829553604e-02 -1.2572230398654938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6691 1.5422919765114784e-02</internalNodes>\n          <leafValues>\n            1.5831289812922478e-02 -2.0917390286922455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6692 2.1666040644049644e-02</internalNodes>\n          <leafValues>\n            -2.4713400751352310e-02 2.4171669781208038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6693 -9.4336412847042084e-02</internalNodes>\n          <leafValues>\n            8.0389547348022461e-01 -2.6913180481642485e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6694 -6.0154758393764496e-03</internalNodes>\n          <leafValues>\n            -1.3231749832630157e-01 4.9613710492849350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6695 4.3775320053100586e-02</internalNodes>\n          <leafValues>\n            4.5396219938993454e-03 -5.8732748031616211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6696 1.0561950039118528e-03</internalNodes>\n          <leafValues>\n            -8.8057562708854675e-02 7.1294106543064117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6697 -1.6394529957324266e-03</internalNodes>\n          <leafValues>\n            9.0810842812061310e-02 -3.7760701030492783e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6698 2.6742160320281982e-01</internalNodes>\n          <leafValues>\n            9.4182817265391350e-03 -5.2740138769149780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6699 -2.1629330515861511e-01</internalNodes>\n          <leafValues>\n            -6.1128187179565430e-01 5.2118571475148201e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6700 -2.6974570751190186e-01</internalNodes>\n          <leafValues>\n            -7.3394459486007690e-01 6.0041057877242565e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6701 -6.0050850734114647e-03</internalNodes>\n          <leafValues>\n            1.1067090183496475e-01 -2.0614199340343475e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6702 4.9247939139604568e-02</internalNodes>\n          <leafValues>\n            1.0287189856171608e-02 -4.9581390619277954e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6703 4.9235569313168526e-03</internalNodes>\n          <leafValues>\n            1.4880360104143620e-02 -1.1287470161914825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6704 -8.2946997135877609e-03</internalNodes>\n          <leafValues>\n            5.6476062536239624e-01 -1.0442149825394154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6705 2.3567330092191696e-02</internalNodes>\n          <leafValues>\n            -2.9235871043056250e-03 2.4979250133037567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6706 -4.1040919721126556e-02</internalNodes>\n          <leafValues>\n            4.0030491352081299e-01 -1.3312620110809803e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6707 -5.3690220229327679e-03</internalNodes>\n          <leafValues>\n            -2.9186370968818665e-01 1.6781600192189217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6708 3.6616099532693624e-03</internalNodes>\n          <leafValues>\n            -4.7920960932970047e-02 1.0898339748382568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6709 -2.4735789746046066e-02</internalNodes>\n          <leafValues>\n            6.7270919680595398e-02 -1.6207970678806305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6710 8.6064152419567108e-03</internalNodes>\n          <leafValues>\n            -6.0250200331211090e-02 1.0674320161342621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6711 -3.3892609179019928e-02</internalNodes>\n          <leafValues>\n            -1.9795329868793488e-01 1.9014969468116760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6712 1.0522030293941498e-01</internalNodes>\n          <leafValues>\n            6.0530952177941799e-03 -7.5238007307052612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6713 -5.9583578258752823e-03</internalNodes>\n          <leafValues>\n            9.9094383418560028e-02 -3.5570640116930008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6714 2.7306210249662399e-03</internalNodes>\n          <leafValues>\n            -8.8879808783531189e-02 6.4843989908695221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6715 4.3243571417406201e-04</internalNodes>\n          <leafValues>\n            3.2528489828109741e-02 -9.1479070484638214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6716 -5.2608880214393139e-03</internalNodes>\n          <leafValues>\n            1.3896170258522034e-01 -4.0624819695949554e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6717 -1.5605129301548004e-01</internalNodes>\n          <leafValues>\n            -7.3170071840286255e-01 2.5103189982473850e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6718 -1.1245990172028542e-02</internalNodes>\n          <leafValues>\n            -1.1834110319614410e-01 5.2261721342802048e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6719 -9.2654878972098231e-04</internalNodes>\n          <leafValues>\n            4.3350778520107269e-02 -7.6521359384059906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6720 1.5148459933698177e-03</internalNodes>\n          <leafValues>\n            -7.1485839784145355e-02 7.3206916451454163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6721 4.6230577863752842e-03</internalNodes>\n          <leafValues>\n            2.0211879163980484e-02 -4.6565961092710495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6722 1.2555140256881714e-01</internalNodes>\n          <leafValues>\n            9.2135155573487282e-03 -5.4831707477569580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6723 4.0751680731773376e-02</internalNodes>\n          <leafValues>\n            -4.5771248638629913e-02 5.6990999728441238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6724 -2.2074349224567413e-02</internalNodes>\n          <leafValues>\n            -3.9075499773025513e-01 1.1654710397124290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6725 1.2412919849157333e-01</internalNodes>\n          <leafValues>\n            -6.0688108205795288e-03 2.6376709342002869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6726 6.0741119086742401e-03</internalNodes>\n          <leafValues>\n            1.0768520087003708e-01 -5.0139870494604111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6727 -1.4694149792194366e-01</internalNodes>\n          <leafValues>\n            -4.3452548980712891e-01 5.5836569517850876e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6728 -1.2046460062265396e-01</internalNodes>\n          <leafValues>\n            -5.4068279266357422e-01 9.8318615928292274e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6729 -9.0990159660577774e-03</internalNodes>\n          <leafValues>\n            -1.3625259697437286e-01 9.5357475802302361e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6730 1.0966449975967407e-02</internalNodes>\n          <leafValues>\n            -3.1344298273324966e-02 1.7068630456924438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6731 -2.1763380616903305e-02</internalNodes>\n          <leafValues>\n            7.3918178677558899e-02 -1.7846420407295227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6732 -4.9578789621591568e-02</internalNodes>\n          <leafValues>\n            -5.8034032583236694e-01 1.0063209570944309e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6733 -6.6796392202377319e-03</internalNodes>\n          <leafValues>\n            -4.7280300408601761e-02 3.8668069988489151e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6734 -1.0112039744853973e-03</internalNodes>\n          <leafValues>\n            4.5412030071020126e-02 -1.4603359997272491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6735 2.5813570246100426e-03</internalNodes>\n          <leafValues>\n            3.1112480908632278e-02 -1.0001499950885773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6736 2.0418369676917791e-03</internalNodes>\n          <leafValues>\n            4.8378061503171921e-02 -1.4722709357738495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6737 5.6246068328619003e-02</internalNodes>\n          <leafValues>\n            3.7779449485242367e-03 -6.1013627052307129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6738 -2.6130750775337219e-02</internalNodes>\n          <leafValues>\n            2.6240581274032593e-01 -2.4313600733876228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6739 -1.2151029892265797e-02</internalNodes>\n          <leafValues>\n            -5.6114129722118378e-02 2.9739160090684891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6740 -5.1036469638347626e-02</internalNodes>\n          <leafValues>\n            2.7955740690231323e-01 -2.1683510392904282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6741 8.7444618344306946e-02</internalNodes>\n          <leafValues>\n            -3.7635879125446081e-03 5.2711361646652222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6742 3.4982790239155293e-03</internalNodes>\n          <leafValues>\n            5.6673228740692139e-02 -9.2554636299610138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6743 9.7861722111701965e-02</internalNodes>\n          <leafValues>\n            3.7442990578711033e-03 -5.4237729310989380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6744 -6.3886200077831745e-03</internalNodes>\n          <leafValues>\n            -9.7468167543411255e-02 6.0299299657344818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6745 -1.0128310322761536e-01</internalNodes>\n          <leafValues>\n            -6.5173667669296265e-01 3.4321940038353205e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6746 -3.9312228560447693e-02</internalNodes>\n          <leafValues>\n            2.6476991176605225e-01 -2.6981310918927193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6747 1.1417990177869797e-01</internalNodes>\n          <leafValues>\n            7.5375889427959919e-03 -6.8553638458251953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6748 8.4078265354037285e-03</internalNodes>\n          <leafValues>\n            -3.0973089858889580e-02 1.7200429737567902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6749 -1.5489499783143401e-03</internalNodes>\n          <leafValues>\n            4.6454809606075287e-02 -6.9261766970157623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6750 2.9730569804087281e-04</internalNodes>\n          <leafValues>\n            3.7772700190544128e-02 -1.3767069578170776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6751 2.8460770845413208e-03</internalNodes>\n          <leafValues>\n            -4.3182320892810822e-02 9.9634610116481781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6752 4.9144420772790909e-02</internalNodes>\n          <leafValues>\n            5.9465290978550911e-03 -8.2366597652435303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6753 1.0286020115017891e-02</internalNodes>\n          <leafValues>\n            2.8591090813279152e-02 -1.5941999852657318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6754 1.9976280629634857e-02</internalNodes>\n          <leafValues>\n            -2.9617030173540115e-02 1.5943069756031036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6755 2.3533409461379051e-02</internalNodes>\n          <leafValues>\n            7.5594270601868629e-03 -2.3041130602359772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6756 -9.0482197701931000e-03</internalNodes>\n          <leafValues>\n            -1.2408699840307236e-01 4.1615001857280731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6757 -3.8635660894215107e-03</internalNodes>\n          <leafValues>\n            8.7811216711997986e-02 -4.1511181741952896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6758 -2.7298410423099995e-03</internalNodes>\n          <leafValues>\n            9.4712667167186737e-02 -5.2838958799839020e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6759 -4.5442068949341774e-03</internalNodes>\n          <leafValues>\n            -1.0748460143804550e-01 1.7744770273566246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6760 2.3271010722965002e-03</internalNodes>\n          <leafValues>\n            -8.3826236426830292e-02 5.7210709899663925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6761 -1.2409550137817860e-02</internalNodes>\n          <leafValues>\n            2.3100300133228302e-01 -2.2110419347882271e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6762 -4.5268908143043518e-03</internalNodes>\n          <leafValues>\n            -1.6244150698184967e-01 3.2564349472522736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6763 -4.4666860048891976e-05</internalNodes>\n          <leafValues>\n            2.4341119825839996e-01 -2.6702800765633583e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6764 7.7015289571136236e-04</internalNodes>\n          <leafValues>\n            -1.2858650088310242e-01 4.2308151721954346e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6765 4.4863048940896988e-02</internalNodes>\n          <leafValues>\n            1.0781999677419662e-02 -3.5814240574836731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6766 3.7869490683078766e-02</internalNodes>\n          <leafValues>\n            -1.4966360293328762e-02 3.4195008873939514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6767 -8.3092376589775085e-03</internalNodes>\n          <leafValues>\n            -2.7514660358428955e-01 2.0139539614319801e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6768 -4.3290119618177414e-02</internalNodes>\n          <leafValues>\n            3.0036559700965881e-01 -1.9493019208312035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6769 -1.0075629688799381e-02</internalNodes>\n          <leafValues>\n            -1.2262579798698425e-01 9.1246366500854492e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6770 -3.3486529719084501e-03</internalNodes>\n          <leafValues>\n            1.1790259927511215e-01 -4.1050188243389130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6771 -6.4645247766748071e-04</internalNodes>\n          <leafValues>\n            -7.8154936432838440e-02 4.6990569680929184e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6772 3.5247370600700378e-02</internalNodes>\n          <leafValues>\n            1.0365270078182220e-02 -5.1507127285003662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6773 3.5965928691439331e-04</internalNodes>\n          <leafValues>\n            -7.7936813235282898e-02 3.0275240540504456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6774 -1.5898740384727716e-03</internalNodes>\n          <leafValues>\n            -1.0594320297241211e-01 5.0036150962114334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6775 -2.1408300846815109e-02</internalNodes>\n          <leafValues>\n            1.1649339646100998e-01 -3.7540700286626816e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6776 -2.7612380217760801e-03</internalNodes>\n          <leafValues>\n            3.4751810133457184e-02 -1.3718530535697937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6777 6.4307968132197857e-03</internalNodes>\n          <leafValues>\n            -1.3667429797351360e-02 1.4938560128211975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6778 -6.9555612280964851e-03</internalNodes>\n          <leafValues>\n            -1.2171459943056107e-01 5.6100189685821533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6779 -2.7654969692230225e-01</internalNodes>\n          <leafValues>\n            -8.5077387094497681e-01 3.8885050453245640e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6780 4.7567309811711311e-03</internalNodes>\n          <leafValues>\n            -6.5594427287578583e-02 7.5947061181068420e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6781 8.9218050241470337e-02</internalNodes>\n          <leafValues>\n            6.5016360022127628e-03 -3.2032990455627441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6782 6.7748151719570160e-02</internalNodes>\n          <leafValues>\n            -1.1878870427608490e-02 4.4954490661621094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6783 4.5336190611124039e-02</internalNodes>\n          <leafValues>\n            7.4317739345133305e-03 -4.3144878745079041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6784 1.0965850204229355e-02</internalNodes>\n          <leafValues>\n            2.5135010480880737e-02 -2.0359070599079132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6785 -6.5938562154769897e-02</internalNodes>\n          <leafValues>\n            4.5524141192436218e-01 -7.5815711170434952e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6786 -4.2270109057426453e-02</internalNodes>\n          <leafValues>\n            3.8470050692558289e-01 -1.1672279797494411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6787 -6.3518402166664600e-03</internalNodes>\n          <leafValues>\n            -8.7010167539119720e-02 3.4159921109676361e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6788 3.2269880175590515e-02</internalNodes>\n          <leafValues>\n            -4.0711440145969391e-02 1.2469469755887985e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6789 -3.9068311452865601e-02</internalNodes>\n          <leafValues>\n            -1.0403119772672653e-01 6.7032999359071255e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6790 -1.0384949855506420e-03</internalNodes>\n          <leafValues>\n            5.8422528207302094e-02 -1.0154890269041061e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6791 2.9740650206804276e-02</internalNodes>\n          <leafValues>\n            1.2596059590578079e-02 -1.5170450508594513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6792 5.3193639032542706e-03</internalNodes>\n          <leafValues>\n            -4.6843089163303375e-02 1.1005250364542007e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6793 -3.2385820522904396e-03</internalNodes>\n          <leafValues>\n            -1.0309839993715286e-01 5.0686061382293701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6794 4.2344750836491585e-03</internalNodes>\n          <leafValues>\n            -4.9582429230213165e-02 1.2092150002717972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6795 -7.4786663055419922e-02</internalNodes>\n          <leafValues>\n            -4.6895131468772888e-01 3.8582859560847282e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6796 8.5299033671617508e-03</internalNodes>\n          <leafValues>\n            3.8806159049272537e-02 -1.2022049725055695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6797 -4.8662569373846054e-02</internalNodes>\n          <leafValues>\n            1.6113990545272827e-01 -1.1717130430042744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6798 -1.3677199603989720e-03</internalNodes>\n          <leafValues>\n            -8.5303716361522675e-02 5.5394109338521957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6799 -5.8111362159252167e-03</internalNodes>\n          <leafValues>\n            4.7039270401000977e-02 -5.1736868917942047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6800 -3.9951619692146778e-03</internalNodes>\n          <leafValues>\n            -7.8167162835597992e-02 6.3919343054294586e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6801 3.0817699152976274e-03</internalNodes>\n          <leafValues>\n            -6.9289833307266235e-02 2.8242539614439011e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6802 -4.6279471367597580e-02</internalNodes>\n          <leafValues>\n            -3.4760490059852600e-01 1.3878909870982170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6803 -1.8725780770182610e-02</internalNodes>\n          <leafValues>\n            1.5222269296646118e-01 -1.5724090859293938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6804 -2.1445369347929955e-02</internalNodes>\n          <leafValues>\n            -3.5962730646133423e-01 1.2764260172843933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6805 -9.1003477573394775e-02</internalNodes>\n          <leafValues>\n            -7.9615950584411621e-01 4.9090441316366196e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6806 2.5607119314372540e-03</internalNodes>\n          <leafValues>\n            -5.4551690816879272e-02 8.4403410553932190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6807 -1.3662099838256836e-02</internalNodes>\n          <leafValues>\n            9.4987250864505768e-02 -6.2036819756031036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6808 9.2437807470560074e-03</internalNodes>\n          <leafValues>\n            5.3822331130504608e-02 -9.9236510694026947e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6809 -1.4612140133976936e-02</internalNodes>\n          <leafValues>\n            -1.5248660743236542e-01 4.2905550450086594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6810 -3.9584659039974213e-02</internalNodes>\n          <leafValues>\n            1.5883240103721619e-01 -3.5484429448843002e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6811 -6.7460699938237667e-03</internalNodes>\n          <leafValues>\n            1.1749260127544403e-01 -3.7934441119432449e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6812 2.0449559669941664e-03</internalNodes>\n          <leafValues>\n            6.1626188457012177e-02 -9.4409346580505371e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6813 -1.5146560035645962e-02</internalNodes>\n          <leafValues>\n            -3.3887571096420288e-01 6.8320450372993946e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6814 -2.0916219800710678e-03</internalNodes>\n          <leafValues>\n            -1.4829570055007935e-01 3.3358350396156311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6815 1.3274390250444412e-02</internalNodes>\n          <leafValues>\n            -3.8169000297784805e-02 4.6379629522562027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6816 1.2404330074787140e-02</internalNodes>\n          <leafValues>\n            -1.8498679623007774e-02 2.7952960133552551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6817 -2.3678259924054146e-02</internalNodes>\n          <leafValues>\n            -4.7142859548330307e-02 2.3141339421272278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6818 6.7575983703136444e-02</internalNodes>\n          <leafValues>\n            -1.8598400056362152e-02 2.7481150627136230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6819 7.6359122991561890e-02</internalNodes>\n          <leafValues>\n            2.9178129509091377e-02 -2.0572820305824280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6820 -1.0918889939785004e-01</internalNodes>\n          <leafValues>\n            6.2577211856842041e-01 -9.8246810957789421e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6821 1.2964319903403521e-03</internalNodes>\n          <leafValues>\n            -3.1776499003171921e-02 6.7833930253982544e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6822 4.1218679398298264e-02</internalNodes>\n          <leafValues>\n            8.5701625794172287e-03 -5.8379119634628296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6823 -1.8773629562929273e-03</internalNodes>\n          <leafValues>\n            5.3263541311025620e-02 -4.1702788323163986e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6824 -2.9402649961411953e-03</internalNodes>\n          <leafValues>\n            8.6931921541690826e-02 -7.1344070136547089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6825 -3.0833749100565910e-02</internalNodes>\n          <leafValues>\n            -3.9439570903778076e-01 6.0907239094376564e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6826 -3.7960989866405725e-03</internalNodes>\n          <leafValues>\n            7.4150532484054565e-02 -6.1881281435489655e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6827 -6.3087488524615765e-03</internalNodes>\n          <leafValues>\n            -1.1662469804286957e-01 2.5016760453581810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6828 4.0001370944082737e-03</internalNodes>\n          <leafValues>\n            -5.7236731052398682e-02 9.7589701414108276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6829 6.7752957344055176e-02</internalNodes>\n          <leafValues>\n            9.5101362094283104e-03 -3.3777019381523132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6830 -9.2353783547878265e-02</internalNodes>\n          <leafValues>\n            7.9015249013900757e-01 -6.2939748167991638e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6831 -2.4050839245319366e-02</internalNodes>\n          <leafValues>\n            -1.5585710108280182e-01 1.8099930137395859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6832 3.2272089738398790e-03</internalNodes>\n          <leafValues>\n            -4.7936741262674332e-02 1.0735899955034256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6833 -7.2444709949195385e-03</internalNodes>\n          <leafValues>\n            9.6775539219379425e-02 -2.4095900356769562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6834 -1.0888259857892990e-01</internalNodes>\n          <leafValues>\n            -8.1255799531936646e-01 6.0875630006194115e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6835 -1.4077230356633663e-02</internalNodes>\n          <leafValues>\n            -1.3358989357948303e-01 2.5421140715479851e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6836 -3.0071370303630829e-02</internalNodes>\n          <leafValues>\n            3.5427039861679077e-01 -1.3553430326282978e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6837 3.4985799342393875e-02</internalNodes>\n          <leafValues>\n            -3.0686240643262863e-03 4.6311178803443909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6838 1.8354769796133041e-02</internalNodes>\n          <leafValues>\n            1.1218019761145115e-02 -4.6143579483032227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6839 -6.4306408166885376e-02</internalNodes>\n          <leafValues>\n            -6.1207151412963867e-01 1.9155009649693966e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6840 8.2096129655838013e-02</internalNodes>\n          <leafValues>\n            -8.8210906833410263e-03 5.4885977506637573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6841 7.7698810491710901e-04</internalNodes>\n          <leafValues>\n            1.3247950375080109e-01 -3.3915128558874130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6842 6.4568981528282166e-02</internalNodes>\n          <leafValues>\n            6.4043831080198288e-03 -7.7150177955627441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6843 -1.5833489596843719e-02</internalNodes>\n          <leafValues>\n            -1.9498950242996216e-01 7.5541301630437374e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6844 3.4125618636608124e-02</internalNodes>\n          <leafValues>\n            -1.5915289521217346e-02 2.9716441035270691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6845 -1.2615050189197063e-02</internalNodes>\n          <leafValues>\n            -2.4650709331035614e-01 2.2699799388647079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6846 1.8272679299116135e-02</internalNodes>\n          <leafValues>\n            -4.0593959391117096e-02 1.1693490296602249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6847 -6.6374349407851696e-03</internalNodes>\n          <leafValues>\n            -1.4557109773159027e-01 3.5353910177946091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6848 -2.6520919054746628e-03</internalNodes>\n          <leafValues>\n            7.6382592320442200e-02 -6.6688627004623413e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6849 2.2452129051089287e-03</internalNodes>\n          <leafValues>\n            -8.9759878814220428e-02 5.5091369897127151e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6850 -4.4775419519282877e-04</internalNodes>\n          <leafValues>\n            2.1264159679412842e-01 -2.6620639488101006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6851 -1.1115259677171707e-01</internalNodes>\n          <leafValues>\n            -4.3139949440956116e-01 4.6484731137752533e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6852 -1.1578770354390144e-02</internalNodes>\n          <leafValues>\n            -3.5296261310577393e-01 1.2750539928674698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6853 -2.5290170684456825e-02</internalNodes>\n          <leafValues>\n            5.1385980844497681e-01 -6.7363809794187546e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6854 -3.2232340425252914e-02</internalNodes>\n          <leafValues>\n            -5.7690191268920898e-01 7.7741048298776150e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6855 -4.1698799468576908e-03</internalNodes>\n          <leafValues>\n            -1.7519310116767883e-01 1.1018699966371059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6856 -2.0664500072598457e-02</internalNodes>\n          <leafValues>\n            2.5821951031684875e-01 -1.7920289188623428e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6857 -1.0834420099854469e-03</internalNodes>\n          <leafValues>\n            -1.3178519904613495e-01 2.5419749319553375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6858 -9.5458701252937317e-03</internalNodes>\n          <leafValues>\n            4.4964689016342163e-01 -1.1315030045807362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6859 5.3232181817293167e-02</internalNodes>\n          <leafValues>\n            7.4498020112514496e-03 -6.8122059106826782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6860 -1.3852520287036896e-01</internalNodes>\n          <leafValues>\n            -6.0117882490158081e-01 6.5434179268777370e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6861 1.7173439264297485e-02</internalNodes>\n          <leafValues>\n            -2.5120509788393974e-02 8.6516633629798889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6862 3.9947189390659332e-02</internalNodes>\n          <leafValues>\n            5.8647249825298786e-03 -7.4653059244155884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6863 2.0647009834647179e-02</internalNodes>\n          <leafValues>\n            -1.0226000100374222e-02 1.7227609455585480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6864 -1.8602909985929728e-03</internalNodes>\n          <leafValues>\n            -6.5767973661422729e-02 6.9248490035533905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6865 -3.4106068313121796e-02</internalNodes>\n          <leafValues>\n            1.5908730030059814e-01 -1.3241630047559738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6866 6.3425069674849510e-03</internalNodes>\n          <leafValues>\n            3.5119149833917618e-02 -1.3436080515384674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6867 1.6866199439391494e-03</internalNodes>\n          <leafValues>\n            -4.3401770293712616e-02 5.0606630742549896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6868 -3.0595089774578810e-03</internalNodes>\n          <leafValues>\n            5.6976709514856339e-02 -8.1074528396129608e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6869 2.7664829976856709e-03</internalNodes>\n          <leafValues>\n            2.0497009158134460e-02 -8.0963827669620514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6870 -3.2909188885241747e-03</internalNodes>\n          <leafValues>\n            -1.0803789645433426e-01 4.6237960457801819e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6871 1.7244400456547737e-02</internalNodes>\n          <leafValues>\n            -2.5127060711383820e-02 2.4591030180454254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6872 9.1161586344242096e-02</internalNodes>\n          <leafValues>\n            1.0174980387091637e-02 -4.6983879804611206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6873 2.5459621101617813e-03</internalNodes>\n          <leafValues>\n            -3.0003750696778297e-02 1.4800469577312469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6874 1.7582690343260765e-03</internalNodes>\n          <leafValues>\n            5.4400689899921417e-02 -7.7444270253181458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6875 -1.6833960544317961e-03</internalNodes>\n          <leafValues>\n            8.1838123500347137e-02 -4.3751198798418045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6876 -7.6617579907178879e-04</internalNodes>\n          <leafValues>\n            -1.3564400374889374e-01 3.6041948944330215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6877 1.1155450483784080e-03</internalNodes>\n          <leafValues>\n            -4.8263888806104660e-02 5.0273448228836060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6878 -2.6005289983004332e-03</internalNodes>\n          <leafValues>\n            8.8793486356735229e-02 -5.4554209113121033e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6879 -3.2424980308860540e-03</internalNodes>\n          <leafValues>\n            -1.3159190118312836e-01 3.4248508512973785e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6880 -1.4817930059507489e-04</internalNodes>\n          <leafValues>\n            3.7875428795814514e-02 -1.2225220352411270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6881 1.1546639725565910e-02</internalNodes>\n          <leafValues>\n            1.5370969660580158e-02 -1.0286240279674530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6882 2.4446300230920315e-03</internalNodes>\n          <leafValues>\n            -5.1783051341772079e-02 1.0735079646110535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6883 4.5723789371550083e-03</internalNodes>\n          <leafValues>\n            -3.6362100392580032e-02 1.3289859890937805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6884 -1.1938340030610561e-02</internalNodes>\n          <leafValues>\n            -1.0882350057363510e-01 4.7698900103569031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6885 -4.1671381331980228e-03</internalNodes>\n          <leafValues>\n            1.1637099832296371e-01 -3.0638780444860458e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>399</maxWeakCount>\n      <stageThreshold>-1.2330470085144043e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 6886 3.3659618347883224e-02</internalNodes>\n          <leafValues>\n            -1.5576040744781494e-01 1.9109010696411133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6887 -1.5392389614135027e-03</internalNodes>\n          <leafValues>\n            7.2527736425399780e-02 -2.8808951377868652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6888 1.5648789703845978e-03</internalNodes>\n          <leafValues>\n            -1.1329220235347748e-01 1.5057389438152313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6889 5.6565739214420319e-04</internalNodes>\n          <leafValues>\n            -4.0502288937568665e-01 3.0235100537538528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6890 -2.9683491447940469e-04</internalNodes>\n          <leafValues>\n            -1.2592320144176483e-01 1.0352999716997147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6891 4.3946141377091408e-03</internalNodes>\n          <leafValues>\n            -1.0582420229911804e-01 2.3163750767707825e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6892 3.2444300595670938e-03</internalNodes>\n          <leafValues>\n            5.0188560038805008e-02 -2.5477260351181030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6893 3.8864749949425459e-03</internalNodes>\n          <leafValues>\n            -1.4332659542560577e-01 2.9871070757508278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6894 3.3563380129635334e-03</internalNodes>\n          <leafValues>\n            -1.8739770352840424e-01 6.1354521661996841e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6895 1.9797699525952339e-02</internalNodes>\n          <leafValues>\n            2.7567919343709946e-02 -7.3189876973628998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6896 3.3829871099442244e-03</internalNodes>\n          <leafValues>\n            -2.6915690302848816e-01 4.7561220824718475e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6897 5.0223460420966148e-03</internalNodes>\n          <leafValues>\n            4.2572669684886932e-02 -2.0097489655017853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6898 1.4903279952704906e-03</internalNodes>\n          <leafValues>\n            -1.0160639882087708e-01 1.1291279643774033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6899 -5.5050072260200977e-03</internalNodes>\n          <leafValues>\n            -2.1760410070419312e-01 2.5067379698157310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6900 4.1127130389213562e-03</internalNodes>\n          <leafValues>\n            -1.3703300058841705e-01 6.6536687314510345e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6901 1.9442260265350342e-02</internalNodes>\n          <leafValues>\n            4.2253911495208740e-02 -1.1731100082397461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6902 -1.9445870071649551e-02</internalNodes>\n          <leafValues>\n            2.8616631031036377e-01 -3.0423089861869812e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6903 -1.5500449808314443e-03</internalNodes>\n          <leafValues>\n            -1.5157119929790497e-01 6.3723236322402954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6904 -3.2575910445302725e-03</internalNodes>\n          <leafValues>\n            6.1063949018716812e-02 -1.3006690144538879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6905 8.5774611216038465e-04</internalNodes>\n          <leafValues>\n            -6.2051288783550262e-02 5.4809290915727615e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6906 6.8592262687161565e-04</internalNodes>\n          <leafValues>\n            -9.2828713357448578e-02 9.2287853360176086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6907 4.8905659466981888e-02</internalNodes>\n          <leafValues>\n            -1.2098040431737900e-02 2.4674870073795319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6908 -4.6415459364652634e-03</internalNodes>\n          <leafValues>\n            -1.7103439569473267e-01 5.1900148391723633e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6909 -9.9253775551915169e-03</internalNodes>\n          <leafValues>\n            1.6824729740619659e-01 -4.3742731213569641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6910 -7.2820088826119900e-04</internalNodes>\n          <leafValues>\n            -1.5762010216712952e-01 4.9283239990472794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6911 7.1829417720437050e-03</internalNodes>\n          <leafValues>\n            -7.5083851814270020e-02 1.5677660703659058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6912 7.4819842120632529e-04</internalNodes>\n          <leafValues>\n            9.4303682446479797e-02 -9.4410486519336700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6913 1.3856319710612297e-02</internalNodes>\n          <leafValues>\n            4.2250029742717743e-02 -2.4046279489994049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6914 -5.0514908507466316e-03</internalNodes>\n          <leafValues>\n            2.0170919597148895e-01 -4.4972479343414307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6915 -2.5696419179439545e-03</internalNodes>\n          <leafValues>\n            -1.4004689455032349e-01 4.1754510253667831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6916 5.4275751113891602e-02</internalNodes>\n          <leafValues>\n            -2.6094799861311913e-02 2.8374740481376648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6917 -3.7299469113349915e-02</internalNodes>\n          <leafValues>\n            -5.8281177282333374e-01 1.3501949608325958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6918 3.0674990266561508e-03</internalNodes>\n          <leafValues>\n            5.6224178522825241e-02 -1.1995050311088562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6919 -3.5402809735387564e-03</internalNodes>\n          <leafValues>\n            6.6515468060970306e-02 -1.1834269762039185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6920 4.1401982307434082e-03</internalNodes>\n          <leafValues>\n            2.0988019183278084e-02 -3.1807440519332886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6921 -1.1183559894561768e-02</internalNodes>\n          <leafValues>\n            1.2467139959335327e-01 -4.1797909885644913e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6922 1.0800679447129369e-03</internalNodes>\n          <leafValues>\n            4.5548491179943085e-02 -1.5857310593128204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6923 -7.7602718956768513e-03</internalNodes>\n          <leafValues>\n            -1.7031720280647278e-01 3.3989530056715012e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6924 -3.1192360911518335e-03</internalNodes>\n          <leafValues>\n            9.6817880868911743e-02 -8.6022533476352692e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6925 -1.3673380017280579e-02</internalNodes>\n          <leafValues>\n            -2.2536599636077881e-01 1.5587169677019119e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6926 -2.0611209329217672e-03</internalNodes>\n          <leafValues>\n            -1.5269860625267029e-01 5.0227679312229156e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6927 2.2635459899902344e-03</internalNodes>\n          <leafValues>\n            -4.2889460921287537e-02 7.6818563044071198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6928 -3.4530080854892731e-02</internalNodes>\n          <leafValues>\n            1.2874439358711243e-01 -6.7660316824913025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6929 6.1309239827096462e-03</internalNodes>\n          <leafValues>\n            -6.3456058502197266e-02 6.4237646758556366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6930 -1.0171280242502689e-02</internalNodes>\n          <leafValues>\n            -2.9192021489143372e-01 2.6645509526133537e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6931 -1.3060650229454041e-01</internalNodes>\n          <leafValues>\n            -9.6297067403793335e-01 1.5367489540949464e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6932 6.8621779792010784e-03</internalNodes>\n          <leafValues>\n            -4.7239519655704498e-02 1.5440399944782257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6933 1.2950079981237650e-03</internalNodes>\n          <leafValues>\n            -7.1122348308563232e-02 5.8697238564491272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6934 -5.6443549692630768e-03</internalNodes>\n          <leafValues>\n            -1.7261339724063873e-01 4.4769309461116791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6935 1.6346110403537750e-01</internalNodes>\n          <leafValues>\n            -2.1536830812692642e-02 3.6825808882713318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6936 1.4170600101351738e-02</internalNodes>\n          <leafValues>\n            2.3462019860744476e-02 -3.0498749017715454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6937 -1.0679910331964493e-01</internalNodes>\n          <leafValues>\n            3.1485679745674133e-01 -9.1049326583743095e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6938 7.0258649066090584e-03</internalNodes>\n          <leafValues>\n            -6.5418191254138947e-02 1.0200239717960358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6939 -4.3358937837183475e-03</internalNodes>\n          <leafValues>\n            1.1601199954748154e-01 -5.5041059851646423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6940 3.5394240170717239e-02</internalNodes>\n          <leafValues>\n            2.7795480564236641e-02 -2.5534549355506897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6941 2.1599680185317993e-02</internalNodes>\n          <leafValues>\n            -1.0513960383832455e-02 2.6087591052055359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6942 4.3032150715589523e-03</internalNodes>\n          <leafValues>\n            -4.6745400875806808e-02 1.3318620622158051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6943 7.8372862190008163e-03</internalNodes>\n          <leafValues>\n            6.1899811029434204e-02 -1.2405169755220413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6944 -1.6856989823281765e-03</internalNodes>\n          <leafValues>\n            -9.5696307718753815e-02 7.7667310833930969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6945 -4.1602249257266521e-03</internalNodes>\n          <leafValues>\n            6.5850533545017242e-02 -7.6837591826915741e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6946 -5.0864819437265396e-02</internalNodes>\n          <leafValues>\n            5.2419060468673706e-01 -1.7342429608106613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6947 -6.4477883279323578e-02</internalNodes>\n          <leafValues>\n            -4.1972258687019348e-01 1.2231100350618362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6948 -2.4949579965323210e-03</internalNodes>\n          <leafValues>\n            6.4242206513881683e-02 -9.7457312047481537e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6949 3.2167730387300253e-03</internalNodes>\n          <leafValues>\n            -3.7902288138866425e-02 8.2197092473506927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6950 -2.3393060546368361e-03</internalNodes>\n          <leafValues>\n            -1.0608460009098053e-01 7.2004899382591248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6951 -8.0535542219877243e-03</internalNodes>\n          <leafValues>\n            -1.0991869866847992e-01 2.5643279775977135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6952 1.5007739886641502e-02</internalNodes>\n          <leafValues>\n            -3.1267128884792328e-02 2.0507030189037323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6953 -4.7144708223640919e-03</internalNodes>\n          <leafValues>\n            -1.4058899879455566e-01 4.8687249422073364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6954 -2.7188581228256226e-01</internalNodes>\n          <leafValues>\n            -7.7086192369461060e-01 8.2119107246398926e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6955 -3.7261729594320059e-03</internalNodes>\n          <leafValues>\n            7.8386418521404266e-02 -6.1110321432352066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6956 8.1726117059588432e-03</internalNodes>\n          <leafValues>\n            2.5872390717267990e-02 -2.4203300476074219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6957 -1.5384130179882050e-01</internalNodes>\n          <leafValues>\n            -8.3681619167327881e-01 1.0526239639148116e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6958 -4.2209690436720848e-03</internalNodes>\n          <leafValues>\n            1.0987819731235504e-01 -6.0973130166530609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6959 3.4641180187463760e-02</internalNodes>\n          <leafValues>\n            5.9377611614763737e-03 -7.3021429777145386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6960 -1.0757029522210360e-03</internalNodes>\n          <leafValues>\n            6.3253231346607208e-02 -9.3954533338546753e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6961 6.0506182489916682e-04</internalNodes>\n          <leafValues>\n            -7.2633743286132812e-02 5.4847791790962219e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6962 -4.9192002043128014e-03</internalNodes>\n          <leafValues>\n            -1.4617989957332611e-01 4.9854889512062073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6963 5.8641340583562851e-02</internalNodes>\n          <leafValues>\n            -1.4487889595329762e-02 2.1949279308319092e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6964 -9.5993638038635254e-02</internalNodes>\n          <leafValues>\n            -4.2456990480422974e-01 1.5611169859766960e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6965 -1.7546750605106354e-01</internalNodes>\n          <leafValues>\n            -5.7154530286788940e-01 2.7310380246490240e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6966 5.3192701190710068e-02</internalNodes>\n          <leafValues>\n            -2.0759610459208488e-02 3.1531611084938049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6967 -3.0862109735608101e-02</internalNodes>\n          <leafValues>\n            -4.0818691253662109e-01 9.1538606211543083e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6968 -2.9243549797683954e-03</internalNodes>\n          <leafValues>\n            1.6538919508457184e-01 -3.7048339843750000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6969 7.9757552593946457e-03</internalNodes>\n          <leafValues>\n            4.0010299533605576e-02 -1.0603089630603790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6970 1.0228200256824493e-01</internalNodes>\n          <leafValues>\n            9.6151717007160187e-03 -6.5299248695373535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6971 2.3435470648109913e-03</internalNodes>\n          <leafValues>\n            -4.3119609355926514e-02 1.1908730119466782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6972 -3.3627110533416271e-03</internalNodes>\n          <leafValues>\n            1.0518670082092285e-01 -6.9644443690776825e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6973 4.9040392041206360e-03</internalNodes>\n          <leafValues>\n            4.8949901014566422e-02 -1.2949359416961670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6974 4.5119290007278323e-05</internalNodes>\n          <leafValues>\n            -1.6148559749126434e-01 4.1733540594577789e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6975 1.6195859760046005e-02</internalNodes>\n          <leafValues>\n            -1.2759320437908173e-02 2.0746350288391113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6976 -6.4254719763994217e-03</internalNodes>\n          <leafValues>\n            -1.3736939430236816e-01 4.3490421026945114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6977 -6.6467811120674014e-04</internalNodes>\n          <leafValues>\n            6.6771537065505981e-02 -7.4648462235927582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6978 -2.3743628989905119e-03</internalNodes>\n          <leafValues>\n            -1.2377700209617615e-01 5.1728729158639908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6979 -8.3166018128395081e-02</internalNodes>\n          <leafValues>\n            1.5261100232601166e-01 -2.1502759307622910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6980 1.3301270082592964e-03</internalNodes>\n          <leafValues>\n            -6.1925448477268219e-02 1.0591439902782440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6981 9.0925350785255432e-02</internalNodes>\n          <leafValues>\n            6.9404938258230686e-03 -5.1022678613662720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6982 5.7555912062525749e-03</internalNodes>\n          <leafValues>\n            5.2849009633064270e-02 -1.0758169740438461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6983 9.3440711498260498e-04</internalNodes>\n          <leafValues>\n            -1.0605130344629288e-01 4.7824278473854065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6984 5.2353799343109131e-02</internalNodes>\n          <leafValues>\n            -1.6387209296226501e-02 4.2318668961524963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6985 -2.4307209998369217e-02</internalNodes>\n          <leafValues>\n            1.3521690666675568e-01 -1.0088359937071800e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6986 -1.3722239993512630e-02</internalNodes>\n          <leafValues>\n            -4.9520999193191528e-01 1.1784340254962444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6987 -1.1442030081525445e-03</internalNodes>\n          <leafValues>\n            4.3818730860948563e-02 -6.9104023277759552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6988 -7.8848190605640411e-02</internalNodes>\n          <leafValues>\n            3.5198599100112915e-01 -1.6464689746499062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6989 1.7305529909208417e-03</internalNodes>\n          <leafValues>\n            -6.6790081560611725e-02 8.2463577389717102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6990 -1.2928839772939682e-02</internalNodes>\n          <leafValues>\n            -8.1002123653888702e-02 8.5223287343978882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6991 8.7096104398369789e-03</internalNodes>\n          <leafValues>\n            -5.0021901726722717e-02 1.3493220508098602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6992 -6.3483066856861115e-02</internalNodes>\n          <leafValues>\n            -7.7681750059127808e-01 7.0912609808146954e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6993 -4.3746097944676876e-03</internalNodes>\n          <leafValues>\n            -1.3329389691352844e-01 4.2627040296792984e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6994 -4.3985169380903244e-02</internalNodes>\n          <leafValues>\n            1.5131869912147522e-01 -4.0801558643579483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6995 -6.0488767921924591e-03</internalNodes>\n          <leafValues>\n            -5.3645741194486618e-02 1.7832729965448380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6996 -5.1487190648913383e-04</internalNodes>\n          <leafValues>\n            6.2102951109409332e-02 -9.5339402556419373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6997 -3.3046479802578688e-03</internalNodes>\n          <leafValues>\n            -2.4732820689678192e-01 2.1977340802550316e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6998 -3.0949179199524224e-04</internalNodes>\n          <leafValues>\n            -3.4656081348657608e-02 1.9599510729312897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6999 -8.3323381841182709e-03</internalNodes>\n          <leafValues>\n            1.7436729371547699e-01 -3.2631549984216690e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7000 6.6935829818248749e-03</internalNodes>\n          <leafValues>\n            2.5050759315490723e-02 -2.7362829446792603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7001 1.4068570453673601e-03</internalNodes>\n          <leafValues>\n            -2.9797010123729706e-02 6.5752580761909485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7002 4.0725398808717728e-02</internalNodes>\n          <leafValues>\n            1.4967479743063450e-02 -3.7111800909042358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7003 -2.1524120122194290e-02</internalNodes>\n          <leafValues>\n            3.7294471263885498e-01 -1.4142910018563271e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7004 4.1689630597829819e-02</internalNodes>\n          <leafValues>\n            8.3227548748254776e-03 -6.6822868585586548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7005 -3.2075429335236549e-03</internalNodes>\n          <leafValues>\n            6.2741018831729889e-02 -1.3061609864234924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7006 2.6418430730700493e-02</internalNodes>\n          <leafValues>\n            6.6760168410837650e-03 -7.5557070970535278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7007 -5.1153838634490967e-02</internalNodes>\n          <leafValues>\n            -5.0382971763610840e-01 2.2476969752460718e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7008 1.5723450342193246e-03</internalNodes>\n          <leafValues>\n            -6.0214620083570480e-02 7.9933151602745056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7009 1.2616170570254326e-03</internalNodes>\n          <leafValues>\n            4.4674988836050034e-02 -8.3830736577510834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7010 -2.8608670458197594e-02</internalNodes>\n          <leafValues>\n            -3.0249071121215820e-01 1.6254810616374016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7011 1.4726459980010986e-02</internalNodes>\n          <leafValues>\n            -4.9459420144557953e-02 1.1457759886980057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7012 3.5319201648235321e-02</internalNodes>\n          <leafValues>\n            1.1276819743216038e-02 -4.8055538535118103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7013 2.2470189630985260e-01</internalNodes>\n          <leafValues>\n            -1.0596769861876965e-02 5.4026299715042114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7014 -7.0188841782510281e-03</internalNodes>\n          <leafValues>\n            -1.1836989969015121e-01 5.2995279431343079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7015 -2.9194930568337440e-02</internalNodes>\n          <leafValues>\n            2.8498569130897522e-01 -1.4652130194008350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7016 -1.6918469918891788e-03</internalNodes>\n          <leafValues>\n            6.7731522023677826e-02 -7.4129588901996613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7017 1.3110489584505558e-02</internalNodes>\n          <leafValues>\n            -4.0418051183223724e-02 9.6537798643112183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7018 7.5334981374908239e-05</internalNodes>\n          <leafValues>\n            -7.3065057396888733e-02 7.1049667894840240e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7019 2.9962710104882717e-03</internalNodes>\n          <leafValues>\n            2.4401130154728889e-02 -1.0679820179939270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7020 -4.1236128658056259e-02</internalNodes>\n          <leafValues>\n            2.5446560978889465e-01 -1.9801229238510132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7021 2.2827479988336563e-03</internalNodes>\n          <leafValues>\n            -5.9622149914503098e-02 8.6871787905693054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7022 -2.1318379731383175e-04</internalNodes>\n          <leafValues>\n            4.0506061166524887e-02 -1.2357629835605621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7023 4.1725938208401203e-03</internalNodes>\n          <leafValues>\n            4.1674789041280746e-02 -1.3029229640960693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7024 -1.7945859581232071e-02</internalNodes>\n          <leafValues>\n            2.5395989418029785e-01 -2.0783929154276848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7025 -6.0957930982112885e-02</internalNodes>\n          <leafValues>\n            -5.9399938583374023e-01 5.6327730417251587e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7026 -8.3080737385898829e-04</internalNodes>\n          <leafValues>\n            4.8011310398578644e-02 -1.1289869993925095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7027 2.7037229388952255e-02</internalNodes>\n          <leafValues>\n            2.6524379849433899e-02 -1.7208619415760040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7028 3.7293829955160618e-03</internalNodes>\n          <leafValues>\n            -5.0795450806617737e-02 1.1093439906835556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7029 -1.0271129431203008e-03</internalNodes>\n          <leafValues>\n            -8.9025869965553284e-02 4.9861740320920944e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7030 4.3261310202069581e-04</internalNodes>\n          <leafValues>\n            -7.6471529901027679e-02 7.2490736842155457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7031 -8.3997912704944611e-02</internalNodes>\n          <leafValues>\n            4.0178960561752319e-01 -8.4397885948419571e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7032 -3.4407388884574175e-03</internalNodes>\n          <leafValues>\n            -1.4326460659503937e-01 3.9170410484075546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7033 -2.1418789401650429e-02</internalNodes>\n          <leafValues>\n            1.5835569798946381e-01 -1.3701870106160641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7034 2.4877830874174833e-03</internalNodes>\n          <leafValues>\n            -5.6875430047512054e-02 1.0218720138072968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7035 -1.0390300303697586e-03</internalNodes>\n          <leafValues>\n            8.1530712544918060e-02 -4.7183711081743240e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7036 4.6788761392235756e-04</internalNodes>\n          <leafValues>\n            7.0995680987834930e-02 -8.8464602828025818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7037 2.7436260133981705e-02</internalNodes>\n          <leafValues>\n            1.5190550126135349e-02 -1.2117669731378555e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7038 -5.8917858405038714e-04</internalNodes>\n          <leafValues>\n            -8.1471607089042664e-02 6.8480782210826874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7039 7.9439081251621246e-02</internalNodes>\n          <leafValues>\n            -7.3907868936657906e-03 1.4902259409427643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7040 -3.5153090953826904e-02</internalNodes>\n          <leafValues>\n            4.1942089796066284e-01 -1.2480289675295353e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7041 6.8230971693992615e-02</internalNodes>\n          <leafValues>\n            9.3489149585366249e-03 -2.5965470075607300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7042 8.1733033061027527e-02</internalNodes>\n          <leafValues>\n            1.5513390302658081e-02 -3.2704469561576843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7043 -3.0718350317329168e-03</internalNodes>\n          <leafValues>\n            6.6938467323780060e-02 -4.2225748300552368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7044 5.6301880627870560e-02</internalNodes>\n          <leafValues>\n            -2.5680650025606155e-02 2.1728150546550751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7045 2.5166019797325134e-02</internalNodes>\n          <leafValues>\n            2.3228300735354424e-02 -9.2791043221950531e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7046 6.5088197588920593e-02</internalNodes>\n          <leafValues>\n            6.8949609994888306e-03 -8.2639491558074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7047 2.2007930092513561e-03</internalNodes>\n          <leafValues>\n            -7.4394248425960541e-02 8.7209381163120270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7048 -8.8553391396999359e-03</internalNodes>\n          <leafValues>\n            -1.3203050196170807e-01 3.7658430635929108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7049 6.0942411422729492e-02</internalNodes>\n          <leafValues>\n            1.0197839699685574e-02 -5.4252862930297852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7050 -5.2589550614356995e-04</internalNodes>\n          <leafValues>\n            4.8835718631744385e-01 -1.1828079819679260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7051 1.3005370274186134e-03</internalNodes>\n          <leafValues>\n            -3.8898441195487976e-01 1.4226339757442474e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7052 -1.6531689465045929e-01</internalNodes>\n          <leafValues>\n            4.0004518628120422e-01 -1.2666770257055759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7053 1.8595480360090733e-03</internalNodes>\n          <leafValues>\n            4.7802660614252090e-02 -1.1368919909000397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7054 1.3065179809927940e-02</internalNodes>\n          <leafValues>\n            -3.3714219927787781e-02 1.5762269496917725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7055 3.1612750142812729e-02</internalNodes>\n          <leafValues>\n            7.6767429709434509e-03 -5.9641021490097046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7056 -2.2566620260477066e-02</internalNodes>\n          <leafValues>\n            1.0603710263967514e-01 -4.7383170574903488e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7057 6.2679480761289597e-03</internalNodes>\n          <leafValues>\n            3.4595031291246414e-02 -7.7622346580028534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7058 -3.1758081167936325e-02</internalNodes>\n          <leafValues>\n            -3.2147431373596191e-01 1.5986470505595207e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7059 -2.1477609872817993e-02</internalNodes>\n          <leafValues>\n            2.0527760684490204e-01 -1.8074609339237213e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7060 1.8594050779938698e-02</internalNodes>\n          <leafValues>\n            1.6375590115785599e-02 -2.9955211281776428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7061 1.4604429714381695e-02</internalNodes>\n          <leafValues>\n            -2.0433440804481506e-02 2.2725510597229004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7062 1.9902919884771109e-03</internalNodes>\n          <leafValues>\n            -5.8518249541521072e-02 1.0997360199689865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7063 9.7299525514245033e-03</internalNodes>\n          <leafValues>\n            3.1371861696243286e-02 -4.4369909912347794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7064 -2.3401379585266113e-03</internalNodes>\n          <leafValues>\n            9.6488200128078461e-02 -5.7249929755926132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7065 -1.9590060692280531e-03</internalNodes>\n          <leafValues>\n            -1.4031149446964264e-01 1.3546340167522430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7066 8.4066856652498245e-03</internalNodes>\n          <leafValues>\n            6.6289551556110382e-02 -8.0348283052444458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7067 5.2574548870325089e-02</internalNodes>\n          <leafValues>\n            -3.6297008395195007e-02 1.4638340473175049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7068 4.1065202094614506e-03</internalNodes>\n          <leafValues>\n            3.0372349545359612e-02 -1.8155770003795624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7069 -4.1818427853286266e-03</internalNodes>\n          <leafValues>\n            5.5590789765119553e-02 -3.7148520350456238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7070 -1.5470250509679317e-03</internalNodes>\n          <leafValues>\n            1.0347150266170502e-01 -4.6374730765819550e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7071 -8.2695618038997054e-04</internalNodes>\n          <leafValues>\n            -9.3296989798545837e-02 4.3734461069107056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7072 4.1385791264474392e-03</internalNodes>\n          <leafValues>\n            -4.4266488403081894e-02 1.0968980193138123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7073 -3.3684119582176208e-02</internalNodes>\n          <leafValues>\n            -6.4337152242660522e-01 7.9893283545970917e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7074 5.2798818796873093e-02</internalNodes>\n          <leafValues>\n            -1.2490300461649895e-02 4.1572460532188416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7075 -2.9699259996414185e-01</internalNodes>\n          <leafValues>\n            -1.9598379731178284e-01 9.4300797209143639e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7076 1.1196310073137283e-01</internalNodes>\n          <leafValues>\n            1.1162719689309597e-02 -4.6838051080703735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7077 -1.8544310703873634e-02</internalNodes>\n          <leafValues>\n            -7.4080787599086761e-02 1.9528210163116455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7078 -1.0937429964542389e-02</internalNodes>\n          <leafValues>\n            8.8206529617309570e-02 -6.2830187380313873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7079 2.7186619117856026e-03</internalNodes>\n          <leafValues>\n            3.0855480581521988e-02 -9.2405863106250763e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7080 2.0727319642901421e-02</internalNodes>\n          <leafValues>\n            -5.2543301135301590e-02 1.0608410090208054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7081 -2.7961930260062218e-02</internalNodes>\n          <leafValues>\n            2.1735160052776337e-01 -2.1356139332056046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7082 -9.0406360104680061e-03</internalNodes>\n          <leafValues>\n            -1.9535389542579651e-01 3.0077420175075531e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7083 -1.0906349867582321e-02</internalNodes>\n          <leafValues>\n            1.4888639748096466e-01 -3.1188679859042168e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7084 -3.8616119418293238e-03</internalNodes>\n          <leafValues>\n            -1.2094800174236298e-01 4.5144081115722656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7085 4.3162601068615913e-03</internalNodes>\n          <leafValues>\n            -1.0713649913668633e-02 2.8116491436958313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7086 -1.4098359970375896e-03</internalNodes>\n          <leafValues>\n            6.4685508608818054e-02 -9.9471300840377808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7087 3.2964099664241076e-03</internalNodes>\n          <leafValues>\n            1.4295330643653870e-01 -3.1101010739803314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7088 -2.9802869539707899e-03</internalNodes>\n          <leafValues>\n            -2.4578930437564850e-01 2.1760260686278343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7089 6.7178793251514435e-02</internalNodes>\n          <leafValues>\n            3.3457649406045675e-03 -4.5685601234436035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7090 2.9182849451899529e-02</internalNodes>\n          <leafValues>\n            -1.7016859725117683e-02 3.3545929193496704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7091 1.7935150535777211e-03</internalNodes>\n          <leafValues>\n            3.0516179278492928e-02 -1.2526740133762360e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7092 2.0465679466724396e-02</internalNodes>\n          <leafValues>\n            -1.0909980162978172e-02 4.3552139401435852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7093 -2.6115079526789486e-04</internalNodes>\n          <leafValues>\n            3.8759760558605194e-02 -6.4098693430423737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7094 3.7161160726100206e-03</internalNodes>\n          <leafValues>\n            3.7150889635086060e-02 -1.5467320382595062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7095 -7.4094999581575394e-03</internalNodes>\n          <leafValues>\n            -8.2704223692417145e-02 6.2809906899929047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7096 1.7094809561967850e-02</internalNodes>\n          <leafValues>\n            -4.8347331583499908e-02 9.8770812153816223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7097 -3.0473200604319572e-03</internalNodes>\n          <leafValues>\n            -1.0638830065727234e-01 3.0948650091886520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7098 3.4502498805522919e-02</internalNodes>\n          <leafValues>\n            1.0997230187058449e-02 -4.2861738801002502e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7099 -2.6834919117391109e-03</internalNodes>\n          <leafValues>\n            -1.4986449480056763e-01 3.3157639205455780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7100 9.2392861843109131e-03</internalNodes>\n          <leafValues>\n            -3.7733338773250580e-02 1.5778259932994843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7101 8.8205106556415558e-02</internalNodes>\n          <leafValues>\n            -1.0704769752919674e-02 3.2353109121322632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7102 7.7868886291980743e-02</internalNodes>\n          <leafValues>\n            1.0804659686982632e-02 -4.4243350625038147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7103 -3.1202291138470173e-03</internalNodes>\n          <leafValues>\n            2.0444509387016296e-01 -2.3976439610123634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7104 2.6000461075454950e-03</internalNodes>\n          <leafValues>\n            4.5765019953250885e-02 -1.0138899832963943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7105 7.0194108411669731e-03</internalNodes>\n          <leafValues>\n            2.5740729644894600e-02 -4.9060840159654617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7106 -2.4108150973916054e-03</internalNodes>\n          <leafValues>\n            -1.1837480217218399e-01 4.8649929463863373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7107 4.9886249005794525e-02</internalNodes>\n          <leafValues>\n            -1.4449880458414555e-02 2.0894059538841248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7108 -7.2655039839446545e-03</internalNodes>\n          <leafValues>\n            8.9042186737060547e-02 -4.9845550209283829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7109 1.0560270398855209e-02</internalNodes>\n          <leafValues>\n            5.2911709994077682e-02 -1.1509139835834503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7110 5.6417449377477169e-03</internalNodes>\n          <leafValues>\n            -6.8672746419906616e-02 7.7489316463470459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7111 4.3234648182988167e-03</internalNodes>\n          <leafValues>\n            -7.9207062721252441e-02 5.3491309285163879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7112 1.1184070259332657e-02</internalNodes>\n          <leafValues>\n            7.1656093001365662e-02 -1.0634940117597580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7113 -9.9230423569679260e-02</internalNodes>\n          <leafValues>\n            3.7169519066810608e-01 -6.6843931563198566e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7114 -4.4848727993667126e-03</internalNodes>\n          <leafValues>\n            7.5577408075332642e-02 -6.9481082260608673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7115 -1.9104180857539177e-02</internalNodes>\n          <leafValues>\n            -1.7291219532489777e-01 1.1360409669578075e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7116 -1.7672680551186204e-03</internalNodes>\n          <leafValues>\n            9.2567160725593567e-02 -5.2470050752162933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7117 5.9071529656648636e-02</internalNodes>\n          <leafValues>\n            9.2153968289494514e-03 -2.6687648892402649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7118 -3.4362819045782089e-02</internalNodes>\n          <leafValues>\n            -5.7914721965789795e-01 7.9972539097070694e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7119 5.6766539812088013e-02</internalNodes>\n          <leafValues>\n            5.8937501162290573e-03 -5.2275192737579346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7120 -1.2173549830913544e-01</internalNodes>\n          <leafValues>\n            -5.2229601144790649e-01 7.9296948388218880e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7121 3.4274619072675705e-02</internalNodes>\n          <leafValues>\n            -1.7069879919290543e-02 1.2958990037441254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7122 -6.7191021516919136e-03</internalNodes>\n          <leafValues>\n            1.1187720298767090e-01 -4.4685728847980499e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7123 3.1698260456323624e-02</internalNodes>\n          <leafValues>\n            2.8529319912195206e-02 -1.1617069691419601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7124 -9.5326751470565796e-02</internalNodes>\n          <leafValues>\n            3.6362048983573914e-01 -1.3523319736123085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7125 1.2620569765567780e-01</internalNodes>\n          <leafValues>\n            6.0956259258091450e-03 -8.4947621822357178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7126 -2.7324870228767395e-02</internalNodes>\n          <leafValues>\n            -2.9046019911766052e-01 1.4303879812359810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7127 -7.3618680238723755e-02</internalNodes>\n          <leafValues>\n            4.8824289441108704e-01 -1.0269859805703163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7128 5.0417389720678329e-03</internalNodes>\n          <leafValues>\n            -8.4770277142524719e-02 5.6035611778497696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7129 2.7569099329411983e-03</internalNodes>\n          <leafValues>\n            -4.8269480466842651e-02 3.8525570183992386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7130 2.1967370063066483e-02</internalNodes>\n          <leafValues>\n            8.6190566420555115e-02 -8.0797329545021057e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7131 -3.8637530803680420e-01</internalNodes>\n          <leafValues>\n            -8.3998018503189087e-01 3.6657860036939383e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7132 -4.1083219647407532e-01</internalNodes>\n          <leafValues>\n            -9.7182428836822510e-01 3.9403690025210381e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7133 -4.1033279150724411e-02</internalNodes>\n          <leafValues>\n            1. -3.3212041016668081e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7134 2.4305000901222229e-02</internalNodes>\n          <leafValues>\n            1.8234970048069954e-02 -2.4954320490360260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7135 1.6170740127563477e-03</internalNodes>\n          <leafValues>\n            -1.2958160042762756e-01 3.2725200057029724e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7136 4.4785268604755402e-02</internalNodes>\n          <leafValues>\n            -2.3868849501013756e-02 1.9763439893722534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7137 4.0209591388702393e-02</internalNodes>\n          <leafValues>\n            5.3034191951155663e-03 -6.6284531354904175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7138 3.3616109285503626e-03</internalNodes>\n          <leafValues>\n            3.0226179957389832e-01 -1.6103280708193779e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7139 -1.1624400503933430e-03</internalNodes>\n          <leafValues>\n            -2.7934190630912781e-01 1.8276169896125793e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7140 5.5524259805679321e-02</internalNodes>\n          <leafValues>\n            -6.5288958139717579e-03 7.5690442323684692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7141 4.6308599412441254e-03</internalNodes>\n          <leafValues>\n            2.8254630044102669e-02 -9.4945177435874939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7142 2.7387610170990229e-03</internalNodes>\n          <leafValues>\n            -4.6980410814285278e-02 9.4511218369007111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7143 2.9127181041985750e-03</internalNodes>\n          <leafValues>\n            -2.2264670580625534e-02 7.2091333568096161e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7144 -2.3628510534763336e-02</internalNodes>\n          <leafValues>\n            -3.9147511124610901e-01 1.2840859591960907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7145 7.1669870521873236e-04</internalNodes>\n          <leafValues>\n            2.0413680002093315e-02 -1.6587799787521362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7146 3.2723631709814072e-02</internalNodes>\n          <leafValues>\n            8.5352789610624313e-03 -5.1838648319244385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7147 5.6393269449472427e-02</internalNodes>\n          <leafValues>\n            -2.4937599897384644e-02 1.9025549292564392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7148 2.9392001032829285e-01</internalNodes>\n          <leafValues>\n            5.7944031432271004e-03 -8.5530591011047363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7149 -5.6904228404164314e-03</internalNodes>\n          <leafValues>\n            -2.4354919791221619e-01 1.0601679794490337e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7150 9.8184328526258469e-03</internalNodes>\n          <leafValues>\n            -1.3599770143628120e-02 3.3795401453971863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7151 -3.6970589309930801e-02</internalNodes>\n          <leafValues>\n            -5.7309299707412720e-01 1.0090970434248447e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7152 1.8607610836625099e-02</internalNodes>\n          <leafValues>\n            -1.2938570231199265e-02 4.1123750805854797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7153 -1.5049210051074624e-03</internalNodes>\n          <leafValues>\n            -8.4678567945957184e-02 3.3724751323461533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7154 -3.9040379226207733e-02</internalNodes>\n          <leafValues>\n            -4.7390699386596680e-01 9.5385275781154633e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7155 -3.4379279240965843e-03</internalNodes>\n          <leafValues>\n            1.4112870395183563e-01 -2.2367769852280617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7156 -1.1330900015309453e-03</internalNodes>\n          <leafValues>\n            -1.3950189948081970e-01 3.2505869865417480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7157 -6.5370470285415649e-02</internalNodes>\n          <leafValues>\n            1.4801700413227081e-01 -2.2039920091629028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7158 -2.0970970392227173e-01</internalNodes>\n          <leafValues>\n            -7.4392271041870117e-01 7.5829490087926388e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7159 -5.8827060274779797e-03</internalNodes>\n          <leafValues>\n            -6.3253037631511688e-02 2.3363839834928513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7160 -2.9759449884295464e-02</internalNodes>\n          <leafValues>\n            4.8733299970626831e-01 -9.2995148152112961e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7161 -5.3064361214637756e-02</internalNodes>\n          <leafValues>\n            -3.8064101338386536e-01 5.6431228294968605e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7162 6.6667333245277405e-02</internalNodes>\n          <leafValues>\n            4.6323328278958797e-03 -9.1536080837249756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7163 -9.2325232923030853e-02</internalNodes>\n          <leafValues>\n            2.9184600710868835e-01 -7.4540497735142708e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7164 8.5644036531448364e-02</internalNodes>\n          <leafValues>\n            -1.0288530029356480e-02 4.1251561045646667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7165 2.2969970107078552e-01</internalNodes>\n          <leafValues>\n            -4.6802540309727192e-03 3.6509141325950623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7166 8.7508037686347961e-03</internalNodes>\n          <leafValues>\n            7.7816851437091827e-02 -6.3657559454441071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7167 5.7104961015284061e-03</internalNodes>\n          <leafValues>\n            -5.9653200209140778e-02 4.2732730507850647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7168 -4.8026451840996742e-03</internalNodes>\n          <leafValues>\n            -9.8918512463569641e-02 4.4956978410482407e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7169 3.2986800651997328e-03</internalNodes>\n          <leafValues>\n            3.3164538443088531e-02 -1.3477820158004761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7170 -4.0092850103974342e-03</internalNodes>\n          <leafValues>\n            1.3551770150661469e-01 -3.7139780819416046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7171 -7.7049341052770615e-04</internalNodes>\n          <leafValues>\n            2.6690600439906120e-02 -8.4502391517162323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7172 2.3074099794030190e-02</internalNodes>\n          <leafValues>\n            -2.6398969814181328e-02 1.8520879745483398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7173 9.9315540865063667e-03</internalNodes>\n          <leafValues>\n            2.1702500060200691e-02 -1.4147830009460449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7174 -4.3977480381727219e-02</internalNodes>\n          <leafValues>\n            -5.9306997060775757e-01 7.6594059355556965e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7175 -2.1170598920434713e-03</internalNodes>\n          <leafValues>\n            9.6989497542381287e-02 -4.9988958984613419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7176 -1.1178949847817421e-02</internalNodes>\n          <leafValues>\n            -1.5058480203151703e-01 3.1385689973831177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7177 -1.1888720327988267e-03</internalNodes>\n          <leafValues>\n            8.7665252387523651e-02 -6.8861946463584900e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7178 -1.2205859646201134e-02</internalNodes>\n          <leafValues>\n            8.2670666277408600e-02 -6.5326899290084839e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7179 -3.7645969539880753e-02</internalNodes>\n          <leafValues>\n            -4.8226159811019897e-01 5.5899759754538536e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7180 -1.7758710309863091e-03</internalNodes>\n          <leafValues>\n            -9.1606341302394867e-02 5.8380361646413803e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7181 -1.1116299778223038e-02</internalNodes>\n          <leafValues>\n            1.4710609614849091e-01 -2.9255999252200127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7182 4.3831788934767246e-04</internalNodes>\n          <leafValues>\n            -1.0494749993085861e-01 4.4445890933275223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7183 -9.8695211112499237e-02</internalNodes>\n          <leafValues>\n            2.6521149277687073e-01 -9.5453672111034393e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7184 1.1736120097339153e-02</internalNodes>\n          <leafValues>\n            2.8968680649995804e-02 -1.5355010330677032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7185 -3.6601141095161438e-02</internalNodes>\n          <leafValues>\n            2.4063609540462494e-01 -2.2525599226355553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7186 -5.2371289581060410e-02</internalNodes>\n          <leafValues>\n            -4.9006670713424683e-01 1.0319559834897518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7187 -3.1134579330682755e-03</internalNodes>\n          <leafValues>\n            6.2287129461765289e-02 -4.5234039425849915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7188 1.0345289483666420e-03</internalNodes>\n          <leafValues>\n            -5.6548729538917542e-02 1.1970130354166031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7189 -2.3240610025823116e-03</internalNodes>\n          <leafValues>\n            -9.5265246927738190e-02 3.2402478158473969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7190 -2.7458980679512024e-02</internalNodes>\n          <leafValues>\n            2.9548159241676331e-01 -1.6016509383916855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7191 -9.3150883913040161e-03</internalNodes>\n          <leafValues>\n            -1.1465849727392197e-01 2.8171680867671967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7192 7.6356199570000172e-03</internalNodes>\n          <leafValues>\n            2.9264479875564575e-02 -1.6166350245475769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7193 1.6107590869069099e-02</internalNodes>\n          <leafValues>\n            -3.0923349782824516e-02 1.6677390038967133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7194 6.1460789293050766e-02</internalNodes>\n          <leafValues>\n            8.1282109022140503e-03 -5.4833447933197021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7195 4.3377321213483810e-02</internalNodes>\n          <leafValues>\n            -7.7782347798347473e-03 3.5578370094299316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7196 -1.5809480100870132e-02</internalNodes>\n          <leafValues>\n            -3.1237179040908813e-01 1.4910760335624218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7197 -4.3263029307126999e-02</internalNodes>\n          <leafValues>\n            4.7393178939819336e-01 -9.4731850549578667e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7198 1.0775650152936578e-03</internalNodes>\n          <leafValues>\n            -1.0892640054225922e-01 5.0780758261680603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7199 -6.8012787960469723e-03</internalNodes>\n          <leafValues>\n            -9.3841306865215302e-02 3.8555730134248734e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7200 -3.8845991366542876e-04</internalNodes>\n          <leafValues>\n            6.4071871340274811e-02 -9.3577213585376740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7201 3.8177249953150749e-03</internalNodes>\n          <leafValues>\n            -4.7590740025043488e-02 7.1997672319412231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7202 -3.1246189028024673e-03</internalNodes>\n          <leafValues>\n            1.5269869565963745e-01 -4.8789650201797485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7203 6.0980509966611862e-02</internalNodes>\n          <leafValues>\n            8.0068446695804596e-03 -6.7602759599685669e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7204 2.1819709800183773e-03</internalNodes>\n          <leafValues>\n            -6.8491749465465546e-02 7.5863577425479889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7205 2.4469599593430758e-03</internalNodes>\n          <leafValues>\n            -7.4371293187141418e-02 3.2011859118938446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7206 1.4674840494990349e-03</internalNodes>\n          <leafValues>\n            -1.1912509799003601e-01 4.6667739748954773e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7207 -2.1786419674754143e-03</internalNodes>\n          <leafValues>\n            -6.5324276685714722e-02 7.6355278491973877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7208 -2.8284740983508527e-04</internalNodes>\n          <leafValues>\n            5.8292400091886520e-02 -8.7847188115119934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7209 1.4723110012710094e-02</internalNodes>\n          <leafValues>\n            1.9820490479469299e-01 -2.4962980300188065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7210 4.6598021872341633e-03</internalNodes>\n          <leafValues>\n            -9.3732737004756927e-02 5.4197840392589569e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7211 -6.0316991060972214e-02</internalNodes>\n          <leafValues>\n            -6.2958812713623047e-01 6.8706739693880081e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7212 -3.6654649302363396e-03</internalNodes>\n          <leafValues>\n            3.6130189895629883e-02 -1.2816099822521210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7213 1.4875479973852634e-02</internalNodes>\n          <leafValues>\n            -2.4313909932971001e-02 4.6657409518957138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7214 1.1842879652976990e-01</internalNodes>\n          <leafValues>\n            1.0476130060851574e-02 -5.1786392927169800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7215 1.9809199869632721e-01</internalNodes>\n          <leafValues>\n            1.0157800279557705e-02 -4.1872209310531616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7216 -1.0167530179023743e-01</internalNodes>\n          <leafValues>\n            -8.5121291875839233e-01 4.4935508631169796e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7217 -3.0325200408697128e-02</internalNodes>\n          <leafValues>\n            -3.1803390383720398e-01 6.4301840029656887e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7218 3.4531850367784500e-02</internalNodes>\n          <leafValues>\n            -1.2561430223286152e-02 3.4778198599815369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7219 -3.5133380442857742e-02</internalNodes>\n          <leafValues>\n            1.1475030332803726e-01 -1.7527149990200996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7220 5.3501729853451252e-03</internalNodes>\n          <leafValues>\n            3.5263419151306152e-02 -1.3867680728435516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7221 3.1209299340844154e-02</internalNodes>\n          <leafValues>\n            -2.0925100892782211e-02 1.4748610556125641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7222 -5.5827602045610547e-04</internalNodes>\n          <leafValues>\n            -9.5544241368770599e-02 5.6234899908304214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7223 -2.1599860489368439e-01</internalNodes>\n          <leafValues>\n            5.9710198640823364e-01 -3.9994427934288979e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7224 7.7018201351165771e-02</internalNodes>\n          <leafValues>\n            -1.2182369828224182e-02 3.5995039343833923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7225 -2.5808349251747131e-02</internalNodes>\n          <leafValues>\n            -1.9994600117206573e-01 1.6562040895223618e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7226 4.0148189291357994e-03</internalNodes>\n          <leafValues>\n            3.8874860852956772e-02 -1.1775989830493927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7227 7.4287859206378926e-06</internalNodes>\n          <leafValues>\n            3.1405460089445114e-02 -4.9142509698867798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7228 -2.8249230235815048e-03</internalNodes>\n          <leafValues>\n            -5.5889118462800980e-02 1.1791130155324936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7229 -2.2713130339980125e-02</internalNodes>\n          <leafValues>\n            1.0733339935541153e-01 -4.1647680103778839e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7230 -1.0052169673144817e-02</internalNodes>\n          <leafValues>\n            -1.4102290570735931e-01 3.7707269191741943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7231 -2.1023969352245331e-01</internalNodes>\n          <leafValues>\n            -6.3184642791748047e-01 3.6316630430519581e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7232 -1.1812710203230381e-02</internalNodes>\n          <leafValues>\n            1.2123010307550430e-01 -5.0373788923025131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7233 6.3666589558124542e-03</internalNodes>\n          <leafValues>\n            3.0198849737644196e-02 -9.5920257270336151e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7234 -1.2146410346031189e-01</internalNodes>\n          <leafValues>\n            -6.8696069717407227e-01 6.8671889603137970e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7235 2.3568300530314445e-02</internalNodes>\n          <leafValues>\n            -1.0376869700849056e-02 2.6333120465278625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7236 -4.9841329455375671e-03</internalNodes>\n          <leafValues>\n            5.2314449101686478e-02 -8.6597919464111328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7237 1.4171230141073465e-03</internalNodes>\n          <leafValues>\n            -4.1445188224315643e-02 9.3332767486572266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7238 1.6522710211575031e-03</internalNodes>\n          <leafValues>\n            2.7292339131236076e-02 -1.7193740606307983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7239 -4.2191468179225922e-02</internalNodes>\n          <leafValues>\n            7.7588337659835815e-01 -2.4552440736442804e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7240 -1.5193390427157283e-03</internalNodes>\n          <leafValues>\n            2.3297169804573059e-01 -1.9499920308589935e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7241 -5.9203859418630600e-03</internalNodes>\n          <leafValues>\n            -8.3495929837226868e-02 1.9756000488996506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7242 6.4658280462026596e-03</internalNodes>\n          <leafValues>\n            -4.0668301284313202e-02 1.2236029654741287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7243 -4.8110671341419220e-02</internalNodes>\n          <leafValues>\n            -3.1629499793052673e-01 1.2694340199232101e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7244 5.0246939063072205e-03</internalNodes>\n          <leafValues>\n            3.1356900930404663e-02 -1.9190339744091034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7245 1.1158010363578796e-01</internalNodes>\n          <leafValues>\n            -1.4073889702558517e-02 1.7848959565162659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7246 -6.4665876328945160e-02</internalNodes>\n          <leafValues>\n            -5.6230849027633667e-01 8.2082729786634445e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7247 -5.7942468672990799e-02</internalNodes>\n          <leafValues>\n            7.7341747283935547e-01 -4.3547940440475941e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7248 -8.1669846549630165e-03</internalNodes>\n          <leafValues>\n            2.1019349992275238e-01 -2.0802220329642296e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7249 2.8506839647889137e-02</internalNodes>\n          <leafValues>\n            8.1413127481937408e-02 -6.2663510441780090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7250 2.4857679381966591e-03</internalNodes>\n          <leafValues>\n            -1.5635970234870911e-01 3.5210859030485153e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7251 1.9798949360847473e-02</internalNodes>\n          <leafValues>\n            1.1353739537298679e-02 -1.6531160473823547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7252 -2.7027919888496399e-02</internalNodes>\n          <leafValues>\n            2.8912219405174255e-01 -1.6753070056438446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7253 -6.9706928916275501e-03</internalNodes>\n          <leafValues>\n            -2.5769388675689697e-01 1.6355020925402641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7254 1.1425119591876864e-03</internalNodes>\n          <leafValues>\n            -4.1056800633668900e-02 1.1580900102853775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7255 -1.3041249476373196e-03</internalNodes>\n          <leafValues>\n            5.1082979887723923e-02 -1.1724369972944260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7256 3.7698419764637947e-03</internalNodes>\n          <leafValues>\n            5.8557331562042236e-02 -8.2840107381343842e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7257 -4.8689868301153183e-02</internalNodes>\n          <leafValues>\n            -3.8769158720970154e-01 8.6165666580200195e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7258 -1.1471740156412125e-01</internalNodes>\n          <leafValues>\n            1.3444100320339203e-01 -4.2848691344261169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7259 2.3503519594669342e-02</internalNodes>\n          <leafValues>\n            3.8586359005421400e-03 -4.3615299463272095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7260 -5.9582752874121070e-04</internalNodes>\n          <leafValues>\n            4.2376730591058731e-02 -1.2161590158939362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7261 5.4052029736340046e-03</internalNodes>\n          <leafValues>\n            -2.3753000423312187e-02 2.0137269794940948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7262 9.1158300638198853e-03</internalNodes>\n          <leafValues>\n            2.8088169172406197e-02 -1.9667729735374451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7263 3.3211729023605585e-03</internalNodes>\n          <leafValues>\n            -5.1258899271488190e-02 4.7993980348110199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7264 1.2975499965250492e-02</internalNodes>\n          <leafValues>\n            1.1851020157337189e-02 -3.9444020390510559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7265 -5.0546238198876381e-03</internalNodes>\n          <leafValues>\n            -1.0956159979104996e-01 4.2662780731916428e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7266 -7.6824478805065155e-02</internalNodes>\n          <leafValues>\n            7.6269572973251343e-01 -6.6229291260242462e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7267 -1.8690669676288962e-03</internalNodes>\n          <leafValues>\n            4.0112659335136414e-02 -7.1398198604583740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7268 -6.0407500714063644e-03</internalNodes>\n          <leafValues>\n            1.2614290416240692e-01 -3.9585150778293610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7269 -4.5013230293989182e-02</internalNodes>\n          <leafValues>\n            -2.1871440112590790e-01 6.5213250927627087e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7270 3.8492688909173012e-03</internalNodes>\n          <leafValues>\n            -9.2213302850723267e-02 6.6925182938575745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7271 -4.3247821740806103e-03</internalNodes>\n          <leafValues>\n            1.4973750710487366e-01 -3.1123559921979904e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7272 -2.6776840910315514e-02</internalNodes>\n          <leafValues>\n            -1.1432229727506638e-01 5.3090259432792664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7273 2.0645130425691605e-03</internalNodes>\n          <leafValues>\n            -3.8483418524265289e-02 7.1507766842842102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7274 5.7206518948078156e-02</internalNodes>\n          <leafValues>\n            1.2463140301406384e-02 -3.9884459972381592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7275 7.7696829102933407e-03</internalNodes>\n          <leafValues>\n            -2.4309959262609482e-02 6.1120841652154922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7276 2.8191099409013987e-03</internalNodes>\n          <leafValues>\n            6.2243871390819550e-02 -7.9774282872676849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7277 -5.1747109740972519e-02</internalNodes>\n          <leafValues>\n            -2.0475579798221588e-01 9.8433922976255417e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7278 4.2840079404413700e-03</internalNodes>\n          <leafValues>\n            -3.6799129098653793e-02 1.2380699813365936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7279 -8.0563372466713190e-04</internalNodes>\n          <leafValues>\n            -5.3742490708827972e-02 6.8746432662010193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7280 4.6062450855970383e-02</internalNodes>\n          <leafValues>\n            7.3871058411896229e-03 -6.1133211851119995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7281 6.6807270050048828e-02</internalNodes>\n          <leafValues>\n            -1.2545309960842133e-02 1.5731689333915710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7282 2.0568699110299349e-03</internalNodes>\n          <leafValues>\n            4.3087389320135117e-02 -1.1062700301408768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7283 2.8760819695889950e-03</internalNodes>\n          <leafValues>\n            2.5800980627536774e-02 -8.4697857499122620e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7284 -4.9642049707472324e-03</internalNodes>\n          <leafValues>\n            8.3168722689151764e-02 -5.6750860065221786e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>385</maxWeakCount>\n      <stageThreshold>-1.1474020481109619e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 7285 1.5166849829256535e-02</internalNodes>\n          <leafValues>\n            -1.7501029372215271e-01 1.5165300667285919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7286 4.1852002032101154e-03</internalNodes>\n          <leafValues>\n            -1.8253259360790253e-01 1.0545530170202255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7287 -2.6159440167248249e-03</internalNodes>\n          <leafValues>\n            -2.1517610549926758e-01 7.7460259199142456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7288 2.7645078953355551e-03</internalNodes>\n          <leafValues>\n            -1.1506909877061844e-01 6.7771263420581818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7289 -2.7296729967929423e-04</internalNodes>\n          <leafValues>\n            5.5712651461362839e-02 -2.8723669052124023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7290 2.4992981343530118e-04</internalNodes>\n          <leafValues>\n            5.5202499032020569e-02 -1.5191499888896942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7291 1.3287579640746117e-03</internalNodes>\n          <leafValues>\n            -1.2567579746246338e-01 9.4094827771186829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7292 -2.4653770960867405e-03</internalNodes>\n          <leafValues>\n            4.9393590539693832e-02 -2.2239279747009277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7293 -3.2979049719870090e-03</internalNodes>\n          <leafValues>\n            -1.7367990314960480e-01 6.9391071796417236e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7294 -4.9667809158563614e-02</internalNodes>\n          <leafValues>\n            3.2854220271110535e-01 -3.3067218959331512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7295 5.7844468392431736e-03</internalNodes>\n          <leafValues>\n            6.1289519071578979e-02 -1.6873429715633392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7296 2.9754149727523327e-03</internalNodes>\n          <leafValues>\n            -2.4017000198364258e-01 5.7906478643417358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7297 2.3769649851601571e-04</internalNodes>\n          <leafValues>\n            1.1141020059585571e-01 -8.6508020758628845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7298 5.4410300217568874e-03</internalNodes>\n          <leafValues>\n            -8.9257702231407166e-02 2.8492979705333710e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7299 2.5746610481292009e-03</internalNodes>\n          <leafValues>\n            6.0383580625057220e-02 -1.4771540462970734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7300 -1.2155439704656601e-02</internalNodes>\n          <leafValues>\n            1.8026730418205261e-01 -3.5744961351156235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7301 5.5069979280233383e-03</internalNodes>\n          <leafValues>\n            6.1453469097614288e-02 -1.6147279739379883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7302 -3.0918378615751863e-04</internalNodes>\n          <leafValues>\n            -9.1295689344406128e-02 6.8111963570117950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7303 -7.7705271542072296e-02</internalNodes>\n          <leafValues>\n            3.3344480395317078e-01 -2.6795169338583946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7304 4.5874878764152527e-02</internalNodes>\n          <leafValues>\n            6.2387371435761452e-03 -2.2738909721374512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7305 3.1658360967412591e-04</internalNodes>\n          <leafValues>\n            -1.1297920346260071e-01 9.8602570593357086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7306 -5.2962768822908401e-02</internalNodes>\n          <leafValues>\n            -6.0117399692535400e-01 1.0004489682614803e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7307 5.3028380498290062e-03</internalNodes>\n          <leafValues>\n            3.6164399236440659e-02 -2.6359859108924866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7308 -2.3473590612411499e-02</internalNodes>\n          <leafValues>\n            1.0663519799709320e-01 -3.0653990805149078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7309 -1.5029460191726685e-03</internalNodes>\n          <leafValues>\n            6.2882840633392334e-02 -1.2285350263118744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7310 -1.2232650071382523e-02</internalNodes>\n          <leafValues>\n            -2.3047080636024475e-01 4.0048789232969284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7311 -4.7428268939256668e-02</internalNodes>\n          <leafValues>\n            4.4135141372680664e-01 -1.8873579800128937e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7312 3.6379251629114151e-02</internalNodes>\n          <leafValues>\n            -1.3020380400121212e-02 1.4685730636119843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7313 3.6343511193990707e-02</internalNodes>\n          <leafValues>\n            3.8788039237260818e-02 -1.9903139770030975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7314 -1.0792929679155350e-01</internalNodes>\n          <leafValues>\n            1.6177520155906677e-01 -6.3546439632773399e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7315 -9.5479741692543030e-02</internalNodes>\n          <leafValues>\n            3.7320658564567566e-01 -2.3940289393067360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7316 3.8954298943281174e-02</internalNodes>\n          <leafValues>\n            1.1239799670875072e-02 -3.4794488549232483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7317 -3.2646209001541138e-02</internalNodes>\n          <leafValues>\n            -3.1797638535499573e-01 2.1780189126729965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7318 -2.5872089900076389e-03</internalNodes>\n          <leafValues>\n            4.7268610447645187e-02 -1.5624779462814331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7319 1.2979200109839439e-02</internalNodes>\n          <leafValues>\n            -2.4394070729613304e-02 3.0341750383377075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7320 -1.7490500584244728e-02</internalNodes>\n          <leafValues>\n            1.1967100203037262e-01 -3.4825209528207779e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7321 8.2290060818195343e-03</internalNodes>\n          <leafValues>\n            5.1706299185752869e-02 -1.4124310016632080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7322 8.7701035663485527e-03</internalNodes>\n          <leafValues>\n            1.2139629572629929e-02 -9.3410186469554901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7323 -2.5523800868541002e-03</internalNodes>\n          <leafValues>\n            9.1882079839706421e-02 -7.9693943262100220e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7324 1.2640489730983973e-03</internalNodes>\n          <leafValues>\n            -4.2868331074714661e-02 9.8469160497188568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7325 -3.8762169424444437e-03</internalNodes>\n          <leafValues>\n            6.4477890729904175e-02 -1.1426970362663269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7326 1.5416350215673447e-03</internalNodes>\n          <leafValues>\n            -3.8240168243646622e-02 5.0880789756774902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7327 7.6829752651974559e-04</internalNodes>\n          <leafValues>\n            -1.2869219481945038e-01 5.8161370456218719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7328 1.6587260179221630e-03</internalNodes>\n          <leafValues>\n            1.6391919553279877e-01 -4.7164998948574066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7329 1.6514799790456891e-03</internalNodes>\n          <leafValues>\n            -5.9221718460321426e-02 1.3165080547332764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7330 -3.8682940066792071e-04</internalNodes>\n          <leafValues>\n            6.4493581652641296e-02 -1.0728739947080612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7331 -3.4595469478517771e-03</internalNodes>\n          <leafValues>\n            8.0743201076984406e-02 -9.2568591237068176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7332 3.5130660980939865e-02</internalNodes>\n          <leafValues>\n            1.5520620159804821e-02 -1.9732579588890076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7333 1.2025350332260132e-01</internalNodes>\n          <leafValues>\n            -2.0497029647231102e-02 4.0905651450157166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7334 7.8581331763416529e-04</internalNodes>\n          <leafValues>\n            -9.4858787953853607e-02 6.9316640496253967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7335 6.1606317758560181e-03</internalNodes>\n          <leafValues>\n            6.0556668788194656e-02 -1.2436509877443314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7336 1.3351559638977051e-02</internalNodes>\n          <leafValues>\n            1.7634969204664230e-02 -1.4649459719657898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7337 1.9873639568686485e-02</internalNodes>\n          <leafValues>\n            -2.4449799209833145e-02 2.7322331070899963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7338 -2.3918889928609133e-03</internalNodes>\n          <leafValues>\n            -4.0744900703430176e-02 4.9925319850444794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7339 8.6433859542012215e-03</internalNodes>\n          <leafValues>\n            2.8967950493097305e-02 -2.3661069571971893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7340 -8.8321920484304428e-03</internalNodes>\n          <leafValues>\n            1.2054029852151871e-01 -2.7702990919351578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7341 -4.4150479137897491e-02</internalNodes>\n          <leafValues>\n            5.0038051605224609e-01 -1.2251130305230618e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7342 -4.0243011899292469e-03</internalNodes>\n          <leafValues>\n            -1.9502529501914978e-01 2.5193009525537491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7343 9.8465122282505035e-03</internalNodes>\n          <leafValues>\n            -6.0283869504928589e-02 1.2665469944477081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7344 -2.7608149684965611e-03</internalNodes>\n          <leafValues>\n            -8.3926528692245483e-02 6.0102649033069611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7345 3.9076831191778183e-02</internalNodes>\n          <leafValues>\n            1.5327650122344494e-02 -4.3197798728942871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7346 3.8136269431561232e-03</internalNodes>\n          <leafValues>\n            -3.1281091272830963e-02 7.7942118048667908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7347 2.7646059170365334e-03</internalNodes>\n          <leafValues>\n            1.7334839329123497e-02 -3.4732720255851746e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7348 -3.6096980329602957e-03</internalNodes>\n          <leafValues>\n            -8.2286708056926727e-02 2.8170879930257797e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7349 3.5445080138742924e-03</internalNodes>\n          <leafValues>\n            -1.0557620227336884e-01 6.0050919651985168e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7350 1.2985900044441223e-02</internalNodes>\n          <leafValues>\n            1.8597990274429321e-02 -9.4987802207469940e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7351 -2.0027540624141693e-02</internalNodes>\n          <leafValues>\n            2.6007258892059326e-01 -2.7079159393906593e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7352 -7.2966597974300385e-02</internalNodes>\n          <leafValues>\n            -7.6848107576370239e-01 2.3947900626808405e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7353 -2.1148719824850559e-03</internalNodes>\n          <leafValues>\n            -1.0763320326805115e-01 5.2361391484737396e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7354 -7.7667146921157837e-02</internalNodes>\n          <leafValues>\n            1.7822329699993134e-01 -3.1463298946619034e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7355 -4.6600410714745522e-03</internalNodes>\n          <leafValues>\n            -2.0386479794979095e-01 3.9025411009788513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7356 1.7059499397873878e-02</internalNodes>\n          <leafValues>\n            1.8954740837216377e-02 -1.7260240018367767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7357 4.3174691498279572e-02</internalNodes>\n          <leafValues>\n            -3.1685609370470047e-02 2.3346449434757233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7358 -4.8927929997444153e-01</internalNodes>\n          <leafValues>\n            -7.1043139696121216e-01 4.6672620810568333e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7359 9.1495506465435028e-02</internalNodes>\n          <leafValues>\n            1.6027629375457764e-02 -4.0538018941879272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7360 -4.6843249350786209e-02</internalNodes>\n          <leafValues>\n            6.9358861446380615e-01 -2.0055349450558424e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7361 6.0863760299980640e-03</internalNodes>\n          <leafValues>\n            -1.5218159556388855e-01 4.0408309549093246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7362 4.3676611036062241e-02</internalNodes>\n          <leafValues>\n            1.2257159687578678e-02 -2.5996598601341248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7363 -4.9580529332160950e-02</internalNodes>\n          <leafValues>\n            6.7571347951889038e-01 -8.0354865640401840e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7364 -2.8614638722501695e-04</internalNodes>\n          <leafValues>\n            3.4548770636320114e-02 -6.1849180608987808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7365 -1.1863199993968010e-02</internalNodes>\n          <leafValues>\n            -1.2061329931020737e-01 5.1416579633951187e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7366 1.4754010364413261e-02</internalNodes>\n          <leafValues>\n            -2.4638049304485321e-02 1.5234139561653137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7367 -5.1772277802228928e-03</internalNodes>\n          <leafValues>\n            1.8428930640220642e-01 -4.2200319468975067e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7368 -2.0033530890941620e-02</internalNodes>\n          <leafValues>\n            -2.0986419916152954e-01 2.3016780614852905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7369 4.1349478997290134e-03</internalNodes>\n          <leafValues>\n            3.8500111550092697e-02 -1.5400919318199158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7370 4.9832498189061880e-04</internalNodes>\n          <leafValues>\n            -5.6834470480680466e-02 1.1737540364265442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7371 1.5235079918056726e-03</internalNodes>\n          <leafValues>\n            -8.2305751740932465e-02 7.3340758681297302e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7372 2.6669060811400414e-02</internalNodes>\n          <leafValues>\n            1.7131920903921127e-02 -3.3337280154228210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7373 -2.5192899629473686e-02</internalNodes>\n          <leafValues>\n            1.8348090350627899e-01 -3.5275999456644058e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7374 1.1769080301746726e-03</internalNodes>\n          <leafValues>\n            -1.3197030127048492e-01 2.4242419749498367e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7375 -6.6034111659973860e-04</internalNodes>\n          <leafValues>\n            -1.0725550353527069e-01 5.8605268597602844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7376 4.3386619538068771e-02</internalNodes>\n          <leafValues>\n            -1.6498409211635590e-02 3.9293581247329712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7377 -1.1490290053188801e-02</internalNodes>\n          <leafValues>\n            -2.6332950592041016e-01 2.4240590631961823e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7378 8.5933692753314972e-02</internalNodes>\n          <leafValues>\n            -1.6279760748147964e-02 4.1729450225830078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7379 2.0756269805133343e-03</internalNodes>\n          <leafValues>\n            5.2543889731168747e-02 -1.0574310272932053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7380 1.4016899513080716e-03</internalNodes>\n          <leafValues>\n            -4.6594541519880295e-02 1.1355359852313995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7381 -3.4351870417594910e-03</internalNodes>\n          <leafValues>\n            -1.0806330293416977e-01 5.8778531849384308e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7382 -1.8299809889867902e-03</internalNodes>\n          <leafValues>\n            6.0645598918199539e-02 -6.6084399819374084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7383 -3.4186599077656865e-04</internalNodes>\n          <leafValues>\n            -1.2682560086250305e-01 4.9244668334722519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7384 1.0616290383040905e-02</internalNodes>\n          <leafValues>\n            -5.5619470775127411e-02 1.2270829826593399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7385 3.9490770548582077e-02</internalNodes>\n          <leafValues>\n            8.2882875576615334e-03 -6.6194152832031250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7386 -1.9746040925383568e-02</internalNodes>\n          <leafValues>\n            1.5761069953441620e-01 -9.3961963430047035e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7387 4.6383799053728580e-04</internalNodes>\n          <leafValues>\n            -2.0127220451831818e-01 2.6706330478191376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7388 5.1521410932764411e-04</internalNodes>\n          <leafValues>\n            -8.6019717156887054e-02 6.7131496965885162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7389 -1.1283540166914463e-02</internalNodes>\n          <leafValues>\n            -2.2754089534282684e-01 2.2250600159168243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7390 -8.4253363311290741e-03</internalNodes>\n          <leafValues>\n            1.6505259275436401e-01 -5.0438180565834045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7391 3.0604569241404533e-02</internalNodes>\n          <leafValues>\n            2.7500540018081665e-02 -2.0984129607677460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7392 5.0000958144664764e-03</internalNodes>\n          <leafValues>\n            -3.8911771029233932e-02 1.1553470045328140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7393 4.1644461452960968e-02</internalNodes>\n          <leafValues>\n            -1.4164280146360397e-02 4.4004911184310913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7394 -3.9140251465141773e-03</internalNodes>\n          <leafValues>\n            -1.1528140306472778e-01 2.7629520744085312e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7395 -2.2060431074351072e-03</internalNodes>\n          <leafValues>\n            7.4794493615627289e-02 -7.5950391590595245e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7396 -7.4060507118701935e-02</internalNodes>\n          <leafValues>\n            -6.0902571678161621e-01 3.8528270088136196e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7397 1.5966329956427217e-03</internalNodes>\n          <leafValues>\n            -7.0015199482440948e-02 1.1019259691238403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7398 2.0102860871702433e-03</internalNodes>\n          <leafValues>\n            -3.1859181821346283e-02 7.1592740714550018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7399 3.2757699955254793e-03</internalNodes>\n          <leafValues>\n            -5.2260760217905045e-02 1.2652389705181122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7400 3.6700100172311068e-03</internalNodes>\n          <leafValues>\n            5.4018720984458923e-02 -4.6530380845069885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7401 -5.7776779867708683e-03</internalNodes>\n          <leafValues>\n            -2.2940860688686371e-01 2.4704450741410255e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7402 3.7388929631561041e-03</internalNodes>\n          <leafValues>\n            -4.8273131251335144e-02 7.6772913336753845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7403 -1.2404560111463070e-02</internalNodes>\n          <leafValues>\n            1.1491999775171280e-01 -4.9308139830827713e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7404 9.0428609400987625e-03</internalNodes>\n          <leafValues>\n            4.3013140559196472e-02 -1.4439429342746735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7405 6.1762649565935135e-03</internalNodes>\n          <leafValues>\n            -3.9362821727991104e-02 1.6073490679264069e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7406 2.1051440387964249e-02</internalNodes>\n          <leafValues>\n            2.4608060717582703e-02 -1.3768480718135834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7407 2.7457328978925943e-03</internalNodes>\n          <leafValues>\n            -6.3271999359130859e-02 9.1269433498382568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7408 -1.0777959600090981e-02</internalNodes>\n          <leafValues>\n            9.1245301067829132e-02 -3.0110929161310196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7409 1.6699189320206642e-02</internalNodes>\n          <leafValues>\n            4.3539609760046005e-02 -1.5240140259265900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7410 5.4665589705109596e-03</internalNodes>\n          <leafValues>\n            -5.3575031459331512e-02 6.0266200453042984e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7411 -3.2001500949263573e-03</internalNodes>\n          <leafValues>\n            1.4220920205116272e-01 -4.0823381394147873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7412 4.7289058566093445e-02</internalNodes>\n          <leafValues>\n            1.5853699296712875e-02 -2.7123591303825378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7413 -1.3604690320789814e-03</internalNodes>\n          <leafValues>\n            4.0636081248521805e-02 -1.4885699748992920e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7414 6.2847061781212687e-04</internalNodes>\n          <leafValues>\n            4.1833158582448959e-02 -1.2394890189170837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7415 -3.7036079913377762e-02</internalNodes>\n          <leafValues>\n            -3.6944690346717834e-01 1.3664159923791885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7416 -2.2578550502657890e-02</internalNodes>\n          <leafValues>\n            1.1812049895524979e-01 -2.2939860820770264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7417 3.2851321157068014e-03</internalNodes>\n          <leafValues>\n            3.1136950850486755e-01 -1.8856419250369072e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7418 -2.0225369930267334e-01</internalNodes>\n          <leafValues>\n            -6.2465697526931763e-01 3.9239428006112576e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7419 -4.9903858453035355e-03</internalNodes>\n          <leafValues>\n            1.0674989968538284e-01 -6.0000490397214890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7420 -2.2539479658007622e-02</internalNodes>\n          <leafValues>\n            -1.9891190528869629e-01 1.8829969689249992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7421 2.6878459379076958e-02</internalNodes>\n          <leafValues>\n            -3.1185189262032509e-02 2.0841309428215027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7422 -6.3416860066354275e-03</internalNodes>\n          <leafValues>\n            -8.3658866584300995e-02 4.0603660047054291e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7423 2.8207020368427038e-03</internalNodes>\n          <leafValues>\n            -5.8255858719348907e-02 9.7203142940998077e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7424 2.4739980697631836e-02</internalNodes>\n          <leafValues>\n            -1.8699239939451218e-02 9.9858507513999939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7425 7.4140671640634537e-03</internalNodes>\n          <leafValues>\n            2.9613019898533821e-02 -1.9177620112895966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7426 -8.3040986210107803e-03</internalNodes>\n          <leafValues>\n            1.2958979606628418e-01 -4.2671140283346176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7427 1.1470559984445572e-03</internalNodes>\n          <leafValues>\n            -1.5365119278430939e-01 4.1083239018917084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7428 -1.6470700502395630e-01</internalNodes>\n          <leafValues>\n            -4.1437658667564392e-01 1.3509290292859077e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7429 2.4328620731830597e-01</internalNodes>\n          <leafValues>\n            -1.2499390169978142e-02 4.4623729586601257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7430 2.4545079097151756e-02</internalNodes>\n          <leafValues>\n            2.2270770743489265e-02 -1.0766860097646713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7431 -3.6004021763801575e-02</internalNodes>\n          <leafValues>\n            2.1495530009269714e-01 -2.3298330605030060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7432 1.7012679949402809e-02</internalNodes>\n          <leafValues>\n            2.8566520661115646e-02 -1.3689860701560974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7433 -1.7947000451385975e-03</internalNodes>\n          <leafValues>\n            2.6063710451126099e-02 -1.8060439825057983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7434 -3.4492081403732300e-01</internalNodes>\n          <leafValues>\n            -5.9101992845535278e-01 1.3455889420583844e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7435 -1.0471549816429615e-02</internalNodes>\n          <leafValues>\n            -6.4394369721412659e-02 8.1244252622127533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7436 6.4335219562053680e-02</internalNodes>\n          <leafValues>\n            -5.0874471664428711e-02 8.3752527832984924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7437 4.6703450381755829e-02</internalNodes>\n          <leafValues>\n            8.1825926899909973e-03 -6.2220478057861328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7438 6.7396290600299835e-02</internalNodes>\n          <leafValues>\n            -4.0585128590464592e-03 3.1115430593490601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7439 -1.8122399342246354e-04</internalNodes>\n          <leafValues>\n            6.3599228858947754e-02 -8.3870701491832733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7440 -4.6783890575170517e-02</internalNodes>\n          <leafValues>\n            -4.3748119473457336e-01 3.6999220028519630e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7441 1.2537419795989990e-01</internalNodes>\n          <leafValues>\n            -7.1869022212922573e-03 6.9267672300338745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7442 3.5549318999983370e-04</internalNodes>\n          <leafValues>\n            3.5804919898509979e-02 -4.1999049484729767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7443 -1.8169870600104332e-02</internalNodes>\n          <leafValues>\n            -2.6467940211296082e-01 1.9274869933724403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7444 2.7509370818734169e-02</internalNodes>\n          <leafValues>\n            -9.9343024194240570e-03 1.2481729686260223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7445 -3.1984839588403702e-02</internalNodes>\n          <leafValues>\n            2.5694110989570618e-01 -2.6392020285129547e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7446 -1.2891650199890137e-02</internalNodes>\n          <leafValues>\n            -1.8838110566139221e-01 1.6135750338435173e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7447 4.5009091496467590e-02</internalNodes>\n          <leafValues>\n            8.4453048184514046e-03 -5.7920891046524048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7448 3.9589041844010353e-03</internalNodes>\n          <leafValues>\n            -4.3672330677509308e-02 1.2087629735469818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7449 2.7181839104741812e-03</internalNodes>\n          <leafValues>\n            -4.0779389441013336e-02 1.2974439561367035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7450 -7.5994711369276047e-04</internalNodes>\n          <leafValues>\n            3.2954100519418716e-02 -8.6419321596622467e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7451 6.6315899603068829e-03</internalNodes>\n          <leafValues>\n            3.6079831421375275e-02 -1.5763629972934723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7452 -3.6433320492506027e-03</internalNodes>\n          <leafValues>\n            -2.9832119122147560e-02 6.2801547348499298e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7453 -6.4768336713314056e-02</internalNodes>\n          <leafValues>\n            -8.4351742267608643e-01 6.0920589603483677e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7454 4.1712251305580139e-01</internalNodes>\n          <leafValues>\n            3.0659181065857410e-03 -4.4269698858261108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7455 1.8854279816150665e-01</internalNodes>\n          <leafValues>\n            4.8159952275454998e-03 -9.5497727394104004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7456 2.3751270025968552e-02</internalNodes>\n          <leafValues>\n            -1.2166289612650871e-02 3.0827128887176514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7457 1.8907970516011119e-03</internalNodes>\n          <leafValues>\n            -1.2497080117464066e-01 3.7261988967657089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7458 -1.5546990325674415e-03</internalNodes>\n          <leafValues>\n            7.3636576533317566e-02 -4.9398850649595261e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7459 -9.2505775392055511e-03</internalNodes>\n          <leafValues>\n            1.2446039915084839e-01 -3.8673549890518188e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7460 -9.9219558760523796e-03</internalNodes>\n          <leafValues>\n            -1.2231759727001190e-01 2.7252480387687683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7461 -6.7504931939765811e-04</internalNodes>\n          <leafValues>\n            8.0792732536792755e-02 -6.1003699898719788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7462 -1.3286190107464790e-02</internalNodes>\n          <leafValues>\n            1.7295649647712708e-01 -3.0486939474940300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7463 4.3905568309128284e-03</internalNodes>\n          <leafValues>\n            2.9421260580420494e-02 -1.8230539560317993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7464 -1.8879309296607971e-02</internalNodes>\n          <leafValues>\n            -5.3837429732084274e-02 2.8330469503998756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7465 -6.9391563534736633e-02</internalNodes>\n          <leafValues>\n            5.4713129997253418e-01 -9.0404544025659561e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7466 7.8226983547210693e-02</internalNodes>\n          <leafValues>\n            6.9561759009957314e-03 -1.5992170572280884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7467 -9.5910448580980301e-03</internalNodes>\n          <leafValues>\n            8.3477370440959930e-02 -6.0714289546012878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7468 8.0856353044509888e-02</internalNodes>\n          <leafValues>\n            -3.1028070952743292e-03 8.1530278921127319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7469 -6.9029820151627064e-03</internalNodes>\n          <leafValues>\n            -6.2625996768474579e-02 7.7994093298912048e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7470 3.8219179958105087e-02</internalNodes>\n          <leafValues>\n            -9.4691133126616478e-03 4.1828629374504089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7471 -7.2923908010125160e-04</internalNodes>\n          <leafValues>\n            5.4394990205764771e-02 -1.0869490355253220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7472 -1.1224360205233097e-02</internalNodes>\n          <leafValues>\n            -2.8774300217628479e-01 1.9332440569996834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7473 -2.3755239322781563e-02</internalNodes>\n          <leafValues>\n            2.9632499814033508e-01 -1.6995029523968697e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7474 2.5170940905809402e-02</internalNodes>\n          <leafValues>\n            1.8151640892028809e-02 -6.9211177527904510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7475 8.4619410336017609e-02</internalNodes>\n          <leafValues>\n            -1.2618330307304859e-02 4.0188309550285339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7476 -2.8461799956858158e-03</internalNodes>\n          <leafValues>\n            -1.6565479338169098e-01 3.5540379583835602e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7477 9.9000544287264347e-04</internalNodes>\n          <leafValues>\n            -7.0647209882736206e-02 9.2070832848548889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7478 8.5722869262099266e-03</internalNodes>\n          <leafValues>\n            -1.6599319875240326e-02 6.0025580227375031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7479 7.7498499304056168e-03</internalNodes>\n          <leafValues>\n            2.5065049529075623e-02 -2.0419560372829437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7480 -5.1633790135383606e-03</internalNodes>\n          <leafValues>\n            5.6465640664100647e-02 -3.9366569370031357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7481 3.4570649731904268e-03</internalNodes>\n          <leafValues>\n            -4.8712749034166336e-02 1.1756400018930435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7482 1.5435590175911784e-03</internalNodes>\n          <leafValues>\n            -1.2385150045156479e-01 4.7240950167179108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7483 3.9221469312906265e-02</internalNodes>\n          <leafValues>\n            9.7949290648102760e-03 -5.5965268611907959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7484 -4.8019930720329285e-02</internalNodes>\n          <leafValues>\n            -2.4514609575271606e-01 1.5544380061328411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7485 1.7867749556899071e-02</internalNodes>\n          <leafValues>\n            -2.6458689942955971e-02 1.8536129593849182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7486 -7.8233405947685242e-03</internalNodes>\n          <leafValues>\n            -1.2305969744920731e-01 2.1850170567631721e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7487 -4.8894518986344337e-03</internalNodes>\n          <leafValues>\n            2.5086471438407898e-01 -1.9914150238037109e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7488 1.1090599745512009e-01</internalNodes>\n          <leafValues>\n            2.1982348989695311e-03 -9.6110188961029053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7489 5.3139701485633850e-03</internalNodes>\n          <leafValues>\n            -7.0207841694355011e-02 7.4792057275772095e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7490 -4.0226429700851440e-03</internalNodes>\n          <leafValues>\n            -9.2982061207294464e-02 2.7642169967293739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7491 -9.9820762872695923e-02</internalNodes>\n          <leafValues>\n            -8.2527607679367065e-01 5.8367499150335789e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7492 3.2612269278615713e-03</internalNodes>\n          <leafValues>\n            3.0481850728392601e-02 -4.8289291560649872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7493 -4.1559059172868729e-02</internalNodes>\n          <leafValues>\n            5.8879297971725464e-01 -8.5169300436973572e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7494 5.4297139868140221e-03</internalNodes>\n          <leafValues>\n            1.8141800537705421e-02 -1.3948309421539307e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7495 1.6756299883127213e-02</internalNodes>\n          <leafValues>\n            1.2322929687798023e-02 -4.1245520114898682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7496 -1.7563860863447189e-02</internalNodes>\n          <leafValues>\n            1.1385770142078400e-01 -3.0968630686402321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7497 1.8308760598301888e-02</internalNodes>\n          <leafValues>\n            -3.5930249840021133e-02 1.4697270095348358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7498 3.5556308925151825e-02</internalNodes>\n          <leafValues>\n            1.0190679691731930e-02 -2.5837650895118713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7499 -5.1635081035783514e-05</internalNodes>\n          <leafValues>\n            4.6089090406894684e-02 -1.1719120293855667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7500 2.5128800189122558e-04</internalNodes>\n          <leafValues>\n            -4.0896330028772354e-02 1.0669410228729248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7501 -1.5876770485192537e-03</internalNodes>\n          <leafValues>\n            1.0786730051040649e-01 -4.5890059322118759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7502 -9.5712337642908096e-03</internalNodes>\n          <leafValues>\n            -1.5212120115756989e-01 3.7137780338525772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7503 2.8643130790442228e-03</internalNodes>\n          <leafValues>\n            3.6075118929147720e-02 -1.4268599450588226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7504 -5.0454098731279373e-02</internalNodes>\n          <leafValues>\n            1.9622960686683655e-01 -2.8599070385098457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7505 -2.8714470099657774e-03</internalNodes>\n          <leafValues>\n            7.3919989168643951e-02 -8.6024001240730286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7506 4.9587138928472996e-03</internalNodes>\n          <leafValues>\n            9.4060972332954407e-03 -2.4880349636077881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7507 -7.8270390629768372e-02</internalNodes>\n          <leafValues>\n            4.3305158615112305e-01 -1.1123429983854294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7508 -6.4656808972358704e-02</internalNodes>\n          <leafValues>\n            -1.9539129734039307e-01 9.3969572335481644e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7509 -4.0213608741760254e-01</internalNodes>\n          <leafValues>\n            -9.3731278181076050e-01 4.8170168884098530e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7510 4.2917151004076004e-02</internalNodes>\n          <leafValues>\n            5.9442862402647734e-04 -7.9430317878723145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7511 2.1517940331250429e-03</internalNodes>\n          <leafValues>\n            -2.4127319455146790e-02 2.1096949279308319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7512 9.5514237880706787e-02</internalNodes>\n          <leafValues>\n            3.0073130037635565e-03 -3.0030760169029236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7513 3.5949420183897018e-02</internalNodes>\n          <leafValues>\n            9.1736158356070518e-03 -5.3301852941513062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7514 1.4061479270458221e-01</internalNodes>\n          <leafValues>\n            -1.9780038855969906e-03 5.8360362052917480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7515 -1.0000269860029221e-01</internalNodes>\n          <leafValues>\n            -4.6577060222625732e-01 1.0447300039231777e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7516 -1.6898410022258759e-01</internalNodes>\n          <leafValues>\n            4.7578391432762146e-01 -3.0947721097618341e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7517 2.6123190298676491e-02</internalNodes>\n          <leafValues>\n            -1.8673470243811607e-02 2.5583058595657349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7518 8.8816967036109418e-05</internalNodes>\n          <leafValues>\n            1.2931160628795624e-01 -2.2033900022506714e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7519 -2.5785199832171202e-03</internalNodes>\n          <leafValues>\n            7.7590242028236389e-02 -5.8669801801443100e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7520 -5.5829741060733795e-02</internalNodes>\n          <leafValues>\n            -5.6296068429946899e-01 8.2240002229809761e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7521 -3.5114258527755737e-02</internalNodes>\n          <leafValues>\n            -4.1525208950042725e-01 1.0237259790301323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7522 3.0091139487922192e-03</internalNodes>\n          <leafValues>\n            -3.2801661640405655e-02 1.1237899959087372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7523 -3.0068641062825918e-03</internalNodes>\n          <leafValues>\n            -1.5794169902801514e-01 3.0354220420122147e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7524 -2.0059049129486084e-03</internalNodes>\n          <leafValues>\n            1.1346399784088135e-01 -3.3372201025485992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7525 -1.3963360106572509e-03</internalNodes>\n          <leafValues>\n            1.4454230666160583e-01 -5.0115231424570084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7526 -5.4588310420513153e-02</internalNodes>\n          <leafValues>\n            -9.6552258729934692e-01 2.6290758978575468e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7527 -5.0577907823026180e-03</internalNodes>\n          <leafValues>\n            -2.1536730229854584e-01 2.7823869138956070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7528 -7.4430949985980988e-02</internalNodes>\n          <leafValues>\n            5.9244579076766968e-01 -3.5832428839057684e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7529 -6.9759570062160492e-02</internalNodes>\n          <leafValues>\n            6.5854609012603760e-01 -7.1275448426604271e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7530 3.4715738729573786e-04</internalNodes>\n          <leafValues>\n            4.3214511126279831e-02 -6.5209239721298218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7531 6.5575069747865200e-03</internalNodes>\n          <leafValues>\n            4.1032981127500534e-02 -1.2200939655303955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7532 9.2287212610244751e-02</internalNodes>\n          <leafValues>\n            -2.1933389827609062e-02 8.9953176677227020e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7533 5.2685599774122238e-02</internalNodes>\n          <leafValues>\n            1.6439350321888924e-02 -2.7847930788993835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7534 7.2394758462905884e-03</internalNodes>\n          <leafValues>\n            -3.3217910677194595e-02 9.7244061529636383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7535 -2.2218099329620600e-03</internalNodes>\n          <leafValues>\n            3.5860918462276459e-02 -1.3876199722290039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7536 -2.3309379816055298e-02</internalNodes>\n          <leafValues>\n            -2.7913948893547058e-01 1.6362229362130165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7537 1.4036920038051903e-04</internalNodes>\n          <leafValues>\n            -4.0096871554851532e-02 1.2379959970712662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7538 5.3702849894762039e-02</internalNodes>\n          <leafValues>\n            1.4607049524784088e-03 -8.6436408758163452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7539 4.1926259291358292e-04</internalNodes>\n          <leafValues>\n            -4.9342829734086990e-02 1.0289549827575684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7540 -1.6786300111562014e-03</internalNodes>\n          <leafValues>\n            -1.9065080583095551e-01 2.5145059451460838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7541 1.6603240743279457e-02</internalNodes>\n          <leafValues>\n            -1.8125709146261215e-02 2.6887449622154236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7542 -2.2621789947152138e-02</internalNodes>\n          <leafValues>\n            1.3145700097084045e-01 -2.5288559496402740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7543 4.4634779915213585e-03</internalNodes>\n          <leafValues>\n            5.6568209081888199e-02 -1.0306429862976074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7544 3.3281201031059027e-03</internalNodes>\n          <leafValues>\n            2.1517809480428696e-02 -1.4086639881134033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7545 -2.5311840698122978e-02</internalNodes>\n          <leafValues>\n            1.1237470060586929e-01 -4.1784498840570450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7546 -2.6119880378246307e-02</internalNodes>\n          <leafValues>\n            1.2703700363636017e-01 -2.3530310019850731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7547 -7.2608642280101776e-02</internalNodes>\n          <leafValues>\n            -3.3052888512611389e-01 2.1741159260272980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7548 5.8377808891236782e-03</internalNodes>\n          <leafValues>\n            -2.8170680627226830e-02 6.1300031840801239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7549 1.7830949509516358e-03</internalNodes>\n          <leafValues>\n            -7.6140716671943665e-02 8.4391303360462189e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7550 -1.4502589404582977e-01</internalNodes>\n          <leafValues>\n            -2.8886368870735168e-01 9.4371382147073746e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7551 -2.4291570298373699e-03</internalNodes>\n          <leafValues>\n            -6.3645169138908386e-02 9.0057007968425751e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7552 1.0977900028228760e-01</internalNodes>\n          <leafValues>\n            -1.4906959841027856e-03 8.9710217714309692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7553 -3.8412429857999086e-03</internalNodes>\n          <leafValues>\n            7.3980011045932770e-02 -6.9378383457660675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7554 3.9507250767201185e-04</internalNodes>\n          <leafValues>\n            -7.1166411042213440e-02 6.3150741159915924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7555 -6.6879019141197205e-03</internalNodes>\n          <leafValues>\n            -1.4211960136890411e-01 5.1007200032472610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7556 -2.1278159320354462e-01</internalNodes>\n          <leafValues>\n            1.7479549348354340e-01 -1.6866499558091164e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7557 4.3913610279560089e-02</internalNodes>\n          <leafValues>\n            -7.9228030517697334e-03 5.9994518756866455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7558 3.0486818868666887e-03</internalNodes>\n          <leafValues>\n            2.7880100533366203e-02 -1.4996689558029175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7559 1.7128599574789405e-03</internalNodes>\n          <leafValues>\n            -6.1575889587402344e-02 1.0793119668960571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7560 -1.3061589561402798e-02</internalNodes>\n          <leafValues>\n            -3.5864189267158508e-01 1.2332689948379993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7561 1.4779239427298307e-03</internalNodes>\n          <leafValues>\n            -5.5280618369579315e-02 7.6400339603424072e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7562 -7.4117183685302734e-02</internalNodes>\n          <leafValues>\n            3.3055660128593445e-01 -5.4406579583883286e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7563 4.1532788425683975e-02</internalNodes>\n          <leafValues>\n            1.2762749567627907e-02 -3.4091010689735413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7564 -1.6474310308694839e-02</internalNodes>\n          <leafValues>\n            -1.1935900151729584e-01 3.5997871309518814e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7565 -1.3384450227022171e-02</internalNodes>\n          <leafValues>\n            1.4927010238170624e-01 -3.7151250988245010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7566 -4.3293130584061146e-03</internalNodes>\n          <leafValues>\n            -1.5257209539413452e-01 2.0008029416203499e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7567 3.7254339549690485e-03</internalNodes>\n          <leafValues>\n            3.8249280303716660e-02 -1.3562840223312378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7568 -3.5788780078291893e-03</internalNodes>\n          <leafValues>\n            1.1951140314340591e-01 -5.1356971263885498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7569 9.0936541557312012e-02</internalNodes>\n          <leafValues>\n            -9.6294376999139786e-03 5.0582927465438843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7570 -3.1301870476454496e-03</internalNodes>\n          <leafValues>\n            2.4587530642747879e-02 -1.5752519667148590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7571 -3.0295769684016705e-03</internalNodes>\n          <leafValues>\n            -9.6669957041740417e-02 4.7402460128068924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7572 -3.1865050550550222e-03</internalNodes>\n          <leafValues>\n            3.5035319626331329e-02 -4.0841709822416306e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7573 4.4836260378360748e-02</internalNodes>\n          <leafValues>\n            -7.4580628424882889e-03 6.5190207958221436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7574 -6.4811948686838150e-03</internalNodes>\n          <leafValues>\n            1.3163930177688599e-01 -3.6060128360986710e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7575 -2.0486880093812943e-03</internalNodes>\n          <leafValues>\n            -1.1097510159015656e-01 5.1011908799409866e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7576 4.9175620079040527e-02</internalNodes>\n          <leafValues>\n            5.1457029767334461e-03 -8.9148598909378052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7577 8.4772880654782057e-04</internalNodes>\n          <leafValues>\n            -9.0741790831089020e-02 4.4853020459413528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7578 -1.6545709222555161e-02</internalNodes>\n          <leafValues>\n            2.5329568982124329e-01 -1.6997080296278000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7579 6.9274050183594227e-03</internalNodes>\n          <leafValues>\n            3.8941461592912674e-02 -1.3961300253868103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7580 -6.5109939314424992e-03</internalNodes>\n          <leafValues>\n            1.5610300004482269e-01 -2.4493880569934845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7581 -4.9708629958331585e-03</internalNodes>\n          <leafValues>\n            -9.8298586905002594e-02 5.7903841137886047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7582 1.3074609637260437e-01</internalNodes>\n          <leafValues>\n            -2.7071859221905470e-04 1.0000669956207275e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7583 -2.6705920696258545e-02</internalNodes>\n          <leafValues>\n            -4.2577031254768372e-01 1.0705970227718353e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7584 -1.0329060256481171e-01</internalNodes>\n          <leafValues>\n            2.5896188616752625e-01 -1.8414590507745743e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7585 -2.0166130736470222e-02</internalNodes>\n          <leafValues>\n            -1.1455850303173065e-01 4.0439568459987640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7586 -4.2215920984745026e-03</internalNodes>\n          <leafValues>\n            4.3039258569478989e-02 -4.8735860735177994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7587 -1.0038839653134346e-02</internalNodes>\n          <leafValues>\n            7.1608737111091614e-02 -6.6204607486724854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7588 1.5833059325814247e-02</internalNodes>\n          <leafValues>\n            -3.2066859304904938e-02 8.9950896799564362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7589 3.4065160434693098e-03</internalNodes>\n          <leafValues>\n            4.7216009348630905e-02 -1.0898789763450623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7590 -9.8251160234212875e-03</internalNodes>\n          <leafValues>\n            1.0213229805231094e-01 -5.2902109920978546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7591 1.6804629936814308e-02</internalNodes>\n          <leafValues>\n            -3.7189990282058716e-02 1.3787649571895599e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7592 8.5175316780805588e-03</internalNodes>\n          <leafValues>\n            2.7141440659761429e-02 -1.3569560647010803e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7593 -6.3797592883929610e-04</internalNodes>\n          <leafValues>\n            6.9217190146446228e-02 -9.0696737170219421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7594 -9.6052087610587478e-04</internalNodes>\n          <leafValues>\n            2.2472479939460754e-01 -2.4032639339566231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7595 7.2245922638103366e-04</internalNodes>\n          <leafValues>\n            -4.6731200069189072e-02 9.6905507147312164e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7596 1.0769399814307690e-03</internalNodes>\n          <leafValues>\n            3.8259491324424744e-02 -6.6674157977104187e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7597 4.1620191186666489e-02</internalNodes>\n          <leafValues>\n            9.3473913148045540e-03 -4.9046689271926880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7598 -8.1712089013308287e-04</internalNodes>\n          <leafValues>\n            5.2797440439462662e-02 -9.6458092331886292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7599 6.2240879051387310e-03</internalNodes>\n          <leafValues>\n            -3.5350788384675980e-02 1.6484160721302032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7600 2.0862540695816278e-03</internalNodes>\n          <leafValues>\n            3.3958710730075836e-02 -1.3114009797573090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7601 4.2804637923836708e-03</internalNodes>\n          <leafValues>\n            3.0104041099548340e-01 -1.6245450824499130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7602 -3.3040030393749475e-04</internalNodes>\n          <leafValues>\n            -1.1665459722280502e-01 3.8146208971738815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7603 2.8100309427827597e-03</internalNodes>\n          <leafValues>\n            4.1940510272979736e-02 -1.1180300265550613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7604 1.9832739606499672e-02</internalNodes>\n          <leafValues>\n            -1.1701569892466068e-02 2.0122130215167999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7605 7.0879682898521423e-02</internalNodes>\n          <leafValues>\n            -1.8197819590568542e-02 2.5429588556289673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7606 -8.3893969655036926e-02</internalNodes>\n          <leafValues>\n            -3.8719230890274048e-01 1.1727290228009224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7607 2.8477620333433151e-02</internalNodes>\n          <leafValues>\n            1.3701519928872585e-02 -3.2496619224548340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7608 1.2077310122549534e-02</internalNodes>\n          <leafValues>\n            -2.3975890129804611e-02 2.5232788920402527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7609 -7.5613409280776978e-02</internalNodes>\n          <leafValues>\n            -6.0866451263427734e-01 8.2847801968455315e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7610 -1.7563860863447189e-02</internalNodes>\n          <leafValues>\n            1.0811589658260345e-01 -2.8622759506106377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7611 1.1809109710156918e-02</internalNodes>\n          <leafValues>\n            3.4758269786834717e-02 -1.4444710314273834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7612 3.3459219336509705e-01</internalNodes>\n          <leafValues>\n            3.5104870330542326e-03 -9.1507577896118164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7613 9.8447836935520172e-02</internalNodes>\n          <leafValues>\n            -1.0290330275893211e-02 4.7943019866943359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7614 -4.0277838706970215e-02</internalNodes>\n          <leafValues>\n            -7.3793828487396240e-01 4.8832078464329243e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7615 4.6712718904018402e-03</internalNodes>\n          <leafValues>\n            2.5037309154868126e-02 -1.7003759741783142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7616 1.3958489894866943e-01</internalNodes>\n          <leafValues>\n            1.9962170626968145e-03 -7.1547168493270874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7617 6.9742716848850250e-02</internalNodes>\n          <leafValues>\n            -8.4846932440996170e-03 5.5378282070159912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7618 4.0283710695803165e-03</internalNodes>\n          <leafValues>\n            -1.6718029975891113e-02 2.3914240300655365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7619 1.0911709628999233e-02</internalNodes>\n          <leafValues>\n            1.5781659632921219e-02 -2.6813709735870361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7620 -6.7120362073183060e-03</internalNodes>\n          <leafValues>\n            1.1087659746408463e-01 -3.1365878880023956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7621 -1.3467820361256599e-02</internalNodes>\n          <leafValues>\n            -2.0741519331932068e-01 2.3459080606698990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7622 -2.1431609056890011e-03</internalNodes>\n          <leafValues>\n            7.8274592757225037e-02 -2.7959430590271950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7623 1.5163370408117771e-02</internalNodes>\n          <leafValues>\n            2.1727830171585083e-02 -1.8995440006256104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7624 -1.8551949411630630e-02</internalNodes>\n          <leafValues>\n            1.1164160072803497e-01 -3.0374029651284218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7625 -1.1083459854125977e-01</internalNodes>\n          <leafValues>\n            -5.6379908323287964e-01 7.6859779655933380e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7626 5.6210728362202644e-03</internalNodes>\n          <leafValues>\n            3.2930258661508560e-02 -1.0337010025978088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7627 3.0593289993703365e-03</internalNodes>\n          <leafValues>\n            -6.8871803581714630e-02 6.0389719903469086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7628 -6.9845258258283138e-04</internalNodes>\n          <leafValues>\n            3.8080908358097076e-02 -7.0112928748130798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7629 -1.3236569939181209e-03</internalNodes>\n          <leafValues>\n            7.5004093348979950e-02 -6.3950046896934509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7630 -1.6736539546400309e-03</internalNodes>\n          <leafValues>\n            -1.0580399632453918e-01 4.9476388841867447e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7631 7.0728380233049393e-03</internalNodes>\n          <leafValues>\n            -3.6582119762897491e-02 1.3126540184020996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7632 1.8164990469813347e-03</internalNodes>\n          <leafValues>\n            3.9953831583261490e-02 -5.1589578390121460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7633 4.1909920983016491e-03</internalNodes>\n          <leafValues>\n            4.8665199428796768e-02 -1.0598509758710861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7634 1.1940020322799683e-01</internalNodes>\n          <leafValues>\n            -6.7811049520969391e-03 7.4523490667343140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7635 -1.4965030131861567e-03</internalNodes>\n          <leafValues>\n            6.6805936396121979e-02 -6.7798472940921783e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7636 -1.1722999811172485e-01</internalNodes>\n          <leafValues>\n            -8.7860488891601562e-01 1.8648250261321664e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7637 3.2925528939813375e-03</internalNodes>\n          <leafValues>\n            3.5634901374578476e-02 -1.5030789375305176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7638 6.8493567407131195e-02</internalNodes>\n          <leafValues>\n            -9.8042488098144531e-03 3.0161941051483154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7639 2.1837449166923761e-03</internalNodes>\n          <leafValues>\n            -5.3420849144458771e-02 8.5626326501369476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7640 6.9181360304355621e-03</internalNodes>\n          <leafValues>\n            -4.3685518205165863e-02 1.2706759572029114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7641 -1.5878600534051657e-03</internalNodes>\n          <leafValues>\n            -1.2640440464019775e-01 3.9026089012622833e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7642 3.8289129734039307e-03</internalNodes>\n          <leafValues>\n            3.9025381207466125e-02 -7.9675689339637756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7643 1.2253260239958763e-02</internalNodes>\n          <leafValues>\n            -4.4809628278017044e-02 9.7772710025310516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7644 6.4031239598989487e-03</internalNodes>\n          <leafValues>\n            3.3579610288143158e-02 -1.3300299644470215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7645 7.0500532165169716e-03</internalNodes>\n          <leafValues>\n            -5.1121409982442856e-02 1.1772400140762329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7646 1.3216730207204819e-02</internalNodes>\n          <leafValues>\n            2.6454009115695953e-02 -1.3190220296382904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7647 6.7367991432547569e-03</internalNodes>\n          <leafValues>\n            -1.0153199546039104e-02 4.1570469737052917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7648 2.4951510131359100e-03</internalNodes>\n          <leafValues>\n            1.4631019905209541e-02 -1.6560359299182892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7649 3.8302998989820480e-02</internalNodes>\n          <leafValues>\n            7.2940620593726635e-03 -6.0744607448577881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7650 -1.6491059213876724e-02</internalNodes>\n          <leafValues>\n            1.6788350045681000e-01 -1.5062170103192329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7651 -2.7071639895439148e-02</internalNodes>\n          <leafValues>\n            -4.6381551027297974e-01 1.0335059836506844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7652 -5.8714959770441055e-02</internalNodes>\n          <leafValues>\n            1.4860999584197998e-01 -1.6663730144500732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7653 9.2380512505769730e-03</internalNodes>\n          <leafValues>\n            4.3830338865518570e-02 -1.0612689703702927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7654 3.0808299779891968e-03</internalNodes>\n          <leafValues>\n            -3.6781489849090576e-02 8.9559197425842285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7655 2.9910521116107702e-03</internalNodes>\n          <leafValues>\n            1.6019189730286598e-02 -2.9177838563919067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7656 4.4786609709262848e-02</internalNodes>\n          <leafValues>\n            -6.7814979702234268e-03 3.6695161461830139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7657 -2.9985690489411354e-03</internalNodes>\n          <leafValues>\n            -9.0316072106361389e-02 4.8048041760921478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7658 -8.9135952293872833e-03</internalNodes>\n          <leafValues>\n            1.6903600096702576e-01 -2.1880460903048515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7659 -3.9598200470209122e-02</internalNodes>\n          <leafValues>\n            -4.4884848594665527e-01 1.0027219541370869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7660 -3.7064809352159500e-02</internalNodes>\n          <leafValues>\n            -4.4183561205863953e-01 2.2891450207680464e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7661 -9.3376229051500559e-04</internalNodes>\n          <leafValues>\n            7.3633059859275818e-02 -5.8901689946651459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7662 8.0887757241725922e-02</internalNodes>\n          <leafValues>\n            -2.4963580071926117e-02 6.0303758829832077e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7663 -3.0697569251060486e-02</internalNodes>\n          <leafValues>\n            -1.7819009721279144e-01 2.6090290397405624e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7664 -1.8495260179042816e-01</internalNodes>\n          <leafValues>\n            3.4901228547096252e-01 -3.8219890557229519e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7665 1.1218319647014141e-02</internalNodes>\n          <leafValues>\n            -2.6781549677252769e-02 1.7431420087814331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7666 6.2761609442532063e-03</internalNodes>\n          <leafValues>\n            1.4532440342009068e-02 -1.1864569783210754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7667 -8.8509358465671539e-03</internalNodes>\n          <leafValues>\n            -1.0515689849853516e-01 5.7655680924654007e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7668 -3.8575798273086548e-02</internalNodes>\n          <leafValues>\n            1.5004560351371765e-01 -3.6080200225114822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7669 -5.2720211446285248e-02</internalNodes>\n          <leafValues>\n            -4.7556790709495544e-01 1.1126070283353329e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>392</maxWeakCount>\n      <stageThreshold>-1.1210759878158569e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 7670 -3.8506588898599148e-03</internalNodes>\n          <leafValues>\n            1.1209569871425629e-01 -2.7330291271209717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7671 -4.9427259713411331e-02</internalNodes>\n          <leafValues>\n            3.9270120859146118e-01 -3.9871849119663239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7672 1.3538210187107325e-03</internalNodes>\n          <leafValues>\n            -1.5965040028095245e-01 1.2521059811115265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7673 3.9328690618276596e-03</internalNodes>\n          <leafValues>\n            -3.4043839573860168e-01 4.7437489032745361e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7674 2.3011169396340847e-03</internalNodes>\n          <leafValues>\n            -2.0827749371528625e-01 7.4891701340675354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7675 5.9128052089363337e-04</internalNodes>\n          <leafValues>\n            -2.0842720568180084e-01 3.7798780947923660e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7676 1.7478190129622817e-03</internalNodes>\n          <leafValues>\n            -1.9635179638862610e-01 6.4582027494907379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7677 5.8316658250987530e-03</internalNodes>\n          <leafValues>\n            3.1582038849592209e-02 -1.9084580242633820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7678 1.2435190146788955e-03</internalNodes>\n          <leafValues>\n            -5.3213578462600708e-01 2.2162230685353279e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7679 1.6247769817709923e-03</internalNodes>\n          <leafValues>\n            -1.3276180624961853e-01 8.0135673284530640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7680 -2.2734089288860559e-03</internalNodes>\n          <leafValues>\n            -1.7344699800014496e-01 5.4782990366220474e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7681 5.7859059423208237e-02</internalNodes>\n          <leafValues>\n            -1.5829589683562517e-03 -6.6367942094802856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7682 5.7728560641407967e-03</internalNodes>\n          <leafValues>\n            3.9815168827772141e-02 -2.2919249534606934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7683 -4.4039610773324966e-02</internalNodes>\n          <leafValues>\n            2.1793280541896820e-01 -2.3534009233117104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7684 3.0226248782128096e-04</internalNodes>\n          <leafValues>\n            -8.9419580996036530e-02 1.1042869836091995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7685 -3.4470859915018082e-02</internalNodes>\n          <leafValues>\n            -3.6666679382324219e-01 2.7858279645442963e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7686 3.2460398972034454e-02</internalNodes>\n          <leafValues>\n            1.5733880922198296e-02 -4.9733749032020569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7687 9.9335552658885717e-04</internalNodes>\n          <leafValues>\n            -9.1800943017005920e-02 8.4003977477550507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7688 -2.3473830893635750e-02</internalNodes>\n          <leafValues>\n            -4.4375669956207275e-01 1.5148010104894638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7689 -2.9013049788773060e-03</internalNodes>\n          <leafValues>\n            5.4642349481582642e-02 -2.0156529545783997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7690 -6.5832951804623008e-04</internalNodes>\n          <leafValues>\n            -1.2285769730806351e-01 5.6707888841629028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7691 2.0407158881425858e-03</internalNodes>\n          <leafValues>\n            -1.0899069905281067e-01 5.9933699667453766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7692 -1.3161499984562397e-02</internalNodes>\n          <leafValues>\n            1.4091959595680237e-01 -4.7396201640367508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7693 -4.2273551225662231e-03</internalNodes>\n          <leafValues>\n            -1.2498269975185394e-01 5.1124658435583115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7694 7.6580629684031010e-03</internalNodes>\n          <leafValues>\n            3.8773480802774429e-02 -1.8095690011978149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7695 -5.1912548951804638e-03</internalNodes>\n          <leafValues>\n            1.2545259296894073e-01 -4.4012580066919327e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7696 1.1874590069055557e-01</internalNodes>\n          <leafValues>\n            -1.4801479876041412e-02 4.0071210265159607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7697 4.5105828903615475e-03</internalNodes>\n          <leafValues>\n            5.3336851298809052e-02 -1.5709049999713898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7698 4.5015379786491394e-02</internalNodes>\n          <leafValues>\n            -3.3278778195381165e-02 2.0535139739513397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7699 -2.0866969134658575e-03</internalNodes>\n          <leafValues>\n            4.2103528976440430e-02 -1.0361789911985397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7700 -1.3008449459448457e-03</internalNodes>\n          <leafValues>\n            6.4424470067024231e-02 -9.7897060215473175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7701 -1.3591230381280184e-03</internalNodes>\n          <leafValues>\n            7.2987347841262817e-02 -9.4451002776622772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7702 -7.4056759476661682e-03</internalNodes>\n          <leafValues>\n            -1.5320360660552979e-01 5.3242001682519913e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7703 2.0208859350532293e-03</internalNodes>\n          <leafValues>\n            -3.3245529979467392e-02 6.0319710522890091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7704 -1.0342149995267391e-02</internalNodes>\n          <leafValues>\n            8.5510559380054474e-02 -8.3920828998088837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7705 2.4865860119462013e-02</internalNodes>\n          <leafValues>\n            1.2639460153877735e-02 -3.4757199883460999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7706 9.9798657000064850e-02</internalNodes>\n          <leafValues>\n            -1.8823970109224319e-02 3.4465000033378601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7707 2.1201390773057938e-02</internalNodes>\n          <leafValues>\n            -1.0467799752950668e-01 3.1494509428739548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7708 -5.1909908652305603e-03</internalNodes>\n          <leafValues>\n            -1.5792340040206909e-01 5.0269961357116699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7709 6.6961228847503662e-02</internalNodes>\n          <leafValues>\n            3.2651789952069521e-03 -5.6049168109893799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7710 1.1809109710156918e-02</internalNodes>\n          <leafValues>\n            -2.8513789176940918e-02 2.1226319670677185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7711 -1.7645660787820816e-02</internalNodes>\n          <leafValues>\n            -4.4503360986709595e-01 5.0029670819640160e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7712 -6.8918941542506218e-03</internalNodes>\n          <leafValues>\n            -4.2199620604515076e-01 1.4813040383160114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7713 2.1675550378859043e-03</internalNodes>\n          <leafValues>\n            -1.3125190138816833e-01 6.7140422761440277e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7714 -3.3283489756286144e-03</internalNodes>\n          <leafValues>\n            -1.0765329748392105e-01 5.3610768169164658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7715 4.8869621008634567e-02</internalNodes>\n          <leafValues>\n            6.4427889883518219e-03 -6.4563280344009399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7716 7.2693959809839725e-03</internalNodes>\n          <leafValues>\n            -3.9603620767593384e-02 1.5369640290737152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7717 8.8849991559982300e-02</internalNodes>\n          <leafValues>\n            -1.3234400190412998e-02 2.8555288910865784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7718 1.5455950051546097e-02</internalNodes>\n          <leafValues>\n            3.9694100618362427e-02 -1.7206269502639771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7719 -1.3747200369834900e-02</internalNodes>\n          <leafValues>\n            1.0079269856214523e-01 -4.3812029063701630e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7720 -2.2805750370025635e-02</internalNodes>\n          <leafValues>\n            1.5014170110225677e-01 -4.3767798691987991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7721 2.3838039487600327e-02</internalNodes>\n          <leafValues>\n            5.3901281207799911e-02 -1.4610290527343750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7722 -1.0181629657745361e-01</internalNodes>\n          <leafValues>\n            3.1905040144920349e-01 -2.0011590793728828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7723 7.1074268780648708e-03</internalNodes>\n          <leafValues>\n            5.6244179606437683e-02 -1.2587560713291168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7724 7.6678092591464520e-04</internalNodes>\n          <leafValues>\n            -1.0704190284013748e-01 6.6436298191547394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7725 3.7424071342684329e-04</internalNodes>\n          <leafValues>\n            -3.7826299667358398e-02 4.7234989702701569e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7726 -2.0078169181942940e-03</internalNodes>\n          <leafValues>\n            -9.3316286802291870e-02 6.7641608417034149e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7727 3.3469051122665405e-02</internalNodes>\n          <leafValues>\n            -2.7926150709390640e-02 2.5293371081352234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7728 -1.5507030300796032e-02</internalNodes>\n          <leafValues>\n            -5.5145150423049927e-01 1.2821160256862640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7729 -1.9248709082603455e-02</internalNodes>\n          <leafValues>\n            5.2688628435134888e-02 -3.0364990234375000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7730 -1.7556030303239822e-02</internalNodes>\n          <leafValues>\n            -3.3247348666191101e-01 1.8780380487442017e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7731 1.9324380904436111e-02</internalNodes>\n          <leafValues>\n            -3.2458461821079254e-02 9.4986997544765472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7732 -2.0367160439491272e-02</internalNodes>\n          <leafValues>\n            1.1348400264978409e-01 -5.8434821665287018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7733 5.1770661957561970e-03</internalNodes>\n          <leafValues>\n            4.7030560672283173e-02 -8.4960326552391052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7734 1.9768481142818928e-03</internalNodes>\n          <leafValues>\n            -7.0794142782688141e-02 1.0375150293111801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7735 -7.0216279709711671e-04</internalNodes>\n          <leafValues>\n            3.0781729146838188e-02 -1.0170820355415344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7736 -2.4710369762033224e-03</internalNodes>\n          <leafValues>\n            5.1577620208263397e-02 -1.1920809745788574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7737 2.3278540000319481e-02</internalNodes>\n          <leafValues>\n            3.0191570520401001e-02 -9.3937888741493225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7738 1.3673819601535797e-02</internalNodes>\n          <leafValues>\n            -2.6758959516882896e-02 2.4014200270175934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7739 -8.3967903628945351e-03</internalNodes>\n          <leafValues>\n            -5.0403770059347153e-02 2.2368110716342926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7740 4.7878470271825790e-02</internalNodes>\n          <leafValues>\n            -2.3758050054311752e-02 2.6486390829086304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7741 -2.2483520209789276e-02</internalNodes>\n          <leafValues>\n            -2.3042780160903931e-01 1.2840679846704006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7742 -1.0883989743888378e-02</internalNodes>\n          <leafValues>\n            -1.8380180001258850e-01 3.2639708369970322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7743 -4.4901989400386810e-02</internalNodes>\n          <leafValues>\n            2.4195960164070129e-01 -2.6507280766963959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7744 -8.3042927086353302e-02</internalNodes>\n          <leafValues>\n            -8.0491328239440918e-01 7.5420029461383820e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7745 -3.7240530364215374e-03</internalNodes>\n          <leafValues>\n            -8.0228239297866821e-02 3.1584471464157104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7746 -7.3502189479768276e-03</internalNodes>\n          <leafValues>\n            6.8962231278419495e-02 -9.7391247749328613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7747 5.5313981138169765e-03</internalNodes>\n          <leafValues>\n            -3.0180720612406731e-02 6.0174800455570221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7748 1.7293080687522888e-02</internalNodes>\n          <leafValues>\n            4.0732100605964661e-02 -1.5600660443305969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7749 -3.3298740163445473e-03</internalNodes>\n          <leafValues>\n            4.1001088917255402e-02 -7.6909027993679047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7750 -4.9308240413665771e-03</internalNodes>\n          <leafValues>\n            1.7031539976596832e-01 -4.0582239627838135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7751 8.6011141538619995e-03</internalNodes>\n          <leafValues>\n            3.1656920909881592e-02 -1.4050039649009705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7752 1.3674340210855007e-02</internalNodes>\n          <leafValues>\n            -2.1845709532499313e-02 3.0128660798072815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7753 -1.1375419795513153e-02</internalNodes>\n          <leafValues>\n            -1.5687340497970581e-01 2.8256019577383995e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7754 -4.2750681750476360e-03</internalNodes>\n          <leafValues>\n            -1.2155970185995102e-01 5.0146799534559250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7755 1.6484759747982025e-02</internalNodes>\n          <leafValues>\n            -3.6557890474796295e-02 1.2583729624748230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7756 -3.9056900888681412e-02</internalNodes>\n          <leafValues>\n            2.4053129553794861e-01 -2.6983890682458878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7757 -5.7546719908714294e-03</internalNodes>\n          <leafValues>\n            -1.3337680697441101e-01 2.0266020670533180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7758 5.1583289168775082e-03</internalNodes>\n          <leafValues>\n            6.4666390419006348e-02 -1.1428499966859818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7759 -3.0463270377367735e-03</internalNodes>\n          <leafValues>\n            4.5018680393695831e-02 -8.1573590636253357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7760 7.4743861332535744e-03</internalNodes>\n          <leafValues>\n            3.1246710568666458e-02 -1.8929730355739594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7761 1.6480450285598636e-03</internalNodes>\n          <leafValues>\n            -2.5895040482282639e-02 1.8652880191802979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7762 4.5184311456978321e-03</internalNodes>\n          <leafValues>\n            5.4803468286991119e-02 -1.0444000363349915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7763 -3.3209871035069227e-03</internalNodes>\n          <leafValues>\n            4.3959401547908783e-02 -8.1240482628345490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7764 5.2665979601442814e-03</internalNodes>\n          <leafValues>\n            -4.4853471219539642e-02 1.1343909800052643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7765 -4.7867707908153534e-03</internalNodes>\n          <leafValues>\n            7.6319009065628052e-02 -2.8551170602440834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7766 -4.4710118323564529e-02</internalNodes>\n          <leafValues>\n            -3.4795719385147095e-01 1.4928230084478855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7767 4.3861730955541134e-03</internalNodes>\n          <leafValues>\n            7.4540950357913971e-02 -4.6298071742057800e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7768 9.2240851372480392e-03</internalNodes>\n          <leafValues>\n            -5.8626178652048111e-02 9.8693408071994781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7769 -1.1849260190501809e-03</internalNodes>\n          <leafValues>\n            1.0023140162229538e-01 -5.6729640811681747e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7770 -1.8546540290117264e-02</internalNodes>\n          <leafValues>\n            -3.8236171007156372e-01 1.5141529962420464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7771 3.4743950236588717e-03</internalNodes>\n          <leafValues>\n            2.6523910462856293e-02 -1.1289829760789871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7772 1.0274019837379456e-01</internalNodes>\n          <leafValues>\n            -6.6097700037062168e-03 7.7561777830123901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7773 2.0479390025138855e-01</internalNodes>\n          <leafValues>\n            6.9657550193369389e-03 -3.5988980531692505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7774 1.2094060331583023e-01</internalNodes>\n          <leafValues>\n            1.8174450844526291e-02 -3.3531171083450317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7775 1.2224229983985424e-02</internalNodes>\n          <leafValues>\n            -3.1454049050807953e-02 7.9004973173141479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7776 1.5176460146903992e-01</internalNodes>\n          <leafValues>\n            -1.0826669633388519e-02 4.5583090186119080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7777 -9.9692150950431824e-02</internalNodes>\n          <leafValues>\n            -3.5422179102897644e-01 3.1256359070539474e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7778 -6.3465638086199760e-03</internalNodes>\n          <leafValues>\n            -1.1098819971084595e-01 5.3735308349132538e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7779 -6.7007602192461491e-03</internalNodes>\n          <leafValues>\n            1.8910090625286102e-01 -3.0930159613490105e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7780 -1.0101199895143509e-01</internalNodes>\n          <leafValues>\n            2.3763500154018402e-01 -2.2213969379663467e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7781 4.6111021190881729e-02</internalNodes>\n          <leafValues>\n            -3.7543330341577530e-02 4.8733759671449661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7782 1.4146809279918671e-01</internalNodes>\n          <leafValues>\n            1.1148019693791866e-02 -5.1474362611770630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7783 -1.1394499801099300e-02</internalNodes>\n          <leafValues>\n            -7.0824302732944489e-02 3.1759370118379593e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7784 3.1667309813201427e-03</internalNodes>\n          <leafValues>\n            4.1177280247211456e-02 -1.4900580048561096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7785 8.9959725737571716e-03</internalNodes>\n          <leafValues>\n            -4.1186511516571045e-02 7.2816781699657440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7786 -6.1559271067380905e-02</internalNodes>\n          <leafValues>\n            -7.3937642574310303e-01 6.6859079524874687e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7787 -3.5607949830591679e-03</internalNodes>\n          <leafValues>\n            1.3260509818792343e-02 -6.1150819063186646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7788 -1.2476339936256409e-01</internalNodes>\n          <leafValues>\n            -7.8580498695373535e-01 6.2701301649212837e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7789 6.2739187479019165e-01</internalNodes>\n          <leafValues>\n            3.5465341061353683e-03 -7.3363810777664185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7790 3.4219160676002502e-02</internalNodes>\n          <leafValues>\n            8.2031572237610817e-03 -5.3330212831497192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7791 1.0574149928288534e-04</internalNodes>\n          <leafValues>\n            -5.0354700535535812e-02 4.7019489109516144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7792 -3.2112289220094681e-02</internalNodes>\n          <leafValues>\n            1.7085300385951996e-01 -3.4734141081571579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7793 -1.6140839084982872e-02</internalNodes>\n          <leafValues>\n            -6.4753092825412750e-02 5.6943111121654510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7794 1.9737280905246735e-02</internalNodes>\n          <leafValues>\n            -1.8065180629491806e-02 2.6183420419692993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7795 2.7895450592041016e-02</internalNodes>\n          <leafValues>\n            1.7641060054302216e-02 -3.0951151251792908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7796 3.5123159177601337e-03</internalNodes>\n          <leafValues>\n            -8.3447068929672241e-02 6.5015971660614014e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7797 -4.4775637798011303e-03</internalNodes>\n          <leafValues>\n            -1.2423449754714966e-01 4.7061119228601456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7798 -6.1348858289420605e-03</internalNodes>\n          <leafValues>\n            1.0248269885778427e-01 -5.9700958430767059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7799 1.4047959819436073e-02</internalNodes>\n          <leafValues>\n            1.4833379536867142e-02 -1.1229590326547623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7800 1.1907520238310099e-03</internalNodes>\n          <leafValues>\n            4.9986690282821655e-02 -1.1696290224790573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7801 1.7617389559745789e-02</internalNodes>\n          <leafValues>\n            -1.7687700688838959e-02 1.5416090190410614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7802 -4.9166870303452015e-03</internalNodes>\n          <leafValues>\n            -1.0227180272340775e-01 4.6994391828775406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7803 -3.9010820910334587e-03</internalNodes>\n          <leafValues>\n            1.4229449629783630e-01 -4.5312799513339996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7804 -1.7458139918744564e-03</internalNodes>\n          <leafValues>\n            -1.0853090137243271e-01 7.5689561665058136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7805 -1.2748650042340159e-03</internalNodes>\n          <leafValues>\n            2.2384520620107651e-02 -7.5150527060031891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7806 -7.9109556972980499e-02</internalNodes>\n          <leafValues>\n            4.8773929476737976e-01 -9.6941655501723289e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7807 -1.4103270135819912e-02</internalNodes>\n          <leafValues>\n            -2.3263689875602722e-01 1.5091559849679470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7808 -2.2076119203120470e-03</internalNodes>\n          <leafValues>\n            1.9268399477005005e-01 -2.5429060682654381e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7809 3.9626058191061020e-02</internalNodes>\n          <leafValues>\n            -1.5630759298801422e-02 1.2270029634237289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7810 -7.8973636846058071e-05</internalNodes>\n          <leafValues>\n            -7.3257647454738617e-02 6.5848693251609802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7811 5.1964947488158941e-04</internalNodes>\n          <leafValues>\n            -1.1366380006074905e-01 8.1133492290973663e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7812 -1.1722079943865538e-03</internalNodes>\n          <leafValues>\n            -9.7602643072605133e-02 5.9839569032192230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7813 3.9326730184257030e-03</internalNodes>\n          <leafValues>\n            -5.7026151567697525e-02 4.2226128280162811e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7814 -8.7386153638362885e-02</internalNodes>\n          <leafValues>\n            -3.7896049022674561e-01 1.2869279831647873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7815 -2.1324040368199348e-02</internalNodes>\n          <leafValues>\n            3.0886441469192505e-01 -1.7734240740537643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7816 -2.3385910317301750e-03</internalNodes>\n          <leafValues>\n            -1.1322320252656937e-01 4.3914940208196640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7817 1.5183660434558988e-03</internalNodes>\n          <leafValues>\n            -1.4337620139122009e-01 3.9441708475351334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7818 -1.1085519939661026e-01</internalNodes>\n          <leafValues>\n            7.4037587642669678e-01 -6.7982021719217300e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7819 -1.0009120218455791e-02</internalNodes>\n          <leafValues>\n            -3.9203230291604996e-02 3.1749211251735687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7820 -2.0916430279612541e-02</internalNodes>\n          <leafValues>\n            1.8927730619907379e-01 -3.0490230768918991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7821 7.4165337719023228e-03</internalNodes>\n          <leafValues>\n            4.6797450631856918e-02 -1.1113610118627548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7822 3.3599510788917542e-03</internalNodes>\n          <leafValues>\n            -4.5254990458488464e-02 1.1508409678936005e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7823 -5.7189498329535127e-04</internalNodes>\n          <leafValues>\n            -6.3472077250480652e-02 5.2049949765205383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7824 -6.8120293319225311e-02</internalNodes>\n          <leafValues>\n            5.0806027650833130e-01 -9.5091843977570534e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7825 2.5180799420922995e-03</internalNodes>\n          <leafValues>\n            5.5305320769548416e-02 -1.4402769505977631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7826 5.6055251508951187e-02</internalNodes>\n          <leafValues>\n            -2.3359170183539391e-02 2.1935400366783142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7827 -4.0386710315942764e-02</internalNodes>\n          <leafValues>\n            -1.9183440506458282e-01 7.8779058530926704e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7828 3.1857648864388466e-03</internalNodes>\n          <leafValues>\n            2.7605779469013214e-02 -2.0084309577941895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7829 2.5159550830721855e-02</internalNodes>\n          <leafValues>\n            1.1265699751675129e-02 -4.3628180027008057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7830 -2.7010419871658087e-03</internalNodes>\n          <leafValues>\n            1.1336500197649002e-01 -4.6904269605875015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7831 -3.0056890100240707e-02</internalNodes>\n          <leafValues>\n            -6.2368732690811157e-01 7.3214052245020866e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7832 -1.2088020145893097e-01</internalNodes>\n          <leafValues>\n            -8.6428368091583252e-01 4.3813590891659260e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7833 4.0104859508574009e-03</internalNodes>\n          <leafValues>\n            -5.3471650928258896e-02 7.1113802492618561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7834 -2.9688570648431778e-03</internalNodes>\n          <leafValues>\n            1.0076630115509033e-01 -4.9233928322792053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7835 -3.7600689101964235e-03</internalNodes>\n          <leafValues>\n            -2.0928700268268585e-01 2.6549680158495903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7836 -1.5982619952410460e-03</internalNodes>\n          <leafValues>\n            6.1070188879966736e-02 -7.9623572528362274e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7837 5.4285880178213120e-03</internalNodes>\n          <leafValues>\n            3.9766579866409302e-02 -1.1746849864721298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7838 1.0872900020331144e-03</internalNodes>\n          <leafValues>\n            -6.4596228301525116e-02 7.4964426457881927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7839 -2.8442030306905508e-03</internalNodes>\n          <leafValues>\n            1.1738350242376328e-01 -4.0159400552511215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7840 3.5546101629734039e-02</internalNodes>\n          <leafValues>\n            1.2194969691336155e-02 -4.2184820771217346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7841 -4.8542950302362442e-02</internalNodes>\n          <leafValues>\n            3.1292769312858582e-01 -1.2773830443620682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7842 -3.0732100829482079e-02</internalNodes>\n          <leafValues>\n            -5.0631237030029297e-01 1.0600729845464230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7843 1.3066929765045643e-02</internalNodes>\n          <leafValues>\n            -5.0003118813037872e-02 4.4005930423736572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7844 2.9200640320777893e-01</internalNodes>\n          <leafValues>\n            5.3693680092692375e-03 -8.9039158821105957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7845 -8.7579451501369476e-03</internalNodes>\n          <leafValues>\n            9.6666730940341949e-02 -3.1310658901929855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7846 -2.3599369451403618e-03</internalNodes>\n          <leafValues>\n            4.3046280741691589e-02 -1.0992430150508881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7847 6.9077489897608757e-03</internalNodes>\n          <leafValues>\n            -2.9174160212278366e-02 8.9174896478652954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7848 2.0849689841270447e-02</internalNodes>\n          <leafValues>\n            1.2614700198173523e-01 -4.4358100742101669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7849 -5.8846421539783478e-02</internalNodes>\n          <leafValues>\n            2.1661500632762909e-01 -8.7285088375210762e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7850 2.5576311163604259e-03</internalNodes>\n          <leafValues>\n            -1.1648210138082504e-01 5.4756019264459610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7851 3.8973900955170393e-03</internalNodes>\n          <leafValues>\n            3.5759489983320236e-02 -9.7868561744689941e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7852 -1.2494160328060389e-03</internalNodes>\n          <leafValues>\n            9.1347962617874146e-02 -5.7817179709672928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7853 3.4928850363940001e-03</internalNodes>\n          <leafValues>\n            2.0634220913052559e-02 -1.4494930207729340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7854 -1.1378509923815727e-02</internalNodes>\n          <leafValues>\n            2.1203260123729706e-01 -2.4150850251317024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7855 -4.4060450047254562e-02</internalNodes>\n          <leafValues>\n            4.2267361283302307e-01 -4.7765900380909443e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7856 -8.3084795624017715e-03</internalNodes>\n          <leafValues>\n            -8.4928646683692932e-02 6.0228090733289719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7857 -9.1945994645357132e-03</internalNodes>\n          <leafValues>\n            7.2318702936172485e-02 -2.0472260192036629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7858 6.5575107932090759e-02</internalNodes>\n          <leafValues>\n            5.0813751295208931e-03 -8.9693188667297363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7859 1.8510420620441437e-01</internalNodes>\n          <leafValues>\n            2.2485901135951281e-03 -7.5125169754028320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7860 -1.7608819901943207e-01</internalNodes>\n          <leafValues>\n            -7.8969222307205200e-01 5.2678477950394154e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7861 9.8349712789058685e-02</internalNodes>\n          <leafValues>\n            2.8081049676984549e-03 -2.5828519463539124e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7862 -1.8191979324910790e-04</internalNodes>\n          <leafValues>\n            -8.6206100881099701e-02 5.2294798195362091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7863 -5.2928649820387363e-03</internalNodes>\n          <leafValues>\n            -5.4600238800048828e-02 2.8304630890488625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7864 1.1537299724295735e-03</internalNodes>\n          <leafValues>\n            4.6684168279170990e-02 -1.1234779655933380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7865 -3.8274680264294147e-03</internalNodes>\n          <leafValues>\n            6.0145508497953415e-02 -8.2371100783348083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7866 -8.6957857012748718e-02</internalNodes>\n          <leafValues>\n            -4.8363038897514343e-01 9.2326821759343147e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7867 -2.4195960722863674e-03</internalNodes>\n          <leafValues>\n            -3.5221140831708908e-02 2.7081709355115891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7868 -4.7905668616294861e-03</internalNodes>\n          <leafValues>\n            5.8955200016498566e-02 -7.8748136758804321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7869 -4.0910490788519382e-03</internalNodes>\n          <leafValues>\n            -1.7550939321517944e-01 2.6454729959368706e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7870 2.5641750544309616e-03</internalNodes>\n          <leafValues>\n            -3.6814831197261810e-02 1.5140229463577271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7871 5.4726968519389629e-03</internalNodes>\n          <leafValues>\n            3.1243579462170601e-02 -9.7890958189964294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7872 -1.0310260113328695e-03</internalNodes>\n          <leafValues>\n            -1.2424050271511078e-01 4.0365029126405716e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7873 -1.3030169904232025e-01</internalNodes>\n          <leafValues>\n            1.7106169462203979e-01 -6.9856629706919193e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7874 3.5753389820456505e-03</internalNodes>\n          <leafValues>\n            -2.5437129661440849e-02 2.1967570483684540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7875 8.4238024428486824e-03</internalNodes>\n          <leafValues>\n            2.9582399874925613e-02 -1.7390090227127075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7876 4.1154649108648300e-02</internalNodes>\n          <leafValues>\n            -1.3265499845147133e-02 3.6282411217689514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7877 -1.8620759248733521e-02</internalNodes>\n          <leafValues>\n            -2.2806780040264130e-01 2.1502569317817688e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7878 2.3307619616389275e-02</internalNodes>\n          <leafValues>\n            -2.3047760128974915e-02 2.3208670318126678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7879 4.6518299728631973e-02</internalNodes>\n          <leafValues>\n            1.0585400275886059e-02 -4.6076700091362000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7880 -8.3499401807785034e-02</internalNodes>\n          <leafValues>\n            3.7845119833946228e-01 -1.4105740003287792e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7881 -9.6897013485431671e-02</internalNodes>\n          <leafValues>\n            -3.2995849847793579e-01 6.2883920036256313e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7882 6.9753699935972691e-03</internalNodes>\n          <leafValues>\n            2.4593630805611610e-02 -2.1003679931163788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7883 -3.3859949558973312e-02</internalNodes>\n          <leafValues>\n            1.8927900493144989e-01 -8.7296841666102409e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7884 1.0354740079492331e-03</internalNodes>\n          <leafValues>\n            -6.4493343234062195e-02 8.0192290246486664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7885 3.9950661361217499e-02</internalNodes>\n          <leafValues>\n            2.5073040276765823e-02 -1.1636939644813538e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7886 3.0460350681096315e-03</internalNodes>\n          <leafValues>\n            -3.3754941076040268e-02 1.3324250280857086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7887 -1.5341850230470300e-03</internalNodes>\n          <leafValues>\n            6.2442861497402191e-02 -5.6061070412397385e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7888 2.0531520713120699e-03</internalNodes>\n          <leafValues>\n            -8.4790043532848358e-02 5.3408049046993256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7889 2.1295580081641674e-03</internalNodes>\n          <leafValues>\n            4.0650319308042526e-02 -1.1124719679355621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7890 -1.5462029725313187e-02</internalNodes>\n          <leafValues>\n            1.3806979358196259e-01 -3.3944208174943924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7891 -2.7878239750862122e-02</internalNodes>\n          <leafValues>\n            -1.0025399923324585e-01 1.3444880023598671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7892 1.7255680635571480e-02</internalNodes>\n          <leafValues>\n            1.5361789613962173e-02 -3.6930799484252930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7893 -1.7870500683784485e-02</internalNodes>\n          <leafValues>\n            5.2870798856019974e-02 -2.5108009576797485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7894 -1.4443919993937016e-02</internalNodes>\n          <leafValues>\n            -2.2763819992542267e-01 2.0391609519720078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7895 -8.3497241139411926e-03</internalNodes>\n          <leafValues>\n            -8.7055817246437073e-02 3.2707940787076950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7896 2.7514319866895676e-02</internalNodes>\n          <leafValues>\n            -2.0628409460186958e-02 2.5977128744125366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7897 1.8610119819641113e-02</internalNodes>\n          <leafValues>\n            -8.0523788928985596e-03 1.6925090551376343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7898 -9.5786049962043762e-02</internalNodes>\n          <leafValues>\n            -5.0116628408432007e-01 8.7666641920804977e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7899 1.2036979943513870e-01</internalNodes>\n          <leafValues>\n            9.8632962908595800e-04 -1.0000280141830444e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7900 2.4782579392194748e-02</internalNodes>\n          <leafValues>\n            -1.2519709765911102e-02 3.5919609665870667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7901 -5.0353828817605972e-02</internalNodes>\n          <leafValues>\n            -3.3340519666671753e-01 6.9066900759935379e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7902 3.1298059970140457e-02</internalNodes>\n          <leafValues>\n            1.0963119566440582e-02 -4.0645220875740051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7903 7.4575231410562992e-03</internalNodes>\n          <leafValues>\n            -2.1207600831985474e-02 1.3167420029640198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7904 5.5791479535400867e-03</internalNodes>\n          <leafValues>\n            -3.4098070114850998e-02 1.2983830273151398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7905 5.9088319540023804e-03</internalNodes>\n          <leafValues>\n            -2.6940669864416122e-02 1.6839459538459778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7906 1.7543360590934753e-02</internalNodes>\n          <leafValues>\n            4.2376369237899780e-02 -1.2350399792194366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7907 -9.6103046089410782e-03</internalNodes>\n          <leafValues>\n            5.2223920822143555e-02 -2.5582559406757355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7908 2.0607879851013422e-03</internalNodes>\n          <leafValues>\n            4.0174130350351334e-02 -1.0548079758882523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7909 -5.3874161094427109e-03</internalNodes>\n          <leafValues>\n            -6.4995579421520233e-02 2.7807140722870827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7910 1.1102309823036194e-01</internalNodes>\n          <leafValues>\n            -4.9670711159706116e-03 8.1718921661376953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7911 -3.7374150007963181e-02</internalNodes>\n          <leafValues>\n            -6.2611418962478638e-01 3.0927599873393774e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7912 5.0286632031202316e-03</internalNodes>\n          <leafValues>\n            2.4978660047054291e-01 -1.8151100724935532e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7913 2.9225579928606749e-03</internalNodes>\n          <leafValues>\n            -6.0576818883419037e-02 2.6497339829802513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7914 -5.4296620190143585e-02</internalNodes>\n          <leafValues>\n            -5.7990437746047974e-01 6.5989522263407707e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7915 1.2996720150113106e-02</internalNodes>\n          <leafValues>\n            -2.6128260418772697e-02 9.7030609846115112e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7916 3.3001229166984558e-02</internalNodes>\n          <leafValues>\n            1.4960479922592640e-02 -3.2304659485816956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7917 -1.1660449951887131e-01</internalNodes>\n          <leafValues>\n            2.5725141167640686e-01 -1.2625830247998238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7918 7.0706337690353394e-02</internalNodes>\n          <leafValues>\n            7.0192231796681881e-03 -6.9260591268539429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7919 -4.4549949467182159e-02</internalNodes>\n          <leafValues>\n            -7.1134221553802490e-01 4.9668429419398308e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7920 4.2873818427324295e-02</internalNodes>\n          <leafValues>\n            6.7160711623728275e-03 -5.2660852670669556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7921 2.5025280192494392e-02</internalNodes>\n          <leafValues>\n            -1.8445409834384918e-02 7.8793220221996307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7922 2.1663550287485123e-03</internalNodes>\n          <leafValues>\n            3.2540310174226761e-02 -1.3115049898624420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7923 2.5540040805935860e-02</internalNodes>\n          <leafValues>\n            -3.4693568944931030e-02 4.1404798626899719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7924 -8.3627507090568542e-02</internalNodes>\n          <leafValues>\n            -5.2143442630767822e-01 7.7060810290277004e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7925 3.7637550849467516e-03</internalNodes>\n          <leafValues>\n            -2.9463630169630051e-02 7.4424192309379578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7926 3.7175719626247883e-03</internalNodes>\n          <leafValues>\n            -4.2123001068830490e-02 1.0287009924650192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7927 -5.2892807871103287e-03</internalNodes>\n          <leafValues>\n            -1.2348390370607376e-01 3.7152700126171112e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7928 -9.1878473758697510e-03</internalNodes>\n          <leafValues>\n            9.0256750583648682e-02 -5.2674051374197006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7929 -5.5448919534683228e-02</internalNodes>\n          <leafValues>\n            -5.3639650344848633e-01 2.6584670413285494e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7930 6.4754108898341656e-03</internalNodes>\n          <leafValues>\n            5.5367350578308105e-02 -9.2722631990909576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7931 -1.5773440245538950e-03</internalNodes>\n          <leafValues>\n            1.3578939437866211e-01 -4.0911730378866196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7932 -4.9912789836525917e-04</internalNodes>\n          <leafValues>\n            -1.4728380739688873e-01 5.3603630512952805e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7933 1.5690509974956512e-01</internalNodes>\n          <leafValues>\n            -7.8873159363865852e-03 3.7397789955139160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7934 3.6391850560903549e-02</internalNodes>\n          <leafValues>\n            4.9765990115702152e-03 -9.1157531738281250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7935 -9.5625342801213264e-03</internalNodes>\n          <leafValues>\n            1.2767709791660309e-01 -1.4394680038094521e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7936 2.4007901083678007e-03</internalNodes>\n          <leafValues>\n            -1.3107380270957947e-01 4.4731479138135910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7937 3.2929850276559591e-03</internalNodes>\n          <leafValues>\n            4.0428631007671356e-02 -5.3223561495542526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7938 -3.1314359512180090e-03</internalNodes>\n          <leafValues>\n            3.6826111376285553e-02 -1.2113159894943237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7939 5.2008330821990967e-02</internalNodes>\n          <leafValues>\n            5.9283021837472916e-03 -4.3858841061592102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7940 5.7681259931996465e-04</internalNodes>\n          <leafValues>\n            -6.9851770997047424e-02 6.4286291599273682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7941 6.1443001031875610e-03</internalNodes>\n          <leafValues>\n            3.0908059328794479e-02 -1.8229809403419495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7942 3.5959720611572266e-02</internalNodes>\n          <leafValues>\n            -4.1680991649627686e-02 1.4244790375232697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7943 -2.1290820091962814e-02</internalNodes>\n          <leafValues>\n            -9.6662320196628571e-02 5.5888749659061432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7944 -6.2724511371925473e-04</internalNodes>\n          <leafValues>\n            9.0150557458400726e-02 -6.9430753588676453e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7945 -2.5145700201392174e-03</internalNodes>\n          <leafValues>\n            -6.9526046514511108e-02 4.5552581548690796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7946 5.7874649763107300e-02</internalNodes>\n          <leafValues>\n            -2.5036580860614777e-02 2.0633180439472198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7947 1.5898469835519791e-02</internalNodes>\n          <leafValues>\n            -1.7133399844169617e-02 1.1004959791898727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7948 2.7882799506187439e-02</internalNodes>\n          <leafValues>\n            2.7713179588317871e-02 -1.6536410152912140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7949 8.8283112272620201e-03</internalNodes>\n          <leafValues>\n            -2.7497250586748123e-02 5.9822890907526016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7950 -1.5679910778999329e-02</internalNodes>\n          <leafValues>\n            -2.6984989643096924e-01 1.6398239880800247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7951 4.1906189173460007e-02</internalNodes>\n          <leafValues>\n            -8.0525986850261688e-03 3.1556311249732971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7952 -4.1068609803915024e-02</internalNodes>\n          <leafValues>\n            2.5637561082839966e-01 -1.8357910215854645e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7953 3.5570110194385052e-03</internalNodes>\n          <leafValues>\n            2.9343830421566963e-02 -1.2668469548225403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7954 -2.1371750626713037e-03</internalNodes>\n          <leafValues>\n            1.2923260033130646e-01 -4.0102209895849228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7955 3.3638089895248413e-02</internalNodes>\n          <leafValues>\n            8.1196166574954987e-03 -4.0394780039787292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7956 1.0182919912040234e-02</internalNodes>\n          <leafValues>\n            -4.2566180229187012e-02 1.1843100190162659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7957 -7.0302112726494670e-04</internalNodes>\n          <leafValues>\n            3.8721978664398193e-02 -7.9703420400619507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7958 -2.8552680741995573e-03</internalNodes>\n          <leafValues>\n            9.1274276375770569e-02 -6.1691451817750931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7959 -2.9935541097074747e-03</internalNodes>\n          <leafValues>\n            -1.0913450270891190e-01 3.8736950606107712e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7960 -5.3608341841027141e-04</internalNodes>\n          <leafValues>\n            -4.3252488970756531e-01 1.0958270169794559e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7961 5.1431890577077866e-02</internalNodes>\n          <leafValues>\n            4.7060111537575722e-03 -2.6765900850296021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7962 -4.8872891813516617e-02</internalNodes>\n          <leafValues>\n            2.0144729316234589e-01 -2.2844519466161728e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7963 -1.6080449521541595e-01</internalNodes>\n          <leafValues>\n            -1. 1.9577229395508766e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7964 1.8509939312934875e-02</internalNodes>\n          <leafValues>\n            1.7808660864830017e-02 -2.7871158719062805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7965 -4.2106948792934418e-02</internalNodes>\n          <leafValues>\n            -6.2493157386779785e-01 7.0520970039069653e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7966 -9.7096778452396393e-02</internalNodes>\n          <leafValues>\n            -8.4505838155746460e-01 4.4749649241566658e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7967 -9.4244757201522589e-04</internalNodes>\n          <leafValues>\n            1.9796760380268097e-01 -2.2733120247721672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7968 -1.8040809780359268e-02</internalNodes>\n          <leafValues>\n            -3.3424109220504761e-01 1.3358039781451225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7969 6.3626631163060665e-04</internalNodes>\n          <leafValues>\n            -1.0530749708414078e-01 4.4016160070896149e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7970 -3.4530549310147762e-03</internalNodes>\n          <leafValues>\n            -1.3687069714069366e-01 3.0288280919194221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7971 1.7589809373021126e-02</internalNodes>\n          <leafValues>\n            -2.8031280264258385e-02 1.8331700563430786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7972 -1.4289390528574586e-03</internalNodes>\n          <leafValues>\n            6.7616157233715057e-02 -6.4400359988212585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7973 1.4584570191800594e-02</internalNodes>\n          <leafValues>\n            -3.2548811286687851e-02 7.7070221304893494e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7974 7.4579578638076782e-01</internalNodes>\n          <leafValues>\n            9.1963959857821465e-03 -4.5680120587348938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7975 -1.2285649776458740e-01</internalNodes>\n          <leafValues>\n            -6.4423608779907227e-01 2.0847769919782877e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7976 -1.1613000184297562e-01</internalNodes>\n          <leafValues>\n            -7.9274278879165649e-01 4.9578230828046799e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7977 5.5644840002059937e-02</internalNodes>\n          <leafValues>\n            -5.7718120515346527e-03 3.0834281444549561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7978 2.0566429942846298e-02</internalNodes>\n          <leafValues>\n            -1.5474709682166576e-02 2.8002938628196716e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7979 3.8393519935198128e-04</internalNodes>\n          <leafValues>\n            3.4390248358249664e-02 -1.0244189947843552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7980 4.0198508650064468e-03</internalNodes>\n          <leafValues>\n            5.2533138543367386e-02 -1.1492720246315002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7981 -7.4124410748481750e-02</internalNodes>\n          <leafValues>\n            -3.0216461420059204e-01 4.2779031209647655e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7982 -3.4346429165452719e-03</internalNodes>\n          <leafValues>\n            6.5627492964267731e-02 -6.9991588592529297e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7983 -4.3740049004554749e-03</internalNodes>\n          <leafValues>\n            -1.2934839725494385e-01 5.1233518868684769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7984 6.9464151747524738e-03</internalNodes>\n          <leafValues>\n            -3.2591849565505981e-02 1.5098060667514801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7985 -1.8434170633554459e-02</internalNodes>\n          <leafValues>\n            -3.1364220380783081e-01 9.5867328345775604e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7986 -3.2201830763369799e-03</internalNodes>\n          <leafValues>\n            -1.7494319379329681e-01 3.3579058945178986e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7987 -3.2273299992084503e-02</internalNodes>\n          <leafValues>\n            2.4136200547218323e-01 -2.4392010644078255e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7988 -4.8193791881203651e-03</internalNodes>\n          <leafValues>\n            -1.3610219955444336e-01 4.1156660765409470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7989 -9.8347626626491547e-02</internalNodes>\n          <leafValues>\n            -5.3324717283248901e-01 8.8729923591017723e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7990 1.9054619595408440e-02</internalNodes>\n          <leafValues>\n            -3.2564271241426468e-02 1.6729709506034851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7991 -8.1796169281005859e-02</internalNodes>\n          <leafValues>\n            -6.4131242036819458e-01 8.7052602320909500e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7992 3.2996949739754200e-03</internalNodes>\n          <leafValues>\n            -5.9765439480543137e-02 7.1879856288433075e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7993 -7.5977660715579987e-02</internalNodes>\n          <leafValues>\n            -5.0415420532226562e-01 5.6795510463416576e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7994 3.0508760362863541e-02</internalNodes>\n          <leafValues>\n            1.0317360050976276e-02 -4.3552881479263306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7995 -3.7642959505319595e-02</internalNodes>\n          <leafValues>\n            3.7324428558349609e-01 -1.7276229336857796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7996 -9.9801109172403812e-04</internalNodes>\n          <leafValues>\n            -1.4508770406246185e-01 3.0973700806498528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7997 -2.0703389309346676e-03</internalNodes>\n          <leafValues>\n            1.2285920232534409e-01 -2.5285899639129639e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7998 7.1816377341747284e-02</internalNodes>\n          <leafValues>\n            7.2997398674488068e-03 -6.2621092796325684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7999 1.6781920194625854e-01</internalNodes>\n          <leafValues>\n            -1.0094069875776768e-02 2.2531180083751678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8000 1.5028619964141399e-04</internalNodes>\n          <leafValues>\n            -4.9013838171958923e-02 9.5635637640953064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8001 9.5139637589454651e-02</internalNodes>\n          <leafValues>\n            -2.3964960128068924e-03 7.8972822427749634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8002 3.8569360040128231e-03</internalNodes>\n          <leafValues>\n            4.0852431207895279e-02 -1.1976979672908783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8003 2.3172760382294655e-02</internalNodes>\n          <leafValues>\n            -8.1755416467785835e-03 3.4895899891853333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8004 1.3417989946901798e-02</internalNodes>\n          <leafValues>\n            2.9357729479670525e-02 -1.4476950466632843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8005 -1.4165779948234558e-01</internalNodes>\n          <leafValues>\n            3.4960448741912842e-01 -3.9633908309042454e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8006 5.5483141914010048e-03</internalNodes>\n          <leafValues>\n            -4.6736769378185272e-02 8.7630823254585266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8007 -4.7431029379367828e-03</internalNodes>\n          <leafValues>\n            6.2899678945541382e-02 -2.6983590796589851e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8008 -6.6862776875495911e-02</internalNodes>\n          <leafValues>\n            -9.5272868871688843e-01 3.9776111952960491e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8009 2.2987840697169304e-02</internalNodes>\n          <leafValues>\n            -1.7802899703383446e-02 1.4564949274063110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8010 -2.2234279662370682e-02</internalNodes>\n          <leafValues>\n            -9.3360446393489838e-02 5.1537070423364639e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8011 1.5045719919726253e-05</internalNodes>\n          <leafValues>\n            -3.0237749218940735e-02 2.6654670014977455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8012 -4.7994707711040974e-03</internalNodes>\n          <leafValues>\n            1.0105530172586441e-01 -5.0083991140127182e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8013 -2.4227909743785858e-01</internalNodes>\n          <leafValues>\n            -6.8399482965469360e-01 2.1470880601555109e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8014 4.6939790248870850e-02</internalNodes>\n          <leafValues>\n            8.1193735823035240e-03 -4.7671818733215332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8015 -6.0940280556678772e-02</internalNodes>\n          <leafValues>\n            2.3827329277992249e-01 -9.5430584624409676e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8016 2.4104740470647812e-02</internalNodes>\n          <leafValues>\n            -1.5799079090356827e-02 2.6727899909019470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8017 -4.6567570418119431e-02</internalNodes>\n          <leafValues>\n            -3.1017771363258362e-01 8.3353007212281227e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8018 1.8709240248426795e-03</internalNodes>\n          <leafValues>\n            -7.2588071227073669e-02 6.5608270466327667e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8019 -5.9872400015592575e-03</internalNodes>\n          <leafValues>\n            -1.8159690499305725e-01 1.4030029997229576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8020 -7.3103660724882502e-06</internalNodes>\n          <leafValues>\n            4.0913790464401245e-02 -1.0656440258026123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8021 -2.3244550451636314e-02</internalNodes>\n          <leafValues>\n            -1.9035540521144867e-01 1.5966059640049934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8022 -1.1853489559143782e-03</internalNodes>\n          <leafValues>\n            5.9956710785627365e-02 -7.6678447425365448e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8023 -1.2981820106506348e-01</internalNodes>\n          <leafValues>\n            4.0999498963356018e-01 -5.0850748084485531e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8024 -5.1512669771909714e-02</internalNodes>\n          <leafValues>\n            -3.0527231097221375e-01 1.4186340384185314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8025 -3.9303461089730263e-03</internalNodes>\n          <leafValues>\n            -7.9763479530811310e-02 2.6248890906572342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8026 1.5822829678654671e-02</internalNodes>\n          <leafValues>\n            -1.6849309206008911e-02 2.7549791336059570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8027 1.1561570316553116e-01</internalNodes>\n          <leafValues>\n            6.7870649509131908e-03 -1.2709319591522217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8028 1.1260829633101821e-03</internalNodes>\n          <leafValues>\n            8.1908516585826874e-02 -5.8194048702716827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8029 1.5513430349528790e-02</internalNodes>\n          <leafValues>\n            -4.2989719659090042e-02 7.8364297747612000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8030 4.6268731355667114e-02</internalNodes>\n          <leafValues>\n            1.1759550310671329e-02 -3.9947330951690674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8031 7.9535972326993942e-03</internalNodes>\n          <leafValues>\n            1.6848539933562279e-02 -8.8599078357219696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8032 -1.8991220742464066e-02</internalNodes>\n          <leafValues>\n            2.4813260138034821e-01 -1.7320850864052773e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8033 3.7058200687170029e-03</internalNodes>\n          <leafValues>\n            -2.1747030317783356e-02 5.8276090770959854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8034 2.5829279329627752e-03</internalNodes>\n          <leafValues>\n            5.0559278577566147e-02 -9.3193918466567993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8035 -3.1010560691356659e-02</internalNodes>\n          <leafValues>\n            2.2110439836978912e-01 -1.4786499552428722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8036 2.5402549654245377e-03</internalNodes>\n          <leafValues>\n            -8.6743600666522980e-02 5.7932410389184952e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8037 -8.9100487530231476e-03</internalNodes>\n          <leafValues>\n            5.3846079856157303e-02 -4.5931909233331680e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8038 4.0557151660323143e-03</internalNodes>\n          <leafValues>\n            5.9298399835824966e-02 -8.3007253706455231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8039 6.1204940080642700e-02</internalNodes>\n          <leafValues>\n            9.2248879373073578e-03 -2.1082369983196259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8040 7.7630057930946350e-03</internalNodes>\n          <leafValues>\n            -7.5927056372165680e-02 5.7865709066390991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8041 1.5921150147914886e-01</internalNodes>\n          <leafValues>\n            8.3040859317407012e-04 -1.0000480413436890e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8042 3.9196189492940903e-02</internalNodes>\n          <leafValues>\n            7.1930838748812675e-03 -6.0338622331619263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8043 1.0220289975404739e-01</internalNodes>\n          <leafValues>\n            -3.6227719392627478e-03 5.4500752687454224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8044 -1.5064980089664459e-01</internalNodes>\n          <leafValues>\n            -7.0450758934020996e-01 6.6995541565120220e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8045 1.3819299638271332e-01</internalNodes>\n          <leafValues>\n            -1.1153860017657280e-02 1.7932909727096558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8046 -3.8313010009005666e-04</internalNodes>\n          <leafValues>\n            -7.2442352771759033e-02 5.7925980538129807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8047 -2.7796919457614422e-03</internalNodes>\n          <leafValues>\n            -8.6280398070812225e-02 4.1014600545167923e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8048 3.9365138858556747e-02</internalNodes>\n          <leafValues>\n            -4.6629320830106735e-02 8.8124006986618042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8049 -6.1933819204568863e-02</internalNodes>\n          <leafValues>\n            7.0118552446365356e-01 -2.5661089457571507e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8050 -5.9742941521108150e-03</internalNodes>\n          <leafValues>\n            -1.6519010066986084e-01 3.7947021424770355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8051 7.5101079419255257e-03</internalNodes>\n          <leafValues>\n            5.4191488772630692e-02 -7.9166658222675323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8052 -9.7005672752857208e-02</internalNodes>\n          <leafValues>\n            -8.8104772567749023e-01 4.8486101441085339e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8053 -6.7751510068774223e-03</internalNodes>\n          <leafValues>\n            9.1601163148880005e-02 -4.8942770808935165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8054 -9.2599419876933098e-03</internalNodes>\n          <leafValues>\n            -1.3298119604587555e-01 4.1785500943660736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8055 1.5215040184557438e-03</internalNodes>\n          <leafValues>\n            5.2633590996265411e-02 -6.0624439269304276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8056 5.4703168570995331e-03</internalNodes>\n          <leafValues>\n            -4.7825179994106293e-02 1.1194570362567902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8057 2.5002110749483109e-02</internalNodes>\n          <leafValues>\n            -2.0354969426989555e-02 1.0175590217113495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8058 3.2576780766248703e-02</internalNodes>\n          <leafValues>\n            2.5629660114645958e-02 -1.9484190642833710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8059 -7.7732130885124207e-03</internalNodes>\n          <leafValues>\n            1.2477400153875351e-01 -3.4667998552322388e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8060 1.7777189612388611e-02</internalNodes>\n          <leafValues>\n            3.3261820673942566e-02 -1.4155229926109314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8061 1.0459429584443569e-02</internalNodes>\n          <leafValues>\n            -4.4039878994226456e-02 6.1871558427810669e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>406</maxWeakCount>\n      <stageThreshold>-1.1700680255889893e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 8062 1.8751189112663269e-02</internalNodes>\n          <leafValues>\n            -1.7775079607963562e-01 1.7157439887523651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8063 -2.1875950042158365e-03</internalNodes>\n          <leafValues>\n            7.5339153409004211e-02 -2.5842121243476868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8064 -1.1698690056800842e-01</internalNodes>\n          <leafValues>\n            4.2645370960235596e-01 -3.7121698260307312e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8065 3.8377330638468266e-03</internalNodes>\n          <leafValues>\n            3.5092439502477646e-02 -1.5757289528846741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8066 -1.2941210297867656e-03</internalNodes>\n          <leafValues>\n            -2.0068730413913727e-01 5.5704809725284576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8067 4.3927300721406937e-03</internalNodes>\n          <leafValues>\n            5.7497099041938782e-02 -1.9302740693092346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8068 -1.5021540457382798e-03</internalNodes>\n          <leafValues>\n            7.2378978133201599e-02 -1.4534910023212433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8069 1.2381949927657843e-03</internalNodes>\n          <leafValues>\n            -9.0413779020309448e-02 8.2838788628578186e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8070 3.0004729051142931e-03</internalNodes>\n          <leafValues>\n            6.0199409723281860e-02 -1.5556170046329498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8071 4.5666601508855820e-03</internalNodes>\n          <leafValues>\n            -7.6936639845371246e-02 1.3762770593166351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8072 9.9231943022459745e-04</internalNodes>\n          <leafValues>\n            4.7918211668729782e-02 -2.0472359657287598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8073 -3.8909649010747671e-03</internalNodes>\n          <leafValues>\n            -2.1067039668560028e-01 5.9297189116477966e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8074 2.4324860423803329e-03</internalNodes>\n          <leafValues>\n            -7.3611870408058167e-02 1.4165569841861725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8075 -3.3090400975197554e-03</internalNodes>\n          <leafValues>\n            -1.6489060223102570e-01 4.3310891836881638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8076 5.9596560895442963e-03</internalNodes>\n          <leafValues>\n            -2.1388399600982666e-01 4.3472908437252045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8077 9.7754271700978279e-03</internalNodes>\n          <leafValues>\n            2.7664290741086006e-02 -1.9119890034198761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8078 -3.8124300539493561e-02</internalNodes>\n          <leafValues>\n            3.1658840179443359e-01 -2.9972679913043976e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8079 1.4401610242202878e-03</internalNodes>\n          <leafValues>\n            -1.6602130234241486e-01 6.1300911009311676e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8080 7.5199408456683159e-04</internalNodes>\n          <leafValues>\n            -1.3568510115146637e-01 5.7345770299434662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8081 2.4780649691820145e-03</internalNodes>\n          <leafValues>\n            -7.7258758246898651e-02 5.3781200200319290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8082 9.2068109661340714e-03</internalNodes>\n          <leafValues>\n            7.4349351227283478e-02 -1.3886499404907227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8083 1.7634540796279907e-02</internalNodes>\n          <leafValues>\n            -2.6817159727215767e-02 3.4912449121475220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8084 1.0517879854887724e-03</internalNodes>\n          <leafValues>\n            8.3444483578205109e-02 -8.3271436393260956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8085 -7.2119189426302910e-03</internalNodes>\n          <leafValues>\n            1.4149050414562225e-01 -3.0853189527988434e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8086 8.1929508596658707e-03</internalNodes>\n          <leafValues>\n            6.4249828457832336e-02 -1.4224460721015930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8087 -5.7932751951739192e-04</internalNodes>\n          <leafValues>\n            -6.1768930405378342e-02 3.4835230559110641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8088 4.5172017998993397e-03</internalNodes>\n          <leafValues>\n            -7.3925666511058807e-02 9.5347866415977478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8089 2.2280250489711761e-01</internalNodes>\n          <leafValues>\n            2.8079450130462646e-02 -2.6174598932266235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8090 -8.1560667604207993e-04</internalNodes>\n          <leafValues>\n            -1.1128710210323334e-01 6.1751261353492737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8091 1.9009260460734367e-02</internalNodes>\n          <leafValues>\n            -3.5914849489927292e-02 9.5332697033882141e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8092 -1.1708099627867341e-03</internalNodes>\n          <leafValues>\n            -1.7809429764747620e-01 3.8471758365631104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8093 -2.7492839843034744e-02</internalNodes>\n          <leafValues>\n            1.5674190223217010e-01 -3.6307450383901596e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8094 -5.4139150306582451e-03</internalNodes>\n          <leafValues>\n            -1.6014580428600311e-01 4.5228298753499985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8095 1.1325670406222343e-02</internalNodes>\n          <leafValues>\n            -5.2679128944873810e-02 1.2411580234766006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8096 -1.3919079303741455e-01</internalNodes>\n          <leafValues>\n            -2.8573009371757507e-01 2.5642180815339088e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8097 -7.6183810830116272e-02</internalNodes>\n          <leafValues>\n            2.0390880107879639e-01 -1.2701939791440964e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8098 1.3947900151833892e-03</internalNodes>\n          <leafValues>\n            -1.1320529878139496e-01 5.7419300079345703e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8099 4.6532237902283669e-03</internalNodes>\n          <leafValues>\n            5.7795990258455276e-02 -1.0997010022401810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8100 4.5034389942884445e-02</internalNodes>\n          <leafValues>\n            -2.8761979192495346e-02 2.2605720162391663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8101 1.6864009201526642e-02</internalNodes>\n          <leafValues>\n            3.6318089812994003e-02 -2.0162770152091980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8102 1.9251279532909393e-01</internalNodes>\n          <leafValues>\n            -1.3869989663362503e-02 5.4226338863372803e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8103 -1.6758369747549295e-03</internalNodes>\n          <leafValues>\n            -1.1462789773941040e-01 4.9984849989414215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8104 -4.5270361006259918e-03</internalNodes>\n          <leafValues>\n            1.1731909960508347e-01 -6.1384700238704681e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8105 5.4975082166492939e-03</internalNodes>\n          <leafValues>\n            3.2194830477237701e-02 -1.5348540246486664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8106 3.5562040284276009e-03</internalNodes>\n          <leafValues>\n            -6.3937939703464508e-02 1.0787469893693924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8107 2.1489830687642097e-03</internalNodes>\n          <leafValues>\n            -5.0976738333702087e-02 2.9315000399947166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8108 -1.0464210063219070e-02</internalNodes>\n          <leafValues>\n            1.9548749923706055e-01 -3.2784409821033478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8109 -2.9779719188809395e-02</internalNodes>\n          <leafValues>\n            -3.9286538958549500e-01 1.2266620062291622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8110 9.6993939951062202e-04</internalNodes>\n          <leafValues>\n            -1.0772799700498581e-01 6.1684250831604004e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8111 -4.0499098598957062e-02</internalNodes>\n          <leafValues>\n            -3.6696648597717285e-01 1.1805539950728416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8112 -2.3762779310345650e-03</internalNodes>\n          <leafValues>\n            -1.3933740556240082e-01 5.0010170787572861e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8113 -5.1528858020901680e-03</internalNodes>\n          <leafValues>\n            9.7424000501632690e-02 -2.3820690810680389e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8114 -2.8726980090141296e-02</internalNodes>\n          <leafValues>\n            2.1031719446182251e-01 -3.6088269203901291e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8115 1.4215350151062012e-02</internalNodes>\n          <leafValues>\n            3.4664131700992584e-02 -1.5814340114593506e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8116 2.0164670422673225e-03</internalNodes>\n          <leafValues>\n            5.0487071275711060e-02 -1.2704199552536011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8117 4.1724709444679320e-04</internalNodes>\n          <leafValues>\n            -5.6635189801454544e-02 1.0789140313863754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8118 7.3380130343139172e-03</internalNodes>\n          <leafValues>\n            5.0891719758510590e-02 -1.2210439890623093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8119 -7.5930766761302948e-02</internalNodes>\n          <leafValues>\n            2.2627210617065430e-01 -6.6569480113685131e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8120 -4.2873369529843330e-03</internalNodes>\n          <leafValues>\n            7.2104290127754211e-02 -8.0106139183044434e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8121 -2.4101670831441879e-02</internalNodes>\n          <leafValues>\n            9.1355301439762115e-02 -3.4591969102621078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8122 1.9936550408601761e-02</internalNodes>\n          <leafValues>\n            -3.7764240056276321e-02 1.8896919488906860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8123 5.6939899921417236e-01</internalNodes>\n          <leafValues>\n            3.1492649577558041e-03 -5.9846472740173340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8124 1.0352060198783875e-01</internalNodes>\n          <leafValues>\n            2.3323200643062592e-02 -3.2129231095314026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8125 5.9556990861892700e-02</internalNodes>\n          <leafValues>\n            4.2170342057943344e-03 -3.3442139625549316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8126 -5.0575539469718933e-02</internalNodes>\n          <leafValues>\n            -8.4793227910995483e-01 6.6583030857145786e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8127 -5.5158971808850765e-03</internalNodes>\n          <leafValues>\n            -7.0507496595382690e-02 2.1716769784688950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8128 2.9419310390949249e-02</internalNodes>\n          <leafValues>\n            -3.6319408565759659e-02 1.7510940134525299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8129 1.0972440242767334e-02</internalNodes>\n          <leafValues>\n            1.8267199397087097e-02 -1.8641340732574463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8130 -3.8842339999973774e-03</internalNodes>\n          <leafValues>\n            -1.0735920071601868e-01 6.0849040746688843e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8131 -1.1936859664274380e-04</internalNodes>\n          <leafValues>\n            5.2348621189594269e-02 -1.2701539695262909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8132 -5.0230980850756168e-03</internalNodes>\n          <leafValues>\n            5.2682720124721527e-02 -1.2703679502010345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8133 1.8986819684505463e-01</internalNodes>\n          <leafValues>\n            1.7255579587072134e-03 -3.2701051235198975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8134 -2.4319409858435392e-03</internalNodes>\n          <leafValues>\n            1.3875140249729156e-01 -4.3046601116657257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8135 -2.0888550207018852e-03</internalNodes>\n          <leafValues>\n            -1.1241009831428528e-01 3.7676859647035599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8136 4.2116310447454453e-02</internalNodes>\n          <leafValues>\n            8.1929191946983337e-03 -6.8541908264160156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8137 2.7380110695958138e-02</internalNodes>\n          <leafValues>\n            4.4103930704295635e-03 -5.3421849012374878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8138 2.1348569542169571e-02</internalNodes>\n          <leafValues>\n            -5.1160380244255066e-02 1.0021480172872543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8139 -1.7236869782209396e-02</internalNodes>\n          <leafValues>\n            -3.9995738863945007e-01 2.0257489755749702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8140 7.8617185354232788e-03</internalNodes>\n          <leafValues>\n            2.8996279463171959e-02 -1.8014070391654968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8141 8.1942398101091385e-03</internalNodes>\n          <leafValues>\n            -2.5498030707240105e-02 8.4693931043148041e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8142 6.2367911450564861e-03</internalNodes>\n          <leafValues>\n            1.8659260123968124e-02 -2.6443660259246826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8143 2.1872919751331210e-04</internalNodes>\n          <leafValues>\n            -1.5943029522895813e-01 3.0722649767994881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8144 -6.4004249870777130e-03</internalNodes>\n          <leafValues>\n            2.8331050276756287e-01 -1.9352490082383156e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8145 -1.0007199645042419e-01</internalNodes>\n          <leafValues>\n            -4.0704050660133362e-01 6.1583020724356174e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8146 1.5690149739384651e-02</internalNodes>\n          <leafValues>\n            -1.6772339120507240e-02 2.9049569368362427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8147 -7.0421490818262100e-03</internalNodes>\n          <leafValues>\n            -6.7985177040100098e-02 3.1130369752645493e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8148 -1.5320030041038990e-02</internalNodes>\n          <leafValues>\n            3.6400088667869568e-01 -1.3608699664473534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8149 5.8485660701990128e-02</internalNodes>\n          <leafValues>\n            7.4363988824188709e-03 -7.5599330663681030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8150 -3.5200670827180147e-03</internalNodes>\n          <leafValues>\n            -1.3923290371894836e-01 3.7657551467418671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8151 -8.7158178212121129e-04</internalNodes>\n          <leafValues>\n            4.2339839041233063e-02 -5.3530458360910416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8152 2.4548629298806190e-03</internalNodes>\n          <leafValues>\n            -4.4667050242424011e-02 1.3785070180892944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8153 -6.1778929084539413e-02</internalNodes>\n          <leafValues>\n            -3.5338079929351807e-01 4.5869671739637852e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8154 -3.8533521001227200e-04</internalNodes>\n          <leafValues>\n            7.2278007864952087e-02 -1.0433299839496613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8155 7.6227717101573944e-02</internalNodes>\n          <leafValues>\n            -1.1004550382494926e-02 5.0025188922882080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8156 -4.4210380874574184e-03</internalNodes>\n          <leafValues>\n            -8.6290426552295685e-02 5.8773420751094818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8157 1.5068270266056061e-02</internalNodes>\n          <leafValues>\n            -5.8916270732879639e-02 1.0025119781494141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8158 2.5007940828800201e-02</internalNodes>\n          <leafValues>\n            7.6251477003097534e-02 -8.8744960725307465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8159 -7.7328123152256012e-02</internalNodes>\n          <leafValues>\n            2.5363400578498840e-01 -1.5778530389070511e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8160 3.5588641185313463e-04</internalNodes>\n          <leafValues>\n            6.2983699142932892e-02 -7.7181987464427948e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8161 6.9400526583194733e-02</internalNodes>\n          <leafValues>\n            -8.9571140706539154e-03 1.5102629363536835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8162 -1.8577709794044495e-01</internalNodes>\n          <leafValues>\n            -6.9518351554870605e-01 7.8398203477263451e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8163 -6.6014728508889675e-03</internalNodes>\n          <leafValues>\n            -5.6056641042232513e-02 2.4557920172810555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8164 4.0490310639142990e-02</internalNodes>\n          <leafValues>\n            -2.0202599465847015e-02 2.7736270427703857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8165 1.6997240018099546e-03</internalNodes>\n          <leafValues>\n            -1.1403460055589676e-01 1.9222680479288101e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8166 8.4750041365623474e-02</internalNodes>\n          <leafValues>\n            1.8607510253787041e-02 -3.0505430698394775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8167 -1.6975879669189453e-02</internalNodes>\n          <leafValues>\n            1.2357109785079956e-01 -2.9016660526394844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8168 4.6773189678788185e-03</internalNodes>\n          <leafValues>\n            -4.5864760875701904e-02 1.1718840152025223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8169 -1.4066020026803017e-02</internalNodes>\n          <leafValues>\n            -1.3670490682125092e-01 1.7362629994750023e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8170 5.0944689661264420e-02</internalNodes>\n          <leafValues>\n            1.3865640386939049e-02 -3.9529040455818176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8171 9.8265796899795532e-02</internalNodes>\n          <leafValues>\n            -1.2339199893176556e-02 3.6408239603042603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8172 1.1730480473488569e-03</internalNodes>\n          <leafValues>\n            6.6400513052940369e-02 -8.2091093063354492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8173 1.0979039967060089e-01</internalNodes>\n          <leafValues>\n            4.6397978439927101e-03 -6.1344558000564575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8174 4.9452850362285972e-04</internalNodes>\n          <leafValues>\n            -1.0062679648399353e-01 5.7191990315914154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8175 3.5673558712005615e-01</internalNodes>\n          <leafValues>\n            -1.4482989907264709e-02 3.9276111125946045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8176 8.7493062019348145e-03</internalNodes>\n          <leafValues>\n            -4.8551220446825027e-02 1.0460250079631805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8177 2.2463349625468254e-02</internalNodes>\n          <leafValues>\n            2.2396000102162361e-02 -1.3587850332260132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8178 1.8538760021328926e-02</internalNodes>\n          <leafValues>\n            3.0029479414224625e-02 -2.0861870050430298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8179 3.4236259758472443e-02</internalNodes>\n          <leafValues>\n            -1.0644080117344856e-02 1.6675490140914917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8180 4.0900480002164841e-02</internalNodes>\n          <leafValues>\n            -1.2056970037519932e-02 4.3773320317268372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8181 1.0512579977512360e-01</internalNodes>\n          <leafValues>\n            -9.4033451750874519e-04 7.8061622381210327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8182 7.4799366295337677e-02</internalNodes>\n          <leafValues>\n            7.8805796802043915e-03 -6.6342961788177490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8183 4.3973559513688087e-05</internalNodes>\n          <leafValues>\n            -5.8106150478124619e-02 1.0466519743204117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8184 6.6341059282422066e-03</internalNodes>\n          <leafValues>\n            1.9750369712710381e-02 -2.7033481001853943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8185 6.9901258684694767e-03</internalNodes>\n          <leafValues>\n            -3.2210368663072586e-02 5.6677810847759247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8186 -6.9424291141331196e-03</internalNodes>\n          <leafValues>\n            8.3492629230022430e-02 -6.4236722886562347e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8187 1.2524950504302979e-01</internalNodes>\n          <leafValues>\n            1.9679870456457138e-03 -8.7889492511749268e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8188 -6.0555808246135712e-02</internalNodes>\n          <leafValues>\n            -6.5825527906417847e-01 7.3593561537563801e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8189 4.2092729359865189e-02</internalNodes>\n          <leafValues>\n            9.0475538745522499e-03 -3.7676310539245605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8190 1.6190059483051300e-02</internalNodes>\n          <leafValues>\n            1.4534840360283852e-02 -3.4089210629463196e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8191 -2.6756960898637772e-02</internalNodes>\n          <leafValues>\n            1.6862440109252930e-01 -1.0768949985504150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8192 -5.1163539290428162e-02</internalNodes>\n          <leafValues>\n            -9.4068449735641479e-01 4.8503028228878975e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8193 -2.9093079268932343e-02</internalNodes>\n          <leafValues>\n            1.3051369786262512e-01 -2.7216060087084770e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8194 -1.3433809578418732e-01</internalNodes>\n          <leafValues>\n            -5.3713047504425049e-01 1.0605730116367340e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8195 -4.0363678708672523e-03</internalNodes>\n          <leafValues>\n            -7.8597947955131531e-02 4.5609310269355774e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8196 -1.6303880512714386e-01</internalNodes>\n          <leafValues>\n            6.9153147935867310e-01 -6.8249078467488289e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8197 5.3527228534221649e-02</internalNodes>\n          <leafValues>\n            -8.2422774285078049e-03 2.3649579286575317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8198 9.3209616839885712e-02</internalNodes>\n          <leafValues>\n            -7.0793349295854568e-03 6.3985627889633179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8199 -4.1583351790904999e-02</internalNodes>\n          <leafValues>\n            -4.0527749061584473e-01 1.1953369714319706e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8200 1.5241269767284393e-01</internalNodes>\n          <leafValues>\n            -1.6016889363527298e-02 3.7084808945655823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8201 -1.3017480261623859e-02</internalNodes>\n          <leafValues>\n            -1.2366600334644318e-01 4.4537510722875595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8202 5.4946541786193848e-02</internalNodes>\n          <leafValues>\n            2.4852929636836052e-02 -2.1955069899559021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8203 3.0320021323859692e-04</internalNodes>\n          <leafValues>\n            -1.3367289304733276e-01 4.0226090699434280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8204 1.3891180045902729e-02</internalNodes>\n          <leafValues>\n            -2.6901820674538612e-02 1.9647410511970520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8205 1.0848880046978593e-03</internalNodes>\n          <leafValues>\n            3.6422070115804672e-02 -8.3430632948875427e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8206 2.3160090204328299e-03</internalNodes>\n          <leafValues>\n            -6.1215829104185104e-02 1.1277849972248077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8207 -7.1280319243669510e-03</internalNodes>\n          <leafValues>\n            -1.4642429351806641e-01 3.1300168484449387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8208 -3.5769429523497820e-03</internalNodes>\n          <leafValues>\n            1.0159090161323547e-01 -6.0789510607719421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8209 7.6856701634824276e-03</internalNodes>\n          <leafValues>\n            4.2229469865560532e-02 -1.2583130598068237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8210 8.4121264517307281e-03</internalNodes>\n          <leafValues>\n            -4.6872619539499283e-02 1.3011389970779419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8211 7.5839929282665253e-02</internalNodes>\n          <leafValues>\n            -9.2988023534417152e-03 2.4260810017585754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8212 8.6365960305556655e-04</internalNodes>\n          <leafValues>\n            9.1133847832679749e-02 -6.1323560774326324e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8213 -1.0632569901645184e-02</internalNodes>\n          <leafValues>\n            -6.7818403244018555e-02 1.9036499783396721e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8214 -1.4120140112936497e-02</internalNodes>\n          <leafValues>\n            2.9123929142951965e-01 -1.7482239753007889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8215 2.0944620482623577e-03</internalNodes>\n          <leafValues>\n            -1.1744289845228195e-01 5.4129518568515778e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8216 4.2378879152238369e-03</internalNodes>\n          <leafValues>\n            3.8495510816574097e-02 -1.4472819864749908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8217 -2.2818730212748051e-03</internalNodes>\n          <leafValues>\n            -1.1576230078935623e-01 2.7663499116897583e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8218 9.4367301790043712e-04</internalNodes>\n          <leafValues>\n            -9.4088926911354065e-02 5.3373821079730988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8219 1.4890190213918686e-02</internalNodes>\n          <leafValues>\n            -1.1562420055270195e-02 1.0941980034112930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8220 5.2381302230060101e-03</internalNodes>\n          <leafValues>\n            3.5265430808067322e-02 -1.5212060511112213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8221 1.2663690140470862e-03</internalNodes>\n          <leafValues>\n            -3.3352568745613098e-02 7.9812049865722656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8222 -5.3786882199347019e-03</internalNodes>\n          <leafValues>\n            2.0934769511222839e-01 -2.4073069915175438e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8223 -1.9063480431213975e-03</internalNodes>\n          <leafValues>\n            -2.0774979889392853e-01 2.5406830012798309e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8224 3.0771149322390556e-03</internalNodes>\n          <leafValues>\n            -5.1940180361270905e-02 1.0475979745388031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8225 9.5619028434157372e-03</internalNodes>\n          <leafValues>\n            3.0633790418505669e-02 -1.0758169740438461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8226 2.0540829747915268e-02</internalNodes>\n          <leafValues>\n            -2.2028919309377670e-02 2.3570840060710907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8227 7.0854742079973221e-03</internalNodes>\n          <leafValues>\n            -4.7188248485326767e-02 8.4122747182846069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8228 -6.2047559767961502e-03</internalNodes>\n          <leafValues>\n            -1.2209820002317429e-01 4.5177329331636429e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8229 -2.3474119603633881e-02</internalNodes>\n          <leafValues>\n            -2.8770458698272705e-01 1.0876529850065708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8230 9.1368835419416428e-03</internalNodes>\n          <leafValues>\n            -3.3426750451326370e-02 2.0680120587348938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8231 1.0512090520933270e-03</internalNodes>\n          <leafValues>\n            4.7006800770759583e-02 -9.5018379390239716e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8232 -6.0899247182533145e-04</internalNodes>\n          <leafValues>\n            5.3419198840856552e-02 -1.0444770008325577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8233 -7.4382261373102665e-03</internalNodes>\n          <leafValues>\n            -4.8089329153299332e-02 1.9244499504566193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8234 1.9495990127325058e-02</internalNodes>\n          <leafValues>\n            -3.0136700719594955e-02 2.0381480455398560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8235 7.7799506485462189e-02</internalNodes>\n          <leafValues>\n            4.2237630113959312e-03 -7.2407877445220947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8236 3.1717489473521709e-03</internalNodes>\n          <leafValues>\n            2.8818940743803978e-02 -1.6305699944496155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8237 -3.9012718945741653e-02</internalNodes>\n          <leafValues>\n            -2.9151159524917603e-01 1.1131940409541130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8238 -3.1845991034060717e-03</internalNodes>\n          <leafValues>\n            6.3072219491004944e-02 -7.7291563153266907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8239 1.7876720055937767e-02</internalNodes>\n          <leafValues>\n            5.1196590065956116e-02 -3.7885930389165878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8240 1.2821210548281670e-03</internalNodes>\n          <leafValues>\n            -5.7314708828926086e-02 8.7054982781410217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8241 1.0710550099611282e-01</internalNodes>\n          <leafValues>\n            -1.5561000443994999e-02 3.1525009870529175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8242 6.9577127695083618e-02</internalNodes>\n          <leafValues>\n            8.9664813131093979e-03 -5.8589607477188110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8243 -4.1071181185543537e-03</internalNodes>\n          <leafValues>\n            9.5472246408462524e-02 -3.5176470875740051e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8244 -2.4557299911975861e-03</internalNodes>\n          <leafValues>\n            -1.6605280339717865e-01 3.7322919815778732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8245 -2.0908420905470848e-02</internalNodes>\n          <leafValues>\n            1.3989880681037903e-01 -2.9987450689077377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8246 -8.1008402630686760e-03</internalNodes>\n          <leafValues>\n            -1.0529220104217529e-01 7.0245787501335144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8247 -2.5671819224953651e-02</internalNodes>\n          <leafValues>\n            4.4254720211029053e-01 -1.1081459932029247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8248 -9.3759642913937569e-03</internalNodes>\n          <leafValues>\n            -6.0765031725168228e-02 8.1338323652744293e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8249 5.1140699535608292e-02</internalNodes>\n          <leafValues>\n            -1.0516249574720860e-02 3.4041538834571838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8250 -4.0337219834327698e-03</internalNodes>\n          <leafValues>\n            8.5099473595619202e-02 -6.3421532511711121e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8251 3.3258409239351749e-03</internalNodes>\n          <leafValues>\n            -8.4625139832496643e-02 4.7368369996547699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8252 -3.9332117885351181e-03</internalNodes>\n          <leafValues>\n            -1.2637099623680115e-01 4.2450599372386932e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8253 -4.7937841154634953e-03</internalNodes>\n          <leafValues>\n            -4.2527411133050919e-02 2.5126809254288673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8254 2.5972370058298111e-03</internalNodes>\n          <leafValues>\n            4.1884120553731918e-02 -1.4374159276485443e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8255 5.2807550877332687e-02</internalNodes>\n          <leafValues>\n            -1.2467020191252232e-02 4.0223389863967896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8256 -8.1413555890321732e-03</internalNodes>\n          <leafValues>\n            -1.2783770263195038e-01 3.8975879549980164e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8257 2.9801739379763603e-02</internalNodes>\n          <leafValues>\n            -1.6747390851378441e-02 1.2424229830503464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8258 -8.9907720685005188e-02</internalNodes>\n          <leafValues>\n            3.1418469548225403e-01 -1.8360419198870659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8259 1.7845210433006287e-01</internalNodes>\n          <leafValues>\n            1.0455190204083920e-02 -3.2048919796943665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8260 1.8588220700621605e-02</internalNodes>\n          <leafValues>\n            -3.8541439920663834e-02 1.5135329961776733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8261 -4.5074601075612009e-05</internalNodes>\n          <leafValues>\n            5.0462849438190460e-02 -5.6574851274490356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8262 3.8339050952345133e-03</internalNodes>\n          <leafValues>\n            4.7501549124717712e-02 -1.4327140152454376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8263 8.8608250021934509e-02</internalNodes>\n          <leafValues>\n            -3.3567149657756090e-03 5.8598208427429199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8264 -7.0611469447612762e-02</internalNodes>\n          <leafValues>\n            6.0292667150497437e-01 -8.3463769406080246e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8265 -1.3958199322223663e-01</internalNodes>\n          <leafValues>\n            -9.1693513095378876e-02 1.5311989933252335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8266 7.6274941675364971e-03</internalNodes>\n          <leafValues>\n            -4.0825009346008301e-02 1.1937720328569412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8267 -7.0419587194919586e-02</internalNodes>\n          <leafValues>\n            -6.6531497240066528e-01 2.6815559249371290e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8268 2.2952680010348558e-03</internalNodes>\n          <leafValues>\n            -7.9496517777442932e-02 5.7034268975257874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8269 3.6756680347025394e-03</internalNodes>\n          <leafValues>\n            -2.9180280864238739e-02 5.6333038955926895e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8270 4.6072501689195633e-02</internalNodes>\n          <leafValues>\n            1.9100179895758629e-02 -2.9163768887519836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8271 2.1738489158451557e-03</internalNodes>\n          <leafValues>\n            -2.6912130415439606e-02 2.0199960470199585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8272 -5.3164511919021606e-03</internalNodes>\n          <leafValues>\n            9.3022979795932770e-02 -7.1548640727996826e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8273 -1.1198960244655609e-02</internalNodes>\n          <leafValues>\n            -1.0618919879198074e-01 4.8395581543445587e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8274 1.7013610340654850e-03</internalNodes>\n          <leafValues>\n            -1.3111209869384766e-01 4.3086219578981400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8275 -1.1626269668340683e-02</internalNodes>\n          <leafValues>\n            1.5684530138969421e-01 -2.4698950350284576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8276 9.3881830573081970e-02</internalNodes>\n          <leafValues>\n            -1.2058589607477188e-02 3.7941938638687134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8277 1.2041090056300163e-02</internalNodes>\n          <leafValues>\n            2.9569109901785851e-02 -1.3328549265861511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8278 -4.1863098740577698e-03</internalNodes>\n          <leafValues>\n            6.7244023084640503e-02 -7.2228990495204926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8279 8.8373906910419464e-02</internalNodes>\n          <leafValues>\n            7.5915241613984108e-03 -6.2512797117233276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8280 -1.4876410365104675e-02</internalNodes>\n          <leafValues>\n            1.1762090027332306e-01 -4.3840218335390091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8281 1.3433529995381832e-02</internalNodes>\n          <leafValues>\n            1.9615789875388145e-02 -1.1923760175704956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8282 1.5091040730476379e-01</internalNodes>\n          <leafValues>\n            -9.9040074273943901e-03 5.6262481212615967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8283 -1.7507839947938919e-02</internalNodes>\n          <leafValues>\n            -2.3439739644527435e-01 1.8828360363841057e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8284 -1.4707089960575104e-01</internalNodes>\n          <leafValues>\n            -7.4530661106109619e-01 7.0233740843832493e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8285 3.1485889106988907e-02</internalNodes>\n          <leafValues>\n            -3.6193220876157284e-03 6.9215708971023560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8286 -1.6217399388551712e-04</internalNodes>\n          <leafValues>\n            4.6460039913654327e-02 -1.0642550140619278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8287 5.6881760247051716e-04</internalNodes>\n          <leafValues>\n            -2.8816150501370430e-02 7.4378728866577148e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8288 -1.9876200705766678e-02</internalNodes>\n          <leafValues>\n            -2.0997400581836700e-01 2.3018810898065567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8289 -8.7401196360588074e-03</internalNodes>\n          <leafValues>\n            1.7325100302696228e-01 -3.5786859691143036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8290 -5.0579208880662918e-02</internalNodes>\n          <leafValues>\n            -5.2024918794631958e-01 9.2388605698943138e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8291 9.3982152640819550e-02</internalNodes>\n          <leafValues>\n            3.4048059023916721e-03 -2.9207429289817810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8292 -1.3326539658010006e-02</internalNodes>\n          <leafValues>\n            1.3661830127239227e-01 -3.4405559301376343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8293 -2.2472620010375977e-02</internalNodes>\n          <leafValues>\n            -2.5913679599761963e-01 1.1266170069575310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8294 -4.1125040501356125e-02</internalNodes>\n          <leafValues>\n            -6.6921561956405640e-01 7.3854308575391769e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8295 6.9720767438411713e-02</internalNodes>\n          <leafValues>\n            5.0764488987624645e-03 -2.4747189879417419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8296 2.5198599323630333e-02</internalNodes>\n          <leafValues>\n            -1.5660049393773079e-02 2.9408401250839233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8297 4.2568319477140903e-03</internalNodes>\n          <leafValues>\n            3.8112118840217590e-02 -1.2368690222501755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8298 -1.2679009698331356e-02</internalNodes>\n          <leafValues>\n            -1.9976189732551575e-01 2.8806639835238457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8299 -1.6080659627914429e-01</internalNodes>\n          <leafValues>\n            1.8710459768772125e-01 -8.2025080919265747e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8300 1.2181399762630463e-01</internalNodes>\n          <leafValues>\n            -1.0855929926037788e-02 4.5412290096282959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8301 2.8687159065157175e-03</internalNodes>\n          <leafValues>\n            -9.8563097417354584e-03 1.9689890742301941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8302 -3.4924471401609480e-04</internalNodes>\n          <leafValues>\n            4.7955259680747986e-02 -1.2549050152301788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8303 4.3789181858301163e-02</internalNodes>\n          <leafValues>\n            5.1197651773691177e-03 -6.6044712066650391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8304 4.9425449222326279e-02</internalNodes>\n          <leafValues>\n            7.9704420641064644e-03 -5.1537191867828369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8305 1.2263789772987366e-02</internalNodes>\n          <leafValues>\n            9.8127601668238640e-03 -1.6274920105934143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8306 -6.7564379423856735e-03</internalNodes>\n          <leafValues>\n            -6.6992767155170441e-02 7.8426092863082886e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8307 1.9599240273237228e-02</internalNodes>\n          <leafValues>\n            -2.4508479982614517e-02 1.7892380058765411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8308 1.3520059874281287e-03</internalNodes>\n          <leafValues>\n            -7.5853422284126282e-02 5.7282470166683197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8309 5.1610758528113365e-03</internalNodes>\n          <leafValues>\n            5.0592619925737381e-02 -9.6658922731876373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8310 2.7124589309096336e-02</internalNodes>\n          <leafValues>\n            -1.3078499585390091e-02 3.3894819021224976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8311 -7.3659062385559082e-02</internalNodes>\n          <leafValues>\n            -9.0775561332702637e-01 5.3760888986289501e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8312 -2.7619479224085808e-03</internalNodes>\n          <leafValues>\n            1.3446320593357086e-01 -3.4483309835195541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8313 -1.5638889744877815e-03</internalNodes>\n          <leafValues>\n            -1.9992120563983917e-01 1.4003699645400047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8314 4.0559601038694382e-03</internalNodes>\n          <leafValues>\n            5.3183209151029587e-02 -1.0070829838514328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8315 -3.2189621124416590e-03</internalNodes>\n          <leafValues>\n            6.2624312937259674e-02 -3.0276089906692505e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8316 4.1666622273623943e-03</internalNodes>\n          <leafValues>\n            -9.1761156916618347e-02 5.8400500565767288e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8317 2.0393060520291328e-02</internalNodes>\n          <leafValues>\n            4.8048538155853748e-03 -3.8386350870132446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8318 -9.9844802170991898e-03</internalNodes>\n          <leafValues>\n            -6.9473296403884888e-02 7.0034191012382507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8319 1.9515320658683777e-02</internalNodes>\n          <leafValues>\n            -3.4106500446796417e-02 1.0831409692764282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8320 8.7807718664407730e-03</internalNodes>\n          <leafValues>\n            3.6990050226449966e-02 -1.3089330494403839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8321 1.7314519500359893e-03</internalNodes>\n          <leafValues>\n            -4.2123470455408096e-02 8.4982097148895264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8322 -2.6709519326686859e-02</internalNodes>\n          <leafValues>\n            3.2326829433441162e-01 -1.5427160076797009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8323 7.8696580603718758e-03</internalNodes>\n          <leafValues>\n            3.1361158937215805e-02 -1.0568609833717346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8324 3.2152980566024780e-03</internalNodes>\n          <leafValues>\n            -6.5161801874637604e-02 7.6189488172531128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8325 -2.3215120658278465e-02</internalNodes>\n          <leafValues>\n            2.2522650659084320e-01 -1.4838770031929016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8326 -4.4935368932783604e-03</internalNodes>\n          <leafValues>\n            -1.3131460547447205e-01 4.2855940759181976e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8327 -1.1850389651954174e-02</internalNodes>\n          <leafValues>\n            1.4825740456581116e-01 -2.9456850141286850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8328 -9.3039282364770770e-04</internalNodes>\n          <leafValues>\n            7.9329937696456909e-02 -7.5784526765346527e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8329 -7.2138011455535889e-04</internalNodes>\n          <leafValues>\n            2.2042410448193550e-02 -2.0893280208110809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8330 1.3078770041465759e-01</internalNodes>\n          <leafValues>\n            -1.2214420363306999e-02 4.3224608898162842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8331 2.7863389253616333e-01</internalNodes>\n          <leafValues>\n            -7.4468360980972648e-04 9.9999761581420898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8332 -4.0815200656652451e-02</internalNodes>\n          <leafValues>\n            -6.1310279369354248e-01 8.2405265420675278e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8333 1.5054940013214946e-03</internalNodes>\n          <leafValues>\n            -1.8053399398922920e-02 6.5230727195739746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8334 6.5729310736060143e-03</internalNodes>\n          <leafValues>\n            3.0967630445957184e-02 -1.5021359920501709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8335 -1.4033170044422150e-01</internalNodes>\n          <leafValues>\n            -4.4641208648681641e-01 5.0997259095311165e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8336 -1.2781560420989990e-02</internalNodes>\n          <leafValues>\n            1.2579609453678131e-01 -4.6258769929409027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8337 1.3383819721639156e-02</internalNodes>\n          <leafValues>\n            7.5233832001686096e-02 -2.9858419671654701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8338 9.5225386321544647e-03</internalNodes>\n          <leafValues>\n            -4.4135529547929764e-02 1.0822969675064087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8339 -7.2484686970710754e-02</internalNodes>\n          <leafValues>\n            -1. 1.3005880173295736e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8340 3.6246789386495948e-04</internalNodes>\n          <leafValues>\n            -6.6878542304039001e-02 7.3916479945182800e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8341 -1.5511980280280113e-02</internalNodes>\n          <leafValues>\n            -1.8414540588855743e-01 1.5999039635062218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8342 5.1146611571311951e-02</internalNodes>\n          <leafValues>\n            -9.4361994415521622e-03 5.4720860719680786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8343 -8.9448272774461657e-05</internalNodes>\n          <leafValues>\n            3.2970890402793884e-02 -4.5103389769792557e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8344 1.0151580208912492e-03</internalNodes>\n          <leafValues>\n            4.8603180795907974e-02 -9.8257049918174744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8345 5.3570970892906189e-02</internalNodes>\n          <leafValues>\n            1.0325700044631958e-02 -1.4304420351982117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8346 1.2302629649639130e-01</internalNodes>\n          <leafValues>\n            -5.2219899371266365e-03 8.6903452873229980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8347 -6.0005468549206853e-04</internalNodes>\n          <leafValues>\n            5.3572040051221848e-02 -5.8203268796205521e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8348 -4.4715698808431625e-02</internalNodes>\n          <leafValues>\n            4.4988310337066650e-01 -1.0549419559538364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8349 6.3781379722058773e-03</internalNodes>\n          <leafValues>\n            2.6184290647506714e-02 -1.0640030354261398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8350 -5.6618300732225180e-04</internalNodes>\n          <leafValues>\n            5.7264849543571472e-02 -7.7750243246555328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8351 -1.5853339573368430e-04</internalNodes>\n          <leafValues>\n            2.5316949933767319e-02 -5.7189941406250000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8352 -4.9790769815444946e-02</internalNodes>\n          <leafValues>\n            -3.7127709388732910e-01 1.3125170022249222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8353 -1.0477020405232906e-02</internalNodes>\n          <leafValues>\n            8.4245949983596802e-02 -3.6731608211994171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8354 -9.0497080236673355e-03</internalNodes>\n          <leafValues>\n            -1.6894440352916718e-01 2.8471369296312332e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8355 -3.5202078521251678e-02</internalNodes>\n          <leafValues>\n            -4.3810841441154480e-01 5.8491500094532967e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8356 -2.0730090327560902e-03</internalNodes>\n          <leafValues>\n            9.4890840351581573e-02 -5.3059589117765427e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8357 -5.0727208144962788e-03</internalNodes>\n          <leafValues>\n            -1.1221739649772644e-01 4.4165991246700287e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8358 2.5876651052385569e-03</internalNodes>\n          <leafValues>\n            -5.5557820945978165e-02 1.1426319926977158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8359 -2.4757650680840015e-03</internalNodes>\n          <leafValues>\n            -4.8213180154561996e-02 3.1529899686574936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8360 -1.2912530452013016e-02</internalNodes>\n          <leafValues>\n            1.1486659944057465e-01 -3.8589760661125183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8361 7.0194348692893982e-02</internalNodes>\n          <leafValues>\n            3.5798270255327225e-03 -7.3008167743682861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8362 -1.2016300112009048e-01</internalNodes>\n          <leafValues>\n            -6.7217922210693359e-01 5.8088749647140503e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8363 1.3109490275382996e-01</internalNodes>\n          <leafValues>\n            1.5340699814260006e-02 -1.2917870283126831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8364 -1.1350499838590622e-01</internalNodes>\n          <leafValues>\n            4.7297981381416321e-01 -1.0574280284345150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8365 -7.1533523499965668e-02</internalNodes>\n          <leafValues>\n            -3.4910291433334351e-01 9.8157208412885666e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8366 1.5889670699834824e-02</internalNodes>\n          <leafValues>\n            -3.0149290338158607e-02 1.5134809911251068e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8367 2.6840370893478394e-01</internalNodes>\n          <leafValues>\n            9.9974423646926880e-03 -1.2243749946355820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8368 -1.4922569692134857e-01</internalNodes>\n          <leafValues>\n            -1.5773139894008636e-01 2.7682509273290634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8369 -2.2858489304780960e-02</internalNodes>\n          <leafValues>\n            1.7340719699859619e-01 -2.1124770864844322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8370 -9.0983451809734106e-04</internalNodes>\n          <leafValues>\n            5.5269908159971237e-02 -8.5052981972694397e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8371 -1.1462160386145115e-02</internalNodes>\n          <leafValues>\n            -1.4397600293159485e-01 1.3809709809720516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8372 8.7118431925773621e-02</internalNodes>\n          <leafValues>\n            6.4688520506024361e-03 -7.2809070348739624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8373 5.3810589015483856e-02</internalNodes>\n          <leafValues>\n            -2.8251519426703453e-02 1.3615800440311432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8374 -1.6928049735724926e-03</internalNodes>\n          <leafValues>\n            -1.0114800184965134e-01 5.2096601575613022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8375 -1.4526920393109322e-02</internalNodes>\n          <leafValues>\n            -1.0613209754228592e-01 2.7218030765652657e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8376 -5.9082340449094772e-03</internalNodes>\n          <leafValues>\n            1.1257000267505646e-01 -6.1032701283693314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8377 -2.1421469748020172e-02</internalNodes>\n          <leafValues>\n            -1.5464189648628235e-01 1.1853870004415512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8378 8.0171570181846619e-02</internalNodes>\n          <leafValues>\n            5.5826799944043159e-03 -8.2389092445373535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8379 -1.0931739816442132e-03</internalNodes>\n          <leafValues>\n            -7.8393906354904175e-02 1.3433099724352360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8380 4.1605130536481738e-04</internalNodes>\n          <leafValues>\n            -4.3186139315366745e-02 1.0500840097665787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8381 -2.8376420959830284e-03</internalNodes>\n          <leafValues>\n            7.8960210084915161e-02 -4.2247280478477478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8382 -2.8522519394755363e-02</internalNodes>\n          <leafValues>\n            -1.0722970217466354e-01 4.7789189964532852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8383 4.0068081021308899e-01</internalNodes>\n          <leafValues>\n            -5.7991011999547482e-03 3.0695509910583496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8384 -8.1703867763280869e-03</internalNodes>\n          <leafValues>\n            1.0851760208606720e-01 -5.6153468787670135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8385 9.3125440180301666e-03</internalNodes>\n          <leafValues>\n            -4.4560939073562622e-02 4.3634049594402313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8386 5.8274720795452595e-03</internalNodes>\n          <leafValues>\n            3.1310841441154480e-02 -1.6053420305252075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8387 -2.9063750989735126e-03</internalNodes>\n          <leafValues>\n            3.7148229777812958e-02 -2.7310580015182495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8388 1.6421969980001450e-02</internalNodes>\n          <leafValues>\n            -3.1616371124982834e-02 1.6195470094680786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8389 -1.3876060023903847e-02</internalNodes>\n          <leafValues>\n            -1.7840880155563354e-01 2.6925239711999893e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8390 -2.9935980215668678e-02</internalNodes>\n          <leafValues>\n            2.0069709420204163e-01 -2.7372730895876884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8391 8.1381313502788544e-03</internalNodes>\n          <leafValues>\n            4.0951769798994064e-02 -7.4756972491741180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8392 -5.8591389097273350e-03</internalNodes>\n          <leafValues>\n            -1.2337020039558411e-01 3.9641879498958588e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8393 7.1592196822166443e-02</internalNodes>\n          <leafValues>\n            -1.0293760336935520e-02 2.2391259670257568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8394 5.0111521035432816e-02</internalNodes>\n          <leafValues>\n            2.4072999134659767e-02 -2.1443809568881989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8395 4.2603579349815845e-03</internalNodes>\n          <leafValues>\n            -2.3712050169706345e-02 7.3603406548500061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8396 6.5065422095358372e-03</internalNodes>\n          <leafValues>\n            -6.7402780055999756e-02 7.6926141977310181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8397 2.0325470250099897e-03</internalNodes>\n          <leafValues>\n            -9.9664673209190369e-02 5.7994231581687927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8398 -9.3465158715844154e-03</internalNodes>\n          <leafValues>\n            1.9432920217514038e-01 -3.1387709081172943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8399 9.5768114551901817e-03</internalNodes>\n          <leafValues>\n            2.2594990208745003e-02 -1.6090850532054901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8400 -4.6763911843299866e-02</internalNodes>\n          <leafValues>\n            -3.5020270943641663e-01 1.5035149641335011e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8401 -5.0164870917797089e-02</internalNodes>\n          <leafValues>\n            1.2763389945030212e-01 -1.1035620234906673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8402 2.3148149251937866e-02</internalNodes>\n          <leafValues>\n            -2.4636579677462578e-02 2.0264349877834320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8403 -7.4168562889099121e-02</internalNodes>\n          <leafValues>\n            -9.4854289293289185e-01 2.2216918878257275e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8404 -2.0698629319667816e-02</internalNodes>\n          <leafValues>\n            -2.4585549533367157e-01 2.1370820701122284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8405 -5.8187540620565414e-02</internalNodes>\n          <leafValues>\n            3.0531001091003418e-01 -8.1265745684504509e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8406 -5.2451588213443756e-02</internalNodes>\n          <leafValues>\n            5.0567781925201416e-01 -9.7108660265803337e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8407 -4.6721640974283218e-02</internalNodes>\n          <leafValues>\n            8.0896109342575073e-01 -1.8908439669758081e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8408 -1.0385509580373764e-02</internalNodes>\n          <leafValues>\n            -2.8369909524917603e-01 1.9166229292750359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8409 5.4432367905974388e-03</internalNodes>\n          <leafValues>\n            4.1430719196796417e-02 -1.6033279895782471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8410 2.4030160158872604e-02</internalNodes>\n          <leafValues>\n            -4.3751548975706100e-02 1.0553020238876343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8411 -2.6430420577526093e-02</internalNodes>\n          <leafValues>\n            -8.7448269128799438e-02 2.8769830241799355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8412 4.8743681982159615e-03</internalNodes>\n          <leafValues>\n            3.5032961517572403e-02 -1.5881679952144623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8413 -2.5106489192694426e-03</internalNodes>\n          <leafValues>\n            8.8161677122116089e-02 -3.0205590650439262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8414 -5.2146320231258869e-03</internalNodes>\n          <leafValues>\n            -1.1350130289793015e-01 4.2001061141490936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8415 -1.0986009612679482e-02</internalNodes>\n          <leafValues>\n            8.4428779780864716e-02 -3.8272839039564133e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8416 -6.0057129710912704e-02</internalNodes>\n          <leafValues>\n            -7.9249101877212524e-01 5.2951448597013950e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8417 1.3621809892356396e-02</internalNodes>\n          <leafValues>\n            -1.7419820651412010e-02 2.1612060070037842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8418 -2.2223800420761108e-02</internalNodes>\n          <leafValues>\n            2.6721641421318054e-01 -2.0207190886139870e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8419 5.8124359697103500e-02</internalNodes>\n          <leafValues>\n            6.0539757832884789e-03 -4.0927109122276306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8420 -2.8097970411181450e-02</internalNodes>\n          <leafValues>\n            -1.1217900365591049e-01 5.4144639521837234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8421 6.5278373658657074e-02</internalNodes>\n          <leafValues>\n            -7.4973162263631821e-03 1.2384270131587982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8422 -2.5233640335500240e-03</internalNodes>\n          <leafValues>\n            -1.8224379420280457e-01 2.4537850171327591e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8423 1.1478599905967712e-01</internalNodes>\n          <leafValues>\n            1.9617579877376556e-02 -1.1905120313167572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8424 9.6991509199142456e-03</internalNodes>\n          <leafValues>\n            -5.3946550935506821e-02 1.1180210113525391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8425 2.9359150677919388e-02</internalNodes>\n          <leafValues>\n            -2.3395609110593796e-02 1.8534250557422638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8426 7.8490097075700760e-03</internalNodes>\n          <leafValues>\n            1.6454109549522400e-01 -4.2129490524530411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8427 4.0329899638891220e-03</internalNodes>\n          <leafValues>\n            2.4495590478181839e-02 -6.5955489873886108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8428 2.1471390128135681e-01</internalNodes>\n          <leafValues>\n            -1.0462880134582520e-02 4.7438031435012817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8429 -2.2316209506243467e-03</internalNodes>\n          <leafValues>\n            4.9796439707279205e-02 -1.0328280180692673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8430 2.1833330392837524e-02</internalNodes>\n          <leafValues>\n            -5.3884848952293396e-02 9.3277551233768463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8431 2.4430779740214348e-02</internalNodes>\n          <leafValues>\n            1.5706099569797516e-02 -2.8244438767433167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8432 1.2532520107924938e-02</internalNodes>\n          <leafValues>\n            -3.0983900651335716e-02 1.5599699318408966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8433 7.9741179943084717e-03</internalNodes>\n          <leafValues>\n            2.6650540530681610e-02 -1.3689580559730530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8434 7.9444557428359985e-02</internalNodes>\n          <leafValues>\n            6.4238710328936577e-03 -7.8485661745071411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8435 -1.7925030551850796e-03</internalNodes>\n          <leafValues>\n            3.9645589888095856e-02 -1.1497259885072708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8436 -9.0927572455257177e-04</internalNodes>\n          <leafValues>\n            6.3256889581680298e-02 -7.5250372290611267e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8437 -2.6040049269795418e-02</internalNodes>\n          <leafValues>\n            1.4864259958267212e-01 -1.8506240099668503e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8438 4.1452320292592049e-03</internalNodes>\n          <leafValues>\n            3.3959619700908661e-02 -1.4355990290641785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8439 5.7123368605971336e-04</internalNodes>\n          <leafValues>\n            -6.8550966680049896e-02 6.9944731891155243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8440 -4.9577720463275909e-02</internalNodes>\n          <leafValues>\n            3.9880838990211487e-01 -1.1339910328388214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8441 -1.5334860421717167e-02</internalNodes>\n          <leafValues>\n            -8.3445623517036438e-02 3.2276369631290436e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8442 -1.7406089231371880e-02</internalNodes>\n          <leafValues>\n            1.3560940325260162e-01 -3.1945578753948212e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8443 -2.1422259509563446e-02</internalNodes>\n          <leafValues>\n            -1.1050239950418472e-01 2.8536040335893631e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8444 1.9694769289344549e-03</internalNodes>\n          <leafValues>\n            4.3834108859300613e-02 -1.0551860183477402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8445 -1.9115379080176353e-02</internalNodes>\n          <leafValues>\n            1.4690290391445160e-01 -1.5405310317873955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8446 4.6963259577751160e-02</internalNodes>\n          <leafValues>\n            8.1654358655214310e-03 -5.8734887838363647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8447 2.0964320003986359e-01</internalNodes>\n          <leafValues>\n            3.1721789855509996e-03 -8.0437898635864258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8448 6.2511406838893890e-02</internalNodes>\n          <leafValues>\n            -1.6422789543867111e-02 3.0976039171218872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8449 -1.0126180201768875e-01</internalNodes>\n          <leafValues>\n            -6.1639147996902466e-01 7.2699659503996372e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8450 3.3980670850723982e-03</internalNodes>\n          <leafValues>\n            -1.9664889201521873e-02 2.2541929781436920e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8451 -1.7059950157999992e-02</internalNodes>\n          <leafValues>\n            -1.7193520441651344e-02 6.9114550948143005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8452 3.7455849815160036e-03</internalNodes>\n          <leafValues>\n            5.1737461239099503e-02 -8.2748822867870331e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8453 8.7769806385040283e-02</internalNodes>\n          <leafValues>\n            -6.3681108877062798e-03 7.9492002725601196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8454 2.3725361097604036e-03</internalNodes>\n          <leafValues>\n            -3.0487439036369324e-01 1.4520769938826561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8455 -1.9282909110188484e-02</internalNodes>\n          <leafValues>\n            1.8806980550289154e-01 -1.3220929540693760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8456 3.8580079562962055e-03</internalNodes>\n          <leafValues>\n            3.3978439867496490e-02 -1.2854169309139252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8457 2.6525680441409349e-03</internalNodes>\n          <leafValues>\n            -3.9146900177001953e-02 9.9119357764720917e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8458 9.9175602197647095e-02</internalNodes>\n          <leafValues>\n            5.0618657842278481e-03 -8.7370461225509644e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8459 -7.0648840628564358e-03</internalNodes>\n          <leafValues>\n            8.5219286382198334e-02 -2.4467790499329567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8460 -5.2547529339790344e-03</internalNodes>\n          <leafValues>\n            -1.2158469855785370e-01 3.7228528410196304e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8461 5.0068609416484833e-03</internalNodes>\n          <leafValues>\n            -3.5557191818952560e-02 7.8515462577342987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8462 -6.8118162453174591e-02</internalNodes>\n          <leafValues>\n            -2.6292499899864197e-01 1.8325960263609886e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8463 9.3348289374262094e-04</internalNodes>\n          <leafValues>\n            -3.0107179656624794e-02 4.4869720935821533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8464 -2.1996269933879375e-03</internalNodes>\n          <leafValues>\n            1.1136700212955475e-01 -6.6201932728290558e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8465 -6.6485330462455750e-03</internalNodes>\n          <leafValues>\n            -7.8398697078227997e-02 2.0472070202231407e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8466 1.4126920141279697e-03</internalNodes>\n          <leafValues>\n            -5.2428670227527618e-02 8.9471399784088135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8467 5.1406599581241608e-02</internalNodes>\n          <leafValues>\n            -1.4306739903986454e-03 6.3885271549224854e-01</leafValues></_></weakClassifiers></_></stages>\n  <features>\n    <_>\n      <rects>\n        <_>\n          2 7 14 4 -1.</_>\n        <_>\n          2 9 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          7 2 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 5 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 9 -1.</_>\n        <_>\n          3 9 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 5 -1.</_>\n        <_>\n          7 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 8 -1.</_>\n        <_>\n          4 10 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          12 5 3 5 2.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 11 9 -1.</_>\n        <_>\n          4 3 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 10 -1.</_>\n        <_>\n          4 5 5 5 2.</_>\n        <_>\n          9 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 5 12 -1.</_>\n        <_>\n          3 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 9 9 -1.</_>\n        <_>\n          5 6 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 12 -1.</_>\n        <_>\n          8 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 5 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 8 -1.</_>\n        <_>\n          1 2 4 4 2.</_>\n        <_>\n          5 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 8 -1.</_>\n        <_>\n          13 12 5 4 2.</_>\n        <_>\n          8 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 3 10 -1.</_>\n        <_>\n          4 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 10 -1.</_>\n        <_>\n          0 9 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 9 -1.</_>\n        <_>\n          3 3 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 11 -1.</_>\n        <_>\n          10 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 11 -1.</_>\n        <_>\n          8 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 8 -1.</_>\n        <_>\n          10 6 6 4 2.</_>\n        <_>\n          4 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 7 -1.</_>\n        <_>\n          11 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 7 -1.</_>\n        <_>\n          7 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 6 -1.</_>\n        <_>\n          6 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 7 -1.</_>\n        <_>\n          9 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 5 9 -1.</_>\n        <_>\n          11 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 8 -1.</_>\n        <_>\n          4 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 8 -1.</_>\n        <_>\n          9 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 5 6 -1.</_>\n        <_>\n          4 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 5 -1.</_>\n        <_>\n          12 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 17 2 -1.</_>\n        <_>\n          3 3 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 8 -1.</_>\n        <_>\n          5 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 9 -1.</_>\n        <_>\n          14 3 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 9 5 -1.</_>\n        <_>\n          6 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 9 -1.</_>\n        <_>\n          15 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 9 -1.</_>\n        <_>\n          3 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 12 -1.</_>\n        <_>\n          8 12 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 16 4 -1.</_>\n        <_>\n          2 13 8 2 2.</_>\n        <_>\n          10 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 6 -1.</_>\n        <_>\n          6 7 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 6 -1.</_>\n        <_>\n          0 13 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 20 2 -1.</_>\n        <_>\n          0 19 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 17 3 -1.</_>\n        <_>\n          3 2 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 7 -1.</_>\n        <_>\n          8 5 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 14 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_>\n        <_>\n          7 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 9 -1.</_>\n        <_>\n          4 14 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 16 -1.</_>\n        <_>\n          3 2 7 8 2.</_>\n        <_>\n          10 10 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 16 -1.</_>\n        <_>\n          3 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 2 -1.</_>\n        <_>\n          1 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 4 -1.</_>\n        <_>\n          2 12 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          9 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 9 -1.</_>\n        <_>\n          5 6 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 8 12 -1.</_>\n        <_>\n          10 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 3 -1.</_>\n        <_>\n          2 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 9 12 -1.</_>\n        <_>\n          10 10 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 8 -1.</_>\n        <_>\n          4 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 4 12 -1.</_>\n        <_>\n          9 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 18 -1.</_>\n        <_>\n          4 0 3 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 13 2 -1.</_>\n        <_>\n          5 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          10 0 4 6 2.</_>\n        <_>\n          6 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 10 -1.</_>\n        <_>\n          2 1 3 5 2.</_>\n        <_>\n          5 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 15 6 -1.</_>\n        <_>\n          5 7 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 5 9 -1.</_>\n        <_>\n          2 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 6 -1.</_>\n        <_>\n          14 8 5 3 2.</_>\n        <_>\n          9 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 10 -1.</_>\n        <_>\n          5 6 5 5 2.</_>\n        <_>\n          10 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 12 4 -1.</_>\n        <_>\n          7 6 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 16 4 -1.</_>\n        <_>\n          1 10 8 2 2.</_>\n        <_>\n          9 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 17 -1.</_>\n        <_>\n          7 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 4 16 -1.</_>\n        <_>\n          11 4 2 8 2.</_>\n        <_>\n          9 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 20 -1.</_>\n        <_>\n          2 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 13 -1.</_>\n        <_>\n          15 2 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 18 -1.</_>\n        <_>\n          6 1 3 9 2.</_>\n        <_>\n          9 10 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 13 -1.</_>\n        <_>\n          15 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 14 -1.</_>\n        <_>\n          6 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 13 -1.</_>\n        <_>\n          14 2 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 3 -1.</_>\n        <_>\n          7 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 11 8 -1.</_>\n        <_>\n          5 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 7 4 -1.</_>\n        <_>\n          11 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 20 -1.</_>\n        <_>\n          7 0 6 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 9 -1.</_>\n        <_>\n          5 6 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 11 -1.</_>\n        <_>\n          14 3 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 4 10 -1.</_>\n        <_>\n          3 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          8 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 19 -1.</_>\n        <_>\n          6 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 16 -1.</_>\n        <_>\n          8 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 4 12 -1.</_>\n        <_>\n          9 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 12 -1.</_>\n        <_>\n          6 6 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 13 -1.</_>\n        <_>\n          9 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 7 6 -1.</_>\n        <_>\n          0 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 19 3 -1.</_>\n        <_>\n          1 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 14 -1.</_>\n        <_>\n          6 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 10 6 -1.</_>\n        <_>\n          15 3 5 3 2.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 9 12 -1.</_>\n        <_>\n          10 10 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 8 4 -1.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 8 6 -1.</_>\n        <_>\n          11 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 2 -1.</_>\n        <_>\n          2 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          10 14 7 2 2.</_>\n        <_>\n          3 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 9 -1.</_>\n        <_>\n          3 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 13 2 -1.</_>\n        <_>\n          5 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 7 9 -1.</_>\n        <_>\n          3 3 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 5 -1.</_>\n        <_>\n          8 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 7 4 -1.</_>\n        <_>\n          11 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 8 15 -1.</_>\n        <_>\n          2 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 6 -1.</_>\n        <_>\n          10 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 6 -1.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 14 12 -1.</_>\n        <_>\n          0 1 7 6 2.</_>\n        <_>\n          7 7 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 9 -1.</_>\n        <_>\n          10 13 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 9 -1.</_>\n        <_>\n          0 13 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 10 -1.</_>\n        <_>\n          10 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 4 14 -1.</_>\n        <_>\n          9 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 3 -1.</_>\n        <_>\n          8 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 8 4 -1.</_>\n        <_>\n          6 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 11 -1.</_>\n        <_>\n          15 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 18 -1.</_>\n        <_>\n          7 0 2 9 2.</_>\n        <_>\n          9 9 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 8 18 -1.</_>\n        <_>\n          16 2 4 9 2.</_>\n        <_>\n          12 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 18 -1.</_>\n        <_>\n          4 2 6 9 2.</_>\n        <_>\n          10 11 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 6 -1.</_>\n        <_>\n          4 9 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 4 -1.</_>\n        <_>\n          0 9 9 2 2.</_>\n        <_>\n          9 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          11 0 9 2 2.</_>\n        <_>\n          2 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 11 -1.</_>\n        <_>\n          3 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 15 -1.</_>\n        <_>\n          16 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          3 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 15 3 -1.</_>\n        <_>\n          7 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 14 8 -1.</_>\n        <_>\n          3 13 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 6 -1.</_>\n        <_>\n          3 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 8 -1.</_>\n        <_>\n          5 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 8 -1.</_>\n        <_>\n          10 5 10 4 2.</_>\n        <_>\n          0 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 16 8 -1.</_>\n        <_>\n          0 9 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 15 5 -1.</_>\n        <_>\n          7 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 12 -1.</_>\n        <_>\n          10 8 4 6 2.</_>\n        <_>\n          6 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 7 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 8 -1.</_>\n        <_>\n          10 0 10 4 2.</_>\n        <_>\n          0 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 5 9 -1.</_>\n        <_>\n          5 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 4 -1.</_>\n        <_>\n          11 3 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 4 -1.</_>\n        <_>\n          1 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 6 -1.</_>\n        <_>\n          11 10 6 3 2.</_>\n        <_>\n          5 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 4 -1.</_>\n        <_>\n          5 3 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 5 -1.</_>\n        <_>\n          9 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          8 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 10 -1.</_>\n        <_>\n          9 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 6 -1.</_>\n        <_>\n          0 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 8 -1.</_>\n        <_>\n          6 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 6 -1.</_>\n        <_>\n          7 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 8 -1.</_>\n        <_>\n          4 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 6 -1.</_>\n        <_>\n          2 7 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 12 -1.</_>\n        <_>\n          5 7 5 6 2.</_>\n        <_>\n          10 13 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 3 -1.</_>\n        <_>\n          6 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 6 -1.</_>\n        <_>\n          11 10 8 3 2.</_>\n        <_>\n          3 13 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          3 8 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 15 -1.</_>\n        <_>\n          0 10 20 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 9 -1.</_>\n        <_>\n          3 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 5 -1.</_>\n        <_>\n          10 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 5 -1.</_>\n        <_>\n          7 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 9 -1.</_>\n        <_>\n          15 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 7 -1.</_>\n        <_>\n          3 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 12 -1.</_>\n        <_>\n          2 11 12 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 6 -1.</_>\n        <_>\n          3 3 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 18 -1.</_>\n        <_>\n          10 2 5 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 17 -1.</_>\n        <_>\n          5 3 5 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          10 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 13 2 -1.</_>\n        <_>\n          5 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 2 -1.</_>\n        <_>\n          5 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 2 -1.</_>\n        <_>\n          8 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          10 10 4 4 2.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 14 -1.</_>\n        <_>\n          9 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 5 -1.</_>\n        <_>\n          7 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 3 -1.</_>\n        <_>\n          3 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 4 -1.</_>\n        <_>\n          1 2 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 8 -1.</_>\n        <_>\n          3 1 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 9 -1.</_>\n        <_>\n          14 0 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          3 0 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 9 8 -1.</_>\n        <_>\n          4 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 2 -1.</_>\n        <_>\n          2 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 10 3 -1.</_>\n        <_>\n          6 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 12 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 12 -1.</_>\n        <_>\n          3 4 7 6 2.</_>\n        <_>\n          10 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 8 -1.</_>\n        <_>\n          6 10 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 4 -1.</_>\n        <_>\n          0 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 8 -1.</_>\n        <_>\n          16 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 10 -1.</_>\n        <_>\n          3 3 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 6 -1.</_>\n        <_>\n          5 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 4 -1.</_>\n        <_>\n          8 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 15 6 -1.</_>\n        <_>\n          3 17 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 6 -1.</_>\n        <_>\n          11 9 6 3 2.</_>\n        <_>\n          5 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 19 9 -1.</_>\n        <_>\n          1 3 19 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 3 -1.</_>\n        <_>\n          1 12 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 15 5 -1.</_>\n        <_>\n          8 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 6 -1.</_>\n        <_>\n          12 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 3 15 -1.</_>\n        <_>\n          4 10 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 10 9 -1.</_>\n        <_>\n          7 13 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 10 -1.</_>\n        <_>\n          2 6 8 5 2.</_>\n        <_>\n          10 11 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 4 -1.</_>\n        <_>\n          10 9 10 2 2.</_>\n        <_>\n          0 11 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 7 -1.</_>\n        <_>\n          6 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 20 -1.</_>\n        <_>\n          18 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 13 2 -1.</_>\n        <_>\n          3 2 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 18 -1.</_>\n        <_>\n          18 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 5 -1.</_>\n        <_>\n          6 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 15 -1.</_>\n        <_>\n          9 3 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          5 6 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 12 -1.</_>\n        <_>\n          7 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 15 10 -1.</_>\n        <_>\n          5 10 15 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 7 4 -1.</_>\n        <_>\n          4 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 4 -1.</_>\n        <_>\n          8 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 7 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 12 -1.</_>\n        <_>\n          4 6 6 6 2.</_>\n        <_>\n          10 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 10 -1.</_>\n        <_>\n          14 1 3 5 2.</_>\n        <_>\n          11 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 16 12 -1.</_>\n        <_>\n          1 5 8 6 2.</_>\n        <_>\n          9 11 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          4 9 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 10 -1.</_>\n        <_>\n          6 0 3 5 2.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 12 8 -1.</_>\n        <_>\n          13 1 6 4 2.</_>\n        <_>\n          7 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 18 -1.</_>\n        <_>\n          2 1 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 12 10 3 2.</_>\n        <_>\n          10 15 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 15 -1.</_>\n        <_>\n          10 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 12 8 -1.</_>\n        <_>\n          1 1 6 4 2.</_>\n        <_>\n          7 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 5 6 -1.</_>\n        <_>\n          11 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 5 6 -1.</_>\n        <_>\n          4 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 6 -1.</_>\n        <_>\n          4 16 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          2 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 2 -1.</_>\n        <_>\n          2 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 10 -1.</_>\n        <_>\n          10 2 9 5 2.</_>\n        <_>\n          1 7 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 14 -1.</_>\n        <_>\n          10 4 5 7 2.</_>\n        <_>\n          5 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 5 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 8 -1.</_>\n        <_>\n          5 10 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 3 -1.</_>\n        <_>\n          1 14 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 13 -1.</_>\n        <_>\n          1 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 8 -1.</_>\n        <_>\n          8 9 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 20 -1.</_>\n        <_>\n          16 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 20 -1.</_>\n        <_>\n          2 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 19 -1.</_>\n        <_>\n          16 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 4 -1.</_>\n        <_>\n          1 0 8 2 2.</_>\n        <_>\n          9 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 4 14 -1.</_>\n        <_>\n          14 6 2 7 2.</_>\n        <_>\n          12 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 3 -1.</_>\n        <_>\n          2 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 10 -1.</_>\n        <_>\n          11 6 4 5 2.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 20 -1.</_>\n        <_>\n          2 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 3 -1.</_>\n        <_>\n          5 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 14 3 -1.</_>\n        <_>\n          1 18 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 5 9 -1.</_>\n        <_>\n          15 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 10 -1.</_>\n        <_>\n          9 6 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 8 14 -1.</_>\n        <_>\n          5 4 4 7 2.</_>\n        <_>\n          9 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 8 -1.</_>\n        <_>\n          10 6 6 4 2.</_>\n        <_>\n          4 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 6 -1.</_>\n        <_>\n          3 4 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 7 10 -1.</_>\n        <_>\n          10 9 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 10 -1.</_>\n        <_>\n          3 4 7 5 2.</_>\n        <_>\n          10 9 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 3 13 -1.</_>\n        <_>\n          17 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 3 13 -1.</_>\n        <_>\n          2 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 9 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 12 8 -1.</_>\n        <_>\n          13 8 6 4 2.</_>\n        <_>\n          7 12 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 12 8 -1.</_>\n        <_>\n          1 8 6 4 2.</_>\n        <_>\n          7 12 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 10 -1.</_>\n        <_>\n          7 0 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 12 12 -1.</_>\n        <_>\n          4 2 4 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 12 9 -1.</_>\n        <_>\n          12 11 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 9 -1.</_>\n        <_>\n          7 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 3 10 -1.</_>\n        <_>\n          10 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 8 8 -1.</_>\n        <_>\n          13 12 4 4 2.</_>\n        <_>\n          9 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 9 15 -1.</_>\n        <_>\n          13 2 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 9 15 -1.</_>\n        <_>\n          4 1 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 6 -1.</_>\n        <_>\n          5 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 5 8 -1.</_>\n        <_>\n          5 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 5 8 -1.</_>\n        <_>\n          3 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 12 -1.</_>\n        <_>\n          14 1 3 6 2.</_>\n        <_>\n          11 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 8 8 -1.</_>\n        <_>\n          3 12 4 4 2.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 15 -1.</_>\n        <_>\n          15 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 8 -1.</_>\n        <_>\n          2 5 7 4 2.</_>\n        <_>\n          9 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 10 -1.</_>\n        <_>\n          3 1 3 5 2.</_>\n        <_>\n          6 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 19 2 -1.</_>\n        <_>\n          1 3 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 2 -1.</_>\n        <_>\n          7 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          11 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 6 -1.</_>\n        <_>\n          10 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 12 -1.</_>\n        <_>\n          8 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 7 8 -1.</_>\n        <_>\n          12 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 14 -1.</_>\n        <_>\n          3 2 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 7 8 -1.</_>\n        <_>\n          1 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 16 -1.</_>\n        <_>\n          8 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 7 6 -1.</_>\n        <_>\n          11 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 7 4 -1.</_>\n        <_>\n          1 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 17 6 -1.</_>\n        <_>\n          2 4 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 8 4 -1.</_>\n        <_>\n          5 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 8 -1.</_>\n        <_>\n          10 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 8 -1.</_>\n        <_>\n          8 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 14 -1.</_>\n        <_>\n          11 3 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 4 -1.</_>\n        <_>\n          0 11 9 2 2.</_>\n        <_>\n          9 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 12 12 -1.</_>\n        <_>\n          2 7 6 6 2.</_>\n        <_>\n          8 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 13 2 -1.</_>\n        <_>\n          4 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 15 12 -1.</_>\n        <_>\n          0 10 15 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 11 8 -1.</_>\n        <_>\n          5 6 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 13 3 -1.</_>\n        <_>\n          2 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 13 -1.</_>\n        <_>\n          8 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          7 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 13 -1.</_>\n        <_>\n          9 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 13 -1.</_>\n        <_>\n          9 3 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 8 -1.</_>\n        <_>\n          1 2 4 4 2.</_>\n        <_>\n          5 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 12 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 5 -1.</_>\n        <_>\n          8 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 16 -1.</_>\n        <_>\n          0 11 20 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 16 6 -1.</_>\n        <_>\n          0 6 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 5 12 -1.</_>\n        <_>\n          9 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 8 -1.</_>\n        <_>\n          5 10 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 3 -1.</_>\n        <_>\n          2 9 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 3 -1.</_>\n        <_>\n          2 10 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 6 -1.</_>\n        <_>\n          6 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 3 -1.</_>\n        <_>\n          3 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 16 -1.</_>\n        <_>\n          1 4 3 8 2.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 19 6 -1.</_>\n        <_>\n          1 16 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          7 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 12 4 -1.</_>\n        <_>\n          9 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 4 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 6 -1.</_>\n        <_>\n          6 7 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 10 -1.</_>\n        <_>\n          6 0 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          5 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 2 -1.</_>\n        <_>\n          4 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 7 -1.</_>\n        <_>\n          16 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 5 10 -1.</_>\n        <_>\n          5 9 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 5 10 -1.</_>\n        <_>\n          8 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 9 -1.</_>\n        <_>\n          16 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 9 -1.</_>\n        <_>\n          2 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 19 3 -1.</_>\n        <_>\n          1 2 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 14 -1.</_>\n        <_>\n          8 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 11 -1.</_>\n        <_>\n          13 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 9 -1.</_>\n        <_>\n          0 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 8 -1.</_>\n        <_>\n          13 2 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 8 -1.</_>\n        <_>\n          4 2 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          0 2 10 3 2.</_>\n        <_>\n          10 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 13 -1.</_>\n        <_>\n          6 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 10 -1.</_>\n        <_>\n          0 6 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 13 -1.</_>\n        <_>\n          8 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 16 -1.</_>\n        <_>\n          11 0 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 6 -1.</_>\n        <_>\n          10 13 10 3 2.</_>\n        <_>\n          0 16 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 13 -1.</_>\n        <_>\n          2 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 15 10 -1.</_>\n        <_>\n          5 15 15 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 15 10 -1.</_>\n        <_>\n          0 15 15 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 16 -1.</_>\n        <_>\n          8 0 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 9 4 -1.</_>\n        <_>\n          6 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 2 -1.</_>\n        <_>\n          1 4 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 13 8 -1.</_>\n        <_>\n          6 9 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 11 6 -1.</_>\n        <_>\n          4 2 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 4 -1.</_>\n        <_>\n          10 9 9 2 2.</_>\n        <_>\n          1 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 4 -1.</_>\n        <_>\n          9 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 12 4 -1.</_>\n        <_>\n          7 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 8 -1.</_>\n        <_>\n          5 7 4 4 2.</_>\n        <_>\n          9 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 3 -1.</_>\n        <_>\n          10 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          10 0 10 2 2.</_>\n        <_>\n          0 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 3 -1.</_>\n        <_>\n          3 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 4 7 -1.</_>\n        <_>\n          11 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 7 -1.</_>\n        <_>\n          7 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 2 -1.</_>\n        <_>\n          1 17 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 14 3 -1.</_>\n        <_>\n          0 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 13 3 -1.</_>\n        <_>\n          3 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 10 -1.</_>\n        <_>\n          8 10 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 2 -1.</_>\n        <_>\n          0 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 14 4 -1.</_>\n        <_>\n          12 7 7 2 2.</_>\n        <_>\n          5 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 14 4 -1.</_>\n        <_>\n          1 7 7 2 2.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 9 9 -1.</_>\n        <_>\n          12 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 15 2 -1.</_>\n        <_>\n          0 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 9 18 -1.</_>\n        <_>\n          4 9 9 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 5 -1.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 5 10 -1.</_>\n        <_>\n          9 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 8 -1.</_>\n        <_>\n          3 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 10 -1.</_>\n        <_>\n          12 7 3 5 2.</_>\n        <_>\n          9 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 9 10 -1.</_>\n        <_>\n          4 5 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 16 -1.</_>\n        <_>\n          9 2 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 16 -1.</_>\n        <_>\n          8 2 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 10 -1.</_>\n        <_>\n          5 15 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 10 -1.</_>\n        <_>\n          5 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 8 8 -1.</_>\n        <_>\n          15 2 4 4 2.</_>\n        <_>\n          11 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 10 -1.</_>\n        <_>\n          3 2 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 13 8 -1.</_>\n        <_>\n          4 14 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 4 -1.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 8 -1.</_>\n        <_>\n          1 2 4 4 2.</_>\n        <_>\n          5 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          4 9 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 10 -1.</_>\n        <_>\n          4 5 6 5 2.</_>\n        <_>\n          10 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 8 8 -1.</_>\n        <_>\n          12 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 5 6 -1.</_>\n        <_>\n          3 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 8 -1.</_>\n        <_>\n          9 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 2 -1.</_>\n        <_>\n          3 2 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 18 -1.</_>\n        <_>\n          14 1 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 15 -1.</_>\n        <_>\n          5 1 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 4 -1.</_>\n        <_>\n          0 14 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          0 8 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 8 -1.</_>\n        <_>\n          5 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 10 -1.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 11 -1.</_>\n        <_>\n          8 9 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 20 -1.</_>\n        <_>\n          7 0 6 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 17 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 13 2 -1.</_>\n        <_>\n          5 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 8 -1.</_>\n        <_>\n          5 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 9 6 -1.</_>\n        <_>\n          10 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 6 -1.</_>\n        <_>\n          1 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 2 -1.</_>\n        <_>\n          3 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 3 -1.</_>\n        <_>\n          4 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 17 2 -1.</_>\n        <_>\n          0 11 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 12 -1.</_>\n        <_>\n          11 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 16 4 -1.</_>\n        <_>\n          0 10 8 2 2.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          3 14 7 2 2.</_>\n        <_>\n          10 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 3 -1.</_>\n        <_>\n          6 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 3 -1.</_>\n        <_>\n          7 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 8 -1.</_>\n        <_>\n          10 8 5 4 2.</_>\n        <_>\n          5 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 7 -1.</_>\n        <_>\n          7 2 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 6 -1.</_>\n        <_>\n          12 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 7 -1.</_>\n        <_>\n          3 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 2 -1.</_>\n        <_>\n          4 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 7 9 -1.</_>\n        <_>\n          0 9 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 14 -1.</_>\n        <_>\n          10 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 6 -1.</_>\n        <_>\n          13 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 5 -1.</_>\n        <_>\n          6 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 6 10 -1.</_>\n        <_>\n          15 10 3 5 2.</_>\n        <_>\n          12 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 6 -1.</_>\n        <_>\n          4 5 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 4 -1.</_>\n        <_>\n          0 2 9 2 2.</_>\n        <_>\n          9 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 10 -1.</_>\n        <_>\n          9 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 5 -1.</_>\n        <_>\n          6 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 10 -1.</_>\n        <_>\n          13 10 3 5 2.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 10 -1.</_>\n        <_>\n          4 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 10 -1.</_>\n        <_>\n          10 0 4 5 2.</_>\n        <_>\n          6 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 14 -1.</_>\n        <_>\n          9 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 10 -1.</_>\n        <_>\n          15 1 3 5 2.</_>\n        <_>\n          12 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 9 18 -1.</_>\n        <_>\n          11 10 9 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 10 -1.</_>\n        <_>\n          2 1 3 5 2.</_>\n        <_>\n          5 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 16 4 -1.</_>\n        <_>\n          12 10 8 2 2.</_>\n        <_>\n          4 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 4 -1.</_>\n        <_>\n          0 10 9 2 2.</_>\n        <_>\n          9 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 10 -1.</_>\n        <_>\n          0 4 9 5 2.</_>\n        <_>\n          9 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 2 -1.</_>\n        <_>\n          2 12 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 5 9 -1.</_>\n        <_>\n          4 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 8 -1.</_>\n        <_>\n          12 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 13 2 -1.</_>\n        <_>\n          1 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 8 -1.</_>\n        <_>\n          12 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 8 -1.</_>\n        <_>\n          6 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 8 -1.</_>\n        <_>\n          12 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 13 3 -1.</_>\n        <_>\n          3 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 11 6 -1.</_>\n        <_>\n          5 14 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 8 -1.</_>\n        <_>\n          3 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 16 3 -1.</_>\n        <_>\n          0 2 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 10 -1.</_>\n        <_>\n          8 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 12 -1.</_>\n        <_>\n          7 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 17 2 -1.</_>\n        <_>\n          1 3 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 18 -1.</_>\n        <_>\n          12 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 6 -1.</_>\n        <_>\n          0 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 14 -1.</_>\n        <_>\n          0 6 3 7 2.</_>\n        <_>\n          3 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 6 -1.</_>\n        <_>\n          12 13 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 12 4 -1.</_>\n        <_>\n          6 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 8 -1.</_>\n        <_>\n          5 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 16 4 -1.</_>\n        <_>\n          11 11 8 2 2.</_>\n        <_>\n          3 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 8 -1.</_>\n        <_>\n          16 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 18 -1.</_>\n        <_>\n          7 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 8 -1.</_>\n        <_>\n          16 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 4 -1.</_>\n        <_>\n          8 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 3 -1.</_>\n        <_>\n          4 1 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 8 -1.</_>\n        <_>\n          2 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 12 -1.</_>\n        <_>\n          9 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 6 -1.</_>\n        <_>\n          0 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 10 -1.</_>\n        <_>\n          4 15 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 16 -1.</_>\n        <_>\n          10 4 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 16 -1.</_>\n        <_>\n          8 4 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 2 -1.</_>\n        <_>\n          7 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 2 -1.</_>\n        <_>\n          0 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 5 -1.</_>\n        <_>\n          11 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 9 5 -1.</_>\n        <_>\n          6 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 10 -1.</_>\n        <_>\n          14 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 17 6 -1.</_>\n        <_>\n          1 7 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 10 -1.</_>\n        <_>\n          14 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 14 3 -1.</_>\n        <_>\n          0 18 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 10 -1.</_>\n        <_>\n          14 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 10 -1.</_>\n        <_>\n          3 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 6 13 -1.</_>\n        <_>\n          4 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 15 -1.</_>\n        <_>\n          14 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 15 -1.</_>\n        <_>\n          5 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 15 5 -1.</_>\n        <_>\n          8 2 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 14 -1.</_>\n        <_>\n          5 11 9 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 12 -1.</_>\n        <_>\n          4 6 5 6 2.</_>\n        <_>\n          9 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 10 -1.</_>\n        <_>\n          11 5 6 5 2.</_>\n        <_>\n          5 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 10 -1.</_>\n        <_>\n          3 5 6 5 2.</_>\n        <_>\n          9 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 12 -1.</_>\n        <_>\n          16 0 4 6 2.</_>\n        <_>\n          12 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          10 2 10 2 2.</_>\n        <_>\n          0 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 8 -1.</_>\n        <_>\n          8 6 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 20 -1.</_>\n        <_>\n          11 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 20 -1.</_>\n        <_>\n          8 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          10 15 10 2 2.</_>\n        <_>\n          0 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 13 -1.</_>\n        <_>\n          3 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 7 6 -1.</_>\n        <_>\n          7 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 15 14 -1.</_>\n        <_>\n          0 9 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 8 -1.</_>\n        <_>\n          12 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          4 16 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 4 -1.</_>\n        <_>\n          10 13 9 2 2.</_>\n        <_>\n          1 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 11 4 -1.</_>\n        <_>\n          5 9 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 14 -1.</_>\n        <_>\n          14 6 3 7 2.</_>\n        <_>\n          11 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          3 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 6 12 -1.</_>\n        <_>\n          3 7 3 6 2.</_>\n        <_>\n          6 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 3 -1.</_>\n        <_>\n          7 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 3 -1.</_>\n        <_>\n          8 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 9 -1.</_>\n        <_>\n          3 3 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 4 -1.</_>\n        <_>\n          10 1 7 2 2.</_>\n        <_>\n          3 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 10 10 -1.</_>\n        <_>\n          11 9 5 5 2.</_>\n        <_>\n          6 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 10 10 -1.</_>\n        <_>\n          4 9 5 5 2.</_>\n        <_>\n          9 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 6 -1.</_>\n        <_>\n          5 9 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 7 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 3 -1.</_>\n        <_>\n          3 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 7 10 -1.</_>\n        <_>\n          6 12 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 19 -1.</_>\n        <_>\n          10 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          9 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 13 -1.</_>\n        <_>\n          12 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 8 -1.</_>\n        <_>\n          5 9 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 4 -1.</_>\n        <_>\n          1 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 11 8 -1.</_>\n        <_>\n          7 16 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 13 -1.</_>\n        <_>\n          7 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 15 8 2 2.</_>\n        <_>\n          10 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 6 -1.</_>\n        <_>\n          10 1 9 3 2.</_>\n        <_>\n          1 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 6 -1.</_>\n        <_>\n          3 3 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 7 -1.</_>\n        <_>\n          8 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 13 12 -1.</_>\n        <_>\n          4 6 13 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 13 3 -1.</_>\n        <_>\n          3 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 6 -1.</_>\n        <_>\n          10 10 5 3 2.</_>\n        <_>\n          5 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 12 -1.</_>\n        <_>\n          3 5 6 6 2.</_>\n        <_>\n          9 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 8 -1.</_>\n        <_>\n          1 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          2 2 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 6 6 -1.</_>\n        <_>\n          7 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 4 -1.</_>\n        <_>\n          1 14 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 14 -1.</_>\n        <_>\n          0 8 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 6 -1.</_>\n        <_>\n          11 12 9 3 2.</_>\n        <_>\n          2 15 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 13 -1.</_>\n        <_>\n          7 2 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 7 6 -1.</_>\n        <_>\n          13 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 10 -1.</_>\n        <_>\n          2 5 8 5 2.</_>\n        <_>\n          10 10 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 7 -1.</_>\n        <_>\n          16 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 4 -1.</_>\n        <_>\n          13 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 4 -1.</_>\n        <_>\n          0 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 17 6 -1.</_>\n        <_>\n          2 16 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 5 12 -1.</_>\n        <_>\n          7 11 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          8 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          7 10 3 5 2.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 15 3 -1.</_>\n        <_>\n          0 14 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 5 8 -1.</_>\n        <_>\n          13 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 6 -1.</_>\n        <_>\n          0 12 9 3 2.</_>\n        <_>\n          9 15 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 6 10 -1.</_>\n        <_>\n          15 10 3 5 2.</_>\n        <_>\n          12 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          9 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 3 -1.</_>\n        <_>\n          10 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 3 -1.</_>\n        <_>\n          2 6 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 12 12 -1.</_>\n        <_>\n          8 8 6 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 6 -1.</_>\n        <_>\n          6 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 5 12 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 8 -1.</_>\n        <_>\n          6 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 12 -1.</_>\n        <_>\n          14 0 3 6 2.</_>\n        <_>\n          11 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 12 -1.</_>\n        <_>\n          3 0 3 6 2.</_>\n        <_>\n          6 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          5 9 5 4 2.</_>\n        <_>\n          10 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 13 3 -1.</_>\n        <_>\n          4 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 4 7 -1.</_>\n        <_>\n          14 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 7 -1.</_>\n        <_>\n          4 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 14 6 -1.</_>\n        <_>\n          13 5 7 3 2.</_>\n        <_>\n          6 8 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 16 6 -1.</_>\n        <_>\n          0 6 8 3 2.</_>\n        <_>\n          8 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 9 -1.</_>\n        <_>\n          12 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 9 8 -1.</_>\n        <_>\n          1 10 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 14 -1.</_>\n        <_>\n          9 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 19 2 -1.</_>\n        <_>\n          1 3 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 13 -1.</_>\n        <_>\n          2 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          16 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          2 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 9 -1.</_>\n        <_>\n          0 14 20 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 10 -1.</_>\n        <_>\n          11 3 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 9 -1.</_>\n        <_>\n          7 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 8 -1.</_>\n        <_>\n          10 0 9 4 2.</_>\n        <_>\n          1 4 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 14 2 -1.</_>\n        <_>\n          3 19 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 16 -1.</_>\n        <_>\n          0 4 3 8 2.</_>\n        <_>\n          3 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 13 -1.</_>\n        <_>\n          14 6 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 12 -1.</_>\n        <_>\n          6 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 5 6 -1.</_>\n        <_>\n          11 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 4 -1.</_>\n        <_>\n          6 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 7 -1.</_>\n        <_>\n          8 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 10 -1.</_>\n        <_>\n          12 0 3 5 2.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 4 10 -1.</_>\n        <_>\n          15 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 10 -1.</_>\n        <_>\n          3 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 16 -1.</_>\n        <_>\n          10 0 5 8 2.</_>\n        <_>\n          5 8 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 3 -1.</_>\n        <_>\n          3 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 12 -1.</_>\n        <_>\n          4 10 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 9 6 -1.</_>\n        <_>\n          8 16 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 6 -1.</_>\n        <_>\n          0 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 3 -1.</_>\n        <_>\n          4 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 12 -1.</_>\n        <_>\n          6 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 13 3 -1.</_>\n        <_>\n          4 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 14 -1.</_>\n        <_>\n          11 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 4 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 7 -1.</_>\n        <_>\n          8 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 9 -1.</_>\n        <_>\n          2 14 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 7 -1.</_>\n        <_>\n          2 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 16 4 -1.</_>\n        <_>\n          0 10 8 2 2.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 2 -1.</_>\n        <_>\n          3 2 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 5 9 -1.</_>\n        <_>\n          4 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 16 4 -1.</_>\n        <_>\n          10 14 8 2 2.</_>\n        <_>\n          2 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 8 -1.</_>\n        <_>\n          0 4 19 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 5 -1.</_>\n        <_>\n          10 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 15 -1.</_>\n        <_>\n          7 1 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 5 -1.</_>\n        <_>\n          10 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 8 -1.</_>\n        <_>\n          6 7 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 14 -1.</_>\n        <_>\n          18 3 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 12 -1.</_>\n        <_>\n          4 6 6 6 2.</_>\n        <_>\n          10 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 14 -1.</_>\n        <_>\n          16 6 4 7 2.</_>\n        <_>\n          12 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 14 -1.</_>\n        <_>\n          0 6 4 7 2.</_>\n        <_>\n          4 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 16 -1.</_>\n        <_>\n          2 4 3 8 2.</_>\n        <_>\n          5 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 5 9 -1.</_>\n        <_>\n          14 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 3 -1.</_>\n        <_>\n          3 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 16 -1.</_>\n        <_>\n          5 1 3 8 2.</_>\n        <_>\n          8 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 10 -1.</_>\n        <_>\n          9 7 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 11 -1.</_>\n        <_>\n          7 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 6 -1.</_>\n        <_>\n          10 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 14 -1.</_>\n        <_>\n          1 3 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 6 -1.</_>\n        <_>\n          10 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 8 -1.</_>\n        <_>\n          2 9 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 10 -1.</_>\n        <_>\n          6 7 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 8 12 -1.</_>\n        <_>\n          12 3 4 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 8 12 -1.</_>\n        <_>\n          4 3 4 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 4 -1.</_>\n        <_>\n          11 11 9 2 2.</_>\n        <_>\n          2 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 4 -1.</_>\n        <_>\n          0 11 9 2 2.</_>\n        <_>\n          9 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 9 12 -1.</_>\n        <_>\n          4 7 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 4 -1.</_>\n        <_>\n          6 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 7 6 -1.</_>\n        <_>\n          0 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 13 -1.</_>\n        <_>\n          7 2 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          0 8 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 5 -1.</_>\n        <_>\n          14 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 6 -1.</_>\n        <_>\n          0 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 9 5 -1.</_>\n        <_>\n          9 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 8 8 -1.</_>\n        <_>\n          3 12 4 4 2.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          9 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 9 -1.</_>\n        <_>\n          3 4 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 15 -1.</_>\n        <_>\n          6 6 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 3 -1.</_>\n        <_>\n          6 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 8 -1.</_>\n        <_>\n          6 10 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 2 -1.</_>\n        <_>\n          2 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 16 2 -1.</_>\n        <_>\n          1 4 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 13 3 -1.</_>\n        <_>\n          5 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 17 3 -1.</_>\n        <_>\n          2 9 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 6 -1.</_>\n        <_>\n          1 1 9 3 2.</_>\n        <_>\n          10 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 19 6 -1.</_>\n        <_>\n          1 3 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 6 -1.</_>\n        <_>\n          4 6 6 3 2.</_>\n        <_>\n          10 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 13 2 -1.</_>\n        <_>\n          3 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 8 6 -1.</_>\n        <_>\n          10 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          0 0 9 2 2.</_>\n        <_>\n          9 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 15 5 -1.</_>\n        <_>\n          9 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 15 4 -1.</_>\n        <_>\n          5 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 10 -1.</_>\n        <_>\n          12 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 12 -1.</_>\n        <_>\n          0 6 9 6 2.</_>\n        <_>\n          9 12 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 2 14 -1.</_>\n        <_>\n          16 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 5 6 -1.</_>\n        <_>\n          2 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 19 -1.</_>\n        <_>\n          13 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 9 6 -1.</_>\n        <_>\n          0 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 7 -1.</_>\n        <_>\n          7 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 19 -1.</_>\n        <_>\n          13 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 4 -1.</_>\n        <_>\n          0 15 7 2 2.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 14 6 -1.</_>\n        <_>\n          4 7 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 7 -1.</_>\n        <_>\n          5 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          0 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 5 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 5 -1.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 10 -1.</_>\n        <_>\n          5 8 5 5 2.</_>\n        <_>\n          10 13 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 10 -1.</_>\n        <_>\n          10 5 9 5 2.</_>\n        <_>\n          1 10 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 5 14 -1.</_>\n        <_>\n          4 10 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 6 -1.</_>\n        <_>\n          7 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 3 -1.</_>\n        <_>\n          0 1 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 6 -1.</_>\n        <_>\n          8 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 11 -1.</_>\n        <_>\n          9 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 10 -1.</_>\n        <_>\n          8 3 4 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 4 -1.</_>\n        <_>\n          0 6 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 14 -1.</_>\n        <_>\n          12 4 2 7 2.</_>\n        <_>\n          10 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 14 -1.</_>\n        <_>\n          12 4 2 7 2.</_>\n        <_>\n          10 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 14 -1.</_>\n        <_>\n          6 4 2 7 2.</_>\n        <_>\n          8 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 7 -1.</_>\n        <_>\n          16 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 4 -1.</_>\n        <_>\n          6 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 15 -1.</_>\n        <_>\n          7 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 3 17 -1.</_>\n        <_>\n          13 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 17 -1.</_>\n        <_>\n          6 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 13 -1.</_>\n        <_>\n          10 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 14 -1.</_>\n        <_>\n          10 3 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 4 -1.</_>\n        <_>\n          10 5 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 6 -1.</_>\n        <_>\n          13 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 19 2 -1.</_>\n        <_>\n          0 3 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 11 -1.</_>\n        <_>\n          10 9 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 9 -1.</_>\n        <_>\n          8 0 5 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 2 -1.</_>\n        <_>\n          3 5 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 7 -1.</_>\n        <_>\n          2 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 11 -1.</_>\n        <_>\n          10 9 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 6 7 -1.</_>\n        <_>\n          5 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 3 -1.</_>\n        <_>\n          8 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 8 -1.</_>\n        <_>\n          0 1 4 4 2.</_>\n        <_>\n          4 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 4 -1.</_>\n        <_>\n          9 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 6 -1.</_>\n        <_>\n          6 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 9 -1.</_>\n        <_>\n          4 6 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 10 -1.</_>\n        <_>\n          8 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 17 2 -1.</_>\n        <_>\n          0 4 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 6 -1.</_>\n        <_>\n          12 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 8 -1.</_>\n        <_>\n          5 6 4 4 2.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 6 -1.</_>\n        <_>\n          9 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 5 9 -1.</_>\n        <_>\n          13 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 5 9 -1.</_>\n        <_>\n          2 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 5 -1.</_>\n        <_>\n          14 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 11 -1.</_>\n        <_>\n          8 6 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 5 -1.</_>\n        <_>\n          14 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 6 -1.</_>\n        <_>\n          0 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 14 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 8 -1.</_>\n        <_>\n          12 15 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 7 -1.</_>\n        <_>\n          8 0 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 2 -1.</_>\n        <_>\n          5 16 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 12 10 3 2.</_>\n        <_>\n          10 15 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 12 -1.</_>\n        <_>\n          10 6 5 6 2.</_>\n        <_>\n          5 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 15 4 -1.</_>\n        <_>\n          1 17 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 9 6 -1.</_>\n        <_>\n          10 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 10 6 -1.</_>\n        <_>\n          10 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 12 4 -1.</_>\n        <_>\n          12 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 17 -1.</_>\n        <_>\n          2 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 3 -1.</_>\n        <_>\n          5 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 12 -1.</_>\n        <_>\n          6 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 5 -1.</_>\n        <_>\n          14 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 5 -1.</_>\n        <_>\n          3 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 16 -1.</_>\n        <_>\n          7 3 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 11 10 -1.</_>\n        <_>\n          4 9 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 13 3 -1.</_>\n        <_>\n          6 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 8 10 -1.</_>\n        <_>\n          3 4 4 5 2.</_>\n        <_>\n          7 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 6 -1.</_>\n        <_>\n          1 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 9 -1.</_>\n        <_>\n          0 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 4 14 -1.</_>\n        <_>\n          16 6 2 7 2.</_>\n        <_>\n          14 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 12 -1.</_>\n        <_>\n          2 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 7 -1.</_>\n        <_>\n          6 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 11 -1.</_>\n        <_>\n          5 9 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 12 -1.</_>\n        <_>\n          5 14 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 7 -1.</_>\n        <_>\n          3 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 3 -1.</_>\n        <_>\n          0 8 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 14 -1.</_>\n        <_>\n          0 6 3 7 2.</_>\n        <_>\n          3 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 11 12 -1.</_>\n        <_>\n          2 7 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 8 8 -1.</_>\n        <_>\n          1 5 4 4 2.</_>\n        <_>\n          5 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 16 -1.</_>\n        <_>\n          18 4 2 8 2.</_>\n        <_>\n          16 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 7 -1.</_>\n        <_>\n          8 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 14 -1.</_>\n        <_>\n          11 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 13 -1.</_>\n        <_>\n          11 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 13 -1.</_>\n        <_>\n          8 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 6 -1.</_>\n        <_>\n          10 14 5 3 2.</_>\n        <_>\n          5 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 4 -1.</_>\n        <_>\n          6 10 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 8 6 -1.</_>\n        <_>\n          11 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 8 6 -1.</_>\n        <_>\n          1 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 12 6 -1.</_>\n        <_>\n          2 2 6 3 2.</_>\n        <_>\n          8 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 16 -1.</_>\n        <_>\n          18 4 2 8 2.</_>\n        <_>\n          16 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 5 12 -1.</_>\n        <_>\n          0 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 9 6 -1.</_>\n        <_>\n          10 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          5 2 3 5 2.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 8 -1.</_>\n        <_>\n          8 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 14 -1.</_>\n        <_>\n          11 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 14 -1.</_>\n        <_>\n          7 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 17 -1.</_>\n        <_>\n          8 3 6 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 4 -1.</_>\n        <_>\n          9 6 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 16 -1.</_>\n        <_>\n          18 4 2 8 2.</_>\n        <_>\n          16 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 12 14 -1.</_>\n        <_>\n          6 6 6 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 8 10 -1.</_>\n        <_>\n          12 9 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 8 10 -1.</_>\n        <_>\n          4 9 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 18 -1.</_>\n        <_>\n          13 2 3 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 18 -1.</_>\n        <_>\n          4 2 3 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 9 -1.</_>\n        <_>\n          0 9 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 3 -1.</_>\n        <_>\n          5 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 19 15 -1.</_>\n        <_>\n          0 8 19 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 9 6 -1.</_>\n        <_>\n          10 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 9 6 -1.</_>\n        <_>\n          1 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 16 -1.</_>\n        <_>\n          0 4 2 8 2.</_>\n        <_>\n          2 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 5 6 -1.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 8 -1.</_>\n        <_>\n          0 14 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 7 -1.</_>\n        <_>\n          16 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          2 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 19 -1.</_>\n        <_>\n          14 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 4 -1.</_>\n        <_>\n          4 2 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 6 -1.</_>\n        <_>\n          12 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 7 6 -1.</_>\n        <_>\n          6 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 5 6 -1.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 9 -1.</_>\n        <_>\n          3 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 14 -1.</_>\n        <_>\n          15 5 2 7 2.</_>\n        <_>\n          13 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 10 9 -1.</_>\n        <_>\n          3 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 18 4 -1.</_>\n        <_>\n          2 17 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 8 6 -1.</_>\n        <_>\n          0 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 14 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 8 -1.</_>\n        <_>\n          3 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 3 -1.</_>\n        <_>\n          9 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 9 6 -1.</_>\n        <_>\n          4 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 14 -1.</_>\n        <_>\n          10 0 8 7 2.</_>\n        <_>\n          2 7 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 18 -1.</_>\n        <_>\n          3 9 14 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 10 -1.</_>\n        <_>\n          12 7 3 5 2.</_>\n        <_>\n          9 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 16 -1.</_>\n        <_>\n          3 4 2 8 2.</_>\n        <_>\n          5 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 8 6 -1.</_>\n        <_>\n          12 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 10 -1.</_>\n        <_>\n          7 0 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 15 -1.</_>\n        <_>\n          13 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 15 -1.</_>\n        <_>\n          4 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 5 -1.</_>\n        <_>\n          14 3 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 7 -1.</_>\n        <_>\n          14 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 7 -1.</_>\n        <_>\n          3 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 8 -1.</_>\n        <_>\n          15 6 4 4 2.</_>\n        <_>\n          11 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 13 3 -1.</_>\n        <_>\n          5 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 15 3 -1.</_>\n        <_>\n          0 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 4 12 -1.</_>\n        <_>\n          11 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 13 3 -1.</_>\n        <_>\n          2 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 2 -1.</_>\n        <_>\n          2 2 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 10 -1.</_>\n        <_>\n          5 6 4 5 2.</_>\n        <_>\n          9 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 10 12 -1.</_>\n        <_>\n          13 8 5 6 2.</_>\n        <_>\n          8 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 6 -1.</_>\n        <_>\n          3 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 8 -1.</_>\n        <_>\n          10 5 9 4 2.</_>\n        <_>\n          1 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 7 -1.</_>\n        <_>\n          7 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          7 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 8 14 -1.</_>\n        <_>\n          2 6 4 7 2.</_>\n        <_>\n          6 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 4 9 -1.</_>\n        <_>\n          8 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 13 -1.</_>\n        <_>\n          10 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 13 2 -1.</_>\n        <_>\n          0 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 16 -1.</_>\n        <_>\n          7 11 13 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 9 -1.</_>\n        <_>\n          0 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 7 6 -1.</_>\n        <_>\n          11 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 4 -1.</_>\n        <_>\n          1 1 8 2 2.</_>\n        <_>\n          9 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          10 2 10 3 2.</_>\n        <_>\n          0 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 19 10 -1.</_>\n        <_>\n          0 9 19 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 15 5 -1.</_>\n        <_>\n          9 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 9 8 -1.</_>\n        <_>\n          1 16 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 3 -1.</_>\n        <_>\n          3 6 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 11 7 2 2.</_>\n        <_>\n          10 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          10 11 7 2 2.</_>\n        <_>\n          3 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 6 -1.</_>\n        <_>\n          2 7 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 9 4 -1.</_>\n        <_>\n          11 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 6 -1.</_>\n        <_>\n          1 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 20 4 -1.</_>\n        <_>\n          0 18 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 6 -1.</_>\n        <_>\n          0 14 6 3 2.</_>\n        <_>\n          6 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 15 5 -1.</_>\n        <_>\n          9 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 15 5 -1.</_>\n        <_>\n          6 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 6 9 -1.</_>\n        <_>\n          11 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 8 -1.</_>\n        <_>\n          7 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 13 3 -1.</_>\n        <_>\n          5 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 14 3 -1.</_>\n        <_>\n          5 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 5 -1.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 5 -1.</_>\n        <_>\n          12 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 2 -1.</_>\n        <_>\n          4 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          6 13 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 10 -1.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 20 -1.</_>\n        <_>\n          10 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 6 6 -1.</_>\n        <_>\n          13 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 4 -1.</_>\n        <_>\n          9 2 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 13 -1.</_>\n        <_>\n          7 4 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 12 -1.</_>\n        <_>\n          13 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 12 3 -1.</_>\n        <_>\n          6 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 12 -1.</_>\n        <_>\n          13 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 12 -1.</_>\n        <_>\n          5 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 13 3 -1.</_>\n        <_>\n          7 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 4 -1.</_>\n        <_>\n          0 2 9 2 2.</_>\n        <_>\n          9 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 5 -1.</_>\n        <_>\n          12 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 10 6 -1.</_>\n        <_>\n          9 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 3 -1.</_>\n        <_>\n          3 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 5 -1.</_>\n        <_>\n          12 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 5 -1.</_>\n        <_>\n          4 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 7 4 -1.</_>\n        <_>\n          11 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 9 5 -1.</_>\n        <_>\n          7 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          5 5 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 14 -1.</_>\n        <_>\n          8 11 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 9 6 -1.</_>\n        <_>\n          1 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 12 -1.</_>\n        <_>\n          10 4 10 6 2.</_>\n        <_>\n          0 10 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 7 4 -1.</_>\n        <_>\n          5 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 12 -1.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 2 -1.</_>\n        <_>\n          3 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 13 -1.</_>\n        <_>\n          9 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 16 12 -1.</_>\n        <_>\n          11 4 8 6 2.</_>\n        <_>\n          3 10 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 16 12 -1.</_>\n        <_>\n          1 4 8 6 2.</_>\n        <_>\n          9 10 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          7 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 9 -1.</_>\n        <_>\n          3 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 13 2 -1.</_>\n        <_>\n          3 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 16 4 -1.</_>\n        <_>\n          12 10 8 2 2.</_>\n        <_>\n          4 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 6 -1.</_>\n        <_>\n          12 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 11 -1.</_>\n        <_>\n          2 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 9 -1.</_>\n        <_>\n          14 0 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          3 0 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 10 -1.</_>\n        <_>\n          5 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 8 -1.</_>\n        <_>\n          10 5 9 4 2.</_>\n        <_>\n          1 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 10 6 -1.</_>\n        <_>\n          4 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          10 0 4 6 2.</_>\n        <_>\n          6 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          7 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 10 -1.</_>\n        <_>\n          12 4 3 5 2.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 19 3 -1.</_>\n        <_>\n          0 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 3 -1.</_>\n        <_>\n          1 11 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 13 -1.</_>\n        <_>\n          6 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 9 -1.</_>\n        <_>\n          12 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 20 -1.</_>\n        <_>\n          6 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 14 -1.</_>\n        <_>\n          2 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 4 -1.</_>\n        <_>\n          10 1 10 2 2.</_>\n        <_>\n          0 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 12 -1.</_>\n        <_>\n          2 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 6 -1.</_>\n        <_>\n          11 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 8 -1.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 13 3 -1.</_>\n        <_>\n          0 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 14 -1.</_>\n        <_>\n          4 5 2 7 2.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 6 -1.</_>\n        <_>\n          11 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 6 -1.</_>\n        <_>\n          6 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 7 -1.</_>\n        <_>\n          7 0 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 14 9 -1.</_>\n        <_>\n          2 9 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 4 -1.</_>\n        <_>\n          10 14 9 2 2.</_>\n        <_>\n          1 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 6 -1.</_>\n        <_>\n          7 8 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 8 -1.</_>\n        <_>\n          0 1 4 4 2.</_>\n        <_>\n          4 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 8 4 -1.</_>\n        <_>\n          7 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          10 12 7 2 2.</_>\n        <_>\n          3 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 8 5 -1.</_>\n        <_>\n          8 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 7 -1.</_>\n        <_>\n          7 2 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 12 -1.</_>\n        <_>\n          7 7 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 10 -1.</_>\n        <_>\n          4 5 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 6 -1.</_>\n        <_>\n          0 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 2 14 -1.</_>\n        <_>\n          12 2 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 4 -1.</_>\n        <_>\n          0 15 7 2 2.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 14 -1.</_>\n        <_>\n          7 2 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 9 -1.</_>\n        <_>\n          12 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 9 -1.</_>\n        <_>\n          4 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 12 18 -1.</_>\n        <_>\n          11 1 4 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 12 18 -1.</_>\n        <_>\n          5 1 4 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          8 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 6 -1.</_>\n        <_>\n          6 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 13 8 -1.</_>\n        <_>\n          5 9 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 14 2 -1.</_>\n        <_>\n          1 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 9 -1.</_>\n        <_>\n          0 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          7 5 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 12 -1.</_>\n        <_>\n          2 5 6 6 2.</_>\n        <_>\n          8 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 10 -1.</_>\n        <_>\n          5 7 5 5 2.</_>\n        <_>\n          10 12 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 16 3 -1.</_>\n        <_>\n          2 15 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 4 -1.</_>\n        <_>\n          0 13 9 2 2.</_>\n        <_>\n          9 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 2 -1.</_>\n        <_>\n          1 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 16 -1.</_>\n        <_>\n          0 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 5 15 -1.</_>\n        <_>\n          13 10 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 9 6 -1.</_>\n        <_>\n          11 13 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 9 6 -1.</_>\n        <_>\n          0 13 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 4 -1.</_>\n        <_>\n          1 3 9 2 2.</_>\n        <_>\n          10 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 7 -1.</_>\n        <_>\n          7 6 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 19 -1.</_>\n        <_>\n          7 1 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 20 -1.</_>\n        <_>\n          7 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 13 -1.</_>\n        <_>\n          10 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 16 -1.</_>\n        <_>\n          2 8 18 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 15 -1.</_>\n        <_>\n          1 10 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 6 -1.</_>\n        <_>\n          11 13 5 3 2.</_>\n        <_>\n          6 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 14 3 -1.</_>\n        <_>\n          0 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 6 -1.</_>\n        <_>\n          1 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 12 -1.</_>\n        <_>\n          9 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 2 -1.</_>\n        <_>\n          4 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 4 7 -1.</_>\n        <_>\n          16 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 13 -1.</_>\n        <_>\n          2 6 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 3 -1.</_>\n        <_>\n          7 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 16 4 -1.</_>\n        <_>\n          0 1 8 2 2.</_>\n        <_>\n          8 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 4 -1.</_>\n        <_>\n          3 2 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 12 6 -1.</_>\n        <_>\n          3 13 6 3 2.</_>\n        <_>\n          9 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 9 -1.</_>\n        <_>\n          6 11 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 9 -1.</_>\n        <_>\n          0 11 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 10 7 -1.</_>\n        <_>\n          10 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 10 7 -1.</_>\n        <_>\n          5 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 17 6 -1.</_>\n        <_>\n          0 15 17 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 4 -1.</_>\n        <_>\n          5 16 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 13 3 -1.</_>\n        <_>\n          1 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 9 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 18 -1.</_>\n        <_>\n          1 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 7 -1.</_>\n        <_>\n          14 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 7 -1.</_>\n        <_>\n          3 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 8 14 -1.</_>\n        <_>\n          8 9 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 8 14 -1.</_>\n        <_>\n          4 9 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 3 -1.</_>\n        <_>\n          7 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 9 -1.</_>\n        <_>\n          12 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 9 12 -1.</_>\n        <_>\n          3 4 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 10 -1.</_>\n        <_>\n          13 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 10 8 -1.</_>\n        <_>\n          3 12 5 4 2.</_>\n        <_>\n          8 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 7 4 -1.</_>\n        <_>\n          12 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 12 6 -1.</_>\n        <_>\n          2 6 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 5 6 -1.</_>\n        <_>\n          13 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 5 6 -1.</_>\n        <_>\n          2 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 7 4 -1.</_>\n        <_>\n          12 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 10 -1.</_>\n        <_>\n          5 10 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 7 4 -1.</_>\n        <_>\n          12 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 2 -1.</_>\n        <_>\n          0 1 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 8 -1.</_>\n        <_>\n          13 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 8 -1.</_>\n        <_>\n          5 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 12 -1.</_>\n        <_>\n          5 7 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 7 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 6 -1.</_>\n        <_>\n          10 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 6 -1.</_>\n        <_>\n          0 9 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          10 11 5 3 2.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 20 3 -1.</_>\n        <_>\n          0 9 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 15 5 -1.</_>\n        <_>\n          7 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 6 -1.</_>\n        <_>\n          2 9 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 5 -1.</_>\n        <_>\n          8 12 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 16 4 -1.</_>\n        <_>\n          2 16 8 2 2.</_>\n        <_>\n          10 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 7 -1.</_>\n        <_>\n          2 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 20 -1.</_>\n        <_>\n          9 0 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 13 -1.</_>\n        <_>\n          10 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 9 -1.</_>\n        <_>\n          5 4 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 8 -1.</_>\n        <_>\n          6 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 6 -1.</_>\n        <_>\n          13 2 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 14 -1.</_>\n        <_>\n          12 6 5 7 2.</_>\n        <_>\n          7 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 3 -1.</_>\n        <_>\n          1 2 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 7 4 -1.</_>\n        <_>\n          2 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 9 6 -1.</_>\n        <_>\n          7 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 5 6 -1.</_>\n        <_>\n          11 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 14 -1.</_>\n        <_>\n          3 6 5 7 2.</_>\n        <_>\n          8 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 12 -1.</_>\n        <_>\n          12 4 6 6 2.</_>\n        <_>\n          6 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 5 6 -1.</_>\n        <_>\n          4 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 14 5 -1.</_>\n        <_>\n          5 1 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 16 -1.</_>\n        <_>\n          9 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 4 -1.</_>\n        <_>\n          13 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 5 6 -1.</_>\n        <_>\n          3 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 4 -1.</_>\n        <_>\n          5 3 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 10 -1.</_>\n        <_>\n          15 10 5 5 2.</_>\n        <_>\n          10 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 14 -1.</_>\n        <_>\n          4 6 4 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 12 -1.</_>\n        <_>\n          10 3 6 6 2.</_>\n        <_>\n          4 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 13 -1.</_>\n        <_>\n          10 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 10 5 -1.</_>\n        <_>\n          9 1 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 6 -1.</_>\n        <_>\n          3 2 6 3 2.</_>\n        <_>\n          9 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 4 -1.</_>\n        <_>\n          11 2 9 2 2.</_>\n        <_>\n          2 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 11 6 -1.</_>\n        <_>\n          3 4 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 12 -1.</_>\n        <_>\n          16 0 4 6 2.</_>\n        <_>\n          12 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          10 1 3 5 2.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 13 3 -1.</_>\n        <_>\n          0 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 3 -1.</_>\n        <_>\n          4 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 7 6 -1.</_>\n        <_>\n          3 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 7 6 -1.</_>\n        <_>\n          8 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 7 -1.</_>\n        <_>\n          6 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 4 -1.</_>\n        <_>\n          10 1 10 2 2.</_>\n        <_>\n          0 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 3 -1.</_>\n        <_>\n          0 11 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 2 14 -1.</_>\n        <_>\n          12 1 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 10 -1.</_>\n        <_>\n          7 7 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 14 -1.</_>\n        <_>\n          15 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 5 -1.</_>\n        <_>\n          8 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 14 -1.</_>\n        <_>\n          15 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 14 -1.</_>\n        <_>\n          4 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 20 2 -1.</_>\n        <_>\n          0 17 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 14 -1.</_>\n        <_>\n          8 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 13 -1.</_>\n        <_>\n          10 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 5 9 -1.</_>\n        <_>\n          9 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 9 6 -1.</_>\n        <_>\n          5 13 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 7 6 -1.</_>\n        <_>\n          11 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 8 12 -1.</_>\n        <_>\n          1 8 4 6 2.</_>\n        <_>\n          5 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 5 -1.</_>\n        <_>\n          10 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 15 5 -1.</_>\n        <_>\n          5 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 6 -1.</_>\n        <_>\n          12 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 10 -1.</_>\n        <_>\n          8 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 19 3 -1.</_>\n        <_>\n          1 7 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 9 -1.</_>\n        <_>\n          7 11 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 8 8 -1.</_>\n        <_>\n          15 2 4 4 2.</_>\n        <_>\n          11 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          9 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 13 -1.</_>\n        <_>\n          10 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 18 -1.</_>\n        <_>\n          3 8 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 10 -1.</_>\n        <_>\n          10 5 9 5 2.</_>\n        <_>\n          1 10 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 13 -1.</_>\n        <_>\n          7 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 6 -1.</_>\n        <_>\n          11 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 7 6 -1.</_>\n        <_>\n          4 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 3 -1.</_>\n        <_>\n          5 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 19 4 -1.</_>\n        <_>\n          1 6 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 5 -1.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 5 6 -1.</_>\n        <_>\n          11 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 12 -1.</_>\n        <_>\n          7 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 19 -1.</_>\n        <_>\n          10 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 7 6 -1.</_>\n        <_>\n          2 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 10 12 -1.</_>\n        <_>\n          10 11 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          5 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 8 12 -1.</_>\n        <_>\n          11 5 4 6 2.</_>\n        <_>\n          7 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 12 -1.</_>\n        <_>\n          5 5 4 6 2.</_>\n        <_>\n          9 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 8 -1.</_>\n        <_>\n          16 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          2 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 4 -1.</_>\n        <_>\n          7 6 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 13 2 -1.</_>\n        <_>\n          3 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 2 -1.</_>\n        <_>\n          3 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 13 6 -1.</_>\n        <_>\n          2 2 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 13 2 -1.</_>\n        <_>\n          3 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 14 -1.</_>\n        <_>\n          14 0 2 7 2.</_>\n        <_>\n          12 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 12 -1.</_>\n        <_>\n          4 0 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 15 3 -1.</_>\n        <_>\n          5 2 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 6 -1.</_>\n        <_>\n          1 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 10 -1.</_>\n        <_>\n          10 5 10 5 2.</_>\n        <_>\n          0 10 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 7 -1.</_>\n        <_>\n          6 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 14 6 -1.</_>\n        <_>\n          11 6 7 3 2.</_>\n        <_>\n          4 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 8 -1.</_>\n        <_>\n          5 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          14 10 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 13 2 -1.</_>\n        <_>\n          2 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 10 6 -1.</_>\n        <_>\n          1 6 5 3 2.</_>\n        <_>\n          6 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          14 10 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          3 10 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 17 -1.</_>\n        <_>\n          2 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 16 -1.</_>\n        <_>\n          2 4 3 8 2.</_>\n        <_>\n          5 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 8 -1.</_>\n        <_>\n          10 6 5 4 2.</_>\n        <_>\n          5 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 8 -1.</_>\n        <_>\n          4 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 5 -1.</_>\n        <_>\n          8 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 18 -1.</_>\n        <_>\n          11 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 5 -1.</_>\n        <_>\n          10 5 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 4 -1.</_>\n        <_>\n          4 6 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 16 4 -1.</_>\n        <_>\n          11 15 8 2 2.</_>\n        <_>\n          3 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 16 4 -1.</_>\n        <_>\n          1 15 8 2 2.</_>\n        <_>\n          9 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 9 -1.</_>\n        <_>\n          6 14 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 13 3 -1.</_>\n        <_>\n          4 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 5 9 -1.</_>\n        <_>\n          0 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 4 -1.</_>\n        <_>\n          12 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 8 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 6 -1.</_>\n        <_>\n          5 3 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 9 -1.</_>\n        <_>\n          3 9 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 10 -1.</_>\n        <_>\n          9 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 9 -1.</_>\n        <_>\n          5 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 17 -1.</_>\n        <_>\n          2 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 16 -1.</_>\n        <_>\n          12 0 4 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 16 -1.</_>\n        <_>\n          4 0 4 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 6 -1.</_>\n        <_>\n          5 9 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 14 -1.</_>\n        <_>\n          8 4 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          18 5 2 7 2.</_>\n        <_>\n          16 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 8 -1.</_>\n        <_>\n          6 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 3 -1.</_>\n        <_>\n          5 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 10 6 -1.</_>\n        <_>\n          8 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 19 -1.</_>\n        <_>\n          14 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 19 -1.</_>\n        <_>\n          5 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 9 -1.</_>\n        <_>\n          7 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 15 -1.</_>\n        <_>\n          6 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 7 -1.</_>\n        <_>\n          16 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 12 -1.</_>\n        <_>\n          2 4 7 6 2.</_>\n        <_>\n          9 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 12 5 -1.</_>\n        <_>\n          4 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 14 -1.</_>\n        <_>\n          0 6 2 7 2.</_>\n        <_>\n          2 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 8 6 -1.</_>\n        <_>\n          11 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 5 12 -1.</_>\n        <_>\n          7 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 15 12 -1.</_>\n        <_>\n          0 5 15 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 10 -1.</_>\n        <_>\n          7 8 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 16 -1.</_>\n        <_>\n          6 4 2 8 2.</_>\n        <_>\n          8 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 4 -1.</_>\n        <_>\n          7 4 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 12 6 -1.</_>\n        <_>\n          0 3 6 3 2.</_>\n        <_>\n          6 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 8 10 -1.</_>\n        <_>\n          16 1 4 5 2.</_>\n        <_>\n          12 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 10 -1.</_>\n        <_>\n          0 1 4 5 2.</_>\n        <_>\n          4 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 8 -1.</_>\n        <_>\n          10 12 4 4 2.</_>\n        <_>\n          6 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 8 12 -1.</_>\n        <_>\n          5 8 4 6 2.</_>\n        <_>\n          9 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 6 -1.</_>\n        <_>\n          3 11 7 3 2.</_>\n        <_>\n          10 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 12 -1.</_>\n        <_>\n          11 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 5 14 -1.</_>\n        <_>\n          7 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 12 -1.</_>\n        <_>\n          7 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 7 -1.</_>\n        <_>\n          4 11 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 6 -1.</_>\n        <_>\n          11 6 6 3 2.</_>\n        <_>\n          5 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 11 7 2 2.</_>\n        <_>\n          10 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 10 -1.</_>\n        <_>\n          4 0 6 5 2.</_>\n        <_>\n          10 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 15 -1.</_>\n        <_>\n          8 5 6 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 14 3 -1.</_>\n        <_>\n          1 13 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 16 3 -1.</_>\n        <_>\n          10 17 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 9 -1.</_>\n        <_>\n          9 8 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 12 -1.</_>\n        <_>\n          10 3 6 6 2.</_>\n        <_>\n          4 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 20 -1.</_>\n        <_>\n          3 0 3 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 2 -1.</_>\n        <_>\n          3 14 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 4 -1.</_>\n        <_>\n          13 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 12 -1.</_>\n        <_>\n          15 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 12 -1.</_>\n        <_>\n          3 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 12 -1.</_>\n        <_>\n          4 12 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 12 -1.</_>\n        <_>\n          3 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 13 -1.</_>\n        <_>\n          14 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 13 -1.</_>\n        <_>\n          5 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 3 14 -1.</_>\n        <_>\n          17 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 3 14 -1.</_>\n        <_>\n          2 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 14 3 -1.</_>\n        <_>\n          6 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 14 3 -1.</_>\n        <_>\n          0 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 14 6 -1.</_>\n        <_>\n          11 6 7 3 2.</_>\n        <_>\n          4 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 14 6 -1.</_>\n        <_>\n          2 6 7 3 2.</_>\n        <_>\n          9 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 16 -1.</_>\n        <_>\n          3 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 12 -1.</_>\n        <_>\n          10 7 7 6 2.</_>\n        <_>\n          3 13 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 13 6 -1.</_>\n        <_>\n          2 5 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 6 -1.</_>\n        <_>\n          14 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 6 -1.</_>\n        <_>\n          0 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 14 -1.</_>\n        <_>\n          4 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          7 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 13 2 -1.</_>\n        <_>\n          4 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 6 -1.</_>\n        <_>\n          2 1 8 3 2.</_>\n        <_>\n          10 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 9 -1.</_>\n        <_>\n          9 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 8 8 -1.</_>\n        <_>\n          2 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 14 2 -1.</_>\n        <_>\n          1 16 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 10 -1.</_>\n        <_>\n          5 5 3 5 2.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 20 -1.</_>\n        <_>\n          7 0 6 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 9 7 -1.</_>\n        <_>\n          3 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 10 -1.</_>\n        <_>\n          0 8 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 12 -1.</_>\n        <_>\n          9 0 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 14 4 -1.</_>\n        <_>\n          3 18 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          5 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 3 -1.</_>\n        <_>\n          6 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 6 -1.</_>\n        <_>\n          0 2 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 2 -1.</_>\n        <_>\n          2 4 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 12 -1.</_>\n        <_>\n          7 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 10 -1.</_>\n        <_>\n          12 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 2 -1.</_>\n        <_>\n          0 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 4 -1.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 4 -1.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          10 11 7 2 2.</_>\n        <_>\n          3 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          3 10 7 2 2.</_>\n        <_>\n          10 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 3 -1.</_>\n        <_>\n          6 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 13 -1.</_>\n        <_>\n          10 3 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 4 -1.</_>\n        <_>\n          12 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 4 -1.</_>\n        <_>\n          1 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 13 3 -1.</_>\n        <_>\n          1 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 9 -1.</_>\n        <_>\n          4 0 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          0 3 10 2 2.</_>\n        <_>\n          10 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 6 -1.</_>\n        <_>\n          12 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 16 -1.</_>\n        <_>\n          7 1 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 19 -1.</_>\n        <_>\n          10 0 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 18 -1.</_>\n        <_>\n          9 0 7 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 5 9 -1.</_>\n        <_>\n          9 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 19 -1.</_>\n        <_>\n          5 0 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 14 -1.</_>\n        <_>\n          15 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 14 -1.</_>\n        <_>\n          4 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 13 3 -1.</_>\n        <_>\n          0 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 9 -1.</_>\n        <_>\n          12 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 6 -1.</_>\n        <_>\n          0 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 8 -1.</_>\n        <_>\n          2 5 8 4 2.</_>\n        <_>\n          10 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 8 -1.</_>\n        <_>\n          16 3 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 10 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 8 -1.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 7 -1.</_>\n        <_>\n          2 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 6 -1.</_>\n        <_>\n          5 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 8 -1.</_>\n        <_>\n          14 4 4 4 2.</_>\n        <_>\n          10 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 8 -1.</_>\n        <_>\n          14 4 4 4 2.</_>\n        <_>\n          10 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 8 8 -1.</_>\n        <_>\n          2 4 4 4 2.</_>\n        <_>\n          6 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 20 -1.</_>\n        <_>\n          13 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 7 6 -1.</_>\n        <_>\n          3 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 4 -1.</_>\n        <_>\n          8 2 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 10 -1.</_>\n        <_>\n          6 0 3 5 2.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 3 -1.</_>\n        <_>\n          4 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 16 3 -1.</_>\n        <_>\n          8 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 20 -1.</_>\n        <_>\n          13 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 3 -1.</_>\n        <_>\n          2 2 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 20 -1.</_>\n        <_>\n          13 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 20 -1.</_>\n        <_>\n          6 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 8 -1.</_>\n        <_>\n          10 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 8 -1.</_>\n        <_>\n          5 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 7 -1.</_>\n        <_>\n          13 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 7 -1.</_>\n        <_>\n          5 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 13 -1.</_>\n        <_>\n          9 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 10 -1.</_>\n        <_>\n          3 1 3 5 2.</_>\n        <_>\n          6 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 9 12 -1.</_>\n        <_>\n          4 12 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 3 -1.</_>\n        <_>\n          1 8 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 13 2 -1.</_>\n        <_>\n          6 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 16 -1.</_>\n        <_>\n          6 11 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 9 -1.</_>\n        <_>\n          10 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 9 -1.</_>\n        <_>\n          8 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 3 13 -1.</_>\n        <_>\n          11 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 13 -1.</_>\n        <_>\n          8 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 6 -1.</_>\n        <_>\n          0 14 6 3 2.</_>\n        <_>\n          6 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 5 6 -1.</_>\n        <_>\n          14 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 5 6 -1.</_>\n        <_>\n          1 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 6 -1.</_>\n        <_>\n          0 10 10 3 2.</_>\n        <_>\n          10 13 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          10 5 2 7 2.</_>\n        <_>\n          8 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 8 -1.</_>\n        <_>\n          6 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 5 9 -1.</_>\n        <_>\n          13 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 12 -1.</_>\n        <_>\n          5 0 5 6 2.</_>\n        <_>\n          10 6 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 7 -1.</_>\n        <_>\n          12 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 5 9 -1.</_>\n        <_>\n          2 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          0 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 18 -1.</_>\n        <_>\n          3 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 6 -1.</_>\n        <_>\n          15 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 6 -1.</_>\n        <_>\n          2 4 7 3 2.</_>\n        <_>\n          9 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 12 -1.</_>\n        <_>\n          3 9 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 17 15 -1.</_>\n        <_>\n          2 9 17 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 12 -1.</_>\n        <_>\n          3 4 13 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          2 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 6 -1.</_>\n        <_>\n          8 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 9 -1.</_>\n        <_>\n          6 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          12 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 15 4 -1.</_>\n        <_>\n          6 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 12 9 -1.</_>\n        <_>\n          5 4 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 4 12 -1.</_>\n        <_>\n          6 13 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 10 -1.</_>\n        <_>\n          12 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 9 4 -1.</_>\n        <_>\n          3 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 5 9 -1.</_>\n        <_>\n          4 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 5 -1.</_>\n        <_>\n          7 7 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 8 -1.</_>\n        <_>\n          8 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 8 -1.</_>\n        <_>\n          12 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 2 -1.</_>\n        <_>\n          7 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 5 -1.</_>\n        <_>\n          6 4 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 11 -1.</_>\n        <_>\n          12 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 11 -1.</_>\n        <_>\n          5 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 9 10 -1.</_>\n        <_>\n          12 9 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 10 -1.</_>\n        <_>\n          5 9 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 9 -1.</_>\n        <_>\n          9 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 15 -1.</_>\n        <_>\n          7 0 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 10 6 -1.</_>\n        <_>\n          11 12 5 3 2.</_>\n        <_>\n          6 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 15 3 -1.</_>\n        <_>\n          5 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 10 -1.</_>\n        <_>\n          14 10 3 5 2.</_>\n        <_>\n          11 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 10 6 -1.</_>\n        <_>\n          4 12 5 3 2.</_>\n        <_>\n          9 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 5 -1.</_>\n        <_>\n          6 0 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 6 -1.</_>\n        <_>\n          2 3 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 9 6 -1.</_>\n        <_>\n          2 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 7 -1.</_>\n        <_>\n          9 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 5 6 -1.</_>\n        <_>\n          4 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 6 10 -1.</_>\n        <_>\n          15 2 3 5 2.</_>\n        <_>\n          12 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 8 -1.</_>\n        <_>\n          4 10 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 6 10 -1.</_>\n        <_>\n          2 2 3 5 2.</_>\n        <_>\n          5 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 2 -1.</_>\n        <_>\n          6 16 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 5 -1.</_>\n        <_>\n          9 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 8 6 -1.</_>\n        <_>\n          1 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 18 2 -1.</_>\n        <_>\n          2 9 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 2 -1.</_>\n        <_>\n          2 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 7 -1.</_>\n        <_>\n          11 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          8 14 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 7 -1.</_>\n        <_>\n          11 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 14 -1.</_>\n        <_>\n          9 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 15 3 -1.</_>\n        <_>\n          2 18 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 7 -1.</_>\n        <_>\n          16 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 4 7 -1.</_>\n        <_>\n          7 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 7 -1.</_>\n        <_>\n          16 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 2 -1.</_>\n        <_>\n          4 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 14 -1.</_>\n        <_>\n          2 2 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 13 -1.</_>\n        <_>\n          15 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 13 -1.</_>\n        <_>\n          3 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          10 3 10 2 2.</_>\n        <_>\n          0 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 11 -1.</_>\n        <_>\n          6 7 6 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 4 12 -1.</_>\n        <_>\n          10 7 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 11 4 -1.</_>\n        <_>\n          4 9 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 6 -1.</_>\n        <_>\n          10 7 5 3 2.</_>\n        <_>\n          5 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 10 -1.</_>\n        <_>\n          0 5 9 5 2.</_>\n        <_>\n          9 10 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          10 0 10 2 2.</_>\n        <_>\n          0 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 3 -1.</_>\n        <_>\n          2 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 2 -1.</_>\n        <_>\n          2 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 9 14 -1.</_>\n        <_>\n          13 6 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 9 14 -1.</_>\n        <_>\n          4 6 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 5 10 -1.</_>\n        <_>\n          8 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 8 -1.</_>\n        <_>\n          0 7 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 14 2 -1.</_>\n        <_>\n          4 10 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 6 -1.</_>\n        <_>\n          3 15 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 9 -1.</_>\n        <_>\n          6 14 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 9 -1.</_>\n        <_>\n          1 14 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 4 -1.</_>\n        <_>\n          7 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          6 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 10 -1.</_>\n        <_>\n          9 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 2 -1.</_>\n        <_>\n          0 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          11 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 12 -1.</_>\n        <_>\n          5 7 3 6 2.</_>\n        <_>\n          8 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 3 -1.</_>\n        <_>\n          0 15 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 9 5 -1.</_>\n        <_>\n          6 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          7 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 19 -1.</_>\n        <_>\n          10 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 5 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 10 18 -1.</_>\n        <_>\n          14 2 5 9 2.</_>\n        <_>\n          9 11 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 8 4 -1.</_>\n        <_>\n          6 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 8 -1.</_>\n        <_>\n          9 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 19 -1.</_>\n        <_>\n          8 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 5 -1.</_>\n        <_>\n          3 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 18 -1.</_>\n        <_>\n          18 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 18 -1.</_>\n        <_>\n          18 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 18 -1.</_>\n        <_>\n          1 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 7 15 -1.</_>\n        <_>\n          7 9 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          7 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 16 -1.</_>\n        <_>\n          18 0 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 14 -1.</_>\n        <_>\n          1 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 5 -1.</_>\n        <_>\n          14 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 5 -1.</_>\n        <_>\n          3 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 4 -1.</_>\n        <_>\n          10 13 9 2 2.</_>\n        <_>\n          1 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 5 9 -1.</_>\n        <_>\n          7 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 13 -1.</_>\n        <_>\n          8 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 10 -1.</_>\n        <_>\n          5 0 3 5 2.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 8 -1.</_>\n        <_>\n          3 4 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 5 10 -1.</_>\n        <_>\n          8 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 15 2 -1.</_>\n        <_>\n          2 19 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 7 -1.</_>\n        <_>\n          10 7 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 4 -1.</_>\n        <_>\n          0 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 14 4 -1.</_>\n        <_>\n          3 16 7 2 2.</_>\n        <_>\n          10 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 12 -1.</_>\n        <_>\n          9 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 4 -1.</_>\n        <_>\n          6 8 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 10 -1.</_>\n        <_>\n          16 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 10 -1.</_>\n        <_>\n          6 9 4 5 2.</_>\n        <_>\n          10 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 10 -1.</_>\n        <_>\n          16 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 5 6 -1.</_>\n        <_>\n          1 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 6 -1.</_>\n        <_>\n          4 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 7 -1.</_>\n        <_>\n          9 7 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 11 -1.</_>\n        <_>\n          7 6 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 7 -1.</_>\n        <_>\n          10 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 7 -1.</_>\n        <_>\n          8 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 15 -1.</_>\n        <_>\n          11 2 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 10 -1.</_>\n        <_>\n          2 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 6 -1.</_>\n        <_>\n          15 0 5 3 2.</_>\n        <_>\n          10 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 3 -1.</_>\n        <_>\n          1 1 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 6 -1.</_>\n        <_>\n          0 0 5 3 2.</_>\n        <_>\n          5 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 6 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          9 6 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 18 -1.</_>\n        <_>\n          12 0 3 9 2.</_>\n        <_>\n          9 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 14 2 -1.</_>\n        <_>\n          10 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 12 -1.</_>\n        <_>\n          6 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 6 -1.</_>\n        <_>\n          3 1 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 7 4 -1.</_>\n        <_>\n          9 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 15 3 -1.</_>\n        <_>\n          0 10 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 8 -1.</_>\n        <_>\n          11 0 4 4 2.</_>\n        <_>\n          7 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          0 3 10 2 2.</_>\n        <_>\n          10 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 7 4 -1.</_>\n        <_>\n          4 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 12 6 -1.</_>\n        <_>\n          2 11 6 3 2.</_>\n        <_>\n          8 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 10 -1.</_>\n        <_>\n          0 5 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 6 -1.</_>\n        <_>\n          12 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 6 -1.</_>\n        <_>\n          12 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 6 -1.</_>\n        <_>\n          0 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 12 -1.</_>\n        <_>\n          16 0 4 6 2.</_>\n        <_>\n          12 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 14 -1.</_>\n        <_>\n          7 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 9 -1.</_>\n        <_>\n          7 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 13 3 -1.</_>\n        <_>\n          5 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 8 8 -1.</_>\n        <_>\n          2 4 4 4 2.</_>\n        <_>\n          6 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 8 16 -1.</_>\n        <_>\n          15 4 4 8 2.</_>\n        <_>\n          11 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 8 16 -1.</_>\n        <_>\n          1 4 4 8 2.</_>\n        <_>\n          5 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 8 -1.</_>\n        <_>\n          4 4 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 6 -1.</_>\n        <_>\n          5 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 2 -1.</_>\n        <_>\n          5 3 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 10 6 -1.</_>\n        <_>\n          1 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 7 6 -1.</_>\n        <_>\n          0 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 8 -1.</_>\n        <_>\n          1 1 9 4 2.</_>\n        <_>\n          10 5 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 4 -1.</_>\n        <_>\n          0 15 7 2 2.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 18 -1.</_>\n        <_>\n          0 2 2 9 2.</_>\n        <_>\n          2 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 11 -1.</_>\n        <_>\n          10 6 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          10 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 7 -1.</_>\n        <_>\n          9 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 8 4 -1.</_>\n        <_>\n          12 2 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 6 -1.</_>\n        <_>\n          13 1 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 7 -1.</_>\n        <_>\n          3 3 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 8 -1.</_>\n        <_>\n          13 12 5 4 2.</_>\n        <_>\n          8 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 10 -1.</_>\n        <_>\n          2 9 6 5 2.</_>\n        <_>\n          8 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 6 -1.</_>\n        <_>\n          1 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          0 1 9 2 2.</_>\n        <_>\n          9 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 8 -1.</_>\n        <_>\n          12 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 8 -1.</_>\n        <_>\n          6 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 10 -1.</_>\n        <_>\n          12 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 16 -1.</_>\n        <_>\n          7 9 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 5 8 -1.</_>\n        <_>\n          14 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 10 -1.</_>\n        <_>\n          5 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          3 14 7 2 2.</_>\n        <_>\n          10 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 13 -1.</_>\n        <_>\n          10 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 5 8 -1.</_>\n        <_>\n          14 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 5 8 -1.</_>\n        <_>\n          1 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 6 6 -1.</_>\n        <_>\n          14 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 3 -1.</_>\n        <_>\n          0 1 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 8 8 -1.</_>\n        <_>\n          14 12 4 4 2.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 8 8 -1.</_>\n        <_>\n          2 12 4 4 2.</_>\n        <_>\n          6 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 3 -1.</_>\n        <_>\n          3 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 13 -1.</_>\n        <_>\n          7 2 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 17 3 -1.</_>\n        <_>\n          3 10 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 3 -1.</_>\n        <_>\n          2 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 13 -1.</_>\n        <_>\n          14 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 9 6 -1.</_>\n        <_>\n          12 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          10 10 7 2 2.</_>\n        <_>\n          3 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 6 -1.</_>\n        <_>\n          1 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 5 -1.</_>\n        <_>\n          9 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 6 -1.</_>\n        <_>\n          11 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 13 6 -1.</_>\n        <_>\n          4 4 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          0 5 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 15 8 -1.</_>\n        <_>\n          7 6 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 4 -1.</_>\n        <_>\n          8 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          10 10 4 4 2.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 20 -1.</_>\n        <_>\n          8 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          10 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 2 -1.</_>\n        <_>\n          3 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 14 -1.</_>\n        <_>\n          4 6 4 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 9 5 -1.</_>\n        <_>\n          12 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 9 5 -1.</_>\n        <_>\n          5 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 7 -1.</_>\n        <_>\n          10 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 7 -1.</_>\n        <_>\n          8 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 6 8 -1.</_>\n        <_>\n          12 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 8 8 -1.</_>\n        <_>\n          15 12 4 4 2.</_>\n        <_>\n          11 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 8 8 -1.</_>\n        <_>\n          1 12 4 4 2.</_>\n        <_>\n          5 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 6 5 -1.</_>\n        <_>\n          12 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 6 5 -1.</_>\n        <_>\n          5 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          10 5 6 3 2.</_>\n        <_>\n          4 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 10 3 -1.</_>\n        <_>\n          7 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 8 8 -1.</_>\n        <_>\n          14 3 4 4 2.</_>\n        <_>\n          10 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 8 8 -1.</_>\n        <_>\n          2 3 4 4 2.</_>\n        <_>\n          6 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 3 -1.</_>\n        <_>\n          8 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 8 -1.</_>\n        <_>\n          4 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 9 -1.</_>\n        <_>\n          10 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 15 7 -1.</_>\n        <_>\n          5 13 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 14 -1.</_>\n        <_>\n          15 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 3 -1.</_>\n        <_>\n          6 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          12 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 16 10 -1.</_>\n        <_>\n          0 9 16 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 3 -1.</_>\n        <_>\n          6 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 13 2 -1.</_>\n        <_>\n          2 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 11 8 -1.</_>\n        <_>\n          5 4 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 3 10 -1.</_>\n        <_>\n          1 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 4 7 -1.</_>\n        <_>\n          14 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 8 6 -1.</_>\n        <_>\n          1 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 4 7 -1.</_>\n        <_>\n          14 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 7 -1.</_>\n        <_>\n          4 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 6 -1.</_>\n        <_>\n          1 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 7 -1.</_>\n        <_>\n          12 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 7 -1.</_>\n        <_>\n          6 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          4 17 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 4 -1.</_>\n        <_>\n          6 3 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 3 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 11 -1.</_>\n        <_>\n          12 5 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          10 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 4 -1.</_>\n        <_>\n          4 10 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 3 10 -1.</_>\n        <_>\n          11 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 12 -1.</_>\n        <_>\n          12 4 6 6 2.</_>\n        <_>\n          6 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 12 12 -1.</_>\n        <_>\n          2 4 6 6 2.</_>\n        <_>\n          8 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 8 -1.</_>\n        <_>\n          10 5 7 4 2.</_>\n        <_>\n          3 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 7 -1.</_>\n        <_>\n          2 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 16 6 -1.</_>\n        <_>\n          2 15 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 3 13 -1.</_>\n        <_>\n          17 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 3 13 -1.</_>\n        <_>\n          2 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 5 9 -1.</_>\n        <_>\n          11 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 13 3 -1.</_>\n        <_>\n          7 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 5 9 -1.</_>\n        <_>\n          11 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 5 9 -1.</_>\n        <_>\n          4 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          1 2 9 2 2.</_>\n        <_>\n          10 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 6 -1.</_>\n        <_>\n          14 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 6 -1.</_>\n        <_>\n          0 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 6 -1.</_>\n        <_>\n          4 3 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 3 -1.</_>\n        <_>\n          2 8 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 2 -1.</_>\n        <_>\n          3 8 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 8 -1.</_>\n        <_>\n          11 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 7 -1.</_>\n        <_>\n          8 0 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 7 -1.</_>\n        <_>\n          11 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 18 -1.</_>\n        <_>\n          7 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 13 -1.</_>\n        <_>\n          13 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 14 2 -1.</_>\n        <_>\n          2 19 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 7 -1.</_>\n        <_>\n          11 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 2 14 -1.</_>\n        <_>\n          12 4 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 14 -1.</_>\n        <_>\n          7 4 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 3 -1.</_>\n        <_>\n          7 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 6 9 -1.</_>\n        <_>\n          5 8 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 8 8 -1.</_>\n        <_>\n          15 5 4 4 2.</_>\n        <_>\n          11 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 8 -1.</_>\n        <_>\n          5 5 4 4 2.</_>\n        <_>\n          9 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 20 -1.</_>\n        <_>\n          10 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 13 -1.</_>\n        <_>\n          8 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 6 -1.</_>\n        <_>\n          0 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 12 4 -1.</_>\n        <_>\n          9 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 10 -1.</_>\n        <_>\n          5 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 5 -1.</_>\n        <_>\n          7 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 12 -1.</_>\n        <_>\n          7 6 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 8 -1.</_>\n        <_>\n          3 4 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 13 3 -1.</_>\n        <_>\n          4 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 5 -1.</_>\n        <_>\n          6 9 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 2 -1.</_>\n        <_>\n          5 8 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 14 4 -1.</_>\n        <_>\n          2 11 7 2 2.</_>\n        <_>\n          9 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 6 -1.</_>\n        <_>\n          4 10 6 3 2.</_>\n        <_>\n          10 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 10 -1.</_>\n        <_>\n          14 8 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 2 -1.</_>\n        <_>\n          0 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 5 -1.</_>\n        <_>\n          14 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 13 2 -1.</_>\n        <_>\n          3 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 5 -1.</_>\n        <_>\n          3 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          11 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 14 -1.</_>\n        <_>\n          17 4 2 7 2.</_>\n        <_>\n          15 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 14 -1.</_>\n        <_>\n          17 4 2 7 2.</_>\n        <_>\n          15 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 18 -1.</_>\n        <_>\n          1 2 2 9 2.</_>\n        <_>\n          3 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 16 9 -1.</_>\n        <_>\n          3 14 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 3 -1.</_>\n        <_>\n          0 1 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 9 15 -1.</_>\n        <_>\n          9 10 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 9 -1.</_>\n        <_>\n          0 10 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 7 -1.</_>\n        <_>\n          12 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 5 16 -1.</_>\n        <_>\n          7 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 17 -1.</_>\n        <_>\n          6 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 20 -1.</_>\n        <_>\n          8 0 6 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 6 -1.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 5 16 -1.</_>\n        <_>\n          9 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 9 -1.</_>\n        <_>\n          3 7 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 9 -1.</_>\n        <_>\n          15 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 6 -1.</_>\n        <_>\n          5 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 17 6 -1.</_>\n        <_>\n          2 16 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 6 -1.</_>\n        <_>\n          3 4 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 15 -1.</_>\n        <_>\n          2 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 10 -1.</_>\n        <_>\n          10 4 9 5 2.</_>\n        <_>\n          1 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 13 -1.</_>\n        <_>\n          1 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 12 -1.</_>\n        <_>\n          13 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          0 2 10 2 2.</_>\n        <_>\n          10 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 7 -1.</_>\n        <_>\n          9 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 12 -1.</_>\n        <_>\n          7 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 14 -1.</_>\n        <_>\n          10 0 3 7 2.</_>\n        <_>\n          7 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 8 -1.</_>\n        <_>\n          5 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 8 -1.</_>\n        <_>\n          3 4 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 5 10 -1.</_>\n        <_>\n          9 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 14 -1.</_>\n        <_>\n          8 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 18 5 -1.</_>\n        <_>\n          8 15 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 6 -1.</_>\n        <_>\n          1 9 5 3 2.</_>\n        <_>\n          6 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 11 -1.</_>\n        <_>\n          2 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 8 -1.</_>\n        <_>\n          10 4 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 3 10 -1.</_>\n        <_>\n          11 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 3 10 -1.</_>\n        <_>\n          6 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 9 -1.</_>\n        <_>\n          8 2 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 18 5 -1.</_>\n        <_>\n          8 15 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 5 -1.</_>\n        <_>\n          6 15 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 9 -1.</_>\n        <_>\n          12 3 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 8 -1.</_>\n        <_>\n          9 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 14 -1.</_>\n        <_>\n          15 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 14 -1.</_>\n        <_>\n          3 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 9 13 -1.</_>\n        <_>\n          13 7 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 9 13 -1.</_>\n        <_>\n          4 7 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 12 5 -1.</_>\n        <_>\n          12 15 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          10 14 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 3 -1.</_>\n        <_>\n          5 3 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          5 5 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 7 8 -1.</_>\n        <_>\n          7 8 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 9 -1.</_>\n        <_>\n          0 3 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 3 -1.</_>\n        <_>\n          7 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 12 -1.</_>\n        <_>\n          4 8 4 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 5 -1.</_>\n        <_>\n          12 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 5 -1.</_>\n        <_>\n          5 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 10 14 -1.</_>\n        <_>\n          11 4 5 7 2.</_>\n        <_>\n          6 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 10 14 -1.</_>\n        <_>\n          4 4 5 7 2.</_>\n        <_>\n          9 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 6 5 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 13 3 -1.</_>\n        <_>\n          3 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 14 4 -1.</_>\n        <_>\n          12 16 7 2 2.</_>\n        <_>\n          5 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 5 12 -1.</_>\n        <_>\n          11 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 5 12 -1.</_>\n        <_>\n          4 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 8 -1.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 14 4 -1.</_>\n        <_>\n          1 16 7 2 2.</_>\n        <_>\n          8 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 13 2 -1.</_>\n        <_>\n          5 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 5 -1.</_>\n        <_>\n          13 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 5 -1.</_>\n        <_>\n          4 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 4 13 -1.</_>\n        <_>\n          15 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 4 13 -1.</_>\n        <_>\n          3 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 4 -1.</_>\n        <_>\n          5 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 15 3 -1.</_>\n        <_>\n          0 3 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 11 6 -1.</_>\n        <_>\n          7 2 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 4 -1.</_>\n        <_>\n          0 12 10 2 2.</_>\n        <_>\n          10 14 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 5 -1.</_>\n        <_>\n          8 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 14 -1.</_>\n        <_>\n          7 1 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 8 -1.</_>\n        <_>\n          8 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 7 -1.</_>\n        <_>\n          8 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 15 4 -1.</_>\n        <_>\n          2 18 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 5 -1.</_>\n        <_>\n          7 8 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 16 -1.</_>\n        <_>\n          1 4 2 8 2.</_>\n        <_>\n          3 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 10 -1.</_>\n        <_>\n          6 4 3 5 2.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 19 3 -1.</_>\n        <_>\n          1 10 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 12 -1.</_>\n        <_>\n          3 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 4 -1.</_>\n        <_>\n          6 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 15 3 -1.</_>\n        <_>\n          0 6 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 13 -1.</_>\n        <_>\n          12 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 14 -1.</_>\n        <_>\n          10 4 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 10 6 -1.</_>\n        <_>\n          12 0 5 3 2.</_>\n        <_>\n          7 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 6 7 -1.</_>\n        <_>\n          3 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 13 -1.</_>\n        <_>\n          18 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          11 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 10 6 -1.</_>\n        <_>\n          4 0 5 3 2.</_>\n        <_>\n          9 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 2 -1.</_>\n        <_>\n          6 2 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 18 -1.</_>\n        <_>\n          3 9 12 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 10 -1.</_>\n        <_>\n          13 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 10 -1.</_>\n        <_>\n          1 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          10 5 6 6 2.</_>\n        <_>\n          4 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 5 -1.</_>\n        <_>\n          10 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 4 -1.</_>\n        <_>\n          9 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 11 -1.</_>\n        <_>\n          10 9 6 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 10 -1.</_>\n        <_>\n          11 6 4 5 2.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 6 -1.</_>\n        <_>\n          4 10 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 9 6 -1.</_>\n        <_>\n          11 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 7 6 -1.</_>\n        <_>\n          6 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 16 -1.</_>\n        <_>\n          9 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 9 16 -1.</_>\n        <_>\n          3 10 9 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 10 -1.</_>\n        <_>\n          5 5 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 10 -1.</_>\n        <_>\n          5 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 12 -1.</_>\n        <_>\n          13 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 6 -1.</_>\n        <_>\n          0 12 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 2 -1.</_>\n        <_>\n          6 16 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 7 4 -1.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 11 8 -1.</_>\n        <_>\n          6 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 12 -1.</_>\n        <_>\n          0 8 4 6 2.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 4 14 -1.</_>\n        <_>\n          2 6 2 7 2.</_>\n        <_>\n          4 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 9 6 -1.</_>\n        <_>\n          9 10 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 4 8 -1.</_>\n        <_>\n          2 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 8 12 -1.</_>\n        <_>\n          13 4 4 6 2.</_>\n        <_>\n          9 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 8 12 -1.</_>\n        <_>\n          3 4 4 6 2.</_>\n        <_>\n          7 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 8 -1.</_>\n        <_>\n          14 8 5 4 2.</_>\n        <_>\n          9 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 15 2 -1.</_>\n        <_>\n          2 19 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 16 4 -1.</_>\n        <_>\n          8 11 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 14 -1.</_>\n        <_>\n          14 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 6 -1.</_>\n        <_>\n          9 11 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          8 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 6 -1.</_>\n        <_>\n          3 2 6 3 2.</_>\n        <_>\n          9 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 4 -1.</_>\n        <_>\n          12 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 8 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 15 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 7 4 -1.</_>\n        <_>\n          2 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 4 7 -1.</_>\n        <_>\n          14 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 3 15 -1.</_>\n        <_>\n          4 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 7 -1.</_>\n        <_>\n          8 0 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 14 -1.</_>\n        <_>\n          8 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 8 4 -1.</_>\n        <_>\n          6 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 10 3 -1.</_>\n        <_>\n          10 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 5 8 -1.</_>\n        <_>\n          5 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 6 -1.</_>\n        <_>\n          13 1 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 6 -1.</_>\n        <_>\n          4 1 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 4 -1.</_>\n        <_>\n          12 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 7 6 -1.</_>\n        <_>\n          3 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 3 -1.</_>\n        <_>\n          2 2 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 2 -1.</_>\n        <_>\n          7 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 3 -1.</_>\n        <_>\n          1 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 8 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 8 -1.</_>\n        <_>\n          10 6 8 4 2.</_>\n        <_>\n          2 10 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 7 -1.</_>\n        <_>\n          4 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 2 -1.</_>\n        <_>\n          6 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 6 -1.</_>\n        <_>\n          1 11 9 3 2.</_>\n        <_>\n          10 14 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 5 10 -1.</_>\n        <_>\n          10 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          7 10 3 5 2.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 12 -1.</_>\n        <_>\n          6 6 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 5 -1.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 2 -1.</_>\n        <_>\n          3 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 13 -1.</_>\n        <_>\n          16 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 13 -1.</_>\n        <_>\n          2 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_>\n        <_>\n          9 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 5 9 -1.</_>\n        <_>\n          1 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 8 12 -1.</_>\n        <_>\n          16 8 4 6 2.</_>\n        <_>\n          12 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 8 -1.</_>\n        <_>\n          10 9 6 4 2.</_>\n        <_>\n          4 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 8 -1.</_>\n        <_>\n          6 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 10 -1.</_>\n        <_>\n          8 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 18 -1.</_>\n        <_>\n          17 2 2 9 2.</_>\n        <_>\n          15 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 20 -1.</_>\n        <_>\n          0 0 10 10 2.</_>\n        <_>\n          10 10 10 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 3 -1.</_>\n        <_>\n          5 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 4 -1.</_>\n        <_>\n          7 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 5 -1.</_>\n        <_>\n          11 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 5 -1.</_>\n        <_>\n          6 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 14 3 -1.</_>\n        <_>\n          6 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 8 8 -1.</_>\n        <_>\n          15 12 4 4 2.</_>\n        <_>\n          11 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 8 8 -1.</_>\n        <_>\n          1 12 4 4 2.</_>\n        <_>\n          5 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 3 -1.</_>\n        <_>\n          8 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 19 -1.</_>\n        <_>\n          10 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 6 -1.</_>\n        <_>\n          1 14 18 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 6 -1.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 4 8 -1.</_>\n        <_>\n          9 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 3 -1.</_>\n        <_>\n          1 12 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 2 -1.</_>\n        <_>\n          2 2 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 19 3 -1.</_>\n        <_>\n          0 10 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 4 -1.</_>\n        <_>\n          9 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 6 -1.</_>\n        <_>\n          0 16 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 6 -1.</_>\n        <_>\n          8 7 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 6 -1.</_>\n        <_>\n          6 7 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 12 -1.</_>\n        <_>\n          0 6 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 13 -1.</_>\n        <_>\n          14 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 13 6 -1.</_>\n        <_>\n          3 3 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 8 -1.</_>\n        <_>\n          7 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 14 -1.</_>\n        <_>\n          6 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 6 -1.</_>\n        <_>\n          7 2 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 7 4 -1.</_>\n        <_>\n          4 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 10 16 -1.</_>\n        <_>\n          9 12 10 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 16 12 -1.</_>\n        <_>\n          1 3 8 6 2.</_>\n        <_>\n          9 9 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 2 16 -1.</_>\n        <_>\n          11 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 13 3 -1.</_>\n        <_>\n          0 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 9 6 -1.</_>\n        <_>\n          7 9 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 8 -1.</_>\n        <_>\n          6 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 10 -1.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 12 -1.</_>\n        <_>\n          8 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 15 3 -1.</_>\n        <_>\n          4 6 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 9 4 -1.</_>\n        <_>\n          2 6 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 10 -1.</_>\n        <_>\n          8 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 10 -1.</_>\n        <_>\n          8 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 11 8 -1.</_>\n        <_>\n          5 11 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 6 6 -1.</_>\n        <_>\n          1 15 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 5 18 -1.</_>\n        <_>\n          14 8 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 5 18 -1.</_>\n        <_>\n          1 8 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 13 -1.</_>\n        <_>\n          14 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 13 -1.</_>\n        <_>\n          5 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 7 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 4 -1.</_>\n        <_>\n          2 1 8 2 2.</_>\n        <_>\n          10 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 10 6 -1.</_>\n        <_>\n          11 1 5 3 2.</_>\n        <_>\n          6 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 15 -1.</_>\n        <_>\n          4 5 4 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 6 -1.</_>\n        <_>\n          4 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 14 -1.</_>\n        <_>\n          7 0 3 7 2.</_>\n        <_>\n          10 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 10 -1.</_>\n        <_>\n          7 10 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 2 -1.</_>\n        <_>\n          0 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 15 -1.</_>\n        <_>\n          0 5 20 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 3 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 4 -1.</_>\n        <_>\n          6 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 7 -1.</_>\n        <_>\n          5 0 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 8 -1.</_>\n        <_>\n          10 0 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 8 -1.</_>\n        <_>\n          5 0 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 4 -1.</_>\n        <_>\n          5 6 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 4 -1.</_>\n        <_>\n          9 6 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 9 -1.</_>\n        <_>\n          7 0 5 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 2 -1.</_>\n        <_>\n          6 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 8 -1.</_>\n        <_>\n          8 0 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 4 14 -1.</_>\n        <_>\n          14 1 2 7 2.</_>\n        <_>\n          12 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 3 -1.</_>\n        <_>\n          6 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 6 -1.</_>\n        <_>\n          7 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 5 14 -1.</_>\n        <_>\n          6 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 5 -1.</_>\n        <_>\n          9 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 5 -1.</_>\n        <_>\n          6 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 7 -1.</_>\n        <_>\n          9 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 6 -1.</_>\n        <_>\n          12 1 5 3 2.</_>\n        <_>\n          7 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 13 2 -1.</_>\n        <_>\n          2 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          10 2 9 2 2.</_>\n        <_>\n          1 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 9 5 -1.</_>\n        <_>\n          8 8 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 18 -1.</_>\n        <_>\n          17 2 2 9 2.</_>\n        <_>\n          15 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 18 -1.</_>\n        <_>\n          1 2 2 9 2.</_>\n        <_>\n          3 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 10 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_>\n        <_>\n          10 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 17 6 -1.</_>\n        <_>\n          1 9 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 4 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 6 -1.</_>\n        <_>\n          1 8 5 3 2.</_>\n        <_>\n          6 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 10 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_>\n        <_>\n          10 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_>\n        <_>\n          5 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          8 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 19 -1.</_>\n        <_>\n          6 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 12 13 -1.</_>\n        <_>\n          5 1 6 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 9 5 -1.</_>\n        <_>\n          8 1 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 3 -1.</_>\n        <_>\n          0 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 16 -1.</_>\n        <_>\n          10 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 5 -1.</_>\n        <_>\n          8 12 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 16 -1.</_>\n        <_>\n          10 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 4 16 -1.</_>\n        <_>\n          8 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 7 -1.</_>\n        <_>\n          6 1 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 7 -1.</_>\n        <_>\n          10 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 9 9 -1.</_>\n        <_>\n          14 8 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 9 -1.</_>\n        <_>\n          3 8 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 5 -1.</_>\n        <_>\n          0 4 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 2 -1.</_>\n        <_>\n          1 13 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 9 -1.</_>\n        <_>\n          11 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 9 -1.</_>\n        <_>\n          4 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 4 -1.</_>\n        <_>\n          10 11 10 2 2.</_>\n        <_>\n          0 13 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 15 -1.</_>\n        <_>\n          15 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 15 -1.</_>\n        <_>\n          4 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 7 4 -1.</_>\n        <_>\n          9 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 5 -1.</_>\n        <_>\n          8 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 4 9 -1.</_>\n        <_>\n          14 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 9 -1.</_>\n        <_>\n          4 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 8 8 -1.</_>\n        <_>\n          13 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 7 4 -1.</_>\n        <_>\n          4 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 4 8 -1.</_>\n        <_>\n          9 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 10 -1.</_>\n        <_>\n          5 12 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 8 -1.</_>\n        <_>\n          5 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 10 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 5 -1.</_>\n        <_>\n          5 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 14 -1.</_>\n        <_>\n          8 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 17 6 -1.</_>\n        <_>\n          1 4 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          9 5 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 6 -1.</_>\n        <_>\n          8 4 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 6 -1.</_>\n        <_>\n          12 6 7 3 2.</_>\n        <_>\n          5 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 6 -1.</_>\n        <_>\n          1 6 7 3 2.</_>\n        <_>\n          8 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 15 -1.</_>\n        <_>\n          0 10 20 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 14 -1.</_>\n        <_>\n          14 5 2 7 2.</_>\n        <_>\n          12 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          2 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 13 -1.</_>\n        <_>\n          7 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 20 -1.</_>\n        <_>\n          7 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 8 12 -1.</_>\n        <_>\n          11 5 4 6 2.</_>\n        <_>\n          7 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 12 -1.</_>\n        <_>\n          4 5 5 6 2.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 14 -1.</_>\n        <_>\n          14 5 2 7 2.</_>\n        <_>\n          12 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 14 -1.</_>\n        <_>\n          4 5 2 7 2.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 9 -1.</_>\n        <_>\n          14 10 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 2 -1.</_>\n        <_>\n          3 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 3 -1.</_>\n        <_>\n          0 16 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 6 -1.</_>\n        <_>\n          1 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 19 -1.</_>\n        <_>\n          7 0 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 10 -1.</_>\n        <_>\n          3 9 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 9 4 -1.</_>\n        <_>\n          11 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 10 -1.</_>\n        <_>\n          8 3 4 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 10 -1.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 4 -1.</_>\n        <_>\n          0 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 14 3 -1.</_>\n        <_>\n          6 13 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 6 -1.</_>\n        <_>\n          11 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 5 15 -1.</_>\n        <_>\n          7 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 13 2 -1.</_>\n        <_>\n          4 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 4 12 -1.</_>\n        <_>\n          2 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 15 -1.</_>\n        <_>\n          9 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 14 -1.</_>\n        <_>\n          8 8 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 17 6 -1.</_>\n        <_>\n          2 9 17 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 5 9 -1.</_>\n        <_>\n          0 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 14 2 -1.</_>\n        <_>\n          2 10 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 14 -1.</_>\n        <_>\n          6 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 4 -1.</_>\n        <_>\n          11 0 7 2 2.</_>\n        <_>\n          4 2 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 4 -1.</_>\n        <_>\n          0 1 10 2 2.</_>\n        <_>\n          10 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 7 6 -1.</_>\n        <_>\n          7 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          7 2 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 13 3 -1.</_>\n        <_>\n          1 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 17 -1.</_>\n        <_>\n          18 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 10 -1.</_>\n        <_>\n          0 0 10 5 2.</_>\n        <_>\n          10 5 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 4 -1.</_>\n        <_>\n          11 8 7 2 2.</_>\n        <_>\n          4 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 7 6 -1.</_>\n        <_>\n          0 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 4 -1.</_>\n        <_>\n          11 8 7 2 2.</_>\n        <_>\n          4 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 4 -1.</_>\n        <_>\n          2 8 7 2 2.</_>\n        <_>\n          9 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 16 10 -1.</_>\n        <_>\n          11 4 8 5 2.</_>\n        <_>\n          3 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 6 -1.</_>\n        <_>\n          6 5 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 13 2 -1.</_>\n        <_>\n          5 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 7 -1.</_>\n        <_>\n          7 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 4 13 -1.</_>\n        <_>\n          11 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 13 -1.</_>\n        <_>\n          7 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 14 3 -1.</_>\n        <_>\n          5 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 3 14 -1.</_>\n        <_>\n          2 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 15 3 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 16 -1.</_>\n        <_>\n          2 4 3 8 2.</_>\n        <_>\n          5 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 20 -1.</_>\n        <_>\n          4 10 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 7 9 -1.</_>\n        <_>\n          8 5 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 13 -1.</_>\n        <_>\n          6 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 7 -1.</_>\n        <_>\n          7 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 7 -1.</_>\n        <_>\n          9 7 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 9 4 -1.</_>\n        <_>\n          0 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 8 10 -1.</_>\n        <_>\n          11 7 4 5 2.</_>\n        <_>\n          7 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 10 -1.</_>\n        <_>\n          5 7 4 5 2.</_>\n        <_>\n          9 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 5 -1.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 13 6 -1.</_>\n        <_>\n          3 16 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          10 12 7 2 2.</_>\n        <_>\n          3 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 6 5 -1.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 8 -1.</_>\n        <_>\n          8 11 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 15 -1.</_>\n        <_>\n          3 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 13 -1.</_>\n        <_>\n          17 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 7 -1.</_>\n        <_>\n          5 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 13 -1.</_>\n        <_>\n          17 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 13 -1.</_>\n        <_>\n          2 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 16 -1.</_>\n        <_>\n          10 1 2 8 2.</_>\n        <_>\n          8 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 5 9 -1.</_>\n        <_>\n          7 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 8 -1.</_>\n        <_>\n          6 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 5 -1.</_>\n        <_>\n          3 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 7 -1.</_>\n        <_>\n          14 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 12 7 -1.</_>\n        <_>\n          6 11 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 5 -1.</_>\n        <_>\n          10 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 15 2 -1.</_>\n        <_>\n          2 2 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 4 -1.</_>\n        <_>\n          13 8 7 2 2.</_>\n        <_>\n          6 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 3 -1.</_>\n        <_>\n          4 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          7 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 11 -1.</_>\n        <_>\n          9 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 11 -1.</_>\n        <_>\n          9 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 15 8 -1.</_>\n        <_>\n          10 12 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 9 -1.</_>\n        <_>\n          7 7 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 4 -1.</_>\n        <_>\n          6 8 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 9 -1.</_>\n        <_>\n          0 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 12 -1.</_>\n        <_>\n          7 12 10 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 9 12 -1.</_>\n        <_>\n          5 8 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 9 -1.</_>\n        <_>\n          11 3 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 10 6 -1.</_>\n        <_>\n          11 3 5 3 2.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 6 -1.</_>\n        <_>\n          3 4 7 3 2.</_>\n        <_>\n          10 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 12 6 -1.</_>\n        <_>\n          9 3 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 12 6 -1.</_>\n        <_>\n          7 3 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 9 -1.</_>\n        <_>\n          10 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 13 2 -1.</_>\n        <_>\n          2 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 13 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 15 12 -1.</_>\n        <_>\n          3 7 15 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 10 -1.</_>\n        <_>\n          0 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 5 -1.</_>\n        <_>\n          4 14 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 2 15 -1.</_>\n        <_>\n          11 5 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 7 6 -1.</_>\n        <_>\n          6 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 9 -1.</_>\n        <_>\n          10 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 2 15 -1.</_>\n        <_>\n          8 5 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 18 -1.</_>\n        <_>\n          18 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 4 8 -1.</_>\n        <_>\n          0 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          8 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 4 -1.</_>\n        <_>\n          10 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          10 9 5 3 2.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 5 8 -1.</_>\n        <_>\n          4 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 7 6 -1.</_>\n        <_>\n          13 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 7 6 -1.</_>\n        <_>\n          0 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 19 -1.</_>\n        <_>\n          4 0 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 15 8 -1.</_>\n        <_>\n          5 12 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 4 -1.</_>\n        <_>\n          13 8 7 2 2.</_>\n        <_>\n          6 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 13 3 -1.</_>\n        <_>\n          1 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 18 -1.</_>\n        <_>\n          18 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 18 -1.</_>\n        <_>\n          1 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          16 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 8 -1.</_>\n        <_>\n          4 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 10 -1.</_>\n        <_>\n          10 0 8 5 2.</_>\n        <_>\n          2 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 7 -1.</_>\n        <_>\n          6 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 5 -1.</_>\n        <_>\n          7 9 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 9 -1.</_>\n        <_>\n          2 7 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 16 -1.</_>\n        <_>\n          14 0 3 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 9 -1.</_>\n        <_>\n          0 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 9 12 -1.</_>\n        <_>\n          11 6 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 9 12 -1.</_>\n        <_>\n          0 6 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 5 12 -1.</_>\n        <_>\n          8 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 9 -1.</_>\n        <_>\n          5 9 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 20 2 -1.</_>\n        <_>\n          0 18 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          9 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 14 -1.</_>\n        <_>\n          6 12 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 9 -1.</_>\n        <_>\n          11 3 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 9 -1.</_>\n        <_>\n          0 3 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 14 -1.</_>\n        <_>\n          13 0 2 7 2.</_>\n        <_>\n          11 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          6 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 14 -1.</_>\n        <_>\n          13 0 2 7 2.</_>\n        <_>\n          11 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 14 -1.</_>\n        <_>\n          4 0 2 7 2.</_>\n        <_>\n          6 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 6 -1.</_>\n        <_>\n          11 13 5 3 2.</_>\n        <_>\n          6 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 4 -1.</_>\n        <_>\n          1 8 7 2 2.</_>\n        <_>\n          8 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 9 -1.</_>\n        <_>\n          11 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 9 -1.</_>\n        <_>\n          7 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 6 -1.</_>\n        <_>\n          9 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 6 -1.</_>\n        <_>\n          8 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 4 -1.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 4 -1.</_>\n        <_>\n          6 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 3 14 -1.</_>\n        <_>\n          11 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 14 -1.</_>\n        <_>\n          8 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 14 -1.</_>\n        <_>\n          0 0 10 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 10 -1.</_>\n        <_>\n          10 9 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 8 -1.</_>\n        <_>\n          10 5 8 4 2.</_>\n        <_>\n          2 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 10 6 -1.</_>\n        <_>\n          4 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 3 -1.</_>\n        <_>\n          0 10 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 9 -1.</_>\n        <_>\n          3 14 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 10 6 -1.</_>\n        <_>\n          3 13 5 3 2.</_>\n        <_>\n          8 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 3 -1.</_>\n        <_>\n          0 7 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 16 3 -1.</_>\n        <_>\n          0 16 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 16 4 -1.</_>\n        <_>\n          10 16 8 2 2.</_>\n        <_>\n          2 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 13 3 -1.</_>\n        <_>\n          1 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 6 -1.</_>\n        <_>\n          11 10 6 3 2.</_>\n        <_>\n          5 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 12 6 -1.</_>\n        <_>\n          3 10 6 3 2.</_>\n        <_>\n          9 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 10 6 -1.</_>\n        <_>\n          12 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 7 6 -1.</_>\n        <_>\n          2 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 2 -1.</_>\n        <_>\n          5 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 3 -1.</_>\n        <_>\n          1 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 14 -1.</_>\n        <_>\n          18 1 2 7 2.</_>\n        <_>\n          16 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 14 -1.</_>\n        <_>\n          6 12 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 2 -1.</_>\n        <_>\n          5 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 8 -1.</_>\n        <_>\n          6 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 12 -1.</_>\n        <_>\n          10 4 5 6 2.</_>\n        <_>\n          5 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 4 -1.</_>\n        <_>\n          10 13 7 2 2.</_>\n        <_>\n          3 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_>\n        <_>\n          8 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 7 -1.</_>\n        <_>\n          9 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 7 -1.</_>\n        <_>\n          8 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 8 6 -1.</_>\n        <_>\n          7 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 5 -1.</_>\n        <_>\n          10 8 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 8 5 -1.</_>\n        <_>\n          9 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 13 3 -1.</_>\n        <_>\n          7 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 13 3 -1.</_>\n        <_>\n          0 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 6 -1.</_>\n        <_>\n          4 2 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 4 -1.</_>\n        <_>\n          4 2 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 8 -1.</_>\n        <_>\n          2 12 5 4 2.</_>\n        <_>\n          7 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 10 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 2 -1.</_>\n        <_>\n          3 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 12 8 2 2.</_>\n        <_>\n          10 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 11 9 -1.</_>\n        <_>\n          5 6 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 10 -1.</_>\n        <_>\n          0 7 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 6 10 -1.</_>\n        <_>\n          3 8 3 5 2.</_>\n        <_>\n          6 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 5 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          1 7 9 2 2.</_>\n        <_>\n          10 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 5 8 -1.</_>\n        <_>\n          7 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 8 -1.</_>\n        <_>\n          8 4 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 4 -1.</_>\n        <_>\n          12 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 8 -1.</_>\n        <_>\n          4 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 7 6 -1.</_>\n        <_>\n          13 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 12 4 -1.</_>\n        <_>\n          5 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 14 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_>\n        <_>\n          8 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 10 8 -1.</_>\n        <_>\n          7 16 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 7 8 -1.</_>\n        <_>\n          10 16 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 13 2 -1.</_>\n        <_>\n          1 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 3 -1.</_>\n        <_>\n          6 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          0 15 10 2 2.</_>\n        <_>\n          10 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 16 4 -1.</_>\n        <_>\n          4 6 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 11 -1.</_>\n        <_>\n          9 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 10 -1.</_>\n        <_>\n          15 10 4 5 2.</_>\n        <_>\n          11 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 10 6 -1.</_>\n        <_>\n          1 4 5 3 2.</_>\n        <_>\n          6 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 13 2 -1.</_>\n        <_>\n          7 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 10 -1.</_>\n        <_>\n          16 10 4 5 2.</_>\n        <_>\n          12 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 4 -1.</_>\n        <_>\n          0 11 9 2 2.</_>\n        <_>\n          9 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 10 -1.</_>\n        <_>\n          16 10 4 5 2.</_>\n        <_>\n          12 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 8 10 -1.</_>\n        <_>\n          0 10 4 5 2.</_>\n        <_>\n          4 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 12 14 -1.</_>\n        <_>\n          13 6 6 7 2.</_>\n        <_>\n          7 13 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 4 -1.</_>\n        <_>\n          1 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 7 -1.</_>\n        <_>\n          12 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          10 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 7 -1.</_>\n        <_>\n          12 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 7 -1.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 14 -1.</_>\n        <_>\n          12 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 17 -1.</_>\n        <_>\n          10 2 6 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 6 7 -1.</_>\n        <_>\n          12 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 10 -1.</_>\n        <_>\n          6 9 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 5 9 -1.</_>\n        <_>\n          7 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 14 -1.</_>\n        <_>\n          11 5 2 7 2.</_>\n        <_>\n          9 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          8 5 2 7 2.</_>\n        <_>\n          10 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 12 -1.</_>\n        <_>\n          11 3 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 12 -1.</_>\n        <_>\n          7 3 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 14 4 -1.</_>\n        <_>\n          11 10 7 2 2.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 7 -1.</_>\n        <_>\n          9 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 2 -1.</_>\n        <_>\n          1 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 2 -1.</_>\n        <_>\n          7 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 4 -1.</_>\n        <_>\n          4 15 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 4 -1.</_>\n        <_>\n          12 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 4 -1.</_>\n        <_>\n          1 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 3 14 -1.</_>\n        <_>\n          11 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 14 -1.</_>\n        <_>\n          8 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 6 7 -1.</_>\n        <_>\n          10 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 10 -1.</_>\n        <_>\n          2 5 3 5 2.</_>\n        <_>\n          5 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 3 16 -1.</_>\n        <_>\n          16 3 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 16 -1.</_>\n        <_>\n          3 3 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          14 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 13 -1.</_>\n        <_>\n          3 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 3 14 -1.</_>\n        <_>\n          17 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 3 14 -1.</_>\n        <_>\n          17 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 10 10 -1.</_>\n        <_>\n          1 10 5 5 2.</_>\n        <_>\n          6 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 10 -1.</_>\n        <_>\n          0 5 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 13 3 -1.</_>\n        <_>\n          2 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 14 -1.</_>\n        <_>\n          7 13 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 13 2 -1.</_>\n        <_>\n          0 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 10 -1.</_>\n        <_>\n          10 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 6 -1.</_>\n        <_>\n          3 13 7 3 2.</_>\n        <_>\n          10 16 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 19 -1.</_>\n        <_>\n          10 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 6 -1.</_>\n        <_>\n          1 12 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 19 -1.</_>\n        <_>\n          8 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 2 -1.</_>\n        <_>\n          0 6 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 7 -1.</_>\n        <_>\n          12 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 8 -1.</_>\n        <_>\n          6 2 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 9 -1.</_>\n        <_>\n          10 0 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 9 -1.</_>\n        <_>\n          5 0 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 5 6 -1.</_>\n        <_>\n          1 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 10 -1.</_>\n        <_>\n          11 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 10 -1.</_>\n        <_>\n          4 5 6 5 2.</_>\n        <_>\n          10 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 5 9 -1.</_>\n        <_>\n          13 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 18 -1.</_>\n        <_>\n          1 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 8 -1.</_>\n        <_>\n          1 12 9 4 2.</_>\n        <_>\n          10 16 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 10 4 -1.</_>\n        <_>\n          4 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 9 6 -1.</_>\n        <_>\n          6 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 10 -1.</_>\n        <_>\n          5 9 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 5 8 -1.</_>\n        <_>\n          8 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 13 10 -1.</_>\n        <_>\n          3 13 13 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 5 12 -1.</_>\n        <_>\n          12 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 17 -1.</_>\n        <_>\n          12 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 17 -1.</_>\n        <_>\n          7 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 13 -1.</_>\n        <_>\n          1 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 15 -1.</_>\n        <_>\n          12 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 5 15 -1.</_>\n        <_>\n          3 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 9 4 -1.</_>\n        <_>\n          10 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 2 -1.</_>\n        <_>\n          3 6 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 6 -1.</_>\n        <_>\n          10 2 7 3 2.</_>\n        <_>\n          3 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 6 -1.</_>\n        <_>\n          6 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 4 8 -1.</_>\n        <_>\n          11 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 13 -1.</_>\n        <_>\n          9 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 7 -1.</_>\n        <_>\n          7 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 18 5 -1.</_>\n        <_>\n          8 6 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 4 -1.</_>\n        <_>\n          10 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 10 -1.</_>\n        <_>\n          11 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 7 8 -1.</_>\n        <_>\n          3 16 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 18 9 -1.</_>\n        <_>\n          2 9 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 16 2 -1.</_>\n        <_>\n          9 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 11 4 -1.</_>\n        <_>\n          5 4 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 10 8 -1.</_>\n        <_>\n          0 12 5 4 2.</_>\n        <_>\n          5 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 15 8 -1.</_>\n        <_>\n          8 1 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 15 8 -1.</_>\n        <_>\n          7 1 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 9 -1.</_>\n        <_>\n          3 7 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 15 5 -1.</_>\n        <_>\n          9 3 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 12 -1.</_>\n        <_>\n          0 8 20 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 4 -1.</_>\n        <_>\n          8 1 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 12 -1.</_>\n        <_>\n          0 8 20 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 9 -1.</_>\n        <_>\n          10 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 12 15 -1.</_>\n        <_>\n          6 1 4 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 3 -1.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 3 -1.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 14 -1.</_>\n        <_>\n          6 8 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 12 -1.</_>\n        <_>\n          6 6 3 6 2.</_>\n        <_>\n          9 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 9 -1.</_>\n        <_>\n          10 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 4 9 -1.</_>\n        <_>\n          8 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 5 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 5 -1.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 9 6 -1.</_>\n        <_>\n          9 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          5 2 3 5 2.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 9 18 -1.</_>\n        <_>\n          3 1 3 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 10 -1.</_>\n        <_>\n          3 1 3 5 2.</_>\n        <_>\n          6 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 12 -1.</_>\n        <_>\n          1 3 9 6 2.</_>\n        <_>\n          10 9 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 13 3 -1.</_>\n        <_>\n          7 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 13 3 -1.</_>\n        <_>\n          1 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 14 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 8 -1.</_>\n        <_>\n          12 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 13 -1.</_>\n        <_>\n          7 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 3 10 -1.</_>\n        <_>\n          11 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 3 -1.</_>\n        <_>\n          1 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          4 9 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 9 -1.</_>\n        <_>\n          6 11 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 4 -1.</_>\n        <_>\n          4 15 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 2 -1.</_>\n        <_>\n          1 13 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          5 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          12 6 5 3 2.</_>\n        <_>\n          7 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 6 -1.</_>\n        <_>\n          8 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 14 2 -1.</_>\n        <_>\n          4 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 9 6 -1.</_>\n        <_>\n          5 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          17 1 3 6 2.</_>\n        <_>\n          14 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 12 -1.</_>\n        <_>\n          0 1 3 6 2.</_>\n        <_>\n          3 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 6 -1.</_>\n        <_>\n          12 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 2 -1.</_>\n        <_>\n          0 17 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 11 4 -1.</_>\n        <_>\n          5 18 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 13 3 -1.</_>\n        <_>\n          2 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 11 -1.</_>\n        <_>\n          16 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 6 -1.</_>\n        <_>\n          11 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 15 -1.</_>\n        <_>\n          8 5 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 2 -1.</_>\n        <_>\n          0 16 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 6 -1.</_>\n        <_>\n          11 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 7 -1.</_>\n        <_>\n          11 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          7 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 6 -1.</_>\n        <_>\n          11 11 5 3 2.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 6 -1.</_>\n        <_>\n          11 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 11 10 -1.</_>\n        <_>\n          4 9 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 6 -1.</_>\n        <_>\n          11 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 6 -1.</_>\n        <_>\n          1 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 8 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 3 -1.</_>\n        <_>\n          2 3 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 13 3 -1.</_>\n        <_>\n          5 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 8 -1.</_>\n        <_>\n          11 2 4 4 2.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 8 -1.</_>\n        <_>\n          5 2 4 4 2.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 4 16 -1.</_>\n        <_>\n          17 3 2 8 2.</_>\n        <_>\n          15 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 8 -1.</_>\n        <_>\n          4 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 6 -1.</_>\n        <_>\n          4 16 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 14 3 -1.</_>\n        <_>\n          1 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          1 1 9 2 2.</_>\n        <_>\n          10 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 13 -1.</_>\n        <_>\n          1 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 2 -1.</_>\n        <_>\n          2 0 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 12 -1.</_>\n        <_>\n          2 0 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 6 -1.</_>\n        <_>\n          0 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 3 -1.</_>\n        <_>\n          1 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 6 -1.</_>\n        <_>\n          9 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 14 3 -1.</_>\n        <_>\n          0 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 8 -1.</_>\n        <_>\n          5 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 6 -1.</_>\n        <_>\n          9 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 6 -1.</_>\n        <_>\n          2 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 16 4 -1.</_>\n        <_>\n          1 7 8 2 2.</_>\n        <_>\n          9 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 7 -1.</_>\n        <_>\n          8 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 4 -1.</_>\n        <_>\n          8 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 13 -1.</_>\n        <_>\n          3 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 4 11 -1.</_>\n        <_>\n          16 7 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 11 -1.</_>\n        <_>\n          2 7 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 8 -1.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 3 -1.</_>\n        <_>\n          0 11 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 8 6 -1.</_>\n        <_>\n          11 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 13 -1.</_>\n        <_>\n          10 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          9 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 18 -1.</_>\n        <_>\n          16 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 13 3 -1.</_>\n        <_>\n          4 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 19 -1.</_>\n        <_>\n          2 0 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 10 10 -1.</_>\n        <_>\n          13 5 5 5 2.</_>\n        <_>\n          8 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 12 -1.</_>\n        <_>\n          1 8 3 6 2.</_>\n        <_>\n          4 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 13 -1.</_>\n        <_>\n          5 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 8 6 -1.</_>\n        <_>\n          1 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 3 -1.</_>\n        <_>\n          4 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 16 -1.</_>\n        <_>\n          17 3 3 8 2.</_>\n        <_>\n          14 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 10 -1.</_>\n        <_>\n          1 4 9 5 2.</_>\n        <_>\n          10 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 16 -1.</_>\n        <_>\n          17 2 3 8 2.</_>\n        <_>\n          14 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 16 -1.</_>\n        <_>\n          0 2 3 8 2.</_>\n        <_>\n          3 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 12 -1.</_>\n        <_>\n          14 8 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          3 8 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          8 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 8 -1.</_>\n        <_>\n          4 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 18 16 -1.</_>\n        <_>\n          8 4 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 7 -1.</_>\n        <_>\n          7 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 4 -1.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 10 4 -1.</_>\n        <_>\n          7 2 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 6 -1.</_>\n        <_>\n          1 16 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 19 3 -1.</_>\n        <_>\n          1 2 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 13 3 -1.</_>\n        <_>\n          3 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 4 -1.</_>\n        <_>\n          10 15 9 2 2.</_>\n        <_>\n          1 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          4 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 9 6 -1.</_>\n        <_>\n          14 14 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 10 -1.</_>\n        <_>\n          10 10 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 7 -1.</_>\n        <_>\n          6 6 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 7 -1.</_>\n        <_>\n          10 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 15 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 12 12 -1.</_>\n        <_>\n          2 11 12 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 9 9 -1.</_>\n        <_>\n          5 13 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 8 -1.</_>\n        <_>\n          0 12 4 4 2.</_>\n        <_>\n          4 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 6 9 -1.</_>\n        <_>\n          14 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 7 6 -1.</_>\n        <_>\n          5 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 14 -1.</_>\n        <_>\n          9 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 8 -1.</_>\n        <_>\n          8 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 14 -1.</_>\n        <_>\n          7 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 4 8 -1.</_>\n        <_>\n          6 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 6 9 -1.</_>\n        <_>\n          14 9 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 6 9 -1.</_>\n        <_>\n          4 9 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 15 4 -1.</_>\n        <_>\n          9 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 10 4 -1.</_>\n        <_>\n          8 2 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 12 -1.</_>\n        <_>\n          10 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 4 12 -1.</_>\n        <_>\n          8 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 7 -1.</_>\n        <_>\n          9 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 3 13 -1.</_>\n        <_>\n          6 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 5 9 -1.</_>\n        <_>\n          12 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 12 -1.</_>\n        <_>\n          5 10 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 20 -1.</_>\n        <_>\n          11 0 2 10 2.</_>\n        <_>\n          9 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 16 -1.</_>\n        <_>\n          8 0 2 8 2.</_>\n        <_>\n          10 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 11 -1.</_>\n        <_>\n          8 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 9 -1.</_>\n        <_>\n          0 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 12 -1.</_>\n        <_>\n          13 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 8 -1.</_>\n        <_>\n          6 12 4 4 2.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 8 -1.</_>\n        <_>\n          10 9 9 4 2.</_>\n        <_>\n          1 13 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 12 -1.</_>\n        <_>\n          13 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 6 12 -1.</_>\n        <_>\n          4 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 13 3 -1.</_>\n        <_>\n          3 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 13 3 -1.</_>\n        <_>\n          7 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 14 -1.</_>\n        <_>\n          18 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 16 -1.</_>\n        <_>\n          0 8 20 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          0 2 10 3 2.</_>\n        <_>\n          10 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 14 -1.</_>\n        <_>\n          18 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 9 -1.</_>\n        <_>\n          7 9 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 7 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 10 -1.</_>\n        <_>\n          7 7 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          0 7 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 12 -1.</_>\n        <_>\n          3 4 7 6 2.</_>\n        <_>\n          10 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 8 -1.</_>\n        <_>\n          8 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 4 10 -1.</_>\n        <_>\n          11 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 14 -1.</_>\n        <_>\n          7 2 6 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 8 -1.</_>\n        <_>\n          10 3 7 4 2.</_>\n        <_>\n          3 7 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 11 -1.</_>\n        <_>\n          5 9 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 8 -1.</_>\n        <_>\n          5 7 5 4 2.</_>\n        <_>\n          10 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 16 -1.</_>\n        <_>\n          16 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 4 -1.</_>\n        <_>\n          10 4 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 14 3 -1.</_>\n        <_>\n          4 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 14 -1.</_>\n        <_>\n          18 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 10 -1.</_>\n        <_>\n          16 1 3 5 2.</_>\n        <_>\n          13 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 10 -1.</_>\n        <_>\n          1 1 3 5 2.</_>\n        <_>\n          4 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 3 -1.</_>\n        <_>\n          3 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 13 3 -1.</_>\n        <_>\n          3 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 8 8 -1.</_>\n        <_>\n          15 4 4 4 2.</_>\n        <_>\n          11 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 2 -1.</_>\n        <_>\n          0 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 8 8 -1.</_>\n        <_>\n          15 4 4 4 2.</_>\n        <_>\n          11 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 5 9 -1.</_>\n        <_>\n          3 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 8 -1.</_>\n        <_>\n          15 0 5 4 2.</_>\n        <_>\n          10 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 9 -1.</_>\n        <_>\n          0 7 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 4 -1.</_>\n        <_>\n          0 9 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 4 -1.</_>\n        <_>\n          10 2 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 7 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 4 7 -1.</_>\n        <_>\n          8 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 7 -1.</_>\n        <_>\n          14 13 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 12 5 -1.</_>\n        <_>\n          10 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 8 -1.</_>\n        <_>\n          8 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 7 -1.</_>\n        <_>\n          7 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          8 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          9 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 9 -1.</_>\n        <_>\n          2 9 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 2 -1.</_>\n        <_>\n          3 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 15 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 4 8 -1.</_>\n        <_>\n          7 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 11 -1.</_>\n        <_>\n          2 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 8 10 -1.</_>\n        <_>\n          7 8 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 8 4 -1.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 10 20 -1.</_>\n        <_>\n          1 0 5 10 2.</_>\n        <_>\n          6 10 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 10 -1.</_>\n        <_>\n          10 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          10 7 9 2 2.</_>\n        <_>\n          1 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 6 -1.</_>\n        <_>\n          5 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 3 -1.</_>\n        <_>\n          7 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 5 8 -1.</_>\n        <_>\n          11 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 5 8 -1.</_>\n        <_>\n          4 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 4 -1.</_>\n        <_>\n          10 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 9 6 -1.</_>\n        <_>\n          4 15 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 4 -1.</_>\n        <_>\n          10 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 4 -1.</_>\n        <_>\n          0 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 16 -1.</_>\n        <_>\n          16 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 15 -1.</_>\n        <_>\n          7 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 10 6 -1.</_>\n        <_>\n          14 10 5 3 2.</_>\n        <_>\n          9 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 14 -1.</_>\n        <_>\n          3 1 7 7 2.</_>\n        <_>\n          10 8 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          18 5 2 7 2.</_>\n        <_>\n          16 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 4 14 -1.</_>\n        <_>\n          0 5 2 7 2.</_>\n        <_>\n          2 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 13 3 -1.</_>\n        <_>\n          5 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 17 2 -1.</_>\n        <_>\n          0 17 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 6 -1.</_>\n        <_>\n          2 12 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 2 -1.</_>\n        <_>\n          1 11 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 9 -1.</_>\n        <_>\n          3 3 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 9 5 -1.</_>\n        <_>\n          9 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 4 -1.</_>\n        <_>\n          10 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 15 -1.</_>\n        <_>\n          1 8 18 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 12 -1.</_>\n        <_>\n          14 2 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 5 -1.</_>\n        <_>\n          4 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 3 -1.</_>\n        <_>\n          0 1 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 8 -1.</_>\n        <_>\n          6 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 3 -1.</_>\n        <_>\n          9 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 3 -1.</_>\n        <_>\n          6 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 13 3 -1.</_>\n        <_>\n          4 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 4 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 10 -1.</_>\n        <_>\n          13 9 3 5 2.</_>\n        <_>\n          10 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 5 -1.</_>\n        <_>\n          10 10 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 4 -1.</_>\n        <_>\n          10 1 8 2 2.</_>\n        <_>\n          2 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 3 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 17 -1.</_>\n        <_>\n          2 3 8 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 8 -1.</_>\n        <_>\n          0 5 4 4 2.</_>\n        <_>\n          4 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 16 -1.</_>\n        <_>\n          18 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 3 -1.</_>\n        <_>\n          8 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 15 3 -1.</_>\n        <_>\n          2 7 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 6 -1.</_>\n        <_>\n          2 14 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 12 -1.</_>\n        <_>\n          10 5 5 6 2.</_>\n        <_>\n          5 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 12 -1.</_>\n        <_>\n          2 4 7 6 2.</_>\n        <_>\n          9 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 16 -1.</_>\n        <_>\n          18 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 5 -1.</_>\n        <_>\n          8 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 15 -1.</_>\n        <_>\n          16 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 15 -1.</_>\n        <_>\n          3 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 8 -1.</_>\n        <_>\n          8 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 16 -1.</_>\n        <_>\n          1 4 3 8 2.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 2 -1.</_>\n        <_>\n          3 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 14 -1.</_>\n        <_>\n          7 2 3 7 2.</_>\n        <_>\n          10 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          12 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 16 -1.</_>\n        <_>\n          6 1 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 10 -1.</_>\n        <_>\n          6 7 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 13 -1.</_>\n        <_>\n          10 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 14 6 -1.</_>\n        <_>\n          2 6 7 3 2.</_>\n        <_>\n          9 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 9 -1.</_>\n        <_>\n          9 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 13 2 -1.</_>\n        <_>\n          3 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 8 6 -1.</_>\n        <_>\n          9 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 4 -1.</_>\n        <_>\n          2 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 13 3 -1.</_>\n        <_>\n          6 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 7 6 -1.</_>\n        <_>\n          3 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 9 -1.</_>\n        <_>\n          9 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 7 9 -1.</_>\n        <_>\n          4 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 13 3 -1.</_>\n        <_>\n          5 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 12 -1.</_>\n        <_>\n          1 6 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 8 -1.</_>\n        <_>\n          10 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 8 -1.</_>\n        <_>\n          8 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 16 -1.</_>\n        <_>\n          14 0 6 8 2.</_>\n        <_>\n          8 8 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 6 -1.</_>\n        <_>\n          6 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 4 -1.</_>\n        <_>\n          12 0 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          3 0 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 7 -1.</_>\n        <_>\n          8 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 17 6 -1.</_>\n        <_>\n          1 16 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 13 3 -1.</_>\n        <_>\n          5 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 7 -1.</_>\n        <_>\n          12 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 11 -1.</_>\n        <_>\n          7 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 7 -1.</_>\n        <_>\n          12 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 7 -1.</_>\n        <_>\n          6 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 9 9 -1.</_>\n        <_>\n          12 10 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 10 -1.</_>\n        <_>\n          0 10 5 5 2.</_>\n        <_>\n          5 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 6 5 -1.</_>\n        <_>\n          12 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 8 5 -1.</_>\n        <_>\n          5 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 2 -1.</_>\n        <_>\n          5 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 3 -1.</_>\n        <_>\n          7 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 8 -1.</_>\n        <_>\n          5 2 4 4 2.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 14 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          10 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 14 6 -1.</_>\n        <_>\n          12 3 7 3 2.</_>\n        <_>\n          5 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          0 3 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 6 -1.</_>\n        <_>\n          6 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 13 14 -1.</_>\n        <_>\n          0 12 13 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 8 -1.</_>\n        <_>\n          14 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 8 -1.</_>\n        <_>\n          0 0 10 4 2.</_>\n        <_>\n          10 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 18 -1.</_>\n        <_>\n          18 1 2 9 2.</_>\n        <_>\n          16 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 9 -1.</_>\n        <_>\n          3 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 12 -1.</_>\n        <_>\n          4 7 6 6 2.</_>\n        <_>\n          10 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 3 -1.</_>\n        <_>\n          7 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 6 -1.</_>\n        <_>\n          0 2 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 6 -1.</_>\n        <_>\n          6 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 8 -1.</_>\n        <_>\n          0 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 9 5 -1.</_>\n        <_>\n          12 3 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          2 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 6 -1.</_>\n        <_>\n          12 1 5 3 2.</_>\n        <_>\n          7 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 4 -1.</_>\n        <_>\n          0 2 9 2 2.</_>\n        <_>\n          9 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 1 2 17 -1.</_>\n        <_>\n          17 1 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 2 19 -1.</_>\n        <_>\n          2 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 4 -1.</_>\n        <_>\n          10 9 8 2 2.</_>\n        <_>\n          2 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 8 -1.</_>\n        <_>\n          1 6 9 4 2.</_>\n        <_>\n          10 10 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 4 -1.</_>\n        <_>\n          7 8 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 6 -1.</_>\n        <_>\n          5 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 4 10 -1.</_>\n        <_>\n          7 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 6 -1.</_>\n        <_>\n          8 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 15 5 -1.</_>\n        <_>\n          6 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 12 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 12 -1.</_>\n        <_>\n          1 8 5 6 2.</_>\n        <_>\n          6 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 5 6 -1.</_>\n        <_>\n          14 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 12 -1.</_>\n        <_>\n          1 3 9 6 2.</_>\n        <_>\n          10 9 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 6 -1.</_>\n        <_>\n          5 4 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 2 17 -1.</_>\n        <_>\n          15 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 8 -1.</_>\n        <_>\n          9 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 2 17 -1.</_>\n        <_>\n          4 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          11 0 9 2 2.</_>\n        <_>\n          2 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          0 0 9 2 2.</_>\n        <_>\n          9 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 6 8 -1.</_>\n        <_>\n          13 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 6 8 -1.</_>\n        <_>\n          5 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 10 6 -1.</_>\n        <_>\n          12 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 9 14 -1.</_>\n        <_>\n          8 0 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 15 4 -1.</_>\n        <_>\n          9 3 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 4 -1.</_>\n        <_>\n          6 3 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 14 -1.</_>\n        <_>\n          15 5 2 7 2.</_>\n        <_>\n          13 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 14 -1.</_>\n        <_>\n          3 5 2 7 2.</_>\n        <_>\n          5 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 7 -1.</_>\n        <_>\n          11 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 7 -1.</_>\n        <_>\n          7 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 10 6 -1.</_>\n        <_>\n          12 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 10 6 -1.</_>\n        <_>\n          3 12 5 3 2.</_>\n        <_>\n          8 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 16 6 -1.</_>\n        <_>\n          11 4 8 3 2.</_>\n        <_>\n          3 7 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 14 3 -1.</_>\n        <_>\n          6 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 7 -1.</_>\n        <_>\n          6 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 7 -1.</_>\n        <_>\n          10 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 12 -1.</_>\n        <_>\n          5 4 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 18 -1.</_>\n        <_>\n          10 0 5 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 9 -1.</_>\n        <_>\n          7 10 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 6 8 -1.</_>\n        <_>\n          8 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 14 2 -1.</_>\n        <_>\n          3 19 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 7 6 -1.</_>\n        <_>\n          1 8 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 7 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 7 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 11 15 -1.</_>\n        <_>\n          8 10 11 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 9 -1.</_>\n        <_>\n          8 9 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 13 3 -1.</_>\n        <_>\n          4 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 12 -1.</_>\n        <_>\n          7 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          8 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 16 3 -1.</_>\n        <_>\n          10 16 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 5 -1.</_>\n        <_>\n          9 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 9 5 -1.</_>\n        <_>\n          8 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 11 -1.</_>\n        <_>\n          7 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 10 -1.</_>\n        <_>\n          12 6 3 5 2.</_>\n        <_>\n          9 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          5 6 3 5 2.</_>\n        <_>\n          8 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 8 -1.</_>\n        <_>\n          12 8 8 4 2.</_>\n        <_>\n          4 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 8 -1.</_>\n        <_>\n          0 8 8 4 2.</_>\n        <_>\n          8 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 10 -1.</_>\n        <_>\n          14 8 5 5 2.</_>\n        <_>\n          9 13 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 10 -1.</_>\n        <_>\n          1 8 5 5 2.</_>\n        <_>\n          6 13 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 9 16 -1.</_>\n        <_>\n          14 1 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 12 -1.</_>\n        <_>\n          6 4 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 8 -1.</_>\n        <_>\n          16 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 8 -1.</_>\n        <_>\n          2 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 3 -1.</_>\n        <_>\n          5 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 6 -1.</_>\n        <_>\n          6 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 12 -1.</_>\n        <_>\n          7 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 18 -1.</_>\n        <_>\n          12 1 2 9 2.</_>\n        <_>\n          10 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 14 -1.</_>\n        <_>\n          4 6 2 7 2.</_>\n        <_>\n          6 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 10 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 14 12 -1.</_>\n        <_>\n          1 3 7 6 2.</_>\n        <_>\n          8 9 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 9 -1.</_>\n        <_>\n          12 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 4 -1.</_>\n        <_>\n          1 14 9 2 2.</_>\n        <_>\n          10 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 14 -1.</_>\n        <_>\n          9 6 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 12 -1.</_>\n        <_>\n          6 8 4 6 2.</_>\n        <_>\n          10 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 2 -1.</_>\n        <_>\n          9 0 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 6 -1.</_>\n        <_>\n          1 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          12 5 3 5 2.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 9 5 -1.</_>\n        <_>\n          9 1 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 2 -1.</_>\n        <_>\n          3 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 3 -1.</_>\n        <_>\n          4 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 6 -1.</_>\n        <_>\n          12 1 5 3 2.</_>\n        <_>\n          7 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 3 -1.</_>\n        <_>\n          5 0 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 5 -1.</_>\n        <_>\n          9 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 12 -1.</_>\n        <_>\n          0 11 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 13 3 -1.</_>\n        <_>\n          6 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 5 -1.</_>\n        <_>\n          6 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          1 9 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 11 -1.</_>\n        <_>\n          16 0 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 6 -1.</_>\n        <_>\n          3 1 6 3 2.</_>\n        <_>\n          9 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 6 -1.</_>\n        <_>\n          6 7 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 11 -1.</_>\n        <_>\n          2 0 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 5 12 -1.</_>\n        <_>\n          8 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 16 -1.</_>\n        <_>\n          1 4 3 8 2.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 6 10 -1.</_>\n        <_>\n          16 5 3 5 2.</_>\n        <_>\n          13 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 10 -1.</_>\n        <_>\n          1 5 3 5 2.</_>\n        <_>\n          4 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 16 -1.</_>\n        <_>\n          6 9 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 6 7 -1.</_>\n        <_>\n          8 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 13 -1.</_>\n        <_>\n          7 1 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 10 -1.</_>\n        <_>\n          8 10 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 20 -1.</_>\n        <_>\n          4 0 4 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 8 6 -1.</_>\n        <_>\n          10 0 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 9 -1.</_>\n        <_>\n          5 5 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 2 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 5 -1.</_>\n        <_>\n          11 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 3 -1.</_>\n        <_>\n          3 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 11 12 -1.</_>\n        <_>\n          0 7 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 5 -1.</_>\n        <_>\n          12 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 9 5 -1.</_>\n        <_>\n          6 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 8 -1.</_>\n        <_>\n          8 0 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 2 -1.</_>\n        <_>\n          0 16 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 10 3 -1.</_>\n        <_>\n          10 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 10 -1.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 6 -1.</_>\n        <_>\n          4 11 6 3 2.</_>\n        <_>\n          10 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 16 6 -1.</_>\n        <_>\n          11 12 8 3 2.</_>\n        <_>\n          3 15 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 16 6 -1.</_>\n        <_>\n          1 12 8 3 2.</_>\n        <_>\n          9 15 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 15 6 -1.</_>\n        <_>\n          9 0 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 6 -1.</_>\n        <_>\n          6 0 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 6 -1.</_>\n        <_>\n          5 3 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 17 -1.</_>\n        <_>\n          8 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 19 3 -1.</_>\n        <_>\n          1 10 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 18 -1.</_>\n        <_>\n          8 0 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 6 -1.</_>\n        <_>\n          0 13 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 4 -1.</_>\n        <_>\n          13 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 14 -1.</_>\n        <_>\n          4 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 17 -1.</_>\n        <_>\n          12 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 9 -1.</_>\n        <_>\n          3 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 10 -1.</_>\n        <_>\n          14 3 3 5 2.</_>\n        <_>\n          11 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 13 -1.</_>\n        <_>\n          3 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 2 -1.</_>\n        <_>\n          4 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 13 -1.</_>\n        <_>\n          5 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 17 -1.</_>\n        <_>\n          12 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 10 3 -1.</_>\n        <_>\n          5 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 16 9 -1.</_>\n        <_>\n          3 14 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 16 -1.</_>\n        <_>\n          10 8 10 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 16 -1.</_>\n        <_>\n          0 8 10 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 13 -1.</_>\n        <_>\n          10 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 10 -1.</_>\n        <_>\n          6 0 3 5 2.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 10 -1.</_>\n        <_>\n          11 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 16 -1.</_>\n        <_>\n          0 0 2 8 2.</_>\n        <_>\n          2 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 6 -1.</_>\n        <_>\n          10 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 16 -1.</_>\n        <_>\n          0 4 2 8 2.</_>\n        <_>\n          2 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 7 6 -1.</_>\n        <_>\n          5 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 10 -1.</_>\n        <_>\n          14 3 3 5 2.</_>\n        <_>\n          11 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 10 -1.</_>\n        <_>\n          3 3 3 5 2.</_>\n        <_>\n          6 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 10 -1.</_>\n        <_>\n          6 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 16 -1.</_>\n        <_>\n          14 0 2 8 2.</_>\n        <_>\n          12 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 16 -1.</_>\n        <_>\n          4 0 2 8 2.</_>\n        <_>\n          6 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 15 7 -1.</_>\n        <_>\n          10 13 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          0 8 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 5 -1.</_>\n        <_>\n          8 13 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 6 12 -1.</_>\n        <_>\n          15 7 3 6 2.</_>\n        <_>\n          12 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 6 12 -1.</_>\n        <_>\n          2 7 3 6 2.</_>\n        <_>\n          5 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 6 -1.</_>\n        <_>\n          14 8 5 3 2.</_>\n        <_>\n          9 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 6 -1.</_>\n        <_>\n          1 8 5 3 2.</_>\n        <_>\n          6 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 13 3 -1.</_>\n        <_>\n          4 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 20 10 -1.</_>\n        <_>\n          0 13 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 15 7 -1.</_>\n        <_>\n          5 13 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 9 -1.</_>\n        <_>\n          9 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 9 8 -1.</_>\n        <_>\n          4 11 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 17 6 -1.</_>\n        <_>\n          2 15 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 8 -1.</_>\n        <_>\n          5 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 4 12 -1.</_>\n        <_>\n          13 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          4 5 6 6 2.</_>\n        <_>\n          10 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_>\n        <_>\n          5 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 8 -1.</_>\n        <_>\n          3 5 7 4 2.</_>\n        <_>\n          10 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 9 -1.</_>\n        <_>\n          5 9 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 8 4 -1.</_>\n        <_>\n          12 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 8 4 -1.</_>\n        <_>\n          0 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 8 4 -1.</_>\n        <_>\n          8 10 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 12 17 -1.</_>\n        <_>\n          12 2 4 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 12 17 -1.</_>\n        <_>\n          4 2 4 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 20 -1.</_>\n        <_>\n          5 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 6 -1.</_>\n        <_>\n          12 14 7 3 2.</_>\n        <_>\n          5 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 6 -1.</_>\n        <_>\n          0 14 7 3 2.</_>\n        <_>\n          7 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 10 6 -1.</_>\n        <_>\n          9 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 5 6 -1.</_>\n        <_>\n          1 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 13 -1.</_>\n        <_>\n          12 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 13 -1.</_>\n        <_>\n          7 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 9 -1.</_>\n        <_>\n          7 4 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 12 -1.</_>\n        <_>\n          9 7 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 12 -1.</_>\n        <_>\n          10 3 7 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 20 -1.</_>\n        <_>\n          1 0 4 10 2.</_>\n        <_>\n          5 10 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 5 -1.</_>\n        <_>\n          5 2 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 8 -1.</_>\n        <_>\n          12 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 10 -1.</_>\n        <_>\n          15 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 10 -1.</_>\n        <_>\n          0 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 10 6 -1.</_>\n        <_>\n          9 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 10 6 -1.</_>\n        <_>\n          1 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 9 -1.</_>\n        <_>\n          6 11 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 12 -1.</_>\n        <_>\n          7 12 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 2 -1.</_>\n        <_>\n          3 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 10 4 -1.</_>\n        <_>\n          5 18 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 17 -1.</_>\n        <_>\n          12 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 2 -1.</_>\n        <_>\n          7 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_>\n        <_>\n          8 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_>\n        <_>\n          9 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 12 -1.</_>\n        <_>\n          2 6 8 6 2.</_>\n        <_>\n          10 12 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 6 -1.</_>\n        <_>\n          13 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 4 -1.</_>\n        <_>\n          3 6 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 2 -1.</_>\n        <_>\n          7 2 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 15 6 -1.</_>\n        <_>\n          7 1 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 14 3 -1.</_>\n        <_>\n          0 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 14 -1.</_>\n        <_>\n          11 6 2 7 2.</_>\n        <_>\n          9 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 19 2 -1.</_>\n        <_>\n          0 9 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 8 -1.</_>\n        <_>\n          8 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 11 -1.</_>\n        <_>\n          9 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 13 -1.</_>\n        <_>\n          9 3 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 12 6 -1.</_>\n        <_>\n          0 3 6 3 2.</_>\n        <_>\n          6 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 2 -1.</_>\n        <_>\n          3 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 6 7 -1.</_>\n        <_>\n          6 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 5 6 -1.</_>\n        <_>\n          15 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 6 -1.</_>\n        <_>\n          8 1 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 8 -1.</_>\n        <_>\n          10 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 5 -1.</_>\n        <_>\n          9 1 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 6 -1.</_>\n        <_>\n          13 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 6 -1.</_>\n        <_>\n          0 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          14 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          0 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 8 -1.</_>\n        <_>\n          6 4 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 8 -1.</_>\n        <_>\n          0 5 4 4 2.</_>\n        <_>\n          4 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 12 -1.</_>\n        <_>\n          11 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 6 -1.</_>\n        <_>\n          4 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 11 8 -1.</_>\n        <_>\n          7 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 5 -1.</_>\n        <_>\n          8 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 10 8 -1.</_>\n        <_>\n          10 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 10 8 -1.</_>\n        <_>\n          5 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 7 -1.</_>\n        <_>\n          15 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 7 -1.</_>\n        <_>\n          3 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          10 2 10 2 2.</_>\n        <_>\n          0 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 12 9 -1.</_>\n        <_>\n          1 3 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 9 4 -1.</_>\n        <_>\n          10 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 11 4 -1.</_>\n        <_>\n          1 8 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 4 -1.</_>\n        <_>\n          4 10 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 10 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 3 10 -1.</_>\n        <_>\n          3 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 17 -1.</_>\n        <_>\n          18 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 13 2 -1.</_>\n        <_>\n          0 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 17 -1.</_>\n        <_>\n          18 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 17 -1.</_>\n        <_>\n          1 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 6 -1.</_>\n        <_>\n          2 2 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 13 -1.</_>\n        <_>\n          8 5 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 12 16 -1.</_>\n        <_>\n          7 3 6 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 16 2 -1.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 12 -1.</_>\n        <_>\n          11 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 7 -1.</_>\n        <_>\n          3 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 12 -1.</_>\n        <_>\n          16 0 4 6 2.</_>\n        <_>\n          12 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 10 -1.</_>\n        <_>\n          5 6 5 5 2.</_>\n        <_>\n          10 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 2 18 -1.</_>\n        <_>\n          10 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 8 -1.</_>\n        <_>\n          4 9 6 4 2.</_>\n        <_>\n          10 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 13 -1.</_>\n        <_>\n          18 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 13 -1.</_>\n        <_>\n          18 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 2 17 -1.</_>\n        <_>\n          7 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          7 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 13 -1.</_>\n        <_>\n          18 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 13 3 -1.</_>\n        <_>\n          0 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 6 -1.</_>\n        <_>\n          2 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 8 -1.</_>\n        <_>\n          12 4 7 4 2.</_>\n        <_>\n          5 8 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          10 10 4 4 2.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 5 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 6 -1.</_>\n        <_>\n          6 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 4 -1.</_>\n        <_>\n          10 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 18 -1.</_>\n        <_>\n          15 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 9 15 -1.</_>\n        <_>\n          4 2 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 4 -1.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 5 -1.</_>\n        <_>\n          9 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 15 2 -1.</_>\n        <_>\n          4 3 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 13 3 -1.</_>\n        <_>\n          1 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 8 -1.</_>\n        <_>\n          6 10 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 5 9 -1.</_>\n        <_>\n          4 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 10 -1.</_>\n        <_>\n          13 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 10 -1.</_>\n        <_>\n          2 9 6 5 2.</_>\n        <_>\n          8 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 15 3 -1.</_>\n        <_>\n          8 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 12 -1.</_>\n        <_>\n          1 0 4 6 2.</_>\n        <_>\n          5 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 5 10 -1.</_>\n        <_>\n          5 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 10 12 -1.</_>\n        <_>\n          9 9 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 7 6 -1.</_>\n        <_>\n          1 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          5 9 5 4 2.</_>\n        <_>\n          10 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 9 -1.</_>\n        <_>\n          11 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 8 -1.</_>\n        <_>\n          6 3 4 4 2.</_>\n        <_>\n          10 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 9 4 -1.</_>\n        <_>\n          11 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 8 4 -1.</_>\n        <_>\n          12 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 8 4 -1.</_>\n        <_>\n          0 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 3 -1.</_>\n        <_>\n          0 12 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 16 -1.</_>\n        <_>\n          1 0 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 11 -1.</_>\n        <_>\n          3 2 7 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 8 6 -1.</_>\n        <_>\n          4 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 6 -1.</_>\n        <_>\n          3 2 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 13 3 -1.</_>\n        <_>\n          1 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 5 6 -1.</_>\n        <_>\n          15 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 7 6 -1.</_>\n        <_>\n          0 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 6 -1.</_>\n        <_>\n          10 6 8 3 2.</_>\n        <_>\n          2 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 3 10 -1.</_>\n        <_>\n          2 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 5 6 -1.</_>\n        <_>\n          15 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 6 -1.</_>\n        <_>\n          5 7 5 3 2.</_>\n        <_>\n          10 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 5 6 -1.</_>\n        <_>\n          15 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 5 6 -1.</_>\n        <_>\n          0 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 9 15 -1.</_>\n        <_>\n          10 10 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 9 5 -1.</_>\n        <_>\n          8 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 6 -1.</_>\n        <_>\n          13 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 6 -1.</_>\n        <_>\n          13 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 7 6 -1.</_>\n        <_>\n          0 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 18 -1.</_>\n        <_>\n          10 1 5 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 18 -1.</_>\n        <_>\n          5 1 5 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 5 -1.</_>\n        <_>\n          8 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 8 -1.</_>\n        <_>\n          4 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 10 -1.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 9 5 -1.</_>\n        <_>\n          12 11 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 11 7 2 2.</_>\n        <_>\n          10 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 4 -1.</_>\n        <_>\n          10 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 13 -1.</_>\n        <_>\n          9 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 14 -1.</_>\n        <_>\n          7 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 4 -1.</_>\n        <_>\n          10 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 4 -1.</_>\n        <_>\n          4 0 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          14 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 11 -1.</_>\n        <_>\n          3 1 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 9 5 -1.</_>\n        <_>\n          12 11 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 9 5 -1.</_>\n        <_>\n          5 11 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 7 -1.</_>\n        <_>\n          9 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 15 -1.</_>\n        <_>\n          2 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 2 15 -1.</_>\n        <_>\n          12 2 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 15 -1.</_>\n        <_>\n          7 2 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 2 -1.</_>\n        <_>\n          6 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 3 -1.</_>\n        <_>\n          0 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 7 -1.</_>\n        <_>\n          7 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 4 -1.</_>\n        <_>\n          10 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 8 4 -1.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 15 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 11 8 -1.</_>\n        <_>\n          5 4 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 8 14 -1.</_>\n        <_>\n          6 3 4 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 6 -1.</_>\n        <_>\n          15 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 6 -1.</_>\n        <_>\n          0 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 7 -1.</_>\n        <_>\n          8 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 19 -1.</_>\n        <_>\n          14 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 19 -1.</_>\n        <_>\n          5 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 6 7 -1.</_>\n        <_>\n          13 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          7 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 8 -1.</_>\n        <_>\n          8 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 16 -1.</_>\n        <_>\n          6 10 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 9 -1.</_>\n        <_>\n          8 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 7 4 -1.</_>\n        <_>\n          2 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 7 4 -1.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 5 12 -1.</_>\n        <_>\n          7 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 4 -1.</_>\n        <_>\n          3 6 7 2 2.</_>\n        <_>\n          10 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 10 -1.</_>\n        <_>\n          11 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 10 -1.</_>\n        <_>\n          7 4 3 5 2.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 15 -1.</_>\n        <_>\n          14 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 3 -1.</_>\n        <_>\n          0 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 15 -1.</_>\n        <_>\n          1 9 18 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 14 -1.</_>\n        <_>\n          5 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 4 -1.</_>\n        <_>\n          1 15 9 2 2.</_>\n        <_>\n          10 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 8 6 -1.</_>\n        <_>\n          10 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 6 -1.</_>\n        <_>\n          1 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 10 18 -1.</_>\n        <_>\n          13 0 5 9 2.</_>\n        <_>\n          8 9 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 18 3 -1.</_>\n        <_>\n          6 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 6 -1.</_>\n        <_>\n          15 4 5 3 2.</_>\n        <_>\n          10 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 4 -1.</_>\n        <_>\n          10 8 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 12 -1.</_>\n        <_>\n          10 4 6 6 2.</_>\n        <_>\n          4 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 3 -1.</_>\n        <_>\n          10 0 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 10 -1.</_>\n        <_>\n          11 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 5 15 -1.</_>\n        <_>\n          2 9 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 2 14 -1.</_>\n        <_>\n          17 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 2 14 -1.</_>\n        <_>\n          1 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 3 -1.</_>\n        <_>\n          2 11 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 6 -1.</_>\n        <_>\n          2 2 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 15 3 -1.</_>\n        <_>\n          7 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 6 7 -1.</_>\n        <_>\n          12 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 6 7 -1.</_>\n        <_>\n          5 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 2 13 -1.</_>\n        <_>\n          14 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 8 -1.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 6 5 -1.</_>\n        <_>\n          8 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 2 13 -1.</_>\n        <_>\n          14 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 13 -1.</_>\n        <_>\n          5 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          12 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 4 -1.</_>\n        <_>\n          13 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 13 3 -1.</_>\n        <_>\n          0 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 12 -1.</_>\n        <_>\n          6 11 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 14 4 -1.</_>\n        <_>\n          2 2 7 2 2.</_>\n        <_>\n          9 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 4 -1.</_>\n        <_>\n          13 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 7 6 -1.</_>\n        <_>\n          6 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 6 -1.</_>\n        <_>\n          8 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          8 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 14 6 -1.</_>\n        <_>\n          2 2 7 3 2.</_>\n        <_>\n          9 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 7 -1.</_>\n        <_>\n          5 0 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 5 -1.</_>\n        <_>\n          10 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 10 18 -1.</_>\n        <_>\n          13 0 5 9 2.</_>\n        <_>\n          8 9 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 6 -1.</_>\n        <_>\n          2 5 7 3 2.</_>\n        <_>\n          9 8 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          10 1 3 5 2.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 10 6 -1.</_>\n        <_>\n          14 9 5 3 2.</_>\n        <_>\n          9 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 6 10 -1.</_>\n        <_>\n          2 13 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 19 2 -1.</_>\n        <_>\n          1 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 6 -1.</_>\n        <_>\n          4 12 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 12 -1.</_>\n        <_>\n          9 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 7 6 -1.</_>\n        <_>\n          10 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 7 6 -1.</_>\n        <_>\n          3 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 4 15 -1.</_>\n        <_>\n          15 5 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 17 10 -1.</_>\n        <_>\n          0 8 17 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          10 0 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 10 6 -1.</_>\n        <_>\n          11 1 5 3 2.</_>\n        <_>\n          6 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 11 -1.</_>\n        <_>\n          6 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 6 -1.</_>\n        <_>\n          0 12 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 10 -1.</_>\n        <_>\n          13 9 3 5 2.</_>\n        <_>\n          10 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          7 10 3 5 2.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 15 -1.</_>\n        <_>\n          6 6 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 3 -1.</_>\n        <_>\n          0 9 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 10 -1.</_>\n        <_>\n          3 10 3 5 2.</_>\n        <_>\n          6 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 8 12 -1.</_>\n        <_>\n          15 8 4 6 2.</_>\n        <_>\n          11 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 8 12 -1.</_>\n        <_>\n          1 8 4 6 2.</_>\n        <_>\n          5 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 13 -1.</_>\n        <_>\n          14 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 5 9 -1.</_>\n        <_>\n          6 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 5 -1.</_>\n        <_>\n          7 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 8 -1.</_>\n        <_>\n          2 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 6 -1.</_>\n        <_>\n          5 3 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 13 -1.</_>\n        <_>\n          13 5 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_>\n        <_>\n          8 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 3 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 13 -1.</_>\n        <_>\n          6 5 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 10 -1.</_>\n        <_>\n          11 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 10 -1.</_>\n        <_>\n          7 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 15 14 -1.</_>\n        <_>\n          9 2 5 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 15 14 -1.</_>\n        <_>\n          6 2 5 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 9 -1.</_>\n        <_>\n          5 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 10 8 -1.</_>\n        <_>\n          1 3 5 4 2.</_>\n        <_>\n          6 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 14 6 -1.</_>\n        <_>\n          5 13 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 14 6 -1.</_>\n        <_>\n          8 13 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 13 3 -1.</_>\n        <_>\n          7 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          10 7 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 6 -1.</_>\n        <_>\n          10 0 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 6 -1.</_>\n        <_>\n          5 0 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 8 13 -1.</_>\n        <_>\n          12 1 4 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 13 -1.</_>\n        <_>\n          4 1 4 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 18 -1.</_>\n        <_>\n          15 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 4 -1.</_>\n        <_>\n          8 0 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 18 -1.</_>\n        <_>\n          15 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 18 -1.</_>\n        <_>\n          3 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 6 -1.</_>\n        <_>\n          8 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 5 -1.</_>\n        <_>\n          5 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 12 -1.</_>\n        <_>\n          12 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 11 6 -1.</_>\n        <_>\n          4 6 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 5 6 -1.</_>\n        <_>\n          11 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 8 -1.</_>\n        <_>\n          5 6 4 4 2.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 4 -1.</_>\n        <_>\n          6 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 13 2 -1.</_>\n        <_>\n          1 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 14 -1.</_>\n        <_>\n          9 12 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 2 -1.</_>\n        <_>\n          0 1 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          10 9 5 4 2.</_>\n        <_>\n          5 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 8 6 -1.</_>\n        <_>\n          3 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 2 -1.</_>\n        <_>\n          3 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 5 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 14 -1.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 4 8 -1.</_>\n        <_>\n          12 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 4 8 -1.</_>\n        <_>\n          4 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 14 -1.</_>\n        <_>\n          1 4 2 7 2.</_>\n        <_>\n          3 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 20 -1.</_>\n        <_>\n          12 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 5 -1.</_>\n        <_>\n          9 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 20 -1.</_>\n        <_>\n          12 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 14 -1.</_>\n        <_>\n          2 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 20 -1.</_>\n        <_>\n          12 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 20 -1.</_>\n        <_>\n          7 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 7 -1.</_>\n        <_>\n          16 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 7 -1.</_>\n        <_>\n          2 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 14 -1.</_>\n        <_>\n          7 1 6 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 13 -1.</_>\n        <_>\n          11 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 16 4 -1.</_>\n        <_>\n          12 10 8 2 2.</_>\n        <_>\n          4 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 4 -1.</_>\n        <_>\n          0 10 9 2 2.</_>\n        <_>\n          9 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 6 -1.</_>\n        <_>\n          1 4 7 3 2.</_>\n        <_>\n          8 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 10 -1.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 9 10 -1.</_>\n        <_>\n          5 8 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 10 -1.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 10 -1.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 20 -1.</_>\n        <_>\n          6 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          7 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 8 -1.</_>\n        <_>\n          8 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 16 10 -1.</_>\n        <_>\n          11 0 8 5 2.</_>\n        <_>\n          3 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 2 -1.</_>\n        <_>\n          0 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 8 -1.</_>\n        <_>\n          4 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 13 3 -1.</_>\n        <_>\n          0 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 13 2 -1.</_>\n        <_>\n          6 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 5 9 -1.</_>\n        <_>\n          4 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 13 2 -1.</_>\n        <_>\n          5 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 6 12 -1.</_>\n        <_>\n          17 7 3 6 2.</_>\n        <_>\n          14 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 12 4 -1.</_>\n        <_>\n          7 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 15 5 -1.</_>\n        <_>\n          7 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 15 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 12 -1.</_>\n        <_>\n          10 0 3 6 2.</_>\n        <_>\n          7 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 10 -1.</_>\n        <_>\n          8 3 4 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          8 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 8 -1.</_>\n        <_>\n          0 7 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 12 -1.</_>\n        <_>\n          0 7 3 6 2.</_>\n        <_>\n          3 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 2 14 -1.</_>\n        <_>\n          12 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 8 -1.</_>\n        <_>\n          2 0 8 4 2.</_>\n        <_>\n          10 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 9 -1.</_>\n        <_>\n          9 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 8 -1.</_>\n        <_>\n          0 12 4 4 2.</_>\n        <_>\n          4 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 16 4 -1.</_>\n        <_>\n          0 10 8 2 2.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          10 2 10 2 2.</_>\n        <_>\n          0 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 14 -1.</_>\n        <_>\n          3 5 2 7 2.</_>\n        <_>\n          5 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 11 9 -1.</_>\n        <_>\n          5 13 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 4 9 -1.</_>\n        <_>\n          4 9 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 3 -1.</_>\n        <_>\n          3 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 15 -1.</_>\n        <_>\n          3 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 13 3 -1.</_>\n        <_>\n          7 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 7 -1.</_>\n        <_>\n          14 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 7 -1.</_>\n        <_>\n          3 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 17 -1.</_>\n        <_>\n          14 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 13 -1.</_>\n        <_>\n          10 4 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 9 -1.</_>\n        <_>\n          10 6 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 12 9 -1.</_>\n        <_>\n          6 6 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          10 14 7 2 2.</_>\n        <_>\n          3 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 4 -1.</_>\n        <_>\n          3 5 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          10 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 11 6 -1.</_>\n        <_>\n          0 16 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 17 -1.</_>\n        <_>\n          5 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 17 -1.</_>\n        <_>\n          14 3 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 9 -1.</_>\n        <_>\n          7 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 9 6 -1.</_>\n        <_>\n          12 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 17 -1.</_>\n        <_>\n          5 3 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 3 -1.</_>\n        <_>\n          5 15 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 9 6 -1.</_>\n        <_>\n          7 10 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 10 -1.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 14 2 -1.</_>\n        <_>\n          5 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 13 3 -1.</_>\n        <_>\n          0 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 17 6 -1.</_>\n        <_>\n          3 15 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 8 4 -1.</_>\n        <_>\n          6 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 2 -1.</_>\n        <_>\n          6 8 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          6 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 4 -1.</_>\n        <_>\n          12 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 14 -1.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 7 -1.</_>\n        <_>\n          14 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 4 -1.</_>\n        <_>\n          4 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 7 -1.</_>\n        <_>\n          14 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 7 -1.</_>\n        <_>\n          3 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 16 4 -1.</_>\n        <_>\n          10 13 8 2 2.</_>\n        <_>\n          2 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 14 -1.</_>\n        <_>\n          5 9 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 13 2 -1.</_>\n        <_>\n          7 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 3 -1.</_>\n        <_>\n          4 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 4 -1.</_>\n        <_>\n          5 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 3 -1.</_>\n        <_>\n          9 0 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 8 4 -1.</_>\n        <_>\n          11 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 18 15 -1.</_>\n        <_>\n          0 8 18 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 8 -1.</_>\n        <_>\n          2 13 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 4 -1.</_>\n        <_>\n          0 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          10 5 6 6 2.</_>\n        <_>\n          4 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 5 -1.</_>\n        <_>\n          8 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 16 -1.</_>\n        <_>\n          18 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 16 -1.</_>\n        <_>\n          0 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 6 10 -1.</_>\n        <_>\n          17 7 3 5 2.</_>\n        <_>\n          14 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 12 6 -1.</_>\n        <_>\n          0 2 6 3 2.</_>\n        <_>\n          6 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 10 -1.</_>\n        <_>\n          15 0 5 5 2.</_>\n        <_>\n          10 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 10 -1.</_>\n        <_>\n          0 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 18 4 -1.</_>\n        <_>\n          11 7 9 2 2.</_>\n        <_>\n          2 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 14 -1.</_>\n        <_>\n          5 3 3 7 2.</_>\n        <_>\n          8 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 13 -1.</_>\n        <_>\n          10 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 10 -1.</_>\n        <_>\n          0 7 3 5 2.</_>\n        <_>\n          3 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 13 -1.</_>\n        <_>\n          14 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 8 4 -1.</_>\n        <_>\n          5 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 15 5 -1.</_>\n        <_>\n          10 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 4 13 -1.</_>\n        <_>\n          9 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 13 3 -1.</_>\n        <_>\n          7 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 8 -1.</_>\n        <_>\n          2 0 8 4 2.</_>\n        <_>\n          10 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 11 -1.</_>\n        <_>\n          15 7 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 10 -1.</_>\n        <_>\n          7 9 3 5 2.</_>\n        <_>\n          10 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 8 -1.</_>\n        <_>\n          10 5 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 3 13 -1.</_>\n        <_>\n          5 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 12 -1.</_>\n        <_>\n          10 8 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 7 -1.</_>\n        <_>\n          9 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 4 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 4 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 8 -1.</_>\n        <_>\n          16 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 9 8 -1.</_>\n        <_>\n          7 5 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 8 -1.</_>\n        <_>\n          16 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 15 -1.</_>\n        <_>\n          4 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 13 2 -1.</_>\n        <_>\n          5 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 4 13 -1.</_>\n        <_>\n          3 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 9 15 -1.</_>\n        <_>\n          11 1 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 9 15 -1.</_>\n        <_>\n          6 1 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 9 6 -1.</_>\n        <_>\n          12 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 7 -1.</_>\n        <_>\n          2 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 10 -1.</_>\n        <_>\n          7 1 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 10 8 -1.</_>\n        <_>\n          15 8 5 4 2.</_>\n        <_>\n          10 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 10 8 -1.</_>\n        <_>\n          0 8 5 4 2.</_>\n        <_>\n          5 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 12 11 -1.</_>\n        <_>\n          9 9 6 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 3 -1.</_>\n        <_>\n          6 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 16 -1.</_>\n        <_>\n          3 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 8 10 -1.</_>\n        <_>\n          12 3 4 5 2.</_>\n        <_>\n          8 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 8 10 -1.</_>\n        <_>\n          4 3 4 5 2.</_>\n        <_>\n          8 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 9 6 -1.</_>\n        <_>\n          10 14 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 9 6 -1.</_>\n        <_>\n          1 14 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 14 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 9 18 -1.</_>\n        <_>\n          1 6 9 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 4 -1.</_>\n        <_>\n          8 5 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 7 9 -1.</_>\n        <_>\n          1 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 7 -1.</_>\n        <_>\n          11 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 7 -1.</_>\n        <_>\n          7 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 15 4 -1.</_>\n        <_>\n          9 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 15 3 -1.</_>\n        <_>\n          5 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 18 -1.</_>\n        <_>\n          8 2 6 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 16 -1.</_>\n        <_>\n          7 4 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 6 -1.</_>\n        <_>\n          9 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 5 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 5 9 -1.</_>\n        <_>\n          0 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 9 -1.</_>\n        <_>\n          13 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 9 -1.</_>\n        <_>\n          1 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 4 -1.</_>\n        <_>\n          5 9 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 12 -1.</_>\n        <_>\n          1 9 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 14 -1.</_>\n        <_>\n          2 11 13 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 6 -1.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 8 -1.</_>\n        <_>\n          2 5 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 6 -1.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 11 6 -1.</_>\n        <_>\n          4 2 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 2 -1.</_>\n        <_>\n          2 3 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 12 5 -1.</_>\n        <_>\n          10 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 6 -1.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 4 -1.</_>\n        <_>\n          6 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 6 6 -1.</_>\n        <_>\n          12 10 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 14 -1.</_>\n        <_>\n          1 5 3 7 2.</_>\n        <_>\n          4 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 9 13 -1.</_>\n        <_>\n          13 2 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 6 -1.</_>\n        <_>\n          7 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 9 -1.</_>\n        <_>\n          12 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 9 -1.</_>\n        <_>\n          5 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 2 -1.</_>\n        <_>\n          5 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 3 -1.</_>\n        <_>\n          2 10 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 5 6 -1.</_>\n        <_>\n          12 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 5 6 -1.</_>\n        <_>\n          3 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          0 13 10 2 2.</_>\n        <_>\n          10 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 6 -1.</_>\n        <_>\n          2 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 10 -1.</_>\n        <_>\n          9 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 3 13 -1.</_>\n        <_>\n          2 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 16 -1.</_>\n        <_>\n          12 4 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 16 -1.</_>\n        <_>\n          6 4 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 9 5 -1.</_>\n        <_>\n          10 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 12 4 -1.</_>\n        <_>\n          8 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          10 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 14 2 -1.</_>\n        <_>\n          6 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 8 4 -1.</_>\n        <_>\n          7 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          4 2 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 15 -1.</_>\n        <_>\n          0 7 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 6 -1.</_>\n        <_>\n          3 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 14 2 -1.</_>\n        <_>\n          3 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 10 3 -1.</_>\n        <_>\n          9 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 16 8 -1.</_>\n        <_>\n          4 12 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 16 8 -1.</_>\n        <_>\n          8 12 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 10 -1.</_>\n        <_>\n          16 9 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 11 12 -1.</_>\n        <_>\n          2 11 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 12 -1.</_>\n        <_>\n          9 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 15 -1.</_>\n        <_>\n          2 6 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 7 2 13 -1.</_>\n        <_>\n          17 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 2 13 -1.</_>\n        <_>\n          2 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 4 -1.</_>\n        <_>\n          10 1 10 2 2.</_>\n        <_>\n          0 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 6 -1.</_>\n        <_>\n          6 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 6 -1.</_>\n        <_>\n          8 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          12 0 4 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          8 7 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 5 -1.</_>\n        <_>\n          8 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 12 9 -1.</_>\n        <_>\n          12 10 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 9 5 -1.</_>\n        <_>\n          7 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 3 -1.</_>\n        <_>\n          7 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 8 4 -1.</_>\n        <_>\n          12 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 15 16 -1.</_>\n        <_>\n          3 12 15 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 4 -1.</_>\n        <_>\n          0 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 9 -1.</_>\n        <_>\n          9 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 8 9 -1.</_>\n        <_>\n          4 14 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 9 8 -1.</_>\n        <_>\n          14 3 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 9 8 -1.</_>\n        <_>\n          3 4 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 10 -1.</_>\n        <_>\n          12 4 3 5 2.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 4 -1.</_>\n        <_>\n          0 6 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 3 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 13 3 -1.</_>\n        <_>\n          3 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_>\n        <_>\n          5 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          11 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 8 4 -1.</_>\n        <_>\n          10 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 8 -1.</_>\n        <_>\n          1 6 9 4 2.</_>\n        <_>\n          10 10 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 3 -1.</_>\n        <_>\n          4 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 13 2 -1.</_>\n        <_>\n          1 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 8 8 -1.</_>\n        <_>\n          13 12 4 4 2.</_>\n        <_>\n          9 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 5 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 2 16 -1.</_>\n        <_>\n          0 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 10 -1.</_>\n        <_>\n          2 5 8 5 2.</_>\n        <_>\n          10 10 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 2 -1.</_>\n        <_>\n          6 8 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          12 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 14 -1.</_>\n        <_>\n          10 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          9 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 13 -1.</_>\n        <_>\n          7 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 15 3 -1.</_>\n        <_>\n          8 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 6 -1.</_>\n        <_>\n          12 13 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 7 -1.</_>\n        <_>\n          11 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 10 -1.</_>\n        <_>\n          5 9 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 18 -1.</_>\n        <_>\n          15 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 7 -1.</_>\n        <_>\n          11 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          10 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 18 -1.</_>\n        <_>\n          15 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 4 -1.</_>\n        <_>\n          4 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 3 -1.</_>\n        <_>\n          6 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 3 -1.</_>\n        <_>\n          0 7 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 5 9 -1.</_>\n        <_>\n          1 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 16 6 -1.</_>\n        <_>\n          1 4 8 3 2.</_>\n        <_>\n          9 7 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 10 6 -1.</_>\n        <_>\n          9 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 6 -1.</_>\n        <_>\n          4 5 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 8 -1.</_>\n        <_>\n          9 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 9 6 -1.</_>\n        <_>\n          1 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 9 5 -1.</_>\n        <_>\n          11 3 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 3 16 -1.</_>\n        <_>\n          4 3 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 17 -1.</_>\n        <_>\n          15 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 9 7 -1.</_>\n        <_>\n          3 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 7 12 -1.</_>\n        <_>\n          8 4 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 9 -1.</_>\n        <_>\n          0 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 10 5 -1.</_>\n        <_>\n          9 9 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 5 -1.</_>\n        <_>\n          6 9 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 3 -1.</_>\n        <_>\n          9 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 3 -1.</_>\n        <_>\n          6 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_>\n        <_>\n          5 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 8 8 -1.</_>\n        <_>\n          3 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 2 -1.</_>\n        <_>\n          0 1 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 8 8 -1.</_>\n        <_>\n          12 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 8 8 -1.</_>\n        <_>\n          4 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 13 4 -1.</_>\n        <_>\n          7 17 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 6 -1.</_>\n        <_>\n          0 14 6 3 2.</_>\n        <_>\n          6 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 8 -1.</_>\n        <_>\n          16 11 4 4 2.</_>\n        <_>\n          12 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 8 -1.</_>\n        <_>\n          0 11 4 4 2.</_>\n        <_>\n          4 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 19 -1.</_>\n        <_>\n          6 0 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 3 -1.</_>\n        <_>\n          0 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 12 -1.</_>\n        <_>\n          7 8 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 9 4 -1.</_>\n        <_>\n          11 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 8 6 -1.</_>\n        <_>\n          11 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 8 6 -1.</_>\n        <_>\n          1 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 8 -1.</_>\n        <_>\n          4 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 15 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 10 -1.</_>\n        <_>\n          8 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 5 9 -1.</_>\n        <_>\n          2 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 16 3 -1.</_>\n        <_>\n          3 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 12 7 -1.</_>\n        <_>\n          9 13 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 3 15 -1.</_>\n        <_>\n          11 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 15 -1.</_>\n        <_>\n          8 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 4 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 7 12 -1.</_>\n        <_>\n          5 4 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 4 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 4 8 -1.</_>\n        <_>\n          3 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 5 -1.</_>\n        <_>\n          9 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 16 -1.</_>\n        <_>\n          7 0 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 8 8 -1.</_>\n        <_>\n          2 8 4 4 2.</_>\n        <_>\n          6 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 8 -1.</_>\n        <_>\n          12 8 8 4 2.</_>\n        <_>\n          4 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 16 3 -1.</_>\n        <_>\n          9 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 4 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 7 4 -1.</_>\n        <_>\n          3 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 10 19 -1.</_>\n        <_>\n          9 0 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 5 -1.</_>\n        <_>\n          7 4 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 3 -1.</_>\n        <_>\n          2 1 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 7 9 -1.</_>\n        <_>\n          5 10 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 14 3 -1.</_>\n        <_>\n          4 6 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 7 6 -1.</_>\n        <_>\n          2 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 18 -1.</_>\n        <_>\n          5 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 10 -1.</_>\n        <_>\n          15 0 5 5 2.</_>\n        <_>\n          10 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 14 3 -1.</_>\n        <_>\n          0 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 13 3 -1.</_>\n        <_>\n          6 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 13 -1.</_>\n        <_>\n          6 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 7 -1.</_>\n        <_>\n          6 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 3 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 3 -1.</_>\n        <_>\n          6 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 17 3 -1.</_>\n        <_>\n          2 18 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 19 -1.</_>\n        <_>\n          9 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 12 -1.</_>\n        <_>\n          4 6 12 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 13 3 -1.</_>\n        <_>\n          0 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 11 12 -1.</_>\n        <_>\n          4 12 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 5 6 -1.</_>\n        <_>\n          12 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 5 6 -1.</_>\n        <_>\n          3 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 17 -1.</_>\n        <_>\n          4 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          5 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 14 -1.</_>\n        <_>\n          7 8 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 8 -1.</_>\n        <_>\n          2 4 15 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 3 -1.</_>\n        <_>\n          7 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 16 -1.</_>\n        <_>\n          5 2 5 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 12 -1.</_>\n        <_>\n          5 6 15 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          9 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 15 5 -1.</_>\n        <_>\n          10 1 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 9 -1.</_>\n        <_>\n          4 8 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 6 -1.</_>\n        <_>\n          11 5 5 3 2.</_>\n        <_>\n          6 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 12 -1.</_>\n        <_>\n          5 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 4 -1.</_>\n        <_>\n          13 2 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 12 -1.</_>\n        <_>\n          0 8 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 3 -1.</_>\n        <_>\n          4 8 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 11 12 -1.</_>\n        <_>\n          4 14 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 3 -1.</_>\n        <_>\n          2 2 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 11 6 -1.</_>\n        <_>\n          4 4 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 8 6 -1.</_>\n        <_>\n          11 11 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 13 3 -1.</_>\n        <_>\n          0 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 3 -1.</_>\n        <_>\n          2 5 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 10 -1.</_>\n        <_>\n          0 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 13 3 -1.</_>\n        <_>\n          6 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 7 -1.</_>\n        <_>\n          2 7 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 6 -1.</_>\n        <_>\n          11 6 5 3 2.</_>\n        <_>\n          6 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 9 -1.</_>\n        <_>\n          9 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 13 -1.</_>\n        <_>\n          10 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 13 -1.</_>\n        <_>\n          9 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 12 -1.</_>\n        <_>\n          10 1 4 6 2.</_>\n        <_>\n          6 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 10 -1.</_>\n        <_>\n          12 3 3 5 2.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 15 6 -1.</_>\n        <_>\n          2 3 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 16 -1.</_>\n        <_>\n          8 1 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 14 6 -1.</_>\n        <_>\n          9 1 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 14 -1.</_>\n        <_>\n          8 1 6 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 14 -1.</_>\n        <_>\n          6 1 6 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 18 13 -1.</_>\n        <_>\n          8 3 6 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 13 2 -1.</_>\n        <_>\n          7 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 10 6 -1.</_>\n        <_>\n          5 13 5 3 2.</_>\n        <_>\n          10 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 12 6 -1.</_>\n        <_>\n          13 2 6 3 2.</_>\n        <_>\n          7 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 6 -1.</_>\n        <_>\n          4 2 6 3 2.</_>\n        <_>\n          10 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 4 8 -1.</_>\n        <_>\n          12 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 8 -1.</_>\n        <_>\n          0 8 8 4 2.</_>\n        <_>\n          8 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 4 8 -1.</_>\n        <_>\n          0 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 12 -1.</_>\n        <_>\n          13 2 3 6 2.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 14 -1.</_>\n        <_>\n          0 7 20 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 7 6 -1.</_>\n        <_>\n          11 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 8 6 -1.</_>\n        <_>\n          1 11 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 15 -1.</_>\n        <_>\n          13 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 7 15 -1.</_>\n        <_>\n          0 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 6 -1.</_>\n        <_>\n          4 6 5 3 2.</_>\n        <_>\n          9 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 12 4 -1.</_>\n        <_>\n          5 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 2 19 -1.</_>\n        <_>\n          14 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 19 -1.</_>\n        <_>\n          5 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 5 6 -1.</_>\n        <_>\n          3 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          12 6 5 3 2.</_>\n        <_>\n          7 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 9 5 -1.</_>\n        <_>\n          6 11 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 16 -1.</_>\n        <_>\n          8 1 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 16 -1.</_>\n        <_>\n          6 1 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 9 5 -1.</_>\n        <_>\n          9 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 10 -1.</_>\n        <_>\n          2 10 8 5 2.</_>\n        <_>\n          10 15 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 14 -1.</_>\n        <_>\n          14 0 2 7 2.</_>\n        <_>\n          12 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 14 -1.</_>\n        <_>\n          4 0 2 7 2.</_>\n        <_>\n          6 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 9 -1.</_>\n        <_>\n          12 7 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 9 -1.</_>\n        <_>\n          6 7 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 2 20 -1.</_>\n        <_>\n          16 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 2 20 -1.</_>\n        <_>\n          3 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 14 -1.</_>\n        <_>\n          5 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 3 -1.</_>\n        <_>\n          6 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 9 6 -1.</_>\n        <_>\n          6 14 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 6 -1.</_>\n        <_>\n          5 5 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 10 3 -1.</_>\n        <_>\n          10 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 8 4 -1.</_>\n        <_>\n          4 3 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 4 -1.</_>\n        <_>\n          10 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 12 -1.</_>\n        <_>\n          6 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 8 -1.</_>\n        <_>\n          16 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 18 -1.</_>\n        <_>\n          9 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 8 -1.</_>\n        <_>\n          2 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 6 -1.</_>\n        <_>\n          14 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 3 -1.</_>\n        <_>\n          0 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          3 10 7 2 2.</_>\n        <_>\n          10 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 17 2 -1.</_>\n        <_>\n          3 9 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 14 12 -1.</_>\n        <_>\n          0 11 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 6 -1.</_>\n        <_>\n          3 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 7 -1.</_>\n        <_>\n          9 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 2 -1.</_>\n        <_>\n          8 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 15 -1.</_>\n        <_>\n          8 5 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 14 -1.</_>\n        <_>\n          8 6 3 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 8 -1.</_>\n        <_>\n          12 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 5 -1.</_>\n        <_>\n          8 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 12 -1.</_>\n        <_>\n          11 5 5 6 2.</_>\n        <_>\n          6 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 14 -1.</_>\n        <_>\n          3 5 6 7 2.</_>\n        <_>\n          9 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 9 12 -1.</_>\n        <_>\n          5 11 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 14 -1.</_>\n        <_>\n          13 6 2 7 2.</_>\n        <_>\n          11 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 14 -1.</_>\n        <_>\n          5 6 2 7 2.</_>\n        <_>\n          7 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 17 2 -1.</_>\n        <_>\n          3 2 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 16 -1.</_>\n        <_>\n          7 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          8 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 15 -1.</_>\n        <_>\n          8 5 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 15 -1.</_>\n        <_>\n          6 5 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 12 19 -1.</_>\n        <_>\n          6 0 4 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 11 4 -1.</_>\n        <_>\n          9 14 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 6 -1.</_>\n        <_>\n          0 6 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 4 -1.</_>\n        <_>\n          5 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 12 4 -1.</_>\n        <_>\n          5 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 3 -1.</_>\n        <_>\n          6 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 14 3 -1.</_>\n        <_>\n          0 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 13 6 -1.</_>\n        <_>\n          5 6 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 11 4 -1.</_>\n        <_>\n          0 14 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          0 2 10 2 2.</_>\n        <_>\n          10 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 5 -1.</_>\n        <_>\n          14 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 5 6 -1.</_>\n        <_>\n          4 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 10 18 -1.</_>\n        <_>\n          6 10 10 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          0 8 3 6 2.</_>\n        <_>\n          3 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 10 6 -1.</_>\n        <_>\n          14 9 5 3 2.</_>\n        <_>\n          9 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 6 -1.</_>\n        <_>\n          1 9 5 3 2.</_>\n        <_>\n          6 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 13 -1.</_>\n        <_>\n          16 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 13 -1.</_>\n        <_>\n          3 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 13 -1.</_>\n        <_>\n          18 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 13 -1.</_>\n        <_>\n          1 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 16 -1.</_>\n        <_>\n          16 4 3 8 2.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 14 -1.</_>\n        <_>\n          4 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 3 13 -1.</_>\n        <_>\n          17 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 3 13 -1.</_>\n        <_>\n          2 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 9 9 -1.</_>\n        <_>\n          8 9 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 14 2 -1.</_>\n        <_>\n          0 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 6 -1.</_>\n        <_>\n          12 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 6 -1.</_>\n        <_>\n          5 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 9 6 -1.</_>\n        <_>\n          10 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          9 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 20 -1.</_>\n        <_>\n          1 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          16 5 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          16 5 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 4 14 -1.</_>\n        <_>\n          2 5 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 4 -1.</_>\n        <_>\n          10 11 10 2 2.</_>\n        <_>\n          0 13 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 9 6 -1.</_>\n        <_>\n          10 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 9 6 -1.</_>\n        <_>\n          1 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 5 8 -1.</_>\n        <_>\n          11 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 11 -1.</_>\n        <_>\n          11 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 11 -1.</_>\n        <_>\n          7 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          10 1 3 5 2.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 10 5 -1.</_>\n        <_>\n          8 2 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 17 3 -1.</_>\n        <_>\n          2 18 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 14 3 -1.</_>\n        <_>\n          0 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 4 10 -1.</_>\n        <_>\n          7 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 6 -1.</_>\n        <_>\n          2 14 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 13 3 -1.</_>\n        <_>\n          5 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 12 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 6 -1.</_>\n        <_>\n          13 1 7 3 2.</_>\n        <_>\n          6 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 6 -1.</_>\n        <_>\n          3 3 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 11 6 -1.</_>\n        <_>\n          9 7 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 3 13 -1.</_>\n        <_>\n          6 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 4 14 -1.</_>\n        <_>\n          17 5 2 7 2.</_>\n        <_>\n          15 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 6 -1.</_>\n        <_>\n          10 10 7 3 2.</_>\n        <_>\n          3 13 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 3 -1.</_>\n        <_>\n          5 15 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 14 6 -1.</_>\n        <_>\n          0 1 7 3 2.</_>\n        <_>\n          7 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 14 4 -1.</_>\n        <_>\n          10 16 7 2 2.</_>\n        <_>\n          3 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 10 -1.</_>\n        <_>\n          0 1 3 5 2.</_>\n        <_>\n          3 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 8 8 -1.</_>\n        <_>\n          14 3 4 4 2.</_>\n        <_>\n          10 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 6 -1.</_>\n        <_>\n          1 5 5 3 2.</_>\n        <_>\n          6 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 2 14 -1.</_>\n        <_>\n          14 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 14 -1.</_>\n        <_>\n          4 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 4 -1.</_>\n        <_>\n          4 10 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 8 8 -1.</_>\n        <_>\n          2 3 4 4 2.</_>\n        <_>\n          6 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 2 16 -1.</_>\n        <_>\n          17 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 4 14 -1.</_>\n        <_>\n          1 5 2 7 2.</_>\n        <_>\n          3 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 10 -1.</_>\n        <_>\n          8 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 8 10 -1.</_>\n        <_>\n          4 2 4 5 2.</_>\n        <_>\n          8 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 10 8 -1.</_>\n        <_>\n          13 5 5 4 2.</_>\n        <_>\n          8 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 7 -1.</_>\n        <_>\n          16 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 2 16 -1.</_>\n        <_>\n          1 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 12 -1.</_>\n        <_>\n          0 6 20 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 4 -1.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 13 6 -1.</_>\n        <_>\n          2 12 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 14 -1.</_>\n        <_>\n          2 9 16 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 8 -1.</_>\n        <_>\n          4 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 15 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 4 -1.</_>\n        <_>\n          10 14 9 2 2.</_>\n        <_>\n          1 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 5 -1.</_>\n        <_>\n          4 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 19 -1.</_>\n        <_>\n          13 1 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 19 -1.</_>\n        <_>\n          4 1 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 14 3 -1.</_>\n        <_>\n          6 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 3 -1.</_>\n        <_>\n          0 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 7 6 -1.</_>\n        <_>\n          8 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 9 14 -1.</_>\n        <_>\n          3 3 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 9 6 -1.</_>\n        <_>\n          10 10 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 16 4 -1.</_>\n        <_>\n          0 1 8 2 2.</_>\n        <_>\n          8 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 7 -1.</_>\n        <_>\n          16 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 10 6 -1.</_>\n        <_>\n          0 10 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 7 -1.</_>\n        <_>\n          16 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 7 -1.</_>\n        <_>\n          2 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 12 14 -1.</_>\n        <_>\n          11 3 6 7 2.</_>\n        <_>\n          5 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 10 -1.</_>\n        <_>\n          7 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          16 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          2 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 8 -1.</_>\n        <_>\n          9 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 6 -1.</_>\n        <_>\n          8 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 14 -1.</_>\n        <_>\n          1 4 2 7 2.</_>\n        <_>\n          3 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 6 -1.</_>\n        <_>\n          10 1 10 3 2.</_>\n        <_>\n          0 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 6 -1.</_>\n        <_>\n          5 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          0 5 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 8 -1.</_>\n        <_>\n          5 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 16 -1.</_>\n        <_>\n          15 4 2 8 2.</_>\n        <_>\n          13 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 18 -1.</_>\n        <_>\n          6 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 16 -1.</_>\n        <_>\n          15 4 2 8 2.</_>\n        <_>\n          13 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 16 -1.</_>\n        <_>\n          3 4 2 8 2.</_>\n        <_>\n          5 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 9 4 -1.</_>\n        <_>\n          6 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 12 -1.</_>\n        <_>\n          8 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          10 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 18 -1.</_>\n        <_>\n          17 2 3 9 2.</_>\n        <_>\n          14 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 10 8 -1.</_>\n        <_>\n          13 5 5 4 2.</_>\n        <_>\n          8 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 10 8 -1.</_>\n        <_>\n          2 5 5 4 2.</_>\n        <_>\n          7 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 16 12 -1.</_>\n        <_>\n          4 2 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 12 -1.</_>\n        <_>\n          8 2 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 4 7 -1.</_>\n        <_>\n          11 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 7 -1.</_>\n        <_>\n          7 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 4 -1.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 10 -1.</_>\n        <_>\n          6 5 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 10 8 -1.</_>\n        <_>\n          11 10 5 4 2.</_>\n        <_>\n          6 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 6 9 -1.</_>\n        <_>\n          4 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 18 -1.</_>\n        <_>\n          4 0 6 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 9 17 -1.</_>\n        <_>\n          7 1 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 8 -1.</_>\n        <_>\n          11 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 7 -1.</_>\n        <_>\n          8 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 9 -1.</_>\n        <_>\n          5 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 7 4 -1.</_>\n        <_>\n          4 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 10 8 -1.</_>\n        <_>\n          11 10 5 4 2.</_>\n        <_>\n          6 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 14 4 -1.</_>\n        <_>\n          12 7 7 2 2.</_>\n        <_>\n          5 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 7 -1.</_>\n        <_>\n          8 10 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 16 -1.</_>\n        <_>\n          11 2 6 8 2.</_>\n        <_>\n          5 10 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 14 4 -1.</_>\n        <_>\n          1 7 7 2 2.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 15 14 -1.</_>\n        <_>\n          3 12 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 9 9 -1.</_>\n        <_>\n          8 9 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          7 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 11 -1.</_>\n        <_>\n          11 4 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 14 8 -1.</_>\n        <_>\n          8 12 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 11 -1.</_>\n        <_>\n          11 4 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 15 -1.</_>\n        <_>\n          7 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 6 -1.</_>\n        <_>\n          8 2 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 12 14 -1.</_>\n        <_>\n          3 3 6 7 2.</_>\n        <_>\n          9 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 7 -1.</_>\n        <_>\n          9 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 7 -1.</_>\n        <_>\n          9 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 9 -1.</_>\n        <_>\n          8 3 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 6 -1.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 14 3 -1.</_>\n        <_>\n          6 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 12 8 -1.</_>\n        <_>\n          6 12 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 12 -1.</_>\n        <_>\n          6 8 3 6 2.</_>\n        <_>\n          9 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 20 -1.</_>\n        <_>\n          6 10 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 13 -1.</_>\n        <_>\n          10 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 6 -1.</_>\n        <_>\n          8 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 13 -1.</_>\n        <_>\n          10 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 6 -1.</_>\n        <_>\n          8 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 6 7 -1.</_>\n        <_>\n          10 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 7 6 -1.</_>\n        <_>\n          3 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 5 12 -1.</_>\n        <_>\n          12 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 9 4 -1.</_>\n        <_>\n          4 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 14 3 -1.</_>\n        <_>\n          6 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 19 -1.</_>\n        <_>\n          13 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 13 -1.</_>\n        <_>\n          8 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 9 5 -1.</_>\n        <_>\n          13 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 9 5 -1.</_>\n        <_>\n          4 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 9 -1.</_>\n        <_>\n          8 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 5 12 -1.</_>\n        <_>\n          12 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 12 -1.</_>\n        <_>\n          3 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 6 9 -1.</_>\n        <_>\n          10 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 12 4 -1.</_>\n        <_>\n          4 18 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 18 4 -1.</_>\n        <_>\n          11 14 9 2 2.</_>\n        <_>\n          2 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 7 4 -1.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 8 -1.</_>\n        <_>\n          5 14 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 7 4 -1.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 7 4 -1.</_>\n        <_>\n          8 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 6 -1.</_>\n        <_>\n          9 10 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 8 -1.</_>\n        <_>\n          8 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 3 10 -1.</_>\n        <_>\n          8 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 8 14 -1.</_>\n        <_>\n          12 1 4 7 2.</_>\n        <_>\n          8 8 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 19 -1.</_>\n        <_>\n          6 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 10 -1.</_>\n        <_>\n          12 10 3 5 2.</_>\n        <_>\n          9 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 14 -1.</_>\n        <_>\n          0 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 2 14 -1.</_>\n        <_>\n          18 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 2 14 -1.</_>\n        <_>\n          0 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 10 -1.</_>\n        <_>\n          13 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 18 -1.</_>\n        <_>\n          1 9 18 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 4 -1.</_>\n        <_>\n          10 16 9 2 2.</_>\n        <_>\n          1 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 6 -1.</_>\n        <_>\n          5 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 13 9 -1.</_>\n        <_>\n          4 10 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 10 -1.</_>\n        <_>\n          5 5 5 5 2.</_>\n        <_>\n          10 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 8 10 -1.</_>\n        <_>\n          12 4 4 5 2.</_>\n        <_>\n          8 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 4 -1.</_>\n        <_>\n          3 7 7 2 2.</_>\n        <_>\n          10 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 2 -1.</_>\n        <_>\n          1 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 14 3 -1.</_>\n        <_>\n          6 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 13 3 -1.</_>\n        <_>\n          0 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 6 -1.</_>\n        <_>\n          4 4 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 7 6 -1.</_>\n        <_>\n          0 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 6 -1.</_>\n        <_>\n          10 5 8 3 2.</_>\n        <_>\n          2 8 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 15 -1.</_>\n        <_>\n          6 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 7 6 -1.</_>\n        <_>\n          10 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 14 -1.</_>\n        <_>\n          4 0 2 7 2.</_>\n        <_>\n          6 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 10 6 -1.</_>\n        <_>\n          11 3 5 3 2.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 10 6 -1.</_>\n        <_>\n          4 3 5 3 2.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 12 -1.</_>\n        <_>\n          4 8 13 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 7 -1.</_>\n        <_>\n          5 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 9 -1.</_>\n        <_>\n          11 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 13 -1.</_>\n        <_>\n          2 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 9 -1.</_>\n        <_>\n          11 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 8 -1.</_>\n        <_>\n          7 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 15 6 -1.</_>\n        <_>\n          5 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          10 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 4 10 -1.</_>\n        <_>\n          13 6 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 12 5 -1.</_>\n        <_>\n          9 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 4 -1.</_>\n        <_>\n          7 2 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 13 3 -1.</_>\n        <_>\n          3 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 9 6 -1.</_>\n        <_>\n          10 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          0 3 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 11 -1.</_>\n        <_>\n          5 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 17 -1.</_>\n        <_>\n          14 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 9 -1.</_>\n        <_>\n          6 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 6 -1.</_>\n        <_>\n          9 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 7 6 -1.</_>\n        <_>\n          2 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 17 -1.</_>\n        <_>\n          14 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 17 -1.</_>\n        <_>\n          5 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 6 -1.</_>\n        <_>\n          8 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 12 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 5 9 -1.</_>\n        <_>\n          10 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 5 9 -1.</_>\n        <_>\n          5 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 18 -1.</_>\n        <_>\n          9 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 7 4 -1.</_>\n        <_>\n          6 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 4 9 -1.</_>\n        <_>\n          16 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 4 9 -1.</_>\n        <_>\n          2 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 18 -1.</_>\n        <_>\n          16 2 3 9 2.</_>\n        <_>\n          13 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 5 12 -1.</_>\n        <_>\n          2 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 17 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 6 -1.</_>\n        <_>\n          3 3 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 16 9 -1.</_>\n        <_>\n          4 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 16 9 -1.</_>\n        <_>\n          8 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 5 8 -1.</_>\n        <_>\n          11 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 9 -1.</_>\n        <_>\n          0 6 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 10 -1.</_>\n        <_>\n          10 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 18 -1.</_>\n        <_>\n          0 2 3 9 2.</_>\n        <_>\n          3 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 15 -1.</_>\n        <_>\n          9 10 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 13 2 -1.</_>\n        <_>\n          0 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 5 9 -1.</_>\n        <_>\n          11 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 14 6 -1.</_>\n        <_>\n          2 1 7 3 2.</_>\n        <_>\n          9 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 12 -1.</_>\n        <_>\n          12 0 3 6 2.</_>\n        <_>\n          9 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 12 -1.</_>\n        <_>\n          5 0 3 6 2.</_>\n        <_>\n          8 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 6 -1.</_>\n        <_>\n          9 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 6 -1.</_>\n        <_>\n          8 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 10 11 -1.</_>\n        <_>\n          8 3 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 10 11 -1.</_>\n        <_>\n          7 3 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 12 18 -1.</_>\n        <_>\n          8 2 6 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 19 -1.</_>\n        <_>\n          6 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 15 7 2 2.</_>\n        <_>\n          10 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 16 6 -1.</_>\n        <_>\n          4 14 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 6 -1.</_>\n        <_>\n          8 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 14 -1.</_>\n        <_>\n          15 4 2 7 2.</_>\n        <_>\n          13 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 9 -1.</_>\n        <_>\n          3 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 7 -1.</_>\n        <_>\n          12 7 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 3 -1.</_>\n        <_>\n          5 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 9 -1.</_>\n        <_>\n          12 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 8 8 -1.</_>\n        <_>\n          3 12 4 4 2.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 2 -1.</_>\n        <_>\n          2 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 7 6 -1.</_>\n        <_>\n          13 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 5 8 -1.</_>\n        <_>\n          9 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 12 -1.</_>\n        <_>\n          7 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 14 -1.</_>\n        <_>\n          15 4 2 7 2.</_>\n        <_>\n          13 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 14 -1.</_>\n        <_>\n          3 4 2 7 2.</_>\n        <_>\n          5 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 2 -1.</_>\n        <_>\n          3 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          7 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 12 -1.</_>\n        <_>\n          10 10 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 9 5 -1.</_>\n        <_>\n          7 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 16 10 -1.</_>\n        <_>\n          12 4 8 5 2.</_>\n        <_>\n          4 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 16 10 -1.</_>\n        <_>\n          0 4 8 5 2.</_>\n        <_>\n          8 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 12 -1.</_>\n        <_>\n          7 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 13 -1.</_>\n        <_>\n          5 7 5 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 9 8 -1.</_>\n        <_>\n          3 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 2 -1.</_>\n        <_>\n          0 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 4 8 -1.</_>\n        <_>\n          4 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 4 -1.</_>\n        <_>\n          10 6 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 4 -1.</_>\n        <_>\n          3 2 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 9 9 -1.</_>\n        <_>\n          13 0 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 9 9 -1.</_>\n        <_>\n          4 0 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 3 -1.</_>\n        <_>\n          6 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 5 -1.</_>\n        <_>\n          10 4 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 14 4 -1.</_>\n        <_>\n          12 1 7 2 2.</_>\n        <_>\n          5 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 14 4 -1.</_>\n        <_>\n          1 1 7 2 2.</_>\n        <_>\n          8 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 14 -1.</_>\n        <_>\n          0 6 2 7 2.</_>\n        <_>\n          2 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 9 -1.</_>\n        <_>\n          12 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 9 -1.</_>\n        <_>\n          5 12 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 9 -1.</_>\n        <_>\n          8 0 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 5 6 -1.</_>\n        <_>\n          1 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 7 4 -1.</_>\n        <_>\n          11 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 7 8 -1.</_>\n        <_>\n          7 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 3 10 -1.</_>\n        <_>\n          2 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 13 2 -1.</_>\n        <_>\n          7 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 7 4 -1.</_>\n        <_>\n          2 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 10 -1.</_>\n        <_>\n          17 1 3 5 2.</_>\n        <_>\n          14 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 10 -1.</_>\n        <_>\n          0 1 3 5 2.</_>\n        <_>\n          3 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 8 -1.</_>\n        <_>\n          12 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 4 9 -1.</_>\n        <_>\n          8 8 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 4 12 -1.</_>\n        <_>\n          9 1 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 18 -1.</_>\n        <_>\n          10 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 7 12 -1.</_>\n        <_>\n          0 9 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 9 -1.</_>\n        <_>\n          11 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 14 4 -1.</_>\n        <_>\n          3 9 7 2 2.</_>\n        <_>\n          10 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 17 3 -1.</_>\n        <_>\n          3 8 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 8 -1.</_>\n        <_>\n          10 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 10 -1.</_>\n        <_>\n          0 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 9 -1.</_>\n        <_>\n          2 6 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 8 -1.</_>\n        <_>\n          4 4 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 15 -1.</_>\n        <_>\n          5 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 7 -1.</_>\n        <_>\n          12 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 7 -1.</_>\n        <_>\n          6 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 8 8 -1.</_>\n        <_>\n          2 8 4 4 2.</_>\n        <_>\n          6 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 10 -1.</_>\n        <_>\n          10 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 5 6 -1.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 12 -1.</_>\n        <_>\n          4 7 12 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 9 10 -1.</_>\n        <_>\n          11 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 12 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 9 18 -1.</_>\n        <_>\n          11 7 9 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 10 -1.</_>\n        <_>\n          4 8 6 5 2.</_>\n        <_>\n          10 13 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 10 -1.</_>\n        <_>\n          11 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 14 -1.</_>\n        <_>\n          6 0 4 7 2.</_>\n        <_>\n          10 7 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 8 8 -1.</_>\n        <_>\n          12 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 5 -1.</_>\n        <_>\n          8 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 8 -1.</_>\n        <_>\n          5 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 10 5 -1.</_>\n        <_>\n          5 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 15 -1.</_>\n        <_>\n          6 5 6 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 3 -1.</_>\n        <_>\n          10 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 15 3 -1.</_>\n        <_>\n          5 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 6 -1.</_>\n        <_>\n          11 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 8 -1.</_>\n        <_>\n          15 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          0 0 10 2 2.</_>\n        <_>\n          10 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 14 -1.</_>\n        <_>\n          10 5 3 7 2.</_>\n        <_>\n          7 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 7 4 -1.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 9 -1.</_>\n        <_>\n          11 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 9 -1.</_>\n        <_>\n          4 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_>\n        <_>\n          5 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 8 -1.</_>\n        <_>\n          0 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 4 8 -1.</_>\n        <_>\n          4 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 4 14 -1.</_>\n        <_>\n          16 5 2 7 2.</_>\n        <_>\n          14 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 4 14 -1.</_>\n        <_>\n          2 5 2 7 2.</_>\n        <_>\n          4 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 6 -1.</_>\n        <_>\n          8 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 14 -1.</_>\n        <_>\n          7 2 2 7 2.</_>\n        <_>\n          9 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 14 4 -1.</_>\n        <_>\n          12 7 7 2 2.</_>\n        <_>\n          5 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 14 4 -1.</_>\n        <_>\n          1 7 7 2 2.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 14 10 -1.</_>\n        <_>\n          2 6 7 5 2.</_>\n        <_>\n          9 11 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 11 -1.</_>\n        <_>\n          13 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 15 6 -1.</_>\n        <_>\n          7 13 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 12 4 -1.</_>\n        <_>\n          9 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 9 5 -1.</_>\n        <_>\n          6 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 17 18 -1.</_>\n        <_>\n          2 9 17 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 12 -1.</_>\n        <_>\n          1 4 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 11 -1.</_>\n        <_>\n          13 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 5 -1.</_>\n        <_>\n          6 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 2 -1.</_>\n        <_>\n          3 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          9 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 3 -1.</_>\n        <_>\n          6 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 14 -1.</_>\n        <_>\n          12 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 13 -1.</_>\n        <_>\n          8 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 2 -1.</_>\n        <_>\n          2 8 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 4 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 10 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 8 -1.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 11 12 -1.</_>\n        <_>\n          0 10 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 4 14 -1.</_>\n        <_>\n          13 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 4 14 -1.</_>\n        <_>\n          3 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 10 -1.</_>\n        <_>\n          13 2 3 5 2.</_>\n        <_>\n          10 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          4 9 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 10 -1.</_>\n        <_>\n          4 2 3 5 2.</_>\n        <_>\n          7 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 5 -1.</_>\n        <_>\n          8 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 8 -1.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 6 9 -1.</_>\n        <_>\n          12 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 13 -1.</_>\n        <_>\n          9 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 15 -1.</_>\n        <_>\n          11 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 15 -1.</_>\n        <_>\n          8 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 13 -1.</_>\n        <_>\n          8 7 6 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 14 2 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 15 3 -1.</_>\n        <_>\n          10 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 15 3 -1.</_>\n        <_>\n          5 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 8 5 -1.</_>\n        <_>\n          11 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 8 8 -1.</_>\n        <_>\n          3 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 10 -1.</_>\n        <_>\n          10 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 12 -1.</_>\n        <_>\n          8 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 2 -1.</_>\n        <_>\n          0 12 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 6 9 -1.</_>\n        <_>\n          2 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 5 -1.</_>\n        <_>\n          8 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 5 -1.</_>\n        <_>\n          6 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 2 14 -1.</_>\n        <_>\n          11 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 12 -1.</_>\n        <_>\n          7 8 3 6 2.</_>\n        <_>\n          10 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 17 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 19 -1.</_>\n        <_>\n          6 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 10 -1.</_>\n        <_>\n          10 4 3 5 2.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 15 4 -1.</_>\n        <_>\n          7 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 15 -1.</_>\n        <_>\n          12 1 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 4 -1.</_>\n        <_>\n          5 10 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 5 8 -1.</_>\n        <_>\n          6 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 8 -1.</_>\n        <_>\n          10 5 6 4 2.</_>\n        <_>\n          4 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 15 -1.</_>\n        <_>\n          6 1 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 12 -1.</_>\n        <_>\n          11 8 3 6 2.</_>\n        <_>\n          8 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 6 8 -1.</_>\n        <_>\n          5 6 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 2 14 -1.</_>\n        <_>\n          17 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 2 14 -1.</_>\n        <_>\n          2 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 13 -1.</_>\n        <_>\n          12 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 13 -1.</_>\n        <_>\n          7 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 13 -1.</_>\n        <_>\n          16 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 13 -1.</_>\n        <_>\n          2 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 3 -1.</_>\n        <_>\n          5 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 3 -1.</_>\n        <_>\n          8 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 12 -1.</_>\n        <_>\n          10 8 3 6 2.</_>\n        <_>\n          7 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 7 -1.</_>\n        <_>\n          7 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 4 12 -1.</_>\n        <_>\n          12 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 4 12 -1.</_>\n        <_>\n          4 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 12 -1.</_>\n        <_>\n          3 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 7 4 -1.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 7 -1.</_>\n        <_>\n          12 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 3 -1.</_>\n        <_>\n          8 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 12 -1.</_>\n        <_>\n          2 8 15 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 6 -1.</_>\n        <_>\n          11 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 3 -1.</_>\n        <_>\n          2 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 9 -1.</_>\n        <_>\n          10 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 12 6 -1.</_>\n        <_>\n          14 14 6 3 2.</_>\n        <_>\n          8 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 6 -1.</_>\n        <_>\n          6 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 9 4 -1.</_>\n        <_>\n          9 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 8 -1.</_>\n        <_>\n          2 15 18 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 10 8 -1.</_>\n        <_>\n          0 12 5 4 2.</_>\n        <_>\n          5 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 7 -1.</_>\n        <_>\n          13 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 5 9 -1.</_>\n        <_>\n          12 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 5 9 -1.</_>\n        <_>\n          3 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 11 6 -1.</_>\n        <_>\n          5 8 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 7 -1.</_>\n        <_>\n          6 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 5 -1.</_>\n        <_>\n          7 8 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 7 -1.</_>\n        <_>\n          7 3 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 8 -1.</_>\n        <_>\n          7 15 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          10 14 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 11 9 -1.</_>\n        <_>\n          5 9 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 8 -1.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 6 -1.</_>\n        <_>\n          6 8 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 7 -1.</_>\n        <_>\n          13 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 4 7 -1.</_>\n        <_>\n          5 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 10 -1.</_>\n        <_>\n          6 10 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 12 16 -1.</_>\n        <_>\n          14 4 6 8 2.</_>\n        <_>\n          8 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 16 -1.</_>\n        <_>\n          0 4 6 8 2.</_>\n        <_>\n          6 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 7 -1.</_>\n        <_>\n          10 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 14 -1.</_>\n        <_>\n          8 6 2 7 2.</_>\n        <_>\n          10 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 18 -1.</_>\n        <_>\n          10 2 5 9 2.</_>\n        <_>\n          5 11 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 7 6 -1.</_>\n        <_>\n          6 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 5 12 -1.</_>\n        <_>\n          9 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 19 15 -1.</_>\n        <_>\n          1 10 19 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 7 4 -1.</_>\n        <_>\n          0 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          11 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 10 6 -1.</_>\n        <_>\n          4 0 5 3 2.</_>\n        <_>\n          9 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 7 6 -1.</_>\n        <_>\n          11 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 5 -1.</_>\n        <_>\n          8 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 11 4 -1.</_>\n        <_>\n          9 6 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 10 -1.</_>\n        <_>\n          2 1 3 5 2.</_>\n        <_>\n          5 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 8 -1.</_>\n        <_>\n          0 5 9 4 2.</_>\n        <_>\n          9 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 5 12 -1.</_>\n        <_>\n          9 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 2 -1.</_>\n        <_>\n          0 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 3 13 -1.</_>\n        <_>\n          11 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 14 -1.</_>\n        <_>\n          8 3 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 8 -1.</_>\n        <_>\n          9 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 12 -1.</_>\n        <_>\n          4 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 17 2 -1.</_>\n        <_>\n          3 4 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 6 -1.</_>\n        <_>\n          2 2 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 4 -1.</_>\n        <_>\n          8 0 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 10 6 -1.</_>\n        <_>\n          1 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 4 12 -1.</_>\n        <_>\n          3 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 15 5 -1.</_>\n        <_>\n          9 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 14 3 -1.</_>\n        <_>\n          0 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          12 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 6 -1.</_>\n        <_>\n          6 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 14 12 -1.</_>\n        <_>\n          1 7 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 15 5 -1.</_>\n        <_>\n          9 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 15 5 -1.</_>\n        <_>\n          6 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 7 -1.</_>\n        <_>\n          11 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 5 -1.</_>\n        <_>\n          8 10 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 2 -1.</_>\n        <_>\n          7 2 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 2 -1.</_>\n        <_>\n          2 6 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 14 -1.</_>\n        <_>\n          15 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 14 -1.</_>\n        <_>\n          4 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          16 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 13 -1.</_>\n        <_>\n          2 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 7 -1.</_>\n        <_>\n          2 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 8 -1.</_>\n        <_>\n          0 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 16 -1.</_>\n        <_>\n          0 1 10 8 2.</_>\n        <_>\n          10 9 10 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 16 -1.</_>\n        <_>\n          12 1 5 8 2.</_>\n        <_>\n          7 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 16 14 -1.</_>\n        <_>\n          0 1 8 7 2.</_>\n        <_>\n          8 8 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 6 -1.</_>\n        <_>\n          14 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 6 -1.</_>\n        <_>\n          1 5 5 3 2.</_>\n        <_>\n          6 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 4 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 8 -1.</_>\n        <_>\n          10 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 3 -1.</_>\n        <_>\n          0 4 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          0 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 17 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 6 -1.</_>\n        <_>\n          12 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 18 4 -1.</_>\n        <_>\n          0 14 9 2 2.</_>\n        <_>\n          9 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 4 9 -1.</_>\n        <_>\n          14 4 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 8 -1.</_>\n        <_>\n          2 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 5 9 -1.</_>\n        <_>\n          1 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 9 5 -1.</_>\n        <_>\n          8 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 16 -1.</_>\n        <_>\n          3 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 7 -1.</_>\n        <_>\n          10 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 20 -1.</_>\n        <_>\n          13 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 20 -1.</_>\n        <_>\n          6 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 7 -1.</_>\n        <_>\n          14 13 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          8 5 2 7 2.</_>\n        <_>\n          10 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 12 5 -1.</_>\n        <_>\n          12 14 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 5 -1.</_>\n        <_>\n          4 14 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 3 -1.</_>\n        <_>\n          6 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 10 -1.</_>\n        <_>\n          16 10 3 5 2.</_>\n        <_>\n          13 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 12 -1.</_>\n        <_>\n          0 5 10 6 2.</_>\n        <_>\n          10 11 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 15 2 -1.</_>\n        <_>\n          1 19 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 10 -1.</_>\n        <_>\n          16 10 3 5 2.</_>\n        <_>\n          13 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 6 -1.</_>\n        <_>\n          0 16 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 10 -1.</_>\n        <_>\n          16 10 3 5 2.</_>\n        <_>\n          13 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 2 -1.</_>\n        <_>\n          3 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 3 -1.</_>\n        <_>\n          0 8 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 10 8 -1.</_>\n        <_>\n          2 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 6 -1.</_>\n        <_>\n          8 8 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 11 6 -1.</_>\n        <_>\n          0 8 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 17 2 -1.</_>\n        <_>\n          3 11 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 10 -1.</_>\n        <_>\n          1 10 3 5 2.</_>\n        <_>\n          4 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 3 -1.</_>\n        <_>\n          7 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          3 14 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 7 8 -1.</_>\n        <_>\n          8 4 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 7 6 -1.</_>\n        <_>\n          3 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 13 -1.</_>\n        <_>\n          10 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 5 6 -1.</_>\n        <_>\n          0 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 15 4 -1.</_>\n        <_>\n          10 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 15 4 -1.</_>\n        <_>\n          5 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 3 10 -1.</_>\n        <_>\n          16 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 15 -1.</_>\n        <_>\n          1 5 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 4 13 -1.</_>\n        <_>\n          14 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 15 2 -1.</_>\n        <_>\n          4 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          10 0 4 6 2.</_>\n        <_>\n          6 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 4 -1.</_>\n        <_>\n          1 1 8 2 2.</_>\n        <_>\n          9 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 3 13 -1.</_>\n        <_>\n          18 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 3 13 -1.</_>\n        <_>\n          1 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 14 -1.</_>\n        <_>\n          12 2 3 7 2.</_>\n        <_>\n          9 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 7 -1.</_>\n        <_>\n          9 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 12 -1.</_>\n        <_>\n          10 8 4 6 2.</_>\n        <_>\n          6 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 16 3 -1.</_>\n        <_>\n          2 14 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 10 -1.</_>\n        <_>\n          6 8 4 5 2.</_>\n        <_>\n          10 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 12 3 -1.</_>\n        <_>\n          5 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 18 -1.</_>\n        <_>\n          8 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 12 -1.</_>\n        <_>\n          9 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 10 -1.</_>\n        <_>\n          7 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 7 6 -1.</_>\n        <_>\n          10 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 14 -1.</_>\n        <_>\n          0 6 2 7 2.</_>\n        <_>\n          2 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 5 -1.</_>\n        <_>\n          13 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 5 -1.</_>\n        <_>\n          4 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 4 7 -1.</_>\n        <_>\n          14 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 6 5 -1.</_>\n        <_>\n          4 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 12 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 14 3 -1.</_>\n        <_>\n          0 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 6 -1.</_>\n        <_>\n          8 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 12 -1.</_>\n        <_>\n          6 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 8 -1.</_>\n        <_>\n          2 4 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 17 3 -1.</_>\n        <_>\n          1 1 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 2 -1.</_>\n        <_>\n          5 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 6 -1.</_>\n        <_>\n          3 14 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 4 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 2 -1.</_>\n        <_>\n          0 2 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 3 13 -1.</_>\n        <_>\n          16 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 3 13 -1.</_>\n        <_>\n          3 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 4 -1.</_>\n        <_>\n          8 4 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 3 18 -1.</_>\n        <_>\n          6 2 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 3 -1.</_>\n        <_>\n          0 11 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 13 3 -1.</_>\n        <_>\n          7 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 2 -1.</_>\n        <_>\n          0 16 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 5 -1.</_>\n        <_>\n          7 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 8 -1.</_>\n        <_>\n          10 11 8 4 2.</_>\n        <_>\n          2 15 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 12 -1.</_>\n        <_>\n          2 6 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 11 5 3 2.</_>\n        <_>\n          10 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 6 -1.</_>\n        <_>\n          10 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          5 5 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 3 -1.</_>\n        <_>\n          4 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 3 -1.</_>\n        <_>\n          1 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 4 -1.</_>\n        <_>\n          12 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 4 -1.</_>\n        <_>\n          4 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 8 -1.</_>\n        <_>\n          10 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 8 -1.</_>\n        <_>\n          5 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 3 -1.</_>\n        <_>\n          3 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 4 -1.</_>\n        <_>\n          0 7 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 12 -1.</_>\n        <_>\n          7 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 15 -1.</_>\n        <_>\n          10 0 5 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 10 6 -1.</_>\n        <_>\n          11 1 5 3 2.</_>\n        <_>\n          6 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 10 6 -1.</_>\n        <_>\n          4 1 5 3 2.</_>\n        <_>\n          9 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 3 -1.</_>\n        <_>\n          7 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 12 -1.</_>\n        <_>\n          7 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 16 -1.</_>\n        <_>\n          10 4 2 8 2.</_>\n        <_>\n          8 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 14 -1.</_>\n        <_>\n          8 6 2 7 2.</_>\n        <_>\n          10 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 9 -1.</_>\n        <_>\n          3 3 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 17 6 -1.</_>\n        <_>\n          3 7 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 15 19 -1.</_>\n        <_>\n          8 1 5 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 3 -1.</_>\n        <_>\n          3 2 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 3 -1.</_>\n        <_>\n          8 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 2 -1.</_>\n        <_>\n          6 8 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 15 3 -1.</_>\n        <_>\n          2 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 7 4 -1.</_>\n        <_>\n          8 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 15 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 13 3 -1.</_>\n        <_>\n          6 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 17 12 -1.</_>\n        <_>\n          1 9 17 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 3 -1.</_>\n        <_>\n          6 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 8 -1.</_>\n        <_>\n          2 9 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 5 14 -1.</_>\n        <_>\n          9 12 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 16 -1.</_>\n        <_>\n          9 4 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 6 -1.</_>\n        <_>\n          10 4 7 3 2.</_>\n        <_>\n          3 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 7 6 -1.</_>\n        <_>\n          0 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          10 5 6 3 2.</_>\n        <_>\n          4 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 19 6 -1.</_>\n        <_>\n          0 15 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 7 6 -1.</_>\n        <_>\n          3 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 10 -1.</_>\n        <_>\n          1 3 4 5 2.</_>\n        <_>\n          5 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 7 -1.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 14 -1.</_>\n        <_>\n          11 0 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 19 -1.</_>\n        <_>\n          7 1 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 9 -1.</_>\n        <_>\n          8 8 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 8 -1.</_>\n        <_>\n          4 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 8 -1.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 10 -1.</_>\n        <_>\n          10 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 10 -1.</_>\n        <_>\n          4 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 6 -1.</_>\n        <_>\n          1 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 13 -1.</_>\n        <_>\n          13 1 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 3 -1.</_>\n        <_>\n          3 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 10 6 -1.</_>\n        <_>\n          4 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 14 -1.</_>\n        <_>\n          13 1 2 7 2.</_>\n        <_>\n          11 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 2 -1.</_>\n        <_>\n          0 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 6 -1.</_>\n        <_>\n          7 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 18 -1.</_>\n        <_>\n          0 6 16 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 5 9 -1.</_>\n        <_>\n          14 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 10 -1.</_>\n        <_>\n          1 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 2 14 -1.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 2 14 -1.</_>\n        <_>\n          2 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 5 9 -1.</_>\n        <_>\n          14 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 5 9 -1.</_>\n        <_>\n          1 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 9 9 -1.</_>\n        <_>\n          8 7 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 16 -1.</_>\n        <_>\n          14 4 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 16 -1.</_>\n        <_>\n          5 4 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 4 12 -1.</_>\n        <_>\n          12 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 14 -1.</_>\n        <_>\n          7 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 16 -1.</_>\n        <_>\n          15 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 16 -1.</_>\n        <_>\n          1 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 8 6 -1.</_>\n        <_>\n          12 11 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 2 -1.</_>\n        <_>\n          7 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 5 -1.</_>\n        <_>\n          0 0 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 0 6 3 2.</_>\n        <_>\n          10 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 5 9 -1.</_>\n        <_>\n          14 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 2 -1.</_>\n        <_>\n          1 7 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 6 -1.</_>\n        <_>\n          7 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 10 -1.</_>\n        <_>\n          1 2 9 5 2.</_>\n        <_>\n          10 7 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 8 8 -1.</_>\n        <_>\n          13 3 4 4 2.</_>\n        <_>\n          9 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 4 -1.</_>\n        <_>\n          9 1 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 7 -1.</_>\n        <_>\n          8 5 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 7 -1.</_>\n        <_>\n          9 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 9 7 -1.</_>\n        <_>\n          5 13 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 11 -1.</_>\n        <_>\n          6 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 6 -1.</_>\n        <_>\n          7 7 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 5 9 -1.</_>\n        <_>\n          11 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 5 9 -1.</_>\n        <_>\n          4 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 5 9 -1.</_>\n        <_>\n          14 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 16 -1.</_>\n        <_>\n          8 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 3 -1.</_>\n        <_>\n          3 16 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 6 -1.</_>\n        <_>\n          10 1 10 3 2.</_>\n        <_>\n          0 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 5 -1.</_>\n        <_>\n          8 0 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 14 -1.</_>\n        <_>\n          14 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 14 -1.</_>\n        <_>\n          5 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 5 -1.</_>\n        <_>\n          8 0 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 5 -1.</_>\n        <_>\n          6 0 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 14 -1.</_>\n        <_>\n          13 1 2 7 2.</_>\n        <_>\n          11 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 14 -1.</_>\n        <_>\n          5 1 2 7 2.</_>\n        <_>\n          7 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 13 3 -1.</_>\n        <_>\n          0 8 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 3 13 -1.</_>\n        <_>\n          17 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 3 13 -1.</_>\n        <_>\n          2 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 5 8 -1.</_>\n        <_>\n          2 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 4 -1.</_>\n        <_>\n          6 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_>\n        <_>\n          5 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 16 -1.</_>\n        <_>\n          15 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 9 9 -1.</_>\n        <_>\n          7 0 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 8 -1.</_>\n        <_>\n          3 12 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 10 -1.</_>\n        <_>\n          2 10 8 5 2.</_>\n        <_>\n          10 15 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          10 5 6 3 2.</_>\n        <_>\n          4 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 8 -1.</_>\n        <_>\n          5 5 5 4 2.</_>\n        <_>\n          10 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 6 -1.</_>\n        <_>\n          10 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 12 5 -1.</_>\n        <_>\n          5 15 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          5 9 5 4 2.</_>\n        <_>\n          10 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 18 13 -1.</_>\n        <_>\n          8 7 6 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 5 -1.</_>\n        <_>\n          9 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 8 -1.</_>\n        <_>\n          5 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 16 6 -1.</_>\n        <_>\n          3 14 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 14 3 -1.</_>\n        <_>\n          4 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 9 -1.</_>\n        <_>\n          3 9 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 18 -1.</_>\n        <_>\n          7 9 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 10 -1.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 16 4 -1.</_>\n        <_>\n          3 5 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 5 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 6 -1.</_>\n        <_>\n          4 9 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 9 4 -1.</_>\n        <_>\n          8 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 16 3 -1.</_>\n        <_>\n          1 6 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 13 3 -1.</_>\n        <_>\n          5 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 3 -1.</_>\n        <_>\n          0 2 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 4 -1.</_>\n        <_>\n          7 1 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 2 18 -1.</_>\n        <_>\n          8 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          5 2 3 5 2.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 9 8 -1.</_>\n        <_>\n          4 13 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 19 4 -1.</_>\n        <_>\n          1 17 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 7 4 -1.</_>\n        <_>\n          5 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 10 -1.</_>\n        <_>\n          9 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 10 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 12 10 -1.</_>\n        <_>\n          7 5 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 10 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_>\n        <_>\n          5 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 5 9 -1.</_>\n        <_>\n          0 11 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 9 -1.</_>\n        <_>\n          15 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 3 -1.</_>\n        <_>\n          1 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 9 -1.</_>\n        <_>\n          15 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 2 -1.</_>\n        <_>\n          0 13 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 9 -1.</_>\n        <_>\n          15 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 5 9 -1.</_>\n        <_>\n          0 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 10 -1.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 18 -1.</_>\n        <_>\n          3 9 13 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 14 -1.</_>\n        <_>\n          12 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 14 -1.</_>\n        <_>\n          5 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 10 -1.</_>\n        <_>\n          10 8 8 5 2.</_>\n        <_>\n          2 13 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 12 9 -1.</_>\n        <_>\n          10 3 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 5 -1.</_>\n        <_>\n          7 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 12 8 -1.</_>\n        <_>\n          11 1 6 4 2.</_>\n        <_>\n          5 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          5 6 3 5 2.</_>\n        <_>\n          8 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 9 -1.</_>\n        <_>\n          2 10 9 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 4 -1.</_>\n        <_>\n          5 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 3 -1.</_>\n        <_>\n          6 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 3 -1.</_>\n        <_>\n          4 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 4 -1.</_>\n        <_>\n          5 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 10 -1.</_>\n        <_>\n          10 4 8 5 2.</_>\n        <_>\n          2 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 2 -1.</_>\n        <_>\n          0 3 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 6 7 -1.</_>\n        <_>\n          5 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 6 -1.</_>\n        <_>\n          3 1 5 3 2.</_>\n        <_>\n          8 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 5 9 -1.</_>\n        <_>\n          12 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 7 -1.</_>\n        <_>\n          8 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 12 -1.</_>\n        <_>\n          1 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 3 -1.</_>\n        <_>\n          6 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 3 -1.</_>\n        <_>\n          3 6 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 7 8 -1.</_>\n        <_>\n          8 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 7 -1.</_>\n        <_>\n          2 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 3 -1.</_>\n        <_>\n          4 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 13 2 -1.</_>\n        <_>\n          2 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 4 -1.</_>\n        <_>\n          2 1 8 2 2.</_>\n        <_>\n          10 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 8 6 -1.</_>\n        <_>\n          9 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 5 -1.</_>\n        <_>\n          7 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 8 -1.</_>\n        <_>\n          11 6 4 4 2.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          7 5 3 5 2.</_>\n        <_>\n          10 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 4 -1.</_>\n        <_>\n          10 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 4 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 14 6 -1.</_>\n        <_>\n          4 5 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 3 -1.</_>\n        <_>\n          0 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 12 5 -1.</_>\n        <_>\n          8 15 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 6 -1.</_>\n        <_>\n          12 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 17 3 -1.</_>\n        <_>\n          0 7 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 7 -1.</_>\n        <_>\n          11 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 14 2 -1.</_>\n        <_>\n          0 13 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 7 -1.</_>\n        <_>\n          12 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 14 -1.</_>\n        <_>\n          10 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 6 -1.</_>\n        <_>\n          11 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 12 -1.</_>\n        <_>\n          0 9 20 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 11 -1.</_>\n        <_>\n          9 6 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 11 -1.</_>\n        <_>\n          3 1 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 5 12 -1.</_>\n        <_>\n          9 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          0 3 10 2 2.</_>\n        <_>\n          10 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 6 -1.</_>\n        <_>\n          15 0 5 3 2.</_>\n        <_>\n          10 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 10 6 -1.</_>\n        <_>\n          4 0 5 3 2.</_>\n        <_>\n          9 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 7 4 -1.</_>\n        <_>\n          10 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 7 4 -1.</_>\n        <_>\n          3 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 7 6 -1.</_>\n        <_>\n          11 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 4 -1.</_>\n        <_>\n          2 8 7 2 2.</_>\n        <_>\n          9 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_>\n        <_>\n          5 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 4 14 -1.</_>\n        <_>\n          16 5 2 7 2.</_>\n        <_>\n          14 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 4 14 -1.</_>\n        <_>\n          16 5 2 7 2.</_>\n        <_>\n          14 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 4 14 -1.</_>\n        <_>\n          2 5 2 7 2.</_>\n        <_>\n          4 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 12 -1.</_>\n        <_>\n          11 5 9 6 2.</_>\n        <_>\n          2 11 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 5 -1.</_>\n        <_>\n          6 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 20 -1.</_>\n        <_>\n          10 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 16 -1.</_>\n        <_>\n          1 8 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 4 -1.</_>\n        <_>\n          6 3 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 5 16 -1.</_>\n        <_>\n          8 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 3 12 -1.</_>\n        <_>\n          17 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 3 -1.</_>\n        <_>\n          1 4 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 12 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 10 -1.</_>\n        <_>\n          8 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 3 -1.</_>\n        <_>\n          4 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 3 12 -1.</_>\n        <_>\n          0 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 6 -1.</_>\n        <_>\n          7 13 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 4 7 -1.</_>\n        <_>\n          9 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 5 -1.</_>\n        <_>\n          11 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 9 5 -1.</_>\n        <_>\n          6 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 10 -1.</_>\n        <_>\n          14 10 4 5 2.</_>\n        <_>\n          10 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 10 -1.</_>\n        <_>\n          2 10 4 5 2.</_>\n        <_>\n          6 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 7 6 -1.</_>\n        <_>\n          3 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 5 8 -1.</_>\n        <_>\n          8 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          7 4 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 7 6 -1.</_>\n        <_>\n          10 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 3 -1.</_>\n        <_>\n          7 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 4 -1.</_>\n        <_>\n          1 3 9 2 2.</_>\n        <_>\n          10 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 8 -1.</_>\n        <_>\n          10 1 4 4 2.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 18 6 -1.</_>\n        <_>\n          11 4 9 3 2.</_>\n        <_>\n          2 7 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 8 8 -1.</_>\n        <_>\n          1 5 4 4 2.</_>\n        <_>\n          5 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 13 -1.</_>\n        <_>\n          14 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 13 -1.</_>\n        <_>\n          5 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 12 3 -1.</_>\n        <_>\n          7 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 12 3 -1.</_>\n        <_>\n          7 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 7 -1.</_>\n        <_>\n          9 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 12 -1.</_>\n        <_>\n          7 2 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 12 -1.</_>\n        <_>\n          12 5 3 6 2.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 12 -1.</_>\n        <_>\n          5 5 3 6 2.</_>\n        <_>\n          8 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 14 3 -1.</_>\n        <_>\n          5 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 12 -1.</_>\n        <_>\n          1 3 9 6 2.</_>\n        <_>\n          10 9 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          10 11 7 2 2.</_>\n        <_>\n          3 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 14 -1.</_>\n        <_>\n          4 6 2 7 2.</_>\n        <_>\n          6 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 7 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 7 -1.</_>\n        <_>\n          7 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 4 -1.</_>\n        <_>\n          7 3 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          10 8 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 13 -1.</_>\n        <_>\n          9 4 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 7 6 -1.</_>\n        <_>\n          10 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 7 6 -1.</_>\n        <_>\n          3 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 3 -1.</_>\n        <_>\n          2 1 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 7 4 -1.</_>\n        <_>\n          2 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 16 8 -1.</_>\n        <_>\n          12 7 8 4 2.</_>\n        <_>\n          4 11 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 16 8 -1.</_>\n        <_>\n          0 7 8 4 2.</_>\n        <_>\n          8 11 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 10 6 -1.</_>\n        <_>\n          12 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 10 6 -1.</_>\n        <_>\n          3 12 5 3 2.</_>\n        <_>\n          8 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 8 -1.</_>\n        <_>\n          4 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 3 -1.</_>\n        <_>\n          2 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 18 4 -1.</_>\n        <_>\n          11 3 9 2 2.</_>\n        <_>\n          2 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 18 -1.</_>\n        <_>\n          5 6 10 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 15 -1.</_>\n        <_>\n          14 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 15 -1.</_>\n        <_>\n          5 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 10 -1.</_>\n        <_>\n          16 4 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 10 -1.</_>\n        <_>\n          2 4 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          10 5 2 7 2.</_>\n        <_>\n          8 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 12 -1.</_>\n        <_>\n          4 6 6 6 2.</_>\n        <_>\n          10 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 19 -1.</_>\n        <_>\n          10 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 3 17 -1.</_>\n        <_>\n          3 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 18 4 -1.</_>\n        <_>\n          8 7 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 6 -1.</_>\n        <_>\n          1 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 9 8 -1.</_>\n        <_>\n          12 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 15 -1.</_>\n        <_>\n          0 5 20 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 6 -1.</_>\n        <_>\n          3 4 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 3 15 -1.</_>\n        <_>\n          17 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 14 4 -1.</_>\n        <_>\n          2 16 7 2 2.</_>\n        <_>\n          9 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 3 15 -1.</_>\n        <_>\n          17 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 8 8 -1.</_>\n        <_>\n          3 0 4 4 2.</_>\n        <_>\n          7 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 14 3 -1.</_>\n        <_>\n          5 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 16 4 -1.</_>\n        <_>\n          1 11 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 8 -1.</_>\n        <_>\n          8 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 3 15 -1.</_>\n        <_>\n          2 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 6 8 -1.</_>\n        <_>\n          16 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 8 -1.</_>\n        <_>\n          2 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 12 -1.</_>\n        <_>\n          17 8 3 6 2.</_>\n        <_>\n          14 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          0 8 3 6 2.</_>\n        <_>\n          3 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 20 -1.</_>\n        <_>\n          16 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 20 -1.</_>\n        <_>\n          3 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 8 4 -1.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 10 -1.</_>\n        <_>\n          9 9 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 9 8 -1.</_>\n        <_>\n          12 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 8 -1.</_>\n        <_>\n          5 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 15 -1.</_>\n        <_>\n          14 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 9 5 -1.</_>\n        <_>\n          4 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 19 -1.</_>\n        <_>\n          10 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 19 -1.</_>\n        <_>\n          9 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 10 10 -1.</_>\n        <_>\n          6 3 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 5 -1.</_>\n        <_>\n          9 0 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 10 16 -1.</_>\n        <_>\n          13 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 8 4 -1.</_>\n        <_>\n          8 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 9 4 -1.</_>\n        <_>\n          9 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 15 -1.</_>\n        <_>\n          14 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 15 -1.</_>\n        <_>\n          4 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 17 -1.</_>\n        <_>\n          14 0 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 17 -1.</_>\n        <_>\n          3 0 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 17 2 -1.</_>\n        <_>\n          3 9 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 4 -1.</_>\n        <_>\n          6 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          4 4 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 3 -1.</_>\n        <_>\n          1 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 19 12 -1.</_>\n        <_>\n          1 9 19 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 13 15 -1.</_>\n        <_>\n          2 8 13 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 15 6 -1.</_>\n        <_>\n          10 1 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 3 -1.</_>\n        <_>\n          6 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          3 14 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 2 -1.</_>\n        <_>\n          7 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 5 15 -1.</_>\n        <_>\n          14 10 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 5 15 -1.</_>\n        <_>\n          1 10 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 17 -1.</_>\n        <_>\n          10 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 8 -1.</_>\n        <_>\n          4 11 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 2 14 -1.</_>\n        <_>\n          5 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 4 8 -1.</_>\n        <_>\n          9 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 9 15 -1.</_>\n        <_>\n          3 10 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 12 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 14 -1.</_>\n        <_>\n          4 3 3 7 2.</_>\n        <_>\n          7 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 10 -1.</_>\n        <_>\n          9 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 8 -1.</_>\n        <_>\n          0 4 10 4 2.</_>\n        <_>\n          10 8 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 6 -1.</_>\n        <_>\n          11 11 5 3 2.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 8 8 -1.</_>\n        <_>\n          2 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 14 2 -1.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 14 2 -1.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 18 12 -1.</_>\n        <_>\n          8 4 6 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 8 -1.</_>\n        <_>\n          9 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 12 -1.</_>\n        <_>\n          12 3 3 6 2.</_>\n        <_>\n          9 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 5 9 -1.</_>\n        <_>\n          6 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 8 -1.</_>\n        <_>\n          10 1 10 4 2.</_>\n        <_>\n          0 5 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 17 -1.</_>\n        <_>\n          8 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 4 8 -1.</_>\n        <_>\n          16 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 4 8 -1.</_>\n        <_>\n          2 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 7 -1.</_>\n        <_>\n          11 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 11 -1.</_>\n        <_>\n          8 6 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 4 -1.</_>\n        <_>\n          5 6 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 11 -1.</_>\n        <_>\n          14 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 3 -1.</_>\n        <_>\n          0 12 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 11 -1.</_>\n        <_>\n          14 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 11 -1.</_>\n        <_>\n          4 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 5 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 3 -1.</_>\n        <_>\n          2 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 2 -1.</_>\n        <_>\n          4 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 20 2 -1.</_>\n        <_>\n          0 19 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 14 -1.</_>\n        <_>\n          10 0 4 7 2.</_>\n        <_>\n          6 7 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 12 -1.</_>\n        <_>\n          2 2 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 9 6 -1.</_>\n        <_>\n          9 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 7 4 -1.</_>\n        <_>\n          2 2 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 10 -1.</_>\n        <_>\n          5 0 3 5 2.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 13 -1.</_>\n        <_>\n          18 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 13 -1.</_>\n        <_>\n          1 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 4 13 -1.</_>\n        <_>\n          16 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 6 -1.</_>\n        <_>\n          6 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 6 -1.</_>\n        <_>\n          11 11 5 3 2.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 5 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 15 -1.</_>\n        <_>\n          10 3 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 15 -1.</_>\n        <_>\n          8 3 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 13 2 -1.</_>\n        <_>\n          6 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 15 8 2 2.</_>\n        <_>\n          10 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 13 -1.</_>\n        <_>\n          2 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 9 -1.</_>\n        <_>\n          5 14 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 16 -1.</_>\n        <_>\n          0 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          10 15 10 2 2.</_>\n        <_>\n          0 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 4 -1.</_>\n        <_>\n          0 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 13 3 -1.</_>\n        <_>\n          4 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          0 0 9 2 2.</_>\n        <_>\n          9 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 15 -1.</_>\n        <_>\n          6 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          2 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 4 10 -1.</_>\n        <_>\n          14 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 16 -1.</_>\n        <_>\n          0 3 2 8 2.</_>\n        <_>\n          2 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          11 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 9 -1.</_>\n        <_>\n          8 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 4 10 -1.</_>\n        <_>\n          4 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 12 -1.</_>\n        <_>\n          5 6 5 6 2.</_>\n        <_>\n          10 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 12 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 6 -1.</_>\n        <_>\n          2 3 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 8 -1.</_>\n        <_>\n          6 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 8 -1.</_>\n        <_>\n          1 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 14 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 10 -1.</_>\n        <_>\n          11 5 3 5 2.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 10 12 -1.</_>\n        <_>\n          9 8 5 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 7 -1.</_>\n        <_>\n          15 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 7 -1.</_>\n        <_>\n          3 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 8 -1.</_>\n        <_>\n          10 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 18 5 -1.</_>\n        <_>\n          6 14 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          10 13 10 2 2.</_>\n        <_>\n          0 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 6 -1.</_>\n        <_>\n          0 10 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 2 -1.</_>\n        <_>\n          4 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 5 -1.</_>\n        <_>\n          3 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 6 5 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 6 5 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 19 -1.</_>\n        <_>\n          7 0 7 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 4 14 -1.</_>\n        <_>\n          3 0 2 7 2.</_>\n        <_>\n          5 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 3 -1.</_>\n        <_>\n          2 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 14 18 -1.</_>\n        <_>\n          13 2 7 9 2.</_>\n        <_>\n          6 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 6 -1.</_>\n        <_>\n          5 12 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 18 -1.</_>\n        <_>\n          10 1 10 9 2.</_>\n        <_>\n          0 10 10 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 7 4 -1.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 14 12 -1.</_>\n        <_>\n          1 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 8 -1.</_>\n        <_>\n          9 0 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 5 -1.</_>\n        <_>\n          8 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 10 -1.</_>\n        <_>\n          8 0 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 13 -1.</_>\n        <_>\n          9 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 10 -1.</_>\n        <_>\n          0 4 9 5 2.</_>\n        <_>\n          9 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 6 -1.</_>\n        <_>\n          12 3 8 3 2.</_>\n        <_>\n          4 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 5 9 -1.</_>\n        <_>\n          3 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 12 5 -1.</_>\n        <_>\n          12 4 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 8 4 -1.</_>\n        <_>\n          3 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 15 -1.</_>\n        <_>\n          11 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 15 -1.</_>\n        <_>\n          8 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 8 -1.</_>\n        <_>\n          10 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 9 5 -1.</_>\n        <_>\n          7 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 4 17 -1.</_>\n        <_>\n          15 3 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 13 -1.</_>\n        <_>\n          3 6 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 4 7 -1.</_>\n        <_>\n          11 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 7 -1.</_>\n        <_>\n          11 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 7 -1.</_>\n        <_>\n          7 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 8 -1.</_>\n        <_>\n          9 7 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 14 3 -1.</_>\n        <_>\n          2 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 7 4 -1.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 5 6 -1.</_>\n        <_>\n          13 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 3 -1.</_>\n        <_>\n          4 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 14 -1.</_>\n        <_>\n          5 10 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 5 -1.</_>\n        <_>\n          9 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 2 -1.</_>\n        <_>\n          0 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 5 -1.</_>\n        <_>\n          9 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 15 5 -1.</_>\n        <_>\n          6 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 6 -1.</_>\n        <_>\n          12 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 5 -1.</_>\n        <_>\n          6 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 8 -1.</_>\n        <_>\n          11 7 7 4 2.</_>\n        <_>\n          4 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 14 8 -1.</_>\n        <_>\n          2 7 7 4 2.</_>\n        <_>\n          9 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 20 -1.</_>\n        <_>\n          11 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 20 -1.</_>\n        <_>\n          8 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 8 -1.</_>\n        <_>\n          12 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 4 -1.</_>\n        <_>\n          10 2 7 2 2.</_>\n        <_>\n          3 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 9 16 -1.</_>\n        <_>\n          11 4 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 8 -1.</_>\n        <_>\n          6 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 6 -1.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 8 -1.</_>\n        <_>\n          4 12 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 6 -1.</_>\n        <_>\n          0 9 5 3 2.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 5 8 -1.</_>\n        <_>\n          4 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          8 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 10 -1.</_>\n        <_>\n          6 8 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 9 4 -1.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 12 8 2 2.</_>\n        <_>\n          10 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 8 -1.</_>\n        <_>\n          4 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 7 -1.</_>\n        <_>\n          8 12 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 12 6 -1.</_>\n        <_>\n          3 13 6 3 2.</_>\n        <_>\n          9 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 13 4 -1.</_>\n        <_>\n          4 14 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 15 -1.</_>\n        <_>\n          7 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 16 18 -1.</_>\n        <_>\n          12 2 8 9 2.</_>\n        <_>\n          4 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 4 -1.</_>\n        <_>\n          7 16 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 9 -1.</_>\n        <_>\n          8 0 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 6 -1.</_>\n        <_>\n          7 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 12 8 -1.</_>\n        <_>\n          13 12 6 4 2.</_>\n        <_>\n          7 16 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 12 8 -1.</_>\n        <_>\n          1 12 6 4 2.</_>\n        <_>\n          7 16 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 9 -1.</_>\n        <_>\n          0 13 20 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 14 -1.</_>\n        <_>\n          8 1 2 7 2.</_>\n        <_>\n          10 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 5 6 -1.</_>\n        <_>\n          12 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 5 6 -1.</_>\n        <_>\n          3 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          8 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 3 14 -1.</_>\n        <_>\n          6 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 15 3 -1.</_>\n        <_>\n          10 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          6 0 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 17 -1.</_>\n        <_>\n          8 3 6 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 12 -1.</_>\n        <_>\n          8 2 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 12 -1.</_>\n        <_>\n          7 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 8 -1.</_>\n        <_>\n          8 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 10 -1.</_>\n        <_>\n          14 7 6 5 2.</_>\n        <_>\n          8 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 5 -1.</_>\n        <_>\n          10 1 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 8 -1.</_>\n        <_>\n          11 2 4 4 2.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 8 -1.</_>\n        <_>\n          5 2 4 4 2.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          3 17 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 12 -1.</_>\n        <_>\n          3 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 14 -1.</_>\n        <_>\n          8 6 2 7 2.</_>\n        <_>\n          10 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 10 -1.</_>\n        <_>\n          5 0 4 5 2.</_>\n        <_>\n          9 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 7 -1.</_>\n        <_>\n          11 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 7 -1.</_>\n        <_>\n          7 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 7 6 -1.</_>\n        <_>\n          13 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 6 -1.</_>\n        <_>\n          1 3 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 17 6 -1.</_>\n        <_>\n          2 3 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 2 16 -1.</_>\n        <_>\n          4 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 14 -1.</_>\n        <_>\n          12 6 5 7 2.</_>\n        <_>\n          7 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 6 -1.</_>\n        <_>\n          10 9 6 3 2.</_>\n        <_>\n          4 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          7 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 7 -1.</_>\n        <_>\n          8 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 3 -1.</_>\n        <_>\n          6 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 7 -1.</_>\n        <_>\n          10 0 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          6 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 12 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 7 6 -1.</_>\n        <_>\n          0 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 13 2 -1.</_>\n        <_>\n          2 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 9 -1.</_>\n        <_>\n          7 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 11 4 -1.</_>\n        <_>\n          0 9 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 6 -1.</_>\n        <_>\n          13 12 5 3 2.</_>\n        <_>\n          8 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 6 -1.</_>\n        <_>\n          2 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 8 6 -1.</_>\n        <_>\n          12 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 8 -1.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 11 4 -1.</_>\n        <_>\n          9 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 5 10 -1.</_>\n        <_>\n          6 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 6 -1.</_>\n        <_>\n          4 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 8 -1.</_>\n        <_>\n          4 4 6 4 2.</_>\n        <_>\n          10 8 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 5 -1.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 12 -1.</_>\n        <_>\n          6 3 5 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 6 17 -1.</_>\n        <_>\n          13 3 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 17 -1.</_>\n        <_>\n          4 3 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          14 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 6 -1.</_>\n        <_>\n          4 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 3 -1.</_>\n        <_>\n          5 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 4 -1.</_>\n        <_>\n          0 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 13 -1.</_>\n        <_>\n          1 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 6 -1.</_>\n        <_>\n          6 4 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 4 -1.</_>\n        <_>\n          6 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 4 -1.</_>\n        <_>\n          0 10 9 2 2.</_>\n        <_>\n          9 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 9 -1.</_>\n        <_>\n          10 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 7 -1.</_>\n        <_>\n          8 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 10 -1.</_>\n        <_>\n          12 6 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 12 -1.</_>\n        <_>\n          0 10 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 10 -1.</_>\n        <_>\n          12 6 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 7 -1.</_>\n        <_>\n          6 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 17 -1.</_>\n        <_>\n          3 2 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 9 5 -1.</_>\n        <_>\n          13 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 5 -1.</_>\n        <_>\n          4 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 9 9 -1.</_>\n        <_>\n          5 6 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 6 -1.</_>\n        <_>\n          12 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 12 -1.</_>\n        <_>\n          5 2 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 7 15 -1.</_>\n        <_>\n          9 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 7 -1.</_>\n        <_>\n          8 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 20 -1.</_>\n        <_>\n          10 0 5 10 2.</_>\n        <_>\n          5 10 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          9 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 4 -1.</_>\n        <_>\n          12 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 4 -1.</_>\n        <_>\n          2 7 8 2 2.</_>\n        <_>\n          10 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 10 -1.</_>\n        <_>\n          5 10 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 16 -1.</_>\n        <_>\n          6 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 10 -1.</_>\n        <_>\n          6 7 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 6 -1.</_>\n        <_>\n          2 4 7 3 2.</_>\n        <_>\n          9 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 11 12 -1.</_>\n        <_>\n          5 4 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 12 -1.</_>\n        <_>\n          7 5 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 11 4 -1.</_>\n        <_>\n          9 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 11 4 -1.</_>\n        <_>\n          0 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 19 6 -1.</_>\n        <_>\n          1 11 19 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          7 4 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 15 2 -1.</_>\n        <_>\n          5 4 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 14 6 -1.</_>\n        <_>\n          2 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 6 -1.</_>\n        <_>\n          3 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 6 -1.</_>\n        <_>\n          0 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 4 -1.</_>\n        <_>\n          13 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 10 -1.</_>\n        <_>\n          14 1 6 5 2.</_>\n        <_>\n          8 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 8 -1.</_>\n        <_>\n          2 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 11 10 -1.</_>\n        <_>\n          5 6 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_>\n        <_>\n          8 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 4 -1.</_>\n        <_>\n          12 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 12 8 -1.</_>\n        <_>\n          6 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 4 -1.</_>\n        <_>\n          10 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 4 -1.</_>\n        <_>\n          6 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 3 -1.</_>\n        <_>\n          3 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 5 -1.</_>\n        <_>\n          4 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 9 9 -1.</_>\n        <_>\n          13 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 9 9 -1.</_>\n        <_>\n          4 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 5 -1.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 5 -1.</_>\n        <_>\n          9 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 2 -1.</_>\n        <_>\n          2 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 7 6 -1.</_>\n        <_>\n          2 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 6 -1.</_>\n        <_>\n          7 10 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 15 -1.</_>\n        <_>\n          4 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 3 -1.</_>\n        <_>\n          3 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 16 3 -1.</_>\n        <_>\n          9 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 19 -1.</_>\n        <_>\n          12 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 19 -1.</_>\n        <_>\n          4 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 16 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_>\n        <_>\n          8 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 14 -1.</_>\n        <_>\n          10 3 7 7 2.</_>\n        <_>\n          3 10 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 12 -1.</_>\n        <_>\n          5 6 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 12 6 -1.</_>\n        <_>\n          9 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 6 -1.</_>\n        <_>\n          1 8 7 3 2.</_>\n        <_>\n          8 11 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 10 -1.</_>\n        <_>\n          14 7 6 5 2.</_>\n        <_>\n          8 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 10 -1.</_>\n        <_>\n          0 7 6 5 2.</_>\n        <_>\n          6 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 18 -1.</_>\n        <_>\n          12 2 3 9 2.</_>\n        <_>\n          9 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 10 -1.</_>\n        <_>\n          1 10 4 5 2.</_>\n        <_>\n          5 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 4 -1.</_>\n        <_>\n          4 16 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 5 -1.</_>\n        <_>\n          10 2 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 14 -1.</_>\n        <_>\n          5 11 9 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 11 4 -1.</_>\n        <_>\n          8 2 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 16 6 -1.</_>\n        <_>\n          0 16 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 8 6 -1.</_>\n        <_>\n          10 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 3 -1.</_>\n        <_>\n          5 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 19 3 -1.</_>\n        <_>\n          0 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 8 4 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 8 4 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 9 -1.</_>\n        <_>\n          1 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 2 -1.</_>\n        <_>\n          4 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 2 -1.</_>\n        <_>\n          2 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 4 -1.</_>\n        <_>\n          6 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 5 -1.</_>\n        <_>\n          8 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 3 -1.</_>\n        <_>\n          3 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 12 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 4 -1.</_>\n        <_>\n          2 6 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 9 4 -1.</_>\n        <_>\n          1 6 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 11 4 -1.</_>\n        <_>\n          9 6 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 3 -1.</_>\n        <_>\n          7 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 7 -1.</_>\n        <_>\n          6 0 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 15 -1.</_>\n        <_>\n          12 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 5 15 -1.</_>\n        <_>\n          3 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 11 -1.</_>\n        <_>\n          8 6 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          1 9 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 5 -1.</_>\n        <_>\n          10 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 7 -1.</_>\n        <_>\n          9 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 4 -1.</_>\n        <_>\n          5 6 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 11 -1.</_>\n        <_>\n          14 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 3 -1.</_>\n        <_>\n          0 12 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 11 -1.</_>\n        <_>\n          14 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 11 -1.</_>\n        <_>\n          4 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 5 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 3 -1.</_>\n        <_>\n          2 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 2 -1.</_>\n        <_>\n          4 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 20 2 -1.</_>\n        <_>\n          0 19 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 14 -1.</_>\n        <_>\n          10 0 4 7 2.</_>\n        <_>\n          6 7 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 12 -1.</_>\n        <_>\n          2 2 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 9 6 -1.</_>\n        <_>\n          9 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 7 4 -1.</_>\n        <_>\n          2 2 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 10 -1.</_>\n        <_>\n          5 0 3 5 2.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 13 -1.</_>\n        <_>\n          18 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 13 -1.</_>\n        <_>\n          1 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 4 13 -1.</_>\n        <_>\n          16 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 6 -1.</_>\n        <_>\n          6 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 6 -1.</_>\n        <_>\n          11 11 5 3 2.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 5 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 15 -1.</_>\n        <_>\n          10 3 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 15 -1.</_>\n        <_>\n          8 3 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 13 2 -1.</_>\n        <_>\n          6 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 15 8 2 2.</_>\n        <_>\n          10 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 13 -1.</_>\n        <_>\n          2 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 9 -1.</_>\n        <_>\n          5 14 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 16 -1.</_>\n        <_>\n          0 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          10 15 10 2 2.</_>\n        <_>\n          0 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 4 -1.</_>\n        <_>\n          0 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 13 3 -1.</_>\n        <_>\n          4 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          0 0 9 2 2.</_>\n        <_>\n          9 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 15 -1.</_>\n        <_>\n          6 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          2 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 4 10 -1.</_>\n        <_>\n          14 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 16 -1.</_>\n        <_>\n          0 3 2 8 2.</_>\n        <_>\n          2 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          11 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 9 -1.</_>\n        <_>\n          8 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 4 10 -1.</_>\n        <_>\n          4 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 12 -1.</_>\n        <_>\n          5 6 5 6 2.</_>\n        <_>\n          10 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 12 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 6 -1.</_>\n        <_>\n          2 3 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 8 -1.</_>\n        <_>\n          6 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 8 -1.</_>\n        <_>\n          1 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 14 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 10 -1.</_>\n        <_>\n          11 5 3 5 2.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 10 12 -1.</_>\n        <_>\n          9 8 5 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 7 -1.</_>\n        <_>\n          15 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 7 -1.</_>\n        <_>\n          3 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 8 -1.</_>\n        <_>\n          10 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 18 5 -1.</_>\n        <_>\n          6 14 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          10 13 10 2 2.</_>\n        <_>\n          0 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 6 -1.</_>\n        <_>\n          0 10 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 2 -1.</_>\n        <_>\n          4 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 5 -1.</_>\n        <_>\n          3 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 6 5 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 6 5 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 19 -1.</_>\n        <_>\n          7 0 7 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 4 14 -1.</_>\n        <_>\n          3 0 2 7 2.</_>\n        <_>\n          5 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 3 -1.</_>\n        <_>\n          2 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 14 18 -1.</_>\n        <_>\n          13 2 7 9 2.</_>\n        <_>\n          6 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 6 -1.</_>\n        <_>\n          5 12 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 18 -1.</_>\n        <_>\n          10 1 10 9 2.</_>\n        <_>\n          0 10 10 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 7 4 -1.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 14 12 -1.</_>\n        <_>\n          1 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 8 -1.</_>\n        <_>\n          9 0 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 5 -1.</_>\n        <_>\n          8 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 10 -1.</_>\n        <_>\n          8 0 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 13 -1.</_>\n        <_>\n          9 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 10 -1.</_>\n        <_>\n          0 4 9 5 2.</_>\n        <_>\n          9 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 6 -1.</_>\n        <_>\n          12 3 8 3 2.</_>\n        <_>\n          4 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 5 9 -1.</_>\n        <_>\n          3 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 12 5 -1.</_>\n        <_>\n          12 4 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 8 4 -1.</_>\n        <_>\n          3 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 15 -1.</_>\n        <_>\n          11 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 15 -1.</_>\n        <_>\n          8 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 8 -1.</_>\n        <_>\n          10 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 9 5 -1.</_>\n        <_>\n          7 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 4 17 -1.</_>\n        <_>\n          15 3 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 13 -1.</_>\n        <_>\n          3 6 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 4 7 -1.</_>\n        <_>\n          11 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 7 -1.</_>\n        <_>\n          11 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 7 -1.</_>\n        <_>\n          7 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 8 -1.</_>\n        <_>\n          9 7 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 14 3 -1.</_>\n        <_>\n          2 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 7 4 -1.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 5 6 -1.</_>\n        <_>\n          13 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 3 -1.</_>\n        <_>\n          4 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 14 -1.</_>\n        <_>\n          5 10 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 5 -1.</_>\n        <_>\n          9 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 2 -1.</_>\n        <_>\n          0 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 5 -1.</_>\n        <_>\n          9 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 15 5 -1.</_>\n        <_>\n          6 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 6 -1.</_>\n        <_>\n          12 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 5 -1.</_>\n        <_>\n          6 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 8 -1.</_>\n        <_>\n          11 7 7 4 2.</_>\n        <_>\n          4 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 14 8 -1.</_>\n        <_>\n          2 7 7 4 2.</_>\n        <_>\n          9 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 20 -1.</_>\n        <_>\n          11 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 20 -1.</_>\n        <_>\n          8 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 8 -1.</_>\n        <_>\n          12 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 4 -1.</_>\n        <_>\n          10 2 7 2 2.</_>\n        <_>\n          3 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 9 16 -1.</_>\n        <_>\n          11 4 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 8 -1.</_>\n        <_>\n          6 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 6 -1.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 8 -1.</_>\n        <_>\n          4 12 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 6 -1.</_>\n        <_>\n          0 9 5 3 2.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 5 8 -1.</_>\n        <_>\n          4 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          8 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 10 -1.</_>\n        <_>\n          6 8 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 9 4 -1.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 12 8 2 2.</_>\n        <_>\n          10 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 8 -1.</_>\n        <_>\n          4 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 7 -1.</_>\n        <_>\n          8 12 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 12 6 -1.</_>\n        <_>\n          3 13 6 3 2.</_>\n        <_>\n          9 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 13 4 -1.</_>\n        <_>\n          4 14 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 15 -1.</_>\n        <_>\n          7 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 16 18 -1.</_>\n        <_>\n          12 2 8 9 2.</_>\n        <_>\n          4 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 4 -1.</_>\n        <_>\n          7 16 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 9 -1.</_>\n        <_>\n          8 0 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 6 -1.</_>\n        <_>\n          7 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 12 8 -1.</_>\n        <_>\n          13 12 6 4 2.</_>\n        <_>\n          7 16 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 12 8 -1.</_>\n        <_>\n          1 12 6 4 2.</_>\n        <_>\n          7 16 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 9 -1.</_>\n        <_>\n          0 13 20 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 14 -1.</_>\n        <_>\n          8 1 2 7 2.</_>\n        <_>\n          10 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 5 6 -1.</_>\n        <_>\n          12 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 5 6 -1.</_>\n        <_>\n          3 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          8 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 3 14 -1.</_>\n        <_>\n          6 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 15 3 -1.</_>\n        <_>\n          10 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          6 0 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 17 -1.</_>\n        <_>\n          8 3 6 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 12 -1.</_>\n        <_>\n          8 2 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 12 -1.</_>\n        <_>\n          7 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 8 -1.</_>\n        <_>\n          8 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 10 -1.</_>\n        <_>\n          14 7 6 5 2.</_>\n        <_>\n          8 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 5 -1.</_>\n        <_>\n          10 1 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 8 -1.</_>\n        <_>\n          11 2 4 4 2.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 8 -1.</_>\n        <_>\n          5 2 4 4 2.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          3 17 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 12 -1.</_>\n        <_>\n          3 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 14 -1.</_>\n        <_>\n          8 6 2 7 2.</_>\n        <_>\n          10 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 10 -1.</_>\n        <_>\n          5 0 4 5 2.</_>\n        <_>\n          9 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 7 -1.</_>\n        <_>\n          11 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 7 -1.</_>\n        <_>\n          7 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 7 6 -1.</_>\n        <_>\n          13 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 6 -1.</_>\n        <_>\n          1 3 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 17 6 -1.</_>\n        <_>\n          2 3 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 2 16 -1.</_>\n        <_>\n          4 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 14 -1.</_>\n        <_>\n          12 6 5 7 2.</_>\n        <_>\n          7 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 6 -1.</_>\n        <_>\n          10 9 6 3 2.</_>\n        <_>\n          4 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          7 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 7 -1.</_>\n        <_>\n          8 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 3 -1.</_>\n        <_>\n          6 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 7 -1.</_>\n        <_>\n          10 0 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          6 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 12 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 7 6 -1.</_>\n        <_>\n          0 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 13 2 -1.</_>\n        <_>\n          2 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 9 -1.</_>\n        <_>\n          7 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 11 4 -1.</_>\n        <_>\n          0 9 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 6 -1.</_>\n        <_>\n          13 12 5 3 2.</_>\n        <_>\n          8 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 6 -1.</_>\n        <_>\n          2 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 8 6 -1.</_>\n        <_>\n          12 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 8 -1.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 11 4 -1.</_>\n        <_>\n          9 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 5 10 -1.</_>\n        <_>\n          6 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 6 -1.</_>\n        <_>\n          4 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 8 -1.</_>\n        <_>\n          4 4 6 4 2.</_>\n        <_>\n          10 8 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 5 -1.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 12 -1.</_>\n        <_>\n          6 3 5 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 6 17 -1.</_>\n        <_>\n          13 3 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 17 -1.</_>\n        <_>\n          4 3 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          14 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 6 -1.</_>\n        <_>\n          4 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 3 -1.</_>\n        <_>\n          5 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 4 -1.</_>\n        <_>\n          0 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 13 -1.</_>\n        <_>\n          1 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 6 -1.</_>\n        <_>\n          6 4 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 4 -1.</_>\n        <_>\n          6 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 4 -1.</_>\n        <_>\n          0 10 9 2 2.</_>\n        <_>\n          9 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 9 -1.</_>\n        <_>\n          10 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 7 -1.</_>\n        <_>\n          8 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 10 -1.</_>\n        <_>\n          12 6 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 12 -1.</_>\n        <_>\n          0 10 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 10 -1.</_>\n        <_>\n          12 6 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 7 -1.</_>\n        <_>\n          6 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 17 -1.</_>\n        <_>\n          3 2 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 9 5 -1.</_>\n        <_>\n          13 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 5 -1.</_>\n        <_>\n          4 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 9 9 -1.</_>\n        <_>\n          5 6 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 6 -1.</_>\n        <_>\n          12 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 12 -1.</_>\n        <_>\n          5 2 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 7 15 -1.</_>\n        <_>\n          9 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 7 -1.</_>\n        <_>\n          8 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 20 -1.</_>\n        <_>\n          10 0 5 10 2.</_>\n        <_>\n          5 10 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          9 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 4 -1.</_>\n        <_>\n          12 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 4 -1.</_>\n        <_>\n          2 7 8 2 2.</_>\n        <_>\n          10 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 10 -1.</_>\n        <_>\n          5 10 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 16 -1.</_>\n        <_>\n          6 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 10 -1.</_>\n        <_>\n          6 7 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 6 -1.</_>\n        <_>\n          2 4 7 3 2.</_>\n        <_>\n          9 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 11 12 -1.</_>\n        <_>\n          5 4 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 12 -1.</_>\n        <_>\n          7 5 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 11 4 -1.</_>\n        <_>\n          9 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 11 4 -1.</_>\n        <_>\n          0 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 19 6 -1.</_>\n        <_>\n          1 11 19 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          7 4 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 15 2 -1.</_>\n        <_>\n          5 4 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 14 6 -1.</_>\n        <_>\n          2 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 6 -1.</_>\n        <_>\n          3 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 6 -1.</_>\n        <_>\n          0 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 4 -1.</_>\n        <_>\n          13 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 10 -1.</_>\n        <_>\n          14 1 6 5 2.</_>\n        <_>\n          8 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 8 -1.</_>\n        <_>\n          2 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 11 10 -1.</_>\n        <_>\n          5 6 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_>\n        <_>\n          8 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 4 -1.</_>\n        <_>\n          12 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 12 8 -1.</_>\n        <_>\n          6 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 4 -1.</_>\n        <_>\n          10 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 4 -1.</_>\n        <_>\n          6 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 3 -1.</_>\n        <_>\n          3 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 5 -1.</_>\n        <_>\n          4 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 9 9 -1.</_>\n        <_>\n          13 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 9 9 -1.</_>\n        <_>\n          4 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 5 -1.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 5 -1.</_>\n        <_>\n          9 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 2 -1.</_>\n        <_>\n          2 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 7 6 -1.</_>\n        <_>\n          2 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 6 -1.</_>\n        <_>\n          7 10 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 15 -1.</_>\n        <_>\n          4 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 3 -1.</_>\n        <_>\n          3 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 16 3 -1.</_>\n        <_>\n          9 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 19 -1.</_>\n        <_>\n          12 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 19 -1.</_>\n        <_>\n          4 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 16 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_>\n        <_>\n          8 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 14 -1.</_>\n        <_>\n          10 3 7 7 2.</_>\n        <_>\n          3 10 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 12 -1.</_>\n        <_>\n          5 6 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 12 6 -1.</_>\n        <_>\n          9 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 6 -1.</_>\n        <_>\n          1 8 7 3 2.</_>\n        <_>\n          8 11 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 10 -1.</_>\n        <_>\n          14 7 6 5 2.</_>\n        <_>\n          8 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 10 -1.</_>\n        <_>\n          0 7 6 5 2.</_>\n        <_>\n          6 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 18 -1.</_>\n        <_>\n          12 2 3 9 2.</_>\n        <_>\n          9 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 10 -1.</_>\n        <_>\n          1 10 4 5 2.</_>\n        <_>\n          5 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 4 -1.</_>\n        <_>\n          4 16 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 5 -1.</_>\n        <_>\n          10 2 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 14 -1.</_>\n        <_>\n          5 11 9 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 11 4 -1.</_>\n        <_>\n          8 2 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 16 6 -1.</_>\n        <_>\n          0 16 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 8 6 -1.</_>\n        <_>\n          10 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 3 -1.</_>\n        <_>\n          5 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 19 3 -1.</_>\n        <_>\n          0 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 8 4 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 8 4 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 9 -1.</_>\n        <_>\n          1 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 2 -1.</_>\n        <_>\n          4 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 2 -1.</_>\n        <_>\n          2 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 4 -1.</_>\n        <_>\n          6 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 5 -1.</_>\n        <_>\n          8 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 3 -1.</_>\n        <_>\n          3 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 12 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 4 -1.</_>\n        <_>\n          2 6 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 9 4 -1.</_>\n        <_>\n          1 6 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 11 4 -1.</_>\n        <_>\n          9 6 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 3 -1.</_>\n        <_>\n          7 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 7 -1.</_>\n        <_>\n          6 0 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 15 -1.</_>\n        <_>\n          12 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 5 15 -1.</_>\n        <_>\n          3 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 11 -1.</_>\n        <_>\n          8 6 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          1 9 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 5 -1.</_>\n        <_>\n          10 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 7 -1.</_>\n        <_>\n          9 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 4 -1.</_>\n        <_>\n          5 1 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 7 6 -1.</_>\n        <_>\n          7 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 12 -1.</_>\n        <_>\n          4 5 5 6 2.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 11 8 -1.</_>\n        <_>\n          8 16 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 5 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 14 -1.</_>\n        <_>\n          1 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 3 10 -1.</_>\n        <_>\n          11 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 13 3 -1.</_>\n        <_>\n          3 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 13 3 -1.</_>\n        <_>\n          6 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 6 -1.</_>\n        <_>\n          1 2 9 3 2.</_>\n        <_>\n          10 5 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 12 8 -1.</_>\n        <_>\n          12 1 6 4 2.</_>\n        <_>\n          6 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 8 -1.</_>\n        <_>\n          4 1 6 4 2.</_>\n        <_>\n          10 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 3 -1.</_>\n        <_>\n          4 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 12 4 -1.</_>\n        <_>\n          5 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 5 -1.</_>\n        <_>\n          14 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 13 2 -1.</_>\n        <_>\n          3 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 7 -1.</_>\n        <_>\n          3 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 6 -1.</_>\n        <_>\n          14 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 3 10 -1.</_>\n        <_>\n          6 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 12 -1.</_>\n        <_>\n          6 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 6 -1.</_>\n        <_>\n          14 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 6 -1.</_>\n        <_>\n          3 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 3 -1.</_>\n        <_>\n          4 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 8 -1.</_>\n        <_>\n          8 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 13 -1.</_>\n        <_>\n          12 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 13 -1.</_>\n        <_>\n          7 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 2 -1.</_>\n        <_>\n          4 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 6 -1.</_>\n        <_>\n          1 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 12 4 -1.</_>\n        <_>\n          8 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 9 -1.</_>\n        <_>\n          2 3 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 12 -1.</_>\n        <_>\n          9 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 10 6 -1.</_>\n        <_>\n          2 4 5 3 2.</_>\n        <_>\n          7 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 8 16 -1.</_>\n        <_>\n          13 1 4 8 2.</_>\n        <_>\n          9 9 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 14 8 -1.</_>\n        <_>\n          2 5 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 6 -1.</_>\n        <_>\n          12 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 9 -1.</_>\n        <_>\n          3 8 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 2 -1.</_>\n        <_>\n          0 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 14 4 -1.</_>\n        <_>\n          2 13 7 2 2.</_>\n        <_>\n          9 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 7 -1.</_>\n        <_>\n          10 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 10 -1.</_>\n        <_>\n          6 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 8 -1.</_>\n        <_>\n          0 7 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 8 -1.</_>\n        <_>\n          10 0 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 19 -1.</_>\n        <_>\n          8 1 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 19 -1.</_>\n        <_>\n          6 1 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          8 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 19 -1.</_>\n        <_>\n          6 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 10 -1.</_>\n        <_>\n          10 0 10 5 2.</_>\n        <_>\n          0 5 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 13 3 -1.</_>\n        <_>\n          0 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 13 3 -1.</_>\n        <_>\n          1 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 4 -1.</_>\n        <_>\n          13 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 19 -1.</_>\n        <_>\n          4 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 6 -1.</_>\n        <_>\n          12 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 13 3 -1.</_>\n        <_>\n          3 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 3 -1.</_>\n        <_>\n          4 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 9 -1.</_>\n        <_>\n          4 8 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 3 -1.</_>\n        <_>\n          6 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 4 -1.</_>\n        <_>\n          0 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 18 -1.</_>\n        <_>\n          12 2 7 9 2.</_>\n        <_>\n          5 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 12 -1.</_>\n        <_>\n          7 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 18 -1.</_>\n        <_>\n          12 2 7 9 2.</_>\n        <_>\n          5 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 14 18 -1.</_>\n        <_>\n          1 2 7 9 2.</_>\n        <_>\n          8 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 10 -1.</_>\n        <_>\n          10 10 4 5 2.</_>\n        <_>\n          6 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 8 -1.</_>\n        <_>\n          3 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          10 10 4 4 2.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 6 -1.</_>\n        <_>\n          1 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 9 -1.</_>\n        <_>\n          8 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 7 -1.</_>\n        <_>\n          10 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 19 6 -1.</_>\n        <_>\n          0 13 19 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 10 -1.</_>\n        <_>\n          4 6 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 2 -1.</_>\n        <_>\n          0 6 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 17 6 -1.</_>\n        <_>\n          2 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 10 6 -1.</_>\n        <_>\n          3 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 11 -1.</_>\n        <_>\n          9 0 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          2 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 7 -1.</_>\n        <_>\n          16 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 12 -1.</_>\n        <_>\n          3 8 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 7 -1.</_>\n        <_>\n          16 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          2 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 15 -1.</_>\n        <_>\n          11 0 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 11 -1.</_>\n        <_>\n          7 5 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 3 -1.</_>\n        <_>\n          6 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 7 -1.</_>\n        <_>\n          10 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 14 -1.</_>\n        <_>\n          8 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 13 3 -1.</_>\n        <_>\n          5 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 13 -1.</_>\n        <_>\n          9 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 14 -1.</_>\n        <_>\n          11 6 2 7 2.</_>\n        <_>\n          9 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 10 -1.</_>\n        <_>\n          6 9 4 5 2.</_>\n        <_>\n          10 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 5 -1.</_>\n        <_>\n          7 15 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 5 -1.</_>\n        <_>\n          12 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 10 6 -1.</_>\n        <_>\n          0 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 14 4 -1.</_>\n        <_>\n          4 18 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 18 -1.</_>\n        <_>\n          8 1 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 2 -1.</_>\n        <_>\n          6 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 20 -1.</_>\n        <_>\n          10 0 7 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 7 -1.</_>\n        <_>\n          8 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 9 7 -1.</_>\n        <_>\n          7 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 13 -1.</_>\n        <_>\n          8 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 8 -1.</_>\n        <_>\n          7 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 10 -1.</_>\n        <_>\n          11 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 12 6 -1.</_>\n        <_>\n          4 11 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 10 -1.</_>\n        <_>\n          11 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 10 -1.</_>\n        <_>\n          7 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 2 -1.</_>\n        <_>\n          6 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 2 -1.</_>\n        <_>\n          0 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 12 -1.</_>\n        <_>\n          15 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 12 -1.</_>\n        <_>\n          0 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          16 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 6 -1.</_>\n        <_>\n          0 14 6 3 2.</_>\n        <_>\n          6 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          16 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 4 14 -1.</_>\n        <_>\n          0 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 5 -1.</_>\n        <_>\n          12 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 5 -1.</_>\n        <_>\n          4 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 14 -1.</_>\n        <_>\n          13 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 5 8 -1.</_>\n        <_>\n          5 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 14 -1.</_>\n        <_>\n          18 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 6 -1.</_>\n        <_>\n          6 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          14 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 6 -1.</_>\n        <_>\n          3 4 7 3 2.</_>\n        <_>\n          10 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 9 6 -1.</_>\n        <_>\n          10 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 5 -1.</_>\n        <_>\n          4 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 18 -1.</_>\n        <_>\n          15 0 3 9 2.</_>\n        <_>\n          12 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 18 -1.</_>\n        <_>\n          2 0 3 9 2.</_>\n        <_>\n          5 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 14 -1.</_>\n        <_>\n          10 0 8 7 2.</_>\n        <_>\n          2 7 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 16 -1.</_>\n        <_>\n          2 0 2 8 2.</_>\n        <_>\n          4 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 4 -1.</_>\n        <_>\n          12 0 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 4 -1.</_>\n        <_>\n          4 0 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 14 5 -1.</_>\n        <_>\n          6 12 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 14 5 -1.</_>\n        <_>\n          7 12 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 5 -1.</_>\n        <_>\n          12 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 5 -1.</_>\n        <_>\n          4 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          10 10 7 2 2.</_>\n        <_>\n          3 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 4 -1.</_>\n        <_>\n          0 14 10 2 2.</_>\n        <_>\n          10 16 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 9 5 -1.</_>\n        <_>\n          13 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 9 5 -1.</_>\n        <_>\n          4 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 8 4 -1.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 5 -1.</_>\n        <_>\n          7 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 10 10 -1.</_>\n        <_>\n          14 2 5 5 2.</_>\n        <_>\n          9 7 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 10 10 -1.</_>\n        <_>\n          1 2 5 5 2.</_>\n        <_>\n          6 7 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 6 -1.</_>\n        <_>\n          14 3 6 3 2.</_>\n        <_>\n          8 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 8 4 -1.</_>\n        <_>\n          5 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 12 -1.</_>\n        <_>\n          10 3 10 6 2.</_>\n        <_>\n          0 9 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 5 5 3 2.</_>\n        <_>\n          10 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 12 -1.</_>\n        <_>\n          12 8 3 6 2.</_>\n        <_>\n          9 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 4 -1.</_>\n        <_>\n          0 8 9 2 2.</_>\n        <_>\n          9 10 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          10 14 7 2 2.</_>\n        <_>\n          3 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 8 4 -1.</_>\n        <_>\n          6 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 12 -1.</_>\n        <_>\n          7 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 12 -1.</_>\n        <_>\n          9 11 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 5 9 -1.</_>\n        <_>\n          7 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 5 -1.</_>\n        <_>\n          8 13 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 9 -1.</_>\n        <_>\n          4 12 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 4 -1.</_>\n        <_>\n          8 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 7 -1.</_>\n        <_>\n          9 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          0 15 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 3 -1.</_>\n        <_>\n          2 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 12 -1.</_>\n        <_>\n          9 11 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 9 17 -1.</_>\n        <_>\n          6 1 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 4 8 -1.</_>\n        <_>\n          8 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 12 -1.</_>\n        <_>\n          12 4 7 6 2.</_>\n        <_>\n          5 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 2 -1.</_>\n        <_>\n          9 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 12 -1.</_>\n        <_>\n          7 5 3 6 2.</_>\n        <_>\n          10 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 14 3 -1.</_>\n        <_>\n          6 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 14 3 -1.</_>\n        <_>\n          0 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 3 -1.</_>\n        <_>\n          4 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 15 12 -1.</_>\n        <_>\n          5 2 5 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 12 -1.</_>\n        <_>\n          14 5 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 16 -1.</_>\n        <_>\n          2 9 16 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 13 3 -1.</_>\n        <_>\n          7 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 4 -1.</_>\n        <_>\n          3 7 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 7 4 -1.</_>\n        <_>\n          9 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 6 -1.</_>\n        <_>\n          3 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 7 4 -1.</_>\n        <_>\n          9 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 4 -1.</_>\n        <_>\n          4 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          1 10 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 12 -1.</_>\n        <_>\n          14 5 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 12 -1.</_>\n        <_>\n          3 5 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 3 10 -1.</_>\n        <_>\n          11 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 20 -1.</_>\n        <_>\n          1 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 11 -1.</_>\n        <_>\n          8 0 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 5 -1.</_>\n        <_>\n          7 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 9 6 -1.</_>\n        <_>\n          7 4 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 9 8 -1.</_>\n        <_>\n          11 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 9 8 -1.</_>\n        <_>\n          6 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 10 -1.</_>\n        <_>\n          12 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          9 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 9 -1.</_>\n        <_>\n          9 9 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 9 9 -1.</_>\n        <_>\n          7 3 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 9 -1.</_>\n        <_>\n          8 2 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 3 -1.</_>\n        <_>\n          0 3 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          10 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 9 -1.</_>\n        <_>\n          6 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 12 -1.</_>\n        <_>\n          12 4 7 6 2.</_>\n        <_>\n          5 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          6 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 10 -1.</_>\n        <_>\n          1 10 3 5 2.</_>\n        <_>\n          4 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 8 -1.</_>\n        <_>\n          12 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          4 14 6 3 2.</_>\n        <_>\n          10 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 8 -1.</_>\n        <_>\n          12 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 8 -1.</_>\n        <_>\n          4 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 14 4 -1.</_>\n        <_>\n          11 11 7 2 2.</_>\n        <_>\n          4 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 14 4 -1.</_>\n        <_>\n          2 11 7 2 2.</_>\n        <_>\n          9 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          12 6 5 3 2.</_>\n        <_>\n          7 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 6 -1.</_>\n        <_>\n          3 6 5 3 2.</_>\n        <_>\n          8 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 19 -1.</_>\n        <_>\n          11 0 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 19 -1.</_>\n        <_>\n          7 0 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 14 2 -1.</_>\n        <_>\n          4 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 9 -1.</_>\n        <_>\n          13 4 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 7 9 -1.</_>\n        <_>\n          0 4 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 11 6 -1.</_>\n        <_>\n          9 13 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 11 6 -1.</_>\n        <_>\n          0 13 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 10 -1.</_>\n        <_>\n          10 5 8 5 2.</_>\n        <_>\n          2 10 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 4 -1.</_>\n        <_>\n          11 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 12 -1.</_>\n        <_>\n          1 4 7 6 2.</_>\n        <_>\n          8 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 13 3 -1.</_>\n        <_>\n          2 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 6 -1.</_>\n        <_>\n          1 13 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 7 18 -1.</_>\n        <_>\n          6 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 4 -1.</_>\n        <_>\n          11 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 6 -1.</_>\n        <_>\n          1 1 8 3 2.</_>\n        <_>\n          9 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 14 -1.</_>\n        <_>\n          18 1 2 7 2.</_>\n        <_>\n          16 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 14 -1.</_>\n        <_>\n          0 1 2 7 2.</_>\n        <_>\n          2 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 5 -1.</_>\n        <_>\n          6 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 6 -1.</_>\n        <_>\n          4 4 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 2 -1.</_>\n        <_>\n          2 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 10 6 -1.</_>\n        <_>\n          14 12 5 3 2.</_>\n        <_>\n          9 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          7 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 5 -1.</_>\n        <_>\n          7 2 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 17 -1.</_>\n        <_>\n          15 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 17 -1.</_>\n        <_>\n          4 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 7 6 -1.</_>\n        <_>\n          12 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 17 -1.</_>\n        <_>\n          4 2 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 18 -1.</_>\n        <_>\n          16 0 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 7 6 -1.</_>\n        <_>\n          3 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 12 -1.</_>\n        <_>\n          11 4 3 6 2.</_>\n        <_>\n          8 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 10 -1.</_>\n        <_>\n          4 4 6 5 2.</_>\n        <_>\n          10 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 18 -1.</_>\n        <_>\n          16 0 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 18 -1.</_>\n        <_>\n          2 0 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 18 -1.</_>\n        <_>\n          9 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 6 -1.</_>\n        <_>\n          3 5 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 12 -1.</_>\n        <_>\n          17 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 12 -1.</_>\n        <_>\n          0 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 5 9 -1.</_>\n        <_>\n          14 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 8 -1.</_>\n        <_>\n          1 4 18 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 4 -1.</_>\n        <_>\n          11 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 4 -1.</_>\n        <_>\n          1 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 3 -1.</_>\n        <_>\n          10 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 5 -1.</_>\n        <_>\n          5 7 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 4 -1.</_>\n        <_>\n          2 6 8 2 2.</_>\n        <_>\n          10 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 12 -1.</_>\n        <_>\n          11 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 6 -1.</_>\n        <_>\n          0 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 18 -1.</_>\n        <_>\n          7 10 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 6 -1.</_>\n        <_>\n          0 2 9 3 2.</_>\n        <_>\n          9 5 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 13 2 -1.</_>\n        <_>\n          5 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 3 10 -1.</_>\n        <_>\n          6 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 2 -1.</_>\n        <_>\n          6 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          1 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 2 -1.</_>\n        <_>\n          1 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 10 3 -1.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 4 -1.</_>\n        <_>\n          7 15 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 9 -1.</_>\n        <_>\n          8 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 11 -1.</_>\n        <_>\n          8 6 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 0 4 5 2.</_>\n        <_>\n          4 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 3 -1.</_>\n        <_>\n          8 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 9 -1.</_>\n        <_>\n          8 9 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 2 17 -1.</_>\n        <_>\n          11 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 20 -1.</_>\n        <_>\n          8 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 8 18 -1.</_>\n        <_>\n          10 1 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 12 14 -1.</_>\n        <_>\n          12 1 6 7 2.</_>\n        <_>\n          6 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 8 18 -1.</_>\n        <_>\n          6 1 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 7 -1.</_>\n        <_>\n          7 5 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 16 -1.</_>\n        <_>\n          3 4 3 8 2.</_>\n        <_>\n          6 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 4 14 -1.</_>\n        <_>\n          14 3 2 7 2.</_>\n        <_>\n          12 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 4 14 -1.</_>\n        <_>\n          4 3 2 7 2.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 6 6 -1.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 6 6 -1.</_>\n        <_>\n          9 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 3 -1.</_>\n        <_>\n          4 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 10 6 -1.</_>\n        <_>\n          3 5 5 3 2.</_>\n        <_>\n          8 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 8 -1.</_>\n        <_>\n          0 4 10 4 2.</_>\n        <_>\n          10 8 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 15 6 -1.</_>\n        <_>\n          1 3 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 16 3 -1.</_>\n        <_>\n          3 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 5 -1.</_>\n        <_>\n          10 3 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 9 5 -1.</_>\n        <_>\n          10 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 16 3 -1.</_>\n        <_>\n          9 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 15 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 14 -1.</_>\n        <_>\n          1 1 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 13 -1.</_>\n        <_>\n          13 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 13 -1.</_>\n        <_>\n          6 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 8 -1.</_>\n        <_>\n          4 10 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 7 6 -1.</_>\n        <_>\n          3 10 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 10 -1.</_>\n        <_>\n          0 8 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 7 6 -1.</_>\n        <_>\n          0 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 4 -1.</_>\n        <_>\n          11 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 4 -1.</_>\n        <_>\n          1 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 6 -1.</_>\n        <_>\n          5 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 10 -1.</_>\n        <_>\n          6 8 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 5 12 -1.</_>\n        <_>\n          7 8 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 12 -1.</_>\n        <_>\n          9 7 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 8 -1.</_>\n        <_>\n          9 3 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 16 -1.</_>\n        <_>\n          10 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 16 8 -1.</_>\n        <_>\n          0 10 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 16 4 -1.</_>\n        <_>\n          3 10 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 9 4 -1.</_>\n        <_>\n          10 10 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          7 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 13 9 -1.</_>\n        <_>\n          0 10 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 8 -1.</_>\n        <_>\n          10 11 4 4 2.</_>\n        <_>\n          6 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 10 4 -1.</_>\n        <_>\n          5 15 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 16 2 -1.</_>\n        <_>\n          4 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 7 6 -1.</_>\n        <_>\n          8 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 5 8 -1.</_>\n        <_>\n          7 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 12 -1.</_>\n        <_>\n          6 11 10 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 7 -1.</_>\n        <_>\n          14 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 10 -1.</_>\n        <_>\n          6 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 2 16 -1.</_>\n        <_>\n          13 4 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 16 -1.</_>\n        <_>\n          6 4 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 16 -1.</_>\n        <_>\n          10 3 2 8 2.</_>\n        <_>\n          8 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 18 -1.</_>\n        <_>\n          8 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 2 -1.</_>\n        <_>\n          4 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 14 2 -1.</_>\n        <_>\n          0 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 7 -1.</_>\n        <_>\n          14 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 2 -1.</_>\n        <_>\n          0 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 7 -1.</_>\n        <_>\n          14 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 4 7 -1.</_>\n        <_>\n          4 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 5 6 -1.</_>\n        <_>\n          2 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 5 9 -1.</_>\n        <_>\n          14 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 17 6 -1.</_>\n        <_>\n          0 15 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 13 3 -1.</_>\n        <_>\n          1 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 14 -1.</_>\n        <_>\n          4 5 2 7 2.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 8 8 -1.</_>\n        <_>\n          2 8 4 4 2.</_>\n        <_>\n          6 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 9 -1.</_>\n        <_>\n          13 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 5 9 -1.</_>\n        <_>\n          4 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 10 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 8 -1.</_>\n        <_>\n          3 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 6 -1.</_>\n        <_>\n          10 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 13 3 -1.</_>\n        <_>\n          1 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 11 -1.</_>\n        <_>\n          9 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 9 6 -1.</_>\n        <_>\n          9 1 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 3 -1.</_>\n        <_>\n          1 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 3 -1.</_>\n        <_>\n          4 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 14 12 -1.</_>\n        <_>\n          1 2 7 6 2.</_>\n        <_>\n          8 8 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 14 -1.</_>\n        <_>\n          15 4 2 7 2.</_>\n        <_>\n          13 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 14 -1.</_>\n        <_>\n          3 4 2 7 2.</_>\n        <_>\n          5 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 7 4 -1.</_>\n        <_>\n          1 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 2 -1.</_>\n        <_>\n          1 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 3 -1.</_>\n        <_>\n          3 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 6 7 -1.</_>\n        <_>\n          13 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 19 12 -1.</_>\n        <_>\n          1 11 19 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 10 -1.</_>\n        <_>\n          7 9 3 5 2.</_>\n        <_>\n          10 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 7 4 -1.</_>\n        <_>\n          3 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 15 -1.</_>\n        <_>\n          16 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 10 -1.</_>\n        <_>\n          11 0 4 5 2.</_>\n        <_>\n          7 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          10 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 3 -1.</_>\n        <_>\n          7 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 3 -1.</_>\n        <_>\n          8 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 16 -1.</_>\n        <_>\n          6 4 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 19 -1.</_>\n        <_>\n          15 0 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 5 -1.</_>\n        <_>\n          12 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 10 -1.</_>\n        <_>\n          5 0 4 5 2.</_>\n        <_>\n          9 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 3 -1.</_>\n        <_>\n          0 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 12 -1.</_>\n        <_>\n          16 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 19 -1.</_>\n        <_>\n          3 0 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 7 -1.</_>\n        <_>\n          14 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 9 14 -1.</_>\n        <_>\n          4 6 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 9 -1.</_>\n        <_>\n          9 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 6 -1.</_>\n        <_>\n          8 8 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 9 -1.</_>\n        <_>\n          6 5 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 9 5 -1.</_>\n        <_>\n          7 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 7 -1.</_>\n        <_>\n          12 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 7 6 -1.</_>\n        <_>\n          6 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 14 -1.</_>\n        <_>\n          13 6 2 7 2.</_>\n        <_>\n          11 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 14 -1.</_>\n        <_>\n          5 6 2 7 2.</_>\n        <_>\n          7 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 4 14 -1.</_>\n        <_>\n          1 5 2 7 2.</_>\n        <_>\n          3 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 4 -1.</_>\n        <_>\n          10 13 9 2 2.</_>\n        <_>\n          1 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 12 -1.</_>\n        <_>\n          0 7 18 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 18 -1.</_>\n        <_>\n          4 10 14 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 10 -1.</_>\n        <_>\n          6 0 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 4 9 -1.</_>\n        <_>\n          16 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 4 9 -1.</_>\n        <_>\n          2 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 7 -1.</_>\n        <_>\n          12 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 7 -1.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 15 3 -1.</_>\n        <_>\n          9 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 15 3 -1.</_>\n        <_>\n          6 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 12 -1.</_>\n        <_>\n          16 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 12 -1.</_>\n        <_>\n          7 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 12 -1.</_>\n        <_>\n          16 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 12 -1.</_>\n        <_>\n          2 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 13 -1.</_>\n        <_>\n          9 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 7 -1.</_>\n        <_>\n          2 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 4 -1.</_>\n        <_>\n          10 9 9 2 2.</_>\n        <_>\n          1 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 13 2 -1.</_>\n        <_>\n          3 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 8 -1.</_>\n        <_>\n          6 12 4 4 2.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 7 6 -1.</_>\n        <_>\n          3 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 15 6 -1.</_>\n        <_>\n          10 10 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 7 -1.</_>\n        <_>\n          10 1 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 6 -1.</_>\n        <_>\n          1 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 6 -1.</_>\n        <_>\n          7 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 0 4 5 2.</_>\n        <_>\n          4 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 6 7 -1.</_>\n        <_>\n          13 8 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 13 -1.</_>\n        <_>\n          7 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 8 -1.</_>\n        <_>\n          10 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 8 9 -1.</_>\n        <_>\n          2 12 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 4 14 -1.</_>\n        <_>\n          16 4 2 7 2.</_>\n        <_>\n          14 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 8 -1.</_>\n        <_>\n          4 13 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 8 -1.</_>\n        <_>\n          7 1 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 6 -1.</_>\n        <_>\n          1 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 15 6 -1.</_>\n        <_>\n          5 10 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 5 -1.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 5 -1.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 4 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 5 9 -1.</_>\n        <_>\n          5 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 3 -1.</_>\n        <_>\n          7 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          0 0 10 2 2.</_>\n        <_>\n          10 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 2 -1.</_>\n        <_>\n          6 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 13 3 -1.</_>\n        <_>\n          1 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 10 -1.</_>\n        <_>\n          15 0 3 5 2.</_>\n        <_>\n          12 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 13 2 -1.</_>\n        <_>\n          3 17 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 13 3 -1.</_>\n        <_>\n          1 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          0 1 9 2 2.</_>\n        <_>\n          9 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 4 -1.</_>\n        <_>\n          5 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 10 -1.</_>\n        <_>\n          4 2 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 6 -1.</_>\n        <_>\n          8 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 6 -1.</_>\n        <_>\n          5 4 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 12 -1.</_>\n        <_>\n          8 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 14 8 -1.</_>\n        <_>\n          5 4 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 4 14 -1.</_>\n        <_>\n          2 4 2 7 2.</_>\n        <_>\n          4 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 6 -1.</_>\n        <_>\n          15 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 5 -1.</_>\n        <_>\n          8 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          8 14 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 14 -1.</_>\n        <_>\n          2 5 6 7 2.</_>\n        <_>\n          8 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          10 10 7 2 2.</_>\n        <_>\n          3 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          8 2 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 14 -1.</_>\n        <_>\n          14 0 2 7 2.</_>\n        <_>\n          12 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 14 -1.</_>\n        <_>\n          4 0 2 7 2.</_>\n        <_>\n          6 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 6 11 -1.</_>\n        <_>\n          14 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 14 -1.</_>\n        <_>\n          1 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 3 13 -1.</_>\n        <_>\n          16 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 3 13 -1.</_>\n        <_>\n          3 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 10 10 -1.</_>\n        <_>\n          13 10 5 5 2.</_>\n        <_>\n          8 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 20 -1.</_>\n        <_>\n          7 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 6 -1.</_>\n        <_>\n          12 14 7 3 2.</_>\n        <_>\n          5 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 3 13 -1.</_>\n        <_>\n          2 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 14 -1.</_>\n        <_>\n          18 6 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 14 -1.</_>\n        <_>\n          1 6 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 9 5 -1.</_>\n        <_>\n          13 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 7 -1.</_>\n        <_>\n          4 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 16 -1.</_>\n        <_>\n          11 4 7 8 2.</_>\n        <_>\n          4 12 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 7 6 -1.</_>\n        <_>\n          12 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 20 3 -1.</_>\n        <_>\n          10 17 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 10 4 -1.</_>\n        <_>\n          6 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 7 6 -1.</_>\n        <_>\n          12 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 8 -1.</_>\n        <_>\n          9 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 15 -1.</_>\n        <_>\n          6 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 9 -1.</_>\n        <_>\n          3 9 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 8 -1.</_>\n        <_>\n          4 9 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 16 -1.</_>\n        <_>\n          2 4 7 8 2.</_>\n        <_>\n          9 12 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 12 3 -1.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 19 3 -1.</_>\n        <_>\n          1 8 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 10 -1.</_>\n        <_>\n          10 0 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 12 4 -1.</_>\n        <_>\n          6 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 5 -1.</_>\n        <_>\n          7 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 18 -1.</_>\n        <_>\n          18 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 3 -1.</_>\n        <_>\n          3 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 7 6 -1.</_>\n        <_>\n          12 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 7 6 -1.</_>\n        <_>\n          12 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 7 6 -1.</_>\n        <_>\n          1 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 12 12 -1.</_>\n        <_>\n          5 11 12 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 10 -1.</_>\n        <_>\n          4 5 5 5 2.</_>\n        <_>\n          9 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 7 -1.</_>\n        <_>\n          12 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 9 6 -1.</_>\n        <_>\n          4 3 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 2 -1.</_>\n        <_>\n          4 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 18 -1.</_>\n        <_>\n          1 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 2 -1.</_>\n        <_>\n          0 14 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 10 4 -1.</_>\n        <_>\n          9 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 12 16 -1.</_>\n        <_>\n          8 4 6 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 16 -1.</_>\n        <_>\n          6 4 6 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 9 -1.</_>\n        <_>\n          12 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 7 -1.</_>\n        <_>\n          4 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 16 -1.</_>\n        <_>\n          13 0 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 18 12 -1.</_>\n        <_>\n          6 7 6 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 16 4 -1.</_>\n        <_>\n          0 7 8 2 2.</_>\n        <_>\n          8 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 9 5 -1.</_>\n        <_>\n          10 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 16 -1.</_>\n        <_>\n          6 0 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 2 -1.</_>\n        <_>\n          6 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 2 -1.</_>\n        <_>\n          1 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 8 -1.</_>\n        <_>\n          8 4 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 4 8 -1.</_>\n        <_>\n          14 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 4 8 -1.</_>\n        <_>\n          4 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 7 -1.</_>\n        <_>\n          12 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 8 -1.</_>\n        <_>\n          4 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 7 -1.</_>\n        <_>\n          10 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 7 -1.</_>\n        <_>\n          7 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 5 -1.</_>\n        <_>\n          8 10 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 6 -1.</_>\n        <_>\n          6 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 3 -1.</_>\n        <_>\n          4 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 4 14 -1.</_>\n        <_>\n          4 3 2 7 2.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 2 -1.</_>\n        <_>\n          10 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 14 -1.</_>\n        <_>\n          15 6 4 7 2.</_>\n        <_>\n          11 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 19 -1.</_>\n        <_>\n          4 0 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 10 -1.</_>\n        <_>\n          15 5 3 5 2.</_>\n        <_>\n          12 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 10 -1.</_>\n        <_>\n          2 5 3 5 2.</_>\n        <_>\n          5 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 9 4 -1.</_>\n        <_>\n          7 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 2 -1.</_>\n        <_>\n          9 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 9 -1.</_>\n        <_>\n          6 6 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 9 5 -1.</_>\n        <_>\n          7 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          10 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 5 -1.</_>\n        <_>\n          8 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 4 -1.</_>\n        <_>\n          11 1 7 2 2.</_>\n        <_>\n          4 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 2 13 -1.</_>\n        <_>\n          10 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 4 13 -1.</_>\n        <_>\n          3 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 5 12 -1.</_>\n        <_>\n          15 10 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 16 -1.</_>\n        <_>\n          0 1 3 8 2.</_>\n        <_>\n          3 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          0 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 12 -1.</_>\n        <_>\n          0 10 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          10 0 9 3 2.</_>\n        <_>\n          1 3 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 5 -1.</_>\n        <_>\n          7 0 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 9 5 -1.</_>\n        <_>\n          10 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 8 18 -1.</_>\n        <_>\n          11 2 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 18 -1.</_>\n        <_>\n          5 2 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 5 6 -1.</_>\n        <_>\n          12 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 14 4 -1.</_>\n        <_>\n          2 1 7 2 2.</_>\n        <_>\n          9 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 8 6 -1.</_>\n        <_>\n          12 9 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 6 -1.</_>\n        <_>\n          0 9 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 13 2 -1.</_>\n        <_>\n          7 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 9 -1.</_>\n        <_>\n          1 9 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 20 6 -1.</_>\n        <_>\n          0 10 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 4 13 -1.</_>\n        <_>\n          6 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 15 -1.</_>\n        <_>\n          14 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 3 -1.</_>\n        <_>\n          3 16 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 17 3 -1.</_>\n        <_>\n          0 17 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 11 6 -1.</_>\n        <_>\n          5 14 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 15 -1.</_>\n        <_>\n          5 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 9 -1.</_>\n        <_>\n          3 4 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 8 -1.</_>\n        <_>\n          0 4 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 4 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 2 -1.</_>\n        <_>\n          2 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 3 -1.</_>\n        <_>\n          2 13 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 3 -1.</_>\n        <_>\n          1 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 7 6 -1.</_>\n        <_>\n          5 16 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 14 3 -1.</_>\n        <_>\n          4 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 14 -1.</_>\n        <_>\n          3 7 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 14 -1.</_>\n        <_>\n          4 8 12 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 4 -1.</_>\n        <_>\n          6 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 8 6 -1.</_>\n        <_>\n          8 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 5 -1.</_>\n        <_>\n          11 10 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 16 -1.</_>\n        <_>\n          1 0 4 8 2.</_>\n        <_>\n          5 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 6 18 -1.</_>\n        <_>\n          8 8 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 6 18 -1.</_>\n        <_>\n          6 8 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 4 -1.</_>\n        <_>\n          7 8 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 5 9 -1.</_>\n        <_>\n          1 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 10 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_>\n        <_>\n          5 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 5 9 -1.</_>\n        <_>\n          9 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 12 4 -1.</_>\n        <_>\n          4 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 3 14 -1.</_>\n        <_>\n          15 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          6 9 4 4 2.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 9 -1.</_>\n        <_>\n          8 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 16 -1.</_>\n        <_>\n          10 2 3 8 2.</_>\n        <_>\n          7 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 5 -1.</_>\n        <_>\n          9 15 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 14 4 -1.</_>\n        <_>\n          11 12 7 2 2.</_>\n        <_>\n          4 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 14 4 -1.</_>\n        <_>\n          2 12 7 2 2.</_>\n        <_>\n          9 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 14 3 -1.</_>\n        <_>\n          4 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 3 -1.</_>\n        <_>\n          5 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 8 -1.</_>\n        <_>\n          8 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 2 -1.</_>\n        <_>\n          10 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 9 -1.</_>\n        <_>\n          6 0 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 10 6 -1.</_>\n        <_>\n          3 2 5 3 2.</_>\n        <_>\n          8 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 13 -1.</_>\n        <_>\n          15 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 6 -1.</_>\n        <_>\n          1 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 3 -1.</_>\n        <_>\n          3 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 15 9 -1.</_>\n        <_>\n          4 5 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 14 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 16 4 -1.</_>\n        <_>\n          12 16 8 2 2.</_>\n        <_>\n          4 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 16 4 -1.</_>\n        <_>\n          0 16 8 2 2.</_>\n        <_>\n          8 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 8 -1.</_>\n        <_>\n          8 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 12 -1.</_>\n        <_>\n          4 12 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 12 -1.</_>\n        <_>\n          1 9 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 9 4 -1.</_>\n        <_>\n          4 8 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 19 3 -1.</_>\n        <_>\n          1 6 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 12 14 -1.</_>\n        <_>\n          2 3 6 7 2.</_>\n        <_>\n          8 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 16 -1.</_>\n        <_>\n          13 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 16 -1.</_>\n        <_>\n          4 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 14 -1.</_>\n        <_>\n          8 0 4 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_>\n        <_>\n          5 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 13 3 -1.</_>\n        <_>\n          7 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 10 -1.</_>\n        <_>\n          5 5 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 14 -1.</_>\n        <_>\n          15 6 4 7 2.</_>\n        <_>\n          11 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 13 -1.</_>\n        <_>\n          4 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 14 -1.</_>\n        <_>\n          15 6 4 7 2.</_>\n        <_>\n          11 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 13 -1.</_>\n        <_>\n          4 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 5 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 8 14 -1.</_>\n        <_>\n          1 6 4 7 2.</_>\n        <_>\n          5 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 6 -1.</_>\n        <_>\n          11 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 9 -1.</_>\n        <_>\n          12 14 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 15 9 -1.</_>\n        <_>\n          2 14 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 18 4 -1.</_>\n        <_>\n          8 16 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          7 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          14 0 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          3 0 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 16 -1.</_>\n        <_>\n          15 1 2 8 2.</_>\n        <_>\n          13 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 6 11 -1.</_>\n        <_>\n          3 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 10 -1.</_>\n        <_>\n          0 0 6 5 2.</_>\n        <_>\n          6 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 3 -1.</_>\n        <_>\n          4 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 4 8 -1.</_>\n        <_>\n          13 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 4 8 -1.</_>\n        <_>\n          3 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 5 6 -1.</_>\n        <_>\n          15 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 13 3 -1.</_>\n        <_>\n          0 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 6 -1.</_>\n        <_>\n          14 8 5 3 2.</_>\n        <_>\n          9 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 6 -1.</_>\n        <_>\n          1 8 5 3 2.</_>\n        <_>\n          6 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 15 6 -1.</_>\n        <_>\n          5 8 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 2 -1.</_>\n        <_>\n          9 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 7 -1.</_>\n        <_>\n          9 1 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 7 -1.</_>\n        <_>\n          8 1 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 6 -1.</_>\n        <_>\n          0 9 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 2 -1.</_>\n        <_>\n          2 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 15 6 -1.</_>\n        <_>\n          0 4 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 2 -1.</_>\n        <_>\n          5 3 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 7 4 -1.</_>\n        <_>\n          5 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 8 -1.</_>\n        <_>\n          13 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 6 -1.</_>\n        <_>\n          12 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 9 -1.</_>\n        <_>\n          3 6 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 6 -1.</_>\n        <_>\n          12 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 5 6 -1.</_>\n        <_>\n          3 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 17 8 -1.</_>\n        <_>\n          2 13 17 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 7 12 -1.</_>\n        <_>\n          6 12 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 9 -1.</_>\n        <_>\n          11 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 16 -1.</_>\n        <_>\n          6 2 2 8 2.</_>\n        <_>\n          8 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 6 -1.</_>\n        <_>\n          15 4 5 3 2.</_>\n        <_>\n          10 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          6 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 7 -1.</_>\n        <_>\n          10 1 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 9 7 -1.</_>\n        <_>\n          7 1 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 12 17 -1.</_>\n        <_>\n          5 1 4 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 12 -1.</_>\n        <_>\n          12 1 3 6 2.</_>\n        <_>\n          9 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 9 15 -1.</_>\n        <_>\n          5 5 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 4 -1.</_>\n        <_>\n          12 0 8 2 2.</_>\n        <_>\n          4 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 4 -1.</_>\n        <_>\n          0 0 8 2 2.</_>\n        <_>\n          8 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 6 -1.</_>\n        <_>\n          15 4 5 3 2.</_>\n        <_>\n          10 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 2 -1.</_>\n        <_>\n          5 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 6 -1.</_>\n        <_>\n          0 4 5 3 2.</_>\n        <_>\n          5 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 12 5 -1.</_>\n        <_>\n          12 11 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 7 6 -1.</_>\n        <_>\n          11 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 6 -1.</_>\n        <_>\n          1 17 18 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 6 -1.</_>\n        <_>\n          3 3 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 6 -1.</_>\n        <_>\n          12 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 12 5 -1.</_>\n        <_>\n          9 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          5 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 5 -1.</_>\n        <_>\n          5 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 16 -1.</_>\n        <_>\n          12 2 3 8 2.</_>\n        <_>\n          9 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 14 -1.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 8 -1.</_>\n        <_>\n          5 1 5 4 2.</_>\n        <_>\n          10 5 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 7 6 -1.</_>\n        <_>\n          11 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 14 3 -1.</_>\n        <_>\n          1 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 8 -1.</_>\n        <_>\n          0 5 9 4 2.</_>\n        <_>\n          9 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 14 -1.</_>\n        <_>\n          15 5 2 7 2.</_>\n        <_>\n          13 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 13 -1.</_>\n        <_>\n          2 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 14 -1.</_>\n        <_>\n          15 5 2 7 2.</_>\n        <_>\n          13 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 14 -1.</_>\n        <_>\n          3 5 2 7 2.</_>\n        <_>\n          5 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 16 -1.</_>\n        <_>\n          16 4 3 8 2.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 6 -1.</_>\n        <_>\n          0 9 5 3 2.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 15 -1.</_>\n        <_>\n          9 10 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 10 -1.</_>\n        <_>\n          10 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 16 -1.</_>\n        <_>\n          16 4 3 8 2.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 5 -1.</_>\n        <_>\n          7 8 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 16 -1.</_>\n        <_>\n          16 4 3 8 2.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 16 -1.</_>\n        <_>\n          1 4 3 8 2.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 18 4 -1.</_>\n        <_>\n          11 15 9 2 2.</_>\n        <_>\n          2 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 16 -1.</_>\n        <_>\n          7 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 4 -1.</_>\n        <_>\n          0 6 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 17 -1.</_>\n        <_>\n          14 1 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 7 6 -1.</_>\n        <_>\n          2 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 16 -1.</_>\n        <_>\n          14 0 3 8 2.</_>\n        <_>\n          11 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 16 -1.</_>\n        <_>\n          3 0 3 8 2.</_>\n        <_>\n          6 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 10 3 -1.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 5 -1.</_>\n        <_>\n          7 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 10 3 -1.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 8 -1.</_>\n        <_>\n          7 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 9 6 -1.</_>\n        <_>\n          11 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 7 9 -1.</_>\n        <_>\n          4 10 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 6 -1.</_>\n        <_>\n          5 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 19 4 -1.</_>\n        <_>\n          0 16 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 12 8 -1.</_>\n        <_>\n          12 9 6 4 2.</_>\n        <_>\n          6 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 3 14 -1.</_>\n        <_>\n          2 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 12 8 -1.</_>\n        <_>\n          12 9 6 4 2.</_>\n        <_>\n          6 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 8 -1.</_>\n        <_>\n          2 9 6 4 2.</_>\n        <_>\n          8 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 18 -1.</_>\n        <_>\n          18 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 8 -1.</_>\n        <_>\n          8 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 12 -1.</_>\n        <_>\n          10 3 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 12 -1.</_>\n        <_>\n          12 8 3 6 2.</_>\n        <_>\n          9 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 18 -1.</_>\n        <_>\n          18 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 17 6 -1.</_>\n        <_>\n          1 7 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 6 -1.</_>\n        <_>\n          3 2 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 10 -1.</_>\n        <_>\n          4 6 14 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 7 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 10 9 -1.</_>\n        <_>\n          6 4 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 19 -1.</_>\n        <_>\n          10 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 12 -1.</_>\n        <_>\n          13 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 12 -1.</_>\n        <_>\n          3 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          11 0 9 2 2.</_>\n        <_>\n          2 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 5 -1.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 8 -1.</_>\n        <_>\n          12 5 6 4 2.</_>\n        <_>\n          6 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 8 -1.</_>\n        <_>\n          2 5 6 4 2.</_>\n        <_>\n          8 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 3 -1.</_>\n        <_>\n          2 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 2 -1.</_>\n        <_>\n          7 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 15 3 -1.</_>\n        <_>\n          2 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 4 -1.</_>\n        <_>\n          10 14 9 2 2.</_>\n        <_>\n          1 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 10 -1.</_>\n        <_>\n          5 8 3 5 2.</_>\n        <_>\n          8 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 3 -1.</_>\n        <_>\n          2 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 15 3 -1.</_>\n        <_>\n          0 2 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 4 -1.</_>\n        <_>\n          2 3 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 15 3 -1.</_>\n        <_>\n          3 6 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 6 -1.</_>\n        <_>\n          1 5 5 3 2.</_>\n        <_>\n          6 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 12 -1.</_>\n        <_>\n          9 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 19 2 -1.</_>\n        <_>\n          0 3 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 10 -1.</_>\n        <_>\n          16 0 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 13 3 -1.</_>\n        <_>\n          1 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 4 -1.</_>\n        <_>\n          7 2 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 10 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 7 -1.</_>\n        <_>\n          9 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 13 -1.</_>\n        <_>\n          5 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 6 -1.</_>\n        <_>\n          14 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 15 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 9 -1.</_>\n        <_>\n          7 7 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 9 6 -1.</_>\n        <_>\n          11 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 9 5 -1.</_>\n        <_>\n          8 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_>\n        <_>\n          9 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_>\n        <_>\n          8 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 10 -1.</_>\n        <_>\n          16 10 3 5 2.</_>\n        <_>\n          13 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 10 -1.</_>\n        <_>\n          1 10 3 5 2.</_>\n        <_>\n          4 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 12 -1.</_>\n        <_>\n          10 3 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 12 -1.</_>\n        <_>\n          8 3 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 9 5 -1.</_>\n        <_>\n          14 1 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 3 -1.</_>\n        <_>\n          10 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 10 -1.</_>\n        <_>\n          10 2 4 5 2.</_>\n        <_>\n          6 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 6 10 -1.</_>\n        <_>\n          14 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 9 5 -1.</_>\n        <_>\n          3 1 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 17 -1.</_>\n        <_>\n          16 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 20 -1.</_>\n        <_>\n          4 0 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 17 -1.</_>\n        <_>\n          16 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          10 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 14 -1.</_>\n        <_>\n          8 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 14 15 -1.</_>\n        <_>\n          1 8 14 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 16 -1.</_>\n        <_>\n          16 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 9 -1.</_>\n        <_>\n          4 9 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 16 -1.</_>\n        <_>\n          16 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 16 -1.</_>\n        <_>\n          2 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 4 7 -1.</_>\n        <_>\n          15 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 6 -1.</_>\n        <_>\n          3 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 4 7 -1.</_>\n        <_>\n          3 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 6 -1.</_>\n        <_>\n          14 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 2 13 -1.</_>\n        <_>\n          2 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 11 -1.</_>\n        <_>\n          7 2 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 14 -1.</_>\n        <_>\n          10 6 10 7 2.</_>\n        <_>\n          0 13 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 15 -1.</_>\n        <_>\n          6 5 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 15 -1.</_>\n        <_>\n          16 5 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          7 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          10 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 6 -1.</_>\n        <_>\n          5 13 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 17 12 -1.</_>\n        <_>\n          3 13 17 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 17 12 -1.</_>\n        <_>\n          0 13 17 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 19 -1.</_>\n        <_>\n          8 0 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 7 -1.</_>\n        <_>\n          9 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 8 -1.</_>\n        <_>\n          9 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 19 2 -1.</_>\n        <_>\n          0 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 9 6 -1.</_>\n        <_>\n          11 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 3 -1.</_>\n        <_>\n          5 0 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 9 6 -1.</_>\n        <_>\n          0 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 8 -1.</_>\n        <_>\n          9 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 7 8 -1.</_>\n        <_>\n          4 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 16 2 -1.</_>\n        <_>\n          3 4 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 10 6 -1.</_>\n        <_>\n          6 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 15 9 -1.</_>\n        <_>\n          3 14 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 8 -1.</_>\n        <_>\n          5 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 18 -1.</_>\n        <_>\n          4 9 13 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 4 -1.</_>\n        <_>\n          5 0 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          9 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 6 -1.</_>\n        <_>\n          9 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 20 2 -1.</_>\n        <_>\n          0 8 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 14 -1.</_>\n        <_>\n          6 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 5 12 -1.</_>\n        <_>\n          13 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 6 -1.</_>\n        <_>\n          4 4 6 3 2.</_>\n        <_>\n          10 7 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 8 -1.</_>\n        <_>\n          10 1 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 10 -1.</_>\n        <_>\n          1 1 3 5 2.</_>\n        <_>\n          4 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 8 -1.</_>\n        <_>\n          11 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 8 -1.</_>\n        <_>\n          1 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 3 12 -1.</_>\n        <_>\n          13 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 12 -1.</_>\n        <_>\n          4 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 8 -1.</_>\n        <_>\n          10 1 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 9 8 -1.</_>\n        <_>\n          7 1 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          5 2 3 5 2.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          8 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 8 -1.</_>\n        <_>\n          7 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 16 -1.</_>\n        <_>\n          1 4 2 8 2.</_>\n        <_>\n          3 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 16 4 -1.</_>\n        <_>\n          11 14 8 2 2.</_>\n        <_>\n          3 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 6 -1.</_>\n        <_>\n          8 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 2 -1.</_>\n        <_>\n          6 1 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 14 2 -1.</_>\n        <_>\n          7 1 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 8 -1.</_>\n        <_>\n          12 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 14 -1.</_>\n        <_>\n          5 4 5 7 2.</_>\n        <_>\n          10 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          11 0 9 2 2.</_>\n        <_>\n          2 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          9 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 14 4 -1.</_>\n        <_>\n          11 10 7 2 2.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 6 -1.</_>\n        <_>\n          7 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 7 8 -1.</_>\n        <_>\n          6 4 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 9 4 -1.</_>\n        <_>\n          1 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 2 -1.</_>\n        <_>\n          4 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 3 -1.</_>\n        <_>\n          1 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 9 -1.</_>\n        <_>\n          9 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 4 7 -1.</_>\n        <_>\n          8 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 12 -1.</_>\n        <_>\n          4 8 6 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 5 -1.</_>\n        <_>\n          10 11 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 6 -1.</_>\n        <_>\n          4 7 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 16 -1.</_>\n        <_>\n          0 3 2 8 2.</_>\n        <_>\n          2 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 8 -1.</_>\n        <_>\n          0 4 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 8 8 -1.</_>\n        <_>\n          12 7 4 4 2.</_>\n        <_>\n          8 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 8 8 -1.</_>\n        <_>\n          4 7 4 4 2.</_>\n        <_>\n          8 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 12 -1.</_>\n        <_>\n          4 5 5 6 2.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 11 -1.</_>\n        <_>\n          2 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 6 11 -1.</_>\n        <_>\n          12 4 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 11 -1.</_>\n        <_>\n          5 4 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 9 -1.</_>\n        <_>\n          8 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          10 3 10 2 2.</_>\n        <_>\n          0 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 4 -1.</_>\n        <_>\n          0 15 9 2 2.</_>\n        <_>\n          9 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 13 -1.</_>\n        <_>\n          10 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 7 -1.</_>\n        <_>\n          9 6 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          8 6 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 5 -1.</_>\n        <_>\n          8 0 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 5 -1.</_>\n        <_>\n          8 0 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 19 -1.</_>\n        <_>\n          7 1 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 20 -1.</_>\n        <_>\n          8 0 5 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 14 3 -1.</_>\n        <_>\n          7 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 6 -1.</_>\n        <_>\n          11 4 7 3 2.</_>\n        <_>\n          4 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 3 -1.</_>\n        <_>\n          6 8 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 5 12 -1.</_>\n        <_>\n          2 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 7 4 -1.</_>\n        <_>\n          9 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 4 -1.</_>\n        <_>\n          4 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 10 -1.</_>\n        <_>\n          9 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 17 2 -1.</_>\n        <_>\n          3 11 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 17 -1.</_>\n        <_>\n          3 0 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 12 -1.</_>\n        <_>\n          14 0 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 16 -1.</_>\n        <_>\n          4 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 7 -1.</_>\n        <_>\n          16 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 9 12 -1.</_>\n        <_>\n          12 1 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 9 12 -1.</_>\n        <_>\n          5 1 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 12 -1.</_>\n        <_>\n          13 5 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 12 -1.</_>\n        <_>\n          5 5 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          10 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 11 -1.</_>\n        <_>\n          8 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 6 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 19 2 -1.</_>\n        <_>\n          1 13 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 3 -1.</_>\n        <_>\n          0 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 4 -1.</_>\n        <_>\n          0 8 8 2 2.</_>\n        <_>\n          8 10 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 8 -1.</_>\n        <_>\n          12 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 6 -1.</_>\n        <_>\n          3 15 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 6 -1.</_>\n        <_>\n          4 15 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 4 -1.</_>\n        <_>\n          7 0 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 4 10 -1.</_>\n        <_>\n          14 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 12 -1.</_>\n        <_>\n          2 4 7 6 2.</_>\n        <_>\n          9 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 10 -1.</_>\n        <_>\n          10 4 3 5 2.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 15 -1.</_>\n        <_>\n          1 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 19 12 -1.</_>\n        <_>\n          1 5 19 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 16 -1.</_>\n        <_>\n          12 0 2 8 2.</_>\n        <_>\n          10 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 4 16 -1.</_>\n        <_>\n          6 0 2 8 2.</_>\n        <_>\n          8 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 11 -1.</_>\n        <_>\n          8 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 3 -1.</_>\n        <_>\n          0 12 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 7 4 -1.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 16 4 -1.</_>\n        <_>\n          1 14 8 2 2.</_>\n        <_>\n          9 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 13 3 -1.</_>\n        <_>\n          7 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 8 -1.</_>\n        <_>\n          1 12 9 4 2.</_>\n        <_>\n          10 16 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 4 10 -1.</_>\n        <_>\n          14 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 4 10 -1.</_>\n        <_>\n          2 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 12 -1.</_>\n        <_>\n          2 7 16 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 16 -1.</_>\n        <_>\n          7 8 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 12 -1.</_>\n        <_>\n          7 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 15 8 -1.</_>\n        <_>\n          7 12 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 15 4 -1.</_>\n        <_>\n          9 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 6 -1.</_>\n        <_>\n          10 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 12 -1.</_>\n        <_>\n          1 8 9 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 15 3 -1.</_>\n        <_>\n          5 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 17 -1.</_>\n        <_>\n          11 2 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 17 -1.</_>\n        <_>\n          7 2 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 7 -1.</_>\n        <_>\n          9 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 15 3 -1.</_>\n        <_>\n          0 12 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 11 6 -1.</_>\n        <_>\n          9 12 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 18 -1.</_>\n        <_>\n          9 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 8 -1.</_>\n        <_>\n          14 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 15 8 -1.</_>\n        <_>\n          1 15 15 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 10 -1.</_>\n        <_>\n          9 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 9 -1.</_>\n        <_>\n          1 9 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 2 -1.</_>\n        <_>\n          3 2 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 14 2 -1.</_>\n        <_>\n          5 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 12 10 -1.</_>\n        <_>\n          7 8 4 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 12 -1.</_>\n        <_>\n          6 6 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 4 -1.</_>\n        <_>\n          4 5 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 6 -1.</_>\n        <_>\n          7 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          4 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 17 14 -1.</_>\n        <_>\n          2 12 17 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 8 -1.</_>\n        <_>\n          0 11 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 15 -1.</_>\n        <_>\n          13 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 15 -1.</_>\n        <_>\n          6 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 5 -1.</_>\n        <_>\n          12 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 5 -1.</_>\n        <_>\n          4 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 3 -1.</_>\n        <_>\n          3 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 18 -1.</_>\n        <_>\n          7 1 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 9 4 -1.</_>\n        <_>\n          6 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 17 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 13 3 -1.</_>\n        <_>\n          7 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 4 -1.</_>\n        <_>\n          4 4 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 14 4 -1.</_>\n        <_>\n          13 4 7 2 2.</_>\n        <_>\n          6 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 10 8 -1.</_>\n        <_>\n          3 12 5 4 2.</_>\n        <_>\n          8 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 9 -1.</_>\n        <_>\n          12 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 14 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_>\n        <_>\n          7 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 15 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 16 4 -1.</_>\n        <_>\n          1 18 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 9 -1.</_>\n        <_>\n          12 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 5 9 -1.</_>\n        <_>\n          3 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 13 12 -1.</_>\n        <_>\n          5 12 13 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 5 5 3 2.</_>\n        <_>\n          10 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_>\n        <_>\n          5 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 13 2 -1.</_>\n        <_>\n          0 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 12 4 -1.</_>\n        <_>\n          8 4 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 6 -1.</_>\n        <_>\n          5 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 4 -1.</_>\n        <_>\n          12 2 7 2 2.</_>\n        <_>\n          5 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 4 -1.</_>\n        <_>\n          12 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 8 -1.</_>\n        <_>\n          8 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 5 8 -1.</_>\n        <_>\n          9 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 4 -1.</_>\n        <_>\n          6 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 14 4 -1.</_>\n        <_>\n          11 6 7 2 2.</_>\n        <_>\n          4 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 11 10 -1.</_>\n        <_>\n          4 9 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 12 -1.</_>\n        <_>\n          7 7 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 15 -1.</_>\n        <_>\n          8 10 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 6 -1.</_>\n        <_>\n          0 6 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 12 4 -1.</_>\n        <_>\n          5 5 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 8 -1.</_>\n        <_>\n          6 11 4 4 2.</_>\n        <_>\n          10 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 4 -1.</_>\n        <_>\n          0 13 9 2 2.</_>\n        <_>\n          9 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 18 -1.</_>\n        <_>\n          8 0 6 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 12 15 -1.</_>\n        <_>\n          2 7 12 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 11 18 -1.</_>\n        <_>\n          7 7 11 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          8 5 2 7 2.</_>\n        <_>\n          10 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 3 14 -1.</_>\n        <_>\n          10 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 14 -1.</_>\n        <_>\n          7 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 4 -1.</_>\n        <_>\n          3 6 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 4 -1.</_>\n        <_>\n          0 5 10 2 2.</_>\n        <_>\n          10 7 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 14 -1.</_>\n        <_>\n          8 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 4 16 -1.</_>\n        <_>\n          17 3 2 8 2.</_>\n        <_>\n          15 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 7 -1.</_>\n        <_>\n          4 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 9 -1.</_>\n        <_>\n          12 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 8 6 -1.</_>\n        <_>\n          2 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 8 -1.</_>\n        <_>\n          10 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 8 -1.</_>\n        <_>\n          8 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 5 6 -1.</_>\n        <_>\n          4 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 8 -1.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 7 6 -1.</_>\n        <_>\n          3 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 12 -1.</_>\n        <_>\n          11 6 3 6 2.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 14 -1.</_>\n        <_>\n          5 6 2 7 2.</_>\n        <_>\n          7 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 2 -1.</_>\n        <_>\n          0 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 2 -1.</_>\n        <_>\n          6 16 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 19 3 -1.</_>\n        <_>\n          0 18 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          12 5 3 5 2.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 2 -1.</_>\n        <_>\n          3 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 17 6 -1.</_>\n        <_>\n          2 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 16 -1.</_>\n        <_>\n          1 3 2 8 2.</_>\n        <_>\n          3 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 12 4 -1.</_>\n        <_>\n          5 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 6 -1.</_>\n        <_>\n          10 0 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 10 -1.</_>\n        <_>\n          10 9 3 5 2.</_>\n        <_>\n          7 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 18 6 -1.</_>\n        <_>\n          6 14 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 16 -1.</_>\n        <_>\n          14 0 3 8 2.</_>\n        <_>\n          11 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          7 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 13 -1.</_>\n        <_>\n          17 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 16 6 -1.</_>\n        <_>\n          9 14 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 6 -1.</_>\n        <_>\n          5 3 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 14 15 -1.</_>\n        <_>\n          6 9 14 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 4 -1.</_>\n        <_>\n          3 1 7 2 2.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 10 -1.</_>\n        <_>\n          11 3 3 5 2.</_>\n        <_>\n          8 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 10 -1.</_>\n        <_>\n          6 3 3 5 2.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 5 -1.</_>\n        <_>\n          11 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 6 -1.</_>\n        <_>\n          5 7 5 3 2.</_>\n        <_>\n          10 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 19 3 -1.</_>\n        <_>\n          1 11 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 13 -1.</_>\n        <_>\n          2 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 16 -1.</_>\n        <_>\n          16 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 12 -1.</_>\n        <_>\n          3 5 7 6 2.</_>\n        <_>\n          10 11 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 16 -1.</_>\n        <_>\n          16 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 16 -1.</_>\n        <_>\n          2 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          8 2 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 12 6 -1.</_>\n        <_>\n          3 12 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 10 -1.</_>\n        <_>\n          11 9 3 5 2.</_>\n        <_>\n          8 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 10 -1.</_>\n        <_>\n          6 9 3 5 2.</_>\n        <_>\n          9 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 10 3 -1.</_>\n        <_>\n          5 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 18 -1.</_>\n        <_>\n          8 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 7 6 -1.</_>\n        <_>\n          0 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 15 6 -1.</_>\n        <_>\n          5 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 4 14 -1.</_>\n        <_>\n          2 4 2 7 2.</_>\n        <_>\n          4 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 12 -1.</_>\n        <_>\n          14 1 3 6 2.</_>\n        <_>\n          11 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 12 -1.</_>\n        <_>\n          3 1 3 6 2.</_>\n        <_>\n          6 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 6 -1.</_>\n        <_>\n          9 7 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 9 5 -1.</_>\n        <_>\n          11 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 7 -1.</_>\n        <_>\n          3 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 8 5 -1.</_>\n        <_>\n          9 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 8 5 -1.</_>\n        <_>\n          7 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 19 -1.</_>\n        <_>\n          8 0 4 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 8 6 -1.</_>\n        <_>\n          7 8 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 6 -1.</_>\n        <_>\n          15 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 13 10 -1.</_>\n        <_>\n          3 6 13 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 10 -1.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 8 -1.</_>\n        <_>\n          0 1 10 4 2.</_>\n        <_>\n          10 5 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 12 -1.</_>\n        <_>\n          11 6 3 6 2.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 6 10 -1.</_>\n        <_>\n          10 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 14 -1.</_>\n        <_>\n          9 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 18 -1.</_>\n        <_>\n          11 1 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 18 -1.</_>\n        <_>\n          7 1 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 5 -1.</_>\n        <_>\n          7 1 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 8 -1.</_>\n        <_>\n          7 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 4 -1.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 9 -1.</_>\n        <_>\n          10 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 6 -1.</_>\n        <_>\n          0 1 9 3 2.</_>\n        <_>\n          9 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 3 -1.</_>\n        <_>\n          5 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 5 -1.</_>\n        <_>\n          3 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 9 6 -1.</_>\n        <_>\n          13 10 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 19 -1.</_>\n        <_>\n          8 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 9 6 -1.</_>\n        <_>\n          6 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 14 -1.</_>\n        <_>\n          10 4 4 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 12 14 -1.</_>\n        <_>\n          6 4 4 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 5 -1.</_>\n        <_>\n          7 1 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 19 -1.</_>\n        <_>\n          8 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 9 5 -1.</_>\n        <_>\n          11 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 9 5 -1.</_>\n        <_>\n          6 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 4 -1.</_>\n        <_>\n          8 1 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 18 -1.</_>\n        <_>\n          1 2 4 9 2.</_>\n        <_>\n          5 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 6 9 -1.</_>\n        <_>\n          11 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 6 9 -1.</_>\n        <_>\n          3 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 6 -1.</_>\n        <_>\n          9 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 7 6 -1.</_>\n        <_>\n          4 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 16 -1.</_>\n        <_>\n          3 8 17 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 3 -1.</_>\n        <_>\n          0 1 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 5 9 -1.</_>\n        <_>\n          11 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 10 6 -1.</_>\n        <_>\n          4 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 12 9 -1.</_>\n        <_>\n          7 13 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 12 3 -1.</_>\n        <_>\n          7 10 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 12 -1.</_>\n        <_>\n          10 8 3 6 2.</_>\n        <_>\n          7 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 6 -1.</_>\n        <_>\n          11 6 5 3 2.</_>\n        <_>\n          6 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 6 -1.</_>\n        <_>\n          4 6 5 3 2.</_>\n        <_>\n          9 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 9 5 -1.</_>\n        <_>\n          9 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 6 10 -1.</_>\n        <_>\n          8 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 7 -1.</_>\n        <_>\n          10 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 8 4 -1.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 9 -1.</_>\n        <_>\n          0 3 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 8 4 -1.</_>\n        <_>\n          9 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 6 -1.</_>\n        <_>\n          4 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 9 4 -1.</_>\n        <_>\n          8 8 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 11 -1.</_>\n        <_>\n          15 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 11 -1.</_>\n        <_>\n          3 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 5 -1.</_>\n        <_>\n          11 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 17 -1.</_>\n        <_>\n          6 2 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 8 8 -1.</_>\n        <_>\n          12 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 4 -1.</_>\n        <_>\n          6 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 9 6 -1.</_>\n        <_>\n          2 13 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 11 6 -1.</_>\n        <_>\n          9 14 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 8 -1.</_>\n        <_>\n          3 11 7 4 2.</_>\n        <_>\n          10 15 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 10 -1.</_>\n        <_>\n          8 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 12 -1.</_>\n        <_>\n          9 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 16 -1.</_>\n        <_>\n          4 12 12 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 9 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 9 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 6 -1.</_>\n        <_>\n          2 14 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 12 4 -1.</_>\n        <_>\n          4 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          13 9 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          5 9 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 19 -1.</_>\n        <_>\n          11 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          7 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 13 3 -1.</_>\n        <_>\n          1 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 9 4 -1.</_>\n        <_>\n          4 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          3 14 7 2 2.</_>\n        <_>\n          10 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 14 -1.</_>\n        <_>\n          13 7 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 14 -1.</_>\n        <_>\n          0 7 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 16 4 -1.</_>\n        <_>\n          3 2 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 8 -1.</_>\n        <_>\n          6 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 14 -1.</_>\n        <_>\n          10 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 9 -1.</_>\n        <_>\n          1 10 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 14 -1.</_>\n        <_>\n          9 5 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 14 -1.</_>\n        <_>\n          8 5 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 15 -1.</_>\n        <_>\n          11 2 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 4 8 -1.</_>\n        <_>\n          8 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 10 9 -1.</_>\n        <_>\n          6 13 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 13 -1.</_>\n        <_>\n          9 5 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 4 -1.</_>\n        <_>\n          8 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 14 2 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 14 2 -1.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 15 -1.</_>\n        <_>\n          16 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 10 -1.</_>\n        <_>\n          2 0 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 4 12 -1.</_>\n        <_>\n          16 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 4 12 -1.</_>\n        <_>\n          0 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 14 -1.</_>\n        <_>\n          11 5 2 7 2.</_>\n        <_>\n          9 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 11 6 -1.</_>\n        <_>\n          0 14 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 12 5 -1.</_>\n        <_>\n          9 15 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 12 -1.</_>\n        <_>\n          6 6 3 6 2.</_>\n        <_>\n          9 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 8 4 -1.</_>\n        <_>\n          7 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 10 -1.</_>\n        <_>\n          5 8 3 5 2.</_>\n        <_>\n          8 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 7 14 -1.</_>\n        <_>\n          7 11 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 8 -1.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 9 -1.</_>\n        <_>\n          9 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 9 -1.</_>\n        <_>\n          5 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 11 -1.</_>\n        <_>\n          10 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          10 1 9 2 2.</_>\n        <_>\n          1 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 16 -1.</_>\n        <_>\n          3 4 2 8 2.</_>\n        <_>\n          5 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 6 8 -1.</_>\n        <_>\n          10 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 7 -1.</_>\n        <_>\n          2 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 9 -1.</_>\n        <_>\n          0 5 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 13 -1.</_>\n        <_>\n          17 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 13 -1.</_>\n        <_>\n          2 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 7 -1.</_>\n        <_>\n          6 7 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 10 -1.</_>\n        <_>\n          5 3 3 5 2.</_>\n        <_>\n          8 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 5 -1.</_>\n        <_>\n          6 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 8 -1.</_>\n        <_>\n          4 4 6 4 2.</_>\n        <_>\n          10 8 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 10 6 -1.</_>\n        <_>\n          13 8 5 3 2.</_>\n        <_>\n          8 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 10 6 -1.</_>\n        <_>\n          2 8 5 3 2.</_>\n        <_>\n          7 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 14 -1.</_>\n        <_>\n          13 5 4 7 2.</_>\n        <_>\n          9 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 9 5 -1.</_>\n        <_>\n          9 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 14 -1.</_>\n        <_>\n          1 6 2 7 2.</_>\n        <_>\n          3 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 8 8 -1.</_>\n        <_>\n          13 6 4 4 2.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 8 -1.</_>\n        <_>\n          2 4 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 14 -1.</_>\n        <_>\n          13 5 4 7 2.</_>\n        <_>\n          9 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 8 8 -1.</_>\n        <_>\n          3 6 4 4 2.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 10 -1.</_>\n        <_>\n          14 3 3 5 2.</_>\n        <_>\n          11 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 10 -1.</_>\n        <_>\n          3 3 3 5 2.</_>\n        <_>\n          6 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 10 -1.</_>\n        <_>\n          15 0 4 5 2.</_>\n        <_>\n          11 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 13 3 -1.</_>\n        <_>\n          5 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 12 -1.</_>\n        <_>\n          0 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 6 -1.</_>\n        <_>\n          12 8 8 3 2.</_>\n        <_>\n          4 11 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 7 -1.</_>\n        <_>\n          5 9 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 15 9 -1.</_>\n        <_>\n          5 9 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 15 9 -1.</_>\n        <_>\n          0 9 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 2 -1.</_>\n        <_>\n          6 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 10 3 -1.</_>\n        <_>\n          8 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 5 -1.</_>\n        <_>\n          14 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 2 -1.</_>\n        <_>\n          10 6 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 12 8 -1.</_>\n        <_>\n          5 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 18 3 -1.</_>\n        <_>\n          0 4 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 2 -1.</_>\n        <_>\n          2 8 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 7 6 -1.</_>\n        <_>\n          10 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 19 2 -1.</_>\n        <_>\n          0 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 18 -1.</_>\n        <_>\n          13 9 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 9 5 -1.</_>\n        <_>\n          4 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 17 -1.</_>\n        <_>\n          18 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 16 -1.</_>\n        <_>\n          1 0 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          10 1 3 5 2.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 12 11 -1.</_>\n        <_>\n          4 9 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 16 -1.</_>\n        <_>\n          10 2 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 16 -1.</_>\n        <_>\n          8 2 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 4 12 -1.</_>\n        <_>\n          9 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 10 9 -1.</_>\n        <_>\n          7 9 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 13 3 -1.</_>\n        <_>\n          0 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 7 6 -1.</_>\n        <_>\n          10 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 11 6 -1.</_>\n        <_>\n          4 4 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 8 4 -1.</_>\n        <_>\n          9 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 10 -1.</_>\n        <_>\n          5 5 3 5 2.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 3 13 -1.</_>\n        <_>\n          16 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 13 -1.</_>\n        <_>\n          3 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 13 -1.</_>\n        <_>\n          14 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 10 6 -1.</_>\n        <_>\n          4 3 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 8 -1.</_>\n        <_>\n          0 6 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 13 18 -1.</_>\n        <_>\n          2 10 13 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 10 -1.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 14 -1.</_>\n        <_>\n          9 6 6 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 6 6 -1.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          7 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 18 2 -1.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 13 -1.</_>\n        <_>\n          5 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 7 -1.</_>\n        <_>\n          13 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 7 -1.</_>\n        <_>\n          5 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 5 12 -1.</_>\n        <_>\n          8 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 8 5 -1.</_>\n        <_>\n          6 4 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 16 -1.</_>\n        <_>\n          7 4 3 8 2.</_>\n        <_>\n          10 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 8 4 -1.</_>\n        <_>\n          3 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 6 -1.</_>\n        <_>\n          12 8 8 3 2.</_>\n        <_>\n          4 11 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 8 -1.</_>\n        <_>\n          5 15 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 17 -1.</_>\n        <_>\n          12 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 17 -1.</_>\n        <_>\n          6 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 16 2 -1.</_>\n        <_>\n          9 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          9 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 13 -1.</_>\n        <_>\n          6 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 13 2 -1.</_>\n        <_>\n          4 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 3 -1.</_>\n        <_>\n          1 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 12 -1.</_>\n        <_>\n          3 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 6 -1.</_>\n        <_>\n          0 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 11 10 -1.</_>\n        <_>\n          9 5 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 20 -1.</_>\n        <_>\n          0 10 20 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 4 -1.</_>\n        <_>\n          10 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 4 -1.</_>\n        <_>\n          5 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 10 -1.</_>\n        <_>\n          15 0 4 5 2.</_>\n        <_>\n          11 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 10 -1.</_>\n        <_>\n          1 0 4 5 2.</_>\n        <_>\n          5 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          0 3 10 2 2.</_>\n        <_>\n          10 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 7 -1.</_>\n        <_>\n          6 6 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 16 -1.</_>\n        <_>\n          8 0 4 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 8 -1.</_>\n        <_>\n          7 6 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 11 8 -1.</_>\n        <_>\n          7 16 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 12 -1.</_>\n        <_>\n          6 0 3 6 2.</_>\n        <_>\n          9 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 12 -1.</_>\n        <_>\n          10 3 6 6 2.</_>\n        <_>\n          4 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 7 -1.</_>\n        <_>\n          4 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 4 7 -1.</_>\n        <_>\n          15 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 7 -1.</_>\n        <_>\n          3 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 2 -1.</_>\n        <_>\n          3 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 14 3 -1.</_>\n        <_>\n          4 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 7 6 -1.</_>\n        <_>\n          1 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 13 9 -1.</_>\n        <_>\n          6 8 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 6 -1.</_>\n        <_>\n          0 8 8 3 2.</_>\n        <_>\n          8 11 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 12 -1.</_>\n        <_>\n          15 5 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 12 -1.</_>\n        <_>\n          0 5 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 3 -1.</_>\n        <_>\n          5 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 9 -1.</_>\n        <_>\n          4 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 7 -1.</_>\n        <_>\n          14 13 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 5 -1.</_>\n        <_>\n          3 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 19 3 -1.</_>\n        <_>\n          0 12 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 6 -1.</_>\n        <_>\n          0 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 11 -1.</_>\n        <_>\n          2 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 5 -1.</_>\n        <_>\n          8 11 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 14 4 -1.</_>\n        <_>\n          1 15 7 2 2.</_>\n        <_>\n          8 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 9 -1.</_>\n        <_>\n          12 13 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 9 -1.</_>\n        <_>\n          1 13 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 8 8 -1.</_>\n        <_>\n          15 7 4 4 2.</_>\n        <_>\n          11 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 4 -1.</_>\n        <_>\n          6 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 2 19 -1.</_>\n        <_>\n          11 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 10 -1.</_>\n        <_>\n          6 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 5 -1.</_>\n        <_>\n          11 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 5 -1.</_>\n        <_>\n          6 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 15 4 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 16 2 -1.</_>\n        <_>\n          8 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 8 14 -1.</_>\n        <_>\n          3 5 4 7 2.</_>\n        <_>\n          7 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 7 15 -1.</_>\n        <_>\n          12 7 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 7 15 -1.</_>\n        <_>\n          1 7 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 12 -1.</_>\n        <_>\n          13 6 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 10 -1.</_>\n        <_>\n          6 0 4 5 2.</_>\n        <_>\n          10 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 19 -1.</_>\n        <_>\n          11 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 8 8 -1.</_>\n        <_>\n          4 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 15 4 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 19 -1.</_>\n        <_>\n          8 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 9 -1.</_>\n        <_>\n          10 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 4 -1.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 15 4 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 4 12 -1.</_>\n        <_>\n          2 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 6 -1.</_>\n        <_>\n          10 7 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 4 -1.</_>\n        <_>\n          7 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 12 4 -1.</_>\n        <_>\n          8 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 4 -1.</_>\n        <_>\n          6 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 15 4 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 15 4 -1.</_>\n        <_>\n          6 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 18 -1.</_>\n        <_>\n          10 0 4 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 18 -1.</_>\n        <_>\n          0 9 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 4 -1.</_>\n        <_>\n          13 8 7 2 2.</_>\n        <_>\n          6 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 14 4 -1.</_>\n        <_>\n          0 8 7 2 2.</_>\n        <_>\n          7 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 10 -1.</_>\n        <_>\n          3 7 14 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 6 7 -1.</_>\n        <_>\n          5 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 6 -1.</_>\n        <_>\n          11 4 7 3 2.</_>\n        <_>\n          4 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 10 -1.</_>\n        <_>\n          6 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 18 -1.</_>\n        <_>\n          11 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 15 -1.</_>\n        <_>\n          3 6 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 6 -1.</_>\n        <_>\n          7 0 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 15 -1.</_>\n        <_>\n          2 5 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 3 -1.</_>\n        <_>\n          8 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 8 -1.</_>\n        <_>\n          6 8 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 12 -1.</_>\n        <_>\n          10 8 5 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 3 -1.</_>\n        <_>\n          6 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 14 -1.</_>\n        <_>\n          9 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 6 -1.</_>\n        <_>\n          5 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 6 -1.</_>\n        <_>\n          9 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 4 -1.</_>\n        <_>\n          7 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 15 3 -1.</_>\n        <_>\n          5 18 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 11 5 3 2.</_>\n        <_>\n          10 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 6 9 -1.</_>\n        <_>\n          2 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 14 -1.</_>\n        <_>\n          1 3 2 7 2.</_>\n        <_>\n          3 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 12 -1.</_>\n        <_>\n          13 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 13 -1.</_>\n        <_>\n          9 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 9 5 -1.</_>\n        <_>\n          10 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 9 5 -1.</_>\n        <_>\n          8 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 13 -1.</_>\n        <_>\n          9 5 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 12 -1.</_>\n        <_>\n          7 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 16 -1.</_>\n        <_>\n          4 3 6 8 2.</_>\n        <_>\n          10 11 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 3 -1.</_>\n        <_>\n          3 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 7 -1.</_>\n        <_>\n          0 13 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 14 -1.</_>\n        <_>\n          4 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 6 -1.</_>\n        <_>\n          0 6 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 15 3 -1.</_>\n        <_>\n          0 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 6 -1.</_>\n        <_>\n          10 1 8 3 2.</_>\n        <_>\n          2 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 12 -1.</_>\n        <_>\n          2 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 9 5 -1.</_>\n        <_>\n          12 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 6 -1.</_>\n        <_>\n          3 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 5 -1.</_>\n        <_>\n          10 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 7 -1.</_>\n        <_>\n          7 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 14 -1.</_>\n        <_>\n          6 5 2 7 2.</_>\n        <_>\n          8 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 19 4 -1.</_>\n        <_>\n          1 7 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 10 -1.</_>\n        <_>\n          3 0 6 5 2.</_>\n        <_>\n          9 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 3 -1.</_>\n        <_>\n          9 15 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 6 -1.</_>\n        <_>\n          6 14 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 6 -1.</_>\n        <_>\n          7 14 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 4 -1.</_>\n        <_>\n          6 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 4 -1.</_>\n        <_>\n          12 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 8 -1.</_>\n        <_>\n          1 2 4 4 2.</_>\n        <_>\n          5 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 3 -1.</_>\n        <_>\n          6 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 6 -1.</_>\n        <_>\n          8 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 7 -1.</_>\n        <_>\n          7 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 16 2 -1.</_>\n        <_>\n          3 17 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 6 -1.</_>\n        <_>\n          3 3 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 3 -1.</_>\n        <_>\n          4 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 5 12 -1.</_>\n        <_>\n          1 5 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 13 3 -1.</_>\n        <_>\n          6 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          9 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 8 -1.</_>\n        <_>\n          9 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 8 -1.</_>\n        <_>\n          16 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 9 5 -1.</_>\n        <_>\n          12 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 7 4 -1.</_>\n        <_>\n          5 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 9 4 -1.</_>\n        <_>\n          10 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 10 6 -1.</_>\n        <_>\n          10 15 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 10 6 -1.</_>\n        <_>\n          0 15 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 8 -1.</_>\n        <_>\n          10 8 8 4 2.</_>\n        <_>\n          2 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 7 -1.</_>\n        <_>\n          5 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 10 9 -1.</_>\n        <_>\n          1 10 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 11 6 -1.</_>\n        <_>\n          5 5 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 11 -1.</_>\n        <_>\n          16 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 14 -1.</_>\n        <_>\n          2 6 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 8 12 -1.</_>\n        <_>\n          11 8 4 6 2.</_>\n        <_>\n          7 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 8 -1.</_>\n        <_>\n          2 10 8 4 2.</_>\n        <_>\n          10 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 7 8 -1.</_>\n        <_>\n          11 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 7 8 -1.</_>\n        <_>\n          2 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 4 14 -1.</_>\n        <_>\n          17 6 2 7 2.</_>\n        <_>\n          15 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 14 -1.</_>\n        <_>\n          1 6 2 7 2.</_>\n        <_>\n          3 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 4 8 -1.</_>\n        <_>\n          15 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 8 -1.</_>\n        <_>\n          4 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 7 6 -1.</_>\n        <_>\n          7 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 3 -1.</_>\n        <_>\n          3 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 6 -1.</_>\n        <_>\n          10 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 6 -1.</_>\n        <_>\n          0 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 14 -1.</_>\n        <_>\n          0 10 20 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 12 -1.</_>\n        <_>\n          2 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 6 -1.</_>\n        <_>\n          12 3 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 12 6 -1.</_>\n        <_>\n          4 3 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 4 8 -1.</_>\n        <_>\n          14 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 4 8 -1.</_>\n        <_>\n          4 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 10 -1.</_>\n        <_>\n          16 6 3 5 2.</_>\n        <_>\n          13 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 6 10 -1.</_>\n        <_>\n          1 6 3 5 2.</_>\n        <_>\n          4 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 2 -1.</_>\n        <_>\n          7 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 11 4 -1.</_>\n        <_>\n          3 14 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 6 8 -1.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 6 8 -1.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_>\n        <_>\n          12 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 8 -1.</_>\n        <_>\n          0 6 4 4 2.</_>\n        <_>\n          4 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 16 2 -1.</_>\n        <_>\n          3 9 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 16 3 -1.</_>\n        <_>\n          0 8 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 14 3 -1.</_>\n        <_>\n          5 12 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 20 -1.</_>\n        <_>\n          9 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 9 7 -1.</_>\n        <_>\n          11 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 3 -1.</_>\n        <_>\n          10 6 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          4 8 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 14 5 -1.</_>\n        <_>\n          7 5 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 9 7 -1.</_>\n        <_>\n          11 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 9 7 -1.</_>\n        <_>\n          6 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 3 10 -1.</_>\n        <_>\n          11 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 6 -1.</_>\n        <_>\n          1 9 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 15 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 15 -1.</_>\n        <_>\n          6 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 14 3 -1.</_>\n        <_>\n          6 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 10 -1.</_>\n        <_>\n          1 10 3 5 2.</_>\n        <_>\n          4 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 13 -1.</_>\n        <_>\n          11 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 9 -1.</_>\n        <_>\n          10 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 8 -1.</_>\n        <_>\n          10 1 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 2 -1.</_>\n        <_>\n          3 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 8 -1.</_>\n        <_>\n          3 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 14 -1.</_>\n        <_>\n          18 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 14 -1.</_>\n        <_>\n          0 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 16 2 -1.</_>\n        <_>\n          3 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 9 6 -1.</_>\n        <_>\n          2 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 7 6 -1.</_>\n        <_>\n          11 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 8 8 -1.</_>\n        <_>\n          1 8 4 4 2.</_>\n        <_>\n          5 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 8 -1.</_>\n        <_>\n          8 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 8 8 -1.</_>\n        <_>\n          4 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 4 8 -1.</_>\n        <_>\n          15 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 5 8 -1.</_>\n        <_>\n          7 15 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 13 2 -1.</_>\n        <_>\n          5 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 9 12 -1.</_>\n        <_>\n          2 8 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 8 6 -1.</_>\n        <_>\n          9 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 4 8 -1.</_>\n        <_>\n          1 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 12 4 -1.</_>\n        <_>\n          9 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 6 7 -1.</_>\n        <_>\n          6 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 15 -1.</_>\n        <_>\n          12 1 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 19 -1.</_>\n        <_>\n          12 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 8 4 -1.</_>\n        <_>\n          8 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 8 8 -1.</_>\n        <_>\n          9 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 10 14 -1.</_>\n        <_>\n          11 4 5 7 2.</_>\n        <_>\n          6 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 10 14 -1.</_>\n        <_>\n          4 4 5 7 2.</_>\n        <_>\n          9 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 18 15 -1.</_>\n        <_>\n          2 8 18 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 9 -1.</_>\n        <_>\n          6 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 9 -1.</_>\n        <_>\n          8 10 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 4 -1.</_>\n        <_>\n          2 8 7 2 2.</_>\n        <_>\n          9 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 10 -1.</_>\n        <_>\n          6 10 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 9 5 -1.</_>\n        <_>\n          7 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 4 -1.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 7 -1.</_>\n        <_>\n          12 7 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 12 -1.</_>\n        <_>\n          6 7 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 8 -1.</_>\n        <_>\n          9 6 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 16 -1.</_>\n        <_>\n          5 3 3 8 2.</_>\n        <_>\n          8 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 6 6 -1.</_>\n        <_>\n          12 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 6 -1.</_>\n        <_>\n          5 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 9 -1.</_>\n        <_>\n          10 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 6 -1.</_>\n        <_>\n          6 8 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 10 10 -1.</_>\n        <_>\n          13 10 5 5 2.</_>\n        <_>\n          8 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 15 4 -1.</_>\n        <_>\n          7 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 10 13 -1.</_>\n        <_>\n          9 6 5 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 10 13 -1.</_>\n        <_>\n          6 6 5 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 16 2 -1.</_>\n        <_>\n          4 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 16 2 -1.</_>\n        <_>\n          9 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 3 12 -1.</_>\n        <_>\n          15 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 3 12 -1.</_>\n        <_>\n          2 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 7 -1.</_>\n        <_>\n          8 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 15 3 -1.</_>\n        <_>\n          2 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 2 13 -1.</_>\n        <_>\n          16 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 5 -1.</_>\n        <_>\n          7 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 4 14 -1.</_>\n        <_>\n          16 6 2 7 2.</_>\n        <_>\n          14 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 3 -1.</_>\n        <_>\n          6 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 10 -1.</_>\n        <_>\n          3 7 13 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 10 -1.</_>\n        <_>\n          7 7 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 7 6 -1.</_>\n        <_>\n          3 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 6 -1.</_>\n        <_>\n          4 2 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 6 -1.</_>\n        <_>\n          3 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 16 -1.</_>\n        <_>\n          5 0 2 8 2.</_>\n        <_>\n          7 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 6 -1.</_>\n        <_>\n          10 14 9 3 2.</_>\n        <_>\n          1 17 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 14 3 -1.</_>\n        <_>\n          9 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 4 7 -1.</_>\n        <_>\n          16 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 15 -1.</_>\n        <_>\n          8 1 4 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 13 -1.</_>\n        <_>\n          3 6 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 4 -1.</_>\n        <_>\n          12 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 4 -1.</_>\n        <_>\n          1 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 2 -1.</_>\n        <_>\n          7 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 8 -1.</_>\n        <_>\n          8 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 10 10 -1.</_>\n        <_>\n          13 10 5 5 2.</_>\n        <_>\n          8 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 10 10 -1.</_>\n        <_>\n          2 10 5 5 2.</_>\n        <_>\n          7 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 6 -1.</_>\n        <_>\n          11 13 5 3 2.</_>\n        <_>\n          6 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 10 6 -1.</_>\n        <_>\n          4 13 5 3 2.</_>\n        <_>\n          9 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 12 -1.</_>\n        <_>\n          7 12 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 14 4 -1.</_>\n        <_>\n          1 14 7 2 2.</_>\n        <_>\n          8 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 7 4 -1.</_>\n        <_>\n          11 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 16 4 -1.</_>\n        <_>\n          1 17 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 8 -1.</_>\n        <_>\n          8 0 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 12 -1.</_>\n        <_>\n          0 12 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 2 -1.</_>\n        <_>\n          7 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 2 -1.</_>\n        <_>\n          0 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 19 3 -1.</_>\n        <_>\n          1 13 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 13 3 -1.</_>\n        <_>\n          0 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 9 -1.</_>\n        <_>\n          9 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 9 -1.</_>\n        <_>\n          5 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 3 -1.</_>\n        <_>\n          4 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 9 4 -1.</_>\n        <_>\n          5 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 4 -1.</_>\n        <_>\n          3 8 7 2 2.</_>\n        <_>\n          10 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          8 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 8 9 -1.</_>\n        <_>\n          3 8 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 12 -1.</_>\n        <_>\n          10 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 6 -1.</_>\n        <_>\n          0 6 9 3 2.</_>\n        <_>\n          9 9 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 16 4 -1.</_>\n        <_>\n          11 6 8 2 2.</_>\n        <_>\n          3 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 7 4 -1.</_>\n        <_>\n          4 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 7 6 -1.</_>\n        <_>\n          12 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 7 6 -1.</_>\n        <_>\n          1 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          6 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 13 -1.</_>\n        <_>\n          18 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 13 -1.</_>\n        <_>\n          1 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 13 3 -1.</_>\n        <_>\n          6 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 10 6 -1.</_>\n        <_>\n          0 13 5 3 2.</_>\n        <_>\n          5 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 8 8 -1.</_>\n        <_>\n          14 12 4 4 2.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 7 -1.</_>\n        <_>\n          12 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 7 6 -1.</_>\n        <_>\n          7 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 7 -1.</_>\n        <_>\n          6 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 12 9 -1.</_>\n        <_>\n          7 10 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 3 -1.</_>\n        <_>\n          1 13 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 2 -1.</_>\n        <_>\n          7 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 7 -1.</_>\n        <_>\n          9 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 12 10 -1.</_>\n        <_>\n          14 10 6 5 2.</_>\n        <_>\n          8 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 12 10 -1.</_>\n        <_>\n          0 10 6 5 2.</_>\n        <_>\n          6 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 12 9 -1.</_>\n        <_>\n          7 10 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 12 4 -1.</_>\n        <_>\n          7 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 9 4 -1.</_>\n        <_>\n          7 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 9 4 -1.</_>\n        <_>\n          4 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 19 -1.</_>\n        <_>\n          12 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 7 6 -1.</_>\n        <_>\n          6 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 15 -1.</_>\n        <_>\n          12 1 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 3 19 -1.</_>\n        <_>\n          7 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 10 -1.</_>\n        <_>\n          11 0 7 5 2.</_>\n        <_>\n          4 5 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 10 -1.</_>\n        <_>\n          2 0 7 5 2.</_>\n        <_>\n          9 5 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 13 -1.</_>\n        <_>\n          11 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          8 7 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 4 10 -1.</_>\n        <_>\n          11 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 13 2 -1.</_>\n        <_>\n          3 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 8 -1.</_>\n        <_>\n          11 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 8 -1.</_>\n        <_>\n          5 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 6 -1.</_>\n        <_>\n          12 8 8 3 2.</_>\n        <_>\n          4 11 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 10 -1.</_>\n        <_>\n          7 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 13 -1.</_>\n        <_>\n          11 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 13 -1.</_>\n        <_>\n          8 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 7 -1.</_>\n        <_>\n          6 6 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 9 -1.</_>\n        <_>\n          10 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 12 -1.</_>\n        <_>\n          9 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          10 2 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 10 6 -1.</_>\n        <_>\n          13 1 5 3 2.</_>\n        <_>\n          8 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 9 10 -1.</_>\n        <_>\n          0 7 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 14 -1.</_>\n        <_>\n          10 8 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 14 -1.</_>\n        <_>\n          0 8 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 15 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 18 -1.</_>\n        <_>\n          0 2 2 9 2.</_>\n        <_>\n          2 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 7 -1.</_>\n        <_>\n          12 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 7 -1.</_>\n        <_>\n          5 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 17 -1.</_>\n        <_>\n          14 2 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 4 8 -1.</_>\n        <_>\n          2 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 10 -1.</_>\n        <_>\n          6 10 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 3 17 -1.</_>\n        <_>\n          5 2 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 5 -1.</_>\n        <_>\n          6 6 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 15 3 -1.</_>\n        <_>\n          5 11 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 10 6 -1.</_>\n        <_>\n          3 0 5 3 2.</_>\n        <_>\n          8 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 2 -1.</_>\n        <_>\n          0 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 12 15 -1.</_>\n        <_>\n          5 2 4 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 16 -1.</_>\n        <_>\n          8 0 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 16 -1.</_>\n        <_>\n          6 0 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          14 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 17 -1.</_>\n        <_>\n          5 3 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 10 -1.</_>\n        <_>\n          13 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 11 -1.</_>\n        <_>\n          4 5 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 12 -1.</_>\n        <_>\n          16 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 10 -1.</_>\n        <_>\n          5 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 12 -1.</_>\n        <_>\n          16 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 12 -1.</_>\n        <_>\n          0 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 14 6 -1.</_>\n        <_>\n          13 0 7 3 2.</_>\n        <_>\n          6 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 19 -1.</_>\n        <_>\n          3 1 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 3 13 -1.</_>\n        <_>\n          17 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 13 -1.</_>\n        <_>\n          3 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 5 -1.</_>\n        <_>\n          12 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 5 -1.</_>\n        <_>\n          5 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 10 3 -1.</_>\n        <_>\n          6 1 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 8 -1.</_>\n        <_>\n          12 0 8 4 2.</_>\n        <_>\n          4 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 7 6 -1.</_>\n        <_>\n          11 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 9 -1.</_>\n        <_>\n          3 11 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 10 -1.</_>\n        <_>\n          6 6 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 5 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 4 -1.</_>\n        <_>\n          12 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 6 -1.</_>\n        <_>\n          2 3 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 4 -1.</_>\n        <_>\n          12 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 4 -1.</_>\n        <_>\n          4 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 7 6 -1.</_>\n        <_>\n          7 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 3 10 -1.</_>\n        <_>\n          13 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 12 -1.</_>\n        <_>\n          9 6 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 12 -1.</_>\n        <_>\n          5 6 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 8 18 -1.</_>\n        <_>\n          9 8 8 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 9 9 -1.</_>\n        <_>\n          3 10 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 3 13 -1.</_>\n        <_>\n          15 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 15 -1.</_>\n        <_>\n          4 6 12 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          8 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 20 -1.</_>\n        <_>\n          3 10 12 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 19 3 -1.</_>\n        <_>\n          1 18 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 18 2 -1.</_>\n        <_>\n          9 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 6 9 -1.</_>\n        <_>\n          10 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 6 9 -1.</_>\n        <_>\n          8 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 12 4 -1.</_>\n        <_>\n          5 13 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 8 4 -1.</_>\n        <_>\n          2 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 6 -1.</_>\n        <_>\n          9 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 3 -1.</_>\n        <_>\n          1 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 3 -1.</_>\n        <_>\n          3 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 8 -1.</_>\n        <_>\n          10 6 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 13 -1.</_>\n        <_>\n          11 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 7 18 -1.</_>\n        <_>\n          8 6 7 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 13 -1.</_>\n        <_>\n          7 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 9 5 -1.</_>\n        <_>\n          10 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 18 -1.</_>\n        <_>\n          9 1 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 11 15 -1.</_>\n        <_>\n          9 5 11 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 8 -1.</_>\n        <_>\n          0 0 8 4 2.</_>\n        <_>\n          8 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 14 -1.</_>\n        <_>\n          10 3 6 7 2.</_>\n        <_>\n          4 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 12 -1.</_>\n        <_>\n          5 6 3 6 2.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 11 9 -1.</_>\n        <_>\n          6 6 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 8 -1.</_>\n        <_>\n          0 0 9 4 2.</_>\n        <_>\n          9 4 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 9 12 -1.</_>\n        <_>\n          11 11 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 8 -1.</_>\n        <_>\n          2 9 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 7 6 -1.</_>\n        <_>\n          4 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 8 -1.</_>\n        <_>\n          0 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 3 13 -1.</_>\n        <_>\n          17 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 10 6 -1.</_>\n        <_>\n          4 2 5 3 2.</_>\n        <_>\n          9 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 3 -1.</_>\n        <_>\n          4 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 7 6 -1.</_>\n        <_>\n          5 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 7 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 11 9 -1.</_>\n        <_>\n          6 6 11 3 3.</_></rects></_></features></cascade>\n</opencv_storage>\n"
  },
  {
    "path": "FaceLivenessDetection/cmake/modules/FindTBB.cmake",
    "content": "# Module for locating Intel's Threading Building Blocks (TBB).\n#\n# Customizable variables:\n#   TBB_ROOT_DIR\n#     Specifies TBB's root directory.\n#\n# Read-only variables:\n#   TBB_FOUND\n#     Indicates whether the library has been found.\n#\n#   TBB_INCLUDE_DIRS\n#      Specifies TBB's include directory.\n#\n#   TBB_LIBRARIES\n#     Specifies TBB libraries that should be passed to target_link_libararies.\n#\n#   TBB_<COMPONENT>_LIBRARIES\n#     Specifies the libraries of a specific <COMPONENT>.\n#\n#   TBB_<COMPONENT>_FOUND\n#     Indicates whether the specified <COMPONENT> was found.\n#\n#\n# Copyright (c) 2013, 2014 Sergiu Dotenco\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTTBBLAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\n\nINCLUDE (FindPackageHandleStandardArgs)\n\nIF (CMAKE_VERSION VERSION_GREATER 2.8.7)\n  SET (_TBB_CHECK_COMPONENTS FALSE)\nELSE (CMAKE_VERSION VERSION_GREATER 2.8.7)\n  SET (_TBB_CHECK_COMPONENTS TRUE)\nENDIF (CMAKE_VERSION VERSION_GREATER 2.8.7)\n\nFIND_PATH (TBB_ROOT_DIR\n  NAMES include/tbb/tbb.h\n  PATHS ENV TBBROOT\n        ENV TBB40_INSTALL_DIR\n        ENV TBB30_INSTALL_DIR\n        ENV TBB22_INSTALL_DIR\n        ENV TBB21_INSTALL_DIR\n        ENV ICPP_COMPILER13\n        ENV ICPP_COMPILER14\n  PATH_SUFFIXES tbb\n  DOC \"TBB root directory\")\n\nFIND_PATH (TBB_INCLUDE_DIR\n  NAMES tbb/tbb.h\n  HINTS ${TBB_ROOT_DIR}\n  PATH_SUFFIXES include\n  DOC \"TBB include directory\")\n\nIF (DEFINED TBB_COMPILER)\n  SET (_TBB_COMPILER ${TBB_COMPILER})\nELSEIF (MSVC12)\n  SET (_TBB_COMPILER vc12)\nELSEIF (MSVC11)\n  SET (_TBB_COMPILER vc11)\nELSEIF (MSVC10)\n  SET (_TBB_COMPILER vc10)\nELSEIF (MSVC90)\n  SET (_TBB_COMPILER vc9)\nELSEIF (MSVC80)\n  SET (_TBB_COMPILER vc8)\nELSEIF (MINGW)\n  SET (_TBB_COMPILER mingw)\nELSEIF (WIN32)\n  SET (_TBB_COMPILER vc_mt)\nENDIF (DEFINED TBB_COMPILER)\n\nIF (CMAKE_SIZEOF_VOID_P EQUAL 8)\n  SET (_TBB_POSSIBLE_LIB_SUFFIXES lib/intel64/${_TBB_COMPILER})\n  SET (_TBB_POSSIBLE_BIN_SUFFIXES bin/intel64/${_TBB_COMPILER})\nELSE (CMAKE_SIZEOF_VOID_P EQUAL 8)\n  SET (_TBB_POSSIBLE_LIB_SUFFIXES lib/ia32/${_TBB_COMPILER})\n  SET (_TBB_POSSIBLE_BIN_SUFFIXES bin/ia32/${_TBB_COMPILER})\nENDIF (CMAKE_SIZEOF_VOID_P EQUAL 8)\n\nLIST (APPEND _TBB_POSSIBLE_LIB_SUFFIXES lib/$ENV{TBB_ARCH_PLATFORM})\n\nFIND_LIBRARY (TBB_LIBRARY_RELEASE\n  NAMES tbb\n  HINTS ${TBB_ROOT_DIR}\n  PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES}\n  DOC \"TBB release library\")\n\nFIND_LIBRARY (TBB_LIBRARY_DEBUG\n  NAMES tbb_debug\n  HINTS ${TBB_ROOT_DIR}\n  PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES}\n  DOC \"TBB debug library\")\n\nIF (TBB_LIBRARY_RELEASE AND TBB_LIBRARY_DEBUG)\n  SET (TBB_LIBRARY optimized ${TBB_LIBRARY_RELEASE} debug ${TBB_LIBRARY_DEBUG}\n    CACHE DOC \"TBB library\")\nELSEIF (TBB_LIBRARY_RELEASE)\n  SET (TBB_LIBRARY ${TBB_LIBRARY_RELEASE} CACHE DOC \"TBB library\")\nENDIF (TBB_LIBRARY_RELEASE AND TBB_LIBRARY_DEBUG)\n\nIF (TBB_LIBRARY_DEBUG)\n  LIST (APPEND _TBB_ALL_LIBS ${TBB_LIBRARY_DEBUG})\nENDIF (TBB_LIBRARY_DEBUG)\n\nIF (TBB_LIBRARY_RELEASE)\n  LIST (APPEND _TBB_ALL_LIBS ${TBB_LIBRARY_RELEASE})\nENDIF (TBB_LIBRARY_RELEASE)\n\nFOREACH (_TBB_COMPONENT ${TBB_FIND_COMPONENTS})\n  STRING (TOUPPER ${_TBB_COMPONENT} _TBB_COMPONENT_UPPER)\n  SET (_TBB_LIBRARY_BASE TBB_${_TBB_COMPONENT_UPPER}_LIBRARY)\n\n  IF (${_TBB_COMPONENT} STREQUAL preview)\n    SET (_TBB_LIBRARY_NAME tbb_${_TBB_COMPONENT})\n  ELSE (${_TBB_COMPONENT} STREQUAL preview)\n    SET (_TBB_LIBRARY_NAME tbb${_TBB_COMPONENT})\n  ENDIF (${_TBB_COMPONENT} STREQUAL preview)\n\n  FIND_LIBRARY (${_TBB_LIBRARY_BASE}_RELEASE\n    NAMES ${_TBB_LIBRARY_NAME}\n    HINTS ${TBB_ROOT_DIR}\n    PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES}\n    DOC \"TBB ${_TBB_COMPONENT} release library\")\n\n  FIND_LIBRARY (${_TBB_LIBRARY_BASE}_DEBUG\n    NAMES ${_TBB_LIBRARY_NAME}_debug\n    HINTS ${TBB_ROOT_DIR}\n    PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES}\n    DOC \"TBB ${_TBB_COMPONENT} debug library\")\n\n  MARK_AS_ADVANCED (${_TBB_LIBRARY_BASE} ${_TBB_LIBRARY_BASE}_DEBUG)\n\n  SET (TBB_${_TBB_COMPONENT_UPPER}_FOUND TRUE)\n\n  IF (${_TBB_LIBRARY_BASE}_DEBUG AND ${_TBB_LIBRARY_BASE}_RELEASE)\n    SET (${_TBB_LIBRARY_BASE}\n      debug ${${_TBB_LIBRARY_BASE}_DEBUG}\n      optimized ${${_TBB_LIBRARY_BASE}_RELEASE} CACHE DOC\n      \"TBB ${_TBB_COMPONENT} library\")\n  ELSEIF (${_TBB_LIBRARY_BASE}_DEBUG)\n    SET (${_TBB_LIBRARY_BASE} ${${_TBB_LIBRARY_BASE}_DEBUG})\n  ELSEIF (${_TBB_LIBRARY_BASE}_RELEASE)\n    SET (${_TBB_LIBRARY_BASE} ${${_TBB_LIBRARY_BASE}_RELEASE}\n      CACHE DOC \"TBB ${_TBB_COMPONENT} library\")\n  ELSE (${_TBB_LIBRARY_BASE}_DEBUG AND ${_TBB_LIBRARY_BASE}_RELEASE)\n    # Component missing: record it for a later report\n    LIST (APPEND _TBB_MISSING_COMPONENTS ${_TBB_COMPONENT})\n    SET (TBB_${_TBB_COMPONENT_UPPER}_FOUND FALSE)\n  ENDIF (${_TBB_LIBRARY_BASE}_DEBUG AND ${_TBB_LIBRARY_BASE}_RELEASE)\n\n  IF (${_TBB_LIBRARY_BASE}_DEBUG)\n      LIST (APPEND _TBB_ALL_LIBS ${${_TBB_LIBRARY_BASE}_DEBUG})\n    ENDIF (${_TBB_LIBRARY_BASE}_DEBUG)\n\n    IF (${_TBB_LIBRARY_BASE}_RELEASE)\n      LIST (APPEND _TBB_ALL_LIBS ${${_TBB_LIBRARY_BASE}_RELEASE})\n    ENDIF (${_TBB_LIBRARY_BASE}_RELEASE)\n\n  SET (TBB_${_TBB_COMPONENT}_FOUND ${TBB_${_TBB_COMPONENT_UPPER}_FOUND})\n\n  IF (${_TBB_LIBRARY_BASE})\n    # setup the TBB_<COMPONENT>_LIBRARIES variable\n    SET (TBB_${_TBB_COMPONENT_UPPER}_LIBRARIES ${${_TBB_LIBRARY_BASE}})\n    LIST (APPEND TBB_LIBRARIES ${${_TBB_LIBRARY_BASE}})\n  ELSE (${_TBB_LIBRARY_BASE})\n    LIST (APPEND _TBB_MISSING_LIBRARIES ${_TBB_LIBRARY_BASE})\n  ENDIF (${_TBB_LIBRARY_BASE})\nENDFOREACH (_TBB_COMPONENT ${TBB_FIND_COMPONENTS})\n\nLIST (APPEND TBB_LIBRARIES ${TBB_LIBRARY})\nSET (TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR})\n\nIF (DEFINED _TBB_MISSING_COMPONENTS AND _TBB_CHECK_COMPONENTS)\n  IF (NOT TBB_FIND_QUIETLY)\n    MESSAGE (STATUS \"One or more TBB components were not found:\")\n    # Display missing components indented, each on a separate line\n    FOREACH (_TBB_MISSING_COMPONENT ${_TBB_MISSING_COMPONENTS})\n      MESSAGE (STATUS \"  \" ${_TBB_MISSING_COMPONENT})\n    ENDFOREACH (_TBB_MISSING_COMPONENT ${_TBB_MISSING_COMPONENTS})\n  ENDIF (NOT TBB_FIND_QUIETLY)\nENDIF (DEFINED _TBB_MISSING_COMPONENTS AND _TBB_CHECK_COMPONENTS)\n\n# Determine library's version\n\nSET (_TBB_VERSION_HEADER ${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h)\n\nIF (EXISTS ${_TBB_VERSION_HEADER})\n  FILE (READ ${_TBB_VERSION_HEADER} _TBB_VERSION_CONTENTS)\n\n  STRING (REGEX REPLACE \".*#define TBB_VERSION_MAJOR[ \\t]+([0-9]+).*\" \"\\\\1\"\n    TBB_VERSION_MAJOR \"${_TBB_VERSION_CONTENTS}\")\n  STRING (REGEX REPLACE \".*#define TBB_VERSION_MINOR[ \\t]+([0-9]+).*\" \"\\\\1\"\n    TBB_VERSION_MINOR \"${_TBB_VERSION_CONTENTS}\")\n\n  SET (TBB_VERSION ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR})\n  SET (TBB_VERSION_COMPONENTS 2)\nENDIF (EXISTS ${_TBB_VERSION_HEADER})\n\nIF (WIN32)\n  FIND_PROGRAM (LIB_EXECUTABLE NAMES lib\n    HINTS \"$ENV{VS120COMNTOOLS}/../../VC/bin\"\n          \"$ENV{VS110COMNTOOLS}/../../VC/bin\"\n          \"$ENV{VS100COMNTOOLS}/../../VC/bin\"\n          \"$ENV{VS90COMNTOOLS}/../../VC/bin\"\n          \"$ENV{VS71COMNTOOLS}/../../VC/bin\"\n          \"$ENV{VS80COMNTOOLS}/../../VC/bin\"\n    DOC \"Library manager\")\n\n  MARK_AS_ADVANCED (LIB_EXECUTABLE)\nENDIF (WIN32)\n\nMACRO (GET_LIB_REQUISITES LIB REQUISITES)\n  IF (LIB_EXECUTABLE)\n    GET_FILENAME_COMPONENT (_LIB_PATH ${LIB_EXECUTABLE} PATH)\n\n    IF (MSVC)\n      # Do not redirect the output\n      UNSET (ENV{VS_UNICODE_OUTPUT})\n    ENDIF (MSVC)\n\n    EXECUTE_PROCESS (COMMAND ${LIB_EXECUTABLE} /nologo /list ${LIB}\n      WORKING_DIRECTORY ${_LIB_PATH}/../../Common7/IDE\n      OUTPUT_VARIABLE _LIB_OUTPUT ERROR_QUIET)\n\n    STRING (REPLACE \"\\n\" \";\" \"${REQUISITES}\" \"${_LIB_OUTPUT}\")\n    LIST (REMOVE_DUPLICATES ${REQUISITES})\n  ENDIF (LIB_EXECUTABLE)\nENDMACRO (GET_LIB_REQUISITES)\n\nIF (_TBB_ALL_LIBS)\n  # collect lib requisites using the lib tool\n  FOREACH (_TBB_COMPONENT ${_TBB_ALL_LIBS})\n    GET_LIB_REQUISITES (${_TBB_COMPONENT} _TBB_REQUISITES)\n  ENDFOREACH (_TBB_COMPONENT)\nENDIF (_TBB_ALL_LIBS)\n\nIF (NOT TBB_BINARY_DIR)\n  SET (_TBB_UPDATE_BINARY_DIR TRUE)\nELSE (NOT TBB_BINARY_DIR)\n  SET (_TBB_UPDATE_BINARY_DIR FALSE)\nENDIF (NOT TBB_BINARY_DIR)\n\nSET (_TBB_BINARY_DIR_HINTS ${_TBB_POSSIBLE_BIN_SUFFIXES})\n\nIF (_TBB_REQUISITES)\n  FIND_FILE (TBB_BINARY_DIR NAMES ${_TBB_REQUISITES}\n\tHINTS ${TBB_ROOT_DIR}\n    PATH_SUFFIXES ${_TBB_BINARY_DIR_HINTS} NO_DEFAULT_PATH)\nENDIF (_TBB_REQUISITES)\n\nIF (TBB_BINARY_DIR AND _TBB_UPDATE_BINARY_DIR)\n  SET (_TBB_BINARY_DIR ${TBB_BINARY_DIR})\n  UNSET (TBB_BINARY_DIR CACHE)\n\n  IF (_TBB_BINARY_DIR)\n\t  GET_FILENAME_COMPONENT (TBB_BINARY_DIR ${_TBB_BINARY_DIR} PATH)\n\n    IF (TBB_BINARY_DIR)\n      SET (TBB_BINARY_DIR ${TBB_BINARY_DIR} CACHE PATH \"TBB binary directory\")\n    ENDIF (TBB_BINARY_DIR)\n  ENDIF (_TBB_BINARY_DIR)\nENDIF (TBB_BINARY_DIR AND _TBB_UPDATE_BINARY_DIR)\n\nMARK_AS_ADVANCED (TBB_INCLUDE_DIR TBB_LIBRARY TBB_LIBRARY_RELEASE\n  TBB_LIBRARY_DEBUG)\n\nIF (NOT _TBB_CHECK_COMPONENTS)\n SET (_TBB_FPHSA_ADDITIONAL_ARGS HANDLE_COMPONENTS)\nENDIF (NOT _TBB_CHECK_COMPONENTS)\n\nIF (CMAKE_VERSION VERSION_GREATER 2.8.2)\n  LIST (APPEND _TBB_FPHSA_ADDITIONAL_ARGS VERSION_VAR TBB_VERSION)\nENDIF (CMAKE_VERSION VERSION_GREATER 2.8.2)\n\nFIND_PACKAGE_HANDLE_STANDARD_ARGS (TBB REQUIRED_VARS TBB_ROOT_DIR\n  TBB_INCLUDE_DIR TBB_LIBRARY ${_TBB_MISSING_LIBRARIES}\n  ${_TBB_FPHSA_ADDITIONAL_ARGS})\n"
  },
  {
    "path": "FaceLivenessDetection/exe/FaceLivenessDetection/CMakeLists.txt",
    "content": "#TBB library\ninclude_directories(${TBB_ROOT_DIR}/include)\n\n# Local libraries\n#include_directories(${LandmarkDetector_SOURCE_DIR}/include)\n#include_directories(${seetaFace_SOURCE_DIR}/include)\n\t\ninclude_directories(../../lib/local/LandmarkDetector/include)\n#include_directories(../../lib/local/seetaFace/include)\ninclude_directories(LivenessDetection)\n\t\t\t\nadd_executable(FaceLivenessDetection FaceLivenessDetection)\ntarget_link_libraries(FaceLivenessDetection LandmarkDetector)\n#target_link_libraries(FaceLivenessDetection seetaFace)\ntarget_link_libraries(FaceLivenessDetection dlib)\n\ntarget_link_libraries(FaceLivenessDetection ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES})\n\ninstall (TARGETS FaceLivenessDetection DESTINATION bin)\n"
  },
  {
    "path": "FaceLivenessDetection/exe/FaceLivenessDetection/FaceLivenessDetection.cpp",
    "content": "///************************************************\n// *  Using\n// *   (1) Move Detection\n// *   (2) Open & Closed mouth\n// *   (3) Optical Flow\n// * to do face liveness detection\n// *\n// * Created date: 2017-03-28\n// ************************************************/\n//\n\n#include \"LandmarkCoreIncludes.h\"\n#include \"LivenessDetection.hpp\"\n\n#include <fstream>\n#include <sstream>\n\n#define INFO_STREAM( stream ) \\\nstd::cout << stream << std::endl\n\n#define WARN_STREAM( stream ) \\\nstd::cout << \"Warning: \" << stream << std::endl\n\n#define ERROR_STREAM( stream ) \\\nstd::cout << \"Error: \" << stream << std::endl\n\n#define THRESHOLD_ORIENTATION 0.6   //[0, 1], 面部中心到左右眼角的距离比， 越小越严\n#define THRESHOLD_MOUSE 2.5         //[0, 无穷]， 嘴部面积的变化长宽比，越大越严\n#define THRESHOLD_MOVE 17           //[0, 无穷]， 20帧算法的输出总和，越小越严\n#define THRESHOLD_EYE 0.7           //[0，1】, 眼睛特征点变化的方差的比例， 越大越严\n#define ORIENTATION_FRAME_NUM 20    //转头搜集的帧数\n#define THRESHOLD_ALIGH 0.8         //对齐要求的阈值，越小越严\n#define WIN_WIDTH 640\n#define WIN_HEIGHT 480\n\nusing namespace cv;\nusing namespace std;\n\nstatic void printErrorAndAbort( const std::string & error ){\n    std::cout << error << std::endl;\n    abort();\n}\n\n#define FATAL_STREAM( stream ) \\\nprintErrorAndAbort( std::string( \"Fatal error: \" ) + stream )\n\nvector<string> get_arguments(int argc, char **argv){\n    vector<string> arguments;\n    for(int i = 0; i < argc; ++i){\n        arguments.push_back(string(argv[i]));\n    }\n    return arguments;\n}\n\n// Some globals for tracking timing information for visualisation\ndouble fps_tracker = -1.0;\nint64 t0 = 0;\n\nvoid drawFaceOutline(Mat &display_image, Mat mask, Mat logo);\nbool correctFacePosition(std::vector<Point2f> landmark);\nMat extractFaceMatrix(Mat temp, Rect result);\nbool isRealFace(std::vector<float> closedMouse, std::vector<float> openedMouse);\nfloat calculateUorV(Mat flow, int m_left, int m_right, int n_left, int n_right, int dim);\nfloat opticalDifference(Mat flow);\nbool mouseIdentificate(Mat &temp, std::vector<Point2f> landmark, std::vector<float> &closedMouse, std::vector<float> &openedMouse, int &numofClosedMouses, int &numofOpenedMouses,  Mat &mouseIdenImg);\nbool orientationIdentificate(Mat temp, std::vector<Point2f> landmark, int &oriNum, float &sumOriValue,\n                             bool &left_face, bool &right_face, float &ori_face, float x_ori);\nbool moveIdentificate(Mat temp, std::vector<Point2f> landmark, Mat &gray, Mat &preGray, Mat &flow,\n                      int &optFlowPicNumber, std::vector<float> &optFlowDiffArray, Mat &moveIdenImg);\nbool eyeIdentificate(Mat temp, bool detection_success, bool clnf_eye_model, std::vector<Point2f> landmarks, std::vector<std::vector<double>> &direction, int frame_count, bool &first_iden, Mat &eyeIdenImg);\nvoid openFace2dlib_landmarks(std::vector<Point2f> &dlib_landmarks, std::vector<double> openface_landmarks);\ndouble arrayDeviance(std::vector<double> arr);\nvoid relativeLandmarks(const vector<Point2f> inputLandmarks, vector<Point2f> &outputLandmarks, LandmarkDetector::CLNF &clnf_model);\n\nint main (int argc, char **argv){\n    vector<string> arguments = get_arguments(argc, argv);\n    // By default try webcam 0\n    int device = 0;\n    LandmarkDetector::FaceModelParameters det_parameters;\n    // The modules that are being used for tracking\n    LandmarkDetector::CLNF clnf_model(det_parameters.model_location);\n    det_parameters.track_gaze = false;\n    double visualisation_boundary = 0.2;\n    \n//  判断模块开关: true 表示模块验证已经通过\n    bool MoveIdentification = false;\n    bool OrientationIdentification = false;\n    bool MouseIdentification = false;\n    bool EyeIdentification = false;\n    //方向\n    int oriNum = 0;\n    float sumOriValue = 0.0;\n    bool left_face = false;\n    bool right_face = false;\n    float ori_face = 0.0;\n    //嘴部\n    std::vector<float> closedMouse = {INT_MAX, INT_MAX, INT_MAX, INT_MAX, INT_MAX};\n    std::vector<float> openedMouse = {INT_MIN, INT_MIN, INT_MIN, INT_MIN, INT_MIN};\n    int numofClosedMouses = 0;\n    int numofOpenedMouses = 0;\n    //光流\n    Mat gray, preGray, flow;\n    int optFlowPicNumber = 0;\n    std::vector<float> optFlowDiffArray(20,0.0);\n    \n    //眨眼\n    std::vector<cv::Point3f> blink_eyes0;\n    std::vector<cv::Point3f> blink_eyes1;\n    bool first_iden = true;\n    //存储脸部信息的标准差， 左右眼x,y,z各3个(3 * 2 = 6)，脸部周围轮廓18个\n    std::vector<std::vector<double> > direction(36, std::vector<double>(19));\n    \n    //保存到相册\n    bool writedImage = false;\n    bool moveWriteImage = MoveIdentification;\n    bool mouseWriteImage = MouseIdentification;\n    bool eyeWriteImage = EyeIdentification;\n    Mat moveIdenImg;\n    Mat mouseIdenImg;\n    Mat eyeIdenImg;\n    \n    // Do some grabbing\n    cv::VideoCapture video_capture;\n    \n    INFO_STREAM( \"Attempting to capture from device: \" << device );\n    video_capture = cv::VideoCapture( device );\n    video_capture.set(CV_CAP_PROP_FRAME_WIDTH, WIN_WIDTH);\n    video_capture.set(CV_CAP_PROP_FRAME_HEIGHT, WIN_HEIGHT);\n    // Read a first frame often empty in camera\n    \n    if (!video_capture.isOpened()){\n        FATAL_STREAM(\"Failed to open video source\");\n        return 1;\n    }\n    else INFO_STREAM( \"Device or file opened\");\n    \n    cv::Mat display_image;\n    video_capture >> display_image;\n    cv::flip(display_image, display_image, 1);\n    int frame_count = 0;\n    INFO_STREAM( \"Starting tracking\");\n    double t_start = cvGetTickCount();\n    Mat logo = imread(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/pic/faceOutline.jpg\");\n    Mat mask = imread(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/pic/faceOutline.jpg\",0); //注意要是灰度图才行\n    while(!display_image.empty())\n    {\n        cv::flip(display_image, display_image, 1);\n        \n        //if(frame_count%2 == 0) continue;\n        double t_whole = cvGetTickCount();\n        // Reading the images\n        cv::Mat_<float> depth_image;\n        cv::Mat_<uchar> grayscale_image;\n        cv::Mat captured_image = display_image.clone();\n        drawFaceOutline(display_image, mask, logo);\n        \n        if(captured_image.channels() == 3){\n            cv::cvtColor(captured_image, grayscale_image, CV_BGR2GRAY);\n        }else{\n            grayscale_image = captured_image.clone();\n        }\n        // The actual facial landmark detection / tracking\n        bool detection_success = LandmarkDetector::DetectLandmarksInVideo(grayscale_image, depth_image, clnf_model, det_parameters);\n        \n        // Drawing the facial landmarks on the face and the bounding box around it if tracking is successful and initialised\n        double detection_certainty = clnf_model.detection_certainty;\n        // Only draw if the reliability is reasonable, the value is slightly ad-hoc\n        bool noShelter = detection_certainty < visualisation_boundary;\n        if (noShelter){\n            LandmarkDetector::Draw(display_image, clnf_model);\n            double vis_certainty = detection_certainty;\n            if (vis_certainty > 1)\n                vis_certainty = 1;\n            if (vis_certainty < -1)\n                vis_certainty = -1;\n            vis_certainty = (vis_certainty + 1) / (visualisation_boundary + 1);\n            // A rough heuristic for box around the face width\n            int thickness = (int)std::ceil(2.0* ((double)captured_image.cols) / 640.0);\n            float cx = captured_image.cols / 2.0f;\n            float cy = captured_image.rows / 2.0f;\n            float fx = 500 * (captured_image.cols / 640.0);\n            float fy = 500 * (captured_image.rows / 480.0);\n            fx = (fx + fy) / 2.0;\n            fy = fx;\n            cv::Vec6d world_pose = LandmarkDetector::GetCorrectedPoseWorld(clnf_model, fx, fy, cx, cy);\n            bool aligned = abs(world_pose[3]) + abs(world_pose[4]) + abs(world_pose[5]) < THRESHOLD_ALIGH;\n            // Draw it in reddish if uncertain, blueish if certain\n//            LandmarkDetector::DrawBox(display_image, world_pose, cv::Scalar((1 - vis_certainty)*255.0, 0, vis_certainty * 255), thickness, fx, fy, cx, cy);\n            \n            std::vector<double> openface_landmarks = clnf_model.detected_landmarks;\n            std::vector<cv::Point2f> landmarks;\n            openFace2dlib_landmarks(landmarks, openface_landmarks);\n            if(aligned){\n                //STEP 1.1: 光流\n                if(!OrientationIdentification && !MouseIdentification && !MoveIdentification && !EyeIdentification){\n                    cv::putText(display_image, \"STEP1 Identificating ... \", Point2f(10,20), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,0,255));\n                    cv::putText(display_image, \"Stare at your phone and don't move\", Point2f(10,40), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,255,0));\n                    MoveIdentification = moveIdentificate(captured_image, landmarks, gray, preGray, flow, optFlowPicNumber, optFlowDiffArray, moveIdenImg);\n                }\n                //STEP 1.2: 转向\n                if(!OrientationIdentification && !MouseIdentification && MoveIdentification && !EyeIdentification){\n                    cv::putText(display_image, \"STEP1 Identificating ... \", Point2f(10,20), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,0,255));\n                    OrientationIdentification = orientationIdentificate(display_image, landmarks, oriNum, sumOriValue, left_face, right_face, ori_face, world_pose[0]);\n                }\n                \n                //STEP2: 张闭嘴验证\n                if(OrientationIdentification && !MouseIdentification && MoveIdentification && !EyeIdentification){\n                    cv::putText(display_image, \"STEP2 Identificating ... \", Point2f(10,20), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,0,255));\n                    cv::putText(display_image, \"Move Your Mouse\", Point2f(10,40), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,255,0));\n                    MouseIdentification = mouseIdentificate(captured_image, landmarks, closedMouse, openedMouse, numofClosedMouses, numofOpenedMouses,  mouseIdenImg);\n                }\n                \n                //STEP3: 眨眼认证\n                if (OrientationIdentification && MouseIdentification && MoveIdentification && !EyeIdentification){\n                    cv::Mat face = clnf_model.face_template;\n                    cv::putText(display_image, \"STEP3 Identificating ... \", Point2f(10,20), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,0,255));\n                    cv::putText(display_image, \"Blink Eyes\", Point2f(10,40), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,255,0));\n                    vector<cv::Point2f> relative_landmarks = landmarks;\n                    relativeLandmarks(landmarks, relative_landmarks, clnf_model);\n                    bool clnf_eye_model = clnf_model.eye_model;\n                    EyeIdentification = eyeIdentificate(captured_image, detection_success, clnf_eye_model, landmarks, direction, frame_count, first_iden, eyeIdenImg);\n                    //EyeIdentification = eyeIdentificate2(clnf_model, landmarks);\n                }\n            }\n            else{\n                cv::putText(display_image, \"Align with the outline!\", Point2f(10,20), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,0,255));\n            }\n            //验证通过, 保存各步骤验证人脸, 输出结果\n            if(OrientationIdentification && MouseIdentification && MoveIdentification && EyeIdentification){\n                cv::putText(display_image, \"Passed!\", Point2f(10,20), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,0,255));\n                if(!writedImage){\n                    double t_end = cvGetTickCount();\n                    cout<<\"Time Consuming: \"<<(t_end - t_start)/(double)cvGetTickFrequency()/1000000<<\"s\"<<endl;\n                    cout<<\"Frame Used: \"<<frame_count<<endl;\n                    std::cout<<\"Detection Succeed, Wrting Photos\"<<std::endl;\n                    if(!moveWriteImage)   cv::imwrite(\"movePic.jpg\", moveIdenImg);\n                    if(!mouseWriteImage)  cv::imwrite(\"mousePic.jpg\", mouseIdenImg);\n                    if(!eyeWriteImage) cv::imwrite(\"eyePic.jpg\", eyeIdenImg);\n                    writedImage = true;\n                }\n            }\n            \n        }else{\n            cv::putText(display_image, \"Don't hide your face!\", Point2f(10,20), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,0,255));\n        }\n        \n        if (!det_parameters.quiet_mode){\n            cv::namedWindow(\"tracking_result\");\n            cv::imshow(\"tracking_result\", display_image);\n        }\n        \n        video_capture >> display_image;\n        \n        \n        // detect key presses\n        char character_press = cv::waitKey(1);\n        \n        // restart the tracker\n        if(character_press == 'r'){\n            clnf_model.Reset();\n        }\n        // quit the application\n        else if(character_press=='q'){\n            return(0);\n        }\n        // Update the frame count\n        frame_count++;\n        t_whole = ((double)cvGetTickCount() - t_whole) / cvGetTickFrequency() / 1000;\n        cout<<\"Frame Processing Time: \"<<t_whole<<endl;\n        \n    }//end while(!captured_image.empty())\n    frame_count = 0;\n    // Reset the model, for the next video\n    clnf_model.Reset();\n    \n    return 0;\n}\n\nvoid drawFaceOutline(Mat &display_image, Mat mask, Mat logo){\n    cv::Mat display_image_clone = display_image.clone();\n    float alpha = 0.5;\n    float beta = 1-alpha;\n    threshold(mask,mask,245,255,CV_THRESH_BINARY);\n    cv::Mat imageROI;\n    imageROI = display_image(cv::Rect(0,0,logo.cols,logo.rows));\n    logo.copyTo(imageROI,mask);\n    addWeighted( display_image, alpha, display_image_clone, beta, 0.0,display_image);\n}\n\n//提取脸部矩阵\nMat extractFaceMatrix(Mat temp, Rect result){\n    Mat t_frame;\n    float left_y = max(result.y, 0);\n    float right_y = min(result.y+result.height, WIN_HEIGHT);\n    float left_x = max(result.x, 0);\n    float right_x = min(result.x+result.width, WIN_WIDTH);\n    t_frame = temp(Range(left_y, right_y),Range(left_x, right_x));\n    return t_frame;\n}\n\n//校正用户面部在摄像头部分的位置，校正的是左，右，底,中间方向的四个基准点\nbool correctFacePosition(std::vector<Point2f> landmark){\n    Point2f left_point = landmark[1];\n    Point2f right_point = landmark[16];\n    Point2f bottom_point = landmark[8];\n    Point2f center_point = landmark[28];\n    bool align_left = false;\n    bool align_right = false;\n    bool align_bottom = false;\n    bool align_center = false;\n    if( WIN_WIDTH/10 < left_point.x && left_point.x < WIN_WIDTH*2/5\n       && WIN_HEIGHT/4 < left_point.y && left_point.y < WIN_HEIGHT/2 ) align_left = true;\n\n    if( WIN_WIDTH*3/5 < right_point.x && right_point.x < WIN_WIDTH*9/10\n       && WIN_HEIGHT/4 < right_point.y && right_point.y < WIN_HEIGHT/2 ) align_right = true;\n\n    if( WIN_WIDTH/2-80 < bottom_point.x && bottom_point.x < WIN_WIDTH/2+80\n       && WIN_HEIGHT*2/3 < bottom_point.y && bottom_point.y < WIN_HEIGHT*5/4 ) align_bottom = true;\n\n    if( center_point.x >= WIN_WIDTH/4 && center_point.x <= WIN_WIDTH*3/4\n       && center_point.y >= WIN_HEIGHT/4 && center_point.y <= WIN_HEIGHT*3/4) align_center = true;\n\n    return align_left && align_right && align_bottom && align_center;\n}\n\n//检测用户是否按指令摇头\nbool orientationIdentificate(Mat temp, std::vector<Point2f> landmark, int &oriNum,\n                             float &sumOriValue, bool &left_face, bool &right_face, float &ori_face, float x_ori){\n    Point2f point_nose = landmark[33];\n    Point2f point_left_eye = landmark[36];\n    Point2f point_right_eye = landmark[45];\n    \n    \n    float left_temp_x = (point_nose.x - point_left_eye.x) * (point_nose.x - point_left_eye.x);\n    float left_temp_y = (point_nose.y - point_left_eye.y) * (point_nose.y - point_left_eye.y);\n    \n    float right_temp_x = (point_nose.x - point_right_eye.x) * (point_nose.x - point_right_eye.x);\n    float right_temp_y = (point_nose.y - point_right_eye.y) * (point_nose.y - point_right_eye.y);\n    \n    float oriVal = (left_temp_x + left_temp_y) / (right_temp_x + right_temp_y);\n    \n    \n    if(oriNum < ORIENTATION_FRAME_NUM){\n        if(!left_face && !right_face){\n            cv::putText(temp, \"Turn Your Head to Right\", Point2f(10,40), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,255,0));\n        }else if(left_face && !right_face){\n            cv::putText(temp, \"Turn Your Head to Left\", Point2f(10,40), FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,255,0));\n        }else{\n            cv::putText(temp, \"STEP1 Passed!!!\", Point2f(WIN_WIDTH*3/4, WIN_HEIGHT/2), FONT_HERSHEY_PLAIN, 3, cv::Scalar(0,0,255));\n        }\n        oriNum++;\n        sumOriValue += oriVal;\n        ori_face += x_ori;\n    }else{\n        \n        double res = sumOriValue/oriNum;\n        cout<<\"Orientation output value \"<<res<<endl;\n        cout<<\"face ori\"<<ori_face<<endl;\n        if(res > 1/THRESHOLD_ORIENTATION && ori_face > 300){\n            if(!left_face && !right_face) left_face = true;\n        }\n        if(res < THRESHOLD_ORIENTATION && ori_face < -300){\n            if(left_face && !right_face) right_face = true;\n        }\n        oriNum = 0;\n        sumOriValue = 0.0;\n        ori_face = 0.0;\n    }\n    return left_face && right_face;\n}\n\n\n//判断是否为真实人脸\nbool isRealFace(std::vector<float> closedMouse, std::vector<float> openedMouse){\n    auto biggestClosed = std::max_element(closedMouse.begin(), closedMouse.end());\n    auto smallestOpened = std::min_element(openedMouse.begin(), openedMouse.end());\n    cout<<\"Biggest Mouse: \"<<*biggestClosed<<endl;\n    cout<<\"Smallest Mouse: \"<<*smallestOpened<<endl;\n    cout<<\"Value of Mouse Identification: \"<<(*smallestOpened / *biggestClosed)<<endl;\n    return (*smallestOpened / *biggestClosed) > THRESHOLD_MOUSE;\n}\n\n//通过嘴部的面积变化验证是否为真实人脸\nbool mouseIdentificate(Mat &temp, std::vector<Point2f> landmark, std::vector<float> &closedMouse, std::vector<float> &openedMouse, int &numofClosedMouses, int &numofOpenedMouses, Mat &mouseIdenImg){\n    bool isReal = false;\n    std::vector<Point2f> mouseArea;\n    for(int i = 48; i <= 60; i++){\n        Point2f point = landmark[i];\n        mouseArea.push_back(point);\n    }\n    \n    int mouseSize = contourArea(mouseArea);\n    float mouseLength = landmark[54].x - landmark[48].x;\n    float mouseRatio = mouseSize/(mouseLength*mouseLength);\n    \n    //判断是否为真实人脸\n    auto biggestClosed = std::max_element(closedMouse.begin(), closedMouse.end());\n    auto smallestOpened = std::min_element(openedMouse.begin(), openedMouse.end());\n    \n    if(mouseRatio < *biggestClosed){\n        int biggestIndex = (int)std::distance(closedMouse.begin(), biggestClosed);\n        closedMouse[biggestIndex] = mouseRatio;\n        numofClosedMouses++;\n    }\n    if(mouseRatio > *smallestOpened){\n        int smallestIndex = (int)std::distance(openedMouse.begin(), smallestOpened);\n        openedMouse[smallestIndex] = mouseRatio;\n        numofOpenedMouses++;\n    }\n    if(numofClosedMouses >= 5 && numofOpenedMouses >=5){\n        isReal = isRealFace(closedMouse, openedMouse);\n    }\n    mouseIdenImg = temp;\n    return isReal;\n}\n\n\n// 计算光流\n// 算法出自论文: <<A Liveness Detection Method for Face Recognition Based on Optical Flow Field>>\nfloat opticalDifference(Mat flow){\n    float optDifference = 0.0;\n    int m = flow.rows;\n    int n = flow.cols;\n\n    //计算组件的值\n    float U_left = calculateUorV(flow, 0, m/2, 0, n, 0);\n    float V_left = calculateUorV(flow, 0, m/2, 0, n, 1);\n    float U_right = calculateUorV(flow, m/2+1, m, 0, n, 0);\n    float V_right = calculateUorV(flow, m/2+1, m, 0, n, 1);\n\n    float U_upper = calculateUorV(flow, 0, m, 0, n/2, 0);\n    float V_upper = calculateUorV(flow, 0, m, 0, n/2, 1);\n    float U_lower = calculateUorV(flow, 0, m, n/2+1, n, 0);\n    float V_lower = calculateUorV(flow, 0, m, n/2+1, n, 1);\n\n    float U_center = calculateUorV(flow, 0, m, 0, n, 0);\n    float V_center = calculateUorV(flow, 0, m, 0, n, 1);\n\n    //计算系数的值\n    float a1 = (U_right - U_left)/(m/2);\n    float a2 = (V_right - V_left)/(m/2);\n\n    float b1 = (U_upper - U_lower)/(n/2);\n    float b2 = (V_upper - V_lower)/(n/2);\n\n    float c1 = U_center - a1*n/2 - b1*m/2;\n    float c2 = V_center - a2*n/2 - b2*m/2;\n\n    //计算差值\n    float numeratorofD = 0.0;\n    float denominatorofD = 0.0;\n    for(int i = 0; i < m; ++i){\n        for (int j = 0; j < n; ++j){\n            Vec2f flow_at_point = flow.at<Vec2f>(i, j);\n            float U_ij = flow_at_point[0];\n            float V_ij = flow_at_point[1];\n            float temp1 = (a1*i + b1*j + c1 - U_ij);\n            float temp2 = (a2*i + b2*j + c2 - V_ij);\n            numeratorofD += sqrt( temp1 * temp1 + temp2 * temp2 );\n            denominatorofD += sqrt(U_ij* U_ij + V_ij*V_ij);\n        }\n    }\n    optDifference = numeratorofD/denominatorofD;\n    \n    return optDifference;\n}\n\n\n/*Calculate horizontal or vertical component of the optical flow field\n * dim = 0 for horizontal, dim = 1 for vertical\n * m_left and m_right is the left boundary and right boundary of the cols and rows respectively\n */\nfloat calculateUorV(Mat flow, int m_left, int m_right, int n_left, int n_right, int dim){\n    float UorV = 0;\n    for (int i=m_left; i<m_right; ++i) {\n        for (int j=n_left; j<n_right; ++j) {\n            Vec2f flow_at_point = flow.at<Vec2f>(i, j);\n            float f = flow_at_point[dim];\n            UorV += f;\n        }\n    }\n    UorV /= ((m_right-m_left)*(n_right-n_left));\n    return UorV;\n}\n\nbool moveIdentificate(Mat temp, std::vector<Point2f> landmark, Mat &gray, Mat &preGray, Mat &flow, int &optFlowPicNumber, std::vector<float> &optFlowDiffArray,  Mat &moveIdenImg){\n    //光流部分流程\n    //计算光流部分的差值\n    Point2f face_center = landmark[28];\n    if ( (face_center.y - WIN_HEIGHT/4) > 0 && (face_center.y + WIN_HEIGHT/4) < WIN_HEIGHT &&\n        (face_center.x - WIN_WIDTH/4) > 0  && (face_center.x + WIN_WIDTH/4) < WIN_WIDTH ){\n        Mat faceArea = temp(Range(face_center.y - WIN_HEIGHT/6, face_center.y + WIN_HEIGHT/6),\n                            Range(face_center.x - WIN_WIDTH/6, face_center.x + WIN_WIDTH/6) );\n        cvtColor(faceArea, gray, CV_BGR2GRAY);\n        if(preGray.data){\n            calcOpticalFlowFarneback(preGray, gray, flow, 0.5, 3, 15, 3, 5, 1.2, 0);\n            float optDifference = opticalDifference(flow);\n            optFlowDiffArray[optFlowPicNumber%20] = optDifference;\n            //保存图像用于人脸识别\n            if(optFlowPicNumber%10 == 0){\n                moveIdenImg = temp;\n            }\n            optFlowPicNumber++;\n        }\n        std::swap(preGray, gray);\n        if(optFlowPicNumber%20 == 0){\n            float sumDif = 0;\n            for(auto iter = optFlowDiffArray.begin(); iter != optFlowDiffArray.end(); iter++){\n                sumDif += *iter;\n            }\n            \n            cout<<\"Value of Move Identification: \"<<sumDif<<endl;\n            if(sumDif < THRESHOLD_MOVE && sumDif > 0)   return true;\n        }\n    }\n    return false;\n}\n\n//openface 特征点转dlib特征点\nvoid openFace2dlib_landmarks(std::vector<Point2f> &dlib_landmarks, std::vector<double> openface_landmarks){\n    for(int i = 0; i < 68; i++){\n        Point2f dlib_i;\n        float x = (float)openface_landmarks[i];\n        float y = (float)openface_landmarks[68+i];\n        dlib_landmarks.push_back(Point2f(x,y));\n    }\n}\n\n//计算向量的方差\ndouble arrayDeviance(std::vector<double> arr){\n    double sum = 0.0;\n    std::for_each (std::begin(arr), std::end(arr), [&](const double d) {\n        sum  += d;\n    });\n    double mean = sum/arr.size();\n    double accum  = 0.0;\n    std::for_each (std::begin(arr), std::end(arr), [&](const double d) {\n        accum  += (d-mean)*(d-mean);\n    });\n    double stdev = sqrt(accum/(arr.size()-1)); //方差\n    return stdev;\n}\n\n//眨眼验证\nbool eyeIdentificate(Mat temp, bool detection_success, bool clnf_eye_model, std::vector<Point2f> landmarks, std::vector<std::vector<double>> &direction, int frame_count, bool &first_iden, Mat &eyeIdenImg){\n    if (detection_success){\n        if(frame_count%20 == 0){\n            std::vector<double> deviance_vec(36,0.0);\n            for(int i = 0; i < 36; i++){\n                deviance_vec[i] = arrayDeviance(direction[i]);\n            }\n            double deviance_eye = 0.0;\n            double deviance_face = 0.0;\n            for(int i = 1; i < 12; i++){ deviance_eye += deviance_vec[i];}\n            for(int i = 12; i < 36; i++){ deviance_face += deviance_vec[i];}\n            if(first_iden){\n                first_iden = false;\n                return false;\n            }else{\n                cout<<\"Value of Eye Identification: \"<<deviance_eye/deviance_face<<endl;\n                return deviance_eye/deviance_face > THRESHOLD_EYE;\n            }\n            \n        }else{\n            for(int i = 0; i < 36; i++){\n                if(i>=0 && i<12){\n                    direction[i][frame_count%20 - 1] = landmarks[i+36].x + landmarks[i+36].y;\n                }else{\n                    direction[i][frame_count%20 - 1] = landmarks[i-12].x + landmarks[i-12].y;\n                }\n            }\n        }\n    }\n    eyeIdenImg = temp;\n    return false;\n}\n\nvoid relativeLandmarks(const vector<Point2f> inputLandmarks, vector<Point2f> &outputLandmarks, LandmarkDetector::CLNF &clnf_model){\n    float relative_x = clnf_model.face_x_pos;\n    float relative_y = clnf_model.face_y_pos;\n    float relative_width = clnf_model.face_width;\n    float relative_height = clnf_model.face_height;\n    for( int i=0; i<inputLandmarks.size(); i++){\n        outputLandmarks[i].x = (inputLandmarks[i].x - relative_x) / relative_width;\n        outputLandmarks[i].y = (inputLandmarks[i].y - relative_y) / relative_height;\n    }\n}\n"
  },
  {
    "path": "FaceLivenessDetection/exe/FaceLivenessDetection/LivenessDetection/LivenessDetection.cpp",
    "content": "//\n//  LivenessDetection.cpp\n//  FaceLivenessDetection\n//\n//  Created by 刘岩 on 2017/5/12.\n//  Copyright © 2017年 刘岩. All rights reserved.\n//\n\n#include \"LivenessDetection.hpp\"\nnamespace LD{\n    void drawFaceOutline(Mat &temp){\n        cv::Size sz(200,300);\n        cv::Scalar color(255,255,255);\n        cv::line(temp, Point2f(WIN_WIDTH/2, WIN_HEIGHT/2-40), Point2f(WIN_WIDTH/2, WIN_HEIGHT/2+50), color, 4);\n        cv::line(temp, Point2f(WIN_WIDTH/2-55, WIN_HEIGHT/2-80),Point2f(WIN_WIDTH/2-115, WIN_HEIGHT/2-80), color, 4);\n        cv::line(temp, Point2f(WIN_WIDTH/2+55, WIN_HEIGHT/2-80),Point2f(WIN_WIDTH/2+115, WIN_HEIGHT/2-80), color, 4);\n        cv::line(temp, Point2f(WIN_WIDTH/2-40, WIN_HEIGHT/2+120),Point2f(WIN_WIDTH/2+40, WIN_HEIGHT/2+120), color, 4);\n        cv::ellipse(temp, Point2f(WIN_WIDTH/2, WIN_HEIGHT/2), sz, 0, -20, 20, cv::Scalar(255,255,255), 4);\n        cv::ellipse(temp, Point2f(WIN_WIDTH/2, WIN_HEIGHT/2), sz, 0, 160, 200, cv::Scalar(255,255,255), 4);\n    }\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/exe/FaceLivenessDetection/LivenessDetection/LivenessDetection.hpp",
    "content": "//\n//  LivenessDetection.hpp\n//  FaceLivenessDetection\n//\n//  Created by 刘岩 on 2017/5/12.\n//  Copyright © 2017年 刘岩. All rights reserved.\n//\n\n#ifndef LivenessDetection_hpp\n#define LivenessDetection_hpp\n\n#include <stdio.h>\n#include \"LandmarkCoreIncludes.h\"\n\n// OpenCV includes\n#include <opencv2/imgproc.hpp>\n#include <opencv2/highgui/highgui.hpp>\n#include \"opencv2/opencv.hpp\"\n\n#define WIN_WIDTH 640\n#define WIN_HEIGHT 480\n\nusing namespace std;\nusing namespace cv;\n\nnamespace LD{\n    class LivenessDetection{\n    public:\n        void drawFaceOutline(cv::Mat &temp);\n    };\n}\n\n\n#endif /* LivenessDetection_hpp */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/classifiers/haarcascade_frontalface_alt.xml",
    "content": "<?xml version=\"1.0\"?>\n<!--\n    Stump-based 20x20 gentle adaboost frontal face detector.\n    Created by Rainer Lienhart.\n\n////////////////////////////////////////////////////////////////////////////////////////\n\n  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n\n  By downloading, copying, installing or using the software you agree to this license.\n  If you do not agree to this license, do not download, install,\n  copy or use the software.\n\n\n                        Intel License Agreement\n                For Open Source Computer Vision Library\n\n Copyright (C) 2000, Intel Corporation, all rights reserved.\n Third party copyrights are property of their respective owners.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n   * Redistribution's of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n\n   * Redistribution's in binary form must reproduce the above copyright notice,\n     this list of conditions and the following disclaimer in the documentation\n     and/or other materials provided with the distribution.\n\n   * The name of Intel Corporation may not be used to endorse or promote products\n     derived from this software without specific prior written permission.\n\n This software is provided by the copyright holders and contributors \"as is\" and\n any express or implied warranties, including, but not limited to, the implied\n warranties of merchantability and fitness for a particular purpose are disclaimed.\n In no event shall the Intel Corporation or contributors be liable for any direct,\n indirect, incidental, special, exemplary, or consequential damages\n (including, but not limited to, procurement of substitute goods or services;\n loss of use, data, or profits; or business interruption) however caused\n and on any theory of liability, whether in contract, strict liability,\n or tort (including negligence or otherwise) arising in any way out of\n the use of this software, even if advised of the possibility of such damage.\n-->\n<opencv_storage>\n<cascade type_id=\"opencv-cascade-classifier\"><stageType>BOOST</stageType>\n  <featureType>HAAR</featureType>\n  <height>20</height>\n  <width>20</width>\n  <stageParams>\n    <maxWeakCount>213</maxWeakCount></stageParams>\n  <featureParams>\n    <maxCatCount>0</maxCatCount></featureParams>\n  <stageNum>22</stageNum>\n  <stages>\n    <_>\n      <maxWeakCount>3</maxWeakCount>\n      <stageThreshold>8.2268941402435303e-01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 0 4.0141958743333817e-03</internalNodes>\n          <leafValues>\n            3.3794190734624863e-02 8.3781069517135620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1 1.5151339583098888e-02</internalNodes>\n          <leafValues>\n            1.5141320228576660e-01 7.4888122081756592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2 4.2109931819140911e-03</internalNodes>\n          <leafValues>\n            9.0049281716346741e-02 6.3748198747634888e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>16</maxWeakCount>\n      <stageThreshold>6.9566087722778320e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3 1.6227109590545297e-03</internalNodes>\n          <leafValues>\n            6.9308586418628693e-02 7.1109461784362793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4 2.2906649392098188e-03</internalNodes>\n          <leafValues>\n            1.7958030104637146e-01 6.6686922311782837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5 5.0025708042085171e-03</internalNodes>\n          <leafValues>\n            1.6936729848384857e-01 6.5540069341659546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6 7.9659894108772278e-03</internalNodes>\n          <leafValues>\n            5.8663320541381836e-01 9.1414518654346466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7 -3.5227010957896709e-03</internalNodes>\n          <leafValues>\n            1.4131669700145721e-01 6.0318958759307861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8 3.6667689681053162e-02</internalNodes>\n          <leafValues>\n            3.6756721138954163e-01 7.9203182458877563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 9 9.3361474573612213e-03</internalNodes>\n          <leafValues>\n            6.1613857746124268e-01 2.0885099470615387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 10 8.6961314082145691e-03</internalNodes>\n          <leafValues>\n            2.8362309932708740e-01 6.3602739572525024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 11 1.1488880263641477e-03</internalNodes>\n          <leafValues>\n            2.2235809266567230e-01 5.8007007837295532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 12 -2.1484689787030220e-03</internalNodes>\n          <leafValues>\n            2.4064640700817108e-01 5.7870548963546753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 13 2.1219060290604830e-03</internalNodes>\n          <leafValues>\n            5.5596548318862915e-01 1.3622370362281799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 14 -9.3949146568775177e-02</internalNodes>\n          <leafValues>\n            8.5027372837066650e-01 4.7177401185035706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 15 1.3777789426967502e-03</internalNodes>\n          <leafValues>\n            5.9936738014221191e-01 2.8345298767089844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 16 7.3063157498836517e-02</internalNodes>\n          <leafValues>\n            4.3418860435485840e-01 7.0600342750549316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 17 3.6767389974556863e-04</internalNodes>\n          <leafValues>\n            3.0278879404067993e-01 6.0515749454498291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 18 -6.0479710809886456e-03</internalNodes>\n          <leafValues>\n            1.7984339594841003e-01 5.6752568483352661e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>21</maxWeakCount>\n      <stageThreshold>9.4985427856445312e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 19 -1.6510689631104469e-02</internalNodes>\n          <leafValues>\n            6.6442251205444336e-01 1.4248579740524292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 20 2.7052499353885651e-03</internalNodes>\n          <leafValues>\n            6.3253521919250488e-01 1.2884770333766937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 21 2.8069869149476290e-03</internalNodes>\n          <leafValues>\n            1.2402880191802979e-01 6.1931931972503662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 22 -1.5402400167658925e-03</internalNodes>\n          <leafValues>\n            1.4321430027484894e-01 5.6700158119201660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 23 -5.6386279175058007e-04</internalNodes>\n          <leafValues>\n            1.6574330627918243e-01 5.9052079916000366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 24 1.9253729842603207e-03</internalNodes>\n          <leafValues>\n            2.6955071091651917e-01 5.7388240098953247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 25 -5.0214841030538082e-03</internalNodes>\n          <leafValues>\n            1.8935389816761017e-01 5.7827740907669067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 26 2.6365420781075954e-03</internalNodes>\n          <leafValues>\n            2.3093290627002716e-01 5.6954258680343628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 27 -1.5127769438549876e-03</internalNodes>\n          <leafValues>\n            2.7596020698547363e-01 5.9566420316696167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 28 -1.0157439857721329e-02</internalNodes>\n          <leafValues>\n            1.7325380444526672e-01 5.5220472812652588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 29 -1.1953660286962986e-02</internalNodes>\n          <leafValues>\n            1.3394099473953247e-01 5.5590140819549561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 30 4.8859491944313049e-03</internalNodes>\n          <leafValues>\n            3.6287039518356323e-01 6.1888492107391357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 31 -8.0132916569709778e-02</internalNodes>\n          <leafValues>\n            9.1211050748825073e-02 5.4759448766708374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 32 1.0643280111253262e-03</internalNodes>\n          <leafValues>\n            3.7151429057121277e-01 5.7113999128341675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 33 -1.3419450260698795e-03</internalNodes>\n          <leafValues>\n            5.9533137083053589e-01 3.3180978894233704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 34 -5.4601140320301056e-02</internalNodes>\n          <leafValues>\n            1.8440659344196320e-01 5.6028461456298828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 35 2.9071690514683723e-03</internalNodes>\n          <leafValues>\n            3.5942441225051880e-01 6.1317151784896851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 36 7.4718717951327562e-04</internalNodes>\n          <leafValues>\n            5.9943532943725586e-01 3.4595629572868347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 37 4.3013808317482471e-03</internalNodes>\n          <leafValues>\n            4.1726520657539368e-01 6.9908452033996582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 38 4.5017572119832039e-03</internalNodes>\n          <leafValues>\n            4.5097151398658752e-01 7.8014570474624634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 39 2.4138500913977623e-02</internalNodes>\n          <leafValues>\n            5.4382127523422241e-01 1.3198269903659821e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>39</maxWeakCount>\n      <stageThreshold>1.8412969589233398e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 40 1.9212230108678341e-03</internalNodes>\n          <leafValues>\n            1.4152669906616211e-01 6.1998707056045532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 41 -1.2748669541906565e-04</internalNodes>\n          <leafValues>\n            6.1910742521286011e-01 1.8849289417266846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 42 5.1409931620582938e-04</internalNodes>\n          <leafValues>\n            1.4873969554901123e-01 5.8579277992248535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 43 4.1878609918057919e-03</internalNodes>\n          <leafValues>\n            2.7469098567962646e-01 6.3592398166656494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 44 5.1015717908740044e-03</internalNodes>\n          <leafValues>\n            5.8708512783050537e-01 2.1756289899349213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 45 -2.1448440384119749e-03</internalNodes>\n          <leafValues>\n            5.8809447288513184e-01 2.9795908927917480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 46 -2.8977119363844395e-03</internalNodes>\n          <leafValues>\n            2.3733270168304443e-01 5.8766472339630127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 47 -2.1610679104924202e-02</internalNodes>\n          <leafValues>\n            1.2206549942493439e-01 5.1942020654678345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 48 -4.6299318782985210e-03</internalNodes>\n          <leafValues>\n            2.6312309503555298e-01 5.8174091577529907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 49 5.9393711853772402e-04</internalNodes>\n          <leafValues>\n            3.6386200785636902e-01 5.6985449790954590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 50 5.3878661245107651e-02</internalNodes>\n          <leafValues>\n            4.3035310506820679e-01 7.5593662261962891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 51 1.8887349870055914e-03</internalNodes>\n          <leafValues>\n            2.1226030588150024e-01 5.6134271621704102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 52 -2.3635339457541704e-03</internalNodes>\n          <leafValues>\n            5.6318491697311401e-01 2.6427671313285828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 53 2.4017799645662308e-02</internalNodes>\n          <leafValues>\n            5.7971078157424927e-01 2.7517059445381165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 54 2.0543030404951423e-04</internalNodes>\n          <leafValues>\n            2.7052420377731323e-01 5.7525688409805298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 55 8.4790197433903813e-04</internalNodes>\n          <leafValues>\n            5.4356247186660767e-01 2.3348769545555115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 56 1.4091329649090767e-03</internalNodes>\n          <leafValues>\n            5.3194248676300049e-01 2.0631550252437592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 57 1.4642629539594054e-03</internalNodes>\n          <leafValues>\n            5.4189807176589966e-01 3.0688610672950745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 58 1.6352549428120255e-03</internalNodes>\n          <leafValues>\n            3.6953729391098022e-01 6.1128681898117065e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 59 8.3172752056270838e-04</internalNodes>\n          <leafValues>\n            3.5650369524955750e-01 6.0252362489700317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 60 -2.0998890977352858e-03</internalNodes>\n          <leafValues>\n            1.9139820337295532e-01 5.3628271818161011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 61 -7.4213981861248612e-04</internalNodes>\n          <leafValues>\n            3.8355550169944763e-01 5.5293101072311401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 62 3.2655049581080675e-03</internalNodes>\n          <leafValues>\n            4.3128961324691772e-01 7.1018958091735840e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 63 8.9134991867467761e-04</internalNodes>\n          <leafValues>\n            3.9848309755325317e-01 6.3919639587402344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 64 -1.5284179709851742e-02</internalNodes>\n          <leafValues>\n            2.3667329549789429e-01 5.4337137937545776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 65 4.8381411470472813e-03</internalNodes>\n          <leafValues>\n            5.8175009489059448e-01 3.2391890883445740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 66 -9.1093179071322083e-04</internalNodes>\n          <leafValues>\n            5.5405938625335693e-01 2.9118689894676208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 67 -6.1275060288608074e-03</internalNodes>\n          <leafValues>\n            1.7752550542354584e-01 5.1966291666030884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 68 -4.4576259097084403e-04</internalNodes>\n          <leafValues>\n            3.0241701006889343e-01 5.5335938930511475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 69 2.2646540775895119e-02</internalNodes>\n          <leafValues>\n            4.4149309396743774e-01 6.9753772020339966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 70 -1.8804960418492556e-03</internalNodes>\n          <leafValues>\n            2.7913948893547058e-01 5.4979521036148071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 71 7.0889107882976532e-03</internalNodes>\n          <leafValues>\n            5.2631992101669312e-01 2.3855470120906830e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 72 1.7318050377070904e-03</internalNodes>\n          <leafValues>\n            4.3193790316581726e-01 6.9836008548736572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 73 -6.8482700735330582e-03</internalNodes>\n          <leafValues>\n            3.0820429325103760e-01 5.3909200429916382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 74 -1.5062530110299122e-05</internalNodes>\n          <leafValues>\n            5.5219221115112305e-01 3.1203660368919373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 75 2.9475569725036621e-02</internalNodes>\n          <leafValues>\n            5.4013228416442871e-01 1.7706030607223511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 76 8.1387329846620560e-03</internalNodes>\n          <leafValues>\n            5.1786178350448608e-01 1.2110190093517303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 77 2.0942950621247292e-02</internalNodes>\n          <leafValues>\n            5.2902942895889282e-01 3.3112218976020813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 78 -9.5665529370307922e-03</internalNodes>\n          <leafValues>\n            7.4719941616058350e-01 4.4519689679145813e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>33</maxWeakCount>\n      <stageThreshold>1.5324139595031738e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 79 -2.8206960996612906e-04</internalNodes>\n          <leafValues>\n            2.0640860497951508e-01 6.0767322778701782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 80 1.6790600493550301e-03</internalNodes>\n          <leafValues>\n            5.8519971370697021e-01 1.2553839385509491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 81 6.9827912375330925e-04</internalNodes>\n          <leafValues>\n            9.4018429517745972e-02 5.7289612293243408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 82 7.8959012171253562e-04</internalNodes>\n          <leafValues>\n            1.7819879949092865e-01 5.6943088769912720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 83 -2.8560499195009470e-03</internalNodes>\n          <leafValues>\n            1.6383990645408630e-01 5.7886648178100586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 84 -3.8122469559311867e-03</internalNodes>\n          <leafValues>\n            2.0854400098323822e-01 5.5085647106170654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 85 1.5896620461717248e-03</internalNodes>\n          <leafValues>\n            5.7027608156204224e-01 1.8572150170803070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 86 1.0078339837491512e-02</internalNodes>\n          <leafValues>\n            5.1169431209564209e-01 2.1897700428962708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 87 -6.3526302576065063e-02</internalNodes>\n          <leafValues>\n            7.1313798427581787e-01 4.0438130497932434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 88 -9.1031491756439209e-03</internalNodes>\n          <leafValues>\n            2.5671818852424622e-01 5.4639732837677002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 89 -2.4035000242292881e-03</internalNodes>\n          <leafValues>\n            1.7006659507751465e-01 5.5909740924835205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 90 1.5226360410451889e-03</internalNodes>\n          <leafValues>\n            5.4105567932128906e-01 2.6190540194511414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 91 1.7997439950704575e-02</internalNodes>\n          <leafValues>\n            3.7324368953704834e-01 6.5352207422256470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 92 -6.4538191072642803e-03</internalNodes>\n          <leafValues>\n            2.6264819502830505e-01 5.5374461412429810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 93 -1.1880760081112385e-02</internalNodes>\n          <leafValues>\n            2.0037539303302765e-01 5.5447459220886230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 94 1.2713660253211856e-03</internalNodes>\n          <leafValues>\n            5.5919027328491211e-01 3.0319759249687195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 95 1.1376109905540943e-03</internalNodes>\n          <leafValues>\n            2.7304071187973022e-01 5.6465089321136475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 96 -4.2651998810470104e-03</internalNodes>\n          <leafValues>\n            1.4059090614318848e-01 5.4618209600448608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 97 -2.9602861031889915e-03</internalNodes>\n          <leafValues>\n            1.7950350046157837e-01 5.4592901468276978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 98 -8.8448226451873779e-03</internalNodes>\n          <leafValues>\n            5.7367831468582153e-01 2.8092199563980103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 99 -6.6430689767003059e-03</internalNodes>\n          <leafValues>\n            2.3706759512424469e-01 5.5038261413574219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 100 3.9997808635234833e-03</internalNodes>\n          <leafValues>\n            5.6081998348236084e-01 3.3042821288108826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 101 -4.1221720166504383e-03</internalNodes>\n          <leafValues>\n            1.6401059925556183e-01 5.3789931535720825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 102 1.5624909661710262e-02</internalNodes>\n          <leafValues>\n            5.2276492118835449e-01 2.2886039316654205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 103 -1.0356419719755650e-02</internalNodes>\n          <leafValues>\n            7.0161938667297363e-01 4.2529278993606567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 104 -8.7960809469223022e-03</internalNodes>\n          <leafValues>\n            2.7673470973968506e-01 5.3558301925659180e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 105 1.6226939857006073e-01</internalNodes>\n          <leafValues>\n            4.3422400951385498e-01 7.4425792694091797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 106 4.5542530715465546e-03</internalNodes>\n          <leafValues>\n            5.7264858484268188e-01 2.5821250677108765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 107 -2.1309209987521172e-03</internalNodes>\n          <leafValues>\n            2.1068480610847473e-01 5.3610187768936157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 108 -1.3208420015871525e-02</internalNodes>\n          <leafValues>\n            7.5937908887863159e-01 4.5524680614471436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 109 -6.5996676683425903e-02</internalNodes>\n          <leafValues>\n            1.2524759769439697e-01 5.3440397977828979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 110 7.9142656177282333e-03</internalNodes>\n          <leafValues>\n            3.3153840899467468e-01 5.6010431051254272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 111 2.0894279703497887e-02</internalNodes>\n          <leafValues>\n            5.5060499906539917e-01 2.7688381075859070e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>44</maxWeakCount>\n      <stageThreshold>2.1010639190673828e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 112 1.1961159761995077e-03</internalNodes>\n          <leafValues>\n            1.7626909911632538e-01 6.1562412977218628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 113 -1.8679830245673656e-03</internalNodes>\n          <leafValues>\n            6.1181068420410156e-01 1.8323999643325806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 114 -1.9579799845814705e-04</internalNodes>\n          <leafValues>\n            9.9044263362884521e-02 5.7238161563873291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 115 -8.0255657667294145e-04</internalNodes>\n          <leafValues>\n            5.5798798799514771e-01 2.3772829771041870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 116 -2.4510810617357492e-03</internalNodes>\n          <leafValues>\n            2.2314579784870148e-01 5.8589351177215576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 117 5.0361850298941135e-04</internalNodes>\n          <leafValues>\n            2.6539939641952515e-01 5.7941037416458130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 118 4.0293349884450436e-03</internalNodes>\n          <leafValues>\n            5.8038270473480225e-01 2.4848650395870209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 119 -1.4451709575951099e-02</internalNodes>\n          <leafValues>\n            1.8303519487380981e-01 5.4842048883438110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 120 2.0380979403853416e-03</internalNodes>\n          <leafValues>\n            3.3635589480400085e-01 6.0510927438735962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 121 -1.6155190533027053e-03</internalNodes>\n          <leafValues>\n            2.2866420447826385e-01 5.4412460327148438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 122 3.3458340913057327e-03</internalNodes>\n          <leafValues>\n            5.6259131431579590e-01 2.3923380672931671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 123 1.6379579901695251e-03</internalNodes>\n          <leafValues>\n            3.9069938659667969e-01 5.9646219015121460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 124 3.0251210555434227e-02</internalNodes>\n          <leafValues>\n            5.2484822273254395e-01 1.5757469832897186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 125 3.7251990288496017e-02</internalNodes>\n          <leafValues>\n            4.1943109035491943e-01 6.7484188079833984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 126 -2.5109790265560150e-02</internalNodes>\n          <leafValues>\n            1.8825499713420868e-01 5.4734510183334351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 127 -5.3099058568477631e-03</internalNodes>\n          <leafValues>\n            1.3399730622768402e-01 5.2271109819412231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 128 1.2086479691788554e-03</internalNodes>\n          <leafValues>\n            3.7620881199836731e-01 6.1096358299255371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 129 -2.1907679736614227e-02</internalNodes>\n          <leafValues>\n            2.6631429791450500e-01 5.4040068387985229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 130 5.4116579703986645e-03</internalNodes>\n          <leafValues>\n            5.3635787963867188e-01 2.2322730720043182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 131 6.9946326315402985e-02</internalNodes>\n          <leafValues>\n            5.3582328557968140e-01 2.4536980688571930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 132 3.4520021290518343e-04</internalNodes>\n          <leafValues>\n            2.4096719920635223e-01 5.3769302368164062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 133 1.2627709656953812e-03</internalNodes>\n          <leafValues>\n            5.4258567094802856e-01 3.1556931138038635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 134 2.2719509899616241e-02</internalNodes>\n          <leafValues>\n            4.1584059596061707e-01 6.5978652238845825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 135 -1.8111000536009669e-03</internalNodes>\n          <leafValues>\n            2.8112530708312988e-01 5.5052447319030762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 136 3.3469670452177525e-03</internalNodes>\n          <leafValues>\n            5.2600282430648804e-01 1.8914650380611420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 137 4.0791751234792173e-04</internalNodes>\n          <leafValues>\n            5.6735092401504517e-01 3.3442100882530212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 138 1.2734799645841122e-02</internalNodes>\n          <leafValues>\n            5.3435921669006348e-01 2.3956120014190674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 139 -7.3119727894663811e-03</internalNodes>\n          <leafValues>\n            6.0108900070190430e-01 4.0222078561782837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 140 -5.6948751211166382e-02</internalNodes>\n          <leafValues>\n            8.1991511583328247e-01 4.5431908965110779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 141 -5.0116591155529022e-03</internalNodes>\n          <leafValues>\n            2.2002810239791870e-01 5.3577107191085815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 142 6.0334368608891964e-03</internalNodes>\n          <leafValues>\n            4.4130811095237732e-01 7.1817511320114136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 143 3.9437441155314445e-03</internalNodes>\n          <leafValues>\n            5.4788607358932495e-01 2.7917331457138062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 144 -3.6591119132936001e-03</internalNodes>\n          <leafValues>\n            6.3578677177429199e-01 3.9897239208221436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 145 -3.8456181064248085e-03</internalNodes>\n          <leafValues>\n            3.4936860203742981e-01 5.3006649017333984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 146 -7.1926261298358440e-03</internalNodes>\n          <leafValues>\n            1.1196149885654449e-01 5.2296727895736694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 147 -5.2798941731452942e-02</internalNodes>\n          <leafValues>\n            2.3871029913425446e-01 5.4534512758255005e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 148 -7.9537667334079742e-03</internalNodes>\n          <leafValues>\n            7.5869178771972656e-01 4.4393768906593323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 149 -2.7344180271029472e-03</internalNodes>\n          <leafValues>\n            2.5654768943786621e-01 5.4893219470977783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 150 -1.8507939530536532e-03</internalNodes>\n          <leafValues>\n            6.7343479394912720e-01 4.2524749040603638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 151 1.5918919816613197e-02</internalNodes>\n          <leafValues>\n            5.4883527755737305e-01 2.2926619648933411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 152 -1.2687679845839739e-03</internalNodes>\n          <leafValues>\n            6.1043310165405273e-01 4.0223899483680725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 153 6.2883910723030567e-03</internalNodes>\n          <leafValues>\n            5.3108531236648560e-01 1.5361930429935455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 154 -6.2259892001748085e-03</internalNodes>\n          <leafValues>\n            1.7291119694709778e-01 5.2416062355041504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 155 -1.2132599949836731e-02</internalNodes>\n          <leafValues>\n            6.5977597236633301e-01 4.3251821398735046e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>50</maxWeakCount>\n      <stageThreshold>2.3918790817260742e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 156 -3.9184908382594585e-03</internalNodes>\n          <leafValues>\n            6.1034351587295532e-01 1.4693309366703033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 157 1.5971299726516008e-03</internalNodes>\n          <leafValues>\n            2.6323631405830383e-01 5.8964669704437256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 158 1.7780110239982605e-02</internalNodes>\n          <leafValues>\n            5.8728742599487305e-01 1.7603619396686554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 159 6.5334769897162914e-04</internalNodes>\n          <leafValues>\n            1.5678019821643829e-01 5.5960661172866821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 160 -2.8353091329336166e-04</internalNodes>\n          <leafValues>\n            1.9131539762020111e-01 5.7320362329483032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 161 1.6104689566418529e-03</internalNodes>\n          <leafValues>\n            2.9149138927459717e-01 5.6230807304382324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 162 -9.7750619053840637e-02</internalNodes>\n          <leafValues>\n            1.9434769451618195e-01 5.6482332944869995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 163 5.5182358482852578e-04</internalNodes>\n          <leafValues>\n            3.1346169114112854e-01 5.5046397447586060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 164 -1.2858220376074314e-02</internalNodes>\n          <leafValues>\n            2.5364819169044495e-01 5.7601428031921387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 165 4.1530239395797253e-03</internalNodes>\n          <leafValues>\n            5.7677221298217773e-01 3.6597740650177002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 166 1.7092459602281451e-03</internalNodes>\n          <leafValues>\n            2.8431910276412964e-01 5.9189391136169434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 167 7.5217359699308872e-03</internalNodes>\n          <leafValues>\n            4.0524271130561829e-01 6.1831092834472656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 168 2.2479810286313295e-03</internalNodes>\n          <leafValues>\n            5.7837551832199097e-01 3.1354010105133057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 169 5.2006211131811142e-02</internalNodes>\n          <leafValues>\n            5.5413120985031128e-01 1.9166369736194611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 170 1.2085529975593090e-02</internalNodes>\n          <leafValues>\n            4.0326559543609619e-01 6.6445910930633545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 171 1.4687820112158079e-05</internalNodes>\n          <leafValues>\n            3.5359779000282288e-01 5.7093828916549683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 172 7.1395188570022583e-06</internalNodes>\n          <leafValues>\n            3.0374449491500854e-01 5.6102699041366577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 173 -4.6001640148460865e-03</internalNodes>\n          <leafValues>\n            7.1810871362686157e-01 4.5803260803222656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 174 2.0058949012309313e-03</internalNodes>\n          <leafValues>\n            5.6219518184661865e-01 2.9536840319633484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 175 4.5050270855426788e-03</internalNodes>\n          <leafValues>\n            4.6153879165649414e-01 7.6190179586410522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 176 1.1746830306947231e-02</internalNodes>\n          <leafValues>\n            5.3438371419906616e-01 1.7725290358066559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 177 -5.8316338807344437e-02</internalNodes>\n          <leafValues>\n            1.6862459480762482e-01 5.3407722711563110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 178 2.3629379575140774e-04</internalNodes>\n          <leafValues>\n            3.7920561432838440e-01 6.0268038511276245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 179 -7.8156180679798126e-03</internalNodes>\n          <leafValues>\n            1.5128670632839203e-01 5.3243237733840942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 180 -1.0876160115003586e-02</internalNodes>\n          <leafValues>\n            2.0818220078945160e-01 5.3199452161788940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 181 -2.7745519764721394e-03</internalNodes>\n          <leafValues>\n            4.0982469916343689e-01 5.2103281021118164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 182 -7.8276381827890873e-04</internalNodes>\n          <leafValues>\n            5.6932741403579712e-01 3.4788420796394348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 183 1.3870409689843655e-02</internalNodes>\n          <leafValues>\n            5.3267508745193481e-01 2.2576980292797089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 184 -2.3674910888075829e-02</internalNodes>\n          <leafValues>\n            1.5513050556182861e-01 5.2007079124450684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 185 -1.4879409718560055e-05</internalNodes>\n          <leafValues>\n            5.5005669593811035e-01 3.8201761245727539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 186 3.6190641112625599e-03</internalNodes>\n          <leafValues>\n            4.2386838793754578e-01 6.6397482156753540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 187 -1.9817110151052475e-02</internalNodes>\n          <leafValues>\n            2.1500380337238312e-01 5.3823578357696533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 188 -3.8154039066284895e-03</internalNodes>\n          <leafValues>\n            6.6757112741470337e-01 4.2152971029281616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 189 -4.9775829538702965e-03</internalNodes>\n          <leafValues>\n            2.2672890126705170e-01 5.3863281011581421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 190 2.2441020701080561e-03</internalNodes>\n          <leafValues>\n            4.3086910247802734e-01 6.8557357788085938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 191 1.2282459996640682e-02</internalNodes>\n          <leafValues>\n            5.8366149663925171e-01 3.4674790501594543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 192 -2.8548699337989092e-03</internalNodes>\n          <leafValues>\n            7.0169448852539062e-01 4.3114539980888367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 193 -3.7875669077038765e-03</internalNodes>\n          <leafValues>\n            2.8953450918197632e-01 5.2249461412429810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 194 -1.2201230274513364e-03</internalNodes>\n          <leafValues>\n            2.9755708575248718e-01 5.4816448688507080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 195 1.0160599835216999e-02</internalNodes>\n          <leafValues>\n            4.8888179659843445e-01 8.1826978921890259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 196 -1.6174569725990295e-02</internalNodes>\n          <leafValues>\n            1.4814929664134979e-01 5.2399927377700806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 197 1.9292460754513741e-02</internalNodes>\n          <leafValues>\n            4.7863098978996277e-01 7.3781907558441162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 198 -3.2479539513587952e-03</internalNodes>\n          <leafValues>\n            7.3742228746414185e-01 4.4706439971923828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 199 -9.3803480267524719e-03</internalNodes>\n          <leafValues>\n            3.4891548752784729e-01 5.5379962921142578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 200 -1.2606129981577396e-02</internalNodes>\n          <leafValues>\n            2.3796869814395905e-01 5.3154432773590088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 201 -2.5621930137276649e-02</internalNodes>\n          <leafValues>\n            1.9646880030632019e-01 5.1387697458267212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 202 -7.5741496402770281e-05</internalNodes>\n          <leafValues>\n            5.5905228853225708e-01 3.3658531308174133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 203 -8.9210882782936096e-02</internalNodes>\n          <leafValues>\n            6.3404656946659088e-02 5.1626348495483398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 204 -2.7670480776578188e-03</internalNodes>\n          <leafValues>\n            7.3234677314758301e-01 4.4907060265541077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 205 2.7152578695677221e-04</internalNodes>\n          <leafValues>\n            4.1148349642753601e-01 5.9855180978775024e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>51</maxWeakCount>\n      <stageThreshold>2.4527879714965820e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 206 1.4786219689995050e-03</internalNodes>\n          <leafValues>\n            2.6635450124740601e-01 6.6433167457580566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 207 -1.8741659587249160e-03</internalNodes>\n          <leafValues>\n            6.1438488960266113e-01 2.5185129046440125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 208 -1.7151009524241090e-03</internalNodes>\n          <leafValues>\n            5.7663410902023315e-01 2.3974630236625671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 209 -1.8939269939437509e-03</internalNodes>\n          <leafValues>\n            5.6820458173751831e-01 2.5291448831558228e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 210 -5.3006052039563656e-03</internalNodes>\n          <leafValues>\n            1.6406759619712830e-01 5.5560797452926636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 211 -4.6662531793117523e-02</internalNodes>\n          <leafValues>\n            6.1231541633605957e-01 4.7628301382064819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 212 -7.9431332414969802e-04</internalNodes>\n          <leafValues>\n            5.7078588008880615e-01 2.8394040465354919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 213 1.4891670085489750e-02</internalNodes>\n          <leafValues>\n            4.0896728634834290e-01 6.0063672065734863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 214 -1.2046529445797205e-03</internalNodes>\n          <leafValues>\n            5.7124507427215576e-01 2.7052891254425049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 215 6.0619381256401539e-03</internalNodes>\n          <leafValues>\n            5.2625042200088501e-01 3.2622259855270386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 216 -2.5286648888140917e-03</internalNodes>\n          <leafValues>\n            6.8538308143615723e-01 4.1992568969726562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 217 -5.9010218828916550e-03</internalNodes>\n          <leafValues>\n            3.2662820816040039e-01 5.4348129034042358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 218 5.6702760048210621e-03</internalNodes>\n          <leafValues>\n            5.4684108495712280e-01 2.3190039396286011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 219 -3.0304100364446640e-03</internalNodes>\n          <leafValues>\n            5.5706679821014404e-01 2.7082380652427673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 220 2.9803649522364140e-03</internalNodes>\n          <leafValues>\n            3.7005689740180969e-01 5.8906257152557373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 221 -7.5840510427951813e-02</internalNodes>\n          <leafValues>\n            2.1400700509548187e-01 5.4199481010437012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 222 1.9262539222836494e-02</internalNodes>\n          <leafValues>\n            5.5267721414566040e-01 2.7265900373458862e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 223 1.8888259364757687e-04</internalNodes>\n          <leafValues>\n            3.9580118656158447e-01 6.0172098875045776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 224 2.9369549825787544e-02</internalNodes>\n          <leafValues>\n            5.2413737773895264e-01 1.4357580244541168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 225 1.0417619487270713e-03</internalNodes>\n          <leafValues>\n            3.3854091167449951e-01 5.9299832582473755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 226 2.6125640142709017e-03</internalNodes>\n          <leafValues>\n            5.4853779077529907e-01 3.0215978622436523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 227 9.6977467183023691e-04</internalNodes>\n          <leafValues>\n            3.3752760291099548e-01 5.5320328474044800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 228 5.9512659208849072e-04</internalNodes>\n          <leafValues>\n            5.6317430734634399e-01 3.3593991398811340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 229 -1.0156559944152832e-01</internalNodes>\n          <leafValues>\n            6.3735038042068481e-02 5.2304250001907349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 230 3.6156699061393738e-02</internalNodes>\n          <leafValues>\n            5.1369631290435791e-01 1.0295289754867554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 231 3.4624140243977308e-03</internalNodes>\n          <leafValues>\n            3.8793200254440308e-01 5.5582892894744873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 232 1.9554980099201202e-02</internalNodes>\n          <leafValues>\n            5.2500867843627930e-01 1.8758599460124969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 233 -2.3121440317481756e-03</internalNodes>\n          <leafValues>\n            6.6720288991928101e-01 4.6796411275863647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 234 -1.8605289515107870e-03</internalNodes>\n          <leafValues>\n            7.1633791923522949e-01 4.3346709012985229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 235 -9.4026362057775259e-04</internalNodes>\n          <leafValues>\n            3.0213609337806702e-01 5.6502032279968262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 236 -5.2418331615626812e-03</internalNodes>\n          <leafValues>\n            1.8200090527534485e-01 5.2502560615539551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 237 1.1729019752237946e-04</internalNodes>\n          <leafValues>\n            3.3891880512237549e-01 5.4459732770919800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 238 1.1878840159624815e-03</internalNodes>\n          <leafValues>\n            4.0853491425514221e-01 6.2535631656646729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 239 -1.0881359688937664e-02</internalNodes>\n          <leafValues>\n            3.3783990144729614e-01 5.7000827789306641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 240 1.7354859737679362e-03</internalNodes>\n          <leafValues>\n            4.2046359181404114e-01 6.5230387449264526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 241 -6.5119052305817604e-03</internalNodes>\n          <leafValues>\n            2.5952160358428955e-01 5.4281437397003174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 242 -1.2136430013924837e-03</internalNodes>\n          <leafValues>\n            6.1651438474655151e-01 3.9778938889503479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 243 -1.0354240424931049e-02</internalNodes>\n          <leafValues>\n            1.6280280053615570e-01 5.2195048332214355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 244 5.5858830455690622e-04</internalNodes>\n          <leafValues>\n            3.1996509432792664e-01 5.5035740137100220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 245 1.5299649909138680e-02</internalNodes>\n          <leafValues>\n            4.1039940714836121e-01 6.1223882436752319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 246 -2.1588210016489029e-02</internalNodes>\n          <leafValues>\n            1.0349129885435104e-01 5.1973849534988403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 247 -1.2834629416465759e-01</internalNodes>\n          <leafValues>\n            8.4938651323318481e-01 4.8931029438972473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 248 -2.2927189711481333e-03</internalNodes>\n          <leafValues>\n            3.1301578879356384e-01 5.4715752601623535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 249 7.9915106296539307e-02</internalNodes>\n          <leafValues>\n            4.8563209176063538e-01 6.0739892721176147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 250 -7.9441092908382416e-02</internalNodes>\n          <leafValues>\n            8.3946740627288818e-01 4.6245330572128296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 251 -5.2800010889768600e-03</internalNodes>\n          <leafValues>\n            1.8816959857940674e-01 5.3066980838775635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 252 1.0463109938427806e-03</internalNodes>\n          <leafValues>\n            5.2712291479110718e-01 2.5830659270286560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 253 2.6317298761568964e-04</internalNodes>\n          <leafValues>\n            4.2353048920631409e-01 5.7354408502578735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 254 -3.6173160187900066e-03</internalNodes>\n          <leafValues>\n            6.9343960285186768e-01 4.4954448938369751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 255 1.1421879753470421e-02</internalNodes>\n          <leafValues>\n            5.9009212255477905e-01 4.1381931304931641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 256 -1.9963278900831938e-03</internalNodes>\n          <leafValues>\n            6.4663827419281006e-01 4.3272399902343750e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>56</maxWeakCount>\n      <stageThreshold>2.7153350830078125e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 257 -9.9691245704889297e-03</internalNodes>\n          <leafValues>\n            6.1423242092132568e-01 2.4822120368480682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 258 7.3073059320449829e-04</internalNodes>\n          <leafValues>\n            5.7049518823623657e-01 2.3219659924507141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 259 6.4045301405712962e-04</internalNodes>\n          <leafValues>\n            2.1122519671916962e-01 5.8149331808090210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 260 4.5424019917845726e-03</internalNodes>\n          <leafValues>\n            2.9504820704460144e-01 5.8663117885589600e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 261 9.2477443104144186e-05</internalNodes>\n          <leafValues>\n            2.9909908771514893e-01 5.7913267612457275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 262 -8.6603146046400070e-03</internalNodes>\n          <leafValues>\n            2.8130298852920532e-01 5.6355422735214233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 263 8.0515816807746887e-03</internalNodes>\n          <leafValues>\n            3.5353690385818481e-01 6.0547572374343872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 264 4.3835240649059415e-04</internalNodes>\n          <leafValues>\n            5.5965322256088257e-01 2.7315109968185425e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 265 -9.8168973636347800e-05</internalNodes>\n          <leafValues>\n            5.9780317544937134e-01 3.6385610699653625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 266 -1.1298790341243148e-03</internalNodes>\n          <leafValues>\n            2.7552521228790283e-01 5.4327291250228882e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 267 6.4356150105595589e-03</internalNodes>\n          <leafValues>\n            4.3056419491767883e-01 7.0698332786560059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 268 -5.6829329580068588e-02</internalNodes>\n          <leafValues>\n            2.4952429533004761e-01 5.2949970960617065e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 269 4.0668169967830181e-03</internalNodes>\n          <leafValues>\n            5.4785531759262085e-01 2.4977239966392517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 270 4.8164798499783501e-05</internalNodes>\n          <leafValues>\n            3.9386010169982910e-01 5.7063561677932739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 271 6.1795017682015896e-03</internalNodes>\n          <leafValues>\n            4.4076061248779297e-01 7.3947668075561523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 272 6.4985752105712891e-03</internalNodes>\n          <leafValues>\n            5.4452431201934814e-01 2.4791529774665833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 273 -1.0211090557277203e-03</internalNodes>\n          <leafValues>\n            2.5447669625282288e-01 5.3389710187911987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 274 -5.4247528314590454e-03</internalNodes>\n          <leafValues>\n            2.7188581228256226e-01 5.3240692615509033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 275 -1.0559899965301156e-03</internalNodes>\n          <leafValues>\n            3.1782880425453186e-01 5.5345088243484497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 276 6.6465808777138591e-04</internalNodes>\n          <leafValues>\n            4.2842191457748413e-01 6.5581941604614258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 277 -2.7524109464138746e-04</internalNodes>\n          <leafValues>\n            5.9028607606887817e-01 3.8102629780769348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 278 4.2293202131986618e-03</internalNodes>\n          <leafValues>\n            3.8164898753166199e-01 5.7093858718872070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 279 -3.2868210691958666e-03</internalNodes>\n          <leafValues>\n            1.7477439343929291e-01 5.2595442533493042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 280 1.5611879643984139e-04</internalNodes>\n          <leafValues>\n            3.6017221212387085e-01 5.7256120443344116e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 281 -7.3621381488919724e-06</internalNodes>\n          <leafValues>\n            5.4018580913543701e-01 3.0444970726966858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 282 -1.4767250046133995e-02</internalNodes>\n          <leafValues>\n            3.2207700610160828e-01 5.5734348297119141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 283 2.4489590898156166e-02</internalNodes>\n          <leafValues>\n            4.3015280365943909e-01 6.5188127756118774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 284 -3.7652091123163700e-04</internalNodes>\n          <leafValues>\n            3.5645830631256104e-01 5.5982369184494019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 285 7.3657688517414499e-06</internalNodes>\n          <leafValues>\n            3.4907829761505127e-01 5.5618977546691895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 286 -1.5099939890205860e-02</internalNodes>\n          <leafValues>\n            1.7762720584869385e-01 5.3352999687194824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 287 -3.8316650316119194e-03</internalNodes>\n          <leafValues>\n            6.1496877670288086e-01 4.2213940620422363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 288 1.6925400123000145e-02</internalNodes>\n          <leafValues>\n            5.4130148887634277e-01 2.1665850281715393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 289 -3.0477850232273340e-03</internalNodes>\n          <leafValues>\n            6.4494907855987549e-01 4.3546178936958313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 290 3.2140589319169521e-03</internalNodes>\n          <leafValues>\n            5.4001551866531372e-01 3.5232171416282654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 291 -4.0023201145231724e-03</internalNodes>\n          <leafValues>\n            2.7745240926742554e-01 5.3384172916412354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 292 7.4182129465043545e-03</internalNodes>\n          <leafValues>\n            5.6767392158508301e-01 3.7028178572654724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 293 -8.8764587417244911e-03</internalNodes>\n          <leafValues>\n            7.7492219209671021e-01 4.5836889743804932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 294 2.7311739977449179e-03</internalNodes>\n          <leafValues>\n            5.3387218713760376e-01 3.9966610074043274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 295 -2.5082379579544067e-03</internalNodes>\n          <leafValues>\n            5.6119632720947266e-01 3.7774989008903503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 296 -8.0541074275970459e-03</internalNodes>\n          <leafValues>\n            2.9152289032936096e-01 5.1791828870773315e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 297 -9.7938813269138336e-04</internalNodes>\n          <leafValues>\n            5.5364328622817993e-01 3.7001928687095642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 298 -5.8745909482240677e-03</internalNodes>\n          <leafValues>\n            3.7543910741806030e-01 5.6793761253356934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 299 -4.4936719350516796e-03</internalNodes>\n          <leafValues>\n            7.0196992158889771e-01 4.4809499382972717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 300 -5.4389229044318199e-03</internalNodes>\n          <leafValues>\n            2.3103649914264679e-01 5.3133869171142578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 301 -7.5094640487805009e-04</internalNodes>\n          <leafValues>\n            5.8648687601089478e-01 4.1293430328369141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 302 1.4528800420521293e-05</internalNodes>\n          <leafValues>\n            3.7324070930480957e-01 5.6196212768554688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 303 4.0758069604635239e-02</internalNodes>\n          <leafValues>\n            5.3120911121368408e-01 2.7205219864845276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 304 6.6505931317806244e-03</internalNodes>\n          <leafValues>\n            4.7100159525871277e-01 6.6934937238693237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 305 4.5759351924061775e-03</internalNodes>\n          <leafValues>\n            5.1678192615509033e-01 1.6372759640216827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 306 6.5269311890006065e-03</internalNodes>\n          <leafValues>\n            5.3976088762283325e-01 2.9385319352149963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 307 -1.3660379685461521e-02</internalNodes>\n          <leafValues>\n            7.0864880084991455e-01 4.5322000980377197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 308 2.7358869090676308e-02</internalNodes>\n          <leafValues>\n            5.2064812183380127e-01 3.5892319679260254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 309 6.2197551596909761e-04</internalNodes>\n          <leafValues>\n            3.5070759057998657e-01 5.4411232471466064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 310 -3.3077080734074116e-03</internalNodes>\n          <leafValues>\n            5.8595228195190430e-01 4.0248918533325195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 311 -1.0631109587848186e-02</internalNodes>\n          <leafValues>\n            6.7432671785354614e-01 4.4226029515266418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 312 1.9441649317741394e-02</internalNodes>\n          <leafValues>\n            5.2827161550521851e-01 1.7979049682617188e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>71</maxWeakCount>\n      <stageThreshold>3.4554111480712891e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 313 -5.5052167735993862e-03</internalNodes>\n          <leafValues>\n            5.9147310256958008e-01 2.6265591382980347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 314 1.9562279339879751e-03</internalNodes>\n          <leafValues>\n            2.3125819861888885e-01 5.7416272163391113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 315 -8.8924784213304520e-03</internalNodes>\n          <leafValues>\n            1.6565300524234772e-01 5.6266540288925171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 316 8.3638377487659454e-02</internalNodes>\n          <leafValues>\n            5.4234498739242554e-01 1.9572949409484863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 317 1.2282270472496748e-03</internalNodes>\n          <leafValues>\n            3.4179040789604187e-01 5.9925037622451782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 318 5.7629169896245003e-03</internalNodes>\n          <leafValues>\n            3.7195819616317749e-01 6.0799038410186768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 319 -1.6417410224676132e-03</internalNodes>\n          <leafValues>\n            2.5774860382080078e-01 5.5769157409667969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 320 3.4113149158656597e-03</internalNodes>\n          <leafValues>\n            2.9507490992546082e-01 5.5141717195510864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 321 -1.1069320142269135e-02</internalNodes>\n          <leafValues>\n            7.5693589448928833e-01 4.4770789146423340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 322 3.4865971654653549e-02</internalNodes>\n          <leafValues>\n            5.5837088823318481e-01 2.6696211099624634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 323 6.5701099811121821e-04</internalNodes>\n          <leafValues>\n            5.6273132562637329e-01 2.9888901114463806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 324 -2.4339130148291588e-02</internalNodes>\n          <leafValues>\n            2.7711850404739380e-01 5.1088631153106689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 325 5.9435202274471521e-04</internalNodes>\n          <leafValues>\n            5.5806517601013184e-01 3.1203418970108032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 326 2.2971509024500847e-03</internalNodes>\n          <leafValues>\n            3.3302500844001770e-01 5.6790757179260254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 327 -3.7801829166710377e-03</internalNodes>\n          <leafValues>\n            2.9905349016189575e-01 5.3448081016540527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 328 -1.3420669734477997e-01</internalNodes>\n          <leafValues>\n            1.4638589322566986e-01 5.3925681114196777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 329 7.5224548345431685e-04</internalNodes>\n          <leafValues>\n            3.7469539046287537e-01 5.6927347183227539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 330 -4.0545541793107986e-02</internalNodes>\n          <leafValues>\n            2.7547478675842285e-01 5.4842978715896606e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 331 1.2572970008477569e-03</internalNodes>\n          <leafValues>\n            3.7445840239524841e-01 5.7560759782791138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 332 -7.4249948374927044e-03</internalNodes>\n          <leafValues>\n            7.5138592720031738e-01 4.7282311320304871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 333 5.0908129196614027e-04</internalNodes>\n          <leafValues>\n            5.4048967361450195e-01 2.9323211312294006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 334 -1.2808450264856219e-03</internalNodes>\n          <leafValues>\n            6.1697798967361450e-01 4.2733490467071533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 335 -1.8348860321566463e-03</internalNodes>\n          <leafValues>\n            2.0484960079193115e-01 5.2064722776412964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 336 2.7484869584441185e-02</internalNodes>\n          <leafValues>\n            5.2529847621917725e-01 1.6755220293998718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 337 2.2372419480234385e-03</internalNodes>\n          <leafValues>\n            5.2677828073501587e-01 2.7776581048965454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 338 -8.8635291904211044e-03</internalNodes>\n          <leafValues>\n            6.9545578956604004e-01 4.8120489716529846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 339 4.1753971017897129e-03</internalNodes>\n          <leafValues>\n            4.2918878793716431e-01 6.3491958379745483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 340 -1.7098189564421773e-03</internalNodes>\n          <leafValues>\n            2.9305368661880493e-01 5.3612488508224487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 341 6.5328548662364483e-03</internalNodes>\n          <leafValues>\n            4.4953250885009766e-01 7.4096941947937012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 342 -9.5372907817363739e-03</internalNodes>\n          <leafValues>\n            3.1491199135780334e-01 5.4165017604827881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 343 2.5310989469289780e-02</internalNodes>\n          <leafValues>\n            5.1218920946121216e-01 1.3117079436779022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 344 3.6460969597101212e-02</internalNodes>\n          <leafValues>\n            5.1759117841720581e-01 2.5913399457931519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 345 2.0854329690337181e-02</internalNodes>\n          <leafValues>\n            5.1371401548385620e-01 1.5823160111904144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 346 -8.7207747856155038e-04</internalNodes>\n          <leafValues>\n            5.5743098258972168e-01 4.3989789485931396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 347 -1.5227000403683633e-05</internalNodes>\n          <leafValues>\n            5.5489408969879150e-01 3.7080699205398560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 348 -8.4316509310156107e-04</internalNodes>\n          <leafValues>\n            3.3874198794364929e-01 5.5542111396789551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 349 3.6037859972566366e-03</internalNodes>\n          <leafValues>\n            5.3580617904663086e-01 3.4111711382865906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 350 -6.8057891912758350e-03</internalNodes>\n          <leafValues>\n            6.1252027750015259e-01 4.3458628654479980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 351 -4.7021660953760147e-02</internalNodes>\n          <leafValues>\n            2.3581659793853760e-01 5.1937389373779297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 352 -3.6954108625650406e-02</internalNodes>\n          <leafValues>\n            7.3231112957000732e-01 4.7609439492225647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 353 1.0439479956403375e-03</internalNodes>\n          <leafValues>\n            5.4194551706314087e-01 3.4113308787345886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 354 -2.1050689974799752e-04</internalNodes>\n          <leafValues>\n            2.8216940164566040e-01 5.5549472570419312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 355 -8.0831587314605713e-02</internalNodes>\n          <leafValues>\n            9.1299301385879517e-01 4.6974349021911621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 356 -3.6579059087671340e-04</internalNodes>\n          <leafValues>\n            6.0226702690124512e-01 3.9782929420471191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 357 -1.2545920617412776e-04</internalNodes>\n          <leafValues>\n            5.6132131814956665e-01 3.8455399870872498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 358 -6.8786486983299255e-02</internalNodes>\n          <leafValues>\n            2.2616119682788849e-01 5.3004968166351318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 359 1.2415789999067783e-02</internalNodes>\n          <leafValues>\n            4.0756919980049133e-01 5.8288121223449707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 360 -4.7174817882478237e-03</internalNodes>\n          <leafValues>\n            2.8272539377212524e-01 5.2677577733993530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 361 3.8136858493089676e-02</internalNodes>\n          <leafValues>\n            5.0747412443161011e-01 1.0236159712076187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 362 -2.8168049175292253e-03</internalNodes>\n          <leafValues>\n            6.1690068244934082e-01 4.3596929311752319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 363 8.1303603947162628e-03</internalNodes>\n          <leafValues>\n            4.5244330167770386e-01 7.6060950756072998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 364 6.0056019574403763e-03</internalNodes>\n          <leafValues>\n            5.2404087781906128e-01 1.8597120046615601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 365 1.9139319658279419e-02</internalNodes>\n          <leafValues>\n            5.2093791961669922e-01 2.3320719599723816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 366 1.6445759683847427e-02</internalNodes>\n          <leafValues>\n            5.4507029056549072e-01 3.2642349600791931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 367 -3.7356890738010406e-02</internalNodes>\n          <leafValues>\n            6.9990468025207520e-01 4.5332419872283936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 368 -1.9727900624275208e-02</internalNodes>\n          <leafValues>\n            2.6536649465560913e-01 5.4128098487854004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 369 6.6972579807043076e-03</internalNodes>\n          <leafValues>\n            4.4805660843849182e-01 7.1386522054672241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 370 7.4457528535276651e-04</internalNodes>\n          <leafValues>\n            4.2313501238822937e-01 5.4713201522827148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 371 1.1790640419349074e-03</internalNodes>\n          <leafValues>\n            5.3417021036148071e-01 3.1304550170898438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 372 3.4980610013008118e-02</internalNodes>\n          <leafValues>\n            5.1186597347259521e-01 3.4305301308631897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 373 5.6859792675822973e-04</internalNodes>\n          <leafValues>\n            3.5321870446205139e-01 5.4686397314071655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 374 -1.1340649798512459e-02</internalNodes>\n          <leafValues>\n            2.8423538804054260e-01 5.3487008810043335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 375 -6.6228108480572701e-03</internalNodes>\n          <leafValues>\n            6.8836402893066406e-01 4.4926649332046509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 376 -8.0160330981016159e-03</internalNodes>\n          <leafValues>\n            1.7098939418792725e-01 5.2243089675903320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 377 1.4206819469109178e-03</internalNodes>\n          <leafValues>\n            5.2908462285995483e-01 2.9933831095695496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 378 -2.7801711112260818e-03</internalNodes>\n          <leafValues>\n            6.4988541603088379e-01 4.4604998826980591e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 379 -1.4747589593753219e-03</internalNodes>\n          <leafValues>\n            3.2604381442070007e-01 5.3881132602691650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 380 -2.3830339312553406e-02</internalNodes>\n          <leafValues>\n            7.5289410352706909e-01 4.8012199997901917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 381 6.9369790144264698e-03</internalNodes>\n          <leafValues>\n            5.3351658582687378e-01 3.2614278793334961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 382 8.2806255668401718e-03</internalNodes>\n          <leafValues>\n            4.5803940296173096e-01 5.7378298044204712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 383 -1.0439500212669373e-02</internalNodes>\n          <leafValues>\n            2.5923201441764832e-01 5.2338278293609619e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>80</maxWeakCount>\n      <stageThreshold>3.9107288360595703e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 384 7.2006587870419025e-03</internalNodes>\n          <leafValues>\n            3.2588860392570496e-01 6.8498080968856812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 385 -2.8593589086085558e-03</internalNodes>\n          <leafValues>\n            5.8388811349868774e-01 2.5378298759460449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 386 6.8580528022721410e-04</internalNodes>\n          <leafValues>\n            5.7080817222595215e-01 2.8124240040779114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 387 7.9580191522836685e-03</internalNodes>\n          <leafValues>\n            2.5010511279106140e-01 5.5442607402801514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 388 -1.2124150525778532e-03</internalNodes>\n          <leafValues>\n            2.3853680491447449e-01 5.4333502054214478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 389 7.9426132142543793e-03</internalNodes>\n          <leafValues>\n            3.9550709724426270e-01 6.2207579612731934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 390 2.4630590341985226e-03</internalNodes>\n          <leafValues>\n            5.6397080421447754e-01 2.9923579096794128e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 391 -6.0396599583327770e-03</internalNodes>\n          <leafValues>\n            2.1865129470825195e-01 5.4116767644882202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 392 -1.2988339876756072e-03</internalNodes>\n          <leafValues>\n            2.3507060110569000e-01 5.3645849227905273e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 393 2.2299369447864592e-04</internalNodes>\n          <leafValues>\n            3.8041129708290100e-01 5.7296061515808105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 394 1.4654280385002494e-03</internalNodes>\n          <leafValues>\n            2.5101679563522339e-01 5.2582687139511108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 395 -8.1210042117163539e-04</internalNodes>\n          <leafValues>\n            5.9928238391876221e-01 3.8511589169502258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 396 -1.3836020370945334e-03</internalNodes>\n          <leafValues>\n            5.6813961267471313e-01 3.6365869641304016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 397 -2.7936449274420738e-02</internalNodes>\n          <leafValues>\n            1.4913170039653778e-01 5.3775602579116821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 398 -4.6919551095925272e-04</internalNodes>\n          <leafValues>\n            3.6924299597740173e-01 5.5724847316741943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 399 -4.9829659983515739e-03</internalNodes>\n          <leafValues>\n            6.7585092782974243e-01 4.5325040817260742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 400 1.8815309740602970e-03</internalNodes>\n          <leafValues>\n            5.3680229187011719e-01 2.9325398802757263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 401 -1.9067550078034401e-02</internalNodes>\n          <leafValues>\n            1.6493770480155945e-01 5.3300672769546509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 402 -4.6906559728085995e-03</internalNodes>\n          <leafValues>\n            1.9639259576797485e-01 5.1193618774414062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 403 5.9777139686048031e-03</internalNodes>\n          <leafValues>\n            4.6711719036102295e-01 7.0083981752395630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 404 -3.3303130418062210e-02</internalNodes>\n          <leafValues>\n            1.1554169654846191e-01 5.1041620969772339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 405 9.0744107961654663e-02</internalNodes>\n          <leafValues>\n            5.1496601104736328e-01 1.3061730563640594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 406 9.3555898638442159e-04</internalNodes>\n          <leafValues>\n            3.6054810881614685e-01 5.4398590326309204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 407 1.4901650138199329e-02</internalNodes>\n          <leafValues>\n            4.8862120509147644e-01 7.6875698566436768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 408 6.1594118596985936e-04</internalNodes>\n          <leafValues>\n            5.3568130731582642e-01 3.2409390807151794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 409 -5.0670988857746124e-02</internalNodes>\n          <leafValues>\n            1.8486219644546509e-01 5.2304041385650635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 410 6.8665749859064817e-04</internalNodes>\n          <leafValues>\n            3.8405799865722656e-01 5.5179458856582642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 411 8.3712432533502579e-03</internalNodes>\n          <leafValues>\n            4.2885640263557434e-01 6.1317539215087891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 412 -1.2953069526702166e-03</internalNodes>\n          <leafValues>\n            2.9136741161346436e-01 5.2807378768920898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 413 -4.1941680014133453e-02</internalNodes>\n          <leafValues>\n            7.5547999143600464e-01 4.8560309410095215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 414 -2.3529380559921265e-02</internalNodes>\n          <leafValues>\n            2.8382799029350281e-01 5.2560812234878540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 415 4.0857449173927307e-02</internalNodes>\n          <leafValues>\n            4.8709350824356079e-01 6.2772971391677856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 416 -2.5406869128346443e-02</internalNodes>\n          <leafValues>\n            7.0997077226638794e-01 4.5750290155410767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 417 -4.1415440500713885e-04</internalNodes>\n          <leafValues>\n            4.0308868885040283e-01 5.4694122076034546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 418 2.1824119612574577e-02</internalNodes>\n          <leafValues>\n            4.5020240545272827e-01 6.7687010765075684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 419 1.4114039950072765e-02</internalNodes>\n          <leafValues>\n            5.4428607225418091e-01 3.7917000055313110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 420 6.7214590671937913e-05</internalNodes>\n          <leafValues>\n            4.2004638910293579e-01 5.8734762668609619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 421 -7.9417638480663300e-03</internalNodes>\n          <leafValues>\n            3.7925618886947632e-01 5.5852657556533813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 422 -7.2144409641623497e-03</internalNodes>\n          <leafValues>\n            7.2531038522720337e-01 4.6035489439964294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 423 2.5817339774221182e-03</internalNodes>\n          <leafValues>\n            4.6933019161224365e-01 5.9002387523651123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 424 1.3409319519996643e-01</internalNodes>\n          <leafValues>\n            5.1492130756378174e-01 1.8088449537754059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 425 2.2962710354477167e-03</internalNodes>\n          <leafValues>\n            5.3997439146041870e-01 3.7178671360015869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 426 -2.1575849968940020e-03</internalNodes>\n          <leafValues>\n            2.4084959924221039e-01 5.1488637924194336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 427 -4.9196188338100910e-03</internalNodes>\n          <leafValues>\n            6.5735882520675659e-01 4.7387400269508362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 428 1.6267469618469477e-03</internalNodes>\n          <leafValues>\n            4.1928219795227051e-01 6.3031142950057983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 429 3.3413388882763684e-04</internalNodes>\n          <leafValues>\n            5.5402982234954834e-01 3.7021011114120483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 430 -2.6698080822825432e-02</internalNodes>\n          <leafValues>\n            1.7109179496765137e-01 5.1014107465744019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 431 -3.0561879277229309e-02</internalNodes>\n          <leafValues>\n            1.9042180478572845e-01 5.1687937974929810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 432 2.8511548880487680e-03</internalNodes>\n          <leafValues>\n            4.4475069642066956e-01 6.3138538599014282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 433 -3.6211479455232620e-02</internalNodes>\n          <leafValues>\n            2.4907270073890686e-01 5.3773492574691772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 434 -2.4115189444273710e-03</internalNodes>\n          <leafValues>\n            5.3812432289123535e-01 3.6642369627952576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 435 -7.7253201743587852e-04</internalNodes>\n          <leafValues>\n            5.5302321910858154e-01 3.5415500402450562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 436 2.9481729143299162e-04</internalNodes>\n          <leafValues>\n            4.1326990723609924e-01 5.6672430038452148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 437 -6.2334560789167881e-03</internalNodes>\n          <leafValues>\n            9.8787233233451843e-02 5.1986688375473022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 438 -2.6274729520082474e-02</internalNodes>\n          <leafValues>\n            9.1127492487430573e-02 5.0281071662902832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 439 5.3212260827422142e-03</internalNodes>\n          <leafValues>\n            4.7266489267349243e-01 6.2227207422256470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 440 -4.1129058226943016e-03</internalNodes>\n          <leafValues>\n            2.1574570238590240e-01 5.1378047466278076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 441 3.2457809429615736e-03</internalNodes>\n          <leafValues>\n            5.4107707738876343e-01 3.7217769026756287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 442 -1.6359709203243256e-02</internalNodes>\n          <leafValues>\n            7.7878749370574951e-01 4.6852919459342957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 443 3.2166109303943813e-04</internalNodes>\n          <leafValues>\n            5.4789870977401733e-01 4.2403739690780640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 444 6.4452440710738301e-04</internalNodes>\n          <leafValues>\n            5.3305608034133911e-01 3.5013249516487122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 445 -7.8909732401371002e-03</internalNodes>\n          <leafValues>\n            6.9235211610794067e-01 4.7265690565109253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 446 4.8336211591959000e-02</internalNodes>\n          <leafValues>\n            5.0559002161026001e-01 7.5749203562736511e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 447 -7.5178127735853195e-04</internalNodes>\n          <leafValues>\n            3.7837418913841248e-01 5.5385738611221313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 448 -2.4953910615295172e-03</internalNodes>\n          <leafValues>\n            3.0816510319709778e-01 5.3596121072769165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 449 -2.2385010961443186e-03</internalNodes>\n          <leafValues>\n            6.6339588165283203e-01 4.6493428945541382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 450 -1.7988430336117744e-03</internalNodes>\n          <leafValues>\n            6.5968447923660278e-01 4.3471878767013550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 451 8.7860915809869766e-03</internalNodes>\n          <leafValues>\n            5.2318328619003296e-01 2.3155799508094788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 452 3.6715380847454071e-03</internalNodes>\n          <leafValues>\n            5.2042502164840698e-01 2.9773768782615662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 453 -3.5336449742317200e-02</internalNodes>\n          <leafValues>\n            7.2388780117034912e-01 4.8615050315856934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 454 -6.9189240457490087e-04</internalNodes>\n          <leafValues>\n            3.1050220131874084e-01 5.2298247814178467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 455 -3.3946109469980001e-03</internalNodes>\n          <leafValues>\n            3.1389680504798889e-01 5.2101737260818481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 456 9.8569283727556467e-04</internalNodes>\n          <leafValues>\n            4.5365801453590393e-01 6.5850979089736938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 457 -5.0163101404905319e-02</internalNodes>\n          <leafValues>\n            1.8044540286064148e-01 5.1989167928695679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 458 -2.2367259953171015e-03</internalNodes>\n          <leafValues>\n            7.2557020187377930e-01 4.6513590216636658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 459 7.4326287722215056e-04</internalNodes>\n          <leafValues>\n            4.4129210710525513e-01 5.8985459804534912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 460 -9.3485182151198387e-04</internalNodes>\n          <leafValues>\n            3.5000529885292053e-01 5.3660178184509277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 461 1.7497939988970757e-02</internalNodes>\n          <leafValues>\n            4.9121949076652527e-01 8.3152848482131958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 462 -1.5200000489130616e-03</internalNodes>\n          <leafValues>\n            3.5702759027481079e-01 5.3705602884292603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 463 7.8003940870985389e-04</internalNodes>\n          <leafValues>\n            4.3537721037864685e-01 5.9673351049423218e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>103</maxWeakCount>\n      <stageThreshold>5.0610481262207031e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 464 -9.9945552647113800e-03</internalNodes>\n          <leafValues>\n            6.1625832319259644e-01 3.0545330047607422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 465 -1.1085229925811291e-03</internalNodes>\n          <leafValues>\n            5.8182948827743530e-01 3.1555780768394470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 466 1.0364380432292819e-03</internalNodes>\n          <leafValues>\n            2.5520521402359009e-01 5.6929117441177368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 467 6.8211311008781195e-04</internalNodes>\n          <leafValues>\n            3.6850899457931519e-01 5.9349310398101807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 468 -6.8057340104132891e-04</internalNodes>\n          <leafValues>\n            2.3323920369148254e-01 5.4747921228408813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 469 2.6068789884448051e-04</internalNodes>\n          <leafValues>\n            3.2574570178985596e-01 5.6675457954406738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 470 5.1607372006401420e-04</internalNodes>\n          <leafValues>\n            3.7447169423103333e-01 5.8454728126525879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 471 8.5007521556690335e-04</internalNodes>\n          <leafValues>\n            3.4203711152076721e-01 5.5228072404861450e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 472 -1.8607829697430134e-03</internalNodes>\n          <leafValues>\n            2.8044199943542480e-01 5.3754240274429321e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 473 -1.5033970121294260e-03</internalNodes>\n          <leafValues>\n            2.5790509581565857e-01 5.4989522695541382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 474 2.3478909861296415e-03</internalNodes>\n          <leafValues>\n            4.1751560568809509e-01 6.3137108087539673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 475 -2.8880240279249847e-04</internalNodes>\n          <leafValues>\n            5.8651697635650635e-01 4.0526661276817322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 476 8.9405477046966553e-03</internalNodes>\n          <leafValues>\n            5.2111411094665527e-01 2.3186540603637695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 477 -1.9327739253640175e-02</internalNodes>\n          <leafValues>\n            2.7534329891204834e-01 5.2415257692337036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 478 -2.0202060113660991e-04</internalNodes>\n          <leafValues>\n            5.7229787111282349e-01 3.6771959066390991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 479 2.1179069299250841e-03</internalNodes>\n          <leafValues>\n            4.4661080837249756e-01 5.5424308776855469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 480 -1.7743760254234076e-03</internalNodes>\n          <leafValues>\n            2.8132531046867371e-01 5.3009599447250366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 481 4.2234458960592747e-03</internalNodes>\n          <leafValues>\n            4.3997099995613098e-01 5.7954281568527222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 482 -1.4375220052897930e-02</internalNodes>\n          <leafValues>\n            2.9811179637908936e-01 5.2920591831207275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 483 -1.5349180437624454e-02</internalNodes>\n          <leafValues>\n            7.7052152156829834e-01 4.7481718659400940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 484 1.5152279956964776e-05</internalNodes>\n          <leafValues>\n            3.7188440561294556e-01 5.5768972635269165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 485 -9.1293919831514359e-03</internalNodes>\n          <leafValues>\n            3.6151960492134094e-01 5.2867668867111206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 486 2.2512159775942564e-03</internalNodes>\n          <leafValues>\n            5.3647047281265259e-01 3.4862980246543884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 487 -4.9696918576955795e-03</internalNodes>\n          <leafValues>\n            6.9276517629623413e-01 4.6768361330032349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 488 -1.2829010374844074e-02</internalNodes>\n          <leafValues>\n            7.7121537923812866e-01 4.6607351303100586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 489 -9.3660065904259682e-03</internalNodes>\n          <leafValues>\n            3.3749839663505554e-01 5.3512877225875854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 490 3.2452319283038378e-03</internalNodes>\n          <leafValues>\n            5.3251898288726807e-01 3.2896101474761963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 491 -1.1723560281097889e-02</internalNodes>\n          <leafValues>\n            6.8376529216766357e-01 4.7543001174926758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 492 2.9257940695970319e-05</internalNodes>\n          <leafValues>\n            3.5720878839492798e-01 5.3605020046234131e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 493 -2.2244219508138485e-05</internalNodes>\n          <leafValues>\n            5.5414271354675293e-01 3.5520640015602112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 494 5.0881509669125080e-03</internalNodes>\n          <leafValues>\n            5.0708442926406860e-01 1.2564620375633240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 495 2.7429679408669472e-02</internalNodes>\n          <leafValues>\n            5.2695602178573608e-01 1.6258180141448975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 496 -6.4142867922782898e-03</internalNodes>\n          <leafValues>\n            7.1455889940261841e-01 4.5841971039772034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 497 3.3479959238320589e-03</internalNodes>\n          <leafValues>\n            5.3986120223999023e-01 3.4946969151496887e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 498 -8.2635492086410522e-02</internalNodes>\n          <leafValues>\n            2.4391929805278778e-01 5.1602262258529663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 499 1.0261740535497665e-03</internalNodes>\n          <leafValues>\n            3.8868919014930725e-01 5.7679080963134766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 500 -1.6307090409100056e-03</internalNodes>\n          <leafValues>\n            3.3894580602645874e-01 5.3477007150650024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 501 2.4546680506318808e-03</internalNodes>\n          <leafValues>\n            4.6014139056205750e-01 6.3872468471527100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 502 -9.9476519972085953e-04</internalNodes>\n          <leafValues>\n            5.7698792219161987e-01 4.1203960776329041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 503 1.5409190207719803e-02</internalNodes>\n          <leafValues>\n            4.8787090182304382e-01 7.0898222923278809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 504 1.1784400558099151e-03</internalNodes>\n          <leafValues>\n            5.2635532617568970e-01 2.8952449560165405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 505 -2.7701919898390770e-02</internalNodes>\n          <leafValues>\n            1.4988289773464203e-01 5.2196067571640015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 506 -2.9505399987101555e-02</internalNodes>\n          <leafValues>\n            2.4893319234251976e-02 4.9998161196708679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 507 4.5159430010244250e-04</internalNodes>\n          <leafValues>\n            5.4646229743957520e-01 4.0296629071235657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 508 7.1772639639675617e-03</internalNodes>\n          <leafValues>\n            4.2710569500923157e-01 5.8662968873977661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 509 -7.4182048439979553e-02</internalNodes>\n          <leafValues>\n            6.8741792440414429e-01 4.9190279841423035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 510 -1.7254160717129707e-02</internalNodes>\n          <leafValues>\n            3.3706760406494141e-01 5.3487390279769897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 511 1.4851559884846210e-02</internalNodes>\n          <leafValues>\n            4.6267929673194885e-01 6.1299049854278564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 512 1.0002000257372856e-02</internalNodes>\n          <leafValues>\n            5.3461229801177979e-01 3.4234538674354553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 513 2.0138120744377375e-03</internalNodes>\n          <leafValues>\n            4.6438300609588623e-01 5.8243042230606079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 514 1.5135470312088728e-03</internalNodes>\n          <leafValues>\n            5.1963961124420166e-01 2.8561499714851379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 515 3.1381431035697460e-03</internalNodes>\n          <leafValues>\n            4.8381629586219788e-01 5.9585297107696533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 516 -5.1450440660119057e-03</internalNodes>\n          <leafValues>\n            8.9203029870986938e-01 4.7414121031761169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 517 -4.4736708514392376e-03</internalNodes>\n          <leafValues>\n            2.0339429378509521e-01 5.3372788429260254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 518 1.9628470763564110e-03</internalNodes>\n          <leafValues>\n            4.5716339349746704e-01 6.7258632183074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 519 5.4260450415313244e-03</internalNodes>\n          <leafValues>\n            5.2711081504821777e-01 2.8456708788871765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 520 4.9611460417509079e-04</internalNodes>\n          <leafValues>\n            4.1383129358291626e-01 5.7185977697372437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 521 9.3728788197040558e-03</internalNodes>\n          <leafValues>\n            5.2251511812210083e-01 2.8048470616340637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 522 6.0500897234305739e-04</internalNodes>\n          <leafValues>\n            5.2367687225341797e-01 3.3145239949226379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 523 5.6792551185935736e-04</internalNodes>\n          <leafValues>\n            4.5310598611831665e-01 6.2769711017608643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 524 2.4644339457154274e-02</internalNodes>\n          <leafValues>\n            5.1308518648147583e-01 2.0171439647674561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 525 -1.0290450416505337e-02</internalNodes>\n          <leafValues>\n            7.7865952253341675e-01 4.8766410350799561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 526 2.0629419013857841e-03</internalNodes>\n          <leafValues>\n            4.2885988950729370e-01 5.8812642097473145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 527 -5.0519481301307678e-03</internalNodes>\n          <leafValues>\n            3.5239779949188232e-01 5.2860087156295776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 528 -5.7692620903253555e-03</internalNodes>\n          <leafValues>\n            6.8410861492156982e-01 4.5880940556526184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 529 -4.5789941214025021e-04</internalNodes>\n          <leafValues>\n            3.5655200481414795e-01 5.4859781265258789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 530 -7.5918837683275342e-04</internalNodes>\n          <leafValues>\n            3.3687931299209595e-01 5.2541971206665039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 531 -1.7737259622663260e-03</internalNodes>\n          <leafValues>\n            3.4221610426902771e-01 5.4540151357650757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 532 -8.5610467940568924e-03</internalNodes>\n          <leafValues>\n            6.5336120128631592e-01 4.4858568906784058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 533 1.7277270089834929e-03</internalNodes>\n          <leafValues>\n            5.3075802326202393e-01 3.9253529906272888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 534 -2.8199609369039536e-02</internalNodes>\n          <leafValues>\n            6.8574589490890503e-01 4.5885840058326721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 535 -1.7781109781935811e-03</internalNodes>\n          <leafValues>\n            4.0378510951995850e-01 5.3698569536209106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 536 3.3177141449414194e-04</internalNodes>\n          <leafValues>\n            5.3997987508773804e-01 3.7057501077651978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 537 2.6385399978607893e-03</internalNodes>\n          <leafValues>\n            4.6654370427131653e-01 6.4527308940887451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 538 -2.1183069329708815e-03</internalNodes>\n          <leafValues>\n            5.9147810935974121e-01 4.0646770596504211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 539 -1.4773289673030376e-02</internalNodes>\n          <leafValues>\n            3.6420381069183350e-01 5.2947628498077393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 540 -1.6815440729260445e-02</internalNodes>\n          <leafValues>\n            2.6642319560050964e-01 5.1449728012084961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 541 -6.3370140269398689e-03</internalNodes>\n          <leafValues>\n            6.7795312404632568e-01 4.8520979285240173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 542 -4.4560048991115764e-05</internalNodes>\n          <leafValues>\n            5.6139647960662842e-01 4.1530540585517883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 543 -1.0240620467811823e-03</internalNodes>\n          <leafValues>\n            5.9644782543182373e-01 4.5663040876388550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 544 -2.3161689750850201e-03</internalNodes>\n          <leafValues>\n            2.9761150479316711e-01 5.1881599426269531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 545 5.3217571973800659e-01</internalNodes>\n          <leafValues>\n            5.1878392696380615e-01 2.2026319801807404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 546 -1.6643050312995911e-01</internalNodes>\n          <leafValues>\n            1.8660229444503784e-01 5.0603431463241577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 547 1.1253529787063599e-01</internalNodes>\n          <leafValues>\n            5.2121251821517944e-01 1.1850229650735855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 548 9.3046864494681358e-03</internalNodes>\n          <leafValues>\n            4.5899370312690735e-01 6.8261492252349854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 549 -4.6255099587142467e-03</internalNodes>\n          <leafValues>\n            3.0799409747123718e-01 5.2250087261199951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 550 -1.1116469651460648e-01</internalNodes>\n          <leafValues>\n            2.1010440587997437e-01 5.0808018445968628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 551 -1.0888439603149891e-02</internalNodes>\n          <leafValues>\n            5.7653552293777466e-01 4.7904640436172485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 552 5.8564301580190659e-03</internalNodes>\n          <leafValues>\n            5.0651001930236816e-01 1.5635989606380463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 553 5.4854389280080795e-02</internalNodes>\n          <leafValues>\n            4.9669149518013000e-01 7.2305107116699219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 554 -1.1197339743375778e-02</internalNodes>\n          <leafValues>\n            2.1949790418148041e-01 5.0987982749938965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 555 4.4069071300327778e-03</internalNodes>\n          <leafValues>\n            4.7784018516540527e-01 6.7709028720855713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 556 -6.3665293157100677e-02</internalNodes>\n          <leafValues>\n            1.9363629817962646e-01 5.0810241699218750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 557 -9.8081491887569427e-03</internalNodes>\n          <leafValues>\n            5.9990632534027100e-01 4.8103410005569458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 558 -2.1717099007219076e-03</internalNodes>\n          <leafValues>\n            3.3383339643478394e-01 5.2354729175567627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 559 -1.3315520249307156e-02</internalNodes>\n          <leafValues>\n            6.6170698404312134e-01 4.9192130565643311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 560 2.5442079640924931e-03</internalNodes>\n          <leafValues>\n            4.4887441396713257e-01 6.0821849107742310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 561 1.2037839740514755e-02</internalNodes>\n          <leafValues>\n            5.4093921184539795e-01 3.2924321293830872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 562 -2.0701050758361816e-02</internalNodes>\n          <leafValues>\n            6.8191200494766235e-01 4.5949959754943848e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 563 2.7608279138803482e-02</internalNodes>\n          <leafValues>\n            4.6307921409606934e-01 5.7672828435897827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 564 1.2370620388537645e-03</internalNodes>\n          <leafValues>\n            5.1653790473937988e-01 2.6350161433219910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 565 -3.7669338285923004e-02</internalNodes>\n          <leafValues>\n            2.5363931059837341e-01 5.2789801359176636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 566 -1.8057259730994701e-03</internalNodes>\n          <leafValues>\n            3.9851561188697815e-01 5.5175000429153442e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>111</maxWeakCount>\n      <stageThreshold>5.4620071411132812e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 567 4.4299028813838959e-03</internalNodes>\n          <leafValues>\n            2.8910180926322937e-01 6.3352262973785400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 568 -2.3813319858163595e-03</internalNodes>\n          <leafValues>\n            6.2117892503738403e-01 3.4774878621101379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 569 2.2915711160749197e-03</internalNodes>\n          <leafValues>\n            2.2544120252132416e-01 5.5821180343627930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 570 9.9457940086722374e-04</internalNodes>\n          <leafValues>\n            3.7117108702659607e-01 5.9300708770751953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 571 7.7164667891338468e-04</internalNodes>\n          <leafValues>\n            5.6517201662063599e-01 3.3479958772659302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 572 -1.1386410333216190e-03</internalNodes>\n          <leafValues>\n            3.0691260099411011e-01 5.5086308717727661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 573 -1.6403039626311511e-04</internalNodes>\n          <leafValues>\n            5.7628279924392700e-01 3.6990478634834290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 574 2.9793529392918572e-05</internalNodes>\n          <leafValues>\n            2.6442441344261169e-01 5.4379111528396606e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 575 8.5774902254343033e-03</internalNodes>\n          <leafValues>\n            5.0511389970779419e-01 1.7957249283790588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 576 -2.6032689493149519e-04</internalNodes>\n          <leafValues>\n            5.8269691467285156e-01 4.4468268752098083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 577 -6.1404630541801453e-03</internalNodes>\n          <leafValues>\n            3.1138521432876587e-01 5.3469717502593994e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 578 -2.3086950182914734e-02</internalNodes>\n          <leafValues>\n            3.2779461145401001e-01 5.3311979770660400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 579 -1.4243650250136852e-02</internalNodes>\n          <leafValues>\n            7.3817098140716553e-01 4.5880630612373352e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 580 1.9487129524350166e-02</internalNodes>\n          <leafValues>\n            5.2566307783126831e-01 2.2744719684123993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 581 -9.6681108698248863e-04</internalNodes>\n          <leafValues>\n            5.5112308263778687e-01 3.8150069117546082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 582 3.1474709976464510e-03</internalNodes>\n          <leafValues>\n            5.4256367683410645e-01 2.5437268614768982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 583 -1.8026070029009134e-04</internalNodes>\n          <leafValues>\n            5.3801918029785156e-01 3.4063041210174561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 584 -6.0266260989010334e-03</internalNodes>\n          <leafValues>\n            3.0358019471168518e-01 5.4205721616744995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 585 4.4462960795499384e-04</internalNodes>\n          <leafValues>\n            3.9909970760345459e-01 5.6601101160049438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 586 2.2609760053455830e-03</internalNodes>\n          <leafValues>\n            5.5628067255020142e-01 3.9406880736351013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 587 5.1133058965206146e-02</internalNodes>\n          <leafValues>\n            4.6096539497375488e-01 7.1185618638992310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 588 -1.7786309123039246e-02</internalNodes>\n          <leafValues>\n            2.3161660134792328e-01 5.3221440315246582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 589 -4.9679628573358059e-03</internalNodes>\n          <leafValues>\n            2.3307719826698303e-01 5.1220291852951050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 590 2.0667689386755228e-03</internalNodes>\n          <leafValues>\n            4.6574440598487854e-01 6.4554882049560547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 591 7.4413768015801907e-03</internalNodes>\n          <leafValues>\n            5.1543921232223511e-01 2.3616339266300201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 592 -3.6277279723435640e-03</internalNodes>\n          <leafValues>\n            6.2197732925415039e-01 4.4766610860824585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 593 -5.3530759178102016e-03</internalNodes>\n          <leafValues>\n            1.8373550474643707e-01 5.1022082567214966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 594 1.4530919492244720e-01</internalNodes>\n          <leafValues>\n            5.1459872722625732e-01 1.5359309315681458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 595 2.4394490756094456e-03</internalNodes>\n          <leafValues>\n            5.3436601161956787e-01 3.6246618628501892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 596 -3.1283390708267689e-03</internalNodes>\n          <leafValues>\n            6.2150079011917114e-01 4.8455920815467834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 597 1.7940260004252195e-03</internalNodes>\n          <leafValues>\n            4.2992618680000305e-01 5.8241981267929077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 598 3.6253821104764938e-02</internalNodes>\n          <leafValues>\n            5.2603340148925781e-01 1.4394679665565491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 599 -5.1746722310781479e-03</internalNodes>\n          <leafValues>\n            3.5065388679504395e-01 5.2870452404022217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 600 6.5383297624066472e-04</internalNodes>\n          <leafValues>\n            4.8096409440040588e-01 6.1220401525497437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 601 -2.6480229571461678e-02</internalNodes>\n          <leafValues>\n            1.1393620073795319e-01 5.0455862283706665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 602 -3.0440660193562508e-03</internalNodes>\n          <leafValues>\n            6.3520950078964233e-01 4.7947341203689575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 603 3.6993520334362984e-03</internalNodes>\n          <leafValues>\n            5.1311182975769043e-01 2.4985109269618988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 604 -3.6762931267730892e-04</internalNodes>\n          <leafValues>\n            5.4213947057723999e-01 3.7095320224761963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 605 -4.1382260620594025e-02</internalNodes>\n          <leafValues>\n            1.8949599564075470e-01 5.0816917419433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 606 -1.0532729793339968e-03</internalNodes>\n          <leafValues>\n            6.4543670415878296e-01 4.7836089134216309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 607 -2.1648600231856108e-03</internalNodes>\n          <leafValues>\n            6.2150311470031738e-01 4.4998261332511902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 608 -5.6747748749330640e-04</internalNodes>\n          <leafValues>\n            3.7126109004020691e-01 5.4193347692489624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 609 1.7375840246677399e-01</internalNodes>\n          <leafValues>\n            5.0236439704895020e-01 1.2157420068979263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 610 -2.9049699660390615e-03</internalNodes>\n          <leafValues>\n            3.2402679324150085e-01 5.3818839788436890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 611 1.2299539521336555e-03</internalNodes>\n          <leafValues>\n            4.1655078530311584e-01 5.7034862041473389e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 612 -5.4329237900674343e-04</internalNodes>\n          <leafValues>\n            3.8540428876876831e-01 5.5475491285324097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 613 -8.3297258242964745e-03</internalNodes>\n          <leafValues>\n            2.2044940292835236e-01 5.0970828533172607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 614 -1.0417630255687982e-04</internalNodes>\n          <leafValues>\n            5.6070661544799805e-01 4.3030360341072083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 615 3.1204700469970703e-02</internalNodes>\n          <leafValues>\n            4.6216571331024170e-01 6.9820040464401245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 616 7.8943502157926559e-03</internalNodes>\n          <leafValues>\n            5.2695941925048828e-01 2.2690680623054504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 617 -4.3645310215651989e-03</internalNodes>\n          <leafValues>\n            6.3592231273651123e-01 4.5379561185836792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 618 7.6793059706687927e-03</internalNodes>\n          <leafValues>\n            5.2747678756713867e-01 2.7404838800430298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 619 -2.5431139394640923e-02</internalNodes>\n          <leafValues>\n            2.0385199785232544e-01 5.0717329978942871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 620 8.2000601105391979e-04</internalNodes>\n          <leafValues>\n            4.5874550938606262e-01 6.1198681592941284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 621 2.9284600168466568e-03</internalNodes>\n          <leafValues>\n            5.0712740421295166e-01 2.0282049477100372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 622 4.5256470912136137e-05</internalNodes>\n          <leafValues>\n            4.8121041059494019e-01 5.4308217763900757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 623 1.3158309739083052e-03</internalNodes>\n          <leafValues>\n            4.6258139610290527e-01 6.7793232202529907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 624 1.5870389761403203e-03</internalNodes>\n          <leafValues>\n            5.3862917423248291e-01 3.4314650297164917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 625 -2.1539660170674324e-02</internalNodes>\n          <leafValues>\n            2.5942500680685043e-02 5.0032228231430054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 626 1.4334480278193951e-02</internalNodes>\n          <leafValues>\n            5.2028447389602661e-01 1.5906329452991486e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 627 -8.3881383761763573e-03</internalNodes>\n          <leafValues>\n            7.2824811935424805e-01 4.6480441093444824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 628 9.1906841844320297e-03</internalNodes>\n          <leafValues>\n            5.5623567104339600e-01 3.9231911301612854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 629 -5.8453059755265713e-03</internalNodes>\n          <leafValues>\n            6.8033927679061890e-01 4.6291279792785645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 630 -5.4707799106836319e-02</internalNodes>\n          <leafValues>\n            2.5616711378097534e-01 5.2061259746551514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 631 9.1142775490880013e-03</internalNodes>\n          <leafValues>\n            5.1896202564239502e-01 3.0538770556449890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 632 -1.5575000084936619e-02</internalNodes>\n          <leafValues>\n            1.2950749695301056e-01 5.1690948009490967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 633 -1.2050600344082341e-04</internalNodes>\n          <leafValues>\n            5.7350981235504150e-01 4.2308250069618225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 634 1.2273970060050488e-03</internalNodes>\n          <leafValues>\n            5.2898782491683960e-01 4.0797919034957886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 635 -1.2186600361019373e-03</internalNodes>\n          <leafValues>\n            6.5756398439407349e-01 4.5744091272354126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 636 -3.3256649039685726e-03</internalNodes>\n          <leafValues>\n            3.6280471086502075e-01 5.1950198411941528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 637 -1.3288309797644615e-02</internalNodes>\n          <leafValues>\n            1.2842659652233124e-01 5.0434887409210205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 638 -3.3839771058410406e-03</internalNodes>\n          <leafValues>\n            6.2922400236129761e-01 4.7575059533119202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 639 -2.1954220533370972e-01</internalNodes>\n          <leafValues>\n            1.4877319335937500e-01 5.0650137662887573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 640 4.9111708067357540e-03</internalNodes>\n          <leafValues>\n            4.2561021447181702e-01 5.6658387184143066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 641 -1.8744950648397207e-04</internalNodes>\n          <leafValues>\n            4.0041440725326538e-01 5.5868571996688843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 642 -5.2178641781210899e-03</internalNodes>\n          <leafValues>\n            6.0091161727905273e-01 4.8127061128616333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 643 -1.1111519997939467e-03</internalNodes>\n          <leafValues>\n            3.5149338841438293e-01 5.2870899438858032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 644 4.4036400504410267e-03</internalNodes>\n          <leafValues>\n            4.6422758698463440e-01 5.9240859746932983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 645 1.2299499660730362e-01</internalNodes>\n          <leafValues>\n            5.0255292654037476e-01 6.9152481853961945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 646 -1.2313510291278362e-02</internalNodes>\n          <leafValues>\n            5.8845919370651245e-01 4.9340128898620605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 647 4.1471039876341820e-03</internalNodes>\n          <leafValues>\n            4.3722391128540039e-01 5.8934777975082397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 648 -3.5502649843692780e-03</internalNodes>\n          <leafValues>\n            4.3275511264801025e-01 5.3962701559066772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 649 -1.9224269315600395e-02</internalNodes>\n          <leafValues>\n            1.9131340086460114e-01 5.0683307647705078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 650 1.4395059552043676e-03</internalNodes>\n          <leafValues>\n            5.3081780672073364e-01 4.2435330152511597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 651 -6.7751999013125896e-03</internalNodes>\n          <leafValues>\n            6.3653957843780518e-01 4.5400860905647278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 652 7.0119630545377731e-03</internalNodes>\n          <leafValues>\n            5.1898342370986938e-01 3.0261999368667603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 653 5.4014651104807854e-03</internalNodes>\n          <leafValues>\n            5.1050621271133423e-01 2.5576829910278320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 654 9.0274988906458020e-04</internalNodes>\n          <leafValues>\n            4.6969148516654968e-01 5.8618277311325073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 655 1.1474450118839741e-02</internalNodes>\n          <leafValues>\n            5.0536459684371948e-01 1.5271779894828796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 656 -6.7023430019617081e-03</internalNodes>\n          <leafValues>\n            6.5089809894561768e-01 4.8906040191650391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 657 -2.0462959073483944e-03</internalNodes>\n          <leafValues>\n            6.2418168783187866e-01 4.5146000385284424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 658 -9.9951568990945816e-03</internalNodes>\n          <leafValues>\n            3.4327811002731323e-01 5.4009538888931274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 659 -3.5700708627700806e-02</internalNodes>\n          <leafValues>\n            1.8780590593814850e-01 5.0740778446197510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 660 4.5584561303257942e-04</internalNodes>\n          <leafValues>\n            3.8052770495414734e-01 5.4025697708129883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 661 -5.4260600358247757e-02</internalNodes>\n          <leafValues>\n            6.8437147140502930e-01 4.5950970053672791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 662 6.0600461438298225e-03</internalNodes>\n          <leafValues>\n            5.5029052495956421e-01 4.5005279779434204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 663 -6.4791832119226456e-03</internalNodes>\n          <leafValues>\n            3.3688580989837646e-01 5.3107571601867676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 664 -1.4939469983801246e-03</internalNodes>\n          <leafValues>\n            6.4876401424407959e-01 4.7561758756637573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 665 1.4610530342906713e-05</internalNodes>\n          <leafValues>\n            4.0345790982246399e-01 5.4510641098022461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 666 -7.2321938350796700e-03</internalNodes>\n          <leafValues>\n            6.3868737220764160e-01 4.8247399926185608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 667 -4.0645818226039410e-03</internalNodes>\n          <leafValues>\n            2.9864218831062317e-01 5.1573359966278076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 668 3.0463080853223801e-02</internalNodes>\n          <leafValues>\n            5.0221997499465942e-01 7.1599560976028442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 669 -8.0544911324977875e-03</internalNodes>\n          <leafValues>\n            6.4924520254135132e-01 4.6192750334739685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 670 3.9505138993263245e-02</internalNodes>\n          <leafValues>\n            5.1505708694458008e-01 2.4506139755249023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 671 8.4530208259820938e-03</internalNodes>\n          <leafValues>\n            4.5736691355705261e-01 6.3940370082855225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 672 -1.1688120430335402e-03</internalNodes>\n          <leafValues>\n            3.8655120134353638e-01 5.4836612939834595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 673 2.8070670086890459e-03</internalNodes>\n          <leafValues>\n            5.1285791397094727e-01 2.7014800906181335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 674 4.7365209320560098e-04</internalNodes>\n          <leafValues>\n            4.0515819191932678e-01 5.3874611854553223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 675 1.1741080321371555e-02</internalNodes>\n          <leafValues>\n            5.2959501743316650e-01 3.7194138765335083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 676 3.1833238899707794e-03</internalNodes>\n          <leafValues>\n            4.7894069552421570e-01 6.8951261043548584e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 677 7.0241501089185476e-04</internalNodes>\n          <leafValues>\n            5.3844892978668213e-01 3.9180809259414673e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>102</maxWeakCount>\n      <stageThreshold>5.0169731140136719e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 678 1.7059929668903351e-02</internalNodes>\n          <leafValues>\n            3.9485278725624084e-01 7.1425348520278931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 679 2.1840840578079224e-02</internalNodes>\n          <leafValues>\n            3.3703160285949707e-01 6.0900169610977173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 680 2.4520049919374287e-04</internalNodes>\n          <leafValues>\n            3.5005760192871094e-01 5.9879022836685181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 681 8.3272606134414673e-03</internalNodes>\n          <leafValues>\n            3.2675281167030334e-01 5.6972408294677734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 682 5.7148298947140574e-04</internalNodes>\n          <leafValues>\n            3.0445998907089233e-01 5.5316567420959473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 683 6.7373987985774875e-04</internalNodes>\n          <leafValues>\n            3.6500120162963867e-01 5.6726312637329102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 684 3.4681590477703139e-05</internalNodes>\n          <leafValues>\n            3.3135411143302917e-01 5.3887271881103516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 685 -5.8563398197293282e-03</internalNodes>\n          <leafValues>\n            2.6979428529739380e-01 5.4987788200378418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 686 8.5102273151278496e-03</internalNodes>\n          <leafValues>\n            5.2693581581115723e-01 2.7628791332244873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 687 -6.9817207753658295e-02</internalNodes>\n          <leafValues>\n            2.9096031188964844e-01 5.2592468261718750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 688 -8.6113670840859413e-04</internalNodes>\n          <leafValues>\n            5.8925771713256836e-01 4.0736979246139526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 689 9.7149249631911516e-04</internalNodes>\n          <leafValues>\n            3.5235640406608582e-01 5.4158622026443481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 690 -1.4727490452060010e-05</internalNodes>\n          <leafValues>\n            5.4230177402496338e-01 3.5031560063362122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 691 4.8420291393995285e-02</internalNodes>\n          <leafValues>\n            5.1939457654953003e-01 3.4111958742141724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 692 1.3257140526548028e-03</internalNodes>\n          <leafValues>\n            3.1577691435813904e-01 5.3353762626647949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 693 1.4922149603080470e-05</internalNodes>\n          <leafValues>\n            4.4512999057769775e-01 5.5365538597106934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 694 -2.7173398993909359e-03</internalNodes>\n          <leafValues>\n            3.0317419767379761e-01 5.2480888366699219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 695 2.9219500720500946e-03</internalNodes>\n          <leafValues>\n            4.7814530134201050e-01 6.6060417890548706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 696 -1.9804988987743855e-03</internalNodes>\n          <leafValues>\n            3.1863081455230713e-01 5.2876251935958862e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 697 -4.0012109093368053e-03</internalNodes>\n          <leafValues>\n            6.4135968685150146e-01 4.7499281167984009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 698 -4.3491991236805916e-03</internalNodes>\n          <leafValues>\n            1.5074980258941650e-01 5.0989967584609985e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 699 1.3490889687091112e-03</internalNodes>\n          <leafValues>\n            4.3161588907241821e-01 5.8811670541763306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 700 1.8597070127725601e-02</internalNodes>\n          <leafValues>\n            4.7355538606643677e-01 9.0897941589355469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 701 -1.8562379991635680e-03</internalNodes>\n          <leafValues>\n            3.5531890392303467e-01 5.5778372287750244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 702 2.2940430790185928e-03</internalNodes>\n          <leafValues>\n            4.5000949501991272e-01 6.5808779001235962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 703 2.9982850537635386e-04</internalNodes>\n          <leafValues>\n            5.6292420625686646e-01 3.9758789539337158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 704 3.5455459728837013e-03</internalNodes>\n          <leafValues>\n            5.3815472126007080e-01 3.6054858565330505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 705 9.6104722470045090e-03</internalNodes>\n          <leafValues>\n            5.2559971809387207e-01 1.7967459559440613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 706 -6.2783220782876015e-03</internalNodes>\n          <leafValues>\n            2.2728569805622101e-01 5.1140302419662476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 707 3.4598479978740215e-03</internalNodes>\n          <leafValues>\n            4.6263080835342407e-01 6.6082191467285156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 708 -1.3112019514665008e-03</internalNodes>\n          <leafValues>\n            6.3175398111343384e-01 4.4368579983711243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 709 2.6876179035753012e-03</internalNodes>\n          <leafValues>\n            5.4211097955703735e-01 4.0540221333503723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 710 3.9118169806897640e-03</internalNodes>\n          <leafValues>\n            5.3584778308868408e-01 3.2734549045562744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 711 -1.4206450432538986e-02</internalNodes>\n          <leafValues>\n            7.7935767173767090e-01 4.9757811427116394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 712 7.1705528534948826e-04</internalNodes>\n          <leafValues>\n            5.2973198890686035e-01 3.5609039664268494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 713 1.6635019565001130e-03</internalNodes>\n          <leafValues>\n            4.6780940890312195e-01 5.8164817094802856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 714 3.3686188980937004e-03</internalNodes>\n          <leafValues>\n            5.2767342329025269e-01 3.4464201331138611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 715 1.2799530290067196e-02</internalNodes>\n          <leafValues>\n            4.8346799612045288e-01 7.4721592664718628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 716 3.3901201095432043e-03</internalNodes>\n          <leafValues>\n            4.5118591189384460e-01 6.4017212390899658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 717 4.7070779837667942e-03</internalNodes>\n          <leafValues>\n            5.3356587886810303e-01 3.5552209615707397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 718 1.4819339849054813e-03</internalNodes>\n          <leafValues>\n            4.2507070302963257e-01 5.7727241516113281e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 719 -6.9995759986341000e-03</internalNodes>\n          <leafValues>\n            3.0033200979232788e-01 5.2929002046585083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 720 1.5939010307192802e-02</internalNodes>\n          <leafValues>\n            5.0673192739486694e-01 1.6755819320678711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 721 7.6377349905669689e-03</internalNodes>\n          <leafValues>\n            4.7950699925422668e-01 7.0856010913848877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 722 6.7334040068089962e-03</internalNodes>\n          <leafValues>\n            5.1331132650375366e-01 2.1624700725078583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 723 -1.2858809903264046e-02</internalNodes>\n          <leafValues>\n            1.9388419389724731e-01 5.2513718605041504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 724 -6.2270800117403269e-04</internalNodes>\n          <leafValues>\n            5.6865382194519043e-01 4.1978681087493896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 725 -5.2651681471616030e-04</internalNodes>\n          <leafValues>\n            4.2241689562797546e-01 5.4296958446502686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 726 1.1075099930167198e-02</internalNodes>\n          <leafValues>\n            5.1137751340866089e-01 2.5145179033279419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 727 -3.6728251725435257e-02</internalNodes>\n          <leafValues>\n            7.1946620941162109e-01 4.8496189713478088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 728 -2.8207109426148236e-04</internalNodes>\n          <leafValues>\n            3.8402619957923889e-01 5.3944462537765503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 729 -2.7489690110087395e-03</internalNodes>\n          <leafValues>\n            5.9370887279510498e-01 4.5691820979118347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 730 1.0047519579529762e-02</internalNodes>\n          <leafValues>\n            5.1385760307312012e-01 2.8022980690002441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 731 -8.1497840583324432e-03</internalNodes>\n          <leafValues>\n            6.0900372266769409e-01 4.6361210942268372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 732 -6.8833888508379459e-03</internalNodes>\n          <leafValues>\n            3.4586110711097717e-01 5.2546602487564087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 733 -1.4039360394235700e-05</internalNodes>\n          <leafValues>\n            5.6931042671203613e-01 4.0820831060409546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 734 1.5498419525101781e-03</internalNodes>\n          <leafValues>\n            4.3505370616912842e-01 5.8065170049667358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 735 -6.7841499112546444e-03</internalNodes>\n          <leafValues>\n            1.4688730239868164e-01 5.1827752590179443e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 736 2.1705629478674382e-04</internalNodes>\n          <leafValues>\n            5.2935242652893066e-01 3.4561741352081299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 737 3.1198898795992136e-04</internalNodes>\n          <leafValues>\n            4.6524509787559509e-01 5.9424138069152832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 738 5.4507530294358730e-03</internalNodes>\n          <leafValues>\n            4.6535089612007141e-01 7.0248460769653320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 739 -2.5818689027801156e-04</internalNodes>\n          <leafValues>\n            5.4972952604293823e-01 3.7689670920372009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 740 -1.7442539334297180e-02</internalNodes>\n          <leafValues>\n            3.9190879464149475e-01 5.4574978351593018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 741 -4.5343529433012009e-02</internalNodes>\n          <leafValues>\n            1.6313570737838745e-01 5.1549088954925537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 742 1.9190689781680703e-03</internalNodes>\n          <leafValues>\n            5.1458978652954102e-01 2.7918958663940430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 743 -6.0177869163453579e-03</internalNodes>\n          <leafValues>\n            6.5176361799240112e-01 4.7563329339027405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 744 -4.0720738470554352e-03</internalNodes>\n          <leafValues>\n            5.5146527290344238e-01 4.0926858782768250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 745 3.9855059003457427e-04</internalNodes>\n          <leafValues>\n            3.1652408838272095e-01 5.2855509519577026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 746 -6.5418570302426815e-03</internalNodes>\n          <leafValues>\n            6.8533778190612793e-01 4.6528089046478271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 747 3.4845089539885521e-03</internalNodes>\n          <leafValues>\n            5.4845881462097168e-01 4.5027598738670349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 748 -1.3696780428290367e-02</internalNodes>\n          <leafValues>\n            6.3957798480987549e-01 4.5725551247596741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 749 -1.7347140237689018e-02</internalNodes>\n          <leafValues>\n            2.7510729432106018e-01 5.1816147565841675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 750 -4.0885428898036480e-03</internalNodes>\n          <leafValues>\n            3.3256360888481140e-01 5.1949840784072876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 751 -9.4687901437282562e-03</internalNodes>\n          <leafValues>\n            5.9422808885574341e-01 4.8518198728561401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 752 1.7084840219467878e-03</internalNodes>\n          <leafValues>\n            4.1671109199523926e-01 5.5198061466217041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 753 9.4809094443917274e-03</internalNodes>\n          <leafValues>\n            5.4338949918746948e-01 4.2085149884223938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 754 -4.7389650717377663e-03</internalNodes>\n          <leafValues>\n            6.4071899652481079e-01 4.5606550574302673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 755 6.5761050209403038e-03</internalNodes>\n          <leafValues>\n            5.2145552635192871e-01 2.2582270205020905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 756 -2.1690549328923225e-03</internalNodes>\n          <leafValues>\n            3.1515279412269592e-01 5.1567047834396362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 757 1.4660170301795006e-02</internalNodes>\n          <leafValues>\n            4.8708370327949524e-01 6.6899412870407104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 758 1.7231999663636088e-04</internalNodes>\n          <leafValues>\n            3.5697489976882935e-01 5.2510780096054077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 759 -2.1803760901093483e-02</internalNodes>\n          <leafValues>\n            8.8259208202362061e-01 4.9663299322128296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 760 -9.4736106693744659e-02</internalNodes>\n          <leafValues>\n            1.4461620151996613e-01 5.0611138343811035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 761 5.5825551971793175e-03</internalNodes>\n          <leafValues>\n            5.3964787721633911e-01 4.2380660772323608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 762 1.9517090404406190e-03</internalNodes>\n          <leafValues>\n            4.1704109311103821e-01 5.4977869987487793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 763 1.2149900197982788e-02</internalNodes>\n          <leafValues>\n            4.6983671188354492e-01 5.6642740964889526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 764 -7.5169620104134083e-03</internalNodes>\n          <leafValues>\n            6.2677729129791260e-01 4.4631358981132507e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 765 -7.1667909622192383e-02</internalNodes>\n          <leafValues>\n            3.0970111489295959e-01 5.2210032939910889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 766 -8.8292419910430908e-02</internalNodes>\n          <leafValues>\n            8.1123888492584229e-02 5.0063651800155640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 767 3.1063079833984375e-02</internalNodes>\n          <leafValues>\n            5.1555037498474121e-01 1.2822559475898743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 768 4.6621840447187424e-02</internalNodes>\n          <leafValues>\n            4.6997779607772827e-01 7.3639607429504395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 769 -1.2189489789307117e-02</internalNodes>\n          <leafValues>\n            3.9205300807952881e-01 5.5189967155456543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 770 1.3016110286116600e-02</internalNodes>\n          <leafValues>\n            5.2606582641601562e-01 3.6851361393928528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 771 -3.4952899441123009e-03</internalNodes>\n          <leafValues>\n            6.3392949104309082e-01 4.7162809967994690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 772 -4.4015039748046547e-05</internalNodes>\n          <leafValues>\n            5.3330272436141968e-01 3.7761849164962769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 773 -1.0966490209102631e-01</internalNodes>\n          <leafValues>\n            1.7653420567512512e-01 5.1983469724655151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 774 -9.0279558207839727e-04</internalNodes>\n          <leafValues>\n            5.3241598606109619e-01 3.8389080762863159e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 775 7.1126641705632210e-04</internalNodes>\n          <leafValues>\n            4.6479299664497375e-01 5.7552242279052734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 776 -3.1250279862433672e-03</internalNodes>\n          <leafValues>\n            3.2367089390754700e-01 5.1667708158493042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 777 2.4144679773598909e-03</internalNodes>\n          <leafValues>\n            4.7874391078948975e-01 6.4597177505493164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 778 4.4391240226104856e-04</internalNodes>\n          <leafValues>\n            4.4093081355094910e-01 6.0102558135986328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 779 -2.2611189342569560e-04</internalNodes>\n          <leafValues>\n            4.0381139516830444e-01 5.4932558536529541e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>135</maxWeakCount>\n      <stageThreshold>6.6669120788574219e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 780 -4.6901289373636246e-02</internalNodes>\n          <leafValues>\n            6.6001719236373901e-01 3.7438011169433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 781 -1.4568349579349160e-03</internalNodes>\n          <leafValues>\n            5.7839912176132202e-01 3.4377971291542053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 782 5.5598369799554348e-03</internalNodes>\n          <leafValues>\n            3.6222669482231140e-01 5.9082162380218506e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 783 7.3170487303286791e-04</internalNodes>\n          <leafValues>\n            5.5004191398620605e-01 2.8735581040382385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 784 1.3318009441718459e-03</internalNodes>\n          <leafValues>\n            2.6731699705123901e-01 5.4310190677642822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 785 2.4347059661522508e-04</internalNodes>\n          <leafValues>\n            3.8550278544425964e-01 5.7413887977600098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 786 -3.0512469820678234e-03</internalNodes>\n          <leafValues>\n            5.5032098293304443e-01 3.4628450870513916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 787 -6.8657199153676629e-04</internalNodes>\n          <leafValues>\n            3.2912218570709229e-01 5.4295092821121216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 788 1.4668200165033340e-03</internalNodes>\n          <leafValues>\n            3.5883820056915283e-01 5.3518110513687134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 789 3.2021870720200241e-04</internalNodes>\n          <leafValues>\n            4.2968419194221497e-01 5.7002341747283936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 790 7.4122188379988074e-04</internalNodes>\n          <leafValues>\n            5.2821648120880127e-01 3.3668708801269531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 791 3.8330298848450184e-03</internalNodes>\n          <leafValues>\n            4.5595678687095642e-01 6.2573361396789551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 792 -1.5456439927220345e-02</internalNodes>\n          <leafValues>\n            2.3501169681549072e-01 5.1294529438018799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 793 2.6796779129654169e-03</internalNodes>\n          <leafValues>\n            5.3294152021408081e-01 4.1550621390342712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 794 2.8296569362282753e-03</internalNodes>\n          <leafValues>\n            4.2730879783630371e-01 5.8045381307601929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 795 -3.9444249123334885e-03</internalNodes>\n          <leafValues>\n            2.9126119613647461e-01 5.2026861906051636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 796 2.7179559692740440e-03</internalNodes>\n          <leafValues>\n            5.3076881170272827e-01 3.5856771469116211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 797 5.9077627956867218e-03</internalNodes>\n          <leafValues>\n            4.7037750482559204e-01 5.9415858983993530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 798 -4.2240349575877190e-03</internalNodes>\n          <leafValues>\n            2.1415670216083527e-01 5.0887960195541382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 799 4.0725888684391975e-03</internalNodes>\n          <leafValues>\n            4.7664138674736023e-01 6.8410611152648926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 800 1.0149530135095119e-02</internalNodes>\n          <leafValues>\n            5.3607988357543945e-01 3.7484970688819885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 801 -1.8864999583456665e-04</internalNodes>\n          <leafValues>\n            5.7201302051544189e-01 3.8538050651550293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 802 -4.8864358104765415e-03</internalNodes>\n          <leafValues>\n            3.6931228637695312e-01 5.3409588336944580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 803 2.6158479973673820e-02</internalNodes>\n          <leafValues>\n            4.9623748660087585e-01 6.0599899291992188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 804 4.8560759751126170e-04</internalNodes>\n          <leafValues>\n            4.4389459490776062e-01 6.0124689340591431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 805 1.1268709786236286e-02</internalNodes>\n          <leafValues>\n            5.2442502975463867e-01 1.8403880298137665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 806 -2.8114619199186563e-03</internalNodes>\n          <leafValues>\n            6.0602837800979614e-01 4.4098970293998718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 807 -5.6112729944288731e-03</internalNodes>\n          <leafValues>\n            3.8911709189414978e-01 5.5892372131347656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 808 8.5680093616247177e-03</internalNodes>\n          <leafValues>\n            5.0693458318710327e-01 2.0626190304756165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 809 -3.8172779022715986e-04</internalNodes>\n          <leafValues>\n            5.8822017908096313e-01 4.1926109790802002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 810 -1.7680290329735726e-04</internalNodes>\n          <leafValues>\n            5.5336058139801025e-01 4.0033689141273499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 811 6.5112537704408169e-03</internalNodes>\n          <leafValues>\n            3.3101469278335571e-01 5.4441910982131958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 812 -6.5948683186434209e-05</internalNodes>\n          <leafValues>\n            5.4338318109512329e-01 3.9449059963226318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 813 6.9939051754772663e-03</internalNodes>\n          <leafValues>\n            5.6003582477569580e-01 4.1927140951156616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 814 -4.6744439750909805e-03</internalNodes>\n          <leafValues>\n            6.6854667663574219e-01 4.6049609780311584e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 815 1.1589850299060345e-02</internalNodes>\n          <leafValues>\n            5.3571212291717529e-01 2.9268300533294678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 816 1.3007840141654015e-02</internalNodes>\n          <leafValues>\n            4.6798178553581238e-01 7.3074632883071899e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 817 -1.1008579749614000e-03</internalNodes>\n          <leafValues>\n            3.9375010132789612e-01 5.4150652885437012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 818 6.0472649056464434e-04</internalNodes>\n          <leafValues>\n            4.2423760890960693e-01 5.6040412187576294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 819 -1.4494840055704117e-02</internalNodes>\n          <leafValues>\n            3.6312100291252136e-01 5.2931827306747437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 820 -5.3056948818266392e-03</internalNodes>\n          <leafValues>\n            6.8604522943496704e-01 4.6218210458755493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 821 -8.1829127157106996e-04</internalNodes>\n          <leafValues>\n            3.9440968632698059e-01 5.4204392433166504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 822 -1.9077520817518234e-02</internalNodes>\n          <leafValues>\n            1.9626219570636749e-01 5.0378918647766113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 823 3.5549470339901745e-04</internalNodes>\n          <leafValues>\n            4.0862590074539185e-01 5.6139731407165527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 824 1.9679730758070946e-03</internalNodes>\n          <leafValues>\n            4.4891211390495300e-01 5.9261232614517212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 825 6.9189141504466534e-03</internalNodes>\n          <leafValues>\n            5.3359258174896240e-01 3.7283858656883240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 826 2.9872779268771410e-03</internalNodes>\n          <leafValues>\n            5.1113212108612061e-01 2.9756438732147217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 827 -6.2264618463814259e-03</internalNodes>\n          <leafValues>\n            5.5414897203445435e-01 4.8245379328727722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 828 1.3353300280869007e-02</internalNodes>\n          <leafValues>\n            4.5864239335060120e-01 6.4147979021072388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 829 3.3505238592624664e-02</internalNodes>\n          <leafValues>\n            5.3924250602722168e-01 3.4299948811531067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 830 -2.5294460356235504e-03</internalNodes>\n          <leafValues>\n            1.7037139832973480e-01 5.0133150815963745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 831 -1.2801629491150379e-03</internalNodes>\n          <leafValues>\n            5.3054618835449219e-01 4.6974050998687744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 832 7.0687388069927692e-03</internalNodes>\n          <leafValues>\n            4.6155458688735962e-01 6.4365047216415405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 833 9.6880499040707946e-04</internalNodes>\n          <leafValues>\n            4.8335990309715271e-01 6.0438942909240723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 834 3.9647659286856651e-03</internalNodes>\n          <leafValues>\n            5.1876372098922729e-01 3.2318168878555298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 835 -2.2057730704545975e-02</internalNodes>\n          <leafValues>\n            4.0792569518089294e-01 5.2009809017181396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 836 -6.6906312713399529e-04</internalNodes>\n          <leafValues>\n            5.3316092491149902e-01 3.8156008720397949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 837 -6.7009328631684184e-04</internalNodes>\n          <leafValues>\n            5.6554222106933594e-01 4.6889019012451172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 838 7.4284552829340100e-04</internalNodes>\n          <leafValues>\n            4.5343810319900513e-01 6.2874001264572144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 839 2.2227810695767403e-03</internalNodes>\n          <leafValues>\n            5.3506332635879517e-01 3.3036559820175171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 840 -5.4130521602928638e-03</internalNodes>\n          <leafValues>\n            1.1136870086193085e-01 5.0054347515106201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 841 -1.4520040167553816e-05</internalNodes>\n          <leafValues>\n            5.6287378072738647e-01 4.3251338601112366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 842 2.3369169502984732e-04</internalNodes>\n          <leafValues>\n            4.1658350825309753e-01 5.4477912187576294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 843 4.2894547805190086e-03</internalNodes>\n          <leafValues>\n            4.8603910207748413e-01 6.7786490917205811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 844 5.9103150852024555e-03</internalNodes>\n          <leafValues>\n            5.2623051404953003e-01 3.6121138930320740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 845 1.2900539673864841e-02</internalNodes>\n          <leafValues>\n            5.3193771839141846e-01 3.2502880692481995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 846 4.6982979401946068e-03</internalNodes>\n          <leafValues>\n            4.6182450652122498e-01 6.6659259796142578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 847 1.0439859703183174e-02</internalNodes>\n          <leafValues>\n            5.5056709051132202e-01 3.8836041092872620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 848 3.0443191062659025e-03</internalNodes>\n          <leafValues>\n            4.6978530287742615e-01 7.3018449544906616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 849 -6.1593751888722181e-04</internalNodes>\n          <leafValues>\n            3.8308390974998474e-01 5.4649841785430908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 850 -3.4247159492224455e-03</internalNodes>\n          <leafValues>\n            2.5663000345230103e-01 5.0895309448242188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 851 -9.3538565561175346e-03</internalNodes>\n          <leafValues>\n            6.4699661731719971e-01 4.9407958984375000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 852 5.2338998764753342e-02</internalNodes>\n          <leafValues>\n            4.7459828853607178e-01 7.8787708282470703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 853 3.5765620414167643e-03</internalNodes>\n          <leafValues>\n            5.3066647052764893e-01 2.7484980225563049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 854 7.1555317845195532e-04</internalNodes>\n          <leafValues>\n            5.4131257534027100e-01 4.0419089794158936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 855 -1.0516679845750332e-02</internalNodes>\n          <leafValues>\n            6.1585122346878052e-01 4.8152831196784973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 856 7.7347927726805210e-03</internalNodes>\n          <leafValues>\n            4.6958059072494507e-01 7.0289808511734009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 857 -4.3226778507232666e-03</internalNodes>\n          <leafValues>\n            2.8495660424232483e-01 5.3046840429306030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 858 -2.5534399319440126e-03</internalNodes>\n          <leafValues>\n            7.0569849014282227e-01 4.6888920664787292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 859 1.0268510231981054e-04</internalNodes>\n          <leafValues>\n            3.9029321074485779e-01 5.5734640359878540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 860 7.1395188570022583e-06</internalNodes>\n          <leafValues>\n            3.6842319369316101e-01 5.2639877796173096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 861 -1.6711989883333445e-03</internalNodes>\n          <leafValues>\n            3.8491758704185486e-01 5.3872710466384888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 862 4.9260449595749378e-03</internalNodes>\n          <leafValues>\n            4.7297719120979309e-01 7.4472510814666748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 863 4.3908702209591866e-03</internalNodes>\n          <leafValues>\n            4.8091810941696167e-01 5.5919218063354492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 864 -1.7793629318475723e-02</internalNodes>\n          <leafValues>\n            6.9036781787872314e-01 4.6769270300865173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 865 2.0469669252634048e-03</internalNodes>\n          <leafValues>\n            5.3706902265548706e-01 3.3081620931625366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 866 2.9891489073634148e-02</internalNodes>\n          <leafValues>\n            5.1398652791976929e-01 3.3090591430664062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 867 1.5494900289922953e-03</internalNodes>\n          <leafValues>\n            4.6602371335029602e-01 6.0783427953720093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 868 1.4956969534978271e-03</internalNodes>\n          <leafValues>\n            4.4048359990119934e-01 5.8639198541641235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 869 9.5885928021743894e-04</internalNodes>\n          <leafValues>\n            5.4359710216522217e-01 4.2085230350494385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 870 4.9643701640889049e-04</internalNodes>\n          <leafValues>\n            5.3705781698226929e-01 4.0006220340728760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 871 -2.7280810754746199e-03</internalNodes>\n          <leafValues>\n            5.6594127416610718e-01 4.2596429586410522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 872 2.3026480339467525e-03</internalNodes>\n          <leafValues>\n            5.1616579294204712e-01 3.3508691191673279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 873 2.5151631236076355e-01</internalNodes>\n          <leafValues>\n            4.8696619272232056e-01 7.1473097801208496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 874 -4.6328022144734859e-03</internalNodes>\n          <leafValues>\n            2.7274489402770996e-01 5.0837898254394531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 875 -4.0434490889310837e-02</internalNodes>\n          <leafValues>\n            6.8514388799667358e-01 5.0217670202255249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 876 1.4972220014897175e-05</internalNodes>\n          <leafValues>\n            4.2844650149345398e-01 5.5225551128387451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 877 -2.4050309730228037e-04</internalNodes>\n          <leafValues>\n            4.2261189222335815e-01 5.3900748491287231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 878 2.3657839745283127e-02</internalNodes>\n          <leafValues>\n            4.7446319460868835e-01 7.5043660402297974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 879 -8.1449104472994804e-03</internalNodes>\n          <leafValues>\n            4.2450588941574097e-01 5.5383628606796265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 880 -3.6992130335420370e-03</internalNodes>\n          <leafValues>\n            5.9523570537567139e-01 4.5297130942344666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 881 -6.7718601785600185e-03</internalNodes>\n          <leafValues>\n            4.1377940773963928e-01 5.4733997583389282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 882 4.2669530957937241e-03</internalNodes>\n          <leafValues>\n            4.4841149449348450e-01 5.7979941368103027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 883 1.7791989957913756e-03</internalNodes>\n          <leafValues>\n            5.6248587369918823e-01 4.4324448704719543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 884 1.6774770338088274e-03</internalNodes>\n          <leafValues>\n            4.6377518773078918e-01 6.3642418384552002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 885 1.1732629500329494e-03</internalNodes>\n          <leafValues>\n            4.5445030927658081e-01 5.9144157171249390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 886 8.6998171173036098e-04</internalNodes>\n          <leafValues>\n            5.3347527980804443e-01 3.8859179615974426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 887 7.6378340600058436e-04</internalNodes>\n          <leafValues>\n            5.3985852003097534e-01 3.7449419498443604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 888 1.5684569370932877e-04</internalNodes>\n          <leafValues>\n            4.3178731203079224e-01 5.6146162748336792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 889 -2.1511370316147804e-02</internalNodes>\n          <leafValues>\n            1.7859250307083130e-01 5.1855427026748657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 890 1.3081369979772717e-04</internalNodes>\n          <leafValues>\n            4.3424990773200989e-01 5.6828498840332031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 891 2.1992040798068047e-02</internalNodes>\n          <leafValues>\n            5.1617169380187988e-01 2.3793940246105194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 892 -8.0136500764638186e-04</internalNodes>\n          <leafValues>\n            5.9867632389068604e-01 4.4664269685745239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 893 -8.2736099138855934e-03</internalNodes>\n          <leafValues>\n            4.1082179546356201e-01 5.2510571479797363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 894 3.6831789184361696e-03</internalNodes>\n          <leafValues>\n            5.1738142967224121e-01 3.3975180983543396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 895 -7.9525681212544441e-03</internalNodes>\n          <leafValues>\n            6.8889832496643066e-01 4.8459240794181824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 896 1.5382299898192286e-03</internalNodes>\n          <leafValues>\n            5.1785671710968018e-01 3.4541139006614685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 897 -1.4043530449271202e-02</internalNodes>\n          <leafValues>\n            1.6784210503101349e-01 5.1886677742004395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 898 1.4315890148282051e-03</internalNodes>\n          <leafValues>\n            4.3682569265365601e-01 5.6557738780975342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 899 -3.4014228731393814e-02</internalNodes>\n          <leafValues>\n            7.8022962808609009e-01 4.9592170119285583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 900 -1.2027299962937832e-02</internalNodes>\n          <leafValues>\n            1.5851010382175446e-01 5.0322318077087402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 901 1.3316619396209717e-01</internalNodes>\n          <leafValues>\n            5.1633048057556152e-01 2.7551281452178955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 902 -1.5221949433907866e-03</internalNodes>\n          <leafValues>\n            3.7283179163932800e-01 5.2145522832870483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 903 -9.3929271679371595e-04</internalNodes>\n          <leafValues>\n            5.8383792638778687e-01 4.5111650228500366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 904 2.7719739824533463e-02</internalNodes>\n          <leafValues>\n            4.7282868623733521e-01 7.3315447568893433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 905 3.1030150130391121e-03</internalNodes>\n          <leafValues>\n            5.3022021055221558e-01 4.1015630960464478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 906 7.7861219644546509e-02</internalNodes>\n          <leafValues>\n            4.9983340501785278e-01 1.2729619443416595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 907 -1.5854939818382263e-02</internalNodes>\n          <leafValues>\n            5.0833359360694885e-02 5.1656562089920044e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 908 -4.9725300632417202e-03</internalNodes>\n          <leafValues>\n            6.7981338500976562e-01 4.6842318773269653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 909 -9.7676506265997887e-04</internalNodes>\n          <leafValues>\n            6.0107719898223877e-01 4.7889319062232971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 910 -2.4647710379213095e-03</internalNodes>\n          <leafValues>\n            3.3933979272842407e-01 5.2205038070678711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 911 -6.7937700077891350e-03</internalNodes>\n          <leafValues>\n            4.3651369214057922e-01 5.2396631240844727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 912 3.2608021050691605e-02</internalNodes>\n          <leafValues>\n            5.0527238845825195e-01 2.4252149462699890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 913 -5.8514421107247472e-04</internalNodes>\n          <leafValues>\n            5.7339739799499512e-01 4.7585740685462952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 914 -2.9632600024342537e-02</internalNodes>\n          <leafValues>\n            3.8922891020774841e-01 5.2635979652404785e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>137</maxWeakCount>\n      <stageThreshold>6.7698921203613281e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 915 4.6550851315259933e-02</internalNodes>\n          <leafValues>\n            3.2769501209259033e-01 6.2405228614807129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 916 7.9537127166986465e-03</internalNodes>\n          <leafValues>\n            4.2564851045608521e-01 6.9429391622543335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 917 6.8221561377868056e-04</internalNodes>\n          <leafValues>\n            3.7114870548248291e-01 5.9007328748703003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 918 -1.9348249770700932e-04</internalNodes>\n          <leafValues>\n            2.0411339402198792e-01 5.3005450963973999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 919 -2.6710508973337710e-04</internalNodes>\n          <leafValues>\n            5.4161262512207031e-01 3.1031790375709534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 920 2.7818060480058193e-03</internalNodes>\n          <leafValues>\n            5.2778327465057373e-01 3.4670698642730713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 921 -4.6779078547842801e-04</internalNodes>\n          <leafValues>\n            5.3082311153411865e-01 3.2944920659065247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 922 -3.0335160772665404e-05</internalNodes>\n          <leafValues>\n            5.7738727331161499e-01 3.8520970940589905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 923 7.8038009814918041e-04</internalNodes>\n          <leafValues>\n            4.3174389004707336e-01 6.1500579118728638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 924 -4.2553851380944252e-03</internalNodes>\n          <leafValues>\n            2.9339039325714111e-01 5.3242927789688110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 925 -2.4735610350035131e-04</internalNodes>\n          <leafValues>\n            5.4688447713851929e-01 3.8430300354957581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 926 -1.4724259381182492e-04</internalNodes>\n          <leafValues>\n            4.2815428972244263e-01 5.7555872201919556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 927 1.1864770203828812e-03</internalNodes>\n          <leafValues>\n            3.7473011016845703e-01 5.4714661836624146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 928 2.3936580400913954e-03</internalNodes>\n          <leafValues>\n            4.5377838611602783e-01 6.1115288734436035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 929 -1.5390539774671197e-03</internalNodes>\n          <leafValues>\n            2.9713419079780579e-01 5.1895380020141602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 930 -7.1968790143728256e-03</internalNodes>\n          <leafValues>\n            6.6990667581558228e-01 4.7264769673347473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 931 -4.1499789222143590e-04</internalNodes>\n          <leafValues>\n            3.3849540352821350e-01 5.2603179216384888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 932 4.4359830208122730e-03</internalNodes>\n          <leafValues>\n            5.3991222381591797e-01 3.9201408624649048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 933 2.6606200262904167e-03</internalNodes>\n          <leafValues>\n            4.4825780391693115e-01 6.1196178197860718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 934 -1.5287200221791863e-03</internalNodes>\n          <leafValues>\n            3.7112379074096680e-01 5.3402662277221680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 935 -4.7397250309586525e-03</internalNodes>\n          <leafValues>\n            6.0310882329940796e-01 4.4551450014114380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 936 -1.4829129911959171e-02</internalNodes>\n          <leafValues>\n            2.8387540578842163e-01 5.3418618440628052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 937 9.2275557108223438e-04</internalNodes>\n          <leafValues>\n            5.2095472812652588e-01 3.3616539835929871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 938 8.3529807627201080e-02</internalNodes>\n          <leafValues>\n            5.1199698448181152e-01 8.1164449453353882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 939 -7.5633148662745953e-04</internalNodes>\n          <leafValues>\n            3.3171200752258301e-01 5.1898312568664551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 940 9.8403859883546829e-03</internalNodes>\n          <leafValues>\n            5.2475982904434204e-01 2.3349590599536896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 941 -1.5953830443322659e-03</internalNodes>\n          <leafValues>\n            5.7500940561294556e-01 4.2956221103668213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 942 3.4766020689858124e-05</internalNodes>\n          <leafValues>\n            4.3424451351165771e-01 5.5640292167663574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 943 2.9862910509109497e-02</internalNodes>\n          <leafValues>\n            4.5791471004486084e-01 6.5791881084442139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 944 1.1325590312480927e-02</internalNodes>\n          <leafValues>\n            5.2743119001388550e-01 3.6738881468772888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 945 -8.7828645482659340e-03</internalNodes>\n          <leafValues>\n            7.1003687381744385e-01 4.6421670913696289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 946 4.3639959767460823e-03</internalNodes>\n          <leafValues>\n            5.2792161703109741e-01 2.7058771252632141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 947 4.1804728098213673e-03</internalNodes>\n          <leafValues>\n            5.0725251436233521e-01 2.4490830302238464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 948 -4.5668511302210391e-04</internalNodes>\n          <leafValues>\n            4.2831051349639893e-01 5.5486911535263062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 949 -3.7140368949621916e-03</internalNodes>\n          <leafValues>\n            5.5193877220153809e-01 4.1036531329154968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 950 -2.5304289534687996e-02</internalNodes>\n          <leafValues>\n            6.8670022487640381e-01 4.8698890209197998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 951 -3.4454080741852522e-04</internalNodes>\n          <leafValues>\n            3.7288740277290344e-01 5.2876931428909302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 952 -8.3935231668874621e-04</internalNodes>\n          <leafValues>\n            6.0601520538330078e-01 4.6160620450973511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 953 1.7280049622058868e-02</internalNodes>\n          <leafValues>\n            5.0496357679367065e-01 1.8198239803314209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 954 -6.3595077954232693e-03</internalNodes>\n          <leafValues>\n            1.6312399506568909e-01 5.2327787876129150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 955 1.0298109846189618e-03</internalNodes>\n          <leafValues>\n            4.4632780551910400e-01 6.1765491962432861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 956 1.0117109632119536e-03</internalNodes>\n          <leafValues>\n            5.4733848571777344e-01 4.3006989359855652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 957 -1.0308800265192986e-02</internalNodes>\n          <leafValues>\n            1.1669850349426270e-01 5.0008672475814819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 958 5.4682018235325813e-03</internalNodes>\n          <leafValues>\n            4.7692871093750000e-01 6.7192137241363525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 959 -9.1696460731327534e-04</internalNodes>\n          <leafValues>\n            3.4710898995399475e-01 5.1781648397445679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 960 2.3922820109874010e-03</internalNodes>\n          <leafValues>\n            4.7852361202239990e-01 6.2163108587265015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 961 -7.5573818758130074e-03</internalNodes>\n          <leafValues>\n            5.8147960901260376e-01 4.4100850820541382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 962 -7.7024032361805439e-04</internalNodes>\n          <leafValues>\n            3.8780000805854797e-01 5.4657220840454102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 963 -8.7125990539789200e-03</internalNodes>\n          <leafValues>\n            1.6600510478019714e-01 4.9958360195159912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 964 -1.0306320153176785e-02</internalNodes>\n          <leafValues>\n            4.0933910012245178e-01 5.2742338180541992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 965 -2.0940979011356831e-03</internalNodes>\n          <leafValues>\n            6.2061947584152222e-01 4.5722800493240356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 966 6.8099051713943481e-03</internalNodes>\n          <leafValues>\n            5.5677592754364014e-01 4.1556000709533691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 967 -1.0746059706434608e-03</internalNodes>\n          <leafValues>\n            5.6389278173446655e-01 4.3530249595642090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 968 2.1550289820879698e-03</internalNodes>\n          <leafValues>\n            4.8262658715248108e-01 6.7497581243515015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 969 3.1742319464683533e-02</internalNodes>\n          <leafValues>\n            5.0483798980712891e-01 1.8832489848136902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 970 -7.8382723033428192e-02</internalNodes>\n          <leafValues>\n            2.3695489764213562e-01 5.2601581811904907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 971 5.7415119372308254e-03</internalNodes>\n          <leafValues>\n            5.0488287210464478e-01 2.7764698863029480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 972 -2.9014600440859795e-03</internalNodes>\n          <leafValues>\n            6.2386047840118408e-01 4.6933171153068542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 973 -2.6427931152284145e-03</internalNodes>\n          <leafValues>\n            3.3141419291496277e-01 5.1697772741317749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 974 -1.0949660092592239e-01</internalNodes>\n          <leafValues>\n            2.3800450563430786e-01 5.1834410429000854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 975 7.4075913289561868e-05</internalNodes>\n          <leafValues>\n            4.0696358680725098e-01 5.3621500730514526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 976 -5.0593802006915212e-04</internalNodes>\n          <leafValues>\n            5.5067062377929688e-01 4.3745940923690796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 977 -8.2131777890026569e-04</internalNodes>\n          <leafValues>\n            5.5257099866867065e-01 4.2093759775161743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 978 -6.0276539443293586e-05</internalNodes>\n          <leafValues>\n            5.4554748535156250e-01 4.7482660412788391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 979 6.8065142259001732e-03</internalNodes>\n          <leafValues>\n            5.1579958200454712e-01 3.4245771169662476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 980 1.7202789895236492e-03</internalNodes>\n          <leafValues>\n            5.0132077932357788e-01 6.3312637805938721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 981 -1.3016929733566940e-04</internalNodes>\n          <leafValues>\n            5.5397182703018188e-01 4.2268699407577515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 982 -4.8016388900578022e-03</internalNodes>\n          <leafValues>\n            4.4250950217247009e-01 5.4307800531387329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 983 -2.5399310979992151e-03</internalNodes>\n          <leafValues>\n            7.1457821130752563e-01 4.6976050734519958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 984 -1.4278929447755218e-03</internalNodes>\n          <leafValues>\n            4.0704450011253357e-01 5.3996050357818604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 985 -2.5142550468444824e-02</internalNodes>\n          <leafValues>\n            7.8846907615661621e-01 4.7473520040512085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 986 -3.8899609353393316e-03</internalNodes>\n          <leafValues>\n            4.2961919307708740e-01 5.5771100521087646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 987 4.3947459198534489e-03</internalNodes>\n          <leafValues>\n            4.6931621432304382e-01 7.0239442586898804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 988 2.4678420275449753e-02</internalNodes>\n          <leafValues>\n            5.2423220872879028e-01 3.8125100731849670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 989 3.8047678768634796e-02</internalNodes>\n          <leafValues>\n            5.0117397308349609e-01 1.6878280043601990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 990 7.9424865543842316e-03</internalNodes>\n          <leafValues>\n            4.8285821080207825e-01 6.3695681095123291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 991 -1.5110049862414598e-03</internalNodes>\n          <leafValues>\n            5.9064859151840210e-01 4.4876679778099060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 992 6.4201741479337215e-03</internalNodes>\n          <leafValues>\n            5.2410978078842163e-01 2.9905700683593750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 993 -2.9802159406244755e-03</internalNodes>\n          <leafValues>\n            3.0414658784866333e-01 5.0784897804260254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 994 -7.4580078944563866e-04</internalNodes>\n          <leafValues>\n            4.1281390190124512e-01 5.2568262815475464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 995 -1.0470950044691563e-02</internalNodes>\n          <leafValues>\n            5.8083951473236084e-01 4.4942960143089294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 996 9.3369204550981522e-03</internalNodes>\n          <leafValues>\n            5.2465528249740601e-01 2.6589488983154297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 997 2.7936900034546852e-02</internalNodes>\n          <leafValues>\n            4.6749550104141235e-01 7.0872569084167480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 998 7.4277678504586220e-03</internalNodes>\n          <leafValues>\n            5.4094868898391724e-01 3.7585180997848511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 999 -2.3584509268403053e-02</internalNodes>\n          <leafValues>\n            3.7586399912834167e-01 5.2385509014129639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1000 1.1452640173956752e-03</internalNodes>\n          <leafValues>\n            4.3295788764953613e-01 5.8042472600936890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1001 -4.3468660442158580e-04</internalNodes>\n          <leafValues>\n            5.2806180715560913e-01 3.8730698823928833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1002 1.0648540221154690e-02</internalNodes>\n          <leafValues>\n            4.9021130800247192e-01 5.6812518835067749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1003 -3.9418050437234342e-04</internalNodes>\n          <leafValues>\n            5.5708801746368408e-01 4.3182510137557983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1004 -1.3270479394122958e-04</internalNodes>\n          <leafValues>\n            5.6584399938583374e-01 4.3435549736022949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1005 -2.0125510636717081e-03</internalNodes>\n          <leafValues>\n            6.0567390918731689e-01 4.5375239849090576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1006 2.4854319635778666e-03</internalNodes>\n          <leafValues>\n            5.3904771804809570e-01 4.1380101442337036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1007 1.8237880431115627e-03</internalNodes>\n          <leafValues>\n            4.3548288941383362e-01 5.7171887159347534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1008 -1.6656659543514252e-02</internalNodes>\n          <leafValues>\n            3.0109131336212158e-01 5.2161228656768799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1009 8.0349558265879750e-04</internalNodes>\n          <leafValues>\n            5.3001511096954346e-01 3.8183969259262085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1010 3.4170378930866718e-03</internalNodes>\n          <leafValues>\n            5.3280287981033325e-01 4.2414000630378723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1011 -3.6222729249857366e-04</internalNodes>\n          <leafValues>\n            5.4917281866073608e-01 4.1869771480560303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1012 -1.1630020290613174e-01</internalNodes>\n          <leafValues>\n            1.4407220482826233e-01 5.2264511585235596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1013 -1.4695010147988796e-02</internalNodes>\n          <leafValues>\n            7.7477252483367920e-01 4.7157171368598938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1014 2.1972130052745342e-03</internalNodes>\n          <leafValues>\n            5.3554338216781616e-01 3.3156448602676392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1015 -4.6965209185145795e-04</internalNodes>\n          <leafValues>\n            5.7672351598739624e-01 4.4581368565559387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1016 6.5144998952746391e-03</internalNodes>\n          <leafValues>\n            5.2156740427017212e-01 3.6478888988494873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1017 2.1300060674548149e-02</internalNodes>\n          <leafValues>\n            4.9942049384117126e-01 1.5679509937763214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1018 3.1881409231573343e-03</internalNodes>\n          <leafValues>\n            4.7422000765800476e-01 6.2872701883316040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1019 9.0019777417182922e-04</internalNodes>\n          <leafValues>\n            5.3479540348052979e-01 3.9437520503997803e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1020 -5.1772277802228928e-03</internalNodes>\n          <leafValues>\n            6.7271918058395386e-01 5.0131380558013916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1021 -4.3764649890363216e-03</internalNodes>\n          <leafValues>\n            3.1066751480102539e-01 5.1287931203842163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1022 2.6299960445612669e-03</internalNodes>\n          <leafValues>\n            4.8863101005554199e-01 5.7552158832550049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1023 -2.0458688959479332e-03</internalNodes>\n          <leafValues>\n            6.0257941484451294e-01 4.5580768585205078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1024 6.9482706487178802e-02</internalNodes>\n          <leafValues>\n            5.2407479286193848e-01 2.1852590143680573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1025 2.4048939347267151e-02</internalNodes>\n          <leafValues>\n            5.0118672847747803e-01 2.0906220376491547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1026 3.1095340382307768e-03</internalNodes>\n          <leafValues>\n            4.8667120933532715e-01 7.1085482835769653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1027 -1.2503260513767600e-03</internalNodes>\n          <leafValues>\n            3.4078910946846008e-01 5.1561951637268066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1028 -1.0281190043315291e-03</internalNodes>\n          <leafValues>\n            5.5755722522735596e-01 4.4394320249557495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1029 -8.8893622159957886e-03</internalNodes>\n          <leafValues>\n            6.4020007848739624e-01 4.6204420924186707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1030 -6.1094801640138030e-04</internalNodes>\n          <leafValues>\n            3.7664419412612915e-01 5.4488998651504517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1031 -5.7686357758939266e-03</internalNodes>\n          <leafValues>\n            3.3186489343643188e-01 5.1336771249771118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1032 1.8506490159779787e-03</internalNodes>\n          <leafValues>\n            4.9035701155662537e-01 6.4069348573684692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1033 -9.9799469113349915e-02</internalNodes>\n          <leafValues>\n            1.5360510349273682e-01 5.0155621767044067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1034 -3.5128349065780640e-01</internalNodes>\n          <leafValues>\n            5.8823131024837494e-02 5.1743787527084351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1035 -4.5244570821523666e-02</internalNodes>\n          <leafValues>\n            6.9614887237548828e-01 4.6778729557991028e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1036 7.1481578052043915e-02</internalNodes>\n          <leafValues>\n            5.1679861545562744e-01 1.0380929708480835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1037 2.1895780228078365e-03</internalNodes>\n          <leafValues>\n            4.2730781435966492e-01 5.5320608615875244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1038 -5.9242651332169771e-04</internalNodes>\n          <leafValues>\n            4.6389439702033997e-01 5.2763891220092773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1039 1.6788389766588807e-03</internalNodes>\n          <leafValues>\n            5.3016489744186401e-01 3.9320349693298340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1040 -2.2163488902151585e-03</internalNodes>\n          <leafValues>\n            5.6306940317153931e-01 4.7570338845252991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1041 1.1568699846975505e-04</internalNodes>\n          <leafValues>\n            4.3075358867645264e-01 5.5357027053833008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1042 -7.2017288766801357e-03</internalNodes>\n          <leafValues>\n            1.4448820054531097e-01 5.1930642127990723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1043 8.9081272017210722e-04</internalNodes>\n          <leafValues>\n            4.3844321370124817e-01 5.5936211347579956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1044 1.9605009583756328e-04</internalNodes>\n          <leafValues>\n            5.3404158353805542e-01 4.7059568762779236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1045 5.2022142335772514e-04</internalNodes>\n          <leafValues>\n            5.2138561010360718e-01 3.8100790977478027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1046 9.4588572392240167e-04</internalNodes>\n          <leafValues>\n            4.7694149613380432e-01 6.1307388544082642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1047 9.1698471806012094e-05</internalNodes>\n          <leafValues>\n            4.2450091242790222e-01 5.4293632507324219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1048 2.1833200007677078e-03</internalNodes>\n          <leafValues>\n            5.4577308893203735e-01 4.1910758614540100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1049 -8.6039671441540122e-04</internalNodes>\n          <leafValues>\n            5.7645887136459351e-01 4.4716599583625793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1050 -1.3236239552497864e-02</internalNodes>\n          <leafValues>\n            6.3728231191635132e-01 4.6950098872184753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1051 4.3376701069064438e-04</internalNodes>\n          <leafValues>\n            5.3178739547729492e-01 3.9458298683166504e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>140</maxWeakCount>\n      <stageThreshold>6.9229873657226562e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1052 -2.4847149848937988e-02</internalNodes>\n          <leafValues>\n            6.5555167198181152e-01 3.8733118772506714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1053 6.1348611488938332e-03</internalNodes>\n          <leafValues>\n            3.7480720877647400e-01 5.9739977121353149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1054 6.4498498104512691e-03</internalNodes>\n          <leafValues>\n            5.4254919290542603e-01 2.5488111376762390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1055 6.3491211039945483e-04</internalNodes>\n          <leafValues>\n            2.4624420702457428e-01 5.3872537612915039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1056 1.4023890253156424e-03</internalNodes>\n          <leafValues>\n            5.5943220853805542e-01 3.5286578536033630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1057 3.0044000595808029e-04</internalNodes>\n          <leafValues>\n            3.9585039019584656e-01 5.7659381628036499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1058 1.0042409849120304e-04</internalNodes>\n          <leafValues>\n            3.6989969015121460e-01 5.5349981784820557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1059 -5.0841490738093853e-03</internalNodes>\n          <leafValues>\n            3.7110909819602966e-01 5.5478000640869141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1060 -1.9537260755896568e-02</internalNodes>\n          <leafValues>\n            7.4927550554275513e-01 4.5792970061302185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1061 -7.4532740654831287e-06</internalNodes>\n          <leafValues>\n            5.6497871875762939e-01 3.9040699601173401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1062 -3.6079459823668003e-03</internalNodes>\n          <leafValues>\n            3.3810880780220032e-01 5.2678012847900391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1063 2.0697501022368670e-03</internalNodes>\n          <leafValues>\n            5.5192911624908447e-01 3.7143889069557190e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1064 -4.6463840408250690e-04</internalNodes>\n          <leafValues>\n            5.6082147359848022e-01 4.1135668754577637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1065 7.5490452582016587e-04</internalNodes>\n          <leafValues>\n            3.5592061281204224e-01 5.3293561935424805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1066 -9.8322238773107529e-04</internalNodes>\n          <leafValues>\n            5.4147958755493164e-01 3.7632051110267639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1067 -1.9940640777349472e-02</internalNodes>\n          <leafValues>\n            6.3479030132293701e-01 4.7052991390228271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1068 3.7680300883948803e-03</internalNodes>\n          <leafValues>\n            3.9134898781776428e-01 5.5637162923812866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1069 -9.4528505578637123e-03</internalNodes>\n          <leafValues>\n            2.5548928976058960e-01 5.2151167392730713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1070 2.9560849070549011e-03</internalNodes>\n          <leafValues>\n            5.1746791601181030e-01 3.0639201402664185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1071 9.1078737750649452e-03</internalNodes>\n          <leafValues>\n            5.3884482383728027e-01 2.8859630227088928e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1072 1.8219229532405734e-03</internalNodes>\n          <leafValues>\n            4.3360430002212524e-01 5.8521968126296997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1073 1.4688739553093910e-02</internalNodes>\n          <leafValues>\n            5.2873617410659790e-01 2.8700059652328491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1074 -1.4387990348041058e-02</internalNodes>\n          <leafValues>\n            7.0194488763809204e-01 4.6473708748817444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1075 -1.8986649811267853e-02</internalNodes>\n          <leafValues>\n            2.9865521192550659e-01 5.2470117807388306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1076 1.1527639580890536e-03</internalNodes>\n          <leafValues>\n            4.3234738707542419e-01 5.9316617250442505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1077 1.0933670215308666e-02</internalNodes>\n          <leafValues>\n            5.2868640422821045e-01 3.1303191184997559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1078 -1.4932730235159397e-02</internalNodes>\n          <leafValues>\n            2.6584190130233765e-01 5.0840771198272705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1079 -2.9970539617352188e-04</internalNodes>\n          <leafValues>\n            5.4635268449783325e-01 3.7407240271568298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1080 4.1677621193230152e-03</internalNodes>\n          <leafValues>\n            4.7034969925880432e-01 7.4357217550277710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1081 -6.3905320130288601e-03</internalNodes>\n          <leafValues>\n            2.0692589879035950e-01 5.2805382013320923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1082 4.5029609464108944e-03</internalNodes>\n          <leafValues>\n            5.1826488971710205e-01 3.4835430979728699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1083 -9.2040365561842918e-03</internalNodes>\n          <leafValues>\n            6.8037772178649902e-01 4.9323600530624390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1084 8.1327259540557861e-02</internalNodes>\n          <leafValues>\n            5.0583988428115845e-01 2.2530519962310791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1085 -1.5079280734062195e-01</internalNodes>\n          <leafValues>\n            2.9634249210357666e-01 5.2646797895431519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1086 3.3179009333252907e-03</internalNodes>\n          <leafValues>\n            4.6554958820343018e-01 7.0729321241378784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1087 7.7402801252901554e-04</internalNodes>\n          <leafValues>\n            4.7803479433059692e-01 5.6682378053665161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1088 6.8199541419744492e-04</internalNodes>\n          <leafValues>\n            4.2869961261749268e-01 5.7221567630767822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1089 5.3671570494771004e-03</internalNodes>\n          <leafValues>\n            5.2993071079254150e-01 3.1146219372749329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1090 9.7018666565418243e-05</internalNodes>\n          <leafValues>\n            3.6746388673782349e-01 5.2694618701934814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1091 -1.2534089386463165e-01</internalNodes>\n          <leafValues>\n            2.3514920473098755e-01 5.2457910776138306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1092 -5.2516269497573376e-03</internalNodes>\n          <leafValues>\n            7.1159368753433228e-01 4.6937671303749084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1093 -7.8342109918594360e-03</internalNodes>\n          <leafValues>\n            4.4626510143280029e-01 5.4090857505798340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1094 -1.1310069821774960e-03</internalNodes>\n          <leafValues>\n            5.9456187486648560e-01 4.4176620244979858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1095 1.7601120052859187e-03</internalNodes>\n          <leafValues>\n            5.3532499074935913e-01 3.9734530448913574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1096 -8.1581249833106995e-04</internalNodes>\n          <leafValues>\n            3.7602680921554565e-01 5.2647268772125244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1097 -3.8687589112669230e-03</internalNodes>\n          <leafValues>\n            6.3099128007888794e-01 4.7498199343681335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1098 1.5207129763439298e-03</internalNodes>\n          <leafValues>\n            5.2301818132400513e-01 3.3612239360809326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1099 5.4586738348007202e-01</internalNodes>\n          <leafValues>\n            5.1671397686004639e-01 1.1726350337266922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1100 1.5650190412998199e-02</internalNodes>\n          <leafValues>\n            4.9794390797615051e-01 1.3932949304580688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1101 -1.1731860227882862e-02</internalNodes>\n          <leafValues>\n            7.1296507120132446e-01 4.9211961030960083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1102 -6.1765122227370739e-03</internalNodes>\n          <leafValues>\n            2.2881029546260834e-01 5.0497019290924072e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1103 2.2457661107182503e-03</internalNodes>\n          <leafValues>\n            4.6324339509010315e-01 6.0487258434295654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1104 -5.1915869116783142e-03</internalNodes>\n          <leafValues>\n            6.4674210548400879e-01 4.6021929383277893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1105 -2.3827880620956421e-02</internalNodes>\n          <leafValues>\n            1.4820009469985962e-01 5.2260792255401611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1106 1.0284580057486892e-03</internalNodes>\n          <leafValues>\n            5.1354891061782837e-01 3.3759570121765137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1107 -1.0078850202262402e-02</internalNodes>\n          <leafValues>\n            2.7405610680580139e-01 5.3035670518875122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1108 2.6168930344283581e-03</internalNodes>\n          <leafValues>\n            5.3326708078384399e-01 3.9724540710449219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1109 5.4385367548093200e-04</internalNodes>\n          <leafValues>\n            5.3656041622161865e-01 4.0634119510650635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1110 5.3510512225329876e-03</internalNodes>\n          <leafValues>\n            4.6537590026855469e-01 6.8890458345413208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1111 -1.5274790348485112e-03</internalNodes>\n          <leafValues>\n            5.4495012760162354e-01 3.6247238516807556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1112 -8.0624416470527649e-02</internalNodes>\n          <leafValues>\n            1.6560870409011841e-01 5.0002872943878174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1113 2.2192029282450676e-02</internalNodes>\n          <leafValues>\n            5.1327311992645264e-01 2.0028080046176910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1114 7.3100631125271320e-03</internalNodes>\n          <leafValues>\n            4.6179479360580444e-01 6.3665360212326050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1115 -6.4063072204589844e-03</internalNodes>\n          <leafValues>\n            5.9162509441375732e-01 4.8678609728813171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1116 -7.6415040530264378e-04</internalNodes>\n          <leafValues>\n            3.8884091377258301e-01 5.3157979249954224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1117 7.6734489994123578e-04</internalNodes>\n          <leafValues>\n            4.1590648889541626e-01 5.6052798032760620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1118 6.1474501853808761e-04</internalNodes>\n          <leafValues>\n            3.0890220403671265e-01 5.1201480627059937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1119 -5.0105270929634571e-03</internalNodes>\n          <leafValues>\n            3.9721998572349548e-01 5.2073061466217041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1120 -8.6909132078289986e-03</internalNodes>\n          <leafValues>\n            6.2574082612991333e-01 4.6085759997367859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1121 -1.6391459852457047e-02</internalNodes>\n          <leafValues>\n            2.0852099359035492e-01 5.2422660589218140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1122 4.0973909199237823e-04</internalNodes>\n          <leafValues>\n            5.2224272489547729e-01 3.7803208827972412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1123 -2.5242289993911982e-03</internalNodes>\n          <leafValues>\n            5.8039271831512451e-01 4.6118900179862976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1124 5.0945312250405550e-04</internalNodes>\n          <leafValues>\n            4.4012719392776489e-01 5.8460158109664917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1125 1.9656419754028320e-03</internalNodes>\n          <leafValues>\n            5.3223252296447754e-01 4.1845908761024475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1126 5.6298897834494710e-04</internalNodes>\n          <leafValues>\n            3.7418448925018311e-01 5.2345657348632812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1127 -6.7946797935292125e-04</internalNodes>\n          <leafValues>\n            4.6310418844223022e-01 5.3564780950546265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1128 7.2856349870562553e-03</internalNodes>\n          <leafValues>\n            5.0446701049804688e-01 2.3775640130043030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1129 -1.7459489405155182e-02</internalNodes>\n          <leafValues>\n            7.2891211509704590e-01 5.0504350662231445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1130 -2.5421749800443649e-02</internalNodes>\n          <leafValues>\n            6.6671347618103027e-01 4.6781000494956970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1131 -1.5647639520466328e-03</internalNodes>\n          <leafValues>\n            4.3917590379714966e-01 5.3236269950866699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1132 1.1444360017776489e-02</internalNodes>\n          <leafValues>\n            4.3464401364326477e-01 5.6800121068954468e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1133 -6.7352550104260445e-04</internalNodes>\n          <leafValues>\n            4.4771409034729004e-01 5.2968120574951172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1134 9.3194209039211273e-03</internalNodes>\n          <leafValues>\n            4.7402000427246094e-01 7.4626070261001587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1135 1.3328490604180843e-04</internalNodes>\n          <leafValues>\n            5.3650617599487305e-01 4.7521349787712097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1136 -7.8815799206495285e-03</internalNodes>\n          <leafValues>\n            1.7522190511226654e-01 5.0152552127838135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1137 -5.7985680177807808e-03</internalNodes>\n          <leafValues>\n            7.2712367773056030e-01 4.8962008953094482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1138 -3.8922499516047537e-04</internalNodes>\n          <leafValues>\n            4.0039089322090149e-01 5.3449410200119019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1139 -1.9288610201328993e-03</internalNodes>\n          <leafValues>\n            5.6056129932403564e-01 4.8039558529853821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1140 8.4214154630899429e-03</internalNodes>\n          <leafValues>\n            4.7532469034194946e-01 7.6236087083816528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1141 8.1655876711010933e-03</internalNodes>\n          <leafValues>\n            5.3932619094848633e-01 4.1916438937187195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1142 4.8280550981871784e-04</internalNodes>\n          <leafValues>\n            4.2408001422882080e-01 5.3998219966888428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1143 -2.7186630759388208e-03</internalNodes>\n          <leafValues>\n            4.2445999383926392e-01 5.4249238967895508e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1144 -1.2507230043411255e-02</internalNodes>\n          <leafValues>\n            5.8958417177200317e-01 4.5504111051559448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1145 -2.4286519736051559e-02</internalNodes>\n          <leafValues>\n            2.6471349596977234e-01 5.1891797780990601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1146 -2.9676330741494894e-03</internalNodes>\n          <leafValues>\n            7.3476827144622803e-01 4.7497498989105225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1147 -1.2528999708592892e-02</internalNodes>\n          <leafValues>\n            2.7560499310493469e-01 5.1775997877120972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1148 -1.0104000102728605e-03</internalNodes>\n          <leafValues>\n            3.5105609893798828e-01 5.1447242498397827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1149 -2.1348530426621437e-03</internalNodes>\n          <leafValues>\n            5.6379258632659912e-01 4.6673199534416199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1150 1.9564259797334671e-02</internalNodes>\n          <leafValues>\n            4.6145731210708618e-01 6.1376398801803589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1151 -9.7146347165107727e-02</internalNodes>\n          <leafValues>\n            2.9983788728713989e-01 5.1935559511184692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1152 4.5014568604528904e-03</internalNodes>\n          <leafValues>\n            5.0778847932815552e-01 3.0457559227943420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1153 6.3706971704959869e-03</internalNodes>\n          <leafValues>\n            4.8610189557075500e-01 6.8875008821487427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1154 -9.0721528977155685e-03</internalNodes>\n          <leafValues>\n            1.6733959317207336e-01 5.0175631046295166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1155 -5.3537208586931229e-03</internalNodes>\n          <leafValues>\n            2.6927569508552551e-01 5.2426332235336304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1156 -1.0932840406894684e-02</internalNodes>\n          <leafValues>\n            7.1838641166687012e-01 4.7360289096832275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1157 8.2356072962284088e-03</internalNodes>\n          <leafValues>\n            5.2239668369293213e-01 2.3898629844188690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1158 -1.0038160253316164e-03</internalNodes>\n          <leafValues>\n            5.7193559408187866e-01 4.4339430332183838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1159 4.0859128348529339e-03</internalNodes>\n          <leafValues>\n            5.4728418588638306e-01 4.1488361358642578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1160 1.5485419332981110e-01</internalNodes>\n          <leafValues>\n            4.9738121032714844e-01 6.1061598360538483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1161 2.0897459762636572e-04</internalNodes>\n          <leafValues>\n            4.7091740369796753e-01 5.4238891601562500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1162 3.3316991175524890e-04</internalNodes>\n          <leafValues>\n            4.0896269679069519e-01 5.3009921312332153e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1163 -1.0813400149345398e-02</internalNodes>\n          <leafValues>\n            6.1043697595596313e-01 4.9573341012001038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1164 4.5656010508537292e-02</internalNodes>\n          <leafValues>\n            5.0696891546249390e-01 2.8666600584983826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1165 1.2569549726322293e-03</internalNodes>\n          <leafValues>\n            4.8469170928001404e-01 6.3181710243225098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1166 -1.2015070021152496e-01</internalNodes>\n          <leafValues>\n            6.0526140034198761e-02 4.9809598922729492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1167 -1.0533799650147557e-04</internalNodes>\n          <leafValues>\n            5.3631097078323364e-01 4.7080421447753906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1168 -2.0703190565109253e-01</internalNodes>\n          <leafValues>\n            5.9660330414772034e-02 4.9790981411933899e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1169 1.2909180077258497e-04</internalNodes>\n          <leafValues>\n            4.7129771113395691e-01 5.3779977560043335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1170 3.8818528992123902e-04</internalNodes>\n          <leafValues>\n            4.3635380268096924e-01 5.5341911315917969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1171 -2.9243610333651304e-03</internalNodes>\n          <leafValues>\n            5.8111858367919922e-01 4.8252159357070923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1172 8.3882332546636462e-04</internalNodes>\n          <leafValues>\n            5.3117001056671143e-01 4.0381389856338501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1173 -1.9061550265178084e-03</internalNodes>\n          <leafValues>\n            3.7707018852233887e-01 5.2600151300430298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1174 8.9514348655939102e-03</internalNodes>\n          <leafValues>\n            4.7661679983139038e-01 7.6821839809417725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1175 1.3083459809422493e-02</internalNodes>\n          <leafValues>\n            5.2644628286361694e-01 3.0622220039367676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1176 -2.1159330010414124e-01</internalNodes>\n          <leafValues>\n            6.7371982336044312e-01 4.6958100795745850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1177 3.1493250280618668e-03</internalNodes>\n          <leafValues>\n            5.6448352336883545e-01 4.3869531154632568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1178 3.9754100725986063e-04</internalNodes>\n          <leafValues>\n            4.5260611176490784e-01 5.8956301212310791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1179 -1.3814480043947697e-03</internalNodes>\n          <leafValues>\n            6.0705822706222534e-01 4.9424138665199280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1180 -5.8122188784182072e-04</internalNodes>\n          <leafValues>\n            5.9982132911682129e-01 4.5082521438598633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1181 -2.3905329871922731e-03</internalNodes>\n          <leafValues>\n            4.2055889964103699e-01 5.2238482236862183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1182 2.7268929407000542e-02</internalNodes>\n          <leafValues>\n            5.2064472436904907e-01 3.5633018612861633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1183 -3.7658358924090862e-03</internalNodes>\n          <leafValues>\n            3.1447041034698486e-01 5.2188140153884888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1184 -1.4903489500284195e-03</internalNodes>\n          <leafValues>\n            3.3801960945129395e-01 5.1244372129440308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1185 -1.7428230494260788e-02</internalNodes>\n          <leafValues>\n            5.8299607038497925e-01 4.9197259545326233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1186 -1.5278030186891556e-02</internalNodes>\n          <leafValues>\n            6.1631447076797485e-01 4.6178871393203735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1187 3.1995609402656555e-02</internalNodes>\n          <leafValues>\n            5.1663571596145630e-01 1.7127640545368195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1188 -3.8256710395216942e-03</internalNodes>\n          <leafValues>\n            3.4080120921134949e-01 5.1313877105712891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1189 -8.5186436772346497e-03</internalNodes>\n          <leafValues>\n            6.1055189371109009e-01 4.9979418516159058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1190 9.0641621500253677e-04</internalNodes>\n          <leafValues>\n            4.3272709846496582e-01 5.5823111534118652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1191 1.0344849899411201e-02</internalNodes>\n          <leafValues>\n            4.8556530475616455e-01 5.4524201154708862e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>160</maxWeakCount>\n      <stageThreshold>7.9249076843261719e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1192 7.8981826081871986e-03</internalNodes>\n          <leafValues>\n            3.3325248956680298e-01 5.9464621543884277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1193 1.6170160379260778e-03</internalNodes>\n          <leafValues>\n            3.4906411170959473e-01 5.5778688192367554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1194 -5.5449741194024682e-04</internalNodes>\n          <leafValues>\n            5.5425661802291870e-01 3.2915300130844116e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1195 1.5428980113938451e-03</internalNodes>\n          <leafValues>\n            3.6125791072845459e-01 5.5459791421890259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1196 -1.0329450014978647e-03</internalNodes>\n          <leafValues>\n            3.5301390290260315e-01 5.5761402845382690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1197 7.7698158565908670e-04</internalNodes>\n          <leafValues>\n            3.9167788624763489e-01 5.6453210115432739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1198 1.4320300519466400e-01</internalNodes>\n          <leafValues>\n            4.6674820780754089e-01 7.0236331224441528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1199 -7.3866490274667740e-03</internalNodes>\n          <leafValues>\n            3.0736848711967468e-01 5.2892577648162842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1200 -6.2936742324382067e-04</internalNodes>\n          <leafValues>\n            5.6221181154251099e-01 4.0370491147041321e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1201 7.8893528552725911e-04</internalNodes>\n          <leafValues>\n            5.2676612138748169e-01 3.5578748583793640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1202 -1.2228050269186497e-02</internalNodes>\n          <leafValues>\n            6.6683208942413330e-01 4.6255499124526978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1203 3.5420239437371492e-03</internalNodes>\n          <leafValues>\n            5.5214381217956543e-01 3.8696730136871338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1204 -1.0585320414975286e-03</internalNodes>\n          <leafValues>\n            3.6286780238151550e-01 5.3209269046783447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1205 1.4935660146875307e-05</internalNodes>\n          <leafValues>\n            4.6324449777603149e-01 5.3633230924606323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1206 5.2537708543241024e-03</internalNodes>\n          <leafValues>\n            5.1322317123413086e-01 3.2657089829444885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1207 -8.2338023930788040e-03</internalNodes>\n          <leafValues>\n            6.6936898231506348e-01 4.7741401195526123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1208 2.1866810129722580e-05</internalNodes>\n          <leafValues>\n            4.0538620948791504e-01 5.4579311609268188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1209 -3.8150229956954718e-03</internalNodes>\n          <leafValues>\n            6.4549958705902100e-01 4.7931781411170959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1210 1.1105879675596952e-03</internalNodes>\n          <leafValues>\n            5.2704071998596191e-01 3.5296788811683655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1211 -5.7707689702510834e-03</internalNodes>\n          <leafValues>\n            3.8035470247268677e-01 5.3529578447341919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1212 -3.0158339068293571e-03</internalNodes>\n          <leafValues>\n            5.3394031524658203e-01 3.8871330022811890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1213 -8.5453689098358154e-04</internalNodes>\n          <leafValues>\n            3.5646161437034607e-01 5.2736037969589233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1214 1.1050510220229626e-02</internalNodes>\n          <leafValues>\n            4.6719071269035339e-01 6.8497377634048462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1215 4.2605839669704437e-02</internalNodes>\n          <leafValues>\n            5.1514732837677002e-01 7.0220090448856354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1216 -3.0781750101596117e-03</internalNodes>\n          <leafValues>\n            3.0416610836982727e-01 5.1526021957397461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1217 -5.4815728217363358e-03</internalNodes>\n          <leafValues>\n            6.4302957057952881e-01 4.8972299695014954e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1218 3.1881860923022032e-03</internalNodes>\n          <leafValues>\n            5.3074932098388672e-01 3.8262099027633667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1219 3.5947180003859103e-04</internalNodes>\n          <leafValues>\n            4.6500471234321594e-01 5.4219049215316772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1220 -4.0705031715333462e-03</internalNodes>\n          <leafValues>\n            2.8496798872947693e-01 5.0791162252426147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1221 -1.4594170264899731e-02</internalNodes>\n          <leafValues>\n            2.9716458916664124e-01 5.1284617185592651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1222 -1.1947689927183092e-04</internalNodes>\n          <leafValues>\n            5.6310981512069702e-01 4.3430820107460022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1223 -6.9344649091362953e-04</internalNodes>\n          <leafValues>\n            4.4035780429840088e-01 5.3599590063095093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1224 1.4834799912932795e-05</internalNodes>\n          <leafValues>\n            3.4210088849067688e-01 5.1646977663040161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1225 9.0296985581517220e-03</internalNodes>\n          <leafValues>\n            4.6393430233001709e-01 6.1140751838684082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1226 -8.0640818923711777e-03</internalNodes>\n          <leafValues>\n            2.8201588988304138e-01 5.0754940509796143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1227 2.6062119752168655e-02</internalNodes>\n          <leafValues>\n            5.2089059352874756e-01 2.6887780427932739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1228 1.7314659431576729e-02</internalNodes>\n          <leafValues>\n            4.6637138724327087e-01 6.7385399341583252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1229 2.2666640579700470e-02</internalNodes>\n          <leafValues>\n            5.2093499898910522e-01 2.2127239406108856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1230 -2.1965929772704840e-03</internalNodes>\n          <leafValues>\n            6.0631012916564941e-01 4.5381900668144226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1231 -9.5282476395368576e-03</internalNodes>\n          <leafValues>\n            4.6352049708366394e-01 5.2474308013916016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1232 8.0943619832396507e-03</internalNodes>\n          <leafValues>\n            5.2894401550292969e-01 3.9138820767402649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1233 -7.2877332568168640e-02</internalNodes>\n          <leafValues>\n            7.7520018815994263e-01 4.9902349710464478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1234 -6.9009521976113319e-03</internalNodes>\n          <leafValues>\n            2.4280390143394470e-01 5.0480902194976807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1235 -1.1308239772915840e-02</internalNodes>\n          <leafValues>\n            5.7343649864196777e-01 4.8423761129379272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1236 5.9613201767206192e-02</internalNodes>\n          <leafValues>\n            5.0298362970352173e-01 2.5249770283699036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1237 -2.8624620754271746e-03</internalNodes>\n          <leafValues>\n            6.0730451345443726e-01 4.8984599113464355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1238 4.4781449250876904e-03</internalNodes>\n          <leafValues>\n            5.0152891874313354e-01 2.2203169763088226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1239 -1.7513240454718471e-03</internalNodes>\n          <leafValues>\n            6.6144287586212158e-01 4.9338689446449280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1240 4.0163420140743256e-02</internalNodes>\n          <leafValues>\n            5.1808780431747437e-01 3.7410449981689453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1241 3.4768949262797832e-04</internalNodes>\n          <leafValues>\n            4.7204169631004333e-01 5.8180320262908936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1242 2.6551650371402502e-03</internalNodes>\n          <leafValues>\n            3.8050109148025513e-01 5.2213358879089355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1243 -8.7706279009580612e-03</internalNodes>\n          <leafValues>\n            2.9441660642623901e-01 5.2312952280044556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1244 -5.5122091434895992e-03</internalNodes>\n          <leafValues>\n            7.3461771011352539e-01 4.7228169441223145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1245 6.8672042107209563e-04</internalNodes>\n          <leafValues>\n            5.4528760910034180e-01 4.2424130439758301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1246 5.6019669864326715e-04</internalNodes>\n          <leafValues>\n            4.3988621234893799e-01 5.6012850999832153e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1247 2.4143769405782223e-03</internalNodes>\n          <leafValues>\n            4.7416868805885315e-01 6.1366218328475952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1248 -1.5680900542065501e-03</internalNodes>\n          <leafValues>\n            6.0445529222488403e-01 4.5164099335670471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1249 -3.6827491130679846e-03</internalNodes>\n          <leafValues>\n            2.4524590373039246e-01 5.2949821949005127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1250 -2.9409190756268799e-04</internalNodes>\n          <leafValues>\n            3.7328380346298218e-01 5.2514511346817017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1251 4.2847759323194623e-04</internalNodes>\n          <leafValues>\n            5.4988098144531250e-01 4.0655350685119629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1252 -4.8817070201039314e-03</internalNodes>\n          <leafValues>\n            2.1399089694023132e-01 4.9999570846557617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1253 2.7272020815871656e-04</internalNodes>\n          <leafValues>\n            4.6502870321273804e-01 5.8134287595748901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1254 2.0947199664078653e-04</internalNodes>\n          <leafValues>\n            4.3874868750572205e-01 5.5727928876876831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1255 4.8501189798116684e-02</internalNodes>\n          <leafValues>\n            5.2449727058410645e-01 3.2128891348838806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1256 -4.5166411437094212e-03</internalNodes>\n          <leafValues>\n            6.0568130016326904e-01 4.5458820462226868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1257 -1.2291680090129375e-02</internalNodes>\n          <leafValues>\n            2.0409290492534637e-01 5.1522141695022583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1258 4.8549679922871292e-04</internalNodes>\n          <leafValues>\n            5.2376049757003784e-01 3.7395030260086060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1259 3.0556049197912216e-02</internalNodes>\n          <leafValues>\n            4.9605339765548706e-01 5.9382462501525879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1260 -1.5105320198927075e-04</internalNodes>\n          <leafValues>\n            5.3513038158416748e-01 4.1452041268348694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1261 2.4937440175563097e-03</internalNodes>\n          <leafValues>\n            4.6933668851852417e-01 5.5149412155151367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1262 -1.2382130138576031e-02</internalNodes>\n          <leafValues>\n            6.7913967370986938e-01 4.6816679835319519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1263 -5.1333461888134480e-03</internalNodes>\n          <leafValues>\n            3.6087390780448914e-01 5.2291601896286011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1264 5.1919277757406235e-04</internalNodes>\n          <leafValues>\n            5.3000730276107788e-01 3.6336138844490051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1265 1.5060420334339142e-01</internalNodes>\n          <leafValues>\n            5.1573169231414795e-01 2.2117820382118225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1266 7.7144149690866470e-03</internalNodes>\n          <leafValues>\n            4.4104969501495361e-01 5.7766091823577881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1267 9.4443522393703461e-03</internalNodes>\n          <leafValues>\n            5.4018551111221313e-01 3.7566500902175903e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1268 2.5006249779835343e-04</internalNodes>\n          <leafValues>\n            4.3682709336280823e-01 5.6073749065399170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1269 -3.3077150583267212e-03</internalNodes>\n          <leafValues>\n            4.2447990179061890e-01 5.5182307958602905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1270 7.4048910755664110e-04</internalNodes>\n          <leafValues>\n            4.4969621300697327e-01 5.9005767107009888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1271 4.4092051684856415e-02</internalNodes>\n          <leafValues>\n            5.2934932708740234e-01 3.1563550233840942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1272 3.3639909233897924e-03</internalNodes>\n          <leafValues>\n            4.4832968711853027e-01 5.8486622571945190e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1273 -3.9760079234838486e-03</internalNodes>\n          <leafValues>\n            4.5595070719718933e-01 5.4836392402648926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1274 2.7716930489987135e-03</internalNodes>\n          <leafValues>\n            5.3417861461639404e-01 3.7924841046333313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1275 -2.4123019829858094e-04</internalNodes>\n          <leafValues>\n            5.6671887636184692e-01 4.5769730210304260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1276 4.9425667384639382e-04</internalNodes>\n          <leafValues>\n            4.4212448596954346e-01 5.6287872791290283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1277 -3.8876468897797167e-04</internalNodes>\n          <leafValues>\n            4.2883709073066711e-01 5.3910630941390991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1278 -5.0048898905515671e-02</internalNodes>\n          <leafValues>\n            6.8995130062103271e-01 4.7037428617477417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1279 -3.6635480821132660e-02</internalNodes>\n          <leafValues>\n            2.2177790105342865e-01 5.1918262243270874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1280 2.4273579474538565e-03</internalNodes>\n          <leafValues>\n            5.1362240314483643e-01 3.4973978996276855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1281 1.9558030180633068e-03</internalNodes>\n          <leafValues>\n            4.8261928558349609e-01 6.4083808660507202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1282 -1.7494610510766506e-03</internalNodes>\n          <leafValues>\n            3.9228358864784241e-01 5.2726852893829346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1283 1.3955079950392246e-02</internalNodes>\n          <leafValues>\n            5.0782018899917603e-01 8.4165048599243164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1284 -2.1896739781368524e-04</internalNodes>\n          <leafValues>\n            5.5204898118972778e-01 4.3142348527908325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1285 -1.5131309628486633e-03</internalNodes>\n          <leafValues>\n            3.9346051216125488e-01 5.3825712203979492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1286 -4.3622800149023533e-03</internalNodes>\n          <leafValues>\n            7.3706287145614624e-01 4.7364759445190430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1287 6.5160587430000305e-02</internalNodes>\n          <leafValues>\n            5.1592797040939331e-01 3.2815951108932495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1288 -2.3567399475723505e-03</internalNodes>\n          <leafValues>\n            3.6728268861770630e-01 5.1728862524032593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1289 1.5146659687161446e-02</internalNodes>\n          <leafValues>\n            5.0314939022064209e-01 6.6876041889190674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1290 -2.2850960493087769e-02</internalNodes>\n          <leafValues>\n            6.7675197124481201e-01 4.7095969319343567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1291 4.8867650330066681e-03</internalNodes>\n          <leafValues>\n            5.2579981088638306e-01 4.0598788857460022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1292 1.7619599821045995e-03</internalNodes>\n          <leafValues>\n            4.6962729096412659e-01 6.6882789134979248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1293 -1.2942519970238209e-03</internalNodes>\n          <leafValues>\n            4.3207129836082458e-01 5.3442817926406860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1294 1.0929949581623077e-02</internalNodes>\n          <leafValues>\n            4.9977061152458191e-01 1.6374860703945160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1295 2.9958489903947338e-05</internalNodes>\n          <leafValues>\n            4.2824178934097290e-01 5.6332242488861084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1296 -6.5884361974895000e-03</internalNodes>\n          <leafValues>\n            6.7721211910247803e-01 4.7005268931388855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1297 3.2527779694646597e-03</internalNodes>\n          <leafValues>\n            5.3133970499038696e-01 4.5361489057540894e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1298 -4.0435739792883396e-03</internalNodes>\n          <leafValues>\n            5.6600618362426758e-01 4.4133889675140381e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1299 -1.2523540062829852e-03</internalNodes>\n          <leafValues>\n            3.7319138646125793e-01 5.3564518690109253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1300 1.9246719602961093e-04</internalNodes>\n          <leafValues>\n            5.1899862289428711e-01 3.7388110160827637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1301 -3.8589671254158020e-02</internalNodes>\n          <leafValues>\n            2.9563739895820618e-01 5.1888108253479004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1302 1.5489870565943420e-04</internalNodes>\n          <leafValues>\n            4.3471351265907288e-01 5.5095332860946655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1303 -3.3763848245143890e-02</internalNodes>\n          <leafValues>\n            3.2303300499916077e-01 5.1954758167266846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1304 -8.2657067105174065e-03</internalNodes>\n          <leafValues>\n            5.9754890203475952e-01 4.5521140098571777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1305 1.4481440302915871e-05</internalNodes>\n          <leafValues>\n            4.7456780076026917e-01 5.4974269866943359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1306 1.4951299817766994e-05</internalNodes>\n          <leafValues>\n            4.3244731426239014e-01 5.4806441068649292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1307 -1.8741799518465996e-02</internalNodes>\n          <leafValues>\n            1.5800529718399048e-01 5.1785331964492798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1308 1.7572239739820361e-03</internalNodes>\n          <leafValues>\n            4.5176368951797485e-01 5.7737642526626587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1309 -3.1391119118779898e-03</internalNodes>\n          <leafValues>\n            4.1496479511260986e-01 5.4608422517776489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1310 6.6656779381446540e-05</internalNodes>\n          <leafValues>\n            4.0390908718109131e-01 5.2930849790573120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1311 6.7743421532213688e-03</internalNodes>\n          <leafValues>\n            4.7676518559455872e-01 6.1219561100006104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1312 -7.3868161998689175e-03</internalNodes>\n          <leafValues>\n            3.5862588882446289e-01 5.1872807741165161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1313 1.4040930196642876e-02</internalNodes>\n          <leafValues>\n            4.7121399641036987e-01 5.5761557817459106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1314 -5.5258329957723618e-03</internalNodes>\n          <leafValues>\n            2.6610270142555237e-01 5.0392812490463257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1315 3.8684239983558655e-01</internalNodes>\n          <leafValues>\n            5.1443397998809814e-01 2.5258991122245789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1316 1.1459240340627730e-04</internalNodes>\n          <leafValues>\n            4.2849949002265930e-01 5.4233711957931519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1317 -1.8467569723725319e-02</internalNodes>\n          <leafValues>\n            3.8858351111412048e-01 5.2130621671676636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1318 -4.5907011372037232e-04</internalNodes>\n          <leafValues>\n            5.4125630855560303e-01 4.2359098792076111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1319 1.2527540093287826e-03</internalNodes>\n          <leafValues>\n            4.8993051052093506e-01 6.6240912675857544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1320 1.4910609461367130e-03</internalNodes>\n          <leafValues>\n            5.2867782115936279e-01 4.0400519967079163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1321 -7.5435562757775187e-04</internalNodes>\n          <leafValues>\n            6.0329902172088623e-01 4.7951200604438782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1322 -6.9478838704526424e-03</internalNodes>\n          <leafValues>\n            4.0844011306762695e-01 5.3735041618347168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1323 2.8092920547351241e-04</internalNodes>\n          <leafValues>\n            4.8460629582405090e-01 5.7593822479248047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1324 9.6073717577382922e-04</internalNodes>\n          <leafValues>\n            5.1647412776947021e-01 3.5549798607826233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1325 -2.6883929967880249e-04</internalNodes>\n          <leafValues>\n            5.6775820255279541e-01 4.7317659854888916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1326 2.1599370520561934e-03</internalNodes>\n          <leafValues>\n            4.7314870357513428e-01 7.0705670118331909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1327 5.6235301308333874e-03</internalNodes>\n          <leafValues>\n            5.2402430772781372e-01 2.7817919850349426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1328 -5.0243991427123547e-03</internalNodes>\n          <leafValues>\n            2.8370139002799988e-01 5.0623041391372681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1329 -9.7611639648675919e-03</internalNodes>\n          <leafValues>\n            7.4007177352905273e-01 4.9345690011978149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1330 4.1515100747346878e-03</internalNodes>\n          <leafValues>\n            5.1191312074661255e-01 3.4070080518722534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1331 6.2465080991387367e-03</internalNodes>\n          <leafValues>\n            4.9237880110740662e-01 6.5790587663650513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1332 -7.0597478188574314e-03</internalNodes>\n          <leafValues>\n            2.4347110092639923e-01 5.0328421592712402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1333 -2.0587709732353687e-03</internalNodes>\n          <leafValues>\n            5.9003108739852905e-01 4.6950870752334595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1334 -2.4146060459315777e-03</internalNodes>\n          <leafValues>\n            3.6473178863525391e-01 5.1892018318176270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1335 -1.4817609917372465e-03</internalNodes>\n          <leafValues>\n            6.0349482297897339e-01 4.9401280283927917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1336 -6.3016400672495365e-03</internalNodes>\n          <leafValues>\n            5.8189898729324341e-01 4.5604279637336731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1337 3.4763428848236799e-03</internalNodes>\n          <leafValues>\n            5.2174758911132812e-01 3.4839931130409241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1338 -2.2250870242714882e-02</internalNodes>\n          <leafValues>\n            2.3607000708580017e-01 5.0320827960968018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1339 -3.0612550675868988e-02</internalNodes>\n          <leafValues>\n            6.4991867542266846e-01 4.9149191379547119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1340 1.3057479634881020e-02</internalNodes>\n          <leafValues>\n            4.4133231043815613e-01 5.6837642192840576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1341 -6.0095742810517550e-04</internalNodes>\n          <leafValues>\n            4.3597310781478882e-01 5.3334832191467285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1342 -4.1514250915497541e-04</internalNodes>\n          <leafValues>\n            5.5040627717971802e-01 4.3260601162910461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1343 -1.3776290230453014e-02</internalNodes>\n          <leafValues>\n            4.0641129016876221e-01 5.2015489339828491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1344 -3.2296508550643921e-02</internalNodes>\n          <leafValues>\n            4.7351971268653870e-02 4.9771949648857117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1345 5.3556978702545166e-02</internalNodes>\n          <leafValues>\n            4.8817330598831177e-01 6.6669392585754395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1346 8.1889545544981956e-03</internalNodes>\n          <leafValues>\n            5.4000371694564819e-01 4.2408201098442078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1347 2.1055320394225419e-04</internalNodes>\n          <leafValues>\n            4.8020479083061218e-01 5.5638527870178223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1348 -2.4382730480283499e-03</internalNodes>\n          <leafValues>\n            7.3877930641174316e-01 4.7736850380897522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1349 3.2835570164024830e-03</internalNodes>\n          <leafValues>\n            5.2885460853576660e-01 3.1712919473648071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1350 2.3729570675641298e-03</internalNodes>\n          <leafValues>\n            4.7508129477500916e-01 7.0601707696914673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1351 -1.4541699783876538e-03</internalNodes>\n          <leafValues>\n            3.8117301464080811e-01 5.3307390213012695e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>177</maxWeakCount>\n      <stageThreshold>8.7696029663085938e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1352 5.5755238980054855e-02</internalNodes>\n          <leafValues>\n            4.0191569924354553e-01 6.8060368299484253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1353 2.4730248842388391e-03</internalNodes>\n          <leafValues>\n            3.3511489629745483e-01 5.9657198190689087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1354 -3.5031698644161224e-04</internalNodes>\n          <leafValues>\n            5.5577081441879272e-01 3.4822869300842285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1355 5.4167630150914192e-04</internalNodes>\n          <leafValues>\n            4.2608588933944702e-01 5.6933808326721191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1356 7.7193678589537740e-04</internalNodes>\n          <leafValues>\n            3.4942400455474854e-01 5.4336887598037720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1357 -1.5999219613149762e-03</internalNodes>\n          <leafValues>\n            4.0284991264343262e-01 5.4843592643737793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1358 -1.1832080053864047e-04</internalNodes>\n          <leafValues>\n            3.8069018721580505e-01 5.4254651069641113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1359 3.2909031142480671e-04</internalNodes>\n          <leafValues>\n            2.6201000809669495e-01 5.4295217990875244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1360 2.9518108931370080e-04</internalNodes>\n          <leafValues>\n            3.7997689843177795e-01 5.3992640972137451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1361 9.0466710389591753e-05</internalNodes>\n          <leafValues>\n            4.4336450099945068e-01 5.4402261972427368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1362 1.5007190086180344e-05</internalNodes>\n          <leafValues>\n            3.7196549773216248e-01 5.4091197252273560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1363 1.3935610651969910e-01</internalNodes>\n          <leafValues>\n            5.5253958702087402e-01 4.4790428876876831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1364 1.6461990308016539e-03</internalNodes>\n          <leafValues>\n            4.2645010352134705e-01 5.7721698284149170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1365 4.9984431825578213e-04</internalNodes>\n          <leafValues>\n            4.3595260381698608e-01 5.6858712434768677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1366 -1.0971280280500650e-03</internalNodes>\n          <leafValues>\n            3.3901369571685791e-01 5.2054089307785034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1367 6.6919892560690641e-04</internalNodes>\n          <leafValues>\n            4.5574560761451721e-01 5.9806597232818604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1368 8.6471042595803738e-04</internalNodes>\n          <leafValues>\n            5.1348412036895752e-01 2.9440331459045410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1369 -2.7182599296793342e-04</internalNodes>\n          <leafValues>\n            3.9065781235694885e-01 5.3771811723709106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1370 3.0249499104684219e-05</internalNodes>\n          <leafValues>\n            3.6796098947525024e-01 5.2256888151168823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1371 -8.5225896909832954e-03</internalNodes>\n          <leafValues>\n            7.2931021451950073e-01 4.8923650383949280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1372 1.6705560265108943e-03</internalNodes>\n          <leafValues>\n            4.3453249335289001e-01 5.6961381435394287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1373 -7.1433838456869125e-03</internalNodes>\n          <leafValues>\n            2.5912800431251526e-01 5.2256238460540771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1374 -1.6319369897246361e-02</internalNodes>\n          <leafValues>\n            6.9222790002822876e-01 4.6515759825706482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1375 4.8034260980784893e-03</internalNodes>\n          <leafValues>\n            5.3522628545761108e-01 3.2863029837608337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1376 -7.5421929359436035e-03</internalNodes>\n          <leafValues>\n            2.0405440032482147e-01 5.0345462560653687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1377 -1.4363110065460205e-02</internalNodes>\n          <leafValues>\n            6.8048888444900513e-01 4.8890590667724609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1378 8.9063588529825211e-04</internalNodes>\n          <leafValues>\n            5.3106957674026489e-01 3.8954809308052063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1379 -4.4060191139578819e-03</internalNodes>\n          <leafValues>\n            5.7415628433227539e-01 4.3724268674850464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1380 -1.8862540309783071e-04</internalNodes>\n          <leafValues>\n            2.8317859768867493e-01 5.0982052087783813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1381 -3.7979281041771173e-03</internalNodes>\n          <leafValues>\n            3.3725079894065857e-01 5.2465802431106567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1382 1.4627049677073956e-04</internalNodes>\n          <leafValues>\n            5.3066742420196533e-01 3.9117100834846497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1383 -4.9164638767251745e-05</internalNodes>\n          <leafValues>\n            5.4624962806701660e-01 3.9427208900451660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1384 -3.3582501113414764e-02</internalNodes>\n          <leafValues>\n            2.1578240394592285e-01 5.0482118129730225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1385 -3.5339309833943844e-03</internalNodes>\n          <leafValues>\n            6.4653122425079346e-01 4.8726969957351685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1386 5.0144111737608910e-03</internalNodes>\n          <leafValues>\n            4.6176680922508240e-01 6.2480747699737549e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1387 1.8817370757460594e-02</internalNodes>\n          <leafValues>\n            5.2206891775131226e-01 2.0000520348548889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1388 -1.3434339780360460e-03</internalNodes>\n          <leafValues>\n            4.0145379304885864e-01 5.3016197681427002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1389 1.7557960236445069e-03</internalNodes>\n          <leafValues>\n            4.7940391302108765e-01 5.6531697511672974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1390 -9.5637463033199310e-02</internalNodes>\n          <leafValues>\n            2.0341950654983521e-01 5.0067067146301270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1391 -2.2241229191422462e-02</internalNodes>\n          <leafValues>\n            7.6724731922149658e-01 5.0463402271270752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1392 -1.5575819648802280e-02</internalNodes>\n          <leafValues>\n            7.4903422594070435e-01 4.7558510303497314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1393 5.3599118255078793e-03</internalNodes>\n          <leafValues>\n            5.3653037548065186e-01 4.0046709775924683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1394 -2.1763499826192856e-02</internalNodes>\n          <leafValues>\n            7.4015498161315918e-02 4.9641749262809753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1395 -1.6561590135097504e-01</internalNodes>\n          <leafValues>\n            2.8591030836105347e-01 5.2180862426757812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1396 1.6461320046801120e-04</internalNodes>\n          <leafValues>\n            4.1916158795356750e-01 5.3807932138442993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1397 -8.9077502489089966e-03</internalNodes>\n          <leafValues>\n            6.2731927633285522e-01 4.8774048686027527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1398 8.6346449097618461e-04</internalNodes>\n          <leafValues>\n            5.1599407196044922e-01 3.6710259318351746e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1399 -1.3751760125160217e-03</internalNodes>\n          <leafValues>\n            5.8843767642974854e-01 4.5790839195251465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1400 -1.4081239933148026e-03</internalNodes>\n          <leafValues>\n            3.5605099797248840e-01 5.1399451494216919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1401 -3.9342888630926609e-03</internalNodes>\n          <leafValues>\n            5.9942889213562012e-01 4.6642720699310303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1402 -3.1966928392648697e-02</internalNodes>\n          <leafValues>\n            3.3454620838165283e-01 5.1441830396652222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1403 -1.5089280168467667e-05</internalNodes>\n          <leafValues>\n            5.5826562643051147e-01 4.4140571355819702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1404 5.1994470413774252e-04</internalNodes>\n          <leafValues>\n            4.6236801147460938e-01 6.1689937114715576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1405 -3.4220460802316666e-03</internalNodes>\n          <leafValues>\n            6.5570747852325439e-01 4.9748051166534424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1406 1.7723299970384687e-04</internalNodes>\n          <leafValues>\n            5.2695018053054810e-01 3.9019080996513367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1407 1.5716759953647852e-03</internalNodes>\n          <leafValues>\n            4.6333730220794678e-01 5.7904577255249023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1408 -8.9041329920291901e-03</internalNodes>\n          <leafValues>\n            2.6896080374717712e-01 5.0535911321640015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1409 4.0677518700249493e-04</internalNodes>\n          <leafValues>\n            5.4566031694412231e-01 4.3298989534378052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1410 6.7604780197143555e-03</internalNodes>\n          <leafValues>\n            4.6489939093589783e-01 6.6897618770599365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1411 2.9100088868290186e-03</internalNodes>\n          <leafValues>\n            5.3097039461135864e-01 3.3778399229049683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1412 1.3885459629818797e-03</internalNodes>\n          <leafValues>\n            4.0747389197349548e-01 5.3491330146789551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1413 -7.6764263212680817e-02</internalNodes>\n          <leafValues>\n            1.9921760261058807e-01 5.2282422780990601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1414 -2.2688310127705336e-04</internalNodes>\n          <leafValues>\n            5.4385018348693848e-01 4.2530721426010132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1415 -6.3094152137637138e-03</internalNodes>\n          <leafValues>\n            4.2591789364814758e-01 5.3789097070693970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1416 -1.1007279902696609e-01</internalNodes>\n          <leafValues>\n            6.9041568040847778e-01 4.7217491269111633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1417 2.8619659133255482e-04</internalNodes>\n          <leafValues>\n            4.5249149203300476e-01 5.5483061075210571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1418 2.9425329557852820e-05</internalNodes>\n          <leafValues>\n            5.3703737258911133e-01 4.2364639043807983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1419 -2.4886570870876312e-02</internalNodes>\n          <leafValues>\n            6.4235579967498779e-01 4.9693039059638977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1420 3.3148851245641708e-02</internalNodes>\n          <leafValues>\n            4.9884751439094543e-01 1.6138119995594025e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1421 7.8491691965609789e-04</internalNodes>\n          <leafValues>\n            5.4160261154174805e-01 4.2230090498924255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1422 4.7087189741432667e-03</internalNodes>\n          <leafValues>\n            4.5763289928436279e-01 6.0275578498840332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1423 2.4144479539245367e-03</internalNodes>\n          <leafValues>\n            5.3089731931686401e-01 4.4224989414215088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1424 1.9523180089890957e-03</internalNodes>\n          <leafValues>\n            4.7056341171264648e-01 6.6633248329162598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1425 1.3031980488449335e-03</internalNodes>\n          <leafValues>\n            4.4061261415481567e-01 5.5269622802734375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1426 4.4735497795045376e-03</internalNodes>\n          <leafValues>\n            5.1290237903594971e-01 3.3014988899230957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1427 -2.6652868837118149e-03</internalNodes>\n          <leafValues>\n            3.1354710459709167e-01 5.1750361919403076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1428 1.3666770246345550e-04</internalNodes>\n          <leafValues>\n            4.1193708777427673e-01 5.3068768978118896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1429 -1.7126450315117836e-02</internalNodes>\n          <leafValues>\n            6.1778062582015991e-01 4.8365789651870728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1430 -2.6601430727168918e-04</internalNodes>\n          <leafValues>\n            3.6543309688568115e-01 5.1697367429733276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1431 -2.2932380437850952e-02</internalNodes>\n          <leafValues>\n            3.4909150004386902e-01 5.1639920473098755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1432 2.3316550068557262e-03</internalNodes>\n          <leafValues>\n            5.1662999391555786e-01 3.7093898653984070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1433 1.6925660893321037e-02</internalNodes>\n          <leafValues>\n            5.0147360563278198e-01 8.0539882183074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1434 -8.9858826249837875e-03</internalNodes>\n          <leafValues>\n            6.4707887172698975e-01 4.6570208668708801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1435 -1.1874699965119362e-02</internalNodes>\n          <leafValues>\n            3.2463788986206055e-01 5.2587550878524780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1436 1.9350569345988333e-04</internalNodes>\n          <leafValues>\n            5.1919418573379517e-01 3.8396438956260681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1437 5.8713490143418312e-03</internalNodes>\n          <leafValues>\n            4.9181339144706726e-01 6.1870431900024414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1438 -2.4838790297508240e-01</internalNodes>\n          <leafValues>\n            1.8368029594421387e-01 4.9881500005722046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1439 1.2256000190973282e-02</internalNodes>\n          <leafValues>\n            5.2270537614822388e-01 3.6320298910140991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1440 8.3990179700776935e-04</internalNodes>\n          <leafValues>\n            4.4902500510215759e-01 5.7741481065750122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1441 2.5407369248569012e-03</internalNodes>\n          <leafValues>\n            4.8047870397567749e-01 5.8582991361618042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1442 -1.4822429977357388e-02</internalNodes>\n          <leafValues>\n            2.5210499763488770e-01 5.0235372781753540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1443 -5.7973959483206272e-03</internalNodes>\n          <leafValues>\n            5.9966957569122314e-01 4.8537150025367737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1444 7.2662148158997297e-04</internalNodes>\n          <leafValues>\n            5.1537168025970459e-01 3.6717799305915833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1445 -1.7232580110430717e-02</internalNodes>\n          <leafValues>\n            6.6217190027236938e-01 4.9946561455726624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1446 7.8624086454510689e-03</internalNodes>\n          <leafValues>\n            4.6333950757980347e-01 6.2561017274856567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1447 -4.7343620099127293e-03</internalNodes>\n          <leafValues>\n            3.6155730485916138e-01 5.2818852663040161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1448 8.3048478700220585e-04</internalNodes>\n          <leafValues>\n            4.4428890943527222e-01 5.5509579181671143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1449 7.6602199114859104e-03</internalNodes>\n          <leafValues>\n            5.1629352569580078e-01 2.6133549213409424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1450 -4.1048377752304077e-03</internalNodes>\n          <leafValues>\n            2.7896320819854736e-01 5.0190317630767822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1451 4.8512578941881657e-03</internalNodes>\n          <leafValues>\n            4.9689841270446777e-01 5.6616681814193726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1452 9.9896453320980072e-04</internalNodes>\n          <leafValues>\n            4.4456079602241516e-01 5.5518132448196411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1453 -2.7023631334304810e-01</internalNodes>\n          <leafValues>\n            2.9388209804892540e-02 5.1513141393661499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1454 -1.3090680353343487e-02</internalNodes>\n          <leafValues>\n            5.6993997097015381e-01 4.4474598765373230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1455 -9.4342790544033051e-03</internalNodes>\n          <leafValues>\n            4.3054661154747009e-01 5.4878950119018555e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1456 -1.5482039889320731e-03</internalNodes>\n          <leafValues>\n            3.6803171038627625e-01 5.1280808448791504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1457 5.3746132180094719e-03</internalNodes>\n          <leafValues>\n            4.8389169573783875e-01 6.1015558242797852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1458 1.5786769799888134e-03</internalNodes>\n          <leafValues>\n            5.3252232074737549e-01 4.1185480356216431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1459 3.6856050137430429e-03</internalNodes>\n          <leafValues>\n            4.8109480738639832e-01 6.2523031234741211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1460 9.3887019902467728e-03</internalNodes>\n          <leafValues>\n            5.2002298831939697e-01 3.6294108629226685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1461 1.2792630121111870e-02</internalNodes>\n          <leafValues>\n            4.9617099761962891e-01 6.7380160093307495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1462 -3.3661040943115950e-03</internalNodes>\n          <leafValues>\n            4.0602791309356689e-01 5.2835988998413086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1463 3.9771420415490866e-04</internalNodes>\n          <leafValues>\n            4.6741139888763428e-01 5.9007751941680908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1464 1.4868030557408929e-03</internalNodes>\n          <leafValues>\n            4.5191168785095215e-01 6.0820537805557251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1465 -8.8686749339103699e-02</internalNodes>\n          <leafValues>\n            2.8078991174697876e-01 5.1809918880462646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1466 -7.4296112870797515e-05</internalNodes>\n          <leafValues>\n            5.2955842018127441e-01 4.0876251459121704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1467 -1.4932939848222304e-05</internalNodes>\n          <leafValues>\n            5.4614001512527466e-01 4.5385429263114929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1468 5.9162238612771034e-03</internalNodes>\n          <leafValues>\n            5.3291612863540649e-01 4.1921341419219971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1469 1.1141640134155750e-03</internalNodes>\n          <leafValues>\n            4.5120179653167725e-01 5.7062172889709473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1470 8.9249362645205110e-05</internalNodes>\n          <leafValues>\n            4.5778059959411621e-01 5.8976382017135620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1471 2.5319510605186224e-03</internalNodes>\n          <leafValues>\n            5.2996039390563965e-01 3.3576390147209167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1472 1.2426200322806835e-02</internalNodes>\n          <leafValues>\n            4.9590590596199036e-01 1.3466019928455353e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1473 2.8335750102996826e-02</internalNodes>\n          <leafValues>\n            5.1170790195465088e-01 6.1043637106195092e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1474 6.6165882162749767e-03</internalNodes>\n          <leafValues>\n            4.7363498806953430e-01 7.0116281509399414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1475 8.0468766391277313e-03</internalNodes>\n          <leafValues>\n            5.2164179086685181e-01 3.2828199863433838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1476 -1.1193980462849140e-03</internalNodes>\n          <leafValues>\n            5.8098608255386353e-01 4.5637390017509460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1477 1.3277590274810791e-02</internalNodes>\n          <leafValues>\n            5.3983622789382935e-01 4.1039010882377625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1478 4.8794739996083081e-04</internalNodes>\n          <leafValues>\n            4.2492860555648804e-01 5.4105907678604126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1479 1.1243170127272606e-02</internalNodes>\n          <leafValues>\n            5.2699637413024902e-01 3.4382158517837524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1480 -8.9896668214350939e-04</internalNodes>\n          <leafValues>\n            5.6330758333206177e-01 4.4566130638122559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1481 6.6677159629762173e-03</internalNodes>\n          <leafValues>\n            5.3128892183303833e-01 4.3626791238784790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1482 2.8947299346327782e-02</internalNodes>\n          <leafValues>\n            4.7017949819564819e-01 6.5757977962493896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1483 -2.3400049656629562e-02</internalNodes>\n          <leafValues>\n            0. 5.1373988389968872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1484 -8.9117050170898438e-02</internalNodes>\n          <leafValues>\n            2.3745279759168625e-02 4.9424308538436890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1485 -1.4054600149393082e-02</internalNodes>\n          <leafValues>\n            3.1273230910301208e-01 5.1175111532211304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1486 8.1239398568868637e-03</internalNodes>\n          <leafValues>\n            5.0090491771697998e-01 2.5200259685516357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1487 -4.9964650534093380e-03</internalNodes>\n          <leafValues>\n            6.3871437311172485e-01 4.9278119206428528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1488 3.1253970228135586e-03</internalNodes>\n          <leafValues>\n            5.1368498802185059e-01 3.6804521083831787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1489 6.7669642157852650e-03</internalNodes>\n          <leafValues>\n            5.5098438262939453e-01 4.3636319041252136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1490 -2.3711440153419971e-03</internalNodes>\n          <leafValues>\n            6.1623352766036987e-01 4.5869469642639160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1491 -5.3522791713476181e-03</internalNodes>\n          <leafValues>\n            6.1854577064514160e-01 4.9204909801483154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1492 -1.5968859195709229e-02</internalNodes>\n          <leafValues>\n            1.3826179504394531e-01 4.9832528829574585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1493 4.7676060348749161e-03</internalNodes>\n          <leafValues>\n            4.6880578994750977e-01 5.4900461435317993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1494 -2.4714691098779440e-03</internalNodes>\n          <leafValues>\n            2.3685149848461151e-01 5.0039529800415039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1495 -7.1033788844943047e-04</internalNodes>\n          <leafValues>\n            5.8563941717147827e-01 4.7215330600738525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1496 -1.4117559790611267e-01</internalNodes>\n          <leafValues>\n            8.6900062859058380e-02 4.9615910649299622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1497 1.0651809722185135e-01</internalNodes>\n          <leafValues>\n            5.1388370990753174e-01 1.7410050332546234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1498 -5.2744749933481216e-02</internalNodes>\n          <leafValues>\n            7.3536360263824463e-01 4.7728818655014038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1499 -4.7431760467588902e-03</internalNodes>\n          <leafValues>\n            3.8844060897827148e-01 5.2927017211914062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1500 9.9676765967160463e-04</internalNodes>\n          <leafValues>\n            5.2234929800033569e-01 4.0034240484237671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1501 8.0284131690859795e-03</internalNodes>\n          <leafValues>\n            4.9591061472892761e-01 7.2129642963409424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1502 8.6025858763605356e-04</internalNodes>\n          <leafValues>\n            4.4448840618133545e-01 5.5384761095046997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1503 9.3191501218825579e-04</internalNodes>\n          <leafValues>\n            5.3983712196350098e-01 4.1632440686225891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1504 -2.5082060601562262e-03</internalNodes>\n          <leafValues>\n            5.8542650938034058e-01 4.5625001192092896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1505 -2.1378761157393456e-03</internalNodes>\n          <leafValues>\n            4.6080690622329712e-01 5.2802592515945435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1506 -2.1546049974858761e-03</internalNodes>\n          <leafValues>\n            3.7911269068717957e-01 5.2559971809387207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1507 -7.6214009895920753e-03</internalNodes>\n          <leafValues>\n            5.9986090660095215e-01 4.9520739912986755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1508 2.2055360022932291e-03</internalNodes>\n          <leafValues>\n            4.4842061400413513e-01 5.5885308980941772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1509 1.2586950324475765e-03</internalNodes>\n          <leafValues>\n            5.4507470130920410e-01 4.4238409399986267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1510 -5.0926720723509789e-03</internalNodes>\n          <leafValues>\n            4.1182750463485718e-01 5.2630358934402466e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1511 -2.5095739401876926e-03</internalNodes>\n          <leafValues>\n            5.7879078388214111e-01 4.9984949827194214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1512 -7.7327556908130646e-02</internalNodes>\n          <leafValues>\n            8.3978658914566040e-01 4.8111200332641602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1513 -4.1485819965600967e-02</internalNodes>\n          <leafValues>\n            2.4086110293865204e-01 5.1769930124282837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1514 1.0355669655837119e-04</internalNodes>\n          <leafValues>\n            4.3553608655929565e-01 5.4170542955398560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1515 1.3255809899419546e-03</internalNodes>\n          <leafValues>\n            5.4539710283279419e-01 4.8940950632095337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1516 -8.0598732456564903e-03</internalNodes>\n          <leafValues>\n            5.7710242271423340e-01 4.5779189467430115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1517 1.9058620557188988e-02</internalNodes>\n          <leafValues>\n            5.1698678731918335e-01 3.4004750847816467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1518 -3.5057891160249710e-02</internalNodes>\n          <leafValues>\n            2.2032439708709717e-01 5.0005030632019043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1519 5.7296059094369411e-03</internalNodes>\n          <leafValues>\n            5.0434082746505737e-01 6.5975707769393921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1520 -1.1648329906165600e-02</internalNodes>\n          <leafValues>\n            2.1862849593162537e-01 4.9966529011726379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1521 1.4544479781761765e-03</internalNodes>\n          <leafValues>\n            5.0076818466186523e-01 5.5037277936935425e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1522 -2.5030909455381334e-04</internalNodes>\n          <leafValues>\n            4.1298410296440125e-01 5.2416700124740601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1523 -8.2907272735610604e-04</internalNodes>\n          <leafValues>\n            5.4128682613372803e-01 4.9744960665702820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1524 1.0862209601327777e-03</internalNodes>\n          <leafValues>\n            4.6055299043655396e-01 5.8792287111282349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1525 2.0000500080641359e-04</internalNodes>\n          <leafValues>\n            5.2788549661636353e-01 4.7052091360092163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1526 2.9212920926511288e-03</internalNodes>\n          <leafValues>\n            5.1296097040176392e-01 3.7555369734764099e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1527 2.5387400761246681e-02</internalNodes>\n          <leafValues>\n            4.8226919770240784e-01 5.7907682657241821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1528 -3.1968469265848398e-03</internalNodes>\n          <leafValues>\n            5.2483952045440674e-01 3.9628401398658752e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>182</maxWeakCount>\n      <stageThreshold>9.0253349304199219e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1529 5.8031738735735416e-03</internalNodes>\n          <leafValues>\n            3.4989839792251587e-01 5.9619832038879395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1530 -9.0003069490194321e-03</internalNodes>\n          <leafValues>\n            6.8166369199752808e-01 4.4785520434379578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1531 -1.1549659539014101e-03</internalNodes>\n          <leafValues>\n            5.5857062339782715e-01 3.5782510042190552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1532 -1.1069850297644734e-03</internalNodes>\n          <leafValues>\n            5.3650361299514771e-01 3.0504280328750610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1533 1.0308309720130637e-04</internalNodes>\n          <leafValues>\n            3.6390951275825500e-01 5.3446358442306519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1534 -5.0984839908778667e-03</internalNodes>\n          <leafValues>\n            2.8591570258140564e-01 5.5042648315429688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1535 8.2572200335562229e-04</internalNodes>\n          <leafValues>\n            5.2365237474441528e-01 3.4760418534278870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1536 9.9783325567841530e-03</internalNodes>\n          <leafValues>\n            4.7503221035003662e-01 6.2196469306945801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1537 -3.7402529269456863e-02</internalNodes>\n          <leafValues>\n            3.3433759212493896e-01 5.2780628204345703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1538 4.8548257909715176e-03</internalNodes>\n          <leafValues>\n            5.1921808719635010e-01 3.7004441022872925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1539 -1.8664470408111811e-03</internalNodes>\n          <leafValues>\n            2.9298439621925354e-01 5.0919449329376221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1540 1.6888890415430069e-02</internalNodes>\n          <leafValues>\n            3.6868458986282349e-01 5.4312258958816528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1541 -5.8372621424496174e-03</internalNodes>\n          <leafValues>\n            3.6321839690208435e-01 5.2213358879089355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1542 -1.4713739510625601e-03</internalNodes>\n          <leafValues>\n            5.8706837892532349e-01 4.7006508708000183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1543 -1.1522950371727347e-03</internalNodes>\n          <leafValues>\n            3.1958949565887451e-01 5.1409542560577393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1544 -4.2560300789773464e-03</internalNodes>\n          <leafValues>\n            6.3018590211868286e-01 4.8149210214614868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1545 -6.7378291860222816e-03</internalNodes>\n          <leafValues>\n            1.9770480692386627e-01 5.0258082151412964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1546 1.1382670141756535e-02</internalNodes>\n          <leafValues>\n            4.9541321396827698e-01 6.8670457601547241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1547 5.1794708706438541e-03</internalNodes>\n          <leafValues>\n            5.1644277572631836e-01 3.3506479859352112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1548 -1.1743789911270142e-01</internalNodes>\n          <leafValues>\n            2.3152460157871246e-01 5.2344137430191040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1549 2.8703449293971062e-02</internalNodes>\n          <leafValues>\n            4.6642971038818359e-01 6.7225211858749390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1550 4.8231030814349651e-03</internalNodes>\n          <leafValues>\n            5.2208751440048218e-01 2.7235329151153564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1551 2.6798530016094446e-03</internalNodes>\n          <leafValues>\n            5.0792771577835083e-01 2.9069489240646362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1552 8.0504082143306732e-03</internalNodes>\n          <leafValues>\n            4.8859509825706482e-01 6.3950210809707642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1553 4.8054959625005722e-03</internalNodes>\n          <leafValues>\n            5.1972568035125732e-01 3.6566638946533203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1554 -2.2420159075409174e-03</internalNodes>\n          <leafValues>\n            6.1534678936004639e-01 4.7637018561363220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1555 -1.3757710345089436e-02</internalNodes>\n          <leafValues>\n            2.6373448967933655e-01 5.0309032201766968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1556 -1.0338299721479416e-01</internalNodes>\n          <leafValues>\n            2.2875219583511353e-01 5.1824611425399780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1557 -9.4432085752487183e-03</internalNodes>\n          <leafValues>\n            6.9533038139343262e-01 4.6949490904808044e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1558 8.0271181650459766e-04</internalNodes>\n          <leafValues>\n            5.4506552219390869e-01 4.2687839269638062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1559 -4.1945669800043106e-03</internalNodes>\n          <leafValues>\n            6.0913878679275513e-01 4.5716428756713867e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1560 1.0942210443317890e-02</internalNodes>\n          <leafValues>\n            5.2410632371902466e-01 3.2845470309257507e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1561 -5.7841069065034389e-04</internalNodes>\n          <leafValues>\n            5.3879290819168091e-01 4.1793689131736755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1562 -2.0888620056211948e-03</internalNodes>\n          <leafValues>\n            4.2926910519599915e-01 5.3017157316207886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1563 3.2383969519287348e-03</internalNodes>\n          <leafValues>\n            3.7923479080200195e-01 5.2207440137863159e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1564 4.9075027927756310e-03</internalNodes>\n          <leafValues>\n            5.2372831106185913e-01 4.1267579793930054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1565 -3.2277941703796387e-02</internalNodes>\n          <leafValues>\n            1.9476559758186340e-01 4.9945020675659180e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1566 -8.9711230248212814e-03</internalNodes>\n          <leafValues>\n            6.0112851858139038e-01 4.9290320277214050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1567 1.5321089886128902e-02</internalNodes>\n          <leafValues>\n            5.0097537040710449e-01 2.0398220419883728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1568 2.0855569746345282e-03</internalNodes>\n          <leafValues>\n            4.8621898889541626e-01 5.7216948270797729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1569 5.0615021027624607e-03</internalNodes>\n          <leafValues>\n            5.0002187490463257e-01 1.8018059432506561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1570 -3.7174751050770283e-03</internalNodes>\n          <leafValues>\n            5.5301171541213989e-01 4.8975929617881775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1571 -1.2170500122010708e-02</internalNodes>\n          <leafValues>\n            4.1786059737205505e-01 5.3837239742279053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1572 4.6248398721218109e-03</internalNodes>\n          <leafValues>\n            4.9971699714660645e-01 5.7613271474838257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1573 -2.1040429419372231e-04</internalNodes>\n          <leafValues>\n            5.3318071365356445e-01 4.0976810455322266e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1574 -1.4641780406236649e-02</internalNodes>\n          <leafValues>\n            5.7559251785278320e-01 5.0517761707305908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1575 3.3199489116668701e-03</internalNodes>\n          <leafValues>\n            4.5769768953323364e-01 6.0318058729171753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1576 3.7236879579722881e-03</internalNodes>\n          <leafValues>\n            4.3803969025611877e-01 5.4158830642700195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1577 8.2951161311939359e-04</internalNodes>\n          <leafValues>\n            5.1630318164825439e-01 3.7022191286087036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1578 -1.1408490128815174e-02</internalNodes>\n          <leafValues>\n            6.0729467868804932e-01 4.8625651001930237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1579 -4.5320121571421623e-03</internalNodes>\n          <leafValues>\n            3.2924759387969971e-01 5.0889629125595093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1580 5.1276017911732197e-03</internalNodes>\n          <leafValues>\n            4.8297679424285889e-01 6.1227089166641235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1581 9.8583158105611801e-03</internalNodes>\n          <leafValues>\n            4.6606799960136414e-01 6.5561771392822266e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1582 3.6985918879508972e-02</internalNodes>\n          <leafValues>\n            5.2048492431640625e-01 1.6904720664024353e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1583 4.6491161920130253e-03</internalNodes>\n          <leafValues>\n            5.1673221588134766e-01 3.7252250313758850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1584 -4.2664702050387859e-03</internalNodes>\n          <leafValues>\n            6.4064931869506836e-01 4.9873429536819458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1585 -4.7956590424291790e-04</internalNodes>\n          <leafValues>\n            5.8972930908203125e-01 4.4648739695549011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1586 3.6827160511165857e-03</internalNodes>\n          <leafValues>\n            5.4415607452392578e-01 3.4726628661155701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1587 -1.0059880092740059e-02</internalNodes>\n          <leafValues>\n            2.1431629359722137e-01 5.0048297643661499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1588 -3.0361840617842972e-04</internalNodes>\n          <leafValues>\n            5.3864240646362305e-01 4.5903238654136658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1589 -1.4545479789376259e-03</internalNodes>\n          <leafValues>\n            5.7511842250823975e-01 4.4970950484275818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1590 1.6515209572389722e-03</internalNodes>\n          <leafValues>\n            5.4219377040863037e-01 4.2385208606719971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1591 -7.8468639403581619e-03</internalNodes>\n          <leafValues>\n            4.0779209136962891e-01 5.2581572532653809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1592 -5.1259850151836872e-03</internalNodes>\n          <leafValues>\n            4.2292758822441101e-01 5.4794532060623169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1593 -3.6890961229801178e-02</internalNodes>\n          <leafValues>\n            6.5963757038116455e-01 4.6746781468391418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1594 2.4035639944486320e-04</internalNodes>\n          <leafValues>\n            4.2511358857154846e-01 5.5732029676437378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1595 -1.5150169929256663e-05</internalNodes>\n          <leafValues>\n            5.2592468261718750e-01 4.0741148591041565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1596 2.2108471021056175e-03</internalNodes>\n          <leafValues>\n            4.6717229485511780e-01 5.8863520622253418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1597 -1.1568620102480054e-03</internalNodes>\n          <leafValues>\n            5.7110661268234253e-01 4.4871619343757629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1598 4.9996292218565941e-03</internalNodes>\n          <leafValues>\n            5.2641981840133667e-01 2.8983271121978760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1599 -1.4656189596280456e-03</internalNodes>\n          <leafValues>\n            3.8917380571365356e-01 5.1978719234466553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1600 -1.1975039960816503e-03</internalNodes>\n          <leafValues>\n            5.7958728075027466e-01 4.9279558658599854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1601 -4.4954330660402775e-03</internalNodes>\n          <leafValues>\n            2.3776030540466309e-01 5.0125551223754883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1602 1.4997160178609192e-04</internalNodes>\n          <leafValues>\n            4.8766261339187622e-01 5.6176078319549561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1603 2.6391509454697371e-03</internalNodes>\n          <leafValues>\n            5.1680880784988403e-01 3.7655091285705566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1604 -2.9368131072260439e-04</internalNodes>\n          <leafValues>\n            5.4466491937637329e-01 4.8746308684349060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1605 1.4211760135367513e-03</internalNodes>\n          <leafValues>\n            4.6878978610038757e-01 6.6913318634033203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1606 7.9427637159824371e-02</internalNodes>\n          <leafValues>\n            5.1934438943862915e-01 2.7329459786415100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1607 7.9937502741813660e-02</internalNodes>\n          <leafValues>\n            4.9717310070991516e-01 1.7820839583873749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1608 1.1089259758591652e-02</internalNodes>\n          <leafValues>\n            5.1659947633743286e-01 3.2094758749008179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1609 1.6560709627810866e-04</internalNodes>\n          <leafValues>\n            4.0584719181060791e-01 5.3072762489318848e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1610 -5.3354292176663876e-03</internalNodes>\n          <leafValues>\n            3.4450569748878479e-01 5.1581299304962158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1611 1.1287260567769408e-03</internalNodes>\n          <leafValues>\n            4.5948630571365356e-01 6.0755330324172974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1612 -2.1969219669699669e-02</internalNodes>\n          <leafValues>\n            1.6804009675979614e-01 5.2285957336425781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1613 -2.1775320055894554e-04</internalNodes>\n          <leafValues>\n            3.8615968823432922e-01 5.2156728506088257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1614 2.0200149447191507e-04</internalNodes>\n          <leafValues>\n            5.5179792642593384e-01 4.3630391359329224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1615 -2.1733149886131287e-02</internalNodes>\n          <leafValues>\n            7.9994601011276245e-01 4.7898510098457336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1616 -8.4399932529777288e-04</internalNodes>\n          <leafValues>\n            4.0859758853912354e-01 5.3747731447219849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1617 -4.3895249837078154e-04</internalNodes>\n          <leafValues>\n            5.4704052209854126e-01 4.3661430478096008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1618 1.5092400135472417e-03</internalNodes>\n          <leafValues>\n            4.9889969825744629e-01 5.8421492576599121e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1619 -3.5547839943319559e-03</internalNodes>\n          <leafValues>\n            6.7536902427673340e-01 4.7210058569908142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1620 4.8191400128416717e-04</internalNodes>\n          <leafValues>\n            5.4158538579940796e-01 4.3571090698242188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1621 -6.0264398343861103e-03</internalNodes>\n          <leafValues>\n            2.2585099935531616e-01 4.9918809533119202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1622 -1.1668140068650246e-02</internalNodes>\n          <leafValues>\n            6.2565547227859497e-01 4.9274989962577820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1623 -2.8718370012938976e-03</internalNodes>\n          <leafValues>\n            3.9477849006652832e-01 5.2458018064498901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1624 1.7051169648766518e-02</internalNodes>\n          <leafValues>\n            4.7525110840797424e-01 5.7942241430282593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1625 -1.3352080248296261e-02</internalNodes>\n          <leafValues>\n            6.0411047935485840e-01 4.5445358753204346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1626 -3.9301801007241011e-04</internalNodes>\n          <leafValues>\n            4.2582759261131287e-01 5.5449050664901733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1627 3.0483349692076445e-03</internalNodes>\n          <leafValues>\n            5.2334201335906982e-01 3.7802729010581970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1628 -4.3579288758337498e-03</internalNodes>\n          <leafValues>\n            6.3718891143798828e-01 4.8386740684509277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1629 5.6661018170416355e-03</internalNodes>\n          <leafValues>\n            5.3747057914733887e-01 4.1636660695075989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1630 6.0677339206449687e-05</internalNodes>\n          <leafValues>\n            4.6387958526611328e-01 5.3116250038146973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1631 3.6738160997629166e-02</internalNodes>\n          <leafValues>\n            4.6886560320854187e-01 6.4665240049362183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1632 8.6528137326240540e-03</internalNodes>\n          <leafValues>\n            5.2043187618255615e-01 2.1886579692363739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1633 -1.5371359884738922e-01</internalNodes>\n          <leafValues>\n            1.6303719580173492e-01 4.9588400125503540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1634 -4.1560421232134104e-04</internalNodes>\n          <leafValues>\n            5.7744592428207397e-01 4.6964588761329651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1635 -1.2640169588848948e-03</internalNodes>\n          <leafValues>\n            3.9771759510040283e-01 5.2171981334686279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1636 -3.5473341122269630e-03</internalNodes>\n          <leafValues>\n            6.0465282201766968e-01 4.8083150386810303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1637 3.0019069527043030e-05</internalNodes>\n          <leafValues>\n            3.9967238903045654e-01 5.2282011508941650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1638 1.3113019522279501e-03</internalNodes>\n          <leafValues>\n            4.7121581435203552e-01 5.7659977674484253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1639 -1.3374709524214268e-03</internalNodes>\n          <leafValues>\n            4.1095849871635437e-01 5.2531701326370239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1640 2.0876709371805191e-02</internalNodes>\n          <leafValues>\n            5.2029937505722046e-01 1.7579819262027740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1641 -7.5497948564589024e-03</internalNodes>\n          <leafValues>\n            6.5666097402572632e-01 4.6949750185012817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1642 2.4188550189137459e-02</internalNodes>\n          <leafValues>\n            5.1286739110946655e-01 3.3702209591865540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1643 -2.9358828905969858e-03</internalNodes>\n          <leafValues>\n            6.5807867050170898e-01 4.6945410966873169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1644 5.7557929307222366e-02</internalNodes>\n          <leafValues>\n            5.1464450359344482e-01 2.7752599120140076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1645 -1.1343370424583554e-03</internalNodes>\n          <leafValues>\n            3.8366019725799561e-01 5.1926672458648682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1646 1.6816999763250351e-02</internalNodes>\n          <leafValues>\n            5.0855928659439087e-01 6.1772608757019043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1647 5.0535178743302822e-03</internalNodes>\n          <leafValues>\n            5.1387631893157959e-01 3.6847919225692749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1648 -4.5874710194766521e-03</internalNodes>\n          <leafValues>\n            5.9896552562713623e-01 4.8352020978927612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1649 1.6882460331544280e-03</internalNodes>\n          <leafValues>\n            4.5094868540763855e-01 5.7230567932128906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1650 -1.6554000321775675e-03</internalNodes>\n          <leafValues>\n            3.4967708587646484e-01 5.2433192729949951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1651 -1.9373800605535507e-02</internalNodes>\n          <leafValues>\n            1.1205369979143143e-01 4.9687129259109497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1652 1.0374450124800205e-02</internalNodes>\n          <leafValues>\n            5.1481968164443970e-01 4.3952131271362305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1653 1.4973050565458834e-04</internalNodes>\n          <leafValues>\n            4.0849998593330383e-01 5.2698868513107300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1654 -4.2981930077075958e-02</internalNodes>\n          <leafValues>\n            6.3941049575805664e-01 5.0185042619705200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1655 8.3065936341881752e-03</internalNodes>\n          <leafValues>\n            4.7075539827346802e-01 6.6983532905578613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1656 -4.1285790503025055e-03</internalNodes>\n          <leafValues>\n            4.5413690805435181e-01 5.3236472606658936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1657 1.7399420030415058e-03</internalNodes>\n          <leafValues>\n            4.3339619040489197e-01 5.4398661851882935e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1658 1.1739750334527344e-04</internalNodes>\n          <leafValues>\n            4.5796871185302734e-01 5.5434262752532959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1659 1.8585780344437808e-04</internalNodes>\n          <leafValues>\n            4.3246439099311829e-01 5.4267549514770508e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1660 5.5587692186236382e-03</internalNodes>\n          <leafValues>\n            5.2572208642959595e-01 3.5506111383438110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1661 -7.9851560294628143e-03</internalNodes>\n          <leafValues>\n            6.0430181026458740e-01 4.6306359767913818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1662 6.0594122624024749e-04</internalNodes>\n          <leafValues>\n            4.5982548594474792e-01 5.5331951379776001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1663 -2.2983040253166109e-04</internalNodes>\n          <leafValues>\n            4.1307520866394043e-01 5.3224611282348633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1664 4.3740210821852088e-04</internalNodes>\n          <leafValues>\n            4.0430399775505066e-01 5.4092890024185181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1665 2.9482020181603730e-04</internalNodes>\n          <leafValues>\n            4.4949638843536377e-01 5.6288522481918335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1666 1.0312659665942192e-02</internalNodes>\n          <leafValues>\n            5.1775109767913818e-01 2.7043169736862183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1667 -7.7241109684109688e-03</internalNodes>\n          <leafValues>\n            1.9880190491676331e-01 4.9805539846420288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1668 -4.6797208487987518e-03</internalNodes>\n          <leafValues>\n            6.6447502374649048e-01 5.0182962417602539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1669 -5.0755459815263748e-03</internalNodes>\n          <leafValues>\n            3.8983049988746643e-01 5.1852691173553467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1670 2.2479740437120199e-03</internalNodes>\n          <leafValues>\n            4.8018088936805725e-01 5.6603360176086426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1671 8.3327008178457618e-04</internalNodes>\n          <leafValues>\n            5.2109199762344360e-01 3.9571881294250488e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1672 -4.1279330849647522e-02</internalNodes>\n          <leafValues>\n            6.1545419692993164e-01 5.0070542097091675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1673 -5.0930189900100231e-04</internalNodes>\n          <leafValues>\n            3.9759421348571777e-01 5.2284038066864014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1674 1.2568780221045017e-03</internalNodes>\n          <leafValues>\n            4.9791380763053894e-01 5.9391832351684570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1675 8.0048497766256332e-03</internalNodes>\n          <leafValues>\n            4.9844971299171448e-01 1.6333660483360291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1676 -1.1879300000146031e-03</internalNodes>\n          <leafValues>\n            5.9049648046493530e-01 4.9426248669624329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1677 6.1948952497914433e-04</internalNodes>\n          <leafValues>\n            4.1995579004287720e-01 5.3287261724472046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1678 6.6829859279096127e-03</internalNodes>\n          <leafValues>\n            5.4186028242111206e-01 4.9058890342712402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1679 -3.7062340416014194e-03</internalNodes>\n          <leafValues>\n            3.7259390950202942e-01 5.1380002498626709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1680 -3.9739411324262619e-02</internalNodes>\n          <leafValues>\n            6.4789611101150513e-01 5.0503468513488770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1681 1.4085009461268783e-03</internalNodes>\n          <leafValues>\n            4.6823391318321228e-01 6.3778841495513916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1682 3.9322688826359808e-04</internalNodes>\n          <leafValues>\n            5.4585301876068115e-01 4.1504821181297302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1683 -1.8979819724336267e-03</internalNodes>\n          <leafValues>\n            3.6901599168777466e-01 5.1497042179107666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1684 -1.3970440253615379e-02</internalNodes>\n          <leafValues>\n            6.0505628585815430e-01 4.8113578557968140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1685 -1.0100819915533066e-01</internalNodes>\n          <leafValues>\n            2.0170800387859344e-01 4.9923619627952576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1686 -1.7346920445561409e-02</internalNodes>\n          <leafValues>\n            5.7131487131118774e-01 4.8994860053062439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1687 1.5619759506080300e-04</internalNodes>\n          <leafValues>\n            4.2153888940811157e-01 5.3926420211791992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1688 1.3438929617404938e-01</internalNodes>\n          <leafValues>\n            5.1361519098281860e-01 3.7676128745079041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1689 -2.4582240730524063e-02</internalNodes>\n          <leafValues>\n            7.0273578166961670e-01 4.7479069232940674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1690 -3.8553720805794001e-03</internalNodes>\n          <leafValues>\n            4.3174090981483459e-01 5.4277169704437256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1691 -2.3165249731391668e-03</internalNodes>\n          <leafValues>\n            5.9426987171173096e-01 4.6186479926109314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1692 -4.8518120311200619e-03</internalNodes>\n          <leafValues>\n            6.1915689706802368e-01 4.8848950862884521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1693 2.4699938949197531e-03</internalNodes>\n          <leafValues>\n            5.2566647529602051e-01 4.0171998739242554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1694 4.5496959239244461e-02</internalNodes>\n          <leafValues>\n            5.2378678321838379e-01 2.6857739686965942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1695 -2.0319599658250809e-02</internalNodes>\n          <leafValues>\n            2.1304459869861603e-01 4.9797388911247253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1696 2.6994998916052282e-04</internalNodes>\n          <leafValues>\n            4.8140418529510498e-01 5.5431222915649414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1697 -1.8232699949294329e-03</internalNodes>\n          <leafValues>\n            6.4825797080993652e-01 4.7099891304969788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1698 -6.3015790656208992e-03</internalNodes>\n          <leafValues>\n            4.5819279551506042e-01 5.3062361478805542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1699 -2.4139499873854220e-04</internalNodes>\n          <leafValues>\n            5.2320867776870728e-01 4.0517631173133850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1700 -1.0330369696021080e-03</internalNodes>\n          <leafValues>\n            5.5562019348144531e-01 4.7891938686370850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1701 1.8041160365100950e-04</internalNodes>\n          <leafValues>\n            5.2294427156448364e-01 4.0118101239204407e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1702 -6.1407860368490219e-02</internalNodes>\n          <leafValues>\n            6.2986820936203003e-01 5.0107032060623169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1703 -6.9543913006782532e-02</internalNodes>\n          <leafValues>\n            7.2282809019088745e-01 4.7731840610504150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1704 -7.0542663335800171e-02</internalNodes>\n          <leafValues>\n            2.2695130109786987e-01 5.1825290918350220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1705 2.4423799477517605e-03</internalNodes>\n          <leafValues>\n            5.2370971441268921e-01 4.0981510281562805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1706 1.5494349645450711e-03</internalNodes>\n          <leafValues>\n            4.7737509012222290e-01 5.4680430889129639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1707 -2.3914219811558723e-02</internalNodes>\n          <leafValues>\n            7.1469759941101074e-01 4.7838249802589417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1708 -1.2453690171241760e-02</internalNodes>\n          <leafValues>\n            2.6352968811988831e-01 5.2411228418350220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1709 -2.0760179904755205e-04</internalNodes>\n          <leafValues>\n            3.6237570643424988e-01 5.1136088371276855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1710 2.9781080229440704e-05</internalNodes>\n          <leafValues>\n            4.7059321403503418e-01 5.4328018426895142e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>211</maxWeakCount>\n      <stageThreshold>1.0474919891357422e+02</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1711 1.1772749945521355e-02</internalNodes>\n          <leafValues>\n            3.8605189323425293e-01 6.4211672544479370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1712 2.7037570253014565e-02</internalNodes>\n          <leafValues>\n            4.3856549263000488e-01 6.7540389299392700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1713 -3.6419500247575343e-05</internalNodes>\n          <leafValues>\n            5.4871010780334473e-01 3.4233158826828003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1714 1.9995409529656172e-03</internalNodes>\n          <leafValues>\n            3.2305321097373962e-01 5.4003179073333740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1715 4.5278300531208515e-03</internalNodes>\n          <leafValues>\n            5.0916397571563721e-01 2.9350438714027405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1716 4.7890920541249216e-04</internalNodes>\n          <leafValues>\n            4.1781538724899292e-01 5.3440642356872559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1717 1.1720920447260141e-03</internalNodes>\n          <leafValues>\n            2.8991821408271790e-01 5.1320707798004150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1718 9.5305702416226268e-04</internalNodes>\n          <leafValues>\n            4.2801249027252197e-01 5.5608451366424561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1719 1.5099150004971307e-05</internalNodes>\n          <leafValues>\n            4.0448719263076782e-01 5.4047602415084839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1720 -6.0817901976406574e-04</internalNodes>\n          <leafValues>\n            4.2717689275741577e-01 5.5034661293029785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1721 3.3224520739167929e-03</internalNodes>\n          <leafValues>\n            3.9627239108085632e-01 5.3697347640991211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1722 -1.1037490330636501e-03</internalNodes>\n          <leafValues>\n            4.7271779179573059e-01 5.2377498149871826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1723 -1.4350269921123981e-03</internalNodes>\n          <leafValues>\n            5.6030082702636719e-01 4.2235091328620911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1724 2.0767399109899998e-03</internalNodes>\n          <leafValues>\n            5.2259171009063721e-01 4.7327259182929993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1725 -1.6412809782195836e-04</internalNodes>\n          <leafValues>\n            3.9990758895874023e-01 5.4327398538589478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1726 8.8302437216043472e-03</internalNodes>\n          <leafValues>\n            4.6783858537673950e-01 6.0273271799087524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1727 -1.0552070103585720e-02</internalNodes>\n          <leafValues>\n            3.4939670562744141e-01 5.2139747142791748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1728 -2.2731600329279900e-03</internalNodes>\n          <leafValues>\n            6.1858189105987549e-01 4.7490629553794861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1729 -8.4786332445219159e-04</internalNodes>\n          <leafValues>\n            5.2853411436080933e-01 3.8434821367263794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1730 1.2081359745934606e-03</internalNodes>\n          <leafValues>\n            5.3606408834457397e-01 3.4473359584808350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1731 2.6512730401009321e-03</internalNodes>\n          <leafValues>\n            4.5582920312881470e-01 6.1939620971679688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1732 -1.1012479662895203e-03</internalNodes>\n          <leafValues>\n            3.6802300810813904e-01 5.3276282548904419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1733 4.9561518244445324e-04</internalNodes>\n          <leafValues>\n            3.9605951309204102e-01 5.2749407291412354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1734 -4.3901771306991577e-02</internalNodes>\n          <leafValues>\n            7.0204448699951172e-01 4.9928390979766846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1735 3.4690350294113159e-02</internalNodes>\n          <leafValues>\n            5.0491642951965332e-01 2.7666029334068298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1736 -2.7442190330475569e-03</internalNodes>\n          <leafValues>\n            2.6726329326629639e-01 5.2749711275100708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1737 3.3316588960587978e-03</internalNodes>\n          <leafValues>\n            4.5794829726219177e-01 6.0011017322540283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1738 -2.0044570788741112e-02</internalNodes>\n          <leafValues>\n            3.1715941429138184e-01 5.2357178926467896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1739 1.3492030557245016e-03</internalNodes>\n          <leafValues>\n            5.2653628587722778e-01 4.0343248844146729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1740 2.9702018946409225e-03</internalNodes>\n          <leafValues>\n            5.3324568271636963e-01 4.5719841122627258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1741 6.3039981760084629e-03</internalNodes>\n          <leafValues>\n            4.5933109521865845e-01 6.0346359014511108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1742 -1.2936590239405632e-02</internalNodes>\n          <leafValues>\n            4.4379639625549316e-01 5.3729712963104248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1743 4.0148729458451271e-03</internalNodes>\n          <leafValues>\n            4.6803238987922668e-01 6.4378339052200317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1744 -2.6401679497212172e-03</internalNodes>\n          <leafValues>\n            3.7096318602561951e-01 5.3143328428268433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1745 1.3918439857661724e-02</internalNodes>\n          <leafValues>\n            4.7235551476478577e-01 7.1308088302612305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1746 -4.5087869511917233e-04</internalNodes>\n          <leafValues>\n            4.4923940300941467e-01 5.3704041242599487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1747 2.5384349282830954e-04</internalNodes>\n          <leafValues>\n            4.4068640470504761e-01 5.5144029855728149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1748 2.2710000630468130e-03</internalNodes>\n          <leafValues>\n            4.6824169158935547e-01 5.9679841995239258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1749 2.4120779708027840e-03</internalNodes>\n          <leafValues>\n            5.0793921947479248e-01 3.0185988545417786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1750 -3.6025670851813629e-05</internalNodes>\n          <leafValues>\n            5.6010371446609497e-01 4.4710969924926758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1751 -7.4905529618263245e-03</internalNodes>\n          <leafValues>\n            2.2075350582599640e-01 4.9899441003799438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1752 -1.7513120546936989e-02</internalNodes>\n          <leafValues>\n            6.5312159061431885e-01 5.0176489353179932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1753 1.4281630516052246e-01</internalNodes>\n          <leafValues>\n            4.9679630994796753e-01 1.4820620417594910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1754 5.5345268920063972e-03</internalNodes>\n          <leafValues>\n            4.8989468812942505e-01 5.9542238712310791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1755 -9.6323591424152255e-04</internalNodes>\n          <leafValues>\n            3.9271169900894165e-01 5.1960742473602295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1756 -2.0370010752230883e-03</internalNodes>\n          <leafValues>\n            5.6133252382278442e-01 4.8848581314086914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1757 1.6614829655736685e-03</internalNodes>\n          <leafValues>\n            4.4728800654411316e-01 5.5788809061050415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1758 -3.1188090797513723e-03</internalNodes>\n          <leafValues>\n            3.8405328989028931e-01 5.3974777460098267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1759 -6.4000617712736130e-03</internalNodes>\n          <leafValues>\n            5.8439838886260986e-01 4.5332181453704834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1760 3.1319601112045348e-04</internalNodes>\n          <leafValues>\n            5.4392218589782715e-01 4.2347279191017151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1761 -1.8222099170088768e-02</internalNodes>\n          <leafValues>\n            1.2884649634361267e-01 4.9584048986434937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1762 8.7969247251749039e-03</internalNodes>\n          <leafValues>\n            4.9512979388237000e-01 7.1534800529479980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1763 -4.2395070195198059e-03</internalNodes>\n          <leafValues>\n            3.9465999603271484e-01 5.1949369907379150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1764 9.7086271271109581e-03</internalNodes>\n          <leafValues>\n            4.8975038528442383e-01 6.0649001598358154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1765 -3.9934171363711357e-03</internalNodes>\n          <leafValues>\n            3.2454401254653931e-01 5.0608289241790771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1766 -1.6785059124231339e-02</internalNodes>\n          <leafValues>\n            1.5819530189037323e-01 5.2037787437438965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1767 1.8272090703248978e-02</internalNodes>\n          <leafValues>\n            4.6809351444244385e-01 6.6269791126251221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1768 5.6872838176786900e-03</internalNodes>\n          <leafValues>\n            5.2116978168487549e-01 3.5121849179267883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1769 -1.0739039862528443e-03</internalNodes>\n          <leafValues>\n            5.7683861255645752e-01 4.5298451185226440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1770 -3.7093870341777802e-03</internalNodes>\n          <leafValues>\n            4.5077630877494812e-01 5.3135812282562256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1771 -2.1110709349159151e-04</internalNodes>\n          <leafValues>\n            5.4608201980590820e-01 4.3333768844604492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1772 1.0670139454305172e-03</internalNodes>\n          <leafValues>\n            5.3718560934066772e-01 4.0783908963203430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1773 3.5943021066486835e-03</internalNodes>\n          <leafValues>\n            4.4712871313095093e-01 5.6438362598419189e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1774 -5.1776031032204628e-03</internalNodes>\n          <leafValues>\n            4.4993931055068970e-01 5.2803301811218262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1775 -2.5414369883947074e-04</internalNodes>\n          <leafValues>\n            5.5161732435226440e-01 4.4077080488204956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1776 6.3522560521960258e-03</internalNodes>\n          <leafValues>\n            5.1941901445388794e-01 2.4652279913425446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1777 -4.4205080484971404e-04</internalNodes>\n          <leafValues>\n            3.8307058811187744e-01 5.1396822929382324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1778 7.4488727841526270e-04</internalNodes>\n          <leafValues>\n            4.8910909891128540e-01 5.9747868776321411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1779 -3.5116379149258137e-03</internalNodes>\n          <leafValues>\n            7.4136817455291748e-01 4.7687649726867676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1780 -1.2540910392999649e-02</internalNodes>\n          <leafValues>\n            3.6488190293312073e-01 5.2528268098831177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1781 9.4931852072477341e-03</internalNodes>\n          <leafValues>\n            5.1004928350448608e-01 3.6295869946479797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1782 1.2961150147020817e-02</internalNodes>\n          <leafValues>\n            5.2324420213699341e-01 4.3335610628128052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1783 4.7209449112415314e-03</internalNodes>\n          <leafValues>\n            4.6481490135192871e-01 6.3310527801513672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1784 -2.3119079414755106e-03</internalNodes>\n          <leafValues>\n            5.9303098917007446e-01 4.5310580730438232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1785 -2.8262299019843340e-03</internalNodes>\n          <leafValues>\n            3.8704779744148254e-01 5.2571010589599609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1786 -1.4311339473351836e-03</internalNodes>\n          <leafValues>\n            5.5225032567977905e-01 4.5618548989295959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1787 1.9378310535103083e-03</internalNodes>\n          <leafValues>\n            4.5462208986282349e-01 5.7369667291641235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1788 2.6343559147790074e-04</internalNodes>\n          <leafValues>\n            5.3457391262054443e-01 4.5718750357627869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1789 7.8257522545754910e-04</internalNodes>\n          <leafValues>\n            3.9678159356117249e-01 5.2201879024505615e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1790 -1.9550440832972527e-02</internalNodes>\n          <leafValues>\n            2.8296428918838501e-01 5.2435082197189331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1791 4.3914958951063454e-04</internalNodes>\n          <leafValues>\n            4.5900669693946838e-01 5.8990901708602905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1792 2.1452000364661217e-02</internalNodes>\n          <leafValues>\n            5.2314108610153198e-01 2.8553789854049683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1793 5.8973580598831177e-04</internalNodes>\n          <leafValues>\n            4.3972569704055786e-01 5.5064219236373901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1794 -2.6157610118389130e-02</internalNodes>\n          <leafValues>\n            3.1350791454315186e-01 5.1891750097274780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1795 -1.3959860429167747e-02</internalNodes>\n          <leafValues>\n            3.2132729887962341e-01 5.0407177209854126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1796 -6.3699018210172653e-03</internalNodes>\n          <leafValues>\n            6.3875448703765869e-01 4.8495069146156311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1797 -8.5613820701837540e-03</internalNodes>\n          <leafValues>\n            2.7591320872306824e-01 5.0320190191268921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1798 9.6622901037335396e-04</internalNodes>\n          <leafValues>\n            4.6856409311294556e-01 5.8348792791366577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1799 7.6550268568098545e-04</internalNodes>\n          <leafValues>\n            5.1752072572708130e-01 3.8964220881462097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1800 -8.1833340227603912e-03</internalNodes>\n          <leafValues>\n            2.0691369473934174e-01 5.2081221342086792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1801 -9.3976939097046852e-03</internalNodes>\n          <leafValues>\n            6.1340910196304321e-01 4.6412229537963867e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1802 4.8028980381786823e-03</internalNodes>\n          <leafValues>\n            5.4541081190109253e-01 4.3952199816703796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1803 -3.5680569708347321e-03</internalNodes>\n          <leafValues>\n            6.3444852828979492e-01 4.6810939908027649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1804 4.0733120404183865e-03</internalNodes>\n          <leafValues>\n            5.2926832437515259e-01 4.0156200528144836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1805 1.2568129459396005e-03</internalNodes>\n          <leafValues>\n            4.3929880857467651e-01 5.4528248310089111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1806 -2.9065010603517294e-03</internalNodes>\n          <leafValues>\n            5.8988320827484131e-01 4.8633798956871033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1807 -2.4409340694546700e-03</internalNodes>\n          <leafValues>\n            4.0693649649620056e-01 5.2474218606948853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1808 2.4830700829625130e-02</internalNodes>\n          <leafValues>\n            5.1827257871627808e-01 3.6825248599052429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1809 -4.8854008316993713e-02</internalNodes>\n          <leafValues>\n            1.3075779378414154e-01 4.9612811207771301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1810 -1.6110379947349429e-03</internalNodes>\n          <leafValues>\n            6.4210057258605957e-01 4.8726621270179749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1811 -9.7009479999542236e-02</internalNodes>\n          <leafValues>\n            4.7769349068403244e-02 4.9509888887405396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1812 1.1209240183234215e-03</internalNodes>\n          <leafValues>\n            4.6162670850753784e-01 5.3547459840774536e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1813 -1.3064090162515640e-03</internalNodes>\n          <leafValues>\n            6.2618541717529297e-01 4.6388059854507446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1814 4.5771620352752507e-04</internalNodes>\n          <leafValues>\n            5.3844177722930908e-01 4.6466401219367981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1815 -6.3149951165542006e-04</internalNodes>\n          <leafValues>\n            3.8040471076965332e-01 5.1302570104598999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1816 1.4505970466416329e-04</internalNodes>\n          <leafValues>\n            4.5543101429939270e-01 5.6644618511199951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1817 -1.6474550589919090e-02</internalNodes>\n          <leafValues>\n            6.5969580411911011e-01 4.7158598899841309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1818 1.3369579799473286e-02</internalNodes>\n          <leafValues>\n            5.1954662799835205e-01 3.0359649658203125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1819 1.0271780047332868e-04</internalNodes>\n          <leafValues>\n            5.2291762828826904e-01 4.1070660948753357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1820 -5.5311559699475765e-03</internalNodes>\n          <leafValues>\n            6.3528877496719360e-01 4.9609071016311646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1821 -2.6187049224972725e-03</internalNodes>\n          <leafValues>\n            3.8245460391044617e-01 5.1409840583801270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1822 5.0834268331527710e-03</internalNodes>\n          <leafValues>\n            4.9504399299621582e-01 6.2208187580108643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1823 7.9818159341812134e-02</internalNodes>\n          <leafValues>\n            4.9523359537124634e-01 1.3224759697914124e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1824 -9.9226586520671844e-02</internalNodes>\n          <leafValues>\n            7.5427287817001343e-01 5.0084167718887329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1825 -6.5174017800018191e-04</internalNodes>\n          <leafValues>\n            3.6993029713630676e-01 5.1301211118698120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1826 -1.8996849656105042e-02</internalNodes>\n          <leafValues>\n            6.6891789436340332e-01 4.9212029576301575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1827 1.7346899956464767e-02</internalNodes>\n          <leafValues>\n            4.9833008646965027e-01 1.8591980636119843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1828 5.5082101607695222e-04</internalNodes>\n          <leafValues>\n            4.5744240283966064e-01 5.5221217870712280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1829 2.0056050270795822e-03</internalNodes>\n          <leafValues>\n            5.1317447423934937e-01 3.8564699888229370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1830 -7.7688191086053848e-03</internalNodes>\n          <leafValues>\n            4.3617001175880432e-01 5.4343092441558838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1831 5.0878278911113739e-02</internalNodes>\n          <leafValues>\n            4.6827208995819092e-01 6.8406397104263306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1832 -2.2901780903339386e-03</internalNodes>\n          <leafValues>\n            4.3292450904846191e-01 5.3060990571975708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1833 -1.5715380141045898e-04</internalNodes>\n          <leafValues>\n            5.3700572252273560e-01 4.3781641125679016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1834 1.0519240051507950e-01</internalNodes>\n          <leafValues>\n            5.1372742652893066e-01 6.7361466586589813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1835 2.7198919560760260e-03</internalNodes>\n          <leafValues>\n            4.1120609641075134e-01 5.2556651830673218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1836 4.8337779939174652e-02</internalNodes>\n          <leafValues>\n            5.4046237468719482e-01 4.4389671087265015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1837 9.5703761326149106e-04</internalNodes>\n          <leafValues>\n            4.3559691309928894e-01 5.3995108604431152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1838 -2.5371259078383446e-02</internalNodes>\n          <leafValues>\n            5.9951752424240112e-01 5.0310248136520386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1839 5.2457951009273529e-02</internalNodes>\n          <leafValues>\n            4.9502879381179810e-01 1.3983510434627533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1840 -1.2365629896521568e-02</internalNodes>\n          <leafValues>\n            6.3972991704940796e-01 4.9641060829162598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1841 -1.4589719474315643e-01</internalNodes>\n          <leafValues>\n            1.0016699880361557e-01 4.9463221430778503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1842 -1.5908600762486458e-02</internalNodes>\n          <leafValues>\n            3.3123299479484558e-01 5.2083408832550049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1843 3.9486068999394774e-04</internalNodes>\n          <leafValues>\n            4.4063639640808105e-01 5.4261028766632080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1844 -5.2454001270234585e-03</internalNodes>\n          <leafValues>\n            2.7995899319648743e-01 5.1899671554565430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1845 -5.0421799533069134e-03</internalNodes>\n          <leafValues>\n            6.9875800609588623e-01 4.7521421313285828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1846 2.9812189750373363e-03</internalNodes>\n          <leafValues>\n            4.9832889437675476e-01 6.3074797391891479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1847 -7.2884308174252510e-03</internalNodes>\n          <leafValues>\n            2.9823330044746399e-01 5.0268697738647461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1848 1.5094350092113018e-03</internalNodes>\n          <leafValues>\n            5.3084421157836914e-01 3.8329708576202393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1849 -9.3340799212455750e-03</internalNodes>\n          <leafValues>\n            2.0379640161991119e-01 4.9698171019554138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1850 2.8667140752077103e-02</internalNodes>\n          <leafValues>\n            5.0256967544555664e-01 6.9280272722244263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1851 1.7019680142402649e-01</internalNodes>\n          <leafValues>\n            4.9600529670715332e-01 1.4764429628849030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1852 -3.2614478841423988e-03</internalNodes>\n          <leafValues>\n            5.6030637025833130e-01 4.8260560631752014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1853 5.5769277969375253e-04</internalNodes>\n          <leafValues>\n            5.2055621147155762e-01 4.1296330094337463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1854 3.6258339881896973e-01</internalNodes>\n          <leafValues>\n            5.2216529846191406e-01 3.7686121463775635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1855 -1.1615130119025707e-02</internalNodes>\n          <leafValues>\n            6.0226827859878540e-01 4.6374899148941040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1856 -4.0795197710394859e-03</internalNodes>\n          <leafValues>\n            4.0704470872879028e-01 5.3374791145324707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1857 5.7204300537705421e-04</internalNodes>\n          <leafValues>\n            4.6018350124359131e-01 5.9003931283950806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1858 6.7543348995968699e-04</internalNodes>\n          <leafValues>\n            5.3982520103454590e-01 4.3454289436340332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1859 6.3295697327703238e-04</internalNodes>\n          <leafValues>\n            5.2015632390975952e-01 4.0513589978218079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1860 1.2435320531949401e-03</internalNodes>\n          <leafValues>\n            4.6423879265785217e-01 5.5474412441253662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1861 -4.7363857738673687e-03</internalNodes>\n          <leafValues>\n            6.1985671520233154e-01 4.6725520491600037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1862 -6.4658462069928646e-03</internalNodes>\n          <leafValues>\n            6.8373328447341919e-01 5.0190007686614990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1863 3.5017321351915598e-04</internalNodes>\n          <leafValues>\n            4.3448030948638916e-01 5.3636229038238525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1864 1.5754920605104417e-04</internalNodes>\n          <leafValues>\n            4.7600790858268738e-01 5.7320207357406616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1865 9.9774366244673729e-03</internalNodes>\n          <leafValues>\n            5.0909858942031860e-01 3.6350399255752563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1866 -4.1464529931545258e-04</internalNodes>\n          <leafValues>\n            5.5700647830963135e-01 4.5938020944595337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1867 -3.5888899583369493e-04</internalNodes>\n          <leafValues>\n            5.3568458557128906e-01 4.3391349911689758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1868 4.0463250479660928e-04</internalNodes>\n          <leafValues>\n            4.4398030638694763e-01 5.4367768764495850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1869 -8.2184787606820464e-04</internalNodes>\n          <leafValues>\n            4.0422949194908142e-01 5.1762992143630981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1870 5.9467419050633907e-03</internalNodes>\n          <leafValues>\n            4.9276518821716309e-01 5.6337797641754150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1871 -2.1753389388322830e-02</internalNodes>\n          <leafValues>\n            8.0062937736511230e-01 4.8008409142494202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1872 -1.4540379866957664e-02</internalNodes>\n          <leafValues>\n            3.9460548758506775e-01 5.1822227239608765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1873 -4.0510769933462143e-02</internalNodes>\n          <leafValues>\n            2.1324990317225456e-02 4.9357929825782776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1874 -5.8458268176764250e-04</internalNodes>\n          <leafValues>\n            4.0127959847450256e-01 5.3140252828598022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1875 5.5151800625026226e-03</internalNodes>\n          <leafValues>\n            4.6424189209938049e-01 5.8962607383728027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1876 -6.0626221820712090e-03</internalNodes>\n          <leafValues>\n            6.5021592378616333e-01 5.0164777040481567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1877 9.4535842537879944e-02</internalNodes>\n          <leafValues>\n            5.2647089958190918e-01 4.1268271207809448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1878 4.7315051779150963e-03</internalNodes>\n          <leafValues>\n            4.8791998624801636e-01 5.8924478292465210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1879 -5.2571471314877272e-04</internalNodes>\n          <leafValues>\n            3.9172801375389099e-01 5.1894128322601318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1880 -2.5464049540460110e-03</internalNodes>\n          <leafValues>\n            5.8375990390777588e-01 4.9857059121131897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1881 -2.6075689122080803e-02</internalNodes>\n          <leafValues>\n            1.2619839608669281e-01 4.9558219313621521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1882 -5.4779709316790104e-03</internalNodes>\n          <leafValues>\n            5.7225137948989868e-01 5.0102657079696655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1883 5.1337741315364838e-03</internalNodes>\n          <leafValues>\n            5.2732622623443604e-01 4.2263761162757874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1884 4.7944980906322598e-04</internalNodes>\n          <leafValues>\n            4.4500669836997986e-01 5.8195871114730835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1885 -2.1114079281687737e-03</internalNodes>\n          <leafValues>\n            5.7576531171798706e-01 4.5117148756980896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1886 -1.3179990462958813e-02</internalNodes>\n          <leafValues>\n            1.8843810260295868e-01 5.1607340574264526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1887 -4.7968099825084209e-03</internalNodes>\n          <leafValues>\n            6.5897899866104126e-01 4.7361189126968384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1888 6.7483168095350266e-03</internalNodes>\n          <leafValues>\n            5.2594298124313354e-01 3.3563950657844543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1889 1.4623369788751006e-03</internalNodes>\n          <leafValues>\n            5.3552711009979248e-01 4.2640921473503113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1890 4.7645159065723419e-03</internalNodes>\n          <leafValues>\n            5.0344067811965942e-01 5.7868278026580811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1891 6.8066660314798355e-03</internalNodes>\n          <leafValues>\n            4.7566050291061401e-01 6.6778290271759033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1892 3.6608621012419462e-03</internalNodes>\n          <leafValues>\n            5.3696119785308838e-01 4.3115469813346863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1893 2.1449640393257141e-02</internalNodes>\n          <leafValues>\n            4.9686419963836670e-01 1.8888160586357117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1894 4.1678901761770248e-03</internalNodes>\n          <leafValues>\n            4.9307331442832947e-01 5.8153688907623291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1895 8.6467564105987549e-03</internalNodes>\n          <leafValues>\n            5.2052050828933716e-01 4.1325950622558594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1896 -3.6114078829996288e-04</internalNodes>\n          <leafValues>\n            5.4835551977157593e-01 4.8009279370307922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1897 1.0808729566633701e-03</internalNodes>\n          <leafValues>\n            4.6899020671844482e-01 6.0414212942123413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1898 5.7719959877431393e-03</internalNodes>\n          <leafValues>\n            5.1711422204971313e-01 3.0532771348953247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1899 1.5720770461484790e-03</internalNodes>\n          <leafValues>\n            5.2199780941009521e-01 4.1788038611412048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1900 -1.9307859474793077e-03</internalNodes>\n          <leafValues>\n            5.8603698015213013e-01 4.8129200935363770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1901 -7.8926272690296173e-03</internalNodes>\n          <leafValues>\n            1.7492769658565521e-01 4.9717339873313904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1902 -2.2224679123610258e-03</internalNodes>\n          <leafValues>\n            4.3425890803337097e-01 5.2128481864929199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1903 1.9011989934369922e-03</internalNodes>\n          <leafValues>\n            4.7651869058609009e-01 6.8920552730560303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1904 2.7576119173318148e-03</internalNodes>\n          <leafValues>\n            5.2621912956237793e-01 4.3374860286712646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1905 5.1787449046969414e-03</internalNodes>\n          <leafValues>\n            4.8040691018104553e-01 7.8437292575836182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1906 -9.0273341629654169e-04</internalNodes>\n          <leafValues>\n            4.1208469867706299e-01 5.3534239530563354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1907 5.1797959022223949e-03</internalNodes>\n          <leafValues>\n            4.7403728961944580e-01 6.4259600639343262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1908 -1.0114000178873539e-02</internalNodes>\n          <leafValues>\n            2.4687920510768890e-01 5.1750177145004272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1909 -1.8617060035467148e-02</internalNodes>\n          <leafValues>\n            5.7562941312789917e-01 4.6289789676666260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1910 5.9225959703326225e-03</internalNodes>\n          <leafValues>\n            5.1696258783340454e-01 3.2142710685729980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1911 -6.2945079989731312e-03</internalNodes>\n          <leafValues>\n            3.8720148801803589e-01 5.1416367292404175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1912 6.5353019163012505e-03</internalNodes>\n          <leafValues>\n            4.8530489206314087e-01 6.3104897737503052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1913 1.0878399480134249e-03</internalNodes>\n          <leafValues>\n            5.1173150539398193e-01 3.7232589721679688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1914 -2.2542240098118782e-02</internalNodes>\n          <leafValues>\n            5.6927400827407837e-01 4.8871129751205444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1915 -3.0065660830587149e-03</internalNodes>\n          <leafValues>\n            2.5560128688812256e-01 5.0039929151535034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1916 7.4741272255778313e-03</internalNodes>\n          <leafValues>\n            4.8108729720115662e-01 5.6759268045425415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1917 2.6162320747971535e-02</internalNodes>\n          <leafValues>\n            4.9711948633193970e-01 1.7772370576858521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1918 9.4352738233283162e-04</internalNodes>\n          <leafValues>\n            4.9400109052658081e-01 5.4912507534027100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1919 3.3363241702318192e-02</internalNodes>\n          <leafValues>\n            5.0076121091842651e-01 2.7907240390777588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1920 -1.5118650160729885e-02</internalNodes>\n          <leafValues>\n            7.0595788955688477e-01 4.9730318784713745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1921 9.8648946732282639e-04</internalNodes>\n          <leafValues>\n            5.1286202669143677e-01 3.7767618894577026e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>213</maxWeakCount>\n      <stageThreshold>1.0576110076904297e+02</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1922 -9.5150798559188843e-02</internalNodes>\n          <leafValues>\n            6.4707571268081665e-01 4.0172868967056274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1923 6.2702340073883533e-03</internalNodes>\n          <leafValues>\n            3.9998221397399902e-01 5.7464492321014404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1924 3.0018089455552399e-04</internalNodes>\n          <leafValues>\n            3.5587701201438904e-01 5.5388098955154419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1925 1.1757409665733576e-03</internalNodes>\n          <leafValues>\n            4.2565348744392395e-01 5.3826177120208740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1926 4.4235268433112651e-05</internalNodes>\n          <leafValues>\n            3.6829081177711487e-01 5.5899268388748169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1927 -2.9936920327600092e-05</internalNodes>\n          <leafValues>\n            5.4524701833724976e-01 4.0203678607940674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1928 3.0073199886828661e-03</internalNodes>\n          <leafValues>\n            5.2390581369400024e-01 3.3178439736366272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1929 -1.0513889603316784e-02</internalNodes>\n          <leafValues>\n            4.3206891417503357e-01 5.3079837560653687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1930 8.3476826548576355e-03</internalNodes>\n          <leafValues>\n            4.5046371221542358e-01 6.4532989263534546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1931 -3.1492270063608885e-03</internalNodes>\n          <leafValues>\n            4.3134251236915588e-01 5.3705251216888428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1932 -1.4435649973165710e-05</internalNodes>\n          <leafValues>\n            5.3266030550003052e-01 3.8179719448089600e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1933 -4.2855090578086674e-04</internalNodes>\n          <leafValues>\n            4.3051639199256897e-01 5.3820097446441650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1934 1.5062429883982986e-04</internalNodes>\n          <leafValues>\n            4.2359709739685059e-01 5.5449652671813965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1935 7.1559831500053406e-02</internalNodes>\n          <leafValues>\n            5.3030598163604736e-01 2.6788029074668884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1936 8.4095180500298738e-04</internalNodes>\n          <leafValues>\n            3.5571089386940002e-01 5.2054339647293091e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1937 6.2986500561237335e-02</internalNodes>\n          <leafValues>\n            5.2253627777099609e-01 2.8613761067390442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1938 -3.3798629883676767e-03</internalNodes>\n          <leafValues>\n            3.6241859197616577e-01 5.2016979455947876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1939 -1.1810739670181647e-04</internalNodes>\n          <leafValues>\n            5.4744768142700195e-01 3.9598938822746277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1940 -5.4505601292476058e-04</internalNodes>\n          <leafValues>\n            3.7404221296310425e-01 5.2157157659530640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1941 -1.8454910023137927e-03</internalNodes>\n          <leafValues>\n            5.8930522203445435e-01 4.5844489336013794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1942 -4.3832371011376381e-04</internalNodes>\n          <leafValues>\n            4.0845820307731628e-01 5.3853511810302734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1943 -2.4000830017030239e-03</internalNodes>\n          <leafValues>\n            3.7774550914764404e-01 5.2935802936553955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1944 -9.8795741796493530e-02</internalNodes>\n          <leafValues>\n            2.9636120796203613e-01 5.0700891017913818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1945 3.1798239797353745e-03</internalNodes>\n          <leafValues>\n            4.8776328563690186e-01 6.7264437675476074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1946 3.2406419632025063e-04</internalNodes>\n          <leafValues>\n            4.3669110536575317e-01 5.5611097812652588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1947 -3.2547250390052795e-02</internalNodes>\n          <leafValues>\n            3.1281578540802002e-01 5.3086161613464355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1948 -7.7561130747199059e-03</internalNodes>\n          <leafValues>\n            6.5602248907089233e-01 4.6398720145225525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1949 1.6027249395847321e-02</internalNodes>\n          <leafValues>\n            5.1726800203323364e-01 3.1418979167938232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1950 7.1002350523485802e-06</internalNodes>\n          <leafValues>\n            4.0844461321830750e-01 5.3362947702407837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1951 7.3422808200120926e-03</internalNodes>\n          <leafValues>\n            4.9669221043586731e-01 6.6034650802612305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1952 -1.6970280557870865e-03</internalNodes>\n          <leafValues>\n            5.9082370996475220e-01 4.5001828670501709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1953 2.4118260480463505e-03</internalNodes>\n          <leafValues>\n            5.3151607513427734e-01 3.5997208952903748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1954 -5.5300937965512276e-03</internalNodes>\n          <leafValues>\n            2.3340409994125366e-01 4.9968141317367554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1955 -2.6478730142116547e-03</internalNodes>\n          <leafValues>\n            5.8809357881546021e-01 4.6847340464591980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1956 1.1295629665255547e-02</internalNodes>\n          <leafValues>\n            4.9837771058082581e-01 1.8845909833908081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1957 -6.6952878842130303e-04</internalNodes>\n          <leafValues>\n            5.8721381425857544e-01 4.7990199923515320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1958 1.4410680159926414e-03</internalNodes>\n          <leafValues>\n            5.1311892271041870e-01 3.5010111331939697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1959 2.4637870956212282e-03</internalNodes>\n          <leafValues>\n            5.3393721580505371e-01 4.1176390647888184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1960 3.3114518737420440e-04</internalNodes>\n          <leafValues>\n            4.3133831024169922e-01 5.3982460498809814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1961 -3.3557269722223282e-02</internalNodes>\n          <leafValues>\n            2.6753368973731995e-01 5.1791548728942871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1962 1.8539419397711754e-02</internalNodes>\n          <leafValues>\n            4.9738699197769165e-01 2.3171770572662354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1963 -2.9698139405809343e-04</internalNodes>\n          <leafValues>\n            5.5297082662582397e-01 4.6436640620231628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1964 -4.5577259152196348e-04</internalNodes>\n          <leafValues>\n            5.6295841932296753e-01 4.4691911339759827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1965 -1.0158980265259743e-02</internalNodes>\n          <leafValues>\n            6.7062127590179443e-01 4.9259188771247864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1966 -2.2413829356082715e-05</internalNodes>\n          <leafValues>\n            5.2394217252731323e-01 3.9129018783569336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1967 7.2034963523037732e-05</internalNodes>\n          <leafValues>\n            4.7994381189346313e-01 5.5017888545989990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1968 -6.9267209619283676e-03</internalNodes>\n          <leafValues>\n            6.9300097227096558e-01 4.6980848908424377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1969 -7.6997838914394379e-03</internalNodes>\n          <leafValues>\n            4.0996238589286804e-01 5.4808831214904785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1970 -7.3130549862980843e-03</internalNodes>\n          <leafValues>\n            3.2834759354591370e-01 5.0578862428665161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1971 1.9650589674711227e-03</internalNodes>\n          <leafValues>\n            4.9780470132827759e-01 6.3982498645782471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1972 7.1647600270807743e-03</internalNodes>\n          <leafValues>\n            4.6611601114273071e-01 6.2221372127532959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1973 -2.4078639224171638e-02</internalNodes>\n          <leafValues>\n            2.3346449434757233e-01 5.2221620082855225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1974 -2.1027969196438789e-02</internalNodes>\n          <leafValues>\n            1.1836539953947067e-01 4.9382260441780090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1975 3.6017020465806127e-04</internalNodes>\n          <leafValues>\n            5.3250199556350708e-01 4.1167110204696655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1976 -1.7219729721546173e-02</internalNodes>\n          <leafValues>\n            6.2787622213363647e-01 4.6642690896987915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1977 -7.8672142699360847e-03</internalNodes>\n          <leafValues>\n            3.4034150838851929e-01 5.2497369050979614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1978 -4.4777389848604798e-04</internalNodes>\n          <leafValues>\n            3.6104118824005127e-01 5.0862592458724976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1979 5.5486010387539864e-03</internalNodes>\n          <leafValues>\n            4.8842659592628479e-01 6.2034982442855835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1980 -6.9461148232221603e-03</internalNodes>\n          <leafValues>\n            2.6259300112724304e-01 5.0110971927642822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1981 1.3569870498031378e-04</internalNodes>\n          <leafValues>\n            4.3407949805259705e-01 5.6283122301101685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1982 -4.5880250632762909e-02</internalNodes>\n          <leafValues>\n            6.5079987049102783e-01 4.6962749958038330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1983 -2.1582560613751411e-02</internalNodes>\n          <leafValues>\n            3.8265028595924377e-01 5.2876168489456177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1984 -2.0209539681673050e-02</internalNodes>\n          <leafValues>\n            3.2333680987358093e-01 5.0744771957397461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1985 5.8496710844337940e-03</internalNodes>\n          <leafValues>\n            5.1776039600372314e-01 4.4896709918975830e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1986 -5.7476379879517481e-05</internalNodes>\n          <leafValues>\n            4.0208509564399719e-01 5.2463638782501221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1987 -1.1513100471347570e-03</internalNodes>\n          <leafValues>\n            6.3150721788406372e-01 4.9051541090011597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1988 1.9862831104546785e-03</internalNodes>\n          <leafValues>\n            4.7024598717689514e-01 6.4971512556076050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1989 -5.2719512023031712e-03</internalNodes>\n          <leafValues>\n            3.6503839492797852e-01 5.2276527881622314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1990 1.2662699446082115e-03</internalNodes>\n          <leafValues>\n            5.1661008596420288e-01 3.8776180148124695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1991 -6.2919440679252148e-03</internalNodes>\n          <leafValues>\n            7.3758941888809204e-01 5.0238478183746338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1992 6.7360111279413104e-04</internalNodes>\n          <leafValues>\n            4.4232261180877686e-01 5.4955857992172241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1993 -1.0523450328037143e-03</internalNodes>\n          <leafValues>\n            5.9763962030410767e-01 4.8595830798149109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1994 -4.4216238893568516e-04</internalNodes>\n          <leafValues>\n            5.9559392929077148e-01 4.3989309668540955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1995 1.1747940443456173e-03</internalNodes>\n          <leafValues>\n            5.3498882055282593e-01 4.6050581336021423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1996 5.2457437850534916e-03</internalNodes>\n          <leafValues>\n            5.0491911172866821e-01 2.9415771365165710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1997 -2.4539720267057419e-02</internalNodes>\n          <leafValues>\n            2.5501778721809387e-01 5.2185869216918945e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1998 7.3793041519820690e-04</internalNodes>\n          <leafValues>\n            4.4248610734939575e-01 5.4908162355422974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1999 1.4233799884095788e-03</internalNodes>\n          <leafValues>\n            5.3195142745971680e-01 4.0813559293746948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2000 -2.4149110540747643e-03</internalNodes>\n          <leafValues>\n            4.0876591205596924e-01 5.2389502525329590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2001 -1.2165299849584699e-03</internalNodes>\n          <leafValues>\n            5.6745791435241699e-01 4.9080529808998108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2002 -1.2438809499144554e-03</internalNodes>\n          <leafValues>\n            4.1294258832931519e-01 5.2561181783676147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2003 6.1942739412188530e-03</internalNodes>\n          <leafValues>\n            5.0601941347122192e-01 7.3136532306671143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2004 -1.6607169527560472e-03</internalNodes>\n          <leafValues>\n            5.9796321392059326e-01 4.5963698625564575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2005 -2.7316259220242500e-02</internalNodes>\n          <leafValues>\n            4.1743651032447815e-01 5.3088420629501343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2006 -1.5845570014789701e-03</internalNodes>\n          <leafValues>\n            5.6158047914505005e-01 4.5194861292839050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2007 -1.5514739789068699e-03</internalNodes>\n          <leafValues>\n            4.0761870145797729e-01 5.3607851266860962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2008 3.8446558755822480e-04</internalNodes>\n          <leafValues>\n            4.3472939729690552e-01 5.4304420948028564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2009 -1.4672259800136089e-02</internalNodes>\n          <leafValues>\n            1.6593049466609955e-01 5.1460939645767212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2010 8.1608882173895836e-03</internalNodes>\n          <leafValues>\n            4.9618190526962280e-01 1.8847459554672241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2011 1.1121659772470593e-03</internalNodes>\n          <leafValues>\n            4.8682639002799988e-01 6.0938161611557007e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2012 -7.2603770531713963e-03</internalNodes>\n          <leafValues>\n            6.2843251228332520e-01 4.6903759241104126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2013 -2.4046430189628154e-04</internalNodes>\n          <leafValues>\n            5.5750000476837158e-01 4.0460440516471863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2014 -2.3348190006799996e-04</internalNodes>\n          <leafValues>\n            4.1157621145248413e-01 5.2528482675552368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2015 5.5736480280756950e-03</internalNodes>\n          <leafValues>\n            4.7300729155540466e-01 5.6901007890701294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2016 3.0623769387602806e-02</internalNodes>\n          <leafValues>\n            4.9718868732452393e-01 1.7400950193405151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2017 9.2074798885732889e-04</internalNodes>\n          <leafValues>\n            5.3721177577972412e-01 4.3548721075057983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2018 -4.3550739064812660e-05</internalNodes>\n          <leafValues>\n            5.3668838739395142e-01 4.3473169207572937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2019 -6.6452710889279842e-03</internalNodes>\n          <leafValues>\n            3.4355181455612183e-01 5.1605331897735596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2020 4.3221998959779739e-02</internalNodes>\n          <leafValues>\n            4.7667920589447021e-01 7.2936528921127319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2021 2.2331769578158855e-03</internalNodes>\n          <leafValues>\n            5.0293159484863281e-01 5.6331712007522583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2022 3.1829739455133677e-03</internalNodes>\n          <leafValues>\n            4.0160921216011047e-01 5.1921367645263672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2023 -1.8027749320026487e-04</internalNodes>\n          <leafValues>\n            4.0883159637451172e-01 5.4179197549819946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2024 -5.2934689447283745e-03</internalNodes>\n          <leafValues>\n            4.0756770968437195e-01 5.2435618638992310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2025 1.2750959722325206e-03</internalNodes>\n          <leafValues>\n            4.9132829904556274e-01 6.3870108127593994e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2026 4.3385322205722332e-03</internalNodes>\n          <leafValues>\n            5.0316721200942993e-01 2.9473468661308289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2027 8.5250744596123695e-03</internalNodes>\n          <leafValues>\n            4.9497890472412109e-01 6.3088691234588623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2028 -9.4266352243721485e-04</internalNodes>\n          <leafValues>\n            5.3283667564392090e-01 4.2856499552726746e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2029 1.3609660090878606e-03</internalNodes>\n          <leafValues>\n            4.9915251135826111e-01 5.9415012598037720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2030 4.4782509212382138e-04</internalNodes>\n          <leafValues>\n            4.5735040307044983e-01 5.8544808626174927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2031 1.3360050506889820e-03</internalNodes>\n          <leafValues>\n            4.6043589711189270e-01 5.8490520715713501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2032 -6.0967548051849008e-04</internalNodes>\n          <leafValues>\n            3.9693889021873474e-01 5.2294230461120605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2033 -2.3656780831515789e-03</internalNodes>\n          <leafValues>\n            5.8083200454711914e-01 4.8983570933341980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2034 1.0734340175986290e-03</internalNodes>\n          <leafValues>\n            4.3512108922004700e-01 5.4700392484664917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2035 2.1923359017819166e-03</internalNodes>\n          <leafValues>\n            5.3550601005554199e-01 3.8429039716720581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2036 5.4968618787825108e-03</internalNodes>\n          <leafValues>\n            5.0181388854980469e-01 2.8271919488906860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2037 -7.5368821620941162e-02</internalNodes>\n          <leafValues>\n            1.2250760197639465e-01 5.1488268375396729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2038 2.5134470313787460e-02</internalNodes>\n          <leafValues>\n            4.7317668795585632e-01 7.0254462957382202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2039 -2.9358599931583740e-05</internalNodes>\n          <leafValues>\n            5.4305320978164673e-01 4.6560868620872498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2040 -5.8355910005047917e-04</internalNodes>\n          <leafValues>\n            4.0310400724411011e-01 5.1901197433471680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2041 -2.6639450807124376e-03</internalNodes>\n          <leafValues>\n            4.3081268668174744e-01 5.1617711782455444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2042 -1.3804089976474643e-03</internalNodes>\n          <leafValues>\n            6.2198299169540405e-01 4.6955159306526184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2043 1.2313219485804439e-03</internalNodes>\n          <leafValues>\n            5.3793638944625854e-01 4.4258311390876770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2044 -1.4644179827882908e-05</internalNodes>\n          <leafValues>\n            5.2816402912139893e-01 4.2225030064582825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2045 -1.2818809598684311e-02</internalNodes>\n          <leafValues>\n            2.5820928812026978e-01 5.1799327135086060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2046 2.2852189838886261e-02</internalNodes>\n          <leafValues>\n            4.7786930203437805e-01 7.6092642545700073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2047 8.2305970136076212e-04</internalNodes>\n          <leafValues>\n            5.3409922122955322e-01 4.6717241406440735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2048 1.2770120054483414e-02</internalNodes>\n          <leafValues>\n            4.9657610058784485e-01 1.4723660051822662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2049 -5.0051510334014893e-02</internalNodes>\n          <leafValues>\n            6.4149940013885498e-01 5.0165921449661255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2050 1.5775270760059357e-02</internalNodes>\n          <leafValues>\n            4.5223200321197510e-01 5.6853622198104858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2051 -1.8501620739698410e-02</internalNodes>\n          <leafValues>\n            2.7647489309310913e-01 5.1379591226577759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2052 2.4626250378787518e-03</internalNodes>\n          <leafValues>\n            5.1419419050216675e-01 3.7954080104827881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2053 6.2916167080402374e-02</internalNodes>\n          <leafValues>\n            5.0606489181518555e-01 6.5804338455200195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2054 -2.1648500478477217e-05</internalNodes>\n          <leafValues>\n            5.1953881978988647e-01 4.0198868513107300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2055 2.1180990152060986e-03</internalNodes>\n          <leafValues>\n            4.9623650312423706e-01 5.9544587135314941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2056 -1.6634890809655190e-02</internalNodes>\n          <leafValues>\n            3.7579330801963806e-01 5.1754468679428101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2057 -2.8899470344185829e-03</internalNodes>\n          <leafValues>\n            6.6240137815475464e-01 5.0571787357330322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2058 7.6783262193202972e-02</internalNodes>\n          <leafValues>\n            4.7957968711853027e-01 8.0477148294448853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2059 3.9170677773654461e-03</internalNodes>\n          <leafValues>\n            4.9378821253776550e-01 5.7199418544769287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2060 -7.2670601308345795e-02</internalNodes>\n          <leafValues>\n            5.3894560784101486e-02 4.9439039826393127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2061 5.4039502143859863e-01</internalNodes>\n          <leafValues>\n            5.1297742128372192e-01 1.1433389782905579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2062 2.9510019812732935e-03</internalNodes>\n          <leafValues>\n            4.5283439755439758e-01 5.6985741853713989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2063 3.4508369863033295e-03</internalNodes>\n          <leafValues>\n            5.3577268123626709e-01 4.2187309265136719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2064 -4.2077939724549651e-04</internalNodes>\n          <leafValues>\n            5.9161728620529175e-01 4.6379259228706360e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2065 3.3051050268113613e-03</internalNodes>\n          <leafValues>\n            5.2733850479125977e-01 4.3820428848266602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2066 4.7735060798004270e-04</internalNodes>\n          <leafValues>\n            4.0465280413627625e-01 5.1818847656250000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2067 -2.5928510352969170e-02</internalNodes>\n          <leafValues>\n            7.4522358179092407e-01 5.0893861055374146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2068 -2.9729790985584259e-03</internalNodes>\n          <leafValues>\n            3.2954359054565430e-01 5.0587952136993408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2069 5.8508329093456268e-03</internalNodes>\n          <leafValues>\n            4.8571440577507019e-01 5.7930248975753784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2070 -4.5967519283294678e-02</internalNodes>\n          <leafValues>\n            4.3127310276031494e-01 5.3806531429290771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2071 1.5585960447788239e-01</internalNodes>\n          <leafValues>\n            5.1961702108383179e-01 1.6847139596939087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2072 1.5164829790592194e-02</internalNodes>\n          <leafValues>\n            4.7357571125030518e-01 6.7350268363952637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2073 -1.0604249546304345e-03</internalNodes>\n          <leafValues>\n            5.8229267597198486e-01 4.7757029533386230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2074 6.6476291976869106e-03</internalNodes>\n          <leafValues>\n            4.9991989135742188e-01 2.3195350170135498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2075 -1.2231130152940750e-02</internalNodes>\n          <leafValues>\n            4.7508931159973145e-01 5.2629822492599487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2076 5.6528882123529911e-03</internalNodes>\n          <leafValues>\n            5.0697678327560425e-01 3.5618188977241516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2077 1.2977829901501536e-03</internalNodes>\n          <leafValues>\n            4.8756939172744751e-01 5.6190627813339233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2078 1.0781589895486832e-02</internalNodes>\n          <leafValues>\n            4.7507700324058533e-01 6.7823082208633423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2079 2.8654779307544231e-03</internalNodes>\n          <leafValues>\n            5.3054618835449219e-01 4.2907360196113586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2080 2.8663428965955973e-03</internalNodes>\n          <leafValues>\n            4.5184791088104248e-01 5.5393511056900024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2081 -5.1983320154249668e-03</internalNodes>\n          <leafValues>\n            4.1491198539733887e-01 5.4341888427734375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2082 5.3739990107715130e-03</internalNodes>\n          <leafValues>\n            4.7178968787193298e-01 6.5076571702957153e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2083 -1.4641529880464077e-02</internalNodes>\n          <leafValues>\n            2.1721640229225159e-01 5.1617771387100220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2084 -1.5042580344015732e-05</internalNodes>\n          <leafValues>\n            5.3373837471008301e-01 4.2988368868827820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2085 -1.1875660129589960e-04</internalNodes>\n          <leafValues>\n            4.6045941114425659e-01 5.5824470520019531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2086 1.6995530575513840e-02</internalNodes>\n          <leafValues>\n            4.9458950757980347e-01 7.3880076408386230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2087 -3.5095941275358200e-02</internalNodes>\n          <leafValues>\n            7.0055091381072998e-01 4.9775910377502441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2088 2.4217350874096155e-03</internalNodes>\n          <leafValues>\n            4.4662651419639587e-01 5.4776942729949951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2089 -9.6340337768197060e-04</internalNodes>\n          <leafValues>\n            4.7140988707542419e-01 5.3133380413055420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2090 1.6391130338888615e-04</internalNodes>\n          <leafValues>\n            4.3315461277961731e-01 5.3422421216964722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2091 -2.1141460165381432e-02</internalNodes>\n          <leafValues>\n            2.6447001099586487e-01 5.2044987678527832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2092 8.7775202700868249e-04</internalNodes>\n          <leafValues>\n            5.2083498239517212e-01 4.1527429223060608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2093 -2.7943920344114304e-02</internalNodes>\n          <leafValues>\n            6.3441252708435059e-01 5.0188118219375610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2094 6.7297378554940224e-03</internalNodes>\n          <leafValues>\n            5.0504380464553833e-01 3.5008639097213745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2095 2.3281039670109749e-02</internalNodes>\n          <leafValues>\n            4.9663180112838745e-01 6.9686770439147949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2096 -1.1644979938864708e-02</internalNodes>\n          <leafValues>\n            3.3002600073814392e-01 5.0496298074722290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2097 1.5764309093356133e-02</internalNodes>\n          <leafValues>\n            4.9915981292724609e-01 7.3211538791656494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2098 -1.3611479662358761e-03</internalNodes>\n          <leafValues>\n            3.9117351174354553e-01 5.1606708765029907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2099 -8.1522337859496474e-04</internalNodes>\n          <leafValues>\n            5.6289112567901611e-01 4.9497190117835999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2100 -6.0066272271797061e-04</internalNodes>\n          <leafValues>\n            5.8535951375961304e-01 4.5505958795547485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2101 4.9715518252924085e-04</internalNodes>\n          <leafValues>\n            4.2714700102806091e-01 5.4435992240905762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2102 2.3475370835512877e-03</internalNodes>\n          <leafValues>\n            5.1431107521057129e-01 3.8876569271087646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2103 -8.9261569082736969e-03</internalNodes>\n          <leafValues>\n            6.0445022583007812e-01 4.9717208743095398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2104 -1.3919910416007042e-02</internalNodes>\n          <leafValues>\n            2.5831609964370728e-01 5.0003677606582642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2105 1.0209949687123299e-03</internalNodes>\n          <leafValues>\n            4.8573741316795349e-01 5.5603581666946411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2106 -2.7441629208624363e-03</internalNodes>\n          <leafValues>\n            5.9368848800659180e-01 4.6457770466804504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2107 -1.6200130805373192e-02</internalNodes>\n          <leafValues>\n            3.1630149483680725e-01 5.1934951543807983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2108 4.3331980705261230e-03</internalNodes>\n          <leafValues>\n            5.0612241029739380e-01 3.4588789939880371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2109 5.8497930876910686e-04</internalNodes>\n          <leafValues>\n            4.7790178656578064e-01 5.8701777458190918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2110 -2.2466450463980436e-03</internalNodes>\n          <leafValues>\n            4.2978510260581970e-01 5.3747731447219849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2111 2.3146099410951138e-03</internalNodes>\n          <leafValues>\n            5.4386717081069946e-01 4.6409699320793152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2112 8.7679121643304825e-03</internalNodes>\n          <leafValues>\n            4.7268930077552795e-01 6.7717897891998291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2113 -2.2448020172305405e-04</internalNodes>\n          <leafValues>\n            4.2291730642318726e-01 5.4280489683151245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2114 -7.4336021207273006e-03</internalNodes>\n          <leafValues>\n            6.0988807678222656e-01 4.6836739778518677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2115 -2.3189240600913763e-03</internalNodes>\n          <leafValues>\n            5.6894367933273315e-01 4.4242420792579651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2116 -2.1042178850620985e-03</internalNodes>\n          <leafValues>\n            3.7622210383415222e-01 5.1870870590209961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2117 4.6034841216169298e-04</internalNodes>\n          <leafValues>\n            4.6994051337242126e-01 5.7712072134017944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2118 1.0547629790380597e-03</internalNodes>\n          <leafValues>\n            4.4652169942855835e-01 5.6017017364501953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2119 8.7148818420246243e-04</internalNodes>\n          <leafValues>\n            5.4498052597045898e-01 3.9147090911865234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2120 3.3364820410497487e-04</internalNodes>\n          <leafValues>\n            4.5640090107917786e-01 5.6457388401031494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2121 -1.4853250468149781e-03</internalNodes>\n          <leafValues>\n            5.7473778724670410e-01 4.6927788853645325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2122 3.0251620337367058e-03</internalNodes>\n          <leafValues>\n            5.1661968231201172e-01 3.7628141045570374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2123 5.0280741415917873e-03</internalNodes>\n          <leafValues>\n            5.0021117925643921e-01 6.1515271663665771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2124 -5.8164511574432254e-04</internalNodes>\n          <leafValues>\n            5.3945982456207275e-01 4.3907511234283447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2125 4.5141529291868210e-02</internalNodes>\n          <leafValues>\n            5.1883268356323242e-01 2.0630359649658203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2126 -1.0795620037242770e-03</internalNodes>\n          <leafValues>\n            3.9046850800514221e-01 5.1379072666168213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2127 1.5995999274309725e-04</internalNodes>\n          <leafValues>\n            4.8953229188919067e-01 5.4275041818618774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2128 -1.9359270110726357e-02</internalNodes>\n          <leafValues>\n            6.9752287864685059e-01 4.7735071182250977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2129 2.0725509524345398e-01</internalNodes>\n          <leafValues>\n            5.2336359024047852e-01 3.0349919199943542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2130 -4.1953290929086506e-04</internalNodes>\n          <leafValues>\n            5.4193967580795288e-01 4.4601860642433167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2131 2.2582069505006075e-03</internalNodes>\n          <leafValues>\n            4.8157641291618347e-01 6.0274088382720947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2132 -6.7811207845807076e-03</internalNodes>\n          <leafValues>\n            3.9802789688110352e-01 5.1833057403564453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2133 1.1154309846460819e-02</internalNodes>\n          <leafValues>\n            5.4312318563461304e-01 4.1887599229812622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2134 4.3162431567907333e-02</internalNodes>\n          <leafValues>\n            4.7382280230522156e-01 6.5229612588882446e-01</leafValues></_></weakClassifiers></_></stages>\n  <features>\n    <_>\n      <rects>\n        <_>\n          3 7 14 4 -1.</_>\n        <_>\n          3 9 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          7 2 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 9 -1.</_>\n        <_>\n          1 10 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 6 -1.</_>\n        <_>\n          5 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 3 -1.</_>\n        <_>\n          9 5 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 9 -1.</_>\n        <_>\n          4 3 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 10 8 -1.</_>\n        <_>\n          6 13 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 8 -1.</_>\n        <_>\n          3 10 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 10 -1.</_>\n        <_>\n          14 1 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 5 12 -1.</_>\n        <_>\n          7 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 3 -1.</_>\n        <_>\n          7 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 17 2 -1.</_>\n        <_>\n          1 9 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 2 -1.</_>\n        <_>\n          16 7 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 2 2 -1.</_>\n        <_>\n          5 18 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 12 -1.</_>\n        <_>\n          14 2 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 12 -1.</_>\n        <_>\n          4 0 2 6 2.</_>\n        <_>\n          6 6 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 8 -1.</_>\n        <_>\n          8 11 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 2 -1.</_>\n        <_>\n          5 8 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 3 -1.</_>\n        <_>\n          15 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 9 -1.</_>\n        <_>\n          5 6 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 12 -1.</_>\n        <_>\n          3 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 5 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 8 -1.</_>\n        <_>\n          5 10 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 9 -1.</_>\n        <_>\n          8 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 8 -1.</_>\n        <_>\n          9 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 17 -1.</_>\n        <_>\n          9 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 4 -1.</_>\n        <_>\n          11 0 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 4 -1.</_>\n        <_>\n          7 1 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 16 -1.</_>\n        <_>\n          14 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 8 -1.</_>\n        <_>\n          0 5 9 4 2.</_>\n        <_>\n          9 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 10 4 -1.</_>\n        <_>\n          13 15 5 2 2.</_>\n        <_>\n          8 17 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 4 8 -1.</_>\n        <_>\n          3 1 2 4 2.</_>\n        <_>\n          5 5 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 10 -1.</_>\n        <_>\n          10 6 7 5 2.</_>\n        <_>\n          3 11 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 16 -1.</_>\n        <_>\n          4 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 20 2 -1.</_>\n        <_>\n          0 19 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 9 6 -1.</_>\n        <_>\n          0 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 4 -1.</_>\n        <_>\n          5 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 16 -1.</_>\n        <_>\n          9 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 8 -1.</_>\n        <_>\n          3 10 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 8 2 -1.</_>\n        <_>\n          12 3 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 12 -1.</_>\n        <_>\n          8 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 6 -1.</_>\n        <_>\n          15 3 4 3 2.</_>\n        <_>\n          11 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 19 -1.</_>\n        <_>\n          9 1 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 4 -1.</_>\n        <_>\n          11 0 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 9 3 -1.</_>\n        <_>\n          6 1 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 10 4 -1.</_>\n        <_>\n          13 15 5 2 2.</_>\n        <_>\n          8 17 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 10 -1.</_>\n        <_>\n          3 3 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 15 15 -1.</_>\n        <_>\n          3 9 15 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 6 -1.</_>\n        <_>\n          6 7 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 10 -1.</_>\n        <_>\n          10 4 6 5 2.</_>\n        <_>\n          4 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 4 -1.</_>\n        <_>\n          8 4 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 2 -1.</_>\n        <_>\n          15 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 2 2 -1.</_>\n        <_>\n          3 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 1 3 -1.</_>\n        <_>\n          16 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 6 4 -1.</_>\n        <_>\n          3 15 3 2 2.</_>\n        <_>\n          6 17 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 2 -1.</_>\n        <_>\n          6 8 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 1 3 -1.</_>\n        <_>\n          3 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 2 -1.</_>\n        <_>\n          6 1 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 2 -1.</_>\n        <_>\n          7 16 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 4 6 -1.</_>\n        <_>\n          0 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 2 -1.</_>\n        <_>\n          8 12 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 1 9 -1.</_>\n        <_>\n          6 6 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 3 2 -1.</_>\n        <_>\n          11 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 4 -1.</_>\n        <_>\n          9 6 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 3 2 -1.</_>\n        <_>\n          8 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 3 3 -1.</_>\n        <_>\n          11 17 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 2 -1.</_>\n        <_>\n          8 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 2 -1.</_>\n        <_>\n          11 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 13 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 4 -1.</_>\n        <_>\n          10 10 9 2 2.</_>\n        <_>\n          1 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 3 3 -1.</_>\n        <_>\n          0 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 6 -1.</_>\n        <_>\n          11 1 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 6 -1.</_>\n        <_>\n          9 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 9 -1.</_>\n        <_>\n          1 3 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 2 6 -1.</_>\n        <_>\n          12 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 19 8 -1.</_>\n        <_>\n          0 9 19 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 1 -1.</_>\n        <_>\n          7 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 1 -1.</_>\n        <_>\n          13 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 6 -1.</_>\n        <_>\n          5 13 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 1 -1.</_>\n        <_>\n          13 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 6 -1.</_>\n        <_>\n          4 6 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 6 -1.</_>\n        <_>\n          15 14 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 2 -1.</_>\n        <_>\n          10 3 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 1 -1.</_>\n        <_>\n          10 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 4 14 -1.</_>\n        <_>\n          3 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 4 -1.</_>\n        <_>\n          11 0 2 2 2.</_>\n        <_>\n          9 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 1 14 -1.</_>\n        <_>\n          7 12 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 0 1 4 -1.</_>\n        <_>\n          19 2 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 4 -1.</_>\n        <_>\n          8 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 3 2 -1.</_>\n        <_>\n          10 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 2 -1.</_>\n        <_>\n          9 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 6 -1.</_>\n        <_>\n          3 14 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 2 12 -1.</_>\n        <_>\n          10 12 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 3 2 -1.</_>\n        <_>\n          8 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 2 -1.</_>\n        <_>\n          11 0 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 3 -1.</_>\n        <_>\n          5 12 9 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 2 -1.</_>\n        <_>\n          11 0 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 5 -1.</_>\n        <_>\n          7 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 4 -1.</_>\n        <_>\n          10 0 2 2 2.</_>\n        <_>\n          8 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 1 3 -1.</_>\n        <_>\n          3 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 5 3 -1.</_>\n        <_>\n          8 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 12 -1.</_>\n        <_>\n          5 4 5 6 2.</_>\n        <_>\n          10 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 12 -1.</_>\n        <_>\n          9 10 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 12 14 -1.</_>\n        <_>\n          2 2 6 7 2.</_>\n        <_>\n          8 9 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 4 -1.</_>\n        <_>\n          7 6 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 11 8 -1.</_>\n        <_>\n          4 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 4 -1.</_>\n        <_>\n          3 12 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 2 -1.</_>\n        <_>\n          0 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 2 -1.</_>\n        <_>\n          9 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 15 -1.</_>\n        <_>\n          10 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 8 6 -1.</_>\n        <_>\n          3 14 4 3 2.</_>\n        <_>\n          7 17 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 2 2 -1.</_>\n        <_>\n          14 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 6 -1.</_>\n        <_>\n          1 13 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 3 -1.</_>\n        <_>\n          15 4 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 14 6 -1.</_>\n        <_>\n          2 9 7 3 2.</_>\n        <_>\n          9 12 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 4 -1.</_>\n        <_>\n          5 9 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          6 9 4 4 2.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 2 -1.</_>\n        <_>\n          14 2 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 2 -1.</_>\n        <_>\n          3 4 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 8 -1.</_>\n        <_>\n          11 14 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 3 -1.</_>\n        <_>\n          0 1 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 8 -1.</_>\n        <_>\n          11 5 9 4 2.</_>\n        <_>\n          2 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 6 -1.</_>\n        <_>\n          6 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 1 1 3 -1.</_>\n        <_>\n          19 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 6 -1.</_>\n        <_>\n          9 6 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 1 1 3 -1.</_>\n        <_>\n          19 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 3 -1.</_>\n        <_>\n          3 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 8 12 -1.</_>\n        <_>\n          12 4 4 6 2.</_>\n        <_>\n          8 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 3 -1.</_>\n        <_>\n          7 2 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 9 10 -1.</_>\n        <_>\n          6 6 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 12 -1.</_>\n        <_>\n          2 4 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 5 3 -1.</_>\n        <_>\n          7 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 3 3 -1.</_>\n        <_>\n          15 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 3 -1.</_>\n        <_>\n          6 15 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 3 3 -1.</_>\n        <_>\n          15 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 3 3 -1.</_>\n        <_>\n          2 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 12 -1.</_>\n        <_>\n          10 7 6 6 2.</_>\n        <_>\n          4 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 6 -1.</_>\n        <_>\n          10 7 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 5 2 -1.</_>\n        <_>\n          8 10 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 8 -1.</_>\n        <_>\n          9 10 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 6 -1.</_>\n        <_>\n          8 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 3 -1.</_>\n        <_>\n          12 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 1 -1.</_>\n        <_>\n          7 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 7 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 9 -1.</_>\n        <_>\n          7 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 1 -1.</_>\n        <_>\n          9 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 8 -1.</_>\n        <_>\n          2 12 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 2 6 -1.</_>\n        <_>\n          14 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 15 -1.</_>\n        <_>\n          1 10 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          10 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 7 14 -1.</_>\n        <_>\n          6 13 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 6 -1.</_>\n        <_>\n          13 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 4 -1.</_>\n        <_>\n          6 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 10 -1.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 4 6 -1.</_>\n        <_>\n          3 9 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 6 10 -1.</_>\n        <_>\n          15 3 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 10 -1.</_>\n        <_>\n          5 7 4 5 2.</_>\n        <_>\n          9 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 12 -1.</_>\n        <_>\n          10 4 6 6 2.</_>\n        <_>\n          4 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 9 -1.</_>\n        <_>\n          3 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 2 5 -1.</_>\n        <_>\n          11 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 5 -1.</_>\n        <_>\n          8 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 3 -1.</_>\n        <_>\n          10 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 2 -1.</_>\n        <_>\n          8 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 6 -1.</_>\n        <_>\n          4 14 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 5 9 -1.</_>\n        <_>\n          11 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 2 -1.</_>\n        <_>\n          6 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 5 -1.</_>\n        <_>\n          12 0 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          8 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 1 9 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 8 -1.</_>\n        <_>\n          3 2 2 4 2.</_>\n        <_>\n          5 6 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 4 6 -1.</_>\n        <_>\n          13 14 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 4 6 -1.</_>\n        <_>\n          3 14 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 4 -1.</_>\n        <_>\n          13 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 4 3 -1.</_>\n        <_>\n          4 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 11 8 -1.</_>\n        <_>\n          7 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 4 -1.</_>\n        <_>\n          8 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 1 -1.</_>\n        <_>\n          11 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 3 -1.</_>\n        <_>\n          5 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 6 -1.</_>\n        <_>\n          10 9 10 3 2.</_>\n        <_>\n          0 12 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 5 -1.</_>\n        <_>\n          9 6 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 1 3 -1.</_>\n        <_>\n          11 1 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 4 2 -1.</_>\n        <_>\n          4 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 4 3 -1.</_>\n        <_>\n          12 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 4 -1.</_>\n        <_>\n          7 0 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 8 -1.</_>\n        <_>\n          10 7 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 3 6 -1.</_>\n        <_>\n          0 7 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 4 -1.</_>\n        <_>\n          13 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 4 -1.</_>\n        <_>\n          4 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 8 -1.</_>\n        <_>\n          11 9 6 4 2.</_>\n        <_>\n          5 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 3 -1.</_>\n        <_>\n          9 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 2 4 -1.</_>\n        <_>\n          10 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 1 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 6 6 -1.</_>\n        <_>\n          15 3 3 3 2.</_>\n        <_>\n          12 6 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 6 -1.</_>\n        <_>\n          0 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 8 14 -1.</_>\n        <_>\n          12 3 4 7 2.</_>\n        <_>\n          8 10 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 7 15 -1.</_>\n        <_>\n          4 9 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 6 8 -1.</_>\n        <_>\n          15 2 3 4 2.</_>\n        <_>\n          12 6 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 6 8 -1.</_>\n        <_>\n          2 2 3 4 2.</_>\n        <_>\n          5 6 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 7 -1.</_>\n        <_>\n          8 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 8 14 -1.</_>\n        <_>\n          4 3 4 7 2.</_>\n        <_>\n          8 10 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 6 -1.</_>\n        <_>\n          18 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 6 -1.</_>\n        <_>\n          18 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 6 -1.</_>\n        <_>\n          0 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 6 -1.</_>\n        <_>\n          1 7 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 7 -1.</_>\n        <_>\n          3 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 14 -1.</_>\n        <_>\n          7 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 13 10 -1.</_>\n        <_>\n          3 12 13 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 2 2 -1.</_>\n        <_>\n          11 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 4 -1.</_>\n        <_>\n          2 11 8 2 2.</_>\n        <_>\n          10 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 9 -1.</_>\n        <_>\n          6 13 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 1 6 -1.</_>\n        <_>\n          14 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 1 -1.</_>\n        <_>\n          7 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 5 -1.</_>\n        <_>\n          8 8 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 5 4 -1.</_>\n        <_>\n          1 8 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 17 6 -1.</_>\n        <_>\n          3 3 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 2 -1.</_>\n        <_>\n          10 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 2 -1.</_>\n        <_>\n          10 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          9 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          8 10 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 4 -1.</_>\n        <_>\n          9 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          10 7 6 3 2.</_>\n        <_>\n          4 10 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          9 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 8 -1.</_>\n        <_>\n          8 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 6 -1.</_>\n        <_>\n          11 0 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 8 -1.</_>\n        <_>\n          8 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 13 -1.</_>\n        <_>\n          14 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 3 6 -1.</_>\n        <_>\n          8 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 13 -1.</_>\n        <_>\n          14 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 4 -1.</_>\n        <_>\n          0 7 5 2 2.</_>\n        <_>\n          5 9 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 13 -1.</_>\n        <_>\n          14 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 13 -1.</_>\n        <_>\n          3 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 1 -1.</_>\n        <_>\n          9 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 1 -1.</_>\n        <_>\n          9 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 4 4 -1.</_>\n        <_>\n          12 16 2 2 2.</_>\n        <_>\n          10 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 3 -1.</_>\n        <_>\n          10 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 2 -1.</_>\n        <_>\n          8 5 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 6 -1.</_>\n        <_>\n          6 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 12 -1.</_>\n        <_>\n          9 11 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 8 -1.</_>\n        <_>\n          4 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 8 5 -1.</_>\n        <_>\n          12 2 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 3 -1.</_>\n        <_>\n          0 9 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 5 -1.</_>\n        <_>\n          4 2 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 4 -1.</_>\n        <_>\n          13 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 1 -1.</_>\n        <_>\n          12 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 3 -1.</_>\n        <_>\n          7 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 6 -1.</_>\n        <_>\n          11 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 2 6 -1.</_>\n        <_>\n          12 16 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 3 3 -1.</_>\n        <_>\n          8 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 5 -1.</_>\n        <_>\n          12 0 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 9 -1.</_>\n        <_>\n          8 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 1 -1.</_>\n        <_>\n          12 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          8 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 4 2 -1.</_>\n        <_>\n          5 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 6 -1.</_>\n        <_>\n          2 3 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 2 -1.</_>\n        <_>\n          7 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 6 2 -1.</_>\n        <_>\n          16 8 3 1 2.</_>\n        <_>\n          13 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 6 -1.</_>\n        <_>\n          6 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          10 13 10 2 2.</_>\n        <_>\n          0 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 5 -1.</_>\n        <_>\n          9 7 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 2 -1.</_>\n        <_>\n          11 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 2 -1.</_>\n        <_>\n          1 8 3 1 2.</_>\n        <_>\n          4 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          10 2 10 1 2.</_>\n        <_>\n          0 3 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 5 3 -1.</_>\n        <_>\n          7 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          10 13 3 3 2.</_>\n        <_>\n          7 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 1 6 -1.</_>\n        <_>\n          16 13 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 1 6 -1.</_>\n        <_>\n          3 13 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 12 -1.</_>\n        <_>\n          11 4 7 6 2.</_>\n        <_>\n          4 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 3 -1.</_>\n        <_>\n          6 7 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 4 10 -1.</_>\n        <_>\n          3 1 2 5 2.</_>\n        <_>\n          5 6 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 2 -1.</_>\n        <_>\n          5 7 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 3 -1.</_>\n        <_>\n          15 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 4 -1.</_>\n        <_>\n          8 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 1 12 -1.</_>\n        <_>\n          13 10 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          4 5 6 6 2.</_>\n        <_>\n          10 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 7 3 -1.</_>\n        <_>\n          7 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 3 -1.</_>\n        <_>\n          3 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          10 2 7 1 2.</_>\n        <_>\n          3 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 3 10 -1.</_>\n        <_>\n          1 1 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 5 -1.</_>\n        <_>\n          11 0 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 2 -1.</_>\n        <_>\n          8 7 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          7 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 3 -1.</_>\n        <_>\n          7 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 6 -1.</_>\n        <_>\n          16 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 6 -1.</_>\n        <_>\n          6 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 17 10 -1.</_>\n        <_>\n          0 9 17 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 15 16 -1.</_>\n        <_>\n          3 12 15 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 4 -1.</_>\n        <_>\n          7 17 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 9 -1.</_>\n        <_>\n          15 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 2 -1.</_>\n        <_>\n          2 4 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 7 9 -1.</_>\n        <_>\n          13 9 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          10 2 10 3 2.</_>\n        <_>\n          0 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 3 4 -1.</_>\n        <_>\n          13 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 3 4 -1.</_>\n        <_>\n          4 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 3 -1.</_>\n        <_>\n          9 5 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 8 -1.</_>\n        <_>\n          7 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 6 -1.</_>\n        <_>\n          0 14 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 4 6 -1.</_>\n        <_>\n          4 13 2 3 2.</_>\n        <_>\n          6 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          10 0 4 6 2.</_>\n        <_>\n          6 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 2 -1.</_>\n        <_>\n          2 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 1 2 -1.</_>\n        <_>\n          3 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 1 -1.</_>\n        <_>\n          8 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 7 3 6 -1.</_>\n        <_>\n          17 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 2 -1.</_>\n        <_>\n          8 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 5 3 -1.</_>\n        <_>\n          11 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 5 3 -1.</_>\n        <_>\n          4 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 3 1 2 -1.</_>\n        <_>\n          19 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 3 -1.</_>\n        <_>\n          5 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 7 3 6 -1.</_>\n        <_>\n          17 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 3 6 -1.</_>\n        <_>\n          0 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 6 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 2 -1.</_>\n        <_>\n          12 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 2 -1.</_>\n        <_>\n          6 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 6 -1.</_>\n        <_>\n          8 3 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 3 -1.</_>\n        <_>\n          6 7 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 15 -1.</_>\n        <_>\n          16 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 3 2 -1.</_>\n        <_>\n          1 11 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 1 10 -1.</_>\n        <_>\n          14 9 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 12 -1.</_>\n        <_>\n          2 1 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 2 -1.</_>\n        <_>\n          11 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 2 -1.</_>\n        <_>\n          7 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 5 -1.</_>\n        <_>\n          8 8 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          3 0 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 2 -1.</_>\n        <_>\n          12 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 8 -1.</_>\n        <_>\n          8 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 5 3 -1.</_>\n        <_>\n          8 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 4 3 -1.</_>\n        <_>\n          7 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 2 -1.</_>\n        <_>\n          12 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 15 7 2 2.</_>\n        <_>\n          10 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 4 -1.</_>\n        <_>\n          10 2 8 2 2.</_>\n        <_>\n          2 4 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          3 8 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 2 -1.</_>\n        <_>\n          5 7 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 5 -1.</_>\n        <_>\n          10 7 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 2 -1.</_>\n        <_>\n          0 14 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 4 -1.</_>\n        <_>\n          1 7 3 2 2.</_>\n        <_>\n          4 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 1 12 -1.</_>\n        <_>\n          12 12 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          10 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 3 -1.</_>\n        <_>\n          14 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 3 -1.</_>\n        <_>\n          4 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 3 -1.</_>\n        <_>\n          8 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 2 4 -1.</_>\n        <_>\n          5 2 1 2 2.</_>\n        <_>\n          6 4 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 11 3 -1.</_>\n        <_>\n          5 6 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 5 -1.</_>\n        <_>\n          12 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 1 12 -1.</_>\n        <_>\n          7 12 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 3 -1.</_>\n        <_>\n          4 2 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          12 5 3 5 2.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 12 -1.</_>\n        <_>\n          5 5 4 6 2.</_>\n        <_>\n          9 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 2 -1.</_>\n        <_>\n          4 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 12 2 -1.</_>\n        <_>\n          8 18 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 4 16 -1.</_>\n        <_>\n          7 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 8 -1.</_>\n        <_>\n          7 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 1 -1.</_>\n        <_>\n          7 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 2 4 -1.</_>\n        <_>\n          11 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 8 -1.</_>\n        <_>\n          3 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 12 -1.</_>\n        <_>\n          7 7 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 2 -1.</_>\n        <_>\n          6 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 6 -1.</_>\n        <_>\n          16 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 2 -1.</_>\n        <_>\n          3 4 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 4 2 -1.</_>\n        <_>\n          2 17 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          10 13 3 3 2.</_>\n        <_>\n          7 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 4 -1.</_>\n        <_>\n          8 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 6 -1.</_>\n        <_>\n          0 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 3 -1.</_>\n        <_>\n          9 6 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 14 -1.</_>\n        <_>\n          9 6 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 4 -1.</_>\n        <_>\n          6 14 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 7 6 -1.</_>\n        <_>\n          10 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 2 -1.</_>\n        <_>\n          1 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 1 -1.</_>\n        <_>\n          6 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 10 -1.</_>\n        <_>\n          0 8 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 15 1 2 -1.</_>\n        <_>\n          19 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 8 -1.</_>\n        <_>\n          2 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 4 -1.</_>\n        <_>\n          11 1 9 2 2.</_>\n        <_>\n          2 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 1 2 -1.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 6 -1.</_>\n        <_>\n          10 2 5 3 2.</_>\n        <_>\n          5 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 4 -1.</_>\n        <_>\n          10 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 8 -1.</_>\n        <_>\n          8 5 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 4 3 -1.</_>\n        <_>\n          15 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 1 -1.</_>\n        <_>\n          9 18 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 4 3 -1.</_>\n        <_>\n          9 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 4 3 -1.</_>\n        <_>\n          7 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 15 1 2 -1.</_>\n        <_>\n          19 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 8 4 -1.</_>\n        <_>\n          0 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 4 -1.</_>\n        <_>\n          11 3 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          3 16 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 6 -1.</_>\n        <_>\n          6 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 14 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 3 4 -1.</_>\n        <_>\n          4 10 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 2 -1.</_>\n        <_>\n          13 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 4 -1.</_>\n        <_>\n          7 3 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 2 3 -1.</_>\n        <_>\n          2 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 12 -1.</_>\n        <_>\n          9 12 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 4 6 -1.</_>\n        <_>\n          3 14 2 3 2.</_>\n        <_>\n          5 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 15 2 2 -1.</_>\n        <_>\n          16 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 2 2 -1.</_>\n        <_>\n          2 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 3 -1.</_>\n        <_>\n          8 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 1 -1.</_>\n        <_>\n          10 7 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 3 -1.</_>\n        <_>\n          7 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 2 -1.</_>\n        <_>\n          9 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 5 -1.</_>\n        <_>\n          12 1 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 6 -1.</_>\n        <_>\n          7 2 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 6 5 -1.</_>\n        <_>\n          14 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 2 -1.</_>\n        <_>\n          9 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 1 3 -1.</_>\n        <_>\n          10 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 2 -1.</_>\n        <_>\n          6 6 1 1 2.</_>\n        <_>\n          7 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 4 -1.</_>\n        <_>\n          11 11 9 2 2.</_>\n        <_>\n          2 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 2 -1.</_>\n        <_>\n          6 6 1 1 2.</_>\n        <_>\n          7 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 2 -1.</_>\n        <_>\n          0 16 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 2 3 -1.</_>\n        <_>\n          4 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 3 -1.</_>\n        <_>\n          8 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 3 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 4 -1.</_>\n        <_>\n          12 7 3 2 2.</_>\n        <_>\n          9 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 6 -1.</_>\n        <_>\n          4 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 4 4 -1.</_>\n        <_>\n          13 15 2 2 2.</_>\n        <_>\n          11 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 2 -1.</_>\n        <_>\n          7 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 3 -1.</_>\n        <_>\n          13 1 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 4 4 -1.</_>\n        <_>\n          5 15 2 2 2.</_>\n        <_>\n          7 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 7 -1.</_>\n        <_>\n          9 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 3 -1.</_>\n        <_>\n          9 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 5 3 -1.</_>\n        <_>\n          7 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 3 -1.</_>\n        <_>\n          11 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 10 -1.</_>\n        <_>\n          6 14 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 6 2 -1.</_>\n        <_>\n          10 11 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 6 2 -1.</_>\n        <_>\n          7 11 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 1 -1.</_>\n        <_>\n          11 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 2 -1.</_>\n        <_>\n          7 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 5 -1.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 2 12 -1.</_>\n        <_>\n          7 11 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 3 -1.</_>\n        <_>\n          5 1 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 6 -1.</_>\n        <_>\n          18 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 6 -1.</_>\n        <_>\n          0 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 4 3 -1.</_>\n        <_>\n          7 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 6 -1.</_>\n        <_>\n          18 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 6 -1.</_>\n        <_>\n          0 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 6 3 -1.</_>\n        <_>\n          8 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 4 -1.</_>\n        <_>\n          8 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 6 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 2 -1.</_>\n        <_>\n          7 4 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          10 14 7 2 2.</_>\n        <_>\n          3 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 6 2 -1.</_>\n        <_>\n          6 15 3 1 2.</_>\n        <_>\n          9 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 2 -1.</_>\n        <_>\n          14 16 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 12 8 -1.</_>\n        <_>\n          2 16 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 7 2 -1.</_>\n        <_>\n          7 8 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 2 -1.</_>\n        <_>\n          0 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 5 -1.</_>\n        <_>\n          9 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 8 -1.</_>\n        <_>\n          8 5 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 4 -1.</_>\n        <_>\n          10 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 3 2 -1.</_>\n        <_>\n          4 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 3 -1.</_>\n        <_>\n          11 4 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 3 -1.</_>\n        <_>\n          7 4 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 5 2 -1.</_>\n        <_>\n          14 12 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 9 -1.</_>\n        <_>\n          3 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 13 -1.</_>\n        <_>\n          14 6 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 8 -1.</_>\n        <_>\n          3 6 7 4 2.</_>\n        <_>\n          10 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 11 -1.</_>\n        <_>\n          16 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 12 12 -1.</_>\n        <_>\n          3 4 6 6 2.</_>\n        <_>\n          9 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 5 3 -1.</_>\n        <_>\n          11 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 4 2 -1.</_>\n        <_>\n          4 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 2 -1.</_>\n        <_>\n          9 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 3 -1.</_>\n        <_>\n          5 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 3 -1.</_>\n        <_>\n          11 0 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 2 -1.</_>\n        <_>\n          5 6 3 1 2.</_>\n        <_>\n          8 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 4 3 -1.</_>\n        <_>\n          12 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 3 2 -1.</_>\n        <_>\n          3 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 2 -1.</_>\n        <_>\n          9 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 5 3 -1.</_>\n        <_>\n          4 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 4 3 -1.</_>\n        <_>\n          12 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 2 -1.</_>\n        <_>\n          9 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          8 10 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 6 3 -1.</_>\n        <_>\n          2 13 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 3 2 -1.</_>\n        <_>\n          16 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 18 2 -1.</_>\n        <_>\n          7 18 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 3 2 -1.</_>\n        <_>\n          16 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 3 2 -1.</_>\n        <_>\n          1 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 8 3 -1.</_>\n        <_>\n          5 15 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 14 -1.</_>\n        <_>\n          10 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 14 -1.</_>\n        <_>\n          8 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 3 -1.</_>\n        <_>\n          13 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 6 1 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          9 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 3 -1.</_>\n        <_>\n          8 0 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 18 -1.</_>\n        <_>\n          4 9 16 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 14 -1.</_>\n        <_>\n          1 8 16 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 15 4 -1.</_>\n        <_>\n          8 9 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 7 3 -1.</_>\n        <_>\n          6 13 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 2 3 -1.</_>\n        <_>\n          14 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 14 -1.</_>\n        <_>\n          2 3 8 7 2.</_>\n        <_>\n          10 10 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 2 3 -1.</_>\n        <_>\n          4 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 3 -1.</_>\n        <_>\n          1 2 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 11 -1.</_>\n        <_>\n          16 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 1 -1.</_>\n        <_>\n          9 0 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 7 -1.</_>\n        <_>\n          17 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 3 7 -1.</_>\n        <_>\n          2 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 12 -1.</_>\n        <_>\n          7 12 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 11 -1.</_>\n        <_>\n          2 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 20 -1.</_>\n        <_>\n          14 0 3 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 1 2 -1.</_>\n        <_>\n          0 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 8 -1.</_>\n        <_>\n          10 5 5 4 2.</_>\n        <_>\n          5 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 7 6 2 2.</_>\n        <_>\n          10 9 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 4 -1.</_>\n        <_>\n          5 1 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 4 -1.</_>\n        <_>\n          12 7 3 2 2.</_>\n        <_>\n          9 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 6 -1.</_>\n        <_>\n          5 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 6 4 -1.</_>\n        <_>\n          12 16 3 2 2.</_>\n        <_>\n          9 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 12 -1.</_>\n        <_>\n          9 10 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 18 -1.</_>\n        <_>\n          9 1 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 2 -1.</_>\n        <_>\n          8 12 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 2 -1.</_>\n        <_>\n          8 9 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 6 -1.</_>\n        <_>\n          9 0 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 3 2 -1.</_>\n        <_>\n          11 19 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 17 4 -1.</_>\n        <_>\n          1 3 17 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 17 -1.</_>\n        <_>\n          12 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 1 -1.</_>\n        <_>\n          6 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 3 -1.</_>\n        <_>\n          18 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 4 -1.</_>\n        <_>\n          8 6 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 10 -1.</_>\n        <_>\n          4 10 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 4 2 -1.</_>\n        <_>\n          7 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 6 -1.</_>\n        <_>\n          17 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 6 -1.</_>\n        <_>\n          9 7 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 6 -1.</_>\n        <_>\n          17 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 4 -1.</_>\n        <_>\n          9 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 3 -1.</_>\n        <_>\n          0 13 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 3 -1.</_>\n        <_>\n          3 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 7 -1.</_>\n        <_>\n          9 6 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 1 3 -1.</_>\n        <_>\n          14 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 14 -1.</_>\n        <_>\n          3 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 5 6 -1.</_>\n        <_>\n          12 16 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 5 6 -1.</_>\n        <_>\n          4 16 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 2 -1.</_>\n        <_>\n          12 10 1 1 2.</_>\n        <_>\n          11 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 14 -1.</_>\n        <_>\n          6 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 2 3 -1.</_>\n        <_>\n          10 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 3 -1.</_>\n        <_>\n          0 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 12 6 -1.</_>\n        <_>\n          5 14 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 9 -1.</_>\n        <_>\n          6 14 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 2 -1.</_>\n        <_>\n          12 10 1 1 2.</_>\n        <_>\n          11 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 1 3 -1.</_>\n        <_>\n          5 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 13 3 -1.</_>\n        <_>\n          4 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 6 -1.</_>\n        <_>\n          6 7 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          8 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 3 -1.</_>\n        <_>\n          8 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 3 -1.</_>\n        <_>\n          15 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 5 3 -1.</_>\n        <_>\n          1 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 12 -1.</_>\n        <_>\n          7 7 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 10 -1.</_>\n        <_>\n          0 1 3 5 2.</_>\n        <_>\n          3 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 3 -1.</_>\n        <_>\n          16 2 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 3 5 -1.</_>\n        <_>\n          13 2 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 6 -1.</_>\n        <_>\n          0 5 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 1 -1.</_>\n        <_>\n          9 18 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 2 -1.</_>\n        <_>\n          12 10 1 1 2.</_>\n        <_>\n          11 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 2 2 -1.</_>\n        <_>\n          7 10 1 1 2.</_>\n        <_>\n          8 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 4 -1.</_>\n        <_>\n          11 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 8 -1.</_>\n        <_>\n          9 12 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 3 -1.</_>\n        <_>\n          13 1 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          9 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 10 -1.</_>\n        <_>\n          10 7 5 5 2.</_>\n        <_>\n          5 12 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 8 2 -1.</_>\n        <_>\n          3 18 4 1 2.</_>\n        <_>\n          7 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 8 -1.</_>\n        <_>\n          12 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 8 -1.</_>\n        <_>\n          6 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 7 -1.</_>\n        <_>\n          12 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 1 -1.</_>\n        <_>\n          8 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 3 -1.</_>\n        <_>\n          15 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 2 -1.</_>\n        <_>\n          7 15 1 1 2.</_>\n        <_>\n          8 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 3 -1.</_>\n        <_>\n          15 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 7 -1.</_>\n        <_>\n          7 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 7 -1.</_>\n        <_>\n          18 1 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 8 20 -1.</_>\n        <_>\n          2 10 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 6 -1.</_>\n        <_>\n          3 2 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 2 -1.</_>\n        <_>\n          4 4 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 5 -1.</_>\n        <_>\n          16 0 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 4 -1.</_>\n        <_>\n          8 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 5 -1.</_>\n        <_>\n          16 0 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 13 -1.</_>\n        <_>\n          3 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 5 -1.</_>\n        <_>\n          16 0 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 5 -1.</_>\n        <_>\n          2 0 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 3 6 -1.</_>\n        <_>\n          14 14 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 3 6 -1.</_>\n        <_>\n          3 14 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 3 -1.</_>\n        <_>\n          16 2 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 10 -1.</_>\n        <_>\n          8 7 1 5 2.</_>\n        <_>\n          9 12 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 4 -1.</_>\n        <_>\n          11 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 3 -1.</_>\n        <_>\n          0 2 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 1 3 -1.</_>\n        <_>\n          13 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 3 5 -1.</_>\n        <_>\n          8 15 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 14 -1.</_>\n        <_>\n          10 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 5 6 -1.</_>\n        <_>\n          0 7 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 4 -1.</_>\n        <_>\n          9 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 10 -1.</_>\n        <_>\n          6 0 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 14 -1.</_>\n        <_>\n          10 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 14 -1.</_>\n        <_>\n          8 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 1 3 -1.</_>\n        <_>\n          13 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 3 -1.</_>\n        <_>\n          6 1 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 18 -1.</_>\n        <_>\n          19 1 1 9 2.</_>\n        <_>\n          18 10 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 3 -1.</_>\n        <_>\n          2 2 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 18 -1.</_>\n        <_>\n          19 1 1 9 2.</_>\n        <_>\n          18 10 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 4 6 -1.</_>\n        <_>\n          1 14 2 3 2.</_>\n        <_>\n          3 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 7 6 -1.</_>\n        <_>\n          10 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 4 -1.</_>\n        <_>\n          12 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 5 6 -1.</_>\n        <_>\n          5 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 1 8 -1.</_>\n        <_>\n          14 10 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 6 -1.</_>\n        <_>\n          1 7 9 3 2.</_>\n        <_>\n          10 10 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          9 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 5 -1.</_>\n        <_>\n          7 9 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 3 -1.</_>\n        <_>\n          9 6 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 4 -1.</_>\n        <_>\n          7 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 19 9 -1.</_>\n        <_>\n          1 3 19 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 3 6 -1.</_>\n        <_>\n          3 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 4 4 -1.</_>\n        <_>\n          15 7 2 2 2.</_>\n        <_>\n          13 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 4 4 -1.</_>\n        <_>\n          3 7 2 2 2.</_>\n        <_>\n          5 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 10 8 -1.</_>\n        <_>\n          9 10 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 12 -1.</_>\n        <_>\n          3 14 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 12 -1.</_>\n        <_>\n          11 5 5 6 2.</_>\n        <_>\n          6 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 4 -1.</_>\n        <_>\n          9 6 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 1 -1.</_>\n        <_>\n          13 2 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 1 -1.</_>\n        <_>\n          5 2 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 3 -1.</_>\n        <_>\n          13 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 1 4 -1.</_>\n        <_>\n          0 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 3 -1.</_>\n        <_>\n          13 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 2 -1.</_>\n        <_>\n          9 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 9 2 -1.</_>\n        <_>\n          6 16 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 4 -1.</_>\n        <_>\n          18 6 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 16 3 2 -1.</_>\n        <_>\n          15 17 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 9 -1.</_>\n        <_>\n          0 3 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          9 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          8 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          9 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 12 -1.</_>\n        <_>\n          11 6 4 6 2.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 12 -1.</_>\n        <_>\n          5 6 4 6 2.</_>\n        <_>\n          9 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 3 2 -1.</_>\n        <_>\n          2 17 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 6 6 -1.</_>\n        <_>\n          2 14 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 6 3 -1.</_>\n        <_>\n          6 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 5 3 -1.</_>\n        <_>\n          14 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 5 3 -1.</_>\n        <_>\n          14 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 2 -1.</_>\n        <_>\n          7 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 5 3 -1.</_>\n        <_>\n          1 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          10 13 2 3 2.</_>\n        <_>\n          8 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 3 -1.</_>\n        <_>\n          8 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 4 -1.</_>\n        <_>\n          12 2 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          0 2 10 1 2.</_>\n        <_>\n          10 3 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 1 -1.</_>\n        <_>\n          6 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 3 6 -1.</_>\n        <_>\n          2 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 8 -1.</_>\n        <_>\n          17 12 3 4 2.</_>\n        <_>\n          14 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 10 6 -1.</_>\n        <_>\n          4 13 5 3 2.</_>\n        <_>\n          9 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 1 2 -1.</_>\n        <_>\n          14 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 2 -1.</_>\n        <_>\n          14 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 2 -1.</_>\n        <_>\n          4 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 9 2 -1.</_>\n        <_>\n          8 13 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 6 -1.</_>\n        <_>\n          11 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 12 -1.</_>\n        <_>\n          5 12 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 6 -1.</_>\n        <_>\n          11 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 6 -1.</_>\n        <_>\n          6 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 11 3 -1.</_>\n        <_>\n          5 5 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 5 10 -1.</_>\n        <_>\n          7 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 18 2 -1.</_>\n        <_>\n          2 9 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 5 3 -1.</_>\n        <_>\n          7 18 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 1 -1.</_>\n        <_>\n          9 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 6 6 -1.</_>\n        <_>\n          0 14 3 3 2.</_>\n        <_>\n          3 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 1 -1.</_>\n        <_>\n          9 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 12 1 -1.</_>\n        <_>\n          7 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 7 -1.</_>\n        <_>\n          14 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 2 -1.</_>\n        <_>\n          1 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 9 -1.</_>\n        <_>\n          10 12 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 2 -1.</_>\n        <_>\n          5 1 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 2 3 -1.</_>\n        <_>\n          17 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 2 3 -1.</_>\n        <_>\n          1 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          10 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 3 -1.</_>\n        <_>\n          8 5 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 6 -1.</_>\n        <_>\n          9 5 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 12 12 -1.</_>\n        <_>\n          3 4 6 6 2.</_>\n        <_>\n          9 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 15 -1.</_>\n        <_>\n          11 2 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 6 17 -1.</_>\n        <_>\n          4 2 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 7 -1.</_>\n        <_>\n          14 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 7 -1.</_>\n        <_>\n          3 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 15 -1.</_>\n        <_>\n          11 2 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 15 -1.</_>\n        <_>\n          7 2 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 9 3 6 -1.</_>\n        <_>\n          17 11 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 6 -1.</_>\n        <_>\n          8 7 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 6 -1.</_>\n        <_>\n          10 10 9 3 2.</_>\n        <_>\n          1 13 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 9 -1.</_>\n        <_>\n          0 12 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 3 4 -1.</_>\n        <_>\n          5 14 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 16 12 -1.</_>\n        <_>\n          3 9 16 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 12 12 -1.</_>\n        <_>\n          1 1 6 6 2.</_>\n        <_>\n          7 7 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 2 4 -1.</_>\n        <_>\n          11 4 1 2 2.</_>\n        <_>\n          10 6 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 2 -1.</_>\n        <_>\n          0 9 5 1 2.</_>\n        <_>\n          5 10 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 3 3 -1.</_>\n        <_>\n          9 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 9 2 -1.</_>\n        <_>\n          3 13 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 6 -1.</_>\n        <_>\n          3 6 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 4 -1.</_>\n        <_>\n          12 7 3 2 2.</_>\n        <_>\n          9 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 8 -1.</_>\n        <_>\n          4 0 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 12 -1.</_>\n        <_>\n          9 11 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 10 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 8 3 -1.</_>\n        <_>\n          6 18 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 2 -1.</_>\n        <_>\n          13 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 5 -1.</_>\n        <_>\n          9 5 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 3 6 -1.</_>\n        <_>\n          12 16 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 8 2 -1.</_>\n        <_>\n          1 12 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 3 6 -1.</_>\n        <_>\n          0 7 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 2 -1.</_>\n        <_>\n          13 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 4 6 -1.</_>\n        <_>\n          4 14 2 3 2.</_>\n        <_>\n          6 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 2 -1.</_>\n        <_>\n          13 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 8 -1.</_>\n        <_>\n          17 0 3 4 2.</_>\n        <_>\n          14 4 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 3 2 -1.</_>\n        <_>\n          8 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 0 4 6 2.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 10 -1.</_>\n        <_>\n          15 0 1 5 2.</_>\n        <_>\n          14 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 8 6 -1.</_>\n        <_>\n          5 3 4 3 2.</_>\n        <_>\n          9 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 2 -1.</_>\n        <_>\n          9 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 4 3 -1.</_>\n        <_>\n          15 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 2 3 -1.</_>\n        <_>\n          8 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 4 -1.</_>\n        <_>\n          10 13 7 2 2.</_>\n        <_>\n          3 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 3 -1.</_>\n        <_>\n          1 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 1 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 16 15 -1.</_>\n        <_>\n          3 10 16 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 4 2 -1.</_>\n        <_>\n          8 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 10 -1.</_>\n        <_>\n          10 4 6 5 2.</_>\n        <_>\n          4 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          10 12 2 4 2.</_>\n        <_>\n          8 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 3 2 -1.</_>\n        <_>\n          13 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 3 2 -1.</_>\n        <_>\n          8 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 14 -1.</_>\n        <_>\n          9 0 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 3 -1.</_>\n        <_>\n          10 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 2 3 -1.</_>\n        <_>\n          10 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 6 -1.</_>\n        <_>\n          0 11 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 2 -1.</_>\n        <_>\n          6 1 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 7 3 -1.</_>\n        <_>\n          6 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 8 9 -1.</_>\n        <_>\n          8 13 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 3 2 -1.</_>\n        <_>\n          6 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 8 -1.</_>\n        <_>\n          17 1 3 4 2.</_>\n        <_>\n          14 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 8 -1.</_>\n        <_>\n          0 1 3 4 2.</_>\n        <_>\n          3 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 6 -1.</_>\n        <_>\n          10 2 9 3 2.</_>\n        <_>\n          1 5 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 1 -1.</_>\n        <_>\n          10 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 4 6 -1.</_>\n        <_>\n          15 2 2 3 2.</_>\n        <_>\n          13 5 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 1 3 -1.</_>\n        <_>\n          13 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 5 3 -1.</_>\n        <_>\n          2 17 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 4 6 -1.</_>\n        <_>\n          15 2 2 3 2.</_>\n        <_>\n          13 5 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 6 -1.</_>\n        <_>\n          3 2 2 3 2.</_>\n        <_>\n          5 5 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 1 2 -1.</_>\n        <_>\n          13 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 2 -1.</_>\n        <_>\n          5 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 2 -1.</_>\n        <_>\n          13 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 2 2 -1.</_>\n        <_>\n          6 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 17 3 2 -1.</_>\n        <_>\n          13 18 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 4 4 -1.</_>\n        <_>\n          6 16 2 2 2.</_>\n        <_>\n          8 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 3 -1.</_>\n        <_>\n          9 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 6 -1.</_>\n        <_>\n          9 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 2 3 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 6 -1.</_>\n        <_>\n          1 12 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 2 -1.</_>\n        <_>\n          8 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 2 -1.</_>\n        <_>\n          7 10 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 2 3 -1.</_>\n        <_>\n          8 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 3 4 -1.</_>\n        <_>\n          18 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 18 1 -1.</_>\n        <_>\n          7 19 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 2 -1.</_>\n        <_>\n          10 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 1 6 -1.</_>\n        <_>\n          1 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 8 3 -1.</_>\n        <_>\n          12 17 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 3 4 -1.</_>\n        <_>\n          1 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 2 -1.</_>\n        <_>\n          7 11 1 1 2.</_>\n        <_>\n          8 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 2 5 -1.</_>\n        <_>\n          11 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 5 -1.</_>\n        <_>\n          8 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          5 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 19 15 1 -1.</_>\n        <_>\n          9 19 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 15 1 -1.</_>\n        <_>\n          6 19 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 15 -1.</_>\n        <_>\n          7 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 5 -1.</_>\n        <_>\n          9 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 7 -1.</_>\n        <_>\n          10 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 3 3 -1.</_>\n        <_>\n          16 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 3 3 -1.</_>\n        <_>\n          1 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 3 -1.</_>\n        <_>\n          6 7 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 6 2 -1.</_>\n        <_>\n          0 16 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 4 -1.</_>\n        <_>\n          7 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 4 10 -1.</_>\n        <_>\n          16 10 2 5 2.</_>\n        <_>\n          14 15 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 2 -1.</_>\n        <_>\n          4 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 2 -1.</_>\n        <_>\n          11 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 4 10 -1.</_>\n        <_>\n          2 10 2 5 2.</_>\n        <_>\n          4 15 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 6 -1.</_>\n        <_>\n          10 13 10 3 2.</_>\n        <_>\n          0 16 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 2 15 -1.</_>\n        <_>\n          1 5 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          10 7 9 2 2.</_>\n        <_>\n          1 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 17 -1.</_>\n        <_>\n          1 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 6 -1.</_>\n        <_>\n          10 6 8 3 2.</_>\n        <_>\n          2 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 1 3 -1.</_>\n        <_>\n          8 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 2 -1.</_>\n        <_>\n          8 16 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 2 -1.</_>\n        <_>\n          5 2 4 1 2.</_>\n        <_>\n          9 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 6 -1.</_>\n        <_>\n          6 14 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 2 -1.</_>\n        <_>\n          9 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 6 -1.</_>\n        <_>\n          18 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 2 -1.</_>\n        <_>\n          9 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 6 -1.</_>\n        <_>\n          18 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 1 3 -1.</_>\n        <_>\n          9 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 6 -1.</_>\n        <_>\n          18 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 2 6 -1.</_>\n        <_>\n          0 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          9 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 3 -1.</_>\n        <_>\n          3 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 4 3 -1.</_>\n        <_>\n          13 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 6 -1.</_>\n        <_>\n          5 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 4 3 -1.</_>\n        <_>\n          3 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 15 5 -1.</_>\n        <_>\n          8 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 2 -1.</_>\n        <_>\n          7 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 9 -1.</_>\n        <_>\n          11 3 1 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 6 -1.</_>\n        <_>\n          10 6 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 3 -1.</_>\n        <_>\n          9 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 9 -1.</_>\n        <_>\n          2 9 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 3 5 -1.</_>\n        <_>\n          10 13 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 3 -1.</_>\n        <_>\n          9 7 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 2 -1.</_>\n        <_>\n          9 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 2 -1.</_>\n        <_>\n          9 9 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 3 1 -1.</_>\n        <_>\n          11 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 11 15 -1.</_>\n        <_>\n          0 6 11 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 1 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 6 4 -1.</_>\n        <_>\n          5 16 3 2 2.</_>\n        <_>\n          8 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 8 -1.</_>\n        <_>\n          6 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 6 -1.</_>\n        <_>\n          5 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 10 -1.</_>\n        <_>\n          11 6 4 5 2.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 10 -1.</_>\n        <_>\n          5 6 4 5 2.</_>\n        <_>\n          9 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 2 -1.</_>\n        <_>\n          9 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 8 2 -1.</_>\n        <_>\n          5 13 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 8 2 -1.</_>\n        <_>\n          10 3 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 10 -1.</_>\n        <_>\n          4 0 1 5 2.</_>\n        <_>\n          5 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 2 -1.</_>\n        <_>\n          9 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 3 -1.</_>\n        <_>\n          2 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 2 -1.</_>\n        <_>\n          8 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 6 -1.</_>\n        <_>\n          17 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 3 4 -1.</_>\n        <_>\n          2 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 4 6 -1.</_>\n        <_>\n          14 10 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 3 8 -1.</_>\n        <_>\n          2 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          8 16 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 2 2 -1.</_>\n        <_>\n          3 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 4 6 -1.</_>\n        <_>\n          14 10 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 4 6 -1.</_>\n        <_>\n          2 10 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 6 -1.</_>\n        <_>\n          10 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 6 -1.</_>\n        <_>\n          8 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 6 -1.</_>\n        <_>\n          12 2 1 3 2.</_>\n        <_>\n          11 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 5 -1.</_>\n        <_>\n          8 6 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 1 3 6 -1.</_>\n        <_>\n          17 3 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 3 2 -1.</_>\n        <_>\n          10 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 2 -1.</_>\n        <_>\n          9 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 5 2 -1.</_>\n        <_>\n          12 4 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 5 12 -1.</_>\n        <_>\n          7 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 2 -1.</_>\n        <_>\n          4 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 4 2 -1.</_>\n        <_>\n          13 14 2 1 2.</_>\n        <_>\n          11 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 1 3 -1.</_>\n        <_>\n          5 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 1 -1.</_>\n        <_>\n          10 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 1 -1.</_>\n        <_>\n          7 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 3 -1.</_>\n        <_>\n          9 18 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 1 3 -1.</_>\n        <_>\n          4 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 3 -1.</_>\n        <_>\n          12 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 3 -1.</_>\n        <_>\n          4 6 12 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 3 -1.</_>\n        <_>\n          9 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 3 3 -1.</_>\n        <_>\n          5 9 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 17 -1.</_>\n        <_>\n          9 0 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 3 -1.</_>\n        <_>\n          9 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 15 -1.</_>\n        <_>\n          9 10 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 2 3 -1.</_>\n        <_>\n          8 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 5 -1.</_>\n        <_>\n          9 1 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          0 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 5 3 -1.</_>\n        <_>\n          2 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 9 15 -1.</_>\n        <_>\n          2 10 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 12 10 -1.</_>\n        <_>\n          11 0 6 5 2.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 3 -1.</_>\n        <_>\n          6 1 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 1 -1.</_>\n        <_>\n          12 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 2 10 -1.</_>\n        <_>\n          3 1 1 5 2.</_>\n        <_>\n          4 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 1 -1.</_>\n        <_>\n          13 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 4 6 -1.</_>\n        <_>\n          4 15 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 1 -1.</_>\n        <_>\n          13 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 1 -1.</_>\n        <_>\n          6 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 2 -1.</_>\n        <_>\n          5 7 1 1 2.</_>\n        <_>\n          6 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 2 -1.</_>\n        <_>\n          16 4 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 18 -1.</_>\n        <_>\n          0 2 1 9 2.</_>\n        <_>\n          1 11 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          10 2 9 2 2.</_>\n        <_>\n          1 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 3 -1.</_>\n        <_>\n          9 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 5 3 -1.</_>\n        <_>\n          11 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 7 3 -1.</_>\n        <_>\n          6 5 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 17 3 3 -1.</_>\n        <_>\n          13 18 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 4 -1.</_>\n        <_>\n          9 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 4 -1.</_>\n        <_>\n          11 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 9 3 -1.</_>\n        <_>\n          3 17 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 8 -1.</_>\n        <_>\n          12 0 1 4 2.</_>\n        <_>\n          11 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          0 8 3 6 2.</_>\n        <_>\n          3 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 4 12 -1.</_>\n        <_>\n          10 13 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 8 14 -1.</_>\n        <_>\n          5 10 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 1 -1.</_>\n        <_>\n          14 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 4 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 5 8 -1.</_>\n        <_>\n          10 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 8 -1.</_>\n        <_>\n          8 1 2 4 2.</_>\n        <_>\n          10 5 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 1 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 3 4 -1.</_>\n        <_>\n          9 9 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 6 -1.</_>\n        <_>\n          18 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          9 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 1 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 3 6 -1.</_>\n        <_>\n          12 13 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 10 -1.</_>\n        <_>\n          10 4 9 5 2.</_>\n        <_>\n          1 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 9 -1.</_>\n        <_>\n          8 9 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 3 -1.</_>\n        <_>\n          8 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 4 3 -1.</_>\n        <_>\n          14 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 3 10 -1.</_>\n        <_>\n          6 10 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 1 6 -1.</_>\n        <_>\n          0 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 1 3 -1.</_>\n        <_>\n          10 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 4 3 -1.</_>\n        <_>\n          2 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 8 -1.</_>\n        <_>\n          19 3 1 4 2.</_>\n        <_>\n          18 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 8 -1.</_>\n        <_>\n          0 3 1 4 2.</_>\n        <_>\n          1 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 10 -1.</_>\n        <_>\n          10 7 7 5 2.</_>\n        <_>\n          3 12 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 19 3 -1.</_>\n        <_>\n          0 8 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 3 -1.</_>\n        <_>\n          12 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 1 3 -1.</_>\n        <_>\n          0 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 3 -1.</_>\n        <_>\n          12 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 3 -1.</_>\n        <_>\n          5 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 2 -1.</_>\n        <_>\n          8 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 12 -1.</_>\n        <_>\n          8 3 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 2 3 -1.</_>\n        <_>\n          13 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 4 -1.</_>\n        <_>\n          0 12 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 17 14 -1.</_>\n        <_>\n          2 7 17 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 4 -1.</_>\n        <_>\n          14 6 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 4 -1.</_>\n        <_>\n          3 6 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 2 -1.</_>\n        <_>\n          13 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 2 -1.</_>\n        <_>\n          0 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 14 2 -1.</_>\n        <_>\n          13 11 7 1 2.</_>\n        <_>\n          6 12 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 2 -1.</_>\n        <_>\n          8 5 1 1 2.</_>\n        <_>\n          9 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 3 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 3 12 -1.</_>\n        <_>\n          2 1 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 1 3 -1.</_>\n        <_>\n          17 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 1 3 -1.</_>\n        <_>\n          2 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 1 3 -1.</_>\n        <_>\n          14 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 2 3 -1.</_>\n        <_>\n          7 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          10 13 2 3 2.</_>\n        <_>\n          8 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 1 3 -1.</_>\n        <_>\n          5 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 20 -1.</_>\n        <_>\n          16 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 6 -1.</_>\n        <_>\n          5 1 1 3 2.</_>\n        <_>\n          6 4 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 12 -1.</_>\n        <_>\n          15 2 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 1 8 -1.</_>\n        <_>\n          14 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 10 -1.</_>\n        <_>\n          1 4 7 5 2.</_>\n        <_>\n          8 9 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 14 -1.</_>\n        <_>\n          14 6 3 7 2.</_>\n        <_>\n          11 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 14 -1.</_>\n        <_>\n          3 6 3 7 2.</_>\n        <_>\n          6 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 15 2 -1.</_>\n        <_>\n          9 9 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 15 2 -1.</_>\n        <_>\n          6 9 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 9 -1.</_>\n        <_>\n          6 14 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 8 -1.</_>\n        <_>\n          8 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 2 6 -1.</_>\n        <_>\n          14 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 4 -1.</_>\n        <_>\n          5 7 3 2 2.</_>\n        <_>\n          8 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 19 -1.</_>\n        <_>\n          7 1 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 5 -1.</_>\n        <_>\n          4 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 6 2 -1.</_>\n        <_>\n          12 18 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 6 2 -1.</_>\n        <_>\n          2 18 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 6 -1.</_>\n        <_>\n          17 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 3 -1.</_>\n        <_>\n          8 18 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 6 -1.</_>\n        <_>\n          10 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 6 -1.</_>\n        <_>\n          17 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 2 3 -1.</_>\n        <_>\n          8 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 2 -1.</_>\n        <_>\n          11 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 6 -1.</_>\n        <_>\n          0 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 6 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 2 -1.</_>\n        <_>\n          5 6 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 4 -1.</_>\n        <_>\n          11 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 5 9 -1.</_>\n        <_>\n          1 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 2 3 -1.</_>\n        <_>\n          13 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 3 -1.</_>\n        <_>\n          7 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 8 -1.</_>\n        <_>\n          2 15 18 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          5 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 2 -1.</_>\n        <_>\n          12 6 2 1 2.</_>\n        <_>\n          10 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 2 -1.</_>\n        <_>\n          6 6 2 1 2.</_>\n        <_>\n          8 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 4 -1.</_>\n        <_>\n          11 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 2 7 -1.</_>\n        <_>\n          8 1 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 15 14 -1.</_>\n        <_>\n          4 9 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          9 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 18 4 -1.</_>\n        <_>\n          11 3 9 2 2.</_>\n        <_>\n          2 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 3 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 2 -1.</_>\n        <_>\n          7 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 7 -1.</_>\n        <_>\n          9 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 2 3 -1.</_>\n        <_>\n          6 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 14 18 -1.</_>\n        <_>\n          6 9 14 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 6 3 -1.</_>\n        <_>\n          2 17 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          10 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 3 -1.</_>\n        <_>\n          7 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 3 -1.</_>\n        <_>\n          7 13 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 2 -1.</_>\n        <_>\n          9 12 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 6 -1.</_>\n        <_>\n          5 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 2 -1.</_>\n        <_>\n          11 13 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 6 -1.</_>\n        <_>\n          6 10 4 3 2.</_>\n        <_>\n          10 13 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 4 -1.</_>\n        <_>\n          11 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 3 -1.</_>\n        <_>\n          9 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 1 9 -1.</_>\n        <_>\n          13 6 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 14 6 -1.</_>\n        <_>\n          1 15 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 1 6 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 8 -1.</_>\n        <_>\n          1 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 18 -1.</_>\n        <_>\n          18 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 6 2 -1.</_>\n        <_>\n          2 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 8 6 -1.</_>\n        <_>\n          9 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 6 -1.</_>\n        <_>\n          6 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 3 -1.</_>\n        <_>\n          14 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 18 -1.</_>\n        <_>\n          1 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 18 2 -1.</_>\n        <_>\n          10 18 9 1 2.</_>\n        <_>\n          1 19 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 2 2 -1.</_>\n        <_>\n          3 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 5 3 -1.</_>\n        <_>\n          8 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 2 3 -1.</_>\n        <_>\n          8 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 2 -1.</_>\n        <_>\n          9 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 5 2 -1.</_>\n        <_>\n          15 6 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 5 2 -1.</_>\n        <_>\n          0 6 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 14 1 6 -1.</_>\n        <_>\n          17 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 3 -1.</_>\n        <_>\n          5 9 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 18 -1.</_>\n        <_>\n          2 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 1 3 -1.</_>\n        <_>\n          17 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 1 6 -1.</_>\n        <_>\n          2 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 8 1 2 -1.</_>\n        <_>\n          19 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 3 -1.</_>\n        <_>\n          6 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 3 -1.</_>\n        <_>\n          9 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 1 3 -1.</_>\n        <_>\n          2 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 8 2 -1.</_>\n        <_>\n          16 4 4 1 2.</_>\n        <_>\n          12 5 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 8 2 -1.</_>\n        <_>\n          0 4 4 1 2.</_>\n        <_>\n          4 5 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 18 4 -1.</_>\n        <_>\n          2 18 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 4 -1.</_>\n        <_>\n          7 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 3 -1.</_>\n        <_>\n          4 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 20 -1.</_>\n        <_>\n          2 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 8 -1.</_>\n        <_>\n          14 4 2 4 2.</_>\n        <_>\n          12 8 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 2 -1.</_>\n        <_>\n          6 7 1 1 2.</_>\n        <_>\n          7 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 2 3 -1.</_>\n        <_>\n          10 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          8 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 6 12 -1.</_>\n        <_>\n          8 8 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 11 12 -1.</_>\n        <_>\n          4 4 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 11 -1.</_>\n        <_>\n          16 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 4 3 -1.</_>\n        <_>\n          0 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 3 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 2 -1.</_>\n        <_>\n          5 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 3 3 -1.</_>\n        <_>\n          10 15 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          9 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 3 3 -1.</_>\n        <_>\n          10 15 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 2 -1.</_>\n        <_>\n          8 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 4 -1.</_>\n        <_>\n          10 10 8 2 2.</_>\n        <_>\n          2 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 4 17 -1.</_>\n        <_>\n          4 3 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 7 -1.</_>\n        <_>\n          15 13 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 6 1 -1.</_>\n        <_>\n          5 2 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 4 -1.</_>\n        <_>\n          9 2 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 0 4 6 2.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 2 -1.</_>\n        <_>\n          14 7 1 1 2.</_>\n        <_>\n          13 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 14 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 2 3 -1.</_>\n        <_>\n          14 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 12 -1.</_>\n        <_>\n          3 8 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 16 2 -1.</_>\n        <_>\n          3 0 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 3 -1.</_>\n        <_>\n          6 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 6 3 -1.</_>\n        <_>\n          8 16 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 1 6 -1.</_>\n        <_>\n          0 12 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 3 -1.</_>\n        <_>\n          10 10 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 2 3 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 1 -1.</_>\n        <_>\n          5 7 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 19 -1.</_>\n        <_>\n          10 0 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 6 -1.</_>\n        <_>\n          10 6 10 3 2.</_>\n        <_>\n          0 9 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 2 2 -1.</_>\n        <_>\n          3 6 1 1 2.</_>\n        <_>\n          4 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 2 2 -1.</_>\n        <_>\n          16 6 1 1 2.</_>\n        <_>\n          15 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 2 2 -1.</_>\n        <_>\n          3 6 1 1 2.</_>\n        <_>\n          4 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 1 12 -1.</_>\n        <_>\n          14 10 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 10 -1.</_>\n        <_>\n          2 5 8 5 2.</_>\n        <_>\n          10 10 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 2 2 -1.</_>\n        <_>\n          1 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 5 -1.</_>\n        <_>\n          10 0 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 5 -1.</_>\n        <_>\n          5 0 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 17 -1.</_>\n        <_>\n          11 2 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 17 -1.</_>\n        <_>\n          8 2 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 2 9 -1.</_>\n        <_>\n          15 11 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 2 9 -1.</_>\n        <_>\n          4 11 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 14 4 -1.</_>\n        <_>\n          5 16 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 1 -1.</_>\n        <_>\n          7 4 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 12 -1.</_>\n        <_>\n          9 12 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 6 -1.</_>\n        <_>\n          12 3 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 6 -1.</_>\n        <_>\n          5 2 3 3 2.</_>\n        <_>\n          8 5 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 6 4 -1.</_>\n        <_>\n          12 16 3 2 2.</_>\n        <_>\n          9 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 3 -1.</_>\n        <_>\n          7 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 9 10 -1.</_>\n        <_>\n          7 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 4 -1.</_>\n        <_>\n          7 9 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 6 -1.</_>\n        <_>\n          11 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 5 3 -1.</_>\n        <_>\n          7 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 6 -1.</_>\n        <_>\n          10 11 3 3 2.</_>\n        <_>\n          7 14 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 9 -1.</_>\n        <_>\n          0 3 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 1 6 -1.</_>\n        <_>\n          13 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 1 6 -1.</_>\n        <_>\n          6 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 2 3 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 3 -1.</_>\n        <_>\n          7 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 11 3 -1.</_>\n        <_>\n          9 1 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 3 -1.</_>\n        <_>\n          0 7 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 1 2 -1.</_>\n        <_>\n          10 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 6 -1.</_>\n        <_>\n          10 6 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 1 -1.</_>\n        <_>\n          9 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 12 1 -1.</_>\n        <_>\n          7 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 2 -1.</_>\n        <_>\n          6 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 1 -1.</_>\n        <_>\n          9 0 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 2 1 -1.</_>\n        <_>\n          8 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 9 13 -1.</_>\n        <_>\n          9 4 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 4 2 -1.</_>\n        <_>\n          6 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 6 -1.</_>\n        <_>\n          16 2 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 6 3 -1.</_>\n        <_>\n          0 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 3 10 -1.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 3 -1.</_>\n        <_>\n          10 4 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 8 -1.</_>\n        <_>\n          9 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 13 -1.</_>\n        <_>\n          9 6 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 0 4 6 2.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 8 -1.</_>\n        <_>\n          16 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 6 -1.</_>\n        <_>\n          7 0 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 8 -1.</_>\n        <_>\n          16 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 6 -1.</_>\n        <_>\n          0 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 2 -1.</_>\n        <_>\n          12 12 3 1 2.</_>\n        <_>\n          9 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 2 2 -1.</_>\n        <_>\n          12 6 1 1 2.</_>\n        <_>\n          11 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 2 -1.</_>\n        <_>\n          7 9 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 2 2 -1.</_>\n        <_>\n          12 6 1 1 2.</_>\n        <_>\n          11 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 12 8 -1.</_>\n        <_>\n          7 4 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 5 3 -1.</_>\n        <_>\n          13 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 3 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 2 3 -1.</_>\n        <_>\n          14 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 1 3 -1.</_>\n        <_>\n          5 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 2 3 -1.</_>\n        <_>\n          13 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 3 -1.</_>\n        <_>\n          5 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 3 -1.</_>\n        <_>\n          9 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 2 2 -1.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 4 -1.</_>\n        <_>\n          15 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 2 -1.</_>\n        <_>\n          3 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 2 2 -1.</_>\n        <_>\n          13 15 1 1 2.</_>\n        <_>\n          12 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 2 -1.</_>\n        <_>\n          9 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 14 9 -1.</_>\n        <_>\n          4 14 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 4 3 -1.</_>\n        <_>\n          7 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 1 4 -1.</_>\n        <_>\n          15 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 1 4 -1.</_>\n        <_>\n          4 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          16 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 12 -1.</_>\n        <_>\n          4 1 1 6 2.</_>\n        <_>\n          5 7 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 6 6 -1.</_>\n        <_>\n          14 14 3 3 2.</_>\n        <_>\n          11 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 6 6 -1.</_>\n        <_>\n          3 14 3 3 2.</_>\n        <_>\n          6 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 17 3 2 -1.</_>\n        <_>\n          14 18 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 3 2 -1.</_>\n        <_>\n          3 18 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          16 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 13 -1.</_>\n        <_>\n          2 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 2 2 -1.</_>\n        <_>\n          6 15 1 1 2.</_>\n        <_>\n          7 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 6 -1.</_>\n        <_>\n          10 11 4 3 2.</_>\n        <_>\n          6 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 2 2 -1.</_>\n        <_>\n          7 6 1 1 2.</_>\n        <_>\n          8 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 6 -1.</_>\n        <_>\n          10 2 8 3 2.</_>\n        <_>\n          2 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 3 10 -1.</_>\n        <_>\n          11 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 10 -1.</_>\n        <_>\n          6 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 2 -1.</_>\n        <_>\n          11 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 1 3 -1.</_>\n        <_>\n          10 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 18 -1.</_>\n        <_>\n          1 2 2 9 2.</_>\n        <_>\n          3 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 12 -1.</_>\n        <_>\n          12 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 1 6 -1.</_>\n        <_>\n          0 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 3 -1.</_>\n        <_>\n          8 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 2 -1.</_>\n        <_>\n          11 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 2 -1.</_>\n        <_>\n          8 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 1 -1.</_>\n        <_>\n          11 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 3 -1.</_>\n        <_>\n          9 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 8 6 -1.</_>\n        <_>\n          16 7 4 3 2.</_>\n        <_>\n          12 10 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 6 -1.</_>\n        <_>\n          0 7 4 3 2.</_>\n        <_>\n          4 10 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 10 -1.</_>\n        <_>\n          19 2 1 5 2.</_>\n        <_>\n          18 7 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 4 -1.</_>\n        <_>\n          3 2 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 1 -1.</_>\n        <_>\n          11 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 2 -1.</_>\n        <_>\n          7 15 1 1 2.</_>\n        <_>\n          8 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 1 6 -1.</_>\n        <_>\n          11 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 1 6 -1.</_>\n        <_>\n          8 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 2 1 -1.</_>\n        <_>\n          14 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 2 3 -1.</_>\n        <_>\n          8 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 7 4 -1.</_>\n        <_>\n          12 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 3 -1.</_>\n        <_>\n          4 15 12 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 2 -1.</_>\n        <_>\n          11 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 2 -1.</_>\n        <_>\n          4 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 6 -1.</_>\n        <_>\n          10 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 2 -1.</_>\n        <_>\n          7 13 1 1 2.</_>\n        <_>\n          8 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 14 4 -1.</_>\n        <_>\n          11 11 7 2 2.</_>\n        <_>\n          4 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 18 2 -1.</_>\n        <_>\n          7 18 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 2 2 -1.</_>\n        <_>\n          12 18 1 1 2.</_>\n        <_>\n          11 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 2 2 -1.</_>\n        <_>\n          7 18 1 1 2.</_>\n        <_>\n          8 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 8 2 -1.</_>\n        <_>\n          12 19 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 2 -1.</_>\n        <_>\n          7 15 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          10 12 2 4 2.</_>\n        <_>\n          8 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 3 3 -1.</_>\n        <_>\n          4 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 2 -1.</_>\n        <_>\n          9 10 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 15 -1.</_>\n        <_>\n          7 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 12 14 -1.</_>\n        <_>\n          12 6 4 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 3 3 -1.</_>\n        <_>\n          5 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          12 1 4 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 2 -1.</_>\n        <_>\n          3 1 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 4 5 -1.</_>\n        <_>\n          10 12 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 4 5 -1.</_>\n        <_>\n          8 12 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 10 -1.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 5 2 -1.</_>\n        <_>\n          2 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 2 -1.</_>\n        <_>\n          7 11 1 1 2.</_>\n        <_>\n          8 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 3 3 -1.</_>\n        <_>\n          14 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 3 3 -1.</_>\n        <_>\n          3 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          8 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 3 3 -1.</_>\n        <_>\n          13 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 3 -1.</_>\n        <_>\n          0 10 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 3 3 -1.</_>\n        <_>\n          13 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 8 -1.</_>\n        <_>\n          9 12 1 4 2.</_>\n        <_>\n          10 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 2 2 -1.</_>\n        <_>\n          12 7 1 1 2.</_>\n        <_>\n          11 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 6 4 -1.</_>\n        <_>\n          3 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 2 3 -1.</_>\n        <_>\n          10 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          9 7 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 8 4 -1.</_>\n        <_>\n          12 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 2 -1.</_>\n        <_>\n          10 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 4 2 -1.</_>\n        <_>\n          6 15 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 13 -1.</_>\n        <_>\n          13 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 13 -1.</_>\n        <_>\n          6 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 9 -1.</_>\n        <_>\n          9 9 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 7 12 -1.</_>\n        <_>\n          4 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 2 -1.</_>\n        <_>\n          13 12 1 1 2.</_>\n        <_>\n          12 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 2 -1.</_>\n        <_>\n          6 12 1 1 2.</_>\n        <_>\n          7 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          10 9 2 1 2.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 2 2 -1.</_>\n        <_>\n          3 6 1 1 2.</_>\n        <_>\n          4 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 3 2 -1.</_>\n        <_>\n          16 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 19 4 -1.</_>\n        <_>\n          0 9 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 1 -1.</_>\n        <_>\n          10 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 12 -1.</_>\n        <_>\n          9 10 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 4 1 -1.</_>\n        <_>\n          12 18 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 4 -1.</_>\n        <_>\n          1 7 3 2 2.</_>\n        <_>\n          4 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 13 -1.</_>\n        <_>\n          14 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 13 -1.</_>\n        <_>\n          4 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 8 -1.</_>\n        <_>\n          10 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 2 5 -1.</_>\n        <_>\n          9 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 9 1 -1.</_>\n        <_>\n          11 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 9 1 -1.</_>\n        <_>\n          6 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 10 -1.</_>\n        <_>\n          7 0 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 5 3 -1.</_>\n        <_>\n          7 18 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 1 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 3 2 -1.</_>\n        <_>\n          2 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 6 -1.</_>\n        <_>\n          6 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 4 -1.</_>\n        <_>\n          11 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 4 -1.</_>\n        <_>\n          8 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 4 -1.</_>\n        <_>\n          9 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 8 3 -1.</_>\n        <_>\n          6 14 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 3 4 -1.</_>\n        <_>\n          10 15 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 17 -1.</_>\n        <_>\n          10 2 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 1 -1.</_>\n        <_>\n          9 0 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 3 4 -1.</_>\n        <_>\n          9 15 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 3 -1.</_>\n        <_>\n          7 14 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 3 3 -1.</_>\n        <_>\n          9 16 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 10 -1.</_>\n        <_>\n          6 7 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 8 8 -1.</_>\n        <_>\n          2 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 16 2 2 -1.</_>\n        <_>\n          14 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 2 2 -1.</_>\n        <_>\n          4 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 6 -1.</_>\n        <_>\n          10 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 4 6 -1.</_>\n        <_>\n          6 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 6 -1.</_>\n        <_>\n          12 0 2 3 2.</_>\n        <_>\n          10 3 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 2 -1.</_>\n        <_>\n          0 4 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 2 -1.</_>\n        <_>\n          16 0 4 1 2.</_>\n        <_>\n          12 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 8 -1.</_>\n        <_>\n          2 16 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 7 2 10 -1.</_>\n        <_>\n          18 7 1 5 2.</_>\n        <_>\n          17 12 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 2 10 -1.</_>\n        <_>\n          1 7 1 5 2.</_>\n        <_>\n          2 12 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 3 6 -1.</_>\n        <_>\n          15 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 2 -1.</_>\n        <_>\n          6 4 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 2 -1.</_>\n        <_>\n          0 0 4 1 2.</_>\n        <_>\n          4 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 6 2 -1.</_>\n        <_>\n          1 14 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 4 -1.</_>\n        <_>\n          11 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 1 -1.</_>\n        <_>\n          8 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 2 -1.</_>\n        <_>\n          10 6 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 2 -1.</_>\n        <_>\n          15 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 1 2 -1.</_>\n        <_>\n          6 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 1 3 -1.</_>\n        <_>\n          13 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 1 2 -1.</_>\n        <_>\n          2 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 3 -1.</_>\n        <_>\n          12 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 3 -1.</_>\n        <_>\n          0 1 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 2 -1.</_>\n        <_>\n          9 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 3 -1.</_>\n        <_>\n          5 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 3 -1.</_>\n        <_>\n          18 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 8 6 -1.</_>\n        <_>\n          3 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          10 2 10 3 2.</_>\n        <_>\n          0 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 4 -1.</_>\n        <_>\n          5 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 15 2 -1.</_>\n        <_>\n          8 10 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 11 -1.</_>\n        <_>\n          9 0 6 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 6 -1.</_>\n        <_>\n          13 0 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 19 2 1 -1.</_>\n        <_>\n          1 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 4 10 -1.</_>\n        <_>\n          18 10 2 5 2.</_>\n        <_>\n          16 15 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 10 3 -1.</_>\n        <_>\n          4 9 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 3 3 -1.</_>\n        <_>\n          14 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 4 10 -1.</_>\n        <_>\n          0 10 2 5 2.</_>\n        <_>\n          2 15 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 6 -1.</_>\n        <_>\n          18 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 3 -1.</_>\n        <_>\n          6 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 7 2 -1.</_>\n        <_>\n          7 8 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 6 -1.</_>\n        <_>\n          0 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 1 -1.</_>\n        <_>\n          12 1 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 6 -1.</_>\n        <_>\n          6 0 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 14 -1.</_>\n        <_>\n          7 1 6 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 3 -1.</_>\n        <_>\n          8 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 2 -1.</_>\n        <_>\n          9 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 2 -1.</_>\n        <_>\n          8 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 5 -1.</_>\n        <_>\n          11 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 5 -1.</_>\n        <_>\n          8 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 10 -1.</_>\n        <_>\n          14 0 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 2 -1.</_>\n        <_>\n          4 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 6 -1.</_>\n        <_>\n          18 3 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 10 -1.</_>\n        <_>\n          1 13 18 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 10 -1.</_>\n        <_>\n          14 0 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 7 -1.</_>\n        <_>\n          17 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 10 -1.</_>\n        <_>\n          5 0 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 7 -1.</_>\n        <_>\n          17 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 1 2 -1.</_>\n        <_>\n          0 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 10 -1.</_>\n        <_>\n          18 1 1 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 10 -1.</_>\n        <_>\n          1 1 1 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 4 -1.</_>\n        <_>\n          11 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 3 3 -1.</_>\n        <_>\n          3 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 6 -1.</_>\n        <_>\n          12 0 1 3 2.</_>\n        <_>\n          11 3 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 6 -1.</_>\n        <_>\n          7 0 1 3 2.</_>\n        <_>\n          8 3 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 7 -1.</_>\n        <_>\n          17 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 3 7 -1.</_>\n        <_>\n          2 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 16 -1.</_>\n        <_>\n          16 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 16 -1.</_>\n        <_>\n          2 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 8 -1.</_>\n        <_>\n          10 0 8 4 2.</_>\n        <_>\n          2 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 5 3 -1.</_>\n        <_>\n          6 9 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 4 -1.</_>\n        <_>\n          9 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 15 1 -1.</_>\n        <_>\n          5 7 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 7 9 -1.</_>\n        <_>\n          8 5 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 16 4 -1.</_>\n        <_>\n          1 7 8 2 2.</_>\n        <_>\n          9 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 2 -1.</_>\n        <_>\n          6 13 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 3 3 -1.</_>\n        <_>\n          8 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 14 10 -1.</_>\n        <_>\n          11 5 7 5 2.</_>\n        <_>\n          4 10 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 3 2 -1.</_>\n        <_>\n          4 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 1 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 6 -1.</_>\n        <_>\n          4 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 3 -1.</_>\n        <_>\n          7 11 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 2 -1.</_>\n        <_>\n          9 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 1 -1.</_>\n        <_>\n          8 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 1 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 4 -1.</_>\n        <_>\n          11 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 8 -1.</_>\n        <_>\n          2 16 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 15 2 -1.</_>\n        <_>\n          0 16 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 6 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 4 -1.</_>\n        <_>\n          10 5 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 9 6 -1.</_>\n        <_>\n          8 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 19 15 1 -1.</_>\n        <_>\n          7 19 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 4 -1.</_>\n        <_>\n          11 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          0 17 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 4 -1.</_>\n        <_>\n          11 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 3 4 -1.</_>\n        <_>\n          8 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 3 -1.</_>\n        <_>\n          9 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 6 -1.</_>\n        <_>\n          8 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 12 -1.</_>\n        <_>\n          9 10 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 4 3 -1.</_>\n        <_>\n          8 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 8 2 -1.</_>\n        <_>\n          13 18 4 1 2.</_>\n        <_>\n          9 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 8 2 -1.</_>\n        <_>\n          1 19 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 6 15 -1.</_>\n        <_>\n          15 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 2 -1.</_>\n        <_>\n          9 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 3 -1.</_>\n        <_>\n          9 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 15 -1.</_>\n        <_>\n          3 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 8 -1.</_>\n        <_>\n          11 1 7 4 2.</_>\n        <_>\n          4 5 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 4 16 -1.</_>\n        <_>\n          2 4 2 8 2.</_>\n        <_>\n          4 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 12 -1.</_>\n        <_>\n          12 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 12 -1.</_>\n        <_>\n          4 5 5 6 2.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 3 -1.</_>\n        <_>\n          5 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 4 10 -1.</_>\n        <_>\n          14 2 2 5 2.</_>\n        <_>\n          12 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 7 3 -1.</_>\n        <_>\n          6 5 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 2 -1.</_>\n        <_>\n          11 0 9 1 2.</_>\n        <_>\n          2 1 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 2 -1.</_>\n        <_>\n          0 0 9 1 2.</_>\n        <_>\n          9 1 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 4 6 -1.</_>\n        <_>\n          15 13 2 3 2.</_>\n        <_>\n          13 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 4 6 -1.</_>\n        <_>\n          3 13 2 3 2.</_>\n        <_>\n          5 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 6 -1.</_>\n        <_>\n          10 15 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 10 -1.</_>\n        <_>\n          5 9 5 5 2.</_>\n        <_>\n          10 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 2 -1.</_>\n        <_>\n          13 4 2 1 2.</_>\n        <_>\n          11 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 8 -1.</_>\n        <_>\n          10 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 4 10 -1.</_>\n        <_>\n          14 2 2 5 2.</_>\n        <_>\n          12 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 2 1 -1.</_>\n        <_>\n          9 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 1 12 -1.</_>\n        <_>\n          10 9 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 9 -1.</_>\n        <_>\n          3 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 4 10 -1.</_>\n        <_>\n          14 2 2 5 2.</_>\n        <_>\n          12 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 4 10 -1.</_>\n        <_>\n          4 2 2 5 2.</_>\n        <_>\n          6 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 2 -1.</_>\n        <_>\n          13 4 2 1 2.</_>\n        <_>\n          11 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 6 3 -1.</_>\n        <_>\n          0 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 2 -1.</_>\n        <_>\n          13 4 2 1 2.</_>\n        <_>\n          11 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 3 2 -1.</_>\n        <_>\n          7 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 2 -1.</_>\n        <_>\n          13 4 2 1 2.</_>\n        <_>\n          11 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 2 -1.</_>\n        <_>\n          5 4 2 1 2.</_>\n        <_>\n          7 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 12 -1.</_>\n        <_>\n          14 0 1 6 2.</_>\n        <_>\n          13 6 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 10 -1.</_>\n        <_>\n          7 0 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 8 -1.</_>\n        <_>\n          3 4 17 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 4 -1.</_>\n        <_>\n          0 6 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 8 2 -1.</_>\n        <_>\n          4 3 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 4 -1.</_>\n        <_>\n          5 7 3 2 2.</_>\n        <_>\n          8 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 9 -1.</_>\n        <_>\n          8 6 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 1 4 -1.</_>\n        <_>\n          8 17 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 7 -1.</_>\n        <_>\n          8 5 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 4 10 -1.</_>\n        <_>\n          4 2 2 5 2.</_>\n        <_>\n          6 7 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 2 -1.</_>\n        <_>\n          3 1 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 15 -1.</_>\n        <_>\n          2 7 16 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 2 -1.</_>\n        <_>\n          15 3 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 2 -1.</_>\n        <_>\n          10 3 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 15 -1.</_>\n        <_>\n          4 10 16 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 6 -1.</_>\n        <_>\n          7 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 2 -1.</_>\n        <_>\n          11 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 1 -1.</_>\n        <_>\n          9 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 3 -1.</_>\n        <_>\n          9 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 2 -1.</_>\n        <_>\n          0 3 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 12 1 -1.</_>\n        <_>\n          5 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 14 -1.</_>\n        <_>\n          7 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 0 4 5 2.</_>\n        <_>\n          4 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 2 -1.</_>\n        <_>\n          10 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 2 -1.</_>\n        <_>\n          9 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 16 -1.</_>\n        <_>\n          7 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 2 6 -1.</_>\n        <_>\n          2 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 6 -1.</_>\n        <_>\n          13 13 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 2 6 -1.</_>\n        <_>\n          3 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 2 -1.</_>\n        <_>\n          14 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 2 -1.</_>\n        <_>\n          0 9 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 2 -1.</_>\n        <_>\n          14 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 6 -1.</_>\n        <_>\n          0 2 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 6 -1.</_>\n        <_>\n          4 13 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 1 3 -1.</_>\n        <_>\n          9 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 12 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 2 -1.</_>\n        <_>\n          8 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 3 -1.</_>\n        <_>\n          4 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 2 -1.</_>\n        <_>\n          9 6 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 1 3 -1.</_>\n        <_>\n          4 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 6 -1.</_>\n        <_>\n          14 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 7 -1.</_>\n        <_>\n          8 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 3 -1.</_>\n        <_>\n          10 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 3 -1.</_>\n        <_>\n          9 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 11 3 -1.</_>\n        <_>\n          5 11 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 1 -1.</_>\n        <_>\n          10 7 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 2 -1.</_>\n        <_>\n          10 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          9 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 2 -1.</_>\n        <_>\n          11 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 2 -1.</_>\n        <_>\n          7 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 2 4 -1.</_>\n        <_>\n          14 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 2 -1.</_>\n        <_>\n          8 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 17 6 3 -1.</_>\n        <_>\n          14 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          4 5 6 6 2.</_>\n        <_>\n          10 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 15 4 -1.</_>\n        <_>\n          5 4 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 4 1 -1.</_>\n        <_>\n          13 2 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 2 -1.</_>\n        <_>\n          4 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 3 -1.</_>\n        <_>\n          9 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 2 3 -1.</_>\n        <_>\n          13 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 4 -1.</_>\n        <_>\n          7 12 2 2 2.</_>\n        <_>\n          9 14 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 2 2 -1.</_>\n        <_>\n          11 11 1 1 2.</_>\n        <_>\n          10 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 2 2 -1.</_>\n        <_>\n          11 11 1 1 2.</_>\n        <_>\n          10 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 6 3 -1.</_>\n        <_>\n          0 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 2 2 -1.</_>\n        <_>\n          11 11 1 1 2.</_>\n        <_>\n          10 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 2 2 -1.</_>\n        <_>\n          8 11 1 1 2.</_>\n        <_>\n          9 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 4 -1.</_>\n        <_>\n          12 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 4 -1.</_>\n        <_>\n          4 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 4 1 -1.</_>\n        <_>\n          13 2 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 1 -1.</_>\n        <_>\n          5 2 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 2 -1.</_>\n        <_>\n          12 0 2 1 2.</_>\n        <_>\n          10 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 3 1 -1.</_>\n        <_>\n          8 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 8 -1.</_>\n        <_>\n          10 11 2 4 2.</_>\n        <_>\n          8 15 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 15 2 -1.</_>\n        <_>\n          3 19 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 2 12 -1.</_>\n        <_>\n          2 6 1 6 2.</_>\n        <_>\n          3 12 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 3 -1.</_>\n        <_>\n          9 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 2 -1.</_>\n        <_>\n          8 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 3 1 -1.</_>\n        <_>\n          12 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 1 -1.</_>\n        <_>\n          7 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 2 -1.</_>\n        <_>\n          11 2 2 1 2.</_>\n        <_>\n          9 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 3 -1.</_>\n        <_>\n          4 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 14 -1.</_>\n        <_>\n          7 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 12 3 -1.</_>\n        <_>\n          8 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 6 -1.</_>\n        <_>\n          9 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 8 -1.</_>\n        <_>\n          9 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 12 -1.</_>\n        <_>\n          9 10 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 8 -1.</_>\n        <_>\n          2 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 2 -1.</_>\n        <_>\n          12 1 3 1 2.</_>\n        <_>\n          9 2 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 12 14 -1.</_>\n        <_>\n          1 10 12 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          10 12 2 1 2.</_>\n        <_>\n          8 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 2 -1.</_>\n        <_>\n          1 9 5 1 2.</_>\n        <_>\n          6 10 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 3 -1.</_>\n        <_>\n          6 9 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 5 3 -1.</_>\n        <_>\n          9 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 3 -1.</_>\n        <_>\n          8 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 2 -1.</_>\n        <_>\n          7 8 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 2 -1.</_>\n        <_>\n          5 7 4 1 2.</_>\n        <_>\n          9 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 2 -1.</_>\n        <_>\n          4 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 3 3 -1.</_>\n        <_>\n          5 9 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 6 -1.</_>\n        <_>\n          18 3 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 6 -1.</_>\n        <_>\n          1 3 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 14 1 2 -1.</_>\n        <_>\n          17 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 4 3 -1.</_>\n        <_>\n          6 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          12 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 3 -1.</_>\n        <_>\n          5 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 8 -1.</_>\n        <_>\n          12 5 3 4 2.</_>\n        <_>\n          9 9 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 8 -1.</_>\n        <_>\n          5 5 3 4 2.</_>\n        <_>\n          8 9 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 6 -1.</_>\n        <_>\n          16 4 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 20 -1.</_>\n        <_>\n          3 0 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 3 2 -1.</_>\n        <_>\n          13 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 2 -1.</_>\n        <_>\n          6 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 1 -1.</_>\n        <_>\n          11 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 3 -1.</_>\n        <_>\n          4 0 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 2 5 -1.</_>\n        <_>\n          15 0 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 2 -1.</_>\n        <_>\n          5 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 15 -1.</_>\n        <_>\n          9 0 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 1 -1.</_>\n        <_>\n          7 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 4 -1.</_>\n        <_>\n          13 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 1 -1.</_>\n        <_>\n          7 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 2 -1.</_>\n        <_>\n          12 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 6 -1.</_>\n        <_>\n          0 4 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 2 -1.</_>\n        <_>\n          12 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 3 3 -1.</_>\n        <_>\n          2 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 6 10 -1.</_>\n        <_>\n          16 8 3 5 2.</_>\n        <_>\n          13 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 2 -1.</_>\n        <_>\n          0 10 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 2 -1.</_>\n        <_>\n          13 11 1 1 2.</_>\n        <_>\n          12 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 3 3 -1.</_>\n        <_>\n          3 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 2 -1.</_>\n        <_>\n          12 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 2 -1.</_>\n        <_>\n          5 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 9 9 -1.</_>\n        <_>\n          9 8 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 7 -1.</_>\n        <_>\n          6 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 5 -1.</_>\n        <_>\n          9 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 2 -1.</_>\n        <_>\n          6 11 1 1 2.</_>\n        <_>\n          7 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 3 2 -1.</_>\n        <_>\n          15 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 3 2 -1.</_>\n        <_>\n          2 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 8 -1.</_>\n        <_>\n          17 12 3 4 2.</_>\n        <_>\n          14 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 6 -1.</_>\n        <_>\n          7 8 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 17 -1.</_>\n        <_>\n          8 2 6 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 1 -1.</_>\n        <_>\n          7 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 5 -1.</_>\n        <_>\n          9 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 5 -1.</_>\n        <_>\n          7 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          10 9 6 2 2.</_>\n        <_>\n          4 11 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 6 2 -1.</_>\n        <_>\n          5 15 3 1 2.</_>\n        <_>\n          8 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 3 -1.</_>\n        <_>\n          10 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 2 -1.</_>\n        <_>\n          0 13 10 1 2.</_>\n        <_>\n          10 14 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 8 -1.</_>\n        <_>\n          10 9 6 4 2.</_>\n        <_>\n          4 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 3 6 -1.</_>\n        <_>\n          8 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 2 -1.</_>\n        <_>\n          10 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 2 -1.</_>\n        <_>\n          9 12 1 1 2.</_>\n        <_>\n          10 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 14 4 -1.</_>\n        <_>\n          11 11 7 2 2.</_>\n        <_>\n          4 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 2 -1.</_>\n        <_>\n          8 6 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 3 -1.</_>\n        <_>\n          12 10 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 1 2 -1.</_>\n        <_>\n          2 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 6 12 -1.</_>\n        <_>\n          16 8 3 6 2.</_>\n        <_>\n          13 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 12 -1.</_>\n        <_>\n          1 8 3 6 2.</_>\n        <_>\n          4 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 10 -1.</_>\n        <_>\n          12 0 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 8 4 -1.</_>\n        <_>\n          5 11 4 2 2.</_>\n        <_>\n          9 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 8 4 -1.</_>\n        <_>\n          14 16 4 2 2.</_>\n        <_>\n          10 18 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 6 -1.</_>\n        <_>\n          9 7 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 10 -1.</_>\n        <_>\n          10 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 9 -1.</_>\n        <_>\n          8 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 19 2 1 -1.</_>\n        <_>\n          12 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 9 -1.</_>\n        <_>\n          3 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 4 -1.</_>\n        <_>\n          9 5 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 4 -1.</_>\n        <_>\n          9 6 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 2 8 -1.</_>\n        <_>\n          14 9 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 5 12 -1.</_>\n        <_>\n          7 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 2 6 -1.</_>\n        <_>\n          14 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 2 6 -1.</_>\n        <_>\n          4 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 10 4 -1.</_>\n        <_>\n          13 15 5 2 2.</_>\n        <_>\n          8 17 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 2 2 -1.</_>\n        <_>\n          7 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 2 -1.</_>\n        <_>\n          11 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 6 -1.</_>\n        <_>\n          2 2 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 2 -1.</_>\n        <_>\n          11 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 10 3 -1.</_>\n        <_>\n          4 12 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 2 -1.</_>\n        <_>\n          11 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 2 -1.</_>\n        <_>\n          3 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 6 -1.</_>\n        <_>\n          0 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 3 -1.</_>\n        <_>\n          9 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 2 -1.</_>\n        <_>\n          6 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 3 -1.</_>\n        <_>\n          15 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 2 2 -1.</_>\n        <_>\n          10 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 4 3 -1.</_>\n        <_>\n          5 1 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 1 -1.</_>\n        <_>\n          10 0 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 3 -1.</_>\n        <_>\n          15 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 4 -1.</_>\n        <_>\n          1 4 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 3 6 -1.</_>\n        <_>\n          16 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 3 6 -1.</_>\n        <_>\n          1 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 6 -1.</_>\n        <_>\n          12 2 6 3 2.</_>\n        <_>\n          6 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 3 -1.</_>\n        <_>\n          8 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 14 6 -1.</_>\n        <_>\n          11 2 7 3 2.</_>\n        <_>\n          4 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 3 -1.</_>\n        <_>\n          8 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 3 -1.</_>\n        <_>\n          15 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 2 -1.</_>\n        <_>\n          7 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 3 -1.</_>\n        <_>\n          7 13 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 4 -1.</_>\n        <_>\n          5 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 3 -1.</_>\n        <_>\n          12 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 3 -1.</_>\n        <_>\n          7 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 3 6 -1.</_>\n        <_>\n          17 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 7 -1.</_>\n        <_>\n          7 6 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 3 6 -1.</_>\n        <_>\n          17 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 3 -1.</_>\n        <_>\n          3 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 3 6 -1.</_>\n        <_>\n          17 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 3 6 -1.</_>\n        <_>\n          2 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 1 -1.</_>\n        <_>\n          7 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 8 7 -1.</_>\n        <_>\n          4 9 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 2 -1.</_>\n        <_>\n          12 12 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 2 -1.</_>\n        <_>\n          0 12 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 3 -1.</_>\n        <_>\n          9 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          4 10 6 2 2.</_>\n        <_>\n          10 12 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 7 -1.</_>\n        <_>\n          10 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 5 -1.</_>\n        <_>\n          8 2 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 4 6 -1.</_>\n        <_>\n          11 12 2 3 2.</_>\n        <_>\n          9 15 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 6 -1.</_>\n        <_>\n          9 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 2 -1.</_>\n        <_>\n          15 5 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 4 -1.</_>\n        <_>\n          14 4 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 6 1 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 3 -1.</_>\n        <_>\n          15 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 10 -1.</_>\n        <_>\n          9 7 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 6 -1.</_>\n        <_>\n          11 12 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 1 -1.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 2 2 -1.</_>\n        <_>\n          10 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 2 2 -1.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 2 -1.</_>\n        <_>\n          13 7 1 1 2.</_>\n        <_>\n          12 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 2 -1.</_>\n        <_>\n          5 7 1 1 2.</_>\n        <_>\n          6 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 14 -1.</_>\n        <_>\n          14 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 14 -1.</_>\n        <_>\n          5 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 14 -1.</_>\n        <_>\n          14 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 3 16 -1.</_>\n        <_>\n          5 2 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 10 -1.</_>\n        <_>\n          7 7 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 7 3 -1.</_>\n        <_>\n          6 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 10 12 -1.</_>\n        <_>\n          14 2 5 6 2.</_>\n        <_>\n          9 8 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 2 -1.</_>\n        <_>\n          6 8 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          8 16 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 3 -1.</_>\n        <_>\n          6 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 6 -1.</_>\n        <_>\n          16 4 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 2 -1.</_>\n        <_>\n          6 6 2 1 2.</_>\n        <_>\n          8 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 6 -1.</_>\n        <_>\n          16 4 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 6 -1.</_>\n        <_>\n          0 4 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 6 -1.</_>\n        <_>\n          9 6 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 10 -1.</_>\n        <_>\n          3 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          9 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 3 -1.</_>\n        <_>\n          3 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 3 2 -1.</_>\n        <_>\n          13 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 10 4 -1.</_>\n        <_>\n          2 16 5 2 2.</_>\n        <_>\n          7 18 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 6 -1.</_>\n        <_>\n          10 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 1 3 -1.</_>\n        <_>\n          7 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 16 6 3 -1.</_>\n        <_>\n          14 17 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 10 3 -1.</_>\n        <_>\n          7 5 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 4 -1.</_>\n        <_>\n          0 6 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 9 -1.</_>\n        <_>\n          13 14 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 9 -1.</_>\n        <_>\n          4 14 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 1 -1.</_>\n        <_>\n          9 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 17 -1.</_>\n        <_>\n          7 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 3 -1.</_>\n        <_>\n          10 3 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 4 -1.</_>\n        <_>\n          7 2 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 8 2 -1.</_>\n        <_>\n          12 2 4 1 2.</_>\n        <_>\n          8 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 6 -1.</_>\n        <_>\n          8 3 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 2 2 -1.</_>\n        <_>\n          9 18 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 14 -1.</_>\n        <_>\n          1 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 7 3 -1.</_>\n        <_>\n          12 1 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 1 2 -1.</_>\n        <_>\n          1 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 8 -1.</_>\n        <_>\n          15 12 1 4 2.</_>\n        <_>\n          14 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 7 3 -1.</_>\n        <_>\n          1 1 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 8 -1.</_>\n        <_>\n          15 12 1 4 2.</_>\n        <_>\n          14 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 0 4 6 2.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 9 -1.</_>\n        <_>\n          6 4 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 2 2 -1.</_>\n        <_>\n          5 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 6 6 -1.</_>\n        <_>\n          16 14 3 3 2.</_>\n        <_>\n          13 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 20 2 -1.</_>\n        <_>\n          0 17 10 1 2.</_>\n        <_>\n          10 18 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 2 6 -1.</_>\n        <_>\n          11 3 1 3 2.</_>\n        <_>\n          10 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 2 -1.</_>\n        <_>\n          8 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 13 -1.</_>\n        <_>\n          10 7 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 10 5 -1.</_>\n        <_>\n          10 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 10 -1.</_>\n        <_>\n          10 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 1 -1.</_>\n        <_>\n          6 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 7 -1.</_>\n        <_>\n          10 3 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 7 -1.</_>\n        <_>\n          7 3 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 5 -1.</_>\n        <_>\n          7 7 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 4 3 -1.</_>\n        <_>\n          5 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 12 6 -1.</_>\n        <_>\n          14 14 6 3 2.</_>\n        <_>\n          8 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          0 13 10 2 2.</_>\n        <_>\n          10 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 14 2 -1.</_>\n        <_>\n          11 5 7 1 2.</_>\n        <_>\n          4 6 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 10 12 -1.</_>\n        <_>\n          1 2 5 6 2.</_>\n        <_>\n          6 8 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 3 -1.</_>\n        <_>\n          6 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 2 3 -1.</_>\n        <_>\n          8 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 4 2 -1.</_>\n        <_>\n          5 15 2 1 2.</_>\n        <_>\n          7 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 1 3 -1.</_>\n        <_>\n          10 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 4 4 -1.</_>\n        <_>\n          8 16 2 2 2.</_>\n        <_>\n          10 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 6 -1.</_>\n        <_>\n          6 14 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 5 2 -1.</_>\n        <_>\n          2 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 6 6 -1.</_>\n        <_>\n          16 14 3 3 2.</_>\n        <_>\n          13 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 4 -1.</_>\n        <_>\n          7 9 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 6 6 -1.</_>\n        <_>\n          16 14 3 3 2.</_>\n        <_>\n          13 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 1 6 -1.</_>\n        <_>\n          0 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 20 -1.</_>\n        <_>\n          5 10 15 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 6 6 -1.</_>\n        <_>\n          1 14 3 3 2.</_>\n        <_>\n          4 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 6 -1.</_>\n        <_>\n          10 14 2 3 2.</_>\n        <_>\n          8 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 1 -1.</_>\n        <_>\n          8 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 4 6 -1.</_>\n        <_>\n          14 14 2 3 2.</_>\n        <_>\n          12 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 4 6 -1.</_>\n        <_>\n          4 14 2 3 2.</_>\n        <_>\n          6 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 2 6 -1.</_>\n        <_>\n          14 14 1 3 2.</_>\n        <_>\n          13 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 2 6 -1.</_>\n        <_>\n          5 14 1 3 2.</_>\n        <_>\n          6 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 12 -1.</_>\n        <_>\n          7 4 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 2 -1.</_>\n        <_>\n          4 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 13 -1.</_>\n        <_>\n          11 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 13 -1.</_>\n        <_>\n          8 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 3 -1.</_>\n        <_>\n          10 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 3 2 -1.</_>\n        <_>\n          4 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 6 8 -1.</_>\n        <_>\n          16 12 3 4 2.</_>\n        <_>\n          13 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 5 -1.</_>\n        <_>\n          9 6 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 2 7 -1.</_>\n        <_>\n          17 11 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 8 2 -1.</_>\n        <_>\n          7 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 3 -1.</_>\n        <_>\n          6 10 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 4 3 -1.</_>\n        <_>\n          4 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 4 3 -1.</_>\n        <_>\n          11 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 17 12 -1.</_>\n        <_>\n          1 8 17 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 4 3 -1.</_>\n        <_>\n          11 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 3 -1.</_>\n        <_>\n          4 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 5 3 -1.</_>\n        <_>\n          12 4 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 2 7 -1.</_>\n        <_>\n          2 11 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 8 -1.</_>\n        <_>\n          16 12 1 4 2.</_>\n        <_>\n          15 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 11 3 -1.</_>\n        <_>\n          4 9 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 2 -1.</_>\n        <_>\n          12 13 3 1 2.</_>\n        <_>\n          9 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 4 3 -1.</_>\n        <_>\n          6 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          10 12 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 3 -1.</_>\n        <_>\n          5 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 3 -1.</_>\n        <_>\n          9 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 3 -1.</_>\n        <_>\n          0 3 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 8 -1.</_>\n        <_>\n          16 12 1 4 2.</_>\n        <_>\n          15 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 8 -1.</_>\n        <_>\n          3 12 1 4 2.</_>\n        <_>\n          4 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 3 6 -1.</_>\n        <_>\n          14 15 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 3 6 -1.</_>\n        <_>\n          3 15 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 2 -1.</_>\n        <_>\n          11 5 5 1 2.</_>\n        <_>\n          6 6 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 14 6 -1.</_>\n        <_>\n          2 17 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 2 2 -1.</_>\n        <_>\n          4 16 1 1 2.</_>\n        <_>\n          5 17 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 2 3 -1.</_>\n        <_>\n          10 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 20 2 -1.</_>\n        <_>\n          0 17 10 1 2.</_>\n        <_>\n          10 18 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 1 3 -1.</_>\n        <_>\n          13 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 3 2 -1.</_>\n        <_>\n          9 13 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 3 3 -1.</_>\n        <_>\n          13 2 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 2 2 -1.</_>\n        <_>\n          3 18 1 1 2.</_>\n        <_>\n          4 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 4 -1.</_>\n        <_>\n          10 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 3 -1.</_>\n        <_>\n          6 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 5 2 -1.</_>\n        <_>\n          13 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 2 -1.</_>\n        <_>\n          7 14 3 1 2.</_>\n        <_>\n          10 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 4 -1.</_>\n        <_>\n          12 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 12 6 -1.</_>\n        <_>\n          5 13 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 5 2 -1.</_>\n        <_>\n          14 12 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 14 4 -1.</_>\n        <_>\n          2 15 7 2 2.</_>\n        <_>\n          9 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 2 -1.</_>\n        <_>\n          10 7 7 1 2.</_>\n        <_>\n          3 8 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 4 2 -1.</_>\n        <_>\n          1 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 14 -1.</_>\n        <_>\n          16 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 1 3 -1.</_>\n        <_>\n          4 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 14 -1.</_>\n        <_>\n          16 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 3 7 -1.</_>\n        <_>\n          2 10 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 9 2 -1.</_>\n        <_>\n          8 13 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 1 -1.</_>\n        <_>\n          10 6 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 4 -1.</_>\n        <_>\n          8 4 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 2 -1.</_>\n        <_>\n          0 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 9 -1.</_>\n        <_>\n          5 6 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 10 -1.</_>\n        <_>\n          15 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 2 7 -1.</_>\n        <_>\n          9 2 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 12 1 -1.</_>\n        <_>\n          11 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 9 1 -1.</_>\n        <_>\n          6 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 1 4 -1.</_>\n        <_>\n          15 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 4 -1.</_>\n        <_>\n          7 10 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 1 6 -1.</_>\n        <_>\n          15 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 6 3 -1.</_>\n        <_>\n          7 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 2 16 -1.</_>\n        <_>\n          15 3 1 8 2.</_>\n        <_>\n          14 11 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 1 6 -1.</_>\n        <_>\n          4 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 5 2 -1.</_>\n        <_>\n          12 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 4 2 -1.</_>\n        <_>\n          6 18 2 1 2.</_>\n        <_>\n          8 19 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 10 -1.</_>\n        <_>\n          10 4 8 5 2.</_>\n        <_>\n          2 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 1 10 -1.</_>\n        <_>\n          6 10 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 2 -1.</_>\n        <_>\n          9 8 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 2 -1.</_>\n        <_>\n          6 8 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 6 -1.</_>\n        <_>\n          9 7 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 2 -1.</_>\n        <_>\n          9 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 3 -1.</_>\n        <_>\n          1 1 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 7 2 -1.</_>\n        <_>\n          11 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 18 -1.</_>\n        <_>\n          5 7 10 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 3 2 -1.</_>\n        <_>\n          18 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 1 3 -1.</_>\n        <_>\n          8 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          3 16 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 4 -1.</_>\n        <_>\n          1 2 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 5 2 -1.</_>\n        <_>\n          12 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 5 2 -1.</_>\n        <_>\n          3 2 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 3 -1.</_>\n        <_>\n          10 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 2 3 -1.</_>\n        <_>\n          8 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 3 -1.</_>\n        <_>\n          14 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 3 -1.</_>\n        <_>\n          7 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 4 -1.</_>\n        <_>\n          10 6 5 2 2.</_>\n        <_>\n          5 8 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 1 6 -1.</_>\n        <_>\n          9 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 2 -1.</_>\n        <_>\n          11 12 1 1 2.</_>\n        <_>\n          10 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 3 -1.</_>\n        <_>\n          4 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 6 -1.</_>\n        <_>\n          14 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 2 3 -1.</_>\n        <_>\n          8 18 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 6 -1.</_>\n        <_>\n          16 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 6 -1.</_>\n        <_>\n          0 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 2 3 -1.</_>\n        <_>\n          14 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 8 1 -1.</_>\n        <_>\n          8 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 3 -1.</_>\n        <_>\n          8 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 10 6 -1.</_>\n        <_>\n          5 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 2 -1.</_>\n        <_>\n          8 16 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 6 -1.</_>\n        <_>\n          7 12 2 3 2.</_>\n        <_>\n          9 15 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 3 1 -1.</_>\n        <_>\n          11 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 10 -1.</_>\n        <_>\n          9 7 1 5 2.</_>\n        <_>\n          10 12 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 6 -1.</_>\n        <_>\n          10 0 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 2 6 -1.</_>\n        <_>\n          3 13 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 1 2 -1.</_>\n        <_>\n          16 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 6 6 -1.</_>\n        <_>\n          1 14 3 3 2.</_>\n        <_>\n          4 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 6 -1.</_>\n        <_>\n          14 1 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 2 2 -1.</_>\n        <_>\n          8 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 3 -1.</_>\n        <_>\n          10 9 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          8 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 3 -1.</_>\n        <_>\n          14 0 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 9 -1.</_>\n        <_>\n          7 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 4 15 -1.</_>\n        <_>\n          11 5 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 15 -1.</_>\n        <_>\n          7 5 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 3 -1.</_>\n        <_>\n          14 0 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 3 -1.</_>\n        <_>\n          5 0 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 2 -1.</_>\n        <_>\n          12 12 1 1 2.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 2 2 -1.</_>\n        <_>\n          7 12 1 1 2.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 4 -1.</_>\n        <_>\n          13 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 3 -1.</_>\n        <_>\n          4 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 2 -1.</_>\n        <_>\n          12 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 3 2 -1.</_>\n        <_>\n          9 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 2 -1.</_>\n        <_>\n          10 9 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 3 2 -1.</_>\n        <_>\n          9 9 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 4 -1.</_>\n        <_>\n          13 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 4 -1.</_>\n        <_>\n          6 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 4 -1.</_>\n        <_>\n          10 14 6 2 2.</_>\n        <_>\n          4 16 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 2 3 -1.</_>\n        <_>\n          8 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 3 8 -1.</_>\n        <_>\n          10 14 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 8 -1.</_>\n        <_>\n          8 10 2 4 2.</_>\n        <_>\n          10 14 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 1 -1.</_>\n        <_>\n          11 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 1 6 -1.</_>\n        <_>\n          9 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 1 -1.</_>\n        <_>\n          11 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 1 -1.</_>\n        <_>\n          8 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 14 -1.</_>\n        <_>\n          5 9 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 2 10 -1.</_>\n        <_>\n          2 1 1 5 2.</_>\n        <_>\n          3 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 2 3 -1.</_>\n        <_>\n          14 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 3 3 -1.</_>\n        <_>\n          3 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 3 3 -1.</_>\n        <_>\n          17 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 3 -1.</_>\n        <_>\n          0 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 6 2 -1.</_>\n        <_>\n          16 5 3 1 2.</_>\n        <_>\n          13 6 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 19 12 1 -1.</_>\n        <_>\n          8 19 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 4 -1.</_>\n        <_>\n          12 14 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 1 3 -1.</_>\n        <_>\n          3 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 6 4 -1.</_>\n        <_>\n          11 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 3 10 -1.</_>\n        <_>\n          3 10 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 2 4 -1.</_>\n        <_>\n          12 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 4 -1.</_>\n        <_>\n          7 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 3 -1.</_>\n        <_>\n          10 14 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 3 -1.</_>\n        <_>\n          10 1 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 2 -1.</_>\n        <_>\n          11 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 2 -1.</_>\n        <_>\n          8 6 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 2 -1.</_>\n        <_>\n          9 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 6 -1.</_>\n        <_>\n          2 11 8 3 2.</_>\n        <_>\n          10 14 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 2 -1.</_>\n        <_>\n          13 7 1 1 2.</_>\n        <_>\n          12 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 3 -1.</_>\n        <_>\n          9 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 2 -1.</_>\n        <_>\n          10 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 12 -1.</_>\n        <_>\n          5 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 2 -1.</_>\n        <_>\n          13 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 2 -1.</_>\n        <_>\n          5 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 2 3 -1.</_>\n        <_>\n          4 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 6 -1.</_>\n        <_>\n          10 14 1 3 2.</_>\n        <_>\n          9 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 3 2 -1.</_>\n        <_>\n          9 14 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 6 -1.</_>\n        <_>\n          11 5 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 6 -1.</_>\n        <_>\n          7 5 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 1 2 -1.</_>\n        <_>\n          13 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 2 -1.</_>\n        <_>\n          0 3 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 1 2 -1.</_>\n        <_>\n          13 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 2 -1.</_>\n        <_>\n          5 7 1 1 2.</_>\n        <_>\n          6 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 7 -1.</_>\n        <_>\n          13 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 1 2 -1.</_>\n        <_>\n          6 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 7 -1.</_>\n        <_>\n          12 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 16 -1.</_>\n        <_>\n          0 3 1 8 2.</_>\n        <_>\n          1 11 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 7 -1.</_>\n        <_>\n          12 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 7 -1.</_>\n        <_>\n          7 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 8 4 -1.</_>\n        <_>\n          11 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 8 4 -1.</_>\n        <_>\n          5 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 7 -1.</_>\n        <_>\n          13 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 7 -1.</_>\n        <_>\n          6 5 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 14 -1.</_>\n        <_>\n          18 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 4 -1.</_>\n        <_>\n          6 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 1 2 -1.</_>\n        <_>\n          14 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 6 -1.</_>\n        <_>\n          0 1 9 3 2.</_>\n        <_>\n          9 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 1 2 -1.</_>\n        <_>\n          14 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 14 -1.</_>\n        <_>\n          0 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 12 -1.</_>\n        <_>\n          18 0 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 3 -1.</_>\n        <_>\n          0 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 14 16 -1.</_>\n        <_>\n          6 8 14 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 12 -1.</_>\n        <_>\n          1 0 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 7 -1.</_>\n        <_>\n          14 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 1 2 -1.</_>\n        <_>\n          5 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 6 -1.</_>\n        <_>\n          14 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 7 2 -1.</_>\n        <_>\n          5 8 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 9 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 1 -1.</_>\n        <_>\n          7 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 4 -1.</_>\n        <_>\n          16 0 3 2 2.</_>\n        <_>\n          13 2 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 12 -1.</_>\n        <_>\n          1 6 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 17 12 -1.</_>\n        <_>\n          3 6 17 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 7 3 -1.</_>\n        <_>\n          5 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 3 3 -1.</_>\n        <_>\n          3 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 6 -1.</_>\n        <_>\n          14 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 6 -1.</_>\n        <_>\n          0 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 3 -1.</_>\n        <_>\n          12 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 3 -1.</_>\n        <_>\n          4 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 6 -1.</_>\n        <_>\n          18 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 9 -1.</_>\n        <_>\n          10 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 2 -1.</_>\n        <_>\n          6 6 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 2 -1.</_>\n        <_>\n          6 5 2 1 2.</_>\n        <_>\n          8 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 2 3 -1.</_>\n        <_>\n          10 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 1 3 -1.</_>\n        <_>\n          9 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 2 -1.</_>\n        <_>\n          9 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 4 3 -1.</_>\n        <_>\n          0 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 6 -1.</_>\n        <_>\n          6 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 4 -1.</_>\n        <_>\n          1 0 3 2 2.</_>\n        <_>\n          4 2 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 7 -1.</_>\n        <_>\n          14 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 2 -1.</_>\n        <_>\n          9 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 6 10 -1.</_>\n        <_>\n          11 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 19 2 -1.</_>\n        <_>\n          0 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 9 -1.</_>\n        <_>\n          9 8 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 7 -1.</_>\n        <_>\n          5 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 12 -1.</_>\n        <_>\n          10 6 2 6 2.</_>\n        <_>\n          8 12 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 4 -1.</_>\n        <_>\n          0 4 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 7 -1.</_>\n        <_>\n          9 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 4 -1.</_>\n        <_>\n          10 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 4 -1.</_>\n        <_>\n          9 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 1 -1.</_>\n        <_>\n          9 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 4 4 -1.</_>\n        <_>\n          7 14 2 2 2.</_>\n        <_>\n          9 16 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 4 6 -1.</_>\n        <_>\n          15 14 2 3 2.</_>\n        <_>\n          13 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 1 8 -1.</_>\n        <_>\n          7 12 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 2 8 -1.</_>\n        <_>\n          17 0 1 4 2.</_>\n        <_>\n          16 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 2 8 -1.</_>\n        <_>\n          2 0 1 4 2.</_>\n        <_>\n          3 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 3 -1.</_>\n        <_>\n          6 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 3 10 -1.</_>\n        <_>\n          7 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 2 -1.</_>\n        <_>\n          9 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 8 -1.</_>\n        <_>\n          7 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          9 10 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 3 3 -1.</_>\n        <_>\n          7 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 2 -1.</_>\n        <_>\n          6 1 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 14 -1.</_>\n        <_>\n          7 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 1 -1.</_>\n        <_>\n          7 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          9 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 9 -1.</_>\n        <_>\n          10 3 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 14 2 3 -1.</_>\n        <_>\n          18 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 3 1 -1.</_>\n        <_>\n          8 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 4 -1.</_>\n        <_>\n          11 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 3 6 -1.</_>\n        <_>\n          8 14 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 4 -1.</_>\n        <_>\n          11 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 4 -1.</_>\n        <_>\n          8 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 9 -1.</_>\n        <_>\n          7 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 2 3 -1.</_>\n        <_>\n          0 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 8 3 -1.</_>\n        <_>\n          8 3 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 6 -1.</_>\n        <_>\n          0 4 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 3 -1.</_>\n        <_>\n          9 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 4 -1.</_>\n        <_>\n          0 17 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 6 -1.</_>\n        <_>\n          1 17 18 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 6 -1.</_>\n        <_>\n          0 0 5 3 2.</_>\n        <_>\n          5 3 5 3 2.</_></rects></_></features></cascade>\n</opencv_storage>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/classifiers/haarcascade_frontalface_alt2.xml",
    "content": "<?xml version=\"1.0\"?>\n<!--\n    Tree-based 20x20 gentle adaboost frontal face detector.\n    Created by Rainer Lienhart.\n\n////////////////////////////////////////////////////////////////////////////////////////\n\n  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n\n  By downloading, copying, installing or using the software you agree to this license.\n  If you do not agree to this license, do not download, install,\n  copy or use the software.\n\n\n                        Intel License Agreement\n                For Open Source Computer Vision Library\n\n Copyright (C) 2000, Intel Corporation, all rights reserved.\n Third party copyrights are property of their respective owners.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n   * Redistribution's of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n\n   * Redistribution's in binary form must reproduce the above copyright notice,\n     this list of conditions and the following disclaimer in the documentation\n     and/or other materials provided with the distribution.\n\n   * The name of Intel Corporation may not be used to endorse or promote products\n     derived from this software without specific prior written permission.\n\n This software is provided by the copyright holders and contributors \"as is\" and\n any express or implied warranties, including, but not limited to, the implied\n warranties of merchantability and fitness for a particular purpose are disclaimed.\n In no event shall the Intel Corporation or contributors be liable for any direct,\n indirect, incidental, special, exemplary, or consequential damages\n (including, but not limited to, procurement of substitute goods or services;\n loss of use, data, or profits; or business interruption) however caused\n and on any theory of liability, whether in contract, strict liability,\n or tort (including negligence or otherwise) arising in any way out of\n the use of this software, even if advised of the possibility of such damage.\n-->\n<opencv_storage>\n<cascade type_id=\"opencv-cascade-classifier\"><stageType>BOOST</stageType>\n  <featureType>HAAR</featureType>\n  <height>20</height>\n  <width>20</width>\n  <stageParams>\n    <maxWeakCount>109</maxWeakCount></stageParams>\n  <featureParams>\n    <maxCatCount>0</maxCatCount></featureParams>\n  <stageNum>20</stageNum>\n  <stages>\n    <_>\n      <maxWeakCount>3</maxWeakCount>\n      <stageThreshold>3.5069230198860168e-01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 0 4.3272329494357109e-03 -1 -2 1 1.3076160103082657e-02</internalNodes>\n          <leafValues>\n            3.8381900638341904e-02 8.9652568101882935e-01\n            2.6293140649795532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2 5.2434601821005344e-04 -1 -2 3 4.4573000632226467e-03</internalNodes>\n          <leafValues>\n            1.0216630250215530e-01 1.2384019792079926e-01\n            6.9103831052780151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 4 -9.2708261217921972e-04 -1 -2 5 3.3989109215326607e-04</internalNodes>\n          <leafValues>\n            1.9536970555782318e-01 2.1014410257339478e-01\n            8.2586747407913208e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>9</maxWeakCount>\n      <stageThreshold>3.4721779823303223e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 6 2.3025739938020706e-03 -1 -2 7 4.4174338690936565e-03</internalNodes>\n          <leafValues>\n            1.0183759778738022e-01 8.2190579175949097e-01\n            1.9565549492835999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 8 2.2203210741281509e-02 -1 -2 9 -1.7283110355492681e-04</internalNodes>\n          <leafValues>\n            2.2054070234298706e-01 7.3263257741928101e-02\n            5.9314841032028198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 10 4.3567270040512085e-03 -1 -2 11\n            -2.6032889727503061e-03</internalNodes>\n          <leafValues>\n            1.8441149592399597e-01 4.0322139859199524e-01\n            8.0665212869644165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 12 1.7309630056843162e-03 -1 -2 13\n            -7.8146401792764664e-03</internalNodes>\n          <leafValues>\n            2.5483280420303345e-01 6.0570698976516724e-01\n            2.7790638804435730e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 14 -8.7343417108058929e-03 -1 -2 15\n            9.4522320432588458e-04</internalNodes>\n          <leafValues>\n            2.8899800777435303e-01 7.6165872812271118e-01\n            3.4956431388854980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 16 4.9414858222007751e-02 -1 -2 17\n            4.4891750440001488e-03</internalNodes>\n          <leafValues>\n            8.1516528129577637e-01 2.8087830543518066e-01\n            6.0277748107910156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 18 6.0313619673252106e-02 -1 -2 19\n            -1.0762850288301706e-03</internalNodes>\n          <leafValues>\n            7.6075017452239990e-01 4.4440358877182007e-01\n            1.4373120665550232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 20 -9.5083238556981087e-03 -1 -2 21\n            7.6601309701800346e-03</internalNodes>\n          <leafValues>\n            5.3181701898574829e-01 5.4110521078109741e-01\n            2.1806870400905609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 22 7.6467678882181644e-03 -1 -2 23\n            -8.4662932204082608e-04</internalNodes>\n          <leafValues>\n            1.1589600145816803e-01 2.3406790196895599e-01\n            5.9903818368911743e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>14</maxWeakCount>\n      <stageThreshold>5.9844889640808105e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            1 0 24 -4.8506218008697033e-03 -1 -2 25\n            -4.6141650527715683e-03</internalNodes>\n          <leafValues>\n            1.8054960668087006e-01 2.1778939664363861e-01\n            8.0182367563247681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 26 -2.4301309604197741e-03 -1 -2 27\n            4.1787960799410939e-04</internalNodes>\n          <leafValues>\n            1.1413549631834030e-01 1.2030939757823944e-01\n            6.1085307598114014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 28 1.0010929545387626e-03 -1 -2 29\n            1.0577100329101086e-03</internalNodes>\n          <leafValues>\n            2.0799599587917328e-01 3.3020541071891785e-01\n            7.5110942125320435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 30 1.2376549420878291e-03 -1 -2 31\n            3.5315038985572755e-04</internalNodes>\n          <leafValues>\n            2.7682220935821533e-01 1.6682930290699005e-01\n            5.8294767141342163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 32 -1.1953660286962986e-02 -1 -2 33\n            1.4182999730110168e-03</internalNodes>\n          <leafValues>\n            1.5087880194187164e-01 4.3912279605865479e-01\n            7.6465952396392822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 34 3.4642980899661779e-03 -1 -2 35\n            -1.4948950149118900e-02</internalNodes>\n          <leafValues>\n            2.6515561342239380e-01 2.2980530560016632e-01\n            5.4421657323837280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 36 -1.0506849503144622e-03 -1 -2 37\n            -4.0782918222248554e-03</internalNodes>\n          <leafValues>\n            3.6228439211845398e-01 2.6012599468231201e-01\n            7.2336578369140625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 38 5.4242828628048301e-04 -1 -2 39\n            -7.3204059153795242e-03</internalNodes>\n          <leafValues>\n            3.8496789336204529e-01 2.9655128717422485e-01\n            5.4803091287612915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 40 1.1421289527788758e-03 -1 -2 41\n            1.1783400550484657e-03</internalNodes>\n          <leafValues>\n            4.1047701239585876e-01 7.2390240430831909e-01\n            2.7872839570045471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 42 4.4077109545469284e-02 -1 -2 43\n            3.7900090683251619e-03</internalNodes>\n          <leafValues>\n            5.6405162811279297e-01 5.9475481510162354e-01\n            3.3120200037956238e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 44 -2.4291418958455324e-03 -1 -2 45\n            9.4262324273586273e-03</internalNodes>\n          <leafValues>\n            6.6032320261001587e-01 4.6806651353836060e-01\n            2.0643380284309387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 46 8.0630257725715637e-03 -1 -2 47\n            5.2240812219679356e-03</internalNodes>\n          <leafValues>\n            5.2988511323928833e-01 5.2816027402877808e-01\n            1.9095499813556671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 48 -7.0630568079650402e-03 -1 -2 49\n            5.6897541508078575e-03</internalNodes>\n          <leafValues>\n            1.3806459307670593e-01 5.4906368255615234e-01\n            1.2602810561656952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 50 1.2472929665818810e-03 -1 -2 51\n            4.9543488770723343e-02</internalNodes>\n          <leafValues>\n            2.3726630210876465e-01 5.2401661872863770e-01\n            1.7692160606384277e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>19</maxWeakCount>\n      <stageThreshold>8.5117864608764648e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            1 0 52 -4.9326149746775627e-03 -1 -2 53\n            2.7918140403926373e-05</internalNodes>\n          <leafValues>\n            1.9980649650096893e-01 2.2993800044059753e-01\n            7.3932111263275146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 54 3.0876200180500746e-03 -1 -2 55\n            7.4669660534709692e-06</internalNodes>\n          <leafValues>\n            1.5338400006294250e-01 2.0368589460849762e-01\n            5.8549159765243530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 56 1.8739729421213269e-03 -1 -2 57\n            9.3380251200869679e-04</internalNodes>\n          <leafValues>\n            2.0498959720134735e-01 3.2341998815536499e-01\n            7.3230141401290894e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 58 1.9151850137859583e-03 -1 -2 59\n            -5.9683797881007195e-03</internalNodes>\n          <leafValues>\n            3.0451491475105286e-01 2.9321339726448059e-01\n            5.6212961673736572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 60 -7.2115601506084204e-04 -1 -2 61\n            -5.9663117863237858e-03</internalNodes>\n          <leafValues>\n            3.6580368876457214e-01 2.7121558785438538e-01\n            7.2263348102569580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 62 3.0874179676175117e-02 -1 -2 63\n            -1.1099710129201412e-02</internalNodes>\n          <leafValues>\n            4.4198378920555115e-01 3.6129769682884216e-01\n            5.2514511346817017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 64 2.1164179779589176e-03 -1 -2 65\n            -9.4317439943552017e-03</internalNodes>\n          <leafValues>\n            3.6286169290542603e-01 1.6010950505733490e-01\n            7.0522767305374146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 66 -3.5266019403934479e-03 -1 -2 67\n            -1.6907559474930167e-03</internalNodes>\n          <leafValues>\n            1.3012880086898804e-01 1.7863239347934723e-01\n            5.5215299129486084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 68 4.6470930101349950e-04 -1 -2 69\n            -1.0215570218861103e-02</internalNodes>\n          <leafValues>\n            3.4873831272125244e-01 2.6739910244941711e-01\n            6.6679191589355469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 70 1.2634709710255265e-03 -1 -2 71\n            -1.1875299736857414e-02</internalNodes>\n          <leafValues>\n            3.4378638863563538e-01 5.9953361749649048e-01\n            3.4977179765701294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 72 -1.0732339695096016e-02 -1 -2 73\n            7.1836481802165508e-03</internalNodes>\n          <leafValues>\n            2.1504899859428406e-01 6.2714362144470215e-01\n            2.5195419788360596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 74 -2.8340889140963554e-02 -1 -2 75\n            -4.5813230099156499e-04</internalNodes>\n          <leafValues>\n            8.2411892712116241e-02 5.9100568294525146e-01\n            3.7052011489868164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 76 4.2940340936183929e-03 -1 -2 77\n            1.0751079767942429e-02</internalNodes>\n          <leafValues>\n            1.5947279334068298e-01 5.9804809093475342e-01\n            2.8325080871582031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 78 2.2465119138360023e-02 -1 -2 79\n            -5.7988539338111877e-02</internalNodes>\n          <leafValues>\n            7.8770911693572998e-01 1.5557409822940826e-01\n            5.2396571636199951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 80 7.2110891342163086e-03 -1 -2 81\n            -4.8367571085691452e-02</internalNodes>\n          <leafValues>\n            6.6203659772872925e-01 1.4247199892997742e-01\n            4.4298338890075684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 82 -1.4418059960007668e-02 -1 -2 83\n            -2.3156389594078064e-02</internalNodes>\n          <leafValues>\n            1.5885409712791443e-01 2.3757989704608917e-01\n            5.2171349525451660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 84 7.6985340565443039e-03 -1 -2 85\n            -5.6248619221150875e-03</internalNodes>\n          <leafValues>\n            1.9417250156402588e-01 6.2784057855606079e-01\n            3.7460449337959290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 86 -7.2936748620122671e-04 -1 -2 87\n            6.1783898854628205e-04</internalNodes>\n          <leafValues>\n            3.8409221172332764e-01 3.1064930558204651e-01\n            5.5378472805023193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 88 -4.5803939428878948e-05 -1 -2 89\n            -1.4719359569426160e-05</internalNodes>\n          <leafValues>\n            3.4444490075111389e-01 2.7295520901679993e-01\n            6.4289510250091553e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>19</maxWeakCount>\n      <stageThreshold>8.4680156707763672e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 90 -1.3469370314851403e-03 -1 -2 91\n            -2.4774789344519377e-03</internalNodes>\n          <leafValues>\n            1.6570860147476196e-01 2.2738510370254517e-01\n            6.9893497228622437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 92 5.2632777951657772e-03 -1 -2 93\n            4.9075339920818806e-03</internalNodes>\n          <leafValues>\n            1.5120740234851837e-01 5.5644702911376953e-01\n            1.6054420173168182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 94 -2.3254349362105131e-03 -1 -2 95\n            -1.4665479538962245e-03</internalNodes>\n          <leafValues>\n            1.8802590668201447e-01 3.1224989891052246e-01\n            7.1653962135314941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 96 -1.2311690300703049e-01 -1 -2 97\n            2.2108340635895729e-03</internalNodes>\n          <leafValues>\n            3.8595831394195557e-01 2.4552939832210541e-01\n            5.6957101821899414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 98 2.0661531016230583e-03 -1 -2 99\n            3.6130280932411551e-04</internalNodes>\n          <leafValues>\n            2.7165201306343079e-01 2.2933620214462280e-01\n            7.2086298465728760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 100 7.9957872629165649e-02 -1 -2 101\n            2.6064720004796982e-03</internalNodes>\n          <leafValues>\n            7.8336209058761597e-01 5.5452322959899902e-01\n            2.5506898760795593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 102 6.5699010156095028e-03 -1 -2 103\n            1.6259610420092940e-03</internalNodes>\n          <leafValues>\n            1.8193900585174561e-01 3.5298758745193481e-01\n            6.5528190135955811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 104 3.6204981151968241e-03 -1 -2 105\n            -4.4391951523721218e-03</internalNodes>\n          <leafValues>\n            5.4623097181320190e-01 1.3598430156707764e-01\n            5.4158151149749756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 106 -9.0540945529937744e-03 -1 -2 107\n            -4.6067481162026525e-04</internalNodes>\n          <leafValues>\n            1.1151199787855148e-01 5.8467197418212891e-01\n            2.5983488559722900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 108 -5.6621041148900986e-03 -1 -2 109\n            5.1165837794542313e-03</internalNodes>\n          <leafValues>\n            1.6105690598487854e-01 5.3766787052154541e-01\n            1.7394550144672394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 110 -2.1362339612096548e-03 -1 -2 111\n            -5.4809921421110630e-03</internalNodes>\n          <leafValues>\n            1.9020730257034302e-01 3.2720080018043518e-01\n            6.3648408651351929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 112 -8.1061907112598419e-03 -1 -2 113\n            6.0048708692193031e-03</internalNodes>\n          <leafValues>\n            6.9148528575897217e-01 4.3273261189460754e-01\n            6.9638431072235107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 114 -8.7028548121452332e-02 -1 -2 115\n            -4.7809639945626259e-03</internalNodes>\n          <leafValues>\n            8.5941338539123535e-01 9.7394466400146484e-02\n            4.5870301127433777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 116 -2.2166660055518150e-03 -1 -2 117\n            1.3642730191349983e-03</internalNodes>\n          <leafValues>\n            2.5546258687973022e-01 3.3190909028053284e-01\n            5.9641027450561523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 118 -9.0077864006161690e-03 -1 -2 119\n            -1.5494120307266712e-02</internalNodes>\n          <leafValues>\n            2.6665949821472168e-01 1.8481859564781189e-01\n            6.2459707260131836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 120 -4.2165028862655163e-03 -1 -2 121\n            4.3249759823083878e-02</internalNodes>\n          <leafValues>\n            5.3799271583557129e-01 5.1830291748046875e-01\n            2.1704199910163879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 122 2.8786511393263936e-04 -1 -2 123\n            1.2373150093480945e-03</internalNodes>\n          <leafValues>\n            2.6133841276168823e-01 2.7865320444107056e-01\n            5.9089881181716919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 124 1.9528300035744905e-03 -1 -2 125\n            -1.4947060262784362e-03</internalNodes>\n          <leafValues>\n            2.6128691434860229e-01 5.9154129028320312e-01\n            3.4557819366455078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 126 3.5878680646419525e-03 -1 -2 127\n            -2.5938691105693579e-03</internalNodes>\n          <leafValues>\n            1.5870520472526550e-01 1.2704110145568848e-01\n            5.9794288873672485e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>27</maxWeakCount>\n      <stageThreshold>1.2578499794006348e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 128 3.5810680128633976e-03 -1 -2 129\n            -2.8552350122481585e-03</internalNodes>\n          <leafValues>\n            1.9951049983501434e-01 7.3730701208114624e-01\n            2.9217371344566345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 130 1.9758539274334908e-03 -1 -2 131\n            3.2583118882030249e-03</internalNodes>\n          <leafValues>\n            1.9564199447631836e-01 5.6920468807220459e-01\n            1.8390649557113647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 132 2.3711679386906326e-04 -1 -2 133\n            2.5942500215023756e-03</internalNodes>\n          <leafValues>\n            2.1716670691967010e-01 2.7199891209602356e-01\n            7.1502441167831421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 134 -2.5032449513673782e-02 -1 -2 135\n            6.3087949529290199e-03</internalNodes>\n          <leafValues>\n            1.8251839280128479e-01 5.6998378038406372e-01\n            3.5098528861999512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 136 -3.2494920305907726e-03 -1 -2 137\n            -1.4885730110108852e-02</internalNodes>\n          <leafValues>\n            4.0239268541336060e-01 3.6040958762168884e-01\n            7.2919952869415283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 138 8.0623216927051544e-03 -1 -2 139\n            2.7405679225921631e-02</internalNodes>\n          <leafValues>\n            6.4914900064468384e-01 5.5189931392669678e-01\n            2.6596811413764954e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 140 3.4368600696325302e-02 -1 -2 141\n            -2.7292970567941666e-02</internalNodes>\n          <leafValues>\n            6.7125129699707031e-01 1.6913780570030212e-01\n            4.3262779712677002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 142 7.4452121043577790e-04 -1 -2 143\n            7.0336280623450875e-04</internalNodes>\n          <leafValues>\n            3.4051001071929932e-01 5.5167931318283081e-01\n            3.3113878965377808e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 144 -1.2275460362434387e-01 -1 -2 145\n            3.2559928949922323e-03</internalNodes>\n          <leafValues>\n            1.6753150522708893e-01 3.6157518625259399e-01\n            6.4207828044891357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 146 -3.2090399414300919e-02 -1 -2 147\n            3.2957999501377344e-03</internalNodes>\n          <leafValues>\n            2.9210790991783142e-01 5.6130319833755493e-01\n            3.3578601479530334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 148 -3.2273170072585344e-03 -1 -2 149\n            1.1171669466421008e-03</internalNodes>\n          <leafValues>\n            6.9706428050994873e-01 3.5411500930786133e-01\n            6.1440062522888184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 150 -1.7279950901865959e-02 -1 -2 151\n            1.1741200461983681e-02</internalNodes>\n          <leafValues>\n            5.5371809005737305e-01 5.3419572114944458e-01\n            2.7571049332618713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 152 4.6405228786170483e-03 -1 -2 153\n            -1.6913030296564102e-02</internalNodes>\n          <leafValues>\n            2.4895210564136505e-01 1.7119289934635162e-01\n            5.5239528417587280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 154 1.0060169734060764e-02 -1 -2 155\n            -6.0715491417795420e-04</internalNodes>\n          <leafValues>\n            8.2734507322311401e-01 3.7793910503387451e-01\n            5.4762518405914307e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 156 -1.0865400545299053e-03 -1 -2 157\n            8.9362077414989471e-03</internalNodes>\n          <leafValues>\n            3.2965409755706787e-01 6.0628837347030640e-01\n            2.4342200160026550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 158 -2.6372660067863762e-04 -1 -2 159\n            1.3110050000250340e-02</internalNodes>\n          <leafValues>\n            3.8140949606895447e-01 5.5176162719726562e-01\n            3.7268930673599243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 160 -2.9806280508637428e-03 -1 -2 161\n            -4.1619571857154369e-03</internalNodes>\n          <leafValues>\n            1.2296640127897263e-01 7.2522747516632080e-01\n            4.9734550714492798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 162 3.3842328935861588e-02 -1 -2 163\n            -1.2564560165628791e-03</internalNodes>\n          <leafValues>\n            5.3483128547668457e-01 5.8519148826599121e-01\n            4.3841668963432312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 164 -1.9635230302810669e-02 -1 -2 165\n            -9.9625496659427881e-04</internalNodes>\n          <leafValues>\n            2.2978340089321136e-01 6.2959378957748413e-01\n            4.1315990686416626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 166 -2.3127110674977303e-02 -1 -2 167\n            2.3525709286332130e-02</internalNodes>\n          <leafValues>\n            1.6954590380191803e-01 5.1741302013397217e-01\n            5.9519391506910324e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 168 -1.9356520846486092e-02 -1 -2 169\n            -4.1787112131714821e-03</internalNodes>\n          <leafValues>\n            1.3572479784488678e-01 2.9966288805007935e-01\n            5.7916951179504395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 170 3.1488779932260513e-03 -1 -2 171\n            7.3972279205918312e-03</internalNodes>\n          <leafValues>\n            6.5925890207290649e-01 5.3071719408035278e-01\n            3.7951210141181946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 172 7.1955118983169086e-06 -1 -2 173\n            4.7114409506320953e-02</internalNodes>\n          <leafValues>\n            3.1283149123191833e-01 5.5378931760787964e-01\n            1.0273090004920959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 174 7.2878710925579071e-03 -1 -2 175\n            -6.1887511983513832e-03</internalNodes>\n          <leafValues>\n            4.6608591079711914e-01 7.1588581800460815e-01\n            4.7244489192962646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 176 2.9757320880889893e-03 -1 -2 177\n            -1.8449809867888689e-03</internalNodes>\n          <leafValues>\n            5.9345688670873642e-02 7.0273017883300781e-01\n            4.7187310457229614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 178 1.0239540279144421e-04 -1 -2 179\n            2.4277009069919586e-03</internalNodes>\n          <leafValues>\n            5.8947342634201050e-01 4.8623558878898621e-01\n            5.2475881576538086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 180 -6.4751312136650085e-02 -1 -2 181\n            3.9380151429213583e-04</internalNodes>\n          <leafValues>\n            6.9174712896347046e-01 4.6696171164512634e-01\n            2.3824059963226318e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>31</maxWeakCount>\n      <stageThreshold>1.4546750068664551e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 182 1.4397440245375037e-03 -1 -2 183\n            -5.4068560712039471e-04</internalNodes>\n          <leafValues>\n            2.7734708786010742e-01 7.4271547794342041e-01\n            2.4797350168228149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 184 -7.1237959673453588e-06 -1 -2 185\n            -2.3661039303988218e-03</internalNodes>\n          <leafValues>\n            2.1995030343532562e-01 5.8899897336959839e-01\n            2.5957161188125610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 186 1.7343269428238273e-03 -1 -2 187\n            1.5874590026214719e-03</internalNodes>\n          <leafValues>\n            1.8601259589195251e-01 4.1518709063529968e-01\n            7.1034741401672363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 188 3.7285638973116875e-03 -1 -2 189\n            -1.2883819639682770e-01</internalNodes>\n          <leafValues>\n            2.5279670953750610e-01 1.3930009305477142e-01\n            5.2545148134231567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 190 7.9412180930376053e-03 -1 -2 191\n            -1.2661729939281940e-02</internalNodes>\n          <leafValues>\n            2.4877290427684784e-01 2.7107000350952148e-01\n            6.6188377141952515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 192 3.0146789868013002e-05 -1 -2 193\n            -1.6330160200595856e-02</internalNodes>\n          <leafValues>\n            3.8128259778022766e-01 2.3264320194721222e-01\n            5.2630108594894409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 194 1.4622770322603174e-05 -1 -2 195\n            -2.0858660340309143e-02</internalNodes>\n          <leafValues>\n            4.2933320999145508e-01 1.6004039347171783e-01\n            6.7823147773742676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 196 2.8194559272378683e-03 -1 -2 197\n            3.7899368908256292e-03</internalNodes>\n          <leafValues>\n            6.6792941093444824e-01 4.5877051353454590e-01\n            7.1762388944625854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 198 3.5344641655683517e-02 -1 -2 199\n            -1.1571600334718823e-03</internalNodes>\n          <leafValues>\n            1.8640750646591187e-01 5.5382597446441650e-01\n            3.1504508852958679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 200 -5.8742752298712730e-03 -1 -2 201\n            -1.5201780115603469e-05</internalNodes>\n          <leafValues>\n            2.8287911415100098e-01 5.8702242374420166e-01\n            3.7048238515853882e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 202 -2.2681879636365920e-04 -1 -2 203\n            3.7845689803361893e-03</internalNodes>\n          <leafValues>\n            4.2189309000968933e-01 6.6670012474060059e-01\n            2.4611820280551910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 204 -8.5295992903411388e-05 -1 -2 205\n            -4.4394891709089279e-02</internalNodes>\n          <leafValues>\n            3.5575878620147705e-01 1.6655470430850983e-01\n            5.2348488569259644e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 206 1.0126030538231134e-03 -1 -2 207\n            -7.6327780261635780e-03</internalNodes>\n          <leafValues>\n            2.8846129775047302e-01 2.9693400859832764e-01\n            6.0801112651824951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 208 4.0330411866307259e-03 -1 -2 209\n            1.3676689565181732e-01</internalNodes>\n          <leafValues>\n            4.5363900065422058e-01 5.1772642135620117e-01\n            1.4491820335388184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 210 -5.0060478970408440e-03 -1 -2 211\n            -1.2475839816033840e-02</internalNodes>\n          <leafValues>\n            7.6169097423553467e-01 2.1597060561180115e-01\n            5.4601877927780151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 212 -9.4012258341535926e-04 -1 -2 213\n            -1.2191980145871639e-02</internalNodes>\n          <leafValues>\n            3.9262959361076355e-01 3.4788811206817627e-01\n            5.5426627397537231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 214 -5.4959481349214911e-04 -1 -2 215\n            -2.1802430273965001e-04</internalNodes>\n          <leafValues>\n            6.0642760992050171e-01 5.6974071264266968e-01\n            1.7797139286994934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 216 6.9115799851715565e-03 -1 -2 217\n            -9.7631698008626699e-04</internalNodes>\n          <leafValues>\n            5.3793722391128540e-01 3.3278390765190125e-01\n            5.4615312814712524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 218 -8.7870173156261444e-03 -1 -2 219\n            -1.6761029837653041e-03</internalNodes>\n          <leafValues>\n            2.1161609888076782e-01 6.6358232498168945e-01\n            4.3658590316772461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 220 -5.5694948881864548e-02 -1 -2 221\n            -1.9844379276037216e-02</internalNodes>\n          <leafValues>\n            5.3874248266220093e-01 1.6028049588203430e-01\n            5.3304588794708252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 222 -7.4751611100509763e-04 -1 -2 223\n            2.3032890632748604e-02</internalNodes>\n          <leafValues>\n            2.9174768924713135e-01 5.6081241369247437e-01\n            1.9979810714721680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 224 -3.0700280331075191e-03 -1 -2 225\n            -1.1636839481070638e-03</internalNodes>\n          <leafValues>\n            3.9383140206336975e-01 5.7574361562728882e-01\n            4.2394569516181946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 226 2.2464339435100555e-01 -1 -2 227\n            1.4412109740078449e-03</internalNodes>\n          <leafValues>\n            7.6765531301498413e-01 5.3538662195205688e-01\n            2.5147768855094910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 228 -3.0011249706149101e-02 -1 -2 229\n            -5.3078960627317429e-02</internalNodes>\n          <leafValues>\n            2.3649039864540100e-01 2.3858639597892761e-01\n            5.4146647453308105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 230 2.0800929050892591e-03 -1 -2 231\n            -4.0738182142376900e-03</internalNodes>\n          <leafValues>\n            6.5116149187088013e-01 6.0304141044616699e-01\n            3.5877010226249695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 232 -1.9529370591044426e-02 -1 -2 233\n            -5.3309470415115356e-02</internalNodes>\n          <leafValues>\n            5.4235929250717163e-01 2.3609539866447449e-01\n            5.4017579555511475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 234 -3.4849561750888824e-02 -1 -2 235\n            -1.2658450007438660e-01</internalNodes>\n          <leafValues>\n            2.8369858860969543e-01 1.8135160207748413e-01\n            5.4210460186004639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 236 7.3325118137290701e-06 -1 -2 237\n            -1.1843870393931866e-02</internalNodes>\n          <leafValues>\n            3.9803659915924072e-01 2.6163849234580994e-01\n            5.2377301454544067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 238 -4.8470678739249706e-03 -1 -2 239\n            8.1693977117538452e-03</internalNodes>\n          <leafValues>\n            2.4381080269813538e-01 5.3271460533142090e-01\n            8.1903767585754395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 240 -6.4716790802776814e-03 -1 -2 241\n            -1.5188479665084742e-05</internalNodes>\n          <leafValues>\n            4.6796938776969910e-01 5.5639117956161499e-01\n            4.3675860762596130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 242 3.0696711037307978e-03 -1 -2 243\n            -1.6296720423270017e-04</internalNodes>\n          <leafValues>\n            6.6643488407135010e-01 5.5946111679077148e-01\n            3.0427119135856628e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>39</maxWeakCount>\n      <stageThreshold>1.8572250366210938e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            1 0 244 -9.8275858908891678e-03 -1 -2 245\n            -4.1693858802318573e-03</internalNodes>\n          <leafValues>\n            2.1160189807415009e-01 6.9246852397918701e-01\n            3.0437770485877991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 246 3.5341319744475186e-04 -1 -2 247\n            4.8054549843072891e-03</internalNodes>\n          <leafValues>\n            3.1832858920097351e-01 5.4565590620040894e-01\n            2.5222688913345337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 248 2.1071180526632816e-04 -1 -2 249\n            -2.8318869881331921e-03</internalNodes>\n          <leafValues>\n            2.9026180505752563e-01 3.1304559111595154e-01\n            6.8849372863769531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 250 -7.5633679443853907e-06 -1 -2 251\n            -8.2888139877468348e-04</internalNodes>\n          <leafValues>\n            2.9624658823013306e-01 3.0996260046958923e-01\n            5.7525151968002319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 252 1.6209259629249573e-03 -1 -2 253\n            9.1338958591222763e-03</internalNodes>\n          <leafValues>\n            3.9931958913803101e-01 4.8273721337318420e-01\n            7.5378328561782837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 254 -4.1212290525436401e-03 -1 -2 255\n            -2.5447290390729904e-03</internalNodes>\n          <leafValues>\n            2.6169270277023315e-01 3.1087028980255127e-01\n            5.4912358522415161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 256 -6.2652782071381807e-04 -1 -2 257\n            -3.6596331483451650e-05</internalNodes>\n          <leafValues>\n            3.2396918535232544e-01 6.5174108743667603e-01\n            4.1789120435714722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 258 1.3882719911634922e-02 -1 -2 259\n            1.0493700392544270e-03</internalNodes>\n          <leafValues>\n            6.7712038755416870e-01 4.1595110297203064e-01\n            5.6528919935226440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 260 1.8215360119938850e-02 -1 -2 261\n            -1.1334580369293690e-02</internalNodes>\n          <leafValues>\n            7.6896011829376221e-01 2.8733238577842712e-01\n            4.9889329075813293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 262 -4.1097560897469521e-03 -1 -2 263\n            4.2612891411408782e-04</internalNodes>\n          <leafValues>\n            5.4630082845687866e-01 3.6312350630760193e-01\n            5.5125522613525391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 264 6.0301548801362514e-03 -1 -2 265\n            3.3587709185667336e-04</internalNodes>\n          <leafValues>\n            1.1437670141458511e-01 2.8910788893699646e-01\n            5.4473417997360229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 266 6.2279507983475924e-04 -1 -2 267\n            -2.5837119668722153e-02</internalNodes>\n          <leafValues>\n            3.0234318971633911e-01 2.1670059859752655e-01\n            5.2781528234481812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 268 2.1774910390377045e-02 -1 -2 269\n            1.7682299949228764e-03</internalNodes>\n          <leafValues>\n            3.2548341155052185e-01 5.2630507946014404e-01\n            7.5263291597366333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 270 -1.3793810270726681e-02 -1 -2 271\n            -5.0852829590439796e-03</internalNodes>\n          <leafValues>\n            7.4103301763534546e-01 6.8366098403930664e-01\n            4.5790711045265198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 272 6.1795017682015896e-03 -1 -2 273\n            1.0030319914221764e-02</internalNodes>\n          <leafValues>\n            7.4499362707138062e-01 4.8607799410820007e-01\n            2.3614570498466492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 274 -6.4201927743852139e-03 -1 -2 275\n            -5.6961281225085258e-03</internalNodes>\n          <leafValues>\n            1.4673270285129547e-01 2.3478199541568756e-01\n            5.3233772516250610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 276 -7.1498160250484943e-03 -1 -2 277\n            2.4450740311294794e-03</internalNodes>\n          <leafValues>\n            1.4770570397377014e-01 3.4985339641571045e-01\n            5.8035618066787720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 278 -3.7503410130739212e-02 -1 -2 279\n            4.7799441381357610e-04</internalNodes>\n          <leafValues>\n            5.2595508098602295e-01 4.3628829717636108e-01\n            6.2089228630065918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 280 -7.0806080475449562e-03 -1 -2 281\n            3.2818000763654709e-02</internalNodes>\n          <leafValues>\n            2.0394609868526459e-01 5.1983588933944702e-01\n            1.3711960613727570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 282 6.5188988810405135e-04 -1 -2 283\n            4.6485587954521179e-03</internalNodes>\n          <leafValues>\n            6.3234299421310425e-01 4.7201630473136902e-01\n            6.5670871734619141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 284 -1.9827929791063070e-03 -1 -2 285\n            -1.6011310508474708e-03</internalNodes>\n          <leafValues>\n            6.0530602931976318e-01 5.0905191898345947e-01\n            3.1169331073760986e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 286 -3.0539939180016518e-03 -1 -2 287\n            4.3212040327489376e-04</internalNodes>\n          <leafValues>\n            3.4298041462898254e-01 3.8384029269218445e-01\n            5.7755982875823975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 288 -2.7452120557427406e-02 -1 -2 289\n            9.3099439982324839e-04</internalNodes>\n          <leafValues>\n            2.1434690058231354e-01 5.9529662132263184e-01\n            3.7601581215858459e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 290 6.7144189961254597e-03 -1 -2 291\n            -3.3701690845191479e-03</internalNodes>\n          <leafValues>\n            5.6926268339157104e-01 5.7843041419982910e-01\n            3.9742821455001831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 292 -1.8903959542512894e-02 -1 -2 293\n            -6.5850871615111828e-03</internalNodes>\n          <leafValues>\n            1.8188929557800293e-01 6.8491101264953613e-01\n            4.3515840172767639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 294 5.8810501359403133e-03 -1 -2 295\n            8.0092082498595119e-04</internalNodes>\n          <leafValues>\n            2.7266609668731689e-01 4.2364311218261719e-01\n            5.8446758985519409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 296 1.8510579830035567e-03 -1 -2 297\n            6.3273650594055653e-03</internalNodes>\n          <leafValues>\n            3.3713209629058838e-01 5.2702218294143677e-01\n            8.0536508560180664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 298 -3.3820930402725935e-03 -1 -2 299\n            -1.9292969955131412e-03</internalNodes>\n          <leafValues>\n            2.8660181164741516e-01 5.8889460563659668e-01\n            3.8957870006561279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 300 1.4995220117270947e-02 -1 -2 301\n            -2.6330750435590744e-02</internalNodes>\n          <leafValues>\n            2.1778169274330139e-01 1.7753170430660248e-01\n            5.6714701652526855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 302 -4.1734222322702408e-03 -1 -2 303\n            2.7268350124359131e-02</internalNodes>\n          <leafValues>\n            4.6529620885848999e-01 4.7683110833168030e-01\n            5.6952387094497681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 304 9.8880263976752758e-04 -1 -2 305\n            -1.0528849670663476e-03</internalNodes>\n          <leafValues>\n            3.3974018692970276e-01 6.2500411272048950e-01\n            4.2884120345115662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 306 5.2288072183728218e-03 -1 -2 307\n            3.0395459383726120e-02</internalNodes>\n          <leafValues>\n            5.3477621078491211e-01 4.1155189275741577e-01\n            5.6607538461685181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 308 -7.9113930463790894e-02 -1 -2 309\n            1.8231669440865517e-02</internalNodes>\n          <leafValues>\n            7.8813230991363525e-01 3.6043399572372437e-01\n            5.5695050954818726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 310 5.2288072183728218e-03 -1 -2 311\n            4.3922828626818955e-04</internalNodes>\n          <leafValues>\n            5.4166442155838013e-01 5.5071568489074707e-01\n            3.8822770118713379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 312 -8.6501962505280972e-04 -1 -2 313\n            1.0326979681849480e-03</internalNodes>\n          <leafValues>\n            3.1858509778976440e-01 5.5783641338348389e-01\n            3.2192459702491760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 314 -7.2997747920453548e-03 -1 -2 315\n            -9.3629042385146022e-04</internalNodes>\n          <leafValues>\n            7.0732331275939941e-01 5.5580157041549683e-01\n            4.6138420701026917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 316 -6.0483231209218502e-03 -1 -2 317\n            6.7529221996665001e-03</internalNodes>\n          <leafValues>\n            6.8692898750305176e-01 4.8703178763389587e-01\n            2.6503708958625793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 318 5.3078029304742813e-02 -1 -2 319\n            -1.0225810110569000e-03</internalNodes>\n          <leafValues>\n            5.2815151214599609e-01 6.0858821868896484e-01\n            4.3048679828643799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 320 3.1270649284124374e-02 -1 -2 321\n            -6.3522169366478920e-03</internalNodes>\n          <leafValues>\n            5.4458320140838623e-01 5.3283357620239258e-01\n            2.3643240332603455e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>45</maxWeakCount>\n      <stageThreshold>2.1578119277954102e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            1 0 322 -6.2215630896389484e-03 -1 -2 323\n            2.1097389981150627e-03</internalNodes>\n          <leafValues>\n            2.6255810260772705e-01 1.5649929642677307e-01\n            6.7928832769393921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 324 1.0845859535038471e-02 -1 -2 325\n            6.4230401767417789e-04</internalNodes>\n          <leafValues>\n            3.4858089685440063e-01 3.6982551217079163e-01\n            5.9216582775115967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 326 7.3311722371727228e-04 -1 -2 327\n            1.0134200565516949e-03</internalNodes>\n          <leafValues>\n            3.0070841312408447e-01 3.6249229311943054e-01\n            7.0724260807037354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 328 1.1093559674918652e-02 -1 -2 329\n            -7.9127531498670578e-03</internalNodes>\n          <leafValues>\n            4.4167020916938782e-01 3.0287081003189087e-01\n            5.4173761606216431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 330 1.2905309908092022e-02 -1 -2 331\n            -4.2430912144482136e-03</internalNodes>\n          <leafValues>\n            4.3745040893554688e-01 4.4015899300575256e-01\n            7.5651907920837402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 332 -2.1304309484548867e-04 -1 -2 333\n            -2.2308640182018280e-03</internalNodes>\n          <leafValues>\n            2.3107869923114777e-01 3.5681959986686707e-01\n            5.7499992847442627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 334 2.6400520000606775e-03 -1 -2 335\n            7.5101032853126526e-02</internalNodes>\n          <leafValues>\n            3.5936889052391052e-01 6.3635677099227905e-01\n            2.3270289599895477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 336 -7.7012968249619007e-03 -1 -2 337\n            1.5588370151817799e-03</internalNodes>\n          <leafValues>\n            7.0746237039566040e-01 5.7002371549606323e-01\n            3.5904508829116821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 338 -4.7687938786111772e-04 -1 -2 339\n            8.4234727546572685e-04</internalNodes>\n          <leafValues>\n            2.8054410219192505e-01 4.1254189610481262e-01\n            6.1779958009719849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 340 -1.2825109995901585e-02 -1 -2 341\n            -6.5156567143276334e-04</internalNodes>\n          <leafValues>\n            5.4030781984329224e-01 5.6336438655853271e-01\n            3.3565390110015869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 342 -1.2006159871816635e-02 -1 -2 343\n            1.3213419588282704e-03</internalNodes>\n          <leafValues>\n            7.1095108985900879e-01 4.9038508534431458e-01\n            2.8245830535888672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 344 -2.0307440310716629e-02 -1 -2 345\n            4.0180929936468601e-03</internalNodes>\n          <leafValues>\n            1.8913699686527252e-01 5.3779661655426025e-01\n            3.1194949150085449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 346 4.5315311290323734e-03 -1 -2 347\n            -4.4381739571690559e-03</internalNodes>\n          <leafValues>\n            7.2067582607269287e-01 1.8546679615974426e-01\n            4.9817329645156860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 348 1.5692010056227446e-03 -1 -2 349\n            -4.9516442231833935e-03</internalNodes>\n          <leafValues>\n            2.6382741332054138e-01 6.8710672855377197e-01\n            4.7146868705749512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 350 -2.7429679408669472e-02 -1 -2 351\n            1.4181969454512000e-03</internalNodes>\n          <leafValues>\n            1.5482850372791290e-01 4.3768429756164551e-01\n            6.3273680210113525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 352 -1.3078940100967884e-02 -1 -2 353\n            -3.5092779435217381e-03</internalNodes>\n          <leafValues>\n            3.1668141484260559e-01 6.1997437477111816e-01\n            4.3796870112419128e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 354 1.8920730799436569e-02 -1 -2 355\n            2.1683350205421448e-03</internalNodes>\n          <leafValues>\n            1.4707140624523163e-01 5.8094590902328491e-01\n            3.4319490194320679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 356 1.6401590546593070e-03 -1 -2 357\n            1.4005920093040913e-04</internalNodes>\n          <leafValues>\n            3.9594578742980957e-01 3.2400250434875488e-01\n            5.6466472148895264e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 358 -3.3137591090053320e-03 -1 -2 359\n            -2.9459029901772738e-03</internalNodes>\n          <leafValues>\n            4.2745280265808105e-01 3.3416679501533508e-01\n            6.6279602050781250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 360 1.3612229668069631e-04 -1 -2 361\n            6.0512032359838486e-04</internalNodes>\n          <leafValues>\n            4.0469279885292053e-01 5.4840582609176636e-01\n            3.5699409246444702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 362 -1.7513990402221680e-02 -1 -2 363\n            -1.8735030665993690e-02</internalNodes>\n          <leafValues>\n            1.8241509795188904e-01 7.9718202352523804e-01\n            5.0685691833496094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 364 1.2065649963915348e-02 -1 -2 365\n            -2.6544178836047649e-03</internalNodes>\n          <leafValues>\n            2.1670070290565491e-01 6.5841788053512573e-01\n            4.6282431483268738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 366 1.4501289697363973e-03 -1 -2 367\n            1.0954019613564014e-02</internalNodes>\n          <leafValues>\n            2.0902520418167114e-01 5.1123052835464478e-01\n            7.7845758199691772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 368 1.5771709382534027e-02 -1 -2 369\n            -1.4252689667046070e-02</internalNodes>\n          <leafValues>\n            5.1323592662811279e-01 1.7424149811267853e-01\n            5.2671480178833008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 370 3.0411860279855318e-05 -1 -2 371\n            2.3486299440264702e-02</internalNodes>\n          <leafValues>\n            3.4184479713439941e-01 5.6312650442123413e-01\n            2.0063939690589905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 372 5.2205449901521206e-03 -1 -2 373\n            -2.5812430307269096e-02</internalNodes>\n          <leafValues>\n            6.2496489286422729e-01 3.2032281160354614e-01\n            5.1993298530578613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 374 -1.9526650430634618e-03 -1 -2 375\n            -8.1470049917697906e-03</internalNodes>\n          <leafValues>\n            6.1407059431076050e-01 6.5928959846496582e-01\n            3.7111249566078186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 376 3.2962448894977570e-03 -1 -2 377\n            -1.3961310032755136e-03</internalNodes>\n          <leafValues>\n            2.9521119594573975e-01 3.3208039402961731e-01\n            5.5284148454666138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 378 -4.1055441834032536e-03 -1 -2 379\n            -1.0888779535889626e-02</internalNodes>\n          <leafValues>\n            1.7105500400066376e-01 3.3594349026679993e-01\n            5.6749051809310913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 380 -7.6768421567976475e-03 -1 -2 381\n            -9.7729787230491638e-03</internalNodes>\n          <leafValues>\n            4.7732418775558472e-01 8.0810451507568359e-01\n            4.8458281159400940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 382 6.0439710505306721e-03 -1 -2 383\n            -4.6134641161188483e-04</internalNodes>\n          <leafValues>\n            6.7840021848678589e-01 5.5146390199661255e-01\n            3.6423599720001221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 384 5.7992361485958099e-02 -1 -2 385\n            5.9384980704635382e-04</internalNodes>\n          <leafValues>\n            1.2544350326061249e-01 4.4248789548873901e-01\n            5.7284617424011230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 386 -6.2353480607271194e-03 -1 -2 387\n            -1.2784929946064949e-02</internalNodes>\n          <leafValues>\n            2.8050419688224792e-01 1.9509120285511017e-01\n            5.6529247760772705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 388 4.1973669431172311e-04 -1 -2 389\n            8.0646801507100463e-04</internalNodes>\n          <leafValues>\n            6.1664837598800659e-01 4.5265799760818481e-01\n            5.9444868564605713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 390 -1.6339010326191783e-03 -1 -2 391\n            -4.8299999907612801e-03</internalNodes>\n          <leafValues>\n            4.0869420766830444e-01 2.7935269474983215e-01\n            6.4449352025985718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 392 -6.3992068171501160e-03 -1 -2 393\n            1.0819199681282043e-01</internalNodes>\n          <leafValues>\n            5.6716561317443848e-01 5.3118121623992920e-01\n            2.6143568754196167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 394 6.5056560561060905e-04 -1 -2 395\n            2.0611250773072243e-02</internalNodes>\n          <leafValues>\n            2.9967740178108215e-01 4.4899430871009827e-01\n            6.8882799148559570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 396 -2.5129050016403198e-02 -1 -2 397\n            1.7922939732670784e-03</internalNodes>\n          <leafValues>\n            5.1968640089035034e-01 3.4669959545135498e-01\n            5.5335879325866699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 398 1.5626220265403390e-03 -1 -2 399\n            -6.1898730928078294e-04</internalNodes>\n          <leafValues>\n            3.0814400315284729e-01 2.6938709616661072e-01\n            5.5444890260696411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 400 4.8111421056091785e-03 -1 -2 401\n            2.2484229411929846e-03</internalNodes>\n          <leafValues>\n            5.5878478288650513e-01 4.6721130609512329e-01\n            6.0908252000808716e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 402 -3.0147239565849304e-02 -1 -2 403\n            2.7548679709434509e-01</internalNodes>\n          <leafValues>\n            9.0275919437408447e-01 4.7198349237442017e-01\n            2.1969200670719147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 404 3.6894630175083876e-03 -1 -2 405\n            7.2957701049745083e-03</internalNodes>\n          <leafValues>\n            6.2730091810226440e-01 4.8392179608345032e-01\n            6.9090622663497925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 406 -5.6211069226264954e-02 -1 -2 407\n            -2.6478560175746679e-03</internalNodes>\n          <leafValues>\n            1.7384879291057587e-01 6.3041448593139648e-01\n            4.4743019342422485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 408 -1.4534000074490905e-03 -1 -2 409\n            2.8540920466184616e-03</internalNodes>\n          <leafValues>\n            5.3025382757186890e-01 5.3383970260620117e-01\n            3.7968829274177551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 410 5.8243022067472339e-04 -1 -2 411\n            9.2509482055902481e-04</internalNodes>\n          <leafValues>\n            3.2698369026184082e-01 4.5548120141029358e-01\n            6.3583481311798096e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>47</maxWeakCount>\n      <stageThreshold>2.2585290908813477e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 412 1.9806440919637680e-02 -1 -2 413\n            7.0395611692219973e-04</internalNodes>\n          <leafValues>\n            2.8097251057624817e-01 3.1198260188102722e-01\n            7.0903062820434570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 414 2.5563780218362808e-03 -1 -2 415\n            1.0824160417541862e-03</internalNodes>\n          <leafValues>\n            2.9819479584693909e-01 3.0205601453781128e-01\n            5.8088111877441406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 416 -9.2893769033253193e-04 -1 -2 417\n            -1.8009729683399200e-02</internalNodes>\n          <leafValues>\n            3.7381029129028320e-01 2.1631260216236115e-01\n            6.6192537546157837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 418 2.3500190582126379e-03 -1 -2 419\n            8.1822491483762860e-04</internalNodes>\n          <leafValues>\n            2.9104039072990417e-01 5.5786228179931641e-01\n            3.3666279911994934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 420 6.2095321482047439e-04 -1 -2 421\n            9.6780969761312008e-04</internalNodes>\n          <leafValues>\n            4.0724259614944458e-01 6.8595957756042480e-01\n            3.1054618954658508e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 422 4.8000211245380342e-04 -1 -2 423\n            9.0538640506565571e-05</internalNodes>\n          <leafValues>\n            3.3373329043388367e-01 3.3709588646888733e-01\n            5.4512107372283936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 424 -4.3914798647165298e-02 -1 -2 425\n            -5.6501338258385658e-03</internalNodes>\n          <leafValues>\n            2.6256701350212097e-01 6.0504627227783203e-01\n            3.2324150204658508e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 426 3.8661491125822067e-03 -1 -2 427\n            -6.3069426687434316e-05</internalNodes>\n          <leafValues>\n            3.2626131176948547e-01 5.8173078298568726e-01\n            4.1643899679183960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 428 5.2533738315105438e-02 -1 -2 429\n            1.3818660518154502e-03</internalNodes>\n          <leafValues>\n            7.0953989028930664e-01 5.2928757667541504e-01\n            2.5413888692855835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 430 -8.9264067355543375e-04 -1 -2 431\n            8.5579507052898407e-02</internalNodes>\n          <leafValues>\n            4.0853410959243774e-01 5.2632361650466919e-01\n            3.0032029747962952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 432 -1.8343339615967125e-04 -1 -2 433\n            -9.7924815490841866e-03</internalNodes>\n          <leafValues>\n            4.0292051434516907e-01 3.5213199257850647e-01\n            6.6640049219131470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 434 1.4428620226681232e-02 -1 -2 435\n            -4.5687001198530197e-02</internalNodes>\n          <leafValues>\n            4.5935660600662231e-01 1.4747560024261475e-01\n            5.1786321401596069e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 436 -2.5763090234249830e-03 -1 -2 437\n            -3.8301859050989151e-02</internalNodes>\n          <leafValues>\n            1.8372780084609985e-01 8.0826580524444580e-01\n            5.1666879653930664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 438 2.8978290501981974e-03 -1 -2 439\n            -2.5165060069411993e-03</internalNodes>\n          <leafValues>\n            4.7980138659477234e-01 3.3462959527969360e-01\n            5.4444491863250732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 440 5.6281982688233256e-04 -1 -2 441\n            3.6684391088783741e-03</internalNodes>\n          <leafValues>\n            3.5890269279479980e-01 5.9831297397613525e-01\n            2.9839640855789185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 442 2.1319789811968803e-03 -1 -2 443\n            7.6037310063838959e-03</internalNodes>\n          <leafValues>\n            6.1632239818572998e-01 5.2171301841735840e-01\n            2.0541590452194214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 444 -1.1668079969240353e-04 -1 -2 445\n            3.1659509986639023e-03</internalNodes>\n          <leafValues>\n            3.4466689825057983e-01 5.5974847078323364e-01\n            2.6737868785858154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 446 -2.2569499909877777e-02 -1 -2 447\n            2.7129601221531630e-04</internalNodes>\n          <leafValues>\n            6.9002681970596313e-01 4.4866389036178589e-01\n            5.5087852478027344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 448 -1.5434459783136845e-02 -1 -2 449\n            -8.4861656650900841e-03</internalNodes>\n          <leafValues>\n            2.0483230054378510e-01 1.2549529969692230e-01\n            5.0603562593460083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 450 -1.1807470023632050e-01 -1 -2 451\n            -1.2300079688429832e-03</internalNodes>\n          <leafValues>\n            6.7633062601089478e-02 5.6607007980346680e-01\n            4.2922011017799377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 452 -7.0290351286530495e-03 -1 -2 453\n            8.9325206354260445e-03</internalNodes>\n          <leafValues>\n            7.1364039182662964e-01 4.3388760089874268e-01\n            7.0608752965927124e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 454 -4.7735981643199921e-02 -1 -2 455\n            -4.4155579060316086e-02</internalNodes>\n          <leafValues>\n            5.2686852216720581e-01 2.5805801153182983e-01\n            5.4069608449935913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 456 -2.5983480736613274e-02 -1 -2 457\n            -4.7885831445455551e-03</internalNodes>\n          <leafValues>\n            1.9050540030002594e-01 2.5518929958343506e-01\n            5.3390771150588989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 458 6.7423451691865921e-03 -1 -2 459\n            1.1654750443994999e-02</internalNodes>\n          <leafValues>\n            4.6933099627494812e-01 5.2619642019271851e-01\n            3.1454348564147949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 460 -5.6982729583978653e-03 -1 -2 461\n            -7.2983349673449993e-03</internalNodes>\n          <leafValues>\n            1.7568530142307281e-01 7.7747297286987305e-01\n            5.1242929697036743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 462 7.9091778025031090e-03 -1 -2 463\n            -1.5874979726504534e-04</internalNodes>\n          <leafValues>\n            5.2845597267150879e-01 3.8878020644187927e-01\n            5.5011737346649170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 464 -6.2235877849161625e-03 -1 -2 465\n            1.3308860361576080e-03</internalNodes>\n          <leafValues>\n            2.4898290634155273e-01 4.2621460556983948e-01\n            5.9350621700286865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 466 5.2055278792977333e-03 -1 -2 467\n            1.4065169729292393e-02</internalNodes>\n          <leafValues>\n            2.5452229380607605e-01 4.8519900441169739e-01\n            7.0214188098907471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 468 -6.7384149879217148e-03 -1 -2 469\n            3.3406780567020178e-03</internalNodes>\n          <leafValues>\n            7.1432709693908691e-01 5.1757252216339111e-01\n            2.8086438775062561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 470 -1.1880699545145035e-02 -1 -2 471\n            1.4226379571482539e-03</internalNodes>\n          <leafValues>\n            5.1732218265533447e-01 4.5028659701347351e-01\n            5.7956951856613159e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 472 2.9858129564672709e-03 -1 -2 473\n            -2.0481580868363380e-03</internalNodes>\n          <leafValues>\n            1.9151160120964050e-01 6.5024322271347046e-01\n            4.5593151450157166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 474 1.7122729914262891e-03 -1 -2 475\n            -1.6980869695544243e-02</internalNodes>\n          <leafValues>\n            5.3762471675872803e-01 7.0562332868576050e-01\n            4.9146059155464172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 476 -1.1290470138192177e-03 -1 -2 477\n            2.8620059601962566e-03</internalNodes>\n          <leafValues>\n            2.6787060499191284e-01 4.4108539819717407e-01\n            6.3683199882507324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 478 -3.8065758999437094e-03 -1 -2 479\n            5.9090270660817623e-03</internalNodes>\n          <leafValues>\n            2.7635639905929565e-01 4.8673018813133240e-01\n            6.7287760972976685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 480 1.1004370171576738e-03 -1 -2 481\n            -2.3396299220621586e-03</internalNodes>\n          <leafValues>\n            4.0705141425132751e-01 2.6049488782882690e-01\n            6.1548602581024170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 482 -3.6068160552531481e-03 -1 -2 483\n            4.0831189602613449e-02</internalNodes>\n          <leafValues>\n            5.7319998741149902e-01 4.9733769893646240e-01\n            7.3870068788528442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 484 -7.1082250215113163e-03 -1 -2 485\n            -9.3759730225428939e-04</internalNodes>\n          <leafValues>\n            6.9847512245178223e-01 2.6911678910255432e-01\n            4.7417798638343811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 486 -1.6740820137783885e-03 -1 -2 487\n            8.8287703692913055e-02</internalNodes>\n          <leafValues>\n            3.5510140657424927e-01 5.2446138858795166e-01\n            2.0966500043869019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 488 8.2009629113599658e-04 -1 -2 489\n            -7.6624617213383317e-04</internalNodes>\n          <leafValues>\n            4.1310968995094299e-01 4.6202930808067322e-01\n            6.7754101753234863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 490 6.5769668435677886e-04 -1 -2 491\n            -2.1304790861904621e-03</internalNodes>\n          <leafValues>\n            5.6282752752304077e-01 5.5768597126007080e-01\n            4.5776501297950745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 492 -3.7317050737328827e-04 -1 -2 493\n            -1.1172230355441570e-02</internalNodes>\n          <leafValues>\n            4.9592560529708862e-01 5.6256359815597534e-01\n            2.0471079647541046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 494 4.3435219675302505e-02 -1 -2 495\n            9.6736161503940821e-04</internalNodes>\n          <leafValues>\n            2.2421480715274811e-01 4.5333439111709595e-01\n            6.1999320983886719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 496 -3.1452889088541269e-03 -1 -2 497\n            1.5233129961416125e-03</internalNodes>\n          <leafValues>\n            6.6627562046051025e-01 5.0079882144927979e-01\n            2.3849929869174957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 498 2.0854279864579439e-03 -1 -2 499\n            3.6098200827836990e-02</internalNodes>\n          <leafValues>\n            3.7535008788108826e-01 5.1771712303161621e-01\n            1.6344930231571198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 500 1.6179570229724050e-03 -1 -2 501\n            -6.2132300809025764e-04</internalNodes>\n          <leafValues>\n            2.5873818993568420e-01 6.2995338439941406e-01\n            4.6587899327278137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 502 7.1878539165481925e-04 -1 -2 503\n            -3.9339520037174225e-02</internalNodes>\n          <leafValues>\n            3.3540761470794678e-01 2.1541289985179901e-01\n            5.2357137203216553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 504 -1.0988829890266061e-03 -1 -2 505\n            2.1191420964896679e-03</internalNodes>\n          <leafValues>\n            6.4688968658447266e-01 2.8930890560150146e-01\n            5.2548158168792725e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>53</maxWeakCount>\n      <stageThreshold>2.5609300613403320e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 506 5.2359891124069691e-03 -1 -2 507\n            -2.2169889416545630e-03</internalNodes>\n          <leafValues>\n            3.2997110486030579e-01 7.0415931940078735e-01\n            3.2354658842086792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 508 -8.2303592935204506e-03 -1 -2 509\n            -8.2303592935204506e-03</internalNodes>\n          <leafValues>\n            4.9611708521842957e-01 7.1280431747436523e-01\n            4.9611708521842957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 510 4.5343261444941163e-04 -1 -2 511\n            -4.1777061414904892e-04</internalNodes>\n          <leafValues>\n            3.2084721326828003e-01 6.6139167547225952e-01\n            3.5513329505920410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 512 2.7823769487440586e-03 -1 -2 513\n            -6.0361868236213923e-05</internalNodes>\n          <leafValues>\n            3.7101349234580994e-01 5.7463937997817993e-01\n            3.8948801159858704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 514 3.5061789676547050e-03 -1 -2 515\n            1.7013119941111654e-04</internalNodes>\n          <leafValues>\n            3.0541029572486877e-01 2.8855779767036438e-01\n            6.4877450466156006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 516 -2.3378930054605007e-03 -1 -2 517\n            -2.1369170863181353e-03</internalNodes>\n          <leafValues>\n            3.1744310259819031e-01 3.8209199905395508e-01\n            5.2328932285308838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 518 1.0250400518998504e-03 -1 -2 519\n            -4.4726220949087292e-05</internalNodes>\n          <leafValues>\n            3.6227950453758240e-01 6.5389591455459595e-01\n            4.0036809444427490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 520 5.7102291611954570e-04 -1 -2 521\n            5.7743012439459562e-04</internalNodes>\n          <leafValues>\n            3.8931730389595032e-01 5.6145328283309937e-01\n            3.6876440048217773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 522 7.9692091094329953e-04 -1 -2 523\n            3.5945948911830783e-04</internalNodes>\n          <leafValues>\n            6.4430278539657593e-01 3.3808529376983643e-01\n            5.8246481418609619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 524 4.3973900028504431e-04 -1 -2 525\n            -8.9061429025605321e-04</internalNodes>\n          <leafValues>\n            3.9387670159339905e-01 3.4279710054397583e-01\n            5.5156987905502319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 526 5.4110242053866386e-03 -1 -2 527\n            -8.5764907998964190e-04</internalNodes>\n          <leafValues>\n            3.8035380840301514e-01 6.4395052194595337e-01\n            4.1683459281921387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 528 -2.2000649943947792e-02 -1 -2 529\n            -7.8731682151556015e-03</internalNodes>\n          <leafValues>\n            6.6546010971069336e-01 4.1827228665351868e-01\n            5.6047242879867554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 530 -2.7444459497928619e-02 -1 -2 531\n            1.9792269449681044e-03</internalNodes>\n          <leafValues>\n            6.5868628025054932e-01 3.2449120283126831e-01\n            4.8828700184822083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 532 -5.6783691979944706e-03 -1 -2 533\n            1.5057219570735469e-05</internalNodes>\n          <leafValues>\n            2.2290790081024170e-01 4.1072851419448853e-01\n            5.7475912570953369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 534 -5.4136710241436958e-03 -1 -2 535\n            5.3679239936172962e-03</internalNodes>\n          <leafValues>\n            2.0657970011234283e-01 4.9264231324195862e-01\n            7.1394848823547363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 536 -3.1426660716533661e-03 -1 -2 537\n            1.0907390154898167e-02</internalNodes>\n          <leafValues>\n            6.7800867557525635e-01 5.2149301767349243e-01\n            1.1439959704875946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 538 5.8436761610209942e-03 -1 -2 539\n            9.0507230197545141e-05</internalNodes>\n          <leafValues>\n            1.9375260174274445e-01 3.8125771284103394e-01\n            5.5141878128051758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 540 -1.6345789656043053e-02 -1 -2 541\n            1.5987500082701445e-03</internalNodes>\n          <leafValues>\n            2.4740239977836609e-01 4.8177829384803772e-01\n            5.9230798482894897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 542 -4.0257978253066540e-03 -1 -2 543\n            -6.7750471644103527e-03</internalNodes>\n          <leafValues>\n            7.5082087516784668e-01 2.8798109292984009e-01\n            5.1996952295303345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 544 -3.2470689620822668e-03 -1 -2 545\n            1.5409620245918632e-03</internalNodes>\n          <leafValues>\n            3.0449101328849792e-01 4.0634828805923462e-01\n            5.6765627861022949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 546 -1.2858119793236256e-02 -1 -2 547\n            -1.4824670506641269e-04</internalNodes>\n          <leafValues>\n            9.6717558801174164e-02 4.5378330349922180e-01\n            6.1153751611709595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 548 -9.0210810303688049e-03 -1 -2 549\n            -2.8795029968023300e-02</internalNodes>\n          <leafValues>\n            4.8077508807182312e-01 3.4037950634956360e-01\n            5.2555292844772339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 550 9.0210810303688049e-03 -1 -2 551\n            7.4121179059147835e-03</internalNodes>\n          <leafValues>\n            7.5058358907699585e-01 5.4554468393325806e-01\n            3.2260689139366150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 552 -3.7217529024928808e-03 -1 -2 553\n            1.9865889847278595e-01</internalNodes>\n          <leafValues>\n            2.3118489980697632e-01 5.2710479497909546e-01\n            1.4699299633502960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 554 1.5208719560177997e-05 -1 -2 555\n            -3.9089918136596680e-03</internalNodes>\n          <leafValues>\n            3.6781388521194458e-01 7.1319299936294556e-01\n            4.9938669800758362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 556 2.5106288958340883e-03 -1 -2 557\n            2.3921660613268614e-04</internalNodes>\n          <leafValues>\n            5.3120541572570801e-01 4.6893781423568726e-01\n            5.7140219211578369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 558 6.9443131797015667e-03 -1 -2 559\n            1.2065629707649350e-03</internalNodes>\n          <leafValues>\n            6.9487977027893066e-01 4.0045049786567688e-01\n            5.8748817443847656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 560 2.5106288958340883e-03 -1 -2 561\n            1.7514040227979422e-03</internalNodes>\n          <leafValues>\n            5.3295719623565674e-01 5.5458492040634155e-01\n            3.4495818614959717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 562 -4.1978210210800171e-03 -1 -2 563\n            1.3092850567772985e-03</internalNodes>\n          <leafValues>\n            1.2171830236911774e-01 5.3750497102737427e-01\n            3.4156250953674316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 564 6.7396182566881180e-04 -1 -2 565\n            -1.0530710220336914e-02</internalNodes>\n          <leafValues>\n            4.1951790452003479e-01 3.4607538580894470e-01\n            5.1558601856231689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 566 -4.0672299265861511e-01 -1 -2 567\n            -2.6314549148082733e-02</internalNodes>\n          <leafValues>\n            5.8065678924322128e-02 1.4734490215778351e-01\n            5.5593782663345337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 568 2.2557149641215801e-03 -1 -2 569\n            1.2154860422015190e-02</internalNodes>\n          <leafValues>\n            5.4777151346206665e-01 4.2077910900115967e-01\n            5.6218808889389038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 570 -1.8436539918184280e-02 -1 -2 571\n            5.3676147945225239e-04</internalNodes>\n          <leafValues>\n            6.4471471309661865e-01 2.7651271224021912e-01\n            4.8885959386825562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 572 -2.6265541091561317e-03 -1 -2 573\n            -5.1119807176291943e-04</internalNodes>\n          <leafValues>\n            5.2646911144256592e-01 5.7853102684020996e-01\n            4.2911028861999512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 574 4.1454841266386211e-04 -1 -2 575\n            -5.5028748465701938e-04</internalNodes>\n          <leafValues>\n            3.4554108977317810e-01 6.0269188880920410e-01\n            4.1438931226730347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 576 -1.0347720235586166e-03 -1 -2 577\n            -3.3966631162911654e-03</internalNodes>\n          <leafValues>\n            6.0952937602996826e-01 6.1082822084426880e-01\n            4.7077208757400513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 578 3.1795909162610769e-03 -1 -2 579\n            -1.6528950072824955e-04</internalNodes>\n          <leafValues>\n            3.2443669438362122e-01 3.8307571411132812e-01\n            5.7343262434005737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 580 8.3725210279226303e-03 -1 -2 581\n            -2.5799809955060482e-03</internalNodes>\n          <leafValues>\n            6.6109192371368408e-01 6.1393070220947266e-01\n            4.6861499547958374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 582 9.0194388758391142e-04 -1 -2 583\n            3.6952210939489305e-04</internalNodes>\n          <leafValues>\n            3.5200220346450806e-01 2.5787541270256042e-01\n            5.4672420024871826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 584 9.9746137857437134e-04 -1 -2 585\n            -3.6688039544969797e-03</internalNodes>\n          <leafValues>\n            4.8201468586921692e-01 5.7101500034332275e-01\n            4.8319110274314880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 586 -8.9501030743122101e-04 -1 -2 587\n            5.1904921419918537e-03</internalNodes>\n          <leafValues>\n            6.1336791515350342e-01 4.9285829067230225e-01\n            2.5813090801239014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 588 4.2274440056644380e-04 -1 -2 589\n            8.5176713764667511e-03</internalNodes>\n          <leafValues>\n            4.4711241126060486e-01 5.1610249280929565e-01\n            3.3165338635444641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 590 -3.6623608320951462e-02 -1 -2 591\n            -4.1103712283074856e-03</internalNodes>\n          <leafValues>\n            9.2606216669082642e-02 8.5221147537231445e-01\n            5.1379078626632690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 592 -6.6017331555485725e-03 -1 -2 593\n            2.5578640401363373e-02</internalNodes>\n          <leafValues>\n            5.4590600728988647e-01 5.2193528413772583e-01\n            1.9271859526634216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 594 1.1447439901530743e-02 -1 -2 595\n            7.2427501436322927e-04</internalNodes>\n          <leafValues>\n            1.9160020351409912e-01 5.2315711975097656e-01\n            3.5353401303291321e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 596 9.7127500921487808e-03 -1 -2 597\n            -1.1337569914758205e-02</internalNodes>\n          <leafValues>\n            6.4641010761260986e-01 7.3830378055572510e-01\n            4.9647438526153564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 598 -8.1453882157802582e-03 -1 -2 599\n            -8.5570756345987320e-03</internalNodes>\n          <leafValues>\n            3.6117058992385864e-01 3.4219071269035339e-01\n            5.9435117244720459e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 600 2.2993308957666159e-03 -1 -2 601\n            3.8430930580943823e-03</internalNodes>\n          <leafValues>\n            4.5501041412353516e-01 4.7168621420860291e-01\n            6.6561907529830933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 602 -9.9116540513932705e-04 -1 -2 603\n            2.5496469810605049e-02</internalNodes>\n          <leafValues>\n            4.5927169919013977e-01 6.5634012222290039e-01\n            1.2588350474834442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 604 -1.5748359262943268e-02 -1 -2 605\n            -1.8046120181679726e-02</internalNodes>\n          <leafValues>\n            5.2395021915435791e-01 8.0158519744873047e-01\n            5.0079578161239624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 606 1.0323390364646912e-02 -1 -2 607\n            1.6452240524813533e-03</internalNodes>\n          <leafValues>\n            2.2748200595378876e-01 4.3519461154937744e-01\n            5.8676278591156006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 608 1.5881149098277092e-02 -1 -2 609\n            1.0586519725620747e-02</internalNodes>\n          <leafValues>\n            4.4650518894195557e-01 4.5444580912590027e-01\n            5.7071107625961304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 610 -2.1531689912080765e-02 -1 -2 611\n            5.2480469457805157e-03</internalNodes>\n          <leafValues>\n            6.5276437997817993e-01 3.4447279572486877e-01\n            5.3246361017227173e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>67</maxWeakCount>\n      <stageThreshold>3.2647129058837891e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 612 1.8219340126961470e-03 -1 -2 613\n            8.1313941627740860e-03</internalNodes>\n          <leafValues>\n            3.1087881326675415e-01 3.1332370638847351e-01\n            6.6458672285079956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 614 1.7055979697033763e-03 -1 -2 615\n            -7.4483548814896494e-05</internalNodes>\n          <leafValues>\n            2.6401311159133911e-01 5.6472051143646240e-01\n            3.4853729605674744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 616 3.8342390325851738e-04 -1 -2 617\n            3.1868910882622004e-03</internalNodes>\n          <leafValues>\n            3.1406548619270325e-01 6.4891988039016724e-01\n            3.8877290487289429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 618 1.6044320166110992e-01 -1 -2 619\n            -6.7285560071468353e-03</internalNodes>\n          <leafValues>\n            7.2165298461914062e-01 1.6531379520893097e-01\n            5.1398259401321411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 620 7.2638481469766703e-06 -1 -2 621\n            5.5551197146996856e-04</internalNodes>\n          <leafValues>\n            3.1406199932098389e-01 5.9936988353729248e-01\n            3.3173981308937073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 622 -1.0822320356965065e-02 -1 -2 623\n            -4.5834020711481571e-03</internalNodes>\n          <leafValues>\n            2.6529380679130554e-01 1.8495689332485199e-01\n            5.3139579296112061e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 624 -3.0205070506781340e-03 -1 -2 625\n            7.7864617109298706e-02</internalNodes>\n          <leafValues>\n            4.0400999784469604e-01 6.1581897735595703e-01\n            1.7864869534969330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 626 2.6494380086660385e-02 -1 -2 627\n            3.6912109702825546e-02</internalNodes>\n          <leafValues>\n            4.5110899209976196e-01 4.5282199978828430e-01\n            5.9722828865051270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 628 5.7857790961861610e-03 -1 -2 629\n            9.3849771656095982e-04</internalNodes>\n          <leafValues>\n            2.5338920950889587e-01 3.4104120731353760e-01\n            5.9236437082290649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 630 -1.1003199964761734e-02 -1 -2 631\n            -1.1737640015780926e-03</internalNodes>\n          <leafValues>\n            6.9580441713333130e-01 3.8510841131210327e-01\n            5.4081892967224121e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 632 -3.6596669815480709e-03 -1 -2 633\n            -2.4822750128805637e-03</internalNodes>\n          <leafValues>\n            2.0093089342117310e-01 6.2953931093215942e-01\n            4.3950408697128296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 634 -4.4606071896851063e-03 -1 -2 635\n            -3.5969649907201529e-03</internalNodes>\n          <leafValues>\n            2.4052999913692474e-01 5.4501742124557495e-01\n            3.7823578715324402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 636 -3.6222559865564108e-03 -1 -2 637\n            1.2059339787811041e-03</internalNodes>\n          <leafValues>\n            3.0338969826698303e-01 4.6337789297103882e-01\n            6.3359522819519043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 638 4.3124938383698463e-03 -1 -2 639\n            -4.4961250387132168e-03</internalNodes>\n          <leafValues>\n            6.5988260507583618e-01 6.6216969490051270e-01\n            4.7552469372749329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 640 -1.3860689941793680e-03 -1 -2 641\n            -5.1588460337370634e-04</internalNodes>\n          <leafValues>\n            2.8012010455131531e-01 3.8294890522956848e-01\n            5.6236267089843750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 642 7.0330002927221358e-05 -1 -2 643\n            -2.0976549421902746e-04</internalNodes>\n          <leafValues>\n            4.5363429188728333e-01 5.6081390380859375e-01\n            4.2657798528671265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 644 1.3642259873449802e-03 -1 -2 645\n            1.5483660390600562e-03</internalNodes>\n          <leafValues>\n            2.6370918750762939e-01 4.1707509756088257e-01\n            5.9329879283905029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 646 1.9179609417915344e-01 -1 -2 647\n            -4.4776909053325653e-03</internalNodes>\n          <leafValues>\n            5.2567642927169800e-01 6.6326218843460083e-01\n            4.8925888538360596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 648 -1.2649179995059967e-01 -1 -2 649\n            6.5253327193204314e-05</internalNodes>\n          <leafValues>\n            1.4997789263725281e-01 4.2333200573921204e-01\n            5.7560402154922485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 650 4.1856421157717705e-03 -1 -2 651\n            2.7478230185806751e-04</internalNodes>\n          <leafValues>\n            5.2888268232345581e-01 4.5240178704261780e-01\n            5.6041252613067627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 652 -2.2906810045242310e-03 -1 -2 653\n            1.6744500026106834e-03</internalNodes>\n          <leafValues>\n            5.5782741308212280e-01 3.3230578899383545e-01\n            5.5587881803512573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 654 1.2349759927019477e-03 -1 -2 655\n            -8.7158754467964172e-03</internalNodes>\n          <leafValues>\n            3.6539471149444580e-01 1.9245339930057526e-01\n            5.3136497735977173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 656 4.6613621525466442e-03 -1 -2 657\n            -8.5815992206335068e-03</internalNodes>\n          <leafValues>\n            2.0277309417724609e-01 7.6360601186752319e-01\n            5.1408261060714722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 658 1.4352120459079742e-02 -1 -2 659\n            -7.7948719263076782e-03</internalNodes>\n          <leafValues>\n            5.2529758214950562e-01 2.6329371333122253e-01\n            5.3286892175674438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 660 -3.4155680332332850e-03 -1 -2 661\n            -4.2639090679585934e-03</internalNodes>\n          <leafValues>\n            2.4160879850387573e-01 3.9365449547767639e-01\n            5.4787421226501465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 662 8.7177697569131851e-03 -1 -2 663\n            -3.2232629600912333e-03</internalNodes>\n          <leafValues>\n            4.7881990671157837e-01 3.6316120624542236e-01\n            5.2883160114288330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 664 -4.2188368737697601e-02 -1 -2 665\n            1.9875749945640564e-02</internalNodes>\n          <leafValues>\n            6.9311392307281494e-01 4.5201000571250916e-01\n            6.8550550937652588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 666 -3.1134510412812233e-02 -1 -2 667\n            5.7032387703657150e-03</internalNodes>\n          <leafValues>\n            5.3004240989685059e-01 5.6068921089172363e-01\n            4.2306229472160339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 668 5.2733682096004486e-03 -1 -2 669\n            -3.1231069006025791e-03</internalNodes>\n          <leafValues>\n            3.2472288608551025e-01 1.9856959581375122e-01\n            5.3498727083206177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 670 4.6453849063254893e-04 -1 -2 671\n            3.0355889350175858e-02</internalNodes>\n          <leafValues>\n            4.2075088620185852e-01 5.1534587144851685e-01\n            3.1181010603904724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 672 -4.2992769740521908e-03 -1 -2 673\n            1.9509199773892760e-04</internalNodes>\n          <leafValues>\n            3.2745069265365601e-01 5.9530782699584961e-01\n            4.2255210876464844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 674 -7.7784480527043343e-03 -1 -2 675\n            1.6917599365115166e-02</internalNodes>\n          <leafValues>\n            7.2111797332763672e-01 4.9365919828414917e-01\n            7.0302772521972656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 676 -5.1948569715023041e-02 -1 -2 677\n            -5.4751220159232616e-03</internalNodes>\n          <leafValues>\n            1.4255349338054657e-01 6.0593318939208984e-01\n            4.3939951062202454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 678 1.5210839592327829e-05 -1 -2 679\n            1.0235579684376717e-03</internalNodes>\n          <leafValues>\n            4.4888499379158020e-01 4.2565500736236572e-01\n            5.7954382896423340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 680 -1.0427719826111570e-04 -1 -2 681\n            8.7853781878948212e-03</internalNodes>\n          <leafValues>\n            4.2460399866104126e-01 4.9580091238021851e-01\n            6.7594307661056519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 682 3.4012699034065008e-03 -1 -2 683\n            5.8582378551363945e-04</internalNodes>\n          <leafValues>\n            5.4234808683395386e-01 3.6365428566932678e-01\n            5.4643487930297852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 684 -2.2973360028117895e-03 -1 -2 685\n            -1.4330189675092697e-02</internalNodes>\n          <leafValues>\n            2.5488188862800598e-01 6.5876567363739014e-01\n            4.5328021049499512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 686 9.8565965890884399e-04 -1 -2 687\n            -4.6640761196613312e-02</internalNodes>\n          <leafValues>\n            3.8227710127830505e-01 3.0773219466209412e-01\n            5.2441328763961792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 688 -1.1907300353050232e-01 -1 -2 689\n            1.9333280622959137e-02</internalNodes>\n          <leafValues>\n            1.0338629782199860e-01 5.5547451972961426e-01\n            3.2213169336318970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 690 3.1427849084138870e-02 -1 -2 691\n            2.0082130504306406e-04</internalNodes>\n          <leafValues>\n            4.6823790669441223e-01 5.3730702400207520e-01\n            3.8006669282913208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 692 -6.2584900297224522e-03 -1 -2 693\n            8.2861045375466347e-03</internalNodes>\n          <leafValues>\n            1.7992070317268372e-01 5.0950688123703003e-01\n            7.5446051359176636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 694 2.0529709290713072e-03 -1 -2 695\n            3.2524869311600924e-03</internalNodes>\n          <leafValues>\n            5.6286448240280151e-01 4.8016890883445740e-01\n            5.8021020889282227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 696 -3.1884901225566864e-02 -1 -2 697\n            1.8379340181127191e-03</internalNodes>\n          <leafValues>\n            1.7427450418472290e-01 3.4665969014167786e-01\n            5.1071548461914062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 698 -4.8512680223211646e-04 -1 -2 699\n            -2.5407879147678614e-03</internalNodes>\n          <leafValues>\n            5.3260862827301025e-01 6.3427752256393433e-01\n            4.9926930665969849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 700 -5.1559060811996460e-03 -1 -2 701\n            -4.4968750327825546e-02</internalNodes>\n          <leafValues>\n            3.4334290027618408e-01 1.8681369721889496e-01\n            5.2154648303985596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 702 5.8984281495213509e-03 -1 -2 703\n            3.2763120252639055e-03</internalNodes>\n          <leafValues>\n            6.2293052673339844e-01 4.9357721209526062e-01\n            7.2179448604583740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 704 -1.0161520185647532e-04 -1 -2 705\n            -1.6290300118271261e-04</internalNodes>\n          <leafValues>\n            5.0079762935638428e-01 6.0241490602493286e-01\n            2.3295080661773682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 706 9.0541364625096321e-03 -1 -2 707\n            3.5398490726947784e-02</internalNodes>\n          <leafValues>\n            4.5104169845581055e-01 5.1419967412948608e-01\n            2.8602918982505798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 708 5.6469351984560490e-03 -1 -2 709\n            -2.4807190056890249e-03</internalNodes>\n          <leafValues>\n            4.7049251198768616e-01 4.1798511147499084e-01\n            6.7266470193862915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 710 -4.1088787838816643e-03 -1 -2 711\n            -2.0714469719678164e-03</internalNodes>\n          <leafValues>\n            5.8098018169403076e-01 6.0747838020324707e-01\n            4.5240598917007446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 712 -2.8939060866832733e-03 -1 -2 713\n            1.3467279495671391e-03</internalNodes>\n          <leafValues>\n            3.3835199475288391e-01 5.6969100236892700e-01\n            3.9708450436592102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 714 -9.0779133141040802e-02 -1 -2 715\n            -8.3171762526035309e-02</internalNodes>\n          <leafValues>\n            1.5027019381523132e-01 7.5736707448959351e-01\n            4.9364370107650757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 716 -1.4107000315561891e-03 -1 -2 717\n            5.5668760091066360e-02</internalNodes>\n          <leafValues>\n            3.3909329771995544e-01 5.0250971317291260e-01\n            7.4220830202102661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 718 5.7701539248228073e-02 -1 -2 719\n            -4.2503291368484497e-01</internalNodes>\n          <leafValues>\n            5.1973718404769897e-01 9.7346916794776917e-02\n            5.1857399940490723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 720 -4.4380719191394746e-04 -1 -2 721\n            1.7924769781529903e-04</internalNodes>\n          <leafValues>\n            3.6493501067161560e-01 5.6192791461944580e-01\n            3.7602970004081726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 722 5.0382469780743122e-03 -1 -2 723\n            1.5191170386970043e-02</internalNodes>\n          <leafValues>\n            6.3284450769424438e-01 4.9360820651054382e-01\n            7.4265247583389282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 724 -1.2300389818847179e-02 -1 -2 725\n            1.5168030513450503e-03</internalNodes>\n          <leafValues>\n            1.3893499970436096e-01 5.0919622182846069e-01\n            3.4826481342315674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 726 9.5754547510296106e-04 -1 -2 727\n            -1.8962200731039047e-02</internalNodes>\n          <leafValues>\n            6.0363167524337769e-01 2.3191730678081512e-01\n            5.1166528463363647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 728 -2.2272260859608650e-02 -1 -2 729\n            -2.5145230814814568e-02</internalNodes>\n          <leafValues>\n            6.5550220012664795e-01 1.3260710239410400e-01\n            4.6740341186523438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 730 1.9533900544047356e-02 -1 -2 731\n            -1.1231349781155586e-03</internalNodes>\n          <leafValues>\n            5.1820272207260132e-01 6.3182431459426880e-01\n            4.8255190253257751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 732 -1.4861139934509993e-03 -1 -2 733\n            3.5002888762392104e-04</internalNodes>\n          <leafValues>\n            2.9186710715293884e-01 5.6213712692260742e-01\n            4.2492130398750305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 734 -1.1231349781155586e-03 -1 -2 735\n            1.0409739799797535e-02</internalNodes>\n          <leafValues>\n            4.8137450218200684e-01 5.1840060949325562e-01\n            2.0512230694293976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 736 -8.7832562625408173e-02 -1 -2 737\n            1.6584879485890269e-03</internalNodes>\n          <leafValues>\n            1.1799219995737076e-01 4.9878111481666565e-01\n            6.9737559556961060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 738 -2.3008750285953283e-03 -1 -2 739\n            3.3026169985532761e-02</internalNodes>\n          <leafValues>\n            5.3398311138153076e-01 5.0332891941070557e-01\n            6.8519067764282227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 740 -1.3585069682449102e-03 -1 -2 741\n            7.8067491995170712e-04</internalNodes>\n          <leafValues>\n            3.0028221011161804e-01 4.5930838584899902e-01\n            6.4400452375411987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 742 -1.8025759607553482e-02 -1 -2 743\n            1.2354910140857100e-03</internalNodes>\n          <leafValues>\n            5.3112912178039551e-01 4.7291061282157898e-01\n            5.7214611768722534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 744 -9.2583027435466647e-04 -1 -2 745\n            8.0123997759073973e-04</internalNodes>\n          <leafValues>\n            3.6623328924179077e-01 5.3619897365570068e-01\n            3.0086329579353333e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>63</maxWeakCount>\n      <stageThreshold>3.0672130584716797e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 746 2.4914839304983616e-03 -1 -2 747\n            -5.0488598644733429e-02</internalNodes>\n          <leafValues>\n            3.4223890304565430e-01 7.7034580707550049e-01\n            4.5163908600807190e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 748 -7.7838351717218757e-04 -1 -2 749\n            2.3572890495415777e-04</internalNodes>\n          <leafValues>\n            3.2563421130180359e-01 3.4065559506416321e-01\n            5.8970272541046143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 750 4.5575071126222610e-03 -1 -2 751\n            8.1241987645626068e-03</internalNodes>\n          <leafValues>\n            4.3065789341926575e-01 7.1495872735977173e-01\n            4.3456849455833435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 752 -4.4612158671952784e-04 -1 -2 753\n            -2.8972938889637589e-04</internalNodes>\n          <leafValues>\n            3.2959741353988647e-01 5.8456200361251831e-01\n            3.5266879200935364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 754 7.1604831646254752e-06 -1 -2 755\n            -3.8497708737850189e-04</internalNodes>\n          <leafValues>\n            4.0819549560546875e-01 4.2031130194664001e-01\n            6.6341269016265869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 756 1.9489860278554261e-04 -1 -2 757\n            -1.7083849757909775e-02</internalNodes>\n          <leafValues>\n            3.9424669742584229e-01 2.2940720617771149e-01\n            5.2389609813690186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 758 8.3513697609305382e-04 -1 -2 759\n            7.5499608647078276e-04</internalNodes>\n          <leafValues>\n            3.0260318517684937e-01 6.0321962833404541e-01\n            3.4124588966369629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 760 8.0216713249683380e-03 -1 -2 761\n            -3.8930509239435196e-02</internalNodes>\n          <leafValues>\n            7.3062407970428467e-01 3.5993251204490662e-01\n            5.2343809604644775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 762 -7.0348767621908337e-05 -1 -2 763\n            -8.5350573062896729e-03</internalNodes>\n          <leafValues>\n            3.4937581419944763e-01 2.7461090683937073e-01\n            5.6265860795974731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 764 1.0854450054466724e-02 -1 -2 765\n            4.5329501153901219e-04</internalNodes>\n          <leafValues>\n            5.2822262048721313e-01 4.5220491290092468e-01\n            6.0543018579483032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 766 1.8117150466423482e-04 -1 -2 767\n            4.6641560038551688e-04</internalNodes>\n          <leafValues>\n            3.3068621158599854e-01 1.4550000429153442e-01\n            5.3849279880523682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 768 -8.4854792803525925e-03 -1 -2 769\n            -1.8934309482574463e-02</internalNodes>\n          <leafValues>\n            4.8141559958457947e-01 3.5637411475181580e-01\n            5.4051452875137329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 770 4.9814549274742603e-03 -1 -2 771\n            3.4286780282855034e-03</internalNodes>\n          <leafValues>\n            6.9577431678771973e-01 5.0508928298950195e-01\n            2.3169949650764465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 772 4.4203791185282171e-04 -1 -2 773\n            2.3822550429031253e-04</internalNodes>\n          <leafValues>\n            6.0185819864273071e-01 4.7550821304321289e-01\n            5.5852377414703369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 774 -6.4261639490723610e-03 -1 -2 775\n            9.9637769162654877e-03</internalNodes>\n          <leafValues>\n            2.2824659943580627e-01 4.0405881404876709e-01\n            5.6501698493957520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 776 1.3654050417244434e-02 -1 -2 777\n            -9.9892877042293549e-03</internalNodes>\n          <leafValues>\n            5.2677392959594727e-01 6.7940497398376465e-01\n            4.7970339655876160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 778 3.6558631807565689e-02 -1 -2 779\n            4.8999379941960797e-05</internalNodes>\n          <leafValues>\n            8.8425733149051666e-02 4.0207880735397339e-01\n            5.4573321342468262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 780 1.3654050417244434e-02 -1 -2 781\n            1.8802779959514737e-03</internalNodes>\n          <leafValues>\n            5.2676129341125488e-01 4.8060521483421326e-01\n            6.3943648338317871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 782 -1.3654050417244434e-02 -1 -2 783\n            1.2778700329363346e-03</internalNodes>\n          <leafValues>\n            1.7248100042343140e-01 4.4798240065574646e-01\n            6.3100087642669678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 784 9.8843395244330168e-04 -1 -2 785\n            1.4511500012304168e-05</internalNodes>\n          <leafValues>\n            5.9481692314147949e-01 4.8541748523712158e-01\n            5.3093612194061279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 786 -2.2775429533794522e-04 -1 -2 787\n            -1.4753740280866623e-02</internalNodes>\n          <leafValues>\n            3.1836318969726562e-01 3.0849760770797729e-01\n            5.3520262241363525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 788 -3.4148250706493855e-03 -1 -2 789\n            7.5806681998074055e-03</internalNodes>\n          <leafValues>\n            6.1153268814086914e-01 4.9516460299491882e-01\n            7.0613312721252441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 790 -5.7734688743948936e-03 -1 -2 791\n            7.4033669079653919e-05</internalNodes>\n          <leafValues>\n            3.7542209029197693e-01 4.1155171394348145e-01\n            5.8894449472427368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 792 -8.2278084009885788e-03 -1 -2 793\n            5.3380909375846386e-03</internalNodes>\n          <leafValues>\n            9.5610566437244415e-02 5.3005087375640869e-01\n            3.9618980884552002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 794 -2.7049109339714050e-03 -1 -2 795\n            7.7341338619589806e-03</internalNodes>\n          <leafValues>\n            6.4818692207336426e-01 5.1104402542114258e-01\n            3.1215190887451172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 796 1.0886609554290771e-02 -1 -2 797\n            1.1038660071790218e-02</internalNodes>\n          <leafValues>\n            4.8014289140701294e-01 5.4297101497650146e-01\n            4.1623631119728088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 798 -1.0054199956357479e-02 -1 -2 799\n            7.7072880230844021e-03</internalNodes>\n          <leafValues>\n            7.3293352127075195e-01 5.3568720817565918e-01\n            3.4555470943450928e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 800 -5.8278098003938794e-04 -1 -2 801\n            -2.5739220436662436e-03</internalNodes>\n          <leafValues>\n            3.6550220847129822e-01 3.7767601013183594e-01\n            5.3917747735977173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 802 -7.0167761296033859e-03 -1 -2 803\n            -1.7727289814502001e-03</internalNodes>\n          <leafValues>\n            4.0393048524856567e-01 6.9504439830780029e-01\n            4.9811169505119324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 804 -1.6318289563059807e-02 -1 -2 805\n            -1.1663000099360943e-02</internalNodes>\n          <leafValues>\n            5.2967327833175659e-01 5.8426398038864136e-01\n            4.7895029187202454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 806 2.5881489273160696e-03 -1 -2 807\n            -3.7328999023884535e-03</internalNodes>\n          <leafValues>\n            6.0921788215637207e-01 6.7217427492141724e-01\n            4.0668940544128418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 808 -1.4355930034071207e-03 -1 -2 809\n            1.8340899841859937e-03</internalNodes>\n          <leafValues>\n            3.5850879549980164e-01 5.3711581230163574e-01\n            4.0335071086883545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 810 1.2280289828777313e-01 -1 -2 811\n            5.0228700041770935e-02</internalNodes>\n          <leafValues>\n            1.5475720167160034e-01 5.4338437318801880e-01\n            8.4292672574520111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 812 -2.1437000483274460e-02 -1 -2 813\n            -3.1009620055556297e-02</internalNodes>\n          <leafValues>\n            4.8600539565086365e-01 1.8330100178718567e-01\n            5.2075541019439697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 814 -1.2973720207810402e-02 -1 -2 815\n            1.5818020328879356e-03</internalNodes>\n          <leafValues>\n            7.0482409000396729e-01 4.1705870628356934e-01\n            5.8651638031005859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 816 -9.7806248813867569e-03 -1 -2 817\n            1.1735740117728710e-03</internalNodes>\n          <leafValues>\n            5.3079181909561157e-01 5.5224531888961792e-01\n            3.5071650147438049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 818 1.4651629608124495e-03 -1 -2 819\n            2.3532148916274309e-03</internalNodes>\n          <leafValues>\n            3.0426511168479919e-01 5.3393232822418213e-01\n            2.8062361478805542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 820 -6.1809681355953217e-03 -1 -2 821\n            6.5688649192452431e-04</internalNodes>\n          <leafValues>\n            6.4101332426071167e-01 5.6208711862564087e-01\n            4.3903189897537231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 822 2.6228010654449463e-02 -1 -2 823\n            -1.7958110198378563e-02</internalNodes>\n          <leafValues>\n            6.4455568790435791e-01 2.0027139782905579e-01\n            4.6246650815010071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 824 -7.6468721963465214e-03 -1 -2 825\n            -2.7482809964567423e-03</internalNodes>\n          <leafValues>\n            5.2632009983062744e-01 5.8739811182022095e-01\n            4.8366001248359680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 826 1.3851850293576717e-02 -1 -2 827\n            2.6369190309196711e-03</internalNodes>\n          <leafValues>\n            1.5661309659481049e-01 4.2701789736747742e-01\n            5.8066600561141968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 828 -3.1513599678874016e-03 -1 -2 829\n            -1.4788460248382762e-05</internalNodes>\n          <leafValues>\n            6.2158662080764771e-01 5.5766427516937256e-01\n            4.1220021247863770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 830 -7.3676988482475281e-02 -1 -2 831\n            -3.0912780202925205e-03</internalNodes>\n          <leafValues>\n            1.5367099642753601e-01 6.3442689180374146e-01\n            4.5074120163917542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 832 7.9240966588258743e-03 -1 -2 833\n            8.5778040811419487e-03</internalNodes>\n          <leafValues>\n            5.4579752683639526e-01 5.4016572237014771e-01\n            3.8907998800277710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 834 5.5403169244527817e-03 -1 -2 835\n            -1.1886510037584230e-04</internalNodes>\n          <leafValues>\n            3.5556110739707947e-01 5.8367502689361572e-01\n            4.2743161320686340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 836 -1.8408369272947311e-02 -1 -2 837\n            -2.3490579333156347e-03</internalNodes>\n          <leafValues>\n            5.8604401350021362e-01 4.4989579916000366e-01\n            5.4981988668441772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 838 -7.6157399453222752e-03 -1 -2 839\n            -3.3190969843417406e-03</internalNodes>\n          <leafValues>\n            4.1009929776191711e-01 6.7013788223266602e-01\n            4.3530011177062988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 840 -9.4642979092895985e-04 -1 -2 841\n            8.7858550250530243e-03</internalNodes>\n          <leafValues>\n            5.3911769390106201e-01 5.5040502548217773e-01\n            3.9909350872039795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 842 1.6395459533669055e-04 -1 -2 843\n            -2.3508940357714891e-03</internalNodes>\n          <leafValues>\n            3.5929331183433533e-01 4.0341728925704956e-01\n            5.8060771226882935e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 844 7.5449963333085179e-05 -1 -2 845\n            2.7018489316105843e-02</internalNodes>\n          <leafValues>\n            5.4123848676681519e-01 4.9449229240417480e-01\n            5.5894362926483154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 846 8.4561208495870233e-04 -1 -2 847\n            -1.1687109945341945e-03</internalNodes>\n          <leafValues>\n            5.8092182874679565e-01 4.7469571232795715e-01\n            2.8458958864212036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 848 2.2897500544786453e-02 -1 -2 849\n            7.0879262685775757e-01</internalNodes>\n          <leafValues>\n            2.4144110083580017e-01 5.1957648992538452e-01\n            1.0300920158624649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 850 3.7483830004930496e-02 -1 -2 851\n            1.2827500468119979e-03</internalNodes>\n          <leafValues>\n            1.8146389722824097e-01 4.2460718750953674e-01\n            5.7079732418060303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 852 -5.1718312315642834e-03 -1 -2 853\n            2.7545939665287733e-03</internalNodes>\n          <leafValues>\n            6.1433231830596924e-01 5.2056711912155151e-01\n            4.2204418778419495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 854 -3.6072919610887766e-03 -1 -2 855\n            -2.5258748792111874e-04</internalNodes>\n          <leafValues>\n            3.1825920939445496e-01 5.7104682922363281e-01\n            4.2260938882827759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 856 -7.0514748804271221e-03 -1 -2 857\n            -5.4323761723935604e-03</internalNodes>\n          <leafValues>\n            5.1628297567367554e-01 2.6662889122962952e-01\n            5.2146798372268677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 858 -1.4652940080850385e-05 -1 -2 859\n            -1.8556920113041997e-03</internalNodes>\n          <leafValues>\n            3.9817610383033752e-01 3.3227631449699402e-01\n            5.7058340311050415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 860 4.7609540633857250e-03 -1 -2 861\n            1.5676260227337480e-03</internalNodes>\n          <leafValues>\n            6.6365581750869751e-01 5.5055677890777588e-01\n            4.4206619262695312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 862 5.4239919409155846e-03 -1 -2 863\n            -6.4692399464547634e-03</internalNodes>\n          <leafValues>\n            5.9599381685256958e-01 5.3695940971374512e-01\n            3.7443399429321289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 864 -7.8038539504632354e-04 -1 -2 865\n            4.5086450874805450e-02</internalNodes>\n          <leafValues>\n            4.1035950183868408e-01 5.1775068044662476e-01\n            1.8781000375747681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 866 -5.1405387930572033e-03 -1 -2 867\n            -2.1236129105091095e-02</internalNodes>\n          <leafValues>\n            2.3528920114040375e-01 1.7087510228157043e-01\n            5.4249739646911621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 868 -2.3763340432196856e-03 -1 -2 869\n            5.4122589528560638e-02</internalNodes>\n          <leafValues>\n            5.8365309238433838e-01 5.1174330711364746e-01\n            1.8659310042858124e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 870 -5.3492980077862740e-04 -1 -2 871\n            -5.8454048121348023e-04</internalNodes>\n          <leafValues>\n            5.1086932420730591e-01 4.7754910588264465e-01\n            2.4398539960384369e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>71</maxWeakCount>\n      <stageThreshold>3.4677078247070312e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 872 3.0031939968466759e-03 -1 -2 873\n            6.9161207647994161e-04</internalNodes>\n          <leafValues>\n            3.3496499061584473e-01 4.5183679461479187e-01\n            7.2893542051315308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 874 1.1212790384888649e-02 -1 -2 875\n            -7.6108198845759034e-04</internalNodes>\n          <leafValues>\n            2.9508009552955627e-01 5.6690549850463867e-01\n            2.8308510780334473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 876 1.1984579759882763e-04 -1 -2 877\n            -1.9725349557120353e-04</internalNodes>\n          <leafValues>\n            4.0905779600143433e-01 6.9514942169189453e-01\n            4.6378681063652039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 878 -5.5180420167744160e-03 -1 -2 879\n            1.2148249661549926e-03</internalNodes>\n          <leafValues>\n            3.1676751375198364e-01 3.3167061209678650e-01\n            5.3963977098464966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 880 -4.2497441172599792e-03 -1 -2 881\n            -9.4915721565485001e-03</internalNodes>\n          <leafValues>\n            2.6005738973617554e-01 7.4842947721481323e-01\n            5.0731921195983887e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 882 6.5378600265830755e-04 -1 -2 883\n            -4.9741100519895554e-04</internalNodes>\n          <leafValues>\n            3.9520108699798584e-01 5.8802747726440430e-01\n            3.5521200299263000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 884 -4.3079249560832977e-02 -1 -2 885\n            -5.1999092102050781e-04</internalNodes>\n          <leafValues>\n            2.4348780512809753e-01 3.1955629587173462e-01\n            5.5854547023773193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 886 -4.5451628975570202e-03 -1 -2 887\n            -7.9610403627157211e-03</internalNodes>\n          <leafValues>\n            4.8452898859977722e-01 3.8011810183525085e-01\n            5.3585118055343628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 888 -3.1919340835884213e-04 -1 -2 889\n            -1.9223889335989952e-02</internalNodes>\n          <leafValues>\n            4.3563291430473328e-01 2.6130661368370056e-01\n            6.1554962396621704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 890 -1.3076990144327283e-03 -1 -2 891\n            1.9825039431452751e-02</internalNodes>\n          <leafValues>\n            5.9420621395111084e-01 4.9454280734062195e-01\n            7.3848551511764526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 892 -2.2013280540704727e-03 -1 -2 893\n            -7.8596705570816994e-03</internalNodes>\n          <leafValues>\n            2.2144819796085358e-01 3.6009770631790161e-01\n            5.2985501289367676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 894 1.4142199652269483e-03 -1 -2 895\n            -1.1232759803533554e-02</internalNodes>\n          <leafValues>\n            5.7765662670135498e-01 6.9344568252563477e-01\n            4.8272070288658142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 896 2.9746301006525755e-03 -1 -2 897\n            5.3283828310668468e-04</internalNodes>\n          <leafValues>\n            3.2166770100593567e-01 3.9625000953674316e-01\n            5.6803637742996216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 898 1.0105259716510773e-02 -1 -2 899\n            -1.1653699912130833e-02</internalNodes>\n          <leafValues>\n            7.5674182176589966e-01 6.5235567092895508e-01\n            5.0270539522171021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 900 -7.0609981194138527e-03 -1 -2 901\n            2.2343141026794910e-03</internalNodes>\n          <leafValues>\n            2.5387701392173767e-01 4.3872770667076111e-01\n            6.1776322126388550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 902 -2.9802279546856880e-02 -1 -2 903\n            1.1611840454861522e-03</internalNodes>\n          <leafValues>\n            5.2011400461196899e-01 4.6479099988937378e-01\n            6.1842548847198486e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 904 9.4824447296559811e-04 -1 -2 905\n            4.1284630424343050e-04</internalNodes>\n          <leafValues>\n            3.0409941077232361e-01 4.5188081264495850e-01\n            6.2457829713821411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 906 -3.1203540042042732e-02 -1 -2 907\n            2.7652881108224392e-03</internalNodes>\n          <leafValues>\n            2.7889358997344971e-01 4.6985000371932983e-01\n            6.5024542808532715e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 908 2.5644779205322266e-02 -1 -2 909\n            -7.5331530533730984e-03</internalNodes>\n          <leafValues>\n            1.8051710724830627e-01 3.2080689072608948e-01\n            5.5220228433609009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 910 3.2047149725258350e-03 -1 -2 911\n            -2.4282479716930538e-04</internalNodes>\n          <leafValues>\n            6.4369338750839233e-01 5.6767052412033081e-01\n            4.5091038942337036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 912 -6.1979342717677355e-04 -1 -2 913\n            -8.0101029016077518e-04</internalNodes>\n          <leafValues>\n            3.1221461296081543e-01 2.9651939868927002e-01\n            5.2304947376251221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 914 -9.1816839994862676e-04 -1 -2 915\n            1.2239529751241207e-03</internalNodes>\n          <leafValues>\n            5.4647117853164673e-01 4.6185028553009033e-01\n            5.6795489788055420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 916 -6.8743730662390590e-04 -1 -2 917\n            -1.8252469599246979e-03</internalNodes>\n          <leafValues>\n            5.4308801889419556e-01 5.4336231946945190e-01\n            3.3852210640907288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 918 -7.4570789001882076e-03 -1 -2 919\n            5.3775748237967491e-03</internalNodes>\n          <leafValues>\n            5.2655947208404541e-01 4.8572158813476562e-01\n            6.8151241540908813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 920 3.7602309603244066e-03 -1 -2 921\n            8.7752222316339612e-04</internalNodes>\n          <leafValues>\n            2.8321608901023865e-01 3.9668309688568115e-01\n            5.5124807357788086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 922 5.5084479972720146e-03 -1 -2 923\n            -7.5949047459289432e-04</internalNodes>\n          <leafValues>\n            6.7846202850341797e-01 3.9065030217170715e-01\n            5.4572027921676636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 924 1.6352660022675991e-03 -1 -2 925\n            -1.2750849418807775e-04</internalNodes>\n          <leafValues>\n            3.6402040719985962e-01 5.8297240734100342e-01\n            4.1949799656867981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 926 2.2067610174417496e-02 -1 -2 927\n            -1.9203789532184601e-02</internalNodes>\n          <leafValues>\n            4.6067029237747192e-01 3.2614830136299133e-01\n            5.2360808849334717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 928 -1.2998109683394432e-02 -1 -2 929\n            -3.1332690268754959e-03</internalNodes>\n          <leafValues>\n            7.0221120119094849e-01 2.8704708814620972e-01\n            5.0764769315719604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 930 -5.2937557920813560e-03 -1 -2 931\n            2.1857069805264473e-03</internalNodes>\n          <leafValues>\n            4.7095209360122681e-01 4.7082918882369995e-01\n            6.1698418855667114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 932 -4.5750709250569344e-03 -1 -2 933\n            -4.5152138918638229e-02</internalNodes>\n          <leafValues>\n            3.1142529845237732e-01 1.8514350056648254e-01\n            5.5048149824142456e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 934 -2.7783559635281563e-03 -1 -2 935\n            -2.5752480141818523e-03</internalNodes>\n          <leafValues>\n            4.9373480677604675e-01 6.1529481410980225e-01\n            4.7354999184608459e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 936 1.1614130344241858e-03 -1 -2 937\n            2.3350189439952374e-03</internalNodes>\n          <leafValues>\n            6.5105718374252319e-01 4.0883418917655945e-01\n            5.6841522455215454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 938 3.8499289657920599e-03 -1 -2 939\n            2.4529630318284035e-03</internalNodes>\n          <leafValues>\n            3.0258288979530334e-01 5.2325028181076050e-01\n            2.0176209509372711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 940 3.6731390282511711e-03 -1 -2 941\n            2.1937100682407618e-03</internalNodes>\n          <leafValues>\n            6.4284259080886841e-01 4.3288651108741760e-01\n            6.4205098152160645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 942 -6.4666871912777424e-03 -1 -2 943\n            -5.7186251506209373e-03</internalNodes>\n          <leafValues>\n            5.2540659904479980e-01 2.4909840524196625e-01\n            5.2876192331314087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 944 9.9941878579556942e-04 -1 -2 945\n            -7.8276498243212700e-04</internalNodes>\n          <leafValues>\n            3.3297958970069885e-01 3.5983449220657349e-01\n            5.4983407258987427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 946 4.3231188319623470e-03 -1 -2 947\n            4.0838290005922318e-03</internalNodes>\n          <leafValues>\n            4.8187050223350525e-01 5.2663302421569824e-01\n            3.1057891249656677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 948 3.0515898833982646e-04 -1 -2 949\n            1.2640280183404684e-03</internalNodes>\n          <leafValues>\n            3.9952918887138367e-01 3.2284379005432129e-01\n            5.8192151784896851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 950 -1.0152660310268402e-02 -1 -2 951\n            -2.6863690000027418e-03</internalNodes>\n          <leafValues>\n            8.0260711908340454e-01 3.8756170868873596e-01\n            5.4665708541870117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 952 -9.0515613555908203e-03 -1 -2 953\n            -6.3204211182892323e-03</internalNodes>\n          <leafValues>\n            4.3720579147338867e-01 1.1265510320663452e-01\n            6.3954162597656250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 954 2.6117300149053335e-03 -1 -2 955\n            1.4339019544422626e-02</internalNodes>\n          <leafValues>\n            5.4239892959594727e-01 4.9792730808258057e-01\n            6.0422360897064209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 956 2.8452780097723007e-03 -1 -2 957\n            1.4783289771003183e-05</internalNodes>\n          <leafValues>\n            3.4910920262336731e-01 4.1950678825378418e-01\n            5.7759660482406616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 958 8.1814555451273918e-03 -1 -2 959\n            6.6321990452706814e-03</internalNodes>\n          <leafValues>\n            4.8859870433807373e-01 5.4444682598114014e-01\n            4.4209951162338257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 960 -2.2483461070805788e-03 -1 -2 961\n            1.2374560348689556e-02</internalNodes>\n          <leafValues>\n            6.6997921466827393e-01 4.4786059856414795e-01\n            6.5648937225341797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 962 -6.6516688093543053e-03 -1 -2 963\n            -8.5750613361597061e-03</internalNodes>\n          <leafValues>\n            5.5118787288665771e-01 4.0174451470375061e-01\n            5.4055362939834595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 964 6.5078441984951496e-03 -1 -2 965\n            2.8675209730863571e-02</internalNodes>\n          <leafValues>\n            2.2943930327892303e-01 5.1779001951217651e-01\n            3.5677561163902283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 966 7.0673860609531403e-03 -1 -2 967\n            1.2367829913273454e-03</internalNodes>\n          <leafValues>\n            5.5646997690200806e-01 3.6276981234550476e-01\n            5.5724138021469116e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 968 7.4818679131567478e-03 -1 -2 969\n            4.7109839506447315e-03</internalNodes>\n          <leafValues>\n            6.7849111557006836e-01 4.1212528944015503e-01\n            6.0722357034683228e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 970 -6.9405790418386459e-03 -1 -2 971\n            3.3302098512649536e-02</internalNodes>\n          <leafValues>\n            5.4597669839859009e-01 5.2767068147659302e-01\n            2.3749159276485443e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 972 3.6104630678892136e-02 -1 -2 973\n            1.9674649462103844e-02</internalNodes>\n          <leafValues>\n            7.2492793202400208e-02 4.6263459324836731e-01\n            8.2089632749557495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 974 3.4766150638461113e-03 -1 -2 975\n            1.3987369602546096e-03</internalNodes>\n          <leafValues>\n            5.2087318897247314e-01 5.4844141006469727e-01\n            4.2300349473953247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 976 4.0974249131977558e-03 -1 -2 977\n            2.6973790954798460e-03</internalNodes>\n          <leafValues>\n            2.7805531024932861e-01 5.4038310050964355e-01\n            3.7909889221191406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 978 -5.6591699831187725e-03 -1 -2 979\n            3.9460969856008887e-04</internalNodes>\n          <leafValues>\n            4.7983360290527344e-01 3.7669500708580017e-01\n            5.4292291402816772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 980 2.1750570740550756e-03 -1 -2 981\n            1.4614439569413662e-03</internalNodes>\n          <leafValues>\n            6.2071627378463745e-01 3.3579450845718384e-01\n            5.1426321268081665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 982 -5.3006567759439349e-04 -1 -2 983\n            1.4869309961795807e-01</internalNodes>\n          <leafValues>\n            5.3446400165557861e-01 5.1596081256866455e-01\n            2.5618231296539307e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 984 -5.8816498494707048e-05 -1 -2 985\n            -1.6275369562208652e-03</internalNodes>\n          <leafValues>\n            5.1230919361114502e-01 6.0176461935043335e-01\n            3.1093719601631165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 986 -1.2881809845566750e-02 -1 -2 987\n            9.4982917653396726e-04</internalNodes>\n          <leafValues>\n            2.7122870087623596e-01 5.4424422979354858e-01\n            4.0288880467414856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 988 -1.2315999716520309e-02 -1 -2 989\n            9.0286601334810257e-03</internalNodes>\n          <leafValues>\n            4.7360658645629883e-01 7.4514347314834595e-01\n            3.4879919886589050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 990 -8.6876116693019867e-02 -1 -2 991\n            -1.5107560102478601e-05</internalNodes>\n          <leafValues>\n            2.2903330624103546e-01 5.5178898572921753e-01\n            4.3931490182876587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 992 -1.7457660287618637e-02 -1 -2 993\n            -2.5219470262527466e-03</internalNodes>\n          <leafValues>\n            9.0167902410030365e-02 6.2335401773452759e-01\n            4.7894591093063354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 994 1.0656520025804639e-03 -1 -2 995\n            -4.2540300637483597e-03</internalNodes>\n          <leafValues>\n            5.4896962642669678e-01 5.5798089504241943e-01\n            4.3758779764175415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 996 -9.0349102392792702e-03 -1 -2 997\n            -1.5230999561026692e-03</internalNodes>\n          <leafValues>\n            3.5791561007499695e-01 5.6136602163314819e-01\n            3.9390438795089722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 998 2.8441150207072496e-03 -1 -2 999\n            -3.2824429217725992e-03</internalNodes>\n          <leafValues>\n            3.9015549421310425e-01 4.5286190509796143e-01\n            5.4413431882858276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1000 3.2161718991119415e-05 -1 -2 1001\n            3.0118400900391862e-05</internalNodes>\n          <leafValues>\n            5.8031117916107178e-01 3.3368501067161560e-01\n            5.5048561096191406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1002 -5.6150099262595177e-03 -1 -2 1003\n            -1.7389209941029549e-02</internalNodes>\n          <leafValues>\n            6.1247891187667847e-01 8.7271630764007568e-02\n            5.2045881748199463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1004 -4.4361080654198304e-05 -1 -2 1005\n            1.0354899859521538e-04</internalNodes>\n          <leafValues>\n            3.9353290200233459e-01 5.9188538789749146e-01\n            4.1196140646934509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1006 1.5939630102366209e-03 -1 -2 1007\n            2.5440789759159088e-03</internalNodes>\n          <leafValues>\n            4.8396238684654236e-01 4.7873649001121521e-01\n            6.3606631755828857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1008 1.5083180187502876e-05 -1 -2 1009\n            -9.9282202427275479e-05</internalNodes>\n          <leafValues>\n            4.2311170697212219e-01 4.2745891213417053e-01\n            6.0940480232238770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1010 5.5371708003804088e-04 -1 -2 1011\n            1.9186759600415826e-03</internalNodes>\n          <leafValues>\n            4.2719879746437073e-01 4.4971078634262085e-01\n            5.5491220951080322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1012 -5.0764222396537662e-04 -1 -2 1013\n            1.7236480489373207e-03</internalNodes>\n          <leafValues>\n            5.4771959781646729e-01 2.8829228878021240e-01\n            5.6151270866394043e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>75</maxWeakCount>\n      <stageThreshold>3.6726501464843750e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 1014 1.3092169538140297e-02 -1 -2 1015\n            4.1446479735895991e-04</internalNodes>\n          <leafValues>\n            3.3388701081275940e-01 3.0993521213531494e-01\n            6.6774922609329224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1016 2.1835729479789734e-02 -1 -2 1017\n            4.8323940485715866e-02</internalNodes>\n          <leafValues>\n            4.3690490722656250e-01 4.3017241358757019e-01\n            6.1538851261138916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1018 1.6091950237751007e-03 -1 -2 1019\n            1.3469760306179523e-03</internalNodes>\n          <leafValues>\n            3.3873260021209717e-01 6.2487137317657471e-01\n            3.5941308736801147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1020 1.7729059618432075e-04 -1 -2 1021\n            3.6743620876222849e-04</internalNodes>\n          <leafValues>\n            3.8684248924255371e-01 4.4093450903892517e-01\n            5.4764741659164429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1022 -1.2352119665592909e-03 -1 -2 1023\n            1.1705530341714621e-03</internalNodes>\n          <leafValues>\n            3.2601711153984070e-01 4.1113489866256714e-01\n            6.0881638526916504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1024 -2.9695429475395940e-05 -1 -2 1025\n            2.7050738572143018e-04</internalNodes>\n          <leafValues>\n            4.2694228887557983e-01 4.3064668774604797e-01\n            5.8105140924453735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1026 -7.9626210208516568e-05 -1 -2 1027\n            3.3152441028505564e-04</internalNodes>\n          <leafValues>\n            3.6691430211067200e-01 4.6106639504432678e-01\n            6.2905901670455933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1028 -5.2305828779935837e-02 -1 -2 1029\n            2.6880469173192978e-02</internalNodes>\n          <leafValues>\n            5.3286898136138916e-01 5.2132612466812134e-01\n            3.2312199473381042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1030 -2.4203000066336244e-04 -1 -2 1031\n            -1.6424639616161585e-03</internalNodes>\n          <leafValues>\n            3.5685700178146362e-01 3.4406611323356628e-01\n            5.6256049871444702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1032 -2.6830288697965443e-04 -1 -2 1033\n            -2.2649629972875118e-03</internalNodes>\n          <leafValues>\n            4.5611730217933655e-01 5.3213518857955933e-01\n            3.6741548776626587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1034 1.5627209097146988e-02 -1 -2 1035\n            1.6211320459842682e-01</internalNodes>\n          <leafValues>\n            2.0293539762496948e-01 5.5630332231521606e-01\n            2.6188498735427856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1036 -3.7391691002994776e-03 -1 -2 1037\n            -2.0878419745713472e-03</internalNodes>\n          <leafValues>\n            6.0621947050094604e-01 5.9507638216018677e-01\n            4.5451170206069946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1038 2.3334210272878408e-03 -1 -2 1039\n            6.5116386394947767e-05</internalNodes>\n          <leafValues>\n            6.4355242252349854e-01 3.5207340121269226e-01\n            5.1797789335250854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1040 7.4625718407332897e-03 -1 -2 1041\n            -2.2032689303159714e-02</internalNodes>\n          <leafValues>\n            5.3266882896423340e-01 3.4919810295104980e-01\n            5.4292368888854980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1042 -8.3081610500812531e-03 -1 -2 1043\n            -4.3259368976578116e-04</internalNodes>\n          <leafValues>\n            2.0840230584144592e-01 3.9652720093727112e-01\n            5.4254537820816040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1044 -3.2209228724241257e-02 -1 -2 1045\n            -9.0424838708713651e-04</internalNodes>\n          <leafValues>\n            5.3064119815826416e-01 5.4503858089447021e-01\n            4.2566969990730286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1046 2.2727500181645155e-03 -1 -2 1047\n            5.9820008464157581e-03</internalNodes>\n          <leafValues>\n            5.9686112403869629e-01 4.7581401467323303e-01\n            3.1509441137313843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1048 -5.8856618124991655e-04 -1 -2 1049\n            -8.8227191008627415e-04</internalNodes>\n          <leafValues>\n            4.8477488756179810e-01 5.4263162612915039e-01\n            4.3383410573005676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1050 -7.4473457061685622e-05 -1 -2 1051\n            3.9148979703895748e-04</internalNodes>\n          <leafValues>\n            4.2875099182128906e-01 6.3451850414276123e-01\n            4.1018518805503845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1052 -3.6939629353582859e-03 -1 -2 1053\n            -1.1207849718630314e-02</internalNodes>\n          <leafValues>\n            4.8491048812866211e-01 4.1463369131088257e-01\n            5.4712641239166260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1054 -1.0337409563362598e-02 -1 -2 1055\n            3.6883640568703413e-03</internalNodes>\n          <leafValues>\n            2.8771838545799255e-01 5.1019018888473511e-01\n            7.2169512510299683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1056 -3.8984280545264482e-03 -1 -2 1057\n            -5.9986729174852371e-03</internalNodes>\n          <leafValues>\n            5.2761822938919067e-01 6.6184598207473755e-01\n            4.8416310548782349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1058 4.5043681748211384e-03 -1 -2 1059\n            1.7799530178308487e-02</internalNodes>\n          <leafValues>\n            1.8741579353809357e-01 4.6169349551200867e-01\n            7.0889657735824585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1060 -1.8462570384144783e-02 -1 -2 1061\n            1.4931300029275008e-05</internalNodes>\n          <leafValues>\n            3.0019798874855042e-01 4.5618081092834473e-01\n            5.6107878684997559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1062 -8.6021229624748230e-02 -1 -2 1063\n            -6.0818758356617764e-05</internalNodes>\n          <leafValues>\n            2.3417009413242340e-01 5.6722861528396606e-01\n            4.1999641060829163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1064 1.2670679716393352e-03 -1 -2 1065\n            1.3699879636988044e-03</internalNodes>\n          <leafValues>\n            6.2074822187423706e-01 5.3949588537216187e-01\n            3.8238629698753357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1066 3.3162781037390232e-03 -1 -2 1067\n            -1.4532039640471339e-03</internalNodes>\n          <leafValues>\n            7.0616811513900757e-01 3.0655130743980408e-01\n            4.8273730278015137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1068 -7.1492061018943787e-02 -1 -2 1069\n            1.9857978913933039e-03</internalNodes>\n          <leafValues>\n            5.1931220293045044e-01 4.6424350142478943e-01\n            5.8076947927474976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1070 6.2516499310731888e-03 -1 -2 1071\n            2.7005500160157681e-03</internalNodes>\n          <leafValues>\n            2.9498139023780823e-01 4.5858868956565857e-01\n            6.0223537683486938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1072 1.1130389757454395e-02 -1 -2 1073\n            1.5092849731445312e-02</internalNodes>\n          <leafValues>\n            4.3578410148620605e-01 4.5615398883819580e-01\n            6.1190617084503174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1074 -2.7943300083279610e-02 -1 -2 1075\n            4.4036991312168539e-05</internalNodes>\n          <leafValues>\n            6.5371441841125488e-01 3.4747231006622314e-01\n            5.3369677066802979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1076 -1.2232770211994648e-02 -1 -2 1077\n            -6.8591412855312228e-04</internalNodes>\n          <leafValues>\n            3.7316760420799255e-01 5.7172292470932007e-01\n            4.7933790087699890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1078 -3.8992990739643574e-03 -1 -2 1079\n            4.9113907152786851e-04</internalNodes>\n          <leafValues>\n            4.0564361214637756e-01 6.1740481853485107e-01\n            4.4717541337013245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1080 8.2117747515439987e-03 -1 -2 1081\n            -4.5564480125904083e-02</internalNodes>\n          <leafValues>\n            6.1796981096267700e-01 2.2854949533939362e-01\n            5.2495658397674561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1082 -5.3631910122931004e-03 -1 -2 1083\n            -1.2274970300495625e-02</internalNodes>\n          <leafValues>\n            1.7849500477313995e-01 7.2619527578353882e-01\n            4.5503988862037659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1084 5.4185991175472736e-03 -1 -2 1085\n            8.1846961984410882e-04</internalNodes>\n          <leafValues>\n            5.2529907226562500e-01 5.4452222585678101e-01\n            3.2722181081771851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1086 4.1358140297234058e-03 -1 -2 1087\n            3.9578010910190642e-04</internalNodes>\n          <leafValues>\n            7.0138317346572876e-01 4.9659439921379089e-01\n            3.2955980300903320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1088 4.6887691132724285e-03 -1 -2 1089\n            -1.8255440518260002e-02</internalNodes>\n          <leafValues>\n            5.3626418113708496e-01 6.4961087703704834e-01\n            4.7571370005607605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1090 -6.2736468389630318e-03 -1 -2 1091\n            2.4320168886333704e-03</internalNodes>\n          <leafValues>\n            2.3437410593032837e-01 4.6201181411743164e-01\n            6.8984192609786987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1092 -4.9617629498243332e-02 -1 -2 1093\n            1.1701210169121623e-03</internalNodes>\n          <leafValues>\n            2.1007199585437775e-01 4.6215289831161499e-01\n            5.7971358299255371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1094 -4.5237291604280472e-02 -1 -2 1095\n            4.7563421539962292e-03</internalNodes>\n          <leafValues>\n            2.1182620525360107e-01 4.8846149444580078e-01\n            6.8724989891052246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1096 -1.4835969544947147e-02 -1 -2 1097\n            7.7436608262360096e-04</internalNodes>\n          <leafValues>\n            5.2751058340072632e-01 4.1723209619522095e-01\n            5.4911398887634277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1098 1.4835969544947147e-02 -1 -2 1099\n            -8.0892542609944940e-04</internalNodes>\n          <leafValues>\n            2.1248769760131836e-01 5.4952150583267212e-01\n            4.2077958583831787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1100 7.7517668250948191e-04 -1 -2 1101\n            -6.7618978209793568e-03</internalNodes>\n          <leafValues>\n            3.3219420909881592e-01 2.2129580378532410e-01\n            5.2326530218124390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1102 -4.0135860443115234e-02 -1 -2 1103\n            -3.3651469275355339e-03</internalNodes>\n          <leafValues>\n            1.1017960309982300e-01 3.8101008534431458e-01\n            5.6172919273376465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1104 7.4713007779791951e-04 -1 -2 1105\n            -4.2727389372885227e-03</internalNodes>\n          <leafValues>\n            5.7950568199157715e-01 6.3922691345214844e-01\n            4.7114381194114685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1106 3.6202510818839073e-03 -1 -2 1107\n            4.7307618660852313e-04</internalNodes>\n          <leafValues>\n            3.4098839759826660e-01 3.6593028903007507e-01\n            5.3881710767745972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1108 3.3094909042119980e-02 -1 -2 1109\n            -1.1544119566679001e-02</internalNodes>\n          <leafValues>\n            7.1703857183456421e-01 6.3868182897567749e-01\n            4.6813040971755981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1110 -7.4234469793736935e-03 -1 -2 1111\n            -4.2252950370311737e-03</internalNodes>\n          <leafValues>\n            3.2637009024620056e-01 5.7678192853927612e-01\n            4.3464180827140808e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1112 1.8133109435439110e-02 -1 -2 1113\n            7.0903049781918526e-03</internalNodes>\n          <leafValues>\n            4.6978279948234558e-01 4.4373890757560730e-01\n            6.0616689920425415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1114 -1.3272940181195736e-02 -1 -2 1115\n            1.4632199599873275e-04</internalNodes>\n          <leafValues>\n            6.5585112571716309e-01 3.3763539791107178e-01\n            5.0916552543640137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1116 -3.5790191031992435e-03 -1 -2 1117\n            -4.6997101162560284e-04</internalNodes>\n          <leafValues>\n            2.9478839039802551e-01 5.5569821596145630e-01\n            4.6654561161994934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1118 -4.8179440200328827e-02 -1 -2 1119\n            -9.2581362696364522e-04</internalNodes>\n          <leafValues>\n            7.3383557796478271e-01 3.5438719391822815e-01\n            5.2851498126983643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1120 -1.4780730009078979e-02 -1 -2 1121\n            -1.0027450323104858e-01</internalNodes>\n          <leafValues>\n            1.9444419443607330e-01 9.9049292504787445e-02\n            5.1398539543151855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1122 -9.3848101096227765e-04 -1 -2 1123\n            -2.8861360624432564e-03</internalNodes>\n          <leafValues>\n            5.8271098136901855e-01 3.4414279460906982e-01\n            5.1488387584686279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1124 -4.3682761490345001e-02 -1 -2 1125\n            2.6115700602531433e-03</internalNodes>\n          <leafValues>\n            5.2079981565475464e-01 4.8355031013488770e-01\n            6.3222199678421021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1126 4.3682761490345001e-02 -1 -2 1127\n            1.7179530113935471e-03</internalNodes>\n          <leafValues>\n            1.3645380735397339e-01 4.5373201370239258e-01\n            6.0667508840560913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1128 -3.3964909613132477e-02 -1 -2 1129\n            -1.0993590112775564e-03</internalNodes>\n          <leafValues>\n            4.9683749675750732e-01 5.8316808938980103e-01\n            4.6882399916648865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1130 5.4301079362630844e-02 -1 -2 1131\n            1.0993590112775564e-03</internalNodes>\n          <leafValues>\n            7.5682890415191650e-01 4.3301481008529663e-01\n            5.7684689760208130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1132 -1.4954120160837192e-05 -1 -2 1133\n            3.1415868550539017e-02</internalNodes>\n          <leafValues>\n            4.4432818889617920e-01 5.2744728326797485e-01\n            3.0378559231758118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1134 1.0831849649548531e-02 -1 -2 1135\n            8.6545711383223534e-04</internalNodes>\n          <leafValues>\n            3.5817208886146545e-01 5.9375840425491333e-01\n            4.2946299910545349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1136 2.2743160370737314e-03 -1 -2 1137\n            3.9340821094810963e-03</internalNodes>\n          <leafValues>\n            5.9545767307281494e-01 4.7922229766845703e-01\n            5.8561331033706665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1138 8.1451907753944397e-03 -1 -2 1139\n            -5.2763288840651512e-03</internalNodes>\n          <leafValues>\n            3.5734778642654419e-01 4.0260228514671326e-01\n            5.7647430896759033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1140 -8.3787851035594940e-03 -1 -2 1141\n            1.5621910570189357e-03</internalNodes>\n          <leafValues>\n            4.9813330173492432e-01 4.7365880012512207e-01\n            5.5836081504821777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1142 3.2318739686161280e-03 -1 -2 1143\n            6.6804019734263420e-03</internalNodes>\n          <leafValues>\n            6.1674368381500244e-01 4.1314241290092468e-01\n            6.2806951999664307e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1144 -3.3396480139344931e-03 -1 -2 1145\n            -2.0933480560779572e-01</internalNodes>\n          <leafValues>\n            3.4463581442832947e-01 1.0386580228805542e-01\n            5.2044892311096191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1146 6.3805822283029556e-03 -1 -2 1147\n            -6.0137799009680748e-03</internalNodes>\n          <leafValues>\n            2.1674020588397980e-01 6.7383992671966553e-01\n            4.8966509103775024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1148 -8.1756077706813812e-03 -1 -2 1149\n            6.3951779156923294e-04</internalNodes>\n          <leafValues>\n            5.1779150962829590e-01 4.8196458816528320e-01\n            5.4644381999969482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1150 1.0127760469913483e-03 -1 -2 1151\n            4.9784599104896188e-04</internalNodes>\n          <leafValues>\n            3.4235960245132446e-01 4.4884610176086426e-01\n            5.9126710891723633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1152 1.3596490316558629e-04 -1 -2 1153\n            1.3571660034358501e-02</internalNodes>\n          <leafValues>\n            5.5688631534576416e-01 5.1610678434371948e-01\n            1.7130009829998016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1154 3.0259079721872695e-05 -1 -2 1155\n            -3.2625840976834297e-03</internalNodes>\n          <leafValues>\n            4.9162039160728455e-01 6.4046627283096313e-01\n            2.8590849041938782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1156 -1.9217010412830859e-04 -1 -2 1157\n            2.1993879228830338e-02</internalNodes>\n          <leafValues>\n            5.4592829942703247e-01 4.7157138586044312e-01\n            5.6900751590728760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1158 7.8907777788117528e-04 -1 -2 1159\n            5.0893891602754593e-04</internalNodes>\n          <leafValues>\n            3.2798269391059875e-01 4.3020078539848328e-01\n            5.6960451602935791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1160 1.1662710312521085e-04 -1 -2 1161\n            8.0604078248143196e-03</internalNodes>\n          <leafValues>\n            5.3872352838516235e-01 5.0214231014251709e-01\n            5.9653222560882568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1162 9.5925969071686268e-04 -1 -2 1163\n            -1.9526129588484764e-02</internalNodes>\n          <leafValues>\n            3.4734940528869629e-01 6.4755451679229736e-01\n            4.6437820792198181e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>78</maxWeakCount>\n      <stageThreshold>3.8236038208007812e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 1164 4.1242439299821854e-02 -1 -2 1165\n            1.5626709908246994e-02</internalNodes>\n          <leafValues>\n            3.3933150768280029e-01 5.1041001081466675e-01\n            7.7728152275085449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1166 2.9947189614176750e-04 -1 -2 1167\n            -1.0037609608843923e-03</internalNodes>\n          <leafValues>\n            3.6646738648414612e-01 5.4056507349014282e-01\n            3.9262050390243530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1168 6.8128242855891585e-04 -1 -2 1169\n            1.3098999625071883e-04</internalNodes>\n          <leafValues>\n            4.2515191435813904e-01 4.1351449489593506e-01\n            6.9257462024688721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1170 3.1696720980107784e-03 -1 -2 1171\n            -2.0587369799613953e-03</internalNodes>\n          <leafValues>\n            3.4558731317520142e-01 2.2341939806938171e-01\n            5.2861189842224121e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1172 -4.6395038953050971e-04 -1 -2 1173\n            3.5089480224996805e-03</internalNodes>\n          <leafValues>\n            4.2065200209617615e-01 6.5029817819595337e-01\n            4.1175979375839233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1174 -2.3975980002433062e-03 -1 -2 1175\n            1.0901279747486115e-03</internalNodes>\n          <leafValues>\n            3.6733010411262512e-01 2.9062381386756897e-01\n            5.4451119899749756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1176 -1.6524370585102588e-04 -1 -2 1177\n            -4.1602319106459618e-04</internalNodes>\n          <leafValues>\n            4.2335158586502075e-01 3.8863611221313477e-01\n            6.2691658735275269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1178 -2.3739910102449358e-04 -1 -2 1179\n            2.4739760905504227e-02</internalNodes>\n          <leafValues>\n            5.5244511365890503e-01 4.9600958824157715e-01\n            5.3734910488128662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1180 -1.5342839993536472e-02 -1 -2 1181\n            1.1540469713509083e-02</internalNodes>\n          <leafValues>\n            6.8494051694869995e-01 4.0372350811958313e-01\n            6.7869400978088379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1182 6.4230621792376041e-03 -1 -2 1183\n            1.2977809645235538e-02</internalNodes>\n          <leafValues>\n            3.8146761059761047e-01 5.5270588397979736e-01\n            3.7449559569358826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1184 1.1063399724662304e-03 -1 -2 1185\n            1.3743690215051174e-03</internalNodes>\n          <leafValues>\n            3.5209289193153381e-01 5.6419032812118530e-01\n            3.0750259757041931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1186 1.6233779489994049e-02 -1 -2 1187\n            -8.1519351806491613e-04</internalNodes>\n          <leafValues>\n            4.8888280987739563e-01 5.4563212394714355e-01\n            4.7435501217842102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1188 -9.0782493352890015e-02 -1 -2 1189\n            1.1665210127830505e-02</internalNodes>\n          <leafValues>\n            2.9252481460571289e-01 4.6884548664093018e-01\n            6.2303477525711060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1190 -2.3286409676074982e-02 -1 -2 1191\n            2.1559339947998524e-03</internalNodes>\n          <leafValues>\n            6.8958431482315063e-01 5.3558021783828735e-01\n            3.4234660863876343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1192 -4.3167220428586006e-03 -1 -2 1193\n            1.5610599657520652e-03</internalNodes>\n          <leafValues>\n            5.9370762109756470e-01 4.7086599469184875e-01\n            2.7369970083236694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1194 1.4076639898121357e-02 -1 -2 1195\n            7.1018589660525322e-03</internalNodes>\n          <leafValues>\n            5.2871561050415039e-01 5.3361928462982178e-01\n            3.2248139381408691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1196 -4.8221647739410400e-03 -1 -2 1197\n            -5.3852899000048637e-03</internalNodes>\n          <leafValues>\n            2.9839101433753967e-01 5.6239992380142212e-01\n            4.2959120869636536e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1198 7.3483278974890709e-03 -1 -2 1199\n            -3.5707519855350256e-03</internalNodes>\n          <leafValues>\n            6.8139612674713135e-01 5.8579689264297485e-01\n            4.6034291386604309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1200 2.3340100888162851e-03 -1 -2 1201\n            4.7432780265808105e-03</internalNodes>\n          <leafValues>\n            2.7448511123657227e-01 5.0475269556045532e-01\n            2.3627419769763947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1202 6.5055489540100098e-03 -1 -2 1203\n            1.2589249759912491e-02</internalNodes>\n          <leafValues>\n            5.2422481775283813e-01 4.8236909508705139e-01\n            6.7525368928909302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1204 -6.3358368352055550e-03 -1 -2 1205\n            -5.7639651931822300e-03</internalNodes>\n          <leafValues>\n            1.7346349358558655e-01 6.3543808460235596e-01\n            4.5874750614166260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1206 1.3599749654531479e-03 -1 -2 1207\n            2.8404260054230690e-02</internalNodes>\n          <leafValues>\n            4.5803809165954590e-01 5.1763808727264404e-01\n            1.2043850123882294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1208 -9.2958156019449234e-03 -1 -2 1209\n            -1.1800320353358984e-03</internalNodes>\n          <leafValues>\n            2.3379570245742798e-01 3.9028140902519226e-01\n            5.6529301404953003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1210 -2.0948140881955624e-03 -1 -2 1211\n            4.1679958812892437e-03</internalNodes>\n          <leafValues>\n            5.5120289325714111e-01 5.4559761285781860e-01\n            4.7989490628242493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1212 5.4458891972899437e-03 -1 -2 1213\n            -1.2766510481014848e-03</internalNodes>\n          <leafValues>\n            6.1270868778228760e-01 5.3171318769454956e-01\n            3.8509321212768555e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1214 5.9404270723462105e-04 -1 -2 1215\n            4.2309608310461044e-02</internalNodes>\n          <leafValues>\n            5.4464370012283325e-01 5.2346438169479370e-01\n            2.2130440175533295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1216 5.6189671158790588e-03 -1 -2 1217\n            7.2401198558509350e-03</internalNodes>\n          <leafValues>\n            4.9161979556083679e-01 1.4714759588241577e-01\n            4.8528939485549927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1218 -4.5610670931637287e-03 -1 -2 1219\n            4.5506159949582070e-05</internalNodes>\n          <leafValues>\n            2.7737739682197571e-01 4.6264618635177612e-01\n            5.7680791616439819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1220 -6.1903791502118111e-03 -1 -2 1221\n            8.1186462193727493e-04</internalNodes>\n          <leafValues>\n            1.6442899405956268e-01 4.7785910964012146e-01\n            6.2618649005889893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1222 1.3779809698462486e-02 -1 -2 1223\n            1.1290319962427020e-03</internalNodes>\n          <leafValues>\n            5.2573078870773315e-01 5.4980480670928955e-01\n            3.9831069111824036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1224 -1.0610350000206381e-04 -1 -2 1225\n            1.6695790691301227e-04</internalNodes>\n          <leafValues>\n            4.0335190296173096e-01 4.1493400931358337e-01\n            5.7953411340713501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1226 1.1290319962427020e-03 -1 -2 1227\n            -1.2019349634647369e-01</internalNodes>\n          <leafValues>\n            3.9341148734092712e-01 7.3400482535362244e-02\n            5.2025860548019409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1228 -1.5230740420520306e-02 -1 -2 1229\n            3.5759829916059971e-03</internalNodes>\n          <leafValues>\n            3.7495058774948120e-01 5.0781500339508057e-01\n            6.6060662269592285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1230 1.3479460030794144e-02 -1 -2 1231\n            -2.1162950433790684e-03</internalNodes>\n          <leafValues>\n            4.5477110147476196e-01 3.3110061287879944e-01\n            5.3842592239379883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1232 -1.7877709120512009e-02 -1 -2 1233\n            1.0931970318779349e-03</internalNodes>\n          <leafValues>\n            6.5132528543472290e-01 5.2647650241851807e-01\n            3.4569910168647766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1234 -3.0553159303963184e-03 -1 -2 1235\n            3.6365049891173840e-03</internalNodes>\n          <leafValues>\n            6.2686139345169067e-01 5.3992128372192383e-01\n            4.3453970551490784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1236 9.7896481747739017e-05 -1 -2 1237\n            -3.2714448752813041e-04</internalNodes>\n          <leafValues>\n            3.8356059789657593e-01 3.3376678824424744e-01\n            5.5391657352447510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1238 4.3425030889920890e-04 -1 -2 1239\n            1.4005579985678196e-02</internalNodes>\n          <leafValues>\n            5.7882702350616455e-01 5.2750778198242188e-01\n            2.7011251449584961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1240 -9.2654931358993053e-04 -1 -2 1241\n            3.9504268206655979e-03</internalNodes>\n          <leafValues>\n            5.8522802591323853e-01 4.7283369302749634e-01\n            3.3139181137084961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1242 -5.8086868375539780e-04 -1 -2 1243\n            -1.2018020264804363e-02</internalNodes>\n          <leafValues>\n            4.2588108777999878e-01 5.6097871065139771e-01\n            4.8951920866966248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1244 -1.4521540701389313e-01 -1 -2 1245\n            -6.6049019806087017e-03</internalNodes>\n          <leafValues>\n            4.3894480913877487e-02 4.2291709780693054e-01\n            5.6162929534912109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1246 -3.4909751266241074e-02 -1 -2 1247\n            3.7478420417755842e-03</internalNodes>\n          <leafValues>\n            4.7881281375885010e-01 4.8002821207046509e-01\n            5.8013892173767090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1248 3.3038031309843063e-02 -1 -2 1249\n            3.6872599739581347e-03</internalNodes>\n          <leafValues>\n            7.0781761407852173e-01 4.4496241211891174e-01\n            5.9577310085296631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1250 -4.5311939902603626e-03 -1 -2 1251\n            4.1058510541915894e-03</internalNodes>\n          <leafValues>\n            4.1770470142364502e-01 5.3729480504989624e-01\n            3.7369269132614136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1252 -8.7599847465753555e-03 -1 -2 1253\n            -2.3003309965133667e-02</internalNodes>\n          <leafValues>\n            6.6588079929351807e-01 2.6479220390319824e-01\n            5.1018178462982178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1254 5.3664818406105042e-03 -1 -2 1255\n            3.8971770554780960e-02</internalNodes>\n          <leafValues>\n            4.5486348867416382e-01 5.1570618152618408e-01\n            3.4364390373229980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1256 -2.7767190709710121e-02 -1 -2 1257\n            -9.8894089460372925e-03</internalNodes>\n          <leafValues>\n            2.3543910682201385e-01 6.8877410888671875e-01\n            5.1110517978668213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1258 -3.2073140610009432e-03 -1 -2 1259\n            -6.7484978353604674e-04</internalNodes>\n          <leafValues>\n            5.4388678073883057e-01 5.4511487483978271e-01\n            4.8313531279563904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1260 -5.1947520114481449e-03 -1 -2 1261\n            -2.6169899501837790e-04</internalNodes>\n          <leafValues>\n            2.1134190261363983e-01 5.2736818790435791e-01\n            3.9925870299339294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1262 2.2421479225158691e-03 -1 -2 1263\n            -1.2139769969508052e-03</internalNodes>\n          <leafValues>\n            4.6882608532905579e-01 5.5042350292205811e-01\n            4.3848711252212524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1264 -2.9469770379364491e-03 -1 -2 1265\n            -3.9291830034926534e-04</internalNodes>\n          <leafValues>\n            3.8928470015525818e-01 6.0017228126525879e-01\n            4.5616629719734192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1266 6.2550729513168335e-01 -1 -2 1267\n            9.7744520753622055e-03</internalNodes>\n          <leafValues>\n            6.8125613033771515e-02 4.8130258917808533e-01\n            5.6206572055816650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1268 9.4378247857093811e-02 -1 -2 1269\n            -1.9560910295695066e-03</internalNodes>\n          <leafValues>\n            6.6632293164730072e-02 3.5882329940795898e-01\n            5.2954071760177612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1270 9.0652769431471825e-03 -1 -2 1271\n            4.2138071148656309e-04</internalNodes>\n          <leafValues>\n            4.8226881027221680e-01 4.6703329682350159e-01\n            5.6831127405166626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1272 -4.4220191193744540e-04 -1 -2 1273\n            -4.7313501127064228e-03</internalNodes>\n          <leafValues>\n            5.3607952594757080e-01 6.1372458934783936e-01\n            3.1880891323089600e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1274 1.5395509544759989e-03 -1 -2 1275\n            2.4315000046044588e-03</internalNodes>\n          <leafValues>\n            4.4877201318740845e-01 4.8941668868064880e-01\n            6.7166537046432495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1276 -1.5581619925796986e-02 -1 -2 1277\n            1.0816920548677444e-03</internalNodes>\n          <leafValues>\n            3.3367419242858887e-01 4.7182199358940125e-01\n            5.9606271982192993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1278 -2.2197659127414227e-03 -1 -2 1279\n            -9.3048671260476112e-04</internalNodes>\n          <leafValues>\n            3.5885548591613770e-01 6.2187129259109497e-01\n            4.8173001408576965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1280 -4.7418707981705666e-03 -1 -2 1281\n            -6.2950369901955128e-03</internalNodes>\n          <leafValues>\n            2.5500270724296570e-01 6.7280787229537964e-01\n            5.0510638952255249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1282 3.5216049291193485e-03 -1 -2 1283\n            -2.4289379362016916e-03</internalNodes>\n          <leafValues>\n            5.4019099473953247e-01 5.4194617271423340e-01\n            4.3471428751945496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1284 -2.5261470582336187e-03 -1 -2 1285\n            -1.4817339833825827e-03</internalNodes>\n          <leafValues>\n            6.9706249237060547e-01 3.2634168863296509e-01\n            4.9178731441497803e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1286 -2.2474530339241028e-01 -1 -2 1287\n            2.8342509176582098e-03</internalNodes>\n          <leafValues>\n            7.2937291115522385e-03 4.5792299509048462e-01\n            5.3798812627792358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1288 -2.0821610465645790e-02 -1 -2 1289\n            1.4896340144332498e-04</internalNodes>\n          <leafValues>\n            6.0240888595581055e-01 3.3361440896987915e-01\n            4.9628159403800964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1290 -3.3524499740451574e-03 -1 -2 1291\n            -3.7279881536960602e-02</internalNodes>\n          <leafValues>\n            3.5587510466575623e-01 1.6985629498958588e-01\n            5.2089858055114746e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1292 1.3896770542487502e-04 -1 -2 1293\n            -3.1912620761431754e-04</internalNodes>\n          <leafValues>\n            5.5906862020492554e-01 5.8487337827682495e-01\n            3.7958368659019470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1294 5.4003461264073849e-04 -1 -2 1295\n            3.8956850767135620e-03</internalNodes>\n          <leafValues>\n            5.6702882051467896e-01 5.1826947927474976e-01\n            3.3277091383934021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1296 1.6084529925137758e-03 -1 -2 1297\n            -5.7474587811157107e-04</internalNodes>\n          <leafValues>\n            5.4104858636856079e-01 6.0226422548294067e-01\n            3.6446440219879150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1298 1.3435039669275284e-02 -1 -2 1299\n            2.1368139423429966e-03</internalNodes>\n          <leafValues>\n            3.4412819147109985e-01 5.2924340963363647e-01\n            2.7470758557319641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1300 1.4157629571855068e-02 -1 -2 1301\n            5.3884391672909260e-03</internalNodes>\n          <leafValues>\n            8.0278682708740234e-01 5.2223151922225952e-01\n            3.5867279767990112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1302 8.8013410568237305e-03 -1 -2 1303\n            3.8858849438838661e-04</internalNodes>\n          <leafValues>\n            4.9003869295120239e-01 4.6810561418533325e-01\n            5.7219529151916504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1304 -2.2143588867038488e-03 -1 -2 1305\n            -8.4642972797155380e-03</internalNodes>\n          <leafValues>\n            5.3888058662414551e-01 6.6755378246307373e-01\n            3.4484419226646423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1306 1.5044390223920345e-02 -1 -2 1307\n            7.6346402056515217e-03</internalNodes>\n          <leafValues>\n            9.2396140098571777e-01 4.8848968744277954e-01\n            6.3060528039932251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1308 3.3895121305249631e-04 -1 -2 1309\n            2.1157610171940178e-04</internalNodes>\n          <leafValues>\n            3.9974310994148254e-01 5.6639820337295532e-01\n            3.9729809761047363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1310 -2.7514949440956116e-02 -1 -2 1311\n            5.1603060215711594e-02</internalNodes>\n          <leafValues>\n            5.2010637521743774e-01 5.1407301425933838e-01\n            1.2451309710741043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1312 3.7510651163756847e-03 -1 -2 1313\n            -2.1457639522850513e-03</internalNodes>\n          <leafValues>\n            3.8020950555801392e-01 3.3094480633735657e-01\n            5.4745388031005859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1314 -5.8178009930998087e-04 -1 -2 1315\n            -9.3638541875407100e-04</internalNodes>\n          <leafValues>\n            4.8926019668579102e-01 5.9373992681503296e-01\n            4.6646690368652344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1316 4.1667491197586060e-02 -1 -2 1317\n            -6.7763780243694782e-03</internalNodes>\n          <leafValues>\n            7.0213532447814941e-01 3.2227510213851929e-01\n            5.0683951377868652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1318 -2.9170580673962831e-03 -1 -2 1319\n            3.2789530814625323e-04</internalNodes>\n          <leafValues>\n            4.7177010774612427e-01 4.5093831419944763e-01\n            5.6511628627777100e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>91</maxWeakCount>\n      <stageThreshold>4.4682968139648438e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 1320 1.1729800142347813e-02 -1 -2 1321\n            1.1712179984897375e-03</internalNodes>\n          <leafValues>\n            3.8052248954772949e-01 3.1400179862976074e-01\n            6.8581461906433105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1322 9.3555096536874771e-03 -1 -2 1323\n            1.6570610459893942e-03</internalNodes>\n          <leafValues>\n            6.8346732854843140e-01 2.9924729466438293e-01\n            5.4756778478622437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1324 -1.3387809740379453e-03 -1 -2 1325\n            1.7580550047568977e-04</internalNodes>\n          <leafValues>\n            2.9414069652557373e-01 3.8969779014587402e-01\n            5.8729708194732666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1326 -2.9473248869180679e-03 -1 -2 1327\n            8.3220899105072021e-03</internalNodes>\n          <leafValues>\n            3.5765719413757324e-01 5.2324008941650391e-01\n            3.2310879230499268e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1328 7.4366689659655094e-03 -1 -2 1329\n            -2.1322889369912446e-04</internalNodes>\n          <leafValues>\n            6.7156732082366943e-01 5.4705417156219482e-01\n            3.8633960485458374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1330 -7.8024631366133690e-03 -1 -2 1331\n            5.6611228501424193e-04</internalNodes>\n          <leafValues>\n            2.7714601159095764e-01 4.6891361474990845e-01\n            5.8519637584686279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1332 -9.2346500605344772e-03 -1 -2 1333\n            -1.4676499631605111e-05</internalNodes>\n          <leafValues>\n            2.7043971419334412e-01 5.6225502490997314e-01\n            3.5793170332908630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1334 9.7007937729358673e-03 -1 -2 1335\n            -3.5320650786161423e-03</internalNodes>\n          <leafValues>\n            4.1738718748092651e-01 4.1950130462646484e-01\n            5.5494689941406250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1336 2.1616410464048386e-02 -1 -2 1337\n            3.4567608963698149e-03</internalNodes>\n          <leafValues>\n            2.8573909401893616e-01 6.0245329141616821e-01\n            4.3775078654289246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1338 2.2914320230484009e-02 -1 -2 1339\n            3.4328910987824202e-03</internalNodes>\n          <leafValues>\n            4.6893501281738281e-01 4.6646049618721008e-01\n            5.7625621557235718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1340 -8.6510833352804184e-03 -1 -2 1341\n            1.4510039472952485e-03</internalNodes>\n          <leafValues>\n            6.3817399740219116e-01 3.7114879488945007e-01\n            5.5307507514953613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1342 7.8191719949245453e-03 -1 -2 1343\n            2.0798550394829363e-04</internalNodes>\n          <leafValues>\n            5.2643620967864990e-01 3.7305128574371338e-01\n            5.4457312822341919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1344 -3.9962218143045902e-03 -1 -2 1345\n            -1.5010139577498194e-05</internalNodes>\n          <leafValues>\n            2.4381700158119202e-01 5.3246712684631348e-01\n            3.6829888820648193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1346 -4.2428788729012012e-03 -1 -2 1347\n            9.1374982148408890e-03</internalNodes>\n          <leafValues>\n            6.4814740419387817e-01 4.8961588740348816e-01\n            6.5588432550430298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1348 8.8254585862159729e-03 -1 -2 1349\n            9.4092212384566665e-04</internalNodes>\n          <leafValues>\n            3.6138701438903809e-01 5.5028957128524780e-01\n            3.6325180530548096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1350 -1.2503350153565407e-02 -1 -2 1351\n            8.6759645491838455e-03</internalNodes>\n          <leafValues>\n            2.2611320018768311e-01 4.9878901243209839e-01\n            6.8471962213516235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1352 -1.0416760109364986e-02 -1 -2 1353\n            2.7432460337877274e-03</internalNodes>\n          <leafValues>\n            2.4462990462779999e-01 3.5115250945091248e-01\n            5.3998267650604248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1354 -4.2385691776871681e-03 -1 -2 1355\n            1.8325870856642723e-02</internalNodes>\n          <leafValues>\n            6.8236732482910156e-01 4.8915800452232361e-01\n            7.1356189250946045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1356 -2.4334540590643883e-02 -1 -2 1357\n            4.6469361404888332e-04</internalNodes>\n          <leafValues>\n            3.5225218534469604e-01 4.0498688817024231e-01\n            5.5158257484436035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1358 3.4260009415447712e-03 -1 -2 1359\n            -2.5827318895608187e-03</internalNodes>\n          <leafValues>\n            4.1267699003219604e-01 2.8994289040565491e-01\n            5.3864318132400513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1360 1.0545699624344707e-03 -1 -2 1361\n            -9.1257691383361816e-04</internalNodes>\n          <leafValues>\n            3.7713441252708435e-01 5.8273869752883911e-01\n            4.2675569653511047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1362 2.6589010376483202e-03 -1 -2 1363\n            4.8598358407616615e-03</internalNodes>\n          <leafValues>\n            4.6881249547004700e-01 4.8539221286773682e-01\n            6.1636447906494141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1364 8.0638676881790161e-03 -1 -2 1365\n            -7.5898370705544949e-03</internalNodes>\n          <leafValues>\n            1.7491950094699860e-01 6.8261897563934326e-01\n            4.8940700292587280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1366 3.6368070868775249e-04 -1 -2 1367\n            6.2594950199127197e-02</internalNodes>\n          <leafValues>\n            4.6145960688591003e-01 5.1830172538757324e-01\n            2.6866960525512695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1368 -4.9753207713365555e-03 -1 -2 1369\n            -2.0880119409412146e-03</internalNodes>\n          <leafValues>\n            1.7584669589996338e-01 6.3693821430206299e-01\n            4.9300441145896912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1370 9.5644511748105288e-04 -1 -2 1371\n            -3.1721461564302444e-02</internalNodes>\n          <leafValues>\n            4.1393989324569702e-01 6.0455572605133057e-01\n            4.8163640499114990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1372 1.2898689601570368e-03 -1 -2 1373\n            9.8405163735151291e-03</internalNodes>\n          <leafValues>\n            5.4508107900619507e-01 2.9240009188652039e-01\n            6.6996061801910400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1374 1.2237089686095715e-03 -1 -2 1375\n            -8.4232585504651070e-03</internalNodes>\n          <leafValues>\n            6.2828367948532104e-01 5.9865701198577881e-01\n            4.8525801301002502e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1376 -7.2726322105154395e-04 -1 -2 1377\n            4.6842931769788265e-03</internalNodes>\n          <leafValues>\n            3.3400490880012512e-01 5.1689237356185913e-01\n            2.6794800162315369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1378 -1.0379579616710544e-03 -1 -2 1379\n            9.1342730447649956e-03</internalNodes>\n          <leafValues>\n            5.9257918596267700e-01 5.4377281665802002e-01\n            4.3468001484870911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1380 1.4971119817346334e-03 -1 -2 1381\n            1.5762320253998041e-03</internalNodes>\n          <leafValues>\n            4.1295009851455688e-01 4.5228740572929382e-01\n            6.5562921762466431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1382 8.7496247142553329e-03 -1 -2 1383\n            -8.5103599121794105e-04</internalNodes>\n          <leafValues>\n            4.5320340991020203e-01 3.7859839200973511e-01\n            5.4169750213623047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1384 -1.7325570806860924e-02 -1 -2 1385\n            -8.3266440778970718e-03</internalNodes>\n          <leafValues>\n            6.8842482566833496e-01 3.0913260579109192e-01\n            5.2436548471450806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1386 1.5157909729168750e-05 -1 -2 1387\n            1.8041470320895314e-03</internalNodes>\n          <leafValues>\n            4.7657939791679382e-01 4.7253859043121338e-01\n            5.7165551185607910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1388 3.0691560823470354e-03 -1 -2 1389\n            -5.2225510444259271e-05</internalNodes>\n          <leafValues>\n            2.1433599293231964e-01 5.6532102823257446e-01\n            4.3851110339164734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1390 1.0072169970953837e-04 -1 -2 1391\n            1.3573700562119484e-04</internalNodes>\n          <leafValues>\n            5.9247761964797974e-01 4.5734488964080811e-01\n            5.7693827152252197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1392 9.2137878527864814e-04 -1 -2 1393\n            3.0316581251099706e-04</internalNodes>\n          <leafValues>\n            5.9926092624664307e-01 3.6100810766220093e-01\n            5.0493258237838745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1394 3.9582479745149612e-02 -1 -2 1395\n            4.7519680112600327e-02</internalNodes>\n          <leafValues>\n            1.5384890139102936e-01 5.2161407470703125e-01\n            1.4283910393714905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1396 1.8871759995818138e-02 -1 -2 1397\n            -3.9876459049992263e-04</internalNodes>\n          <leafValues>\n            2.8255069255828857e-01 4.0350168943405151e-01\n            5.4377931356430054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1398 4.6556600136682391e-04 -1 -2 1399\n            6.7090610973536968e-03</internalNodes>\n          <leafValues>\n            4.6689969301223755e-01 5.3313547372817993e-01\n            4.1365718841552734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1400 -1.8931160448119044e-03 -1 -2 1401\n            -1.3056949712336063e-02</internalNodes>\n          <leafValues>\n            7.1551632881164551e-01 3.1178998947143555e-01\n            5.2084398269653320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1402 -1.9484119547996670e-04 -1 -2 1403\n            1.5093220099515747e-05</internalNodes>\n          <leafValues>\n            4.6376588940620422e-01 4.5616531372070312e-01\n            5.4452341794967651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1404 -7.1617960202274844e-06 -1 -2 1405\n            3.0164679628796875e-04</internalNodes>\n          <leafValues>\n            4.1931080818176270e-01 5.9662377834320068e-01\n            4.1005000472068787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1406 4.4195181690156460e-03 -1 -2 1407\n            -7.3984181508421898e-03</internalNodes>\n          <leafValues>\n            4.8450559377670288e-01 6.2068462371826172e-01\n            4.9312090873718262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1408 -7.8031201846897602e-03 -1 -2 1409\n            -1.0731429792940617e-02</internalNodes>\n          <leafValues>\n            5.2824628353118896e-01 9.1048341989517212e-01\n            3.4559220075607300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1410 1.4246780192479491e-03 -1 -2 1411\n            -8.2717568147927523e-05</internalNodes>\n          <leafValues>\n            4.7085541486740112e-01 5.6516230106353760e-01\n            4.7310239076614380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1412 4.4803409837186337e-03 -1 -2 1413\n            3.0789140146225691e-03</internalNodes>\n          <leafValues>\n            6.1758869886398315e-01 5.1395332813262939e-01\n            3.4230878949165344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1414 -1.1310289846733212e-03 -1 -2 1415\n            -1.0410690447315574e-03</internalNodes>\n          <leafValues>\n            4.9182820320129395e-01 5.9420871734619141e-01\n            4.9230429530143738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1416 1.1648540385067463e-03 -1 -2 1417\n            9.0057362103834748e-04</internalNodes>\n          <leafValues>\n            6.4052718877792358e-01 4.5043969154357910e-01\n            6.1920768022537231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1418 6.8781538866460323e-03 -1 -2 1419\n            -3.5283900797367096e-02</internalNodes>\n          <leafValues>\n            5.3748130798339844e-01 2.2471010684967041e-01\n            5.2171707153320312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1420 -1.3320200378075242e-03 -1 -2 1421\n            -2.3177571129053831e-03</internalNodes>\n          <leafValues>\n            2.5547030568122864e-01 3.7925159931182861e-01\n            5.2432268857955933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1422 2.1332940377760679e-04 -1 -2 1423\n            1.3467900454998016e-02</internalNodes>\n          <leafValues>\n            3.8603371381759644e-01 5.3806877136230469e-01\n            4.1783639788627625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1424 -1.2829169863834977e-03 -1 -2 1425\n            5.1571638323366642e-04</internalNodes>\n          <leafValues>\n            6.1336231231689453e-01 4.0285378694534302e-01\n            5.5368518829345703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1426 3.9254198782145977e-03 -1 -2 1427\n            -3.3780589699745178e-02</internalNodes>\n          <leafValues>\n            5.2799212932586670e-01 2.3346750438213348e-01\n            5.1759117841720581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1428 -3.7853721529245377e-02 -1 -2 1429\n            -4.0752900531515479e-04</internalNodes>\n          <leafValues>\n            1.0748530179262161e-01 5.3459298610687256e-01\n            4.1989380121231079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1430 -3.1193809118121862e-03 -1 -2 1431\n            -1.5714969485998154e-02</internalNodes>\n          <leafValues>\n            3.8558250665664673e-01 3.3351901173591614e-01\n            5.2632021903991699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1432 -7.8525702701881528e-04 -1 -2 1433\n            -2.8750501223839819e-04</internalNodes>\n          <leafValues>\n            5.8603972196578979e-01 5.4377847909927368e-01\n            3.7161049246788025e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1434 2.8016859665513039e-02 -1 -2 1435\n            -1.9018839811906219e-03</internalNodes>\n          <leafValues>\n            3.3307549357414246e-01 5.3665977716445923e-01\n            4.6937939524650574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1436 2.0647559314966202e-02 -1 -2 1437\n            4.3002571910619736e-03</internalNodes>\n          <leafValues>\n            1.0069560259580612e-01 4.8160359263420105e-01\n            6.2156772613525391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1438 1.3459140434861183e-02 -1 -2 1439\n            -1.0320040397346020e-02</internalNodes>\n          <leafValues>\n            5.4619538784027100e-01 4.5784530043601990e-01\n            5.4193097352981567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1440 3.1990748643875122e-01 -1 -2 1441\n            9.2198798665776849e-04</internalNodes>\n          <leafValues>\n            2.0080469548702240e-01 5.1932811737060547e-01\n            3.9121940732002258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1442 4.1852539288811386e-04 -1 -2 1443\n            3.5891108564101160e-04</internalNodes>\n          <leafValues>\n            4.2997440695762634e-01 4.3445029854774475e-01\n            5.5319738388061523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1444 -2.0992439985275269e-01 -1 -2 1445\n            -4.9328152090311050e-03</internalNodes>\n          <leafValues>\n            1.0757210105657578e-01 5.7627969980239868e-01\n            4.5746439695358276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1446 2.3409130517393351e-03 -1 -2 1447\n            4.7120270319283009e-03</internalNodes>\n          <leafValues>\n            7.4768078327178955e-01 5.2617651224136353e-01\n            4.5055508613586426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1448 2.8713190928101540e-02 -1 -2 1449\n            -2.6156550738960505e-03</internalNodes>\n          <leafValues>\n            4.4071030616760254e-01 4.2442709207534790e-01\n            6.8929767608642578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1450 -1.3558969832956791e-02 -1 -2 1451\n            -3.0331799644045532e-04</internalNodes>\n          <leafValues>\n            1.2522679567337036e-01 4.0777918696403503e-01\n            5.4428178071975708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1452 -5.5601762142032385e-04 -1 -2 1453\n            2.4025330785661936e-03</internalNodes>\n          <leafValues>\n            5.3780037164688110e-01 3.1665799021720886e-01\n            5.2857381105422974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1454 -3.4089901018887758e-03 -1 -2 1455\n            8.0019602319225669e-04</internalNodes>\n          <leafValues>\n            4.9052149057388306e-01 4.5227360725402832e-01\n            5.5806142091751099e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1456 2.1901070140302181e-03 -1 -2 1457\n            3.3745369873940945e-03</internalNodes>\n          <leafValues>\n            6.6126817464828491e-01 5.1077651977539062e-01\n            3.3869299292564392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1458 8.0019602319225669e-04 -1 -2 1459\n            1.7346069216728210e-02</internalNodes>\n          <leafValues>\n            5.7075601816177368e-01 5.0160211324691772e-01\n            6.3064599037170410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1460 -1.9568449351936579e-03 -1 -2 1461\n            -1.1229019612073898e-02</internalNodes>\n          <leafValues>\n            3.0178061127662659e-01 6.2938511371612549e-01\n            4.5204889774322510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1462 -2.6608388870954514e-03 -1 -2 1463\n            -1.1615100316703320e-02</internalNodes>\n          <leafValues>\n            3.3440071344375610e-01 2.8253790736198425e-01\n            5.1509708166122437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1464 -9.5248602330684662e-02 -1 -2 1465\n            7.3701781220734119e-03</internalNodes>\n          <leafValues>\n            1.3982650637626648e-01 5.2939987182617188e-01\n            2.3317280411720276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1466 -1.4953900128602982e-02 -1 -2 1467\n            5.7038792874664068e-04</internalNodes>\n          <leafValues>\n            4.9404659867286682e-01 5.4665708541870117e-01\n            4.6267679333686829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1468 5.8516198769211769e-03 -1 -2 1469\n            2.1150549582671374e-04</internalNodes>\n          <leafValues>\n            6.2700408697128296e-01 5.5081409215927124e-01\n            4.0618729591369629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1470 -6.9679190346505493e-06 -1 -2 1471\n            -7.9677387839183211e-04</internalNodes>\n          <leafValues>\n            4.0965679287910461e-01 5.6155568361282349e-01\n            4.6668860316276550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1472 1.9459480419754982e-02 -1 -2 1473\n            -1.1160830035805702e-02</internalNodes>\n          <leafValues>\n            2.3114809393882751e-01 3.0870118737220764e-01\n            5.5146622657775879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1474 1.4056149870157242e-02 -1 -2 1475\n            -3.2958350493572652e-04</internalNodes>\n          <leafValues>\n            7.0050561428070068e-01 5.7974857091903687e-01\n            4.6916508674621582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1476 -5.4636420682072639e-03 -1 -2 1477\n            5.8881669247057289e-05</internalNodes>\n          <leafValues>\n            5.9285950660705566e-01 3.7413978576660156e-01\n            5.1701688766479492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1478 6.6343429498374462e-03 -1 -2 1479\n            4.5263409614562988e-02</internalNodes>\n          <leafValues>\n            5.4149878025054932e-01 5.1803272962570190e-01\n            1.5296840667724609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1480 -8.0646127462387085e-03 -1 -2 1481\n            4.7389548853971064e-04</internalNodes>\n          <leafValues>\n            2.5154680013656616e-01 5.1219987869262695e-01\n            3.7259489297866821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1482 1.4877359717502259e-05 -1 -2 1483\n            2.4321159347891808e-02</internalNodes>\n          <leafValues>\n            5.5324357748031616e-01 4.9607661366462708e-01\n            5.9833151102066040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1484 6.9931396865285933e-05 -1 -2 1485\n            2.6287760119885206e-03</internalNodes>\n          <leafValues>\n            4.1639530658721924e-01 5.8801448345184326e-01\n            3.3996629714965820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1486 3.8190539926290512e-03 -1 -2 1487\n            -2.5989150628447533e-02</internalNodes>\n          <leafValues>\n            7.8466212749481201e-01 3.2881140708923340e-01\n            5.1550877094268799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1488 1.2062400346621871e-03 -1 -2 1489\n            -1.5557400183752179e-03</internalNodes>\n          <leafValues>\n            4.5960599184036255e-01 3.1269869208335876e-01\n            7.1833992004394531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1490 -2.2691930644214153e-03 -1 -2 1491\n            2.3287249496206641e-04</internalNodes>\n          <leafValues>\n            5.2740061283111572e-01 4.8786661028862000e-01\n            5.6151527166366577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1492 -5.5999699980020523e-03 -1 -2 1493\n            -1.0496189817786217e-02</internalNodes>\n          <leafValues>\n            5.1608121395111084e-01 5.7016140222549438e-01\n            3.2048508524894714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1494 -1.4814930182183161e-05 -1 -2 1495\n            -6.4287078566849232e-04</internalNodes>\n          <leafValues>\n            5.5388379096984863e-01 5.3494292497634888e-01\n            4.4721511006355286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1496 -1.8891949730459601e-04 -1 -2 1497\n            -9.0413521975278854e-03</internalNodes>\n          <leafValues>\n            5.0128370523452759e-01 2.5629359483718872e-01\n            4.5033830404281616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1498 7.9534705728292465e-03 -1 -2 1499\n            -2.7908999472856522e-03</internalNodes>\n          <leafValues>\n            2.6304998993873596e-01 5.7565087080001831e-01\n            4.8548638820648193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1500 3.2857100013643503e-03 -1 -2 1501\n            7.7063008211553097e-04</internalNodes>\n          <leafValues>\n            4.0847519040107727e-01 4.0733560919761658e-01\n            5.9202408790588379e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>97</maxWeakCount>\n      <stageThreshold>4.7763450622558594e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 1502 6.3021942973136902e-02 -1 -2 1503\n            -2.8374609537422657e-03</internalNodes>\n          <leafValues>\n            3.4193828701972961e-01 6.8295639753341675e-01\n            4.4045230746269226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1504 4.6461950987577438e-02 -1 -2 1505\n            2.9152540490031242e-02</internalNodes>\n          <leafValues>\n            4.3917450308799744e-01 4.6010631322860718e-01\n            6.3579368591308594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1506 -1.4000290320836939e-05 -1 -2 1507\n            -1.2757079675793648e-03</internalNodes>\n          <leafValues>\n            3.7300100922584534e-01 3.0938240885734558e-01\n            5.9013700485229492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1508 1.3596529606729746e-03 -1 -2 1509\n            1.7991929780691862e-04</internalNodes>\n          <leafValues>\n            4.3375650048255920e-01 4.2175039649009705e-01\n            5.8468478918075562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1510 -1.4166639630275313e-05 -1 -2 1511\n            6.0252390539972112e-05</internalNodes>\n          <leafValues>\n            4.0846911072731018e-01 5.0872868299484253e-01\n            7.2771841287612915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1512 6.4320368692278862e-03 -1 -2 1513\n            4.6682319953106344e-04</internalNodes>\n          <leafValues>\n            2.9679030179977417e-01 4.1104629635810852e-01\n            5.5812197923660278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1514 5.7436279021203518e-03 -1 -2 1515\n            3.2019240316003561e-03</internalNodes>\n          <leafValues>\n            4.2873099446296692e-01 4.2661958932876587e-01\n            6.4440459012985229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1516 -5.7637941790744662e-04 -1 -2 1517\n            -3.7901920732110739e-03</internalNodes>\n          <leafValues>\n            4.0848249197006226e-01 3.1819209456443787e-01\n            5.2306932210922241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1518 4.8914109356701374e-03 -1 -2 1519\n            4.6459292061626911e-03</internalNodes>\n          <leafValues>\n            3.5483568906784058e-01 5.6105977296829224e-01\n            2.6938489079475403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1520 -6.8799369037151337e-03 -1 -2 1521\n            -1.8147470429539680e-02</internalNodes>\n          <leafValues>\n            6.2354081869125366e-01 2.8619819879531860e-01\n            5.2268481254577637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1522 1.1409220314817503e-04 -1 -2 1523\n            -5.4334272863343358e-04</internalNodes>\n          <leafValues>\n            3.2578331232070923e-01 3.8829690217971802e-01\n            5.3411662578582764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1524 -2.7602489572018385e-03 -1 -2 1525\n            -1.9730569329112768e-03</internalNodes>\n          <leafValues>\n            6.3539659976959229e-01 5.8807611465454102e-01\n            4.5930901169776917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1526 2.4565239436924458e-03 -1 -2 1527\n            1.9392010290175676e-04</internalNodes>\n          <leafValues>\n            3.1340101361274719e-01 5.2771317958831787e-01\n            3.6041069030761719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1528 7.8643016517162323e-02 -1 -2 1529\n            6.5276869572699070e-03</internalNodes>\n          <leafValues>\n            5.2903419733047485e-01 4.6544799208641052e-01\n            6.0449051856994629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1530 -7.8716799616813660e-02 -1 -2 1531\n            5.7298499159514904e-03</internalNodes>\n          <leafValues>\n            2.5411269068717957e-01 4.3669191002845764e-01\n            5.8228862285614014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1532 6.2386557692661881e-04 -1 -2 1533\n            -8.5267230868339539e-02</internalNodes>\n          <leafValues>\n            5.4726922512054443e-01 1.4616079628467560e-01\n            5.1818108558654785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1534 4.0981110185384750e-02 -1 -2 1535\n            7.7135749161243439e-03</internalNodes>\n          <leafValues>\n            1.2701350450515747e-01 4.8326849937438965e-01\n            2.2235789895057678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1536 -6.8663940764963627e-03 -1 -2 1537\n            1.4559639617800713e-02</internalNodes>\n          <leafValues>\n            5.9189289808273315e-01 4.7615069150924683e-01\n            5.7272237539291382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1538 -1.0064310394227505e-02 -1 -2 1539\n            3.6274080630391836e-03</internalNodes>\n          <leafValues>\n            3.6367309093475342e-01 5.2717310190200806e-01\n            2.7405250072479248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1540 -2.3421540390700102e-03 -1 -2 1541\n            -2.4686409160494804e-02</internalNodes>\n          <leafValues>\n            5.4977840185165405e-01 6.0598951578140259e-01\n            4.9603140354156494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1542 1.9456120207905769e-04 -1 -2 1543\n            3.1714211218059063e-04</internalNodes>\n          <leafValues>\n            3.7694650888442993e-01 4.0623620152473450e-01\n            5.6682151556015015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1544 2.0793990697711706e-03 -1 -2 1545\n            1.7982709687203169e-03</internalNodes>\n          <leafValues>\n            4.6186569333076477e-01 4.8675051331520081e-01\n            6.5184497833251953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1546 -2.2287059982772917e-04 -1 -2 1547\n            3.2623921288177371e-04</internalNodes>\n          <leafValues>\n            5.6775957345962524e-01 3.7107339501380920e-01\n            5.6766051054000854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1548 -6.6792681813240051e-02 -1 -2 1549\n            -1.4869889710098505e-03</internalNodes>\n          <leafValues>\n            2.5115218758583069e-01 3.8867509365081787e-01\n            5.2622538805007935e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1550 -5.0454870797693729e-03 -1 -2 1551\n            -4.8297587782144547e-03</internalNodes>\n          <leafValues>\n            6.5574729442596436e-01 5.9341061115264893e-01\n            4.2859220504760742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1552 -1.0722599690780044e-03 -1 -2 1553\n            8.7901195511221886e-03</internalNodes>\n          <leafValues>\n            5.4260587692260742e-01 5.3513032197952271e-01\n            4.8342779278755188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1554 -7.1750381030142307e-03 -1 -2 1555\n            1.1251230025663972e-03</internalNodes>\n          <leafValues>\n            2.0671689510345459e-01 5.1122522354125977e-01\n            3.4687140583992004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1556 1.0634710080921650e-02 -1 -2 1557\n            -1.1763219721615314e-02</internalNodes>\n          <leafValues>\n            4.4790080189704895e-01 6.2539017200469971e-01\n            4.9689871072769165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1558 9.2324063181877136e-02 -1 -2 1559\n            1.8991080578416586e-03</internalNodes>\n          <leafValues>\n            2.0313039422035217e-01 5.6187218427658081e-01\n            4.0465721487998962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1560 -1.0510340332984924e-02 -1 -2 1561\n            -7.4531312566250563e-04</internalNodes>\n          <leafValues>\n            4.9432641267776489e-01 5.6134277582168579e-01\n            3.8453319668769836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1562 8.0041000619530678e-03 -1 -2 1563\n            5.8110528625547886e-03</internalNodes>\n          <leafValues>\n            7.7598422765731812e-01 4.6247330307960510e-01\n            6.2862771749496460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1564 -2.7918580919504166e-02 -1 -2 1565\n            2.1739399526268244e-03</internalNodes>\n          <leafValues>\n            2.4093140661716461e-01 5.3455048799514771e-01\n            3.5079580545425415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1566 -4.0639587678015232e-03 -1 -2 1567\n            6.0017139185220003e-04</internalNodes>\n          <leafValues>\n            6.6471010446548462e-01 4.9985098838806152e-01\n            3.0221650004386902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1568 1.9214770291000605e-03 -1 -2 1569\n            -1.3860830105841160e-02</internalNodes>\n          <leafValues>\n            5.9191507101058960e-01 6.3517677783966064e-01\n            4.9933108687400818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1570 2.3006850853562355e-02 -1 -2 1571\n            -1.3857929734513164e-03</internalNodes>\n          <leafValues>\n            1.9023360311985016e-01 5.2533692121505737e-01\n            3.9858600497245789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1572 1.2637410545721650e-03 -1 -2 1573\n            -1.4675210230052471e-02</internalNodes>\n          <leafValues>\n            4.6661040186882019e-01 3.8231649994850159e-01\n            5.3266328573226929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1574 -2.9535070061683655e-03 -1 -2 1575\n            -1.7189770005643368e-03</internalNodes>\n          <leafValues>\n            7.0636558532714844e-01 3.8134628534317017e-01\n            5.2467352151870728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1576 -4.2484089499339461e-04 -1 -2 1577\n            -8.5248658433556557e-04</internalNodes>\n          <leafValues>\n            4.7916388511657715e-01 4.4912180304527283e-01\n            5.3709012269973755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1578 8.9034568518400192e-03 -1 -2 1579\n            1.4895649655954912e-05</internalNodes>\n          <leafValues>\n            2.0764739811420441e-01 4.4476351141929626e-01\n            5.6671631336212158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1580 -4.7091601300053298e-04 -1 -2 1581\n            4.3084810022264719e-04</internalNodes>\n          <leafValues>\n            5.4650712013244629e-01 5.4932618141174316e-01\n            4.5807081460952759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1582 -6.3893961487337947e-04 -1 -2 1583\n            -7.3733746830839664e-05</internalNodes>\n          <leafValues>\n            5.5015718936920166e-01 5.0857907533645630e-01\n            3.3056980371475220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1584 -8.8991485536098480e-03 -1 -2 1585\n            -1.0253350250422955e-02</internalNodes>\n          <leafValues>\n            4.2764690518379211e-01 1.1232180148363113e-01\n            5.1527231931686401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1586 -5.9637490659952164e-02 -1 -2 1587\n            2.1707199513912201e-02</internalNodes>\n          <leafValues>\n            7.3867720365524292e-01 4.9962919950485229e-01\n            1.3394139707088470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1588 9.9107045680284500e-03 -1 -2 1589\n            -1.0998300276696682e-02</internalNodes>\n          <leafValues>\n            4.6790120005607605e-01 6.9286561012268066e-01\n            5.0120681524276733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1590 7.4608891736716032e-04 -1 -2 1591\n            2.9539171373471618e-04</internalNodes>\n          <leafValues>\n            5.8335822820663452e-01 3.8263911008834839e-01\n            5.5663508176803589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1592 5.0054129213094711e-02 -1 -2 1593\n            -7.2330660186707973e-03</internalNodes>\n          <leafValues>\n            3.0027210712432861e-01 5.9080427885055542e-01\n            5.0008708238601685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1594 -2.6863380335271358e-03 -1 -2 1595\n            -1.0195849463343620e-03</internalNodes>\n          <leafValues>\n            3.9750349521636963e-01 3.6976858973503113e-01\n            5.7561928033828735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1596 -2.0204920321702957e-02 -1 -2 1597\n            2.1340379025787115e-03</internalNodes>\n          <leafValues>\n            6.3752681016921997e-01 5.3632658720016479e-01\n            4.4331708550453186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1598 -1.8348889425396919e-03 -1 -2 1599\n            -5.9489468112587929e-03</internalNodes>\n          <leafValues>\n            5.8289992809295654e-01 2.6806709170341492e-01\n            4.6428859233856201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1600 -2.3030120064504445e-04 -1 -2 1601\n            5.0581009127199650e-03</internalNodes>\n          <leafValues>\n            5.4753202199935913e-01 5.3208339214324951e-01\n            4.6464928984642029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1602 -5.1950011402368546e-04 -1 -2 1603\n            -6.8620947422459722e-04</internalNodes>\n          <leafValues>\n            5.2327448129653931e-01 4.9350860714912415e-01\n            3.1031179428100586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1604 -7.4936267919838428e-03 -1 -2 1605\n            -1.5682930126786232e-02</internalNodes>\n          <leafValues>\n            2.8830468654632568e-01 3.6403131484985352e-01\n            5.3687548637390137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1606 -3.2649750355631113e-03 -1 -2 1607\n            3.8463930832222104e-04</internalNodes>\n          <leafValues>\n            6.4686310291290283e-01 5.2596598863601685e-01\n            3.8314279913902283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1608 4.4492390006780624e-03 -1 -2 1609\n            2.3118320852518082e-02</internalNodes>\n          <leafValues>\n            2.0868189632892609e-01 4.9785330891609192e-01\n            5.9612572193145752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1610 2.0835159812122583e-03 -1 -2 1611\n            1.1513150529935956e-03</internalNodes>\n          <leafValues>\n            5.7464218139648438e-01 3.5868450999259949e-01\n            5.3634738922119141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1612 3.6104708909988403e-02 -1 -2 1613\n            3.6256198654882610e-04</internalNodes>\n          <leafValues>\n            2.8331369161605835e-01 5.4777222871780396e-01\n            4.1105321049690247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1614 -3.4635469783097506e-03 -1 -2 1615\n            -2.8796829283237457e-03</internalNodes>\n          <leafValues>\n            5.9903860092163086e-01 5.7252532243728638e-01\n            4.1495120525360107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1616 -8.1119500100612640e-03 -1 -2 1617\n            4.5932079665362835e-03</internalNodes>\n          <leafValues>\n            5.3963518142700195e-01 5.3797042369842529e-01\n            3.8913029432296753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1618 7.0014740340411663e-03 -1 -2 1619\n            8.0169539432972670e-04</internalNodes>\n          <leafValues>\n            3.7146711349487305e-01 5.5295670032501221e-01\n            3.7558048963546753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1620 -8.6652329191565514e-03 -1 -2 1621\n            -2.7315050829201937e-03</internalNodes>\n          <leafValues>\n            5.0257730484008789e-01 5.8503222465515137e-01\n            4.6175739169120789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1622 1.3301590224727988e-03 -1 -2 1623\n            -4.2648240923881531e-03</internalNodes>\n          <leafValues>\n            5.9377008676528931e-01 5.6453680992126465e-01\n            3.9376249909400940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1624 6.3251499086618423e-03 -1 -2 1625\n            -3.0753740575164557e-03</internalNodes>\n          <leafValues>\n            5.1821058988571167e-01 3.0074161291122437e-01\n            5.1964038610458374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1626 -7.3622138006612659e-04 -1 -2 1627\n            3.0082479497650638e-05</internalNodes>\n          <leafValues>\n            3.6975800991058350e-01 4.3275931477546692e-01\n            5.7158088684082031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1628 -3.8722730241715908e-03 -1 -2 1629\n            6.2879058532416821e-04</internalNodes>\n          <leafValues>\n            3.4737130999565125e-01 5.4382592439651489e-01\n            4.4539061188697815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1630 1.3411579420790076e-03 -1 -2 1631\n            -8.3681922405958176e-03</internalNodes>\n          <leafValues>\n            6.5117138624191284e-01 1.4432950317859650e-01\n            4.8881998658180237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1632 9.3305751215666533e-04 -1 -2 1633\n            -1.0746510233730078e-03</internalNodes>\n          <leafValues>\n            3.9511090517044067e-01 3.9102658629417419e-01\n            5.3495037555694580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1634 -1.8610050901770592e-02 -1 -2 1635\n            1.3651419430971146e-03</internalNodes>\n          <leafValues>\n            1.2757439911365509e-01 5.0382888317108154e-01\n            6.9513040781021118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1636 7.3744421824812889e-03 -1 -2 1637\n            8.4163323044776917e-03</internalNodes>\n          <leafValues>\n            5.2534431219100952e-01 5.0112438201904297e-01\n            7.3113328218460083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1638 5.1413988694548607e-03 -1 -2 1639\n            4.5847031287848949e-03</internalNodes>\n          <leafValues>\n            4.9535360932350159e-01 2.5355559587478638e-01\n            6.4624428749084473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1640 2.8565239161252975e-02 -1 -2 1641\n            4.3958800961263478e-04</internalNodes>\n          <leafValues>\n            2.3307220637798309e-01 4.7022441029548645e-01\n            5.5445492267608643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1642 3.1459458172321320e-02 -1 -2 1643\n            5.6011630222201347e-03</internalNodes>\n          <leafValues>\n            3.3689688891172409e-02 4.7871211171150208e-01\n            6.3383519649505615e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1644 7.1835669223219156e-04 -1 -2 1645\n            -5.5303089320659637e-03</internalNodes>\n          <leafValues>\n            5.4314869642257690e-01 4.1058328747749329e-01\n            5.4039907455444336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1646 1.4129279879853129e-03 -1 -2 1647\n            2.5530709535814822e-04</internalNodes>\n          <leafValues>\n            3.1055399775505066e-01 4.2544719576835632e-01\n            5.4471540451049805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1648 3.1966410460881889e-04 -1 -2 1649\n            5.0411392003297806e-03</internalNodes>\n          <leafValues>\n            6.1183619499206543e-01 5.2900421619415283e-01\n            4.2247870564460754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1650 7.7617880888283253e-03 -1 -2 1651\n            2.9374631121754646e-03</internalNodes>\n          <leafValues>\n            4.3153458833694458e-01 6.6292631626129150e-01\n            3.0289649963378906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1652 -1.6497720498591661e-03 -1 -2 1653\n            -5.8834417723119259e-03</internalNodes>\n          <leafValues>\n            5.4918527603149414e-01 3.1885540485382080e-01\n            5.1842892169952393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1654 8.7459187489002943e-04 -1 -2 1655\n            -1.5308779664337635e-02</internalNodes>\n          <leafValues>\n            3.3288308978080750e-01 3.9236080646514893e-01\n            5.2351391315460205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1656 3.2292451709508896e-02 -1 -2 1657\n            -4.3842519517056644e-04</internalNodes>\n          <leafValues>\n            5.9776467084884644e-01 4.5416879653930664e-01\n            5.3694289922714233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1658 1.5429529594257474e-03 -1 -2 1659\n            -2.4733028840273619e-03</internalNodes>\n          <leafValues>\n            6.3181412220001221e-01 3.4906330704689026e-01\n            4.7590249776840210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1660 2.0994939841330051e-03 -1 -2 1661\n            -5.7541108690202236e-03</internalNodes>\n          <leafValues>\n            5.8871978521347046e-01 5.9613317251205444e-01\n            4.8419830203056335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1662 -1.0233130306005478e-02 -1 -2 1663\n            2.2554509341716766e-01</internalNodes>\n          <leafValues>\n            1.7054040729999542e-01 4.7793799638748169e-01\n            9.7879663109779358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1664 2.9666559770703316e-02 -1 -2 1665\n            -2.8518449980765581e-03</internalNodes>\n          <leafValues>\n            5.8222240209579468e-01 5.4596269130706787e-01\n            4.6100661158561707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1666 9.7465328872203827e-04 -1 -2 1667\n            1.4044740055396687e-05</internalNodes>\n          <leafValues>\n            3.6703228950500488e-01 4.3023860454559326e-01\n            5.6917107105255127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1668 -1.7579430714249611e-02 -1 -2 1669\n            -5.2381679415702820e-02</internalNodes>\n          <leafValues>\n            6.9173210859298706e-01 7.1100401878356934e-01\n            5.0601547956466675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1670 -1.1242110282182693e-02 -1 -2 1671\n            -3.6728400737047195e-03</internalNodes>\n          <leafValues>\n            8.7691891193389893e-01 6.5191918611526489e-01\n            4.5460689067840576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1672 3.5082760732620955e-03 -1 -2 1673\n            6.1679710634052753e-03</internalNodes>\n          <leafValues>\n            5.3298658132553101e-01 5.2204591035842896e-01\n            2.9535189270973206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1674 -9.7009900491684675e-04 -1 -2 1675\n            -1.0957010090351105e-02</internalNodes>\n          <leafValues>\n            5.0486332178115845e-01 5.8373582363128662e-01\n            3.0200859904289246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1676 -8.3272513002157211e-03 -1 -2 1677\n            2.9798380637657829e-05</internalNodes>\n          <leafValues>\n            3.1580638885498047e-01 4.3863898515701294e-01\n            5.4432111978530884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1678 2.8244039276614785e-04 -1 -2 1679\n            -8.1364117795601487e-04</internalNodes>\n          <leafValues>\n            5.6253957748413086e-01 5.2811980247497559e-01\n            3.4014078974723816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1680 1.8008040497079492e-03 -1 -2 1681\n            -6.9944779388606548e-03</internalNodes>\n          <leafValues>\n            3.4716591238975525e-01 4.4816970825195312e-01\n            5.3857702016830444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1682 4.5625398342963308e-05 -1 -2 1683\n            -7.3189922841265798e-04</internalNodes>\n          <leafValues>\n            4.4925129413604736e-01 4.1673120856285095e-01\n            6.0211020708084106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1684 -2.9980219551362097e-04 -1 -2 1685\n            -2.9060940505587496e-05</internalNodes>\n          <leafValues>\n            4.1484281420707703e-01 5.5920898914337158e-01\n            4.0732109546661377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1686 -5.9742690064013004e-04 -1 -2 1687\n            1.4831830048933625e-04</internalNodes>\n          <leafValues>\n            6.0889142751693726e-01 5.2983051538467407e-01\n            3.7619501352310181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1688 -2.9441029764711857e-03 -1 -2 1689\n            1.3741210103034973e-01</internalNodes>\n          <leafValues>\n            4.7160848975181580e-01 5.1013368368148804e-01\n            4.6746801584959030e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1690 -8.8414177298545837e-02 -1 -2 1691\n            7.0610277354717255e-02</internalNodes>\n          <leafValues>\n            1.1818689852952957e-01 5.1190632581710815e-01\n            7.7784419059753418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1692 -7.7188978902995586e-03 -1 -2 1693\n            1.5115399844944477e-02</internalNodes>\n          <leafValues>\n            1.8741349875926971e-01 4.9800279736518860e-01\n            7.0058178901672363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1694 1.0671879863366485e-03 -1 -2 1695\n            7.0487911580130458e-04</internalNodes>\n          <leafValues>\n            4.4822388887405396e-01 6.2657529115676880e-01\n            4.4026550650596619e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>90</maxWeakCount>\n      <stageThreshold>4.4251281738281250e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            1 0 1696 -9.8690733313560486e-02 -1 -2 1697\n            6.2373418360948563e-02</internalNodes>\n          <leafValues>\n            3.9994749426841736e-01 5.2477848529815674e-01\n            8.1935757398605347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1698 1.9496519817039371e-03 -1 -2 1699\n            -8.9139147894456983e-04</internalNodes>\n          <leafValues>\n            3.5298168659210205e-01 5.8527278900146484e-01\n            3.2459780573844910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1700 -5.5150408297777176e-04 -1 -2 1701\n            -1.1721949558705091e-03</internalNodes>\n          <leafValues>\n            3.8928169012069702e-01 4.3350520730018616e-01\n            6.5206241607666016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1702 -7.4480642797425389e-04 -1 -2 1703\n            -2.6264840271323919e-03</internalNodes>\n          <leafValues>\n            4.0411350131034851e-01 5.6249821186065674e-01\n            3.9675250649452209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1704 -3.9712688885629177e-04 -1 -2 1705\n            3.5984949208796024e-03</internalNodes>\n          <leafValues>\n            3.8561120629310608e-01 5.9978890419006348e-01\n            4.2416140437126160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1706 5.3080618381500244e-03 -1 -2 1707\n            9.6319877775385976e-04</internalNodes>\n          <leafValues>\n            6.6601687669754028e-01 4.4813790917396545e-01\n            5.5834877490997314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1708 5.0776469288393855e-04 -1 -2 1709\n            3.6223160568624735e-03</internalNodes>\n          <leafValues>\n            3.5354590415954590e-01 3.4098070859909058e-01\n            5.4206877946853638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1710 -6.2061410397291183e-02 -1 -2 1711\n            6.4387189922854304e-04</internalNodes>\n          <leafValues>\n            1.9340839982032776e-01 4.0836268663406372e-01\n            5.4902219772338867e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1712 2.6239909231662750e-02 -1 -2 1713\n            8.1940297968685627e-04</internalNodes>\n          <leafValues>\n            2.2857080399990082e-01 4.6486678719520569e-01\n            6.0173559188842773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1714 2.3833119485061616e-04 -1 -2 1715\n            -1.5869759954512119e-03</internalNodes>\n          <leafValues>\n            3.5980388522148132e-01 4.2596510052680969e-01\n            5.4764348268508911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1716 -6.7263417877256870e-03 -1 -2 1717\n            1.1006110347807407e-02</internalNodes>\n          <leafValues>\n            6.5072381496429443e-01 5.1494097709655762e-01\n            3.3629849553108215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1718 7.1445819921791553e-03 -1 -2 1719\n            -4.7233798541128635e-03</internalNodes>\n          <leafValues>\n            2.6729300618171692e-01 5.6521821022033691e-01\n            4.2981448769569397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1720 9.8437406122684479e-03 -1 -2 1721\n            1.5124640412977897e-05</internalNodes>\n          <leafValues>\n            1.1518859863281250e-01 4.3735980987548828e-01\n            5.6121289730072021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1722 3.9908871054649353e-02 -1 -2 1723\n            5.3903679363429546e-03</internalNodes>\n          <leafValues>\n            5.2046489715576172e-01 4.8134678602218628e-01\n            6.3612091541290283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1724 -3.9908871054649353e-02 -1 -2 1725\n            5.3903679363429546e-03</internalNodes>\n          <leafValues>\n            1.5068709850311279e-01 4.5816949009895325e-01\n            6.2002408504486084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1726 6.7005190066993237e-03 -1 -2 1727\n            -1.2623789720237255e-02</internalNodes>\n          <leafValues>\n            3.4322351217269897e-01 3.0882269144058228e-01\n            5.2267378568649292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1728 1.1806610040366650e-02 -1 -2 1729\n            -3.4257229417562485e-03</internalNodes>\n          <leafValues>\n            7.1879392862319946e-01 3.1208148598670959e-01\n            5.0658440589904785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1730 3.9385299896821380e-04 -1 -2 1731\n            3.4388188272714615e-02</internalNodes>\n          <leafValues>\n            4.7545841336250305e-01 5.2616578340530396e-01\n            3.3501741290092468e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1732 -7.5009986758232117e-02 -1 -2 1733\n            4.9022492021322250e-04</internalNodes>\n          <leafValues>\n            1.7134809494018555e-01 4.7258019447326660e-01\n            5.9564691781997681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1734 -8.5525289177894592e-03 -1 -2 1735\n            1.3135520566720515e-04</internalNodes>\n          <leafValues>\n            6.5582227706909180e-01 4.8354008793830872e-01\n            5.5869138240814209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1736 4.7948658466339111e-03 -1 -2 1737\n            2.0124691072851419e-03</internalNodes>\n          <leafValues>\n            2.6457059383392334e-01 3.6579450964927673e-01\n            5.1247721910476685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1738 -1.1785479635000229e-01 -1 -2 1739\n            1.5575019642710686e-03</internalNodes>\n          <leafValues>\n            2.3856540024280548e-01 5.4904741048812866e-01\n            4.2747479677200317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1740 -1.5573759563267231e-02 -1 -2 1741\n            -2.1854790393263102e-03</internalNodes>\n          <leafValues>\n            6.9389009475708008e-01 3.6459881067276001e-01\n            5.0925260782241821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1742 2.9272339306771755e-03 -1 -2 1743\n            6.4663668163120747e-03</internalNodes>\n          <leafValues>\n            4.6858081221580505e-01 4.9734100699424744e-01\n            7.7260971069335938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1744 -7.6140360906720161e-03 -1 -2 1745\n            4.1512572206556797e-03</internalNodes>\n          <leafValues>\n            6.8774658441543579e-01 4.7885251045227051e-01\n            6.9216579198837280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1746 2.7711640577763319e-03 -1 -2 1747\n            -1.2836109846830368e-02</internalNodes>\n          <leafValues>\n            5.4818397760391235e-01 3.8001629710197449e-01\n            5.2044928073883057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1748 -2.4380050599575043e-03 -1 -2 1749\n            2.1713329479098320e-03</internalNodes>\n          <leafValues>\n            2.5824350118637085e-01 4.9611631035804749e-01\n            3.2152029871940613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1750 6.2800728483125567e-04 -1 -2 1751\n            -9.7982389852404594e-03</internalNodes>\n          <leafValues>\n            5.4604238271713257e-01 6.0465437173843384e-01\n            4.9399220943450928e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1752 7.3543828912079334e-03 -1 -2 1753\n            -1.4665040187537670e-02</internalNodes>\n          <leafValues>\n            5.2910941839218140e-01 5.4461228847503662e-01\n            3.5673621296882629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1754 3.0244510620832443e-02 -1 -2 1755\n            -5.6660208851099014e-02</internalNodes>\n          <leafValues>\n            5.5183291435241699e-01 6.9309788942337036e-01\n            5.0933879613876343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1756 -5.6967479176819324e-03 -1 -2 1757\n            3.0806770548224449e-02</internalNodes>\n          <leafValues>\n            3.2015261054039001e-01 4.9892461299896240e-01\n            2.2770540416240692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1758 2.2748769260942936e-03 -1 -2 1759\n            2.0436900667846203e-03</internalNodes>\n          <leafValues>\n            4.8109310865402222e-01 5.2838671207427979e-01\n            3.2559248805046082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1760 -8.6277956143021584e-03 -1 -2 1761\n            6.5113382879644632e-04</internalNodes>\n          <leafValues>\n            6.2665361166000366e-01 5.0971370935440063e-01\n            3.1919100880622864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1762 8.8188261725008488e-04 -1 -2 1763\n            -1.4594909735023975e-02</internalNodes>\n          <leafValues>\n            4.5495858788490295e-01 2.6450389623641968e-01\n            5.1538681983947754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1764 -1.2304580304771662e-03 -1 -2 1765\n            -2.1867299801670015e-04</internalNodes>\n          <leafValues>\n            6.1975848674774170e-01 5.4691988229751587e-01\n            4.2068558931350708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1766 -1.0909959673881531e-03 -1 -2 1767\n            3.5210378700867295e-04</internalNodes>\n          <leafValues>\n            4.1407600045204163e-01 5.4766088724136353e-01\n            4.1550210118293762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1768 -7.2563779540359974e-03 -1 -2 1769\n            1.4701850013807416e-03</internalNodes>\n          <leafValues>\n            7.1604692935943604e-01 5.2408081293106079e-01\n            3.7296628952026367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1770 1.1472719779703766e-04 -1 -2 1771\n            3.0506469774991274e-03</internalNodes>\n          <leafValues>\n            4.0337988734245300e-01 5.2639859914779663e-01\n            3.5600930452346802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1772 2.6269949739798903e-04 -1 -2 1773\n            -3.6365550477057695e-03</internalNodes>\n          <leafValues>\n            4.5697999000549316e-01 3.0425709486007690e-01\n            5.8682537078857422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1774 -8.4893293678760529e-03 -1 -2 1775\n            5.8107408694922924e-03</internalNodes>\n          <leafValues>\n            4.9141570925712585e-01 4.9185299873352051e-01\n            6.2669628858566284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1776 7.5583951547741890e-04 -1 -2 1777\n            -2.2017690353095531e-03</internalNodes>\n          <leafValues>\n            5.6332361698150635e-01 5.5539160966873169e-01\n            3.8276460766792297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1778 2.7908938936889172e-03 -1 -2 1779\n            -1.8228569533675909e-03</internalNodes>\n          <leafValues>\n            5.4986977577209473e-01 4.3822830915451050e-01\n            5.4240328073501587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1780 -7.2495508939027786e-03 -1 -2 1781\n            -6.8744522286579013e-04</internalNodes>\n          <leafValues>\n            2.8881219029426575e-01 3.4726551175117493e-01\n            5.0763708353042603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1782 2.5174440816044807e-03 -1 -2 1783\n            -1.0151379741728306e-02</internalNodes>\n          <leafValues>\n            4.6612051129341125e-01 3.7447750568389893e-01\n            5.2940011024475098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1784 -4.1399952024221420e-03 -1 -2 1785\n            -4.7078551724553108e-03</internalNodes>\n          <leafValues>\n            4.6604850888252258e-01 4.1750618815422058e-01\n            6.9163060188293457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1786 4.1981041431427002e-02 -1 -2 1787\n            -1.4272999949753284e-02</internalNodes>\n          <leafValues>\n            2.0182150602340698e-01 7.5111979246139526e-01\n            5.0320839881896973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1788 4.0869521908462048e-03 -1 -2 1789\n            1.7606799956411123e-03</internalNodes>\n          <leafValues>\n            2.5045138597488403e-01 3.3014011383056641e-01\n            5.2183371782302856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1790 1.2550549581646919e-04 -1 -2 1791\n            -2.9503209516406059e-03</internalNodes>\n          <leafValues>\n            4.6144428849220276e-01 4.6199500560760498e-01\n            5.2470302581787109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1792 -1.1312420247122645e-03 -1 -2 1793\n            -1.6983180539682508e-03</internalNodes>\n          <leafValues>\n            6.3143682479858398e-01 3.4013068675994873e-01\n            5.0555270910263062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1794 -1.1457820422947407e-02 -1 -2 1795\n            -8.4962565451860428e-03</internalNodes>\n          <leafValues>\n            4.9399960041046143e-01 2.9654508829116821e-01\n            5.1943677663803101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1796 1.1919089592993259e-02 -1 -2 1797\n            6.4416420646011829e-03</internalNodes>\n          <leafValues>\n            7.8869980573654175e-01 5.1069867610931396e-01\n            2.9671460390090942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1798 -8.7857811013236642e-04 -1 -2 1799\n            -2.0312711130827665e-03</internalNodes>\n          <leafValues>\n            5.7143712043762207e-01 4.4812008738517761e-01\n            5.3849118947982788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1800 -1.5262430533766747e-03 -1 -2 1801\n            4.2860880494117737e-03</internalNodes>\n          <leafValues>\n            6.1935687065124512e-01 4.3398851156234741e-01\n            7.6972991228103638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1802 3.5010920837521553e-03 -1 -2 1803\n            1.2587670236825943e-02</internalNodes>\n          <leafValues>\n            3.1713891029357910e-01 5.2466988563537598e-01\n            4.2412081360816956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1804 2.6207490009255707e-04 -1 -2 1805\n            4.4701730075757951e-05</internalNodes>\n          <leafValues>\n            4.2318999767303467e-01 4.1741389036178589e-01\n            5.9196037054061890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1806 7.8084698179736733e-04 -1 -2 1807\n            8.8851212058216333e-04</internalNodes>\n          <leafValues>\n            4.2773890495300293e-01 3.7201610207557678e-01\n            5.2268189191818237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1808 2.3369069676846266e-03 -1 -2 1809\n            1.6688359901309013e-03</internalNodes>\n          <leafValues>\n            5.4780668020248413e-01 3.6286789178848267e-01\n            6.1500048637390137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1810 3.0844469438306987e-04 -1 -2 1811\n            3.4617560449987650e-03</internalNodes>\n          <leafValues>\n            4.7470751404762268e-01 4.5801380276679993e-01\n            5.5856817960739136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1812 1.8961310386657715e-02 -1 -2 1813\n            1.7347310483455658e-01</internalNodes>\n          <leafValues>\n            5.2988010644912720e-01 3.6983850598335266e-01\n            8.4986197948455811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1814 2.0020549709443003e-04 -1 -2 1815\n            1.0967060225084424e-03</internalNodes>\n          <leafValues>\n            5.5656617879867554e-01 4.7957131266593933e-01\n            6.2862598896026611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1816 1.5107099898159504e-04 -1 -2 1817\n            -3.4463501069694757e-03</internalNodes>\n          <leafValues>\n            4.0524059534072876e-01 6.1730152368545532e-01\n            4.4142639636993408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1818 8.5176620632410049e-03 -1 -2 1819\n            -3.5812109708786011e-02</internalNodes>\n          <leafValues>\n            3.5705709457397461e-01 3.1513288617134094e-01\n            5.2527028322219849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1820 -2.1155400201678276e-02 -1 -2 1821\n            8.9890940580517054e-04</internalNodes>\n          <leafValues>\n            6.1247211694717407e-01 5.1699757575988770e-01\n            3.5962718725204468e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1822 -1.5613760333508253e-03 -1 -2 1823\n            6.7120860330760479e-04</internalNodes>\n          <leafValues>\n            4.9149879813194275e-01 4.5462110638618469e-01\n            5.3958117961883545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1824 -2.1597029641270638e-02 -1 -2 1825\n            -2.4947229772806168e-02</internalNodes>\n          <leafValues>\n            1.9031339883804321e-01 6.9740772247314453e-01\n            4.9677160382270813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1826 1.8725979607552290e-03 -1 -2 1827\n            6.3912719488143921e-03</internalNodes>\n          <leafValues>\n            4.7489479184150696e-01 5.1801782846450806e-01\n            2.9243218898773193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1828 -9.1552399098873138e-03 -1 -2 1829\n            2.1715660113841295e-03</internalNodes>\n          <leafValues>\n            7.6658701896667480e-01 5.2155512571334839e-01\n            3.3657190203666687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1830 1.2330369791015983e-03 -1 -2 1831\n            -4.0785901364870369e-04</internalNodes>\n          <leafValues>\n            6.2609577178955078e-01 4.5335099101066589e-01\n            5.3864890336990356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1832 4.6437609125860035e-04 -1 -2 1833\n            -1.1600199650274590e-04</internalNodes>\n          <leafValues>\n            4.1034960746765137e-01 5.8303910493850708e-01\n            4.3041059374809265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1834 -1.2718720361590385e-02 -1 -2 1835\n            8.9431880041956902e-05</internalNodes>\n          <leafValues>\n            2.1325829625129700e-01 4.8728910088539124e-01\n            5.4589152336120605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1836 -3.3913689549081028e-04 -1 -2 1837\n            -1.8026340752840042e-02</internalNodes>\n          <leafValues>\n            3.9743649959564209e-01 7.5685507059097290e-01\n            5.0456118583679199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1838 6.9179181009531021e-03 -1 -2 1839\n            -1.1839679791592062e-04</internalNodes>\n          <leafValues>\n            3.9662998914718628e-01 4.1980829834938049e-01\n            5.4358041286468506e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1840 -3.9474181830883026e-03 -1 -2 1841\n            6.0050919273635373e-05</internalNodes>\n          <leafValues>\n            6.3694578409194946e-01 5.2695667743682861e-01\n            3.8122430443763733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1842 9.1423643752932549e-03 -1 -2 1843\n            2.1305440168362111e-04</internalNodes>\n          <leafValues>\n            4.1567629575729370e-01 3.5235330462455750e-01\n            5.3494542837142944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1844 -2.0855850016232580e-04 -1 -2 1845\n            1.3130389852449298e-03</internalNodes>\n          <leafValues>\n            4.4033220410346985e-01 6.0581612586975098e-01\n            4.4682189822196960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1846 -2.9134768992662430e-03 -1 -2 1847\n            2.9645769391208887e-03</internalNodes>\n          <leafValues>\n            4.8257058858871460e-01 4.8359981179237366e-01\n            6.0392779111862183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1848 1.7772549763321877e-03 -1 -2 1849\n            -7.7136349864304066e-03</internalNodes>\n          <leafValues>\n            6.8718272447586060e-01 2.8422209620475769e-01\n            5.1454281806945801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1850 5.1027478184551001e-04 -1 -2 1851\n            1.7460630042478442e-03</internalNodes>\n          <leafValues>\n            6.0244262218475342e-01 4.7566100955009460e-01\n            5.7211542129516602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1852 3.8068278809078038e-04 -1 -2 1853\n            2.8228890150785446e-03</internalNodes>\n          <leafValues>\n            4.9310690164566040e-01 3.3116981387138367e-01\n            6.2275981903076172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1854 -5.3000478073954582e-03 -1 -2 1855\n            4.4951299059903249e-05</internalNodes>\n          <leafValues>\n            5.2320927381515503e-01 3.9952319860458374e-01\n            5.3147977590560913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1856 3.2752458937466145e-03 -1 -2 1857\n            -2.8162579983472824e-03</internalNodes>\n          <leafValues>\n            4.4816198945045471e-01 3.9079719781875610e-01\n            6.6716408729553223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1858 1.4112279750406742e-03 -1 -2 1859\n            8.3062034100294113e-03</internalNodes>\n          <leafValues>\n            5.3570109605789185e-01 4.7709658741950989e-01\n            5.5700999498367310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1860 2.2164839319884777e-03 -1 -2 1861\n            -4.9868631176650524e-03</internalNodes>\n          <leafValues>\n            4.9471241235733032e-01 5.2413070201873779e-01\n            2.5126549601554871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1862 -3.6664260551333427e-03 -1 -2 1863\n            -1.0581229813396931e-02</internalNodes>\n          <leafValues>\n            4.6195539832115173e-01 6.3017189502716064e-01\n            4.9730318784713745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1864 7.3366491124033928e-03 -1 -2 1865\n            -3.9318940252996981e-04</internalNodes>\n          <leafValues>\n            2.8709700703620911e-01 4.2528051137924194e-01\n            5.5792468786239624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1866 -8.1375334411859512e-03 -1 -2 1867\n            2.4809150490909815e-03</internalNodes>\n          <leafValues>\n            5.7473158836364746e-01 5.2033740282058716e-01\n            3.9035668969154358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1868 8.8749779388308525e-04 -1 -2 1869\n            -4.2194919660687447e-04</internalNodes>\n          <leafValues>\n            5.5343210697174072e-01 5.3380441665649414e-01\n            3.9258408546447754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1870 -7.9790111631155014e-03 -1 -2 1871\n            1.1439629597589374e-03</internalNodes>\n          <leafValues>\n            4.1443160176277161e-01 4.7013729810714722e-01\n            5.2817362546920776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1872 7.5542130507528782e-03 -1 -2 1873\n            1.0288399644196033e-03</internalNodes>\n          <leafValues>\n            2.5272560119628906e-01 5.6051462888717651e-01\n            4.2978560924530029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1874 -1.7234670231118798e-03 -1 -2 1875\n            5.7586699724197388e-01</internalNodes>\n          <leafValues>\n            4.8396828770637512e-01 5.1105028390884399e-01\n            8.0489329993724823e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>109</maxWeakCount>\n      <stageThreshold>5.3755569458007812e+01</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 1 1876 6.6640521399676800e-03 -1 -2 1877\n            8.9905522763729095e-03</internalNodes>\n          <leafValues>\n            3.8289201259613037e-01 4.8584291338920593e-01\n            7.3549592494964600e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1878 5.7154200039803982e-03 -1 -2 1879\n            1.1257929727435112e-03</internalNodes>\n          <leafValues>\n            6.7232239246368408e-01 4.4295778870582581e-01\n            6.0707777738571167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1880 -9.1789010912179947e-04 -1 -2 1881\n            -1.0492859873920679e-03</internalNodes>\n          <leafValues>\n            3.0763450264930725e-01 5.5936437845230103e-01\n            3.6510229110717773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1882 3.5453929740469903e-05 -1 -2 1883\n            2.9015709878876805e-04</internalNodes>\n          <leafValues>\n            4.2779681086540222e-01 4.5835450291633606e-01\n            5.2846831083297729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1884 1.6071660502348095e-04 -1 -2 1885\n            -5.2961107576265931e-04</internalNodes>\n          <leafValues>\n            3.7981921434402466e-01 3.8504371047019958e-01\n            5.9396880865097046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1886 2.6682569296099246e-04 -1 -2 1887\n            -1.3492540165316314e-04</internalNodes>\n          <leafValues>\n            4.1230249404907227e-01 5.7605999708175659e-01\n            4.2376458644866943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1888 -1.0841679759323597e-02 -1 -2 1889\n            1.2077829800546169e-02</internalNodes>\n          <leafValues>\n            3.9299210906028748e-01 5.7619231939315796e-01\n            2.7804449200630188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1890 2.2128869313746691e-03 -1 -2 1891\n            -1.5266190283000469e-02</internalNodes>\n          <leafValues>\n            4.7945070266723633e-01 7.4055880308151245e-02\n            5.1535779237747192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1892 6.7929533543065190e-05 -1 -2 1893\n            1.7633590323384851e-04</internalNodes>\n          <leafValues>\n            5.8587378263473511e-01 3.5676109790802002e-01\n            5.5989629030227661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1894 8.1311381654813886e-04 -1 -2 1895\n            3.2630451023578644e-03</internalNodes>\n          <leafValues>\n            5.3468507528305054e-01 4.7825369238853455e-01\n            5.4567539691925049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1896 -3.9503918960690498e-03 -1 -2 1897\n            -3.9864578866399825e-04</internalNodes>\n          <leafValues>\n            2.8318119049072266e-01 5.4852157831192017e-01\n            4.1596978902816772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1898 -1.1432520113885403e-02 -1 -2 1899\n            5.3339172154664993e-03</internalNodes>\n          <leafValues>\n            5.6391012668609619e-01 4.5969840884208679e-01\n            5.9312427043914795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1900 8.3193257451057434e-03 -1 -2 1901\n            -4.2479918920435011e-04</internalNodes>\n          <leafValues>\n            3.2306200265884399e-01 3.7952938675880432e-01\n            5.4086112976074219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1902 -1.1189430207014084e-01 -1 -2 1903\n            -7.5553781352937222e-03</internalNodes>\n          <leafValues>\n            1.1322979629039764e-01 6.3393700122833252e-01\n            4.8387709259986877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1904 -7.0337029173970222e-03 -1 -2 1905\n            -1.4833680354058743e-02</internalNodes>\n          <leafValues>\n            5.6652551889419556e-01 6.7514181137084961e-01\n            4.1409450769424438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1906 8.7506724521517754e-03 -1 -2 1907\n            1.6645010327920318e-03</internalNodes>\n          <leafValues>\n            3.5612589120864868e-01 5.3472799062728882e-01\n            3.6497798562049866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1908 9.4900820404291153e-03 -1 -2 1909\n            1.1133110383525491e-03</internalNodes>\n          <leafValues>\n            2.7546560764312744e-01 4.2259928584098816e-01\n            5.6291788816452026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1910 9.4940755516290665e-03 -1 -2 1911\n            -1.5396620146930218e-03</internalNodes>\n          <leafValues>\n            4.9060368537902832e-01 4.0070518851280212e-01\n            5.3807091712951660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1912 1.3434959948062897e-01 -1 -2 1913\n            -9.4940755516290665e-03</internalNodes>\n          <leafValues>\n            2.2146719694137573e-01 7.3531562089920044e-01\n            5.0050330162048340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1914 2.0011790096759796e-02 -1 -2 1915\n            -1.8875009845942259e-03</internalNodes>\n          <leafValues>\n            3.3279061317443848e-01 3.9152890443801880e-01\n            5.4018497467041016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1916 7.1842782199382782e-03 -1 -2 1917\n            1.6976969782263041e-03</internalNodes>\n          <leafValues>\n            7.1766048669815063e-01 4.5269781351089478e-01\n            6.0769128799438477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1918 4.9219978973269463e-03 -1 -2 1919\n            1.1803199537098408e-02</internalNodes>\n          <leafValues>\n            2.5698339939117432e-01 4.9996379017829895e-01\n            5.9582281112670898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1920 -9.7703449428081512e-03 -1 -2 1921\n            2.1174899302423000e-03</internalNodes>\n          <leafValues>\n            3.4590938687324524e-01 4.5151269435882568e-01\n            5.8297157287597656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1922 9.4801411032676697e-03 -1 -2 1923\n            -2.6078789960592985e-03</internalNodes>\n          <leafValues>\n            4.8073920607566833e-01 3.4622168540954590e-01\n            5.2015948295593262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1924 -5.7252747938036919e-03 -1 -2 1925\n            -8.2325618714094162e-03</internalNodes>\n          <leafValues>\n            6.5998530387878418e-01 2.8218281269073486e-01\n            5.1252847909927368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1926 8.9571950957179070e-04 -1 -2 1927\n            -1.5021569561213255e-04</internalNodes>\n          <leafValues>\n            4.8838189244270325e-01 4.8299181461334229e-01\n            5.4287171363830566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1928 4.8489659093320370e-04 -1 -2 1929\n            -9.6192650496959686e-02</internalNodes>\n          <leafValues>\n            4.4345989823341370e-01 2.2566360235214233e-01\n            5.9562277793884277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1930 -1.1053519556298852e-03 -1 -2 1931\n            -1.0215040296316147e-01</internalNodes>\n          <leafValues>\n            4.5272240042686462e-01 2.8443491458892822e-01\n            5.1864528656005859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1932 3.0147889629006386e-03 -1 -2 1933\n            7.6131648384034634e-03</internalNodes>\n          <leafValues>\n            3.8089990615844727e-01 5.7186990976333618e-01\n            4.2625638842582703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1934 1.5197630273178220e-03 -1 -2 1935\n            -1.4197279699146748e-02</internalNodes>\n          <leafValues>\n            5.9427189826965332e-01 7.7311038970947266e-01\n            4.9976539611816406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1936 -1.3818879611790180e-02 -1 -2 1937\n            -5.0701329018920660e-04</internalNodes>\n          <leafValues>\n            6.6811382770538330e-01 3.3056080341339111e-01\n            4.7499749064445496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1938 -9.3537531793117523e-03 -1 -2 1939\n            -9.4771059229969978e-03</internalNodes>\n          <leafValues>\n            2.8609329462051392e-01 6.1888831853866577e-01\n            4.8421001434326172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1940 1.6923650400713086e-03 -1 -2 1941\n            5.8652542065829039e-04</internalNodes>\n          <leafValues>\n            6.0702490806579590e-01 3.7826898694038391e-01\n            5.3681969642639160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1942 -2.5826620403677225e-03 -1 -2 1943\n            -2.7307639829814434e-03</internalNodes>\n          <leafValues>\n            3.6902099847793579e-01 3.8571149110794067e-01\n            5.3181087970733643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1944 2.1871570497751236e-02 -1 -2 1945\n            -1.5010299648565706e-05</internalNodes>\n          <leafValues>\n            2.3270089924335480e-01 5.5607229471206665e-01\n            4.3014100193977356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1946 5.3583700209856033e-03 -1 -2 1947\n            5.0057549960911274e-03</internalNodes>\n          <leafValues>\n            6.7676377296447754e-01 5.1949042081832886e-01\n            3.6128538846969604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1948 -1.9030070398002863e-03 -1 -2 1949\n            -7.8506693243980408e-03</internalNodes>\n          <leafValues>\n            3.2378450036048889e-01 1.1948519945144653e-01\n            4.9917238950729370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1950 -2.7093670796602964e-03 -1 -2 1951\n            1.4138079714030027e-03</internalNodes>\n          <leafValues>\n            4.8549601435661316e-01 4.8723229765892029e-01\n            5.9035778045654297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1952 9.0300198644399643e-03 -1 -2 1953\n            -9.7925681620836258e-04</internalNodes>\n          <leafValues>\n            6.5473157167434692e-01 5.8492732048034668e-01\n            4.5542308688163757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1954 1.3984439428895712e-03 -1 -2 1955\n            8.3372107474133372e-04</internalNodes>\n          <leafValues>\n            4.0646260976791382e-01 5.3995430469512939e-01\n            4.1528099775314331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1956 1.0551059618592262e-02 -1 -2 1957\n            8.8344102550763637e-05</internalNodes>\n          <leafValues>\n            1.7966809868812561e-01 4.2518630623817444e-01\n            5.4135227203369141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1958 -4.1022308170795441e-02 -1 -2 1959\n            7.5065628625452518e-03</internalNodes>\n          <leafValues>\n            5.2281248569488525e-01 4.8537430167198181e-01\n            6.0934442281723022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1960 4.1022308170795441e-02 -1 -2 1961\n            -5.3961377125233412e-04</internalNodes>\n          <leafValues>\n            2.2050240635871887e-01 5.6927317380905151e-01\n            4.4687569141387939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1962 -6.8696036934852600e-02 -1 -2 1963\n            -1.8447940237820148e-03</internalNodes>\n          <leafValues>\n            1.4833140373229980e-01 6.2112838029861450e-01\n            4.9666011333465576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1964 -6.0959919355809689e-03 -1 -2 1965\n            -4.2068301700055599e-03</internalNodes>\n          <leafValues>\n            2.2946719825267792e-01 6.4070910215377808e-01\n            4.7485628724098206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1966 -7.1332789957523346e-04 -1 -2 1967\n            1.1756779998540878e-01</internalNodes>\n          <leafValues>\n            5.3549361228942871e-01 5.1369780302047729e-01\n            1.0595739819109440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1968 5.9354289987822995e-05 -1 -2 1969\n            -6.3173691742122173e-03</internalNodes>\n          <leafValues>\n            3.7118038535118103e-01 1.7120739817619324e-01\n            5.0617581605911255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1970 1.4941499568521976e-02 -1 -2 1971\n            -2.0789399277418852e-03</internalNodes>\n          <leafValues>\n            6.7291188240051270e-01 4.4106459617614746e-01\n            5.4440277814865112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1972 -7.0736219640821218e-04 -1 -2 1973\n            -3.1247111037373543e-03</internalNodes>\n          <leafValues>\n            5.5689108371734619e-01 5.0238692760467529e-01\n            3.5624051094055176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1974 -7.8919378574937582e-04 -1 -2 1975\n            1.0179580189287663e-02</internalNodes>\n          <leafValues>\n            5.4567861557006836e-01 5.5451387166976929e-01\n            4.6223109960556030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1976 -2.7506109327077866e-03 -1 -2 1977\n            1.0601329617202282e-02</internalNodes>\n          <leafValues>\n            4.9425360560417175e-01 2.9612338542938232e-01\n            5.9643387794494629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1978 5.1466780714690685e-03 -1 -2 1979\n            7.6321147382259369e-02</internalNodes>\n          <leafValues>\n            5.4952287673950195e-01 5.1739591360092163e-01\n            2.9402169585227966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1980 -1.5027689514681697e-03 -1 -2 1981\n            1.2266670353710651e-02</internalNodes>\n          <leafValues>\n            3.1062999367713928e-01 4.6511501073837280e-01\n            6.8466138839721680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1982 -3.1118579208850861e-02 -1 -2 1983\n            2.8905589133501053e-02</internalNodes>\n          <leafValues>\n            5.2260571718215942e-01 5.1822441816329956e-01\n            2.7054280042648315e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1984 4.7598380595445633e-02 -1 -2 1985\n            3.0808549374341965e-02</internalNodes>\n          <leafValues>\n            1.1095120012760162e-01 4.9386250972747803e-01\n            1.4041109383106232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1986 -2.1277810446918011e-04 -1 -2 1987\n            7.8969962894916534e-02</internalNodes>\n          <leafValues>\n            4.3923568725585938e-01 5.2165520191192627e-01\n            2.2941139340400696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1988 -1.0257950052618980e-02 -1 -2 1989\n            1.2604889925569296e-03</internalNodes>\n          <leafValues>\n            6.1766529083251953e-01 5.2362227439880371e-01\n            3.3289659023284912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1990 -3.3490460366010666e-02 -1 -2 1991\n            -5.9202767442911863e-04</internalNodes>\n          <leafValues>\n            4.8661869764328003e-01 4.1164070367813110e-01\n            5.3956401348114014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1992 3.0320750738610514e-05 -1 -2 1993\n            -5.4369680583477020e-04</internalNodes>\n          <leafValues>\n            5.6107360124588013e-01 5.6213891506195068e-01\n            3.4612038731575012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1994 -3.3490460366010666e-02 -1 -2 1995\n            -5.9202767442911863e-04</internalNodes>\n          <leafValues>\n            4.8967620730400085e-01 4.3054041266441345e-01\n            5.3407138586044312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 1996 2.0550889894366264e-03 -1 -2 1997\n            -4.4353571720421314e-03</internalNodes>\n          <leafValues>\n            5.5449998378753662e-01 6.0385400056838989e-01\n            3.7465929985046387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 1998 -8.4170423448085785e-02 -1 -2 1999\n            6.7419027909636497e-03</internalNodes>\n          <leafValues>\n            5.0073480606079102e-01 5.2980971336364746e-01\n            4.7161450982093811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2000 1.0278150439262390e-02 -1 -2 2001\n            5.8800862170755863e-03</internalNodes>\n          <leafValues>\n            6.2693750858306885e-01 5.1548278331756592e-01\n            3.8130408525466919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2002 -6.9679190346505493e-06 -1 -2 2003\n            8.2419527461752295e-04</internalNodes>\n          <leafValues>\n            4.4402399659156799e-01 4.6975341439247131e-01\n            5.4855042695999146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2004 -5.5268318392336369e-03 -1 -2 2005\n            9.6128671430051327e-04</internalNodes>\n          <leafValues>\n            5.5136048793792725e-01 3.6186391115188599e-01\n            5.8384567499160767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2006 2.4810510221868753e-03 -1 -2 2007\n            -1.0480589699000120e-03</internalNodes>\n          <leafValues>\n            2.5232228636741638e-01 4.1172578930854797e-01\n            5.3929960727691650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2008 -6.1287907883524895e-03 -1 -2 2009\n            1.1682329932227731e-04</internalNodes>\n          <leafValues>\n            6.7263299226760864e-01 5.0411927700042725e-01\n            3.6077290773391724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2010 -3.9909478276968002e-02 -1 -2 2011\n            1.5859459526836872e-03</internalNodes>\n          <leafValues>\n            1.5637390315532684e-01 4.8919808864593506e-01\n            5.7798451185226440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2012 -2.2690229117870331e-02 -1 -2 2013\n            2.0916070789098740e-03</internalNodes>\n          <leafValues>\n            2.1868790686130524e-01 4.7715771198272705e-01\n            6.0992312431335449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2014 -2.4715419858694077e-02 -1 -2 2015\n            -1.3419450260698795e-02</internalNodes>\n          <leafValues>\n            3.4639969468116760e-01 3.6306929588317871e-01\n            5.2521961927413940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2016 -6.0629472136497498e-03 -1 -2 2017\n            -2.0921030081808567e-03</internalNodes>\n          <leafValues>\n            6.6663217544555664e-01 3.3995470404624939e-01\n            5.0356978178024292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2018 2.5961859151721001e-02 -1 -2 2019\n            1.7908669542521238e-04</internalNodes>\n          <leafValues>\n            5.0368028879165649e-01 5.4185307025909424e-01\n            4.3189769983291626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2020 -3.1546850223094225e-03 -1 -2 2021\n            -1.1397759662941098e-03</internalNodes>\n          <leafValues>\n            7.2210252285003662e-01 3.3209729194641113e-01\n            5.0244337320327759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2022 -4.7840211540460587e-02 -1 -2 2023\n            4.1577088995836675e-04</internalNodes>\n          <leafValues>\n            1.9387650489807129e-01 4.8021888732910156e-01\n            5.7307147979736328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2024 -4.4247039477340877e-04 -1 -2 2025\n            1.4479350065812469e-03</internalNodes>\n          <leafValues>\n            4.2625150084495544e-01 5.7191711664199829e-01\n            4.0641531348228455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2026 1.5701510012149811e-02 -1 -2 2027\n            2.7805729769170284e-04</internalNodes>\n          <leafValues>\n            4.9957260489463806e-01 5.2892869710922241e-01\n            4.5817288756370544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2028 -2.9010509606450796e-03 -1 -2 2029\n            2.0830519497394562e-04</internalNodes>\n          <leafValues>\n            6.0121482610702515e-01 5.0579768419265747e-01\n            3.5994321107864380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2030 -5.1530029624700546e-02 -1 -2 2031\n            1.7163449956569821e-04</internalNodes>\n          <leafValues>\n            4.9917969107627869e-01 4.6754699945449829e-01\n            5.3747731447219849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2032 2.3614279925823212e-02 -1 -2 2033\n            -5.6427798699587584e-04</internalNodes>\n          <leafValues>\n            6.5864789485931396e-01 3.8532960414886475e-01\n            5.1960402727127075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2034 6.6903959959745407e-03 -1 -2 2035\n            -4.8789530992507935e-03</internalNodes>\n          <leafValues>\n            6.0042357444763184e-01 3.2932278513908386e-01\n            5.2452367544174194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2036 -6.8537332117557526e-03 -1 -2 2037\n            9.9893810693174601e-04</internalNodes>\n          <leafValues>\n            2.5659140944480896e-01 4.6154940128326416e-01\n            5.9424322843551636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2038 -1.3354700058698654e-04 -1 -2 2039\n            1.0165109997615218e-03</internalNodes>\n          <leafValues>\n            5.4873758554458618e-01 4.5783591270446777e-01\n            5.4269278049468994e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2040 9.1216771397739649e-04 -1 -2 2041\n            1.0080259526148438e-03</internalNodes>\n          <leafValues>\n            3.9394611120223999e-01 4.0497899055480957e-01\n            5.5207037925720215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2042 -1.3102490629535168e-04 -1 -2 2043\n            5.5228749988600612e-04</internalNodes>\n          <leafValues>\n            4.8790889978408813e-01 4.8449438810348511e-01\n            5.5128258466720581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2044 -1.2130969844292849e-04 -1 -2 2045\n            -1.5112989785848185e-05</internalNodes>\n          <leafValues>\n            4.3679711222648621e-01 6.4259552955627441e-01\n            4.8818269371986389e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2046 -4.0125829400494695e-04 -1 -2 2047\n            -6.5766851184889674e-04</internalNodes>\n          <leafValues>\n            5.3720992803573608e-01 5.8345532417297363e-01\n            4.8690780997276306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2048 6.2220421386882663e-04 -1 -2 2049\n            1.4663359615951777e-03</internalNodes>\n          <leafValues>\n            3.8246369361877441e-01 4.8134881258010864e-01\n            6.9667392969131470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2050 -4.9547709524631500e-02 -1 -2 2051\n            1.3017569435760379e-03</internalNodes>\n          <leafValues>\n            5.3927659988403320e-02 5.3374558687210083e-01\n            4.1607481241226196e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2052 -4.4914530590176582e-03 -1 -2 2053\n            1.6592369647696614e-03</internalNodes>\n          <leafValues>\n            5.9974372386932373e-01 3.7271851301193237e-01\n            5.1156342029571533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2054 6.4695458859205246e-03 -1 -2 2055\n            4.9810269847512245e-03</internalNodes>\n          <leafValues>\n            5.2520352602005005e-01 5.2567178010940552e-01\n            3.9344060420989990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2056 -3.8536980748176575e-02 -1 -2 2057\n            -2.8275650739669800e-01</internalNodes>\n          <leafValues>\n            2.0619249343872070e-01 6.1883211135864258e-02\n            4.9250578880310059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2058 -9.0301828458905220e-03 -1 -2 2059\n            -4.3866269290447235e-02</internalNodes>\n          <leafValues>\n            3.1575900316238403e-01 2.0336820185184479e-01\n            5.1647698879241943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2060 -4.5701069757342339e-03 -1 -2 2061\n            -2.3362410720437765e-03</internalNodes>\n          <leafValues>\n            6.6111832857131958e-01 2.8077891469001770e-01\n            4.9628761410713196e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2062 5.3960331715643406e-03 -1 -2 2063\n            -2.6297608856111765e-03</internalNodes>\n          <leafValues>\n            5.1463878154754639e-01 6.2844878435134888e-01\n            4.9555888772010803e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2064 -3.8577478844672441e-03 -1 -2 2065\n            1.3963800156489015e-03</internalNodes>\n          <leafValues>\n            1.4867480099201202e-01 4.7013381123542786e-01\n            6.3209718465805054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2066 -8.8699469342827797e-03 -1 -2 2067\n            -7.0626288652420044e-04</internalNodes>\n          <leafValues>\n            5.2868181467056274e-01 4.6483701467514038e-01\n            5.3332102298736572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2068 4.2645810171961784e-03 -1 -2 2069\n            6.1572100967168808e-02</internalNodes>\n          <leafValues>\n            5.0848782062530518e-01 3.6296251416206360e-01\n            8.7571567296981812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2070 -4.5381980016827583e-03 -1 -2 2071\n            -4.0877899155020714e-03</internalNodes>\n          <leafValues>\n            4.8566961288452148e-01 4.5841160416603088e-01\n            5.4202407598495483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2072 6.4308601431548595e-03 -1 -2 2073\n            7.0455260574817657e-03</internalNodes>\n          <leafValues>\n            2.7073028683662415e-01 5.0574868917465210e-01\n            7.0265239477157593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2074 -2.3246440105140209e-03 -1 -2 2075\n            6.0276601288933307e-05</internalNodes>\n          <leafValues>\n            4.8272788524627686e-01 4.2472490668296814e-01\n            5.5087631940841675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2076 1.8084559589624405e-02 -1 -2 2077\n            8.4693520329892635e-04</internalNodes>\n          <leafValues>\n            8.1048011779785156e-01 5.1546192169189453e-01\n            3.5143798589706421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2078 -2.6931039988994598e-02 -1 -2 2079\n            -4.2346641421318054e-03</internalNodes>\n          <leafValues>\n            4.8868888616561890e-01 4.6223780512809753e-01\n            5.3824782371520996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2080 2.6947110891342163e-02 -1 -2 2081\n            4.6446882188320160e-03</internalNodes>\n          <leafValues>\n            6.3665962219238281e-01 5.3685069084167480e-01\n            3.7654298543930054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2082 -6.9577661342918873e-03 -1 -2 2083\n            8.7609712500125170e-04</internalNodes>\n          <leafValues>\n            4.2346870899200439e-01 4.6724060177803040e-01\n            5.3506839275360107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2084 1.6103329835459590e-03 -1 -2 2085\n            -1.2848590267822146e-03</internalNodes>\n          <leafValues>\n            5.7327628135681152e-01 5.4817992448806763e-01\n            3.7845930457115173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2086 1.0243539698421955e-02 -1 -2 2087\n            2.6889349101111293e-04</internalNodes>\n          <leafValues>\n            5.1559072732925415e-01 5.3531897068023682e-01\n            4.3871539831161499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2088 3.7903659977018833e-03 -1 -2 2089\n            -2.9369680210947990e-02</internalNodes>\n          <leafValues>\n            5.0320029258728027e-01 5.8735388517379761e-01\n            2.2154450416564941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            1 0 2090 6.0743088833987713e-03 -1 -2 2091\n            -1.2710720300674438e-02</internalNodes>\n          <leafValues>\n            5.4170298576354980e-01 6.0565119981765747e-01\n            4.9851819872856140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 1 2092 -5.9445449151098728e-03 -1 -2 2093\n            -2.8927479870617390e-03</internalNodes>\n          <leafValues>\n            3.3520698547363281e-01 6.9292408227920532e-01\n            4.7782200574874878e-01</leafValues></_></weakClassifiers></_></stages>\n  <features>\n    <_>\n      <rects>\n        <_>\n          2 7 16 4 -1.</_>\n        <_>\n          2 9 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 14 -1.</_>\n        <_>\n          8 11 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 1 6 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 8 -1.</_>\n        <_>\n          8 2 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 1 9 -1.</_>\n        <_>\n          6 6 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 9 -1.</_>\n        <_>\n          3 10 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 4 -1.</_>\n        <_>\n          4 9 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 16 -1.</_>\n        <_>\n          9 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 5 -1.</_>\n        <_>\n          7 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 8 -1.</_>\n        <_>\n          4 9 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 16 9 -1.</_>\n        <_>\n          1 10 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 4 -1.</_>\n        <_>\n          2 2 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 4 -1.</_>\n        <_>\n          9 5 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 9 -1.</_>\n        <_>\n          6 6 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 8 -1.</_>\n        <_>\n          8 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 2 2 -1.</_>\n        <_>\n          3 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          14 1 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 6 -1.</_>\n        <_>\n          8 4 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 15 -1.</_>\n        <_>\n          3 2 3 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 6 -1.</_>\n        <_>\n          5 6 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 3 -1.</_>\n        <_>\n          13 12 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 6 4 -1.</_>\n        <_>\n          12 14 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 3 -1.</_>\n        <_>\n          1 12 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 5 8 -1.</_>\n        <_>\n          2 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 12 -1.</_>\n        <_>\n          2 8 16 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          8 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 9 -1.</_>\n        <_>\n          13 10 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 9 -1.</_>\n        <_>\n          5 10 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 8 -1.</_>\n        <_>\n          9 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 12 -1.</_>\n        <_>\n          14 0 2 6 2.</_>\n        <_>\n          12 6 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 2 -1.</_>\n        <_>\n          5 9 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 4 -1.</_>\n        <_>\n          7 1 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 9 12 -1.</_>\n        <_>\n          3 3 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 12 -1.</_>\n        <_>\n          9 12 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 15 -1.</_>\n        <_>\n          0 10 20 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 6 8 -1.</_>\n        <_>\n          2 2 3 4 2.</_>\n        <_>\n          5 6 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 2 -1.</_>\n        <_>\n          2 2 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 4 -1.</_>\n        <_>\n          13 15 3 2 2.</_>\n        <_>\n          10 17 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 2 6 -1.</_>\n        <_>\n          12 16 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 4 4 -1.</_>\n        <_>\n          5 15 2 2 2.</_>\n        <_>\n          7 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 1 2 -1.</_>\n        <_>\n          7 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 10 -1.</_>\n        <_>\n          10 5 6 5 2.</_>\n        <_>\n          4 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 8 12 -1.</_>\n        <_>\n          11 4 4 6 2.</_>\n        <_>\n          7 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 12 12 -1.</_>\n        <_>\n          3 3 6 6 2.</_>\n        <_>\n          9 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 3 -1.</_>\n        <_>\n          15 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 3 2 -1.</_>\n        <_>\n          11 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 5 3 -1.</_>\n        <_>\n          0 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 3 2 -1.</_>\n        <_>\n          8 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 2 -1.</_>\n        <_>\n          2 9 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 5 12 -1.</_>\n        <_>\n          9 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 6 -1.</_>\n        <_>\n          6 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 8 -1.</_>\n        <_>\n          10 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 10 -1.</_>\n        <_>\n          12 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 3 9 -1.</_>\n        <_>\n          4 9 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 4 -1.</_>\n        <_>\n          9 4 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 8 3 -1.</_>\n        <_>\n          12 3 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 6 -1.</_>\n        <_>\n          15 3 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 8 -1.</_>\n        <_>\n          2 12 5 4 2.</_>\n        <_>\n          7 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 8 -1.</_>\n        <_>\n          5 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 8 3 -1.</_>\n        <_>\n          12 3 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 6 -1.</_>\n        <_>\n          15 3 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 8 3 -1.</_>\n        <_>\n          4 3 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 4 -1.</_>\n        <_>\n          2 3 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 3 2 -1.</_>\n        <_>\n          11 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 1 -1.</_>\n        <_>\n          11 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 3 4 -1.</_>\n        <_>\n          7 17 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 3 6 -1.</_>\n        <_>\n          4 15 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 1 14 -1.</_>\n        <_>\n          10 12 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 6 -1.</_>\n        <_>\n          5 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 3 -1.</_>\n        <_>\n          7 0 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 5 -1.</_>\n        <_>\n          7 0 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 5 -1.</_>\n        <_>\n          9 15 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 6 -1.</_>\n        <_>\n          9 12 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 7 -1.</_>\n        <_>\n          10 6 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 9 -1.</_>\n        <_>\n          16 6 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 7 -1.</_>\n        <_>\n          9 6 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 8 -1.</_>\n        <_>\n          0 5 9 4 2.</_>\n        <_>\n          9 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 10 -1.</_>\n        <_>\n          13 10 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 2 6 -1.</_>\n        <_>\n          12 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 5 -1.</_>\n        <_>\n          8 0 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 6 -1.</_>\n        <_>\n          6 7 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 14 -1.</_>\n        <_>\n          13 3 3 7 2.</_>\n        <_>\n          10 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 1 8 -1.</_>\n        <_>\n          13 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 14 -1.</_>\n        <_>\n          4 3 3 7 2.</_>\n        <_>\n          7 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 1 8 -1.</_>\n        <_>\n          6 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 1 6 -1.</_>\n        <_>\n          8 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 2 -1.</_>\n        <_>\n          2 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 8 -1.</_>\n        <_>\n          10 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 2 -1.</_>\n        <_>\n          8 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 2 2 -1.</_>\n        <_>\n          9 1 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 9 -1.</_>\n        <_>\n          4 6 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 5 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 5 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 12 -1.</_>\n        <_>\n          4 10 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 18 -1.</_>\n        <_>\n          13 0 3 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 1 12 -1.</_>\n        <_>\n          10 12 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 6 -1.</_>\n        <_>\n          3 2 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 3 2 -1.</_>\n        <_>\n          10 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 3 2 -1.</_>\n        <_>\n          11 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 2 6 -1.</_>\n        <_>\n          2 10 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 6 -1.</_>\n        <_>\n          7 7 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 19 6 1 -1.</_>\n        <_>\n          9 19 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 3 2 -1.</_>\n        <_>\n          11 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 1 -1.</_>\n        <_>\n          9 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 2 -1.</_>\n        <_>\n          2 2 8 1 2.</_>\n        <_>\n          10 3 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 5 3 -1.</_>\n        <_>\n          8 12 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 15 -1.</_>\n        <_>\n          2 1 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 2 3 -1.</_>\n        <_>\n          2 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 13 1 3 -1.</_>\n        <_>\n          16 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 3 6 -1.</_>\n        <_>\n          7 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 1 14 -1.</_>\n        <_>\n          7 12 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 3 -1.</_>\n        <_>\n          15 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 3 14 -1.</_>\n        <_>\n          10 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 2 6 -1.</_>\n        <_>\n          6 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 1 8 -1.</_>\n        <_>\n          6 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 2 1 -1.</_>\n        <_>\n          13 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 10 -1.</_>\n        <_>\n          15 1 3 5 2.</_>\n        <_>\n          12 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 3 -1.</_>\n        <_>\n          3 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 2 1 -1.</_>\n        <_>\n          10 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 17 9 -1.</_>\n        <_>\n          1 3 17 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 8 -1.</_>\n        <_>\n          1 2 4 4 2.</_>\n        <_>\n          5 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 4 -1.</_>\n        <_>\n          9 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 7 10 -1.</_>\n        <_>\n          10 14 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 4 -1.</_>\n        <_>\n          8 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 10 -1.</_>\n        <_>\n          6 10 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 12 -1.</_>\n        <_>\n          8 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 3 -1.</_>\n        <_>\n          6 7 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 10 6 -1.</_>\n        <_>\n          3 13 5 3 2.</_>\n        <_>\n          8 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 4 11 -1.</_>\n        <_>\n          15 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 10 -1.</_>\n        <_>\n          10 7 5 5 2.</_>\n        <_>\n          5 12 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 4 11 -1.</_>\n        <_>\n          3 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 8 12 -1.</_>\n        <_>\n          1 11 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 7 4 -1.</_>\n        <_>\n          11 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 12 -1.</_>\n        <_>\n          0 4 10 6 2.</_>\n        <_>\n          10 10 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 15 -1.</_>\n        <_>\n          1 10 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 8 -1.</_>\n        <_>\n          11 14 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          10 14 7 2 2.</_>\n        <_>\n          3 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 4 -1.</_>\n        <_>\n          18 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 6 6 -1.</_>\n        <_>\n          3 14 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 6 -1.</_>\n        <_>\n          0 6 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 3 3 -1.</_>\n        <_>\n          9 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 10 4 -1.</_>\n        <_>\n          15 7 5 2 2.</_>\n        <_>\n          10 9 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 8 -1.</_>\n        <_>\n          7 6 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 2 -1.</_>\n        <_>\n          8 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 3 5 -1.</_>\n        <_>\n          11 6 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 19 -1.</_>\n        <_>\n          11 0 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 1 2 -1.</_>\n        <_>\n          3 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 5 3 -1.</_>\n        <_>\n          7 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 4 -1.</_>\n        <_>\n          11 1 9 2 2.</_>\n        <_>\n          2 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 3 8 -1.</_>\n        <_>\n          11 5 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          0 1 9 2 2.</_>\n        <_>\n          9 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 8 -1.</_>\n        <_>\n          8 5 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          9 7 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 5 2 -1.</_>\n        <_>\n          10 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 15 1 -1.</_>\n        <_>\n          7 10 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 2 6 -1.</_>\n        <_>\n          2 9 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 3 3 -1.</_>\n        <_>\n          9 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 10 -1.</_>\n        <_>\n          9 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 2 -1.</_>\n        <_>\n          0 8 4 1 2.</_>\n        <_>\n          4 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          5 9 5 4 2.</_>\n        <_>\n          10 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 4 -1.</_>\n        <_>\n          9 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 4 -1.</_>\n        <_>\n          10 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 2 1 -1.</_>\n        <_>\n          9 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 14 -1.</_>\n        <_>\n          14 0 2 7 2.</_>\n        <_>\n          12 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 9 -1.</_>\n        <_>\n          12 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 16 -1.</_>\n        <_>\n          3 2 3 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 4 2 -1.</_>\n        <_>\n          1 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 1 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 9 -1.</_>\n        <_>\n          8 6 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 6 -1.</_>\n        <_>\n          12 13 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 8 16 -1.</_>\n        <_>\n          12 1 4 8 2.</_>\n        <_>\n          8 9 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 3 6 -1.</_>\n        <_>\n          4 9 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 2 -1.</_>\n        <_>\n          4 3 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 12 -1.</_>\n        <_>\n          9 12 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 7 10 -1.</_>\n        <_>\n          10 14 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 7 10 -1.</_>\n        <_>\n          3 14 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 1 14 -1.</_>\n        <_>\n          7 12 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 1 6 -1.</_>\n        <_>\n          13 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 3 6 -1.</_>\n        <_>\n          14 14 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 1 6 -1.</_>\n        <_>\n          6 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 3 6 -1.</_>\n        <_>\n          3 14 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 5 3 -1.</_>\n        <_>\n          8 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 8 -1.</_>\n        <_>\n          5 1 5 4 2.</_>\n        <_>\n          10 5 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 5 4 -1.</_>\n        <_>\n          6 6 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 1 -1.</_>\n        <_>\n          7 10 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 3 -1.</_>\n        <_>\n          11 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 3 -1.</_>\n        <_>\n          3 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 3 4 -1.</_>\n        <_>\n          12 14 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 5 6 -1.</_>\n        <_>\n          11 12 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 2 -1.</_>\n        <_>\n          0 9 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 3 4 -1.</_>\n        <_>\n          2 3 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 6 -1.</_>\n        <_>\n          9 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 6 -1.</_>\n        <_>\n          7 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 5 -1.</_>\n        <_>\n          12 5 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 2 -1.</_>\n        <_>\n          5 7 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 5 -1.</_>\n        <_>\n          6 5 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 10 -1.</_>\n        <_>\n          9 8 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 16 2 -1.</_>\n        <_>\n          11 1 8 1 2.</_>\n        <_>\n          3 2 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 2 -1.</_>\n        <_>\n          9 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 2 -1.</_>\n        <_>\n          1 1 8 1 2.</_>\n        <_>\n          9 2 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 1 3 -1.</_>\n        <_>\n          8 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 10 -1.</_>\n        <_>\n          10 5 6 5 2.</_>\n        <_>\n          4 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          10 13 3 3 2.</_>\n        <_>\n          7 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 3 2 -1.</_>\n        <_>\n          8 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 4 -1.</_>\n        <_>\n          9 2 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 3 -1.</_>\n        <_>\n          6 7 9 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 1 -1.</_>\n        <_>\n          12 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 6 -1.</_>\n        <_>\n          6 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 2 6 -1.</_>\n        <_>\n          6 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 3 6 -1.</_>\n        <_>\n          11 15 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 12 -1.</_>\n        <_>\n          10 4 6 6 2.</_>\n        <_>\n          4 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 3 6 -1.</_>\n        <_>\n          2 2 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 3 7 -1.</_>\n        <_>\n          2 5 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 4 -1.</_>\n        <_>\n          10 13 6 2 2.</_>\n        <_>\n          4 15 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 17 12 -1.</_>\n        <_>\n          3 9 17 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 12 -1.</_>\n        <_>\n          3 3 7 6 2.</_>\n        <_>\n          10 9 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 9 -1.</_>\n        <_>\n          2 14 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 3 6 -1.</_>\n        <_>\n          9 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 6 -1.</_>\n        <_>\n          10 14 2 3 2.</_>\n        <_>\n          8 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 6 1 -1.</_>\n        <_>\n          8 2 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 5 -1.</_>\n        <_>\n          10 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 5 -1.</_>\n        <_>\n          10 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 1 -1.</_>\n        <_>\n          9 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 5 -1.</_>\n        <_>\n          9 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 3 -1.</_>\n        <_>\n          8 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 6 -1.</_>\n        <_>\n          0 6 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 6 -1.</_>\n        <_>\n          1 3 4 3 2.</_>\n        <_>\n          5 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 4 -1.</_>\n        <_>\n          7 17 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 10 -1.</_>\n        <_>\n          3 15 14 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 4 -1.</_>\n        <_>\n          8 4 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 10 -1.</_>\n        <_>\n          0 9 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 4 -1.</_>\n        <_>\n          2 2 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 6 8 -1.</_>\n        <_>\n          4 12 3 4 2.</_>\n        <_>\n          7 16 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 7 -1.</_>\n        <_>\n          3 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 10 4 -1.</_>\n        <_>\n          15 7 5 2 2.</_>\n        <_>\n          10 9 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 1 -1.</_>\n        <_>\n          9 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 4 -1.</_>\n        <_>\n          9 6 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 6 -1.</_>\n        <_>\n          10 6 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 6 4 -1.</_>\n        <_>\n          15 7 3 2 2.</_>\n        <_>\n          12 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 6 -1.</_>\n        <_>\n          9 6 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 6 -1.</_>\n        <_>\n          1 6 9 3 2.</_>\n        <_>\n          10 9 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 3 -1.</_>\n        <_>\n          10 1 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 5 2 -1.</_>\n        <_>\n          10 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 3 -1.</_>\n        <_>\n          9 1 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 5 2 -1.</_>\n        <_>\n          5 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 8 -1.</_>\n        <_>\n          12 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 2 -1.</_>\n        <_>\n          5 7 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 10 -1.</_>\n        <_>\n          4 5 6 5 2.</_>\n        <_>\n          10 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 3 3 -1.</_>\n        <_>\n          9 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 3 3 -1.</_>\n        <_>\n          8 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 9 -1.</_>\n        <_>\n          1 13 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          13 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 3 -1.</_>\n        <_>\n          6 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 12 -1.</_>\n        <_>\n          5 10 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 4 -1.</_>\n        <_>\n          10 11 9 2 2.</_>\n        <_>\n          1 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 2 -1.</_>\n        <_>\n          7 13 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 6 -1.</_>\n        <_>\n          7 0 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 4 -1.</_>\n        <_>\n          0 11 9 2 2.</_>\n        <_>\n          9 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 2 -1.</_>\n        <_>\n          7 13 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          9 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 4 2 -1.</_>\n        <_>\n          13 4 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 2 -1.</_>\n        <_>\n          4 1 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          6 9 4 4 2.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 2 -1.</_>\n        <_>\n          1 12 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 8 -1.</_>\n        <_>\n          11 5 9 4 2.</_>\n        <_>\n          2 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          7 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 6 -1.</_>\n        <_>\n          0 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 3 -1.</_>\n        <_>\n          4 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 3 1 6 -1.</_>\n        <_>\n          19 5 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 8 2 -1.</_>\n        <_>\n          6 16 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 1 6 -1.</_>\n        <_>\n          0 5 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 3 -1.</_>\n        <_>\n          5 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 3 -1.</_>\n        <_>\n          12 6 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 2 6 -1.</_>\n        <_>\n          8 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 8 -1.</_>\n        <_>\n          9 15 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 3 -1.</_>\n        <_>\n          12 6 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 15 5 -1.</_>\n        <_>\n          10 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 2 2 -1.</_>\n        <_>\n          2 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 2 -1.</_>\n        <_>\n          6 7 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 1 -1.</_>\n        <_>\n          10 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 12 -1.</_>\n        <_>\n          7 0 6 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 15 5 -1.</_>\n        <_>\n          5 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 1 -1.</_>\n        <_>\n          10 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 3 6 -1.</_>\n        <_>\n          11 14 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 1 -1.</_>\n        <_>\n          8 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 6 -1.</_>\n        <_>\n          6 14 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 4 -1.</_>\n        <_>\n          10 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 7 -1.</_>\n        <_>\n          12 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 7 -1.</_>\n        <_>\n          6 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 12 -1.</_>\n        <_>\n          10 3 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 4 -1.</_>\n        <_>\n          11 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 14 -1.</_>\n        <_>\n          7 0 6 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 6 11 -1.</_>\n        <_>\n          5 8 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 15 4 -1.</_>\n        <_>\n          1 6 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 8 -1.</_>\n        <_>\n          5 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 8 -1.</_>\n        <_>\n          14 2 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 14 -1.</_>\n        <_>\n          14 6 3 7 2.</_>\n        <_>\n          11 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 12 -1.</_>\n        <_>\n          9 11 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 4 6 -1.</_>\n        <_>\n          3 9 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 6 -1.</_>\n        <_>\n          14 3 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 4 -1.</_>\n        <_>\n          15 4 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 7 -1.</_>\n        <_>\n          3 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 14 -1.</_>\n        <_>\n          3 6 3 7 2.</_>\n        <_>\n          6 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 8 -1.</_>\n        <_>\n          4 10 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 8 -1.</_>\n        <_>\n          10 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 20 -1.</_>\n        <_>\n          9 0 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 16 12 -1.</_>\n        <_>\n          1 7 8 6 2.</_>\n        <_>\n          9 13 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 3 3 -1.</_>\n        <_>\n          9 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 5 -1.</_>\n        <_>\n          11 9 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 1 2 -1.</_>\n        <_>\n          3 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 5 3 -1.</_>\n        <_>\n          7 18 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          10 12 2 4 2.</_>\n        <_>\n          8 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 10 12 -1.</_>\n        <_>\n          12 4 5 6 2.</_>\n        <_>\n          7 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 5 -1.</_>\n        <_>\n          7 9 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 8 2 -1.</_>\n        <_>\n          9 9 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 5 2 -1.</_>\n        <_>\n          14 16 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 8 4 -1.</_>\n        <_>\n          1 7 4 2 2.</_>\n        <_>\n          5 9 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 3 1 2 -1.</_>\n        <_>\n          19 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          3 14 7 2 2.</_>\n        <_>\n          10 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 2 -1.</_>\n        <_>\n          5 1 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 4 6 -1.</_>\n        <_>\n          11 16 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          7 13 3 3 2.</_>\n        <_>\n          10 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 1 6 -1.</_>\n        <_>\n          0 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 2 -1.</_>\n        <_>\n          6 8 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 1 -1.</_>\n        <_>\n          9 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          7 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 2 -1.</_>\n        <_>\n          0 3 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 4 -1.</_>\n        <_>\n          11 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 6 -1.</_>\n        <_>\n          11 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 8 2 -1.</_>\n        <_>\n          7 9 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 6 -1.</_>\n        <_>\n          2 0 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 2 -1.</_>\n        <_>\n          9 0 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 2 3 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 1 2 -1.</_>\n        <_>\n          3 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 11 3 -1.</_>\n        <_>\n          4 6 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 4 -1.</_>\n        <_>\n          11 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 3 -1.</_>\n        <_>\n          10 3 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 4 -1.</_>\n        <_>\n          8 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 3 -1.</_>\n        <_>\n          8 3 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 3 -1.</_>\n        <_>\n          11 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 2 8 -1.</_>\n        <_>\n          11 12 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 5 -1.</_>\n        <_>\n          10 7 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 1 6 -1.</_>\n        <_>\n          14 13 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 2 -1.</_>\n        <_>\n          0 4 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 5 6 -1.</_>\n        <_>\n          4 16 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 3 -1.</_>\n        <_>\n          11 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 3 -1.</_>\n        <_>\n          5 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 4 2 -1.</_>\n        <_>\n          7 15 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 3 -1.</_>\n        <_>\n          9 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 2 6 -1.</_>\n        <_>\n          1 8 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 8 15 -1.</_>\n        <_>\n          2 9 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 2 -1.</_>\n        <_>\n          9 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          9 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 5 -1.</_>\n        <_>\n          8 6 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 2 -1.</_>\n        <_>\n          7 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 10 -1.</_>\n        <_>\n          10 1 4 5 2.</_>\n        <_>\n          6 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 10 -1.</_>\n        <_>\n          10 0 10 5 2.</_>\n        <_>\n          0 5 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 1 -1.</_>\n        <_>\n          7 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 8 -1.</_>\n        <_>\n          2 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 4 -1.</_>\n        <_>\n          11 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 8 -1.</_>\n        <_>\n          12 10 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 4 -1.</_>\n        <_>\n          6 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 8 -1.</_>\n        <_>\n          5 10 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 18 6 -1.</_>\n        <_>\n          11 6 9 3 2.</_>\n        <_>\n          2 9 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 7 3 -1.</_>\n        <_>\n          7 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 12 -1.</_>\n        <_>\n          1 0 1 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 16 -1.</_>\n        <_>\n          1 10 18 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 5 3 -1.</_>\n        <_>\n          9 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 6 -1.</_>\n        <_>\n          0 6 9 3 2.</_>\n        <_>\n          9 9 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 1 3 -1.</_>\n        <_>\n          17 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 1 9 -1.</_>\n        <_>\n          12 14 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 1 3 -1.</_>\n        <_>\n          2 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 3 -1.</_>\n        <_>\n          5 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 3 -1.</_>\n        <_>\n          7 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 6 -1.</_>\n        <_>\n          0 3 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 3 -1.</_>\n        <_>\n          9 5 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 4 10 -1.</_>\n        <_>\n          3 1 2 5 2.</_>\n        <_>\n          5 6 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 19 10 -1.</_>\n        <_>\n          0 9 19 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 12 -1.</_>\n        <_>\n          9 12 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 5 2 -1.</_>\n        <_>\n          11 19 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 6 4 -1.</_>\n        <_>\n          5 16 3 2 2.</_>\n        <_>\n          8 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 3 2 -1.</_>\n        <_>\n          5 19 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 3 2 -1.</_>\n        <_>\n          13 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 6 -1.</_>\n        <_>\n          1 2 9 3 2.</_>\n        <_>\n          10 5 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 6 -1.</_>\n        <_>\n          3 7 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 6 -1.</_>\n        <_>\n          18 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 1 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          3 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 3 -1.</_>\n        <_>\n          4 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 9 2 -1.</_>\n        <_>\n          9 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 15 -1.</_>\n        <_>\n          9 4 3 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 15 -1.</_>\n        <_>\n          8 4 3 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 7 -1.</_>\n        <_>\n          14 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 9 -1.</_>\n        <_>\n          18 6 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 1 -1.</_>\n        <_>\n          9 1 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 7 -1.</_>\n        <_>\n          3 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 4 -1.</_>\n        <_>\n          16 7 3 2 2.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 10 2 -1.</_>\n        <_>\n          8 1 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 4 -1.</_>\n        <_>\n          1 7 3 2 2.</_>\n        <_>\n          4 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 3 3 -1.</_>\n        <_>\n          1 3 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 4 3 -1.</_>\n        <_>\n          9 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 2 -1.</_>\n        <_>\n          12 14 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 2 -1.</_>\n        <_>\n          8 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 8 -1.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 2 -1.</_>\n        <_>\n          12 1 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 1 12 -1.</_>\n        <_>\n          7 13 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 4 -1.</_>\n        <_>\n          7 2 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 6 -1.</_>\n        <_>\n          0 15 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 2 -1.</_>\n        <_>\n          14 5 6 1 2.</_>\n        <_>\n          8 6 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 2 3 -1.</_>\n        <_>\n          8 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          10 0 4 6 2.</_>\n        <_>\n          6 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 4 -1.</_>\n        <_>\n          0 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 5 -1.</_>\n        <_>\n          10 0 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          9 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 6 -1.</_>\n        <_>\n          17 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 2 3 -1.</_>\n        <_>\n          3 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 3 3 -1.</_>\n        <_>\n          7 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 5 3 -1.</_>\n        <_>\n          14 13 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 3 -1.</_>\n        <_>\n          4 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 5 3 -1.</_>\n        <_>\n          1 13 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 12 2 -1.</_>\n        <_>\n          1 15 6 1 2.</_>\n        <_>\n          7 16 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 4 2 -1.</_>\n        <_>\n          12 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 5 -1.</_>\n        <_>\n          10 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 6 -1.</_>\n        <_>\n          10 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 6 -1.</_>\n        <_>\n          0 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 4 2 -1.</_>\n        <_>\n          12 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 4 2 -1.</_>\n        <_>\n          4 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 5 -1.</_>\n        <_>\n          9 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 1 -1.</_>\n        <_>\n          10 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 3 8 -1.</_>\n        <_>\n          17 5 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 1 -1.</_>\n        <_>\n          9 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 3 8 -1.</_>\n        <_>\n          2 5 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 3 -1.</_>\n        <_>\n          11 1 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 2 4 -1.</_>\n        <_>\n          17 5 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 3 -1.</_>\n        <_>\n          2 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 1 3 -1.</_>\n        <_>\n          9 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 10 -1.</_>\n        <_>\n          6 6 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 8 -1.</_>\n        <_>\n          16 0 3 4 2.</_>\n        <_>\n          13 4 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 2 4 -1.</_>\n        <_>\n          2 5 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 2 -1.</_>\n        <_>\n          4 3 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 4 -1.</_>\n        <_>\n          8 10 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 4 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 1 -1.</_>\n        <_>\n          5 2 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 10 -1.</_>\n        <_>\n          3 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 2 -1.</_>\n        <_>\n          8 6 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 6 -1.</_>\n        <_>\n          12 7 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 2 -1.</_>\n        <_>\n          8 6 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 6 -1.</_>\n        <_>\n          6 7 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 16 4 -1.</_>\n        <_>\n          3 16 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 3 -1.</_>\n        <_>\n          8 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 1 -1.</_>\n        <_>\n          8 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 10 2 3 -1.</_>\n        <_>\n          18 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 4 6 -1.</_>\n        <_>\n          16 10 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 2 1 -1.</_>\n        <_>\n          9 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 9 -1.</_>\n        <_>\n          8 1 1 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 11 6 -1.</_>\n        <_>\n          5 14 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 3 14 -1.</_>\n        <_>\n          12 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 5 -1.</_>\n        <_>\n          7 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 3 -1.</_>\n        <_>\n          4 2 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 10 -1.</_>\n        <_>\n          5 5 3 5 2.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 18 2 2 -1.</_>\n        <_>\n          16 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 18 2 2 -1.</_>\n        <_>\n          16 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 2 5 -1.</_>\n        <_>\n          9 4 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 1 4 -1.</_>\n        <_>\n          8 6 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 12 4 -1.</_>\n        <_>\n          13 15 6 2 2.</_>\n        <_>\n          7 17 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 6 2 -1.</_>\n        <_>\n          11 19 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 4 10 -1.</_>\n        <_>\n          7 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 8 -1.</_>\n        <_>\n          5 10 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 12 -1.</_>\n        <_>\n          14 1 3 6 2.</_>\n        <_>\n          11 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 1 -1.</_>\n        <_>\n          9 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 6 -1.</_>\n        <_>\n          4 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 4 -1.</_>\n        <_>\n          4 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 16 2 2 -1.</_>\n        <_>\n          14 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 2 2 -1.</_>\n        <_>\n          15 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 2 -1.</_>\n        <_>\n          7 13 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 2 -1.</_>\n        <_>\n          8 14 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 12 -1.</_>\n        <_>\n          14 1 3 6 2.</_>\n        <_>\n          11 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 4 2 -1.</_>\n        <_>\n          12 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 12 6 -1.</_>\n        <_>\n          3 10 6 3 2.</_>\n        <_>\n          9 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 12 -1.</_>\n        <_>\n          3 1 3 6 2.</_>\n        <_>\n          6 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 8 -1.</_>\n        <_>\n          10 1 5 4 2.</_>\n        <_>\n          5 5 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 14 -1.</_>\n        <_>\n          0 6 2 7 2.</_>\n        <_>\n          2 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 12 4 -1.</_>\n        <_>\n          1 15 6 2 2.</_>\n        <_>\n          7 17 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 3 3 -1.</_>\n        <_>\n          11 17 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 6 -1.</_>\n        <_>\n          12 2 1 3 2.</_>\n        <_>\n          11 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 3 3 -1.</_>\n        <_>\n          8 17 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 4 2 -1.</_>\n        <_>\n          12 15 2 1 2.</_>\n        <_>\n          10 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 4 3 -1.</_>\n        <_>\n          13 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 4 3 -1.</_>\n        <_>\n          3 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 6 -1.</_>\n        <_>\n          7 2 1 3 2.</_>\n        <_>\n          8 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 3 -1.</_>\n        <_>\n          2 2 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 4 2 -1.</_>\n        <_>\n          12 15 2 1 2.</_>\n        <_>\n          10 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 4 2 -1.</_>\n        <_>\n          6 15 2 1 2.</_>\n        <_>\n          8 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 3 -1.</_>\n        <_>\n          3 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 2 -1.</_>\n        <_>\n          6 8 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 3 6 -1.</_>\n        <_>\n          9 14 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 2 -1.</_>\n        <_>\n          9 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 5 -1.</_>\n        <_>\n          9 7 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 5 -1.</_>\n        <_>\n          10 7 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 2 -1.</_>\n        <_>\n          13 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 11 -1.</_>\n        <_>\n          8 3 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 2 7 -1.</_>\n        <_>\n          8 1 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 8 -1.</_>\n        <_>\n          8 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 2 -1.</_>\n        <_>\n          13 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 2 2 -1.</_>\n        <_>\n          12 6 1 1 2.</_>\n        <_>\n          11 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 3 -1.</_>\n        <_>\n          5 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 1 3 -1.</_>\n        <_>\n          6 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 2 -1.</_>\n        <_>\n          13 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 3 3 -1.</_>\n        <_>\n          16 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 2 2 -1.</_>\n        <_>\n          6 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 3 3 -1.</_>\n        <_>\n          1 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 1 6 -1.</_>\n        <_>\n          13 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 2 -1.</_>\n        <_>\n          13 4 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 14 -1.</_>\n        <_>\n          0 13 20 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 6 -1.</_>\n        <_>\n          0 6 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 9 6 -1.</_>\n        <_>\n          10 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 5 -1.</_>\n        <_>\n          8 0 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 5 -1.</_>\n        <_>\n          6 0 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 9 6 -1.</_>\n        <_>\n          1 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 2 2 -1.</_>\n        <_>\n          15 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 16 3 4 -1.</_>\n        <_>\n          13 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 2 2 -1.</_>\n        <_>\n          3 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 3 4 -1.</_>\n        <_>\n          4 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 1 3 -1.</_>\n        <_>\n          11 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 5 3 -1.</_>\n        <_>\n          9 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 6 -1.</_>\n        <_>\n          0 2 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 3 -1.</_>\n        <_>\n          6 1 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 4 3 -1.</_>\n        <_>\n          9 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 5 3 -1.</_>\n        <_>\n          8 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 2 -1.</_>\n        <_>\n          9 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 2 -1.</_>\n        <_>\n          1 9 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 1 3 -1.</_>\n        <_>\n          11 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 6 3 -1.</_>\n        <_>\n          8 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 1 3 -1.</_>\n        <_>\n          8 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 4 -1.</_>\n        <_>\n          4 13 6 2 2.</_>\n        <_>\n          10 15 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 2 8 -1.</_>\n        <_>\n          14 4 1 4 2.</_>\n        <_>\n          13 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 4 6 -1.</_>\n        <_>\n          0 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 2 -1.</_>\n        <_>\n          9 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 7 -1.</_>\n        <_>\n          14 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 14 -1.</_>\n        <_>\n          11 2 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 7 -1.</_>\n        <_>\n          5 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 12 -1.</_>\n        <_>\n          5 5 4 6 2.</_>\n        <_>\n          9 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 6 3 -1.</_>\n        <_>\n          11 5 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 4 3 -1.</_>\n        <_>\n          12 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 12 -1.</_>\n        <_>\n          5 5 5 6 2.</_>\n        <_>\n          10 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 3 -1.</_>\n        <_>\n          9 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 7 -1.</_>\n        <_>\n          9 6 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 4 -1.</_>\n        <_>\n          9 5 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          9 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 4 -1.</_>\n        <_>\n          7 1 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 16 7 3 -1.</_>\n        <_>\n          13 17 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 7 3 -1.</_>\n        <_>\n          0 17 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 8 10 -1.</_>\n        <_>\n          12 9 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 12 5 -1.</_>\n        <_>\n          12 10 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 8 10 -1.</_>\n        <_>\n          4 9 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 12 5 -1.</_>\n        <_>\n          4 10 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 6 2 -1.</_>\n        <_>\n          5 3 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 9 -1.</_>\n        <_>\n          0 3 17 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 4 -1.</_>\n        <_>\n          12 4 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 4 -1.</_>\n        <_>\n          0 12 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 5 -1.</_>\n        <_>\n          6 3 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 3 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 4 2 -1.</_>\n        <_>\n          3 18 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 8 10 -1.</_>\n        <_>\n          9 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          8 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 12 -1.</_>\n        <_>\n          3 4 7 6 2.</_>\n        <_>\n          10 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 4 -1.</_>\n        <_>\n          9 7 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 4 -1.</_>\n        <_>\n          6 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 3 3 -1.</_>\n        <_>\n          2 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 2 9 -1.</_>\n        <_>\n          4 9 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 3 3 -1.</_>\n        <_>\n          9 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 15 2 -1.</_>\n        <_>\n          3 2 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 3 -1.</_>\n        <_>\n          9 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 5 -1.</_>\n        <_>\n          10 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 10 -1.</_>\n        <_>\n          4 15 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 4 2 -1.</_>\n        <_>\n          0 11 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 9 2 -1.</_>\n        <_>\n          5 16 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 6 3 -1.</_>\n        <_>\n          8 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 4 3 -1.</_>\n        <_>\n          8 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          8 10 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 2 -1.</_>\n        <_>\n          3 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 1 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 1 2 -1.</_>\n        <_>\n          0 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 4 6 -1.</_>\n        <_>\n          9 4 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 14 -1.</_>\n        <_>\n          10 2 10 7 2.</_>\n        <_>\n          0 9 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 1 3 -1.</_>\n        <_>\n          14 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 12 -1.</_>\n        <_>\n          0 4 10 6 2.</_>\n        <_>\n          10 10 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 1 2 -1.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 3 2 -1.</_>\n        <_>\n          10 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 6 2 -1.</_>\n        <_>\n          11 17 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          5 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 3 2 -1.</_>\n        <_>\n          14 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 4 -1.</_>\n        <_>\n          12 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 3 2 -1.</_>\n        <_>\n          3 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 3 7 -1.</_>\n        <_>\n          10 13 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 5 3 -1.</_>\n        <_>\n          12 13 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 2 -1.</_>\n        <_>\n          9 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 7 6 2 2.</_>\n        <_>\n          10 9 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 19 14 1 -1.</_>\n        <_>\n          6 19 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 3 2 -1.</_>\n        <_>\n          16 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 10 -1.</_>\n        <_>\n          1 0 2 5 2.</_>\n        <_>\n          3 5 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 5 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 15 -1.</_>\n        <_>\n          9 10 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 6 -1.</_>\n        <_>\n          0 5 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 2 -1.</_>\n        <_>\n          7 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 8 2 -1.</_>\n        <_>\n          16 8 4 1 2.</_>\n        <_>\n          12 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 1 -1.</_>\n        <_>\n          9 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 3 3 -1.</_>\n        <_>\n          3 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 3 2 -1.</_>\n        <_>\n          5 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 3 3 -1.</_>\n        <_>\n          9 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 3 -1.</_>\n        <_>\n          7 16 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 11 6 -1.</_>\n        <_>\n          3 16 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 19 14 1 -1.</_>\n        <_>\n          7 19 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 6 2 -1.</_>\n        <_>\n          11 17 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 6 2 -1.</_>\n        <_>\n          14 11 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 6 2 -1.</_>\n        <_>\n          7 17 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 9 10 -1.</_>\n        <_>\n          3 1 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 3 -1.</_>\n        <_>\n          11 1 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 4 -1.</_>\n        <_>\n          9 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 3 -1.</_>\n        <_>\n          8 1 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 11 -1.</_>\n        <_>\n          2 4 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 4 -1.</_>\n        <_>\n          9 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 10 -1.</_>\n        <_>\n          10 0 4 5 2.</_>\n        <_>\n          6 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 5 14 -1.</_>\n        <_>\n          6 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          8 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 5 -1.</_>\n        <_>\n          9 7 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 9 -1.</_>\n        <_>\n          9 6 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 3 -1.</_>\n        <_>\n          9 1 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 4 -1.</_>\n        <_>\n          10 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 9 -1.</_>\n        <_>\n          10 8 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 3 8 -1.</_>\n        <_>\n          17 4 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 4 -1.</_>\n        <_>\n          8 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 4 2 -1.</_>\n        <_>\n          9 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 2 2 -1.</_>\n        <_>\n          11 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 12 2 4 2.</_>\n        <_>\n          10 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 9 -1.</_>\n        <_>\n          0 4 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 3 -1.</_>\n        <_>\n          9 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 2 -1.</_>\n        <_>\n          8 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 2 -1.</_>\n        <_>\n          7 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 1 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 9 -1.</_>\n        <_>\n          16 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 6 -1.</_>\n        <_>\n          16 3 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 9 -1.</_>\n        <_>\n          2 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 6 -1.</_>\n        <_>\n          1 3 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 9 -1.</_>\n        <_>\n          11 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 3 6 -1.</_>\n        <_>\n          11 6 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 2 -1.</_>\n        <_>\n          1 2 9 1 2.</_>\n        <_>\n          10 3 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 8 -1.</_>\n        <_>\n          7 8 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 16 -1.</_>\n        <_>\n          11 0 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 18 -1.</_>\n        <_>\n          17 1 3 9 2.</_>\n        <_>\n          14 10 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 2 3 -1.</_>\n        <_>\n          2 10 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 18 -1.</_>\n        <_>\n          0 1 3 9 2.</_>\n        <_>\n          3 10 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 18 -1.</_>\n        <_>\n          2 10 18 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 1 -1.</_>\n        <_>\n          7 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 2 -1.</_>\n        <_>\n          4 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 5 3 -1.</_>\n        <_>\n          8 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 5 3 -1.</_>\n        <_>\n          3 13 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 4 -1.</_>\n        <_>\n          7 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 2 -1.</_>\n        <_>\n          12 10 1 1 2.</_>\n        <_>\n          11 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 1 -1.</_>\n        <_>\n          9 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 8 -1.</_>\n        <_>\n          10 4 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 5 -1.</_>\n        <_>\n          10 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 4 -1.</_>\n        <_>\n          12 4 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 2 -1.</_>\n        <_>\n          13 7 1 1 2.</_>\n        <_>\n          12 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 10 8 -1.</_>\n        <_>\n          3 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 2 12 -1.</_>\n        <_>\n          7 7 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 2 -1.</_>\n        <_>\n          13 7 1 1 2.</_>\n        <_>\n          12 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 1 6 -1.</_>\n        <_>\n          11 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 15 -1.</_>\n        <_>\n          7 1 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 2 -1.</_>\n        <_>\n          6 7 1 1 2.</_>\n        <_>\n          7 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 2 2 -1.</_>\n        <_>\n          17 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 10 -1.</_>\n        <_>\n          12 3 2 5 2.</_>\n        <_>\n          10 8 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 2 2 -1.</_>\n        <_>\n          1 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 2 2 -1.</_>\n        <_>\n          7 10 1 1 2.</_>\n        <_>\n          8 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          10 12 7 2 2.</_>\n        <_>\n          3 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 3 2 -1.</_>\n        <_>\n          9 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 3 3 -1.</_>\n        <_>\n          1 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 1 2 -1.</_>\n        <_>\n          0 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 1 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 16 6 -1.</_>\n        <_>\n          0 6 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 14 -1.</_>\n        <_>\n          9 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 3 -1.</_>\n        <_>\n          12 0 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 12 2 -1.</_>\n        <_>\n          8 18 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 2 8 -1.</_>\n        <_>\n          15 1 1 4 2.</_>\n        <_>\n          14 5 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 9 1 -1.</_>\n        <_>\n          6 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 4 2 -1.</_>\n        <_>\n          3 4 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 2 4 -1.</_>\n        <_>\n          11 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 2 6 -1.</_>\n        <_>\n          14 15 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 1 6 -1.</_>\n        <_>\n          6 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 8 -1.</_>\n        <_>\n          10 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 10 -1.</_>\n        <_>\n          8 4 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 3 -1.</_>\n        <_>\n          14 3 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 2 -1.</_>\n        <_>\n          9 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 6 -1.</_>\n        <_>\n          8 3 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 8 -1.</_>\n        <_>\n          3 9 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 5 3 -1.</_>\n        <_>\n          12 6 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          5 16 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 5 3 -1.</_>\n        <_>\n          3 6 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 6 -1.</_>\n        <_>\n          9 14 1 3 2.</_>\n        <_>\n          10 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 2 -1.</_>\n        <_>\n          9 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 3 2 -1.</_>\n        <_>\n          9 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 3 -1.</_>\n        <_>\n          0 3 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 9 11 -1.</_>\n        <_>\n          3 1 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          10 13 2 3 2.</_>\n        <_>\n          8 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          3 12 7 2 2.</_>\n        <_>\n          10 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 1 4 -1.</_>\n        <_>\n          7 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          10 13 2 3 2.</_>\n        <_>\n          8 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          8 13 2 3 2.</_>\n        <_>\n          10 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 3 -1.</_>\n        <_>\n          9 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 2 3 -1.</_>\n        <_>\n          10 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 1 2 -1.</_>\n        <_>\n          11 17 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 2 -1.</_>\n        <_>\n          9 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 8 -1.</_>\n        <_>\n          0 5 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 3 -1.</_>\n        <_>\n          10 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 3 -1.</_>\n        <_>\n          10 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 16 6 -1.</_>\n        <_>\n          0 6 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 2 -1.</_>\n        <_>\n          5 1 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 2 12 -1.</_>\n        <_>\n          10 12 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 8 -1.</_>\n        <_>\n          7 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          10 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 8 -1.</_>\n        <_>\n          8 16 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 6 -1.</_>\n        <_>\n          9 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          10 7 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 3 -1.</_>\n        <_>\n          8 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 15 3 3 -1.</_>\n        <_>\n          16 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 3 -1.</_>\n        <_>\n          10 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 5 -1.</_>\n        <_>\n          8 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 2 -1.</_>\n        <_>\n          10 10 10 1 2.</_>\n        <_>\n          0 11 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 9 4 -1.</_>\n        <_>\n          14 16 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 3 4 -1.</_>\n        <_>\n          1 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 2 -1.</_>\n        <_>\n          8 15 2 1 2.</_>\n        <_>\n          10 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 19 3 -1.</_>\n        <_>\n          1 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 16 3 3 -1.</_>\n        <_>\n          15 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 10 -1.</_>\n        <_>\n          0 4 10 5 2.</_>\n        <_>\n          10 9 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 6 -1.</_>\n        <_>\n          10 6 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 6 -1.</_>\n        <_>\n          16 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 4 3 -1.</_>\n        <_>\n          7 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 6 2 -1.</_>\n        <_>\n          13 14 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 3 -1.</_>\n        <_>\n          14 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 6 2 -1.</_>\n        <_>\n          1 14 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 3 -1.</_>\n        <_>\n          4 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 3 5 -1.</_>\n        <_>\n          18 4 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 14 8 -1.</_>\n        <_>\n          12 5 7 4 2.</_>\n        <_>\n          5 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 5 -1.</_>\n        <_>\n          8 8 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 6 -1.</_>\n        <_>\n          0 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 6 -1.</_>\n        <_>\n          10 1 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 3 -1.</_>\n        <_>\n          10 5 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 6 -1.</_>\n        <_>\n          9 1 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 3 -1.</_>\n        <_>\n          4 5 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 4 2 -1.</_>\n        <_>\n          12 12 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          0 2 10 3 2.</_>\n        <_>\n          10 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 4 -1.</_>\n        <_>\n          10 10 8 2 2.</_>\n        <_>\n          2 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 6 -1.</_>\n        <_>\n          11 10 8 3 2.</_>\n        <_>\n          3 13 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 16 6 -1.</_>\n        <_>\n          1 10 8 3 2.</_>\n        <_>\n          9 13 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 4 -1.</_>\n        <_>\n          5 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 9 4 -1.</_>\n        <_>\n          14 16 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 14 4 -1.</_>\n        <_>\n          10 16 7 2 2.</_>\n        <_>\n          3 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 9 4 -1.</_>\n        <_>\n          3 16 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 6 6 -1.</_>\n        <_>\n          1 14 3 3 2.</_>\n        <_>\n          4 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 1 -1.</_>\n        <_>\n          9 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 10 -1.</_>\n        <_>\n          10 7 4 5 2.</_>\n        <_>\n          6 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 1 2 -1.</_>\n        <_>\n          2 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 2 -1.</_>\n        <_>\n          7 9 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 15 -1.</_>\n        <_>\n          9 7 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 2 -1.</_>\n        <_>\n          5 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 3 -1.</_>\n        <_>\n          6 7 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 5 6 -1.</_>\n        <_>\n          12 15 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 18 -1.</_>\n        <_>\n          0 9 20 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 6 -1.</_>\n        <_>\n          7 1 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 9 -1.</_>\n        <_>\n          7 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 18 1 -1.</_>\n        <_>\n          7 19 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 16 5 2 -1.</_>\n        <_>\n          14 17 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 15 10 -1.</_>\n        <_>\n          0 10 15 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 4 2 -1.</_>\n        <_>\n          7 15 2 1 2.</_>\n        <_>\n          9 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 2 2 -1.</_>\n        <_>\n          14 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 3 -1.</_>\n        <_>\n          9 9 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 2 2 -1.</_>\n        <_>\n          4 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 3 -1.</_>\n        <_>\n          8 9 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 3 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 4 10 -1.</_>\n        <_>\n          1 9 2 5 2.</_>\n        <_>\n          3 14 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 8 -1.</_>\n        <_>\n          2 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 2 -1.</_>\n        <_>\n          11 1 2 1 2.</_>\n        <_>\n          9 2 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 3 -1.</_>\n        <_>\n          7 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          9 14 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 4 -1.</_>\n        <_>\n          11 6 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 8 3 -1.</_>\n        <_>\n          8 10 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 3 -1.</_>\n        <_>\n          8 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 3 5 -1.</_>\n        <_>\n          7 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 8 1 -1.</_>\n        <_>\n          4 4 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 2 6 -1.</_>\n        <_>\n          8 2 1 3 2.</_>\n        <_>\n          9 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 3 6 -1.</_>\n        <_>\n          12 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 1 4 -1.</_>\n        <_>\n          8 17 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 2 4 -1.</_>\n        <_>\n          5 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 12 -1.</_>\n        <_>\n          6 6 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 1 -1.</_>\n        <_>\n          9 0 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 3 3 -1.</_>\n        <_>\n          8 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 3 6 -1.</_>\n        <_>\n          12 14 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 12 -1.</_>\n        <_>\n          5 7 5 6 2.</_>\n        <_>\n          10 13 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 2 10 -1.</_>\n        <_>\n          4 9 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 2 -1.</_>\n        <_>\n          11 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 2 -1.</_>\n        <_>\n          5 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 6 -1.</_>\n        <_>\n          0 4 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 3 4 -1.</_>\n        <_>\n          11 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 1 3 -1.</_>\n        <_>\n          9 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 16 6 -1.</_>\n        <_>\n          0 6 8 3 2.</_>\n        <_>\n          8 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 3 3 -1.</_>\n        <_>\n          10 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 4 3 -1.</_>\n        <_>\n          9 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 2 -1.</_>\n        <_>\n          3 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 3 3 -1.</_>\n        <_>\n          9 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 3 3 -1.</_>\n        <_>\n          10 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 6 -1.</_>\n        <_>\n          9 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 3 6 -1.</_>\n        <_>\n          12 14 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 5 2 -1.</_>\n        <_>\n          8 13 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 6 -1.</_>\n        <_>\n          5 14 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 2 -1.</_>\n        <_>\n          8 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 7 6 -1.</_>\n        <_>\n          11 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 4 -1.</_>\n        <_>\n          3 13 7 2 2.</_>\n        <_>\n          10 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 6 -1.</_>\n        <_>\n          8 14 2 3 2.</_>\n        <_>\n          10 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 6 2 -1.</_>\n        <_>\n          9 16 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 2 -1.</_>\n        <_>\n          7 8 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 13 3 -1.</_>\n        <_>\n          3 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 4 -1.</_>\n        <_>\n          9 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 3 -1.</_>\n        <_>\n          8 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 4 -1.</_>\n        <_>\n          8 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 5 -1.</_>\n        <_>\n          9 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 4 -1.</_>\n        <_>\n          13 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 4 -1.</_>\n        <_>\n          6 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 1 -1.</_>\n        <_>\n          7 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 3 -1.</_>\n        <_>\n          12 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 2 -1.</_>\n        <_>\n          11 3 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 2 7 1 2.</_>\n        <_>\n          10 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 14 -1.</_>\n        <_>\n          6 8 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 5 -1.</_>\n        <_>\n          8 0 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 1 -1.</_>\n        <_>\n          7 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 5 -1.</_>\n        <_>\n          5 0 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 8 15 -1.</_>\n        <_>\n          2 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 3 -1.</_>\n        <_>\n          12 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 2 3 -1.</_>\n        <_>\n          13 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 4 3 -1.</_>\n        <_>\n          2 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 2 2 -1.</_>\n        <_>\n          12 6 1 1 2.</_>\n        <_>\n          11 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 3 -1.</_>\n        <_>\n          12 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 2 2 -1.</_>\n        <_>\n          7 6 1 1 2.</_>\n        <_>\n          8 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 4 3 -1.</_>\n        <_>\n          4 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 3 -1.</_>\n        <_>\n          12 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 1 -1.</_>\n        <_>\n          9 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 3 -1.</_>\n        <_>\n          4 6 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 3 -1.</_>\n        <_>\n          4 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 3 -1.</_>\n        <_>\n          12 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 3 -1.</_>\n        <_>\n          7 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 1 3 -1.</_>\n        <_>\n          4 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 2 -1.</_>\n        <_>\n          17 1 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 2 9 -1.</_>\n        <_>\n          8 13 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 2 -1.</_>\n        <_>\n          0 9 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 2 3 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 3 -1.</_>\n        <_>\n          8 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 6 6 -1.</_>\n        <_>\n          1 14 3 3 2.</_>\n        <_>\n          4 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 6 2 -1.</_>\n        <_>\n          0 19 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 4 3 -1.</_>\n        <_>\n          12 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 8 -1.</_>\n        <_>\n          10 8 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 4 3 -1.</_>\n        <_>\n          6 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 6 1 -1.</_>\n        <_>\n          6 18 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 2 -1.</_>\n        <_>\n          10 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 12 -1.</_>\n        <_>\n          10 7 4 6 2.</_>\n        <_>\n          6 13 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          9 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 6 -1.</_>\n        <_>\n          9 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 14 4 -1.</_>\n        <_>\n          10 16 7 2 2.</_>\n        <_>\n          3 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 4 -1.</_>\n        <_>\n          10 14 9 2 2.</_>\n        <_>\n          1 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          8 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 12 -1.</_>\n        <_>\n          0 4 10 6 2.</_>\n        <_>\n          10 10 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 12 -1.</_>\n        <_>\n          10 5 5 6 2.</_>\n        <_>\n          5 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 3 -1.</_>\n        <_>\n          8 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 3 -1.</_>\n        <_>\n          8 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 5 6 -1.</_>\n        <_>\n          13 15 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 6 -1.</_>\n        <_>\n          9 0 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 5 6 -1.</_>\n        <_>\n          2 15 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 2 12 -1.</_>\n        <_>\n          0 4 1 6 2.</_>\n        <_>\n          1 10 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 19 3 1 -1.</_>\n        <_>\n          10 19 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 6 -1.</_>\n        <_>\n          18 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 1 6 -1.</_>\n        <_>\n          0 5 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 6 -1.</_>\n        <_>\n          0 2 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 7 -1.</_>\n        <_>\n          18 2 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 7 -1.</_>\n        <_>\n          1 2 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 8 -1.</_>\n        <_>\n          8 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 1 4 -1.</_>\n        <_>\n          13 2 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 12 5 -1.</_>\n        <_>\n          9 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 1 4 -1.</_>\n        <_>\n          6 2 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 5 -1.</_>\n        <_>\n          7 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 8 -1.</_>\n        <_>\n          10 12 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 1 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 7 3 -1.</_>\n        <_>\n          5 17 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 14 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 14 2 -1.</_>\n        <_>\n          4 19 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 8 -1.</_>\n        <_>\n          9 12 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 3 3 -1.</_>\n        <_>\n          7 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 10 -1.</_>\n        <_>\n          11 5 6 5 2.</_>\n        <_>\n          5 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 5 10 -1.</_>\n        <_>\n          8 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 12 -1.</_>\n        <_>\n          5 10 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          7 15 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 5 16 -1.</_>\n        <_>\n          8 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 6 -1.</_>\n        <_>\n          8 15 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 2 -1.</_>\n        <_>\n          7 13 1 1 2.</_>\n        <_>\n          8 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 2 2 -1.</_>\n        <_>\n          7 12 1 1 2.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 14 -1.</_>\n        <_>\n          18 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 2 -1.</_>\n        <_>\n          12 12 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 1 2 -1.</_>\n        <_>\n          1 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 1 2 -1.</_>\n        <_>\n          2 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 1 -1.</_>\n        <_>\n          9 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 3 -1.</_>\n        <_>\n          9 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 2 2 -1.</_>\n        <_>\n          4 1 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 2 -1.</_>\n        <_>\n          3 1 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 3 4 -1.</_>\n        <_>\n          12 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 8 2 -1.</_>\n        <_>\n          7 8 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          8 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 3 -1.</_>\n        <_>\n          7 13 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 3 -1.</_>\n        <_>\n          5 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 6 -1.</_>\n        <_>\n          0 3 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 3 -1.</_>\n        <_>\n          9 6 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 4 -1.</_>\n        <_>\n          3 9 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 6 -1.</_>\n        <_>\n          5 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 12 -1.</_>\n        <_>\n          8 12 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 6 2 -1.</_>\n        <_>\n          12 17 3 1 2.</_>\n        <_>\n          9 18 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 4 3 -1.</_>\n        <_>\n          10 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 4 2 -1.</_>\n        <_>\n          4 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 14 -1.</_>\n        <_>\n          9 3 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 1 6 -1.</_>\n        <_>\n          15 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 2 6 -1.</_>\n        <_>\n          13 16 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 5 6 -1.</_>\n        <_>\n          4 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 17 4 2 -1.</_>\n        <_>\n          6 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 12 -1.</_>\n        <_>\n          11 5 5 6 2.</_>\n        <_>\n          6 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 12 -1.</_>\n        <_>\n          4 0 1 6 2.</_>\n        <_>\n          5 6 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 2 -1.</_>\n        <_>\n          6 1 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 1 -1.</_>\n        <_>\n          13 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 15 6 -1.</_>\n        <_>\n          5 7 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 2 -1.</_>\n        <_>\n          1 10 9 1 2.</_>\n        <_>\n          10 11 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 15 7 -1.</_>\n        <_>\n          6 6 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 3 3 -1.</_>\n        <_>\n          9 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 3 2 -1.</_>\n        <_>\n          8 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 5 3 -1.</_>\n        <_>\n          15 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 1 -1.</_>\n        <_>\n          0 14 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 6 3 -1.</_>\n        <_>\n          0 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 2 -1.</_>\n        <_>\n          5 4 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 1 -1.</_>\n        <_>\n          0 6 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 10 14 -1.</_>\n        <_>\n          11 3 5 7 2.</_>\n        <_>\n          6 10 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 6 -1.</_>\n        <_>\n          6 3 4 3 2.</_>\n        <_>\n          10 6 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 1 -1.</_>\n        <_>\n          13 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 10 14 -1.</_>\n        <_>\n          11 3 5 7 2.</_>\n        <_>\n          6 10 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 1 -1.</_>\n        <_>\n          6 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 10 14 -1.</_>\n        <_>\n          4 3 5 7 2.</_>\n        <_>\n          9 10 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          9 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 1 -1.</_>\n        <_>\n          0 3 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 10 3 -1.</_>\n        <_>\n          2 2 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          10 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 6 -1.</_>\n        <_>\n          9 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 6 -1.</_>\n        <_>\n          16 5 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 2 12 -1.</_>\n        <_>\n          16 6 1 6 2.</_>\n        <_>\n          15 12 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 10 -1.</_>\n        <_>\n          1 4 9 5 2.</_>\n        <_>\n          10 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 4 -1.</_>\n        <_>\n          9 6 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 2 -1.</_>\n        <_>\n          12 6 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 10 4 -1.</_>\n        <_>\n          5 14 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 2 -1.</_>\n        <_>\n          5 6 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 6 -1.</_>\n        <_>\n          8 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 6 -1.</_>\n        <_>\n          14 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 6 -1.</_>\n        <_>\n          18 0 2 3 2.</_>\n        <_>\n          16 3 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 6 -1.</_>\n        <_>\n          0 6 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 6 -1.</_>\n        <_>\n          0 0 2 3 2.</_>\n        <_>\n          2 3 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 5 -1.</_>\n        <_>\n          12 0 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 17 -1.</_>\n        <_>\n          16 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 20 -1.</_>\n        <_>\n          7 0 6 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 5 -1.</_>\n        <_>\n          7 0 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 1 -1.</_>\n        <_>\n          0 6 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 4 -1.</_>\n        <_>\n          10 7 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 4 -1.</_>\n        <_>\n          1 1 8 2 2.</_>\n        <_>\n          9 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 2 -1.</_>\n        <_>\n          7 2 2 1 2.</_>\n        <_>\n          9 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 9 3 -1.</_>\n        <_>\n          7 5 9 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 5 12 -1.</_>\n        <_>\n          10 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 2 3 -1.</_>\n        <_>\n          3 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 5 -1.</_>\n        <_>\n          9 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 3 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 2 2 -1.</_>\n        <_>\n          15 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          5 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 6 2 -1.</_>\n        <_>\n          2 12 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 4 3 -1.</_>\n        <_>\n          15 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 17 -1.</_>\n        <_>\n          16 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 4 3 -1.</_>\n        <_>\n          1 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 1 3 -1.</_>\n        <_>\n          9 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 7 -1.</_>\n        <_>\n          10 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 2 -1.</_>\n        <_>\n          8 16 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 7 -1.</_>\n        <_>\n          7 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          10 2 10 1 2.</_>\n        <_>\n          0 3 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 2 -1.</_>\n        <_>\n          6 8 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          0 2 10 1 2.</_>\n        <_>\n          10 3 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 2 10 -1.</_>\n        <_>\n          3 1 1 5 2.</_>\n        <_>\n          4 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 1 10 -1.</_>\n        <_>\n          13 9 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 4 3 -1.</_>\n        <_>\n          9 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 4 -1.</_>\n        <_>\n          2 11 8 2 2.</_>\n        <_>\n          10 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 5 -1.</_>\n        <_>\n          6 1 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 3 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 2 -1.</_>\n        <_>\n          9 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 2 -1.</_>\n        <_>\n          0 11 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 4 -1.</_>\n        <_>\n          1 7 3 2 2.</_>\n        <_>\n          4 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 4 -1.</_>\n        <_>\n          16 1 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 2 14 -1.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 12 -1.</_>\n        <_>\n          6 7 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 5 -1.</_>\n        <_>\n          10 0 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 10 -1.</_>\n        <_>\n          15 0 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 3 -1.</_>\n        <_>\n          7 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 2 -1.</_>\n        <_>\n          0 1 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 3 -1.</_>\n        <_>\n          11 0 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 12 -1.</_>\n        <_>\n          11 0 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 16 -1.</_>\n        <_>\n          1 3 2 8 2.</_>\n        <_>\n          3 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 3 -1.</_>\n        <_>\n          8 0 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 6 -1.</_>\n        <_>\n          9 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 13 -1.</_>\n        <_>\n          11 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 2 -1.</_>\n        <_>\n          8 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 1 12 -1.</_>\n        <_>\n          8 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 6 -1.</_>\n        <_>\n          10 10 6 3 2.</_>\n        <_>\n          4 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 3 -1.</_>\n        <_>\n          13 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 6 -1.</_>\n        <_>\n          4 10 6 3 2.</_>\n        <_>\n          10 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 4 -1.</_>\n        <_>\n          9 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 4 -1.</_>\n        <_>\n          10 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 2 3 -1.</_>\n        <_>\n          12 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 1 -1.</_>\n        <_>\n          0 6 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 2 -1.</_>\n        <_>\n          10 7 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 4 3 -1.</_>\n        <_>\n          1 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 5 3 -1.</_>\n        <_>\n          10 4 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 14 8 -1.</_>\n        <_>\n          3 9 7 4 2.</_>\n        <_>\n          10 13 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 10 -1.</_>\n        <_>\n          6 8 4 5 2.</_>\n        <_>\n          10 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 5 3 -1.</_>\n        <_>\n          10 4 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 5 3 -1.</_>\n        <_>\n          5 4 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 16 2 3 -1.</_>\n        <_>\n          13 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 3 3 -1.</_>\n        <_>\n          3 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 5 3 -1.</_>\n        <_>\n          7 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 2 3 -1.</_>\n        <_>\n          12 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 6 -1.</_>\n        <_>\n          15 13 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 2 3 -1.</_>\n        <_>\n          7 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 2 6 -1.</_>\n        <_>\n          4 13 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 4 -1.</_>\n        <_>\n          11 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 2 5 -1.</_>\n        <_>\n          13 4 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 4 -1.</_>\n        <_>\n          8 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 5 -1.</_>\n        <_>\n          6 4 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 6 1 2 -1.</_>\n        <_>\n          19 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 8 13 -1.</_>\n        <_>\n          12 7 4 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 1 2 -1.</_>\n        <_>\n          0 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 4 3 -1.</_>\n        <_>\n          6 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 2 2 -1.</_>\n        <_>\n          11 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 2 4 -1.</_>\n        <_>\n          11 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 2 3 -1.</_>\n        <_>\n          4 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 5 -1.</_>\n        <_>\n          7 0 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 4 -1.</_>\n        <_>\n          5 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 2 2 -1.</_>\n        <_>\n          10 6 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 14 4 -1.</_>\n        <_>\n          13 4 7 2 2.</_>\n        <_>\n          6 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 6 4 -1.</_>\n        <_>\n          5 16 3 2 2.</_>\n        <_>\n          8 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 4 -1.</_>\n        <_>\n          7 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 5 14 -1.</_>\n        <_>\n          8 12 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 7 -1.</_>\n        <_>\n          8 5 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 9 -1.</_>\n        <_>\n          0 3 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 8 -1.</_>\n        <_>\n          12 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 1 -1.</_>\n        <_>\n          6 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 2 6 -1.</_>\n        <_>\n          9 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 4 -1.</_>\n        <_>\n          12 5 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 12 -1.</_>\n        <_>\n          9 9 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 3 -1.</_>\n        <_>\n          8 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 7 -1.</_>\n        <_>\n          12 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 6 -1.</_>\n        <_>\n          3 12 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 10 -1.</_>\n        <_>\n          5 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 6 -1.</_>\n        <_>\n          6 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 2 12 -1.</_>\n        <_>\n          17 2 1 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 2 14 -1.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 12 9 -1.</_>\n        <_>\n          3 14 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 12 -1.</_>\n        <_>\n          2 2 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 18 -1.</_>\n        <_>\n          18 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 3 2 -1.</_>\n        <_>\n          16 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 15 -1.</_>\n        <_>\n          1 2 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 2 4 -1.</_>\n        <_>\n          1 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 2 18 -1.</_>\n        <_>\n          11 1 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          10 2 7 1 2.</_>\n        <_>\n          3 3 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 2 18 -1.</_>\n        <_>\n          8 1 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 12 -1.</_>\n        <_>\n          6 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 3 -1.</_>\n        <_>\n          8 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 5 2 -1.</_>\n        <_>\n          0 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 6 -1.</_>\n        <_>\n          9 0 1 3 2.</_>\n        <_>\n          10 3 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 6 -1.</_>\n        <_>\n          10 0 1 3 2.</_>\n        <_>\n          9 3 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          10 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 6 -1.</_>\n        <_>\n          9 0 1 3 2.</_>\n        <_>\n          10 3 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 6 -1.</_>\n        <_>\n          9 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 6 -1.</_>\n        <_>\n          9 6 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 4 3 -1.</_>\n        <_>\n          9 4 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 3 -1.</_>\n        <_>\n          0 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 2 -1.</_>\n        <_>\n          8 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 3 -1.</_>\n        <_>\n          12 6 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 12 -1.</_>\n        <_>\n          9 10 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 3 -1.</_>\n        <_>\n          5 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 1 3 -1.</_>\n        <_>\n          5 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          0 8 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 7 -1.</_>\n        <_>\n          6 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 10 -1.</_>\n        <_>\n          5 10 3 5 2.</_>\n        <_>\n          8 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 2 -1.</_>\n        <_>\n          9 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 1 3 -1.</_>\n        <_>\n          5 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 2 -1.</_>\n        <_>\n          10 1 10 1 2.</_>\n        <_>\n          0 2 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 2 -1.</_>\n        <_>\n          5 4 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 2 -1.</_>\n        <_>\n          7 4 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 14 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 4 -1.</_>\n        <_>\n          2 2 8 2 2.</_>\n        <_>\n          10 4 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 5 3 -1.</_>\n        <_>\n          7 13 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 10 -1.</_>\n        <_>\n          14 9 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 3 2 -1.</_>\n        <_>\n          16 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 10 -1.</_>\n        <_>\n          3 9 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 5 2 -1.</_>\n        <_>\n          0 17 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 12 -1.</_>\n        <_>\n          9 11 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 2 -1.</_>\n        <_>\n          5 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 1 2 -1.</_>\n        <_>\n          4 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 1 2 -1.</_>\n        <_>\n          11 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 16 2 -1.</_>\n        <_>\n          11 1 8 1 2.</_>\n        <_>\n          3 2 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 2 2 -1.</_>\n        <_>\n          3 6 1 1 2.</_>\n        <_>\n          4 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 11 5 3 2.</_>\n        <_>\n          10 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 6 -1.</_>\n        <_>\n          10 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 11 -1.</_>\n        <_>\n          16 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 11 -1.</_>\n        <_>\n          2 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 6 -1.</_>\n        <_>\n          2 11 8 3 2.</_>\n        <_>\n          10 14 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 10 -1.</_>\n        <_>\n          16 0 4 5 2.</_>\n        <_>\n          12 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 4 -1.</_>\n        <_>\n          16 2 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 0 4 5 2.</_>\n        <_>\n          4 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 4 -1.</_>\n        <_>\n          2 2 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 15 2 -1.</_>\n        <_>\n          9 9 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 4 8 -1.</_>\n        <_>\n          14 3 2 4 2.</_>\n        <_>\n          12 7 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 9 -1.</_>\n        <_>\n          10 2 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 1 -1.</_>\n        <_>\n          10 2 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 5 -1.</_>\n        <_>\n          16 1 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 6 -1.</_>\n        <_>\n          16 3 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 4 -1.</_>\n        <_>\n          6 3 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 5 -1.</_>\n        <_>\n          6 0 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 14 -1.</_>\n        <_>\n          12 2 6 7 2.</_>\n        <_>\n          6 9 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 3 5 -1.</_>\n        <_>\n          12 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 2 2 -1.</_>\n        <_>\n          5 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 3 -1.</_>\n        <_>\n          7 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 15 2 -1.</_>\n        <_>\n          9 9 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 2 -1.</_>\n        <_>\n          12 7 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 15 2 -1.</_>\n        <_>\n          6 9 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 10 -1.</_>\n        <_>\n          5 0 1 5 2.</_>\n        <_>\n          6 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 14 -1.</_>\n        <_>\n          0 7 20 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 8 4 -1.</_>\n        <_>\n          12 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 4 -1.</_>\n        <_>\n          4 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 3 -1.</_>\n        <_>\n          9 1 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 4 -1.</_>\n        <_>\n          10 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 1 -1.</_>\n        <_>\n          10 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 3 2 -1.</_>\n        <_>\n          8 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 2 8 -1.</_>\n        <_>\n          8 4 1 4 2.</_>\n        <_>\n          9 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 3 -1.</_>\n        <_>\n          5 9 12 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 1 3 -1.</_>\n        <_>\n          11 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 6 -1.</_>\n        <_>\n          6 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 17 8 3 -1.</_>\n        <_>\n          4 18 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 2 3 -1.</_>\n        <_>\n          17 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 2 -1.</_>\n        <_>\n          10 12 1 1 2.</_>\n        <_>\n          9 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 4 -1.</_>\n        <_>\n          9 13 1 2 2.</_>\n        <_>\n          10 15 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 10 -1.</_>\n        <_>\n          11 5 6 5 2.</_>\n        <_>\n          5 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 12 12 -1.</_>\n        <_>\n          12 3 6 6 2.</_>\n        <_>\n          6 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 2 -1.</_>\n        <_>\n          5 7 1 1 2.</_>\n        <_>\n          6 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 2 -1.</_>\n        <_>\n          5 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 14 -1.</_>\n        <_>\n          12 2 6 7 2.</_>\n        <_>\n          6 9 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 3 -1.</_>\n        <_>\n          9 2 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 17 -1.</_>\n        <_>\n          7 1 6 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 1 -1.</_>\n        <_>\n          5 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 4 3 -1.</_>\n        <_>\n          16 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          7 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 1 6 -1.</_>\n        <_>\n          6 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 4 2 -1.</_>\n        <_>\n          6 18 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 6 2 -1.</_>\n        <_>\n          13 18 3 1 2.</_>\n        <_>\n          10 19 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 1 3 -1.</_>\n        <_>\n          16 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 1 2 -1.</_>\n        <_>\n          9 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 12 -1.</_>\n        <_>\n          14 0 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 1 3 -1.</_>\n        <_>\n          15 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 3 3 -1.</_>\n        <_>\n          8 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 12 -1.</_>\n        <_>\n          5 0 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 1 -1.</_>\n        <_>\n          10 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 12 14 -1.</_>\n        <_>\n          2 2 6 7 2.</_>\n        <_>\n          8 9 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 3 -1.</_>\n        <_>\n          8 2 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 18 2 2 -1.</_>\n        <_>\n          18 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 8 -1.</_>\n        <_>\n          18 2 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 2 2 -1.</_>\n        <_>\n          1 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 6 -1.</_>\n        <_>\n          6 14 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 5 6 -1.</_>\n        <_>\n          13 12 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 3 -1.</_>\n        <_>\n          5 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 5 6 -1.</_>\n        <_>\n          2 12 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 15 3 -1.</_>\n        <_>\n          0 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 3 1 -1.</_>\n        <_>\n          17 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 3 2 -1.</_>\n        <_>\n          18 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 12 -1.</_>\n        <_>\n          0 8 4 6 2.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 8 6 -1.</_>\n        <_>\n          1 7 4 3 2.</_>\n        <_>\n          5 10 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 2 -1.</_>\n        <_>\n          16 1 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 4 -1.</_>\n        <_>\n          17 0 2 2 2.</_>\n        <_>\n          15 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 4 11 -1.</_>\n        <_>\n          3 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 1 8 -1.</_>\n        <_>\n          5 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 1 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 4 -1.</_>\n        <_>\n          8 6 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 9 1 -1.</_>\n        <_>\n          5 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 8 -1.</_>\n        <_>\n          9 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 12 -1.</_>\n        <_>\n          3 14 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 7 3 -1.</_>\n        <_>\n          6 14 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 3 -1.</_>\n        <_>\n          7 9 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 3 -1.</_>\n        <_>\n          12 2 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 6 2 -1.</_>\n        <_>\n          8 13 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 2 -1.</_>\n        <_>\n          0 2 9 1 2.</_>\n        <_>\n          9 3 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 6 -1.</_>\n        <_>\n          6 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 8 -1.</_>\n        <_>\n          15 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 6 4 -1.</_>\n        <_>\n          9 16 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 14 4 -1.</_>\n        <_>\n          2 11 7 2 2.</_>\n        <_>\n          9 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          14 10 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 12 -1.</_>\n        <_>\n          14 8 5 6 2.</_>\n        <_>\n          9 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          3 10 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 12 -1.</_>\n        <_>\n          1 8 5 6 2.</_>\n        <_>\n          6 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 1 -1.</_>\n        <_>\n          11 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 3 -1.</_>\n        <_>\n          9 4 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 1 -1.</_>\n        <_>\n          7 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 3 -1.</_>\n        <_>\n          6 5 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 3 -1.</_>\n        <_>\n          9 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 6 3 -1.</_>\n        <_>\n          8 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 0 4 6 2.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 3 -1.</_>\n        <_>\n          4 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 6 3 -1.</_>\n        <_>\n          12 17 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 7 2 -1.</_>\n        <_>\n          7 13 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 6 3 -1.</_>\n        <_>\n          2 17 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 16 6 -1.</_>\n        <_>\n          0 10 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 5 -1.</_>\n        <_>\n          10 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 10 -1.</_>\n        <_>\n          0 5 10 5 2.</_>\n        <_>\n          10 10 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 4 2 -1.</_>\n        <_>\n          5 1 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 10 -1.</_>\n        <_>\n          11 6 4 5 2.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 3 2 -1.</_>\n        <_>\n          17 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 10 -1.</_>\n        <_>\n          5 6 4 5 2.</_>\n        <_>\n          9 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 10 6 -1.</_>\n        <_>\n          5 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 2 6 -1.</_>\n        <_>\n          11 3 1 3 2.</_>\n        <_>\n          10 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 3 -1.</_>\n        <_>\n          0 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 8 4 -1.</_>\n        <_>\n          3 16 4 2 2.</_>\n        <_>\n          7 18 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 5 2 -1.</_>\n        <_>\n          8 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 12 -1.</_>\n        <_>\n          8 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 2 2 -1.</_>\n        <_>\n          6 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 2 3 -1.</_>\n        <_>\n          9 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 2 3 -1.</_>\n        <_>\n          13 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 17 -1.</_>\n        <_>\n          16 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 2 -1.</_>\n        <_>\n          6 10 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 1 -1.</_>\n        <_>\n          5 9 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 3 -1.</_>\n        <_>\n          9 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 3 -1.</_>\n        <_>\n          7 12 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 3 2 -1.</_>\n        <_>\n          0 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 1 -1.</_>\n        <_>\n          9 0 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 3 -1.</_>\n        <_>\n          9 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 17 6 -1.</_>\n        <_>\n          2 16 17 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 3 7 -1.</_>\n        <_>\n          2 3 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 4 -1.</_>\n        <_>\n          3 1 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 5 -1.</_>\n        <_>\n          14 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 2 -1.</_>\n        <_>\n          13 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 5 -1.</_>\n        <_>\n          3 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 2 6 -1.</_>\n        <_>\n          2 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 2 -1.</_>\n        <_>\n          9 11 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 1 -1.</_>\n        <_>\n          7 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 12 -1.</_>\n        <_>\n          8 6 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 2 -1.</_>\n        <_>\n          12 12 1 1 2.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 2 -1.</_>\n        <_>\n          5 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 1 3 -1.</_>\n        <_>\n          5 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 16 4 -1.</_>\n        <_>\n          11 11 8 2 2.</_>\n        <_>\n          3 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 3 -1.</_>\n        <_>\n          0 11 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 4 2 -1.</_>\n        <_>\n          4 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 2 2 -1.</_>\n        <_>\n          13 6 1 1 2.</_>\n        <_>\n          12 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 6 6 -1.</_>\n        <_>\n          12 13 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 2 -1.</_>\n        <_>\n          6 6 1 1 2.</_>\n        <_>\n          7 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 16 -1.</_>\n        <_>\n          8 4 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 3 2 -1.</_>\n        <_>\n          11 19 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 6 2 -1.</_>\n        <_>\n          12 17 3 1 2.</_>\n        <_>\n          9 18 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 5 2 -1.</_>\n        <_>\n          2 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 2 2 -1.</_>\n        <_>\n          3 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 3 -1.</_>\n        <_>\n          10 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 6 -1.</_>\n        <_>\n          9 6 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 2 11 -1.</_>\n        <_>\n          9 1 1 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 4 -1.</_>\n        <_>\n          9 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 1 -1.</_>\n        <_>\n          11 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 9 -1.</_>\n        <_>\n          1 3 1 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 6 -1.</_>\n        <_>\n          0 5 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 2 2 -1.</_>\n        <_>\n          12 15 1 1 2.</_>\n        <_>\n          11 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 2 2 -1.</_>\n        <_>\n          12 14 1 1 2.</_>\n        <_>\n          11 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 2 2 -1.</_>\n        <_>\n          7 15 1 1 2.</_>\n        <_>\n          8 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 2 2 -1.</_>\n        <_>\n          7 14 1 1 2.</_>\n        <_>\n          8 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 6 -1.</_>\n        <_>\n          10 13 2 3 2.</_>\n        <_>\n          8 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 16 4 -1.</_>\n        <_>\n          10 14 8 2 2.</_>\n        <_>\n          2 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 2 -1.</_>\n        <_>\n          9 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 5 3 -1.</_>\n        <_>\n          7 8 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 2 -1.</_>\n        <_>\n          9 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 18 -1.</_>\n        <_>\n          11 1 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 4 -1.</_>\n        <_>\n          8 5 1 2 2.</_>\n        <_>\n          9 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 6 -1.</_>\n        <_>\n          10 13 1 3 2.</_>\n        <_>\n          9 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 18 -1.</_>\n        <_>\n          12 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 18 -1.</_>\n        <_>\n          7 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 4 2 -1.</_>\n        <_>\n          7 15 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 1 -1.</_>\n        <_>\n          7 9 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 4 -1.</_>\n        <_>\n          10 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 6 2 -1.</_>\n        <_>\n          8 10 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 1 -1.</_>\n        <_>\n          0 7 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 5 4 -1.</_>\n        <_>\n          11 5 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 1 -1.</_>\n        <_>\n          10 7 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 3 3 -1.</_>\n        <_>\n          8 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 8 -1.</_>\n        <_>\n          10 0 8 4 2.</_>\n        <_>\n          2 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 10 -1.</_>\n        <_>\n          11 5 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 18 -1.</_>\n        <_>\n          4 2 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 6 -1.</_>\n        <_>\n          0 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 2 -1.</_>\n        <_>\n          6 1 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 2 -1.</_>\n        <_>\n          4 2 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 14 -1.</_>\n        <_>\n          2 8 16 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 12 -1.</_>\n        <_>\n          5 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 2 2 -1.</_>\n        <_>\n          9 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 5 6 -1.</_>\n        <_>\n          9 12 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 8 -1.</_>\n        <_>\n          3 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 5 8 -1.</_>\n        <_>\n          6 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 3 -1.</_>\n        <_>\n          9 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 3 -1.</_>\n        <_>\n          6 9 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 7 6 -1.</_>\n        <_>\n          2 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 14 4 -1.</_>\n        <_>\n          2 1 7 2 2.</_>\n        <_>\n          9 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 1 3 -1.</_>\n        <_>\n          11 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 8 2 -1.</_>\n        <_>\n          6 16 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 1 3 -1.</_>\n        <_>\n          8 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 2 8 -1.</_>\n        <_>\n          8 15 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 8 2 -1.</_>\n        <_>\n          6 16 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 8 3 -1.</_>\n        <_>\n          7 17 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 2 2 -1.</_>\n        <_>\n          0 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 8 4 -1.</_>\n        <_>\n          1 16 4 2 2.</_>\n        <_>\n          5 18 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 3 -1.</_>\n        <_>\n          2 10 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 2 4 -1.</_>\n        <_>\n          13 11 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 16 6 -1.</_>\n        <_>\n          0 15 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 4 -1.</_>\n        <_>\n          6 11 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 18 -1.</_>\n        <_>\n          19 2 1 9 2.</_>\n        <_>\n          18 11 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 7 1 9 -1.</_>\n        <_>\n          19 10 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 18 -1.</_>\n        <_>\n          0 2 1 9 2.</_>\n        <_>\n          1 11 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 1 9 -1.</_>\n        <_>\n          0 10 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 2 -1.</_>\n        <_>\n          14 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 2 3 -1.</_>\n        <_>\n          11 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 2 -1.</_>\n        <_>\n          7 9 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 6 -1.</_>\n        <_>\n          7 12 2 3 2.</_>\n        <_>\n          9 15 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 5 3 -1.</_>\n        <_>\n          8 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 2 2 -1.</_>\n        <_>\n          13 14 1 1 2.</_>\n        <_>\n          12 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 2 -1.</_>\n        <_>\n          7 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 4 -1.</_>\n        <_>\n          10 10 8 2 2.</_>\n        <_>\n          2 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 6 -1.</_>\n        <_>\n          9 0 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 3 -1.</_>\n        <_>\n          7 2 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 2 -1.</_>\n        <_>\n          0 13 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 11 2 -1.</_>\n        <_>\n          6 4 11 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 6 -1.</_>\n        <_>\n          16 0 4 3 2.</_>\n        <_>\n          12 3 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 1 2 -1.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 1 12 -1.</_>\n        <_>\n          8 12 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 13 -1.</_>\n        <_>\n          13 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 2 -1.</_>\n        <_>\n          7 11 1 1 2.</_>\n        <_>\n          8 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 1 3 -1.</_>\n        <_>\n          3 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 3 2 -1.</_>\n        <_>\n          11 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 1 -1.</_>\n        <_>\n          11 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 5 9 -1.</_>\n        <_>\n          1 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 4 -1.</_>\n        <_>\n          6 8 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 1 4 -1.</_>\n        <_>\n          13 14 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 4 14 -1.</_>\n        <_>\n          13 3 2 7 2.</_>\n        <_>\n          11 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 1 4 -1.</_>\n        <_>\n          6 14 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 14 -1.</_>\n        <_>\n          5 3 2 7 2.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 3 2 -1.</_>\n        <_>\n          11 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          9 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 12 6 -1.</_>\n        <_>\n          2 2 6 3 2.</_>\n        <_>\n          8 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 2 -1.</_>\n        <_>\n          9 6 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 12 -1.</_>\n        <_>\n          7 0 6 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 4 -1.</_>\n        <_>\n          5 7 3 2 2.</_>\n        <_>\n          8 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 4 -1.</_>\n        <_>\n          5 9 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 4 -1.</_>\n        <_>\n          9 7 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 2 -1.</_>\n        <_>\n          9 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 8 3 -1.</_>\n        <_>\n          6 18 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 6 2 -1.</_>\n        <_>\n          12 17 3 1 2.</_>\n        <_>\n          9 18 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 2 -1.</_>\n        <_>\n          4 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 9 2 -1.</_>\n        <_>\n          3 13 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 1 -1.</_>\n        <_>\n          10 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 4 6 -1.</_>\n        <_>\n          11 3 2 3 2.</_>\n        <_>\n          9 6 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 5 -1.</_>\n        <_>\n          3 3 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 2 18 -1.</_>\n        <_>\n          2 6 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 4 9 -1.</_>\n        <_>\n          14 5 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 3 2 -1.</_>\n        <_>\n          11 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 4 9 -1.</_>\n        <_>\n          2 5 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 3 2 -1.</_>\n        <_>\n          8 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 3 3 -1.</_>\n        <_>\n          10 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 6 -1.</_>\n        <_>\n          10 15 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 6 -1.</_>\n        <_>\n          7 7 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 2 -1.</_>\n        <_>\n          3 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 7 3 -1.</_>\n        <_>\n          8 5 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 2 3 -1.</_>\n        <_>\n          13 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 2 12 -1.</_>\n        <_>\n          8 12 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 8 14 -1.</_>\n        <_>\n          5 4 4 7 2.</_>\n        <_>\n          9 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 8 -1.</_>\n        <_>\n          10 1 10 4 2.</_>\n        <_>\n          0 5 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 2 -1.</_>\n        <_>\n          4 1 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 8 -1.</_>\n        <_>\n          0 1 10 4 2.</_>\n        <_>\n          10 5 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 2 -1.</_>\n        <_>\n          4 1 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 3 -1.</_>\n        <_>\n          9 5 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 10 6 -1.</_>\n        <_>\n          8 15 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 3 -1.</_>\n        <_>\n          8 5 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 1 -1.</_>\n        <_>\n          8 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 9 2 -1.</_>\n        <_>\n          14 18 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 7 -1.</_>\n        <_>\n          13 11 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 10 -1.</_>\n        <_>\n          4 6 6 5 2.</_>\n        <_>\n          10 11 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 3 -1.</_>\n        <_>\n          9 17 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 9 2 -1.</_>\n        <_>\n          14 18 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 8 -1.</_>\n        <_>\n          13 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 2 2 -1.</_>\n        <_>\n          4 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 4 4 -1.</_>\n        <_>\n          7 17 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 2 3 -1.</_>\n        <_>\n          13 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 1 -1.</_>\n        <_>\n          7 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 1 -1.</_>\n        <_>\n          8 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 4 -1.</_>\n        <_>\n          0 14 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 3 2 -1.</_>\n        <_>\n          10 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 3 -1.</_>\n        <_>\n          5 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 3 -1.</_>\n        <_>\n          8 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 2 12 -1.</_>\n        <_>\n          10 8 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 3 -1.</_>\n        <_>\n          0 4 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 2 3 -1.</_>\n        <_>\n          1 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 11 -1.</_>\n        <_>\n          16 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 16 -1.</_>\n        <_>\n          19 2 1 8 2.</_>\n        <_>\n          18 10 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 12 -1.</_>\n        <_>\n          3 8 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 2 -1.</_>\n        <_>\n          7 2 3 1 2.</_>\n        <_>\n          10 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 8 2 -1.</_>\n        <_>\n          16 4 4 1 2.</_>\n        <_>\n          12 5 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 2 -1.</_>\n        <_>\n          12 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 8 2 -1.</_>\n        <_>\n          0 4 4 1 2.</_>\n        <_>\n          4 5 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 3 5 -1.</_>\n        <_>\n          2 3 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 6 -1.</_>\n        <_>\n          16 5 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 3 -1.</_>\n        <_>\n          8 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 1 3 -1.</_>\n        <_>\n          8 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 1 2 -1.</_>\n        <_>\n          4 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 6 3 -1.</_>\n        <_>\n          8 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 3 -1.</_>\n        <_>\n          7 16 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 8 -1.</_>\n        <_>\n          9 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 2 -1.</_>\n        <_>\n          6 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 2 -1.</_>\n        <_>\n          12 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 13 10 -1.</_>\n        <_>\n          5 8 13 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 2 -1.</_>\n        <_>\n          4 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 2 -1.</_>\n        <_>\n          0 8 8 1 2.</_>\n        <_>\n          8 9 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 2 5 -1.</_>\n        <_>\n          11 8 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 13 -1.</_>\n        <_>\n          10 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 2 -1.</_>\n        <_>\n          1 7 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 2 1 -1.</_>\n        <_>\n          5 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 2 5 -1.</_>\n        <_>\n          11 8 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 8 -1.</_>\n        <_>\n          12 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 2 5 -1.</_>\n        <_>\n          8 8 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 8 -1.</_>\n        <_>\n          6 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 12 -1.</_>\n        <_>\n          9 7 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 2 3 -1.</_>\n        <_>\n          11 13 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 4 8 -1.</_>\n        <_>\n          8 11 2 4 2.</_>\n        <_>\n          10 15 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 11 -1.</_>\n        <_>\n          16 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 4 -1.</_>\n        <_>\n          18 2 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 2 -1.</_>\n        <_>\n          5 6 3 1 2.</_>\n        <_>\n          8 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 1 3 -1.</_>\n        <_>\n          5 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 14 -1.</_>\n        <_>\n          11 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 3 -1.</_>\n        <_>\n          8 2 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 14 -1.</_>\n        <_>\n          7 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 2 -1.</_>\n        <_>\n          9 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          8 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 10 -1.</_>\n        <_>\n          9 10 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 4 -1.</_>\n        <_>\n          9 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 11 -1.</_>\n        <_>\n          8 5 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 3 5 -1.</_>\n        <_>\n          11 6 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 5 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 5 -1.</_>\n        <_>\n          8 6 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 6 3 -1.</_>\n        <_>\n          9 10 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 7 -1.</_>\n        <_>\n          11 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 12 -1.</_>\n        <_>\n          0 9 20 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 1 -1.</_>\n        <_>\n          7 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 3 2 -1.</_>\n        <_>\n          13 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 6 -1.</_>\n        <_>\n          16 9 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 3 -1.</_>\n        <_>\n          7 16 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 7 3 -1.</_>\n        <_>\n          6 17 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 9 6 -1.</_>\n        <_>\n          11 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 14 1 3 -1.</_>\n        <_>\n          19 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 6 -1.</_>\n        <_>\n          3 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 19 9 1 -1.</_>\n        <_>\n          3 19 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 9 6 -1.</_>\n        <_>\n          11 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 6 6 -1.</_>\n        <_>\n          12 14 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 8 6 -1.</_>\n        <_>\n          1 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 2 -1.</_>\n        <_>\n          9 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 4 -1.</_>\n        <_>\n          18 2 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 3 -1.</_>\n        <_>\n          16 0 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 4 -1.</_>\n        <_>\n          1 2 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 3 -1.</_>\n        <_>\n          2 0 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 2 -1.</_>\n        <_>\n          10 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 2 2 -1.</_>\n        <_>\n          12 1 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 2 -1.</_>\n        <_>\n          9 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 2 -1.</_>\n        <_>\n          7 1 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 2 3 -1.</_>\n        <_>\n          10 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 15 6 2 -1.</_>\n        <_>\n          13 16 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 2 2 -1.</_>\n        <_>\n          8 12 1 1 2.</_>\n        <_>\n          9 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 3 5 -1.</_>\n        <_>\n          9 15 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 12 -1.</_>\n        <_>\n          8 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 8 -1.</_>\n        <_>\n          7 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 2 -1.</_>\n        <_>\n          0 12 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 2 2 -1.</_>\n        <_>\n          8 11 1 1 2.</_>\n        <_>\n          9 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 12 1 -1.</_>\n        <_>\n          11 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 2 -1.</_>\n        <_>\n          11 8 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 12 1 -1.</_>\n        <_>\n          5 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 2 -1.</_>\n        <_>\n          6 5 4 1 2.</_>\n        <_>\n          10 6 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 10 -1.</_>\n        <_>\n          10 10 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 2 4 -1.</_>\n        <_>\n          16 0 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 3 10 -1.</_>\n        <_>\n          9 10 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 2 3 -1.</_>\n        <_>\n          9 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          10 9 2 1 2.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 3 1 -1.</_>\n        <_>\n          7 1 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 2 4 -1.</_>\n        <_>\n          3 0 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 6 6 -1.</_>\n        <_>\n          12 14 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 2 9 -1.</_>\n        <_>\n          3 3 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 3 2 -1.</_>\n        <_>\n          14 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 3 2 -1.</_>\n        <_>\n          15 3 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 5 2 -1.</_>\n        <_>\n          2 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 12 10 -1.</_>\n        <_>\n          3 4 6 5 2.</_>\n        <_>\n          9 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 14 6 -1.</_>\n        <_>\n          5 3 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 3 2 -1.</_>\n        <_>\n          15 4 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 2 -1.</_>\n        <_>\n          7 11 1 1 2.</_>\n        <_>\n          8 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 6 6 -1.</_>\n        <_>\n          2 16 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 8 3 -1.</_>\n        <_>\n          6 14 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 18 1 -1.</_>\n        <_>\n          7 19 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 1 6 -1.</_>\n        <_>\n          8 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 15 -1.</_>\n        <_>\n          0 5 14 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 16 8 -1.</_>\n        <_>\n          3 4 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 12 -1.</_>\n        <_>\n          6 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 3 -1.</_>\n        <_>\n          6 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 4 -1.</_>\n        <_>\n          6 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 4 6 -1.</_>\n        <_>\n          17 14 2 3 2.</_>\n        <_>\n          15 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 6 8 -1.</_>\n        <_>\n          15 11 3 4 2.</_>\n        <_>\n          12 15 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 4 -1.</_>\n        <_>\n          9 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 1 -1.</_>\n        <_>\n          7 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 14 -1.</_>\n        <_>\n          12 3 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 6 2 -1.</_>\n        <_>\n          15 11 3 1 2.</_>\n        <_>\n          12 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 2 -1.</_>\n        <_>\n          0 3 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 1 -1.</_>\n        <_>\n          5 0 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 6 2 -1.</_>\n        <_>\n          15 11 3 1 2.</_>\n        <_>\n          12 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 2 2 -1.</_>\n        <_>\n          10 5 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 10 -1.</_>\n        <_>\n          9 0 1 5 2.</_>\n        <_>\n          10 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 14 2 2 -1.</_>\n        <_>\n          18 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 4 9 -1.</_>\n        <_>\n          13 14 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 2 2 -1.</_>\n        <_>\n          8 13 1 1 2.</_>\n        <_>\n          9 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 3 -1.</_>\n        <_>\n          7 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          8 10 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 4 2 -1.</_>\n        <_>\n          13 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 2 2 -1.</_>\n        <_>\n          6 14 1 1 2.</_>\n        <_>\n          7 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 2 2 -1.</_>\n        <_>\n          0 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 10 6 -1.</_>\n        <_>\n          7 11 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 4 -1.</_>\n        <_>\n          6 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 11 -1.</_>\n        <_>\n          10 9 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 4 3 -1.</_>\n        <_>\n          9 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 17 -1.</_>\n        <_>\n          3 3 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 3 -1.</_>\n        <_>\n          0 12 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 11 9 -1.</_>\n        <_>\n          4 6 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          3 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 5 -1.</_>\n        <_>\n          13 0 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 4 -1.</_>\n        <_>\n          12 7 3 2 2.</_>\n        <_>\n          9 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 2 -1.</_>\n        <_>\n          9 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 1 -1.</_>\n        <_>\n          6 8 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 2 -1.</_>\n        <_>\n          8 12 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 10 -1.</_>\n        <_>\n          15 0 2 5 2.</_>\n        <_>\n          13 5 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 2 -1.</_>\n        <_>\n          6 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 4 3 -1.</_>\n        <_>\n          8 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 9 2 -1.</_>\n        <_>\n          11 3 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 9 2 -1.</_>\n        <_>\n          6 3 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 9 14 -1.</_>\n        <_>\n          8 0 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 7 10 -1.</_>\n        <_>\n          7 8 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 3 -1.</_>\n        <_>\n          4 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          3 12 7 2 2.</_>\n        <_>\n          10 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 2 -1.</_>\n        <_>\n          8 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 9 8 -1.</_>\n        <_>\n          6 14 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 8 -1.</_>\n        <_>\n          9 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 3 -1.</_>\n        <_>\n          8 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 10 -1.</_>\n        <_>\n          7 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 3 3 -1.</_>\n        <_>\n          14 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 3 3 -1.</_>\n        <_>\n          3 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 4 2 -1.</_>\n        <_>\n          3 9 2 1 2.</_>\n        <_>\n          5 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 4 -1.</_>\n        <_>\n          10 11 10 2 2.</_>\n        <_>\n          0 13 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 4 -1.</_>\n        <_>\n          0 11 10 2 2.</_>\n        <_>\n          10 13 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 1 6 -1.</_>\n        <_>\n          10 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 2 -1.</_>\n        <_>\n          11 1 9 1 2.</_>\n        <_>\n          2 2 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 3 3 -1.</_>\n        <_>\n          8 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 1 -1.</_>\n        <_>\n          6 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 1 3 -1.</_>\n        <_>\n          11 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 12 -1.</_>\n        <_>\n          13 11 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 6 -1.</_>\n        <_>\n          1 16 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 1 3 -1.</_>\n        <_>\n          8 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 3 -1.</_>\n        <_>\n          7 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 2 -1.</_>\n        <_>\n          9 11 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 3 -1.</_>\n        <_>\n          6 1 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 14 -1.</_>\n        <_>\n          7 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 6 2 -1.</_>\n        <_>\n          9 16 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 12 -1.</_>\n        <_>\n          1 2 1 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 5 3 -1.</_>\n        <_>\n          1 1 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 3 -1.</_>\n        <_>\n          12 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 3 -1.</_>\n        <_>\n          5 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 3 -1.</_>\n        <_>\n          5 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          10 12 2 4 2.</_>\n        <_>\n          8 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 2 -1.</_>\n        <_>\n          11 17 9 1 2.</_>\n        <_>\n          2 18 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 2 -1.</_>\n        <_>\n          9 4 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 6 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 8 6 -1.</_>\n        <_>\n          9 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 9 -1.</_>\n        <_>\n          2 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 2 -1.</_>\n        <_>\n          7 4 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 12 4 -1.</_>\n        <_>\n          14 16 6 2 2.</_>\n        <_>\n          8 18 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 2 -1.</_>\n        <_>\n          0 0 9 1 2.</_>\n        <_>\n          9 1 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 18 -1.</_>\n        <_>\n          4 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 4 7 -1.</_>\n        <_>\n          14 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 2 2 -1.</_>\n        <_>\n          15 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 4 7 -1.</_>\n        <_>\n          4 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 2 2 -1.</_>\n        <_>\n          3 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 6 -1.</_>\n        <_>\n          11 2 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 6 -1.</_>\n        <_>\n          15 0 1 3 2.</_>\n        <_>\n          14 3 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 2 -1.</_>\n        <_>\n          7 11 1 1 2.</_>\n        <_>\n          8 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 2 2 -1.</_>\n        <_>\n          8 10 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 6 -1.</_>\n        <_>\n          9 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 4 2 -1.</_>\n        <_>\n          12 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 4 3 -1.</_>\n        <_>\n          8 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 8 2 -1.</_>\n        <_>\n          2 19 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 3 -1.</_>\n        <_>\n          2 10 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 2 -1.</_>\n        <_>\n          9 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 2 4 -1.</_>\n        <_>\n          5 14 1 2 2.</_>\n        <_>\n          6 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 2 -1.</_>\n        <_>\n          8 9 2 1 2.</_>\n        <_>\n          10 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 5 -1.</_>\n        <_>\n          9 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 2 -1.</_>\n        <_>\n          10 9 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 3 2 -1.</_>\n        <_>\n          9 9 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 6 -1.</_>\n        <_>\n          9 8 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          10 12 2 4 2.</_>\n        <_>\n          8 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 16 2 -1.</_>\n        <_>\n          10 17 8 1 2.</_>\n        <_>\n          2 18 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 8 -1.</_>\n        <_>\n          9 12 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 1 3 -1.</_>\n        <_>\n          3 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 3 6 -1.</_>\n        <_>\n          14 15 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 18 1 -1.</_>\n        <_>\n          7 19 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 15 2 -1.</_>\n        <_>\n          7 10 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 17 16 3 -1.</_>\n        <_>\n          4 18 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 9 -1.</_>\n        <_>\n          8 9 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 4 -1.</_>\n        <_>\n          9 16 1 2 2.</_>\n        <_>\n          10 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 8 -1.</_>\n        <_>\n          5 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 2 -1.</_>\n        <_>\n          13 1 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 6 -1.</_>\n        <_>\n          14 2 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 2 -1.</_>\n        <_>\n          6 7 1 1 2.</_>\n        <_>\n          7 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 1 -1.</_>\n        <_>\n          9 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 3 3 -1.</_>\n        <_>\n          9 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 3 -1.</_>\n        <_>\n          13 9 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 3 3 -1.</_>\n        <_>\n          8 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 3 -1.</_>\n        <_>\n          6 9 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 1 3 -1.</_>\n        <_>\n          10 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 4 -1.</_>\n        <_>\n          10 9 3 2 2.</_>\n        <_>\n          7 11 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 2 -1.</_>\n        <_>\n          4 7 1 1 2.</_>\n        <_>\n          5 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 1 -1.</_>\n        <_>\n          6 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 3 -1.</_>\n        <_>\n          18 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 2 -1.</_>\n        <_>\n          13 1 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 4 2 -1.</_>\n        <_>\n          5 1 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 5 2 -1.</_>\n        <_>\n          3 1 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 6 4 -1.</_>\n        <_>\n          17 7 3 2 2.</_>\n        <_>\n          14 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 2 -1.</_>\n        <_>\n          4 9 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 5 6 -1.</_>\n        <_>\n          2 13 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 2 4 -1.</_>\n        <_>\n          5 16 1 2 2.</_>\n        <_>\n          6 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 2 12 -1.</_>\n        <_>\n          16 6 1 6 2.</_>\n        <_>\n          15 12 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 6 16 -1.</_>\n        <_>\n          15 3 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          4 5 6 6 2.</_>\n        <_>\n          10 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 13 -1.</_>\n        <_>\n          10 1 5 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 2 2 -1.</_>\n        <_>\n          12 5 1 1 2.</_>\n        <_>\n          11 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 1 3 -1.</_>\n        <_>\n          13 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 4 -1.</_>\n        <_>\n          7 4 1 2 2.</_>\n        <_>\n          8 6 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 4 -1.</_>\n        <_>\n          10 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 6 -1.</_>\n        <_>\n          14 4 2 3 2.</_>\n        <_>\n          12 7 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 6 -1.</_>\n        <_>\n          7 6 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 2 -1.</_>\n        <_>\n          9 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 2 2 -1.</_>\n        <_>\n          16 6 1 1 2.</_>\n        <_>\n          15 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 4 4 -1.</_>\n        <_>\n          16 7 2 2 2.</_>\n        <_>\n          14 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 2 -1.</_>\n        <_>\n          7 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 18 1 -1.</_>\n        <_>\n          7 19 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 3 -1.</_>\n        <_>\n          12 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 2 3 -1.</_>\n        <_>\n          16 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 3 -1.</_>\n        <_>\n          5 4 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 2 3 -1.</_>\n        <_>\n          2 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 2 2 -1.</_>\n        <_>\n          16 6 1 1 2.</_>\n        <_>\n          15 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 1 6 -1.</_>\n        <_>\n          10 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 2 -1.</_>\n        <_>\n          0 7 5 1 2.</_>\n        <_>\n          5 8 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 2 -1.</_>\n        <_>\n          3 11 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 4 2 -1.</_>\n        <_>\n          12 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 2 2 -1.</_>\n        <_>\n          13 18 1 1 2.</_>\n        <_>\n          12 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 19 2 1 -1.</_>\n        <_>\n          7 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 2 16 -1.</_>\n        <_>\n          0 4 1 8 2.</_>\n        <_>\n          1 12 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 9 -1.</_>\n        <_>\n          16 4 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 1 2 -1.</_>\n        <_>\n          10 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 4 6 -1.</_>\n        <_>\n          4 14 2 3 2.</_>\n        <_>\n          6 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 1 4 -1.</_>\n        <_>\n          4 17 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          10 2 10 2 2.</_>\n        <_>\n          0 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 2 8 -1.</_>\n        <_>\n          14 9 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 5 -1.</_>\n        <_>\n          7 12 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 11 3 -1.</_>\n        <_>\n          9 15 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 7 3 -1.</_>\n        <_>\n          7 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 2 2 -1.</_>\n        <_>\n          3 6 1 1 2.</_>\n        <_>\n          4 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 7 -1.</_>\n        <_>\n          7 7 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 1 3 -1.</_>\n        <_>\n          14 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 3 -1.</_>\n        <_>\n          13 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 4 4 -1.</_>\n        <_>\n          2 7 2 2 2.</_>\n        <_>\n          4 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 13 6 -1.</_>\n        <_>\n          2 12 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 4 -1.</_>\n        <_>\n          11 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 5 2 -1.</_>\n        <_>\n          9 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 11 3 -1.</_>\n        <_>\n          0 15 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 2 8 -1.</_>\n        <_>\n          8 15 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 14 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 15 5 -1.</_>\n        <_>\n          10 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 1 10 -1.</_>\n        <_>\n          8 15 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 6 2 -1.</_>\n        <_>\n          6 14 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 7 3 -1.</_>\n        <_>\n          7 15 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 9 3 -1.</_>\n        <_>\n          7 17 9 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          8 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 1 6 -1.</_>\n        <_>\n          3 8 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 11 2 -1.</_>\n        <_>\n          6 6 11 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 2 -1.</_>\n        <_>\n          10 0 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 1 3 -1.</_>\n        <_>\n          5 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 2 -1.</_>\n        <_>\n          9 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 6 -1.</_>\n        <_>\n          10 2 5 3 2.</_>\n        <_>\n          5 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 4 -1.</_>\n        <_>\n          8 4 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 3 4 -1.</_>\n        <_>\n          9 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 6 -1.</_>\n        <_>\n          9 13 1 3 2.</_>\n        <_>\n          10 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 1 -1.</_>\n        <_>\n          10 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 15 -1.</_>\n        <_>\n          2 10 18 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 2 -1.</_>\n        <_>\n          4 3 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 2 -1.</_>\n        <_>\n          9 6 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 4 3 -1.</_>\n        <_>\n          8 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 3 -1.</_>\n        <_>\n          10 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 4 -1.</_>\n        <_>\n          0 12 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 4 -1.</_>\n        <_>\n          5 7 3 2 2.</_>\n        <_>\n          8 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 2 3 -1.</_>\n        <_>\n          10 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 2 -1.</_>\n        <_>\n          9 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 1 10 -1.</_>\n        <_>\n          4 9 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 4 2 -1.</_>\n        <_>\n          11 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 3 2 -1.</_>\n        <_>\n          12 19 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 16 6 -1.</_>\n        <_>\n          0 6 8 3 2.</_>\n        <_>\n          8 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 4 2 -1.</_>\n        <_>\n          11 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 3 2 -1.</_>\n        <_>\n          12 19 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 1 2 -1.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 1 3 -1.</_>\n        <_>\n          8 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 4 2 -1.</_>\n        <_>\n          11 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 4 6 -1.</_>\n        <_>\n          14 12 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 4 -1.</_>\n        <_>\n          7 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 8 -1.</_>\n        <_>\n          4 0 1 4 2.</_>\n        <_>\n          5 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 17 9 3 -1.</_>\n        <_>\n          14 17 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 5 -1.</_>\n        <_>\n          16 2 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 2 -1.</_>\n        <_>\n          8 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 17 9 3 -1.</_>\n        <_>\n          14 17 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 5 -1.</_>\n        <_>\n          16 2 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 9 3 -1.</_>\n        <_>\n          3 17 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 5 -1.</_>\n        <_>\n          2 2 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 9 -1.</_>\n        <_>\n          5 14 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 3 -1.</_>\n        <_>\n          9 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 5 3 -1.</_>\n        <_>\n          3 18 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 7 -1.</_>\n        <_>\n          9 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 5 -1.</_>\n        <_>\n          9 8 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 2 -1.</_>\n        <_>\n          2 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 6 -1.</_>\n        <_>\n          7 8 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 5 -1.</_>\n        <_>\n          10 8 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 6 -1.</_>\n        <_>\n          12 12 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 2 -1.</_>\n        <_>\n          14 4 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 3 -1.</_>\n        <_>\n          5 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 3 3 -1.</_>\n        <_>\n          4 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 3 3 -1.</_>\n        <_>\n          14 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 11 3 -1.</_>\n        <_>\n          6 13 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 3 6 -1.</_>\n        <_>\n          1 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 7 -1.</_>\n        <_>\n          3 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 4 -1.</_>\n        <_>\n          10 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 2 2 -1.</_>\n        <_>\n          10 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          9 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 10 10 -1.</_>\n        <_>\n          4 9 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 2 -1.</_>\n        <_>\n          10 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 2 -1.</_>\n        <_>\n          9 11 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 3 2 -1.</_>\n        <_>\n          9 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 12 -1.</_>\n        <_>\n          2 4 7 6 2.</_>\n        <_>\n          9 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 1 6 -1.</_>\n        <_>\n          10 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 8 16 -1.</_>\n        <_>\n          11 3 4 8 2.</_>\n        <_>\n          7 11 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 10 -1.</_>\n        <_>\n          5 6 4 5 2.</_>\n        <_>\n          9 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 8 -1.</_>\n        <_>\n          6 2 4 4 2.</_>\n        <_>\n          10 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 2 -1.</_>\n        <_>\n          12 5 2 1 2.</_>\n        <_>\n          10 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 3 -1.</_>\n        <_>\n          12 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 19 12 1 -1.</_>\n        <_>\n          8 19 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 1 -1.</_>\n        <_>\n          9 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 17 4 3 -1.</_>\n        <_>\n          13 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 3 -1.</_>\n        <_>\n          7 16 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 3 2 -1.</_>\n        <_>\n          11 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 3 -1.</_>\n        <_>\n          14 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 6 -1.</_>\n        <_>\n          4 12 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 3 2 -1.</_>\n        <_>\n          4 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 2 3 -1.</_>\n        <_>\n          9 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 3 2 -1.</_>\n        <_>\n          11 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 3 2 -1.</_>\n        <_>\n          8 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 2 -1.</_>\n        <_>\n          1 11 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 6 3 -1.</_>\n        <_>\n          12 5 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 1 3 -1.</_>\n        <_>\n          14 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 3 -1.</_>\n        <_>\n          2 5 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 1 3 -1.</_>\n        <_>\n          5 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 3 3 -1.</_>\n        <_>\n          14 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 3 -1.</_>\n        <_>\n          15 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 4 3 -1.</_>\n        <_>\n          3 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 2 -1.</_>\n        <_>\n          8 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 1 -1.</_>\n        <_>\n          0 0 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 4 -1.</_>\n        <_>\n          10 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 1 -1.</_>\n        <_>\n          10 0 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 4 -1.</_>\n        <_>\n          9 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 19 3 -1.</_>\n        <_>\n          1 7 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 2 -1.</_>\n        <_>\n          12 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 3 -1.</_>\n        <_>\n          7 9 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 3 -1.</_>\n        <_>\n          8 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 3 -1.</_>\n        <_>\n          2 10 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 12 -1.</_>\n        <_>\n          9 8 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 5 -1.</_>\n        <_>\n          8 3 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 4 3 -1.</_>\n        <_>\n          9 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 4 -1.</_>\n        <_>\n          10 8 3 2 2.</_>\n        <_>\n          7 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 2 -1.</_>\n        <_>\n          10 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 6 -1.</_>\n        <_>\n          7 5 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 6 -1.</_>\n        <_>\n          10 1 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 2 -1.</_>\n        <_>\n          8 5 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 4 -1.</_>\n        <_>\n          6 2 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 8 2 -1.</_>\n        <_>\n          4 8 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 6 -1.</_>\n        <_>\n          10 6 7 3 2.</_>\n        <_>\n          3 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 3 -1.</_>\n        <_>\n          3 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 2 2 -1.</_>\n        <_>\n          0 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 4 3 -1.</_>\n        <_>\n          8 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 20 -1.</_>\n        <_>\n          14 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 10 3 -1.</_>\n        <_>\n          10 9 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 20 -1.</_>\n        <_>\n          5 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 10 3 -1.</_>\n        <_>\n          0 9 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 4 -1.</_>\n        <_>\n          13 5 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 4 -1.</_>\n        <_>\n          10 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 6 6 -1.</_>\n        <_>\n          1 14 3 3 2.</_>\n        <_>\n          4 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 6 2 -1.</_>\n        <_>\n          1 18 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 12 -1.</_>\n        <_>\n          17 8 3 6 2.</_>\n        <_>\n          14 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 2 2 -1.</_>\n        <_>\n          18 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 4 2 -1.</_>\n        <_>\n          3 16 2 1 2.</_>\n        <_>\n          5 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 6 2 -1.</_>\n        <_>\n          4 16 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 12 -1.</_>\n        <_>\n          17 8 3 6 2.</_>\n        <_>\n          14 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 2 2 -1.</_>\n        <_>\n          18 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 9 2 -1.</_>\n        <_>\n          8 16 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 6 6 -1.</_>\n        <_>\n          3 14 3 3 2.</_>\n        <_>\n          6 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 12 -1.</_>\n        <_>\n          17 8 3 6 2.</_>\n        <_>\n          14 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 2 12 -1.</_>\n        <_>\n          11 11 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          0 8 3 6 2.</_>\n        <_>\n          3 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 2 12 -1.</_>\n        <_>\n          7 11 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 1 2 -1.</_>\n        <_>\n          14 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 1 -1.</_>\n        <_>\n          12 13 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 16 6 -1.</_>\n        <_>\n          0 6 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 8 2 -1.</_>\n        <_>\n          1 4 4 1 2.</_>\n        <_>\n          5 5 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 1 2 -1.</_>\n        <_>\n          14 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 3 -1.</_>\n        <_>\n          15 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 3 3 -1.</_>\n        <_>\n          8 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 1 2 -1.</_>\n        <_>\n          5 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 15 -1.</_>\n        <_>\n          14 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 2 6 -1.</_>\n        <_>\n          18 3 1 3 2.</_>\n        <_>\n          17 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 15 -1.</_>\n        <_>\n          5 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 2 6 -1.</_>\n        <_>\n          1 3 1 3 2.</_>\n        <_>\n          2 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 12 4 -1.</_>\n        <_>\n          7 17 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 19 3 -1.</_>\n        <_>\n          1 1 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 10 2 -1.</_>\n        <_>\n          3 17 5 1 2.</_>\n        <_>\n          8 18 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 10 15 -1.</_>\n        <_>\n          2 10 10 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 3 4 -1.</_>\n        <_>\n          13 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 13 1 2 -1.</_>\n        <_>\n          19 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 4 -1.</_>\n        <_>\n          4 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 1 2 -1.</_>\n        <_>\n          0 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 12 -1.</_>\n        <_>\n          12 13 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 2 2 -1.</_>\n        <_>\n          15 7 1 1 2.</_>\n        <_>\n          14 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 8 2 -1.</_>\n        <_>\n          5 4 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 6 -1.</_>\n        <_>\n          0 4 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 12 -1.</_>\n        <_>\n          19 2 1 6 2.</_>\n        <_>\n          18 8 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 1 2 -1.</_>\n        <_>\n          18 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 12 -1.</_>\n        <_>\n          0 2 1 6 2.</_>\n        <_>\n          1 8 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 1 2 -1.</_>\n        <_>\n          1 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 14 -1.</_>\n        <_>\n          18 4 2 7 2.</_>\n        <_>\n          16 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 6 -1.</_>\n        <_>\n          10 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 14 -1.</_>\n        <_>\n          0 4 2 7 2.</_>\n        <_>\n          2 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 6 -1.</_>\n        <_>\n          9 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 4 3 -1.</_>\n        <_>\n          9 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          8 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 4 3 -1.</_>\n        <_>\n          0 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 2 -1.</_>\n        <_>\n          4 7 1 1 2.</_>\n        <_>\n          5 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 1 -1.</_>\n        <_>\n          13 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 5 -1.</_>\n        <_>\n          11 4 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 3 -1.</_>\n        <_>\n          5 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 8 1 -1.</_>\n        <_>\n          4 3 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 1 -1.</_>\n        <_>\n          13 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 3 2 -1.</_>\n        <_>\n          15 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 1 -1.</_>\n        <_>\n          6 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 3 2 -1.</_>\n        <_>\n          4 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 2 2 -1.</_>\n        <_>\n          18 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 2 2 -1.</_>\n        <_>\n          13 14 1 1 2.</_>\n        <_>\n          12 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 2 2 -1.</_>\n        <_>\n          0 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 2 2 -1.</_>\n        <_>\n          6 14 1 1 2.</_>\n        <_>\n          7 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 5 -1.</_>\n        <_>\n          9 12 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 5 2 -1.</_>\n        <_>\n          12 18 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 3 -1.</_>\n        <_>\n          4 11 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 6 3 -1.</_>\n        <_>\n          4 9 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 12 -1.</_>\n        <_>\n          12 13 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 3 -1.</_>\n        <_>\n          8 8 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 12 -1.</_>\n        <_>\n          6 13 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 9 18 -1.</_>\n        <_>\n          4 2 3 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 5 2 -1.</_>\n        <_>\n          12 18 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          4 7 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 1 -1.</_>\n        <_>\n          8 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 2 -1.</_>\n        <_>\n          8 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 1 -1.</_>\n        <_>\n          10 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 3 1 -1.</_>\n        <_>\n          12 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 1 -1.</_>\n        <_>\n          9 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 1 -1.</_>\n        <_>\n          7 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 6 6 -1.</_>\n        <_>\n          12 15 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 1 6 -1.</_>\n        <_>\n          14 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 6 6 -1.</_>\n        <_>\n          2 15 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 1 -1.</_>\n        <_>\n          7 5 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 2 -1.</_>\n        <_>\n          10 7 6 1 2.</_>\n        <_>\n          4 8 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 10 -1.</_>\n        <_>\n          10 1 4 5 2.</_>\n        <_>\n          6 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 4 3 -1.</_>\n        <_>\n          3 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 4 3 -1.</_>\n        <_>\n          6 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 4 3 -1.</_>\n        <_>\n          9 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 2 3 -1.</_>\n        <_>\n          12 10 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 4 3 -1.</_>\n        <_>\n          7 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 1 -1.</_>\n        <_>\n          10 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 5 -1.</_>\n        <_>\n          5 0 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 7 -1.</_>\n        <_>\n          6 6 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 5 -1.</_>\n        <_>\n          10 0 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 7 -1.</_>\n        <_>\n          10 6 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          10 9 5 4 2.</_>\n        <_>\n          5 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 10 -1.</_>\n        <_>\n          12 0 2 5 2.</_>\n        <_>\n          10 5 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 8 3 -1.</_>\n        <_>\n          1 5 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 8 3 -1.</_>\n        <_>\n          4 5 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 3 -1.</_>\n        <_>\n          9 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 3 12 -1.</_>\n        <_>\n          12 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 4 3 -1.</_>\n        <_>\n          7 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 3 12 -1.</_>\n        <_>\n          5 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 7 6 -1.</_>\n        <_>\n          10 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 1 -1.</_>\n        <_>\n          8 1 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 8 -1.</_>\n        <_>\n          6 0 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 2 -1.</_>\n        <_>\n          4 8 4 1 2.</_></rects></_></features></cascade>\n</opencv_storage>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/classifiers/haarcascade_frontalface_alt_tree.xml",
    "content": "<?xml version=\"1.0\"?>\n<!--\n    Stump-based 20x20 gentle adaboost frontal face detector.\n    This detector uses tree of stage classifiers instead of a cascade\n    Created by Rainer Lienhart.\n\n////////////////////////////////////////////////////////////////////////////////////////\n\n  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n\n  By downloading, copying, installing or using the software you agree to this license.\n  If you do not agree to this license, do not download, install,\n  copy or use the software.\n\n\n                        Intel License Agreement\n                For Open Source Computer Vision Library\n\n Copyright (C) 2000, Intel Corporation, all rights reserved.\n Third party copyrights are property of their respective owners.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n   * Redistribution's of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n\n   * Redistribution's in binary form must reproduce the above copyright notice,\n     this list of conditions and the following disclaimer in the documentation\n     and/or other materials provided with the distribution.\n\n   * The name of Intel Corporation may not be used to endorse or promote products\n     derived from this software without specific prior written permission.\n\n This software is provided by the copyright holders and contributors \"as is\" and\n any express or implied warranties, including, but not limited to, the implied\n warranties of merchantability and fitness for a particular purpose are disclaimed.\n In no event shall the Intel Corporation or contributors be liable for any direct,\n indirect, incidental, special, exemplary, or consequential damages\n (including, but not limited to, procurement of substitute goods or services;\n loss of use, data, or profits; or business interruption) however caused\n and on any theory of liability, whether in contract, strict liability,\n or tort (including negligence or otherwise) arising in any way out of\n the use of this software, even if advised of the possibility of such damage.\n-->\n<opencv_storage>\n<cascade type_id=\"opencv-cascade-classifier\"><stageType>BOOST</stageType>\n  <featureType>HAAR</featureType>\n  <height>20</height>\n  <width>20</width>\n  <stageParams>\n    <maxWeakCount>406</maxWeakCount></stageParams>\n  <featureParams>\n    <maxCatCount>0</maxCatCount></featureParams>\n  <stageNum>47</stageNum>\n  <stages>\n    <_>\n      <maxWeakCount>3</maxWeakCount>\n      <stageThreshold>-1.3442519903182983e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 0 3.7895569112151861e-03</internalNodes>\n          <leafValues>\n            -9.2945802211761475e-01 6.4119851589202881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1 1.2098110280930996e-02</internalNodes>\n          <leafValues>\n            -7.1810090541839600e-01 4.7141009569168091e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2 1.2138449819758534e-03</internalNodes>\n          <leafValues>\n            -7.2831612825393677e-01 3.0330690741539001e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>9</maxWeakCount>\n      <stageThreshold>-1.6378560066223145e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3 8.7510552257299423e-03</internalNodes>\n          <leafValues>\n            -8.5947072505950928e-01 3.6881381273269653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4 2.1986700594425201e-02</internalNodes>\n          <leafValues>\n            -6.0180151462554932e-01 3.2897830009460449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5 6.4913398819044232e-04</internalNodes>\n          <leafValues>\n            -7.9431951045989990e-01 2.5493299961090088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6 -1.0192029876634479e-03</internalNodes>\n          <leafValues>\n            2.2729329764842987e-01 -6.3627982139587402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7 1.3674780493602157e-03</internalNodes>\n          <leafValues>\n            -6.0014182329177856e-01 2.4118369817733765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8 1.0245250305160880e-03</internalNodes>\n          <leafValues>\n            -5.8542472124099731e-01 1.2550109624862671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 9 1.8465859815478325e-02</internalNodes>\n          <leafValues>\n            1.9563560187816620e-01 -6.7630231380462646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 10 4.0901508182287216e-03</internalNodes>\n          <leafValues>\n            -4.4916498661041260e-01 2.6677688956260681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 11 1.1358099989593029e-02</internalNodes>\n          <leafValues>\n            1.8783229589462280e-01 -6.1379361152648926e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>16</maxWeakCount>\n      <stageThreshold>-1.7317579984664917e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 12 -1.1588949710130692e-02</internalNodes>\n          <leafValues>\n            3.4567040205001831e-01 -7.6478981971740723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 13 5.1809530705213547e-03</internalNodes>\n          <leafValues>\n            2.4104920029640198e-01 -6.9623559713363647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 14 2.1468549966812134e-03</internalNodes>\n          <leafValues>\n            -8.0553662776947021e-01 1.9838610291481018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 15 -3.6556499544531107e-03</internalNodes>\n          <leafValues>\n            -7.1833139657974243e-01 1.2305679917335510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 16 -1.9701640121638775e-03</internalNodes>\n          <leafValues>\n            2.2777689993381500e-01 -4.7520169615745544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 17 -3.3645539078861475e-03</internalNodes>\n          <leafValues>\n            -4.6095049381256104e-01 2.0394650101661682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 18 -7.4126059189438820e-05</internalNodes>\n          <leafValues>\n            1.8213239312171936e-01 -4.7829270362854004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 19 -1.7571110278367996e-02</internalNodes>\n          <leafValues>\n            -7.1737551689147949e-01 1.1311130225658417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 20 6.3840472139418125e-03</internalNodes>\n          <leafValues>\n            -4.0205681324005127e-01 2.0730289816856384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 21 -1.4723399654030800e-02</internalNodes>\n          <leafValues>\n            -6.7558771371841431e-01 6.8973086774349213e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 22 -5.2889222279191017e-03</internalNodes>\n          <leafValues>\n            -6.2105172872543335e-01 1.3349360227584839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 23 2.7743630111217499e-02</internalNodes>\n          <leafValues>\n            1.1760850250720978e-01 -5.4641121625900269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 24 3.9427559822797775e-02</internalNodes>\n          <leafValues>\n            -2.1134279668331146e-01 3.9452999830245972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 25 8.6949411779642105e-03</internalNodes>\n          <leafValues>\n            1.2580950558185577e-01 -4.7989100217819214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 26 2.8245279099792242e-03</internalNodes>\n          <leafValues>\n            1.9653140008449554e-01 -4.0256679058074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 27 -2.8915189206600189e-02</internalNodes>\n          <leafValues>\n            -8.0616527795791626e-01 8.1882260739803314e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>29</maxWeakCount>\n      <stageThreshold>-1.9308480024337769e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 28 8.0171944573521614e-03</internalNodes>\n          <leafValues>\n            -6.8981552124023438e-01 2.4136860668659210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 29 -2.4478728882968426e-03</internalNodes>\n          <leafValues>\n            2.1353200078010559e-01 -6.4146691560745239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 30 1.7917619552463293e-03</internalNodes>\n          <leafValues>\n            -6.1445468664169312e-01 1.9236929714679718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 31 4.3905500206165016e-04</internalNodes>\n          <leafValues>\n            -7.5360429286956787e-01 1.5696890652179718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 32 -3.6769549478776753e-04</internalNodes>\n          <leafValues>\n            1.7380510270595551e-01 -5.8404499292373657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 33 -4.2802388779819012e-03</internalNodes>\n          <leafValues>\n            -6.6968989372253418e-01 1.1289729923009872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 34 3.5238768905401230e-03</internalNodes>\n          <leafValues>\n            1.2501940131187439e-01 -7.3299217224121094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 35 7.9299701610580087e-04</internalNodes>\n          <leafValues>\n            -4.4966199994087219e-01 2.1590930223464966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 36 4.4371088733896613e-04</internalNodes>\n          <leafValues>\n            -3.8909769058227539e-01 2.1181149780750275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 37 -2.7145470958203077e-03</internalNodes>\n          <leafValues>\n            -4.6716868877410889e-01 1.5038399398326874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 38 -6.9272058317437768e-04</internalNodes>\n          <leafValues>\n            -5.8596551418304443e-01 1.1714380234479904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 39 4.9261808395385742e-02</internalNodes>\n          <leafValues>\n            -1.3800150156021118e-01 4.9366238713264465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 40 -2.2837519645690918e-02</internalNodes>\n          <leafValues>\n            -6.3743507862091064e-01 1.2324090301990509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 41 4.8372112214565277e-03</internalNodes>\n          <leafValues>\n            -1.2391629815101624e-01 1.0620889812707901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 42 1.0256259702146053e-02</internalNodes>\n          <leafValues>\n            -1.8767049908638000e-01 2.9824170470237732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 43 1.0618680156767368e-02</internalNodes>\n          <leafValues>\n            1.0612460225820541e-01 -3.3244881033897400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 44 2.4113139137625694e-02</internalNodes>\n          <leafValues>\n            8.7200611829757690e-02 -6.6846621036529541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 45 -3.6754710599780083e-03</internalNodes>\n          <leafValues>\n            1.1043280363082886e-01 -4.4581958651542664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 46 -3.8996201008558273e-02</internalNodes>\n          <leafValues>\n            -7.0228111743927002e-01 8.1809490919113159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 47 1.5777100343257189e-03</internalNodes>\n          <leafValues>\n            1.5954199433326721e-01 -3.2860770821571350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 48 9.1089410707354546e-03</internalNodes>\n          <leafValues>\n            1.0326369851827621e-01 -4.4402560591697693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 49 -1.7051609233021736e-02</internalNodes>\n          <leafValues>\n            -5.5853348970413208e-01 6.2711499631404877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 50 1.3652660418301821e-03</internalNodes>\n          <leafValues>\n            -5.3934460878372192e-01 7.0839896798133850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 51 -1.1186149902641773e-02</internalNodes>\n          <leafValues>\n            -4.7260180115699768e-01 8.1019416451454163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 52 -1.1705270037055016e-02</internalNodes>\n          <leafValues>\n            2.4750089645385742e-01 -1.7778989672660828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 53 -9.7736932337284088e-02</internalNodes>\n          <leafValues>\n            -5.6177508831024170e-01 8.0921821296215057e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 54 -8.5228063166141510e-02</internalNodes>\n          <leafValues>\n            -5.2233248949050903e-01 7.2821393609046936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 55 -3.6733459681272507e-02</internalNodes>\n          <leafValues>\n            4.3623578548431396e-01 -9.9339507520198822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 56 -3.6704430822283030e-03</internalNodes>\n          <leafValues>\n            1.4834220707416534e-01 -2.7119669318199158e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>36</maxWeakCount>\n      <stageThreshold>-2.0711259841918945e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 57 -1.1610370129346848e-03</internalNodes>\n          <leafValues>\n            -5.6377887725830078e-01 2.3568780720233917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 58 1.1830299627035856e-03</internalNodes>\n          <leafValues>\n            1.5724280476570129e-01 -6.7728179693222046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 59 -2.1273950114846230e-03</internalNodes>\n          <leafValues>\n            -6.6150152683258057e-01 1.4943139255046844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 60 -1.1893469840288162e-01</internalNodes>\n          <leafValues>\n            5.3225821256637573e-01 -2.2968369722366333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 61 -1.3624870218336582e-02</internalNodes>\n          <leafValues>\n            -6.0635501146316528e-01 1.7001089453697205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 62 -6.3198682619258761e-04</internalNodes>\n          <leafValues>\n            -6.8972241878509521e-01 1.1584629863500595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 63 -4.4108428992331028e-03</internalNodes>\n          <leafValues>\n            -6.2967002391815186e-01 1.2430600076913834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 64 -2.2982239723205566e-02</internalNodes>\n          <leafValues>\n            -5.0497251749038696e-01 1.6636120155453682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 65 -2.3721898905932903e-03</internalNodes>\n          <leafValues>\n            -6.2462240457534790e-01 1.3793750107288361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 66 8.7364763021469116e-03</internalNodes>\n          <leafValues>\n            1.3996620476245880e-01 -5.4822951555252075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 67 6.7737072706222534e-02</internalNodes>\n          <leafValues>\n            -1.9172480702400208e-01 5.4700487852096558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 68 -4.0138149634003639e-03</internalNodes>\n          <leafValues>\n            -5.5429118871688843e-01 1.4517059922218323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 69 1.2857170077040792e-04</internalNodes>\n          <leafValues>\n            -5.1031237840652466e-01 1.1023940145969391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 70 -3.9688948541879654e-02</internalNodes>\n          <leafValues>\n            -6.1830729246139526e-01 9.6676096320152283e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 71 -1.6646150033921003e-03</internalNodes>\n          <leafValues>\n            1.6449889540672302e-01 -3.7186318635940552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 72 5.3499247878789902e-03</internalNodes>\n          <leafValues>\n            1.1145050078630447e-01 -3.7441021203994751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 73 -2.2904010489583015e-02</internalNodes>\n          <leafValues>\n            -5.8097589015960693e-01 1.1077260226011276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 74 1.0703450068831444e-02</internalNodes>\n          <leafValues>\n            4.4733259826898575e-02 -5.8116632699966431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 75 -4.2331559234298766e-04</internalNodes>\n          <leafValues>\n            -5.4423791170120239e-01 8.7089292705059052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 76 1.5554429963231087e-02</internalNodes>\n          <leafValues>\n            5.6884340941905975e-02 -3.7645170092582703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 77 -2.0539449527859688e-02</internalNodes>\n          <leafValues>\n            -3.8714569807052612e-01 1.1833839863538742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 78 -3.1234358903020620e-03</internalNodes>\n          <leafValues>\n            8.3635427057743073e-02 -1.9862389564514160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 79 2.3932829499244690e-02</internalNodes>\n          <leafValues>\n            7.9600542783737183e-02 -6.5370100736618042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 80 8.3920456469058990e-02</internalNodes>\n          <leafValues>\n            -1.0653129965066910e-01 4.8772820830345154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 81 1.6003159806132317e-02</internalNodes>\n          <leafValues>\n            8.3643212914466858e-02 -5.9207731485366821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 82 5.8071441017091274e-03</internalNodes>\n          <leafValues>\n            8.7997503578662872e-02 -3.3279138803482056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 83 -8.1104427576065063e-02</internalNodes>\n          <leafValues>\n            6.3775187730789185e-01 -6.7692361772060394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 84 4.5403029769659042e-02</internalNodes>\n          <leafValues>\n            -5.1510389894247055e-02 3.0225670337677002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 85 1.3877229765057564e-02</internalNodes>\n          <leafValues>\n            9.9967628717422485e-02 -4.6520909667015076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 86 3.4590709954500198e-02</internalNodes>\n          <leafValues>\n            -9.7614437341690063e-02 3.4678751230239868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 87 1.5704549849033356e-02</internalNodes>\n          <leafValues>\n            7.6344117522239685e-02 -5.3356319665908813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 88 -1.0420549660921097e-01</internalNodes>\n          <leafValues>\n            6.1890971660614014e-01 -4.4259760528802872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 89 1.3443189859390259e-01</internalNodes>\n          <leafValues>\n            -5.9853021055459976e-02 6.3635712862014771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 90 -2.5646309368312359e-03</internalNodes>\n          <leafValues>\n            -5.3600472211837769e-01 7.3116026818752289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 91 1.8647089600563049e-02</internalNodes>\n          <leafValues>\n            6.9856151938438416e-02 -5.6878322362899780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 92 1.5159539878368378e-02</internalNodes>\n          <leafValues>\n            1.8206339329481125e-02 -2.7663159370422363e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>7</maxWeakCount>\n      <stageThreshold>-2.1360809803009033e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 93 1.4778429269790649e-01</internalNodes>\n          <leafValues>\n            -8.9933121204376221e-01 5.7035928964614868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 94 2.9984670877456665e-01</internalNodes>\n          <leafValues>\n            -6.5394151210784912e-01 3.5054451227188110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 95 -7.9061716794967651e-02</internalNodes>\n          <leafValues>\n            4.4085291028022766e-01 -6.5087568759918213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 96 5.8428961783647537e-02</internalNodes>\n          <leafValues>\n            -4.2665359377861023e-01 5.8410567045211792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 97 -1.4664280228316784e-02</internalNodes>\n          <leafValues>\n            3.2435241341590881e-01 -5.9659618139266968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 98 3.9517199993133545e-01</internalNodes>\n          <leafValues>\n            -7.5798347592353821e-02 4.8659950494766235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 99 1.1040589958429337e-01</internalNodes>\n          <leafValues>\n            -8.4556102752685547e-01 2.1374569833278656e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>50</maxWeakCount>\n      <stageThreshold>-1.8755869865417480e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 100 3.7777079269289970e-03</internalNodes>\n          <leafValues>\n            1.8744400143623352e-01 -6.5354061126708984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 101 5.3003188222646713e-03</internalNodes>\n          <leafValues>\n            9.3951843678951263e-02 -5.6917887926101685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 102 -5.5426009930670261e-03</internalNodes>\n          <leafValues>\n            1.6031709313392639e-01 -5.1822239160537720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 103 -9.1971885412931442e-03</internalNodes>\n          <leafValues>\n            -5.7420462369918823e-01 1.4791400730609894e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 104 5.3701602155342698e-04</internalNodes>\n          <leafValues>\n            -7.0449697971343994e-01 1.0752149671316147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 105 -2.2125479299575090e-03</internalNodes>\n          <leafValues>\n            -5.0877428054809570e-01 1.1367189884185791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 106 1.1675730347633362e-02</internalNodes>\n          <leafValues>\n            8.4258683025836945e-02 -6.7384701967239380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 107 -2.0404369570314884e-03</internalNodes>\n          <leafValues>\n            1.6251119971275330e-01 -4.1435649991035461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 108 -7.6540438458323479e-03</internalNodes>\n          <leafValues>\n            -4.2833179235458374e-01 1.3060709834098816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 109 2.9370479285717010e-02</internalNodes>\n          <leafValues>\n            5.4651051759719849e-02 -3.4795379638671875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 110 -9.5828901976346970e-03</internalNodes>\n          <leafValues>\n            -4.8620718717575073e-01 1.1706890165805817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 111 6.0666278004646301e-03</internalNodes>\n          <leafValues>\n            -3.6553880572319031e-01 8.7813600897789001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 112 1.7992249922826886e-03</internalNodes>\n          <leafValues>\n            1.6035990417003632e-01 -3.0859109759330750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 113 -1.0092309676110744e-02</internalNodes>\n          <leafValues>\n            -3.9505869150161743e-01 1.1514779925346375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 114 2.5171819142997265e-03</internalNodes>\n          <leafValues>\n            -3.0043110251426697e-01 1.8256050348281860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 115 -1.7089240252971649e-02</internalNodes>\n          <leafValues>\n            -5.2173590660095215e-01 9.7457267343997955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 116 -5.5856268852949142e-02</internalNodes>\n          <leafValues>\n            5.3540021181106567e-01 -8.9221552014350891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 117 -2.3930610623210669e-03</internalNodes>\n          <leafValues>\n            -4.7012439370155334e-01 8.6141407489776611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 118 3.6918919067829847e-03</internalNodes>\n          <leafValues>\n            -2.7755591273307800e-01 1.5186099708080292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 119 2.1945969201624393e-03</internalNodes>\n          <leafValues>\n            -1.6867069900035858e-01 1.1952520161867142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 120 2.9675459954887629e-03</internalNodes>\n          <leafValues>\n            -3.8940680027008057e-01 1.0388910025358200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 121 1.9976729527115822e-03</internalNodes>\n          <leafValues>\n            9.1141343116760254e-02 -4.1050049662590027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 122 -2.0369699224829674e-02</internalNodes>\n          <leafValues>\n            -5.9968769550323486e-01 6.9301806390285492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 123 2.3318571038544178e-03</internalNodes>\n          <leafValues>\n            6.1892550438642502e-02 -3.2886800169944763e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 124 -4.2863588780164719e-02</internalNodes>\n          <leafValues>\n            -7.3844969272613525e-01 5.7071659713983536e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 125 1.1471749749034643e-03</internalNodes>\n          <leafValues>\n            -5.1379621028900146e-01 7.1196496486663818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 126 -1.3735669665038586e-02</internalNodes>\n          <leafValues>\n            -5.3785508871078491e-01 6.5542042255401611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 127 4.7165591269731522e-02</internalNodes>\n          <leafValues>\n            4.5389361679553986e-02 -6.8944799900054932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 128 -1.1204879730939865e-02</internalNodes>\n          <leafValues>\n            1.6932639479637146e-01 -2.3061719536781311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 129 -1.5478420257568359e-01</internalNodes>\n          <leafValues>\n            -7.7705371379852295e-01 1.2142470106482506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 130 5.8086342178285122e-03</internalNodes>\n          <leafValues>\n            1.1318100243806839e-01 -3.3206319808959961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 131 -2.8529569506645203e-02</internalNodes>\n          <leafValues>\n            -5.6747281551361084e-01 4.8734560608863831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 132 -3.8758948445320129e-02</internalNodes>\n          <leafValues>\n            5.9423100948333740e-01 -7.5139336287975311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 133 3.1037809327244759e-02</internalNodes>\n          <leafValues>\n            5.1973540335893631e-02 -5.8552652597427368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 134 7.4786080404010136e-06</internalNodes>\n          <leafValues>\n            -2.7623200416564941e-01 1.4088490605354309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 135 3.1000260263681412e-02</internalNodes>\n          <leafValues>\n            3.1331729143857956e-02 -5.6860172748565674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 136 -4.9860659986734390e-02</internalNodes>\n          <leafValues>\n            -8.2924622297286987e-01 3.8801580667495728e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 137 -4.2323280125856400e-02</internalNodes>\n          <leafValues>\n            -4.3062108755111694e-01 1.6579480841755867e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 138 9.1987219639122486e-04</internalNodes>\n          <leafValues>\n            -2.1154449880123138e-01 1.5517529845237732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 139 2.0559869706630707e-01</internalNodes>\n          <leafValues>\n            -6.2403179705142975e-02 3.2229611277580261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 140 2.9118418693542480e-01</internalNodes>\n          <leafValues>\n            3.9228469133377075e-02 -9.4128221273422241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 141 7.8337509185075760e-03</internalNodes>\n          <leafValues>\n            -1.4806599915027618e-01 1.7849209904670715e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 142 1.1393319815397263e-02</internalNodes>\n          <leafValues>\n            7.7987723052501678e-02 -4.2424258589744568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 143 -9.1807022690773010e-02</internalNodes>\n          <leafValues>\n            3.3689481019973755e-01 -5.6174129247665405e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 144 -1.6038250178098679e-02</internalNodes>\n          <leafValues>\n            -2.4954010546207428e-01 1.4570869505405426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 145 5.4830290377140045e-02</internalNodes>\n          <leafValues>\n            -1.5496000647544861e-01 2.0329600572586060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 146 2.4449700489640236e-02</internalNodes>\n          <leafValues>\n            6.0974378138780594e-02 -6.3072341680526733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 147 2.9260670766234398e-02</internalNodes>\n          <leafValues>\n            4.6833608299493790e-02 -3.7985381484031677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 148 3.9965552277863026e-03</internalNodes>\n          <leafValues>\n            -1.6927300393581390e-01 1.9100320339202881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 149 -6.9938853383064270e-02</internalNodes>\n          <leafValues>\n            5.4655587673187256e-01 -5.4965749382972717e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>25</maxWeakCount>\n      <stageThreshold>-1.9646480083465576e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 150 4.5835621654987335e-02</internalNodes>\n          <leafValues>\n            -4.9982848763465881e-01 4.0961080789566040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 151 2.6363100856542587e-02</internalNodes>\n          <leafValues>\n            -3.9193201065063477e-01 5.1567757129669189e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 152 1.5189830213785172e-02</internalNodes>\n          <leafValues>\n            -5.2216362953186035e-01 3.1368219852447510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 153 -2.0805280655622482e-02</internalNodes>\n          <leafValues>\n            3.7614479660987854e-01 -4.7375538945198059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 154 -7.4902721680700779e-03</internalNodes>\n          <leafValues>\n            1.6283489763736725e-01 -7.0384472608566284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 155 2.7719369530677795e-01</internalNodes>\n          <leafValues>\n            -1.6404120624065399e-01 3.3481580018997192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 156 6.4188443124294281e-02</internalNodes>\n          <leafValues>\n            -8.0176621675491333e-01 1.2763829529285431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 157 4.0668170899152756e-02</internalNodes>\n          <leafValues>\n            -3.3386930823326111e-01 2.8456181287765503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 158 7.4888020753860474e-03</internalNodes>\n          <leafValues>\n            -3.7188920378684998e-01 2.5932261347770691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 159 6.4942672848701477e-02</internalNodes>\n          <leafValues>\n            1.0372909903526306e-01 -7.1671068668365479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 160 -2.1149769891053438e-03</internalNodes>\n          <leafValues>\n            -7.5683927536010742e-01 7.9019591212272644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 161 -4.8293141298927367e-04</internalNodes>\n          <leafValues>\n            -4.9852079153060913e-01 8.1111326813697815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 162 1.3996459543704987e-01</internalNodes>\n          <leafValues>\n            8.7497599422931671e-02 -7.6389372348785400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 163 5.2211988717317581e-02</internalNodes>\n          <leafValues>\n            3.1640481203794479e-02 -5.3281372785568237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 164 3.0680459458380938e-03</internalNodes>\n          <leafValues>\n            -6.2458527088165283e-01 1.3869540393352509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 165 5.0478860735893250e-02</internalNodes>\n          <leafValues>\n            7.9063497483730316e-02 -7.4017041921615601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 166 -8.5122063755989075e-03</internalNodes>\n          <leafValues>\n            -4.9971660971641541e-01 1.1132259666919708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 167 7.0091806352138519e-02</internalNodes>\n          <leafValues>\n            9.7081907093524933e-02 -6.1879187822341919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 168 -2.7261190116405487e-03</internalNodes>\n          <leafValues>\n            9.7546629607677460e-02 -5.7760041952133179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 169 1.0676559992134571e-02</internalNodes>\n          <leafValues>\n            -2.9058128595352173e-01 1.8426120281219482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 170 6.3848652644082904e-04</internalNodes>\n          <leafValues>\n            1.3869750499725342e-01 -4.2546540498733521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 171 -4.7957260161638260e-02</internalNodes>\n          <leafValues>\n            -7.3249137401580811e-01 4.1188109666109085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 172 1.7140049487352371e-02</internalNodes>\n          <leafValues>\n            -3.1973451375961304e-01 1.6840089857578278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 173 7.8544542193412781e-02</internalNodes>\n          <leafValues>\n            5.0053231418132782e-02 -7.1410048007965088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 174 -1.1342849582433701e-02</internalNodes>\n          <leafValues>\n            -3.8810971379280090e-01 1.2976409494876862e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>53</maxWeakCount>\n      <stageThreshold>-2.1222629547119141e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 175 -8.6751781054772437e-05</internalNodes>\n          <leafValues>\n            2.5179910659790039e-01 -6.7723119258880615e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 176 2.0550179481506348e-01</internalNodes>\n          <leafValues>\n            2.0217150449752808e-02 -3.3618199825286865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 177 1.3893260061740875e-01</internalNodes>\n          <leafValues>\n            1.0678269714117050e-01 -8.6710119247436523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 178 2.6432450395077467e-03</internalNodes>\n          <leafValues>\n            -4.1057088971138000e-01 2.5603920221328735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 179 -1.6145260306075215e-03</internalNodes>\n          <leafValues>\n            1.7448160052299500e-01 -5.0290131568908691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 180 -4.6492749825119972e-03</internalNodes>\n          <leafValues>\n            -8.3960932493209839e-01 1.0409969836473465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 181 -5.5983918718993664e-03</internalNodes>\n          <leafValues>\n            -5.2673357725143433e-01 1.2114489823579788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 182 2.1482799202203751e-03</internalNodes>\n          <leafValues>\n            8.6831927299499512e-02 -5.2384740114212036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 183 -2.2942349314689636e-03</internalNodes>\n          <leafValues>\n            1.5666730701923370e-01 -3.9387580752372742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 184 -1.0809659725055099e-03</internalNodes>\n          <leafValues>\n            9.4777546823024750e-02 -5.7967597246170044e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 185 -1.8739879131317139e-02</internalNodes>\n          <leafValues>\n            -4.3780770897865295e-01 1.2754319608211517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 186 -2.0956669468432665e-03</internalNodes>\n          <leafValues>\n            2.1275860071182251e-01 -1.7645539343357086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 187 -6.1370119452476501e-02</internalNodes>\n          <leafValues>\n            -6.7007988691329956e-01 8.5291177034378052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 188 -4.5074969530105591e-02</internalNodes>\n          <leafValues>\n            -4.7614151239395142e-01 3.8384389132261276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 189 4.5961341820657253e-03</internalNodes>\n          <leafValues>\n            9.0776696801185608e-02 -5.3642177581787109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 190 -5.6205179542303085e-02</internalNodes>\n          <leafValues>\n            -4.4128128886222839e-01 2.6340639218688011e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 191 -1.7070030793547630e-02</internalNodes>\n          <leafValues>\n            3.1962528824806213e-01 -1.5699079632759094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 192 1.3778540305793285e-02</internalNodes>\n          <leafValues>\n            -4.1468238830566406e-01 1.0832040011882782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 193 5.6932470761239529e-03</internalNodes>\n          <leafValues>\n            1.0973270237445831e-01 -4.1420969367027283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 194 1.1573060182854533e-03</internalNodes>\n          <leafValues>\n            -4.6996459364891052e-01 1.4088229835033417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 195 -4.3259391532046720e-05</internalNodes>\n          <leafValues>\n            -5.9117478132247925e-01 7.2208836674690247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 196 -1.4467669825535268e-04</internalNodes>\n          <leafValues>\n            1.4340500533580780e-01 -2.0809020102024078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 197 -3.0667539685964584e-02</internalNodes>\n          <leafValues>\n            -6.4181727170944214e-01 7.6316222548484802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 198 6.4002368599176407e-03</internalNodes>\n          <leafValues>\n            -1.5426200628280640e-01 2.0618820190429688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 199 2.7318780776113272e-03</internalNodes>\n          <leafValues>\n            -1.8429130315780640e-01 2.2046269476413727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 200 -4.1759859770536423e-02</internalNodes>\n          <leafValues>\n            5.1284658908843994e-01 -4.3097220361232758e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 201 -3.0174419283866882e-02</internalNodes>\n          <leafValues>\n            -3.6134809255599976e-01 1.1633390188217163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 202 6.8081771023571491e-03</internalNodes>\n          <leafValues>\n            -2.5953280925750732e-01 1.4927390217781067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 203 4.3430369347333908e-02</internalNodes>\n          <leafValues>\n            6.8601243197917938e-02 -5.8221191167831421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 204 2.1121300756931305e-02</internalNodes>\n          <leafValues>\n            -8.5372917354106903e-02 8.0498583614826202e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 205 9.9840283393859863e-02</internalNodes>\n          <leafValues>\n            5.3292520344257355e-02 -7.1819657087326050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 206 5.6953770108520985e-03</internalNodes>\n          <leafValues>\n            -8.8976107537746429e-02 1.3483940064907074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 207 -5.9984568506479263e-02</internalNodes>\n          <leafValues>\n            6.8324291706085205e-01 -5.1916271448135376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 208 5.9353262186050415e-03</internalNodes>\n          <leafValues>\n            1.0305190086364746e-01 -2.5361439585685730e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 209 -7.4867930379696190e-05</internalNodes>\n          <leafValues>\n            1.3340729475021362e-01 -2.9323559999465942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 210 -2.5437519070692360e-04</internalNodes>\n          <leafValues>\n            1.5335780382156372e-01 -1.9387570023536682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 211 7.7576987678185105e-04</internalNodes>\n          <leafValues>\n            -3.1155571341514587e-01 1.0632509738206863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 212 5.4478500038385391e-02</internalNodes>\n          <leafValues>\n            2.6277480646967888e-02 -6.6687411069869995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 213 1.2692850083112717e-02</internalNodes>\n          <leafValues>\n            9.3613043427467346e-02 -3.9152190089225769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 214 -3.0766960233449936e-02</internalNodes>\n          <leafValues>\n            -5.9238088130950928e-01 4.8314999788999557e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 215 -1.9366150721907616e-02</internalNodes>\n          <leafValues>\n            4.3661609292030334e-01 -8.8672943413257599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 216 -2.8705620206892490e-03</internalNodes>\n          <leafValues>\n            1.5244780480861664e-01 -1.3861170411109924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 217 4.0003698319196701e-02</internalNodes>\n          <leafValues>\n            5.8748051524162292e-02 -6.9119709730148315e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 218 -8.1130467355251312e-02</internalNodes>\n          <leafValues>\n            -7.8684318065643311e-01 2.0421498920768499e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 219 -2.1017501130700111e-03</internalNodes>\n          <leafValues>\n            1.9100449979305267e-01 -1.9659680128097534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 220 8.6481617763638496e-03</internalNodes>\n          <leafValues>\n            8.8689289987087250e-02 -3.7414151430130005e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 221 -5.2429020404815674e-02</internalNodes>\n          <leafValues>\n            -7.2615998983383179e-01 3.9465688169002533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 222 3.4464800264686346e-03</internalNodes>\n          <leafValues>\n            -1.1640899628400803e-01 2.7386268973350525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 223 -7.0581152103841305e-03</internalNodes>\n          <leafValues>\n            -3.6283940076828003e-01 9.2023678123950958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 224 -5.7412259280681610e-02</internalNodes>\n          <leafValues>\n            -8.8839381933212280e-01 2.6647759601473808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 225 3.3479030244052410e-03</internalNodes>\n          <leafValues>\n            -1.4884050190448761e-01 1.8366430699825287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 226 -5.3958419710397720e-02</internalNodes>\n          <leafValues>\n            3.8098138570785522e-01 -4.4046580791473389e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 227 -2.5719689205288887e-02</internalNodes>\n          <leafValues>\n            3.2570821046829224e-01 -1.0078220069408417e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>44</maxWeakCount>\n      <stageThreshold>-2.1038460731506348e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 228 1.2441220134496689e-01</internalNodes>\n          <leafValues>\n            -3.8573729991912842e-01 3.9273661375045776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 229 3.7802878767251968e-02</internalNodes>\n          <leafValues>\n            -4.7028678655624390e-01 3.5786831378936768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 230 3.0441429466009140e-02</internalNodes>\n          <leafValues>\n            -3.9460399746894836e-01 3.2518500089645386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 231 3.9223438943736255e-04</internalNodes>\n          <leafValues>\n            -4.5166510343551636e-01 1.9672380387783051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 232 3.9077710360288620e-02</internalNodes>\n          <leafValues>\n            -2.1073329448699951e-01 4.3864768743515015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 233 -8.9118082541972399e-05</internalNodes>\n          <leafValues>\n            1.5196959674358368e-01 -5.9563517570495605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 234 8.8415127247571945e-03</internalNodes>\n          <leafValues>\n            -4.9292489886283875e-01 1.7406579852104187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 235 1.3666059821844101e-02</internalNodes>\n          <leafValues>\n            9.2861749231815338e-02 -5.5182307958602905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 236 -6.1203300952911377e-02</internalNodes>\n          <leafValues>\n            -6.7985290288925171e-01 1.0049080103635788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 237 5.7719892356544733e-04</internalNodes>\n          <leafValues>\n            -5.8301997184753418e-01 1.1089629679918289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 238 2.8370460495352745e-04</internalNodes>\n          <leafValues>\n            -5.9793341159820557e-01 9.3898378312587738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 239 1.7665980383753777e-02</internalNodes>\n          <leafValues>\n            -2.2015470266342163e-01 3.4533089399337769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 240 2.5697330012917519e-02</internalNodes>\n          <leafValues>\n            -3.6195701360702515e-01 1.6877350211143494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 241 -4.0316689759492874e-02</internalNodes>\n          <leafValues>\n            2.2964400053024292e-01 -2.9301440715789795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 242 4.6522719785571098e-03</internalNodes>\n          <leafValues>\n            -5.8995968103408813e-01 1.0466910153627396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 243 -1.3406000100076199e-02</internalNodes>\n          <leafValues>\n            -3.9572098851203918e-01 8.3528116345405579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 244 3.6127280443906784e-02</internalNodes>\n          <leafValues>\n            9.4165802001953125e-02 -5.4097181558609009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 245 2.2792080417275429e-03</internalNodes>\n          <leafValues>\n            1.2819069623947144e-01 -3.6514538526535034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 246 1.4454070478677750e-03</internalNodes>\n          <leafValues>\n            -2.3281599581241608e-01 1.9829919934272766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 247 5.7482529431581497e-02</internalNodes>\n          <leafValues>\n            7.5042396783828735e-02 -5.7704979181289673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 248 3.3360819797962904e-03</internalNodes>\n          <leafValues>\n            8.8012017309665680e-02 -4.6779251098632812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 249 3.7225749343633652e-02</internalNodes>\n          <leafValues>\n            3.2155111432075500e-02 -6.6346621513366699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 250 1.6612760722637177e-02</internalNodes>\n          <leafValues>\n            9.1689839959144592e-02 -5.2128171920776367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 251 2.0543249323964119e-02</internalNodes>\n          <leafValues>\n            -2.8753378987312317e-01 1.4261309802532196e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 252 -1.5633470320608467e-04</internalNodes>\n          <leafValues>\n            2.0246730744838715e-01 -2.2424469888210297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 253 1.2188810110092163e-01</internalNodes>\n          <leafValues>\n            -1.6461309790611267e-01 1.7583920061588287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 254 4.6413440257310867e-02</internalNodes>\n          <leafValues>\n            -6.8978017568588257e-01 6.4349927008152008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 255 1.4946439862251282e-01</internalNodes>\n          <leafValues>\n            3.9805840700864792e-02 -7.0177328586578369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 256 1.4346869662404060e-02</internalNodes>\n          <leafValues>\n            9.2628777027130127e-02 -4.6314170956611633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 257 3.6158718168735504e-02</internalNodes>\n          <leafValues>\n            6.4412936568260193e-02 -6.5277212858200073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 258 -5.5098228156566620e-02</internalNodes>\n          <leafValues>\n            -6.1021989583969116e-01 6.6034287214279175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 259 -3.2978600356727839e-03</internalNodes>\n          <leafValues>\n            8.6579866707324982e-02 -2.1844820678234100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 260 4.1257790289819241e-03</internalNodes>\n          <leafValues>\n            -4.4980299472808838e-01 9.3251250684261322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 261 3.3465269953012466e-02</internalNodes>\n          <leafValues>\n            1.4524499885737896e-02 -4.0200001001358032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 262 -2.2584630176424980e-02</internalNodes>\n          <leafValues>\n            -6.0067617893218994e-01 6.4416721463203430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 263 -7.1505038067698479e-03</internalNodes>\n          <leafValues>\n            6.7139469087123871e-02 -1.2947300076484680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 264 -5.1440041512250900e-02</internalNodes>\n          <leafValues>\n            -4.8466479778289795e-01 8.2093752920627594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 265 -1.9100949168205261e-02</internalNodes>\n          <leafValues>\n            -3.5394379496574402e-01 1.0851690173149109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 266 6.9468282163143158e-03</internalNodes>\n          <leafValues>\n            1.5407569706439972e-01 -2.3040190339088440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 267 -2.3886600509285927e-02</internalNodes>\n          <leafValues>\n            4.9007979035377502e-01 -5.9650428593158722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 268 -1.3964619720354676e-03</internalNodes>\n          <leafValues>\n            -3.3704701066017151e-01 1.1569459736347198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 269 2.6320600882172585e-02</internalNodes>\n          <leafValues>\n            -3.9132680743932724e-02 3.7615358829498291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 270 5.0336541607975960e-03</internalNodes>\n          <leafValues>\n            -3.5457020998001099e-01 1.0786720365285873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 271 -1.1523960158228874e-02</internalNodes>\n          <leafValues>\n            3.5148641467094421e-01 -1.1373709887266159e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>72</maxWeakCount>\n      <stageThreshold>-1.9109580516815186e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 272 -5.6698019616305828e-03</internalNodes>\n          <leafValues>\n            2.5299090147018433e-01 -5.5377197265625000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 273 1.2186550302430987e-03</internalNodes>\n          <leafValues>\n            9.1723538935184479e-02 -6.5661650896072388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 274 3.1903409399092197e-03</internalNodes>\n          <leafValues>\n            1.2116809934377670e-01 -5.4405361413955688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 275 -1.2117680162191391e-02</internalNodes>\n          <leafValues>\n            -6.8211251497268677e-01 1.1178220063447952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 276 2.2634069900959730e-03</internalNodes>\n          <leafValues>\n            -5.6313961744308472e-01 9.9629260599613190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 277 2.2871519904583693e-03</internalNodes>\n          <leafValues>\n            -5.0227242708206177e-01 1.1288029700517654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 278 -7.4018500745296478e-03</internalNodes>\n          <leafValues>\n            -5.0622308254241943e-01 1.0325270146131516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 279 6.5725757740437984e-03</internalNodes>\n          <leafValues>\n            3.1603671610355377e-02 -4.5879349112510681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 280 -1.7237069085240364e-02</internalNodes>\n          <leafValues>\n            -3.6556100845336914e-01 1.4122049510478973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 281 -1.7646619817242026e-03</internalNodes>\n          <leafValues>\n            1.8962210416793823e-01 -3.4349760413169861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 282 2.6085950434207916e-02</internalNodes>\n          <leafValues>\n            8.7369233369827271e-02 -5.3332161903381348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 283 8.5357967764139175e-03</internalNodes>\n          <leafValues>\n            -3.7360730767250061e-01 1.4508520066738129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 284 -6.2934341840445995e-03</internalNodes>\n          <leafValues>\n            -4.5775079727172852e-01 1.0016269981861115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 285 9.7081549465656281e-02</internalNodes>\n          <leafValues>\n            3.3761640079319477e-03 -8.4679859876632690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 286 -9.9455721676349640e-02</internalNodes>\n          <leafValues>\n            7.7892357110977173e-01 -5.4456088691949844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 287 3.9128549396991730e-02</internalNodes>\n          <leafValues>\n            3.9479929953813553e-02 -4.6620211005210876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 288 6.8423762917518616e-02</internalNodes>\n          <leafValues>\n            4.8163410276174545e-02 -8.1910741329193115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 289 -1.7304550856351852e-02</internalNodes>\n          <leafValues>\n            -4.6001830697059631e-01 2.1781340241432190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 290 4.5203989429865032e-05</internalNodes>\n          <leafValues>\n            1.5590970218181610e-01 -2.5734600424766541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 291 -5.3720749914646149e-02</internalNodes>\n          <leafValues>\n            -7.3984587192535400e-01 2.3658139631152153e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 292 -2.1576840663328767e-04</internalNodes>\n          <leafValues>\n            1.1803720146417618e-01 -3.5380458831787109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 293 1.2613219441846013e-03</internalNodes>\n          <leafValues>\n            -1.8313080072402954e-01 1.6306960582733154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 294 2.2714029997587204e-02</internalNodes>\n          <leafValues>\n            -9.5647342503070831e-02 3.8062781095504761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 295 2.0958330482244492e-02</internalNodes>\n          <leafValues>\n            6.1185598373413086e-02 -5.2644938230514526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 296 1.5458449721336365e-02</internalNodes>\n          <leafValues>\n            6.4466789364814758e-02 -4.7441288828849792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 297 -5.0828810781240463e-03</internalNodes>\n          <leafValues>\n            1.0018830001354218e-01 -3.6397251486778259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 298 1.1842510430142283e-03</internalNodes>\n          <leafValues>\n            -2.0603519678115845e-01 1.7129589617252350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 299 5.0187770277261734e-02</internalNodes>\n          <leafValues>\n            -7.0924967527389526e-02 1.0435319691896439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 300 1.7535200715065002e-01</internalNodes>\n          <leafValues>\n            3.7766210734844208e-02 -8.0802738666534424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 301 -6.8425558507442474e-02</internalNodes>\n          <leafValues>\n            -5.0214898586273193e-01 5.4671119898557663e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 302 2.2496099118143320e-03</internalNodes>\n          <leafValues>\n            -2.8013509511947632e-01 1.0950099676847458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 303 8.5355632007122040e-02</internalNodes>\n          <leafValues>\n            3.3376980572938919e-02 -7.3676842451095581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 304 -2.8825979679822922e-02</internalNodes>\n          <leafValues>\n            -4.8528099060058594e-01 4.9596078693866730e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 305 -1.3562700478360057e-03</internalNodes>\n          <leafValues>\n            1.8493090569972992e-01 -1.6541489958763123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 306 1.5731659950688481e-03</internalNodes>\n          <leafValues>\n            9.0431816875934601e-02 -3.0193880200386047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 307 -5.2912188693881035e-03</internalNodes>\n          <leafValues>\n            -4.3963611125946045e-01 4.6880699694156647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 308 4.2200140655040741e-02</internalNodes>\n          <leafValues>\n            -7.5348012149333954e-02 3.7712809443473816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 309 3.1030770391225815e-02</internalNodes>\n          <leafValues>\n            6.6053368151187897e-02 -4.7378420829772949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 310 8.0451928079128265e-03</internalNodes>\n          <leafValues>\n            -7.7326983213424683e-02 3.4898889064788818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 311 2.3791180923581123e-02</internalNodes>\n          <leafValues>\n            4.8629928380250931e-02 -5.8155477046966553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 312 -2.6884680613875389e-02</internalNodes>\n          <leafValues>\n            7.3852258920669556e-01 -4.0025118738412857e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 313 -1.7013859469443560e-03</internalNodes>\n          <leafValues>\n            1.4116409420967102e-01 -1.8305079638957977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 314 -3.2258979976177216e-02</internalNodes>\n          <leafValues>\n            -6.4598697423934937e-01 4.1774179786443710e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 315 -9.1719552874565125e-02</internalNodes>\n          <leafValues>\n            6.3651692867279053e-01 -4.4406279921531677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 316 1.1253220029175282e-02</internalNodes>\n          <leafValues>\n            -1.0398969799280167e-01 2.4386499822139740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 317 9.1702006757259369e-03</internalNodes>\n          <leafValues>\n            -1.0142300277948380e-01 1.7325720191001892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 318 -3.7584431469440460e-02</internalNodes>\n          <leafValues>\n            -6.5999048948287964e-01 3.5357259213924408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 319 1.4904039562679827e-04</internalNodes>\n          <leafValues>\n            -1.2504950165748596e-01 1.0161379724740982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 320 5.6240631965920329e-04</internalNodes>\n          <leafValues>\n            -2.1511219441890717e-01 1.0537440329790115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 321 -1.7314270138740540e-02</internalNodes>\n          <leafValues>\n            -1.6798290610313416e-01 6.1207499355077744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 322 -1.5429870225489140e-02</internalNodes>\n          <leafValues>\n            2.5674480199813843e-01 -9.7193486988544464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 323 -1.5612079761922359e-02</internalNodes>\n          <leafValues>\n            -3.5797500610351562e-01 6.9260068237781525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 324 7.4424187187105417e-04</internalNodes>\n          <leafValues>\n            -1.5740460157394409e-01 1.4921070635318756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 325 7.9008340835571289e-02</internalNodes>\n          <leafValues>\n            3.5924728959798813e-02 -6.4907592535018921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 326 -3.3477540127933025e-03</internalNodes>\n          <leafValues>\n            -2.5794708728790283e-01 8.1626862287521362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 327 3.5589419305324554e-02</internalNodes>\n          <leafValues>\n            -4.6870049089193344e-02 5.3945267200469971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 328 7.6168961822986603e-04</internalNodes>\n          <leafValues>\n            8.0409869551658630e-02 -2.8045970201492310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 329 9.6126887947320938e-03</internalNodes>\n          <leafValues>\n            9.2715777456760406e-02 -2.2755210101604462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 330 3.4582789987325668e-02</internalNodes>\n          <leafValues>\n            -9.5495507121086121e-02 2.8116491436958313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 331 -8.2031842321157455e-03</internalNodes>\n          <leafValues>\n            -3.3162289857864380e-01 4.0629711002111435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 332 2.5540109723806381e-02</internalNodes>\n          <leafValues>\n            7.0458933711051941e-02 -3.2799351215362549e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 333 -3.1389920040965080e-03</internalNodes>\n          <leafValues>\n            1.2529349327087402e-01 -6.0766801238059998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 334 4.5892409980297089e-03</internalNodes>\n          <leafValues>\n            -9.5335446298122406e-02 2.4738679826259613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 335 -2.3260030895471573e-02</internalNodes>\n          <leafValues>\n            -2.3823159933090210e-01 3.3502969890832901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 336 1.7964519793167710e-03</internalNodes>\n          <leafValues>\n            8.9843861758708954e-02 -2.8049159049987793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 337 -1.0952910035848618e-01</internalNodes>\n          <leafValues>\n            -4.6206548810005188e-01 7.4333418160676956e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 338 6.8442770279943943e-03</internalNodes>\n          <leafValues>\n            7.3520109057426453e-02 -3.6190700531005859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 339 -7.3719851672649384e-02</internalNodes>\n          <leafValues>\n            4.1131800413131714e-01 -6.8293057382106781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 340 9.4485012814402580e-03</internalNodes>\n          <leafValues>\n            -1.2132299691438675e-01 2.1491959691047668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 341 -7.4686057865619659e-02</internalNodes>\n          <leafValues>\n            2.4292010068893433e-01 -3.8520719856023788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 342 -1.8958229571580887e-02</internalNodes>\n          <leafValues>\n            -3.7263819575309753e-01 6.8381950259208679e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 343 -8.3170487778261304e-04</internalNodes>\n          <leafValues>\n            9.5785446465015411e-02 -1.0169020295143127e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>54</maxWeakCount>\n      <stageThreshold>-2.0048389434814453e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 344 1.5233230590820312e-01</internalNodes>\n          <leafValues>\n            -3.1805351376533508e-01 4.7039988636970520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 345 8.8482722640037537e-03</internalNodes>\n          <leafValues>\n            -3.6134269833564758e-01 2.7332958579063416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 346 2.9788410291075706e-02</internalNodes>\n          <leafValues>\n            -2.8059279918670654e-01 3.6270239949226379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 347 5.2725639194250107e-02</internalNodes>\n          <leafValues>\n            -1.9320569932460785e-01 3.5507258772850037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 348 2.6077419519424438e-02</internalNodes>\n          <leafValues>\n            -3.7120199203491211e-01 2.7038440108299255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 349 -4.4878520071506500e-02</internalNodes>\n          <leafValues>\n            2.9119300842285156e-01 -3.5178241133689880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 350 -9.3984341947361827e-04</internalNodes>\n          <leafValues>\n            -6.0143661499023438e-01 1.1815790086984634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 351 3.1817350536584854e-03</internalNodes>\n          <leafValues>\n            -6.1632722616195679e-01 1.0581470280885696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 352 -6.2214181525632739e-04</internalNodes>\n          <leafValues>\n            1.1701049655675888e-01 -6.1873781681060791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 353 5.4993429221212864e-03</internalNodes>\n          <leafValues>\n            7.1740642189979553e-02 -3.2122710347175598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 354 7.0621701888740063e-03</internalNodes>\n          <leafValues>\n            -3.0814599990844727e-01 1.8299129605293274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 355 -3.4492298960685730e-02</internalNodes>\n          <leafValues>\n            -3.6952570080757141e-01 1.1142779886722565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 356 -5.3783431649208069e-02</internalNodes>\n          <leafValues>\n            -6.6689962148666382e-01 8.4863640367984772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 357 -2.0194910466670990e-02</internalNodes>\n          <leafValues>\n            -4.2300069332122803e-01 5.6325469166040421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 358 -7.6839578105136752e-04</internalNodes>\n          <leafValues>\n            1.3547450304031372e-01 -3.5696288943290710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 359 6.6877179779112339e-03</internalNodes>\n          <leafValues>\n            -3.4379830956459045e-01 1.3302099704742432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 360 1.1147409677505493e-01</internalNodes>\n          <leafValues>\n            -4.9523550271987915e-01 9.7303003072738647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 361 -8.5021732375025749e-03</internalNodes>\n          <leafValues>\n            -5.1778990030288696e-01 6.7188903689384460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 362 -1.8897019326686859e-02</internalNodes>\n          <leafValues>\n            -4.7064769268035889e-01 9.0873777866363525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 363 5.7387170381844044e-03</internalNodes>\n          <leafValues>\n            -1.4860689640045166e-01 3.0976840853691101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 364 3.2604049891233444e-02</internalNodes>\n          <leafValues>\n            7.8677706420421600e-02 -5.4713827371597290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 365 1.8975350030814297e-05</internalNodes>\n          <leafValues>\n            -2.4359850585460663e-01 9.8908931016921997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 366 -1.9267159514129162e-03</internalNodes>\n          <leafValues>\n            -5.0522977113723755e-01 7.5119331479072571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 367 -7.7145430259406567e-03</internalNodes>\n          <leafValues>\n            -2.5014960765838623e-01 1.0211499780416489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 368 -1.8806649371981621e-02</internalNodes>\n          <leafValues>\n            -4.3269169330596924e-01 1.1147680133581161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 369 2.9912199825048447e-02</internalNodes>\n          <leafValues>\n            4.6748448163270950e-02 -5.8818292617797852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 370 -7.4260600376874208e-04</internalNodes>\n          <leafValues>\n            1.8389309942722321e-01 -2.0138260722160339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 371 4.0662181563675404e-03</internalNodes>\n          <leafValues>\n            -4.4948458671569824e-01 8.6881376802921295e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 372 1.8681669607758522e-02</internalNodes>\n          <leafValues>\n            -1.7103520035743713e-01 2.2931230068206787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 373 4.6580690890550613e-02</internalNodes>\n          <leafValues>\n            4.3874379247426987e-02 -6.6704601049423218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 374 -1.5030739828944206e-02</internalNodes>\n          <leafValues>\n            -7.6569449901580811e-01 4.2524490505456924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 375 6.3602820038795471e-02</internalNodes>\n          <leafValues>\n            3.3629488199949265e-02 -8.6777329444885254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 376 -3.3613100647926331e-02</internalNodes>\n          <leafValues>\n            -6.7464047670364380e-01 4.5196920633316040e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 377 -4.4314529746770859e-02</internalNodes>\n          <leafValues>\n            -4.7056430578231812e-01 2.0987950265407562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 378 2.9175819829106331e-02</internalNodes>\n          <leafValues>\n            5.6036490947008133e-02 -6.5745961666107178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 379 8.4737781435251236e-03</internalNodes>\n          <leafValues>\n            -1.2312129884958267e-01 3.6037188768386841e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 380 -2.6930740103125572e-02</internalNodes>\n          <leafValues>\n            -6.5255117416381836e-01 6.0726620256900787e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 381 3.7930138409137726e-02</internalNodes>\n          <leafValues>\n            -1.5491360425949097e-01 2.1770450472831726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 382 1.6430050134658813e-02</internalNodes>\n          <leafValues>\n            -2.5250691175460815e-01 1.5458230674266815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 383 5.1079809665679932e-02</internalNodes>\n          <leafValues>\n            3.0773499980568886e-02 -6.4929312467575073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 384 1.6663300339132547e-03</internalNodes>\n          <leafValues>\n            -3.7425559759140015e-01 8.1392176449298859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 385 -9.0896980836987495e-03</internalNodes>\n          <leafValues>\n            1.7854049801826477e-01 -7.6578080654144287e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 386 2.0629199221730232e-02</internalNodes>\n          <leafValues>\n            7.2373263537883759e-02 -4.2050579190254211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 387 8.2410024479031563e-03</internalNodes>\n          <leafValues>\n            3.2896678894758224e-02 -3.7325268983840942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 388 -4.6126499772071838e-02</internalNodes>\n          <leafValues>\n            -3.7356421351432800e-01 7.7336780726909637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 389 -8.3484929054975510e-03</internalNodes>\n          <leafValues>\n            1.8690130114555359e-01 -1.5126839280128479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 390 -4.7689080238342285e-02</internalNodes>\n          <leafValues>\n            -4.0730020403862000e-01 8.7598368525505066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 391 -5.0166220171377063e-04</internalNodes>\n          <leafValues>\n            1.2036769837141037e-01 -2.4717660248279572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 392 2.1794239728478715e-05</internalNodes>\n          <leafValues>\n            -2.9800811409950256e-01 1.2065000087022781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 393 -7.0597290992736816e-02</internalNodes>\n          <leafValues>\n            -6.8116611242294312e-01 6.4198948442935944e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 394 -6.4999358728528023e-03</internalNodes>\n          <leafValues>\n            2.6219159364700317e-01 -1.4015009999275208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 395 5.3664338774979115e-03</internalNodes>\n          <leafValues>\n            -3.4273180365562439e-01 9.2048570513725281e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 396 -1.3341950252652168e-02</internalNodes>\n          <leafValues>\n            4.0258079767227173e-01 -7.2052307426929474e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 397 1.2243090197443962e-02</internalNodes>\n          <leafValues>\n            -8.2426831126213074e-02 3.8369199633598328e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>100</maxWeakCount>\n      <stageThreshold>-1.8743180036544800e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 398 -2.8617910575121641e-03</internalNodes>\n          <leafValues>\n            2.1443170309066772e-01 -5.1532137393951416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 399 1.9125089747831225e-03</internalNodes>\n          <leafValues>\n            1.4483030140399933e-01 -6.1175411939620972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 400 4.8059499822556973e-03</internalNodes>\n          <leafValues>\n            -4.4235628843307495e-01 1.3466580212116241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 401 -9.5777623355388641e-02</internalNodes>\n          <leafValues>\n            -4.8914781212806702e-01 1.3169640302658081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 402 -8.9395968243479729e-03</internalNodes>\n          <leafValues>\n            1.4790549874305725e-01 -4.6696281433105469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 403 8.1128235906362534e-03</internalNodes>\n          <leafValues>\n            5.0671331584453583e-02 -4.0227508544921875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 404 2.2638900554738939e-04</internalNodes>\n          <leafValues>\n            -5.0928252935409546e-01 8.2113206386566162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 405 -6.1516009736806154e-04</internalNodes>\n          <leafValues>\n            -3.8136801123619080e-01 1.0157950222492218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 406 -3.2050691079348326e-03</internalNodes>\n          <leafValues>\n            -5.8352458477020264e-01 6.2385398894548416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 407 5.4250762332230806e-04</internalNodes>\n          <leafValues>\n            -2.5548499822616577e-01 1.4832200109958649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 408 1.0713520459830761e-03</internalNodes>\n          <leafValues>\n            -3.5334318876266479e-01 1.1791589856147766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 409 -1.7755989683791995e-03</internalNodes>\n          <leafValues>\n            -3.4087279438972473e-01 9.4740107655525208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 410 -9.3014203011989594e-02</internalNodes>\n          <leafValues>\n            7.4685460329055786e-01 -5.2443340420722961e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 411 -1.4192130416631699e-02</internalNodes>\n          <leafValues>\n            -3.1433999538421631e-01 9.0452186763286591e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 412 -5.3375191055238247e-04</internalNodes>\n          <leafValues>\n            1.4119710028171539e-01 -2.0296710729598999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 413 9.4844609498977661e-02</internalNodes>\n          <leafValues>\n            1.4625679701566696e-02 -6.2215209007263184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 414 1.1853160103783011e-03</internalNodes>\n          <leafValues>\n            -2.5984010100364685e-01 1.2153120338916779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 415 -2.4541220627725124e-03</internalNodes>\n          <leafValues>\n            7.1894593536853790e-02 -3.9803519845008850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 416 6.8703000433743000e-03</internalNodes>\n          <leafValues>\n            6.8626098334789276e-02 -3.8565808534622192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 417 -6.0411270707845688e-02</internalNodes>\n          <leafValues>\n            -4.8482391238212585e-01 2.0706020295619965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 418 -4.6826168545521796e-04</internalNodes>\n          <leafValues>\n            9.5856241881847382e-02 -3.1230351328849792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 419 -3.3507338957861066e-04</internalNodes>\n          <leafValues>\n            7.8128658235073090e-02 -9.4751000404357910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 420 3.6313060671091080e-02</internalNodes>\n          <leafValues>\n            4.4824421405792236e-02 -6.3693147897720337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 421 3.8052719901315868e-04</internalNodes>\n          <leafValues>\n            -2.1931269764900208e-01 1.1780519783496857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 422 -5.0964631140232086e-02</internalNodes>\n          <leafValues>\n            5.5783379077911377e-01 -4.3869689106941223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 423 -7.6198756694793701e-02</internalNodes>\n          <leafValues>\n            6.7789608240127563e-01 -1.7935890704393387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 424 -1.2677020393311977e-02</internalNodes>\n          <leafValues>\n            -6.0731011629104614e-01 4.9086190760135651e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 425 -3.6766629200428724e-03</internalNodes>\n          <leafValues>\n            1.5226639807224274e-01 -1.9953680038452148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 426 -3.8846738636493683e-02</internalNodes>\n          <leafValues>\n            -7.7045238018035889e-01 3.3732470124959946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 427 9.4217229634523392e-03</internalNodes>\n          <leafValues>\n            -6.9929488003253937e-02 1.3669140636920929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 428 7.3391180485486984e-03</internalNodes>\n          <leafValues>\n            -1.2133339792490005e-01 2.1175499260425568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 429 1.2211379595100880e-02</internalNodes>\n          <leafValues>\n            6.7636847496032715e-02 -4.3353718519210815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 430 -9.3064550310373306e-03</internalNodes>\n          <leafValues>\n            -3.4682491421699524e-01 6.4062312245368958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 431 5.2111309021711349e-02</internalNodes>\n          <leafValues>\n            -3.4146990627050400e-02 3.8904741406440735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 432 -4.3582019861787558e-04</internalNodes>\n          <leafValues>\n            1.3956509530544281e-01 -1.8289420008659363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 433 -1.0575359687209129e-02</internalNodes>\n          <leafValues>\n            -2.7782461047172546e-01 8.5667066276073456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 434 1.4794029993936419e-03</internalNodes>\n          <leafValues>\n            -2.3154720664024353e-01 1.1765889823436737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 435 9.4746891409158707e-03</internalNodes>\n          <leafValues>\n            -1.3345280289649963e-01 1.8066969513893127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 436 8.3355188369750977e-02</internalNodes>\n          <leafValues>\n            3.3563960343599319e-02 -7.2860741615295410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 437 -6.6629007458686829e-02</internalNodes>\n          <leafValues>\n            3.8058251142501831e-01 -3.3490750938653946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 438 5.0287488847970963e-03</internalNodes>\n          <leafValues>\n            -1.1418010294437408e-01 2.1534989774227142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 439 5.1222002506256104e-01</internalNodes>\n          <leafValues>\n            7.6377480290830135e-03 -6.5067559480667114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 440 1.2300059944391251e-01</internalNodes>\n          <leafValues>\n            3.8879081606864929e-02 -5.9420442581176758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 441 -1.1227129725739360e-03</internalNodes>\n          <leafValues>\n            1.0235410183668137e-01 -1.1207509785890579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 442 -6.2220949679613113e-02</internalNodes>\n          <leafValues>\n            -5.1173472404479980e-01 4.1879799216985703e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 443 -2.6323389261960983e-02</internalNodes>\n          <leafValues>\n            3.4005990624427795e-01 -5.0624471157789230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 444 -1.8875019624829292e-02</internalNodes>\n          <leafValues>\n            -5.4550838470458984e-01 4.1524920612573624e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 445 -3.4034788608551025e-01</internalNodes>\n          <leafValues>\n            -9.1541802883148193e-01 1.6561320051550865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 446 -8.0456008436158299e-04</internalNodes>\n          <leafValues>\n            1.4270770549774170e-01 -1.2901450693607330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 447 -3.9579509757459164e-03</internalNodes>\n          <leafValues>\n            -3.3408370614051819e-01 5.8637548238039017e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 448 1.8336549401283264e-02</internalNodes>\n          <leafValues>\n            -4.5632220804691315e-02 5.2696329355239868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 449 -5.7686101645231247e-02</internalNodes>\n          <leafValues>\n            -5.7604360580444336e-01 3.9550099521875381e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 450 -8.6881890892982483e-03</internalNodes>\n          <leafValues>\n            2.0929679274559021e-01 -1.0309000313282013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 451 2.0318549871444702e-01</internalNodes>\n          <leafValues>\n            9.4080818817019463e-03 -9.9389547109603882e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 452 2.0097799599170685e-02</internalNodes>\n          <leafValues>\n            5.6577399373054504e-02 -3.7819018959999084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 453 1.3217139989137650e-02</internalNodes>\n          <leafValues>\n            -7.4322126805782318e-02 1.7874650657176971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 454 -9.1346688568592072e-03</internalNodes>\n          <leafValues>\n            -4.9356880784034729e-01 3.7799369543790817e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 455 8.7239191634580493e-04</internalNodes>\n          <leafValues>\n            -1.3848680257797241e-01 1.1516919732093811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 456 -3.4609009162522852e-04</internalNodes>\n          <leafValues>\n            -1.6371829807758331e-01 1.1949790269136429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 457 -9.8570866975933313e-04</internalNodes>\n          <leafValues>\n            -5.4642897844314575e-01 4.4689279049634933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 458 1.0218559764325619e-02</internalNodes>\n          <leafValues>\n            -1.1570169776678085e-01 1.6723839938640594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 459 2.6702679693698883e-02</internalNodes>\n          <leafValues>\n            4.3922040611505508e-02 -4.5120438933372498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 460 -2.0299260504543781e-03</internalNodes>\n          <leafValues>\n            1.1932279914617538e-01 -1.6979490220546722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 461 -8.8023602962493896e-02</internalNodes>\n          <leafValues>\n            -8.0279791355133057e-01 9.4295190647244453e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 462 -1.3109110295772552e-02</internalNodes>\n          <leafValues>\n            -3.0865308642387390e-01 6.0802049934864044e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 463 -9.9501870572566986e-03</internalNodes>\n          <leafValues>\n            1.8400619924068451e-01 -4.6465478837490082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 464 -3.4293539356440306e-03</internalNodes>\n          <leafValues>\n            2.6682999730110168e-01 -9.9338643252849579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 465 5.4729141294956207e-02</internalNodes>\n          <leafValues>\n            2.8731130063533783e-02 -7.7745848894119263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 466 7.2012972086668015e-03</internalNodes>\n          <leafValues>\n            4.4892478734254837e-02 -3.8289341330528259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 467 4.2047120630741119e-02</internalNodes>\n          <leafValues>\n            -2.2562339901924133e-02 4.0646651387214661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 468 4.4444389641284943e-03</internalNodes>\n          <leafValues>\n            9.1204106807708740e-02 -1.8748210370540619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 469 2.8441840782761574e-02</internalNodes>\n          <leafValues>\n            4.0668040513992310e-02 -4.0552121400833130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 470 -1.5141829848289490e-02</internalNodes>\n          <leafValues>\n            2.4799869954586029e-01 -8.3607338368892670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 471 3.9388090372085571e-02</internalNodes>\n          <leafValues>\n            2.4279279634356499e-02 -7.6827299594879150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 472 6.1649468261748552e-04</internalNodes>\n          <leafValues>\n            -1.7249910533428192e-01 1.0311610251665115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 473 2.6001650840044022e-02</internalNodes>\n          <leafValues>\n            2.2825349122285843e-02 -7.7545452117919922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 474 1.4940380351617932e-03</internalNodes>\n          <leafValues>\n            -1.1028409749269485e-01 1.6966749727725983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 475 -1.3777149841189384e-02</internalNodes>\n          <leafValues>\n            -3.8424721360206604e-01 3.0320269986987114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 476 9.9619822576642036e-03</internalNodes>\n          <leafValues>\n            -5.3764659911394119e-02 3.7887129187583923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 477 3.2952039036899805e-03</internalNodes>\n          <leafValues>\n            9.4384163618087769e-02 -3.2762721180915833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 478 5.7747410610318184e-03</internalNodes>\n          <leafValues>\n            5.7114940136671066e-02 -3.0719769001007080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 479 -4.8392590135335922e-02</internalNodes>\n          <leafValues>\n            1.7021059989929199e-01 -8.7045513093471527e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 480 5.6376052089035511e-04</internalNodes>\n          <leafValues>\n            -9.3816302716732025e-02 2.0642310380935669e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 481 -2.3873809725046158e-02</internalNodes>\n          <leafValues>\n            -3.0082350969314575e-01 1.7477719113230705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 482 -1.0526900179684162e-02</internalNodes>\n          <leafValues>\n            -3.4418928623199463e-01 5.7995639741420746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 483 2.2288670763373375e-02</internalNodes>\n          <leafValues>\n            -5.7179849594831467e-02 1.9739510118961334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 484 -1.4589070342481136e-02</internalNodes>\n          <leafValues>\n            -4.5168799161911011e-01 4.1490409523248672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 485 -4.6936370432376862e-02</internalNodes>\n          <leafValues>\n            2.0457950234413147e-01 -5.1769189536571503e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 486 5.3777720313519239e-04</internalNodes>\n          <leafValues>\n            -3.9481449127197266e-01 4.5076690614223480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 487 -2.2181039676070213e-03</internalNodes>\n          <leafValues>\n            -2.4575619399547577e-01 1.0261219739913940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 488 3.5076549649238586e-01</internalNodes>\n          <leafValues>\n            1.9791129976511002e-02 -9.5161467790603638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 489 -2.6712059974670410e-02</internalNodes>\n          <leafValues>\n            2.2393140196800232e-01 -4.5580100268125534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 490 -3.9627091027796268e-03</internalNodes>\n          <leafValues>\n            -2.4207019805908203e-01 7.6588593423366547e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 491 -4.7878702171146870e-03</internalNodes>\n          <leafValues>\n            1.2655270099639893e-01 -1.1964710056781769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 492 7.1042939089238644e-03</internalNodes>\n          <leafValues>\n            -9.2130422592163086e-02 2.1519139409065247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 493 -2.2581929442822002e-05</internalNodes>\n          <leafValues>\n            6.0634609311819077e-02 -1.5848989784717560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 494 -7.8060641884803772e-02</internalNodes>\n          <leafValues>\n            3.4822109341621399e-01 -5.3173709660768509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 495 2.7555850148200989e-01</internalNodes>\n          <leafValues>\n            7.4112107977271080e-03 -1.0000040531158447e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 496 1.9652329385280609e-01</internalNodes>\n          <leafValues>\n            2.0131109282374382e-02 -8.5326671600341797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 497 -1.6801860183477402e-03</internalNodes>\n          <leafValues>\n            7.7082179486751556e-02 -2.2620369493961334e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>71</maxWeakCount>\n      <stageThreshold>-1.9982930421829224e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 498 -1.8814710900187492e-02</internalNodes>\n          <leafValues>\n            3.7744289636611938e-01 -4.0770640969276428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 499 -2.3191049695014954e-02</internalNodes>\n          <leafValues>\n            3.4049031138420105e-01 -3.6144611239433289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 500 3.1333088874816895e-02</internalNodes>\n          <leafValues>\n            -4.3613511323928833e-01 1.9668689370155334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 501 -1.1318700388073921e-02</internalNodes>\n          <leafValues>\n            1.1685170233249664e-01 -5.6359791755676270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 502 -3.1084290822036564e-04</internalNodes>\n          <leafValues>\n            -4.3396338820457458e-01 1.4264069497585297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 503 8.7350063025951385e-02</internalNodes>\n          <leafValues>\n            -1.9952809810638428e-01 3.3043611049652100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 504 -2.9018519446253777e-02</internalNodes>\n          <leafValues>\n            3.2315209507942200e-01 -2.1707040071487427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 505 5.9860680252313614e-02</internalNodes>\n          <leafValues>\n            -1.8764750659465790e-01 2.7651038765907288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 506 -2.9682170599699020e-02</internalNodes>\n          <leafValues>\n            -4.6436330676078796e-01 1.1129009723663330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 507 -2.2648361045867205e-03</internalNodes>\n          <leafValues>\n            -2.7163028717041016e-01 8.6916759610176086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 508 -1.6869819955900311e-03</internalNodes>\n          <leafValues>\n            1.7998990416526794e-01 -2.7152928709983826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 509 1.0256370296701789e-03</internalNodes>\n          <leafValues>\n            -4.3248209357261658e-01 1.0256689786911011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 510 -3.1762920320034027e-02</internalNodes>\n          <leafValues>\n            -6.4419168233871460e-01 6.7505106329917908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 511 -8.5913296788930893e-03</internalNodes>\n          <leafValues>\n            -3.7672510743141174e-01 7.2900757193565369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 512 -2.1636451128870249e-03</internalNodes>\n          <leafValues>\n            -4.2209509015083313e-01 1.0724630206823349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 513 6.0111237689852715e-04</internalNodes>\n          <leafValues>\n            6.1302110552787781e-02 -3.8004979491233826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 514 -6.1244412790983915e-05</internalNodes>\n          <leafValues>\n            7.4765786528587341e-02 -5.2644491195678711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 515 -2.3666430264711380e-02</internalNodes>\n          <leafValues>\n            -5.6801301240921021e-01 3.6377541720867157e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 516 -1.4256609603762627e-02</internalNodes>\n          <leafValues>\n            -5.3446692228317261e-01 6.2768869102001190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 517 -1.5713909640908241e-02</internalNodes>\n          <leafValues>\n            3.1898561120033264e-01 -1.1541239917278290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 518 -5.9286020696163177e-02</internalNodes>\n          <leafValues>\n            -5.7135957479476929e-01 8.1775680184364319e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 519 -4.4122908264398575e-02</internalNodes>\n          <leafValues>\n            -7.0591008663177490e-01 2.0833099260926247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 520 -7.2728260420262814e-04</internalNodes>\n          <leafValues>\n            1.0819850116968155e-01 -3.8077458739280701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 521 -6.6653728485107422e-02</internalNodes>\n          <leafValues>\n            -6.0824638605117798e-01 4.3248821049928665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 522 2.3679709993302822e-03</internalNodes>\n          <leafValues>\n            -2.9793098568916321e-01 1.2091939896345139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 523 3.3566180616617203e-02</internalNodes>\n          <leafValues>\n            3.6464620381593704e-02 -5.5766987800598145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 524 -5.3138811141252518e-02</internalNodes>\n          <leafValues>\n            -5.6245392560958862e-01 6.5296277403831482e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 525 -2.9401908977888525e-04</internalNodes>\n          <leafValues>\n            -5.8417952060699463e-01 5.0005510449409485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 526 -4.8085048911161721e-04</internalNodes>\n          <leafValues>\n            1.4018669724464417e-01 -2.4792720377445221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 527 4.7777060419321060e-02</internalNodes>\n          <leafValues>\n            5.5672798305749893e-02 -5.9540742635726929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 528 3.3423870801925659e-02</internalNodes>\n          <leafValues>\n            -1.4370389282703400e-01 2.3300980031490326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 529 2.0432810485363007e-01</internalNodes>\n          <leafValues>\n            4.5327048748731613e-02 -7.4164307117462158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 530 1.4106060564517975e-01</internalNodes>\n          <leafValues>\n            -3.9674291014671326e-01 8.1692866981029510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 531 1.0005939839174971e-04</internalNodes>\n          <leafValues>\n            -2.2317939996719360e-01 1.3917629420757294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 532 6.0689389705657959e-02</internalNodes>\n          <leafValues>\n            3.4324988722801208e-02 -8.2796847820281982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 533 -3.6456179805099964e-03</internalNodes>\n          <leafValues>\n            1.5286439657211304e-01 -1.4005979895591736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 534 3.1945340335369110e-02</internalNodes>\n          <leafValues>\n            6.5343692898750305e-02 -4.4296088814735413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 535 2.3428380489349365e-02</internalNodes>\n          <leafValues>\n            2.5527309626340866e-02 -6.3270658254623413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 536 4.6067949384450912e-02</internalNodes>\n          <leafValues>\n            4.3579101562500000e-02 -6.4929872751235962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 537 -5.8055151253938675e-02</internalNodes>\n          <leafValues>\n            -6.3957542181015015e-01 1.4028750360012054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 538 3.8783740252256393e-02</internalNodes>\n          <leafValues>\n            5.1233518868684769e-02 -5.4144388437271118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 539 -1.2765520252287388e-02</internalNodes>\n          <leafValues>\n            2.7082890272140503e-01 -9.1927766799926758e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 540 -3.1400551088154316e-03</internalNodes>\n          <leafValues>\n            -3.4679821133613586e-01 8.3973668515682220e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 541 -1.9719999283552170e-02</internalNodes>\n          <leafValues>\n            -2.0476959645748138e-01 6.3232198357582092e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 542 3.2241051085293293e-03</internalNodes>\n          <leafValues>\n            9.6259713172912598e-02 -2.8098219633102417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 543 -5.9271860867738724e-02</internalNodes>\n          <leafValues>\n            -2.6686909794807434e-01 3.2907258719205856e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 544 1.5636639669537544e-02</internalNodes>\n          <leafValues>\n            6.9188073277473450e-02 -4.1761711239814758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 545 -8.8900122791528702e-03</internalNodes>\n          <leafValues>\n            1.9603550434112549e-01 -1.1249750107526779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 546 2.4458909407258034e-02</internalNodes>\n          <leafValues>\n            5.6988969445228577e-02 -5.1025021076202393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 547 1.0101319849491119e-01</internalNodes>\n          <leafValues>\n            9.4210049137473106e-03 -3.6691328883171082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 548 9.0739831328392029e-02</internalNodes>\n          <leafValues>\n            5.3999878466129303e-02 -5.1181477308273315e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 549 -4.9557868391275406e-02</internalNodes>\n          <leafValues>\n            -6.2467038631439209e-01 4.0988270193338394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 550 2.6558348536491394e-01</internalNodes>\n          <leafValues>\n            -8.6136549711227417e-02 3.2438439130783081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 551 1.8632459687069058e-03</internalNodes>\n          <leafValues>\n            -5.4563361406326294e-01 5.8684051036834717e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 552 1.1804940178990364e-02</internalNodes>\n          <leafValues>\n            -2.0603899657726288e-01 1.4167340099811554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 553 6.8137067137286067e-04</internalNodes>\n          <leafValues>\n            -2.0806470513343811e-01 9.2627376317977905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 554 5.7278381427749991e-04</internalNodes>\n          <leafValues>\n            -4.3170881271362305e-01 6.3360363245010376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 555 -1.1041999794542789e-02</internalNodes>\n          <leafValues>\n            1.8144379556179047e-01 -4.1707839816808701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 556 9.5696747303009033e-03</internalNodes>\n          <leafValues>\n            -1.2098339945077896e-01 2.1607619524002075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 557 7.4274197220802307e-02</internalNodes>\n          <leafValues>\n            2.6399549096822739e-02 -7.7601867914199829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 558 -2.5815829634666443e-02</internalNodes>\n          <leafValues>\n            5.3497368097305298e-01 -5.2025150507688522e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 559 -6.3314691185951233e-02</internalNodes>\n          <leafValues>\n            5.1900321245193481e-01 -1.9329590722918510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 560 -6.6432490944862366e-02</internalNodes>\n          <leafValues>\n            7.2140932083129883e-01 -3.2882031053304672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 561 -7.5749039649963379e-02</internalNodes>\n          <leafValues>\n            4.1485249996185303e-01 -5.5451728403568268e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 562 -2.0296040922403336e-02</internalNodes>\n          <leafValues>\n            -3.3250689506530762e-01 8.2397893071174622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 563 2.2172650322318077e-02</internalNodes>\n          <leafValues>\n            -1.4419150352478027e-01 1.7280860245227814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 564 4.2085880413651466e-03</internalNodes>\n          <leafValues>\n            -3.0237489938735962e-01 8.6699083447456360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 565 6.8267330527305603e-02</internalNodes>\n          <leafValues>\n            8.7291244417428970e-03 -3.6955729126930237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 566 5.1220320165157318e-03</internalNodes>\n          <leafValues>\n            -2.0824980735778809e-01 1.4530059695243835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 567 -5.3114328533411026e-02</internalNodes>\n          <leafValues>\n            -5.5142301321029663e-01 4.3421190232038498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 568 -4.9739979207515717e-02</internalNodes>\n          <leafValues>\n            4.4077101349830627e-01 -6.4349673688411713e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>94</maxWeakCount>\n      <stageThreshold>-1.8377989530563354e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 569 -3.3883380820043385e-04</internalNodes>\n          <leafValues>\n            1.8997849524021149e-01 -4.6184849739074707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 570 -1.5632030554115772e-03</internalNodes>\n          <leafValues>\n            1.9381409883499146e-01 -4.3518841266632080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 571 1.5552520053461194e-03</internalNodes>\n          <leafValues>\n            -4.7420310974121094e-01 1.2137629836797714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 572 -3.1417120248079300e-02</internalNodes>\n          <leafValues>\n            -3.9096689224243164e-01 1.0951930284500122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 573 -3.2835190650075674e-03</internalNodes>\n          <leafValues>\n            1.6428950428962708e-01 -3.2751929759979248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 574 5.8749080635607243e-03</internalNodes>\n          <leafValues>\n            7.6225973665714264e-02 -4.3470710515975952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 575 4.4846539385616779e-03</internalNodes>\n          <leafValues>\n            1.2197560071945190e-01 -4.4872379302978516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 576 1.9835829734802246e-03</internalNodes>\n          <leafValues>\n            -6.2911021709442139e-01 1.0122530162334442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 577 1.2609469704329967e-02</internalNodes>\n          <leafValues>\n            1.0438250005245209e-01 -3.5015499591827393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 578 -4.7475768951699138e-04</internalNodes>\n          <leafValues>\n            1.1008159816265106e-01 -3.0429539084434509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 579 3.2356760930269957e-03</internalNodes>\n          <leafValues>\n            -2.7057901024818420e-01 1.2746180593967438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 580 9.9898613989353180e-03</internalNodes>\n          <leafValues>\n            6.3906982541084290e-02 -4.7118431329727173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 581 5.6069239508360624e-04</internalNodes>\n          <leafValues>\n            -3.1783330440521240e-01 1.0404340177774429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 582 -5.7694699615240097e-02</internalNodes>\n          <leafValues>\n            -5.1342570781707764e-01 2.6394980028271675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 583 5.5947788059711456e-03</internalNodes>\n          <leafValues>\n            7.6774753630161285e-02 -4.3374261260032654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 584 -3.8770840037614107e-03</internalNodes>\n          <leafValues>\n            1.3988199830055237e-01 -2.0221559703350067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 585 -4.7874201089143753e-02</internalNodes>\n          <leafValues>\n            -4.7928389906883240e-01 6.8043030798435211e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 586 2.5817550718784332e-02</internalNodes>\n          <leafValues>\n            -4.5524198561906815e-02 3.9452901482582092e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 587 1.6696650709491223e-04</internalNodes>\n          <leafValues>\n            -3.0880719423294067e-01 1.0875239968299866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 588 9.8888948559761047e-04</internalNodes>\n          <leafValues>\n            6.8699032068252563e-02 -4.1813009977340698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 589 -3.4260770771652460e-03</internalNodes>\n          <leafValues>\n            -2.8929701447486877e-01 1.1479649692773819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 590 6.6044367849826813e-02</internalNodes>\n          <leafValues>\n            1.6809269785881042e-02 -3.3534801006317139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 591 2.8318059630692005e-03</internalNodes>\n          <leafValues>\n            -3.9482170343399048e-01 8.5598722100257874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 592 4.2680549621582031e-01</internalNodes>\n          <leafValues>\n            5.0977780483663082e-03 -5.9331178665161133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 593 1.1960650235414505e-01</internalNodes>\n          <leafValues>\n            2.7437770739197731e-02 -7.6616281270980835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 594 1.9571319222450256e-02</internalNodes>\n          <leafValues>\n            -1.1966180056333542e-01 2.3962239921092987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 595 -1.7432469874620438e-02</internalNodes>\n          <leafValues>\n            -5.8530348539352417e-01 5.6400340050458908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 596 -1.1196629703044891e-01</internalNodes>\n          <leafValues>\n            -6.7248320579528809e-01 2.9150659218430519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 597 -4.5747519470751286e-03</internalNodes>\n          <leafValues>\n            -4.7730261087417603e-01 5.6612998247146606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 598 -5.1501519046723843e-03</internalNodes>\n          <leafValues>\n            1.1510629951953888e-01 -1.0732329636812210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 599 2.9034249484539032e-02</internalNodes>\n          <leafValues>\n            -5.3368709981441498e-02 6.4226460456848145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 600 -1.8050910439342260e-03</internalNodes>\n          <leafValues>\n            1.2795349955558777e-01 -1.2329389899969101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 601 -2.4374839849770069e-03</internalNodes>\n          <leafValues>\n            -3.5312348604202271e-01 8.7703153491020203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 602 -1.9070079550147057e-02</internalNodes>\n          <leafValues>\n            -4.0662440657615662e-01 4.3273188173770905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 603 -5.0454240292310715e-02</internalNodes>\n          <leafValues>\n            -8.1198102235794067e-01 2.8289109468460083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 604 1.6544000245630741e-03</internalNodes>\n          <leafValues>\n            -1.6964040696620941e-01 1.2194740027189255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 605 -4.6791311353445053e-02</internalNodes>\n          <leafValues>\n            4.0614441037178040e-01 -6.1174858361482620e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 606 -5.5953849107027054e-02</internalNodes>\n          <leafValues>\n            -8.2662910223007202e-01 2.7774749323725700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 607 1.4469559537246823e-03</internalNodes>\n          <leafValues>\n            -1.4953869581222534e-01 1.5966990590095520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 608 -1.2529050000011921e-02</internalNodes>\n          <leafValues>\n            -4.2504650354385376e-01 2.1658079698681831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 609 1.1086500016972423e-03</internalNodes>\n          <leafValues>\n            -3.6006990075111389e-01 6.4415097236633301e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 610 3.9361778646707535e-02</internalNodes>\n          <leafValues>\n            8.2419048994779587e-03 -7.5303071737289429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 611 1.8823929131031036e-02</internalNodes>\n          <leafValues>\n            4.4821120798587799e-02 -5.0604110956192017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 612 -3.2083000987768173e-02</internalNodes>\n          <leafValues>\n            3.1431311368942261e-01 -3.9181869477033615e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 613 -3.1081929802894592e-02</internalNodes>\n          <leafValues>\n            -7.6903742551803589e-01 3.0742960050702095e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 614 2.3218210786581039e-02</internalNodes>\n          <leafValues>\n            -5.7748749852180481e-02 2.8955349326133728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 615 -1.1492100311443210e-03</internalNodes>\n          <leafValues>\n            1.1501409858465195e-01 -1.9310690462589264e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 616 -1.6593940556049347e-02</internalNodes>\n          <leafValues>\n            -4.2298540472984314e-01 4.3738979846239090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 617 -1.0146570391952991e-02</internalNodes>\n          <leafValues>\n            2.5579848885536194e-01 -9.1966241598129272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 618 -1.3054019771516323e-02</internalNodes>\n          <leafValues>\n            1.8339529633522034e-01 -4.0160831063985825e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 619 3.7463540211319923e-03</internalNodes>\n          <leafValues>\n            -1.2586769461631775e-01 2.2247019410133362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 620 -4.8463590443134308e-02</internalNodes>\n          <leafValues>\n            -5.8155900239944458e-01 2.9713390395045280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 621 6.4649381674826145e-03</internalNodes>\n          <leafValues>\n            9.3169108033180237e-02 -2.9046580195426941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 622 1.5607809647917747e-02</internalNodes>\n          <leafValues>\n            4.7331970185041428e-02 -4.4805559515953064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 623 -5.8314641937613487e-03</internalNodes>\n          <leafValues>\n            9.8941758275032043e-02 -2.2056859731674194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 624 7.3607802391052246e-02</internalNodes>\n          <leafValues>\n            1.6780460253357887e-02 -5.4953122138977051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 625 -6.4223129302263260e-03</internalNodes>\n          <leafValues>\n            -2.9647961258888245e-01 7.3539912700653076e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 626 2.2267029635258950e-05</internalNodes>\n          <leafValues>\n            -3.4211820363998413e-01 4.1858270764350891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 627 3.7273630499839783e-02</internalNodes>\n          <leafValues>\n            2.7458079159259796e-02 -7.8551971912384033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 628 4.2738770134747028e-03</internalNodes>\n          <leafValues>\n            -8.2514517009258270e-02 1.0404880344867706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 629 1.1906049912795424e-03</internalNodes>\n          <leafValues>\n            -1.6300439834594727e-01 1.5300649404525757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 630 8.7800435721874237e-03</internalNodes>\n          <leafValues>\n            -9.2885948717594147e-02 1.3147510588169098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 631 2.4151368997991085e-03</internalNodes>\n          <leafValues>\n            4.7598559409379959e-02 -4.4829669594764709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 632 -2.7428340166807175e-02</internalNodes>\n          <leafValues>\n            1.9811069965362549e-01 -5.5979698896408081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 633 -1.4117059763520956e-03</internalNodes>\n          <leafValues>\n            -2.1138970553874969e-01 1.0409740358591080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 634 -2.0210200548171997e-01</internalNodes>\n          <leafValues>\n            -7.7120232582092285e-01 7.0582218468189240e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 635 -4.1451320052146912e-02</internalNodes>\n          <leafValues>\n            2.8295141458511353e-01 -7.1323528885841370e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 636 4.8561887815594673e-03</internalNodes>\n          <leafValues>\n            8.6693897843360901e-02 -2.3541820049285889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 637 -4.4662880100077018e-05</internalNodes>\n          <leafValues>\n            1.3257139921188354e-01 -2.0168599486351013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 638 3.7671580910682678e-02</internalNodes>\n          <leafValues>\n            -7.4952289462089539e-02 3.3843380212783813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 639 7.4343256652355194e-02</internalNodes>\n          <leafValues>\n            3.2905030995607376e-02 -7.3536777496337891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 640 -1.0186419822275639e-02</internalNodes>\n          <leafValues>\n            -3.1277081370353699e-01 4.4163990765810013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 641 -2.4506879970431328e-02</internalNodes>\n          <leafValues>\n            -6.1346518993377686e-01 2.9692139476537704e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 642 -3.8238149136304855e-02</internalNodes>\n          <leafValues>\n            3.5583540797233582e-01 -4.8388618975877762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 643 1.7983660101890564e-01</internalNodes>\n          <leafValues>\n            1.9501589238643646e-02 -9.8485881090164185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 644 8.4765878273174167e-04</internalNodes>\n          <leafValues>\n            -2.7960330247879028e-01 7.8323036432266235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 645 3.7178809288889170e-03</internalNodes>\n          <leafValues>\n            7.2525441646575928e-02 -2.4067409336566925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 646 -9.0932317078113556e-02</internalNodes>\n          <leafValues>\n            -7.1539151668548584e-01 8.8080493733286858e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 647 -8.0087810754776001e-02</internalNodes>\n          <leafValues>\n            -6.7830717563629150e-01 2.4904320016503334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 648 7.6924148015677929e-03</internalNodes>\n          <leafValues>\n            -5.0967499613761902e-02 1.1952529847621918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 649 4.1485231369733810e-02</internalNodes>\n          <leafValues>\n            -4.9493920058012009e-02 3.5386860370635986e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 650 3.4051608294248581e-02</internalNodes>\n          <leafValues>\n            4.2200978845357895e-02 -5.0110721588134766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 651 -2.6235830038785934e-02</internalNodes>\n          <leafValues>\n            4.4934839010238647e-01 -4.1851200163364410e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 652 -5.1373958587646484e-02</internalNodes>\n          <leafValues>\n            -9.5942801237106323e-01 1.7192790284752846e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 653 -2.6742739602923393e-02</internalNodes>\n          <leafValues>\n            -6.5632241964340210e-01 2.1778080612421036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 654 -1.3730529462918639e-03</internalNodes>\n          <leafValues>\n            -1.8638509511947632e-01 4.1139349341392517e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 655 1.0963230160996318e-03</internalNodes>\n          <leafValues>\n            -1.4219370484352112e-01 1.3832019269466400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 656 -4.5011811889708042e-03</internalNodes>\n          <leafValues>\n            -1.8468600511550903e-01 9.1024190187454224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 657 4.4253250234760344e-04</internalNodes>\n          <leafValues>\n            -1.2736940383911133e-01 1.3655360043048859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 658 3.0500710010528564e-02</internalNodes>\n          <leafValues>\n            -5.8146148920059204e-02 2.4189910292625427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 659 -1.1691919714212418e-01</internalNodes>\n          <leafValues>\n            -5.5466407537460327e-01 3.0249029397964478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 660 -9.5684931147843599e-04</internalNodes>\n          <leafValues>\n            5.1899868994951248e-02 -1.4152799546718597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 661 1.3096149777993560e-03</internalNodes>\n          <leafValues>\n            -1.4248229563236237e-01 1.2227780371904373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 662 3.4988880157470703e-02</internalNodes>\n          <leafValues>\n            2.7653129771351814e-02 -6.1738812923431396e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>82</maxWeakCount>\n      <stageThreshold>-1.9031070470809937e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 663 1.6489429771900177e-01</internalNodes>\n          <leafValues>\n            -2.5657209753990173e-01 4.1277718544006348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 664 2.0584860816597939e-02</internalNodes>\n          <leafValues>\n            -5.2442210912704468e-01 1.4910830557346344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 665 8.8764587417244911e-04</internalNodes>\n          <leafValues>\n            1.3334700465202332e-01 -5.2259522676467896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 666 -1.3320889556780457e-03</internalNodes>\n          <leafValues>\n            -3.6568748950958252e-01 2.0482279360294342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 667 7.7916197478771210e-02</internalNodes>\n          <leafValues>\n            -2.1557159721851349e-01 3.1069579720497131e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 668 2.4321360979229212e-03</internalNodes>\n          <leafValues>\n            -4.4742551445960999e-01 1.0638339817523956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 669 -5.8699389919638634e-03</internalNodes>\n          <leafValues>\n            -3.8800778985023499e-01 1.4410589635372162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 670 6.9754302501678467e-02</internalNodes>\n          <leafValues>\n            1.3224910013377666e-02 -8.0096632242202759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 671 3.8338101003319025e-03</internalNodes>\n          <leafValues>\n            -4.3139308691024780e-01 1.4253990352153778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 672 -1.5829030424356461e-02</internalNodes>\n          <leafValues>\n            3.0954799056053162e-01 -1.2232720106840134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 673 6.6198296844959259e-02</internalNodes>\n          <leafValues>\n            -2.0558249950408936e-01 1.9531220197677612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 674 1.7639519646763802e-02</internalNodes>\n          <leafValues>\n            1.0770589858293533e-01 -4.3488320708274841e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 675 -1.1082629673182964e-02</internalNodes>\n          <leafValues>\n            -3.6149570345878601e-01 1.1327210068702698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 676 -3.6515299230813980e-02</internalNodes>\n          <leafValues>\n            -4.3912211060523987e-01 5.5279448628425598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 677 -3.3373299986124039e-02</internalNodes>\n          <leafValues>\n            -5.6869208812713623e-01 8.4043957293033600e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 678 8.1395559012889862e-02</internalNodes>\n          <leafValues>\n            -1.4235010743141174e-01 2.8748288750648499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 679 -4.3892292305827141e-03</internalNodes>\n          <leafValues>\n            -3.4859830141067505e-01 1.1650340259075165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 680 -6.3558202236890793e-03</internalNodes>\n          <leafValues>\n            -3.3823049068450928e-01 1.1005490273237228e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 681 2.0912459120154381e-02</internalNodes>\n          <leafValues>\n            7.8197829425334930e-02 -4.6337550878524780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 682 1.1600360274314880e-01</internalNodes>\n          <leafValues>\n            -2.0528669655323029e-01 1.5923389792442322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 683 1.6316600143909454e-02</internalNodes>\n          <leafValues>\n            -1.0633999854326248e-01 3.3453521132469177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 684 -2.8488141298294067e-01</internalNodes>\n          <leafValues>\n            5.1638001203536987e-01 -3.9357859641313553e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 685 2.4155430495738983e-02</internalNodes>\n          <leafValues>\n            -7.1670228242874146e-01 5.0031550228595734e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 686 1.1413260363042355e-02</internalNodes>\n          <leafValues>\n            5.9236031025648117e-02 -3.8141900300979614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 687 -2.4304199963808060e-02</internalNodes>\n          <leafValues>\n            4.3475851416587830e-01 -8.6574159562587738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 688 -1.5267609851434827e-03</internalNodes>\n          <leafValues>\n            -6.4307600259780884e-01 5.1642779260873795e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 689 1.0073349811136723e-02</internalNodes>\n          <leafValues>\n            7.5743027031421661e-02 -4.2902961373329163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 690 -8.1224881112575531e-02</internalNodes>\n          <leafValues>\n            -4.0827330946922302e-01 5.5444631725549698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 691 1.5149010345339775e-02</internalNodes>\n          <leafValues>\n            5.3084861487150192e-02 -5.4495412111282349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 692 -5.3490739315748215e-02</internalNodes>\n          <leafValues>\n            -4.7422149777412415e-01 3.9420779794454575e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 693 -4.0884271264076233e-02</internalNodes>\n          <leafValues>\n            -8.8557797670364380e-01 3.2042708247900009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 694 -4.2768509592860937e-04</internalNodes>\n          <leafValues>\n            -3.0554470419883728e-01 5.1432881504297256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 695 1.8441269174218178e-02</internalNodes>\n          <leafValues>\n            8.0688089132308960e-02 -3.5884049534797668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 696 -4.7630790621042252e-02</internalNodes>\n          <leafValues>\n            -4.6131908893585205e-01 6.0592770576477051e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 697 8.2442145794630051e-03</internalNodes>\n          <leafValues>\n            8.9793607592582703e-02 -3.7605780363082886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 698 1.0003759711980820e-01</internalNodes>\n          <leafValues>\n            -8.3760380744934082e-02 3.9221811294555664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 699 -2.8420550748705864e-02</internalNodes>\n          <leafValues>\n            -6.9483548402786255e-01 4.9100410193204880e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 700 5.6485999375581741e-02</internalNodes>\n          <leafValues>\n            4.4795661233365536e-03 -7.5373399257659912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 701 1.0085420217365026e-03</internalNodes>\n          <leafValues>\n            -3.7881261110305786e-01 7.8376993536949158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 702 -1.2643639929592609e-03</internalNodes>\n          <leafValues>\n            7.5486026704311371e-02 -3.1015640497207642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 703 1.4146340079605579e-02</internalNodes>\n          <leafValues>\n            -8.1805020570755005e-02 3.7313848733901978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 704 -3.1549399718642235e-03</internalNodes>\n          <leafValues>\n            -2.1241660416126251e-01 8.9129790663719177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 705 1.4796239556744695e-03</internalNodes>\n          <leafValues>\n            -2.1479040384292603e-01 1.3543279469013214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 706 -3.1343609094619751e-02</internalNodes>\n          <leafValues>\n            -5.8114588260650635e-01 4.8576328903436661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 707 -7.6149761676788330e-02</internalNodes>\n          <leafValues>\n            -5.3774517774581909e-01 4.8339068889617920e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 708 -6.1668939888477325e-02</internalNodes>\n          <leafValues>\n            -8.4525662660598755e-01 1.7448999278713018e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 709 -2.7084920555353165e-02</internalNodes>\n          <leafValues>\n            -5.0659137964248657e-01 4.7709420323371887e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 710 -2.4240929633378983e-02</internalNodes>\n          <leafValues>\n            -3.8534450531005859e-01 5.0300780683755875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 711 4.1979398578405380e-02</internalNodes>\n          <leafValues>\n            -1.0378009825944901e-01 2.6236268877983093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 712 2.3717690259218216e-02</internalNodes>\n          <leafValues>\n            5.6897271424531937e-02 -2.8959441184997559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 713 -1.8669789656996727e-02</internalNodes>\n          <leafValues>\n            -3.9924529194831848e-01 7.3442213237285614e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 714 -1.4987000264227390e-02</internalNodes>\n          <leafValues>\n            -3.2296919822692871e-01 4.1676748543977737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 715 8.7209865450859070e-03</internalNodes>\n          <leafValues>\n            1.3521389663219452e-01 -1.8224580585956573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 716 -1.2239219620823860e-02</internalNodes>\n          <leafValues>\n            1.5540809929370880e-01 -1.5208069980144501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 717 -4.8744980245828629e-02</internalNodes>\n          <leafValues>\n            -3.6606758832931519e-01 6.3152566552162170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 718 -3.8249569479376078e-03</internalNodes>\n          <leafValues>\n            8.3472989499568939e-02 -2.4186329543590546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 719 1.5581659972667694e-01</internalNodes>\n          <leafValues>\n            3.1953960657119751e-02 -6.7813181877136230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 720 6.8241581320762634e-02</internalNodes>\n          <leafValues>\n            1.5478439629077911e-02 -4.2029750347137451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 721 -9.5974646508693695e-02</internalNodes>\n          <leafValues>\n            -9.5647841691970825e-01 2.1444590762257576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 722 -1.2618429958820343e-02</internalNodes>\n          <leafValues>\n            -5.0544857978820801e-01 3.0875260010361671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 723 7.2727642953395844e-02</internalNodes>\n          <leafValues>\n            4.7215349972248077e-02 -4.5075151324272156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 724 2.9923219233751297e-02</internalNodes>\n          <leafValues>\n            -8.1444352865219116e-02 3.1656229496002197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 725 1.9138090312480927e-02</internalNodes>\n          <leafValues>\n            6.8187400698661804e-02 -3.4876790642738342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 726 -3.4314721822738647e-02</internalNodes>\n          <leafValues>\n            -5.5220371484756470e-01 3.7325009703636169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 727 5.2559198811650276e-03</internalNodes>\n          <leafValues>\n            6.4786978065967560e-02 -3.6363509297370911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 728 1.4092399738729000e-02</internalNodes>\n          <leafValues>\n            -4.8704359680414200e-02 2.7677831053733826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 729 -9.0101473033428192e-03</internalNodes>\n          <leafValues>\n            2.3452599346637726e-01 -1.3140350580215454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 730 9.6720218658447266e-02</internalNodes>\n          <leafValues>\n            2.6661360636353493e-02 -7.7422797679901123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 731 8.5365071892738342e-02</internalNodes>\n          <leafValues>\n            2.3529909551143646e-02 -7.0710861682891846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 732 2.4384429678320885e-02</internalNodes>\n          <leafValues>\n            -6.2648482620716095e-02 3.7251880764961243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 733 3.6380778998136520e-02</internalNodes>\n          <leafValues>\n            4.3358739465475082e-02 -6.0222417116165161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 734 -5.3780268877744675e-02</internalNodes>\n          <leafValues>\n            -3.3441001176834106e-01 3.5700578242540359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 735 -1.4787100255489349e-02</internalNodes>\n          <leafValues>\n            2.9136168956756592e-01 -7.4075296521186829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 736 1.2491010129451752e-03</internalNodes>\n          <leafValues>\n            4.1654240339994431e-02 -9.3758836388587952e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 737 -2.7572909370064735e-02</internalNodes>\n          <leafValues>\n            -3.1398218870162964e-01 7.2411999106407166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 738 -7.8866451978683472e-02</internalNodes>\n          <leafValues>\n            6.0655838251113892e-01 -2.3838050663471222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 739 -6.9339312613010406e-02</internalNodes>\n          <leafValues>\n            7.1137732267379761e-01 -2.9814269393682480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 740 9.4372592866420746e-02</internalNodes>\n          <leafValues>\n            3.3579438924789429e-02 -5.9774041175842285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 741 -2.6048649102449417e-02</internalNodes>\n          <leafValues>\n            -4.0574911236763000e-01 5.5603530257940292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 742 -7.3630206286907196e-02</internalNodes>\n          <leafValues>\n            -6.0780352354049683e-01 2.5251649320125580e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 743 -1.8610449507832527e-02</internalNodes>\n          <leafValues>\n            2.4013559520244598e-01 -9.5389783382415771e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 744 1.3329629600048065e-01</internalNodes>\n          <leafValues>\n            -6.9742381572723389e-02 1.3323000073432922e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>112</maxWeakCount>\n      <stageThreshold>-1.6909840106964111e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 745 -4.1724857874214649e-03</internalNodes>\n          <leafValues>\n            1.9310890138149261e-01 -4.9630740284919739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 746 9.6606701845303178e-04</internalNodes>\n          <leafValues>\n            -5.4340302944183350e-01 1.2434119731187820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 747 1.0261629940941930e-03</internalNodes>\n          <leafValues>\n            -4.6321579813957214e-01 1.1160290241241455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 748 3.6368470173329115e-03</internalNodes>\n          <leafValues>\n            8.2918949425220490e-02 -3.6662510037422180e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 749 -2.8364539612084627e-03</internalNodes>\n          <leafValues>\n            -6.7365992069244385e-01 6.5546013414859772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 750 -1.0111520532518625e-03</internalNodes>\n          <leafValues>\n            1.4055189490318298e-01 -3.5270330309867859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 751 -2.5434889830648899e-03</internalNodes>\n          <leafValues>\n            1.4191180467605591e-01 -2.8350821137428284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 752 3.3014779910445213e-03</internalNodes>\n          <leafValues>\n            4.6553891152143478e-02 -4.8537290096282959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 753 -1.1802930384874344e-02</internalNodes>\n          <leafValues>\n            -3.7958830595016479e-01 9.2071913182735443e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 754 -1.3293370138853788e-03</internalNodes>\n          <leafValues>\n            1.7311429977416992e-01 -1.6890439391136169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 755 1.4958450198173523e-01</internalNodes>\n          <leafValues>\n            3.7626601755619049e-02 -8.0016881227493286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 756 1.6352189704775810e-03</internalNodes>\n          <leafValues>\n            -2.0858129858970642e-01 1.5985429286956787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 757 1.5483440365642309e-03</internalNodes>\n          <leafValues>\n            -1.7578269541263580e-01 1.7560100555419922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 758 -3.5674259066581726e-02</internalNodes>\n          <leafValues>\n            -4.6057531237602234e-01 4.3983791023492813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 759 -1.4558699913322926e-02</internalNodes>\n          <leafValues>\n            -3.3587411046028137e-01 8.3965480327606201e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 760 5.2891410887241364e-03</internalNodes>\n          <leafValues>\n            -3.5635179281234741e-01 9.4101972877979279e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 761 -9.8066125065088272e-04</internalNodes>\n          <leafValues>\n            -4.4301840662956238e-01 6.4368210732936859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 762 -4.0704999119043350e-02</internalNodes>\n          <leafValues>\n            -5.9700322151184082e-01 1.7846770584583282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 763 2.9682040214538574e-02</internalNodes>\n          <leafValues>\n            3.8127020001411438e-02 -6.6795140504837036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 764 -1.7841320368461311e-04</internalNodes>\n          <leafValues>\n            7.4118576943874359e-02 -3.2121241092681885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 765 1.0050840210169554e-03</internalNodes>\n          <leafValues>\n            -2.0642249286174774e-01 1.2194109708070755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 766 -1.6711819916963577e-03</internalNodes>\n          <leafValues>\n            -2.6586419343948364e-01 7.1882687509059906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 767 -6.9955319166183472e-02</internalNodes>\n          <leafValues>\n            5.0097060203552246e-01 -5.2172549068927765e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 768 8.3406828343868256e-03</internalNodes>\n          <leafValues>\n            -6.9546110928058624e-02 1.6949440538883209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 769 1.5483159571886063e-02</internalNodes>\n          <leafValues>\n            -9.5865622162818909e-02 2.8736731410026550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 770 -4.2621988803148270e-02</internalNodes>\n          <leafValues>\n            -2.5160768628120422e-01 1.1381790041923523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 771 3.6459038965404034e-03</internalNodes>\n          <leafValues>\n            7.0138469338417053e-02 -4.0376278758049011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 772 -1.8889949424192309e-03</internalNodes>\n          <leafValues>\n            1.4695550501346588e-01 -1.7879849672317505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 773 -3.4749018959701061e-03</internalNodes>\n          <leafValues>\n            -2.4985860288143158e-01 1.0349679738283157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 774 -3.7792209535837173e-02</internalNodes>\n          <leafValues>\n            -6.5756058692932129e-01 2.3007599636912346e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 775 -4.0167139377444983e-04</internalNodes>\n          <leafValues>\n            1.4987960457801819e-01 -1.4527609944343567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 776 3.4890990704298019e-02</internalNodes>\n          <leafValues>\n            -4.5207828283309937e-02 5.1295852661132812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 777 -9.5964537467807531e-04</internalNodes>\n          <leafValues>\n            1.4688290655612946e-01 -1.7244540154933929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 778 -9.6461333334445953e-02</internalNodes>\n          <leafValues>\n            -7.1814310550689697e-01 3.2587919384241104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 779 -1.1924919672310352e-03</internalNodes>\n          <leafValues>\n            1.3805310428142548e-01 -1.4162309467792511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 780 -1.6420070081949234e-02</internalNodes>\n          <leafValues>\n            -4.1954740881919861e-01 4.3040689080953598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 781 -6.1112269759178162e-02</internalNodes>\n          <leafValues>\n            3.7761390209197998e-01 -5.6264769285917282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 782 -3.1682170927524567e-02</internalNodes>\n          <leafValues>\n            2.1038809418678284e-01 -5.4475009441375732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 783 -7.4058552272617817e-03</internalNodes>\n          <leafValues>\n            -1.8709950149059296e-01 1.0876149684190750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 784 -2.8892440604977310e-04</internalNodes>\n          <leafValues>\n            6.9734372198581696e-02 -2.4516759812831879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 785 -7.9921782016754150e-03</internalNodes>\n          <leafValues>\n            -2.4069899320602417e-01 8.8012270629405975e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 786 -6.4670671708881855e-03</internalNodes>\n          <leafValues>\n            2.0819950103759766e-01 -6.9062210619449615e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 787 -5.3345328196883202e-03</internalNodes>\n          <leafValues>\n            3.2469388842582703e-01 -7.4058808386325836e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 788 -6.7914440296590328e-03</internalNodes>\n          <leafValues>\n            -1.7014460265636444e-01 3.7378448992967606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 789 1.6337619721889496e-01</internalNodes>\n          <leafValues>\n            1.9682100042700768e-02 -9.1652041673660278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 790 1.1759659647941589e-01</internalNodes>\n          <leafValues>\n            8.8446342851966619e-04 -7.8050827980041504e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 791 -1.1682280153036118e-01</internalNodes>\n          <leafValues>\n            -9.6009898185729980e-01 1.7070280387997627e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 792 4.6899251639842987e-02</internalNodes>\n          <leafValues>\n            4.7891899943351746e-02 -3.2044771313667297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 793 -4.0058898739516735e-03</internalNodes>\n          <leafValues>\n            1.1414390057325363e-01 -1.5711469948291779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 794 -4.4986438297200948e-05</internalNodes>\n          <leafValues>\n            2.9008099436759949e-01 -4.2413331568241119e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 795 2.1421080455183983e-03</internalNodes>\n          <leafValues>\n            -3.3137580752372742e-01 5.3943689912557602e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 796 -7.1408763527870178e-02</internalNodes>\n          <leafValues>\n            -8.8519471883773804e-01 9.3488330021500587e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 797 -1.3733670115470886e-01</internalNodes>\n          <leafValues>\n            -8.3241897821426392e-01 1.7800329253077507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 798 6.1765720602124929e-04</internalNodes>\n          <leafValues>\n            -1.9419220089912415e-01 6.8034619092941284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 799 -6.7170798778533936e-02</internalNodes>\n          <leafValues>\n            -5.7243210077285767e-01 3.0333630740642548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 800 2.4611391127109528e-03</internalNodes>\n          <leafValues>\n            -1.0570179671049118e-01 1.8801900744438171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 801 5.0573959015309811e-03</internalNodes>\n          <leafValues>\n            -6.5921753644943237e-02 2.9868951439857483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 802 1.4213779941201210e-02</internalNodes>\n          <leafValues>\n            6.3767880201339722e-02 -2.1217249333858490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 803 -2.0629619248211384e-03</internalNodes>\n          <leafValues>\n            -2.6714050769805908e-01 7.6817572116851807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 804 3.3787779510021210e-02</internalNodes>\n          <leafValues>\n            2.1774150431156158e-02 -7.4938130378723145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 805 -2.7371870353817940e-02</internalNodes>\n          <leafValues>\n            3.2008060812950134e-01 -5.9622511267662048e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 806 2.8310349211096764e-02</internalNodes>\n          <leafValues>\n            4.4150609523057938e-02 -4.4278699159622192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 807 3.7205279804766178e-03</internalNodes>\n          <leafValues>\n            -1.3136489689350128e-01 1.5447700023651123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 808 2.3320990148931742e-03</internalNodes>\n          <leafValues>\n            -1.0849229991436005e-01 2.2682890295982361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 809 7.6775359921157360e-03</internalNodes>\n          <leafValues>\n            4.9520388245582581e-02 -3.8854768872261047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 810 -2.9863099916838109e-04</internalNodes>\n          <leafValues>\n            -1.9632560014724731e-01 8.3448931574821472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 811 6.1346050351858139e-03</internalNodes>\n          <leafValues>\n            5.1433250308036804e-02 -3.0831611156463623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 812 3.1090779229998589e-02</internalNodes>\n          <leafValues>\n            2.4180799722671509e-02 -6.0184460878372192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 813 2.9320400953292847e-01</internalNodes>\n          <leafValues>\n            1.1811030097305775e-02 -9.6253931522369385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 814 -6.6321907797828317e-04</internalNodes>\n          <leafValues>\n            1.0245270282030106e-01 -1.4200760424137115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 815 4.4736359268426895e-02</internalNodes>\n          <leafValues>\n            -1.1238799989223480e-01 1.7392039299011230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 816 -1.5153390355408192e-02</internalNodes>\n          <leafValues>\n            -1.6100360453128815e-01 3.1116949394345284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 817 -1.1029309825971723e-03</internalNodes>\n          <leafValues>\n            1.2128510326147079e-01 -1.6182290017604828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 818 -2.8973959852010012e-03</internalNodes>\n          <leafValues>\n            1.0827620327472687e-01 -5.3621310740709305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 819 -9.5785204321146011e-03</internalNodes>\n          <leafValues>\n            -1.6808320581912994e-01 8.5053622722625732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 820 9.9092386662960052e-02</internalNodes>\n          <leafValues>\n            -1.5469879843294621e-02 4.1138508915901184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 821 3.7229780107736588e-02</internalNodes>\n          <leafValues>\n            -5.2865970879793167e-02 3.1804299354553223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 822 -2.4716049432754517e-02</internalNodes>\n          <leafValues>\n            -4.0339410305023193e-01 2.9964840039610863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 823 -9.8965302109718323e-02</internalNodes>\n          <leafValues>\n            5.8510482311248779e-01 -2.6924170553684235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 824 -9.6337851136922836e-03</internalNodes>\n          <leafValues>\n            -1.7467470467090607e-01 7.5126871466636658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 825 1.0483879595994949e-03</internalNodes>\n          <leafValues>\n            -1.3728469610214233e-01 1.0684580355882645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 826 4.2523849755525589e-02</internalNodes>\n          <leafValues>\n            1.6578629612922668e-02 -5.6332737207412720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 827 -3.0866260640323162e-03</internalNodes>\n          <leafValues>\n            7.5264893472194672e-02 -1.9476540386676788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 828 2.8643399477005005e-02</internalNodes>\n          <leafValues>\n            -6.7578136920928955e-02 2.5766220688819885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 829 -1.0627339594066143e-02</internalNodes>\n          <leafValues>\n            -2.2384619712829590e-01 7.2172448039054871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 830 4.6080970205366611e-03</internalNodes>\n          <leafValues>\n            5.0876080989837646e-02 -1.4076329767704010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 831 2.9914160259068012e-03</internalNodes>\n          <leafValues>\n            -9.7337983548641205e-02 1.7665959894657135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 832 -7.7902628108859062e-03</internalNodes>\n          <leafValues>\n            -9.8008237779140472e-02 3.7403069436550140e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 833 -6.1339238891378045e-04</internalNodes>\n          <leafValues>\n            9.9036023020744324e-02 -1.6265949606895447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 834 -1.0234319604933262e-02</internalNodes>\n          <leafValues>\n            2.3654979467391968e-01 -3.7817131727933884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 835 -1.1867409572005272e-02</internalNodes>\n          <leafValues>\n            -8.5035067796707153e-01 1.9063299521803856e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 836 4.1437768377363682e-03</internalNodes>\n          <leafValues>\n            8.7878346443176270e-02 -9.4404630362987518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 837 -5.1355729810893536e-03</internalNodes>\n          <leafValues>\n            -3.5699799656867981e-01 4.1546490043401718e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 838 -1.5296200290322304e-03</internalNodes>\n          <leafValues>\n            7.7694572508335114e-02 -4.3186578899621964e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 839 -2.7581020258367062e-03</internalNodes>\n          <leafValues>\n            1.9065889716148376e-01 -8.0679900944232941e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 840 2.8375169634819031e-01</internalNodes>\n          <leafValues>\n            6.2291761860251427e-03 -8.8578152656555176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 841 -2.4612499773502350e-01</internalNodes>\n          <leafValues>\n            -7.0548111200332642e-01 2.1798960864543915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 842 -3.9965631440281868e-03</internalNodes>\n          <leafValues>\n            -1.9710969924926758e-01 8.0300606787204742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 843 -8.4951231256127357e-03</internalNodes>\n          <leafValues>\n            2.1296609938144684e-01 -8.2974627614021301e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 844 4.7206480056047440e-02</internalNodes>\n          <leafValues>\n            9.7466083243489265e-03 -7.0066297054290771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 845 3.7802560254931450e-03</internalNodes>\n          <leafValues>\n            7.7478893101215363e-02 -2.3372000455856323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 846 4.4631671160459518e-02</internalNodes>\n          <leafValues>\n            -2.1464770659804344e-02 3.2136338949203491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 847 6.8157288478687406e-04</internalNodes>\n          <leafValues>\n            1.2177070230245590e-01 -1.2063200026750565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 848 -6.9712452590465546e-02</internalNodes>\n          <leafValues>\n            -9.4828051328659058e-01 1.2017440050840378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 849 -4.8821792006492615e-03</internalNodes>\n          <leafValues>\n            -2.1774840354919434e-01 7.7113322913646698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 850 3.4387600608170033e-03</internalNodes>\n          <leafValues>\n            -1.8093569576740265e-01 9.3595556914806366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 851 -2.5215700268745422e-02</internalNodes>\n          <leafValues>\n            -5.5714958906173706e-01 2.7420820668339729e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 852 7.4309771880507469e-03</internalNodes>\n          <leafValues>\n            -4.6630490571260452e-02 2.1024890244007111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 853 -1.5789959579706192e-02</internalNodes>\n          <leafValues>\n            -3.3443140983581543e-01 4.6291690319776535e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 854 3.5080160014331341e-03</internalNodes>\n          <leafValues>\n            -6.4612612128257751e-02 2.2737669944763184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 855 4.4291261583566666e-02</internalNodes>\n          <leafValues>\n            2.2642729803919792e-02 -7.0683121681213379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 856 1.9108189269900322e-02</internalNodes>\n          <leafValues>\n            -3.5893321037292480e-02 1.4613699913024902e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>99</maxWeakCount>\n      <stageThreshold>-1.8724700212478638e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 857 -1.6636669635772705e-02</internalNodes>\n          <leafValues>\n            2.5966519117355347e-01 -4.1162249445915222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 858 2.9865810647606850e-02</internalNodes>\n          <leafValues>\n            -3.3182668685913086e-01 2.0545999705791473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 859 9.1892024502158165e-03</internalNodes>\n          <leafValues>\n            -3.4481799602508545e-01 1.8148690462112427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 860 2.8450509998947382e-03</internalNodes>\n          <leafValues>\n            -3.2904830574989319e-01 9.4392292201519012e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 861 3.4257639199495316e-02</internalNodes>\n          <leafValues>\n            -3.2212799787521362e-01 1.7332050204277039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 862 3.4367710351943970e-02</internalNodes>\n          <leafValues>\n            -3.2593810558319092e-01 1.7473269999027252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 863 9.0881884098052979e-03</internalNodes>\n          <leafValues>\n            1.0527010262012482e-01 -4.8131370544433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 864 -5.0939731299877167e-03</internalNodes>\n          <leafValues>\n            1.7374989390373230e-01 -2.7883121371269226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 865 1.1773620499297976e-03</internalNodes>\n          <leafValues>\n            -4.2217200994491577e-01 1.0231760144233704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 866 3.6797609180212021e-02</internalNodes>\n          <leafValues>\n            1.1229369789361954e-01 -3.8409191370010376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 867 -7.2484882548451424e-04</internalNodes>\n          <leafValues>\n            -4.4795128703117371e-01 8.5079587996006012e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 868 1.2603210285305977e-02</internalNodes>\n          <leafValues>\n            6.0475040227174759e-02 -3.5327509045600891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 869 5.1925552543252707e-04</internalNodes>\n          <leafValues>\n            -3.1916388869285583e-01 1.1903370171785355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 870 -1.3244180008769035e-02</internalNodes>\n          <leafValues>\n            2.1975730359554291e-01 -9.5025591552257538e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 871 -2.7882310096174479e-03</internalNodes>\n          <leafValues>\n            -2.7294808626174927e-01 1.2419769912958145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 872 2.6591470465064049e-02</internalNodes>\n          <leafValues>\n            6.0452010482549667e-02 -3.9637029170989990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 873 1.2505210004746914e-02</internalNodes>\n          <leafValues>\n            7.8631103038787842e-02 -4.0303888916969299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 874 -1.3857340440154076e-02</internalNodes>\n          <leafValues>\n            2.5759750604629517e-01 -1.0351459681987762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 875 7.2099752724170685e-02</internalNodes>\n          <leafValues>\n            -5.5193781852722168e-01 6.0020800679922104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 876 -9.8338630050420761e-04</internalNodes>\n          <leafValues>\n            -3.1915199756622314e-01 8.7977647781372070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 877 -5.8390170335769653e-02</internalNodes>\n          <leafValues>\n            -5.5988979339599609e-01 5.2990190684795380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 878 4.2504342272877693e-03</internalNodes>\n          <leafValues>\n            -2.8897258639335632e-01 9.2816516757011414e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 879 -3.2332520931959152e-02</internalNodes>\n          <leafValues>\n            -4.8713520169258118e-01 6.0787629336118698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 880 4.7365639358758926e-02</internalNodes>\n          <leafValues>\n            -1.0111550241708755e-01 3.2597780227661133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 881 -3.8943330291658640e-03</internalNodes>\n          <leafValues>\n            1.9173160195350647e-01 -1.6729380190372467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 882 5.7729199528694153e-02</internalNodes>\n          <leafValues>\n            3.6343291401863098e-02 -7.3161131143569946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 883 -1.8925540149211884e-02</internalNodes>\n          <leafValues>\n            3.2471498847007751e-01 -8.6188063025474548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 884 -3.9679601788520813e-02</internalNodes>\n          <leafValues>\n            -4.1826680302619934e-01 5.3354211151599884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 885 -2.0733650773763657e-02</internalNodes>\n          <leafValues>\n            -4.1205188632011414e-01 6.3596852123737335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 886 1.5387910604476929e-01</internalNodes>\n          <leafValues>\n            1.9954150542616844e-02 -5.7643288373947144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 887 1.2131260335445404e-01</internalNodes>\n          <leafValues>\n            4.4516459107398987e-02 -5.9093242883682251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 888 2.7478559786686674e-05</internalNodes>\n          <leafValues>\n            -4.0688499808311462e-01 5.2828099578619003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 889 8.8893681764602661e-02</internalNodes>\n          <leafValues>\n            5.1985241472721100e-02 -5.0228989124298096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 890 2.8169099241495132e-03</internalNodes>\n          <leafValues>\n            6.7726433277130127e-02 -1.3582049310207367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 891 -1.7215269326698035e-04</internalNodes>\n          <leafValues>\n            8.9616917073726654e-02 -2.9589369893074036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 892 -3.1830620020627975e-02</internalNodes>\n          <leafValues>\n            -5.6433600187301636e-01 2.2822249680757523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 893 -6.3334330916404724e-02</internalNodes>\n          <leafValues>\n            -8.2371699810028076e-01 2.7576120570302010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 894 -6.9032818078994751e-02</internalNodes>\n          <leafValues>\n            -6.9788217544555664e-01 3.3770920708775520e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 895 2.1021519787609577e-03</internalNodes>\n          <leafValues>\n            -2.7244049310684204e-01 8.6922891438007355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 896 3.4065779298543930e-02</internalNodes>\n          <leafValues>\n            1.7670579254627228e-02 -4.3001320958137512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 897 8.1215314567089081e-03</internalNodes>\n          <leafValues>\n            -1.5942670404911041e-01 1.6256070137023926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 898 -1.6329119680449367e-03</internalNodes>\n          <leafValues>\n            4.2009588330984116e-02 -3.2923451066017151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 899 -3.9110329002141953e-02</internalNodes>\n          <leafValues>\n            -6.0666251182556152e-01 4.1248850524425507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 900 -2.3188870400190353e-02</internalNodes>\n          <leafValues>\n            -5.5365419387817383e-01 1.7315510660409927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 901 -6.2944158911705017e-02</internalNodes>\n          <leafValues>\n            -5.3853708505630493e-01 4.1758351027965546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 902 -8.5414372384548187e-02</internalNodes>\n          <leafValues>\n            -9.3122452497482300e-01 -9.1123272432014346e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 903 -4.1963338851928711e-02</internalNodes>\n          <leafValues>\n            -5.6720697879791260e-01 3.9175700396299362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 904 1.1165619827806950e-02</internalNodes>\n          <leafValues>\n            -6.7815810441970825e-02 2.9003840684890747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 905 -1.3730769976973534e-02</internalNodes>\n          <leafValues>\n            3.2328099012374878e-01 -1.0592839866876602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 906 -7.5793050229549408e-02</internalNodes>\n          <leafValues>\n            5.5545729398727417e-01 -3.2934208866208792e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 907 2.7008100878447294e-03</internalNodes>\n          <leafValues>\n            1.5311180055141449e-01 -1.6604180634021759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 908 1.0164660401642323e-02</internalNodes>\n          <leafValues>\n            7.6404631137847900e-02 -2.8745749592781067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 909 -5.9808149933815002e-02</internalNodes>\n          <leafValues>\n            -7.3486739397048950e-01 3.0370820313692093e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 910 9.6447616815567017e-02</internalNodes>\n          <leafValues>\n            2.6198839768767357e-02 -6.6001427173614502e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 911 3.2350219786167145e-02</internalNodes>\n          <leafValues>\n            4.1407719254493713e-02 -4.7442498803138733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 912 2.3717279732227325e-01</internalNodes>\n          <leafValues>\n            -9.5941081643104553e-02 2.4070499837398529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 913 -4.0942471474409103e-02</internalNodes>\n          <leafValues>\n            -4.0582120418548584e-01 6.4327560365200043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 914 -3.4409161657094955e-02</internalNodes>\n          <leafValues>\n            -7.4849551916122437e-01 2.2520760074257851e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 915 1.3847379386425018e-01</internalNodes>\n          <leafValues>\n            2.8472309932112694e-02 -7.0612120628356934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 916 4.6567160636186600e-02</internalNodes>\n          <leafValues>\n            -4.1168119758367538e-02 6.9962567090988159e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 917 -3.0492639169096947e-02</internalNodes>\n          <leafValues>\n            -6.5116977691650391e-01 3.9995279163122177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 918 8.6345896124839783e-03</internalNodes>\n          <leafValues>\n            -1.1207970231771469e-01 7.7241696417331696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 919 3.1845968216657639e-02</internalNodes>\n          <leafValues>\n            -1.1552079766988754e-01 1.7539389431476593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 920 1.7124590277671814e-01</internalNodes>\n          <leafValues>\n            5.0687979906797409e-02 -4.7042238712310791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 921 5.2879499271512032e-03</internalNodes>\n          <leafValues>\n            6.5041497349739075e-02 -2.8894019126892090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 922 1.0060779750347137e-02</internalNodes>\n          <leafValues>\n            6.3689216971397400e-02 -2.6081889867782593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 923 3.3330768346786499e-02</internalNodes>\n          <leafValues>\n            3.4809298813343048e-02 -5.7845467329025269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 924 -5.2802279591560364e-02</internalNodes>\n          <leafValues>\n            -6.8521040678024292e-01 1.7583779990673065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 925 -1.5452199615538120e-02</internalNodes>\n          <leafValues>\n            3.1395891308784485e-01 -7.7611543238162994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 926 -6.5528601408004761e-04</internalNodes>\n          <leafValues>\n            5.6181360036134720e-02 -1.5184390544891357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 927 3.7062149494886398e-02</internalNodes>\n          <leafValues>\n            2.8928549960255623e-02 -7.0487600564956665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 928 -5.7728089392185211e-02</internalNodes>\n          <leafValues>\n            -4.3192410469055176e-01 9.2153800651431084e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 929 -2.2813139948993921e-03</internalNodes>\n          <leafValues>\n            1.0200300067663193e-01 -2.1657040715217590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 930 2.6513230055570602e-02</internalNodes>\n          <leafValues>\n            -8.3650946617126465e-02 3.0740359425544739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 931 7.3622196912765503e-02</internalNodes>\n          <leafValues>\n            3.0683049932122231e-02 -7.1910232305526733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 932 -1.3022350147366524e-02</internalNodes>\n          <leafValues>\n            -3.6386561393737793e-01 2.5367209687829018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 933 -1.3319820165634155e-02</internalNodes>\n          <leafValues>\n            -5.1884061098098755e-01 3.5935029387474060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 934 2.3190369829535484e-03</internalNodes>\n          <leafValues>\n            -6.1515200883150101e-02 7.1100451052188873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 935 -2.1372830495238304e-02</internalNodes>\n          <leafValues>\n            -5.0247579813003540e-01 3.9844810962677002e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 936 2.4474589154124260e-02</internalNodes>\n          <leafValues>\n            -4.7960858792066574e-02 2.6931110024452209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 937 -1.0679869912564754e-02</internalNodes>\n          <leafValues>\n            3.1474280357360840e-01 -8.4758952260017395e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 938 4.8961799591779709e-02</internalNodes>\n          <leafValues>\n            2.7358099818229675e-02 -3.8229361176490784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 939 3.2376348972320557e-02</internalNodes>\n          <leafValues>\n            -4.7090999782085419e-02 4.5985230803489685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 940 -1.0995220392942429e-02</internalNodes>\n          <leafValues>\n            -1.8544240295886993e-01 3.6006979644298553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 941 1.7626030743122101e-01</internalNodes>\n          <leafValues>\n            2.4375159293413162e-02 -7.7686601877212524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 942 7.9778492450714111e-02</internalNodes>\n          <leafValues>\n            3.3787339925765991e-03 -7.2928887605667114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 943 -1.1329210363328457e-02</internalNodes>\n          <leafValues>\n            -4.6397671103477478e-01 3.9380829781293869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 944 6.3431300222873688e-02</internalNodes>\n          <leafValues>\n            -9.7074061632156372e-02 1.0118869692087173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 945 -1.2691849842667580e-02</internalNodes>\n          <leafValues>\n            2.8142300248146057e-01 -7.2105713188648224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 946 -7.8238412737846375e-02</internalNodes>\n          <leafValues>\n            5.7400637865066528e-01 -1.8400549888610840e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 947 3.9532519876956940e-02</internalNodes>\n          <leafValues>\n            4.3154988437891006e-02 -5.2327841520309448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 948 1.5355779789388180e-02</internalNodes>\n          <leafValues>\n            -4.7316178679466248e-02 4.6925771236419678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 949 -6.4018620178103447e-03</internalNodes>\n          <leafValues>\n            1.3297230005264282e-01 -1.4365619421005249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 950 -1.0567340254783630e-01</internalNodes>\n          <leafValues>\n            2.0206320285797119e-01 -1.4406460337340832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 951 2.8163839131593704e-02</internalNodes>\n          <leafValues>\n            7.1180991828441620e-02 -3.1034231185913086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 952 1.1702980101108551e-01</internalNodes>\n          <leafValues>\n            1.1619930155575275e-02 -7.1530961990356445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 953 -3.8921568542718887e-02</internalNodes>\n          <leafValues>\n            2.4412679672241211e-01 -8.2244850695133209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 954 -2.8435489162802696e-02</internalNodes>\n          <leafValues>\n            -3.6785170435905457e-01 3.8488820195198059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 955 -3.6393549293279648e-02</internalNodes>\n          <leafValues>\n            5.2206730842590332e-01 -4.7079380601644516e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>139</maxWeakCount>\n      <stageThreshold>-1.7121059894561768e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 956 -2.1428510546684265e-02</internalNodes>\n          <leafValues>\n            1.9014079868793488e-01 -5.0612741708755493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 957 2.0596129819750786e-02</internalNodes>\n          <leafValues>\n            -2.9283228516578674e-01 2.4655179679393768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 958 2.7893469668924809e-03</internalNodes>\n          <leafValues>\n            1.1085920035839081e-01 -4.6909829974174500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 959 4.4722640886902809e-03</internalNodes>\n          <leafValues>\n            -2.8250780701637268e-01 1.4564670622348785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 960 -1.0463190264999866e-03</internalNodes>\n          <leafValues>\n            -2.6603269577026367e-01 1.2815919518470764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 961 1.5831940108910203e-03</internalNodes>\n          <leafValues>\n            -6.3467299938201904e-01 7.1003831923007965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 962 -7.3153319135599304e-06</internalNodes>\n          <leafValues>\n            1.0248930007219315e-01 -3.4815961122512817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 963 5.4208859801292419e-03</internalNodes>\n          <leafValues>\n            5.9830531477928162e-02 -3.1387779116630554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 964 1.2645759852603078e-03</internalNodes>\n          <leafValues>\n            -2.2709150612354279e-01 1.3160009682178497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 965 3.0235300073400140e-05</internalNodes>\n          <leafValues>\n            -2.6413309574127197e-01 2.8918080031871796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 966 1.5345469582825899e-03</internalNodes>\n          <leafValues>\n            -4.0711951255798340e-01 6.9787837564945221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 967 6.8222070112824440e-03</internalNodes>\n          <leafValues>\n            -1.5069720149040222e-01 2.1888419985771179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 968 -9.8558319732546806e-03</internalNodes>\n          <leafValues>\n            -3.5441368818283081e-01 8.6026392877101898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 969 -2.9890429228544235e-02</internalNodes>\n          <leafValues>\n            2.2117440402507782e-01 -2.8611009940505028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 970 -2.6285760104656219e-03</internalNodes>\n          <leafValues>\n            9.8204180598258972e-02 -2.7149739861488342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 971 3.2039839425124228e-04</internalNodes>\n          <leafValues>\n            -9.8540462553501129e-02 1.8785539269447327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 972 1.1079469695687294e-03</internalNodes>\n          <leafValues>\n            6.4034536480903625e-02 -4.3082669377326965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 973 -9.1538369655609131e-02</internalNodes>\n          <leafValues>\n            -5.2440929412841797e-01 1.2250489555299282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 974 4.3205898255109787e-02</internalNodes>\n          <leafValues>\n            9.6655867993831635e-02 -2.6809310913085938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 975 9.1920839622616768e-04</internalNodes>\n          <leafValues>\n            -1.3260160386562347e-01 1.2358319759368896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 976 8.9521165937185287e-03</internalNodes>\n          <leafValues>\n            8.6445420980453491e-02 -2.3219430446624756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 977 5.6190020404756069e-03</internalNodes>\n          <leafValues>\n            -6.0304049402475357e-02 1.5070669353008270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 978 3.7380240391939878e-03</internalNodes>\n          <leafValues>\n            -1.8652540445327759e-01 1.3011780381202698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 979 -4.4416960328817368e-02</internalNodes>\n          <leafValues>\n            1.9036759436130524e-01 -1.7527159303426743e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 980 1.9832739606499672e-02</internalNodes>\n          <leafValues>\n            -5.3527630865573883e-02 4.0238130092620850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 981 1.2155610136687756e-02</internalNodes>\n          <leafValues>\n            9.1288566589355469e-02 -2.6862761378288269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 982 5.0532341003417969e-02</internalNodes>\n          <leafValues>\n            3.1295180320739746e-02 -6.2836539745330811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 983 -1.7635909607633948e-03</internalNodes>\n          <leafValues>\n            5.6185219436883926e-02 -2.1861009299755096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 984 4.9412921071052551e-03</internalNodes>\n          <leafValues>\n            5.5915899574756622e-02 -3.5954388976097107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 985 -1.1536119878292084e-01</internalNodes>\n          <leafValues>\n            -5.3168737888336182e-01 7.9654296860098839e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 986 -2.0473708864301443e-03</internalNodes>\n          <leafValues>\n            7.9633012413978577e-02 -2.5389900803565979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 987 4.7814860008656979e-03</internalNodes>\n          <leafValues>\n            -9.4149880111217499e-02 1.1631009727716446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 988 2.1274939179420471e-02</internalNodes>\n          <leafValues>\n            -4.7486610710620880e-02 3.7564519047737122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 989 5.1177050918340683e-03</internalNodes>\n          <leafValues>\n            7.4936643242835999e-02 -2.6105350255966187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 990 -1.3952000066637993e-02</internalNodes>\n          <leafValues>\n            2.3960170149803162e-01 -9.6836768090724945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 991 -1.3828179799020290e-02</internalNodes>\n          <leafValues>\n            -3.9605268836021423e-01 5.8639749884605408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 992 -4.7117020934820175e-02</internalNodes>\n          <leafValues>\n            -5.5717539787292480e-01 3.1678650528192520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 993 1.0515590198338032e-02</internalNodes>\n          <leafValues>\n            -4.3930530548095703e-02 8.5277959704399109e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 994 4.0591089054942131e-03</internalNodes>\n          <leafValues>\n            -1.0774219781160355e-01 1.6283099353313446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 995 -3.0376210808753967e-02</internalNodes>\n          <leafValues>\n            2.0997379720211029e-01 -9.9417790770530701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 996 -6.6932791378349066e-04</internalNodes>\n          <leafValues>\n            -3.4863340854644775e-01 5.9148021042346954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 997 -1.4665089547634125e-02</internalNodes>\n          <leafValues>\n            -4.3786540627479553e-01 2.8008179739117622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 998 -3.5847770050168037e-03</internalNodes>\n          <leafValues>\n            9.6611537039279938e-02 -1.7948310077190399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 999 -5.5043050087988377e-03</internalNodes>\n          <leafValues>\n            -3.3546659350395203e-01 7.5057849287986755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1000 1.0141800157725811e-03</internalNodes>\n          <leafValues>\n            -1.8602859973907471e-01 8.6880050599575043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1001 1.4642399735748768e-02</internalNodes>\n          <leafValues>\n            2.6652090251445770e-02 -2.6002681255340576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1002 -5.8538499288260937e-03</internalNodes>\n          <leafValues>\n            -1.4993189275264740e-01 1.2684640288352966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1003 -5.3472168743610382e-02</internalNodes>\n          <leafValues>\n            5.2131122350692749e-01 -2.0375749096274376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1004 -7.6695926487445831e-02</internalNodes>\n          <leafValues>\n            4.5817071199417114e-01 -3.4876950085163116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1005 -5.9094227617606521e-04</internalNodes>\n          <leafValues>\n            1.1570499837398529e-01 -1.2966969609260559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1006 -4.3543361127376556e-02</internalNodes>\n          <leafValues>\n            -8.2132732868194580e-01 2.0535599440336227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1007 5.0691701471805573e-02</internalNodes>\n          <leafValues>\n            -3.6280639469623566e-02 4.0212449431419373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1008 1.3124669902026653e-02</internalNodes>\n          <leafValues>\n            -8.3614267408847809e-02 2.0441520214080811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1009 3.5445049405097961e-01</internalNodes>\n          <leafValues>\n            1.4580509625375271e-02 -5.6883698701858521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1010 -2.1929910406470299e-02</internalNodes>\n          <leafValues>\n            1.6368280351161957e-01 -1.0018540173768997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1011 3.8168739527463913e-02</internalNodes>\n          <leafValues>\n            3.5331390798091888e-02 -5.3782612085342407e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1012 6.3126571476459503e-03</internalNodes>\n          <leafValues>\n            5.6145761162042618e-02 -2.8158029913902283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1013 -4.3002668768167496e-02</internalNodes>\n          <leafValues>\n            -6.4804542064666748e-01 1.7478020861744881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1014 2.4681850336492062e-03</internalNodes>\n          <leafValues>\n            -1.1719709634780884e-01 1.3693059980869293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1015 4.5261289924383163e-02</internalNodes>\n          <leafValues>\n            1.5927750617265701e-02 -7.1915590763092041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1016 -4.2067110538482666e-02</internalNodes>\n          <leafValues>\n            -6.4201879501342773e-01 2.0196499302983284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1017 3.9601750904694200e-04</internalNodes>\n          <leafValues>\n            -3.1774568557739258e-01 7.6843477785587311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1018 -1.2469319626688957e-02</internalNodes>\n          <leafValues>\n            1.9531419873237610e-01 -7.8799232840538025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1019 7.9188523814082146e-03</internalNodes>\n          <leafValues>\n            5.6721080094575882e-02 -2.6906439661979675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1020 -6.2929331324994564e-03</internalNodes>\n          <leafValues>\n            1.5688340365886688e-01 -9.9287010729312897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1021 2.2974120453000069e-02</internalNodes>\n          <leafValues>\n            -6.6930226981639862e-02 2.4427099525928497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1022 -9.1710267588496208e-03</internalNodes>\n          <leafValues>\n            -2.9078531265258789e-01 5.9312019497156143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1023 -9.5892272889614105e-02</internalNodes>\n          <leafValues>\n            -6.3700878620147705e-01 1.3278760015964508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1024 5.6696119718253613e-03</internalNodes>\n          <leafValues>\n            5.6131001561880112e-02 -2.9535120725631714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1025 -1.3495329767465591e-02</internalNodes>\n          <leafValues>\n            2.0205779373645782e-01 -6.3128583133220673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1026 1.6108239069581032e-02</internalNodes>\n          <leafValues>\n            4.5092061161994934e-02 -3.6163818836212158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1027 1.1768710101023316e-03</internalNodes>\n          <leafValues>\n            -1.9879919290542603e-01 1.3078540563583374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1028 1.4128970215097070e-03</internalNodes>\n          <leafValues>\n            -2.0856089890003204e-01 8.1473708152770996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1029 -4.3028060346841812e-02</internalNodes>\n          <leafValues>\n            -2.8687548637390137e-01 2.9704660177230835e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1030 -1.0961409658193588e-02</internalNodes>\n          <leafValues>\n            4.8846191167831421e-01 -3.5002779215574265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1031 -4.5575079275295138e-04</internalNodes>\n          <leafValues>\n            1.0644569993019104e-01 -1.0506340116262436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1032 -5.0013329833745956e-02</internalNodes>\n          <leafValues>\n            -8.2039457559585571e-01 1.8604470416903496e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1033 -4.6841200441122055e-02</internalNodes>\n          <leafValues>\n            -8.6972111463546753e-01 3.9388639852404594e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1034 -8.0362131120637059e-04</internalNodes>\n          <leafValues>\n            1.4196899533271790e-01 -1.2184119969606400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1035 1.9802400842308998e-02</internalNodes>\n          <leafValues>\n            4.0857948362827301e-02 -3.6116421222686768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1036 2.1874029189348221e-02</internalNodes>\n          <leafValues>\n            -5.8230601251125336e-02 2.4490930140018463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1037 3.2371848821640015e-02</internalNodes>\n          <leafValues>\n            2.6172259822487831e-02 -4.0803569555282593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1038 -7.0319771766662598e-03</internalNodes>\n          <leafValues>\n            -2.5175130367279053e-01 6.0090810060501099e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1039 2.6019799988716841e-03</internalNodes>\n          <leafValues>\n            -7.0827886462211609e-02 2.0735129714012146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1040 -3.1531439162790775e-03</internalNodes>\n          <leafValues>\n            1.7268289625644684e-01 -1.1326900124549866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1041 5.8357551693916321e-02</internalNodes>\n          <leafValues>\n            1.4668770134449005e-02 -9.2907238006591797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1042 3.6941959988325834e-03</internalNodes>\n          <leafValues>\n            6.6812008619308472e-02 -2.0454549789428711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1043 1.8183739855885506e-02</internalNodes>\n          <leafValues>\n            -3.5921659320592880e-02 2.3765130341053009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1044 -4.4514648616313934e-03</internalNodes>\n          <leafValues>\n            -1.8156670033931732e-01 8.0072969198226929e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1045 3.5554010421037674e-02</internalNodes>\n          <leafValues>\n            1.1413309723138809e-02 -3.9503180980682373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1046 1.6067499294877052e-02</internalNodes>\n          <leafValues>\n            -4.9147009849548340e-02 3.0306708812713623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1047 3.6372188478708267e-02</internalNodes>\n          <leafValues>\n            2.3675160482525826e-02 -6.8069261312484741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1048 -7.4834008701145649e-03</internalNodes>\n          <leafValues>\n            2.4146680533885956e-01 -5.8301728218793869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1049 -7.2762509807944298e-03</internalNodes>\n          <leafValues>\n            -2.2373069822788239e-01 5.0284590572118759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1050 -4.7946218401193619e-03</internalNodes>\n          <leafValues>\n            -2.1922710537910461e-01 6.6698201000690460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1051 -1.3066439889371395e-02</internalNodes>\n          <leafValues>\n            2.2604539990425110e-01 -3.7037428468465805e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1052 2.3257338907569647e-03</internalNodes>\n          <leafValues>\n            -8.1509239971637726e-02 2.3270750045776367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1053 -1.1436239816248417e-02</internalNodes>\n          <leafValues>\n            6.7732691764831543e-02 -3.3069651573896408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1054 6.7957569845020771e-03</internalNodes>\n          <leafValues>\n            9.3188859522342682e-02 -1.8542419373989105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1055 -5.2705928683280945e-02</internalNodes>\n          <leafValues>\n            4.0707829594612122e-01 -2.5846559554338455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1056 1.2774269282817841e-01</internalNodes>\n          <leafValues>\n            1.7207339406013489e-02 -8.8952672481536865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1057 -2.7999880909919739e-01</internalNodes>\n          <leafValues>\n            -9.1963422298431396e-01 2.5054879370145500e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1058 1.2669020332396030e-02</internalNodes>\n          <leafValues>\n            -7.3152393102645874e-02 2.0872280001640320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1059 -1.5894599258899689e-02</internalNodes>\n          <leafValues>\n            1.1266420036554337e-01 -4.0140561759471893e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1060 5.3938169032335281e-02</internalNodes>\n          <leafValues>\n            3.0137389898300171e-02 -5.0454300642013550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1061 7.3805922875180840e-04</internalNodes>\n          <leafValues>\n            -3.5923779010772705e-01 3.3418480306863785e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1062 4.7065159305930138e-03</internalNodes>\n          <leafValues>\n            4.4195190072059631e-01 -3.9396088570356369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1063 3.0945870094001293e-03</internalNodes>\n          <leafValues>\n            -7.1224376559257507e-02 1.2306260317564011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1064 -3.2640039920806885e-02</internalNodes>\n          <leafValues>\n            -4.4644719362258911e-01 3.4509830176830292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1065 -7.8390557318925858e-03</internalNodes>\n          <leafValues>\n            -9.9895596504211426e-02 3.3491879701614380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1066 7.6504289172589779e-03</internalNodes>\n          <leafValues>\n            5.5107340216636658e-02 -2.4002109467983246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1067 3.8153179921209812e-03</internalNodes>\n          <leafValues>\n            -5.7143520563840866e-02 1.7120680212974548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1068 1.4295349828898907e-02</internalNodes>\n          <leafValues>\n            -5.5747661739587784e-02 2.6719009876251221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1069 -1.8241480574943125e-04</internalNodes>\n          <leafValues>\n            4.7362379729747772e-02 -2.1473219990730286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1070 -3.1916480511426926e-02</internalNodes>\n          <leafValues>\n            -1.4398300647735596e-01 9.2526309192180634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1071 -7.6755490154027939e-03</internalNodes>\n          <leafValues>\n            1.2513080239295959e-01 -5.2855581045150757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1072 1.4152109622955322e-02</internalNodes>\n          <leafValues>\n            -5.8198999613523483e-02 2.4444380402565002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1073 -1.6701059415936470e-02</internalNodes>\n          <leafValues>\n            -3.0269339680671692e-01 2.5713469833135605e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1074 3.5869849380105734e-03</internalNodes>\n          <leafValues>\n            -1.1999790370464325e-01 1.2468840181827545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1075 3.7683059927076101e-03</internalNodes>\n          <leafValues>\n            5.0271350890398026e-02 -2.0477029681205750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1076 9.9043175578117371e-04</internalNodes>\n          <leafValues>\n            -8.5413850843906403e-02 1.6316239535808563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1077 9.3151312321424484e-03</internalNodes>\n          <leafValues>\n            9.4177378341555595e-03 -3.5209101438522339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1078 -1.5002860163804144e-04</internalNodes>\n          <leafValues>\n            8.3480976521968842e-02 -1.7047779262065887e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1079 8.7790598627179861e-04</internalNodes>\n          <leafValues>\n            -1.1054719984531403e-01 1.1750820279121399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1080 -3.7630271166563034e-02</internalNodes>\n          <leafValues>\n            5.0325840711593628e-01 -2.6165060698986053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1081 5.6488867849111557e-03</internalNodes>\n          <leafValues>\n            7.4713237583637238e-02 -1.4058519899845123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1082 -1.4621330192312598e-03</internalNodes>\n          <leafValues>\n            6.7465327680110931e-02 -2.0143230259418488e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1083 5.3189881145954132e-03</internalNodes>\n          <leafValues>\n            -3.5997938364744186e-02 3.7376481294631958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1084 2.1019520238041878e-02</internalNodes>\n          <leafValues>\n            2.7063809335231781e-02 -5.0199657678604126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1085 -1.1328969895839691e-01</internalNodes>\n          <leafValues>\n            -7.4395442008972168e-01 1.3778089545667171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1086 -6.1144838109612465e-03</internalNodes>\n          <leafValues>\n            1.4044840633869171e-01 -8.7939672172069550e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1087 -7.7648349106311798e-03</internalNodes>\n          <leafValues>\n            -1.4341640472412109e-01 4.3061099946498871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1088 -9.1335996985435486e-02</internalNodes>\n          <leafValues>\n            -6.3246071338653564e-01 2.0902950316667557e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1089 -1.6339610517024994e-01</internalNodes>\n          <leafValues>\n            -7.7071088552474976e-01 1.3627690263092518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1090 5.3004521131515503e-01</internalNodes>\n          <leafValues>\n            1.2292830273509026e-02 -7.9708522558212280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1091 -3.0609068926423788e-03</internalNodes>\n          <leafValues>\n            5.7478528469800949e-02 -8.8626816868782043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1092 1.3204859569668770e-03</internalNodes>\n          <leafValues>\n            -1.0473939776420593e-01 1.2416320294141769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1093 -6.6045127809047699e-02</internalNodes>\n          <leafValues>\n            -7.0403701066970825e-01 7.2672651149332523e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1094 5.2080051973462105e-03</internalNodes>\n          <leafValues>\n            7.3289416730403900e-02 -1.6105780005455017e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>106</maxWeakCount>\n      <stageThreshold>-1.8098859786987305e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1095 -2.4040700867772102e-02</internalNodes>\n          <leafValues>\n            2.4318559467792511e-01 -3.8189288973808289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1096 2.6374191045761108e-01</internalNodes>\n          <leafValues>\n            -2.5091141462326050e-01 2.7231940627098083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1097 3.3161949831992388e-03</internalNodes>\n          <leafValues>\n            -2.8115370869636536e-01 2.2977580130100250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1098 2.5751669891178608e-03</internalNodes>\n          <leafValues>\n            -6.4815878868103027e-01 8.3049327135086060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1099 1.2843149714171886e-02</internalNodes>\n          <leafValues>\n            -5.4388070106506348e-01 8.6304552853107452e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1100 1.3005360029637814e-02</internalNodes>\n          <leafValues>\n            -2.6411589980125427e-01 2.2107879817485809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1101 2.6304060593247414e-02</internalNodes>\n          <leafValues>\n            -2.2276160120964050e-01 2.2458629310131073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1102 -6.8887993693351746e-02</internalNodes>\n          <leafValues>\n            4.4677790999412537e-01 -1.8398750573396683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1103 1.5864400193095207e-02</internalNodes>\n          <leafValues>\n            -3.3532321453094482e-01 1.6380620002746582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1104 -7.1481592021882534e-03</internalNodes>\n          <leafValues>\n            -3.5999459028244019e-01 1.0679650306701660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1105 -1.2002130039036274e-02</internalNodes>\n          <leafValues>\n            -3.7498581409454346e-01 9.6759349107742310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1106 -2.6663220487535000e-03</internalNodes>\n          <leafValues>\n            -3.8941639661788940e-01 5.9776391834020615e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1107 5.2618351764976978e-04</internalNodes>\n          <leafValues>\n            -3.0557510256767273e-01 1.0778070241212845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1108 -4.0705721825361252e-02</internalNodes>\n          <leafValues>\n            -5.8572947978973389e-01 4.0660858154296875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1109 -8.7929163128137589e-03</internalNodes>\n          <leafValues>\n            2.3699410259723663e-01 -1.3827539980411530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1110 -2.2475840523838997e-03</internalNodes>\n          <leafValues>\n            -3.5475319623947144e-01 8.9079782366752625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1111 5.8501982130110264e-03</internalNodes>\n          <leafValues>\n            9.1695636510848999e-02 -3.3329799771308899e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1112 -3.9623910561203957e-03</internalNodes>\n          <leafValues>\n            -1.9845740497112274e-01 1.2363869696855545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1113 -1.7685770289972425e-03</internalNodes>\n          <leafValues>\n            7.3684811592102051e-02 -4.5862528681755066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1114 6.3303880393505096e-02</internalNodes>\n          <leafValues>\n            4.8690151423215866e-02 -5.7301318645477295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1115 7.9875197261571884e-03</internalNodes>\n          <leafValues>\n            -8.1072300672531128e-01 2.7054410427808762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1116 -1.3520400039851665e-02</internalNodes>\n          <leafValues>\n            1.6274809837341309e-01 -1.6841860115528107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1117 4.8139609396457672e-02</internalNodes>\n          <leafValues>\n            4.5234218239784241e-02 -5.7300239801406860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1118 5.0355647690594196e-03</internalNodes>\n          <leafValues>\n            6.5225511789321899e-02 -2.5856611132621765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1119 1.9625260028988123e-04</internalNodes>\n          <leafValues>\n            1.4221550524234772e-01 -1.8481519818305969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1120 2.5747891049832106e-03</internalNodes>\n          <leafValues>\n            -3.5904300212860107e-01 7.5663506984710693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1121 -4.0524629876017570e-03</internalNodes>\n          <leafValues>\n            -2.1212129294872284e-01 1.1840210109949112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1122 5.6920260190963745e-02</internalNodes>\n          <leafValues>\n            -4.3657299131155014e-02 3.8774600625038147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1123 3.7986990064382553e-02</internalNodes>\n          <leafValues>\n            -8.1706330180168152e-02 3.9529800415039062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1124 -2.2731529548764229e-02</internalNodes>\n          <leafValues>\n            -3.4693419933319092e-01 6.8438567221164703e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1125 9.9069473799318075e-04</internalNodes>\n          <leafValues>\n            -3.6681869626045227e-01 6.1036650091409683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1126 -4.3086782097816467e-03</internalNodes>\n          <leafValues>\n            1.4361980557441711e-01 -9.6160076558589935e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1127 -2.5202209129929543e-02</internalNodes>\n          <leafValues>\n            -4.6109348535537720e-01 5.9420660138130188e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1128 -3.3597718924283981e-02</internalNodes>\n          <leafValues>\n            -4.7127521038055420e-01 9.6356319263577461e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1129 -4.6891071833670139e-03</internalNodes>\n          <leafValues>\n            1.9676209986209869e-01 -1.1853359639644623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1130 2.4549920111894608e-02</internalNodes>\n          <leafValues>\n            -4.5542590320110321e-02 2.8717058897018433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1131 -1.8802500562742352e-03</internalNodes>\n          <leafValues>\n            -2.9892438650131226e-01 8.0199889838695526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1132 2.0160999894142151e-01</internalNodes>\n          <leafValues>\n            3.0502580106258392e-02 -4.8414209485054016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1133 -6.9803953170776367e-02</internalNodes>\n          <leafValues>\n            -6.2382811307907104e-01 3.5180661827325821e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1134 9.1318902559578419e-04</internalNodes>\n          <leafValues>\n            -1.9935069978237152e-01 6.8270348012447357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1135 1.4578959904611111e-02</internalNodes>\n          <leafValues>\n            1.0063359886407852e-01 -2.5353130698204041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1136 5.0130348652601242e-02</internalNodes>\n          <leafValues>\n            5.7192109525203705e-02 -4.1628059744834900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1137 -1.8048109486699104e-02</internalNodes>\n          <leafValues>\n            -4.4572651386260986e-01 5.0399489700794220e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1138 1.4818160235881805e-01</internalNodes>\n          <leafValues>\n            1.6779610887169838e-02 -4.5810478925704956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1139 -2.6285950094461441e-02</internalNodes>\n          <leafValues>\n            3.5442620515823364e-01 -6.1184428632259369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1140 -1.8414109945297241e-02</internalNodes>\n          <leafValues>\n            -3.2132109999656677e-01 7.6148152351379395e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1141 6.1610070988535881e-03</internalNodes>\n          <leafValues>\n            8.7946079671382904e-02 -2.5913208723068237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1142 -2.5900160893797874e-02</internalNodes>\n          <leafValues>\n            3.0681431293487549e-01 -6.5600410103797913e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1143 1.5014899894595146e-02</internalNodes>\n          <leafValues>\n            -5.6076969951391220e-02 3.8661429286003113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1144 -4.3112158775329590e-02</internalNodes>\n          <leafValues>\n            5.5926108360290527e-01 -3.9232630282640457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1145 -2.1485170349478722e-02</internalNodes>\n          <leafValues>\n            -4.6384871006011963e-01 4.8264618963003159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1146 -2.5131789967417717e-02</internalNodes>\n          <leafValues>\n            -4.8091739416122437e-01 4.1346170008182526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1147 4.1451459401287138e-04</internalNodes>\n          <leafValues>\n            4.4691830873489380e-02 -4.2174011468887329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1148 1.0218570008873940e-02</internalNodes>\n          <leafValues>\n            5.3744480013847351e-02 -1.9395479559898376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1149 -2.0342700183391571e-02</internalNodes>\n          <leafValues>\n            2.9722499847412109e-01 -7.1297563612461090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1150 -3.0666049569845200e-02</internalNodes>\n          <leafValues>\n            -3.9920780062675476e-01 4.5510981231927872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1151 -3.2767441123723984e-02</internalNodes>\n          <leafValues>\n            -5.0248539447784424e-01 4.4888608157634735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1152 -5.4365001618862152e-02</internalNodes>\n          <leafValues>\n            -4.7751170396804810e-01 4.1882470250129700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1153 -2.9916359111666679e-02</internalNodes>\n          <leafValues>\n            3.5793611407279968e-01 -6.1831939965486526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1154 1.0144179686903954e-02</internalNodes>\n          <leafValues>\n            -1.5790919959545135e-01 5.7373359799385071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1155 1.5639010071754456e-01</internalNodes>\n          <leafValues>\n            3.2949700951576233e-02 -6.4462232589721680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1156 5.4447978734970093e-02</internalNodes>\n          <leafValues>\n            -4.1508059948682785e-02 1.2866689264774323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1157 -3.9772719144821167e-02</internalNodes>\n          <leafValues>\n            -6.8962317705154419e-01 2.9046570882201195e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1158 6.9650667719542980e-03</internalNodes>\n          <leafValues>\n            -9.4761677086353302e-02 1.8257130682468414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1159 -5.1617428660392761e-02</internalNodes>\n          <leafValues>\n            -4.4907289743423462e-01 4.3913140892982483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1160 -2.6814609766006470e-02</internalNodes>\n          <leafValues>\n            -2.2568839788436890e-01 5.4928071796894073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1161 1.3181920163333416e-02</internalNodes>\n          <leafValues>\n            8.0101907253265381e-02 -2.8673300147056580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1162 1.4241590164601803e-02</internalNodes>\n          <leafValues>\n            -8.4264412522315979e-02 2.1000739932060242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1163 3.1410539522767067e-03</internalNodes>\n          <leafValues>\n            1.3257560133934021e-01 -1.5610539913177490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1164 1.0995150357484818e-01</internalNodes>\n          <leafValues>\n            1.2388270348310471e-02 -4.0302368998527527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1165 1.7845850437879562e-02</internalNodes>\n          <leafValues>\n            5.2870228886604309e-02 -3.7930241227149963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1166 1.0851990431547165e-02</internalNodes>\n          <leafValues>\n            -5.4071258753538132e-02 3.5186240077018738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1167 -2.5958200916647911e-02</internalNodes>\n          <leafValues>\n            4.1978350281715393e-01 -4.0477428585290909e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1168 4.0990379638969898e-03</internalNodes>\n          <leafValues>\n            5.0911288708448410e-02 -3.5974949598312378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1169 1.4909840188920498e-02</internalNodes>\n          <leafValues>\n            -6.1437230557203293e-02 2.8947550058364868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1170 4.0265037678182125e-03</internalNodes>\n          <leafValues>\n            1.0686399787664413e-01 -1.2979680299758911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1171 3.9495688676834106e-01</internalNodes>\n          <leafValues>\n            -2.8920559212565422e-02 6.3535267114639282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1172 1.2874379754066467e-02</internalNodes>\n          <leafValues>\n            -1.1910410225391388e-01 1.2068430334329605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1173 -4.8598181456327438e-02</internalNodes>\n          <leafValues>\n            4.6885690093040466e-01 -4.2797289788722992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1174 1.5357979573309422e-03</internalNodes>\n          <leafValues>\n            -3.0882269144058228e-01 6.3154831528663635e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1175 3.5379750188440084e-03</internalNodes>\n          <leafValues>\n            1.0132449865341187e-01 -1.7726400494575500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1176 -1.9441220909357071e-02</internalNodes>\n          <leafValues>\n            2.3254390060901642e-01 -5.3732268512248993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1177 2.5940369814634323e-03</internalNodes>\n          <leafValues>\n            -3.5682299733161926e-01 5.0598859786987305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1178 5.9910379350185394e-02</internalNodes>\n          <leafValues>\n            -2.4030869826674461e-02 1.7003220319747925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1179 -1.1181759648025036e-02</internalNodes>\n          <leafValues>\n            3.4869500994682312e-01 -6.2812417745590210e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1180 4.9201812362298369e-04</internalNodes>\n          <leafValues>\n            -1.2642909586429596e-01 3.6503899842500687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1181 6.7902177572250366e-02</internalNodes>\n          <leafValues>\n            -4.2887088656425476e-01 4.6336911618709564e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1182 1.5728829428553581e-02</internalNodes>\n          <leafValues>\n            -6.3028946518898010e-02 1.6275769472122192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1183 -1.4824390411376953e-02</internalNodes>\n          <leafValues>\n            -5.3391677141189575e-01 3.2132621854543686e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1184 -1.9706260412931442e-02</internalNodes>\n          <leafValues>\n            2.5455629825592041e-01 -3.0816650018095970e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1185 9.6607124432921410e-03</internalNodes>\n          <leafValues>\n            9.2674352228641510e-02 -1.7940239608287811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1186 -4.9929421395063400e-02</internalNodes>\n          <leafValues>\n            2.6743340492248535e-01 -2.5595119222998619e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1187 7.3459640145301819e-02</internalNodes>\n          <leafValues>\n            -5.8698959648609161e-02 2.8898829221725464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1188 -8.6538150208070874e-04</internalNodes>\n          <leafValues>\n            -1.4318460226058960e-01 6.5386183559894562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1189 -1.0462219826877117e-02</internalNodes>\n          <leafValues>\n            -3.2498508691787720e-01 5.4955318570137024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1190 -6.3478751108050346e-03</internalNodes>\n          <leafValues>\n            -1.0396370291709900e-01 4.0321409702301025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1191 1.1406400054693222e-01</internalNodes>\n          <leafValues>\n            2.6192039251327515e-02 -6.6177910566329956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1192 -2.6893770322203636e-02</internalNodes>\n          <leafValues>\n            -3.5338699817657471e-01 1.9753590226173401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1193 8.0600962042808533e-02</internalNodes>\n          <leafValues>\n            2.8878480195999146e-02 -5.4975187778472900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1194 -7.4676960706710815e-02</internalNodes>\n          <leafValues>\n            -3.4416058659553528e-01 2.6990719139575958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1195 -7.7004089951515198e-02</internalNodes>\n          <leafValues>\n            4.0045699477195740e-01 -4.5340269804000854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1196 -8.6920477449893951e-02</internalNodes>\n          <leafValues>\n            -3.4687021374702454e-01 3.9195980876684189e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1197 -4.3200692161917686e-03</internalNodes>\n          <leafValues>\n            7.5932569801807404e-02 -2.3720650374889374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1198 -3.4127760678529739e-02</internalNodes>\n          <leafValues>\n            -4.1994720697402954e-01 4.3633870780467987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1199 2.1845370531082153e-02</internalNodes>\n          <leafValues>\n            -5.8681700378656387e-02 3.2972678542137146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1200 1.0037229955196381e-01</internalNodes>\n          <leafValues>\n            4.2507208883762360e-02 -4.3366080522537231e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>157</maxWeakCount>\n      <stageThreshold>-1.5512030124664307e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1201 -2.8922120109200478e-03</internalNodes>\n          <leafValues>\n            1.4381329715251923e-01 -4.0896520018577576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1202 -3.2057950738817453e-03</internalNodes>\n          <leafValues>\n            -3.3472418785095215e-01 1.2834690511226654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1203 -1.4795559764024802e-05</internalNodes>\n          <leafValues>\n            1.0139170289039612e-01 -4.4680911302566528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1204 3.7529919063672423e-04</internalNodes>\n          <leafValues>\n            -2.8604930639266968e-01 1.5357840061187744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1205 4.9170467536896467e-04</internalNodes>\n          <leafValues>\n            -2.8404960036277771e-01 1.3163900375366211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1206 1.6417380422353745e-02</internalNodes>\n          <leafValues>\n            7.9901106655597687e-02 -2.8092819452285767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1207 1.0119860060513020e-02</internalNodes>\n          <leafValues>\n            1.0026869922876358e-01 -4.0932568907737732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1208 -6.5251751802861691e-03</internalNodes>\n          <leafValues>\n            -3.3101710677146912e-01 9.6044629812240601e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1209 6.1215078458189964e-03</internalNodes>\n          <leafValues>\n            -3.5483101010322571e-01 8.4309920668601990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1210 2.5817379355430603e-03</internalNodes>\n          <leafValues>\n            8.3384357392787933e-02 -2.8031709790229797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1211 -1.3406439684331417e-03</internalNodes>\n          <leafValues>\n            1.5083800256252289e-01 -1.4946520328521729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1212 3.3681320492178202e-03</internalNodes>\n          <leafValues>\n            4.2112700641155243e-02 -2.2309710085391998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1213 2.8937528841197491e-03</internalNodes>\n          <leafValues>\n            8.2953810691833496e-02 -2.9152309894561768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1214 3.3696501050144434e-03</internalNodes>\n          <leafValues>\n            4.8548549413681030e-02 -1.9542780518531799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1215 -7.1538880467414856e-02</internalNodes>\n          <leafValues>\n            5.2008682489395142e-01 -4.2644441127777100e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1216 7.6072360388934612e-03</internalNodes>\n          <leafValues>\n            -8.5208661854267120e-02 1.1523310095071793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1217 1.9313229713588953e-03</internalNodes>\n          <leafValues>\n            8.9357398450374603e-02 -2.3614349961280823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1218 9.0475968318060040e-04</internalNodes>\n          <leafValues>\n            -7.7408589422702789e-02 1.6829580068588257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1219 1.1103670112788677e-02</internalNodes>\n          <leafValues>\n            -9.5963977277278900e-02 2.0391720533370972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1220 -3.1021970789879560e-03</internalNodes>\n          <leafValues>\n            -3.8605719804763794e-01 4.6329721808433533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1221 1.1446890421211720e-03</internalNodes>\n          <leafValues>\n            -2.8306689858436584e-01 5.8978211134672165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1222 7.7077788300812244e-03</internalNodes>\n          <leafValues>\n            1.0474249720573425e-01 -1.7146070301532745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1223 4.9893710762262344e-02</internalNodes>\n          <leafValues>\n            -6.4692601561546326e-02 3.0140951275825500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1224 -1.4937819913029671e-02</internalNodes>\n          <leafValues>\n            -2.7854371070861816e-01 7.0895470678806305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1225 -2.5303829461336136e-03</internalNodes>\n          <leafValues>\n            1.2108519673347473e-01 -1.4635290205478668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1226 2.8611259534955025e-02</internalNodes>\n          <leafValues>\n            -5.0357531756162643e-02 4.0651878714561462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1227 3.6244060844182968e-02</internalNodes>\n          <leafValues>\n            4.4577218592166901e-02 -5.6234288215637207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1228 -3.0544339679181576e-03</internalNodes>\n          <leafValues>\n            1.1526989936828613e-01 -2.7371090650558472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1229 -1.3101019430905581e-03</internalNodes>\n          <leafValues>\n            -2.6798000931739807e-01 5.9726651757955551e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1230 1.0702989529818296e-03</internalNodes>\n          <leafValues>\n            -1.5439410507678986e-01 1.1206989735364914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1231 -2.3467160761356354e-02</internalNodes>\n          <leafValues>\n            -6.2424921989440918e-01 2.6010479778051376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1232 -2.2787749767303467e-02</internalNodes>\n          <leafValues>\n            1.7903989553451538e-01 -6.8230852484703064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1233 7.5017688795924187e-03</internalNodes>\n          <leafValues>\n            5.2637178450822830e-02 -3.3333471417427063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1234 1.3881090097129345e-02</internalNodes>\n          <leafValues>\n            6.5118886530399323e-02 -2.4152719974517822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1235 -8.7769115343689919e-03</internalNodes>\n          <leafValues>\n            1.9925190508365631e-01 -8.8063232600688934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1236 2.6523560285568237e-02</internalNodes>\n          <leafValues>\n            4.6574778854846954e-02 -3.6550509929656982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1237 7.2263809852302074e-03</internalNodes>\n          <leafValues>\n            -1.0806850343942642e-01 1.5131799876689911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1238 2.3426050320267677e-03</internalNodes>\n          <leafValues>\n            -1.5072929859161377e-01 9.9945023655891418e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1239 -2.8811080483137630e-05</internalNodes>\n          <leafValues>\n            6.1413038522005081e-02 -2.4344439804553986e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1240 -1.3911900110542774e-02</internalNodes>\n          <leafValues>\n            -3.1010839343070984e-01 2.4895850569009781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1241 2.4768780916929245e-02</internalNodes>\n          <leafValues>\n            2.3218030110001564e-02 -6.5071028470993042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1242 -6.0916407965123653e-03</internalNodes>\n          <leafValues>\n            5.9768490493297577e-02 -2.5360348820686340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1243 -9.7264908254146576e-03</internalNodes>\n          <leafValues>\n            -2.5584441423416138e-01 5.5554620921611786e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1244 9.7499042749404907e-02</internalNodes>\n          <leafValues>\n            5.3867488168179989e-03 -7.3567670583724976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1245 3.0411418993026018e-03</internalNodes>\n          <leafValues>\n            -1.3759210705757141e-01 1.2143649905920029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1246 2.7967148926109076e-03</internalNodes>\n          <leafValues>\n            1.8048660457134247e-01 -8.4527000784873962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1247 1.0707279667258263e-02</internalNodes>\n          <leafValues>\n            -4.3970860540866852e-02 3.1042009592056274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1248 1.7561139538884163e-03</internalNodes>\n          <leafValues>\n            5.1866840571165085e-02 -2.2768710553646088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1249 -3.0384738929569721e-03</internalNodes>\n          <leafValues>\n            7.1652042865753174e-01 -2.2465929388999939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1250 -9.4161480665206909e-02</internalNodes>\n          <leafValues>\n            -7.9338562488555908e-01 1.3117490336298943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1251 -2.3869009688496590e-02</internalNodes>\n          <leafValues>\n            4.9338179826736450e-01 -3.2169021666049957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1252 -3.9958588778972626e-02</internalNodes>\n          <leafValues>\n            -1.8914769589900970e-01 2.8500700369477272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1253 6.9391070865094662e-03</internalNodes>\n          <leafValues>\n            3.9777211844921112e-02 -3.9105901122093201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1254 -3.3596780151128769e-02</internalNodes>\n          <leafValues>\n            -5.6830072402954102e-01 2.1618509665131569e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1255 -1.4079840481281281e-01</internalNodes>\n          <leafValues>\n            -7.9014372825622559e-01 1.4884609729051590e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1256 -5.7346289977431297e-03</internalNodes>\n          <leafValues>\n            -1.5512639284133911e-01 4.2879570275545120e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1257 -5.2841830998659134e-02</internalNodes>\n          <leafValues>\n            3.0823838710784912e-01 -5.0709690898656845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1258 1.5207099728286266e-02</internalNodes>\n          <leafValues>\n            -2.5789769366383553e-02 3.3292320370674133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1259 -5.8392022037878633e-04</internalNodes>\n          <leafValues>\n            8.8900387287139893e-02 -1.6297949850559235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1260 -3.3715530298650265e-03</internalNodes>\n          <leafValues>\n            -1.7890229821205139e-01 7.5376607477664948e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1261 -1.2047060299664736e-03</internalNodes>\n          <leafValues>\n            1.0491970181465149e-01 -1.2970739603042603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1262 5.5276479572057724e-02</internalNodes>\n          <leafValues>\n            -4.3197508901357651e-02 3.7212029099464417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1263 3.9330609142780304e-02</internalNodes>\n          <leafValues>\n            3.0416399240493774e-02 -4.9076101183891296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1264 -9.7229599487036467e-04</internalNodes>\n          <leafValues>\n            -2.1895459294319153e-01 3.9032708853483200e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1265 -5.6048069149255753e-02</internalNodes>\n          <leafValues>\n            4.1632568836212158e-01 -3.3747311681509018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1266 7.1376740932464600e-02</internalNodes>\n          <leafValues>\n            1.2129209935665131e-02 -6.4814078807830811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1267 1.4940260443836451e-03</internalNodes>\n          <leafValues>\n            -2.1393610537052155e-01 8.4887221455574036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1268 -3.2299170270562172e-03</internalNodes>\n          <leafValues>\n            9.0792432427406311e-02 -9.5816053450107574e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1269 4.2182870209217072e-02</internalNodes>\n          <leafValues>\n            -6.6914401948451996e-02 2.5217619538307190e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1270 -6.5001910552382469e-03</internalNodes>\n          <leafValues>\n            -1.2149559706449509e-01 3.7367988377809525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1271 1.9457129761576653e-02</internalNodes>\n          <leafValues>\n            5.0163779407739639e-02 -2.8700378537178040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1272 3.7291388958692551e-02</internalNodes>\n          <leafValues>\n            2.9608439654111862e-02 -5.7222497463226318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1273 -2.5571519508957863e-02</internalNodes>\n          <leafValues>\n            4.3941849470138550e-01 -3.6532308906316757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1274 -7.9122912138700485e-03</internalNodes>\n          <leafValues>\n            -2.9618510603904724e-01 3.5483270883560181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1275 3.0267490074038506e-03</internalNodes>\n          <leafValues>\n            -1.2113779783248901e-01 1.1271420121192932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1276 -2.1035820245742798e-02</internalNodes>\n          <leafValues>\n            2.9206061363220215e-01 -3.1001489609479904e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1277 -1.2911420315504074e-02</internalNodes>\n          <leafValues>\n            -5.4194331169128418e-01 2.6756240054965019e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1278 5.5096071213483810e-02</internalNodes>\n          <leafValues>\n            8.4169982001185417e-03 -6.2873458862304688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1279 -6.3893562182784081e-03</internalNodes>\n          <leafValues>\n            -2.0784839987754822e-01 6.0436788946390152e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1280 1.0858760215342045e-02</internalNodes>\n          <leafValues>\n            -7.8497253358364105e-02 1.2957990169525146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1281 -1.5859620645642281e-02</internalNodes>\n          <leafValues>\n            1.5772910416126251e-01 -1.0143510252237320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1282 1.5203879773616791e-01</internalNodes>\n          <leafValues>\n            2.1721320226788521e-02 -3.1713140010833740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1283 1.7942039296030998e-02</internalNodes>\n          <leafValues>\n            -8.4816932678222656e-02 1.7697300016880035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1284 8.8212518021464348e-03</internalNodes>\n          <leafValues>\n            5.1800601184368134e-02 -2.1443609893321991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1285 1.5715289860963821e-02</internalNodes>\n          <leafValues>\n            4.2525820434093475e-02 -3.2278341054916382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1286 -2.4744209367781878e-03</internalNodes>\n          <leafValues>\n            1.0828550159931183e-01 -1.2953069806098938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1287 1.2597530148923397e-02</internalNodes>\n          <leafValues>\n            -6.0251701623201370e-02 2.7512151002883911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1288 -1.0955630568787456e-03</internalNodes>\n          <leafValues>\n            -5.4244071245193481e-01 2.8166439384222031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1289 -1.4035019557923079e-03</internalNodes>\n          <leafValues>\n            -2.3625169694423676e-01 6.1887249350547791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1290 -7.7294543385505676e-02</internalNodes>\n          <leafValues>\n            -5.2141982316970825e-01 1.1844149790704250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1291 -7.5442157685756683e-02</internalNodes>\n          <leafValues>\n            -7.1588802337646484e-01 1.7151419073343277e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1292 -6.5148338675498962e-02</internalNodes>\n          <leafValues>\n            2.4099840223789215e-01 -5.0278738141059875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1293 -1.0481229983270168e-03</internalNodes>\n          <leafValues>\n            6.5461628139019012e-02 -1.9198420643806458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1294 2.0919230300933123e-03</internalNodes>\n          <leafValues>\n            4.8702161759138107e-02 -2.0062549412250519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1295 -4.2849369347095490e-02</internalNodes>\n          <leafValues>\n            -4.6154209971427917e-01 2.9137039557099342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1296 -4.5563629828393459e-03</internalNodes>\n          <leafValues>\n            1.3732179999351501e-01 -7.3871016502380371e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1297 6.7648440599441528e-03</internalNodes>\n          <leafValues>\n            -6.3866026699542999e-02 2.7578699588775635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1298 4.2252071201801300e-02</internalNodes>\n          <leafValues>\n            1.3583010062575340e-02 -6.2714421749114990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1299 -3.5438220947980881e-02</internalNodes>\n          <leafValues>\n            -5.2436131238937378e-01 2.1047530695796013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1300 -5.3693209774792194e-03</internalNodes>\n          <leafValues>\n            1.8366709351539612e-01 -6.6432453691959381e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1301 1.3521539513021708e-03</internalNodes>\n          <leafValues>\n            5.8834321796894073e-02 -2.2455100715160370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1302 -3.2204028218984604e-02</internalNodes>\n          <leafValues>\n            -4.8017048835754395e-01 9.2976661399006844e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1303 4.0550291305407882e-04</internalNodes>\n          <leafValues>\n            -8.5948407649993896e-02 2.0100370049476624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1304 -3.8419410120695829e-03</internalNodes>\n          <leafValues>\n            2.0595569908618927e-01 -6.6863708198070526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1305 -4.5518199913203716e-03</internalNodes>\n          <leafValues>\n            -2.2908920049667358e-01 5.8954399079084396e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1306 -4.9340371042490005e-02</internalNodes>\n          <leafValues>\n            -3.8995718955993652e-01 1.6714079305529594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1307 8.6456492543220520e-02</internalNodes>\n          <leafValues>\n            -3.2278828322887421e-02 3.6371639370918274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1308 5.1636258140206337e-03</internalNodes>\n          <leafValues>\n            -1.7399039864540100e-01 5.6017149239778519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1309 3.5364869982004166e-03</internalNodes>\n          <leafValues>\n            -7.9630948603153229e-02 1.6313460469245911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1310 -4.3170839548110962e-02</internalNodes>\n          <leafValues>\n            -3.7036859989166260e-01 1.9841130822896957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1311 6.1772209592163563e-03</internalNodes>\n          <leafValues>\n            5.9052169322967529e-02 -2.3701970279216766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1312 -2.2244770079851151e-02</internalNodes>\n          <leafValues>\n            2.5762718915939331e-01 -2.2968450561165810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1313 5.0163730978965759e-02</internalNodes>\n          <leafValues>\n            1.7468400299549103e-02 -6.8128740787506104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1314 -3.0043811420910060e-04</internalNodes>\n          <leafValues>\n            5.5781401693820953e-02 -1.2685780227184296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1315 1.9783550500869751e-01</internalNodes>\n          <leafValues>\n            1.2211419641971588e-02 -8.6064267158508301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1316 6.5362468361854553e-02</internalNodes>\n          <leafValues>\n            4.1287927888333797e-03 -6.2948238849639893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1317 -1.8684990704059601e-02</internalNodes>\n          <leafValues>\n            -2.4377359449863434e-01 4.3232489377260208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1318 -7.5593511573970318e-03</internalNodes>\n          <leafValues>\n            1.7254440486431122e-01 -1.6871780157089233e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1319 1.4699660241603851e-03</internalNodes>\n          <leafValues>\n            -1.5561489760875702e-01 6.9231852889060974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1320 1.1925940215587616e-01</internalNodes>\n          <leafValues>\n            -2.6341190561652184e-02 4.4847229123115540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1321 1.3763479888439178e-02</internalNodes>\n          <leafValues>\n            3.1852710992097855e-02 -3.8184550404548645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1322 1.2966440059244633e-02</internalNodes>\n          <leafValues>\n            -3.9391368627548218e-02 1.9092699885368347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1323 -1.1041419580578804e-02</internalNodes>\n          <leafValues>\n            -2.7309378981590271e-01 4.7777820378541946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1324 6.8364411592483521e-01</internalNodes>\n          <leafValues>\n            9.6240043640136719e-03 -9.7447502613067627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1325 -2.4255160242319107e-03</internalNodes>\n          <leafValues>\n            -2.5439569354057312e-01 4.0732551366090775e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1326 6.4529682276770473e-04</internalNodes>\n          <leafValues>\n            -1.3824179768562317e-01 7.4660047888755798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1327 -2.2386180236935616e-02</internalNodes>\n          <leafValues>\n            3.9404779672622681e-01 -4.2591951787471771e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1328 -6.4325161278247833e-02</internalNodes>\n          <leafValues>\n            -9.6853357553482056e-01 5.4289568215608597e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1329 4.0803711861371994e-02</internalNodes>\n          <leafValues>\n            1.4779980294406414e-02 -7.5445967912673950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1330 -2.4066439364105463e-03</internalNodes>\n          <leafValues>\n            7.6213918626308441e-02 -8.1325337290763855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1331 -4.9865059554576874e-02</internalNodes>\n          <leafValues>\n            -7.8447979688644409e-01 1.5130150131881237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1332 -8.9749991893768311e-02</internalNodes>\n          <leafValues>\n            -9.0076518058776855e-01 4.0898341685533524e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1333 2.1489290520548820e-03</internalNodes>\n          <leafValues>\n            -7.7873408794403076e-02 1.4538989961147308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1334 1.8653910374268889e-03</internalNodes>\n          <leafValues>\n            -5.1264639943838120e-02 1.4514209330081940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1335 5.4189950227737427e-02</internalNodes>\n          <leafValues>\n            1.6740569844841957e-02 -7.2964847087860107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1336 -3.7668810691684484e-03</internalNodes>\n          <leafValues>\n            1.5345999598503113e-01 -5.9867210686206818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1337 -1.5151940286159515e-01</internalNodes>\n          <leafValues>\n            -8.2612198591232300e-01 1.4488279819488525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1338 1.0246659629046917e-02</internalNodes>\n          <leafValues>\n            -6.3145689666271210e-02 1.8994790315628052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1339 1.0578270070254803e-02</internalNodes>\n          <leafValues>\n            5.9726748615503311e-02 -1.9162079691886902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1340 1.5032970346510410e-02</internalNodes>\n          <leafValues>\n            -7.3868520557880402e-02 1.5511709451675415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1341 -4.2136289179325104e-02</internalNodes>\n          <leafValues>\n            -6.8733322620391846e-01 1.6604630276560783e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1342 1.8628799589350820e-03</internalNodes>\n          <leafValues>\n            -1.5732850134372711e-01 7.5714908540248871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1343 2.4659639224410057e-02</internalNodes>\n          <leafValues>\n            9.7081139683723450e-02 -1.6045799851417542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1344 1.9145730137825012e-01</internalNodes>\n          <leafValues>\n            7.1056559681892395e-03 -7.5537341833114624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1345 -3.0167160555720329e-02</internalNodes>\n          <leafValues>\n            1.7002609372138977e-01 -8.6163826286792755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1346 9.2923697084188461e-03</internalNodes>\n          <leafValues>\n            4.3352611362934113e-02 -1.9533480703830719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1347 -1.9069829722866416e-03</internalNodes>\n          <leafValues>\n            8.2421518862247467e-02 -1.4644089341163635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1348 3.1027841032482684e-04</internalNodes>\n          <leafValues>\n            -1.1879319697618484e-01 9.4635762274265289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1349 4.4492271263152361e-04</internalNodes>\n          <leafValues>\n            -1.5645760297775269e-01 6.8512812256813049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1350 -1.2095469981431961e-02</internalNodes>\n          <leafValues>\n            -9.0144127607345581e-02 3.0050620436668396e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1351 -2.0358909387141466e-03</internalNodes>\n          <leafValues>\n            1.3586470484733582e-01 -7.2631262242794037e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1352 -9.3594277277588844e-03</internalNodes>\n          <leafValues>\n            1.1376120150089264e-01 -3.9632719010114670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1353 4.2418478988111019e-03</internalNodes>\n          <leafValues>\n            -8.1519439816474915e-02 1.5766209363937378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1354 -5.9963759034872055e-02</internalNodes>\n          <leafValues>\n            -2.3273150622844696e-01 2.0836880430579185e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1355 4.6651167795062065e-03</internalNodes>\n          <leafValues>\n            1.3135330379009247e-01 -1.2394910305738449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1356 6.2358117429539561e-04</internalNodes>\n          <leafValues>\n            -1.2920179963111877e-01 6.5220557153224945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1357 2.0561330020427704e-03</internalNodes>\n          <leafValues>\n            -6.2910877168178558e-02 1.6288000345230103e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>127</maxWeakCount>\n      <stageThreshold>-1.7598799467086792e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1358 1.1216440051794052e-01</internalNodes>\n          <leafValues>\n            -2.9065090417861938e-01 3.1510210037231445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1359 2.7850609272718430e-02</internalNodes>\n          <leafValues>\n            -3.9972350001335144e-01 1.7894990742206573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1360 4.0804240852594376e-02</internalNodes>\n          <leafValues>\n            -2.4171060323715210e-01 2.2376739978790283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1361 1.3134710025042295e-03</internalNodes>\n          <leafValues>\n            -4.2230761051177979e-01 6.9066837430000305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1362 3.9736120961606503e-03</internalNodes>\n          <leafValues>\n            -5.5243992805480957e-01 1.0362079739570618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1363 -9.7877913503907621e-05</internalNodes>\n          <leafValues>\n            7.0300459861755371e-02 -4.1970318555831909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1364 6.2921550124883652e-03</internalNodes>\n          <leafValues>\n            -3.0629968643188477e-01 1.3072040677070618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1365 -8.7216142565011978e-03</internalNodes>\n          <leafValues>\n            -4.1267630457878113e-01 7.2738148272037506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1366 -5.8611109852790833e-02</internalNodes>\n          <leafValues>\n            1.9491520524024963e-01 -1.9737449288368225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1367 -4.6104468405246735e-02</internalNodes>\n          <leafValues>\n            -2.6274758577346802e-01 2.4362189695239067e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1368 -5.2685278933495283e-04</internalNodes>\n          <leafValues>\n            7.9876311123371124e-02 -4.4358581304550171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1369 -2.5521939620375633e-02</internalNodes>\n          <leafValues>\n            -4.4183689355850220e-01 1.0705660097301006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1370 -6.8350387737154961e-03</internalNodes>\n          <leafValues>\n            -3.9501190185546875e-01 7.8441992402076721e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1371 6.1055209487676620e-02</internalNodes>\n          <leafValues>\n            3.5330320242792368e-03 -6.0677450895309448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1372 4.7110877931118011e-03</internalNodes>\n          <leafValues>\n            -1.9310380518436432e-01 1.5259410440921783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1373 3.7552498281002045e-02</internalNodes>\n          <leafValues>\n            6.9572687149047852e-02 -4.1588190197944641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1374 4.0887430310249329e-02</internalNodes>\n          <leafValues>\n            -1.3596929609775543e-01 2.4894300103187561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1375 2.6306639483664185e-05</internalNodes>\n          <leafValues>\n            -2.5603210926055908e-01 1.1001589894294739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1376 9.4716809689998627e-03</internalNodes>\n          <leafValues>\n            -2.2197020053863525e-01 1.3640490174293518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1377 3.4596489276736975e-03</internalNodes>\n          <leafValues>\n            1.5568970143795013e-01 -1.8454350531101227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1378 -8.1670414656400681e-03</internalNodes>\n          <leafValues>\n            -3.7346610426902771e-01 8.2206420600414276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1379 4.7045178711414337e-02</internalNodes>\n          <leafValues>\n            1.2655580416321754e-02 -6.9167500734329224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1380 -1.9954189192503691e-03</internalNodes>\n          <leafValues>\n            -4.2871651053428650e-01 6.0119848698377609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1381 -3.2797679305076599e-02</internalNodes>\n          <leafValues>\n            -5.8513718843460083e-01 3.9739210158586502e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1382 4.3516121804714203e-02</internalNodes>\n          <leafValues>\n            3.6311239004135132e-02 -5.8556967973709106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1383 -1.3213600032031536e-02</internalNodes>\n          <leafValues>\n            2.1160380542278290e-01 -8.9618362486362457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1384 -3.8574080914258957e-02</internalNodes>\n          <leafValues>\n            -5.9375947713851929e-01 3.7297870963811874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1385 -1.5351839363574982e-01</internalNodes>\n          <leafValues>\n            4.4116440415382385e-01 -5.9058368206024170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1386 -1.4133240096271038e-02</internalNodes>\n          <leafValues>\n            -3.4045210480690002e-01 6.6277496516704559e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1387 1.4061010442674160e-02</internalNodes>\n          <leafValues>\n            1.1312460154294968e-01 -1.9001239538192749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1388 3.5457469522953033e-02</internalNodes>\n          <leafValues>\n            3.7297818809747696e-02 -5.3568178415298462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1389 -1.2931039556860924e-02</internalNodes>\n          <leafValues>\n            -2.8593328595161438e-01 5.8341801166534424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1390 -1.1986999772489071e-02</internalNodes>\n          <leafValues>\n            -4.0216270089149475e-01 4.7841191291809082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1391 -1.3723289594054222e-02</internalNodes>\n          <leafValues>\n            2.0238439738750458e-01 -8.9290492236614227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1392 1.5990810468792915e-02</internalNodes>\n          <leafValues>\n            -6.1742551624774933e-02 3.9387008547782898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1393 -1.4505759812891483e-02</internalNodes>\n          <leafValues>\n            -3.5829049348831177e-01 4.3789908289909363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1394 3.1443528831005096e-02</internalNodes>\n          <leafValues>\n            -6.7374527454376221e-02 2.8779721260070801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1395 3.4287340939044952e-02</internalNodes>\n          <leafValues>\n            5.6390259414911270e-02 -3.3407160639762878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1396 8.8674569269642234e-05</internalNodes>\n          <leafValues>\n            -2.8655600547790527e-01 7.0318557322025299e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1397 1.8266469240188599e-02</internalNodes>\n          <leafValues>\n            -5.2221570163965225e-02 1.7026390135288239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1398 6.1769630759954453e-02</internalNodes>\n          <leafValues>\n            -6.8800583481788635e-02 2.7483311295509338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1399 -2.3383310064673424e-02</internalNodes>\n          <leafValues>\n            -2.7845630049705505e-01 2.4131359532475471e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1400 -1.1182860285043716e-01</internalNodes>\n          <leafValues>\n            4.5687168836593628e-01 -4.3217949569225311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1401 -6.4386896789073944e-02</internalNodes>\n          <leafValues>\n            -3.4228751063346863e-01 6.4063712954521179e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1402 2.1763430535793304e-01</internalNodes>\n          <leafValues>\n            -6.0564499348402023e-02 3.6352708935737610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1403 -4.9456087872385979e-03</internalNodes>\n          <leafValues>\n            -1.6526390612125397e-01 4.6035580337047577e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1404 -1.2704910477623343e-03</internalNodes>\n          <leafValues>\n            -2.5035798549652100e-01 8.2336440682411194e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1405 2.6536729186773300e-02</internalNodes>\n          <leafValues>\n            -1.3919049501419067e-01 1.9524000585079193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1406 -2.0027440041303635e-02</internalNodes>\n          <leafValues>\n            -3.7472829222679138e-01 5.3981021046638489e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1407 -6.1987549066543579e-02</internalNodes>\n          <leafValues>\n            -1.4436429738998413e-01 1.5863290056586266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1408 2.3037059232592583e-02</internalNodes>\n          <leafValues>\n            3.8429230451583862e-02 -4.8479309678077698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1409 5.7958271354436874e-02</internalNodes>\n          <leafValues>\n            2.0750140771269798e-02 -7.6776617765426636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1410 5.4419268853962421e-03</internalNodes>\n          <leafValues>\n            7.2074413299560547e-02 -2.4254220724105835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1411 7.2400430217385292e-03</internalNodes>\n          <leafValues>\n            -8.2432948052883148e-02 1.8463499844074249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1412 1.4847779646515846e-02</internalNodes>\n          <leafValues>\n            5.6245408952236176e-02 -3.6297059059143066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1413 1.2084879912436008e-02</internalNodes>\n          <leafValues>\n            -6.3536256551742554e-02 2.8614228963851929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1414 8.0831356346607208e-02</internalNodes>\n          <leafValues>\n            4.7143958508968353e-02 -4.9968090653419495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1415 1.9218639936298132e-03</internalNodes>\n          <leafValues>\n            -4.0469148755073547e-01 2.2093040868639946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1416 -1.4179679565131664e-02</internalNodes>\n          <leafValues>\n            -1.8520280718803406e-01 8.6823917925357819e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1417 -2.9600440029753372e-05</internalNodes>\n          <leafValues>\n            7.4054829776287079e-02 -1.9331359863281250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1418 1.7121590208262205e-03</internalNodes>\n          <leafValues>\n            -4.9954649806022644e-01 3.8273740559816360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1419 -1.3207949697971344e-01</internalNodes>\n          <leafValues>\n            5.2964788675308228e-01 -1.0363499633967876e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1420 3.6922071129083633e-02</internalNodes>\n          <leafValues>\n            1.9587470218539238e-02 -8.8954067230224609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1421 -7.3079409048659727e-06</internalNodes>\n          <leafValues>\n            6.4993053674697876e-02 -1.7331290245056152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1422 -3.5222709178924561e-02</internalNodes>\n          <leafValues>\n            -3.6849930882453918e-01 5.0565738230943680e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1423 -5.5531110614538193e-02</internalNodes>\n          <leafValues>\n            3.1555691361427307e-01 -4.5015729963779449e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1424 1.8762869760394096e-02</internalNodes>\n          <leafValues>\n            -1.9359070062637329e-01 7.9093530774116516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1425 2.4971760809421539e-02</internalNodes>\n          <leafValues>\n            -8.1862196326255798e-02 2.1014890074729919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1426 -2.0817129407078028e-03</internalNodes>\n          <leafValues>\n            -1.7723660171031952e-01 9.1757282614707947e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1427 -1.1499860137701035e-01</internalNodes>\n          <leafValues>\n            5.0862562656402588e-01 -1.8267450854182243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1428 3.2068958878517151e-01</internalNodes>\n          <leafValues>\n            2.1651009097695351e-02 -7.6685470342636108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1429 -8.1451296806335449e-02</internalNodes>\n          <leafValues>\n            -4.6331760287284851e-01 2.9383579269051552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1430 -1.5007940120995045e-02</internalNodes>\n          <leafValues>\n            -3.9308649301528931e-01 3.6867558956146240e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1431 2.3795820772647858e-02</internalNodes>\n          <leafValues>\n            -3.2482311129570007e-02 1.6764250397682190e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1432 -8.8508807122707367e-02</internalNodes>\n          <leafValues>\n            7.2103458642959595e-01 -2.1140210330486298e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1433 4.5011121779680252e-02</internalNodes>\n          <leafValues>\n            -2.5326130911707878e-02 2.8062760829925537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1434 1.9286990165710449e-02</internalNodes>\n          <leafValues>\n            6.5771162509918213e-02 -2.5697788596153259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1435 2.2137619554996490e-02</internalNodes>\n          <leafValues>\n            3.9154991507530212e-02 -1.9145630300045013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1436 2.9847979545593262e-02</internalNodes>\n          <leafValues>\n            -1.2521019577980042e-01 1.4867870509624481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1437 -6.8392023444175720e-02</internalNodes>\n          <leafValues>\n            2.6023870706558228e-01 -4.7525301575660706e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1438 6.8003371357917786e-02</internalNodes>\n          <leafValues>\n            -4.5898560434579849e-02 4.0107101202011108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1439 5.6098159402608871e-02</internalNodes>\n          <leafValues>\n            2.3277789354324341e-02 -8.4457129240036011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1440 -1.3024089857935905e-02</internalNodes>\n          <leafValues>\n            -3.8348990678787231e-01 3.8314189761877060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1441 1.2594680301845074e-02</internalNodes>\n          <leafValues>\n            -6.7616842687129974e-02 2.9852440953254700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1442 -4.9063879996538162e-02</internalNodes>\n          <leafValues>\n            -5.5862659215927124e-01 2.8511619195342064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1443 -1.5734169632196426e-02</internalNodes>\n          <leafValues>\n            2.5611931085586548e-01 -5.9407141059637070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1444 1.4674849808216095e-02</internalNodes>\n          <leafValues>\n            -6.3001021742820740e-02 2.7854999899864197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1445 2.5068029761314392e-02</internalNodes>\n          <leafValues>\n            -7.8861348330974579e-02 1.0577370226383209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1446 7.4170758016407490e-03</internalNodes>\n          <leafValues>\n            -3.5775899887084961e-01 4.8707701265811920e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1447 -7.7149281278252602e-03</internalNodes>\n          <leafValues>\n            -1.8049560487270355e-01 9.7531601786613464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1448 4.9982070922851562e-02</internalNodes>\n          <leafValues>\n            2.1009320393204689e-02 -7.6537537574768066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1449 -1.6759630292654037e-02</internalNodes>\n          <leafValues>\n            -5.9045380353927612e-01 2.6948049664497375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1450 3.7632828950881958e-01</internalNodes>\n          <leafValues>\n            2.1989850327372551e-02 -6.1461311578750610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1451 5.2720829844474792e-02</internalNodes>\n          <leafValues>\n            -3.9074160158634186e-02 2.6600670814514160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1452 2.6270199567079544e-02</internalNodes>\n          <leafValues>\n            -9.3863986432552338e-02 2.2280269861221313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1453 -2.5664661079645157e-03</internalNodes>\n          <leafValues>\n            -1.8621809780597687e-01 9.8519712686538696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1454 5.3800269961357117e-03</internalNodes>\n          <leafValues>\n            1.2816059589385986e-01 -1.3671700656414032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1455 2.5200050324201584e-02</internalNodes>\n          <leafValues>\n            3.0875589698553085e-02 -2.9681420326232910e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1456 2.5444060564041138e-02</internalNodes>\n          <leafValues>\n            4.3978411704301834e-02 -4.0505328774452209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1457 -2.4715809151530266e-02</internalNodes>\n          <leafValues>\n            -5.8492290973663330e-01 2.3179760202765465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1458 -1.6159649938344955e-02</internalNodes>\n          <leafValues>\n            -3.1950500607490540e-01 4.4603530317544937e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1459 6.5401610918343067e-03</internalNodes>\n          <leafValues>\n            -5.8575991541147232e-02 7.4016787111759186e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1460 -4.3940648436546326e-02</internalNodes>\n          <leafValues>\n            -7.7211838960647583e-01 1.9352979958057404e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1461 -4.5612620306201279e-04</internalNodes>\n          <leafValues>\n            3.0397420749068260e-02 -2.6982998847961426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1462 2.8633379843086004e-03</internalNodes>\n          <leafValues>\n            -1.6874340176582336e-01 8.8886268436908722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1463 -5.9488460421562195e-02</internalNodes>\n          <leafValues>\n            -3.4058949351310730e-01 2.4625880643725395e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1464 3.0714470893144608e-02</internalNodes>\n          <leafValues>\n            3.1796399503946304e-02 -4.1572770476341248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1465 -2.2330379113554955e-02</internalNodes>\n          <leafValues>\n            1.2896050512790680e-01 -2.4232570081949234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1466 2.3971609771251678e-02</internalNodes>\n          <leafValues>\n            -7.6858058571815491e-02 2.0360720157623291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1467 -6.0696780681610107e-02</internalNodes>\n          <leafValues>\n            -7.2060132026672363e-01 1.1617880314588547e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1468 -6.8362243473529816e-02</internalNodes>\n          <leafValues>\n            3.5825181007385254e-01 -4.4807899743318558e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1469 1.3451039791107178e-01</internalNodes>\n          <leafValues>\n            2.6008069515228271e-02 -2.5077620148658752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1470 1.3341170549392700e-01</internalNodes>\n          <leafValues>\n            4.7138180583715439e-02 -3.9661580324172974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1471 2.0524330437183380e-02</internalNodes>\n          <leafValues>\n            4.3894171714782715e-02 -2.8501969575881958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1472 4.1543610394001007e-02</internalNodes>\n          <leafValues>\n            2.5452220812439919e-02 -5.9377658367156982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1473 -7.1573443710803986e-02</internalNodes>\n          <leafValues>\n            -7.8743761777877808e-01 1.3979320414364338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1474 6.6264629364013672e-02</internalNodes>\n          <leafValues>\n            2.2939130663871765e-02 -5.4304981231689453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1475 4.4609569013118744e-03</internalNodes>\n          <leafValues>\n            5.0688140094280243e-02 -2.0599000155925751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1476 1.4859540387988091e-02</internalNodes>\n          <leafValues>\n            -7.3408462107181549e-02 1.9902250170707703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1477 -3.9625339210033417e-02</internalNodes>\n          <leafValues>\n            -5.3522932529449463e-01 9.3211038038134575e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1478 -9.6143726259469986e-03</internalNodes>\n          <leafValues>\n            2.7664861083030701e-01 -6.3087522983551025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1479 5.4589830338954926e-02</internalNodes>\n          <leafValues>\n            2.4962859228253365e-02 -5.8171188831329346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1480 1.3770899735391140e-02</internalNodes>\n          <leafValues>\n            -2.2891749441623688e-01 6.9963671267032623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1481 8.6862340569496155e-02</internalNodes>\n          <leafValues>\n            2.4058010429143906e-02 -5.8642482757568359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1482 -2.2433010861277580e-02</internalNodes>\n          <leafValues>\n            -9.2169362306594849e-01 1.3281799852848053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1483 -7.3779597878456116e-02</internalNodes>\n          <leafValues>\n            3.8463789224624634e-01 -8.5962712764739990e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1484 2.9300490859895945e-04</internalNodes>\n          <leafValues>\n            -1.7170579731464386e-01 8.8520109653472900e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>178</maxWeakCount>\n      <stageThreshold>-1.5360039472579956e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1485 5.3288340568542480e-03</internalNodes>\n          <leafValues>\n            -2.6616770029067993e-01 1.7760449647903442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1486 -4.0987450629472733e-03</internalNodes>\n          <leafValues>\n            1.2358420342206955e-01 -3.0805110931396484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1487 -5.5853058584034443e-03</internalNodes>\n          <leafValues>\n            -5.0533992052078247e-01 6.2050119042396545e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1488 -5.1797390915453434e-04</internalNodes>\n          <leafValues>\n            6.9178067147731781e-02 -3.4831359982490540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1489 5.3605018183588982e-03</internalNodes>\n          <leafValues>\n            6.5158672630786896e-02 -4.6262231469154358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1490 3.0114270746707916e-02</internalNodes>\n          <leafValues>\n            -6.4132362604141235e-02 7.1070060133934021e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1491 8.9014291763305664e-02</internalNodes>\n          <leafValues>\n            4.2987130582332611e-02 -6.0177898406982422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1492 1.5248140553012490e-03</internalNodes>\n          <leafValues>\n            -3.3071789145469666e-01 7.1408301591873169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1493 1.8556410213932395e-03</internalNodes>\n          <leafValues>\n            -3.4727120399475098e-01 7.0630677044391632e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1494 -1.6151620075106621e-02</internalNodes>\n          <leafValues>\n            -2.5611770153045654e-01 7.1255698800086975e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1495 -3.1278008827939630e-04</internalNodes>\n          <leafValues>\n            7.3420330882072449e-02 -2.9594621062278748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1496 -6.0263078921707347e-05</internalNodes>\n          <leafValues>\n            6.6566191613674164e-02 -2.1802450716495514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1497 7.6520902803167701e-04</internalNodes>\n          <leafValues>\n            7.5537197291851044e-02 -3.7677881121635437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1498 -6.9589070975780487e-02</internalNodes>\n          <leafValues>\n            3.9810648560523987e-01 -2.5841819122433662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1499 -9.8529577255249023e-02</internalNodes>\n          <leafValues>\n            6.7321968078613281e-01 -3.3925469964742661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1500 4.9950059503316879e-02</internalNodes>\n          <leafValues>\n            6.1660569161176682e-02 -3.7851110100746155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1501 3.9009240572340786e-04</internalNodes>\n          <leafValues>\n            -9.6428610384464264e-02 2.1700200438499451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1502 -7.1598717477172613e-04</internalNodes>\n          <leafValues>\n            -1.8358109891414642e-01 1.0587400197982788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1503 3.8064830005168915e-03</internalNodes>\n          <leafValues>\n            -1.7527610063552856e-01 1.1430399864912033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1504 6.5288757905364037e-03</internalNodes>\n          <leafValues>\n            6.7994527518749237e-02 -3.0726119875907898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1505 2.2182099055498838e-03</internalNodes>\n          <leafValues>\n            -2.7935230731964111e-01 5.8790720999240875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1506 1.7800349451135844e-04</internalNodes>\n          <leafValues>\n            9.9489107728004456e-02 -2.6616880297660828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1507 -3.2656680792570114e-02</internalNodes>\n          <leafValues>\n            5.8734762668609619e-01 -2.6545880362391472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1508 2.6773350313305855e-02</internalNodes>\n          <leafValues>\n            3.6414410918951035e-02 -3.7188830971717834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1509 1.2780309654772282e-02</internalNodes>\n          <leafValues>\n            -8.4540523588657379e-02 1.7853260040283203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1510 5.5374070070683956e-03</internalNodes>\n          <leafValues>\n            -1.0892049968242645e-01 1.4403919875621796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1511 -7.1258977986872196e-03</internalNodes>\n          <leafValues>\n            1.9850020110607147e-01 -8.3359397947788239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1512 8.0109452828764915e-03</internalNodes>\n          <leafValues>\n            4.8844348639249802e-02 -2.8590029478073120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1513 -2.7231130748987198e-02</internalNodes>\n          <leafValues>\n            -6.8558162450790405e-01 2.1877769380807877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1514 -2.0928949117660522e-02</internalNodes>\n          <leafValues>\n            -2.0820230245590210e-01 2.6585230603814125e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1515 3.9801741950213909e-03</internalNodes>\n          <leafValues>\n            6.7004777491092682e-02 -2.3015810549259186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1516 2.1598068997263908e-03</internalNodes>\n          <leafValues>\n            -9.3109019100666046e-02 1.7235539853572845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1517 9.9411439150571823e-03</internalNodes>\n          <leafValues>\n            -4.4999819248914719e-02 3.1830498576164246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1518 -1.7938859760761261e-02</internalNodes>\n          <leafValues>\n            -2.1515959501266479e-01 7.2462916374206543e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1519 -1.5030350368760992e-05</internalNodes>\n          <leafValues>\n            9.1437973082065582e-02 -1.6706299781799316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1520 4.2446260340511799e-03</internalNodes>\n          <leafValues>\n            6.4810760319232941e-02 -1.0556270182132721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1521 7.4575991675374098e-06</internalNodes>\n          <leafValues>\n            -2.6309689879417419e-01 5.6588400155305862e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1522 -1.0457210242748260e-02</internalNodes>\n          <leafValues>\n            1.6078880429267883e-01 -7.2708033025264740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1523 -1.2225599493831396e-03</internalNodes>\n          <leafValues>\n            1.1558330059051514e-01 -1.2233489751815796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1524 1.6061630100011826e-02</internalNodes>\n          <leafValues>\n            2.8201790526509285e-02 -5.0996178388595581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1525 -1.6162030398845673e-02</internalNodes>\n          <leafValues>\n            -3.3857521414756775e-01 3.5924781113862991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1526 7.2181350551545620e-03</internalNodes>\n          <leafValues>\n            -7.2706200182437897e-02 1.0624659806489944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1527 -1.0416660457849503e-02</internalNodes>\n          <leafValues>\n            1.6205810010433197e-01 -9.4567760825157166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1528 1.3946600258350372e-02</internalNodes>\n          <leafValues>\n            5.4169639945030212e-02 -3.2068040966987610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1529 1.2734119780361652e-02</internalNodes>\n          <leafValues>\n            -8.6066111922264099e-02 1.9648639857769012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1530 -2.7858370915055275e-02</internalNodes>\n          <leafValues>\n            -2.8409239649772644e-01 2.6706550270318985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1531 -9.8931521177291870e-02</internalNodes>\n          <leafValues>\n            5.8457607030868530e-01 -2.1955510601401329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1532 2.3434299509972334e-03</internalNodes>\n          <leafValues>\n            9.6475467085838318e-02 -1.2095340341329575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1533 -2.3025700356811285e-03</internalNodes>\n          <leafValues>\n            7.3297969996929169e-02 -2.2309069335460663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1534 3.0791079625487328e-02</internalNodes>\n          <leafValues>\n            1.1463879607617855e-02 -2.4034079909324646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1535 -8.4339501336216927e-03</internalNodes>\n          <leafValues>\n            2.9611539840698242e-01 -4.2663689702749252e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1536 -3.4617669880390167e-03</internalNodes>\n          <leafValues>\n            -2.1257869899272919e-01 4.2709458619356155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1537 -3.3371929079294205e-02</internalNodes>\n          <leafValues>\n            3.5299271345138550e-01 -3.5570569336414337e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1538 -3.7238128483295441e-02</internalNodes>\n          <leafValues>\n            -5.9177130460739136e-01 2.6775840669870377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1539 -2.0860069990158081e-01</internalNodes>\n          <leafValues>\n            -5.7595241069793701e-01 1.9763559103012085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1540 -6.8279817700386047e-02</internalNodes>\n          <leafValues>\n            3.4582608938217163e-01 -3.7861179560422897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1541 1.1600320227444172e-02</internalNodes>\n          <leafValues>\n            5.7685580104589462e-02 -2.6008209586143494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1542 -6.7218959331512451e-02</internalNodes>\n          <leafValues>\n            -4.5048278570175171e-01 1.2495189905166626e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1543 -5.1632397808134556e-03</internalNodes>\n          <leafValues>\n            1.6146700084209442e-01 -7.6975770294666290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1544 4.0113311260938644e-02</internalNodes>\n          <leafValues>\n            1.3131230138242245e-02 -4.5731449127197266e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1545 3.7837740033864975e-02</internalNodes>\n          <leafValues>\n            2.3001920431852341e-02 -5.3636288642883301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1546 2.6023429818451405e-03</internalNodes>\n          <leafValues>\n            -6.1007440090179443e-02 1.7084220051765442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1547 -7.1841642260551453e-02</internalNodes>\n          <leafValues>\n            -5.8330380916595459e-01 2.0075250416994095e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1548 -8.2885712618008256e-04</internalNodes>\n          <leafValues>\n            5.3465340286493301e-02 -1.9092260301113129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1549 -8.1979477545246482e-04</internalNodes>\n          <leafValues>\n            -2.3775930702686310e-01 4.5844908803701401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1550 1.0474859736859798e-02</internalNodes>\n          <leafValues>\n            -4.0103420615196228e-02 2.4948400259017944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1551 -6.3726361840963364e-03</internalNodes>\n          <leafValues>\n            -1.7087849974632263e-01 7.2894603013992310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1552 -3.6113489419221878e-02</internalNodes>\n          <leafValues>\n            -3.6879929900169373e-01 1.8331730738282204e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1553 5.4730800911784172e-04</internalNodes>\n          <leafValues>\n            7.2073057293891907e-02 -1.8893779814243317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1554 1.7547659575939178e-02</internalNodes>\n          <leafValues>\n            -9.4452597200870514e-02 1.3311000168323517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1555 6.3078789971768856e-03</internalNodes>\n          <leafValues>\n            7.6223470270633698e-02 -1.6668230295181274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1556 2.5120719801634550e-03</internalNodes>\n          <leafValues>\n            5.0375527143478394e-01 -2.2624349221587181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1557 4.5274170115590096e-03</internalNodes>\n          <leafValues>\n            -1.3446590304374695e-01 9.9167577922344208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1558 -1.4772829308640212e-04</internalNodes>\n          <leafValues>\n            3.9675179868936539e-02 -6.0015488415956497e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1559 1.4728739857673645e-02</internalNodes>\n          <leafValues>\n            3.9208918809890747e-02 -3.0560019612312317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1560 -5.6161261163651943e-03</internalNodes>\n          <leafValues>\n            -1.0845050215721130e-01 4.7754660248756409e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1561 -9.8265614360570908e-03</internalNodes>\n          <leafValues>\n            1.6729339957237244e-01 -7.6756693422794342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1562 1.7972329631447792e-02</internalNodes>\n          <leafValues>\n            -5.9147968888282776e-02 1.2773279845714569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1563 1.1233139783143997e-02</internalNodes>\n          <leafValues>\n            -9.2626020312309265e-02 1.5735739469528198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1564 1.3678249670192599e-03</internalNodes>\n          <leafValues>\n            -5.6156760454177856e-01 2.1800750866532326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1565 -4.1535100899636745e-03</internalNodes>\n          <leafValues>\n            -2.6951169967651367e-01 4.1213478893041611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1566 -6.7194692790508270e-02</internalNodes>\n          <leafValues>\n            5.6008362770080566e-01 -2.0973740145564079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1567 -8.0572411417961121e-02</internalNodes>\n          <leafValues>\n            -7.5846642255783081e-01 1.6614310443401337e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1568 -9.7504993900656700e-03</internalNodes>\n          <leafValues>\n            2.2781279683113098e-01 -4.0246330201625824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1569 5.6034037843346596e-03</internalNodes>\n          <leafValues>\n            -7.5519852340221405e-02 1.6372010111808777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1570 -1.0232060216367245e-02</internalNodes>\n          <leafValues>\n            -3.5803198814392090e-01 4.6331088989973068e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1571 2.8616760391741991e-03</internalNodes>\n          <leafValues>\n            6.7746236920356750e-02 -1.6429120302200317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1572 7.7214869670569897e-03</internalNodes>\n          <leafValues>\n            3.4494820982217789e-02 -1.7762580513954163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1573 -7.0147789083421230e-03</internalNodes>\n          <leafValues>\n            1.7282240092754364e-01 -6.5176323056221008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1574 5.0470869988203049e-02</internalNodes>\n          <leafValues>\n            -2.7071960270404816e-02 3.5509440302848816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1575 -5.7124681770801544e-03</internalNodes>\n          <leafValues>\n            -1.5901079773902893e-01 7.9559110105037689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1576 8.7470682337880135e-03</internalNodes>\n          <leafValues>\n            3.7789858877658844e-02 -1.9156649708747864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1577 2.0058929920196533e-02</internalNodes>\n          <leafValues>\n            2.7415299788117409e-02 -3.8070109486579895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1578 -1.8094859551638365e-03</internalNodes>\n          <leafValues>\n            1.0538379848003387e-01 -1.4996549487113953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1579 -7.3339277878403664e-03</internalNodes>\n          <leafValues>\n            2.9203268885612488e-01 -6.1218190938234329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1580 4.4179419055581093e-03</internalNodes>\n          <leafValues>\n            1.8868620693683624e-01 -5.8132741600275040e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1581 -1.3543309643864632e-02</internalNodes>\n          <leafValues>\n            -4.9409559369087219e-01 2.2855930030345917e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1582 3.6197271198034286e-02</internalNodes>\n          <leafValues>\n            -2.6089120656251907e-02 3.0890250205993652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1583 -1.1831840127706528e-01</internalNodes>\n          <leafValues>\n            -5.9094661474227905e-01 1.8215280026197433e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1584 7.5656071305274963e-02</internalNodes>\n          <leafValues>\n            -3.5965580493211746e-02 3.0386120080947876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1585 -1.3134519569575787e-02</internalNodes>\n          <leafValues>\n            -2.6306131482124329e-01 4.2262919247150421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1586 1.8981160596013069e-02</internalNodes>\n          <leafValues>\n            -2.6483630761504173e-02 1.9371989369392395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1587 -4.6003229916095734e-02</internalNodes>\n          <leafValues>\n            4.0513500571250916e-01 -2.4454200640320778e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1588 -1.3232730329036713e-02</internalNodes>\n          <leafValues>\n            -2.9721269011497498e-01 4.7959219664335251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1589 1.9586850702762604e-01</internalNodes>\n          <leafValues>\n            1.0540399700403214e-02 -8.6647927761077881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1590 9.6459556370973587e-03</internalNodes>\n          <leafValues>\n            -7.1334943175315857e-02 1.1469510197639465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1591 -3.9044579025357962e-03</internalNodes>\n          <leafValues>\n            1.0740319639444351e-01 -9.8514996469020844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1592 1.6896370798349380e-02</internalNodes>\n          <leafValues>\n            -7.6805070042610168e-02 1.9533200562000275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1593 -5.5025662295520306e-03</internalNodes>\n          <leafValues>\n            5.0643190741539001e-02 -2.0898430049419403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1594 -1.9621569663286209e-02</internalNodes>\n          <leafValues>\n            -2.9651358723640442e-01 3.2955050468444824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1595 7.7158107887953520e-04</internalNodes>\n          <leafValues>\n            4.6017099171876907e-02 -1.9982999563217163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1596 -1.1102840304374695e-01</internalNodes>\n          <leafValues>\n            5.7578712701797485e-01 -1.7741529271006584e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1597 1.4945500297471881e-03</internalNodes>\n          <leafValues>\n            4.7335729002952576e-02 -2.0898909866809845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1598 5.0667919218540192e-02</internalNodes>\n          <leafValues>\n            -1.8657619133591652e-02 3.4070459008216858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1599 1.6073169186711311e-02</internalNodes>\n          <leafValues>\n            -3.6449488252401352e-02 2.6568078994750977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1600 -2.6536740362644196e-02</internalNodes>\n          <leafValues>\n            -3.6141690611839294e-01 2.9734270647168159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1601 -5.2550169639289379e-03</internalNodes>\n          <leafValues>\n            -1.3104499876499176e-01 8.2153528928756714e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1602 -1.6678560525178909e-02</internalNodes>\n          <leafValues>\n            3.1324890255928040e-01 -4.5052528381347656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1603 3.4808400087058544e-03</internalNodes>\n          <leafValues>\n            8.2945778965950012e-02 -1.5753500163555145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1604 -8.0889053642749786e-02</internalNodes>\n          <leafValues>\n            -6.4314198493957520e-01 7.1740332059562206e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1605 -5.4260632023215294e-03</internalNodes>\n          <leafValues>\n            1.3533130288124084e-01 -1.0547909885644913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1606 1.6630839556455612e-02</internalNodes>\n          <leafValues>\n            4.1602101176977158e-02 -2.6668208837509155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1607 1.7991060158237815e-03</internalNodes>\n          <leafValues>\n            5.9531088918447495e-02 -1.8355309963226318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1608 2.7219969779253006e-02</internalNodes>\n          <leafValues>\n            -2.6586830615997314e-02 2.2722280025482178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1609 -9.6450755372643471e-03</internalNodes>\n          <leafValues>\n            -2.1428169310092926e-01 4.9515731632709503e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1610 8.3123803138732910e-02</internalNodes>\n          <leafValues>\n            -4.2176891118288040e-02 3.0793419480323792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1611 1.4406450092792511e-02</internalNodes>\n          <leafValues>\n            -2.9500020667910576e-02 3.2144379615783691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1612 4.7938730567693710e-03</internalNodes>\n          <leafValues>\n            5.1244091242551804e-02 -1.0931850224733353e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1613 -2.8978011105209589e-03</internalNodes>\n          <leafValues>\n            -1.4344370365142822e-01 6.6597223281860352e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1614 -4.5887690037488937e-02</internalNodes>\n          <leafValues>\n            1.8003830313682556e-01 -1.5642790123820305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1615 -5.4717700928449631e-02</internalNodes>\n          <leafValues>\n            -3.5110801458358765e-01 3.0438890680670738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1616 -1.9787369295954704e-02</internalNodes>\n          <leafValues>\n            9.3385331332683563e-02 -4.9382571130990982e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1617 2.5110379792749882e-03</internalNodes>\n          <leafValues>\n            -6.6672600805759430e-02 1.4406199753284454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1618 5.3660150617361069e-02</internalNodes>\n          <leafValues>\n            1.4468840323388577e-02 -6.7007470130920410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1619 -8.1825470551848412e-03</internalNodes>\n          <leafValues>\n            1.1510120332241058e-01 -8.0932617187500000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1620 -3.5225939936935902e-03</internalNodes>\n          <leafValues>\n            -1.4181140065193176e-01 6.1330620199441910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1621 2.8271550312638283e-02</internalNodes>\n          <leafValues>\n            -2.8353890404105186e-02 3.7045130133628845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1622 -6.4923018217086792e-02</internalNodes>\n          <leafValues>\n            -4.6481159329414368e-01 2.2807259112596512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1623 -3.5065850615501404e-01</internalNodes>\n          <leafValues>\n            -8.2529050111770630e-01 1.1031460016965866e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1624 5.1821782253682613e-03</internalNodes>\n          <leafValues>\n            3.6583270877599716e-02 -2.4567179381847382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1625 9.2609220882877707e-04</internalNodes>\n          <leafValues>\n            -6.1898738145828247e-02 1.9307570159435272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1626 2.5952830910682678e-03</internalNodes>\n          <leafValues>\n            4.3015718460083008e-02 -1.9770270586013794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1627 3.4880579914897680e-03</internalNodes>\n          <leafValues>\n            -6.8296536803245544e-02 1.5725280344486237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1628 2.4002529680728912e-03</internalNodes>\n          <leafValues>\n            -6.8618178367614746e-02 6.8551987409591675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1629 1.2020230060443282e-03</internalNodes>\n          <leafValues>\n            -1.2073139846324921e-01 9.5026522874832153e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1630 -2.0470360293984413e-02</internalNodes>\n          <leafValues>\n            -1.2891639769077301e-01 7.9386599361896515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1631 -5.9516180306673050e-02</internalNodes>\n          <leafValues>\n            2.4869689345359802e-01 -4.9729160964488983e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1632 -1.0568950325250626e-02</internalNodes>\n          <leafValues>\n            -1.8583840131759644e-01 2.0700320601463318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1633 -1.4192920178174973e-02</internalNodes>\n          <leafValues>\n            -3.8137429952621460e-01 2.9879279434680939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1634 -2.4968578945845366e-03</internalNodes>\n          <leafValues>\n            9.1516681015491486e-02 -5.0178311765193939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1635 1.7714010027702898e-04</internalNodes>\n          <leafValues>\n            -1.1470019817352295e-01 9.9245697259902954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1636 7.8318670392036438e-02</internalNodes>\n          <leafValues>\n            3.6057420074939728e-03 -9.9996072053909302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1637 1.5502399764955044e-03</internalNodes>\n          <leafValues>\n            -1.2888610363006592e-01 7.9822011291980743e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1638 -6.6678877919912338e-03</internalNodes>\n          <leafValues>\n            -8.8244557380676270e-02 2.8102599084377289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1639 -4.0497239679098129e-03</internalNodes>\n          <leafValues>\n            -1.4427180588245392e-01 8.7126396596431732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1640 -3.5481531172990799e-02</internalNodes>\n          <leafValues>\n            -4.4681170582771301e-01 1.4808270148932934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1641 -1.2597720138728619e-02</internalNodes>\n          <leafValues>\n            8.9324191212654114e-02 -1.2518140673637390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1642 7.4662449769675732e-03</internalNodes>\n          <leafValues>\n            7.4888199567794800e-02 -1.3587780296802521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1643 -6.7536987364292145e-02</internalNodes>\n          <leafValues>\n            2.3416820168495178e-01 -4.0952268987894058e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1644 8.2704171538352966e-02</internalNodes>\n          <leafValues>\n            7.6422439888119698e-03 -8.5177552700042725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1645 -7.1595138870179653e-03</internalNodes>\n          <leafValues>\n            -1.8738010525703430e-01 5.5288419127464294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1646 -1.0481069795787334e-02</internalNodes>\n          <leafValues>\n            1.8271109461784363e-01 -5.9641968458890915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1647 4.5238467864692211e-03</internalNodes>\n          <leafValues>\n            -8.3817601203918457e-02 1.4822180569171906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1648 -2.6731120306067169e-04</internalNodes>\n          <leafValues>\n            -2.0896770060062408e-01 4.5835729688405991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1649 3.3838581293821335e-02</internalNodes>\n          <leafValues>\n            4.2582869529724121e-02 -2.1883819997310638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1650 2.2287720348685980e-03</internalNodes>\n          <leafValues>\n            -1.3284230232238770e-01 8.1795319914817810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1651 -5.4200361482799053e-03</internalNodes>\n          <leafValues>\n            -1.3896510004997253e-01 7.1154713630676270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1652 -4.9642968922853470e-02</internalNodes>\n          <leafValues>\n            4.8901641368865967e-01 -1.1556959711015224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1653 3.3323399256914854e-03</internalNodes>\n          <leafValues>\n            5.1426161080598831e-02 -1.8269440531730652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1654 2.4343939498066902e-02</internalNodes>\n          <leafValues>\n            -3.1839560717344284e-02 1.2758859992027283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1655 -2.3774489760398865e-02</internalNodes>\n          <leafValues>\n            3.2773551344871521e-01 -2.7216760441660881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1656 3.6809889134019613e-03</internalNodes>\n          <leafValues>\n            5.2922040224075317e-02 -1.2880720198154449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1657 -3.2609070185571909e-03</internalNodes>\n          <leafValues>\n            -1.4948120713233948e-01 6.5733537077903748e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1658 1.0793889872729778e-02</internalNodes>\n          <leafValues>\n            -3.2969951629638672e-02 3.2955420017242432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1659 5.4287910461425781e-04</internalNodes>\n          <leafValues>\n            -1.0678680241107941e-01 9.8564229905605316e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1660 1.1902759782969952e-02</internalNodes>\n          <leafValues>\n            3.5682920366525650e-02 -3.1317448616027832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1661 2.4277849588543177e-03</internalNodes>\n          <leafValues>\n            -6.2080658972263336e-02 1.7598509788513184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1662 -4.4930889271199703e-03</internalNodes>\n          <leafValues>\n            1.1790850013494492e-01 -1.0593199729919434e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>143</maxWeakCount>\n      <stageThreshold>-1.7262409925460815e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1663 -2.0656470209360123e-02</internalNodes>\n          <leafValues>\n            2.5365149974822998e-01 -3.1044611334800720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1664 -3.6518350243568420e-02</internalNodes>\n          <leafValues>\n            2.4484130740165710e-01 -2.3221190273761749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1665 4.9312350153923035e-01</internalNodes>\n          <leafValues>\n            -1.6275240480899811e-01 2.8116190433502197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1666 2.0970099285477772e-05</internalNodes>\n          <leafValues>\n            -3.0840009450912476e-01 1.7317549884319305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1667 1.3082929886877537e-02</internalNodes>\n          <leafValues>\n            -2.5983220338821411e-01 1.5675869584083557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1668 -4.3061940232291818e-04</internalNodes>\n          <leafValues>\n            7.8543603420257568e-02 -3.9016070961952209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1669 -1.6367400065064430e-02</internalNodes>\n          <leafValues>\n            -4.3000039458274841e-01 7.4141636490821838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1670 3.6269389092922211e-02</internalNodes>\n          <leafValues>\n            -1.7073200643062592e-01 1.8045969307422638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1671 1.2340269982814789e-02</internalNodes>\n          <leafValues>\n            8.8775381445884705e-02 -3.4402659535408020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1672 -7.3516286909580231e-02</internalNodes>\n          <leafValues>\n            -4.1623479127883911e-01 -2.9528199229389429e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1673 4.6191830188035965e-04</internalNodes>\n          <leafValues>\n            6.5629899501800537e-02 -4.1018250584602356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1674 -1.4744039624929428e-02</internalNodes>\n          <leafValues>\n            2.2775030136108398e-01 -7.9184867441654205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1675 4.2559150606393814e-03</internalNodes>\n          <leafValues>\n            -2.4004960060119629e-01 1.1321090161800385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1676 -3.6180280148983002e-03</internalNodes>\n          <leafValues>\n            -2.7612069249153137e-01 1.0118050128221512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1677 4.6012919396162033e-02</internalNodes>\n          <leafValues>\n            4.5763589441776276e-02 -5.4713648557662964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1678 -1.6181809827685356e-02</internalNodes>\n          <leafValues>\n            1.9489669799804688e-01 -7.3955342173576355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1679 -2.3682719984208234e-05</internalNodes>\n          <leafValues>\n            1.1729680001735687e-01 -1.9396829605102539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1680 -2.1599140018224716e-03</internalNodes>\n          <leafValues>\n            -4.5654550194740295e-01 4.2699530720710754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1681 -7.9827345907688141e-03</internalNodes>\n          <leafValues>\n            -5.4107201099395752e-01 4.0036130696535110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1682 -8.1530469469726086e-04</internalNodes>\n          <leafValues>\n            -2.0640519261360168e-01 6.6795073449611664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1683 -4.7501060180366039e-03</internalNodes>\n          <leafValues>\n            -3.6572128534317017e-01 7.5665749609470367e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1684 -3.4870140254497528e-02</internalNodes>\n          <leafValues>\n            -8.0093812942504883e-01 2.2356539964675903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1685 -1.9949559122323990e-02</internalNodes>\n          <leafValues>\n            -3.9110630750656128e-01 4.6844650059938431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1686 -5.9008211828768253e-03</internalNodes>\n          <leafValues>\n            9.0756498277187347e-02 -1.7600280046463013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1687 -1.4019970549270511e-03</internalNodes>\n          <leafValues>\n            -2.9260930418968201e-01 6.4894109964370728e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1688 -2.2886939346790314e-02</internalNodes>\n          <leafValues>\n            -4.8391869664192200e-01 5.0514958798885345e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1689 -1.0039290413260460e-02</internalNodes>\n          <leafValues>\n            2.6921668648719788e-01 -7.5274370610713959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1690 1.6729189082980156e-02</internalNodes>\n          <leafValues>\n            -7.3217533528804779e-02 2.2045159339904785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1691 -2.0423909649252892e-02</internalNodes>\n          <leafValues>\n            -4.5161980390548706e-01 4.5858111232519150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1692 -3.5104680806398392e-02</internalNodes>\n          <leafValues>\n            -5.5169981718063354e-01 2.3118300363421440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1693 1.0697999969124794e-02</internalNodes>\n          <leafValues>\n            3.3516589552164078e-02 -5.2482652664184570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1694 -3.8978241384029388e-02</internalNodes>\n          <leafValues>\n            -6.2331187725067139e-01 2.6838419958949089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1695 4.8226700164377689e-03</internalNodes>\n          <leafValues>\n            -1.1215549707412720e-01 1.5613789856433868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1696 3.6878231167793274e-01</internalNodes>\n          <leafValues>\n            1.9857980310916901e-02 -6.1260747909545898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1697 -7.7059920877218246e-03</internalNodes>\n          <leafValues>\n            -3.7371110916137695e-01 4.3724238872528076e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1698 -6.6843323409557343e-02</internalNodes>\n          <leafValues>\n            -5.0772088766098022e-01 2.4401089176535606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1699 3.7273049354553223e-02</internalNodes>\n          <leafValues>\n            3.6522880196571350e-02 -4.3735611438751221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1700 -3.3105209469795227e-02</internalNodes>\n          <leafValues>\n            -3.4438988566398621e-01 3.2440148293972015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1701 5.3402669727802277e-03</internalNodes>\n          <leafValues>\n            9.2385761439800262e-02 -1.7823779582977295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1702 2.1542439237236977e-02</internalNodes>\n          <leafValues>\n            -1.9848670065402985e-01 5.1953200250864029e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1703 3.3289310336112976e-01</internalNodes>\n          <leafValues>\n            -6.0750268399715424e-02 2.8925099968910217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1704 -6.6301261540502310e-04</internalNodes>\n          <leafValues>\n            3.3636718988418579e-02 -2.8510418534278870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1705 4.6686761081218719e-02</internalNodes>\n          <leafValues>\n            -4.9883669614791870e-01 3.3776078373193741e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1706 -2.2452229168266058e-03</internalNodes>\n          <leafValues>\n            -1.9685390591621399e-01 9.5161177217960358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1707 -1.1499020271003246e-02</internalNodes>\n          <leafValues>\n            -3.2423889636993408e-01 5.2468359470367432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1708 1.3134529814124107e-02</internalNodes>\n          <leafValues>\n            -6.7538492381572723e-02 2.7605938911437988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1709 -1.5978980809450150e-02</internalNodes>\n          <leafValues>\n            3.1496050953865051e-01 -7.6657392084598541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1710 2.4199750274419785e-02</internalNodes>\n          <leafValues>\n            5.5836521089076996e-02 -3.6609899997711182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1711 4.0229028090834618e-03</internalNodes>\n          <leafValues>\n            -1.3053479790687561e-01 1.3470110297203064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1712 -1.4172590337693691e-02</internalNodes>\n          <leafValues>\n            -8.8616542518138885e-02 5.5053278803825378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1713 1.8967399373650551e-02</internalNodes>\n          <leafValues>\n            5.1348548382520676e-02 -3.1439921259880066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1714 2.6502970606088638e-02</internalNodes>\n          <leafValues>\n            -1.1065970361232758e-01 8.8080927729606628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1715 -3.9654489606618881e-02</internalNodes>\n          <leafValues>\n            -5.0742971897125244e-01 3.2999441027641296e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1716 -8.9988503605127335e-03</internalNodes>\n          <leafValues>\n            1.2830139696598053e-01 -7.3064133524894714e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1717 7.4613288044929504e-02</internalNodes>\n          <leafValues>\n            3.1729809939861298e-02 -5.3899657726287842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1718 3.3414870500564575e-02</internalNodes>\n          <leafValues>\n            -6.1130590736865997e-02 2.4669900536537170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1719 9.6071150619536638e-04</internalNodes>\n          <leafValues>\n            1.2528179585933685e-01 -1.4304199814796448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1720 -8.6224973201751709e-03</internalNodes>\n          <leafValues>\n            -2.2081799805164337e-01 4.7569438815116882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1721 3.9893008768558502e-02</internalNodes>\n          <leafValues>\n            -5.1774360239505768e-02 3.1735679507255554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1722 8.5388116538524628e-02</internalNodes>\n          <leafValues>\n            -3.5584390163421631e-02 4.1974198818206787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1723 6.3205747865140438e-03</internalNodes>\n          <leafValues>\n            6.9412536919116974e-02 -2.9979988932609558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1724 -5.8932311832904816e-02</internalNodes>\n          <leafValues>\n            -4.6194219589233398e-01 2.2290540859103203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1725 -1.0054419748485088e-02</internalNodes>\n          <leafValues>\n            2.3649129271507263e-01 -6.6811926662921906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1726 -2.5194720365107059e-05</internalNodes>\n          <leafValues>\n            7.8815452754497528e-02 -1.1585489660501480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1727 -5.9346649795770645e-02</internalNodes>\n          <leafValues>\n            -5.8799749612808228e-01 3.0486419796943665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1728 2.0421659573912621e-02</internalNodes>\n          <leafValues>\n            3.9184041321277618e-02 -2.6986798644065857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1729 -4.0381640195846558e-02</internalNodes>\n          <leafValues>\n            -6.1601102352142334e-01 2.5353100150823593e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1730 1.7877650260925293e-01</internalNodes>\n          <leafValues>\n            -5.7135760784149170e-02 1.7361579835414886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1731 -2.2120740264654160e-02</internalNodes>\n          <leafValues>\n            -3.7697589397430420e-01 4.2690049856901169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1732 1.1585020273923874e-01</internalNodes>\n          <leafValues>\n            9.8102567717432976e-03 -6.1380887031555176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1733 9.7944810986518860e-02</internalNodes>\n          <leafValues>\n            3.6329559981822968e-02 -4.5240780711174011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1734 -2.9123030602931976e-02</internalNodes>\n          <leafValues>\n            -6.5607357025146484e-01 8.4500880911946297e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1735 -1.3053599745035172e-02</internalNodes>\n          <leafValues>\n            -3.4685650467872620e-01 4.6511679887771606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1736 1.3451489619910717e-02</internalNodes>\n          <leafValues>\n            3.4420430660247803e-02 -1.0168869793415070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1737 -2.3957140743732452e-02</internalNodes>\n          <leafValues>\n            -8.4189480543136597e-01 1.9317319616675377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1738 -1.3450190424919128e-01</internalNodes>\n          <leafValues>\n            3.9132338762283325e-01 -2.1901259198784828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1739 -1.0342430323362350e-01</internalNodes>\n          <leafValues>\n            6.0790222883224487e-01 -2.5869879871606827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1740 -4.1464429348707199e-02</internalNodes>\n          <leafValues>\n            -3.9631319046020508e-01 3.7771981209516525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1741 -3.4945748746395111e-02</internalNodes>\n          <leafValues>\n            -4.5746931433677673e-01 3.2913569360971451e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1742 1.4289909973740578e-02</internalNodes>\n          <leafValues>\n            -5.0757531076669693e-02 3.1772908568382263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1743 -5.4311589337885380e-03</internalNodes>\n          <leafValues>\n            2.4708689749240875e-01 -7.8526623547077179e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1744 2.6972589548677206e-03</internalNodes>\n          <leafValues>\n            -3.4061861038208008e-01 5.0948519259691238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1745 -4.3831961229443550e-03</internalNodes>\n          <leafValues>\n            8.0095797777175903e-02 -2.0902189612388611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1746 -1.5958329662680626e-02</internalNodes>\n          <leafValues>\n            -2.4625590443611145e-01 5.8348231017589569e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1747 4.5252371579408646e-02</internalNodes>\n          <leafValues>\n            4.1630141437053680e-02 -3.5550931096076965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1748 -1.8278149887919426e-02</internalNodes>\n          <leafValues>\n            3.0804929137229919e-01 -4.7184839844703674e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1749 2.5277629494667053e-02</internalNodes>\n          <leafValues>\n            2.9698649421334267e-02 -5.3776097297668457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1750 7.2078350931406021e-03</internalNodes>\n          <leafValues>\n            -1.2820510566234589e-01 1.1753190308809280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1751 -1.4014700055122375e-01</internalNodes>\n          <leafValues>\n            -4.5020869374275208e-01 3.2753791660070419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1752 -4.5832369476556778e-02</internalNodes>\n          <leafValues>\n            -4.2000839114189148e-01 2.4114929139614105e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1753 -4.3976899236440659e-02</internalNodes>\n          <leafValues>\n            -4.5973241329193115e-01 3.3604741096496582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1754 -1.0124820284545422e-02</internalNodes>\n          <leafValues>\n            1.6260810196399689e-01 -6.6449157893657684e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1755 -1.3071260182186961e-03</internalNodes>\n          <leafValues>\n            1.1608310043811798e-01 -1.3168659806251526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1756 4.5284889638423920e-02</internalNodes>\n          <leafValues>\n            3.5751760005950928e-02 -4.4795739650726318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1757 -2.0851079374551773e-02</internalNodes>\n          <leafValues>\n            2.4665319919586182e-01 -6.5854541957378387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1758 2.6742550544440746e-03</internalNodes>\n          <leafValues>\n            5.1683109253644943e-02 -1.3699389994144440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1759 1.3148089637979865e-03</internalNodes>\n          <leafValues>\n            7.7798873186111450e-02 -2.1064509451389313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1760 -1.8174739554524422e-02</internalNodes>\n          <leafValues>\n            1.7355039715766907e-01 -7.2417192161083221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1761 1.4314319938421249e-02</internalNodes>\n          <leafValues>\n            8.1756986677646637e-02 -1.7111450433731079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1762 -1.6486430540680885e-02</internalNodes>\n          <leafValues>\n            2.2809509932994843e-01 -6.5906368196010590e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1763 3.0756060034036636e-02</internalNodes>\n          <leafValues>\n            3.8717139512300491e-02 -4.0505141019821167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1764 2.6106089353561401e-02</internalNodes>\n          <leafValues>\n            3.0850199982523918e-02 -2.7759250998497009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1765 8.0401107668876648e-02</internalNodes>\n          <leafValues>\n            2.9792500659823418e-02 -4.4742569327354431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1766 -1.8350789323449135e-02</internalNodes>\n          <leafValues>\n            1.1515419930219650e-01 -2.8744319453835487e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1767 3.4827049821615219e-02</internalNodes>\n          <leafValues>\n            2.8738139197230339e-02 -4.8401808738708496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1768 -8.8250182569026947e-02</internalNodes>\n          <leafValues>\n            -4.2635539174079895e-01 3.0173489823937416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1769 1.4836989343166351e-01</internalNodes>\n          <leafValues>\n            2.2089749574661255e-02 -5.5364227294921875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1770 -1.8949609249830246e-02</internalNodes>\n          <leafValues>\n            -2.3020160198211670e-01 3.9267301559448242e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1771 -5.6775949895381927e-02</internalNodes>\n          <leafValues>\n            3.5013529658317566e-01 -4.0862828493118286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1772 6.2286540865898132e-02</internalNodes>\n          <leafValues>\n            2.2344540804624557e-02 -7.1082341670989990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1773 -3.8629550486803055e-02</internalNodes>\n          <leafValues>\n            -3.2933491468429565e-01 3.8508068770170212e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1774 2.8154330328106880e-02</internalNodes>\n          <leafValues>\n            -7.3690913617610931e-02 1.8824370205402374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1775 -1.0570179671049118e-02</internalNodes>\n          <leafValues>\n            -2.7806881070137024e-01 4.7679189592599869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1776 5.6604571640491486e-02</internalNodes>\n          <leafValues>\n            2.4767610430717468e-01 -5.6830938905477524e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1777 -2.8522670269012451e-01</internalNodes>\n          <leafValues>\n            5.2345401048660278e-01 -2.3652829229831696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1778 3.4807138144969940e-02</internalNodes>\n          <leafValues>\n            2.4819910526275635e-02 -4.3205270171165466e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1779 -2.3218799382448196e-02</internalNodes>\n          <leafValues>\n            2.9929161071777344e-01 -4.4712670147418976e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1780 -6.3094392418861389e-02</internalNodes>\n          <leafValues>\n            3.3279260993003845e-01 -1.6075499355792999e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1781 3.0182430148124695e-01</internalNodes>\n          <leafValues>\n            -7.5196906924247742e-02 1.9139809906482697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1782 2.3077869787812233e-02</internalNodes>\n          <leafValues>\n            3.6844979971647263e-02 -2.8761258721351624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1783 1.0964149981737137e-01</internalNodes>\n          <leafValues>\n            3.7548121064901352e-02 -4.1763558983802795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1784 2.9672039672732353e-02</internalNodes>\n          <leafValues>\n            -7.8409820795059204e-02 1.3064210116863251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1785 6.3356538303196430e-03</internalNodes>\n          <leafValues>\n            6.7014321684837341e-02 -2.0481500029563904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1786 -1.9940949976444244e-02</internalNodes>\n          <leafValues>\n            8.4663636982440948e-02 -4.2069409042596817e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1787 -4.7988001257181168e-02</internalNodes>\n          <leafValues>\n            -6.1099517345428467e-01 2.2842260077595711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1788 4.8280019313097000e-02</internalNodes>\n          <leafValues>\n            7.4727279134094715e-03 -7.5153297185897827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1789 -2.5825301418080926e-04</internalNodes>\n          <leafValues>\n            3.5517089068889618e-02 -3.2686069607734680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1790 -4.8175308853387833e-02</internalNodes>\n          <leafValues>\n            -5.8099460601806641e-01 1.9760759547352791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1791 -2.8606340289115906e-02</internalNodes>\n          <leafValues>\n            3.2096970081329346e-01 -4.0734320878982544e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1792 -4.3328531086444855e-02</internalNodes>\n          <leafValues>\n            -3.3021429181098938e-01 3.1527239829301834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1793 2.2753410041332245e-02</internalNodes>\n          <leafValues>\n            3.7327829748392105e-02 -3.6291739344596863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1794 1.8975350030814297e-05</internalNodes>\n          <leafValues>\n            -1.1503349989652634e-01 4.1816640645265579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1795 1.8077540397644043e-01</internalNodes>\n          <leafValues>\n            -5.5751871317625046e-02 2.2424830496311188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1796 -1.2539149820804596e-01</internalNodes>\n          <leafValues>\n            -8.8098400831222534e-01 3.8788339588791132e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1797 -8.0908974632620811e-03</internalNodes>\n          <leafValues>\n            2.6210701465606689e-01 -5.3706649690866470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1798 9.9102966487407684e-03</internalNodes>\n          <leafValues>\n            -1.2978099286556244e-01 8.3635807037353516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1799 2.4792920798063278e-02</internalNodes>\n          <leafValues>\n            -1.4584439992904663e-01 9.2305660247802734e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1800 4.5074880123138428e-02</internalNodes>\n          <leafValues>\n            -7.2375498712062836e-02 2.6057431101799011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1801 -7.9205513000488281e-02</internalNodes>\n          <leafValues>\n            -6.2073522806167603e-01 2.1323349326848984e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1802 -4.4725250452756882e-02</internalNodes>\n          <leafValues>\n            -6.4248198270797729e-01 9.5317112281918526e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1803 -3.4065779298543930e-02</internalNodes>\n          <leafValues>\n            3.0759710073471069e-01 -4.2296990752220154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1804 -2.9756739735603333e-02</internalNodes>\n          <leafValues>\n            2.5211650133132935e-01 -3.1183030456304550e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1805 -3.2026950269937515e-02</internalNodes>\n          <leafValues>\n            -5.5300801992416382e-01 2.8021570295095444e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>193</maxWeakCount>\n      <stageThreshold>-1.4976780414581299e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1806 2.8652619570493698e-02</internalNodes>\n          <leafValues>\n            -2.1822139620780945e-01 2.2675579786300659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1807 4.3320041149854660e-03</internalNodes>\n          <leafValues>\n            -2.8597879409790039e-01 1.0589209944009781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1808 5.6604119017720222e-03</internalNodes>\n          <leafValues>\n            8.8295452296733856e-02 -3.8920480012893677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1809 2.4440148845314980e-03</internalNodes>\n          <leafValues>\n            -3.5482680797576904e-01 9.9362373352050781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1810 2.2643520496785641e-03</internalNodes>\n          <leafValues>\n            -2.8858441114425659e-01 8.8367857038974762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1811 5.3952648304402828e-03</internalNodes>\n          <leafValues>\n            8.5537381470203400e-02 -3.0366399884223938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1812 -7.2699488373473287e-04</internalNodes>\n          <leafValues>\n            7.4840240180492401e-02 -3.4039780497550964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1813 -9.7503658616915345e-04</internalNodes>\n          <leafValues>\n            1.2008629739284515e-01 -2.5634410977363586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1814 4.0540988557040691e-03</internalNodes>\n          <leafValues>\n            6.7266032099723816e-02 -3.5701939463615417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1815 2.5258921086788177e-03</internalNodes>\n          <leafValues>\n            -4.1966471076011658e-01 5.5665798485279083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1816 -1.2021360453218222e-03</internalNodes>\n          <leafValues>\n            1.0004480183124542e-01 -2.1932320296764374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1817 7.7549100387841463e-04</internalNodes>\n          <leafValues>\n            -1.3562729954719543e-01 1.1973659694194794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1818 -5.0699848681688309e-02</internalNodes>\n          <leafValues>\n            4.5418289303779602e-01 -3.9030350744724274e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1819 1.3364490121603012e-02</internalNodes>\n          <leafValues>\n            1.1166039854288101e-01 -1.7938789725303650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1820 -1.5418980270624161e-02</internalNodes>\n          <leafValues>\n            -3.5180059075355530e-01 4.7354999929666519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1821 -4.2981099337339401e-02</internalNodes>\n          <leafValues>\n            3.9232799410820007e-01 -4.5337028801441193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1822 6.2867929227650166e-03</internalNodes>\n          <leafValues>\n            6.4331822097301483e-02 -2.2239510715007782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1823 -3.5951940808445215e-03</internalNodes>\n          <leafValues>\n            9.5404297113418579e-02 -1.5338289737701416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1824 -7.6760917901992798e-02</internalNodes>\n          <leafValues>\n            -6.5099817514419556e-01 1.7283650115132332e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1825 4.6225200640037656e-04</internalNodes>\n          <leafValues>\n            -4.3415609002113342e-01 2.5241859257221222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1826 7.5868278509005904e-04</internalNodes>\n          <leafValues>\n            -1.4624330401420593e-01 9.6319071948528290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1827 -5.0252641085535288e-04</internalNodes>\n          <leafValues>\n            1.3584020733833313e-01 -2.3181040585041046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1828 9.7315143793821335e-03</internalNodes>\n          <leafValues>\n            -8.5155591368675232e-02 2.0156989991664886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1829 -2.6432229205965996e-02</internalNodes>\n          <leafValues>\n            -3.7002518773078918e-01 2.4616630747914314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1830 -4.4683468877337873e-04</internalNodes>\n          <leafValues>\n            1.0048960149288177e-01 -1.8588609993457794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1831 1.9872789271175861e-03</internalNodes>\n          <leafValues>\n            5.3223919123411179e-02 -3.1603801250457764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1832 3.1368629424832761e-04</internalNodes>\n          <leafValues>\n            -1.3213190436363220e-01 9.5771767199039459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1833 5.9834700077772141e-03</internalNodes>\n          <leafValues>\n            -7.5681813061237335e-02 1.5230950713157654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1834 -5.0965389236807823e-03</internalNodes>\n          <leafValues>\n            -1.8477819859981537e-01 7.6022140681743622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1835 -1.9187610596418381e-02</internalNodes>\n          <leafValues>\n            2.1431809663772583e-01 -4.9764219671487808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1836 2.3320479318499565e-02</internalNodes>\n          <leafValues>\n            -4.8689320683479309e-02 2.6578998565673828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1837 -6.9449091097339988e-04</internalNodes>\n          <leafValues>\n            -1.5433350205421448e-01 8.7410651147365570e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1838 4.8893648199737072e-03</internalNodes>\n          <leafValues>\n            5.1342789083719254e-02 -2.6165360212326050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1839 -2.7428869158029556e-02</internalNodes>\n          <leafValues>\n            -3.7972038984298706e-01 3.1821161508560181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1840 -1.7734549939632416e-02</internalNodes>\n          <leafValues>\n            1.9976620376110077e-01 -6.2318049371242523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1841 1.5148259699344635e-01</internalNodes>\n          <leafValues>\n            7.4510741978883743e-03 -5.8031332492828369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1842 1.5324390260502696e-03</internalNodes>\n          <leafValues>\n            -1.2510550022125244e-01 1.0431899875402451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1843 -1.2310810387134552e-02</internalNodes>\n          <leafValues>\n            -2.3539729416370392e-01 5.3646210581064224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1844 -1.1210800148546696e-02</internalNodes>\n          <leafValues>\n            1.0759239643812180e-01 -1.2055230140686035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1845 2.7532500680536032e-03</internalNodes>\n          <leafValues>\n            -6.6479906439781189e-02 1.7321150004863739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1846 -8.4678819403052330e-03</internalNodes>\n          <leafValues>\n            -3.1850680708885193e-01 4.2280819267034531e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1847 -7.3283319361507893e-03</internalNodes>\n          <leafValues>\n            -1.6369259357452393e-01 3.1772349029779434e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1848 4.7156549990177155e-02</internalNodes>\n          <leafValues>\n            -6.1667099595069885e-02 1.7410990595817566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1849 8.2125868648290634e-03</internalNodes>\n          <leafValues>\n            6.7069798707962036e-02 -2.2030070424079895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1850 7.6550841331481934e-03</internalNodes>\n          <leafValues>\n            6.1422310769557953e-02 -1.9357620179653168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1851 -4.5372851192951202e-02</internalNodes>\n          <leafValues>\n            -4.7565659880638123e-01 2.2869469597935677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1852 3.7434820551425219e-03</internalNodes>\n          <leafValues>\n            -9.0940922498703003e-02 1.3841210305690765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1853 2.3490150924772024e-03</internalNodes>\n          <leafValues>\n            6.3291497528553009e-02 -1.5506389737129211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1854 -2.4149749428033829e-02</internalNodes>\n          <leafValues>\n            3.4588441252708435e-01 -3.1525820493698120e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1855 1.4878350310027599e-02</internalNodes>\n          <leafValues>\n            2.4215059354901314e-02 -3.2387629151344299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1856 2.9843160882592201e-02</internalNodes>\n          <leafValues>\n            -2.7817690744996071e-02 4.0939471125602722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1857 7.1600051596760750e-03</internalNodes>\n          <leafValues>\n            -4.6596240252256393e-02 7.4547067284584045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1858 5.6267209351062775e-02</internalNodes>\n          <leafValues>\n            2.9551850631833076e-02 -4.0098059177398682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1859 -4.5356149785220623e-03</internalNodes>\n          <leafValues>\n            8.1820577383041382e-02 -1.0619299858808517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1860 -1.3697359710931778e-02</internalNodes>\n          <leafValues>\n            -1.9359089434146881e-01 7.0917747914791107e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1861 -1.5458730049431324e-03</internalNodes>\n          <leafValues>\n            -2.1987679600715637e-01 2.8396489098668098e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1862 2.9332858975976706e-03</internalNodes>\n          <leafValues>\n            -7.6153233647346497e-02 1.6460180282592773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1863 3.4973609726876020e-03</internalNodes>\n          <leafValues>\n            -6.8196080625057220e-02 1.6717350482940674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1864 -1.8307069316506386e-02</internalNodes>\n          <leafValues>\n            -1.8867099285125732e-01 6.9932736456394196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1865 -1.7092080414295197e-01</internalNodes>\n          <leafValues>\n            -5.0067770481109619e-01 7.8164357692003250e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1866 4.1620130650699139e-03</internalNodes>\n          <leafValues>\n            5.5900041013956070e-02 -2.2972549498081207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1867 -1.9724309444427490e-02</internalNodes>\n          <leafValues>\n            3.2998558878898621e-01 -3.6602400243282318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1868 5.3331600502133369e-03</internalNodes>\n          <leafValues>\n            -1.4134259521961212e-01 8.8277637958526611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1869 -4.2182218283414841e-02</internalNodes>\n          <leafValues>\n            -6.6718780994415283e-01 1.5770509839057922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1870 -5.2826730534434319e-03</internalNodes>\n          <leafValues>\n            1.7025630176067352e-01 -6.8491317331790924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1871 -2.3227441124618053e-03</internalNodes>\n          <leafValues>\n            7.2378590703010559e-02 -1.0066709667444229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1872 -1.6239390242844820e-03</internalNodes>\n          <leafValues>\n            -2.2501319646835327e-01 5.5898498743772507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1873 5.6083410978317261e-02</internalNodes>\n          <leafValues>\n            1.3646169565618038e-02 -4.9306789040565491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1874 -3.0199930071830750e-02</internalNodes>\n          <leafValues>\n            2.3070830106735229e-01 -5.3645938634872437e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1875 1.9157670438289642e-02</internalNodes>\n          <leafValues>\n            3.6830320954322815e-02 -3.9522978663444519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1876 3.5853029694408178e-03</internalNodes>\n          <leafValues>\n            -6.1893220990896225e-02 1.7583209276199341e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1877 -2.8775330632925034e-02</internalNodes>\n          <leafValues>\n            -3.1838440895080566e-01 2.3103740066289902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1878 2.5611401069909334e-03</internalNodes>\n          <leafValues>\n            -1.0484419763088226e-01 9.7152568399906158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1879 -3.1554490327835083e-02</internalNodes>\n          <leafValues>\n            2.9366511106491089e-01 -2.4189069867134094e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1880 -7.3520588921383023e-04</internalNodes>\n          <leafValues>\n            9.7711041569709778e-02 -1.5248039364814758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1881 -4.7993879765272141e-02</internalNodes>\n          <leafValues>\n            -9.4587820768356323e-01 9.0406481176614761e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1882 5.2936570718884468e-03</internalNodes>\n          <leafValues>\n            3.3320371061563492e-02 -3.1268939375877380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1883 1.6903249546885490e-02</internalNodes>\n          <leafValues>\n            -2.4132709950208664e-02 2.8483408689498901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1884 -7.0723611861467361e-03</internalNodes>\n          <leafValues>\n            -1.7524200677871704e-01 7.2713881731033325e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1885 6.4191617071628571e-02</internalNodes>\n          <leafValues>\n            -2.0969670265913010e-02 3.5402628779411316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1886 2.9694940894842148e-03</internalNodes>\n          <leafValues>\n            -7.5086936354637146e-02 1.4321349561214447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1887 -2.0105259492993355e-02</internalNodes>\n          <leafValues>\n            6.0784012079238892e-01 -1.8104499205946922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1888 -1.3169869780540466e-02</internalNodes>\n          <leafValues>\n            -5.4678368568420410e-01 2.4742240086197853e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1889 -1.4226729981601238e-02</internalNodes>\n          <leafValues>\n            -4.6722590923309326e-01 3.1489629298448563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1890 3.7746191024780273e-02</internalNodes>\n          <leafValues>\n            -3.8495831191539764e-02 3.5333481431007385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1891 -3.8704369217157364e-03</internalNodes>\n          <leafValues>\n            1.4984290301799774e-01 -5.6549768894910812e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1892 -1.1565440334379673e-02</internalNodes>\n          <leafValues>\n            -1.5227930247783661e-01 7.6062962412834167e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1893 -8.8854476809501648e-02</internalNodes>\n          <leafValues>\n            -7.2967928647994995e-01 4.8231678083539009e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1894 -2.0447981078177691e-03</internalNodes>\n          <leafValues>\n            1.4148180186748505e-01 -8.3200357854366302e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1895 -1.1762860231101513e-02</internalNodes>\n          <leafValues>\n            -4.0200519561767578e-01 2.6679439470171928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1896 -1.7539029940962791e-02</internalNodes>\n          <leafValues>\n            -3.7316259741783142e-01 3.0171979218721390e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1897 3.8314110133796930e-03</internalNodes>\n          <leafValues>\n            -9.3409948050975800e-02 7.9503498971462250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1898 -1.4472359791398048e-02</internalNodes>\n          <leafValues>\n            3.4333580732345581e-01 -4.3657060712575912e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1899 -2.6516690850257874e-02</internalNodes>\n          <leafValues>\n            -4.8230230808258057e-01 1.6811650246381760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1900 -3.3194791525602341e-02</internalNodes>\n          <leafValues>\n            -4.3580260872840881e-01 2.2644890472292900e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1901 4.4987560249865055e-03</internalNodes>\n          <leafValues>\n            -3.2281540334224701e-02 8.9946307241916656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1902 3.6823831032961607e-03</internalNodes>\n          <leafValues>\n            -6.8755462765693665e-02 1.4339810609817505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1903 -1.1184140294790268e-01</internalNodes>\n          <leafValues>\n            -7.7756762504577637e-01 5.2246451377868652e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1904 -7.3255039751529694e-02</internalNodes>\n          <leafValues>\n            -5.5630749464035034e-01 1.9127149134874344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1905 2.9855769127607346e-02</internalNodes>\n          <leafValues>\n            2.1178830415010452e-02 -4.0850040316581726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1906 -7.3472231626510620e-02</internalNodes>\n          <leafValues>\n            8.2820487022399902e-01 -1.2452909722924232e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1907 -7.2046648710966110e-04</internalNodes>\n          <leafValues>\n            9.9630527198314667e-02 -9.5278859138488770e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1908 -3.8003330701030791e-04</internalNodes>\n          <leafValues>\n            1.0231109708547592e-01 -1.0351389646530151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1909 -4.5453108847141266e-02</internalNodes>\n          <leafValues>\n            -6.4885061979293823e-01 1.1966000311076641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1910 -5.1456969231367111e-04</internalNodes>\n          <leafValues>\n            -1.5083299577236176e-01 6.6544473171234131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1911 2.7949180454015732e-02</internalNodes>\n          <leafValues>\n            1.7186399549245834e-02 -3.7501189112663269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1912 6.3039876520633698e-02</internalNodes>\n          <leafValues>\n            -4.3821588158607483e-02 2.4789440631866455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1913 -2.2690258920192719e-03</internalNodes>\n          <leafValues>\n            7.4712008237838745e-02 -1.1131580173969269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1914 -3.8063840474933386e-03</internalNodes>\n          <leafValues>\n            -1.5530909597873688e-01 6.5264508128166199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1915 3.7190090864896774e-02</internalNodes>\n          <leafValues>\n            -2.9698630794882774e-02 2.3071870207786560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1916 2.1895840764045715e-02</internalNodes>\n          <leafValues>\n            1.5778519213199615e-02 -6.3006269931793213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1917 -3.1993988901376724e-02</internalNodes>\n          <leafValues>\n            2.6250898838043213e-01 -2.4627109989523888e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1918 -1.6778679564595222e-02</internalNodes>\n          <leafValues>\n            -4.2436981201171875e-01 2.2607849910855293e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1919 5.2477661520242691e-02</internalNodes>\n          <leafValues>\n            -1.6188420355319977e-02 3.1766140460968018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1920 1.0443729907274246e-01</internalNodes>\n          <leafValues>\n            1.1290200054645538e-02 -8.6021018028259277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1921 -6.5574781037867069e-03</internalNodes>\n          <leafValues>\n            1.2225849926471710e-01 -5.6091431528329849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1922 1.6797389835119247e-02</internalNodes>\n          <leafValues>\n            3.5811539739370346e-02 -3.1163010001182556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1923 5.0427159294486046e-03</internalNodes>\n          <leafValues>\n            -5.0439529120922089e-02 6.3930332660675049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1924 -3.4571789205074310e-02</internalNodes>\n          <leafValues>\n            -5.6278371810913086e-01 1.6692740842700005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1925 3.7999521009624004e-03</internalNodes>\n          <leafValues>\n            -6.8566747009754181e-02 9.6017867326736450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1926 -1.1995599605143070e-02</internalNodes>\n          <leafValues>\n            1.3819910585880280e-01 -7.1510016918182373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1927 1.1098429560661316e-02</internalNodes>\n          <leafValues>\n            5.3506620228290558e-02 -1.0482089966535568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1928 -1.2905290722846985e-01</internalNodes>\n          <leafValues>\n            -6.7262178659439087e-01 1.5195850282907486e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1929 6.3130040653049946e-03</internalNodes>\n          <leafValues>\n            -6.1030130833387375e-02 1.0355649888515472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1930 4.0955888107419014e-03</internalNodes>\n          <leafValues>\n            7.0534646511077881e-02 -1.4484269917011261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1931 -1.0530550032854080e-02</internalNodes>\n          <leafValues>\n            9.8569639027118683e-02 -3.7973210215568542e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1932 3.6035990342497826e-03</internalNodes>\n          <leafValues>\n            5.1277790218591690e-02 -1.8671560287475586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1933 1.1999369598925114e-03</internalNodes>\n          <leafValues>\n            -6.3231408596038818e-02 1.0446310043334961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1934 -1.9585370318964124e-04</internalNodes>\n          <leafValues>\n            8.6044862866401672e-02 -1.1856850236654282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1935 -1.2213560193777084e-01</internalNodes>\n          <leafValues>\n            -8.8419800996780396e-01 6.3145011663436890e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1936 -7.7650691382586956e-03</internalNodes>\n          <leafValues>\n            1.3725960254669189e-01 -8.0412857234477997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1937 1.5734319388866425e-01</internalNodes>\n          <leafValues>\n            1.2743320316076279e-02 -6.5401297807693481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1938 -7.6066371984779835e-03</internalNodes>\n          <leafValues>\n            -1.3797719776630402e-01 7.6062493026256561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1939 -4.3096300214529037e-03</internalNodes>\n          <leafValues>\n            1.1195199936628342e-01 -3.2390709966421127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1940 -3.2239840365946293e-03</internalNodes>\n          <leafValues>\n            2.1420599520206451e-01 -5.8244630694389343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1941 8.3754826337099075e-03</internalNodes>\n          <leafValues>\n            4.7615598887205124e-02 -2.4216049909591675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1942 3.0904430896043777e-03</internalNodes>\n          <leafValues>\n            -9.0418681502342224e-02 9.9244832992553711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1943 9.8243616521358490e-03</internalNodes>\n          <leafValues>\n            -4.4643919914960861e-02 1.0423039644956589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1944 -3.2808810938149691e-03</internalNodes>\n          <leafValues>\n            -1.9123159348964691e-01 6.3141517341136932e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1945 3.6370379384607077e-03</internalNodes>\n          <leafValues>\n            3.6944739520549774e-02 -1.1988619714975357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1946 7.8952945768833160e-03</internalNodes>\n          <leafValues>\n            -7.1313530206680298e-02 1.6107399761676788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1947 -3.3853040076792240e-03</internalNodes>\n          <leafValues>\n            -1.1704929918050766e-01 2.5579249486327171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1948 -2.6786550879478455e-03</internalNodes>\n          <leafValues>\n            -1.7064009606838226e-01 6.0627460479736328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1949 -4.5887688174843788e-03</internalNodes>\n          <leafValues>\n            3.4779790788888931e-02 -6.8817831575870514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1950 -6.1642300337553024e-02</internalNodes>\n          <leafValues>\n            5.1108109951019287e-01 -1.9752239808440208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1951 2.5235159322619438e-02</internalNodes>\n          <leafValues>\n            2.0203070715069771e-02 -3.4359911084175110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1952 -2.1312809549272060e-03</internalNodes>\n          <leafValues>\n            5.4698210209608078e-02 -1.6512370109558105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1953 -8.2598842680454254e-02</internalNodes>\n          <leafValues>\n            3.3804669976234436e-01 -2.8026569634675980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1954 -5.6678601540625095e-03</internalNodes>\n          <leafValues>\n            -3.3786231279373169e-01 2.9727049171924591e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1955 -9.3317396938800812e-02</internalNodes>\n          <leafValues>\n            -6.7238032817840576e-01 2.0025020930916071e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1956 9.2052231775596738e-04</internalNodes>\n          <leafValues>\n            -1.3974259793758392e-01 6.3175596296787262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1957 5.1411538152024150e-04</internalNodes>\n          <leafValues>\n            -8.1585250794887543e-02 5.9324279427528381e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1958 -6.7130490206182003e-03</internalNodes>\n          <leafValues>\n            -1.6645990312099457e-01 6.1560809612274170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1959 3.1578689813613892e-03</internalNodes>\n          <leafValues>\n            -1.0710070282220840e-01 6.6695116460323334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1960 1.2202030047774315e-02</internalNodes>\n          <leafValues>\n            -2.4845300242304802e-02 4.2458030581474304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1961 -2.8585169464349747e-02</internalNodes>\n          <leafValues>\n            2.3526839911937714e-01 -2.1121440455317497e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1962 2.3390499409288168e-03</internalNodes>\n          <leafValues>\n            6.4441107213497162e-02 -1.4063580334186554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1963 3.5900938510894775e-01</internalNodes>\n          <leafValues>\n            1.2122919782996178e-02 -7.3121142387390137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1964 7.6048658229410648e-03</internalNodes>\n          <leafValues>\n            -4.0700931102037430e-02 2.3581039905548096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1965 4.4263368472456932e-03</internalNodes>\n          <leafValues>\n            5.3039629012346268e-02 -1.5912020206451416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1966 8.5811351891607046e-04</internalNodes>\n          <leafValues>\n            -8.5265956819057465e-02 1.0489220172166824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1967 -4.2959367856383324e-03</internalNodes>\n          <leafValues>\n            -1.2851840257644653e-01 6.2752753496170044e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1968 4.4881720095872879e-03</internalNodes>\n          <leafValues>\n            6.4671441912651062e-02 -1.8789650499820709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1969 -4.9869619309902191e-02</internalNodes>\n          <leafValues>\n            2.1496759355068207e-01 -3.5577021539211273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1970 -1.1942230165004730e-01</internalNodes>\n          <leafValues>\n            -6.7953938245773315e-01 1.5091570094227791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1971 6.2965508550405502e-04</internalNodes>\n          <leafValues>\n            -9.2145420610904694e-02 6.1806648969650269e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1972 2.9381969943642616e-03</internalNodes>\n          <leafValues>\n            1.7903240025043488e-01 -4.9355998635292053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1973 -2.2860679775476456e-02</internalNodes>\n          <leafValues>\n            2.0976249873638153e-01 -3.1370889395475388e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1974 4.3369621038436890e-02</internalNodes>\n          <leafValues>\n            1.8286330625414848e-02 -5.1288998126983643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1975 1.9932509958744049e-01</internalNodes>\n          <leafValues>\n            6.7204708466306329e-04 -8.9769357442855835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1976 8.0751203000545502e-02</internalNodes>\n          <leafValues>\n            -2.0869649946689606e-02 4.3768700957298279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1977 1.5349129680544138e-03</internalNodes>\n          <leafValues>\n            3.6761760711669922e-02 -2.2203999757766724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1978 -3.6580949090421200e-03</internalNodes>\n          <leafValues>\n            -1.5471710264682770e-01 6.7229896783828735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1979 2.4743290618062019e-02</internalNodes>\n          <leafValues>\n            -5.5474709719419479e-02 1.7429579794406891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1980 -1.6451500356197357e-02</internalNodes>\n          <leafValues>\n            1.8817320466041565e-01 -5.5719010531902313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1981 -8.4505761042237282e-03</internalNodes>\n          <leafValues>\n            -3.2943668961524963e-01 2.2743720561265945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1982 2.9369179159402847e-02</internalNodes>\n          <leafValues>\n            1.5479310415685177e-02 -5.9099632501602173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1983 1.0524799674749374e-01</internalNodes>\n          <leafValues>\n            2.1177560556679964e-03 -4.9212720990180969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1984 -2.7816150337457657e-02</internalNodes>\n          <leafValues>\n            3.6421439051628113e-01 -2.5163119658827782e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1985 5.3339339792728424e-03</internalNodes>\n          <leafValues>\n            -4.8402350395917892e-02 3.9851561188697815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1986 1.1682730168104172e-02</internalNodes>\n          <leafValues>\n            2.4898340925574303e-02 -3.5719999670982361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1987 8.9094992727041245e-03</internalNodes>\n          <leafValues>\n            4.6579260379076004e-02 -1.5088100731372833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1988 7.3203681968152523e-03</internalNodes>\n          <leafValues>\n            7.0891879498958588e-02 -1.3278549909591675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1989 -2.0311130210757256e-02</internalNodes>\n          <leafValues>\n            1.7783379554748535e-01 -3.7538051605224609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1990 1.3689160114154220e-03</internalNodes>\n          <leafValues>\n            -1.2096449732780457e-01 7.8017823398113251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1991 7.6994091272354126e-02</internalNodes>\n          <leafValues>\n            -8.7762605398893356e-03 3.2993561029434204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1992 8.8949268683791161e-03</internalNodes>\n          <leafValues>\n            -5.5553250014781952e-02 1.6372109949588776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1993 -1.8518440425395966e-02</internalNodes>\n          <leafValues>\n            -1.4479570090770721e-01 3.0250260606408119e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1994 -4.0174879133701324e-02</internalNodes>\n          <leafValues>\n            -2.4990509450435638e-01 4.0788788348436356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1995 6.5176486968994141e-02</internalNodes>\n          <leafValues>\n            -1.4393090270459652e-02 3.7707069516181946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1996 -1.4845930039882660e-02</internalNodes>\n          <leafValues>\n            2.7375608682632446e-01 -3.3898409456014633e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1997 -6.1434650421142578e-01</internalNodes>\n          <leafValues>\n            -6.9167751073837280e-01 4.0905540809035301e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1998 1.4119890332221985e-01</internalNodes>\n          <leafValues>\n            1.6643870621919632e-02 -5.8944582939147949e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>157</maxWeakCount>\n      <stageThreshold>-1.5337220430374146e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1999 2.1962670609354973e-02</internalNodes>\n          <leafValues>\n            -3.0903491377830505e-01 2.1529789268970490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2000 5.1272530108690262e-02</internalNodes>\n          <leafValues>\n            -2.2286629676818848e-01 2.9869711399078369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2001 4.1870009154081345e-02</internalNodes>\n          <leafValues>\n            -2.7849119901657104e-01 2.0416070520877838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2002 6.7551871761679649e-03</internalNodes>\n          <leafValues>\n            -2.1988549828529358e-01 7.3887020349502563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2003 1.7311690375208855e-02</internalNodes>\n          <leafValues>\n            -3.4227430820465088e-01 1.3190160691738129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2004 1.5399109572172165e-02</internalNodes>\n          <leafValues>\n            -2.3149499297142029e-01 1.8828059732913971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2005 -1.0792730376124382e-02</internalNodes>\n          <leafValues>\n            -3.0813691020011902e-01 1.1191529780626297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2006 8.5879449034109712e-04</internalNodes>\n          <leafValues>\n            7.2238206863403320e-02 -4.4624349474906921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2007 9.2791311908513308e-04</internalNodes>\n          <leafValues>\n            -2.9247429966926575e-01 9.3132883310317993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2008 -8.5785696282982826e-03</internalNodes>\n          <leafValues>\n            2.0642790198326111e-01 -1.1203339695930481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2009 -1.8951490521430969e-02</internalNodes>\n          <leafValues>\n            -3.9317628741264343e-01 6.7260466516017914e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2010 3.4939948469400406e-02</internalNodes>\n          <leafValues>\n            2.8045989573001862e-02 -5.7410031557083130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2011 -4.2870659381151199e-02</internalNodes>\n          <leafValues>\n            -5.9856891632080078e-01 3.4607890993356705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2012 5.4958608234301209e-04</internalNodes>\n          <leafValues>\n            -4.1193041205406189e-01 6.7322418093681335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2013 2.2494920995086432e-03</internalNodes>\n          <leafValues>\n            1.3482889533042908e-01 -1.9777689874172211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2014 -9.2442613095045090e-03</internalNodes>\n          <leafValues>\n            -1.7850719392299652e-01 7.6734513044357300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2015 1.2210760032758117e-03</internalNodes>\n          <leafValues>\n            -3.4616300463676453e-01 7.5431950390338898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2016 1.3654090464115143e-02</internalNodes>\n          <leafValues>\n            7.7861636877059937e-02 -4.3963378667831421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2017 1.7332829535007477e-02</internalNodes>\n          <leafValues>\n            4.8317600041627884e-02 -4.1461798548698425e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2018 -1.6807779669761658e-02</internalNodes>\n          <leafValues>\n            2.3211599886417389e-01 -8.2342058420181274e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2019 3.2203171402215958e-02</internalNodes>\n          <leafValues>\n            3.4065268933773041e-02 -5.9796607494354248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2020 1.6777820885181427e-02</internalNodes>\n          <leafValues>\n            -5.9402968734502792e-02 1.6782909631729126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2021 1.3074859976768494e-02</internalNodes>\n          <leafValues>\n            -1.0592609643936157e-01 2.3796890676021576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2022 9.4082832336425781e-02</internalNodes>\n          <leafValues>\n            1.0573189705610275e-02 -5.3249269723892212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2023 -7.6036658138036728e-03</internalNodes>\n          <leafValues>\n            -2.3031429946422577e-01 1.0104469954967499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2024 8.2368071889504790e-04</internalNodes>\n          <leafValues>\n            4.6598970890045166e-02 -1.0087580233812332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2025 -7.6875449158251286e-03</internalNodes>\n          <leafValues>\n            -2.6123398542404175e-01 7.3543973267078400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2026 -3.3729180693626404e-02</internalNodes>\n          <leafValues>\n            2.1907149255275726e-01 -2.1958939731121063e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2027 1.3204690068960190e-02</internalNodes>\n          <leafValues>\n            -1.4203189313411713e-01 1.5107029676437378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2028 8.5354369366541505e-04</internalNodes>\n          <leafValues>\n            -2.4303670227527618e-01 8.3283171057701111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2029 -1.4071330428123474e-02</internalNodes>\n          <leafValues>\n            -3.6977100372314453e-01 5.5142328143119812e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2030 -1.1115919798612595e-02</internalNodes>\n          <leafValues>\n            -4.6575489640235901e-01 2.7285559102892876e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2031 1.3858900405466557e-02</internalNodes>\n          <leafValues>\n            -9.1722346842288971e-02 1.9947899878025055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2032 8.5548251867294312e-02</internalNodes>\n          <leafValues>\n            2.6189789175987244e-02 -3.6603820323944092e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2033 -1.9484929740428925e-02</internalNodes>\n          <leafValues>\n            1.7259980738162994e-01 -8.9445300400257111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2034 2.1631179377436638e-02</internalNodes>\n          <leafValues>\n            -5.6183289736509323e-02 6.7707277834415436e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2035 1.9267840310931206e-02</internalNodes>\n          <leafValues>\n            5.5609680712223053e-02 -2.9480481147766113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2036 1.1855900287628174e-02</internalNodes>\n          <leafValues>\n            6.8580061197280884e-02 -2.7094689011573792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2037 1.7135039670392871e-03</internalNodes>\n          <leafValues>\n            -1.5590840578079224e-01 9.4477489590644836e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2038 6.2993362545967102e-02</internalNodes>\n          <leafValues>\n            2.9042679816484451e-02 -2.5151410698890686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2039 1.7328880727291107e-02</internalNodes>\n          <leafValues>\n            -4.3562661856412888e-02 3.4017661213874817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2040 2.4053089320659637e-02</internalNodes>\n          <leafValues>\n            3.7450179457664490e-02 -2.8990021347999573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2041 2.1294029429554939e-02</internalNodes>\n          <leafValues>\n            4.8889711499214172e-02 -3.6390760540962219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2042 9.2860676348209381e-02</internalNodes>\n          <leafValues>\n            -3.6604419350624084e-02 3.2365238666534424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2043 2.1167730446904898e-03</internalNodes>\n          <leafValues>\n            8.7506070733070374e-02 -1.8339939415454865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2044 -8.7125040590763092e-02</internalNodes>\n          <leafValues>\n            -4.6162751317024231e-01 3.1342040747404099e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2045 1.9298809766769409e-01</internalNodes>\n          <leafValues>\n            2.9041619971394539e-02 -4.4543629884719849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2046 -2.4475890313624404e-05</internalNodes>\n          <leafValues>\n            5.9352759271860123e-02 -2.0239880681037903e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2047 -3.4894149750471115e-02</internalNodes>\n          <leafValues>\n            -4.5676550269126892e-01 3.5249751061201096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2048 1.9192209839820862e-01</internalNodes>\n          <leafValues>\n            -4.0733739733695984e-02 1.5444849431514740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2049 -2.3085139691829681e-02</internalNodes>\n          <leafValues>\n            7.1740321815013885e-02 -2.0493650436401367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2050 2.9535569250583649e-02</internalNodes>\n          <leafValues>\n            4.0762118995189667e-02 -3.6926439404487610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2051 -3.6492519080638885e-02</internalNodes>\n          <leafValues>\n            -5.4941332340240479e-01 2.5431329384446144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2052 4.0696229785680771e-02</internalNodes>\n          <leafValues>\n            1.0515309870243073e-02 -4.9906229972839355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2053 -3.6384560167789459e-02</internalNodes>\n          <leafValues>\n            -2.4736070632934570e-01 5.3187850862741470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2054 3.7000048905611038e-02</internalNodes>\n          <leafValues>\n            -4.6731691807508469e-02 3.0095300078392029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2055 3.7872981280088425e-02</internalNodes>\n          <leafValues>\n            4.5600850135087967e-02 -3.3789730072021484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2056 -1.6164340078830719e-02</internalNodes>\n          <leafValues>\n            1.9655610620975494e-01 -5.6567810475826263e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2057 2.4253420531749725e-01</internalNodes>\n          <leafValues>\n            3.7772599607706070e-02 -3.6190840601921082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2058 -1.7429869621992111e-02</internalNodes>\n          <leafValues>\n            7.8519687056541443e-02 -1.9835950806736946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2059 1.4150669798254967e-02</internalNodes>\n          <leafValues>\n            -1.5143400430679321e-01 1.2028410285711288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2060 6.3771687448024750e-02</internalNodes>\n          <leafValues>\n            6.8969810381531715e-03 -8.0511492490768433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2061 1.1273720301687717e-03</internalNodes>\n          <leafValues>\n            -2.6931971311569214e-01 5.2550218999385834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2062 -3.8293499499559402e-02</internalNodes>\n          <leafValues>\n            2.0563830435276031e-01 -2.1474370732903481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2063 5.0103109329938889e-02</internalNodes>\n          <leafValues>\n            2.3352440446615219e-02 -5.4645192623138428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2064 -4.0057931095361710e-02</internalNodes>\n          <leafValues>\n            2.4553330242633820e-01 -3.3474709838628769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2065 1.8415290862321854e-02</internalNodes>\n          <leafValues>\n            -7.5977481901645660e-02 1.8510019779205322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2066 1.0548150166869164e-02</internalNodes>\n          <leafValues>\n            6.6050186753273010e-02 -6.4367741346359253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2067 7.3007687926292419e-02</internalNodes>\n          <leafValues>\n            -2.6471909135580063e-02 4.6508520841598511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2068 -3.4658040851354599e-02</internalNodes>\n          <leafValues>\n            2.7848151326179504e-01 -4.6662889420986176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2069 1.6924630850553513e-02</internalNodes>\n          <leafValues>\n            1.1554700136184692e-01 -1.1504360288381577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2070 -7.4245870113372803e-02</internalNodes>\n          <leafValues>\n            -4.3072721362113953e-01 1.6461249440908432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2071 -7.3406308889389038e-02</internalNodes>\n          <leafValues>\n            -5.6626558303833008e-01 2.3453989997506142e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2072 1.2397419661283493e-01</internalNodes>\n          <leafValues>\n            -5.4616708308458328e-02 1.0024350136518478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2073 -1.6235560178756714e-02</internalNodes>\n          <leafValues>\n            -1.9912120699882507e-01 6.8537697196006775e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2074 -3.0137969180941582e-02</internalNodes>\n          <leafValues>\n            -3.3398950099945068e-01 2.2806070744991302e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2075 -8.1836536526679993e-02</internalNodes>\n          <leafValues>\n            4.0628650784492493e-01 -3.7828210741281509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2076 5.2240878343582153e-01</internalNodes>\n          <leafValues>\n            1.8094440922141075e-02 -4.3477010726928711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2077 1.4845579862594604e-02</internalNodes>\n          <leafValues>\n            -7.0279222726821899e-01 1.9977509975433350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2078 -5.5507790297269821e-02</internalNodes>\n          <leafValues>\n            5.1214778423309326e-01 -2.8097610920667648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2079 -2.7078049257397652e-02</internalNodes>\n          <leafValues>\n            3.0834761261940002e-01 -4.0676809847354889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2080 -2.4416339583694935e-03</internalNodes>\n          <leafValues>\n            -1.2054579704999924e-01 5.9857279062271118e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2081 1.5043720602989197e-01</internalNodes>\n          <leafValues>\n            -6.0036379843950272e-02 2.2021989524364471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2082 -4.1030261665582657e-02</internalNodes>\n          <leafValues>\n            -3.3254709839820862e-01 2.5029130280017853e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2083 1.4609499834477901e-02</internalNodes>\n          <leafValues>\n            5.1357660442590714e-02 -2.8190329670906067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2084 1.2588420510292053e-01</internalNodes>\n          <leafValues>\n            6.7158509045839310e-03 -4.9155730009078979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2085 -3.7784978747367859e-02</internalNodes>\n          <leafValues>\n            5.1675951480865479e-01 -2.7236010879278183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2086 -1.8090210855007172e-02</internalNodes>\n          <leafValues>\n            -3.5778409242630005e-01 3.5485059022903442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2087 -3.9881139993667603e-02</internalNodes>\n          <leafValues>\n            -4.8079541325569153e-01 2.7166770771145821e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2088 7.3324372060596943e-03</internalNodes>\n          <leafValues>\n            -5.3297691047191620e-02 1.1757290363311768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2089 -6.9262558827176690e-04</internalNodes>\n          <leafValues>\n            -1.4501209557056427e-01 9.2885218560695648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2090 -8.2166977226734161e-02</internalNodes>\n          <leafValues>\n            2.3127609491348267e-01 -5.6990649551153183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2091 3.8556379731744528e-03</internalNodes>\n          <leafValues>\n            9.5330670475959778e-02 -1.5586289763450623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2092 -7.4245668947696686e-03</internalNodes>\n          <leafValues>\n            -2.7692940831184387e-01 3.5343449562788010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2093 2.2808350622653961e-02</internalNodes>\n          <leafValues>\n            4.6904660761356354e-02 -3.3659911155700684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2094 8.2916222512722015e-02</internalNodes>\n          <leafValues>\n            2.8655149508267641e-03 -5.2691662311553955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2095 -5.2402060478925705e-02</internalNodes>\n          <leafValues>\n            -6.9835901260375977e-01 1.8587840721011162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2096 1.5193739905953407e-02</internalNodes>\n          <leafValues>\n            -6.0126390308141708e-02 2.5917008519172668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2097 -1.4240809716284275e-02</internalNodes>\n          <leafValues>\n            2.7056190371513367e-01 -6.4629502594470978e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2098 -3.2158840913325548e-03</internalNodes>\n          <leafValues>\n            -9.3549117445945740e-02 2.8090029954910278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2099 4.7198659740388393e-03</internalNodes>\n          <leafValues>\n            -1.8783959746360779e-01 7.1021787822246552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2100 -2.5415599346160889e-02</internalNodes>\n          <leafValues>\n            -3.3236810564994812e-01 4.0915489196777344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2101 4.2758490890264511e-02</internalNodes>\n          <leafValues>\n            2.6150930672883987e-02 -5.1128530502319336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2102 4.2231049388647079e-02</internalNodes>\n          <leafValues>\n            -2.1398520097136497e-02 1.7453899979591370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2103 -2.0674670115113258e-02</internalNodes>\n          <leafValues>\n            2.5898760557174683e-01 -5.6440889835357666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2104 2.8976969420909882e-02</internalNodes>\n          <leafValues>\n            -2.0763730630278587e-02 9.6909962594509125e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2105 3.4173950552940369e-03</internalNodes>\n          <leafValues>\n            9.3572951853275299e-02 -1.5996080636978149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2106 6.7922919988632202e-02</internalNodes>\n          <leafValues>\n            1.6243519261479378e-02 -7.4624717235565186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2107 -9.0270619839429855e-03</internalNodes>\n          <leafValues>\n            3.3382698893547058e-01 -3.8774389773607254e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2108 -2.8317999094724655e-02</internalNodes>\n          <leafValues>\n            -3.6276119947433472e-01 2.3800129070878029e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2109 -1.5302050160244107e-03</internalNodes>\n          <leafValues>\n            -1.8413589894771576e-01 7.0150263607501984e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2110 8.4196459501981735e-03</internalNodes>\n          <leafValues>\n            9.0586692094802856e-02 -6.1134628951549530e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2111 4.4346109032630920e-02</internalNodes>\n          <leafValues>\n            6.1388049274682999e-02 -2.1231949329376221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2112 2.5921100750565529e-02</internalNodes>\n          <leafValues>\n            -3.5028610378503799e-02 2.2107489407062531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2113 -6.0503371059894562e-03</internalNodes>\n          <leafValues>\n            -3.2179000973701477e-01 3.9333820343017578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2114 -2.5171019136905670e-02</internalNodes>\n          <leafValues>\n            6.9517672061920166e-01 -1.8360199406743050e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2115 -5.2073050290346146e-02</internalNodes>\n          <leafValues>\n            -7.4727028608322144e-01 1.9030340015888214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2116 -1.3639439828693867e-02</internalNodes>\n          <leafValues>\n            -6.2003239989280701e-02 4.1589640080928802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2117 -3.8377299904823303e-02</internalNodes>\n          <leafValues>\n            3.8518410921096802e-01 -3.1509511172771454e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2118 -1.4677719771862030e-01</internalNodes>\n          <leafValues>\n            -6.0099261999130249e-01 1.0989420115947723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2119 2.0508460700511932e-02</internalNodes>\n          <leafValues>\n            5.6464750319719315e-02 -2.5149369239807129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2120 2.3784590885043144e-02</internalNodes>\n          <leafValues>\n            5.8459620922803879e-02 -2.2233340144157410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2121 1.8658170476555824e-02</internalNodes>\n          <leafValues>\n            -7.3706217110157013e-02 1.8556639552116394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2122 -2.6653500273823738e-02</internalNodes>\n          <leafValues>\n            2.1061730384826660e-01 -6.8629503250122070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2123 -7.5975798070430756e-02</internalNodes>\n          <leafValues>\n            -4.8535370826721191e-01 2.7239590883255005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2124 5.3205721080303192e-02</internalNodes>\n          <leafValues>\n            5.1950141787528992e-03 -4.7940468788146973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2125 4.1206479072570801e-02</internalNodes>\n          <leafValues>\n            1.9166460260748863e-02 -6.4439648389816284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2126 2.2624490782618523e-02</internalNodes>\n          <leafValues>\n            1.7490459606051445e-02 -2.0645530521869659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2127 2.1147429943084717e-02</internalNodes>\n          <leafValues>\n            -3.2944951206445694e-02 3.5154509544372559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2128 1.3374770060181618e-02</internalNodes>\n          <leafValues>\n            4.0784850716590881e-02 -1.9725930690765381e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2129 4.2831092141568661e-03</internalNodes>\n          <leafValues>\n            -8.5159152746200562e-02 1.4025710523128510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2130 6.3718900084495544e-02</internalNodes>\n          <leafValues>\n            -4.9198199994862080e-03 4.5491519570350647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2131 1.2082169763743877e-02</internalNodes>\n          <leafValues>\n            5.3176809102296829e-02 -2.6156601309776306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2132 1.8195409327745438e-02</internalNodes>\n          <leafValues>\n            -3.8999419659376144e-02 3.3412361145019531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2133 2.8948329389095306e-02</internalNodes>\n          <leafValues>\n            3.9750248193740845e-02 -3.4182530641555786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2134 -9.3633607029914856e-02</internalNodes>\n          <leafValues>\n            -9.4571298360824585e-01 3.0850030016154051e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2135 3.4850560128688812e-02</internalNodes>\n          <leafValues>\n            3.1342729926109314e-02 -3.5700461268424988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2136 1.2895749509334564e-01</internalNodes>\n          <leafValues>\n            -3.9653491228818893e-02 3.7412929534912109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2137 2.3297289386391640e-02</internalNodes>\n          <leafValues>\n            2.5941710919141769e-02 -4.7231191396713257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2138 1.5667669475078583e-02</internalNodes>\n          <leafValues>\n            -8.1445790827274323e-02 1.5750789642333984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2139 1.1425570119172335e-03</internalNodes>\n          <leafValues>\n            6.3901476562023163e-02 -2.0547799766063690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2140 -5.5744551122188568e-02</internalNodes>\n          <leafValues>\n            -3.4481841325759888e-01 1.1300710029900074e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2141 -9.2509537935256958e-02</internalNodes>\n          <leafValues>\n            8.9074200391769409e-01 -1.5398530289530754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2142 -5.5660872021690011e-04</internalNodes>\n          <leafValues>\n            8.7056189775466919e-02 -5.1321998238563538e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2143 -1.4538520015776157e-02</internalNodes>\n          <leafValues>\n            -4.5140060782432556e-01 2.8146119788289070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2144 -3.7515729665756226e-02</internalNodes>\n          <leafValues>\n            -7.3286539316177368e-01 6.7265569232404232e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2145 -1.5516959829255939e-03</internalNodes>\n          <leafValues>\n            9.1213479638099670e-02 -1.3395330309867859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2146 -9.5461420714855194e-02</internalNodes>\n          <leafValues>\n            -9.5529359579086304e-01 2.3820339702069759e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2147 -1.2917599640786648e-02</internalNodes>\n          <leafValues>\n            2.7040511369705200e-01 -4.6904701739549637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2148 7.9802395775914192e-03</internalNodes>\n          <leafValues>\n            5.5390980094671249e-02 -2.0667399466037750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2149 6.6025177948176861e-03</internalNodes>\n          <leafValues>\n            6.6448308527469635e-02 -1.9922210276126862e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2150 1.7824679613113403e-02</internalNodes>\n          <leafValues>\n            -1.4532490074634552e-01 8.9904323220252991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2151 -2.3261539638042450e-02</internalNodes>\n          <leafValues>\n            4.8062869906425476e-01 -2.7084289118647575e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2152 -5.3659449331462383e-03</internalNodes>\n          <leafValues>\n            -1.9143599271774292e-01 7.0398069918155670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2153 -2.0775340497493744e-02</internalNodes>\n          <leafValues>\n            1.6774240136146545e-01 -8.9455418288707733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2154 6.2107890844345093e-02</internalNodes>\n          <leafValues>\n            1.2815490365028381e-02 -6.4452892541885376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2155 -4.4327871873974800e-03</internalNodes>\n          <leafValues>\n            1.3405950367450714e-01 -1.0231850296258926e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>210</maxWeakCount>\n      <stageThreshold>-1.4604519605636597e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2156 -4.6693067997694016e-03</internalNodes>\n          <leafValues>\n            1.4297600090503693e-01 -3.5293748974800110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2157 -5.8510829694569111e-04</internalNodes>\n          <leafValues>\n            -2.2447289526462555e-01 7.3556646704673767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2158 -3.4788011107593775e-03</internalNodes>\n          <leafValues>\n            1.0603249818086624e-01 -2.5625610351562500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2159 6.2952568987384439e-04</internalNodes>\n          <leafValues>\n            4.1076458990573883e-02 -3.6061421036720276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2160 2.1010650380048901e-04</internalNodes>\n          <leafValues>\n            -2.4425220489501953e-01 1.0942090302705765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2161 -2.6671579107642174e-03</internalNodes>\n          <leafValues>\n            8.4581501781940460e-02 -2.7449008822441101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2162 7.1533219888806343e-03</internalNodes>\n          <leafValues>\n            -1.2603819370269775e-01 2.0079800486564636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2163 -2.3616119287908077e-03</internalNodes>\n          <leafValues>\n            1.6627199947834015e-01 -1.3186289370059967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2164 3.9599660784006119e-02</internalNodes>\n          <leafValues>\n            5.5119238793849945e-02 -3.4003400802612305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2165 1.9385309424251318e-03</internalNodes>\n          <leafValues>\n            -2.0686650276184082e-01 1.0400419682264328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2166 4.3686539866030216e-03</internalNodes>\n          <leafValues>\n            6.4766593277454376e-02 -2.7426311373710632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2167 -3.9834968629293144e-04</internalNodes>\n          <leafValues>\n            5.2820999175310135e-02 -2.2684779763221741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2168 -5.2277399227023125e-03</internalNodes>\n          <leafValues>\n            -2.5515750050544739e-01 7.6405368745326996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2169 -1.0445619933307171e-02</internalNodes>\n          <leafValues>\n            1.3513970375061035e-01 -5.0032071769237518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2170 -2.0478919614106417e-03</internalNodes>\n          <leafValues>\n            -2.7669870853424072e-01 5.4732039570808411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2171 9.1795288026332855e-03</internalNodes>\n          <leafValues>\n            -1.2642470002174377e-01 1.9979229569435120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2172 9.4128772616386414e-04</internalNodes>\n          <leafValues>\n            -4.0286481380462646e-01 3.8918491452932358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2173 -4.0410319343209267e-03</internalNodes>\n          <leafValues>\n            -2.0108319818973541e-01 5.1456429064273834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2174 -1.2742569670081139e-02</internalNodes>\n          <leafValues>\n            2.2716869413852692e-01 -6.8204790353775024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2175 -4.6246009878814220e-03</internalNodes>\n          <leafValues>\n            -2.5854289531707764e-01 7.8878343105316162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2176 -6.4845927990972996e-03</internalNodes>\n          <leafValues>\n            -3.1391140818595886e-01 7.1605153381824493e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2177 -4.8291690647602081e-02</internalNodes>\n          <leafValues>\n            2.5488480925559998e-01 -2.1891580894589424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2178 8.4315962158143520e-04</internalNodes>\n          <leafValues>\n            -1.6529269516468048e-01 8.9575611054897308e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2179 -1.0773389786481857e-01</internalNodes>\n          <leafValues>\n            -6.0115939378738403e-01 3.3779250225052238e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2180 -4.5969419181346893e-02</internalNodes>\n          <leafValues>\n            3.6489740014076233e-01 -3.9942290633916855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2181 -1.6649639233946800e-02</internalNodes>\n          <leafValues>\n            -1.1858119815587997e-01 1.0585139691829681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2182 -1.4521550387144089e-02</internalNodes>\n          <leafValues>\n            -3.7954211235046387e-01 3.4867148846387863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2183 1.3591590104624629e-03</internalNodes>\n          <leafValues>\n            -2.3180609941482544e-01 5.0401471555233002e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2184 -5.8343587443232536e-04</internalNodes>\n          <leafValues>\n            -2.8496581315994263e-01 4.0894281119108200e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2185 7.9833306372165680e-03</internalNodes>\n          <leafValues>\n            -3.6992359906435013e-02 1.6985300183296204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2186 9.9762203171849251e-04</internalNodes>\n          <leafValues>\n            6.4871042966842651e-02 -1.8648339807987213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2187 -4.6869087964296341e-03</internalNodes>\n          <leafValues>\n            7.6987423002719879e-02 -8.1482626497745514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2188 3.0047740787267685e-02</internalNodes>\n          <leafValues>\n            -2.9839929193258286e-02 4.3676841259002686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2189 1.8069539219141006e-02</internalNodes>\n          <leafValues>\n            2.7509700506925583e-02 -4.2724269628524780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2190 -1.5088430047035217e-01</internalNodes>\n          <leafValues>\n            -6.7918521165847778e-01 1.8012860789895058e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2191 -2.5836290791630745e-02</internalNodes>\n          <leafValues>\n            2.5797989964485168e-01 -3.5906858742237091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2192 1.8183529376983643e-02</internalNodes>\n          <leafValues>\n            3.5895019769668579e-02 -3.7197691202163696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2193 6.3127309083938599e-02</internalNodes>\n          <leafValues>\n            -7.3392972350120544e-02 1.2563429772853851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2194 -6.6507689189165831e-04</internalNodes>\n          <leafValues>\n            8.5442617535591125e-02 -1.5228550136089325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2195 1.0104980319738388e-02</internalNodes>\n          <leafValues>\n            3.4569118171930313e-02 -2.2657699882984161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2196 -1.2355949729681015e-02</internalNodes>\n          <leafValues>\n            1.5785010159015656e-01 -7.4710778892040253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2197 1.5728179365396500e-02</internalNodes>\n          <leafValues>\n            6.8844422698020935e-02 -1.6961769759654999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2198 1.5084549886523746e-05</internalNodes>\n          <leafValues>\n            -1.3695539534091949e-01 9.0837597846984863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2199 2.9634479433298111e-02</internalNodes>\n          <leafValues>\n            4.9822349101305008e-02 -2.6809689402580261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2200 2.8015200048685074e-02</internalNodes>\n          <leafValues>\n            -8.1799760460853577e-02 1.7842799425125122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2201 2.3299450986087322e-03</internalNodes>\n          <leafValues>\n            6.9535210728645325e-02 -1.8205040693283081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2202 1.3453120365738869e-02</internalNodes>\n          <leafValues>\n            -7.0231497287750244e-02 1.8492579460144043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2203 1.4049040153622627e-02</internalNodes>\n          <leafValues>\n            7.6328299939632416e-02 -1.7219689488410950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2204 -1.4648989774286747e-02</internalNodes>\n          <leafValues>\n            3.4281060099601746e-01 -4.3134819716215134e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2205 1.4879769878461957e-04</internalNodes>\n          <leafValues>\n            -2.7614209055900574e-01 7.3140732944011688e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2206 -6.8892319686710835e-03</internalNodes>\n          <leafValues>\n            -1.8386749923229218e-01 6.5872021019458771e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2207 1.2898260029032826e-03</internalNodes>\n          <leafValues>\n            -1.1688020080327988e-01 1.1173330247402191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2208 -2.5763860321603715e-04</internalNodes>\n          <leafValues>\n            8.9391976594924927e-02 -1.4183540642261505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2209 1.3652349822223186e-02</internalNodes>\n          <leafValues>\n            2.5085829198360443e-02 -1.7959770560264587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2210 -5.7484027929604053e-03</internalNodes>\n          <leafValues>\n            1.6128179430961609e-01 -7.9023167490959167e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2211 -1.1682719923555851e-02</internalNodes>\n          <leafValues>\n            -1.8493950366973877e-01 4.5419961214065552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2212 2.7498970739543438e-03</internalNodes>\n          <leafValues>\n            -6.5800942480564117e-02 1.9426700472831726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2213 -1.1797569459304214e-03</internalNodes>\n          <leafValues>\n            5.3563870489597321e-02 -5.5225171148777008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2214 -3.7005849182605743e-02</internalNodes>\n          <leafValues>\n            -5.1369887590408325e-01 2.4779239669442177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2215 2.3432020097970963e-02</internalNodes>\n          <leafValues>\n            1.4517559669911861e-02 -3.2621389627456665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2216 -2.4803660809993744e-02</internalNodes>\n          <leafValues>\n            4.1374489665031433e-01 -3.1516589224338531e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2217 -9.1133005917072296e-03</internalNodes>\n          <leafValues>\n            -2.3262369632720947e-01 6.5307170152664185e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2218 -7.2223007678985596e-02</internalNodes>\n          <leafValues>\n            3.1365010142326355e-01 -4.0287811309099197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2219 6.4163007773458958e-03</internalNodes>\n          <leafValues>\n            4.4151920825242996e-02 -1.4439010620117188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2220 5.4361939430236816e-02</internalNodes>\n          <leafValues>\n            -4.9821659922599792e-02 2.6239651441574097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2221 -5.9238062240183353e-03</internalNodes>\n          <leafValues>\n            7.4054516851902008e-02 -7.2215773165225983e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2222 -3.4175089094787836e-03</internalNodes>\n          <leafValues>\n            -3.0714958906173706e-01 3.9461899548768997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2223 1.1367879807949066e-02</internalNodes>\n          <leafValues>\n            -4.8698928207159042e-02 1.0077890008687973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2224 2.3361030034720898e-03</internalNodes>\n          <leafValues>\n            4.9539480358362198e-02 -2.3815050721168518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2225 -7.2044372791424394e-04</internalNodes>\n          <leafValues>\n            9.6084482967853546e-02 -9.8123528063297272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2226 -3.4777939436025918e-04</internalNodes>\n          <leafValues>\n            1.0546120256185532e-01 -1.0600890219211578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2227 -6.6456091590225697e-03</internalNodes>\n          <leafValues>\n            -1.7471200227737427e-01 4.7264128923416138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2228 4.4261440634727478e-02</internalNodes>\n          <leafValues>\n            -4.0742669254541397e-02 2.8637731075286865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2229 3.4959740936756134e-02</internalNodes>\n          <leafValues>\n            1.3479149900376797e-02 -4.4233149290084839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2230 -2.5971820577979088e-02</internalNodes>\n          <leafValues>\n            -4.6334660053253174e-01 2.5301979854702950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2231 1.8818200333043933e-03</internalNodes>\n          <leafValues>\n            -7.2344467043876648e-02 1.5579940378665924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2232 3.2623678445816040e-02</internalNodes>\n          <leafValues>\n            1.8171060830354691e-02 -6.3472539186477661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2233 1.5041300095617771e-02</internalNodes>\n          <leafValues>\n            -5.3582038730382919e-02 1.8320439755916595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2234 -5.5875489488244057e-03</internalNodes>\n          <leafValues>\n            1.5442819893360138e-01 -6.9521442055702209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2235 3.9029030594974756e-03</internalNodes>\n          <leafValues>\n            7.2893843054771423e-02 -1.3542290031909943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2236 4.5964889228343964e-02</internalNodes>\n          <leafValues>\n            2.1482560783624649e-02 -5.4532879590988159e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2237 -7.4338473379611969e-02</internalNodes>\n          <leafValues>\n            -7.1795612573623657e-01 3.5341270267963409e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2238 2.0902850665152073e-03</internalNodes>\n          <leafValues>\n            4.3308760970830917e-02 -2.5078159570693970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2239 -7.5608417391777039e-02</internalNodes>\n          <leafValues>\n            2.7488818764686584e-01 -3.4967329353094101e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2240 5.1200888119637966e-03</internalNodes>\n          <leafValues>\n            4.7384329140186310e-02 -2.6794269680976868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2241 -2.0140670239925385e-02</internalNodes>\n          <leafValues>\n            7.2039432823657990e-02 -4.4537059962749481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2242 2.6719279587268829e-02</internalNodes>\n          <leafValues>\n            -6.0671631246805191e-02 2.4019980430603027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2243 -2.3299809545278549e-03</internalNodes>\n          <leafValues>\n            -1.4848700165748596e-01 6.3779368996620178e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2244 1.4248250052332878e-02</internalNodes>\n          <leafValues>\n            3.9471931755542755e-02 -2.7790299057960510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2245 -6.8691447377204895e-02</internalNodes>\n          <leafValues>\n            3.1307551264762878e-01 -2.2111769765615463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2246 -6.5213128924369812e-02</internalNodes>\n          <leafValues>\n            3.6191588640213013e-01 -3.1089780852198601e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2247 -1.4469860121607780e-02</internalNodes>\n          <leafValues>\n            -1.9942939281463623e-01 2.6489760726690292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2248 -9.4575136899948120e-03</internalNodes>\n          <leafValues>\n            -2.9698899388313293e-01 3.6693658679723740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2249 -1.8222700059413910e-01</internalNodes>\n          <leafValues>\n            -4.0887731313705444e-01 7.3904348537325859e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2250 -2.3991869390010834e-01</internalNodes>\n          <leafValues>\n            -9.5519691705703735e-01 1.0895749554038048e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2251 -1.4964600093662739e-02</internalNodes>\n          <leafValues>\n            1.3325509428977966e-01 -6.4146116375923157e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2252 1.1056339740753174e-01</internalNodes>\n          <leafValues>\n            -2.1147079765796661e-02 5.2262008190155029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2253 -1.1857460252940655e-02</internalNodes>\n          <leafValues>\n            -2.6103261113166809e-01 2.4917129427194595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2254 1.7032399773597717e-02</internalNodes>\n          <leafValues>\n            -4.2655009776353836e-02 2.4324589967727661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2255 -6.6315201111137867e-03</internalNodes>\n          <leafValues>\n            -2.7996608614921570e-01 4.7972209751605988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2256 -1.3527619885280728e-03</internalNodes>\n          <leafValues>\n            -1.7117640376091003e-01 6.8423986434936523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2257 5.8159399777650833e-02</internalNodes>\n          <leafValues>\n            1.4452300034463406e-02 -3.6640700697898865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2258 9.6522513777017593e-03</internalNodes>\n          <leafValues>\n            6.4102686941623688e-02 -1.9386090338230133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2259 4.6681659296154976e-03</internalNodes>\n          <leafValues>\n            -6.4305387437343597e-02 1.2191460281610489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2260 4.8228199593722820e-03</internalNodes>\n          <leafValues>\n            4.2306859046220779e-02 -2.5486230850219727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2261 7.2615491226315498e-03</internalNodes>\n          <leafValues>\n            -4.4169031083583832e-02 1.9888080656528473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2262 2.7650638949126005e-03</internalNodes>\n          <leafValues>\n            5.6748721748590469e-02 -1.8802900612354279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2263 -1.2599739711731672e-03</internalNodes>\n          <leafValues>\n            2.9681721329689026e-01 -3.0795339494943619e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2264 -1.4079749584197998e-02</internalNodes>\n          <leafValues>\n            1.2790699303150177e-01 -7.7078782021999359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2265 4.1978028602898121e-03</internalNodes>\n          <leafValues>\n            -3.2651171088218689e-02 4.4282011687755585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2266 7.4891891563311219e-04</internalNodes>\n          <leafValues>\n            -1.1801239848136902e-01 1.0196279734373093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2267 3.9699498564004898e-02</internalNodes>\n          <leafValues>\n            1.6263889148831367e-02 -3.2391819357872009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2268 2.9685199260711670e-03</internalNodes>\n          <leafValues>\n            5.0729360431432724e-02 -2.2522340714931488e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2269 3.0207540839910507e-03</internalNodes>\n          <leafValues>\n            -6.4312063157558441e-02 6.3618481159210205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2270 -1.0064570233225822e-03</internalNodes>\n          <leafValues>\n            -2.2469790279865265e-01 4.3256420642137527e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2271 1.6607339493930340e-03</internalNodes>\n          <leafValues>\n            -5.8126531541347504e-02 5.9540931135416031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2272 4.9640638753771782e-03</internalNodes>\n          <leafValues>\n            -4.8804368823766708e-02 1.8437810242176056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2273 1.7194069921970367e-01</internalNodes>\n          <leafValues>\n            3.6377978976815939e-03 -1.0000029802322388e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2274 -2.0992290228605270e-03</internalNodes>\n          <leafValues>\n            1.1951360106468201e-01 -8.8613957166671753e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2275 -4.0529989637434483e-03</internalNodes>\n          <leafValues>\n            -2.0199899375438690e-01 5.3564589470624924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2276 1.5536800492554903e-03</internalNodes>\n          <leafValues>\n            -9.6797212958335876e-02 9.5135137438774109e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2277 2.2837040014564991e-03</internalNodes>\n          <leafValues>\n            -4.5535419136285782e-02 1.4682759344577789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2278 -1.0094629600644112e-02</internalNodes>\n          <leafValues>\n            -1.8853099644184113e-01 4.8864368349313736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2279 -7.0200799964368343e-03</internalNodes>\n          <leafValues>\n            1.4628750085830688e-01 -4.2158648371696472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2280 3.4074939321726561e-03</internalNodes>\n          <leafValues>\n            -7.7149718999862671e-02 1.3702009618282318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2281 3.9907437749207020e-03</internalNodes>\n          <leafValues>\n            -6.4178831875324249e-02 8.5484616458415985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2282 2.0611559972167015e-02</internalNodes>\n          <leafValues>\n            3.7988938391208649e-02 -2.9359170794487000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2283 -1.9768020138144493e-03</internalNodes>\n          <leafValues>\n            6.0499001294374466e-02 -1.6910280287265778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2284 -2.4783300235867500e-02</internalNodes>\n          <leafValues>\n            -5.5052608251571655e-01 1.5831759199500084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2285 -1.5710920095443726e-02</internalNodes>\n          <leafValues>\n            1.9716830551624298e-01 -3.1884010881185532e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2286 1.0070169810205698e-03</internalNodes>\n          <leafValues>\n            4.6532750129699707e-02 -2.1853099763393402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2287 -3.7466569337993860e-03</internalNodes>\n          <leafValues>\n            -2.5379389524459839e-01 3.9463929831981659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2288 4.5849520713090897e-02</internalNodes>\n          <leafValues>\n            1.3636340387165546e-02 -6.2976127862930298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2289 -1.1040110141038895e-02</internalNodes>\n          <leafValues>\n            2.4939639866352081e-01 -3.8895469158887863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2290 -4.2415689677000046e-03</internalNodes>\n          <leafValues>\n            -2.1564769744873047e-01 4.5613430440425873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2291 -3.1175611075013876e-03</internalNodes>\n          <leafValues>\n            1.0641460120677948e-01 -1.2268310040235519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2292 -2.3725910577923059e-03</internalNodes>\n          <leafValues>\n            2.0573639869689941e-01 -6.6338561475276947e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2293 -3.6906299646943808e-03</internalNodes>\n          <leafValues>\n            -1.5802620351314545e-01 6.6760621964931488e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2294 1.0908120311796665e-03</internalNodes>\n          <leafValues>\n            -1.7830020189285278e-01 5.7181321084499359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2295 -1.3929420150816441e-02</internalNodes>\n          <leafValues>\n            -1.4185859262943268e-01 5.8131370693445206e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2296 -2.8283370658755302e-02</internalNodes>\n          <leafValues>\n            2.6451000571250916e-01 -4.5332599431276321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2297 -3.9213709533214569e-04</internalNodes>\n          <leafValues>\n            7.6039716601371765e-02 -8.4666326642036438e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2298 -2.0424809772521257e-03</internalNodes>\n          <leafValues>\n            -1.6393850743770599e-01 5.7595171034336090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2299 -6.0634050518274307e-02</internalNodes>\n          <leafValues>\n            2.4343550205230713e-01 -1.3630810193717480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2300 5.5472988635301590e-02</internalNodes>\n          <leafValues>\n            1.2274630367755890e-02 -7.6161897182464600e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2301 2.6451710611581802e-02</internalNodes>\n          <leafValues>\n            -1.6103159636259079e-02 1.4696520566940308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2302 -6.5615847706794739e-02</internalNodes>\n          <leafValues>\n            -6.6936880350112915e-01 1.2788389809429646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2303 -2.9287360608577728e-02</internalNodes>\n          <leafValues>\n            3.8422039151191711e-01 -2.0979570224881172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2304 -8.7814256548881531e-02</internalNodes>\n          <leafValues>\n            -5.5386292934417725e-01 1.6540929675102234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2305 4.0213011205196381e-02</internalNodes>\n          <leafValues>\n            5.5229798890650272e-03 -1.5169410407543182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2306 7.5501110404729843e-03</internalNodes>\n          <leafValues>\n            -5.3081061691045761e-02 1.6791249811649323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2307 7.5557199306786060e-03</internalNodes>\n          <leafValues>\n            4.9213249236345291e-02 -1.8097420036792755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2308 4.2264759540557861e-02</internalNodes>\n          <leafValues>\n            9.8954448476433754e-03 -8.7265938520431519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2309 -1.5821179375052452e-02</internalNodes>\n          <leafValues>\n            -4.9515271186828613e-01 1.0424910113215446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2310 4.4557699002325535e-03</internalNodes>\n          <leafValues>\n            -5.2823610603809357e-02 1.7409110069274902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2311 -6.3567152246832848e-03</internalNodes>\n          <leafValues>\n            1.0278800129890442e-01 -9.4062283635139465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2312 2.1308339200913906e-03</internalNodes>\n          <leafValues>\n            -5.7343449443578720e-02 1.5747800469398499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2313 6.4157308079302311e-03</internalNodes>\n          <leafValues>\n            4.1112188249826431e-02 -2.6482531428337097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2314 -1.0572739690542221e-01</internalNodes>\n          <leafValues>\n            -9.2719399929046631e-01 8.6396038532257080e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2315 6.1298489570617676e-02</internalNodes>\n          <leafValues>\n            1.1242480017244816e-02 -5.2976250648498535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2316 1.0018650442361832e-02</internalNodes>\n          <leafValues>\n            -6.1801191419363022e-02 1.5441860258579254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2317 2.3613891098648310e-03</internalNodes>\n          <leafValues>\n            -3.9282340556383133e-02 8.8061779737472534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2318 -4.7975129564292729e-04</internalNodes>\n          <leafValues>\n            -1.0663200169801712e-01 8.3887517452239990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2319 7.3982410132884979e-02</internalNodes>\n          <leafValues>\n            4.7058681957423687e-03 -6.0129082202911377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2320 6.3821911811828613e-02</internalNodes>\n          <leafValues>\n            1.1372390203177929e-02 -7.4044847488403320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2321 4.6818208647891879e-04</internalNodes>\n          <leafValues>\n            -7.6545506715774536e-02 5.3563810884952545e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2322 4.3877989053726196e-01</internalNodes>\n          <leafValues>\n            1.2420959770679474e-02 -6.8776041269302368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2323 2.8831470757722855e-02</internalNodes>\n          <leafValues>\n            1.5150110237300396e-02 -1.3229629397392273e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2324 6.7726813256740570e-02</internalNodes>\n          <leafValues>\n            -1.8901329487562180e-02 4.8799818754196167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2325 9.5125466585159302e-02</internalNodes>\n          <leafValues>\n            1.2518660165369511e-02 -7.4607741832733154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2326 3.4629011061042547e-03</internalNodes>\n          <leafValues>\n            -6.4396522939205170e-02 1.3450330495834351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2327 -1.0220340453088284e-02</internalNodes>\n          <leafValues>\n            -1.2102399766445160e-01 3.5081598907709122e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2328 -2.5227791070938110e-01</internalNodes>\n          <leafValues>\n            5.3186398744583130e-01 -1.7373610287904739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2329 4.7006108798086643e-03</internalNodes>\n          <leafValues>\n            2.6264479383826256e-02 -1.6305670142173767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2330 8.0487072467803955e-02</internalNodes>\n          <leafValues>\n            -1.1193430051207542e-02 7.3598998785018921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2331 -3.8025099784135818e-03</internalNodes>\n          <leafValues>\n            -1.1756920069456100e-01 6.4899243414402008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2332 -5.1970399916172028e-02</internalNodes>\n          <leafValues>\n            2.1764869987964630e-01 -4.6299580484628677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2333 -1.2381119653582573e-02</internalNodes>\n          <leafValues>\n            -1.3483320176601410e-01 7.0956252515316010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2334 4.6567008830606937e-03</internalNodes>\n          <leafValues>\n            8.4818847477436066e-02 -1.0850810259580612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2335 2.4520549923181534e-02</internalNodes>\n          <leafValues>\n            -5.6512400507926941e-02 2.0845490694046021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2336 -6.0728159733116627e-03</internalNodes>\n          <leafValues>\n            1.0253319889307022e-01 -1.0739710181951523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2337 1.3803950278088450e-03</internalNodes>\n          <leafValues>\n            -1.2355019897222519e-01 3.8523931056261063e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2338 8.3129312843084335e-03</internalNodes>\n          <leafValues>\n            5.0441969186067581e-02 -1.7901860177516937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2339 6.8436772562563419e-04</internalNodes>\n          <leafValues>\n            -6.1334688216447830e-02 4.9543838948011398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2340 7.1589440107345581e-02</internalNodes>\n          <leafValues>\n            1.1258729733526707e-02 -7.2902548313140869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2341 -3.9251110865734518e-04</internalNodes>\n          <leafValues>\n            -2.9022648930549622e-01 1.3908719643950462e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2342 -1.6948020085692406e-02</internalNodes>\n          <leafValues>\n            1.4616020023822784e-01 -5.6298948824405670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2343 2.3180670104920864e-03</internalNodes>\n          <leafValues>\n            2.0289139449596405e-01 -4.3649390339851379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2344 7.9764174297451973e-03</internalNodes>\n          <leafValues>\n            -4.8768021166324615e-02 1.8070909380912781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2345 -1.1533150449395180e-02</internalNodes>\n          <leafValues>\n            -1.4238800108432770e-01 5.6691840291023254e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2346 -5.4723728680983186e-04</internalNodes>\n          <leafValues>\n            -2.3844610154628754e-01 3.2061301171779633e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2347 -1.1751300189644098e-03</internalNodes>\n          <leafValues>\n            2.5394979864358902e-02 -8.9872613549232483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2348 1.3655239716172218e-02</internalNodes>\n          <leafValues>\n            -2.7230219915509224e-02 3.3419778943061829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2349 4.1803810745477676e-03</internalNodes>\n          <leafValues>\n            2.6914540678262711e-02 -1.2557040154933929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2350 3.1565671088173985e-04</internalNodes>\n          <leafValues>\n            6.2177520245313644e-02 -1.3345809280872345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2351 7.4048307724297047e-03</internalNodes>\n          <leafValues>\n            3.1548298895359039e-02 -2.8247129917144775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2352 -1.3977429829537868e-02</internalNodes>\n          <leafValues>\n            1.2342610210180283e-01 -8.0493018031120300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2353 -1.4240520074963570e-02</internalNodes>\n          <leafValues>\n            -2.3979499936103821e-01 1.8016669899225235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2354 -2.2901569306850433e-01</internalNodes>\n          <leafValues>\n            -4.2895668745040894e-01 2.0032370463013649e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2355 2.6522560045123100e-02</internalNodes>\n          <leafValues>\n            -2.9899509623646736e-02 3.1195539236068726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2356 5.0723659805953503e-03</internalNodes>\n          <leafValues>\n            6.2117800116539001e-02 -1.5442310273647308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2357 2.2340700961649418e-03</internalNodes>\n          <leafValues>\n            3.0717259272933006e-02 -1.4656220376491547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2358 -4.6348381787538528e-02</internalNodes>\n          <leafValues>\n            -6.7844080924987793e-01 1.2258620001375675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2359 -3.0467000324279070e-03</internalNodes>\n          <leafValues>\n            1.0547509789466858e-01 -5.4426789283752441e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2360 7.0065702311694622e-03</internalNodes>\n          <leafValues>\n            -5.2537959069013596e-02 2.4259300529956818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2361 -2.7783720288425684e-03</internalNodes>\n          <leafValues>\n            -1.0732100158929825e-01 7.4064619839191437e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2362 -4.2294961167499423e-04</internalNodes>\n          <leafValues>\n            6.8151466548442841e-02 -1.4117160439491272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2363 -8.7614007294178009e-02</internalNodes>\n          <leafValues>\n            -6.5271192789077759e-01 3.3460480626672506e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2364 1.2552930042147636e-02</internalNodes>\n          <leafValues>\n            3.3235169947147369e-02 -2.6571980118751526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2365 -2.1863510832190514e-02</internalNodes>\n          <leafValues>\n            1.5599909424781799e-01 -3.7561919540166855e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>189</maxWeakCount>\n      <stageThreshold>-1.6477719545364380e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2366 1.9715659320354462e-02</internalNodes>\n          <leafValues>\n            -4.0786159038543701e-01 1.6317300498485565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2367 4.9977540969848633e-02</internalNodes>\n          <leafValues>\n            -2.5753161311149597e-01 2.3471170663833618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2368 3.4774339292198420e-04</internalNodes>\n          <leafValues>\n            -2.7148011326789856e-01 1.5202049911022186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2369 8.2787703722715378e-03</internalNodes>\n          <leafValues>\n            8.6229562759399414e-02 -4.2272651195526123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2370 1.2891810387372971e-02</internalNodes>\n          <leafValues>\n            -2.7589491009712219e-01 9.9677331745624542e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2371 -5.2444688044488430e-03</internalNodes>\n          <leafValues>\n            1.4687310159206390e-01 -1.8090559542179108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2372 4.7363140038214624e-04</internalNodes>\n          <leafValues>\n            1.1544570326805115e-01 -2.3242090642452240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2373 1.0767930187284946e-02</internalNodes>\n          <leafValues>\n            -2.3256160318851471e-01 5.7885929942131042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2374 -2.0576089154928923e-03</internalNodes>\n          <leafValues>\n            -4.0554818511009216e-01 6.1086129397153854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2375 1.2648279964923859e-01</internalNodes>\n          <leafValues>\n            2.5926080998033285e-03 -6.0955828428268433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2376 2.2029090672731400e-02</internalNodes>\n          <leafValues>\n            -2.3835970461368561e-01 1.1523839831352234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2377 8.6279091192409396e-04</internalNodes>\n          <leafValues>\n            -2.4382559955120087e-01 4.8174999654293060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2378 6.1232252046465874e-03</internalNodes>\n          <leafValues>\n            -3.3293130993843079e-01 7.3860548436641693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2379 1.8321570241823792e-03</internalNodes>\n          <leafValues>\n            7.4964806437492371e-02 -3.6050680279731750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2380 1.3176959939301014e-02</internalNodes>\n          <leafValues>\n            7.8650407493114471e-02 -3.0009350180625916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2381 -1.5092800371348858e-02</internalNodes>\n          <leafValues>\n            -4.5663359761238098e-01 4.5359719544649124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2382 -3.9765550754964352e-03</internalNodes>\n          <leafValues>\n            -3.7404119968414307e-01 5.7276591658592224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2383 -1.2558099813759327e-02</internalNodes>\n          <leafValues>\n            1.8079389631748199e-01 -9.0798392891883850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2384 1.1346530169248581e-02</internalNodes>\n          <leafValues>\n            6.7842416465282440e-02 -3.3354648947715759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2385 3.0938379932194948e-03</internalNodes>\n          <leafValues>\n            -6.4362257719039917e-02 1.6250990331172943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2386 -7.9837916418910027e-03</internalNodes>\n          <leafValues>\n            -2.8237259387969971e-01 6.4243227243423462e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2387 5.3257539868354797e-02</internalNodes>\n          <leafValues>\n            -1.1842279881238937e-01 1.5403720736503601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2388 -3.2308440655469894e-02</internalNodes>\n          <leafValues>\n            -3.8174659013748169e-01 4.6444781124591827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2389 7.4837519787251949e-03</internalNodes>\n          <leafValues>\n            1.0087630152702332e-01 -1.7848369479179382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2390 1.4075540006160736e-02</internalNodes>\n          <leafValues>\n            -1.3612699508666992e-01 1.2589199841022491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2391 1.1945860460400581e-02</internalNodes>\n          <leafValues>\n            -4.6452131122350693e-02 3.1823348999023438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2392 4.9774140119552612e-02</internalNodes>\n          <leafValues>\n            3.7373390048742294e-02 -4.3919241428375244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2393 1.1070669861510396e-03</internalNodes>\n          <leafValues>\n            3.3163610845804214e-02 -1.8855419754981995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2394 -2.8594989329576492e-02</internalNodes>\n          <leafValues>\n            -3.6906918883323669e-01 4.1930228471755981e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2395 -7.6013091020286083e-03</internalNodes>\n          <leafValues>\n            5.2191480994224548e-02 -2.4689050018787384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2396 1.3114510476589203e-01</internalNodes>\n          <leafValues>\n            -5.7957381010055542e-02 2.7318599820137024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2397 -7.4186350502714049e-06</internalNodes>\n          <leafValues>\n            1.1802060157060623e-01 -1.0745350271463394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2398 3.1472120434045792e-02</internalNodes>\n          <leafValues>\n            -7.1733877062797546e-02 2.5617578625679016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2399 3.8700491189956665e-02</internalNodes>\n          <leafValues>\n            4.2863689363002777e-02 -6.0855817794799805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2400 -3.9322520606219769e-03</internalNodes>\n          <leafValues>\n            -2.2127309441566467e-01 6.5617948770523071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2401 2.3144779726862907e-02</internalNodes>\n          <leafValues>\n            -6.8200387060642242e-02 1.6107009351253510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2402 4.4043041765689850e-02</internalNodes>\n          <leafValues>\n            -5.4092731326818466e-02 2.7009010314941406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2403 1.6363389790058136e-02</internalNodes>\n          <leafValues>\n            -6.7165039479732513e-02 1.4292019605636597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2404 4.0575690567493439e-02</internalNodes>\n          <leafValues>\n            2.7095599099993706e-02 -5.1922810077667236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2405 -8.1591978669166565e-02</internalNodes>\n          <leafValues>\n            3.6290401220321655e-01 -5.0641149282455444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2406 9.6564572304487228e-03</internalNodes>\n          <leafValues>\n            -6.5868496894836426e-02 2.0459869503974915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2407 4.3875370174646378e-02</internalNodes>\n          <leafValues>\n            2.8287120163440704e-02 -4.7316759824752808e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2408 -5.3375590592622757e-02</internalNodes>\n          <leafValues>\n            -6.3912391662597656e-01 1.9213579595088959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2409 -4.2789369821548462e-02</internalNodes>\n          <leafValues>\n            3.7414470314979553e-01 -3.6020539700984955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2410 -1.4193350449204445e-02</internalNodes>\n          <leafValues>\n            -3.0562171339988708e-01 5.1724649965763092e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2411 -5.2947051823139191e-02</internalNodes>\n          <leafValues>\n            2.2203849256038666e-01 -2.7123190462589264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2412 3.0441719293594360e-01</internalNodes>\n          <leafValues>\n            2.8107000514864922e-02 -5.1486051082611084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2413 9.6917577087879181e-02</internalNodes>\n          <leafValues>\n            7.5603500008583069e-03 -5.4642218351364136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2414 4.5469900942407548e-04</internalNodes>\n          <leafValues>\n            -2.2257779538631439e-01 5.9663061052560806e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2415 6.4785419963300228e-03</internalNodes>\n          <leafValues>\n            7.0507273077964783e-02 -8.6525917053222656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2416 9.5442440360784531e-03</internalNodes>\n          <leafValues>\n            1.1858390271663666e-01 -1.2846529483795166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2417 1.0664040222764015e-02</internalNodes>\n          <leafValues>\n            6.0251180082559586e-02 -2.3454129695892334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2418 -5.9601400047540665e-02</internalNodes>\n          <leafValues>\n            -4.9083110690116882e-01 3.1179970130324364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2419 -1.4810609631240368e-02</internalNodes>\n          <leafValues>\n            1.7928470671176910e-01 -5.3788300603628159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2420 2.4988459423184395e-02</internalNodes>\n          <leafValues>\n            4.5585051178932190e-02 -3.1542968750000000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2421 3.7159871309995651e-02</internalNodes>\n          <leafValues>\n            -2.5552989915013313e-02 1.2824480235576630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2422 -3.6023799329996109e-02</internalNodes>\n          <leafValues>\n            3.0338558554649353e-01 -5.0723869353532791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2423 -4.0073681622743607e-02</internalNodes>\n          <leafValues>\n            -3.5327419638633728e-01 2.5542749091982841e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2424 1.0118799656629562e-01</internalNodes>\n          <leafValues>\n            1.4954050071537495e-02 -8.5275518894195557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2425 1.2551939487457275e-01</internalNodes>\n          <leafValues>\n            -5.5777598172426224e-02 3.5162329673767090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2426 -1.0094200260937214e-02</internalNodes>\n          <leafValues>\n            -7.9517722129821777e-01 1.6658289358019829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2427 2.7957880869507790e-02</internalNodes>\n          <leafValues>\n            3.0823230743408203e-02 -2.9073038697242737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2428 3.6360241472721100e-02</internalNodes>\n          <leafValues>\n            2.7960959821939468e-02 -4.7691631317138672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2429 -9.9100463092327118e-02</internalNodes>\n          <leafValues>\n            -3.0804800987243652e-01 4.2725458741188049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2430 -5.8572040870785713e-04</internalNodes>\n          <leafValues>\n            5.9227660298347473e-02 -2.3531119525432587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2431 -5.1202569156885147e-02</internalNodes>\n          <leafValues>\n            -5.2199620008468628e-01 1.4952239580452442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2432 -6.7564798519015312e-03</internalNodes>\n          <leafValues>\n            1.4085020124912262e-01 -9.0452179312705994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2433 -4.8959780484437943e-02</internalNodes>\n          <leafValues>\n            -6.6878128051757812e-01 2.0590359345078468e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2434 1.4971289783716202e-04</internalNodes>\n          <leafValues>\n            -1.8641050159931183e-01 6.5254852175712585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2435 -3.4409679472446442e-02</internalNodes>\n          <leafValues>\n            -6.5235960483551025e-01 1.4693650417029858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2436 6.4725689589977264e-02</internalNodes>\n          <leafValues>\n            1.2329719960689545e-02 -8.4077721834182739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2437 1.7888710135594010e-03</internalNodes>\n          <leafValues>\n            -3.3088308572769165e-01 2.3944050073623657e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2438 7.4999839067459106e-02</internalNodes>\n          <leafValues>\n            2.6347629725933075e-02 -4.4841340184211731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2439 -1.3695800304412842e-01</internalNodes>\n          <leafValues>\n            -5.7192331552505493e-01 1.2316530337557197e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2440 8.7679617106914520e-02</internalNodes>\n          <leafValues>\n            9.1852411627769470e-02 -1.4714670181274414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2441 -1.4691170305013657e-02</internalNodes>\n          <leafValues>\n            -2.7389299869537354e-01 5.5910948663949966e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2442 1.8059760332107544e-01</internalNodes>\n          <leafValues>\n            1.8475739285349846e-02 -6.2247991561889648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2443 -6.9349152036011219e-03</internalNodes>\n          <leafValues>\n            -1.6723890602588654e-01 4.2348120361566544e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2444 -4.5395728200674057e-02</internalNodes>\n          <leafValues>\n            5.6401878595352173e-01 -2.0763039588928223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2445 -3.7714779376983643e-02</internalNodes>\n          <leafValues>\n            -4.9726399779319763e-01 1.3457749970257282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2446 -6.6780918277800083e-03</internalNodes>\n          <leafValues>\n            1.5654189884662628e-01 -7.9254247248172760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2447 -3.5693418234586716e-02</internalNodes>\n          <leafValues>\n            3.2214561104774475e-01 -2.7933960780501366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2448 2.0231369417160749e-03</internalNodes>\n          <leafValues>\n            -2.0472900569438934e-01 6.0136921703815460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2449 7.7706989832222462e-03</internalNodes>\n          <leafValues>\n            -6.2275718897581100e-02 1.3619600236415863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2450 -2.3846060037612915e-02</internalNodes>\n          <leafValues>\n            -6.4280962944030762e-01 1.9216870889067650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2451 3.8112789392471313e-02</internalNodes>\n          <leafValues>\n            1.6926249489188194e-02 -3.2001879811286926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2452 -8.1509854644536972e-03</internalNodes>\n          <leafValues>\n            -1.8527400493621826e-01 6.7431643605232239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2453 3.0041670799255371e-01</internalNodes>\n          <leafValues>\n            -3.4997869282960892e-02 3.7719568610191345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2454 3.2188769546337426e-04</internalNodes>\n          <leafValues>\n            -4.3860068917274475e-01 3.1008180230855942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2455 9.9805131554603577e-02</internalNodes>\n          <leafValues>\n            2.1043010056018829e-02 -2.4182139337062836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2456 -1.3132029771804810e-01</internalNodes>\n          <leafValues>\n            -6.0744529962539673e-01 1.9127229228615761e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2457 -4.4457878917455673e-02</internalNodes>\n          <leafValues>\n            -2.8207719326019287e-01 1.6199590638279915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2458 -5.3282459266483784e-03</internalNodes>\n          <leafValues>\n            1.9118839502334595e-01 -6.4483523368835449e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2459 4.0367528796195984e-02</internalNodes>\n          <leafValues>\n            1.6362620517611504e-02 -5.5463272333145142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2460 -8.7769925594329834e-03</internalNodes>\n          <leafValues>\n            -3.8903188705444336e-01 3.1277969479560852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2461 -1.5031780116260052e-02</internalNodes>\n          <leafValues>\n            4.4966968894004822e-01 -1.8708650022745132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2462 -3.2085120677947998e-02</internalNodes>\n          <leafValues>\n            2.2872669994831085e-01 -5.2647799253463745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2463 1.7735429573804140e-03</internalNodes>\n          <leafValues>\n            1.0644569993019104e-01 -1.1970230191946030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2464 5.9195980429649353e-02</internalNodes>\n          <leafValues>\n            -6.4485557377338409e-02 1.8440729379653931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2465 1.1976130306720734e-02</internalNodes>\n          <leafValues>\n            -4.6655338257551193e-02 2.2750610113143921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2466 -7.3619361501187086e-04</internalNodes>\n          <leafValues>\n            6.4427956938743591e-02 -1.9669359922409058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2467 1.1274980008602142e-01</internalNodes>\n          <leafValues>\n            -3.2603729516267776e-02 2.6165801286697388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2468 -2.9639130458235741e-02</internalNodes>\n          <leafValues>\n            -2.4286089837551117e-01 5.2550770342350006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2469 -4.8972599208354950e-02</internalNodes>\n          <leafValues>\n            2.9013419151306152e-01 -3.9936609566211700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2470 -2.0732060074806213e-03</internalNodes>\n          <leafValues>\n            6.6728956997394562e-02 -1.8385919928550720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2471 1.8652489781379700e-01</internalNodes>\n          <leafValues>\n            2.5788070634007454e-02 -3.0477121472358704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2472 -6.4846210181713104e-02</internalNodes>\n          <leafValues>\n            5.8964151144027710e-01 -2.1531870588660240e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2473 5.9668030589818954e-02</internalNodes>\n          <leafValues>\n            9.0434495359659195e-03 -8.9928478002548218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2474 -2.2810790687799454e-02</internalNodes>\n          <leafValues>\n            -5.5689752101898193e-01 2.1036420017480850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2475 -4.3924558907747269e-02</internalNodes>\n          <leafValues>\n            -7.7569800615310669e-01 1.3244120404124260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2476 -8.1411283463239670e-03</internalNodes>\n          <leafValues>\n            -1.6145749390125275e-01 6.3869751989841461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2477 -1.7681140452623367e-02</internalNodes>\n          <leafValues>\n            -1.7088229954242706e-01 4.4323820620775223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2478 3.5615780949592590e-01</internalNodes>\n          <leafValues>\n            1.3911530375480652e-02 -8.2366949319839478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2479 8.9791387319564819e-02</internalNodes>\n          <leafValues>\n            -3.3068671822547913e-02 3.9501950144767761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2480 -5.1039960235357285e-02</internalNodes>\n          <leafValues>\n            -4.9687319993972778e-01 2.4911910295486450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2481 4.4502970576286316e-01</internalNodes>\n          <leafValues>\n            1.3085749931633472e-02 -7.1374338865280151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2482 -3.1571299768984318e-03</internalNodes>\n          <leafValues>\n            -2.3235230147838593e-01 4.5422729104757309e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2483 2.2295509278774261e-01</internalNodes>\n          <leafValues>\n            2.5272920727729797e-02 -4.5817920565605164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2484 8.1787049770355225e-02</internalNodes>\n          <leafValues>\n            -5.6966669857501984e-02 2.0633119344711304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2485 1.2290639802813530e-02</internalNodes>\n          <leafValues>\n            1.0433530062437057e-01 -1.4129990339279175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2486 3.2738980371505022e-03</internalNodes>\n          <leafValues>\n            -1.9929160177707672e-01 5.7900499552488327e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2487 3.1915940344333649e-03</internalNodes>\n          <leafValues>\n            -2.8649568557739258e-01 3.8445938378572464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2488 -6.9429136812686920e-02</internalNodes>\n          <leafValues>\n            3.9995300769805908e-01 -2.9228420928120613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2489 3.0896291136741638e-01</internalNodes>\n          <leafValues>\n            4.5684990473091602e-03 -9.7593581676483154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2490 6.0547169297933578e-02</internalNodes>\n          <leafValues>\n            -1.7227350175380707e-01 7.3367759585380554e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2491 8.0296747386455536e-02</internalNodes>\n          <leafValues>\n            1.2790890410542488e-02 -2.9636448621749878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2492 9.8309047520160675e-02</internalNodes>\n          <leafValues>\n            1.7421530559659004e-02 -7.3428112268447876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2493 -6.0651078820228577e-02</internalNodes>\n          <leafValues>\n            -8.9268088340759277e-01 9.2950398102402687e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2494 -1.1067830026149750e-02</internalNodes>\n          <leafValues>\n            3.6940470337867737e-01 -3.2281860709190369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2495 -1.7252689227461815e-02</internalNodes>\n          <leafValues>\n            2.0163689553737640e-01 -3.0649609863758087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2496 1.1417149752378464e-01</internalNodes>\n          <leafValues>\n            -7.2567440569400787e-02 1.4580799639225006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2497 -1.1878489749506116e-04</internalNodes>\n          <leafValues>\n            6.6703669726848602e-02 -1.2044110149145126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2498 4.2538821697235107e-02</internalNodes>\n          <leafValues>\n            1.4235669374465942e-01 -9.3128196895122528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2499 4.6220790594816208e-02</internalNodes>\n          <leafValues>\n            -4.5348118990659714e-02 2.6667690277099609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2500 -1.2598860263824463e-01</internalNodes>\n          <leafValues>\n            -6.2195998430252075e-01 1.9361790269613266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2501 1.4336410164833069e-01</internalNodes>\n          <leafValues>\n            1.5602460131049156e-02 -3.4269729256629944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2502 1.4853400178253651e-02</internalNodes>\n          <leafValues>\n            -1.9399890303611755e-01 5.9365049004554749e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2503 2.9607299715280533e-02</internalNodes>\n          <leafValues>\n            2.9370859265327454e-02 -1.1840560287237167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2504 4.5151200145483017e-02</internalNodes>\n          <leafValues>\n            -3.1025370582938194e-02 4.2335650324821472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2505 1.7347050830721855e-02</internalNodes>\n          <leafValues>\n            5.2468661218881607e-02 -1.7071889340877533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2506 4.8696789890527725e-02</internalNodes>\n          <leafValues>\n            1.3757590204477310e-02 -7.3853892087936401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2507 -2.5120940059423447e-02</internalNodes>\n          <leafValues>\n            -2.6077219843864441e-01 3.6249000579118729e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2508 -1.4412039890885353e-02</internalNodes>\n          <leafValues>\n            1.8435400724411011e-01 -5.5376049131155014e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2509 1.6011130064725876e-02</internalNodes>\n          <leafValues>\n            -3.3822190016508102e-02 9.8490990698337555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2510 -6.3778877258300781e-02</internalNodes>\n          <leafValues>\n            3.9596658945083618e-01 -2.6605289429426193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2511 -1.2431790120899677e-02</internalNodes>\n          <leafValues>\n            -2.7103281021118164e-01 5.1153909415006638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2512 1.5430289506912231e-01</internalNodes>\n          <leafValues>\n            -2.9742069542407990e-02 3.6223879456520081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2513 6.8953618407249451e-02</internalNodes>\n          <leafValues>\n            1.4560540206730366e-02 -7.1308761835098267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2514 2.6809390634298325e-02</internalNodes>\n          <leafValues>\n            3.0903020873665810e-02 -3.1453761458396912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2515 -5.4339639842510223e-02</internalNodes>\n          <leafValues>\n            -5.7081592082977295e-01 6.3606691546738148e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2516 -7.4291341006755829e-03</internalNodes>\n          <leafValues>\n            -2.1167820692062378e-01 5.4728411138057709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2517 1.5004719607532024e-02</internalNodes>\n          <leafValues>\n            -1.3576979935169220e-01 3.6672618240118027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2518 2.3438859730958939e-02</internalNodes>\n          <leafValues>\n            -6.2095177173614502e-01 1.7451370134949684e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2519 2.1869429945945740e-01</internalNodes>\n          <leafValues>\n            -2.5175819173455238e-02 2.4256730079650879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2520 7.2554901242256165e-02</internalNodes>\n          <leafValues>\n            3.0378310009837151e-02 -3.5316839814186096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2521 -6.0775190591812134e-02</internalNodes>\n          <leafValues>\n            6.1231142282485962e-01 -2.9397750273346901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2522 1.0405359789729118e-02</internalNodes>\n          <leafValues>\n            -4.8925351351499557e-02 2.0042200386524200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2523 -4.4559161178767681e-03</internalNodes>\n          <leafValues>\n            -1.8175999820232391e-01 5.1460109651088715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2524 5.3141661919653416e-03</internalNodes>\n          <leafValues>\n            1.0836429893970490e-01 -1.1464370042085648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2525 2.8129909187555313e-02</internalNodes>\n          <leafValues>\n            4.8452459275722504e-02 -1.0588149726390839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2526 -1.0029030032455921e-02</internalNodes>\n          <leafValues>\n            -2.8854200243949890e-01 4.6509381383657455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2527 4.1623760014772415e-02</internalNodes>\n          <leafValues>\n            -5.2424181252717972e-02 2.4638059735298157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2528 1.7407029867172241e-02</internalNodes>\n          <leafValues>\n            -5.9511799365282059e-02 2.2489009797573090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2529 -9.1012917459011078e-02</internalNodes>\n          <leafValues>\n            3.8434851169586182e-01 -2.6776079088449478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2530 -5.5964559316635132e-02</internalNodes>\n          <leafValues>\n            3.3512559533119202e-01 -3.7086669355630875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2531 -2.3191609978675842e-01</internalNodes>\n          <leafValues>\n            -7.9937142133712769e-01 1.6157710924744606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2532 1.5095779672265053e-02</internalNodes>\n          <leafValues>\n            1.9562739878892899e-02 -4.7588780522346497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2533 -6.3537202775478363e-02</internalNodes>\n          <leafValues>\n            5.5103862285614014e-01 -9.9191991612315178e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2534 5.0780471414327621e-02</internalNodes>\n          <leafValues>\n            -5.0766121596097946e-02 1.9856730103492737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2535 3.3435709774494171e-02</internalNodes>\n          <leafValues>\n            1.7100030556321144e-02 -3.9106050133705139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2536 2.7236310765147209e-02</internalNodes>\n          <leafValues>\n            1.9491130486130714e-02 -4.9955821037292480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2537 3.6144461482763290e-02</internalNodes>\n          <leafValues>\n            1.9712809473276138e-02 -4.7714808583259583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2538 -3.7110898643732071e-02</internalNodes>\n          <leafValues>\n            -7.1080970764160156e-01 1.3297240249812603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2539 -1.6986919799819589e-03</internalNodes>\n          <leafValues>\n            -1.1454039812088013e-01 5.3833190351724625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2540 7.0956937270238996e-04</internalNodes>\n          <leafValues>\n            -1.1852429807186127e-01 8.6146153509616852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2541 -3.9854459464550018e-02</internalNodes>\n          <leafValues>\n            -2.1784169971942902e-01 7.9314615577459335e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2542 -2.6265300810337067e-02</internalNodes>\n          <leafValues>\n            5.1828277111053467e-01 -1.9502539187669754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2543 1.5767179429531097e-03</internalNodes>\n          <leafValues>\n            -9.0025149285793304e-02 4.3614149093627930e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2544 8.4500849246978760e-02</internalNodes>\n          <leafValues>\n            1.9108800217509270e-02 -5.8049428462982178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2545 5.8061029762029648e-02</internalNodes>\n          <leafValues>\n            5.1128780469298363e-03 -3.6629718542098999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2546 -8.6446420755237341e-04</internalNodes>\n          <leafValues>\n            9.8551221191883087e-02 -9.9286876618862152e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2547 -1.6358779743313789e-02</internalNodes>\n          <leafValues>\n            -2.2353939712047577e-01 4.5100010931491852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2548 1.2069500051438808e-02</internalNodes>\n          <leafValues>\n            -3.0885580927133560e-02 3.5933670401573181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2549 6.4932592213153839e-02</internalNodes>\n          <leafValues>\n            8.9946594089269638e-03 -6.5505272150039673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2550 -1.6384720802307129e-02</internalNodes>\n          <leafValues>\n            1.8374380469322205e-01 -5.8319728821516037e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2551 3.6467831581830978e-02</internalNodes>\n          <leafValues>\n            3.3053800463676453e-02 -3.1176608800888062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2552 -4.8026088625192642e-03</internalNodes>\n          <leafValues>\n            -1.3096930086612701e-01 8.8815420866012573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2553 -9.7134411334991455e-03</internalNodes>\n          <leafValues>\n            1.2485890090465546e-01 -4.5851919800043106e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2554 -3.6871319753117859e-04</internalNodes>\n          <leafValues>\n            1.0798580199480057e-01 -1.0795330256223679e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>248</maxWeakCount>\n      <stageThreshold>-1.3472950458526611e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2555 4.8573319800198078e-03</internalNodes>\n          <leafValues>\n            -2.2165919840335846e-01 2.0661990344524384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2556 -9.0601091505959630e-04</internalNodes>\n          <leafValues>\n            9.2684216797351837e-02 -3.4692689776420593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2557 3.8109601009637117e-03</internalNodes>\n          <leafValues>\n            -4.7693979740142822e-01 7.2208866477012634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2558 -1.9349349895492196e-03</internalNodes>\n          <leafValues>\n            -2.3474289476871490e-01 1.0308369994163513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2559 4.6932199038565159e-03</internalNodes>\n          <leafValues>\n            -2.1755599975585938e-01 1.0297770053148270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2560 -4.5681721530854702e-03</internalNodes>\n          <leafValues>\n            -3.2979539036750793e-01 6.2108699232339859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2561 2.0976159721612930e-03</internalNodes>\n          <leafValues>\n            -2.7585551142692566e-01 7.4447788298130035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2562 -2.3434460163116455e-02</internalNodes>\n          <leafValues>\n            -2.4517090618610382e-01 2.0888300612568855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2563 -7.5489659793674946e-03</internalNodes>\n          <leafValues>\n            -2.3539499938488007e-01 8.0594792962074280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2564 -1.3637889642268419e-03</internalNodes>\n          <leafValues>\n            1.2462289631366730e-01 -1.4383980631828308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2565 2.0881770178675652e-02</internalNodes>\n          <leafValues>\n            -2.5486978888511658e-01 7.0480130612850189e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2566 -1.6712560318410397e-03</internalNodes>\n          <leafValues>\n            -1.4747080206871033e-01 9.3597747385501862e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2567 -5.8552708476781845e-02</internalNodes>\n          <leafValues>\n            3.7929660081863403e-01 -3.7892241030931473e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2568 -4.7591641545295715e-02</internalNodes>\n          <leafValues>\n            3.4769389033317566e-01 -2.9484409838914871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2569 5.7788072153925896e-03</internalNodes>\n          <leafValues>\n            4.1627179831266403e-02 -3.8012310862541199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2570 6.1923051252961159e-03</internalNodes>\n          <leafValues>\n            -7.9854242503643036e-02 1.4662300050258636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2571 8.6211357265710831e-03</internalNodes>\n          <leafValues>\n            -7.9052597284317017e-02 1.9707180559635162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2572 3.8787689805030823e-01</internalNodes>\n          <leafValues>\n            9.9500510841608047e-03 -5.4955279827117920e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2573 1.2184830009937286e-01</internalNodes>\n          <leafValues>\n            2.1560879424214363e-02 -7.1182191371917725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2574 5.6779510341584682e-03</internalNodes>\n          <leafValues>\n            5.0778731703758240e-02 -1.9817540049552917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2575 -3.2407268881797791e-02</internalNodes>\n          <leafValues>\n            -6.5776360034942627e-01 1.8930230289697647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2576 2.3834649473428726e-03</internalNodes>\n          <leafValues>\n            3.5910621285438538e-02 -1.9386079907417297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2577 4.4861159403808415e-04</internalNodes>\n          <leafValues>\n            6.3049189746379852e-02 -2.3067280650138855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2578 2.8381360694766045e-02</internalNodes>\n          <leafValues>\n            1.3798769563436508e-02 -2.0287990570068359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2579 -2.7084869798272848e-03</internalNodes>\n          <leafValues>\n            -1.6455270349979401e-01 8.1182733178138733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2580 -1.3218579813838005e-02</internalNodes>\n          <leafValues>\n            1.2929069995880127e-01 -4.9410581588745117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2581 1.8623949727043509e-03</internalNodes>\n          <leafValues>\n            -2.7398198843002319e-01 4.5746099203824997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2582 -6.6727721132338047e-03</internalNodes>\n          <leafValues>\n            -1.5167540311813354e-01 5.5587619543075562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2583 1.9492399878799915e-03</internalNodes>\n          <leafValues>\n            -8.5547126829624176e-02 1.3712610304355621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2584 -7.0978812873363495e-02</internalNodes>\n          <leafValues>\n            -7.7429318428039551e-01 5.5506629869341850e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2585 5.7003321126103401e-03</internalNodes>\n          <leafValues>\n            6.0299661010503769e-02 -2.3000110685825348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2586 6.6310778260231018e-02</internalNodes>\n          <leafValues>\n            -8.5690699517726898e-02 1.5169920027256012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2587 -8.5291899740695953e-03</internalNodes>\n          <leafValues>\n            1.4297589659690857e-01 -9.1805547475814819e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2588 5.1141469739377499e-03</internalNodes>\n          <leafValues>\n            4.6917989850044250e-02 -1.3319849967956543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2589 1.9523530500009656e-03</internalNodes>\n          <leafValues>\n            -1.4177489280700684e-01 1.0524170100688934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2590 1.9558310508728027e-01</internalNodes>\n          <leafValues>\n            1.4478860422968864e-02 -7.9985427856445312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2591 5.3029200062155724e-03</internalNodes>\n          <leafValues>\n            3.7237700074911118e-02 -2.6131349802017212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2592 6.4814360812306404e-03</internalNodes>\n          <leafValues>\n            -4.9092698842287064e-02 2.5681778788566589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2593 -6.1802868731319904e-03</internalNodes>\n          <leafValues>\n            -2.1317920088768005e-01 6.1390031129121780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2594 1.9895739387720823e-03</internalNodes>\n          <leafValues>\n            -7.1335382759571075e-02 1.3002429902553558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2595 -4.2928531183861196e-04</internalNodes>\n          <leafValues>\n            7.2383478283882141e-02 -1.5643799304962158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2596 -4.5690318802371621e-04</internalNodes>\n          <leafValues>\n            7.5732357800006866e-02 -1.0932859778404236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2597 -1.3333739340305328e-01</internalNodes>\n          <leafValues>\n            -5.4889208078384399e-01 1.9494550302624702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2598 8.2705507520586252e-04</internalNodes>\n          <leafValues>\n            -1.8739989399909973e-01 5.7498261332511902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2599 -1.6954699531197548e-03</internalNodes>\n          <leafValues>\n            -1.4100700616836548e-01 8.6548388004302979e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2600 9.8944529891014099e-03</internalNodes>\n          <leafValues>\n            1.7898159101605415e-02 -3.1395688652992249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2601 6.0766572132706642e-03</internalNodes>\n          <leafValues>\n            -1.3120110332965851e-01 9.1578528285026550e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2602 -3.5680279135704041e-02</internalNodes>\n          <leafValues>\n            -3.8880988955497742e-01 1.1377809569239616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2603 8.7540567619726062e-04</internalNodes>\n          <leafValues>\n            5.3022928535938263e-02 -2.1509949862957001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2604 1.9438719609752297e-03</internalNodes>\n          <leafValues>\n            -8.1035703420639038e-02 1.3382309675216675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2605 5.6398138403892517e-02</internalNodes>\n          <leafValues>\n            1.4857930131256580e-02 -6.9551151990890503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2606 -1.0274930391460657e-03</internalNodes>\n          <leafValues>\n            -1.9196349382400513e-01 4.7596029937267303e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2607 -3.3568819053471088e-03</internalNodes>\n          <leafValues>\n            1.0466050356626511e-01 -1.0170979797840118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2608 1.1734040081501007e-01</internalNodes>\n          <leafValues>\n            -4.6565439552068710e-02 2.0878739655017853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2609 8.8005866855382919e-03</internalNodes>\n          <leafValues>\n            9.1754652559757233e-02 -1.2221500277519226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2610 2.4095149710774422e-03</internalNodes>\n          <leafValues>\n            -3.6752160638570786e-02 2.3443439602851868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2611 -2.8434590785764158e-04</internalNodes>\n          <leafValues>\n            -1.9996729493141174e-01 4.7353159636259079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2612 1.7623709514737129e-02</internalNodes>\n          <leafValues>\n            -2.2765519097447395e-02 2.5646668672561646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2613 1.4121740125119686e-02</internalNodes>\n          <leafValues>\n            2.2659989073872566e-02 -4.2449080944061279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2614 -1.5290649607777596e-02</internalNodes>\n          <leafValues>\n            2.4445760250091553e-01 -4.3145630508661270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2615 -2.5426879525184631e-02</internalNodes>\n          <leafValues>\n            4.1280931234359741e-01 -2.5002820417284966e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2616 8.7438793852925301e-03</internalNodes>\n          <leafValues>\n            4.1931539773941040e-02 -1.2433040142059326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2617 4.1642960160970688e-02</internalNodes>\n          <leafValues>\n            2.1535869687795639e-02 -4.9062231183052063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2618 7.0692330598831177e-02</internalNodes>\n          <leafValues>\n            -2.4307090789079666e-02 3.3606329560279846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2619 -7.7690348029136658e-02</internalNodes>\n          <leafValues>\n            -7.3883998394012451e-01 1.3576829805970192e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2620 3.7781539140269160e-04</internalNodes>\n          <leafValues>\n            -9.6697732806205750e-02 9.4690509140491486e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2621 -1.1192850070074201e-03</internalNodes>\n          <leafValues>\n            -2.1631820499897003e-01 4.4235199689865112e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2622 5.9772249311208725e-02</internalNodes>\n          <leafValues>\n            -3.2024260610342026e-02 3.0602660775184631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2623 -1.5417120419442654e-02</internalNodes>\n          <leafValues>\n            -3.4087839722633362e-01 2.8097979724407196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2624 -6.3111339695751667e-03</internalNodes>\n          <leafValues>\n            1.5327680110931396e-01 -4.7901459038257599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2625 -1.8826499581336975e-02</internalNodes>\n          <leafValues>\n            -1.5269599854946136e-01 6.0955628752708435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2626 -3.9223838597536087e-02</internalNodes>\n          <leafValues>\n            2.6624131202697754e-01 -7.6400930993258953e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2627 -4.8653159290552139e-02</internalNodes>\n          <leafValues>\n            -4.5488500595092773e-01 1.9853049889206886e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2628 6.7260518670082092e-02</internalNodes>\n          <leafValues>\n            1.0999150108546019e-03 -7.5273478031158447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2629 1.2728190049529076e-03</internalNodes>\n          <leafValues>\n            -7.8121297061443329e-02 1.1816550046205521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2630 -9.4147026538848877e-02</internalNodes>\n          <leafValues>\n            -5.2153587341308594e-01 1.4973170123994350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2631 -4.7454461455345154e-02</internalNodes>\n          <leafValues>\n            2.6547148823738098e-01 -3.0587410554289818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2632 -5.6014367146417499e-04</internalNodes>\n          <leafValues>\n            -1.0506449639797211e-01 6.0161281377077103e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2633 -2.9601220740005374e-04</internalNodes>\n          <leafValues>\n            6.2257450073957443e-02 -1.3126540184020996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2634 -2.0918490365147591e-02</internalNodes>\n          <leafValues>\n            -2.0831510424613953e-01 2.6843119412660599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2635 -7.2696260176599026e-03</internalNodes>\n          <leafValues>\n            -1.6227640211582184e-01 6.1937049031257629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2636 7.2555372025817633e-04</internalNodes>\n          <leafValues>\n            -1.0315939784049988e-01 6.8040877580642700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2637 2.0828839391469955e-02</internalNodes>\n          <leafValues>\n            -4.4557690620422363e-02 2.2167469561100006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2638 8.7201192975044250e-02</internalNodes>\n          <leafValues>\n            9.5432223752140999e-03 -5.8706420660018921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2639 4.1596628725528717e-02</internalNodes>\n          <leafValues>\n            -3.0774539336562157e-02 2.8809019923210144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2640 -2.6154879480600357e-02</internalNodes>\n          <leafValues>\n            -5.9353542327880859e-01 1.4388410374522209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2641 2.7175429463386536e-01</internalNodes>\n          <leafValues>\n            1.3717720285058022e-02 -5.4619067907333374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2642 2.1811699494719505e-02</internalNodes>\n          <leafValues>\n            -1.6798110678792000e-02 2.9062330722808838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2643 -1.9965929910540581e-02</internalNodes>\n          <leafValues>\n            -4.3052119016647339e-01 1.8917759880423546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2644 -1.1561929713934660e-03</internalNodes>\n          <leafValues>\n            8.8031537830829620e-02 -1.9590209424495697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2645 -1.6627550357952714e-03</internalNodes>\n          <leafValues>\n            8.9111559092998505e-02 -9.0959653258323669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2646 -1.7325150547549129e-03</internalNodes>\n          <leafValues>\n            -1.1540830135345459e-01 5.3636670112609863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2647 -3.9231408387422562e-02</internalNodes>\n          <leafValues>\n            6.2471270561218262e-01 -1.3666920363903046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2648 1.0423580184578896e-02</internalNodes>\n          <leafValues>\n            2.4711130186915398e-02 -1.6751749813556671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2649 2.2725639864802361e-03</internalNodes>\n          <leafValues>\n            -5.5126778781414032e-02 1.4781460165977478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2650 -3.9644641801714897e-03</internalNodes>\n          <leafValues>\n            1.1337990313768387e-01 -6.8672053515911102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2651 4.0544760413467884e-03</internalNodes>\n          <leafValues>\n            4.0180210024118423e-02 -2.3837350308895111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2652 2.0538640674203634e-03</internalNodes>\n          <leafValues>\n            3.2863691449165344e-02 -1.2495829910039902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2653 2.9705381020903587e-03</internalNodes>\n          <leafValues>\n            4.1810061782598495e-02 -2.0539659261703491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2654 -8.3381328731775284e-03</internalNodes>\n          <leafValues>\n            9.2258736491203308e-02 -3.8435179740190506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2655 1.5640279743820429e-03</internalNodes>\n          <leafValues>\n            -9.6661567687988281e-02 8.5594817996025085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2656 -3.7052970379590988e-02</internalNodes>\n          <leafValues>\n            -7.7915471792221069e-01 1.0418290272355080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2657 -1.0109930299222469e-02</internalNodes>\n          <leafValues>\n            1.2499059736728668e-01 -6.4437836408615112e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2658 -7.9335980117321014e-02</internalNodes>\n          <leafValues>\n            7.0784372091293335e-01 -3.1601081136614084e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2659 -2.5811919476836920e-03</internalNodes>\n          <leafValues>\n            -1.6802759468555450e-01 6.7257612943649292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2660 1.8863540142774582e-02</internalNodes>\n          <leafValues>\n            -5.2749298512935638e-02 1.4578150212764740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2661 6.1697891214862466e-04</internalNodes>\n          <leafValues>\n            -9.6527166664600372e-02 9.3077242374420166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2662 -9.9242655560374260e-03</internalNodes>\n          <leafValues>\n            1.2164440006017685e-01 -2.6439830660820007e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2663 -4.7382008284330368e-02</internalNodes>\n          <leafValues>\n            -3.7194240093231201e-01 2.4884449318051338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2664 3.8585590664297342e-03</internalNodes>\n          <leafValues>\n            -4.2420830577611923e-02 1.1997900158166885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2665 2.3721279576420784e-03</internalNodes>\n          <leafValues>\n            -7.2769053280353546e-02 1.3027629256248474e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2666 -3.1968571245670319e-02</internalNodes>\n          <leafValues>\n            -4.7088149189949036e-01 1.8863039091229439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2667 -7.2849751450121403e-04</internalNodes>\n          <leafValues>\n            2.8128319978713989e-01 -3.0785139650106430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2668 -1.2096880003809929e-02</internalNodes>\n          <leafValues>\n            -7.0163071155548096e-01 1.3336709700524807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2669 -1.7658369615674019e-02</internalNodes>\n          <leafValues>\n            1.9193160533905029e-01 -4.7951001673936844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2670 -1.0974059812724590e-02</internalNodes>\n          <leafValues>\n            -2.7307328581809998e-01 2.8784489259123802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2671 -1.8560180440545082e-02</internalNodes>\n          <leafValues>\n            -4.4306761026382446e-01 2.0472019910812378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2672 1.3861100189387798e-02</internalNodes>\n          <leafValues>\n            -3.7471339106559753e-02 1.0929849743843079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2673 5.6243170052766800e-02</internalNodes>\n          <leafValues>\n            1.3322129845619202e-02 -6.1972159147262573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2674 -1.3746799901127815e-02</internalNodes>\n          <leafValues>\n            1.8980909883975983e-01 -4.3810151517391205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2675 -2.0494889758992940e-04</internalNodes>\n          <leafValues>\n            -1.4809520542621613e-01 5.9458550065755844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2676 1.1416030116379261e-02</internalNodes>\n          <leafValues>\n            4.5111801475286484e-02 -1.7277219891548157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2677 4.1169788688421249e-02</internalNodes>\n          <leafValues>\n            -2.3442840203642845e-02 3.3413231372833252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2678 -9.6223354339599609e-03</internalNodes>\n          <leafValues>\n            -1.6086310148239136e-01 3.3183149993419647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2679 1.5951909590512514e-03</internalNodes>\n          <leafValues>\n            -6.3590511679649353e-02 1.3396669924259186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2680 -6.3169049099087715e-03</internalNodes>\n          <leafValues>\n            -1.6365319490432739e-01 5.1552049815654755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2681 4.6467378735542297e-02</internalNodes>\n          <leafValues>\n            -2.5627709925174713e-02 3.8097569346427917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2682 9.1598592698574066e-02</internalNodes>\n          <leafValues>\n            4.2748241685330868e-03 -5.9740132093429565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2683 -1.0416290024295449e-03</internalNodes>\n          <leafValues>\n            -1.4733889698982239e-01 5.5105950683355331e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2684 -2.3334469646215439e-02</internalNodes>\n          <leafValues>\n            9.2266462743282318e-02 -5.3653880953788757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2685 -6.3067381270229816e-03</internalNodes>\n          <leafValues>\n            -1.6974699497222900e-01 6.0046479105949402e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2686 5.2549671381711960e-03</internalNodes>\n          <leafValues>\n            -8.8989406824111938e-02 4.7306548804044724e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2687 -1.0699460282921791e-02</internalNodes>\n          <leafValues>\n            -1.5823520720005035e-01 5.1100831478834152e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2688 -5.4387808777391911e-03</internalNodes>\n          <leafValues>\n            1.2524560093879700e-01 -3.9472699165344238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2689 3.4613600000739098e-03</internalNodes>\n          <leafValues>\n            -6.8892680108547211e-02 1.7920389771461487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2690 -1.7894359305500984e-02</internalNodes>\n          <leafValues>\n            -9.4599656760692596e-02 6.2322728335857391e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2691 -2.1147909760475159e-01</internalNodes>\n          <leafValues>\n            -8.6275768280029297e-01 9.4653964042663574e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2692 1.4149859780445695e-03</internalNodes>\n          <leafValues>\n            -8.6214788258075714e-02 4.0635921061038971e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2693 -1.5357299707829952e-03</internalNodes>\n          <leafValues>\n            9.9525436758995056e-02 -7.7558159828186035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2694 2.8714749496430159e-03</internalNodes>\n          <leafValues>\n            -6.3778772950172424e-02 1.1251030117273331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2695 1.8400069326162338e-02</internalNodes>\n          <leafValues>\n            2.3700669407844543e-02 -3.5953688621520996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2696 -7.3078006505966187e-02</internalNodes>\n          <leafValues>\n            -8.3836638927459717e-01 2.1687510889023542e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2697 9.8323542624711990e-03</internalNodes>\n          <leafValues>\n            -5.3899969905614853e-02 1.6186970472335815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2698 2.2987959906458855e-02</internalNodes>\n          <leafValues>\n            1.5955159440636635e-02 -3.3074310421943665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2699 -5.4363980889320374e-03</internalNodes>\n          <leafValues>\n            -1.3372650742530823e-01 5.8162450790405273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2700 1.0177739895880222e-02</internalNodes>\n          <leafValues>\n            -5.7901948690414429e-02 4.0789060294628143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2701 -5.1690369844436646e-02</internalNodes>\n          <leafValues>\n            4.7881290316581726e-01 -2.0051179453730583e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2702 -4.6395331621170044e-02</internalNodes>\n          <leafValues>\n            3.5422900319099426e-01 -1.6692889854311943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2703 4.0920148603618145e-04</internalNodes>\n          <leafValues>\n            -5.8872789144515991e-02 1.3617689907550812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2704 3.0743801034986973e-03</internalNodes>\n          <leafValues>\n            3.1892731785774231e-02 -2.9396781325340271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2705 1.3438959419727325e-01</internalNodes>\n          <leafValues>\n            1.5018840320408344e-02 -5.1557308435440063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2706 -4.4954590499401093e-02</internalNodes>\n          <leafValues>\n            -6.5404319763183594e-01 5.8901738375425339e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2707 -4.1479051113128662e-02</internalNodes>\n          <leafValues>\n            -5.6925541162490845e-01 1.3012220151722431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2708 2.9117099940776825e-02</internalNodes>\n          <leafValues>\n            -1.9148029386997223e-02 1.8318380415439606e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2709 5.1073249429464340e-02</internalNodes>\n          <leafValues>\n            1.5260309912264347e-02 -4.9480628967285156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2710 7.0886377943679690e-04</internalNodes>\n          <leafValues>\n            8.7698653340339661e-02 -7.3333673179149628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2711 1.1835389770567417e-02</internalNodes>\n          <leafValues>\n            -3.9189878851175308e-02 2.0834849774837494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2712 -4.2260489426553249e-03</internalNodes>\n          <leafValues>\n            -1.8733769655227661e-01 7.4666850268840790e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2713 3.4847799688577652e-02</internalNodes>\n          <leafValues>\n            -3.0572960153222084e-02 2.6511108875274658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2714 1.2932980433106422e-02</internalNodes>\n          <leafValues>\n            2.2224349901080132e-02 -2.3204100131988525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2715 -3.4806900657713413e-03</internalNodes>\n          <leafValues>\n            6.0548238456249237e-02 -1.3034850358963013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2716 1.7225079238414764e-02</internalNodes>\n          <leafValues>\n            -6.7219920456409454e-03 1.1128149926662445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2717 -2.4316289927810431e-03</internalNodes>\n          <leafValues>\n            -1.8720659613609314e-01 4.1284140199422836e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2718 -1.1786689981818199e-02</internalNodes>\n          <leafValues>\n            1.5917420387268066e-01 -3.0763400718569756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2719 -5.3132520988583565e-03</internalNodes>\n          <leafValues>\n            -1.3786070048809052e-01 5.4246630519628525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2720 -2.0012039691209793e-02</internalNodes>\n          <leafValues>\n            2.9359638690948486e-01 -2.6866350322961807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2721 2.0955558866262436e-03</internalNodes>\n          <leafValues>\n            6.7963063716888428e-02 -1.2520860135555267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2722 -3.9648640900850296e-02</internalNodes>\n          <leafValues>\n            -5.8195388317108154e-01 1.3146690092980862e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2723 -3.4485850483179092e-02</internalNodes>\n          <leafValues>\n            4.5559158921241760e-01 -1.8659429624676704e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2724 -4.4569540768861771e-02</internalNodes>\n          <leafValues>\n            -9.2067569494247437e-01 5.3931041620671749e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2725 -1.1394550092518330e-03</internalNodes>\n          <leafValues>\n            -2.1932439506053925e-01 3.6249380558729172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2726 -3.7044081836938858e-02</internalNodes>\n          <leafValues>\n            1.6192549467086792e-01 -4.7661919146776199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2727 1.9300490617752075e-02</internalNodes>\n          <leafValues>\n            -5.4432831704616547e-02 1.4432109892368317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2728 -1.4382150257006288e-03</internalNodes>\n          <leafValues>\n            -6.7343980073928833e-02 4.2511381208896637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2729 3.8761008530855179e-02</internalNodes>\n          <leafValues>\n            1.4171930029988289e-02 -5.3382647037506104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2730 -1.5265800058841705e-01</internalNodes>\n          <leafValues>\n            -9.1533327102661133e-01 2.1413750946521759e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2731 -8.4089813753962517e-03</internalNodes>\n          <leafValues>\n            1.7705249786376953e-01 -4.3753430247306824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2732 -1.6673170030117035e-01</internalNodes>\n          <leafValues>\n            -5.6390452384948730e-01 7.5904577970504761e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2733 -7.3619261384010315e-03</internalNodes>\n          <leafValues>\n            -1.9691839814186096e-01 3.9698500186204910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2734 -9.9920090287923813e-03</internalNodes>\n          <leafValues>\n            -1.3419510424137115e-01 6.3489198684692383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2735 -2.2656610235571861e-03</internalNodes>\n          <leafValues>\n            7.9676061868667603e-02 -1.0685960203409195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2736 -1.3868820667266846e-01</internalNodes>\n          <leafValues>\n            -4.7306931018829346e-01 1.5354130417108536e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2737 -1.3284240663051605e-01</internalNodes>\n          <leafValues>\n            -8.7984371185302734e-01 7.0595988072454929e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2738 -2.4882299825549126e-02</internalNodes>\n          <leafValues>\n            1.3333520293235779e-01 -4.0933601558208466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2739 -6.6814320161938667e-03</internalNodes>\n          <leafValues>\n            -1.0295540094375610e-01 7.4870042502880096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2740 6.0326699167490005e-02</internalNodes>\n          <leafValues>\n            1.3355839997529984e-02 -3.7602999806404114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2741 -8.5582301020622253e-02</internalNodes>\n          <leafValues>\n            2.1200770139694214e-01 -3.8742028176784515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2742 -1.2076400220394135e-02</internalNodes>\n          <leafValues>\n            -8.2457520067691803e-02 6.7780442535877228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2743 2.0311089232563972e-02</internalNodes>\n          <leafValues>\n            -1.1817990243434906e-01 6.4830578863620758e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2744 -3.9900741539895535e-03</internalNodes>\n          <leafValues>\n            -1.5723599493503571e-01 5.3033929318189621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2745 -1.4961370034143329e-03</internalNodes>\n          <leafValues>\n            2.4392129480838776e-01 -3.1170839443802834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2746 1.8568099767435342e-04</internalNodes>\n          <leafValues>\n            -1.9409550726413727e-01 4.5490209013223648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2747 1.4796480536460876e-01</internalNodes>\n          <leafValues>\n            6.2650348991155624e-03 -9.9987298250198364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2748 1.6918669641017914e-01</internalNodes>\n          <leafValues>\n            4.2962608858942986e-04 -3.5496100783348083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2749 -1.9380000594537705e-04</internalNodes>\n          <leafValues>\n            -1.3056799769401550e-01 5.4877169430255890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2750 -6.2729098135605454e-04</internalNodes>\n          <leafValues>\n            4.1053570806980133e-02 -8.3174988627433777e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2751 -2.6877908967435360e-03</internalNodes>\n          <leafValues>\n            1.5513989329338074e-01 -5.5573899298906326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2752 -7.6885253190994263e-02</internalNodes>\n          <leafValues>\n            -6.1440211534500122e-01 3.2789220567792654e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2753 -1.6956549370661378e-04</internalNodes>\n          <leafValues>\n            6.0934148728847504e-02 -1.4717090129852295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2754 3.7390850484371185e-02</internalNodes>\n          <leafValues>\n            8.8595114648342133e-03 -2.3843410611152649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2755 -3.7611280567944050e-03</internalNodes>\n          <leafValues>\n            -1.1896059662103653e-01 5.4526679217815399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2756 -7.5538672506809235e-02</internalNodes>\n          <leafValues>\n            1. -2.8170819859951735e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2757 5.1163119496777654e-04</internalNodes>\n          <leafValues>\n            -1.1333829909563065e-01 6.8293251097202301e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2758 -5.4373521357774734e-02</internalNodes>\n          <leafValues>\n            5.6772488355636597e-01 -5.5303489789366722e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2759 -1.2200759723782539e-02</internalNodes>\n          <leafValues>\n            2.6310768723487854e-01 -3.5334069281816483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2760 6.5340757369995117e-02</internalNodes>\n          <leafValues>\n            8.2145677879452705e-03 -9.7914510965347290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2761 -9.7028106451034546e-02</internalNodes>\n          <leafValues>\n            -7.5845307111740112e-01 6.8704010918736458e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2762 -4.9768280237913132e-02</internalNodes>\n          <leafValues>\n            -8.0786317586898804e-01 1.3162019895389676e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2763 -2.9802118660882115e-04</internalNodes>\n          <leafValues>\n            8.5099622607231140e-02 -9.1054826974868774e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2764 1.0124569758772850e-02</internalNodes>\n          <leafValues>\n            -8.9172579348087311e-02 7.7402189373970032e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2765 8.1574246287345886e-03</internalNodes>\n          <leafValues>\n            -6.4016029238700867e-02 1.2462829798460007e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2766 -1.2093920260667801e-02</internalNodes>\n          <leafValues>\n            -1.8433560431003571e-01 4.9659188836812973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2767 -1.1906909756362438e-02</internalNodes>\n          <leafValues>\n            2.6277810335159302e-01 -2.9921159148216248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2768 -8.1438422203063965e-02</internalNodes>\n          <leafValues>\n            -6.4389252662658691e-01 1.7232710495591164e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2769 1.4961180277168751e-03</internalNodes>\n          <leafValues>\n            -1.2228660285472870e-01 5.7763870805501938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2770 -2.2651249542832375e-02</internalNodes>\n          <leafValues>\n            -1.1090759932994843e-01 7.0385642349720001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2771 -2.3789770901203156e-02</internalNodes>\n          <leafValues>\n            2.9644450545310974e-01 -2.5997739285230637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2772 1.4299990143626928e-03</internalNodes>\n          <leafValues>\n            -8.9716851711273193e-02 5.6030821055173874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2773 -4.1593458503484726e-02</internalNodes>\n          <leafValues>\n            -5.8160471916198730e-01 1.1599930003285408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2774 -2.5586199481040239e-03</internalNodes>\n          <leafValues>\n            6.2241408973932266e-02 -1.1328329890966415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2775 -1.0252290219068527e-01</internalNodes>\n          <leafValues>\n            -8.5185718536376953e-01 8.2774916663765907e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2776 -3.1799520365893841e-03</internalNodes>\n          <leafValues>\n            -1.3918060064315796e-01 5.3719218820333481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2777 -3.9835860952734947e-03</internalNodes>\n          <leafValues>\n            1.5531490743160248e-01 -5.3399000316858292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2778 1.0895960032939911e-02</internalNodes>\n          <leafValues>\n            3.9084900170564651e-02 -2.1268959343433380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2779 1.7865100875496864e-02</internalNodes>\n          <leafValues>\n            -2.5146210566163063e-02 3.3581560850143433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2780 5.5075511336326599e-03</internalNodes>\n          <leafValues>\n            2.3314310237765312e-02 -9.3666307628154755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2781 2.0092551130801439e-03</internalNodes>\n          <leafValues>\n            5.7231310755014420e-02 -1.4091749489307404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2782 -1.2218699790537357e-02</internalNodes>\n          <leafValues>\n            1.9243550300598145e-01 -2.4631109088659286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2783 1.8039119895547628e-03</internalNodes>\n          <leafValues>\n            5.5793199688196182e-02 -1.2940339744091034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2784 2.2159840911626816e-02</internalNodes>\n          <leafValues>\n            -9.0001197531819344e-03 5.2156221866607666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2785 -3.5827290266752243e-02</internalNodes>\n          <leafValues>\n            -6.2905979156494141e-01 1.1712389998137951e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2786 8.9478418231010437e-03</internalNodes>\n          <leafValues>\n            -3.7455581128597260e-02 1.0906309634447098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2787 -1.2861900031566620e-01</internalNodes>\n          <leafValues>\n            -3.9527180790901184e-01 1.8151529133319855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2788 1.8464029999449849e-03</internalNodes>\n          <leafValues>\n            -3.3952530473470688e-02 9.6596188843250275e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2789 2.8246780857443810e-03</internalNodes>\n          <leafValues>\n            -6.2633261084556580e-02 1.1198879778385162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2790 6.9075852632522583e-02</internalNodes>\n          <leafValues>\n            1.3590560294687748e-02 -5.2598261833190918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2791 -8.0794151872396469e-03</internalNodes>\n          <leafValues>\n            1.3081569969654083e-01 -5.0100728869438171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2792 -3.7193649914115667e-03</internalNodes>\n          <leafValues>\n            -1.4887580275535583e-01 5.1823489367961884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2793 2.0610638894140720e-03</internalNodes>\n          <leafValues>\n            -6.5545938909053802e-02 1.1345130205154419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2794 -6.0795281082391739e-02</internalNodes>\n          <leafValues>\n            -7.8219258785247803e-01 4.5540397986769676e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2795 -7.3096780106425285e-03</internalNodes>\n          <leafValues>\n            -1.9586810469627380e-01 3.5591870546340942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2796 -2.3796008899807930e-03</internalNodes>\n          <leafValues>\n            4.3329920619726181e-02 -6.0119420289993286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2797 -3.7874478846788406e-02</internalNodes>\n          <leafValues>\n            1.6700419783592224e-01 -4.1082471609115601e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2798 -1.1011550202965736e-02</internalNodes>\n          <leafValues>\n            -7.9715803265571594e-02 3.2247040420770645e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2799 -1.5278880018740892e-03</internalNodes>\n          <leafValues>\n            9.7541913390159607e-02 -9.4694830477237701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2800 3.7144418805837631e-02</internalNodes>\n          <leafValues>\n            -4.4054100289940834e-03 4.4159731268882751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2801 -4.9948949366807938e-02</internalNodes>\n          <leafValues>\n            -8.0400061607360840e-01 9.0302517637610435e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2802 -1.8558859825134277e-02</internalNodes>\n          <leafValues>\n            1.8556900322437286e-01 -2.6648480445146561e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>208</maxWeakCount>\n      <stageThreshold>-1.5900419950485229e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2803 5.9106469154357910e-02</internalNodes>\n          <leafValues>\n            -1.9395799934864044e-01 2.7272081375122070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2804 2.6784019544720650e-02</internalNodes>\n          <leafValues>\n            -4.2093229293823242e-01 1.2330240011215210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2805 8.6407009512186050e-03</internalNodes>\n          <leafValues>\n            -3.0236870050430298e-01 1.3153509795665741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2806 -1.1792869772762060e-03</internalNodes>\n          <leafValues>\n            8.2713536918163300e-02 -3.5140541195869446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2807 -2.2481461055576801e-03</internalNodes>\n          <leafValues>\n            -5.1323968172073364e-01 5.4614610970020294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2808 5.7527530007064342e-03</internalNodes>\n          <leafValues>\n            -1.9243009388446808e-01 1.3872030377388000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2809 1.0034020058810711e-02</internalNodes>\n          <leafValues>\n            6.0773681849241257e-02 -3.1631371378898621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2810 -3.2057110220193863e-03</internalNodes>\n          <leafValues>\n            1.3471069931983948e-01 -1.6333019733428955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2811 1.3803630135953426e-02</internalNodes>\n          <leafValues>\n            7.4590288102626801e-02 -2.7751418948173523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2812 -1.9213010370731354e-01</internalNodes>\n          <leafValues>\n            2.6890340447425842e-01 -6.6552907228469849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2813 -7.0279821753501892e-02</internalNodes>\n          <leafValues>\n            -3.2870158553123474e-01 4.9912039190530777e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2814 3.1519670039415359e-02</internalNodes>\n          <leafValues>\n            3.5865701735019684e-02 -5.0489199161529541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2815 -1.1164420284330845e-02</internalNodes>\n          <leafValues>\n            -2.7422958612442017e-01 7.3949173092842102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2816 6.1416681855916977e-03</internalNodes>\n          <leafValues>\n            -8.7944798171520233e-02 1.5492740273475647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2817 2.5183141231536865e-01</internalNodes>\n          <leafValues>\n            -9.3605853617191315e-02 1.8827579915523529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2818 -1.9524399191141129e-02</internalNodes>\n          <leafValues>\n            -2.8733500838279724e-01 4.9147769808769226e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2819 -2.1689489483833313e-02</internalNodes>\n          <leafValues>\n            -3.3415651321411133e-01 4.8450991511344910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2820 3.4099910408258438e-02</internalNodes>\n          <leafValues>\n            -1.4776800572872162e-01 1.1322359740734100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2821 -2.0377550274133682e-02</internalNodes>\n          <leafValues>\n            -2.9778409004211426e-01 5.6795541197061539e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2822 2.3986540734767914e-02</internalNodes>\n          <leafValues>\n            -5.5139839649200439e-02 3.5672488808631897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2823 -1.4578890055418015e-02</internalNodes>\n          <leafValues>\n            -3.3595868945121765e-01 4.9776330590248108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2824 -5.4530607303604484e-04</internalNodes>\n          <leafValues>\n            1.4906319975852966e-01 -1.2674619257450104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2825 3.0076410621404648e-03</internalNodes>\n          <leafValues>\n            -3.8654258847236633e-01 3.7338510155677795e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2826 6.1654142336919904e-04</internalNodes>\n          <leafValues>\n            7.0350617170333862e-02 -2.7769538760185242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2827 5.1461078226566315e-02</internalNodes>\n          <leafValues>\n            2.7613859623670578e-02 -4.9107590317726135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2828 5.5607639253139496e-02</internalNodes>\n          <leafValues>\n            2.7626939117908478e-02 -2.9615479707717896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2829 2.9709029942750931e-02</internalNodes>\n          <leafValues>\n            6.5961636602878571e-02 -2.0508719980716705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2830 3.4046828746795654e-02</internalNodes>\n          <leafValues>\n            -3.8902580738067627e-02 2.4681000411510468e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2831 2.4807849898934364e-02</internalNodes>\n          <leafValues>\n            3.5015519708395004e-02 -4.1401639580726624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2832 4.0748160332441330e-02</internalNodes>\n          <leafValues>\n            4.2967729270458221e-02 -3.2043859362602234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2833 1.0664659552276134e-02</internalNodes>\n          <leafValues>\n            5.6952890008687973e-02 -2.4745999276638031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2834 -6.3090369105339050e-02</internalNodes>\n          <leafValues>\n            1.6899240016937256e-01 -1.8692910671234131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2835 3.4371189773082733e-02</internalNodes>\n          <leafValues>\n            -4.7546751797199249e-02 3.2781639695167542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2836 -1.2518119812011719e-01</internalNodes>\n          <leafValues>\n            -5.6282979249954224e-01 1.3721459545195103e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2837 -2.2273709997534752e-02</internalNodes>\n          <leafValues>\n            2.8452938795089722e-01 -4.7334741801023483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2838 3.1560619827359915e-03</internalNodes>\n          <leafValues>\n            6.7093066871166229e-02 -1.5777610242366791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2839 -8.5235182195901871e-03</internalNodes>\n          <leafValues>\n            -4.5404490828514099e-01 3.0238900333642960e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2840 9.4529008492827415e-03</internalNodes>\n          <leafValues>\n            -5.5023040622472763e-02 1.4025360345840454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2841 -1.5268090181052685e-02</internalNodes>\n          <leafValues>\n            -4.1039389371871948e-01 3.3160910010337830e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2842 1.0665830224752426e-02</internalNodes>\n          <leafValues>\n            -1.1716780066490173e-01 9.5943398773670197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2843 -1.8211569637060165e-02</internalNodes>\n          <leafValues>\n            -2.4850100278854370e-01 6.7713633179664612e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2844 2.9094598721712828e-04</internalNodes>\n          <leafValues>\n            4.9981009215116501e-02 -2.2298039495944977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2845 1.2524049961939454e-03</internalNodes>\n          <leafValues>\n            -2.3567390441894531e-01 6.0058139264583588e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2846 -1.0200130194425583e-01</internalNodes>\n          <leafValues>\n            4.6817669272422791e-01 -1.4046870172023773e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2847 -5.3803320974111557e-02</internalNodes>\n          <leafValues>\n            -3.8875138759613037e-01 3.8533151149749756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2848 3.5919819027185440e-02</internalNodes>\n          <leafValues>\n            1.7687749117612839e-02 -6.3149172067642212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2849 -9.9846003577113152e-03</internalNodes>\n          <leafValues>\n            2.3914399743080139e-01 -5.8490000665187836e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2850 2.2157909348607063e-02</internalNodes>\n          <leafValues>\n            -4.4814221560955048e-02 1.9423240423202515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2851 -1.4240739867091179e-02</internalNodes>\n          <leafValues>\n            -3.7670499086380005e-01 3.4929048269987106e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2852 -5.9150479733943939e-02</internalNodes>\n          <leafValues>\n            1.6816680133342743e-01 -3.5232000052928925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2853 3.6074228584766388e-02</internalNodes>\n          <leafValues>\n            2.2868489846587181e-02 -5.7828897237777710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2854 5.7692300528287888e-02</internalNodes>\n          <leafValues>\n            -2.1003179252147675e-02 3.0750969052314758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2855 -5.6619398295879364e-02</internalNodes>\n          <leafValues>\n            2.3383679986000061e-01 -5.5003248155117035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2856 -1.0697569698095322e-02</internalNodes>\n          <leafValues>\n            -1.3236419856548309e-01 9.1536827385425568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2857 4.2940411367453635e-04</internalNodes>\n          <leafValues>\n            5.2362058311700821e-02 -2.3470179736614227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2858 3.9490307681262493e-03</internalNodes>\n          <leafValues>\n            5.8583620935678482e-02 -8.2533597946166992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2859 2.9810430482029915e-02</internalNodes>\n          <leafValues>\n            7.1684047579765320e-02 -1.6931280493736267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2860 -1.1462910100817680e-02</internalNodes>\n          <leafValues>\n            -2.6410359144210815e-01 4.4687580317258835e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2861 2.2996390238404274e-02</internalNodes>\n          <leafValues>\n            3.2992180436849594e-02 -3.4358990192413330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2862 -5.6792609393596649e-02</internalNodes>\n          <leafValues>\n            -7.5760507583618164e-01 2.4003670550882816e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2863 -4.4709402136504650e-03</internalNodes>\n          <leafValues>\n            1.6277609765529633e-01 -6.8193063139915466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2864 -1.2394989840686321e-02</internalNodes>\n          <leafValues>\n            -4.3603330850601196e-01 2.8416140004992485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2865 2.9185590147972107e-01</internalNodes>\n          <leafValues>\n            -3.3300530165433884e-02 3.9866968989372253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2866 3.3633329439908266e-03</internalNodes>\n          <leafValues>\n            -1.0972090065479279e-01 5.6931249797344208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2867 -3.5175260156393051e-02</internalNodes>\n          <leafValues>\n            -5.7213717699050903e-01 2.0903490483760834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2868 -1.2044839560985565e-02</internalNodes>\n          <leafValues>\n            9.1090522706508636e-02 -1.1947949975728989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2869 6.5466752275824547e-03</internalNodes>\n          <leafValues>\n            2.2512340545654297e-01 -5.8309450745582581e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2870 -3.3635019790381193e-03</internalNodes>\n          <leafValues>\n            8.3123452961444855e-02 -1.6144299507141113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2871 -2.3451250046491623e-02</internalNodes>\n          <leafValues>\n            2.5118809938430786e-01 -4.8030331730842590e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2872 1.9356099888682365e-02</internalNodes>\n          <leafValues>\n            5.8134589344263077e-02 -2.0791250467300415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2873 -8.9994952082633972e-02</internalNodes>\n          <leafValues>\n            -7.5068491697311401e-01 1.4169859699904919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2874 1.2888260185718536e-02</internalNodes>\n          <leafValues>\n            3.3752571791410446e-02 -2.5715011358261108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2875 1.8961170688271523e-02</internalNodes>\n          <leafValues>\n            3.4717381000518799e-02 -3.6027848720550537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2876 -2.0835550501942635e-02</internalNodes>\n          <leafValues>\n            5.7851308584213257e-01 -2.2111309692263603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2877 1.0018779896199703e-02</internalNodes>\n          <leafValues>\n            -3.9775848388671875e-02 2.6814839243888855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2878 -8.7516820058226585e-03</internalNodes>\n          <leafValues>\n            1.1257819831371307e-01 -4.8538278788328171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2879 -6.2366750091314316e-02</internalNodes>\n          <leafValues>\n            -6.6089111566543579e-01 1.6852140426635742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2880 -1.9582180306315422e-02</internalNodes>\n          <leafValues>\n            -2.1182540059089661e-01 3.5702988505363464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2881 2.2675599902868271e-03</internalNodes>\n          <leafValues>\n            6.1212919652462006e-02 -2.0048849284648895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2882 -4.6558458358049393e-02</internalNodes>\n          <leafValues>\n            -5.6454938650131226e-01 9.2866625636816025e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2883 -7.7152079902589321e-03</internalNodes>\n          <leafValues>\n            1.5039919316768646e-01 -8.3328150212764740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2884 4.1551668196916580e-02</internalNodes>\n          <leafValues>\n            2.6247739791870117e-02 -3.2347521185874939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2885 -2.1789079532027245e-02</internalNodes>\n          <leafValues>\n            -3.2375821471214294e-01 3.1726188957691193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2886 1.9698198884725571e-03</internalNodes>\n          <leafValues>\n            -9.2564247548580170e-02 1.0823410004377365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2887 -5.2744988352060318e-03</internalNodes>\n          <leafValues>\n            -1.3990330696105957e-01 7.7120877802371979e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2888 5.6007660925388336e-02</internalNodes>\n          <leafValues>\n            -1.0328499972820282e-01 1.1455559730529785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2889 2.2741030156612396e-01</internalNodes>\n          <leafValues>\n            1.6028450801968575e-02 -6.8145108222961426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2890 5.1362380385398865e-02</internalNodes>\n          <leafValues>\n            -2.3025810718536377e-02 1.5446029603481293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2891 -1.3017069548368454e-02</internalNodes>\n          <leafValues>\n            -3.2606399059295654e-01 3.2892610877752304e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2892 1.5782029926776886e-01</internalNodes>\n          <leafValues>\n            -3.9765262044966221e-03 7.7765262126922607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2893 -9.9805086851119995e-02</internalNodes>\n          <leafValues>\n            6.8609541654586792e-01 -1.4648180454969406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2894 3.7506350874900818e-01</internalNodes>\n          <leafValues>\n            1.4925800263881683e-02 -8.3105468750000000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2895 -7.9828302841633558e-04</internalNodes>\n          <leafValues>\n            -2.0161899924278259e-01 4.7897689044475555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2896 -2.1241609752178192e-01</internalNodes>\n          <leafValues>\n            -3.4409451484680176e-01 1.0950430296361446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2897 3.9451681077480316e-02</internalNodes>\n          <leafValues>\n            1.3966959901154041e-02 -7.2163110971450806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2898 -2.9185509309172630e-02</internalNodes>\n          <leafValues>\n            -2.7462458610534668e-01 3.5496920347213745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2899 2.7055600658059120e-02</internalNodes>\n          <leafValues>\n            -4.6995740383863449e-02 2.9289430379867554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2900 -2.6052350178360939e-02</internalNodes>\n          <leafValues>\n            2.0752039551734924e-01 -3.6353081464767456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2901 5.7216219604015350e-02</internalNodes>\n          <leafValues>\n            1.8895739689469337e-02 -5.7143908739089966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2902 -1.7151840031147003e-02</internalNodes>\n          <leafValues>\n            -3.3009570837020874e-01 3.8528628647327423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2903 -1.2304399907588959e-01</internalNodes>\n          <leafValues>\n            -7.8316390514373779e-01 1.1679390445351601e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2904 5.6786160916090012e-02</internalNodes>\n          <leafValues>\n            1.1063819751143456e-02 -5.3526097536087036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2905 1.1942840367555618e-01</internalNodes>\n          <leafValues>\n            9.5137851312756538e-03 -9.0637218952178955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2906 6.7707143723964691e-02</internalNodes>\n          <leafValues>\n            -3.9227519184350967e-02 2.8176560997962952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2907 -5.4918881505727768e-02</internalNodes>\n          <leafValues>\n            -6.2061691284179688e-01 1.6072269529104233e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2908 9.2878006398677826e-03</internalNodes>\n          <leafValues>\n            -5.0339490175247192e-02 1.9040100276470184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2909 -1.3141489587724209e-02</internalNodes>\n          <leafValues>\n            1.8629829585552216e-01 -7.5528547167778015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2910 2.9876120970584452e-04</internalNodes>\n          <leafValues>\n            -1.6163469851016998e-01 5.3589500486850739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2911 1.0153599828481674e-01</internalNodes>\n          <leafValues>\n            1.8458279967308044e-01 -6.2570616602897644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2912 2.7205729484558105e-01</internalNodes>\n          <leafValues>\n            1.3762479647994041e-02 -4.9364060163497925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2913 5.8730211108922958e-02</internalNodes>\n          <leafValues>\n            -2.3933680355548859e-01 7.9166807234287262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2914 1.9694259390234947e-02</internalNodes>\n          <leafValues>\n            3.7195280194282532e-02 -2.6109260320663452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2915 -1.0566900164121762e-04</internalNodes>\n          <leafValues>\n            6.7052997648715973e-02 -1.6515819728374481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2916 -1.9761279225349426e-02</internalNodes>\n          <leafValues>\n            8.6443692445755005e-02 -6.8657971918582916e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2917 5.3168509155511856e-02</internalNodes>\n          <leafValues>\n            2.9767790809273720e-02 -3.5225778818130493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2918 2.6071069762110710e-02</internalNodes>\n          <leafValues>\n            2.5216359645128250e-02 -1.4159369468688965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2919 -2.8720689937472343e-02</internalNodes>\n          <leafValues>\n            3.5941401124000549e-01 -2.9199620708823204e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2920 1.2989250011742115e-02</internalNodes>\n          <leafValues>\n            4.0009770542383194e-02 -1.9973039627075195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2921 -5.8176040649414062e-02</internalNodes>\n          <leafValues>\n            2.9345899820327759e-01 -4.3967530131340027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2922 2.8285140171647072e-02</internalNodes>\n          <leafValues>\n            3.7457428872585297e-02 -3.1361749768257141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2923 4.2701218277215958e-02</internalNodes>\n          <leafValues>\n            -2.0987769588828087e-02 5.0845777988433838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2924 2.4763600900769234e-02</internalNodes>\n          <leafValues>\n            -1.1869250237941742e-01 9.4457350671291351e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2925 -2.8076129965484142e-03</internalNodes>\n          <leafValues>\n            -2.3249779641628265e-01 4.5222718268632889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2926 -7.5583919882774353e-02</internalNodes>\n          <leafValues>\n            -4.5907029509544373e-01 1.2932280078530312e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2927 8.3796821534633636e-02</internalNodes>\n          <leafValues>\n            -1.5801630914211273e-02 6.8670481443405151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2928 -3.7072401493787766e-02</internalNodes>\n          <leafValues>\n            5.4146029055118561e-02 -4.2207449674606323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2929 2.4691069498658180e-02</internalNodes>\n          <leafValues>\n            2.6097679510712624e-02 -3.7760400772094727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2930 -2.7743929997086525e-02</internalNodes>\n          <leafValues>\n            -7.8631508350372314e-01 4.7534159384667873e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2931 1.9119970500469208e-02</internalNodes>\n          <leafValues>\n            2.6497760787606239e-02 -3.6489969491958618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2932 3.3773269969969988e-03</internalNodes>\n          <leafValues>\n            3.1966090202331543e-02 -3.2346761226654053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2933 1.9876819103956223e-02</internalNodes>\n          <leafValues>\n            -3.5128418356180191e-02 2.9078298807144165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2934 1.0035640001296997e-01</internalNodes>\n          <leafValues>\n            1.4607840217649937e-02 -5.2812242507934570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2935 -1.6163289546966553e-02</internalNodes>\n          <leafValues>\n            -1.0158140212297440e-01 1.1796499788761139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2936 1.0253380052745342e-02</internalNodes>\n          <leafValues>\n            3.6024410277605057e-02 -1.6520780324935913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2937 9.0665705502033234e-03</internalNodes>\n          <leafValues>\n            -3.4731701016426086e-02 3.7327200174331665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2938 3.0124900862574577e-02</internalNodes>\n          <leafValues>\n            5.1758479326963425e-02 -2.3582160472869873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2939 -6.6870311275124550e-03</internalNodes>\n          <leafValues>\n            4.3394241482019424e-02 -2.5202989578247070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2940 -2.0257479045540094e-03</internalNodes>\n          <leafValues>\n            -1.2479010224342346e-01 3.9309531450271606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2941 2.3254070430994034e-02</internalNodes>\n          <leafValues>\n            -4.7446910291910172e-02 2.3287700116634369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2942 2.3867199197411537e-02</internalNodes>\n          <leafValues>\n            -2.7421670034527779e-02 1.4630970358848572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2943 -4.0523000061511993e-02</internalNodes>\n          <leafValues>\n            -4.0472960472106934e-01 3.0415959656238556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2944 1.9958209991455078e-01</internalNodes>\n          <leafValues>\n            2.2049469873309135e-02 -4.6558481454849243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2945 -1.2990590184926987e-02</internalNodes>\n          <leafValues>\n            -1.7970620095729828e-01 5.8874938637018204e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2946 2.5623949244618416e-02</internalNodes>\n          <leafValues>\n            9.9402610212564468e-03 -2.6575279235839844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2947 -3.2004870474338531e-02</internalNodes>\n          <leafValues>\n            2.5087380409240723e-01 -4.6291470527648926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2948 1.8758419901132584e-02</internalNodes>\n          <leafValues>\n            -2.2038230672478676e-02 9.4407431781291962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2949 4.5425668358802795e-02</internalNodes>\n          <leafValues>\n            2.3371569812297821e-02 -4.8393398523330688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2950 1.5670580789446831e-02</internalNodes>\n          <leafValues>\n            -5.5109858512878418e-02 1.9907830655574799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2951 5.1336981356143951e-02</internalNodes>\n          <leafValues>\n            2.6425419375300407e-02 -4.4082790613174438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2952 4.0884170681238174e-02</internalNodes>\n          <leafValues>\n            2.0071209967136383e-01 -3.4887779504060745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2953 6.9165557622909546e-02</internalNodes>\n          <leafValues>\n            -2.9303310438990593e-02 3.4936821460723877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2954 4.7967158257961273e-02</internalNodes>\n          <leafValues>\n            -2.4416960775852203e-02 2.7018651366233826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2955 4.4068440794944763e-02</internalNodes>\n          <leafValues>\n            -4.0497269481420517e-02 2.4382269382476807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2956 -1.0287550091743469e-01</internalNodes>\n          <leafValues>\n            7.1105289459228516e-01 -9.9055245518684387e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2957 2.2407740354537964e-01</internalNodes>\n          <leafValues>\n            -5.4946999996900558e-02 1.9853439927101135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2958 -9.6570551395416260e-03</internalNodes>\n          <leafValues>\n            -2.5050228834152222e-01 3.7410989403724670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2959 7.9199701547622681e-02</internalNodes>\n          <leafValues>\n            -2.2147569805383682e-02 4.8771071434020996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2960 4.5983199030160904e-02</internalNodes>\n          <leafValues>\n            8.2229733467102051e-02 -3.9335750043392181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2961 4.2670449614524841e-01</internalNodes>\n          <leafValues>\n            1.7132800072431564e-02 -5.3996258974075317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2962 1.5413990616798401e-01</internalNodes>\n          <leafValues>\n            1.1902350001037121e-02 -6.8533718585968018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2963 -1.7699889838695526e-01</internalNodes>\n          <leafValues>\n            -6.3113832473754883e-01 1.2545200064778328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2964 -2.3769829422235489e-02</internalNodes>\n          <leafValues>\n            -1.4281429350376129e-01 1.4284349977970123e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2965 -8.3290286362171173e-02</internalNodes>\n          <leafValues>\n            3.6433398723602295e-01 -2.5287430733442307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2966 -3.0276349280029535e-03</internalNodes>\n          <leafValues>\n            -1.7501260340213776e-01 3.5528600215911865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2967 9.3518232461065054e-04</internalNodes>\n          <leafValues>\n            -3.4317269921302795e-01 2.8196020051836967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2968 8.6792530491948128e-03</internalNodes>\n          <leafValues>\n            9.1854788362979889e-02 -1.1349800229072571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2969 -4.3289531022310257e-03</internalNodes>\n          <leafValues>\n            7.6560527086257935e-02 -1.2850379943847656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2970 6.1485089361667633e-02</internalNodes>\n          <leafValues>\n            4.0065501816570759e-03 -4.2798730731010437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2971 -2.3108569905161858e-02</internalNodes>\n          <leafValues>\n            -3.2999789714813232e-01 3.1228100880980492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2972 -6.3490739557892084e-04</internalNodes>\n          <leafValues>\n            5.3318761289119720e-02 -6.0307938605546951e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2973 -4.1278889402747154e-03</internalNodes>\n          <leafValues>\n            1.5029670298099518e-01 -8.9805796742439270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2974 1.5408970415592194e-01</internalNodes>\n          <leafValues>\n            -2.3309229873120785e-03 9.6946477890014648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2975 1.8083740025758743e-02</internalNodes>\n          <leafValues>\n            -4.6674519777297974e-02 2.1941949427127838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2976 -6.0022968798875809e-02</internalNodes>\n          <leafValues>\n            3.7283098697662354e-01 -1.3637940399348736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2977 -1.6025049984455109e-01</internalNodes>\n          <leafValues>\n            3.9442360401153564e-01 -2.4808609858155251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2978 -2.3220200091600418e-02</internalNodes>\n          <leafValues>\n            -2.8352069854736328e-01 3.8456469774246216e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2979 3.2353829592466354e-02</internalNodes>\n          <leafValues>\n            3.0197540298104286e-02 -3.5371699929237366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2980 -1.2930749915540218e-02</internalNodes>\n          <leafValues>\n            -1.8275280296802521e-01 4.0219429880380630e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2981 -2.9022840317338705e-03</internalNodes>\n          <leafValues>\n            5.7583440095186234e-02 -1.8175080418586731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2982 3.7042409181594849e-02</internalNodes>\n          <leafValues>\n            2.3471569642424583e-02 -3.7222048640251160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2983 -1.4371460676193237e-01</internalNodes>\n          <leafValues>\n            -6.7353278398513794e-01 1.3768459670245647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2984 -1.0714099742472172e-02</internalNodes>\n          <leafValues>\n            2.3074600100517273e-01 -5.9898581355810165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2985 1.1370699852705002e-02</internalNodes>\n          <leafValues>\n            -5.5859100073575974e-02 2.1604159474372864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2986 -3.3829350024461746e-02</internalNodes>\n          <leafValues>\n            -3.2868561148643494e-01 1.6743719577789307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2987 3.6406058818101883e-02</internalNodes>\n          <leafValues>\n            2.3512810468673706e-02 -4.7999539971351624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2988 -3.9853308349847794e-02</internalNodes>\n          <leafValues>\n            3.0388408899307251e-01 -2.2388210520148277e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2989 2.3857640102505684e-02</internalNodes>\n          <leafValues>\n            -4.3960139155387878e-02 2.5021830201148987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2990 -8.6149327456951141e-02</internalNodes>\n          <leafValues>\n            -9.2641222476959229e-01 1.0180849581956863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2991 -2.7360459789633751e-02</internalNodes>\n          <leafValues>\n            -4.5331078767776489e-01 1.8517250195145607e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2992 4.6891667880117893e-03</internalNodes>\n          <leafValues>\n            1.4983110129833221e-02 -9.8690867424011230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2993 3.6140959709882736e-02</internalNodes>\n          <leafValues>\n            2.1240329369902611e-02 -4.2275610566139221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2994 1.0714419931173325e-01</internalNodes>\n          <leafValues>\n            -4.1592169553041458e-02 2.4880869686603546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2995 -1.2024450115859509e-02</internalNodes>\n          <leafValues>\n            -1.8906030058860779e-01 5.5290900170803070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2996 2.1671090275049210e-02</internalNodes>\n          <leafValues>\n            -3.7164088338613510e-02 2.9896330833435059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2997 -3.3205719664692879e-03</internalNodes>\n          <leafValues>\n            -9.1837689280509949e-02 1.1810839921236038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2998 -8.4256403148174286e-02</internalNodes>\n          <leafValues>\n            -5.4935282468795776e-01 4.6934271231293678e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2999 -2.7107410132884979e-03</internalNodes>\n          <leafValues>\n            5.2301179617643356e-02 -2.1932560205459595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3000 -1.9661630503833294e-03</internalNodes>\n          <leafValues>\n            6.9522850215435028e-02 -1.2369599938392639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3001 1.0835859924554825e-01</internalNodes>\n          <leafValues>\n            -1.6028439626097679e-02 6.7538297176361084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3002 -4.0661569684743881e-02</internalNodes>\n          <leafValues>\n            2.8239870071411133e-01 -1.8643079325556755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3003 9.4869043678045273e-03</internalNodes>\n          <leafValues>\n            -1.4204730093479156e-01 7.4218176305294037e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3004 -8.1196203827857971e-03</internalNodes>\n          <leafValues>\n            1.2733109295368195e-01 -7.5325429439544678e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3005 -3.6718908697366714e-02</internalNodes>\n          <leafValues>\n            2.5209701061248779e-01 -3.8642361760139465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3006 4.2515851557254791e-02</internalNodes>\n          <leafValues>\n            3.4613508731126785e-02 -3.1406149268150330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3007 -1.6484249383211136e-02</internalNodes>\n          <leafValues>\n            -3.4622931480407715e-01 2.6470340788364410e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3008 1.8608599901199341e-02</internalNodes>\n          <leafValues>\n            3.1125839799642563e-02 -2.3837919533252716e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3009 -1.0872060433030128e-02</internalNodes>\n          <leafValues>\n            2.3061220347881317e-01 -4.3469380587339401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3010 -4.0728081017732620e-02</internalNodes>\n          <leafValues>\n            1.3258880376815796e-01 -3.8833290338516235e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>240</maxWeakCount>\n      <stageThreshold>-1.3404430150985718e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3011 2.7802670374512672e-02</internalNodes>\n          <leafValues>\n            -1.8535159528255463e-01 2.3777860403060913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3012 1.6392730176448822e-03</internalNodes>\n          <leafValues>\n            -2.6787629723548889e-01 1.1733309924602509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3013 -3.0419689137488604e-03</internalNodes>\n          <leafValues>\n            1.9552859663963318e-01 -1.3240019977092743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3014 -2.7744288672693074e-04</internalNodes>\n          <leafValues>\n            6.0701820999383926e-02 -3.0465421080589294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3015 -2.7942769229412079e-03</internalNodes>\n          <leafValues>\n            -2.5370940566062927e-01 7.6147846877574921e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3016 7.4005699716508389e-03</internalNodes>\n          <leafValues>\n            6.5623492002487183e-02 -3.0128520727157593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3017 1.1316470336169004e-03</internalNodes>\n          <leafValues>\n            -1.3232930004596710e-01 1.3622519373893738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3018 -8.7306648492813110e-03</internalNodes>\n          <leafValues>\n            -1.0246229916810989e-01 1.0649880394339561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3019 -6.4327879808843136e-03</internalNodes>\n          <leafValues>\n            -2.1301789581775665e-01 7.7425397932529449e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3020 -1.3303949963301420e-03</internalNodes>\n          <leafValues>\n            9.6234247088432312e-02 -1.7086009681224823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3021 -2.3770590778440237e-03</internalNodes>\n          <leafValues>\n            1.1657089740037918e-01 -1.5135769546031952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3022 -5.3865360096096992e-03</internalNodes>\n          <leafValues>\n            -1.6851960122585297e-01 4.4324558228254318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3023 -5.6973858736455441e-03</internalNodes>\n          <leafValues>\n            -2.4702399969100952e-01 7.7735342085361481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3024 4.5654520392417908e-02</internalNodes>\n          <leafValues>\n            -1.6687670722603798e-02 1.4222119748592377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3025 -1.4929420103726443e-05</internalNodes>\n          <leafValues>\n            -3.2725390791893005e-01 4.8142101615667343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3026 -1.7635900294408202e-03</internalNodes>\n          <leafValues>\n            7.0115849375724792e-02 -1.6864499077200890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3027 1.9133860478177667e-03</internalNodes>\n          <leafValues>\n            -1.9570820033550262e-01 9.0169131755828857e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3028 -1.9309469498693943e-03</internalNodes>\n          <leafValues>\n            1.1824289709329605e-01 -1.2146709859371185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3029 9.7775761969387531e-04</internalNodes>\n          <leafValues>\n            1.1657200008630753e-01 -1.2770849466323853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3030 -5.2643800154328346e-03</internalNodes>\n          <leafValues>\n            1.9958360493183136e-01 -6.2928676605224609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3031 -2.2730689961463213e-03</internalNodes>\n          <leafValues>\n            -2.1804699301719666e-01 6.6565290093421936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3032 -3.5128789022564888e-03</internalNodes>\n          <leafValues>\n            8.1114247441291809e-02 -1.4230330288410187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3033 2.8102330397814512e-03</internalNodes>\n          <leafValues>\n            6.0884710401296616e-02 -2.2008429467678070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3034 -2.3211359977722168e-02</internalNodes>\n          <leafValues>\n            2.3182259500026703e-01 -3.4014280885457993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3035 -8.7068388238549232e-03</internalNodes>\n          <leafValues>\n            -2.0691269636154175e-01 6.8004116415977478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3036 7.0584798231720924e-03</internalNodes>\n          <leafValues>\n            -1.0500799864530563e-01 1.2610189616680145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3037 -6.8878240883350372e-02</internalNodes>\n          <leafValues>\n            4.2687618732452393e-01 -3.1305618584156036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3038 -1.2785149738192558e-02</internalNodes>\n          <leafValues>\n            -2.0268030464649200e-01 3.2005790621042252e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3039 -4.2242300696671009e-03</internalNodes>\n          <leafValues>\n            -2.1619689464569092e-01 7.5660832226276398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3040 -4.1660640388727188e-02</internalNodes>\n          <leafValues>\n            3.5601380467414856e-01 -3.6500900983810425e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3041 1.4983239583671093e-02</internalNodes>\n          <leafValues>\n            3.3663559705018997e-02 -4.3016681075096130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3042 1.8940219888463616e-03</internalNodes>\n          <leafValues>\n            -7.7785640954971313e-02 1.4130039513111115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3043 -1.0271830251440406e-03</internalNodes>\n          <leafValues>\n            6.1292048543691635e-02 -1.8569129705429077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3044 -1.0491760447621346e-02</internalNodes>\n          <leafValues>\n            -2.1280039846897125e-01 4.6641569584608078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3045 4.1263508610427380e-03</internalNodes>\n          <leafValues>\n            -6.3113473355770111e-02 2.1683399379253387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3046 2.1284529939293861e-02</internalNodes>\n          <leafValues>\n            -1.9541380926966667e-02 4.0555500984191895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3047 6.0370927676558495e-03</internalNodes>\n          <leafValues>\n            6.1322800815105438e-02 -1.7558750510215759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3048 2.8550080023705959e-03</internalNodes>\n          <leafValues>\n            -3.7402968853712082e-02 8.6794376373291016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3049 -3.0839299783110619e-02</internalNodes>\n          <leafValues>\n            4.5826399326324463e-01 -2.2824319079518318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3050 -1.2664640322327614e-02</internalNodes>\n          <leafValues>\n            -1.5179179608821869e-01 3.8325909525156021e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3051 8.4788333624601364e-03</internalNodes>\n          <leafValues>\n            -7.9164452850818634e-02 1.3821309804916382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3052 -9.0271160006523132e-03</internalNodes>\n          <leafValues>\n            2.0483429729938507e-01 -5.8428239077329636e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3053 -5.3999028168618679e-03</internalNodes>\n          <leafValues>\n            -1.9563870131969452e-01 6.2881819903850555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3054 4.8698568716645241e-03</internalNodes>\n          <leafValues>\n            4.7269448637962341e-02 -2.0357230305671692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3055 -5.6715728715062141e-03</internalNodes>\n          <leafValues>\n            1.6232620179653168e-01 -7.2473183274269104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3056 -6.3621107256039977e-04</internalNodes>\n          <leafValues>\n            -1.7648829519748688e-01 6.1553929001092911e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3057 -5.7404721155762672e-03</internalNodes>\n          <leafValues>\n            -2.3773890733718872e-01 4.8493091017007828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3058 2.3313059937208891e-03</internalNodes>\n          <leafValues>\n            -9.8087467253208160e-02 7.6705731451511383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3059 2.6579289697110653e-03</internalNodes>\n          <leafValues>\n            -1.0429590195417404e-01 1.3275440037250519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3060 -1.2426489964127541e-02</internalNodes>\n          <leafValues>\n            -1.7686119675636292e-01 7.8797861933708191e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3061 3.7596069741994143e-03</internalNodes>\n          <leafValues>\n            5.8028500527143478e-02 -2.0235699415206909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3062 -1.3941819779574871e-02</internalNodes>\n          <leafValues>\n            2.9365628957748413e-01 -3.1069029122591019e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3063 2.4605529382824898e-02</internalNodes>\n          <leafValues>\n            -4.9767840653657913e-02 2.0446600019931793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3064 1.1572279781103134e-01</internalNodes>\n          <leafValues>\n            5.7542040012776852e-03 -5.5789208412170410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3065 1.4880299568176270e-03</internalNodes>\n          <leafValues>\n            -1.2870499491691589e-01 8.6191363632678986e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3066 -1.0085869580507278e-02</internalNodes>\n          <leafValues>\n            -1.8718029558658600e-01 2.7143789455294609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3067 -4.0125781670212746e-03</internalNodes>\n          <leafValues>\n            -1.4843569695949554e-01 6.1482351273298264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3068 4.5241288840770721e-02</internalNodes>\n          <leafValues>\n            -2.2187199443578720e-02 4.9022749066352844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3069 -5.4588477360084653e-04</internalNodes>\n          <leafValues>\n            1.0740750283002853e-01 -9.4784751534461975e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3070 1.0822109878063202e-02</internalNodes>\n          <leafValues>\n            -1.1820139735937119e-01 8.4009647369384766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3071 6.4339267555624247e-04</internalNodes>\n          <leafValues>\n            -1.1072149872779846e-01 8.4126397967338562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3072 9.3544989824295044e-02</internalNodes>\n          <leafValues>\n            6.1726439744234085e-03 -3.8121530413627625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3073 -3.9214221760630608e-03</internalNodes>\n          <leafValues>\n            1.2969920039176941e-01 -7.5530029833316803e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3074 -4.5141312293708324e-03</internalNodes>\n          <leafValues>\n            -2.1222509443759918e-01 5.0941351801156998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3075 5.1563870161771774e-02</internalNodes>\n          <leafValues>\n            1.1215999722480774e-02 -8.4125047922134399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3076 -3.7086829543113708e-02</internalNodes>\n          <leafValues>\n            -3.3443790674209595e-01 1.2198350392282009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3077 -1.5274320030584931e-03</internalNodes>\n          <leafValues>\n            1.7022849619388580e-01 -5.3171109408140182e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3078 -3.3183719497174025e-03</internalNodes>\n          <leafValues>\n            1.4972689747810364e-01 -3.9522700011730194e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3079 -1.0695139877498150e-02</internalNodes>\n          <leafValues>\n            -2.0767690241336823e-01 4.8223540186882019e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3080 8.0909933894872665e-03</internalNodes>\n          <leafValues>\n            -5.5572569370269775e-02 8.1361941993236542e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3081 8.9193560415878892e-04</internalNodes>\n          <leafValues>\n            -1.4888229966163635e-01 5.6974019855260849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3082 2.1180939802434295e-04</internalNodes>\n          <leafValues>\n            -1.8776890635490417e-01 4.5087080448865891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3083 6.8865409120917320e-03</internalNodes>\n          <leafValues>\n            -7.4651539325714111e-02 1.1806459724903107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3084 3.8009819388389587e-01</internalNodes>\n          <leafValues>\n            9.6241412684321404e-03 -5.0257128477096558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3085 9.4844900071620941e-02</internalNodes>\n          <leafValues>\n            2.0284110680222511e-02 -3.9478880167007446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3086 -1.1133160296594724e-04</internalNodes>\n          <leafValues>\n            5.3717028349637985e-02 -1.5433239936828613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3087 3.5911630839109421e-02</internalNodes>\n          <leafValues>\n            -2.4374049156904221e-02 3.5077759623527527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3088 -2.9291780665516853e-02</internalNodes>\n          <leafValues>\n            -4.9002739787101746e-01 2.1694840863347054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3089 -2.4277189746499062e-02</internalNodes>\n          <leafValues>\n            -5.0206911563873291e-01 1.5807420015335083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3090 1.2620110064744949e-02</internalNodes>\n          <leafValues>\n            -4.8637848347425461e-02 2.1370050311088562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3091 -4.1045118123292923e-03</internalNodes>\n          <leafValues>\n            -1.6757939755916595e-01 6.2675923109054565e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3092 -2.3477169871330261e-01</internalNodes>\n          <leafValues>\n            6.2205511331558228e-01 -1.3949319720268250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3093 -6.7914247512817383e-02</internalNodes>\n          <leafValues>\n            -9.7014141082763672e-01 1.0490460321307182e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3094 1.4207609929144382e-03</internalNodes>\n          <leafValues>\n            -6.0801118612289429e-02 1.3500739634037018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3095 -5.0894408486783504e-03</internalNodes>\n          <leafValues>\n            -1.6992169618606567e-01 5.0795670598745346e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3096 -1.9226800650358200e-02</internalNodes>\n          <leafValues>\n            9.8861172795295715e-02 -3.3686220645904541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3097 1.0590540245175362e-02</internalNodes>\n          <leafValues>\n            5.9616900980472565e-02 -1.6495449841022491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3098 3.3726880792528391e-03</internalNodes>\n          <leafValues>\n            -3.8652341812849045e-02 5.5400568991899490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3099 -8.9012801647186279e-02</internalNodes>\n          <leafValues>\n            4.0750509500503540e-01 -2.4150330573320389e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3100 -2.3359079658985138e-01</internalNodes>\n          <leafValues>\n            -7.2641909122467041e-01 6.5185138955712318e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3101 -2.2732259333133698e-01</internalNodes>\n          <leafValues>\n            -8.9977008104324341e-01 9.1146891936659813e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3102 -2.9601769521832466e-02</internalNodes>\n          <leafValues>\n            -4.3270850181579590e-01 1.6021190211176872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3103 -6.9494689814746380e-03</internalNodes>\n          <leafValues>\n            1.5218999981880188e-01 -6.1896830797195435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3104 -1.9150479929521680e-03</internalNodes>\n          <leafValues>\n            7.2570547461509705e-02 -1.3121089339256287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3105 8.5106380283832550e-03</internalNodes>\n          <leafValues>\n            -5.7326089590787888e-02 1.5743100643157959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3106 -2.4363139644265175e-02</internalNodes>\n          <leafValues>\n            9.5700822770595551e-02 -5.8364428579807281e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3107 -2.2522659972310066e-02</internalNodes>\n          <leafValues>\n            -4.6943131089210510e-01 2.0241359248757362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3108 -4.4660381972789764e-03</internalNodes>\n          <leafValues>\n            7.6211109757423401e-02 -8.1844657659530640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3109 -4.2101819999516010e-03</internalNodes>\n          <leafValues>\n            -2.2083589434623718e-01 4.7010198235511780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3110 5.7130381464958191e-03</internalNodes>\n          <leafValues>\n            -6.2254000455141068e-02 5.2705820649862289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3111 -5.6021669879555702e-03</internalNodes>\n          <leafValues>\n            -1.8985760211944580e-01 5.0114821642637253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3112 -2.2042069584131241e-02</internalNodes>\n          <leafValues>\n            8.7683752179145813e-02 -2.4777179583907127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3113 -2.1817081142216921e-03</internalNodes>\n          <leafValues>\n            1.6766600310802460e-01 -6.6771760582923889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3114 2.4545300751924515e-02</internalNodes>\n          <leafValues>\n            4.9205120652914047e-02 -2.2503720223903656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3115 -2.4728688877075911e-03</internalNodes>\n          <leafValues>\n            1.3539670407772064e-01 -6.2330130487680435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3116 2.3717728909105062e-03</internalNodes>\n          <leafValues>\n            5.7926058769226074e-02 -1.3325250148773193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3117 -3.8999661803245544e-02</internalNodes>\n          <leafValues>\n            2.9875481128692627e-01 -3.0257239937782288e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3118 -1.7835620092228055e-03</internalNodes>\n          <leafValues>\n            9.2680282890796661e-02 -7.4350588023662567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3119 1.9984450191259384e-02</internalNodes>\n          <leafValues>\n            2.2409349679946899e-02 -4.1501939296722412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3120 4.1170548647642136e-03</internalNodes>\n          <leafValues>\n            5.3432278335094452e-02 -1.5092259645462036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3121 4.3995600193738937e-02</internalNodes>\n          <leafValues>\n            1.1389889754354954e-02 -6.6494518518447876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3122 -3.5350578837096691e-03</internalNodes>\n          <leafValues>\n            1.1005590111017227e-01 -7.6377056539058685e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3123 1.4632029924541712e-03</internalNodes>\n          <leafValues>\n            -5.6962151080369949e-02 1.3184599578380585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3124 -4.9925539642572403e-03</internalNodes>\n          <leafValues>\n            -1.4675070345401764e-01 5.5129978805780411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3125 -7.8646428883075714e-02</internalNodes>\n          <leafValues>\n            -5.2768182754516602e-01 1.3662739656865597e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3126 -4.3559111654758453e-03</internalNodes>\n          <leafValues>\n            9.1798119246959686e-02 -5.7598169893026352e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3127 8.2531487569212914e-03</internalNodes>\n          <leafValues>\n            -6.5613977611064911e-02 1.3083070516586304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3128 -3.5033349413424730e-03</internalNodes>\n          <leafValues>\n            -1.2742599844932556e-01 6.0875169932842255e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3129 3.9662471972405910e-03</internalNodes>\n          <leafValues>\n            -5.5715151131153107e-02 1.4783249795436859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3130 -1.0260219685733318e-02</internalNodes>\n          <leafValues>\n            -1.3472290337085724e-01 4.4514350593090057e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3131 3.6724930396303535e-04</internalNodes>\n          <leafValues>\n            -1.3727700710296631e-01 6.1179649084806442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3132 1.9500199705362320e-02</internalNodes>\n          <leafValues>\n            -5.9033330529928207e-02 1.5589320659637451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3133 1.4041420072317123e-02</internalNodes>\n          <leafValues>\n            2.2140439599752426e-02 -4.2831090092658997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3134 3.8459740579128265e-02</internalNodes>\n          <leafValues>\n            1.6875730827450752e-02 -5.2425742149353027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3135 -2.5901539251208305e-02</internalNodes>\n          <leafValues>\n            2.5163099169731140e-01 -3.2579511404037476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3136 2.8264479711651802e-02</internalNodes>\n          <leafValues>\n            2.1297719329595566e-02 -2.3978309333324432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3137 -5.3067881613969803e-02</internalNodes>\n          <leafValues>\n            7.6594692468643188e-01 -1.0163240134716034e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3138 1.6842440236359835e-03</internalNodes>\n          <leafValues>\n            4.0168728679418564e-02 -2.1810980141162872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3139 6.5255112713202834e-04</internalNodes>\n          <leafValues>\n            -3.2155249267816544e-02 2.6028048992156982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3140 -1.5381099283695221e-01</internalNodes>\n          <leafValues>\n            -7.9570180177688599e-01 9.9420538172125816e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3141 -1.7530319746583700e-04</internalNodes>\n          <leafValues>\n            6.1257161200046539e-02 -1.1830890178680420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3142 1.1829809518530965e-03</internalNodes>\n          <leafValues>\n            -8.2589529454708099e-02 5.8234758675098419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3143 1.4753890223801136e-02</internalNodes>\n          <leafValues>\n            4.6728778630495071e-02 -1.9874340295791626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3144 1.0592579841613770e-02</internalNodes>\n          <leafValues>\n            -5.7157158851623535e-02 1.2261729687452316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3145 -4.6638969331979752e-02</internalNodes>\n          <leafValues>\n            3.9221999049186707e-01 -1.8770450726151466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3146 -2.2761020809412003e-03</internalNodes>\n          <leafValues>\n            -1.9819819927215576e-01 3.2669950276613235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3147 -8.9252636826131493e-05</internalNodes>\n          <leafValues>\n            -1.7795699834823608e-01 4.5088160783052444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3148 -4.8888921737670898e-03</internalNodes>\n          <leafValues>\n            3.7973329424858093e-01 -2.5622500106692314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3149 -4.7039450146257877e-03</internalNodes>\n          <leafValues>\n            -1.4075440168380737e-01 5.1885869354009628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3150 6.8887867964804173e-03</internalNodes>\n          <leafValues>\n            -6.0707900673151016e-02 6.7318782210350037e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3151 9.4449967145919800e-02</internalNodes>\n          <leafValues>\n            -4.3975159525871277e-02 1.6885830461978912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3152 5.1520671695470810e-02</internalNodes>\n          <leafValues>\n            3.8239071145653725e-03 -6.3077712059020996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3153 6.3957129605114460e-03</internalNodes>\n          <leafValues>\n            4.4094309210777283e-02 -1.8156020343303680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3154 -4.9659270793199539e-02</internalNodes>\n          <leafValues>\n            1.1174239963293076e-01 -5.5821210145950317e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3155 -6.9081829860806465e-03</internalNodes>\n          <leafValues>\n            -1.4038950204849243e-01 5.9535760432481766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3156 9.2546567320823669e-03</internalNodes>\n          <leafValues>\n            -3.3587910234928131e-02 5.8593101799488068e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3157 5.0454521551728249e-03</internalNodes>\n          <leafValues>\n            5.3777661174535751e-02 -1.3626030087471008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3158 -3.3333420753479004e-02</internalNodes>\n          <leafValues>\n            2.4641269445419312e-01 -3.1888678669929504e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3159 6.1201080679893494e-02</internalNodes>\n          <leafValues>\n            2.0013030618429184e-02 -3.9326569437980652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3160 -1.0175120085477829e-02</internalNodes>\n          <leafValues>\n            7.5324602425098419e-02 -3.9622548967599869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3161 1.0271370410919189e-02</internalNodes>\n          <leafValues>\n            -5.2234519273042679e-02 1.7939470708370209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3162 -5.1337860524654388e-02</internalNodes>\n          <leafValues>\n            -3.1097239255905151e-01 2.1656470373272896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3163 2.3615739773958921e-03</internalNodes>\n          <leafValues>\n            -6.4843319356441498e-02 1.1771979928016663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3164 -2.7691819705069065e-03</internalNodes>\n          <leafValues>\n            1.4682589471340179e-01 -5.7794518768787384e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3165 2.1457809954881668e-02</internalNodes>\n          <leafValues>\n            2.5269350036978722e-02 -3.3404821157455444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3166 -5.9619098901748657e-03</internalNodes>\n          <leafValues>\n            9.9241338670253754e-02 -3.5371959209442139e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3167 7.5217390060424805e-01</internalNodes>\n          <leafValues>\n            7.7095897868275642e-03 -8.6434108018875122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3168 -9.2514551943168044e-04</internalNodes>\n          <leafValues>\n            3.8251910358667374e-02 -7.5597628951072693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3169 4.0818289853632450e-03</internalNodes>\n          <leafValues>\n            6.6699139773845673e-02 -1.1289499700069427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3170 1.6256010159850121e-02</internalNodes>\n          <leafValues>\n            -1.8782900646328926e-02 1.8875749409198761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3171 -9.3405954539775848e-03</internalNodes>\n          <leafValues>\n            -1.6462349891662598e-01 4.6859718859195709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3172 -3.8136378861963749e-04</internalNodes>\n          <leafValues>\n            6.0498170554637909e-02 -1.0089360177516937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3173 -2.3470960557460785e-02</internalNodes>\n          <leafValues>\n            1.8546760082244873e-01 -3.9577301591634750e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3174 -7.8684352338314056e-02</internalNodes>\n          <leafValues>\n            -6.0540008544921875e-01 1.3162979856133461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3175 1.0616140067577362e-01</internalNodes>\n          <leafValues>\n            9.4080185517668724e-03 -7.2416877746582031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3176 -6.9211378693580627e-02</internalNodes>\n          <leafValues>\n            -9.2819648981094360e-01 5.4140980355441570e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3177 -4.3828289955854416e-02</internalNodes>\n          <leafValues>\n            5.4933768510818481e-01 -1.5516829676926136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3178 5.6881271302700043e-03</internalNodes>\n          <leafValues>\n            3.7328861653804779e-02 -1.2019480019807816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3179 3.6933881044387817e-01</internalNodes>\n          <leafValues>\n            -9.9545158445835114e-03 8.1607538461685181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3180 -1.0447519831359386e-02</internalNodes>\n          <leafValues>\n            1.4190499484539032e-01 -4.9798399209976196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3181 1.5151320025324821e-02</internalNodes>\n          <leafValues>\n            2.2705320268869400e-02 -3.4523698687553406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3182 1.2503850460052490e-01</internalNodes>\n          <leafValues>\n            -2.7150910347700119e-02 3.0379050970077515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3183 -9.1995187103748322e-03</internalNodes>\n          <leafValues>\n            -1.7020559310913086e-01 4.4314298778772354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3184 7.1795531548559666e-03</internalNodes>\n          <leafValues>\n            -7.8971788287162781e-02 6.3919156789779663e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3185 -1.8217830359935760e-01</internalNodes>\n          <leafValues>\n            -9.7598892450332642e-01 7.1003441698849201e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3186 1.5047369743115269e-05</internalNodes>\n          <leafValues>\n            -9.8960377275943756e-02 3.9371099323034286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3187 -3.8763400167226791e-02</internalNodes>\n          <leafValues>\n            -5.9095138311386108e-01 1.0429039597511292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3188 -4.3799880892038345e-02</internalNodes>\n          <leafValues>\n            2.5290209054946899e-01 -9.5704924315214157e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3189 -5.6705519556999207e-02</internalNodes>\n          <leafValues>\n            -7.2466772794723511e-01 9.0332692489027977e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3190 7.5183928012847900e-02</internalNodes>\n          <leafValues>\n            -6.7565650679171085e-03 7.3075437545776367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3191 -6.4183590002357960e-03</internalNodes>\n          <leafValues>\n            8.5421830415725708e-02 -7.6056882739067078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3192 1.3349299551919103e-03</internalNodes>\n          <leafValues>\n            6.9977663457393646e-02 -9.2187918722629547e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3193 2.8028399683535099e-03</internalNodes>\n          <leafValues>\n            -5.0953198224306107e-02 1.2934680283069611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3194 -6.4196899533271790e-02</internalNodes>\n          <leafValues>\n            -6.1751341819763184e-01 8.7323756888508797e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3195 1.7879910301417112e-03</internalNodes>\n          <leafValues>\n            -5.9445429593324661e-02 1.1325009912252426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3196 2.3370790295302868e-03</internalNodes>\n          <leafValues>\n            2.2643320262432098e-02 -1.7427070438861847e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3197 2.1500359289348125e-03</internalNodes>\n          <leafValues>\n            -5.1846258342266083e-02 1.5027989447116852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3198 -2.9744949191808701e-02</internalNodes>\n          <leafValues>\n            -1.7235560715198517e-01 1.6160540282726288e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3199 -2.9182229191064835e-03</internalNodes>\n          <leafValues>\n            -1.1646019667387009e-01 5.3380940109491348e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3200 -5.2581899799406528e-03</internalNodes>\n          <leafValues>\n            -8.4262102842330933e-02 3.6880351603031158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3201 2.0302489399909973e-02</internalNodes>\n          <leafValues>\n            -5.3297229111194611e-02 1.6949890553951263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3202 3.1120770145207644e-03</internalNodes>\n          <leafValues>\n            4.4630430638790131e-02 -1.4054660499095917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3203 -7.7524736523628235e-02</internalNodes>\n          <leafValues>\n            -6.5038281679153442e-01 1.0468889959156513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3204 2.0978450775146484e-02</internalNodes>\n          <leafValues>\n            -3.0001569539308548e-02 1.9233350455760956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3205 2.0581670105457306e-03</internalNodes>\n          <leafValues>\n            5.1535431295633316e-02 -1.3114020228385925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3206 -7.8407032415270805e-03</internalNodes>\n          <leafValues>\n            -1.3882939517498016e-01 5.0657931715250015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3207 -7.1894749999046326e-02</internalNodes>\n          <leafValues>\n            2.1866980195045471e-01 -3.3615190535783768e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3208 1.4218500256538391e-01</internalNodes>\n          <leafValues>\n            1.2880220077931881e-02 -5.8853518962860107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3209 4.4800378382205963e-03</internalNodes>\n          <leafValues>\n            -5.5522039532661438e-02 1.1976230144500732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3210 -9.4673000276088715e-03</internalNodes>\n          <leafValues>\n            -1.2036380171775818e-01 3.0232360586524010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3211 -1.2275399640202522e-03</internalNodes>\n          <leafValues>\n            8.3563826978206635e-02 -8.7046720087528229e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3212 -6.2556960619986057e-03</internalNodes>\n          <leafValues>\n            6.9355137646198273e-02 -3.5146340727806091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3213 6.4953900873661041e-02</internalNodes>\n          <leafValues>\n            -1.9296510145068169e-02 3.4898158907890320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3214 -3.2067541033029556e-03</internalNodes>\n          <leafValues>\n            -1.5205690264701843e-01 5.5897928774356842e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3215 -4.8260089010000229e-02</internalNodes>\n          <leafValues>\n            -6.0309630632400513e-01 1.0463859885931015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3216 -4.2638331651687622e-03</internalNodes>\n          <leafValues>\n            -1.5278290212154388e-01 1.8424319103360176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3217 4.9363691359758377e-02</internalNodes>\n          <leafValues>\n            -2.5442009791731834e-02 3.9227759838104248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3218 2.3624610621482134e-03</internalNodes>\n          <leafValues>\n            3.8519620895385742e-01 -1.7071360722184181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3219 2.5921489577740431e-03</internalNodes>\n          <leafValues>\n            -1.5459729731082916e-01 4.3975789099931717e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3220 1.1510170064866543e-02</internalNodes>\n          <leafValues>\n            6.0740210115909576e-02 -9.8671890795230865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3221 3.9182868786156178e-03</internalNodes>\n          <leafValues>\n            2.6165749877691269e-02 -2.9697629809379578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3222 7.3265641927719116e-02</internalNodes>\n          <leafValues>\n            5.5715530179440975e-03 -3.0474159121513367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3223 -4.8912810161709785e-03</internalNodes>\n          <leafValues>\n            1.2753780186176300e-01 -6.6236838698387146e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3224 -1.3187030330300331e-02</internalNodes>\n          <leafValues>\n            -2.0257690548896790e-01 3.0369829386472702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3225 1.8196239834651351e-03</internalNodes>\n          <leafValues>\n            4.9198139458894730e-02 -1.3782709836959839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3226 -1.0299400426447392e-02</internalNodes>\n          <leafValues>\n            1.3534359633922577e-01 -2.9193470254540443e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3227 1.7157079279422760e-01</internalNodes>\n          <leafValues>\n            -9.5548974350094795e-03 7.1399718523025513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3228 -3.4571110736578703e-03</internalNodes>\n          <leafValues>\n            6.1094630509614944e-02 -7.6816998422145844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3229 3.3349241130053997e-04</internalNodes>\n          <leafValues>\n            -1.8768610060214996e-01 3.9411719888448715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3230 5.6019209325313568e-02</internalNodes>\n          <leafValues>\n            8.5914824157953262e-03 -7.3577058315277100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3231 6.2299368437379599e-04</internalNodes>\n          <leafValues>\n            -9.4062000513076782e-02 6.7965887486934662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3232 -1.4288679696619511e-02</internalNodes>\n          <leafValues>\n            2.4144929647445679e-01 -2.7025459334254265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3233 -9.9114552140235901e-03</internalNodes>\n          <leafValues>\n            -1.5346029400825500e-01 5.3243361413478851e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3234 -7.0727966725826263e-02</internalNodes>\n          <leafValues>\n            -7.1243101358413696e-01 7.4889077804982662e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3235 1.6112169250845909e-02</internalNodes>\n          <leafValues>\n            -3.5437509417533875e-02 2.2026020288467407e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3236 2.9938609804958105e-03</internalNodes>\n          <leafValues>\n            1.1530820280313492e-02 -9.2017240822315216e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3237 1.4030840247869492e-03</internalNodes>\n          <leafValues>\n            5.4302141070365906e-02 -1.1777610331773758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3238 -8.9894913136959076e-02</internalNodes>\n          <leafValues>\n            -6.7658591270446777e-01 1.5741019742563367e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3239 2.7459259144961834e-03</internalNodes>\n          <leafValues>\n            2.9860800132155418e-02 -2.2091430425643921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3240 2.2225940600037575e-02</internalNodes>\n          <leafValues>\n            -4.6592909842729568e-02 8.0418691039085388e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3241 4.4512529857456684e-03</internalNodes>\n          <leafValues>\n            1.0706499963998795e-01 -6.5101496875286102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3242 -2.1191150881350040e-03</internalNodes>\n          <leafValues>\n            3.9871860295534134e-02 -5.2555959671735764e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3243 1.0229589790105820e-01</internalNodes>\n          <leafValues>\n            1.3386270031332970e-02 -4.5546561479568481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3244 -6.8260570988059044e-03</internalNodes>\n          <leafValues>\n            1.2695349752902985e-01 -5.9704031795263290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3245 -5.6890580803155899e-02</internalNodes>\n          <leafValues>\n            4.0180799365043640e-01 -1.6048269346356392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3246 -1.8590029329061508e-02</internalNodes>\n          <leafValues>\n            -4.0374109148979187e-01 1.3502580113708973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3247 3.3882200717926025e-02</internalNodes>\n          <leafValues>\n            7.8824451193213463e-03 -7.9268622398376465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3248 1.8759339582175016e-03</internalNodes>\n          <leafValues>\n            -3.4521240741014481e-02 1.8177880346775055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3249 1.5652549918740988e-03</internalNodes>\n          <leafValues>\n            4.8419889062643051e-02 -1.5185169875621796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3250 3.9563868194818497e-03</internalNodes>\n          <leafValues>\n            -4.2162090539932251e-02 7.8943721950054169e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>199</maxWeakCount>\n      <stageThreshold>-1.4275209903717041e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3251 8.8487491011619568e-02</internalNodes>\n          <leafValues>\n            -2.2935929894447327e-01 2.4001109600067139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3252 4.3344359844923019e-02</internalNodes>\n          <leafValues>\n            -1.9927449524402618e-01 2.0298740267753601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3253 1.5985079109668732e-02</internalNodes>\n          <leafValues>\n            -1.9890889525413513e-01 1.9233879446983337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3254 9.8411232233047485e-02</internalNodes>\n          <leafValues>\n            -9.4830892980098724e-02 2.4474050104618073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3255 1.0079979896545410e-02</internalNodes>\n          <leafValues>\n            -4.8000910878181458e-01 5.9808451682329178e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3256 6.2629938125610352e-02</internalNodes>\n          <leafValues>\n            -1.5902659296989441e-01 1.5163069963455200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3257 1.3623869977891445e-02</internalNodes>\n          <leafValues>\n            -2.7451339364051819e-01 9.0433366596698761e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3258 -3.8067731074988842e-03</internalNodes>\n          <leafValues>\n            -2.9342180490493774e-01 7.3020830750465393e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3259 -1.4649610035121441e-02</internalNodes>\n          <leafValues>\n            2.6059079170227051e-01 -9.5248378813266754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3260 -4.9288192531093955e-04</internalNodes>\n          <leafValues>\n            5.9352219104766846e-02 -2.8081470727920532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3261 -5.1220930181443691e-03</internalNodes>\n          <leafValues>\n            -2.4218030273914337e-01 8.1701509654521942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3262 3.3120220177806914e-04</internalNodes>\n          <leafValues>\n            -4.0093910694122314e-01 3.4026090055704117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3263 -7.4724480509757996e-04</internalNodes>\n          <leafValues>\n            6.0560788959264755e-02 -2.9127869009971619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3264 4.8829670995473862e-02</internalNodes>\n          <leafValues>\n            -7.2298422455787659e-02 2.6132971048355103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3265 2.6994010433554649e-02</internalNodes>\n          <leafValues>\n            9.5457129180431366e-02 -2.6758649945259094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3266 -2.1151660475879908e-03</internalNodes>\n          <leafValues>\n            -2.5773069262504578e-01 5.3247869014739990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3267 2.2652999177807942e-05</internalNodes>\n          <leafValues>\n            -3.0092310905456543e-01 5.9096790850162506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3268 1.1034930124878883e-02</internalNodes>\n          <leafValues>\n            -7.4277937412261963e-02 1.9048790633678436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3269 -1.0275219567120075e-02</internalNodes>\n          <leafValues>\n            -3.2835999131202698e-01 4.9218688160181046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3270 -8.3319991827011108e-03</internalNodes>\n          <leafValues>\n            -2.9651468992233276e-01 3.9428789168596268e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3271 5.0808671861886978e-02</internalNodes>\n          <leafValues>\n            -4.7661241143941879e-02 3.7404251098632812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3272 -1.2126479996368289e-03</internalNodes>\n          <leafValues>\n            -1.2148889899253845e-01 6.5059438347816467e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3273 4.1254470124840736e-03</internalNodes>\n          <leafValues>\n            -1.4912040531635284e-01 1.1146119982004166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3274 -1.8284359946846962e-02</internalNodes>\n          <leafValues>\n            -2.8573518991470337e-01 5.9268131852149963e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3275 1.4156280457973480e-01</internalNodes>\n          <leafValues>\n            -3.4436151385307312e-02 4.6374419331550598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3276 -3.6982420831918716e-02</internalNodes>\n          <leafValues>\n            -5.0853198766708374e-01 2.5087080895900726e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3277 5.0303530879318714e-03</internalNodes>\n          <leafValues>\n            9.4626903533935547e-02 -1.6120310127735138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3278 -4.6149080991744995e-01</internalNodes>\n          <leafValues>\n            4.5096570253372192e-01 -3.1209290027618408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3279 -1.9794689491391182e-02</internalNodes>\n          <leafValues>\n            -4.1046530008316040e-01 3.8790289312601089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3280 -2.3872030898928642e-02</internalNodes>\n          <leafValues>\n            -1.5252740681171417e-01 9.2825219035148621e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3281 1.8736299825832248e-03</internalNodes>\n          <leafValues>\n            -1.9186599552631378e-01 6.9048486649990082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3282 5.8244299143552780e-02</internalNodes>\n          <leafValues>\n            -2.2612230852246284e-02 2.1975080668926239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3283 1.5281150117516518e-02</internalNodes>\n          <leafValues>\n            5.6379750370979309e-02 -2.4171100556850433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3284 1.3347120583057404e-01</internalNodes>\n          <leafValues>\n            -4.1846349835395813e-02 1.3641799986362457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3285 -1.8359240144491196e-02</internalNodes>\n          <leafValues>\n            1.3650700449943542e-01 -1.0537090152502060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3286 -1.1236529797315598e-02</internalNodes>\n          <leafValues>\n            -2.1045160293579102e-01 6.1872761696577072e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3287 -7.2013743221759796e-02</internalNodes>\n          <leafValues>\n            -3.8488849997520447e-01 3.6731179803609848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3288 -1.9893420860171318e-02</internalNodes>\n          <leafValues>\n            1.9913719594478607e-01 -5.4470948874950409e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3289 -8.1342989578843117e-03</internalNodes>\n          <leafValues>\n            -2.7529388666152954e-01 4.7152820974588394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3290 -1.3614459894597530e-02</internalNodes>\n          <leafValues>\n            1.9248710572719574e-01 -6.0025930404663086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3291 -6.4553669653832912e-03</internalNodes>\n          <leafValues>\n            -2.1480080485343933e-01 6.2654919922351837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3292 -7.2288706898689270e-02</internalNodes>\n          <leafValues>\n            -5.3200727701187134e-01 2.2132480517029762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3293 -7.0425979793071747e-02</internalNodes>\n          <leafValues>\n            -3.2588490843772888e-01 3.7150900810956955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3294 -1.2219670228660107e-02</internalNodes>\n          <leafValues>\n            -6.5945722162723541e-02 2.8728110715746880e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3295 6.9816941395401955e-03</internalNodes>\n          <leafValues>\n            -2.8508388996124268e-01 4.2512468993663788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3296 -2.1437550894916058e-03</internalNodes>\n          <leafValues>\n            -1.0019320249557495e-01 7.1198999881744385e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3297 -1.5813990030437708e-03</internalNodes>\n          <leafValues>\n            -1.2926709651947021e-01 9.5332272350788116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3298 2.1735160771640949e-05</internalNodes>\n          <leafValues>\n            -1.9246159493923187e-01 5.3724698722362518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3299 -1.0075280070304871e-01</internalNodes>\n          <leafValues>\n            5.8181059360504150e-01 -2.1155519410967827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3300 8.0153037561103702e-04</internalNodes>\n          <leafValues>\n            -1.6752170026302338e-01 6.1912689357995987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3301 -1.3424370437860489e-02</internalNodes>\n          <leafValues>\n            1.7007820308208466e-01 -6.5821729600429535e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3302 2.5006510317325592e-02</internalNodes>\n          <leafValues>\n            3.1838789582252502e-02 -3.5664460062980652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3303 -2.3061310872435570e-02</internalNodes>\n          <leafValues>\n            -5.3446078300476074e-01 2.0500430837273598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3304 -8.1409228732809424e-04</internalNodes>\n          <leafValues>\n            7.3716811835765839e-02 -9.8385728895664215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3305 -1.3083440251648426e-02</internalNodes>\n          <leafValues>\n            2.3585100471973419e-01 -4.7893758863210678e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3306 1.0480909608304501e-02</internalNodes>\n          <leafValues>\n            -6.7725770175457001e-02 1.1783230304718018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3307 -4.3198268860578537e-02</internalNodes>\n          <leafValues>\n            -4.3816858530044556e-01 2.5101570412516594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3308 -3.2453269232064486e-03</internalNodes>\n          <leafValues>\n            -2.2451759874820709e-01 4.3056890368461609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3309 -1.6294110100716352e-03</internalNodes>\n          <leafValues>\n            -2.3388780653476715e-01 4.5073401182889938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3310 -3.2911408692598343e-02</internalNodes>\n          <leafValues>\n            2.1012680232524872e-01 -2.1296700462698936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3311 1.4785619896429125e-05</internalNodes>\n          <leafValues>\n            -7.0854157209396362e-02 1.4696949720382690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3312 -6.0208540409803391e-02</internalNodes>\n          <leafValues>\n            -5.2135831117630005e-01 1.9577400758862495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3313 1.1327289976179600e-03</internalNodes>\n          <leafValues>\n            4.4817470014095306e-02 -2.4390450119972229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3314 8.3639882504940033e-03</internalNodes>\n          <leafValues>\n            -5.6976079940795898e-02 1.1684290319681168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3315 1.4313389547169209e-02</internalNodes>\n          <leafValues>\n            4.7445211559534073e-02 -2.2202989459037781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3316 -1.1530060321092606e-01</internalNodes>\n          <leafValues>\n            8.6662977933883667e-01 -4.2397230863571167e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3317 -2.0798090845346451e-02</internalNodes>\n          <leafValues>\n            2.8666529059410095e-01 -4.0919508785009384e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3318 -1.8268700689077377e-02</internalNodes>\n          <leafValues>\n            1.3087140023708344e-01 -4.5348200947046280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3319 -2.5494489073753357e-01</internalNodes>\n          <leafValues>\n            -3.2410839200019836e-01 4.0496330708265305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3320 -2.1786570549011230e-02</internalNodes>\n          <leafValues>\n            3.3126661181449890e-01 -3.7021800875663757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3321 4.2743898928165436e-02</internalNodes>\n          <leafValues>\n            3.2316859811544418e-02 -3.5259619355201721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3322 3.4730590879917145e-02</internalNodes>\n          <leafValues>\n            3.4049548208713531e-02 -2.1393370628356934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3323 -8.8458160462323576e-05</internalNodes>\n          <leafValues>\n            -3.1134480237960815e-01 3.9364520460367203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3324 2.2288469970226288e-01</internalNodes>\n          <leafValues>\n            -8.7889749556779861e-03 8.6566871404647827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3325 2.7045139670372009e-01</internalNodes>\n          <leafValues>\n            -5.2694901823997498e-02 1.8746510148048401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3326 -2.4789940565824509e-02</internalNodes>\n          <leafValues>\n            2.7650299668312073e-01 -2.7306249365210533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3327 -3.5731170326471329e-02</internalNodes>\n          <leafValues>\n            4.1157469153404236e-01 -2.2886089980602264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3328 4.7842580825090408e-02</internalNodes>\n          <leafValues>\n            2.2989360615611076e-02 -4.1287249326705933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3329 -3.1846091151237488e-02</internalNodes>\n          <leafValues>\n            3.8073039054870605e-01 -2.9582230374217033e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3330 -6.9219218567013741e-03</internalNodes>\n          <leafValues>\n            -1.3741379976272583e-01 4.8710118979215622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3331 4.1339758783578873e-02</internalNodes>\n          <leafValues>\n            4.4119630008935928e-02 -2.3561610281467438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3332 -3.4157071262598038e-02</internalNodes>\n          <leafValues>\n            -2.4877929687500000e-01 1.1872059665620327e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3333 -1.2198990210890770e-02</internalNodes>\n          <leafValues>\n            -2.1426199376583099e-01 5.1533300429582596e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3334 -7.9321218654513359e-03</internalNodes>\n          <leafValues>\n            8.1553332507610321e-02 -6.9921717047691345e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3335 -4.2665388435125351e-02</internalNodes>\n          <leafValues>\n            -5.0616562366485596e-01 1.9237969070672989e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3336 3.5445880144834518e-02</internalNodes>\n          <leafValues>\n            -1.6394840553402901e-02 1.7057849466800690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3337 4.5686280727386475e-01</internalNodes>\n          <leafValues>\n            1.9264170899987221e-02 -5.4413592815399170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3338 3.1118420884013176e-02</internalNodes>\n          <leafValues>\n            -3.0776979401707649e-02 1.3581100106239319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3339 -1.6103679314255714e-02</internalNodes>\n          <leafValues>\n            2.1244280040264130e-01 -4.8341780900955200e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3340 5.7916441000998020e-03</internalNodes>\n          <leafValues>\n            -7.3984377086162567e-02 3.5749029368162155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3341 -6.5660297870635986e-02</internalNodes>\n          <leafValues>\n            2.6183378696441650e-01 -4.1004821658134460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3342 8.1464983522891998e-02</internalNodes>\n          <leafValues>\n            1.2928999960422516e-02 -3.5362771153450012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3343 1.2561170384287834e-02</internalNodes>\n          <leafValues>\n            -1.9108769297599792e-01 6.9965943694114685e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3344 7.8783802688121796e-02</internalNodes>\n          <leafValues>\n            -5.4801939986646175e-03 3.9217329025268555e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3345 3.3984828740358353e-02</internalNodes>\n          <leafValues>\n            8.4328763186931610e-02 -1.2477640062570572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3346 1.7718339338898659e-02</internalNodes>\n          <leafValues>\n            4.4793829321861267e-02 -1.9760879874229431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3347 -9.8835285753011703e-03</internalNodes>\n          <leafValues>\n            -1.5149329602718353e-01 6.7348048090934753e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3348 2.3850230500102043e-02</internalNodes>\n          <leafValues>\n            -3.3219821751117706e-02 1.6131630539894104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3349 -3.9590701460838318e-02</internalNodes>\n          <leafValues>\n            3.9903929829597473e-01 -2.8885990381240845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3350 3.4961920231580734e-02</internalNodes>\n          <leafValues>\n            2.2103229537606239e-02 -5.2885407209396362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3351 9.4825841486454010e-02</internalNodes>\n          <leafValues>\n            9.5985615625977516e-03 -8.2035672664642334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3352 -1.0215540230274200e-01</internalNodes>\n          <leafValues>\n            -2.0551559329032898e-01 3.0388559680432081e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3353 -9.3128867447376251e-03</internalNodes>\n          <leafValues>\n            3.6827068775892258e-02 -2.4656419456005096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3354 -5.4135788232088089e-03</internalNodes>\n          <leafValues>\n            -2.3878090083599091e-01 4.1015189141035080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3355 -2.6281980797648430e-02</internalNodes>\n          <leafValues>\n            2.7853861451148987e-01 -3.6868080496788025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3356 -9.9223516881465912e-03</internalNodes>\n          <leafValues>\n            -2.5322121381759644e-01 3.3522550016641617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3357 -1.7109709978103638e-01</internalNodes>\n          <leafValues>\n            -2.9404911398887634e-01 3.2432679086923599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3358 -8.7599586695432663e-03</internalNodes>\n          <leafValues>\n            6.8787500262260437e-02 -1.0647170245647430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3359 1.2942530214786530e-01</internalNodes>\n          <leafValues>\n            1.3241300359368324e-02 -6.8923670053482056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3360 -4.7723919153213501e-02</internalNodes>\n          <leafValues>\n            2.2214810550212860e-01 -2.8517080470919609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3361 1.0812310129404068e-01</internalNodes>\n          <leafValues>\n            1.1902020312845707e-02 -7.7915120124816895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3362 -2.7494689449667931e-02</internalNodes>\n          <leafValues>\n            -3.0192640423774719e-01 2.8540210798382759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3363 -4.9534138292074203e-02</internalNodes>\n          <leafValues>\n            -3.0015140771865845e-01 3.1750950962305069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3364 -1.0358350351452827e-02</internalNodes>\n          <leafValues>\n            1.2287119776010513e-01 -3.9123039692640305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3365 -3.2705869525671005e-02</internalNodes>\n          <leafValues>\n            -3.3354911208152771e-01 2.7965290471911430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3366 -1.3580479659140110e-02</internalNodes>\n          <leafValues>\n            1.1192899942398071e-01 -4.9471028149127960e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3367 5.5075851269066334e-03</internalNodes>\n          <leafValues>\n            -1.3118129968643188e-01 6.9403477013111115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3368 7.5508110225200653e-02</internalNodes>\n          <leafValues>\n            -2.9019629582762718e-02 3.9413800835609436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3369 5.6811410933732986e-02</internalNodes>\n          <leafValues>\n            2.6788659393787384e-02 -4.1989549994468689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3370 5.0004580989480019e-03</internalNodes>\n          <leafValues>\n            4.6239160001277924e-02 -6.7620649933815002e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3371 1.9717490300536156e-02</internalNodes>\n          <leafValues>\n            -6.0402508825063705e-02 1.6632139682769775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3372 -6.4729452133178711e-02</internalNodes>\n          <leafValues>\n            -5.2484118938446045e-01 2.7922600507736206e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3373 -3.0683130025863647e-02</internalNodes>\n          <leafValues>\n            2.1945460140705109e-01 -4.8111628741025925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3374 8.1467535346746445e-03</internalNodes>\n          <leafValues>\n            6.0279220342636108e-02 -1.1600890010595322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3375 7.9492190852761269e-03</internalNodes>\n          <leafValues>\n            8.3563491702079773e-02 -1.6053000092506409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3376 -2.2406199946999550e-02</internalNodes>\n          <leafValues>\n            2.8271418809890747e-01 -2.8184479102492332e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3377 8.2993790507316589e-02</internalNodes>\n          <leafValues>\n            1.0475059971213341e-02 -9.6875292062759399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3378 -7.0176632143557072e-03</internalNodes>\n          <leafValues>\n            -1.3753229379653931e-01 6.8205498158931732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3379 -9.7560193389654160e-03</internalNodes>\n          <leafValues>\n            -1.3707080483436584e-01 7.2890587151050568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3380 -5.2217379212379456e-02</internalNodes>\n          <leafValues>\n            -6.4300441741943359e-01 1.4492220245301723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3381 -7.8029942233115435e-04</internalNodes>\n          <leafValues>\n            -2.6479271054267883e-01 3.3517841249704361e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3382 3.7919931113719940e-02</internalNodes>\n          <leafValues>\n            -8.4846787154674530e-02 1.1260589957237244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3383 3.0561289750039577e-03</internalNodes>\n          <leafValues>\n            4.8086941242218018e-02 -1.9009250402450562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3384 6.5862268209457397e-02</internalNodes>\n          <leafValues>\n            -5.2452040836215019e-03 9.1280621290206909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3385 1.5568210184574127e-01</internalNodes>\n          <leafValues>\n            2.0884050056338310e-02 -4.9580439925193787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3386 -1.9058469915762544e-03</internalNodes>\n          <leafValues>\n            1.8305900692939758e-01 -4.9756310880184174e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3387 -9.8356999456882477e-02</internalNodes>\n          <leafValues>\n            4.8020449280738831e-01 -2.0384309813380241e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3388 4.2754490859806538e-03</internalNodes>\n          <leafValues>\n            4.0095929056406021e-02 -1.4071129262447357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3389 -1.4033010229468346e-02</internalNodes>\n          <leafValues>\n            -2.0791560411453247e-01 5.2576299756765366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3390 8.0179408192634583e-02</internalNodes>\n          <leafValues>\n            -2.5790559127926826e-02 3.7651219964027405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3391 1.8175759911537170e-01</internalNodes>\n          <leafValues>\n            1.1428649537265301e-02 -8.3382111787796021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3392 -1.9141690805554390e-02</internalNodes>\n          <leafValues>\n            -5.0522857904434204e-01 1.2605519965291023e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3393 -5.1260828971862793e-02</internalNodes>\n          <leafValues>\n            5.8292531967163086e-01 -1.6109749674797058e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3394 6.4478136599063873e-02</internalNodes>\n          <leafValues>\n            1.0237329639494419e-02 -6.0302352905273438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3395 3.1238300725817680e-02</internalNodes>\n          <leafValues>\n            2.0845850929617882e-02 -3.9785829186439514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3396 -5.0772321410477161e-03</internalNodes>\n          <leafValues>\n            1.2331540137529373e-01 -3.5224981606006622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3397 -1.9385579507797956e-03</internalNodes>\n          <leafValues>\n            1.5726689994335175e-01 -7.3316320776939392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3398 2.4099789559841156e-02</internalNodes>\n          <leafValues>\n            -1.1178609728813171e-01 1.0738980025053024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3399 -8.8700000196695328e-03</internalNodes>\n          <leafValues>\n            -3.6048200726509094e-01 2.7034249156713486e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3400 -3.7424121052026749e-02</internalNodes>\n          <leafValues>\n            -3.5229408740997314e-01 1.6786530613899231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3401 -2.0067069679498672e-02</internalNodes>\n          <leafValues>\n            -2.7460938692092896e-01 3.9532590657472610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3402 6.5169870853424072e-02</internalNodes>\n          <leafValues>\n            1.1402159929275513e-02 -2.4819959700107574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3403 3.8157470524311066e-02</internalNodes>\n          <leafValues>\n            4.6323310583829880e-02 -2.0989510416984558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3404 1.1075180023908615e-02</internalNodes>\n          <leafValues>\n            3.4411158412694931e-02 -5.1256500184535980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3405 1.1583480238914490e-01</internalNodes>\n          <leafValues>\n            4.2282830923795700e-02 -2.1705499291419983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3406 -4.6720780432224274e-02</internalNodes>\n          <leafValues>\n            2.3093520104885101e-01 -8.3234477788209915e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3407 1.2567450106143951e-01</internalNodes>\n          <leafValues>\n            -4.9882501363754272e-02 2.1018449962139130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3408 1.8088010256178677e-04</internalNodes>\n          <leafValues>\n            -1.1836589872837067e-01 8.4278896450996399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3409 1.0470690205693245e-02</internalNodes>\n          <leafValues>\n            -8.6210608482360840e-02 1.1760850250720978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3410 5.8065719902515411e-02</internalNodes>\n          <leafValues>\n            1.5582700259983540e-02 -7.4217921495437622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3411 2.2783069871366024e-03</internalNodes>\n          <leafValues>\n            -1.9151380658149719e-01 4.7990638762712479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3412 -6.9596558809280396e-02</internalNodes>\n          <leafValues>\n            -7.3241692781448364e-01 1.1130559723824263e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3413 5.8907870203256607e-02</internalNodes>\n          <leafValues>\n            1.6878390684723854e-02 -5.4400408267974854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3414 -8.0658823251724243e-02</internalNodes>\n          <leafValues>\n            2.9922959208488464e-01 -1.8570570275187492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3415 1.7686929553747177e-02</internalNodes>\n          <leafValues>\n            4.2936161160469055e-02 -2.2591550648212433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3416 -1.6319070011377335e-02</internalNodes>\n          <leafValues>\n            1.8889640271663666e-01 -4.7047398984432220e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3417 -3.9527568966150284e-02</internalNodes>\n          <leafValues>\n            -3.2657331228256226e-01 2.8762219473719597e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3418 1.9769819919019938e-03</internalNodes>\n          <leafValues>\n            -8.8217496871948242e-02 5.7402729988098145e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3419 -3.0272029340267181e-02</internalNodes>\n          <leafValues>\n            -5.1177912950515747e-01 1.7359249293804169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3420 5.3786419332027435e-02</internalNodes>\n          <leafValues>\n            1.2071570381522179e-02 -4.0201959013938904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3421 -9.4136483967304230e-03</internalNodes>\n          <leafValues>\n            2.4728150665760040e-01 -3.6734741181135178e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3422 -5.9014528989791870e-02</internalNodes>\n          <leafValues>\n            -1.3277289271354675e-01 1.5220739878714085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3423 8.9417606592178345e-02</internalNodes>\n          <leafValues>\n            -2.5917148590087891e-01 3.7563629448413849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3424 -8.7996140122413635e-02</internalNodes>\n          <leafValues>\n            4.9200880527496338e-01 -2.1210839971899986e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3425 -5.0747569650411606e-02</internalNodes>\n          <leafValues>\n            -4.8567768931388855e-01 2.0005319267511368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3426 -3.8918260484933853e-02</internalNodes>\n          <leafValues>\n            -8.9558547735214233e-01 7.8960238024592400e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3427 2.0968139171600342e-02</internalNodes>\n          <leafValues>\n            -5.4431710392236710e-02 1.6123360395431519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3428 -3.2103069126605988e-02</internalNodes>\n          <leafValues>\n            -3.6822700500488281e-01 1.9163349643349648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3429 5.5592609569430351e-03</internalNodes>\n          <leafValues>\n            7.8368440270423889e-02 -1.1842489987611771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3430 5.9554249048233032e-02</internalNodes>\n          <leafValues>\n            -5.2290938794612885e-02 3.6194879561662674e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3431 -1.0973160155117512e-02</internalNodes>\n          <leafValues>\n            1.5855990350246429e-01 -5.5804491043090820e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3432 -1.1934650130569935e-02</internalNodes>\n          <leafValues>\n            -2.5717508792877197e-01 3.2829850912094116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3433 6.0441631823778152e-02</internalNodes>\n          <leafValues>\n            -3.8720801472663879e-02 2.2971870005130768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3434 -8.2118069985881448e-04</internalNodes>\n          <leafValues>\n            6.9738790392875671e-02 -1.5992000699043274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3435 2.0469389855861664e-02</internalNodes>\n          <leafValues>\n            -8.4349267184734344e-02 1.0139500349760056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3436 -7.6305761933326721e-02</internalNodes>\n          <leafValues>\n            8.3174228668212891e-01 -5.0806580111384392e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3437 6.0551889240741730e-02</internalNodes>\n          <leafValues>\n            -3.7971161305904388e-02 2.1850149333477020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3438 -4.1085779666900635e-03</internalNodes>\n          <leafValues>\n            -1.1496649682521820e-01 3.6647479981184006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3439 1.2399969622492790e-02</internalNodes>\n          <leafValues>\n            6.2838301062583923e-02 -1.4144660532474518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3440 -7.1455702185630798e-02</internalNodes>\n          <leafValues>\n            -4.2673790454864502e-01 1.3947109691798687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3441 3.3709030598402023e-02</internalNodes>\n          <leafValues>\n            -1.2713599950075150e-02 7.4775099754333496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3442 3.4742768853902817e-02</internalNodes>\n          <leafValues>\n            2.0969500765204430e-02 -1.4630280435085297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3443 -4.3705299496650696e-02</internalNodes>\n          <leafValues>\n            1.8064750730991364e-01 -5.2335180342197418e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3444 8.4926873445510864e-02</internalNodes>\n          <leafValues>\n            6.9014527834951878e-03 -2.6073959469795227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3445 -1.7119079828262329e-02</internalNodes>\n          <leafValues>\n            -1.4590080082416534e-01 6.7484676837921143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3446 3.3630719780921936e-01</internalNodes>\n          <leafValues>\n            7.8989071771502495e-03 -8.3852928876876831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3447 1.2371230125427246e-01</internalNodes>\n          <leafValues>\n            -2.5482710450887680e-02 3.9098039269447327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3448 -1.1195900291204453e-01</internalNodes>\n          <leafValues>\n            -3.8317111134529114e-01 6.0780011117458344e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3449 -1.0881890356540680e-01</internalNodes>\n          <leafValues>\n            -7.1362990140914917e-01 1.2700069695711136e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>268</maxWeakCount>\n      <stageThreshold>-1.3290590047836304e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3450 9.6844611689448357e-03</internalNodes>\n          <leafValues>\n            -1.9455039501190186e-01 2.0048019289970398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3451 -6.6196201369166374e-03</internalNodes>\n          <leafValues>\n            9.2211641371250153e-02 -3.4824401140213013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3452 5.6163137778639793e-03</internalNodes>\n          <leafValues>\n            6.6767610609531403e-02 -4.1172260046005249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3453 -1.6882510390132666e-03</internalNodes>\n          <leafValues>\n            7.2629712522029877e-02 -2.0694479346275330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3454 -2.9599820263683796e-03</internalNodes>\n          <leafValues>\n            -2.0635899901390076e-01 7.7335417270660400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3455 1.7798959743231535e-03</internalNodes>\n          <leafValues>\n            -3.2149469852447510e-01 6.4107127487659454e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3456 -4.0264189010486007e-04</internalNodes>\n          <leafValues>\n            7.9512253403663635e-02 -2.4051089584827423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3457 -5.0024548545479774e-04</internalNodes>\n          <leafValues>\n            8.6675606667995453e-02 -2.0504170656204224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3458 -2.0284270867705345e-03</internalNodes>\n          <leafValues>\n            1.4322499930858612e-01 -1.2220569700002670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3459 6.0648359358310699e-03</internalNodes>\n          <leafValues>\n            3.7860579788684845e-02 -2.4375459551811218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3460 9.6257496625185013e-03</internalNodes>\n          <leafValues>\n            5.7141840457916260e-02 -2.8827920556068420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3461 2.5888499803841114e-03</internalNodes>\n          <leafValues>\n            -1.8906019628047943e-01 8.6430206894874573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3462 2.9090950265526772e-03</internalNodes>\n          <leafValues>\n            -8.3108469843864441e-02 1.7618839442729950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3463 2.2233440540730953e-03</internalNodes>\n          <leafValues>\n            2.0150169730186462e-02 -2.4882750213146210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3464 -9.8997671157121658e-03</internalNodes>\n          <leafValues>\n            -2.0639769732952118e-01 6.0985010117292404e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3465 1.9689390435814857e-02</internalNodes>\n          <leafValues>\n            -3.4452438354492188e-02 2.0069779455661774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3466 2.1106770262122154e-02</internalNodes>\n          <leafValues>\n            4.3886858969926834e-02 -2.6610890030860901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3467 -7.2028310969471931e-03</internalNodes>\n          <leafValues>\n            1.7015519738197327e-01 -5.4639339447021484e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3468 4.0647671557962894e-03</internalNodes>\n          <leafValues>\n            5.2182808518409729e-02 -2.1304030716419220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3469 -2.8419198933988810e-03</internalNodes>\n          <leafValues>\n            5.3180210292339325e-02 -1.7669560015201569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3470 -4.9461819231510162e-02</internalNodes>\n          <leafValues>\n            3.7221330404281616e-01 -3.3969849348068237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3471 4.3024159967899323e-02</internalNodes>\n          <leafValues>\n            3.1251549720764160e-02 -3.1831890344619751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3472 -7.0111698005348444e-04</internalNodes>\n          <leafValues>\n            -2.0340210199356079e-01 5.8964170515537262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3473 5.7489587925374508e-04</internalNodes>\n          <leafValues>\n            -9.4937190413475037e-02 1.0538189858198166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3474 -1.4911209291312844e-04</internalNodes>\n          <leafValues>\n            6.8423688411712646e-02 -1.8207779526710510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3475 8.7993890047073364e-03</internalNodes>\n          <leafValues>\n            3.3866070210933685e-02 -1.1625579744577408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3476 -8.7150773033499718e-03</internalNodes>\n          <leafValues>\n            1.8041290342807770e-01 -6.5721526741981506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3477 -1.3727629557251930e-02</internalNodes>\n          <leafValues>\n            -1.3337810337543488e-01 3.5966601222753525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3478 -2.3620850406587124e-03</internalNodes>\n          <leafValues>\n            -1.9088070094585419e-01 6.1849810183048248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3479 1.7863539978861809e-03</internalNodes>\n          <leafValues>\n            -8.3071537315845490e-02 9.8926126956939697e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3480 -9.4514712691307068e-03</internalNodes>\n          <leafValues>\n            -1.8024919927120209e-01 6.0146760195493698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3481 4.8195280134677887e-02</internalNodes>\n          <leafValues>\n            -2.6617299765348434e-02 3.0134469270706177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3482 -1.2248229468241334e-03</internalNodes>\n          <leafValues>\n            -2.3560139536857605e-01 4.5572910457849503e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3483 -4.2851101607084274e-02</internalNodes>\n          <leafValues>\n            1.6086329519748688e-01 -2.3455940186977386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3484 3.4798709675669670e-03</internalNodes>\n          <leafValues>\n            7.6882630586624146e-02 -1.3299170136451721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3485 -3.9859190583229065e-03</internalNodes>\n          <leafValues>\n            4.3115191161632538e-02 -2.3132759332656860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3486 4.3139848858118057e-02</internalNodes>\n          <leafValues>\n            -3.6780070513486862e-02 2.3883450031280518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3487 -1.7436629161238670e-02</internalNodes>\n          <leafValues>\n            -1.4046260714530945e-01 5.9077050536870956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3488 -7.5254887342453003e-02</internalNodes>\n          <leafValues>\n            3.6328521370887756e-01 -3.1380280852317810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3489 6.0125540941953659e-02</internalNodes>\n          <leafValues>\n            8.2496693357825279e-03 -2.3485200107097626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3490 1.2755369534716010e-03</internalNodes>\n          <leafValues>\n            -1.2268169969320297e-01 9.0071536600589752e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3491 -1.3465109514072537e-03</internalNodes>\n          <leafValues>\n            -1.4554239809513092e-01 7.0761166512966156e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3492 2.3758469149470329e-02</internalNodes>\n          <leafValues>\n            -5.1834989339113235e-02 1.7583900690078735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3493 2.2376580163836479e-03</internalNodes>\n          <leafValues>\n            9.1763339936733246e-02 -1.1206050217151642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3494 3.8662939332425594e-03</internalNodes>\n          <leafValues>\n            6.2390189617872238e-02 -1.5142339468002319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3495 7.6868042349815369e-02</internalNodes>\n          <leafValues>\n            -2.7640199288725853e-02 3.7636131048202515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3496 1.6617199406027794e-02</internalNodes>\n          <leafValues>\n            3.3067818731069565e-02 -3.0950650572776794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3497 -4.6145029366016388e-02</internalNodes>\n          <leafValues>\n            1.0798139870166779e-01 -5.8277439326047897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3498 9.8206609487533569e-02</internalNodes>\n          <leafValues>\n            1.7502160742878914e-02 -5.0861918926239014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3499 4.7838049940764904e-03</internalNodes>\n          <leafValues>\n            -1.0207810252904892e-01 5.7796850800514221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3500 2.0467689260840416e-02</internalNodes>\n          <leafValues>\n            -2.0362010225653648e-02 4.5001450181007385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3501 1.5141700394451618e-02</internalNodes>\n          <leafValues>\n            2.8140379115939140e-02 -8.5130028426647186e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3502 5.2229189313948154e-03</internalNodes>\n          <leafValues>\n            -5.7789258658885956e-02 1.5580329298973083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3503 1.8871299922466278e-02</internalNodes>\n          <leafValues>\n            2.7053799480199814e-02 -1.2046360224485397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3504 4.5608580112457275e-03</internalNodes>\n          <leafValues>\n            -7.9567588865756989e-02 1.1571010202169418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3505 -1.2172549962997437e-02</internalNodes>\n          <leafValues>\n            -1.6149179637432098e-01 2.4571539834141731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3506 -1.6468809545040131e-01</internalNodes>\n          <leafValues>\n            -6.5712791681289673e-01 1.2428689748048782e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3507 1.8241419456899166e-03</internalNodes>\n          <leafValues>\n            -9.1526739299297333e-02 8.7851390242576599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3508 -5.4591207299381495e-04</internalNodes>\n          <leafValues>\n            -1.2581209838390350e-01 6.6968381404876709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3509 2.1177160087972879e-03</internalNodes>\n          <leafValues>\n            1.4261330664157867e-01 -6.1729468405246735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3510 1.1853260220959783e-03</internalNodes>\n          <leafValues>\n            -9.1425627470016479e-02 9.2089362442493439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3511 7.9899299889802933e-03</internalNodes>\n          <leafValues>\n            -6.3119217753410339e-02 1.5446299314498901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3512 4.5044990256428719e-03</internalNodes>\n          <leafValues>\n            4.0920298546552658e-02 -2.2475910186767578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3513 7.4563547968864441e-03</internalNodes>\n          <leafValues>\n            -3.9540700614452362e-02 2.4208679795265198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3514 6.3897971995174885e-03</internalNodes>\n          <leafValues>\n            5.2900739014148712e-02 -1.7378969490528107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3515 -5.9052068740129471e-02</internalNodes>\n          <leafValues>\n            -4.7957658767700195e-01 8.3919316530227661e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3516 -5.3746208548545837e-02</internalNodes>\n          <leafValues>\n            -5.0854432582855225e-01 1.6880670562386513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3517 -9.1852366924285889e-02</internalNodes>\n          <leafValues>\n            1.9466249644756317e-01 -1.1129629798233509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3518 1.5038819611072540e-01</internalNodes>\n          <leafValues>\n            -2.0112350583076477e-02 4.4738510251045227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3519 -2.1317429840564728e-02</internalNodes>\n          <leafValues>\n            2.9676139354705811e-01 -2.8231840580701828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3520 1.2711419723927975e-02</internalNodes>\n          <leafValues>\n            3.3570941537618637e-02 -2.8972589969635010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3521 -9.3287907540798187e-02</internalNodes>\n          <leafValues>\n            6.4380300045013428e-01 -1.4923879876732826e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3522 -4.5716729946434498e-03</internalNodes>\n          <leafValues>\n            -2.6994249224662781e-01 3.3246111124753952e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3523 -3.4010890522040427e-04</internalNodes>\n          <leafValues>\n            8.1715546548366547e-02 -1.0642260313034058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3524 -2.6096890214830637e-03</internalNodes>\n          <leafValues>\n            1.8403419852256775e-01 -6.4724236726760864e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3525 4.6332611236721277e-04</internalNodes>\n          <leafValues>\n            -1.4283409714698792e-01 4.2033299803733826e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3526 1.4095300436019897e-01</internalNodes>\n          <leafValues>\n            9.4516919925808907e-03 -7.7727228403091431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3527 2.0406199619174004e-03</internalNodes>\n          <leafValues>\n            -6.6505432128906250e-02 1.1805409938097000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3528 -2.2302009165287018e-02</internalNodes>\n          <leafValues>\n            -1.0419870167970657e-01 8.9387677609920502e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3529 3.9168349467217922e-03</internalNodes>\n          <leafValues>\n            2.5769380852580070e-02 -1.6625499725341797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3530 6.1153857968747616e-03</internalNodes>\n          <leafValues>\n            -6.2531687319278717e-02 1.4075349271297455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3531 -2.9564529540948570e-05</internalNodes>\n          <leafValues>\n            4.6978309750556946e-02 -1.0862989723682404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3532 1.4300559996627271e-04</internalNodes>\n          <leafValues>\n            -1.0005149990320206e-01 8.0335728824138641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3533 1.1430789716541767e-02</internalNodes>\n          <leafValues>\n            2.3201359435915947e-02 -3.1366908550262451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3534 -1.3724610209465027e-02</internalNodes>\n          <leafValues>\n            1.2814410030841827e-01 -6.1290029436349869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3535 -4.5548770576715469e-02</internalNodes>\n          <leafValues>\n            -4.7528308629989624e-01 1.3631340116262436e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3536 7.6914107194170356e-04</internalNodes>\n          <leafValues>\n            -8.9416027069091797e-02 9.6091486513614655e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3537 6.3840910792350769e-02</internalNodes>\n          <leafValues>\n            1.6064060851931572e-02 -3.8221898674964905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3538 -7.2662779130041599e-03</internalNodes>\n          <leafValues>\n            -2.1940490603446960e-01 3.8170509040355682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3539 -1.2828599661588669e-02</internalNodes>\n          <leafValues>\n            1.4705429971218109e-01 -5.5832669138908386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3540 -9.1467969119548798e-02</internalNodes>\n          <leafValues>\n            -7.9265332221984863e-01 1.0404639877378941e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3541 -2.7164160273969173e-03</internalNodes>\n          <leafValues>\n            -1.7725169658660889e-01 5.6455809623003006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3542 -1.0097579658031464e-01</internalNodes>\n          <leafValues>\n            -5.9372657537460327e-01 1.3162240386009216e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3543 -3.7983559072017670e-02</internalNodes>\n          <leafValues>\n            -1.5072999894618988e-01 1.9557390362024307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3544 5.3728191414847970e-04</internalNodes>\n          <leafValues>\n            5.2257049828767776e-02 -1.7996260523796082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3545 1.2443910352885723e-02</internalNodes>\n          <leafValues>\n            -2.8953019529581070e-02 2.5448489189147949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3546 -1.8171280622482300e-02</internalNodes>\n          <leafValues>\n            3.2203981280326843e-01 -3.1395100057125092e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3547 -3.0619159340858459e-02</internalNodes>\n          <leafValues>\n            -1.2817279994487762e-01 6.0485020279884338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3548 2.8726200107485056e-03</internalNodes>\n          <leafValues>\n            -1.4807400107383728e-01 5.3796000778675079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3549 -2.8772678971290588e-01</internalNodes>\n          <leafValues>\n            -8.3234447240829468e-01 3.6127590574324131e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3550 4.1057071089744568e-01</internalNodes>\n          <leafValues>\n            8.3212452009320259e-03 -8.2476407289505005e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3551 1.6370510682463646e-02</internalNodes>\n          <leafValues>\n            -2.4849100038409233e-02 1.6309140622615814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3552 5.3615570068359375e-02</internalNodes>\n          <leafValues>\n            1.8034080043435097e-02 -4.6126970648765564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3553 -1.0296109830960631e-03</internalNodes>\n          <leafValues>\n            3.8824349641799927e-02 -7.3625981807708740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3554 -6.3063339330255985e-03</internalNodes>\n          <leafValues>\n            1.3288870453834534e-01 -5.5812060832977295e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3555 6.8714357912540436e-03</internalNodes>\n          <leafValues>\n            6.9562442600727081e-02 -1.1383140087127686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3556 -8.3098851609975100e-04</internalNodes>\n          <leafValues>\n            1.0002700239419937e-01 -8.5704028606414795e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3557 1.3288210146129131e-02</internalNodes>\n          <leafValues>\n            4.2606260627508163e-02 -1.1729510128498077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3558 1.7035039141774178e-02</internalNodes>\n          <leafValues>\n            -4.2757850140333176e-02 2.2400109469890594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3559 3.2128300517797470e-02</internalNodes>\n          <leafValues>\n            1.5296909958124161e-02 -5.3317558765411377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3560 1.1440330184996128e-02</internalNodes>\n          <leafValues>\n            -5.8955609798431396e-02 1.2842489778995514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3561 2.5446009822189808e-03</internalNodes>\n          <leafValues>\n            4.6037770807743073e-02 -1.4760190248489380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3562 -3.5062368959188461e-02</internalNodes>\n          <leafValues>\n            -3.4721338748931885e-01 2.4020459502935410e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3563 4.6889069490134716e-03</internalNodes>\n          <leafValues>\n            -8.2460209727287292e-02 7.6254382729530334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3564 -1.5067459571582731e-05</internalNodes>\n          <leafValues>\n            5.8223988860845566e-02 -1.3496190309524536e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3565 -6.5259548136964440e-04</internalNodes>\n          <leafValues>\n            3.6780450493097305e-02 -7.0881396532058716e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3566 4.5456850784830749e-04</internalNodes>\n          <leafValues>\n            5.9895541518926620e-02 -1.4553959667682648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3567 -1.0570470243692398e-01</internalNodes>\n          <leafValues>\n            1.3766160607337952e-01 -2.2337099537253380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3568 -4.6019242145121098e-03</internalNodes>\n          <leafValues>\n            -3.3811721205711365e-01 2.2578509524464607e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3569 5.5374279618263245e-03</internalNodes>\n          <leafValues>\n            -4.1250869631767273e-02 9.4750680029392242e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3570 -2.7569069061428308e-03</internalNodes>\n          <leafValues>\n            1.7380860447883606e-01 -4.5417640358209610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3571 4.1876680916175246e-04</internalNodes>\n          <leafValues>\n            -5.5233258754014969e-02 5.8342628180980682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3572 -2.4587850202806294e-04</internalNodes>\n          <leafValues>\n            -8.9373029768466949e-02 8.1158749759197235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3573 -7.4991412460803986e-02</internalNodes>\n          <leafValues>\n            -5.9057062864303589e-01 6.7846179008483887e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3574 1.7898950027301908e-03</internalNodes>\n          <leafValues>\n            5.2262220531702042e-02 -1.5884269773960114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3575 -3.2704160548746586e-03</internalNodes>\n          <leafValues>\n            1.1216899752616882e-01 -6.2488421797752380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3576 -1.7803650349378586e-02</internalNodes>\n          <leafValues>\n            -4.5739078521728516e-01 1.6650289297103882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3577 -3.3537930250167847e-01</internalNodes>\n          <leafValues>\n            -8.2564651966094971e-01 7.1495971642434597e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3578 1.1451829969882965e-01</internalNodes>\n          <leafValues>\n            -1.8937719985842705e-02 4.1076439619064331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3579 6.5141052007675171e-02</internalNodes>\n          <leafValues>\n            1.1196400038897991e-02 -7.6225310564041138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3580 -1.8442489206790924e-02</internalNodes>\n          <leafValues>\n            1.4006440341472626e-01 -5.1568318158388138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3581 2.0362680777907372e-02</internalNodes>\n          <leafValues>\n            2.7635680511593819e-02 -2.2622610628604889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3582 -5.4255980066955090e-03</internalNodes>\n          <leafValues>\n            -1.4688220620155334e-01 5.1294069737195969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3583 -1.4608480036258698e-02</internalNodes>\n          <leafValues>\n            2.8014749288558960e-01 -3.2668899744749069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3584 1.2462410377338529e-03</internalNodes>\n          <leafValues>\n            -2.0888839662075043e-01 3.3212959766387939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3585 -5.1487259566783905e-02</internalNodes>\n          <leafValues>\n            1.9872699677944183e-01 -1.0376259684562683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3586 -1.4138059690594673e-02</internalNodes>\n          <leafValues>\n            -1.6193750500679016e-01 4.6604789793491364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3587 -8.3356946706771851e-03</internalNodes>\n          <leafValues>\n            1.6429559886455536e-01 -4.2695630341768265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3588 9.5129031687974930e-03</internalNodes>\n          <leafValues>\n            4.4999569654464722e-02 -1.5971189737319946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3589 -7.0411129854619503e-03</internalNodes>\n          <leafValues>\n            7.0638000965118408e-01 -9.1527765616774559e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3590 -4.0637628990225494e-04</internalNodes>\n          <leafValues>\n            7.0747792720794678e-02 -1.0194250196218491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3591 4.2529408819973469e-03</internalNodes>\n          <leafValues>\n            3.1937479972839355e-02 -1.0357219725847244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3592 -1.9221140246372670e-04</internalNodes>\n          <leafValues>\n            1.0241460055112839e-01 -8.9996367692947388e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3593 -1.3621139805763960e-03</internalNodes>\n          <leafValues>\n            -1.8157319724559784e-01 2.3933520540595055e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3594 -9.3250330537557602e-03</internalNodes>\n          <leafValues>\n            1.5883359313011169e-01 -4.5317139476537704e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3595 -3.4641081094741821e-01</internalNodes>\n          <leafValues>\n            -3.5901129245758057e-01 9.8646534606814384e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3596 1.7026960849761963e-02</internalNodes>\n          <leafValues>\n            -5.9731051325798035e-02 1.2576000392436981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3597 -3.9226989611051977e-04</internalNodes>\n          <leafValues>\n            6.4828976988792419e-02 -9.2051766812801361e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3598 7.0719248615205288e-03</internalNodes>\n          <leafValues>\n            3.7144500762224197e-02 -1.9167420268058777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3599 2.9001249931752682e-03</internalNodes>\n          <leafValues>\n            -6.2633208930492401e-02 5.3248930722475052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3600 -2.4164669215679169e-02</internalNodes>\n          <leafValues>\n            3.0798891186714172e-01 -2.6505900546908379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3601 -7.5509406626224518e-02</internalNodes>\n          <leafValues>\n            -6.1827278137207031e-01 7.8803002834320068e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3602 -2.6605799212120473e-04</internalNodes>\n          <leafValues>\n            6.9619670510292053e-02 -9.9268868565559387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3603 2.3389840498566628e-03</internalNodes>\n          <leafValues>\n            4.2269691824913025e-02 -1.6290849447250366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3604 -1.2518429430201650e-03</internalNodes>\n          <leafValues>\n            9.0814828872680664e-02 -7.9618006944656372e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3605 -1.9330839859321713e-03</internalNodes>\n          <leafValues>\n            7.6956093311309814e-02 -6.5234251320362091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3606 2.3863440379500389e-02</internalNodes>\n          <leafValues>\n            -7.7985651791095734e-02 9.7926571965217590e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3607 -5.1995079964399338e-02</internalNodes>\n          <leafValues>\n            -2.0676060020923615e-01 1.2264530174434185e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3608 -9.4953901134431362e-04</internalNodes>\n          <leafValues>\n            7.2090931236743927e-02 -1.2452449649572372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3609 -9.0458765625953674e-03</internalNodes>\n          <leafValues>\n            -1.0756769776344299e-01 2.6017999276518822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3610 3.2019101083278656e-02</internalNodes>\n          <leafValues>\n            -4.4689521193504333e-02 1.6712300479412079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3611 -7.1996808983385563e-03</internalNodes>\n          <leafValues>\n            -1.2065560370683670e-01 5.3329549729824066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3612 9.7247883677482605e-02</internalNodes>\n          <leafValues>\n            -2.0059280097484589e-02 4.1321530938148499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3613 1.7411670414730906e-03</internalNodes>\n          <leafValues>\n            2.5265200063586235e-02 -1.1400379985570908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3614 -1.5694150328636169e-01</internalNodes>\n          <leafValues>\n            -9.6121889352798462e-01 7.4661090038716793e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3615 -2.0573820918798447e-02</internalNodes>\n          <leafValues>\n            1.3207539916038513e-01 -5.3688809275627136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3616 2.0626350305974483e-03</internalNodes>\n          <leafValues>\n            3.7869140505790710e-02 -2.0333750545978546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3617 1.2381599843502045e-01</internalNodes>\n          <leafValues>\n            2.3662589956074953e-03 -4.8794668912887573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3618 3.1255739741027355e-03</internalNodes>\n          <leafValues>\n            -6.4476020634174347e-02 1.5053239464759827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3619 1.8766360357403755e-02</internalNodes>\n          <leafValues>\n            1.2639230117201805e-02 -1.9121849536895752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3620 -8.6109619587659836e-03</internalNodes>\n          <leafValues>\n            -1.1916559934616089e-01 6.6547170281410217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3621 1.4604110270738602e-02</internalNodes>\n          <leafValues>\n            -2.1980939432978630e-02 2.6832428574562073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3622 1.8387939780950546e-03</internalNodes>\n          <leafValues>\n            -1.1506830155849457e-01 6.0840509831905365e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3623 -5.7930707931518555e-01</internalNodes>\n          <leafValues>\n            -1. 3.7629920989274979e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3624 1.8690739572048187e-01</internalNodes>\n          <leafValues>\n            6.2871198169887066e-03 -9.2426669597625732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3625 1.8341749906539917e-02</internalNodes>\n          <leafValues>\n            1.7516769468784332e-02 -1.6519400477409363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3626 -1.4776510186493397e-02</internalNodes>\n          <leafValues>\n            2.5068140029907227e-01 -2.6199640706181526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3627 4.4032301753759384e-02</internalNodes>\n          <leafValues>\n            1.1479279957711697e-02 -6.4663171768188477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3628 3.5362939815968275e-03</internalNodes>\n          <leafValues>\n            4.8670079559087753e-02 -1.3171669840812683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3629 -4.5765978284180164e-03</internalNodes>\n          <leafValues>\n            1.2401209771633148e-01 -5.3882170468568802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3630 3.0529699288308620e-03</internalNodes>\n          <leafValues>\n            -5.2538860589265823e-02 1.2860049307346344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3631 -1.1333939619362354e-02</internalNodes>\n          <leafValues>\n            -1.6732269525527954e-01 1.2890639714896679e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3632 2.7712888550013304e-04</internalNodes>\n          <leafValues>\n            6.5776027739048004e-02 -9.4573900103569031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3633 5.4571928922086954e-04</internalNodes>\n          <leafValues>\n            -5.9766601771116257e-02 1.3265900313854218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3634 6.2958751805126667e-03</internalNodes>\n          <leafValues>\n            2.8854750096797943e-02 -2.4328909814357758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3635 1.5611880226060748e-03</internalNodes>\n          <leafValues>\n            -5.6346539407968521e-02 8.0620631575584412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3636 1.0501279681921005e-01</internalNodes>\n          <leafValues>\n            -1.4052099548280239e-02 5.5927920341491699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3637 3.6907300353050232e-02</internalNodes>\n          <leafValues>\n            1.5443010255694389e-02 -2.0881450176239014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3638 -4.0569249540567398e-02</internalNodes>\n          <leafValues>\n            1.5851789712905884e-01 -4.3176181614398956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3639 -7.2549749165773392e-03</internalNodes>\n          <leafValues>\n            -2.6104170083999634e-01 1.7242910340428352e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3640 4.5905262231826782e-03</internalNodes>\n          <leafValues>\n            -3.8419000804424286e-02 1.7464800179004669e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3641 -4.2836060747504234e-03</internalNodes>\n          <leafValues>\n            -1.2006240338087082e-01 4.1917610913515091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3642 -1.0835780203342438e-01</internalNodes>\n          <leafValues>\n            5.4927551746368408e-01 -1.2255569919943810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3643 6.4851208589971066e-03</internalNodes>\n          <leafValues>\n            4.4952411204576492e-02 -1.6583940386772156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3644 -2.3725129663944244e-02</internalNodes>\n          <leafValues>\n            5.7158672809600830e-01 -1.2361500412225723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3645 -3.0070519074797630e-02</internalNodes>\n          <leafValues>\n            -3.0609959363937378e-01 1.1695429682731628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3646 -7.9774633049964905e-03</internalNodes>\n          <leafValues>\n            -1.8185980618000031e-01 3.6925770342350006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3647 -1.7213199287652969e-02</internalNodes>\n          <leafValues>\n            1.2317930161952972e-01 -3.6632679402828217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3648 -1.4119789702817798e-03</internalNodes>\n          <leafValues>\n            -5.0499087572097778e-01 1.3695210218429565e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3649 2.9909020289778709e-02</internalNodes>\n          <leafValues>\n            -2.3535439744591713e-02 1.4312979578971863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3650 -1.1660479940474033e-02</internalNodes>\n          <leafValues>\n            -1.7822280526161194e-01 4.0250599384307861e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3651 -8.9040184393525124e-03</internalNodes>\n          <leafValues>\n            3.5567161440849304e-01 -2.4783140048384666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3652 -1.1394720058888197e-03</internalNodes>\n          <leafValues>\n            -1.4268599450588226e-01 4.9102801829576492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3653 2.9107509180903435e-03</internalNodes>\n          <leafValues>\n            -5.4471809417009354e-02 1.3025890290737152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3654 1.7640810459852219e-02</internalNodes>\n          <leafValues>\n            2.0184019580483437e-02 -4.1954588890075684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3655 5.0001900643110275e-02</internalNodes>\n          <leafValues>\n            1.1975940316915512e-02 -5.1889878511428833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3656 2.7523660100996494e-03</internalNodes>\n          <leafValues>\n            -6.0628410428762436e-02 1.1169119924306870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3657 -3.1753338873386383e-02</internalNodes>\n          <leafValues>\n            -2.2611990571022034e-01 1.5267389826476574e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3658 -1.2823809869587421e-02</internalNodes>\n          <leafValues>\n            2.3027139902114868e-01 -2.9404800385236740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3659 5.2626157412305474e-04</internalNodes>\n          <leafValues>\n            -1.5677809715270996e-01 4.9938481301069260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3660 1.2779150158166885e-02</internalNodes>\n          <leafValues>\n            -5.8851849287748337e-02 1.2255299836397171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3661 7.7667668461799622e-02</internalNodes>\n          <leafValues>\n            4.6644411049783230e-03 -5.0614321231842041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3662 -5.2286800928413868e-03</internalNodes>\n          <leafValues>\n            -1.8939809501171112e-01 4.4714428484439850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3663 8.4478305652737617e-03</internalNodes>\n          <leafValues>\n            3.9108898490667343e-02 -1.4809159934520721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3664 5.5970861576497555e-03</internalNodes>\n          <leafValues>\n            5.4664470255374908e-02 -1.4698089659214020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3665 1.6882989555597305e-02</internalNodes>\n          <leafValues>\n            -4.6449739485979080e-02 1.4121970534324646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3666 -6.1205658130347729e-04</internalNodes>\n          <leafValues>\n            -1.3906019926071167e-01 5.2586868405342102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3667 -3.6216019652783871e-03</internalNodes>\n          <leafValues>\n            5.3345881402492523e-02 -3.8361679762601852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3668 -1.4149090275168419e-03</internalNodes>\n          <leafValues>\n            2.0082549750804901e-01 -3.5985361784696579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3669 2.4758750805631280e-04</internalNodes>\n          <leafValues>\n            -1.8205779790878296e-01 1.5915339812636375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3670 1.3457840681076050e-01</internalNodes>\n          <leafValues>\n            9.7890906035900116e-03 -7.2879707813262939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3671 1.1352010071277618e-02</internalNodes>\n          <leafValues>\n            -3.5553149878978729e-02 6.3222207129001617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3672 -7.9044885933399200e-03</internalNodes>\n          <leafValues>\n            9.0774089097976685e-02 -9.8796442151069641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3673 7.9050168395042419e-02</internalNodes>\n          <leafValues>\n            4.7087217681109905e-03 -6.0529369115829468e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3674 8.9114397997036576e-04</internalNodes>\n          <leafValues>\n            -9.0216107666492462e-02 8.4293842315673828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3675 4.1404040530323982e-03</internalNodes>\n          <leafValues>\n            6.0314171016216278e-02 -1.2171939760446548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3676 -9.2683091759681702e-02</internalNodes>\n          <leafValues>\n            6.7853301763534546e-01 -1.0615170001983643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3677 4.2872380465269089e-02</internalNodes>\n          <leafValues>\n            7.3283850215375423e-03 -5.2321487665176392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3678 -3.0652560293674469e-02</internalNodes>\n          <leafValues>\n            -6.5578341484069824e-01 9.7402445971965790e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3679 7.5054399669170380e-02</internalNodes>\n          <leafValues>\n            -1.1660519987344742e-02 3.7559139728546143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3680 9.3033112585544586e-02</internalNodes>\n          <leafValues>\n            7.4912221170961857e-03 -8.1748551130294800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3681 -4.0522208437323570e-03</internalNodes>\n          <leafValues>\n            3.6431130766868591e-01 -1.8015889450907707e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3682 1.0411429684609175e-03</internalNodes>\n          <leafValues>\n            -1.9623729586601257e-01 3.4336969256401062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3683 4.0790800005197525e-02</internalNodes>\n          <leafValues>\n            1.7464859411120415e-02 -3.8497269153594971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3684 -1.8009789346251637e-04</internalNodes>\n          <leafValues>\n            5.2157621830701828e-02 -1.2038189917802811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3685 -3.5496380180120468e-02</internalNodes>\n          <leafValues>\n            2.1371629834175110e-01 -9.4601595774292946e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3686 -1.2321450049057603e-03</internalNodes>\n          <leafValues>\n            -1.2999939918518066e-01 4.8752531409263611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3687 -6.6326446831226349e-02</internalNodes>\n          <leafValues>\n            -5.0795209407806396e-01 5.8305650018155575e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3688 -2.7689670678228140e-03</internalNodes>\n          <leafValues>\n            1.2596920132637024e-01 -5.5794779211282730e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3689 3.9610429666936398e-03</internalNodes>\n          <leafValues>\n            -8.4471739828586578e-02 6.2092550098896027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3690 -7.5474479235708714e-03</internalNodes>\n          <leafValues>\n            -2.0992270112037659e-01 3.1419910490512848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3691 -3.2456999178975821e-03</internalNodes>\n          <leafValues>\n            5.6223601102828979e-02 -3.6774989217519760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3692 -5.0519341602921486e-03</internalNodes>\n          <leafValues>\n            9.4136670231819153e-02 -8.0893777310848236e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3693 2.1375959739089012e-02</internalNodes>\n          <leafValues>\n            4.9529589712619781e-02 -4.7989148646593094e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3694 -1.6724619269371033e-01</internalNodes>\n          <leafValues>\n            -9.3551367521286011e-01 7.4155409820377827e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3695 6.4946119673550129e-03</internalNodes>\n          <leafValues>\n            -3.6735821515321732e-02 1.0955040156841278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3696 -5.5810972116887569e-03</internalNodes>\n          <leafValues>\n            -1.2764470279216766e-01 5.8691799640655518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3697 -7.0414197398349643e-04</internalNodes>\n          <leafValues>\n            3.9361558854579926e-02 -7.4844732880592346e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3698 -7.3160971514880657e-03</internalNodes>\n          <leafValues>\n            2.1767179667949677e-01 -3.8703199476003647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3699 -5.4676099680364132e-03</internalNodes>\n          <leafValues>\n            -5.3973350673913956e-02 5.5032800883054733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3700 4.3309312313795090e-03</internalNodes>\n          <leafValues>\n            5.7104710489511490e-02 -1.2603929638862610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3701 2.8189779259264469e-03</internalNodes>\n          <leafValues>\n            -3.9729248732328415e-02 9.2701591551303864e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3702 -4.7759278677403927e-03</internalNodes>\n          <leafValues>\n            -1.2856410443782806e-01 6.1216689646244049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3703 6.3424631953239441e-02</internalNodes>\n          <leafValues>\n            -4.8541268333792686e-03 5.9883451461791992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3704 -3.5035109613090754e-03</internalNodes>\n          <leafValues>\n            1.0191550105810165e-01 -9.8801277577877045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3705 -4.1303951293230057e-03</internalNodes>\n          <leafValues>\n            1.0890380293130875e-01 -3.8225919008255005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3706 -2.2271529305726290e-03</internalNodes>\n          <leafValues>\n            -1.3501960039138794e-01 5.1316611468791962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3707 -1.0730850044637918e-03</internalNodes>\n          <leafValues>\n            5.1526721566915512e-02 -7.4171036481857300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3708 -7.7973678708076477e-04</internalNodes>\n          <leafValues>\n            7.0857577025890350e-02 -1.1204849928617477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3709 -5.5701348930597305e-02</internalNodes>\n          <leafValues>\n            3.9836230874061584e-01 -5.2183559164404869e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3710 1.0608229786157608e-02</internalNodes>\n          <leafValues>\n            -3.2323788851499557e-02 2.1950970590114594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3711 -9.8208207637071609e-03</internalNodes>\n          <leafValues>\n            -1.6507670283317566e-01 4.2444411665201187e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3712 1.4465330168604851e-03</internalNodes>\n          <leafValues>\n            -7.8392669558525085e-02 8.1393733620643616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3713 -4.4582188129425049e-03</internalNodes>\n          <leafValues>\n            -9.2314578592777252e-02 3.8734171539545059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3714 5.6474958546459675e-03</internalNodes>\n          <leafValues>\n            3.9651289582252502e-02 -1.7495639622211456e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3715 4.2097918689250946e-02</internalNodes>\n          <leafValues>\n            -1.1850739829242229e-02 1.2762710452079773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3716 6.9958101958036423e-03</internalNodes>\n          <leafValues>\n            -4.7668740153312683e-02 1.4204859733581543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3717 3.8686778396368027e-02</internalNodes>\n          <leafValues>\n            1.3582780025899410e-02 -4.7315898537635803e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>238</maxWeakCount>\n      <stageThreshold>-1.4597640037536621e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3718 3.5009320825338364e-02</internalNodes>\n          <leafValues>\n            -2.7020230889320374e-01 2.0429250597953796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3719 -3.6780539900064468e-02</internalNodes>\n          <leafValues>\n            1.5254889428615570e-01 -2.6741871237754822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3720 5.6993318721652031e-03</internalNodes>\n          <leafValues>\n            1.6803050041198730e-01 -2.3068240284919739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3721 7.5601637363433838e-02</internalNodes>\n          <leafValues>\n            -1.5271709859371185e-01 1.9510839879512787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3722 -1.7248390242457390e-02</internalNodes>\n          <leafValues>\n            2.9379200935363770e-01 -9.8869532346725464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3723 2.8574180323630571e-03</internalNodes>\n          <leafValues>\n            -1.9790470600128174e-01 8.3361737430095673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3724 3.1029269099235535e-02</internalNodes>\n          <leafValues>\n            -2.1582309901714325e-01 1.1695130169391632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3725 -7.1099428460001945e-03</internalNodes>\n          <leafValues>\n            -2.5206819176673889e-01 3.6116510629653931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3726 4.5894421637058258e-03</internalNodes>\n          <leafValues>\n            -2.9707619547843933e-01 1.0743969678878784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3727 -7.0509258657693863e-03</internalNodes>\n          <leafValues>\n            -4.5635029673576355e-01 4.1864778846502304e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3728 6.6762260394170880e-04</internalNodes>\n          <leafValues>\n            -1.7432719469070435e-01 1.2306489795446396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3729 -3.6481819115579128e-03</internalNodes>\n          <leafValues>\n            -4.0347629785537720e-01 4.9114771187305450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3730 2.2194240242242813e-02</internalNodes>\n          <leafValues>\n            6.1241529881954193e-02 -3.4557360410690308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3731 -1.1259679449722171e-03</internalNodes>\n          <leafValues>\n            5.2013769745826721e-02 -2.8461641073226929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3732 -1.5913739800453186e-02</internalNodes>\n          <leafValues>\n            -2.7667850255966187e-01 7.5852021574974060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3733 5.7643437758088112e-03</internalNodes>\n          <leafValues>\n            -2.7182090282440186e-01 6.6790662705898285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3734 -4.2196471244096756e-02</internalNodes>\n          <leafValues>\n            1.5786080062389374e-01 -1.0557679831981659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3735 -1.8624680116772652e-02</internalNodes>\n          <leafValues>\n            -2.5504299998283386e-01 4.7586869448423386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3736 -9.5020089065656066e-04</internalNodes>\n          <leafValues>\n            4.9903839826583862e-02 -2.9068550467491150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3737 2.0823240280151367e-02</internalNodes>\n          <leafValues>\n            2.6825139299035072e-02 -2.0558500289916992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3738 -1.3118459843099117e-02</internalNodes>\n          <leafValues>\n            -2.2395209968090057e-01 6.9013498723506927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3739 -8.6902417242527008e-03</internalNodes>\n          <leafValues>\n            1.9493189454078674e-01 -3.7850689142942429e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3740 4.5589819550514221e-02</internalNodes>\n          <leafValues>\n            2.5170389562845230e-02 -5.7766669988632202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3741 -4.8458490520715714e-02</internalNodes>\n          <leafValues>\n            9.5191553235054016e-02 -1.4320190250873566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3742 -7.2761103510856628e-02</internalNodes>\n          <leafValues>\n            -6.5967410802841187e-01 2.1175239235162735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3743 -5.3840368986129761e-02</internalNodes>\n          <leafValues>\n            -3.6426779627799988e-01 2.4827929213643074e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3744 2.3190240608528256e-04</internalNodes>\n          <leafValues>\n            -1.4767690002918243e-01 8.3764038980007172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3745 -3.4166979603469372e-03</internalNodes>\n          <leafValues>\n            -1.7865709960460663e-01 6.0721088200807571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3746 4.9744218587875366e-02</internalNodes>\n          <leafValues>\n            1.8918199464678764e-02 -6.6629868745803833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3747 6.6813439130783081e-02</internalNodes>\n          <leafValues>\n            -2.8286559507250786e-02 1.7401529848575592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3748 3.1445559114217758e-02</internalNodes>\n          <leafValues>\n            5.2556060254573822e-02 -3.0884549021720886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3749 3.9593618363142014e-02</internalNodes>\n          <leafValues>\n            -6.4875252544879913e-02 2.5706759095191956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3750 1.8663380295038223e-02</internalNodes>\n          <leafValues>\n            -5.9568431228399277e-02 2.1532599627971649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3751 4.0150571614503860e-02</internalNodes>\n          <leafValues>\n            1.9589129835367203e-02 -3.5392150282859802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3752 -1.8263690173625946e-02</internalNodes>\n          <leafValues>\n            -3.1224039196968079e-01 4.1845381259918213e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3753 -2.2579960525035858e-02</internalNodes>\n          <leafValues>\n            -1.4898709952831268e-01 1.7757140100002289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3754 8.5281759500503540e-02</internalNodes>\n          <leafValues>\n            2.4866759777069092e-02 -5.2197951078414917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3755 4.9491669051349163e-03</internalNodes>\n          <leafValues>\n            4.0433339774608612e-02 -1.1230610311031342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3756 -2.7419520542025566e-02</internalNodes>\n          <leafValues>\n            -4.1119968891143799e-01 3.0549079179763794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3757 3.8277640938758850e-02</internalNodes>\n          <leafValues>\n            1.2211250141263008e-02 -8.1860828399658203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3758 -2.1632280200719833e-02</internalNodes>\n          <leafValues>\n            2.2030480206012726e-01 -5.5459130555391312e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3759 -2.4522699415683746e-01</internalNodes>\n          <leafValues>\n            4.1013330221176147e-01 -2.7000149711966515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3760 3.9314631372690201e-02</internalNodes>\n          <leafValues>\n            -3.1242560595273972e-02 3.6714181303977966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3761 1.3630360364913940e-02</internalNodes>\n          <leafValues>\n            -1.3902300596237183e-01 9.5946237444877625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3762 -6.7042862065136433e-03</internalNodes>\n          <leafValues>\n            7.8772000968456268e-02 -1.4522729814052582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3763 2.3312810808420181e-02</internalNodes>\n          <leafValues>\n            2.2815790027379990e-02 -4.4990560412406921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3764 3.0621029436588287e-02</internalNodes>\n          <leafValues>\n            -6.9781273603439331e-02 1.5422509610652924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3765 5.2047189325094223e-02</internalNodes>\n          <leafValues>\n            -1.7720200121402740e-02 4.4397410750389099e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3766 2.0850539207458496e-02</internalNodes>\n          <leafValues>\n            -5.2309051156044006e-02 2.0608800649642944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3767 8.2694664597511292e-03</internalNodes>\n          <leafValues>\n            7.7132821083068848e-02 -1.9474139809608459e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3768 5.5706288665533066e-02</internalNodes>\n          <leafValues>\n            3.3715151250362396e-02 -3.5783401131629944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3769 -2.5406919419765472e-02</internalNodes>\n          <leafValues>\n            -2.1424999833106995e-01 5.3813599050045013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3770 3.7127479445189238e-03</internalNodes>\n          <leafValues>\n            5.7478290051221848e-02 -1.7734010517597198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3771 9.8399087786674500e-02</internalNodes>\n          <leafValues>\n            -3.5304271150380373e-03 7.7086448669433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3772 -7.0944158360362053e-03</internalNodes>\n          <leafValues>\n            -1.3782690465450287e-01 7.0290572941303253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3773 -7.8213073313236237e-02</internalNodes>\n          <leafValues>\n            4.6844071149826050e-01 -4.8642340116202831e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3774 3.0407020822167397e-02</internalNodes>\n          <leafValues>\n            -2.8489479795098305e-02 3.4157308936119080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3775 1.7667879583314061e-03</internalNodes>\n          <leafValues>\n            -1.4614230394363403e-01 2.3572970181703568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3776 7.1991011500358582e-02</internalNodes>\n          <leafValues>\n            -3.5075180232524872e-02 2.8865718841552734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3777 5.0020869821310043e-02</internalNodes>\n          <leafValues>\n            2.4096360430121422e-02 -3.3890551328659058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3778 -1.7998270690441132e-02</internalNodes>\n          <leafValues>\n            2.9191690683364868e-01 -4.1259169578552246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3779 -8.6585222743451595e-04</internalNodes>\n          <leafValues>\n            -1.2248259782791138e-01 5.9690121561288834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3780 5.7470470666885376e-02</internalNodes>\n          <leafValues>\n            2.1541740745306015e-02 -4.7508370876312256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3781 -1.6517810523509979e-02</internalNodes>\n          <leafValues>\n            1.6598740220069885e-01 -3.9656970649957657e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3782 2.1703030914068222e-02</internalNodes>\n          <leafValues>\n            -3.8327228277921677e-02 3.3476251363754272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3783 -6.1237839981913567e-03</internalNodes>\n          <leafValues>\n            -1.4342689514160156e-01 2.6313329115509987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3784 -1.0893509723246098e-02</internalNodes>\n          <leafValues>\n            -7.9468882083892822e-01 1.2403479777276516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3785 -3.8589738309383392e-02</internalNodes>\n          <leafValues>\n            3.3763501048088074e-01 -1.8747940659523010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3786 1.3378040166571736e-03</internalNodes>\n          <leafValues>\n            -3.6288881301879883e-01 2.9460189864039421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3787 2.7590300305746496e-04</internalNodes>\n          <leafValues>\n            7.6419189572334290e-02 -8.6953632533550262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3788 7.9552736133337021e-03</internalNodes>\n          <leafValues>\n            5.2696179598569870e-02 -1.9200770556926727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3789 -1.2174629606306553e-02</internalNodes>\n          <leafValues>\n            8.4013037383556366e-02 -2.1740090101957321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3790 -1.6361070796847343e-02</internalNodes>\n          <leafValues>\n            -2.5493758916854858e-01 3.8582589477300644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3791 -3.4992128610610962e-02</internalNodes>\n          <leafValues>\n            2.5760510563850403e-01 -1.5727080404758453e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3792 -7.6113208197057247e-03</internalNodes>\n          <leafValues>\n            1.9114670157432556e-01 -5.2980780601501465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3793 5.0110749900341034e-02</internalNodes>\n          <leafValues>\n            2.4265250191092491e-02 -5.1509189605712891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3794 -9.1486647725105286e-03</internalNodes>\n          <leafValues>\n            -3.3170440793037415e-01 2.6774439960718155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3795 8.3293259143829346e-02</internalNodes>\n          <leafValues>\n            4.2860410176217556e-03 -3.0381551384925842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3796 -1.9334359094500542e-02</internalNodes>\n          <leafValues>\n            3.8916379213333130e-01 -2.4908309802412987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3797 -7.2061046957969666e-02</internalNodes>\n          <leafValues>\n            4.1184291243553162e-01 -2.5687059387564659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3798 2.2506359964609146e-02</internalNodes>\n          <leafValues>\n            -2.1196739375591278e-01 5.3825020790100098e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3799 5.5772401392459869e-02</internalNodes>\n          <leafValues>\n            -2.3104140534996986e-02 9.1578252613544464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3800 -2.6210390031337738e-02</internalNodes>\n          <leafValues>\n            3.3509409427642822e-01 -3.4225810319185257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3801 -4.6085331588983536e-02</internalNodes>\n          <leafValues>\n            -5.3006750345230103e-01 1.9083080813288689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3802 -3.2998260110616684e-02</internalNodes>\n          <leafValues>\n            3.0701389908790588e-01 -3.1638059765100479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3803 1.0677659884095192e-02</internalNodes>\n          <leafValues>\n            3.8186781108379364e-02 -2.0256699621677399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3804 3.7972650025039911e-03</internalNodes>\n          <leafValues>\n            7.8951433300971985e-02 -1.3040140271186829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3805 -2.4965009652078152e-03</internalNodes>\n          <leafValues>\n            -1.9799210131168365e-01 3.0743129551410675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3806 1.4203139580786228e-02</internalNodes>\n          <leafValues>\n            -4.5443460345268250e-02 2.1806409955024719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3807 7.7012999099679291e-05</internalNodes>\n          <leafValues>\n            -2.5858289003372192e-01 4.2508359998464584e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3808 2.3724909406155348e-03</internalNodes>\n          <leafValues>\n            -1.5815889835357666e-01 6.1494071036577225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3809 -8.4086082875728607e-02</internalNodes>\n          <leafValues>\n            -9.3704527616500854e-01 8.3687662845477462e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3810 -2.2892290726304054e-02</internalNodes>\n          <leafValues>\n            4.2960539460182190e-01 -2.7215819805860519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3811 -1.1238969862461090e-01</internalNodes>\n          <leafValues>\n            -2.0607289671897888e-01 1.7798800021409988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3812 6.8175032734870911e-02</internalNodes>\n          <leafValues>\n            -4.2019781470298767e-01 2.5051090866327286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3813 -1.0620189830660820e-02</internalNodes>\n          <leafValues>\n            -2.1870230138301849e-01 2.4231420829892159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3814 2.9390859417617321e-03</internalNodes>\n          <leafValues>\n            8.8470183312892914e-02 -1.1958040297031403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3815 5.6766260415315628e-02</internalNodes>\n          <leafValues>\n            -5.8820329606533051e-02 1.7845800518989563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3816 -7.3099520523101091e-04</internalNodes>\n          <leafValues>\n            3.0122080445289612e-01 -3.4890830516815186e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3817 3.4174978733062744e-02</internalNodes>\n          <leafValues>\n            1.9614150747656822e-02 -1.7419980466365814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3818 3.3152099698781967e-02</internalNodes>\n          <leafValues>\n            2.9344469308853149e-02 -3.5163739323616028e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3819 1.7158590257167816e-02</internalNodes>\n          <leafValues>\n            -4.7744009643793106e-02 2.0690310001373291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3820 -3.3270310610532761e-02</internalNodes>\n          <leafValues>\n            -3.6818051338195801e-01 3.0547879636287689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3821 -7.5228337664157152e-04</internalNodes>\n          <leafValues>\n            -1.0068210214376450e-01 3.7446059286594391e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3822 -5.7363631203770638e-03</internalNodes>\n          <leafValues>\n            -2.9704639315605164e-01 3.0889809131622314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3823 3.4203678369522095e-02</internalNodes>\n          <leafValues>\n            3.2694388180971146e-02 -1.9386410713195801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3824 1.1759670078754425e-01</internalNodes>\n          <leafValues>\n            2.8010509908199310e-02 -3.4469729661941528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3825 3.5684760659933090e-02</internalNodes>\n          <leafValues>\n            1.4612049795687199e-02 -3.2323908805847168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3826 -1.4562480151653290e-01</internalNodes>\n          <leafValues>\n            -4.3703469634056091e-01 2.0697519183158875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3827 8.0413380637764931e-03</internalNodes>\n          <leafValues>\n            1.8440550193190575e-02 -3.2272771000862122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3828 5.3446288220584393e-03</internalNodes>\n          <leafValues>\n            5.0503399223089218e-02 -1.8428540229797363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3829 8.6473226547241211e-02</internalNodes>\n          <leafValues>\n            6.2484769150614738e-03 -9.3612897396087646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3830 6.6168710589408875e-02</internalNodes>\n          <leafValues>\n            -5.9868391603231430e-02 1.5810599923133850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3831 2.8978990390896797e-02</internalNodes>\n          <leafValues>\n            2.8844339773058891e-02 -2.8269919753074646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3832 1.8636519089341164e-02</internalNodes>\n          <leafValues>\n            -5.1709290593862534e-02 1.7777459323406219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3833 -2.6881769299507141e-02</internalNodes>\n          <leafValues>\n            7.3635026812553406e-02 -3.6229219287633896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3834 -1.3696019537746906e-02</internalNodes>\n          <leafValues>\n            1.8215629458427429e-01 -5.9880878776311874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3835 -4.1931979358196259e-03</internalNodes>\n          <leafValues>\n            -9.3321792781352997e-02 2.7901070192456245e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3836 2.2784220054745674e-02</internalNodes>\n          <leafValues>\n            3.0631329864263535e-02 -2.8531938791275024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3837 -8.3819748833775520e-03</internalNodes>\n          <leafValues>\n            -2.3251660168170929e-01 5.0801441073417664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3838 -6.4928620122373104e-03</internalNodes>\n          <leafValues>\n            1.1060830205678940e-01 -8.3281010389328003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3839 5.5866848677396774e-02</internalNodes>\n          <leafValues>\n            2.3439039289951324e-01 -4.5191779732704163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3840 -1.0926710441708565e-02</internalNodes>\n          <leafValues>\n            2.0532840490341187e-01 -5.0775919109582901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3841 1.7515379935503006e-02</internalNodes>\n          <leafValues>\n            3.6728449165821075e-02 -3.0638590455055237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3842 1.4543980360031128e-02</internalNodes>\n          <leafValues>\n            4.4784490019083023e-02 -2.0757840573787689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3843 1.7274370184168220e-03</internalNodes>\n          <leafValues>\n            2.3706600069999695e-02 -1.8639369308948517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3844 2.0160499960184097e-02</internalNodes>\n          <leafValues>\n            4.1744660586118698e-02 -2.1943749487400055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3845 -5.5732231587171555e-02</internalNodes>\n          <leafValues>\n            -3.7666681408882141e-01 7.3045571334660053e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3846 -4.2138090357184410e-03</internalNodes>\n          <leafValues>\n            1.1314260214567184e-01 -8.4451928734779358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3847 -5.7113498449325562e-02</internalNodes>\n          <leafValues>\n            -4.1903460025787354e-01 4.2158551514148712e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3848 -3.3385161310434341e-02</internalNodes>\n          <leafValues>\n            -3.9007860422134399e-01 2.5290969759225845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3849 -8.5305999964475632e-03</internalNodes>\n          <leafValues>\n            5.3572379052639008e-02 -1.2238460034132004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3850 -1.5144890174269676e-02</internalNodes>\n          <leafValues>\n            4.5743760466575623e-01 -2.5002999231219292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3851 7.5857941992580891e-03</internalNodes>\n          <leafValues>\n            2.6268539950251579e-02 -9.8890319466590881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3852 -6.4347468316555023e-02</internalNodes>\n          <leafValues>\n            2.2607059776782990e-01 -4.1821580380201340e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3853 6.5772183239459991e-02</internalNodes>\n          <leafValues>\n            2.4147959426045418e-02 -4.0227779746055603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3854 -1.0496930032968521e-01</internalNodes>\n          <leafValues>\n            -4.6343261003494263e-01 1.9134109839797020e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3855 9.6320390701293945e-02</internalNodes>\n          <leafValues>\n            8.7147848680615425e-03 -3.5269328951835632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3856 1.6651069745421410e-02</internalNodes>\n          <leafValues>\n            -2.3842410743236542e-01 3.8928661495447159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3857 5.8829918503761292e-02</internalNodes>\n          <leafValues>\n            -1.6538100317120552e-02 3.3465591073036194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3858 5.2411198616027832e-02</internalNodes>\n          <leafValues>\n            -1.9688919186592102e-02 4.6966078877449036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3859 1.2325269635766745e-03</internalNodes>\n          <leafValues>\n            -1.2056189775466919e-01 5.0563529133796692e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3860 -2.4530949071049690e-02</internalNodes>\n          <leafValues>\n            -3.9168059825897217e-01 2.3108620196580887e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3861 3.5507690161466599e-02</internalNodes>\n          <leafValues>\n            2.0499339327216148e-02 -3.6233830451965332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3862 -1.5282739885151386e-02</internalNodes>\n          <leafValues>\n            -2.4604129791259766e-01 3.4749999642372131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3863 6.0466449707746506e-02</internalNodes>\n          <leafValues>\n            -5.5071748793125153e-02 2.0428660511970520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3864 6.5809831023216248e-02</internalNodes>\n          <leafValues>\n            -7.1466080844402313e-02 1.2002970278263092e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3865 -7.9543672502040863e-02</internalNodes>\n          <leafValues>\n            4.9044218659400940e-01 -7.8059309162199497e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3866 7.1057200431823730e-02</internalNodes>\n          <leafValues>\n            4.4219430536031723e-02 -2.1077010035514832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3867 1.2412209762260318e-03</internalNodes>\n          <leafValues>\n            9.9759846925735474e-02 -7.4065141379833221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3868 4.3900560587644577e-02</internalNodes>\n          <leafValues>\n            2.0245339721441269e-02 -4.7800138592720032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3869 1.3814829289913177e-01</internalNodes>\n          <leafValues>\n            -3.4169729799032211e-02 2.0662400126457214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3870 6.4026713371276855e-02</internalNodes>\n          <leafValues>\n            1.7396930605173111e-02 -5.7749879360198975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3871 -1.2456770054996014e-02</internalNodes>\n          <leafValues>\n            -1.6710869967937469e-01 1.2106380425393581e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3872 3.7183608859777451e-02</internalNodes>\n          <leafValues>\n            -1.9024299457669258e-02 4.4476169347763062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3873 -3.4905251115560532e-02</internalNodes>\n          <leafValues>\n            -1.4648060500621796e-01 2.0895779132843018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3874 6.1689559370279312e-02</internalNodes>\n          <leafValues>\n            1.2428649701178074e-02 -7.1737641096115112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3875 -2.7358489111065865e-02</internalNodes>\n          <leafValues>\n            -2.4311469495296478e-01 2.6138730347156525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3876 6.3740741461515427e-03</internalNodes>\n          <leafValues>\n            -8.2593016326427460e-02 1.1356580257415771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3877 -1.0299839824438095e-01</internalNodes>\n          <leafValues>\n            4.5398610830307007e-01 -1.6315529122948647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3878 -1.4695020392537117e-02</internalNodes>\n          <leafValues>\n            -1.8050310015678406e-01 4.8061780631542206e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3879 6.0288330132607371e-05</internalNodes>\n          <leafValues>\n            -9.8974503576755524e-02 3.8105670362710953e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3880 -1.3763650320470333e-02</internalNodes>\n          <leafValues>\n            4.5689401030540466e-01 -2.0808599889278412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3881 5.1598600111901760e-03</internalNodes>\n          <leafValues>\n            2.8479820117354393e-02 -1.9778659939765930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3882 6.6321617923676968e-03</internalNodes>\n          <leafValues>\n            -6.1560358852148056e-02 1.4045900106430054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3883 -1.1073590256273746e-02</internalNodes>\n          <leafValues>\n            1.1272329837083817e-01 -3.8423039019107819e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3884 7.3836948722600937e-03</internalNodes>\n          <leafValues>\n            2.4575280025601387e-02 -3.3994451165199280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3885 -1.9277689978480339e-02</internalNodes>\n          <leafValues>\n            1.5732249617576599e-01 -5.8382220566272736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3886 -2.6209199801087379e-02</internalNodes>\n          <leafValues>\n            -3.2575431466102600e-01 3.5296149551868439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3887 1.3872079551219940e-02</internalNodes>\n          <leafValues>\n            2.7504689991474152e-02 -2.0510050654411316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3888 2.5171930901706219e-03</internalNodes>\n          <leafValues>\n            6.9805637001991272e-02 -1.1518660187721252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3889 6.7753292620182037e-02</internalNodes>\n          <leafValues>\n            -3.7268139421939850e-02 2.3363080620765686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3890 -2.4352179840207100e-02</internalNodes>\n          <leafValues>\n            -2.1191249787807465e-01 4.2971581220626831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3891 -1.5085450373589993e-02</internalNodes>\n          <leafValues>\n            1.4743280410766602e-01 -3.8589131087064743e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3892 3.0052060261368752e-02</internalNodes>\n          <leafValues>\n            4.3882489204406738e-02 -2.0401340723037720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3893 -7.9878583550453186e-02</internalNodes>\n          <leafValues>\n            7.1355827152729034e-02 -3.5806309431791306e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3894 -4.9845650792121887e-02</internalNodes>\n          <leafValues>\n            2.8991028666496277e-01 -2.9193209484219551e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3895 6.0983549803495407e-02</internalNodes>\n          <leafValues>\n            1.1078090406954288e-02 -8.0549037456512451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3896 -2.4187229573726654e-02</internalNodes>\n          <leafValues>\n            2.0816670358181000e-01 -4.0332991629838943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3897 2.9581909999251366e-02</internalNodes>\n          <leafValues>\n            1.7189880833029747e-02 -3.0174249410629272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3898 -9.6158936619758606e-02</internalNodes>\n          <leafValues>\n            -3.6115181446075439e-01 2.1451879292726517e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3899 1.1087789898738265e-03</internalNodes>\n          <leafValues>\n            6.0711268335580826e-02 -1.2995730340480804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3900 3.6577019840478897e-02</internalNodes>\n          <leafValues>\n            -1.5757689252495766e-02 6.1568331718444824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3901 8.9887566864490509e-02</internalNodes>\n          <leafValues>\n            7.5012152083218098e-03 -8.4639918804168701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3902 5.2048689685761929e-03</internalNodes>\n          <leafValues>\n            -5.0408910959959030e-02 1.5618799626827240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3903 3.4727361053228378e-02</internalNodes>\n          <leafValues>\n            2.1034790202975273e-02 -2.1834190189838409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3904 -5.4695051163434982e-02</internalNodes>\n          <leafValues>\n            -8.3126282691955566e-01 8.9029762893915176e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3905 1.5987730026245117e-01</internalNodes>\n          <leafValues>\n            8.5425339639186859e-03 -6.9280862808227539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3906 -3.8558691740036011e-02</internalNodes>\n          <leafValues>\n            -2.7078241109848022e-01 2.7025369927287102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3907 -7.1866370737552643e-02</internalNodes>\n          <leafValues>\n            -3.9044618606567383e-01 1.0923280380666256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3908 1.9590340554714203e-01</internalNodes>\n          <leafValues>\n            1.3423370197415352e-02 -5.4260522127151489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3909 -2.2330079227685928e-02</internalNodes>\n          <leafValues>\n            -1.7275239527225494e-01 2.9058510437607765e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3910 5.1018559932708740e-01</internalNodes>\n          <leafValues>\n            1.1418639682233334e-02 -6.7876529693603516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3911 -1.1239909566938877e-02</internalNodes>\n          <leafValues>\n            1.1462499946355820e-01 -5.6867629289627075e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3912 1.7486160621047020e-02</internalNodes>\n          <leafValues>\n            5.2641868591308594e-02 -1.6195179522037506e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3913 -1.4517609961330891e-03</internalNodes>\n          <leafValues>\n            -1.0877469927072525e-01 5.6960400193929672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3914 3.7016559392213821e-02</internalNodes>\n          <leafValues>\n            1.7460089176893234e-02 -4.6505320072174072e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3915 -8.6366441100835800e-03</internalNodes>\n          <leafValues>\n            7.3076270520687103e-02 -1.0616590082645416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3916 1.9361129961907864e-03</internalNodes>\n          <leafValues>\n            -1.4585369825363159e-01 5.9394489973783493e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3917 -2.3119550198316574e-02</internalNodes>\n          <leafValues>\n            -9.4876237213611603e-02 3.0387479811906815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3918 6.3178739510476589e-03</internalNodes>\n          <leafValues>\n            -1.0537099838256836e-01 7.7892847359180450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3919 1.0961949825286865e-02</internalNodes>\n          <leafValues>\n            -6.6041983664035797e-02 1.0566339641809464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3920 -4.2129520326852798e-02</internalNodes>\n          <leafValues>\n            2.4344080686569214e-01 -5.1573678851127625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3921 4.5132819563150406e-02</internalNodes>\n          <leafValues>\n            1.0772050358355045e-02 -7.6156777143478394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3922 9.4924736768007278e-03</internalNodes>\n          <leafValues>\n            4.5273378491401672e-02 -1.8770030140876770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3923 -1.1573860049247742e-01</internalNodes>\n          <leafValues>\n            4.4831728935241699e-01 -8.6225848644971848e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3924 1.5801179688423872e-03</internalNodes>\n          <leafValues>\n            -1.0931409895420074e-01 7.9391218721866608e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3925 -4.4442281126976013e-02</internalNodes>\n          <leafValues>\n            3.3827048540115356e-01 -2.6649719104170799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3926 -6.5993092954158783e-02</internalNodes>\n          <leafValues>\n            -5.3106492757797241e-01 1.7543010413646698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3927 -1.0968820191919804e-02</internalNodes>\n          <leafValues>\n            -1.6612820327281952e-01 4.9488350749015808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3928 3.8149021565914154e-02</internalNodes>\n          <leafValues>\n            -4.1509900242090225e-02 2.0616669952869415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3929 4.0625538676977158e-03</internalNodes>\n          <leafValues>\n            4.8925049602985382e-02 -8.4866181015968323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3930 3.2693019602447748e-03</internalNodes>\n          <leafValues>\n            -1.1883019655942917e-01 8.6803138256072998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3931 -1.2488859938457608e-03</internalNodes>\n          <leafValues>\n            -1.4354729652404785e-01 2.1422969177365303e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3932 -1.7064889892935753e-02</internalNodes>\n          <leafValues>\n            -5.2316349744796753e-01 1.6529040411114693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3933 -2.3354699835181236e-02</internalNodes>\n          <leafValues>\n            -1.9698520004749298e-01 2.1972300484776497e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3934 2.7899529784917831e-02</internalNodes>\n          <leafValues>\n            3.8033228367567062e-02 -2.2323200106620789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3935 -6.7869402468204498e-02</internalNodes>\n          <leafValues>\n            -4.2076128721237183e-01 1.0559639893472195e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3936 5.7542059570550919e-02</internalNodes>\n          <leafValues>\n            -4.2111430317163467e-02 2.3515710234642029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3937 -2.1877309679985046e-01</internalNodes>\n          <leafValues>\n            6.9553351402282715e-01 -9.9031934514641762e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3938 3.7776291370391846e-01</internalNodes>\n          <leafValues>\n            -2.4721829220652580e-02 3.0367389321327209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3939 4.1029900312423706e-02</internalNodes>\n          <leafValues>\n            2.1999280899763107e-02 -2.4707089364528656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3940 2.5587070733308792e-02</internalNodes>\n          <leafValues>\n            4.2045179754495621e-02 -2.2333100438117981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3941 6.7200772464275360e-02</internalNodes>\n          <leafValues>\n            -1.6648389399051666e-02 2.4265660345554352e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3942 2.8230389580130577e-02</internalNodes>\n          <leafValues>\n            2.9572259634733200e-02 -3.0128848552703857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3943 2.4588680267333984e-01</internalNodes>\n          <leafValues>\n            1.9440819742158055e-03 -4.2153918743133545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3944 -9.5752447843551636e-02</internalNodes>\n          <leafValues>\n            -6.4711397886276245e-01 1.3180449604988098e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3945 -1.0596579872071743e-02</internalNodes>\n          <leafValues>\n            -2.0484970510005951e-01 2.8054440394043922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3946 6.7103967070579529e-02</internalNodes>\n          <leafValues>\n            2.9053989797830582e-02 -2.6770511269569397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3947 -7.9280838370323181e-02</internalNodes>\n          <leafValues>\n            2.1911109983921051e-01 -1.5684010460972786e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3948 -4.0710358880460262e-03</internalNodes>\n          <leafValues>\n            2.2031579911708832e-01 -4.0581289678812027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3949 3.7690360099077225e-02</internalNodes>\n          <leafValues>\n            -1.2946240603923798e-01 6.1921589076519012e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3950 1.8453929573297501e-02</internalNodes>\n          <leafValues>\n            -3.2800889015197754e-01 2.9745969921350479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3951 1.5218369662761688e-01</internalNodes>\n          <leafValues>\n            1.1928870342671871e-02 -4.3678689002990723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3952 1.0948959738016129e-01</internalNodes>\n          <leafValues>\n            2.4663779884576797e-02 -3.1567180156707764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3953 -4.4906709343194962e-02</internalNodes>\n          <leafValues>\n            2.3082759976387024e-01 -2.2163389250636101e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3954 1.4668619632720947e-01</internalNodes>\n          <leafValues>\n            1.8490659072995186e-02 -4.6669480204582214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3955 -4.0597580373287201e-02</internalNodes>\n          <leafValues>\n            2.0691379904747009e-01 -4.1412089020013809e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>293</maxWeakCount>\n      <stageThreshold>-1.3393770456314087e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3956 2.5723339058458805e-03</internalNodes>\n          <leafValues>\n            -2.4097059667110443e-01 1.5659730136394501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3957 5.7603712193667889e-03</internalNodes>\n          <leafValues>\n            -4.3601021170616150e-01 8.0516032874584198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3958 -1.0138600319623947e-01</internalNodes>\n          <leafValues>\n            3.9704030752182007e-01 -6.5761536359786987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3959 1.3221249682828784e-03</internalNodes>\n          <leafValues>\n            -4.2382979393005371e-01 2.8659680858254433e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3960 5.4164527682587504e-04</internalNodes>\n          <leafValues>\n            6.7418687045574188e-02 -3.1019261479377747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3961 2.4447739124298096e-03</internalNodes>\n          <leafValues>\n            1.3928419910371304e-02 -2.4488939344882965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3962 1.4049450401216745e-03</internalNodes>\n          <leafValues>\n            -1.5040999650955200e-01 1.2638579308986664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3963 1.1241709580644965e-03</internalNodes>\n          <leafValues>\n            -2.7436348795890808e-01 7.1175657212734222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3964 -1.3413740089163184e-03</internalNodes>\n          <leafValues>\n            -3.7685438990592957e-01 5.0038158893585205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3965 4.1714560240507126e-02</internalNodes>\n          <leafValues>\n            1.1733000166714191e-02 -5.4509437084197998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3966 2.1810019388794899e-03</internalNodes>\n          <leafValues>\n            -2.0847110450267792e-01 8.4929227828979492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3967 1.9655700773000717e-02</internalNodes>\n          <leafValues>\n            2.9568189755082130e-02 -2.4840490520000458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3968 4.9905799096450210e-04</internalNodes>\n          <leafValues>\n            -1.7222259938716888e-01 9.3910522758960724e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3969 3.3110571093857288e-03</internalNodes>\n          <leafValues>\n            7.9480826854705811e-02 -1.8249939382076263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3970 3.4921199548989534e-03</internalNodes>\n          <leafValues>\n            6.0159709304571152e-02 -2.3041090369224548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3971 1.3379369629547000e-03</internalNodes>\n          <leafValues>\n            -7.8347019851207733e-02 1.5814539790153503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3972 -3.4234288614243269e-04</internalNodes>\n          <leafValues>\n            -1.5121580660343170e-01 9.5998182892799377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3973 -7.2008459828794003e-03</internalNodes>\n          <leafValues>\n            1.0716210305690765e-01 -1.2086699903011322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3974 -3.3037480898201466e-03</internalNodes>\n          <leafValues>\n            -1.9142769277095795e-01 7.1347109973430634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3975 -8.1909723579883575e-02</internalNodes>\n          <leafValues>\n            -8.5086518526077271e-01 6.6832960583269596e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3976 -5.2563002100214362e-04</internalNodes>\n          <leafValues>\n            7.1854703128337860e-02 -2.3162660002708435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3977 -2.1477319300174713e-02</internalNodes>\n          <leafValues>\n            2.2399149835109711e-01 -3.2982278615236282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3978 -5.6700430810451508e-02</internalNodes>\n          <leafValues>\n            5.1475530862808228e-01 -2.3378230631351471e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3979 1.8419699743390083e-02</internalNodes>\n          <leafValues>\n            1.8853360787034035e-02 -4.4701090455055237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3980 -8.8926553726196289e-03</internalNodes>\n          <leafValues>\n            1.8497599661350250e-01 -6.6978506743907928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3981 1.2642369605600834e-02</internalNodes>\n          <leafValues>\n            8.6571149528026581e-02 -1.4233930408954620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3982 8.0502573400735855e-03</internalNodes>\n          <leafValues>\n            -7.7052421867847443e-02 2.1340900659561157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3983 -6.9165248423814774e-03</internalNodes>\n          <leafValues>\n            -1.7848269641399384e-01 5.6415598839521408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3984 -1.4194440096616745e-02</internalNodes>\n          <leafValues>\n            1.8763299286365509e-01 -6.7588217556476593e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3985 3.5530389286577702e-03</internalNodes>\n          <leafValues>\n            3.8925249129533768e-02 -1.4981240034103394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3986 4.8001301474869251e-03</internalNodes>\n          <leafValues>\n            4.4963311403989792e-02 -2.4595139920711517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3987 9.0420730412006378e-03</internalNodes>\n          <leafValues>\n            -5.3614400327205658e-02 1.3824699819087982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3988 4.3342178687453270e-03</internalNodes>\n          <leafValues>\n            -8.6166441440582275e-02 1.2793409824371338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3989 1.2264699675142765e-02</internalNodes>\n          <leafValues>\n            3.6203060299158096e-02 -3.7494099140167236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3990 4.9155529588460922e-02</internalNodes>\n          <leafValues>\n            -9.1319262981414795e-02 1.2587989866733551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3991 -5.8642931981012225e-04</internalNodes>\n          <leafValues>\n            9.3702591955661774e-02 -1.0736119747161865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3992 3.2971050590276718e-02</internalNodes>\n          <leafValues>\n            2.7238529175519943e-02 -4.5005699992179871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3993 1.6174600459635258e-03</internalNodes>\n          <leafValues>\n            3.2863009721040726e-02 -1.4241309463977814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3994 1.0178020456805825e-03</internalNodes>\n          <leafValues>\n            6.9898538291454315e-02 -1.7507210373878479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3995 3.4081579651683569e-03</internalNodes>\n          <leafValues>\n            -7.7970616519451141e-02 5.8423690497875214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3996 -6.9078300148248672e-03</internalNodes>\n          <leafValues>\n            1.1711090058088303e-01 -9.5380999147891998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3997 -7.8317627776414156e-04</internalNodes>\n          <leafValues>\n            6.3730940222740173e-02 -8.8190883398056030e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3998 -1.3578870333731174e-02</internalNodes>\n          <leafValues>\n            -2.7168250083923340e-01 3.9688158780336380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3999 -8.0021530389785767e-02</internalNodes>\n          <leafValues>\n            6.0115522146224976e-01 -2.4968839716166258e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4000 -1.7085570143535733e-03</internalNodes>\n          <leafValues>\n            1.0888680070638657e-01 -1.0520359873771667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4001 8.5700387135148048e-03</internalNodes>\n          <leafValues>\n            -4.1784621775150299e-02 1.4857980608940125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4002 1.5518560074269772e-02</internalNodes>\n          <leafValues>\n            2.1855160593986511e-02 -4.5708781480789185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4003 -1.5739940572530031e-03</internalNodes>\n          <leafValues>\n            5.0655461847782135e-02 -6.9658473134040833e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4004 -1.0979890357702971e-03</internalNodes>\n          <leafValues>\n            7.9917587339878082e-02 -1.1895059794187546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4005 -2.6248019188642502e-02</internalNodes>\n          <leafValues>\n            7.0614987611770630e-01 -1.3660780154168606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4006 -1.0281460359692574e-02</internalNodes>\n          <leafValues>\n            -1.8412110209465027e-01 6.6442340612411499e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4007 -3.6530280485749245e-03</internalNodes>\n          <leafValues>\n            1.2995550036430359e-01 -5.8351561427116394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4008 7.8363716602325439e-03</internalNodes>\n          <leafValues>\n            2.7073230594396591e-02 -3.3601909875869751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4009 -1.5283710323274136e-02</internalNodes>\n          <leafValues>\n            2.5562399625778198e-01 -3.5940971225500107e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4010 -6.7279259674251080e-03</internalNodes>\n          <leafValues>\n            2.4661159515380859e-01 -4.8673499375581741e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4011 1.7807850241661072e-01</internalNodes>\n          <leafValues>\n            6.0471030883491039e-03 -7.2566151618957520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4012 -1.0486179962754250e-03</internalNodes>\n          <leafValues>\n            -1.9335940480232239e-01 5.0940699875354767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4013 8.9163314551115036e-03</internalNodes>\n          <leafValues>\n            3.3024791628122330e-02 -1.6986289620399475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4014 4.0643039392307401e-04</internalNodes>\n          <leafValues>\n            -1.3117119669914246e-01 6.6818282008171082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4015 -4.7499048709869385e-01</internalNodes>\n          <leafValues>\n            -4.0152749419212341e-01 6.3146720640361309e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4016 1.0430049896240234e-01</internalNodes>\n          <leafValues>\n            2.4024970829486847e-02 -3.2695800065994263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4017 -5.1650121808052063e-02</internalNodes>\n          <leafValues>\n            1.6934829950332642e-01 -1.5539200045168400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4018 4.0506269782781601e-02</internalNodes>\n          <leafValues>\n            -2.2082980722188950e-02 3.9694729447364807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4019 2.4179749190807343e-02</internalNodes>\n          <leafValues>\n            2.1926779299974442e-02 -4.3460670113563538e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4020 -3.0531319789588451e-03</internalNodes>\n          <leafValues>\n            -1.4108030498027802e-01 5.6175179779529572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4021 -1.7123650759458542e-02</internalNodes>\n          <leafValues>\n            -6.3341897726058960e-01 9.8466947674751282e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4022 4.1705969721078873e-02</internalNodes>\n          <leafValues>\n            1.0977629572153091e-02 -6.7681282758712769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4023 4.3895491398870945e-03</internalNodes>\n          <leafValues>\n            -5.7781290262937546e-02 1.5501640737056732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4024 -4.4786250218749046e-03</internalNodes>\n          <leafValues>\n            -1.6706019639968872e-01 4.6572938561439514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4025 4.8733421135693789e-04</internalNodes>\n          <leafValues>\n            -1.5037140250205994e-01 4.6920441091060638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4026 1.5530640259385109e-02</internalNodes>\n          <leafValues>\n            2.2556010633707047e-02 -3.2370451092720032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4027 4.5443180948495865e-02</internalNodes>\n          <leafValues>\n            -9.8806591704487801e-03 6.0815322399139404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4028 -7.7960297465324402e-02</internalNodes>\n          <leafValues>\n            4.0743818879127502e-01 -1.8391529098153114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4029 -4.5014719944447279e-04</internalNodes>\n          <leafValues>\n            -3.8319730758666992e-01 1.3420820236206055e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4030 -2.1852780133485794e-02</internalNodes>\n          <leafValues>\n            -4.4697651267051697e-01 1.5379330143332481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4031 -6.3410878181457520e-02</internalNodes>\n          <leafValues>\n            3.9926728606224060e-01 -2.2168820723891258e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4032 -6.6417120397090912e-03</internalNodes>\n          <leafValues>\n            -1.4594499766826630e-01 5.1541730761528015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4033 2.0355410873889923e-02</internalNodes>\n          <leafValues>\n            -2.3113679140806198e-02 1.8792650103569031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4034 9.2754261568188667e-03</internalNodes>\n          <leafValues>\n            -5.5808931589126587e-02 1.3504269719123840e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4035 -6.4075283706188202e-02</internalNodes>\n          <leafValues>\n            2.6259770989418030e-01 -3.1913250684738159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4036 5.7537898421287537e-02</internalNodes>\n          <leafValues>\n            3.4703690558671951e-02 -2.7203989028930664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4037 -1.3369999825954437e-02</internalNodes>\n          <leafValues>\n            -1.0251790285110474e-01 2.0719829946756363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4038 2.9637520201504230e-03</internalNodes>\n          <leafValues>\n            -5.7579819113016129e-02 1.3346299529075623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4039 -4.7313207760453224e-03</internalNodes>\n          <leafValues>\n            -1.4229220151901245e-01 5.3106248378753662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4040 1.2967540323734283e-01</internalNodes>\n          <leafValues>\n            -2.1926470100879669e-02 3.3583769202232361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4041 -2.8757948894053698e-03</internalNodes>\n          <leafValues>\n            7.4970930814743042e-02 -1.0183060169219971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4042 -1.3546359725296497e-02</internalNodes>\n          <leafValues>\n            -1.5313720703125000e-01 5.2247390151023865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4043 6.3532173633575439e-02</internalNodes>\n          <leafValues>\n            9.1543495655059814e-03 -7.4869108200073242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4044 -1.0261409915983677e-02</internalNodes>\n          <leafValues>\n            1.2742519378662109e-01 -5.6786071509122849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4045 -4.3331928551197052e-02</internalNodes>\n          <leafValues>\n            -6.1829072237014771e-01 8.0406935885548592e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4046 4.0195342153310776e-03</internalNodes>\n          <leafValues>\n            -5.4130308330059052e-02 1.4864480495452881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4047 6.7003332078456879e-03</internalNodes>\n          <leafValues>\n            3.7507299333810806e-02 -1.9986230134963989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4048 -1.1208239942789078e-02</internalNodes>\n          <leafValues>\n            -1.4704710245132446e-01 5.7189401239156723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4049 -3.7890970706939697e-03</internalNodes>\n          <leafValues>\n            1.5529400110244751e-01 -3.7930488586425781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4050 -1.1098479852080345e-02</internalNodes>\n          <leafValues>\n            1.7850440740585327e-01 -4.5689649879932404e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4051 -7.3761218227446079e-03</internalNodes>\n          <leafValues>\n            -1.0891640186309814e-01 7.4425593018531799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4052 -3.2149269245564938e-03</internalNodes>\n          <leafValues>\n            9.0641707181930542e-02 -9.4377033412456512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4053 -3.5010059364140034e-03</internalNodes>\n          <leafValues>\n            -1.3498190045356750e-01 6.6652722656726837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4054 -1.4920319699740503e-05</internalNodes>\n          <leafValues>\n            -1.0505480319261551e-01 8.4583170711994171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4055 9.5882397145032883e-03</internalNodes>\n          <leafValues>\n            1.9421499222517014e-02 -2.4732840061187744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4056 5.7274959981441498e-02</internalNodes>\n          <leafValues>\n            8.1852423027157784e-03 -7.9508548974990845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4057 2.4549640715122223e-02</internalNodes>\n          <leafValues>\n            -1.5515980310738087e-02 4.8995479941368103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4058 -4.6792559325695038e-02</internalNodes>\n          <leafValues>\n            -8.4720087051391602e-01 9.0526090934872627e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4059 3.1038739252835512e-03</internalNodes>\n          <leafValues>\n            -5.3271029144525528e-02 7.8815557062625885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4060 -3.4241031855344772e-02</internalNodes>\n          <leafValues>\n            -4.8161220550537109e-01 1.3654340058565140e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4061 4.4056270271539688e-03</internalNodes>\n          <leafValues>\n            -4.9280438572168350e-02 7.8709162771701813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4062 2.3878510110080242e-03</internalNodes>\n          <leafValues>\n            -7.6887659728527069e-02 8.4614582359790802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4063 -1.1621230281889439e-02</internalNodes>\n          <leafValues>\n            -2.3086050152778625e-01 2.2584810853004456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4064 2.5225759018212557e-03</internalNodes>\n          <leafValues>\n            -5.0813131034374237e-02 1.3810400664806366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4065 1.3507470488548279e-01</internalNodes>\n          <leafValues>\n            7.5730998069047928e-03 -4.7955051064491272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4066 -2.2317951079457998e-03</internalNodes>\n          <leafValues>\n            -9.0258792042732239e-02 8.3118766546249390e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4067 -3.0061710625886917e-02</internalNodes>\n          <leafValues>\n            -5.1799142360687256e-01 1.2881710194051266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4068 -4.5464351773262024e-02</internalNodes>\n          <leafValues>\n            2.0660980045795441e-01 -3.4860398620367050e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4069 -9.2374589294195175e-03</internalNodes>\n          <leafValues>\n            -1.4695020020008087e-01 3.1320258975028992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4070 6.0185948386788368e-03</internalNodes>\n          <leafValues>\n            6.3885621726512909e-02 -1.1779619753360748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4071 -1.0322810150682926e-02</internalNodes>\n          <leafValues>\n            1.7958350479602814e-01 -4.6830028295516968e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4072 -1.7961780540645123e-03</internalNodes>\n          <leafValues>\n            -1.1374049633741379e-01 6.1730381101369858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4073 7.1363700553774834e-03</internalNodes>\n          <leafValues>\n            3.3574521541595459e-02 -1.5472589433193207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4074 6.9487772881984711e-02</internalNodes>\n          <leafValues>\n            -5.9162009507417679e-02 1.3841110467910767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4075 -3.8321871310472488e-02</internalNodes>\n          <leafValues>\n            1.5628719329833984e-01 -3.1815651804208755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4076 3.9706169627606869e-03</internalNodes>\n          <leafValues>\n            5.1252529025077820e-02 -1.7615999281406403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4077 -3.9275288581848145e-03</internalNodes>\n          <leafValues>\n            7.8947998583316803e-02 -5.1486730575561523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4078 1.9882800988852978e-03</internalNodes>\n          <leafValues>\n            -5.0474651157855988e-02 1.3366329669952393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4079 -1.6472870483994484e-03</internalNodes>\n          <leafValues>\n            4.9180198460817337e-02 -5.3437490016222000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4080 -1.1580109596252441e-02</internalNodes>\n          <leafValues>\n            -1.3224309682846069e-01 5.8321509510278702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4081 4.3496791273355484e-02</internalNodes>\n          <leafValues>\n            -2.3527380079030991e-02 1.2179140001535416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4082 1.8956169951707125e-03</internalNodes>\n          <leafValues>\n            5.6072939187288284e-02 -1.1997289955615997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4083 2.4906420148909092e-03</internalNodes>\n          <leafValues>\n            -1.2799920141696930e-01 3.5218570381402969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4084 -6.0253150761127472e-02</internalNodes>\n          <leafValues>\n            -7.8707909584045410e-01 7.7965850941836834e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4085 -1.5306809917092323e-02</internalNodes>\n          <leafValues>\n            -1.2276060134172440e-01 4.2537391185760498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4086 3.6899570841342211e-04</internalNodes>\n          <leafValues>\n            -1.2192569673061371e-01 5.9650231152772903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4087 3.0398070812225342e-03</internalNodes>\n          <leafValues>\n            -6.3023842871189117e-02 5.0918091088533401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4088 -3.5760499304160476e-04</internalNodes>\n          <leafValues>\n            -7.6859332621097565e-02 8.6624316871166229e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4089 -2.7939230203628540e-03</internalNodes>\n          <leafValues>\n            1.3074369728565216e-01 -4.6912711113691330e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4090 4.2060539126396179e-03</internalNodes>\n          <leafValues>\n            -5.3119719028472900e-02 1.2866240739822388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4091 5.1448699086904526e-02</internalNodes>\n          <leafValues>\n            1.1080370284616947e-02 -4.1434210538864136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4092 3.2859880477190018e-02</internalNodes>\n          <leafValues>\n            1.7495309934020042e-02 -3.7538790702819824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4093 -4.8408061265945435e-02</internalNodes>\n          <leafValues>\n            1.7011879384517670e-01 -2.3726450279355049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4094 1.4061340130865574e-02</internalNodes>\n          <leafValues>\n            2.5981390848755836e-02 -2.7635771036148071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4095 5.2196439355611801e-02</internalNodes>\n          <leafValues>\n            -9.5534622669219971e-03 1.0973469913005829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4096 4.4780261814594269e-02</internalNodes>\n          <leafValues>\n            -2.7032930403947830e-02 2.7434709668159485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4097 -3.7703409325331450e-03</internalNodes>\n          <leafValues>\n            -1.4412869513034821e-01 5.2342470735311508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4098 -4.1479258798062801e-03</internalNodes>\n          <leafValues>\n            -1.3706830143928528e-01 4.9621090292930603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4099 1.4685150235891342e-02</internalNodes>\n          <leafValues>\n            -4.9949668347835541e-02 1.3658650219440460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4100 1.0325849987566471e-02</internalNodes>\n          <leafValues>\n            8.3659462630748749e-02 -1.0378009825944901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4101 -1.7972270143218338e-04</internalNodes>\n          <leafValues>\n            -8.6658917367458344e-02 2.2592369467020035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4102 2.0081000402569771e-02</internalNodes>\n          <leafValues>\n            -1.9589949399232864e-02 3.4358739852905273e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4103 -2.2905580699443817e-02</internalNodes>\n          <leafValues>\n            -4.2482820153236389e-01 1.5416770242154598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4104 -5.5506028234958649e-02</internalNodes>\n          <leafValues>\n            7.3143810033798218e-01 -9.4347409904003143e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4105 -1.7899540252983570e-03</internalNodes>\n          <leafValues>\n            -8.1951782107353210e-02 3.5823788493871689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4106 -8.0740358680486679e-04</internalNodes>\n          <leafValues>\n            8.6620979011058807e-02 -7.8758612275123596e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4107 2.4445019662380219e-02</internalNodes>\n          <leafValues>\n            -2.2004250437021255e-02 9.4158843159675598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4108 -7.5640110298991203e-03</internalNodes>\n          <leafValues>\n            1.2011729925870895e-01 -7.2349771857261658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4109 2.3397218901664019e-03</internalNodes>\n          <leafValues>\n            -8.1034347414970398e-02 9.8173618316650391e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4110 -3.1817611306905746e-02</internalNodes>\n          <leafValues>\n            -3.5730469226837158e-01 1.9601309671998024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4111 1.0028080083429813e-02</internalNodes>\n          <leafValues>\n            -2.4160459637641907e-02 3.1340339779853821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4112 9.0504523541312665e-05</internalNodes>\n          <leafValues>\n            5.8050628751516342e-02 -1.1760439723730087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4113 -2.1010750904679298e-02</internalNodes>\n          <leafValues>\n            -2.0346039533615112e-01 3.4145411103963852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4114 -7.1200268575921655e-04</internalNodes>\n          <leafValues>\n            6.3303150236606598e-02 -1.0497389733791351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4115 -7.6272932346910238e-04</internalNodes>\n          <leafValues>\n            -7.4432566761970520e-02 3.4912228584289551e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4116 -5.8506328612565994e-02</internalNodes>\n          <leafValues>\n            5.5758380889892578e-01 -1.2666489928960800e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4117 2.4057500995695591e-03</internalNodes>\n          <leafValues>\n            4.4605068862438202e-02 -1.1581590026617050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4118 -1.9729519262909889e-02</internalNodes>\n          <leafValues>\n            -4.7550109028816223e-01 1.5548559837043285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4119 -2.2645130753517151e-02</internalNodes>\n          <leafValues>\n            1.1828950047492981e-01 -2.2170929238200188e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4120 -1.3123790267854929e-03</internalNodes>\n          <leafValues>\n            5.0635538995265961e-02 -1.3423310220241547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4121 -5.9856739826500416e-03</internalNodes>\n          <leafValues>\n            5.4273821413516998e-02 -6.9639056921005249e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4122 5.2245449274778366e-02</internalNodes>\n          <leafValues>\n            -1.8341360613703728e-02 4.1689381003379822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4123 -4.6837949194014072e-03</internalNodes>\n          <leafValues>\n            -1.2121260166168213e-01 3.9187919348478317e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4124 -1.5208399854600430e-02</internalNodes>\n          <leafValues>\n            -9.6487842500209808e-02 6.5325021743774414e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4125 -5.7328920811414719e-03</internalNodes>\n          <leafValues>\n            2.1023470163345337e-01 -3.1721260398626328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4126 -3.7612610030919313e-03</internalNodes>\n          <leafValues>\n            1.0085880011320114e-01 -6.1392951756715775e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4127 -1.0980520397424698e-02</internalNodes>\n          <leafValues>\n            -1.8342439830303192e-01 1.7121249809861183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4128 2.7213071007281542e-03</internalNodes>\n          <leafValues>\n            -5.8404140174388885e-02 1.0729049891233444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4129 -1.8969269469380379e-02</internalNodes>\n          <leafValues>\n            7.4764728546142578e-02 -3.4056201577186584e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4130 -7.1104627568274736e-04</internalNodes>\n          <leafValues>\n            -1.4749570190906525e-01 5.2447158843278885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4131 9.4774961471557617e-03</internalNodes>\n          <leafValues>\n            -2.5232490152120590e-02 1.0677599906921387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4132 1.0275880247354507e-01</internalNodes>\n          <leafValues>\n            1.0039360262453556e-02 -6.4630568027496338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4133 -1.1228179931640625e-01</internalNodes>\n          <leafValues>\n            -5.7247608900070190e-01 6.3971187919378281e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4134 -2.5683579966425896e-02</internalNodes>\n          <leafValues>\n            -3.2004079222679138e-01 1.7239449545741081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4135 2.5494299829006195e-02</internalNodes>\n          <leafValues>\n            -2.2127779200673103e-02 1.1838120222091675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4136 -3.0458789318799973e-02</internalNodes>\n          <leafValues>\n            -5.8747881650924683e-01 9.8222652450203896e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4137 -2.7816120535135269e-02</internalNodes>\n          <leafValues>\n            3.6785709857940674e-01 -1.2260340154170990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4138 -1.2768269516527653e-03</internalNodes>\n          <leafValues>\n            2.4150429666042328e-01 -2.4503409862518311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4139 -7.6435826718807220e-02</internalNodes>\n          <leafValues>\n            -6.3471722602844238e-01 2.7080429717898369e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4140 3.7574430461972952e-04</internalNodes>\n          <leafValues>\n            -1.3316820561885834e-01 4.6189591288566589e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4141 1.3193810358643532e-02</internalNodes>\n          <leafValues>\n            2.6501480489969254e-02 -6.8515978753566742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4142 -6.3689619302749634e-02</internalNodes>\n          <leafValues>\n            4.1126638650894165e-01 -1.5647120773792267e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4143 -8.0426287604495883e-04</internalNodes>\n          <leafValues>\n            -9.4006098806858063e-02 3.1002070754766464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4144 8.2476891111582518e-04</internalNodes>\n          <leafValues>\n            -1.5928819775581360e-01 3.7096790969371796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4145 4.8443409614264965e-03</internalNodes>\n          <leafValues>\n            -2.5698879733681679e-02 1.5079009532928467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4146 2.2941319271922112e-02</internalNodes>\n          <leafValues>\n            2.2941149771213531e-02 -2.7759069204330444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4147 5.6285588070750237e-03</internalNodes>\n          <leafValues>\n            2.0121619105339050e-02 -6.3584417104721069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4148 -8.1927451537922025e-04</internalNodes>\n          <leafValues>\n            5.5934138596057892e-02 -1.0776060074567795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4149 5.1910132169723511e-03</internalNodes>\n          <leafValues>\n            -2.6781970635056496e-02 5.5094171315431595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4150 -2.0220499485731125e-02</internalNodes>\n          <leafValues>\n            -1.2501780688762665e-01 5.9274829924106598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4151 -3.6798599176108837e-03</internalNodes>\n          <leafValues>\n            6.0474321246147156e-02 -5.9632349759340286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4152 1.0483860038220882e-02</internalNodes>\n          <leafValues>\n            -5.3652260452508926e-02 1.2906110286712646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4153 1.7904460430145264e-02</internalNodes>\n          <leafValues>\n            1.4318290166556835e-02 -2.7349731326103210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4154 3.3693820238113403e-01</internalNodes>\n          <leafValues>\n            -8.6311781778931618e-03 7.3288571834564209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4155 -1.0807479918003082e-01</internalNodes>\n          <leafValues>\n            -5.0707489252090454e-01 6.7152627743780613e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4156 -1.2219610065221786e-01</internalNodes>\n          <leafValues>\n            -7.9352718591690063e-01 7.4890498071908951e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4157 -3.7357630208134651e-03</internalNodes>\n          <leafValues>\n            -1.5436430275440216e-01 1.9933359697461128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4158 4.7283530235290527e-02</internalNodes>\n          <leafValues>\n            -3.2180741429328918e-02 2.2332429885864258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4159 -4.8949089832603931e-03</internalNodes>\n          <leafValues>\n            -1.4440849423408508e-01 2.7687419205904007e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4160 -4.6767960302531719e-03</internalNodes>\n          <leafValues>\n            4.2589519172906876e-02 -1.3181249797344208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4161 -4.0526568889617920e-02</internalNodes>\n          <leafValues>\n            1.5155360102653503e-01 -1.3137400150299072e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4162 5.1309340633451939e-03</internalNodes>\n          <leafValues>\n            -4.2436398565769196e-02 1.9428129494190216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4163 4.9947341904044151e-03</internalNodes>\n          <leafValues>\n            2.0656300708651543e-02 -1.8332560360431671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4164 -1.0946449823677540e-02</internalNodes>\n          <leafValues>\n            -1.1576370149850845e-01 6.1964198946952820e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4165 -6.7135482095181942e-03</internalNodes>\n          <leafValues>\n            1.5796749293804169e-01 -3.5399619489908218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4166 -3.0990630388259888e-02</internalNodes>\n          <leafValues>\n            -1.7271049320697784e-01 3.7916570901870728e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4167 -2.7503890451043844e-03</internalNodes>\n          <leafValues>\n            4.1495159268379211e-02 -5.5152788758277893e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4168 -2.4700429290533066e-02</internalNodes>\n          <leafValues>\n            2.9076111316680908e-01 -2.0552640780806541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4169 -1.7607269808650017e-02</internalNodes>\n          <leafValues>\n            -9.8671503365039825e-02 3.2800450921058655e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4170 8.7928329594433308e-04</internalNodes>\n          <leafValues>\n            3.6442421376705170e-02 -1.7518040537834167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4171 6.9036949425935745e-03</internalNodes>\n          <leafValues>\n            2.1444270387291908e-02 -1.1997299641370773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4172 -2.2592858877032995e-03</internalNodes>\n          <leafValues>\n            9.5944248139858246e-02 -8.1264480948448181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4173 1.5885939821600914e-02</internalNodes>\n          <leafValues>\n            -3.1494110822677612e-02 8.7531946599483490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4174 1.9379710778594017e-02</internalNodes>\n          <leafValues>\n            -3.5075489431619644e-02 1.6199189424514771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4175 -2.3565329611301422e-02</internalNodes>\n          <leafValues>\n            9.9367812275886536e-02 -5.0409961491823196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4176 -6.2582190148532391e-03</internalNodes>\n          <leafValues>\n            -1.5962609648704529e-01 5.6871950626373291e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4177 1.0289040394127369e-02</internalNodes>\n          <leafValues>\n            3.2422259449958801e-02 -1.1825840175151825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4178 -5.8485912159085274e-03</internalNodes>\n          <leafValues>\n            1.9107459485530853e-01 -3.7084739655256271e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4179 -8.5805162787437439e-02</internalNodes>\n          <leafValues>\n            -4.0877249836921692e-01 1.2781100347638130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4180 -2.4852859787642956e-03</internalNodes>\n          <leafValues>\n            -1.0116399824619293e-01 5.6311480700969696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4181 -7.1535720489919186e-03</internalNodes>\n          <leafValues>\n            -4.4118609279394150e-02 2.2217169404029846e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4182 1.2644700473174453e-03</internalNodes>\n          <leafValues>\n            6.5305598080158234e-02 -1.2273000180721283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4183 3.9825689047574997e-02</internalNodes>\n          <leafValues>\n            -5.0402980297803879e-02 1.4424259960651398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4184 1.3322670012712479e-02</internalNodes>\n          <leafValues>\n            2.3235419392585754e-01 -2.8198169544339180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4185 2.1017350256443024e-02</internalNodes>\n          <leafValues>\n            -1.9653260707855225e-02 1.0432569682598114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4186 2.4515210092067719e-01</internalNodes>\n          <leafValues>\n            8.4479590877890587e-03 -7.4833422899246216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4187 4.3030278757214546e-03</internalNodes>\n          <leafValues>\n            3.1172480434179306e-02 -9.4183586537837982e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4188 2.2224480286240578e-02</internalNodes>\n          <leafValues>\n            -3.9602920413017273e-02 1.5614870190620422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4189 -8.5019748657941818e-03</internalNodes>\n          <leafValues>\n            -1.0852319747209549e-01 2.8045600280165672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4190 1.0845540091395378e-02</internalNodes>\n          <leafValues>\n            -6.5594159066677094e-02 1.0217399895191193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4191 1.7696369905024767e-03</internalNodes>\n          <leafValues>\n            7.5369141995906830e-02 -9.5298826694488525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4192 1.0289049893617630e-01</internalNodes>\n          <leafValues>\n            -1.1767229996621609e-02 4.8167210817337036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4193 -3.5074170678853989e-02</internalNodes>\n          <leafValues>\n            -2.6299050450325012e-01 1.0002779774367809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4194 3.8302998989820480e-02</internalNodes>\n          <leafValues>\n            1.0883949697017670e-02 -5.8092927932739258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4195 1.2183119542896748e-02</internalNodes>\n          <leafValues>\n            3.1098999083042145e-02 -5.4257929325103760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4196 2.0388139411807060e-02</internalNodes>\n          <leafValues>\n            -3.7379540503025055e-02 1.8725450336933136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4197 6.5857400186359882e-03</internalNodes>\n          <leafValues>\n            -4.4194780290126801e-02 6.0033790767192841e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4198 5.8739529922604561e-03</internalNodes>\n          <leafValues>\n            3.9219710975885391e-02 -1.5857939422130585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4199 -7.8279033303260803e-02</internalNodes>\n          <leafValues>\n            2.1789179742336273e-01 -1.0094420053064823e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4200 1.5336579643189907e-02</internalNodes>\n          <leafValues>\n            -3.1219519674777985e-02 2.2452400624752045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4201 1.4171670190989971e-03</internalNodes>\n          <leafValues>\n            -1.6625450551509857e-01 2.7684109285473824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4202 -3.4021309111267328e-03</internalNodes>\n          <leafValues>\n            -2.8452378511428833e-01 2.2661060094833374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4203 -1.9340340048074722e-02</internalNodes>\n          <leafValues>\n            5.2300518751144409e-01 -5.0734821707010269e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4204 -1.6514319926500320e-02</internalNodes>\n          <leafValues>\n            7.0619380474090576e-01 -8.2714930176734924e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4205 -6.4589809626340866e-03</internalNodes>\n          <leafValues>\n            -1.2104330211877823e-01 3.8718421012163162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4206 -4.3003219179809093e-03</internalNodes>\n          <leafValues>\n            -1.2103659659624100e-01 5.5335890501737595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4207 1.0784200392663479e-02</internalNodes>\n          <leafValues>\n            -3.8975819945335388e-02 1.9870519638061523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4208 -1.1527650058269501e-03</internalNodes>\n          <leafValues>\n            9.3596100807189941e-02 -6.4248889684677124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4209 -4.2101260274648666e-02</internalNodes>\n          <leafValues>\n            -3.0032190680503845e-01 1.5909299254417419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4210 3.0202090274542570e-03</internalNodes>\n          <leafValues>\n            -6.5310478210449219e-02 9.4754762947559357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4211 2.9999990016222000e-02</internalNodes>\n          <leafValues>\n            1.7673229798674583e-02 -2.2457149624824524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4212 -1.3678170507773757e-03</internalNodes>\n          <leafValues>\n            1.3394910097122192e-01 -5.0086550414562225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4213 -2.3151950910687447e-02</internalNodes>\n          <leafValues>\n            -1.8310110270977020e-01 1.9103579223155975e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4214 6.3826322555541992e-02</internalNodes>\n          <leafValues>\n            7.5651248916983604e-03 -8.3116590976715088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4215 -1.4831620454788208e-01</internalNodes>\n          <leafValues>\n            -1. 3.4445689525455236e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4216 1.3207890151534230e-04</internalNodes>\n          <leafValues>\n            5.1135819405317307e-02 -1.1863200366497040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4217 6.6078707575798035e-02</internalNodes>\n          <leafValues>\n            7.1528651751577854e-03 -4.2906388640403748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4218 6.1758249066770077e-03</internalNodes>\n          <leafValues>\n            -5.9010580182075500e-02 1.0781309753656387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4219 -3.3506110310554504e-02</internalNodes>\n          <leafValues>\n            -3.7636739015579224e-01 1.7037799581885338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4220 -9.7032980993390083e-03</internalNodes>\n          <leafValues>\n            1.3820339739322662e-01 -4.3922200798988342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4221 -7.2475131601095200e-03</internalNodes>\n          <leafValues>\n            -2.2192749381065369e-01 1.2801939621567726e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4222 -5.3309328854084015e-02</internalNodes>\n          <leafValues>\n            -4.5594760775566101e-01 1.2495010159909725e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4223 1.0387069545686245e-02</internalNodes>\n          <leafValues>\n            -5.1624130457639694e-02 1.2236239761114120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4224 6.7208573222160339e-02</internalNodes>\n          <leafValues>\n            3.1655121594667435e-02 -2.1086180210113525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4225 -1.5143319964408875e-02</internalNodes>\n          <leafValues>\n            1.7224070429801941e-01 -2.9209939762949944e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4226 -3.9284970611333847e-02</internalNodes>\n          <leafValues>\n            -4.8226779699325562e-01 1.4366200193762779e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4227 -5.1000402309000492e-03</internalNodes>\n          <leafValues>\n            1.3700410723686218e-01 -4.3541591614484787e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4228 4.7284159809350967e-03</internalNodes>\n          <leafValues>\n            6.5495520830154419e-02 -1.2913839519023895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4229 -1.1877629905939102e-02</internalNodes>\n          <leafValues>\n            2.0146130025386810e-01 -2.3640049621462822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4230 -4.5396368950605392e-03</internalNodes>\n          <leafValues>\n            -1.6872450709342957e-01 4.4881179928779602e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4231 -8.0548608675599098e-03</internalNodes>\n          <leafValues>\n            6.5916322171688080e-02 -4.5184228569269180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4232 -4.3037731200456619e-02</internalNodes>\n          <leafValues>\n            1.2817430496215820e-01 -6.3021719455718994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4233 1.0952279716730118e-01</internalNodes>\n          <leafValues>\n            6.0560060665011406e-03 -5.1614511013031006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4234 -7.0019549457356334e-04</internalNodes>\n          <leafValues>\n            -1.2845410406589508e-01 4.9936100840568542e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4235 -2.9595570595120080e-05</internalNodes>\n          <leafValues>\n            6.7076332867145538e-02 -9.0397119522094727e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4236 1.7749640345573425e-01</internalNodes>\n          <leafValues>\n            -7.6472861692309380e-03 8.9716571569442749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4237 -5.5364448577165604e-02</internalNodes>\n          <leafValues>\n            -6.5513938665390015e-01 6.7208600230515003e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4238 -5.1461409777402878e-02</internalNodes>\n          <leafValues>\n            -6.5337532758712769e-01 8.9703118428587914e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4239 -2.6581719517707825e-02</internalNodes>\n          <leafValues>\n            -2.8116428852081299e-01 1.7766090109944344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4240 -6.9034337997436523e-02</internalNodes>\n          <leafValues>\n            9.2583978176116943e-01 -6.2460578046739101e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4241 -3.0205730348825455e-02</internalNodes>\n          <leafValues>\n            2.3784290254116058e-01 -1.6295459121465683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4242 -9.1226873919367790e-03</internalNodes>\n          <leafValues>\n            -1.4569890499114990e-01 4.5654390007257462e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4243 -2.1233780682086945e-01</internalNodes>\n          <leafValues>\n            1.6472199559211731e-01 -1.4758829958736897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4244 -2.6254689320921898e-02</internalNodes>\n          <leafValues>\n            3.0381628870964050e-01 -2.0108530297875404e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4245 3.0262209475040436e-03</internalNodes>\n          <leafValues>\n            -1.5298280119895935e-01 2.6878539472818375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4246 8.3838596940040588e-02</internalNodes>\n          <leafValues>\n            1.0042349807918072e-02 -5.9345102310180664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4247 1.8845759332180023e-02</internalNodes>\n          <leafValues>\n            -4.5260541141033173e-02 8.4220200777053833e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4248 -4.8671411350369453e-03</internalNodes>\n          <leafValues>\n            -1.1234840005636215e-01 5.6676398962736130e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>243</maxWeakCount>\n      <stageThreshold>-1.4994510412216187e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 4249 1.1900869756937027e-01</internalNodes>\n          <leafValues>\n            -2.0186680555343628e-01 2.4417600035667419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4250 2.1277489140629768e-02</internalNodes>\n          <leafValues>\n            -2.3454399406909943e-01 1.6303069889545441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4251 3.7066950462758541e-03</internalNodes>\n          <leafValues>\n            -2.0559909939765930e-01 1.4982059597969055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4252 3.2929550856351852e-02</internalNodes>\n          <leafValues>\n            7.8803077340126038e-02 -3.3688440918922424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4253 2.5057960301637650e-02</internalNodes>\n          <leafValues>\n            -1.5932090580463409e-01 1.6405050456523895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4254 6.5863109193742275e-04</internalNodes>\n          <leafValues>\n            -2.7804228663444519e-01 8.3028919994831085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4255 -6.6210910677909851e-02</internalNodes>\n          <leafValues>\n            -3.6402150988578796e-01 6.0067348182201385e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4256 4.2186300270259380e-03</internalNodes>\n          <leafValues>\n            -1.8551510572433472e-01 1.2828220427036285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4257 1.7119459807872772e-03</internalNodes>\n          <leafValues>\n            -2.1572509407997131e-01 8.6879499256610870e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4258 -2.1390480920672417e-02</internalNodes>\n          <leafValues>\n            1.1124739795923233e-01 -1.4486509561538696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4259 5.5712480098009109e-03</internalNodes>\n          <leafValues>\n            6.2546879053115845e-02 -3.1598201394081116e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4260 4.5709838159382343e-03</internalNodes>\n          <leafValues>\n            -2.3647899925708771e-01 3.8399569690227509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4261 -1.7086030915379524e-02</internalNodes>\n          <leafValues>\n            2.0653559267520905e-01 -8.6405612528324127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4262 -3.0640950426459312e-02</internalNodes>\n          <leafValues>\n            4.1523000597953796e-01 -2.5601850822567940e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4263 2.5803469121456146e-02</internalNodes>\n          <leafValues>\n            4.0156230330467224e-02 -3.7444010376930237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4264 2.6425920426845551e-02</internalNodes>\n          <leafValues>\n            4.2625781148672104e-02 -4.1888910531997681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4265 -1.1849730275571346e-02</internalNodes>\n          <leafValues>\n            -3.0619880557060242e-01 5.1505949348211288e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4266 -1.6269849613308907e-02</internalNodes>\n          <leafValues>\n            -1.9878490269184113e-01 4.2683240026235580e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4267 -2.4036159738898277e-02</internalNodes>\n          <leafValues>\n            -3.3211991190910339e-01 4.6091418713331223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4268 7.3583971243351698e-04</internalNodes>\n          <leafValues>\n            -2.0677410066127777e-01 5.7418260723352432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4269 -2.0423160865902901e-02</internalNodes>\n          <leafValues>\n            -2.6922059059143066e-01 4.4893719255924225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4270 1.9533000886440277e-03</internalNodes>\n          <leafValues>\n            4.3481849133968353e-02 -1.4295850694179535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4271 3.3202540129423141e-02</internalNodes>\n          <leafValues>\n            6.1112720519304276e-02 -2.0773139595985413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4272 2.1049549803137779e-02</internalNodes>\n          <leafValues>\n            -5.5196329951286316e-02 1.7273330688476562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4273 -4.2487941682338715e-03</internalNodes>\n          <leafValues>\n            -3.1202110648155212e-01 3.5714551806449890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4274 1.4544890262186527e-02</internalNodes>\n          <leafValues>\n            -1.2891520559787750e-01 1.0874609649181366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4275 4.4858800247311592e-03</internalNodes>\n          <leafValues>\n            5.0264850258827209e-02 -2.2729620337486267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4276 -7.2019517421722412e-02</internalNodes>\n          <leafValues>\n            -5.0357151031494141e-01 2.4909170344471931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4277 7.4088312685489655e-02</internalNodes>\n          <leafValues>\n            -2.6110179722309113e-02 4.6904951333999634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4278 -1.9376210868358612e-02</internalNodes>\n          <leafValues>\n            -8.7742328643798828e-02 5.2696809172630310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4279 -1.5192059800028801e-02</internalNodes>\n          <leafValues>\n            -1.6470350325107574e-01 7.4841916561126709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4280 6.7975218407809734e-03</internalNodes>\n          <leafValues>\n            -1.2512689828872681e-01 8.2092992961406708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4281 -1.9816169515252113e-03</internalNodes>\n          <leafValues>\n            6.1259880661964417e-02 -1.9138810038566589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4282 -4.0343839675188065e-02</internalNodes>\n          <leafValues>\n            -3.4634640812873840e-01 3.3814091235399246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4283 -9.7851715981960297e-03</internalNodes>\n          <leafValues>\n            2.4771960079669952e-01 -5.1031429320573807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4284 1.3061050325632095e-02</internalNodes>\n          <leafValues>\n            -5.9378169476985931e-02 1.4298720657825470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4285 1.2519969604909420e-02</internalNodes>\n          <leafValues>\n            -1.0087440162897110e-01 2.0617449283599854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4286 6.1620049178600311e-02</internalNodes>\n          <leafValues>\n            1.0850620456039906e-02 -4.9976751208305359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4287 1.5351610258221626e-02</internalNodes>\n          <leafValues>\n            3.0459180474281311e-02 -4.0248531103134155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4288 6.7390319891273975e-03</internalNodes>\n          <leafValues>\n            -1.5230870246887207e-01 3.4763731062412262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4289 2.7166040614247322e-02</internalNodes>\n          <leafValues>\n            3.2465178519487381e-02 -3.7905651330947876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4290 -4.9443650990724564e-02</internalNodes>\n          <leafValues>\n            -4.1042488813400269e-01 1.5265700407326221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4291 3.2999709248542786e-02</internalNodes>\n          <leafValues>\n            2.8922239318490028e-02 -4.3119680881500244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4292 3.7604149430990219e-02</internalNodes>\n          <leafValues>\n            2.0920699462294579e-02 -3.5471540689468384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4293 1.7311640083789825e-02</internalNodes>\n          <leafValues>\n            -1.5490870177745819e-01 7.3543228209018707e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4294 -1.7037079669535160e-03</internalNodes>\n          <leafValues>\n            -9.5346920192241669e-02 5.1517289131879807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4295 -1.5008790418505669e-02</internalNodes>\n          <leafValues>\n            2.1057499945163727e-01 -5.2197169512510300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4296 -4.1283361613750458e-02</internalNodes>\n          <leafValues>\n            -4.8727679252624512e-01 1.6686370596289635e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4297 -1.7190299928188324e-02</internalNodes>\n          <leafValues>\n            2.3070749640464783e-01 -5.7094439864158630e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4298 3.9707008749246597e-02</internalNodes>\n          <leafValues>\n            1.7016230151057243e-02 -3.8233861327171326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4299 4.7051470726728439e-02</internalNodes>\n          <leafValues>\n            4.2239248752593994e-02 -2.8050369024276733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4300 -1.1948949657380581e-02</internalNodes>\n          <leafValues>\n            -2.3056490719318390e-01 2.6532189920544624e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4301 -7.9857409000396729e-02</internalNodes>\n          <leafValues>\n            -8.4963917732238770e-01 1.2582180090248585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4302 2.5627639144659042e-02</internalNodes>\n          <leafValues>\n            2.3311240598559380e-02 -2.4923819303512573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4303 -3.1094370409846306e-02</internalNodes>\n          <leafValues>\n            -2.3769870400428772e-01 4.6116128563880920e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4304 4.6573221683502197e-02</internalNodes>\n          <leafValues>\n            2.8770290315151215e-02 -5.3739601373672485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4305 -5.4066929966211319e-02</internalNodes>\n          <leafValues>\n            2.7794760465621948e-01 -4.7770768404006958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4306 1.8918470013886690e-03</internalNodes>\n          <leafValues>\n            -9.8254829645156860e-02 4.7856420278549194e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4307 3.3229328691959381e-02</internalNodes>\n          <leafValues>\n            -5.2595350891351700e-02 2.3564100265502930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4308 1.1775200255215168e-03</internalNodes>\n          <leafValues>\n            -2.3401489853858948e-01 2.6142070069909096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4309 1.9482020288705826e-03</internalNodes>\n          <leafValues>\n            -1.5223619341850281e-01 7.8751467168331146e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4310 5.5945508182048798e-02</internalNodes>\n          <leafValues>\n            1.1540699750185013e-02 -1.9889539480209351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4311 2.9455369338393211e-02</internalNodes>\n          <leafValues>\n            3.3315770328044891e-02 -3.2850489020347595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4312 4.0880320593714714e-03</internalNodes>\n          <leafValues>\n            -8.6178407073020935e-02 7.9575799405574799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4313 -5.9127728454768658e-03</internalNodes>\n          <leafValues>\n            -1.7738300561904907e-01 6.0648940503597260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4314 -6.2419679015874863e-02</internalNodes>\n          <leafValues>\n            2.4396699666976929e-01 -3.3243889920413494e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4315 -3.7195120006799698e-02</internalNodes>\n          <leafValues>\n            2.6807048916816711e-01 -3.9979271590709686e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4316 -1.4324760437011719e-01</internalNodes>\n          <leafValues>\n            2.9332828521728516e-01 -2.6897290721535683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4317 -4.2845219373703003e-02</internalNodes>\n          <leafValues>\n            -2.5283750891685486e-01 4.1232049465179443e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4318 1.1560089886188507e-01</internalNodes>\n          <leafValues>\n            -1.4965849928557873e-02 2.4187250435352325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4319 5.0169471651315689e-02</internalNodes>\n          <leafValues>\n            8.8590547442436218e-02 -1.2442570179700851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4320 1.0200110077857971e-01</internalNodes>\n          <leafValues>\n            1.2396319769322872e-02 -3.6982178688049316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4321 -5.2397060208022594e-03</internalNodes>\n          <leafValues>\n            -2.5912949442863464e-01 4.0550298988819122e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4322 -1.9227810204029083e-02</internalNodes>\n          <leafValues>\n            2.0064230263233185e-01 -6.5223582088947296e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4323 -1.1133120395243168e-02</internalNodes>\n          <leafValues>\n            -4.6262189745903015e-01 2.4428030475974083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4324 9.7551010549068451e-02</internalNodes>\n          <leafValues>\n            1.2901189737021923e-02 -7.4022471904754639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4325 4.6071741729974747e-02</internalNodes>\n          <leafValues>\n            1.8453989177942276e-02 -4.8419821262359619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4326 -8.3533532917499542e-02</internalNodes>\n          <leafValues>\n            -8.8434767723083496e-01 1.6764779575169086e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4327 6.0535832308232784e-03</internalNodes>\n          <leafValues>\n            -1.5865640342235565e-01 6.7758671939373016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4328 -1.3178240042179823e-03</internalNodes>\n          <leafValues>\n            -8.7943129241466522e-02 6.6591359674930573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4329 -2.0939730107784271e-02</internalNodes>\n          <leafValues>\n            2.3358969390392303e-01 -5.2145671099424362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4330 -8.8145419955253601e-02</internalNodes>\n          <leafValues>\n            4.8081308603286743e-01 -1.1917640455067158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4331 1.6344599425792694e-02</internalNodes>\n          <leafValues>\n            -5.3838059306144714e-02 2.2349910438060760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4332 -2.2833999991416931e-01</internalNodes>\n          <leafValues>\n            3.6013820767402649e-01 -1.8727909773588181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4333 8.4737362340092659e-03</internalNodes>\n          <leafValues>\n            -5.6207131594419479e-02 1.6089470684528351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4334 -9.8505034111440182e-04</internalNodes>\n          <leafValues>\n            1.0108830034732819e-01 -1.0455229878425598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4335 4.9648447893559933e-03</internalNodes>\n          <leafValues>\n            -7.9359367489814758e-02 1.3140240311622620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4336 -1.3171610422432423e-02</internalNodes>\n          <leafValues>\n            -1.2099819630384445e-01 3.7730131298303604e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4337 8.2112876698374748e-03</internalNodes>\n          <leafValues>\n            -5.3597409278154373e-02 2.2156579792499542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4338 -4.8930559307336807e-02</internalNodes>\n          <leafValues>\n            -3.9349249005317688e-01 1.9850309938192368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4339 7.4527352117002010e-03</internalNodes>\n          <leafValues>\n            5.8218438178300858e-02 -2.5317558646202087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4340 7.7388651669025421e-02</internalNodes>\n          <leafValues>\n            -5.7724680751562119e-02 2.0154540240764618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4341 4.9968929961323738e-03</internalNodes>\n          <leafValues>\n            8.9260630309581757e-02 -1.3082459568977356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4342 -4.0977269411087036e-02</internalNodes>\n          <leafValues>\n            -1.7190429568290710e-01 2.2051449865102768e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4343 3.0041709542274475e-03</internalNodes>\n          <leafValues>\n            4.5379869639873505e-02 -2.4130369722843170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4344 1.5435700118541718e-01</internalNodes>\n          <leafValues>\n            -3.2916471362113953e-02 3.2090398669242859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4345 1.5153509564697742e-02</internalNodes>\n          <leafValues>\n            5.3576458245515823e-02 -1.6273179650306702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4346 9.5209293067455292e-02</internalNodes>\n          <leafValues>\n            1.3132530264556408e-02 -4.3389630317687988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4347 -2.2066019475460052e-02</internalNodes>\n          <leafValues>\n            1.8358850479125977e-01 -5.3995680063962936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4348 -4.0623430162668228e-02</internalNodes>\n          <leafValues>\n            -4.5687249302864075e-01 1.1119400151073933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4349 -2.1428579930216074e-03</internalNodes>\n          <leafValues>\n            9.5221467316150665e-02 -1.0431689769029617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4350 -9.6598910167813301e-03</internalNodes>\n          <leafValues>\n            -2.8121781349182129e-01 3.1387180089950562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4351 -1.7860020697116852e-01</internalNodes>\n          <leafValues>\n            4.6675390005111694e-01 -2.2296290844678879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4352 -2.0536049269139767e-03</internalNodes>\n          <leafValues>\n            -8.8460110127925873e-02 2.5863479822874069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4353 -4.6333461068570614e-03</internalNodes>\n          <leafValues>\n            6.0720779001712799e-02 -1.6562700271606445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4354 4.6847991645336151e-02</internalNodes>\n          <leafValues>\n            -4.0696758776903152e-02 1.0598970204591751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4355 -9.0538233518600464e-02</internalNodes>\n          <leafValues>\n            -6.3367050886154175e-01 1.6277700662612915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4356 -6.6260926425457001e-02</internalNodes>\n          <leafValues>\n            -2.8792759776115417e-01 6.1133177950978279e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4357 2.4731729179620743e-02</internalNodes>\n          <leafValues>\n            4.0057931095361710e-02 -2.3272530734539032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4358 -1.3736580312252045e-01</internalNodes>\n          <leafValues>\n            4.7250029444694519e-01 -8.2997139543294907e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4359 -6.3414901494979858e-02</internalNodes>\n          <leafValues>\n            4.3039301037788391e-01 -2.1049000322818756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4360 -3.3071819692850113e-02</internalNodes>\n          <leafValues>\n            -1.1073499917984009e-01 3.3718731254339218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4361 1.0934790223836899e-01</internalNodes>\n          <leafValues>\n            1.3508499599993229e-02 -6.5502017736434937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4362 1.5925880521535873e-02</internalNodes>\n          <leafValues>\n            3.3672690391540527e-02 -7.0779062807559967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4363 -7.4891438707709312e-03</internalNodes>\n          <leafValues>\n            -2.6472839713096619e-01 3.8183860480785370e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4364 9.8611623980104923e-04</internalNodes>\n          <leafValues>\n            -1.6149909794330597e-01 2.9475390911102295e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4365 2.5206479430198669e-01</internalNodes>\n          <leafValues>\n            -3.2382488250732422e-02 3.1068611145019531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4366 -2.8892729431390762e-02</internalNodes>\n          <leafValues>\n            -4.9116641283035278e-01 1.4923149719834328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4367 -5.5389881134033203e-02</internalNodes>\n          <leafValues>\n            5.7543408870697021e-01 -1.8582839518785477e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4368 3.1414598226547241e-02</internalNodes>\n          <leafValues>\n            2.0720759406685829e-02 -9.4729647040367126e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4369 2.8307519387453794e-03</internalNodes>\n          <leafValues>\n            -2.2519350051879883e-01 4.1564159095287323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4370 -3.3751260489225388e-02</internalNodes>\n          <leafValues>\n            -1.6646580398082733e-01 7.2693623602390289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4371 -3.8290288299322128e-02</internalNodes>\n          <leafValues>\n            7.9213732481002808e-01 -1.1434529908001423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4372 -1.7989480867981911e-02</internalNodes>\n          <leafValues>\n            1.1361669749021530e-01 -4.4032510370016098e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4373 1.8146529793739319e-02</internalNodes>\n          <leafValues>\n            3.4219540655612946e-02 -2.5041630864143372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4374 -6.9133192300796509e-02</internalNodes>\n          <leafValues>\n            -2.9793199896812439e-01 4.9929767847061157e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4375 1.2525920569896698e-01</internalNodes>\n          <leafValues>\n            1.0709079913794994e-02 -7.6342308521270752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4376 3.7683561444282532e-02</internalNodes>\n          <leafValues>\n            -3.4866910427808762e-02 1.9532379508018494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4377 -7.6676071621477604e-03</internalNodes>\n          <leafValues>\n            1.7114819586277008e-01 -5.1101781427860260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4378 3.5654550883919001e-03</internalNodes>\n          <leafValues>\n            -6.9071911275386810e-02 6.5724693238735199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4379 -1.8968600779771805e-02</internalNodes>\n          <leafValues>\n            -4.0976929664611816e-01 2.0560229197144508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4380 -2.0211370661854744e-02</internalNodes>\n          <leafValues>\n            3.3508920669555664e-01 -2.7907410636544228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4381 -1.9064599648118019e-02</internalNodes>\n          <leafValues>\n            1.9361929595470428e-01 -4.8648219555616379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4382 1.0313340276479721e-01</internalNodes>\n          <leafValues>\n            1.9382460042834282e-02 -1.1198680102825165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4383 9.8863355815410614e-03</internalNodes>\n          <leafValues>\n            -2.4043160676956177e-01 4.4305600225925446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4384 4.3293699622154236e-02</internalNodes>\n          <leafValues>\n            1.0728780180215836e-02 -6.4660537242889404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4385 6.1878331005573273e-02</internalNodes>\n          <leafValues>\n            1.0291899554431438e-02 -7.2967112064361572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4386 9.7703160718083382e-03</internalNodes>\n          <leafValues>\n            3.1311180442571640e-02 -1.5605080127716064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4387 -8.3175063133239746e-02</internalNodes>\n          <leafValues>\n            -3.3045348525047302e-01 2.3997390642762184e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4388 -3.1724658608436584e-01</internalNodes>\n          <leafValues>\n            5.4760771989822388e-01 -1.7853379249572754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4389 6.7434520460665226e-03</internalNodes>\n          <leafValues>\n            -6.6969439387321472e-02 1.2657959759235382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4390 4.0886890143156052e-02</internalNodes>\n          <leafValues>\n            4.3191551230847836e-03 -2.2032399475574493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4391 6.4959921874105930e-03</internalNodes>\n          <leafValues>\n            5.4097741842269897e-02 -1.5504899621009827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4392 -3.2832350581884384e-02</internalNodes>\n          <leafValues>\n            3.0770578980445862e-01 -2.4346910417079926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4393 -1.6127960756421089e-02</internalNodes>\n          <leafValues>\n            -1.0477919876575470e-01 9.1267466545104980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4394 3.4646671265363693e-02</internalNodes>\n          <leafValues>\n            1.4030230231583118e-02 -1.8207600712776184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4395 -3.3005408942699432e-02</internalNodes>\n          <leafValues>\n            3.8698929548263550e-01 -2.1859629079699516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4396 -4.3908338993787766e-02</internalNodes>\n          <leafValues>\n            -3.0621778964996338e-01 2.2774800658226013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4397 2.4842899292707443e-02</internalNodes>\n          <leafValues>\n            3.2077241688966751e-02 -2.5279021263122559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4398 1.0331260040402412e-02</internalNodes>\n          <leafValues>\n            -6.0551200062036514e-02 1.2119130045175552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4399 -6.7832246422767639e-02</internalNodes>\n          <leafValues>\n            -5.5833387374877930e-01 1.5336999669671059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4400 3.4947868436574936e-02</internalNodes>\n          <leafValues>\n            1.1647179722785950e-02 -2.5563651323318481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4401 -2.5261789560317993e-02</internalNodes>\n          <leafValues>\n            3.2832020521163940e-01 -2.3357210680842400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4402 7.5701558962464333e-03</internalNodes>\n          <leafValues>\n            7.1183882653713226e-02 -8.3878181874752045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4403 1.1809100210666656e-01</internalNodes>\n          <leafValues>\n            -4.1809991002082825e-02 2.2083349525928497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4404 3.6332231014966965e-02</internalNodes>\n          <leafValues>\n            1.7415270209312439e-01 -5.1788080483675003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4405 1.3216850347816944e-02</internalNodes>\n          <leafValues>\n            -4.7699850797653198e-01 1.8878389149904251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4406 1.4325110241770744e-02</internalNodes>\n          <leafValues>\n            2.1834760904312134e-02 -1.3961690664291382e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4407 1.3779220171272755e-03</internalNodes>\n          <leafValues>\n            -2.0156779885292053e-01 3.9925381541252136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4408 1.4492850005626678e-01</internalNodes>\n          <leafValues>\n            -3.3947311341762543e-02 1.4805939793586731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4409 2.0336720347404480e-01</internalNodes>\n          <leafValues>\n            -2.8280159458518028e-02 3.0469599366188049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4410 -3.0550520867109299e-02</internalNodes>\n          <leafValues>\n            1.5751589834690094e-01 -3.4339658915996552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4411 -1.1067859828472137e-02</internalNodes>\n          <leafValues>\n            2.4688349664211273e-01 -3.7554491311311722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4412 2.5981210172176361e-02</internalNodes>\n          <leafValues>\n            2.1994030103087425e-02 -1.4765749871730804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4413 -4.8331938683986664e-02</internalNodes>\n          <leafValues>\n            -2.5580298900604248e-01 3.2857868820428848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4414 1.5268280170857906e-02</internalNodes>\n          <leafValues>\n            6.2162041664123535e-02 -5.1811810582876205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4415 -2.4390730261802673e-01</internalNodes>\n          <leafValues>\n            5.0339847803115845e-01 -1.6864169389009476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4416 -3.2398870680481195e-03</internalNodes>\n          <leafValues>\n            -1.3850170373916626e-01 6.3738316297531128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4417 6.1450928449630737e-02</internalNodes>\n          <leafValues>\n            -5.6962829083204269e-02 1.4706780016422272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4418 4.3161489069461823e-02</internalNodes>\n          <leafValues>\n            2.3441100493073463e-02 -2.6922780275344849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4419 -1.1370860040187836e-02</internalNodes>\n          <leafValues>\n            -2.6135998964309692e-01 3.3624760806560516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4420 -1.5418549999594688e-02</internalNodes>\n          <leafValues>\n            2.2153179347515106e-01 -4.0866490453481674e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4421 4.5487228780984879e-02</internalNodes>\n          <leafValues>\n            -3.1598750501871109e-02 2.5687301158905029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4422 -1.5879619866609573e-02</internalNodes>\n          <leafValues>\n            -2.9981338977813721e-01 2.7006199583411217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4423 5.7012498378753662e-02</internalNodes>\n          <leafValues>\n            1.5179580077528954e-02 -5.2078807353973389e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4424 -1.5038490295410156e-01</internalNodes>\n          <leafValues>\n            2.5164321064949036e-01 -4.0796510875225067e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4425 -4.2246039956808090e-02</internalNodes>\n          <leafValues>\n            -4.8303580284118652e-01 1.9222039729356766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4426 -7.4928469955921173e-02</internalNodes>\n          <leafValues>\n            -9.5458990335464478e-01 4.4229729101061821e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4427 -2.1251840516924858e-02</internalNodes>\n          <leafValues>\n            3.1850698590278625e-01 -2.8021970763802528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4428 5.3983781486749649e-02</internalNodes>\n          <leafValues>\n            2.7037480846047401e-02 -3.4430688619613647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4429 3.3572580665349960e-02</internalNodes>\n          <leafValues>\n            -7.6545879244804382e-02 1.4255550503730774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4430 -6.7975879646837711e-03</internalNodes>\n          <leafValues>\n            1.7748320102691650e-01 -4.3155338615179062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4431 -1.3311849907040596e-03</internalNodes>\n          <leafValues>\n            1.5498100221157074e-01 -7.6261833310127258e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4432 3.9364699274301529e-02</internalNodes>\n          <leafValues>\n            3.6991588771343231e-02 -2.4243550002574921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4433 -6.8364520557224751e-03</internalNodes>\n          <leafValues>\n            1.0743640363216400e-01 -9.3058176338672638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4434 1.6118010506033897e-02</internalNodes>\n          <leafValues>\n            -3.5690911114215851e-02 2.4185790121555328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4435 -7.0620089769363403e-02</internalNodes>\n          <leafValues>\n            6.3363391160964966e-01 -1.2438289821147919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4436 4.4361630082130432e-01</internalNodes>\n          <leafValues>\n            -3.7221789360046387e-02 1.1892700195312500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4437 -8.1899233162403107e-02</internalNodes>\n          <leafValues>\n            3.4853339195251465e-01 -2.5211019441485405e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4438 -8.2997446879744530e-03</internalNodes>\n          <leafValues>\n            -3.0899089574813843e-01 2.5778239592909813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4439 -2.9730390757322311e-02</internalNodes>\n          <leafValues>\n            -3.0759811401367188e-01 2.5530820712447166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4440 -2.6014490053057671e-02</internalNodes>\n          <leafValues>\n            -1.2162390351295471e-01 1.8338350579142570e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4441 4.5121149742044508e-04</internalNodes>\n          <leafValues>\n            -5.4737848043441772e-01 1.3564749620854855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4442 1.8679940700531006e-01</internalNodes>\n          <leafValues>\n            7.8039847314357758e-02 -5.8137271553277969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4443 3.1894310377538204e-03</internalNodes>\n          <leafValues>\n            -2.4976019561290741e-01 3.0865840613842010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4444 -2.9449069872498512e-02</internalNodes>\n          <leafValues>\n            1.0489200055599213e-01 -4.8869129270315170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4445 2.9614970088005066e-02</internalNodes>\n          <leafValues>\n            -2.2261720150709152e-02 3.4992438554763794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4446 3.9882060140371323e-02</internalNodes>\n          <leafValues>\n            9.6727507188916206e-03 -6.7914432287216187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4447 -2.4404419586062431e-02</internalNodes>\n          <leafValues>\n            -2.6743829250335693e-01 3.0360370874404907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4448 4.3481849133968353e-02</internalNodes>\n          <leafValues>\n            -2.3372199386358261e-02 2.1356420218944550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4449 -4.8128370195627213e-02</internalNodes>\n          <leafValues>\n            -3.6890029907226562e-01 2.2832820191979408e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4450 -1.3142440002411604e-03</internalNodes>\n          <leafValues>\n            5.6764688342809677e-02 -1.3795310258865356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4451 2.1767991129308939e-03</internalNodes>\n          <leafValues>\n            8.2446262240409851e-02 -1.0511689633131027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4452 -2.7471050620079041e-02</internalNodes>\n          <leafValues>\n            9.6438340842723846e-02 -5.1520779728889465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4453 5.2003171294927597e-02</internalNodes>\n          <leafValues>\n            -2.3240759968757629e-02 3.5900598764419556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4454 2.9681740328669548e-02</internalNodes>\n          <leafValues>\n            1.4641559682786465e-02 -2.1500889956951141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4455 -4.7545950859785080e-02</internalNodes>\n          <leafValues>\n            -3.8834908604621887e-01 2.2062640637159348e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4456 -9.6900813281536102e-02</internalNodes>\n          <leafValues>\n            -4.3412810564041138e-01 6.4087379723787308e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4457 -3.8218989968299866e-01</internalNodes>\n          <leafValues>\n            -9.0176671743392944e-01 7.9825157299637794e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4458 -3.4389309585094452e-02</internalNodes>\n          <leafValues>\n            -3.1850269436836243e-01 9.1135511174798012e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4459 3.9068788290023804e-02</internalNodes>\n          <leafValues>\n            2.8420960530638695e-02 -2.6570749282836914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4460 1.0031700134277344e-01</internalNodes>\n          <leafValues>\n            -1.6155399382114410e-02 1.2212689965963364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4461 -1.0857210308313370e-01</internalNodes>\n          <leafValues>\n            3.7742871046066284e-01 -2.4014420807361603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4462 -4.3303978600306436e-05</internalNodes>\n          <leafValues>\n            2.0308060571551323e-02 -1.3060510158538818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4463 -3.8757279515266418e-02</internalNodes>\n          <leafValues>\n            -1.5826420485973358e-01 4.9129229038953781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4464 6.8668089807033539e-02</internalNodes>\n          <leafValues>\n            5.5041261948645115e-03 -7.2222518920898438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4465 -4.4268090277910233e-03</internalNodes>\n          <leafValues>\n            8.2263059914112091e-02 -1.0354729741811752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4466 -3.1016240245662630e-04</internalNodes>\n          <leafValues>\n            9.0432256460189819e-02 -1.0348629951477051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4467 3.7703070789575577e-02</internalNodes>\n          <leafValues>\n            6.0126338154077530e-02 -1.6111390292644501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4468 4.1672129184007645e-02</internalNodes>\n          <leafValues>\n            8.5145309567451477e-03 -2.4217429757118225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4469 -6.6434321925044060e-03</internalNodes>\n          <leafValues>\n            -2.7172479033470154e-01 3.1463291496038437e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4470 -4.0658649057149887e-02</internalNodes>\n          <leafValues>\n            -1.1673620343208313e-01 1.4849590137600899e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4471 -3.0082110315561295e-03</internalNodes>\n          <leafValues>\n            4.0028568357229233e-02 -2.3079049587249756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4472 -4.4187769293785095e-02</internalNodes>\n          <leafValues>\n            -1.7888109385967255e-01 1.7313620075583458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4473 -1.1813719756901264e-02</internalNodes>\n          <leafValues>\n            1.5633359551429749e-01 -5.4751630872488022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4474 -2.4433450400829315e-01</internalNodes>\n          <leafValues>\n            4.0716889500617981e-01 -3.8216509856283665e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4475 4.7230181097984314e-01</internalNodes>\n          <leafValues>\n            -5.5454619228839874e-02 1.6410639882087708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4476 1.7955109942704439e-03</internalNodes>\n          <leafValues>\n            9.5228001475334167e-02 -1.2934769690036774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4477 -5.0934039056301117e-02</internalNodes>\n          <leafValues>\n            2.2153440117835999e-01 -3.7975560873746872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4478 -5.9531718492507935e-02</internalNodes>\n          <leafValues>\n            -4.2974939942359924e-01 1.3196409679949284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4479 -3.5149399191141129e-02</internalNodes>\n          <leafValues>\n            -2.1232509613037109e-01 3.6872539669275284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4480 -8.2134327385574579e-04</internalNodes>\n          <leafValues>\n            7.4890241026878357e-02 -6.9701731204986572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4481 6.3945869915187359e-03</internalNodes>\n          <leafValues>\n            8.0602109432220459e-02 -1.0488619655370712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4482 6.3735827803611755e-02</internalNodes>\n          <leafValues>\n            1.1988660320639610e-02 -5.9508371353149414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4483 6.6942021250724792e-02</internalNodes>\n          <leafValues>\n            1.0711859911680222e-02 -7.0240277051925659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4484 3.5445358604192734e-02</internalNodes>\n          <leafValues>\n            8.8395569473505020e-03 -2.0588539540767670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4485 8.2025423645973206e-02</internalNodes>\n          <leafValues>\n            1.1511360295116901e-02 -6.7081338167190552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4486 -1.2151840329170227e-01</internalNodes>\n          <leafValues>\n            3.9124768972396851e-01 -6.0432488098740578e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4487 1.3732859492301941e-01</internalNodes>\n          <leafValues>\n            -1.6136020421981812e-02 4.6182548999786377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4488 -1.6075259447097778e-01</internalNodes>\n          <leafValues>\n            -1. 2.4232869036495686e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4489 6.3080438412725925e-03</internalNodes>\n          <leafValues>\n            4.3026689440011978e-02 -1.9072249531745911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4490 -8.5772968828678131e-02</internalNodes>\n          <leafValues>\n            -5.3327548503875732e-01 1.4197999611496925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4491 5.5853448808193207e-02</internalNodes>\n          <leafValues>\n            4.0535259991884232e-02 -2.0816819369792938e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>350</maxWeakCount>\n      <stageThreshold>-1.3171190023422241e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 4492 -1.1009960435330868e-02</internalNodes>\n          <leafValues>\n            1.6106800734996796e-01 -2.3270499706268311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4493 5.6892321445047855e-03</internalNodes>\n          <leafValues>\n            -2.2233660519123077e-01 1.2257739901542664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4494 4.3932348489761353e-03</internalNodes>\n          <leafValues>\n            -1.5293380618095398e-01 1.5888489782810211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4495 -5.0024059601128101e-04</internalNodes>\n          <leafValues>\n            6.1716180294752121e-02 -2.3175540566444397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4496 4.2015648796223104e-04</internalNodes>\n          <leafValues>\n            -3.0259498953819275e-01 6.1093948781490326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4497 -4.2626978829503059e-03</internalNodes>\n          <leafValues>\n            -2.4387679994106293e-01 6.9513782858848572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4498 6.5330968936905265e-04</internalNodes>\n          <leafValues>\n            -3.7112379074096680e-01 4.6169780194759369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4499 -1.0163539648056030e-01</internalNodes>\n          <leafValues>\n            4.5089960098266602e-01 -1.4424510300159454e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4500 -1.3200199464336038e-03</internalNodes>\n          <leafValues>\n            7.5765132904052734e-02 -1.9461849331855774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4501 -9.8261423408985138e-03</internalNodes>\n          <leafValues>\n            -2.7440890669822693e-01 5.2373219281435013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4502 -6.6574551165103912e-02</internalNodes>\n          <leafValues>\n            4.2804849147796631e-01 -3.2640948891639709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4503 -9.1772843152284622e-03</internalNodes>\n          <leafValues>\n            -2.5876390933990479e-01 6.1596788465976715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4504 -2.5353950913995504e-03</internalNodes>\n          <leafValues>\n            1.1473689973354340e-01 -1.0097979754209518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4505 4.9194418825209141e-03</internalNodes>\n          <leafValues>\n            4.0027469396591187e-02 -1.6378170251846313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4506 -1.6810640227049589e-03</internalNodes>\n          <leafValues>\n            -1.3706670701503754e-01 8.0321729183197021e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4507 2.1476070396602154e-03</internalNodes>\n          <leafValues>\n            -2.3408600687980652e-01 4.3113950639963150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4508 -3.3502440899610519e-02</internalNodes>\n          <leafValues>\n            -2.4204289913177490e-01 4.9100209027528763e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4509 1.4241789281368256e-01</internalNodes>\n          <leafValues>\n            -2.8680980205535889e-02 4.7807058691978455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4510 5.8733951300382614e-04</internalNodes>\n          <leafValues>\n            -2.1685610711574554e-01 4.8530109226703644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4511 -1.2295519700273871e-03</internalNodes>\n          <leafValues>\n            9.3180246651172638e-02 -1.0158210247755051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4512 1.1210669763386250e-02</internalNodes>\n          <leafValues>\n            3.6210179328918457e-02 -2.3106449842453003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4513 -2.5235990062355995e-02</internalNodes>\n          <leafValues>\n            8.5747621953487396e-02 -5.4415158927440643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4514 -1.0014030151069164e-02</internalNodes>\n          <leafValues>\n            -1.9362440705299377e-01 5.0274729728698730e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4515 -4.5554949901998043e-03</internalNodes>\n          <leafValues>\n            8.8674992322921753e-02 -1.4237509667873383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4516 -9.5264799892902374e-03</internalNodes>\n          <leafValues>\n            2.6754239201545715e-01 -3.7632450461387634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4517 2.3753349669277668e-03</internalNodes>\n          <leafValues>\n            3.9261918514966965e-02 -1.4199909567832947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4518 1.2389000039547682e-03</internalNodes>\n          <leafValues>\n            6.8643912672996521e-02 -1.8060870468616486e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4519 -1.5835729427635670e-03</internalNodes>\n          <leafValues>\n            -1.3684159517288208e-01 5.7875689119100571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4520 6.5202586352825165e-02</internalNodes>\n          <leafValues>\n            -3.4448388963937759e-02 2.5318139791488647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4521 6.6306376538705081e-05</internalNodes>\n          <leafValues>\n            -8.4601633250713348e-02 9.1657586395740509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4522 1.5117590010049753e-05</internalNodes>\n          <leafValues>\n            -9.3343816697597504e-02 1.1079390347003937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4523 -2.2637350484728813e-03</internalNodes>\n          <leafValues>\n            -1.9531199336051941e-01 3.8263510912656784e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4524 6.5463641658425331e-04</internalNodes>\n          <leafValues>\n            4.7860879451036453e-02 -1.6354900598526001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4525 5.0345290452241898e-02</internalNodes>\n          <leafValues>\n            -1.5618369914591312e-02 5.2660512924194336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4526 8.5375197231769562e-03</internalNodes>\n          <leafValues>\n            3.3894728869199753e-02 -2.7040940523147583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4527 -6.1621618270874023e-01</internalNodes>\n          <leafValues>\n            -9.3156081438064575e-01 2.6866910047829151e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4528 -2.6742840185761452e-02</internalNodes>\n          <leafValues>\n            1.2415560334920883e-01 -8.1576861441135406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4529 -1.4756740070879459e-02</internalNodes>\n          <leafValues>\n            -4.4224148988723755e-01 2.4418739601969719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4530 1.2045809999108315e-02</internalNodes>\n          <leafValues>\n            -8.4552876651287079e-02 9.2735297977924347e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4531 -4.0131900459527969e-02</internalNodes>\n          <leafValues>\n            -2.5734719634056091e-01 1.0692110285162926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4532 -1.0760580189526081e-03</internalNodes>\n          <leafValues>\n            2.8027180582284927e-02 -2.6805961132049561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4533 7.7456878498196602e-03</internalNodes>\n          <leafValues>\n            -3.6401689052581787e-02 2.6165041327476501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4534 1.3539849780499935e-02</internalNodes>\n          <leafValues>\n            2.8945919126272202e-02 -2.8003379702568054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4535 -1.2464780360460281e-02</internalNodes>\n          <leafValues>\n            -3.6258488893508911e-01 1.3006039895117283e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4536 3.5297829657793045e-02</internalNodes>\n          <leafValues>\n            1.2918749824166298e-02 -5.6460797786712646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4537 -5.5710550397634506e-02</internalNodes>\n          <leafValues>\n            1.2794859707355499e-01 -3.8257118314504623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4538 -4.5230439864099026e-03</internalNodes>\n          <leafValues>\n            -9.9410563707351685e-02 7.8997522592544556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4539 2.9874469619244337e-03</internalNodes>\n          <leafValues>\n            -4.8509139567613602e-02 1.1298680305480957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4540 -6.3613310456275940e-02</internalNodes>\n          <leafValues>\n            -6.6647279262542725e-01 1.1221170425415039e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4541 1.3244490139186382e-02</internalNodes>\n          <leafValues>\n            -6.1976868659257889e-02 1.3122899830341339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4542 -3.6382430698722601e-04</internalNodes>\n          <leafValues>\n            4.3054241687059402e-02 -1.6996359825134277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4543 -2.1500189602375031e-01</internalNodes>\n          <leafValues>\n            -4.6784079074859619e-01 1.2286320328712463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4544 6.0248938389122486e-03</internalNodes>\n          <leafValues>\n            -5.1475919783115387e-02 1.5234859287738800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4545 4.3000571429729462e-02</internalNodes>\n          <leafValues>\n            3.8120739627629519e-03 -7.5349187850952148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4546 8.5592586547136307e-03</internalNodes>\n          <leafValues>\n            2.4470439180731773e-02 -3.2796609401702881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4547 2.9510160675272346e-04</internalNodes>\n          <leafValues>\n            -7.6456926763057709e-02 6.8010047078132629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4548 9.9761411547660828e-04</internalNodes>\n          <leafValues>\n            -8.4680661559104919e-02 9.6316136419773102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4549 5.0175599753856659e-03</internalNodes>\n          <leafValues>\n            -3.9048101752996445e-02 1.0983789712190628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4550 5.5693010799586773e-03</internalNodes>\n          <leafValues>\n            4.0719300508499146e-02 -1.8395960330963135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4551 1.0486049577593803e-03</internalNodes>\n          <leafValues>\n            -4.4622048735618591e-02 7.0918112993240356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4552 3.2043100800365210e-03</internalNodes>\n          <leafValues>\n            -5.8839108794927597e-02 1.2777310609817505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4553 -1.0644660145044327e-01</internalNodes>\n          <leafValues>\n            4.3339949846267700e-01 -1.2449969537556171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4554 -8.9908082736656070e-04</internalNodes>\n          <leafValues>\n            -1.1510500311851501e-01 6.3306562602519989e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4555 2.9652470257133245e-03</internalNodes>\n          <leafValues>\n            -3.1290680170059204e-02 7.2845660150051117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4556 8.9800870046019554e-04</internalNodes>\n          <leafValues>\n            -8.6840502917766571e-02 1.0022729635238647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4557 -2.1874029189348221e-02</internalNodes>\n          <leafValues>\n            7.6143169403076172e-01 -4.5735938474535942e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4558 1.4919589739292860e-03</internalNodes>\n          <leafValues>\n            8.2724168896675110e-02 -9.6837893128395081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4559 -2.4136069696396589e-03</internalNodes>\n          <leafValues>\n            6.2480941414833069e-02 -5.0549559295177460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4560 1.2893830426037312e-02</internalNodes>\n          <leafValues>\n            -3.3901989459991455e-02 2.8036591410636902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4561 -1.9992720335721970e-03</internalNodes>\n          <leafValues>\n            -1.7152810096740723e-01 4.0084149688482285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4562 1.3713949592784047e-03</internalNodes>\n          <leafValues>\n            -1.2216719985008240e-01 6.2122181057929993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4563 -8.9740045368671417e-03</internalNodes>\n          <leafValues>\n            -1.7094230651855469e-01 4.4032000005245209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4564 -2.9300691094249487e-03</internalNodes>\n          <leafValues>\n            1.2364040315151215e-01 -6.3765726983547211e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4565 -8.0555928871035576e-03</internalNodes>\n          <leafValues>\n            1.1552560329437256e-01 -4.4458869844675064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4566 6.4662001095712185e-03</internalNodes>\n          <leafValues>\n            7.5147427618503571e-02 -1.1281009763479233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4567 -1.9541789591312408e-01</internalNodes>\n          <leafValues>\n            -8.6494231224060059e-01 3.1826570630073547e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4568 -1.5740759670734406e-01</internalNodes>\n          <leafValues>\n            -7.2405809164047241e-01 9.4235781580209732e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4569 -3.1526461243629456e-02</internalNodes>\n          <leafValues>\n            -3.8218951225280762e-01 1.6386790201067924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4570 5.0439048558473587e-02</internalNodes>\n          <leafValues>\n            -2.7623040601611137e-02 2.7306279540061951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4571 -5.5078428704291582e-04</internalNodes>\n          <leafValues>\n            4.9623548984527588e-02 -5.4462801665067673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4572 1.5047970227897167e-03</internalNodes>\n          <leafValues>\n            -6.2058940529823303e-02 1.2204010039567947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4573 -4.5796841382980347e-02</internalNodes>\n          <leafValues>\n            -9.3314772844314575e-01 6.8162381649017334e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4574 -9.3235643580555916e-03</internalNodes>\n          <leafValues>\n            -2.7436700463294983e-01 2.7820749208331108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4575 1.0689129680395126e-01</internalNodes>\n          <leafValues>\n            4.7212988138198853e-03 -4.4037041068077087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4576 1.1234519770368934e-03</internalNodes>\n          <leafValues>\n            -1.4162249863147736e-01 4.7511368989944458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4577 6.7312899045646191e-03</internalNodes>\n          <leafValues>\n            -4.5881479978561401e-02 1.1342740058898926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4578 4.1264150291681290e-02</internalNodes>\n          <leafValues>\n            1.1406780220568180e-02 -6.2894171476364136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4579 -7.3788799345493317e-02</internalNodes>\n          <leafValues>\n            -4.1924831271171570e-01 7.9344836995005608e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4580 -3.2669529318809509e-02</internalNodes>\n          <leafValues>\n            2.2224910557270050e-01 -3.0845979228615761e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4581 -5.9001590125262737e-03</internalNodes>\n          <leafValues>\n            -1.5003520250320435e-01 4.5819710940122604e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4582 -7.4141867458820343e-02</internalNodes>\n          <leafValues>\n            5.6236612796783447e-01 -1.1184119619429111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4583 -1.7110589891672134e-02</internalNodes>\n          <leafValues>\n            -3.0888330936431885e-01 1.7340350896120071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4584 2.4508470669388771e-03</internalNodes>\n          <leafValues>\n            -5.7074081152677536e-02 1.1306890100240707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4585 -2.1157979965209961e-02</internalNodes>\n          <leafValues>\n            2.0264630019664764e-01 -1.4705169945955276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4586 7.1819419972598553e-03</internalNodes>\n          <leafValues>\n            2.9788199812173843e-02 -2.2308370471000671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4587 5.0557879731059074e-03</internalNodes>\n          <leafValues>\n            -2.6257280260324478e-02 1.2028290331363678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4588 1.2610659934580326e-02</internalNodes>\n          <leafValues>\n            2.5965299457311630e-02 -2.5755238533020020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4589 3.0165250791469589e-05</internalNodes>\n          <leafValues>\n            -1.1994919925928116e-01 2.8916500508785248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4590 -1.3415860012173653e-03</internalNodes>\n          <leafValues>\n            2.0592840015888214e-01 -3.2803039997816086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4591 5.9342157328501344e-04</internalNodes>\n          <leafValues>\n            4.9788691103458405e-02 -7.0998527109622955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4592 -1.5428929589688778e-02</internalNodes>\n          <leafValues>\n            3.2733771204948425e-01 -2.0239489153027534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4593 -1.1928460298804566e-04</internalNodes>\n          <leafValues>\n            2.6405010372400284e-02 -1.4666070044040680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4594 -2.1726880222558975e-02</internalNodes>\n          <leafValues>\n            -4.4014349579811096e-01 1.4264649711549282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4595 -3.0710769817233086e-02</internalNodes>\n          <leafValues>\n            1.3549150526523590e-01 -1.7586210742592812e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4596 4.3861479498445988e-03</internalNodes>\n          <leafValues>\n            5.4423790425062180e-02 -1.1234579980373383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4597 4.7966800630092621e-03</internalNodes>\n          <leafValues>\n            -4.3494079262018204e-02 1.3108870387077332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4598 2.2497470490634441e-03</internalNodes>\n          <leafValues>\n            5.9489808976650238e-02 -1.0955479741096497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4599 4.3578739278018475e-03</internalNodes>\n          <leafValues>\n            5.9186179190874100e-02 -1.3026049733161926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4600 2.0433720201253891e-03</internalNodes>\n          <leafValues>\n            -5.1625490188598633e-02 1.3787810504436493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4601 -2.0268680527806282e-03</internalNodes>\n          <leafValues>\n            8.8105127215385437e-02 -8.5867561399936676e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4602 -6.5703789005056024e-04</internalNodes>\n          <leafValues>\n            7.1044988930225372e-02 -9.0751543641090393e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4603 4.4309969991445541e-02</internalNodes>\n          <leafValues>\n            -1.1522290296852589e-02 2.2733740508556366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4604 4.6578957699239254e-03</internalNodes>\n          <leafValues>\n            -4.6123549342155457e-02 1.5277029573917389e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4605 -4.0960058569908142e-02</internalNodes>\n          <leafValues>\n            -5.5988901853561401e-01 1.2064740061759949e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4606 -6.7416871897876263e-03</internalNodes>\n          <leafValues>\n            1.0484070330858231e-01 -6.5152801573276520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4607 -2.9713090043514967e-04</internalNodes>\n          <leafValues>\n            3.2221201807260513e-02 -8.4709979593753815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4608 -8.0926045775413513e-03</internalNodes>\n          <leafValues>\n            -1.6476640105247498e-01 4.5700121670961380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4609 4.0710348635911942e-02</internalNodes>\n          <leafValues>\n            1.0099260136485100e-02 -1.0893329977989197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4610 -1.1402929667383432e-03</internalNodes>\n          <leafValues>\n            -1.9269819557666779e-01 4.4590830802917480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4611 -2.0306430757045746e-02</internalNodes>\n          <leafValues>\n            6.8668061494827271e-01 -9.8533723503351212e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4612 4.8631370067596436e-02</internalNodes>\n          <leafValues>\n            1.1991590261459351e-02 -6.4770907163619995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4613 -5.4414950311183929e-02</internalNodes>\n          <leafValues>\n            3.4730699658393860e-01 -1.1940590105950832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4614 -5.9532530605792999e-02</internalNodes>\n          <leafValues>\n            3.6410269141197205e-01 -1.6050819307565689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4615 -3.5089451819658279e-02</internalNodes>\n          <leafValues>\n            -1.9252899289131165e-01 2.3598629981279373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4616 5.7658711448311806e-03</internalNodes>\n          <leafValues>\n            -4.6293850988149643e-02 1.5287970006465912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4617 -2.3687579669058323e-03</internalNodes>\n          <leafValues>\n            5.7345230132341385e-02 -8.8195472955703735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4618 -2.7341600507497787e-03</internalNodes>\n          <leafValues>\n            -2.3896160721778870e-01 2.5761809200048447e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4619 -9.1599775478243828e-03</internalNodes>\n          <leafValues>\n            1.0037499666213989e-01 -2.6731979101896286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4620 -5.0623171031475067e-02</internalNodes>\n          <leafValues>\n            4.6908378601074219e-01 -1.3880429789423943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4621 -4.3487590737640858e-03</internalNodes>\n          <leafValues>\n            -1.4812940359115601e-01 5.2115358412265778e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4622 4.0859800577163696e-01</internalNodes>\n          <leafValues>\n            1.5454529784619808e-02 -4.6494269371032715e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4623 5.3104009479284286e-02</internalNodes>\n          <leafValues>\n            7.8609427437186241e-03 -5.3555142879486084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4624 -4.1035288013517857e-03</internalNodes>\n          <leafValues>\n            -1.3777880370616913e-01 4.6847809106111526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4625 -2.7622529305517673e-03</internalNodes>\n          <leafValues>\n            5.2303940057754517e-02 -9.4970837235450745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4626 9.3903020024299622e-03</internalNodes>\n          <leafValues>\n            -2.3493729531764984e-02 3.6259791254997253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4627 2.3771630600094795e-02</internalNodes>\n          <leafValues>\n            8.0746166408061981e-02 -8.2893602550029755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4628 2.8008709196001291e-03</internalNodes>\n          <leafValues>\n            -2.6595699787139893e-01 2.8534680604934692e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4629 -6.3013769686222076e-03</internalNodes>\n          <leafValues>\n            8.0481633543968201e-02 -2.9016179963946342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4630 -5.1433448679745197e-03</internalNodes>\n          <leafValues>\n            -1.1473509669303894e-01 5.8448631316423416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4631 1.0679479455575347e-03</internalNodes>\n          <leafValues>\n            -3.1661890447139740e-02 5.4522778838872910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4632 1.5213950537145138e-03</internalNodes>\n          <leafValues>\n            -6.2172550708055496e-02 9.7601316869258881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4633 -3.3779911696910858e-02</internalNodes>\n          <leafValues>\n            -4.9582698941230774e-01 1.2093319557607174e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4634 -1.0505370050668716e-01</internalNodes>\n          <leafValues>\n            -9.8738801479339600e-01 5.1499558612704277e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4635 1.9685840234160423e-02</internalNodes>\n          <leafValues>\n            -5.6189429014921188e-02 9.1260537505149841e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4636 6.6470399498939514e-02</internalNodes>\n          <leafValues>\n            1.4097889885306358e-02 -4.5731648802757263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4637 -1.5898099169135094e-02</internalNodes>\n          <leafValues>\n            -2.3317760229110718e-01 1.1369620449841022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4638 4.0450799278914928e-03</internalNodes>\n          <leafValues>\n            4.3345049023628235e-02 -1.5908020734786987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4639 -3.3486548811197281e-02</internalNodes>\n          <leafValues>\n            1.3086590170860291e-01 -3.4327559173107147e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4640 2.1458480507135391e-02</internalNodes>\n          <leafValues>\n            -5.0213351845741272e-02 1.1467009782791138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4641 1.1672739684581757e-01</internalNodes>\n          <leafValues>\n            -3.4590030554682016e-03 4.4156730175018311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4642 -5.0386278890073299e-03</internalNodes>\n          <leafValues>\n            -1.3995400071144104e-01 4.0854398161172867e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4643 3.7261120975017548e-02</internalNodes>\n          <leafValues>\n            -1.6399189829826355e-02 2.3627850413322449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4644 -1.7991460859775543e-02</internalNodes>\n          <leafValues>\n            -5.6703627109527588e-01 1.0185079649090767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4645 1.0748039931058884e-01</internalNodes>\n          <leafValues>\n            1.8287489656358957e-03 -7.8705781698226929e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4646 -2.1439619362354279e-02</internalNodes>\n          <leafValues>\n            1.8347090482711792e-01 -3.2410789281129837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4647 6.8095367169007659e-04</internalNodes>\n          <leafValues>\n            4.1675068438053131e-02 -8.9301638305187225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4648 -6.8581351079046726e-03</internalNodes>\n          <leafValues>\n            -1.4511869847774506e-01 5.1585499197244644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4649 1.5318280458450317e-01</internalNodes>\n          <leafValues>\n            3.1881679315119982e-03 -4.4190090894699097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4650 2.2777369245886803e-02</internalNodes>\n          <leafValues>\n            -4.3234121054410934e-02 1.7477220296859741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4651 6.6160550341010094e-03</internalNodes>\n          <leafValues>\n            4.3140821158885956e-02 -1.7188510298728943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4652 -8.8224448263645172e-03</internalNodes>\n          <leafValues>\n            1.3203169405460358e-01 -4.7509200870990753e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4653 -5.1209977827966213e-03</internalNodes>\n          <leafValues>\n            -1.8979160487651825e-01 5.7657308876514435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4654 -1.0311880148947239e-02</internalNodes>\n          <leafValues>\n            3.2286819815635681e-01 -1.9725019112229347e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4655 -2.5065759196877480e-02</internalNodes>\n          <leafValues>\n            -3.6572399735450745e-01 1.8344869837164879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4656 -1.4318429864943027e-02</internalNodes>\n          <leafValues>\n            1.5795469284057617e-01 -3.8276918232440948e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4657 -5.7383939623832703e-02</internalNodes>\n          <leafValues>\n            -3.6835289001464844e-01 1.6900209710001945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4658 -4.3680299073457718e-02</internalNodes>\n          <leafValues>\n            4.4766798615455627e-01 -1.3710459694266319e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4659 -2.4289099872112274e-01</internalNodes>\n          <leafValues>\n            -7.5490927696228027e-01 8.9195184409618378e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4660 3.8089449517428875e-03</internalNodes>\n          <leafValues>\n            -6.2916718423366547e-02 9.4282902777194977e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4661 8.9389752247370780e-05</internalNodes>\n          <leafValues>\n            -1.1253400146961212e-01 9.9447913467884064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4662 2.7378369122743607e-03</internalNodes>\n          <leafValues>\n            7.4880510568618774e-02 -9.9257610738277435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4663 2.3680560290813446e-02</internalNodes>\n          <leafValues>\n            1.2105870060622692e-02 -1.1780750006437302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4664 -4.6060070395469666e-02</internalNodes>\n          <leafValues>\n            3.9799740910530090e-01 -1.7129369080066681e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4665 2.1130219101905823e-03</internalNodes>\n          <leafValues>\n            -6.0906849801540375e-02 4.9974281340837479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4666 1.4753149822354317e-02</internalNodes>\n          <leafValues>\n            1.6629729419946671e-02 -3.7806668877601624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4667 3.5430908203125000e-02</internalNodes>\n          <leafValues>\n            -2.3844370618462563e-02 2.6354551315307617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4668 -5.0745099782943726e-02</internalNodes>\n          <leafValues>\n            -2.3141309618949890e-01 2.8320349752902985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4669 8.9874058961868286e-02</internalNodes>\n          <leafValues>\n            -1.0191249661147594e-02 2.6277700066566467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4670 -2.7411670889705420e-03</internalNodes>\n          <leafValues>\n            -1.3828440010547638e-01 4.6966280788183212e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4671 8.7385937571525574e-02</internalNodes>\n          <leafValues>\n            1.7351199639961123e-03 -8.0810409784317017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4672 -2.9055110644549131e-03</internalNodes>\n          <leafValues>\n            6.6193267703056335e-02 -9.5981188118457794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4673 -5.1255577802658081e-01</internalNodes>\n          <leafValues>\n            -1. 8.6886010831221938e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4674 -1.3281259685754776e-02</internalNodes>\n          <leafValues>\n            1.0134270042181015e-01 -6.4344279468059540e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4675 5.3660940378904343e-02</internalNodes>\n          <leafValues>\n            3.2843649387359619e-03 -8.0011987686157227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4676 3.9290629327297211e-02</internalNodes>\n          <leafValues>\n            9.0429633855819702e-03 -6.7074328660964966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4677 6.5197132527828217e-02</internalNodes>\n          <leafValues>\n            4.4964649714529514e-03 -9.7931307554244995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4678 3.2505281269550323e-02</internalNodes>\n          <leafValues>\n            -1.2679249979555607e-02 4.9774479866027832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4679 -6.5749078989028931e-02</internalNodes>\n          <leafValues>\n            -3.7844368815422058e-01 5.9391320683062077e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4680 -6.0045070946216583e-02</internalNodes>\n          <leafValues>\n            -3.9957770705223083e-01 1.4155699871480465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4681 -4.6631351113319397e-02</internalNodes>\n          <leafValues>\n            1.6843810677528381e-01 -3.7634961307048798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4682 1.8095660198014230e-04</internalNodes>\n          <leafValues>\n            -1.0198330134153366e-01 7.2940513491630554e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4683 -3.7607289850711823e-03</internalNodes>\n          <leafValues>\n            4.5154098421335220e-02 -5.4370220750570297e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4684 -5.0964287947863340e-04</internalNodes>\n          <leafValues>\n            1.6106060147285461e-01 -5.4398071020841599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4685 -1.6095000319182873e-03</internalNodes>\n          <leafValues>\n            -2.1058610081672668e-01 3.0864259228110313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4686 -5.4673491977155209e-03</internalNodes>\n          <leafValues>\n            1.9076080620288849e-01 -3.2738618552684784e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4687 4.1697090491652489e-03</internalNodes>\n          <leafValues>\n            2.0009849220514297e-02 -6.8173840641975403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4688 3.2709140796214342e-03</internalNodes>\n          <leafValues>\n            -1.1110019683837891e-01 5.8211889117956161e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4689 -5.1663857884705067e-03</internalNodes>\n          <leafValues>\n            -8.5210792720317841e-02 3.3905100077390671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4690 -1.2914719991385937e-02</internalNodes>\n          <leafValues>\n            -1.3726939260959625e-01 4.8348769545555115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4691 -3.8130749017000198e-03</internalNodes>\n          <leafValues>\n            -1.1084940284490585e-01 3.2373629510402679e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4692 -5.7762481272220612e-02</internalNodes>\n          <leafValues>\n            2.1701450645923615e-01 -2.9828049242496490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4693 -2.2619909141212702e-03</internalNodes>\n          <leafValues>\n            3.5641018301248550e-02 -5.5289078503847122e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4694 5.2979849278926849e-02</internalNodes>\n          <leafValues>\n            7.7050398103892803e-03 -7.2121208906173706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4695 -3.3839911222457886e-01</internalNodes>\n          <leafValues>\n            -9.4540262222290039e-01 4.5049181208014488e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4696 5.2918092114850879e-04</internalNodes>\n          <leafValues>\n            4.1633930057287216e-02 -1.3283179700374603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4697 2.8239609673619270e-03</internalNodes>\n          <leafValues>\n            1.3815909624099731e-01 -1.1371930129826069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4698 -2.1569489035755396e-03</internalNodes>\n          <leafValues>\n            6.3553653657436371e-02 -8.4683336317539215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4699 4.1426848620176315e-03</internalNodes>\n          <leafValues>\n            4.1431330144405365e-02 -9.1413199901580811e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4700 -1.1016559787094593e-02</internalNodes>\n          <leafValues>\n            8.0382406711578369e-02 -8.3978570997714996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4701 -6.5561989322304726e-03</internalNodes>\n          <leafValues>\n            -1.3563759624958038e-01 3.4514341503381729e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4702 -2.2384698968380690e-03</internalNodes>\n          <leafValues>\n            -1.2900340557098389e-01 6.0718830674886703e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4703 -1.2789719738066196e-02</internalNodes>\n          <leafValues>\n            2.6254388689994812e-01 -2.5295289233326912e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4704 -1.1028759926557541e-01</internalNodes>\n          <leafValues>\n            -4.0324538946151733e-01 1.3996849767863750e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4705 2.9025289695709944e-03</internalNodes>\n          <leafValues>\n            -6.0133900493383408e-02 4.0657509118318558e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4706 1.3041580095887184e-03</internalNodes>\n          <leafValues>\n            -1.1271840333938599e-01 5.3001549094915390e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4707 4.8518911004066467e-02</internalNodes>\n          <leafValues>\n            9.9352700635790825e-03 -3.3844459056854248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4708 -5.0848070532083511e-03</internalNodes>\n          <leafValues>\n            -1.3072639703750610e-01 4.7106929123401642e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4709 5.7023460976779461e-03</internalNodes>\n          <leafValues>\n            -5.2840489894151688e-02 1.2418749928474426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4710 -2.7858179528266191e-03</internalNodes>\n          <leafValues>\n            -9.6685640513896942e-02 6.6828437149524689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4711 -3.0082210432738066e-03</internalNodes>\n          <leafValues>\n            7.1778140962123871e-02 -3.8511540740728378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4712 6.9350451231002808e-03</internalNodes>\n          <leafValues>\n            -5.7932149618864059e-02 1.0691670328378677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4713 -4.7064341604709625e-02</internalNodes>\n          <leafValues>\n            1.0284499824047089e-01 -2.7998289093375206e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4714 -8.2645736634731293e-02</internalNodes>\n          <leafValues>\n            -8.5849452018737793e-01 6.3560227863490582e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4715 8.9476434513926506e-03</internalNodes>\n          <leafValues>\n            -3.9904471486806870e-02 6.6897280514240265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4716 3.0593979358673096e-01</internalNodes>\n          <leafValues>\n            7.2277039289474487e-03 -7.9749721288681030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4717 -5.8336472138762474e-03</internalNodes>\n          <leafValues>\n            -1.9526490569114685e-01 2.4196550250053406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4718 -5.3784619085490704e-03</internalNodes>\n          <leafValues>\n            7.1967631578445435e-02 -9.1547563672065735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4719 9.2504899948835373e-03</internalNodes>\n          <leafValues>\n            3.6146361380815506e-02 -7.4494920670986176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4720 3.7581291049718857e-02</internalNodes>\n          <leafValues>\n            -2.0222729071974754e-02 3.3224269747734070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4721 -4.6818740665912628e-02</internalNodes>\n          <leafValues>\n            -5.0513672828674316e-01 1.2870309874415398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4722 3.3507939428091049e-02</internalNodes>\n          <leafValues>\n            -1.8688799813389778e-02 3.0542388558387756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4723 6.8437248468399048e-02</internalNodes>\n          <leafValues>\n            -6.2482542125508189e-04 8.3963787555694580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4724 1.0151940397918224e-02</internalNodes>\n          <leafValues>\n            2.5653729215264320e-02 -2.1830080449581146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4725 -1.3866250216960907e-01</internalNodes>\n          <leafValues>\n            5.7341670989990234e-01 -6.0921781696379185e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4726 -1.1214310070499778e-03</internalNodes>\n          <leafValues>\n            7.0692487061023712e-02 -8.2995750010013580e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4727 1.4782310463488102e-03</internalNodes>\n          <leafValues>\n            -3.5161279141902924e-02 5.8569159358739853e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4728 -2.3407500702887774e-03</internalNodes>\n          <leafValues>\n            1.2667399644851685e-01 -7.7700607478618622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4729 4.3265568092465401e-03</internalNodes>\n          <leafValues>\n            3.1229879707098007e-02 -1.1680649966001511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4730 -3.2252248376607895e-02</internalNodes>\n          <leafValues>\n            -5.4395800828933716e-01 1.0386509820818901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4731 -7.1836792631074786e-04</internalNodes>\n          <leafValues>\n            -6.3850082457065582e-02 4.8989679664373398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4732 1.1035969946533442e-03</internalNodes>\n          <leafValues>\n            -7.1095839142799377e-02 8.3087973296642303e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4733 -1.0265519842505455e-02</internalNodes>\n          <leafValues>\n            1.1647050082683563e-01 -2.8178630396723747e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4734 7.2632037103176117e-02</internalNodes>\n          <leafValues>\n            7.5578331016004086e-03 -7.1635490655899048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4735 1.2232369929552078e-01</internalNodes>\n          <leafValues>\n            -3.9898478426039219e-03 6.0708892345428467e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4736 -1.4398260414600372e-01</internalNodes>\n          <leafValues>\n            8.5836321115493774e-01 -5.8769038878381252e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4737 5.9525449760258198e-03</internalNodes>\n          <leafValues>\n            2.1712759509682655e-02 -1.5896700322628021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4738 -1.3158279471099377e-03</internalNodes>\n          <leafValues>\n            8.3239771425724030e-02 -7.1944266557693481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4739 -3.5782668739557266e-02</internalNodes>\n          <leafValues>\n            -3.1888490915298462e-01 6.7262151278555393e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4740 1.4122560387477279e-03</internalNodes>\n          <leafValues>\n            -6.9247573614120483e-02 8.8037729263305664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4741 -1.6188029199838638e-02</internalNodes>\n          <leafValues>\n            -6.0439001768827438e-02 6.7530423402786255e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4742 -2.8433150146156549e-03</internalNodes>\n          <leafValues>\n            6.4466439187526703e-02 -1.0504409670829773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4743 -1.5944750048220158e-03</internalNodes>\n          <leafValues>\n            -5.1919359713792801e-02 5.3710401058197021e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4744 1.8808269500732422e-01</internalNodes>\n          <leafValues>\n            -8.1325937062501907e-03 7.0354807376861572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4745 -3.3552229404449463e-02</internalNodes>\n          <leafValues>\n            -3.1318250298500061e-01 2.4297190830111504e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4746 -1.5341060236096382e-02</internalNodes>\n          <leafValues>\n            2.3687170445919037e-01 -2.8020450845360756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4747 -1.3534810394048691e-02</internalNodes>\n          <leafValues>\n            -3.1544640660285950e-01 2.3011740297079086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4748 3.2969659660011530e-03</internalNodes>\n          <leafValues>\n            3.2923359423875809e-02 -1.5933570265769958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4749 -4.4846888631582260e-02</internalNodes>\n          <leafValues>\n            1.2876190245151520e-01 -1.7795780673623085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4750 5.1291137933731079e-03</internalNodes>\n          <leafValues>\n            3.2709009945392609e-02 -1.7871360480785370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4751 1.1287770466879010e-03</internalNodes>\n          <leafValues>\n            -7.6234400272369385e-02 7.1267232298851013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4752 1.2759109959006310e-02</internalNodes>\n          <leafValues>\n            -5.1268041133880615e-02 1.2901780009269714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4753 5.3586461581289768e-04</internalNodes>\n          <leafValues>\n            6.6144347190856934e-02 -6.8021528422832489e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4754 5.8012880617752671e-04</internalNodes>\n          <leafValues>\n            7.5946256518363953e-02 -7.2426833212375641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4755 9.8113536834716797e-02</internalNodes>\n          <leafValues>\n            4.4115697965025902e-03 -5.7646822929382324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4756 3.2547891139984131e-01</internalNodes>\n          <leafValues>\n            -2.8849789872765541e-02 2.3245050013065338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4757 1.6109529882669449e-02</internalNodes>\n          <leafValues>\n            2.6149509474635124e-02 -2.2507910430431366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4758 1.6630800440907478e-02</internalNodes>\n          <leafValues>\n            -5.6001648306846619e-02 1.0011140257120132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4759 1.2567469850182533e-02</internalNodes>\n          <leafValues>\n            1.1760590225458145e-01 -2.5833690539002419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4760 2.4531960487365723e-02</internalNodes>\n          <leafValues>\n            2.1979559212923050e-02 -2.4158330261707306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4761 5.1343659870326519e-03</internalNodes>\n          <leafValues>\n            -1.3964179903268814e-02 1.0398290306329727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4762 -1.1144300224259496e-03</internalNodes>\n          <leafValues>\n            -8.1608608365058899e-02 6.4991973340511322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4763 -6.8641006946563721e-02</internalNodes>\n          <leafValues>\n            3.7113350629806519e-01 -1.7774619162082672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4764 8.8211498223245144e-04</internalNodes>\n          <leafValues>\n            -8.4080681204795837e-02 6.2524639070034027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4765 1.0471940040588379e-03</internalNodes>\n          <leafValues>\n            6.9488562643527985e-02 -8.3000160753726959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4766 1.6197249293327332e-02</internalNodes>\n          <leafValues>\n            1.6007730737328529e-02 -3.4216699004173279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4767 -2.2690620273351669e-02</internalNodes>\n          <leafValues>\n            1.3959160447120667e-01 -4.2305570095777512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4768 -4.1030000895261765e-02</internalNodes>\n          <leafValues>\n            -3.4669420123100281e-01 1.7233539372682571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4769 8.5194930434226990e-02</internalNodes>\n          <leafValues>\n            -8.8493460789322853e-03 6.0639351606369019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4770 3.9775099605321884e-02</internalNodes>\n          <leafValues>\n            6.5457229502499104e-03 -9.3794268369674683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4771 -1.8673250451683998e-02</internalNodes>\n          <leafValues>\n            8.4701649844646454e-02 -2.1742990240454674e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4772 -1.1632209643721581e-02</internalNodes>\n          <leafValues>\n            -1.6503639519214630e-01 3.2852791249752045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4773 -2.1068679634481668e-03</internalNodes>\n          <leafValues>\n            2.5774169713258743e-02 -1.0540559887886047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4774 -1.0474229929968715e-03</internalNodes>\n          <leafValues>\n            5.3470570594072342e-02 -1.0844449698925018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4775 6.6169992089271545e-02</internalNodes>\n          <leafValues>\n            2.6304489001631737e-03 -4.3908849358558655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4776 -1.2816500384360552e-03</internalNodes>\n          <leafValues>\n            -8.8744208216667175e-02 6.7286081612110138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4777 -1.2601809576153755e-02</internalNodes>\n          <leafValues>\n            2.3047180473804474e-01 -1.4204639941453934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4778 3.1882619950920343e-03</internalNodes>\n          <leafValues>\n            -6.0790609568357468e-02 9.3256607651710510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4779 -4.4821877963840961e-03</internalNodes>\n          <leafValues>\n            -7.4911139905452728e-02 3.5563640296459198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4780 1.3803370529785752e-03</internalNodes>\n          <leafValues>\n            -6.5355330705642700e-02 8.9660577476024628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4781 9.3855522572994232e-03</internalNodes>\n          <leafValues>\n            2.2601179778575897e-02 -1.6038919985294342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4782 -3.3057469408959150e-03</internalNodes>\n          <leafValues>\n            -9.3390651047229767e-02 5.6599788367748260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4783 -1.4823249541223049e-02</internalNodes>\n          <leafValues>\n            6.3946582376956940e-02 -3.7617258727550507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4784 -2.4304309859871864e-02</internalNodes>\n          <leafValues>\n            1.1825300008058548e-01 -5.3607080131769180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4785 -2.6398031041026115e-03</internalNodes>\n          <leafValues>\n            -7.8462429344654083e-02 4.7125939279794693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4786 -6.6844499669969082e-03</internalNodes>\n          <leafValues>\n            -1.4298090338706970e-01 5.4876580834388733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4787 -1.8713249592110515e-03</internalNodes>\n          <leafValues>\n            6.5964557230472565e-02 -5.9726029634475708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4788 -5.0526339560747147e-02</internalNodes>\n          <leafValues>\n            5.2933692932128906e-01 -1.0625099763274193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4789 -7.1036286652088165e-02</internalNodes>\n          <leafValues>\n            -3.3027708530426025e-01 5.6759058497846127e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4790 -5.4212540388107300e-02</internalNodes>\n          <leafValues>\n            3.7536340951919556e-01 -1.6479549929499626e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4791 1.4903850387781858e-04</internalNodes>\n          <leafValues>\n            -5.2896250039339066e-02 1.0646480321884155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4792 1.0254220105707645e-03</internalNodes>\n          <leafValues>\n            -5.1714900881052017e-02 1.0771189630031586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4793 7.6022921130061150e-03</internalNodes>\n          <leafValues>\n            2.4376839399337769e-02 -1.2493179738521576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4794 6.8572920281440020e-04</internalNodes>\n          <leafValues>\n            7.1341581642627716e-02 -7.6490812003612518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4795 -1.3697240501642227e-03</internalNodes>\n          <leafValues>\n            -1.5173940360546112e-01 3.9827719330787659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4796 -2.4336120113730431e-03</internalNodes>\n          <leafValues>\n            6.5315209329128265e-02 -7.9230897128582001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4797 -1.4390869997441769e-02</internalNodes>\n          <leafValues>\n            -2.3706260323524475e-01 1.6740530729293823e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4798 7.8907981514930725e-02</internalNodes>\n          <leafValues>\n            -4.2810469865798950e-02 1.4248989522457123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4799 1.0681129992008209e-01</internalNodes>\n          <leafValues>\n            3.4115819726139307e-03 -7.7656471729278564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4800 5.1377359777688980e-02</internalNodes>\n          <leafValues>\n            1.0703410021960735e-02 -5.3400570154190063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4801 -8.6883217096328735e-02</internalNodes>\n          <leafValues>\n            1. -3.0740019865334034e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4802 -2.4080339353531599e-03</internalNodes>\n          <leafValues>\n            -1.0685530304908752e-01 4.9721568822860718e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4803 -1.5590289607644081e-02</internalNodes>\n          <leafValues>\n            1.0636159777641296e-01 -2.4414319545030594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4804 2.3770150728523731e-03</internalNodes>\n          <leafValues>\n            3.9840381592512131e-02 -1.4689840376377106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4805 -9.0648621320724487e-02</internalNodes>\n          <leafValues>\n            1.8861660361289978e-01 -1.2951680459082127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4806 4.4955732300877571e-03</internalNodes>\n          <leafValues>\n            -2.6563400402665138e-02 2.3943750560283661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4807 -6.4725756645202637e-02</internalNodes>\n          <leafValues>\n            -5.4622077941894531e-01 9.2595359310507774e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4808 2.1703580394387245e-02</internalNodes>\n          <leafValues>\n            -8.8741881772875786e-03 6.4019817113876343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4809 6.1110239475965500e-02</internalNodes>\n          <leafValues>\n            9.5075201243162155e-03 -4.3702909350395203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4810 2.0086880773305893e-02</internalNodes>\n          <leafValues>\n            2.2985199466347694e-02 -2.2840890288352966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4811 4.1216641664505005e-02</internalNodes>\n          <leafValues>\n            -1.4420590363442898e-02 1.3452969491481781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4812 -2.3712279275059700e-02</internalNodes>\n          <leafValues>\n            -2.9533639550209045e-01 1.8435720354318619e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4813 -6.8324371241033077e-03</internalNodes>\n          <leafValues>\n            1.2094250321388245e-01 -4.3016240000724792e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4814 1.0880210250616074e-01</internalNodes>\n          <leafValues>\n            -1.0228149592876434e-02 5.2824842929840088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4815 9.8231732845306396e-03</internalNodes>\n          <leafValues>\n            4.1886411607265472e-02 -1.3665479421615601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4816 -1.5005770139396191e-02</internalNodes>\n          <leafValues>\n            1.8148930370807648e-01 -3.0691139400005341e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4817 -4.4110611081123352e-01</internalNodes>\n          <leafValues>\n            -1. 1.4937899541109800e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4818 -3.4122800827026367e-01</internalNodes>\n          <leafValues>\n            -4.9184858798980713e-01 1.0096929967403412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4819 9.3225948512554169e-03</internalNodes>\n          <leafValues>\n            -2.2894829511642456e-02 7.0796586573123932e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4820 7.3594371788203716e-03</internalNodes>\n          <leafValues>\n            1.3842869549989700e-02 -3.6142700910568237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4821 -8.4109082818031311e-02</internalNodes>\n          <leafValues>\n            -6.2284982204437256e-01 7.3129259981215000e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4822 1.0704870335757732e-02</internalNodes>\n          <leafValues>\n            -4.2617131024599075e-02 1.1360719799995422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4823 1.1478140018880367e-02</internalNodes>\n          <leafValues>\n            3.6586448550224304e-02 -9.6474952995777130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4824 1.6416399739682674e-03</internalNodes>\n          <leafValues>\n            -9.8777309060096741e-02 5.5158369243144989e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4825 -1.5731199528090656e-04</internalNodes>\n          <leafValues>\n            -6.1207920312881470e-02 5.6053601205348969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4826 4.1953278705477715e-03</internalNodes>\n          <leafValues>\n            5.0657391548156738e-02 -1.0238680243492126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4827 -1.6238249838352203e-02</internalNodes>\n          <leafValues>\n            1.1267519742250443e-01 -1.3786830008029938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4828 3.2428819686174393e-02</internalNodes>\n          <leafValues>\n            -2.5513019412755966e-02 2.3171940445899963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4829 -8.3901472389698029e-03</internalNodes>\n          <leafValues>\n            -6.2842369079589844e-02 2.3776959627866745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4830 4.9057020805776119e-03</internalNodes>\n          <leafValues>\n            5.7676758617162704e-02 -1.2715479731559753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4831 1.4458860270678997e-02</internalNodes>\n          <leafValues>\n            -5.0932768732309341e-02 6.2239319086074829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4832 1.2484519928693771e-01</internalNodes>\n          <leafValues>\n            -1.1612229980528355e-02 4.9361020326614380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4833 4.8587709665298462e-01</internalNodes>\n          <leafValues>\n            4.8130601644515991e-03 -5.5395811796188354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4834 1.6886210441589355e-01</internalNodes>\n          <leafValues>\n            7.8053288161754608e-03 -7.3394978046417236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4835 -2.1220340568106622e-04</internalNodes>\n          <leafValues>\n            3.1656648963689804e-02 -1.0314700007438660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4836 1.9249629694968462e-03</internalNodes>\n          <leafValues>\n            5.5135779082775116e-02 -1.0309369862079620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4837 -2.8178339824080467e-02</internalNodes>\n          <leafValues>\n            1.1637330055236816e-01 -3.4630060195922852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4838 -1.4069500379264355e-02</internalNodes>\n          <leafValues>\n            -1.4737719297409058e-01 4.4723790138959885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4839 -1.2483589816838503e-03</internalNodes>\n          <leafValues>\n            -1.1185120046138763e-01 6.8806178867816925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4840 5.3278112318366766e-04</internalNodes>\n          <leafValues>\n            -9.3908883631229401e-02 6.7072838544845581e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4841 1.1722769588232040e-02</internalNodes>\n          <leafValues>\n            -1.9012469798326492e-02 1.8834389746189117e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>249</maxWeakCount>\n      <stageThreshold>-1.4526200294494629e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 4842 5.8254651725292206e-02</internalNodes>\n          <leafValues>\n            -2.3232789337635040e-01 2.1454159915447235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4843 3.4433450549840927e-02</internalNodes>\n          <leafValues>\n            -2.6520681381225586e-01 1.3274359703063965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4844 1.4937009662389755e-02</internalNodes>\n          <leafValues>\n            -2.3927900195121765e-01 1.5786519646644592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4845 3.1153639778494835e-02</internalNodes>\n          <leafValues>\n            -1.5004000067710876e-01 1.6116039454936981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4846 2.6988480240106583e-03</internalNodes>\n          <leafValues>\n            -2.3409889638423920e-01 9.9983781576156616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4847 9.2046073405072093e-05</internalNodes>\n          <leafValues>\n            -2.9268169403076172e-01 4.7872740775346756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4848 5.0020251364912838e-05</internalNodes>\n          <leafValues>\n            -3.6815708875656128e-01 5.8189608156681061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4849 -1.4902159571647644e-02</internalNodes>\n          <leafValues>\n            -3.8818851113319397e-01 2.6158519089221954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4850 2.0448720082640648e-02</internalNodes>\n          <leafValues>\n            6.0846891254186630e-02 -3.0645281076431274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4851 6.2656581576447934e-05</internalNodes>\n          <leafValues>\n            -1.7161040008068085e-01 1.0800299793481827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4852 -7.0627559907734394e-03</internalNodes>\n          <leafValues>\n            -2.3428949713706970e-01 7.6327130198478699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4853 -2.9078179504722357e-03</internalNodes>\n          <leafValues>\n            -2.1010600030422211e-01 7.8605473041534424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4854 -3.6554310470819473e-02</internalNodes>\n          <leafValues>\n            1.7013889551162720e-01 -1.2837870419025421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4855 -1.3991629704833031e-02</internalNodes>\n          <leafValues>\n            -1.5198560059070587e-01 3.1168300658464432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4856 7.4681073427200317e-02</internalNodes>\n          <leafValues>\n            3.6079999059438705e-02 -4.6322378516197205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4857 -1.0407929867506027e-01</internalNodes>\n          <leafValues>\n            -3.1802299618721008e-01 2.0612560212612152e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4858 1.2444700114428997e-02</internalNodes>\n          <leafValues>\n            7.7818617224693298e-02 -1.6825589537620544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4859 3.4679330885410309e-02</internalNodes>\n          <leafValues>\n            3.2584380358457565e-02 -2.6884159445762634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4860 -2.9028469696640968e-02</internalNodes>\n          <leafValues>\n            -4.4522678852081299e-01 2.9661040753126144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4861 2.3345749650616199e-04</internalNodes>\n          <leafValues>\n            -1.3071049749851227e-01 6.1756659299135208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4862 3.6993178725242615e-01</internalNodes>\n          <leafValues>\n            1.7400909215211868e-02 -7.0418548583984375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4863 -2.1505730226635933e-02</internalNodes>\n          <leafValues>\n            -2.4095299839973450e-01 2.8891649097204208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4864 5.4181810468435287e-02</internalNodes>\n          <leafValues>\n            -8.4053620696067810e-02 1.3876989483833313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4865 -3.2677378505468369e-02</internalNodes>\n          <leafValues>\n            -2.9904881119728088e-01 2.8195250779390335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4866 1.1804300360381603e-02</internalNodes>\n          <leafValues>\n            4.9124121665954590e-02 -2.5538289546966553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4867 -9.5703108236193657e-03</internalNodes>\n          <leafValues>\n            1.1865220218896866e-01 -7.9305157065391541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4868 -8.5534068057313561e-04</internalNodes>\n          <leafValues>\n            -9.0315766632556915e-02 1.2984269857406616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4869 7.1445330977439880e-02</internalNodes>\n          <leafValues>\n            1.4396210201084614e-02 -5.3161299228668213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4870 6.1263251118361950e-03</internalNodes>\n          <leafValues>\n            -2.4559390544891357e-01 4.8353280872106552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4871 -4.8277149908244610e-03</internalNodes>\n          <leafValues>\n            -2.3828850686550140e-01 7.5664043426513672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4872 -2.6015359908342361e-03</internalNodes>\n          <leafValues>\n            4.5826680958271027e-02 -2.4928370118141174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4873 -4.7515620826743543e-04</internalNodes>\n          <leafValues>\n            3.8604840636253357e-02 -1.3118830323219299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4874 -5.4591469466686249e-02</internalNodes>\n          <leafValues>\n            5.5260437726974487e-01 -1.9622489809989929e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4875 5.3931411355733871e-02</internalNodes>\n          <leafValues>\n            -4.8285599797964096e-02 2.2110609710216522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4876 -9.1672148555517197e-03</internalNodes>\n          <leafValues>\n            -2.5744551420211792e-01 4.0833171457052231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4877 -2.9818129260092974e-03</internalNodes>\n          <leafValues>\n            -7.5891457498073578e-02 6.0899209231138229e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4878 7.4697382748126984e-02</internalNodes>\n          <leafValues>\n            3.6657888442277908e-02 -2.6946181058883667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4879 -2.7006270363926888e-02</internalNodes>\n          <leafValues>\n            1.8391659855842590e-01 -5.5832479149103165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4880 -6.0810879804193974e-03</internalNodes>\n          <leafValues>\n            -3.2777228951454163e-01 3.5269659012556076e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4881 3.8182068616151810e-02</internalNodes>\n          <leafValues>\n            -5.6075371801853180e-02 2.1839509904384613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4882 9.5723047852516174e-03</internalNodes>\n          <leafValues>\n            8.4293976426124573e-02 -1.1767770349979401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4883 7.8028216958045959e-02</internalNodes>\n          <leafValues>\n            5.6959469802677631e-03 -8.1442731618881226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4884 -3.2862029969692230e-02</internalNodes>\n          <leafValues>\n            -4.7212830185890198e-01 1.9418969750404358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4885 4.2359679937362671e-02</internalNodes>\n          <leafValues>\n            -1.7929280176758766e-02 3.1368249654769897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4886 -2.1030420437455177e-02</internalNodes>\n          <leafValues>\n            1.4199249446392059e-01 -6.7171506583690643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4887 -4.6487968415021896e-02</internalNodes>\n          <leafValues>\n            -3.0455109477043152e-01 3.1824499368667603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4888 -8.5280627012252808e-02</internalNodes>\n          <leafValues>\n            2.4725529551506042e-01 -4.0726520121097565e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4889 4.7598700039088726e-03</internalNodes>\n          <leafValues>\n            -6.4076490700244904e-02 1.0103560239076614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4890 6.0733199119567871e-02</internalNodes>\n          <leafValues>\n            -8.8772647082805634e-02 1.1654719710350037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4891 5.4770488291978836e-02</internalNodes>\n          <leafValues>\n            2.2390449419617653e-02 -4.9855118989944458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4892 -3.7478970625670627e-05</internalNodes>\n          <leafValues>\n            6.2433928251266479e-02 -1.6515359282493591e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4893 -2.3898750543594360e-02</internalNodes>\n          <leafValues>\n            -1.9021050631999969e-01 1.4979549683630466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4894 -1.8465859815478325e-02</internalNodes>\n          <leafValues>\n            2.3008669912815094e-01 -4.5363288372755051e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4895 -3.8619639817625284e-03</internalNodes>\n          <leafValues>\n            -1.1168369650840759e-01 7.9550966620445251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4896 6.0682989656925201e-02</internalNodes>\n          <leafValues>\n            2.5401040911674500e-02 -4.1787821054458618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4897 -6.1235381290316582e-03</internalNodes>\n          <leafValues>\n            -2.4201570451259613e-01 1.9984690472483635e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4898 -2.7558460831642151e-02</internalNodes>\n          <leafValues>\n            -4.5678210258483887e-01 2.0328069105744362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4899 2.4938629940152168e-02</internalNodes>\n          <leafValues>\n            -3.8399018347263336e-02 1.3205289840698242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4900 -4.7081429511308670e-02</internalNodes>\n          <leafValues>\n            3.1839731335639954e-01 -3.2127480953931808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4901 6.2321990728378296e-02</internalNodes>\n          <leafValues>\n            1.7846960574388504e-02 -5.0114768743515015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4902 -5.5789871839806437e-04</internalNodes>\n          <leafValues>\n            1.0673029720783234e-01 -9.0454310178756714e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4903 -2.0528730005025864e-02</internalNodes>\n          <leafValues>\n            2.2777000069618225e-01 -4.6683758497238159e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4904 1.4043749542906880e-03</internalNodes>\n          <leafValues>\n            -2.0688509941101074e-01 6.7320853471755981e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4905 3.1474549323320389e-02</internalNodes>\n          <leafValues>\n            2.5873050093650818e-02 -3.1385809183120728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4906 -3.1364340335130692e-02</internalNodes>\n          <leafValues>\n            -3.5079669952392578e-01 2.4890480563044548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4907 -1.0076019912958145e-01</internalNodes>\n          <leafValues>\n            -2.2738389670848846e-01 1.0731879621744156e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4908 1.4409960247576237e-02</internalNodes>\n          <leafValues>\n            2.4001860618591309e-01 -3.8389049470424652e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4909 5.6410171091556549e-02</internalNodes>\n          <leafValues>\n            -4.0667269378900528e-02 1.9880810379981995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4910 -1.4310100115835667e-02</internalNodes>\n          <leafValues>\n            -2.2484239935874939e-01 5.1415968686342239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4911 3.8093481212854385e-02</internalNodes>\n          <leafValues>\n            1.0602000169456005e-02 -6.5031349658966064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4912 7.3483381420373917e-03</internalNodes>\n          <leafValues>\n            3.7624299526214600e-02 -2.3660179972648621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4913 1.5990389883518219e-01</internalNodes>\n          <leafValues>\n            -3.1958691775798798e-02 7.8257188200950623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4914 7.5298376381397247e-02</internalNodes>\n          <leafValues>\n            -2.2225739434361458e-02 4.7734829783439636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4915 1.0515630245208740e-02</internalNodes>\n          <leafValues>\n            2.4979539215564728e-02 -4.3517309427261353e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4916 1.1720249801874161e-01</internalNodes>\n          <leafValues>\n            -3.7235978990793228e-02 2.6529499888420105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4917 1.5799700122443028e-05</internalNodes>\n          <leafValues>\n            -1.0837449878454208e-01 7.2809703648090363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4918 1.2115119956433773e-02</internalNodes>\n          <leafValues>\n            6.5032199025154114e-02 -1.4378160238265991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4919 -1.7766270786523819e-02</internalNodes>\n          <leafValues>\n            1.0095430165529251e-01 -2.4499140679836273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4920 4.2227920144796371e-02</internalNodes>\n          <leafValues>\n            -3.6625079810619354e-02 2.8341490030288696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4921 2.4346679449081421e-02</internalNodes>\n          <leafValues>\n            2.4560010060667992e-02 -1.9787840545177460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4922 3.1748838722705841e-02</internalNodes>\n          <leafValues>\n            2.9603859409689903e-02 -3.0412709712982178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4923 -5.2616238594055176e-02</internalNodes>\n          <leafValues>\n            1.7751359939575195e-01 -3.1825721263885498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4924 -5.4358910769224167e-02</internalNodes>\n          <leafValues>\n            2.2886650264263153e-01 -4.0221411734819412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4925 1.1845750268548727e-03</internalNodes>\n          <leafValues>\n            6.1528120189905167e-02 -1.2204740196466446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4926 -3.6325298249721527e-02</internalNodes>\n          <leafValues>\n            -2.9528170824050903e-01 3.3452831208705902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4927 1.5100809931755066e-01</internalNodes>\n          <leafValues>\n            -2.5661900639533997e-02 3.8788089156150818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4928 2.8278939425945282e-02</internalNodes>\n          <leafValues>\n            -3.5951491445302963e-02 2.5251358747482300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4929 -8.3803251385688782e-02</internalNodes>\n          <leafValues>\n            -7.2599482536315918e-01 4.1993269696831703e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4930 -2.9865629039704800e-04</internalNodes>\n          <leafValues>\n            5.5302988737821579e-02 -1.6678869724273682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4931 -1.6872739419341087e-02</internalNodes>\n          <leafValues>\n            -1.9040539860725403e-01 5.2307758480310440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4932 -5.9451311826705933e-02</internalNodes>\n          <leafValues>\n            -4.7634351253509521e-01 2.0981209352612495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4933 -1.8378829583525658e-02</internalNodes>\n          <leafValues>\n            6.6858462989330292e-02 -6.0389090329408646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4934 4.8198848962783813e-02</internalNodes>\n          <leafValues>\n            4.2580351233482361e-02 -2.6010730862617493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4935 -4.3217130005359650e-02</internalNodes>\n          <leafValues>\n            -2.5067010521888733e-01 1.7225300893187523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4936 -6.3647949136793613e-03</internalNodes>\n          <leafValues>\n            -1.6788710653781891e-01 6.8857319653034210e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4937 2.4770569801330566e-01</internalNodes>\n          <leafValues>\n            -3.3154450356960297e-02 1.4794079959392548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4938 -1.1216869950294495e-01</internalNodes>\n          <leafValues>\n            5.1129728555679321e-01 -1.7360100522637367e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4939 3.6601010710000992e-02</internalNodes>\n          <leafValues>\n            -4.3869979679584503e-02 1.9755239784717560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4940 -7.2332553565502167e-02</internalNodes>\n          <leafValues>\n            -8.2932412624359131e-01 1.1810120195150375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4941 7.7837951481342316e-02</internalNodes>\n          <leafValues>\n            2.4520579725503922e-02 -2.7260521054267883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4942 7.2094596922397614e-02</internalNodes>\n          <leafValues>\n            3.7606250494718552e-02 -2.7291780710220337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4943 -8.7373353540897369e-02</internalNodes>\n          <leafValues>\n            -9.5344787836074829e-01 3.2734218984842300e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4944 -3.6240059882402420e-02</internalNodes>\n          <leafValues>\n            -3.2300001382827759e-01 2.6389310136437416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4945 -8.7862694635987282e-03</internalNodes>\n          <leafValues>\n            -1.4808210730552673e-01 4.6761561185121536e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4946 6.5432381816208363e-03</internalNodes>\n          <leafValues>\n            6.0071479529142380e-02 -1.5036399662494659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4947 2.7910009957849979e-03</internalNodes>\n          <leafValues>\n            -7.9585656523704529e-02 6.4064942300319672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4948 2.9471930116415024e-02</internalNodes>\n          <leafValues>\n            3.6904528737068176e-02 -2.7659609913825989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4949 -4.4924151152372360e-02</internalNodes>\n          <leafValues>\n            3.5313630104064941e-01 -2.7219140902161598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4950 7.8969523310661316e-02</internalNodes>\n          <leafValues>\n            1.0873800143599510e-02 -9.3217527866363525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4951 -3.1053030863404274e-02</internalNodes>\n          <leafValues>\n            2.4087889492511749e-01 -2.7155969291925430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4952 5.0429090857505798e-02</internalNodes>\n          <leafValues>\n            -5.4164800792932510e-02 2.0343920588493347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4953 -3.7637658417224884e-02</internalNodes>\n          <leafValues>\n            3.2998979091644287e-01 -3.4573089331388474e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4954 -1.7269999952986836e-03</internalNodes>\n          <leafValues>\n            -1.2339779734611511e-01 7.5958393514156342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4955 1.2604339979588985e-02</internalNodes>\n          <leafValues>\n            3.6150000989437103e-02 -2.1591770648956299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4956 1.1010640300810337e-02</internalNodes>\n          <leafValues>\n            -1.4330290257930756e-01 6.3043266534805298e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4957 1.3539699837565422e-02</internalNodes>\n          <leafValues>\n            -7.8418523073196411e-02 1.8389409780502319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4958 -3.8949768990278244e-02</internalNodes>\n          <leafValues>\n            3.4183630347251892e-01 -2.9505429789423943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4959 -4.9093078821897507e-02</internalNodes>\n          <leafValues>\n            -3.6278200149536133e-01 1.7093619331717491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4960 4.2306110262870789e-03</internalNodes>\n          <leafValues>\n            5.8190550655126572e-02 -1.8383790552616119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4961 8.9376904070377350e-03</internalNodes>\n          <leafValues>\n            -5.1576498895883560e-02 1.9376990199089050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4962 4.0846280753612518e-02</internalNodes>\n          <leafValues>\n            1.3241729699075222e-02 -7.0892220735549927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4963 -3.6945961415767670e-02</internalNodes>\n          <leafValues>\n            -3.4456318616867065e-01 7.1702878922224045e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4964 -1.2924180366098881e-02</internalNodes>\n          <leafValues>\n            -1.9354179501533508e-01 4.8157788813114166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4965 3.3079650253057480e-02</internalNodes>\n          <leafValues>\n            -5.1704820245504379e-02 1.3492329418659210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4966 2.2233519703149796e-02</internalNodes>\n          <leafValues>\n            5.2919991314411163e-02 -1.7628639936447144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4967 -1.4483500272035599e-02</internalNodes>\n          <leafValues>\n            1.5105240046977997e-01 -3.9817798882722855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4968 1.5934909880161285e-01</internalNodes>\n          <leafValues>\n            -3.3422928303480148e-02 2.8085818886756897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4969 1.2470430135726929e-01</internalNodes>\n          <leafValues>\n            1.1225829832255840e-02 -4.5520108938217163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4970 7.0243299007415771e-02</internalNodes>\n          <leafValues>\n            2.6213169097900391e-02 -3.4778589010238647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4971 6.1747688055038452e-01</internalNodes>\n          <leafValues>\n            9.0320473536849022e-03 -5.5216097831726074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4972 7.7007927000522614e-02</internalNodes>\n          <leafValues>\n            9.3850009143352509e-03 -6.9495117664337158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4973 4.2874120175838470e-02</internalNodes>\n          <leafValues>\n            -3.3166319131851196e-02 1.3550239801406860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4974 -2.4558259174227715e-02</internalNodes>\n          <leafValues>\n            3.8989260792732239e-01 -2.0506320521235466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4975 1.0723150335252285e-02</internalNodes>\n          <leafValues>\n            -5.1526758819818497e-02 8.9461207389831543e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4976 3.8331970572471619e-02</internalNodes>\n          <leafValues>\n            -3.9952859282493591e-02 1.8591549992561340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4977 1.2556019425392151e-01</internalNodes>\n          <leafValues>\n            5.1561538130044937e-03 -8.4782391786575317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4978 1.1590070277452469e-01</internalNodes>\n          <leafValues>\n            9.7828712314367294e-03 -7.6437431573867798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4979 -1.5016060322523117e-02</internalNodes>\n          <leafValues>\n            -1.8328569829463959e-01 3.2125338912010193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4980 -4.1521931998431683e-03</internalNodes>\n          <leafValues>\n            9.8160982131958008e-02 -8.2769006490707397e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4981 1.4998050173744559e-03</internalNodes>\n          <leafValues>\n            4.1228689253330231e-02 -8.4460526704788208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4982 3.8117531687021255e-02</internalNodes>\n          <leafValues>\n            1.9691960886120796e-02 -3.9931151270866394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4983 9.4391452148556709e-04</internalNodes>\n          <leafValues>\n            -1.9674700498580933e-01 5.6476209312677383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4984 2.4907960323616862e-04</internalNodes>\n          <leafValues>\n            9.2797473073005676e-02 -1.0708689689636230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4985 2.5447670370340347e-02</internalNodes>\n          <leafValues>\n            -2.5304390117526054e-02 1.0032439976930618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4986 -2.8884090483188629e-02</internalNodes>\n          <leafValues>\n            -1.7259830236434937e-01 4.9671061336994171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4987 1.2102840095758438e-01</internalNodes>\n          <leafValues>\n            -5.5194748565554619e-03 9.5438259840011597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4988 -7.9245921224355698e-03</internalNodes>\n          <leafValues>\n            6.4903482794761658e-02 -1.2671549618244171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4989 -6.5536066889762878e-02</internalNodes>\n          <leafValues>\n            -3.7892189621925354e-01 1.6463089734315872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4990 -1.6883460804820061e-02</internalNodes>\n          <leafValues>\n            5.8534818887710571e-01 -1.4671769924461842e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4991 6.7252418957650661e-03</internalNodes>\n          <leafValues>\n            2.7604229748249054e-02 -3.4817421436309814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4992 -6.3783898949623108e-02</internalNodes>\n          <leafValues>\n            -3.9567160606384277e-01 1.9867889583110809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4993 1.8600550293922424e-01</internalNodes>\n          <leafValues>\n            -4.5898579061031342e-02 7.3586076498031616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4994 4.9724031239748001e-02</internalNodes>\n          <leafValues>\n            -2.0517630502581596e-02 4.3107840418815613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4995 1.5011380426585674e-02</internalNodes>\n          <leafValues>\n            4.0192149579524994e-02 -1.0242489725351334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4996 -1.5085030347108841e-02</internalNodes>\n          <leafValues>\n            2.3888920247554779e-01 -3.5642918199300766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4997 -1.2931490316987038e-02</internalNodes>\n          <leafValues>\n            -3.6863088607788086e-01 1.7377890646457672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4998 -1.3186899945139885e-02</internalNodes>\n          <leafValues>\n            -4.3170270323753357e-01 1.7947910353541374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4999 -6.6814959049224854e-02</internalNodes>\n          <leafValues>\n            4.1336119174957275e-01 -2.0904310047626495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5000 4.4064331799745560e-02</internalNodes>\n          <leafValues>\n            -3.8615190982818604e-01 2.1414510905742645e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5001 4.1341730952262878e-01</internalNodes>\n          <leafValues>\n            1.0130990296602249e-02 -4.7053098678588867e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5002 2.4443659931421280e-02</internalNodes>\n          <leafValues>\n            9.3184120953083038e-02 -8.6774162948131561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5003 1.5779680013656616e-01</internalNodes>\n          <leafValues>\n            4.8137311823666096e-03 -5.8746212720870972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5004 -2.0141510292887688e-02</internalNodes>\n          <leafValues>\n            2.2643919289112091e-01 -4.6824630349874496e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5005 3.8796770386397839e-03</internalNodes>\n          <leafValues>\n            -7.7155217528343201e-02 3.6106169223785400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5006 1.5064960345625877e-02</internalNodes>\n          <leafValues>\n            -5.6656859815120697e-02 1.4758649468421936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5007 1.2925310060381889e-02</internalNodes>\n          <leafValues>\n            3.5308018326759338e-02 -1.1645320057868958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5008 -1.4788310043513775e-02</internalNodes>\n          <leafValues>\n            -1.1459939926862717e-01 7.5000070035457611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5009 -2.0497168879956007e-03</internalNodes>\n          <leafValues>\n            4.2067401111125946e-02 -7.0409573614597321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5010 8.9428946375846863e-03</internalNodes>\n          <leafValues>\n            5.3989838808774948e-02 -1.5380840003490448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5011 1.0064999759197235e-01</internalNodes>\n          <leafValues>\n            -2.9709249734878540e-02 3.1293758749961853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5012 -4.6580079942941666e-02</internalNodes>\n          <leafValues>\n            -7.2227877378463745e-01 1.3004340231418610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5013 -3.8618590682744980e-02</internalNodes>\n          <leafValues>\n            3.3867758512496948e-01 -2.1726610139012337e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5014 8.5657741874456406e-03</internalNodes>\n          <leafValues>\n            7.0621289312839508e-02 -1.3055880367755890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5015 -1.0986299812793732e-01</internalNodes>\n          <leafValues>\n            3.7974509596824646e-01 -5.1755867898464203e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5016 3.0184251070022583e-01</internalNodes>\n          <leafValues>\n            -2.4274839088320732e-02 3.6632651090621948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5017 -5.3246088325977325e-02</internalNodes>\n          <leafValues>\n            -5.5290502309799194e-01 6.2071220017969608e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5018 3.6629870533943176e-02</internalNodes>\n          <leafValues>\n            2.3161249235272408e-02 -3.5514861345291138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5019 6.9993197917938232e-02</internalNodes>\n          <leafValues>\n            8.9623704552650452e-03 -8.2245421409606934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5020 -8.7623577564954758e-03</internalNodes>\n          <leafValues>\n            -2.8028720617294312e-01 2.6217460632324219e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5021 1.5275989659130573e-02</internalNodes>\n          <leafValues>\n            -5.0123069435358047e-02 1.5774080157279968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5022 1.8836189806461334e-01</internalNodes>\n          <leafValues>\n            1.1483459733426571e-02 -7.4004447460174561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5023 -1.4518629759550095e-02</internalNodes>\n          <leafValues>\n            8.2921922206878662e-02 -5.2536141127347946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5024 1.9221989437937737e-02</internalNodes>\n          <leafValues>\n            4.0790341794490814e-02 -2.0889760553836823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5025 -3.1274989247322083e-02</internalNodes>\n          <leafValues>\n            8.0864340066909790e-01 -1.0754980146884918e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5026 -4.9813431687653065e-03</internalNodes>\n          <leafValues>\n            -1.9617860019207001e-01 4.1330069303512573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5027 3.7296909838914871e-02</internalNodes>\n          <leafValues>\n            3.0313879251480103e-02 -2.7336311340332031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5028 -1.9014550372958183e-02</internalNodes>\n          <leafValues>\n            1.3439440727233887e-01 -6.0782499611377716e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5029 -7.9229613766074181e-03</internalNodes>\n          <leafValues>\n            -7.9689770936965942e-02 4.0497440844774246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5030 9.6371799707412720e-02</internalNodes>\n          <leafValues>\n            -2.5576870888471603e-02 3.2440510392189026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5031 -1.7210310325026512e-02</internalNodes>\n          <leafValues>\n            2.9772299528121948e-01 -3.0994139611721039e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5032 1.0736179538071156e-02</internalNodes>\n          <leafValues>\n            -7.0299342274665833e-02 1.2448900192975998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5033 -4.0398869663476944e-02</internalNodes>\n          <leafValues>\n            -6.4470887184143066e-01 6.9025149568915367e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5034 -3.1870428472757339e-02</internalNodes>\n          <leafValues>\n            -5.3339338302612305e-01 1.5221790410578251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5035 3.6518078297376633e-02</internalNodes>\n          <leafValues>\n            -7.7875651419162750e-02 1.4458900690078735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5036 1.2330260127782822e-01</internalNodes>\n          <leafValues>\n            1.7689300701022148e-02 -5.1895797252655029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5037 1.0086199641227722e-01</internalNodes>\n          <leafValues>\n            6.6002830862998962e-03 -5.5289500951766968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5038 1.0026770085096359e-01</internalNodes>\n          <leafValues>\n            1.0175090283155441e-02 -7.1554392576217651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5039 3.6956761032342911e-02</internalNodes>\n          <leafValues>\n            2.2131860256195068e-02 -3.1452280282974243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5040 8.5017476230859756e-03</internalNodes>\n          <leafValues>\n            4.9146678298711777e-02 -1.5193499624729156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5041 5.3833048790693283e-02</internalNodes>\n          <leafValues>\n            2.5698679964989424e-03 -5.0750207901000977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5042 4.8958938568830490e-02</internalNodes>\n          <leafValues>\n            9.2353876680135727e-03 -7.9371142387390137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5043 4.0810879319906235e-02</internalNodes>\n          <leafValues>\n            -4.6270430088043213e-02 1.9726410508155823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5044 -3.3165120985358953e-03</internalNodes>\n          <leafValues>\n            -2.1495009958744049e-01 3.8868401199579239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5045 4.8434760537929833e-04</internalNodes>\n          <leafValues>\n            -1.7870649695396423e-01 5.7129681110382080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5046 7.9494096338748932e-02</internalNodes>\n          <leafValues>\n            -2.2463550791144371e-02 3.6770978569984436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5047 -8.8844364508986473e-03</internalNodes>\n          <leafValues>\n            -3.3796560764312744e-01 2.5869650766253471e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5048 -1.0575620457530022e-02</internalNodes>\n          <leafValues>\n            1.2438619881868362e-01 -6.8147383630275726e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5049 7.3358109220862389e-03</internalNodes>\n          <leafValues>\n            -4.3375171720981598e-02 1.5483480691909790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5050 4.2306821793317795e-02</internalNodes>\n          <leafValues>\n            1.0016439855098724e-01 -8.8011689484119415e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5051 7.1759216487407684e-02</internalNodes>\n          <leafValues>\n            -8.9269876480102539e-03 2.3254199326038361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5052 -2.2478280588984489e-02</internalNodes>\n          <leafValues>\n            -5.4057407379150391e-01 1.4396119862794876e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5053 -2.5606580078601837e-02</internalNodes>\n          <leafValues>\n            -4.3508179485797882e-02 6.4285047352313995e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5054 2.5733409449458122e-02</internalNodes>\n          <leafValues>\n            2.3084849119186401e-02 -3.4278741478919983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5055 -7.0163339376449585e-02</internalNodes>\n          <leafValues>\n            4.0744331479072571e-01 -1.1836090125143528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5056 -1.2527329847216606e-02</internalNodes>\n          <leafValues>\n            9.1184526681900024e-02 -8.7035633623600006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5057 5.9983458369970322e-02</internalNodes>\n          <leafValues>\n            3.6528799682855606e-03 -8.0261522531509399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5058 -5.2271911408752203e-04</internalNodes>\n          <leafValues>\n            6.9573827087879181e-02 -1.2091639637947083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5059 -2.0996539294719696e-01</internalNodes>\n          <leafValues>\n            -4.6747279167175293e-01 9.4682360067963600e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5060 -1.8358640372753143e-02</internalNodes>\n          <leafValues>\n            1.4919880032539368e-01 -5.7198900729417801e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5061 -1.3342049904167652e-02</internalNodes>\n          <leafValues>\n            1.4447879791259766e-01 -2.2494640201330185e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5062 -3.0613059177994728e-02</internalNodes>\n          <leafValues>\n            -3.3590090274810791e-01 2.4433709681034088e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5063 -1.9018750637769699e-02</internalNodes>\n          <leafValues>\n            1.5518119931221008e-01 -2.5613630190491676e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5064 -4.5201808214187622e-02</internalNodes>\n          <leafValues>\n            4.8730811476707458e-01 -1.7641659826040268e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5065 6.3432596623897552e-02</internalNodes>\n          <leafValues>\n            -5.1946818828582764e-02 1.2361440062522888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5066 3.4017860889434814e-03</internalNodes>\n          <leafValues>\n            -1.7030030488967896e-01 5.4143410176038742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5067 -8.5307076573371887e-02</internalNodes>\n          <leafValues>\n            -7.1878427267074585e-01 1.0392259806394577e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5068 -5.3066499531269073e-02</internalNodes>\n          <leafValues>\n            5.2359157800674438e-01 -1.8369760364294052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5069 -2.8319370001554489e-02</internalNodes>\n          <leafValues>\n            -1.1979889869689941e-01 5.8951549232006073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5070 -8.7353803217411041e-02</internalNodes>\n          <leafValues>\n            2.7089080214500427e-01 -2.9345329850912094e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5071 2.7152231335639954e-01</internalNodes>\n          <leafValues>\n            -1.1648589745163918e-02 5.5842977762222290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5072 1.9388480111956596e-02</internalNodes>\n          <leafValues>\n            5.0895590335130692e-02 -1.7962279915809631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5073 2.1159179508686066e-02</internalNodes>\n          <leafValues>\n            -4.8424899578094482e-02 9.5020256936550140e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5074 1.2039250135421753e-01</internalNodes>\n          <leafValues>\n            9.2587787657976151e-03 -8.7804621458053589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5075 5.0090719014406204e-02</internalNodes>\n          <leafValues>\n            -2.1926950663328171e-02 2.0202030241489410e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5076 -5.5227670818567276e-03</internalNodes>\n          <leafValues>\n            2.1560280025005341e-01 -3.6554779857397079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5077 2.7551440522074699e-02</internalNodes>\n          <leafValues>\n            -3.2782018184661865e-02 1.6503919661045074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5078 -2.5543190538883209e-02</internalNodes>\n          <leafValues>\n            -3.6424461007118225e-01 2.1275209262967110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5079 -2.6791828870773315e-01</internalNodes>\n          <leafValues>\n            4.8525270819664001e-01 -4.7535290941596031e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5080 -1.6798110306262970e-01</internalNodes>\n          <leafValues>\n            3.9280641078948975e-01 -1.9414989277720451e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5081 4.5900348573923111e-02</internalNodes>\n          <leafValues>\n            -3.6706160753965378e-02 2.0677609741687775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5082 3.6797890788875520e-04</internalNodes>\n          <leafValues>\n            -8.7039902806282043e-02 9.2830970883369446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5083 -9.9194556474685669e-02</internalNodes>\n          <leafValues>\n            -3.6096671223640442e-01 2.1962769329547882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5084 8.0924080975819379e-05</internalNodes>\n          <leafValues>\n            -7.9007692635059357e-02 9.5904067158699036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5085 7.0894961245357990e-03</internalNodes>\n          <leafValues>\n            3.7076078355312347e-02 -5.0917111337184906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5086 -1.2181960046291351e-03</internalNodes>\n          <leafValues>\n            4.9094028770923615e-02 -1.5975970029830933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5087 -9.2138662934303284e-02</internalNodes>\n          <leafValues>\n            5.5284732580184937e-01 -1.3595860451459885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5088 6.2209279276430607e-03</internalNodes>\n          <leafValues>\n            4.6889189630746841e-02 -1.8105800449848175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5089 6.5014839172363281e-02</internalNodes>\n          <leafValues>\n            9.4407051801681519e-03 -5.1224017143249512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5090 5.4055921733379364e-02</internalNodes>\n          <leafValues>\n            1.6289059072732925e-02 -4.2684501409530640e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>368</maxWeakCount>\n      <stageThreshold>-1.3073990345001221e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 5091 3.7594079971313477e-02</internalNodes>\n          <leafValues>\n            -1.5953080356121063e-01 2.4245350062847137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5092 4.0349629707634449e-03</internalNodes>\n          <leafValues>\n            -2.5617128610610962e-01 8.0420561134815216e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5093 2.1681638900190592e-03</internalNodes>\n          <leafValues>\n            -2.8089070320129395e-01 7.0903629064559937e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5094 -7.4014628808072302e-06</internalNodes>\n          <leafValues>\n            4.9326181411743164e-02 -1.9688490033149719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5095 -2.2384349722415209e-03</internalNodes>\n          <leafValues>\n            6.8618856370449066e-02 -2.1775339543819427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5096 2.9939650557935238e-03</internalNodes>\n          <leafValues>\n            -2.4257700145244598e-01 2.9716130346059799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5097 4.5135850086808205e-03</internalNodes>\n          <leafValues>\n            8.9443869888782501e-02 -1.9461549818515778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5098 3.8457550108432770e-03</internalNodes>\n          <leafValues>\n            5.0935801118612289e-02 -2.7721929550170898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5099 4.0572669240646064e-04</internalNodes>\n          <leafValues>\n            -8.5517741739749908e-02 1.6446280479431152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5100 -7.0624578256683890e-06</internalNodes>\n          <leafValues>\n            7.8454487025737762e-02 -1.2395980209112167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5101 -2.8428720543161035e-04</internalNodes>\n          <leafValues>\n            1.0774250328540802e-01 -1.2222009897232056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5102 7.3404680006206036e-03</internalNodes>\n          <leafValues>\n            4.7837160527706146e-02 -2.4441170692443848e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5103 3.6235509905964136e-03</internalNodes>\n          <leafValues>\n            -3.1533789634704590e-01 3.5066880285739899e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5104 -1.5671759610995650e-03</internalNodes>\n          <leafValues>\n            -1.7147080600261688e-01 6.5121836960315704e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5105 4.2834067717194557e-03</internalNodes>\n          <leafValues>\n            -1.3190010190010071e-01 9.2709146440029144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5106 -8.9772082865238190e-03</internalNodes>\n          <leafValues>\n            1.2469480186700821e-01 -2.8118500486016273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5107 5.5919871665537357e-03</internalNodes>\n          <leafValues>\n            4.8671621829271317e-02 -2.2460219264030457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5108 1.1782390065491199e-02</internalNodes>\n          <leafValues>\n            3.1041109934449196e-02 -2.9882109165191650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5109 -5.5568912066519260e-03</internalNodes>\n          <leafValues>\n            1.3689100742340088e-01 -7.7152192592620850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5110 1.7162049189209938e-02</internalNodes>\n          <leafValues>\n            -4.0298670530319214e-02 1.1232800036668777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5111 3.5631000064313412e-03</internalNodes>\n          <leafValues>\n            5.6056100875139236e-02 -1.9608840346336365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5112 2.2586699575185776e-02</internalNodes>\n          <leafValues>\n            1.1250300332903862e-02 -5.0490778684616089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5113 2.6307879015803337e-03</internalNodes>\n          <leafValues>\n            4.1528269648551941e-02 -2.2185860574245453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5114 -1.0008380049839616e-03</internalNodes>\n          <leafValues>\n            5.9657059609889984e-02 -1.5395790338516235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5115 -7.1316999383270741e-03</internalNodes>\n          <leafValues>\n            1.0590689629316330e-01 -8.9700952172279358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5116 -6.1685360968112946e-02</internalNodes>\n          <leafValues>\n            1.2677849829196930e-01 -2.2709969431161880e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5117 1.3120709918439388e-02</internalNodes>\n          <leafValues>\n            -6.3731230795383453e-02 1.5842080116271973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5118 3.2676599919795990e-02</internalNodes>\n          <leafValues>\n            2.5724250823259354e-02 -3.3406201004981995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5119 1.8886770308017731e-01</internalNodes>\n          <leafValues>\n            -1.7100410535931587e-02 5.3700131177902222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5120 -1.6522880468983203e-04</internalNodes>\n          <leafValues>\n            5.4908581078052521e-02 -1.1608000099658966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5121 -1.4789770357310772e-03</internalNodes>\n          <leafValues>\n            7.7602192759513855e-02 -1.0971190035343170e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5122 -1.2441210448741913e-02</internalNodes>\n          <leafValues>\n            -1.4090730249881744e-01 6.8732522428035736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5123 1.9457910209894180e-02</internalNodes>\n          <leafValues>\n            -3.7276178598403931e-02 2.6319879293441772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5124 -2.9123809654265642e-03</internalNodes>\n          <leafValues>\n            -1.8960340321063995e-01 2.9360920190811157e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5125 -2.3870699107646942e-02</internalNodes>\n          <leafValues>\n            2.5528749823570251e-01 -3.1279411166906357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5126 -2.6912079192698002e-03</internalNodes>\n          <leafValues>\n            -1.4431649446487427e-01 4.8498779535293579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5127 -1.7636029515415430e-03</internalNodes>\n          <leafValues>\n            -1.3328640162944794e-01 5.4250828921794891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5128 -1.8844179809093475e-02</internalNodes>\n          <leafValues>\n            1.1653099954128265e-01 -3.8028150796890259e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5129 3.8752850145101547e-02</internalNodes>\n          <leafValues>\n            -3.6811299622058868e-02 2.1002089977264404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5130 9.4316434115171432e-03</internalNodes>\n          <leafValues>\n            5.7964589446783066e-02 -1.8342800438404083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5131 -1.1705379933118820e-02</internalNodes>\n          <leafValues>\n            1.7905050516128540e-01 -4.9799650907516479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5132 -4.4072889722883701e-03</internalNodes>\n          <leafValues>\n            -1.9810500741004944e-01 4.4608719646930695e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5133 -4.7192219644784927e-03</internalNodes>\n          <leafValues>\n            -1.8307499587535858e-01 4.2252171784639359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5134 -4.5182029716670513e-03</internalNodes>\n          <leafValues>\n            9.5572151243686676e-02 -6.0799460858106613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5135 -5.4851798340678215e-03</internalNodes>\n          <leafValues>\n            -1.7556129395961761e-01 4.0092539042234421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5136 -9.9079031497240067e-04</internalNodes>\n          <leafValues>\n            -1.3978339731693268e-01 4.8252910375595093e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5137 -5.0425329245626926e-03</internalNodes>\n          <leafValues>\n            -8.8625833392143250e-02 7.9794026911258698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5138 -6.3926707953214645e-03</internalNodes>\n          <leafValues>\n            3.5854909569025040e-02 -8.5030712187290192e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5139 -1.1408809572458267e-02</internalNodes>\n          <leafValues>\n            7.7756106853485107e-02 -1.0200379788875580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5140 5.9286449104547501e-02</internalNodes>\n          <leafValues>\n            6.4652841538190842e-03 -4.9082350730895996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5141 -5.7389298453927040e-03</internalNodes>\n          <leafValues>\n            -1.6221189498901367e-01 5.9541791677474976e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5142 4.4626160524785519e-03</internalNodes>\n          <leafValues>\n            -2.4659389629960060e-02 2.8509560227394104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5143 -7.4683688580989838e-04</internalNodes>\n          <leafValues>\n            5.5159430950880051e-02 -1.4510269463062286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5144 7.5665451586246490e-03</internalNodes>\n          <leafValues>\n            -3.0510440468788147e-02 9.2685796320438385e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5145 8.1203378736972809e-02</internalNodes>\n          <leafValues>\n            8.3315223455429077e-03 -8.8626891374588013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5146 2.5454829446971416e-03</internalNodes>\n          <leafValues>\n            -5.4131258279085159e-02 1.6551689803600311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5147 5.6319180876016617e-02</internalNodes>\n          <leafValues>\n            1.5744749456644058e-02 -4.6605950593948364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5148 -2.7670960873365402e-02</internalNodes>\n          <leafValues>\n            2.7910009026527405e-01 -2.1267570555210114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5149 5.7495549321174622e-02</internalNodes>\n          <leafValues>\n            1.3765430077910423e-02 -5.6881892681121826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5150 1.1847530258819461e-03</internalNodes>\n          <leafValues>\n            6.3452966511249542e-02 -1.6044929623603821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5151 4.2551690712571144e-03</internalNodes>\n          <leafValues>\n            6.3017703592777252e-02 -1.3584609329700470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5152 -2.1190859377384186e-02</internalNodes>\n          <leafValues>\n            1.9623500108718872e-01 -2.8249129652976990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5153 8.3922911435365677e-03</internalNodes>\n          <leafValues>\n            -6.2064249068498611e-02 1.1225070059299469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5154 -3.5534579306840897e-02</internalNodes>\n          <leafValues>\n            1.8565779924392700e-01 -2.1027710288763046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5155 -9.2783384025096893e-03</internalNodes>\n          <leafValues>\n            -1.6255140304565430e-01 5.3493771702051163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5156 -7.4480189941823483e-03</internalNodes>\n          <leafValues>\n            5.6045979261398315e-02 -2.7357129380106926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5157 3.4573610872030258e-02</internalNodes>\n          <leafValues>\n            2.7872329577803612e-02 -2.5443691015243530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5158 1.0644230060279369e-02</internalNodes>\n          <leafValues>\n            -2.5041149929165840e-02 1.2895500659942627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5159 -6.9164121523499489e-03</internalNodes>\n          <leafValues>\n            5.5145461112260818e-02 -1.4286629855632782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5160 4.0446728467941284e-02</internalNodes>\n          <leafValues>\n            4.3409019708633423e-03 -3.0095139145851135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5161 -2.1182280033826828e-02</internalNodes>\n          <leafValues>\n            2.3987750709056854e-01 -3.0267970636487007e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5162 -1.8278649076819420e-02</internalNodes>\n          <leafValues>\n            -2.8024369478225708e-01 2.0352259278297424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5163 -6.0500060208141804e-03</internalNodes>\n          <leafValues>\n            -1.5138089656829834e-01 4.5843418687582016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5164 -7.4632540345191956e-03</internalNodes>\n          <leafValues>\n            7.3087826371192932e-02 -3.9645120501518250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5165 -3.1640689820051193e-02</internalNodes>\n          <leafValues>\n            3.8544759154319763e-01 -1.8987689167261124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5166 -4.9488719552755356e-02</internalNodes>\n          <leafValues>\n            -3.7455439567565918e-01 4.6011591330170631e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5167 -2.4384791031479836e-03</internalNodes>\n          <leafValues>\n            -1.0864440351724625e-01 7.0171296596527100e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5168 7.4253929778933525e-03</internalNodes>\n          <leafValues>\n            -4.4223289936780930e-02 7.5678370893001556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5169 -5.3592741489410400e-02</internalNodes>\n          <leafValues>\n            1.9981780648231506e-01 -3.8047380745410919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5170 -2.1555580198764801e-02</internalNodes>\n          <leafValues>\n            -5.2737689018249512e-01 7.7934260480105877e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5171 4.1731819510459900e-03</internalNodes>\n          <leafValues>\n            3.8742069154977798e-02 -1.6946560144424438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5172 4.1882280260324478e-02</internalNodes>\n          <leafValues>\n            -1.1853899806737900e-02 2.9235321283340454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5173 -2.2035069763660431e-02</internalNodes>\n          <leafValues>\n            -1.3629269599914551e-01 4.7323219478130341e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5174 1.6916249878704548e-03</internalNodes>\n          <leafValues>\n            -4.9461908638477325e-02 7.4048481881618500e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5175 -1.9994638860225677e-03</internalNodes>\n          <leafValues>\n            9.3016393482685089e-02 -7.5230561196804047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5176 -8.7527623400092125e-03</internalNodes>\n          <leafValues>\n            8.4076300263404846e-02 -3.7777189165353775e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5177 2.8121439740061760e-02</internalNodes>\n          <leafValues>\n            3.8471631705760956e-02 -1.9039680063724518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5178 2.4713769555091858e-02</internalNodes>\n          <leafValues>\n            -1.1225669644773006e-02 1.3408440351486206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5179 2.1718820556998253e-02</internalNodes>\n          <leafValues>\n            -1.7361419275403023e-02 3.4876769781112671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5180 -4.3202299624681473e-02</internalNodes>\n          <leafValues>\n            -5.1877439022064209e-01 1.2914709746837616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5181 -1.6658119857311249e-03</internalNodes>\n          <leafValues>\n            -3.0727219581604004e-01 1.9104089587926865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5182 -3.2269109040498734e-02</internalNodes>\n          <leafValues>\n            3.1825730204582214e-01 -6.1126789078116417e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5183 -9.6689872443675995e-03</internalNodes>\n          <leafValues>\n            3.3182978630065918e-01 -1.8409479409456253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5184 1.7683519981801510e-03</internalNodes>\n          <leafValues>\n            3.1587228178977966e-02 -1.1481689661741257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5185 3.4618038684129715e-02</internalNodes>\n          <leafValues>\n            -1.8013959750533104e-02 3.4668689966201782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5186 -9.3643896281719208e-02</internalNodes>\n          <leafValues>\n            -5.1143682003021240e-01 1.4282460324466228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5187 4.3095857836306095e-03</internalNodes>\n          <leafValues>\n            2.4471389129757881e-02 -2.3517690598964691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5188 6.6311933100223541e-02</internalNodes>\n          <leafValues>\n            -1.5711139887571335e-02 2.4676759541034698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5189 -9.2896772548556328e-03</internalNodes>\n          <leafValues>\n            -1.3924039900302887e-01 4.8822149634361267e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5190 -3.3214599825441837e-03</internalNodes>\n          <leafValues>\n            1.3379609584808350e-01 -3.6818679422140121e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5191 4.0180981159210205e-02</internalNodes>\n          <leafValues>\n            -1.2793520465493202e-02 5.2580958604812622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5192 8.7590962648391724e-02</internalNodes>\n          <leafValues>\n            1.2522599659860134e-02 -5.5810731649398804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5193 3.5475298762321472e-02</internalNodes>\n          <leafValues>\n            2.3128280416131020e-02 -2.7402919530868530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5194 5.2033789455890656e-02</internalNodes>\n          <leafValues>\n            -6.1640930362045765e-03 1.9052730500698090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5195 -1.3046549260616302e-01</internalNodes>\n          <leafValues>\n            2.5712540745735168e-01 -2.3529190570116043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5196 2.8882310725748539e-03</internalNodes>\n          <leafValues>\n            -6.0755409300327301e-02 6.0243420302867889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5197 1.5083160251379013e-02</internalNodes>\n          <leafValues>\n            2.1192179992794991e-02 -2.8479540348052979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5198 8.0875161802396178e-04</internalNodes>\n          <leafValues>\n            -8.5497900843620300e-02 5.4305519908666611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5199 1.4947880059480667e-02</internalNodes>\n          <leafValues>\n            -5.7983450591564178e-02 1.0115720331668854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5200 -4.5683588832616806e-02</internalNodes>\n          <leafValues>\n            -3.9345711469650269e-01 1.7556620761752129e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5201 -9.4226107466965914e-04</internalNodes>\n          <leafValues>\n            1.3064099848270416e-01 -5.1675319671630859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5202 -2.8342329896986485e-03</internalNodes>\n          <leafValues>\n            1.5992760658264160e-01 -3.4787811338901520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5203 -1.8812920898199081e-02</internalNodes>\n          <leafValues>\n            -2.9807311296463013e-01 2.2536030039191246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5204 1.9601570442318916e-02</internalNodes>\n          <leafValues>\n            1.3461099937558174e-02 -1.6885930299758911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5205 -6.4929589629173279e-02</internalNodes>\n          <leafValues>\n            -7.1198761463165283e-01 8.5184276103973389e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5206 -1.4283999800682068e-02</internalNodes>\n          <leafValues>\n            -7.8602321445941925e-02 4.2226359248161316e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5207 2.5105919688940048e-02</internalNodes>\n          <leafValues>\n            -2.9744949191808701e-02 2.2586929798126221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5208 3.8459669798612595e-02</internalNodes>\n          <leafValues>\n            1.7592959105968475e-02 -3.4457311034202576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5209 2.9701360035687685e-03</internalNodes>\n          <leafValues>\n            -5.2914209663867950e-02 1.1567460000514984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5210 -3.5584170836955309e-03</internalNodes>\n          <leafValues>\n            1.2957760691642761e-01 -6.1714299023151398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5211 5.5475500412285328e-03</internalNodes>\n          <leafValues>\n            4.9168299883604050e-02 -1.2925429642200470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5212 7.1379862725734711e-02</internalNodes>\n          <leafValues>\n            -1.1528199538588524e-02 3.2423359155654907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5213 -1.1731989681720734e-01</internalNodes>\n          <leafValues>\n            -9.0184438228607178e-01 6.3025541603565216e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5214 2.2931929677724838e-02</internalNodes>\n          <leafValues>\n            -1.1425419710576534e-02 4.1168990731239319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5215 3.6658400204032660e-03</internalNodes>\n          <leafValues>\n            2.8030570596456528e-02 -2.0567989349365234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5216 -7.0796072483062744e-02</internalNodes>\n          <leafValues>\n            -2.1817129850387573e-01 1.2820649892091751e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5217 6.7239440977573395e-03</internalNodes>\n          <leafValues>\n            -4.2305160313844681e-02 1.4150319993495941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5218 -2.0242671016603708e-03</internalNodes>\n          <leafValues>\n            9.1976962983608246e-02 -4.6815071254968643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5219 2.3123170249164104e-03</internalNodes>\n          <leafValues>\n            -7.1074202656745911e-02 9.8617300391197205e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5220 2.7525359764695168e-03</internalNodes>\n          <leafValues>\n            -5.0785668194293976e-02 7.5282126665115356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5221 -3.4460208844393492e-03</internalNodes>\n          <leafValues>\n            9.6368476748466492e-02 -7.8051783144474030e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5222 -1.1416469700634480e-02</internalNodes>\n          <leafValues>\n            -1.1313349753618240e-01 7.5080856680870056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5223 3.0283999876701273e-05</internalNodes>\n          <leafValues>\n            -1.3886189460754395e-01 4.3761149048805237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5224 -1.4150349888950586e-03</internalNodes>\n          <leafValues>\n            3.7164621055126190e-02 -1.1095599830150604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5225 -1.9245060393586755e-03</internalNodes>\n          <leafValues>\n            7.0604592561721802e-02 -9.4269059598445892e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5226 3.0031649395823479e-02</internalNodes>\n          <leafValues>\n            -5.1407739520072937e-02 1.6337560117244720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5227 -2.5132829323410988e-03</internalNodes>\n          <leafValues>\n            -1.4933520555496216e-01 5.1749840378761292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5228 1.9437290029600263e-04</internalNodes>\n          <leafValues>\n            -4.8553969711065292e-02 1.0562740266323090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5229 2.9679399449378252e-03</internalNodes>\n          <leafValues>\n            3.6664169281721115e-02 -1.5650020539760590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5230 3.2629880588501692e-03</internalNodes>\n          <leafValues>\n            4.2934000492095947e-02 -1.4514559507369995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5231 2.9959511011838913e-03</internalNodes>\n          <leafValues>\n            -6.3821822404861450e-02 9.3514777719974518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5232 -1.5483190305531025e-02</internalNodes>\n          <leafValues>\n            -2.0184549689292908e-01 3.1191380694508553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5233 -2.3956559598445892e-02</internalNodes>\n          <leafValues>\n            3.6116409301757812e-01 -2.4698240682482719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5234 -1.7136270180344582e-02</internalNodes>\n          <leafValues>\n            -2.6252090930938721e-01 2.4616269394755363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5235 -6.2233610078692436e-03</internalNodes>\n          <leafValues>\n            1.1059129983186722e-01 -5.7947199791669846e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5236 2.9878519475460052e-02</internalNodes>\n          <leafValues>\n            7.8794546425342560e-03 -2.8504589200019836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5237 -9.6910241991281509e-03</internalNodes>\n          <leafValues>\n            -1.5696419775485992e-01 3.8263391703367233e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5238 -1.2825420498847961e-01</internalNodes>\n          <leafValues>\n            2.8350758552551270e-01 -2.7224350720643997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5239 -3.9670959813520312e-04</internalNodes>\n          <leafValues>\n            -1.3316330313682556e-01 5.3896941244602203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5240 -8.2217011367902160e-04</internalNodes>\n          <leafValues>\n            -1.3680179417133331e-01 7.7957339584827423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5241 7.4795359978452325e-05</internalNodes>\n          <leafValues>\n            -9.0496443212032318e-02 6.8528160452842712e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5242 9.3816556036472321e-03</internalNodes>\n          <leafValues>\n            -9.9184580147266388e-02 6.4078651368618011e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5243 -6.6485297866165638e-03</internalNodes>\n          <leafValues>\n            1.4783580601215363e-01 -4.6988330781459808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5244 -5.5821631103754044e-03</internalNodes>\n          <leafValues>\n            -1.3562120497226715e-01 5.5308390408754349e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5245 -3.0224759131669998e-02</internalNodes>\n          <leafValues>\n            3.4760668873786926e-01 -1.6698839142918587e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5246 -2.7506949380040169e-02</internalNodes>\n          <leafValues>\n            2.8031051158905029e-01 -1.0123490355908871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5247 1.5043930150568485e-02</internalNodes>\n          <leafValues>\n            1.5279079787433147e-02 -3.9506959915161133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5248 9.2139653861522675e-03</internalNodes>\n          <leafValues>\n            2.6678409427404404e-02 -1.4255590736865997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5249 6.3955582678318024e-02</internalNodes>\n          <leafValues>\n            6.2569188885390759e-03 -8.8076668977737427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5250 3.0171850085025653e-05</internalNodes>\n          <leafValues>\n            -1.1047919839620590e-01 5.1936849951744080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5251 -5.1049161702394485e-03</internalNodes>\n          <leafValues>\n            2.1350729465484619e-01 -2.7889270335435867e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5252 -9.1436346992850304e-03</internalNodes>\n          <leafValues>\n            -1.9197109341621399e-01 3.0341459438204765e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5253 -7.6746046543121338e-02</internalNodes>\n          <leafValues>\n            -7.2468912601470947e-01 7.1879802271723747e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5254 4.8780560493469238e-02</internalNodes>\n          <leafValues>\n            -2.1447779610753059e-02 3.0364468693733215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5255 4.2551410198211670e-01</internalNodes>\n          <leafValues>\n            6.3504311256110668e-03 -9.4783991575241089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5256 2.2590209264308214e-03</internalNodes>\n          <leafValues>\n            1.8893169239163399e-02 -1.9443869590759277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5257 -3.8309961091727018e-03</internalNodes>\n          <leafValues>\n            -1.2813219428062439e-01 4.7748729586601257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5258 7.5495108030736446e-03</internalNodes>\n          <leafValues>\n            -6.7982822656631470e-02 7.6470799744129181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5259 1.4784730039536953e-02</internalNodes>\n          <leafValues>\n            -3.4885041415691376e-02 1.7936830222606659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5260 5.6762639433145523e-02</internalNodes>\n          <leafValues>\n            1.2816789560019970e-02 -4.8105829954147339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5261 -2.5854599662125111e-03</internalNodes>\n          <leafValues>\n            1.2653970718383789e-01 -4.7761850059032440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5262 -5.5542518384754658e-03</internalNodes>\n          <leafValues>\n            7.2126902639865875e-02 -3.8657661527395248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5263 2.6672501116991043e-03</internalNodes>\n          <leafValues>\n            -6.1485260725021362e-02 1.2647840380668640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5264 -2.2879959642887115e-01</internalNodes>\n          <leafValues>\n            -4.8435351252555847e-01 4.5618140138685703e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5265 3.7851329892873764e-02</internalNodes>\n          <leafValues>\n            1.8769560381770134e-02 -3.0806949734687805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5266 2.4275709874927998e-03</internalNodes>\n          <leafValues>\n            -7.1589171886444092e-02 8.1694543361663818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5267 -7.9000797122716904e-03</internalNodes>\n          <leafValues>\n            -1.2589320540428162e-01 4.7421310096979141e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5268 -6.7925411276519299e-03</internalNodes>\n          <leafValues>\n            6.1758730560541153e-02 -5.3803559392690659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5269 -1.7522360384464264e-01</internalNodes>\n          <leafValues>\n            3.3726111054420471e-01 -1.7961960285902023e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5270 6.6033959388732910e-02</internalNodes>\n          <leafValues>\n            4.4206557795405388e-03 -5.5819147825241089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5271 5.1699979230761528e-03</internalNodes>\n          <leafValues>\n            5.3349301218986511e-02 -1.2245289981365204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5272 1.2047989666461945e-01</internalNodes>\n          <leafValues>\n            -6.9788158871233463e-03 7.9341912269592285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5273 -4.2617730796337128e-03</internalNodes>\n          <leafValues>\n            7.8014120459556580e-02 -6.8260386586189270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5274 3.0685370787978172e-02</internalNodes>\n          <leafValues>\n            9.3320813030004501e-03 -2.7420249581336975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5275 -6.8651121109724045e-03</internalNodes>\n          <leafValues>\n            -1.3084979355335236e-01 4.7273408621549606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5276 -3.9284229278564453e-03</internalNodes>\n          <leafValues>\n            1.1553719639778137e-01 -5.5044289678335190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5277 -4.2112590745091438e-03</internalNodes>\n          <leafValues>\n            1.3730779290199280e-01 -5.2514389157295227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5278 -7.6999869197607040e-03</internalNodes>\n          <leafValues>\n            -3.4011191129684448e-01 1.7478680238127708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5279 -1.1867909692227840e-02</internalNodes>\n          <leafValues>\n            2.5731179118156433e-01 -2.5691770017147064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5280 5.3619472309947014e-03</internalNodes>\n          <leafValues>\n            1.1936780065298080e-02 -2.8930050134658813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5281 -2.3130229674279690e-03</internalNodes>\n          <leafValues>\n            -1.0821309685707092e-01 5.3640749305486679e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5282 -2.2222870588302612e-01</internalNodes>\n          <leafValues>\n            3.1654310226440430e-01 -1.4542319811880589e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5283 6.2593920156359673e-03</internalNodes>\n          <leafValues>\n            3.7795171141624451e-02 -1.5100699663162231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5284 3.4754760563373566e-03</internalNodes>\n          <leafValues>\n            -6.3047468662261963e-02 8.5025683045387268e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5285 -2.8249478782527149e-04</internalNodes>\n          <leafValues>\n            -1.1442869901657104e-01 5.6041400879621506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5286 4.8107700422406197e-04</internalNodes>\n          <leafValues>\n            -9.6898466348648071e-02 2.8347050771117210e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5287 2.4178959429264069e-02</internalNodes>\n          <leafValues>\n            -2.1033059805631638e-02 2.5629448890686035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5288 2.9526960104703903e-02</internalNodes>\n          <leafValues>\n            1.6122579574584961e-02 -3.4472090005874634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5289 -3.0501780565828085e-03</internalNodes>\n          <leafValues>\n            -1.3633529841899872e-01 4.0983788669109344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5290 1.0082300286740065e-03</internalNodes>\n          <leafValues>\n            -6.0927029699087143e-02 4.0717199444770813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5291 -3.0384280253201723e-03</internalNodes>\n          <leafValues>\n            6.1883278191089630e-02 -9.7887121140956879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5292 3.2816259190440178e-03</internalNodes>\n          <leafValues>\n            -4.7950621694326401e-02 6.2675401568412781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5293 1.3182610273361206e-02</internalNodes>\n          <leafValues>\n            2.2476239502429962e-01 -2.5649169459939003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5294 -2.3278119042515755e-03</internalNodes>\n          <leafValues>\n            7.3735602200031281e-02 -5.1023889333009720e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5295 -1.0695509612560272e-02</internalNodes>\n          <leafValues>\n            -7.5625538825988770e-01 7.3301601223647594e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5296 7.8046746551990509e-02</internalNodes>\n          <leafValues>\n            1.8139410531148314e-03 -6.2067931890487671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5297 5.6678339838981628e-02</internalNodes>\n          <leafValues>\n            6.2128840945661068e-03 -7.8200930356979370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5298 7.2442921809852123e-03</internalNodes>\n          <leafValues>\n            -4.8852469772100449e-02 1.0644549876451492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5299 -6.6754333674907684e-02</internalNodes>\n          <leafValues>\n            -6.4796060323715210e-01 8.7654050439596176e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5300 -3.4662630409002304e-02</internalNodes>\n          <leafValues>\n            3.3293959498405457e-01 -1.7286069691181183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5301 -1.5084750019013882e-02</internalNodes>\n          <leafValues>\n            -1.2696580588817596e-01 4.5507699251174927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5302 -2.3421730846166611e-02</internalNodes>\n          <leafValues>\n            -2.5279340147972107e-01 1.5818970277905464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5303 2.5689320638775826e-02</internalNodes>\n          <leafValues>\n            -3.7194628268480301e-02 1.6223169863224030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5304 6.3883140683174133e-03</internalNodes>\n          <leafValues>\n            3.0617009848356247e-02 -1.3695000112056732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5305 -1.0519590228796005e-01</internalNodes>\n          <leafValues>\n            -8.4453481435775757e-01 6.6635669209063053e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5306 1.8773669376969337e-02</internalNodes>\n          <leafValues>\n            4.6610347926616669e-03 -1.7115519940853119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5307 -1.3318320270627737e-03</internalNodes>\n          <leafValues>\n            6.5780423581600189e-02 -8.7241567671298981e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5308 -2.1417330205440521e-01</internalNodes>\n          <leafValues>\n            4.7866639494895935e-01 -3.0801231041550636e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5309 -5.5097872018814087e-01</internalNodes>\n          <leafValues>\n            -6.3633698225021362e-01 8.8994754478335381e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5310 -3.3415539655834436e-03</internalNodes>\n          <leafValues>\n            1.2846040725708008e-01 -3.2317079603672028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5311 1.0858159512281418e-03</internalNodes>\n          <leafValues>\n            -1.1438050121068954e-01 4.7090869396924973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5312 4.2784498073160648e-03</internalNodes>\n          <leafValues>\n            4.3842699378728867e-02 -8.0856688320636749e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5313 -2.0054390188306570e-03</internalNodes>\n          <leafValues>\n            1.0532370209693909e-01 -5.0866328179836273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5314 -3.4336079843342304e-03</internalNodes>\n          <leafValues>\n            -7.9986043274402618e-02 4.2570270597934723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5315 -1.2204749509692192e-03</internalNodes>\n          <leafValues>\n            4.1162941604852676e-02 -1.3378110527992249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5316 -1.3440379500389099e-01</internalNodes>\n          <leafValues>\n            -5.2044588327407837e-01 2.9635489918291569e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5317 1.4581819996237755e-02</internalNodes>\n          <leafValues>\n            -1.9067969173192978e-02 4.0065661072731018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5318 -2.8450360987335443e-03</internalNodes>\n          <leafValues>\n            -5.8998711407184601e-02 3.1797751784324646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5319 4.8618339933454990e-03</internalNodes>\n          <leafValues>\n            3.9754759520292282e-02 -1.4741879701614380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5320 5.6295008398592472e-03</internalNodes>\n          <leafValues>\n            -4.2094878852367401e-02 4.1394129395484924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5321 -4.5936359092593193e-03</internalNodes>\n          <leafValues>\n            2.0751099288463593e-01 -2.7909379452466965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5322 -3.0693739652633667e-02</internalNodes>\n          <leafValues>\n            -3.4029048681259155e-01 5.0333337858319283e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5323 3.1476689036935568e-04</internalNodes>\n          <leafValues>\n            -8.8118873536586761e-02 6.3354291021823883e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5324 -3.4313879441469908e-03</internalNodes>\n          <leafValues>\n            5.9088770300149918e-02 -6.7773580551147461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5325 -3.4075058647431433e-04</internalNodes>\n          <leafValues>\n            -9.8268762230873108e-02 5.8783698827028275e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5326 -3.7829359062016010e-03</internalNodes>\n          <leafValues>\n            1.7841720581054688e-01 -4.6912178397178650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5327 -4.6322058886289597e-02</internalNodes>\n          <leafValues>\n            -1.6307410597801208e-01 3.9191931486129761e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5328 1.8471380695700645e-02</internalNodes>\n          <leafValues>\n            1.5975039452314377e-02 -2.8808701038360596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5329 9.0416809543967247e-03</internalNodes>\n          <leafValues>\n            -3.1815830618143082e-02 1.6392929852008820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5330 -3.1387940049171448e-02</internalNodes>\n          <leafValues>\n            1.5696319937705994e-01 -1.5333149582147598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5331 -7.5614887464325875e-05</internalNodes>\n          <leafValues>\n            7.4591353535652161e-02 -8.4359541535377502e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5332 -2.3939300328493118e-02</internalNodes>\n          <leafValues>\n            -1.1604589968919754e-01 3.0868789181113243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5333 2.2537580225616693e-03</internalNodes>\n          <leafValues>\n            4.0261909365653992e-02 -1.6604030132293701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5334 -5.3389810025691986e-02</internalNodes>\n          <leafValues>\n            1.0318890213966370e-01 -2.0877240225672722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5335 5.6420508772134781e-03</internalNodes>\n          <leafValues>\n            -4.6839520335197449e-02 1.1634089797735214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5336 4.2355400510132313e-03</internalNodes>\n          <leafValues>\n            2.5631250813603401e-02 -9.3193583190441132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5337 -2.1929260343313217e-02</internalNodes>\n          <leafValues>\n            -3.5141220688819885e-01 1.5704020857810974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5338 1.3050789944827557e-02</internalNodes>\n          <leafValues>\n            -7.6834131032228470e-03 1.3095930218696594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5339 2.2426109760999680e-02</internalNodes>\n          <leafValues>\n            6.3964631408452988e-03 -8.0513131618499756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5340 -8.8755652308464050e-02</internalNodes>\n          <leafValues>\n            3.9323249459266663e-01 -1.0365420021116734e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5341 1.1768270283937454e-02</internalNodes>\n          <leafValues>\n            -7.5270563364028931e-02 7.1183227002620697e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5342 2.1221570670604706e-02</internalNodes>\n          <leafValues>\n            2.4082770571112633e-02 -1.6292670369148254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5343 -5.2887611091136932e-02</internalNodes>\n          <leafValues>\n            3.3231079578399658e-01 -1.5548040159046650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5344 2.5847768783569336e-01</internalNodes>\n          <leafValues>\n            9.5278248190879822e-03 -6.3773447275161743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5345 -2.8695159126073122e-03</internalNodes>\n          <leafValues>\n            -9.8719991743564606e-02 5.5244650691747665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5346 1.2492690235376358e-01</internalNodes>\n          <leafValues>\n            1.9365450134500861e-03 -9.9999272823333740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5347 4.3900720775127411e-02</internalNodes>\n          <leafValues>\n            -1.6385570168495178e-02 3.7183851003646851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5348 5.2520469762384892e-03</internalNodes>\n          <leafValues>\n            4.7758270055055618e-02 -1.3461829721927643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5349 -2.0031959284096956e-03</internalNodes>\n          <leafValues>\n            8.3587102591991425e-02 -6.7750580608844757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5350 4.4535310007631779e-03</internalNodes>\n          <leafValues>\n            -8.9202463626861572e-02 4.6748258173465729e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5351 1.5174630284309387e-01</internalNodes>\n          <leafValues>\n            5.6481529027223587e-03 -8.2450437545776367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5352 -6.1992209404706955e-02</internalNodes>\n          <leafValues>\n            -4.3334591388702393e-01 5.3922580555081367e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5353 -9.3085348606109619e-02</internalNodes>\n          <leafValues>\n            5.2169102430343628e-01 -9.9382782354950905e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5354 -4.9394429661333561e-03</internalNodes>\n          <leafValues>\n            -2.0004139840602875e-01 2.7710979804396629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5355 -1.3681269483640790e-03</internalNodes>\n          <leafValues>\n            8.5065416991710663e-02 -7.4542969465255737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5356 -2.7988219517283142e-04</internalNodes>\n          <leafValues>\n            -7.6987631618976593e-02 6.8912938237190247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5357 -3.2129848841577768e-03</internalNodes>\n          <leafValues>\n            1.5940999984741211e-01 -3.4221589565277100e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5358 3.9533369243144989e-02</internalNodes>\n          <leafValues>\n            3.1095379963517189e-03 -8.5460907220840454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5359 2.0442719105631113e-03</internalNodes>\n          <leafValues>\n            -6.4074553549289703e-02 7.8644759953022003e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5360 -2.0770760253071785e-02</internalNodes>\n          <leafValues>\n            -3.1129410862922668e-01 4.3864948675036430e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5361 -4.7200381755828857e-02</internalNodes>\n          <leafValues>\n            1.0526890307664871e-01 -5.1456131041049957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5362 1.3096869923174381e-02</internalNodes>\n          <leafValues>\n            9.9430568516254425e-03 -1.4253680408000946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5363 -1.0935390368103981e-02</internalNodes>\n          <leafValues>\n            -1.6756610572338104e-01 3.5863548517227173e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5364 -1.6354349255561829e-01</internalNodes>\n          <leafValues>\n            -8.2129329442977905e-01 1.9741130527108908e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5365 3.8668718189001083e-02</internalNodes>\n          <leafValues>\n            -1.1329679749906063e-02 4.7532460093498230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5366 6.0949958860874176e-02</internalNodes>\n          <leafValues>\n            1.1516530066728592e-02 -5.7472079992294312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5367 -1.2101690284907818e-02</internalNodes>\n          <leafValues>\n            1.5505610406398773e-01 -3.2629158347845078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5368 -1.0064270347356796e-02</internalNodes>\n          <leafValues>\n            -9.2389531433582306e-02 3.2318059355020523e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5369 -5.8900681324303150e-03</internalNodes>\n          <leafValues>\n            -2.6503130793571472e-01 1.9127139821648598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5370 -3.1361039727926254e-02</internalNodes>\n          <leafValues>\n            5.6730771064758301e-01 -9.6010044217109680e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5371 -4.7777321189641953e-02</internalNodes>\n          <leafValues>\n            5.9038662910461426e-01 -7.4091539718210697e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5372 -1.0792270302772522e-02</internalNodes>\n          <leafValues>\n            -1.2814930081367493e-01 4.0264949202537537e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5373 -1.4374120160937309e-02</internalNodes>\n          <leafValues>\n            2.0772540569305420e-01 -2.9854990541934967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5374 5.2079811692237854e-02</internalNodes>\n          <leafValues>\n            -3.8335260469466448e-03 7.5818628072738647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5375 6.1354418285191059e-03</internalNodes>\n          <leafValues>\n            3.0476450920104980e-02 -1.7281690239906311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5376 -3.0654598958790302e-03</internalNodes>\n          <leafValues>\n            5.8025300502777100e-02 -7.9617038369178772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5377 5.7721929624676704e-03</internalNodes>\n          <leafValues>\n            -3.6747518926858902e-02 1.6319790482521057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5378 2.7028471231460571e-01</internalNodes>\n          <leafValues>\n            -3.9847781881690025e-03 4.9476540088653564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5379 -1.5034529566764832e-01</internalNodes>\n          <leafValues>\n            -5.2624911069869995e-01 1.0567910037934780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5380 7.6101601123809814e-02</internalNodes>\n          <leafValues>\n            -2.3525250144302845e-03 9.1819989681243896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5381 -5.5953811854124069e-02</internalNodes>\n          <leafValues>\n            -7.8321272134780884e-01 6.8363421596586704e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5382 -2.4320950731635094e-02</internalNodes>\n          <leafValues>\n            2.2739610075950623e-01 -1.1622290126979351e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5383 1.6274319961667061e-02</internalNodes>\n          <leafValues>\n            1.4024170115590096e-02 -3.4222239255905151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5384 7.7015208080410957e-04</internalNodes>\n          <leafValues>\n            -4.4768709689378738e-02 5.7412229478359222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5385 1.3995269546285272e-03</internalNodes>\n          <leafValues>\n            -6.0614239424467087e-02 8.4398999810218811e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5386 -2.0544769242405891e-02</internalNodes>\n          <leafValues>\n            -1.8160410225391388e-01 2.0795119926333427e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5387 -3.6872550845146179e-02</internalNodes>\n          <leafValues>\n            2.6817229390144348e-01 -1.9921269267797470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5388 -2.5466610677540302e-03</internalNodes>\n          <leafValues>\n            -1.3361929357051849e-01 1.9191939383745193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5389 3.3513590693473816e-02</internalNodes>\n          <leafValues>\n            9.8206587135791779e-03 -5.2659887075424194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5390 -5.5437661707401276e-02</internalNodes>\n          <leafValues>\n            4.5292490720748901e-01 -9.3475803732872009e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5391 -5.3564338013529778e-03</internalNodes>\n          <leafValues>\n            -1.4787580072879791e-01 3.3617950975894928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5392 1.1551200412213802e-02</internalNodes>\n          <leafValues>\n            -3.2851058989763260e-02 6.3716597855091095e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5393 7.2917826473712921e-02</internalNodes>\n          <leafValues>\n            -1.6388719901442528e-02 3.1580808758735657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5394 -8.9563012123107910e-02</internalNodes>\n          <leafValues>\n            7.5366562604904175e-01 -2.0717559382319450e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5395 -2.2225419525057077e-03</internalNodes>\n          <leafValues>\n            -9.2733852565288544e-02 6.0395851731300354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5396 -1.7847110331058502e-01</internalNodes>\n          <leafValues>\n            4.7988530993461609e-01 -1.0481510311365128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5397 6.7723011597990990e-03</internalNodes>\n          <leafValues>\n            5.2660830318927765e-02 -1.0471290349960327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5398 2.8399130329489708e-02</internalNodes>\n          <leafValues>\n            -2.2862000390887260e-02 2.5348138809204102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5399 -7.0053818635642529e-03</internalNodes>\n          <leafValues>\n            -1.3017000257968903e-01 4.3448921293020248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5400 -5.1440461538732052e-03</internalNodes>\n          <leafValues>\n            -1.4800100028514862e-01 4.5171629637479782e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5401 -1.1269059963524342e-02</internalNodes>\n          <leafValues>\n            1.1185359954833984e-01 -5.4867088794708252e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5402 2.2866109386086464e-02</internalNodes>\n          <leafValues>\n            -1.5563690103590488e-02 2.1705490350723267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5403 5.1559228450059891e-02</internalNodes>\n          <leafValues>\n            1.0421809740364552e-02 -5.3233247995376587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5404 1.8902059644460678e-02</internalNodes>\n          <leafValues>\n            -3.0878869816660881e-02 5.5574499070644379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5405 5.5700382217764854e-03</internalNodes>\n          <leafValues>\n            5.3661361336708069e-02 -9.4876497983932495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5406 -2.3021729663014412e-02</internalNodes>\n          <leafValues>\n            1.2766240537166595e-01 -2.2307910025119781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5407 7.1334750391542912e-03</internalNodes>\n          <leafValues>\n            3.1089689582586288e-02 -1.6293430328369141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5408 -2.9335260391235352e-02</internalNodes>\n          <leafValues>\n            1.0503090173006058e-01 -2.6008550077676773e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5409 4.6253278851509094e-02</internalNodes>\n          <leafValues>\n            7.8362170606851578e-03 -6.6226661205291748e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5410 3.9622580516152084e-04</internalNodes>\n          <leafValues>\n            -9.4567127525806427e-02 2.6796899735927582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5411 -1.1323750019073486e-02</internalNodes>\n          <leafValues>\n            7.4313652515411377e-01 -6.7432140931487083e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5412 -1.7217209935188293e-01</internalNodes>\n          <leafValues>\n            -7.1483498811721802e-01 8.1747565418481827e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5413 1.8156579462811351e-03</internalNodes>\n          <leafValues>\n            4.8135720193386078e-02 -1.0678470134735107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5414 5.8022491633892059e-02</internalNodes>\n          <leafValues>\n            -7.4218288064002991e-03 3.8226440548896790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5415 1.4357370091602206e-03</internalNodes>\n          <leafValues>\n            -2.2542880475521088e-01 2.1576719358563423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5416 5.5960440076887608e-03</internalNodes>\n          <leafValues>\n            2.5731930136680603e-01 -2.1246509626507759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5417 2.5314849335700274e-03</internalNodes>\n          <leafValues>\n            -3.6227720975875854e-01 1.5138260088860989e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5418 -4.2207110673189163e-03</internalNodes>\n          <leafValues>\n            -4.6638991683721542e-02 2.6125539094209671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5419 -5.4260431788861752e-03</internalNodes>\n          <leafValues>\n            1.0110379755496979e-01 -5.2066121250391006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5420 1.6170790186151862e-03</internalNodes>\n          <leafValues>\n            -4.1680540889501572e-02 9.6459351480007172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5421 -3.2414530869573355e-03</internalNodes>\n          <leafValues>\n            -1.2638680636882782e-01 3.9169210940599442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5422 4.5421482063829899e-03</internalNodes>\n          <leafValues>\n            -2.9149880632758141e-02 6.9948889315128326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5423 5.3024510852992535e-03</internalNodes>\n          <leafValues>\n            -7.9129062592983246e-02 6.1111859977245331e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5424 -4.6412080526351929e-02</internalNodes>\n          <leafValues>\n            3.1127449870109558e-01 -6.2580788508057594e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5425 -6.2991487793624401e-03</internalNodes>\n          <leafValues>\n            -8.3928130567073822e-02 6.6761530935764313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5426 7.9948090016841888e-02</internalNodes>\n          <leafValues>\n            2.6887101121246815e-03 -5.6553709506988525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5427 9.9693494848906994e-04</internalNodes>\n          <leafValues>\n            -7.2051003575325012e-02 9.2260897159576416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5428 -2.1847949828952551e-03</internalNodes>\n          <leafValues>\n            8.3864517509937286e-02 -6.6099606454372406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5429 -1.5286840498447418e-01</internalNodes>\n          <leafValues>\n            6.1705768108367920e-01 -8.1674018874764442e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5430 1.7121130600571632e-02</internalNodes>\n          <leafValues>\n            2.6676440611481667e-02 -1.4158309996128082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5431 1.8799189710989594e-03</internalNodes>\n          <leafValues>\n            -7.7865563333034515e-02 6.7955218255519867e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5432 5.5029629729688168e-03</internalNodes>\n          <leafValues>\n            -7.9979859292507172e-02 6.4055956900119781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5433 2.7474550530314445e-02</internalNodes>\n          <leafValues>\n            6.0482721775770187e-02 -8.8957548141479492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5434 2.7708879113197327e-01</internalNodes>\n          <leafValues>\n            4.4098719954490662e-03 -1.0000040531158447e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5435 -4.9538668245077133e-03</internalNodes>\n          <leafValues>\n            1.4720940589904785e-01 -3.5671569406986237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5436 4.7095369547605515e-02</internalNodes>\n          <leafValues>\n            -6.0950522311031818e-03 2.4319580197334290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5437 -3.1939700711518526e-03</internalNodes>\n          <leafValues>\n            -1.3417580723762512e-01 3.9335511624813080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5438 3.5586568992584944e-03</internalNodes>\n          <leafValues>\n            2.1399470046162605e-02 -4.3609801679849625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5439 -1.0028639808297157e-02</internalNodes>\n          <leafValues>\n            1.6288889944553375e-01 -3.1448449939489365e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5440 -2.9802629724144936e-03</internalNodes>\n          <leafValues>\n            -7.0220857858657837e-02 3.7910789251327515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5441 1.7347529530525208e-02</internalNodes>\n          <leafValues>\n            1.1053959839046001e-02 -4.5107790827751160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5442 -4.4207129627466202e-02</internalNodes>\n          <leafValues>\n            1.4115320146083832e-01 -6.2362072058022022e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5443 -3.2249989453703165e-03</internalNodes>\n          <leafValues>\n            -1.0305760055780411e-01 4.9647849053144455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5444 7.5196991674602032e-03</internalNodes>\n          <leafValues>\n            -2.8604390099644661e-02 9.8367802798748016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5445 -6.1209458857774734e-02</internalNodes>\n          <leafValues>\n            2.2113859653472900e-01 -2.9835490509867668e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5446 2.0107250660657883e-02</internalNodes>\n          <leafValues>\n            1.6412479802966118e-02 -1.2316829711198807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5447 -1.6578679904341698e-02</internalNodes>\n          <leafValues>\n            -2.3395630717277527e-01 3.0250690877437592e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5448 -6.0900870710611343e-02</internalNodes>\n          <leafValues>\n            3.1688570976257324e-01 -1.8433200195431709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5449 4.2772209271788597e-03</internalNodes>\n          <leafValues>\n            -4.3859448283910751e-02 1.2858760356903076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5450 6.6130697727203369e-02</internalNodes>\n          <leafValues>\n            2.0941190421581268e-02 -2.0549100637435913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5451 2.5896991137415171e-03</internalNodes>\n          <leafValues>\n            -8.2597322762012482e-02 7.7048726379871368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5452 -1.7113700509071350e-02</internalNodes>\n          <leafValues>\n            -9.9560201168060303e-02 2.0174279808998108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5453 6.2078679911792278e-03</internalNodes>\n          <leafValues>\n            -1.5074240043759346e-02 3.5393691062927246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5454 -3.3676949143409729e-01</internalNodes>\n          <leafValues>\n            -4.9838671088218689e-01 7.4067250825464725e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5455 5.0239380449056625e-02</internalNodes>\n          <leafValues>\n            -1.8589239567518234e-02 2.8223350644111633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5456 1.1036300100386143e-02</internalNodes>\n          <leafValues>\n            2.9623959213495255e-02 -2.0078790187835693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5457 6.0965020209550858e-02</internalNodes>\n          <leafValues>\n            -1.1036460287868977e-02 5.0334519147872925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5458 1.5966590493917465e-02</internalNodes>\n          <leafValues>\n            1.3941870070993900e-02 -2.4742470681667328e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>243</maxWeakCount>\n      <stageThreshold>-1.4138590097427368e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 5459 -3.8829419761896133e-02</internalNodes>\n          <leafValues>\n            3.1823828816413879e-01 -1.4062009751796722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5460 -6.7771300673484802e-02</internalNodes>\n          <leafValues>\n            2.0526969432830811e-01 -1.7867469787597656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5461 9.3152940273284912e-02</internalNodes>\n          <leafValues>\n            -1.3293810188770294e-01 2.3252120614051819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5462 -6.0846367850899696e-03</internalNodes>\n          <leafValues>\n            1.9817650318145752e-01 -1.5535140037536621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5463 -1.7230149358510971e-02</internalNodes>\n          <leafValues>\n            2.5784310698509216e-01 -9.0387366712093353e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5464 4.1907798498868942e-02</internalNodes>\n          <leafValues>\n            6.2066148966550827e-02 -3.2303139567375183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5465 -3.4084350336343050e-03</internalNodes>\n          <leafValues>\n            -3.1667909026145935e-01 6.0275040566921234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5466 3.4909289330244064e-02</internalNodes>\n          <leafValues>\n            -1.2456309795379639e-01 1.6099859774112701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5467 1.1676900088787079e-02</internalNodes>\n          <leafValues>\n            -1.8025660514831543e-01 1.2234430015087128e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5468 -1.2773449998348951e-03</internalNodes>\n          <leafValues>\n            -2.4735580384731293e-01 6.2129739671945572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5469 1.6917299479246140e-02</internalNodes>\n          <leafValues>\n            6.9671042263507843e-02 -2.5292581319808960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5470 2.5656640529632568e-02</internalNodes>\n          <leafValues>\n            2.6212580502033234e-02 -1.6348999738693237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5471 1.9884048961102962e-03</internalNodes>\n          <leafValues>\n            -3.1018510460853577e-01 5.0259251147508621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5472 4.2548488825559616e-02</internalNodes>\n          <leafValues>\n            1.7065819352865219e-02 -4.7830620408058167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5473 6.0466718859970570e-03</internalNodes>\n          <leafValues>\n            -2.2118049860000610e-01 7.2842411696910858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5474 -8.0229081213474274e-03</internalNodes>\n          <leafValues>\n            -1.4530059695243835e-01 4.9906261265277863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5475 3.7937261164188385e-02</internalNodes>\n          <leafValues>\n            -3.4007780253887177e-02 4.3715330958366394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5476 -5.2960298955440521e-02</internalNodes>\n          <leafValues>\n            -2.8856590390205383e-01 1.8457209691405296e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5477 7.5578060932457447e-03</internalNodes>\n          <leafValues>\n            -2.3534600436687469e-01 6.0302570462226868e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5478 -1.5554980374872684e-02</internalNodes>\n          <leafValues>\n            -2.6567730307579041e-01 5.5279370397329330e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5479 3.4035260323435068e-03</internalNodes>\n          <leafValues>\n            4.6175889670848846e-02 -3.3651891350746155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5480 -1.9370270892977715e-02</internalNodes>\n          <leafValues>\n            1.9603839516639709e-01 -8.0186828970909119e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5481 2.1719569340348244e-02</internalNodes>\n          <leafValues>\n            4.1932079941034317e-02 -3.4327590465545654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5482 -3.8787510129623115e-04</internalNodes>\n          <leafValues>\n            -2.5382238626480103e-01 4.5200780034065247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5483 3.3794559538364410e-02</internalNodes>\n          <leafValues>\n            -6.4901560544967651e-02 2.1238659322261810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5484 -9.1701336205005646e-03</internalNodes>\n          <leafValues>\n            -2.3874589800834656e-01 4.0796380490064621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5485 -1.3741330476477742e-03</internalNodes>\n          <leafValues>\n            -1.6430020332336426e-01 8.1496283411979675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5486 -1.2352719902992249e-02</internalNodes>\n          <leafValues>\n            1.6805070638656616e-01 -5.7883970439434052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5487 -1.1177700012922287e-02</internalNodes>\n          <leafValues>\n            -1.9775860011577606e-01 6.3408702611923218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5488 2.5044390931725502e-03</internalNodes>\n          <leafValues>\n            -1.2900459766387939e-01 5.8973610401153564e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5489 2.1939110010862350e-03</internalNodes>\n          <leafValues>\n            1.4937159419059753e-01 -7.9897291958332062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5490 -4.6443499624729156e-02</internalNodes>\n          <leafValues>\n            -4.4332349300384521e-01 2.0691359415650368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5491 -3.8867309689521790e-02</internalNodes>\n          <leafValues>\n            -5.3450870513916016e-01 2.1435650065541267e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5492 -2.0838780328631401e-03</internalNodes>\n          <leafValues>\n            5.3876239806413651e-02 -1.6674530506134033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5493 -1.7784969881176949e-02</internalNodes>\n          <leafValues>\n            2.5898349285125732e-01 -6.5794423222541809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5494 -9.9478460848331451e-02</internalNodes>\n          <leafValues>\n            -7.2332090139389038e-01 6.1601991765201092e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5495 -2.5733250658959150e-03</internalNodes>\n          <leafValues>\n            7.2027653455734253e-02 -1.7522309720516205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5496 6.9977439939975739e-02</internalNodes>\n          <leafValues>\n            -3.0238330364227295e-02 3.9809378981590271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5497 -1.0880780406296253e-02</internalNodes>\n          <leafValues>\n            -3.0606269836425781e-01 4.5210558921098709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5498 4.8081401735544205e-02</internalNodes>\n          <leafValues>\n            4.3911099433898926e-02 -2.5686219334602356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5499 7.9688243567943573e-02</internalNodes>\n          <leafValues>\n            -3.3741600811481476e-02 3.6532700061798096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5500 -1.5404020436108112e-02</internalNodes>\n          <leafValues>\n            -1.7731459438800812e-01 2.3800730705261230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5501 -3.6643899977207184e-02</internalNodes>\n          <leafValues>\n            -6.3931107521057129e-01 1.7518630251288414e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5502 -1.3072500005364418e-02</internalNodes>\n          <leafValues>\n            -2.4119360744953156e-01 5.8876950293779373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5503 -2.5379280559718609e-03</internalNodes>\n          <leafValues>\n            -2.0509210228919983e-01 5.8915760368108749e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5504 4.7491278499364853e-02</internalNodes>\n          <leafValues>\n            2.2842779755592346e-02 -3.9453479647636414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5505 -2.1489640697836876e-02</internalNodes>\n          <leafValues>\n            -3.1091120839118958e-01 3.8020871579647064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5506 1.3841330073773861e-02</internalNodes>\n          <leafValues>\n            -5.6039519608020782e-02 2.1308979392051697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5507 4.9399589188396931e-03</internalNodes>\n          <leafValues>\n            -1.8838630616664886e-01 6.2171839177608490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5508 1.3483439572155476e-02</internalNodes>\n          <leafValues>\n            3.6875329911708832e-02 -2.4952369928359985e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5509 -8.4225656464695930e-03</internalNodes>\n          <leafValues>\n            7.1501091122627258e-02 -1.3996620476245880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5510 -4.3786991387605667e-02</internalNodes>\n          <leafValues>\n            2.0128419995307922e-01 -5.3744260221719742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5511 -1.0068439878523350e-02</internalNodes>\n          <leafValues>\n            -1.6707019507884979e-01 6.1345089226961136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5512 2.4383061099797487e-03</internalNodes>\n          <leafValues>\n            -1.2105459719896317e-01 4.9807701259851456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5513 3.2083820551633835e-03</internalNodes>\n          <leafValues>\n            -5.6045360863208771e-02 1.7955709993839264e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5514 -2.0389519631862640e-02</internalNodes>\n          <leafValues>\n            -3.1983590126037598e-01 3.4141618758440018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5515 -2.2914420813322067e-02</internalNodes>\n          <leafValues>\n            -3.9454650878906250e-01 2.3838970810174942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5516 1.8566900864243507e-02</internalNodes>\n          <leafValues>\n            3.8432560861110687e-02 -2.2991999983787537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5517 -1.0277030058205128e-02</internalNodes>\n          <leafValues>\n            2.2557449340820312e-01 -4.9223229289054871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5518 -9.7914133220911026e-03</internalNodes>\n          <leafValues>\n            1.9327880442142487e-01 -3.6139059811830521e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5519 1.2699839659035206e-02</internalNodes>\n          <leafValues>\n            5.6297991424798965e-02 -2.0981599390506744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5520 3.9867468178272247e-02</internalNodes>\n          <leafValues>\n            9.4982674345374107e-03 -4.7686201333999634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5521 3.3704519271850586e-02</internalNodes>\n          <leafValues>\n            1.8848460167646408e-02 -5.3707981109619141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5522 -3.3695269376039505e-02</internalNodes>\n          <leafValues>\n            -2.7003350853919983e-01 3.8956340402364731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5523 2.3961249738931656e-02</internalNodes>\n          <leafValues>\n            -9.5000430941581726e-02 1.0282819718122482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5524 8.2990229129791260e-02</internalNodes>\n          <leafValues>\n            3.7828568369150162e-02 -3.0267751216888428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5525 1.6537210345268250e-01</internalNodes>\n          <leafValues>\n            2.3912150412797928e-02 -4.1214409470558167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5526 1.8202569335699081e-02</internalNodes>\n          <leafValues>\n            2.6127459481358528e-02 -6.9227010011672974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5527 -4.5322380959987640e-02</internalNodes>\n          <leafValues>\n            -4.4437649846076965e-01 2.1279569715261459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5528 4.7620609402656555e-02</internalNodes>\n          <leafValues>\n            -3.4070000052452087e-02 2.1065680682659149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5529 1.0596530046314001e-03</internalNodes>\n          <leafValues>\n            9.8347820341587067e-02 -9.2732593417167664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5530 3.2028049230575562e-02</internalNodes>\n          <leafValues>\n            2.3833949118852615e-02 -4.3276590108871460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5531 -1.3764370232820511e-02</internalNodes>\n          <leafValues>\n            -4.1726619005203247e-01 2.1883359178900719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5532 3.6652158945798874e-02</internalNodes>\n          <leafValues>\n            -2.6851410046219826e-02 1.0051230341196060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5533 -1.5507760457694530e-02</internalNodes>\n          <leafValues>\n            4.8519268631935120e-01 -2.4900710210204124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5534 7.1460101753473282e-03</internalNodes>\n          <leafValues>\n            5.7906471192836761e-02 -5.1613971590995789e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5535 2.4280229583382607e-02</internalNodes>\n          <leafValues>\n            -3.7341829389333725e-02 2.9201799631118774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5536 -8.3522319793701172e-02</internalNodes>\n          <leafValues>\n            3.7447971105575562e-01 -3.4602559171617031e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5537 3.1485721468925476e-02</internalNodes>\n          <leafValues>\n            2.4092009291052818e-02 -3.9594879746437073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5538 9.4820279628038406e-03</internalNodes>\n          <leafValues>\n            -7.3714673519134521e-02 1.3066330552101135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5539 4.0116958320140839e-02</internalNodes>\n          <leafValues>\n            3.0453719198703766e-02 -3.0641159415245056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5540 -5.2815478295087814e-02</internalNodes>\n          <leafValues>\n            4.5792409777641296e-01 -2.3906230926513672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5541 4.6821571886539459e-03</internalNodes>\n          <leafValues>\n            -8.8395930826663971e-02 1.2858130037784576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5542 -1.3448280096054077e-01</internalNodes>\n          <leafValues>\n            -2.7471750974655151e-01 1.5970310196280479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5543 5.4646627977490425e-03</internalNodes>\n          <leafValues>\n            -2.1628439426422119e-01 4.3035320937633514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5544 -3.5996358841657639e-02</internalNodes>\n          <leafValues>\n            -4.8524090647697449e-01 1.0563749819993973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5545 2.5235998630523682e-01</internalNodes>\n          <leafValues>\n            9.3745701014995575e-03 -8.8613390922546387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5546 -2.5067269802093506e-02</internalNodes>\n          <leafValues>\n            -2.2364640235900879e-01 3.7146601825952530e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5547 -1.4150329865515232e-02</internalNodes>\n          <leafValues>\n            3.7856650352478027e-01 -2.7817489579319954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5548 1.0049570351839066e-01</internalNodes>\n          <leafValues>\n            1.1244839988648891e-02 -7.1869522333145142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5549 1.9989080727100372e-02</internalNodes>\n          <leafValues>\n            2.6056809350848198e-02 -3.2147800922393799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5550 -4.9160558730363846e-02</internalNodes>\n          <leafValues>\n            -2.3164880275726318e-01 1.6317559406161308e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5551 2.2118790075182915e-02</internalNodes>\n          <leafValues>\n            -5.0569478422403336e-02 1.7572580277919769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5552 -7.6390360482037067e-03</internalNodes>\n          <leafValues>\n            2.2264319658279419e-01 -4.3685391545295715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5553 -1.6813250258564949e-03</internalNodes>\n          <leafValues>\n            5.5582441389560699e-02 -1.7739319801330566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5554 -1.6619000583887100e-02</internalNodes>\n          <leafValues>\n            -2.7812969684600830e-01 1.9737830385565758e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5555 -3.2801620662212372e-02</internalNodes>\n          <leafValues>\n            -2.3325189948081970e-01 3.6663819104433060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5556 2.4526590108871460e-01</internalNodes>\n          <leafValues>\n            -2.9738940298557281e-02 3.1338408589363098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5557 -1.7271770164370537e-02</internalNodes>\n          <leafValues>\n            5.2818918228149414e-01 -1.4151779934763908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5558 2.0111909136176109e-02</internalNodes>\n          <leafValues>\n            2.7173580601811409e-02 -8.3122722804546356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5559 1.6076749190688133e-02</internalNodes>\n          <leafValues>\n            5.6346639990806580e-02 -1.5893140435218811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5560 -1.0179769992828369e-01</internalNodes>\n          <leafValues>\n            6.0448008775711060e-01 -7.6062050648033619e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5561 -4.4865649193525314e-02</internalNodes>\n          <leafValues>\n            3.3077031373977661e-01 -2.5329189375042915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5562 2.7094980701804161e-02</internalNodes>\n          <leafValues>\n            -6.9251723587512970e-02 1.5350599586963654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5563 -3.7675891071557999e-02</internalNodes>\n          <leafValues>\n            -3.1949838995933533e-01 2.9909679666161537e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5564 -8.2310457946732640e-04</internalNodes>\n          <leafValues>\n            6.0612969100475311e-02 -1.0531579703092575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5565 5.5686049163341522e-02</internalNodes>\n          <leafValues>\n            -4.0920350700616837e-02 2.2959649562835693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5566 -1.6866069927345961e-04</internalNodes>\n          <leafValues>\n            -7.7643588185310364e-02 2.9549270868301392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5567 -2.3873209953308105e-02</internalNodes>\n          <leafValues>\n            2.7944079041481018e-01 -3.1888458877801895e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5568 -1.5003600157797337e-02</internalNodes>\n          <leafValues>\n            2.5077390670776367e-01 -4.5932788401842117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5569 -1.4522319659590721e-02</internalNodes>\n          <leafValues>\n            -1.6453540325164795e-01 5.5180910974740982e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5570 -7.4650160968303680e-03</internalNodes>\n          <leafValues>\n            -1.2690469622612000e-01 7.1543112397193909e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5571 5.4984640330076218e-02</internalNodes>\n          <leafValues>\n            -1.3730799779295921e-02 6.5119642019271851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5572 -8.8030762970447540e-02</internalNodes>\n          <leafValues>\n            2.5416490435600281e-01 -1.2233870103955269e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5573 -3.6195501685142517e-02</internalNodes>\n          <leafValues>\n            -4.4917309284210205e-01 2.1093770861625671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5574 3.7063211202621460e-02</internalNodes>\n          <leafValues>\n            -6.6644148901104927e-03 2.4940170347690582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5575 -1.0568380355834961e-02</internalNodes>\n          <leafValues>\n            -4.1061571240425110e-01 2.1398089826107025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5576 1.2662780284881592e-01</internalNodes>\n          <leafValues>\n            5.2506178617477417e-03 -3.3240249752998352e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5577 -8.7341770995408297e-04</internalNodes>\n          <leafValues>\n            3.2687219977378845e-01 -2.7704829350113869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5578 -1.0967969428747892e-03</internalNodes>\n          <leafValues>\n            -2.7710831165313721e-01 3.6352828145027161e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5579 -7.9738020896911621e-02</internalNodes>\n          <leafValues>\n            -5.8329159021377563e-01 1.4061779715120792e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5580 -3.8278030697256327e-03</internalNodes>\n          <leafValues>\n            3.5459451377391815e-02 -1.3996809720993042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5581 2.0333999767899513e-02</internalNodes>\n          <leafValues>\n            -2.1421350538730621e-02 5.1610380411148071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5582 7.5564032886177301e-04</internalNodes>\n          <leafValues>\n            -1.0803470015525818e-01 3.3538289368152618e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5583 1.7855849862098694e-01</internalNodes>\n          <leafValues>\n            9.4842249527573586e-03 -8.1858187913894653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5584 -3.4745071083307266e-02</internalNodes>\n          <leafValues>\n            -5.8172190189361572e-01 1.1315549723803997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5585 5.1304209046065807e-03</internalNodes>\n          <leafValues>\n            -1.0659860074520111e-01 7.4440896511077881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5586 -3.3936198800802231e-02</internalNodes>\n          <leafValues>\n            -4.5997759699821472e-01 1.5264419838786125e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5587 -1.0171560570597649e-03</internalNodes>\n          <leafValues>\n            1.0301309823989868e-01 -8.9842960238456726e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5588 6.3489019870758057e-02</internalNodes>\n          <leafValues>\n            6.8669100292026997e-03 -7.6022517681121826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5589 2.4077939987182617e-01</internalNodes>\n          <leafValues>\n            -2.1571479737758636e-02 4.1113030910491943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5590 -5.1963441073894501e-02</internalNodes>\n          <leafValues>\n            -2.8517320752143860e-01 4.0943060070276260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5591 3.6408171057701111e-02</internalNodes>\n          <leafValues>\n            -5.0460960716009140e-02 1.6671819984912872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5592 9.6712149679660797e-03</internalNodes>\n          <leafValues>\n            -4.8915110528469086e-02 1.8224430084228516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5593 2.2268150001764297e-02</internalNodes>\n          <leafValues>\n            6.1390981078147888e-02 -1.5445849299430847e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5594 -7.0929281413555145e-02</internalNodes>\n          <leafValues>\n            5.0010168552398682e-01 -3.9896317757666111e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5595 2.0806699467357248e-04</internalNodes>\n          <leafValues>\n            -1.4475630223751068e-01 6.3607528805732727e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5596 -9.2365043237805367e-03</internalNodes>\n          <leafValues>\n            -2.1817289292812347e-01 3.8856260478496552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5597 2.2781990468502045e-02</internalNodes>\n          <leafValues>\n            2.0108619704842567e-02 -3.8452360033988953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5598 -7.0844120346009731e-03</internalNodes>\n          <leafValues>\n            -4.8885490745306015e-02 4.6367339789867401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5599 -8.4006279706954956e-02</internalNodes>\n          <leafValues>\n            3.5921669006347656e-01 -2.2461889311671257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5600 -7.0446580648422241e-02</internalNodes>\n          <leafValues>\n            -8.8395321369171143e-01 2.9730550013482571e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5601 4.8899810761213303e-02</internalNodes>\n          <leafValues>\n            2.3936219513416290e-02 -3.6770141124725342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5602 2.9677329584956169e-02</internalNodes>\n          <leafValues>\n            1.6608120873570442e-02 -2.2972689568996429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5603 2.5721399579197168e-03</internalNodes>\n          <leafValues>\n            -3.2572209835052490e-01 2.4146009236574173e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5604 1.6117929480969906e-03</internalNodes>\n          <leafValues>\n            2.9355300590395927e-02 -3.7541579455137253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5605 1.7546640709042549e-02</internalNodes>\n          <leafValues>\n            -5.0879240036010742e-02 1.5283130109310150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5606 -4.6326398849487305e-02</internalNodes>\n          <leafValues>\n            -2.2843320667743683e-01 1.4442530460655689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5607 -3.3205670118331909e-01</internalNodes>\n          <leafValues>\n            7.4457818269729614e-01 -1.0856879875063896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5608 -4.2317830026149750e-02</internalNodes>\n          <leafValues>\n            -1.4666019380092621e-01 5.7799231261014938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5609 3.2436659093946218e-03</internalNodes>\n          <leafValues>\n            5.4021451622247696e-02 -1.7029410600662231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5610 -2.0900890231132507e-02</internalNodes>\n          <leafValues>\n            -4.0789291262626648e-01 2.5334810838103294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5611 2.0325010642409325e-02</internalNodes>\n          <leafValues>\n            3.3015929162502289e-02 -2.4503390491008759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5612 -4.6341929584741592e-02</internalNodes>\n          <leafValues>\n            1.5976649522781372e-01 -4.1177939623594284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5613 -3.4356329590082169e-02</internalNodes>\n          <leafValues>\n            1.6021409630775452e-01 -6.2500953674316406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5614 2.4465970695018768e-02</internalNodes>\n          <leafValues>\n            -3.7487599998712540e-02 2.2807280719280243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5615 -1.8139539286494255e-02</internalNodes>\n          <leafValues>\n            -1.5909589827060699e-01 6.0539811849594116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5616 6.4394161105155945e-02</internalNodes>\n          <leafValues>\n            6.6441670060157776e-03 -7.4860227108001709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5617 9.6367759397253394e-04</internalNodes>\n          <leafValues>\n            -9.0620808303356171e-02 9.4118133187294006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5618 2.0024490356445312e-01</internalNodes>\n          <leafValues>\n            5.9731658548116684e-03 -8.2521688938140869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5619 -6.3498668372631073e-02</internalNodes>\n          <leafValues>\n            -6.9635838270187378e-01 9.3487137928605080e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5620 -1.9232399761676788e-02</internalNodes>\n          <leafValues>\n            1.1236680299043655e-01 -2.9199739918112755e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5621 2.5418749451637268e-01</internalNodes>\n          <leafValues>\n            1.3959039933979511e-02 -5.1584947109222412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5622 1.0437460243701935e-01</internalNodes>\n          <leafValues>\n            -2.7743030339479446e-02 2.7373430132865906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5623 8.5034370422363281e-03</internalNodes>\n          <leafValues>\n            5.4144650697708130e-02 -1.3029509782791138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5624 5.2647730335593224e-03</internalNodes>\n          <leafValues>\n            -4.8077501356601715e-02 1.0371380299329758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5625 -2.4193519726395607e-02</internalNodes>\n          <leafValues>\n            1.9932989776134491e-01 -3.7111040204763412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5626 -4.6968772076070309e-03</internalNodes>\n          <leafValues>\n            -6.5797090530395508e-02 3.3837348222732544e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5627 -2.3464579135179520e-02</internalNodes>\n          <leafValues>\n            -2.6043030619621277e-01 3.0933089554309845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5628 -2.9029840603470802e-02</internalNodes>\n          <leafValues>\n            2.0683619379997253e-01 -2.7628650888800621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5629 7.9100236296653748e-02</internalNodes>\n          <leafValues>\n            7.7356752008199692e-03 -9.1816711425781250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5630 6.2152887694537640e-03</internalNodes>\n          <leafValues>\n            -7.3988027870655060e-02 8.7727412581443787e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5631 -6.7013278603553772e-02</internalNodes>\n          <leafValues>\n            3.7628298997879028e-01 -2.0892709493637085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5632 -7.9359989613294601e-03</internalNodes>\n          <leafValues>\n            -8.9532703161239624e-02 6.6559307277202606e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5633 1.3035970041528344e-03</internalNodes>\n          <leafValues>\n            -6.6657140851020813e-02 1.1399099975824356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5634 -1.1964319646358490e-01</internalNodes>\n          <leafValues>\n            -6.0656189918518066e-01 7.3508038185536861e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5635 -2.2869240492582321e-03</internalNodes>\n          <leafValues>\n            7.3336817324161530e-02 -1.1889570206403732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5636 -1.1462569981813431e-01</internalNodes>\n          <leafValues>\n            2.9288530349731445e-01 -6.7763519473373890e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5637 4.8477489501237869e-02</internalNodes>\n          <leafValues>\n            -1.7062950879335403e-02 4.2953211069107056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5638 -1.3129960279911757e-03</internalNodes>\n          <leafValues>\n            -7.4319638311862946e-02 6.2149789184331894e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5639 -6.6344782710075378e-02</internalNodes>\n          <leafValues>\n            -5.8945667743682861e-01 1.3225819915533066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5640 -4.6543189091607928e-04</internalNodes>\n          <leafValues>\n            5.7886548340320587e-02 -6.4295299351215363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5641 -1.3286540284752846e-02</internalNodes>\n          <leafValues>\n            1.4123329520225525e-01 -6.1506468802690506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5642 7.3928399942815304e-03</internalNodes>\n          <leafValues>\n            -7.2719991207122803e-02 4.2179141193628311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5643 -4.7434169799089432e-02</internalNodes>\n          <leafValues>\n            3.2672271132469177e-01 -2.9001530259847641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5644 1.3546790182590485e-01</internalNodes>\n          <leafValues>\n            1.0393570177257061e-02 -4.5354479551315308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5645 -2.5216810405254364e-02</internalNodes>\n          <leafValues>\n            -1.9075979292392731e-01 4.1522741317749023e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5646 -4.9431398510932922e-02</internalNodes>\n          <leafValues>\n            -9.4192171096801758e-01 3.5473550669848919e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5647 -4.8375181853771210e-02</internalNodes>\n          <leafValues>\n            -8.3028668165206909e-01 7.2369067929685116e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5648 -1.4348509721457958e-02</internalNodes>\n          <leafValues>\n            -2.1860499680042267e-01 3.1486429274082184e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5649 -5.5373171344399452e-03</internalNodes>\n          <leafValues>\n            -2.1521030366420746e-01 4.4235888868570328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5650 2.1771800518035889e-01</internalNodes>\n          <leafValues>\n            -5.0501842051744461e-03 4.9025520682334900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5651 1.7441399395465851e-01</internalNodes>\n          <leafValues>\n            -9.7074145451188087e-03 7.4196231365203857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5652 8.8840499520301819e-02</internalNodes>\n          <leafValues>\n            -5.8005251921713352e-03 3.3403220772743225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5653 -3.8012791424989700e-02</internalNodes>\n          <leafValues>\n            5.0677591562271118e-01 -1.3809430412948132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5654 -6.3611388206481934e-02</internalNodes>\n          <leafValues>\n            -5.6696820259094238e-01 7.9266652464866638e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5655 9.8358482122421265e-02</internalNodes>\n          <leafValues>\n            3.4634899348020554e-02 -1.9651760160923004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5656 2.2929610684514046e-02</internalNodes>\n          <leafValues>\n            -4.4682640582323074e-02 6.0062419623136520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5657 -3.9763651788234711e-02</internalNodes>\n          <leafValues>\n            -2.8310349583625793e-01 2.6087069883942604e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5658 1.1215689778327942e-01</internalNodes>\n          <leafValues>\n            -4.3225709348917007e-02 1.5505640208721161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5659 -1.4957940578460693e-01</internalNodes>\n          <leafValues>\n            4.1476088762283325e-01 -2.5112669914960861e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5660 1.4239370357245207e-03</internalNodes>\n          <leafValues>\n            -2.2813330590724945e-01 2.2414619103074074e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5661 -1.1346139945089817e-02</internalNodes>\n          <leafValues>\n            -2.6083931326866150e-01 2.6456480845808983e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5662 -9.0518407523632050e-02</internalNodes>\n          <leafValues>\n            6.0067182779312134e-01 -1.2559159658849239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5663 3.6097481846809387e-02</internalNodes>\n          <leafValues>\n            1.9451009109616280e-02 -4.0998241305351257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5664 -2.5657469406723976e-02</internalNodes>\n          <leafValues>\n            2.3453080654144287e-01 -3.2354518771171570e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5665 -9.2462729662656784e-03</internalNodes>\n          <leafValues>\n            1.4458569884300232e-01 -5.7280141860246658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5666 6.1006739735603333e-02</internalNodes>\n          <leafValues>\n            1.9963319599628448e-01 -3.5018790513277054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5667 -2.2736669052392244e-03</internalNodes>\n          <leafValues>\n            -2.7180460095405579e-01 3.5324309021234512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5668 -1.1173350363969803e-01</internalNodes>\n          <leafValues>\n            2.6010888814926147e-01 -8.4183625876903534e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5669 1.4601589739322662e-01</internalNodes>\n          <leafValues>\n            -4.3707858771085739e-02 1.9343809783458710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5670 -3.9008598774671555e-02</internalNodes>\n          <leafValues>\n            -2.4021549522876740e-01 1.9324809312820435e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5671 -3.2065149396657944e-02</internalNodes>\n          <leafValues>\n            -1.4616030454635620e-01 5.0410438328981400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5672 -3.9755292236804962e-03</internalNodes>\n          <leafValues>\n            8.6786061525344849e-02 -7.5101003050804138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5673 -2.2264609113335609e-02</internalNodes>\n          <leafValues>\n            -1.7820209264755249e-01 4.2221881449222565e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5674 -6.0096651315689087e-02</internalNodes>\n          <leafValues>\n            3.3062270283699036e-01 -1.3347219675779343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5675 -8.3170406520366669e-02</internalNodes>\n          <leafValues>\n            6.9863271713256836e-01 -1.1014309711754322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5676 -7.7182397246360779e-02</internalNodes>\n          <leafValues>\n            -2.5630331039428711e-01 8.8049499318003654e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5677 6.8902172148227692e-02</internalNodes>\n          <leafValues>\n            1.0996440425515175e-02 -6.3520067930221558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5678 -5.0353281199932098e-02</internalNodes>\n          <leafValues>\n            2.2927890717983246e-01 -3.2763719558715820e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5679 2.4320879019796848e-03</internalNodes>\n          <leafValues>\n            -1.3213059306144714e-01 7.1088582277297974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5680 -1.4196460135281086e-02</internalNodes>\n          <leafValues>\n            7.1845069527626038e-02 -4.5263659209012985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5681 -4.5774779282510281e-03</internalNodes>\n          <leafValues>\n            -2.5832280516624451e-01 2.9419040307402611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5682 -1.4008210273459554e-03</internalNodes>\n          <leafValues>\n            4.4636521488428116e-02 -1.2310150265693665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5683 3.5062711685895920e-02</internalNodes>\n          <leafValues>\n            -1.8722500652074814e-02 4.5533668994903564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5684 3.9364919066429138e-02</internalNodes>\n          <leafValues>\n            -3.8776830770075321e-03 4.8229390382766724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5685 2.9430290684103966e-02</internalNodes>\n          <leafValues>\n            -5.6632690131664276e-02 1.3604450225830078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5686 7.9320840537548065e-02</internalNodes>\n          <leafValues>\n            -4.0827351622283459e-03 9.9998551607131958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5687 4.2696330696344376e-02</internalNodes>\n          <leafValues>\n            2.3583339527249336e-02 -3.7798878550529480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5688 2.5937719270586967e-02</internalNodes>\n          <leafValues>\n            5.0283338874578476e-02 -6.7249342799186707e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5689 2.7053659781813622e-02</internalNodes>\n          <leafValues>\n            1.0406839847564697e-01 -1.0069710016250610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5690 3.0322301387786865e-01</internalNodes>\n          <leafValues>\n            -5.1615409553050995e-02 1.2398669868707657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5691 7.4373193085193634e-02</internalNodes>\n          <leafValues>\n            -2.9979649931192398e-02 2.5944980978965759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5692 4.6059768646955490e-02</internalNodes>\n          <leafValues>\n            6.1678960919380188e-03 -7.0887911319732666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5693 3.6883510649204254e-02</internalNodes>\n          <leafValues>\n            1.5985019505023956e-02 -4.4436019659042358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5694 1.3493379950523376e-01</internalNodes>\n          <leafValues>\n            8.8313389569520950e-03 -7.3426938056945801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5695 1.4799199998378754e-01</internalNodes>\n          <leafValues>\n            6.9719799794256687e-03 -8.2078450918197632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5696 3.9690379053354263e-02</internalNodes>\n          <leafValues>\n            -1.8247799947857857e-02 2.6955920457839966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5697 -5.3511280566453934e-02</internalNodes>\n          <leafValues>\n            2.0000250637531281e-01 -3.9136700332164764e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5698 6.3795700669288635e-02</internalNodes>\n          <leafValues>\n            1.1616130359470844e-02 -2.5315120816230774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5699 -8.1078916788101196e-02</internalNodes>\n          <leafValues>\n            -7.7582788467407227e-01 9.7084697335958481e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5700 -4.8272658139467239e-02</internalNodes>\n          <leafValues>\n            -3.0734309554100037e-01 1.1298010125756264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5701 4.3912570923566818e-02</internalNodes>\n          <leafValues>\n            -3.9403300732374191e-02 1.9216950237751007e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>394</maxWeakCount>\n      <stageThreshold>-1.2940989732742310e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 5702 1.9188739359378815e-02</internalNodes>\n          <leafValues>\n            -2.1150399744510651e-01 1.3286529481410980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5703 -8.1222038716077805e-03</internalNodes>\n          <leafValues>\n            9.2491082847118378e-02 -1.7585119605064392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5704 1.5851219650357962e-03</internalNodes>\n          <leafValues>\n            -2.8565698862075806e-01 6.6710568964481354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5705 -4.3140850029885769e-03</internalNodes>\n          <leafValues>\n            -1.3885229825973511e-01 5.2694689482450485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5706 -1.7131429631263018e-03</internalNodes>\n          <leafValues>\n            1.3135610520839691e-01 -1.3149109482765198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5707 6.8447366356849670e-02</internalNodes>\n          <leafValues>\n            9.3052154406905174e-03 -2.5063261389732361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5708 -2.4445978924632072e-03</internalNodes>\n          <leafValues>\n            -1.7205530405044556e-01 9.8322823643684387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5709 1.0310600046068430e-03</internalNodes>\n          <leafValues>\n            2.3039160296320915e-02 -2.7527621388435364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5710 7.4603251414373517e-04</internalNodes>\n          <leafValues>\n            -2.3276780545711517e-01 5.2693009376525879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5711 -6.6399492789059877e-04</internalNodes>\n          <leafValues>\n            6.8990781903266907e-02 -8.4687709808349609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5712 -4.0997468749992549e-04</internalNodes>\n          <leafValues>\n            1.0501380264759064e-01 -1.0819009691476822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5713 -1.8094549886882305e-03</internalNodes>\n          <leafValues>\n            -1.8178839981555939e-01 4.4184140861034393e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5714 9.3385757645592093e-04</internalNodes>\n          <leafValues>\n            -1.4622689783573151e-01 7.2726443409919739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5715 -3.8197741378098726e-04</internalNodes>\n          <leafValues>\n            2.4009939283132553e-02 -1.7295800149440765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5716 -1.4950280310586095e-03</internalNodes>\n          <leafValues>\n            -1.9403380155563354e-01 4.8807919025421143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5717 -1.0159100405871868e-02</internalNodes>\n          <leafValues>\n            1.9173899292945862e-01 -5.2749071270227432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5718 5.9903519286308438e-05</internalNodes>\n          <leafValues>\n            -1.0791549831628799e-01 9.0988166630268097e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5719 -3.1967550516128540e-02</internalNodes>\n          <leafValues>\n            4.1109889745712280e-01 -2.2650640457868576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5720 1.4343270100653172e-02</internalNodes>\n          <leafValues>\n            2.4315539747476578e-02 -4.2680150270462036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5721 1.1039529927074909e-02</internalNodes>\n          <leafValues>\n            -6.2717013061046600e-02 1.1330530047416687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5722 -8.4228850901126862e-03</internalNodes>\n          <leafValues>\n            -2.1369309723377228e-01 4.2059201747179031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5723 -2.0549839362502098e-02</internalNodes>\n          <leafValues>\n            1.5161630511283875e-01 -2.4594139307737350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5724 -6.5411031246185303e-03</internalNodes>\n          <leafValues>\n            1.4883629977703094e-01 -6.1179339885711670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5725 -1.3324400410056114e-02</internalNodes>\n          <leafValues>\n            -2.0791970193386078e-01 4.8333309590816498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5726 7.0111267268657684e-02</internalNodes>\n          <leafValues>\n            -2.6863219216465950e-02 3.6322259902954102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5727 -2.6973750209435821e-04</internalNodes>\n          <leafValues>\n            6.0876660048961639e-02 -1.1272370070219040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5728 -1.3509000418707728e-03</internalNodes>\n          <leafValues>\n            -1.8552079796791077e-01 5.2154958248138428e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5729 -2.8083190321922302e-02</internalNodes>\n          <leafValues>\n            3.5111880302429199e-01 -2.3596329614520073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5730 -1.0003290139138699e-02</internalNodes>\n          <leafValues>\n            -2.9058480262756348e-01 3.2125689089298248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5731 -1.6111029544845223e-03</internalNodes>\n          <leafValues>\n            9.8113670945167542e-02 -5.2203711122274399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5732 -1.8411900848150253e-02</internalNodes>\n          <leafValues>\n            -1.8082669377326965e-01 5.4536700248718262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5733 -7.1738816797733307e-02</internalNodes>\n          <leafValues>\n            -7.6654988527297974e-01 3.3518690615892410e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5734 -2.7943260502070189e-03</internalNodes>\n          <leafValues>\n            1.5871369838714600e-01 -6.4271800220012665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5735 -1.6874749958515167e-01</internalNodes>\n          <leafValues>\n            -6.9956189393997192e-01 4.8861699178814888e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5736 -1.2672400334849954e-03</internalNodes>\n          <leafValues>\n            3.1616039574146271e-02 -2.4953269958496094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5737 2.0807750523090363e-02</internalNodes>\n          <leafValues>\n            1.7053410410881042e-02 -2.4331410229206085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5738 -1.5869849594309926e-03</internalNodes>\n          <leafValues>\n            9.3171089887619019e-02 -8.1361927092075348e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5739 -1.0014690458774567e-02</internalNodes>\n          <leafValues>\n            -2.7789619565010071e-01 2.6569239795207977e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5740 -5.7948171161115170e-03</internalNodes>\n          <leafValues>\n            -2.2287739813327789e-01 3.5975661128759384e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5741 2.7189950924366713e-03</internalNodes>\n          <leafValues>\n            -9.0631909668445587e-02 5.6820400059223175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5742 3.8845159113407135e-02</internalNodes>\n          <leafValues>\n            1.2280859984457493e-02 -5.8521348237991333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5743 -1.4158680103719234e-02</internalNodes>\n          <leafValues>\n            1.8153870105743408e-01 -3.1109429895877838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5744 -1.8278600275516510e-01</internalNodes>\n          <leafValues>\n            -9.0013808012008667e-01 7.6544750481843948e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5745 2.7588419616222382e-02</internalNodes>\n          <leafValues>\n            -1.2460039928555489e-02 2.0069369673728943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5746 -1.4784430153667927e-02</internalNodes>\n          <leafValues>\n            -8.9910492300987244e-02 8.1648677587509155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5747 1.1625719815492630e-01</internalNodes>\n          <leafValues>\n            2.3692469112575054e-03 -9.9998068809509277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5748 3.5341090988367796e-03</internalNodes>\n          <leafValues>\n            -6.1760541051626205e-02 1.3490639626979828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5749 5.1878788508474827e-03</internalNodes>\n          <leafValues>\n            1.8745860084891319e-02 -1.7449170351028442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5750 7.9457357525825500e-02</internalNodes>\n          <leafValues>\n            -2.3402990773320198e-02 3.3502200245857239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5751 2.7684379369020462e-02</internalNodes>\n          <leafValues>\n            2.3663910105824471e-02 -3.3256360888481140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5752 -4.4806320220232010e-03</internalNodes>\n          <leafValues>\n            -1.4658750593662262e-01 4.7376811504364014e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5753 5.6939688511192799e-03</internalNodes>\n          <leafValues>\n            -5.6776121258735657e-02 6.7580856382846832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5754 7.7299480326473713e-03</internalNodes>\n          <leafValues>\n            -3.1156649813055992e-02 2.3102590441703796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5755 3.9786100387573242e-03</internalNodes>\n          <leafValues>\n            -5.6882441043853760e-02 1.3271529972553253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5756 -1.1275880038738251e-02</internalNodes>\n          <leafValues>\n            -2.0938649773597717e-01 3.5291459411382675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5757 -2.4308220017701387e-03</internalNodes>\n          <leafValues>\n            -2.0176360011100769e-01 3.4513931721448898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5758 5.7369591668248177e-03</internalNodes>\n          <leafValues>\n            -5.5607158690690994e-02 1.1532089859247208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5759 4.6170800924301147e-03</internalNodes>\n          <leafValues>\n            -5.6083500385284424e-02 8.1762917339801788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5760 -4.7089671716094017e-03</internalNodes>\n          <leafValues>\n            -1.3351219892501831e-01 5.6296080350875854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5761 -3.2688070088624954e-02</internalNodes>\n          <leafValues>\n            2.7922388911247253e-01 -1.0867659933865070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5762 8.8686197996139526e-02</internalNodes>\n          <leafValues>\n            1.8268220126628876e-02 -3.5637390613555908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5763 4.5751677826046944e-03</internalNodes>\n          <leafValues>\n            -5.1558461040258408e-02 6.3948810100555420e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5764 4.9765850417315960e-03</internalNodes>\n          <leafValues>\n            -5.4684590548276901e-02 1.1907110363245010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5765 -6.4881290309131145e-03</internalNodes>\n          <leafValues>\n            -9.9121123552322388e-02 2.6508849114179611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5766 2.4523450993001461e-03</internalNodes>\n          <leafValues>\n            -9.5045946538448334e-02 6.6802926361560822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5767 7.0354789495468140e-03</internalNodes>\n          <leafValues>\n            1.0705590248107910e-01 -6.2395099550485611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5768 4.2746789753437042e-02</internalNodes>\n          <leafValues>\n            -1.6092179343104362e-02 4.3256199359893799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5769 -4.5301730278879404e-04</internalNodes>\n          <leafValues>\n            3.6420568823814392e-02 -9.9322892725467682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5770 -5.2631930448114872e-03</internalNodes>\n          <leafValues>\n            -1.1416749656200409e-01 5.7260219007730484e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5771 1.0581909446045756e-03</internalNodes>\n          <leafValues>\n            3.3220488578081131e-02 -1.1831220239400864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5772 2.5088949128985405e-02</internalNodes>\n          <leafValues>\n            -6.0655020177364349e-02 1.2601740658283234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5773 2.4252159893512726e-01</internalNodes>\n          <leafValues>\n            2.2060840856283903e-03 -1.0000120401382446e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5774 -1.4393079280853271e-01</internalNodes>\n          <leafValues>\n            3.7419798970222473e-01 -2.2252110764384270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5775 -6.0972762294113636e-03</internalNodes>\n          <leafValues>\n            -1.1038099974393845e-01 4.5996960252523422e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5776 6.1375470831990242e-03</internalNodes>\n          <leafValues>\n            3.8307808339595795e-02 -1.8086770176887512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5777 -3.6617079749703407e-03</internalNodes>\n          <leafValues>\n            3.8439918309450150e-02 -6.2540791928768158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5778 -1.5854850411415100e-01</internalNodes>\n          <leafValues>\n            3.4469398856163025e-01 -1.9837500527501106e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5779 6.7219287157058716e-02</internalNodes>\n          <leafValues>\n            9.5165139064192772e-03 -5.0206458568572998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5780 2.2499680053442717e-03</internalNodes>\n          <leafValues>\n            -1.3063929975032806e-01 6.4832933247089386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5781 8.4626786410808563e-02</internalNodes>\n          <leafValues>\n            5.9339799918234348e-03 -4.1516590118408203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5782 -9.5411221263930202e-04</internalNodes>\n          <leafValues>\n            -9.3790747225284576e-02 7.5486607849597931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5783 -7.6813949272036552e-03</internalNodes>\n          <leafValues>\n            -1.4821960031986237e-01 2.9010580852627754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5784 -2.5593319907784462e-02</internalNodes>\n          <leafValues>\n            1.4859579503536224e-01 -4.7195930033922195e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5785 2.1508369594812393e-02</internalNodes>\n          <leafValues>\n            2.3782620206475258e-02 -9.6659287810325623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5786 3.4463100135326385e-02</internalNodes>\n          <leafValues>\n            -3.7410069257020950e-02 2.2015300393104553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5787 -3.7860300391912460e-02</internalNodes>\n          <leafValues>\n            -5.0047469139099121e-01 1.4059869572520256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5788 1.2028450146317482e-03</internalNodes>\n          <leafValues>\n            -6.5087057650089264e-02 8.9583486318588257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5789 1.6753520816564560e-02</internalNodes>\n          <leafValues>\n            4.9179811030626297e-03 -4.3030908703804016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5790 1.6640779795125127e-03</internalNodes>\n          <leafValues>\n            4.0807429701089859e-02 -1.4469960331916809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5791 3.4473428968340158e-03</internalNodes>\n          <leafValues>\n            -3.9910178631544113e-02 1.5272960066795349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5792 8.9918142184615135e-03</internalNodes>\n          <leafValues>\n            7.1071267127990723e-02 -8.6169913411140442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5793 8.3185202674940228e-04</internalNodes>\n          <leafValues>\n            -2.5739189982414246e-01 1.7941089347004890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5794 -6.8142730742692947e-03</internalNodes>\n          <leafValues>\n            1.3823160529136658e-01 -5.3994540125131607e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5795 2.9746210202574730e-03</internalNodes>\n          <leafValues>\n            -4.1550260037183762e-02 3.9839770644903183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5796 2.5836620479822159e-03</internalNodes>\n          <leafValues>\n            -7.0656493306159973e-02 9.5045506954193115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5797 2.7143809711560607e-04</internalNodes>\n          <leafValues>\n            5.8070071041584015e-02 -1.2781760096549988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5798 3.5418298840522766e-01</internalNodes>\n          <leafValues>\n            5.4909070022404194e-03 -9.7960698604583740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5799 2.5318650528788567e-02</internalNodes>\n          <leafValues>\n            -1.4410969801247120e-02 2.6219129562377930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5800 -2.2658439411316067e-04</internalNodes>\n          <leafValues>\n            5.2997849881649017e-02 -1.1629349738359451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5801 6.8859090097248554e-03</internalNodes>\n          <leafValues>\n            1.6437310725450516e-02 -2.0349490642547607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5802 1.1607459746301174e-02</internalNodes>\n          <leafValues>\n            -3.6651011556386948e-02 1.5184010565280914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5803 -4.8253959976136684e-03</internalNodes>\n          <leafValues>\n            -2.3476150631904602e-01 3.7914011627435684e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5804 2.5656020734459162e-03</internalNodes>\n          <leafValues>\n            3.5185638815164566e-02 -1.8540710210800171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5805 1.2601399421691895e-01</internalNodes>\n          <leafValues>\n            -9.8542850464582443e-03 2.5520691275596619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5806 2.7164958883076906e-03</internalNodes>\n          <leafValues>\n            -2.1748440340161324e-02 2.5467529892921448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5807 3.2356029748916626e-01</internalNodes>\n          <leafValues>\n            8.8657345622777939e-03 -7.0383572578430176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5808 -8.4016058826819062e-04</internalNodes>\n          <leafValues>\n            3.6831360310316086e-02 -1.4953260123729706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5809 3.3291990403085947e-03</internalNodes>\n          <leafValues>\n            4.8185840249061584e-02 -1.2290470302104950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5810 2.1130539476871490e-01</internalNodes>\n          <leafValues>\n            6.5245870500802994e-03 -8.8293862342834473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5811 5.0388509407639503e-03</internalNodes>\n          <leafValues>\n            -6.7079946398735046e-02 3.7849709391593933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5812 -2.7862399816513062e-02</internalNodes>\n          <leafValues>\n            3.3469489216804504e-01 -1.8816500902175903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5813 3.8636629469692707e-03</internalNodes>\n          <leafValues>\n            4.3644730001688004e-02 -1.7481489479541779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5814 1.0480300337076187e-01</internalNodes>\n          <leafValues>\n            -1.5737529844045639e-02 4.2094239592552185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5815 -3.4130848944187164e-03</internalNodes>\n          <leafValues>\n            -1.0835570096969604e-01 4.3717790395021439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5816 -4.6396970748901367e-02</internalNodes>\n          <leafValues>\n            -7.5680077075958252e-01 8.6701400578022003e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5817 5.3708078339695930e-03</internalNodes>\n          <leafValues>\n            -4.1797801852226257e-02 1.4824719727039337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5818 -6.1126388609409332e-03</internalNodes>\n          <leafValues>\n            1.8673719465732574e-01 -4.3387491255998611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5819 4.2509321123361588e-02</internalNodes>\n          <leafValues>\n            1.1690679937601089e-02 -4.3740659952163696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5820 1.0473020374774933e-02</internalNodes>\n          <leafValues>\n            4.3143630027770996e-02 -1.5654399991035461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5821 -4.7223959118127823e-02</internalNodes>\n          <leafValues>\n            -7.4483537673950195e-01 3.4918629098683596e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5822 5.3090360015630722e-02</internalNodes>\n          <leafValues>\n            1.0408150032162666e-02 -5.3499448299407959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5823 -7.0432561915367842e-04</internalNodes>\n          <leafValues>\n            3.3384170383214951e-02 -7.3706030845642090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5824 7.5942431576550007e-03</internalNodes>\n          <leafValues>\n            -2.9107049107551575e-02 1.9468860328197479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5825 2.2676989436149597e-02</internalNodes>\n          <leafValues>\n            3.3803820610046387e-02 -2.7627611160278320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5826 6.6533521749079227e-03</internalNodes>\n          <leafValues>\n            -2.6578240096569061e-02 2.4283319711685181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5827 3.7712270859628916e-03</internalNodes>\n          <leafValues>\n            2.6554299518465996e-02 -6.4952917397022247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5828 -2.0740530453622341e-03</internalNodes>\n          <leafValues>\n            -1.7968970537185669e-01 3.1532160937786102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5829 -1.5632519498467445e-03</internalNodes>\n          <leafValues>\n            5.3109679371118546e-02 -8.7415628135204315e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5830 1.2540889903903008e-02</internalNodes>\n          <leafValues>\n            -3.4136459231376648e-02 2.2097539901733398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5831 -3.2660199794918299e-03</internalNodes>\n          <leafValues>\n            -5.5261608213186264e-02 3.2669559121131897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5832 -8.2185603678226471e-03</internalNodes>\n          <leafValues>\n            -1.4478379487991333e-01 5.5743928998708725e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5833 -5.5811040103435516e-02</internalNodes>\n          <leafValues>\n            1.7237940430641174e-01 -1.4456519857048988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5834 -1.4723159372806549e-01</internalNodes>\n          <leafValues>\n            -8.1392312049865723e-01 7.4356291443109512e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5835 -5.8468529023230076e-03</internalNodes>\n          <leafValues>\n            -6.9043442606925964e-02 1.9456790760159492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5836 1.9462220370769501e-02</internalNodes>\n          <leafValues>\n            -3.5472229123115540e-02 1.6666300594806671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5837 5.8353468775749207e-02</internalNodes>\n          <leafValues>\n            3.0551329255104065e-03 -3.9289128780364990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5838 4.3785829097032547e-02</internalNodes>\n          <leafValues>\n            1.3574630022048950e-02 -4.6152359247207642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5839 -5.1904350519180298e-02</internalNodes>\n          <leafValues>\n            6.3802438974380493e-01 -9.6664745360612869e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5840 -7.7811058145016432e-04</internalNodes>\n          <leafValues>\n            -9.9303223192691803e-02 5.6094601750373840e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5841 4.9657518975436687e-03</internalNodes>\n          <leafValues>\n            4.1419368237257004e-02 -1.1274819821119308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5842 -5.4516079835593700e-03</internalNodes>\n          <leafValues>\n            1.7399060726165771e-01 -4.1147731244564056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5843 5.0428751856088638e-03</internalNodes>\n          <leafValues>\n            -4.1255220770835876e-02 1.3794229924678802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5844 -1.6985220136120915e-03</internalNodes>\n          <leafValues>\n            -2.2874790430068970e-01 2.5274980813264847e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5845 8.2764238119125366e-02</internalNodes>\n          <leafValues>\n            3.3066510222852230e-03 -6.9113439321517944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5846 3.9285849779844284e-03</internalNodes>\n          <leafValues>\n            -7.9043358564376831e-02 6.6218852996826172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5847 -3.0601240694522858e-02</internalNodes>\n          <leafValues>\n            -2.6517450809478760e-01 1.6467850655317307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5848 -1.9941160455346107e-02</internalNodes>\n          <leafValues>\n            1.5431809425354004e-01 -3.6100689321756363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5849 8.0520063638687134e-02</internalNodes>\n          <leafValues>\n            1.7015919089317322e-02 -3.3448880910873413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5850 7.0323847234249115e-02</internalNodes>\n          <leafValues>\n            1.7122440040111542e-02 -3.3302140235900879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5851 -5.2850939333438873e-02</internalNodes>\n          <leafValues>\n            6.2421400099992752e-02 -1.4690199866890907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5852 -7.1594159817323089e-04</internalNodes>\n          <leafValues>\n            -1.1335150152444839e-01 5.2260790020227432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5853 2.1469970047473907e-01</internalNodes>\n          <leafValues>\n            9.9299731664359570e-04 -9.9997580051422119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5854 8.7042592465877533e-02</internalNodes>\n          <leafValues>\n            -1.2329760007560253e-02 5.0260668992996216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5855 -5.8731262106448412e-04</internalNodes>\n          <leafValues>\n            -9.9346466362476349e-02 5.1705610007047653e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5856 -4.4215220957994461e-02</internalNodes>\n          <leafValues>\n            -3.9368900656700134e-01 1.3920850120484829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5857 -8.7676227092742920e-02</internalNodes>\n          <leafValues>\n            3.0157440900802612e-01 -6.8702381104230881e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5858 -4.8453990370035172e-02</internalNodes>\n          <leafValues>\n            2.5477871298789978e-01 -2.2457750514149666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5859 -2.1567570511251688e-03</internalNodes>\n          <leafValues>\n            -1.3562899827957153e-01 3.1725399196147919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5860 3.9050900377333164e-03</internalNodes>\n          <leafValues>\n            4.9100890755653381e-02 -1.1861059814691544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5861 -3.9808028377592564e-03</internalNodes>\n          <leafValues>\n            4.8333909362554550e-02 -5.5897079408168793e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5862 2.9744929634034634e-03</internalNodes>\n          <leafValues>\n            -6.4802452921867371e-02 9.3583501875400543e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5863 2.5875229388475418e-02</internalNodes>\n          <leafValues>\n            1.8487609922885895e-02 -3.3436349034309387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5864 -1.9373580580577254e-03</internalNodes>\n          <leafValues>\n            2.2000649571418762e-01 -2.5404980406165123e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5865 -2.0171629264950752e-02</internalNodes>\n          <leafValues>\n            -7.8228309750556946e-02 4.5462790876626968e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5866 -2.6088140904903412e-02</internalNodes>\n          <leafValues>\n            1.7637069523334503e-01 -4.5097298920154572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5867 -2.6868300512433052e-02</internalNodes>\n          <leafValues>\n            -3.2656419277191162e-01 1.7994230613112450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5868 -7.0211151614785194e-04</internalNodes>\n          <leafValues>\n            3.9671998471021652e-02 -1.4533540606498718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5869 8.3507681265473366e-03</internalNodes>\n          <leafValues>\n            -2.3051729425787926e-02 1.8850760161876678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5870 4.6823569573462009e-03</internalNodes>\n          <leafValues>\n            2.9996560886502266e-02 -2.0701029896736145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5871 3.3109660726040602e-03</internalNodes>\n          <leafValues>\n            5.6536730378866196e-02 -1.6835589706897736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5872 7.6425541192293167e-03</internalNodes>\n          <leafValues>\n            -4.1423950344324112e-02 1.2557519972324371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5873 -2.4713110178709030e-03</internalNodes>\n          <leafValues>\n            7.2156153619289398e-02 -1.0767730325460434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5874 -9.9495360627770424e-03</internalNodes>\n          <leafValues>\n            -1.8187619745731354e-01 3.3567231148481369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5875 1.9820800516754389e-03</internalNodes>\n          <leafValues>\n            -5.6488718837499619e-02 1.0741490125656128e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5876 2.3254439234733582e-02</internalNodes>\n          <leafValues>\n            -1.6543349251151085e-02 3.6466678977012634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5877 -5.4177921265363693e-02</internalNodes>\n          <leafValues>\n            -1. 3.3418419770896435e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5878 6.1567849479615688e-04</internalNodes>\n          <leafValues>\n            4.0159329771995544e-02 -1.6460220515727997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5879 -4.2699510231614113e-03</internalNodes>\n          <leafValues>\n            -5.6978620588779449e-02 4.4480901211500168e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5880 1.9749389030039310e-03</internalNodes>\n          <leafValues>\n            5.9283681213855743e-02 -1.0791260004043579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5881 -5.8583128266036510e-03</internalNodes>\n          <leafValues>\n            1.3734050095081329e-01 -3.4231521189212799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5882 -7.2995189111679792e-04</internalNodes>\n          <leafValues>\n            -1.0075060278177261e-01 5.4733160883188248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5883 -2.9930740594863892e-02</internalNodes>\n          <leafValues>\n            6.3882559537887573e-02 -4.1027020663022995e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5884 -5.1738750189542770e-02</internalNodes>\n          <leafValues>\n            -7.2713458538055420e-01 7.4993381276726723e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5885 2.4021189659833908e-02</internalNodes>\n          <leafValues>\n            7.8491801396012306e-03 -5.5794471502304077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5886 -3.7574321031570435e-03</internalNodes>\n          <leafValues>\n            -1.6086879372596741e-01 3.1015990301966667e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5887 -6.2635682523250580e-02</internalNodes>\n          <leafValues>\n            9.0577863156795502e-02 -2.9033770784735680e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5888 1.9363429397344589e-02</internalNodes>\n          <leafValues>\n            -4.9920588731765747e-02 1.2835779786109924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5889 -3.5072889178991318e-02</internalNodes>\n          <leafValues>\n            2.1391840279102325e-01 -8.8168960064649582e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5890 -1.3243310153484344e-02</internalNodes>\n          <leafValues>\n            2.3349699378013611e-01 -2.3088019341230392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5891 -3.1290829181671143e-02</internalNodes>\n          <leafValues>\n            -6.9495099782943726e-01 9.3020889908075333e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5892 7.2391419671475887e-03</internalNodes>\n          <leafValues>\n            2.8485849499702454e-02 -1.8310770392417908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5893 6.6785318776965141e-03</internalNodes>\n          <leafValues>\n            -4.9132950603961945e-02 5.4181691259145737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5894 -3.6825571209192276e-02</internalNodes>\n          <leafValues>\n            3.3120208978652954e-01 -2.1359929814934731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5895 -4.5507341623306274e-02</internalNodes>\n          <leafValues>\n            -1.2893490493297577e-01 4.9545988440513611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5896 7.7639957889914513e-03</internalNodes>\n          <leafValues>\n            -3.6255620419979095e-02 1.5321409702301025e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5897 6.0417611151933670e-02</internalNodes>\n          <leafValues>\n            4.5740022324025631e-03 -6.7541092634201050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5898 2.4624960497021675e-03</internalNodes>\n          <leafValues>\n            5.3674161434173584e-02 -1.1326540261507034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5899 7.3594506829977036e-05</internalNodes>\n          <leafValues>\n            -3.5648930817842484e-02 2.5458969175815582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5900 -4.0958370082080364e-03</internalNodes>\n          <leafValues>\n            1.5562909841537476e-01 -3.9390601217746735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5901 2.8689370083156973e-05</internalNodes>\n          <leafValues>\n            -8.4823302924633026e-02 3.8254238665103912e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5902 -4.6220528893172741e-03</internalNodes>\n          <leafValues>\n            -1.8994529545307159e-01 3.3508758991956711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5903 -8.5343196988105774e-03</internalNodes>\n          <leafValues>\n            1.1212539672851562e-01 -3.3968489617109299e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5904 -5.8803848922252655e-02</internalNodes>\n          <leafValues>\n            -5.1244312524795532e-01 1.0789549909532070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5905 6.0719929635524750e-02</internalNodes>\n          <leafValues>\n            -1.2555030174553394e-02 2.2509759664535522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5906 1.1038020020350814e-03</internalNodes>\n          <leafValues>\n            -9.6294492483139038e-02 5.6727480143308640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5907 -3.8484560791403055e-03</internalNodes>\n          <leafValues>\n            4.0573459118604660e-02 -2.5326859205961227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5908 -1.0771050117909908e-02</internalNodes>\n          <leafValues>\n            8.8735632598400116e-02 -5.5628679692745209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5909 1.2016809545457363e-02</internalNodes>\n          <leafValues>\n            2.3566279560327530e-02 -2.4590580165386200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5910 -1.1656560236588120e-03</internalNodes>\n          <leafValues>\n            -3.7417300045490265e-02 1.6503289341926575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5911 3.2137628644704819e-02</internalNodes>\n          <leafValues>\n            1.4245970174670219e-02 -2.6480850577354431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5912 2.3331670090556145e-02</internalNodes>\n          <leafValues>\n            -3.5288721323013306e-02 1.8447829782962799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5913 -1.2685320340096951e-02</internalNodes>\n          <leafValues>\n            -1.1757309734821320e-01 1.6436910256743431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5914 7.3903938755393028e-05</internalNodes>\n          <leafValues>\n            -1.0271479934453964e-01 7.4301436543464661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5915 -1.0925470292568207e-01</internalNodes>\n          <leafValues>\n            -8.3165317773818970e-01 5.6438110768795013e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5916 -1.3324350118637085e-01</internalNodes>\n          <leafValues>\n            7.7729821205139160e-01 -8.3403270691633224e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5917 8.9381448924541473e-04</internalNodes>\n          <leafValues>\n            -5.9524301439523697e-02 4.1173089295625687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5918 1.0318649932742119e-02</internalNodes>\n          <leafValues>\n            1.5926430001854897e-02 -3.1637790799140930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5919 -5.2297548390924931e-03</internalNodes>\n          <leafValues>\n            -7.1166560053825378e-02 3.3489290624856949e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5920 1.6409620642662048e-02</internalNodes>\n          <leafValues>\n            -2.6454120874404907e-02 1.9589969515800476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5921 1.4068709686398506e-02</internalNodes>\n          <leafValues>\n            -3.9364140480756760e-02 1.3977420330047607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5922 6.6486410796642303e-03</internalNodes>\n          <leafValues>\n            6.4070828258991241e-02 -1.0493399947881699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5923 -1.8030619248747826e-02</internalNodes>\n          <leafValues>\n            8.3942912518978119e-02 -1.3399159535765648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5924 -4.4034369289875031e-02</internalNodes>\n          <leafValues>\n            -5.5825459957122803e-01 9.7633162513375282e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5925 -8.0966893583536148e-03</internalNodes>\n          <leafValues>\n            -2.0489789545536041e-01 2.6520200073719025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5926 5.0180461257696152e-03</internalNodes>\n          <leafValues>\n            -1.1661209911108017e-01 4.5791670680046082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5927 -1.7064629122614861e-02</internalNodes>\n          <leafValues>\n            2.6282730698585510e-01 -2.0390639081597328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5928 7.1850173175334930e-02</internalNodes>\n          <leafValues>\n            -6.9503681734204292e-03 6.7032539844512939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5929 -5.6914370507001877e-02</internalNodes>\n          <leafValues>\n            -1.3477900624275208e-01 1.8399080261588097e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5930 -3.2365729566663504e-03</internalNodes>\n          <leafValues>\n            6.9673851132392883e-02 -7.2314530611038208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5931 4.1818909347057343e-02</internalNodes>\n          <leafValues>\n            1.1151459999382496e-02 -5.1680111885070801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5932 -6.1106588691473007e-03</internalNodes>\n          <leafValues>\n            -1.3163940608501434e-01 4.3796509504318237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5933 -3.5560909658670425e-02</internalNodes>\n          <leafValues>\n            6.8005502223968506e-02 -3.6331020295619965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5934 6.8789169192314148e-02</internalNodes>\n          <leafValues>\n            1.4698959887027740e-02 -3.8212299346923828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5935 -7.8313373029232025e-02</internalNodes>\n          <leafValues>\n            2.0296069979667664e-01 -8.6810020729899406e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5936 3.9626220241189003e-03</internalNodes>\n          <leafValues>\n            -3.5797890275716782e-02 1.3905510306358337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5937 -3.3874038606882095e-02</internalNodes>\n          <leafValues>\n            -2.2253429889678955e-01 7.5455638580024242e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5938 -6.4755856990814209e-02</internalNodes>\n          <leafValues>\n            4.7521549463272095e-01 -1.0970680043101311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5939 2.6647940278053284e-02</internalNodes>\n          <leafValues>\n            1.5445309691131115e-02 -2.6785778999328613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5940 -3.0731109902262688e-02</internalNodes>\n          <leafValues>\n            -4.7668689489364624e-01 9.6429884433746338e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5941 -2.4022700265049934e-02</internalNodes>\n          <leafValues>\n            -1.0633960366249084e-01 1.2849040329456329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5942 -1.3036349555477500e-03</internalNodes>\n          <leafValues>\n            7.3524177074432373e-02 -6.8074919283390045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5943 -9.8344050347805023e-03</internalNodes>\n          <leafValues>\n            -1.1843550205230713e-01 4.2866699397563934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5944 8.7102197110652924e-02</internalNodes>\n          <leafValues>\n            -4.0088258683681488e-02 1.7804540693759918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5945 2.0411569625139236e-02</internalNodes>\n          <leafValues>\n            1.6849989071488380e-02 -3.8953658938407898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5946 9.5875263214111328e-02</internalNodes>\n          <leafValues>\n            5.9905550442636013e-03 -8.1525659561157227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5947 6.4893220551311970e-03</internalNodes>\n          <leafValues>\n            -2.4039229378104210e-02 5.3871169686317444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5948 -9.6279237186536193e-04</internalNodes>\n          <leafValues>\n            9.4299189746379852e-02 -6.4436018466949463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5949 -3.7659960798919201e-04</internalNodes>\n          <leafValues>\n            -6.2296878546476364e-02 4.1251849383115768e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5950 6.5272641368210316e-03</internalNodes>\n          <leafValues>\n            5.1325131207704544e-02 -1.3037790358066559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5951 2.1429110318422318e-02</internalNodes>\n          <leafValues>\n            -1.1989659629762173e-02 2.6280459761619568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5952 -5.0938720814883709e-03</internalNodes>\n          <leafValues>\n            6.3418947160243988e-02 -9.0566337108612061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5953 -2.5309680495411158e-03</internalNodes>\n          <leafValues>\n            6.0297761112451553e-02 -2.5049470365047455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5954 -1.5915350522845984e-03</internalNodes>\n          <leafValues>\n            -1.2171190232038498e-01 3.7737991660833359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5955 -3.4030709415674210e-02</internalNodes>\n          <leafValues>\n            4.6413430571556091e-01 -3.5409750416874886e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5956 5.1074200309813023e-03</internalNodes>\n          <leafValues>\n            3.9823830127716064e-02 -1.2645539641380310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5957 -9.6449116244912148e-03</internalNodes>\n          <leafValues>\n            3.3464258909225464e-01 -6.6040740348398685e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5958 1.1422860436141491e-02</internalNodes>\n          <leafValues>\n            -3.6080420017242432e-02 1.3714550435543060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5959 -5.1042139530181885e-03</internalNodes>\n          <leafValues>\n            -9.3986809253692627e-02 2.8844779357314110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5960 -2.6332271099090576e-01</internalNodes>\n          <leafValues>\n            4.9980929493904114e-01 -1.0173249989748001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5961 -2.4556639790534973e-01</internalNodes>\n          <leafValues>\n            -8.1778347492218018e-01 6.9596339017152786e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5962 -2.1419329941272736e-01</internalNodes>\n          <leafValues>\n            -5.1040518283843994e-01 9.4540230929851532e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5963 -1.4363219961524010e-02</internalNodes>\n          <leafValues>\n            -9.1000981628894806e-02 2.4646669626235962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5964 -1.2388969771564007e-03</internalNodes>\n          <leafValues>\n            1.1544570326805115e-01 -4.9565620720386505e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5965 2.1015120670199394e-02</internalNodes>\n          <leafValues>\n            -1.7765879631042480e-02 1.9577859342098236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5966 -4.1783051565289497e-03</internalNodes>\n          <leafValues>\n            -1.1172860115766525e-01 4.4625449925661087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5967 2.0896939095109701e-03</internalNodes>\n          <leafValues>\n            -3.3988729119300842e-02 6.5539501607418060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5968 1.6410060226917267e-02</internalNodes>\n          <leafValues>\n            -2.0373269915580750e-02 2.5331538915634155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5969 -6.4266882836818695e-02</internalNodes>\n          <leafValues>\n            -6.5880149602890015e-01 3.4550630953162909e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5970 6.8898178869858384e-04</internalNodes>\n          <leafValues>\n            6.7643247544765472e-02 -8.7556242942810059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5971 5.6662331335246563e-03</internalNodes>\n          <leafValues>\n            3.0638309195637703e-02 -1.1895540356636047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5972 -4.3778121471405029e-02</internalNodes>\n          <leafValues>\n            -2.8309130668640137e-01 1.7713630571961403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5973 3.4748481120914221e-03</internalNodes>\n          <leafValues>\n            -9.5787122845649719e-02 4.2630400508642197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5974 -1.1673940345644951e-02</internalNodes>\n          <leafValues>\n            -1.0502570122480392e-01 5.0903890281915665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5975 -3.4004659391939640e-03</internalNodes>\n          <leafValues>\n            1.0470719635486603e-01 -4.0939141064882278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5976 2.7091780211776495e-03</internalNodes>\n          <leafValues>\n            -6.0524601489305496e-02 1.3978950679302216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5977 -1.7439300194382668e-02</internalNodes>\n          <leafValues>\n            -3.2391169667243958e-01 1.4630249701440334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5978 -1.2598330155014992e-02</internalNodes>\n          <leafValues>\n            -2.0682629942893982e-01 2.5501869618892670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5979 1.8755869939923286e-02</internalNodes>\n          <leafValues>\n            -4.7925960272550583e-02 1.0864380002021790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5980 -4.2074159719049931e-03</internalNodes>\n          <leafValues>\n            -8.2077808678150177e-02 6.3647769391536713e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5981 -1.6427719674538821e-04</internalNodes>\n          <leafValues>\n            1.0120390355587006e-01 -3.4067928791046143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5982 4.3847691267728806e-02</internalNodes>\n          <leafValues>\n            6.0980222187936306e-03 -8.3685982227325439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5983 -3.9284680038690567e-02</internalNodes>\n          <leafValues>\n            2.8250560164451599e-01 -2.2389259189367294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5984 3.8550909608602524e-02</internalNodes>\n          <leafValues>\n            1.5570489689707756e-02 -3.3978620171546936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5985 -6.9177031517028809e-02</internalNodes>\n          <leafValues>\n            1.2258320301771164e-01 -1.7850179225206375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5986 -1.9251030171290040e-03</internalNodes>\n          <leafValues>\n            -1.0687749832868576e-01 4.6379510313272476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5987 -8.6635202169418335e-03</internalNodes>\n          <leafValues>\n            9.6412748098373413e-02 -1.7563249915838242e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5988 1.3393509387969971e-01</internalNodes>\n          <leafValues>\n            6.3692941330373287e-03 -7.0170587301254272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5989 4.1082348674535751e-02</internalNodes>\n          <leafValues>\n            -1.1077569797635078e-02 1.3463750481605530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5990 1.4911450445652008e-01</internalNodes>\n          <leafValues>\n            9.5263421535491943e-03 -5.0872552394866943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5991 -5.2500818856060505e-03</internalNodes>\n          <leafValues>\n            7.0025578141212463e-02 -4.2880270630121231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5992 2.2823570296168327e-02</internalNodes>\n          <leafValues>\n            -4.1884049773216248e-02 1.1770319938659668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5993 -8.5306530818343163e-03</internalNodes>\n          <leafValues>\n            6.1222139745950699e-02 -2.4944549426436424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5994 1.1971729807555676e-02</internalNodes>\n          <leafValues>\n            3.9662770926952362e-02 -1.6267740726470947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5995 -3.8938269019126892e-02</internalNodes>\n          <leafValues>\n            2.5743520259857178e-01 -1.6356239095330238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5996 -2.1706389263272285e-02</internalNodes>\n          <leafValues>\n            -3.1998679041862488e-01 1.7135290428996086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5997 6.6900630481541157e-03</internalNodes>\n          <leafValues>\n            2.6101849973201752e-02 -1.0980729758739471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5998 -7.2270832955837250e-02</internalNodes>\n          <leafValues>\n            1.9431130588054657e-01 -2.6044359430670738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5999 -6.7073688842356205e-03</internalNodes>\n          <leafValues>\n            -1.7747850716114044e-01 4.5862998813390732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6000 5.5019360035657883e-02</internalNodes>\n          <leafValues>\n            -8.3471573889255524e-03 6.0511541366577148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6001 1.3142649829387665e-01</internalNodes>\n          <leafValues>\n            -5.7535418309271336e-03 2.9167538881301880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6002 -1.6564460238441825e-03</internalNodes>\n          <leafValues>\n            7.0003032684326172e-02 -6.2690876424312592e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6003 1.5445409715175629e-01</internalNodes>\n          <leafValues>\n            6.1896732077002525e-03 -7.4323302507400513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6004 -5.0357519648969173e-03</internalNodes>\n          <leafValues>\n            -1.1333289742469788e-01 3.8741771131753922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6005 2.2772569209337234e-03</internalNodes>\n          <leafValues>\n            -1.1340530216693878e-01 2.1319400519132614e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6006 3.3173530828207731e-03</internalNodes>\n          <leafValues>\n            4.4273331761360168e-02 -1.0459829866886139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6007 -2.9692800715565681e-02</internalNodes>\n          <leafValues>\n            9.2483766376972198e-02 -2.3342609405517578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6008 6.2937840819358826e-02</internalNodes>\n          <leafValues>\n            -1.2998280115425587e-02 3.8887938857078552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6009 3.6641359329223633e-03</internalNodes>\n          <leafValues>\n            3.2099820673465729e-02 -3.9647988975048065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6010 4.4782999902963638e-03</internalNodes>\n          <leafValues>\n            -4.5701328665018082e-02 1.0697010159492493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6011 1.8147319788113236e-03</internalNodes>\n          <leafValues>\n            -3.2871820032596588e-02 1.0647939890623093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6012 4.8941639252007008e-03</internalNodes>\n          <leafValues>\n            2.7911009266972542e-02 -2.1725590527057648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6013 -4.4425828382372856e-03</internalNodes>\n          <leafValues>\n            -1.3470150530338287e-01 1.0781410150229931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6014 -2.5493400171399117e-02</internalNodes>\n          <leafValues>\n            6.8371468782424927e-01 -7.7452720142900944e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6015 2.7835449203848839e-02</internalNodes>\n          <leafValues>\n            2.4144299328327179e-02 -1.5170599520206451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6016 7.5548859313130379e-03</internalNodes>\n          <leafValues>\n            -4.7643400728702545e-02 1.1925770342350006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6017 1.0329609736800194e-02</internalNodes>\n          <leafValues>\n            1.8646810203790665e-02 -1.6122570633888245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6018 -1.2393389828503132e-02</internalNodes>\n          <leafValues>\n            6.0304921865463257e-01 -7.7566630207002163e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6019 1.3833769597113132e-02</internalNodes>\n          <leafValues>\n            -2.7617299929261208e-02 5.1266878843307495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6020 -2.5669319555163383e-02</internalNodes>\n          <leafValues>\n            2.3801359534263611e-01 -2.3971909657120705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6021 -5.2043660543859005e-03</internalNodes>\n          <leafValues>\n            -1.0721790045499802e-01 2.6645049452781677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6022 3.4628969151526690e-03</internalNodes>\n          <leafValues>\n            5.4313410073518753e-02 -1.3458320498466492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6023 -1.9220679998397827e-02</internalNodes>\n          <leafValues>\n            7.2996392846107483e-02 -4.0652111172676086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6024 -2.5009829550981522e-03</internalNodes>\n          <leafValues>\n            -7.7671296894550323e-02 5.9096541255712509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6025 -8.5285156965255737e-03</internalNodes>\n          <leafValues>\n            4.9050811678171158e-02 -6.4078353345394135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6026 4.3327538296580315e-03</internalNodes>\n          <leafValues>\n            2.5221010670065880e-02 -1.9358980655670166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6027 3.6595970392227173e-02</internalNodes>\n          <leafValues>\n            -1.6262590885162354e-02 1.5651239454746246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6028 -1.1795730097219348e-03</internalNodes>\n          <leafValues>\n            -7.2468072175979614e-02 7.0449486374855042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6029 -1.3975829817354679e-02</internalNodes>\n          <leafValues>\n            -1.1789470165967941e-01 2.1292049437761307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6030 -1.3828700175508857e-03</internalNodes>\n          <leafValues>\n            7.9283542931079865e-02 -9.5104120671749115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6031 -2.9435830656439066e-03</internalNodes>\n          <leafValues>\n            7.0368431508541107e-02 -3.3217910677194595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6032 9.5262555405497551e-03</internalNodes>\n          <leafValues>\n            -2.9733620584011078e-02 1.6670459508895874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6033 -9.0114273130893707e-02</internalNodes>\n          <leafValues>\n            -1.6625370085239410e-01 8.6199166253209114e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6034 -1.2089919764548540e-03</internalNodes>\n          <leafValues>\n            8.1083856523036957e-02 -7.3029123246669769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6035 -1.4199960231781006e-01</internalNodes>\n          <leafValues>\n            -1. 2.2284830920398235e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6036 8.0690719187259674e-03</internalNodes>\n          <leafValues>\n            4.7412220388650894e-02 -1.0178930312395096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6037 -4.7410889528691769e-03</internalNodes>\n          <leafValues>\n            1.2051119655370712e-01 -4.9957480281591415e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6038 -1.6977200284600258e-03</internalNodes>\n          <leafValues>\n            -2.4171440303325653e-01 1.9534369930624962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6039 -2.8892089612782001e-03</internalNodes>\n          <leafValues>\n            2.5727990269660950e-01 -1.1625059880316257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6040 -1.5177440363913774e-03</internalNodes>\n          <leafValues>\n            -9.8784193396568298e-02 4.6706128865480423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6041 1.4197319746017456e-01</internalNodes>\n          <leafValues>\n            -2.5096370372921228e-03 7.5450611114501953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6042 9.7517937421798706e-02</internalNodes>\n          <leafValues>\n            -6.9059049710631371e-03 6.5184432268142700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6043 1.3567379675805569e-02</internalNodes>\n          <leafValues>\n            -7.6325193047523499e-02 8.8054582476615906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6044 8.0981463193893433e-02</internalNodes>\n          <leafValues>\n            1.5558109618723392e-02 -3.4601628780364990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6045 -4.7192731872200966e-03</internalNodes>\n          <leafValues>\n            8.1620022654533386e-02 -4.6072289347648621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6046 2.0368969999253750e-03</internalNodes>\n          <leafValues>\n            -4.4817630201578140e-02 1.2861390411853790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6047 -1.7878509825095534e-03</internalNodes>\n          <leafValues>\n            4.3731331825256348e-02 -4.4995948672294617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6048 -7.1685528382658958e-03</internalNodes>\n          <leafValues>\n            -1.3597999513149261e-01 3.8796991109848022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6049 -6.7460887134075165e-02</internalNodes>\n          <leafValues>\n            -2.9265740513801575e-01 3.5135280340909958e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6050 -1.5598500147461891e-02</internalNodes>\n          <leafValues>\n            2.3105660080909729e-01 -2.2405069321393967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6051 -2.1026479080319405e-02</internalNodes>\n          <leafValues>\n            -1.5283830463886261e-01 3.1531449407339096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6052 -1.0558360069990158e-01</internalNodes>\n          <leafValues>\n            -6.8366038799285889e-01 6.8997950293123722e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6053 -3.6966579500585794e-03</internalNodes>\n          <leafValues>\n            3.4315150231122971e-02 -4.8922799527645111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6054 -6.0826627304777503e-04</internalNodes>\n          <leafValues>\n            -5.2638430148363113e-02 8.9546948671340942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6055 -2.8936540707945824e-02</internalNodes>\n          <leafValues>\n            4.1818480938673019e-02 -1.3818169943988323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6056 -5.8082528412342072e-03</internalNodes>\n          <leafValues>\n            6.7874796688556671e-02 -8.5578799247741699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6057 -4.6095378696918488e-02</internalNodes>\n          <leafValues>\n            -1.2584780156612396e-01 2.0466970279812813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6058 5.2972920238971710e-02</internalNodes>\n          <leafValues>\n            -1.2453259900212288e-02 3.4565049409866333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6059 4.9351599067449570e-02</internalNodes>\n          <leafValues>\n            1.0901239700615406e-02 -4.8506981134414673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6060 4.4377800077199936e-02</internalNodes>\n          <leafValues>\n            9.9294837564229965e-03 -4.3877899646759033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6061 -1.1464890092611313e-01</internalNodes>\n          <leafValues>\n            2.6874598860740662e-01 -9.2000560835003853e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6062 1.6887830197811127e-01</internalNodes>\n          <leafValues>\n            5.7101310230791569e-03 -8.5972881317138672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6063 5.1198098808526993e-02</internalNodes>\n          <leafValues>\n            -8.5723921656608582e-03 1.3395169377326965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6064 -3.0789880547672510e-03</internalNodes>\n          <leafValues>\n            -1.0338760167360306e-01 4.3459478765726089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6065 4.7223128378391266e-02</internalNodes>\n          <leafValues>\n            8.1934239715337753e-03 -4.3803408741950989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6066 -7.6270569115877151e-03</internalNodes>\n          <leafValues>\n            1.8713890016078949e-01 -2.4660250172019005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6067 5.4106907919049263e-03</internalNodes>\n          <leafValues>\n            4.1099831461906433e-02 -7.8868232667446136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6068 -1.4900229871273041e-03</internalNodes>\n          <leafValues>\n            -2.0115040242671967e-01 3.1898159533739090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6069 -8.3831608295440674e-02</internalNodes>\n          <leafValues>\n            5.8017939329147339e-01 -5.2973427809774876e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6070 6.2233800999820232e-03</internalNodes>\n          <leafValues>\n            -3.9786059409379959e-02 1.2283950299024582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6071 1.1475080251693726e-01</internalNodes>\n          <leafValues>\n            -1.1975419707596302e-02 2.1586710214614868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6072 -1.5253260498866439e-03</internalNodes>\n          <leafValues>\n            1.3804529607295990e-01 -3.9941880851984024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6073 -5.2878521382808685e-03</internalNodes>\n          <leafValues>\n            -1.2790650129318237e-01 3.2893560826778412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6074 8.9670647867023945e-04</internalNodes>\n          <leafValues>\n            -1.2481059879064560e-01 4.4544249773025513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6075 3.8421660661697388e-02</internalNodes>\n          <leafValues>\n            7.7155791223049164e-03 -6.5575468540191650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6076 -9.3785318313166499e-04</internalNodes>\n          <leafValues>\n            5.5608510971069336e-02 -8.9876912534236908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6077 1.9965849351137877e-03</internalNodes>\n          <leafValues>\n            -2.5297610089182854e-02 1.9413180649280548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6078 4.5782068627886474e-04</internalNodes>\n          <leafValues>\n            3.9089199155569077e-02 -1.2908570468425751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6079 3.8373940624296665e-03</internalNodes>\n          <leafValues>\n            -2.8748869895935059e-02 1.9429750740528107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6080 3.7142829387448728e-04</internalNodes>\n          <leafValues>\n            3.8272358477115631e-02 -1.3759189844131470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6081 7.5116259977221489e-03</internalNodes>\n          <leafValues>\n            -1.4461129903793335e-02 1.2656949460506439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6082 -5.0362840294837952e-02</internalNodes>\n          <leafValues>\n            3.5183578729629517e-01 -1.4051860198378563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6083 3.9921641349792480e-02</internalNodes>\n          <leafValues>\n            2.7280429378151894e-02 -1.9958199560642242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6084 2.2605259716510773e-01</internalNodes>\n          <leafValues>\n            -6.8001961335539818e-03 7.3006898164749146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6085 1.1081779748201370e-01</internalNodes>\n          <leafValues>\n            4.3370737694203854e-03 -8.6829161643981934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6086 -9.7494889050722122e-03</internalNodes>\n          <leafValues>\n            -6.3740663230419159e-02 8.4537997841835022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6087 -2.2887689992785454e-03</internalNodes>\n          <leafValues>\n            9.9654018878936768e-02 -4.1565418243408203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6088 2.0008319988846779e-03</internalNodes>\n          <leafValues>\n            -5.5650699883699417e-02 1.0709869861602783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6089 -1.5160050243139267e-02</internalNodes>\n          <leafValues>\n            -1.4098760485649109e-01 3.8741599768400192e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6090 -6.3132969662547112e-03</internalNodes>\n          <leafValues>\n            -1. 4.4605308212339878e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6091 -1.3970009982585907e-02</internalNodes>\n          <leafValues>\n            1.2481089681386948e-01 -2.1425830200314522e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6092 -4.4321279972791672e-02</internalNodes>\n          <leafValues>\n            -5.3340071439743042e-01 1.0165239684283733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6093 1.4885979471728206e-03</internalNodes>\n          <leafValues>\n            -4.8868600279092789e-02 3.6077901721000671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6094 6.5139681100845337e-02</internalNodes>\n          <leafValues>\n            7.6331058517098427e-03 -5.8781641721725464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6095 -2.0741410553455353e-02</internalNodes>\n          <leafValues>\n            -2.9658278822898865e-01 1.8622800707817078e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>394</maxWeakCount>\n      <stageThreshold>-1.2940989732742310e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 6096 1.9188739359378815e-02</internalNodes>\n          <leafValues>\n            -2.1150399744510651e-01 1.3286529481410980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6097 -8.1222038716077805e-03</internalNodes>\n          <leafValues>\n            9.2491082847118378e-02 -1.7585119605064392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6098 1.5851219650357962e-03</internalNodes>\n          <leafValues>\n            -2.8565698862075806e-01 6.6710568964481354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6099 -4.3140850029885769e-03</internalNodes>\n          <leafValues>\n            -1.3885229825973511e-01 5.2694689482450485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6100 -1.7131429631263018e-03</internalNodes>\n          <leafValues>\n            1.3135610520839691e-01 -1.3149109482765198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6101 6.8447366356849670e-02</internalNodes>\n          <leafValues>\n            9.3052154406905174e-03 -2.5063261389732361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6102 -2.4445978924632072e-03</internalNodes>\n          <leafValues>\n            -1.7205530405044556e-01 9.8322823643684387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6103 1.0310600046068430e-03</internalNodes>\n          <leafValues>\n            2.3039160296320915e-02 -2.7527621388435364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6104 7.4603251414373517e-04</internalNodes>\n          <leafValues>\n            -2.3276780545711517e-01 5.2693009376525879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6105 -6.6399492789059877e-04</internalNodes>\n          <leafValues>\n            6.8990781903266907e-02 -8.4687709808349609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6106 -4.0997468749992549e-04</internalNodes>\n          <leafValues>\n            1.0501380264759064e-01 -1.0819009691476822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6107 -1.8094549886882305e-03</internalNodes>\n          <leafValues>\n            -1.8178839981555939e-01 4.4184140861034393e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6108 9.3385757645592093e-04</internalNodes>\n          <leafValues>\n            -1.4622689783573151e-01 7.2726443409919739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6109 -3.8197741378098726e-04</internalNodes>\n          <leafValues>\n            2.4009939283132553e-02 -1.7295800149440765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6110 -1.4950280310586095e-03</internalNodes>\n          <leafValues>\n            -1.9403380155563354e-01 4.8807919025421143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6111 -1.0159100405871868e-02</internalNodes>\n          <leafValues>\n            1.9173899292945862e-01 -5.2749071270227432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6112 5.9903519286308438e-05</internalNodes>\n          <leafValues>\n            -1.0791549831628799e-01 9.0988166630268097e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6113 -3.1967550516128540e-02</internalNodes>\n          <leafValues>\n            4.1109889745712280e-01 -2.2650640457868576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6114 1.4343270100653172e-02</internalNodes>\n          <leafValues>\n            2.4315539747476578e-02 -4.2680150270462036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6115 1.1039529927074909e-02</internalNodes>\n          <leafValues>\n            -6.2717013061046600e-02 1.1330530047416687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6116 -8.4228850901126862e-03</internalNodes>\n          <leafValues>\n            -2.1369309723377228e-01 4.2059201747179031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6117 -2.0549839362502098e-02</internalNodes>\n          <leafValues>\n            1.5161630511283875e-01 -2.4594139307737350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6118 -6.5411031246185303e-03</internalNodes>\n          <leafValues>\n            1.4883629977703094e-01 -6.1179339885711670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6119 -1.3324400410056114e-02</internalNodes>\n          <leafValues>\n            -2.0791970193386078e-01 4.8333309590816498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6120 7.0111267268657684e-02</internalNodes>\n          <leafValues>\n            -2.6863219216465950e-02 3.6322259902954102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6121 -2.6973750209435821e-04</internalNodes>\n          <leafValues>\n            6.0876660048961639e-02 -1.1272370070219040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6122 -1.3509000418707728e-03</internalNodes>\n          <leafValues>\n            -1.8552079796791077e-01 5.2154958248138428e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6123 -2.8083190321922302e-02</internalNodes>\n          <leafValues>\n            3.5111880302429199e-01 -2.3596329614520073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6124 -1.0003290139138699e-02</internalNodes>\n          <leafValues>\n            -2.9058480262756348e-01 3.2125689089298248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6125 -1.6111029544845223e-03</internalNodes>\n          <leafValues>\n            9.8113670945167542e-02 -5.2203711122274399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6126 -1.8411900848150253e-02</internalNodes>\n          <leafValues>\n            -1.8082669377326965e-01 5.4536700248718262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6127 -7.1738816797733307e-02</internalNodes>\n          <leafValues>\n            -7.6654988527297974e-01 3.3518690615892410e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6128 -2.7943260502070189e-03</internalNodes>\n          <leafValues>\n            1.5871369838714600e-01 -6.4271800220012665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6129 -1.6874749958515167e-01</internalNodes>\n          <leafValues>\n            -6.9956189393997192e-01 4.8861699178814888e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6130 -1.2672400334849954e-03</internalNodes>\n          <leafValues>\n            3.1616039574146271e-02 -2.4953269958496094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6131 2.0807750523090363e-02</internalNodes>\n          <leafValues>\n            1.7053410410881042e-02 -2.4331410229206085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6132 -1.5869849594309926e-03</internalNodes>\n          <leafValues>\n            9.3171089887619019e-02 -8.1361927092075348e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6133 -1.0014690458774567e-02</internalNodes>\n          <leafValues>\n            -2.7789619565010071e-01 2.6569239795207977e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6134 -5.7948171161115170e-03</internalNodes>\n          <leafValues>\n            -2.2287739813327789e-01 3.5975661128759384e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6135 2.7189950924366713e-03</internalNodes>\n          <leafValues>\n            -9.0631909668445587e-02 5.6820400059223175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6136 3.8845159113407135e-02</internalNodes>\n          <leafValues>\n            1.2280859984457493e-02 -5.8521348237991333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6137 -1.4158680103719234e-02</internalNodes>\n          <leafValues>\n            1.8153870105743408e-01 -3.1109429895877838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6138 -1.8278600275516510e-01</internalNodes>\n          <leafValues>\n            -9.0013808012008667e-01 7.6544750481843948e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6139 2.7588419616222382e-02</internalNodes>\n          <leafValues>\n            -1.2460039928555489e-02 2.0069369673728943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6140 -1.4784430153667927e-02</internalNodes>\n          <leafValues>\n            -8.9910492300987244e-02 8.1648677587509155e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6141 1.1625719815492630e-01</internalNodes>\n          <leafValues>\n            2.3692469112575054e-03 -9.9998068809509277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6142 3.5341090988367796e-03</internalNodes>\n          <leafValues>\n            -6.1760541051626205e-02 1.3490639626979828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6143 5.1878788508474827e-03</internalNodes>\n          <leafValues>\n            1.8745860084891319e-02 -1.7449170351028442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6144 7.9457357525825500e-02</internalNodes>\n          <leafValues>\n            -2.3402990773320198e-02 3.3502200245857239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6145 2.7684379369020462e-02</internalNodes>\n          <leafValues>\n            2.3663910105824471e-02 -3.3256360888481140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6146 -4.4806320220232010e-03</internalNodes>\n          <leafValues>\n            -1.4658750593662262e-01 4.7376811504364014e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6147 5.6939688511192799e-03</internalNodes>\n          <leafValues>\n            -5.6776121258735657e-02 6.7580856382846832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6148 7.7299480326473713e-03</internalNodes>\n          <leafValues>\n            -3.1156649813055992e-02 2.3102590441703796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6149 3.9786100387573242e-03</internalNodes>\n          <leafValues>\n            -5.6882441043853760e-02 1.3271529972553253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6150 -1.1275880038738251e-02</internalNodes>\n          <leafValues>\n            -2.0938649773597717e-01 3.5291459411382675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6151 -2.4308220017701387e-03</internalNodes>\n          <leafValues>\n            -2.0176360011100769e-01 3.4513931721448898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6152 5.7369591668248177e-03</internalNodes>\n          <leafValues>\n            -5.5607158690690994e-02 1.1532089859247208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6153 4.6170800924301147e-03</internalNodes>\n          <leafValues>\n            -5.6083500385284424e-02 8.1762917339801788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6154 -4.7089671716094017e-03</internalNodes>\n          <leafValues>\n            -1.3351219892501831e-01 5.6296080350875854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6155 -3.2688070088624954e-02</internalNodes>\n          <leafValues>\n            2.7922388911247253e-01 -1.0867659933865070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6156 8.8686197996139526e-02</internalNodes>\n          <leafValues>\n            1.8268220126628876e-02 -3.5637390613555908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6157 4.5751677826046944e-03</internalNodes>\n          <leafValues>\n            -5.1558461040258408e-02 6.3948810100555420e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6158 4.9765850417315960e-03</internalNodes>\n          <leafValues>\n            -5.4684590548276901e-02 1.1907110363245010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6159 -6.4881290309131145e-03</internalNodes>\n          <leafValues>\n            -9.9121123552322388e-02 2.6508849114179611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6160 2.4523450993001461e-03</internalNodes>\n          <leafValues>\n            -9.5045946538448334e-02 6.6802926361560822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6161 7.0354789495468140e-03</internalNodes>\n          <leafValues>\n            1.0705590248107910e-01 -6.2395099550485611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6162 4.2746789753437042e-02</internalNodes>\n          <leafValues>\n            -1.6092179343104362e-02 4.3256199359893799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6163 -4.5301730278879404e-04</internalNodes>\n          <leafValues>\n            3.6420568823814392e-02 -9.9322892725467682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6164 -5.2631930448114872e-03</internalNodes>\n          <leafValues>\n            -1.1416749656200409e-01 5.7260219007730484e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6165 1.0581909446045756e-03</internalNodes>\n          <leafValues>\n            3.3220488578081131e-02 -1.1831220239400864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6166 2.5088949128985405e-02</internalNodes>\n          <leafValues>\n            -6.0655020177364349e-02 1.2601740658283234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6167 2.4252159893512726e-01</internalNodes>\n          <leafValues>\n            2.2060840856283903e-03 -1.0000120401382446e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6168 -1.4393079280853271e-01</internalNodes>\n          <leafValues>\n            3.7419798970222473e-01 -2.2252110764384270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6169 -6.0972762294113636e-03</internalNodes>\n          <leafValues>\n            -1.1038099974393845e-01 4.5996960252523422e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6170 6.1375470831990242e-03</internalNodes>\n          <leafValues>\n            3.8307808339595795e-02 -1.8086770176887512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6171 -3.6617079749703407e-03</internalNodes>\n          <leafValues>\n            3.8439918309450150e-02 -6.2540791928768158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6172 -1.5854850411415100e-01</internalNodes>\n          <leafValues>\n            3.4469398856163025e-01 -1.9837500527501106e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6173 6.7219287157058716e-02</internalNodes>\n          <leafValues>\n            9.5165139064192772e-03 -5.0206458568572998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6174 2.2499680053442717e-03</internalNodes>\n          <leafValues>\n            -1.3063929975032806e-01 6.4832933247089386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6175 8.4626786410808563e-02</internalNodes>\n          <leafValues>\n            5.9339799918234348e-03 -4.1516590118408203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6176 -9.5411221263930202e-04</internalNodes>\n          <leafValues>\n            -9.3790747225284576e-02 7.5486607849597931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6177 -7.6813949272036552e-03</internalNodes>\n          <leafValues>\n            -1.4821960031986237e-01 2.9010580852627754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6178 -2.5593319907784462e-02</internalNodes>\n          <leafValues>\n            1.4859579503536224e-01 -4.7195930033922195e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6179 2.1508369594812393e-02</internalNodes>\n          <leafValues>\n            2.3782620206475258e-02 -9.6659287810325623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6180 3.4463100135326385e-02</internalNodes>\n          <leafValues>\n            -3.7410069257020950e-02 2.2015300393104553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6181 -3.7860300391912460e-02</internalNodes>\n          <leafValues>\n            -5.0047469139099121e-01 1.4059869572520256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6182 1.2028450146317482e-03</internalNodes>\n          <leafValues>\n            -6.5087057650089264e-02 8.9583486318588257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6183 1.6753520816564560e-02</internalNodes>\n          <leafValues>\n            4.9179811030626297e-03 -4.3030908703804016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6184 1.6640779795125127e-03</internalNodes>\n          <leafValues>\n            4.0807429701089859e-02 -1.4469960331916809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6185 3.4473428968340158e-03</internalNodes>\n          <leafValues>\n            -3.9910178631544113e-02 1.5272960066795349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6186 8.9918142184615135e-03</internalNodes>\n          <leafValues>\n            7.1071267127990723e-02 -8.6169913411140442e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6187 8.3185202674940228e-04</internalNodes>\n          <leafValues>\n            -2.5739189982414246e-01 1.7941089347004890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6188 -6.8142730742692947e-03</internalNodes>\n          <leafValues>\n            1.3823160529136658e-01 -5.3994540125131607e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6189 2.9746210202574730e-03</internalNodes>\n          <leafValues>\n            -4.1550260037183762e-02 3.9839770644903183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6190 2.5836620479822159e-03</internalNodes>\n          <leafValues>\n            -7.0656493306159973e-02 9.5045506954193115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6191 2.7143809711560607e-04</internalNodes>\n          <leafValues>\n            5.8070071041584015e-02 -1.2781760096549988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6192 3.5418298840522766e-01</internalNodes>\n          <leafValues>\n            5.4909070022404194e-03 -9.7960698604583740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6193 2.5318650528788567e-02</internalNodes>\n          <leafValues>\n            -1.4410969801247120e-02 2.6219129562377930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6194 -2.2658439411316067e-04</internalNodes>\n          <leafValues>\n            5.2997849881649017e-02 -1.1629349738359451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6195 6.8859090097248554e-03</internalNodes>\n          <leafValues>\n            1.6437310725450516e-02 -2.0349490642547607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6196 1.1607459746301174e-02</internalNodes>\n          <leafValues>\n            -3.6651011556386948e-02 1.5184010565280914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6197 -4.8253959976136684e-03</internalNodes>\n          <leafValues>\n            -2.3476150631904602e-01 3.7914011627435684e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6198 2.5656020734459162e-03</internalNodes>\n          <leafValues>\n            3.5185638815164566e-02 -1.8540710210800171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6199 1.2601399421691895e-01</internalNodes>\n          <leafValues>\n            -9.8542850464582443e-03 2.5520691275596619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6200 2.7164958883076906e-03</internalNodes>\n          <leafValues>\n            -2.1748440340161324e-02 2.5467529892921448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6201 3.2356029748916626e-01</internalNodes>\n          <leafValues>\n            8.8657345622777939e-03 -7.0383572578430176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6202 -8.4016058826819062e-04</internalNodes>\n          <leafValues>\n            3.6831360310316086e-02 -1.4953260123729706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6203 3.3291990403085947e-03</internalNodes>\n          <leafValues>\n            4.8185840249061584e-02 -1.2290470302104950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6204 2.1130539476871490e-01</internalNodes>\n          <leafValues>\n            6.5245870500802994e-03 -8.8293862342834473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6205 5.0388509407639503e-03</internalNodes>\n          <leafValues>\n            -6.7079946398735046e-02 3.7849709391593933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6206 -2.7862399816513062e-02</internalNodes>\n          <leafValues>\n            3.3469489216804504e-01 -1.8816500902175903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6207 3.8636629469692707e-03</internalNodes>\n          <leafValues>\n            4.3644730001688004e-02 -1.7481489479541779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6208 1.0480300337076187e-01</internalNodes>\n          <leafValues>\n            -1.5737529844045639e-02 4.2094239592552185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6209 -3.4130848944187164e-03</internalNodes>\n          <leafValues>\n            -1.0835570096969604e-01 4.3717790395021439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6210 -4.6396970748901367e-02</internalNodes>\n          <leafValues>\n            -7.5680077075958252e-01 8.6701400578022003e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6211 5.3708078339695930e-03</internalNodes>\n          <leafValues>\n            -4.1797801852226257e-02 1.4824719727039337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6212 -6.1126388609409332e-03</internalNodes>\n          <leafValues>\n            1.8673719465732574e-01 -4.3387491255998611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6213 4.2509321123361588e-02</internalNodes>\n          <leafValues>\n            1.1690679937601089e-02 -4.3740659952163696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6214 1.0473020374774933e-02</internalNodes>\n          <leafValues>\n            4.3143630027770996e-02 -1.5654399991035461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6215 -4.7223959118127823e-02</internalNodes>\n          <leafValues>\n            -7.4483537673950195e-01 3.4918629098683596e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6216 5.3090360015630722e-02</internalNodes>\n          <leafValues>\n            1.0408150032162666e-02 -5.3499448299407959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6217 -7.0432561915367842e-04</internalNodes>\n          <leafValues>\n            3.3384170383214951e-02 -7.3706030845642090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6218 7.5942431576550007e-03</internalNodes>\n          <leafValues>\n            -2.9107049107551575e-02 1.9468860328197479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6219 2.2676989436149597e-02</internalNodes>\n          <leafValues>\n            3.3803820610046387e-02 -2.7627611160278320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6220 6.6533521749079227e-03</internalNodes>\n          <leafValues>\n            -2.6578240096569061e-02 2.4283319711685181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6221 3.7712270859628916e-03</internalNodes>\n          <leafValues>\n            2.6554299518465996e-02 -6.4952917397022247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6222 -2.0740530453622341e-03</internalNodes>\n          <leafValues>\n            -1.7968970537185669e-01 3.1532160937786102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6223 -1.5632519498467445e-03</internalNodes>\n          <leafValues>\n            5.3109679371118546e-02 -8.7415628135204315e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6224 1.2540889903903008e-02</internalNodes>\n          <leafValues>\n            -3.4136459231376648e-02 2.2097539901733398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6225 -3.2660199794918299e-03</internalNodes>\n          <leafValues>\n            -5.5261608213186264e-02 3.2669559121131897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6226 -8.2185603678226471e-03</internalNodes>\n          <leafValues>\n            -1.4478379487991333e-01 5.5743928998708725e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6227 -5.5811040103435516e-02</internalNodes>\n          <leafValues>\n            1.7237940430641174e-01 -1.4456519857048988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6228 -1.4723159372806549e-01</internalNodes>\n          <leafValues>\n            -8.1392312049865723e-01 7.4356291443109512e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6229 -5.8468529023230076e-03</internalNodes>\n          <leafValues>\n            -6.9043442606925964e-02 1.9456790760159492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6230 1.9462220370769501e-02</internalNodes>\n          <leafValues>\n            -3.5472229123115540e-02 1.6666300594806671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6231 5.8353468775749207e-02</internalNodes>\n          <leafValues>\n            3.0551329255104065e-03 -3.9289128780364990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6232 4.3785829097032547e-02</internalNodes>\n          <leafValues>\n            1.3574630022048950e-02 -4.6152359247207642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6233 -5.1904350519180298e-02</internalNodes>\n          <leafValues>\n            6.3802438974380493e-01 -9.6664745360612869e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6234 -7.7811058145016432e-04</internalNodes>\n          <leafValues>\n            -9.9303223192691803e-02 5.6094601750373840e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6235 4.9657518975436687e-03</internalNodes>\n          <leafValues>\n            4.1419368237257004e-02 -1.1274819821119308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6236 -5.4516079835593700e-03</internalNodes>\n          <leafValues>\n            1.7399060726165771e-01 -4.1147731244564056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6237 5.0428751856088638e-03</internalNodes>\n          <leafValues>\n            -4.1255220770835876e-02 1.3794229924678802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6238 -1.6985220136120915e-03</internalNodes>\n          <leafValues>\n            -2.2874790430068970e-01 2.5274980813264847e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6239 8.2764238119125366e-02</internalNodes>\n          <leafValues>\n            3.3066510222852230e-03 -6.9113439321517944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6240 3.9285849779844284e-03</internalNodes>\n          <leafValues>\n            -7.9043358564376831e-02 6.6218852996826172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6241 -3.0601240694522858e-02</internalNodes>\n          <leafValues>\n            -2.6517450809478760e-01 1.6467850655317307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6242 -1.9941160455346107e-02</internalNodes>\n          <leafValues>\n            1.5431809425354004e-01 -3.6100689321756363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6243 8.0520063638687134e-02</internalNodes>\n          <leafValues>\n            1.7015919089317322e-02 -3.3448880910873413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6244 7.0323847234249115e-02</internalNodes>\n          <leafValues>\n            1.7122440040111542e-02 -3.3302140235900879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6245 -5.2850939333438873e-02</internalNodes>\n          <leafValues>\n            6.2421400099992752e-02 -1.4690199866890907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6246 -7.1594159817323089e-04</internalNodes>\n          <leafValues>\n            -1.1335150152444839e-01 5.2260790020227432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6247 2.1469970047473907e-01</internalNodes>\n          <leafValues>\n            9.9299731664359570e-04 -9.9997580051422119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6248 8.7042592465877533e-02</internalNodes>\n          <leafValues>\n            -1.2329760007560253e-02 5.0260668992996216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6249 -5.8731262106448412e-04</internalNodes>\n          <leafValues>\n            -9.9346466362476349e-02 5.1705610007047653e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6250 -4.4215220957994461e-02</internalNodes>\n          <leafValues>\n            -3.9368900656700134e-01 1.3920850120484829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6251 -8.7676227092742920e-02</internalNodes>\n          <leafValues>\n            3.0157440900802612e-01 -6.8702381104230881e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6252 -4.8453990370035172e-02</internalNodes>\n          <leafValues>\n            2.5477871298789978e-01 -2.2457750514149666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6253 -2.1567570511251688e-03</internalNodes>\n          <leafValues>\n            -1.3562899827957153e-01 3.1725399196147919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6254 3.9050900377333164e-03</internalNodes>\n          <leafValues>\n            4.9100890755653381e-02 -1.1861059814691544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6255 -3.9808028377592564e-03</internalNodes>\n          <leafValues>\n            4.8333909362554550e-02 -5.5897079408168793e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6256 2.9744929634034634e-03</internalNodes>\n          <leafValues>\n            -6.4802452921867371e-02 9.3583501875400543e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6257 2.5875229388475418e-02</internalNodes>\n          <leafValues>\n            1.8487609922885895e-02 -3.3436349034309387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6258 -1.9373580580577254e-03</internalNodes>\n          <leafValues>\n            2.2000649571418762e-01 -2.5404980406165123e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6259 -2.0171629264950752e-02</internalNodes>\n          <leafValues>\n            -7.8228309750556946e-02 4.5462790876626968e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6260 -2.6088140904903412e-02</internalNodes>\n          <leafValues>\n            1.7637069523334503e-01 -4.5097298920154572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6261 -2.6868300512433052e-02</internalNodes>\n          <leafValues>\n            -3.2656419277191162e-01 1.7994230613112450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6262 -7.0211151614785194e-04</internalNodes>\n          <leafValues>\n            3.9671998471021652e-02 -1.4533540606498718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6263 8.3507681265473366e-03</internalNodes>\n          <leafValues>\n            -2.3051729425787926e-02 1.8850760161876678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6264 4.6823569573462009e-03</internalNodes>\n          <leafValues>\n            2.9996560886502266e-02 -2.0701029896736145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6265 3.3109660726040602e-03</internalNodes>\n          <leafValues>\n            5.6536730378866196e-02 -1.6835589706897736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6266 7.6425541192293167e-03</internalNodes>\n          <leafValues>\n            -4.1423950344324112e-02 1.2557519972324371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6267 -2.4713110178709030e-03</internalNodes>\n          <leafValues>\n            7.2156153619289398e-02 -1.0767730325460434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6268 -9.9495360627770424e-03</internalNodes>\n          <leafValues>\n            -1.8187619745731354e-01 3.3567231148481369e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6269 1.9820800516754389e-03</internalNodes>\n          <leafValues>\n            -5.6488718837499619e-02 1.0741490125656128e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6270 2.3254439234733582e-02</internalNodes>\n          <leafValues>\n            -1.6543349251151085e-02 3.6466678977012634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6271 -5.4177921265363693e-02</internalNodes>\n          <leafValues>\n            -1. 3.3418419770896435e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6272 6.1567849479615688e-04</internalNodes>\n          <leafValues>\n            4.0159329771995544e-02 -1.6460220515727997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6273 -4.2699510231614113e-03</internalNodes>\n          <leafValues>\n            -5.6978620588779449e-02 4.4480901211500168e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6274 1.9749389030039310e-03</internalNodes>\n          <leafValues>\n            5.9283681213855743e-02 -1.0791260004043579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6275 -5.8583128266036510e-03</internalNodes>\n          <leafValues>\n            1.3734050095081329e-01 -3.4231521189212799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6276 -7.2995189111679792e-04</internalNodes>\n          <leafValues>\n            -1.0075060278177261e-01 5.4733160883188248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6277 -2.9930740594863892e-02</internalNodes>\n          <leafValues>\n            6.3882559537887573e-02 -4.1027020663022995e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6278 -5.1738750189542770e-02</internalNodes>\n          <leafValues>\n            -7.2713458538055420e-01 7.4993381276726723e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6279 2.4021189659833908e-02</internalNodes>\n          <leafValues>\n            7.8491801396012306e-03 -5.5794471502304077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6280 -3.7574321031570435e-03</internalNodes>\n          <leafValues>\n            -1.6086879372596741e-01 3.1015990301966667e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6281 -6.2635682523250580e-02</internalNodes>\n          <leafValues>\n            9.0577863156795502e-02 -2.9033770784735680e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6282 1.9363429397344589e-02</internalNodes>\n          <leafValues>\n            -4.9920588731765747e-02 1.2835779786109924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6283 -3.5072889178991318e-02</internalNodes>\n          <leafValues>\n            2.1391840279102325e-01 -8.8168960064649582e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6284 -1.3243310153484344e-02</internalNodes>\n          <leafValues>\n            2.3349699378013611e-01 -2.3088019341230392e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6285 -3.1290829181671143e-02</internalNodes>\n          <leafValues>\n            -6.9495099782943726e-01 9.3020889908075333e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6286 7.2391419671475887e-03</internalNodes>\n          <leafValues>\n            2.8485849499702454e-02 -1.8310770392417908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6287 6.6785318776965141e-03</internalNodes>\n          <leafValues>\n            -4.9132950603961945e-02 5.4181691259145737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6288 -3.6825571209192276e-02</internalNodes>\n          <leafValues>\n            3.3120208978652954e-01 -2.1359929814934731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6289 -4.5507341623306274e-02</internalNodes>\n          <leafValues>\n            -1.2893490493297577e-01 4.9545988440513611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6290 7.7639957889914513e-03</internalNodes>\n          <leafValues>\n            -3.6255620419979095e-02 1.5321409702301025e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6291 6.0417611151933670e-02</internalNodes>\n          <leafValues>\n            4.5740022324025631e-03 -6.7541092634201050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6292 2.4624960497021675e-03</internalNodes>\n          <leafValues>\n            5.3674161434173584e-02 -1.1326540261507034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6293 7.3594506829977036e-05</internalNodes>\n          <leafValues>\n            -3.5648930817842484e-02 2.5458969175815582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6294 -4.0958370082080364e-03</internalNodes>\n          <leafValues>\n            1.5562909841537476e-01 -3.9390601217746735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6295 2.8689370083156973e-05</internalNodes>\n          <leafValues>\n            -8.4823302924633026e-02 3.8254238665103912e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6296 -4.6220528893172741e-03</internalNodes>\n          <leafValues>\n            -1.8994529545307159e-01 3.3508758991956711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6297 -8.5343196988105774e-03</internalNodes>\n          <leafValues>\n            1.1212539672851562e-01 -3.3968489617109299e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6298 -5.8803848922252655e-02</internalNodes>\n          <leafValues>\n            -5.1244312524795532e-01 1.0789549909532070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6299 6.0719929635524750e-02</internalNodes>\n          <leafValues>\n            -1.2555030174553394e-02 2.2509759664535522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6300 1.1038020020350814e-03</internalNodes>\n          <leafValues>\n            -9.6294492483139038e-02 5.6727480143308640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6301 -3.8484560791403055e-03</internalNodes>\n          <leafValues>\n            4.0573459118604660e-02 -2.5326859205961227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6302 -1.0771050117909908e-02</internalNodes>\n          <leafValues>\n            8.8735632598400116e-02 -5.5628679692745209e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6303 1.2016809545457363e-02</internalNodes>\n          <leafValues>\n            2.3566279560327530e-02 -2.4590580165386200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6304 -1.1656560236588120e-03</internalNodes>\n          <leafValues>\n            -3.7417300045490265e-02 1.6503289341926575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6305 3.2137628644704819e-02</internalNodes>\n          <leafValues>\n            1.4245970174670219e-02 -2.6480850577354431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6306 2.3331670090556145e-02</internalNodes>\n          <leafValues>\n            -3.5288721323013306e-02 1.8447829782962799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6307 -1.2685320340096951e-02</internalNodes>\n          <leafValues>\n            -1.1757309734821320e-01 1.6436910256743431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6308 7.3903938755393028e-05</internalNodes>\n          <leafValues>\n            -1.0271479934453964e-01 7.4301436543464661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6309 -1.0925470292568207e-01</internalNodes>\n          <leafValues>\n            -8.3165317773818970e-01 5.6438110768795013e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6310 -1.3324350118637085e-01</internalNodes>\n          <leafValues>\n            7.7729821205139160e-01 -8.3403270691633224e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6311 8.9381448924541473e-04</internalNodes>\n          <leafValues>\n            -5.9524301439523697e-02 4.1173089295625687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6312 1.0318649932742119e-02</internalNodes>\n          <leafValues>\n            1.5926430001854897e-02 -3.1637790799140930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6313 -5.2297548390924931e-03</internalNodes>\n          <leafValues>\n            -7.1166560053825378e-02 3.3489290624856949e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6314 1.6409620642662048e-02</internalNodes>\n          <leafValues>\n            -2.6454120874404907e-02 1.9589969515800476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6315 1.4068709686398506e-02</internalNodes>\n          <leafValues>\n            -3.9364140480756760e-02 1.3977420330047607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6316 6.6486410796642303e-03</internalNodes>\n          <leafValues>\n            6.4070828258991241e-02 -1.0493399947881699e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6317 -1.8030619248747826e-02</internalNodes>\n          <leafValues>\n            8.3942912518978119e-02 -1.3399159535765648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6318 -4.4034369289875031e-02</internalNodes>\n          <leafValues>\n            -5.5825459957122803e-01 9.7633162513375282e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6319 -8.0966893583536148e-03</internalNodes>\n          <leafValues>\n            -2.0489789545536041e-01 2.6520200073719025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6320 5.0180461257696152e-03</internalNodes>\n          <leafValues>\n            -1.1661209911108017e-01 4.5791670680046082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6321 -1.7064629122614861e-02</internalNodes>\n          <leafValues>\n            2.6282730698585510e-01 -2.0390639081597328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6322 7.1850173175334930e-02</internalNodes>\n          <leafValues>\n            -6.9503681734204292e-03 6.7032539844512939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6323 -5.6914370507001877e-02</internalNodes>\n          <leafValues>\n            -1.3477900624275208e-01 1.8399080261588097e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6324 -3.2365729566663504e-03</internalNodes>\n          <leafValues>\n            6.9673851132392883e-02 -7.2314530611038208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6325 4.1818909347057343e-02</internalNodes>\n          <leafValues>\n            1.1151459999382496e-02 -5.1680111885070801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6326 -6.1106588691473007e-03</internalNodes>\n          <leafValues>\n            -1.3163940608501434e-01 4.3796509504318237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6327 -3.5560909658670425e-02</internalNodes>\n          <leafValues>\n            6.8005502223968506e-02 -3.6331020295619965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6328 6.8789169192314148e-02</internalNodes>\n          <leafValues>\n            1.4698959887027740e-02 -3.8212299346923828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6329 -7.8313373029232025e-02</internalNodes>\n          <leafValues>\n            2.0296069979667664e-01 -8.6810020729899406e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6330 3.9626220241189003e-03</internalNodes>\n          <leafValues>\n            -3.5797890275716782e-02 1.3905510306358337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6331 -3.3874038606882095e-02</internalNodes>\n          <leafValues>\n            -2.2253429889678955e-01 7.5455638580024242e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6332 -6.4755856990814209e-02</internalNodes>\n          <leafValues>\n            4.7521549463272095e-01 -1.0970680043101311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6333 2.6647940278053284e-02</internalNodes>\n          <leafValues>\n            1.5445309691131115e-02 -2.6785778999328613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6334 -3.0731109902262688e-02</internalNodes>\n          <leafValues>\n            -4.7668689489364624e-01 9.6429884433746338e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6335 -2.4022700265049934e-02</internalNodes>\n          <leafValues>\n            -1.0633960366249084e-01 1.2849040329456329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6336 -1.3036349555477500e-03</internalNodes>\n          <leafValues>\n            7.3524177074432373e-02 -6.8074919283390045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6337 -9.8344050347805023e-03</internalNodes>\n          <leafValues>\n            -1.1843550205230713e-01 4.2866699397563934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6338 8.7102197110652924e-02</internalNodes>\n          <leafValues>\n            -4.0088258683681488e-02 1.7804540693759918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6339 2.0411569625139236e-02</internalNodes>\n          <leafValues>\n            1.6849989071488380e-02 -3.8953658938407898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6340 9.5875263214111328e-02</internalNodes>\n          <leafValues>\n            5.9905550442636013e-03 -8.1525659561157227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6341 6.4893220551311970e-03</internalNodes>\n          <leafValues>\n            -2.4039229378104210e-02 5.3871169686317444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6342 -9.6279237186536193e-04</internalNodes>\n          <leafValues>\n            9.4299189746379852e-02 -6.4436018466949463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6343 -3.7659960798919201e-04</internalNodes>\n          <leafValues>\n            -6.2296878546476364e-02 4.1251849383115768e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6344 6.5272641368210316e-03</internalNodes>\n          <leafValues>\n            5.1325131207704544e-02 -1.3037790358066559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6345 2.1429110318422318e-02</internalNodes>\n          <leafValues>\n            -1.1989659629762173e-02 2.6280459761619568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6346 -5.0938720814883709e-03</internalNodes>\n          <leafValues>\n            6.3418947160243988e-02 -9.0566337108612061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6347 -2.5309680495411158e-03</internalNodes>\n          <leafValues>\n            6.0297761112451553e-02 -2.5049470365047455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6348 -1.5915350522845984e-03</internalNodes>\n          <leafValues>\n            -1.2171190232038498e-01 3.7737991660833359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6349 -3.4030709415674210e-02</internalNodes>\n          <leafValues>\n            4.6413430571556091e-01 -3.5409750416874886e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6350 5.1074200309813023e-03</internalNodes>\n          <leafValues>\n            3.9823830127716064e-02 -1.2645539641380310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6351 -9.6449116244912148e-03</internalNodes>\n          <leafValues>\n            3.3464258909225464e-01 -6.6040740348398685e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6352 1.1422860436141491e-02</internalNodes>\n          <leafValues>\n            -3.6080420017242432e-02 1.3714550435543060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6353 -5.1042139530181885e-03</internalNodes>\n          <leafValues>\n            -9.3986809253692627e-02 2.8844779357314110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6354 -2.6332271099090576e-01</internalNodes>\n          <leafValues>\n            4.9980929493904114e-01 -1.0173249989748001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6355 -2.4556639790534973e-01</internalNodes>\n          <leafValues>\n            -8.1778347492218018e-01 6.9596339017152786e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6356 -2.1419329941272736e-01</internalNodes>\n          <leafValues>\n            -5.1040518283843994e-01 9.4540230929851532e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6357 -1.4363219961524010e-02</internalNodes>\n          <leafValues>\n            -9.1000981628894806e-02 2.4646669626235962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6358 -1.2388969771564007e-03</internalNodes>\n          <leafValues>\n            1.1544570326805115e-01 -4.9565620720386505e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6359 2.1015120670199394e-02</internalNodes>\n          <leafValues>\n            -1.7765879631042480e-02 1.9577859342098236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6360 -4.1783051565289497e-03</internalNodes>\n          <leafValues>\n            -1.1172860115766525e-01 4.4625449925661087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6361 2.0896939095109701e-03</internalNodes>\n          <leafValues>\n            -3.3988729119300842e-02 6.5539501607418060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6362 1.6410060226917267e-02</internalNodes>\n          <leafValues>\n            -2.0373269915580750e-02 2.5331538915634155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6363 -6.4266882836818695e-02</internalNodes>\n          <leafValues>\n            -6.5880149602890015e-01 3.4550630953162909e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6364 6.8898178869858384e-04</internalNodes>\n          <leafValues>\n            6.7643247544765472e-02 -8.7556242942810059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6365 5.6662331335246563e-03</internalNodes>\n          <leafValues>\n            3.0638309195637703e-02 -1.1895540356636047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6366 -4.3778121471405029e-02</internalNodes>\n          <leafValues>\n            -2.8309130668640137e-01 1.7713630571961403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6367 3.4748481120914221e-03</internalNodes>\n          <leafValues>\n            -9.5787122845649719e-02 4.2630400508642197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6368 -1.1673940345644951e-02</internalNodes>\n          <leafValues>\n            -1.0502570122480392e-01 5.0903890281915665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6369 -3.4004659391939640e-03</internalNodes>\n          <leafValues>\n            1.0470719635486603e-01 -4.0939141064882278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6370 2.7091780211776495e-03</internalNodes>\n          <leafValues>\n            -6.0524601489305496e-02 1.3978950679302216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6371 -1.7439300194382668e-02</internalNodes>\n          <leafValues>\n            -3.2391169667243958e-01 1.4630249701440334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6372 -1.2598330155014992e-02</internalNodes>\n          <leafValues>\n            -2.0682629942893982e-01 2.5501869618892670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6373 1.8755869939923286e-02</internalNodes>\n          <leafValues>\n            -4.7925960272550583e-02 1.0864380002021790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6374 -4.2074159719049931e-03</internalNodes>\n          <leafValues>\n            -8.2077808678150177e-02 6.3647769391536713e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6375 -1.6427719674538821e-04</internalNodes>\n          <leafValues>\n            1.0120390355587006e-01 -3.4067928791046143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6376 4.3847691267728806e-02</internalNodes>\n          <leafValues>\n            6.0980222187936306e-03 -8.3685982227325439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6377 -3.9284680038690567e-02</internalNodes>\n          <leafValues>\n            2.8250560164451599e-01 -2.2389259189367294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6378 3.8550909608602524e-02</internalNodes>\n          <leafValues>\n            1.5570489689707756e-02 -3.3978620171546936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6379 -6.9177031517028809e-02</internalNodes>\n          <leafValues>\n            1.2258320301771164e-01 -1.7850179225206375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6380 -1.9251030171290040e-03</internalNodes>\n          <leafValues>\n            -1.0687749832868576e-01 4.6379510313272476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6381 -8.6635202169418335e-03</internalNodes>\n          <leafValues>\n            9.6412748098373413e-02 -1.7563249915838242e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6382 1.3393509387969971e-01</internalNodes>\n          <leafValues>\n            6.3692941330373287e-03 -7.0170587301254272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6383 4.1082348674535751e-02</internalNodes>\n          <leafValues>\n            -1.1077569797635078e-02 1.3463750481605530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6384 1.4911450445652008e-01</internalNodes>\n          <leafValues>\n            9.5263421535491943e-03 -5.0872552394866943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6385 -5.2500818856060505e-03</internalNodes>\n          <leafValues>\n            7.0025578141212463e-02 -4.2880270630121231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6386 2.2823570296168327e-02</internalNodes>\n          <leafValues>\n            -4.1884049773216248e-02 1.1770319938659668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6387 -8.5306530818343163e-03</internalNodes>\n          <leafValues>\n            6.1222139745950699e-02 -2.4944549426436424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6388 1.1971729807555676e-02</internalNodes>\n          <leafValues>\n            3.9662770926952362e-02 -1.6267740726470947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6389 -3.8938269019126892e-02</internalNodes>\n          <leafValues>\n            2.5743520259857178e-01 -1.6356239095330238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6390 -2.1706389263272285e-02</internalNodes>\n          <leafValues>\n            -3.1998679041862488e-01 1.7135290428996086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6391 6.6900630481541157e-03</internalNodes>\n          <leafValues>\n            2.6101849973201752e-02 -1.0980729758739471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6392 -7.2270832955837250e-02</internalNodes>\n          <leafValues>\n            1.9431130588054657e-01 -2.6044359430670738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6393 -6.7073688842356205e-03</internalNodes>\n          <leafValues>\n            -1.7747850716114044e-01 4.5862998813390732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6394 5.5019360035657883e-02</internalNodes>\n          <leafValues>\n            -8.3471573889255524e-03 6.0511541366577148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6395 1.3142649829387665e-01</internalNodes>\n          <leafValues>\n            -5.7535418309271336e-03 2.9167538881301880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6396 -1.6564460238441825e-03</internalNodes>\n          <leafValues>\n            7.0003032684326172e-02 -6.2690876424312592e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6397 1.5445409715175629e-01</internalNodes>\n          <leafValues>\n            6.1896732077002525e-03 -7.4323302507400513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6398 -5.0357519648969173e-03</internalNodes>\n          <leafValues>\n            -1.1333289742469788e-01 3.8741771131753922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6399 2.2772569209337234e-03</internalNodes>\n          <leafValues>\n            -1.1340530216693878e-01 2.1319400519132614e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6400 3.3173530828207731e-03</internalNodes>\n          <leafValues>\n            4.4273331761360168e-02 -1.0459829866886139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6401 -2.9692800715565681e-02</internalNodes>\n          <leafValues>\n            9.2483766376972198e-02 -2.3342609405517578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6402 6.2937840819358826e-02</internalNodes>\n          <leafValues>\n            -1.2998280115425587e-02 3.8887938857078552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6403 3.6641359329223633e-03</internalNodes>\n          <leafValues>\n            3.2099820673465729e-02 -3.9647988975048065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6404 4.4782999902963638e-03</internalNodes>\n          <leafValues>\n            -4.5701328665018082e-02 1.0697010159492493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6405 1.8147319788113236e-03</internalNodes>\n          <leafValues>\n            -3.2871820032596588e-02 1.0647939890623093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6406 4.8941639252007008e-03</internalNodes>\n          <leafValues>\n            2.7911009266972542e-02 -2.1725590527057648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6407 -4.4425828382372856e-03</internalNodes>\n          <leafValues>\n            -1.3470150530338287e-01 1.0781410150229931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6408 -2.5493400171399117e-02</internalNodes>\n          <leafValues>\n            6.8371468782424927e-01 -7.7452720142900944e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6409 2.7835449203848839e-02</internalNodes>\n          <leafValues>\n            2.4144299328327179e-02 -1.5170599520206451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6410 7.5548859313130379e-03</internalNodes>\n          <leafValues>\n            -4.7643400728702545e-02 1.1925770342350006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6411 1.0329609736800194e-02</internalNodes>\n          <leafValues>\n            1.8646810203790665e-02 -1.6122570633888245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6412 -1.2393389828503132e-02</internalNodes>\n          <leafValues>\n            6.0304921865463257e-01 -7.7566630207002163e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6413 1.3833769597113132e-02</internalNodes>\n          <leafValues>\n            -2.7617299929261208e-02 5.1266878843307495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6414 -2.5669319555163383e-02</internalNodes>\n          <leafValues>\n            2.3801359534263611e-01 -2.3971909657120705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6415 -5.2043660543859005e-03</internalNodes>\n          <leafValues>\n            -1.0721790045499802e-01 2.6645049452781677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6416 3.4628969151526690e-03</internalNodes>\n          <leafValues>\n            5.4313410073518753e-02 -1.3458320498466492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6417 -1.9220679998397827e-02</internalNodes>\n          <leafValues>\n            7.2996392846107483e-02 -4.0652111172676086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6418 -2.5009829550981522e-03</internalNodes>\n          <leafValues>\n            -7.7671296894550323e-02 5.9096541255712509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6419 -8.5285156965255737e-03</internalNodes>\n          <leafValues>\n            4.9050811678171158e-02 -6.4078353345394135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6420 4.3327538296580315e-03</internalNodes>\n          <leafValues>\n            2.5221010670065880e-02 -1.9358980655670166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6421 3.6595970392227173e-02</internalNodes>\n          <leafValues>\n            -1.6262590885162354e-02 1.5651239454746246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6422 -1.1795730097219348e-03</internalNodes>\n          <leafValues>\n            -7.2468072175979614e-02 7.0449486374855042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6423 -1.3975829817354679e-02</internalNodes>\n          <leafValues>\n            -1.1789470165967941e-01 2.1292049437761307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6424 -1.3828700175508857e-03</internalNodes>\n          <leafValues>\n            7.9283542931079865e-02 -9.5104120671749115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6425 -2.9435830656439066e-03</internalNodes>\n          <leafValues>\n            7.0368431508541107e-02 -3.3217910677194595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6426 9.5262555405497551e-03</internalNodes>\n          <leafValues>\n            -2.9733620584011078e-02 1.6670459508895874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6427 -9.0114273130893707e-02</internalNodes>\n          <leafValues>\n            -1.6625370085239410e-01 8.6199166253209114e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6428 -1.2089919764548540e-03</internalNodes>\n          <leafValues>\n            8.1083856523036957e-02 -7.3029123246669769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6429 -1.4199960231781006e-01</internalNodes>\n          <leafValues>\n            -1. 2.2284830920398235e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6430 8.0690719187259674e-03</internalNodes>\n          <leafValues>\n            4.7412220388650894e-02 -1.0178930312395096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6431 -4.7410889528691769e-03</internalNodes>\n          <leafValues>\n            1.2051119655370712e-01 -4.9957480281591415e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6432 -1.6977200284600258e-03</internalNodes>\n          <leafValues>\n            -2.4171440303325653e-01 1.9534369930624962e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6433 -2.8892089612782001e-03</internalNodes>\n          <leafValues>\n            2.5727990269660950e-01 -1.1625059880316257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6434 -1.5177440363913774e-03</internalNodes>\n          <leafValues>\n            -9.8784193396568298e-02 4.6706128865480423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6435 1.4197319746017456e-01</internalNodes>\n          <leafValues>\n            -2.5096370372921228e-03 7.5450611114501953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6436 9.7517937421798706e-02</internalNodes>\n          <leafValues>\n            -6.9059049710631371e-03 6.5184432268142700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6437 1.3567379675805569e-02</internalNodes>\n          <leafValues>\n            -7.6325193047523499e-02 8.8054582476615906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6438 8.0981463193893433e-02</internalNodes>\n          <leafValues>\n            1.5558109618723392e-02 -3.4601628780364990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6439 -4.7192731872200966e-03</internalNodes>\n          <leafValues>\n            8.1620022654533386e-02 -4.6072289347648621e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6440 2.0368969999253750e-03</internalNodes>\n          <leafValues>\n            -4.4817630201578140e-02 1.2861390411853790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6441 -1.7878509825095534e-03</internalNodes>\n          <leafValues>\n            4.3731331825256348e-02 -4.4995948672294617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6442 -7.1685528382658958e-03</internalNodes>\n          <leafValues>\n            -1.3597999513149261e-01 3.8796991109848022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6443 -6.7460887134075165e-02</internalNodes>\n          <leafValues>\n            -2.9265740513801575e-01 3.5135280340909958e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6444 -1.5598500147461891e-02</internalNodes>\n          <leafValues>\n            2.3105660080909729e-01 -2.2405069321393967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6445 -2.1026479080319405e-02</internalNodes>\n          <leafValues>\n            -1.5283830463886261e-01 3.1531449407339096e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6446 -1.0558360069990158e-01</internalNodes>\n          <leafValues>\n            -6.8366038799285889e-01 6.8997950293123722e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6447 -3.6966579500585794e-03</internalNodes>\n          <leafValues>\n            3.4315150231122971e-02 -4.8922799527645111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6448 -6.0826627304777503e-04</internalNodes>\n          <leafValues>\n            -5.2638430148363113e-02 8.9546948671340942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6449 -2.8936540707945824e-02</internalNodes>\n          <leafValues>\n            4.1818480938673019e-02 -1.3818169943988323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6450 -5.8082528412342072e-03</internalNodes>\n          <leafValues>\n            6.7874796688556671e-02 -8.5578799247741699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6451 -4.6095378696918488e-02</internalNodes>\n          <leafValues>\n            -1.2584780156612396e-01 2.0466970279812813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6452 5.2972920238971710e-02</internalNodes>\n          <leafValues>\n            -1.2453259900212288e-02 3.4565049409866333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6453 4.9351599067449570e-02</internalNodes>\n          <leafValues>\n            1.0901239700615406e-02 -4.8506981134414673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6454 4.4377800077199936e-02</internalNodes>\n          <leafValues>\n            9.9294837564229965e-03 -4.3877899646759033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6455 -1.1464890092611313e-01</internalNodes>\n          <leafValues>\n            2.6874598860740662e-01 -9.2000560835003853e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6456 1.6887830197811127e-01</internalNodes>\n          <leafValues>\n            5.7101310230791569e-03 -8.5972881317138672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6457 5.1198098808526993e-02</internalNodes>\n          <leafValues>\n            -8.5723921656608582e-03 1.3395169377326965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6458 -3.0789880547672510e-03</internalNodes>\n          <leafValues>\n            -1.0338760167360306e-01 4.3459478765726089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6459 4.7223128378391266e-02</internalNodes>\n          <leafValues>\n            8.1934239715337753e-03 -4.3803408741950989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6460 -7.6270569115877151e-03</internalNodes>\n          <leafValues>\n            1.8713890016078949e-01 -2.4660250172019005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6461 5.4106907919049263e-03</internalNodes>\n          <leafValues>\n            4.1099831461906433e-02 -7.8868232667446136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6462 -1.4900229871273041e-03</internalNodes>\n          <leafValues>\n            -2.0115040242671967e-01 3.1898159533739090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6463 -8.3831608295440674e-02</internalNodes>\n          <leafValues>\n            5.8017939329147339e-01 -5.2973427809774876e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6464 6.2233800999820232e-03</internalNodes>\n          <leafValues>\n            -3.9786059409379959e-02 1.2283950299024582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6465 1.1475080251693726e-01</internalNodes>\n          <leafValues>\n            -1.1975419707596302e-02 2.1586710214614868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6466 -1.5253260498866439e-03</internalNodes>\n          <leafValues>\n            1.3804529607295990e-01 -3.9941880851984024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6467 -5.2878521382808685e-03</internalNodes>\n          <leafValues>\n            -1.2790650129318237e-01 3.2893560826778412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6468 8.9670647867023945e-04</internalNodes>\n          <leafValues>\n            -1.2481059879064560e-01 4.4544249773025513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6469 3.8421660661697388e-02</internalNodes>\n          <leafValues>\n            7.7155791223049164e-03 -6.5575468540191650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6470 -9.3785318313166499e-04</internalNodes>\n          <leafValues>\n            5.5608510971069336e-02 -8.9876912534236908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6471 1.9965849351137877e-03</internalNodes>\n          <leafValues>\n            -2.5297610089182854e-02 1.9413180649280548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6472 4.5782068627886474e-04</internalNodes>\n          <leafValues>\n            3.9089199155569077e-02 -1.2908570468425751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6473 3.8373940624296665e-03</internalNodes>\n          <leafValues>\n            -2.8748869895935059e-02 1.9429750740528107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6474 3.7142829387448728e-04</internalNodes>\n          <leafValues>\n            3.8272358477115631e-02 -1.3759189844131470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6475 7.5116259977221489e-03</internalNodes>\n          <leafValues>\n            -1.4461129903793335e-02 1.2656949460506439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6476 -5.0362840294837952e-02</internalNodes>\n          <leafValues>\n            3.5183578729629517e-01 -1.4051860198378563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6477 3.9921641349792480e-02</internalNodes>\n          <leafValues>\n            2.7280429378151894e-02 -1.9958199560642242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6478 2.2605259716510773e-01</internalNodes>\n          <leafValues>\n            -6.8001961335539818e-03 7.3006898164749146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6479 1.1081779748201370e-01</internalNodes>\n          <leafValues>\n            4.3370737694203854e-03 -8.6829161643981934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6480 -9.7494889050722122e-03</internalNodes>\n          <leafValues>\n            -6.3740663230419159e-02 8.4537997841835022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6481 -2.2887689992785454e-03</internalNodes>\n          <leafValues>\n            9.9654018878936768e-02 -4.1565418243408203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6482 2.0008319988846779e-03</internalNodes>\n          <leafValues>\n            -5.5650699883699417e-02 1.0709869861602783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6483 -1.5160050243139267e-02</internalNodes>\n          <leafValues>\n            -1.4098760485649109e-01 3.8741599768400192e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6484 -6.3132969662547112e-03</internalNodes>\n          <leafValues>\n            -1. 4.4605308212339878e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6485 -1.3970009982585907e-02</internalNodes>\n          <leafValues>\n            1.2481089681386948e-01 -2.1425830200314522e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6486 -4.4321279972791672e-02</internalNodes>\n          <leafValues>\n            -5.3340071439743042e-01 1.0165239684283733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6487 1.4885979471728206e-03</internalNodes>\n          <leafValues>\n            -4.8868600279092789e-02 3.6077901721000671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6488 6.5139681100845337e-02</internalNodes>\n          <leafValues>\n            7.6331058517098427e-03 -5.8781641721725464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6489 -2.0741410553455353e-02</internalNodes>\n          <leafValues>\n            -2.9658278822898865e-01 1.8622800707817078e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>396</maxWeakCount>\n      <stageThreshold>-1.2181390523910522e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 6490 1.3575689867138863e-02</internalNodes>\n          <leafValues>\n            -1.4249590039253235e-01 2.3337620496749878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6491 -7.5882389210164547e-03</internalNodes>\n          <leafValues>\n            8.6464479565620422e-02 -2.3954319953918457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6492 4.2986529879271984e-03</internalNodes>\n          <leafValues>\n            5.0282090902328491e-02 -3.5250121355056763e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6493 -1.9793119281530380e-02</internalNodes>\n          <leafValues>\n            -1.6827470064163208e-01 4.3712720274925232e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6494 6.6613829694688320e-03</internalNodes>\n          <leafValues>\n            -2.0371539890766144e-01 7.1225747466087341e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6495 3.2715050037950277e-03</internalNodes>\n          <leafValues>\n            5.4536718875169754e-02 -2.2428829967975616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6496 -3.6143321543931961e-02</internalNodes>\n          <leafValues>\n            5.5044889450073242e-01 -2.3597210645675659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6497 3.1145319808274508e-03</internalNodes>\n          <leafValues>\n            2.2049430757761002e-02 -3.0109429359436035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6498 8.9540961198508739e-04</internalNodes>\n          <leafValues>\n            -1.2279850244522095e-01 1.0751420259475708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6499 8.0573331797495484e-04</internalNodes>\n          <leafValues>\n            -8.7587781250476837e-02 5.4632049053907394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6500 -6.5726130269467831e-03</internalNodes>\n          <leafValues>\n            -1.5649870038032532e-01 7.6560758054256439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6501 2.2269350010901690e-03</internalNodes>\n          <leafValues>\n            2.9490780085325241e-02 -5.9210199862718582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6502 6.2076752074062824e-03</internalNodes>\n          <leafValues>\n            7.5727343559265137e-02 -1.7675329744815826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6503 6.0021011158823967e-03</internalNodes>\n          <leafValues>\n            -7.8353807330131531e-02 1.4492890238761902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6504 1.1996340006589890e-02</internalNodes>\n          <leafValues>\n            2.8644030913710594e-02 -3.1982469558715820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6505 6.7174229770898819e-03</internalNodes>\n          <leafValues>\n            -1.0739900171756744e-01 1.3106329739093781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6506 5.7567027397453785e-04</internalNodes>\n          <leafValues>\n            -6.4126797020435333e-02 1.6293540596961975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6507 3.9552329108119011e-03</internalNodes>\n          <leafValues>\n            3.7347421050071716e-02 -1.5253570675849915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6508 1.5598450554534793e-03</internalNodes>\n          <leafValues>\n            -9.8687313497066498e-02 9.8718203604221344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6509 -8.4324590861797333e-03</internalNodes>\n          <leafValues>\n            2.0905649662017822e-01 -6.0484018176794052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6510 8.7580326944589615e-03</internalNodes>\n          <leafValues>\n            5.0603430718183517e-02 -2.1845470368862152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6511 -1.1965750157833099e-01</internalNodes>\n          <leafValues>\n            2.6711589097976685e-01 -7.4574039317667484e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6512 2.0653149113059044e-03</internalNodes>\n          <leafValues>\n            3.5194810479879379e-02 -2.5230750441551208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6513 -5.7491107145324349e-04</internalNodes>\n          <leafValues>\n            8.2424223423004150e-02 -1.0830479860305786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6514 -6.7591401748359203e-03</internalNodes>\n          <leafValues>\n            -1.3704189658164978e-01 7.0154368877410889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6515 1.8210740759968758e-02</internalNodes>\n          <leafValues>\n            -2.5407770648598671e-02 1.0123729705810547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6516 -8.8006846606731415e-02</internalNodes>\n          <leafValues>\n            3.6638718843460083e-01 -3.0893180519342422e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6517 -4.4944360852241516e-03</internalNodes>\n          <leafValues>\n            -1.5753810107707977e-01 6.0070630162954330e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6518 -6.3741360791027546e-03</internalNodes>\n          <leafValues>\n            2.1189889311790466e-01 -3.9567999541759491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6519 -3.1097440049052238e-02</internalNodes>\n          <leafValues>\n            -5.9965521097183228e-01 9.9493442103266716e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6520 5.8496380224823952e-03</internalNodes>\n          <leafValues>\n            2.8244689106941223e-02 -2.9778000712394714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6521 -2.2763800807297230e-03</internalNodes>\n          <leafValues>\n            1.0270419716835022e-01 -7.3711991310119629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6522 3.9103049784898758e-03</internalNodes>\n          <leafValues>\n            5.2445668727159500e-02 -2.0123919844627380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6523 2.8906730003654957e-03</internalNodes>\n          <leafValues>\n            -2.1692280471324921e-01 3.7294570356607437e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6524 4.5904931612312794e-03</internalNodes>\n          <leafValues>\n            -8.1276580691337585e-02 1.1013159900903702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6525 -3.4245800226926804e-02</internalNodes>\n          <leafValues>\n            -1.1541730165481567e-01 1.4384049922227859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6526 -1.7881620442494750e-04</internalNodes>\n          <leafValues>\n            6.2885977327823639e-02 -1.3267129659652710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6527 -4.0114559233188629e-03</internalNodes>\n          <leafValues>\n            -1.8961720168590546e-01 3.6701768636703491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6528 3.1429999507963657e-03</internalNodes>\n          <leafValues>\n            -4.9915120005607605e-02 1.7299769818782806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6529 7.8082352876663208e-02</internalNodes>\n          <leafValues>\n            4.7195390798151493e-03 -3.4015879034996033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6530 2.0370949804782867e-01</internalNodes>\n          <leafValues>\n            -2.1733140572905540e-02 3.7422651052474976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6531 9.7424820065498352e-02</internalNodes>\n          <leafValues>\n            -6.8117439514026046e-04 4.9639159440994263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6532 -2.6366419624537230e-03</internalNodes>\n          <leafValues>\n            -1.8532100319862366e-01 4.3768830597400665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6533 4.1020149365067482e-04</internalNodes>\n          <leafValues>\n            2.7802910655736923e-02 -8.7706968188285828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6534 -5.9666559100151062e-02</internalNodes>\n          <leafValues>\n            -5.6872707605361938e-01 1.3388640247285366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6535 -5.1892381161451340e-03</internalNodes>\n          <leafValues>\n            5.0499498844146729e-02 -1.4465869963169098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6536 1.0377140343189240e-01</internalNodes>\n          <leafValues>\n            -1.8952060490846634e-02 4.1107979416847229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6537 -1.4075759798288345e-02</internalNodes>\n          <leafValues>\n            -2.0367360115051270e-01 3.2513279467821121e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6538 -6.8877148441970348e-03</internalNodes>\n          <leafValues>\n            1.2401729822158813e-01 -7.6617129147052765e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6539 2.9345849528908730e-02</internalNodes>\n          <leafValues>\n            8.4471162408590317e-03 -3.4656980633735657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6540 -8.3123557269573212e-03</internalNodes>\n          <leafValues>\n            -1.9180110096931458e-01 3.8585629314184189e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6541 6.4493268728256226e-02</internalNodes>\n          <leafValues>\n            -2.7158880606293678e-02 3.0217999219894409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6542 8.0413377145305276e-04</internalNodes>\n          <leafValues>\n            -1.0444170236587524e-01 6.4721979200839996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6543 -6.5569980069994926e-03</internalNodes>\n          <leafValues>\n            -1.0658600181341171e-01 2.5238489732146263e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6544 -3.8326930254697800e-02</internalNodes>\n          <leafValues>\n            -6.8506389856338501e-01 9.6486946567893028e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6545 -4.0327329188585281e-02</internalNodes>\n          <leafValues>\n            1.9759850203990936e-01 -2.5184169411659241e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6546 6.1981407925486565e-03</internalNodes>\n          <leafValues>\n            4.6415790915489197e-02 -1.7171670496463776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6547 3.7465501576662064e-02</internalNodes>\n          <leafValues>\n            -1.5010279603302479e-02 8.6962252855300903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6548 -6.0584479942917824e-03</internalNodes>\n          <leafValues>\n            6.9242753088474274e-02 -9.4594202935695648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6549 -1.4991699717938900e-02</internalNodes>\n          <leafValues>\n            -1.4969819784164429e-01 4.6579450368881226e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6550 6.4760357141494751e-02</internalNodes>\n          <leafValues>\n            -2.6089169085025787e-02 2.7072009444236755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6551 5.9020328521728516e-01</internalNodes>\n          <leafValues>\n            3.9715780876576900e-03 -6.3918071985244751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6552 7.3892213404178619e-02</internalNodes>\n          <leafValues>\n            -6.2506332993507385e-02 1.3100719451904297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6553 4.3928170204162598e-01</internalNodes>\n          <leafValues>\n            5.0452877767384052e-03 -3.7628439068794250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6554 1.0192040354013443e-01</internalNodes>\n          <leafValues>\n            2.2053290158510208e-02 -3.3408200740814209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6555 1.1084219813346863e-01</internalNodes>\n          <leafValues>\n            1.6215540468692780e-02 -3.4900701045989990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6556 5.5628088302910328e-03</internalNodes>\n          <leafValues>\n            -5.2196711301803589e-02 1.1796370148658752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6557 -6.3897081417962909e-04</internalNodes>\n          <leafValues>\n            -1.5659700334072113e-01 4.4744450598955154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6558 -3.5426639951765537e-03</internalNodes>\n          <leafValues>\n            1.4490570127964020e-01 -4.2518708854913712e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6559 -3.3016160130500793e-02</internalNodes>\n          <leafValues>\n            -3.6942940950393677e-01 7.6470980420708656e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6560 9.6050858497619629e-02</internalNodes>\n          <leafValues>\n            6.5154801122844219e-03 -8.7827038764953613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6561 -4.9572009593248367e-02</internalNodes>\n          <leafValues>\n            -4.2723020911216736e-01 3.1567770056426525e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6562 2.5885479408316314e-04</internalNodes>\n          <leafValues>\n            -1.5689669549465179e-01 3.8051828742027283e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6563 -1.5898289857432246e-03</internalNodes>\n          <leafValues>\n            -1.8845720589160919e-01 2.4630049243569374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6564 -1.3463890354614705e-04</internalNodes>\n          <leafValues>\n            1.4452700316905975e-01 -4.4172260910272598e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6565 1.1674249544739723e-02</internalNodes>\n          <leafValues>\n            -2.5676380842924118e-02 1.9527709484100342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6566 -2.3507000878453255e-02</internalNodes>\n          <leafValues>\n            -3.2271888852119446e-01 1.8514839932322502e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6567 3.1225800514221191e-02</internalNodes>\n          <leafValues>\n            -1.9622299820184708e-02 1.4570100605487823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6568 8.0607319250702858e-04</internalNodes>\n          <leafValues>\n            4.4379990547895432e-02 -1.3635620474815369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6569 -2.6445880532264709e-01</internalNodes>\n          <leafValues>\n            4.1771200299263000e-01 -6.3821650110185146e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6570 3.5479381680488586e-02</internalNodes>\n          <leafValues>\n            -2.2758480161428452e-02 2.6946100592613220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6571 -3.8137599825859070e-02</internalNodes>\n          <leafValues>\n            -3.6719909310340881e-01 1.8722059205174446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6572 3.9108810015022755e-03</internalNodes>\n          <leafValues>\n            -1.8176819384098053e-01 3.9054948836565018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6573 4.1834539733827114e-03</internalNodes>\n          <leafValues>\n            4.8676248639822006e-02 -1.3558860123157501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6574 -4.6641420572996140e-02</internalNodes>\n          <leafValues>\n            -5.8741682767868042e-01 9.8590552806854248e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6575 1.1950139887630939e-02</internalNodes>\n          <leafValues>\n            -2.5506049394607544e-02 2.7971199154853821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6576 -6.3585072755813599e-02</internalNodes>\n          <leafValues>\n            -7.0940697193145752e-01 8.8691459968686104e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6577 9.7221415489912033e-03</internalNodes>\n          <leafValues>\n            -2.7885029092431068e-02 5.4626680910587311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6578 -1.6111459583044052e-02</internalNodes>\n          <leafValues>\n            -6.8265482783317566e-02 8.0932967364788055e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6579 -7.9950511455535889e-02</internalNodes>\n          <leafValues>\n            2.0425680279731750e-01 -3.4306850284337997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6580 3.1421340536326170e-03</internalNodes>\n          <leafValues>\n            4.2196881026029587e-02 -1.5366910398006439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6581 2.9253180400701240e-05</internalNodes>\n          <leafValues>\n            -7.6382257044315338e-02 3.1748879700899124e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6582 -5.4587088525295258e-02</internalNodes>\n          <leafValues>\n            -6.4891487360000610e-01 9.1545386239886284e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6583 -2.1083420142531395e-02</internalNodes>\n          <leafValues>\n            1.9058999419212341e-01 -2.4686640128493309e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6584 3.9170900708995759e-04</internalNodes>\n          <leafValues>\n            -1.0570889711380005e-01 5.2946768701076508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6585 2.2588829696178436e-01</internalNodes>\n          <leafValues>\n            2.3077470250427723e-03 -9.2606049776077271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6586 -1.8899979069828987e-02</internalNodes>\n          <leafValues>\n            1.4503970742225647e-01 -3.8506619632244110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6587 -8.7533425539731979e-03</internalNodes>\n          <leafValues>\n            8.3958826959133148e-02 -3.7479098886251450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6588 -2.0821259915828705e-01</internalNodes>\n          <leafValues>\n            -6.7948538064956665e-01 9.8609952256083488e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6589 1.6270060092210770e-02</internalNodes>\n          <leafValues>\n            1.4115580357611179e-02 -1.8218359351158142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6590 3.0145489145070314e-03</internalNodes>\n          <leafValues>\n            5.2013739943504333e-02 -1.1450190097093582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6591 1.8547449260950089e-02</internalNodes>\n          <leafValues>\n            -2.5681620463728905e-02 1.6456380486488342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6592 4.2732958681881428e-03</internalNodes>\n          <leafValues>\n            -5.9573240578174591e-02 1.0390280187129974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6593 -2.8249630704522133e-02</internalNodes>\n          <leafValues>\n            -7.8161589801311493e-02 2.9064230620861053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6594 -1.5538600273430347e-02</internalNodes>\n          <leafValues>\n            -1.4481380581855774e-01 3.8434058427810669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6595 3.8620950654149055e-03</internalNodes>\n          <leafValues>\n            -3.8745380938053131e-02 9.8183527588844299e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6596 1.5253369696438313e-02</internalNodes>\n          <leafValues>\n            1.7946500331163406e-02 -3.0948030948638916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6597 -4.2140888981521130e-03</internalNodes>\n          <leafValues>\n            5.7521570473909378e-02 -2.7782430872321129e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6598 -2.1610679104924202e-03</internalNodes>\n          <leafValues>\n            1.0617449879646301e-01 -5.9411250054836273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6599 -1.8687519477680326e-03</internalNodes>\n          <leafValues>\n            -1.2807689607143402e-01 4.7781638801097870e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6600 -6.2083022203296423e-04</internalNodes>\n          <leafValues>\n            1.1725349724292755e-01 -4.7861199826002121e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6601 -2.5575871113687754e-03</internalNodes>\n          <leafValues>\n            5.7900648564100266e-02 -8.4036856889724731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6602 4.1207410395145416e-03</internalNodes>\n          <leafValues>\n            5.4239779710769653e-02 -1.2611140310764313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6603 1.7525779083371162e-02</internalNodes>\n          <leafValues>\n            2.8792750090360641e-02 -1.9793170690536499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6604 -1.9012490287423134e-02</internalNodes>\n          <leafValues>\n            1.1444319784641266e-01 -6.6813051700592041e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6605 9.5198452472686768e-03</internalNodes>\n          <leafValues>\n            -3.9105638861656189e-02 8.8588982820510864e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6606 7.7857482247054577e-03</internalNodes>\n          <leafValues>\n            4.7903850674629211e-02 -1.1941280215978622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6607 -2.5355129037052393e-03</internalNodes>\n          <leafValues>\n            6.1377499252557755e-02 -5.1576390862464905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6608 1.3886679708957672e-01</internalNodes>\n          <leafValues>\n            7.1258218958973885e-03 -7.5076061487197876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6609 -3.0958889983594418e-03</internalNodes>\n          <leafValues>\n            7.3432266712188721e-02 -4.0409181267023087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6610 4.7118910588324070e-03</internalNodes>\n          <leafValues>\n            2.2374270483851433e-02 -2.3885080218315125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6611 6.3587618060410023e-03</internalNodes>\n          <leafValues>\n            5.3684379905462265e-02 -1.3398240506649017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6612 6.8367011845111847e-02</internalNodes>\n          <leafValues>\n            -3.6103919148445129e-02 1.7410080134868622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6613 -3.2802459318190813e-03</internalNodes>\n          <leafValues>\n            -1.4603079855442047e-01 4.8215139657258987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6614 -6.6430270671844482e-02</internalNodes>\n          <leafValues>\n            4.6738991141319275e-01 -1.3140380382537842e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6615 -4.2274069041013718e-02</internalNodes>\n          <leafValues>\n            -6.3253331184387207e-01 1.0359439998865128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6616 -1.0691370116546750e-03</internalNodes>\n          <leafValues>\n            -1.1469829827547073e-01 4.5048121362924576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6617 5.4235469549894333e-02</internalNodes>\n          <leafValues>\n            -1.9809609279036522e-02 3.1430730223655701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6618 -7.2852471930673346e-06</internalNodes>\n          <leafValues>\n            5.8051250874996185e-02 -1.0246170312166214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6619 2.0893309265375137e-02</internalNodes>\n          <leafValues>\n            1.5608809888362885e-02 -2.1545739471912384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6620 -5.3765181452035904e-02</internalNodes>\n          <leafValues>\n            2.0559239387512207e-01 -3.2525919377803802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6621 -1.5972670167684555e-02</internalNodes>\n          <leafValues>\n            -1.7119890451431274e-01 1.4773829840123653e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6622 -1.4591409824788570e-02</internalNodes>\n          <leafValues>\n            -2.3046019673347473e-01 2.3345010355114937e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6623 2.4016639217734337e-03</internalNodes>\n          <leafValues>\n            -2.8272429481148720e-02 9.5124237239360809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6624 -2.0430689677596092e-02</internalNodes>\n          <leafValues>\n            4.0655559301376343e-01 -1.6212539747357368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6625 8.1926792860031128e-02</internalNodes>\n          <leafValues>\n            8.7937163189053535e-03 -4.0210300683975220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6626 -1.2892849743366241e-02</internalNodes>\n          <leafValues>\n            -1.1946929991245270e-01 4.5022130012512207e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6627 9.4712682068347931e-02</internalNodes>\n          <leafValues>\n            -1.0760080069303513e-02 2.1693980693817139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6628 4.0901689790189266e-03</internalNodes>\n          <leafValues>\n            -8.4592603147029877e-02 7.0457696914672852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6629 -1.2496539950370789e-01</internalNodes>\n          <leafValues>\n            2.8276950120925903e-01 -4.2760102078318596e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6630 1.5758169814944267e-02</internalNodes>\n          <leafValues>\n            -4.8926588147878647e-02 1.2380229681730270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6631 -5.2818129770457745e-03</internalNodes>\n          <leafValues>\n            6.1836440116167068e-02 -3.6712940782308578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6632 8.6735859513282776e-03</internalNodes>\n          <leafValues>\n            -4.7372240573167801e-02 1.5809150040149689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6633 -5.2273580804467201e-03</internalNodes>\n          <leafValues>\n            -1.1694569885730743e-01 2.9156440868973732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6634 6.1831828206777573e-02</internalNodes>\n          <leafValues>\n            8.0447606742382050e-03 -6.8530529737472534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6635 6.6815607249736786e-02</internalNodes>\n          <leafValues>\n            -8.4813889116048813e-03 1.4523769915103912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6636 -1.0062000155448914e-01</internalNodes>\n          <leafValues>\n            7.4605828523635864e-01 -6.8016690202057362e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6637 -1.4751539565622807e-02</internalNodes>\n          <leafValues>\n            -1.4893519878387451e-01 3.9579190313816071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6638 3.4616589546203613e-02</internalNodes>\n          <leafValues>\n            -2.0749099552631378e-02 2.8549820184707642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6639 -1.2966389954090118e-01</internalNodes>\n          <leafValues>\n            -5.5446487665176392e-01 4.6082548797130585e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6640 7.4035510420799255e-02</internalNodes>\n          <leafValues>\n            5.3174998611211777e-03 -8.4149527549743652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6641 1.0177110135555267e-01</internalNodes>\n          <leafValues>\n            -7.6451660133898258e-03 3.5442221164703369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6642 8.9658737182617188e-02</internalNodes>\n          <leafValues>\n            -9.3901483342051506e-03 5.0577938556671143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6643 -1.6180740296840668e-01</internalNodes>\n          <leafValues>\n            -6.5451782941818237e-01 8.7116202339529991e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6644 1.8784119747579098e-03</internalNodes>\n          <leafValues>\n            5.2064418792724609e-02 -9.0741947293281555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6645 1.9505689851939678e-03</internalNodes>\n          <leafValues>\n            -5.4091621190309525e-02 3.5506200045347214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6646 -6.0789179988205433e-03</internalNodes>\n          <leafValues>\n            1.2238519638776779e-01 -4.6803738921880722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6647 -2.2403250634670258e-01</internalNodes>\n          <leafValues>\n            -7.7728492021560669e-01 2.3639709688723087e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6648 -1.3039590418338776e-01</internalNodes>\n          <leafValues>\n            -2.7692648768424988e-01 2.1548289805650711e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6649 7.2587423026561737e-02</internalNodes>\n          <leafValues>\n            1.0621299967169762e-02 -1.6270780563354492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6650 7.3180042207241058e-02</internalNodes>\n          <leafValues>\n            -1.7519259825348854e-02 3.3697870373725891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6651 -3.4525979310274124e-02</internalNodes>\n          <leafValues>\n            -5.3538697957992554e-01 1.0397709906101227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6652 2.3753559216856956e-03</internalNodes>\n          <leafValues>\n            5.1910828799009323e-02 -9.6959516406059265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6653 -6.8947779946029186e-03</internalNodes>\n          <leafValues>\n            8.2409977912902832e-02 -2.3098999634385109e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6654 -9.4773292541503906e-02</internalNodes>\n          <leafValues>\n            -7.0510691404342651e-01 7.7322297729551792e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6655 5.6327427737414837e-03</internalNodes>\n          <leafValues>\n            1.7960680648684502e-02 -7.2307042777538300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6656 6.6090249456465244e-03</internalNodes>\n          <leafValues>\n            -3.6701079457998276e-02 1.3706339895725250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6657 -2.4978399276733398e-02</internalNodes>\n          <leafValues>\n            -1.6281390190124512e-01 7.6992698013782501e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6658 -6.0882410034537315e-03</internalNodes>\n          <leafValues>\n            1.0555619746446609e-01 -4.8507411032915115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6659 6.1161588877439499e-02</internalNodes>\n          <leafValues>\n            1.1127579491585493e-03 -5.6657880544662476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6660 -3.8722809404134750e-02</internalNodes>\n          <leafValues>\n            -5.9797358512878418e-01 8.4153199568390846e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6661 6.2335198745131493e-03</internalNodes>\n          <leafValues>\n            3.1563021242618561e-02 -1.8769240379333496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6662 1.6939510405063629e-01</internalNodes>\n          <leafValues>\n            -1.7183739691972733e-02 3.1440049409866333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6663 8.5851341485977173e-02</internalNodes>\n          <leafValues>\n            5.7081878185272217e-03 -4.9966809153556824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6664 -2.0315010100603104e-02</internalNodes>\n          <leafValues>\n            -1.2359900027513504e-01 4.4704839587211609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6665 -4.0276069194078445e-03</internalNodes>\n          <leafValues>\n            4.7957219183444977e-02 -9.7137056291103363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6666 -3.9274509996175766e-02</internalNodes>\n          <leafValues>\n            1.8804270029067993e-01 -2.9754199087619781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6667 -2.1163629367947578e-02</internalNodes>\n          <leafValues>\n            -1.5724900364875793e-01 3.9636529982089996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6668 4.0783579461276531e-03</internalNodes>\n          <leafValues>\n            -4.7562818974256516e-02 1.0976249724626541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6669 1.0180410463362932e-03</internalNodes>\n          <leafValues>\n            -6.6306091845035553e-02 9.8773077130317688e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6670 2.8516049496829510e-03</internalNodes>\n          <leafValues>\n            -5.1101740449666977e-02 9.6994958817958832e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6671 4.8373742029070854e-03</internalNodes>\n          <leafValues>\n            4.0866550058126450e-02 -1.2480360269546509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6672 -3.4715479705482721e-04</internalNodes>\n          <leafValues>\n            4.1778691112995148e-02 -1.2574540078639984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6673 -6.3760261982679367e-03</internalNodes>\n          <leafValues>\n            1.5754230320453644e-01 -4.1692778468132019e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6674 -1.2534069828689098e-02</internalNodes>\n          <leafValues>\n            -1.3565440475940704e-01 4.1295569390058517e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6675 -2.3321550339460373e-02</internalNodes>\n          <leafValues>\n            1.2518349289894104e-01 -1.3427260331809521e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6676 2.1691620349884033e-03</internalNodes>\n          <leafValues>\n            1.4331200718879700e-01 -3.5120349377393723e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6677 -5.0005540251731873e-02</internalNodes>\n          <leafValues>\n            2.1500219404697418e-01 -2.7628419920802116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6678 1.3818169943988323e-02</internalNodes>\n          <leafValues>\n            2.2208500653505325e-02 -2.6048558950424194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6679 -1.1389379948377609e-01</internalNodes>\n          <leafValues>\n            -2.6434680819511414e-01 5.8247619308531284e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6680 1.4204699546098709e-03</internalNodes>\n          <leafValues>\n            -7.1546286344528198e-02 7.0379182696342468e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6681 1.2329610064625740e-02</internalNodes>\n          <leafValues>\n            2.9475130140781403e-02 -1.9224089384078979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6682 3.4679430536925793e-03</internalNodes>\n          <leafValues>\n            -6.1920940876007080e-02 9.0893089771270752e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6683 -1.2088479846715927e-01</internalNodes>\n          <leafValues>\n            4.6626859903335571e-01 -2.7361230459064245e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6684 -1.5827519819140434e-02</internalNodes>\n          <leafValues>\n            -9.5342837274074554e-02 5.5003169924020767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6685 -5.3695850074291229e-03</internalNodes>\n          <leafValues>\n            1.6891020536422729e-01 -4.6700950711965561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6686 5.2695080637931824e-02</internalNodes>\n          <leafValues>\n            -5.6889699772000313e-03 9.0487861633300781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6687 -1.1397979687899351e-03</internalNodes>\n          <leafValues>\n            3.4316681325435638e-02 -7.5787901878356934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6688 -2.8946578968316317e-03</internalNodes>\n          <leafValues>\n            7.5482390820980072e-02 -7.6466552913188934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6689 -5.1091420464217663e-03</internalNodes>\n          <leafValues>\n            -1.2294950336217880e-01 4.9972750246524811e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6690 1.8837359966710210e-03</internalNodes>\n          <leafValues>\n            4.3406400829553604e-02 -1.2572230398654938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6691 1.5422919765114784e-02</internalNodes>\n          <leafValues>\n            1.5831289812922478e-02 -2.0917390286922455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6692 2.1666040644049644e-02</internalNodes>\n          <leafValues>\n            -2.4713400751352310e-02 2.4171669781208038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6693 -9.4336412847042084e-02</internalNodes>\n          <leafValues>\n            8.0389547348022461e-01 -2.6913180481642485e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6694 -6.0154758393764496e-03</internalNodes>\n          <leafValues>\n            -1.3231749832630157e-01 4.9613710492849350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6695 4.3775320053100586e-02</internalNodes>\n          <leafValues>\n            4.5396219938993454e-03 -5.8732748031616211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6696 1.0561950039118528e-03</internalNodes>\n          <leafValues>\n            -8.8057562708854675e-02 7.1294106543064117e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6697 -1.6394529957324266e-03</internalNodes>\n          <leafValues>\n            9.0810842812061310e-02 -3.7760701030492783e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6698 2.6742160320281982e-01</internalNodes>\n          <leafValues>\n            9.4182817265391350e-03 -5.2740138769149780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6699 -2.1629330515861511e-01</internalNodes>\n          <leafValues>\n            -6.1128187179565430e-01 5.2118571475148201e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6700 -2.6974570751190186e-01</internalNodes>\n          <leafValues>\n            -7.3394459486007690e-01 6.0041057877242565e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6701 -6.0050850734114647e-03</internalNodes>\n          <leafValues>\n            1.1067090183496475e-01 -2.0614199340343475e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6702 4.9247939139604568e-02</internalNodes>\n          <leafValues>\n            1.0287189856171608e-02 -4.9581390619277954e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6703 4.9235569313168526e-03</internalNodes>\n          <leafValues>\n            1.4880360104143620e-02 -1.1287470161914825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6704 -8.2946997135877609e-03</internalNodes>\n          <leafValues>\n            5.6476062536239624e-01 -1.0442149825394154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6705 2.3567330092191696e-02</internalNodes>\n          <leafValues>\n            -2.9235871043056250e-03 2.4979250133037567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6706 -4.1040919721126556e-02</internalNodes>\n          <leafValues>\n            4.0030491352081299e-01 -1.3312620110809803e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6707 -5.3690220229327679e-03</internalNodes>\n          <leafValues>\n            -2.9186370968818665e-01 1.6781600192189217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6708 3.6616099532693624e-03</internalNodes>\n          <leafValues>\n            -4.7920960932970047e-02 1.0898339748382568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6709 -2.4735789746046066e-02</internalNodes>\n          <leafValues>\n            6.7270919680595398e-02 -1.6207970678806305e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6710 8.6064152419567108e-03</internalNodes>\n          <leafValues>\n            -6.0250200331211090e-02 1.0674320161342621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6711 -3.3892609179019928e-02</internalNodes>\n          <leafValues>\n            -1.9795329868793488e-01 1.9014969468116760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6712 1.0522030293941498e-01</internalNodes>\n          <leafValues>\n            6.0530952177941799e-03 -7.5238007307052612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6713 -5.9583578258752823e-03</internalNodes>\n          <leafValues>\n            9.9094383418560028e-02 -3.5570640116930008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6714 2.7306210249662399e-03</internalNodes>\n          <leafValues>\n            -8.8879808783531189e-02 6.4843989908695221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6715 4.3243571417406201e-04</internalNodes>\n          <leafValues>\n            3.2528489828109741e-02 -9.1479070484638214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6716 -5.2608880214393139e-03</internalNodes>\n          <leafValues>\n            1.3896170258522034e-01 -4.0624819695949554e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6717 -1.5605129301548004e-01</internalNodes>\n          <leafValues>\n            -7.3170071840286255e-01 2.5103189982473850e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6718 -1.1245990172028542e-02</internalNodes>\n          <leafValues>\n            -1.1834110319614410e-01 5.2261721342802048e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6719 -9.2654878972098231e-04</internalNodes>\n          <leafValues>\n            4.3350778520107269e-02 -7.6521359384059906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6720 1.5148459933698177e-03</internalNodes>\n          <leafValues>\n            -7.1485839784145355e-02 7.3206916451454163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6721 4.6230577863752842e-03</internalNodes>\n          <leafValues>\n            2.0211879163980484e-02 -4.6565961092710495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6722 1.2555140256881714e-01</internalNodes>\n          <leafValues>\n            9.2135155573487282e-03 -5.4831707477569580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6723 4.0751680731773376e-02</internalNodes>\n          <leafValues>\n            -4.5771248638629913e-02 5.6990999728441238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6724 -2.2074349224567413e-02</internalNodes>\n          <leafValues>\n            -3.9075499773025513e-01 1.1654710397124290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6725 1.2412919849157333e-01</internalNodes>\n          <leafValues>\n            -6.0688108205795288e-03 2.6376709342002869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6726 6.0741119086742401e-03</internalNodes>\n          <leafValues>\n            1.0768520087003708e-01 -5.0139870494604111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6727 -1.4694149792194366e-01</internalNodes>\n          <leafValues>\n            -4.3452548980712891e-01 5.5836569517850876e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6728 -1.2046460062265396e-01</internalNodes>\n          <leafValues>\n            -5.4068279266357422e-01 9.8318615928292274e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6729 -9.0990159660577774e-03</internalNodes>\n          <leafValues>\n            -1.3625259697437286e-01 9.5357475802302361e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6730 1.0966449975967407e-02</internalNodes>\n          <leafValues>\n            -3.1344298273324966e-02 1.7068630456924438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6731 -2.1763380616903305e-02</internalNodes>\n          <leafValues>\n            7.3918178677558899e-02 -1.7846420407295227e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6732 -4.9578789621591568e-02</internalNodes>\n          <leafValues>\n            -5.8034032583236694e-01 1.0063209570944309e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6733 -6.6796392202377319e-03</internalNodes>\n          <leafValues>\n            -4.7280300408601761e-02 3.8668069988489151e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6734 -1.0112039744853973e-03</internalNodes>\n          <leafValues>\n            4.5412030071020126e-02 -1.4603359997272491e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6735 2.5813570246100426e-03</internalNodes>\n          <leafValues>\n            3.1112480908632278e-02 -1.0001499950885773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6736 2.0418369676917791e-03</internalNodes>\n          <leafValues>\n            4.8378061503171921e-02 -1.4722709357738495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6737 5.6246068328619003e-02</internalNodes>\n          <leafValues>\n            3.7779449485242367e-03 -6.1013627052307129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6738 -2.6130750775337219e-02</internalNodes>\n          <leafValues>\n            2.6240581274032593e-01 -2.4313600733876228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6739 -1.2151029892265797e-02</internalNodes>\n          <leafValues>\n            -5.6114129722118378e-02 2.9739160090684891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6740 -5.1036469638347626e-02</internalNodes>\n          <leafValues>\n            2.7955740690231323e-01 -2.1683510392904282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6741 8.7444618344306946e-02</internalNodes>\n          <leafValues>\n            -3.7635879125446081e-03 5.2711361646652222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6742 3.4982790239155293e-03</internalNodes>\n          <leafValues>\n            5.6673228740692139e-02 -9.2554636299610138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6743 9.7861722111701965e-02</internalNodes>\n          <leafValues>\n            3.7442990578711033e-03 -5.4237729310989380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6744 -6.3886200077831745e-03</internalNodes>\n          <leafValues>\n            -9.7468167543411255e-02 6.0299299657344818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6745 -1.0128310322761536e-01</internalNodes>\n          <leafValues>\n            -6.5173667669296265e-01 3.4321940038353205e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6746 -3.9312228560447693e-02</internalNodes>\n          <leafValues>\n            2.6476991176605225e-01 -2.6981310918927193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6747 1.1417990177869797e-01</internalNodes>\n          <leafValues>\n            7.5375889427959919e-03 -6.8553638458251953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6748 8.4078265354037285e-03</internalNodes>\n          <leafValues>\n            -3.0973089858889580e-02 1.7200429737567902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6749 -1.5489499783143401e-03</internalNodes>\n          <leafValues>\n            4.6454809606075287e-02 -6.9261766970157623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6750 2.9730569804087281e-04</internalNodes>\n          <leafValues>\n            3.7772700190544128e-02 -1.3767069578170776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6751 2.8460770845413208e-03</internalNodes>\n          <leafValues>\n            -4.3182320892810822e-02 9.9634610116481781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6752 4.9144420772790909e-02</internalNodes>\n          <leafValues>\n            5.9465290978550911e-03 -8.2366597652435303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6753 1.0286020115017891e-02</internalNodes>\n          <leafValues>\n            2.8591090813279152e-02 -1.5941999852657318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6754 1.9976280629634857e-02</internalNodes>\n          <leafValues>\n            -2.9617030173540115e-02 1.5943069756031036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6755 2.3533409461379051e-02</internalNodes>\n          <leafValues>\n            7.5594270601868629e-03 -2.3041130602359772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6756 -9.0482197701931000e-03</internalNodes>\n          <leafValues>\n            -1.2408699840307236e-01 4.1615001857280731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6757 -3.8635660894215107e-03</internalNodes>\n          <leafValues>\n            8.7811216711997986e-02 -4.1511181741952896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6758 -2.7298410423099995e-03</internalNodes>\n          <leafValues>\n            9.4712667167186737e-02 -5.2838958799839020e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6759 -4.5442068949341774e-03</internalNodes>\n          <leafValues>\n            -1.0748460143804550e-01 1.7744770273566246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6760 2.3271010722965002e-03</internalNodes>\n          <leafValues>\n            -8.3826236426830292e-02 5.7210709899663925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6761 -1.2409550137817860e-02</internalNodes>\n          <leafValues>\n            2.3100300133228302e-01 -2.2110419347882271e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6762 -4.5268908143043518e-03</internalNodes>\n          <leafValues>\n            -1.6244150698184967e-01 3.2564349472522736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6763 -4.4666860048891976e-05</internalNodes>\n          <leafValues>\n            2.4341119825839996e-01 -2.6702800765633583e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6764 7.7015289571136236e-04</internalNodes>\n          <leafValues>\n            -1.2858650088310242e-01 4.2308151721954346e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6765 4.4863048940896988e-02</internalNodes>\n          <leafValues>\n            1.0781999677419662e-02 -3.5814240574836731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6766 3.7869490683078766e-02</internalNodes>\n          <leafValues>\n            -1.4966360293328762e-02 3.4195008873939514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6767 -8.3092376589775085e-03</internalNodes>\n          <leafValues>\n            -2.7514660358428955e-01 2.0139539614319801e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6768 -4.3290119618177414e-02</internalNodes>\n          <leafValues>\n            3.0036559700965881e-01 -1.9493019208312035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6769 -1.0075629688799381e-02</internalNodes>\n          <leafValues>\n            -1.2262579798698425e-01 9.1246366500854492e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6770 -3.3486529719084501e-03</internalNodes>\n          <leafValues>\n            1.1790259927511215e-01 -4.1050188243389130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6771 -6.4645247766748071e-04</internalNodes>\n          <leafValues>\n            -7.8154936432838440e-02 4.6990569680929184e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6772 3.5247370600700378e-02</internalNodes>\n          <leafValues>\n            1.0365270078182220e-02 -5.1507127285003662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6773 3.5965928691439331e-04</internalNodes>\n          <leafValues>\n            -7.7936813235282898e-02 3.0275240540504456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6774 -1.5898740384727716e-03</internalNodes>\n          <leafValues>\n            -1.0594320297241211e-01 5.0036150962114334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6775 -2.1408300846815109e-02</internalNodes>\n          <leafValues>\n            1.1649339646100998e-01 -3.7540700286626816e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6776 -2.7612380217760801e-03</internalNodes>\n          <leafValues>\n            3.4751810133457184e-02 -1.3718530535697937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6777 6.4307968132197857e-03</internalNodes>\n          <leafValues>\n            -1.3667429797351360e-02 1.4938560128211975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6778 -6.9555612280964851e-03</internalNodes>\n          <leafValues>\n            -1.2171459943056107e-01 5.6100189685821533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6779 -2.7654969692230225e-01</internalNodes>\n          <leafValues>\n            -8.5077387094497681e-01 3.8885050453245640e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6780 4.7567309811711311e-03</internalNodes>\n          <leafValues>\n            -6.5594427287578583e-02 7.5947061181068420e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6781 8.9218050241470337e-02</internalNodes>\n          <leafValues>\n            6.5016360022127628e-03 -3.2032990455627441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6782 6.7748151719570160e-02</internalNodes>\n          <leafValues>\n            -1.1878870427608490e-02 4.4954490661621094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6783 4.5336190611124039e-02</internalNodes>\n          <leafValues>\n            7.4317739345133305e-03 -4.3144878745079041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6784 1.0965850204229355e-02</internalNodes>\n          <leafValues>\n            2.5135010480880737e-02 -2.0359070599079132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6785 -6.5938562154769897e-02</internalNodes>\n          <leafValues>\n            4.5524141192436218e-01 -7.5815711170434952e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6786 -4.2270109057426453e-02</internalNodes>\n          <leafValues>\n            3.8470050692558289e-01 -1.1672279797494411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6787 -6.3518402166664600e-03</internalNodes>\n          <leafValues>\n            -8.7010167539119720e-02 3.4159921109676361e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6788 3.2269880175590515e-02</internalNodes>\n          <leafValues>\n            -4.0711440145969391e-02 1.2469469755887985e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6789 -3.9068311452865601e-02</internalNodes>\n          <leafValues>\n            -1.0403119772672653e-01 6.7032999359071255e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6790 -1.0384949855506420e-03</internalNodes>\n          <leafValues>\n            5.8422528207302094e-02 -1.0154890269041061e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6791 2.9740650206804276e-02</internalNodes>\n          <leafValues>\n            1.2596059590578079e-02 -1.5170450508594513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6792 5.3193639032542706e-03</internalNodes>\n          <leafValues>\n            -4.6843089163303375e-02 1.1005250364542007e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6793 -3.2385820522904396e-03</internalNodes>\n          <leafValues>\n            -1.0309839993715286e-01 5.0686061382293701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6794 4.2344750836491585e-03</internalNodes>\n          <leafValues>\n            -4.9582429230213165e-02 1.2092150002717972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6795 -7.4786663055419922e-02</internalNodes>\n          <leafValues>\n            -4.6895131468772888e-01 3.8582859560847282e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6796 8.5299033671617508e-03</internalNodes>\n          <leafValues>\n            3.8806159049272537e-02 -1.2022049725055695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6797 -4.8662569373846054e-02</internalNodes>\n          <leafValues>\n            1.6113990545272827e-01 -1.1717130430042744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6798 -1.3677199603989720e-03</internalNodes>\n          <leafValues>\n            -8.5303716361522675e-02 5.5394109338521957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6799 -5.8111362159252167e-03</internalNodes>\n          <leafValues>\n            4.7039270401000977e-02 -5.1736868917942047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6800 -3.9951619692146778e-03</internalNodes>\n          <leafValues>\n            -7.8167162835597992e-02 6.3919343054294586e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6801 3.0817699152976274e-03</internalNodes>\n          <leafValues>\n            -6.9289833307266235e-02 2.8242539614439011e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6802 -4.6279471367597580e-02</internalNodes>\n          <leafValues>\n            -3.4760490059852600e-01 1.3878909870982170e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6803 -1.8725780770182610e-02</internalNodes>\n          <leafValues>\n            1.5222269296646118e-01 -1.5724090859293938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6804 -2.1445369347929955e-02</internalNodes>\n          <leafValues>\n            -3.5962730646133423e-01 1.2764260172843933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6805 -9.1003477573394775e-02</internalNodes>\n          <leafValues>\n            -7.9615950584411621e-01 4.9090441316366196e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6806 2.5607119314372540e-03</internalNodes>\n          <leafValues>\n            -5.4551690816879272e-02 8.4403410553932190e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6807 -1.3662099838256836e-02</internalNodes>\n          <leafValues>\n            9.4987250864505768e-02 -6.2036819756031036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6808 9.2437807470560074e-03</internalNodes>\n          <leafValues>\n            5.3822331130504608e-02 -9.9236510694026947e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6809 -1.4612140133976936e-02</internalNodes>\n          <leafValues>\n            -1.5248660743236542e-01 4.2905550450086594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6810 -3.9584659039974213e-02</internalNodes>\n          <leafValues>\n            1.5883240103721619e-01 -3.5484429448843002e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6811 -6.7460699938237667e-03</internalNodes>\n          <leafValues>\n            1.1749260127544403e-01 -3.7934441119432449e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6812 2.0449559669941664e-03</internalNodes>\n          <leafValues>\n            6.1626188457012177e-02 -9.4409346580505371e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6813 -1.5146560035645962e-02</internalNodes>\n          <leafValues>\n            -3.3887571096420288e-01 6.8320450372993946e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6814 -2.0916219800710678e-03</internalNodes>\n          <leafValues>\n            -1.4829570055007935e-01 3.3358350396156311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6815 1.3274390250444412e-02</internalNodes>\n          <leafValues>\n            -3.8169000297784805e-02 4.6379629522562027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6816 1.2404330074787140e-02</internalNodes>\n          <leafValues>\n            -1.8498679623007774e-02 2.7952960133552551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6817 -2.3678259924054146e-02</internalNodes>\n          <leafValues>\n            -4.7142859548330307e-02 2.3141339421272278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6818 6.7575983703136444e-02</internalNodes>\n          <leafValues>\n            -1.8598400056362152e-02 2.7481150627136230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6819 7.6359122991561890e-02</internalNodes>\n          <leafValues>\n            2.9178129509091377e-02 -2.0572820305824280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6820 -1.0918889939785004e-01</internalNodes>\n          <leafValues>\n            6.2577211856842041e-01 -9.8246810957789421e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6821 1.2964319903403521e-03</internalNodes>\n          <leafValues>\n            -3.1776499003171921e-02 6.7833930253982544e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6822 4.1218679398298264e-02</internalNodes>\n          <leafValues>\n            8.5701625794172287e-03 -5.8379119634628296e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6823 -1.8773629562929273e-03</internalNodes>\n          <leafValues>\n            5.3263541311025620e-02 -4.1702788323163986e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6824 -2.9402649961411953e-03</internalNodes>\n          <leafValues>\n            8.6931921541690826e-02 -7.1344070136547089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6825 -3.0833749100565910e-02</internalNodes>\n          <leafValues>\n            -3.9439570903778076e-01 6.0907239094376564e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6826 -3.7960989866405725e-03</internalNodes>\n          <leafValues>\n            7.4150532484054565e-02 -6.1881281435489655e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6827 -6.3087488524615765e-03</internalNodes>\n          <leafValues>\n            -1.1662469804286957e-01 2.5016760453581810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6828 4.0001370944082737e-03</internalNodes>\n          <leafValues>\n            -5.7236731052398682e-02 9.7589701414108276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6829 6.7752957344055176e-02</internalNodes>\n          <leafValues>\n            9.5101362094283104e-03 -3.3777019381523132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6830 -9.2353783547878265e-02</internalNodes>\n          <leafValues>\n            7.9015249013900757e-01 -6.2939748167991638e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6831 -2.4050839245319366e-02</internalNodes>\n          <leafValues>\n            -1.5585710108280182e-01 1.8099930137395859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6832 3.2272089738398790e-03</internalNodes>\n          <leafValues>\n            -4.7936741262674332e-02 1.0735899955034256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6833 -7.2444709949195385e-03</internalNodes>\n          <leafValues>\n            9.6775539219379425e-02 -2.4095900356769562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6834 -1.0888259857892990e-01</internalNodes>\n          <leafValues>\n            -8.1255799531936646e-01 6.0875630006194115e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6835 -1.4077230356633663e-02</internalNodes>\n          <leafValues>\n            -1.3358989357948303e-01 2.5421140715479851e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6836 -3.0071370303630829e-02</internalNodes>\n          <leafValues>\n            3.5427039861679077e-01 -1.3553430326282978e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6837 3.4985799342393875e-02</internalNodes>\n          <leafValues>\n            -3.0686240643262863e-03 4.6311178803443909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6838 1.8354769796133041e-02</internalNodes>\n          <leafValues>\n            1.1218019761145115e-02 -4.6143579483032227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6839 -6.4306408166885376e-02</internalNodes>\n          <leafValues>\n            -6.1207151412963867e-01 1.9155009649693966e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6840 8.2096129655838013e-02</internalNodes>\n          <leafValues>\n            -8.8210906833410263e-03 5.4885977506637573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6841 7.7698810491710901e-04</internalNodes>\n          <leafValues>\n            1.3247950375080109e-01 -3.3915128558874130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6842 6.4568981528282166e-02</internalNodes>\n          <leafValues>\n            6.4043831080198288e-03 -7.7150177955627441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6843 -1.5833489596843719e-02</internalNodes>\n          <leafValues>\n            -1.9498950242996216e-01 7.5541301630437374e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6844 3.4125618636608124e-02</internalNodes>\n          <leafValues>\n            -1.5915289521217346e-02 2.9716441035270691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6845 -1.2615050189197063e-02</internalNodes>\n          <leafValues>\n            -2.4650709331035614e-01 2.2699799388647079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6846 1.8272679299116135e-02</internalNodes>\n          <leafValues>\n            -4.0593959391117096e-02 1.1693490296602249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6847 -6.6374349407851696e-03</internalNodes>\n          <leafValues>\n            -1.4557109773159027e-01 3.5353910177946091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6848 -2.6520919054746628e-03</internalNodes>\n          <leafValues>\n            7.6382592320442200e-02 -6.6688627004623413e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6849 2.2452129051089287e-03</internalNodes>\n          <leafValues>\n            -8.9759878814220428e-02 5.5091369897127151e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6850 -4.4775419519282877e-04</internalNodes>\n          <leafValues>\n            2.1264159679412842e-01 -2.6620639488101006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6851 -1.1115259677171707e-01</internalNodes>\n          <leafValues>\n            -4.3139949440956116e-01 4.6484731137752533e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6852 -1.1578770354390144e-02</internalNodes>\n          <leafValues>\n            -3.5296261310577393e-01 1.2750539928674698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6853 -2.5290170684456825e-02</internalNodes>\n          <leafValues>\n            5.1385980844497681e-01 -6.7363809794187546e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6854 -3.2232340425252914e-02</internalNodes>\n          <leafValues>\n            -5.7690191268920898e-01 7.7741048298776150e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6855 -4.1698799468576908e-03</internalNodes>\n          <leafValues>\n            -1.7519310116767883e-01 1.1018699966371059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6856 -2.0664500072598457e-02</internalNodes>\n          <leafValues>\n            2.5821951031684875e-01 -1.7920289188623428e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6857 -1.0834420099854469e-03</internalNodes>\n          <leafValues>\n            -1.3178519904613495e-01 2.5419749319553375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6858 -9.5458701252937317e-03</internalNodes>\n          <leafValues>\n            4.4964689016342163e-01 -1.1315030045807362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6859 5.3232181817293167e-02</internalNodes>\n          <leafValues>\n            7.4498020112514496e-03 -6.8122059106826782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6860 -1.3852520287036896e-01</internalNodes>\n          <leafValues>\n            -6.0117882490158081e-01 6.5434179268777370e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6861 1.7173439264297485e-02</internalNodes>\n          <leafValues>\n            -2.5120509788393974e-02 8.6516633629798889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6862 3.9947189390659332e-02</internalNodes>\n          <leafValues>\n            5.8647249825298786e-03 -7.4653059244155884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6863 2.0647009834647179e-02</internalNodes>\n          <leafValues>\n            -1.0226000100374222e-02 1.7227609455585480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6864 -1.8602909985929728e-03</internalNodes>\n          <leafValues>\n            -6.5767973661422729e-02 6.9248490035533905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6865 -3.4106068313121796e-02</internalNodes>\n          <leafValues>\n            1.5908730030059814e-01 -1.3241630047559738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6866 6.3425069674849510e-03</internalNodes>\n          <leafValues>\n            3.5119149833917618e-02 -1.3436080515384674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6867 1.6866199439391494e-03</internalNodes>\n          <leafValues>\n            -4.3401770293712616e-02 5.0606630742549896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6868 -3.0595089774578810e-03</internalNodes>\n          <leafValues>\n            5.6976709514856339e-02 -8.1074528396129608e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6869 2.7664829976856709e-03</internalNodes>\n          <leafValues>\n            2.0497009158134460e-02 -8.0963827669620514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6870 -3.2909188885241747e-03</internalNodes>\n          <leafValues>\n            -1.0803789645433426e-01 4.6237960457801819e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6871 1.7244400456547737e-02</internalNodes>\n          <leafValues>\n            -2.5127060711383820e-02 2.4591030180454254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6872 9.1161586344242096e-02</internalNodes>\n          <leafValues>\n            1.0174980387091637e-02 -4.6983879804611206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6873 2.5459621101617813e-03</internalNodes>\n          <leafValues>\n            -3.0003750696778297e-02 1.4800469577312469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6874 1.7582690343260765e-03</internalNodes>\n          <leafValues>\n            5.4400689899921417e-02 -7.7444270253181458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6875 -1.6833960544317961e-03</internalNodes>\n          <leafValues>\n            8.1838123500347137e-02 -4.3751198798418045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6876 -7.6617579907178879e-04</internalNodes>\n          <leafValues>\n            -1.3564400374889374e-01 3.6041948944330215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6877 1.1155450483784080e-03</internalNodes>\n          <leafValues>\n            -4.8263888806104660e-02 5.0273448228836060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6878 -2.6005289983004332e-03</internalNodes>\n          <leafValues>\n            8.8793486356735229e-02 -5.4554209113121033e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6879 -3.2424980308860540e-03</internalNodes>\n          <leafValues>\n            -1.3159190118312836e-01 3.4248508512973785e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6880 -1.4817930059507489e-04</internalNodes>\n          <leafValues>\n            3.7875428795814514e-02 -1.2225220352411270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6881 1.1546639725565910e-02</internalNodes>\n          <leafValues>\n            1.5370969660580158e-02 -1.0286240279674530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6882 2.4446300230920315e-03</internalNodes>\n          <leafValues>\n            -5.1783051341772079e-02 1.0735079646110535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6883 4.5723789371550083e-03</internalNodes>\n          <leafValues>\n            -3.6362100392580032e-02 1.3289859890937805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6884 -1.1938340030610561e-02</internalNodes>\n          <leafValues>\n            -1.0882350057363510e-01 4.7698900103569031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6885 -4.1671381331980228e-03</internalNodes>\n          <leafValues>\n            1.1637099832296371e-01 -3.0638780444860458e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>399</maxWeakCount>\n      <stageThreshold>-1.2330470085144043e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 6886 3.3659618347883224e-02</internalNodes>\n          <leafValues>\n            -1.5576040744781494e-01 1.9109010696411133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6887 -1.5392389614135027e-03</internalNodes>\n          <leafValues>\n            7.2527736425399780e-02 -2.8808951377868652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6888 1.5648789703845978e-03</internalNodes>\n          <leafValues>\n            -1.1329220235347748e-01 1.5057389438152313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6889 5.6565739214420319e-04</internalNodes>\n          <leafValues>\n            -4.0502288937568665e-01 3.0235100537538528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6890 -2.9683491447940469e-04</internalNodes>\n          <leafValues>\n            -1.2592320144176483e-01 1.0352999716997147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6891 4.3946141377091408e-03</internalNodes>\n          <leafValues>\n            -1.0582420229911804e-01 2.3163750767707825e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6892 3.2444300595670938e-03</internalNodes>\n          <leafValues>\n            5.0188560038805008e-02 -2.5477260351181030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6893 3.8864749949425459e-03</internalNodes>\n          <leafValues>\n            -1.4332659542560577e-01 2.9871070757508278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6894 3.3563380129635334e-03</internalNodes>\n          <leafValues>\n            -1.8739770352840424e-01 6.1354521661996841e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6895 1.9797699525952339e-02</internalNodes>\n          <leafValues>\n            2.7567919343709946e-02 -7.3189876973628998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6896 3.3829871099442244e-03</internalNodes>\n          <leafValues>\n            -2.6915690302848816e-01 4.7561220824718475e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6897 5.0223460420966148e-03</internalNodes>\n          <leafValues>\n            4.2572669684886932e-02 -2.0097489655017853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6898 1.4903279952704906e-03</internalNodes>\n          <leafValues>\n            -1.0160639882087708e-01 1.1291279643774033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6899 -5.5050072260200977e-03</internalNodes>\n          <leafValues>\n            -2.1760410070419312e-01 2.5067379698157310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6900 4.1127130389213562e-03</internalNodes>\n          <leafValues>\n            -1.3703300058841705e-01 6.6536687314510345e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6901 1.9442260265350342e-02</internalNodes>\n          <leafValues>\n            4.2253911495208740e-02 -1.1731100082397461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6902 -1.9445870071649551e-02</internalNodes>\n          <leafValues>\n            2.8616631031036377e-01 -3.0423089861869812e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6903 -1.5500449808314443e-03</internalNodes>\n          <leafValues>\n            -1.5157119929790497e-01 6.3723236322402954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6904 -3.2575910445302725e-03</internalNodes>\n          <leafValues>\n            6.1063949018716812e-02 -1.3006690144538879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6905 8.5774611216038465e-04</internalNodes>\n          <leafValues>\n            -6.2051288783550262e-02 5.4809290915727615e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6906 6.8592262687161565e-04</internalNodes>\n          <leafValues>\n            -9.2828713357448578e-02 9.2287853360176086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6907 4.8905659466981888e-02</internalNodes>\n          <leafValues>\n            -1.2098040431737900e-02 2.4674870073795319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6908 -4.6415459364652634e-03</internalNodes>\n          <leafValues>\n            -1.7103439569473267e-01 5.1900148391723633e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6909 -9.9253775551915169e-03</internalNodes>\n          <leafValues>\n            1.6824729740619659e-01 -4.3742731213569641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6910 -7.2820088826119900e-04</internalNodes>\n          <leafValues>\n            -1.5762010216712952e-01 4.9283239990472794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6911 7.1829417720437050e-03</internalNodes>\n          <leafValues>\n            -7.5083851814270020e-02 1.5677660703659058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6912 7.4819842120632529e-04</internalNodes>\n          <leafValues>\n            9.4303682446479797e-02 -9.4410486519336700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6913 1.3856319710612297e-02</internalNodes>\n          <leafValues>\n            4.2250029742717743e-02 -2.4046279489994049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6914 -5.0514908507466316e-03</internalNodes>\n          <leafValues>\n            2.0170919597148895e-01 -4.4972479343414307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6915 -2.5696419179439545e-03</internalNodes>\n          <leafValues>\n            -1.4004689455032349e-01 4.1754510253667831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6916 5.4275751113891602e-02</internalNodes>\n          <leafValues>\n            -2.6094799861311913e-02 2.8374740481376648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6917 -3.7299469113349915e-02</internalNodes>\n          <leafValues>\n            -5.8281177282333374e-01 1.3501949608325958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6918 3.0674990266561508e-03</internalNodes>\n          <leafValues>\n            5.6224178522825241e-02 -1.1995050311088562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6919 -3.5402809735387564e-03</internalNodes>\n          <leafValues>\n            6.6515468060970306e-02 -1.1834269762039185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6920 4.1401982307434082e-03</internalNodes>\n          <leafValues>\n            2.0988019183278084e-02 -3.1807440519332886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6921 -1.1183559894561768e-02</internalNodes>\n          <leafValues>\n            1.2467139959335327e-01 -4.1797909885644913e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6922 1.0800679447129369e-03</internalNodes>\n          <leafValues>\n            4.5548491179943085e-02 -1.5857310593128204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6923 -7.7602718956768513e-03</internalNodes>\n          <leafValues>\n            -1.7031720280647278e-01 3.3989530056715012e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6924 -3.1192360911518335e-03</internalNodes>\n          <leafValues>\n            9.6817880868911743e-02 -8.6022533476352692e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6925 -1.3673380017280579e-02</internalNodes>\n          <leafValues>\n            -2.2536599636077881e-01 1.5587169677019119e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6926 -2.0611209329217672e-03</internalNodes>\n          <leafValues>\n            -1.5269860625267029e-01 5.0227679312229156e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6927 2.2635459899902344e-03</internalNodes>\n          <leafValues>\n            -4.2889460921287537e-02 7.6818563044071198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6928 -3.4530080854892731e-02</internalNodes>\n          <leafValues>\n            1.2874439358711243e-01 -6.7660316824913025e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6929 6.1309239827096462e-03</internalNodes>\n          <leafValues>\n            -6.3456058502197266e-02 6.4237646758556366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6930 -1.0171280242502689e-02</internalNodes>\n          <leafValues>\n            -2.9192021489143372e-01 2.6645509526133537e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6931 -1.3060650229454041e-01</internalNodes>\n          <leafValues>\n            -9.6297067403793335e-01 1.5367489540949464e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6932 6.8621779792010784e-03</internalNodes>\n          <leafValues>\n            -4.7239519655704498e-02 1.5440399944782257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6933 1.2950079981237650e-03</internalNodes>\n          <leafValues>\n            -7.1122348308563232e-02 5.8697238564491272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6934 -5.6443549692630768e-03</internalNodes>\n          <leafValues>\n            -1.7261339724063873e-01 4.4769309461116791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6935 1.6346110403537750e-01</internalNodes>\n          <leafValues>\n            -2.1536830812692642e-02 3.6825808882713318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6936 1.4170600101351738e-02</internalNodes>\n          <leafValues>\n            2.3462019860744476e-02 -3.0498749017715454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6937 -1.0679910331964493e-01</internalNodes>\n          <leafValues>\n            3.1485679745674133e-01 -9.1049326583743095e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6938 7.0258649066090584e-03</internalNodes>\n          <leafValues>\n            -6.5418191254138947e-02 1.0200239717960358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6939 -4.3358937837183475e-03</internalNodes>\n          <leafValues>\n            1.1601199954748154e-01 -5.5041059851646423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6940 3.5394240170717239e-02</internalNodes>\n          <leafValues>\n            2.7795480564236641e-02 -2.5534549355506897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6941 2.1599680185317993e-02</internalNodes>\n          <leafValues>\n            -1.0513960383832455e-02 2.6087591052055359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6942 4.3032150715589523e-03</internalNodes>\n          <leafValues>\n            -4.6745400875806808e-02 1.3318620622158051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6943 7.8372862190008163e-03</internalNodes>\n          <leafValues>\n            6.1899811029434204e-02 -1.2405169755220413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6944 -1.6856989823281765e-03</internalNodes>\n          <leafValues>\n            -9.5696307718753815e-02 7.7667310833930969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6945 -4.1602249257266521e-03</internalNodes>\n          <leafValues>\n            6.5850533545017242e-02 -7.6837591826915741e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6946 -5.0864819437265396e-02</internalNodes>\n          <leafValues>\n            5.2419060468673706e-01 -1.7342429608106613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6947 -6.4477883279323578e-02</internalNodes>\n          <leafValues>\n            -4.1972258687019348e-01 1.2231100350618362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6948 -2.4949579965323210e-03</internalNodes>\n          <leafValues>\n            6.4242206513881683e-02 -9.7457312047481537e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6949 3.2167730387300253e-03</internalNodes>\n          <leafValues>\n            -3.7902288138866425e-02 8.2197092473506927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6950 -2.3393060546368361e-03</internalNodes>\n          <leafValues>\n            -1.0608460009098053e-01 7.2004899382591248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6951 -8.0535542219877243e-03</internalNodes>\n          <leafValues>\n            -1.0991869866847992e-01 2.5643279775977135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6952 1.5007739886641502e-02</internalNodes>\n          <leafValues>\n            -3.1267128884792328e-02 2.0507030189037323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6953 -4.7144708223640919e-03</internalNodes>\n          <leafValues>\n            -1.4058899879455566e-01 4.8687249422073364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6954 -2.7188581228256226e-01</internalNodes>\n          <leafValues>\n            -7.7086192369461060e-01 8.2119107246398926e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6955 -3.7261729594320059e-03</internalNodes>\n          <leafValues>\n            7.8386418521404266e-02 -6.1110321432352066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6956 8.1726117059588432e-03</internalNodes>\n          <leafValues>\n            2.5872390717267990e-02 -2.4203300476074219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6957 -1.5384130179882050e-01</internalNodes>\n          <leafValues>\n            -8.3681619167327881e-01 1.0526239639148116e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6958 -4.2209690436720848e-03</internalNodes>\n          <leafValues>\n            1.0987819731235504e-01 -6.0973130166530609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6959 3.4641180187463760e-02</internalNodes>\n          <leafValues>\n            5.9377611614763737e-03 -7.3021429777145386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6960 -1.0757029522210360e-03</internalNodes>\n          <leafValues>\n            6.3253231346607208e-02 -9.3954533338546753e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6961 6.0506182489916682e-04</internalNodes>\n          <leafValues>\n            -7.2633743286132812e-02 5.4847791790962219e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6962 -4.9192002043128014e-03</internalNodes>\n          <leafValues>\n            -1.4617989957332611e-01 4.9854889512062073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6963 5.8641340583562851e-02</internalNodes>\n          <leafValues>\n            -1.4487889595329762e-02 2.1949279308319092e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6964 -9.5993638038635254e-02</internalNodes>\n          <leafValues>\n            -4.2456990480422974e-01 1.5611169859766960e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6965 -1.7546750605106354e-01</internalNodes>\n          <leafValues>\n            -5.7154530286788940e-01 2.7310380246490240e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6966 5.3192701190710068e-02</internalNodes>\n          <leafValues>\n            -2.0759610459208488e-02 3.1531611084938049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6967 -3.0862109735608101e-02</internalNodes>\n          <leafValues>\n            -4.0818691253662109e-01 9.1538606211543083e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6968 -2.9243549797683954e-03</internalNodes>\n          <leafValues>\n            1.6538919508457184e-01 -3.7048339843750000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6969 7.9757552593946457e-03</internalNodes>\n          <leafValues>\n            4.0010299533605576e-02 -1.0603089630603790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6970 1.0228200256824493e-01</internalNodes>\n          <leafValues>\n            9.6151717007160187e-03 -6.5299248695373535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6971 2.3435470648109913e-03</internalNodes>\n          <leafValues>\n            -4.3119609355926514e-02 1.1908730119466782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6972 -3.3627110533416271e-03</internalNodes>\n          <leafValues>\n            1.0518670082092285e-01 -6.9644443690776825e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6973 4.9040392041206360e-03</internalNodes>\n          <leafValues>\n            4.8949901014566422e-02 -1.2949359416961670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6974 4.5119290007278323e-05</internalNodes>\n          <leafValues>\n            -1.6148559749126434e-01 4.1733540594577789e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6975 1.6195859760046005e-02</internalNodes>\n          <leafValues>\n            -1.2759320437908173e-02 2.0746350288391113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6976 -6.4254719763994217e-03</internalNodes>\n          <leafValues>\n            -1.3736939430236816e-01 4.3490421026945114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6977 -6.6467811120674014e-04</internalNodes>\n          <leafValues>\n            6.6771537065505981e-02 -7.4648462235927582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6978 -2.3743628989905119e-03</internalNodes>\n          <leafValues>\n            -1.2377700209617615e-01 5.1728729158639908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6979 -8.3166018128395081e-02</internalNodes>\n          <leafValues>\n            1.5261100232601166e-01 -2.1502759307622910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6980 1.3301270082592964e-03</internalNodes>\n          <leafValues>\n            -6.1925448477268219e-02 1.0591439902782440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6981 9.0925350785255432e-02</internalNodes>\n          <leafValues>\n            6.9404938258230686e-03 -5.1022678613662720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6982 5.7555912062525749e-03</internalNodes>\n          <leafValues>\n            5.2849009633064270e-02 -1.0758169740438461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6983 9.3440711498260498e-04</internalNodes>\n          <leafValues>\n            -1.0605130344629288e-01 4.7824278473854065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6984 5.2353799343109131e-02</internalNodes>\n          <leafValues>\n            -1.6387209296226501e-02 4.2318668961524963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6985 -2.4307209998369217e-02</internalNodes>\n          <leafValues>\n            1.3521690666675568e-01 -1.0088359937071800e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6986 -1.3722239993512630e-02</internalNodes>\n          <leafValues>\n            -4.9520999193191528e-01 1.1784340254962444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6987 -1.1442030081525445e-03</internalNodes>\n          <leafValues>\n            4.3818730860948563e-02 -6.9104023277759552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6988 -7.8848190605640411e-02</internalNodes>\n          <leafValues>\n            3.5198599100112915e-01 -1.6464689746499062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6989 1.7305529909208417e-03</internalNodes>\n          <leafValues>\n            -6.6790081560611725e-02 8.2463577389717102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6990 -1.2928839772939682e-02</internalNodes>\n          <leafValues>\n            -8.1002123653888702e-02 8.5223287343978882e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6991 8.7096104398369789e-03</internalNodes>\n          <leafValues>\n            -5.0021901726722717e-02 1.3493220508098602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6992 -6.3483066856861115e-02</internalNodes>\n          <leafValues>\n            -7.7681750059127808e-01 7.0912609808146954e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6993 -4.3746097944676876e-03</internalNodes>\n          <leafValues>\n            -1.3329389691352844e-01 4.2627040296792984e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6994 -4.3985169380903244e-02</internalNodes>\n          <leafValues>\n            1.5131869912147522e-01 -4.0801558643579483e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6995 -6.0488767921924591e-03</internalNodes>\n          <leafValues>\n            -5.3645741194486618e-02 1.7832729965448380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6996 -5.1487190648913383e-04</internalNodes>\n          <leafValues>\n            6.2102951109409332e-02 -9.5339402556419373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6997 -3.3046479802578688e-03</internalNodes>\n          <leafValues>\n            -2.4732820689678192e-01 2.1977340802550316e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6998 -3.0949179199524224e-04</internalNodes>\n          <leafValues>\n            -3.4656081348657608e-02 1.9599510729312897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6999 -8.3323381841182709e-03</internalNodes>\n          <leafValues>\n            1.7436729371547699e-01 -3.2631549984216690e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7000 6.6935829818248749e-03</internalNodes>\n          <leafValues>\n            2.5050759315490723e-02 -2.7362829446792603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7001 1.4068570453673601e-03</internalNodes>\n          <leafValues>\n            -2.9797010123729706e-02 6.5752580761909485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7002 4.0725398808717728e-02</internalNodes>\n          <leafValues>\n            1.4967479743063450e-02 -3.7111800909042358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7003 -2.1524120122194290e-02</internalNodes>\n          <leafValues>\n            3.7294471263885498e-01 -1.4142910018563271e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7004 4.1689630597829819e-02</internalNodes>\n          <leafValues>\n            8.3227548748254776e-03 -6.6822868585586548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7005 -3.2075429335236549e-03</internalNodes>\n          <leafValues>\n            6.2741018831729889e-02 -1.3061609864234924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7006 2.6418430730700493e-02</internalNodes>\n          <leafValues>\n            6.6760168410837650e-03 -7.5557070970535278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7007 -5.1153838634490967e-02</internalNodes>\n          <leafValues>\n            -5.0382971763610840e-01 2.2476969752460718e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7008 1.5723450342193246e-03</internalNodes>\n          <leafValues>\n            -6.0214620083570480e-02 7.9933151602745056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7009 1.2616170570254326e-03</internalNodes>\n          <leafValues>\n            4.4674988836050034e-02 -8.3830736577510834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7010 -2.8608670458197594e-02</internalNodes>\n          <leafValues>\n            -3.0249071121215820e-01 1.6254810616374016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7011 1.4726459980010986e-02</internalNodes>\n          <leafValues>\n            -4.9459420144557953e-02 1.1457759886980057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7012 3.5319201648235321e-02</internalNodes>\n          <leafValues>\n            1.1276819743216038e-02 -4.8055538535118103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7013 2.2470189630985260e-01</internalNodes>\n          <leafValues>\n            -1.0596769861876965e-02 5.4026299715042114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7014 -7.0188841782510281e-03</internalNodes>\n          <leafValues>\n            -1.1836989969015121e-01 5.2995279431343079e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7015 -2.9194930568337440e-02</internalNodes>\n          <leafValues>\n            2.8498569130897522e-01 -1.4652130194008350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7016 -1.6918469918891788e-03</internalNodes>\n          <leafValues>\n            6.7731522023677826e-02 -7.4129588901996613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7017 1.3110489584505558e-02</internalNodes>\n          <leafValues>\n            -4.0418051183223724e-02 9.6537798643112183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7018 7.5334981374908239e-05</internalNodes>\n          <leafValues>\n            -7.3065057396888733e-02 7.1049667894840240e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7019 2.9962710104882717e-03</internalNodes>\n          <leafValues>\n            2.4401130154728889e-02 -1.0679820179939270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7020 -4.1236128658056259e-02</internalNodes>\n          <leafValues>\n            2.5446560978889465e-01 -1.9801229238510132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7021 2.2827479988336563e-03</internalNodes>\n          <leafValues>\n            -5.9622149914503098e-02 8.6871787905693054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7022 -2.1318379731383175e-04</internalNodes>\n          <leafValues>\n            4.0506061166524887e-02 -1.2357629835605621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7023 4.1725938208401203e-03</internalNodes>\n          <leafValues>\n            4.1674789041280746e-02 -1.3029229640960693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7024 -1.7945859581232071e-02</internalNodes>\n          <leafValues>\n            2.5395989418029785e-01 -2.0783929154276848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7025 -6.0957930982112885e-02</internalNodes>\n          <leafValues>\n            -5.9399938583374023e-01 5.6327730417251587e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7026 -8.3080737385898829e-04</internalNodes>\n          <leafValues>\n            4.8011310398578644e-02 -1.1289869993925095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7027 2.7037229388952255e-02</internalNodes>\n          <leafValues>\n            2.6524379849433899e-02 -1.7208619415760040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7028 3.7293829955160618e-03</internalNodes>\n          <leafValues>\n            -5.0795450806617737e-02 1.1093439906835556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7029 -1.0271129431203008e-03</internalNodes>\n          <leafValues>\n            -8.9025869965553284e-02 4.9861740320920944e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7030 4.3261310202069581e-04</internalNodes>\n          <leafValues>\n            -7.6471529901027679e-02 7.2490736842155457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7031 -8.3997912704944611e-02</internalNodes>\n          <leafValues>\n            4.0178960561752319e-01 -8.4397885948419571e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7032 -3.4407388884574175e-03</internalNodes>\n          <leafValues>\n            -1.4326460659503937e-01 3.9170410484075546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7033 -2.1418789401650429e-02</internalNodes>\n          <leafValues>\n            1.5835569798946381e-01 -1.3701870106160641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7034 2.4877830874174833e-03</internalNodes>\n          <leafValues>\n            -5.6875430047512054e-02 1.0218720138072968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7035 -1.0390300303697586e-03</internalNodes>\n          <leafValues>\n            8.1530712544918060e-02 -4.7183711081743240e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7036 4.6788761392235756e-04</internalNodes>\n          <leafValues>\n            7.0995680987834930e-02 -8.8464602828025818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7037 2.7436260133981705e-02</internalNodes>\n          <leafValues>\n            1.5190550126135349e-02 -1.2117669731378555e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7038 -5.8917858405038714e-04</internalNodes>\n          <leafValues>\n            -8.1471607089042664e-02 6.8480782210826874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7039 7.9439081251621246e-02</internalNodes>\n          <leafValues>\n            -7.3907868936657906e-03 1.4902259409427643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7040 -3.5153090953826904e-02</internalNodes>\n          <leafValues>\n            4.1942089796066284e-01 -1.2480289675295353e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7041 6.8230971693992615e-02</internalNodes>\n          <leafValues>\n            9.3489149585366249e-03 -2.5965470075607300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7042 8.1733033061027527e-02</internalNodes>\n          <leafValues>\n            1.5513390302658081e-02 -3.2704469561576843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7043 -3.0718350317329168e-03</internalNodes>\n          <leafValues>\n            6.6938467323780060e-02 -4.2225748300552368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7044 5.6301880627870560e-02</internalNodes>\n          <leafValues>\n            -2.5680650025606155e-02 2.1728150546550751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7045 2.5166019797325134e-02</internalNodes>\n          <leafValues>\n            2.3228300735354424e-02 -9.2791043221950531e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7046 6.5088197588920593e-02</internalNodes>\n          <leafValues>\n            6.8949609994888306e-03 -8.2639491558074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7047 2.2007930092513561e-03</internalNodes>\n          <leafValues>\n            -7.4394248425960541e-02 8.7209381163120270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7048 -8.8553391396999359e-03</internalNodes>\n          <leafValues>\n            -1.3203050196170807e-01 3.7658430635929108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7049 6.0942411422729492e-02</internalNodes>\n          <leafValues>\n            1.0197839699685574e-02 -5.4252862930297852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7050 -5.2589550614356995e-04</internalNodes>\n          <leafValues>\n            4.8835718631744385e-01 -1.1828079819679260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7051 1.3005370274186134e-03</internalNodes>\n          <leafValues>\n            -3.8898441195487976e-01 1.4226339757442474e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7052 -1.6531689465045929e-01</internalNodes>\n          <leafValues>\n            4.0004518628120422e-01 -1.2666770257055759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7053 1.8595480360090733e-03</internalNodes>\n          <leafValues>\n            4.7802660614252090e-02 -1.1368919909000397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7054 1.3065179809927940e-02</internalNodes>\n          <leafValues>\n            -3.3714219927787781e-02 1.5762269496917725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7055 3.1612750142812729e-02</internalNodes>\n          <leafValues>\n            7.6767429709434509e-03 -5.9641021490097046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7056 -2.2566620260477066e-02</internalNodes>\n          <leafValues>\n            1.0603710263967514e-01 -4.7383170574903488e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7057 6.2679480761289597e-03</internalNodes>\n          <leafValues>\n            3.4595031291246414e-02 -7.7622346580028534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7058 -3.1758081167936325e-02</internalNodes>\n          <leafValues>\n            -3.2147431373596191e-01 1.5986470505595207e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7059 -2.1477609872817993e-02</internalNodes>\n          <leafValues>\n            2.0527760684490204e-01 -1.8074609339237213e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7060 1.8594050779938698e-02</internalNodes>\n          <leafValues>\n            1.6375590115785599e-02 -2.9955211281776428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7061 1.4604429714381695e-02</internalNodes>\n          <leafValues>\n            -2.0433440804481506e-02 2.2725510597229004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7062 1.9902919884771109e-03</internalNodes>\n          <leafValues>\n            -5.8518249541521072e-02 1.0997360199689865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7063 9.7299525514245033e-03</internalNodes>\n          <leafValues>\n            3.1371861696243286e-02 -4.4369909912347794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7064 -2.3401379585266113e-03</internalNodes>\n          <leafValues>\n            9.6488200128078461e-02 -5.7249929755926132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7065 -1.9590060692280531e-03</internalNodes>\n          <leafValues>\n            -1.4031149446964264e-01 1.3546340167522430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7066 8.4066856652498245e-03</internalNodes>\n          <leafValues>\n            6.6289551556110382e-02 -8.0348283052444458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7067 5.2574548870325089e-02</internalNodes>\n          <leafValues>\n            -3.6297008395195007e-02 1.4638340473175049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7068 4.1065202094614506e-03</internalNodes>\n          <leafValues>\n            3.0372349545359612e-02 -1.8155770003795624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7069 -4.1818427853286266e-03</internalNodes>\n          <leafValues>\n            5.5590789765119553e-02 -3.7148520350456238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7070 -1.5470250509679317e-03</internalNodes>\n          <leafValues>\n            1.0347150266170502e-01 -4.6374730765819550e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7071 -8.2695618038997054e-04</internalNodes>\n          <leafValues>\n            -9.3296989798545837e-02 4.3734461069107056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7072 4.1385791264474392e-03</internalNodes>\n          <leafValues>\n            -4.4266488403081894e-02 1.0968980193138123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7073 -3.3684119582176208e-02</internalNodes>\n          <leafValues>\n            -6.4337152242660522e-01 7.9893283545970917e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7074 5.2798818796873093e-02</internalNodes>\n          <leafValues>\n            -1.2490300461649895e-02 4.1572460532188416e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7075 -2.9699259996414185e-01</internalNodes>\n          <leafValues>\n            -1.9598379731178284e-01 9.4300797209143639e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7076 1.1196310073137283e-01</internalNodes>\n          <leafValues>\n            1.1162719689309597e-02 -4.6838051080703735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7077 -1.8544310703873634e-02</internalNodes>\n          <leafValues>\n            -7.4080787599086761e-02 1.9528210163116455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7078 -1.0937429964542389e-02</internalNodes>\n          <leafValues>\n            8.8206529617309570e-02 -6.2830187380313873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7079 2.7186619117856026e-03</internalNodes>\n          <leafValues>\n            3.0855480581521988e-02 -9.2405863106250763e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7080 2.0727319642901421e-02</internalNodes>\n          <leafValues>\n            -5.2543301135301590e-02 1.0608410090208054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7081 -2.7961930260062218e-02</internalNodes>\n          <leafValues>\n            2.1735160052776337e-01 -2.1356139332056046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7082 -9.0406360104680061e-03</internalNodes>\n          <leafValues>\n            -1.9535389542579651e-01 3.0077420175075531e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7083 -1.0906349867582321e-02</internalNodes>\n          <leafValues>\n            1.4888639748096466e-01 -3.1188679859042168e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7084 -3.8616119418293238e-03</internalNodes>\n          <leafValues>\n            -1.2094800174236298e-01 4.5144081115722656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7085 4.3162601068615913e-03</internalNodes>\n          <leafValues>\n            -1.0713649913668633e-02 2.8116491436958313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7086 -1.4098359970375896e-03</internalNodes>\n          <leafValues>\n            6.4685508608818054e-02 -9.9471300840377808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7087 3.2964099664241076e-03</internalNodes>\n          <leafValues>\n            1.4295330643653870e-01 -3.1101010739803314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7088 -2.9802869539707899e-03</internalNodes>\n          <leafValues>\n            -2.4578930437564850e-01 2.1760260686278343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7089 6.7178793251514435e-02</internalNodes>\n          <leafValues>\n            3.3457649406045675e-03 -4.5685601234436035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7090 2.9182849451899529e-02</internalNodes>\n          <leafValues>\n            -1.7016859725117683e-02 3.3545929193496704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7091 1.7935150535777211e-03</internalNodes>\n          <leafValues>\n            3.0516179278492928e-02 -1.2526740133762360e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7092 2.0465679466724396e-02</internalNodes>\n          <leafValues>\n            -1.0909980162978172e-02 4.3552139401435852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7093 -2.6115079526789486e-04</internalNodes>\n          <leafValues>\n            3.8759760558605194e-02 -6.4098693430423737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7094 3.7161160726100206e-03</internalNodes>\n          <leafValues>\n            3.7150889635086060e-02 -1.5467320382595062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7095 -7.4094999581575394e-03</internalNodes>\n          <leafValues>\n            -8.2704223692417145e-02 6.2809906899929047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7096 1.7094809561967850e-02</internalNodes>\n          <leafValues>\n            -4.8347331583499908e-02 9.8770812153816223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7097 -3.0473200604319572e-03</internalNodes>\n          <leafValues>\n            -1.0638830065727234e-01 3.0948650091886520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7098 3.4502498805522919e-02</internalNodes>\n          <leafValues>\n            1.0997230187058449e-02 -4.2861738801002502e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7099 -2.6834919117391109e-03</internalNodes>\n          <leafValues>\n            -1.4986449480056763e-01 3.3157639205455780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7100 9.2392861843109131e-03</internalNodes>\n          <leafValues>\n            -3.7733338773250580e-02 1.5778259932994843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7101 8.8205106556415558e-02</internalNodes>\n          <leafValues>\n            -1.0704769752919674e-02 3.2353109121322632e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7102 7.7868886291980743e-02</internalNodes>\n          <leafValues>\n            1.0804659686982632e-02 -4.4243350625038147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7103 -3.1202291138470173e-03</internalNodes>\n          <leafValues>\n            2.0444509387016296e-01 -2.3976439610123634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7104 2.6000461075454950e-03</internalNodes>\n          <leafValues>\n            4.5765019953250885e-02 -1.0138899832963943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7105 7.0194108411669731e-03</internalNodes>\n          <leafValues>\n            2.5740729644894600e-02 -4.9060840159654617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7106 -2.4108150973916054e-03</internalNodes>\n          <leafValues>\n            -1.1837480217218399e-01 4.8649929463863373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7107 4.9886249005794525e-02</internalNodes>\n          <leafValues>\n            -1.4449880458414555e-02 2.0894059538841248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7108 -7.2655039839446545e-03</internalNodes>\n          <leafValues>\n            8.9042186737060547e-02 -4.9845550209283829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7109 1.0560270398855209e-02</internalNodes>\n          <leafValues>\n            5.2911709994077682e-02 -1.1509139835834503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7110 5.6417449377477169e-03</internalNodes>\n          <leafValues>\n            -6.8672746419906616e-02 7.7489316463470459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7111 4.3234648182988167e-03</internalNodes>\n          <leafValues>\n            -7.9207062721252441e-02 5.3491309285163879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7112 1.1184070259332657e-02</internalNodes>\n          <leafValues>\n            7.1656093001365662e-02 -1.0634940117597580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7113 -9.9230423569679260e-02</internalNodes>\n          <leafValues>\n            3.7169519066810608e-01 -6.6843931563198566e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7114 -4.4848727993667126e-03</internalNodes>\n          <leafValues>\n            7.5577408075332642e-02 -6.9481082260608673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7115 -1.9104180857539177e-02</internalNodes>\n          <leafValues>\n            -1.7291219532489777e-01 1.1360409669578075e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7116 -1.7672680551186204e-03</internalNodes>\n          <leafValues>\n            9.2567160725593567e-02 -5.2470050752162933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7117 5.9071529656648636e-02</internalNodes>\n          <leafValues>\n            9.2153968289494514e-03 -2.6687648892402649e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7118 -3.4362819045782089e-02</internalNodes>\n          <leafValues>\n            -5.7914721965789795e-01 7.9972539097070694e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7119 5.6766539812088013e-02</internalNodes>\n          <leafValues>\n            5.8937501162290573e-03 -5.2275192737579346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7120 -1.2173549830913544e-01</internalNodes>\n          <leafValues>\n            -5.2229601144790649e-01 7.9296948388218880e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7121 3.4274619072675705e-02</internalNodes>\n          <leafValues>\n            -1.7069879919290543e-02 1.2958990037441254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7122 -6.7191021516919136e-03</internalNodes>\n          <leafValues>\n            1.1187720298767090e-01 -4.4685728847980499e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7123 3.1698260456323624e-02</internalNodes>\n          <leafValues>\n            2.8529319912195206e-02 -1.1617069691419601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7124 -9.5326751470565796e-02</internalNodes>\n          <leafValues>\n            3.6362048983573914e-01 -1.3523319736123085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7125 1.2620569765567780e-01</internalNodes>\n          <leafValues>\n            6.0956259258091450e-03 -8.4947621822357178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7126 -2.7324870228767395e-02</internalNodes>\n          <leafValues>\n            -2.9046019911766052e-01 1.4303879812359810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7127 -7.3618680238723755e-02</internalNodes>\n          <leafValues>\n            4.8824289441108704e-01 -1.0269859805703163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7128 5.0417389720678329e-03</internalNodes>\n          <leafValues>\n            -8.4770277142524719e-02 5.6035611778497696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7129 2.7569099329411983e-03</internalNodes>\n          <leafValues>\n            -4.8269480466842651e-02 3.8525570183992386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7130 2.1967370063066483e-02</internalNodes>\n          <leafValues>\n            8.6190566420555115e-02 -8.0797329545021057e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7131 -3.8637530803680420e-01</internalNodes>\n          <leafValues>\n            -8.3998018503189087e-01 3.6657860036939383e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7132 -4.1083219647407532e-01</internalNodes>\n          <leafValues>\n            -9.7182428836822510e-01 3.9403690025210381e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7133 -4.1033279150724411e-02</internalNodes>\n          <leafValues>\n            1. -3.3212041016668081e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7134 2.4305000901222229e-02</internalNodes>\n          <leafValues>\n            1.8234970048069954e-02 -2.4954320490360260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7135 1.6170740127563477e-03</internalNodes>\n          <leafValues>\n            -1.2958160042762756e-01 3.2725200057029724e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7136 4.4785268604755402e-02</internalNodes>\n          <leafValues>\n            -2.3868849501013756e-02 1.9763439893722534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7137 4.0209591388702393e-02</internalNodes>\n          <leafValues>\n            5.3034191951155663e-03 -6.6284531354904175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7138 3.3616109285503626e-03</internalNodes>\n          <leafValues>\n            3.0226179957389832e-01 -1.6103280708193779e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7139 -1.1624400503933430e-03</internalNodes>\n          <leafValues>\n            -2.7934190630912781e-01 1.8276169896125793e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7140 5.5524259805679321e-02</internalNodes>\n          <leafValues>\n            -6.5288958139717579e-03 7.5690442323684692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7141 4.6308599412441254e-03</internalNodes>\n          <leafValues>\n            2.8254630044102669e-02 -9.4945177435874939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7142 2.7387610170990229e-03</internalNodes>\n          <leafValues>\n            -4.6980410814285278e-02 9.4511218369007111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7143 2.9127181041985750e-03</internalNodes>\n          <leafValues>\n            -2.2264670580625534e-02 7.2091333568096161e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7144 -2.3628510534763336e-02</internalNodes>\n          <leafValues>\n            -3.9147511124610901e-01 1.2840859591960907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7145 7.1669870521873236e-04</internalNodes>\n          <leafValues>\n            2.0413680002093315e-02 -1.6587799787521362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7146 3.2723631709814072e-02</internalNodes>\n          <leafValues>\n            8.5352789610624313e-03 -5.1838648319244385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7147 5.6393269449472427e-02</internalNodes>\n          <leafValues>\n            -2.4937599897384644e-02 1.9025549292564392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7148 2.9392001032829285e-01</internalNodes>\n          <leafValues>\n            5.7944031432271004e-03 -8.5530591011047363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7149 -5.6904228404164314e-03</internalNodes>\n          <leafValues>\n            -2.4354919791221619e-01 1.0601679794490337e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7150 9.8184328526258469e-03</internalNodes>\n          <leafValues>\n            -1.3599770143628120e-02 3.3795401453971863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7151 -3.6970589309930801e-02</internalNodes>\n          <leafValues>\n            -5.7309299707412720e-01 1.0090970434248447e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7152 1.8607610836625099e-02</internalNodes>\n          <leafValues>\n            -1.2938570231199265e-02 4.1123750805854797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7153 -1.5049210051074624e-03</internalNodes>\n          <leafValues>\n            -8.4678567945957184e-02 3.3724751323461533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7154 -3.9040379226207733e-02</internalNodes>\n          <leafValues>\n            -4.7390699386596680e-01 9.5385275781154633e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7155 -3.4379279240965843e-03</internalNodes>\n          <leafValues>\n            1.4112870395183563e-01 -2.2367769852280617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7156 -1.1330900015309453e-03</internalNodes>\n          <leafValues>\n            -1.3950189948081970e-01 3.2505869865417480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7157 -6.5370470285415649e-02</internalNodes>\n          <leafValues>\n            1.4801700413227081e-01 -2.2039920091629028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7158 -2.0970970392227173e-01</internalNodes>\n          <leafValues>\n            -7.4392271041870117e-01 7.5829490087926388e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7159 -5.8827060274779797e-03</internalNodes>\n          <leafValues>\n            -6.3253037631511688e-02 2.3363839834928513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7160 -2.9759449884295464e-02</internalNodes>\n          <leafValues>\n            4.8733299970626831e-01 -9.2995148152112961e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7161 -5.3064361214637756e-02</internalNodes>\n          <leafValues>\n            -3.8064101338386536e-01 5.6431228294968605e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7162 6.6667333245277405e-02</internalNodes>\n          <leafValues>\n            4.6323328278958797e-03 -9.1536080837249756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7163 -9.2325232923030853e-02</internalNodes>\n          <leafValues>\n            2.9184600710868835e-01 -7.4540497735142708e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7164 8.5644036531448364e-02</internalNodes>\n          <leafValues>\n            -1.0288530029356480e-02 4.1251561045646667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7165 2.2969970107078552e-01</internalNodes>\n          <leafValues>\n            -4.6802540309727192e-03 3.6509141325950623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7166 8.7508037686347961e-03</internalNodes>\n          <leafValues>\n            7.7816851437091827e-02 -6.3657559454441071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7167 5.7104961015284061e-03</internalNodes>\n          <leafValues>\n            -5.9653200209140778e-02 4.2732730507850647e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7168 -4.8026451840996742e-03</internalNodes>\n          <leafValues>\n            -9.8918512463569641e-02 4.4956978410482407e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7169 3.2986800651997328e-03</internalNodes>\n          <leafValues>\n            3.3164538443088531e-02 -1.3477820158004761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7170 -4.0092850103974342e-03</internalNodes>\n          <leafValues>\n            1.3551770150661469e-01 -3.7139780819416046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7171 -7.7049341052770615e-04</internalNodes>\n          <leafValues>\n            2.6690600439906120e-02 -8.4502391517162323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7172 2.3074099794030190e-02</internalNodes>\n          <leafValues>\n            -2.6398969814181328e-02 1.8520879745483398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7173 9.9315540865063667e-03</internalNodes>\n          <leafValues>\n            2.1702500060200691e-02 -1.4147830009460449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7174 -4.3977480381727219e-02</internalNodes>\n          <leafValues>\n            -5.9306997060775757e-01 7.6594059355556965e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7175 -2.1170598920434713e-03</internalNodes>\n          <leafValues>\n            9.6989497542381287e-02 -4.9988958984613419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7176 -1.1178949847817421e-02</internalNodes>\n          <leafValues>\n            -1.5058480203151703e-01 3.1385689973831177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7177 -1.1888720327988267e-03</internalNodes>\n          <leafValues>\n            8.7665252387523651e-02 -6.8861946463584900e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7178 -1.2205859646201134e-02</internalNodes>\n          <leafValues>\n            8.2670666277408600e-02 -6.5326899290084839e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7179 -3.7645969539880753e-02</internalNodes>\n          <leafValues>\n            -4.8226159811019897e-01 5.5899759754538536e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7180 -1.7758710309863091e-03</internalNodes>\n          <leafValues>\n            -9.1606341302394867e-02 5.8380361646413803e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7181 -1.1116299778223038e-02</internalNodes>\n          <leafValues>\n            1.4710609614849091e-01 -2.9255999252200127e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7182 4.3831788934767246e-04</internalNodes>\n          <leafValues>\n            -1.0494749993085861e-01 4.4445890933275223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7183 -9.8695211112499237e-02</internalNodes>\n          <leafValues>\n            2.6521149277687073e-01 -9.5453672111034393e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7184 1.1736120097339153e-02</internalNodes>\n          <leafValues>\n            2.8968680649995804e-02 -1.5355010330677032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7185 -3.6601141095161438e-02</internalNodes>\n          <leafValues>\n            2.4063609540462494e-01 -2.2525599226355553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7186 -5.2371289581060410e-02</internalNodes>\n          <leafValues>\n            -4.9006670713424683e-01 1.0319559834897518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7187 -3.1134579330682755e-03</internalNodes>\n          <leafValues>\n            6.2287129461765289e-02 -4.5234039425849915e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7188 1.0345289483666420e-03</internalNodes>\n          <leafValues>\n            -5.6548729538917542e-02 1.1970130354166031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7189 -2.3240610025823116e-03</internalNodes>\n          <leafValues>\n            -9.5265246927738190e-02 3.2402478158473969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7190 -2.7458980679512024e-02</internalNodes>\n          <leafValues>\n            2.9548159241676331e-01 -1.6016509383916855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7191 -9.3150883913040161e-03</internalNodes>\n          <leafValues>\n            -1.1465849727392197e-01 2.8171680867671967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7192 7.6356199570000172e-03</internalNodes>\n          <leafValues>\n            2.9264479875564575e-02 -1.6166350245475769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7193 1.6107590869069099e-02</internalNodes>\n          <leafValues>\n            -3.0923349782824516e-02 1.6677390038967133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7194 6.1460789293050766e-02</internalNodes>\n          <leafValues>\n            8.1282109022140503e-03 -5.4833447933197021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7195 4.3377321213483810e-02</internalNodes>\n          <leafValues>\n            -7.7782347798347473e-03 3.5578370094299316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7196 -1.5809480100870132e-02</internalNodes>\n          <leafValues>\n            -3.1237179040908813e-01 1.4910760335624218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7197 -4.3263029307126999e-02</internalNodes>\n          <leafValues>\n            4.7393178939819336e-01 -9.4731850549578667e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7198 1.0775650152936578e-03</internalNodes>\n          <leafValues>\n            -1.0892640054225922e-01 5.0780758261680603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7199 -6.8012787960469723e-03</internalNodes>\n          <leafValues>\n            -9.3841306865215302e-02 3.8555730134248734e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7200 -3.8845991366542876e-04</internalNodes>\n          <leafValues>\n            6.4071871340274811e-02 -9.3577213585376740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7201 3.8177249953150749e-03</internalNodes>\n          <leafValues>\n            -4.7590740025043488e-02 7.1997672319412231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7202 -3.1246189028024673e-03</internalNodes>\n          <leafValues>\n            1.5269869565963745e-01 -4.8789650201797485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7203 6.0980509966611862e-02</internalNodes>\n          <leafValues>\n            8.0068446695804596e-03 -6.7602759599685669e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7204 2.1819709800183773e-03</internalNodes>\n          <leafValues>\n            -6.8491749465465546e-02 7.5863577425479889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7205 2.4469599593430758e-03</internalNodes>\n          <leafValues>\n            -7.4371293187141418e-02 3.2011859118938446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7206 1.4674840494990349e-03</internalNodes>\n          <leafValues>\n            -1.1912509799003601e-01 4.6667739748954773e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7207 -2.1786419674754143e-03</internalNodes>\n          <leafValues>\n            -6.5324276685714722e-02 7.6355278491973877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7208 -2.8284740983508527e-04</internalNodes>\n          <leafValues>\n            5.8292400091886520e-02 -8.7847188115119934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7209 1.4723110012710094e-02</internalNodes>\n          <leafValues>\n            1.9820490479469299e-01 -2.4962980300188065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7210 4.6598021872341633e-03</internalNodes>\n          <leafValues>\n            -9.3732737004756927e-02 5.4197840392589569e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7211 -6.0316991060972214e-02</internalNodes>\n          <leafValues>\n            -6.2958812713623047e-01 6.8706739693880081e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7212 -3.6654649302363396e-03</internalNodes>\n          <leafValues>\n            3.6130189895629883e-02 -1.2816099822521210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7213 1.4875479973852634e-02</internalNodes>\n          <leafValues>\n            -2.4313909932971001e-02 4.6657409518957138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7214 1.1842879652976990e-01</internalNodes>\n          <leafValues>\n            1.0476130060851574e-02 -5.1786392927169800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7215 1.9809199869632721e-01</internalNodes>\n          <leafValues>\n            1.0157800279557705e-02 -4.1872209310531616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7216 -1.0167530179023743e-01</internalNodes>\n          <leafValues>\n            -8.5121291875839233e-01 4.4935508631169796e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7217 -3.0325200408697128e-02</internalNodes>\n          <leafValues>\n            -3.1803390383720398e-01 6.4301840029656887e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7218 3.4531850367784500e-02</internalNodes>\n          <leafValues>\n            -1.2561430223286152e-02 3.4778198599815369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7219 -3.5133380442857742e-02</internalNodes>\n          <leafValues>\n            1.1475030332803726e-01 -1.7527149990200996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7220 5.3501729853451252e-03</internalNodes>\n          <leafValues>\n            3.5263419151306152e-02 -1.3867680728435516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7221 3.1209299340844154e-02</internalNodes>\n          <leafValues>\n            -2.0925100892782211e-02 1.4748610556125641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7222 -5.5827602045610547e-04</internalNodes>\n          <leafValues>\n            -9.5544241368770599e-02 5.6234899908304214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7223 -2.1599860489368439e-01</internalNodes>\n          <leafValues>\n            5.9710198640823364e-01 -3.9994427934288979e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7224 7.7018201351165771e-02</internalNodes>\n          <leafValues>\n            -1.2182369828224182e-02 3.5995039343833923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7225 -2.5808349251747131e-02</internalNodes>\n          <leafValues>\n            -1.9994600117206573e-01 1.6562040895223618e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7226 4.0148189291357994e-03</internalNodes>\n          <leafValues>\n            3.8874860852956772e-02 -1.1775989830493927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7227 7.4287859206378926e-06</internalNodes>\n          <leafValues>\n            3.1405460089445114e-02 -4.9142509698867798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7228 -2.8249230235815048e-03</internalNodes>\n          <leafValues>\n            -5.5889118462800980e-02 1.1791130155324936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7229 -2.2713130339980125e-02</internalNodes>\n          <leafValues>\n            1.0733339935541153e-01 -4.1647680103778839e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7230 -1.0052169673144817e-02</internalNodes>\n          <leafValues>\n            -1.4102290570735931e-01 3.7707269191741943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7231 -2.1023969352245331e-01</internalNodes>\n          <leafValues>\n            -6.3184642791748047e-01 3.6316630430519581e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7232 -1.1812710203230381e-02</internalNodes>\n          <leafValues>\n            1.2123010307550430e-01 -5.0373788923025131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7233 6.3666589558124542e-03</internalNodes>\n          <leafValues>\n            3.0198849737644196e-02 -9.5920257270336151e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7234 -1.2146410346031189e-01</internalNodes>\n          <leafValues>\n            -6.8696069717407227e-01 6.8671889603137970e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7235 2.3568300530314445e-02</internalNodes>\n          <leafValues>\n            -1.0376869700849056e-02 2.6333120465278625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7236 -4.9841329455375671e-03</internalNodes>\n          <leafValues>\n            5.2314449101686478e-02 -8.6597919464111328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7237 1.4171230141073465e-03</internalNodes>\n          <leafValues>\n            -4.1445188224315643e-02 9.3332767486572266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7238 1.6522710211575031e-03</internalNodes>\n          <leafValues>\n            2.7292339131236076e-02 -1.7193740606307983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7239 -4.2191468179225922e-02</internalNodes>\n          <leafValues>\n            7.7588337659835815e-01 -2.4552440736442804e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7240 -1.5193390427157283e-03</internalNodes>\n          <leafValues>\n            2.3297169804573059e-01 -1.9499920308589935e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7241 -5.9203859418630600e-03</internalNodes>\n          <leafValues>\n            -8.3495929837226868e-02 1.9756000488996506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7242 6.4658280462026596e-03</internalNodes>\n          <leafValues>\n            -4.0668301284313202e-02 1.2236029654741287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7243 -4.8110671341419220e-02</internalNodes>\n          <leafValues>\n            -3.1629499793052673e-01 1.2694340199232101e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7244 5.0246939063072205e-03</internalNodes>\n          <leafValues>\n            3.1356900930404663e-02 -1.9190339744091034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7245 1.1158010363578796e-01</internalNodes>\n          <leafValues>\n            -1.4073889702558517e-02 1.7848959565162659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7246 -6.4665876328945160e-02</internalNodes>\n          <leafValues>\n            -5.6230849027633667e-01 8.2082729786634445e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7247 -5.7942468672990799e-02</internalNodes>\n          <leafValues>\n            7.7341747283935547e-01 -4.3547940440475941e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7248 -8.1669846549630165e-03</internalNodes>\n          <leafValues>\n            2.1019349992275238e-01 -2.0802220329642296e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7249 2.8506839647889137e-02</internalNodes>\n          <leafValues>\n            8.1413127481937408e-02 -6.2663510441780090e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7250 2.4857679381966591e-03</internalNodes>\n          <leafValues>\n            -1.5635970234870911e-01 3.5210859030485153e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7251 1.9798949360847473e-02</internalNodes>\n          <leafValues>\n            1.1353739537298679e-02 -1.6531160473823547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7252 -2.7027919888496399e-02</internalNodes>\n          <leafValues>\n            2.8912219405174255e-01 -1.6753070056438446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7253 -6.9706928916275501e-03</internalNodes>\n          <leafValues>\n            -2.5769388675689697e-01 1.6355020925402641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7254 1.1425119591876864e-03</internalNodes>\n          <leafValues>\n            -4.1056800633668900e-02 1.1580900102853775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7255 -1.3041249476373196e-03</internalNodes>\n          <leafValues>\n            5.1082979887723923e-02 -1.1724369972944260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7256 3.7698419764637947e-03</internalNodes>\n          <leafValues>\n            5.8557331562042236e-02 -8.2840107381343842e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7257 -4.8689868301153183e-02</internalNodes>\n          <leafValues>\n            -3.8769158720970154e-01 8.6165666580200195e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7258 -1.1471740156412125e-01</internalNodes>\n          <leafValues>\n            1.3444100320339203e-01 -4.2848691344261169e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7259 2.3503519594669342e-02</internalNodes>\n          <leafValues>\n            3.8586359005421400e-03 -4.3615299463272095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7260 -5.9582752874121070e-04</internalNodes>\n          <leafValues>\n            4.2376730591058731e-02 -1.2161590158939362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7261 5.4052029736340046e-03</internalNodes>\n          <leafValues>\n            -2.3753000423312187e-02 2.0137269794940948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7262 9.1158300638198853e-03</internalNodes>\n          <leafValues>\n            2.8088169172406197e-02 -1.9667729735374451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7263 3.3211729023605585e-03</internalNodes>\n          <leafValues>\n            -5.1258899271488190e-02 4.7993980348110199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7264 1.2975499965250492e-02</internalNodes>\n          <leafValues>\n            1.1851020157337189e-02 -3.9444020390510559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7265 -5.0546238198876381e-03</internalNodes>\n          <leafValues>\n            -1.0956159979104996e-01 4.2662780731916428e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7266 -7.6824478805065155e-02</internalNodes>\n          <leafValues>\n            7.6269572973251343e-01 -6.6229291260242462e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7267 -1.8690669676288962e-03</internalNodes>\n          <leafValues>\n            4.0112659335136414e-02 -7.1398198604583740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7268 -6.0407500714063644e-03</internalNodes>\n          <leafValues>\n            1.2614290416240692e-01 -3.9585150778293610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7269 -4.5013230293989182e-02</internalNodes>\n          <leafValues>\n            -2.1871440112590790e-01 6.5213250927627087e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7270 3.8492688909173012e-03</internalNodes>\n          <leafValues>\n            -9.2213302850723267e-02 6.6925182938575745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7271 -4.3247821740806103e-03</internalNodes>\n          <leafValues>\n            1.4973750710487366e-01 -3.1123559921979904e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7272 -2.6776840910315514e-02</internalNodes>\n          <leafValues>\n            -1.1432229727506638e-01 5.3090259432792664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7273 2.0645130425691605e-03</internalNodes>\n          <leafValues>\n            -3.8483418524265289e-02 7.1507766842842102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7274 5.7206518948078156e-02</internalNodes>\n          <leafValues>\n            1.2463140301406384e-02 -3.9884459972381592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7275 7.7696829102933407e-03</internalNodes>\n          <leafValues>\n            -2.4309959262609482e-02 6.1120841652154922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7276 2.8191099409013987e-03</internalNodes>\n          <leafValues>\n            6.2243871390819550e-02 -7.9774282872676849e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7277 -5.1747109740972519e-02</internalNodes>\n          <leafValues>\n            -2.0475579798221588e-01 9.8433922976255417e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7278 4.2840079404413700e-03</internalNodes>\n          <leafValues>\n            -3.6799129098653793e-02 1.2380699813365936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7279 -8.0563372466713190e-04</internalNodes>\n          <leafValues>\n            -5.3742490708827972e-02 6.8746432662010193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7280 4.6062450855970383e-02</internalNodes>\n          <leafValues>\n            7.3871058411896229e-03 -6.1133211851119995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7281 6.6807270050048828e-02</internalNodes>\n          <leafValues>\n            -1.2545309960842133e-02 1.5731689333915710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7282 2.0568699110299349e-03</internalNodes>\n          <leafValues>\n            4.3087389320135117e-02 -1.1062700301408768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7283 2.8760819695889950e-03</internalNodes>\n          <leafValues>\n            2.5800980627536774e-02 -8.4697857499122620e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7284 -4.9642049707472324e-03</internalNodes>\n          <leafValues>\n            8.3168722689151764e-02 -5.6750860065221786e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>385</maxWeakCount>\n      <stageThreshold>-1.1474020481109619e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 7285 1.5166849829256535e-02</internalNodes>\n          <leafValues>\n            -1.7501029372215271e-01 1.5165300667285919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7286 4.1852002032101154e-03</internalNodes>\n          <leafValues>\n            -1.8253259360790253e-01 1.0545530170202255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7287 -2.6159440167248249e-03</internalNodes>\n          <leafValues>\n            -2.1517610549926758e-01 7.7460259199142456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7288 2.7645078953355551e-03</internalNodes>\n          <leafValues>\n            -1.1506909877061844e-01 6.7771263420581818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7289 -2.7296729967929423e-04</internalNodes>\n          <leafValues>\n            5.5712651461362839e-02 -2.8723669052124023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7290 2.4992981343530118e-04</internalNodes>\n          <leafValues>\n            5.5202499032020569e-02 -1.5191499888896942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7291 1.3287579640746117e-03</internalNodes>\n          <leafValues>\n            -1.2567579746246338e-01 9.4094827771186829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7292 -2.4653770960867405e-03</internalNodes>\n          <leafValues>\n            4.9393590539693832e-02 -2.2239279747009277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7293 -3.2979049719870090e-03</internalNodes>\n          <leafValues>\n            -1.7367990314960480e-01 6.9391071796417236e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7294 -4.9667809158563614e-02</internalNodes>\n          <leafValues>\n            3.2854220271110535e-01 -3.3067218959331512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7295 5.7844468392431736e-03</internalNodes>\n          <leafValues>\n            6.1289519071578979e-02 -1.6873429715633392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7296 2.9754149727523327e-03</internalNodes>\n          <leafValues>\n            -2.4017000198364258e-01 5.7906478643417358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7297 2.3769649851601571e-04</internalNodes>\n          <leafValues>\n            1.1141020059585571e-01 -8.6508020758628845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7298 5.4410300217568874e-03</internalNodes>\n          <leafValues>\n            -8.9257702231407166e-02 2.8492979705333710e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7299 2.5746610481292009e-03</internalNodes>\n          <leafValues>\n            6.0383580625057220e-02 -1.4771540462970734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7300 -1.2155439704656601e-02</internalNodes>\n          <leafValues>\n            1.8026730418205261e-01 -3.5744961351156235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7301 5.5069979280233383e-03</internalNodes>\n          <leafValues>\n            6.1453469097614288e-02 -1.6147279739379883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7302 -3.0918378615751863e-04</internalNodes>\n          <leafValues>\n            -9.1295689344406128e-02 6.8111963570117950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7303 -7.7705271542072296e-02</internalNodes>\n          <leafValues>\n            3.3344480395317078e-01 -2.6795169338583946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7304 4.5874878764152527e-02</internalNodes>\n          <leafValues>\n            6.2387371435761452e-03 -2.2738909721374512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7305 3.1658360967412591e-04</internalNodes>\n          <leafValues>\n            -1.1297920346260071e-01 9.8602570593357086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7306 -5.2962768822908401e-02</internalNodes>\n          <leafValues>\n            -6.0117399692535400e-01 1.0004489682614803e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7307 5.3028380498290062e-03</internalNodes>\n          <leafValues>\n            3.6164399236440659e-02 -2.6359859108924866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7308 -2.3473590612411499e-02</internalNodes>\n          <leafValues>\n            1.0663519799709320e-01 -3.0653990805149078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7309 -1.5029460191726685e-03</internalNodes>\n          <leafValues>\n            6.2882840633392334e-02 -1.2285350263118744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7310 -1.2232650071382523e-02</internalNodes>\n          <leafValues>\n            -2.3047080636024475e-01 4.0048789232969284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7311 -4.7428268939256668e-02</internalNodes>\n          <leafValues>\n            4.4135141372680664e-01 -1.8873579800128937e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7312 3.6379251629114151e-02</internalNodes>\n          <leafValues>\n            -1.3020380400121212e-02 1.4685730636119843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7313 3.6343511193990707e-02</internalNodes>\n          <leafValues>\n            3.8788039237260818e-02 -1.9903139770030975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7314 -1.0792929679155350e-01</internalNodes>\n          <leafValues>\n            1.6177520155906677e-01 -6.3546439632773399e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7315 -9.5479741692543030e-02</internalNodes>\n          <leafValues>\n            3.7320658564567566e-01 -2.3940289393067360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7316 3.8954298943281174e-02</internalNodes>\n          <leafValues>\n            1.1239799670875072e-02 -3.4794488549232483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7317 -3.2646209001541138e-02</internalNodes>\n          <leafValues>\n            -3.1797638535499573e-01 2.1780189126729965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7318 -2.5872089900076389e-03</internalNodes>\n          <leafValues>\n            4.7268610447645187e-02 -1.5624779462814331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7319 1.2979200109839439e-02</internalNodes>\n          <leafValues>\n            -2.4394070729613304e-02 3.0341750383377075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7320 -1.7490500584244728e-02</internalNodes>\n          <leafValues>\n            1.1967100203037262e-01 -3.4825209528207779e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7321 8.2290060818195343e-03</internalNodes>\n          <leafValues>\n            5.1706299185752869e-02 -1.4124310016632080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7322 8.7701035663485527e-03</internalNodes>\n          <leafValues>\n            1.2139629572629929e-02 -9.3410186469554901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7323 -2.5523800868541002e-03</internalNodes>\n          <leafValues>\n            9.1882079839706421e-02 -7.9693943262100220e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7324 1.2640489730983973e-03</internalNodes>\n          <leafValues>\n            -4.2868331074714661e-02 9.8469160497188568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7325 -3.8762169424444437e-03</internalNodes>\n          <leafValues>\n            6.4477890729904175e-02 -1.1426970362663269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7326 1.5416350215673447e-03</internalNodes>\n          <leafValues>\n            -3.8240168243646622e-02 5.0880789756774902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7327 7.6829752651974559e-04</internalNodes>\n          <leafValues>\n            -1.2869219481945038e-01 5.8161370456218719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7328 1.6587260179221630e-03</internalNodes>\n          <leafValues>\n            1.6391919553279877e-01 -4.7164998948574066e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7329 1.6514799790456891e-03</internalNodes>\n          <leafValues>\n            -5.9221718460321426e-02 1.3165080547332764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7330 -3.8682940066792071e-04</internalNodes>\n          <leafValues>\n            6.4493581652641296e-02 -1.0728739947080612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7331 -3.4595469478517771e-03</internalNodes>\n          <leafValues>\n            8.0743201076984406e-02 -9.2568591237068176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7332 3.5130660980939865e-02</internalNodes>\n          <leafValues>\n            1.5520620159804821e-02 -1.9732579588890076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7333 1.2025350332260132e-01</internalNodes>\n          <leafValues>\n            -2.0497029647231102e-02 4.0905651450157166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7334 7.8581331763416529e-04</internalNodes>\n          <leafValues>\n            -9.4858787953853607e-02 6.9316640496253967e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7335 6.1606317758560181e-03</internalNodes>\n          <leafValues>\n            6.0556668788194656e-02 -1.2436509877443314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7336 1.3351559638977051e-02</internalNodes>\n          <leafValues>\n            1.7634969204664230e-02 -1.4649459719657898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7337 1.9873639568686485e-02</internalNodes>\n          <leafValues>\n            -2.4449799209833145e-02 2.7322331070899963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7338 -2.3918889928609133e-03</internalNodes>\n          <leafValues>\n            -4.0744900703430176e-02 4.9925319850444794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7339 8.6433859542012215e-03</internalNodes>\n          <leafValues>\n            2.8967950493097305e-02 -2.3661069571971893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7340 -8.8321920484304428e-03</internalNodes>\n          <leafValues>\n            1.2054029852151871e-01 -2.7702990919351578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7341 -4.4150479137897491e-02</internalNodes>\n          <leafValues>\n            5.0038051605224609e-01 -1.2251130305230618e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7342 -4.0243011899292469e-03</internalNodes>\n          <leafValues>\n            -1.9502529501914978e-01 2.5193009525537491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7343 9.8465122282505035e-03</internalNodes>\n          <leafValues>\n            -6.0283869504928589e-02 1.2665469944477081e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7344 -2.7608149684965611e-03</internalNodes>\n          <leafValues>\n            -8.3926528692245483e-02 6.0102649033069611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7345 3.9076831191778183e-02</internalNodes>\n          <leafValues>\n            1.5327650122344494e-02 -4.3197798728942871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7346 3.8136269431561232e-03</internalNodes>\n          <leafValues>\n            -3.1281091272830963e-02 7.7942118048667908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7347 2.7646059170365334e-03</internalNodes>\n          <leafValues>\n            1.7334839329123497e-02 -3.4732720255851746e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7348 -3.6096980329602957e-03</internalNodes>\n          <leafValues>\n            -8.2286708056926727e-02 2.8170879930257797e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7349 3.5445080138742924e-03</internalNodes>\n          <leafValues>\n            -1.0557620227336884e-01 6.0050919651985168e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7350 1.2985900044441223e-02</internalNodes>\n          <leafValues>\n            1.8597990274429321e-02 -9.4987802207469940e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7351 -2.0027540624141693e-02</internalNodes>\n          <leafValues>\n            2.6007258892059326e-01 -2.7079159393906593e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7352 -7.2966597974300385e-02</internalNodes>\n          <leafValues>\n            -7.6848107576370239e-01 2.3947900626808405e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7353 -2.1148719824850559e-03</internalNodes>\n          <leafValues>\n            -1.0763320326805115e-01 5.2361391484737396e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7354 -7.7667146921157837e-02</internalNodes>\n          <leafValues>\n            1.7822329699993134e-01 -3.1463298946619034e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7355 -4.6600410714745522e-03</internalNodes>\n          <leafValues>\n            -2.0386479794979095e-01 3.9025411009788513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7356 1.7059499397873878e-02</internalNodes>\n          <leafValues>\n            1.8954740837216377e-02 -1.7260240018367767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7357 4.3174691498279572e-02</internalNodes>\n          <leafValues>\n            -3.1685609370470047e-02 2.3346449434757233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7358 -4.8927929997444153e-01</internalNodes>\n          <leafValues>\n            -7.1043139696121216e-01 4.6672620810568333e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7359 9.1495506465435028e-02</internalNodes>\n          <leafValues>\n            1.6027629375457764e-02 -4.0538018941879272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7360 -4.6843249350786209e-02</internalNodes>\n          <leafValues>\n            6.9358861446380615e-01 -2.0055349450558424e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7361 6.0863760299980640e-03</internalNodes>\n          <leafValues>\n            -1.5218159556388855e-01 4.0408309549093246e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7362 4.3676611036062241e-02</internalNodes>\n          <leafValues>\n            1.2257159687578678e-02 -2.5996598601341248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7363 -4.9580529332160950e-02</internalNodes>\n          <leafValues>\n            6.7571347951889038e-01 -8.0354865640401840e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7364 -2.8614638722501695e-04</internalNodes>\n          <leafValues>\n            3.4548770636320114e-02 -6.1849180608987808e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7365 -1.1863199993968010e-02</internalNodes>\n          <leafValues>\n            -1.2061329931020737e-01 5.1416579633951187e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7366 1.4754010364413261e-02</internalNodes>\n          <leafValues>\n            -2.4638049304485321e-02 1.5234139561653137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7367 -5.1772277802228928e-03</internalNodes>\n          <leafValues>\n            1.8428930640220642e-01 -4.2200319468975067e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7368 -2.0033530890941620e-02</internalNodes>\n          <leafValues>\n            -2.0986419916152954e-01 2.3016780614852905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7369 4.1349478997290134e-03</internalNodes>\n          <leafValues>\n            3.8500111550092697e-02 -1.5400919318199158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7370 4.9832498189061880e-04</internalNodes>\n          <leafValues>\n            -5.6834470480680466e-02 1.1737540364265442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7371 1.5235079918056726e-03</internalNodes>\n          <leafValues>\n            -8.2305751740932465e-02 7.3340758681297302e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7372 2.6669060811400414e-02</internalNodes>\n          <leafValues>\n            1.7131920903921127e-02 -3.3337280154228210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7373 -2.5192899629473686e-02</internalNodes>\n          <leafValues>\n            1.8348090350627899e-01 -3.5275999456644058e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7374 1.1769080301746726e-03</internalNodes>\n          <leafValues>\n            -1.3197030127048492e-01 2.4242419749498367e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7375 -6.6034111659973860e-04</internalNodes>\n          <leafValues>\n            -1.0725550353527069e-01 5.8605268597602844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7376 4.3386619538068771e-02</internalNodes>\n          <leafValues>\n            -1.6498409211635590e-02 3.9293581247329712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7377 -1.1490290053188801e-02</internalNodes>\n          <leafValues>\n            -2.6332950592041016e-01 2.4240590631961823e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7378 8.5933692753314972e-02</internalNodes>\n          <leafValues>\n            -1.6279760748147964e-02 4.1729450225830078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7379 2.0756269805133343e-03</internalNodes>\n          <leafValues>\n            5.2543889731168747e-02 -1.0574310272932053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7380 1.4016899513080716e-03</internalNodes>\n          <leafValues>\n            -4.6594541519880295e-02 1.1355359852313995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7381 -3.4351870417594910e-03</internalNodes>\n          <leafValues>\n            -1.0806330293416977e-01 5.8778531849384308e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7382 -1.8299809889867902e-03</internalNodes>\n          <leafValues>\n            6.0645598918199539e-02 -6.6084399819374084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7383 -3.4186599077656865e-04</internalNodes>\n          <leafValues>\n            -1.2682560086250305e-01 4.9244668334722519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7384 1.0616290383040905e-02</internalNodes>\n          <leafValues>\n            -5.5619470775127411e-02 1.2270829826593399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7385 3.9490770548582077e-02</internalNodes>\n          <leafValues>\n            8.2882875576615334e-03 -6.6194152832031250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7386 -1.9746040925383568e-02</internalNodes>\n          <leafValues>\n            1.5761069953441620e-01 -9.3961963430047035e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7387 4.6383799053728580e-04</internalNodes>\n          <leafValues>\n            -2.0127220451831818e-01 2.6706330478191376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7388 5.1521410932764411e-04</internalNodes>\n          <leafValues>\n            -8.6019717156887054e-02 6.7131496965885162e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7389 -1.1283540166914463e-02</internalNodes>\n          <leafValues>\n            -2.2754089534282684e-01 2.2250600159168243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7390 -8.4253363311290741e-03</internalNodes>\n          <leafValues>\n            1.6505259275436401e-01 -5.0438180565834045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7391 3.0604569241404533e-02</internalNodes>\n          <leafValues>\n            2.7500540018081665e-02 -2.0984129607677460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7392 5.0000958144664764e-03</internalNodes>\n          <leafValues>\n            -3.8911771029233932e-02 1.1553470045328140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7393 4.1644461452960968e-02</internalNodes>\n          <leafValues>\n            -1.4164280146360397e-02 4.4004911184310913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7394 -3.9140251465141773e-03</internalNodes>\n          <leafValues>\n            -1.1528140306472778e-01 2.7629520744085312e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7395 -2.2060431074351072e-03</internalNodes>\n          <leafValues>\n            7.4794493615627289e-02 -7.5950391590595245e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7396 -7.4060507118701935e-02</internalNodes>\n          <leafValues>\n            -6.0902571678161621e-01 3.8528270088136196e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7397 1.5966329956427217e-03</internalNodes>\n          <leafValues>\n            -7.0015199482440948e-02 1.1019259691238403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7398 2.0102860871702433e-03</internalNodes>\n          <leafValues>\n            -3.1859181821346283e-02 7.1592740714550018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7399 3.2757699955254793e-03</internalNodes>\n          <leafValues>\n            -5.2260760217905045e-02 1.2652389705181122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7400 3.6700100172311068e-03</internalNodes>\n          <leafValues>\n            5.4018720984458923e-02 -4.6530380845069885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7401 -5.7776779867708683e-03</internalNodes>\n          <leafValues>\n            -2.2940860688686371e-01 2.4704450741410255e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7402 3.7388929631561041e-03</internalNodes>\n          <leafValues>\n            -4.8273131251335144e-02 7.6772913336753845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7403 -1.2404560111463070e-02</internalNodes>\n          <leafValues>\n            1.1491999775171280e-01 -4.9308139830827713e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7404 9.0428609400987625e-03</internalNodes>\n          <leafValues>\n            4.3013140559196472e-02 -1.4439429342746735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7405 6.1762649565935135e-03</internalNodes>\n          <leafValues>\n            -3.9362821727991104e-02 1.6073490679264069e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7406 2.1051440387964249e-02</internalNodes>\n          <leafValues>\n            2.4608060717582703e-02 -1.3768480718135834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7407 2.7457328978925943e-03</internalNodes>\n          <leafValues>\n            -6.3271999359130859e-02 9.1269433498382568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7408 -1.0777959600090981e-02</internalNodes>\n          <leafValues>\n            9.1245301067829132e-02 -3.0110929161310196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7409 1.6699189320206642e-02</internalNodes>\n          <leafValues>\n            4.3539609760046005e-02 -1.5240140259265900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7410 5.4665589705109596e-03</internalNodes>\n          <leafValues>\n            -5.3575031459331512e-02 6.0266200453042984e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7411 -3.2001500949263573e-03</internalNodes>\n          <leafValues>\n            1.4220920205116272e-01 -4.0823381394147873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7412 4.7289058566093445e-02</internalNodes>\n          <leafValues>\n            1.5853699296712875e-02 -2.7123591303825378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7413 -1.3604690320789814e-03</internalNodes>\n          <leafValues>\n            4.0636081248521805e-02 -1.4885699748992920e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7414 6.2847061781212687e-04</internalNodes>\n          <leafValues>\n            4.1833158582448959e-02 -1.2394890189170837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7415 -3.7036079913377762e-02</internalNodes>\n          <leafValues>\n            -3.6944690346717834e-01 1.3664159923791885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7416 -2.2578550502657890e-02</internalNodes>\n          <leafValues>\n            1.1812049895524979e-01 -2.2939860820770264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7417 3.2851321157068014e-03</internalNodes>\n          <leafValues>\n            3.1136950850486755e-01 -1.8856419250369072e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7418 -2.0225369930267334e-01</internalNodes>\n          <leafValues>\n            -6.2465697526931763e-01 3.9239428006112576e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7419 -4.9903858453035355e-03</internalNodes>\n          <leafValues>\n            1.0674989968538284e-01 -6.0000490397214890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7420 -2.2539479658007622e-02</internalNodes>\n          <leafValues>\n            -1.9891190528869629e-01 1.8829969689249992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7421 2.6878459379076958e-02</internalNodes>\n          <leafValues>\n            -3.1185189262032509e-02 2.0841309428215027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7422 -6.3416860066354275e-03</internalNodes>\n          <leafValues>\n            -8.3658866584300995e-02 4.0603660047054291e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7423 2.8207020368427038e-03</internalNodes>\n          <leafValues>\n            -5.8255858719348907e-02 9.7203142940998077e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7424 2.4739980697631836e-02</internalNodes>\n          <leafValues>\n            -1.8699239939451218e-02 9.9858507513999939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7425 7.4140671640634537e-03</internalNodes>\n          <leafValues>\n            2.9613019898533821e-02 -1.9177620112895966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7426 -8.3040986210107803e-03</internalNodes>\n          <leafValues>\n            1.2958979606628418e-01 -4.2671140283346176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7427 1.1470559984445572e-03</internalNodes>\n          <leafValues>\n            -1.5365119278430939e-01 4.1083239018917084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7428 -1.6470700502395630e-01</internalNodes>\n          <leafValues>\n            -4.1437658667564392e-01 1.3509290292859077e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7429 2.4328620731830597e-01</internalNodes>\n          <leafValues>\n            -1.2499390169978142e-02 4.4623729586601257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7430 2.4545079097151756e-02</internalNodes>\n          <leafValues>\n            2.2270770743489265e-02 -1.0766860097646713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7431 -3.6004021763801575e-02</internalNodes>\n          <leafValues>\n            2.1495530009269714e-01 -2.3298330605030060e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7432 1.7012679949402809e-02</internalNodes>\n          <leafValues>\n            2.8566520661115646e-02 -1.3689860701560974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7433 -1.7947000451385975e-03</internalNodes>\n          <leafValues>\n            2.6063710451126099e-02 -1.8060439825057983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7434 -3.4492081403732300e-01</internalNodes>\n          <leafValues>\n            -5.9101992845535278e-01 1.3455889420583844e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7435 -1.0471549816429615e-02</internalNodes>\n          <leafValues>\n            -6.4394369721412659e-02 8.1244252622127533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7436 6.4335219562053680e-02</internalNodes>\n          <leafValues>\n            -5.0874471664428711e-02 8.3752527832984924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7437 4.6703450381755829e-02</internalNodes>\n          <leafValues>\n            8.1825926899909973e-03 -6.2220478057861328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7438 6.7396290600299835e-02</internalNodes>\n          <leafValues>\n            -4.0585128590464592e-03 3.1115430593490601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7439 -1.8122399342246354e-04</internalNodes>\n          <leafValues>\n            6.3599228858947754e-02 -8.3870701491832733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7440 -4.6783890575170517e-02</internalNodes>\n          <leafValues>\n            -4.3748119473457336e-01 3.6999220028519630e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7441 1.2537419795989990e-01</internalNodes>\n          <leafValues>\n            -7.1869022212922573e-03 6.9267672300338745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7442 3.5549318999983370e-04</internalNodes>\n          <leafValues>\n            3.5804919898509979e-02 -4.1999049484729767e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7443 -1.8169870600104332e-02</internalNodes>\n          <leafValues>\n            -2.6467940211296082e-01 1.9274869933724403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7444 2.7509370818734169e-02</internalNodes>\n          <leafValues>\n            -9.9343024194240570e-03 1.2481729686260223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7445 -3.1984839588403702e-02</internalNodes>\n          <leafValues>\n            2.5694110989570618e-01 -2.6392020285129547e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7446 -1.2891650199890137e-02</internalNodes>\n          <leafValues>\n            -1.8838110566139221e-01 1.6135750338435173e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7447 4.5009091496467590e-02</internalNodes>\n          <leafValues>\n            8.4453048184514046e-03 -5.7920891046524048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7448 3.9589041844010353e-03</internalNodes>\n          <leafValues>\n            -4.3672330677509308e-02 1.2087629735469818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7449 2.7181839104741812e-03</internalNodes>\n          <leafValues>\n            -4.0779389441013336e-02 1.2974439561367035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7450 -7.5994711369276047e-04</internalNodes>\n          <leafValues>\n            3.2954100519418716e-02 -8.6419321596622467e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7451 6.6315899603068829e-03</internalNodes>\n          <leafValues>\n            3.6079831421375275e-02 -1.5763629972934723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7452 -3.6433320492506027e-03</internalNodes>\n          <leafValues>\n            -2.9832119122147560e-02 6.2801547348499298e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7453 -6.4768336713314056e-02</internalNodes>\n          <leafValues>\n            -8.4351742267608643e-01 6.0920589603483677e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7454 4.1712251305580139e-01</internalNodes>\n          <leafValues>\n            3.0659181065857410e-03 -4.4269698858261108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7455 1.8854279816150665e-01</internalNodes>\n          <leafValues>\n            4.8159952275454998e-03 -9.5497727394104004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7456 2.3751270025968552e-02</internalNodes>\n          <leafValues>\n            -1.2166289612650871e-02 3.0827128887176514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7457 1.8907970516011119e-03</internalNodes>\n          <leafValues>\n            -1.2497080117464066e-01 3.7261988967657089e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7458 -1.5546990325674415e-03</internalNodes>\n          <leafValues>\n            7.3636576533317566e-02 -4.9398850649595261e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7459 -9.2505775392055511e-03</internalNodes>\n          <leafValues>\n            1.2446039915084839e-01 -3.8673549890518188e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7460 -9.9219558760523796e-03</internalNodes>\n          <leafValues>\n            -1.2231759727001190e-01 2.7252480387687683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7461 -6.7504931939765811e-04</internalNodes>\n          <leafValues>\n            8.0792732536792755e-02 -6.1003699898719788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7462 -1.3286190107464790e-02</internalNodes>\n          <leafValues>\n            1.7295649647712708e-01 -3.0486939474940300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7463 4.3905568309128284e-03</internalNodes>\n          <leafValues>\n            2.9421260580420494e-02 -1.8230539560317993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7464 -1.8879309296607971e-02</internalNodes>\n          <leafValues>\n            -5.3837429732084274e-02 2.8330469503998756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7465 -6.9391563534736633e-02</internalNodes>\n          <leafValues>\n            5.4713129997253418e-01 -9.0404544025659561e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7466 7.8226983547210693e-02</internalNodes>\n          <leafValues>\n            6.9561759009957314e-03 -1.5992170572280884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7467 -9.5910448580980301e-03</internalNodes>\n          <leafValues>\n            8.3477370440959930e-02 -6.0714289546012878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7468 8.0856353044509888e-02</internalNodes>\n          <leafValues>\n            -3.1028070952743292e-03 8.1530278921127319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7469 -6.9029820151627064e-03</internalNodes>\n          <leafValues>\n            -6.2625996768474579e-02 7.7994093298912048e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7470 3.8219179958105087e-02</internalNodes>\n          <leafValues>\n            -9.4691133126616478e-03 4.1828629374504089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7471 -7.2923908010125160e-04</internalNodes>\n          <leafValues>\n            5.4394990205764771e-02 -1.0869490355253220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7472 -1.1224360205233097e-02</internalNodes>\n          <leafValues>\n            -2.8774300217628479e-01 1.9332440569996834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7473 -2.3755239322781563e-02</internalNodes>\n          <leafValues>\n            2.9632499814033508e-01 -1.6995029523968697e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7474 2.5170940905809402e-02</internalNodes>\n          <leafValues>\n            1.8151640892028809e-02 -6.9211177527904510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7475 8.4619410336017609e-02</internalNodes>\n          <leafValues>\n            -1.2618330307304859e-02 4.0188309550285339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7476 -2.8461799956858158e-03</internalNodes>\n          <leafValues>\n            -1.6565479338169098e-01 3.5540379583835602e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7477 9.9000544287264347e-04</internalNodes>\n          <leafValues>\n            -7.0647209882736206e-02 9.2070832848548889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7478 8.5722869262099266e-03</internalNodes>\n          <leafValues>\n            -1.6599319875240326e-02 6.0025580227375031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7479 7.7498499304056168e-03</internalNodes>\n          <leafValues>\n            2.5065049529075623e-02 -2.0419560372829437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7480 -5.1633790135383606e-03</internalNodes>\n          <leafValues>\n            5.6465640664100647e-02 -3.9366569370031357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7481 3.4570649731904268e-03</internalNodes>\n          <leafValues>\n            -4.8712749034166336e-02 1.1756400018930435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7482 1.5435590175911784e-03</internalNodes>\n          <leafValues>\n            -1.2385150045156479e-01 4.7240950167179108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7483 3.9221469312906265e-02</internalNodes>\n          <leafValues>\n            9.7949290648102760e-03 -5.5965268611907959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7484 -4.8019930720329285e-02</internalNodes>\n          <leafValues>\n            -2.4514609575271606e-01 1.5544380061328411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7485 1.7867749556899071e-02</internalNodes>\n          <leafValues>\n            -2.6458689942955971e-02 1.8536129593849182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7486 -7.8233405947685242e-03</internalNodes>\n          <leafValues>\n            -1.2305969744920731e-01 2.1850170567631721e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7487 -4.8894518986344337e-03</internalNodes>\n          <leafValues>\n            2.5086471438407898e-01 -1.9914150238037109e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7488 1.1090599745512009e-01</internalNodes>\n          <leafValues>\n            2.1982348989695311e-03 -9.6110188961029053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7489 5.3139701485633850e-03</internalNodes>\n          <leafValues>\n            -7.0207841694355011e-02 7.4792057275772095e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7490 -4.0226429700851440e-03</internalNodes>\n          <leafValues>\n            -9.2982061207294464e-02 2.7642169967293739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7491 -9.9820762872695923e-02</internalNodes>\n          <leafValues>\n            -8.2527607679367065e-01 5.8367499150335789e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7492 3.2612269278615713e-03</internalNodes>\n          <leafValues>\n            3.0481850728392601e-02 -4.8289291560649872e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7493 -4.1559059172868729e-02</internalNodes>\n          <leafValues>\n            5.8879297971725464e-01 -8.5169300436973572e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7494 5.4297139868140221e-03</internalNodes>\n          <leafValues>\n            1.8141800537705421e-02 -1.3948309421539307e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7495 1.6756299883127213e-02</internalNodes>\n          <leafValues>\n            1.2322929687798023e-02 -4.1245520114898682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7496 -1.7563860863447189e-02</internalNodes>\n          <leafValues>\n            1.1385770142078400e-01 -3.0968630686402321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7497 1.8308760598301888e-02</internalNodes>\n          <leafValues>\n            -3.5930249840021133e-02 1.4697270095348358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7498 3.5556308925151825e-02</internalNodes>\n          <leafValues>\n            1.0190679691731930e-02 -2.5837650895118713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7499 -5.1635081035783514e-05</internalNodes>\n          <leafValues>\n            4.6089090406894684e-02 -1.1719120293855667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7500 2.5128800189122558e-04</internalNodes>\n          <leafValues>\n            -4.0896330028772354e-02 1.0669410228729248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7501 -1.5876770485192537e-03</internalNodes>\n          <leafValues>\n            1.0786730051040649e-01 -4.5890059322118759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7502 -9.5712337642908096e-03</internalNodes>\n          <leafValues>\n            -1.5212120115756989e-01 3.7137780338525772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7503 2.8643130790442228e-03</internalNodes>\n          <leafValues>\n            3.6075118929147720e-02 -1.4268599450588226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7504 -5.0454098731279373e-02</internalNodes>\n          <leafValues>\n            1.9622960686683655e-01 -2.8599070385098457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7505 -2.8714470099657774e-03</internalNodes>\n          <leafValues>\n            7.3919989168643951e-02 -8.6024001240730286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7506 4.9587138928472996e-03</internalNodes>\n          <leafValues>\n            9.4060972332954407e-03 -2.4880349636077881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7507 -7.8270390629768372e-02</internalNodes>\n          <leafValues>\n            4.3305158615112305e-01 -1.1123429983854294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7508 -6.4656808972358704e-02</internalNodes>\n          <leafValues>\n            -1.9539129734039307e-01 9.3969572335481644e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7509 -4.0213608741760254e-01</internalNodes>\n          <leafValues>\n            -9.3731278181076050e-01 4.8170168884098530e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7510 4.2917151004076004e-02</internalNodes>\n          <leafValues>\n            5.9442862402647734e-04 -7.9430317878723145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7511 2.1517940331250429e-03</internalNodes>\n          <leafValues>\n            -2.4127319455146790e-02 2.1096949279308319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7512 9.5514237880706787e-02</internalNodes>\n          <leafValues>\n            3.0073130037635565e-03 -3.0030760169029236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7513 3.5949420183897018e-02</internalNodes>\n          <leafValues>\n            9.1736158356070518e-03 -5.3301852941513062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7514 1.4061479270458221e-01</internalNodes>\n          <leafValues>\n            -1.9780038855969906e-03 5.8360362052917480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7515 -1.0000269860029221e-01</internalNodes>\n          <leafValues>\n            -4.6577060222625732e-01 1.0447300039231777e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7516 -1.6898410022258759e-01</internalNodes>\n          <leafValues>\n            4.7578391432762146e-01 -3.0947721097618341e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7517 2.6123190298676491e-02</internalNodes>\n          <leafValues>\n            -1.8673470243811607e-02 2.5583058595657349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7518 8.8816967036109418e-05</internalNodes>\n          <leafValues>\n            1.2931160628795624e-01 -2.2033900022506714e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7519 -2.5785199832171202e-03</internalNodes>\n          <leafValues>\n            7.7590242028236389e-02 -5.8669801801443100e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7520 -5.5829741060733795e-02</internalNodes>\n          <leafValues>\n            -5.6296068429946899e-01 8.2240002229809761e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7521 -3.5114258527755737e-02</internalNodes>\n          <leafValues>\n            -4.1525208950042725e-01 1.0237259790301323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7522 3.0091139487922192e-03</internalNodes>\n          <leafValues>\n            -3.2801661640405655e-02 1.1237899959087372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7523 -3.0068641062825918e-03</internalNodes>\n          <leafValues>\n            -1.5794169902801514e-01 3.0354220420122147e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7524 -2.0059049129486084e-03</internalNodes>\n          <leafValues>\n            1.1346399784088135e-01 -3.3372201025485992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7525 -1.3963360106572509e-03</internalNodes>\n          <leafValues>\n            1.4454230666160583e-01 -5.0115231424570084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7526 -5.4588310420513153e-02</internalNodes>\n          <leafValues>\n            -9.6552258729934692e-01 2.6290758978575468e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7527 -5.0577907823026180e-03</internalNodes>\n          <leafValues>\n            -2.1536730229854584e-01 2.7823869138956070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7528 -7.4430949985980988e-02</internalNodes>\n          <leafValues>\n            5.9244579076766968e-01 -3.5832428839057684e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7529 -6.9759570062160492e-02</internalNodes>\n          <leafValues>\n            6.5854609012603760e-01 -7.1275448426604271e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7530 3.4715738729573786e-04</internalNodes>\n          <leafValues>\n            4.3214511126279831e-02 -6.5209239721298218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7531 6.5575069747865200e-03</internalNodes>\n          <leafValues>\n            4.1032981127500534e-02 -1.2200939655303955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7532 9.2287212610244751e-02</internalNodes>\n          <leafValues>\n            -2.1933389827609062e-02 8.9953176677227020e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7533 5.2685599774122238e-02</internalNodes>\n          <leafValues>\n            1.6439350321888924e-02 -2.7847930788993835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7534 7.2394758462905884e-03</internalNodes>\n          <leafValues>\n            -3.3217910677194595e-02 9.7244061529636383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7535 -2.2218099329620600e-03</internalNodes>\n          <leafValues>\n            3.5860918462276459e-02 -1.3876199722290039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7536 -2.3309379816055298e-02</internalNodes>\n          <leafValues>\n            -2.7913948893547058e-01 1.6362229362130165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7537 1.4036920038051903e-04</internalNodes>\n          <leafValues>\n            -4.0096871554851532e-02 1.2379959970712662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7538 5.3702849894762039e-02</internalNodes>\n          <leafValues>\n            1.4607049524784088e-03 -8.6436408758163452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7539 4.1926259291358292e-04</internalNodes>\n          <leafValues>\n            -4.9342829734086990e-02 1.0289549827575684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7540 -1.6786300111562014e-03</internalNodes>\n          <leafValues>\n            -1.9065080583095551e-01 2.5145059451460838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7541 1.6603240743279457e-02</internalNodes>\n          <leafValues>\n            -1.8125709146261215e-02 2.6887449622154236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7542 -2.2621789947152138e-02</internalNodes>\n          <leafValues>\n            1.3145700097084045e-01 -2.5288559496402740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7543 4.4634779915213585e-03</internalNodes>\n          <leafValues>\n            5.6568209081888199e-02 -1.0306429862976074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7544 3.3281201031059027e-03</internalNodes>\n          <leafValues>\n            2.1517809480428696e-02 -1.4086639881134033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7545 -2.5311840698122978e-02</internalNodes>\n          <leafValues>\n            1.1237470060586929e-01 -4.1784498840570450e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7546 -2.6119880378246307e-02</internalNodes>\n          <leafValues>\n            1.2703700363636017e-01 -2.3530310019850731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7547 -7.2608642280101776e-02</internalNodes>\n          <leafValues>\n            -3.3052888512611389e-01 2.1741159260272980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7548 5.8377808891236782e-03</internalNodes>\n          <leafValues>\n            -2.8170680627226830e-02 6.1300031840801239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7549 1.7830949509516358e-03</internalNodes>\n          <leafValues>\n            -7.6140716671943665e-02 8.4391303360462189e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7550 -1.4502589404582977e-01</internalNodes>\n          <leafValues>\n            -2.8886368870735168e-01 9.4371382147073746e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7551 -2.4291570298373699e-03</internalNodes>\n          <leafValues>\n            -6.3645169138908386e-02 9.0057007968425751e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7552 1.0977900028228760e-01</internalNodes>\n          <leafValues>\n            -1.4906959841027856e-03 8.9710217714309692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7553 -3.8412429857999086e-03</internalNodes>\n          <leafValues>\n            7.3980011045932770e-02 -6.9378383457660675e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7554 3.9507250767201185e-04</internalNodes>\n          <leafValues>\n            -7.1166411042213440e-02 6.3150741159915924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7555 -6.6879019141197205e-03</internalNodes>\n          <leafValues>\n            -1.4211960136890411e-01 5.1007200032472610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7556 -2.1278159320354462e-01</internalNodes>\n          <leafValues>\n            1.7479549348354340e-01 -1.6866499558091164e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7557 4.3913610279560089e-02</internalNodes>\n          <leafValues>\n            -7.9228030517697334e-03 5.9994518756866455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7558 3.0486818868666887e-03</internalNodes>\n          <leafValues>\n            2.7880100533366203e-02 -1.4996689558029175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7559 1.7128599574789405e-03</internalNodes>\n          <leafValues>\n            -6.1575889587402344e-02 1.0793119668960571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7560 -1.3061589561402798e-02</internalNodes>\n          <leafValues>\n            -3.5864189267158508e-01 1.2332689948379993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7561 1.4779239427298307e-03</internalNodes>\n          <leafValues>\n            -5.5280618369579315e-02 7.6400339603424072e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7562 -7.4117183685302734e-02</internalNodes>\n          <leafValues>\n            3.3055660128593445e-01 -5.4406579583883286e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7563 4.1532788425683975e-02</internalNodes>\n          <leafValues>\n            1.2762749567627907e-02 -3.4091010689735413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7564 -1.6474310308694839e-02</internalNodes>\n          <leafValues>\n            -1.1935900151729584e-01 3.5997871309518814e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7565 -1.3384450227022171e-02</internalNodes>\n          <leafValues>\n            1.4927010238170624e-01 -3.7151250988245010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7566 -4.3293130584061146e-03</internalNodes>\n          <leafValues>\n            -1.5257209539413452e-01 2.0008029416203499e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7567 3.7254339549690485e-03</internalNodes>\n          <leafValues>\n            3.8249280303716660e-02 -1.3562840223312378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7568 -3.5788780078291893e-03</internalNodes>\n          <leafValues>\n            1.1951140314340591e-01 -5.1356971263885498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7569 9.0936541557312012e-02</internalNodes>\n          <leafValues>\n            -9.6294376999139786e-03 5.0582927465438843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7570 -3.1301870476454496e-03</internalNodes>\n          <leafValues>\n            2.4587530642747879e-02 -1.5752519667148590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7571 -3.0295769684016705e-03</internalNodes>\n          <leafValues>\n            -9.6669957041740417e-02 4.7402460128068924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7572 -3.1865050550550222e-03</internalNodes>\n          <leafValues>\n            3.5035319626331329e-02 -4.0841709822416306e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7573 4.4836260378360748e-02</internalNodes>\n          <leafValues>\n            -7.4580628424882889e-03 6.5190207958221436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7574 -6.4811948686838150e-03</internalNodes>\n          <leafValues>\n            1.3163930177688599e-01 -3.6060128360986710e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7575 -2.0486880093812943e-03</internalNodes>\n          <leafValues>\n            -1.1097510159015656e-01 5.1011908799409866e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7576 4.9175620079040527e-02</internalNodes>\n          <leafValues>\n            5.1457029767334461e-03 -8.9148598909378052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7577 8.4772880654782057e-04</internalNodes>\n          <leafValues>\n            -9.0741790831089020e-02 4.4853020459413528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7578 -1.6545709222555161e-02</internalNodes>\n          <leafValues>\n            2.5329568982124329e-01 -1.6997080296278000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7579 6.9274050183594227e-03</internalNodes>\n          <leafValues>\n            3.8941461592912674e-02 -1.3961300253868103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7580 -6.5109939314424992e-03</internalNodes>\n          <leafValues>\n            1.5610300004482269e-01 -2.4493880569934845e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7581 -4.9708629958331585e-03</internalNodes>\n          <leafValues>\n            -9.8298586905002594e-02 5.7903841137886047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7582 1.3074609637260437e-01</internalNodes>\n          <leafValues>\n            -2.7071859221905470e-04 1.0000669956207275e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7583 -2.6705920696258545e-02</internalNodes>\n          <leafValues>\n            -4.2577031254768372e-01 1.0705970227718353e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7584 -1.0329060256481171e-01</internalNodes>\n          <leafValues>\n            2.5896188616752625e-01 -1.8414590507745743e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7585 -2.0166130736470222e-02</internalNodes>\n          <leafValues>\n            -1.1455850303173065e-01 4.0439568459987640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7586 -4.2215920984745026e-03</internalNodes>\n          <leafValues>\n            4.3039258569478989e-02 -4.8735860735177994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7587 -1.0038839653134346e-02</internalNodes>\n          <leafValues>\n            7.1608737111091614e-02 -6.6204607486724854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7588 1.5833059325814247e-02</internalNodes>\n          <leafValues>\n            -3.2066859304904938e-02 8.9950896799564362e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7589 3.4065160434693098e-03</internalNodes>\n          <leafValues>\n            4.7216009348630905e-02 -1.0898789763450623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7590 -9.8251160234212875e-03</internalNodes>\n          <leafValues>\n            1.0213229805231094e-01 -5.2902109920978546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7591 1.6804629936814308e-02</internalNodes>\n          <leafValues>\n            -3.7189990282058716e-02 1.3787649571895599e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7592 8.5175316780805588e-03</internalNodes>\n          <leafValues>\n            2.7141440659761429e-02 -1.3569560647010803e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7593 -6.3797592883929610e-04</internalNodes>\n          <leafValues>\n            6.9217190146446228e-02 -9.0696737170219421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7594 -9.6052087610587478e-04</internalNodes>\n          <leafValues>\n            2.2472479939460754e-01 -2.4032639339566231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7595 7.2245922638103366e-04</internalNodes>\n          <leafValues>\n            -4.6731200069189072e-02 9.6905507147312164e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7596 1.0769399814307690e-03</internalNodes>\n          <leafValues>\n            3.8259491324424744e-02 -6.6674157977104187e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7597 4.1620191186666489e-02</internalNodes>\n          <leafValues>\n            9.3473913148045540e-03 -4.9046689271926880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7598 -8.1712089013308287e-04</internalNodes>\n          <leafValues>\n            5.2797440439462662e-02 -9.6458092331886292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7599 6.2240879051387310e-03</internalNodes>\n          <leafValues>\n            -3.5350788384675980e-02 1.6484160721302032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7600 2.0862540695816278e-03</internalNodes>\n          <leafValues>\n            3.3958710730075836e-02 -1.3114009797573090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7601 4.2804637923836708e-03</internalNodes>\n          <leafValues>\n            3.0104041099548340e-01 -1.6245450824499130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7602 -3.3040030393749475e-04</internalNodes>\n          <leafValues>\n            -1.1665459722280502e-01 3.8146208971738815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7603 2.8100309427827597e-03</internalNodes>\n          <leafValues>\n            4.1940510272979736e-02 -1.1180300265550613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7604 1.9832739606499672e-02</internalNodes>\n          <leafValues>\n            -1.1701569892466068e-02 2.0122130215167999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7605 7.0879682898521423e-02</internalNodes>\n          <leafValues>\n            -1.8197819590568542e-02 2.5429588556289673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7606 -8.3893969655036926e-02</internalNodes>\n          <leafValues>\n            -3.8719230890274048e-01 1.1727290228009224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7607 2.8477620333433151e-02</internalNodes>\n          <leafValues>\n            1.3701519928872585e-02 -3.2496619224548340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7608 1.2077310122549534e-02</internalNodes>\n          <leafValues>\n            -2.3975890129804611e-02 2.5232788920402527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7609 -7.5613409280776978e-02</internalNodes>\n          <leafValues>\n            -6.0866451263427734e-01 8.2847801968455315e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7610 -1.7563860863447189e-02</internalNodes>\n          <leafValues>\n            1.0811589658260345e-01 -2.8622759506106377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7611 1.1809109710156918e-02</internalNodes>\n          <leafValues>\n            3.4758269786834717e-02 -1.4444710314273834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7612 3.3459219336509705e-01</internalNodes>\n          <leafValues>\n            3.5104870330542326e-03 -9.1507577896118164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7613 9.8447836935520172e-02</internalNodes>\n          <leafValues>\n            -1.0290330275893211e-02 4.7943019866943359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7614 -4.0277838706970215e-02</internalNodes>\n          <leafValues>\n            -7.3793828487396240e-01 4.8832078464329243e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7615 4.6712718904018402e-03</internalNodes>\n          <leafValues>\n            2.5037309154868126e-02 -1.7003759741783142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7616 1.3958489894866943e-01</internalNodes>\n          <leafValues>\n            1.9962170626968145e-03 -7.1547168493270874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7617 6.9742716848850250e-02</internalNodes>\n          <leafValues>\n            -8.4846932440996170e-03 5.5378282070159912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7618 4.0283710695803165e-03</internalNodes>\n          <leafValues>\n            -1.6718029975891113e-02 2.3914240300655365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7619 1.0911709628999233e-02</internalNodes>\n          <leafValues>\n            1.5781659632921219e-02 -2.6813709735870361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7620 -6.7120362073183060e-03</internalNodes>\n          <leafValues>\n            1.1087659746408463e-01 -3.1365878880023956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7621 -1.3467820361256599e-02</internalNodes>\n          <leafValues>\n            -2.0741519331932068e-01 2.3459080606698990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7622 -2.1431609056890011e-03</internalNodes>\n          <leafValues>\n            7.8274592757225037e-02 -2.7959430590271950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7623 1.5163370408117771e-02</internalNodes>\n          <leafValues>\n            2.1727830171585083e-02 -1.8995440006256104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7624 -1.8551949411630630e-02</internalNodes>\n          <leafValues>\n            1.1164160072803497e-01 -3.0374029651284218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7625 -1.1083459854125977e-01</internalNodes>\n          <leafValues>\n            -5.6379908323287964e-01 7.6859779655933380e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7626 5.6210728362202644e-03</internalNodes>\n          <leafValues>\n            3.2930258661508560e-02 -1.0337010025978088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7627 3.0593289993703365e-03</internalNodes>\n          <leafValues>\n            -6.8871803581714630e-02 6.0389719903469086e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7628 -6.9845258258283138e-04</internalNodes>\n          <leafValues>\n            3.8080908358097076e-02 -7.0112928748130798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7629 -1.3236569939181209e-03</internalNodes>\n          <leafValues>\n            7.5004093348979950e-02 -6.3950046896934509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7630 -1.6736539546400309e-03</internalNodes>\n          <leafValues>\n            -1.0580399632453918e-01 4.9476388841867447e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7631 7.0728380233049393e-03</internalNodes>\n          <leafValues>\n            -3.6582119762897491e-02 1.3126540184020996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7632 1.8164990469813347e-03</internalNodes>\n          <leafValues>\n            3.9953831583261490e-02 -5.1589578390121460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7633 4.1909920983016491e-03</internalNodes>\n          <leafValues>\n            4.8665199428796768e-02 -1.0598509758710861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7634 1.1940020322799683e-01</internalNodes>\n          <leafValues>\n            -6.7811049520969391e-03 7.4523490667343140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7635 -1.4965030131861567e-03</internalNodes>\n          <leafValues>\n            6.6805936396121979e-02 -6.7798472940921783e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7636 -1.1722999811172485e-01</internalNodes>\n          <leafValues>\n            -8.7860488891601562e-01 1.8648250261321664e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7637 3.2925528939813375e-03</internalNodes>\n          <leafValues>\n            3.5634901374578476e-02 -1.5030789375305176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7638 6.8493567407131195e-02</internalNodes>\n          <leafValues>\n            -9.8042488098144531e-03 3.0161941051483154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7639 2.1837449166923761e-03</internalNodes>\n          <leafValues>\n            -5.3420849144458771e-02 8.5626326501369476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7640 6.9181360304355621e-03</internalNodes>\n          <leafValues>\n            -4.3685518205165863e-02 1.2706759572029114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7641 -1.5878600534051657e-03</internalNodes>\n          <leafValues>\n            -1.2640440464019775e-01 3.9026089012622833e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7642 3.8289129734039307e-03</internalNodes>\n          <leafValues>\n            3.9025381207466125e-02 -7.9675689339637756e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7643 1.2253260239958763e-02</internalNodes>\n          <leafValues>\n            -4.4809628278017044e-02 9.7772710025310516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7644 6.4031239598989487e-03</internalNodes>\n          <leafValues>\n            3.3579610288143158e-02 -1.3300299644470215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7645 7.0500532165169716e-03</internalNodes>\n          <leafValues>\n            -5.1121409982442856e-02 1.1772400140762329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7646 1.3216730207204819e-02</internalNodes>\n          <leafValues>\n            2.6454009115695953e-02 -1.3190220296382904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7647 6.7367991432547569e-03</internalNodes>\n          <leafValues>\n            -1.0153199546039104e-02 4.1570469737052917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7648 2.4951510131359100e-03</internalNodes>\n          <leafValues>\n            1.4631019905209541e-02 -1.6560359299182892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7649 3.8302998989820480e-02</internalNodes>\n          <leafValues>\n            7.2940620593726635e-03 -6.0744607448577881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7650 -1.6491059213876724e-02</internalNodes>\n          <leafValues>\n            1.6788350045681000e-01 -1.5062170103192329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7651 -2.7071639895439148e-02</internalNodes>\n          <leafValues>\n            -4.6381551027297974e-01 1.0335059836506844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7652 -5.8714959770441055e-02</internalNodes>\n          <leafValues>\n            1.4860999584197998e-01 -1.6663730144500732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7653 9.2380512505769730e-03</internalNodes>\n          <leafValues>\n            4.3830338865518570e-02 -1.0612689703702927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7654 3.0808299779891968e-03</internalNodes>\n          <leafValues>\n            -3.6781489849090576e-02 8.9559197425842285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7655 2.9910521116107702e-03</internalNodes>\n          <leafValues>\n            1.6019189730286598e-02 -2.9177838563919067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7656 4.4786609709262848e-02</internalNodes>\n          <leafValues>\n            -6.7814979702234268e-03 3.6695161461830139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7657 -2.9985690489411354e-03</internalNodes>\n          <leafValues>\n            -9.0316072106361389e-02 4.8048041760921478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7658 -8.9135952293872833e-03</internalNodes>\n          <leafValues>\n            1.6903600096702576e-01 -2.1880460903048515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7659 -3.9598200470209122e-02</internalNodes>\n          <leafValues>\n            -4.4884848594665527e-01 1.0027219541370869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7660 -3.7064809352159500e-02</internalNodes>\n          <leafValues>\n            -4.4183561205863953e-01 2.2891450207680464e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7661 -9.3376229051500559e-04</internalNodes>\n          <leafValues>\n            7.3633059859275818e-02 -5.8901689946651459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7662 8.0887757241725922e-02</internalNodes>\n          <leafValues>\n            -2.4963580071926117e-02 6.0303758829832077e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7663 -3.0697569251060486e-02</internalNodes>\n          <leafValues>\n            -1.7819009721279144e-01 2.6090290397405624e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7664 -1.8495260179042816e-01</internalNodes>\n          <leafValues>\n            3.4901228547096252e-01 -3.8219890557229519e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7665 1.1218319647014141e-02</internalNodes>\n          <leafValues>\n            -2.6781549677252769e-02 1.7431420087814331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7666 6.2761609442532063e-03</internalNodes>\n          <leafValues>\n            1.4532440342009068e-02 -1.1864569783210754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7667 -8.8509358465671539e-03</internalNodes>\n          <leafValues>\n            -1.0515689849853516e-01 5.7655680924654007e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7668 -3.8575798273086548e-02</internalNodes>\n          <leafValues>\n            1.5004560351371765e-01 -3.6080200225114822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7669 -5.2720211446285248e-02</internalNodes>\n          <leafValues>\n            -4.7556790709495544e-01 1.1126070283353329e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>392</maxWeakCount>\n      <stageThreshold>-1.1210759878158569e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 7670 -3.8506588898599148e-03</internalNodes>\n          <leafValues>\n            1.1209569871425629e-01 -2.7330291271209717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7671 -4.9427259713411331e-02</internalNodes>\n          <leafValues>\n            3.9270120859146118e-01 -3.9871849119663239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7672 1.3538210187107325e-03</internalNodes>\n          <leafValues>\n            -1.5965040028095245e-01 1.2521059811115265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7673 3.9328690618276596e-03</internalNodes>\n          <leafValues>\n            -3.4043839573860168e-01 4.7437489032745361e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7674 2.3011169396340847e-03</internalNodes>\n          <leafValues>\n            -2.0827749371528625e-01 7.4891701340675354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7675 5.9128052089363337e-04</internalNodes>\n          <leafValues>\n            -2.0842720568180084e-01 3.7798780947923660e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7676 1.7478190129622817e-03</internalNodes>\n          <leafValues>\n            -1.9635179638862610e-01 6.4582027494907379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7677 5.8316658250987530e-03</internalNodes>\n          <leafValues>\n            3.1582038849592209e-02 -1.9084580242633820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7678 1.2435190146788955e-03</internalNodes>\n          <leafValues>\n            -5.3213578462600708e-01 2.2162230685353279e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7679 1.6247769817709923e-03</internalNodes>\n          <leafValues>\n            -1.3276180624961853e-01 8.0135673284530640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7680 -2.2734089288860559e-03</internalNodes>\n          <leafValues>\n            -1.7344699800014496e-01 5.4782990366220474e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7681 5.7859059423208237e-02</internalNodes>\n          <leafValues>\n            -1.5829589683562517e-03 -6.6367942094802856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7682 5.7728560641407967e-03</internalNodes>\n          <leafValues>\n            3.9815168827772141e-02 -2.2919249534606934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7683 -4.4039610773324966e-02</internalNodes>\n          <leafValues>\n            2.1793280541896820e-01 -2.3534009233117104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7684 3.0226248782128096e-04</internalNodes>\n          <leafValues>\n            -8.9419580996036530e-02 1.1042869836091995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7685 -3.4470859915018082e-02</internalNodes>\n          <leafValues>\n            -3.6666679382324219e-01 2.7858279645442963e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7686 3.2460398972034454e-02</internalNodes>\n          <leafValues>\n            1.5733880922198296e-02 -4.9733749032020569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7687 9.9335552658885717e-04</internalNodes>\n          <leafValues>\n            -9.1800943017005920e-02 8.4003977477550507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7688 -2.3473830893635750e-02</internalNodes>\n          <leafValues>\n            -4.4375669956207275e-01 1.5148010104894638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7689 -2.9013049788773060e-03</internalNodes>\n          <leafValues>\n            5.4642349481582642e-02 -2.0156529545783997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7690 -6.5832951804623008e-04</internalNodes>\n          <leafValues>\n            -1.2285769730806351e-01 5.6707888841629028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7691 2.0407158881425858e-03</internalNodes>\n          <leafValues>\n            -1.0899069905281067e-01 5.9933699667453766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7692 -1.3161499984562397e-02</internalNodes>\n          <leafValues>\n            1.4091959595680237e-01 -4.7396201640367508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7693 -4.2273551225662231e-03</internalNodes>\n          <leafValues>\n            -1.2498269975185394e-01 5.1124658435583115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7694 7.6580629684031010e-03</internalNodes>\n          <leafValues>\n            3.8773480802774429e-02 -1.8095690011978149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7695 -5.1912548951804638e-03</internalNodes>\n          <leafValues>\n            1.2545259296894073e-01 -4.4012580066919327e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7696 1.1874590069055557e-01</internalNodes>\n          <leafValues>\n            -1.4801479876041412e-02 4.0071210265159607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7697 4.5105828903615475e-03</internalNodes>\n          <leafValues>\n            5.3336851298809052e-02 -1.5709049999713898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7698 4.5015379786491394e-02</internalNodes>\n          <leafValues>\n            -3.3278778195381165e-02 2.0535139739513397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7699 -2.0866969134658575e-03</internalNodes>\n          <leafValues>\n            4.2103528976440430e-02 -1.0361789911985397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7700 -1.3008449459448457e-03</internalNodes>\n          <leafValues>\n            6.4424470067024231e-02 -9.7897060215473175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7701 -1.3591230381280184e-03</internalNodes>\n          <leafValues>\n            7.2987347841262817e-02 -9.4451002776622772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7702 -7.4056759476661682e-03</internalNodes>\n          <leafValues>\n            -1.5320360660552979e-01 5.3242001682519913e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7703 2.0208859350532293e-03</internalNodes>\n          <leafValues>\n            -3.3245529979467392e-02 6.0319710522890091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7704 -1.0342149995267391e-02</internalNodes>\n          <leafValues>\n            8.5510559380054474e-02 -8.3920828998088837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7705 2.4865860119462013e-02</internalNodes>\n          <leafValues>\n            1.2639460153877735e-02 -3.4757199883460999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7706 9.9798657000064850e-02</internalNodes>\n          <leafValues>\n            -1.8823970109224319e-02 3.4465000033378601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7707 2.1201390773057938e-02</internalNodes>\n          <leafValues>\n            -1.0467799752950668e-01 3.1494509428739548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7708 -5.1909908652305603e-03</internalNodes>\n          <leafValues>\n            -1.5792340040206909e-01 5.0269961357116699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7709 6.6961228847503662e-02</internalNodes>\n          <leafValues>\n            3.2651789952069521e-03 -5.6049168109893799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7710 1.1809109710156918e-02</internalNodes>\n          <leafValues>\n            -2.8513789176940918e-02 2.1226319670677185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7711 -1.7645660787820816e-02</internalNodes>\n          <leafValues>\n            -4.4503360986709595e-01 5.0029670819640160e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7712 -6.8918941542506218e-03</internalNodes>\n          <leafValues>\n            -4.2199620604515076e-01 1.4813040383160114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7713 2.1675550378859043e-03</internalNodes>\n          <leafValues>\n            -1.3125190138816833e-01 6.7140422761440277e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7714 -3.3283489756286144e-03</internalNodes>\n          <leafValues>\n            -1.0765329748392105e-01 5.3610768169164658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7715 4.8869621008634567e-02</internalNodes>\n          <leafValues>\n            6.4427889883518219e-03 -6.4563280344009399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7716 7.2693959809839725e-03</internalNodes>\n          <leafValues>\n            -3.9603620767593384e-02 1.5369640290737152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7717 8.8849991559982300e-02</internalNodes>\n          <leafValues>\n            -1.3234400190412998e-02 2.8555288910865784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7718 1.5455950051546097e-02</internalNodes>\n          <leafValues>\n            3.9694100618362427e-02 -1.7206269502639771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7719 -1.3747200369834900e-02</internalNodes>\n          <leafValues>\n            1.0079269856214523e-01 -4.3812029063701630e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7720 -2.2805750370025635e-02</internalNodes>\n          <leafValues>\n            1.5014170110225677e-01 -4.3767798691987991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7721 2.3838039487600327e-02</internalNodes>\n          <leafValues>\n            5.3901281207799911e-02 -1.4610290527343750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7722 -1.0181629657745361e-01</internalNodes>\n          <leafValues>\n            3.1905040144920349e-01 -2.0011590793728828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7723 7.1074268780648708e-03</internalNodes>\n          <leafValues>\n            5.6244179606437683e-02 -1.2587560713291168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7724 7.6678092591464520e-04</internalNodes>\n          <leafValues>\n            -1.0704190284013748e-01 6.6436298191547394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7725 3.7424071342684329e-04</internalNodes>\n          <leafValues>\n            -3.7826299667358398e-02 4.7234989702701569e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7726 -2.0078169181942940e-03</internalNodes>\n          <leafValues>\n            -9.3316286802291870e-02 6.7641608417034149e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7727 3.3469051122665405e-02</internalNodes>\n          <leafValues>\n            -2.7926150709390640e-02 2.5293371081352234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7728 -1.5507030300796032e-02</internalNodes>\n          <leafValues>\n            -5.5145150423049927e-01 1.2821160256862640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7729 -1.9248709082603455e-02</internalNodes>\n          <leafValues>\n            5.2688628435134888e-02 -3.0364990234375000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7730 -1.7556030303239822e-02</internalNodes>\n          <leafValues>\n            -3.3247348666191101e-01 1.8780380487442017e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7731 1.9324380904436111e-02</internalNodes>\n          <leafValues>\n            -3.2458461821079254e-02 9.4986997544765472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7732 -2.0367160439491272e-02</internalNodes>\n          <leafValues>\n            1.1348400264978409e-01 -5.8434821665287018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7733 5.1770661957561970e-03</internalNodes>\n          <leafValues>\n            4.7030560672283173e-02 -8.4960326552391052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7734 1.9768481142818928e-03</internalNodes>\n          <leafValues>\n            -7.0794142782688141e-02 1.0375150293111801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7735 -7.0216279709711671e-04</internalNodes>\n          <leafValues>\n            3.0781729146838188e-02 -1.0170820355415344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7736 -2.4710369762033224e-03</internalNodes>\n          <leafValues>\n            5.1577620208263397e-02 -1.1920809745788574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7737 2.3278540000319481e-02</internalNodes>\n          <leafValues>\n            3.0191570520401001e-02 -9.3937888741493225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7738 1.3673819601535797e-02</internalNodes>\n          <leafValues>\n            -2.6758959516882896e-02 2.4014200270175934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7739 -8.3967903628945351e-03</internalNodes>\n          <leafValues>\n            -5.0403770059347153e-02 2.2368110716342926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7740 4.7878470271825790e-02</internalNodes>\n          <leafValues>\n            -2.3758050054311752e-02 2.6486390829086304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7741 -2.2483520209789276e-02</internalNodes>\n          <leafValues>\n            -2.3042780160903931e-01 1.2840679846704006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7742 -1.0883989743888378e-02</internalNodes>\n          <leafValues>\n            -1.8380180001258850e-01 3.2639708369970322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7743 -4.4901989400386810e-02</internalNodes>\n          <leafValues>\n            2.4195960164070129e-01 -2.6507280766963959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7744 -8.3042927086353302e-02</internalNodes>\n          <leafValues>\n            -8.0491328239440918e-01 7.5420029461383820e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7745 -3.7240530364215374e-03</internalNodes>\n          <leafValues>\n            -8.0228239297866821e-02 3.1584471464157104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7746 -7.3502189479768276e-03</internalNodes>\n          <leafValues>\n            6.8962231278419495e-02 -9.7391247749328613e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7747 5.5313981138169765e-03</internalNodes>\n          <leafValues>\n            -3.0180720612406731e-02 6.0174800455570221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7748 1.7293080687522888e-02</internalNodes>\n          <leafValues>\n            4.0732100605964661e-02 -1.5600660443305969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7749 -3.3298740163445473e-03</internalNodes>\n          <leafValues>\n            4.1001088917255402e-02 -7.6909027993679047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7750 -4.9308240413665771e-03</internalNodes>\n          <leafValues>\n            1.7031539976596832e-01 -4.0582239627838135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7751 8.6011141538619995e-03</internalNodes>\n          <leafValues>\n            3.1656920909881592e-02 -1.4050039649009705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7752 1.3674340210855007e-02</internalNodes>\n          <leafValues>\n            -2.1845709532499313e-02 3.0128660798072815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7753 -1.1375419795513153e-02</internalNodes>\n          <leafValues>\n            -1.5687340497970581e-01 2.8256019577383995e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7754 -4.2750681750476360e-03</internalNodes>\n          <leafValues>\n            -1.2155970185995102e-01 5.0146799534559250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7755 1.6484759747982025e-02</internalNodes>\n          <leafValues>\n            -3.6557890474796295e-02 1.2583729624748230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7756 -3.9056900888681412e-02</internalNodes>\n          <leafValues>\n            2.4053129553794861e-01 -2.6983890682458878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7757 -5.7546719908714294e-03</internalNodes>\n          <leafValues>\n            -1.3337680697441101e-01 2.0266020670533180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7758 5.1583289168775082e-03</internalNodes>\n          <leafValues>\n            6.4666390419006348e-02 -1.1428499966859818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7759 -3.0463270377367735e-03</internalNodes>\n          <leafValues>\n            4.5018680393695831e-02 -8.1573590636253357e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7760 7.4743861332535744e-03</internalNodes>\n          <leafValues>\n            3.1246710568666458e-02 -1.8929730355739594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7761 1.6480450285598636e-03</internalNodes>\n          <leafValues>\n            -2.5895040482282639e-02 1.8652880191802979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7762 4.5184311456978321e-03</internalNodes>\n          <leafValues>\n            5.4803468286991119e-02 -1.0444000363349915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7763 -3.3209871035069227e-03</internalNodes>\n          <leafValues>\n            4.3959401547908783e-02 -8.1240482628345490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7764 5.2665979601442814e-03</internalNodes>\n          <leafValues>\n            -4.4853471219539642e-02 1.1343909800052643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7765 -4.7867707908153534e-03</internalNodes>\n          <leafValues>\n            7.6319009065628052e-02 -2.8551170602440834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7766 -4.4710118323564529e-02</internalNodes>\n          <leafValues>\n            -3.4795719385147095e-01 1.4928230084478855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7767 4.3861730955541134e-03</internalNodes>\n          <leafValues>\n            7.4540950357913971e-02 -4.6298071742057800e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7768 9.2240851372480392e-03</internalNodes>\n          <leafValues>\n            -5.8626178652048111e-02 9.8693408071994781e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7769 -1.1849260190501809e-03</internalNodes>\n          <leafValues>\n            1.0023140162229538e-01 -5.6729640811681747e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7770 -1.8546540290117264e-02</internalNodes>\n          <leafValues>\n            -3.8236171007156372e-01 1.5141529962420464e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7771 3.4743950236588717e-03</internalNodes>\n          <leafValues>\n            2.6523910462856293e-02 -1.1289829760789871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7772 1.0274019837379456e-01</internalNodes>\n          <leafValues>\n            -6.6097700037062168e-03 7.7561777830123901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7773 2.0479390025138855e-01</internalNodes>\n          <leafValues>\n            6.9657550193369389e-03 -3.5988980531692505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7774 1.2094060331583023e-01</internalNodes>\n          <leafValues>\n            1.8174450844526291e-02 -3.3531171083450317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7775 1.2224229983985424e-02</internalNodes>\n          <leafValues>\n            -3.1454049050807953e-02 7.9004973173141479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7776 1.5176460146903992e-01</internalNodes>\n          <leafValues>\n            -1.0826669633388519e-02 4.5583090186119080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7777 -9.9692150950431824e-02</internalNodes>\n          <leafValues>\n            -3.5422179102897644e-01 3.1256359070539474e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7778 -6.3465638086199760e-03</internalNodes>\n          <leafValues>\n            -1.1098819971084595e-01 5.3735308349132538e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7779 -6.7007602192461491e-03</internalNodes>\n          <leafValues>\n            1.8910090625286102e-01 -3.0930159613490105e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7780 -1.0101199895143509e-01</internalNodes>\n          <leafValues>\n            2.3763500154018402e-01 -2.2213969379663467e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7781 4.6111021190881729e-02</internalNodes>\n          <leafValues>\n            -3.7543330341577530e-02 4.8733759671449661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7782 1.4146809279918671e-01</internalNodes>\n          <leafValues>\n            1.1148019693791866e-02 -5.1474362611770630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7783 -1.1394499801099300e-02</internalNodes>\n          <leafValues>\n            -7.0824302732944489e-02 3.1759370118379593e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7784 3.1667309813201427e-03</internalNodes>\n          <leafValues>\n            4.1177280247211456e-02 -1.4900580048561096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7785 8.9959725737571716e-03</internalNodes>\n          <leafValues>\n            -4.1186511516571045e-02 7.2816781699657440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7786 -6.1559271067380905e-02</internalNodes>\n          <leafValues>\n            -7.3937642574310303e-01 6.6859079524874687e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7787 -3.5607949830591679e-03</internalNodes>\n          <leafValues>\n            1.3260509818792343e-02 -6.1150819063186646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7788 -1.2476339936256409e-01</internalNodes>\n          <leafValues>\n            -7.8580498695373535e-01 6.2701301649212837e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7789 6.2739187479019165e-01</internalNodes>\n          <leafValues>\n            3.5465341061353683e-03 -7.3363810777664185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7790 3.4219160676002502e-02</internalNodes>\n          <leafValues>\n            8.2031572237610817e-03 -5.3330212831497192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7791 1.0574149928288534e-04</internalNodes>\n          <leafValues>\n            -5.0354700535535812e-02 4.7019489109516144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7792 -3.2112289220094681e-02</internalNodes>\n          <leafValues>\n            1.7085300385951996e-01 -3.4734141081571579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7793 -1.6140839084982872e-02</internalNodes>\n          <leafValues>\n            -6.4753092825412750e-02 5.6943111121654510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7794 1.9737280905246735e-02</internalNodes>\n          <leafValues>\n            -1.8065180629491806e-02 2.6183420419692993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7795 2.7895450592041016e-02</internalNodes>\n          <leafValues>\n            1.7641060054302216e-02 -3.0951151251792908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7796 3.5123159177601337e-03</internalNodes>\n          <leafValues>\n            -8.3447068929672241e-02 6.5015971660614014e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7797 -4.4775637798011303e-03</internalNodes>\n          <leafValues>\n            -1.2423449754714966e-01 4.7061119228601456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7798 -6.1348858289420605e-03</internalNodes>\n          <leafValues>\n            1.0248269885778427e-01 -5.9700958430767059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7799 1.4047959819436073e-02</internalNodes>\n          <leafValues>\n            1.4833379536867142e-02 -1.1229590326547623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7800 1.1907520238310099e-03</internalNodes>\n          <leafValues>\n            4.9986690282821655e-02 -1.1696290224790573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7801 1.7617389559745789e-02</internalNodes>\n          <leafValues>\n            -1.7687700688838959e-02 1.5416090190410614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7802 -4.9166870303452015e-03</internalNodes>\n          <leafValues>\n            -1.0227180272340775e-01 4.6994391828775406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7803 -3.9010820910334587e-03</internalNodes>\n          <leafValues>\n            1.4229449629783630e-01 -4.5312799513339996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7804 -1.7458139918744564e-03</internalNodes>\n          <leafValues>\n            -1.0853090137243271e-01 7.5689561665058136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7805 -1.2748650042340159e-03</internalNodes>\n          <leafValues>\n            2.2384520620107651e-02 -7.5150527060031891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7806 -7.9109556972980499e-02</internalNodes>\n          <leafValues>\n            4.8773929476737976e-01 -9.6941655501723289e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7807 -1.4103270135819912e-02</internalNodes>\n          <leafValues>\n            -2.3263689875602722e-01 1.5091559849679470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7808 -2.2076119203120470e-03</internalNodes>\n          <leafValues>\n            1.9268399477005005e-01 -2.5429060682654381e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7809 3.9626058191061020e-02</internalNodes>\n          <leafValues>\n            -1.5630759298801422e-02 1.2270029634237289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7810 -7.8973636846058071e-05</internalNodes>\n          <leafValues>\n            -7.3257647454738617e-02 6.5848693251609802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7811 5.1964947488158941e-04</internalNodes>\n          <leafValues>\n            -1.1366380006074905e-01 8.1133492290973663e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7812 -1.1722079943865538e-03</internalNodes>\n          <leafValues>\n            -9.7602643072605133e-02 5.9839569032192230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7813 3.9326730184257030e-03</internalNodes>\n          <leafValues>\n            -5.7026151567697525e-02 4.2226128280162811e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7814 -8.7386153638362885e-02</internalNodes>\n          <leafValues>\n            -3.7896049022674561e-01 1.2869279831647873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7815 -2.1324040368199348e-02</internalNodes>\n          <leafValues>\n            3.0886441469192505e-01 -1.7734240740537643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7816 -2.3385910317301750e-03</internalNodes>\n          <leafValues>\n            -1.1322320252656937e-01 4.3914940208196640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7817 1.5183660434558988e-03</internalNodes>\n          <leafValues>\n            -1.4337620139122009e-01 3.9441708475351334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7818 -1.1085519939661026e-01</internalNodes>\n          <leafValues>\n            7.4037587642669678e-01 -6.7982021719217300e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7819 -1.0009120218455791e-02</internalNodes>\n          <leafValues>\n            -3.9203230291604996e-02 3.1749211251735687e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7820 -2.0916430279612541e-02</internalNodes>\n          <leafValues>\n            1.8927730619907379e-01 -3.0490230768918991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7821 7.4165337719023228e-03</internalNodes>\n          <leafValues>\n            4.6797450631856918e-02 -1.1113610118627548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7822 3.3599510788917542e-03</internalNodes>\n          <leafValues>\n            -4.5254990458488464e-02 1.1508409678936005e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7823 -5.7189498329535127e-04</internalNodes>\n          <leafValues>\n            -6.3472077250480652e-02 5.2049949765205383e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7824 -6.8120293319225311e-02</internalNodes>\n          <leafValues>\n            5.0806027650833130e-01 -9.5091843977570534e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7825 2.5180799420922995e-03</internalNodes>\n          <leafValues>\n            5.5305320769548416e-02 -1.4402769505977631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7826 5.6055251508951187e-02</internalNodes>\n          <leafValues>\n            -2.3359170183539391e-02 2.1935400366783142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7827 -4.0386710315942764e-02</internalNodes>\n          <leafValues>\n            -1.9183440506458282e-01 7.8779058530926704e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7828 3.1857648864388466e-03</internalNodes>\n          <leafValues>\n            2.7605779469013214e-02 -2.0084309577941895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7829 2.5159550830721855e-02</internalNodes>\n          <leafValues>\n            1.1265699751675129e-02 -4.3628180027008057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7830 -2.7010419871658087e-03</internalNodes>\n          <leafValues>\n            1.1336500197649002e-01 -4.6904269605875015e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7831 -3.0056890100240707e-02</internalNodes>\n          <leafValues>\n            -6.2368732690811157e-01 7.3214052245020866e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7832 -1.2088020145893097e-01</internalNodes>\n          <leafValues>\n            -8.6428368091583252e-01 4.3813590891659260e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7833 4.0104859508574009e-03</internalNodes>\n          <leafValues>\n            -5.3471650928258896e-02 7.1113802492618561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7834 -2.9688570648431778e-03</internalNodes>\n          <leafValues>\n            1.0076630115509033e-01 -4.9233928322792053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7835 -3.7600689101964235e-03</internalNodes>\n          <leafValues>\n            -2.0928700268268585e-01 2.6549680158495903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7836 -1.5982619952410460e-03</internalNodes>\n          <leafValues>\n            6.1070188879966736e-02 -7.9623572528362274e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7837 5.4285880178213120e-03</internalNodes>\n          <leafValues>\n            3.9766579866409302e-02 -1.1746849864721298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7838 1.0872900020331144e-03</internalNodes>\n          <leafValues>\n            -6.4596228301525116e-02 7.4964426457881927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7839 -2.8442030306905508e-03</internalNodes>\n          <leafValues>\n            1.1738350242376328e-01 -4.0159400552511215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7840 3.5546101629734039e-02</internalNodes>\n          <leafValues>\n            1.2194969691336155e-02 -4.2184820771217346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7841 -4.8542950302362442e-02</internalNodes>\n          <leafValues>\n            3.1292769312858582e-01 -1.2773830443620682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7842 -3.0732100829482079e-02</internalNodes>\n          <leafValues>\n            -5.0631237030029297e-01 1.0600729845464230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7843 1.3066929765045643e-02</internalNodes>\n          <leafValues>\n            -5.0003118813037872e-02 4.4005930423736572e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7844 2.9200640320777893e-01</internalNodes>\n          <leafValues>\n            5.3693680092692375e-03 -8.9039158821105957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7845 -8.7579451501369476e-03</internalNodes>\n          <leafValues>\n            9.6666730940341949e-02 -3.1310658901929855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7846 -2.3599369451403618e-03</internalNodes>\n          <leafValues>\n            4.3046280741691589e-02 -1.0992430150508881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7847 6.9077489897608757e-03</internalNodes>\n          <leafValues>\n            -2.9174160212278366e-02 8.9174896478652954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7848 2.0849689841270447e-02</internalNodes>\n          <leafValues>\n            1.2614700198173523e-01 -4.4358100742101669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7849 -5.8846421539783478e-02</internalNodes>\n          <leafValues>\n            2.1661500632762909e-01 -8.7285088375210762e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7850 2.5576311163604259e-03</internalNodes>\n          <leafValues>\n            -1.1648210138082504e-01 5.4756019264459610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7851 3.8973900955170393e-03</internalNodes>\n          <leafValues>\n            3.5759489983320236e-02 -9.7868561744689941e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7852 -1.2494160328060389e-03</internalNodes>\n          <leafValues>\n            9.1347962617874146e-02 -5.7817179709672928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7853 3.4928850363940001e-03</internalNodes>\n          <leafValues>\n            2.0634220913052559e-02 -1.4494930207729340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7854 -1.1378509923815727e-02</internalNodes>\n          <leafValues>\n            2.1203260123729706e-01 -2.4150850251317024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7855 -4.4060450047254562e-02</internalNodes>\n          <leafValues>\n            4.2267361283302307e-01 -4.7765900380909443e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7856 -8.3084795624017715e-03</internalNodes>\n          <leafValues>\n            -8.4928646683692932e-02 6.0228090733289719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7857 -9.1945994645357132e-03</internalNodes>\n          <leafValues>\n            7.2318702936172485e-02 -2.0472260192036629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7858 6.5575107932090759e-02</internalNodes>\n          <leafValues>\n            5.0813751295208931e-03 -8.9693188667297363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7859 1.8510420620441437e-01</internalNodes>\n          <leafValues>\n            2.2485901135951281e-03 -7.5125169754028320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7860 -1.7608819901943207e-01</internalNodes>\n          <leafValues>\n            -7.8969222307205200e-01 5.2678477950394154e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7861 9.8349712789058685e-02</internalNodes>\n          <leafValues>\n            2.8081049676984549e-03 -2.5828519463539124e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7862 -1.8191979324910790e-04</internalNodes>\n          <leafValues>\n            -8.6206100881099701e-02 5.2294798195362091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7863 -5.2928649820387363e-03</internalNodes>\n          <leafValues>\n            -5.4600238800048828e-02 2.8304630890488625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7864 1.1537299724295735e-03</internalNodes>\n          <leafValues>\n            4.6684168279170990e-02 -1.1234779655933380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7865 -3.8274680264294147e-03</internalNodes>\n          <leafValues>\n            6.0145508497953415e-02 -8.2371100783348083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7866 -8.6957857012748718e-02</internalNodes>\n          <leafValues>\n            -4.8363038897514343e-01 9.2326821759343147e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7867 -2.4195960722863674e-03</internalNodes>\n          <leafValues>\n            -3.5221140831708908e-02 2.7081709355115891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7868 -4.7905668616294861e-03</internalNodes>\n          <leafValues>\n            5.8955200016498566e-02 -7.8748136758804321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7869 -4.0910490788519382e-03</internalNodes>\n          <leafValues>\n            -1.7550939321517944e-01 2.6454729959368706e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7870 2.5641750544309616e-03</internalNodes>\n          <leafValues>\n            -3.6814831197261810e-02 1.5140229463577271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7871 5.4726968519389629e-03</internalNodes>\n          <leafValues>\n            3.1243579462170601e-02 -9.7890958189964294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7872 -1.0310260113328695e-03</internalNodes>\n          <leafValues>\n            -1.2424050271511078e-01 4.0365029126405716e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7873 -1.3030169904232025e-01</internalNodes>\n          <leafValues>\n            1.7106169462203979e-01 -6.9856629706919193e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7874 3.5753389820456505e-03</internalNodes>\n          <leafValues>\n            -2.5437129661440849e-02 2.1967570483684540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7875 8.4238024428486824e-03</internalNodes>\n          <leafValues>\n            2.9582399874925613e-02 -1.7390090227127075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7876 4.1154649108648300e-02</internalNodes>\n          <leafValues>\n            -1.3265499845147133e-02 3.6282411217689514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7877 -1.8620759248733521e-02</internalNodes>\n          <leafValues>\n            -2.2806780040264130e-01 2.1502569317817688e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7878 2.3307619616389275e-02</internalNodes>\n          <leafValues>\n            -2.3047760128974915e-02 2.3208670318126678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7879 4.6518299728631973e-02</internalNodes>\n          <leafValues>\n            1.0585400275886059e-02 -4.6076700091362000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7880 -8.3499401807785034e-02</internalNodes>\n          <leafValues>\n            3.7845119833946228e-01 -1.4105740003287792e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7881 -9.6897013485431671e-02</internalNodes>\n          <leafValues>\n            -3.2995849847793579e-01 6.2883920036256313e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7882 6.9753699935972691e-03</internalNodes>\n          <leafValues>\n            2.4593630805611610e-02 -2.1003679931163788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7883 -3.3859949558973312e-02</internalNodes>\n          <leafValues>\n            1.8927900493144989e-01 -8.7296841666102409e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7884 1.0354740079492331e-03</internalNodes>\n          <leafValues>\n            -6.4493343234062195e-02 8.0192290246486664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7885 3.9950661361217499e-02</internalNodes>\n          <leafValues>\n            2.5073040276765823e-02 -1.1636939644813538e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7886 3.0460350681096315e-03</internalNodes>\n          <leafValues>\n            -3.3754941076040268e-02 1.3324250280857086e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7887 -1.5341850230470300e-03</internalNodes>\n          <leafValues>\n            6.2442861497402191e-02 -5.6061070412397385e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7888 2.0531520713120699e-03</internalNodes>\n          <leafValues>\n            -8.4790043532848358e-02 5.3408049046993256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7889 2.1295580081641674e-03</internalNodes>\n          <leafValues>\n            4.0650319308042526e-02 -1.1124719679355621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7890 -1.5462029725313187e-02</internalNodes>\n          <leafValues>\n            1.3806979358196259e-01 -3.3944208174943924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7891 -2.7878239750862122e-02</internalNodes>\n          <leafValues>\n            -1.0025399923324585e-01 1.3444880023598671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7892 1.7255680635571480e-02</internalNodes>\n          <leafValues>\n            1.5361789613962173e-02 -3.6930799484252930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7893 -1.7870500683784485e-02</internalNodes>\n          <leafValues>\n            5.2870798856019974e-02 -2.5108009576797485e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7894 -1.4443919993937016e-02</internalNodes>\n          <leafValues>\n            -2.2763819992542267e-01 2.0391609519720078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7895 -8.3497241139411926e-03</internalNodes>\n          <leafValues>\n            -8.7055817246437073e-02 3.2707940787076950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7896 2.7514319866895676e-02</internalNodes>\n          <leafValues>\n            -2.0628409460186958e-02 2.5977128744125366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7897 1.8610119819641113e-02</internalNodes>\n          <leafValues>\n            -8.0523788928985596e-03 1.6925090551376343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7898 -9.5786049962043762e-02</internalNodes>\n          <leafValues>\n            -5.0116628408432007e-01 8.7666641920804977e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7899 1.2036979943513870e-01</internalNodes>\n          <leafValues>\n            9.8632962908595800e-04 -1.0000280141830444e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7900 2.4782579392194748e-02</internalNodes>\n          <leafValues>\n            -1.2519709765911102e-02 3.5919609665870667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7901 -5.0353828817605972e-02</internalNodes>\n          <leafValues>\n            -3.3340519666671753e-01 6.9066900759935379e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7902 3.1298059970140457e-02</internalNodes>\n          <leafValues>\n            1.0963119566440582e-02 -4.0645220875740051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7903 7.4575231410562992e-03</internalNodes>\n          <leafValues>\n            -2.1207600831985474e-02 1.3167420029640198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7904 5.5791479535400867e-03</internalNodes>\n          <leafValues>\n            -3.4098070114850998e-02 1.2983830273151398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7905 5.9088319540023804e-03</internalNodes>\n          <leafValues>\n            -2.6940669864416122e-02 1.6839459538459778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7906 1.7543360590934753e-02</internalNodes>\n          <leafValues>\n            4.2376369237899780e-02 -1.2350399792194366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7907 -9.6103046089410782e-03</internalNodes>\n          <leafValues>\n            5.2223920822143555e-02 -2.5582559406757355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7908 2.0607879851013422e-03</internalNodes>\n          <leafValues>\n            4.0174130350351334e-02 -1.0548079758882523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7909 -5.3874161094427109e-03</internalNodes>\n          <leafValues>\n            -6.4995579421520233e-02 2.7807140722870827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7910 1.1102309823036194e-01</internalNodes>\n          <leafValues>\n            -4.9670711159706116e-03 8.1718921661376953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7911 -3.7374150007963181e-02</internalNodes>\n          <leafValues>\n            -6.2611418962478638e-01 3.0927599873393774e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7912 5.0286632031202316e-03</internalNodes>\n          <leafValues>\n            2.4978660047054291e-01 -1.8151100724935532e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7913 2.9225579928606749e-03</internalNodes>\n          <leafValues>\n            -6.0576818883419037e-02 2.6497339829802513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7914 -5.4296620190143585e-02</internalNodes>\n          <leafValues>\n            -5.7990437746047974e-01 6.5989522263407707e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7915 1.2996720150113106e-02</internalNodes>\n          <leafValues>\n            -2.6128260418772697e-02 9.7030609846115112e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7916 3.3001229166984558e-02</internalNodes>\n          <leafValues>\n            1.4960479922592640e-02 -3.2304659485816956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7917 -1.1660449951887131e-01</internalNodes>\n          <leafValues>\n            2.5725141167640686e-01 -1.2625830247998238e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7918 7.0706337690353394e-02</internalNodes>\n          <leafValues>\n            7.0192231796681881e-03 -6.9260591268539429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7919 -4.4549949467182159e-02</internalNodes>\n          <leafValues>\n            -7.1134221553802490e-01 4.9668429419398308e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7920 4.2873818427324295e-02</internalNodes>\n          <leafValues>\n            6.7160711623728275e-03 -5.2660852670669556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7921 2.5025280192494392e-02</internalNodes>\n          <leafValues>\n            -1.8445409834384918e-02 7.8793220221996307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7922 2.1663550287485123e-03</internalNodes>\n          <leafValues>\n            3.2540310174226761e-02 -1.3115049898624420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7923 2.5540040805935860e-02</internalNodes>\n          <leafValues>\n            -3.4693568944931030e-02 4.1404798626899719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7924 -8.3627507090568542e-02</internalNodes>\n          <leafValues>\n            -5.2143442630767822e-01 7.7060810290277004e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7925 3.7637550849467516e-03</internalNodes>\n          <leafValues>\n            -2.9463630169630051e-02 7.4424192309379578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7926 3.7175719626247883e-03</internalNodes>\n          <leafValues>\n            -4.2123001068830490e-02 1.0287009924650192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7927 -5.2892807871103287e-03</internalNodes>\n          <leafValues>\n            -1.2348390370607376e-01 3.7152700126171112e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7928 -9.1878473758697510e-03</internalNodes>\n          <leafValues>\n            9.0256750583648682e-02 -5.2674051374197006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7929 -5.5448919534683228e-02</internalNodes>\n          <leafValues>\n            -5.3639650344848633e-01 2.6584670413285494e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7930 6.4754108898341656e-03</internalNodes>\n          <leafValues>\n            5.5367350578308105e-02 -9.2722631990909576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7931 -1.5773440245538950e-03</internalNodes>\n          <leafValues>\n            1.3578939437866211e-01 -4.0911730378866196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7932 -4.9912789836525917e-04</internalNodes>\n          <leafValues>\n            -1.4728380739688873e-01 5.3603630512952805e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7933 1.5690509974956512e-01</internalNodes>\n          <leafValues>\n            -7.8873159363865852e-03 3.7397789955139160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7934 3.6391850560903549e-02</internalNodes>\n          <leafValues>\n            4.9765990115702152e-03 -9.1157531738281250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7935 -9.5625342801213264e-03</internalNodes>\n          <leafValues>\n            1.2767709791660309e-01 -1.4394680038094521e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7936 2.4007901083678007e-03</internalNodes>\n          <leafValues>\n            -1.3107380270957947e-01 4.4731479138135910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7937 3.2929850276559591e-03</internalNodes>\n          <leafValues>\n            4.0428631007671356e-02 -5.3223561495542526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7938 -3.1314359512180090e-03</internalNodes>\n          <leafValues>\n            3.6826111376285553e-02 -1.2113159894943237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7939 5.2008330821990967e-02</internalNodes>\n          <leafValues>\n            5.9283021837472916e-03 -4.3858841061592102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7940 5.7681259931996465e-04</internalNodes>\n          <leafValues>\n            -6.9851770997047424e-02 6.4286291599273682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7941 6.1443001031875610e-03</internalNodes>\n          <leafValues>\n            3.0908059328794479e-02 -1.8229809403419495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7942 3.5959720611572266e-02</internalNodes>\n          <leafValues>\n            -4.1680991649627686e-02 1.4244790375232697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7943 -2.1290820091962814e-02</internalNodes>\n          <leafValues>\n            -9.6662320196628571e-02 5.5888749659061432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7944 -6.2724511371925473e-04</internalNodes>\n          <leafValues>\n            9.0150557458400726e-02 -6.9430753588676453e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7945 -2.5145700201392174e-03</internalNodes>\n          <leafValues>\n            -6.9526046514511108e-02 4.5552581548690796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7946 5.7874649763107300e-02</internalNodes>\n          <leafValues>\n            -2.5036580860614777e-02 2.0633180439472198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7947 1.5898469835519791e-02</internalNodes>\n          <leafValues>\n            -1.7133399844169617e-02 1.1004959791898727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7948 2.7882799506187439e-02</internalNodes>\n          <leafValues>\n            2.7713179588317871e-02 -1.6536410152912140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7949 8.8283112272620201e-03</internalNodes>\n          <leafValues>\n            -2.7497250586748123e-02 5.9822890907526016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7950 -1.5679910778999329e-02</internalNodes>\n          <leafValues>\n            -2.6984989643096924e-01 1.6398239880800247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7951 4.1906189173460007e-02</internalNodes>\n          <leafValues>\n            -8.0525986850261688e-03 3.1556311249732971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7952 -4.1068609803915024e-02</internalNodes>\n          <leafValues>\n            2.5637561082839966e-01 -1.8357910215854645e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7953 3.5570110194385052e-03</internalNodes>\n          <leafValues>\n            2.9343830421566963e-02 -1.2668469548225403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7954 -2.1371750626713037e-03</internalNodes>\n          <leafValues>\n            1.2923260033130646e-01 -4.0102209895849228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7955 3.3638089895248413e-02</internalNodes>\n          <leafValues>\n            8.1196166574954987e-03 -4.0394780039787292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7956 1.0182919912040234e-02</internalNodes>\n          <leafValues>\n            -4.2566180229187012e-02 1.1843100190162659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7957 -7.0302112726494670e-04</internalNodes>\n          <leafValues>\n            3.8721978664398193e-02 -7.9703420400619507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7958 -2.8552680741995573e-03</internalNodes>\n          <leafValues>\n            9.1274276375770569e-02 -6.1691451817750931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7959 -2.9935541097074747e-03</internalNodes>\n          <leafValues>\n            -1.0913450270891190e-01 3.8736950606107712e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7960 -5.3608341841027141e-04</internalNodes>\n          <leafValues>\n            -4.3252488970756531e-01 1.0958270169794559e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7961 5.1431890577077866e-02</internalNodes>\n          <leafValues>\n            4.7060111537575722e-03 -2.6765900850296021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7962 -4.8872891813516617e-02</internalNodes>\n          <leafValues>\n            2.0144729316234589e-01 -2.2844519466161728e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7963 -1.6080449521541595e-01</internalNodes>\n          <leafValues>\n            -1. 1.9577229395508766e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7964 1.8509939312934875e-02</internalNodes>\n          <leafValues>\n            1.7808660864830017e-02 -2.7871158719062805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7965 -4.2106948792934418e-02</internalNodes>\n          <leafValues>\n            -6.2493157386779785e-01 7.0520970039069653e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7966 -9.7096778452396393e-02</internalNodes>\n          <leafValues>\n            -8.4505838155746460e-01 4.4749649241566658e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7967 -9.4244757201522589e-04</internalNodes>\n          <leafValues>\n            1.9796760380268097e-01 -2.2733120247721672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7968 -1.8040809780359268e-02</internalNodes>\n          <leafValues>\n            -3.3424109220504761e-01 1.3358039781451225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7969 6.3626631163060665e-04</internalNodes>\n          <leafValues>\n            -1.0530749708414078e-01 4.4016160070896149e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7970 -3.4530549310147762e-03</internalNodes>\n          <leafValues>\n            -1.3687069714069366e-01 3.0288280919194221e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7971 1.7589809373021126e-02</internalNodes>\n          <leafValues>\n            -2.8031280264258385e-02 1.8331700563430786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7972 -1.4289390528574586e-03</internalNodes>\n          <leafValues>\n            6.7616157233715057e-02 -6.4400359988212585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7973 1.4584570191800594e-02</internalNodes>\n          <leafValues>\n            -3.2548811286687851e-02 7.7070221304893494e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7974 7.4579578638076782e-01</internalNodes>\n          <leafValues>\n            9.1963959857821465e-03 -4.5680120587348938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7975 -1.2285649776458740e-01</internalNodes>\n          <leafValues>\n            -6.4423608779907227e-01 2.0847769919782877e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7976 -1.1613000184297562e-01</internalNodes>\n          <leafValues>\n            -7.9274278879165649e-01 4.9578230828046799e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7977 5.5644840002059937e-02</internalNodes>\n          <leafValues>\n            -5.7718120515346527e-03 3.0834281444549561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7978 2.0566429942846298e-02</internalNodes>\n          <leafValues>\n            -1.5474709682166576e-02 2.8002938628196716e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7979 3.8393519935198128e-04</internalNodes>\n          <leafValues>\n            3.4390248358249664e-02 -1.0244189947843552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7980 4.0198508650064468e-03</internalNodes>\n          <leafValues>\n            5.2533138543367386e-02 -1.1492720246315002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7981 -7.4124410748481750e-02</internalNodes>\n          <leafValues>\n            -3.0216461420059204e-01 4.2779031209647655e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7982 -3.4346429165452719e-03</internalNodes>\n          <leafValues>\n            6.5627492964267731e-02 -6.9991588592529297e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7983 -4.3740049004554749e-03</internalNodes>\n          <leafValues>\n            -1.2934839725494385e-01 5.1233518868684769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7984 6.9464151747524738e-03</internalNodes>\n          <leafValues>\n            -3.2591849565505981e-02 1.5098060667514801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7985 -1.8434170633554459e-02</internalNodes>\n          <leafValues>\n            -3.1364220380783081e-01 9.5867328345775604e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7986 -3.2201830763369799e-03</internalNodes>\n          <leafValues>\n            -1.7494319379329681e-01 3.3579058945178986e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7987 -3.2273299992084503e-02</internalNodes>\n          <leafValues>\n            2.4136200547218323e-01 -2.4392010644078255e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7988 -4.8193791881203651e-03</internalNodes>\n          <leafValues>\n            -1.3610219955444336e-01 4.1156660765409470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7989 -9.8347626626491547e-02</internalNodes>\n          <leafValues>\n            -5.3324717283248901e-01 8.8729923591017723e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7990 1.9054619595408440e-02</internalNodes>\n          <leafValues>\n            -3.2564271241426468e-02 1.6729709506034851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7991 -8.1796169281005859e-02</internalNodes>\n          <leafValues>\n            -6.4131242036819458e-01 8.7052602320909500e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7992 3.2996949739754200e-03</internalNodes>\n          <leafValues>\n            -5.9765439480543137e-02 7.1879856288433075e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7993 -7.5977660715579987e-02</internalNodes>\n          <leafValues>\n            -5.0415420532226562e-01 5.6795510463416576e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7994 3.0508760362863541e-02</internalNodes>\n          <leafValues>\n            1.0317360050976276e-02 -4.3552881479263306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7995 -3.7642959505319595e-02</internalNodes>\n          <leafValues>\n            3.7324428558349609e-01 -1.7276229336857796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7996 -9.9801109172403812e-04</internalNodes>\n          <leafValues>\n            -1.4508770406246185e-01 3.0973700806498528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7997 -2.0703389309346676e-03</internalNodes>\n          <leafValues>\n            1.2285920232534409e-01 -2.5285899639129639e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7998 7.1816377341747284e-02</internalNodes>\n          <leafValues>\n            7.2997398674488068e-03 -6.2621092796325684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7999 1.6781920194625854e-01</internalNodes>\n          <leafValues>\n            -1.0094069875776768e-02 2.2531180083751678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8000 1.5028619964141399e-04</internalNodes>\n          <leafValues>\n            -4.9013838171958923e-02 9.5635637640953064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8001 9.5139637589454651e-02</internalNodes>\n          <leafValues>\n            -2.3964960128068924e-03 7.8972822427749634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8002 3.8569360040128231e-03</internalNodes>\n          <leafValues>\n            4.0852431207895279e-02 -1.1976979672908783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8003 2.3172760382294655e-02</internalNodes>\n          <leafValues>\n            -8.1755416467785835e-03 3.4895899891853333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8004 1.3417989946901798e-02</internalNodes>\n          <leafValues>\n            2.9357729479670525e-02 -1.4476950466632843e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8005 -1.4165779948234558e-01</internalNodes>\n          <leafValues>\n            3.4960448741912842e-01 -3.9633908309042454e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8006 5.5483141914010048e-03</internalNodes>\n          <leafValues>\n            -4.6736769378185272e-02 8.7630823254585266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8007 -4.7431029379367828e-03</internalNodes>\n          <leafValues>\n            6.2899678945541382e-02 -2.6983590796589851e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8008 -6.6862776875495911e-02</internalNodes>\n          <leafValues>\n            -9.5272868871688843e-01 3.9776111952960491e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8009 2.2987840697169304e-02</internalNodes>\n          <leafValues>\n            -1.7802899703383446e-02 1.4564949274063110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8010 -2.2234279662370682e-02</internalNodes>\n          <leafValues>\n            -9.3360446393489838e-02 5.1537070423364639e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8011 1.5045719919726253e-05</internalNodes>\n          <leafValues>\n            -3.0237749218940735e-02 2.6654670014977455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8012 -4.7994707711040974e-03</internalNodes>\n          <leafValues>\n            1.0105530172586441e-01 -5.0083991140127182e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8013 -2.4227909743785858e-01</internalNodes>\n          <leafValues>\n            -6.8399482965469360e-01 2.1470880601555109e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8014 4.6939790248870850e-02</internalNodes>\n          <leafValues>\n            8.1193735823035240e-03 -4.7671818733215332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8015 -6.0940280556678772e-02</internalNodes>\n          <leafValues>\n            2.3827329277992249e-01 -9.5430584624409676e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8016 2.4104740470647812e-02</internalNodes>\n          <leafValues>\n            -1.5799079090356827e-02 2.6727899909019470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8017 -4.6567570418119431e-02</internalNodes>\n          <leafValues>\n            -3.1017771363258362e-01 8.3353007212281227e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8018 1.8709240248426795e-03</internalNodes>\n          <leafValues>\n            -7.2588071227073669e-02 6.5608270466327667e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8019 -5.9872400015592575e-03</internalNodes>\n          <leafValues>\n            -1.8159690499305725e-01 1.4030029997229576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8020 -7.3103660724882502e-06</internalNodes>\n          <leafValues>\n            4.0913790464401245e-02 -1.0656440258026123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8021 -2.3244550451636314e-02</internalNodes>\n          <leafValues>\n            -1.9035540521144867e-01 1.5966059640049934e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8022 -1.1853489559143782e-03</internalNodes>\n          <leafValues>\n            5.9956710785627365e-02 -7.6678447425365448e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8023 -1.2981820106506348e-01</internalNodes>\n          <leafValues>\n            4.0999498963356018e-01 -5.0850748084485531e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8024 -5.1512669771909714e-02</internalNodes>\n          <leafValues>\n            -3.0527231097221375e-01 1.4186340384185314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8025 -3.9303461089730263e-03</internalNodes>\n          <leafValues>\n            -7.9763479530811310e-02 2.6248890906572342e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8026 1.5822829678654671e-02</internalNodes>\n          <leafValues>\n            -1.6849309206008911e-02 2.7549791336059570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8027 1.1561570316553116e-01</internalNodes>\n          <leafValues>\n            6.7870649509131908e-03 -1.2709319591522217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8028 1.1260829633101821e-03</internalNodes>\n          <leafValues>\n            8.1908516585826874e-02 -5.8194048702716827e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8029 1.5513430349528790e-02</internalNodes>\n          <leafValues>\n            -4.2989719659090042e-02 7.8364297747612000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8030 4.6268731355667114e-02</internalNodes>\n          <leafValues>\n            1.1759550310671329e-02 -3.9947330951690674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8031 7.9535972326993942e-03</internalNodes>\n          <leafValues>\n            1.6848539933562279e-02 -8.8599078357219696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8032 -1.8991220742464066e-02</internalNodes>\n          <leafValues>\n            2.4813260138034821e-01 -1.7320850864052773e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8033 3.7058200687170029e-03</internalNodes>\n          <leafValues>\n            -2.1747030317783356e-02 5.8276090770959854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8034 2.5829279329627752e-03</internalNodes>\n          <leafValues>\n            5.0559278577566147e-02 -9.3193918466567993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8035 -3.1010560691356659e-02</internalNodes>\n          <leafValues>\n            2.2110439836978912e-01 -1.4786499552428722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8036 2.5402549654245377e-03</internalNodes>\n          <leafValues>\n            -8.6743600666522980e-02 5.7932410389184952e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8037 -8.9100487530231476e-03</internalNodes>\n          <leafValues>\n            5.3846079856157303e-02 -4.5931909233331680e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8038 4.0557151660323143e-03</internalNodes>\n          <leafValues>\n            5.9298399835824966e-02 -8.3007253706455231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8039 6.1204940080642700e-02</internalNodes>\n          <leafValues>\n            9.2248879373073578e-03 -2.1082369983196259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8040 7.7630057930946350e-03</internalNodes>\n          <leafValues>\n            -7.5927056372165680e-02 5.7865709066390991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8041 1.5921150147914886e-01</internalNodes>\n          <leafValues>\n            8.3040859317407012e-04 -1.0000480413436890e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8042 3.9196189492940903e-02</internalNodes>\n          <leafValues>\n            7.1930838748812675e-03 -6.0338622331619263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8043 1.0220289975404739e-01</internalNodes>\n          <leafValues>\n            -3.6227719392627478e-03 5.4500752687454224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8044 -1.5064980089664459e-01</internalNodes>\n          <leafValues>\n            -7.0450758934020996e-01 6.6995541565120220e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8045 1.3819299638271332e-01</internalNodes>\n          <leafValues>\n            -1.1153860017657280e-02 1.7932909727096558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8046 -3.8313010009005666e-04</internalNodes>\n          <leafValues>\n            -7.2442352771759033e-02 5.7925980538129807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8047 -2.7796919457614422e-03</internalNodes>\n          <leafValues>\n            -8.6280398070812225e-02 4.1014600545167923e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8048 3.9365138858556747e-02</internalNodes>\n          <leafValues>\n            -4.6629320830106735e-02 8.8124006986618042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8049 -6.1933819204568863e-02</internalNodes>\n          <leafValues>\n            7.0118552446365356e-01 -2.5661089457571507e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8050 -5.9742941521108150e-03</internalNodes>\n          <leafValues>\n            -1.6519010066986084e-01 3.7947021424770355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8051 7.5101079419255257e-03</internalNodes>\n          <leafValues>\n            5.4191488772630692e-02 -7.9166658222675323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8052 -9.7005672752857208e-02</internalNodes>\n          <leafValues>\n            -8.8104772567749023e-01 4.8486101441085339e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8053 -6.7751510068774223e-03</internalNodes>\n          <leafValues>\n            9.1601163148880005e-02 -4.8942770808935165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8054 -9.2599419876933098e-03</internalNodes>\n          <leafValues>\n            -1.3298119604587555e-01 4.1785500943660736e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8055 1.5215040184557438e-03</internalNodes>\n          <leafValues>\n            5.2633590996265411e-02 -6.0624439269304276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8056 5.4703168570995331e-03</internalNodes>\n          <leafValues>\n            -4.7825179994106293e-02 1.1194570362567902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8057 2.5002110749483109e-02</internalNodes>\n          <leafValues>\n            -2.0354969426989555e-02 1.0175590217113495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8058 3.2576780766248703e-02</internalNodes>\n          <leafValues>\n            2.5629660114645958e-02 -1.9484190642833710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8059 -7.7732130885124207e-03</internalNodes>\n          <leafValues>\n            1.2477400153875351e-01 -3.4667998552322388e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8060 1.7777189612388611e-02</internalNodes>\n          <leafValues>\n            3.3261820673942566e-02 -1.4155229926109314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8061 1.0459429584443569e-02</internalNodes>\n          <leafValues>\n            -4.4039878994226456e-02 6.1871558427810669e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>406</maxWeakCount>\n      <stageThreshold>-1.1700680255889893e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 8062 1.8751189112663269e-02</internalNodes>\n          <leafValues>\n            -1.7775079607963562e-01 1.7157439887523651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8063 -2.1875950042158365e-03</internalNodes>\n          <leafValues>\n            7.5339153409004211e-02 -2.5842121243476868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8064 -1.1698690056800842e-01</internalNodes>\n          <leafValues>\n            4.2645370960235596e-01 -3.7121698260307312e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8065 3.8377330638468266e-03</internalNodes>\n          <leafValues>\n            3.5092439502477646e-02 -1.5757289528846741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8066 -1.2941210297867656e-03</internalNodes>\n          <leafValues>\n            -2.0068730413913727e-01 5.5704809725284576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8067 4.3927300721406937e-03</internalNodes>\n          <leafValues>\n            5.7497099041938782e-02 -1.9302740693092346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8068 -1.5021540457382798e-03</internalNodes>\n          <leafValues>\n            7.2378978133201599e-02 -1.4534910023212433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8069 1.2381949927657843e-03</internalNodes>\n          <leafValues>\n            -9.0413779020309448e-02 8.2838788628578186e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8070 3.0004729051142931e-03</internalNodes>\n          <leafValues>\n            6.0199409723281860e-02 -1.5556170046329498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8071 4.5666601508855820e-03</internalNodes>\n          <leafValues>\n            -7.6936639845371246e-02 1.3762770593166351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8072 9.9231943022459745e-04</internalNodes>\n          <leafValues>\n            4.7918211668729782e-02 -2.0472359657287598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8073 -3.8909649010747671e-03</internalNodes>\n          <leafValues>\n            -2.1067039668560028e-01 5.9297189116477966e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8074 2.4324860423803329e-03</internalNodes>\n          <leafValues>\n            -7.3611870408058167e-02 1.4165569841861725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8075 -3.3090400975197554e-03</internalNodes>\n          <leafValues>\n            -1.6489060223102570e-01 4.3310891836881638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8076 5.9596560895442963e-03</internalNodes>\n          <leafValues>\n            -2.1388399600982666e-01 4.3472908437252045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8077 9.7754271700978279e-03</internalNodes>\n          <leafValues>\n            2.7664290741086006e-02 -1.9119890034198761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8078 -3.8124300539493561e-02</internalNodes>\n          <leafValues>\n            3.1658840179443359e-01 -2.9972679913043976e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8079 1.4401610242202878e-03</internalNodes>\n          <leafValues>\n            -1.6602130234241486e-01 6.1300911009311676e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8080 7.5199408456683159e-04</internalNodes>\n          <leafValues>\n            -1.3568510115146637e-01 5.7345770299434662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8081 2.4780649691820145e-03</internalNodes>\n          <leafValues>\n            -7.7258758246898651e-02 5.3781200200319290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8082 9.2068109661340714e-03</internalNodes>\n          <leafValues>\n            7.4349351227283478e-02 -1.3886499404907227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8083 1.7634540796279907e-02</internalNodes>\n          <leafValues>\n            -2.6817159727215767e-02 3.4912449121475220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8084 1.0517879854887724e-03</internalNodes>\n          <leafValues>\n            8.3444483578205109e-02 -8.3271436393260956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8085 -7.2119189426302910e-03</internalNodes>\n          <leafValues>\n            1.4149050414562225e-01 -3.0853189527988434e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8086 8.1929508596658707e-03</internalNodes>\n          <leafValues>\n            6.4249828457832336e-02 -1.4224460721015930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8087 -5.7932751951739192e-04</internalNodes>\n          <leafValues>\n            -6.1768930405378342e-02 3.4835230559110641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8088 4.5172017998993397e-03</internalNodes>\n          <leafValues>\n            -7.3925666511058807e-02 9.5347866415977478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8089 2.2280250489711761e-01</internalNodes>\n          <leafValues>\n            2.8079450130462646e-02 -2.6174598932266235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8090 -8.1560667604207993e-04</internalNodes>\n          <leafValues>\n            -1.1128710210323334e-01 6.1751261353492737e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8091 1.9009260460734367e-02</internalNodes>\n          <leafValues>\n            -3.5914849489927292e-02 9.5332697033882141e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8092 -1.1708099627867341e-03</internalNodes>\n          <leafValues>\n            -1.7809429764747620e-01 3.8471758365631104e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8093 -2.7492839843034744e-02</internalNodes>\n          <leafValues>\n            1.5674190223217010e-01 -3.6307450383901596e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8094 -5.4139150306582451e-03</internalNodes>\n          <leafValues>\n            -1.6014580428600311e-01 4.5228298753499985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8095 1.1325670406222343e-02</internalNodes>\n          <leafValues>\n            -5.2679128944873810e-02 1.2411580234766006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8096 -1.3919079303741455e-01</internalNodes>\n          <leafValues>\n            -2.8573009371757507e-01 2.5642180815339088e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8097 -7.6183810830116272e-02</internalNodes>\n          <leafValues>\n            2.0390880107879639e-01 -1.2701939791440964e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8098 1.3947900151833892e-03</internalNodes>\n          <leafValues>\n            -1.1320529878139496e-01 5.7419300079345703e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8099 4.6532237902283669e-03</internalNodes>\n          <leafValues>\n            5.7795990258455276e-02 -1.0997010022401810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8100 4.5034389942884445e-02</internalNodes>\n          <leafValues>\n            -2.8761979192495346e-02 2.2605720162391663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8101 1.6864009201526642e-02</internalNodes>\n          <leafValues>\n            3.6318089812994003e-02 -2.0162770152091980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8102 1.9251279532909393e-01</internalNodes>\n          <leafValues>\n            -1.3869989663362503e-02 5.4226338863372803e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8103 -1.6758369747549295e-03</internalNodes>\n          <leafValues>\n            -1.1462789773941040e-01 4.9984849989414215e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8104 -4.5270361006259918e-03</internalNodes>\n          <leafValues>\n            1.1731909960508347e-01 -6.1384700238704681e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8105 5.4975082166492939e-03</internalNodes>\n          <leafValues>\n            3.2194830477237701e-02 -1.5348540246486664e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8106 3.5562040284276009e-03</internalNodes>\n          <leafValues>\n            -6.3937939703464508e-02 1.0787469893693924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8107 2.1489830687642097e-03</internalNodes>\n          <leafValues>\n            -5.0976738333702087e-02 2.9315000399947166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8108 -1.0464210063219070e-02</internalNodes>\n          <leafValues>\n            1.9548749923706055e-01 -3.2784409821033478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8109 -2.9779719188809395e-02</internalNodes>\n          <leafValues>\n            -3.9286538958549500e-01 1.2266620062291622e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8110 9.6993939951062202e-04</internalNodes>\n          <leafValues>\n            -1.0772799700498581e-01 6.1684250831604004e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8111 -4.0499098598957062e-02</internalNodes>\n          <leafValues>\n            -3.6696648597717285e-01 1.1805539950728416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8112 -2.3762779310345650e-03</internalNodes>\n          <leafValues>\n            -1.3933740556240082e-01 5.0010170787572861e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8113 -5.1528858020901680e-03</internalNodes>\n          <leafValues>\n            9.7424000501632690e-02 -2.3820690810680389e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8114 -2.8726980090141296e-02</internalNodes>\n          <leafValues>\n            2.1031719446182251e-01 -3.6088269203901291e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8115 1.4215350151062012e-02</internalNodes>\n          <leafValues>\n            3.4664131700992584e-02 -1.5814340114593506e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8116 2.0164670422673225e-03</internalNodes>\n          <leafValues>\n            5.0487071275711060e-02 -1.2704199552536011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8117 4.1724709444679320e-04</internalNodes>\n          <leafValues>\n            -5.6635189801454544e-02 1.0789140313863754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8118 7.3380130343139172e-03</internalNodes>\n          <leafValues>\n            5.0891719758510590e-02 -1.2210439890623093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8119 -7.5930766761302948e-02</internalNodes>\n          <leafValues>\n            2.2627210617065430e-01 -6.6569480113685131e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8120 -4.2873369529843330e-03</internalNodes>\n          <leafValues>\n            7.2104290127754211e-02 -8.0106139183044434e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8121 -2.4101670831441879e-02</internalNodes>\n          <leafValues>\n            9.1355301439762115e-02 -3.4591969102621078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8122 1.9936550408601761e-02</internalNodes>\n          <leafValues>\n            -3.7764240056276321e-02 1.8896919488906860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8123 5.6939899921417236e-01</internalNodes>\n          <leafValues>\n            3.1492649577558041e-03 -5.9846472740173340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8124 1.0352060198783875e-01</internalNodes>\n          <leafValues>\n            2.3323200643062592e-02 -3.2129231095314026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8125 5.9556990861892700e-02</internalNodes>\n          <leafValues>\n            4.2170342057943344e-03 -3.3442139625549316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8126 -5.0575539469718933e-02</internalNodes>\n          <leafValues>\n            -8.4793227910995483e-01 6.6583030857145786e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8127 -5.5158971808850765e-03</internalNodes>\n          <leafValues>\n            -7.0507496595382690e-02 2.1716769784688950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8128 2.9419310390949249e-02</internalNodes>\n          <leafValues>\n            -3.6319408565759659e-02 1.7510940134525299e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8129 1.0972440242767334e-02</internalNodes>\n          <leafValues>\n            1.8267199397087097e-02 -1.8641340732574463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8130 -3.8842339999973774e-03</internalNodes>\n          <leafValues>\n            -1.0735920071601868e-01 6.0849040746688843e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8131 -1.1936859664274380e-04</internalNodes>\n          <leafValues>\n            5.2348621189594269e-02 -1.2701539695262909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8132 -5.0230980850756168e-03</internalNodes>\n          <leafValues>\n            5.2682720124721527e-02 -1.2703679502010345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8133 1.8986819684505463e-01</internalNodes>\n          <leafValues>\n            1.7255579587072134e-03 -3.2701051235198975e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8134 -2.4319409858435392e-03</internalNodes>\n          <leafValues>\n            1.3875140249729156e-01 -4.3046601116657257e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8135 -2.0888550207018852e-03</internalNodes>\n          <leafValues>\n            -1.1241009831428528e-01 3.7676859647035599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8136 4.2116310447454453e-02</internalNodes>\n          <leafValues>\n            8.1929191946983337e-03 -6.8541908264160156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8137 2.7380110695958138e-02</internalNodes>\n          <leafValues>\n            4.4103930704295635e-03 -5.3421849012374878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8138 2.1348569542169571e-02</internalNodes>\n          <leafValues>\n            -5.1160380244255066e-02 1.0021480172872543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8139 -1.7236869782209396e-02</internalNodes>\n          <leafValues>\n            -3.9995738863945007e-01 2.0257489755749702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8140 7.8617185354232788e-03</internalNodes>\n          <leafValues>\n            2.8996279463171959e-02 -1.8014070391654968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8141 8.1942398101091385e-03</internalNodes>\n          <leafValues>\n            -2.5498030707240105e-02 8.4693931043148041e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8142 6.2367911450564861e-03</internalNodes>\n          <leafValues>\n            1.8659260123968124e-02 -2.6443660259246826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8143 2.1872919751331210e-04</internalNodes>\n          <leafValues>\n            -1.5943029522895813e-01 3.0722649767994881e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8144 -6.4004249870777130e-03</internalNodes>\n          <leafValues>\n            2.8331050276756287e-01 -1.9352490082383156e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8145 -1.0007199645042419e-01</internalNodes>\n          <leafValues>\n            -4.0704050660133362e-01 6.1583020724356174e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8146 1.5690149739384651e-02</internalNodes>\n          <leafValues>\n            -1.6772339120507240e-02 2.9049569368362427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8147 -7.0421490818262100e-03</internalNodes>\n          <leafValues>\n            -6.7985177040100098e-02 3.1130369752645493e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8148 -1.5320030041038990e-02</internalNodes>\n          <leafValues>\n            3.6400088667869568e-01 -1.3608699664473534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8149 5.8485660701990128e-02</internalNodes>\n          <leafValues>\n            7.4363988824188709e-03 -7.5599330663681030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8150 -3.5200670827180147e-03</internalNodes>\n          <leafValues>\n            -1.3923290371894836e-01 3.7657551467418671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8151 -8.7158178212121129e-04</internalNodes>\n          <leafValues>\n            4.2339839041233063e-02 -5.3530458360910416e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8152 2.4548629298806190e-03</internalNodes>\n          <leafValues>\n            -4.4667050242424011e-02 1.3785070180892944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8153 -6.1778929084539413e-02</internalNodes>\n          <leafValues>\n            -3.5338079929351807e-01 4.5869671739637852e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8154 -3.8533521001227200e-04</internalNodes>\n          <leafValues>\n            7.2278007864952087e-02 -1.0433299839496613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8155 7.6227717101573944e-02</internalNodes>\n          <leafValues>\n            -1.1004550382494926e-02 5.0025188922882080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8156 -4.4210380874574184e-03</internalNodes>\n          <leafValues>\n            -8.6290426552295685e-02 5.8773420751094818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8157 1.5068270266056061e-02</internalNodes>\n          <leafValues>\n            -5.8916270732879639e-02 1.0025119781494141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8158 2.5007940828800201e-02</internalNodes>\n          <leafValues>\n            7.6251477003097534e-02 -8.8744960725307465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8159 -7.7328123152256012e-02</internalNodes>\n          <leafValues>\n            2.5363400578498840e-01 -1.5778530389070511e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8160 3.5588641185313463e-04</internalNodes>\n          <leafValues>\n            6.2983699142932892e-02 -7.7181987464427948e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8161 6.9400526583194733e-02</internalNodes>\n          <leafValues>\n            -8.9571140706539154e-03 1.5102629363536835e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8162 -1.8577709794044495e-01</internalNodes>\n          <leafValues>\n            -6.9518351554870605e-01 7.8398203477263451e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8163 -6.6014728508889675e-03</internalNodes>\n          <leafValues>\n            -5.6056641042232513e-02 2.4557920172810555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8164 4.0490310639142990e-02</internalNodes>\n          <leafValues>\n            -2.0202599465847015e-02 2.7736270427703857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8165 1.6997240018099546e-03</internalNodes>\n          <leafValues>\n            -1.1403460055589676e-01 1.9222680479288101e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8166 8.4750041365623474e-02</internalNodes>\n          <leafValues>\n            1.8607510253787041e-02 -3.0505430698394775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8167 -1.6975879669189453e-02</internalNodes>\n          <leafValues>\n            1.2357109785079956e-01 -2.9016660526394844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8168 4.6773189678788185e-03</internalNodes>\n          <leafValues>\n            -4.5864760875701904e-02 1.1718840152025223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8169 -1.4066020026803017e-02</internalNodes>\n          <leafValues>\n            -1.3670490682125092e-01 1.7362629994750023e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8170 5.0944689661264420e-02</internalNodes>\n          <leafValues>\n            1.3865640386939049e-02 -3.9529040455818176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8171 9.8265796899795532e-02</internalNodes>\n          <leafValues>\n            -1.2339199893176556e-02 3.6408239603042603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8172 1.1730480473488569e-03</internalNodes>\n          <leafValues>\n            6.6400513052940369e-02 -8.2091093063354492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8173 1.0979039967060089e-01</internalNodes>\n          <leafValues>\n            4.6397978439927101e-03 -6.1344558000564575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8174 4.9452850362285972e-04</internalNodes>\n          <leafValues>\n            -1.0062679648399353e-01 5.7191990315914154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8175 3.5673558712005615e-01</internalNodes>\n          <leafValues>\n            -1.4482989907264709e-02 3.9276111125946045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8176 8.7493062019348145e-03</internalNodes>\n          <leafValues>\n            -4.8551220446825027e-02 1.0460250079631805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8177 2.2463349625468254e-02</internalNodes>\n          <leafValues>\n            2.2396000102162361e-02 -1.3587850332260132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8178 1.8538760021328926e-02</internalNodes>\n          <leafValues>\n            3.0029479414224625e-02 -2.0861870050430298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8179 3.4236259758472443e-02</internalNodes>\n          <leafValues>\n            -1.0644080117344856e-02 1.6675490140914917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8180 4.0900480002164841e-02</internalNodes>\n          <leafValues>\n            -1.2056970037519932e-02 4.3773320317268372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8181 1.0512579977512360e-01</internalNodes>\n          <leafValues>\n            -9.4033451750874519e-04 7.8061622381210327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8182 7.4799366295337677e-02</internalNodes>\n          <leafValues>\n            7.8805796802043915e-03 -6.6342961788177490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8183 4.3973559513688087e-05</internalNodes>\n          <leafValues>\n            -5.8106150478124619e-02 1.0466519743204117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8184 6.6341059282422066e-03</internalNodes>\n          <leafValues>\n            1.9750369712710381e-02 -2.7033481001853943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8185 6.9901258684694767e-03</internalNodes>\n          <leafValues>\n            -3.2210368663072586e-02 5.6677810847759247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8186 -6.9424291141331196e-03</internalNodes>\n          <leafValues>\n            8.3492629230022430e-02 -6.4236722886562347e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8187 1.2524950504302979e-01</internalNodes>\n          <leafValues>\n            1.9679870456457138e-03 -8.7889492511749268e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8188 -6.0555808246135712e-02</internalNodes>\n          <leafValues>\n            -6.5825527906417847e-01 7.3593561537563801e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8189 4.2092729359865189e-02</internalNodes>\n          <leafValues>\n            9.0475538745522499e-03 -3.7676310539245605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8190 1.6190059483051300e-02</internalNodes>\n          <leafValues>\n            1.4534840360283852e-02 -3.4089210629463196e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8191 -2.6756960898637772e-02</internalNodes>\n          <leafValues>\n            1.6862440109252930e-01 -1.0768949985504150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8192 -5.1163539290428162e-02</internalNodes>\n          <leafValues>\n            -9.4068449735641479e-01 4.8503028228878975e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8193 -2.9093079268932343e-02</internalNodes>\n          <leafValues>\n            1.3051369786262512e-01 -2.7216060087084770e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8194 -1.3433809578418732e-01</internalNodes>\n          <leafValues>\n            -5.3713047504425049e-01 1.0605730116367340e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8195 -4.0363678708672523e-03</internalNodes>\n          <leafValues>\n            -7.8597947955131531e-02 4.5609310269355774e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8196 -1.6303880512714386e-01</internalNodes>\n          <leafValues>\n            6.9153147935867310e-01 -6.8249078467488289e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8197 5.3527228534221649e-02</internalNodes>\n          <leafValues>\n            -8.2422774285078049e-03 2.3649579286575317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8198 9.3209616839885712e-02</internalNodes>\n          <leafValues>\n            -7.0793349295854568e-03 6.3985627889633179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8199 -4.1583351790904999e-02</internalNodes>\n          <leafValues>\n            -4.0527749061584473e-01 1.1953369714319706e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8200 1.5241269767284393e-01</internalNodes>\n          <leafValues>\n            -1.6016889363527298e-02 3.7084808945655823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8201 -1.3017480261623859e-02</internalNodes>\n          <leafValues>\n            -1.2366600334644318e-01 4.4537510722875595e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8202 5.4946541786193848e-02</internalNodes>\n          <leafValues>\n            2.4852929636836052e-02 -2.1955069899559021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8203 3.0320021323859692e-04</internalNodes>\n          <leafValues>\n            -1.3367289304733276e-01 4.0226090699434280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8204 1.3891180045902729e-02</internalNodes>\n          <leafValues>\n            -2.6901820674538612e-02 1.9647410511970520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8205 1.0848880046978593e-03</internalNodes>\n          <leafValues>\n            3.6422070115804672e-02 -8.3430632948875427e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8206 2.3160090204328299e-03</internalNodes>\n          <leafValues>\n            -6.1215829104185104e-02 1.1277849972248077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8207 -7.1280319243669510e-03</internalNodes>\n          <leafValues>\n            -1.4642429351806641e-01 3.1300168484449387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8208 -3.5769429523497820e-03</internalNodes>\n          <leafValues>\n            1.0159090161323547e-01 -6.0789510607719421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8209 7.6856701634824276e-03</internalNodes>\n          <leafValues>\n            4.2229469865560532e-02 -1.2583130598068237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8210 8.4121264517307281e-03</internalNodes>\n          <leafValues>\n            -4.6872619539499283e-02 1.3011389970779419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8211 7.5839929282665253e-02</internalNodes>\n          <leafValues>\n            -9.2988023534417152e-03 2.4260810017585754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8212 8.6365960305556655e-04</internalNodes>\n          <leafValues>\n            9.1133847832679749e-02 -6.1323560774326324e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8213 -1.0632569901645184e-02</internalNodes>\n          <leafValues>\n            -6.7818403244018555e-02 1.9036499783396721e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8214 -1.4120140112936497e-02</internalNodes>\n          <leafValues>\n            2.9123929142951965e-01 -1.7482239753007889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8215 2.0944620482623577e-03</internalNodes>\n          <leafValues>\n            -1.1744289845228195e-01 5.4129518568515778e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8216 4.2378879152238369e-03</internalNodes>\n          <leafValues>\n            3.8495510816574097e-02 -1.4472819864749908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8217 -2.2818730212748051e-03</internalNodes>\n          <leafValues>\n            -1.1576230078935623e-01 2.7663499116897583e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8218 9.4367301790043712e-04</internalNodes>\n          <leafValues>\n            -9.4088926911354065e-02 5.3373821079730988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8219 1.4890190213918686e-02</internalNodes>\n          <leafValues>\n            -1.1562420055270195e-02 1.0941980034112930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8220 5.2381302230060101e-03</internalNodes>\n          <leafValues>\n            3.5265430808067322e-02 -1.5212060511112213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8221 1.2663690140470862e-03</internalNodes>\n          <leafValues>\n            -3.3352568745613098e-02 7.9812049865722656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8222 -5.3786882199347019e-03</internalNodes>\n          <leafValues>\n            2.0934769511222839e-01 -2.4073069915175438e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8223 -1.9063480431213975e-03</internalNodes>\n          <leafValues>\n            -2.0774979889392853e-01 2.5406830012798309e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8224 3.0771149322390556e-03</internalNodes>\n          <leafValues>\n            -5.1940180361270905e-02 1.0475979745388031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8225 9.5619028434157372e-03</internalNodes>\n          <leafValues>\n            3.0633790418505669e-02 -1.0758169740438461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8226 2.0540829747915268e-02</internalNodes>\n          <leafValues>\n            -2.2028919309377670e-02 2.3570840060710907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8227 7.0854742079973221e-03</internalNodes>\n          <leafValues>\n            -4.7188248485326767e-02 8.4122747182846069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8228 -6.2047559767961502e-03</internalNodes>\n          <leafValues>\n            -1.2209820002317429e-01 4.5177329331636429e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8229 -2.3474119603633881e-02</internalNodes>\n          <leafValues>\n            -2.8770458698272705e-01 1.0876529850065708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8230 9.1368835419416428e-03</internalNodes>\n          <leafValues>\n            -3.3426750451326370e-02 2.0680120587348938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8231 1.0512090520933270e-03</internalNodes>\n          <leafValues>\n            4.7006800770759583e-02 -9.5018379390239716e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8232 -6.0899247182533145e-04</internalNodes>\n          <leafValues>\n            5.3419198840856552e-02 -1.0444770008325577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8233 -7.4382261373102665e-03</internalNodes>\n          <leafValues>\n            -4.8089329153299332e-02 1.9244499504566193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8234 1.9495990127325058e-02</internalNodes>\n          <leafValues>\n            -3.0136700719594955e-02 2.0381480455398560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8235 7.7799506485462189e-02</internalNodes>\n          <leafValues>\n            4.2237630113959312e-03 -7.2407877445220947e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8236 3.1717489473521709e-03</internalNodes>\n          <leafValues>\n            2.8818940743803978e-02 -1.6305699944496155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8237 -3.9012718945741653e-02</internalNodes>\n          <leafValues>\n            -2.9151159524917603e-01 1.1131940409541130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8238 -3.1845991034060717e-03</internalNodes>\n          <leafValues>\n            6.3072219491004944e-02 -7.7291563153266907e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8239 1.7876720055937767e-02</internalNodes>\n          <leafValues>\n            5.1196590065956116e-02 -3.7885930389165878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8240 1.2821210548281670e-03</internalNodes>\n          <leafValues>\n            -5.7314708828926086e-02 8.7054982781410217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8241 1.0710550099611282e-01</internalNodes>\n          <leafValues>\n            -1.5561000443994999e-02 3.1525009870529175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8242 6.9577127695083618e-02</internalNodes>\n          <leafValues>\n            8.9664813131093979e-03 -5.8589607477188110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8243 -4.1071181185543537e-03</internalNodes>\n          <leafValues>\n            9.5472246408462524e-02 -3.5176470875740051e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8244 -2.4557299911975861e-03</internalNodes>\n          <leafValues>\n            -1.6605280339717865e-01 3.7322919815778732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8245 -2.0908420905470848e-02</internalNodes>\n          <leafValues>\n            1.3989880681037903e-01 -2.9987450689077377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8246 -8.1008402630686760e-03</internalNodes>\n          <leafValues>\n            -1.0529220104217529e-01 7.0245787501335144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8247 -2.5671819224953651e-02</internalNodes>\n          <leafValues>\n            4.4254720211029053e-01 -1.1081459932029247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8248 -9.3759642913937569e-03</internalNodes>\n          <leafValues>\n            -6.0765031725168228e-02 8.1338323652744293e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8249 5.1140699535608292e-02</internalNodes>\n          <leafValues>\n            -1.0516249574720860e-02 3.4041538834571838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8250 -4.0337219834327698e-03</internalNodes>\n          <leafValues>\n            8.5099473595619202e-02 -6.3421532511711121e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8251 3.3258409239351749e-03</internalNodes>\n          <leafValues>\n            -8.4625139832496643e-02 4.7368369996547699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8252 -3.9332117885351181e-03</internalNodes>\n          <leafValues>\n            -1.2637099623680115e-01 4.2450599372386932e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8253 -4.7937841154634953e-03</internalNodes>\n          <leafValues>\n            -4.2527411133050919e-02 2.5126809254288673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8254 2.5972370058298111e-03</internalNodes>\n          <leafValues>\n            4.1884120553731918e-02 -1.4374159276485443e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8255 5.2807550877332687e-02</internalNodes>\n          <leafValues>\n            -1.2467020191252232e-02 4.0223389863967896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8256 -8.1413555890321732e-03</internalNodes>\n          <leafValues>\n            -1.2783770263195038e-01 3.8975879549980164e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8257 2.9801739379763603e-02</internalNodes>\n          <leafValues>\n            -1.6747390851378441e-02 1.2424229830503464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8258 -8.9907720685005188e-02</internalNodes>\n          <leafValues>\n            3.1418469548225403e-01 -1.8360419198870659e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8259 1.7845210433006287e-01</internalNodes>\n          <leafValues>\n            1.0455190204083920e-02 -3.2048919796943665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8260 1.8588220700621605e-02</internalNodes>\n          <leafValues>\n            -3.8541439920663834e-02 1.5135329961776733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8261 -4.5074601075612009e-05</internalNodes>\n          <leafValues>\n            5.0462849438190460e-02 -5.6574851274490356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8262 3.8339050952345133e-03</internalNodes>\n          <leafValues>\n            4.7501549124717712e-02 -1.4327140152454376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8263 8.8608250021934509e-02</internalNodes>\n          <leafValues>\n            -3.3567149657756090e-03 5.8598208427429199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8264 -7.0611469447612762e-02</internalNodes>\n          <leafValues>\n            6.0292667150497437e-01 -8.3463769406080246e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8265 -1.3958199322223663e-01</internalNodes>\n          <leafValues>\n            -9.1693513095378876e-02 1.5311989933252335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8266 7.6274941675364971e-03</internalNodes>\n          <leafValues>\n            -4.0825009346008301e-02 1.1937720328569412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8267 -7.0419587194919586e-02</internalNodes>\n          <leafValues>\n            -6.6531497240066528e-01 2.6815559249371290e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8268 2.2952680010348558e-03</internalNodes>\n          <leafValues>\n            -7.9496517777442932e-02 5.7034268975257874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8269 3.6756680347025394e-03</internalNodes>\n          <leafValues>\n            -2.9180280864238739e-02 5.6333038955926895e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8270 4.6072501689195633e-02</internalNodes>\n          <leafValues>\n            1.9100179895758629e-02 -2.9163768887519836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8271 2.1738489158451557e-03</internalNodes>\n          <leafValues>\n            -2.6912130415439606e-02 2.0199960470199585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8272 -5.3164511919021606e-03</internalNodes>\n          <leafValues>\n            9.3022979795932770e-02 -7.1548640727996826e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8273 -1.1198960244655609e-02</internalNodes>\n          <leafValues>\n            -1.0618919879198074e-01 4.8395581543445587e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8274 1.7013610340654850e-03</internalNodes>\n          <leafValues>\n            -1.3111209869384766e-01 4.3086219578981400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8275 -1.1626269668340683e-02</internalNodes>\n          <leafValues>\n            1.5684530138969421e-01 -2.4698950350284576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8276 9.3881830573081970e-02</internalNodes>\n          <leafValues>\n            -1.2058589607477188e-02 3.7941938638687134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8277 1.2041090056300163e-02</internalNodes>\n          <leafValues>\n            2.9569109901785851e-02 -1.3328549265861511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8278 -4.1863098740577698e-03</internalNodes>\n          <leafValues>\n            6.7244023084640503e-02 -7.2228990495204926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8279 8.8373906910419464e-02</internalNodes>\n          <leafValues>\n            7.5915241613984108e-03 -6.2512797117233276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8280 -1.4876410365104675e-02</internalNodes>\n          <leafValues>\n            1.1762090027332306e-01 -4.3840218335390091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8281 1.3433529995381832e-02</internalNodes>\n          <leafValues>\n            1.9615789875388145e-02 -1.1923760175704956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8282 1.5091040730476379e-01</internalNodes>\n          <leafValues>\n            -9.9040074273943901e-03 5.6262481212615967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8283 -1.7507839947938919e-02</internalNodes>\n          <leafValues>\n            -2.3439739644527435e-01 1.8828360363841057e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8284 -1.4707089960575104e-01</internalNodes>\n          <leafValues>\n            -7.4530661106109619e-01 7.0233740843832493e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8285 3.1485889106988907e-02</internalNodes>\n          <leafValues>\n            -3.6193220876157284e-03 6.9215708971023560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8286 -1.6217399388551712e-04</internalNodes>\n          <leafValues>\n            4.6460039913654327e-02 -1.0642550140619278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8287 5.6881760247051716e-04</internalNodes>\n          <leafValues>\n            -2.8816150501370430e-02 7.4378728866577148e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8288 -1.9876200705766678e-02</internalNodes>\n          <leafValues>\n            -2.0997400581836700e-01 2.3018810898065567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8289 -8.7401196360588074e-03</internalNodes>\n          <leafValues>\n            1.7325100302696228e-01 -3.5786859691143036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8290 -5.0579208880662918e-02</internalNodes>\n          <leafValues>\n            -5.2024918794631958e-01 9.2388605698943138e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8291 9.3982152640819550e-02</internalNodes>\n          <leafValues>\n            3.4048059023916721e-03 -2.9207429289817810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8292 -1.3326539658010006e-02</internalNodes>\n          <leafValues>\n            1.3661830127239227e-01 -3.4405559301376343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8293 -2.2472620010375977e-02</internalNodes>\n          <leafValues>\n            -2.5913679599761963e-01 1.1266170069575310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8294 -4.1125040501356125e-02</internalNodes>\n          <leafValues>\n            -6.6921561956405640e-01 7.3854308575391769e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8295 6.9720767438411713e-02</internalNodes>\n          <leafValues>\n            5.0764488987624645e-03 -2.4747189879417419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8296 2.5198599323630333e-02</internalNodes>\n          <leafValues>\n            -1.5660049393773079e-02 2.9408401250839233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8297 4.2568319477140903e-03</internalNodes>\n          <leafValues>\n            3.8112118840217590e-02 -1.2368690222501755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8298 -1.2679009698331356e-02</internalNodes>\n          <leafValues>\n            -1.9976189732551575e-01 2.8806639835238457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8299 -1.6080659627914429e-01</internalNodes>\n          <leafValues>\n            1.8710459768772125e-01 -8.2025080919265747e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8300 1.2181399762630463e-01</internalNodes>\n          <leafValues>\n            -1.0855929926037788e-02 4.5412290096282959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8301 2.8687159065157175e-03</internalNodes>\n          <leafValues>\n            -9.8563097417354584e-03 1.9689890742301941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8302 -3.4924471401609480e-04</internalNodes>\n          <leafValues>\n            4.7955259680747986e-02 -1.2549050152301788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8303 4.3789181858301163e-02</internalNodes>\n          <leafValues>\n            5.1197651773691177e-03 -6.6044712066650391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8304 4.9425449222326279e-02</internalNodes>\n          <leafValues>\n            7.9704420641064644e-03 -5.1537191867828369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8305 1.2263789772987366e-02</internalNodes>\n          <leafValues>\n            9.8127601668238640e-03 -1.6274920105934143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8306 -6.7564379423856735e-03</internalNodes>\n          <leafValues>\n            -6.6992767155170441e-02 7.8426092863082886e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8307 1.9599240273237228e-02</internalNodes>\n          <leafValues>\n            -2.4508479982614517e-02 1.7892380058765411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8308 1.3520059874281287e-03</internalNodes>\n          <leafValues>\n            -7.5853422284126282e-02 5.7282470166683197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8309 5.1610758528113365e-03</internalNodes>\n          <leafValues>\n            5.0592619925737381e-02 -9.6658922731876373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8310 2.7124589309096336e-02</internalNodes>\n          <leafValues>\n            -1.3078499585390091e-02 3.3894819021224976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8311 -7.3659062385559082e-02</internalNodes>\n          <leafValues>\n            -9.0775561332702637e-01 5.3760888986289501e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8312 -2.7619479224085808e-03</internalNodes>\n          <leafValues>\n            1.3446320593357086e-01 -3.4483309835195541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8313 -1.5638889744877815e-03</internalNodes>\n          <leafValues>\n            -1.9992120563983917e-01 1.4003699645400047e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8314 4.0559601038694382e-03</internalNodes>\n          <leafValues>\n            5.3183209151029587e-02 -1.0070829838514328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8315 -3.2189621124416590e-03</internalNodes>\n          <leafValues>\n            6.2624312937259674e-02 -3.0276089906692505e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8316 4.1666622273623943e-03</internalNodes>\n          <leafValues>\n            -9.1761156916618347e-02 5.8400500565767288e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8317 2.0393060520291328e-02</internalNodes>\n          <leafValues>\n            4.8048538155853748e-03 -3.8386350870132446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8318 -9.9844802170991898e-03</internalNodes>\n          <leafValues>\n            -6.9473296403884888e-02 7.0034191012382507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8319 1.9515320658683777e-02</internalNodes>\n          <leafValues>\n            -3.4106500446796417e-02 1.0831409692764282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8320 8.7807718664407730e-03</internalNodes>\n          <leafValues>\n            3.6990050226449966e-02 -1.3089330494403839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8321 1.7314519500359893e-03</internalNodes>\n          <leafValues>\n            -4.2123470455408096e-02 8.4982097148895264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8322 -2.6709519326686859e-02</internalNodes>\n          <leafValues>\n            3.2326829433441162e-01 -1.5427160076797009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8323 7.8696580603718758e-03</internalNodes>\n          <leafValues>\n            3.1361158937215805e-02 -1.0568609833717346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8324 3.2152980566024780e-03</internalNodes>\n          <leafValues>\n            -6.5161801874637604e-02 7.6189488172531128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8325 -2.3215120658278465e-02</internalNodes>\n          <leafValues>\n            2.2522650659084320e-01 -1.4838770031929016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8326 -4.4935368932783604e-03</internalNodes>\n          <leafValues>\n            -1.3131460547447205e-01 4.2855940759181976e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8327 -1.1850389651954174e-02</internalNodes>\n          <leafValues>\n            1.4825740456581116e-01 -2.9456850141286850e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8328 -9.3039282364770770e-04</internalNodes>\n          <leafValues>\n            7.9329937696456909e-02 -7.5784526765346527e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8329 -7.2138011455535889e-04</internalNodes>\n          <leafValues>\n            2.2042410448193550e-02 -2.0893280208110809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8330 1.3078770041465759e-01</internalNodes>\n          <leafValues>\n            -1.2214420363306999e-02 4.3224608898162842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8331 2.7863389253616333e-01</internalNodes>\n          <leafValues>\n            -7.4468360980972648e-04 9.9999761581420898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8332 -4.0815200656652451e-02</internalNodes>\n          <leafValues>\n            -6.1310279369354248e-01 8.2405265420675278e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8333 1.5054940013214946e-03</internalNodes>\n          <leafValues>\n            -1.8053399398922920e-02 6.5230727195739746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8334 6.5729310736060143e-03</internalNodes>\n          <leafValues>\n            3.0967630445957184e-02 -1.5021359920501709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8335 -1.4033170044422150e-01</internalNodes>\n          <leafValues>\n            -4.4641208648681641e-01 5.0997259095311165e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8336 -1.2781560420989990e-02</internalNodes>\n          <leafValues>\n            1.2579609453678131e-01 -4.6258769929409027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8337 1.3383819721639156e-02</internalNodes>\n          <leafValues>\n            7.5233832001686096e-02 -2.9858419671654701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8338 9.5225386321544647e-03</internalNodes>\n          <leafValues>\n            -4.4135529547929764e-02 1.0822969675064087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8339 -7.2484686970710754e-02</internalNodes>\n          <leafValues>\n            -1. 1.3005880173295736e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8340 3.6246789386495948e-04</internalNodes>\n          <leafValues>\n            -6.6878542304039001e-02 7.3916479945182800e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8341 -1.5511980280280113e-02</internalNodes>\n          <leafValues>\n            -1.8414540588855743e-01 1.5999039635062218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8342 5.1146611571311951e-02</internalNodes>\n          <leafValues>\n            -9.4361994415521622e-03 5.4720860719680786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8343 -8.9448272774461657e-05</internalNodes>\n          <leafValues>\n            3.2970890402793884e-02 -4.5103389769792557e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8344 1.0151580208912492e-03</internalNodes>\n          <leafValues>\n            4.8603180795907974e-02 -9.8257049918174744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8345 5.3570970892906189e-02</internalNodes>\n          <leafValues>\n            1.0325700044631958e-02 -1.4304420351982117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8346 1.2302629649639130e-01</internalNodes>\n          <leafValues>\n            -5.2219899371266365e-03 8.6903452873229980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8347 -6.0005468549206853e-04</internalNodes>\n          <leafValues>\n            5.3572040051221848e-02 -5.8203268796205521e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8348 -4.4715698808431625e-02</internalNodes>\n          <leafValues>\n            4.4988310337066650e-01 -1.0549419559538364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8349 6.3781379722058773e-03</internalNodes>\n          <leafValues>\n            2.6184290647506714e-02 -1.0640030354261398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8350 -5.6618300732225180e-04</internalNodes>\n          <leafValues>\n            5.7264849543571472e-02 -7.7750243246555328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8351 -1.5853339573368430e-04</internalNodes>\n          <leafValues>\n            2.5316949933767319e-02 -5.7189941406250000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8352 -4.9790769815444946e-02</internalNodes>\n          <leafValues>\n            -3.7127709388732910e-01 1.3125170022249222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8353 -1.0477020405232906e-02</internalNodes>\n          <leafValues>\n            8.4245949983596802e-02 -3.6731608211994171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8354 -9.0497080236673355e-03</internalNodes>\n          <leafValues>\n            -1.6894440352916718e-01 2.8471369296312332e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8355 -3.5202078521251678e-02</internalNodes>\n          <leafValues>\n            -4.3810841441154480e-01 5.8491500094532967e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8356 -2.0730090327560902e-03</internalNodes>\n          <leafValues>\n            9.4890840351581573e-02 -5.3059589117765427e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8357 -5.0727208144962788e-03</internalNodes>\n          <leafValues>\n            -1.1221739649772644e-01 4.4165991246700287e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8358 2.5876651052385569e-03</internalNodes>\n          <leafValues>\n            -5.5557820945978165e-02 1.1426319926977158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8359 -2.4757650680840015e-03</internalNodes>\n          <leafValues>\n            -4.8213180154561996e-02 3.1529899686574936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8360 -1.2912530452013016e-02</internalNodes>\n          <leafValues>\n            1.1486659944057465e-01 -3.8589760661125183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8361 7.0194348692893982e-02</internalNodes>\n          <leafValues>\n            3.5798270255327225e-03 -7.3008167743682861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8362 -1.2016300112009048e-01</internalNodes>\n          <leafValues>\n            -6.7217922210693359e-01 5.8088749647140503e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8363 1.3109490275382996e-01</internalNodes>\n          <leafValues>\n            1.5340699814260006e-02 -1.2917870283126831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8364 -1.1350499838590622e-01</internalNodes>\n          <leafValues>\n            4.7297981381416321e-01 -1.0574280284345150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8365 -7.1533523499965668e-02</internalNodes>\n          <leafValues>\n            -3.4910291433334351e-01 9.8157208412885666e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8366 1.5889670699834824e-02</internalNodes>\n          <leafValues>\n            -3.0149290338158607e-02 1.5134809911251068e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8367 2.6840370893478394e-01</internalNodes>\n          <leafValues>\n            9.9974423646926880e-03 -1.2243749946355820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8368 -1.4922569692134857e-01</internalNodes>\n          <leafValues>\n            -1.5773139894008636e-01 2.7682509273290634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8369 -2.2858489304780960e-02</internalNodes>\n          <leafValues>\n            1.7340719699859619e-01 -2.1124770864844322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8370 -9.0983451809734106e-04</internalNodes>\n          <leafValues>\n            5.5269908159971237e-02 -8.5052981972694397e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8371 -1.1462160386145115e-02</internalNodes>\n          <leafValues>\n            -1.4397600293159485e-01 1.3809709809720516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8372 8.7118431925773621e-02</internalNodes>\n          <leafValues>\n            6.4688520506024361e-03 -7.2809070348739624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8373 5.3810589015483856e-02</internalNodes>\n          <leafValues>\n            -2.8251519426703453e-02 1.3615800440311432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8374 -1.6928049735724926e-03</internalNodes>\n          <leafValues>\n            -1.0114800184965134e-01 5.2096601575613022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8375 -1.4526920393109322e-02</internalNodes>\n          <leafValues>\n            -1.0613209754228592e-01 2.7218030765652657e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8376 -5.9082340449094772e-03</internalNodes>\n          <leafValues>\n            1.1257000267505646e-01 -6.1032701283693314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8377 -2.1421469748020172e-02</internalNodes>\n          <leafValues>\n            -1.5464189648628235e-01 1.1853870004415512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8378 8.0171570181846619e-02</internalNodes>\n          <leafValues>\n            5.5826799944043159e-03 -8.2389092445373535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8379 -1.0931739816442132e-03</internalNodes>\n          <leafValues>\n            -7.8393906354904175e-02 1.3433099724352360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8380 4.1605130536481738e-04</internalNodes>\n          <leafValues>\n            -4.3186139315366745e-02 1.0500840097665787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8381 -2.8376420959830284e-03</internalNodes>\n          <leafValues>\n            7.8960210084915161e-02 -4.2247280478477478e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8382 -2.8522519394755363e-02</internalNodes>\n          <leafValues>\n            -1.0722970217466354e-01 4.7789189964532852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8383 4.0068081021308899e-01</internalNodes>\n          <leafValues>\n            -5.7991011999547482e-03 3.0695509910583496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8384 -8.1703867763280869e-03</internalNodes>\n          <leafValues>\n            1.0851760208606720e-01 -5.6153468787670135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8385 9.3125440180301666e-03</internalNodes>\n          <leafValues>\n            -4.4560939073562622e-02 4.3634049594402313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8386 5.8274720795452595e-03</internalNodes>\n          <leafValues>\n            3.1310841441154480e-02 -1.6053420305252075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8387 -2.9063750989735126e-03</internalNodes>\n          <leafValues>\n            3.7148229777812958e-02 -2.7310580015182495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8388 1.6421969980001450e-02</internalNodes>\n          <leafValues>\n            -3.1616371124982834e-02 1.6195470094680786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8389 -1.3876060023903847e-02</internalNodes>\n          <leafValues>\n            -1.7840880155563354e-01 2.6925239711999893e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8390 -2.9935980215668678e-02</internalNodes>\n          <leafValues>\n            2.0069709420204163e-01 -2.7372730895876884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8391 8.1381313502788544e-03</internalNodes>\n          <leafValues>\n            4.0951769798994064e-02 -7.4756972491741180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8392 -5.8591389097273350e-03</internalNodes>\n          <leafValues>\n            -1.2337020039558411e-01 3.9641879498958588e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8393 7.1592196822166443e-02</internalNodes>\n          <leafValues>\n            -1.0293760336935520e-02 2.2391259670257568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8394 5.0111521035432816e-02</internalNodes>\n          <leafValues>\n            2.4072999134659767e-02 -2.1443809568881989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8395 4.2603579349815845e-03</internalNodes>\n          <leafValues>\n            -2.3712050169706345e-02 7.3603406548500061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8396 6.5065422095358372e-03</internalNodes>\n          <leafValues>\n            -6.7402780055999756e-02 7.6926141977310181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8397 2.0325470250099897e-03</internalNodes>\n          <leafValues>\n            -9.9664673209190369e-02 5.7994231581687927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8398 -9.3465158715844154e-03</internalNodes>\n          <leafValues>\n            1.9432920217514038e-01 -3.1387709081172943e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8399 9.5768114551901817e-03</internalNodes>\n          <leafValues>\n            2.2594990208745003e-02 -1.6090850532054901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8400 -4.6763911843299866e-02</internalNodes>\n          <leafValues>\n            -3.5020270943641663e-01 1.5035149641335011e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8401 -5.0164870917797089e-02</internalNodes>\n          <leafValues>\n            1.2763389945030212e-01 -1.1035620234906673e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8402 2.3148149251937866e-02</internalNodes>\n          <leafValues>\n            -2.4636579677462578e-02 2.0264349877834320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8403 -7.4168562889099121e-02</internalNodes>\n          <leafValues>\n            -9.4854289293289185e-01 2.2216918878257275e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8404 -2.0698629319667816e-02</internalNodes>\n          <leafValues>\n            -2.4585549533367157e-01 2.1370820701122284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8405 -5.8187540620565414e-02</internalNodes>\n          <leafValues>\n            3.0531001091003418e-01 -8.1265745684504509e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8406 -5.2451588213443756e-02</internalNodes>\n          <leafValues>\n            5.0567781925201416e-01 -9.7108660265803337e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8407 -4.6721640974283218e-02</internalNodes>\n          <leafValues>\n            8.0896109342575073e-01 -1.8908439669758081e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8408 -1.0385509580373764e-02</internalNodes>\n          <leafValues>\n            -2.8369909524917603e-01 1.9166229292750359e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8409 5.4432367905974388e-03</internalNodes>\n          <leafValues>\n            4.1430719196796417e-02 -1.6033279895782471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8410 2.4030160158872604e-02</internalNodes>\n          <leafValues>\n            -4.3751548975706100e-02 1.0553020238876343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8411 -2.6430420577526093e-02</internalNodes>\n          <leafValues>\n            -8.7448269128799438e-02 2.8769830241799355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8412 4.8743681982159615e-03</internalNodes>\n          <leafValues>\n            3.5032961517572403e-02 -1.5881679952144623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8413 -2.5106489192694426e-03</internalNodes>\n          <leafValues>\n            8.8161677122116089e-02 -3.0205590650439262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8414 -5.2146320231258869e-03</internalNodes>\n          <leafValues>\n            -1.1350130289793015e-01 4.2001061141490936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8415 -1.0986009612679482e-02</internalNodes>\n          <leafValues>\n            8.4428779780864716e-02 -3.8272839039564133e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8416 -6.0057129710912704e-02</internalNodes>\n          <leafValues>\n            -7.9249101877212524e-01 5.2951448597013950e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8417 1.3621809892356396e-02</internalNodes>\n          <leafValues>\n            -1.7419820651412010e-02 2.1612060070037842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8418 -2.2223800420761108e-02</internalNodes>\n          <leafValues>\n            2.6721641421318054e-01 -2.0207190886139870e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8419 5.8124359697103500e-02</internalNodes>\n          <leafValues>\n            6.0539757832884789e-03 -4.0927109122276306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8420 -2.8097970411181450e-02</internalNodes>\n          <leafValues>\n            -1.1217900365591049e-01 5.4144639521837234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8421 6.5278373658657074e-02</internalNodes>\n          <leafValues>\n            -7.4973162263631821e-03 1.2384270131587982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8422 -2.5233640335500240e-03</internalNodes>\n          <leafValues>\n            -1.8224379420280457e-01 2.4537850171327591e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8423 1.1478599905967712e-01</internalNodes>\n          <leafValues>\n            1.9617579877376556e-02 -1.1905120313167572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8424 9.6991509199142456e-03</internalNodes>\n          <leafValues>\n            -5.3946550935506821e-02 1.1180210113525391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8425 2.9359150677919388e-02</internalNodes>\n          <leafValues>\n            -2.3395609110593796e-02 1.8534250557422638e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8426 7.8490097075700760e-03</internalNodes>\n          <leafValues>\n            1.6454109549522400e-01 -4.2129490524530411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8427 4.0329899638891220e-03</internalNodes>\n          <leafValues>\n            2.4495590478181839e-02 -6.5955489873886108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8428 2.1471390128135681e-01</internalNodes>\n          <leafValues>\n            -1.0462880134582520e-02 4.7438031435012817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8429 -2.2316209506243467e-03</internalNodes>\n          <leafValues>\n            4.9796439707279205e-02 -1.0328280180692673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8430 2.1833330392837524e-02</internalNodes>\n          <leafValues>\n            -5.3884848952293396e-02 9.3277551233768463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8431 2.4430779740214348e-02</internalNodes>\n          <leafValues>\n            1.5706099569797516e-02 -2.8244438767433167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8432 1.2532520107924938e-02</internalNodes>\n          <leafValues>\n            -3.0983900651335716e-02 1.5599699318408966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8433 7.9741179943084717e-03</internalNodes>\n          <leafValues>\n            2.6650540530681610e-02 -1.3689580559730530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8434 7.9444557428359985e-02</internalNodes>\n          <leafValues>\n            6.4238710328936577e-03 -7.8485661745071411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8435 -1.7925030551850796e-03</internalNodes>\n          <leafValues>\n            3.9645589888095856e-02 -1.1497259885072708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8436 -9.0927572455257177e-04</internalNodes>\n          <leafValues>\n            6.3256889581680298e-02 -7.5250372290611267e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8437 -2.6040049269795418e-02</internalNodes>\n          <leafValues>\n            1.4864259958267212e-01 -1.8506240099668503e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8438 4.1452320292592049e-03</internalNodes>\n          <leafValues>\n            3.3959619700908661e-02 -1.4355990290641785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8439 5.7123368605971336e-04</internalNodes>\n          <leafValues>\n            -6.8550966680049896e-02 6.9944731891155243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8440 -4.9577720463275909e-02</internalNodes>\n          <leafValues>\n            3.9880838990211487e-01 -1.1339910328388214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8441 -1.5334860421717167e-02</internalNodes>\n          <leafValues>\n            -8.3445623517036438e-02 3.2276369631290436e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8442 -1.7406089231371880e-02</internalNodes>\n          <leafValues>\n            1.3560940325260162e-01 -3.1945578753948212e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8443 -2.1422259509563446e-02</internalNodes>\n          <leafValues>\n            -1.1050239950418472e-01 2.8536040335893631e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8444 1.9694769289344549e-03</internalNodes>\n          <leafValues>\n            4.3834108859300613e-02 -1.0551860183477402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8445 -1.9115379080176353e-02</internalNodes>\n          <leafValues>\n            1.4690290391445160e-01 -1.5405310317873955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8446 4.6963259577751160e-02</internalNodes>\n          <leafValues>\n            8.1654358655214310e-03 -5.8734887838363647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8447 2.0964320003986359e-01</internalNodes>\n          <leafValues>\n            3.1721789855509996e-03 -8.0437898635864258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8448 6.2511406838893890e-02</internalNodes>\n          <leafValues>\n            -1.6422789543867111e-02 3.0976039171218872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8449 -1.0126180201768875e-01</internalNodes>\n          <leafValues>\n            -6.1639147996902466e-01 7.2699659503996372e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8450 3.3980670850723982e-03</internalNodes>\n          <leafValues>\n            -1.9664889201521873e-02 2.2541929781436920e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8451 -1.7059950157999992e-02</internalNodes>\n          <leafValues>\n            -1.7193520441651344e-02 6.9114550948143005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8452 3.7455849815160036e-03</internalNodes>\n          <leafValues>\n            5.1737461239099503e-02 -8.2748822867870331e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8453 8.7769806385040283e-02</internalNodes>\n          <leafValues>\n            -6.3681108877062798e-03 7.9492002725601196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8454 2.3725361097604036e-03</internalNodes>\n          <leafValues>\n            -3.0487439036369324e-01 1.4520769938826561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8455 -1.9282909110188484e-02</internalNodes>\n          <leafValues>\n            1.8806980550289154e-01 -1.3220929540693760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8456 3.8580079562962055e-03</internalNodes>\n          <leafValues>\n            3.3978439867496490e-02 -1.2854169309139252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8457 2.6525680441409349e-03</internalNodes>\n          <leafValues>\n            -3.9146900177001953e-02 9.9119357764720917e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8458 9.9175602197647095e-02</internalNodes>\n          <leafValues>\n            5.0618657842278481e-03 -8.7370461225509644e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8459 -7.0648840628564358e-03</internalNodes>\n          <leafValues>\n            8.5219286382198334e-02 -2.4467790499329567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8460 -5.2547529339790344e-03</internalNodes>\n          <leafValues>\n            -1.2158469855785370e-01 3.7228528410196304e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8461 5.0068609416484833e-03</internalNodes>\n          <leafValues>\n            -3.5557191818952560e-02 7.8515462577342987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8462 -6.8118162453174591e-02</internalNodes>\n          <leafValues>\n            -2.6292499899864197e-01 1.8325960263609886e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8463 9.3348289374262094e-04</internalNodes>\n          <leafValues>\n            -3.0107179656624794e-02 4.4869720935821533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8464 -2.1996269933879375e-03</internalNodes>\n          <leafValues>\n            1.1136700212955475e-01 -6.6201932728290558e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8465 -6.6485330462455750e-03</internalNodes>\n          <leafValues>\n            -7.8398697078227997e-02 2.0472070202231407e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8466 1.4126920141279697e-03</internalNodes>\n          <leafValues>\n            -5.2428670227527618e-02 8.9471399784088135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8467 5.1406599581241608e-02</internalNodes>\n          <leafValues>\n            -1.4306739903986454e-03 6.3885271549224854e-01</leafValues></_></weakClassifiers></_></stages>\n  <features>\n    <_>\n      <rects>\n        <_>\n          2 7 14 4 -1.</_>\n        <_>\n          2 9 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          7 2 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 5 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 9 -1.</_>\n        <_>\n          3 9 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 5 -1.</_>\n        <_>\n          7 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 8 -1.</_>\n        <_>\n          4 10 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          12 5 3 5 2.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 11 9 -1.</_>\n        <_>\n          4 3 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 10 -1.</_>\n        <_>\n          4 5 5 5 2.</_>\n        <_>\n          9 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 5 12 -1.</_>\n        <_>\n          3 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 9 9 -1.</_>\n        <_>\n          5 6 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 12 -1.</_>\n        <_>\n          8 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 5 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 8 -1.</_>\n        <_>\n          1 2 4 4 2.</_>\n        <_>\n          5 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 8 -1.</_>\n        <_>\n          13 12 5 4 2.</_>\n        <_>\n          8 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 3 10 -1.</_>\n        <_>\n          4 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 10 -1.</_>\n        <_>\n          0 9 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 9 -1.</_>\n        <_>\n          3 3 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 11 -1.</_>\n        <_>\n          10 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 11 -1.</_>\n        <_>\n          8 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 8 -1.</_>\n        <_>\n          10 6 6 4 2.</_>\n        <_>\n          4 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 7 -1.</_>\n        <_>\n          11 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 7 -1.</_>\n        <_>\n          7 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 6 -1.</_>\n        <_>\n          6 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 7 -1.</_>\n        <_>\n          9 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 5 9 -1.</_>\n        <_>\n          11 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 8 -1.</_>\n        <_>\n          4 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 8 -1.</_>\n        <_>\n          9 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 5 6 -1.</_>\n        <_>\n          4 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 5 -1.</_>\n        <_>\n          12 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 17 2 -1.</_>\n        <_>\n          3 3 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 8 -1.</_>\n        <_>\n          5 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 9 -1.</_>\n        <_>\n          14 3 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 9 5 -1.</_>\n        <_>\n          6 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 9 -1.</_>\n        <_>\n          15 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 9 -1.</_>\n        <_>\n          3 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 12 -1.</_>\n        <_>\n          8 12 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 16 4 -1.</_>\n        <_>\n          2 13 8 2 2.</_>\n        <_>\n          10 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 6 -1.</_>\n        <_>\n          6 7 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 6 -1.</_>\n        <_>\n          0 13 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 20 2 -1.</_>\n        <_>\n          0 19 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 17 3 -1.</_>\n        <_>\n          3 2 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 7 -1.</_>\n        <_>\n          8 5 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 14 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_>\n        <_>\n          7 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 9 -1.</_>\n        <_>\n          4 14 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 16 -1.</_>\n        <_>\n          3 2 7 8 2.</_>\n        <_>\n          10 10 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 16 -1.</_>\n        <_>\n          3 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 2 -1.</_>\n        <_>\n          1 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 4 -1.</_>\n        <_>\n          2 12 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          9 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 9 -1.</_>\n        <_>\n          5 6 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 8 12 -1.</_>\n        <_>\n          10 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 3 -1.</_>\n        <_>\n          2 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 9 12 -1.</_>\n        <_>\n          10 10 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 8 -1.</_>\n        <_>\n          4 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 4 12 -1.</_>\n        <_>\n          9 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 18 -1.</_>\n        <_>\n          4 0 3 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 13 2 -1.</_>\n        <_>\n          5 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          10 0 4 6 2.</_>\n        <_>\n          6 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 10 -1.</_>\n        <_>\n          2 1 3 5 2.</_>\n        <_>\n          5 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 15 6 -1.</_>\n        <_>\n          5 7 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 5 9 -1.</_>\n        <_>\n          2 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 6 -1.</_>\n        <_>\n          14 8 5 3 2.</_>\n        <_>\n          9 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 10 -1.</_>\n        <_>\n          5 6 5 5 2.</_>\n        <_>\n          10 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 12 4 -1.</_>\n        <_>\n          7 6 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 16 4 -1.</_>\n        <_>\n          1 10 8 2 2.</_>\n        <_>\n          9 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 17 -1.</_>\n        <_>\n          7 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 4 16 -1.</_>\n        <_>\n          11 4 2 8 2.</_>\n        <_>\n          9 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 20 -1.</_>\n        <_>\n          2 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 13 -1.</_>\n        <_>\n          15 2 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 18 -1.</_>\n        <_>\n          6 1 3 9 2.</_>\n        <_>\n          9 10 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 13 -1.</_>\n        <_>\n          15 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 14 -1.</_>\n        <_>\n          6 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 13 -1.</_>\n        <_>\n          14 2 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 3 -1.</_>\n        <_>\n          7 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 11 8 -1.</_>\n        <_>\n          5 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 7 4 -1.</_>\n        <_>\n          11 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 20 -1.</_>\n        <_>\n          7 0 6 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 9 -1.</_>\n        <_>\n          5 6 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 11 -1.</_>\n        <_>\n          14 3 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 4 10 -1.</_>\n        <_>\n          3 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          8 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 19 -1.</_>\n        <_>\n          6 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 16 -1.</_>\n        <_>\n          8 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 4 12 -1.</_>\n        <_>\n          9 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 12 -1.</_>\n        <_>\n          6 6 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 13 -1.</_>\n        <_>\n          9 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 7 6 -1.</_>\n        <_>\n          0 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 19 3 -1.</_>\n        <_>\n          1 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 14 -1.</_>\n        <_>\n          6 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 10 6 -1.</_>\n        <_>\n          15 3 5 3 2.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 9 12 -1.</_>\n        <_>\n          10 10 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 8 4 -1.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 8 6 -1.</_>\n        <_>\n          11 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 2 -1.</_>\n        <_>\n          2 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          10 14 7 2 2.</_>\n        <_>\n          3 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 9 -1.</_>\n        <_>\n          3 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 13 2 -1.</_>\n        <_>\n          5 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 7 9 -1.</_>\n        <_>\n          3 3 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 5 -1.</_>\n        <_>\n          8 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 7 4 -1.</_>\n        <_>\n          11 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 8 15 -1.</_>\n        <_>\n          2 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 6 -1.</_>\n        <_>\n          10 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 6 -1.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 14 12 -1.</_>\n        <_>\n          0 1 7 6 2.</_>\n        <_>\n          7 7 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 9 -1.</_>\n        <_>\n          10 13 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 9 -1.</_>\n        <_>\n          0 13 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 10 -1.</_>\n        <_>\n          10 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 4 14 -1.</_>\n        <_>\n          9 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 3 -1.</_>\n        <_>\n          8 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 8 4 -1.</_>\n        <_>\n          6 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 11 -1.</_>\n        <_>\n          15 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 18 -1.</_>\n        <_>\n          7 0 2 9 2.</_>\n        <_>\n          9 9 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 8 18 -1.</_>\n        <_>\n          16 2 4 9 2.</_>\n        <_>\n          12 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 18 -1.</_>\n        <_>\n          4 2 6 9 2.</_>\n        <_>\n          10 11 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 6 -1.</_>\n        <_>\n          4 9 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 4 -1.</_>\n        <_>\n          0 9 9 2 2.</_>\n        <_>\n          9 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          11 0 9 2 2.</_>\n        <_>\n          2 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 11 -1.</_>\n        <_>\n          3 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 15 -1.</_>\n        <_>\n          16 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          3 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 15 3 -1.</_>\n        <_>\n          7 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 14 8 -1.</_>\n        <_>\n          3 13 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 6 -1.</_>\n        <_>\n          3 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 8 -1.</_>\n        <_>\n          5 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 8 -1.</_>\n        <_>\n          10 5 10 4 2.</_>\n        <_>\n          0 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 16 8 -1.</_>\n        <_>\n          0 9 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 15 5 -1.</_>\n        <_>\n          7 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 12 -1.</_>\n        <_>\n          10 8 4 6 2.</_>\n        <_>\n          6 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 7 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 8 -1.</_>\n        <_>\n          10 0 10 4 2.</_>\n        <_>\n          0 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 5 9 -1.</_>\n        <_>\n          5 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 4 -1.</_>\n        <_>\n          11 3 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 4 -1.</_>\n        <_>\n          1 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 6 -1.</_>\n        <_>\n          11 10 6 3 2.</_>\n        <_>\n          5 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 4 -1.</_>\n        <_>\n          5 3 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 5 -1.</_>\n        <_>\n          9 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          8 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 10 -1.</_>\n        <_>\n          9 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 6 -1.</_>\n        <_>\n          0 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 8 -1.</_>\n        <_>\n          6 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 6 -1.</_>\n        <_>\n          7 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 8 -1.</_>\n        <_>\n          4 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 6 -1.</_>\n        <_>\n          2 7 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 12 -1.</_>\n        <_>\n          5 7 5 6 2.</_>\n        <_>\n          10 13 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 3 -1.</_>\n        <_>\n          6 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 6 -1.</_>\n        <_>\n          11 10 8 3 2.</_>\n        <_>\n          3 13 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          3 8 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 15 -1.</_>\n        <_>\n          0 10 20 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 9 -1.</_>\n        <_>\n          3 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 5 -1.</_>\n        <_>\n          10 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 5 -1.</_>\n        <_>\n          7 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 9 -1.</_>\n        <_>\n          15 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 7 -1.</_>\n        <_>\n          3 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 12 -1.</_>\n        <_>\n          2 11 12 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 6 -1.</_>\n        <_>\n          3 3 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 18 -1.</_>\n        <_>\n          10 2 5 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 17 -1.</_>\n        <_>\n          5 3 5 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          10 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 13 2 -1.</_>\n        <_>\n          5 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 2 -1.</_>\n        <_>\n          5 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 2 -1.</_>\n        <_>\n          8 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          10 10 4 4 2.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 14 -1.</_>\n        <_>\n          9 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 5 -1.</_>\n        <_>\n          7 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 3 -1.</_>\n        <_>\n          3 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 4 -1.</_>\n        <_>\n          1 2 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 8 -1.</_>\n        <_>\n          3 1 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 9 -1.</_>\n        <_>\n          14 0 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          3 0 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 9 8 -1.</_>\n        <_>\n          4 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 2 -1.</_>\n        <_>\n          2 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 10 3 -1.</_>\n        <_>\n          6 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 12 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 12 -1.</_>\n        <_>\n          3 4 7 6 2.</_>\n        <_>\n          10 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 8 -1.</_>\n        <_>\n          6 10 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 4 -1.</_>\n        <_>\n          0 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 8 -1.</_>\n        <_>\n          16 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 10 -1.</_>\n        <_>\n          3 3 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 6 -1.</_>\n        <_>\n          5 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 4 -1.</_>\n        <_>\n          8 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 15 6 -1.</_>\n        <_>\n          3 17 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 12 6 -1.</_>\n        <_>\n          11 9 6 3 2.</_>\n        <_>\n          5 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 19 9 -1.</_>\n        <_>\n          1 3 19 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 3 -1.</_>\n        <_>\n          1 12 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 15 5 -1.</_>\n        <_>\n          8 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 6 -1.</_>\n        <_>\n          12 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 3 15 -1.</_>\n        <_>\n          4 10 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 10 9 -1.</_>\n        <_>\n          7 13 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 10 -1.</_>\n        <_>\n          2 6 8 5 2.</_>\n        <_>\n          10 11 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 4 -1.</_>\n        <_>\n          10 9 10 2 2.</_>\n        <_>\n          0 11 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 7 -1.</_>\n        <_>\n          6 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 20 -1.</_>\n        <_>\n          18 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 13 2 -1.</_>\n        <_>\n          3 2 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 18 -1.</_>\n        <_>\n          18 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 5 -1.</_>\n        <_>\n          6 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 15 -1.</_>\n        <_>\n          9 3 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          5 6 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 12 -1.</_>\n        <_>\n          7 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 15 10 -1.</_>\n        <_>\n          5 10 15 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 7 4 -1.</_>\n        <_>\n          4 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 4 -1.</_>\n        <_>\n          8 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 7 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 12 -1.</_>\n        <_>\n          4 6 6 6 2.</_>\n        <_>\n          10 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 10 -1.</_>\n        <_>\n          14 1 3 5 2.</_>\n        <_>\n          11 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 16 12 -1.</_>\n        <_>\n          1 5 8 6 2.</_>\n        <_>\n          9 11 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          4 9 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 10 -1.</_>\n        <_>\n          6 0 3 5 2.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 12 8 -1.</_>\n        <_>\n          13 1 6 4 2.</_>\n        <_>\n          7 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 18 -1.</_>\n        <_>\n          2 1 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 12 10 3 2.</_>\n        <_>\n          10 15 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 15 -1.</_>\n        <_>\n          10 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 12 8 -1.</_>\n        <_>\n          1 1 6 4 2.</_>\n        <_>\n          7 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 5 6 -1.</_>\n        <_>\n          11 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 5 6 -1.</_>\n        <_>\n          4 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 6 -1.</_>\n        <_>\n          4 16 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          2 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 2 -1.</_>\n        <_>\n          2 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 10 -1.</_>\n        <_>\n          10 2 9 5 2.</_>\n        <_>\n          1 7 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 14 -1.</_>\n        <_>\n          10 4 5 7 2.</_>\n        <_>\n          5 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 5 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 8 -1.</_>\n        <_>\n          5 10 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 3 -1.</_>\n        <_>\n          1 14 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 13 -1.</_>\n        <_>\n          1 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 8 -1.</_>\n        <_>\n          8 9 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 20 -1.</_>\n        <_>\n          16 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 20 -1.</_>\n        <_>\n          2 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 19 -1.</_>\n        <_>\n          16 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 16 4 -1.</_>\n        <_>\n          1 0 8 2 2.</_>\n        <_>\n          9 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 4 14 -1.</_>\n        <_>\n          14 6 2 7 2.</_>\n        <_>\n          12 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 3 -1.</_>\n        <_>\n          2 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 10 -1.</_>\n        <_>\n          11 6 4 5 2.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 20 -1.</_>\n        <_>\n          2 0 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 3 -1.</_>\n        <_>\n          5 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 14 3 -1.</_>\n        <_>\n          1 18 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 5 9 -1.</_>\n        <_>\n          15 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 10 -1.</_>\n        <_>\n          9 6 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 8 14 -1.</_>\n        <_>\n          5 4 4 7 2.</_>\n        <_>\n          9 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 8 -1.</_>\n        <_>\n          10 6 6 4 2.</_>\n        <_>\n          4 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 6 -1.</_>\n        <_>\n          3 4 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 7 10 -1.</_>\n        <_>\n          10 9 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 10 -1.</_>\n        <_>\n          3 4 7 5 2.</_>\n        <_>\n          10 9 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 3 13 -1.</_>\n        <_>\n          17 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 3 13 -1.</_>\n        <_>\n          2 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 9 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 12 8 -1.</_>\n        <_>\n          13 8 6 4 2.</_>\n        <_>\n          7 12 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 12 8 -1.</_>\n        <_>\n          1 8 6 4 2.</_>\n        <_>\n          7 12 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 10 -1.</_>\n        <_>\n          7 0 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 12 12 -1.</_>\n        <_>\n          4 2 4 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 12 9 -1.</_>\n        <_>\n          12 11 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 9 -1.</_>\n        <_>\n          7 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 3 10 -1.</_>\n        <_>\n          10 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 8 8 -1.</_>\n        <_>\n          13 12 4 4 2.</_>\n        <_>\n          9 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 9 15 -1.</_>\n        <_>\n          13 2 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 9 15 -1.</_>\n        <_>\n          4 1 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 6 -1.</_>\n        <_>\n          5 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 5 8 -1.</_>\n        <_>\n          5 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 5 8 -1.</_>\n        <_>\n          3 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 12 -1.</_>\n        <_>\n          14 1 3 6 2.</_>\n        <_>\n          11 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 8 8 -1.</_>\n        <_>\n          3 12 4 4 2.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 15 -1.</_>\n        <_>\n          15 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 8 -1.</_>\n        <_>\n          2 5 7 4 2.</_>\n        <_>\n          9 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 10 -1.</_>\n        <_>\n          3 1 3 5 2.</_>\n        <_>\n          6 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 19 2 -1.</_>\n        <_>\n          1 3 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 2 -1.</_>\n        <_>\n          7 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          11 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 6 -1.</_>\n        <_>\n          10 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 12 -1.</_>\n        <_>\n          8 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 7 8 -1.</_>\n        <_>\n          12 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 14 -1.</_>\n        <_>\n          3 2 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 7 8 -1.</_>\n        <_>\n          1 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 16 -1.</_>\n        <_>\n          8 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 7 6 -1.</_>\n        <_>\n          11 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 7 4 -1.</_>\n        <_>\n          1 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 17 6 -1.</_>\n        <_>\n          2 4 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 8 4 -1.</_>\n        <_>\n          5 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 8 -1.</_>\n        <_>\n          10 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 8 -1.</_>\n        <_>\n          8 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 14 -1.</_>\n        <_>\n          11 3 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 4 -1.</_>\n        <_>\n          0 11 9 2 2.</_>\n        <_>\n          9 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 12 12 -1.</_>\n        <_>\n          2 7 6 6 2.</_>\n        <_>\n          8 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 13 2 -1.</_>\n        <_>\n          4 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 15 12 -1.</_>\n        <_>\n          0 10 15 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 11 8 -1.</_>\n        <_>\n          5 6 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 13 3 -1.</_>\n        <_>\n          2 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 13 -1.</_>\n        <_>\n          8 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          7 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 13 -1.</_>\n        <_>\n          9 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 13 -1.</_>\n        <_>\n          9 3 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 8 -1.</_>\n        <_>\n          1 2 4 4 2.</_>\n        <_>\n          5 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 12 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 5 -1.</_>\n        <_>\n          8 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 16 -1.</_>\n        <_>\n          0 11 20 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 16 6 -1.</_>\n        <_>\n          0 6 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 5 12 -1.</_>\n        <_>\n          9 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 8 -1.</_>\n        <_>\n          5 10 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 3 -1.</_>\n        <_>\n          2 9 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 3 -1.</_>\n        <_>\n          2 10 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 6 -1.</_>\n        <_>\n          6 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 3 -1.</_>\n        <_>\n          3 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 16 -1.</_>\n        <_>\n          1 4 3 8 2.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 19 6 -1.</_>\n        <_>\n          1 16 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          7 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 12 4 -1.</_>\n        <_>\n          9 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 4 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 6 -1.</_>\n        <_>\n          6 7 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 10 -1.</_>\n        <_>\n          6 0 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          5 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 2 -1.</_>\n        <_>\n          4 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 7 -1.</_>\n        <_>\n          16 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 5 10 -1.</_>\n        <_>\n          5 9 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 5 10 -1.</_>\n        <_>\n          8 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 9 -1.</_>\n        <_>\n          16 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 9 -1.</_>\n        <_>\n          2 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 19 3 -1.</_>\n        <_>\n          1 2 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 14 -1.</_>\n        <_>\n          8 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 11 -1.</_>\n        <_>\n          13 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 9 -1.</_>\n        <_>\n          0 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 8 -1.</_>\n        <_>\n          13 2 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 8 -1.</_>\n        <_>\n          4 2 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          0 2 10 3 2.</_>\n        <_>\n          10 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 13 -1.</_>\n        <_>\n          6 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 10 -1.</_>\n        <_>\n          0 6 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 13 -1.</_>\n        <_>\n          8 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 16 -1.</_>\n        <_>\n          11 0 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 6 -1.</_>\n        <_>\n          10 13 10 3 2.</_>\n        <_>\n          0 16 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 13 -1.</_>\n        <_>\n          2 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 15 10 -1.</_>\n        <_>\n          5 15 15 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 15 10 -1.</_>\n        <_>\n          0 15 15 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 16 -1.</_>\n        <_>\n          8 0 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 9 4 -1.</_>\n        <_>\n          6 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 2 -1.</_>\n        <_>\n          1 4 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 13 8 -1.</_>\n        <_>\n          6 9 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 11 6 -1.</_>\n        <_>\n          4 2 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 4 -1.</_>\n        <_>\n          10 9 9 2 2.</_>\n        <_>\n          1 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 4 -1.</_>\n        <_>\n          9 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 12 4 -1.</_>\n        <_>\n          7 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 8 -1.</_>\n        <_>\n          5 7 4 4 2.</_>\n        <_>\n          9 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 3 -1.</_>\n        <_>\n          10 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          10 0 10 2 2.</_>\n        <_>\n          0 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 3 -1.</_>\n        <_>\n          3 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 4 7 -1.</_>\n        <_>\n          11 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 7 -1.</_>\n        <_>\n          7 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 2 -1.</_>\n        <_>\n          1 17 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 14 3 -1.</_>\n        <_>\n          0 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 13 3 -1.</_>\n        <_>\n          3 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 10 -1.</_>\n        <_>\n          8 10 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 2 -1.</_>\n        <_>\n          0 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 14 4 -1.</_>\n        <_>\n          12 7 7 2 2.</_>\n        <_>\n          5 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 14 4 -1.</_>\n        <_>\n          1 7 7 2 2.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 9 9 -1.</_>\n        <_>\n          12 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 15 2 -1.</_>\n        <_>\n          0 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 9 18 -1.</_>\n        <_>\n          4 9 9 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 5 -1.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 5 10 -1.</_>\n        <_>\n          9 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 8 -1.</_>\n        <_>\n          3 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 10 -1.</_>\n        <_>\n          12 7 3 5 2.</_>\n        <_>\n          9 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 9 10 -1.</_>\n        <_>\n          4 5 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 16 -1.</_>\n        <_>\n          9 2 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 16 -1.</_>\n        <_>\n          8 2 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 10 -1.</_>\n        <_>\n          5 15 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 10 -1.</_>\n        <_>\n          5 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 8 8 -1.</_>\n        <_>\n          15 2 4 4 2.</_>\n        <_>\n          11 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 10 -1.</_>\n        <_>\n          3 2 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 13 8 -1.</_>\n        <_>\n          4 14 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 4 -1.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 8 -1.</_>\n        <_>\n          1 2 4 4 2.</_>\n        <_>\n          5 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          4 9 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 10 -1.</_>\n        <_>\n          4 5 6 5 2.</_>\n        <_>\n          10 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 8 8 -1.</_>\n        <_>\n          12 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 5 6 -1.</_>\n        <_>\n          3 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 8 -1.</_>\n        <_>\n          9 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 2 -1.</_>\n        <_>\n          3 2 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 18 -1.</_>\n        <_>\n          14 1 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 15 -1.</_>\n        <_>\n          5 1 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 4 -1.</_>\n        <_>\n          0 14 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          0 8 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 8 -1.</_>\n        <_>\n          5 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 10 -1.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 11 -1.</_>\n        <_>\n          8 9 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 20 -1.</_>\n        <_>\n          7 0 6 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 17 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 13 2 -1.</_>\n        <_>\n          5 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 8 -1.</_>\n        <_>\n          5 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 9 6 -1.</_>\n        <_>\n          10 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 6 -1.</_>\n        <_>\n          1 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 2 -1.</_>\n        <_>\n          3 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 3 -1.</_>\n        <_>\n          4 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 17 2 -1.</_>\n        <_>\n          0 11 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 12 -1.</_>\n        <_>\n          11 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 16 4 -1.</_>\n        <_>\n          0 10 8 2 2.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          3 14 7 2 2.</_>\n        <_>\n          10 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 3 -1.</_>\n        <_>\n          6 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 3 -1.</_>\n        <_>\n          7 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 8 -1.</_>\n        <_>\n          10 8 5 4 2.</_>\n        <_>\n          5 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 7 -1.</_>\n        <_>\n          7 2 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 6 -1.</_>\n        <_>\n          12 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 7 -1.</_>\n        <_>\n          3 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 2 -1.</_>\n        <_>\n          4 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 7 9 -1.</_>\n        <_>\n          0 9 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 14 -1.</_>\n        <_>\n          10 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 6 -1.</_>\n        <_>\n          13 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 5 -1.</_>\n        <_>\n          6 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 6 10 -1.</_>\n        <_>\n          15 10 3 5 2.</_>\n        <_>\n          12 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 6 -1.</_>\n        <_>\n          4 5 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 4 -1.</_>\n        <_>\n          0 2 9 2 2.</_>\n        <_>\n          9 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 10 -1.</_>\n        <_>\n          9 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 5 -1.</_>\n        <_>\n          6 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 10 -1.</_>\n        <_>\n          13 10 3 5 2.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 10 -1.</_>\n        <_>\n          4 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 10 -1.</_>\n        <_>\n          10 0 4 5 2.</_>\n        <_>\n          6 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 14 -1.</_>\n        <_>\n          9 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 10 -1.</_>\n        <_>\n          15 1 3 5 2.</_>\n        <_>\n          12 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 9 18 -1.</_>\n        <_>\n          11 10 9 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 10 -1.</_>\n        <_>\n          2 1 3 5 2.</_>\n        <_>\n          5 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 16 4 -1.</_>\n        <_>\n          12 10 8 2 2.</_>\n        <_>\n          4 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 4 -1.</_>\n        <_>\n          0 10 9 2 2.</_>\n        <_>\n          9 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 10 -1.</_>\n        <_>\n          0 4 9 5 2.</_>\n        <_>\n          9 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 2 -1.</_>\n        <_>\n          2 12 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 5 9 -1.</_>\n        <_>\n          4 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 8 -1.</_>\n        <_>\n          12 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 13 2 -1.</_>\n        <_>\n          1 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 8 -1.</_>\n        <_>\n          12 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 8 -1.</_>\n        <_>\n          6 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 8 -1.</_>\n        <_>\n          12 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 13 3 -1.</_>\n        <_>\n          3 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 11 6 -1.</_>\n        <_>\n          5 14 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 8 -1.</_>\n        <_>\n          3 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 16 3 -1.</_>\n        <_>\n          0 2 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 10 -1.</_>\n        <_>\n          8 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 12 -1.</_>\n        <_>\n          7 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 17 2 -1.</_>\n        <_>\n          1 3 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 18 -1.</_>\n        <_>\n          12 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 6 -1.</_>\n        <_>\n          0 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 14 -1.</_>\n        <_>\n          0 6 3 7 2.</_>\n        <_>\n          3 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 6 -1.</_>\n        <_>\n          12 13 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 12 4 -1.</_>\n        <_>\n          6 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 8 -1.</_>\n        <_>\n          5 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 16 4 -1.</_>\n        <_>\n          11 11 8 2 2.</_>\n        <_>\n          3 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 8 -1.</_>\n        <_>\n          16 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 18 -1.</_>\n        <_>\n          7 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 8 -1.</_>\n        <_>\n          16 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 4 -1.</_>\n        <_>\n          8 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 3 -1.</_>\n        <_>\n          4 1 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 8 -1.</_>\n        <_>\n          2 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 12 -1.</_>\n        <_>\n          9 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 6 -1.</_>\n        <_>\n          0 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 10 -1.</_>\n        <_>\n          4 15 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 16 -1.</_>\n        <_>\n          10 4 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 16 -1.</_>\n        <_>\n          8 4 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 2 -1.</_>\n        <_>\n          7 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 2 -1.</_>\n        <_>\n          0 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 5 -1.</_>\n        <_>\n          11 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 9 5 -1.</_>\n        <_>\n          6 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 10 -1.</_>\n        <_>\n          14 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 17 6 -1.</_>\n        <_>\n          1 7 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 10 -1.</_>\n        <_>\n          14 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 14 3 -1.</_>\n        <_>\n          0 18 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 10 -1.</_>\n        <_>\n          14 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 10 -1.</_>\n        <_>\n          3 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 6 13 -1.</_>\n        <_>\n          4 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 15 -1.</_>\n        <_>\n          14 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 15 -1.</_>\n        <_>\n          5 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 15 5 -1.</_>\n        <_>\n          8 2 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 14 -1.</_>\n        <_>\n          5 11 9 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 12 -1.</_>\n        <_>\n          4 6 5 6 2.</_>\n        <_>\n          9 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 10 -1.</_>\n        <_>\n          11 5 6 5 2.</_>\n        <_>\n          5 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 10 -1.</_>\n        <_>\n          3 5 6 5 2.</_>\n        <_>\n          9 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 12 -1.</_>\n        <_>\n          16 0 4 6 2.</_>\n        <_>\n          12 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          10 2 10 2 2.</_>\n        <_>\n          0 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 8 -1.</_>\n        <_>\n          8 6 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 20 -1.</_>\n        <_>\n          11 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 20 -1.</_>\n        <_>\n          8 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          10 15 10 2 2.</_>\n        <_>\n          0 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 13 -1.</_>\n        <_>\n          3 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 7 6 -1.</_>\n        <_>\n          7 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 15 14 -1.</_>\n        <_>\n          0 9 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 8 -1.</_>\n        <_>\n          12 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          4 16 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 4 -1.</_>\n        <_>\n          10 13 9 2 2.</_>\n        <_>\n          1 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 11 4 -1.</_>\n        <_>\n          5 9 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 14 -1.</_>\n        <_>\n          14 6 3 7 2.</_>\n        <_>\n          11 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          3 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 6 12 -1.</_>\n        <_>\n          3 7 3 6 2.</_>\n        <_>\n          6 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 3 -1.</_>\n        <_>\n          7 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 3 -1.</_>\n        <_>\n          8 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 9 -1.</_>\n        <_>\n          3 3 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 4 -1.</_>\n        <_>\n          10 1 7 2 2.</_>\n        <_>\n          3 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 10 10 -1.</_>\n        <_>\n          11 9 5 5 2.</_>\n        <_>\n          6 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 10 10 -1.</_>\n        <_>\n          4 9 5 5 2.</_>\n        <_>\n          9 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 6 -1.</_>\n        <_>\n          5 9 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 7 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 3 -1.</_>\n        <_>\n          3 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 7 10 -1.</_>\n        <_>\n          6 12 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 19 -1.</_>\n        <_>\n          10 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          9 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 13 -1.</_>\n        <_>\n          12 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 8 -1.</_>\n        <_>\n          5 9 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 4 -1.</_>\n        <_>\n          1 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 11 8 -1.</_>\n        <_>\n          7 16 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 13 -1.</_>\n        <_>\n          7 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 15 8 2 2.</_>\n        <_>\n          10 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 6 -1.</_>\n        <_>\n          10 1 9 3 2.</_>\n        <_>\n          1 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 6 -1.</_>\n        <_>\n          3 3 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 7 -1.</_>\n        <_>\n          8 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 13 12 -1.</_>\n        <_>\n          4 6 13 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 13 3 -1.</_>\n        <_>\n          3 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 6 -1.</_>\n        <_>\n          10 10 5 3 2.</_>\n        <_>\n          5 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 12 -1.</_>\n        <_>\n          3 5 6 6 2.</_>\n        <_>\n          9 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 8 -1.</_>\n        <_>\n          1 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          2 2 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 6 6 -1.</_>\n        <_>\n          7 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 4 -1.</_>\n        <_>\n          1 14 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 14 -1.</_>\n        <_>\n          0 8 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 6 -1.</_>\n        <_>\n          11 12 9 3 2.</_>\n        <_>\n          2 15 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 13 -1.</_>\n        <_>\n          7 2 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 7 6 -1.</_>\n        <_>\n          13 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 10 -1.</_>\n        <_>\n          2 5 8 5 2.</_>\n        <_>\n          10 10 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 7 -1.</_>\n        <_>\n          16 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 4 -1.</_>\n        <_>\n          13 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 4 -1.</_>\n        <_>\n          0 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 17 6 -1.</_>\n        <_>\n          2 16 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 5 12 -1.</_>\n        <_>\n          7 11 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          8 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          7 10 3 5 2.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 15 3 -1.</_>\n        <_>\n          0 14 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 5 8 -1.</_>\n        <_>\n          13 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 6 -1.</_>\n        <_>\n          0 12 9 3 2.</_>\n        <_>\n          9 15 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 6 10 -1.</_>\n        <_>\n          15 10 3 5 2.</_>\n        <_>\n          12 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          9 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 3 -1.</_>\n        <_>\n          10 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 3 -1.</_>\n        <_>\n          2 6 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 12 12 -1.</_>\n        <_>\n          8 8 6 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 6 -1.</_>\n        <_>\n          6 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 5 12 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 8 -1.</_>\n        <_>\n          6 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 12 -1.</_>\n        <_>\n          14 0 3 6 2.</_>\n        <_>\n          11 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 12 -1.</_>\n        <_>\n          3 0 3 6 2.</_>\n        <_>\n          6 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          5 9 5 4 2.</_>\n        <_>\n          10 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 13 3 -1.</_>\n        <_>\n          4 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 4 7 -1.</_>\n        <_>\n          14 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 7 -1.</_>\n        <_>\n          4 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 14 6 -1.</_>\n        <_>\n          13 5 7 3 2.</_>\n        <_>\n          6 8 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 16 6 -1.</_>\n        <_>\n          0 6 8 3 2.</_>\n        <_>\n          8 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 9 -1.</_>\n        <_>\n          12 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 9 8 -1.</_>\n        <_>\n          1 10 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 14 -1.</_>\n        <_>\n          9 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 19 2 -1.</_>\n        <_>\n          1 3 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 13 -1.</_>\n        <_>\n          2 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          16 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          2 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 9 -1.</_>\n        <_>\n          0 14 20 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 10 -1.</_>\n        <_>\n          11 3 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 9 -1.</_>\n        <_>\n          7 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 8 -1.</_>\n        <_>\n          10 0 9 4 2.</_>\n        <_>\n          1 4 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 14 2 -1.</_>\n        <_>\n          3 19 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 16 -1.</_>\n        <_>\n          0 4 3 8 2.</_>\n        <_>\n          3 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 13 -1.</_>\n        <_>\n          14 6 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 12 -1.</_>\n        <_>\n          6 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 5 6 -1.</_>\n        <_>\n          11 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 4 -1.</_>\n        <_>\n          6 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 7 -1.</_>\n        <_>\n          8 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 10 -1.</_>\n        <_>\n          12 0 3 5 2.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 4 10 -1.</_>\n        <_>\n          15 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 10 -1.</_>\n        <_>\n          3 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 16 -1.</_>\n        <_>\n          10 0 5 8 2.</_>\n        <_>\n          5 8 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 3 -1.</_>\n        <_>\n          3 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 12 -1.</_>\n        <_>\n          4 10 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 9 6 -1.</_>\n        <_>\n          8 16 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 6 -1.</_>\n        <_>\n          0 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 3 -1.</_>\n        <_>\n          4 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 12 -1.</_>\n        <_>\n          6 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 13 3 -1.</_>\n        <_>\n          4 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 14 -1.</_>\n        <_>\n          11 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 4 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 7 -1.</_>\n        <_>\n          8 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 9 -1.</_>\n        <_>\n          2 14 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 7 -1.</_>\n        <_>\n          2 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 16 4 -1.</_>\n        <_>\n          0 10 8 2 2.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 2 -1.</_>\n        <_>\n          3 2 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 5 9 -1.</_>\n        <_>\n          4 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 16 4 -1.</_>\n        <_>\n          10 14 8 2 2.</_>\n        <_>\n          2 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 8 -1.</_>\n        <_>\n          0 4 19 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 5 -1.</_>\n        <_>\n          10 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 15 -1.</_>\n        <_>\n          7 1 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 5 -1.</_>\n        <_>\n          10 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 8 -1.</_>\n        <_>\n          6 7 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 14 -1.</_>\n        <_>\n          18 3 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 12 -1.</_>\n        <_>\n          4 6 6 6 2.</_>\n        <_>\n          10 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 14 -1.</_>\n        <_>\n          16 6 4 7 2.</_>\n        <_>\n          12 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 14 -1.</_>\n        <_>\n          0 6 4 7 2.</_>\n        <_>\n          4 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 16 -1.</_>\n        <_>\n          2 4 3 8 2.</_>\n        <_>\n          5 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 5 9 -1.</_>\n        <_>\n          14 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 3 -1.</_>\n        <_>\n          3 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 16 -1.</_>\n        <_>\n          5 1 3 8 2.</_>\n        <_>\n          8 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 10 -1.</_>\n        <_>\n          9 7 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 11 -1.</_>\n        <_>\n          7 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 6 -1.</_>\n        <_>\n          10 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 14 -1.</_>\n        <_>\n          1 3 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 6 -1.</_>\n        <_>\n          10 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 8 -1.</_>\n        <_>\n          2 9 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 10 -1.</_>\n        <_>\n          6 7 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 8 12 -1.</_>\n        <_>\n          12 3 4 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 8 12 -1.</_>\n        <_>\n          4 3 4 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 4 -1.</_>\n        <_>\n          11 11 9 2 2.</_>\n        <_>\n          2 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 4 -1.</_>\n        <_>\n          0 11 9 2 2.</_>\n        <_>\n          9 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 9 12 -1.</_>\n        <_>\n          4 7 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 4 -1.</_>\n        <_>\n          6 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 7 6 -1.</_>\n        <_>\n          0 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 13 -1.</_>\n        <_>\n          7 2 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          0 8 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 5 -1.</_>\n        <_>\n          14 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 6 -1.</_>\n        <_>\n          0 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 9 5 -1.</_>\n        <_>\n          9 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 8 8 -1.</_>\n        <_>\n          3 12 4 4 2.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          9 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 9 -1.</_>\n        <_>\n          3 4 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 15 -1.</_>\n        <_>\n          6 6 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 3 -1.</_>\n        <_>\n          6 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 8 -1.</_>\n        <_>\n          6 10 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 2 -1.</_>\n        <_>\n          2 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 16 2 -1.</_>\n        <_>\n          1 4 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 13 3 -1.</_>\n        <_>\n          5 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 17 3 -1.</_>\n        <_>\n          2 9 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 6 -1.</_>\n        <_>\n          1 1 9 3 2.</_>\n        <_>\n          10 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 19 6 -1.</_>\n        <_>\n          1 3 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 6 -1.</_>\n        <_>\n          4 6 6 3 2.</_>\n        <_>\n          10 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 13 2 -1.</_>\n        <_>\n          3 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 8 6 -1.</_>\n        <_>\n          10 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          0 0 9 2 2.</_>\n        <_>\n          9 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 15 5 -1.</_>\n        <_>\n          9 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 15 4 -1.</_>\n        <_>\n          5 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 10 -1.</_>\n        <_>\n          12 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 12 -1.</_>\n        <_>\n          0 6 9 6 2.</_>\n        <_>\n          9 12 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 2 14 -1.</_>\n        <_>\n          16 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 5 6 -1.</_>\n        <_>\n          2 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 19 -1.</_>\n        <_>\n          13 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 9 6 -1.</_>\n        <_>\n          0 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 7 -1.</_>\n        <_>\n          7 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 19 -1.</_>\n        <_>\n          13 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 4 -1.</_>\n        <_>\n          0 15 7 2 2.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 14 6 -1.</_>\n        <_>\n          4 7 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 7 -1.</_>\n        <_>\n          5 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          0 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 5 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 5 -1.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 10 -1.</_>\n        <_>\n          5 8 5 5 2.</_>\n        <_>\n          10 13 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 10 -1.</_>\n        <_>\n          10 5 9 5 2.</_>\n        <_>\n          1 10 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 5 14 -1.</_>\n        <_>\n          4 10 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 6 -1.</_>\n        <_>\n          7 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 3 -1.</_>\n        <_>\n          0 1 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 6 -1.</_>\n        <_>\n          8 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 11 -1.</_>\n        <_>\n          9 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 10 -1.</_>\n        <_>\n          8 3 4 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 4 -1.</_>\n        <_>\n          0 6 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 14 -1.</_>\n        <_>\n          12 4 2 7 2.</_>\n        <_>\n          10 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 14 -1.</_>\n        <_>\n          12 4 2 7 2.</_>\n        <_>\n          10 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 14 -1.</_>\n        <_>\n          6 4 2 7 2.</_>\n        <_>\n          8 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 7 -1.</_>\n        <_>\n          16 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 4 -1.</_>\n        <_>\n          6 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 15 -1.</_>\n        <_>\n          7 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 3 17 -1.</_>\n        <_>\n          13 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 17 -1.</_>\n        <_>\n          6 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 13 -1.</_>\n        <_>\n          10 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 14 -1.</_>\n        <_>\n          10 3 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 4 -1.</_>\n        <_>\n          10 5 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 6 -1.</_>\n        <_>\n          13 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 19 2 -1.</_>\n        <_>\n          0 3 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 11 -1.</_>\n        <_>\n          10 9 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 9 -1.</_>\n        <_>\n          8 0 5 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 2 -1.</_>\n        <_>\n          3 5 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 7 -1.</_>\n        <_>\n          2 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 11 -1.</_>\n        <_>\n          10 9 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 6 7 -1.</_>\n        <_>\n          5 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 3 -1.</_>\n        <_>\n          8 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 8 -1.</_>\n        <_>\n          0 1 4 4 2.</_>\n        <_>\n          4 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 4 -1.</_>\n        <_>\n          9 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 6 -1.</_>\n        <_>\n          6 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 9 -1.</_>\n        <_>\n          4 6 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 10 -1.</_>\n        <_>\n          8 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 17 2 -1.</_>\n        <_>\n          0 4 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 6 -1.</_>\n        <_>\n          12 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 8 -1.</_>\n        <_>\n          5 6 4 4 2.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 6 -1.</_>\n        <_>\n          9 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 5 9 -1.</_>\n        <_>\n          13 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 5 9 -1.</_>\n        <_>\n          2 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 5 -1.</_>\n        <_>\n          14 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 11 -1.</_>\n        <_>\n          8 6 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 5 -1.</_>\n        <_>\n          14 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 6 -1.</_>\n        <_>\n          0 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 14 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 8 -1.</_>\n        <_>\n          12 15 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 7 -1.</_>\n        <_>\n          8 0 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 2 -1.</_>\n        <_>\n          5 16 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 12 10 3 2.</_>\n        <_>\n          10 15 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 12 -1.</_>\n        <_>\n          10 6 5 6 2.</_>\n        <_>\n          5 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 15 4 -1.</_>\n        <_>\n          1 17 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 9 6 -1.</_>\n        <_>\n          10 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 10 6 -1.</_>\n        <_>\n          10 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 12 4 -1.</_>\n        <_>\n          12 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 17 -1.</_>\n        <_>\n          2 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 3 -1.</_>\n        <_>\n          5 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 12 -1.</_>\n        <_>\n          6 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 5 -1.</_>\n        <_>\n          14 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 5 -1.</_>\n        <_>\n          3 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 16 -1.</_>\n        <_>\n          7 3 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 11 10 -1.</_>\n        <_>\n          4 9 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 13 3 -1.</_>\n        <_>\n          6 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 8 10 -1.</_>\n        <_>\n          3 4 4 5 2.</_>\n        <_>\n          7 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 6 -1.</_>\n        <_>\n          1 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 9 -1.</_>\n        <_>\n          0 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 4 14 -1.</_>\n        <_>\n          16 6 2 7 2.</_>\n        <_>\n          14 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 12 -1.</_>\n        <_>\n          2 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 7 -1.</_>\n        <_>\n          6 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 11 -1.</_>\n        <_>\n          5 9 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 12 -1.</_>\n        <_>\n          5 14 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 7 -1.</_>\n        <_>\n          3 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 3 -1.</_>\n        <_>\n          0 8 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 14 -1.</_>\n        <_>\n          0 6 3 7 2.</_>\n        <_>\n          3 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 11 12 -1.</_>\n        <_>\n          2 7 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 8 8 -1.</_>\n        <_>\n          1 5 4 4 2.</_>\n        <_>\n          5 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 16 -1.</_>\n        <_>\n          18 4 2 8 2.</_>\n        <_>\n          16 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 7 -1.</_>\n        <_>\n          8 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 14 -1.</_>\n        <_>\n          11 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 13 -1.</_>\n        <_>\n          11 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 13 -1.</_>\n        <_>\n          8 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 6 -1.</_>\n        <_>\n          10 14 5 3 2.</_>\n        <_>\n          5 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 4 -1.</_>\n        <_>\n          6 10 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 8 6 -1.</_>\n        <_>\n          11 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 8 6 -1.</_>\n        <_>\n          1 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 12 6 -1.</_>\n        <_>\n          2 2 6 3 2.</_>\n        <_>\n          8 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 16 -1.</_>\n        <_>\n          18 4 2 8 2.</_>\n        <_>\n          16 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 5 12 -1.</_>\n        <_>\n          0 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 9 6 -1.</_>\n        <_>\n          10 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          5 2 3 5 2.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 8 -1.</_>\n        <_>\n          8 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 14 -1.</_>\n        <_>\n          11 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 14 -1.</_>\n        <_>\n          7 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 17 -1.</_>\n        <_>\n          8 3 6 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 4 -1.</_>\n        <_>\n          9 6 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 16 -1.</_>\n        <_>\n          18 4 2 8 2.</_>\n        <_>\n          16 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 12 14 -1.</_>\n        <_>\n          6 6 6 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 8 10 -1.</_>\n        <_>\n          12 9 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 8 10 -1.</_>\n        <_>\n          4 9 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 18 -1.</_>\n        <_>\n          13 2 3 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 18 -1.</_>\n        <_>\n          4 2 3 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 9 -1.</_>\n        <_>\n          0 9 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 3 -1.</_>\n        <_>\n          5 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 19 15 -1.</_>\n        <_>\n          0 8 19 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 9 6 -1.</_>\n        <_>\n          10 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 9 6 -1.</_>\n        <_>\n          1 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 16 -1.</_>\n        <_>\n          0 4 2 8 2.</_>\n        <_>\n          2 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 5 6 -1.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 8 -1.</_>\n        <_>\n          0 14 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 7 -1.</_>\n        <_>\n          16 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          2 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 19 -1.</_>\n        <_>\n          14 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 4 -1.</_>\n        <_>\n          4 2 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 6 -1.</_>\n        <_>\n          12 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 7 6 -1.</_>\n        <_>\n          6 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 5 6 -1.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 9 -1.</_>\n        <_>\n          3 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 14 -1.</_>\n        <_>\n          15 5 2 7 2.</_>\n        <_>\n          13 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 10 9 -1.</_>\n        <_>\n          3 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 18 4 -1.</_>\n        <_>\n          2 17 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 8 6 -1.</_>\n        <_>\n          0 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 14 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 8 -1.</_>\n        <_>\n          3 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 3 -1.</_>\n        <_>\n          9 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 9 6 -1.</_>\n        <_>\n          4 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 14 -1.</_>\n        <_>\n          10 0 8 7 2.</_>\n        <_>\n          2 7 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 18 -1.</_>\n        <_>\n          3 9 14 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 10 -1.</_>\n        <_>\n          12 7 3 5 2.</_>\n        <_>\n          9 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 16 -1.</_>\n        <_>\n          3 4 2 8 2.</_>\n        <_>\n          5 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 8 6 -1.</_>\n        <_>\n          12 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 10 -1.</_>\n        <_>\n          7 0 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 15 -1.</_>\n        <_>\n          13 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 15 -1.</_>\n        <_>\n          4 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 5 -1.</_>\n        <_>\n          14 3 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 7 -1.</_>\n        <_>\n          14 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 7 -1.</_>\n        <_>\n          3 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 8 -1.</_>\n        <_>\n          15 6 4 4 2.</_>\n        <_>\n          11 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 13 3 -1.</_>\n        <_>\n          5 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 15 3 -1.</_>\n        <_>\n          0 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 4 12 -1.</_>\n        <_>\n          11 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 13 3 -1.</_>\n        <_>\n          2 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 2 -1.</_>\n        <_>\n          2 2 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 10 -1.</_>\n        <_>\n          5 6 4 5 2.</_>\n        <_>\n          9 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 10 12 -1.</_>\n        <_>\n          13 8 5 6 2.</_>\n        <_>\n          8 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 6 -1.</_>\n        <_>\n          3 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 8 -1.</_>\n        <_>\n          10 5 9 4 2.</_>\n        <_>\n          1 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 7 -1.</_>\n        <_>\n          7 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          7 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 8 14 -1.</_>\n        <_>\n          2 6 4 7 2.</_>\n        <_>\n          6 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 4 9 -1.</_>\n        <_>\n          8 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 13 -1.</_>\n        <_>\n          10 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 13 2 -1.</_>\n        <_>\n          0 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 16 -1.</_>\n        <_>\n          7 11 13 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 9 -1.</_>\n        <_>\n          0 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 7 6 -1.</_>\n        <_>\n          11 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 4 -1.</_>\n        <_>\n          1 1 8 2 2.</_>\n        <_>\n          9 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          10 2 10 3 2.</_>\n        <_>\n          0 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 19 10 -1.</_>\n        <_>\n          0 9 19 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 15 5 -1.</_>\n        <_>\n          9 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 9 8 -1.</_>\n        <_>\n          1 16 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 3 -1.</_>\n        <_>\n          3 6 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 11 7 2 2.</_>\n        <_>\n          10 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          10 11 7 2 2.</_>\n        <_>\n          3 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 6 -1.</_>\n        <_>\n          2 7 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 9 4 -1.</_>\n        <_>\n          11 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 6 -1.</_>\n        <_>\n          1 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 20 4 -1.</_>\n        <_>\n          0 18 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 6 -1.</_>\n        <_>\n          0 14 6 3 2.</_>\n        <_>\n          6 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 15 5 -1.</_>\n        <_>\n          9 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 15 5 -1.</_>\n        <_>\n          6 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 6 9 -1.</_>\n        <_>\n          11 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 8 -1.</_>\n        <_>\n          7 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 13 3 -1.</_>\n        <_>\n          5 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 14 3 -1.</_>\n        <_>\n          5 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 5 -1.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 5 -1.</_>\n        <_>\n          12 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 2 -1.</_>\n        <_>\n          4 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          6 13 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 10 -1.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 20 -1.</_>\n        <_>\n          10 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 6 6 -1.</_>\n        <_>\n          13 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 4 -1.</_>\n        <_>\n          9 2 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 13 -1.</_>\n        <_>\n          7 4 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 12 -1.</_>\n        <_>\n          13 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 12 3 -1.</_>\n        <_>\n          6 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 12 -1.</_>\n        <_>\n          13 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 12 -1.</_>\n        <_>\n          5 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 13 3 -1.</_>\n        <_>\n          7 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 4 -1.</_>\n        <_>\n          0 2 9 2 2.</_>\n        <_>\n          9 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 5 -1.</_>\n        <_>\n          12 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 10 6 -1.</_>\n        <_>\n          9 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 3 -1.</_>\n        <_>\n          3 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 5 -1.</_>\n        <_>\n          12 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 5 -1.</_>\n        <_>\n          4 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 7 4 -1.</_>\n        <_>\n          11 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 9 5 -1.</_>\n        <_>\n          7 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          5 5 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 14 -1.</_>\n        <_>\n          8 11 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 9 6 -1.</_>\n        <_>\n          1 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 12 -1.</_>\n        <_>\n          10 4 10 6 2.</_>\n        <_>\n          0 10 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 7 4 -1.</_>\n        <_>\n          5 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 12 -1.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 2 -1.</_>\n        <_>\n          3 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 13 -1.</_>\n        <_>\n          9 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 16 12 -1.</_>\n        <_>\n          11 4 8 6 2.</_>\n        <_>\n          3 10 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 16 12 -1.</_>\n        <_>\n          1 4 8 6 2.</_>\n        <_>\n          9 10 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          7 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 9 -1.</_>\n        <_>\n          3 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 13 2 -1.</_>\n        <_>\n          3 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 16 4 -1.</_>\n        <_>\n          12 10 8 2 2.</_>\n        <_>\n          4 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 6 -1.</_>\n        <_>\n          12 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 11 -1.</_>\n        <_>\n          2 0 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 9 -1.</_>\n        <_>\n          14 0 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          3 0 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 10 -1.</_>\n        <_>\n          5 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 8 -1.</_>\n        <_>\n          10 5 9 4 2.</_>\n        <_>\n          1 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 10 6 -1.</_>\n        <_>\n          4 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          10 0 4 6 2.</_>\n        <_>\n          6 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          7 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 10 -1.</_>\n        <_>\n          12 4 3 5 2.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 19 3 -1.</_>\n        <_>\n          0 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 3 -1.</_>\n        <_>\n          1 11 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 13 -1.</_>\n        <_>\n          6 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 9 -1.</_>\n        <_>\n          12 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 20 -1.</_>\n        <_>\n          6 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 14 -1.</_>\n        <_>\n          2 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 4 -1.</_>\n        <_>\n          10 1 10 2 2.</_>\n        <_>\n          0 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 12 -1.</_>\n        <_>\n          2 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 6 -1.</_>\n        <_>\n          11 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 8 -1.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 13 3 -1.</_>\n        <_>\n          0 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 14 -1.</_>\n        <_>\n          4 5 2 7 2.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 6 -1.</_>\n        <_>\n          11 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 6 -1.</_>\n        <_>\n          6 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 7 -1.</_>\n        <_>\n          7 0 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 14 9 -1.</_>\n        <_>\n          2 9 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 4 -1.</_>\n        <_>\n          10 14 9 2 2.</_>\n        <_>\n          1 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 6 -1.</_>\n        <_>\n          7 8 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 8 -1.</_>\n        <_>\n          0 1 4 4 2.</_>\n        <_>\n          4 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 8 4 -1.</_>\n        <_>\n          7 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          10 12 7 2 2.</_>\n        <_>\n          3 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 8 5 -1.</_>\n        <_>\n          8 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 7 -1.</_>\n        <_>\n          7 2 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 12 -1.</_>\n        <_>\n          7 7 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 10 -1.</_>\n        <_>\n          4 5 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 6 -1.</_>\n        <_>\n          0 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 2 14 -1.</_>\n        <_>\n          12 2 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 4 -1.</_>\n        <_>\n          0 15 7 2 2.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 14 -1.</_>\n        <_>\n          7 2 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 9 -1.</_>\n        <_>\n          12 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 9 -1.</_>\n        <_>\n          4 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 12 18 -1.</_>\n        <_>\n          11 1 4 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 12 18 -1.</_>\n        <_>\n          5 1 4 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          8 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 6 -1.</_>\n        <_>\n          6 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 13 8 -1.</_>\n        <_>\n          5 9 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 14 2 -1.</_>\n        <_>\n          1 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 9 -1.</_>\n        <_>\n          0 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          7 5 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 12 -1.</_>\n        <_>\n          2 5 6 6 2.</_>\n        <_>\n          8 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 10 -1.</_>\n        <_>\n          5 7 5 5 2.</_>\n        <_>\n          10 12 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 16 3 -1.</_>\n        <_>\n          2 15 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 4 -1.</_>\n        <_>\n          0 13 9 2 2.</_>\n        <_>\n          9 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 2 -1.</_>\n        <_>\n          1 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 16 -1.</_>\n        <_>\n          0 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 5 15 -1.</_>\n        <_>\n          13 10 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 9 6 -1.</_>\n        <_>\n          11 13 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 9 6 -1.</_>\n        <_>\n          0 13 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 4 -1.</_>\n        <_>\n          1 3 9 2 2.</_>\n        <_>\n          10 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 7 -1.</_>\n        <_>\n          7 6 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 19 -1.</_>\n        <_>\n          7 1 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 20 -1.</_>\n        <_>\n          7 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 13 -1.</_>\n        <_>\n          10 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 16 -1.</_>\n        <_>\n          2 8 18 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 15 -1.</_>\n        <_>\n          1 10 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 6 -1.</_>\n        <_>\n          11 13 5 3 2.</_>\n        <_>\n          6 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 14 3 -1.</_>\n        <_>\n          0 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 6 -1.</_>\n        <_>\n          1 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 12 -1.</_>\n        <_>\n          9 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 2 -1.</_>\n        <_>\n          4 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 4 7 -1.</_>\n        <_>\n          16 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 13 -1.</_>\n        <_>\n          2 6 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 3 -1.</_>\n        <_>\n          7 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 16 4 -1.</_>\n        <_>\n          0 1 8 2 2.</_>\n        <_>\n          8 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 4 -1.</_>\n        <_>\n          3 2 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 12 6 -1.</_>\n        <_>\n          3 13 6 3 2.</_>\n        <_>\n          9 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 9 -1.</_>\n        <_>\n          6 11 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 9 -1.</_>\n        <_>\n          0 11 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 10 7 -1.</_>\n        <_>\n          10 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 10 7 -1.</_>\n        <_>\n          5 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 17 6 -1.</_>\n        <_>\n          0 15 17 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 4 -1.</_>\n        <_>\n          5 16 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 13 3 -1.</_>\n        <_>\n          1 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 9 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 18 -1.</_>\n        <_>\n          1 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 7 -1.</_>\n        <_>\n          14 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 7 -1.</_>\n        <_>\n          3 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 8 14 -1.</_>\n        <_>\n          8 9 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 8 14 -1.</_>\n        <_>\n          4 9 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 3 -1.</_>\n        <_>\n          7 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 9 -1.</_>\n        <_>\n          12 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 9 12 -1.</_>\n        <_>\n          3 4 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 10 -1.</_>\n        <_>\n          13 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 10 8 -1.</_>\n        <_>\n          3 12 5 4 2.</_>\n        <_>\n          8 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 7 4 -1.</_>\n        <_>\n          12 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 12 6 -1.</_>\n        <_>\n          2 6 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 5 6 -1.</_>\n        <_>\n          13 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 5 6 -1.</_>\n        <_>\n          2 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 7 4 -1.</_>\n        <_>\n          12 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 10 -1.</_>\n        <_>\n          5 10 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 7 4 -1.</_>\n        <_>\n          12 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 2 -1.</_>\n        <_>\n          0 1 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 8 -1.</_>\n        <_>\n          13 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 8 -1.</_>\n        <_>\n          5 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 12 -1.</_>\n        <_>\n          5 7 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 7 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 6 -1.</_>\n        <_>\n          10 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 6 -1.</_>\n        <_>\n          0 9 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          10 11 5 3 2.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 20 3 -1.</_>\n        <_>\n          0 9 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 15 5 -1.</_>\n        <_>\n          7 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 6 -1.</_>\n        <_>\n          2 9 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 5 -1.</_>\n        <_>\n          8 12 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 16 4 -1.</_>\n        <_>\n          2 16 8 2 2.</_>\n        <_>\n          10 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 7 -1.</_>\n        <_>\n          2 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 20 -1.</_>\n        <_>\n          9 0 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 13 -1.</_>\n        <_>\n          10 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 9 -1.</_>\n        <_>\n          5 4 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 8 -1.</_>\n        <_>\n          6 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 6 -1.</_>\n        <_>\n          13 2 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 14 -1.</_>\n        <_>\n          12 6 5 7 2.</_>\n        <_>\n          7 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 3 -1.</_>\n        <_>\n          1 2 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 7 4 -1.</_>\n        <_>\n          2 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 9 6 -1.</_>\n        <_>\n          7 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 5 6 -1.</_>\n        <_>\n          11 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 14 -1.</_>\n        <_>\n          3 6 5 7 2.</_>\n        <_>\n          8 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 12 -1.</_>\n        <_>\n          12 4 6 6 2.</_>\n        <_>\n          6 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 5 6 -1.</_>\n        <_>\n          4 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 14 5 -1.</_>\n        <_>\n          5 1 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 16 -1.</_>\n        <_>\n          9 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 4 -1.</_>\n        <_>\n          13 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 5 6 -1.</_>\n        <_>\n          3 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 4 -1.</_>\n        <_>\n          5 3 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 10 -1.</_>\n        <_>\n          15 10 5 5 2.</_>\n        <_>\n          10 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 14 -1.</_>\n        <_>\n          4 6 4 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 12 -1.</_>\n        <_>\n          10 3 6 6 2.</_>\n        <_>\n          4 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 13 -1.</_>\n        <_>\n          10 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 10 5 -1.</_>\n        <_>\n          9 1 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 6 -1.</_>\n        <_>\n          3 2 6 3 2.</_>\n        <_>\n          9 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 4 -1.</_>\n        <_>\n          11 2 9 2 2.</_>\n        <_>\n          2 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 11 6 -1.</_>\n        <_>\n          3 4 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 12 -1.</_>\n        <_>\n          16 0 4 6 2.</_>\n        <_>\n          12 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          10 1 3 5 2.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 13 3 -1.</_>\n        <_>\n          0 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 3 -1.</_>\n        <_>\n          4 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 7 6 -1.</_>\n        <_>\n          3 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 7 6 -1.</_>\n        <_>\n          8 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 7 -1.</_>\n        <_>\n          6 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 4 -1.</_>\n        <_>\n          10 1 10 2 2.</_>\n        <_>\n          0 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 3 -1.</_>\n        <_>\n          0 11 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 2 14 -1.</_>\n        <_>\n          12 1 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 10 -1.</_>\n        <_>\n          7 7 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 14 -1.</_>\n        <_>\n          15 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 5 -1.</_>\n        <_>\n          8 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 14 -1.</_>\n        <_>\n          15 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 14 -1.</_>\n        <_>\n          4 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 20 2 -1.</_>\n        <_>\n          0 17 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 14 -1.</_>\n        <_>\n          8 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 13 -1.</_>\n        <_>\n          10 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 5 9 -1.</_>\n        <_>\n          9 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 9 6 -1.</_>\n        <_>\n          5 13 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 7 6 -1.</_>\n        <_>\n          11 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 8 12 -1.</_>\n        <_>\n          1 8 4 6 2.</_>\n        <_>\n          5 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 5 -1.</_>\n        <_>\n          10 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 15 5 -1.</_>\n        <_>\n          5 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 6 -1.</_>\n        <_>\n          12 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 10 -1.</_>\n        <_>\n          8 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 19 3 -1.</_>\n        <_>\n          1 7 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 9 -1.</_>\n        <_>\n          7 11 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 8 8 -1.</_>\n        <_>\n          15 2 4 4 2.</_>\n        <_>\n          11 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          9 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 13 -1.</_>\n        <_>\n          10 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 18 -1.</_>\n        <_>\n          3 8 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 10 -1.</_>\n        <_>\n          10 5 9 5 2.</_>\n        <_>\n          1 10 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 13 -1.</_>\n        <_>\n          7 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 6 -1.</_>\n        <_>\n          11 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 7 6 -1.</_>\n        <_>\n          4 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 3 -1.</_>\n        <_>\n          5 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 19 4 -1.</_>\n        <_>\n          1 6 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 5 -1.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 5 6 -1.</_>\n        <_>\n          11 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 12 -1.</_>\n        <_>\n          7 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 19 -1.</_>\n        <_>\n          10 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 7 6 -1.</_>\n        <_>\n          2 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 10 12 -1.</_>\n        <_>\n          10 11 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          5 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 8 12 -1.</_>\n        <_>\n          11 5 4 6 2.</_>\n        <_>\n          7 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 12 -1.</_>\n        <_>\n          5 5 4 6 2.</_>\n        <_>\n          9 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 8 -1.</_>\n        <_>\n          16 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          2 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 4 -1.</_>\n        <_>\n          7 6 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 13 2 -1.</_>\n        <_>\n          3 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 2 -1.</_>\n        <_>\n          3 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 13 6 -1.</_>\n        <_>\n          2 2 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 13 2 -1.</_>\n        <_>\n          3 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 14 -1.</_>\n        <_>\n          14 0 2 7 2.</_>\n        <_>\n          12 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 12 -1.</_>\n        <_>\n          4 0 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 15 3 -1.</_>\n        <_>\n          5 2 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 6 -1.</_>\n        <_>\n          1 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 10 -1.</_>\n        <_>\n          10 5 10 5 2.</_>\n        <_>\n          0 10 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 7 -1.</_>\n        <_>\n          6 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 14 6 -1.</_>\n        <_>\n          11 6 7 3 2.</_>\n        <_>\n          4 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 8 -1.</_>\n        <_>\n          5 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          14 10 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 13 2 -1.</_>\n        <_>\n          2 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 10 6 -1.</_>\n        <_>\n          1 6 5 3 2.</_>\n        <_>\n          6 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          14 10 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          3 10 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 17 -1.</_>\n        <_>\n          2 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 16 -1.</_>\n        <_>\n          2 4 3 8 2.</_>\n        <_>\n          5 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 8 -1.</_>\n        <_>\n          10 6 5 4 2.</_>\n        <_>\n          5 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 8 -1.</_>\n        <_>\n          4 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 5 -1.</_>\n        <_>\n          8 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 18 -1.</_>\n        <_>\n          11 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 5 -1.</_>\n        <_>\n          10 5 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 4 -1.</_>\n        <_>\n          4 6 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 16 4 -1.</_>\n        <_>\n          11 15 8 2 2.</_>\n        <_>\n          3 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 16 4 -1.</_>\n        <_>\n          1 15 8 2 2.</_>\n        <_>\n          9 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 9 -1.</_>\n        <_>\n          6 14 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 13 3 -1.</_>\n        <_>\n          4 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 5 9 -1.</_>\n        <_>\n          0 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 4 -1.</_>\n        <_>\n          12 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 8 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 6 -1.</_>\n        <_>\n          5 3 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 9 -1.</_>\n        <_>\n          3 9 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 10 -1.</_>\n        <_>\n          9 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 9 -1.</_>\n        <_>\n          5 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 17 -1.</_>\n        <_>\n          2 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 16 -1.</_>\n        <_>\n          12 0 4 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 16 -1.</_>\n        <_>\n          4 0 4 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 6 -1.</_>\n        <_>\n          5 9 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 14 -1.</_>\n        <_>\n          8 4 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          18 5 2 7 2.</_>\n        <_>\n          16 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 8 -1.</_>\n        <_>\n          6 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 3 -1.</_>\n        <_>\n          5 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 10 6 -1.</_>\n        <_>\n          8 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 19 -1.</_>\n        <_>\n          14 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 19 -1.</_>\n        <_>\n          5 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 9 -1.</_>\n        <_>\n          7 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 15 -1.</_>\n        <_>\n          6 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 7 -1.</_>\n        <_>\n          16 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 12 -1.</_>\n        <_>\n          2 4 7 6 2.</_>\n        <_>\n          9 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 12 5 -1.</_>\n        <_>\n          4 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 14 -1.</_>\n        <_>\n          0 6 2 7 2.</_>\n        <_>\n          2 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 8 6 -1.</_>\n        <_>\n          11 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 5 12 -1.</_>\n        <_>\n          7 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 15 12 -1.</_>\n        <_>\n          0 5 15 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 10 -1.</_>\n        <_>\n          7 8 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 16 -1.</_>\n        <_>\n          6 4 2 8 2.</_>\n        <_>\n          8 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 4 -1.</_>\n        <_>\n          7 4 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 12 6 -1.</_>\n        <_>\n          0 3 6 3 2.</_>\n        <_>\n          6 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 8 10 -1.</_>\n        <_>\n          16 1 4 5 2.</_>\n        <_>\n          12 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 10 -1.</_>\n        <_>\n          0 1 4 5 2.</_>\n        <_>\n          4 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 8 -1.</_>\n        <_>\n          10 12 4 4 2.</_>\n        <_>\n          6 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 8 12 -1.</_>\n        <_>\n          5 8 4 6 2.</_>\n        <_>\n          9 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 6 -1.</_>\n        <_>\n          3 11 7 3 2.</_>\n        <_>\n          10 14 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 12 -1.</_>\n        <_>\n          11 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 5 14 -1.</_>\n        <_>\n          7 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 12 -1.</_>\n        <_>\n          7 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 7 -1.</_>\n        <_>\n          4 11 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 6 -1.</_>\n        <_>\n          11 6 6 3 2.</_>\n        <_>\n          5 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 11 7 2 2.</_>\n        <_>\n          10 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 10 -1.</_>\n        <_>\n          4 0 6 5 2.</_>\n        <_>\n          10 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 15 -1.</_>\n        <_>\n          8 5 6 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 14 3 -1.</_>\n        <_>\n          1 13 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 16 3 -1.</_>\n        <_>\n          10 17 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 9 -1.</_>\n        <_>\n          9 8 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 12 -1.</_>\n        <_>\n          10 3 6 6 2.</_>\n        <_>\n          4 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 20 -1.</_>\n        <_>\n          3 0 3 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 2 -1.</_>\n        <_>\n          3 14 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 4 -1.</_>\n        <_>\n          13 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 12 -1.</_>\n        <_>\n          15 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 12 -1.</_>\n        <_>\n          3 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 12 -1.</_>\n        <_>\n          4 12 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 12 -1.</_>\n        <_>\n          3 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 13 -1.</_>\n        <_>\n          14 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 13 -1.</_>\n        <_>\n          5 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 3 14 -1.</_>\n        <_>\n          17 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 3 14 -1.</_>\n        <_>\n          2 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 14 3 -1.</_>\n        <_>\n          6 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 14 3 -1.</_>\n        <_>\n          0 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 14 6 -1.</_>\n        <_>\n          11 6 7 3 2.</_>\n        <_>\n          4 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 14 6 -1.</_>\n        <_>\n          2 6 7 3 2.</_>\n        <_>\n          9 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 16 -1.</_>\n        <_>\n          3 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 12 -1.</_>\n        <_>\n          10 7 7 6 2.</_>\n        <_>\n          3 13 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 13 6 -1.</_>\n        <_>\n          2 5 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 6 -1.</_>\n        <_>\n          14 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 6 -1.</_>\n        <_>\n          0 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 14 -1.</_>\n        <_>\n          4 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          7 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 13 2 -1.</_>\n        <_>\n          4 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 6 -1.</_>\n        <_>\n          2 1 8 3 2.</_>\n        <_>\n          10 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 9 -1.</_>\n        <_>\n          9 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 8 8 -1.</_>\n        <_>\n          2 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 14 2 -1.</_>\n        <_>\n          1 16 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 10 -1.</_>\n        <_>\n          5 5 3 5 2.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 4 -1.</_>\n        <_>\n          5 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 20 -1.</_>\n        <_>\n          7 0 6 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 9 7 -1.</_>\n        <_>\n          3 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 10 -1.</_>\n        <_>\n          0 8 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 12 -1.</_>\n        <_>\n          9 0 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 14 4 -1.</_>\n        <_>\n          3 18 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          5 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 3 -1.</_>\n        <_>\n          6 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 6 -1.</_>\n        <_>\n          0 2 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 2 -1.</_>\n        <_>\n          2 4 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 12 -1.</_>\n        <_>\n          7 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 4 10 -1.</_>\n        <_>\n          12 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 2 -1.</_>\n        <_>\n          0 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 4 -1.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 4 -1.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          10 11 7 2 2.</_>\n        <_>\n          3 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          3 10 7 2 2.</_>\n        <_>\n          10 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 3 -1.</_>\n        <_>\n          6 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 13 -1.</_>\n        <_>\n          10 3 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 4 -1.</_>\n        <_>\n          12 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 4 -1.</_>\n        <_>\n          1 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 13 3 -1.</_>\n        <_>\n          1 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 9 -1.</_>\n        <_>\n          4 0 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          0 3 10 2 2.</_>\n        <_>\n          10 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 6 -1.</_>\n        <_>\n          12 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 16 -1.</_>\n        <_>\n          7 1 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 19 -1.</_>\n        <_>\n          10 0 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 18 -1.</_>\n        <_>\n          9 0 7 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 5 9 -1.</_>\n        <_>\n          9 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 19 -1.</_>\n        <_>\n          5 0 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 14 -1.</_>\n        <_>\n          15 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 14 -1.</_>\n        <_>\n          4 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 13 3 -1.</_>\n        <_>\n          0 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 9 -1.</_>\n        <_>\n          12 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 6 -1.</_>\n        <_>\n          0 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 8 -1.</_>\n        <_>\n          2 5 8 4 2.</_>\n        <_>\n          10 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 8 -1.</_>\n        <_>\n          16 3 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 10 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 8 -1.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 7 -1.</_>\n        <_>\n          2 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 6 -1.</_>\n        <_>\n          5 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 8 -1.</_>\n        <_>\n          14 4 4 4 2.</_>\n        <_>\n          10 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 8 -1.</_>\n        <_>\n          14 4 4 4 2.</_>\n        <_>\n          10 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 8 8 -1.</_>\n        <_>\n          2 4 4 4 2.</_>\n        <_>\n          6 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 20 -1.</_>\n        <_>\n          13 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 7 6 -1.</_>\n        <_>\n          3 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 4 -1.</_>\n        <_>\n          8 2 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 10 -1.</_>\n        <_>\n          6 0 3 5 2.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 3 -1.</_>\n        <_>\n          4 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 16 3 -1.</_>\n        <_>\n          8 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 20 -1.</_>\n        <_>\n          13 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 3 -1.</_>\n        <_>\n          2 2 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 20 -1.</_>\n        <_>\n          13 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 20 -1.</_>\n        <_>\n          6 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 8 -1.</_>\n        <_>\n          10 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 8 -1.</_>\n        <_>\n          5 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 7 -1.</_>\n        <_>\n          13 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 7 -1.</_>\n        <_>\n          5 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 13 -1.</_>\n        <_>\n          9 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 10 -1.</_>\n        <_>\n          3 1 3 5 2.</_>\n        <_>\n          6 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 9 12 -1.</_>\n        <_>\n          4 12 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 3 -1.</_>\n        <_>\n          1 8 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 13 2 -1.</_>\n        <_>\n          6 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 16 -1.</_>\n        <_>\n          6 11 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 9 -1.</_>\n        <_>\n          10 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 9 -1.</_>\n        <_>\n          8 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 3 13 -1.</_>\n        <_>\n          11 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 13 -1.</_>\n        <_>\n          8 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 6 -1.</_>\n        <_>\n          0 14 6 3 2.</_>\n        <_>\n          6 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 5 6 -1.</_>\n        <_>\n          14 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 5 6 -1.</_>\n        <_>\n          1 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 6 -1.</_>\n        <_>\n          0 10 10 3 2.</_>\n        <_>\n          10 13 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          10 5 2 7 2.</_>\n        <_>\n          8 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 8 -1.</_>\n        <_>\n          6 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 5 9 -1.</_>\n        <_>\n          13 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 12 -1.</_>\n        <_>\n          5 0 5 6 2.</_>\n        <_>\n          10 6 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 7 -1.</_>\n        <_>\n          12 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 5 9 -1.</_>\n        <_>\n          2 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          0 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 18 -1.</_>\n        <_>\n          3 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 6 -1.</_>\n        <_>\n          15 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 6 -1.</_>\n        <_>\n          2 4 7 3 2.</_>\n        <_>\n          9 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 12 -1.</_>\n        <_>\n          3 9 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 17 15 -1.</_>\n        <_>\n          2 9 17 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 12 -1.</_>\n        <_>\n          3 4 13 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          2 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 6 -1.</_>\n        <_>\n          8 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 9 -1.</_>\n        <_>\n          6 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          12 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 15 4 -1.</_>\n        <_>\n          6 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 12 9 -1.</_>\n        <_>\n          5 4 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 4 12 -1.</_>\n        <_>\n          6 13 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 10 -1.</_>\n        <_>\n          12 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 9 4 -1.</_>\n        <_>\n          3 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 5 9 -1.</_>\n        <_>\n          4 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 5 -1.</_>\n        <_>\n          7 7 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 8 -1.</_>\n        <_>\n          8 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 8 -1.</_>\n        <_>\n          12 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 2 -1.</_>\n        <_>\n          7 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 5 -1.</_>\n        <_>\n          6 4 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 11 -1.</_>\n        <_>\n          12 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 11 -1.</_>\n        <_>\n          5 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 9 10 -1.</_>\n        <_>\n          12 9 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 10 -1.</_>\n        <_>\n          5 9 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 9 -1.</_>\n        <_>\n          9 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 15 -1.</_>\n        <_>\n          7 0 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 10 6 -1.</_>\n        <_>\n          11 12 5 3 2.</_>\n        <_>\n          6 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 15 3 -1.</_>\n        <_>\n          5 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 10 -1.</_>\n        <_>\n          14 10 3 5 2.</_>\n        <_>\n          11 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 10 6 -1.</_>\n        <_>\n          4 12 5 3 2.</_>\n        <_>\n          9 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 5 -1.</_>\n        <_>\n          6 0 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 6 -1.</_>\n        <_>\n          2 3 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 9 6 -1.</_>\n        <_>\n          2 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 7 -1.</_>\n        <_>\n          9 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 5 6 -1.</_>\n        <_>\n          4 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 6 10 -1.</_>\n        <_>\n          15 2 3 5 2.</_>\n        <_>\n          12 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 8 -1.</_>\n        <_>\n          4 10 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 6 10 -1.</_>\n        <_>\n          2 2 3 5 2.</_>\n        <_>\n          5 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 2 -1.</_>\n        <_>\n          6 16 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 5 -1.</_>\n        <_>\n          9 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 8 6 -1.</_>\n        <_>\n          1 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 18 2 -1.</_>\n        <_>\n          2 9 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 2 -1.</_>\n        <_>\n          2 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 7 -1.</_>\n        <_>\n          11 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          8 14 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 7 -1.</_>\n        <_>\n          11 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 14 -1.</_>\n        <_>\n          9 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 15 3 -1.</_>\n        <_>\n          2 18 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 7 -1.</_>\n        <_>\n          16 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 4 7 -1.</_>\n        <_>\n          7 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 7 -1.</_>\n        <_>\n          16 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 2 -1.</_>\n        <_>\n          4 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 14 -1.</_>\n        <_>\n          2 2 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 13 -1.</_>\n        <_>\n          15 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 13 -1.</_>\n        <_>\n          3 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          10 3 10 2 2.</_>\n        <_>\n          0 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 11 -1.</_>\n        <_>\n          6 7 6 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 4 12 -1.</_>\n        <_>\n          10 7 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 11 4 -1.</_>\n        <_>\n          4 9 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 6 -1.</_>\n        <_>\n          10 7 5 3 2.</_>\n        <_>\n          5 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 10 -1.</_>\n        <_>\n          0 5 9 5 2.</_>\n        <_>\n          9 10 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          10 0 10 2 2.</_>\n        <_>\n          0 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 3 -1.</_>\n        <_>\n          2 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 2 -1.</_>\n        <_>\n          2 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 9 14 -1.</_>\n        <_>\n          13 6 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 9 14 -1.</_>\n        <_>\n          4 6 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 5 10 -1.</_>\n        <_>\n          8 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 8 -1.</_>\n        <_>\n          0 7 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 14 2 -1.</_>\n        <_>\n          4 10 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 6 -1.</_>\n        <_>\n          3 15 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 9 -1.</_>\n        <_>\n          6 14 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 9 -1.</_>\n        <_>\n          1 14 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 4 -1.</_>\n        <_>\n          7 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          6 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 10 -1.</_>\n        <_>\n          9 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 2 -1.</_>\n        <_>\n          0 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          11 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 12 -1.</_>\n        <_>\n          5 7 3 6 2.</_>\n        <_>\n          8 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 3 -1.</_>\n        <_>\n          0 15 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 9 5 -1.</_>\n        <_>\n          6 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          7 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 19 -1.</_>\n        <_>\n          10 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 5 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 10 18 -1.</_>\n        <_>\n          14 2 5 9 2.</_>\n        <_>\n          9 11 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 8 4 -1.</_>\n        <_>\n          6 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 8 -1.</_>\n        <_>\n          9 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 19 -1.</_>\n        <_>\n          8 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 5 -1.</_>\n        <_>\n          3 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 18 -1.</_>\n        <_>\n          18 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 18 -1.</_>\n        <_>\n          18 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 18 -1.</_>\n        <_>\n          1 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 7 15 -1.</_>\n        <_>\n          7 9 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 6 -1.</_>\n        <_>\n          7 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 16 -1.</_>\n        <_>\n          18 0 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 14 -1.</_>\n        <_>\n          1 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 5 -1.</_>\n        <_>\n          14 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 5 -1.</_>\n        <_>\n          3 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 4 -1.</_>\n        <_>\n          10 13 9 2 2.</_>\n        <_>\n          1 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 5 9 -1.</_>\n        <_>\n          7 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 13 -1.</_>\n        <_>\n          8 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 10 -1.</_>\n        <_>\n          5 0 3 5 2.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 8 -1.</_>\n        <_>\n          3 4 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 5 10 -1.</_>\n        <_>\n          8 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 15 2 -1.</_>\n        <_>\n          2 19 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 7 -1.</_>\n        <_>\n          10 7 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 4 -1.</_>\n        <_>\n          0 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 14 4 -1.</_>\n        <_>\n          3 16 7 2 2.</_>\n        <_>\n          10 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 12 -1.</_>\n        <_>\n          9 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 4 -1.</_>\n        <_>\n          6 8 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 10 -1.</_>\n        <_>\n          16 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 10 -1.</_>\n        <_>\n          6 9 4 5 2.</_>\n        <_>\n          10 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 10 -1.</_>\n        <_>\n          16 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 5 6 -1.</_>\n        <_>\n          1 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 6 -1.</_>\n        <_>\n          4 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 7 -1.</_>\n        <_>\n          9 7 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 11 -1.</_>\n        <_>\n          7 6 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 7 -1.</_>\n        <_>\n          10 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 7 -1.</_>\n        <_>\n          8 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 15 -1.</_>\n        <_>\n          11 2 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 10 -1.</_>\n        <_>\n          2 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 6 -1.</_>\n        <_>\n          15 0 5 3 2.</_>\n        <_>\n          10 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 3 -1.</_>\n        <_>\n          1 1 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 6 -1.</_>\n        <_>\n          0 0 5 3 2.</_>\n        <_>\n          5 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 6 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          9 6 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 18 -1.</_>\n        <_>\n          12 0 3 9 2.</_>\n        <_>\n          9 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 14 2 -1.</_>\n        <_>\n          10 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 12 -1.</_>\n        <_>\n          6 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 6 -1.</_>\n        <_>\n          3 1 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 7 4 -1.</_>\n        <_>\n          9 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 15 3 -1.</_>\n        <_>\n          0 10 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 8 -1.</_>\n        <_>\n          11 0 4 4 2.</_>\n        <_>\n          7 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          0 3 10 2 2.</_>\n        <_>\n          10 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 7 4 -1.</_>\n        <_>\n          4 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 12 6 -1.</_>\n        <_>\n          2 11 6 3 2.</_>\n        <_>\n          8 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 10 -1.</_>\n        <_>\n          0 5 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 6 -1.</_>\n        <_>\n          12 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 6 -1.</_>\n        <_>\n          12 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 6 -1.</_>\n        <_>\n          0 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 12 -1.</_>\n        <_>\n          16 0 4 6 2.</_>\n        <_>\n          12 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 14 -1.</_>\n        <_>\n          7 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 9 -1.</_>\n        <_>\n          7 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 13 3 -1.</_>\n        <_>\n          5 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 8 8 -1.</_>\n        <_>\n          2 4 4 4 2.</_>\n        <_>\n          6 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 8 16 -1.</_>\n        <_>\n          15 4 4 8 2.</_>\n        <_>\n          11 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 8 16 -1.</_>\n        <_>\n          1 4 4 8 2.</_>\n        <_>\n          5 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 8 -1.</_>\n        <_>\n          4 4 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 6 -1.</_>\n        <_>\n          5 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 2 -1.</_>\n        <_>\n          5 3 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 10 6 -1.</_>\n        <_>\n          1 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 7 6 -1.</_>\n        <_>\n          0 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 8 -1.</_>\n        <_>\n          1 1 9 4 2.</_>\n        <_>\n          10 5 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 4 -1.</_>\n        <_>\n          0 15 7 2 2.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 18 -1.</_>\n        <_>\n          0 2 2 9 2.</_>\n        <_>\n          2 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 11 -1.</_>\n        <_>\n          10 6 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          10 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 7 -1.</_>\n        <_>\n          9 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 8 4 -1.</_>\n        <_>\n          12 2 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 6 -1.</_>\n        <_>\n          13 1 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 7 -1.</_>\n        <_>\n          3 3 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 8 -1.</_>\n        <_>\n          13 12 5 4 2.</_>\n        <_>\n          8 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 10 -1.</_>\n        <_>\n          2 9 6 5 2.</_>\n        <_>\n          8 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 6 -1.</_>\n        <_>\n          1 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          0 1 9 2 2.</_>\n        <_>\n          9 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 8 -1.</_>\n        <_>\n          12 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 8 -1.</_>\n        <_>\n          6 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 10 -1.</_>\n        <_>\n          12 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 16 -1.</_>\n        <_>\n          7 9 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 5 8 -1.</_>\n        <_>\n          14 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 10 -1.</_>\n        <_>\n          5 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          3 14 7 2 2.</_>\n        <_>\n          10 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 13 -1.</_>\n        <_>\n          10 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 5 8 -1.</_>\n        <_>\n          14 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 5 8 -1.</_>\n        <_>\n          1 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 6 6 -1.</_>\n        <_>\n          14 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 3 -1.</_>\n        <_>\n          0 1 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 8 8 -1.</_>\n        <_>\n          14 12 4 4 2.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 8 8 -1.</_>\n        <_>\n          2 12 4 4 2.</_>\n        <_>\n          6 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 3 -1.</_>\n        <_>\n          3 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 13 -1.</_>\n        <_>\n          7 2 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 17 3 -1.</_>\n        <_>\n          3 10 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 3 -1.</_>\n        <_>\n          2 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 13 -1.</_>\n        <_>\n          14 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 9 6 -1.</_>\n        <_>\n          12 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          10 10 7 2 2.</_>\n        <_>\n          3 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 6 -1.</_>\n        <_>\n          1 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 5 -1.</_>\n        <_>\n          9 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 6 -1.</_>\n        <_>\n          11 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 13 6 -1.</_>\n        <_>\n          4 4 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          0 5 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 15 8 -1.</_>\n        <_>\n          7 6 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 4 -1.</_>\n        <_>\n          8 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          10 10 4 4 2.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 20 -1.</_>\n        <_>\n          8 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          10 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 2 -1.</_>\n        <_>\n          3 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 3 -1.</_>\n        <_>\n          7 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 14 -1.</_>\n        <_>\n          4 6 4 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 9 5 -1.</_>\n        <_>\n          12 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 9 5 -1.</_>\n        <_>\n          5 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 7 -1.</_>\n        <_>\n          10 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 7 -1.</_>\n        <_>\n          8 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 6 8 -1.</_>\n        <_>\n          12 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 8 8 -1.</_>\n        <_>\n          15 12 4 4 2.</_>\n        <_>\n          11 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 8 8 -1.</_>\n        <_>\n          1 12 4 4 2.</_>\n        <_>\n          5 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 6 5 -1.</_>\n        <_>\n          12 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 6 5 -1.</_>\n        <_>\n          5 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          10 5 6 3 2.</_>\n        <_>\n          4 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 10 3 -1.</_>\n        <_>\n          7 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 8 8 -1.</_>\n        <_>\n          14 3 4 4 2.</_>\n        <_>\n          10 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 8 8 -1.</_>\n        <_>\n          2 3 4 4 2.</_>\n        <_>\n          6 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 3 -1.</_>\n        <_>\n          8 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 8 -1.</_>\n        <_>\n          4 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 9 -1.</_>\n        <_>\n          10 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 15 7 -1.</_>\n        <_>\n          5 13 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 14 -1.</_>\n        <_>\n          15 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 3 -1.</_>\n        <_>\n          6 2 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          12 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 16 10 -1.</_>\n        <_>\n          0 9 16 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 3 -1.</_>\n        <_>\n          6 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 13 2 -1.</_>\n        <_>\n          2 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 11 8 -1.</_>\n        <_>\n          5 4 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 3 10 -1.</_>\n        <_>\n          1 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 4 7 -1.</_>\n        <_>\n          14 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 8 6 -1.</_>\n        <_>\n          1 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 4 7 -1.</_>\n        <_>\n          14 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 7 -1.</_>\n        <_>\n          4 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 6 -1.</_>\n        <_>\n          1 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 7 -1.</_>\n        <_>\n          12 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 7 -1.</_>\n        <_>\n          6 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          4 17 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 4 -1.</_>\n        <_>\n          6 3 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 3 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 11 -1.</_>\n        <_>\n          12 5 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          10 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 4 -1.</_>\n        <_>\n          4 10 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 3 10 -1.</_>\n        <_>\n          11 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 12 -1.</_>\n        <_>\n          12 4 6 6 2.</_>\n        <_>\n          6 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 12 12 -1.</_>\n        <_>\n          2 4 6 6 2.</_>\n        <_>\n          8 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 8 -1.</_>\n        <_>\n          10 5 7 4 2.</_>\n        <_>\n          3 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 7 -1.</_>\n        <_>\n          2 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 16 6 -1.</_>\n        <_>\n          2 15 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 3 13 -1.</_>\n        <_>\n          17 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 3 13 -1.</_>\n        <_>\n          2 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 5 9 -1.</_>\n        <_>\n          11 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 13 3 -1.</_>\n        <_>\n          7 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 5 9 -1.</_>\n        <_>\n          11 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 5 9 -1.</_>\n        <_>\n          4 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          1 2 9 2 2.</_>\n        <_>\n          10 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 6 -1.</_>\n        <_>\n          14 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 6 -1.</_>\n        <_>\n          0 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 6 -1.</_>\n        <_>\n          4 3 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 3 -1.</_>\n        <_>\n          2 8 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 2 -1.</_>\n        <_>\n          3 8 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 8 -1.</_>\n        <_>\n          11 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 7 -1.</_>\n        <_>\n          8 0 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 7 -1.</_>\n        <_>\n          11 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 18 -1.</_>\n        <_>\n          7 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 13 -1.</_>\n        <_>\n          13 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 14 2 -1.</_>\n        <_>\n          2 19 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 7 -1.</_>\n        <_>\n          11 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 2 14 -1.</_>\n        <_>\n          12 4 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 14 -1.</_>\n        <_>\n          7 4 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 3 -1.</_>\n        <_>\n          7 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 6 9 -1.</_>\n        <_>\n          5 8 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 8 8 -1.</_>\n        <_>\n          15 5 4 4 2.</_>\n        <_>\n          11 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 8 -1.</_>\n        <_>\n          5 5 4 4 2.</_>\n        <_>\n          9 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 20 -1.</_>\n        <_>\n          10 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 13 -1.</_>\n        <_>\n          8 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 6 -1.</_>\n        <_>\n          0 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 12 4 -1.</_>\n        <_>\n          9 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 10 -1.</_>\n        <_>\n          5 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 5 -1.</_>\n        <_>\n          7 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 12 -1.</_>\n        <_>\n          7 6 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 8 -1.</_>\n        <_>\n          3 4 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 13 3 -1.</_>\n        <_>\n          4 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 5 -1.</_>\n        <_>\n          6 9 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 2 -1.</_>\n        <_>\n          5 8 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 14 4 -1.</_>\n        <_>\n          2 11 7 2 2.</_>\n        <_>\n          9 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 6 -1.</_>\n        <_>\n          4 10 6 3 2.</_>\n        <_>\n          10 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 10 -1.</_>\n        <_>\n          14 8 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 2 -1.</_>\n        <_>\n          0 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 5 -1.</_>\n        <_>\n          14 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 13 2 -1.</_>\n        <_>\n          3 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 5 -1.</_>\n        <_>\n          3 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          11 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 14 -1.</_>\n        <_>\n          17 4 2 7 2.</_>\n        <_>\n          15 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 14 -1.</_>\n        <_>\n          17 4 2 7 2.</_>\n        <_>\n          15 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 18 -1.</_>\n        <_>\n          1 2 2 9 2.</_>\n        <_>\n          3 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 16 9 -1.</_>\n        <_>\n          3 14 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 3 -1.</_>\n        <_>\n          0 1 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 9 15 -1.</_>\n        <_>\n          9 10 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 9 -1.</_>\n        <_>\n          0 10 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 7 -1.</_>\n        <_>\n          12 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 5 16 -1.</_>\n        <_>\n          7 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 17 -1.</_>\n        <_>\n          6 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 20 -1.</_>\n        <_>\n          8 0 6 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 6 -1.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 5 16 -1.</_>\n        <_>\n          9 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 9 -1.</_>\n        <_>\n          3 7 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 9 -1.</_>\n        <_>\n          15 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 6 -1.</_>\n        <_>\n          5 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 17 6 -1.</_>\n        <_>\n          2 16 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 6 -1.</_>\n        <_>\n          3 4 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 15 -1.</_>\n        <_>\n          2 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 10 -1.</_>\n        <_>\n          10 4 9 5 2.</_>\n        <_>\n          1 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 13 -1.</_>\n        <_>\n          1 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 12 -1.</_>\n        <_>\n          13 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          0 2 10 2 2.</_>\n        <_>\n          10 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 7 -1.</_>\n        <_>\n          9 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 12 -1.</_>\n        <_>\n          7 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 14 -1.</_>\n        <_>\n          10 0 3 7 2.</_>\n        <_>\n          7 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 8 -1.</_>\n        <_>\n          5 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 8 -1.</_>\n        <_>\n          3 4 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 5 10 -1.</_>\n        <_>\n          9 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 14 -1.</_>\n        <_>\n          8 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 18 5 -1.</_>\n        <_>\n          8 15 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 6 -1.</_>\n        <_>\n          1 9 5 3 2.</_>\n        <_>\n          6 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 11 -1.</_>\n        <_>\n          2 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 8 -1.</_>\n        <_>\n          10 4 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 3 10 -1.</_>\n        <_>\n          11 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 3 10 -1.</_>\n        <_>\n          6 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 9 -1.</_>\n        <_>\n          8 2 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 18 5 -1.</_>\n        <_>\n          8 15 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 5 -1.</_>\n        <_>\n          6 15 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 9 -1.</_>\n        <_>\n          12 3 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 8 -1.</_>\n        <_>\n          9 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 14 -1.</_>\n        <_>\n          15 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 14 -1.</_>\n        <_>\n          3 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 9 13 -1.</_>\n        <_>\n          13 7 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 9 13 -1.</_>\n        <_>\n          4 7 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 12 5 -1.</_>\n        <_>\n          12 15 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          10 14 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 3 -1.</_>\n        <_>\n          5 3 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          5 5 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 7 8 -1.</_>\n        <_>\n          7 8 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 9 -1.</_>\n        <_>\n          0 3 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 3 -1.</_>\n        <_>\n          7 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 12 -1.</_>\n        <_>\n          4 8 4 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 5 -1.</_>\n        <_>\n          12 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 5 -1.</_>\n        <_>\n          5 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 10 14 -1.</_>\n        <_>\n          11 4 5 7 2.</_>\n        <_>\n          6 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 10 14 -1.</_>\n        <_>\n          4 4 5 7 2.</_>\n        <_>\n          9 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 6 5 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 13 3 -1.</_>\n        <_>\n          3 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 14 4 -1.</_>\n        <_>\n          12 16 7 2 2.</_>\n        <_>\n          5 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 5 12 -1.</_>\n        <_>\n          11 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 5 12 -1.</_>\n        <_>\n          4 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 8 -1.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 14 4 -1.</_>\n        <_>\n          1 16 7 2 2.</_>\n        <_>\n          8 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 13 2 -1.</_>\n        <_>\n          5 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 5 -1.</_>\n        <_>\n          13 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 5 -1.</_>\n        <_>\n          4 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 4 13 -1.</_>\n        <_>\n          15 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 4 13 -1.</_>\n        <_>\n          3 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 4 -1.</_>\n        <_>\n          5 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 15 3 -1.</_>\n        <_>\n          0 3 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 11 6 -1.</_>\n        <_>\n          7 2 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 4 -1.</_>\n        <_>\n          0 12 10 2 2.</_>\n        <_>\n          10 14 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 5 -1.</_>\n        <_>\n          8 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 14 -1.</_>\n        <_>\n          7 1 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 8 -1.</_>\n        <_>\n          8 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 7 -1.</_>\n        <_>\n          8 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 15 4 -1.</_>\n        <_>\n          2 18 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 5 -1.</_>\n        <_>\n          7 8 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 16 -1.</_>\n        <_>\n          1 4 2 8 2.</_>\n        <_>\n          3 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 10 -1.</_>\n        <_>\n          6 4 3 5 2.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 19 3 -1.</_>\n        <_>\n          1 10 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 12 -1.</_>\n        <_>\n          3 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 4 -1.</_>\n        <_>\n          6 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 15 3 -1.</_>\n        <_>\n          0 6 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 13 -1.</_>\n        <_>\n          12 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 14 -1.</_>\n        <_>\n          10 4 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 10 6 -1.</_>\n        <_>\n          12 0 5 3 2.</_>\n        <_>\n          7 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 6 7 -1.</_>\n        <_>\n          3 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 13 -1.</_>\n        <_>\n          18 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          11 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 10 6 -1.</_>\n        <_>\n          4 0 5 3 2.</_>\n        <_>\n          9 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 2 -1.</_>\n        <_>\n          6 2 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 18 -1.</_>\n        <_>\n          3 9 12 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 10 -1.</_>\n        <_>\n          13 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 10 -1.</_>\n        <_>\n          1 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          10 5 6 6 2.</_>\n        <_>\n          4 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 5 -1.</_>\n        <_>\n          10 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 4 -1.</_>\n        <_>\n          9 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 11 -1.</_>\n        <_>\n          10 9 6 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 10 -1.</_>\n        <_>\n          11 6 4 5 2.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 6 -1.</_>\n        <_>\n          4 10 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 9 6 -1.</_>\n        <_>\n          11 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 7 6 -1.</_>\n        <_>\n          6 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 16 -1.</_>\n        <_>\n          9 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 9 16 -1.</_>\n        <_>\n          3 10 9 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 10 -1.</_>\n        <_>\n          5 5 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 10 -1.</_>\n        <_>\n          5 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 12 -1.</_>\n        <_>\n          13 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 6 -1.</_>\n        <_>\n          0 12 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 2 -1.</_>\n        <_>\n          6 16 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 7 4 -1.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 11 8 -1.</_>\n        <_>\n          6 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 12 -1.</_>\n        <_>\n          0 8 4 6 2.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 4 14 -1.</_>\n        <_>\n          2 6 2 7 2.</_>\n        <_>\n          4 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 9 6 -1.</_>\n        <_>\n          9 10 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 4 8 -1.</_>\n        <_>\n          2 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 8 12 -1.</_>\n        <_>\n          13 4 4 6 2.</_>\n        <_>\n          9 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 8 12 -1.</_>\n        <_>\n          3 4 4 6 2.</_>\n        <_>\n          7 10 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 8 -1.</_>\n        <_>\n          14 8 5 4 2.</_>\n        <_>\n          9 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 15 2 -1.</_>\n        <_>\n          2 19 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 16 4 -1.</_>\n        <_>\n          8 11 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 14 -1.</_>\n        <_>\n          14 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 6 -1.</_>\n        <_>\n          9 11 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          8 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 6 -1.</_>\n        <_>\n          3 2 6 3 2.</_>\n        <_>\n          9 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 4 -1.</_>\n        <_>\n          12 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 8 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 15 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 7 4 -1.</_>\n        <_>\n          2 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 4 7 -1.</_>\n        <_>\n          14 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 3 15 -1.</_>\n        <_>\n          4 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 7 -1.</_>\n        <_>\n          8 0 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 10 3 -1.</_>\n        <_>\n          10 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 14 -1.</_>\n        <_>\n          8 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 8 4 -1.</_>\n        <_>\n          6 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 10 3 -1.</_>\n        <_>\n          10 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 5 8 -1.</_>\n        <_>\n          5 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 6 -1.</_>\n        <_>\n          13 1 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 6 -1.</_>\n        <_>\n          4 1 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 4 -1.</_>\n        <_>\n          12 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 7 6 -1.</_>\n        <_>\n          3 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 3 -1.</_>\n        <_>\n          2 2 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 2 -1.</_>\n        <_>\n          7 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 3 -1.</_>\n        <_>\n          1 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 8 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 8 -1.</_>\n        <_>\n          10 6 8 4 2.</_>\n        <_>\n          2 10 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 7 -1.</_>\n        <_>\n          4 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 2 -1.</_>\n        <_>\n          6 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 6 -1.</_>\n        <_>\n          1 11 9 3 2.</_>\n        <_>\n          10 14 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 5 10 -1.</_>\n        <_>\n          10 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          7 10 3 5 2.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 12 -1.</_>\n        <_>\n          6 6 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 5 -1.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 2 -1.</_>\n        <_>\n          3 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 13 -1.</_>\n        <_>\n          16 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 13 -1.</_>\n        <_>\n          2 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_>\n        <_>\n          9 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 5 9 -1.</_>\n        <_>\n          1 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 8 12 -1.</_>\n        <_>\n          16 8 4 6 2.</_>\n        <_>\n          12 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 8 -1.</_>\n        <_>\n          10 9 6 4 2.</_>\n        <_>\n          4 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 8 -1.</_>\n        <_>\n          6 2 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 10 -1.</_>\n        <_>\n          8 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 18 -1.</_>\n        <_>\n          17 2 2 9 2.</_>\n        <_>\n          15 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 20 -1.</_>\n        <_>\n          0 0 10 10 2.</_>\n        <_>\n          10 10 10 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 3 -1.</_>\n        <_>\n          5 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 4 -1.</_>\n        <_>\n          7 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 5 -1.</_>\n        <_>\n          11 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 5 -1.</_>\n        <_>\n          6 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 14 3 -1.</_>\n        <_>\n          6 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 8 8 -1.</_>\n        <_>\n          15 12 4 4 2.</_>\n        <_>\n          11 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 8 8 -1.</_>\n        <_>\n          1 12 4 4 2.</_>\n        <_>\n          5 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 3 -1.</_>\n        <_>\n          8 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 19 -1.</_>\n        <_>\n          10 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 6 -1.</_>\n        <_>\n          1 14 18 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 6 -1.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 4 8 -1.</_>\n        <_>\n          9 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 3 -1.</_>\n        <_>\n          1 12 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 2 -1.</_>\n        <_>\n          2 2 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 19 3 -1.</_>\n        <_>\n          0 10 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 4 -1.</_>\n        <_>\n          9 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 6 -1.</_>\n        <_>\n          0 16 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 6 -1.</_>\n        <_>\n          8 7 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 6 -1.</_>\n        <_>\n          6 7 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 12 -1.</_>\n        <_>\n          0 6 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 13 -1.</_>\n        <_>\n          14 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 13 6 -1.</_>\n        <_>\n          3 3 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 8 -1.</_>\n        <_>\n          7 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 14 -1.</_>\n        <_>\n          6 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 6 -1.</_>\n        <_>\n          7 2 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 7 4 -1.</_>\n        <_>\n          4 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 10 16 -1.</_>\n        <_>\n          9 12 10 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 16 12 -1.</_>\n        <_>\n          1 3 8 6 2.</_>\n        <_>\n          9 9 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 2 16 -1.</_>\n        <_>\n          11 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 13 3 -1.</_>\n        <_>\n          0 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 9 6 -1.</_>\n        <_>\n          7 9 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 8 -1.</_>\n        <_>\n          6 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 10 -1.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 12 -1.</_>\n        <_>\n          8 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 15 3 -1.</_>\n        <_>\n          4 6 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 9 4 -1.</_>\n        <_>\n          2 6 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 10 -1.</_>\n        <_>\n          8 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 10 -1.</_>\n        <_>\n          8 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 11 8 -1.</_>\n        <_>\n          5 11 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 6 6 -1.</_>\n        <_>\n          1 15 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 5 18 -1.</_>\n        <_>\n          14 8 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 5 18 -1.</_>\n        <_>\n          1 8 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 13 -1.</_>\n        <_>\n          14 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 13 -1.</_>\n        <_>\n          5 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 7 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 4 -1.</_>\n        <_>\n          2 1 8 2 2.</_>\n        <_>\n          10 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 10 6 -1.</_>\n        <_>\n          11 1 5 3 2.</_>\n        <_>\n          6 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 15 -1.</_>\n        <_>\n          4 5 4 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 6 -1.</_>\n        <_>\n          4 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 14 -1.</_>\n        <_>\n          7 0 3 7 2.</_>\n        <_>\n          10 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 10 -1.</_>\n        <_>\n          7 10 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 2 -1.</_>\n        <_>\n          0 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 15 -1.</_>\n        <_>\n          0 5 20 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 3 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 4 -1.</_>\n        <_>\n          6 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 7 -1.</_>\n        <_>\n          5 0 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 8 -1.</_>\n        <_>\n          10 0 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 8 -1.</_>\n        <_>\n          5 0 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 4 -1.</_>\n        <_>\n          5 6 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 4 -1.</_>\n        <_>\n          9 6 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 9 -1.</_>\n        <_>\n          7 0 5 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 2 -1.</_>\n        <_>\n          6 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 8 -1.</_>\n        <_>\n          8 0 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 4 14 -1.</_>\n        <_>\n          14 1 2 7 2.</_>\n        <_>\n          12 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 3 -1.</_>\n        <_>\n          6 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 6 -1.</_>\n        <_>\n          7 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 5 14 -1.</_>\n        <_>\n          6 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 5 -1.</_>\n        <_>\n          9 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 5 -1.</_>\n        <_>\n          6 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 7 -1.</_>\n        <_>\n          9 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 6 -1.</_>\n        <_>\n          12 1 5 3 2.</_>\n        <_>\n          7 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 13 2 -1.</_>\n        <_>\n          2 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 4 -1.</_>\n        <_>\n          10 2 9 2 2.</_>\n        <_>\n          1 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 9 5 -1.</_>\n        <_>\n          8 8 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 18 -1.</_>\n        <_>\n          17 2 2 9 2.</_>\n        <_>\n          15 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 18 -1.</_>\n        <_>\n          1 2 2 9 2.</_>\n        <_>\n          3 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 10 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_>\n        <_>\n          10 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 17 6 -1.</_>\n        <_>\n          1 9 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 4 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 6 -1.</_>\n        <_>\n          1 8 5 3 2.</_>\n        <_>\n          6 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 10 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_>\n        <_>\n          10 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_>\n        <_>\n          5 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          8 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 19 -1.</_>\n        <_>\n          6 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 12 13 -1.</_>\n        <_>\n          5 1 6 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 9 5 -1.</_>\n        <_>\n          8 1 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 3 -1.</_>\n        <_>\n          0 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 16 -1.</_>\n        <_>\n          10 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 5 -1.</_>\n        <_>\n          8 12 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 16 -1.</_>\n        <_>\n          10 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 4 16 -1.</_>\n        <_>\n          8 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 7 -1.</_>\n        <_>\n          6 1 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 7 -1.</_>\n        <_>\n          10 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 9 9 -1.</_>\n        <_>\n          14 8 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 9 -1.</_>\n        <_>\n          3 8 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 5 -1.</_>\n        <_>\n          0 4 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 2 -1.</_>\n        <_>\n          1 13 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 9 -1.</_>\n        <_>\n          11 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 9 -1.</_>\n        <_>\n          4 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 4 -1.</_>\n        <_>\n          10 11 10 2 2.</_>\n        <_>\n          0 13 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 15 -1.</_>\n        <_>\n          15 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 15 -1.</_>\n        <_>\n          4 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 7 4 -1.</_>\n        <_>\n          9 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 5 -1.</_>\n        <_>\n          8 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 4 9 -1.</_>\n        <_>\n          14 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 9 -1.</_>\n        <_>\n          4 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 8 8 -1.</_>\n        <_>\n          13 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 7 4 -1.</_>\n        <_>\n          4 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 4 8 -1.</_>\n        <_>\n          9 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 10 -1.</_>\n        <_>\n          5 12 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 8 -1.</_>\n        <_>\n          5 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 10 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 5 -1.</_>\n        <_>\n          5 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 14 -1.</_>\n        <_>\n          8 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 5 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 17 6 -1.</_>\n        <_>\n          1 4 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          9 5 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 6 -1.</_>\n        <_>\n          8 4 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 6 -1.</_>\n        <_>\n          12 6 7 3 2.</_>\n        <_>\n          5 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 6 -1.</_>\n        <_>\n          1 6 7 3 2.</_>\n        <_>\n          8 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 15 -1.</_>\n        <_>\n          0 10 20 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 14 -1.</_>\n        <_>\n          14 5 2 7 2.</_>\n        <_>\n          12 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          2 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 13 -1.</_>\n        <_>\n          7 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 20 -1.</_>\n        <_>\n          7 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 8 12 -1.</_>\n        <_>\n          11 5 4 6 2.</_>\n        <_>\n          7 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 12 -1.</_>\n        <_>\n          4 5 5 6 2.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 14 -1.</_>\n        <_>\n          14 5 2 7 2.</_>\n        <_>\n          12 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 14 -1.</_>\n        <_>\n          4 5 2 7 2.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 9 -1.</_>\n        <_>\n          14 10 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 2 -1.</_>\n        <_>\n          3 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 3 -1.</_>\n        <_>\n          0 16 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 6 -1.</_>\n        <_>\n          1 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 19 -1.</_>\n        <_>\n          7 0 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 10 -1.</_>\n        <_>\n          3 9 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 9 4 -1.</_>\n        <_>\n          11 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 10 -1.</_>\n        <_>\n          8 3 4 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 10 -1.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 4 -1.</_>\n        <_>\n          0 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 14 3 -1.</_>\n        <_>\n          6 13 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 6 -1.</_>\n        <_>\n          11 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 5 15 -1.</_>\n        <_>\n          7 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 13 2 -1.</_>\n        <_>\n          4 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 4 12 -1.</_>\n        <_>\n          2 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 15 -1.</_>\n        <_>\n          9 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 14 -1.</_>\n        <_>\n          8 8 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 17 6 -1.</_>\n        <_>\n          2 9 17 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 5 9 -1.</_>\n        <_>\n          0 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 14 2 -1.</_>\n        <_>\n          2 10 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 14 -1.</_>\n        <_>\n          6 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 4 -1.</_>\n        <_>\n          11 0 7 2 2.</_>\n        <_>\n          4 2 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 4 -1.</_>\n        <_>\n          0 1 10 2 2.</_>\n        <_>\n          10 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 7 6 -1.</_>\n        <_>\n          7 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          7 2 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 13 3 -1.</_>\n        <_>\n          1 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 17 -1.</_>\n        <_>\n          18 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 10 -1.</_>\n        <_>\n          0 0 10 5 2.</_>\n        <_>\n          10 5 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 4 -1.</_>\n        <_>\n          11 8 7 2 2.</_>\n        <_>\n          4 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 7 6 -1.</_>\n        <_>\n          0 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 4 -1.</_>\n        <_>\n          11 8 7 2 2.</_>\n        <_>\n          4 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 4 -1.</_>\n        <_>\n          2 8 7 2 2.</_>\n        <_>\n          9 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 16 10 -1.</_>\n        <_>\n          11 4 8 5 2.</_>\n        <_>\n          3 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 6 -1.</_>\n        <_>\n          6 5 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 13 2 -1.</_>\n        <_>\n          5 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 7 -1.</_>\n        <_>\n          7 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 4 13 -1.</_>\n        <_>\n          11 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 13 -1.</_>\n        <_>\n          7 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 14 3 -1.</_>\n        <_>\n          5 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 3 14 -1.</_>\n        <_>\n          2 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 15 3 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 16 -1.</_>\n        <_>\n          2 4 3 8 2.</_>\n        <_>\n          5 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 20 -1.</_>\n        <_>\n          4 10 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 7 9 -1.</_>\n        <_>\n          8 5 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 13 -1.</_>\n        <_>\n          6 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 10 -1.</_>\n        <_>\n          14 2 3 5 2.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 7 -1.</_>\n        <_>\n          7 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 7 -1.</_>\n        <_>\n          9 7 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 9 4 -1.</_>\n        <_>\n          0 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 8 10 -1.</_>\n        <_>\n          11 7 4 5 2.</_>\n        <_>\n          7 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 10 -1.</_>\n        <_>\n          5 7 4 5 2.</_>\n        <_>\n          9 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 5 -1.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 13 6 -1.</_>\n        <_>\n          3 16 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          10 12 7 2 2.</_>\n        <_>\n          3 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 6 5 -1.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 8 -1.</_>\n        <_>\n          8 11 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 15 -1.</_>\n        <_>\n          3 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 13 -1.</_>\n        <_>\n          17 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 7 -1.</_>\n        <_>\n          5 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 13 -1.</_>\n        <_>\n          17 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 13 -1.</_>\n        <_>\n          2 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 16 -1.</_>\n        <_>\n          10 1 2 8 2.</_>\n        <_>\n          8 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 5 9 -1.</_>\n        <_>\n          7 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 8 -1.</_>\n        <_>\n          6 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 5 -1.</_>\n        <_>\n          3 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 7 -1.</_>\n        <_>\n          14 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 12 7 -1.</_>\n        <_>\n          6 11 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 5 -1.</_>\n        <_>\n          10 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 15 2 -1.</_>\n        <_>\n          2 2 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 4 -1.</_>\n        <_>\n          13 8 7 2 2.</_>\n        <_>\n          6 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 3 -1.</_>\n        <_>\n          4 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          7 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 11 -1.</_>\n        <_>\n          9 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 11 -1.</_>\n        <_>\n          9 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 15 8 -1.</_>\n        <_>\n          10 12 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 9 -1.</_>\n        <_>\n          7 7 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 4 -1.</_>\n        <_>\n          6 8 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 9 -1.</_>\n        <_>\n          0 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 12 -1.</_>\n        <_>\n          7 12 10 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 9 12 -1.</_>\n        <_>\n          5 8 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 9 -1.</_>\n        <_>\n          11 3 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 10 6 -1.</_>\n        <_>\n          11 3 5 3 2.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 6 -1.</_>\n        <_>\n          3 4 7 3 2.</_>\n        <_>\n          10 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 12 6 -1.</_>\n        <_>\n          9 3 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 12 6 -1.</_>\n        <_>\n          7 3 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 9 -1.</_>\n        <_>\n          10 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 13 2 -1.</_>\n        <_>\n          2 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 13 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 15 12 -1.</_>\n        <_>\n          3 7 15 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 10 -1.</_>\n        <_>\n          0 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 5 -1.</_>\n        <_>\n          4 14 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 2 15 -1.</_>\n        <_>\n          11 5 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 7 6 -1.</_>\n        <_>\n          6 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 9 -1.</_>\n        <_>\n          10 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 2 15 -1.</_>\n        <_>\n          8 5 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 18 -1.</_>\n        <_>\n          18 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 4 8 -1.</_>\n        <_>\n          0 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          8 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 4 -1.</_>\n        <_>\n          10 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          10 9 5 3 2.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 5 8 -1.</_>\n        <_>\n          4 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 7 6 -1.</_>\n        <_>\n          13 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 7 6 -1.</_>\n        <_>\n          0 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 19 -1.</_>\n        <_>\n          4 0 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 15 8 -1.</_>\n        <_>\n          5 12 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 4 -1.</_>\n        <_>\n          13 8 7 2 2.</_>\n        <_>\n          6 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 13 3 -1.</_>\n        <_>\n          1 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 18 -1.</_>\n        <_>\n          18 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 18 -1.</_>\n        <_>\n          1 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          16 6 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 8 -1.</_>\n        <_>\n          4 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 10 -1.</_>\n        <_>\n          10 0 8 5 2.</_>\n        <_>\n          2 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 7 -1.</_>\n        <_>\n          6 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 5 -1.</_>\n        <_>\n          7 9 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 9 -1.</_>\n        <_>\n          2 7 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 16 -1.</_>\n        <_>\n          14 0 3 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 9 -1.</_>\n        <_>\n          0 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 9 12 -1.</_>\n        <_>\n          11 6 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 9 12 -1.</_>\n        <_>\n          0 6 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 5 12 -1.</_>\n        <_>\n          8 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 9 -1.</_>\n        <_>\n          5 9 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 20 2 -1.</_>\n        <_>\n          0 18 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          9 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 14 -1.</_>\n        <_>\n          6 12 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 9 -1.</_>\n        <_>\n          11 3 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 9 -1.</_>\n        <_>\n          0 3 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 14 -1.</_>\n        <_>\n          13 0 2 7 2.</_>\n        <_>\n          11 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          6 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 14 -1.</_>\n        <_>\n          13 0 2 7 2.</_>\n        <_>\n          11 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 14 -1.</_>\n        <_>\n          4 0 2 7 2.</_>\n        <_>\n          6 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 6 -1.</_>\n        <_>\n          11 13 5 3 2.</_>\n        <_>\n          6 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 4 -1.</_>\n        <_>\n          1 8 7 2 2.</_>\n        <_>\n          8 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 9 -1.</_>\n        <_>\n          11 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 9 -1.</_>\n        <_>\n          7 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 6 -1.</_>\n        <_>\n          9 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 6 -1.</_>\n        <_>\n          8 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 4 -1.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 4 -1.</_>\n        <_>\n          6 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 3 14 -1.</_>\n        <_>\n          11 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 14 -1.</_>\n        <_>\n          8 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 14 -1.</_>\n        <_>\n          0 0 10 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 10 -1.</_>\n        <_>\n          10 9 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 8 -1.</_>\n        <_>\n          10 5 8 4 2.</_>\n        <_>\n          2 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 10 6 -1.</_>\n        <_>\n          4 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 3 -1.</_>\n        <_>\n          0 10 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 9 -1.</_>\n        <_>\n          3 14 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 10 6 -1.</_>\n        <_>\n          3 13 5 3 2.</_>\n        <_>\n          8 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 3 -1.</_>\n        <_>\n          0 7 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 16 3 -1.</_>\n        <_>\n          0 16 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 16 4 -1.</_>\n        <_>\n          10 16 8 2 2.</_>\n        <_>\n          2 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 13 3 -1.</_>\n        <_>\n          1 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 6 -1.</_>\n        <_>\n          11 10 6 3 2.</_>\n        <_>\n          5 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 12 6 -1.</_>\n        <_>\n          3 10 6 3 2.</_>\n        <_>\n          9 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 10 6 -1.</_>\n        <_>\n          12 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 7 6 -1.</_>\n        <_>\n          2 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 2 -1.</_>\n        <_>\n          5 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 3 -1.</_>\n        <_>\n          1 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 14 -1.</_>\n        <_>\n          18 1 2 7 2.</_>\n        <_>\n          16 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 14 -1.</_>\n        <_>\n          6 12 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 2 -1.</_>\n        <_>\n          5 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 8 -1.</_>\n        <_>\n          6 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 12 -1.</_>\n        <_>\n          10 4 5 6 2.</_>\n        <_>\n          5 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 4 -1.</_>\n        <_>\n          10 13 7 2 2.</_>\n        <_>\n          3 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_>\n        <_>\n          8 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 7 -1.</_>\n        <_>\n          9 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 7 -1.</_>\n        <_>\n          8 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 8 6 -1.</_>\n        <_>\n          7 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 5 -1.</_>\n        <_>\n          10 8 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 8 5 -1.</_>\n        <_>\n          9 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 13 3 -1.</_>\n        <_>\n          7 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 13 3 -1.</_>\n        <_>\n          0 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 6 -1.</_>\n        <_>\n          4 2 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 4 -1.</_>\n        <_>\n          4 2 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 8 -1.</_>\n        <_>\n          2 12 5 4 2.</_>\n        <_>\n          7 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 10 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 2 -1.</_>\n        <_>\n          3 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 12 8 2 2.</_>\n        <_>\n          10 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 11 9 -1.</_>\n        <_>\n          5 6 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 10 -1.</_>\n        <_>\n          0 7 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 6 10 -1.</_>\n        <_>\n          3 8 3 5 2.</_>\n        <_>\n          6 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 5 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          1 7 9 2 2.</_>\n        <_>\n          10 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 5 8 -1.</_>\n        <_>\n          7 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 8 -1.</_>\n        <_>\n          8 4 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 4 -1.</_>\n        <_>\n          12 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 8 -1.</_>\n        <_>\n          4 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 7 6 -1.</_>\n        <_>\n          13 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 12 4 -1.</_>\n        <_>\n          5 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 14 4 -1.</_>\n        <_>\n          1 3 7 2 2.</_>\n        <_>\n          8 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 10 8 -1.</_>\n        <_>\n          7 16 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 7 8 -1.</_>\n        <_>\n          10 16 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 13 2 -1.</_>\n        <_>\n          1 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 3 -1.</_>\n        <_>\n          6 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          0 15 10 2 2.</_>\n        <_>\n          10 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 16 4 -1.</_>\n        <_>\n          4 6 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 11 -1.</_>\n        <_>\n          9 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 10 -1.</_>\n        <_>\n          15 10 4 5 2.</_>\n        <_>\n          11 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 10 6 -1.</_>\n        <_>\n          1 4 5 3 2.</_>\n        <_>\n          6 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 13 2 -1.</_>\n        <_>\n          7 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 10 -1.</_>\n        <_>\n          16 10 4 5 2.</_>\n        <_>\n          12 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 4 -1.</_>\n        <_>\n          0 11 9 2 2.</_>\n        <_>\n          9 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 10 -1.</_>\n        <_>\n          16 10 4 5 2.</_>\n        <_>\n          12 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 8 10 -1.</_>\n        <_>\n          0 10 4 5 2.</_>\n        <_>\n          4 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 12 14 -1.</_>\n        <_>\n          13 6 6 7 2.</_>\n        <_>\n          7 13 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 4 -1.</_>\n        <_>\n          1 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 7 -1.</_>\n        <_>\n          12 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          10 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 7 -1.</_>\n        <_>\n          12 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 7 -1.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 14 -1.</_>\n        <_>\n          12 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 17 -1.</_>\n        <_>\n          10 2 6 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 6 7 -1.</_>\n        <_>\n          12 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 10 -1.</_>\n        <_>\n          6 9 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 5 9 -1.</_>\n        <_>\n          7 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 14 -1.</_>\n        <_>\n          11 5 2 7 2.</_>\n        <_>\n          9 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          8 5 2 7 2.</_>\n        <_>\n          10 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 12 -1.</_>\n        <_>\n          11 3 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 12 -1.</_>\n        <_>\n          7 3 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 14 4 -1.</_>\n        <_>\n          11 10 7 2 2.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 7 -1.</_>\n        <_>\n          9 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 2 -1.</_>\n        <_>\n          1 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 2 -1.</_>\n        <_>\n          7 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 4 -1.</_>\n        <_>\n          4 15 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 4 -1.</_>\n        <_>\n          12 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 4 -1.</_>\n        <_>\n          1 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 3 14 -1.</_>\n        <_>\n          11 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 14 -1.</_>\n        <_>\n          8 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 6 7 -1.</_>\n        <_>\n          10 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 10 -1.</_>\n        <_>\n          2 5 3 5 2.</_>\n        <_>\n          5 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 3 16 -1.</_>\n        <_>\n          16 3 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 16 -1.</_>\n        <_>\n          3 3 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          14 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 13 -1.</_>\n        <_>\n          3 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 3 14 -1.</_>\n        <_>\n          17 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 3 14 -1.</_>\n        <_>\n          17 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 10 10 -1.</_>\n        <_>\n          1 10 5 5 2.</_>\n        <_>\n          6 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 10 -1.</_>\n        <_>\n          0 5 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 13 3 -1.</_>\n        <_>\n          2 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 14 -1.</_>\n        <_>\n          7 13 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 13 2 -1.</_>\n        <_>\n          0 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 10 -1.</_>\n        <_>\n          10 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 6 -1.</_>\n        <_>\n          3 13 7 3 2.</_>\n        <_>\n          10 16 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 19 -1.</_>\n        <_>\n          10 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 6 -1.</_>\n        <_>\n          1 12 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 19 -1.</_>\n        <_>\n          8 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 2 -1.</_>\n        <_>\n          0 6 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 7 -1.</_>\n        <_>\n          12 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 8 -1.</_>\n        <_>\n          6 2 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 9 -1.</_>\n        <_>\n          10 0 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 9 -1.</_>\n        <_>\n          5 0 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 5 6 -1.</_>\n        <_>\n          1 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 10 -1.</_>\n        <_>\n          11 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 10 -1.</_>\n        <_>\n          4 5 6 5 2.</_>\n        <_>\n          10 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 5 9 -1.</_>\n        <_>\n          13 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 18 -1.</_>\n        <_>\n          1 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 8 -1.</_>\n        <_>\n          1 12 9 4 2.</_>\n        <_>\n          10 16 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 10 4 -1.</_>\n        <_>\n          4 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 9 6 -1.</_>\n        <_>\n          6 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 10 -1.</_>\n        <_>\n          5 9 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 5 8 -1.</_>\n        <_>\n          8 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 13 10 -1.</_>\n        <_>\n          3 13 13 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 5 12 -1.</_>\n        <_>\n          12 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 17 -1.</_>\n        <_>\n          12 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 17 -1.</_>\n        <_>\n          7 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 13 -1.</_>\n        <_>\n          1 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 15 -1.</_>\n        <_>\n          12 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 5 15 -1.</_>\n        <_>\n          3 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 9 4 -1.</_>\n        <_>\n          10 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 2 -1.</_>\n        <_>\n          3 6 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 6 -1.</_>\n        <_>\n          10 2 7 3 2.</_>\n        <_>\n          3 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 6 -1.</_>\n        <_>\n          6 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 4 8 -1.</_>\n        <_>\n          11 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 13 -1.</_>\n        <_>\n          9 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 7 -1.</_>\n        <_>\n          7 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 18 5 -1.</_>\n        <_>\n          8 6 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 4 -1.</_>\n        <_>\n          10 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 10 -1.</_>\n        <_>\n          11 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 7 8 -1.</_>\n        <_>\n          3 16 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 18 9 -1.</_>\n        <_>\n          2 9 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 16 2 -1.</_>\n        <_>\n          9 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 11 4 -1.</_>\n        <_>\n          5 4 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 10 8 -1.</_>\n        <_>\n          0 12 5 4 2.</_>\n        <_>\n          5 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 15 8 -1.</_>\n        <_>\n          8 1 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 15 8 -1.</_>\n        <_>\n          7 1 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 9 -1.</_>\n        <_>\n          3 7 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 15 5 -1.</_>\n        <_>\n          9 3 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 12 -1.</_>\n        <_>\n          0 8 20 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 4 -1.</_>\n        <_>\n          8 1 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 12 -1.</_>\n        <_>\n          0 8 20 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 9 -1.</_>\n        <_>\n          10 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 12 15 -1.</_>\n        <_>\n          6 1 4 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 3 -1.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 3 -1.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 14 -1.</_>\n        <_>\n          6 8 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 12 -1.</_>\n        <_>\n          6 6 3 6 2.</_>\n        <_>\n          9 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 9 -1.</_>\n        <_>\n          10 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 4 9 -1.</_>\n        <_>\n          8 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 5 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 5 -1.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 9 6 -1.</_>\n        <_>\n          9 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          5 2 3 5 2.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 9 18 -1.</_>\n        <_>\n          3 1 3 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 10 -1.</_>\n        <_>\n          3 1 3 5 2.</_>\n        <_>\n          6 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 12 -1.</_>\n        <_>\n          1 3 9 6 2.</_>\n        <_>\n          10 9 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 13 3 -1.</_>\n        <_>\n          7 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 13 3 -1.</_>\n        <_>\n          1 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 14 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 8 -1.</_>\n        <_>\n          12 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 13 -1.</_>\n        <_>\n          7 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 3 10 -1.</_>\n        <_>\n          11 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 3 -1.</_>\n        <_>\n          1 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          4 9 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 9 -1.</_>\n        <_>\n          6 11 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 4 -1.</_>\n        <_>\n          4 15 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 2 -1.</_>\n        <_>\n          1 13 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          5 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          12 6 5 3 2.</_>\n        <_>\n          7 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 6 -1.</_>\n        <_>\n          8 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 14 2 -1.</_>\n        <_>\n          4 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 9 6 -1.</_>\n        <_>\n          5 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          17 1 3 6 2.</_>\n        <_>\n          14 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 12 -1.</_>\n        <_>\n          0 1 3 6 2.</_>\n        <_>\n          3 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 6 -1.</_>\n        <_>\n          12 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 2 -1.</_>\n        <_>\n          0 17 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 11 4 -1.</_>\n        <_>\n          5 18 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 13 3 -1.</_>\n        <_>\n          2 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 11 -1.</_>\n        <_>\n          16 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 6 -1.</_>\n        <_>\n          11 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 15 -1.</_>\n        <_>\n          8 5 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 2 -1.</_>\n        <_>\n          0 16 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 6 -1.</_>\n        <_>\n          11 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 7 -1.</_>\n        <_>\n          11 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          7 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 6 -1.</_>\n        <_>\n          11 11 5 3 2.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 6 -1.</_>\n        <_>\n          11 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 11 10 -1.</_>\n        <_>\n          4 9 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 6 -1.</_>\n        <_>\n          11 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 6 -1.</_>\n        <_>\n          1 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 8 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 3 -1.</_>\n        <_>\n          2 3 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 5 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 13 3 -1.</_>\n        <_>\n          5 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 8 -1.</_>\n        <_>\n          11 2 4 4 2.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 8 -1.</_>\n        <_>\n          5 2 4 4 2.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 4 16 -1.</_>\n        <_>\n          17 3 2 8 2.</_>\n        <_>\n          15 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 8 -1.</_>\n        <_>\n          4 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 6 -1.</_>\n        <_>\n          4 16 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 14 3 -1.</_>\n        <_>\n          1 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          1 1 9 2 2.</_>\n        <_>\n          10 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 13 -1.</_>\n        <_>\n          1 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 2 -1.</_>\n        <_>\n          2 0 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 12 -1.</_>\n        <_>\n          2 0 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 6 -1.</_>\n        <_>\n          0 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 3 -1.</_>\n        <_>\n          1 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 6 -1.</_>\n        <_>\n          9 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 14 3 -1.</_>\n        <_>\n          0 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 8 -1.</_>\n        <_>\n          5 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 6 -1.</_>\n        <_>\n          9 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 6 -1.</_>\n        <_>\n          2 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 16 4 -1.</_>\n        <_>\n          1 7 8 2 2.</_>\n        <_>\n          9 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 7 -1.</_>\n        <_>\n          8 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 4 -1.</_>\n        <_>\n          8 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 13 -1.</_>\n        <_>\n          3 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 4 11 -1.</_>\n        <_>\n          16 7 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 11 -1.</_>\n        <_>\n          2 7 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 8 -1.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 3 -1.</_>\n        <_>\n          0 11 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 8 6 -1.</_>\n        <_>\n          11 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 13 -1.</_>\n        <_>\n          10 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          9 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 18 -1.</_>\n        <_>\n          16 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 13 3 -1.</_>\n        <_>\n          4 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 19 -1.</_>\n        <_>\n          2 0 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 10 10 -1.</_>\n        <_>\n          13 5 5 5 2.</_>\n        <_>\n          8 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 12 -1.</_>\n        <_>\n          1 8 3 6 2.</_>\n        <_>\n          4 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 13 -1.</_>\n        <_>\n          5 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 8 6 -1.</_>\n        <_>\n          1 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 3 -1.</_>\n        <_>\n          4 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 16 -1.</_>\n        <_>\n          17 3 3 8 2.</_>\n        <_>\n          14 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 10 -1.</_>\n        <_>\n          1 4 9 5 2.</_>\n        <_>\n          10 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 16 -1.</_>\n        <_>\n          17 2 3 8 2.</_>\n        <_>\n          14 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 16 -1.</_>\n        <_>\n          0 2 3 8 2.</_>\n        <_>\n          3 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 12 -1.</_>\n        <_>\n          14 8 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          3 8 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          8 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 8 -1.</_>\n        <_>\n          4 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 18 16 -1.</_>\n        <_>\n          8 4 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 7 -1.</_>\n        <_>\n          7 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 4 -1.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 10 4 -1.</_>\n        <_>\n          7 2 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 6 -1.</_>\n        <_>\n          1 16 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 19 3 -1.</_>\n        <_>\n          1 2 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 13 3 -1.</_>\n        <_>\n          3 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 4 -1.</_>\n        <_>\n          10 15 9 2 2.</_>\n        <_>\n          1 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          4 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 9 6 -1.</_>\n        <_>\n          14 14 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 10 -1.</_>\n        <_>\n          10 10 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 7 -1.</_>\n        <_>\n          6 6 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 7 -1.</_>\n        <_>\n          10 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 15 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 12 12 -1.</_>\n        <_>\n          2 11 12 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 9 9 -1.</_>\n        <_>\n          5 13 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 8 -1.</_>\n        <_>\n          0 12 4 4 2.</_>\n        <_>\n          4 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 6 9 -1.</_>\n        <_>\n          14 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 7 6 -1.</_>\n        <_>\n          5 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 14 -1.</_>\n        <_>\n          9 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 8 -1.</_>\n        <_>\n          8 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 14 -1.</_>\n        <_>\n          7 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 4 8 -1.</_>\n        <_>\n          6 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 6 9 -1.</_>\n        <_>\n          14 9 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 6 9 -1.</_>\n        <_>\n          4 9 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 15 4 -1.</_>\n        <_>\n          9 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 10 4 -1.</_>\n        <_>\n          8 2 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 12 -1.</_>\n        <_>\n          10 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 4 12 -1.</_>\n        <_>\n          8 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 7 -1.</_>\n        <_>\n          9 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 3 13 -1.</_>\n        <_>\n          6 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 5 9 -1.</_>\n        <_>\n          12 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 12 -1.</_>\n        <_>\n          5 10 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 20 -1.</_>\n        <_>\n          11 0 2 10 2.</_>\n        <_>\n          9 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 16 -1.</_>\n        <_>\n          8 0 2 8 2.</_>\n        <_>\n          10 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 11 -1.</_>\n        <_>\n          8 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 9 -1.</_>\n        <_>\n          0 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 12 -1.</_>\n        <_>\n          13 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 8 -1.</_>\n        <_>\n          6 12 4 4 2.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 8 -1.</_>\n        <_>\n          10 9 9 4 2.</_>\n        <_>\n          1 13 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 12 -1.</_>\n        <_>\n          13 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 6 12 -1.</_>\n        <_>\n          4 6 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 13 3 -1.</_>\n        <_>\n          3 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 13 3 -1.</_>\n        <_>\n          7 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 14 -1.</_>\n        <_>\n          18 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 16 -1.</_>\n        <_>\n          0 8 20 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          0 2 10 3 2.</_>\n        <_>\n          10 5 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 14 -1.</_>\n        <_>\n          18 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 9 -1.</_>\n        <_>\n          7 9 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 7 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 10 -1.</_>\n        <_>\n          7 7 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          0 7 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 12 -1.</_>\n        <_>\n          3 4 7 6 2.</_>\n        <_>\n          10 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 8 -1.</_>\n        <_>\n          8 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 4 10 -1.</_>\n        <_>\n          11 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 14 -1.</_>\n        <_>\n          7 2 6 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 8 -1.</_>\n        <_>\n          10 3 7 4 2.</_>\n        <_>\n          3 7 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 11 -1.</_>\n        <_>\n          5 9 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 8 -1.</_>\n        <_>\n          5 7 5 4 2.</_>\n        <_>\n          10 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 16 -1.</_>\n        <_>\n          16 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 4 -1.</_>\n        <_>\n          10 4 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 14 3 -1.</_>\n        <_>\n          4 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 14 -1.</_>\n        <_>\n          18 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 10 -1.</_>\n        <_>\n          16 1 3 5 2.</_>\n        <_>\n          13 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 10 -1.</_>\n        <_>\n          1 1 3 5 2.</_>\n        <_>\n          4 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 3 -1.</_>\n        <_>\n          3 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 13 3 -1.</_>\n        <_>\n          3 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 8 8 -1.</_>\n        <_>\n          15 4 4 4 2.</_>\n        <_>\n          11 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 2 -1.</_>\n        <_>\n          0 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 8 8 -1.</_>\n        <_>\n          15 4 4 4 2.</_>\n        <_>\n          11 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 5 9 -1.</_>\n        <_>\n          3 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 8 -1.</_>\n        <_>\n          15 0 5 4 2.</_>\n        <_>\n          10 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 9 -1.</_>\n        <_>\n          0 7 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 4 -1.</_>\n        <_>\n          0 9 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 4 -1.</_>\n        <_>\n          10 2 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 7 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 4 7 -1.</_>\n        <_>\n          8 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 7 -1.</_>\n        <_>\n          14 13 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 12 5 -1.</_>\n        <_>\n          10 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 8 -1.</_>\n        <_>\n          8 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 7 -1.</_>\n        <_>\n          7 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          8 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          9 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 9 -1.</_>\n        <_>\n          2 9 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 2 -1.</_>\n        <_>\n          3 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 15 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 4 8 -1.</_>\n        <_>\n          7 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 11 -1.</_>\n        <_>\n          2 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 8 10 -1.</_>\n        <_>\n          7 8 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 8 4 -1.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 10 20 -1.</_>\n        <_>\n          1 0 5 10 2.</_>\n        <_>\n          6 10 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 10 -1.</_>\n        <_>\n          10 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          10 7 9 2 2.</_>\n        <_>\n          1 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 6 -1.</_>\n        <_>\n          5 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 3 -1.</_>\n        <_>\n          7 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 5 8 -1.</_>\n        <_>\n          11 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 5 8 -1.</_>\n        <_>\n          4 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 4 -1.</_>\n        <_>\n          10 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 9 6 -1.</_>\n        <_>\n          4 15 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 4 -1.</_>\n        <_>\n          10 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 4 -1.</_>\n        <_>\n          0 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 16 -1.</_>\n        <_>\n          16 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 15 -1.</_>\n        <_>\n          7 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 10 6 -1.</_>\n        <_>\n          14 10 5 3 2.</_>\n        <_>\n          9 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 14 -1.</_>\n        <_>\n          3 1 7 7 2.</_>\n        <_>\n          10 8 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          18 5 2 7 2.</_>\n        <_>\n          16 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 4 14 -1.</_>\n        <_>\n          0 5 2 7 2.</_>\n        <_>\n          2 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 13 3 -1.</_>\n        <_>\n          5 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 17 2 -1.</_>\n        <_>\n          0 17 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 6 -1.</_>\n        <_>\n          2 12 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 2 -1.</_>\n        <_>\n          1 11 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 9 -1.</_>\n        <_>\n          3 3 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 9 5 -1.</_>\n        <_>\n          9 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 4 -1.</_>\n        <_>\n          10 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 15 -1.</_>\n        <_>\n          1 8 18 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 12 -1.</_>\n        <_>\n          14 2 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 5 -1.</_>\n        <_>\n          4 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 3 -1.</_>\n        <_>\n          0 1 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 8 -1.</_>\n        <_>\n          6 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 3 -1.</_>\n        <_>\n          9 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 3 -1.</_>\n        <_>\n          6 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 13 3 -1.</_>\n        <_>\n          4 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 4 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 10 -1.</_>\n        <_>\n          13 9 3 5 2.</_>\n        <_>\n          10 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 5 -1.</_>\n        <_>\n          10 10 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 4 -1.</_>\n        <_>\n          10 1 8 2 2.</_>\n        <_>\n          2 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 3 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 17 -1.</_>\n        <_>\n          2 3 8 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 8 -1.</_>\n        <_>\n          0 5 4 4 2.</_>\n        <_>\n          4 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 16 -1.</_>\n        <_>\n          18 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 3 -1.</_>\n        <_>\n          8 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 15 3 -1.</_>\n        <_>\n          2 7 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 6 -1.</_>\n        <_>\n          2 14 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 12 -1.</_>\n        <_>\n          10 5 5 6 2.</_>\n        <_>\n          5 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 12 -1.</_>\n        <_>\n          2 4 7 6 2.</_>\n        <_>\n          9 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 16 -1.</_>\n        <_>\n          18 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 5 -1.</_>\n        <_>\n          8 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 15 -1.</_>\n        <_>\n          16 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 15 -1.</_>\n        <_>\n          3 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 8 -1.</_>\n        <_>\n          8 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 16 -1.</_>\n        <_>\n          1 4 3 8 2.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 2 -1.</_>\n        <_>\n          3 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 14 -1.</_>\n        <_>\n          7 2 3 7 2.</_>\n        <_>\n          10 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          12 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 16 -1.</_>\n        <_>\n          6 1 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 10 -1.</_>\n        <_>\n          6 7 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 13 -1.</_>\n        <_>\n          10 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 14 6 -1.</_>\n        <_>\n          2 6 7 3 2.</_>\n        <_>\n          9 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 9 -1.</_>\n        <_>\n          9 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 13 2 -1.</_>\n        <_>\n          3 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 8 6 -1.</_>\n        <_>\n          9 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 4 -1.</_>\n        <_>\n          2 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 13 3 -1.</_>\n        <_>\n          6 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 7 6 -1.</_>\n        <_>\n          3 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 9 -1.</_>\n        <_>\n          9 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 7 9 -1.</_>\n        <_>\n          4 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 13 3 -1.</_>\n        <_>\n          5 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 12 -1.</_>\n        <_>\n          1 6 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 8 -1.</_>\n        <_>\n          10 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 8 -1.</_>\n        <_>\n          8 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 16 -1.</_>\n        <_>\n          14 0 6 8 2.</_>\n        <_>\n          8 8 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 6 -1.</_>\n        <_>\n          6 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 4 -1.</_>\n        <_>\n          12 0 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          3 0 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 7 -1.</_>\n        <_>\n          8 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 17 6 -1.</_>\n        <_>\n          1 16 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 13 3 -1.</_>\n        <_>\n          5 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 7 -1.</_>\n        <_>\n          12 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 11 -1.</_>\n        <_>\n          7 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 7 -1.</_>\n        <_>\n          12 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 7 -1.</_>\n        <_>\n          6 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 9 9 -1.</_>\n        <_>\n          12 10 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 10 -1.</_>\n        <_>\n          0 10 5 5 2.</_>\n        <_>\n          5 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 6 5 -1.</_>\n        <_>\n          12 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 8 5 -1.</_>\n        <_>\n          5 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 2 -1.</_>\n        <_>\n          5 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 3 -1.</_>\n        <_>\n          7 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 8 -1.</_>\n        <_>\n          5 2 4 4 2.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 14 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          10 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 14 6 -1.</_>\n        <_>\n          12 3 7 3 2.</_>\n        <_>\n          5 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          0 3 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 6 -1.</_>\n        <_>\n          6 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 13 14 -1.</_>\n        <_>\n          0 12 13 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 8 -1.</_>\n        <_>\n          14 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 8 -1.</_>\n        <_>\n          0 0 10 4 2.</_>\n        <_>\n          10 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 18 -1.</_>\n        <_>\n          18 1 2 9 2.</_>\n        <_>\n          16 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 9 -1.</_>\n        <_>\n          3 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 12 -1.</_>\n        <_>\n          4 7 6 6 2.</_>\n        <_>\n          10 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 3 -1.</_>\n        <_>\n          7 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 6 -1.</_>\n        <_>\n          0 2 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 6 -1.</_>\n        <_>\n          6 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 8 -1.</_>\n        <_>\n          0 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 9 5 -1.</_>\n        <_>\n          12 3 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          2 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 6 -1.</_>\n        <_>\n          12 1 5 3 2.</_>\n        <_>\n          7 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 4 -1.</_>\n        <_>\n          0 2 9 2 2.</_>\n        <_>\n          9 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 1 2 17 -1.</_>\n        <_>\n          17 1 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 2 19 -1.</_>\n        <_>\n          2 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 4 -1.</_>\n        <_>\n          10 9 8 2 2.</_>\n        <_>\n          2 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 8 -1.</_>\n        <_>\n          1 6 9 4 2.</_>\n        <_>\n          10 10 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 4 -1.</_>\n        <_>\n          7 8 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 6 -1.</_>\n        <_>\n          5 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 4 10 -1.</_>\n        <_>\n          7 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 6 -1.</_>\n        <_>\n          8 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 15 5 -1.</_>\n        <_>\n          6 6 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 12 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 12 -1.</_>\n        <_>\n          1 8 5 6 2.</_>\n        <_>\n          6 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 5 6 -1.</_>\n        <_>\n          14 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 12 -1.</_>\n        <_>\n          1 3 9 6 2.</_>\n        <_>\n          10 9 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 6 -1.</_>\n        <_>\n          5 4 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 2 17 -1.</_>\n        <_>\n          15 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 8 -1.</_>\n        <_>\n          9 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 2 17 -1.</_>\n        <_>\n          4 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          11 0 9 2 2.</_>\n        <_>\n          2 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          0 0 9 2 2.</_>\n        <_>\n          9 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 6 8 -1.</_>\n        <_>\n          13 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 6 8 -1.</_>\n        <_>\n          5 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 10 6 -1.</_>\n        <_>\n          12 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 9 14 -1.</_>\n        <_>\n          8 0 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 15 4 -1.</_>\n        <_>\n          9 3 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 4 -1.</_>\n        <_>\n          6 3 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 14 -1.</_>\n        <_>\n          15 5 2 7 2.</_>\n        <_>\n          13 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 14 -1.</_>\n        <_>\n          3 5 2 7 2.</_>\n        <_>\n          5 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 7 -1.</_>\n        <_>\n          11 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 7 -1.</_>\n        <_>\n          7 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 10 6 -1.</_>\n        <_>\n          12 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 10 6 -1.</_>\n        <_>\n          3 12 5 3 2.</_>\n        <_>\n          8 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 16 6 -1.</_>\n        <_>\n          11 4 8 3 2.</_>\n        <_>\n          3 7 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 14 3 -1.</_>\n        <_>\n          6 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 7 -1.</_>\n        <_>\n          6 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 7 -1.</_>\n        <_>\n          10 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 12 -1.</_>\n        <_>\n          5 4 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 18 -1.</_>\n        <_>\n          10 0 5 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 9 -1.</_>\n        <_>\n          7 10 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 6 8 -1.</_>\n        <_>\n          8 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 14 2 -1.</_>\n        <_>\n          3 19 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 7 6 -1.</_>\n        <_>\n          1 8 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 7 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 7 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 11 15 -1.</_>\n        <_>\n          8 10 11 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 9 -1.</_>\n        <_>\n          8 9 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 13 3 -1.</_>\n        <_>\n          4 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 12 -1.</_>\n        <_>\n          7 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          8 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 16 3 -1.</_>\n        <_>\n          10 16 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 5 -1.</_>\n        <_>\n          9 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 9 5 -1.</_>\n        <_>\n          8 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 11 -1.</_>\n        <_>\n          7 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 10 -1.</_>\n        <_>\n          12 6 3 5 2.</_>\n        <_>\n          9 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          5 6 3 5 2.</_>\n        <_>\n          8 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 8 -1.</_>\n        <_>\n          12 8 8 4 2.</_>\n        <_>\n          4 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 8 -1.</_>\n        <_>\n          0 8 8 4 2.</_>\n        <_>\n          8 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 10 -1.</_>\n        <_>\n          14 8 5 5 2.</_>\n        <_>\n          9 13 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 10 -1.</_>\n        <_>\n          1 8 5 5 2.</_>\n        <_>\n          6 13 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 9 16 -1.</_>\n        <_>\n          14 1 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 12 -1.</_>\n        <_>\n          6 4 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 8 -1.</_>\n        <_>\n          16 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 8 -1.</_>\n        <_>\n          2 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 3 -1.</_>\n        <_>\n          5 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 6 -1.</_>\n        <_>\n          6 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 12 -1.</_>\n        <_>\n          7 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 18 -1.</_>\n        <_>\n          12 1 2 9 2.</_>\n        <_>\n          10 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 14 -1.</_>\n        <_>\n          4 6 2 7 2.</_>\n        <_>\n          6 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 10 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 14 12 -1.</_>\n        <_>\n          1 3 7 6 2.</_>\n        <_>\n          8 9 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 9 -1.</_>\n        <_>\n          12 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 4 -1.</_>\n        <_>\n          1 14 9 2 2.</_>\n        <_>\n          10 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 14 -1.</_>\n        <_>\n          9 6 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 12 -1.</_>\n        <_>\n          6 8 4 6 2.</_>\n        <_>\n          10 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 2 -1.</_>\n        <_>\n          9 0 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 6 -1.</_>\n        <_>\n          1 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          12 5 3 5 2.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 9 5 -1.</_>\n        <_>\n          9 1 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 2 -1.</_>\n        <_>\n          3 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 3 -1.</_>\n        <_>\n          4 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 6 -1.</_>\n        <_>\n          12 1 5 3 2.</_>\n        <_>\n          7 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 3 -1.</_>\n        <_>\n          5 0 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 5 -1.</_>\n        <_>\n          9 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 12 -1.</_>\n        <_>\n          0 11 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 13 3 -1.</_>\n        <_>\n          6 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 5 -1.</_>\n        <_>\n          6 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          1 9 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 11 -1.</_>\n        <_>\n          16 0 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 6 -1.</_>\n        <_>\n          3 1 6 3 2.</_>\n        <_>\n          9 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 6 -1.</_>\n        <_>\n          6 7 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 11 -1.</_>\n        <_>\n          2 0 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 5 12 -1.</_>\n        <_>\n          8 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 16 -1.</_>\n        <_>\n          1 4 3 8 2.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 6 10 -1.</_>\n        <_>\n          16 5 3 5 2.</_>\n        <_>\n          13 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 10 -1.</_>\n        <_>\n          1 5 3 5 2.</_>\n        <_>\n          4 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 16 -1.</_>\n        <_>\n          6 9 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 6 7 -1.</_>\n        <_>\n          8 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 13 -1.</_>\n        <_>\n          7 1 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 10 -1.</_>\n        <_>\n          8 10 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 20 -1.</_>\n        <_>\n          4 0 4 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 8 6 -1.</_>\n        <_>\n          10 0 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 9 -1.</_>\n        <_>\n          5 5 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 2 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 5 -1.</_>\n        <_>\n          11 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 3 -1.</_>\n        <_>\n          3 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 11 12 -1.</_>\n        <_>\n          0 7 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 5 -1.</_>\n        <_>\n          12 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 9 5 -1.</_>\n        <_>\n          6 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 8 -1.</_>\n        <_>\n          8 0 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 2 -1.</_>\n        <_>\n          0 16 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 10 3 -1.</_>\n        <_>\n          10 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 10 -1.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 6 -1.</_>\n        <_>\n          4 11 6 3 2.</_>\n        <_>\n          10 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 16 6 -1.</_>\n        <_>\n          11 12 8 3 2.</_>\n        <_>\n          3 15 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 16 6 -1.</_>\n        <_>\n          1 12 8 3 2.</_>\n        <_>\n          9 15 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 15 6 -1.</_>\n        <_>\n          9 0 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 6 -1.</_>\n        <_>\n          6 0 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 6 -1.</_>\n        <_>\n          5 3 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 17 -1.</_>\n        <_>\n          8 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 19 3 -1.</_>\n        <_>\n          1 10 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 18 -1.</_>\n        <_>\n          8 0 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 6 -1.</_>\n        <_>\n          0 13 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 4 -1.</_>\n        <_>\n          13 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 14 -1.</_>\n        <_>\n          4 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 17 -1.</_>\n        <_>\n          12 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 9 -1.</_>\n        <_>\n          3 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 10 -1.</_>\n        <_>\n          14 3 3 5 2.</_>\n        <_>\n          11 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 13 -1.</_>\n        <_>\n          3 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 2 -1.</_>\n        <_>\n          4 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 13 -1.</_>\n        <_>\n          5 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 17 -1.</_>\n        <_>\n          12 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 10 3 -1.</_>\n        <_>\n          5 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 16 9 -1.</_>\n        <_>\n          3 14 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 16 -1.</_>\n        <_>\n          10 8 10 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 16 -1.</_>\n        <_>\n          0 8 10 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 13 -1.</_>\n        <_>\n          10 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 10 -1.</_>\n        <_>\n          6 0 3 5 2.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 10 -1.</_>\n        <_>\n          11 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 16 -1.</_>\n        <_>\n          0 0 2 8 2.</_>\n        <_>\n          2 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 6 -1.</_>\n        <_>\n          10 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 16 -1.</_>\n        <_>\n          0 4 2 8 2.</_>\n        <_>\n          2 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 7 6 -1.</_>\n        <_>\n          5 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 10 -1.</_>\n        <_>\n          14 3 3 5 2.</_>\n        <_>\n          11 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 10 -1.</_>\n        <_>\n          3 3 3 5 2.</_>\n        <_>\n          6 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 10 -1.</_>\n        <_>\n          6 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 16 -1.</_>\n        <_>\n          14 0 2 8 2.</_>\n        <_>\n          12 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 16 -1.</_>\n        <_>\n          4 0 2 8 2.</_>\n        <_>\n          6 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 15 7 -1.</_>\n        <_>\n          10 13 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          0 8 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 5 -1.</_>\n        <_>\n          8 13 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 6 12 -1.</_>\n        <_>\n          15 7 3 6 2.</_>\n        <_>\n          12 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 6 12 -1.</_>\n        <_>\n          2 7 3 6 2.</_>\n        <_>\n          5 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 6 -1.</_>\n        <_>\n          14 8 5 3 2.</_>\n        <_>\n          9 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 6 -1.</_>\n        <_>\n          1 8 5 3 2.</_>\n        <_>\n          6 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 13 3 -1.</_>\n        <_>\n          4 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 20 10 -1.</_>\n        <_>\n          0 13 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 15 7 -1.</_>\n        <_>\n          5 13 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 9 -1.</_>\n        <_>\n          9 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 9 8 -1.</_>\n        <_>\n          4 11 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 17 6 -1.</_>\n        <_>\n          2 15 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 8 -1.</_>\n        <_>\n          5 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 4 12 -1.</_>\n        <_>\n          13 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          4 5 6 6 2.</_>\n        <_>\n          10 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_>\n        <_>\n          5 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 8 -1.</_>\n        <_>\n          3 5 7 4 2.</_>\n        <_>\n          10 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 9 -1.</_>\n        <_>\n          5 9 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 8 4 -1.</_>\n        <_>\n          12 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 8 4 -1.</_>\n        <_>\n          0 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 8 4 -1.</_>\n        <_>\n          8 10 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 12 17 -1.</_>\n        <_>\n          12 2 4 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 12 17 -1.</_>\n        <_>\n          4 2 4 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 20 -1.</_>\n        <_>\n          5 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 6 -1.</_>\n        <_>\n          12 14 7 3 2.</_>\n        <_>\n          5 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 6 -1.</_>\n        <_>\n          0 14 7 3 2.</_>\n        <_>\n          7 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 10 6 -1.</_>\n        <_>\n          9 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 5 6 -1.</_>\n        <_>\n          1 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 13 -1.</_>\n        <_>\n          12 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 13 -1.</_>\n        <_>\n          7 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 9 -1.</_>\n        <_>\n          7 4 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 12 -1.</_>\n        <_>\n          9 7 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 12 -1.</_>\n        <_>\n          10 3 7 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 20 -1.</_>\n        <_>\n          1 0 4 10 2.</_>\n        <_>\n          5 10 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 5 -1.</_>\n        <_>\n          5 2 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 8 -1.</_>\n        <_>\n          12 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 10 -1.</_>\n        <_>\n          15 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 10 -1.</_>\n        <_>\n          0 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 10 6 -1.</_>\n        <_>\n          9 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 10 6 -1.</_>\n        <_>\n          1 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 9 -1.</_>\n        <_>\n          6 11 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 12 -1.</_>\n        <_>\n          7 12 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 2 -1.</_>\n        <_>\n          3 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 10 4 -1.</_>\n        <_>\n          5 18 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 17 -1.</_>\n        <_>\n          12 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 2 -1.</_>\n        <_>\n          7 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_>\n        <_>\n          8 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_>\n        <_>\n          9 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 12 -1.</_>\n        <_>\n          2 6 8 6 2.</_>\n        <_>\n          10 12 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 6 -1.</_>\n        <_>\n          13 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 4 -1.</_>\n        <_>\n          3 6 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 2 -1.</_>\n        <_>\n          7 2 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 15 6 -1.</_>\n        <_>\n          7 1 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 14 3 -1.</_>\n        <_>\n          0 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 14 -1.</_>\n        <_>\n          11 6 2 7 2.</_>\n        <_>\n          9 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 19 2 -1.</_>\n        <_>\n          0 9 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 8 -1.</_>\n        <_>\n          8 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 11 -1.</_>\n        <_>\n          9 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 13 -1.</_>\n        <_>\n          9 3 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 12 6 -1.</_>\n        <_>\n          0 3 6 3 2.</_>\n        <_>\n          6 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 2 -1.</_>\n        <_>\n          3 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 6 7 -1.</_>\n        <_>\n          6 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 5 6 -1.</_>\n        <_>\n          15 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 6 -1.</_>\n        <_>\n          8 1 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 8 -1.</_>\n        <_>\n          10 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 5 -1.</_>\n        <_>\n          9 1 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 6 -1.</_>\n        <_>\n          13 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 6 -1.</_>\n        <_>\n          0 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          14 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          0 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 8 -1.</_>\n        <_>\n          6 4 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 8 -1.</_>\n        <_>\n          0 5 4 4 2.</_>\n        <_>\n          4 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 12 -1.</_>\n        <_>\n          11 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 6 -1.</_>\n        <_>\n          4 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 11 8 -1.</_>\n        <_>\n          7 9 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 5 -1.</_>\n        <_>\n          8 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 10 8 -1.</_>\n        <_>\n          10 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 10 8 -1.</_>\n        <_>\n          5 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 7 -1.</_>\n        <_>\n          15 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 7 -1.</_>\n        <_>\n          3 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          10 2 10 2 2.</_>\n        <_>\n          0 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 12 9 -1.</_>\n        <_>\n          1 3 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 9 4 -1.</_>\n        <_>\n          10 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 11 4 -1.</_>\n        <_>\n          1 8 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 4 -1.</_>\n        <_>\n          4 10 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 10 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 3 10 -1.</_>\n        <_>\n          3 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 17 -1.</_>\n        <_>\n          18 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 13 2 -1.</_>\n        <_>\n          0 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 17 -1.</_>\n        <_>\n          18 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 17 -1.</_>\n        <_>\n          1 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 6 -1.</_>\n        <_>\n          2 2 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 13 -1.</_>\n        <_>\n          8 5 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 12 16 -1.</_>\n        <_>\n          7 3 6 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 16 2 -1.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 12 -1.</_>\n        <_>\n          11 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 7 -1.</_>\n        <_>\n          3 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 12 -1.</_>\n        <_>\n          16 0 4 6 2.</_>\n        <_>\n          12 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 10 -1.</_>\n        <_>\n          5 6 5 5 2.</_>\n        <_>\n          10 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 2 18 -1.</_>\n        <_>\n          10 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 8 -1.</_>\n        <_>\n          4 9 6 4 2.</_>\n        <_>\n          10 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 13 -1.</_>\n        <_>\n          18 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 13 -1.</_>\n        <_>\n          18 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 2 17 -1.</_>\n        <_>\n          7 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 8 -1.</_>\n        <_>\n          11 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          7 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 13 -1.</_>\n        <_>\n          18 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 13 3 -1.</_>\n        <_>\n          0 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 6 -1.</_>\n        <_>\n          2 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 8 -1.</_>\n        <_>\n          12 4 7 4 2.</_>\n        <_>\n          5 8 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          10 10 4 4 2.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 5 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 6 -1.</_>\n        <_>\n          6 6 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 4 -1.</_>\n        <_>\n          10 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 18 -1.</_>\n        <_>\n          15 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 9 15 -1.</_>\n        <_>\n          4 2 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 4 -1.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 5 -1.</_>\n        <_>\n          9 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 15 2 -1.</_>\n        <_>\n          4 3 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 13 3 -1.</_>\n        <_>\n          1 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 8 -1.</_>\n        <_>\n          6 10 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 5 9 -1.</_>\n        <_>\n          4 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 10 -1.</_>\n        <_>\n          13 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 10 -1.</_>\n        <_>\n          2 9 6 5 2.</_>\n        <_>\n          8 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 15 3 -1.</_>\n        <_>\n          8 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 12 -1.</_>\n        <_>\n          1 0 4 6 2.</_>\n        <_>\n          5 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 5 10 -1.</_>\n        <_>\n          5 14 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 10 12 -1.</_>\n        <_>\n          9 9 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 7 6 -1.</_>\n        <_>\n          1 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          5 9 5 4 2.</_>\n        <_>\n          10 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 9 -1.</_>\n        <_>\n          11 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 8 -1.</_>\n        <_>\n          6 3 4 4 2.</_>\n        <_>\n          10 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 9 4 -1.</_>\n        <_>\n          11 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 8 4 -1.</_>\n        <_>\n          12 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 8 4 -1.</_>\n        <_>\n          0 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 3 -1.</_>\n        <_>\n          0 12 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 16 -1.</_>\n        <_>\n          1 0 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 11 -1.</_>\n        <_>\n          3 2 7 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 8 6 -1.</_>\n        <_>\n          4 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 6 -1.</_>\n        <_>\n          3 2 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 13 3 -1.</_>\n        <_>\n          1 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 5 6 -1.</_>\n        <_>\n          15 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 7 6 -1.</_>\n        <_>\n          0 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 6 -1.</_>\n        <_>\n          10 6 8 3 2.</_>\n        <_>\n          2 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 3 10 -1.</_>\n        <_>\n          2 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 5 6 -1.</_>\n        <_>\n          15 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 6 -1.</_>\n        <_>\n          5 7 5 3 2.</_>\n        <_>\n          10 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 5 6 -1.</_>\n        <_>\n          15 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 5 6 -1.</_>\n        <_>\n          0 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 9 15 -1.</_>\n        <_>\n          10 10 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 9 5 -1.</_>\n        <_>\n          8 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 6 -1.</_>\n        <_>\n          13 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 13 3 -1.</_>\n        <_>\n          3 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 6 -1.</_>\n        <_>\n          13 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 7 6 -1.</_>\n        <_>\n          0 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 18 -1.</_>\n        <_>\n          10 1 5 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 18 -1.</_>\n        <_>\n          5 1 5 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 5 -1.</_>\n        <_>\n          8 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 8 -1.</_>\n        <_>\n          4 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 10 -1.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 9 5 -1.</_>\n        <_>\n          12 11 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          3 11 7 2 2.</_>\n        <_>\n          10 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 4 -1.</_>\n        <_>\n          10 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 13 -1.</_>\n        <_>\n          9 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 14 -1.</_>\n        <_>\n          7 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 4 -1.</_>\n        <_>\n          10 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 4 -1.</_>\n        <_>\n          4 0 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          14 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 11 -1.</_>\n        <_>\n          3 1 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 9 5 -1.</_>\n        <_>\n          12 11 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 9 5 -1.</_>\n        <_>\n          5 11 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 7 -1.</_>\n        <_>\n          9 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 15 -1.</_>\n        <_>\n          2 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 2 15 -1.</_>\n        <_>\n          12 2 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 15 -1.</_>\n        <_>\n          7 2 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 2 -1.</_>\n        <_>\n          6 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 3 -1.</_>\n        <_>\n          0 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 7 -1.</_>\n        <_>\n          7 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 4 -1.</_>\n        <_>\n          10 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 8 4 -1.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 15 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 11 8 -1.</_>\n        <_>\n          5 4 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 8 14 -1.</_>\n        <_>\n          6 3 4 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 6 -1.</_>\n        <_>\n          15 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 6 -1.</_>\n        <_>\n          0 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 7 -1.</_>\n        <_>\n          8 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          10 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 19 -1.</_>\n        <_>\n          14 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 19 -1.</_>\n        <_>\n          5 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 6 7 -1.</_>\n        <_>\n          13 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          7 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 8 -1.</_>\n        <_>\n          8 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 16 -1.</_>\n        <_>\n          6 10 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 9 -1.</_>\n        <_>\n          8 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 7 4 -1.</_>\n        <_>\n          2 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 7 4 -1.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 5 12 -1.</_>\n        <_>\n          7 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 4 -1.</_>\n        <_>\n          3 6 7 2 2.</_>\n        <_>\n          10 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 10 -1.</_>\n        <_>\n          11 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 10 -1.</_>\n        <_>\n          7 4 3 5 2.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 15 -1.</_>\n        <_>\n          14 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 3 -1.</_>\n        <_>\n          0 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 15 -1.</_>\n        <_>\n          1 9 18 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 14 -1.</_>\n        <_>\n          5 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 4 -1.</_>\n        <_>\n          1 15 9 2 2.</_>\n        <_>\n          10 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 8 6 -1.</_>\n        <_>\n          10 15 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 6 -1.</_>\n        <_>\n          1 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 10 18 -1.</_>\n        <_>\n          13 0 5 9 2.</_>\n        <_>\n          8 9 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 18 3 -1.</_>\n        <_>\n          6 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 6 -1.</_>\n        <_>\n          15 4 5 3 2.</_>\n        <_>\n          10 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 4 -1.</_>\n        <_>\n          10 8 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 12 -1.</_>\n        <_>\n          10 4 6 6 2.</_>\n        <_>\n          4 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 3 -1.</_>\n        <_>\n          10 0 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 10 -1.</_>\n        <_>\n          11 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 5 15 -1.</_>\n        <_>\n          2 9 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 2 14 -1.</_>\n        <_>\n          17 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 2 14 -1.</_>\n        <_>\n          1 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 3 -1.</_>\n        <_>\n          2 11 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 6 -1.</_>\n        <_>\n          2 2 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 15 3 -1.</_>\n        <_>\n          7 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 6 7 -1.</_>\n        <_>\n          12 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 6 7 -1.</_>\n        <_>\n          5 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 2 13 -1.</_>\n        <_>\n          14 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 8 -1.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 6 5 -1.</_>\n        <_>\n          8 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 2 13 -1.</_>\n        <_>\n          14 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 13 -1.</_>\n        <_>\n          5 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          12 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 4 -1.</_>\n        <_>\n          13 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 13 3 -1.</_>\n        <_>\n          0 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 12 -1.</_>\n        <_>\n          6 11 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 14 4 -1.</_>\n        <_>\n          2 2 7 2 2.</_>\n        <_>\n          9 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 4 -1.</_>\n        <_>\n          13 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 7 6 -1.</_>\n        <_>\n          6 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 6 -1.</_>\n        <_>\n          8 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          8 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 14 6 -1.</_>\n        <_>\n          2 2 7 3 2.</_>\n        <_>\n          9 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 7 -1.</_>\n        <_>\n          5 0 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 5 -1.</_>\n        <_>\n          10 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 10 18 -1.</_>\n        <_>\n          13 0 5 9 2.</_>\n        <_>\n          8 9 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 6 -1.</_>\n        <_>\n          2 5 7 3 2.</_>\n        <_>\n          9 8 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          10 1 3 5 2.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 10 6 -1.</_>\n        <_>\n          14 9 5 3 2.</_>\n        <_>\n          9 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 6 10 -1.</_>\n        <_>\n          2 13 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 19 2 -1.</_>\n        <_>\n          1 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 6 -1.</_>\n        <_>\n          4 12 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 12 -1.</_>\n        <_>\n          9 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 3 -1.</_>\n        <_>\n          0 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 7 6 -1.</_>\n        <_>\n          10 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 7 6 -1.</_>\n        <_>\n          3 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 4 15 -1.</_>\n        <_>\n          15 5 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 17 10 -1.</_>\n        <_>\n          0 8 17 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          10 0 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 10 6 -1.</_>\n        <_>\n          11 1 5 3 2.</_>\n        <_>\n          6 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 11 -1.</_>\n        <_>\n          6 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 6 -1.</_>\n        <_>\n          0 12 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 10 -1.</_>\n        <_>\n          13 9 3 5 2.</_>\n        <_>\n          10 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          7 10 3 5 2.</_>\n        <_>\n          10 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 15 -1.</_>\n        <_>\n          6 6 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 3 -1.</_>\n        <_>\n          0 9 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 10 -1.</_>\n        <_>\n          3 10 3 5 2.</_>\n        <_>\n          6 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 8 12 -1.</_>\n        <_>\n          15 8 4 6 2.</_>\n        <_>\n          11 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 8 12 -1.</_>\n        <_>\n          1 8 4 6 2.</_>\n        <_>\n          5 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 13 -1.</_>\n        <_>\n          14 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 5 9 -1.</_>\n        <_>\n          6 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 5 -1.</_>\n        <_>\n          7 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 8 -1.</_>\n        <_>\n          2 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 6 -1.</_>\n        <_>\n          5 3 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 13 -1.</_>\n        <_>\n          13 5 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_>\n        <_>\n          8 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 3 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 13 -1.</_>\n        <_>\n          6 5 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 10 -1.</_>\n        <_>\n          11 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 10 -1.</_>\n        <_>\n          7 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 15 14 -1.</_>\n        <_>\n          9 2 5 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 15 14 -1.</_>\n        <_>\n          6 2 5 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 9 -1.</_>\n        <_>\n          5 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 10 8 -1.</_>\n        <_>\n          1 3 5 4 2.</_>\n        <_>\n          6 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 14 6 -1.</_>\n        <_>\n          5 13 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 14 6 -1.</_>\n        <_>\n          8 13 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 13 3 -1.</_>\n        <_>\n          7 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 2 -1.</_>\n        <_>\n          10 7 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 6 -1.</_>\n        <_>\n          10 0 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 6 -1.</_>\n        <_>\n          5 0 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 8 13 -1.</_>\n        <_>\n          12 1 4 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 13 -1.</_>\n        <_>\n          4 1 4 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 18 -1.</_>\n        <_>\n          15 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 4 -1.</_>\n        <_>\n          8 0 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 18 -1.</_>\n        <_>\n          15 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 18 -1.</_>\n        <_>\n          3 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 6 -1.</_>\n        <_>\n          8 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 5 -1.</_>\n        <_>\n          5 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 12 -1.</_>\n        <_>\n          12 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 11 6 -1.</_>\n        <_>\n          4 6 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 5 6 -1.</_>\n        <_>\n          11 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 8 -1.</_>\n        <_>\n          5 6 4 4 2.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 4 -1.</_>\n        <_>\n          6 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 13 2 -1.</_>\n        <_>\n          1 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 14 -1.</_>\n        <_>\n          9 12 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 2 -1.</_>\n        <_>\n          0 1 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          10 9 5 4 2.</_>\n        <_>\n          5 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 8 6 -1.</_>\n        <_>\n          3 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 2 -1.</_>\n        <_>\n          3 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 5 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 14 -1.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 4 8 -1.</_>\n        <_>\n          12 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 4 8 -1.</_>\n        <_>\n          4 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 14 -1.</_>\n        <_>\n          1 4 2 7 2.</_>\n        <_>\n          3 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 20 -1.</_>\n        <_>\n          12 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 5 -1.</_>\n        <_>\n          9 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 20 -1.</_>\n        <_>\n          12 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 14 -1.</_>\n        <_>\n          2 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 20 -1.</_>\n        <_>\n          12 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 20 -1.</_>\n        <_>\n          7 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 7 -1.</_>\n        <_>\n          16 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 7 -1.</_>\n        <_>\n          2 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 14 -1.</_>\n        <_>\n          7 1 6 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 13 -1.</_>\n        <_>\n          11 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 16 4 -1.</_>\n        <_>\n          12 10 8 2 2.</_>\n        <_>\n          4 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 4 -1.</_>\n        <_>\n          0 10 9 2 2.</_>\n        <_>\n          9 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 6 -1.</_>\n        <_>\n          1 4 7 3 2.</_>\n        <_>\n          8 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 10 -1.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 9 10 -1.</_>\n        <_>\n          5 8 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 10 -1.</_>\n        <_>\n          11 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 10 -1.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 20 -1.</_>\n        <_>\n          6 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          7 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 8 -1.</_>\n        <_>\n          8 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 4 -1.</_>\n        <_>\n          0 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 16 10 -1.</_>\n        <_>\n          11 0 8 5 2.</_>\n        <_>\n          3 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 2 -1.</_>\n        <_>\n          0 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 8 -1.</_>\n        <_>\n          4 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 13 3 -1.</_>\n        <_>\n          0 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 13 2 -1.</_>\n        <_>\n          6 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 5 9 -1.</_>\n        <_>\n          4 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 13 2 -1.</_>\n        <_>\n          5 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 6 12 -1.</_>\n        <_>\n          17 7 3 6 2.</_>\n        <_>\n          14 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 12 4 -1.</_>\n        <_>\n          7 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 15 5 -1.</_>\n        <_>\n          7 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 15 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 12 -1.</_>\n        <_>\n          10 0 3 6 2.</_>\n        <_>\n          7 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 10 -1.</_>\n        <_>\n          8 3 4 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          8 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 8 -1.</_>\n        <_>\n          0 7 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 12 -1.</_>\n        <_>\n          0 7 3 6 2.</_>\n        <_>\n          3 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 2 14 -1.</_>\n        <_>\n          12 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 8 -1.</_>\n        <_>\n          2 0 8 4 2.</_>\n        <_>\n          10 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 9 -1.</_>\n        <_>\n          9 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 8 -1.</_>\n        <_>\n          0 12 4 4 2.</_>\n        <_>\n          4 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 16 4 -1.</_>\n        <_>\n          0 10 8 2 2.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          10 2 10 2 2.</_>\n        <_>\n          0 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 14 -1.</_>\n        <_>\n          3 5 2 7 2.</_>\n        <_>\n          5 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 11 9 -1.</_>\n        <_>\n          5 13 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 4 9 -1.</_>\n        <_>\n          4 9 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 3 -1.</_>\n        <_>\n          3 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 15 -1.</_>\n        <_>\n          3 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 13 3 -1.</_>\n        <_>\n          7 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 7 -1.</_>\n        <_>\n          14 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 7 -1.</_>\n        <_>\n          3 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 17 -1.</_>\n        <_>\n          14 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 13 -1.</_>\n        <_>\n          10 4 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 9 -1.</_>\n        <_>\n          10 6 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 12 9 -1.</_>\n        <_>\n          6 6 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          10 14 7 2 2.</_>\n        <_>\n          3 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 4 -1.</_>\n        <_>\n          3 5 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          10 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 11 6 -1.</_>\n        <_>\n          0 16 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 17 -1.</_>\n        <_>\n          5 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 17 -1.</_>\n        <_>\n          14 3 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 9 -1.</_>\n        <_>\n          7 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 9 6 -1.</_>\n        <_>\n          12 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 17 -1.</_>\n        <_>\n          5 3 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 3 -1.</_>\n        <_>\n          5 15 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 9 6 -1.</_>\n        <_>\n          7 10 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 10 -1.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 14 2 -1.</_>\n        <_>\n          5 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 13 3 -1.</_>\n        <_>\n          0 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 17 6 -1.</_>\n        <_>\n          3 15 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 8 4 -1.</_>\n        <_>\n          6 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 2 -1.</_>\n        <_>\n          6 8 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          6 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 4 -1.</_>\n        <_>\n          12 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 14 -1.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 7 -1.</_>\n        <_>\n          14 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 4 -1.</_>\n        <_>\n          4 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 7 -1.</_>\n        <_>\n          14 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 7 -1.</_>\n        <_>\n          3 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 16 4 -1.</_>\n        <_>\n          10 13 8 2 2.</_>\n        <_>\n          2 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 14 -1.</_>\n        <_>\n          5 9 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 13 2 -1.</_>\n        <_>\n          7 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 3 -1.</_>\n        <_>\n          4 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 4 -1.</_>\n        <_>\n          5 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 3 -1.</_>\n        <_>\n          9 0 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 8 4 -1.</_>\n        <_>\n          11 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 18 15 -1.</_>\n        <_>\n          0 8 18 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 8 -1.</_>\n        <_>\n          2 13 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 4 -1.</_>\n        <_>\n          0 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          10 5 6 6 2.</_>\n        <_>\n          4 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 5 -1.</_>\n        <_>\n          8 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 16 -1.</_>\n        <_>\n          18 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 16 -1.</_>\n        <_>\n          0 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 6 10 -1.</_>\n        <_>\n          17 7 3 5 2.</_>\n        <_>\n          14 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 12 6 -1.</_>\n        <_>\n          0 2 6 3 2.</_>\n        <_>\n          6 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 10 -1.</_>\n        <_>\n          15 0 5 5 2.</_>\n        <_>\n          10 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 10 -1.</_>\n        <_>\n          0 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 18 4 -1.</_>\n        <_>\n          11 7 9 2 2.</_>\n        <_>\n          2 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 14 -1.</_>\n        <_>\n          5 3 3 7 2.</_>\n        <_>\n          8 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 13 -1.</_>\n        <_>\n          10 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 10 -1.</_>\n        <_>\n          0 7 3 5 2.</_>\n        <_>\n          3 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 13 -1.</_>\n        <_>\n          14 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 8 4 -1.</_>\n        <_>\n          5 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 15 5 -1.</_>\n        <_>\n          10 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 4 13 -1.</_>\n        <_>\n          9 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 13 3 -1.</_>\n        <_>\n          7 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 8 -1.</_>\n        <_>\n          2 0 8 4 2.</_>\n        <_>\n          10 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 11 -1.</_>\n        <_>\n          15 7 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 10 -1.</_>\n        <_>\n          7 9 3 5 2.</_>\n        <_>\n          10 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 8 -1.</_>\n        <_>\n          10 5 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 3 13 -1.</_>\n        <_>\n          5 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 12 -1.</_>\n        <_>\n          10 8 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 7 -1.</_>\n        <_>\n          9 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 4 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 4 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 8 -1.</_>\n        <_>\n          16 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 9 8 -1.</_>\n        <_>\n          7 5 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 4 8 -1.</_>\n        <_>\n          16 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 15 -1.</_>\n        <_>\n          4 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 13 2 -1.</_>\n        <_>\n          5 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 4 13 -1.</_>\n        <_>\n          3 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 9 15 -1.</_>\n        <_>\n          11 1 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 9 15 -1.</_>\n        <_>\n          6 1 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 9 6 -1.</_>\n        <_>\n          12 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 7 -1.</_>\n        <_>\n          2 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 10 -1.</_>\n        <_>\n          7 1 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 10 8 -1.</_>\n        <_>\n          15 8 5 4 2.</_>\n        <_>\n          10 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 10 8 -1.</_>\n        <_>\n          0 8 5 4 2.</_>\n        <_>\n          5 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 12 11 -1.</_>\n        <_>\n          9 9 6 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 3 -1.</_>\n        <_>\n          6 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 16 -1.</_>\n        <_>\n          3 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 8 10 -1.</_>\n        <_>\n          12 3 4 5 2.</_>\n        <_>\n          8 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 8 10 -1.</_>\n        <_>\n          4 3 4 5 2.</_>\n        <_>\n          8 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 9 6 -1.</_>\n        <_>\n          10 14 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 9 6 -1.</_>\n        <_>\n          1 14 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 14 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 9 18 -1.</_>\n        <_>\n          1 6 9 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 4 -1.</_>\n        <_>\n          8 5 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 7 9 -1.</_>\n        <_>\n          1 8 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 7 -1.</_>\n        <_>\n          11 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 7 -1.</_>\n        <_>\n          7 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 15 4 -1.</_>\n        <_>\n          9 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 15 3 -1.</_>\n        <_>\n          5 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 18 -1.</_>\n        <_>\n          8 2 6 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 16 -1.</_>\n        <_>\n          7 4 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 6 -1.</_>\n        <_>\n          9 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 5 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 5 9 -1.</_>\n        <_>\n          0 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 9 -1.</_>\n        <_>\n          13 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 9 -1.</_>\n        <_>\n          1 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 4 -1.</_>\n        <_>\n          5 9 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 12 -1.</_>\n        <_>\n          1 9 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 14 -1.</_>\n        <_>\n          2 11 13 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 6 -1.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 8 -1.</_>\n        <_>\n          2 5 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 6 -1.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 11 6 -1.</_>\n        <_>\n          4 2 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 2 -1.</_>\n        <_>\n          2 3 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 12 5 -1.</_>\n        <_>\n          10 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 6 -1.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 4 -1.</_>\n        <_>\n          6 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 6 6 -1.</_>\n        <_>\n          12 10 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 14 -1.</_>\n        <_>\n          1 5 3 7 2.</_>\n        <_>\n          4 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 9 13 -1.</_>\n        <_>\n          13 2 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 6 -1.</_>\n        <_>\n          7 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 9 -1.</_>\n        <_>\n          12 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 9 -1.</_>\n        <_>\n          5 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 2 -1.</_>\n        <_>\n          5 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 3 -1.</_>\n        <_>\n          2 10 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 5 6 -1.</_>\n        <_>\n          12 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 5 6 -1.</_>\n        <_>\n          3 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          0 13 10 2 2.</_>\n        <_>\n          10 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 6 -1.</_>\n        <_>\n          2 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 10 -1.</_>\n        <_>\n          9 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 3 13 -1.</_>\n        <_>\n          2 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 16 -1.</_>\n        <_>\n          12 4 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 16 -1.</_>\n        <_>\n          6 4 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 9 5 -1.</_>\n        <_>\n          10 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 12 4 -1.</_>\n        <_>\n          8 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          10 3 5 3 2.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 14 2 -1.</_>\n        <_>\n          6 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 8 4 -1.</_>\n        <_>\n          7 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          4 2 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 15 -1.</_>\n        <_>\n          0 7 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 6 -1.</_>\n        <_>\n          3 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 14 2 -1.</_>\n        <_>\n          3 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 10 3 -1.</_>\n        <_>\n          9 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 16 8 -1.</_>\n        <_>\n          4 12 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 16 8 -1.</_>\n        <_>\n          8 12 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 10 -1.</_>\n        <_>\n          16 9 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 11 12 -1.</_>\n        <_>\n          2 11 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 12 -1.</_>\n        <_>\n          9 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 15 -1.</_>\n        <_>\n          2 6 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 7 2 13 -1.</_>\n        <_>\n          17 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 2 13 -1.</_>\n        <_>\n          2 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 4 -1.</_>\n        <_>\n          10 1 10 2 2.</_>\n        <_>\n          0 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 6 -1.</_>\n        <_>\n          6 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 6 -1.</_>\n        <_>\n          8 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          12 0 4 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          8 7 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 5 -1.</_>\n        <_>\n          8 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 12 9 -1.</_>\n        <_>\n          12 10 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 9 5 -1.</_>\n        <_>\n          7 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 3 -1.</_>\n        <_>\n          7 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 8 4 -1.</_>\n        <_>\n          12 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 15 16 -1.</_>\n        <_>\n          3 12 15 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 4 -1.</_>\n        <_>\n          0 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 9 -1.</_>\n        <_>\n          9 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 8 9 -1.</_>\n        <_>\n          4 14 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 9 8 -1.</_>\n        <_>\n          14 3 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 9 8 -1.</_>\n        <_>\n          3 4 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 10 -1.</_>\n        <_>\n          12 4 3 5 2.</_>\n        <_>\n          9 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 4 -1.</_>\n        <_>\n          0 6 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 3 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 13 3 -1.</_>\n        <_>\n          3 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_>\n        <_>\n          5 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 8 -1.</_>\n        <_>\n          11 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 8 4 -1.</_>\n        <_>\n          10 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 8 -1.</_>\n        <_>\n          1 6 9 4 2.</_>\n        <_>\n          10 10 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 3 -1.</_>\n        <_>\n          4 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 13 2 -1.</_>\n        <_>\n          1 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 8 8 -1.</_>\n        <_>\n          13 12 4 4 2.</_>\n        <_>\n          9 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 5 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 2 16 -1.</_>\n        <_>\n          0 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 9 -1.</_>\n        <_>\n          15 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 10 -1.</_>\n        <_>\n          2 5 8 5 2.</_>\n        <_>\n          10 10 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 2 -1.</_>\n        <_>\n          6 8 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          12 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 14 -1.</_>\n        <_>\n          10 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          9 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 13 -1.</_>\n        <_>\n          7 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 15 3 -1.</_>\n        <_>\n          8 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 6 -1.</_>\n        <_>\n          12 13 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 7 -1.</_>\n        <_>\n          11 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 10 -1.</_>\n        <_>\n          5 9 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 18 -1.</_>\n        <_>\n          15 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 7 -1.</_>\n        <_>\n          11 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          10 2 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 18 -1.</_>\n        <_>\n          15 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 4 -1.</_>\n        <_>\n          4 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 3 -1.</_>\n        <_>\n          6 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 3 -1.</_>\n        <_>\n          0 7 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 5 9 -1.</_>\n        <_>\n          1 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 16 6 -1.</_>\n        <_>\n          1 4 8 3 2.</_>\n        <_>\n          9 7 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 10 6 -1.</_>\n        <_>\n          9 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 6 -1.</_>\n        <_>\n          4 5 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 8 -1.</_>\n        <_>\n          9 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 9 6 -1.</_>\n        <_>\n          1 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 9 5 -1.</_>\n        <_>\n          11 3 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 3 16 -1.</_>\n        <_>\n          4 3 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 17 -1.</_>\n        <_>\n          15 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 9 7 -1.</_>\n        <_>\n          3 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 7 12 -1.</_>\n        <_>\n          8 4 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 9 -1.</_>\n        <_>\n          0 6 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 10 5 -1.</_>\n        <_>\n          9 9 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 5 -1.</_>\n        <_>\n          6 9 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 3 -1.</_>\n        <_>\n          9 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 3 -1.</_>\n        <_>\n          6 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_>\n        <_>\n          5 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 8 8 -1.</_>\n        <_>\n          3 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 2 -1.</_>\n        <_>\n          0 1 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 8 8 -1.</_>\n        <_>\n          12 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 8 8 -1.</_>\n        <_>\n          4 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 13 4 -1.</_>\n        <_>\n          7 17 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 6 -1.</_>\n        <_>\n          0 14 6 3 2.</_>\n        <_>\n          6 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 8 -1.</_>\n        <_>\n          16 11 4 4 2.</_>\n        <_>\n          12 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 8 8 -1.</_>\n        <_>\n          0 11 4 4 2.</_>\n        <_>\n          4 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 19 -1.</_>\n        <_>\n          6 0 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 3 -1.</_>\n        <_>\n          0 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 12 -1.</_>\n        <_>\n          7 8 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 9 4 -1.</_>\n        <_>\n          11 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 8 6 -1.</_>\n        <_>\n          11 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 8 6 -1.</_>\n        <_>\n          1 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 8 -1.</_>\n        <_>\n          4 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 15 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 10 -1.</_>\n        <_>\n          8 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 5 9 -1.</_>\n        <_>\n          2 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 16 3 -1.</_>\n        <_>\n          3 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 12 7 -1.</_>\n        <_>\n          9 13 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 3 15 -1.</_>\n        <_>\n          11 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 15 -1.</_>\n        <_>\n          8 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 4 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 7 12 -1.</_>\n        <_>\n          5 4 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 4 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 4 8 -1.</_>\n        <_>\n          3 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 5 -1.</_>\n        <_>\n          9 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 16 -1.</_>\n        <_>\n          7 0 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 8 8 -1.</_>\n        <_>\n          2 8 4 4 2.</_>\n        <_>\n          6 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 8 -1.</_>\n        <_>\n          12 8 8 4 2.</_>\n        <_>\n          4 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 16 3 -1.</_>\n        <_>\n          9 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 4 -1.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 7 4 -1.</_>\n        <_>\n          3 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 10 19 -1.</_>\n        <_>\n          9 0 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 5 -1.</_>\n        <_>\n          7 4 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 3 -1.</_>\n        <_>\n          2 1 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 7 9 -1.</_>\n        <_>\n          5 10 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 14 3 -1.</_>\n        <_>\n          4 6 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 7 6 -1.</_>\n        <_>\n          2 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 8 -1.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 18 -1.</_>\n        <_>\n          5 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 10 -1.</_>\n        <_>\n          15 0 5 5 2.</_>\n        <_>\n          10 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 14 3 -1.</_>\n        <_>\n          0 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 13 3 -1.</_>\n        <_>\n          6 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 13 -1.</_>\n        <_>\n          6 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 7 -1.</_>\n        <_>\n          6 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 3 -1.</_>\n        <_>\n          8 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 3 -1.</_>\n        <_>\n          6 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 17 3 -1.</_>\n        <_>\n          2 18 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 19 -1.</_>\n        <_>\n          9 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 12 -1.</_>\n        <_>\n          4 6 12 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 13 3 -1.</_>\n        <_>\n          0 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 11 12 -1.</_>\n        <_>\n          4 12 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 5 6 -1.</_>\n        <_>\n          12 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 5 6 -1.</_>\n        <_>\n          3 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 17 -1.</_>\n        <_>\n          4 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 8 -1.</_>\n        <_>\n          5 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 14 -1.</_>\n        <_>\n          7 8 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 8 -1.</_>\n        <_>\n          2 4 15 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 3 -1.</_>\n        <_>\n          7 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 16 -1.</_>\n        <_>\n          5 2 5 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 12 -1.</_>\n        <_>\n          5 6 15 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          9 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 15 5 -1.</_>\n        <_>\n          10 1 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 9 -1.</_>\n        <_>\n          4 8 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 6 -1.</_>\n        <_>\n          11 5 5 3 2.</_>\n        <_>\n          6 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 12 -1.</_>\n        <_>\n          5 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 4 -1.</_>\n        <_>\n          13 2 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 12 -1.</_>\n        <_>\n          0 8 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 3 -1.</_>\n        <_>\n          4 8 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 11 12 -1.</_>\n        <_>\n          4 14 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 3 -1.</_>\n        <_>\n          2 2 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 11 6 -1.</_>\n        <_>\n          4 4 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 8 6 -1.</_>\n        <_>\n          11 11 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 13 3 -1.</_>\n        <_>\n          0 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 3 -1.</_>\n        <_>\n          2 5 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 10 -1.</_>\n        <_>\n          0 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 13 3 -1.</_>\n        <_>\n          6 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 7 -1.</_>\n        <_>\n          2 7 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 6 -1.</_>\n        <_>\n          11 6 5 3 2.</_>\n        <_>\n          6 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 9 -1.</_>\n        <_>\n          9 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 13 -1.</_>\n        <_>\n          10 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 13 -1.</_>\n        <_>\n          9 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 12 -1.</_>\n        <_>\n          10 1 4 6 2.</_>\n        <_>\n          6 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 10 -1.</_>\n        <_>\n          12 3 3 5 2.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 15 6 -1.</_>\n        <_>\n          2 3 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 16 -1.</_>\n        <_>\n          8 1 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 14 6 -1.</_>\n        <_>\n          9 1 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 13 3 -1.</_>\n        <_>\n          7 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 14 -1.</_>\n        <_>\n          8 1 6 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 14 -1.</_>\n        <_>\n          6 1 6 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 18 13 -1.</_>\n        <_>\n          8 3 6 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 13 2 -1.</_>\n        <_>\n          7 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 10 6 -1.</_>\n        <_>\n          5 13 5 3 2.</_>\n        <_>\n          10 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 12 6 -1.</_>\n        <_>\n          13 2 6 3 2.</_>\n        <_>\n          7 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 6 -1.</_>\n        <_>\n          4 2 6 3 2.</_>\n        <_>\n          10 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 4 8 -1.</_>\n        <_>\n          12 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 8 -1.</_>\n        <_>\n          0 8 8 4 2.</_>\n        <_>\n          8 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 4 8 -1.</_>\n        <_>\n          0 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 12 -1.</_>\n        <_>\n          13 2 3 6 2.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 14 -1.</_>\n        <_>\n          0 7 20 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 7 6 -1.</_>\n        <_>\n          11 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 8 6 -1.</_>\n        <_>\n          1 11 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 15 -1.</_>\n        <_>\n          13 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 7 15 -1.</_>\n        <_>\n          0 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 6 -1.</_>\n        <_>\n          4 6 5 3 2.</_>\n        <_>\n          9 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 12 4 -1.</_>\n        <_>\n          5 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 2 19 -1.</_>\n        <_>\n          14 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 19 -1.</_>\n        <_>\n          5 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 6 -1.</_>\n        <_>\n          12 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 5 6 -1.</_>\n        <_>\n          3 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          12 6 5 3 2.</_>\n        <_>\n          7 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 9 5 -1.</_>\n        <_>\n          6 11 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 16 -1.</_>\n        <_>\n          8 1 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 16 -1.</_>\n        <_>\n          6 1 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 9 5 -1.</_>\n        <_>\n          9 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 10 -1.</_>\n        <_>\n          2 10 8 5 2.</_>\n        <_>\n          10 15 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 14 -1.</_>\n        <_>\n          14 0 2 7 2.</_>\n        <_>\n          12 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 14 -1.</_>\n        <_>\n          4 0 2 7 2.</_>\n        <_>\n          6 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 9 -1.</_>\n        <_>\n          12 7 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 9 -1.</_>\n        <_>\n          6 7 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 2 20 -1.</_>\n        <_>\n          16 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 2 20 -1.</_>\n        <_>\n          3 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 14 -1.</_>\n        <_>\n          5 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 3 -1.</_>\n        <_>\n          6 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 9 6 -1.</_>\n        <_>\n          6 14 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 6 -1.</_>\n        <_>\n          5 5 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 10 3 -1.</_>\n        <_>\n          10 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 8 4 -1.</_>\n        <_>\n          4 3 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 4 -1.</_>\n        <_>\n          10 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 12 -1.</_>\n        <_>\n          6 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 8 -1.</_>\n        <_>\n          16 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 18 -1.</_>\n        <_>\n          9 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 8 -1.</_>\n        <_>\n          2 1 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 6 -1.</_>\n        <_>\n          14 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 3 -1.</_>\n        <_>\n          0 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          3 10 7 2 2.</_>\n        <_>\n          10 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 17 2 -1.</_>\n        <_>\n          3 9 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 14 12 -1.</_>\n        <_>\n          0 11 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 6 -1.</_>\n        <_>\n          3 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 7 -1.</_>\n        <_>\n          9 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 2 -1.</_>\n        <_>\n          8 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 15 -1.</_>\n        <_>\n          8 5 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 14 -1.</_>\n        <_>\n          8 6 3 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 8 -1.</_>\n        <_>\n          12 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 5 -1.</_>\n        <_>\n          8 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 12 -1.</_>\n        <_>\n          11 5 5 6 2.</_>\n        <_>\n          6 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 14 -1.</_>\n        <_>\n          3 5 6 7 2.</_>\n        <_>\n          9 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 3 -1.</_>\n        <_>\n          7 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 9 12 -1.</_>\n        <_>\n          5 11 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 14 -1.</_>\n        <_>\n          13 6 2 7 2.</_>\n        <_>\n          11 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 14 -1.</_>\n        <_>\n          5 6 2 7 2.</_>\n        <_>\n          7 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 17 2 -1.</_>\n        <_>\n          3 2 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 16 -1.</_>\n        <_>\n          7 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          8 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 15 -1.</_>\n        <_>\n          8 5 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 15 -1.</_>\n        <_>\n          6 5 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 12 19 -1.</_>\n        <_>\n          6 0 4 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 11 4 -1.</_>\n        <_>\n          9 14 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 6 -1.</_>\n        <_>\n          0 6 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 4 -1.</_>\n        <_>\n          5 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 12 4 -1.</_>\n        <_>\n          5 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 3 -1.</_>\n        <_>\n          6 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 14 3 -1.</_>\n        <_>\n          0 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 13 6 -1.</_>\n        <_>\n          5 6 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 11 4 -1.</_>\n        <_>\n          0 14 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 4 -1.</_>\n        <_>\n          0 2 10 2 2.</_>\n        <_>\n          10 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 5 -1.</_>\n        <_>\n          14 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 5 6 -1.</_>\n        <_>\n          4 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 10 18 -1.</_>\n        <_>\n          6 10 10 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          0 8 3 6 2.</_>\n        <_>\n          3 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 10 6 -1.</_>\n        <_>\n          14 9 5 3 2.</_>\n        <_>\n          9 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 10 6 -1.</_>\n        <_>\n          1 9 5 3 2.</_>\n        <_>\n          6 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 13 -1.</_>\n        <_>\n          16 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 13 -1.</_>\n        <_>\n          3 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 13 -1.</_>\n        <_>\n          18 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 13 -1.</_>\n        <_>\n          1 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 16 -1.</_>\n        <_>\n          16 4 3 8 2.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 14 -1.</_>\n        <_>\n          4 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 3 13 -1.</_>\n        <_>\n          17 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 3 13 -1.</_>\n        <_>\n          2 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 9 9 -1.</_>\n        <_>\n          8 9 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 14 2 -1.</_>\n        <_>\n          0 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 6 -1.</_>\n        <_>\n          12 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 6 -1.</_>\n        <_>\n          5 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 9 6 -1.</_>\n        <_>\n          10 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          9 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 20 -1.</_>\n        <_>\n          1 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          16 5 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          16 5 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 4 14 -1.</_>\n        <_>\n          2 5 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 4 -1.</_>\n        <_>\n          10 11 10 2 2.</_>\n        <_>\n          0 13 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          10 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 9 6 -1.</_>\n        <_>\n          10 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 9 6 -1.</_>\n        <_>\n          1 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 5 8 -1.</_>\n        <_>\n          11 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 11 -1.</_>\n        <_>\n          11 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 11 -1.</_>\n        <_>\n          7 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          10 1 3 5 2.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 10 5 -1.</_>\n        <_>\n          8 2 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 17 3 -1.</_>\n        <_>\n          2 18 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 14 3 -1.</_>\n        <_>\n          0 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 4 10 -1.</_>\n        <_>\n          7 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 6 -1.</_>\n        <_>\n          2 14 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 13 3 -1.</_>\n        <_>\n          5 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 12 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 6 -1.</_>\n        <_>\n          13 1 7 3 2.</_>\n        <_>\n          6 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 6 -1.</_>\n        <_>\n          3 3 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 11 6 -1.</_>\n        <_>\n          9 7 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 3 13 -1.</_>\n        <_>\n          6 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 4 14 -1.</_>\n        <_>\n          17 5 2 7 2.</_>\n        <_>\n          15 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 6 -1.</_>\n        <_>\n          10 10 7 3 2.</_>\n        <_>\n          3 13 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 3 -1.</_>\n        <_>\n          5 15 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 14 6 -1.</_>\n        <_>\n          0 1 7 3 2.</_>\n        <_>\n          7 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 14 4 -1.</_>\n        <_>\n          10 16 7 2 2.</_>\n        <_>\n          3 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 10 -1.</_>\n        <_>\n          0 1 3 5 2.</_>\n        <_>\n          3 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 8 8 -1.</_>\n        <_>\n          14 3 4 4 2.</_>\n        <_>\n          10 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 6 -1.</_>\n        <_>\n          1 5 5 3 2.</_>\n        <_>\n          6 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 2 14 -1.</_>\n        <_>\n          14 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 14 -1.</_>\n        <_>\n          4 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 4 -1.</_>\n        <_>\n          4 10 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 8 8 -1.</_>\n        <_>\n          2 3 4 4 2.</_>\n        <_>\n          6 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 2 16 -1.</_>\n        <_>\n          17 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 4 14 -1.</_>\n        <_>\n          1 5 2 7 2.</_>\n        <_>\n          3 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 10 -1.</_>\n        <_>\n          8 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 8 10 -1.</_>\n        <_>\n          4 2 4 5 2.</_>\n        <_>\n          8 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 10 8 -1.</_>\n        <_>\n          13 5 5 4 2.</_>\n        <_>\n          8 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 7 -1.</_>\n        <_>\n          16 1 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 2 16 -1.</_>\n        <_>\n          1 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 12 -1.</_>\n        <_>\n          0 6 20 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 4 -1.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 13 6 -1.</_>\n        <_>\n          2 12 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 16 14 -1.</_>\n        <_>\n          2 9 16 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 8 -1.</_>\n        <_>\n          4 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 15 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 4 -1.</_>\n        <_>\n          10 14 9 2 2.</_>\n        <_>\n          1 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 5 -1.</_>\n        <_>\n          4 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 19 -1.</_>\n        <_>\n          13 1 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 19 -1.</_>\n        <_>\n          4 1 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 14 3 -1.</_>\n        <_>\n          6 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 3 -1.</_>\n        <_>\n          0 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 7 6 -1.</_>\n        <_>\n          8 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 9 14 -1.</_>\n        <_>\n          3 3 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 9 6 -1.</_>\n        <_>\n          10 10 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 16 4 -1.</_>\n        <_>\n          0 1 8 2 2.</_>\n        <_>\n          8 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 7 -1.</_>\n        <_>\n          16 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 10 6 -1.</_>\n        <_>\n          0 10 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 7 -1.</_>\n        <_>\n          16 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 7 -1.</_>\n        <_>\n          2 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 12 14 -1.</_>\n        <_>\n          11 3 6 7 2.</_>\n        <_>\n          5 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 10 -1.</_>\n        <_>\n          7 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          16 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          2 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 8 -1.</_>\n        <_>\n          9 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 6 -1.</_>\n        <_>\n          8 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 14 -1.</_>\n        <_>\n          1 4 2 7 2.</_>\n        <_>\n          3 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 6 -1.</_>\n        <_>\n          10 1 10 3 2.</_>\n        <_>\n          0 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 6 -1.</_>\n        <_>\n          5 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 6 -1.</_>\n        <_>\n          0 5 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 8 -1.</_>\n        <_>\n          5 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 16 -1.</_>\n        <_>\n          15 4 2 8 2.</_>\n        <_>\n          13 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 18 -1.</_>\n        <_>\n          6 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 16 -1.</_>\n        <_>\n          15 4 2 8 2.</_>\n        <_>\n          13 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 16 -1.</_>\n        <_>\n          3 4 2 8 2.</_>\n        <_>\n          5 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 9 4 -1.</_>\n        <_>\n          6 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 12 -1.</_>\n        <_>\n          8 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          10 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 18 -1.</_>\n        <_>\n          17 2 3 9 2.</_>\n        <_>\n          14 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 10 8 -1.</_>\n        <_>\n          13 5 5 4 2.</_>\n        <_>\n          8 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 10 8 -1.</_>\n        <_>\n          2 5 5 4 2.</_>\n        <_>\n          7 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 16 12 -1.</_>\n        <_>\n          4 2 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 12 -1.</_>\n        <_>\n          8 2 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 4 7 -1.</_>\n        <_>\n          11 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 7 -1.</_>\n        <_>\n          7 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 4 -1.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 10 -1.</_>\n        <_>\n          6 5 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 10 8 -1.</_>\n        <_>\n          11 10 5 4 2.</_>\n        <_>\n          6 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 6 9 -1.</_>\n        <_>\n          4 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 18 -1.</_>\n        <_>\n          4 0 6 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 9 17 -1.</_>\n        <_>\n          7 1 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 8 -1.</_>\n        <_>\n          11 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 7 -1.</_>\n        <_>\n          8 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 9 -1.</_>\n        <_>\n          5 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 7 4 -1.</_>\n        <_>\n          4 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 10 8 -1.</_>\n        <_>\n          11 10 5 4 2.</_>\n        <_>\n          6 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 14 4 -1.</_>\n        <_>\n          12 7 7 2 2.</_>\n        <_>\n          5 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 7 -1.</_>\n        <_>\n          8 10 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 16 -1.</_>\n        <_>\n          11 2 6 8 2.</_>\n        <_>\n          5 10 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 14 4 -1.</_>\n        <_>\n          1 7 7 2 2.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 15 14 -1.</_>\n        <_>\n          3 12 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 9 9 -1.</_>\n        <_>\n          8 9 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          7 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 11 -1.</_>\n        <_>\n          11 4 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 14 8 -1.</_>\n        <_>\n          8 12 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 11 -1.</_>\n        <_>\n          11 4 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 15 -1.</_>\n        <_>\n          7 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 6 -1.</_>\n        <_>\n          8 2 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 12 14 -1.</_>\n        <_>\n          3 3 6 7 2.</_>\n        <_>\n          9 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 7 -1.</_>\n        <_>\n          9 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 7 -1.</_>\n        <_>\n          9 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 9 -1.</_>\n        <_>\n          8 3 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 6 -1.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 14 3 -1.</_>\n        <_>\n          6 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 12 8 -1.</_>\n        <_>\n          6 12 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 12 -1.</_>\n        <_>\n          6 8 3 6 2.</_>\n        <_>\n          9 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 20 -1.</_>\n        <_>\n          6 10 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 13 -1.</_>\n        <_>\n          10 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 12 6 -1.</_>\n        <_>\n          8 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 13 -1.</_>\n        <_>\n          10 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 6 -1.</_>\n        <_>\n          8 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 6 7 -1.</_>\n        <_>\n          10 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 7 6 -1.</_>\n        <_>\n          3 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 5 12 -1.</_>\n        <_>\n          12 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 9 4 -1.</_>\n        <_>\n          4 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 14 3 -1.</_>\n        <_>\n          6 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 19 -1.</_>\n        <_>\n          13 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 13 -1.</_>\n        <_>\n          8 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 9 5 -1.</_>\n        <_>\n          13 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 9 5 -1.</_>\n        <_>\n          4 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 9 -1.</_>\n        <_>\n          8 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 5 12 -1.</_>\n        <_>\n          12 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 12 -1.</_>\n        <_>\n          3 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 6 9 -1.</_>\n        <_>\n          10 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 12 4 -1.</_>\n        <_>\n          4 18 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 18 4 -1.</_>\n        <_>\n          11 14 9 2 2.</_>\n        <_>\n          2 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 7 4 -1.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 8 -1.</_>\n        <_>\n          5 14 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 7 4 -1.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 7 4 -1.</_>\n        <_>\n          8 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 6 -1.</_>\n        <_>\n          9 10 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 2 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 8 -1.</_>\n        <_>\n          8 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 3 10 -1.</_>\n        <_>\n          8 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 8 14 -1.</_>\n        <_>\n          12 1 4 7 2.</_>\n        <_>\n          8 8 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 19 -1.</_>\n        <_>\n          6 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 10 -1.</_>\n        <_>\n          12 10 3 5 2.</_>\n        <_>\n          9 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 14 -1.</_>\n        <_>\n          0 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 2 14 -1.</_>\n        <_>\n          18 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 2 14 -1.</_>\n        <_>\n          0 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 10 -1.</_>\n        <_>\n          13 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 18 -1.</_>\n        <_>\n          1 9 18 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 4 -1.</_>\n        <_>\n          10 16 9 2 2.</_>\n        <_>\n          1 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 6 -1.</_>\n        <_>\n          5 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 13 9 -1.</_>\n        <_>\n          4 10 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 10 -1.</_>\n        <_>\n          5 5 5 5 2.</_>\n        <_>\n          10 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 8 10 -1.</_>\n        <_>\n          12 4 4 5 2.</_>\n        <_>\n          8 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 4 -1.</_>\n        <_>\n          3 7 7 2 2.</_>\n        <_>\n          10 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 2 -1.</_>\n        <_>\n          1 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 14 3 -1.</_>\n        <_>\n          6 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 13 3 -1.</_>\n        <_>\n          0 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 6 -1.</_>\n        <_>\n          4 4 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 7 6 -1.</_>\n        <_>\n          0 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 6 -1.</_>\n        <_>\n          10 5 8 3 2.</_>\n        <_>\n          2 8 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 18 -1.</_>\n        <_>\n          18 2 2 9 2.</_>\n        <_>\n          16 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 15 -1.</_>\n        <_>\n          6 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 7 6 -1.</_>\n        <_>\n          10 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 14 -1.</_>\n        <_>\n          4 0 2 7 2.</_>\n        <_>\n          6 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 10 6 -1.</_>\n        <_>\n          11 3 5 3 2.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 10 6 -1.</_>\n        <_>\n          4 3 5 3 2.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 12 -1.</_>\n        <_>\n          4 8 13 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 7 -1.</_>\n        <_>\n          5 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 9 -1.</_>\n        <_>\n          11 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 13 -1.</_>\n        <_>\n          2 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 9 -1.</_>\n        <_>\n          11 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 8 -1.</_>\n        <_>\n          7 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 15 6 -1.</_>\n        <_>\n          5 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          10 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 4 10 -1.</_>\n        <_>\n          13 6 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 12 5 -1.</_>\n        <_>\n          9 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 4 -1.</_>\n        <_>\n          7 2 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 13 3 -1.</_>\n        <_>\n          3 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 9 6 -1.</_>\n        <_>\n          10 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          0 3 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 11 -1.</_>\n        <_>\n          5 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 17 -1.</_>\n        <_>\n          14 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 9 -1.</_>\n        <_>\n          6 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 6 -1.</_>\n        <_>\n          9 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 7 6 -1.</_>\n        <_>\n          2 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 17 -1.</_>\n        <_>\n          14 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 17 -1.</_>\n        <_>\n          5 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 6 -1.</_>\n        <_>\n          8 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 12 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 5 9 -1.</_>\n        <_>\n          10 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 5 9 -1.</_>\n        <_>\n          5 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 18 -1.</_>\n        <_>\n          9 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 7 4 -1.</_>\n        <_>\n          6 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 4 9 -1.</_>\n        <_>\n          16 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 4 9 -1.</_>\n        <_>\n          2 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 18 -1.</_>\n        <_>\n          16 2 3 9 2.</_>\n        <_>\n          13 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 5 12 -1.</_>\n        <_>\n          2 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 17 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 6 -1.</_>\n        <_>\n          3 3 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 16 9 -1.</_>\n        <_>\n          4 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 16 9 -1.</_>\n        <_>\n          8 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 5 8 -1.</_>\n        <_>\n          11 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 9 -1.</_>\n        <_>\n          0 6 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 10 -1.</_>\n        <_>\n          10 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 18 -1.</_>\n        <_>\n          0 2 3 9 2.</_>\n        <_>\n          3 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 15 -1.</_>\n        <_>\n          9 10 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 13 2 -1.</_>\n        <_>\n          0 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 5 9 -1.</_>\n        <_>\n          11 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 14 6 -1.</_>\n        <_>\n          2 1 7 3 2.</_>\n        <_>\n          9 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 12 -1.</_>\n        <_>\n          12 0 3 6 2.</_>\n        <_>\n          9 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 12 -1.</_>\n        <_>\n          5 0 3 6 2.</_>\n        <_>\n          8 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 6 -1.</_>\n        <_>\n          9 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 6 -1.</_>\n        <_>\n          8 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 10 11 -1.</_>\n        <_>\n          8 3 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 10 11 -1.</_>\n        <_>\n          7 3 5 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 12 18 -1.</_>\n        <_>\n          8 2 6 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 19 -1.</_>\n        <_>\n          6 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 5 9 -1.</_>\n        <_>\n          10 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 15 7 2 2.</_>\n        <_>\n          10 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 16 6 -1.</_>\n        <_>\n          4 14 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 6 -1.</_>\n        <_>\n          8 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 14 -1.</_>\n        <_>\n          15 4 2 7 2.</_>\n        <_>\n          13 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 9 -1.</_>\n        <_>\n          3 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 7 -1.</_>\n        <_>\n          12 7 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 3 -1.</_>\n        <_>\n          5 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 9 -1.</_>\n        <_>\n          12 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 8 8 -1.</_>\n        <_>\n          3 12 4 4 2.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 2 -1.</_>\n        <_>\n          2 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 7 6 -1.</_>\n        <_>\n          13 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 5 8 -1.</_>\n        <_>\n          9 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 12 -1.</_>\n        <_>\n          7 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 14 -1.</_>\n        <_>\n          15 4 2 7 2.</_>\n        <_>\n          13 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 14 -1.</_>\n        <_>\n          3 4 2 7 2.</_>\n        <_>\n          5 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 2 -1.</_>\n        <_>\n          3 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          7 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 12 -1.</_>\n        <_>\n          10 10 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 9 5 -1.</_>\n        <_>\n          7 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 16 10 -1.</_>\n        <_>\n          12 4 8 5 2.</_>\n        <_>\n          4 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 16 10 -1.</_>\n        <_>\n          0 4 8 5 2.</_>\n        <_>\n          8 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 12 -1.</_>\n        <_>\n          7 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 13 -1.</_>\n        <_>\n          5 7 5 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 9 8 -1.</_>\n        <_>\n          3 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 2 -1.</_>\n        <_>\n          0 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 4 -1.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 4 8 -1.</_>\n        <_>\n          4 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 4 -1.</_>\n        <_>\n          10 6 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 8 -1.</_>\n        <_>\n          2 0 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 4 -1.</_>\n        <_>\n          3 2 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 9 9 -1.</_>\n        <_>\n          13 0 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 9 9 -1.</_>\n        <_>\n          4 0 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 3 -1.</_>\n        <_>\n          6 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 5 -1.</_>\n        <_>\n          10 4 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 14 4 -1.</_>\n        <_>\n          12 1 7 2 2.</_>\n        <_>\n          5 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 14 4 -1.</_>\n        <_>\n          1 1 7 2 2.</_>\n        <_>\n          8 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 14 -1.</_>\n        <_>\n          0 6 2 7 2.</_>\n        <_>\n          2 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 9 -1.</_>\n        <_>\n          12 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 9 -1.</_>\n        <_>\n          5 12 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 9 -1.</_>\n        <_>\n          8 0 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 5 6 -1.</_>\n        <_>\n          1 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 7 4 -1.</_>\n        <_>\n          11 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 7 8 -1.</_>\n        <_>\n          7 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 3 10 -1.</_>\n        <_>\n          2 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 13 2 -1.</_>\n        <_>\n          7 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 7 4 -1.</_>\n        <_>\n          2 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 10 -1.</_>\n        <_>\n          17 1 3 5 2.</_>\n        <_>\n          14 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 10 -1.</_>\n        <_>\n          0 1 3 5 2.</_>\n        <_>\n          3 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 8 -1.</_>\n        <_>\n          12 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 4 9 -1.</_>\n        <_>\n          8 8 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 4 12 -1.</_>\n        <_>\n          9 1 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 18 -1.</_>\n        <_>\n          10 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 7 12 -1.</_>\n        <_>\n          0 9 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 9 -1.</_>\n        <_>\n          11 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 14 4 -1.</_>\n        <_>\n          3 9 7 2 2.</_>\n        <_>\n          10 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 17 3 -1.</_>\n        <_>\n          3 8 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 10 -1.</_>\n        <_>\n          3 2 3 5 2.</_>\n        <_>\n          6 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 8 -1.</_>\n        <_>\n          10 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 10 -1.</_>\n        <_>\n          0 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 9 -1.</_>\n        <_>\n          2 6 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 8 -1.</_>\n        <_>\n          4 4 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 15 -1.</_>\n        <_>\n          5 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 7 -1.</_>\n        <_>\n          12 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 7 -1.</_>\n        <_>\n          6 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 8 8 -1.</_>\n        <_>\n          2 8 4 4 2.</_>\n        <_>\n          6 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 10 -1.</_>\n        <_>\n          10 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 5 6 -1.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 12 -1.</_>\n        <_>\n          4 7 12 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 9 10 -1.</_>\n        <_>\n          11 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 12 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 9 18 -1.</_>\n        <_>\n          11 7 9 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 10 -1.</_>\n        <_>\n          4 8 6 5 2.</_>\n        <_>\n          10 13 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 10 -1.</_>\n        <_>\n          11 4 3 5 2.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 14 -1.</_>\n        <_>\n          6 0 4 7 2.</_>\n        <_>\n          10 7 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 8 8 -1.</_>\n        <_>\n          12 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 8 8 -1.</_>\n        <_>\n          5 1 4 4 2.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 5 -1.</_>\n        <_>\n          8 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 8 -1.</_>\n        <_>\n          5 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 10 5 -1.</_>\n        <_>\n          5 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 15 -1.</_>\n        <_>\n          6 5 6 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 3 -1.</_>\n        <_>\n          10 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 15 3 -1.</_>\n        <_>\n          5 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 6 -1.</_>\n        <_>\n          11 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 8 -1.</_>\n        <_>\n          15 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          0 0 10 2 2.</_>\n        <_>\n          10 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 14 -1.</_>\n        <_>\n          10 5 3 7 2.</_>\n        <_>\n          7 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 7 4 -1.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 9 -1.</_>\n        <_>\n          11 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 9 -1.</_>\n        <_>\n          4 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_>\n        <_>\n          5 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 8 -1.</_>\n        <_>\n          0 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 4 8 -1.</_>\n        <_>\n          4 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 4 14 -1.</_>\n        <_>\n          16 5 2 7 2.</_>\n        <_>\n          14 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 4 14 -1.</_>\n        <_>\n          2 5 2 7 2.</_>\n        <_>\n          4 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 6 -1.</_>\n        <_>\n          8 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 14 -1.</_>\n        <_>\n          7 2 2 7 2.</_>\n        <_>\n          9 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 14 4 -1.</_>\n        <_>\n          12 7 7 2 2.</_>\n        <_>\n          5 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 14 4 -1.</_>\n        <_>\n          1 7 7 2 2.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 14 10 -1.</_>\n        <_>\n          2 6 7 5 2.</_>\n        <_>\n          9 11 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 11 -1.</_>\n        <_>\n          13 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 15 6 -1.</_>\n        <_>\n          7 13 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 12 4 -1.</_>\n        <_>\n          9 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 9 5 -1.</_>\n        <_>\n          6 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 17 18 -1.</_>\n        <_>\n          2 9 17 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 12 -1.</_>\n        <_>\n          1 4 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 11 -1.</_>\n        <_>\n          13 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 5 -1.</_>\n        <_>\n          6 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 2 -1.</_>\n        <_>\n          3 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          9 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 3 -1.</_>\n        <_>\n          6 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 14 -1.</_>\n        <_>\n          12 2 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 13 -1.</_>\n        <_>\n          8 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 2 -1.</_>\n        <_>\n          2 8 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 4 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 10 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 8 -1.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 11 12 -1.</_>\n        <_>\n          0 10 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 4 14 -1.</_>\n        <_>\n          13 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 4 14 -1.</_>\n        <_>\n          3 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 10 -1.</_>\n        <_>\n          13 2 3 5 2.</_>\n        <_>\n          10 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 6 -1.</_>\n        <_>\n          4 9 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 6 -1.</_>\n        <_>\n          0 7 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 10 -1.</_>\n        <_>\n          4 2 3 5 2.</_>\n        <_>\n          7 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 5 -1.</_>\n        <_>\n          8 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 8 -1.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 6 9 -1.</_>\n        <_>\n          12 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 13 -1.</_>\n        <_>\n          9 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 15 -1.</_>\n        <_>\n          11 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 15 -1.</_>\n        <_>\n          8 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 13 -1.</_>\n        <_>\n          8 7 6 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 14 2 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 15 3 -1.</_>\n        <_>\n          10 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 15 3 -1.</_>\n        <_>\n          5 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 8 5 -1.</_>\n        <_>\n          11 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 8 8 -1.</_>\n        <_>\n          3 1 4 4 2.</_>\n        <_>\n          7 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 10 -1.</_>\n        <_>\n          10 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 12 -1.</_>\n        <_>\n          8 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 2 -1.</_>\n        <_>\n          0 12 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 6 9 -1.</_>\n        <_>\n          2 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 5 -1.</_>\n        <_>\n          8 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 5 -1.</_>\n        <_>\n          6 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 2 14 -1.</_>\n        <_>\n          11 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 12 -1.</_>\n        <_>\n          7 8 3 6 2.</_>\n        <_>\n          10 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 17 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 2 19 -1.</_>\n        <_>\n          6 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 10 -1.</_>\n        <_>\n          10 4 3 5 2.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 15 4 -1.</_>\n        <_>\n          7 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 15 -1.</_>\n        <_>\n          12 1 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 4 -1.</_>\n        <_>\n          5 10 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 5 8 -1.</_>\n        <_>\n          6 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 8 -1.</_>\n        <_>\n          10 5 6 4 2.</_>\n        <_>\n          4 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 15 -1.</_>\n        <_>\n          6 1 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 12 -1.</_>\n        <_>\n          11 8 3 6 2.</_>\n        <_>\n          8 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 6 8 -1.</_>\n        <_>\n          5 6 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 2 14 -1.</_>\n        <_>\n          17 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 2 14 -1.</_>\n        <_>\n          2 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 13 -1.</_>\n        <_>\n          12 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 13 -1.</_>\n        <_>\n          7 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 13 -1.</_>\n        <_>\n          16 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 13 -1.</_>\n        <_>\n          2 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 3 -1.</_>\n        <_>\n          5 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 3 -1.</_>\n        <_>\n          8 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 12 -1.</_>\n        <_>\n          10 8 3 6 2.</_>\n        <_>\n          7 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 7 -1.</_>\n        <_>\n          7 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 4 12 -1.</_>\n        <_>\n          12 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 4 12 -1.</_>\n        <_>\n          4 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 12 -1.</_>\n        <_>\n          3 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 7 4 -1.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 7 -1.</_>\n        <_>\n          12 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 3 -1.</_>\n        <_>\n          8 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 20 3 -1.</_>\n        <_>\n          0 10 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 12 -1.</_>\n        <_>\n          2 8 15 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 5 6 -1.</_>\n        <_>\n          11 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 3 -1.</_>\n        <_>\n          2 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 9 -1.</_>\n        <_>\n          10 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 12 6 -1.</_>\n        <_>\n          14 14 6 3 2.</_>\n        <_>\n          8 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 6 -1.</_>\n        <_>\n          6 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 9 4 -1.</_>\n        <_>\n          9 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 8 -1.</_>\n        <_>\n          2 15 18 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 10 8 -1.</_>\n        <_>\n          0 12 5 4 2.</_>\n        <_>\n          5 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 7 -1.</_>\n        <_>\n          13 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 5 9 -1.</_>\n        <_>\n          12 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 5 9 -1.</_>\n        <_>\n          3 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 11 6 -1.</_>\n        <_>\n          5 8 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 7 -1.</_>\n        <_>\n          6 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 5 -1.</_>\n        <_>\n          7 8 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 7 -1.</_>\n        <_>\n          7 3 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 8 -1.</_>\n        <_>\n          7 15 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          10 14 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 11 9 -1.</_>\n        <_>\n          5 9 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 8 -1.</_>\n        <_>\n          7 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 6 -1.</_>\n        <_>\n          6 8 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 7 -1.</_>\n        <_>\n          13 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 4 7 -1.</_>\n        <_>\n          5 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 10 -1.</_>\n        <_>\n          6 10 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 12 16 -1.</_>\n        <_>\n          14 4 6 8 2.</_>\n        <_>\n          8 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 16 -1.</_>\n        <_>\n          0 4 6 8 2.</_>\n        <_>\n          6 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 7 -1.</_>\n        <_>\n          10 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 14 -1.</_>\n        <_>\n          8 6 2 7 2.</_>\n        <_>\n          10 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 10 18 -1.</_>\n        <_>\n          10 2 5 9 2.</_>\n        <_>\n          5 11 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 7 6 -1.</_>\n        <_>\n          6 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 5 12 -1.</_>\n        <_>\n          9 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 19 15 -1.</_>\n        <_>\n          1 10 19 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 7 4 -1.</_>\n        <_>\n          0 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          11 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 10 6 -1.</_>\n        <_>\n          4 0 5 3 2.</_>\n        <_>\n          9 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 7 6 -1.</_>\n        <_>\n          11 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 5 -1.</_>\n        <_>\n          8 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 11 4 -1.</_>\n        <_>\n          9 6 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 10 -1.</_>\n        <_>\n          2 1 3 5 2.</_>\n        <_>\n          5 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 8 -1.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 8 -1.</_>\n        <_>\n          0 5 9 4 2.</_>\n        <_>\n          9 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 5 12 -1.</_>\n        <_>\n          9 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 2 -1.</_>\n        <_>\n          0 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 3 13 -1.</_>\n        <_>\n          11 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 14 -1.</_>\n        <_>\n          8 3 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 8 -1.</_>\n        <_>\n          9 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 12 -1.</_>\n        <_>\n          4 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 17 2 -1.</_>\n        <_>\n          3 4 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 6 -1.</_>\n        <_>\n          2 2 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 4 -1.</_>\n        <_>\n          8 0 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 10 6 -1.</_>\n        <_>\n          1 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 4 12 -1.</_>\n        <_>\n          3 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 15 5 -1.</_>\n        <_>\n          9 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 14 3 -1.</_>\n        <_>\n          0 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          12 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 7 -1.</_>\n        <_>\n          6 2 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 6 -1.</_>\n        <_>\n          6 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 14 12 -1.</_>\n        <_>\n          1 7 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 15 5 -1.</_>\n        <_>\n          9 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 15 5 -1.</_>\n        <_>\n          6 15 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 7 -1.</_>\n        <_>\n          11 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 5 -1.</_>\n        <_>\n          8 10 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 2 -1.</_>\n        <_>\n          7 2 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 2 -1.</_>\n        <_>\n          2 6 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 14 -1.</_>\n        <_>\n          15 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 14 -1.</_>\n        <_>\n          4 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          16 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 13 -1.</_>\n        <_>\n          2 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 7 -1.</_>\n        <_>\n          2 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 8 -1.</_>\n        <_>\n          0 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 16 -1.</_>\n        <_>\n          0 1 10 8 2.</_>\n        <_>\n          10 9 10 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 16 -1.</_>\n        <_>\n          12 1 5 8 2.</_>\n        <_>\n          7 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 16 14 -1.</_>\n        <_>\n          0 1 8 7 2.</_>\n        <_>\n          8 8 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 6 -1.</_>\n        <_>\n          14 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 6 -1.</_>\n        <_>\n          1 5 5 3 2.</_>\n        <_>\n          6 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 4 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 8 -1.</_>\n        <_>\n          10 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 3 -1.</_>\n        <_>\n          0 4 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          0 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 17 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 6 -1.</_>\n        <_>\n          12 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 18 4 -1.</_>\n        <_>\n          0 14 9 2 2.</_>\n        <_>\n          9 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 4 9 -1.</_>\n        <_>\n          14 4 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 8 -1.</_>\n        <_>\n          2 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 5 9 -1.</_>\n        <_>\n          1 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 9 5 -1.</_>\n        <_>\n          8 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 4 14 -1.</_>\n        <_>\n          18 6 2 7 2.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 16 -1.</_>\n        <_>\n          3 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 7 -1.</_>\n        <_>\n          10 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 20 -1.</_>\n        <_>\n          13 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 20 -1.</_>\n        <_>\n          6 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 7 -1.</_>\n        <_>\n          14 13 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          8 5 2 7 2.</_>\n        <_>\n          10 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 12 5 -1.</_>\n        <_>\n          12 14 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 5 -1.</_>\n        <_>\n          4 14 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 3 -1.</_>\n        <_>\n          6 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 16 4 -1.</_>\n        <_>\n          1 11 8 2 2.</_>\n        <_>\n          9 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 10 -1.</_>\n        <_>\n          16 10 3 5 2.</_>\n        <_>\n          13 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 12 -1.</_>\n        <_>\n          0 5 10 6 2.</_>\n        <_>\n          10 11 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 15 2 -1.</_>\n        <_>\n          1 19 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 10 -1.</_>\n        <_>\n          16 10 3 5 2.</_>\n        <_>\n          13 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 6 -1.</_>\n        <_>\n          0 16 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 10 -1.</_>\n        <_>\n          16 10 3 5 2.</_>\n        <_>\n          13 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 2 -1.</_>\n        <_>\n          3 1 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 3 -1.</_>\n        <_>\n          0 8 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 10 8 -1.</_>\n        <_>\n          2 9 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 6 -1.</_>\n        <_>\n          8 8 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 11 6 -1.</_>\n        <_>\n          0 8 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 17 2 -1.</_>\n        <_>\n          3 11 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 10 -1.</_>\n        <_>\n          1 10 3 5 2.</_>\n        <_>\n          4 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 3 -1.</_>\n        <_>\n          7 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          3 14 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 7 8 -1.</_>\n        <_>\n          8 4 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 7 6 -1.</_>\n        <_>\n          3 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 13 -1.</_>\n        <_>\n          10 7 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 5 6 -1.</_>\n        <_>\n          0 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 15 4 -1.</_>\n        <_>\n          10 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 15 4 -1.</_>\n        <_>\n          5 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 3 10 -1.</_>\n        <_>\n          16 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 15 -1.</_>\n        <_>\n          1 5 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 4 13 -1.</_>\n        <_>\n          14 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 15 2 -1.</_>\n        <_>\n          4 1 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          10 0 4 6 2.</_>\n        <_>\n          6 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 4 -1.</_>\n        <_>\n          1 1 8 2 2.</_>\n        <_>\n          9 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 3 13 -1.</_>\n        <_>\n          18 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 3 13 -1.</_>\n        <_>\n          1 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 14 -1.</_>\n        <_>\n          12 2 3 7 2.</_>\n        <_>\n          9 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 7 -1.</_>\n        <_>\n          9 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 12 -1.</_>\n        <_>\n          10 8 4 6 2.</_>\n        <_>\n          6 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 16 3 -1.</_>\n        <_>\n          2 14 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 8 10 -1.</_>\n        <_>\n          6 8 4 5 2.</_>\n        <_>\n          10 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 12 3 -1.</_>\n        <_>\n          5 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 18 -1.</_>\n        <_>\n          8 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 12 -1.</_>\n        <_>\n          9 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 10 -1.</_>\n        <_>\n          7 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 7 6 -1.</_>\n        <_>\n          10 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 14 -1.</_>\n        <_>\n          0 6 2 7 2.</_>\n        <_>\n          2 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 5 -1.</_>\n        <_>\n          13 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 5 -1.</_>\n        <_>\n          4 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 4 7 -1.</_>\n        <_>\n          14 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 6 5 -1.</_>\n        <_>\n          4 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 12 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 14 3 -1.</_>\n        <_>\n          0 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 6 -1.</_>\n        <_>\n          8 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 12 -1.</_>\n        <_>\n          6 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 8 -1.</_>\n        <_>\n          2 4 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 17 3 -1.</_>\n        <_>\n          1 1 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 2 -1.</_>\n        <_>\n          5 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 13 -1.</_>\n        <_>\n          9 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 6 -1.</_>\n        <_>\n          3 14 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 12 -1.</_>\n        <_>\n          6 4 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 2 -1.</_>\n        <_>\n          0 2 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 3 13 -1.</_>\n        <_>\n          16 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 3 13 -1.</_>\n        <_>\n          3 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 4 -1.</_>\n        <_>\n          8 4 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 4 -1.</_>\n        <_>\n          7 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 3 18 -1.</_>\n        <_>\n          6 2 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 3 -1.</_>\n        <_>\n          0 11 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 13 3 -1.</_>\n        <_>\n          7 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 2 -1.</_>\n        <_>\n          0 16 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 5 -1.</_>\n        <_>\n          7 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 8 -1.</_>\n        <_>\n          10 11 8 4 2.</_>\n        <_>\n          2 15 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 12 -1.</_>\n        <_>\n          2 6 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 11 5 3 2.</_>\n        <_>\n          10 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 7 6 -1.</_>\n        <_>\n          10 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 6 -1.</_>\n        <_>\n          5 5 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 3 -1.</_>\n        <_>\n          4 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 3 -1.</_>\n        <_>\n          1 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 4 -1.</_>\n        <_>\n          12 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 4 -1.</_>\n        <_>\n          4 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 8 -1.</_>\n        <_>\n          10 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 8 -1.</_>\n        <_>\n          5 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 3 -1.</_>\n        <_>\n          3 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 4 -1.</_>\n        <_>\n          0 7 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 12 -1.</_>\n        <_>\n          7 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 15 -1.</_>\n        <_>\n          10 0 5 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 10 6 -1.</_>\n        <_>\n          11 1 5 3 2.</_>\n        <_>\n          6 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 10 6 -1.</_>\n        <_>\n          4 1 5 3 2.</_>\n        <_>\n          9 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 3 -1.</_>\n        <_>\n          7 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 12 -1.</_>\n        <_>\n          11 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 12 -1.</_>\n        <_>\n          7 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 16 -1.</_>\n        <_>\n          10 4 2 8 2.</_>\n        <_>\n          8 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 14 -1.</_>\n        <_>\n          8 6 2 7 2.</_>\n        <_>\n          10 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 9 -1.</_>\n        <_>\n          3 3 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 17 6 -1.</_>\n        <_>\n          3 7 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 15 19 -1.</_>\n        <_>\n          8 1 5 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 3 -1.</_>\n        <_>\n          3 2 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 3 -1.</_>\n        <_>\n          8 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 2 -1.</_>\n        <_>\n          6 8 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 15 3 -1.</_>\n        <_>\n          2 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 7 4 -1.</_>\n        <_>\n          8 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 15 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 13 3 -1.</_>\n        <_>\n          6 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 17 12 -1.</_>\n        <_>\n          1 9 17 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 3 -1.</_>\n        <_>\n          6 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 8 -1.</_>\n        <_>\n          2 9 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 5 14 -1.</_>\n        <_>\n          9 12 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 16 -1.</_>\n        <_>\n          9 4 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 6 -1.</_>\n        <_>\n          10 4 7 3 2.</_>\n        <_>\n          3 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 7 6 -1.</_>\n        <_>\n          0 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          10 5 6 3 2.</_>\n        <_>\n          4 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 19 6 -1.</_>\n        <_>\n          0 15 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 7 6 -1.</_>\n        <_>\n          3 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 10 -1.</_>\n        <_>\n          1 3 4 5 2.</_>\n        <_>\n          5 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 7 -1.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 14 -1.</_>\n        <_>\n          11 0 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 19 -1.</_>\n        <_>\n          7 1 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 9 -1.</_>\n        <_>\n          8 8 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 8 -1.</_>\n        <_>\n          4 10 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 7 6 -1.</_>\n        <_>\n          12 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 8 -1.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 10 -1.</_>\n        <_>\n          10 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 10 -1.</_>\n        <_>\n          4 14 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 7 6 -1.</_>\n        <_>\n          1 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 13 -1.</_>\n        <_>\n          13 1 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 3 -1.</_>\n        <_>\n          3 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 10 6 -1.</_>\n        <_>\n          4 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 14 -1.</_>\n        <_>\n          13 1 2 7 2.</_>\n        <_>\n          11 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 2 -1.</_>\n        <_>\n          0 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 6 -1.</_>\n        <_>\n          7 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 18 -1.</_>\n        <_>\n          0 6 16 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 5 9 -1.</_>\n        <_>\n          14 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 10 -1.</_>\n        <_>\n          1 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 2 14 -1.</_>\n        <_>\n          16 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 2 14 -1.</_>\n        <_>\n          2 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 5 9 -1.</_>\n        <_>\n          14 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 5 9 -1.</_>\n        <_>\n          1 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 9 9 -1.</_>\n        <_>\n          8 7 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 16 -1.</_>\n        <_>\n          14 4 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 16 -1.</_>\n        <_>\n          5 4 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 4 12 -1.</_>\n        <_>\n          12 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 14 -1.</_>\n        <_>\n          7 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 16 -1.</_>\n        <_>\n          15 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 16 -1.</_>\n        <_>\n          1 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 8 6 -1.</_>\n        <_>\n          12 11 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 2 -1.</_>\n        <_>\n          7 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 5 -1.</_>\n        <_>\n          0 0 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 0 6 3 2.</_>\n        <_>\n          10 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 5 9 -1.</_>\n        <_>\n          14 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 2 -1.</_>\n        <_>\n          1 7 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 6 -1.</_>\n        <_>\n          7 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 10 -1.</_>\n        <_>\n          1 2 9 5 2.</_>\n        <_>\n          10 7 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 8 8 -1.</_>\n        <_>\n          13 3 4 4 2.</_>\n        <_>\n          9 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 4 -1.</_>\n        <_>\n          9 1 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 7 -1.</_>\n        <_>\n          8 5 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 7 -1.</_>\n        <_>\n          9 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 9 7 -1.</_>\n        <_>\n          5 13 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 18 11 -1.</_>\n        <_>\n          6 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 16 -1.</_>\n        <_>\n          11 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 6 -1.</_>\n        <_>\n          7 7 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 5 9 -1.</_>\n        <_>\n          11 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 5 9 -1.</_>\n        <_>\n          4 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 5 9 -1.</_>\n        <_>\n          14 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 16 -1.</_>\n        <_>\n          8 2 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 3 -1.</_>\n        <_>\n          3 16 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 6 -1.</_>\n        <_>\n          10 1 10 3 2.</_>\n        <_>\n          0 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 5 -1.</_>\n        <_>\n          8 0 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 14 -1.</_>\n        <_>\n          14 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 14 -1.</_>\n        <_>\n          5 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 10 -1.</_>\n        <_>\n          16 0 3 5 2.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 5 -1.</_>\n        <_>\n          8 0 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 5 -1.</_>\n        <_>\n          6 0 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 14 -1.</_>\n        <_>\n          13 1 2 7 2.</_>\n        <_>\n          11 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 14 -1.</_>\n        <_>\n          5 1 2 7 2.</_>\n        <_>\n          7 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 13 3 -1.</_>\n        <_>\n          0 8 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 3 13 -1.</_>\n        <_>\n          17 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 3 13 -1.</_>\n        <_>\n          2 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 5 8 -1.</_>\n        <_>\n          2 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 4 -1.</_>\n        <_>\n          6 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 6 -1.</_>\n        <_>\n          0 7 5 3 2.</_>\n        <_>\n          5 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 16 -1.</_>\n        <_>\n          15 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 9 9 -1.</_>\n        <_>\n          7 0 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 8 -1.</_>\n        <_>\n          3 12 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 10 -1.</_>\n        <_>\n          2 10 8 5 2.</_>\n        <_>\n          10 15 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          10 5 6 3 2.</_>\n        <_>\n          4 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 8 -1.</_>\n        <_>\n          5 5 5 4 2.</_>\n        <_>\n          10 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 6 -1.</_>\n        <_>\n          10 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 12 5 -1.</_>\n        <_>\n          5 15 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 8 -1.</_>\n        <_>\n          5 9 5 4 2.</_>\n        <_>\n          10 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 18 13 -1.</_>\n        <_>\n          8 7 6 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 5 -1.</_>\n        <_>\n          9 6 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 8 -1.</_>\n        <_>\n          5 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 16 6 -1.</_>\n        <_>\n          3 14 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 14 3 -1.</_>\n        <_>\n          4 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 9 -1.</_>\n        <_>\n          3 9 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 18 -1.</_>\n        <_>\n          7 9 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 10 -1.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 16 4 -1.</_>\n        <_>\n          3 5 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 5 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 6 -1.</_>\n        <_>\n          4 9 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 4 -1.</_>\n        <_>\n          4 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 9 4 -1.</_>\n        <_>\n          8 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 16 3 -1.</_>\n        <_>\n          1 6 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 13 3 -1.</_>\n        <_>\n          5 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 3 -1.</_>\n        <_>\n          0 2 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 12 4 -1.</_>\n        <_>\n          7 1 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 2 18 -1.</_>\n        <_>\n          8 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 10 -1.</_>\n        <_>\n          12 2 3 5 2.</_>\n        <_>\n          9 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          5 2 3 5 2.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 9 8 -1.</_>\n        <_>\n          4 13 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 19 4 -1.</_>\n        <_>\n          1 17 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 7 4 -1.</_>\n        <_>\n          5 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 10 -1.</_>\n        <_>\n          9 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 20 6 -1.</_>\n        <_>\n          0 10 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 12 10 -1.</_>\n        <_>\n          7 5 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 10 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_>\n        <_>\n          5 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 5 9 -1.</_>\n        <_>\n          0 11 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 9 -1.</_>\n        <_>\n          15 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 3 -1.</_>\n        <_>\n          1 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 9 -1.</_>\n        <_>\n          15 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 2 -1.</_>\n        <_>\n          0 13 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 5 9 -1.</_>\n        <_>\n          15 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 5 9 -1.</_>\n        <_>\n          0 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 10 -1.</_>\n        <_>\n          13 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 18 -1.</_>\n        <_>\n          3 9 13 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 14 -1.</_>\n        <_>\n          12 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 14 -1.</_>\n        <_>\n          5 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 10 -1.</_>\n        <_>\n          10 8 8 5 2.</_>\n        <_>\n          2 13 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          10 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 12 9 -1.</_>\n        <_>\n          10 3 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 5 -1.</_>\n        <_>\n          7 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 12 8 -1.</_>\n        <_>\n          11 1 6 4 2.</_>\n        <_>\n          5 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          5 6 3 5 2.</_>\n        <_>\n          8 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 9 -1.</_>\n        <_>\n          2 10 9 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 4 -1.</_>\n        <_>\n          5 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 3 -1.</_>\n        <_>\n          6 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 3 -1.</_>\n        <_>\n          4 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 4 -1.</_>\n        <_>\n          5 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 13 2 -1.</_>\n        <_>\n          4 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 10 -1.</_>\n        <_>\n          10 4 8 5 2.</_>\n        <_>\n          2 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 2 -1.</_>\n        <_>\n          0 3 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 6 7 -1.</_>\n        <_>\n          5 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 10 6 -1.</_>\n        <_>\n          3 1 5 3 2.</_>\n        <_>\n          8 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 5 9 -1.</_>\n        <_>\n          12 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 7 -1.</_>\n        <_>\n          8 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 12 -1.</_>\n        <_>\n          1 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 8 -1.</_>\n        <_>\n          14 8 4 4 2.</_>\n        <_>\n          10 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 15 3 -1.</_>\n        <_>\n          6 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 3 -1.</_>\n        <_>\n          3 6 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 7 8 -1.</_>\n        <_>\n          8 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 7 -1.</_>\n        <_>\n          2 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 3 -1.</_>\n        <_>\n          4 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 13 2 -1.</_>\n        <_>\n          2 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 4 -1.</_>\n        <_>\n          2 1 8 2 2.</_>\n        <_>\n          10 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 8 6 -1.</_>\n        <_>\n          9 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 5 -1.</_>\n        <_>\n          7 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 8 8 -1.</_>\n        <_>\n          11 6 4 4 2.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          7 5 3 5 2.</_>\n        <_>\n          10 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 4 -1.</_>\n        <_>\n          10 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 4 -1.</_>\n        <_>\n          0 6 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 14 6 -1.</_>\n        <_>\n          4 5 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 3 -1.</_>\n        <_>\n          0 3 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 5 -1.</_>\n        <_>\n          8 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 12 5 -1.</_>\n        <_>\n          8 15 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 6 -1.</_>\n        <_>\n          12 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 17 3 -1.</_>\n        <_>\n          0 7 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 7 -1.</_>\n        <_>\n          11 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 14 2 -1.</_>\n        <_>\n          0 13 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 7 -1.</_>\n        <_>\n          12 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 14 -1.</_>\n        <_>\n          10 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 7 -1.</_>\n        <_>\n          6 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 6 -1.</_>\n        <_>\n          11 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 7 6 -1.</_>\n        <_>\n          2 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 12 -1.</_>\n        <_>\n          0 9 20 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 11 -1.</_>\n        <_>\n          9 6 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 4 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 11 -1.</_>\n        <_>\n          3 1 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 5 12 -1.</_>\n        <_>\n          9 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          0 3 10 2 2.</_>\n        <_>\n          10 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 6 -1.</_>\n        <_>\n          15 0 5 3 2.</_>\n        <_>\n          10 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 10 6 -1.</_>\n        <_>\n          4 0 5 3 2.</_>\n        <_>\n          9 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 13 3 -1.</_>\n        <_>\n          7 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 7 4 -1.</_>\n        <_>\n          10 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 7 4 -1.</_>\n        <_>\n          3 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 7 6 -1.</_>\n        <_>\n          11 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 4 -1.</_>\n        <_>\n          2 8 7 2 2.</_>\n        <_>\n          9 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_>\n        <_>\n          10 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_>\n        <_>\n          5 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 4 14 -1.</_>\n        <_>\n          16 5 2 7 2.</_>\n        <_>\n          14 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 4 14 -1.</_>\n        <_>\n          16 5 2 7 2.</_>\n        <_>\n          14 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 4 14 -1.</_>\n        <_>\n          2 5 2 7 2.</_>\n        <_>\n          4 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 12 -1.</_>\n        <_>\n          11 5 9 6 2.</_>\n        <_>\n          2 11 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 5 -1.</_>\n        <_>\n          6 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 20 -1.</_>\n        <_>\n          10 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 16 -1.</_>\n        <_>\n          1 8 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 4 -1.</_>\n        <_>\n          6 3 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 5 16 -1.</_>\n        <_>\n          8 12 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 6 -1.</_>\n        <_>\n          1 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 3 12 -1.</_>\n        <_>\n          17 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 3 -1.</_>\n        <_>\n          1 4 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 12 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 10 -1.</_>\n        <_>\n          8 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 3 -1.</_>\n        <_>\n          4 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 3 12 -1.</_>\n        <_>\n          0 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 6 -1.</_>\n        <_>\n          7 13 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 4 7 -1.</_>\n        <_>\n          9 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 5 -1.</_>\n        <_>\n          11 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 9 5 -1.</_>\n        <_>\n          6 7 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 10 -1.</_>\n        <_>\n          14 10 4 5 2.</_>\n        <_>\n          10 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 10 -1.</_>\n        <_>\n          2 10 4 5 2.</_>\n        <_>\n          6 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 7 6 -1.</_>\n        <_>\n          3 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 5 8 -1.</_>\n        <_>\n          8 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          7 4 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 7 6 -1.</_>\n        <_>\n          10 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 3 -1.</_>\n        <_>\n          7 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 4 -1.</_>\n        <_>\n          1 3 9 2 2.</_>\n        <_>\n          10 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 8 8 -1.</_>\n        <_>\n          10 1 4 4 2.</_>\n        <_>\n          6 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 18 6 -1.</_>\n        <_>\n          11 4 9 3 2.</_>\n        <_>\n          2 7 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 8 8 -1.</_>\n        <_>\n          1 5 4 4 2.</_>\n        <_>\n          5 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 13 -1.</_>\n        <_>\n          14 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 13 -1.</_>\n        <_>\n          5 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 12 3 -1.</_>\n        <_>\n          7 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 12 3 -1.</_>\n        <_>\n          7 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 7 -1.</_>\n        <_>\n          9 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 12 -1.</_>\n        <_>\n          7 2 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 12 -1.</_>\n        <_>\n          12 5 3 6 2.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 12 -1.</_>\n        <_>\n          5 5 3 6 2.</_>\n        <_>\n          8 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 14 3 -1.</_>\n        <_>\n          5 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 12 -1.</_>\n        <_>\n          1 3 9 6 2.</_>\n        <_>\n          10 9 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 4 -1.</_>\n        <_>\n          10 11 7 2 2.</_>\n        <_>\n          3 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 14 -1.</_>\n        <_>\n          4 6 2 7 2.</_>\n        <_>\n          6 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 7 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 7 -1.</_>\n        <_>\n          7 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 4 -1.</_>\n        <_>\n          7 3 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          10 8 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 13 -1.</_>\n        <_>\n          9 4 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 7 6 -1.</_>\n        <_>\n          10 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 7 6 -1.</_>\n        <_>\n          3 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 3 -1.</_>\n        <_>\n          2 1 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 7 4 -1.</_>\n        <_>\n          2 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 16 8 -1.</_>\n        <_>\n          12 7 8 4 2.</_>\n        <_>\n          4 11 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 16 8 -1.</_>\n        <_>\n          0 7 8 4 2.</_>\n        <_>\n          8 11 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 10 6 -1.</_>\n        <_>\n          12 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 10 6 -1.</_>\n        <_>\n          3 12 5 3 2.</_>\n        <_>\n          8 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 8 -1.</_>\n        <_>\n          4 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 3 -1.</_>\n        <_>\n          2 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 18 4 -1.</_>\n        <_>\n          11 3 9 2 2.</_>\n        <_>\n          2 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 18 -1.</_>\n        <_>\n          5 6 10 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 15 -1.</_>\n        <_>\n          14 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 15 -1.</_>\n        <_>\n          5 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 6 10 -1.</_>\n        <_>\n          16 4 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 10 -1.</_>\n        <_>\n          2 4 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          10 5 2 7 2.</_>\n        <_>\n          8 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 12 -1.</_>\n        <_>\n          4 6 6 6 2.</_>\n        <_>\n          10 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 19 -1.</_>\n        <_>\n          10 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 3 17 -1.</_>\n        <_>\n          3 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 18 4 -1.</_>\n        <_>\n          8 7 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 6 -1.</_>\n        <_>\n          1 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 9 8 -1.</_>\n        <_>\n          12 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 15 -1.</_>\n        <_>\n          0 5 20 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 6 -1.</_>\n        <_>\n          3 4 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 3 15 -1.</_>\n        <_>\n          17 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 14 4 -1.</_>\n        <_>\n          2 16 7 2 2.</_>\n        <_>\n          9 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 3 15 -1.</_>\n        <_>\n          17 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 8 8 -1.</_>\n        <_>\n          3 0 4 4 2.</_>\n        <_>\n          7 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 14 3 -1.</_>\n        <_>\n          5 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 16 4 -1.</_>\n        <_>\n          1 11 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 8 -1.</_>\n        <_>\n          8 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 3 15 -1.</_>\n        <_>\n          2 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 6 8 -1.</_>\n        <_>\n          16 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 8 -1.</_>\n        <_>\n          2 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 12 -1.</_>\n        <_>\n          17 8 3 6 2.</_>\n        <_>\n          14 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          0 8 3 6 2.</_>\n        <_>\n          3 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 20 -1.</_>\n        <_>\n          16 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 3 20 -1.</_>\n        <_>\n          3 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 8 4 -1.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 10 -1.</_>\n        <_>\n          9 9 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 9 8 -1.</_>\n        <_>\n          12 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 8 -1.</_>\n        <_>\n          5 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 15 -1.</_>\n        <_>\n          14 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 9 5 -1.</_>\n        <_>\n          4 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 19 -1.</_>\n        <_>\n          10 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 19 -1.</_>\n        <_>\n          9 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 10 10 -1.</_>\n        <_>\n          6 3 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 5 -1.</_>\n        <_>\n          9 0 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 10 16 -1.</_>\n        <_>\n          13 1 5 8 2.</_>\n        <_>\n          8 9 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 8 4 -1.</_>\n        <_>\n          8 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 9 4 -1.</_>\n        <_>\n          9 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 15 -1.</_>\n        <_>\n          14 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 15 -1.</_>\n        <_>\n          4 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 17 -1.</_>\n        <_>\n          14 0 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 17 -1.</_>\n        <_>\n          3 0 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 17 2 -1.</_>\n        <_>\n          3 9 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 4 -1.</_>\n        <_>\n          6 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          4 4 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 3 -1.</_>\n        <_>\n          1 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 19 12 -1.</_>\n        <_>\n          1 9 19 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 13 15 -1.</_>\n        <_>\n          2 8 13 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 15 6 -1.</_>\n        <_>\n          10 1 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 3 -1.</_>\n        <_>\n          6 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 5 9 -1.</_>\n        <_>\n          15 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 14 4 -1.</_>\n        <_>\n          3 14 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 2 -1.</_>\n        <_>\n          7 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 5 15 -1.</_>\n        <_>\n          14 10 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 5 15 -1.</_>\n        <_>\n          1 10 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 17 -1.</_>\n        <_>\n          10 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 8 -1.</_>\n        <_>\n          4 11 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 2 14 -1.</_>\n        <_>\n          5 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 4 8 -1.</_>\n        <_>\n          9 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 9 15 -1.</_>\n        <_>\n          3 10 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 12 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 14 -1.</_>\n        <_>\n          4 3 3 7 2.</_>\n        <_>\n          7 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 10 -1.</_>\n        <_>\n          9 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 8 -1.</_>\n        <_>\n          0 4 10 4 2.</_>\n        <_>\n          10 8 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 6 -1.</_>\n        <_>\n          11 11 5 3 2.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 8 8 -1.</_>\n        <_>\n          2 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 14 2 -1.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 14 2 -1.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 18 12 -1.</_>\n        <_>\n          8 4 6 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 8 -1.</_>\n        <_>\n          9 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 12 -1.</_>\n        <_>\n          12 3 3 6 2.</_>\n        <_>\n          9 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 5 9 -1.</_>\n        <_>\n          6 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 8 -1.</_>\n        <_>\n          10 1 10 4 2.</_>\n        <_>\n          0 5 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 17 -1.</_>\n        <_>\n          8 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 10 -1.</_>\n        <_>\n          17 10 3 5 2.</_>\n        <_>\n          14 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 4 8 -1.</_>\n        <_>\n          16 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 4 8 -1.</_>\n        <_>\n          2 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 7 -1.</_>\n        <_>\n          11 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 11 -1.</_>\n        <_>\n          8 6 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 4 -1.</_>\n        <_>\n          5 6 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 11 -1.</_>\n        <_>\n          14 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 3 -1.</_>\n        <_>\n          0 12 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 11 -1.</_>\n        <_>\n          14 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 11 -1.</_>\n        <_>\n          4 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 5 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 3 -1.</_>\n        <_>\n          2 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 2 -1.</_>\n        <_>\n          4 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 20 2 -1.</_>\n        <_>\n          0 19 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 14 -1.</_>\n        <_>\n          10 0 4 7 2.</_>\n        <_>\n          6 7 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 12 -1.</_>\n        <_>\n          2 2 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 9 6 -1.</_>\n        <_>\n          9 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 7 4 -1.</_>\n        <_>\n          2 2 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 10 -1.</_>\n        <_>\n          5 0 3 5 2.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 13 -1.</_>\n        <_>\n          18 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 13 -1.</_>\n        <_>\n          1 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 4 13 -1.</_>\n        <_>\n          16 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 6 -1.</_>\n        <_>\n          6 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 6 -1.</_>\n        <_>\n          11 11 5 3 2.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 5 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 15 -1.</_>\n        <_>\n          10 3 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 15 -1.</_>\n        <_>\n          8 3 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 13 2 -1.</_>\n        <_>\n          6 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 15 8 2 2.</_>\n        <_>\n          10 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 13 -1.</_>\n        <_>\n          2 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 9 -1.</_>\n        <_>\n          5 14 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 16 -1.</_>\n        <_>\n          0 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          10 15 10 2 2.</_>\n        <_>\n          0 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 4 -1.</_>\n        <_>\n          0 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 13 3 -1.</_>\n        <_>\n          4 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          0 0 9 2 2.</_>\n        <_>\n          9 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 15 -1.</_>\n        <_>\n          6 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          2 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 4 10 -1.</_>\n        <_>\n          14 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 16 -1.</_>\n        <_>\n          0 3 2 8 2.</_>\n        <_>\n          2 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          11 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 9 -1.</_>\n        <_>\n          8 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 4 10 -1.</_>\n        <_>\n          4 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 12 -1.</_>\n        <_>\n          5 6 5 6 2.</_>\n        <_>\n          10 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 12 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 6 -1.</_>\n        <_>\n          2 3 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 8 -1.</_>\n        <_>\n          6 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 8 -1.</_>\n        <_>\n          1 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 14 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 10 -1.</_>\n        <_>\n          11 5 3 5 2.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 10 12 -1.</_>\n        <_>\n          9 8 5 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 7 -1.</_>\n        <_>\n          15 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 7 -1.</_>\n        <_>\n          3 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 8 -1.</_>\n        <_>\n          10 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 18 5 -1.</_>\n        <_>\n          6 14 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          10 13 10 2 2.</_>\n        <_>\n          0 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 6 -1.</_>\n        <_>\n          0 10 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 2 -1.</_>\n        <_>\n          4 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 5 -1.</_>\n        <_>\n          3 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 6 5 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 6 5 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 19 -1.</_>\n        <_>\n          7 0 7 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 4 14 -1.</_>\n        <_>\n          3 0 2 7 2.</_>\n        <_>\n          5 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 3 -1.</_>\n        <_>\n          2 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 14 18 -1.</_>\n        <_>\n          13 2 7 9 2.</_>\n        <_>\n          6 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 6 -1.</_>\n        <_>\n          5 12 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 18 -1.</_>\n        <_>\n          10 1 10 9 2.</_>\n        <_>\n          0 10 10 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 7 4 -1.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 14 12 -1.</_>\n        <_>\n          1 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 8 -1.</_>\n        <_>\n          9 0 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 5 -1.</_>\n        <_>\n          8 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 10 -1.</_>\n        <_>\n          8 0 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 13 -1.</_>\n        <_>\n          9 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 10 -1.</_>\n        <_>\n          0 4 9 5 2.</_>\n        <_>\n          9 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 6 -1.</_>\n        <_>\n          12 3 8 3 2.</_>\n        <_>\n          4 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 5 9 -1.</_>\n        <_>\n          3 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 12 5 -1.</_>\n        <_>\n          12 4 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 8 4 -1.</_>\n        <_>\n          3 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 15 -1.</_>\n        <_>\n          11 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 15 -1.</_>\n        <_>\n          8 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 8 -1.</_>\n        <_>\n          10 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 9 5 -1.</_>\n        <_>\n          7 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 4 17 -1.</_>\n        <_>\n          15 3 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 13 -1.</_>\n        <_>\n          3 6 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 4 7 -1.</_>\n        <_>\n          11 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 7 -1.</_>\n        <_>\n          11 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 7 -1.</_>\n        <_>\n          7 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 8 -1.</_>\n        <_>\n          9 7 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 14 3 -1.</_>\n        <_>\n          2 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 7 4 -1.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 5 6 -1.</_>\n        <_>\n          13 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 3 -1.</_>\n        <_>\n          4 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 14 -1.</_>\n        <_>\n          5 10 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 5 -1.</_>\n        <_>\n          9 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 2 -1.</_>\n        <_>\n          0 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 5 -1.</_>\n        <_>\n          9 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 15 5 -1.</_>\n        <_>\n          6 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 6 -1.</_>\n        <_>\n          12 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 5 -1.</_>\n        <_>\n          6 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 8 -1.</_>\n        <_>\n          11 7 7 4 2.</_>\n        <_>\n          4 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 14 8 -1.</_>\n        <_>\n          2 7 7 4 2.</_>\n        <_>\n          9 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 20 -1.</_>\n        <_>\n          11 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 20 -1.</_>\n        <_>\n          8 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 8 -1.</_>\n        <_>\n          12 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 4 -1.</_>\n        <_>\n          10 2 7 2 2.</_>\n        <_>\n          3 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 9 16 -1.</_>\n        <_>\n          11 4 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 8 -1.</_>\n        <_>\n          6 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 6 -1.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 8 -1.</_>\n        <_>\n          4 12 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 6 -1.</_>\n        <_>\n          0 9 5 3 2.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 5 8 -1.</_>\n        <_>\n          4 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          8 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 10 -1.</_>\n        <_>\n          6 8 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 9 4 -1.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 12 8 2 2.</_>\n        <_>\n          10 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 8 -1.</_>\n        <_>\n          4 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 7 -1.</_>\n        <_>\n          8 12 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 12 6 -1.</_>\n        <_>\n          3 13 6 3 2.</_>\n        <_>\n          9 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 13 4 -1.</_>\n        <_>\n          4 14 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 15 -1.</_>\n        <_>\n          7 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 16 18 -1.</_>\n        <_>\n          12 2 8 9 2.</_>\n        <_>\n          4 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 4 -1.</_>\n        <_>\n          7 16 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 9 -1.</_>\n        <_>\n          8 0 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 6 -1.</_>\n        <_>\n          7 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 12 8 -1.</_>\n        <_>\n          13 12 6 4 2.</_>\n        <_>\n          7 16 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 12 8 -1.</_>\n        <_>\n          1 12 6 4 2.</_>\n        <_>\n          7 16 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 9 -1.</_>\n        <_>\n          0 13 20 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 14 -1.</_>\n        <_>\n          8 1 2 7 2.</_>\n        <_>\n          10 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 5 6 -1.</_>\n        <_>\n          12 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 5 6 -1.</_>\n        <_>\n          3 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          8 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 3 14 -1.</_>\n        <_>\n          6 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 15 3 -1.</_>\n        <_>\n          10 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          6 0 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 17 -1.</_>\n        <_>\n          8 3 6 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 12 -1.</_>\n        <_>\n          8 2 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 12 -1.</_>\n        <_>\n          7 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 8 -1.</_>\n        <_>\n          8 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 10 -1.</_>\n        <_>\n          14 7 6 5 2.</_>\n        <_>\n          8 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 5 -1.</_>\n        <_>\n          10 1 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 8 -1.</_>\n        <_>\n          11 2 4 4 2.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 8 -1.</_>\n        <_>\n          5 2 4 4 2.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          3 17 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 12 -1.</_>\n        <_>\n          3 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 14 -1.</_>\n        <_>\n          8 6 2 7 2.</_>\n        <_>\n          10 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 10 -1.</_>\n        <_>\n          5 0 4 5 2.</_>\n        <_>\n          9 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 7 -1.</_>\n        <_>\n          11 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 7 -1.</_>\n        <_>\n          7 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 7 6 -1.</_>\n        <_>\n          13 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 6 -1.</_>\n        <_>\n          1 3 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 17 6 -1.</_>\n        <_>\n          2 3 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 2 16 -1.</_>\n        <_>\n          4 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 14 -1.</_>\n        <_>\n          12 6 5 7 2.</_>\n        <_>\n          7 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 6 -1.</_>\n        <_>\n          10 9 6 3 2.</_>\n        <_>\n          4 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          7 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 7 -1.</_>\n        <_>\n          8 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 3 -1.</_>\n        <_>\n          6 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 7 -1.</_>\n        <_>\n          10 0 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          6 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 12 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 7 6 -1.</_>\n        <_>\n          0 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 13 2 -1.</_>\n        <_>\n          2 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 9 -1.</_>\n        <_>\n          7 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 11 4 -1.</_>\n        <_>\n          0 9 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 6 -1.</_>\n        <_>\n          13 12 5 3 2.</_>\n        <_>\n          8 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 6 -1.</_>\n        <_>\n          2 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 8 6 -1.</_>\n        <_>\n          12 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 8 -1.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 11 4 -1.</_>\n        <_>\n          9 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 5 10 -1.</_>\n        <_>\n          6 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 6 -1.</_>\n        <_>\n          4 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 8 -1.</_>\n        <_>\n          4 4 6 4 2.</_>\n        <_>\n          10 8 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 5 -1.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 12 -1.</_>\n        <_>\n          6 3 5 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 6 17 -1.</_>\n        <_>\n          13 3 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 17 -1.</_>\n        <_>\n          4 3 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          14 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 6 -1.</_>\n        <_>\n          4 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 3 -1.</_>\n        <_>\n          5 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 4 -1.</_>\n        <_>\n          0 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 13 -1.</_>\n        <_>\n          1 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 6 -1.</_>\n        <_>\n          6 4 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 4 -1.</_>\n        <_>\n          6 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 4 -1.</_>\n        <_>\n          0 10 9 2 2.</_>\n        <_>\n          9 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 9 -1.</_>\n        <_>\n          10 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 7 -1.</_>\n        <_>\n          8 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 10 -1.</_>\n        <_>\n          12 6 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 12 -1.</_>\n        <_>\n          0 10 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 10 -1.</_>\n        <_>\n          12 6 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 7 -1.</_>\n        <_>\n          6 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 17 -1.</_>\n        <_>\n          3 2 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 9 5 -1.</_>\n        <_>\n          13 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 5 -1.</_>\n        <_>\n          4 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 9 9 -1.</_>\n        <_>\n          5 6 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 6 -1.</_>\n        <_>\n          12 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 12 -1.</_>\n        <_>\n          5 2 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 7 15 -1.</_>\n        <_>\n          9 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 7 -1.</_>\n        <_>\n          8 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 20 -1.</_>\n        <_>\n          10 0 5 10 2.</_>\n        <_>\n          5 10 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          9 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 4 -1.</_>\n        <_>\n          12 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 4 -1.</_>\n        <_>\n          2 7 8 2 2.</_>\n        <_>\n          10 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 10 -1.</_>\n        <_>\n          5 10 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 16 -1.</_>\n        <_>\n          6 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 10 -1.</_>\n        <_>\n          6 7 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 6 -1.</_>\n        <_>\n          2 4 7 3 2.</_>\n        <_>\n          9 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 11 12 -1.</_>\n        <_>\n          5 4 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 12 -1.</_>\n        <_>\n          7 5 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 11 4 -1.</_>\n        <_>\n          9 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 11 4 -1.</_>\n        <_>\n          0 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 19 6 -1.</_>\n        <_>\n          1 11 19 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          7 4 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 15 2 -1.</_>\n        <_>\n          5 4 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 14 6 -1.</_>\n        <_>\n          2 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 6 -1.</_>\n        <_>\n          3 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 6 -1.</_>\n        <_>\n          0 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 4 -1.</_>\n        <_>\n          13 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 10 -1.</_>\n        <_>\n          14 1 6 5 2.</_>\n        <_>\n          8 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 8 -1.</_>\n        <_>\n          2 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 11 10 -1.</_>\n        <_>\n          5 6 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_>\n        <_>\n          8 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 4 -1.</_>\n        <_>\n          12 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 12 8 -1.</_>\n        <_>\n          6 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 4 -1.</_>\n        <_>\n          10 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 4 -1.</_>\n        <_>\n          6 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 3 -1.</_>\n        <_>\n          3 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 5 -1.</_>\n        <_>\n          4 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 9 9 -1.</_>\n        <_>\n          13 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 9 9 -1.</_>\n        <_>\n          4 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 5 -1.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 5 -1.</_>\n        <_>\n          9 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 2 -1.</_>\n        <_>\n          2 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 7 6 -1.</_>\n        <_>\n          2 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 6 -1.</_>\n        <_>\n          7 10 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 15 -1.</_>\n        <_>\n          4 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 3 -1.</_>\n        <_>\n          3 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 16 3 -1.</_>\n        <_>\n          9 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 19 -1.</_>\n        <_>\n          12 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 19 -1.</_>\n        <_>\n          4 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 16 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_>\n        <_>\n          8 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 14 -1.</_>\n        <_>\n          10 3 7 7 2.</_>\n        <_>\n          3 10 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 12 -1.</_>\n        <_>\n          5 6 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 12 6 -1.</_>\n        <_>\n          9 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 6 -1.</_>\n        <_>\n          1 8 7 3 2.</_>\n        <_>\n          8 11 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 10 -1.</_>\n        <_>\n          14 7 6 5 2.</_>\n        <_>\n          8 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 10 -1.</_>\n        <_>\n          0 7 6 5 2.</_>\n        <_>\n          6 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 18 -1.</_>\n        <_>\n          12 2 3 9 2.</_>\n        <_>\n          9 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 10 -1.</_>\n        <_>\n          1 10 4 5 2.</_>\n        <_>\n          5 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 4 -1.</_>\n        <_>\n          4 16 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 5 -1.</_>\n        <_>\n          10 2 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 14 -1.</_>\n        <_>\n          5 11 9 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 11 4 -1.</_>\n        <_>\n          8 2 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 16 6 -1.</_>\n        <_>\n          0 16 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 8 6 -1.</_>\n        <_>\n          10 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 3 -1.</_>\n        <_>\n          5 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 19 3 -1.</_>\n        <_>\n          0 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 8 4 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 8 4 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 9 -1.</_>\n        <_>\n          1 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 2 -1.</_>\n        <_>\n          4 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 2 -1.</_>\n        <_>\n          2 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 4 -1.</_>\n        <_>\n          6 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 5 -1.</_>\n        <_>\n          8 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 3 -1.</_>\n        <_>\n          3 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 12 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 4 -1.</_>\n        <_>\n          2 6 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 9 4 -1.</_>\n        <_>\n          1 6 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 11 4 -1.</_>\n        <_>\n          9 6 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 3 -1.</_>\n        <_>\n          7 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 7 -1.</_>\n        <_>\n          6 0 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 15 -1.</_>\n        <_>\n          12 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 5 15 -1.</_>\n        <_>\n          3 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 11 -1.</_>\n        <_>\n          8 6 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          1 9 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 5 -1.</_>\n        <_>\n          10 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 7 -1.</_>\n        <_>\n          9 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 4 -1.</_>\n        <_>\n          5 6 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 11 -1.</_>\n        <_>\n          14 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 3 -1.</_>\n        <_>\n          0 12 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 11 -1.</_>\n        <_>\n          14 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 11 -1.</_>\n        <_>\n          4 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 8 -1.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 7 6 -1.</_>\n        <_>\n          0 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 5 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 3 -1.</_>\n        <_>\n          2 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 2 -1.</_>\n        <_>\n          4 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 20 2 -1.</_>\n        <_>\n          0 19 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 14 -1.</_>\n        <_>\n          10 0 4 7 2.</_>\n        <_>\n          6 7 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 12 -1.</_>\n        <_>\n          2 2 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 9 6 -1.</_>\n        <_>\n          9 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 7 4 -1.</_>\n        <_>\n          2 2 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 10 -1.</_>\n        <_>\n          5 0 3 5 2.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 13 -1.</_>\n        <_>\n          18 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 13 -1.</_>\n        <_>\n          1 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 4 13 -1.</_>\n        <_>\n          16 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 6 -1.</_>\n        <_>\n          6 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 6 -1.</_>\n        <_>\n          11 11 5 3 2.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 5 -1.</_>\n        <_>\n          8 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 15 -1.</_>\n        <_>\n          10 3 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 15 -1.</_>\n        <_>\n          8 3 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 13 2 -1.</_>\n        <_>\n          6 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 16 4 -1.</_>\n        <_>\n          2 15 8 2 2.</_>\n        <_>\n          10 17 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 13 -1.</_>\n        <_>\n          2 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 9 -1.</_>\n        <_>\n          5 14 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 16 -1.</_>\n        <_>\n          0 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 4 -1.</_>\n        <_>\n          10 15 10 2 2.</_>\n        <_>\n          0 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 4 -1.</_>\n        <_>\n          0 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 10 6 -1.</_>\n        <_>\n          14 14 5 3 2.</_>\n        <_>\n          9 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 13 3 -1.</_>\n        <_>\n          4 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          0 0 9 2 2.</_>\n        <_>\n          9 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 15 -1.</_>\n        <_>\n          6 10 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          2 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 13 -1.</_>\n        <_>\n          18 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 4 10 -1.</_>\n        <_>\n          14 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 16 -1.</_>\n        <_>\n          0 3 2 8 2.</_>\n        <_>\n          2 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          11 0 5 3 2.</_>\n        <_>\n          6 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 6 -1.</_>\n        <_>\n          1 14 5 3 2.</_>\n        <_>\n          6 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 9 -1.</_>\n        <_>\n          8 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 4 10 -1.</_>\n        <_>\n          4 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 12 -1.</_>\n        <_>\n          5 6 5 6 2.</_>\n        <_>\n          10 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 12 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 6 -1.</_>\n        <_>\n          2 3 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 8 -1.</_>\n        <_>\n          6 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 8 -1.</_>\n        <_>\n          1 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 2 14 -1.</_>\n        <_>\n          11 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 10 -1.</_>\n        <_>\n          11 5 3 5 2.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 10 12 -1.</_>\n        <_>\n          9 8 5 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 5 -1.</_>\n        <_>\n          8 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 5 -1.</_>\n        <_>\n          9 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 7 -1.</_>\n        <_>\n          15 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 7 -1.</_>\n        <_>\n          3 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 7 6 -1.</_>\n        <_>\n          12 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          6 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 8 -1.</_>\n        <_>\n          10 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 18 5 -1.</_>\n        <_>\n          6 14 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          10 13 10 2 2.</_>\n        <_>\n          0 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 7 4 -1.</_>\n        <_>\n          11 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 6 -1.</_>\n        <_>\n          0 10 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 2 -1.</_>\n        <_>\n          4 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 5 -1.</_>\n        <_>\n          3 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 6 5 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 6 5 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 19 -1.</_>\n        <_>\n          7 0 7 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 4 14 -1.</_>\n        <_>\n          3 0 2 7 2.</_>\n        <_>\n          5 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 7 6 -1.</_>\n        <_>\n          13 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 3 -1.</_>\n        <_>\n          2 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 14 18 -1.</_>\n        <_>\n          13 2 7 9 2.</_>\n        <_>\n          6 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 6 -1.</_>\n        <_>\n          5 12 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 18 -1.</_>\n        <_>\n          10 1 10 9 2.</_>\n        <_>\n          0 10 10 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 7 4 -1.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 14 12 -1.</_>\n        <_>\n          1 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 8 -1.</_>\n        <_>\n          9 0 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 5 -1.</_>\n        <_>\n          8 2 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 2 15 -1.</_>\n        <_>\n          12 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 10 -1.</_>\n        <_>\n          8 0 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 13 -1.</_>\n        <_>\n          9 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 10 -1.</_>\n        <_>\n          0 4 9 5 2.</_>\n        <_>\n          9 9 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 6 -1.</_>\n        <_>\n          12 3 8 3 2.</_>\n        <_>\n          4 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 5 9 -1.</_>\n        <_>\n          3 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 12 5 -1.</_>\n        <_>\n          12 4 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 8 4 -1.</_>\n        <_>\n          3 11 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 15 -1.</_>\n        <_>\n          11 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 15 -1.</_>\n        <_>\n          8 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 8 -1.</_>\n        <_>\n          10 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 9 5 -1.</_>\n        <_>\n          7 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 4 17 -1.</_>\n        <_>\n          15 3 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 13 -1.</_>\n        <_>\n          3 6 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 4 7 -1.</_>\n        <_>\n          11 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 7 -1.</_>\n        <_>\n          11 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 7 -1.</_>\n        <_>\n          7 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 8 -1.</_>\n        <_>\n          9 7 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 3 -1.</_>\n        <_>\n          5 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 14 3 -1.</_>\n        <_>\n          2 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 7 4 -1.</_>\n        <_>\n          8 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 5 6 -1.</_>\n        <_>\n          13 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 3 -1.</_>\n        <_>\n          4 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 14 -1.</_>\n        <_>\n          5 10 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 5 -1.</_>\n        <_>\n          9 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 2 -1.</_>\n        <_>\n          0 4 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 5 -1.</_>\n        <_>\n          9 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 15 5 -1.</_>\n        <_>\n          6 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 6 -1.</_>\n        <_>\n          12 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 5 -1.</_>\n        <_>\n          6 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 8 -1.</_>\n        <_>\n          11 7 7 4 2.</_>\n        <_>\n          4 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 14 8 -1.</_>\n        <_>\n          2 7 7 4 2.</_>\n        <_>\n          9 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 20 -1.</_>\n        <_>\n          11 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 20 -1.</_>\n        <_>\n          8 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 8 -1.</_>\n        <_>\n          12 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 4 -1.</_>\n        <_>\n          10 2 7 2 2.</_>\n        <_>\n          3 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 7 -1.</_>\n        <_>\n          9 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 9 16 -1.</_>\n        <_>\n          11 4 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 8 -1.</_>\n        <_>\n          6 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          10 10 3 5 2.</_>\n        <_>\n          7 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 6 -1.</_>\n        <_>\n          5 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 8 -1.</_>\n        <_>\n          4 12 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 6 -1.</_>\n        <_>\n          0 9 5 3 2.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 5 8 -1.</_>\n        <_>\n          4 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          8 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 7 10 -1.</_>\n        <_>\n          6 8 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 3 -1.</_>\n        <_>\n          2 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 4 -1.</_>\n        <_>\n          12 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 9 4 -1.</_>\n        <_>\n          9 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 12 8 2 2.</_>\n        <_>\n          10 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 8 -1.</_>\n        <_>\n          4 1 4 4 2.</_>\n        <_>\n          8 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 7 -1.</_>\n        <_>\n          8 12 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 12 6 -1.</_>\n        <_>\n          3 13 6 3 2.</_>\n        <_>\n          9 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 13 4 -1.</_>\n        <_>\n          4 14 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 15 -1.</_>\n        <_>\n          7 0 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 16 18 -1.</_>\n        <_>\n          12 2 8 9 2.</_>\n        <_>\n          4 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 4 -1.</_>\n        <_>\n          7 16 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 9 -1.</_>\n        <_>\n          8 0 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 6 -1.</_>\n        <_>\n          7 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 12 8 -1.</_>\n        <_>\n          13 12 6 4 2.</_>\n        <_>\n          7 16 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 12 8 -1.</_>\n        <_>\n          1 12 6 4 2.</_>\n        <_>\n          7 16 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 9 -1.</_>\n        <_>\n          0 13 20 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 6 -1.</_>\n        <_>\n          4 5 5 3 2.</_>\n        <_>\n          9 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 7 6 -1.</_>\n        <_>\n          13 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 14 -1.</_>\n        <_>\n          8 1 2 7 2.</_>\n        <_>\n          10 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 5 6 -1.</_>\n        <_>\n          12 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 5 6 -1.</_>\n        <_>\n          3 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          8 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 3 14 -1.</_>\n        <_>\n          6 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 15 3 -1.</_>\n        <_>\n          10 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          6 0 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 17 -1.</_>\n        <_>\n          8 3 6 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 12 -1.</_>\n        <_>\n          8 2 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 12 -1.</_>\n        <_>\n          7 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 8 -1.</_>\n        <_>\n          8 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 10 -1.</_>\n        <_>\n          14 7 6 5 2.</_>\n        <_>\n          8 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 5 -1.</_>\n        <_>\n          10 1 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 8 -1.</_>\n        <_>\n          11 2 4 4 2.</_>\n        <_>\n          7 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 8 -1.</_>\n        <_>\n          5 2 4 4 2.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 6 -1.</_>\n        <_>\n          3 17 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 5 12 -1.</_>\n        <_>\n          3 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 6 -1.</_>\n        <_>\n          15 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 14 -1.</_>\n        <_>\n          8 6 2 7 2.</_>\n        <_>\n          10 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 10 -1.</_>\n        <_>\n          5 0 4 5 2.</_>\n        <_>\n          9 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 7 -1.</_>\n        <_>\n          11 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 7 -1.</_>\n        <_>\n          7 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 7 6 -1.</_>\n        <_>\n          13 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 6 -1.</_>\n        <_>\n          1 3 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 17 6 -1.</_>\n        <_>\n          2 3 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 2 16 -1.</_>\n        <_>\n          4 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 14 -1.</_>\n        <_>\n          12 6 5 7 2.</_>\n        <_>\n          7 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 6 -1.</_>\n        <_>\n          10 9 6 3 2.</_>\n        <_>\n          4 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 3 -1.</_>\n        <_>\n          7 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 7 -1.</_>\n        <_>\n          8 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 3 -1.</_>\n        <_>\n          6 8 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 7 -1.</_>\n        <_>\n          10 0 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          6 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 12 -1.</_>\n        <_>\n          9 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 7 6 -1.</_>\n        <_>\n          0 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 5 9 -1.</_>\n        <_>\n          15 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 13 2 -1.</_>\n        <_>\n          2 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 12 -1.</_>\n        <_>\n          6 10 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 9 -1.</_>\n        <_>\n          7 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 11 4 -1.</_>\n        <_>\n          0 9 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 10 6 -1.</_>\n        <_>\n          13 12 5 3 2.</_>\n        <_>\n          8 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 6 -1.</_>\n        <_>\n          2 12 5 3 2.</_>\n        <_>\n          7 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 8 6 -1.</_>\n        <_>\n          12 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          0 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 8 -1.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 11 4 -1.</_>\n        <_>\n          9 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 5 10 -1.</_>\n        <_>\n          6 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 6 -1.</_>\n        <_>\n          4 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 8 -1.</_>\n        <_>\n          4 4 6 4 2.</_>\n        <_>\n          10 8 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 5 -1.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 15 12 -1.</_>\n        <_>\n          6 3 5 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 6 17 -1.</_>\n        <_>\n          13 3 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 17 -1.</_>\n        <_>\n          4 3 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          14 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 6 -1.</_>\n        <_>\n          4 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 3 -1.</_>\n        <_>\n          5 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 8 4 -1.</_>\n        <_>\n          0 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 13 -1.</_>\n        <_>\n          18 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 13 -1.</_>\n        <_>\n          1 2 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 13 2 -1.</_>\n        <_>\n          4 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 3 -1.</_>\n        <_>\n          9 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 6 -1.</_>\n        <_>\n          6 4 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 7 4 -1.</_>\n        <_>\n          6 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 4 -1.</_>\n        <_>\n          0 10 9 2 2.</_>\n        <_>\n          9 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 9 -1.</_>\n        <_>\n          10 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 7 -1.</_>\n        <_>\n          8 4 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 10 -1.</_>\n        <_>\n          12 6 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 6 -1.</_>\n        <_>\n          15 14 5 3 2.</_>\n        <_>\n          10 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 12 -1.</_>\n        <_>\n          0 10 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 10 -1.</_>\n        <_>\n          12 6 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 7 -1.</_>\n        <_>\n          6 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 17 -1.</_>\n        <_>\n          3 2 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 9 5 -1.</_>\n        <_>\n          13 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 5 -1.</_>\n        <_>\n          4 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 7 6 -1.</_>\n        <_>\n          1 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 9 9 -1.</_>\n        <_>\n          5 6 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 6 -1.</_>\n        <_>\n          12 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 12 -1.</_>\n        <_>\n          5 2 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 7 15 -1.</_>\n        <_>\n          9 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 7 -1.</_>\n        <_>\n          8 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 20 -1.</_>\n        <_>\n          10 0 5 10 2.</_>\n        <_>\n          5 10 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 6 10 -1.</_>\n        <_>\n          9 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 4 -1.</_>\n        <_>\n          12 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 4 -1.</_>\n        <_>\n          2 7 8 2 2.</_>\n        <_>\n          10 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 10 -1.</_>\n        <_>\n          5 10 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 16 -1.</_>\n        <_>\n          6 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 10 -1.</_>\n        <_>\n          6 7 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 6 -1.</_>\n        <_>\n          2 4 7 3 2.</_>\n        <_>\n          9 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 11 12 -1.</_>\n        <_>\n          5 4 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 12 -1.</_>\n        <_>\n          7 5 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 11 4 -1.</_>\n        <_>\n          9 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 11 4 -1.</_>\n        <_>\n          0 10 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 19 6 -1.</_>\n        <_>\n          1 11 19 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          7 4 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 15 2 -1.</_>\n        <_>\n          5 4 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 14 6 -1.</_>\n        <_>\n          2 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 6 -1.</_>\n        <_>\n          3 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 17 6 -1.</_>\n        <_>\n          0 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 4 -1.</_>\n        <_>\n          13 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 4 -1.</_>\n        <_>\n          0 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 10 -1.</_>\n        <_>\n          14 1 6 5 2.</_>\n        <_>\n          8 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 8 -1.</_>\n        <_>\n          2 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 11 10 -1.</_>\n        <_>\n          5 6 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 6 -1.</_>\n        <_>\n          3 9 5 3 2.</_>\n        <_>\n          8 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 4 -1.</_>\n        <_>\n          12 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 12 8 -1.</_>\n        <_>\n          6 7 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 4 -1.</_>\n        <_>\n          10 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 8 4 -1.</_>\n        <_>\n          6 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 3 -1.</_>\n        <_>\n          3 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 5 -1.</_>\n        <_>\n          4 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 9 9 -1.</_>\n        <_>\n          13 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 9 9 -1.</_>\n        <_>\n          4 7 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 5 -1.</_>\n        <_>\n          5 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 5 -1.</_>\n        <_>\n          9 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 16 2 -1.</_>\n        <_>\n          2 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 7 6 -1.</_>\n        <_>\n          2 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 6 -1.</_>\n        <_>\n          7 10 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 15 -1.</_>\n        <_>\n          4 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 3 -1.</_>\n        <_>\n          3 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 16 3 -1.</_>\n        <_>\n          9 10 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 19 -1.</_>\n        <_>\n          12 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 19 -1.</_>\n        <_>\n          4 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 3 -1.</_>\n        <_>\n          6 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 16 4 -1.</_>\n        <_>\n          0 12 8 2 2.</_>\n        <_>\n          8 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 12 6 -1.</_>\n        <_>\n          13 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 6 -1.</_>\n        <_>\n          1 14 6 3 2.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 14 -1.</_>\n        <_>\n          10 3 7 7 2.</_>\n        <_>\n          3 10 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 12 -1.</_>\n        <_>\n          5 6 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 12 6 -1.</_>\n        <_>\n          9 12 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 14 6 -1.</_>\n        <_>\n          1 8 7 3 2.</_>\n        <_>\n          8 11 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 10 -1.</_>\n        <_>\n          14 7 6 5 2.</_>\n        <_>\n          8 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 10 -1.</_>\n        <_>\n          0 7 6 5 2.</_>\n        <_>\n          6 12 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 18 -1.</_>\n        <_>\n          12 2 3 9 2.</_>\n        <_>\n          9 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 10 -1.</_>\n        <_>\n          1 10 4 5 2.</_>\n        <_>\n          5 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 4 -1.</_>\n        <_>\n          4 16 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 5 -1.</_>\n        <_>\n          10 2 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 9 14 -1.</_>\n        <_>\n          5 11 9 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 11 4 -1.</_>\n        <_>\n          8 2 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 16 6 -1.</_>\n        <_>\n          0 16 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 8 6 -1.</_>\n        <_>\n          10 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 3 -1.</_>\n        <_>\n          5 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 19 3 -1.</_>\n        <_>\n          0 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 8 4 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 8 4 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 9 -1.</_>\n        <_>\n          1 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 2 -1.</_>\n        <_>\n          4 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 2 -1.</_>\n        <_>\n          2 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 4 -1.</_>\n        <_>\n          6 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 5 -1.</_>\n        <_>\n          8 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 3 -1.</_>\n        <_>\n          3 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 12 -1.</_>\n        <_>\n          7 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 16 4 -1.</_>\n        <_>\n          2 6 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 9 4 -1.</_>\n        <_>\n          1 6 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 11 4 -1.</_>\n        <_>\n          9 6 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 3 -1.</_>\n        <_>\n          7 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 15 7 -1.</_>\n        <_>\n          6 0 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 15 -1.</_>\n        <_>\n          12 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 5 15 -1.</_>\n        <_>\n          3 5 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 7 -1.</_>\n        <_>\n          10 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 11 -1.</_>\n        <_>\n          8 6 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 4 -1.</_>\n        <_>\n          1 9 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 8 -1.</_>\n        <_>\n          10 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 5 -1.</_>\n        <_>\n          10 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 7 -1.</_>\n        <_>\n          9 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 4 -1.</_>\n        <_>\n          5 1 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 7 6 -1.</_>\n        <_>\n          7 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 12 -1.</_>\n        <_>\n          4 5 5 6 2.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 11 8 -1.</_>\n        <_>\n          8 16 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 5 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 14 -1.</_>\n        <_>\n          1 0 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 3 10 -1.</_>\n        <_>\n          11 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 13 3 -1.</_>\n        <_>\n          3 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 13 3 -1.</_>\n        <_>\n          6 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 6 -1.</_>\n        <_>\n          1 2 9 3 2.</_>\n        <_>\n          10 5 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 12 8 -1.</_>\n        <_>\n          12 1 6 4 2.</_>\n        <_>\n          6 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 8 -1.</_>\n        <_>\n          4 1 6 4 2.</_>\n        <_>\n          10 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 3 -1.</_>\n        <_>\n          4 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 12 4 -1.</_>\n        <_>\n          5 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 5 -1.</_>\n        <_>\n          14 2 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 13 2 -1.</_>\n        <_>\n          3 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 7 -1.</_>\n        <_>\n          3 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 6 -1.</_>\n        <_>\n          14 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 3 10 -1.</_>\n        <_>\n          6 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 5 -1.</_>\n        <_>\n          10 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 12 -1.</_>\n        <_>\n          6 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 6 -1.</_>\n        <_>\n          14 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 6 -1.</_>\n        <_>\n          3 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 3 -1.</_>\n        <_>\n          4 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 8 -1.</_>\n        <_>\n          8 4 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 13 -1.</_>\n        <_>\n          12 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 13 -1.</_>\n        <_>\n          7 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 2 -1.</_>\n        <_>\n          4 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 6 -1.</_>\n        <_>\n          1 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 12 4 -1.</_>\n        <_>\n          8 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          11 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          6 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 9 -1.</_>\n        <_>\n          2 3 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 12 -1.</_>\n        <_>\n          9 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 10 6 -1.</_>\n        <_>\n          2 4 5 3 2.</_>\n        <_>\n          7 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 8 16 -1.</_>\n        <_>\n          13 1 4 8 2.</_>\n        <_>\n          9 9 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 14 8 -1.</_>\n        <_>\n          2 5 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 6 -1.</_>\n        <_>\n          12 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 9 -1.</_>\n        <_>\n          3 8 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 2 -1.</_>\n        <_>\n          0 1 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 14 4 -1.</_>\n        <_>\n          2 13 7 2 2.</_>\n        <_>\n          9 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 7 -1.</_>\n        <_>\n          10 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 10 -1.</_>\n        <_>\n          6 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 8 -1.</_>\n        <_>\n          0 7 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 8 -1.</_>\n        <_>\n          10 0 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 19 -1.</_>\n        <_>\n          8 1 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 19 -1.</_>\n        <_>\n          6 1 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 19 -1.</_>\n        <_>\n          8 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 19 -1.</_>\n        <_>\n          6 1 6 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 10 -1.</_>\n        <_>\n          10 0 10 5 2.</_>\n        <_>\n          0 5 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 13 3 -1.</_>\n        <_>\n          0 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 13 3 -1.</_>\n        <_>\n          1 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 4 -1.</_>\n        <_>\n          13 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 19 -1.</_>\n        <_>\n          4 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 6 -1.</_>\n        <_>\n          12 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 13 3 -1.</_>\n        <_>\n          3 10 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 3 -1.</_>\n        <_>\n          4 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 9 -1.</_>\n        <_>\n          4 8 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 3 -1.</_>\n        <_>\n          6 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 4 -1.</_>\n        <_>\n          0 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 18 -1.</_>\n        <_>\n          12 2 7 9 2.</_>\n        <_>\n          5 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 12 -1.</_>\n        <_>\n          7 11 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 18 -1.</_>\n        <_>\n          12 2 7 9 2.</_>\n        <_>\n          5 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 14 18 -1.</_>\n        <_>\n          1 2 7 9 2.</_>\n        <_>\n          8 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 10 -1.</_>\n        <_>\n          10 10 4 5 2.</_>\n        <_>\n          6 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 8 -1.</_>\n        <_>\n          3 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          10 10 4 4 2.</_>\n        <_>\n          6 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 6 -1.</_>\n        <_>\n          1 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 13 3 -1.</_>\n        <_>\n          4 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 9 -1.</_>\n        <_>\n          8 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 7 -1.</_>\n        <_>\n          10 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 19 6 -1.</_>\n        <_>\n          0 13 19 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 10 -1.</_>\n        <_>\n          4 6 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 13 3 -1.</_>\n        <_>\n          5 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 2 -1.</_>\n        <_>\n          0 6 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 17 6 -1.</_>\n        <_>\n          2 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 10 6 -1.</_>\n        <_>\n          3 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 11 -1.</_>\n        <_>\n          9 0 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          2 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 7 -1.</_>\n        <_>\n          16 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 12 -1.</_>\n        <_>\n          3 8 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 7 6 -1.</_>\n        <_>\n          13 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 7 6 -1.</_>\n        <_>\n          0 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 7 -1.</_>\n        <_>\n          16 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 7 -1.</_>\n        <_>\n          2 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 15 -1.</_>\n        <_>\n          11 0 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 11 -1.</_>\n        <_>\n          7 5 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 3 -1.</_>\n        <_>\n          6 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 7 -1.</_>\n        <_>\n          10 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 14 -1.</_>\n        <_>\n          8 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 13 3 -1.</_>\n        <_>\n          5 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 13 -1.</_>\n        <_>\n          9 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 14 -1.</_>\n        <_>\n          11 6 2 7 2.</_>\n        <_>\n          9 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 10 -1.</_>\n        <_>\n          6 9 4 5 2.</_>\n        <_>\n          10 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 14 5 -1.</_>\n        <_>\n          7 15 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 5 -1.</_>\n        <_>\n          12 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 10 6 -1.</_>\n        <_>\n          0 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 14 4 -1.</_>\n        <_>\n          4 18 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 18 -1.</_>\n        <_>\n          8 1 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 2 -1.</_>\n        <_>\n          6 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 20 -1.</_>\n        <_>\n          10 0 7 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 7 -1.</_>\n        <_>\n          8 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 9 7 -1.</_>\n        <_>\n          7 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 13 -1.</_>\n        <_>\n          8 3 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 8 -1.</_>\n        <_>\n          7 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 5 -1.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 10 -1.</_>\n        <_>\n          11 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 12 6 -1.</_>\n        <_>\n          4 11 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 10 -1.</_>\n        <_>\n          11 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 10 -1.</_>\n        <_>\n          7 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 2 -1.</_>\n        <_>\n          6 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 2 -1.</_>\n        <_>\n          0 15 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 12 -1.</_>\n        <_>\n          15 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 12 -1.</_>\n        <_>\n          0 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          16 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 6 -1.</_>\n        <_>\n          0 14 6 3 2.</_>\n        <_>\n          6 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 14 -1.</_>\n        <_>\n          16 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 4 14 -1.</_>\n        <_>\n          0 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 5 -1.</_>\n        <_>\n          12 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 5 -1.</_>\n        <_>\n          4 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 14 -1.</_>\n        <_>\n          13 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 5 8 -1.</_>\n        <_>\n          5 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 14 -1.</_>\n        <_>\n          18 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 6 -1.</_>\n        <_>\n          6 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 9 -1.</_>\n        <_>\n          14 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 6 -1.</_>\n        <_>\n          3 4 7 3 2.</_>\n        <_>\n          10 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 9 6 -1.</_>\n        <_>\n          10 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 5 -1.</_>\n        <_>\n          4 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 18 -1.</_>\n        <_>\n          15 0 3 9 2.</_>\n        <_>\n          12 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 18 -1.</_>\n        <_>\n          2 0 3 9 2.</_>\n        <_>\n          5 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 14 -1.</_>\n        <_>\n          10 0 8 7 2.</_>\n        <_>\n          2 7 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 16 -1.</_>\n        <_>\n          2 0 2 8 2.</_>\n        <_>\n          4 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 4 -1.</_>\n        <_>\n          12 0 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 4 -1.</_>\n        <_>\n          4 0 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 14 5 -1.</_>\n        <_>\n          6 12 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 14 5 -1.</_>\n        <_>\n          7 12 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 5 -1.</_>\n        <_>\n          12 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 12 5 -1.</_>\n        <_>\n          4 1 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          10 10 7 2 2.</_>\n        <_>\n          3 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 4 -1.</_>\n        <_>\n          0 14 10 2 2.</_>\n        <_>\n          10 16 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 9 5 -1.</_>\n        <_>\n          13 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 9 5 -1.</_>\n        <_>\n          4 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 8 4 -1.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          4 5 6 3 2.</_>\n        <_>\n          10 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 5 -1.</_>\n        <_>\n          7 1 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 10 10 -1.</_>\n        <_>\n          14 2 5 5 2.</_>\n        <_>\n          9 7 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 10 10 -1.</_>\n        <_>\n          1 2 5 5 2.</_>\n        <_>\n          6 7 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 6 -1.</_>\n        <_>\n          14 3 6 3 2.</_>\n        <_>\n          8 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 8 4 -1.</_>\n        <_>\n          5 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 12 -1.</_>\n        <_>\n          10 3 10 6 2.</_>\n        <_>\n          0 9 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 5 5 3 2.</_>\n        <_>\n          10 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 12 -1.</_>\n        <_>\n          12 8 3 6 2.</_>\n        <_>\n          9 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 4 -1.</_>\n        <_>\n          0 8 9 2 2.</_>\n        <_>\n          9 10 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          10 14 7 2 2.</_>\n        <_>\n          3 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 8 4 -1.</_>\n        <_>\n          6 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 12 -1.</_>\n        <_>\n          7 10 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 12 -1.</_>\n        <_>\n          9 11 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 5 9 -1.</_>\n        <_>\n          7 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 12 5 -1.</_>\n        <_>\n          8 13 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 9 -1.</_>\n        <_>\n          4 12 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 4 -1.</_>\n        <_>\n          8 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 7 -1.</_>\n        <_>\n          9 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 4 -1.</_>\n        <_>\n          0 15 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 3 -1.</_>\n        <_>\n          2 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 12 -1.</_>\n        <_>\n          9 11 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 9 17 -1.</_>\n        <_>\n          6 1 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 4 8 -1.</_>\n        <_>\n          8 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 12 -1.</_>\n        <_>\n          12 4 7 6 2.</_>\n        <_>\n          5 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 2 -1.</_>\n        <_>\n          9 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 12 -1.</_>\n        <_>\n          7 5 3 6 2.</_>\n        <_>\n          10 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 14 3 -1.</_>\n        <_>\n          6 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 14 3 -1.</_>\n        <_>\n          0 11 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 3 -1.</_>\n        <_>\n          4 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 15 12 -1.</_>\n        <_>\n          5 2 5 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 12 -1.</_>\n        <_>\n          14 5 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 16 -1.</_>\n        <_>\n          2 9 16 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 13 3 -1.</_>\n        <_>\n          7 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 4 -1.</_>\n        <_>\n          3 7 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 7 4 -1.</_>\n        <_>\n          9 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 14 6 -1.</_>\n        <_>\n          3 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 7 4 -1.</_>\n        <_>\n          9 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 4 -1.</_>\n        <_>\n          4 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          1 10 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 12 -1.</_>\n        <_>\n          14 5 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 12 -1.</_>\n        <_>\n          3 5 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 3 10 -1.</_>\n        <_>\n          11 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 20 -1.</_>\n        <_>\n          1 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 11 -1.</_>\n        <_>\n          8 0 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 5 -1.</_>\n        <_>\n          7 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 9 6 -1.</_>\n        <_>\n          7 4 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 9 8 -1.</_>\n        <_>\n          11 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 9 8 -1.</_>\n        <_>\n          6 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 10 -1.</_>\n        <_>\n          12 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          9 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 9 -1.</_>\n        <_>\n          9 9 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 9 9 -1.</_>\n        <_>\n          7 3 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 9 -1.</_>\n        <_>\n          8 2 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 16 3 -1.</_>\n        <_>\n          0 3 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          10 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 9 -1.</_>\n        <_>\n          6 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 12 -1.</_>\n        <_>\n          12 4 7 6 2.</_>\n        <_>\n          5 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          6 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 10 -1.</_>\n        <_>\n          1 10 3 5 2.</_>\n        <_>\n          4 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 8 -1.</_>\n        <_>\n          12 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          4 14 6 3 2.</_>\n        <_>\n          10 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 8 -1.</_>\n        <_>\n          12 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 8 -1.</_>\n        <_>\n          4 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 14 4 -1.</_>\n        <_>\n          11 11 7 2 2.</_>\n        <_>\n          4 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 14 4 -1.</_>\n        <_>\n          2 11 7 2 2.</_>\n        <_>\n          9 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          12 6 5 3 2.</_>\n        <_>\n          7 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 6 -1.</_>\n        <_>\n          3 6 5 3 2.</_>\n        <_>\n          8 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 19 -1.</_>\n        <_>\n          11 0 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 19 -1.</_>\n        <_>\n          7 0 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 14 2 -1.</_>\n        <_>\n          4 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 9 -1.</_>\n        <_>\n          13 4 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 7 9 -1.</_>\n        <_>\n          0 4 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 11 6 -1.</_>\n        <_>\n          9 13 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 11 6 -1.</_>\n        <_>\n          0 13 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 10 -1.</_>\n        <_>\n          10 5 8 5 2.</_>\n        <_>\n          2 10 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 4 -1.</_>\n        <_>\n          11 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 12 -1.</_>\n        <_>\n          1 4 7 6 2.</_>\n        <_>\n          8 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 13 3 -1.</_>\n        <_>\n          2 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 6 -1.</_>\n        <_>\n          1 13 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 7 18 -1.</_>\n        <_>\n          6 11 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 4 -1.</_>\n        <_>\n          11 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 6 -1.</_>\n        <_>\n          1 1 8 3 2.</_>\n        <_>\n          9 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 4 14 -1.</_>\n        <_>\n          18 1 2 7 2.</_>\n        <_>\n          16 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 14 -1.</_>\n        <_>\n          0 1 2 7 2.</_>\n        <_>\n          2 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 4 -1.</_>\n        <_>\n          13 7 7 2 2.</_>\n        <_>\n          6 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 5 -1.</_>\n        <_>\n          6 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 6 -1.</_>\n        <_>\n          4 4 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 4 -1.</_>\n        <_>\n          0 7 7 2 2.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 13 2 -1.</_>\n        <_>\n          2 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 10 6 -1.</_>\n        <_>\n          14 12 5 3 2.</_>\n        <_>\n          9 15 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 10 -1.</_>\n        <_>\n          7 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 5 -1.</_>\n        <_>\n          7 2 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 13 2 -1.</_>\n        <_>\n          7 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 17 -1.</_>\n        <_>\n          15 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 17 -1.</_>\n        <_>\n          4 1 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 7 6 -1.</_>\n        <_>\n          12 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 17 -1.</_>\n        <_>\n          4 2 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 18 -1.</_>\n        <_>\n          16 0 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 7 6 -1.</_>\n        <_>\n          3 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 12 -1.</_>\n        <_>\n          11 4 3 6 2.</_>\n        <_>\n          8 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 10 -1.</_>\n        <_>\n          4 4 6 5 2.</_>\n        <_>\n          10 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 18 -1.</_>\n        <_>\n          16 0 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 18 -1.</_>\n        <_>\n          2 0 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 18 -1.</_>\n        <_>\n          9 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 6 -1.</_>\n        <_>\n          3 5 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 3 12 -1.</_>\n        <_>\n          17 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 3 12 -1.</_>\n        <_>\n          0 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 5 9 -1.</_>\n        <_>\n          14 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 8 -1.</_>\n        <_>\n          1 4 18 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 4 -1.</_>\n        <_>\n          11 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 4 -1.</_>\n        <_>\n          1 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 3 -1.</_>\n        <_>\n          10 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 5 -1.</_>\n        <_>\n          5 7 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 4 -1.</_>\n        <_>\n          2 6 8 2 2.</_>\n        <_>\n          10 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 5 9 -1.</_>\n        <_>\n          15 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 12 -1.</_>\n        <_>\n          11 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 6 -1.</_>\n        <_>\n          0 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 7 18 -1.</_>\n        <_>\n          7 10 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 6 -1.</_>\n        <_>\n          0 2 9 3 2.</_>\n        <_>\n          9 5 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 13 2 -1.</_>\n        <_>\n          5 9 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 3 10 -1.</_>\n        <_>\n          6 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 2 -1.</_>\n        <_>\n          6 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          1 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 18 2 -1.</_>\n        <_>\n          1 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 10 3 -1.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 4 -1.</_>\n        <_>\n          7 15 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 9 -1.</_>\n        <_>\n          8 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 11 -1.</_>\n        <_>\n          8 6 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 0 4 5 2.</_>\n        <_>\n          4 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 3 -1.</_>\n        <_>\n          8 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 9 -1.</_>\n        <_>\n          8 9 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 2 17 -1.</_>\n        <_>\n          11 3 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 20 -1.</_>\n        <_>\n          8 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 8 18 -1.</_>\n        <_>\n          10 1 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 8 -1.</_>\n        <_>\n          4 5 4 4 2.</_>\n        <_>\n          8 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 12 14 -1.</_>\n        <_>\n          12 1 6 7 2.</_>\n        <_>\n          6 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 8 18 -1.</_>\n        <_>\n          6 1 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 7 -1.</_>\n        <_>\n          7 5 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 16 -1.</_>\n        <_>\n          3 4 3 8 2.</_>\n        <_>\n          6 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 4 14 -1.</_>\n        <_>\n          14 3 2 7 2.</_>\n        <_>\n          12 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 4 14 -1.</_>\n        <_>\n          4 3 2 7 2.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 6 6 -1.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 6 6 -1.</_>\n        <_>\n          9 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 3 -1.</_>\n        <_>\n          4 2 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 10 6 -1.</_>\n        <_>\n          3 5 5 3 2.</_>\n        <_>\n          8 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 8 -1.</_>\n        <_>\n          0 4 10 4 2.</_>\n        <_>\n          10 8 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 8 8 -1.</_>\n        <_>\n          16 5 4 4 2.</_>\n        <_>\n          12 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 15 6 -1.</_>\n        <_>\n          1 3 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 16 3 -1.</_>\n        <_>\n          3 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 5 -1.</_>\n        <_>\n          10 3 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 9 5 -1.</_>\n        <_>\n          10 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 16 3 -1.</_>\n        <_>\n          9 6 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 15 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 14 -1.</_>\n        <_>\n          1 1 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 13 -1.</_>\n        <_>\n          13 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 13 -1.</_>\n        <_>\n          6 5 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 8 -1.</_>\n        <_>\n          4 10 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 7 6 -1.</_>\n        <_>\n          3 10 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 10 -1.</_>\n        <_>\n          0 8 20 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 7 6 -1.</_>\n        <_>\n          0 5 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 4 -1.</_>\n        <_>\n          11 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 4 -1.</_>\n        <_>\n          1 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 6 -1.</_>\n        <_>\n          5 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 8 10 -1.</_>\n        <_>\n          6 8 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 5 12 -1.</_>\n        <_>\n          7 8 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 12 -1.</_>\n        <_>\n          9 7 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 8 -1.</_>\n        <_>\n          9 3 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 16 -1.</_>\n        <_>\n          10 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 16 8 -1.</_>\n        <_>\n          0 10 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 16 4 -1.</_>\n        <_>\n          3 10 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 9 4 -1.</_>\n        <_>\n          10 10 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          7 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 13 9 -1.</_>\n        <_>\n          0 10 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 8 -1.</_>\n        <_>\n          10 11 4 4 2.</_>\n        <_>\n          6 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 10 4 -1.</_>\n        <_>\n          5 15 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 16 2 -1.</_>\n        <_>\n          4 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 7 6 -1.</_>\n        <_>\n          8 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 5 8 -1.</_>\n        <_>\n          7 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 12 -1.</_>\n        <_>\n          6 11 10 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 7 -1.</_>\n        <_>\n          8 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 7 -1.</_>\n        <_>\n          14 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 10 -1.</_>\n        <_>\n          6 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 2 16 -1.</_>\n        <_>\n          13 4 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 16 -1.</_>\n        <_>\n          6 4 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 16 -1.</_>\n        <_>\n          10 3 2 8 2.</_>\n        <_>\n          8 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 18 -1.</_>\n        <_>\n          8 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 2 -1.</_>\n        <_>\n          4 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 14 2 -1.</_>\n        <_>\n          0 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 7 -1.</_>\n        <_>\n          14 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 2 -1.</_>\n        <_>\n          0 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 7 -1.</_>\n        <_>\n          14 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 4 7 -1.</_>\n        <_>\n          4 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 5 6 -1.</_>\n        <_>\n          2 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 5 9 -1.</_>\n        <_>\n          14 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 17 6 -1.</_>\n        <_>\n          0 15 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 2 14 -1.</_>\n        <_>\n          9 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 13 3 -1.</_>\n        <_>\n          1 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 14 -1.</_>\n        <_>\n          4 5 2 7 2.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 8 8 -1.</_>\n        <_>\n          2 8 4 4 2.</_>\n        <_>\n          6 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 9 -1.</_>\n        <_>\n          13 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 5 9 -1.</_>\n        <_>\n          4 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 10 -1.</_>\n        <_>\n          13 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 8 -1.</_>\n        <_>\n          3 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 6 -1.</_>\n        <_>\n          10 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 13 3 -1.</_>\n        <_>\n          1 18 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 11 -1.</_>\n        <_>\n          9 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 9 6 -1.</_>\n        <_>\n          9 1 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 3 -1.</_>\n        <_>\n          1 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 3 -1.</_>\n        <_>\n          4 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 14 12 -1.</_>\n        <_>\n          1 2 7 6 2.</_>\n        <_>\n          8 8 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 14 -1.</_>\n        <_>\n          15 4 2 7 2.</_>\n        <_>\n          13 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 14 -1.</_>\n        <_>\n          3 4 2 7 2.</_>\n        <_>\n          5 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 7 4 -1.</_>\n        <_>\n          1 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 2 -1.</_>\n        <_>\n          1 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 7 -1.</_>\n        <_>\n          16 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 3 -1.</_>\n        <_>\n          3 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 6 7 -1.</_>\n        <_>\n          13 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 19 12 -1.</_>\n        <_>\n          1 11 19 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 10 -1.</_>\n        <_>\n          7 9 3 5 2.</_>\n        <_>\n          10 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 13 3 -1.</_>\n        <_>\n          4 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 7 4 -1.</_>\n        <_>\n          3 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 15 -1.</_>\n        <_>\n          16 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 10 -1.</_>\n        <_>\n          11 0 4 5 2.</_>\n        <_>\n          7 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 2 -1.</_>\n        <_>\n          10 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 3 -1.</_>\n        <_>\n          7 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 3 -1.</_>\n        <_>\n          8 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 18 16 -1.</_>\n        <_>\n          6 4 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 19 -1.</_>\n        <_>\n          15 0 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 9 5 -1.</_>\n        <_>\n          12 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 10 -1.</_>\n        <_>\n          5 0 4 5 2.</_>\n        <_>\n          9 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 3 -1.</_>\n        <_>\n          0 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 12 -1.</_>\n        <_>\n          16 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 19 -1.</_>\n        <_>\n          3 0 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 7 -1.</_>\n        <_>\n          14 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 9 14 -1.</_>\n        <_>\n          4 6 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 9 -1.</_>\n        <_>\n          9 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 10 -1.</_>\n        <_>\n          0 10 3 5 2.</_>\n        <_>\n          3 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 6 -1.</_>\n        <_>\n          8 8 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 9 -1.</_>\n        <_>\n          6 5 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 9 5 -1.</_>\n        <_>\n          7 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 7 -1.</_>\n        <_>\n          12 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 7 6 -1.</_>\n        <_>\n          6 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 14 -1.</_>\n        <_>\n          13 6 2 7 2.</_>\n        <_>\n          11 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 14 -1.</_>\n        <_>\n          5 6 2 7 2.</_>\n        <_>\n          7 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 4 14 -1.</_>\n        <_>\n          1 5 2 7 2.</_>\n        <_>\n          3 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 4 -1.</_>\n        <_>\n          10 13 9 2 2.</_>\n        <_>\n          1 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 12 -1.</_>\n        <_>\n          0 7 18 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 18 -1.</_>\n        <_>\n          4 10 14 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 10 -1.</_>\n        <_>\n          6 0 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 4 9 -1.</_>\n        <_>\n          16 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 4 9 -1.</_>\n        <_>\n          2 10 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 7 -1.</_>\n        <_>\n          12 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 7 -1.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 15 3 -1.</_>\n        <_>\n          9 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 15 3 -1.</_>\n        <_>\n          6 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 12 -1.</_>\n        <_>\n          16 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 12 -1.</_>\n        <_>\n          7 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 12 -1.</_>\n        <_>\n          16 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 12 -1.</_>\n        <_>\n          2 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 13 -1.</_>\n        <_>\n          9 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 7 -1.</_>\n        <_>\n          2 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 4 -1.</_>\n        <_>\n          10 9 9 2 2.</_>\n        <_>\n          1 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 13 2 -1.</_>\n        <_>\n          3 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 8 -1.</_>\n        <_>\n          6 12 4 4 2.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 7 6 -1.</_>\n        <_>\n          3 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 15 6 -1.</_>\n        <_>\n          10 10 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 7 -1.</_>\n        <_>\n          10 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 7 -1.</_>\n        <_>\n          10 1 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 9 6 -1.</_>\n        <_>\n          1 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 6 -1.</_>\n        <_>\n          7 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 0 4 5 2.</_>\n        <_>\n          4 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 6 7 -1.</_>\n        <_>\n          13 8 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 13 -1.</_>\n        <_>\n          7 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 8 -1.</_>\n        <_>\n          10 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 8 9 -1.</_>\n        <_>\n          2 12 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 4 14 -1.</_>\n        <_>\n          16 4 2 7 2.</_>\n        <_>\n          14 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 8 -1.</_>\n        <_>\n          4 13 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 8 -1.</_>\n        <_>\n          7 1 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 6 -1.</_>\n        <_>\n          1 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 15 6 -1.</_>\n        <_>\n          5 10 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 5 -1.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 5 -1.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 4 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 5 9 -1.</_>\n        <_>\n          5 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 3 -1.</_>\n        <_>\n          7 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 4 -1.</_>\n        <_>\n          2 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 4 -1.</_>\n        <_>\n          0 0 10 2 2.</_>\n        <_>\n          10 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 2 -1.</_>\n        <_>\n          6 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 13 3 -1.</_>\n        <_>\n          1 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 10 -1.</_>\n        <_>\n          15 0 3 5 2.</_>\n        <_>\n          12 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 13 2 -1.</_>\n        <_>\n          3 17 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 13 3 -1.</_>\n        <_>\n          1 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 9 -1.</_>\n        <_>\n          15 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          0 1 9 2 2.</_>\n        <_>\n          9 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 4 -1.</_>\n        <_>\n          5 2 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 10 -1.</_>\n        <_>\n          4 2 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 6 -1.</_>\n        <_>\n          8 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 6 -1.</_>\n        <_>\n          5 4 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 12 -1.</_>\n        <_>\n          8 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 14 8 -1.</_>\n        <_>\n          5 4 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 4 14 -1.</_>\n        <_>\n          2 4 2 7 2.</_>\n        <_>\n          4 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 6 -1.</_>\n        <_>\n          15 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 9 5 -1.</_>\n        <_>\n          8 12 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 12 6 -1.</_>\n        <_>\n          8 14 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 14 -1.</_>\n        <_>\n          2 5 6 7 2.</_>\n        <_>\n          8 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 4 -1.</_>\n        <_>\n          10 10 7 2 2.</_>\n        <_>\n          3 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          8 2 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 14 -1.</_>\n        <_>\n          14 0 2 7 2.</_>\n        <_>\n          12 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 14 -1.</_>\n        <_>\n          4 0 2 7 2.</_>\n        <_>\n          6 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 6 11 -1.</_>\n        <_>\n          14 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 14 -1.</_>\n        <_>\n          1 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 3 13 -1.</_>\n        <_>\n          16 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 3 13 -1.</_>\n        <_>\n          3 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 10 10 -1.</_>\n        <_>\n          13 10 5 5 2.</_>\n        <_>\n          8 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 2 20 -1.</_>\n        <_>\n          7 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 6 -1.</_>\n        <_>\n          12 14 7 3 2.</_>\n        <_>\n          5 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 3 13 -1.</_>\n        <_>\n          2 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 14 -1.</_>\n        <_>\n          18 6 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 14 -1.</_>\n        <_>\n          1 6 1 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 9 5 -1.</_>\n        <_>\n          13 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 7 -1.</_>\n        <_>\n          4 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 16 -1.</_>\n        <_>\n          11 4 7 8 2.</_>\n        <_>\n          4 12 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 7 6 -1.</_>\n        <_>\n          12 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 20 3 -1.</_>\n        <_>\n          10 17 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 10 4 -1.</_>\n        <_>\n          6 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 7 6 -1.</_>\n        <_>\n          12 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 8 -1.</_>\n        <_>\n          9 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 15 -1.</_>\n        <_>\n          6 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 9 -1.</_>\n        <_>\n          3 9 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 8 -1.</_>\n        <_>\n          4 9 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 16 -1.</_>\n        <_>\n          2 4 7 8 2.</_>\n        <_>\n          9 12 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 12 3 -1.</_>\n        <_>\n          7 17 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 19 3 -1.</_>\n        <_>\n          1 8 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 10 -1.</_>\n        <_>\n          10 0 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 12 4 -1.</_>\n        <_>\n          6 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 5 -1.</_>\n        <_>\n          7 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 18 -1.</_>\n        <_>\n          18 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 3 -1.</_>\n        <_>\n          3 14 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 7 6 -1.</_>\n        <_>\n          12 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 7 6 -1.</_>\n        <_>\n          12 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 7 6 -1.</_>\n        <_>\n          1 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 12 12 -1.</_>\n        <_>\n          5 11 12 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 10 -1.</_>\n        <_>\n          4 5 5 5 2.</_>\n        <_>\n          9 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 8 7 -1.</_>\n        <_>\n          12 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 9 6 -1.</_>\n        <_>\n          4 3 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 2 -1.</_>\n        <_>\n          4 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 18 -1.</_>\n        <_>\n          1 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 2 -1.</_>\n        <_>\n          0 14 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 10 4 -1.</_>\n        <_>\n          9 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 12 16 -1.</_>\n        <_>\n          8 4 6 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 16 -1.</_>\n        <_>\n          6 4 6 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 9 -1.</_>\n        <_>\n          12 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 7 -1.</_>\n        <_>\n          4 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 16 -1.</_>\n        <_>\n          13 0 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 18 12 -1.</_>\n        <_>\n          6 7 6 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 12 4 -1.</_>\n        <_>\n          8 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 16 4 -1.</_>\n        <_>\n          0 7 8 2 2.</_>\n        <_>\n          8 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 9 5 -1.</_>\n        <_>\n          10 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 16 -1.</_>\n        <_>\n          6 0 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 13 2 -1.</_>\n        <_>\n          6 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 2 -1.</_>\n        <_>\n          1 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 9 -1.</_>\n        <_>\n          8 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 8 -1.</_>\n        <_>\n          8 4 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 4 8 -1.</_>\n        <_>\n          14 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 4 8 -1.</_>\n        <_>\n          4 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 7 -1.</_>\n        <_>\n          12 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 8 -1.</_>\n        <_>\n          4 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 7 -1.</_>\n        <_>\n          10 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 7 -1.</_>\n        <_>\n          7 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 5 -1.</_>\n        <_>\n          8 10 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 6 -1.</_>\n        <_>\n          6 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 3 -1.</_>\n        <_>\n          4 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 4 14 -1.</_>\n        <_>\n          4 3 2 7 2.</_>\n        <_>\n          6 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 2 -1.</_>\n        <_>\n          10 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 14 -1.</_>\n        <_>\n          15 6 4 7 2.</_>\n        <_>\n          11 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 19 -1.</_>\n        <_>\n          4 0 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 10 -1.</_>\n        <_>\n          15 5 3 5 2.</_>\n        <_>\n          12 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 10 -1.</_>\n        <_>\n          2 5 3 5 2.</_>\n        <_>\n          5 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 9 4 -1.</_>\n        <_>\n          7 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 2 -1.</_>\n        <_>\n          9 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 9 -1.</_>\n        <_>\n          6 6 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 9 5 -1.</_>\n        <_>\n          7 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 7 -1.</_>\n        <_>\n          10 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 5 -1.</_>\n        <_>\n          8 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 4 -1.</_>\n        <_>\n          11 1 7 2 2.</_>\n        <_>\n          4 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 2 13 -1.</_>\n        <_>\n          10 1 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_>\n        <_>\n          10 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 10 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_>\n        <_>\n          5 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 3 -1.</_>\n        <_>\n          6 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 4 13 -1.</_>\n        <_>\n          3 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 5 -1.</_>\n        <_>\n          3 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 5 12 -1.</_>\n        <_>\n          15 10 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 16 -1.</_>\n        <_>\n          0 1 3 8 2.</_>\n        <_>\n          3 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 2 -1.</_>\n        <_>\n          0 0 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 12 -1.</_>\n        <_>\n          0 10 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          10 0 9 3 2.</_>\n        <_>\n          1 3 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 5 -1.</_>\n        <_>\n          7 0 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 9 5 -1.</_>\n        <_>\n          10 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 8 18 -1.</_>\n        <_>\n          11 2 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 18 -1.</_>\n        <_>\n          5 2 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 5 6 -1.</_>\n        <_>\n          12 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 14 4 -1.</_>\n        <_>\n          2 1 7 2 2.</_>\n        <_>\n          9 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 8 6 -1.</_>\n        <_>\n          12 9 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 6 -1.</_>\n        <_>\n          0 9 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 13 2 -1.</_>\n        <_>\n          7 8 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 9 -1.</_>\n        <_>\n          1 9 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 20 6 -1.</_>\n        <_>\n          0 10 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 4 13 -1.</_>\n        <_>\n          6 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 15 -1.</_>\n        <_>\n          14 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 3 -1.</_>\n        <_>\n          3 16 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 17 3 -1.</_>\n        <_>\n          0 17 17 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 11 6 -1.</_>\n        <_>\n          5 14 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 15 -1.</_>\n        <_>\n          5 3 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 9 -1.</_>\n        <_>\n          3 4 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 8 -1.</_>\n        <_>\n          0 4 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 7 4 -1.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 13 2 -1.</_>\n        <_>\n          2 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 3 -1.</_>\n        <_>\n          2 13 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 13 3 -1.</_>\n        <_>\n          1 12 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 13 3 -1.</_>\n        <_>\n          7 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 7 6 -1.</_>\n        <_>\n          5 16 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 14 3 -1.</_>\n        <_>\n          4 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 2 -1.</_>\n        <_>\n          3 3 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 14 -1.</_>\n        <_>\n          3 7 15 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 14 -1.</_>\n        <_>\n          4 8 12 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 7 -1.</_>\n        <_>\n          11 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 4 -1.</_>\n        <_>\n          6 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 8 6 -1.</_>\n        <_>\n          8 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 5 -1.</_>\n        <_>\n          11 10 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 16 -1.</_>\n        <_>\n          1 0 4 8 2.</_>\n        <_>\n          5 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 6 18 -1.</_>\n        <_>\n          8 8 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 6 18 -1.</_>\n        <_>\n          6 8 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 4 -1.</_>\n        <_>\n          7 8 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 5 9 -1.</_>\n        <_>\n          1 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 10 6 -1.</_>\n        <_>\n          0 14 5 3 2.</_>\n        <_>\n          5 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 5 9 -1.</_>\n        <_>\n          9 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 12 4 -1.</_>\n        <_>\n          4 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 3 14 -1.</_>\n        <_>\n          15 6 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          6 9 4 4 2.</_>\n        <_>\n          10 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 7 -1.</_>\n        <_>\n          8 5 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 9 -1.</_>\n        <_>\n          8 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 16 -1.</_>\n        <_>\n          10 2 3 8 2.</_>\n        <_>\n          7 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 5 -1.</_>\n        <_>\n          9 15 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 14 4 -1.</_>\n        <_>\n          11 12 7 2 2.</_>\n        <_>\n          4 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 14 4 -1.</_>\n        <_>\n          2 12 7 2 2.</_>\n        <_>\n          9 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 14 3 -1.</_>\n        <_>\n          4 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 10 3 -1.</_>\n        <_>\n          5 2 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 8 -1.</_>\n        <_>\n          8 0 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 2 -1.</_>\n        <_>\n          10 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 9 -1.</_>\n        <_>\n          6 0 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 10 6 -1.</_>\n        <_>\n          3 2 5 3 2.</_>\n        <_>\n          8 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 13 -1.</_>\n        <_>\n          15 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 6 -1.</_>\n        <_>\n          11 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 6 -1.</_>\n        <_>\n          1 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 3 -1.</_>\n        <_>\n          3 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 15 9 -1.</_>\n        <_>\n          4 5 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 13 3 -1.</_>\n        <_>\n          0 2 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 14 4 -1.</_>\n        <_>\n          13 16 7 2 2.</_>\n        <_>\n          6 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 16 4 -1.</_>\n        <_>\n          12 16 8 2 2.</_>\n        <_>\n          4 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 16 4 -1.</_>\n        <_>\n          0 16 8 2 2.</_>\n        <_>\n          8 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 5 -1.</_>\n        <_>\n          8 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 5 -1.</_>\n        <_>\n          9 4 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 8 -1.</_>\n        <_>\n          8 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 12 -1.</_>\n        <_>\n          4 12 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 12 -1.</_>\n        <_>\n          1 9 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 9 4 -1.</_>\n        <_>\n          4 8 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 19 3 -1.</_>\n        <_>\n          1 6 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 12 14 -1.</_>\n        <_>\n          2 3 6 7 2.</_>\n        <_>\n          8 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 16 -1.</_>\n        <_>\n          13 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 16 -1.</_>\n        <_>\n          4 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 14 -1.</_>\n        <_>\n          8 0 4 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 10 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_>\n        <_>\n          5 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 13 3 -1.</_>\n        <_>\n          7 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 10 -1.</_>\n        <_>\n          5 5 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 14 -1.</_>\n        <_>\n          15 6 4 7 2.</_>\n        <_>\n          11 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 13 -1.</_>\n        <_>\n          4 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 14 -1.</_>\n        <_>\n          15 6 4 7 2.</_>\n        <_>\n          11 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 13 -1.</_>\n        <_>\n          4 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 9 -1.</_>\n        <_>\n          9 5 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 8 14 -1.</_>\n        <_>\n          1 6 4 7 2.</_>\n        <_>\n          5 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 6 -1.</_>\n        <_>\n          11 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 9 -1.</_>\n        <_>\n          12 14 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 15 9 -1.</_>\n        <_>\n          2 14 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 18 4 -1.</_>\n        <_>\n          8 16 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          7 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          14 0 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          3 0 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 16 -1.</_>\n        <_>\n          15 1 2 8 2.</_>\n        <_>\n          13 9 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 6 11 -1.</_>\n        <_>\n          3 9 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 3 -1.</_>\n        <_>\n          6 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 10 -1.</_>\n        <_>\n          0 0 6 5 2.</_>\n        <_>\n          6 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 3 -1.</_>\n        <_>\n          4 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 7 6 -1.</_>\n        <_>\n          0 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 4 8 -1.</_>\n        <_>\n          13 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 4 8 -1.</_>\n        <_>\n          3 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 5 6 -1.</_>\n        <_>\n          15 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 13 3 -1.</_>\n        <_>\n          0 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 10 6 -1.</_>\n        <_>\n          14 8 5 3 2.</_>\n        <_>\n          9 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 10 6 -1.</_>\n        <_>\n          1 8 5 3 2.</_>\n        <_>\n          6 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 15 6 -1.</_>\n        <_>\n          5 8 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 2 -1.</_>\n        <_>\n          9 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 7 -1.</_>\n        <_>\n          9 1 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 7 -1.</_>\n        <_>\n          8 1 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 6 -1.</_>\n        <_>\n          0 9 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 15 2 -1.</_>\n        <_>\n          2 9 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 15 6 -1.</_>\n        <_>\n          0 4 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 15 2 -1.</_>\n        <_>\n          5 3 15 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 7 4 -1.</_>\n        <_>\n          5 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 8 -1.</_>\n        <_>\n          13 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 6 -1.</_>\n        <_>\n          12 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 9 -1.</_>\n        <_>\n          3 6 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 5 6 -1.</_>\n        <_>\n          12 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 5 6 -1.</_>\n        <_>\n          3 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 17 8 -1.</_>\n        <_>\n          2 13 17 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 7 12 -1.</_>\n        <_>\n          6 12 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 9 -1.</_>\n        <_>\n          11 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 16 -1.</_>\n        <_>\n          6 2 2 8 2.</_>\n        <_>\n          8 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 6 -1.</_>\n        <_>\n          15 4 5 3 2.</_>\n        <_>\n          10 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 4 -1.</_>\n        <_>\n          6 0 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 7 -1.</_>\n        <_>\n          10 1 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 9 7 -1.</_>\n        <_>\n          7 1 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 12 17 -1.</_>\n        <_>\n          5 1 4 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 12 -1.</_>\n        <_>\n          12 1 3 6 2.</_>\n        <_>\n          9 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 9 15 -1.</_>\n        <_>\n          5 5 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 4 -1.</_>\n        <_>\n          12 0 8 2 2.</_>\n        <_>\n          4 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 4 -1.</_>\n        <_>\n          0 0 8 2 2.</_>\n        <_>\n          8 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 10 6 -1.</_>\n        <_>\n          15 4 5 3 2.</_>\n        <_>\n          10 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 13 2 -1.</_>\n        <_>\n          5 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 6 -1.</_>\n        <_>\n          0 4 5 3 2.</_>\n        <_>\n          5 7 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 12 5 -1.</_>\n        <_>\n          12 11 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 7 6 -1.</_>\n        <_>\n          11 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 6 -1.</_>\n        <_>\n          1 17 18 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 6 -1.</_>\n        <_>\n          3 3 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 6 -1.</_>\n        <_>\n          12 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 12 5 -1.</_>\n        <_>\n          9 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          5 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          15 0 2 7 2.</_>\n        <_>\n          13 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 5 -1.</_>\n        <_>\n          5 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 16 -1.</_>\n        <_>\n          12 2 3 8 2.</_>\n        <_>\n          9 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 14 -1.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 16 -1.</_>\n        <_>\n          17 4 2 8 2.</_>\n        <_>\n          15 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 8 -1.</_>\n        <_>\n          5 1 5 4 2.</_>\n        <_>\n          10 5 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 7 6 -1.</_>\n        <_>\n          11 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 14 3 -1.</_>\n        <_>\n          1 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 8 -1.</_>\n        <_>\n          13 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 8 -1.</_>\n        <_>\n          0 5 9 4 2.</_>\n        <_>\n          9 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 14 -1.</_>\n        <_>\n          15 5 2 7 2.</_>\n        <_>\n          13 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 13 -1.</_>\n        <_>\n          2 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 14 -1.</_>\n        <_>\n          15 5 2 7 2.</_>\n        <_>\n          13 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 14 -1.</_>\n        <_>\n          3 5 2 7 2.</_>\n        <_>\n          5 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 7 6 -1.</_>\n        <_>\n          11 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 16 -1.</_>\n        <_>\n          16 4 3 8 2.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 10 6 -1.</_>\n        <_>\n          0 9 5 3 2.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 15 -1.</_>\n        <_>\n          9 10 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 10 -1.</_>\n        <_>\n          10 2 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 16 -1.</_>\n        <_>\n          16 4 3 8 2.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 5 -1.</_>\n        <_>\n          7 8 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 16 -1.</_>\n        <_>\n          16 4 3 8 2.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 16 -1.</_>\n        <_>\n          1 4 3 8 2.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 18 4 -1.</_>\n        <_>\n          11 15 9 2 2.</_>\n        <_>\n          2 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 16 -1.</_>\n        <_>\n          7 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 4 -1.</_>\n        <_>\n          0 6 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 17 -1.</_>\n        <_>\n          14 1 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 7 6 -1.</_>\n        <_>\n          2 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 16 -1.</_>\n        <_>\n          14 0 3 8 2.</_>\n        <_>\n          11 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 13 3 -1.</_>\n        <_>\n          1 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 16 -1.</_>\n        <_>\n          3 0 3 8 2.</_>\n        <_>\n          6 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 10 3 -1.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 5 -1.</_>\n        <_>\n          7 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 6 -1.</_>\n        <_>\n          7 0 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 10 3 -1.</_>\n        <_>\n          5 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 8 -1.</_>\n        <_>\n          7 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 9 6 -1.</_>\n        <_>\n          11 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 7 9 -1.</_>\n        <_>\n          4 10 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 10 6 -1.</_>\n        <_>\n          5 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 19 4 -1.</_>\n        <_>\n          0 16 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 12 8 -1.</_>\n        <_>\n          12 9 6 4 2.</_>\n        <_>\n          6 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 3 14 -1.</_>\n        <_>\n          2 1 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 12 8 -1.</_>\n        <_>\n          12 9 6 4 2.</_>\n        <_>\n          6 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 8 -1.</_>\n        <_>\n          2 9 6 4 2.</_>\n        <_>\n          8 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 18 -1.</_>\n        <_>\n          18 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 8 -1.</_>\n        <_>\n          8 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 12 -1.</_>\n        <_>\n          10 3 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 12 -1.</_>\n        <_>\n          12 8 3 6 2.</_>\n        <_>\n          9 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 18 -1.</_>\n        <_>\n          18 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 17 6 -1.</_>\n        <_>\n          1 7 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 6 -1.</_>\n        <_>\n          3 2 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 5 6 -1.</_>\n        <_>\n          15 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 5 6 -1.</_>\n        <_>\n          0 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 10 -1.</_>\n        <_>\n          4 6 14 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 7 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 10 9 -1.</_>\n        <_>\n          6 4 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 19 -1.</_>\n        <_>\n          10 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 19 -1.</_>\n        <_>\n          5 1 5 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 12 -1.</_>\n        <_>\n          13 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 12 -1.</_>\n        <_>\n          3 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          11 0 9 2 2.</_>\n        <_>\n          2 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 5 -1.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 8 -1.</_>\n        <_>\n          12 5 6 4 2.</_>\n        <_>\n          6 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 8 -1.</_>\n        <_>\n          2 5 6 4 2.</_>\n        <_>\n          8 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 3 -1.</_>\n        <_>\n          5 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 3 -1.</_>\n        <_>\n          2 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 13 2 -1.</_>\n        <_>\n          7 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 15 3 -1.</_>\n        <_>\n          2 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 4 -1.</_>\n        <_>\n          10 14 9 2 2.</_>\n        <_>\n          1 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 10 -1.</_>\n        <_>\n          5 8 3 5 2.</_>\n        <_>\n          8 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 3 -1.</_>\n        <_>\n          2 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 15 3 -1.</_>\n        <_>\n          0 2 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 4 -1.</_>\n        <_>\n          2 3 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 9 -1.</_>\n        <_>\n          0 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 15 3 -1.</_>\n        <_>\n          3 6 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 10 6 -1.</_>\n        <_>\n          1 5 5 3 2.</_>\n        <_>\n          6 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 12 -1.</_>\n        <_>\n          9 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 19 2 -1.</_>\n        <_>\n          0 3 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 10 -1.</_>\n        <_>\n          16 0 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 13 3 -1.</_>\n        <_>\n          1 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 13 4 -1.</_>\n        <_>\n          7 2 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 10 -1.</_>\n        <_>\n          4 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 7 -1.</_>\n        <_>\n          9 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 13 -1.</_>\n        <_>\n          5 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 6 -1.</_>\n        <_>\n          14 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 15 -1.</_>\n        <_>\n          8 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 8 -1.</_>\n        <_>\n          16 0 4 4 2.</_>\n        <_>\n          12 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 9 -1.</_>\n        <_>\n          7 7 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 9 6 -1.</_>\n        <_>\n          11 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 9 5 -1.</_>\n        <_>\n          8 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_>\n        <_>\n          9 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_>\n        <_>\n          8 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 10 -1.</_>\n        <_>\n          16 10 3 5 2.</_>\n        <_>\n          13 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 10 -1.</_>\n        <_>\n          1 10 3 5 2.</_>\n        <_>\n          4 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 12 -1.</_>\n        <_>\n          10 3 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 12 -1.</_>\n        <_>\n          8 3 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 9 5 -1.</_>\n        <_>\n          14 1 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 3 -1.</_>\n        <_>\n          10 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 10 -1.</_>\n        <_>\n          10 2 4 5 2.</_>\n        <_>\n          6 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          0 0 4 4 2.</_>\n        <_>\n          4 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 6 10 -1.</_>\n        <_>\n          14 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 9 5 -1.</_>\n        <_>\n          3 1 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 17 -1.</_>\n        <_>\n          16 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 20 -1.</_>\n        <_>\n          4 0 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 17 -1.</_>\n        <_>\n          16 0 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          10 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 14 -1.</_>\n        <_>\n          8 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 14 15 -1.</_>\n        <_>\n          1 8 14 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 16 -1.</_>\n        <_>\n          16 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 9 -1.</_>\n        <_>\n          4 9 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 16 -1.</_>\n        <_>\n          16 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 16 -1.</_>\n        <_>\n          2 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 4 7 -1.</_>\n        <_>\n          15 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 6 -1.</_>\n        <_>\n          3 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 8 4 -1.</_>\n        <_>\n          12 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 4 7 -1.</_>\n        <_>\n          3 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 6 -1.</_>\n        <_>\n          14 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 2 13 -1.</_>\n        <_>\n          2 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 11 -1.</_>\n        <_>\n          7 2 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 7 -1.</_>\n        <_>\n          8 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 14 -1.</_>\n        <_>\n          10 6 10 7 2.</_>\n        <_>\n          0 13 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 15 -1.</_>\n        <_>\n          6 5 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 4 15 -1.</_>\n        <_>\n          16 5 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          7 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          10 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 6 -1.</_>\n        <_>\n          5 13 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 17 12 -1.</_>\n        <_>\n          3 13 17 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 17 12 -1.</_>\n        <_>\n          0 13 17 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 19 -1.</_>\n        <_>\n          8 0 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 7 -1.</_>\n        <_>\n          9 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 8 -1.</_>\n        <_>\n          9 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 19 2 -1.</_>\n        <_>\n          0 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 9 6 -1.</_>\n        <_>\n          11 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 3 -1.</_>\n        <_>\n          5 0 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 2 13 -1.</_>\n        <_>\n          18 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 9 6 -1.</_>\n        <_>\n          0 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 7 8 -1.</_>\n        <_>\n          9 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 7 8 -1.</_>\n        <_>\n          4 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 16 2 -1.</_>\n        <_>\n          3 4 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 10 6 -1.</_>\n        <_>\n          6 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 7 6 -1.</_>\n        <_>\n          0 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 15 9 -1.</_>\n        <_>\n          3 14 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 20 -1.</_>\n        <_>\n          10 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 20 -1.</_>\n        <_>\n          5 0 5 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 13 3 -1.</_>\n        <_>\n          5 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 8 -1.</_>\n        <_>\n          5 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 18 -1.</_>\n        <_>\n          4 9 13 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 4 -1.</_>\n        <_>\n          5 0 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          9 7 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 6 -1.</_>\n        <_>\n          9 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 20 2 -1.</_>\n        <_>\n          0 8 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 14 -1.</_>\n        <_>\n          6 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 5 12 -1.</_>\n        <_>\n          13 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 6 -1.</_>\n        <_>\n          4 4 6 3 2.</_>\n        <_>\n          10 7 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 8 -1.</_>\n        <_>\n          10 1 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 10 -1.</_>\n        <_>\n          1 1 3 5 2.</_>\n        <_>\n          4 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 8 -1.</_>\n        <_>\n          11 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 8 -1.</_>\n        <_>\n          1 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 3 12 -1.</_>\n        <_>\n          13 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 12 -1.</_>\n        <_>\n          4 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 8 -1.</_>\n        <_>\n          10 1 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 9 8 -1.</_>\n        <_>\n          7 1 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 10 -1.</_>\n        <_>\n          5 2 3 5 2.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          17 0 3 5 2.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          8 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 8 -1.</_>\n        <_>\n          7 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 9 -1.</_>\n        <_>\n          15 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 16 -1.</_>\n        <_>\n          1 4 2 8 2.</_>\n        <_>\n          3 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 16 4 -1.</_>\n        <_>\n          11 14 8 2 2.</_>\n        <_>\n          3 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 9 6 -1.</_>\n        <_>\n          8 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 2 -1.</_>\n        <_>\n          6 1 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 14 2 -1.</_>\n        <_>\n          7 1 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 8 -1.</_>\n        <_>\n          12 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 14 -1.</_>\n        <_>\n          5 4 5 7 2.</_>\n        <_>\n          10 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          11 0 9 2 2.</_>\n        <_>\n          2 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          9 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 14 4 -1.</_>\n        <_>\n          11 10 7 2 2.</_>\n        <_>\n          4 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 14 4 -1.</_>\n        <_>\n          2 10 7 2 2.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 6 -1.</_>\n        <_>\n          7 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 7 8 -1.</_>\n        <_>\n          6 4 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 9 4 -1.</_>\n        <_>\n          1 5 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 2 -1.</_>\n        <_>\n          4 5 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 14 3 -1.</_>\n        <_>\n          1 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 6 9 -1.</_>\n        <_>\n          9 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 4 7 -1.</_>\n        <_>\n          8 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 12 12 -1.</_>\n        <_>\n          4 8 6 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 5 -1.</_>\n        <_>\n          10 11 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 6 -1.</_>\n        <_>\n          4 7 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 16 -1.</_>\n        <_>\n          0 3 2 8 2.</_>\n        <_>\n          2 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 8 -1.</_>\n        <_>\n          0 4 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 8 8 -1.</_>\n        <_>\n          12 7 4 4 2.</_>\n        <_>\n          8 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 8 8 -1.</_>\n        <_>\n          4 7 4 4 2.</_>\n        <_>\n          8 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 10 12 -1.</_>\n        <_>\n          4 5 5 6 2.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 11 -1.</_>\n        <_>\n          2 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 6 11 -1.</_>\n        <_>\n          12 4 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 11 -1.</_>\n        <_>\n          5 4 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 5 9 -1.</_>\n        <_>\n          8 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          10 3 10 2 2.</_>\n        <_>\n          0 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 4 -1.</_>\n        <_>\n          0 15 9 2 2.</_>\n        <_>\n          9 17 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 13 3 -1.</_>\n        <_>\n          6 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 13 -1.</_>\n        <_>\n          10 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 13 -1.</_>\n        <_>\n          9 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 7 -1.</_>\n        <_>\n          9 6 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          8 6 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 5 -1.</_>\n        <_>\n          8 0 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 5 -1.</_>\n        <_>\n          8 0 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 19 -1.</_>\n        <_>\n          7 1 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 20 -1.</_>\n        <_>\n          8 0 5 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 14 3 -1.</_>\n        <_>\n          7 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 6 -1.</_>\n        <_>\n          11 4 7 3 2.</_>\n        <_>\n          4 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 3 -1.</_>\n        <_>\n          6 8 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 5 12 -1.</_>\n        <_>\n          2 6 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 7 4 -1.</_>\n        <_>\n          9 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 7 4 -1.</_>\n        <_>\n          4 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 10 -1.</_>\n        <_>\n          9 6 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 13 3 -1.</_>\n        <_>\n          0 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 17 2 -1.</_>\n        <_>\n          3 11 17 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 17 -1.</_>\n        <_>\n          3 0 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 12 -1.</_>\n        <_>\n          14 0 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 16 -1.</_>\n        <_>\n          4 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 7 -1.</_>\n        <_>\n          16 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          2 1 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 9 12 -1.</_>\n        <_>\n          12 1 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 9 12 -1.</_>\n        <_>\n          5 1 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 12 -1.</_>\n        <_>\n          13 5 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 12 -1.</_>\n        <_>\n          5 5 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          10 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 4 -1.</_>\n        <_>\n          6 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 11 -1.</_>\n        <_>\n          8 9 6 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 6 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 19 2 -1.</_>\n        <_>\n          1 13 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 13 3 -1.</_>\n        <_>\n          0 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 4 -1.</_>\n        <_>\n          0 8 8 2 2.</_>\n        <_>\n          8 10 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 8 -1.</_>\n        <_>\n          12 6 4 4 2.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 6 -1.</_>\n        <_>\n          3 15 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 6 -1.</_>\n        <_>\n          4 15 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 4 -1.</_>\n        <_>\n          7 0 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 4 10 -1.</_>\n        <_>\n          14 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 14 12 -1.</_>\n        <_>\n          2 4 7 6 2.</_>\n        <_>\n          9 10 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 10 -1.</_>\n        <_>\n          10 4 3 5 2.</_>\n        <_>\n          7 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 15 -1.</_>\n        <_>\n          1 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 19 12 -1.</_>\n        <_>\n          1 5 19 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 7 -1.</_>\n        <_>\n          7 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 16 -1.</_>\n        <_>\n          12 0 2 8 2.</_>\n        <_>\n          10 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 4 16 -1.</_>\n        <_>\n          6 0 2 8 2.</_>\n        <_>\n          8 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 11 -1.</_>\n        <_>\n          8 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 3 -1.</_>\n        <_>\n          0 12 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 4 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 7 4 -1.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 16 4 -1.</_>\n        <_>\n          1 14 8 2 2.</_>\n        <_>\n          9 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 13 3 -1.</_>\n        <_>\n          7 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 8 -1.</_>\n        <_>\n          1 12 9 4 2.</_>\n        <_>\n          10 16 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 4 10 -1.</_>\n        <_>\n          14 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 4 10 -1.</_>\n        <_>\n          2 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 12 -1.</_>\n        <_>\n          2 7 16 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 16 -1.</_>\n        <_>\n          7 8 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 12 -1.</_>\n        <_>\n          7 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 15 8 -1.</_>\n        <_>\n          7 12 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 15 4 -1.</_>\n        <_>\n          9 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 6 -1.</_>\n        <_>\n          10 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 12 -1.</_>\n        <_>\n          1 8 9 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 15 3 -1.</_>\n        <_>\n          5 17 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 17 -1.</_>\n        <_>\n          11 2 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 17 -1.</_>\n        <_>\n          7 2 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 7 -1.</_>\n        <_>\n          9 4 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 15 3 -1.</_>\n        <_>\n          0 12 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 11 6 -1.</_>\n        <_>\n          9 12 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 18 -1.</_>\n        <_>\n          9 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 8 -1.</_>\n        <_>\n          14 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 15 8 -1.</_>\n        <_>\n          1 15 15 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 10 -1.</_>\n        <_>\n          9 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 18 9 -1.</_>\n        <_>\n          1 9 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 2 -1.</_>\n        <_>\n          3 2 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 3 -1.</_>\n        <_>\n          0 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 14 2 -1.</_>\n        <_>\n          5 1 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 12 10 -1.</_>\n        <_>\n          7 8 4 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 12 -1.</_>\n        <_>\n          8 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 8 12 -1.</_>\n        <_>\n          6 6 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 4 -1.</_>\n        <_>\n          4 5 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 5 9 -1.</_>\n        <_>\n          0 3 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 6 -1.</_>\n        <_>\n          7 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          4 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 17 14 -1.</_>\n        <_>\n          2 12 17 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 10 8 -1.</_>\n        <_>\n          0 11 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 15 -1.</_>\n        <_>\n          13 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 15 -1.</_>\n        <_>\n          6 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 5 -1.</_>\n        <_>\n          12 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 12 5 -1.</_>\n        <_>\n          4 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 3 -1.</_>\n        <_>\n          3 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 18 -1.</_>\n        <_>\n          7 1 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 9 4 -1.</_>\n        <_>\n          6 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          3 17 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 13 3 -1.</_>\n        <_>\n          7 17 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 4 -1.</_>\n        <_>\n          4 4 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 14 4 -1.</_>\n        <_>\n          13 4 7 2 2.</_>\n        <_>\n          6 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 10 8 -1.</_>\n        <_>\n          3 12 5 4 2.</_>\n        <_>\n          8 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 9 -1.</_>\n        <_>\n          12 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 14 4 -1.</_>\n        <_>\n          0 13 7 2 2.</_>\n        <_>\n          7 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 10 -1.</_>\n        <_>\n          2 10 3 5 2.</_>\n        <_>\n          5 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 20 6 -1.</_>\n        <_>\n          0 15 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 16 4 -1.</_>\n        <_>\n          1 18 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 9 -1.</_>\n        <_>\n          12 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 5 9 -1.</_>\n        <_>\n          3 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 13 12 -1.</_>\n        <_>\n          5 12 13 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          5 5 5 3 2.</_>\n        <_>\n          10 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 6 -1.</_>\n        <_>\n          10 5 5 3 2.</_>\n        <_>\n          5 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 13 2 -1.</_>\n        <_>\n          0 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 12 4 -1.</_>\n        <_>\n          8 4 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 6 -1.</_>\n        <_>\n          5 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 4 -1.</_>\n        <_>\n          12 2 7 2 2.</_>\n        <_>\n          5 4 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 8 -1.</_>\n        <_>\n          5 4 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 4 -1.</_>\n        <_>\n          12 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 8 -1.</_>\n        <_>\n          8 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 5 8 -1.</_>\n        <_>\n          9 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 4 -1.</_>\n        <_>\n          6 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 14 4 -1.</_>\n        <_>\n          11 6 7 2 2.</_>\n        <_>\n          4 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 11 10 -1.</_>\n        <_>\n          4 9 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 12 -1.</_>\n        <_>\n          7 7 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 15 -1.</_>\n        <_>\n          8 10 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 3 -1.</_>\n        <_>\n          7 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 6 -1.</_>\n        <_>\n          0 6 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 12 4 -1.</_>\n        <_>\n          5 5 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 8 -1.</_>\n        <_>\n          6 11 4 4 2.</_>\n        <_>\n          10 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 4 -1.</_>\n        <_>\n          0 13 9 2 2.</_>\n        <_>\n          9 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 13 -1.</_>\n        <_>\n          11 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 13 -1.</_>\n        <_>\n          8 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 18 -1.</_>\n        <_>\n          8 0 6 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 12 15 -1.</_>\n        <_>\n          2 7 12 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 11 18 -1.</_>\n        <_>\n          7 7 11 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 14 -1.</_>\n        <_>\n          8 5 2 7 2.</_>\n        <_>\n          10 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 3 14 -1.</_>\n        <_>\n          10 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 14 -1.</_>\n        <_>\n          7 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 4 -1.</_>\n        <_>\n          3 6 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 20 4 -1.</_>\n        <_>\n          0 5 10 2 2.</_>\n        <_>\n          10 7 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 14 -1.</_>\n        <_>\n          8 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 4 16 -1.</_>\n        <_>\n          17 3 2 8 2.</_>\n        <_>\n          15 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 7 -1.</_>\n        <_>\n          4 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 5 9 -1.</_>\n        <_>\n          12 9 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 8 6 -1.</_>\n        <_>\n          2 3 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 8 -1.</_>\n        <_>\n          10 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 8 -1.</_>\n        <_>\n          8 1 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 5 6 -1.</_>\n        <_>\n          4 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 7 4 -1.</_>\n        <_>\n          7 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 8 -1.</_>\n        <_>\n          8 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 7 6 -1.</_>\n        <_>\n          10 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 7 6 -1.</_>\n        <_>\n          3 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 12 -1.</_>\n        <_>\n          11 6 3 6 2.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 14 -1.</_>\n        <_>\n          5 6 2 7 2.</_>\n        <_>\n          7 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 2 -1.</_>\n        <_>\n          0 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 2 -1.</_>\n        <_>\n          6 16 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 19 3 -1.</_>\n        <_>\n          0 18 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          12 5 3 5 2.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 13 2 -1.</_>\n        <_>\n          3 4 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 17 6 -1.</_>\n        <_>\n          2 2 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 16 -1.</_>\n        <_>\n          1 3 2 8 2.</_>\n        <_>\n          3 11 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 6 -1.</_>\n        <_>\n          12 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 12 4 -1.</_>\n        <_>\n          5 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          14 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 6 -1.</_>\n        <_>\n          10 0 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 10 -1.</_>\n        <_>\n          10 9 3 5 2.</_>\n        <_>\n          7 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 18 6 -1.</_>\n        <_>\n          6 14 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 16 -1.</_>\n        <_>\n          14 0 3 8 2.</_>\n        <_>\n          11 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 4 8 -1.</_>\n        <_>\n          11 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          7 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 13 -1.</_>\n        <_>\n          17 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 16 6 -1.</_>\n        <_>\n          9 14 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 10 6 -1.</_>\n        <_>\n          5 3 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 14 15 -1.</_>\n        <_>\n          6 9 14 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 14 4 -1.</_>\n        <_>\n          3 1 7 2 2.</_>\n        <_>\n          10 3 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 10 -1.</_>\n        <_>\n          11 3 3 5 2.</_>\n        <_>\n          8 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 10 -1.</_>\n        <_>\n          6 3 3 5 2.</_>\n        <_>\n          9 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 10 -1.</_>\n        <_>\n          12 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 10 -1.</_>\n        <_>\n          5 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 5 -1.</_>\n        <_>\n          11 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 6 -1.</_>\n        <_>\n          5 7 5 3 2.</_>\n        <_>\n          10 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 19 3 -1.</_>\n        <_>\n          1 11 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 13 -1.</_>\n        <_>\n          2 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 16 -1.</_>\n        <_>\n          16 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 12 -1.</_>\n        <_>\n          3 5 7 6 2.</_>\n        <_>\n          10 11 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 16 -1.</_>\n        <_>\n          16 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 16 -1.</_>\n        <_>\n          2 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          8 2 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 12 6 -1.</_>\n        <_>\n          3 12 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 10 -1.</_>\n        <_>\n          11 9 3 5 2.</_>\n        <_>\n          8 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 10 -1.</_>\n        <_>\n          6 9 3 5 2.</_>\n        <_>\n          9 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 10 3 -1.</_>\n        <_>\n          5 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 18 -1.</_>\n        <_>\n          8 2 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 7 6 -1.</_>\n        <_>\n          0 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 15 6 -1.</_>\n        <_>\n          10 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 15 6 -1.</_>\n        <_>\n          5 14 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 4 14 -1.</_>\n        <_>\n          2 4 2 7 2.</_>\n        <_>\n          4 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 12 -1.</_>\n        <_>\n          14 1 3 6 2.</_>\n        <_>\n          11 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 12 -1.</_>\n        <_>\n          3 1 3 6 2.</_>\n        <_>\n          6 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 6 -1.</_>\n        <_>\n          9 7 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 10 -1.</_>\n        <_>\n          1 0 3 5 2.</_>\n        <_>\n          4 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 9 5 -1.</_>\n        <_>\n          11 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 7 -1.</_>\n        <_>\n          3 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 8 5 -1.</_>\n        <_>\n          9 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 8 5 -1.</_>\n        <_>\n          7 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 19 -1.</_>\n        <_>\n          8 0 4 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 8 6 -1.</_>\n        <_>\n          7 8 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 5 6 -1.</_>\n        <_>\n          15 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 13 10 -1.</_>\n        <_>\n          3 6 13 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 10 -1.</_>\n        <_>\n          14 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 8 -1.</_>\n        <_>\n          0 1 10 4 2.</_>\n        <_>\n          10 5 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 12 -1.</_>\n        <_>\n          11 6 3 6 2.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 6 10 -1.</_>\n        <_>\n          10 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 14 -1.</_>\n        <_>\n          9 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 18 -1.</_>\n        <_>\n          11 1 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 18 -1.</_>\n        <_>\n          7 1 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 5 -1.</_>\n        <_>\n          7 1 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 8 -1.</_>\n        <_>\n          7 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 6 -1.</_>\n        <_>\n          12 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 7 6 -1.</_>\n        <_>\n          1 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 4 -1.</_>\n        <_>\n          9 12 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 5 9 -1.</_>\n        <_>\n          0 5 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 9 -1.</_>\n        <_>\n          10 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 6 -1.</_>\n        <_>\n          0 1 9 3 2.</_>\n        <_>\n          9 4 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 3 -1.</_>\n        <_>\n          5 7 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 5 -1.</_>\n        <_>\n          3 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 9 6 -1.</_>\n        <_>\n          13 10 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 9 -1.</_>\n        <_>\n          0 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 19 -1.</_>\n        <_>\n          8 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 13 -1.</_>\n        <_>\n          9 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 9 6 -1.</_>\n        <_>\n          6 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 14 -1.</_>\n        <_>\n          10 4 4 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 12 14 -1.</_>\n        <_>\n          6 4 4 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 5 -1.</_>\n        <_>\n          7 1 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 19 -1.</_>\n        <_>\n          8 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 9 5 -1.</_>\n        <_>\n          11 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 9 5 -1.</_>\n        <_>\n          6 13 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 4 -1.</_>\n        <_>\n          8 1 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 18 -1.</_>\n        <_>\n          1 2 4 9 2.</_>\n        <_>\n          5 11 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 6 9 -1.</_>\n        <_>\n          11 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 6 9 -1.</_>\n        <_>\n          3 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 10 6 -1.</_>\n        <_>\n          13 14 5 3 2.</_>\n        <_>\n          8 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 7 -1.</_>\n        <_>\n          9 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 6 -1.</_>\n        <_>\n          9 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 7 6 -1.</_>\n        <_>\n          4 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 16 -1.</_>\n        <_>\n          3 8 17 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 3 -1.</_>\n        <_>\n          0 1 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 5 9 -1.</_>\n        <_>\n          11 4 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 10 6 -1.</_>\n        <_>\n          4 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 12 9 -1.</_>\n        <_>\n          7 13 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 12 3 -1.</_>\n        <_>\n          7 10 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 12 -1.</_>\n        <_>\n          10 8 3 6 2.</_>\n        <_>\n          7 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 14 5 3 2.</_>\n        <_>\n          7 17 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 8 8 -1.</_>\n        <_>\n          10 9 4 4 2.</_>\n        <_>\n          6 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          7 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 6 -1.</_>\n        <_>\n          11 6 5 3 2.</_>\n        <_>\n          6 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 6 -1.</_>\n        <_>\n          4 6 5 3 2.</_>\n        <_>\n          9 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 9 5 -1.</_>\n        <_>\n          9 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 6 10 -1.</_>\n        <_>\n          8 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 7 -1.</_>\n        <_>\n          10 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 8 4 -1.</_>\n        <_>\n          8 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 9 -1.</_>\n        <_>\n          0 3 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 8 4 -1.</_>\n        <_>\n          9 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 6 -1.</_>\n        <_>\n          4 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 9 4 -1.</_>\n        <_>\n          8 8 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 13 -1.</_>\n        <_>\n          1 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 11 -1.</_>\n        <_>\n          15 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 11 -1.</_>\n        <_>\n          3 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 5 -1.</_>\n        <_>\n          11 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 17 -1.</_>\n        <_>\n          6 2 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 8 8 -1.</_>\n        <_>\n          12 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 4 -1.</_>\n        <_>\n          6 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 9 6 -1.</_>\n        <_>\n          2 13 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 11 6 -1.</_>\n        <_>\n          9 14 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 8 -1.</_>\n        <_>\n          3 11 7 4 2.</_>\n        <_>\n          10 15 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 4 10 -1.</_>\n        <_>\n          8 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 3 -1.</_>\n        <_>\n          1 13 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 12 -1.</_>\n        <_>\n          9 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 7 6 -1.</_>\n        <_>\n          0 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 7 6 -1.</_>\n        <_>\n          13 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 16 -1.</_>\n        <_>\n          4 12 12 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 9 4 -1.</_>\n        <_>\n          11 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 9 4 -1.</_>\n        <_>\n          0 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 6 -1.</_>\n        <_>\n          2 14 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 7 -1.</_>\n        <_>\n          9 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 12 4 -1.</_>\n        <_>\n          4 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 8 -1.</_>\n        <_>\n          13 9 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 8 -1.</_>\n        <_>\n          5 9 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 19 -1.</_>\n        <_>\n          11 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          7 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 7 6 -1.</_>\n        <_>\n          13 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 13 3 -1.</_>\n        <_>\n          1 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 13 3 -1.</_>\n        <_>\n          5 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 9 4 -1.</_>\n        <_>\n          4 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 7 6 -1.</_>\n        <_>\n          7 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 14 4 -1.</_>\n        <_>\n          3 14 7 2 2.</_>\n        <_>\n          10 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 14 -1.</_>\n        <_>\n          13 7 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 14 -1.</_>\n        <_>\n          0 7 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 16 4 -1.</_>\n        <_>\n          3 2 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 8 -1.</_>\n        <_>\n          6 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 14 -1.</_>\n        <_>\n          10 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 9 -1.</_>\n        <_>\n          1 10 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 14 -1.</_>\n        <_>\n          9 5 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 9 14 -1.</_>\n        <_>\n          8 5 3 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 15 -1.</_>\n        <_>\n          11 2 1 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 4 8 -1.</_>\n        <_>\n          8 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 10 9 -1.</_>\n        <_>\n          6 13 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 14 4 -1.</_>\n        <_>\n          0 16 7 2 2.</_>\n        <_>\n          7 18 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 13 -1.</_>\n        <_>\n          9 5 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 4 -1.</_>\n        <_>\n          8 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 14 2 -1.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 14 2 -1.</_>\n        <_>\n          7 9 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 15 -1.</_>\n        <_>\n          16 0 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 10 -1.</_>\n        <_>\n          2 0 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 4 12 -1.</_>\n        <_>\n          16 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 4 12 -1.</_>\n        <_>\n          0 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 6 -1.</_>\n        <_>\n          12 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 6 -1.</_>\n        <_>\n          0 14 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 4 14 -1.</_>\n        <_>\n          11 5 2 7 2.</_>\n        <_>\n          9 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 11 6 -1.</_>\n        <_>\n          0 14 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 12 5 -1.</_>\n        <_>\n          9 15 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 12 -1.</_>\n        <_>\n          6 6 3 6 2.</_>\n        <_>\n          9 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 8 4 -1.</_>\n        <_>\n          7 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 10 -1.</_>\n        <_>\n          5 8 3 5 2.</_>\n        <_>\n          8 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 7 14 -1.</_>\n        <_>\n          7 11 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 8 -1.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 9 -1.</_>\n        <_>\n          9 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 9 -1.</_>\n        <_>\n          5 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 11 -1.</_>\n        <_>\n          10 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          10 1 9 2 2.</_>\n        <_>\n          1 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 16 -1.</_>\n        <_>\n          3 4 2 8 2.</_>\n        <_>\n          5 12 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 6 8 -1.</_>\n        <_>\n          10 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 7 -1.</_>\n        <_>\n          2 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 9 -1.</_>\n        <_>\n          14 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 9 -1.</_>\n        <_>\n          0 5 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 13 -1.</_>\n        <_>\n          17 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 13 -1.</_>\n        <_>\n          2 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 7 -1.</_>\n        <_>\n          6 7 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 10 -1.</_>\n        <_>\n          5 3 3 5 2.</_>\n        <_>\n          8 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 5 -1.</_>\n        <_>\n          9 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 5 -1.</_>\n        <_>\n          6 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 12 8 -1.</_>\n        <_>\n          4 4 6 4 2.</_>\n        <_>\n          10 8 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 10 6 -1.</_>\n        <_>\n          13 8 5 3 2.</_>\n        <_>\n          8 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 10 6 -1.</_>\n        <_>\n          2 8 5 3 2.</_>\n        <_>\n          7 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 14 -1.</_>\n        <_>\n          13 5 4 7 2.</_>\n        <_>\n          9 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 9 5 -1.</_>\n        <_>\n          9 14 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 14 -1.</_>\n        <_>\n          1 6 2 7 2.</_>\n        <_>\n          3 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 8 8 -1.</_>\n        <_>\n          13 6 4 4 2.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 8 -1.</_>\n        <_>\n          2 4 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 14 -1.</_>\n        <_>\n          13 5 4 7 2.</_>\n        <_>\n          9 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 8 8 -1.</_>\n        <_>\n          3 6 4 4 2.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 10 -1.</_>\n        <_>\n          14 3 3 5 2.</_>\n        <_>\n          11 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 10 -1.</_>\n        <_>\n          3 3 3 5 2.</_>\n        <_>\n          6 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 10 -1.</_>\n        <_>\n          15 0 4 5 2.</_>\n        <_>\n          11 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 13 3 -1.</_>\n        <_>\n          3 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 13 3 -1.</_>\n        <_>\n          5 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 12 -1.</_>\n        <_>\n          0 8 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 6 -1.</_>\n        <_>\n          12 8 8 3 2.</_>\n        <_>\n          4 11 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 7 6 -1.</_>\n        <_>\n          12 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 9 7 -1.</_>\n        <_>\n          5 9 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 15 9 -1.</_>\n        <_>\n          5 9 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 15 9 -1.</_>\n        <_>\n          0 9 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 2 -1.</_>\n        <_>\n          6 9 14 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 10 3 -1.</_>\n        <_>\n          8 8 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 5 -1.</_>\n        <_>\n          14 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 16 2 -1.</_>\n        <_>\n          10 6 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 12 8 -1.</_>\n        <_>\n          5 12 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 18 3 -1.</_>\n        <_>\n          0 4 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 14 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_>\n        <_>\n          3 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 16 2 -1.</_>\n        <_>\n          2 8 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 7 6 -1.</_>\n        <_>\n          10 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 19 2 -1.</_>\n        <_>\n          0 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 18 -1.</_>\n        <_>\n          13 9 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 9 5 -1.</_>\n        <_>\n          4 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 17 -1.</_>\n        <_>\n          18 0 1 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 16 -1.</_>\n        <_>\n          1 0 1 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          10 1 3 5 2.</_>\n        <_>\n          7 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 12 11 -1.</_>\n        <_>\n          4 9 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 16 -1.</_>\n        <_>\n          10 2 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 16 -1.</_>\n        <_>\n          8 2 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 13 -1.</_>\n        <_>\n          10 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 4 12 -1.</_>\n        <_>\n          9 4 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 10 9 -1.</_>\n        <_>\n          7 9 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 13 3 -1.</_>\n        <_>\n          0 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 7 6 -1.</_>\n        <_>\n          10 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 11 6 -1.</_>\n        <_>\n          4 4 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 8 4 -1.</_>\n        <_>\n          9 3 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 10 -1.</_>\n        <_>\n          5 5 3 5 2.</_>\n        <_>\n          8 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 3 13 -1.</_>\n        <_>\n          16 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 3 13 -1.</_>\n        <_>\n          3 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 13 -1.</_>\n        <_>\n          14 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 10 6 -1.</_>\n        <_>\n          4 3 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 8 -1.</_>\n        <_>\n          0 6 20 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 13 18 -1.</_>\n        <_>\n          2 10 13 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 10 -1.</_>\n        <_>\n          9 10 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 14 -1.</_>\n        <_>\n          9 6 6 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 6 6 -1.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 3 -1.</_>\n        <_>\n          7 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 18 2 -1.</_>\n        <_>\n          2 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 3 13 -1.</_>\n        <_>\n          5 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 7 -1.</_>\n        <_>\n          13 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 7 -1.</_>\n        <_>\n          5 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 13 -1.</_>\n        <_>\n          9 6 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 5 12 -1.</_>\n        <_>\n          8 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 8 5 -1.</_>\n        <_>\n          6 4 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 16 -1.</_>\n        <_>\n          7 4 3 8 2.</_>\n        <_>\n          10 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 13 -1.</_>\n        <_>\n          13 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 8 4 -1.</_>\n        <_>\n          3 9 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 6 -1.</_>\n        <_>\n          12 8 8 3 2.</_>\n        <_>\n          4 11 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 9 8 -1.</_>\n        <_>\n          5 15 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 6 17 -1.</_>\n        <_>\n          12 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 17 -1.</_>\n        <_>\n          6 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 3 -1.</_>\n        <_>\n          5 6 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 16 2 -1.</_>\n        <_>\n          9 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 10 -1.</_>\n        <_>\n          9 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 13 -1.</_>\n        <_>\n          6 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 13 2 -1.</_>\n        <_>\n          4 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 3 -1.</_>\n        <_>\n          1 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 12 -1.</_>\n        <_>\n          3 4 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 6 -1.</_>\n        <_>\n          0 4 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 11 10 -1.</_>\n        <_>\n          9 5 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 20 -1.</_>\n        <_>\n          0 10 20 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 4 -1.</_>\n        <_>\n          10 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 4 -1.</_>\n        <_>\n          5 1 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 10 -1.</_>\n        <_>\n          15 0 4 5 2.</_>\n        <_>\n          11 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 10 -1.</_>\n        <_>\n          1 0 4 5 2.</_>\n        <_>\n          5 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 4 -1.</_>\n        <_>\n          13 3 7 2 2.</_>\n        <_>\n          6 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 4 -1.</_>\n        <_>\n          0 3 10 2 2.</_>\n        <_>\n          10 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          11 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 7 -1.</_>\n        <_>\n          7 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 7 -1.</_>\n        <_>\n          6 6 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 7 -1.</_>\n        <_>\n          10 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 7 -1.</_>\n        <_>\n          10 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 7 -1.</_>\n        <_>\n          8 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 16 -1.</_>\n        <_>\n          8 0 4 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 8 -1.</_>\n        <_>\n          7 6 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 11 8 -1.</_>\n        <_>\n          7 16 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 12 -1.</_>\n        <_>\n          6 0 3 6 2.</_>\n        <_>\n          9 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 12 -1.</_>\n        <_>\n          10 3 6 6 2.</_>\n        <_>\n          4 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 7 -1.</_>\n        <_>\n          4 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 4 7 -1.</_>\n        <_>\n          15 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 4 7 -1.</_>\n        <_>\n          3 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 7 -1.</_>\n        <_>\n          10 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 2 -1.</_>\n        <_>\n          3 3 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 14 3 -1.</_>\n        <_>\n          4 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 7 6 -1.</_>\n        <_>\n          1 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 13 9 -1.</_>\n        <_>\n          6 8 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 16 6 -1.</_>\n        <_>\n          0 8 8 3 2.</_>\n        <_>\n          8 11 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 5 12 -1.</_>\n        <_>\n          15 5 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 5 12 -1.</_>\n        <_>\n          0 5 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 14 3 -1.</_>\n        <_>\n          5 15 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 9 -1.</_>\n        <_>\n          4 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 9 7 -1.</_>\n        <_>\n          14 13 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 5 -1.</_>\n        <_>\n          3 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 19 3 -1.</_>\n        <_>\n          0 12 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 14 4 -1.</_>\n        <_>\n          13 15 7 2 2.</_>\n        <_>\n          6 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 6 -1.</_>\n        <_>\n          0 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 4 11 -1.</_>\n        <_>\n          16 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 11 -1.</_>\n        <_>\n          2 9 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 5 -1.</_>\n        <_>\n          8 11 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 14 4 -1.</_>\n        <_>\n          1 15 7 2 2.</_>\n        <_>\n          8 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 7 9 -1.</_>\n        <_>\n          12 13 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 7 9 -1.</_>\n        <_>\n          1 13 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 8 8 -1.</_>\n        <_>\n          15 7 4 4 2.</_>\n        <_>\n          11 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 4 -1.</_>\n        <_>\n          6 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 2 19 -1.</_>\n        <_>\n          11 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 10 -1.</_>\n        <_>\n          6 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 6 5 -1.</_>\n        <_>\n          11 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 6 5 -1.</_>\n        <_>\n          6 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 15 4 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 16 2 -1.</_>\n        <_>\n          8 5 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 4 -1.</_>\n        <_>\n          13 6 7 2 2.</_>\n        <_>\n          6 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 8 14 -1.</_>\n        <_>\n          3 5 4 7 2.</_>\n        <_>\n          7 12 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 7 15 -1.</_>\n        <_>\n          12 7 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 7 15 -1.</_>\n        <_>\n          1 7 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 12 -1.</_>\n        <_>\n          13 6 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 10 -1.</_>\n        <_>\n          6 0 4 5 2.</_>\n        <_>\n          10 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 19 -1.</_>\n        <_>\n          11 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 8 8 -1.</_>\n        <_>\n          4 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 15 4 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 19 -1.</_>\n        <_>\n          8 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 9 -1.</_>\n        <_>\n          10 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 8 4 -1.</_>\n        <_>\n          9 5 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 15 4 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 4 12 -1.</_>\n        <_>\n          2 12 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 6 -1.</_>\n        <_>\n          10 7 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 4 -1.</_>\n        <_>\n          7 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 12 4 -1.</_>\n        <_>\n          8 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 4 -1.</_>\n        <_>\n          6 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 15 4 -1.</_>\n        <_>\n          9 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 15 4 -1.</_>\n        <_>\n          6 12 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 18 -1.</_>\n        <_>\n          10 0 4 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 7 6 -1.</_>\n        <_>\n          13 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 18 -1.</_>\n        <_>\n          0 9 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 4 -1.</_>\n        <_>\n          13 8 7 2 2.</_>\n        <_>\n          6 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 14 4 -1.</_>\n        <_>\n          0 8 7 2 2.</_>\n        <_>\n          7 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 10 -1.</_>\n        <_>\n          3 7 14 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 6 7 -1.</_>\n        <_>\n          5 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 6 -1.</_>\n        <_>\n          11 4 7 3 2.</_>\n        <_>\n          4 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 10 -1.</_>\n        <_>\n          6 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 18 -1.</_>\n        <_>\n          11 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 3 15 -1.</_>\n        <_>\n          3 6 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 6 -1.</_>\n        <_>\n          7 0 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 15 -1.</_>\n        <_>\n          2 5 9 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 3 -1.</_>\n        <_>\n          8 0 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 8 -1.</_>\n        <_>\n          6 8 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 12 -1.</_>\n        <_>\n          10 8 5 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 3 -1.</_>\n        <_>\n          6 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 14 -1.</_>\n        <_>\n          9 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 6 -1.</_>\n        <_>\n          5 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 6 -1.</_>\n        <_>\n          9 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 4 -1.</_>\n        <_>\n          7 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 4 -1.</_>\n        <_>\n          8 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 14 4 -1.</_>\n        <_>\n          0 3 7 2 2.</_>\n        <_>\n          7 5 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 15 3 -1.</_>\n        <_>\n          5 18 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          5 11 5 3 2.</_>\n        <_>\n          10 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 13 3 -1.</_>\n        <_>\n          4 5 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 5 9 -1.</_>\n        <_>\n          5 14 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 3 -1.</_>\n        <_>\n          0 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 6 9 -1.</_>\n        <_>\n          2 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 14 -1.</_>\n        <_>\n          1 3 2 7 2.</_>\n        <_>\n          3 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 3 12 -1.</_>\n        <_>\n          13 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 13 -1.</_>\n        <_>\n          9 7 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 9 5 -1.</_>\n        <_>\n          10 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 9 5 -1.</_>\n        <_>\n          8 0 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 13 -1.</_>\n        <_>\n          9 5 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 12 -1.</_>\n        <_>\n          7 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 16 -1.</_>\n        <_>\n          4 3 6 8 2.</_>\n        <_>\n          10 11 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 13 -1.</_>\n        <_>\n          15 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 3 -1.</_>\n        <_>\n          3 4 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 20 7 -1.</_>\n        <_>\n          0 13 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 13 -1.</_>\n        <_>\n          4 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 14 -1.</_>\n        <_>\n          4 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 14 4 -1.</_>\n        <_>\n          0 6 7 2 2.</_>\n        <_>\n          7 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 20 6 -1.</_>\n        <_>\n          0 6 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 12 -1.</_>\n        <_>\n          16 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 15 3 -1.</_>\n        <_>\n          0 9 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 16 6 -1.</_>\n        <_>\n          10 1 8 3 2.</_>\n        <_>\n          2 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 12 -1.</_>\n        <_>\n          2 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 9 5 -1.</_>\n        <_>\n          12 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 4 -1.</_>\n        <_>\n          7 1 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 7 -1.</_>\n        <_>\n          2 0 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 3 13 -1.</_>\n        <_>\n          14 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 6 -1.</_>\n        <_>\n          3 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 5 -1.</_>\n        <_>\n          10 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 7 -1.</_>\n        <_>\n          8 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 4 7 -1.</_>\n        <_>\n          7 2 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 3 13 -1.</_>\n        <_>\n          5 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 14 -1.</_>\n        <_>\n          6 5 2 7 2.</_>\n        <_>\n          8 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 19 4 -1.</_>\n        <_>\n          1 7 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 7 6 -1.</_>\n        <_>\n          0 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 13 2 -1.</_>\n        <_>\n          6 13 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 10 -1.</_>\n        <_>\n          3 0 6 5 2.</_>\n        <_>\n          9 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 3 -1.</_>\n        <_>\n          9 15 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 14 6 -1.</_>\n        <_>\n          6 14 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 14 6 -1.</_>\n        <_>\n          7 14 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 7 -1.</_>\n        <_>\n          13 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 15 4 -1.</_>\n        <_>\n          6 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 6 -1.</_>\n        <_>\n          13 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 4 -1.</_>\n        <_>\n          12 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 8 -1.</_>\n        <_>\n          1 2 4 4 2.</_>\n        <_>\n          5 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 3 -1.</_>\n        <_>\n          8 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 3 -1.</_>\n        <_>\n          6 1 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 6 -1.</_>\n        <_>\n          8 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 4 7 -1.</_>\n        <_>\n          7 3 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 16 2 -1.</_>\n        <_>\n          3 17 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 13 6 -1.</_>\n        <_>\n          3 3 13 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 3 -1.</_>\n        <_>\n          4 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 5 12 -1.</_>\n        <_>\n          1 5 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 13 3 -1.</_>\n        <_>\n          6 11 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 7 4 -1.</_>\n        <_>\n          1 13 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 8 -1.</_>\n        <_>\n          9 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 8 -1.</_>\n        <_>\n          9 5 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 8 -1.</_>\n        <_>\n          16 12 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 13 3 -1.</_>\n        <_>\n          3 6 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 9 5 -1.</_>\n        <_>\n          12 2 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 7 4 -1.</_>\n        <_>\n          5 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 7 6 -1.</_>\n        <_>\n          11 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 7 6 -1.</_>\n        <_>\n          2 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 9 4 -1.</_>\n        <_>\n          10 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 13 3 -1.</_>\n        <_>\n          2 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 10 6 -1.</_>\n        <_>\n          10 15 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 10 6 -1.</_>\n        <_>\n          0 15 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 16 8 -1.</_>\n        <_>\n          10 8 8 4 2.</_>\n        <_>\n          2 12 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 7 -1.</_>\n        <_>\n          5 0 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 7 -1.</_>\n        <_>\n          9 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 10 9 -1.</_>\n        <_>\n          1 10 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 11 6 -1.</_>\n        <_>\n          5 5 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 13 -1.</_>\n        <_>\n          1 7 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 11 -1.</_>\n        <_>\n          16 1 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 14 -1.</_>\n        <_>\n          2 6 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 8 12 -1.</_>\n        <_>\n          11 8 4 6 2.</_>\n        <_>\n          7 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 8 -1.</_>\n        <_>\n          2 10 8 4 2.</_>\n        <_>\n          10 14 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 7 8 -1.</_>\n        <_>\n          11 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 7 8 -1.</_>\n        <_>\n          2 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 4 14 -1.</_>\n        <_>\n          17 6 2 7 2.</_>\n        <_>\n          15 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 14 -1.</_>\n        <_>\n          1 6 2 7 2.</_>\n        <_>\n          3 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 4 8 -1.</_>\n        <_>\n          15 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 8 -1.</_>\n        <_>\n          4 0 4 4 2.</_>\n        <_>\n          8 4 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 7 6 -1.</_>\n        <_>\n          7 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 3 -1.</_>\n        <_>\n          3 3 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 6 -1.</_>\n        <_>\n          10 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 6 -1.</_>\n        <_>\n          0 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 20 14 -1.</_>\n        <_>\n          0 10 20 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 12 -1.</_>\n        <_>\n          2 0 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 6 -1.</_>\n        <_>\n          12 3 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 12 6 -1.</_>\n        <_>\n          4 3 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 4 8 -1.</_>\n        <_>\n          14 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 4 8 -1.</_>\n        <_>\n          4 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 10 -1.</_>\n        <_>\n          16 6 3 5 2.</_>\n        <_>\n          13 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 6 10 -1.</_>\n        <_>\n          1 6 3 5 2.</_>\n        <_>\n          4 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 2 -1.</_>\n        <_>\n          7 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 11 4 -1.</_>\n        <_>\n          3 14 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 6 8 -1.</_>\n        <_>\n          13 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 6 8 -1.</_>\n        <_>\n          4 12 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 8 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_>\n        <_>\n          12 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 8 -1.</_>\n        <_>\n          0 6 4 4 2.</_>\n        <_>\n          4 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 16 2 -1.</_>\n        <_>\n          3 9 16 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 16 3 -1.</_>\n        <_>\n          0 8 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 14 3 -1.</_>\n        <_>\n          5 12 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 20 -1.</_>\n        <_>\n          9 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 9 7 -1.</_>\n        <_>\n          11 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 3 -1.</_>\n        <_>\n          10 6 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 3 -1.</_>\n        <_>\n          4 8 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 14 5 -1.</_>\n        <_>\n          7 5 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 9 7 -1.</_>\n        <_>\n          11 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 9 7 -1.</_>\n        <_>\n          6 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 3 10 -1.</_>\n        <_>\n          11 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 6 -1.</_>\n        <_>\n          1 9 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 15 -1.</_>\n        <_>\n          8 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 7 15 -1.</_>\n        <_>\n          6 6 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 14 3 -1.</_>\n        <_>\n          6 10 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 10 -1.</_>\n        <_>\n          1 10 3 5 2.</_>\n        <_>\n          4 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 13 -1.</_>\n        <_>\n          11 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 9 -1.</_>\n        <_>\n          10 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 7 -1.</_>\n        <_>\n          11 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 6 8 -1.</_>\n        <_>\n          10 1 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 2 -1.</_>\n        <_>\n          3 6 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 8 -1.</_>\n        <_>\n          3 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 14 -1.</_>\n        <_>\n          18 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 2 14 -1.</_>\n        <_>\n          0 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 16 2 -1.</_>\n        <_>\n          3 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 9 6 -1.</_>\n        <_>\n          2 3 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 7 6 -1.</_>\n        <_>\n          11 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 8 8 -1.</_>\n        <_>\n          1 8 4 4 2.</_>\n        <_>\n          5 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 5 8 -1.</_>\n        <_>\n          8 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 8 8 -1.</_>\n        <_>\n          4 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 4 8 -1.</_>\n        <_>\n          15 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 5 8 -1.</_>\n        <_>\n          7 15 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 13 2 -1.</_>\n        <_>\n          5 15 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 9 12 -1.</_>\n        <_>\n          2 8 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 3 -1.</_>\n        <_>\n          3 9 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 13 3 -1.</_>\n        <_>\n          0 16 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 8 6 -1.</_>\n        <_>\n          9 16 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 4 8 -1.</_>\n        <_>\n          1 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 12 4 -1.</_>\n        <_>\n          9 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 6 7 -1.</_>\n        <_>\n          6 13 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 15 -1.</_>\n        <_>\n          12 1 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 13 -1.</_>\n        <_>\n          1 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 19 -1.</_>\n        <_>\n          12 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 7 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 8 4 -1.</_>\n        <_>\n          8 11 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 8 8 -1.</_>\n        <_>\n          9 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 10 14 -1.</_>\n        <_>\n          11 4 5 7 2.</_>\n        <_>\n          6 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 10 14 -1.</_>\n        <_>\n          4 4 5 7 2.</_>\n        <_>\n          9 11 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 18 15 -1.</_>\n        <_>\n          2 8 18 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 9 -1.</_>\n        <_>\n          6 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 9 -1.</_>\n        <_>\n          8 10 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 4 -1.</_>\n        <_>\n          2 8 7 2 2.</_>\n        <_>\n          9 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 10 -1.</_>\n        <_>\n          6 10 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 9 5 -1.</_>\n        <_>\n          7 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 4 -1.</_>\n        <_>\n          9 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 7 -1.</_>\n        <_>\n          12 7 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 12 -1.</_>\n        <_>\n          6 7 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 8 -1.</_>\n        <_>\n          9 6 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 16 -1.</_>\n        <_>\n          5 3 3 8 2.</_>\n        <_>\n          8 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 6 6 -1.</_>\n        <_>\n          12 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 6 -1.</_>\n        <_>\n          5 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 9 -1.</_>\n        <_>\n          10 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 7 -1.</_>\n        <_>\n          7 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 8 -1.</_>\n        <_>\n          12 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 8 -1.</_>\n        <_>\n          6 0 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 6 -1.</_>\n        <_>\n          6 8 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 7 -1.</_>\n        <_>\n          5 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 10 10 -1.</_>\n        <_>\n          13 10 5 5 2.</_>\n        <_>\n          8 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 15 4 -1.</_>\n        <_>\n          7 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 10 13 -1.</_>\n        <_>\n          9 6 5 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 10 13 -1.</_>\n        <_>\n          6 6 5 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 16 2 -1.</_>\n        <_>\n          4 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 16 2 -1.</_>\n        <_>\n          9 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 3 12 -1.</_>\n        <_>\n          15 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 3 12 -1.</_>\n        <_>\n          2 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 7 -1.</_>\n        <_>\n          8 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 15 3 -1.</_>\n        <_>\n          2 5 15 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 2 13 -1.</_>\n        <_>\n          16 6 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 6 5 -1.</_>\n        <_>\n          7 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 4 14 -1.</_>\n        <_>\n          16 6 2 7 2.</_>\n        <_>\n          14 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 12 3 -1.</_>\n        <_>\n          6 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 13 2 -1.</_>\n        <_>\n          4 6 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 13 10 -1.</_>\n        <_>\n          3 7 13 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 6 10 -1.</_>\n        <_>\n          7 7 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 7 6 -1.</_>\n        <_>\n          3 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 13 6 -1.</_>\n        <_>\n          4 2 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 6 -1.</_>\n        <_>\n          3 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 16 -1.</_>\n        <_>\n          5 0 2 8 2.</_>\n        <_>\n          7 8 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 18 6 -1.</_>\n        <_>\n          10 14 9 3 2.</_>\n        <_>\n          1 17 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 14 3 -1.</_>\n        <_>\n          9 17 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 4 7 -1.</_>\n        <_>\n          16 11 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 8 15 -1.</_>\n        <_>\n          8 1 4 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 7 6 -1.</_>\n        <_>\n          13 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 13 -1.</_>\n        <_>\n          3 6 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 7 4 -1.</_>\n        <_>\n          12 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 7 4 -1.</_>\n        <_>\n          1 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 2 -1.</_>\n        <_>\n          7 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 6 -1.</_>\n        <_>\n          0 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 8 -1.</_>\n        <_>\n          8 11 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 10 10 -1.</_>\n        <_>\n          13 10 5 5 2.</_>\n        <_>\n          8 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 10 10 -1.</_>\n        <_>\n          2 10 5 5 2.</_>\n        <_>\n          7 15 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 10 6 -1.</_>\n        <_>\n          11 13 5 3 2.</_>\n        <_>\n          6 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 10 6 -1.</_>\n        <_>\n          4 13 5 3 2.</_>\n        <_>\n          9 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 12 -1.</_>\n        <_>\n          7 12 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 14 4 -1.</_>\n        <_>\n          1 14 7 2 2.</_>\n        <_>\n          8 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 7 4 -1.</_>\n        <_>\n          11 17 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 16 4 -1.</_>\n        <_>\n          1 17 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 8 -1.</_>\n        <_>\n          8 0 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 12 -1.</_>\n        <_>\n          0 12 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 13 2 -1.</_>\n        <_>\n          7 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 13 2 -1.</_>\n        <_>\n          0 12 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 19 3 -1.</_>\n        <_>\n          1 13 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 13 3 -1.</_>\n        <_>\n          0 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 9 -1.</_>\n        <_>\n          9 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 9 -1.</_>\n        <_>\n          5 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 13 3 -1.</_>\n        <_>\n          4 4 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 9 4 -1.</_>\n        <_>\n          5 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 4 8 -1.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 4 -1.</_>\n        <_>\n          3 8 7 2 2.</_>\n        <_>\n          10 10 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 6 -1.</_>\n        <_>\n          8 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 8 9 -1.</_>\n        <_>\n          3 8 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 12 -1.</_>\n        <_>\n          10 9 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 6 -1.</_>\n        <_>\n          0 6 9 3 2.</_>\n        <_>\n          9 9 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 16 4 -1.</_>\n        <_>\n          11 6 8 2 2.</_>\n        <_>\n          3 8 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 7 4 -1.</_>\n        <_>\n          4 8 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 7 6 -1.</_>\n        <_>\n          12 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 7 6 -1.</_>\n        <_>\n          1 6 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 6 -1.</_>\n        <_>\n          6 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 6 -1.</_>\n        <_>\n          0 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 3 13 -1.</_>\n        <_>\n          18 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 13 -1.</_>\n        <_>\n          1 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 13 3 -1.</_>\n        <_>\n          6 9 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 10 6 -1.</_>\n        <_>\n          0 13 5 3 2.</_>\n        <_>\n          5 16 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 8 8 -1.</_>\n        <_>\n          14 12 4 4 2.</_>\n        <_>\n          10 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 8 -1.</_>\n        <_>\n          6 10 4 4 2.</_>\n        <_>\n          10 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 6 7 -1.</_>\n        <_>\n          12 10 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 5 -1.</_>\n        <_>\n          8 9 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 7 6 -1.</_>\n        <_>\n          7 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 7 -1.</_>\n        <_>\n          6 13 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 12 9 -1.</_>\n        <_>\n          7 10 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 3 -1.</_>\n        <_>\n          1 13 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 13 2 -1.</_>\n        <_>\n          7 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 6 7 -1.</_>\n        <_>\n          9 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 12 10 -1.</_>\n        <_>\n          14 10 6 5 2.</_>\n        <_>\n          8 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 12 10 -1.</_>\n        <_>\n          0 10 6 5 2.</_>\n        <_>\n          6 15 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 12 9 -1.</_>\n        <_>\n          7 10 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 12 4 -1.</_>\n        <_>\n          7 16 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 9 4 -1.</_>\n        <_>\n          7 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 9 4 -1.</_>\n        <_>\n          4 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 19 -1.</_>\n        <_>\n          12 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 7 6 -1.</_>\n        <_>\n          6 16 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 15 -1.</_>\n        <_>\n          12 1 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 3 19 -1.</_>\n        <_>\n          7 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 10 -1.</_>\n        <_>\n          11 0 7 5 2.</_>\n        <_>\n          4 5 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 10 -1.</_>\n        <_>\n          2 0 7 5 2.</_>\n        <_>\n          9 5 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 13 -1.</_>\n        <_>\n          11 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 8 -1.</_>\n        <_>\n          8 7 2 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 4 10 -1.</_>\n        <_>\n          11 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 13 2 -1.</_>\n        <_>\n          3 19 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 8 -1.</_>\n        <_>\n          11 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 8 -1.</_>\n        <_>\n          5 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 6 -1.</_>\n        <_>\n          12 8 8 3 2.</_>\n        <_>\n          4 11 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 10 -1.</_>\n        <_>\n          7 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 13 -1.</_>\n        <_>\n          11 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 3 13 -1.</_>\n        <_>\n          8 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 8 7 -1.</_>\n        <_>\n          6 6 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 9 -1.</_>\n        <_>\n          10 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 12 -1.</_>\n        <_>\n          9 11 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 4 -1.</_>\n        <_>\n          10 2 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 10 6 -1.</_>\n        <_>\n          13 1 5 3 2.</_>\n        <_>\n          8 4 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 9 10 -1.</_>\n        <_>\n          0 7 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 14 -1.</_>\n        <_>\n          10 8 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 14 -1.</_>\n        <_>\n          0 8 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 15 -1.</_>\n        <_>\n          9 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 18 -1.</_>\n        <_>\n          0 2 2 9 2.</_>\n        <_>\n          2 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 20 -1.</_>\n        <_>\n          6 0 6 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 7 -1.</_>\n        <_>\n          12 9 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 7 -1.</_>\n        <_>\n          5 3 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 17 -1.</_>\n        <_>\n          14 2 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 4 8 -1.</_>\n        <_>\n          2 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 10 -1.</_>\n        <_>\n          6 10 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 3 17 -1.</_>\n        <_>\n          5 2 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 5 -1.</_>\n        <_>\n          6 6 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 15 3 -1.</_>\n        <_>\n          5 11 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 10 6 -1.</_>\n        <_>\n          3 0 5 3 2.</_>\n        <_>\n          8 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 13 2 -1.</_>\n        <_>\n          0 14 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 12 15 -1.</_>\n        <_>\n          5 2 4 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 16 -1.</_>\n        <_>\n          8 0 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 16 -1.</_>\n        <_>\n          6 0 6 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 13 -1.</_>\n        <_>\n          14 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 17 -1.</_>\n        <_>\n          5 3 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 10 -1.</_>\n        <_>\n          13 6 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 11 -1.</_>\n        <_>\n          4 5 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 12 -1.</_>\n        <_>\n          16 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 10 -1.</_>\n        <_>\n          5 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 4 12 -1.</_>\n        <_>\n          16 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 12 -1.</_>\n        <_>\n          0 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 14 6 -1.</_>\n        <_>\n          13 0 7 3 2.</_>\n        <_>\n          6 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 19 -1.</_>\n        <_>\n          3 1 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 3 13 -1.</_>\n        <_>\n          17 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 13 -1.</_>\n        <_>\n          3 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 5 -1.</_>\n        <_>\n          12 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 5 -1.</_>\n        <_>\n          5 1 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 7 -1.</_>\n        <_>\n          12 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 10 3 -1.</_>\n        <_>\n          6 1 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 8 -1.</_>\n        <_>\n          12 0 8 4 2.</_>\n        <_>\n          4 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 7 6 -1.</_>\n        <_>\n          11 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 9 -1.</_>\n        <_>\n          3 11 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 10 -1.</_>\n        <_>\n          6 6 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 6 -1.</_>\n        <_>\n          15 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 5 6 -1.</_>\n        <_>\n          0 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 4 -1.</_>\n        <_>\n          12 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 14 6 -1.</_>\n        <_>\n          2 3 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 4 -1.</_>\n        <_>\n          12 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 4 -1.</_>\n        <_>\n          4 5 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 7 6 -1.</_>\n        <_>\n          7 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 7 -1.</_>\n        <_>\n          6 0 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 3 10 -1.</_>\n        <_>\n          13 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 7 6 -1.</_>\n        <_>\n          2 14 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 13 3 -1.</_>\n        <_>\n          7 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 13 3 -1.</_>\n        <_>\n          0 15 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 12 -1.</_>\n        <_>\n          9 6 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 12 -1.</_>\n        <_>\n          5 6 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          9 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 12 -1.</_>\n        <_>\n          7 10 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 8 18 -1.</_>\n        <_>\n          9 8 8 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 7 -1.</_>\n        <_>\n          8 5 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 7 -1.</_>\n        <_>\n          10 6 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 9 9 -1.</_>\n        <_>\n          3 10 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 3 13 -1.</_>\n        <_>\n          15 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 15 -1.</_>\n        <_>\n          4 6 12 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 8 -1.</_>\n        <_>\n          8 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 12 20 -1.</_>\n        <_>\n          3 10 12 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 19 3 -1.</_>\n        <_>\n          1 18 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 18 2 -1.</_>\n        <_>\n          9 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 6 9 -1.</_>\n        <_>\n          10 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 6 9 -1.</_>\n        <_>\n          8 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 12 4 -1.</_>\n        <_>\n          5 13 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 8 4 -1.</_>\n        <_>\n          2 7 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 7 6 -1.</_>\n        <_>\n          9 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 13 3 -1.</_>\n        <_>\n          1 1 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 14 3 -1.</_>\n        <_>\n          3 1 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 8 -1.</_>\n        <_>\n          10 6 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 13 -1.</_>\n        <_>\n          11 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 10 -1.</_>\n        <_>\n          0 0 3 5 2.</_>\n        <_>\n          3 5 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 7 18 -1.</_>\n        <_>\n          8 6 7 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 13 -1.</_>\n        <_>\n          7 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 9 5 -1.</_>\n        <_>\n          10 4 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 18 -1.</_>\n        <_>\n          9 1 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 11 15 -1.</_>\n        <_>\n          9 5 11 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 16 8 -1.</_>\n        <_>\n          0 0 8 4 2.</_>\n        <_>\n          8 4 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 14 -1.</_>\n        <_>\n          10 3 6 7 2.</_>\n        <_>\n          4 10 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 12 -1.</_>\n        <_>\n          5 6 3 6 2.</_>\n        <_>\n          8 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 11 9 -1.</_>\n        <_>\n          6 6 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 8 -1.</_>\n        <_>\n          0 0 9 4 2.</_>\n        <_>\n          9 4 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 9 12 -1.</_>\n        <_>\n          11 11 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 14 8 -1.</_>\n        <_>\n          2 9 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 4 8 -1.</_>\n        <_>\n          16 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 7 6 -1.</_>\n        <_>\n          4 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 7 6 -1.</_>\n        <_>\n          7 13 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 8 -1.</_>\n        <_>\n          0 6 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 3 13 -1.</_>\n        <_>\n          17 1 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 10 6 -1.</_>\n        <_>\n          4 2 5 3 2.</_>\n        <_>\n          9 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 3 -1.</_>\n        <_>\n          4 5 14 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 7 6 -1.</_>\n        <_>\n          5 7 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 13 3 -1.</_>\n        <_>\n          6 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 7 4 -1.</_>\n        <_>\n          10 15 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 13 3 -1.</_>\n        <_>\n          1 14 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 11 9 -1.</_>\n        <_>\n          6 6 11 3 3.</_></rects></_></features></cascade>\n</opencv_storage>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/classifiers/haarcascade_frontalface_default.xml",
    "content": "<?xml version=\"1.0\"?>\n<!--\n    Stump-based 24x24 discrete(?) adaboost frontal face detector.\n    Created by Rainer Lienhart.\n\n////////////////////////////////////////////////////////////////////////////////////////\n\n  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n\n  By downloading, copying, installing or using the software you agree to this license.\n  If you do not agree to this license, do not download, install,\n  copy or use the software.\n\n\n                        Intel License Agreement\n                For Open Source Computer Vision Library\n\n Copyright (C) 2000, Intel Corporation, all rights reserved.\n Third party copyrights are property of their respective owners.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n   * Redistribution's of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n\n   * Redistribution's in binary form must reproduce the above copyright notice,\n     this list of conditions and the following disclaimer in the documentation\n     and/or other materials provided with the distribution.\n\n   * The name of Intel Corporation may not be used to endorse or promote products\n     derived from this software without specific prior written permission.\n\n This software is provided by the copyright holders and contributors \"as is\" and\n any express or implied warranties, including, but not limited to, the implied\n warranties of merchantability and fitness for a particular purpose are disclaimed.\n In no event shall the Intel Corporation or contributors be liable for any direct,\n indirect, incidental, special, exemplary, or consequential damages\n (including, but not limited to, procurement of substitute goods or services;\n loss of use, data, or profits; or business interruption) however caused\n and on any theory of liability, whether in contract, strict liability,\n or tort (including negligence or otherwise) arising in any way out of\n the use of this software, even if advised of the possibility of such damage.\n-->\n<opencv_storage>\n<cascade type_id=\"opencv-cascade-classifier\"><stageType>BOOST</stageType>\n  <featureType>HAAR</featureType>\n  <height>24</height>\n  <width>24</width>\n  <stageParams>\n    <maxWeakCount>211</maxWeakCount></stageParams>\n  <featureParams>\n    <maxCatCount>0</maxCatCount></featureParams>\n  <stageNum>25</stageNum>\n  <stages>\n    <_>\n      <maxWeakCount>9</maxWeakCount>\n      <stageThreshold>-5.0425500869750977e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 0 -3.1511999666690826e-02</internalNodes>\n          <leafValues>\n            2.0875380039215088e+00 -2.2172100543975830e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1 1.2396000325679779e-02</internalNodes>\n          <leafValues>\n            -1.8633940219879150e+00 1.3272049427032471e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2 2.1927999332547188e-02</internalNodes>\n          <leafValues>\n            -1.5105249881744385e+00 1.0625729560852051e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 3 5.7529998011887074e-03</internalNodes>\n          <leafValues>\n            -8.7463897466659546e-01 1.1760339736938477e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4 1.5014000236988068e-02</internalNodes>\n          <leafValues>\n            -7.7945697307586670e-01 1.2608419656753540e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5 9.9371001124382019e-02</internalNodes>\n          <leafValues>\n            5.5751299858093262e-01 -1.8743000030517578e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6 2.7340000960975885e-03</internalNodes>\n          <leafValues>\n            -1.6911929845809937e+00 4.4009700417518616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7 -1.8859000876545906e-02</internalNodes>\n          <leafValues>\n            -1.4769539833068848e+00 4.4350099563598633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8 5.9739998541772366e-03</internalNodes>\n          <leafValues>\n            -8.5909199714660645e-01 8.5255599021911621e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>16</maxWeakCount>\n      <stageThreshold>-4.9842400550842285e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 9 -2.1110000088810921e-02</internalNodes>\n          <leafValues>\n            1.2435649633407593e+00 -1.5713009834289551e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 10 2.0355999469757080e-02</internalNodes>\n          <leafValues>\n            -1.6204780340194702e+00 1.1817760467529297e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 11 2.1308999508619308e-02</internalNodes>\n          <leafValues>\n            -1.9415930509567261e+00 7.0069098472595215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 12 9.1660000383853912e-02</internalNodes>\n          <leafValues>\n            -5.5670100450515747e-01 1.7284419536590576e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 13 3.6288000643253326e-02</internalNodes>\n          <leafValues>\n            2.6763799786567688e-01 -2.1831810474395752e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 14 -1.9109999760985374e-02</internalNodes>\n          <leafValues>\n            -2.6730210781097412e+00 4.5670801401138306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 15 8.2539999857544899e-03</internalNodes>\n          <leafValues>\n            -1.0852910280227661e+00 5.3564202785491943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 16 1.8355000764131546e-02</internalNodes>\n          <leafValues>\n            -3.5200199484825134e-01 9.3339198827743530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 17 -7.0569999516010284e-03</internalNodes>\n          <leafValues>\n            9.2782098054885864e-01 -6.6349899768829346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 18 -9.8770000040531158e-03</internalNodes>\n          <leafValues>\n            1.1577470302581787e+00 -2.9774799942970276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 19 1.5814000740647316e-02</internalNodes>\n          <leafValues>\n            -4.1960600018501282e-01 1.3576040267944336e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 20 -2.0700000226497650e-02</internalNodes>\n          <leafValues>\n            1.4590020179748535e+00 -1.9739399850368500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 21 -1.3760800659656525e-01</internalNodes>\n          <leafValues>\n            1.1186759471893311e+00 -5.2915501594543457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 22 1.4318999834358692e-02</internalNodes>\n          <leafValues>\n            -3.5127198696136475e-01 1.1440860033035278e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 23 1.0253000073134899e-02</internalNodes>\n          <leafValues>\n            -6.0850602388381958e-01 7.7098500728607178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 24 9.1508001089096069e-02</internalNodes>\n          <leafValues>\n            3.8817799091339111e-01 -1.5122940540313721e+00</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>27</maxWeakCount>\n      <stageThreshold>-4.6551899909973145e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 25 6.9747000932693481e-02</internalNodes>\n          <leafValues>\n            -1.0130879878997803e+00 1.4687349796295166e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 26 3.1502999365329742e-02</internalNodes>\n          <leafValues>\n            -1.6463639736175537e+00 1.0000629425048828e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 27 1.4260999858379364e-02</internalNodes>\n          <leafValues>\n            4.6480301022529602e-01 -1.5959889888763428e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 28 1.4453000389039516e-02</internalNodes>\n          <leafValues>\n            -6.5511900186538696e-01 8.3021801710128784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 29 -3.0509999487549067e-03</internalNodes>\n          <leafValues>\n            -1.3982310295104980e+00 4.2550599575042725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 30 3.2722998410463333e-02</internalNodes>\n          <leafValues>\n            -5.0702601671218872e-01 1.0526109933853149e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 31 -7.2960001416504383e-03</internalNodes>\n          <leafValues>\n            3.6356899142265320e-01 -1.3464889526367188e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 32 5.0425000488758087e-02</internalNodes>\n          <leafValues>\n            -3.0461400747299194e-01 1.4504129886627197e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 33 4.6879000961780548e-02</internalNodes>\n          <leafValues>\n            -4.0286201238632202e-01 1.2145609855651855e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 34 -6.9358997046947479e-02</internalNodes>\n          <leafValues>\n            1.0539360046386719e+00 -4.5719701051712036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 35 -4.9033999443054199e-02</internalNodes>\n          <leafValues>\n            -1.6253089904785156e+00 1.5378999710083008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 36 8.4827996790409088e-02</internalNodes>\n          <leafValues>\n            2.8402999043464661e-01 -1.5662059783935547e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 37 -1.7229999648407102e-03</internalNodes>\n          <leafValues>\n            -1.0147459506988525e+00 2.3294800519943237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 38 1.1562199890613556e-01</internalNodes>\n          <leafValues>\n            -1.6732899844646454e-01 1.2804069519042969e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 39 -5.1279999315738678e-02</internalNodes>\n          <leafValues>\n            1.5162390470504761e+00 -3.0271100997924805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 40 -4.2706999927759171e-02</internalNodes>\n          <leafValues>\n            1.7631920576095581e+00 -5.1832001656293869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 41 3.7178099155426025e-01</internalNodes>\n          <leafValues>\n            -3.1389200687408447e-01 1.5357979536056519e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 42 1.9412999972701073e-02</internalNodes>\n          <leafValues>\n            -1.0017599910497665e-01 9.3655401468276978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 43 1.7439000308513641e-02</internalNodes>\n          <leafValues>\n            -4.0379899740219116e-01 9.6293002367019653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 44 3.9638999849557877e-02</internalNodes>\n          <leafValues>\n            1.7039099335670471e-01 -2.9602990150451660e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 45 -9.1469995677471161e-03</internalNodes>\n          <leafValues>\n            8.8786798715591431e-01 -4.3818700313568115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 46 1.7219999572262168e-03</internalNodes>\n          <leafValues>\n            -3.7218600511550903e-01 4.0018901228904724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 47 3.0231000855565071e-02</internalNodes>\n          <leafValues>\n            6.5924003720283508e-02 -2.6469180583953857e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 48 -7.8795999288558960e-02</internalNodes>\n          <leafValues>\n            -1.7491459846496582e+00 2.8475299477577209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 49 2.1110000088810921e-03</internalNodes>\n          <leafValues>\n            -9.3908101320266724e-01 2.3205199837684631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 50 2.7091000229120255e-02</internalNodes>\n          <leafValues>\n            -5.2664000540971756e-02 1.0756820440292358e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 51 -4.4964998960494995e-02</internalNodes>\n          <leafValues>\n            -1.8294479846954346e+00 9.9561996757984161e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>32</maxWeakCount>\n      <stageThreshold>-4.4531588554382324e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 52 -6.5701000392436981e-02</internalNodes>\n          <leafValues>\n            1.1558510065078735e+00 -1.0716359615325928e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 53 1.5839999541640282e-02</internalNodes>\n          <leafValues>\n            -1.5634720325469971e+00 7.6877099275588989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 54 1.4570899307727814e-01</internalNodes>\n          <leafValues>\n            -5.7450097799301147e-01 1.3808720111846924e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 55 6.1389999464154243e-03</internalNodes>\n          <leafValues>\n            -1.4570560455322266e+00 5.1610302925109863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 56 6.7179999314248562e-03</internalNodes>\n          <leafValues>\n            -8.3533602952957153e-01 5.8522200584411621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 57 1.8518000841140747e-02</internalNodes>\n          <leafValues>\n            -3.1312099099159241e-01 1.1696679592132568e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 58 1.9958000630140305e-02</internalNodes>\n          <leafValues>\n            -4.3442600965499878e-01 9.5446902513504028e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 59 -2.7755001187324524e-01</internalNodes>\n          <leafValues>\n            1.4906179904937744e+00 -1.3815900683403015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 60 9.1859996318817139e-03</internalNodes>\n          <leafValues>\n            -9.6361500024795532e-01 2.7665498852729797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 61 -3.7737999111413956e-02</internalNodes>\n          <leafValues>\n            -2.4464108943939209e+00 2.3619599640369415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 62 1.8463000655174255e-02</internalNodes>\n          <leafValues>\n            1.7539200186729431e-01 -1.3423130512237549e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 63 -1.1114999651908875e-02</internalNodes>\n          <leafValues>\n            4.8710799217224121e-01 -8.9851897954940796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 64 3.3927999436855316e-02</internalNodes>\n          <leafValues>\n            1.7874200642108917e-01 -1.6342279911041260e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 65 -3.5649001598358154e-02</internalNodes>\n          <leafValues>\n            -1.9607399702072144e+00 1.8102499842643738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 66 -1.1438000015914440e-02</internalNodes>\n          <leafValues>\n            9.9010699987411499e-01 -3.8103199005126953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 67 -6.5236002206802368e-02</internalNodes>\n          <leafValues>\n            -2.5794160366058350e+00 2.4753600358963013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 68 -4.2272001504898071e-02</internalNodes>\n          <leafValues>\n            1.4411840438842773e+00 -2.9508298635482788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 69 1.9219999667257071e-03</internalNodes>\n          <leafValues>\n            -4.9608600139617920e-01 6.3173598051071167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 70 -1.2921799719333649e-01</internalNodes>\n          <leafValues>\n            -2.3314270973205566e+00 5.4496999830007553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 71 2.2931000217795372e-02</internalNodes>\n          <leafValues>\n            -8.4447097778320312e-01 3.8738098740577698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 72 -3.4120000898838043e-02</internalNodes>\n          <leafValues>\n            -1.4431500434875488e+00 9.8422996699810028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 73 2.6223000138998032e-02</internalNodes>\n          <leafValues>\n            1.8223099410533905e-01 -1.2586519718170166e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 74 2.2236999124288559e-02</internalNodes>\n          <leafValues>\n            6.9807998836040497e-02 -2.3820950984954834e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 75 -5.8240001089870930e-03</internalNodes>\n          <leafValues>\n            3.9332500100135803e-01 -2.7542799711227417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 76 4.3653000146150589e-02</internalNodes>\n          <leafValues>\n            1.4832699298858643e-01 -1.1368780136108398e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 77 5.7266999036073685e-02</internalNodes>\n          <leafValues>\n            2.4628099799156189e-01 -1.2687400579452515e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 78 2.3409998975694180e-03</internalNodes>\n          <leafValues>\n            -7.5448900461196899e-01 2.7163800597190857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 79 1.2996000237762928e-02</internalNodes>\n          <leafValues>\n            -3.6394900083541870e-01 7.0959198474884033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 80 -2.6517000049352646e-02</internalNodes>\n          <leafValues>\n            -2.3221859931945801e+00 3.5744000226259232e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 81 -5.8400002308189869e-03</internalNodes>\n          <leafValues>\n            4.2194300889968872e-01 -4.8184998333454132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 82 -1.6568999737501144e-02</internalNodes>\n          <leafValues>\n            1.1099940538406372e+00 -3.4849700331687927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 83 -6.8157002329826355e-02</internalNodes>\n          <leafValues>\n            -3.3269989490509033e+00 2.1299000084400177e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>52</maxWeakCount>\n      <stageThreshold>-4.3864588737487793e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 84 3.9974000304937363e-02</internalNodes>\n          <leafValues>\n            -1.2173449993133545e+00 1.0826710462570190e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 85 1.8819500505924225e-01</internalNodes>\n          <leafValues>\n            -4.8289400339126587e-01 1.4045250415802002e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 86 7.8027002513408661e-02</internalNodes>\n          <leafValues>\n            -1.0782150030136108e+00 7.4040299654006958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 87 1.1899999663000926e-04</internalNodes>\n          <leafValues>\n            -1.2019979953765869e+00 3.7749201059341431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 88 8.5056997835636139e-02</internalNodes>\n          <leafValues>\n            -4.3939098715782166e-01 1.2647340297698975e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 89 8.9720003306865692e-03</internalNodes>\n          <leafValues>\n            -1.8440499901771545e-01 4.5726400613784790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 90 8.8120000436902046e-03</internalNodes>\n          <leafValues>\n            3.0396699905395508e-01 -9.5991098880767822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 91 -2.3507999256253242e-02</internalNodes>\n          <leafValues>\n            1.2487529516220093e+00 4.6227999031543732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 92 7.0039997808635235e-03</internalNodes>\n          <leafValues>\n            -5.9442102909088135e-01 5.3963297605514526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 93 3.3851999789476395e-02</internalNodes>\n          <leafValues>\n            2.8496098518371582e-01 -1.4895249605178833e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 94 -3.2530000898987055e-03</internalNodes>\n          <leafValues>\n            4.8120799660682678e-01 -5.2712398767471313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 95 2.9097000136971474e-02</internalNodes>\n          <leafValues>\n            2.6743900775909424e-01 -1.6007850170135498e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 96 -8.4790000692009926e-03</internalNodes>\n          <leafValues>\n            -1.3107639551162720e+00 1.5243099629878998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 97 -1.0795000009238720e-02</internalNodes>\n          <leafValues>\n            4.5613598823547363e-01 -7.2050899267196655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 98 -2.4620000272989273e-02</internalNodes>\n          <leafValues>\n            -1.7320619821548462e+00 6.8363003432750702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 99 3.7380000576376915e-03</internalNodes>\n          <leafValues>\n            -1.9303299486637115e-01 6.8243497610092163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 100 -1.2264000251889229e-02</internalNodes>\n          <leafValues>\n            -1.6095290184020996e+00 7.5268000364303589e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 101 -4.8670000396668911e-03</internalNodes>\n          <leafValues>\n            7.4286502599716187e-01 -2.1510200202465057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 102 7.6725997030735016e-02</internalNodes>\n          <leafValues>\n            -2.6835098862648010e-01 1.3094140291213989e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 103 2.8578000143170357e-02</internalNodes>\n          <leafValues>\n            -5.8793000876903534e-02 1.2196329832077026e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 104 1.9694000482559204e-02</internalNodes>\n          <leafValues>\n            -3.5142898559570312e-01 8.4926998615264893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 105 -2.9093999415636063e-02</internalNodes>\n          <leafValues>\n            -1.0507299900054932e+00 2.9806300997734070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 106 -2.9144000262022018e-02</internalNodes>\n          <leafValues>\n            8.2547801733016968e-01 -3.2687199115753174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 107 1.9741000607609749e-02</internalNodes>\n          <leafValues>\n            2.0452600717544556e-01 -8.3760201930999756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 108 4.3299999088048935e-03</internalNodes>\n          <leafValues>\n            2.0577900111675262e-01 -6.6829800605773926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 109 -3.5500999540090561e-02</internalNodes>\n          <leafValues>\n            -1.2969900369644165e+00 1.3897499442100525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 110 -1.6172999516129494e-02</internalNodes>\n          <leafValues>\n            -1.3110569715499878e+00 7.5751997530460358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 111 -2.2151000797748566e-02</internalNodes>\n          <leafValues>\n            -1.0524389743804932e+00 1.9241100549697876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 112 -2.2707000374794006e-02</internalNodes>\n          <leafValues>\n            -1.3735309839248657e+00 6.6780999302864075e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 113 1.6607999801635742e-02</internalNodes>\n          <leafValues>\n            -3.7135999649763107e-02 7.7846401929855347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 114 -1.3309000059962273e-02</internalNodes>\n          <leafValues>\n            -9.9850702285766602e-01 1.2248100340366364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 115 -3.3732000738382339e-02</internalNodes>\n          <leafValues>\n            1.4461359977722168e+00 1.3151999562978745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 116 1.6935000196099281e-02</internalNodes>\n          <leafValues>\n            -3.7121298909187317e-01 5.2842199802398682e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 117 3.3259999472647905e-03</internalNodes>\n          <leafValues>\n            -5.7568502426147461e-01 3.9261901378631592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 118 8.3644002676010132e-02</internalNodes>\n          <leafValues>\n            1.6116000711917877e-02 -2.1173279285430908e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 119 2.5785198807716370e-01</internalNodes>\n          <leafValues>\n            -8.1609003245830536e-02 9.8782497644424438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 120 -3.6566998809576035e-02</internalNodes>\n          <leafValues>\n            -1.1512110233306885e+00 9.6459001302719116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 121 -1.6445999965071678e-02</internalNodes>\n          <leafValues>\n            3.7315499782562256e-01 -1.4585399627685547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 122 -3.7519999314099550e-03</internalNodes>\n          <leafValues>\n            2.6179298758506775e-01 -5.8156698942184448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 123 -6.3660000450909138e-03</internalNodes>\n          <leafValues>\n            7.5477397441864014e-01 -1.7055200040340424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 124 -3.8499999791383743e-03</internalNodes>\n          <leafValues>\n            2.2653999924659729e-01 -6.3876402378082275e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 125 -4.5494001358747482e-02</internalNodes>\n          <leafValues>\n            -1.2640299797058105e+00 2.5260698795318604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 126 -2.3941000923514366e-02</internalNodes>\n          <leafValues>\n            8.7068402767181396e-01 -2.7104699611663818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 127 -7.7558003365993500e-02</internalNodes>\n          <leafValues>\n            -1.3901610374450684e+00 2.3612299561500549e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 128 2.3614000529050827e-02</internalNodes>\n          <leafValues>\n            6.6140003502368927e-02 -1.2645419836044312e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 129 -2.5750000495463610e-03</internalNodes>\n          <leafValues>\n            -5.3841698169708252e-01 3.0379098653793335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 130 1.2010800093412399e-01</internalNodes>\n          <leafValues>\n            -3.5343000292778015e-01 5.2866202592849731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 131 2.2899999748915434e-03</internalNodes>\n          <leafValues>\n            -5.8701997995376587e-01 2.4061000347137451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 132 6.9716997444629669e-02</internalNodes>\n          <leafValues>\n            -3.3348900079727173e-01 5.1916301250457764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 133 -4.6670001000165939e-02</internalNodes>\n          <leafValues>\n            6.9795399904251099e-01 -1.4895999804139137e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 134 -5.0129000097513199e-02</internalNodes>\n          <leafValues>\n            8.6146199703216553e-01 -2.5986000895500183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 135 3.0147999525070190e-02</internalNodes>\n          <leafValues>\n            1.9332799315452576e-01 -5.9131097793579102e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>53</maxWeakCount>\n      <stageThreshold>-4.1299300193786621e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 136 9.1085001826286316e-02</internalNodes>\n          <leafValues>\n            -8.9233100414276123e-01 1.0434230566024780e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 137 1.2818999588489532e-02</internalNodes>\n          <leafValues>\n            -1.2597670555114746e+00 5.5317097902297974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 138 1.5931999310851097e-02</internalNodes>\n          <leafValues>\n            -8.6254400014877319e-01 6.3731801509857178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 139 2.2780001163482666e-03</internalNodes>\n          <leafValues>\n            -7.4639201164245605e-01 5.3155601024627686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 140 3.1840998679399490e-02</internalNodes>\n          <leafValues>\n            -1.2650489807128906e+00 3.6153900623321533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 141 2.6960000395774841e-03</internalNodes>\n          <leafValues>\n            -9.8290401697158813e-01 3.6013001203536987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 142 -1.2055000290274620e-02</internalNodes>\n          <leafValues>\n            6.4068400859832764e-01 -5.0125002861022949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 143 2.1324999630451202e-02</internalNodes>\n          <leafValues>\n            -2.4034999310970306e-01 8.5448002815246582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 144 3.0486000701785088e-02</internalNodes>\n          <leafValues>\n            -3.4273600578308105e-01 1.1428849697113037e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 145 -4.5079998672008514e-02</internalNodes>\n          <leafValues>\n            1.0976949930191040e+00 -1.7974600195884705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 146 -7.1700997650623322e-02</internalNodes>\n          <leafValues>\n            1.5735000371932983e+00 -3.1433498859405518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 147 5.9218000620603561e-02</internalNodes>\n          <leafValues>\n            -2.7582401037216187e-01 1.0448570251464844e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 148 6.7010000348091125e-03</internalNodes>\n          <leafValues>\n            -1.0974019765853882e+00 1.9801199436187744e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 149 4.1046999394893646e-02</internalNodes>\n          <leafValues>\n            3.0547699332237244e-01 -1.3287999629974365e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 150 -8.5499999113380909e-04</internalNodes>\n          <leafValues>\n            2.5807100534439087e-01 -7.0052897930145264e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 151 -3.0360000208020210e-02</internalNodes>\n          <leafValues>\n            -1.2306419610977173e+00 2.2609399259090424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 152 -1.2930000200867653e-02</internalNodes>\n          <leafValues>\n            4.0758600831031799e-01 -5.1234501600265503e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 153 3.7367999553680420e-02</internalNodes>\n          <leafValues>\n            -9.4755001366138458e-02 6.1765098571777344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 154 2.4434000253677368e-02</internalNodes>\n          <leafValues>\n            -4.1100600361824036e-01 4.7630500793457031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 155 5.7007998228073120e-02</internalNodes>\n          <leafValues>\n            2.5249299407005310e-01 -6.8669801950454712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 156 -1.6313999891281128e-02</internalNodes>\n          <leafValues>\n            -9.3928402662277222e-01 1.1448100209236145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 157 -1.7648899555206299e-01</internalNodes>\n          <leafValues>\n            1.2451089620590210e+00 -5.6519001722335815e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 158 1.7614600062370300e-01</internalNodes>\n          <leafValues>\n            -3.2528200745582581e-01 8.2791501283645630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 159 -7.3910001665353775e-03</internalNodes>\n          <leafValues>\n            3.4783700108528137e-01 -1.7929099500179291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 160 6.0890998691320419e-02</internalNodes>\n          <leafValues>\n            5.5098000913858414e-02 -1.5480779409408569e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 161 -2.9123000800609589e-02</internalNodes>\n          <leafValues>\n            -1.0255639553070068e+00 2.4106900393962860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 162 -4.5648999512195587e-02</internalNodes>\n          <leafValues>\n            1.0301599502563477e+00 -3.1672099232673645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 163 3.7333000451326370e-02</internalNodes>\n          <leafValues>\n            2.1620599925518036e-01 -8.2589900493621826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 164 -2.4411000311374664e-02</internalNodes>\n          <leafValues>\n            -1.5957959890365601e+00 5.1139000803232193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 165 -5.9806998819112778e-02</internalNodes>\n          <leafValues>\n            -1.0312290191650391e+00 1.3092300295829773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 166 -3.0106000602245331e-02</internalNodes>\n          <leafValues>\n            -1.4781630039215088e+00 3.7211999297142029e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 167 7.4209999293088913e-03</internalNodes>\n          <leafValues>\n            -2.4024100601673126e-01 4.9333998560905457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 168 -2.1909999195486307e-03</internalNodes>\n          <leafValues>\n            2.8941500186920166e-01 -5.7259601354598999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 169 2.0860999822616577e-02</internalNodes>\n          <leafValues>\n            -2.3148399591445923e-01 6.3765901327133179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 170 -6.6990000195801258e-03</internalNodes>\n          <leafValues>\n            -1.2107750177383423e+00 6.4018003642559052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 171 1.8758000805974007e-02</internalNodes>\n          <leafValues>\n            2.4461300671100616e-01 -9.9786698818206787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 172 -4.4323001056909561e-02</internalNodes>\n          <leafValues>\n            -1.3699189424514771e+00 3.6051999777555466e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 173 2.2859999909996986e-02</internalNodes>\n          <leafValues>\n            2.1288399398326874e-01 -1.0397620201110840e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 174 -9.8600005730986595e-04</internalNodes>\n          <leafValues>\n            3.2443600893020630e-01 -5.4291802644729614e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 175 1.7239000648260117e-02</internalNodes>\n          <leafValues>\n            -2.8323900699615479e-01 4.4468200206756592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 176 -3.4531001001596451e-02</internalNodes>\n          <leafValues>\n            -2.3107020854949951e+00 -3.1399999279528856e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 177 6.7006997764110565e-02</internalNodes>\n          <leafValues>\n            2.8715699911117554e-01 -6.4481002092361450e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 178 2.3776899278163910e-01</internalNodes>\n          <leafValues>\n            -2.7174800634384155e-01 8.0219101905822754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 179 -1.2903000228106976e-02</internalNodes>\n          <leafValues>\n            -1.5317620038986206e+00 2.1423600614070892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 180 1.0514999739825726e-02</internalNodes>\n          <leafValues>\n            7.7037997543811798e-02 -1.0581140518188477e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 181 1.6969000920653343e-02</internalNodes>\n          <leafValues>\n            1.4306700229644775e-01 -8.5828399658203125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 182 -7.2460002265870571e-03</internalNodes>\n          <leafValues>\n            -1.1020129919052124e+00 6.4906999468803406e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 183 1.0556999593973160e-02</internalNodes>\n          <leafValues>\n            1.3964000158011913e-02 6.3601499795913696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 184 6.1380001716315746e-03</internalNodes>\n          <leafValues>\n            -3.4545901417732239e-01 5.6296801567077637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 185 1.3158000074326992e-02</internalNodes>\n          <leafValues>\n            1.9927300512790680e-01 -1.5040320158004761e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 186 3.1310000922530890e-03</internalNodes>\n          <leafValues>\n            -4.0903699398040771e-01 3.7796398997306824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 187 -1.0920699685811996e-01</internalNodes>\n          <leafValues>\n            -2.2227079868316650e+00 1.2178199738264084e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 188 8.1820003688335419e-03</internalNodes>\n          <leafValues>\n            -2.8652000427246094e-01 6.7890799045562744e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>62</maxWeakCount>\n      <stageThreshold>-4.0218091011047363e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 189 3.1346999108791351e-02</internalNodes>\n          <leafValues>\n            -8.8884598016738892e-01 9.4936800003051758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 190 3.1918000429868698e-02</internalNodes>\n          <leafValues>\n            -1.1146880388259888e+00 4.8888999223709106e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 191 6.5939999185502529e-03</internalNodes>\n          <leafValues>\n            -1.0097689628601074e+00 4.9723801016807556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 192 2.6148000732064247e-02</internalNodes>\n          <leafValues>\n            2.5991299748420715e-01 -1.2537480592727661e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 193 1.2845000252127647e-02</internalNodes>\n          <leafValues>\n            -5.7138597965240479e-01 5.9659498929977417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 194 2.6344999670982361e-02</internalNodes>\n          <leafValues>\n            -5.5203199386596680e-01 3.0217400193214417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 195 -1.5083000063896179e-02</internalNodes>\n          <leafValues>\n            -1.2871240377426147e+00 2.2354200482368469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 196 -3.8887001574039459e-02</internalNodes>\n          <leafValues>\n            1.7425049543380737e+00 -9.9747002124786377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 197 -5.7029998861253262e-03</internalNodes>\n          <leafValues>\n            -1.0523240566253662e+00 1.8362599611282349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 198 -1.4860000228509307e-03</internalNodes>\n          <leafValues>\n            5.6784200668334961e-01 -4.6742001175880432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 199 -2.8486000373959541e-02</internalNodes>\n          <leafValues>\n            1.3082909584045410e+00 -2.6460900902748108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 200 6.6224999725818634e-02</internalNodes>\n          <leafValues>\n            -4.6210700273513794e-01 4.1749599575996399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 201 8.8569996878504753e-03</internalNodes>\n          <leafValues>\n            -4.1474899649620056e-01 5.9204798936843872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 202 1.1355999857187271e-02</internalNodes>\n          <leafValues>\n            3.6103099584579468e-01 -4.5781201124191284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 203 -2.7679998893290758e-03</internalNodes>\n          <leafValues>\n            -8.9238899946212769e-01 1.4199000597000122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 204 1.1246999725699425e-02</internalNodes>\n          <leafValues>\n            2.9353401064872742e-01 -9.7330600023269653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 205 7.1970000863075256e-03</internalNodes>\n          <leafValues>\n            -7.9334902763366699e-01 1.8313400447368622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 206 3.1768999993801117e-02</internalNodes>\n          <leafValues>\n            1.5523099899291992e-01 -1.3245639801025391e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 207 2.5173999369144440e-02</internalNodes>\n          <leafValues>\n            3.4214999526739120e-02 -2.0948131084442139e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 208 7.5360001064836979e-03</internalNodes>\n          <leafValues>\n            -3.9450600743293762e-01 5.1333999633789062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 209 3.2873000949621201e-02</internalNodes>\n          <leafValues>\n            8.8372997939586639e-02 -1.2814120054244995e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 210 -2.7379998937249184e-03</internalNodes>\n          <leafValues>\n            5.5286502838134766e-01 -4.6384999155998230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 211 -3.8075000047683716e-02</internalNodes>\n          <leafValues>\n            -1.8497270345687866e+00 4.5944001525640488e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 212 -3.8984000682830811e-02</internalNodes>\n          <leafValues>\n            -4.8223701119422913e-01 3.4760600328445435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 213 2.8029999230057001e-03</internalNodes>\n          <leafValues>\n            -4.5154699683189392e-01 4.2806300520896912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 214 -5.4145999252796173e-02</internalNodes>\n          <leafValues>\n            -8.4520798921585083e-01 1.6674900054931641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 215 -8.3280000835657120e-03</internalNodes>\n          <leafValues>\n            3.5348299145698547e-01 -4.7163200378417969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 216 3.3778000622987747e-02</internalNodes>\n          <leafValues>\n            1.8463100492954254e-01 -1.6686669588088989e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 217 -1.1238099634647369e-01</internalNodes>\n          <leafValues>\n            -1.2521569728851318e+00 3.5992000252008438e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 218 -1.0408000089228153e-02</internalNodes>\n          <leafValues>\n            -8.1620401144027710e-01 2.3428599536418915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 219 -4.9439999274909496e-03</internalNodes>\n          <leafValues>\n            -9.2584699392318726e-01 1.0034800320863724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 220 -9.3029998242855072e-03</internalNodes>\n          <leafValues>\n            5.6499302387237549e-01 -1.8881900608539581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 221 -1.1749999597668648e-02</internalNodes>\n          <leafValues>\n            8.0302399396896362e-01 -3.8277000188827515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 222 -2.3217000067234039e-02</internalNodes>\n          <leafValues>\n            -8.4926998615264893e-01 1.9671200215816498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 223 1.6866000369191170e-02</internalNodes>\n          <leafValues>\n            -4.0591898560523987e-01 5.0695300102233887e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 224 -2.4031000211834908e-02</internalNodes>\n          <leafValues>\n            -1.5297520160675049e+00 2.3344999551773071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 225 -3.6945998668670654e-02</internalNodes>\n          <leafValues>\n            6.3007700443267822e-01 -3.1780400872230530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 226 -6.1563998460769653e-02</internalNodes>\n          <leafValues>\n            5.8627897500991821e-01 -1.2107999995350838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 227 2.1661000326275826e-02</internalNodes>\n          <leafValues>\n            -2.5623700022697449e-01 1.0409849882125854e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 228 -3.6710000131279230e-03</internalNodes>\n          <leafValues>\n            2.9171100258827209e-01 -8.3287298679351807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 229 4.4849000871181488e-02</internalNodes>\n          <leafValues>\n            -3.9633199572563171e-01 4.5662000775337219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 230 5.7195000350475311e-02</internalNodes>\n          <leafValues>\n            2.1023899316787720e-01 -1.5004800558090210e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 231 -1.1342000216245651e-02</internalNodes>\n          <leafValues>\n            4.4071298837661743e-01 -3.8653799891471863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 232 -1.2004000134766102e-02</internalNodes>\n          <leafValues>\n            9.3954598903656006e-01 -1.0589499771595001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 233 2.2515999153256416e-02</internalNodes>\n          <leafValues>\n            9.4480002298951149e-03 -1.6799509525299072e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 234 -1.9809000194072723e-02</internalNodes>\n          <leafValues>\n            -1.0133639574050903e+00 2.4146600067615509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 235 1.5891000628471375e-02</internalNodes>\n          <leafValues>\n            -3.7507599592208862e-01 4.6614098548889160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 236 -9.1420002281665802e-03</internalNodes>\n          <leafValues>\n            -8.0484098196029663e-01 1.7816999554634094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 237 -4.4740000739693642e-03</internalNodes>\n          <leafValues>\n            -1.0562069416046143e+00 7.3305003345012665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 238 1.2742500007152557e-01</internalNodes>\n          <leafValues>\n            2.0165599882602692e-01 -1.5467929840087891e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 239 4.7703001648187637e-02</internalNodes>\n          <leafValues>\n            -3.7937799096107483e-01 3.7885999679565430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 240 5.3608000278472900e-02</internalNodes>\n          <leafValues>\n            2.1220499277114868e-01 -1.2399710416793823e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 241 -3.9680998772382736e-02</internalNodes>\n          <leafValues>\n            -1.0257550477981567e+00 5.1282998174428940e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 242 -6.7327000200748444e-02</internalNodes>\n          <leafValues>\n            -1.0304750204086304e+00 2.3005299270153046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 243 1.3337600231170654e-01</internalNodes>\n          <leafValues>\n            -2.0869000256061554e-01 1.2272510528564453e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 244 -2.0919300615787506e-01</internalNodes>\n          <leafValues>\n            8.7929898500442505e-01 -4.4254999607801437e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 245 -6.5589003264904022e-02</internalNodes>\n          <leafValues>\n            1.0443429946899414e+00 -2.1682099997997284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 246 6.1882998794317245e-02</internalNodes>\n          <leafValues>\n            1.3798199594020844e-01 -1.9009059667587280e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 247 -2.5578999891877174e-02</internalNodes>\n          <leafValues>\n            -1.6607600450515747e+00 5.8439997956156731e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 248 -3.4827001392841339e-02</internalNodes>\n          <leafValues>\n            7.9940402507781982e-01 -8.2406997680664062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 249 -1.8209999427199364e-02</internalNodes>\n          <leafValues>\n            -9.6073997020721436e-01 6.6320002079010010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 250 1.5070999972522259e-02</internalNodes>\n          <leafValues>\n            1.9899399578571320e-01 -7.6433002948760986e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>72</maxWeakCount>\n      <stageThreshold>-3.8832089900970459e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 251 4.6324998140335083e-02</internalNodes>\n          <leafValues>\n            -1.0362670421600342e+00 8.2201498746871948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 252 1.5406999737024307e-02</internalNodes>\n          <leafValues>\n            -1.2327589988708496e+00 2.9647698998451233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 253 1.2808999978005886e-02</internalNodes>\n          <leafValues>\n            -7.5852298736572266e-01 5.7985502481460571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 254 4.9150999635457993e-02</internalNodes>\n          <leafValues>\n            -3.8983899354934692e-01 8.9680302143096924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 255 1.2621000409126282e-02</internalNodes>\n          <leafValues>\n            -7.1799302101135254e-01 5.0440901517868042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 256 -1.8768999725580215e-02</internalNodes>\n          <leafValues>\n            5.5147600173950195e-01 -7.0555400848388672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 257 4.1965000331401825e-02</internalNodes>\n          <leafValues>\n            -4.4782099127769470e-01 7.0985502004623413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 258 -5.1401998847723007e-02</internalNodes>\n          <leafValues>\n            -1.0932120084762573e+00 2.6701900362968445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 259 -7.0960998535156250e-02</internalNodes>\n          <leafValues>\n            8.3618402481079102e-01 -3.8318100571632385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 260 1.6745999455451965e-02</internalNodes>\n          <leafValues>\n            -2.5733101367950439e-01 2.5966501235961914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 261 -6.2400000169873238e-03</internalNodes>\n          <leafValues>\n            3.1631499528884888e-01 -5.8796900510787964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 262 -3.9397999644279480e-02</internalNodes>\n          <leafValues>\n            -1.0491210222244263e+00 1.6822400689125061e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 263 0.</internalNodes>\n          <leafValues>\n            1.6144199669361115e-01 -8.7876898050308228e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 264 -2.2307999432086945e-02</internalNodes>\n          <leafValues>\n            -6.9053500890731812e-01 2.3607000708580017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 265 1.8919999711215496e-03</internalNodes>\n          <leafValues>\n            2.4989199638366699e-01 -5.6583297252655029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 266 1.0730000212788582e-03</internalNodes>\n          <leafValues>\n            -5.0415802001953125e-01 3.8374501466751099e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 267 3.9230998605489731e-02</internalNodes>\n          <leafValues>\n            4.2619001120328903e-02 -1.3875889778137207e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 268 6.2238000333309174e-02</internalNodes>\n          <leafValues>\n            1.4119400084018707e-01 -1.0688860416412354e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 269 2.1399999968707561e-03</internalNodes>\n          <leafValues>\n            -8.9622402191162109e-01 1.9796399772167206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 270 9.1800000518560410e-04</internalNodes>\n          <leafValues>\n            -4.5337298512458801e-01 4.3532699346542358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 271 -6.9169998168945312e-03</internalNodes>\n          <leafValues>\n            3.3822798728942871e-01 -4.4793000817298889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 272 -2.3866999894380569e-02</internalNodes>\n          <leafValues>\n            -7.8908598423004150e-01 2.2511799633502960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 273 -1.0262800008058548e-01</internalNodes>\n          <leafValues>\n            -2.2831439971923828e+00 -5.3960001096129417e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 274 -9.5239998772740364e-03</internalNodes>\n          <leafValues>\n            3.9346700906753540e-01 -5.2242201566696167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 275 3.9877001196146011e-02</internalNodes>\n          <leafValues>\n            3.2799001783132553e-02 -1.5079489946365356e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 276 -1.3144999742507935e-02</internalNodes>\n          <leafValues>\n            -1.0839990377426147e+00 1.8482400476932526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 277 -5.0590999424457550e-02</internalNodes>\n          <leafValues>\n            -1.8822289705276489e+00 -2.2199999075382948e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 278 2.4917000904679298e-02</internalNodes>\n          <leafValues>\n            1.4593400061130524e-01 -2.2196519374847412e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 279 -7.6370001770555973e-03</internalNodes>\n          <leafValues>\n            -1.0164569616317749e+00 5.8797001838684082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 280 4.2911998927593231e-02</internalNodes>\n          <leafValues>\n            1.5443000197410583e-01 -1.1843889951705933e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 281 2.3000000510364771e-04</internalNodes>\n          <leafValues>\n            -7.7305799722671509e-01 1.2189900130033493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 282 9.0929996222257614e-03</internalNodes>\n          <leafValues>\n            -1.1450099945068359e-01 7.1091300249099731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 283 1.1145000346004963e-02</internalNodes>\n          <leafValues>\n            7.0000998675823212e-02 -1.0534820556640625e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 284 -5.2453000098466873e-02</internalNodes>\n          <leafValues>\n            -1.7594360113143921e+00 1.9523799419403076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 285 -2.3020699620246887e-01</internalNodes>\n          <leafValues>\n            9.5840299129486084e-01 -2.5045698881149292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 286 -1.6365999355912209e-02</internalNodes>\n          <leafValues>\n            4.6731901168823242e-01 -2.1108399331569672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 287 -1.7208000645041466e-02</internalNodes>\n          <leafValues>\n            7.0835697650909424e-01 -2.8018298745155334e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 288 -3.6648001521825790e-02</internalNodes>\n          <leafValues>\n            -1.1013339757919312e+00 2.4341100454330444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 289 -1.0304999537765980e-02</internalNodes>\n          <leafValues>\n            -1.0933129787445068e+00 5.6258998811244965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 290 -1.3713000342249870e-02</internalNodes>\n          <leafValues>\n            -2.6438099145889282e-01 1.9821000099182129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 291 2.9308000579476357e-02</internalNodes>\n          <leafValues>\n            -2.2142399847507477e-01 1.0525950193405151e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 292 2.4077000096440315e-02</internalNodes>\n          <leafValues>\n            1.8485699594020844e-01 -1.7203969955444336e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 293 6.1280000954866409e-03</internalNodes>\n          <leafValues>\n            -9.2721498012542725e-01 5.8752998709678650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 294 -2.2377999499440193e-02</internalNodes>\n          <leafValues>\n            1.9646559953689575e+00 2.7785999700427055e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 295 -7.0440000854432583e-03</internalNodes>\n          <leafValues>\n            2.1427600085735321e-01 -4.8407599329948425e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 296 -4.0603000670671463e-02</internalNodes>\n          <leafValues>\n            -1.1754349470138550e+00 1.6061200201511383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 297 -2.4466000497341156e-02</internalNodes>\n          <leafValues>\n            -1.1239900588989258e+00 4.1110001504421234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 298 2.5309999473392963e-03</internalNodes>\n          <leafValues>\n            -1.7169700562953949e-01 3.2178801298141479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 299 -1.9588999450206757e-02</internalNodes>\n          <leafValues>\n            8.2720202207565308e-01 -2.6376700401306152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 300 -2.9635999351739883e-02</internalNodes>\n          <leafValues>\n            -1.1524770259857178e+00 1.4999300241470337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 301 -1.5030000358819962e-02</internalNodes>\n          <leafValues>\n            -1.0491830110549927e+00 4.0160998702049255e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 302 -6.0715001076459885e-02</internalNodes>\n          <leafValues>\n            -1.0903840065002441e+00 1.5330800414085388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 303 -1.2790000066161156e-02</internalNodes>\n          <leafValues>\n            4.2248600721359253e-01 -4.2399200797080994e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 304 -2.0247999578714371e-02</internalNodes>\n          <leafValues>\n            -9.1866999864578247e-01 1.8485699594020844e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 305 -3.0683999881148338e-02</internalNodes>\n          <leafValues>\n            -1.5958670377731323e+00 2.5760000571608543e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 306 -2.0718000829219818e-02</internalNodes>\n          <leafValues>\n            -6.6299998760223389e-01 3.1037199497222900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 307 -1.7290000105276704e-03</internalNodes>\n          <leafValues>\n            1.9183400273323059e-01 -6.5084999799728394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 308 -3.1394001096487045e-02</internalNodes>\n          <leafValues>\n            -6.3643002510070801e-01 1.5408399701118469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 309 1.9003000110387802e-02</internalNodes>\n          <leafValues>\n            -1.8919399380683899e-01 1.5294510126113892e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 310 6.1769997701048851e-03</internalNodes>\n          <leafValues>\n            -1.0597900301218033e-01 6.4859598875045776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 311 -1.0165999643504620e-02</internalNodes>\n          <leafValues>\n            -1.0802700519561768e+00 3.7176001816987991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 312 -1.4169999631121755e-03</internalNodes>\n          <leafValues>\n            3.4157499670982361e-01 -9.7737997770309448e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 313 -4.0799998678267002e-03</internalNodes>\n          <leafValues>\n            4.7624599933624268e-01 -3.4366300702095032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 314 -4.4096998870372772e-02</internalNodes>\n          <leafValues>\n            9.7634297609329224e-01 -1.9173000007867813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 315 -6.0669999569654465e-02</internalNodes>\n          <leafValues>\n            -2.1752851009368896e+00 -2.8925999999046326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 316 -3.2931998372077942e-02</internalNodes>\n          <leafValues>\n            -6.4383101463317871e-01 1.6494099795818329e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 317 -1.4722800254821777e-01</internalNodes>\n          <leafValues>\n            -1.4745830297470093e+00 2.5839998852461576e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 318 -1.1930000036954880e-02</internalNodes>\n          <leafValues>\n            4.2441400885581970e-01 -1.7712600529193878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 319 1.4517900347709656e-01</internalNodes>\n          <leafValues>\n            2.5444999337196350e-02 -1.2779400348663330e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 320 5.1447998732328415e-02</internalNodes>\n          <leafValues>\n            1.5678399801254272e-01 -1.5188430547714233e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 321 3.1479999888688326e-03</internalNodes>\n          <leafValues>\n            -4.0424400568008423e-01 3.2429701089859009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 322 -4.3600000441074371e-02</internalNodes>\n          <leafValues>\n            -1.9932260513305664e+00 1.5018600225448608e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>83</maxWeakCount>\n      <stageThreshold>-3.8424909114837646e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 323 1.2899599969387054e-01</internalNodes>\n          <leafValues>\n            -6.2161999940872192e-01 1.1116520166397095e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 324 -9.1261997818946838e-02</internalNodes>\n          <leafValues>\n            1.0143059492111206e+00 -6.1335200071334839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 325 1.4271999709308147e-02</internalNodes>\n          <leafValues>\n            -1.0261659622192383e+00 3.9779999852180481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 326 3.2889999449253082e-02</internalNodes>\n          <leafValues>\n            -1.1386079788208008e+00 2.8690800070762634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 327 1.2590000405907631e-02</internalNodes>\n          <leafValues>\n            -5.6645601987838745e-01 4.5172399282455444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 328 1.4661000110208988e-02</internalNodes>\n          <leafValues>\n            3.0505999922752380e-01 -6.8129599094390869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 329 -3.3555999398231506e-02</internalNodes>\n          <leafValues>\n            -1.7208939790725708e+00 6.1439000070095062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 330 1.4252699911594391e-01</internalNodes>\n          <leafValues>\n            2.3192200064659119e-01 -1.7297149896621704e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 331 -6.2079997733235359e-03</internalNodes>\n          <leafValues>\n            -1.2163300514221191e+00 1.2160199880599976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 332 1.8178999423980713e-02</internalNodes>\n          <leafValues>\n            3.2553699612617493e-01 -8.1003999710083008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 333 2.5036999955773354e-02</internalNodes>\n          <leafValues>\n            -3.1698799133300781e-01 6.7361402511596680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 334 4.6560999006032944e-02</internalNodes>\n          <leafValues>\n            -1.1089800298213959e-01 8.4082502126693726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 335 -8.9999996125698090e-03</internalNodes>\n          <leafValues>\n            3.9574500918388367e-01 -4.7624599933624268e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 336 4.0805999189615250e-02</internalNodes>\n          <leafValues>\n            -1.8000000272877514e-04 9.4570702314376831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 337 -3.4221999347209930e-02</internalNodes>\n          <leafValues>\n            7.5206297636032104e-01 -3.1531500816345215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 338 -3.9716001600027084e-02</internalNodes>\n          <leafValues>\n            -8.3139598369598389e-01 1.7744399607181549e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 339 2.5170000735670328e-03</internalNodes>\n          <leafValues>\n            -5.9377998113632202e-01 2.4657000601291656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 340 2.7428999543190002e-02</internalNodes>\n          <leafValues>\n            1.5998399257659912e-01 -4.2781999707221985e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 341 3.4986000508069992e-02</internalNodes>\n          <leafValues>\n            3.5055998712778091e-02 -1.5988600254058838e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 342 4.4970000162720680e-03</internalNodes>\n          <leafValues>\n            -5.2034300565719604e-01 3.7828299403190613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 343 2.7699999045580626e-03</internalNodes>\n          <leafValues>\n            -5.3182601928710938e-01 2.4951000511646271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 344 3.5174001008272171e-02</internalNodes>\n          <leafValues>\n            1.9983400404453278e-01 -1.4446129798889160e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 345 2.5970999151468277e-02</internalNodes>\n          <leafValues>\n            4.4426999986171722e-02 -1.3622980117797852e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 346 -1.5783999115228653e-02</internalNodes>\n          <leafValues>\n            -9.1020399332046509e-01 2.7190300822257996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 347 -7.5880000367760658e-03</internalNodes>\n          <leafValues>\n            9.2064999043941498e-02 -8.1628900766372681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 348 2.0754000172019005e-02</internalNodes>\n          <leafValues>\n            2.1185700595378876e-01 -7.4729001522064209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 349 5.9829000383615494e-02</internalNodes>\n          <leafValues>\n            -2.7301099896430969e-01 8.0923300981521606e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 350 3.9039000868797302e-02</internalNodes>\n          <leafValues>\n            -1.0432299971580505e-01 8.6226201057434082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 351 2.1665999665856361e-02</internalNodes>\n          <leafValues>\n            6.2709003686904907e-02 -9.8894298076629639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 352 -2.7496999129652977e-02</internalNodes>\n          <leafValues>\n            -9.2690998315811157e-01 1.5586300194263458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 353 1.0462000034749508e-02</internalNodes>\n          <leafValues>\n            1.3418099284172058e-01 -7.0386397838592529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 354 2.4870999157428741e-02</internalNodes>\n          <leafValues>\n            1.9706700742244720e-01 -4.0263301134109497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 355 -1.6036000102758408e-02</internalNodes>\n          <leafValues>\n            -1.1409829854965210e+00 7.3997996747493744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 356 4.8627000302076340e-02</internalNodes>\n          <leafValues>\n            1.6990399360656738e-01 -7.2152197360992432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 357 1.2619999470189214e-03</internalNodes>\n          <leafValues>\n            -4.7389799356460571e-01 2.6254999637603760e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 358 -8.8035002350807190e-02</internalNodes>\n          <leafValues>\n            -2.1606519222259521e+00 1.4554800093173981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 359 1.8356999382376671e-02</internalNodes>\n          <leafValues>\n            4.4750999659299850e-02 -1.0766370296478271e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 360 3.5275001078844070e-02</internalNodes>\n          <leafValues>\n            -3.2919000834226608e-02 1.2153890132904053e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 361 -2.0392900705337524e-01</internalNodes>\n          <leafValues>\n            -1.3187999725341797e+00 1.5503999777138233e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 362 -1.6619000583887100e-02</internalNodes>\n          <leafValues>\n            3.6850199103355408e-01 -1.5283699333667755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 363 3.7739001214504242e-02</internalNodes>\n          <leafValues>\n            -2.5727799534797668e-01 7.0655298233032227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 364 2.2720000706613064e-03</internalNodes>\n          <leafValues>\n            -7.7602997422218323e-02 3.3367800712585449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 365 -1.4802999794483185e-02</internalNodes>\n          <leafValues>\n            -7.8524798154830933e-01 7.6934002339839935e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 366 -4.8319000750780106e-02</internalNodes>\n          <leafValues>\n            1.7022320032119751e+00 4.9722000956535339e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 367 -2.9539000242948532e-02</internalNodes>\n          <leafValues>\n            7.7670699357986450e-01 -2.4534299969673157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 368 -4.6169001609086990e-02</internalNodes>\n          <leafValues>\n            -1.4922779798507690e+00 1.2340000271797180e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 369 -2.8064999729394913e-02</internalNodes>\n          <leafValues>\n            -2.1345369815826416e+00 -2.5797000154852867e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 370 -5.7339998893439770e-03</internalNodes>\n          <leafValues>\n            5.6982600688934326e-01 -1.2056600302457809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 371 -1.0111000388860703e-02</internalNodes>\n          <leafValues>\n            6.7911398410797119e-01 -2.6638001203536987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 372 1.1359999887645245e-02</internalNodes>\n          <leafValues>\n            2.4789799749851227e-01 -6.4493000507354736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 373 5.1809001713991165e-02</internalNodes>\n          <leafValues>\n            1.4716000296175480e-02 -1.2395579814910889e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 374 3.3291999250650406e-02</internalNodes>\n          <leafValues>\n            -8.2559995353221893e-03 1.0168470144271851e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 375 -1.4494000002741814e-02</internalNodes>\n          <leafValues>\n            4.5066800713539124e-01 -3.6250999569892883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 376 -3.4221999347209930e-02</internalNodes>\n          <leafValues>\n            -9.5292502641677856e-01 2.0684599876403809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 377 -8.0654002726078033e-02</internalNodes>\n          <leafValues>\n            -2.0139501094818115e+00 -2.3084999993443489e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 378 -8.9399999706074595e-04</internalNodes>\n          <leafValues>\n            3.9572000503540039e-01 -2.9351300001144409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 379 9.7162000834941864e-02</internalNodes>\n          <leafValues>\n            -2.4980300664901733e-01 1.0859220027923584e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 380 3.6614000797271729e-02</internalNodes>\n          <leafValues>\n            -5.7844001799821854e-02 1.2162159681320190e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 381 5.1693998277187347e-02</internalNodes>\n          <leafValues>\n            4.3062999844551086e-02 -1.0636160373687744e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 382 -2.4557000026106834e-02</internalNodes>\n          <leafValues>\n            -4.8946800827980042e-01 1.7182900011539459e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 383 3.2736799120903015e-01</internalNodes>\n          <leafValues>\n            -2.9688599705696106e-01 5.1798301935195923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 384 7.6959999278187752e-03</internalNodes>\n          <leafValues>\n            -5.9805899858474731e-01 2.4803200364112854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 385 1.6172200441360474e-01</internalNodes>\n          <leafValues>\n            -2.9613999649882317e-02 -2.3162529468536377e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 386 -4.7889999113976955e-03</internalNodes>\n          <leafValues>\n            3.7457901239395142e-01 -3.2779198884963989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 387 -1.8402999266982079e-02</internalNodes>\n          <leafValues>\n            -9.9692702293395996e-01 7.2948001325130463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 388 7.7665001153945923e-02</internalNodes>\n          <leafValues>\n            1.4175699651241302e-01 -1.7238730192184448e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 389 1.8921000882983208e-02</internalNodes>\n          <leafValues>\n            -2.1273100376129150e-01 1.0165189504623413e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 390 -7.9397998750209808e-02</internalNodes>\n          <leafValues>\n            -1.3164349794387817e+00 1.4981999993324280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 391 -6.8037003278732300e-02</internalNodes>\n          <leafValues>\n            4.9421998858451843e-01 -2.9091000556945801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 392 -6.1010001227259636e-03</internalNodes>\n          <leafValues>\n            4.2430499196052551e-01 -3.3899301290512085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 393 3.1927000731229782e-02</internalNodes>\n          <leafValues>\n            -3.1046999618411064e-02 -2.3459999561309814e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 394 -2.9843999072909355e-02</internalNodes>\n          <leafValues>\n            -7.8989601135253906e-01 1.5417699515819550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 395 -8.0541998147964478e-02</internalNodes>\n          <leafValues>\n            -2.2509229183197021e+00 -3.0906999483704567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 396 3.8109999150037766e-03</internalNodes>\n          <leafValues>\n            -2.5577300786972046e-01 2.3785500228404999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 397 3.3647000789642334e-02</internalNodes>\n          <leafValues>\n            -2.2541399300098419e-01 9.2307400703430176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 398 8.2809999585151672e-03</internalNodes>\n          <leafValues>\n            -2.8896200656890869e-01 3.1046199798583984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 399 1.0104399919509888e-01</internalNodes>\n          <leafValues>\n            -3.4864000976085663e-02 -2.7102620601654053e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 400 -1.0009000077843666e-02</internalNodes>\n          <leafValues>\n            5.9715402126312256e-01 -3.3831000328063965e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 401 7.1919998154044151e-03</internalNodes>\n          <leafValues>\n            -4.7738000750541687e-01 2.2686000168323517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 402 2.4969000369310379e-02</internalNodes>\n          <leafValues>\n            2.2877700626850128e-01 -1.0435529947280884e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 403 2.7908000349998474e-01</internalNodes>\n          <leafValues>\n            -2.5818100571632385e-01 7.6780498027801514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 404 -4.4213000684976578e-02</internalNodes>\n          <leafValues>\n            -5.9798002243041992e-01 2.8039899468421936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 405 -1.4136999845504761e-02</internalNodes>\n          <leafValues>\n            7.0987302064895630e-01 -2.5645199418067932e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>91</maxWeakCount>\n      <stageThreshold>-3.6478610038757324e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 406 1.3771200180053711e-01</internalNodes>\n          <leafValues>\n            -5.5870598554611206e-01 1.0953769683837891e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 407 3.4460999071598053e-02</internalNodes>\n          <leafValues>\n            -7.1171897649765015e-01 5.2899599075317383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 408 1.8580000847578049e-02</internalNodes>\n          <leafValues>\n            -1.1157519817352295e+00 4.0593999624252319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 409 2.5041999295353889e-02</internalNodes>\n          <leafValues>\n            -4.0892499685287476e-01 7.4129998683929443e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 410 5.7179000228643417e-02</internalNodes>\n          <leafValues>\n            -3.8054299354553223e-01 7.3647701740264893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 411 1.4932000078260899e-02</internalNodes>\n          <leafValues>\n            -6.9945502281188965e-01 3.7950998544692993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 412 8.8900001719594002e-03</internalNodes>\n          <leafValues>\n            -5.4558598995208740e-01 3.6332499980926514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 413 3.0435999855399132e-02</internalNodes>\n          <leafValues>\n            -1.0124599933624268e-01 7.9585897922515869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 414 -4.4160000979900360e-02</internalNodes>\n          <leafValues>\n            8.4410899877548218e-01 -3.2976400852203369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 415 1.8461000174283981e-02</internalNodes>\n          <leafValues>\n            2.6326599717140198e-01 -9.6736502647399902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 416 1.0614999569952488e-02</internalNodes>\n          <leafValues>\n            1.5251900255680084e-01 -1.0589870214462280e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 417 -4.5974001288414001e-02</internalNodes>\n          <leafValues>\n            -1.9918340444564819e+00 1.3629099726676941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 418 8.2900002598762512e-02</internalNodes>\n          <leafValues>\n            -3.2037198543548584e-01 6.0304200649261475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 419 -8.9130001142621040e-03</internalNodes>\n          <leafValues>\n            5.9586602449417114e-01 -2.1139599382877350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 420 4.2814001441001892e-02</internalNodes>\n          <leafValues>\n            2.2925000637769699e-02 -1.4679330587387085e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 421 -8.7139997631311417e-03</internalNodes>\n          <leafValues>\n            -4.3989500403404236e-01 2.0439699292182922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 422 -4.3390002101659775e-03</internalNodes>\n          <leafValues>\n            -8.9066797494888306e-01 1.0469999909400940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 423 8.0749997869133949e-03</internalNodes>\n          <leafValues>\n            2.1164199709892273e-01 -4.0231600403785706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 424 9.6739001572132111e-02</internalNodes>\n          <leafValues>\n            1.3319999910891056e-02 -1.6085360050201416e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 425 -3.0536999925971031e-02</internalNodes>\n          <leafValues>\n            1.0063740015029907e+00 -1.3413299620151520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 426 -6.0855999588966370e-02</internalNodes>\n          <leafValues>\n            -1.4689979553222656e+00 9.4240000471472740e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 427 -3.8162000477313995e-02</internalNodes>\n          <leafValues>\n            -8.1636399030685425e-01 2.6171201467514038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 428 -9.6960002556443214e-03</internalNodes>\n          <leafValues>\n            1.1561699956655502e-01 -7.1693199872970581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 429 4.8902999609708786e-02</internalNodes>\n          <leafValues>\n            1.3050499558448792e-01 -1.6448370218276978e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 430 -4.1611999273300171e-02</internalNodes>\n          <leafValues>\n            -1.1795840263366699e+00 2.5017000734806061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 431 -2.0188000053167343e-02</internalNodes>\n          <leafValues>\n            6.3188201189041138e-01 -1.0490400344133377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 432 -9.7900000400841236e-04</internalNodes>\n          <leafValues>\n            1.8507799506187439e-01 -5.3565901517868042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 433 -3.3622000366449356e-02</internalNodes>\n          <leafValues>\n            -9.3127602338790894e-01 2.0071500539779663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 434 1.9455999135971069e-02</internalNodes>\n          <leafValues>\n            3.8029000163078308e-02 -1.0112210512161255e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 435 -3.1800000579096377e-04</internalNodes>\n          <leafValues>\n            3.6457699537277222e-01 -2.7610900998115540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 436 -3.8899999344721437e-04</internalNodes>\n          <leafValues>\n            1.9665899872779846e-01 -5.3410500288009644e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 437 -9.3496002256870270e-02</internalNodes>\n          <leafValues>\n            -1.6772350072860718e+00 2.0727099478244781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 438 -7.7877998352050781e-02</internalNodes>\n          <leafValues>\n            -3.0760629177093506e+00 -3.5803999751806259e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 439 1.6947999596595764e-02</internalNodes>\n          <leafValues>\n            2.1447399258613586e-01 -7.1376299858093262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 440 -2.1459000185132027e-02</internalNodes>\n          <leafValues>\n            -1.1468060016632080e+00 1.5855999663472176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 441 -1.2865999713540077e-02</internalNodes>\n          <leafValues>\n            8.3812397718429565e-01 -6.5944001078605652e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 442 7.8220004215836525e-03</internalNodes>\n          <leafValues>\n            -2.8026801347732544e-01 7.9376900196075439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 443 1.0294400155544281e-01</internalNodes>\n          <leafValues>\n            1.7832300066947937e-01 -6.8412202596664429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 444 -3.7487998604774475e-02</internalNodes>\n          <leafValues>\n            9.6189999580383301e-01 -2.1735599637031555e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 445 2.5505999103188515e-02</internalNodes>\n          <leafValues>\n            1.0103999637067318e-02 1.2461110353469849e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 446 6.6700001480057836e-04</internalNodes>\n          <leafValues>\n            -5.3488200902938843e-01 1.4746299386024475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 447 -2.8867900371551514e-01</internalNodes>\n          <leafValues>\n            8.2172799110412598e-01 -1.4948000200092793e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 448 9.1294996440410614e-02</internalNodes>\n          <leafValues>\n            -1.9605399668216705e-01 1.0803170204162598e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 449 1.2056600302457809e-01</internalNodes>\n          <leafValues>\n            -2.3848999291658401e-02 1.1392610073089600e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 450 -7.3775000870227814e-02</internalNodes>\n          <leafValues>\n            -1.3583840131759644e+00 -4.2039998807013035e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 451 -3.3128000795841217e-02</internalNodes>\n          <leafValues>\n            -6.4483201503753662e-01 2.4142199754714966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 452 -4.3937001377344131e-02</internalNodes>\n          <leafValues>\n            8.4285402297973633e-01 -2.0624800026416779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 453 1.8110199272632599e-01</internalNodes>\n          <leafValues>\n            1.9212099909782410e-01 -1.2222139835357666e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 454 -1.1850999668240547e-02</internalNodes>\n          <leafValues>\n            -7.2677397727966309e-01 5.2687998861074448e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 455 4.5920000411570072e-03</internalNodes>\n          <leafValues>\n            -3.6305201053619385e-01 2.9223799705505371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 456 7.0620002225041389e-03</internalNodes>\n          <leafValues>\n            5.8116000145673752e-02 -6.7161601781845093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 457 -2.3715000599622726e-02</internalNodes>\n          <leafValues>\n            4.7142100334167480e-01 1.8580000847578049e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 458 -6.7171998322010040e-02</internalNodes>\n          <leafValues>\n            -1.1331889629364014e+00 2.3780999705195427e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 459 -6.5310001373291016e-02</internalNodes>\n          <leafValues>\n            9.8253500461578369e-01 2.8362000361084938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 460 2.2791000083088875e-02</internalNodes>\n          <leafValues>\n            -2.8213700652122498e-01 5.8993399143218994e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 461 -1.9037999212741852e-02</internalNodes>\n          <leafValues>\n            -6.3711500167846680e-01 2.6514598727226257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 462 -6.8689999170601368e-03</internalNodes>\n          <leafValues>\n            3.7487301230430603e-01 -3.3232098817825317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 463 -4.0146000683307648e-02</internalNodes>\n          <leafValues>\n            -1.3048729896545410e+00 1.5724299848079681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 464 -4.0530998259782791e-02</internalNodes>\n          <leafValues>\n            -2.0458049774169922e+00 -2.6925999671220779e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 465 -1.2253999710083008e-02</internalNodes>\n          <leafValues>\n            7.7649402618408203e-01 -4.2971000075340271e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 466 -2.7219999581575394e-02</internalNodes>\n          <leafValues>\n            1.7424400150775909e-01 -4.4600901007652283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 467 -8.8366001844406128e-02</internalNodes>\n          <leafValues>\n            -1.5036419630050659e+00 1.4289900660514832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 468 -7.9159997403621674e-03</internalNodes>\n          <leafValues>\n            2.8666698932647705e-01 -3.7923699617385864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 469 -4.1960000991821289e-02</internalNodes>\n          <leafValues>\n            1.3846950531005859e+00 6.5026998519897461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 470 4.5662999153137207e-02</internalNodes>\n          <leafValues>\n            -2.2452299296855927e-01 7.9521000385284424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 471 -1.4090600609779358e-01</internalNodes>\n          <leafValues>\n            -1.5879319906234741e+00 1.1359000205993652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 472 -5.9216000139713287e-02</internalNodes>\n          <leafValues>\n            -1.1945960521697998e+00 -7.1640000678598881e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 473 4.3390002101659775e-03</internalNodes>\n          <leafValues>\n            -1.5528699755668640e-01 4.0664499998092651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 474 -2.0369999110698700e-03</internalNodes>\n          <leafValues>\n            2.5927901268005371e-01 -3.8368299603462219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 475 2.7516499161720276e-01</internalNodes>\n          <leafValues>\n            -8.8497996330261230e-02 7.6787501573562622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 476 -2.6601999998092651e-02</internalNodes>\n          <leafValues>\n            7.5024497509002686e-01 -2.2621999680995941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 477 4.0906000882387161e-02</internalNodes>\n          <leafValues>\n            1.2158600240945816e-01 -1.4566910266876221e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 478 5.5320002138614655e-03</internalNodes>\n          <leafValues>\n            -3.6611500382423401e-01 2.5968599319458008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 479 3.1879000365734100e-02</internalNodes>\n          <leafValues>\n            -7.5019001960754395e-02 4.8484799265861511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 480 -4.1482001543045044e-02</internalNodes>\n          <leafValues>\n            7.8220397233963013e-01 -2.1992200613021851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 481 -9.6130996942520142e-02</internalNodes>\n          <leafValues>\n            -8.9456301927566528e-01 1.4680700004100800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 482 -1.1568999849259853e-02</internalNodes>\n          <leafValues>\n            8.2714098691940308e-01 -2.0275600254535675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 483 1.8312999978661537e-02</internalNodes>\n          <leafValues>\n            1.6367999836802483e-02 2.7306801080703735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 484 -3.4166000783443451e-02</internalNodes>\n          <leafValues>\n            1.1307320594787598e+00 -1.8810899555683136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 485 -2.4476999416947365e-02</internalNodes>\n          <leafValues>\n            -5.7791298627853394e-01 1.5812499821186066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 486 4.8957001417875290e-02</internalNodes>\n          <leafValues>\n            -2.2564999759197235e-02 -1.6373280286788940e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 487 -2.0702999085187912e-02</internalNodes>\n          <leafValues>\n            -5.4512101411819458e-01 2.4086999893188477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 488 -2.3002000525593758e-02</internalNodes>\n          <leafValues>\n            -1.2236540317535400e+00 -7.3440000414848328e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 489 6.4585000276565552e-02</internalNodes>\n          <leafValues>\n            1.4695599675178528e-01 -4.4967499375343323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 490 1.2666000053286552e-02</internalNodes>\n          <leafValues>\n            -2.7873900532722473e-01 4.3876600265502930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 491 -1.2002999894320965e-02</internalNodes>\n          <leafValues>\n            -2.4289099872112274e-01 2.5350099802017212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 492 -2.6443999260663986e-02</internalNodes>\n          <leafValues>\n            -8.5864800214767456e-01 2.6025999337434769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 493 -2.5547999888658524e-02</internalNodes>\n          <leafValues>\n            6.9287902116775513e-01 -2.1160000469535589e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 494 3.9115000516176224e-02</internalNodes>\n          <leafValues>\n            -1.6589100658893585e-01 1.5209139585494995e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 495 -6.0330000706017017e-03</internalNodes>\n          <leafValues>\n            4.3856900930404663e-01 -2.1613700687885284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 496 -3.3936999738216400e-02</internalNodes>\n          <leafValues>\n            -9.7998398542404175e-01 2.2133000195026398e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>99</maxWeakCount>\n      <stageThreshold>-3.8700489997863770e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 497 4.0672998875379562e-02</internalNodes>\n          <leafValues>\n            -9.0474700927734375e-01 6.4410597085952759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 498 2.5609999895095825e-02</internalNodes>\n          <leafValues>\n            -7.9216998815536499e-01 5.7489997148513794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 499 1.9959500432014465e-01</internalNodes>\n          <leafValues>\n            -3.0099600553512573e-01 1.3143850564956665e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 500 1.2404999695718288e-02</internalNodes>\n          <leafValues>\n            -8.9882999658584595e-01 2.9205799102783203e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 501 3.9207998663187027e-02</internalNodes>\n          <leafValues>\n            -4.1955199837684631e-01 5.3463298082351685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 502 -3.0843999236822128e-02</internalNodes>\n          <leafValues>\n            4.5793399214744568e-01 -4.4629099965095520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 503 -3.5523001104593277e-02</internalNodes>\n          <leafValues>\n            9.1310501098632812e-01 -2.7373200654983521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 504 -6.1650000512599945e-02</internalNodes>\n          <leafValues>\n            -1.4697799682617188e+00 2.0364099740982056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 505 -1.1739999987185001e-02</internalNodes>\n          <leafValues>\n            -1.0482879877090454e+00 6.7801997065544128e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 506 6.6933996975421906e-02</internalNodes>\n          <leafValues>\n            2.9274499416351318e-01 -5.2282899618148804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 507 -2.0631000399589539e-02</internalNodes>\n          <leafValues>\n            -1.2855139970779419e+00 4.4550999999046326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 508 -2.2357000038027763e-02</internalNodes>\n          <leafValues>\n            -8.5753798484802246e-01 1.8434000015258789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 509 1.1500000255182385e-03</internalNodes>\n          <leafValues>\n            1.6405500471591949e-01 -6.9125002622604370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 510 3.5872999578714371e-02</internalNodes>\n          <leafValues>\n            1.5756499767303467e-01 -8.4262597560882568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 511 3.0659999698400497e-02</internalNodes>\n          <leafValues>\n            2.1637000143527985e-02 -1.3634690046310425e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 512 5.5559999309480190e-03</internalNodes>\n          <leafValues>\n            -1.6737000644207001e-01 2.5888401269912720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 513 -6.1160000041127205e-03</internalNodes>\n          <leafValues>\n            -9.7271800041198730e-01 6.6100001335144043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 514 -3.0316999182105064e-02</internalNodes>\n          <leafValues>\n            9.8474198579788208e-01 -1.6448000445961952e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 515 -9.7200004383921623e-03</internalNodes>\n          <leafValues>\n            4.7604700922966003e-01 -3.2516700029373169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 516 -5.7126998901367188e-02</internalNodes>\n          <leafValues>\n            -9.5920699834823608e-01 1.9938200712203979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 517 4.0059997700154781e-03</internalNodes>\n          <leafValues>\n            -5.2612501382827759e-01 2.2428700327873230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 518 3.3734001219272614e-02</internalNodes>\n          <leafValues>\n            1.7070099711418152e-01 -1.0737580060958862e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 519 -3.4641999751329422e-02</internalNodes>\n          <leafValues>\n            -1.1343129873275757e+00 3.6540001630783081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 520 4.6923000365495682e-02</internalNodes>\n          <leafValues>\n            2.5832301378250122e-01 -7.1535801887512207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 521 -8.7660001590847969e-03</internalNodes>\n          <leafValues>\n            1.9640900194644928e-01 -5.3355097770690918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 522 6.5627999603748322e-02</internalNodes>\n          <leafValues>\n            -5.1194999366998672e-02 9.7610700130462646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 523 -4.4165000319480896e-02</internalNodes>\n          <leafValues>\n            1.0631920099258423e+00 -2.3462599515914917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 524 1.7304999753832817e-02</internalNodes>\n          <leafValues>\n            -1.8582899868488312e-01 4.5889899134635925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 525 3.3135998994112015e-02</internalNodes>\n          <leafValues>\n            -2.9381999745965004e-02 -2.6651329994201660e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 526 -2.1029999479651451e-02</internalNodes>\n          <leafValues>\n            9.9979901313781738e-01 2.4937000125646591e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 527 2.9783999547362328e-02</internalNodes>\n          <leafValues>\n            -2.9605999588966370e-02 -2.1695868968963623e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 528 5.5291999131441116e-02</internalNodes>\n          <leafValues>\n            -7.5599999399855733e-04 7.4651998281478882e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 529 -3.3597998321056366e-02</internalNodes>\n          <leafValues>\n            -1.5274159908294678e+00 1.1060000397264957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 530 1.9602999091148376e-02</internalNodes>\n          <leafValues>\n            3.3574998378753662e-02 9.9526202678680420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 531 -2.0787000656127930e-02</internalNodes>\n          <leafValues>\n            7.6612901687622070e-01 -2.4670800566673279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 532 3.2536000013351440e-02</internalNodes>\n          <leafValues>\n            1.6263400018215179e-01 -6.1134302616119385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 533 -1.0788000188767910e-02</internalNodes>\n          <leafValues>\n            -9.7839701175689697e-01 2.8969999402761459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 534 -9.9560003727674484e-03</internalNodes>\n          <leafValues>\n            4.6145799756050110e-01 -1.3510499894618988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 535 -3.7489999085664749e-03</internalNodes>\n          <leafValues>\n            2.5458198785781860e-01 -5.1955598592758179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 536 -4.1779998689889908e-02</internalNodes>\n          <leafValues>\n            -8.0565100908279419e-01 1.5208500623703003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 537 -3.4221000969409943e-02</internalNodes>\n          <leafValues>\n            -1.3137799501419067e+00 -3.5800000187009573e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 538 1.0130000300705433e-02</internalNodes>\n          <leafValues>\n            2.0175799727439880e-01 -6.1339598894119263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 539 -8.9849002659320831e-02</internalNodes>\n          <leafValues>\n            9.7632801532745361e-01 -2.0884799957275391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 540 2.6097999885678291e-02</internalNodes>\n          <leafValues>\n            -1.8807999789714813e-01 4.7705799341201782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 541 -3.7539999466389418e-03</internalNodes>\n          <leafValues>\n            -6.7980402708053589e-01 1.1288800090551376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 542 3.1973000615835190e-02</internalNodes>\n          <leafValues>\n            1.8951700627803802e-01 -1.4967479705810547e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 543 1.9332999363541603e-02</internalNodes>\n          <leafValues>\n            -2.3609900474548340e-01 8.1320500373840332e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 544 1.9490000559017062e-03</internalNodes>\n          <leafValues>\n            2.4830399453639984e-01 -6.9211997091770172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 545 -4.4146999716758728e-02</internalNodes>\n          <leafValues>\n            -1.0418920516967773e+00 4.8053000122308731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 546 -4.4681999832391739e-02</internalNodes>\n          <leafValues>\n            5.1346302032470703e-01 -7.3799998499453068e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 547 -1.0757499933242798e-01</internalNodes>\n          <leafValues>\n            1.6202019453048706e+00 -1.8667599558830261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 548 -1.2846800684928894e-01</internalNodes>\n          <leafValues>\n            2.9869480133056641e+00 9.5427997410297394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 549 -4.4757999479770660e-02</internalNodes>\n          <leafValues>\n            6.0405302047729492e-01 -2.7058699727058411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 550 -4.3990999460220337e-02</internalNodes>\n          <leafValues>\n            -6.1790502071380615e-01 1.5997199714183807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 551 -1.2268999963998795e-01</internalNodes>\n          <leafValues>\n            6.6327202320098877e-01 -2.3636999726295471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 552 -1.9982999190688133e-02</internalNodes>\n          <leafValues>\n            -1.1228660345077515e+00 1.9616700708866119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 553 -1.5527999959886074e-02</internalNodes>\n          <leafValues>\n            -1.0770269632339478e+00 2.0693000406026840e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 554 -4.8971001058816910e-02</internalNodes>\n          <leafValues>\n            8.1168299913406372e-01 -1.7252000048756599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 555 5.5975999683141708e-02</internalNodes>\n          <leafValues>\n            -2.2529000416398048e-02 -1.7356760501861572e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 556 -9.8580000922083855e-03</internalNodes>\n          <leafValues>\n            6.7881399393081665e-01 -5.8180000633001328e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 557 1.3481000438332558e-02</internalNodes>\n          <leafValues>\n            5.7847999036312103e-02 -7.7255302667617798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 558 6.5609999001026154e-03</internalNodes>\n          <leafValues>\n            -1.3146899640560150e-01 6.7055797576904297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 559 7.1149999275803566e-03</internalNodes>\n          <leafValues>\n            -3.7880599498748779e-01 3.0978998541831970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 560 4.8159998841583729e-03</internalNodes>\n          <leafValues>\n            -5.8470398187637329e-01 2.5602099299430847e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 561 9.5319999381899834e-03</internalNodes>\n          <leafValues>\n            -3.0217000842094421e-01 4.1253298521041870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 562 -2.7474999427795410e-02</internalNodes>\n          <leafValues>\n            5.9154701232910156e-01 1.7963999882340431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 563 -3.9519999176263809e-02</internalNodes>\n          <leafValues>\n            9.6913498640060425e-01 -2.1020300686359406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 564 -3.0658999457955360e-02</internalNodes>\n          <leafValues>\n            9.1155898571014404e-01 4.0550000965595245e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 565 -1.4680000022053719e-03</internalNodes>\n          <leafValues>\n            -6.0489797592163086e-01 1.6960899531841278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 566 1.9077600538730621e-01</internalNodes>\n          <leafValues>\n            4.3515000492334366e-02 8.1892901659011841e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 567 5.1790000870823860e-03</internalNodes>\n          <leafValues>\n            -9.3617302179336548e-01 2.4937000125646591e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 568 2.4126000702381134e-02</internalNodes>\n          <leafValues>\n            1.8175500631332397e-01 -3.4185901284217834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 569 -2.6383999735116959e-02</internalNodes>\n          <leafValues>\n            -1.2912579774856567e+00 -3.4280000254511833e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 570 5.4139997810125351e-03</internalNodes>\n          <leafValues>\n            -4.6291999518871307e-02 2.5269600749015808e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 571 5.4216001182794571e-02</internalNodes>\n          <leafValues>\n            -1.2848000042140484e-02 -1.4304540157318115e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 572 2.3799999326001853e-04</internalNodes>\n          <leafValues>\n            -2.6676699519157410e-01 3.3588299155235291e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 573 1.5216999687254429e-02</internalNodes>\n          <leafValues>\n            -5.1367300748825073e-01 1.3005100190639496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 574 1.7007999122142792e-02</internalNodes>\n          <leafValues>\n            4.1575899720191956e-01 -3.1241199374198914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 575 3.0496999621391296e-02</internalNodes>\n          <leafValues>\n            -2.4820999801158905e-01 7.0828497409820557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 576 6.5430002287030220e-03</internalNodes>\n          <leafValues>\n            -2.2637000679969788e-01 1.9184599816799164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 577 1.4163999259471893e-01</internalNodes>\n          <leafValues>\n            6.5227001905441284e-02 -8.8809502124786377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 578 1.9338000565767288e-02</internalNodes>\n          <leafValues>\n            1.8891200423240662e-01 -2.7397701144218445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 579 -1.7324000597000122e-02</internalNodes>\n          <leafValues>\n            -9.4866698980331421e-01 2.4196999147534370e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 580 -6.2069999985396862e-03</internalNodes>\n          <leafValues>\n            3.6938399076461792e-01 -1.7494900524616241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 581 -1.6109000891447067e-02</internalNodes>\n          <leafValues>\n            9.6159499883651733e-01 -2.0005300641059875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 582 -1.0122500360012054e-01</internalNodes>\n          <leafValues>\n            -3.0699110031127930e+00 1.1363799870014191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 583 -7.5509999878704548e-03</internalNodes>\n          <leafValues>\n            2.2921000421047211e-01 -4.5645099878311157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 584 4.4247999787330627e-02</internalNodes>\n          <leafValues>\n            -3.1599999056197703e-04 3.9225301146507263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 585 -1.1636000126600266e-01</internalNodes>\n          <leafValues>\n            9.5233702659606934e-01 -2.0201599597930908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 586 4.7360002063214779e-03</internalNodes>\n          <leafValues>\n            -9.9177002906799316e-02 2.0370499789714813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 587 2.2459000349044800e-02</internalNodes>\n          <leafValues>\n            8.7280003353953362e-03 -1.0217070579528809e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 588 -1.2109000235795975e-02</internalNodes>\n          <leafValues>\n            6.4812600612640381e-01 -9.0149000287055969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 589 5.6120000779628754e-02</internalNodes>\n          <leafValues>\n            -3.6759998649358749e-02 -1.9275590181350708e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 590 -8.7379999458789825e-03</internalNodes>\n          <leafValues>\n            6.9261300563812256e-01 -6.8374998867511749e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 591 6.6399998031556606e-03</internalNodes>\n          <leafValues>\n            -4.0569800138473511e-01 1.8625700473785400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 592 -1.8131999298930168e-02</internalNodes>\n          <leafValues>\n            -6.4518201351165771e-01 2.1976399421691895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 593 -2.2718999534845352e-02</internalNodes>\n          <leafValues>\n            9.7776198387145996e-01 -1.8654300272464752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 594 1.2705000117421150e-02</internalNodes>\n          <leafValues>\n            -1.0546600073575974e-01 3.7404099106788635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 595 -1.3682999648153782e-02</internalNodes>\n          <leafValues>\n            6.1064100265502930e-01 -2.6881098747253418e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>115</maxWeakCount>\n      <stageThreshold>-3.7160909175872803e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 596 3.1357999891042709e-02</internalNodes>\n          <leafValues>\n            -1.0183910131454468e+00 5.7528597116470337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 597 9.3050003051757812e-02</internalNodes>\n          <leafValues>\n            -4.1297501325607300e-01 1.0091199874877930e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 598 2.5949999690055847e-02</internalNodes>\n          <leafValues>\n            -5.8587902784347534e-01 5.6606197357177734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 599 1.6472000628709793e-02</internalNodes>\n          <leafValues>\n            -9.2857497930526733e-01 3.0924499034881592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 600 -1.8779999809339643e-03</internalNodes>\n          <leafValues>\n            1.1951000243425369e-01 -1.1180130243301392e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 601 -9.0129999443888664e-03</internalNodes>\n          <leafValues>\n            -5.7849502563476562e-01 3.3154401183128357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 602 2.2547999396920204e-02</internalNodes>\n          <leafValues>\n            -3.8325101137161255e-01 5.2462202310562134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 603 -3.7780001759529114e-02</internalNodes>\n          <leafValues>\n            1.1790670156478882e+00 -3.4166999161243439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 604 -5.3799999877810478e-03</internalNodes>\n          <leafValues>\n            -8.6265897750854492e-01 1.1867900192737579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 605 -2.3893000558018684e-02</internalNodes>\n          <leafValues>\n            -7.4950599670410156e-01 2.1011400222778320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 606 -2.6521999388933182e-02</internalNodes>\n          <leafValues>\n            9.2128598690032959e-01 -2.8252801299095154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 607 1.2280000373721123e-02</internalNodes>\n          <leafValues>\n            2.6662799715995789e-01 -7.0013600587844849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 608 9.6594996750354767e-02</internalNodes>\n          <leafValues>\n            -2.8453999757766724e-01 7.3168998956680298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 609 -2.7414999902248383e-02</internalNodes>\n          <leafValues>\n            -6.1492699384689331e-01 1.5576200187206268e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 610 -1.5767000615596771e-02</internalNodes>\n          <leafValues>\n            5.7551199197769165e-01 -3.4362199902534485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 611 -2.1100000012665987e-03</internalNodes>\n          <leafValues>\n            3.2599699497222900e-01 -1.3008299469947815e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 612 1.2006999924778938e-02</internalNodes>\n          <leafValues>\n            8.9322999119758606e-02 -9.6025598049163818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 613 -1.5421999618411064e-02</internalNodes>\n          <leafValues>\n            3.4449499845504761e-01 -4.6711999177932739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 614 -4.1579999960958958e-03</internalNodes>\n          <leafValues>\n            2.3696300387382507e-01 -5.2563297748565674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 615 -2.1185999736189842e-02</internalNodes>\n          <leafValues>\n            -7.4267697334289551e-01 2.1702000498771667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 616 -1.7077000811696053e-02</internalNodes>\n          <leafValues>\n            -9.0471798181533813e-01 6.6012002527713776e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 617 -4.0849998593330383e-02</internalNodes>\n          <leafValues>\n            -3.4446600079536438e-01 2.1503700315952301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 618 -8.1930002197623253e-03</internalNodes>\n          <leafValues>\n            -9.3388599157333374e-01 5.0471000373363495e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 619 -1.9238000735640526e-02</internalNodes>\n          <leafValues>\n            -5.3203701972961426e-01 1.7240600287914276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 620 -4.4192001223564148e-02</internalNodes>\n          <leafValues>\n            9.2075002193450928e-01 -2.2148500382900238e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 621 -6.2392000108957291e-02</internalNodes>\n          <leafValues>\n            -7.1053802967071533e-01 1.8323899805545807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 622 -1.0079999919980764e-03</internalNodes>\n          <leafValues>\n            -8.7063097953796387e-01 5.5330000817775726e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 623 2.3870000615715981e-02</internalNodes>\n          <leafValues>\n            -2.2854200005531311e-01 5.2415597438812256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 624 2.1391000598669052e-02</internalNodes>\n          <leafValues>\n            -3.0325898528099060e-01 5.5860602855682373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 625 2.0254999399185181e-02</internalNodes>\n          <leafValues>\n            2.6901501417160034e-01 -7.0261800289154053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 626 -2.8772000223398209e-02</internalNodes>\n          <leafValues>\n            -1.1835030317306519e+00 4.6512000262737274e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 627 3.4199999645352364e-03</internalNodes>\n          <leafValues>\n            -5.4652100801467896e-01 2.5962498784065247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 628 5.6983001530170441e-02</internalNodes>\n          <leafValues>\n            -2.6982900500297546e-01 5.8170700073242188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 629 -9.3892000615596771e-02</internalNodes>\n          <leafValues>\n            -9.1046398878097534e-01 1.9677700102329254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 630 1.7699999734759331e-02</internalNodes>\n          <leafValues>\n            -4.4003298878669739e-01 2.1349500119686127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 631 2.2844199836254120e-01</internalNodes>\n          <leafValues>\n            2.3605000227689743e-02 7.7171599864959717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 632 -1.8287500739097595e-01</internalNodes>\n          <leafValues>\n            7.9228597879409790e-01 -2.4644799530506134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 633 -6.9891996681690216e-02</internalNodes>\n          <leafValues>\n            8.0267798900604248e-01 -3.6072000861167908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 634 1.5297000296413898e-02</internalNodes>\n          <leafValues>\n            -2.0072300732135773e-01 1.1030600070953369e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 635 6.7500001750886440e-03</internalNodes>\n          <leafValues>\n            -4.5967999845743179e-02 7.2094500064849854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 636 -1.5983000397682190e-02</internalNodes>\n          <leafValues>\n            -9.0357202291488647e-01 4.4987998902797699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 637 1.3088000006973743e-02</internalNodes>\n          <leafValues>\n            3.5297098755836487e-01 -3.7710601091384888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 638 1.3061000034213066e-02</internalNodes>\n          <leafValues>\n            -1.9583599269390106e-01 1.1198940277099609e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 639 -3.9907000958919525e-02</internalNodes>\n          <leafValues>\n            -1.3998429775238037e+00 1.9145099818706512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 640 1.5026999637484550e-02</internalNodes>\n          <leafValues>\n            2.3600000422447920e-03 -1.1611249446868896e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 641 -2.0517999306321144e-02</internalNodes>\n          <leafValues>\n            -4.8908099532127380e-01 1.6743400692939758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 642 -2.2359000518918037e-02</internalNodes>\n          <leafValues>\n            -1.2202980518341064e+00 -1.1975999921560287e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 643 -7.9150004312396049e-03</internalNodes>\n          <leafValues>\n            3.7228098511695862e-01 -8.5063003003597260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 644 1.5258000232279301e-02</internalNodes>\n          <leafValues>\n            -2.9412600398063660e-01 5.9406399726867676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 645 -3.1665999442338943e-02</internalNodes>\n          <leafValues>\n            -1.4395569562911987e+00 1.3578799366950989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 646 -3.0773999169468880e-02</internalNodes>\n          <leafValues>\n            -2.2545371055603027e+00 -3.3971000462770462e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 647 -1.5483000315725803e-02</internalNodes>\n          <leafValues>\n            3.7700700759887695e-01 1.5847999602556229e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 648 3.5167001187801361e-02</internalNodes>\n          <leafValues>\n            -2.9446101188659668e-01 5.3159099817276001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 649 -1.7906000837683678e-02</internalNodes>\n          <leafValues>\n            -9.9788200855255127e-01 1.6235999763011932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 650 -3.1799999997019768e-03</internalNodes>\n          <leafValues>\n            4.7657001763582230e-02 -7.5249898433685303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 651 1.5720000490546227e-02</internalNodes>\n          <leafValues>\n            1.4873799681663513e-01 -6.5375399589538574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 652 2.9864000156521797e-02</internalNodes>\n          <leafValues>\n            -1.4952000230550766e-02 -1.2275190353393555e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 653 2.9899999499320984e-03</internalNodes>\n          <leafValues>\n            -1.4263699948787689e-01 4.3272799253463745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 654 8.4749996662139893e-02</internalNodes>\n          <leafValues>\n            -1.9280999898910522e-02 -1.1946409940719604e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 655 -5.8724999427795410e-02</internalNodes>\n          <leafValues>\n            -1.7328219413757324e+00 1.4374700188636780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 656 4.4755998998880386e-02</internalNodes>\n          <leafValues>\n            -2.4140599370002747e-01 5.4019999504089355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 657 4.0369000285863876e-02</internalNodes>\n          <leafValues>\n            5.7680001482367516e-03 5.6578099727630615e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 658 3.7735998630523682e-02</internalNodes>\n          <leafValues>\n            3.8180999457836151e-02 -7.9370397329330444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 659 6.0752999037504196e-02</internalNodes>\n          <leafValues>\n            7.6453000307083130e-02 1.4813209772109985e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 660 -1.9832000136375427e-02</internalNodes>\n          <leafValues>\n            -1.6971720457077026e+00 -2.7370000258088112e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 661 -1.6592699289321899e-01</internalNodes>\n          <leafValues>\n            6.2976002693176270e-01 3.1762998551130295e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 662 6.9014996290206909e-02</internalNodes>\n          <leafValues>\n            -3.3463200926780701e-01 3.0076700448989868e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 663 1.1358000338077545e-02</internalNodes>\n          <leafValues>\n            2.2741499543190002e-01 -3.8224700093269348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 664 1.7000000225380063e-03</internalNodes>\n          <leafValues>\n            1.9223800301551819e-01 -5.2735102176666260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 665 7.9769000411033630e-02</internalNodes>\n          <leafValues>\n            9.1491997241973877e-02 2.1049048900604248e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 666 -5.7144001126289368e-02</internalNodes>\n          <leafValues>\n            -1.7452130317687988e+00 -4.0910001844167709e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 667 7.3830001056194305e-03</internalNodes>\n          <leafValues>\n            -2.4214799702167511e-01 3.5577800869941711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 668 -1.8040999770164490e-02</internalNodes>\n          <leafValues>\n            1.1779999732971191e+00 -1.7676700651645660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 669 9.4503000378608704e-02</internalNodes>\n          <leafValues>\n            1.3936099410057068e-01 -1.2993700504302979e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 670 5.4210000671446323e-03</internalNodes>\n          <leafValues>\n            -5.4608601331710815e-01 1.3916400074958801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 671 7.0290002040565014e-03</internalNodes>\n          <leafValues>\n            -2.1597200632095337e-01 3.9258098602294922e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 672 3.4515999257564545e-02</internalNodes>\n          <leafValues>\n            6.3188999891281128e-02 -7.2108101844787598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 673 -5.1924999803304672e-02</internalNodes>\n          <leafValues>\n            6.8667602539062500e-01 6.3272997736930847e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 674 -6.9162003695964813e-02</internalNodes>\n          <leafValues>\n            1.7411810159683228e+00 -1.6619299352169037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 675 -5.5229999125003815e-03</internalNodes>\n          <leafValues>\n            3.0694699287414551e-01 -1.6662900149822235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 676 6.8599998950958252e-02</internalNodes>\n          <leafValues>\n            -2.1405400335788727e-01 7.3185002803802490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 677 -6.7038998007774353e-02</internalNodes>\n          <leafValues>\n            -7.9360598325729370e-01 2.0525799691677094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 678 -2.1005000919103622e-02</internalNodes>\n          <leafValues>\n            3.7344399094581604e-01 -2.9618600010871887e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 679 2.0278999581933022e-02</internalNodes>\n          <leafValues>\n            -1.5200000256299973e-02 4.0555301308631897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 680 -4.7107998281717300e-02</internalNodes>\n          <leafValues>\n            1.2116849422454834e+00 -1.7464299499988556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 681 1.8768499791622162e-01</internalNodes>\n          <leafValues>\n            -2.2909000515937805e-02 6.9645798206329346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 682 -4.3228998780250549e-02</internalNodes>\n          <leafValues>\n            -1.0602480173110962e+00 -5.5599998449906707e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 683 2.0004000514745712e-02</internalNodes>\n          <leafValues>\n            -3.2751001417636871e-02 5.3805100917816162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 684 8.0880001187324524e-03</internalNodes>\n          <leafValues>\n            3.7548001855611801e-02 -7.4768900871276855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 685 2.7101000770926476e-02</internalNodes>\n          <leafValues>\n            -8.1790000200271606e-02 3.3387100696563721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 686 -9.1746002435684204e-02</internalNodes>\n          <leafValues>\n            -1.9213509559631348e+00 -3.8952998816967010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 687 -1.2454999610781670e-02</internalNodes>\n          <leafValues>\n            4.8360601067543030e-01 1.8168000504374504e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 688 1.4649000018835068e-02</internalNodes>\n          <leafValues>\n            -1.9906699657440186e-01 7.2815400362014771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 689 2.9101999476552010e-02</internalNodes>\n          <leafValues>\n            1.9871099293231964e-01 -4.9216800928115845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 690 8.7799998000264168e-03</internalNodes>\n          <leafValues>\n            -1.9499599933624268e-01 7.7317398786544800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 691 -5.4740000516176224e-02</internalNodes>\n          <leafValues>\n            1.8087190389633179e+00 6.8323001265525818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 692 -1.4798000454902649e-02</internalNodes>\n          <leafValues>\n            7.8064900636672974e-01 -1.8709599971771240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 693 2.5012999773025513e-02</internalNodes>\n          <leafValues>\n            1.5285299718379974e-01 -1.6021020412445068e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 694 4.6548001468181610e-02</internalNodes>\n          <leafValues>\n            -1.6738200187683105e-01 1.1902060508728027e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 695 1.7624000087380409e-02</internalNodes>\n          <leafValues>\n            -1.0285499691963196e-01 3.9175900816917419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 696 1.6319599747657776e-01</internalNodes>\n          <leafValues>\n            -3.5624001175165176e-02 -1.6098170280456543e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 697 1.3137999922037125e-02</internalNodes>\n          <leafValues>\n            -5.6359000504016876e-02 5.4158902168273926e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 698 -1.5665000304579735e-02</internalNodes>\n          <leafValues>\n            2.8063100576400757e-01 -3.1708601117134094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 699 8.0554001033306122e-02</internalNodes>\n          <leafValues>\n            1.2640400230884552e-01 -1.0297529697418213e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 700 3.5363998264074326e-02</internalNodes>\n          <leafValues>\n            2.0752999931573868e-02 -7.9105597734451294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 701 3.2986998558044434e-02</internalNodes>\n          <leafValues>\n            1.9057099521160126e-01 -8.3839899301528931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 702 1.2195000424981117e-02</internalNodes>\n          <leafValues>\n            7.3729000985622406e-02 -6.2780702114105225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 703 4.3065998703241348e-02</internalNodes>\n          <leafValues>\n            4.7384999692440033e-02 1.5712939500808716e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 704 3.0326999723911285e-02</internalNodes>\n          <leafValues>\n            -2.7314600348472595e-01 3.8572001457214355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 705 3.5493001341819763e-02</internalNodes>\n          <leafValues>\n            5.4593998938798904e-02 5.2583402395248413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 706 -1.4596999622881413e-02</internalNodes>\n          <leafValues>\n            3.8152599334716797e-01 -2.8332400321960449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 707 1.2606999836862087e-02</internalNodes>\n          <leafValues>\n            1.5455099940299988e-01 -3.0501499772071838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 708 1.0172000154852867e-02</internalNodes>\n          <leafValues>\n            2.3637000471353531e-02 -8.7217897176742554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 709 2.8843000531196594e-02</internalNodes>\n          <leafValues>\n            1.6090999543666840e-01 -2.0277599990367889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 710 5.5100000463426113e-04</internalNodes>\n          <leafValues>\n            -6.1545401811599731e-01 8.0935999751091003e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>127</maxWeakCount>\n      <stageThreshold>-3.5645289421081543e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 711 4.8344001173973083e-02</internalNodes>\n          <leafValues>\n            -8.4904599189758301e-01 5.6974399089813232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 712 3.2460000365972519e-02</internalNodes>\n          <leafValues>\n            -8.1417298316955566e-01 4.4781699776649475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 713 3.3339999616146088e-02</internalNodes>\n          <leafValues>\n            -3.6423799395561218e-01 6.7937397956848145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 714 6.4019998535513878e-03</internalNodes>\n          <leafValues>\n            -1.1885459423065186e+00 1.9238699972629547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 715 -5.6889997795224190e-03</internalNodes>\n          <leafValues>\n            3.3085298538208008e-01 -7.1334099769592285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 716 1.2698000296950340e-02</internalNodes>\n          <leafValues>\n            -5.0990802049636841e-01 1.1376299709081650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 717 6.0549997724592686e-03</internalNodes>\n          <leafValues>\n            -1.0470550060272217e+00 2.0222599804401398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 718 2.6420000940561295e-03</internalNodes>\n          <leafValues>\n            -5.0559401512145996e-01 3.6441200971603394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 719 -1.6925999894738197e-02</internalNodes>\n          <leafValues>\n            -9.9541902542114258e-01 1.2602199614048004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 720 2.8235999867320061e-02</internalNodes>\n          <leafValues>\n            -9.4137996435165405e-02 5.7780402898788452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 721 1.0428999550640583e-02</internalNodes>\n          <leafValues>\n            2.3272900283336639e-01 -5.2569699287414551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 722 9.8860003054141998e-03</internalNodes>\n          <leafValues>\n            -1.0316299647092819e-01 4.7657600045204163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 723 2.6015000417828560e-02</internalNodes>\n          <leafValues>\n            -1.0920000495389104e-03 -1.5581729412078857e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 724 -2.5537999346852303e-02</internalNodes>\n          <leafValues>\n            -6.5451401472091675e-01 1.8843199312686920e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 725 -3.5310001112520695e-03</internalNodes>\n          <leafValues>\n            2.8140598535537720e-01 -4.4575300812721252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 726 9.2449998483061790e-03</internalNodes>\n          <leafValues>\n            1.5612000226974487e-01 -2.1370999515056610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 727 2.1030999720096588e-02</internalNodes>\n          <leafValues>\n            -2.9170298576354980e-01 5.2234101295471191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 728 -5.1063001155853271e-02</internalNodes>\n          <leafValues>\n            1.3661290407180786e+00 3.0465999618172646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 729 -6.2330000102519989e-02</internalNodes>\n          <leafValues>\n            1.2207020521163940e+00 -2.2434400022029877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 730 -3.2963000237941742e-02</internalNodes>\n          <leafValues>\n            -8.2016801834106445e-01 1.4531899988651276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 731 -3.7418000400066376e-02</internalNodes>\n          <leafValues>\n            -1.2218099832534790e+00 1.9448999315500259e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 732 1.2402799725532532e-01</internalNodes>\n          <leafValues>\n            1.2082300335168839e-01 -9.8729300498962402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 733 -8.9229997247457504e-03</internalNodes>\n          <leafValues>\n            -1.1688489913940430e+00 2.1105000749230385e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 734 -5.9879999607801437e-02</internalNodes>\n          <leafValues>\n            -1.0689330101013184e+00 1.9860200583934784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 735 6.2620001845061779e-03</internalNodes>\n          <leafValues>\n            -3.6229598522186279e-01 3.8000801205635071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 736 -1.7673000693321228e-02</internalNodes>\n          <leafValues>\n            4.9094098806381226e-01 -1.4606699347496033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 737 1.7579000443220139e-02</internalNodes>\n          <leafValues>\n            5.8728098869323730e-01 -2.7774399518966675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 738 5.1560001447796822e-03</internalNodes>\n          <leafValues>\n            -7.5194999575614929e-02 6.0193097591400146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 739 -1.0599999688565731e-02</internalNodes>\n          <leafValues>\n            2.7637401223182678e-01 -3.7794300913810730e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 740 2.0884099602699280e-01</internalNodes>\n          <leafValues>\n            -5.3599998354911804e-03 1.0317809581756592e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 741 -2.6412999257445335e-02</internalNodes>\n          <leafValues>\n            8.2336401939392090e-01 -2.2480599582195282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 742 5.8892000466585159e-02</internalNodes>\n          <leafValues>\n            1.3098299503326416e-01 -1.1853699684143066e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 743 -1.1579000391066074e-02</internalNodes>\n          <leafValues>\n            -9.0667802095413208e-01 4.4126998633146286e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 744 4.5988000929355621e-02</internalNodes>\n          <leafValues>\n            1.0143999941647053e-02 1.0740900039672852e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 745 -2.2838000208139420e-02</internalNodes>\n          <leafValues>\n            1.7791990041732788e+00 -1.7315499484539032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 746 -8.1709995865821838e-03</internalNodes>\n          <leafValues>\n            5.7386302947998047e-01 -7.4106000363826752e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 747 3.5359999164938927e-03</internalNodes>\n          <leafValues>\n            -3.2072898745536804e-01 4.0182501077651978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 748 4.9444999545812607e-02</internalNodes>\n          <leafValues>\n            1.9288000464439392e-01 -1.2166700363159180e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 749 3.5139999818056822e-03</internalNodes>\n          <leafValues>\n            6.9568000733852386e-02 -7.1323698759078979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 750 -3.0996000394225121e-02</internalNodes>\n          <leafValues>\n            -3.8862198591232300e-01 1.8098799884319305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 751 8.6452998220920563e-02</internalNodes>\n          <leafValues>\n            -2.5792999193072319e-02 -1.5453219413757324e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 752 -1.3652600347995758e-01</internalNodes>\n          <leafValues>\n            -1.9199420213699341e+00 1.6613300144672394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 753 -5.7689999230206013e-03</internalNodes>\n          <leafValues>\n            -1.2822589874267578e+00 -1.5907999128103256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 754 -1.7899999395012856e-02</internalNodes>\n          <leafValues>\n            -4.0409898757934570e-01 2.3591600358486176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 755 -1.9969999790191650e-02</internalNodes>\n          <leafValues>\n            -7.2891902923583984e-01 5.6235000491142273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 756 -5.7493001222610474e-02</internalNodes>\n          <leafValues>\n            5.7830798625946045e-01 -1.5796000137925148e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 757 -8.3056002855300903e-02</internalNodes>\n          <leafValues>\n            9.1511601209640503e-01 -2.1121400594711304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 758 -5.3771000355482101e-02</internalNodes>\n          <leafValues>\n            -5.1931297779083252e-01 1.8576000630855560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 759 -8.3670001477003098e-03</internalNodes>\n          <leafValues>\n            2.4109700322151184e-01 -3.9648601412773132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 760 5.5406998842954636e-02</internalNodes>\n          <leafValues>\n            1.6771200299263000e-01 -2.5664970874786377e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 761 -6.7180998623371124e-02</internalNodes>\n          <leafValues>\n            -1.3658570051193237e+00 -1.4232000336050987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 762 -2.3900000378489494e-02</internalNodes>\n          <leafValues>\n            -1.7084569931030273e+00 1.6507799923419952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 763 5.5949999950826168e-03</internalNodes>\n          <leafValues>\n            -3.1373998522758484e-01 3.2837900519371033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 764 2.1294999867677689e-02</internalNodes>\n          <leafValues>\n            1.4953400194644928e-01 -4.8579800128936768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 765 -2.4613000452518463e-02</internalNodes>\n          <leafValues>\n            7.4346399307250977e-01 -2.2305199503898621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 766 -1.9626000896096230e-02</internalNodes>\n          <leafValues>\n            -4.0918299555778503e-01 1.8893200159072876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 767 -5.3266000002622604e-02</internalNodes>\n          <leafValues>\n            8.1381601095199585e-01 -2.0853699743747711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 768 7.1290000341832638e-03</internalNodes>\n          <leafValues>\n            3.2996100187301636e-01 -5.9937399625778198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 769 -2.2486999630928040e-02</internalNodes>\n          <leafValues>\n            -1.2551610469818115e+00 -2.0413000136613846e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 770 -8.2310996949672699e-02</internalNodes>\n          <leafValues>\n            1.3821430206298828e+00 5.9308998286724091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 771 1.3097000122070312e-01</internalNodes>\n          <leafValues>\n            -3.5843998193740845e-02 -1.5396369695663452e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 772 1.4293000102043152e-02</internalNodes>\n          <leafValues>\n            -1.8475200235843658e-01 3.7455001473426819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 773 6.3479999080300331e-03</internalNodes>\n          <leafValues>\n            -4.4901099801063538e-01 1.3876999914646149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 774 -4.6055000275373459e-02</internalNodes>\n          <leafValues>\n            6.7832601070404053e-01 -1.7071999609470367e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 775 5.7693999260663986e-02</internalNodes>\n          <leafValues>\n            -1.1955999769270420e-02 -1.2261159420013428e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 776 -6.0609998181462288e-03</internalNodes>\n          <leafValues>\n            3.3958598971366882e-01 6.2800000887364149e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 777 -5.2163001149892807e-02</internalNodes>\n          <leafValues>\n            -1.0621069669723511e+00 -1.3779999688267708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 778 4.6572998166084290e-02</internalNodes>\n          <leafValues>\n            1.4538800716400146e-01 -1.2384550571441650e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 779 7.5309998355805874e-03</internalNodes>\n          <leafValues>\n            -2.4467700719833374e-01 5.1377099752426147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 780 2.1615000441670418e-02</internalNodes>\n          <leafValues>\n            1.3072599470615387e-01 -7.0996797084808350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 781 -1.7864000052213669e-02</internalNodes>\n          <leafValues>\n            -1.0474660396575928e+00 4.9599999329075217e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 782 -3.7195000797510147e-02</internalNodes>\n          <leafValues>\n            -1.5126730203628540e+00 1.4801399409770966e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 783 -3.1100001069717109e-04</internalNodes>\n          <leafValues>\n            1.3971500098705292e-01 -4.6867498755455017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 784 2.5042999535799026e-02</internalNodes>\n          <leafValues>\n            2.8632000088691711e-01 -4.1794699430465698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 785 9.3449996784329414e-03</internalNodes>\n          <leafValues>\n            -2.7336201071739197e-01 4.3444699048995972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 786 3.2363999634981155e-02</internalNodes>\n          <leafValues>\n            1.8438899517059326e-01 -9.5019298791885376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 787 -6.2299999408423901e-03</internalNodes>\n          <leafValues>\n            3.2581999897956848e-01 -3.0815601348876953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 788 5.1488999277353287e-02</internalNodes>\n          <leafValues>\n            1.1416000127792358e-01 -1.9795479774475098e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 789 -2.6449000462889671e-02</internalNodes>\n          <leafValues>\n            -1.1067299842834473e+00 -8.5519999265670776e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 790 -1.5420000068843365e-02</internalNodes>\n          <leafValues>\n            8.0138701200485229e-01 -3.2035000622272491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 791 1.9456999376416206e-02</internalNodes>\n          <leafValues>\n            -2.6449498534202576e-01 3.8753899931907654e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 792 3.3620998263359070e-02</internalNodes>\n          <leafValues>\n            1.6052000224590302e-02 5.8840900659561157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 793 2.8906000778079033e-02</internalNodes>\n          <leafValues>\n            1.5216000378131866e-02 -9.4723600149154663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 794 2.0300000323913991e-04</internalNodes>\n          <leafValues>\n            -3.0766001343727112e-01 2.1235899627208710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 795 -4.9141999334096909e-02</internalNodes>\n          <leafValues>\n            -1.6058609485626221e+00 -3.1094999983906746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 796 7.6425999402999878e-02</internalNodes>\n          <leafValues>\n            7.4758999049663544e-02 1.1639410257339478e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 797 2.3897999897599220e-02</internalNodes>\n          <leafValues>\n            -6.4320000819861889e-03 -1.1150749921798706e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 798 3.8970001041889191e-03</internalNodes>\n          <leafValues>\n            -2.4105699360370636e-01 2.0858900249004364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 799 -8.9445002377033234e-02</internalNodes>\n          <leafValues>\n            1.9157789945602417e+00 -1.5721100568771362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 800 -1.5008999966084957e-02</internalNodes>\n          <leafValues>\n            -2.5174099206924438e-01 1.8179899454116821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 801 -1.1145999655127525e-02</internalNodes>\n          <leafValues>\n            -6.9349497556686401e-01 4.4927999377250671e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 802 9.4578996300697327e-02</internalNodes>\n          <leafValues>\n            1.8102100491523743e-01 -7.4978601932525635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 803 5.5038899183273315e-01</internalNodes>\n          <leafValues>\n            -3.0974000692367554e-02 -1.6746139526367188e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 804 4.1381001472473145e-02</internalNodes>\n          <leafValues>\n            6.3910000026226044e-02 7.6561200618743896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 805 2.4771999567747116e-02</internalNodes>\n          <leafValues>\n            1.1380000039935112e-02 -8.8559401035308838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 806 5.0999000668525696e-02</internalNodes>\n          <leafValues>\n            1.4890299737453461e-01 -2.4634211063385010e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 807 -1.6893999651074409e-02</internalNodes>\n          <leafValues>\n            3.8870999217033386e-01 -2.9880300164222717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 808 -1.2162300199270248e-01</internalNodes>\n          <leafValues>\n            -1.5542800426483154e+00 1.6300800442695618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 809 -3.6049999762326479e-03</internalNodes>\n          <leafValues>\n            2.1842800080776215e-01 -3.7312099337577820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 810 1.1575400084257126e-01</internalNodes>\n          <leafValues>\n            -4.7061000019311905e-02 5.9403699636459351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 811 3.6903999745845795e-02</internalNodes>\n          <leafValues>\n            -2.5508600473403931e-01 5.5397301912307739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 812 1.1483999900519848e-02</internalNodes>\n          <leafValues>\n            -1.8129499256610870e-01 4.0682798624038696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 813 -2.0233999937772751e-02</internalNodes>\n          <leafValues>\n            5.4311197996139526e-01 -2.3822399973869324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 814 -2.8765000402927399e-02</internalNodes>\n          <leafValues>\n            -6.9172298908233643e-01 1.5943300724029541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 815 -5.8320001699030399e-03</internalNodes>\n          <leafValues>\n            2.9447799921035767e-01 -3.4005999565124512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 816 -5.5468998849391937e-02</internalNodes>\n          <leafValues>\n            9.2200797796249390e-01 9.4093002378940582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 817 -1.4801000244915485e-02</internalNodes>\n          <leafValues>\n            -7.9539698362350464e-01 3.1521998345851898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 818 -7.0940000005066395e-03</internalNodes>\n          <leafValues>\n            3.3096000552177429e-01 -5.0886999815702438e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 819 -4.5124001801013947e-02</internalNodes>\n          <leafValues>\n            -1.3719749450683594e+00 -2.1408999338746071e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 820 6.4377002418041229e-02</internalNodes>\n          <leafValues>\n            6.3901998102664948e-02 9.1478300094604492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 821 -1.4727000147104263e-02</internalNodes>\n          <leafValues>\n            3.6050599813461304e-01 -2.8614500164985657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 822 4.5007001608610153e-02</internalNodes>\n          <leafValues>\n            -1.5619699656963348e-01 5.3160297870635986e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 823 -1.1330000124871731e-03</internalNodes>\n          <leafValues>\n            1.3422900438308716e-01 -4.4358900189399719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 824 4.9451000988483429e-02</internalNodes>\n          <leafValues>\n            1.0571800172328949e-01 -2.5589139461517334e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 825 2.9102999716997147e-02</internalNodes>\n          <leafValues>\n            -1.0088000446557999e-02 -1.1073939800262451e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 826 3.4786000847816467e-02</internalNodes>\n          <leafValues>\n            -2.7719999197870493e-03 5.6700998544692993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 827 -6.1309998854994774e-03</internalNodes>\n          <leafValues>\n            -4.6889400482177734e-01 1.2636399269104004e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 828 1.5525000169873238e-02</internalNodes>\n          <leafValues>\n            -8.4279999136924744e-03 8.7469202280044556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 829 2.9249999206513166e-03</internalNodes>\n          <leafValues>\n            -3.4434300661087036e-01 2.0851600170135498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 830 -5.3571000695228577e-02</internalNodes>\n          <leafValues>\n            1.4982949495315552e+00 5.7328000664710999e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 831 -1.9217999652028084e-02</internalNodes>\n          <leafValues>\n            -9.9234098196029663e-01 -9.3919998034834862e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 832 -5.5282998830080032e-02</internalNodes>\n          <leafValues>\n            -5.7682299613952637e-01 1.6860599815845490e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 833 5.6336000561714172e-02</internalNodes>\n          <leafValues>\n            -3.3775001764297485e-02 -1.3889650106430054e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 834 -2.3824000731110573e-02</internalNodes>\n          <leafValues>\n            4.0182098746299744e-01 1.8360000103712082e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 835 1.7810000572353601e-03</internalNodes>\n          <leafValues>\n            1.8145999312400818e-01 -4.1743400692939758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 836 -3.7689000368118286e-02</internalNodes>\n          <leafValues>\n            5.4683101177215576e-01 1.8219999969005585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 837 -2.4144999682903290e-02</internalNodes>\n          <leafValues>\n            6.8352097272872925e-01 -1.9650200009346008e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>135</maxWeakCount>\n      <stageThreshold>-3.7025990486145020e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 838 2.7444999665021896e-02</internalNodes>\n          <leafValues>\n            -8.9984202384948730e-01 5.1876497268676758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 839 1.1554100364446640e-01</internalNodes>\n          <leafValues>\n            -5.6524401903152466e-01 7.0551300048828125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 840 -2.2297000512480736e-02</internalNodes>\n          <leafValues>\n            3.6079999804496765e-01 -6.6864597797393799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 841 1.3325000181794167e-02</internalNodes>\n          <leafValues>\n            -5.5573397874832153e-01 3.5789999365806580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 842 -3.8060001097619534e-03</internalNodes>\n          <leafValues>\n            -1.0713000297546387e+00 1.8850000202655792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 843 -2.6819999329745770e-03</internalNodes>\n          <leafValues>\n            -7.1584302186965942e-01 2.6344498991966248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 844 3.3819999080151320e-03</internalNodes>\n          <leafValues>\n            -4.6930798888206482e-01 2.6658400893211365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 845 3.7643000483512878e-02</internalNodes>\n          <leafValues>\n            2.1098700165748596e-01 -1.0804339647293091e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 846 -1.3861999846994877e-02</internalNodes>\n          <leafValues>\n            6.6912001371383667e-01 -2.7942800521850586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 847 -2.7350001037120819e-03</internalNodes>\n          <leafValues>\n            -9.5332300662994385e-01 2.4051299691200256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 848 -3.8336999714374542e-02</internalNodes>\n          <leafValues>\n            8.1432801485061646e-01 -2.4919399619102478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 849 -3.4697998315095901e-02</internalNodes>\n          <leafValues>\n            1.2330100536346436e+00 6.8600000813603401e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 850 2.3360999301075935e-02</internalNodes>\n          <leafValues>\n            -3.0794700980186462e-01 7.0714497566223145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 851 3.5057999193668365e-02</internalNodes>\n          <leafValues>\n            2.1205900609493256e-01 -1.4399830102920532e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 852 -1.3256999664008617e-02</internalNodes>\n          <leafValues>\n            -9.0260702371597290e-01 4.8610001802444458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 853 1.2740000151097775e-02</internalNodes>\n          <leafValues>\n            2.2655199468135834e-01 -4.4643801450729370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 854 3.6400000099092722e-03</internalNodes>\n          <leafValues>\n            -3.9817899465560913e-01 3.4665399789810181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 855 1.0064700245857239e-01</internalNodes>\n          <leafValues>\n            1.8383599817752838e-01 -1.3410769701004028e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 856 0.</internalNodes>\n          <leafValues>\n            1.5536400675773621e-01 -5.1582497358322144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 857 1.1708999983966351e-02</internalNodes>\n          <leafValues>\n            2.1651400625705719e-01 -7.2705197334289551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 858 -3.5964999347925186e-02</internalNodes>\n          <leafValues>\n            -1.4789500236511230e+00 -2.4317000061273575e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 859 -2.1236000582575798e-02</internalNodes>\n          <leafValues>\n            -1.6844099760055542e-01 1.9526599347591400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 860 1.4874000102281570e-02</internalNodes>\n          <leafValues>\n            3.7335999310016632e-02 -8.7557297945022583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 861 -5.1409997977316380e-03</internalNodes>\n          <leafValues>\n            3.3466500043869019e-01 -2.4109700322151184e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 862 2.3450000211596489e-02</internalNodes>\n          <leafValues>\n            5.5320002138614655e-03 -1.2509720325469971e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 863 -2.5062000378966331e-02</internalNodes>\n          <leafValues>\n            4.5212399959564209e-01 -8.4469996392726898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 864 -7.7400001464411616e-04</internalNodes>\n          <leafValues>\n            1.5249900519847870e-01 -4.8486500978469849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 865 -4.0483999997377396e-02</internalNodes>\n          <leafValues>\n            -1.3024920225143433e+00 1.7983500659465790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 866 2.8170999139547348e-02</internalNodes>\n          <leafValues>\n            -2.4410900473594666e-01 6.2271100282669067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 867 4.5692998915910721e-02</internalNodes>\n          <leafValues>\n            2.8122000396251678e-02 9.2394399642944336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 868 3.9707001298666000e-02</internalNodes>\n          <leafValues>\n            -2.2332799434661865e-01 7.7674001455307007e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 869 5.0517000257968903e-02</internalNodes>\n          <leafValues>\n            2.0319999754428864e-01 -1.0895930528640747e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 870 -1.7266999930143356e-02</internalNodes>\n          <leafValues>\n            6.8598401546478271e-01 -2.3304499685764313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 871 8.0186001956462860e-02</internalNodes>\n          <leafValues>\n            -1.0292000137269497e-02 6.1881101131439209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 872 9.7676001489162445e-02</internalNodes>\n          <leafValues>\n            -2.0070299506187439e-01 1.0088349580764771e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 873 -1.5572000294923782e-02</internalNodes>\n          <leafValues>\n            4.7615298628807068e-01 4.5623999089002609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 874 -1.5305000357329845e-02</internalNodes>\n          <leafValues>\n            -1.1077369451522827e+00 4.5239999890327454e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 875 -1.6485000029206276e-02</internalNodes>\n          <leafValues>\n            1.0152939558029175e+00 1.6327999532222748e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 876 -2.6141999289393425e-02</internalNodes>\n          <leafValues>\n            4.1723299026489258e-01 -2.8645500540733337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 877 8.8679995387792587e-03</internalNodes>\n          <leafValues>\n            2.1404999494552612e-01 -1.6772800683975220e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 878 -2.6886999607086182e-02</internalNodes>\n          <leafValues>\n            -1.1564220190048218e+00 -1.0324000380933285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 879 7.7789998613297939e-03</internalNodes>\n          <leafValues>\n            3.5359498858451843e-01 -2.9611301422119141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 880 -1.5974000096321106e-02</internalNodes>\n          <leafValues>\n            -1.5374109745025635e+00 -2.9958000406622887e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 881 2.0866999402642250e-02</internalNodes>\n          <leafValues>\n            2.0244100689888000e-01 -7.1270197629928589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 882 8.5482001304626465e-02</internalNodes>\n          <leafValues>\n            -2.5932999327778816e-02 -1.5156569480895996e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 883 2.3872999474406242e-02</internalNodes>\n          <leafValues>\n            1.6803400218486786e-01 -3.8806200027465820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 884 -3.9105001837015152e-02</internalNodes>\n          <leafValues>\n            -1.1958349943161011e+00 -2.0361000671982765e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 885 -7.7946998178958893e-02</internalNodes>\n          <leafValues>\n            -1.0898950099945068e+00 1.4530299603939056e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 886 -1.6876000910997391e-02</internalNodes>\n          <leafValues>\n            2.8049701452255249e-01 -4.1336300969123840e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 887 1.1875600367784500e-01</internalNodes>\n          <leafValues>\n            -4.3490998446941376e-02 4.1263699531555176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 888 1.5624199807643890e-01</internalNodes>\n          <leafValues>\n            -2.6429599523544312e-01 5.5127799510955811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 889 -4.5908000320196152e-02</internalNodes>\n          <leafValues>\n            6.0189199447631836e-01 1.8921000882983208e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 890 -1.0309999808669090e-02</internalNodes>\n          <leafValues>\n            3.8152998685836792e-01 -2.9507899284362793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 891 9.5769003033638000e-02</internalNodes>\n          <leafValues>\n            1.3246500492095947e-01 -4.6266800165176392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 892 1.3686999678611755e-02</internalNodes>\n          <leafValues>\n            1.1738699674606323e-01 -5.1664102077484131e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 893 2.3990001063793898e-03</internalNodes>\n          <leafValues>\n            -3.4007599949836731e-01 2.0953500270843506e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 894 3.3264998346567154e-02</internalNodes>\n          <leafValues>\n            -1.7052799463272095e-01 1.4366799592971802e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 895 -3.3206000924110413e-02</internalNodes>\n          <leafValues>\n            6.1295700073242188e-01 -4.1549999266862869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 896 2.7979998849332333e-03</internalNodes>\n          <leafValues>\n            -4.8554301261901855e-01 1.3372699916362762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 897 -6.5792001783847809e-02</internalNodes>\n          <leafValues>\n            -4.0257668495178223e+00 1.0876700282096863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 898 2.1430000197142363e-03</internalNodes>\n          <leafValues>\n            -3.9179998636245728e-01 2.2427099943161011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 899 2.2363999858498573e-02</internalNodes>\n          <leafValues>\n            -8.6429998278617859e-02 3.7785199284553528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 900 -5.7410001754760742e-02</internalNodes>\n          <leafValues>\n            1.1454069614410400e+00 -1.9736599922180176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 901 6.6550001502037048e-03</internalNodes>\n          <leafValues>\n            -2.1105000749230385e-02 5.8453398942947388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 902 1.2326999567449093e-02</internalNodes>\n          <leafValues>\n            3.7817001342773438e-02 -6.6987001895904541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 903 -8.1869997084140778e-03</internalNodes>\n          <leafValues>\n            5.6366002559661865e-01 -7.6877996325492859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 904 3.6681000143289566e-02</internalNodes>\n          <leafValues>\n            -1.7343300580978394e-01 1.1670149564743042e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 905 -4.0220400691032410e-01</internalNodes>\n          <leafValues>\n            1.2640819549560547e+00 4.3398998677730560e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 906 -2.2126000374555588e-02</internalNodes>\n          <leafValues>\n            6.6978102922439575e-01 -2.1605299413204193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 907 -1.3156999833881855e-02</internalNodes>\n          <leafValues>\n            -4.1198599338531494e-01 2.0215000212192535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 908 -1.2860000133514404e-02</internalNodes>\n          <leafValues>\n            -9.1582697629928589e-01 3.9232999086380005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 909 2.1627999842166901e-02</internalNodes>\n          <leafValues>\n            3.8719999138265848e-03 3.5668200254440308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 910 1.1896000243723392e-02</internalNodes>\n          <leafValues>\n            -3.7303900718688965e-01 1.9235099852085114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 911 -1.9548999145627022e-02</internalNodes>\n          <leafValues>\n            -4.2374899983406067e-01 2.4429599940776825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 912 6.4444996416568756e-02</internalNodes>\n          <leafValues>\n            -1.6558900475502014e-01 1.2697030305862427e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 913 1.0898499935865402e-01</internalNodes>\n          <leafValues>\n            1.4894300699234009e-01 -2.1534640789031982e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 914 -3.4077998250722885e-02</internalNodes>\n          <leafValues>\n            1.3779460191726685e+00 -1.6198499500751495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 915 -3.7489999085664749e-03</internalNodes>\n          <leafValues>\n            -3.3828601241111755e-01 2.1152900159358978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 916 -1.0971999727189541e-02</internalNodes>\n          <leafValues>\n            7.6517897844314575e-01 -1.9692599773406982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 917 -1.1485000140964985e-02</internalNodes>\n          <leafValues>\n            -6.9271200895309448e-01 2.1657100319862366e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 918 2.5984000414609909e-02</internalNodes>\n          <leafValues>\n            -1.1983999982476234e-02 -9.9697297811508179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 919 4.2159999720752239e-03</internalNodes>\n          <leafValues>\n            -1.0205700248479843e-01 4.8884400725364685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 920 -4.7697000205516815e-02</internalNodes>\n          <leafValues>\n            1.0666010379791260e+00 -1.7576299607753754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 921 4.0300001273863018e-04</internalNodes>\n          <leafValues>\n            1.8524800240993500e-01 -7.4790000915527344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 922 1.1539600044488907e-01</internalNodes>\n          <leafValues>\n            -2.2019700706005096e-01 5.4509997367858887e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 923 1.6021000221371651e-02</internalNodes>\n          <leafValues>\n            2.5487500429153442e-01 -5.0740098953247070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 924 5.6632000952959061e-02</internalNodes>\n          <leafValues>\n            -1.1256000027060509e-02 -9.5968097448348999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 925 -1.0726000182330608e-02</internalNodes>\n          <leafValues>\n            -2.8544700145721436e-01 1.6994799673557281e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 926 1.2420000135898590e-01</internalNodes>\n          <leafValues>\n            -3.6139998584985733e-02 -1.3132710456848145e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 927 -5.3799999877810478e-03</internalNodes>\n          <leafValues>\n            3.3092701435089111e-01 1.3307999819517136e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 928 1.1908000335097313e-02</internalNodes>\n          <leafValues>\n            -3.4830299019813538e-01 2.4041900038719177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 929 -4.3007999658584595e-02</internalNodes>\n          <leafValues>\n            -1.4390469789505005e+00 1.5599599480628967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 930 -3.3149998635053635e-02</internalNodes>\n          <leafValues>\n            -1.1805850267410278e+00 -1.2347999960184097e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 931 -2.1341999992728233e-02</internalNodes>\n          <leafValues>\n            2.2119441032409668e+00 6.2737002968788147e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 932 -1.2218999676406384e-02</internalNodes>\n          <leafValues>\n            -1.8709750175476074e+00 -4.5499999076128006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 933 -1.6860999166965485e-02</internalNodes>\n          <leafValues>\n            -7.6912701129913330e-01 1.5330000221729279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 934 -2.4999999441206455e-03</internalNodes>\n          <leafValues>\n            -6.2987399101257324e-01 5.1600001752376556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 935 -4.5037999749183655e-02</internalNodes>\n          <leafValues>\n            8.5428899526596069e-01 6.2600001692771912e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 936 3.9057999849319458e-02</internalNodes>\n          <leafValues>\n            -3.2458998262882233e-02 -1.3325669765472412e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 937 6.6720000468194485e-03</internalNodes>\n          <leafValues>\n            -1.9423599541187286e-01 3.7328699231147766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 938 -1.6361000016331673e-02</internalNodes>\n          <leafValues>\n            2.0605869293212891e+00 -1.5042699873447418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 939 6.1719999648630619e-03</internalNodes>\n          <leafValues>\n            -1.1610999703407288e-01 2.5455400347709656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 940 4.5722000300884247e-02</internalNodes>\n          <leafValues>\n            -1.6340000554919243e-02 -1.0449140071868896e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 941 4.1209999471902847e-03</internalNodes>\n          <leafValues>\n            -4.1997998952865601e-02 3.9680999517440796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 942 -1.7800000205170363e-04</internalNodes>\n          <leafValues>\n            -6.6422599554061890e-01 3.3443000167608261e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 943 7.1109998971223831e-03</internalNodes>\n          <leafValues>\n            -5.8231998234987259e-02 3.7857300043106079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 944 -4.9864001572132111e-02</internalNodes>\n          <leafValues>\n            6.1019402742385864e-01 -2.1005700528621674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 945 -2.5011999532580376e-02</internalNodes>\n          <leafValues>\n            -5.7100099325180054e-01 1.7848399281501770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 946 3.0939999967813492e-02</internalNodes>\n          <leafValues>\n            5.6363001465797424e-02 -6.4731001853942871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 947 4.6271000057458878e-02</internalNodes>\n          <leafValues>\n            1.7482399940490723e-01 -9.8909401893615723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 948 -3.1870000530034304e-03</internalNodes>\n          <leafValues>\n            -6.6804802417755127e-01 3.2267000526189804e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 949 -2.4351999163627625e-02</internalNodes>\n          <leafValues>\n            2.9444900155067444e-01 -1.3599999947473407e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 950 1.1974000371992588e-02</internalNodes>\n          <leafValues>\n            -2.8345099091529846e-01 4.7171199321746826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 951 1.3070000335574150e-02</internalNodes>\n          <leafValues>\n            -1.0834600031375885e-01 5.7193297147750854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 952 5.9163000434637070e-02</internalNodes>\n          <leafValues>\n            -5.0939001142978668e-02 -1.9059720039367676e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 953 -4.1094999760389328e-02</internalNodes>\n          <leafValues>\n            4.5104598999023438e-01 -9.7599998116493225e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 954 -8.3989001810550690e-02</internalNodes>\n          <leafValues>\n            -2.0349199771881104e+00 -5.1019001752138138e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 955 4.4619001448154449e-02</internalNodes>\n          <leafValues>\n            1.7041100561618805e-01 -1.2278720140457153e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 956 2.4419000372290611e-02</internalNodes>\n          <leafValues>\n            -2.1796999499201775e-02 -1.0822949409484863e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 957 -4.3870001100003719e-03</internalNodes>\n          <leafValues>\n            3.0466699600219727e-01 -3.7066599726676941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 958 2.4607999250292778e-02</internalNodes>\n          <leafValues>\n            -3.1169500946998596e-01 2.3657299578189850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 959 -8.5182003676891327e-02</internalNodes>\n          <leafValues>\n            -1.7982350587844849e+00 1.5254299342632294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 960 2.1844999864697456e-02</internalNodes>\n          <leafValues>\n            -5.1888000220060349e-02 -1.9017189741134644e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 961 -1.6829000785946846e-02</internalNodes>\n          <leafValues>\n            2.1025900542736053e-01 2.1656999364495277e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 962 3.2547999173402786e-02</internalNodes>\n          <leafValues>\n            -2.0292599499225616e-01 6.0944002866744995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 963 2.4709999561309814e-03</internalNodes>\n          <leafValues>\n            -9.5371198654174805e-01 1.8568399548530579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 964 5.5415999144315720e-02</internalNodes>\n          <leafValues>\n            -1.4405299723148346e-01 2.1506340503692627e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 965 -1.0635499656200409e-01</internalNodes>\n          <leafValues>\n            -1.0911970138549805e+00 1.3228000700473785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 966 -7.9889995977282524e-03</internalNodes>\n          <leafValues>\n            1.0253400355577469e-01 -5.1744902133941650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 967 7.5567997992038727e-02</internalNodes>\n          <leafValues>\n            5.8965001255273819e-02 1.2354209423065186e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 968 -9.2805996537208557e-02</internalNodes>\n          <leafValues>\n            -1.3431650400161743e+00 -3.4462999552488327e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 969 4.9431998282670975e-02</internalNodes>\n          <leafValues>\n            4.9601998180150986e-02 1.6054730415344238e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 970 -1.1772999539971352e-02</internalNodes>\n          <leafValues>\n            -1.0261050462722778e+00 -4.1559999808669090e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 971 8.5886001586914062e-02</internalNodes>\n          <leafValues>\n            8.4642998874187469e-02 9.5220798254013062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 972 8.1031002104282379e-02</internalNodes>\n          <leafValues>\n            -1.4687100052833557e-01 1.9359990358352661e+00</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>136</maxWeakCount>\n      <stageThreshold>-3.4265899658203125e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 973 -3.3840999007225037e-02</internalNodes>\n          <leafValues>\n            6.5889501571655273e-01 -6.9755297899246216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 974 1.5410000458359718e-02</internalNodes>\n          <leafValues>\n            -9.0728402137756348e-01 3.0478599667549133e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 975 5.4905999451875687e-02</internalNodes>\n          <leafValues>\n            -4.9774798750877380e-01 5.7132601737976074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 976 2.1390000358223915e-02</internalNodes>\n          <leafValues>\n            -4.2565199732780457e-01 5.8096802234649658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 977 7.8849997371435165e-03</internalNodes>\n          <leafValues>\n            -4.7905999422073364e-01 4.3016499280929565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 978 -3.7544999271631241e-02</internalNodes>\n          <leafValues>\n            5.0861597061157227e-01 -1.9985899329185486e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 979 1.5925799310207367e-01</internalNodes>\n          <leafValues>\n            -2.3263600468635559e-01 1.0993319749832153e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 980 -6.8939998745918274e-02</internalNodes>\n          <leafValues>\n            4.0569001436233521e-01 5.6855000555515289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 981 -3.3695001155138016e-02</internalNodes>\n          <leafValues>\n            4.5132800936698914e-01 -3.3332800865173340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 982 -6.3314996659755707e-02</internalNodes>\n          <leafValues>\n            -8.5015702247619629e-01 2.2341699898242950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 983 7.3699997738003731e-03</internalNodes>\n          <leafValues>\n            -9.3082201480865479e-01 5.9216998517513275e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 984 -9.5969997346401215e-03</internalNodes>\n          <leafValues>\n            -1.2794899940490723e+00 1.8447299301624298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 985 -1.3067999482154846e-01</internalNodes>\n          <leafValues>\n            5.8426898717880249e-01 -2.6007199287414551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 986 5.7402998208999634e-02</internalNodes>\n          <leafValues>\n            -5.3789000958204269e-02 7.1175599098205566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 987 -7.2340001352131367e-03</internalNodes>\n          <leafValues>\n            -8.6962199211120605e-01 7.5214996933937073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 988 3.1098999083042145e-02</internalNodes>\n          <leafValues>\n            -7.5006999075412750e-02 9.0781599283218384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 989 3.5854000598192215e-02</internalNodes>\n          <leafValues>\n            -2.4795499444007874e-01 7.2272098064422607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 990 -3.1534999608993530e-02</internalNodes>\n          <leafValues>\n            -1.1238329410552979e+00 2.0988300442695618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 991 -1.9437000155448914e-02</internalNodes>\n          <leafValues>\n            -1.4499390125274658e+00 -1.5100000426173210e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 992 -7.2420001961290836e-03</internalNodes>\n          <leafValues>\n            5.3864902257919312e-01 -1.1375399678945541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 993 8.1639997661113739e-03</internalNodes>\n          <leafValues>\n            6.6889002919197083e-02 -7.6872897148132324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 994 -4.3653000146150589e-02</internalNodes>\n          <leafValues>\n            1.1413530111312866e+00 4.0217000991106033e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 995 2.6569999754428864e-02</internalNodes>\n          <leafValues>\n            -2.4719099700450897e-01 5.9295099973678589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 996 3.2216999679803848e-02</internalNodes>\n          <leafValues>\n            -4.0024999529123306e-02 3.2688000798225403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 997 -7.2236001491546631e-02</internalNodes>\n          <leafValues>\n            5.8729398250579834e-01 -2.5396001338958740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 998 3.1424999237060547e-02</internalNodes>\n          <leafValues>\n            1.5315100550651550e-01 -5.6042098999023438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 999 -4.7699999413453043e-04</internalNodes>\n          <leafValues>\n            1.6958899796009064e-01 -5.2626699209213257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1000 2.7189999818801880e-03</internalNodes>\n          <leafValues>\n            -1.4944599568843842e-01 2.9658699035644531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1001 3.2875001430511475e-02</internalNodes>\n          <leafValues>\n            -3.9943501353263855e-01 2.5156599283218384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1002 -1.4553000219166279e-02</internalNodes>\n          <leafValues>\n            2.7972599864006042e-01 -4.7203800082206726e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1003 3.8017999380826950e-02</internalNodes>\n          <leafValues>\n            -2.9200001154094934e-03 -1.1300059556961060e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1004 2.8659999370574951e-03</internalNodes>\n          <leafValues>\n            4.1111800074577332e-01 -2.6220801472663879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1005 -4.1606999933719635e-02</internalNodes>\n          <leafValues>\n            -1.4293819665908813e+00 -1.9132999703288078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1006 -2.4802999570965767e-02</internalNodes>\n          <leafValues>\n            -2.5013598799705505e-01 1.5978699922561646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1007 1.0098000057041645e-02</internalNodes>\n          <leafValues>\n            4.3738998472690582e-02 -6.9986099004745483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1008 -2.0947000011801720e-02</internalNodes>\n          <leafValues>\n            -9.4137799739837646e-01 2.3204000294208527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1009 2.2458000108599663e-02</internalNodes>\n          <leafValues>\n            -2.7185800671577454e-01 4.5319199562072754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1010 -3.7110999226570129e-02</internalNodes>\n          <leafValues>\n            -1.0314660072326660e+00 1.4421799778938293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1011 -1.0648000054061413e-02</internalNodes>\n          <leafValues>\n            6.3107001781463623e-01 -2.5520798563957214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1012 5.5422998964786530e-02</internalNodes>\n          <leafValues>\n            1.6206599771976471e-01 -1.7722640037536621e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1013 2.1601999178528786e-02</internalNodes>\n          <leafValues>\n            -2.5016099214553833e-01 5.4119801521301270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1014 8.7000000348780304e-05</internalNodes>\n          <leafValues>\n            -2.9008901119232178e-01 3.3507999777793884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1015 1.4406000263988972e-02</internalNodes>\n          <leafValues>\n            -7.8840004280209541e-03 -1.1677219867706299e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1016 1.0777399688959122e-01</internalNodes>\n          <leafValues>\n            1.1292000114917755e-01 -2.4940319061279297e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1017 3.5943999886512756e-02</internalNodes>\n          <leafValues>\n            -1.9480599462985992e-01 9.5757502317428589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1018 -3.9510000497102737e-03</internalNodes>\n          <leafValues>\n            3.0927801132202148e-01 -2.5530201196670532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1019 2.0942000672221184e-02</internalNodes>\n          <leafValues>\n            -7.6319999061524868e-03 -1.0086350440979004e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1020 -2.9877999797463417e-02</internalNodes>\n          <leafValues>\n            -4.6027699112892151e-01 1.9507199525833130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1021 2.5971999391913414e-02</internalNodes>\n          <leafValues>\n            -1.2187999673187733e-02 -1.0035500526428223e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1022 1.0603000409901142e-02</internalNodes>\n          <leafValues>\n            -7.5969003140926361e-02 4.1669899225234985e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1023 8.5819996893405914e-03</internalNodes>\n          <leafValues>\n            -2.6648598909378052e-01 3.9111500978469849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1024 2.1270999684929848e-02</internalNodes>\n          <leafValues>\n            1.8273900449275970e-01 -3.6052298545837402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1025 7.4518002569675446e-02</internalNodes>\n          <leafValues>\n            -1.8938399851322174e-01 9.2658001184463501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1026 4.6569998376071453e-03</internalNodes>\n          <leafValues>\n            -1.4506199955940247e-01 3.3294600248336792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1027 1.7119999974966049e-03</internalNodes>\n          <leafValues>\n            -5.2464002370834351e-01 8.9879997074604034e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1028 9.8500004969537258e-04</internalNodes>\n          <leafValues>\n            -3.8381999731063843e-01 2.4392999708652496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1029 2.8233999386429787e-02</internalNodes>\n          <leafValues>\n            -5.7879998348653316e-03 -1.2617139816284180e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1030 -3.2678000628948212e-02</internalNodes>\n          <leafValues>\n            -5.7953298091888428e-01 1.6955299675464630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1031 2.2536000236868858e-02</internalNodes>\n          <leafValues>\n            2.2281000390648842e-02 -8.7869602441787720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1032 -2.1657999604940414e-02</internalNodes>\n          <leafValues>\n            -6.5108501911163330e-01 1.2966899573802948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1033 7.6799998059868813e-03</internalNodes>\n          <leafValues>\n            -3.3965200185775757e-01 2.2013300657272339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1034 1.4592000283300877e-02</internalNodes>\n          <leafValues>\n            1.5077300369739532e-01 -5.0452399253845215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1035 2.7868000790476799e-02</internalNodes>\n          <leafValues>\n            -2.5045299530029297e-01 4.5741999149322510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1036 5.6940000504255295e-03</internalNodes>\n          <leafValues>\n            -1.0948500037193298e-01 5.5757802724838257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1037 -1.0002999566495419e-02</internalNodes>\n          <leafValues>\n            -9.7366297245025635e-01 1.8467999994754791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1038 -4.0719998069107533e-03</internalNodes>\n          <leafValues>\n            3.8222199678421021e-01 -1.6921100020408630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1039 -2.2593999281525612e-02</internalNodes>\n          <leafValues>\n            -1.0391089916229248e+00 5.1839998923242092e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1040 -3.9579998701810837e-02</internalNodes>\n          <leafValues>\n            -5.5109229087829590e+00 1.1163999885320663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1041 -1.7537999898195267e-02</internalNodes>\n          <leafValues>\n            9.5485800504684448e-01 -1.8584500253200531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1042 9.0300003066658974e-03</internalNodes>\n          <leafValues>\n            1.0436000302433968e-02 8.2114797830581665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1043 -7.9539995640516281e-03</internalNodes>\n          <leafValues>\n            2.2632899880409241e-01 -3.4568199515342712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1044 2.7091000229120255e-02</internalNodes>\n          <leafValues>\n            1.6430099308490753e-01 -1.3926379680633545e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1045 -2.0625999197363853e-02</internalNodes>\n          <leafValues>\n            -8.6366099119186401e-01 2.3880000226199627e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1046 -7.1989998221397400e-02</internalNodes>\n          <leafValues>\n            -2.8192629814147949e+00 1.1570499837398529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1047 -2.6964999735355377e-02</internalNodes>\n          <leafValues>\n            -1.2946130037307739e+00 -2.4661000818014145e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1048 -4.7377999871969223e-02</internalNodes>\n          <leafValues>\n            -8.1306397914886475e-01 1.1831399798393250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1049 -1.0895600169897079e-01</internalNodes>\n          <leafValues>\n            6.5937900543212891e-01 -2.0843900740146637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1050 1.3574000447988510e-02</internalNodes>\n          <leafValues>\n            7.4240001849830151e-03 5.3152197599411011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1051 -6.6920001991093159e-03</internalNodes>\n          <leafValues>\n            3.0655801296234131e-01 -3.1084299087524414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1052 -3.9070001803338528e-03</internalNodes>\n          <leafValues>\n            2.5576499104499817e-01 -5.2932001650333405e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1053 -3.7613000720739365e-02</internalNodes>\n          <leafValues>\n            -1.4350049495697021e+00 -1.5448000282049179e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1054 8.6329998448491096e-03</internalNodes>\n          <leafValues>\n            -1.6884399950504303e-01 4.2124900221824646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1055 -3.2097000628709793e-02</internalNodes>\n          <leafValues>\n            -6.4979398250579834e-01 4.1110001504421234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1056 5.8495998382568359e-02</internalNodes>\n          <leafValues>\n            -5.2963998168706894e-02 6.3368302583694458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1057 -4.0901999920606613e-02</internalNodes>\n          <leafValues>\n            -9.2101097106933594e-01 9.0640000998973846e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1058 -1.9925000146031380e-02</internalNodes>\n          <leafValues>\n            5.3759998083114624e-01 -6.2996998429298401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1059 -4.6020001173019409e-03</internalNodes>\n          <leafValues>\n            -5.4333502054214478e-01 8.4104999899864197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1060 1.6824999824166298e-02</internalNodes>\n          <leafValues>\n            1.5563699603080750e-01 -4.0171200037002563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1061 9.4790002331137657e-03</internalNodes>\n          <leafValues>\n            -2.4245299398899078e-01 5.1509499549865723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1062 -1.9534999504685402e-02</internalNodes>\n          <leafValues>\n            -5.1118397712707520e-01 1.3831999897956848e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1063 1.0746000334620476e-02</internalNodes>\n          <leafValues>\n            -2.1854999661445618e-01 6.2828701734542847e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1064 3.7927001714706421e-02</internalNodes>\n          <leafValues>\n            1.1640299856662750e-01 -2.7301959991455078e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1065 1.6390999779105186e-02</internalNodes>\n          <leafValues>\n            -1.4635999687016010e-02 -1.0797250270843506e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1066 -1.9785000011324883e-02</internalNodes>\n          <leafValues>\n            1.2166420221328735e+00 3.3275000751018524e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1067 1.1067000217735767e-02</internalNodes>\n          <leafValues>\n            -2.5388300418853760e-01 4.4038599729537964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1068 5.2479999139904976e-03</internalNodes>\n          <leafValues>\n            2.2496800124645233e-01 -2.4216499924659729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1069 -1.1141999624669552e-02</internalNodes>\n          <leafValues>\n            2.5018098950386047e-01 -3.0811500549316406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1070 -1.0666999965906143e-02</internalNodes>\n          <leafValues>\n            -3.2729101181030273e-01 2.6168298721313477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1071 1.0545299947261810e-01</internalNodes>\n          <leafValues>\n            -5.5750001221895218e-02 -1.9605729579925537e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1072 5.4827999323606491e-02</internalNodes>\n          <leafValues>\n            -1.9519999623298645e-03 7.3866099119186401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1073 1.7760999500751495e-02</internalNodes>\n          <leafValues>\n            -3.0647200345993042e-01 2.6346999406814575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1074 -3.1185999512672424e-02</internalNodes>\n          <leafValues>\n            -2.4600900709629059e-01 1.7082199454307556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1075 -5.7296000421047211e-02</internalNodes>\n          <leafValues>\n            4.7033500671386719e-01 -2.6048299670219421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1076 -1.1312000453472137e-02</internalNodes>\n          <leafValues>\n            3.8628900051116943e-01 -2.8817000985145569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1077 3.0592000111937523e-02</internalNodes>\n          <leafValues>\n            -4.8826001584529877e-02 -1.7638969421386719e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1078 1.8489999929443002e-03</internalNodes>\n          <leafValues>\n            2.1099899709224701e-01 -2.5940999388694763e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1079 1.1419000104069710e-02</internalNodes>\n          <leafValues>\n            -1.6829599440097809e-01 1.0278660058975220e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1080 8.1403002142906189e-02</internalNodes>\n          <leafValues>\n            1.1531999707221985e-01 -1.2482399940490723e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1081 5.3495999425649643e-02</internalNodes>\n          <leafValues>\n            -4.6303998678922653e-02 -1.7165969610214233e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1082 -2.3948000743985176e-02</internalNodes>\n          <leafValues>\n            -4.0246599912643433e-01 2.0562100410461426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1083 6.7690000869333744e-03</internalNodes>\n          <leafValues>\n            -3.3152300119400024e-01 2.0683400332927704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1084 -3.2343998551368713e-02</internalNodes>\n          <leafValues>\n            -7.2632801532745361e-01 2.0073500275611877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1085 3.7863001227378845e-02</internalNodes>\n          <leafValues>\n            -1.5631000697612762e-01 1.6697460412979126e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1086 1.5440000221133232e-02</internalNodes>\n          <leafValues>\n            1.9487400352954865e-01 -3.5384199023246765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1087 -4.4376000761985779e-02</internalNodes>\n          <leafValues>\n            8.2093602418899536e-01 -1.8193599581718445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1088 -2.3102000355720520e-02</internalNodes>\n          <leafValues>\n            -4.3044099211692810e-01 1.2375400215387344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1089 1.9400000572204590e-02</internalNodes>\n          <leafValues>\n            -2.9726000502705574e-02 -1.1597590446472168e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1090 1.0385700315237045e-01</internalNodes>\n          <leafValues>\n            1.1149899661540985e-01 -4.6835222244262695e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1091 -1.8964000046253204e-02</internalNodes>\n          <leafValues>\n            2.1773819923400879e+00 -1.4544400572776794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1092 3.8750998675823212e-02</internalNodes>\n          <leafValues>\n            -4.9446001648902893e-02 3.4018298983573914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1093 2.2766999900341034e-02</internalNodes>\n          <leafValues>\n            -3.2802999019622803e-01 3.0531400442123413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1094 -3.1357001513242722e-02</internalNodes>\n          <leafValues>\n            1.1520819664001465e+00 2.7305999770760536e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1095 9.6909999847412109e-03</internalNodes>\n          <leafValues>\n            -3.8799500465393066e-01 2.1512599289417267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1096 -4.9284998327493668e-02</internalNodes>\n          <leafValues>\n            -1.6774909496307373e+00 1.5774199366569519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1097 -3.9510998874902725e-02</internalNodes>\n          <leafValues>\n            -9.7647899389266968e-01 -1.0552000254392624e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1098 4.7997999936342239e-02</internalNodes>\n          <leafValues>\n            2.0843900740146637e-01 -6.8992799520492554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1099 5.1422998309135437e-02</internalNodes>\n          <leafValues>\n            -1.6665300726890564e-01 1.2149239778518677e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1100 1.4279999770224094e-02</internalNodes>\n          <leafValues>\n            2.3627699911594391e-01 -4.1396799683570862e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1101 -9.1611996293067932e-02</internalNodes>\n          <leafValues>\n            -9.2830902338027954e-01 -1.8345000222325325e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1102 6.5080001950263977e-03</internalNodes>\n          <leafValues>\n            -7.3647201061248779e-01 1.9497099518775940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1103 3.5723000764846802e-02</internalNodes>\n          <leafValues>\n            1.4197799563407898e-01 -4.2089301347732544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1104 5.0638001412153244e-02</internalNodes>\n          <leafValues>\n            1.1644000187516212e-02 7.8486597537994385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1105 -1.4613999985158443e-02</internalNodes>\n          <leafValues>\n            -1.1909500360488892e+00 -3.5128001123666763e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1106 -3.8662999868392944e-02</internalNodes>\n          <leafValues>\n            2.4314730167388916e+00 6.5647996962070465e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1107 -4.0346998721361160e-02</internalNodes>\n          <leafValues>\n            7.1755301952362061e-01 -1.9108299911022186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1108 2.3902000859379768e-02</internalNodes>\n          <leafValues>\n            1.5646199882030487e-01 -7.9294800758361816e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>137</maxWeakCount>\n      <stageThreshold>-3.5125269889831543e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1109 8.5640000179409981e-03</internalNodes>\n          <leafValues>\n            -8.1450700759887695e-01 5.8875298500061035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1110 -1.3292600214481354e-01</internalNodes>\n          <leafValues>\n            9.3213397264480591e-01 -2.9367300868034363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1111 9.8400004208087921e-03</internalNodes>\n          <leafValues>\n            -5.6462901830673218e-01 4.1647699475288391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1112 5.0889998674392700e-03</internalNodes>\n          <leafValues>\n            -7.9232800006866455e-01 1.6975000500679016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1113 -6.1039000749588013e-02</internalNodes>\n          <leafValues>\n            -1.4169000387191772e+00 2.5020999833941460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1114 -4.6599999768659472e-04</internalNodes>\n          <leafValues>\n            3.7982499599456787e-01 -4.1567099094390869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1115 3.3889999613165855e-03</internalNodes>\n          <leafValues>\n            -4.0768599510192871e-01 3.5548499226570129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1116 2.1006999537348747e-02</internalNodes>\n          <leafValues>\n            -2.4080100655555725e-01 8.6112701892852783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1117 7.5559997931122780e-03</internalNodes>\n          <leafValues>\n            -8.7467199563980103e-01 9.8572000861167908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1118 2.4779999628663063e-02</internalNodes>\n          <leafValues>\n            1.5566200017929077e-01 -6.9229799509048462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1119 -3.5620000213384628e-02</internalNodes>\n          <leafValues>\n            -1.1472270488739014e+00 3.6359999328851700e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1120 1.9810000434517860e-02</internalNodes>\n          <leafValues>\n            1.5516200661659241e-01 -6.9520097970962524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1121 1.5019999817013741e-02</internalNodes>\n          <leafValues>\n            4.1990000754594803e-02 -9.6622800827026367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1122 -2.3137999698519707e-02</internalNodes>\n          <leafValues>\n            4.3396899104118347e-01 2.4160000029951334e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1123 -1.8743000924587250e-02</internalNodes>\n          <leafValues>\n            4.3481099605560303e-01 -3.2522499561309814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1124 4.5080000162124634e-01</internalNodes>\n          <leafValues>\n            -9.4573996961116791e-02 7.2421300411224365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1125 1.1854999698698521e-02</internalNodes>\n          <leafValues>\n            -3.8133099675178528e-01 3.0098399519920349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1126 -2.4830000475049019e-02</internalNodes>\n          <leafValues>\n            8.9300602674484253e-01 -1.0295899957418442e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1127 -4.4743001461029053e-02</internalNodes>\n          <leafValues>\n            8.6280298233032227e-01 -2.1716499328613281e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1128 -1.4600000344216824e-02</internalNodes>\n          <leafValues>\n            6.0069400072097778e-01 -1.5906299650669098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1129 -2.4527000263333321e-02</internalNodes>\n          <leafValues>\n            -1.5872869491577148e+00 -2.1817000582814217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1130 2.3024000227451324e-02</internalNodes>\n          <leafValues>\n            1.6853399574756622e-01 -3.8106900453567505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1131 -2.4917000904679298e-02</internalNodes>\n          <leafValues>\n            5.0810897350311279e-01 -2.7279898524284363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1132 1.0130000300705433e-03</internalNodes>\n          <leafValues>\n            -4.3138799071311951e-01 2.6438099145889282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1133 1.5603000298142433e-02</internalNodes>\n          <leafValues>\n            -3.1624200940132141e-01 5.5715900659561157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1134 -2.6685999706387520e-02</internalNodes>\n          <leafValues>\n            1.0553920269012451e+00 2.9074000194668770e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1135 1.3940000208094716e-03</internalNodes>\n          <leafValues>\n            -7.1873801946640015e-01 6.5390996634960175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1136 -6.4799998654052615e-04</internalNodes>\n          <leafValues>\n            2.4884399771690369e-01 -2.0978200435638428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1137 -3.1888000667095184e-02</internalNodes>\n          <leafValues>\n            -6.8844497203826904e-01 6.3589997589588165e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1138 -4.9290000461041927e-03</internalNodes>\n          <leafValues>\n            -5.9152501821517944e-01 2.7943599224090576e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1139 3.1168000772595406e-02</internalNodes>\n          <leafValues>\n            4.5223999768495560e-02 -8.8639199733734131e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1140 -3.3663000911474228e-02</internalNodes>\n          <leafValues>\n            -6.1590200662612915e-01 1.5749299526214600e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1141 1.1966999620199203e-02</internalNodes>\n          <leafValues>\n            -3.0606698989868164e-01 4.2293301224708557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1142 -3.4680001437664032e-02</internalNodes>\n          <leafValues>\n            -1.3734940290451050e+00 1.5908700227737427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1143 9.9290004000067711e-03</internalNodes>\n          <leafValues>\n            -5.5860197544097900e-01 1.2119200080633163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1144 5.9574998915195465e-02</internalNodes>\n          <leafValues>\n            4.9720001406967640e-03 8.2055401802062988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1145 -6.5428003668785095e-02</internalNodes>\n          <leafValues>\n            1.5651429891586304e+00 -1.6817499697208405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1146 -9.2895999550819397e-02</internalNodes>\n          <leafValues>\n            -1.5794529914855957e+00 1.4661799371242523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1147 -4.1184000670909882e-02</internalNodes>\n          <leafValues>\n            -1.5518720149993896e+00 -2.9969999566674232e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1148 2.1447999402880669e-02</internalNodes>\n          <leafValues>\n            1.7196300625801086e-01 -6.9343197345733643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1149 -2.5569999590516090e-02</internalNodes>\n          <leafValues>\n            -1.3061310052871704e+00 -2.4336999282240868e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1150 -4.1200999170541763e-02</internalNodes>\n          <leafValues>\n            -1.3821059465408325e+00 1.4801800251007080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1151 -1.7668999731540680e-02</internalNodes>\n          <leafValues>\n            -7.0889997482299805e-01 3.6524001508951187e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1152 9.0060001239180565e-03</internalNodes>\n          <leafValues>\n            -4.0913999080657959e-02 8.0373102426528931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1153 -1.1652999557554722e-02</internalNodes>\n          <leafValues>\n            5.7546800374984741e-01 -2.4991700053215027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1154 -7.4780001305043697e-03</internalNodes>\n          <leafValues>\n            -4.9280899763107300e-01 1.9810900092124939e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1155 8.5499999113380909e-04</internalNodes>\n          <leafValues>\n            -4.8858100175857544e-01 1.3563099503517151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1156 -3.0538000166416168e-02</internalNodes>\n          <leafValues>\n            -6.0278397798538208e-01 1.8522000312805176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1157 -1.8846999853849411e-02</internalNodes>\n          <leafValues>\n            2.3565599322319031e-01 -3.5136300325393677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1158 -8.1129996106028557e-03</internalNodes>\n          <leafValues>\n            -8.1304997205734253e-02 2.1069599688053131e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1159 -3.4830000251531601e-02</internalNodes>\n          <leafValues>\n            -1.2065670490264893e+00 -1.4251999557018280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1160 1.9021000713109970e-02</internalNodes>\n          <leafValues>\n            2.3349900543689728e-01 -4.5664900541305542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1161 -1.9004000350832939e-02</internalNodes>\n          <leafValues>\n            -8.1075799465179443e-01 1.3140000402927399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1162 -8.9057996869087219e-02</internalNodes>\n          <leafValues>\n            6.1542397737503052e-01 3.2983001321554184e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1163 6.8620000965893269e-03</internalNodes>\n          <leafValues>\n            -2.9583099484443665e-01 2.7003699541091919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1164 -2.8240999206900597e-02</internalNodes>\n          <leafValues>\n            -6.1102700233459473e-01 1.7357499897480011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1165 -3.2099999953061342e-04</internalNodes>\n          <leafValues>\n            -5.3322899341583252e-01 6.8539001047611237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1166 -1.0829100012779236e-01</internalNodes>\n          <leafValues>\n            -1.2879559993743896e+00 1.1801700294017792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1167 1.5878999605774879e-02</internalNodes>\n          <leafValues>\n            -1.7072600126266479e-01 1.1103910207748413e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1168 8.6859995499253273e-03</internalNodes>\n          <leafValues>\n            -1.0995099693536758e-01 4.6010500192642212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1169 -2.5234999135136604e-02</internalNodes>\n          <leafValues>\n            1.0220669507980347e+00 -1.8694299459457397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1170 -1.3508999720215797e-02</internalNodes>\n          <leafValues>\n            -7.8316599130630493e-01 1.4202600717544556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1171 -7.7149998396635056e-03</internalNodes>\n          <leafValues>\n            -8.8060700893402100e-01 1.1060000397264957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1172 7.1580000221729279e-02</internalNodes>\n          <leafValues>\n            1.1369399726390839e-01 -1.1032789945602417e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1173 -1.3554000295698643e-02</internalNodes>\n          <leafValues>\n            -8.1096500158309937e-01 3.4080001059919596e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1174 2.9450000729411840e-03</internalNodes>\n          <leafValues>\n            -7.2879999876022339e-02 3.4998100996017456e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1175 -5.0833001732826233e-02</internalNodes>\n          <leafValues>\n            -1.2868590354919434e+00 -2.8842000290751457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1176 -8.7989997118711472e-03</internalNodes>\n          <leafValues>\n            4.7613599896430969e-01 -1.4690400660037994e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1177 2.1424399316310883e-01</internalNodes>\n          <leafValues>\n            -5.9702001512050629e-02 -2.4802260398864746e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1178 1.3962999917566776e-02</internalNodes>\n          <leafValues>\n            1.7420299351215363e-01 -4.3911001086235046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1179 4.2502000927925110e-02</internalNodes>\n          <leafValues>\n            -1.9965299963951111e-01 7.0654797554016113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1180 1.9827999174594879e-02</internalNodes>\n          <leafValues>\n            -6.9136001169681549e-02 6.1643397808074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1181 -3.3560000360012054e-02</internalNodes>\n          <leafValues>\n            -1.2740780115127563e+00 -2.5673000141978264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1182 6.3542999327182770e-02</internalNodes>\n          <leafValues>\n            1.2403500080108643e-01 -1.0776289701461792e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1183 2.1933000534772873e-02</internalNodes>\n          <leafValues>\n            1.4952000230550766e-02 -7.1023499965667725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1184 -7.8424997627735138e-02</internalNodes>\n          <leafValues>\n            6.2033998966217041e-01 3.3610999584197998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1185 1.4390000142157078e-02</internalNodes>\n          <leafValues>\n            -3.6324599385261536e-01 1.7308300733566284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1186 -6.7309997975826263e-02</internalNodes>\n          <leafValues>\n            5.2374100685119629e-01 1.2799999676644802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1187 1.3047499954700470e-01</internalNodes>\n          <leafValues>\n            -1.7122499644756317e-01 1.1235200166702271e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1188 -4.6245999634265900e-02</internalNodes>\n          <leafValues>\n            -1.1908329725265503e+00 1.7425599694252014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1189 -2.9842000454664230e-02</internalNodes>\n          <leafValues>\n            8.3930599689483643e-01 -1.8064199388027191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1190 -3.8099999073892832e-04</internalNodes>\n          <leafValues>\n            3.5532799363136292e-01 -2.3842300474643707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1191 -2.2378999739885330e-02</internalNodes>\n          <leafValues>\n            -8.7943899631500244e-01 -7.8399997437372804e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1192 -1.5569999814033508e-03</internalNodes>\n          <leafValues>\n            -1.4253300428390503e-01 2.5876200199127197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1193 1.2013000436127186e-02</internalNodes>\n          <leafValues>\n            -2.9015499353408813e-01 2.6051101088523865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1194 2.4384999647736549e-02</internalNodes>\n          <leafValues>\n            -3.1438998878002167e-02 5.8695900440216064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1195 -4.7180999070405960e-02</internalNodes>\n          <leafValues>\n            6.9430100917816162e-01 -2.1816100180149078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1196 -2.4893999099731445e-02</internalNodes>\n          <leafValues>\n            -6.4599299430847168e-01 1.5611599385738373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1197 2.1944999694824219e-02</internalNodes>\n          <leafValues>\n            -2.7742000296711922e-02 -1.1346880197525024e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1198 1.8809899687767029e-01</internalNodes>\n          <leafValues>\n            -1.0076000355184078e-02 1.2429029941558838e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1199 -7.7872000634670258e-02</internalNodes>\n          <leafValues>\n            8.5008001327514648e-01 -1.9015499949455261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1200 -4.8769000917673111e-02</internalNodes>\n          <leafValues>\n            -2.0763080120086670e+00 1.2179400026798248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1201 -1.7115000635385513e-02</internalNodes>\n          <leafValues>\n            -8.5687297582626343e-01 7.8760003671050072e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1202 -2.7499999850988388e-03</internalNodes>\n          <leafValues>\n            3.8645499944686890e-01 -1.1391499638557434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1203 -9.8793998360633850e-02</internalNodes>\n          <leafValues>\n            -1.7233899831771851e+00 -5.6063000112771988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1204 -2.1936999633908272e-02</internalNodes>\n          <leafValues>\n            5.4749399423599243e-01 -4.2481999844312668e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1205 6.1096999794244766e-02</internalNodes>\n          <leafValues>\n            -3.8945000618696213e-02 -1.0807880163192749e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1206 -2.4563999846577644e-02</internalNodes>\n          <leafValues>\n            5.8311098814010620e-01 -9.7599998116493225e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1207 3.3752001821994781e-02</internalNodes>\n          <leafValues>\n            -1.3795999810099602e-02 -8.4730297327041626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1208 3.8199000060558319e-02</internalNodes>\n          <leafValues>\n            1.5114299952983856e-01 -7.9473400115966797e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1209 -2.0117999985814095e-02</internalNodes>\n          <leafValues>\n            5.1579099893569946e-01 -2.1445399522781372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1210 2.4734999984502792e-02</internalNodes>\n          <leafValues>\n            -2.2105000913143158e-02 4.2917698621749878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1211 -2.4357000365853310e-02</internalNodes>\n          <leafValues>\n            -8.6201298236846924e-01 -3.6760000512003899e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1212 -2.6442000642418861e-02</internalNodes>\n          <leafValues>\n            -4.5397499203681946e-01 2.2462800145149231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1213 -3.4429999068379402e-03</internalNodes>\n          <leafValues>\n            1.3073000311851501e-01 -3.8622701168060303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1214 1.0701700299978256e-01</internalNodes>\n          <leafValues>\n            1.3158600032329559e-01 -7.9306900501251221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1215 4.5152999460697174e-02</internalNodes>\n          <leafValues>\n            -2.5296801328659058e-01 4.0672400593757629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1216 4.4349998235702515e-02</internalNodes>\n          <leafValues>\n            2.2613000124692917e-02 7.9618102312088013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1217 1.0839999886229634e-03</internalNodes>\n          <leafValues>\n            -3.9158400893211365e-01 1.1639100313186646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1218 7.1433000266551971e-02</internalNodes>\n          <leafValues>\n            8.2466997206211090e-02 1.2530590295791626e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1219 3.5838000476360321e-02</internalNodes>\n          <leafValues>\n            -1.8203300237655640e-01 7.7078700065612793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1220 -2.0839000120759010e-02</internalNodes>\n          <leafValues>\n            -6.1744397878646851e-01 1.5891399979591370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1221 4.2525801062583923e-01</internalNodes>\n          <leafValues>\n            -4.8978000879287720e-02 -1.8422030210494995e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1222 1.1408000253140926e-02</internalNodes>\n          <leafValues>\n            1.7918199300765991e-01 -1.5383499860763550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1223 -1.5364999882876873e-02</internalNodes>\n          <leafValues>\n            -8.4016501903533936e-01 -1.0280000278726220e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1224 -1.5212000347673893e-02</internalNodes>\n          <leafValues>\n            -1.8995699286460876e-01 1.7130999267101288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1225 -1.8972000107169151e-02</internalNodes>\n          <leafValues>\n            -7.9541999101638794e-01 6.6800001077353954e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1226 -3.3330000005662441e-03</internalNodes>\n          <leafValues>\n            -2.3530800640583038e-01 2.4730099737644196e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1227 9.3248002231121063e-02</internalNodes>\n          <leafValues>\n            -5.4758001118898392e-02 -1.8324300050735474e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1228 -1.2555000372231007e-02</internalNodes>\n          <leafValues>\n            2.6385200023651123e-01 -3.8526400923728943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1229 -2.7070000767707825e-02</internalNodes>\n          <leafValues>\n            -6.6929799318313599e-01 2.0340999588370323e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1230 -2.3677000775933266e-02</internalNodes>\n          <leafValues>\n            6.7265301942825317e-01 -1.4344000257551670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1231 -1.4275000430643559e-02</internalNodes>\n          <leafValues>\n            3.0186399817466736e-01 -2.8514400124549866e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1232 2.8096999973058701e-02</internalNodes>\n          <leafValues>\n            1.4766000211238861e-01 -1.4078520536422729e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1233 5.0840001553297043e-02</internalNodes>\n          <leafValues>\n            -1.8613600730895996e-01 7.9953002929687500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1234 1.1505999602377415e-02</internalNodes>\n          <leafValues>\n            1.9118399918079376e-01 -8.5035003721714020e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1235 -1.4661000110208988e-02</internalNodes>\n          <leafValues>\n            4.5239299535751343e-01 -2.2205199301242828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1236 2.2842499613761902e-01</internalNodes>\n          <leafValues>\n            1.3488399982452393e-01 -1.2894610166549683e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1237 1.1106900125741959e-01</internalNodes>\n          <leafValues>\n            -2.0753799378871918e-01 5.4561597108840942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1238 3.2450000289827585e-03</internalNodes>\n          <leafValues>\n            3.2053700089454651e-01 -1.6403500735759735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1239 8.5309997200965881e-02</internalNodes>\n          <leafValues>\n            -2.0210500061511993e-01 5.3296798467636108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1240 2.2048000246286392e-02</internalNodes>\n          <leafValues>\n            1.5698599815368652e-01 -1.7014099657535553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1241 -1.5676999464631081e-02</internalNodes>\n          <leafValues>\n            -6.2863498926162720e-01 4.0761999785900116e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1242 3.3112901449203491e-01</internalNodes>\n          <leafValues>\n            1.6609300673007965e-01 -1.0326379537582397e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1243 8.8470000773668289e-03</internalNodes>\n          <leafValues>\n            -2.5076198577880859e-01 3.1660598516464233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1244 4.6080000698566437e-02</internalNodes>\n          <leafValues>\n            1.5352100133895874e-01 -1.6333500146865845e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1245 -3.7703000009059906e-02</internalNodes>\n          <leafValues>\n            5.6873798370361328e-01 -2.0102599263191223e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>159</maxWeakCount>\n      <stageThreshold>-3.5939640998840332e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1246 -8.1808999180793762e-02</internalNodes>\n          <leafValues>\n            5.7124799489974976e-01 -6.7438799142837524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1247 2.1761199831962585e-01</internalNodes>\n          <leafValues>\n            -3.8610199093818665e-01 9.0343999862670898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1248 1.4878000132739544e-02</internalNodes>\n          <leafValues>\n            2.2241599857807159e-01 -1.2779350280761719e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1249 5.2434999495744705e-02</internalNodes>\n          <leafValues>\n            -2.8690400719642639e-01 7.5742298364639282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1250 9.1429995372891426e-03</internalNodes>\n          <leafValues>\n            -6.4880400896072388e-01 2.2268800437450409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1251 7.9169999808073044e-03</internalNodes>\n          <leafValues>\n            -2.9253599047660828e-01 3.1030198931694031e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1252 -2.6084000244736671e-02</internalNodes>\n          <leafValues>\n            4.5532700419425964e-01 -3.8500601053237915e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1253 -2.9400000348687172e-03</internalNodes>\n          <leafValues>\n            -5.1264399290084839e-01 2.7432298660278320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1254 5.7130001485347748e-02</internalNodes>\n          <leafValues>\n            1.5788000077009201e-02 -1.2133100032806396e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1255 -6.1309998854994774e-03</internalNodes>\n          <leafValues>\n            3.9174601435661316e-01 -3.0866798758506775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1256 -4.0405001491308212e-02</internalNodes>\n          <leafValues>\n            1.1901949644088745e+00 -2.0347100496292114e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1257 -2.0297000184655190e-02</internalNodes>\n          <leafValues>\n            -6.8239498138427734e-01 2.0458699762821198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1258 -1.7188999801874161e-02</internalNodes>\n          <leafValues>\n            -8.4939897060394287e-01 3.8433000445365906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1259 -2.4215999990701675e-02</internalNodes>\n          <leafValues>\n            -1.1039420366287231e+00 1.5975099802017212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1260 5.6869000196456909e-02</internalNodes>\n          <leafValues>\n            -1.9595299661159515e-01 1.1806850433349609e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1261 3.6199999158270657e-04</internalNodes>\n          <leafValues>\n            -4.0847799181938171e-01 3.2938599586486816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1262 9.9790003150701523e-03</internalNodes>\n          <leafValues>\n            -2.9673001170158386e-01 4.1547900438308716e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1263 -5.2625000476837158e-02</internalNodes>\n          <leafValues>\n            -1.3069299459457397e+00 1.7862600088119507e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1264 -1.3748999685049057e-02</internalNodes>\n          <leafValues>\n            2.3665800690650940e-01 -4.4536599516868591e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1265 -3.0517000705003738e-02</internalNodes>\n          <leafValues>\n            2.9018300771713257e-01 -1.1210100352764130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1266 -3.0037501454353333e-01</internalNodes>\n          <leafValues>\n            -2.4237680435180664e+00 -4.2830999940633774e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1267 -3.5990998148918152e-02</internalNodes>\n          <leafValues>\n            8.8206499814987183e-01 -4.7012999653816223e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1268 -5.5112000554800034e-02</internalNodes>\n          <leafValues>\n            8.0119001865386963e-01 -2.0490999519824982e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1269 3.3762000501155853e-02</internalNodes>\n          <leafValues>\n            1.4617599546909332e-01 -1.1349489688873291e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1270 -8.2710003480315208e-03</internalNodes>\n          <leafValues>\n            -8.1604897975921631e-01 1.8988000229001045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1271 -5.4399999789893627e-03</internalNodes>\n          <leafValues>\n            -7.0980900526046753e-01 2.2343699634075165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1272 3.1059999018907547e-03</internalNodes>\n          <leafValues>\n            -7.2808599472045898e-01 4.0224999189376831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1273 5.3651999682188034e-02</internalNodes>\n          <leafValues>\n            1.7170900106430054e-01 -1.1163710355758667e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1274 -1.2541399896144867e-01</internalNodes>\n          <leafValues>\n            2.7680370807647705e+00 -1.4611500501632690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1275 9.2542000114917755e-02</internalNodes>\n          <leafValues>\n            1.1609800159931183e-01 -3.9635529518127441e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1276 3.8513999432325363e-02</internalNodes>\n          <leafValues>\n            -7.6399999670684338e-03 -9.8780900239944458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1277 -2.0200000144541264e-03</internalNodes>\n          <leafValues>\n            2.3059999942779541e-01 -7.4970299005508423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1278 9.7599998116493225e-03</internalNodes>\n          <leafValues>\n            -3.1137999892234802e-01 3.0287799239158630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1279 2.4095000699162483e-02</internalNodes>\n          <leafValues>\n            -4.9529999494552612e-02 5.2690100669860840e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1280 -1.7982000485062599e-02</internalNodes>\n          <leafValues>\n            -1.1610640287399292e+00 -5.7000000961124897e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1281 -1.0555000044405460e-02</internalNodes>\n          <leafValues>\n            -2.7189099788665771e-01 2.3597699403762817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1282 -7.2889998555183411e-03</internalNodes>\n          <leafValues>\n            -5.4219102859497070e-01 8.1914000213146210e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1283 2.3939000442624092e-02</internalNodes>\n          <leafValues>\n            1.7975799739360809e-01 -6.7049497365951538e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1284 -1.8365999683737755e-02</internalNodes>\n          <leafValues>\n            6.2664300203323364e-01 -2.0970100164413452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1285 1.5715999528765678e-02</internalNodes>\n          <leafValues>\n            2.4193699657917023e-01 -1.0444309711456299e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1286 -4.8804000020027161e-02</internalNodes>\n          <leafValues>\n            -9.4060599803924561e-01 -3.7519999314099550e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1287 6.7130001261830330e-03</internalNodes>\n          <leafValues>\n            -7.5432002544403076e-02 6.1575299501419067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1288 9.7770001739263535e-03</internalNodes>\n          <leafValues>\n            3.9285000413656235e-02 -8.4810298681259155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1289 1.4744999818503857e-02</internalNodes>\n          <leafValues>\n            1.6968999803066254e-01 -5.0906401872634888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1290 9.7079001367092133e-02</internalNodes>\n          <leafValues>\n            -3.3103000372648239e-02 -1.2706379890441895e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1291 4.8285998404026031e-02</internalNodes>\n          <leafValues>\n            9.4329997897148132e-02 2.7203190326690674e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1292 9.7810002043843269e-03</internalNodes>\n          <leafValues>\n            -3.9533400535583496e-01 1.5363800525665283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1293 -3.9893999695777893e-02</internalNodes>\n          <leafValues>\n            -2.2767400741577148e-01 1.3913999497890472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1294 2.2848000749945641e-02</internalNodes>\n          <leafValues>\n            -2.7391999959945679e-01 3.4199500083923340e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1295 6.7179999314248562e-03</internalNodes>\n          <leafValues>\n            -1.0874299705028534e-01 4.8125401139259338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1296 5.9599999338388443e-02</internalNodes>\n          <leafValues>\n            -4.9522001296281815e-02 -2.0117089748382568e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1297 6.9340001791715622e-03</internalNodes>\n          <leafValues>\n            1.5037499368190765e-01 -1.1271899938583374e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1298 1.5757000073790550e-02</internalNodes>\n          <leafValues>\n            -2.0885000005364418e-02 -1.1651979684829712e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1299 -4.9690000712871552e-02</internalNodes>\n          <leafValues>\n            -8.0213499069213867e-01 1.4372299611568451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1300 5.2347000688314438e-02</internalNodes>\n          <leafValues>\n            -2.0836700499057770e-01 6.1677598953247070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1301 2.2430999204516411e-02</internalNodes>\n          <leafValues>\n            2.0305900275707245e-01 -7.5326198339462280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1302 4.1142001748085022e-02</internalNodes>\n          <leafValues>\n            -1.8118199706077576e-01 1.0033359527587891e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1303 -2.1632000803947449e-02</internalNodes>\n          <leafValues>\n            4.9998998641967773e-01 -3.4662999212741852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1304 -8.2808002829551697e-02</internalNodes>\n          <leafValues>\n            1.1711900234222412e+00 -1.8433600664138794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1305 8.5060000419616699e-03</internalNodes>\n          <leafValues>\n            -6.3225001096725464e-02 2.9024899005889893e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1306 7.8905001282691956e-02</internalNodes>\n          <leafValues>\n            -2.3274500668048859e-01 5.9695798158645630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1307 -9.0207003057003021e-02</internalNodes>\n          <leafValues>\n            -8.2211899757385254e-01 1.7772200703620911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1308 -2.9269000515341759e-02</internalNodes>\n          <leafValues>\n            6.0860699415206909e-01 -2.1468900144100189e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1309 6.9499998353421688e-03</internalNodes>\n          <leafValues>\n            -4.2665999382734299e-02 6.0512101650238037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1310 -8.0629996955394745e-03</internalNodes>\n          <leafValues>\n            -1.1508270502090454e+00 -2.7286000549793243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1311 1.9595999270677567e-02</internalNodes>\n          <leafValues>\n            -9.1880001127719879e-03 5.6857800483703613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1312 -1.4884999953210354e-02</internalNodes>\n          <leafValues>\n            3.7658798694610596e-01 -2.7149501442909241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1313 2.5217000395059586e-02</internalNodes>\n          <leafValues>\n            -9.9991001188755035e-02 2.4664700031280518e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1314 -1.5855999663472176e-02</internalNodes>\n          <leafValues>\n            6.6826701164245605e-01 -2.0614700019359589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1315 2.9441000893712044e-02</internalNodes>\n          <leafValues>\n            1.5832200646400452e-01 -7.6060897111892700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1316 -8.5279997438192368e-03</internalNodes>\n          <leafValues>\n            3.8212299346923828e-01 -2.5407800078392029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1317 2.4421999230980873e-02</internalNodes>\n          <leafValues>\n            1.5105099976062775e-01 -2.8752899169921875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1318 -3.3886998891830444e-02</internalNodes>\n          <leafValues>\n            -6.8002802133560181e-01 3.4327000379562378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1319 -2.0810000132769346e-03</internalNodes>\n          <leafValues>\n            2.5413900613784790e-01 -2.6859098672866821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1320 3.0358999967575073e-02</internalNodes>\n          <leafValues>\n            -3.0842000618577003e-02 -1.1476809978485107e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1321 4.0210001170635223e-03</internalNodes>\n          <leafValues>\n            -3.5253798961639404e-01 2.9868099093437195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1322 2.7681000530719757e-02</internalNodes>\n          <leafValues>\n            -3.8148999214172363e-02 -1.3262039422988892e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1323 7.9039996489882469e-03</internalNodes>\n          <leafValues>\n            -2.3737000301480293e-02 7.0503002405166626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1324 4.4031001627445221e-02</internalNodes>\n          <leafValues>\n            1.0674899816513062e-01 -4.5261201262474060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1325 -3.2370999455451965e-02</internalNodes>\n          <leafValues>\n            4.6674901247024536e-01 -6.1546999961137772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1326 2.0933000370860100e-02</internalNodes>\n          <leafValues>\n            -2.8447899222373962e-01 4.3845599889755249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1327 2.5227999314665794e-02</internalNodes>\n          <leafValues>\n            -2.2537000477313995e-02 7.0389097929000854e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1328 6.5520000644028187e-03</internalNodes>\n          <leafValues>\n            -3.2554900646209717e-01 2.4023699760437012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1329 -5.8557998389005661e-02</internalNodes>\n          <leafValues>\n            -1.2227720022201538e+00 1.1668799817562103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1330 3.1899999827146530e-02</internalNodes>\n          <leafValues>\n            -1.9305000081658363e-02 -1.0973169803619385e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1331 -3.0445000156760216e-02</internalNodes>\n          <leafValues>\n            6.5582501888275146e-01 7.5090996921062469e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1332 1.4933000318706036e-02</internalNodes>\n          <leafValues>\n            -5.2155798673629761e-01 1.1523099988698959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1333 -4.9008000642061234e-02</internalNodes>\n          <leafValues>\n            -7.8303998708724976e-01 1.6657200455665588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1334 8.3158999681472778e-02</internalNodes>\n          <leafValues>\n            -2.6879999786615372e-03 -8.5282301902770996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1335 2.3902999237179756e-02</internalNodes>\n          <leafValues>\n            -5.1010999828577042e-02 4.1999098658561707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1336 1.6428999602794647e-02</internalNodes>\n          <leafValues>\n            1.9232999533414841e-02 -6.5049099922180176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1337 -1.1838000267744064e-02</internalNodes>\n          <leafValues>\n            -6.2409800291061401e-01 1.5411199629306793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1338 -1.6799999866634607e-04</internalNodes>\n          <leafValues>\n            1.7589199542999268e-01 -3.4338700771331787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1339 1.9193999469280243e-02</internalNodes>\n          <leafValues>\n            4.3418999761343002e-02 7.9069197177886963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1340 -1.0032000020146370e-02</internalNodes>\n          <leafValues>\n            4.5648899674415588e-01 -2.2494800388813019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1341 -1.4004000462591648e-02</internalNodes>\n          <leafValues>\n            3.3570998907089233e-01 -4.8799999058246613e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1342 -1.0319899767637253e-01</internalNodes>\n          <leafValues>\n            -2.3378000259399414e+00 -5.8933001011610031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1343 -9.5697000622749329e-02</internalNodes>\n          <leafValues>\n            -6.6153901815414429e-01 2.0098599791526794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1344 -4.1480999439954758e-02</internalNodes>\n          <leafValues>\n            4.5939201116561890e-01 -2.2314099967479706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1345 2.4099999573081732e-03</internalNodes>\n          <leafValues>\n            -2.6898598670959473e-01 2.4922999739646912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1346 1.0724999755620956e-01</internalNodes>\n          <leafValues>\n            -1.8640199303627014e-01 7.2769802808761597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1347 3.1870000530034304e-03</internalNodes>\n          <leafValues>\n            -2.4608999490737915e-02 2.8643900156021118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1348 2.9167000204324722e-02</internalNodes>\n          <leafValues>\n            -3.4683000296354294e-02 -1.1162580251693726e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1349 1.1287000030279160e-02</internalNodes>\n          <leafValues>\n            6.3760001212358475e-03 6.6632097959518433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1350 -1.2001000344753265e-02</internalNodes>\n          <leafValues>\n            4.2420101165771484e-01 -2.6279801130294800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1351 -1.2695999816060066e-02</internalNodes>\n          <leafValues>\n            -2.1957000717520714e-02 1.8936799466609955e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1352 2.4597000330686569e-02</internalNodes>\n          <leafValues>\n            -3.4963998943567276e-02 -1.0989320278167725e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1353 4.5953001827001572e-02</internalNodes>\n          <leafValues>\n            1.1109799891710281e-01 -2.9306049346923828e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1354 -2.7241000905632973e-02</internalNodes>\n          <leafValues>\n            2.9101699590682983e-01 -2.7407899498939514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1355 4.0063999593257904e-02</internalNodes>\n          <leafValues>\n            1.1877900362014771e-01 -6.2801802158355713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1356 2.3055000230669975e-02</internalNodes>\n          <leafValues>\n            1.4813800156116486e-01 -3.7007498741149902e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1357 -2.3737000301480293e-02</internalNodes>\n          <leafValues>\n            -5.3724801540374756e-01 1.9358199834823608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1358 7.7522002160549164e-02</internalNodes>\n          <leafValues>\n            -6.0194000601768494e-02 -1.9489669799804688e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1359 -1.3345000334084034e-02</internalNodes>\n          <leafValues>\n            -4.5229598879814148e-01 1.8741500377655029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1360 -2.1719999611377716e-02</internalNodes>\n          <leafValues>\n            1.2144249677658081e+00 -1.5365800261497498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1361 -7.1474999189376831e-02</internalNodes>\n          <leafValues>\n            -2.3047130107879639e+00 1.0999900102615356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1362 -5.4999999701976776e-03</internalNodes>\n          <leafValues>\n            -7.1855199337005615e-01 2.0100999623537064e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1363 2.6740999892354012e-02</internalNodes>\n          <leafValues>\n            7.3545001447200775e-02 9.8786002397537231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1364 -3.9407998323440552e-02</internalNodes>\n          <leafValues>\n            -1.2227380275726318e+00 -4.3506998568773270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1365 2.5888999924063683e-02</internalNodes>\n          <leafValues>\n            1.3409300148487091e-01 -1.1770780086517334e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1366 4.8925001174211502e-02</internalNodes>\n          <leafValues>\n            -3.0810000374913216e-02 -9.3479502201080322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1367 3.6892998963594437e-02</internalNodes>\n          <leafValues>\n            1.3333700597286224e-01 -1.4998290538787842e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1368 7.8929997980594635e-02</internalNodes>\n          <leafValues>\n            -1.4538800716400146e-01 1.5631790161132812e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1369 2.9006000608205795e-02</internalNodes>\n          <leafValues>\n            1.9383700191974640e-01 -6.7642802000045776e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1370 6.3089998438954353e-03</internalNodes>\n          <leafValues>\n            -3.7465399503707886e-01 1.0857500135898590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1371 -6.5830998122692108e-02</internalNodes>\n          <leafValues>\n            8.1059402227401733e-01 3.0201999470591545e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1372 -6.8965002894401550e-02</internalNodes>\n          <leafValues>\n            8.3772599697113037e-01 -1.7140999436378479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1373 -1.1669100075960159e-01</internalNodes>\n          <leafValues>\n            -9.4647198915481567e-01 1.3123199343681335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1374 -1.3060000492259860e-03</internalNodes>\n          <leafValues>\n            4.6007998287677765e-02 -5.2011597156524658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1375 -4.4558998197317123e-02</internalNodes>\n          <leafValues>\n            -1.9423669576644897e+00 1.3200700283050537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1376 5.1033001393079758e-02</internalNodes>\n          <leafValues>\n            -2.1480999886989594e-01 4.8673900961875916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1377 -3.1578000634908676e-02</internalNodes>\n          <leafValues>\n            5.9989798069000244e-01 7.9159997403621674e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1378 2.1020000800490379e-02</internalNodes>\n          <leafValues>\n            -2.2069500386714935e-01 5.4046201705932617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1379 -1.3824200630187988e-01</internalNodes>\n          <leafValues>\n            6.2957501411437988e-01 -2.1712999790906906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1380 5.2228998392820358e-02</internalNodes>\n          <leafValues>\n            -2.3360900580883026e-01 4.9760800600051880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1381 2.5884000584483147e-02</internalNodes>\n          <leafValues>\n            1.8041999638080597e-01 -2.2039200365543365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1382 -1.2138999998569489e-02</internalNodes>\n          <leafValues>\n            -6.9731897115707397e-01 1.5712000429630280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1383 -2.4237999692559242e-02</internalNodes>\n          <leafValues>\n            3.4593299031257629e-01 7.1469999849796295e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1384 -2.5272000581026077e-02</internalNodes>\n          <leafValues>\n            -8.7583297491073608e-01 -9.8240002989768982e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1385 1.2597000226378441e-02</internalNodes>\n          <leafValues>\n            2.3649999499320984e-01 -2.8731200098991394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1386 5.7330999523401260e-02</internalNodes>\n          <leafValues>\n            -6.1530999839305878e-02 -2.2326040267944336e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1387 1.6671000048518181e-02</internalNodes>\n          <leafValues>\n            -1.9850100576877594e-01 4.0810701251029968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1388 -2.2818999364972115e-02</internalNodes>\n          <leafValues>\n            9.6487599611282349e-01 -2.0245699584484100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1389 3.7000001611886546e-05</internalNodes>\n          <leafValues>\n            -5.8908998966217041e-02 2.7055400609970093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1390 -7.6700001955032349e-03</internalNodes>\n          <leafValues>\n            -4.5317101478576660e-01 8.9628003537654877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1391 9.4085998833179474e-02</internalNodes>\n          <leafValues>\n            1.1604599654674530e-01 -1.0951169729232788e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1392 -6.2267001718282700e-02</internalNodes>\n          <leafValues>\n            1.8096530437469482e+00 -1.4773200452327728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1393 1.7416000366210938e-02</internalNodes>\n          <leafValues>\n            2.3068200051784515e-01 -4.2417600750923157e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1394 -2.2066000849008560e-02</internalNodes>\n          <leafValues>\n            4.9270299077033997e-01 -2.0630900561809540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1395 -1.0404000058770180e-02</internalNodes>\n          <leafValues>\n            6.0924297571182251e-01 2.8130000457167625e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1396 -9.3670003116130829e-03</internalNodes>\n          <leafValues>\n            4.0171200037002563e-01 -2.1681700646877289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1397 -2.9039999470114708e-02</internalNodes>\n          <leafValues>\n            -8.4876501560211182e-01 1.4246800541877747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1398 -2.1061999723315239e-02</internalNodes>\n          <leafValues>\n            -7.9198300838470459e-01 -1.2595999985933304e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1399 -3.7000998854637146e-02</internalNodes>\n          <leafValues>\n            -6.7488902807235718e-01 1.2830400466918945e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1400 1.0735999792814255e-02</internalNodes>\n          <leafValues>\n            3.6779999732971191e-02 -6.3393002748489380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1401 1.6367599368095398e-01</internalNodes>\n          <leafValues>\n            1.3803899288177490e-01 -4.7189000248908997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1402 9.4917997717857361e-02</internalNodes>\n          <leafValues>\n            -1.3855700194835663e-01 1.9492419958114624e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1403 3.5261999815702438e-02</internalNodes>\n          <leafValues>\n            1.3721899688243866e-01 -2.1186530590057373e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1404 1.2811000458896160e-02</internalNodes>\n          <leafValues>\n            -2.0008100569248199e-01 4.9507799744606018e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>155</maxWeakCount>\n      <stageThreshold>-3.3933560848236084e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1405 1.3904400169849396e-01</internalNodes>\n          <leafValues>\n            -4.6581199765205383e-01 7.6431602239608765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1406 1.1916999705135822e-02</internalNodes>\n          <leafValues>\n            -9.4398999214172363e-01 3.9726299047470093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1407 -1.0006999596953392e-02</internalNodes>\n          <leafValues>\n            3.2718798518180847e-01 -6.3367402553558350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1408 -6.0479999519884586e-03</internalNodes>\n          <leafValues>\n            2.7427899837493896e-01 -5.7446998357772827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1409 -1.2489999644458294e-03</internalNodes>\n          <leafValues>\n            2.3629300296306610e-01 -6.8593502044677734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1410 3.2382000237703323e-02</internalNodes>\n          <leafValues>\n            -5.7630199193954468e-01 2.7492699027061462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1411 -1.3957999646663666e-02</internalNodes>\n          <leafValues>\n            -6.1061501502990723e-01 2.4541600048542023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1412 1.1159999994561076e-03</internalNodes>\n          <leafValues>\n            -5.6539100408554077e-01 2.7179300785064697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1413 2.7000000045518391e-05</internalNodes>\n          <leafValues>\n            -8.0235999822616577e-01 1.1509100347757339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1414 -2.5700000696815550e-04</internalNodes>\n          <leafValues>\n            -8.1205898523330688e-01 2.3844699561595917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1415 4.0460000745952129e-03</internalNodes>\n          <leafValues>\n            1.3909600675106049e-01 -6.6163200139999390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1416 1.4356000348925591e-02</internalNodes>\n          <leafValues>\n            -1.6485199332237244e-01 4.1901698708534241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1417 -5.5374998599290848e-02</internalNodes>\n          <leafValues>\n            1.4425870180130005e+00 -1.8820199370384216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1418 9.3594998121261597e-02</internalNodes>\n          <leafValues>\n            1.3548299670219421e-01 -9.1636097431182861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1419 2.6624999940395355e-02</internalNodes>\n          <leafValues>\n            -3.3748298883438110e-01 3.9233601093292236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1420 3.7469998933374882e-03</internalNodes>\n          <leafValues>\n            -1.1615400016307831e-01 4.4399300217628479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1421 -3.1886000186204910e-02</internalNodes>\n          <leafValues>\n            -9.9498301744461060e-01 1.6120000509545207e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1422 -2.2600000724196434e-02</internalNodes>\n          <leafValues>\n            -4.8067399859428406e-01 1.7007300257682800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1423 2.5202000513672829e-02</internalNodes>\n          <leafValues>\n            3.5580001771450043e-02 -8.0215400457382202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1424 -3.1036999076604843e-02</internalNodes>\n          <leafValues>\n            -1.0895340442657471e+00 1.8081900477409363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1425 -2.6475999504327774e-02</internalNodes>\n          <leafValues>\n            9.5671200752258301e-01 -2.1049399673938751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1426 -1.3853999786078930e-02</internalNodes>\n          <leafValues>\n            -1.0370320081710815e+00 2.2166700661182404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1427 -6.2925003468990326e-02</internalNodes>\n          <leafValues>\n            9.0199398994445801e-01 -1.9085299968719482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1428 -4.4750999659299850e-02</internalNodes>\n          <leafValues>\n            -1.0119110345840454e+00 1.4691199362277985e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1429 -2.0428000018000603e-02</internalNodes>\n          <leafValues>\n            6.1624497175216675e-01 -2.3552699387073517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1430 -8.0329999327659607e-03</internalNodes>\n          <leafValues>\n            -8.3279997110366821e-02 2.1728700399398804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1431 8.7280003353953362e-03</internalNodes>\n          <leafValues>\n            6.5458998084068298e-02 -6.0318702459335327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1432 -2.7202000841498375e-02</internalNodes>\n          <leafValues>\n            -9.3447399139404297e-01 1.5270000696182251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1433 -1.6471000388264656e-02</internalNodes>\n          <leafValues>\n            -8.4177100658416748e-01 1.3332000002264977e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1434 -1.3744000345468521e-02</internalNodes>\n          <leafValues>\n            6.0567200183868408e-01 -9.2021003365516663e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1435 2.9164999723434448e-02</internalNodes>\n          <leafValues>\n            -2.8114000335335732e-02 -1.4014569520950317e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1436 3.7457000464200974e-02</internalNodes>\n          <leafValues>\n            1.3080599904060364e-01 -4.9382498860359192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1437 -2.5070000439882278e-02</internalNodes>\n          <leafValues>\n            -1.1289390325546265e+00 -1.4600000344216824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1438 -6.3812002539634705e-02</internalNodes>\n          <leafValues>\n            7.5871598720550537e-01 -1.8200000049546361e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1439 -9.3900002539157867e-03</internalNodes>\n          <leafValues>\n            2.9936400055885315e-01 -2.9487800598144531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1440 -7.6000002445653081e-04</internalNodes>\n          <leafValues>\n            1.9725000485777855e-02 1.9993899762630463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1441 -2.1740999072790146e-02</internalNodes>\n          <leafValues>\n            -8.5247898101806641e-01 4.9169998615980148e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1442 -1.7869999632239342e-02</internalNodes>\n          <leafValues>\n            -5.9985999017953873e-02 1.5222500264644623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1443 -2.4831000715494156e-02</internalNodes>\n          <leafValues>\n            3.5603401064872742e-01 -2.6259899139404297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1444 1.5715500712394714e-01</internalNodes>\n          <leafValues>\n            1.5599999460391700e-04 1.0428730249404907e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1445 6.9026999175548553e-02</internalNodes>\n          <leafValues>\n            -3.3006999641656876e-02 -1.1796669960021973e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1446 -1.1021999642252922e-02</internalNodes>\n          <leafValues>\n            5.8987700939178467e-01 -5.7647999376058578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1447 -1.3834999874234200e-02</internalNodes>\n          <leafValues>\n            5.9502798318862915e-01 -2.4418599903583527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1448 -3.0941000208258629e-02</internalNodes>\n          <leafValues>\n            -1.1723799705505371e+00 1.6907000541687012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1449 2.1258000284433365e-02</internalNodes>\n          <leafValues>\n            -1.8900999799370766e-02 -1.0684759616851807e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1450 9.3079999089241028e-02</internalNodes>\n          <leafValues>\n            1.6305600106716156e-01 -1.3375270366668701e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1451 2.9635999351739883e-02</internalNodes>\n          <leafValues>\n            -2.2524799406528473e-01 4.5400100946426392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1452 -1.2199999764561653e-04</internalNodes>\n          <leafValues>\n            2.7409100532531738e-01 -3.7371399998664856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1453 -4.2098000645637512e-02</internalNodes>\n          <leafValues>\n            -7.5828802585601807e-01 1.7137000337243080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1454 -2.2505000233650208e-02</internalNodes>\n          <leafValues>\n            -2.2759300470352173e-01 2.3698699474334717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1455 -1.2862999923527241e-02</internalNodes>\n          <leafValues>\n            1.9252400100231171e-01 -3.2127100229263306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1456 2.7860000729560852e-02</internalNodes>\n          <leafValues>\n            1.6723699867725372e-01 -1.0209059715270996e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1457 -2.7807999402284622e-02</internalNodes>\n          <leafValues>\n            1.2824759483337402e+00 -1.7225299775600433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1458 -6.1630001291632652e-03</internalNodes>\n          <leafValues>\n            -5.4072898626327515e-01 2.3885700106620789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1459 -2.0436000078916550e-02</internalNodes>\n          <leafValues>\n            6.3355398178100586e-01 -2.1090599894523621e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1460 -1.2307999655604362e-02</internalNodes>\n          <leafValues>\n            -4.9778199195861816e-01 1.7402599751949310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1461 -4.0493998676538467e-02</internalNodes>\n          <leafValues>\n            -1.1848740577697754e+00 -3.3890999853610992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1462 2.9657000675797462e-02</internalNodes>\n          <leafValues>\n            2.1740999072790146e-02 1.0069919824600220e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1463 6.8379999138414860e-03</internalNodes>\n          <leafValues>\n            2.9217999428510666e-02 -5.9906297922134399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1464 1.6164999455213547e-02</internalNodes>\n          <leafValues>\n            -2.1000799536705017e-01 3.7637299299240112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1465 5.0193000584840775e-02</internalNodes>\n          <leafValues>\n            2.5319999549537897e-03 -7.1668201684951782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1466 1.9680000841617584e-03</internalNodes>\n          <leafValues>\n            -2.1921400725841522e-01 3.2298699021339417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1467 2.4979999288916588e-02</internalNodes>\n          <leafValues>\n            -9.6840001642704010e-03 -7.7572900056838989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1468 -1.5809999778866768e-02</internalNodes>\n          <leafValues>\n            4.4637501239776611e-01 -6.1760000884532928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1469 3.7206999957561493e-02</internalNodes>\n          <leafValues>\n            -2.0495399832725525e-01 5.7722198963165283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1470 -7.9264998435974121e-02</internalNodes>\n          <leafValues>\n            -7.6745402812957764e-01 1.2550400197505951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1471 -1.7152000218629837e-02</internalNodes>\n          <leafValues>\n            -1.4121830463409424e+00 -5.1704000681638718e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1472 3.2740000635385513e-02</internalNodes>\n          <leafValues>\n            1.9334000349044800e-01 -6.3633698225021362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1473 -1.1756999790668488e-01</internalNodes>\n          <leafValues>\n            8.4325402975082397e-01 -1.8018600344657898e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1474 1.2057200074195862e-01</internalNodes>\n          <leafValues>\n            1.2530000507831573e-01 -2.1213600635528564e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1475 4.2779999785125256e-03</internalNodes>\n          <leafValues>\n            -4.6604400873184204e-01 8.9643999934196472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1476 -7.2544999420642853e-02</internalNodes>\n          <leafValues>\n            5.1826500892639160e-01 1.6823999583721161e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1477 1.7710599303245544e-01</internalNodes>\n          <leafValues>\n            -3.0910000205039978e-02 -1.1046639680862427e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1478 8.4229996427893639e-03</internalNodes>\n          <leafValues>\n            2.4445800483226776e-01 -3.8613098859786987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1479 -1.3035000301897526e-02</internalNodes>\n          <leafValues>\n            9.8004400730133057e-01 -1.7016500234603882e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1480 1.8912000581622124e-02</internalNodes>\n          <leafValues>\n            2.0248499512672424e-01 -3.8545900583267212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1481 2.1447999402880669e-02</internalNodes>\n          <leafValues>\n            -2.5717198848724365e-01 3.5181200504302979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1482 6.3357003033161163e-02</internalNodes>\n          <leafValues>\n            1.6994799673557281e-01 -9.1383802890777588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1483 -3.2435998320579529e-02</internalNodes>\n          <leafValues>\n            -8.5681599378585815e-01 -2.1680999547243118e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1484 -2.3564999923110008e-02</internalNodes>\n          <leafValues>\n            5.6115597486495972e-01 -2.2400000307243317e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1485 1.8789000809192657e-02</internalNodes>\n          <leafValues>\n            -2.5459799170494080e-01 3.4512901306152344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1486 3.1042000278830528e-02</internalNodes>\n          <leafValues>\n            7.5719999149441719e-03 3.4800198674201965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1487 -1.1226999573409557e-02</internalNodes>\n          <leafValues>\n            -6.0219800472259521e-01 4.2814999818801880e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1488 -1.2845999561250210e-02</internalNodes>\n          <leafValues>\n            4.2020401358604431e-01 -5.3801000118255615e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1489 -1.2791999615728855e-02</internalNodes>\n          <leafValues>\n            2.2724500298500061e-01 -3.2398000359535217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1490 6.8651996552944183e-02</internalNodes>\n          <leafValues>\n            9.3532003462314606e-02 10.</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1491 5.2789999172091484e-03</internalNodes>\n          <leafValues>\n            -2.6926299929618835e-01 3.3303201198577881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1492 -3.8779001682996750e-02</internalNodes>\n          <leafValues>\n            -7.2365301847457886e-01 1.7806500196456909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1493 6.1820000410079956e-03</internalNodes>\n          <leafValues>\n            -3.5119399428367615e-01 1.6586300730705261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1494 1.7515200376510620e-01</internalNodes>\n          <leafValues>\n            1.1623100191354752e-01 -1.5419290065765381e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1495 1.1627999693155289e-01</internalNodes>\n          <leafValues>\n            -9.1479998081922531e-03 -9.9842602014541626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1496 -2.2964000701904297e-02</internalNodes>\n          <leafValues>\n            2.0565399527549744e-01 1.5432000160217285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1497 -5.1410000771284103e-02</internalNodes>\n          <leafValues>\n            5.8072400093078613e-01 -2.0118400454521179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1498 2.2474199533462524e-01</internalNodes>\n          <leafValues>\n            1.8728999421000481e-02 1.0829299688339233e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1499 9.4860000535845757e-03</internalNodes>\n          <leafValues>\n            -3.3171299099922180e-01 1.9902999699115753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1500 -1.1846300214529037e-01</internalNodes>\n          <leafValues>\n            1.3711010217666626e+00 6.8926997482776642e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1501 3.7810999900102615e-02</internalNodes>\n          <leafValues>\n            -9.3600002583116293e-04 -8.3996999263763428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1502 2.2202000021934509e-02</internalNodes>\n          <leafValues>\n            -1.1963999830186367e-02 3.6673998832702637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1503 -3.6366000771522522e-02</internalNodes>\n          <leafValues>\n            3.7866500020027161e-01 -2.7714800834655762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1504 -1.3184699416160583e-01</internalNodes>\n          <leafValues>\n            -2.7481179237365723e+00 1.0666900128126144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1505 -4.1655998677015305e-02</internalNodes>\n          <leafValues>\n            4.7524300217628479e-01 -2.3249800503253937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1506 -3.3151999115943909e-02</internalNodes>\n          <leafValues>\n            -5.7929402589797974e-01 1.7434400320053101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1507 1.5769999474287033e-02</internalNodes>\n          <leafValues>\n            -1.1284000240266323e-02 -8.3701401948928833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1508 -3.9363000541925430e-02</internalNodes>\n          <leafValues>\n            3.4821599721908569e-01 -1.7455400526523590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1509 -6.7849002778530121e-02</internalNodes>\n          <leafValues>\n            1.4225699901580811e+00 -1.4765599370002747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1510 -2.6775000616908073e-02</internalNodes>\n          <leafValues>\n            2.3947000503540039e-01 1.3271999545395374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1511 3.9919000118970871e-02</internalNodes>\n          <leafValues>\n            -8.9999996125698090e-03 -7.5938898324966431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1512 1.0065600275993347e-01</internalNodes>\n          <leafValues>\n            -1.8685000017285347e-02 7.6245301961898804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1513 -8.1022001802921295e-02</internalNodes>\n          <leafValues>\n            -9.0439099073410034e-01 -8.5880002006888390e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1514 -2.1258000284433365e-02</internalNodes>\n          <leafValues>\n            -2.1319599449634552e-01 2.1919700503349304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1515 -1.0630999691784382e-02</internalNodes>\n          <leafValues>\n            1.9598099589347839e-01 -3.5768100619316101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1516 8.1300002057105303e-04</internalNodes>\n          <leafValues>\n            -9.2794999480247498e-02 2.6145899295806885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1517 3.4650000743567944e-03</internalNodes>\n          <leafValues>\n            -5.5336099863052368e-01 2.7386000379920006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1518 1.8835999071598053e-02</internalNodes>\n          <leafValues>\n            1.8446099758148193e-01 -6.6934299468994141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1519 -2.5631999596953392e-02</internalNodes>\n          <leafValues>\n            1.9382879734039307e+00 -1.4708900451660156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1520 -4.0939999744296074e-03</internalNodes>\n          <leafValues>\n            -2.6451599597930908e-01 2.0733200013637543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1521 -8.9199998183175921e-04</internalNodes>\n          <leafValues>\n            -5.5031597614288330e-01 5.0374999642372131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1522 -4.9518000334501266e-02</internalNodes>\n          <leafValues>\n            -2.5615389347076416e+00 1.3141700625419617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1523 1.1680999770760536e-02</internalNodes>\n          <leafValues>\n            -2.4819800257682800e-01 3.9982700347900391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1524 3.4563999623060226e-02</internalNodes>\n          <leafValues>\n            1.6178800165653229e-01 -7.1418899297714233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1525 -8.2909995689988136e-03</internalNodes>\n          <leafValues>\n            2.2180099785327911e-01 -2.9181700944900513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1526 -2.2358000278472900e-02</internalNodes>\n          <leafValues>\n            3.1044098734855652e-01 -2.7280000504106283e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1527 -3.0801000073552132e-02</internalNodes>\n          <leafValues>\n            -9.5672702789306641e-01 -8.3400001749396324e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1528 4.3779000639915466e-02</internalNodes>\n          <leafValues>\n            1.2556900084018707e-01 -1.1759619712829590e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1529 4.3046001344919205e-02</internalNodes>\n          <leafValues>\n            -5.8876998722553253e-02 -1.8568470478057861e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1530 2.7188999578356743e-02</internalNodes>\n          <leafValues>\n            4.2858000844717026e-02 3.9036700129508972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1531 9.4149997457861900e-03</internalNodes>\n          <leafValues>\n            -4.3567001819610596e-02 -1.1094470024108887e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1532 9.4311997294425964e-02</internalNodes>\n          <leafValues>\n            4.0256999433040619e-02 9.8442298173904419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1533 1.7025099694728851e-01</internalNodes>\n          <leafValues>\n            2.9510000720620155e-02 -6.9509297609329224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1534 -4.7148000448942184e-02</internalNodes>\n          <leafValues>\n            1.0338569879531860e+00 6.7602001130580902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1535 1.1186300218105316e-01</internalNodes>\n          <leafValues>\n            -6.8682998418807983e-02 -2.4985830783843994e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1536 -1.4353999868035316e-02</internalNodes>\n          <leafValues>\n            -5.9481900930404663e-01 1.5001699328422546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1537 3.4024000167846680e-02</internalNodes>\n          <leafValues>\n            -6.4823001623153687e-02 -2.1382639408111572e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1538 2.1601999178528786e-02</internalNodes>\n          <leafValues>\n            5.5309999734163284e-02 7.8292900323867798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1539 2.1771999076008797e-02</internalNodes>\n          <leafValues>\n            -7.1279997937381268e-03 -7.2148102521896362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1540 8.2416996359825134e-02</internalNodes>\n          <leafValues>\n            1.4609499275684357e-01 -1.3636670112609863e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1541 8.4671996533870697e-02</internalNodes>\n          <leafValues>\n            -1.7784699797630310e-01 7.2857701778411865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1542 -5.5128000676631927e-02</internalNodes>\n          <leafValues>\n            -5.9402400255203247e-01 1.9357800483703613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1543 -6.4823001623153687e-02</internalNodes>\n          <leafValues>\n            -1.0783840417861938e+00 -4.0734000504016876e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1544 -2.2769000381231308e-02</internalNodes>\n          <leafValues>\n            7.7900201082229614e-01 3.4960000775754452e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1545 5.4756000638008118e-02</internalNodes>\n          <leafValues>\n            -6.5683998167514801e-02 -1.8188409805297852e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1546 -8.9000001025851816e-05</internalNodes>\n          <leafValues>\n            -1.7891999334096909e-02 2.0768299698829651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1547 9.8361998796463013e-02</internalNodes>\n          <leafValues>\n            -5.5946998298168182e-02 -1.4153920412063599e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1548 -7.0930002257227898e-03</internalNodes>\n          <leafValues>\n            3.4135299921035767e-01 -1.2089899927377701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1549 5.0278000533580780e-02</internalNodes>\n          <leafValues>\n            -2.6286700367927551e-01 2.5797298550605774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1550 -5.7870000600814819e-03</internalNodes>\n          <leafValues>\n            -1.3178600370883942e-01 1.7350199818611145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1551 1.3973999768495560e-02</internalNodes>\n          <leafValues>\n            2.8518000617623329e-02 -6.1152201890945435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1552 2.1449999883770943e-02</internalNodes>\n          <leafValues>\n            2.6181999593973160e-02 3.0306598544120789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1553 -2.9214000329375267e-02</internalNodes>\n          <leafValues>\n            4.4940599799156189e-01 -2.2803099453449249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1554 4.8099999548867345e-04</internalNodes>\n          <leafValues>\n            -1.9879999756813049e-01 2.0744499564170837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1555 1.7109999898821115e-03</internalNodes>\n          <leafValues>\n            -5.4037201404571533e-01 6.7865997552871704e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1556 8.6660003289580345e-03</internalNodes>\n          <leafValues>\n            -1.3128000311553478e-02 5.2297902107238770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1557 6.3657999038696289e-02</internalNodes>\n          <leafValues>\n            6.8299002945423126e-02 -4.9235099554061890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1558 -2.7968000620603561e-02</internalNodes>\n          <leafValues>\n            6.8183898925781250e-01 7.8781001269817352e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1559 4.8953998833894730e-02</internalNodes>\n          <leafValues>\n            -2.0622399449348450e-01 5.0388097763061523e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>169</maxWeakCount>\n      <stageThreshold>-3.2396929264068604e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1560 -2.9312999919056892e-02</internalNodes>\n          <leafValues>\n            7.1284699440002441e-01 -5.8230698108673096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1561 1.2415099889039993e-01</internalNodes>\n          <leafValues>\n            -3.6863499879837036e-01 6.0067200660705566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1562 7.9349996522068977e-03</internalNodes>\n          <leafValues>\n            -8.6008298397064209e-01 2.1724699437618256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1563 3.0365999788045883e-02</internalNodes>\n          <leafValues>\n            -2.7186998724937439e-01 6.1247897148132324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1564 2.5218000635504723e-02</internalNodes>\n          <leafValues>\n            -3.4748300909996033e-01 5.0427699089050293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1565 1.0014000348746777e-02</internalNodes>\n          <leafValues>\n            -3.1898999214172363e-01 4.1376799345016479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1566 -1.6775000840425491e-02</internalNodes>\n          <leafValues>\n            -6.9048100709915161e-01 9.4830997288227081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1567 -2.6950000319629908e-03</internalNodes>\n          <leafValues>\n            -2.0829799771308899e-01 2.3737199604511261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1568 4.2257998138666153e-02</internalNodes>\n          <leafValues>\n            -4.9366700649261475e-01 1.8170599639415741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1569 -4.8505000770092010e-02</internalNodes>\n          <leafValues>\n            1.3429640531539917e+00 3.9769001305103302e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1570 2.8992999345064163e-02</internalNodes>\n          <leafValues>\n            4.6496000140905380e-02 -8.1643497943878174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1571 -4.0089000016450882e-02</internalNodes>\n          <leafValues>\n            -7.1197801828384399e-01 2.2553899884223938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1572 -4.1021998971700668e-02</internalNodes>\n          <leafValues>\n            1.0057929754257202e+00 -1.9690200686454773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1573 1.1838000267744064e-02</internalNodes>\n          <leafValues>\n            -1.2600000016391277e-02 8.0767101049423218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1574 -2.1328000351786613e-02</internalNodes>\n          <leafValues>\n            -8.2023900747299194e-01 2.0524999126791954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1575 -2.3904999718070030e-02</internalNodes>\n          <leafValues>\n            5.4210501909255981e-01 -7.4767000973224640e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1576 1.8008999526500702e-02</internalNodes>\n          <leafValues>\n            -3.3827701210975647e-01 4.2358601093292236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1577 -4.3614000082015991e-02</internalNodes>\n          <leafValues>\n            -1.1983489990234375e+00 1.5566200017929077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1578 -9.2449998483061790e-03</internalNodes>\n          <leafValues>\n            -8.9029997587203979e-01 1.1003999970853329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1579 4.7485001385211945e-02</internalNodes>\n          <leafValues>\n            1.6664099693298340e-01 -9.0764498710632324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1580 -1.4233999885618687e-02</internalNodes>\n          <leafValues>\n            6.2695199251174927e-01 -2.5791200995445251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1581 3.8010000716894865e-03</internalNodes>\n          <leafValues>\n            -2.8229999542236328e-01 2.6624599099159241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1582 3.4330000635236502e-03</internalNodes>\n          <leafValues>\n            -6.3771998882293701e-01 9.8422996699810028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1583 -2.9221000149846077e-02</internalNodes>\n          <leafValues>\n            -7.6769900321960449e-01 2.2634500265121460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1584 -6.4949998632073402e-03</internalNodes>\n          <leafValues>\n            4.5600101351737976e-01 -2.6528900861740112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1585 -3.0034000054001808e-02</internalNodes>\n          <leafValues>\n            -7.6551097631454468e-01 1.4009299874305725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1586 7.8360000625252724e-03</internalNodes>\n          <leafValues>\n            4.6755999326705933e-02 -7.2356200218200684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1587 8.8550001382827759e-03</internalNodes>\n          <leafValues>\n            -4.9141999334096909e-02 5.1472699642181396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1588 9.5973998308181763e-02</internalNodes>\n          <leafValues>\n            -2.0068999379873276e-02 -1.0850950479507446e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1589 -3.2876998186111450e-02</internalNodes>\n          <leafValues>\n            -9.5875298976898193e-01 1.4543600380420685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1590 -1.3384000398218632e-02</internalNodes>\n          <leafValues>\n            -7.0013600587844849e-01 2.9157999902963638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1591 1.5235999599099159e-02</internalNodes>\n          <leafValues>\n            -2.8235700726509094e-01 2.5367999076843262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1592 1.2054000049829483e-02</internalNodes>\n          <leafValues>\n            -2.5303399562835693e-01 4.6526700258255005e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1593 -7.6295003294944763e-02</internalNodes>\n          <leafValues>\n            -6.9915801286697388e-01 1.3217200338840485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1594 -1.2040000408887863e-02</internalNodes>\n          <leafValues>\n            4.5894598960876465e-01 -2.3856499791145325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1595 2.1916000172495842e-02</internalNodes>\n          <leafValues>\n            1.8268600106239319e-01 -6.1629700660705566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1596 -2.7330000884830952e-03</internalNodes>\n          <leafValues>\n            -6.3257902860641479e-01 3.4219000488519669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1597 -4.8652000725269318e-02</internalNodes>\n          <leafValues>\n            -1.0297729969024658e+00 1.7386500537395477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1598 -1.0463999584317207e-02</internalNodes>\n          <leafValues>\n            3.4757301211357117e-01 -2.7464100718498230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1599 -6.6550001502037048e-03</internalNodes>\n          <leafValues>\n            -2.8980299830436707e-01 2.4037900567054749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1600 8.5469996556639671e-03</internalNodes>\n          <leafValues>\n            -4.4340500235557556e-01 1.4267399907112122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1601 1.9913999363780022e-02</internalNodes>\n          <leafValues>\n            1.7740400135517120e-01 -2.4096299707889557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1602 2.2012999281287193e-02</internalNodes>\n          <leafValues>\n            -1.0812000371515751e-02 -9.4690799713134766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1603 -5.2179001271724701e-02</internalNodes>\n          <leafValues>\n            1.6547499895095825e+00 9.6487000584602356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1604 1.9698999822139740e-02</internalNodes>\n          <leafValues>\n            -6.7560002207756042e-03 -8.6311501264572144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1605 2.3040000349283218e-02</internalNodes>\n          <leafValues>\n            -2.3519999813288450e-03 3.8531300425529480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1606 -1.5038000419735909e-02</internalNodes>\n          <leafValues>\n            -6.1905699968338013e-01 3.1077999621629715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1607 -4.9956001341342926e-02</internalNodes>\n          <leafValues>\n            7.0657497644424438e-01 4.7880999743938446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1608 -6.9269999861717224e-02</internalNodes>\n          <leafValues>\n            3.9212900400161743e-01 -2.3848000168800354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1609 4.7399997711181641e-03</internalNodes>\n          <leafValues>\n            -2.4309000000357628e-02 2.5386300683021545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1610 -3.3923998475074768e-02</internalNodes>\n          <leafValues>\n            4.6930399537086487e-01 -2.3321899771690369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1611 -1.6231000423431396e-02</internalNodes>\n          <leafValues>\n            3.2319200038909912e-01 -2.0545600354671478e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1612 -5.0193000584840775e-02</internalNodes>\n          <leafValues>\n            -1.2277870178222656e+00 -4.0798000991344452e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1613 5.6944001466035843e-02</internalNodes>\n          <leafValues>\n            4.5184001326560974e-02 6.0197502374649048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1614 4.0936999022960663e-02</internalNodes>\n          <leafValues>\n            -1.6772800683975220e-01 8.9819300174713135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1615 -3.0839999672025442e-03</internalNodes>\n          <leafValues>\n            3.3716198801994324e-01 -2.7240800857543945e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1616 -3.2600000500679016e-02</internalNodes>\n          <leafValues>\n            -8.5446500778198242e-01 1.9664999097585678e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1617 9.8480999469757080e-02</internalNodes>\n          <leafValues>\n            5.4742000997066498e-02 6.3827300071716309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1618 -3.8185000419616699e-02</internalNodes>\n          <leafValues>\n            5.2274698019027710e-01 -2.3384800553321838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1619 -4.5917000621557236e-02</internalNodes>\n          <leafValues>\n            6.2829202413558960e-01 3.2859001308679581e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1620 -1.1955499649047852e-01</internalNodes>\n          <leafValues>\n            -6.1572700738906860e-01 3.4680001437664032e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1621 -1.2044399976730347e-01</internalNodes>\n          <leafValues>\n            -8.4380000829696655e-01 1.6530700027942657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1622 7.0619001984596252e-02</internalNodes>\n          <leafValues>\n            -6.3261002302169800e-02 -1.9863929748535156e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1623 8.4889996796846390e-03</internalNodes>\n          <leafValues>\n            -1.7663399875164032e-01 3.8011199235916138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1624 2.2710999473929405e-02</internalNodes>\n          <leafValues>\n            -2.7605999261140823e-02 -9.1921401023864746e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1625 4.9700000090524554e-04</internalNodes>\n          <leafValues>\n            -2.4293200671672821e-01 2.2878900170326233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1626 3.4651998430490494e-02</internalNodes>\n          <leafValues>\n            -2.3705999553203583e-01 5.4010999202728271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1627 -4.4700000435113907e-03</internalNodes>\n          <leafValues>\n            3.9078998565673828e-01 -1.2693800032138824e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1628 2.3643000051379204e-02</internalNodes>\n          <leafValues>\n            -2.6663699746131897e-01 3.2312598824501038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1629 1.2813000008463860e-02</internalNodes>\n          <leafValues>\n            1.7540800571441650e-01 -6.0787999629974365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1630 -1.1250999756157398e-02</internalNodes>\n          <leafValues>\n            -1.0852589607238770e+00 -2.8046000748872757e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1631 -4.1535001248121262e-02</internalNodes>\n          <leafValues>\n            7.1887397766113281e-01 2.7982000261545181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1632 -9.3470998108386993e-02</internalNodes>\n          <leafValues>\n            -1.1906319856643677e+00 -4.4810999184846878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1633 -2.7249999344348907e-02</internalNodes>\n          <leafValues>\n            6.2942498922348022e-01 9.5039997249841690e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1634 -2.1759999915957451e-02</internalNodes>\n          <leafValues>\n            1.3233649730682373e+00 -1.5027000010013580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1635 -9.6890004351735115e-03</internalNodes>\n          <leafValues>\n            -3.3947101235389709e-01 1.7085799574851990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1636 6.9395996630191803e-02</internalNodes>\n          <leafValues>\n            -2.5657799839973450e-01 4.7652098536491394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1637 3.1208999454975128e-02</internalNodes>\n          <leafValues>\n            1.4154000580310822e-01 -3.4942001104354858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1638 -4.9727000296115875e-02</internalNodes>\n          <leafValues>\n            -1.1675560474395752e+00 -4.0757998824119568e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1639 -2.0301999524235725e-02</internalNodes>\n          <leafValues>\n            -3.9486399292945862e-01 1.5814900398254395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1640 -1.5367000363767147e-02</internalNodes>\n          <leafValues>\n            4.9300000071525574e-01 -2.0092099905014038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1641 -5.0735000520944595e-02</internalNodes>\n          <leafValues>\n            1.8736059665679932e+00 8.6730003356933594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1642 -2.0726000890135765e-02</internalNodes>\n          <leafValues>\n            -8.8938397169113159e-01 -7.3199998587369919e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1643 -3.0993999913334846e-02</internalNodes>\n          <leafValues>\n            -1.1664899587631226e+00 1.4274600148200989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1644 -4.4269999489188194e-03</internalNodes>\n          <leafValues>\n            -6.6815102100372314e-01 4.4120000675320625e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1645 -4.5743998140096664e-02</internalNodes>\n          <leafValues>\n            -4.7955200076103210e-01 1.5121999382972717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1646 1.6698999330401421e-02</internalNodes>\n          <leafValues>\n            1.2048599869012833e-01 -4.5235899090766907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1647 3.2210000790655613e-03</internalNodes>\n          <leafValues>\n            -7.7615000307559967e-02 2.7846598625183105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1648 2.4434000253677368e-02</internalNodes>\n          <leafValues>\n            -1.9987100362777710e-01 6.7253702878952026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1649 -7.9677999019622803e-02</internalNodes>\n          <leafValues>\n            9.2222398519515991e-01 9.2557996511459351e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1650 4.4530000537633896e-02</internalNodes>\n          <leafValues>\n            -2.6690500974655151e-01 3.3320501446723938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1651 -1.2528300285339355e-01</internalNodes>\n          <leafValues>\n            -5.4253101348876953e-01 1.3976299762725830e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1652 1.7971999943256378e-02</internalNodes>\n          <leafValues>\n            1.8219999969005585e-02 -6.8048501014709473e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1653 1.9184000790119171e-02</internalNodes>\n          <leafValues>\n            -1.2583999894559383e-02 5.4126697778701782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1654 4.0024001151323318e-02</internalNodes>\n          <leafValues>\n            -1.7638799548149109e-01 7.8810399770736694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1655 1.3558999635279179e-02</internalNodes>\n          <leafValues>\n            2.0737600326538086e-01 -4.7744300961494446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1656 1.6220999881625175e-02</internalNodes>\n          <leafValues>\n            2.3076999932527542e-02 -6.1182099580764771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1657 1.1229000054299831e-02</internalNodes>\n          <leafValues>\n            -1.7728000879287720e-02 4.1764199733734131e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1658 3.9193000644445419e-02</internalNodes>\n          <leafValues>\n            -1.8948499858379364e-01 7.4019300937652588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1659 -9.5539996400475502e-03</internalNodes>\n          <leafValues>\n            4.0947100520133972e-01 -1.3508899509906769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1660 2.7878999710083008e-02</internalNodes>\n          <leafValues>\n            -2.0350700616836548e-01 6.1625397205352783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1661 -2.3600999265909195e-02</internalNodes>\n          <leafValues>\n            -1.6967060565948486e+00 1.4633199572563171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1662 2.6930000633001328e-02</internalNodes>\n          <leafValues>\n            -3.0401999130845070e-02 -1.0909470319747925e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1663 2.8999999631196260e-04</internalNodes>\n          <leafValues>\n            -2.0076000690460205e-01 2.2314099967479706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1664 -4.1124999523162842e-02</internalNodes>\n          <leafValues>\n            -4.5242199301719666e-01 5.7392001152038574e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1665 6.6789998672902584e-03</internalNodes>\n          <leafValues>\n            2.3824900388717651e-01 -2.1262100338935852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1666 4.7864999622106552e-02</internalNodes>\n          <leafValues>\n            -1.8194800615310669e-01 6.1918401718139648e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1667 -3.1679999083280563e-03</internalNodes>\n          <leafValues>\n            -2.7393200993537903e-01 2.5017300248146057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1668 -8.6230002343654633e-03</internalNodes>\n          <leafValues>\n            -4.6280300617218018e-01 4.2397998273372650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1669 -7.4350000359117985e-03</internalNodes>\n          <leafValues>\n            4.1796800494194031e-01 -1.7079999670386314e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1670 -1.8769999733194709e-03</internalNodes>\n          <leafValues>\n            1.4602300524711609e-01 -3.3721101284027100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1671 -8.6226001381874084e-02</internalNodes>\n          <leafValues>\n            7.5143402814865112e-01 1.0711999610066414e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1672 4.6833999454975128e-02</internalNodes>\n          <leafValues>\n            -1.9119599461555481e-01 4.8414900898933411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1673 -9.2000002041459084e-05</internalNodes>\n          <leafValues>\n            3.5220399498939514e-01 -1.7333300411701202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1674 -1.6343999654054642e-02</internalNodes>\n          <leafValues>\n            -6.4397698640823364e-01 9.0680001303553581e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1675 4.5703999698162079e-02</internalNodes>\n          <leafValues>\n            1.8216000869870186e-02 3.1970798969268799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1676 -2.7382999658584595e-02</internalNodes>\n          <leafValues>\n            1.0564049482345581e+00 -1.7276400327682495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1677 -2.7602000162005424e-02</internalNodes>\n          <leafValues>\n            2.9715499281883240e-01 -9.4600003212690353e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1678 7.6939999125897884e-03</internalNodes>\n          <leafValues>\n            -2.1660299599170685e-01 4.7385200858116150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1679 -7.0500001311302185e-04</internalNodes>\n          <leafValues>\n            2.4048799276351929e-01 -2.6776000857353210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1680 1.1054199934005737e-01</internalNodes>\n          <leafValues>\n            -3.3539000898599625e-02 -1.0233880281448364e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1681 6.8765997886657715e-02</internalNodes>\n          <leafValues>\n            -4.3239998631179333e-03 5.7153397798538208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1682 1.7999999690800905e-03</internalNodes>\n          <leafValues>\n            7.7574998140335083e-02 -4.2092698812484741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1683 1.9232000410556793e-01</internalNodes>\n          <leafValues>\n            8.2021996378898621e-02 2.8810169696807861e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1684 1.5742099285125732e-01</internalNodes>\n          <leafValues>\n            -1.3708199560642242e-01 2.0890059471130371e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1685 -4.9387000501155853e-02</internalNodes>\n          <leafValues>\n            -1.8610910177230835e+00 1.4332099258899689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1686 5.1929000765085220e-02</internalNodes>\n          <leafValues>\n            -1.8737000226974487e-01 5.4231601953506470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1687 4.9965001642704010e-02</internalNodes>\n          <leafValues>\n            1.4175300300121307e-01 -1.5625779628753662e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1688 -4.2633000761270523e-02</internalNodes>\n          <leafValues>\n            1.6059479713439941e+00 -1.4712899923324585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1689 -3.7553999572992325e-02</internalNodes>\n          <leafValues>\n            -8.0974900722503662e-01 1.3256999850273132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1690 -3.7174999713897705e-02</internalNodes>\n          <leafValues>\n            -1.3945020437240601e+00 -5.7055000215768814e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1691 1.3945999555289745e-02</internalNodes>\n          <leafValues>\n            3.3427000045776367e-02 5.7474797964096069e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1692 -4.4800000614486635e-04</internalNodes>\n          <leafValues>\n            -5.5327498912811279e-01 2.1952999755740166e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1693 3.1993001699447632e-02</internalNodes>\n          <leafValues>\n            2.0340999588370323e-02 3.7459200620651245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1694 -4.2799999937415123e-03</internalNodes>\n          <leafValues>\n            4.4428700208663940e-01 -2.2999699413776398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1695 9.8550003021955490e-03</internalNodes>\n          <leafValues>\n            1.8315799534320831e-01 -4.0964999794960022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1696 9.3356996774673462e-02</internalNodes>\n          <leafValues>\n            -6.3661001622676849e-02 -1.6929290294647217e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1697 1.7209999263286591e-02</internalNodes>\n          <leafValues>\n            2.0153899490833282e-01 -4.6061098575592041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1698 8.4319999441504478e-03</internalNodes>\n          <leafValues>\n            -3.2003998756408691e-01 1.5312199294567108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1699 -1.4054999686777592e-02</internalNodes>\n          <leafValues>\n            8.6882400512695312e-01 3.2575000077486038e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1700 -7.7180000953376293e-03</internalNodes>\n          <leafValues>\n            6.3686698675155640e-01 -1.8425500392913818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1701 2.8005000203847885e-02</internalNodes>\n          <leafValues>\n            1.7357499897480011e-01 -4.7883599996566772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1702 -1.8884999677538872e-02</internalNodes>\n          <leafValues>\n            2.4101600050926208e-01 -2.6547598838806152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1703 -1.8585000187158585e-02</internalNodes>\n          <leafValues>\n            5.4232501983642578e-01 5.3633000701665878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1704 -3.6437001079320908e-02</internalNodes>\n          <leafValues>\n            2.3908898830413818e+00 -1.3634699583053589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1705 3.2455001026391983e-02</internalNodes>\n          <leafValues>\n            1.5910699963569641e-01 -6.7581498622894287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1706 5.9781998395919800e-02</internalNodes>\n          <leafValues>\n            -2.3479999508708715e-03 -7.3053699731826782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1707 9.8209995776414871e-03</internalNodes>\n          <leafValues>\n            -1.1444099992513657e-01 3.0570301413536072e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1708 -3.5163998603820801e-02</internalNodes>\n          <leafValues>\n            -1.0511469841003418e+00 -3.3103000372648239e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1709 2.7429999317973852e-03</internalNodes>\n          <leafValues>\n            -2.0135399699211121e-01 3.2754099369049072e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1710 8.1059997901320457e-03</internalNodes>\n          <leafValues>\n            -2.1383500099182129e-01 4.3362098932266235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1711 8.8942997157573700e-02</internalNodes>\n          <leafValues>\n            1.0940899699926376e-01 -4.7609338760375977e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1712 -3.0054999515414238e-02</internalNodes>\n          <leafValues>\n            -1.7169300317764282e+00 -6.0919001698493958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1713 -2.1734999492764473e-02</internalNodes>\n          <leafValues>\n            6.4778900146484375e-01 -3.2830998301506042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1714 3.7648998200893402e-02</internalNodes>\n          <leafValues>\n            -1.0060000233352184e-02 -7.6569098234176636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1715 2.7189999818801880e-03</internalNodes>\n          <leafValues>\n            1.9888900220394135e-01 -8.2479000091552734e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1716 -1.0548000223934650e-02</internalNodes>\n          <leafValues>\n            -8.6613601446151733e-01 -2.5986000895500183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1717 1.2966300547122955e-01</internalNodes>\n          <leafValues>\n            1.3911999762058258e-01 -2.2271950244903564e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1718 -1.7676999792456627e-02</internalNodes>\n          <leafValues>\n            3.3967700600624084e-01 -2.3989599943161011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1719 -7.7051997184753418e-02</internalNodes>\n          <leafValues>\n            -2.5017969608306885e+00 1.2841999530792236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1720 -1.9230000674724579e-02</internalNodes>\n          <leafValues>\n            5.0641202926635742e-01 -1.9751599431037903e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1721 -5.1222998648881912e-02</internalNodes>\n          <leafValues>\n            -2.9333369731903076e+00 1.3858500123023987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1722 2.0830000285059214e-03</internalNodes>\n          <leafValues>\n            -6.0043597221374512e-01 2.9718000441789627e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1723 2.5418000295758247e-02</internalNodes>\n          <leafValues>\n            3.3915799856185913e-01 -1.4392000436782837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1724 -2.3905999958515167e-02</internalNodes>\n          <leafValues>\n            -1.1082680225372314e+00 -4.7377001494169235e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1725 -6.3740001060068607e-03</internalNodes>\n          <leafValues>\n            4.4533699750900269e-01 -6.7052997648715973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1726 -3.7698999047279358e-02</internalNodes>\n          <leafValues>\n            -1.0406579971313477e+00 -4.1790001094341278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1727 2.1655100584030151e-01</internalNodes>\n          <leafValues>\n            3.3863000571727753e-02 8.2017302513122559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1728 -1.3400999829173088e-02</internalNodes>\n          <leafValues>\n            5.2903497219085693e-01 -1.9133000075817108e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>196</maxWeakCount>\n      <stageThreshold>-3.2103500366210938e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1729 7.1268998086452484e-02</internalNodes>\n          <leafValues>\n            -5.3631198406219482e-01 6.0715299844741821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1730 5.6111000478267670e-02</internalNodes>\n          <leafValues>\n            -5.0141602754592896e-01 4.3976101279258728e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1731 4.0463998913764954e-02</internalNodes>\n          <leafValues>\n            -3.2922199368476868e-01 5.4834699630737305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1732 6.3155002892017365e-02</internalNodes>\n          <leafValues>\n            -3.1701698899269104e-01 4.6152999997138977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1733 1.0320999659597874e-02</internalNodes>\n          <leafValues>\n            1.0694999992847443e-01 -9.8243898153305054e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1734 6.2606997787952423e-02</internalNodes>\n          <leafValues>\n            -1.4329700171947479e-01 7.1095001697540283e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1735 -3.9416000247001648e-02</internalNodes>\n          <leafValues>\n            9.4380199909210205e-01 -2.1572099626064301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1736 -5.3960001096129417e-03</internalNodes>\n          <leafValues>\n            -5.4611998796463013e-01 2.5303798913955688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1737 1.0773199796676636e-01</internalNodes>\n          <leafValues>\n            1.2496000155806541e-02 -1.0809199810028076e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1738 1.6982000321149826e-02</internalNodes>\n          <leafValues>\n            -3.1536400318145752e-01 5.1239997148513794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1739 3.1216999515891075e-02</internalNodes>\n          <leafValues>\n            -4.5199999585747719e-03 -1.2443480491638184e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1740 -2.3106999695301056e-02</internalNodes>\n          <leafValues>\n            -7.6492899656295776e-01 2.0640599727630615e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1741 -1.1203999631106853e-02</internalNodes>\n          <leafValues>\n            2.4092699587345123e-01 -3.5142099857330322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1742 -4.7479998320341110e-03</internalNodes>\n          <leafValues>\n            -9.7007997334003448e-02 2.0638099312782288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1743 -1.7358999699354172e-02</internalNodes>\n          <leafValues>\n            -7.9020297527313232e-01 2.1852999925613403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1744 1.8851999193429947e-02</internalNodes>\n          <leafValues>\n            -1.0394600033760071e-01 5.4844200611114502e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1745 7.2249998338520527e-03</internalNodes>\n          <leafValues>\n            -4.0409401059150696e-01 2.6763799786567688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1746 1.8915999680757523e-02</internalNodes>\n          <leafValues>\n            2.0508000254631042e-01 -1.0206340551376343e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1747 3.1156999990344048e-02</internalNodes>\n          <leafValues>\n            1.2400000123307109e-03 -8.7293499708175659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1748 2.0951999351382256e-02</internalNodes>\n          <leafValues>\n            -5.5559999309480190e-03 8.0356198549270630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1749 1.1291000060737133e-02</internalNodes>\n          <leafValues>\n            -3.6478400230407715e-01 2.2767899930477142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1750 -5.7011000812053680e-02</internalNodes>\n          <leafValues>\n            -1.4295619726181030e+00 1.4322000741958618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1751 7.2194002568721771e-02</internalNodes>\n          <leafValues>\n            -4.1850000619888306e-02 -1.9111829996109009e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1752 -1.9874000921845436e-02</internalNodes>\n          <leafValues>\n            2.6425498723983765e-01 -3.2617700099945068e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1753 -1.6692999750375748e-02</internalNodes>\n          <leafValues>\n            -8.3907800912857056e-01 4.0799999260343611e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1754 -3.9834998548030853e-02</internalNodes>\n          <leafValues>\n            -4.8858499526977539e-01 1.6436100006103516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1755 2.7009999379515648e-02</internalNodes>\n          <leafValues>\n            -1.8862499296665192e-01 8.3419400453567505e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1756 -3.9420002140104771e-03</internalNodes>\n          <leafValues>\n            2.3231500387191772e-01 -7.2360001504421234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1757 2.2833000868558884e-02</internalNodes>\n          <leafValues>\n            -3.5884000360965729e-02 -1.1549400091171265e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1758 -6.8888001143932343e-02</internalNodes>\n          <leafValues>\n            -1.7837309837341309e+00 1.5159000456333160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1759 4.3097000569105148e-02</internalNodes>\n          <leafValues>\n            -2.1608099341392517e-01 5.0624102354049683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1760 8.6239995434880257e-03</internalNodes>\n          <leafValues>\n            -1.7795599997043610e-01 2.8957900404930115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1761 1.4561000280082226e-02</internalNodes>\n          <leafValues>\n            -1.1408000253140926e-02 -8.9402002096176147e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1762 -1.1501000262796879e-02</internalNodes>\n          <leafValues>\n            3.0171999335289001e-01 -4.3659001588821411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1763 -1.0971499979496002e-01</internalNodes>\n          <leafValues>\n            -9.5147097110748291e-01 -1.9973000511527061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1764 4.5228000730276108e-02</internalNodes>\n          <leafValues>\n            3.3110998570919037e-02 9.6619802713394165e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1765 -2.7047999203205109e-02</internalNodes>\n          <leafValues>\n            9.7963601350784302e-01 -1.7261900007724762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1766 1.8030999228358269e-02</internalNodes>\n          <leafValues>\n            -2.0801000297069550e-02 2.7385899424552917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1767 5.0524998456239700e-02</internalNodes>\n          <leafValues>\n            -5.6802999228239059e-02 -1.7775089740753174e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1768 -2.9923999682068825e-02</internalNodes>\n          <leafValues>\n            6.5329200029373169e-01 -2.3537000641226768e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1769 3.8058001548051834e-02</internalNodes>\n          <leafValues>\n            2.6317000389099121e-02 -7.0665699243545532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1770 1.8563899397850037e-01</internalNodes>\n          <leafValues>\n            -5.6039998307824135e-03 3.2873699069023132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1771 -4.0670000016689301e-03</internalNodes>\n          <leafValues>\n            3.4204798936843872e-01 -3.0171599984169006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1772 1.0108999907970428e-02</internalNodes>\n          <leafValues>\n            -7.3600001633167267e-03 5.7981598377227783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1773 -1.1567000299692154e-02</internalNodes>\n          <leafValues>\n            -5.2722197771072388e-01 4.6447999775409698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1774 -6.5649999305605888e-03</internalNodes>\n          <leafValues>\n            -5.8529102802276611e-01 1.9101899862289429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1775 1.0582000017166138e-02</internalNodes>\n          <leafValues>\n            2.1073000505566597e-02 -6.8892598152160645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1776 -2.0304000005125999e-02</internalNodes>\n          <leafValues>\n            -3.6400699615478516e-01 1.5338799357414246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1777 2.3529999889433384e-03</internalNodes>\n          <leafValues>\n            3.6164000630378723e-02 -5.9825098514556885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1778 -1.4690000098198652e-03</internalNodes>\n          <leafValues>\n            -1.4707699418067932e-01 3.7507998943328857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1779 8.6449999362230301e-03</internalNodes>\n          <leafValues>\n            -2.1708500385284424e-01 5.1936799287796021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1780 -2.4326000362634659e-02</internalNodes>\n          <leafValues>\n            -1.0846769809722900e+00 1.4084799587726593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1781 7.4418999254703522e-02</internalNodes>\n          <leafValues>\n            -1.5513800084590912e-01 1.1822769641876221e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1782 1.7077999189496040e-02</internalNodes>\n          <leafValues>\n            4.4231001287698746e-02 9.1561102867126465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1783 -2.4577999487519264e-02</internalNodes>\n          <leafValues>\n            -1.5504100322723389e+00 -5.4745998233556747e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1784 3.0205000191926956e-02</internalNodes>\n          <leafValues>\n            1.6662800312042236e-01 -1.0001239776611328e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1785 1.2136000208556652e-02</internalNodes>\n          <leafValues>\n            -7.7079099416732788e-01 -4.8639997839927673e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1786 8.6717002093791962e-02</internalNodes>\n          <leafValues>\n            1.1061699688434601e-01 -1.6857999563217163e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1787 -4.2309001088142395e-02</internalNodes>\n          <leafValues>\n            1.1075930595397949e+00 -1.5438599884510040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1788 -2.6420000940561295e-03</internalNodes>\n          <leafValues>\n            2.7451899647712708e-01 -1.8456199765205383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1789 -5.6662000715732574e-02</internalNodes>\n          <leafValues>\n            -8.0625599622726440e-01 -1.6928000375628471e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1790 2.3475000634789467e-02</internalNodes>\n          <leafValues>\n            1.4187699556350708e-01 -2.5500899553298950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1791 -2.0803000777959824e-02</internalNodes>\n          <leafValues>\n            1.9826300442218781e-01 -3.1171199679374695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1792 7.2599998675286770e-03</internalNodes>\n          <leafValues>\n            -5.0590999424457550e-02 4.1923800110816956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1793 3.4160000085830688e-01</internalNodes>\n          <leafValues>\n            -1.6674900054931641e-01 9.2748600244522095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1794 6.2029999680817127e-03</internalNodes>\n          <leafValues>\n            -1.2625899910926819e-01 4.0445300936698914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1795 3.2692000269889832e-02</internalNodes>\n          <leafValues>\n            -3.2634999603033066e-02 -9.8939800262451172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1796 2.1100000594742596e-04</internalNodes>\n          <leafValues>\n            -6.4534001052379608e-02 2.5473698973655701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1797 7.2100001852959394e-04</internalNodes>\n          <leafValues>\n            -3.6618599295616150e-01 1.1973100155591965e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1798 5.4490998387336731e-02</internalNodes>\n          <leafValues>\n            1.2073499709367752e-01 -1.0291390419006348e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1799 -1.0141000151634216e-02</internalNodes>\n          <leafValues>\n            -5.2177202701568604e-01 3.3734999597072601e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1800 -1.8815999850630760e-02</internalNodes>\n          <leafValues>\n            6.5181797742843628e-01 1.3399999588727951e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1801 -5.3480002097785473e-03</internalNodes>\n          <leafValues>\n            1.7370699346065521e-01 -3.4132000803947449e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1802 -1.0847000405192375e-02</internalNodes>\n          <leafValues>\n            -1.9699899852275848e-01 1.5045499801635742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1803 -4.9926001578569412e-02</internalNodes>\n          <leafValues>\n            -5.0888502597808838e-01 3.0762000009417534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1804 1.2160000391304493e-02</internalNodes>\n          <leafValues>\n            -6.9251999258995056e-02 1.8745499849319458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1805 -2.2189998999238014e-03</internalNodes>\n          <leafValues>\n            -4.0849098563194275e-01 7.9954996705055237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1806 3.1580000650137663e-03</internalNodes>\n          <leafValues>\n            -2.1124599874019623e-01 2.2366400063037872e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1807 4.1439998894929886e-03</internalNodes>\n          <leafValues>\n            -4.9900299310684204e-01 6.2917001545429230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1808 -7.3730000294744968e-03</internalNodes>\n          <leafValues>\n            -2.0553299784660339e-01 2.2096699476242065e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1809 5.1812000572681427e-02</internalNodes>\n          <leafValues>\n            1.8096800148487091e-01 -4.3495801091194153e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1810 1.8340000882744789e-02</internalNodes>\n          <leafValues>\n            1.5200000256299973e-02 3.7991699576377869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1811 1.7490799725055695e-01</internalNodes>\n          <leafValues>\n            -2.0920799672603607e-01 4.0013000369071960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1812 5.3993999958038330e-02</internalNodes>\n          <leafValues>\n            2.4751600623130798e-01 -2.6712900400161743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1813 -3.2033199071884155e-01</internalNodes>\n          <leafValues>\n            -1.9094380140304565e+00 -6.6960997879505157e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1814 -2.7060000225901604e-02</internalNodes>\n          <leafValues>\n            -7.1371299028396606e-01 1.5904599428176880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1815 7.7463999390602112e-02</internalNodes>\n          <leafValues>\n            -1.6970199346542358e-01 7.7552998065948486e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1816 2.3771999403834343e-02</internalNodes>\n          <leafValues>\n            1.9021899998188019e-01 -6.0162097215652466e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1817 1.1501000262796879e-02</internalNodes>\n          <leafValues>\n            7.7039999887347221e-03 -6.1730301380157471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1818 3.2616000622510910e-02</internalNodes>\n          <leafValues>\n            1.7159199714660645e-01 -7.0978200435638428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1819 -4.4383000582456589e-02</internalNodes>\n          <leafValues>\n            -2.2606229782104492e+00 -7.3276996612548828e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1820 -5.8476001024246216e-02</internalNodes>\n          <leafValues>\n            2.4087750911712646e+00 8.3091996610164642e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1821 1.9303999841213226e-02</internalNodes>\n          <leafValues>\n            -2.7082300186157227e-01 2.7369999885559082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1822 -4.4705998152494431e-02</internalNodes>\n          <leafValues>\n            3.1355598568916321e-01 -6.2492001801729202e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1823 -6.0334999114274979e-02</internalNodes>\n          <leafValues>\n            -1.4515119791030884e+00 -5.8761000633239746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1824 1.1667000129818916e-02</internalNodes>\n          <leafValues>\n            -1.8084999173879623e-02 5.0479698181152344e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1825 2.8009999543428421e-02</internalNodes>\n          <leafValues>\n            -2.3302899301052094e-01 3.0708700418472290e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1826 6.5397001802921295e-02</internalNodes>\n          <leafValues>\n            1.4135900139808655e-01 -5.0010901689529419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1827 9.6239997074007988e-03</internalNodes>\n          <leafValues>\n            -2.2054600715637207e-01 3.9191201329231262e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1828 2.5510000996291637e-03</internalNodes>\n          <leafValues>\n            -1.1381500214338303e-01 2.0032300055027008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1829 3.1847000122070312e-02</internalNodes>\n          <leafValues>\n            2.5476999580860138e-02 -5.3326398134231567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1830 3.3055000007152557e-02</internalNodes>\n          <leafValues>\n            1.7807699739933014e-01 -6.2793898582458496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1831 4.7600999474525452e-02</internalNodes>\n          <leafValues>\n            -1.4747899770736694e-01 1.4204180240631104e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1832 -1.9571999087929726e-02</internalNodes>\n          <leafValues>\n            -5.2693498134613037e-01 1.5838600695133209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1833 -5.4730001837015152e-02</internalNodes>\n          <leafValues>\n            8.8231599330902100e-01 -1.6627800464630127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1834 -2.2686000913381577e-02</internalNodes>\n          <leafValues>\n            -4.8386898636817932e-01 1.5000100433826447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1835 1.0713200271129608e-01</internalNodes>\n          <leafValues>\n            -2.1336199343204498e-01 4.2333900928497314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1836 -3.6380000412464142e-02</internalNodes>\n          <leafValues>\n            -7.4198000133037567e-02 1.4589400589466095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1837 1.3935999944806099e-02</internalNodes>\n          <leafValues>\n            -2.4911600351333618e-01 2.6771199703216553e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1838 2.0991999655961990e-02</internalNodes>\n          <leafValues>\n            8.7959999218583107e-03 4.3064999580383301e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1839 4.9118999391794205e-02</internalNodes>\n          <leafValues>\n            -1.7591999471187592e-01 6.9282901287078857e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1840 3.6315999925136566e-02</internalNodes>\n          <leafValues>\n            1.3145299255847931e-01 -3.3597299456596375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1841 4.1228000074625015e-02</internalNodes>\n          <leafValues>\n            -4.5692000538110733e-02 -1.3515930175781250e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1842 1.5672000125050545e-02</internalNodes>\n          <leafValues>\n            1.7544099688529968e-01 -6.0550000518560410e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1843 -1.6286000609397888e-02</internalNodes>\n          <leafValues>\n            -1.1308189630508423e+00 -3.9533000439405441e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1844 -3.0229999683797359e-03</internalNodes>\n          <leafValues>\n            -2.2454300522804260e-01 2.3628099262714386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1845 -1.3786299526691437e-01</internalNodes>\n          <leafValues>\n            4.5376899838447571e-01 -2.1098700165748596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1846 -9.6760001033544540e-03</internalNodes>\n          <leafValues>\n            -1.5105099976062775e-01 2.0781700313091278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1847 -2.4839999154210091e-02</internalNodes>\n          <leafValues>\n            -6.8350297212600708e-01 -8.0040004104375839e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1848 -1.3964399695396423e-01</internalNodes>\n          <leafValues>\n            6.5011298656463623e-01 4.6544000506401062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1849 -8.2153998315334320e-02</internalNodes>\n          <leafValues>\n            4.4887199997901917e-01 -2.3591999709606171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1850 3.8449999410659075e-03</internalNodes>\n          <leafValues>\n            -8.8173002004623413e-02 2.7346798777580261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1851 -6.6579999402165413e-03</internalNodes>\n          <leafValues>\n            -4.6866598725318909e-01 7.7001996338367462e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1852 -1.5898000448942184e-02</internalNodes>\n          <leafValues>\n            2.9268398880958557e-01 -2.1941000595688820e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1853 -5.0946000963449478e-02</internalNodes>\n          <leafValues>\n            -1.2093789577484131e+00 -4.2109999805688858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1854 1.6837999224662781e-02</internalNodes>\n          <leafValues>\n            -4.5595999807119370e-02 5.0180697441101074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1855 1.5918999910354614e-02</internalNodes>\n          <leafValues>\n            -2.6904299855232239e-01 2.6516300439834595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1856 3.6309999413788319e-03</internalNodes>\n          <leafValues>\n            -1.3046100735664368e-01 3.1807100772857666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1857 -8.6144998669624329e-02</internalNodes>\n          <leafValues>\n            1.9443659782409668e+00 -1.3978299498558044e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1858 3.3140998333692551e-02</internalNodes>\n          <leafValues>\n            1.5266799926757812e-01 -3.0866000801324844e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1859 -3.9679999463260174e-03</internalNodes>\n          <leafValues>\n            -7.1202301979064941e-01 -1.3844000175595284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1860 -2.4008000269532204e-02</internalNodes>\n          <leafValues>\n            9.2007797956466675e-01 4.6723999083042145e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1861 8.7320003658533096e-03</internalNodes>\n          <leafValues>\n            -2.2567300498485565e-01 3.1931799650192261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1862 -2.7786999940872192e-02</internalNodes>\n          <leafValues>\n            -7.2337102890014648e-01 1.7018599808216095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1863 -1.9455300271511078e-01</internalNodes>\n          <leafValues>\n            1.2461860179901123e+00 -1.4736199378967285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1864 -1.0869699716567993e-01</internalNodes>\n          <leafValues>\n            -1.4465179443359375e+00 1.2145300209522247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1865 -1.9494999200105667e-02</internalNodes>\n          <leafValues>\n            -7.8153097629547119e-01 -2.3732999339699745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1866 3.0650000553578138e-03</internalNodes>\n          <leafValues>\n            -8.5471397638320923e-01 1.6686999797821045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1867 5.9193998575210571e-02</internalNodes>\n          <leafValues>\n            -1.4853699505329132e-01 1.1273469924926758e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1868 -5.4207999259233475e-02</internalNodes>\n          <leafValues>\n            5.4726999998092651e-01 3.5523999482393265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1869 -3.9324998855590820e-02</internalNodes>\n          <leafValues>\n            3.6642599105834961e-01 -2.0543999969959259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1870 8.2278996706008911e-02</internalNodes>\n          <leafValues>\n            -3.5007998347282410e-02 5.3994202613830566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1871 -7.4479999020695686e-03</internalNodes>\n          <leafValues>\n            -6.1537498235702515e-01 -3.5319998860359192e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1872 7.3770000599324703e-03</internalNodes>\n          <leafValues>\n            -6.5591000020503998e-02 4.1961398720741272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1873 7.0779998786747456e-03</internalNodes>\n          <leafValues>\n            -3.4129500389099121e-01 1.2536799907684326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1874 -1.5581999905407429e-02</internalNodes>\n          <leafValues>\n            -3.0240398645401001e-01 2.1511000394821167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1875 -2.7399999089539051e-03</internalNodes>\n          <leafValues>\n            7.6553001999855042e-02 -4.1060501337051392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1876 -7.0600003004074097e-02</internalNodes>\n          <leafValues>\n            -9.7356200218200684e-01 1.1241800338029861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1877 -1.1706000193953514e-02</internalNodes>\n          <leafValues>\n            1.8560700118541718e-01 -2.9755198955535889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1878 7.1499997284263372e-04</internalNodes>\n          <leafValues>\n            -5.9650000184774399e-02 2.4824699759483337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1879 -3.6866001784801483e-02</internalNodes>\n          <leafValues>\n            3.2751700282096863e-01 -2.3059600591659546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1880 -3.2526999711990356e-02</internalNodes>\n          <leafValues>\n            -2.9320299625396729e-01 1.5427699685096741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1881 -7.4813999235630035e-02</internalNodes>\n          <leafValues>\n            -1.2143570184707642e+00 -5.2244000136852264e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1882 4.1469998657703400e-02</internalNodes>\n          <leafValues>\n            1.3062499463558197e-01 -2.3274369239807129e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1883 -2.8880000114440918e-02</internalNodes>\n          <leafValues>\n            -6.6074597835540771e-01 -9.0960003435611725e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1884 4.6381998807191849e-02</internalNodes>\n          <leafValues>\n            1.6630199551582336e-01 -6.6949498653411865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1885 2.5424998998641968e-01</internalNodes>\n          <leafValues>\n            -5.4641999304294586e-02 -1.2676080465316772e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1886 2.4000001139938831e-03</internalNodes>\n          <leafValues>\n            2.0276799798011780e-01 1.4667999930679798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1887 -8.2805998623371124e-02</internalNodes>\n          <leafValues>\n            -7.8713601827621460e-01 -2.4468999356031418e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1888 -1.1438000015914440e-02</internalNodes>\n          <leafValues>\n            2.8623399138450623e-01 -3.0894000083208084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1889 -1.2913399934768677e-01</internalNodes>\n          <leafValues>\n            1.7292929887771606e+00 -1.4293900132179260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1890 3.8552999496459961e-02</internalNodes>\n          <leafValues>\n            1.9232999533414841e-02 3.7732601165771484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1891 1.0191400349140167e-01</internalNodes>\n          <leafValues>\n            -7.4533998966217041e-02 -3.3868899345397949e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1892 -1.9068000838160515e-02</internalNodes>\n          <leafValues>\n            3.1814101338386536e-01 1.9261000677943230e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1893 -6.0775000602006912e-02</internalNodes>\n          <leafValues>\n            7.6936298608779907e-01 -1.7644000053405762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1894 2.4679999798536301e-02</internalNodes>\n          <leafValues>\n            1.8396499752998352e-01 -3.0868801474571228e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1895 2.6759000495076180e-02</internalNodes>\n          <leafValues>\n            -2.3454900085926056e-01 3.3056598901748657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1896 1.4969999901950359e-02</internalNodes>\n          <leafValues>\n            1.7213599383831024e-01 -1.8248899281024933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1897 2.6142999529838562e-02</internalNodes>\n          <leafValues>\n            -4.6463999897241592e-02 -1.1318379640579224e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1898 -3.7512000650167465e-02</internalNodes>\n          <leafValues>\n            8.0404001474380493e-01 6.9660000503063202e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1899 -5.3229997865855694e-03</internalNodes>\n          <leafValues>\n            -8.1884402036666870e-01 -1.8224999308586121e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1900 1.7813000828027725e-02</internalNodes>\n          <leafValues>\n            1.4957800507545471e-01 -1.8667200207710266e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1901 -3.4010000526905060e-02</internalNodes>\n          <leafValues>\n            -7.2852301597595215e-01 -1.6615999862551689e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1902 -1.5953000634908676e-02</internalNodes>\n          <leafValues>\n            5.6944000720977783e-01 1.3832000084221363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1903 1.9743999466300011e-02</internalNodes>\n          <leafValues>\n            4.0525000542402267e-02 -4.1773399710655212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1904 -1.0374800115823746e-01</internalNodes>\n          <leafValues>\n            -1.9825149774551392e+00 1.1960200220346451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1905 -1.9285000860691071e-02</internalNodes>\n          <leafValues>\n            5.0230598449707031e-01 -1.9745899736881256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1906 -1.2780000455677509e-02</internalNodes>\n          <leafValues>\n            4.0195000171661377e-01 -2.6957999914884567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1907 -1.6352999955415726e-02</internalNodes>\n          <leafValues>\n            -7.6608800888061523e-01 -2.4209000170230865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1908 -1.2763699889183044e-01</internalNodes>\n          <leafValues>\n            8.6578500270843506e-01 6.4205996692180634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1909 1.9068999215960503e-02</internalNodes>\n          <leafValues>\n            -5.5929797887802124e-01 -1.6880000475794077e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1910 3.2480999827384949e-02</internalNodes>\n          <leafValues>\n            4.0722001343965530e-02 4.8925098776817322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1911 9.4849998131394386e-03</internalNodes>\n          <leafValues>\n            -1.9231900572776794e-01 5.1139700412750244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1912 5.0470000132918358e-03</internalNodes>\n          <leafValues>\n            1.8706800043582916e-01 -1.6113600134849548e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1913 4.1267998516559601e-02</internalNodes>\n          <leafValues>\n            -4.8817999660968781e-02 -1.1326299905776978e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1914 -7.6358996331691742e-02</internalNodes>\n          <leafValues>\n            1.4169390201568604e+00 8.7319999933242798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1915 -7.2834998369216919e-02</internalNodes>\n          <leafValues>\n            1.3189860582351685e+00 -1.4819100499153137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1916 5.9576999396085739e-02</internalNodes>\n          <leafValues>\n            4.8376999795436859e-02 8.5611802339553833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1917 2.0263999700546265e-02</internalNodes>\n          <leafValues>\n            -2.1044099330902100e-01 3.3858999609947205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1918 -8.0301001667976379e-02</internalNodes>\n          <leafValues>\n            -1.2464400529861450e+00 1.1857099831104279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1919 -1.7835000529885292e-02</internalNodes>\n          <leafValues>\n            2.5782299041748047e-01 -2.4564799666404724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1920 1.1431000195443630e-02</internalNodes>\n          <leafValues>\n            2.2949799895286560e-01 -2.9497599601745605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1921 -2.5541000068187714e-02</internalNodes>\n          <leafValues>\n            -8.6252999305725098e-01 -7.0400000549852848e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1922 -7.6899997657164931e-04</internalNodes>\n          <leafValues>\n            3.1511399149894714e-01 -1.4349000155925751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1923 -1.4453999698162079e-02</internalNodes>\n          <leafValues>\n            2.5148499011993408e-01 -2.8232899308204651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1924 8.6730001494288445e-03</internalNodes>\n          <leafValues>\n            2.6601400971412659e-01 -2.8190800547599792e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>197</maxWeakCount>\n      <stageThreshold>-3.2772979736328125e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1925 5.4708998650312424e-02</internalNodes>\n          <leafValues>\n            -5.4144299030303955e-01 6.1043000221252441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1926 -1.0838799923658371e-01</internalNodes>\n          <leafValues>\n            7.1739900112152100e-01 -4.1196098923683167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1927 2.2996999323368073e-02</internalNodes>\n          <leafValues>\n            -5.8269798755645752e-01 2.9645600914955139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1928 2.7540000155568123e-03</internalNodes>\n          <leafValues>\n            -7.4243897199630737e-01 1.4183300733566284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1929 -2.1520000882446766e-03</internalNodes>\n          <leafValues>\n            1.7879900336265564e-01 -6.8548601865768433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1930 -2.2559000179171562e-02</internalNodes>\n          <leafValues>\n            -1.0775549411773682e+00 1.2388999760150909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1931 8.3025000989437103e-02</internalNodes>\n          <leafValues>\n            2.4500999599695206e-02 -1.0251879692077637e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1932 -6.6740000620484352e-03</internalNodes>\n          <leafValues>\n            -4.5283100008964539e-01 2.1230199933052063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1933 7.6485000550746918e-02</internalNodes>\n          <leafValues>\n            -2.6972699165344238e-01 4.8580199480056763e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1934 5.4910001344978809e-03</internalNodes>\n          <leafValues>\n            -4.8871201276779175e-01 3.1616398692131042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1935 -1.0414999909698963e-02</internalNodes>\n          <leafValues>\n            4.1512900590896606e-01 -3.0044800043106079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1936 2.7607999742031097e-02</internalNodes>\n          <leafValues>\n            1.6203799843788147e-01 -9.9868500232696533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1937 -2.3272000253200531e-02</internalNodes>\n          <leafValues>\n            -1.1024399995803833e+00 2.1124999970197678e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1938 -5.5619999766349792e-02</internalNodes>\n          <leafValues>\n            6.5033102035522461e-01 -2.7938000857830048e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1939 -4.0631998330354691e-02</internalNodes>\n          <leafValues>\n            4.2117300629615784e-01 -2.6763799786567688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1940 -7.3560001328587532e-03</internalNodes>\n          <leafValues>\n            3.5277798771858215e-01 -3.7854000926017761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1941 1.7007000744342804e-02</internalNodes>\n          <leafValues>\n            -2.9189500212669373e-01 4.1053798794746399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1942 -3.7034001201391220e-02</internalNodes>\n          <leafValues>\n            -1.3216309547424316e+00 1.2966500222682953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1943 -1.9633000716567039e-02</internalNodes>\n          <leafValues>\n            -8.7702298164367676e-01 1.0799999581649899e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1944 -2.3546999320387840e-02</internalNodes>\n          <leafValues>\n            2.6106101274490356e-01 -2.1481400728225708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1945 -4.3352998793125153e-02</internalNodes>\n          <leafValues>\n            -9.9089699983596802e-01 -9.9560003727674484e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1946 -2.2183999419212341e-02</internalNodes>\n          <leafValues>\n            6.3454401493072510e-01 -5.6547001004219055e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1947 1.6530999913811684e-02</internalNodes>\n          <leafValues>\n            2.4664999917149544e-02 -7.3326802253723145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1948 -3.2744001597166061e-02</internalNodes>\n          <leafValues>\n            -5.6297200918197632e-01 1.6640299558639526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1949 7.1415998041629791e-02</internalNodes>\n          <leafValues>\n            -3.0000001424923539e-04 -9.3286401033401489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1950 8.0999999772757292e-04</internalNodes>\n          <leafValues>\n            -9.5380000770092010e-02 2.5184699892997742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1951 -8.4090000018477440e-03</internalNodes>\n          <leafValues>\n            -6.5496802330017090e-01 6.7300997674465179e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1952 -1.7254000529646873e-02</internalNodes>\n          <leafValues>\n            -4.6492999792098999e-01 1.6070899367332458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1953 -1.8641000613570213e-02</internalNodes>\n          <leafValues>\n            -1.0594010353088379e+00 -1.9617000594735146e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1954 -9.1979997232556343e-03</internalNodes>\n          <leafValues>\n            5.0716197490692139e-01 -1.5339200198650360e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1955 1.8538000062108040e-02</internalNodes>\n          <leafValues>\n            -3.0498200654983521e-01 7.3506200313568115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1956 -5.0335001200437546e-02</internalNodes>\n          <leafValues>\n            -1.1140480041503906e+00 1.8000100553035736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1957 -2.3529000580310822e-02</internalNodes>\n          <leafValues>\n            -8.6907899379730225e-01 -1.2459999881684780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1958 -2.7100000530481339e-02</internalNodes>\n          <leafValues>\n            6.5942901372909546e-01 -3.5323999822139740e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1959 6.5879998728632927e-03</internalNodes>\n          <leafValues>\n            -2.2953400015830994e-01 4.2425099015235901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1960 2.3360000923275948e-02</internalNodes>\n          <leafValues>\n            1.8356199562549591e-01 -9.8587298393249512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1961 1.2946999631822109e-02</internalNodes>\n          <leafValues>\n            -3.3147400617599487e-01 2.1323199570178986e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1962 -6.6559999249875546e-03</internalNodes>\n          <leafValues>\n            -1.1951400339603424e-01 2.9752799868583679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1963 -2.2570999339222908e-02</internalNodes>\n          <leafValues>\n            3.8499400019645691e-01 -2.4434499442577362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1964 -6.3813999295234680e-02</internalNodes>\n          <leafValues>\n            -8.9383500814437866e-01 1.4217500388622284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1965 -4.9945000559091568e-02</internalNodes>\n          <leafValues>\n            5.3864401578903198e-01 -2.0485299825668335e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1966 6.8319998681545258e-03</internalNodes>\n          <leafValues>\n            -5.6678999215364456e-02 3.9970999956130981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1967 -5.5835999548435211e-02</internalNodes>\n          <leafValues>\n            -1.5239470005035400e+00 -5.1183000206947327e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1968 3.1957000494003296e-01</internalNodes>\n          <leafValues>\n            7.4574001133441925e-02 1.2447799444198608e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1969 8.0955997109413147e-02</internalNodes>\n          <leafValues>\n            -1.9665500521659851e-01 5.9889698028564453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1970 -1.4911999925971031e-02</internalNodes>\n          <leafValues>\n            -6.4020597934722900e-01 1.5807600319385529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1971 4.6709001064300537e-02</internalNodes>\n          <leafValues>\n            8.5239000618457794e-02 -4.5487201213836670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1972 6.0539999976754189e-03</internalNodes>\n          <leafValues>\n            -4.3184000253677368e-01 2.2452600300312042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1973 -3.4375999122858047e-02</internalNodes>\n          <leafValues>\n            4.0202501416206360e-01 -2.3903599381446838e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1974 -3.4924000501632690e-02</internalNodes>\n          <leafValues>\n            5.2870100736618042e-01 3.9709001779556274e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1975 3.0030000489205122e-03</internalNodes>\n          <leafValues>\n            -3.8754299283027649e-01 1.4192600548267365e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1976 -1.4132999815046787e-02</internalNodes>\n          <leafValues>\n            8.7528401613235474e-01 8.5507996380329132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1977 -6.7940000444650650e-03</internalNodes>\n          <leafValues>\n            -1.1649219989776611e+00 -3.3943001180887222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1978 -5.2886001765727997e-02</internalNodes>\n          <leafValues>\n            1.0930680036544800e+00 5.1187001168727875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1979 -2.1079999860376120e-03</internalNodes>\n          <leafValues>\n            1.3696199655532837e-01 -3.3849999308586121e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1980 1.8353000283241272e-02</internalNodes>\n          <leafValues>\n            1.3661600649356842e-01 -4.0777799487113953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1981 1.2671999633312225e-02</internalNodes>\n          <leafValues>\n            -1.4936000108718872e-02 -8.1707501411437988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1982 1.2924999929964542e-02</internalNodes>\n          <leafValues>\n            1.7625099420547485e-01 -3.2491698861122131e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1983 -1.7921000719070435e-02</internalNodes>\n          <leafValues>\n            -5.2745401859283447e-01 4.4443000108003616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1984 1.9160000374540687e-03</internalNodes>\n          <leafValues>\n            -1.0978599637746811e-01 2.2067500650882721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1985 -1.4697999693453312e-02</internalNodes>\n          <leafValues>\n            3.9067798852920532e-01 -2.2224999964237213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1986 -1.4972999691963196e-02</internalNodes>\n          <leafValues>\n            -2.5450900197029114e-01 1.7790000140666962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1987 1.4636999927461147e-02</internalNodes>\n          <leafValues>\n            -2.5125000625848770e-02 -8.7121301889419556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1988 -1.0974000208079815e-02</internalNodes>\n          <leafValues>\n            7.9082798957824707e-01 2.0121000707149506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1989 -9.1599998995661736e-03</internalNodes>\n          <leafValues>\n            -4.7906899452209473e-01 5.2232000976800919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1990 4.6179997734725475e-03</internalNodes>\n          <leafValues>\n            -1.7244599759578705e-01 3.4527799487113953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1991 2.3476999253034592e-02</internalNodes>\n          <leafValues>\n            3.7760001141577959e-03 -6.5333700180053711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1992 3.1766999512910843e-02</internalNodes>\n          <leafValues>\n            1.6364000737667084e-02 5.8723700046539307e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1993 -1.8419999629259109e-02</internalNodes>\n          <leafValues>\n            1.9993899762630463e-01 -3.2056498527526855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1994 1.9543999806046486e-02</internalNodes>\n          <leafValues>\n            1.8450200557708740e-01 -2.3793600499629974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1995 4.1159498691558838e-01</internalNodes>\n          <leafValues>\n            -6.0382001101970673e-02 -1.6072119474411011e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1996 -4.1595999151468277e-02</internalNodes>\n          <leafValues>\n            -3.2756200432777405e-01 1.5058000385761261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1997 -1.0335999540984631e-02</internalNodes>\n          <leafValues>\n            -6.2394398450851440e-01 1.3112000189721584e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1998 1.2392999604344368e-02</internalNodes>\n          <leafValues>\n            -3.3114999532699585e-02 5.5579900741577148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1999 -8.7270000949501991e-03</internalNodes>\n          <leafValues>\n            1.9883200526237488e-01 -3.7635600566864014e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2000 1.6295000910758972e-02</internalNodes>\n          <leafValues>\n            2.0373000204563141e-01 -4.2800799012184143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2001 -1.0483999736607075e-02</internalNodes>\n          <leafValues>\n            -5.6847000122070312e-01 4.4199001044034958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2002 -1.2431999668478966e-02</internalNodes>\n          <leafValues>\n            7.4641901254653931e-01 4.3678998947143555e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2003 -5.0374999642372131e-02</internalNodes>\n          <leafValues>\n            8.5090100765228271e-01 -1.7773799598217010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2004 4.9548000097274780e-02</internalNodes>\n          <leafValues>\n            1.6784900426864624e-01 -2.9877498745918274e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2005 -4.1085001081228256e-02</internalNodes>\n          <leafValues>\n            -1.3302919864654541e+00 -4.9182001501321793e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2006 1.0069999843835831e-03</internalNodes>\n          <leafValues>\n            -6.0538999736309052e-02 1.8483200669288635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2007 -5.0142999738454819e-02</internalNodes>\n          <leafValues>\n            7.6447701454162598e-01 -1.8356999754905701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2008 -8.7879998609423637e-03</internalNodes>\n          <leafValues>\n            2.2655999660491943e-01 -6.3156999647617340e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2009 -5.0170999020338058e-02</internalNodes>\n          <leafValues>\n            -1.5899070501327515e+00 -6.1255000531673431e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2010 1.0216099768877029e-01</internalNodes>\n          <leafValues>\n            1.2071800231933594e-01 -1.4120110273361206e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2011 -1.4372999779880047e-02</internalNodes>\n          <leafValues>\n            -1.3116970062255859e+00 -5.1936000585556030e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2012 1.0281999595463276e-02</internalNodes>\n          <leafValues>\n            -2.1639999467879534e-03 4.4247201085090637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2013 -1.1814000084996223e-02</internalNodes>\n          <leafValues>\n            6.5378099679946899e-01 -1.8723699450492859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2014 7.2114996612071991e-02</internalNodes>\n          <leafValues>\n            7.1846999228000641e-02 8.1496298313140869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2015 -1.9001999869942665e-02</internalNodes>\n          <leafValues>\n            -6.7427200078964233e-01 -4.3200000072829425e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2016 -4.6990001574158669e-03</internalNodes>\n          <leafValues>\n            3.3311501145362854e-01 5.5794000625610352e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2017 -5.8157000690698624e-02</internalNodes>\n          <leafValues>\n            4.5572298765182495e-01 -2.0305100083351135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2018 1.1360000353306532e-03</internalNodes>\n          <leafValues>\n            -4.4686999171972275e-02 2.2681899368762970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2019 -4.9414999783039093e-02</internalNodes>\n          <leafValues>\n            2.6694598793983459e-01 -2.6116999983787537e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2020 -1.1913800239562988e-01</internalNodes>\n          <leafValues>\n            -8.3017998933792114e-01 1.3248500227928162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2021 -1.8303999677300453e-02</internalNodes>\n          <leafValues>\n            -6.7499202489852905e-01 1.7092000693082809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2022 -7.9199997708201408e-03</internalNodes>\n          <leafValues>\n            -7.2287000715732574e-02 1.4425800740718842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2023 5.1925998181104660e-02</internalNodes>\n          <leafValues>\n            3.0921999365091324e-02 -5.5860602855682373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2024 6.6724002361297607e-02</internalNodes>\n          <leafValues>\n            1.3666400313377380e-01 -2.9411000013351440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2025 -1.3778000138700008e-02</internalNodes>\n          <leafValues>\n            -5.9443902969360352e-01 1.5300000086426735e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2026 -1.7760999500751495e-02</internalNodes>\n          <leafValues>\n            4.0496501326560974e-01 -3.3559999428689480e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2027 -4.2234998196363449e-02</internalNodes>\n          <leafValues>\n            -1.0897940397262573e+00 -4.0224999189376831e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2028 -1.3524999842047691e-02</internalNodes>\n          <leafValues>\n            2.8921899199485779e-01 -2.5194799900054932e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2029 -1.1106000281870365e-02</internalNodes>\n          <leafValues>\n            6.5312802791595459e-01 -1.8053700029850006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2030 -1.2284599989652634e-01</internalNodes>\n          <leafValues>\n            -1.9570649862289429e+00 1.4815400540828705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2031 4.7715999186038971e-02</internalNodes>\n          <leafValues>\n            -2.2875599563121796e-01 3.4233701229095459e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2032 3.1817000359296799e-02</internalNodes>\n          <leafValues>\n            1.5976299345493317e-01 -1.0091969966888428e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2033 4.2570000514388084e-03</internalNodes>\n          <leafValues>\n            -3.8881298899650574e-01 8.4210000932216644e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2034 -6.1372999101877213e-02</internalNodes>\n          <leafValues>\n            1.7152810096740723e+00 5.9324998408555984e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2035 -2.7030000928789377e-03</internalNodes>\n          <leafValues>\n            -3.8161700963973999e-01 8.5127003490924835e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2036 -6.8544000387191772e-02</internalNodes>\n          <leafValues>\n            -3.0925889015197754e+00 1.1788000166416168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2037 1.0372500121593475e-01</internalNodes>\n          <leafValues>\n            -1.3769300282001495e-01 1.9009410142898560e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2038 1.5799000859260559e-02</internalNodes>\n          <leafValues>\n            -6.2660001218318939e-02 2.5917699933052063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2039 -9.8040001466870308e-03</internalNodes>\n          <leafValues>\n            -5.6291598081588745e-01 4.3923001736402512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2040 -9.0229995548725128e-03</internalNodes>\n          <leafValues>\n            2.5287100672721863e-01 -4.1225999593734741e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2041 -6.3754998147487640e-02</internalNodes>\n          <leafValues>\n            -2.6178569793701172e+00 -7.4005998671054840e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2042 3.8954999297857285e-02</internalNodes>\n          <leafValues>\n            5.9032998979091644e-02 8.5945600271224976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2043 -3.9802998304367065e-02</internalNodes>\n          <leafValues>\n            9.3600499629974365e-01 -1.5639400482177734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2044 5.0301998853683472e-02</internalNodes>\n          <leafValues>\n            1.3725900650024414e-01 -2.5549728870391846e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2045 4.6250000596046448e-02</internalNodes>\n          <leafValues>\n            -1.3964000158011913e-02 -7.1026200056076050e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2046 6.2196001410484314e-02</internalNodes>\n          <leafValues>\n            5.9526000171899796e-02 1.6509100198745728e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2047 -6.4776003360748291e-02</internalNodes>\n          <leafValues>\n            7.1368998289108276e-01 -1.7270000278949738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2048 2.7522999793291092e-02</internalNodes>\n          <leafValues>\n            1.4631600677967072e-01 -8.1428997218608856e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2049 3.9900001138448715e-04</internalNodes>\n          <leafValues>\n            -3.7144500017166138e-01 1.0152699798345566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2050 -4.3299999088048935e-03</internalNodes>\n          <leafValues>\n            -2.3756299912929535e-01 2.6798400282859802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2051 4.7297000885009766e-02</internalNodes>\n          <leafValues>\n            -2.7682000771164894e-02 -8.4910297393798828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2052 1.2508999556303024e-02</internalNodes>\n          <leafValues>\n            1.8730199337005615e-01 -5.6001102924346924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2053 4.5899000018835068e-02</internalNodes>\n          <leafValues>\n            -1.5601199865341187e-01 9.7073000669479370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2054 1.9853399693965912e-01</internalNodes>\n          <leafValues>\n            1.4895500242710114e-01 -1.1015529632568359e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2055 1.6674999147653580e-02</internalNodes>\n          <leafValues>\n            -1.6615299880504608e-01 8.2210999727249146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2056 1.9829999655485153e-03</internalNodes>\n          <leafValues>\n            -7.1249999105930328e-02 2.8810900449752808e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2057 2.2447999566793442e-02</internalNodes>\n          <leafValues>\n            -2.0981000736355782e-02 -7.8416502475738525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2058 -1.3913000002503395e-02</internalNodes>\n          <leafValues>\n            -1.8165799975395203e-01 2.0491799712181091e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2059 -7.7659999951720238e-03</internalNodes>\n          <leafValues>\n            -4.5595899224281311e-01 6.3576996326446533e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2060 -1.3209000229835510e-02</internalNodes>\n          <leafValues>\n            2.6632300019264221e-01 -1.7795999348163605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2061 4.9052998423576355e-02</internalNodes>\n          <leafValues>\n            -1.5476800501346588e-01 1.1069979667663574e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2062 2.0263999700546265e-02</internalNodes>\n          <leafValues>\n            6.8915002048015594e-02 6.9867497682571411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2063 -1.6828000545501709e-02</internalNodes>\n          <leafValues>\n            2.7607199549674988e-01 -2.5139200687408447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2064 -1.6939499974250793e-01</internalNodes>\n          <leafValues>\n            -3.0767529010772705e+00 1.1617500334978104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2065 -1.1336100101470947e-01</internalNodes>\n          <leafValues>\n            -1.4639229774475098e+00 -5.1447000354528427e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2066 -7.7685996890068054e-02</internalNodes>\n          <leafValues>\n            8.8430202007293701e-01 4.3306998908519745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2067 -1.5568000264465809e-02</internalNodes>\n          <leafValues>\n            1.3672499358654022e-01 -3.4505501389503479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2068 -6.6018998622894287e-02</internalNodes>\n          <leafValues>\n            -1.0300110578536987e+00 1.1601399630308151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2069 8.3699999377131462e-03</internalNodes>\n          <leafValues>\n            7.6429001986980438e-02 -4.4002500176429749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2070 3.5402998328208923e-02</internalNodes>\n          <leafValues>\n            1.1979500204324722e-01 -7.2668302059173584e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2071 -3.9051000028848648e-02</internalNodes>\n          <leafValues>\n            6.7375302314758301e-01 -1.8196000158786774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2072 -9.7899995744228363e-03</internalNodes>\n          <leafValues>\n            2.1264599263668060e-01 3.6756001412868500e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2073 -2.3047000169754028e-02</internalNodes>\n          <leafValues>\n            4.4742199778556824e-01 -2.0986700057983398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2074 3.1169999856501818e-03</internalNodes>\n          <leafValues>\n            3.7544000893831253e-02 2.7808201313018799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2075 1.3136000372469425e-02</internalNodes>\n          <leafValues>\n            -1.9842399656772614e-01 5.4335701465606689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2076 1.4782000333070755e-02</internalNodes>\n          <leafValues>\n            1.3530600070953369e-01 -1.1153600364923477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2077 -6.0139000415802002e-02</internalNodes>\n          <leafValues>\n            8.4039300680160522e-01 -1.6711600124835968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2078 5.1998998969793320e-02</internalNodes>\n          <leafValues>\n            1.7372000217437744e-01 -7.8547602891921997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2079 2.4792000651359558e-02</internalNodes>\n          <leafValues>\n            -1.7739200592041016e-01 6.6752600669860840e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2080 -1.2014999985694885e-02</internalNodes>\n          <leafValues>\n            -1.4263699948787689e-01 1.6070500016212463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2081 -9.8655998706817627e-02</internalNodes>\n          <leafValues>\n            1.0429769754409790e+00 -1.5770199894905090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2082 1.1758299916982651e-01</internalNodes>\n          <leafValues>\n            1.0955700278282166e-01 -4.4920377731323242e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2083 -1.8922999501228333e-02</internalNodes>\n          <leafValues>\n            -7.8543400764465332e-01 1.2984000146389008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2084 -2.8390999883413315e-02</internalNodes>\n          <leafValues>\n            -6.0569900274276733e-01 1.2903499603271484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2085 1.3182999566197395e-02</internalNodes>\n          <leafValues>\n            -1.4415999874472618e-02 -7.3210501670837402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2086 -1.1653000116348267e-01</internalNodes>\n          <leafValues>\n            -2.0442469120025635e+00 1.4053100347518921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2087 -3.8880000356584787e-03</internalNodes>\n          <leafValues>\n            -4.1861599683761597e-01 7.8704997897148132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2088 3.1229000538587570e-02</internalNodes>\n          <leafValues>\n            2.4632999673485756e-02 4.1870400309562683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2089 2.5198999792337418e-02</internalNodes>\n          <leafValues>\n            -1.7557799816131592e-01 6.4710599184036255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2090 -2.8124000877141953e-02</internalNodes>\n          <leafValues>\n            -2.2005599737167358e-01 1.4121000468730927e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2091 3.6499001085758209e-02</internalNodes>\n          <leafValues>\n            -6.8426996469497681e-02 -2.3410849571228027e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2092 -7.2292998433113098e-02</internalNodes>\n          <leafValues>\n            1.2898750305175781e+00 8.4875002503395081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2093 -4.1671000421047211e-02</internalNodes>\n          <leafValues>\n            -1.1630970239639282e+00 -5.3752999752759933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2094 4.7703001648187637e-02</internalNodes>\n          <leafValues>\n            7.0101000368595123e-02 7.3676502704620361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2095 6.5793000161647797e-02</internalNodes>\n          <leafValues>\n            -1.7755299806594849e-01 6.9780498743057251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2096 1.3904999941587448e-02</internalNodes>\n          <leafValues>\n            2.1936799585819244e-01 -2.0390799641609192e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2097 -2.7730999514460564e-02</internalNodes>\n          <leafValues>\n            6.1867898702621460e-01 -1.7804099619388580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2098 -1.5879999846220016e-02</internalNodes>\n          <leafValues>\n            -4.6484100818634033e-01 1.8828600645065308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2099 7.4128001928329468e-02</internalNodes>\n          <leafValues>\n            -1.2858100235462189e-01 3.2792479991912842e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2100 -8.9000002481043339e-04</internalNodes>\n          <leafValues>\n            -3.0117601156234741e-01 2.3818799853324890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2101 1.7965000122785568e-02</internalNodes>\n          <leafValues>\n            -2.2284999489784241e-01 2.9954001307487488e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2102 -2.5380000006407499e-03</internalNodes>\n          <leafValues>\n            2.5064399838447571e-01 -1.3665600121021271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2103 -9.0680001303553581e-03</internalNodes>\n          <leafValues>\n            2.9017499089241028e-01 -2.8929701447486877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2104 4.9169998615980148e-02</internalNodes>\n          <leafValues>\n            1.9156399369239807e-01 -6.8328702449798584e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2105 -3.0680999159812927e-02</internalNodes>\n          <leafValues>\n            -7.5677001476287842e-01 -1.3279999606311321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2106 1.0017400234937668e-01</internalNodes>\n          <leafValues>\n            8.4453999996185303e-02 1.0888710021972656e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2107 3.1950001139193773e-03</internalNodes>\n          <leafValues>\n            -2.6919400691986084e-01 1.9537900388240814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2108 3.5503000020980835e-02</internalNodes>\n          <leafValues>\n            1.3632300496101379e-01 -5.6917202472686768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2109 4.5900000259280205e-04</internalNodes>\n          <leafValues>\n            -4.0443998575210571e-01 1.4074799418449402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2110 2.5258999317884445e-02</internalNodes>\n          <leafValues>\n            1.6243200004100800e-01 -5.5741798877716064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2111 -5.1549999043345451e-03</internalNodes>\n          <leafValues>\n            3.1132599711418152e-01 -2.2756099700927734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2112 1.5869999770075083e-03</internalNodes>\n          <leafValues>\n            -2.6867699623107910e-01 1.9565400481224060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2113 -1.6204999759793282e-02</internalNodes>\n          <leafValues>\n            1.5486499667167664e-01 -3.4057798981666565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2114 -2.9624000191688538e-02</internalNodes>\n          <leafValues>\n            1.1466799974441528e+00 9.0557999908924103e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2115 -1.5930000226944685e-03</internalNodes>\n          <leafValues>\n            -7.1257501840591431e-01 -7.0400000549852848e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2116 -5.4019000381231308e-02</internalNodes>\n          <leafValues>\n            4.1537499427795410e-01 2.7246000245213509e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2117 -6.6211000084877014e-02</internalNodes>\n          <leafValues>\n            -1.3340090513229370e+00 -4.7352999448776245e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2118 2.7940999716520309e-02</internalNodes>\n          <leafValues>\n            1.4446300268173218e-01 -5.1518398523330688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2119 2.8957000002264977e-02</internalNodes>\n          <leafValues>\n            -4.9966000020503998e-02 -1.1929039955139160e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2120 -2.0424999296665192e-02</internalNodes>\n          <leafValues>\n            6.3881301879882812e-01 3.8141001015901566e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2121 1.2416999787092209e-02</internalNodes>\n          <leafValues>\n            -2.1547000110149384e-01 4.9477699398994446e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>181</maxWeakCount>\n      <stageThreshold>-3.3196411132812500e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2122 4.3274000287055969e-02</internalNodes>\n          <leafValues>\n            -8.0494397878646851e-01 3.9897298812866211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2123 1.8615500628948212e-01</internalNodes>\n          <leafValues>\n            -3.1655299663543701e-01 6.8877297639846802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2124 3.1860999763011932e-02</internalNodes>\n          <leafValues>\n            -6.4266198873519897e-01 2.5550898909568787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2125 1.4022000133991241e-02</internalNodes>\n          <leafValues>\n            -4.5926600694656372e-01 3.1171199679374695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2126 -6.3029997982084751e-03</internalNodes>\n          <leafValues>\n            4.6026900410652161e-01 -2.7438500523567200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2127 -5.4310001432895660e-03</internalNodes>\n          <leafValues>\n            3.6608600616455078e-01 -2.7205801010131836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2128 1.6822999343276024e-02</internalNodes>\n          <leafValues>\n            2.3476999253034592e-02 -8.8443797826766968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2129 2.6039000600576401e-02</internalNodes>\n          <leafValues>\n            1.7488799989223480e-01 -5.4564702510833740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2130 -2.6720000430941582e-02</internalNodes>\n          <leafValues>\n            -9.6396499872207642e-01 2.3524999618530273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2131 -1.7041999846696854e-02</internalNodes>\n          <leafValues>\n            -7.0848798751831055e-01 2.1468099951744080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2132 5.9569999575614929e-03</internalNodes>\n          <leafValues>\n            7.3601000010967255e-02 -6.8225598335266113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2133 -2.8679999522864819e-03</internalNodes>\n          <leafValues>\n            -7.4935001134872437e-01 2.3803399503231049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2134 -4.3774999678134918e-02</internalNodes>\n          <leafValues>\n            6.8323302268981934e-01 -2.1380299329757690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2135 5.1633000373840332e-02</internalNodes>\n          <leafValues>\n            -1.2566499412059784e-01 6.7523801326751709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2136 8.1780003383755684e-03</internalNodes>\n          <leafValues>\n            7.0689998567104340e-02 -8.0665898323059082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2137 -5.2841998636722565e-02</internalNodes>\n          <leafValues>\n            9.5433902740478516e-01 1.6548000276088715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2138 5.2583999931812286e-02</internalNodes>\n          <leafValues>\n            -2.8414401412010193e-01 4.7129800915718079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2139 -1.2659000232815742e-02</internalNodes>\n          <leafValues>\n            3.8445401191711426e-01 -6.2288001179695129e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2140 1.1694000102579594e-02</internalNodes>\n          <leafValues>\n            5.6000000768108293e-05 -1.0173139572143555e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2141 -2.3918999359011650e-02</internalNodes>\n          <leafValues>\n            8.4921300411224365e-01 5.7399999350309372e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2142 -6.1673998832702637e-02</internalNodes>\n          <leafValues>\n            -9.2571401596069336e-01 -1.7679999582469463e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2143 -1.8279999494552612e-03</internalNodes>\n          <leafValues>\n            -5.4372298717498779e-01 2.4932399392127991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2144 3.5257998853921890e-02</internalNodes>\n          <leafValues>\n            -7.3719997890293598e-03 -9.3963998556137085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2145 -1.8438000231981277e-02</internalNodes>\n          <leafValues>\n            7.2136700153350830e-01 1.0491999797523022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2146 -3.8389001041650772e-02</internalNodes>\n          <leafValues>\n            1.9272600114345551e-01 -3.5832101106643677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2147 9.9720999598503113e-02</internalNodes>\n          <leafValues>\n            1.1354199796915054e-01 -1.6304190158843994e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2148 8.4462001919746399e-02</internalNodes>\n          <leafValues>\n            -5.3420998156070709e-02 -1.6981120109558105e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2149 4.0270000696182251e-02</internalNodes>\n          <leafValues>\n            -1.0783199965953827e-01 5.1926600933074951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2150 5.8935999870300293e-02</internalNodes>\n          <leafValues>\n            -1.8053700029850006e-01 9.5119798183441162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2151 1.4957000315189362e-01</internalNodes>\n          <leafValues>\n            1.6785299777984619e-01 -1.1591869592666626e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2152 6.9399998756125569e-04</internalNodes>\n          <leafValues>\n            2.0491400361061096e-01 -3.3118200302124023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2153 -3.3369001001119614e-02</internalNodes>\n          <leafValues>\n            9.3468099832534790e-01 -2.9639999847859144e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2154 9.3759996816515923e-03</internalNodes>\n          <leafValues>\n            3.7000000011175871e-03 -7.7549797296524048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2155 4.3193999677896500e-02</internalNodes>\n          <leafValues>\n            -2.2040000185370445e-03 7.4589699506759644e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2156 -6.7555002868175507e-02</internalNodes>\n          <leafValues>\n            7.2292101383209229e-01 -1.8404200673103333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2157 -3.1168600916862488e-01</internalNodes>\n          <leafValues>\n            1.0014270544052124e+00 3.4003000706434250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2158 2.9743999242782593e-02</internalNodes>\n          <leafValues>\n            -4.6356000006198883e-02 -1.2781809568405151e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2159 1.0737000033259392e-02</internalNodes>\n          <leafValues>\n            1.4812000095844269e-02 6.6649997234344482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2160 -2.8841000050306320e-02</internalNodes>\n          <leafValues>\n            -9.4222599267959595e-01 -2.0796999335289001e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2161 -5.7649998925626278e-03</internalNodes>\n          <leafValues>\n            -4.3541899323463440e-01 2.3386000096797943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2162 2.8410999104380608e-02</internalNodes>\n          <leafValues>\n            -1.7615799605846405e-01 8.5765302181243896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2163 -2.9007999226450920e-02</internalNodes>\n          <leafValues>\n            5.7978099584579468e-01 2.8565999120473862e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2164 2.4965999647974968e-02</internalNodes>\n          <leafValues>\n            -2.2729000076651573e-02 -9.6773099899291992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2165 1.2036000378429890e-02</internalNodes>\n          <leafValues>\n            -1.4214700460433960e-01 5.1687997579574585e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2166 -4.2514000087976456e-02</internalNodes>\n          <leafValues>\n            9.7273802757263184e-01 -1.8119800090789795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2167 1.0276000015437603e-02</internalNodes>\n          <leafValues>\n            -8.3099998533725739e-02 3.1762799620628357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2168 -6.9191999733448029e-02</internalNodes>\n          <leafValues>\n            -2.0668580532073975e+00 -6.0173999518156052e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2169 -4.6769999898970127e-03</internalNodes>\n          <leafValues>\n            4.4131800532341003e-01 2.3209000006318092e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2170 -1.3923999853432178e-02</internalNodes>\n          <leafValues>\n            2.8606700897216797e-01 -2.9152700304985046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2171 -1.5333999879658222e-02</internalNodes>\n          <leafValues>\n            -5.7414501905441284e-01 2.3063300549983978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2172 -1.0239000432193279e-02</internalNodes>\n          <leafValues>\n            3.4479200839996338e-01 -2.6080399751663208e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2173 -5.0988998264074326e-02</internalNodes>\n          <leafValues>\n            5.6154102087020874e-01 6.1218999326229095e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2174 3.0689999461174011e-02</internalNodes>\n          <leafValues>\n            -1.4772799611091614e-01 1.6378489732742310e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2175 -1.1223999783396721e-02</internalNodes>\n          <leafValues>\n            2.4006199836730957e-01 -4.4864898920059204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2176 -6.2899999320507050e-03</internalNodes>\n          <leafValues>\n            4.3119499087333679e-01 -2.3808999359607697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2177 7.8590996563434601e-02</internalNodes>\n          <leafValues>\n            1.9865000620484352e-02 8.0853801965713501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2178 -1.0178999975323677e-02</internalNodes>\n          <leafValues>\n            1.8193200230598450e-01 -3.2877799868583679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2179 3.1227000057697296e-02</internalNodes>\n          <leafValues>\n            1.4973899722099304e-01 -1.4180339574813843e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2180 4.0196999907493591e-02</internalNodes>\n          <leafValues>\n            -1.9760499894618988e-01 5.8508199453353882e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2181 1.6138000413775444e-02</internalNodes>\n          <leafValues>\n            5.0000002374872565e-04 3.9050000905990601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2182 -4.5519001781940460e-02</internalNodes>\n          <leafValues>\n            1.2646820545196533e+00 -1.5632599592208862e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2183 -1.8130000680685043e-02</internalNodes>\n          <leafValues>\n            6.5148502588272095e-01 1.0235999710857868e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2184 -1.4001999981701374e-02</internalNodes>\n          <leafValues>\n            -1.0344820022583008e+00 -3.2182998955249786e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2185 -3.8816001266241074e-02</internalNodes>\n          <leafValues>\n            -4.7874298691749573e-01 1.6290700435638428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2186 3.1656000763177872e-02</internalNodes>\n          <leafValues>\n            -2.0983399450778961e-01 5.4575902223587036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2187 -1.0839999653398991e-02</internalNodes>\n          <leafValues>\n            5.1898801326751709e-01 -1.5080000273883343e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2188 1.2032999657094479e-02</internalNodes>\n          <leafValues>\n            -2.1107600629329681e-01 7.5937002897262573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2189 7.0772998034954071e-02</internalNodes>\n          <leafValues>\n            1.8048800528049469e-01 -7.4048501253128052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2190 5.3139799833297729e-01</internalNodes>\n          <leafValues>\n            -1.4491699635982513e-01 1.5360039472579956e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2191 -1.4774000272154808e-02</internalNodes>\n          <leafValues>\n            -2.8153699636459351e-01 2.0407299697399139e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2192 -2.2410000674426556e-03</internalNodes>\n          <leafValues>\n            -4.4876301288604736e-01 5.3989000618457794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2193 4.9968000501394272e-02</internalNodes>\n          <leafValues>\n            4.1514001786708832e-02 2.9417100548744202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2194 -4.7701999545097351e-02</internalNodes>\n          <leafValues>\n            3.9674299955368042e-01 -2.8301799297332764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2195 -9.1311000287532806e-02</internalNodes>\n          <leafValues>\n            2.1994259357452393e+00 8.7964996695518494e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2196 3.8070000708103180e-02</internalNodes>\n          <leafValues>\n            -2.8025600314140320e-01 2.5156199932098389e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2197 -1.5538999810814857e-02</internalNodes>\n          <leafValues>\n            3.4157499670982361e-01 1.7924999818205833e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2198 -1.5445999801158905e-02</internalNodes>\n          <leafValues>\n            2.8680199384689331e-01 -2.5135898590087891e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2199 -5.7388000190258026e-02</internalNodes>\n          <leafValues>\n            6.3830000162124634e-01 8.8597998023033142e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2200 -5.9440000914037228e-03</internalNodes>\n          <leafValues>\n            7.9016998410224915e-02 -4.0774899721145630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2201 -6.9968998432159424e-02</internalNodes>\n          <leafValues>\n            -4.4644200801849365e-01 1.7219600081443787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2202 -2.5064999237656593e-02</internalNodes>\n          <leafValues>\n            -9.8270201683044434e-01 -3.5388000309467316e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2203 1.7216000705957413e-02</internalNodes>\n          <leafValues>\n            2.2705900669097900e-01 -8.0550098419189453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2204 -4.4279001653194427e-02</internalNodes>\n          <leafValues>\n            8.3951997756958008e-01 -1.7429600656032562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2205 4.3988998979330063e-02</internalNodes>\n          <leafValues>\n            1.1557199805974960e-01 -1.9666889905929565e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2206 1.5907000750303268e-02</internalNodes>\n          <leafValues>\n            -3.7576001137495041e-02 -1.0311100482940674e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2207 -9.2754997313022614e-02</internalNodes>\n          <leafValues>\n            -1.3530019521713257e+00 1.2141299992799759e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2208 7.1037001907825470e-02</internalNodes>\n          <leafValues>\n            -1.7684300243854523e-01 7.4485200643539429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2209 5.7762000709772110e-02</internalNodes>\n          <leafValues>\n            1.2835599482059479e-01 -4.4444200396537781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2210 -1.6432000324130058e-02</internalNodes>\n          <leafValues>\n            8.0152702331542969e-01 -1.7491699755191803e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2211 2.3939000442624092e-02</internalNodes>\n          <leafValues>\n            1.6144999861717224e-01 -1.2364500015974045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2212 1.2636000290513039e-02</internalNodes>\n          <leafValues>\n            1.5411999821662903e-01 -3.3293798565864563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2213 -5.4347999393939972e-02</internalNodes>\n          <leafValues>\n            -1.8400700092315674e+00 1.4835999906063080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2214 -1.3261999934911728e-02</internalNodes>\n          <leafValues>\n            -8.0838799476623535e-01 -2.7726000174880028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2215 6.1340001411736012e-03</internalNodes>\n          <leafValues>\n            -1.3785000145435333e-01 3.2858499884605408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2216 2.8991000726819038e-02</internalNodes>\n          <leafValues>\n            -2.5516999885439873e-02 -8.3387202024459839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2217 -2.1986000239849091e-02</internalNodes>\n          <leafValues>\n            -7.3739999532699585e-01 1.7887100577354431e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2218 5.3269998170435429e-03</internalNodes>\n          <leafValues>\n            -4.5449298620223999e-01 6.8791002035140991e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2219 8.6047999560832977e-02</internalNodes>\n          <leafValues>\n            2.1008500456809998e-01 -3.7808901071548462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2220 -8.5549997165799141e-03</internalNodes>\n          <leafValues>\n            4.0134999155998230e-01 -2.1074099838733673e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2221 6.7790001630783081e-03</internalNodes>\n          <leafValues>\n            -2.1648999303579330e-02 4.5421499013900757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2222 -6.3959998078644276e-03</internalNodes>\n          <leafValues>\n            -4.9818599224090576e-01 7.5907997786998749e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2223 8.9469999074935913e-03</internalNodes>\n          <leafValues>\n            1.7857700586318970e-01 -2.8454899787902832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2224 3.2589999027550220e-03</internalNodes>\n          <leafValues>\n            4.6624999493360519e-02 -5.5206298828125000e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2225 4.1476998478174210e-02</internalNodes>\n          <leafValues>\n            1.7550499737262726e-01 -2.0703999698162079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2226 -6.7449999041855335e-03</internalNodes>\n          <leafValues>\n            -4.6392598748207092e-01 6.9303996860980988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2227 3.0564999207854271e-02</internalNodes>\n          <leafValues>\n            5.1734998822212219e-02 7.5550502538681030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2228 -7.4780001305043697e-03</internalNodes>\n          <leafValues>\n            1.4893899857997894e-01 -3.1906801462173462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2229 8.9088998734951019e-02</internalNodes>\n          <leafValues>\n            1.3738800585269928e-01 -1.1379710435867310e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2230 7.3230001144111156e-03</internalNodes>\n          <leafValues>\n            -2.8829199075698853e-01 1.9088600575923920e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2231 -1.8205000087618828e-02</internalNodes>\n          <leafValues>\n            -3.0178600549697876e-01 1.6795800626277924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2232 -2.5828000158071518e-02</internalNodes>\n          <leafValues>\n            -9.8137998580932617e-01 -1.9860999658703804e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2233 1.0936199873685837e-01</internalNodes>\n          <leafValues>\n            4.8790000379085541e-02 5.3118300437927246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2234 -1.1424999684095383e-02</internalNodes>\n          <leafValues>\n            2.3705999553203583e-01 -2.7925300598144531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2235 -5.7565998286008835e-02</internalNodes>\n          <leafValues>\n            4.7255399823188782e-01 6.5171003341674805e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2236 1.0278300195932388e-01</internalNodes>\n          <leafValues>\n            -2.0765100419521332e-01 5.0947701930999756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2237 2.7041999623179436e-02</internalNodes>\n          <leafValues>\n            1.6421200335025787e-01 -1.4508620500564575e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2238 -1.3635000213980675e-02</internalNodes>\n          <leafValues>\n            -5.6543898582458496e-01 2.3788999766111374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2239 -3.2158198952674866e-01</internalNodes>\n          <leafValues>\n            -3.5602829456329346e+00 1.1801300197839737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2240 2.0458100736141205e-01</internalNodes>\n          <leafValues>\n            -3.7016000598669052e-02 -1.0225499868392944e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2241 -7.0347003638744354e-02</internalNodes>\n          <leafValues>\n            -5.6491899490356445e-01 1.8525199592113495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2242 3.7831000983715057e-02</internalNodes>\n          <leafValues>\n            -2.9901999980211258e-02 -8.2921499013900757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2243 -7.0298001170158386e-02</internalNodes>\n          <leafValues>\n            -5.3172302246093750e-01 1.4430199563503265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2244 6.3221000134944916e-02</internalNodes>\n          <leafValues>\n            -2.2041200101375580e-01 4.7952198982238770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2245 3.6393001675605774e-02</internalNodes>\n          <leafValues>\n            1.4222699403762817e-01 -6.1193901300430298e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2246 4.0099998004734516e-03</internalNodes>\n          <leafValues>\n            -3.4560799598693848e-01 1.1738699674606323e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2247 -4.9106001853942871e-02</internalNodes>\n          <leafValues>\n            9.5984101295471191e-01 6.4934998750686646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2248 -7.1583002805709839e-02</internalNodes>\n          <leafValues>\n            1.7385669946670532e+00 -1.4252899587154388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2249 -3.8008999079465866e-02</internalNodes>\n          <leafValues>\n            1.3872820138931274e+00 6.6188000142574310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2250 -3.1570000573992729e-03</internalNodes>\n          <leafValues>\n            5.3677000105381012e-02 -5.4048001766204834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2251 1.9458999857306480e-02</internalNodes>\n          <leafValues>\n            -9.3620002269744873e-02 3.9131000638008118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2252 1.1293999850749969e-02</internalNodes>\n          <leafValues>\n            3.7223998457193375e-02 -5.4251801967620850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2253 -3.3495001494884491e-02</internalNodes>\n          <leafValues>\n            9.5307898521423340e-01 3.7696998566389084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2254 9.2035003006458282e-02</internalNodes>\n          <leafValues>\n            -1.3488399982452393e-01 2.2897069454193115e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2255 3.7529999390244484e-03</internalNodes>\n          <leafValues>\n            2.2824199497699738e-01 -5.9983700513839722e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2256 1.2848000042140484e-02</internalNodes>\n          <leafValues>\n            -2.2005200386047363e-01 3.7221899628639221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2257 -1.4316199719905853e-01</internalNodes>\n          <leafValues>\n            1.2855789661407471e+00 4.7237001359462738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2258 -9.6879996359348297e-02</internalNodes>\n          <leafValues>\n            -3.9550929069519043e+00 -7.2903998196125031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2259 -8.8459998369216919e-03</internalNodes>\n          <leafValues>\n            3.7674999237060547e-01 -4.6484000980854034e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2260 1.5900000929832458e-02</internalNodes>\n          <leafValues>\n            -2.4457000195980072e-02 -8.0034798383712769e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2261 7.0372000336647034e-02</internalNodes>\n          <leafValues>\n            1.7019000649452209e-01 -6.3068997859954834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2262 -3.7953998893499374e-02</internalNodes>\n          <leafValues>\n            -9.3667197227478027e-01 -4.1214000433683395e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2263 5.1597899198532104e-01</internalNodes>\n          <leafValues>\n            1.3080599904060364e-01 -1.5802290439605713e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2264 -3.2843001186847687e-02</internalNodes>\n          <leafValues>\n            -1.1441620588302612e+00 -4.9173999577760696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2265 -3.6357000470161438e-02</internalNodes>\n          <leafValues>\n            4.9606400728225708e-01 -3.4458998590707779e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2266 6.8080001510679722e-03</internalNodes>\n          <leafValues>\n            -3.0997800827026367e-01 1.7054800689220428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2267 -1.6114000231027603e-02</internalNodes>\n          <leafValues>\n            -3.7904599308967590e-01 1.6078999638557434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2268 8.4530003368854523e-03</internalNodes>\n          <leafValues>\n            -1.8655499815940857e-01 5.6367701292037964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2269 -1.3752399384975433e-01</internalNodes>\n          <leafValues>\n            -5.8989900350570679e-01 1.1749500036239624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2270 1.7688000202178955e-01</internalNodes>\n          <leafValues>\n            -1.5424899756908417e-01 9.2911100387573242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2271 7.9309996217489243e-03</internalNodes>\n          <leafValues>\n            3.2190701365470886e-01 -1.6392600536346436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2272 1.0971800237894058e-01</internalNodes>\n          <leafValues>\n            -1.5876500308513641e-01 1.0186259746551514e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2273 -3.0293000862002373e-02</internalNodes>\n          <leafValues>\n            7.5587302446365356e-01 3.1794998794794083e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2274 -2.3118000477552414e-02</internalNodes>\n          <leafValues>\n            -8.8451498746871948e-01 -9.5039997249841690e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2275 -3.0900000128895044e-03</internalNodes>\n          <leafValues>\n            2.3838299512863159e-01 -1.1606200039386749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2276 -3.3392000943422318e-02</internalNodes>\n          <leafValues>\n            -1.8738139867782593e+00 -6.8502999842166901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2277 1.3190000317990780e-02</internalNodes>\n          <leafValues>\n            1.2919899821281433e-01 -6.7512202262878418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2278 1.4661000110208988e-02</internalNodes>\n          <leafValues>\n            -2.4829000234603882e-02 -7.4396800994873047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2279 -1.3248000293970108e-02</internalNodes>\n          <leafValues>\n            4.6820199489593506e-01 -2.4165000766515732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2280 -1.6218999400734901e-02</internalNodes>\n          <leafValues>\n            4.0083798766136169e-01 -2.1255700290203094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2281 -2.9052000492811203e-02</internalNodes>\n          <leafValues>\n            -1.5650019645690918e+00 1.4375899732112885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2282 -1.0153199732303619e-01</internalNodes>\n          <leafValues>\n            -1.9220689535140991e+00 -6.9559998810291290e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2283 3.7753999233245850e-02</internalNodes>\n          <leafValues>\n            1.3396799564361572e-01 -2.2639141082763672e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2284 -2.8555598855018616e-01</internalNodes>\n          <leafValues>\n            1.0215270519256592e+00 -1.5232199430465698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2285 1.5360699594020844e-01</internalNodes>\n          <leafValues>\n            -9.7409002482891083e-02 4.1662400960922241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2286 -2.1199999901000410e-04</internalNodes>\n          <leafValues>\n            1.1271899938583374e-01 -4.1653999686241150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2287 -2.0597999915480614e-02</internalNodes>\n          <leafValues>\n            6.0540497303009033e-01 6.2467999756336212e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2288 3.7353999912738800e-02</internalNodes>\n          <leafValues>\n            -1.8919000029563904e-01 4.6464699506759644e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2289 5.7275000959634781e-02</internalNodes>\n          <leafValues>\n            1.1565300077199936e-01 -1.3213009834289551e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2290 5.1029999740421772e-03</internalNodes>\n          <leafValues>\n            -2.8061500191688538e-01 1.9313399493694305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2291 -5.4644998162984848e-02</internalNodes>\n          <leafValues>\n            7.2428500652313232e-01 7.5447998940944672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2292 2.5349000468850136e-02</internalNodes>\n          <leafValues>\n            -1.9481800496578217e-01 4.6032801270484924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2293 2.4311000481247902e-02</internalNodes>\n          <leafValues>\n            1.5564100444316864e-01 -4.9913901090621948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2294 3.5962000489234924e-02</internalNodes>\n          <leafValues>\n            -5.8573000133037567e-02 -1.5418399572372437e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2295 -1.0000699758529663e-01</internalNodes>\n          <leafValues>\n            -1.6100039482116699e+00 1.1450500041246414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2296 8.4435999393463135e-02</internalNodes>\n          <leafValues>\n            -6.1406999826431274e-02 -1.4673349857330322e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2297 1.5947999432682991e-02</internalNodes>\n          <leafValues>\n            1.6287900507450104e-01 -1.1026400327682495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2298 3.3824000507593155e-02</internalNodes>\n          <leafValues>\n            -1.7932699620723724e-01 5.7218402624130249e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2299 -6.1996001750230789e-02</internalNodes>\n          <leafValues>\n            4.6511812210083008e+00 9.4534002244472504e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2300 6.9876998662948608e-02</internalNodes>\n          <leafValues>\n            -1.6985900700092316e-01 8.7028998136520386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2301 -2.7916999533772469e-02</internalNodes>\n          <leafValues>\n            9.1042500734329224e-01 5.6827001273632050e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2302 -1.2764000333845615e-02</internalNodes>\n          <leafValues>\n            2.2066700458526611e-01 -2.7769100666046143e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>199</maxWeakCount>\n      <stageThreshold>-3.2573320865631104e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2303 2.1662000566720963e-02</internalNodes>\n          <leafValues>\n            -8.9868897199630737e-01 2.9436299204826355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2304 1.0044500231742859e-01</internalNodes>\n          <leafValues>\n            -3.7659201025962830e-01 6.0891002416610718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2305 2.6003999635577202e-02</internalNodes>\n          <leafValues>\n            -3.8128501176834106e-01 3.9217400550842285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2306 2.8441000729799271e-02</internalNodes>\n          <leafValues>\n            -1.8182300031185150e-01 5.8927202224731445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2307 3.8612000644207001e-02</internalNodes>\n          <leafValues>\n            -2.2399599850177765e-01 6.3779997825622559e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2308 -4.6594999730587006e-02</internalNodes>\n          <leafValues>\n            7.0812201499938965e-01 -1.4666199684143066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2309 -4.2791999876499176e-02</internalNodes>\n          <leafValues>\n            4.7680398821830750e-01 -2.9233199357986450e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2310 3.7960000336170197e-03</internalNodes>\n          <leafValues>\n            -1.8510299921035767e-01 5.2626699209213257e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2311 4.2348999530076981e-02</internalNodes>\n          <leafValues>\n            3.9244998246431351e-02 -8.9197701215744019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2312 1.9598999992012978e-02</internalNodes>\n          <leafValues>\n            -2.3358400166034698e-01 4.4146499037742615e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2313 8.7400001939386129e-04</internalNodes>\n          <leafValues>\n            -4.6063598990440369e-01 1.7689600586891174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2314 -4.3629999272525311e-03</internalNodes>\n          <leafValues>\n            3.3493199944496155e-01 -2.9893401265144348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2315 1.6973000019788742e-02</internalNodes>\n          <leafValues>\n            -1.6408699750900269e-01 1.5993679761886597e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2316 3.6063998937606812e-02</internalNodes>\n          <leafValues>\n            2.2601699829101562e-01 -5.3186100721359253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2317 -7.0864997804164886e-02</internalNodes>\n          <leafValues>\n            1.5220500528812408e-01 -4.1914600133895874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2318 -6.3075996935367584e-02</internalNodes>\n          <leafValues>\n            -1.4874019622802734e+00 1.2953700125217438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2319 2.9670000076293945e-02</internalNodes>\n          <leafValues>\n            -1.9145900011062622e-01 9.8184901475906372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2320 3.7873998284339905e-02</internalNodes>\n          <leafValues>\n            1.3459500670433044e-01 -5.6316298246383667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2321 -3.3289000391960144e-02</internalNodes>\n          <leafValues>\n            -1.0828030109405518e+00 -1.1504000052809715e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2322 -3.1608998775482178e-02</internalNodes>\n          <leafValues>\n            -5.9224498271942139e-01 1.3394799828529358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2323 1.0740000288933516e-03</internalNodes>\n          <leafValues>\n            -4.9185800552368164e-01 9.4446003437042236e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2324 -7.1556001901626587e-02</internalNodes>\n          <leafValues>\n            5.9710198640823364e-01 -3.9553001523017883e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2325 -8.1170000135898590e-02</internalNodes>\n          <leafValues>\n            -1.1817820072174072e+00 -2.8254000470042229e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2326 4.4860001653432846e-03</internalNodes>\n          <leafValues>\n            -6.1028099060058594e-01 2.2619099915027618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2327 -4.2176000773906708e-02</internalNodes>\n          <leafValues>\n            -1.1435619592666626e+00 -2.9001999646425247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2328 -6.5640002489089966e-02</internalNodes>\n          <leafValues>\n            -1.6470279693603516e+00 1.2810300290584564e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2329 1.8188999965786934e-02</internalNodes>\n          <leafValues>\n            -3.1149399280548096e-01 2.5739601254463196e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2330 -5.1520001143217087e-02</internalNodes>\n          <leafValues>\n            -6.9206899404525757e-01 1.5270799398422241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2331 -4.7150999307632446e-02</internalNodes>\n          <leafValues>\n            -7.1868300437927246e-01 2.6879999786615372e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2332 1.7488999292254448e-02</internalNodes>\n          <leafValues>\n            2.2371199727058411e-01 -5.5381798744201660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2333 -2.5264000520110130e-02</internalNodes>\n          <leafValues>\n            1.0319819450378418e+00 -1.7496499419212341e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2334 -4.0745001286268234e-02</internalNodes>\n          <leafValues>\n            4.4961598515510559e-01 3.9349000900983810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2335 -3.7666998803615570e-02</internalNodes>\n          <leafValues>\n            -8.5475701093673706e-01 -1.2463999912142754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2336 -1.3411000370979309e-02</internalNodes>\n          <leafValues>\n            5.7845598459243774e-01 -1.7467999830842018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2337 -7.8999997640494257e-05</internalNodes>\n          <leafValues>\n            -3.7749201059341431e-01 1.3961799442768097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2338 -1.1415000073611736e-02</internalNodes>\n          <leafValues>\n            -2.6186600327491760e-01 2.3712499439716339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2339 3.7200000137090683e-02</internalNodes>\n          <leafValues>\n            -2.8626000508666039e-02 -1.2945239543914795e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2340 3.4050000831484795e-03</internalNodes>\n          <leafValues>\n            2.0531399548053741e-01 -1.8747499585151672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2341 -2.2483000531792641e-02</internalNodes>\n          <leafValues>\n            6.7027199268341064e-01 -1.9594000279903412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2342 2.3274999111890793e-02</internalNodes>\n          <leafValues>\n            1.7405399680137634e-01 -3.2746300101280212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2343 -1.3917000032961369e-02</internalNodes>\n          <leafValues>\n            -8.3954298496246338e-01 -6.3760001212358475e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2344 7.5429999269545078e-03</internalNodes>\n          <leafValues>\n            -3.4194998443126678e-02 5.8998197317123413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2345 -1.1539000086486340e-02</internalNodes>\n          <leafValues>\n            4.2142799496650696e-01 -2.3510499298572540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2346 5.2501998841762543e-02</internalNodes>\n          <leafValues>\n            6.9303996860980988e-02 7.3226499557495117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2347 5.2715998142957687e-02</internalNodes>\n          <leafValues>\n            -1.5688100457191467e-01 1.0907289981842041e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2348 -1.1726000346243382e-02</internalNodes>\n          <leafValues>\n            -7.0934301614761353e-01 1.6828800737857819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2349 9.5945999026298523e-02</internalNodes>\n          <leafValues>\n            -1.6192899644374847e-01 1.0072519779205322e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2350 -1.5871999785304070e-02</internalNodes>\n          <leafValues>\n            3.9008399844169617e-01 -5.3777001798152924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2351 3.4818001091480255e-02</internalNodes>\n          <leafValues>\n            1.7179999500513077e-02 -9.3941801786422729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2352 3.4791998565196991e-02</internalNodes>\n          <leafValues>\n            5.0462998449802399e-02 5.4465699195861816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2353 1.6284000128507614e-02</internalNodes>\n          <leafValues>\n            -2.6981300115585327e-01 4.0365299582481384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2354 -4.4319000095129013e-02</internalNodes>\n          <leafValues>\n            8.4399998188018799e-01 3.2882999628782272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2355 -5.5689997971057892e-03</internalNodes>\n          <leafValues>\n            1.5309399366378784e-01 -3.4959799051284790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2356 -6.5842002630233765e-02</internalNodes>\n          <leafValues>\n            -9.2711198329925537e-01 1.6800999641418457e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2357 -7.3337003588676453e-02</internalNodes>\n          <leafValues>\n            5.1614499092102051e-01 -2.0236000418663025e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2358 1.6450000926852226e-02</internalNodes>\n          <leafValues>\n            1.3950599730014801e-01 -4.9301299452781677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2359 -9.2630004510283470e-03</internalNodes>\n          <leafValues>\n            -9.0101999044418335e-01 -1.6116000711917877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2360 5.9139998629689217e-03</internalNodes>\n          <leafValues>\n            1.9858199357986450e-01 -1.6731299459934235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2361 -8.4699998842552304e-04</internalNodes>\n          <leafValues>\n            9.4005003571510315e-02 -4.1570898890495300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2362 2.0532900094985962e-01</internalNodes>\n          <leafValues>\n            -6.0022000223398209e-02 7.0993602275848389e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2363 -1.6883000731468201e-02</internalNodes>\n          <leafValues>\n            2.4392199516296387e-01 -3.0551800131797791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2364 -1.9111000001430511e-02</internalNodes>\n          <leafValues>\n            6.1229902505874634e-01 2.4252999573945999e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2365 -2.5962999090552330e-02</internalNodes>\n          <leafValues>\n            9.0764999389648438e-01 -1.6722099483013153e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2366 -2.1762000396847725e-02</internalNodes>\n          <leafValues>\n            -3.1384700536727905e-01 2.0134599506855011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2367 -2.4119999259710312e-02</internalNodes>\n          <leafValues>\n            -6.6588401794433594e-01 7.4559999629855156e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2368 4.7129999846220016e-02</internalNodes>\n          <leafValues>\n            5.9533998370170593e-02 8.7804502248764038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2369 -4.5984998345375061e-02</internalNodes>\n          <leafValues>\n            8.0067998170852661e-01 -1.7252300679683685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2370 2.6507999747991562e-02</internalNodes>\n          <leafValues>\n            1.8774099647998810e-01 -6.0850602388381958e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2371 -4.8615001142024994e-02</internalNodes>\n          <leafValues>\n            5.8644098043441772e-01 -1.9427700340747833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2372 -1.8562000244855881e-02</internalNodes>\n          <leafValues>\n            -2.5587901473045349e-01 1.6326199471950531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2373 1.2678000144660473e-02</internalNodes>\n          <leafValues>\n            -1.4228000305593014e-02 -7.6738101243972778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2374 -1.1919999960809946e-03</internalNodes>\n          <leafValues>\n            2.0495000481605530e-01 -1.1404299736022949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2375 -4.9088999629020691e-02</internalNodes>\n          <leafValues>\n            -1.0740849971771240e+00 -3.8940999656915665e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2376 -1.7436999827623367e-02</internalNodes>\n          <leafValues>\n            -5.7973802089691162e-01 1.8584500253200531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2377 -1.4770000241696835e-02</internalNodes>\n          <leafValues>\n            -6.6150301694869995e-01 5.3119999356567860e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2378 -2.2905200719833374e-01</internalNodes>\n          <leafValues>\n            -4.8305100202560425e-01 1.2326399981975555e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2379 -1.2707099318504333e-01</internalNodes>\n          <leafValues>\n            5.7452601194381714e-01 -1.9420400261878967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2380 1.0339000262320042e-02</internalNodes>\n          <leafValues>\n            -5.4641999304294586e-02 2.4501800537109375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2381 6.9010001607239246e-03</internalNodes>\n          <leafValues>\n            1.2180600315332413e-01 -3.8797399401664734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2382 2.9025399684906006e-01</internalNodes>\n          <leafValues>\n            1.0966199636459351e-01 -30.</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2383 -2.3804999887943268e-01</internalNodes>\n          <leafValues>\n            -1.7352679967880249e+00 -6.3809998333454132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2384 6.2481001019477844e-02</internalNodes>\n          <leafValues>\n            1.3523000478744507e-01 -7.0301097631454468e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2385 4.7109997831285000e-03</internalNodes>\n          <leafValues>\n            -4.6984100341796875e-01 6.0341998934745789e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2386 -2.7815999463200569e-02</internalNodes>\n          <leafValues>\n            6.9807600975036621e-01 1.3719999697059393e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2387 -1.7020000144839287e-02</internalNodes>\n          <leafValues>\n            1.6870440244674683e+00 -1.4314800500869751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2388 -4.9754999577999115e-02</internalNodes>\n          <leafValues>\n            7.9497700929641724e-01 7.7199999941512942e-04</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2389 -7.4732996523380280e-02</internalNodes>\n          <leafValues>\n            -1.0132360458374023e+00 -1.9388999789953232e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2390 3.2009001821279526e-02</internalNodes>\n          <leafValues>\n            1.4412100613117218e-01 -4.2139101028442383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2391 -9.4463996589183807e-02</internalNodes>\n          <leafValues>\n            5.0682598352432251e-01 -2.0478899776935577e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2392 -1.5426999889314175e-02</internalNodes>\n          <leafValues>\n            -1.5811300277709961e-01 1.7806899547576904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2393 -4.0540001355111599e-03</internalNodes>\n          <leafValues>\n            -5.4366701841354370e-01 3.1235000118613243e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2394 3.0080000869929790e-03</internalNodes>\n          <leafValues>\n            -1.7376799881458282e-01 3.0441701412200928e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2395 -1.0091999545693398e-02</internalNodes>\n          <leafValues>\n            2.5103801488876343e-01 -2.6224100589752197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2396 -3.8818001747131348e-02</internalNodes>\n          <leafValues>\n            9.3226701021194458e-01 7.2659999132156372e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2397 3.4651998430490494e-02</internalNodes>\n          <leafValues>\n            -3.3934999257326126e-02 -8.5707902908325195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2398 -4.6729999594390392e-03</internalNodes>\n          <leafValues>\n            3.4969300031661987e-01 -4.8517998307943344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2399 6.8499997723847628e-04</internalNodes>\n          <leafValues>\n            6.6573001444339752e-02 -4.4973799586296082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2400 3.5317000001668930e-02</internalNodes>\n          <leafValues>\n            1.4275799691677094e-01 -4.6726399660110474e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2401 -2.3569999262690544e-02</internalNodes>\n          <leafValues>\n            -1.0286079645156860e+00 -4.5288000255823135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2402 -1.9109999993816018e-03</internalNodes>\n          <leafValues>\n            -1.9652199745178223e-01 2.8661000728607178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2403 -1.6659000888466835e-02</internalNodes>\n          <leafValues>\n            -7.7532202005386353e-01 -8.3280000835657120e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2404 6.6062200069427490e-01</internalNodes>\n          <leafValues>\n            1.3232499361038208e-01 -3.5266680717468262e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2405 1.0970599949359894e-01</internalNodes>\n          <leafValues>\n            -1.5547199547290802e-01 1.4674140214920044e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2406 1.3500999659299850e-02</internalNodes>\n          <leafValues>\n            1.5233400464057922e-01 -1.3020930290222168e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2407 -2.2871999070048332e-02</internalNodes>\n          <leafValues>\n            -7.1325999498367310e-01 -8.7040001526474953e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2408 -8.1821002066135406e-02</internalNodes>\n          <leafValues>\n            1.1127580404281616e+00 8.3219997584819794e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2409 -5.2728001028299332e-02</internalNodes>\n          <leafValues>\n            9.3165099620819092e-01 -1.7103999853134155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2410 -2.5242000818252563e-02</internalNodes>\n          <leafValues>\n            -1.9733799993991852e-01 2.5359401106834412e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2411 -4.3818999081850052e-02</internalNodes>\n          <leafValues>\n            4.1815200448036194e-01 -2.4585500359535217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2412 -1.8188999965786934e-02</internalNodes>\n          <leafValues>\n            -5.1743197441101074e-01 2.0174199342727661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2413 2.3466000333428383e-02</internalNodes>\n          <leafValues>\n            -4.3071001768112183e-02 -1.0636579990386963e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2414 3.4216001629829407e-02</internalNodes>\n          <leafValues>\n            5.3780999034643173e-02 4.9707201123237610e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2415 2.5692999362945557e-02</internalNodes>\n          <leafValues>\n            -2.3800100386142731e-01 4.1651499271392822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2416 -2.6565000414848328e-02</internalNodes>\n          <leafValues>\n            -8.8574802875518799e-01 1.3365900516510010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2417 6.0942001640796661e-02</internalNodes>\n          <leafValues>\n            -2.0669700205326080e-01 5.8309000730514526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2418 1.4474500715732574e-01</internalNodes>\n          <leafValues>\n            1.3282300531864166e-01 -3.1449348926544189e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2419 5.3410999476909637e-02</internalNodes>\n          <leafValues>\n            -1.7325200140476227e-01 6.9190698862075806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2420 1.1408000253140926e-02</internalNodes>\n          <leafValues>\n            5.4822001606225967e-02 3.0240398645401001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2421 -2.3179999552667141e-03</internalNodes>\n          <leafValues>\n            1.5820899605751038e-01 -3.1973201036453247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2422 -2.9695000499486923e-02</internalNodes>\n          <leafValues>\n            7.1274799108505249e-01 5.8136001229286194e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2423 2.7249999344348907e-02</internalNodes>\n          <leafValues>\n            -1.5754100680351257e-01 9.2143797874450684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2424 -3.6200000904500484e-03</internalNodes>\n          <leafValues>\n            -3.4548398852348328e-01 2.0220999419689178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2425 -1.2578999623656273e-02</internalNodes>\n          <leafValues>\n            -5.5650299787521362e-01 2.0388999953866005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2426 -8.8849000632762909e-02</internalNodes>\n          <leafValues>\n            -3.6100010871887207e+00 1.3164199888706207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2427 -1.9256999716162682e-02</internalNodes>\n          <leafValues>\n            5.1908999681472778e-01 -1.9284300506114960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2428 -1.6666999086737633e-02</internalNodes>\n          <leafValues>\n            -8.7499998509883881e-02 1.5812499821186066e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2429 1.2931999750435352e-02</internalNodes>\n          <leafValues>\n            2.7405999600887299e-02 -5.5123901367187500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2430 -1.3431999832391739e-02</internalNodes>\n          <leafValues>\n            2.3457799851894379e-01 -4.3235000222921371e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2431 1.8810000270605087e-02</internalNodes>\n          <leafValues>\n            -3.9680998772382736e-02 -9.4373297691345215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2432 -6.4349998719990253e-03</internalNodes>\n          <leafValues>\n            4.5703700184822083e-01 -4.0520001202821732e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2433 -2.4249000474810600e-02</internalNodes>\n          <leafValues>\n            -7.6248002052307129e-01 -1.9857000559568405e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2434 -2.9667999595403671e-02</internalNodes>\n          <leafValues>\n            -3.7412509918212891e+00 1.1250600218772888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2435 5.1150000654160976e-03</internalNodes>\n          <leafValues>\n            -6.3781797885894775e-01 1.1223999783396721e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2436 -5.7819997891783714e-03</internalNodes>\n          <leafValues>\n            1.9374400377273560e-01 -8.2042001187801361e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2437 1.6606999561190605e-02</internalNodes>\n          <leafValues>\n            -1.6192099452018738e-01 1.1334990262985229e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2438 3.8228001445531845e-02</internalNodes>\n          <leafValues>\n            2.1105000749230385e-02 7.6264202594757080e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2439 -5.7094000279903412e-02</internalNodes>\n          <leafValues>\n            -1.6974929571151733e+00 -5.9762001037597656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2440 -5.3883001208305359e-02</internalNodes>\n          <leafValues>\n            1.1850190162658691e+00 9.0966999530792236e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2441 -2.6110000908374786e-03</internalNodes>\n          <leafValues>\n            -4.0941199660301208e-01 8.3820998668670654e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2442 2.9714399576187134e-01</internalNodes>\n          <leafValues>\n            1.5529899299144745e-01 -1.0995409488677979e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2443 -8.9063003659248352e-02</internalNodes>\n          <leafValues>\n            4.8947200179100037e-01 -2.0041200518608093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2444 -5.6193001568317413e-02</internalNodes>\n          <leafValues>\n            -2.4581399559974670e-01 1.4365500211715698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2445 3.7004999816417694e-02</internalNodes>\n          <leafValues>\n            -4.8168998211622238e-02 -1.2310709953308105e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2446 -8.4840003401041031e-03</internalNodes>\n          <leafValues>\n            4.3372601270675659e-01 1.3779999688267708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2447 -2.4379999376833439e-03</internalNodes>\n          <leafValues>\n            1.8949699401855469e-01 -3.2294198870658875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2448 -7.1639999747276306e-02</internalNodes>\n          <leafValues>\n            -4.3979001045227051e-01 2.2730199992656708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2449 5.2260002121329308e-03</internalNodes>\n          <leafValues>\n            -2.0548400282859802e-01 5.0933301448822021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2450 -6.1360001564025879e-03</internalNodes>\n          <leafValues>\n            3.1157198548316956e-01 7.0680998265743256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2451 1.5595000237226486e-02</internalNodes>\n          <leafValues>\n            -3.0934798717498779e-01 1.5627700090408325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2452 2.5995999574661255e-02</internalNodes>\n          <leafValues>\n            1.3821600377559662e-01 -1.7616599798202515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2453 -1.2085000053048134e-02</internalNodes>\n          <leafValues>\n            -5.1070201396942139e-01 5.8440998196601868e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2454 -6.7836001515388489e-02</internalNodes>\n          <leafValues>\n            4.7757101058959961e-01 -7.1446001529693604e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2455 -1.4715000055730343e-02</internalNodes>\n          <leafValues>\n            4.5238900184631348e-01 -1.9861400127410889e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2456 2.5118999183177948e-02</internalNodes>\n          <leafValues>\n            1.2954899668693542e-01 -8.6266398429870605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2457 1.8826000392436981e-02</internalNodes>\n          <leafValues>\n            -4.1570000350475311e-02 -1.1354700326919556e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2458 -2.1263999864459038e-02</internalNodes>\n          <leafValues>\n            -3.4738001227378845e-01 1.5779499709606171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2459 9.4609996303915977e-03</internalNodes>\n          <leafValues>\n            4.8639997839927673e-03 -6.1654800176620483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2460 2.2957700490951538e-01</internalNodes>\n          <leafValues>\n            8.1372998654842377e-02 6.9841402769088745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2461 -3.8061998784542084e-02</internalNodes>\n          <leafValues>\n            1.1616369485855103e+00 -1.4976699650287628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2462 -1.3484999537467957e-02</internalNodes>\n          <leafValues>\n            -3.2036399841308594e-01 1.7365099489688873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2463 3.6238998174667358e-02</internalNodes>\n          <leafValues>\n            -1.8158499896526337e-01 6.1956697702407837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2464 6.7210001870989799e-03</internalNodes>\n          <leafValues>\n            7.9600000753998756e-04 4.2441400885581970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2465 9.6525996923446655e-02</internalNodes>\n          <leafValues>\n            -1.4696800708770752e-01 1.2525680065155029e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2466 -3.5656999796628952e-02</internalNodes>\n          <leafValues>\n            -3.9781698584556580e-01 1.4191399514675140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2467 1.0772000066936016e-02</internalNodes>\n          <leafValues>\n            -1.8194000422954559e-01 5.9762197732925415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2468 7.9279996454715729e-02</internalNodes>\n          <leafValues>\n            1.4642499387264252e-01 -7.8836899995803833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2469 3.2841000705957413e-02</internalNodes>\n          <leafValues>\n            -6.2408000230789185e-02 -1.4227490425109863e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2470 -2.7781000360846519e-02</internalNodes>\n          <leafValues>\n            3.4033098816871643e-01 3.0670000240206718e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2471 -4.0339999832212925e-03</internalNodes>\n          <leafValues>\n            3.1084701418876648e-01 -2.2595700621604919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2472 7.4260002002120018e-03</internalNodes>\n          <leafValues>\n            -3.8936998695135117e-02 3.1702101230621338e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2473 1.1213999986648560e-01</internalNodes>\n          <leafValues>\n            -1.7578299343585968e-01 6.5056598186492920e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2474 -1.1878100037574768e-01</internalNodes>\n          <leafValues>\n            -1.0092990398406982e+00 1.1069700121879578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2475 -4.1584998369216919e-02</internalNodes>\n          <leafValues>\n            -5.3806400299072266e-01 1.9905000925064087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2476 -2.7966000139713287e-02</internalNodes>\n          <leafValues>\n            4.8143199086189270e-01 3.3590998500585556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2477 -1.2506400048732758e-01</internalNodes>\n          <leafValues>\n            2.6352199912071228e-01 -2.5737899541854858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2478 2.3666900396347046e-01</internalNodes>\n          <leafValues>\n            3.6508001387119293e-02 9.0655601024627686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2479 -2.9475999996066093e-02</internalNodes>\n          <leafValues>\n            -6.0048800706863403e-01 9.5880003646016121e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2480 3.7792999297380447e-02</internalNodes>\n          <leafValues>\n            1.5506200492382050e-01 -9.5733499526977539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2481 7.2044000029563904e-02</internalNodes>\n          <leafValues>\n            -1.4525899291038513e-01 1.3676730394363403e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2482 9.7759999334812164e-03</internalNodes>\n          <leafValues>\n            1.2915999628603458e-02 2.1640899777412415e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2483 5.2154000848531723e-02</internalNodes>\n          <leafValues>\n            -1.6359999775886536e-02 -8.8356298208236694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2484 -4.3790999799966812e-02</internalNodes>\n          <leafValues>\n            3.5829600691795349e-01 6.5131001174449921e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2485 -3.8378998637199402e-02</internalNodes>\n          <leafValues>\n            1.1961040496826172e+00 -1.4971500635147095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2486 -9.8838999867439270e-02</internalNodes>\n          <leafValues>\n            -6.1834001541137695e-01 1.2786200642585754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2487 -1.2190700322389603e-01</internalNodes>\n          <leafValues>\n            -1.8276120424270630e+00 -6.4862996339797974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2488 -1.1981700360774994e-01</internalNodes>\n          <leafValues>\n            -30. 1.1323300004005432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2489 3.0910000205039978e-02</internalNodes>\n          <leafValues>\n            -2.3934000730514526e-01 3.6332899332046509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2490 1.0800999589264393e-02</internalNodes>\n          <leafValues>\n            -3.5140000283718109e-02 2.7707898616790771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2491 5.6844998151063919e-02</internalNodes>\n          <leafValues>\n            -1.5524299442768097e-01 1.0802700519561768e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2492 1.0280000278726220e-03</internalNodes>\n          <leafValues>\n            -6.1202999204397202e-02 2.0508000254631042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2493 -2.8273999691009521e-02</internalNodes>\n          <leafValues>\n            -6.4778000116348267e-01 2.3917000740766525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2494 -1.6013599932193756e-01</internalNodes>\n          <leafValues>\n            1.0892050266265869e+00 5.8389000594615936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2495 4.9629998393356800e-03</internalNodes>\n          <leafValues>\n            -2.5806298851966858e-01 2.0834599435329437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2496 4.6937000006437302e-02</internalNodes>\n          <leafValues>\n            1.3886299729347229e-01 -1.5662620067596436e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2497 2.4286000058054924e-02</internalNodes>\n          <leafValues>\n            -2.0728300511837006e-01 5.2430999279022217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2498 7.0202000439167023e-02</internalNodes>\n          <leafValues>\n            1.4796899259090424e-01 -1.3095090389251709e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2499 9.8120002076029778e-03</internalNodes>\n          <leafValues>\n            2.7906000614166260e-02 -5.0864601135253906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2500 -5.6200999766588211e-02</internalNodes>\n          <leafValues>\n            1.2618130445480347e+00 6.3801996409893036e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2501 1.0982800275087357e-01</internalNodes>\n          <leafValues>\n            -1.2850099802017212e-01 3.0776169300079346e+00</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>211</maxWeakCount>\n      <stageThreshold>-3.3703000545501709e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2502 2.0910000428557396e-02</internalNodes>\n          <leafValues>\n            -6.8559402227401733e-01 3.8984298706054688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2503 3.5032000392675400e-02</internalNodes>\n          <leafValues>\n            -4.7724398970603943e-01 4.5027199387550354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2504 3.9799001067876816e-02</internalNodes>\n          <leafValues>\n            -4.7011101245880127e-01 4.2702499032020569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2505 -4.8409998416900635e-03</internalNodes>\n          <leafValues>\n            2.5614300370216370e-01 -6.6556298732757568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2506 2.3439999204128981e-03</internalNodes>\n          <leafValues>\n            -4.8083499073982239e-01 2.8013798594474792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2507 2.5312999263405800e-02</internalNodes>\n          <leafValues>\n            -2.3948200047016144e-01 4.4191798567771912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2508 -3.2193001359701157e-02</internalNodes>\n          <leafValues>\n            7.6086699962615967e-01 -2.5059100985527039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2509 7.5409002602100372e-02</internalNodes>\n          <leafValues>\n            -3.4974598884582520e-01 3.4380298852920532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2510 -1.8469000235199928e-02</internalNodes>\n          <leafValues>\n            -7.9085600376129150e-01 3.4788001328706741e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2511 -1.2802000157535076e-02</internalNodes>\n          <leafValues>\n            4.7107800841331482e-01 -6.0006000101566315e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2512 -2.6598000898957253e-02</internalNodes>\n          <leafValues>\n            6.7116099596023560e-01 -2.4257500469684601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2513 2.1988999098539352e-02</internalNodes>\n          <leafValues>\n            2.4717499315738678e-01 -4.8301699757575989e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2514 1.4654099941253662e-01</internalNodes>\n          <leafValues>\n            -2.1504099667072296e-01 7.2055900096893311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2515 3.5310001112520695e-03</internalNodes>\n          <leafValues>\n            2.7930998802185059e-01 -3.4339898824691772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2516 9.4010001048445702e-03</internalNodes>\n          <leafValues>\n            5.5861998349428177e-02 -8.2143598794937134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2517 -8.6390003561973572e-03</internalNodes>\n          <leafValues>\n            -9.9620598554611206e-01 1.8874999880790710e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2518 -3.9193000644445419e-02</internalNodes>\n          <leafValues>\n            -1.1945559978485107e+00 -2.9198000207543373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2519 2.4855000898241997e-02</internalNodes>\n          <leafValues>\n            1.4987599849700928e-01 -5.4137802124023438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2520 -3.4995000809431076e-02</internalNodes>\n          <leafValues>\n            -1.4210180044174194e+00 -4.2314000427722931e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2521 -1.8378999084234238e-02</internalNodes>\n          <leafValues>\n            -2.8242599964141846e-01 1.5581800043582916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2522 -1.3592000119388103e-02</internalNodes>\n          <leafValues>\n            4.7317099571228027e-01 -2.1937200427055359e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2523 6.2629999592900276e-03</internalNodes>\n          <leafValues>\n            -5.9714000672101974e-02 6.0625898838043213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2524 -1.8478000536561012e-02</internalNodes>\n          <leafValues>\n            -8.5647201538085938e-01 -1.3783999718725681e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2525 1.4236000366508961e-02</internalNodes>\n          <leafValues>\n            1.6654799878597260e-01 -2.7713999152183533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2526 -3.2547000795602798e-02</internalNodes>\n          <leafValues>\n            -1.1728240251541138e+00 -4.0185000747442245e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2527 -2.6410000864416361e-03</internalNodes>\n          <leafValues>\n            2.6514300704002380e-01 -5.6343000382184982e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2528 -8.7799999164417386e-04</internalNodes>\n          <leafValues>\n            3.6556001752614975e-02 -5.5075198411941528e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2529 4.7371998429298401e-02</internalNodes>\n          <leafValues>\n            -4.2614001780748367e-02 4.8194900155067444e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2530 -7.0790001191198826e-03</internalNodes>\n          <leafValues>\n            2.8698998689651489e-01 -3.2923001050949097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2531 -4.3145999312400818e-02</internalNodes>\n          <leafValues>\n            -1.4065419435501099e+00 1.2836399674415588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2532 2.0592000335454941e-02</internalNodes>\n          <leafValues>\n            -2.1435299515724182e-01 5.3981798887252808e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2533 -2.2367000579833984e-02</internalNodes>\n          <leafValues>\n            3.3718299865722656e-01 4.5212000608444214e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2534 5.0039999186992645e-02</internalNodes>\n          <leafValues>\n            -2.5121700763702393e-01 4.1750499606132507e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2535 6.1794999986886978e-02</internalNodes>\n          <leafValues>\n            4.0084999054670334e-02 6.8779802322387695e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2536 -4.1861999779939651e-02</internalNodes>\n          <leafValues>\n            5.3027397394180298e-01 -2.2901999950408936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2537 -3.1959998887032270e-03</internalNodes>\n          <leafValues>\n            2.5161498785018921e-01 -2.1514600515365601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2538 2.4255000054836273e-02</internalNodes>\n          <leafValues>\n            7.2320001199841499e-03 -7.2519099712371826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2539 -1.7303999513387680e-02</internalNodes>\n          <leafValues>\n            -4.9958199262619019e-01 1.8394500017166138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2540 -4.1470001451671124e-03</internalNodes>\n          <leafValues>\n            8.5211999714374542e-02 -4.6364700794219971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2541 -1.4369999989867210e-02</internalNodes>\n          <leafValues>\n            -5.2258902788162231e-01 2.3892599344253540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2542 -9.0399999171495438e-03</internalNodes>\n          <leafValues>\n            -6.3250398635864258e-01 3.2551001757383347e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2543 -1.2373100221157074e-01</internalNodes>\n          <leafValues>\n            1.2856210470199585e+00 7.6545000076293945e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2544 -8.2221999764442444e-02</internalNodes>\n          <leafValues>\n            8.3208197355270386e-01 -1.8590599298477173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2545 6.5659001469612122e-02</internalNodes>\n          <leafValues>\n            1.1298800259828568e-01 -30.</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2546 -3.1582999974489212e-02</internalNodes>\n          <leafValues>\n            -1.3485900163650513e+00 -4.7097001224756241e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2547 -7.9636000096797943e-02</internalNodes>\n          <leafValues>\n            -1.3533639907836914e+00 1.5668800473213196e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2548 -1.8880000337958336e-02</internalNodes>\n          <leafValues>\n            4.0300300717353821e-01 -2.5148901343345642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2549 -5.0149997696280479e-03</internalNodes>\n          <leafValues>\n            -2.6287099719047546e-01 1.8582500517368317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2550 -1.2218000367283821e-02</internalNodes>\n          <leafValues>\n            5.8692401647567749e-01 -1.9427700340747833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2551 1.2710000155493617e-03</internalNodes>\n          <leafValues>\n            -1.6688999533653259e-01 2.3006899654865265e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2552 2.9743999242782593e-02</internalNodes>\n          <leafValues>\n            1.2520000338554382e-02 -6.6723597049713135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2553 2.8175000101327896e-02</internalNodes>\n          <leafValues>\n            -1.7060000449419022e-02 6.4579397439956665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2554 3.0345000326633453e-02</internalNodes>\n          <leafValues>\n            -2.4178700149059296e-01 3.4878900647163391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2555 -1.7325999215245247e-02</internalNodes>\n          <leafValues>\n            -5.3599399328231812e-01 2.0995999872684479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2556 -8.4178000688552856e-02</internalNodes>\n          <leafValues>\n            7.5093299150466919e-01 -1.7593200504779816e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2557 7.4950000271201134e-03</internalNodes>\n          <leafValues>\n            -1.6188099980354309e-01 3.0657500028610229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2558 5.6494999676942825e-02</internalNodes>\n          <leafValues>\n            -1.7318800091743469e-01 1.0016150474548340e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2559 -5.2939997985959053e-03</internalNodes>\n          <leafValues>\n            2.3417599499225616e-01 -6.5347000956535339e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2560 -1.4945000410079956e-02</internalNodes>\n          <leafValues>\n            2.5018900632858276e-01 -3.0591198801994324e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2561 5.4919000715017319e-02</internalNodes>\n          <leafValues>\n            1.3121999800205231e-01 -9.3765097856521606e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2562 -1.9721999764442444e-02</internalNodes>\n          <leafValues>\n            -8.3978497982025146e-01 -2.3473000153899193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2563 -6.7158997058868408e-02</internalNodes>\n          <leafValues>\n            2.3586840629577637e+00 8.2970999181270599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2564 -1.4325999654829502e-02</internalNodes>\n          <leafValues>\n            1.8814499676227570e-01 -3.1221601366996765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2565 2.9841000214219093e-02</internalNodes>\n          <leafValues>\n            1.4825099706649780e-01 -8.4681701660156250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2566 5.1883000880479813e-02</internalNodes>\n          <leafValues>\n            -4.3731000274419785e-02 -1.3366169929504395e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2567 4.1127000004053116e-02</internalNodes>\n          <leafValues>\n            1.7660099267959595e-01 -6.0904097557067871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2568 -1.2865099310874939e-01</internalNodes>\n          <leafValues>\n            -9.8701000213623047e-01 -3.7785001099109650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2569 2.4170000106096268e-03</internalNodes>\n          <leafValues>\n            -1.6119599342346191e-01 3.2675701379776001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2570 7.7030002139508724e-03</internalNodes>\n          <leafValues>\n            -2.3841500282287598e-01 2.9319399595260620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2571 4.5520000159740448e-02</internalNodes>\n          <leafValues>\n            1.4424599707126617e-01 -1.5010160207748413e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2572 -7.8700996935367584e-02</internalNodes>\n          <leafValues>\n            -1.0394560098648071e+00 -4.5375999063253403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2573 7.8619997948408127e-03</internalNodes>\n          <leafValues>\n            1.9633600115776062e-01 -1.4472399652004242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2574 -1.3458999805152416e-02</internalNodes>\n          <leafValues>\n            -9.0634697675704956e-01 -3.8049001246690750e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2575 2.8827000409364700e-02</internalNodes>\n          <leafValues>\n            -2.9473999515175819e-02 6.0058397054672241e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2576 -2.7365999296307564e-02</internalNodes>\n          <leafValues>\n            -9.9804002046585083e-01 -3.8653001189231873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2577 -7.2917997837066650e-02</internalNodes>\n          <leafValues>\n            7.3361498117446899e-01 5.7440001517534256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2578 -1.3988999649882317e-02</internalNodes>\n          <leafValues>\n            2.7892601490020752e-01 -2.6516300439834595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2579 4.3242998421192169e-02</internalNodes>\n          <leafValues>\n            4.7760000452399254e-03 3.5925900936126709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2580 2.9533000662922859e-02</internalNodes>\n          <leafValues>\n            -2.0083999633789062e-01 5.1202899217605591e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2581 -3.1897000968456268e-02</internalNodes>\n          <leafValues>\n            6.4721697568893433e-01 -1.3760000001639128e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2582 3.7868998944759369e-02</internalNodes>\n          <leafValues>\n            -1.8363800644874573e-01 6.1343097686767578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2583 -2.2417999804019928e-02</internalNodes>\n          <leafValues>\n            -2.9187899827957153e-01 1.8194800615310669e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2584 5.8958999812602997e-02</internalNodes>\n          <leafValues>\n            -6.6451996564865112e-02 -1.9290030002593994e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2585 3.1222999095916748e-02</internalNodes>\n          <leafValues>\n            -1.2732000090181828e-02 6.1560797691345215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2586 3.7484999746084213e-02</internalNodes>\n          <leafValues>\n            -2.0856900513172150e-01 4.4363999366760254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2587 -2.0966000854969025e-02</internalNodes>\n          <leafValues>\n            -3.5712799429893494e-01 2.4252200126647949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2588 -2.5477999821305275e-02</internalNodes>\n          <leafValues>\n            1.0846560001373291e+00 -1.5054400265216827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2589 -7.2570000775158405e-03</internalNodes>\n          <leafValues>\n            2.1302600204944611e-01 -1.8308199942111969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2590 -5.0983000546693802e-02</internalNodes>\n          <leafValues>\n            5.1736801862716675e-01 -1.8833099305629730e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2591 -2.0640000700950623e-02</internalNodes>\n          <leafValues>\n            -4.4030201435089111e-01 2.2745999693870544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2592 1.0672999545931816e-02</internalNodes>\n          <leafValues>\n            3.5059999674558640e-02 -5.1665002107620239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2593 3.1895998865365982e-02</internalNodes>\n          <leafValues>\n            1.3228000141680241e-02 3.4915199875831604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2594 -2.3824999108910561e-02</internalNodes>\n          <leafValues>\n            3.4118801355361938e-01 -2.1510200202465057e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2595 -6.0680001042783260e-03</internalNodes>\n          <leafValues>\n            3.2937398552894592e-01 -2.8523799777030945e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2596 2.3881999775767326e-02</internalNodes>\n          <leafValues>\n            -2.5333800911903381e-01 2.6296100020408630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2597 2.7966000139713287e-02</internalNodes>\n          <leafValues>\n            1.4049099385738373e-01 -4.9887099862098694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2598 1.4603000134229660e-02</internalNodes>\n          <leafValues>\n            -1.5395999886095524e-02 -7.6958000659942627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2599 1.0872399806976318e-01</internalNodes>\n          <leafValues>\n            1.9069600105285645e-01 -3.2393100857734680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2600 -1.4038000255823135e-02</internalNodes>\n          <leafValues>\n            3.4924700856208801e-01 -2.2358700633049011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2601 4.0440000593662262e-03</internalNodes>\n          <leafValues>\n            -3.8329001516103745e-02 5.1177299022674561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2602 -4.9769999459385872e-03</internalNodes>\n          <leafValues>\n            -4.2888298630714417e-01 4.9173999577760696e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2603 -8.5183002054691315e-02</internalNodes>\n          <leafValues>\n            6.6624599695205688e-01 7.8079998493194580e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2604 2.1559998858720064e-03</internalNodes>\n          <leafValues>\n            -4.9135199189186096e-01 6.9555997848510742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2605 3.6384499073028564e-01</internalNodes>\n          <leafValues>\n            1.2997099757194519e-01 -1.8949509859085083e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2606 2.2082500159740448e-01</internalNodes>\n          <leafValues>\n            -5.7211998850107193e-02 -1.4281120300292969e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2607 -1.6140000894665718e-02</internalNodes>\n          <leafValues>\n            -5.7589399814605713e-01 1.8062500655651093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2608 -4.8330001533031464e-02</internalNodes>\n          <leafValues>\n            9.7308498620986938e-01 -1.6513000428676605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2609 1.7529999837279320e-02</internalNodes>\n          <leafValues>\n            1.7932699620723724e-01 -2.7948901057243347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2610 -3.4309998154640198e-02</internalNodes>\n          <leafValues>\n            -8.1072497367858887e-01 -1.6596000641584396e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2611 -4.5830002054572105e-03</internalNodes>\n          <leafValues>\n            2.7908998727798462e-01 -7.4519999325275421e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2612 1.2896400690078735e-01</internalNodes>\n          <leafValues>\n            -1.3508500158786774e-01 2.5411539077758789e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2613 3.0361000448465347e-02</internalNodes>\n          <leafValues>\n            -6.8419001996517181e-02 2.8734099864959717e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2614 4.4086001813411713e-02</internalNodes>\n          <leafValues>\n            -1.8135899305343628e-01 6.5413200855255127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2615 3.0159999150782824e-03</internalNodes>\n          <leafValues>\n            -1.5690499544143677e-01 2.6963800191879272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2616 -2.6336999610066414e-02</internalNodes>\n          <leafValues>\n            2.9175600409507751e-01 -2.5274100899696350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2617 -2.7866000309586525e-02</internalNodes>\n          <leafValues>\n            4.4387501478195190e-01 5.5038001388311386e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2618 1.1725000105798244e-02</internalNodes>\n          <leafValues>\n            -1.9346499443054199e-01 4.6656700968742371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2619 1.5689999563619494e-03</internalNodes>\n          <leafValues>\n            -8.2360003143548965e-03 2.5700899958610535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2620 -3.5550000611692667e-03</internalNodes>\n          <leafValues>\n            -4.2430898547172546e-01 7.1174003183841705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2621 -3.1695000827312469e-02</internalNodes>\n          <leafValues>\n            -8.5393500328063965e-01 1.6916200518608093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2622 -3.2097000628709793e-02</internalNodes>\n          <leafValues>\n            8.3784902095794678e-01 -1.7597299814224243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2623 1.5544199943542480e-01</internalNodes>\n          <leafValues>\n            9.9550001323223114e-02 2.3873300552368164e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2624 8.8045999407768250e-02</internalNodes>\n          <leafValues>\n            -1.8725299835205078e-01 6.2384301424026489e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2625 -1.6720000421628356e-03</internalNodes>\n          <leafValues>\n            2.5008699297904968e-01 -6.5118998289108276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2626 9.3409996479749680e-03</internalNodes>\n          <leafValues>\n            -3.5378900170326233e-01 1.0715000331401825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2627 3.7138000130653381e-02</internalNodes>\n          <leafValues>\n            1.6387000679969788e-01 -9.1718399524688721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2628 8.0183997750282288e-02</internalNodes>\n          <leafValues>\n            -1.4812999963760376e-01 1.4895190000534058e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2629 -7.9100002767518163e-04</internalNodes>\n          <leafValues>\n            -2.1326899528503418e-01 1.9676400721073151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2630 -5.0400001928210258e-03</internalNodes>\n          <leafValues>\n            -7.1318697929382324e-01 1.8240000354126096e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2631 1.1962399631738663e-01</internalNodes>\n          <leafValues>\n            3.3098999410867691e-02 1.0441709756851196e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2632 -4.5280000194907188e-03</internalNodes>\n          <leafValues>\n            -2.7308499813079834e-01 2.7229800820350647e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2633 -2.9639000073075294e-02</internalNodes>\n          <leafValues>\n            3.6225798726081848e-01 5.6795001029968262e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2634 2.6650000363588333e-02</internalNodes>\n          <leafValues>\n            -4.8041000962257385e-02 -9.6723502874374390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2635 4.4422000646591187e-02</internalNodes>\n          <leafValues>\n            1.3052900135517120e-01 -3.5077300667762756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2636 -2.4359999224543571e-02</internalNodes>\n          <leafValues>\n            -1.0766899585723877e+00 -5.1222998648881912e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2637 1.9734999164938927e-02</internalNodes>\n          <leafValues>\n            2.6238000020384789e-02 2.8070500493049622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2638 5.4930001497268677e-03</internalNodes>\n          <leafValues>\n            -2.6111298799514771e-01 2.1011400222778320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2639 -2.3200300335884094e-01</internalNodes>\n          <leafValues>\n            -1.7748440504074097e+00 1.1482600122690201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2640 -2.5614000856876373e-02</internalNodes>\n          <leafValues>\n            2.9900801181793213e-01 -2.2502499818801880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2641 -6.4949998632073402e-03</internalNodes>\n          <leafValues>\n            1.9563800096511841e-01 -9.9762998521327972e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2642 3.9840000681579113e-03</internalNodes>\n          <leafValues>\n            -4.3021500110626221e-01 8.1261001527309418e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2643 -3.5813000053167343e-02</internalNodes>\n          <leafValues>\n            -5.0987398624420166e-01 1.6345900297164917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2644 -1.4169000089168549e-02</internalNodes>\n          <leafValues>\n            7.7978098392486572e-01 -1.7476299405097961e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2645 -1.2642100453376770e-01</internalNodes>\n          <leafValues>\n            -6.3047897815704346e-01 1.2728300690650940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2646 6.8677999079227448e-02</internalNodes>\n          <leafValues>\n            -4.6447999775409698e-02 -1.1128979921340942e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2647 8.5864998400211334e-02</internalNodes>\n          <leafValues>\n            1.1835400015115738e-01 -4.8235158920288086e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2648 1.5511999838054180e-02</internalNodes>\n          <leafValues>\n            -1.7467999830842018e-02 -6.3693398237228394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2649 8.1091001629829407e-02</internalNodes>\n          <leafValues>\n            8.6133003234863281e-02 2.4559431076049805e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2650 1.8495000898838043e-02</internalNodes>\n          <leafValues>\n            4.0229000151157379e-02 -5.0858199596405029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2651 -8.6320996284484863e-02</internalNodes>\n          <leafValues>\n            -1.9006760120391846e+00 1.1019100248813629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2652 7.2355002164840698e-02</internalNodes>\n          <leafValues>\n            -6.2111999839544296e-02 -1.4165179729461670e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2653 -7.8179001808166504e-02</internalNodes>\n          <leafValues>\n            8.8849300146102905e-01 4.2369998991489410e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2654 9.6681997179985046e-02</internalNodes>\n          <leafValues>\n            -2.2094200551509857e-01 3.3575099706649780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2655 -3.9875999093055725e-02</internalNodes>\n          <leafValues>\n            5.7804799079895020e-01 4.5347999781370163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2656 -9.5349997282028198e-03</internalNodes>\n          <leafValues>\n            -5.4175698757171631e-01 3.2399999909102917e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2657 4.0600000647827983e-04</internalNodes>\n          <leafValues>\n            -8.1549003720283508e-02 3.5837900638580322e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2658 1.2107999995350838e-02</internalNodes>\n          <leafValues>\n            -2.0280399918556213e-01 4.3768000602722168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2659 -2.0873999223113060e-02</internalNodes>\n          <leafValues>\n            4.1469898819923401e-01 -4.5568000525236130e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2660 5.7888001203536987e-02</internalNodes>\n          <leafValues>\n            -2.9009999707341194e-02 -9.1822302341461182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2661 1.3200000103097409e-04</internalNodes>\n          <leafValues>\n            -1.1772400140762329e-01 2.0000000298023224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2662 -1.7137000337243080e-02</internalNodes>\n          <leafValues>\n            3.3004799485206604e-01 -2.3055200278759003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2663 3.0655000358819962e-02</internalNodes>\n          <leafValues>\n            -2.1545000374317169e-02 2.6878198981285095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2664 -7.8699999721720815e-04</internalNodes>\n          <leafValues>\n            -4.4100698828697205e-01 4.9157999455928802e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2665 8.8036999106407166e-02</internalNodes>\n          <leafValues>\n            1.1782000213861465e-01 -2.8293309211730957e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2666 -3.9028998464345932e-02</internalNodes>\n          <leafValues>\n            9.1777199506759644e-01 -1.5827399492263794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2667 8.0105997622013092e-02</internalNodes>\n          <leafValues>\n            1.1289200186729431e-01 -1.9937280416488647e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2668 3.9538998156785965e-02</internalNodes>\n          <leafValues>\n            -1.4357399940490723e-01 1.3085240125656128e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2669 2.0684000104665756e-02</internalNodes>\n          <leafValues>\n            2.0048099756240845e-01 -4.4186998158693314e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2670 -6.7037999629974365e-02</internalNodes>\n          <leafValues>\n            3.2618600130081177e-01 -2.0550400018692017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2671 4.6815000474452972e-02</internalNodes>\n          <leafValues>\n            1.5825299918651581e-01 -9.5535099506378174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2672 7.8443996608257294e-02</internalNodes>\n          <leafValues>\n            -7.4651002883911133e-02 -2.1161499023437500e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2673 6.6380001604557037e-02</internalNodes>\n          <leafValues>\n            1.1641900241374969e-01 -1.6113519668579102e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2674 3.0053999274969101e-02</internalNodes>\n          <leafValues>\n            -1.6562600433826447e-01 7.0025402307510376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2675 1.7119999974966049e-02</internalNodes>\n          <leafValues>\n            2.2627699375152588e-01 -4.0114998817443848e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2676 2.0073000341653824e-02</internalNodes>\n          <leafValues>\n            -1.9389699399471283e-01 4.4420298933982849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2677 3.3101998269557953e-02</internalNodes>\n          <leafValues>\n            1.1637499928474426e-01 -1.5771679878234863e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2678 -1.4882000163197517e-02</internalNodes>\n          <leafValues>\n            -8.9680302143096924e-01 -4.2010001838207245e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2679 -1.0281000286340714e-02</internalNodes>\n          <leafValues>\n            3.5602998733520508e-01 -1.3124000281095505e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2680 -2.8695000335574150e-02</internalNodes>\n          <leafValues>\n            -4.6039599180221558e-01 2.6801999658346176e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2681 -4.7189998440444469e-03</internalNodes>\n          <leafValues>\n            2.3788799345493317e-01 -6.5518997609615326e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2682 3.2201600074768066e-01</internalNodes>\n          <leafValues>\n            -2.8489999473094940e-02 -8.4234601259231567e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2683 -1.7045000568032265e-02</internalNodes>\n          <leafValues>\n            -5.0938802957534790e-01 1.6057600080966949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2684 -7.3469998314976692e-03</internalNodes>\n          <leafValues>\n            -5.4154998064041138e-01 4.7320001758635044e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2685 -3.0001999810338020e-02</internalNodes>\n          <leafValues>\n            -8.8785797357559204e-01 1.3621799647808075e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2686 -1.1292999610304832e-02</internalNodes>\n          <leafValues>\n            8.0615198612213135e-01 -1.6159500181674957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2687 4.7749998047947884e-03</internalNodes>\n          <leafValues>\n            1.2968000024557114e-02 5.5079901218414307e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2688 5.0710001960396767e-03</internalNodes>\n          <leafValues>\n            -4.5728001743555069e-02 -1.0766259431838989e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2689 1.9344100356101990e-01</internalNodes>\n          <leafValues>\n            7.1262001991271973e-02 1.1694519519805908e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2690 5.3750001825392246e-03</internalNodes>\n          <leafValues>\n            -1.9736200571060181e-01 3.8206899166107178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2691 -6.8276003003120422e-02</internalNodes>\n          <leafValues>\n            -5.4372339248657227e+00 1.1151900142431259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2692 -3.4933000802993774e-02</internalNodes>\n          <leafValues>\n            4.4793400168418884e-01 -1.8657900393009186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2693 5.1219998858869076e-03</internalNodes>\n          <leafValues>\n            -1.4871999621391296e-02 1.8413899838924408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2694 9.5311999320983887e-02</internalNodes>\n          <leafValues>\n            -1.5117099881172180e-01 9.4991499185562134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2695 -6.2849000096321106e-02</internalNodes>\n          <leafValues>\n            4.6473601460456848e-01 3.8405001163482666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2696 -1.7040699720382690e-01</internalNodes>\n          <leafValues>\n            -1.6499999761581421e+00 -6.3236996531486511e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2697 1.0583999566733837e-02</internalNodes>\n          <leafValues>\n            -3.8348998874425888e-02 4.1913801431655884e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2698 -4.1579000651836395e-02</internalNodes>\n          <leafValues>\n            3.4461900591850281e-01 -2.1187700331211090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2699 1.2718600034713745e-01</internalNodes>\n          <leafValues>\n            1.2398199737071991e-01 -2.1254889965057373e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2700 8.2557000219821930e-02</internalNodes>\n          <leafValues>\n            -6.2024001032114029e-02 -1.4875819683074951e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2701 8.5293002426624298e-02</internalNodes>\n          <leafValues>\n            1.7087999731302261e-02 3.2076600193977356e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2702 5.5544000118970871e-02</internalNodes>\n          <leafValues>\n            -2.7414000034332275e-01 1.8976399302482605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2703 4.5650000683963299e-03</internalNodes>\n          <leafValues>\n            -1.7920200526714325e-01 2.7967301011085510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2704 1.2997999787330627e-02</internalNodes>\n          <leafValues>\n            -3.2297500967979431e-01 2.6941800117492676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2705 5.7891998440027237e-02</internalNodes>\n          <leafValues>\n            1.2644399702548981e-01 -6.0713499784469604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2706 -2.2824000567197800e-02</internalNodes>\n          <leafValues>\n            -4.9682098627090454e-01 2.2376999258995056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2707 4.8312000930309296e-02</internalNodes>\n          <leafValues>\n            4.3607000261545181e-02 4.8537799715995789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2708 2.5714000687003136e-02</internalNodes>\n          <leafValues>\n            -4.2950998991727829e-02 -9.3023502826690674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2709 6.9269998930394650e-03</internalNodes>\n          <leafValues>\n            -2.9680000152438879e-03 3.4296301007270813e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2710 -3.4446999430656433e-02</internalNodes>\n          <leafValues>\n            -1.5299769639968872e+00 -6.1014998704195023e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2711 2.9387999325990677e-02</internalNodes>\n          <leafValues>\n            3.7595998495817184e-02 6.4172399044036865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2712 -2.4319998919963837e-03</internalNodes>\n          <leafValues>\n            9.9088996648788452e-02 -3.9688101410865784e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>200</maxWeakCount>\n      <stageThreshold>-2.9928278923034668e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2713 -9.5944002270698547e-02</internalNodes>\n          <leafValues>\n            6.2419098615646362e-01 -4.5875200629234314e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2714 1.6834000125527382e-02</internalNodes>\n          <leafValues>\n            -9.3072801828384399e-01 2.1563600003719330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2715 2.6049999520182610e-02</internalNodes>\n          <leafValues>\n            -4.0532299876213074e-01 4.2256599664688110e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2716 3.6500001442618668e-04</internalNodes>\n          <leafValues>\n            9.5288001000881195e-02 -6.3298100233078003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2717 -6.6940002143383026e-03</internalNodes>\n          <leafValues>\n            3.7243801355361938e-01 -3.0332401394844055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2718 1.8874000757932663e-02</internalNodes>\n          <leafValues>\n            -2.3357200622558594e-01 4.0330699086189270e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2719 -1.6300000424962491e-04</internalNodes>\n          <leafValues>\n            4.2886998504400253e-02 -7.7796798944473267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2720 -7.6259002089500427e-02</internalNodes>\n          <leafValues>\n            -4.9628499150276184e-01 1.6335399448871613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2721 5.0149001181125641e-02</internalNodes>\n          <leafValues>\n            3.2747000455856323e-02 -8.0047899484634399e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2722 -2.9239999130368233e-03</internalNodes>\n          <leafValues>\n            -5.0002801418304443e-01 2.5480601191520691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2723 1.6243999823927879e-02</internalNodes>\n          <leafValues>\n            3.8913000375032425e-02 -7.0724898576736450e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2724 3.7811998277902603e-02</internalNodes>\n          <leafValues>\n            -6.6267997026443481e-02 7.3868799209594727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2725 -1.2319999746978283e-02</internalNodes>\n          <leafValues>\n            4.8696398735046387e-01 -2.4485599994659424e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2726 5.8003999292850494e-02</internalNodes>\n          <leafValues>\n            1.3459099829196930e-01 -1.3232100009918213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2727 4.8630000092089176e-03</internalNodes>\n          <leafValues>\n            -4.4172900915145874e-01 1.4005599915981293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2728 4.5690998435020447e-02</internalNodes>\n          <leafValues>\n            3.1217999756336212e-02 8.9818298816680908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2729 2.1321000531315804e-02</internalNodes>\n          <leafValues>\n            1.2008000165224075e-02 -8.6066198348999023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2730 1.5679100155830383e-01</internalNodes>\n          <leafValues>\n            1.4055999927222729e-02 8.5332900285720825e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2731 -1.0328999720513821e-02</internalNodes>\n          <leafValues>\n            2.9022800922393799e-01 -2.9478800296783447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2732 2.4290001019835472e-03</internalNodes>\n          <leafValues>\n            -4.0439900755882263e-01 1.9400200247764587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2733 -2.3338999599218369e-02</internalNodes>\n          <leafValues>\n            3.2945200800895691e-01 -2.5712698698043823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2734 -6.8970001302659512e-03</internalNodes>\n          <leafValues>\n            -5.3352999687194824e-01 2.1635200083255768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2735 -3.4403000026941299e-02</internalNodes>\n          <leafValues>\n            -1.4425489902496338e+00 -4.4682998210191727e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2736 -2.1235000342130661e-02</internalNodes>\n          <leafValues>\n            -7.9017502069473267e-01 1.9084100425243378e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2737 2.0620001014322042e-03</internalNodes>\n          <leafValues>\n            -2.6931199431419373e-01 3.1488001346588135e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2738 -4.2190002277493477e-03</internalNodes>\n          <leafValues>\n            -5.4464399814605713e-01 1.6574600338935852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2739 -1.4334999956190586e-02</internalNodes>\n          <leafValues>\n            2.2105000913143158e-02 -6.2342500686645508e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2740 -8.2120001316070557e-03</internalNodes>\n          <leafValues>\n            -4.9884998798370361e-01 1.9237099587917328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2741 -9.3350000679492950e-03</internalNodes>\n          <leafValues>\n            -7.9131197929382324e-01 -1.4143999665975571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2742 -3.7937998771667480e-02</internalNodes>\n          <leafValues>\n            7.9841297864913940e-01 -3.3799000084400177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2743 4.7059999778866768e-03</internalNodes>\n          <leafValues>\n            -3.3163401484489441e-01 2.0726299285888672e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2744 -4.4499998912215233e-03</internalNodes>\n          <leafValues>\n            -2.7256301045417786e-01 1.8402199447154999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2745 5.2189999260008335e-03</internalNodes>\n          <leafValues>\n            -5.3096002340316772e-01 5.2607998251914978e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2746 -9.5399999991059303e-03</internalNodes>\n          <leafValues>\n            -5.6485402584075928e-01 1.9269399344921112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2747 4.4969998300075531e-02</internalNodes>\n          <leafValues>\n            -1.7411500215530396e-01 9.5382601022720337e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2748 1.4209000393748283e-02</internalNodes>\n          <leafValues>\n            -9.1949000954627991e-02 2.4836100637912750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2749 1.6380199790000916e-01</internalNodes>\n          <leafValues>\n            -5.8497000485658646e-02 -1.6404409408569336e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2750 2.5579999200999737e-03</internalNodes>\n          <leafValues>\n            2.3447999358177185e-01 -9.2734001576900482e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2751 -3.8499999791383743e-03</internalNodes>\n          <leafValues>\n            1.7880700528621674e-01 -3.5844099521636963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2752 -2.5221999734640121e-02</internalNodes>\n          <leafValues>\n            -4.2903000116348267e-01 2.0244500041007996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2753 -1.9415000453591347e-02</internalNodes>\n          <leafValues>\n            5.8016300201416016e-01 -1.8806399405002594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2754 1.4419999904930592e-02</internalNodes>\n          <leafValues>\n            3.2846998423337936e-02 8.1980502605438232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2755 5.1582999527454376e-02</internalNodes>\n          <leafValues>\n            6.9176003336906433e-02 -4.5866298675537109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2756 -3.7960000336170197e-02</internalNodes>\n          <leafValues>\n            -1.2553000450134277e+00 1.4332899451255798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2757 -2.9560999944806099e-02</internalNodes>\n          <leafValues>\n            5.3151798248291016e-01 -2.0596499741077423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2758 -3.9110999554395676e-02</internalNodes>\n          <leafValues>\n            1.1658719778060913e+00 5.3897000849246979e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2759 -2.9159000143408775e-02</internalNodes>\n          <leafValues>\n            3.9307600259780884e-01 -2.2184500098228455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2760 -8.3617001771926880e-02</internalNodes>\n          <leafValues>\n            -7.3744499683380127e-01 1.4268200099468231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2761 4.2004001140594482e-01</internalNodes>\n          <leafValues>\n            -1.4277400076389313e-01 1.7894840240478516e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2762 6.0005001723766327e-02</internalNodes>\n          <leafValues>\n            1.1976700276136398e-01 -1.8886189460754395e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2763 -1.8981000408530235e-02</internalNodes>\n          <leafValues>\n            -1.4148449897766113e+00 -5.6522998958826065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2764 -6.0049998573958874e-03</internalNodes>\n          <leafValues>\n            4.4170799851417542e-01 -1.0200800001621246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2765 -5.8214001357555389e-02</internalNodes>\n          <leafValues>\n            -1.3918470144271851e+00 -4.8268999904394150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2766 -1.2271000072360039e-02</internalNodes>\n          <leafValues>\n            5.1317697763442993e-01 -9.3696996569633484e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2767 4.6585999429225922e-02</internalNodes>\n          <leafValues>\n            -5.7484000921249390e-02 -1.4283169507980347e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2768 1.2110000243410468e-03</internalNodes>\n          <leafValues>\n            -8.0891996622085571e-02 3.2333201169967651e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2769 -8.8642001152038574e-02</internalNodes>\n          <leafValues>\n            -8.6449098587036133e-01 -3.3146999776363373e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2770 -2.3184999823570251e-02</internalNodes>\n          <leafValues>\n            5.2162200212478638e-01 -1.6168000176548958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2771 4.3090000748634338e-02</internalNodes>\n          <leafValues>\n            -1.6153800487518311e-01 1.0915000438690186e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2772 2.0599999697878957e-04</internalNodes>\n          <leafValues>\n            -1.7091499269008636e-01 3.1236699223518372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2773 8.9159999042749405e-03</internalNodes>\n          <leafValues>\n            -6.7039998248219490e-03 -6.8810397386550903e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2774 -1.7752999439835548e-02</internalNodes>\n          <leafValues>\n            6.3292801380157471e-01 -4.2360001243650913e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2775 6.2299999408423901e-03</internalNodes>\n          <leafValues>\n            -3.3637198805809021e-01 1.2790599465370178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2776 2.2770000621676445e-02</internalNodes>\n          <leafValues>\n            -3.4703999757766724e-02 3.9141800999641418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2777 -2.1534999832510948e-02</internalNodes>\n          <leafValues>\n            6.4765101671218872e-01 -2.0097799599170685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2778 6.1758998781442642e-02</internalNodes>\n          <leafValues>\n            5.4297000169754028e-02 9.0700101852416992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2779 -7.8069999814033508e-02</internalNodes>\n          <leafValues>\n            6.5523397922515869e-01 -1.9754399359226227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2780 1.1315000243484974e-02</internalNodes>\n          <leafValues>\n            1.9385300576686859e-01 -5.1707297563552856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2781 -2.5590000674128532e-02</internalNodes>\n          <leafValues>\n            -9.3096500635147095e-01 -3.1546998769044876e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2782 -3.8058999925851822e-02</internalNodes>\n          <leafValues>\n            -6.8326902389526367e-01 1.2709100544452667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2783 9.7970003262162209e-03</internalNodes>\n          <leafValues>\n            1.5523999929428101e-02 -6.3347899913787842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2784 -1.3841999694705009e-02</internalNodes>\n          <leafValues>\n            1.0060529708862305e+00 6.2812998890876770e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2785 8.3459997549653053e-03</internalNodes>\n          <leafValues>\n            -2.3383200168609619e-01 3.0982699990272522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2786 -7.1439996361732483e-02</internalNodes>\n          <leafValues>\n            -7.2505402565002441e-01 1.7148299515247345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2787 1.0006000287830830e-02</internalNodes>\n          <leafValues>\n            -2.2071999311447144e-01 3.5266199707984924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2788 1.1005300283432007e-01</internalNodes>\n          <leafValues>\n            1.6662000119686127e-01 -7.4318999052047729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2789 3.5310998558998108e-02</internalNodes>\n          <leafValues>\n            -2.3982700705528259e-01 4.1435998678207397e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2790 -1.1174699664115906e-01</internalNodes>\n          <leafValues>\n            5.1045399904251099e-01 2.2319999989122152e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2791 -1.1367800086736679e-01</internalNodes>\n          <leafValues>\n            9.0475201606750488e-01 -1.6615299880504608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2792 1.6667999327182770e-02</internalNodes>\n          <leafValues>\n            1.4024500548839569e-01 -5.2178502082824707e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2793 -8.0340001732110977e-03</internalNodes>\n          <leafValues>\n            -6.6178399324417114e-01 3.7640000227838755e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2794 -3.3096998929977417e-02</internalNodes>\n          <leafValues>\n            8.0185902118682861e-01 5.9385001659393311e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2795 1.2547999620437622e-02</internalNodes>\n          <leafValues>\n            -3.3545500040054321e-01 1.4578600227832794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2796 -4.2073998600244522e-02</internalNodes>\n          <leafValues>\n            -5.5509102344512939e-01 1.3266600668430328e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2797 2.5221999734640121e-02</internalNodes>\n          <leafValues>\n            -6.1631999909877777e-02 -1.3678770065307617e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2798 -2.4268999695777893e-02</internalNodes>\n          <leafValues>\n            3.4185099601745605e-01 -7.4160001240670681e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2799 -1.2280000373721123e-02</internalNodes>\n          <leafValues>\n            2.7745801210403442e-01 -3.1033900380134583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2800 -1.1377099901437759e-01</internalNodes>\n          <leafValues>\n            1.1719540357589722e+00 8.3681002259254456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2801 -8.4771998226642609e-02</internalNodes>\n          <leafValues>\n            8.1694799661636353e-01 -1.7837500572204590e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2802 -2.4552000686526299e-02</internalNodes>\n          <leafValues>\n            -1.8627299368381500e-01 1.4340099692344666e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2803 -9.0269995853304863e-03</internalNodes>\n          <leafValues>\n            3.2659199833869934e-01 -2.3541299998760223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2804 1.1177999898791313e-02</internalNodes>\n          <leafValues>\n            1.9761200249195099e-01 -2.1701000630855560e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2805 -2.9366999864578247e-02</internalNodes>\n          <leafValues>\n            -9.3414801359176636e-01 -2.1704999729990959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2806 6.3640000298619270e-03</internalNodes>\n          <leafValues>\n            2.5573000311851501e-02 4.6412798762321472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2807 1.4026000164449215e-02</internalNodes>\n          <leafValues>\n            -2.1228599548339844e-01 4.0078800916671753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2808 -1.3341999612748623e-02</internalNodes>\n          <leafValues>\n            7.4202698469161987e-01 2.9001999646425247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2809 2.8422799706459045e-01</internalNodes>\n          <leafValues>\n            -1.9243599474430084e-01 4.3631199002265930e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2810 -2.3724000155925751e-01</internalNodes>\n          <leafValues>\n            6.9736397266387939e-01 6.9307997822761536e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2811 -1.1169700324535370e-01</internalNodes>\n          <leafValues>\n            3.9147201180458069e-01 -2.0922000706195831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2812 1.2787500023841858e-01</internalNodes>\n          <leafValues>\n            -7.2555996477603912e-02 3.6088201403617859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2813 -6.2900997698307037e-02</internalNodes>\n          <leafValues>\n            9.5424997806549072e-01 -1.5402799844741821e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2814 1.7439000308513641e-02</internalNodes>\n          <leafValues>\n            -5.1134999841451645e-02 2.7750301361083984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2815 1.2319999514147639e-03</internalNodes>\n          <leafValues>\n            7.5627997517585754e-02 -3.6456099152565002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2816 2.7495000511407852e-02</internalNodes>\n          <leafValues>\n            5.1844000816345215e-02 4.1562598943710327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2817 -4.3543998152017593e-02</internalNodes>\n          <leafValues>\n            7.1969997882843018e-01 -1.7132200300693512e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2818 1.1025999672710896e-02</internalNodes>\n          <leafValues>\n            1.4354600012302399e-01 -6.5403002500534058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2819 2.0865999162197113e-02</internalNodes>\n          <leafValues>\n            4.0089000016450882e-02 -4.5743298530578613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2820 -2.2304000332951546e-02</internalNodes>\n          <leafValues>\n            5.3855001926422119e-01 7.1662999689579010e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2821 3.2492000609636307e-02</internalNodes>\n          <leafValues>\n            -4.5991998165845871e-02 -1.0047069787979126e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2822 1.2269999831914902e-02</internalNodes>\n          <leafValues>\n            3.4334998577833176e-02 4.2431798577308655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2823 8.3820000290870667e-03</internalNodes>\n          <leafValues>\n            -2.5850600004196167e-01 2.6263499259948730e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2824 3.7353999912738800e-02</internalNodes>\n          <leafValues>\n            1.5692499279975891e-01 -1.0429090261459351e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2825 -1.4111000113189220e-02</internalNodes>\n          <leafValues>\n            -7.3177701234817505e-01 -2.0276999101042747e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2826 5.7066999375820160e-02</internalNodes>\n          <leafValues>\n            8.3360001444816589e-02 1.5661499500274658e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2827 4.9680001102387905e-03</internalNodes>\n          <leafValues>\n            -3.5318198800086975e-01 1.4698399603366852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2828 -2.4492999538779259e-02</internalNodes>\n          <leafValues>\n            2.8325900435447693e-01 -3.4640000667423010e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2829 -1.1254999786615372e-02</internalNodes>\n          <leafValues>\n            -8.4017497301101685e-01 -3.6251999437808990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2830 3.4533001482486725e-02</internalNodes>\n          <leafValues>\n            1.4998500049114227e-01 -8.7367099523544312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2831 2.4303000420331955e-02</internalNodes>\n          <leafValues>\n            -1.8787500262260437e-01 5.9483999013900757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2832 -7.8790001571178436e-03</internalNodes>\n          <leafValues>\n            4.4315698742866516e-01 -5.6570999324321747e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2833 3.5142000764608383e-02</internalNodes>\n          <leafValues>\n            -5.6494999676942825e-02 -1.3617190122604370e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2834 4.6259998343884945e-03</internalNodes>\n          <leafValues>\n            -3.1161698698997498e-01 2.5447699427604675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2835 -8.3131000399589539e-02</internalNodes>\n          <leafValues>\n            1.6424349546432495e+00 -1.4429399371147156e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2836 -1.4015999622642994e-02</internalNodes>\n          <leafValues>\n            -7.7819502353668213e-01 1.7173300683498383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2837 1.2450000504031777e-03</internalNodes>\n          <leafValues>\n            -2.3191399872303009e-01 2.8527900576591492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2838 -1.6803000122308731e-02</internalNodes>\n          <leafValues>\n            -3.5965099930763245e-01 2.0412999391555786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2839 -7.6747998595237732e-02</internalNodes>\n          <leafValues>\n            7.8050500154495239e-01 -1.5612800419330597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2840 -2.3671999573707581e-01</internalNodes>\n          <leafValues>\n            1.1813700199127197e+00 7.8111998736858368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2841 -1.0057400166988373e-01</internalNodes>\n          <leafValues>\n            -4.7104099392890930e-01 7.9172998666763306e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2842 1.3239999534562230e-03</internalNodes>\n          <leafValues>\n            2.2262699902057648e-01 -3.7099799513816833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2843 2.2152999415993690e-02</internalNodes>\n          <leafValues>\n            -3.8649000227451324e-02 -9.2274999618530273e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2844 -1.1246199905872345e-01</internalNodes>\n          <leafValues>\n            4.1899600625038147e-01 8.0411002039909363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2845 1.6481000930070877e-02</internalNodes>\n          <leafValues>\n            -1.6756699979305267e-01 7.1842402219772339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2846 6.8113997578620911e-02</internalNodes>\n          <leafValues>\n            1.5719899535179138e-01 -8.7681102752685547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2847 1.6011999920010567e-02</internalNodes>\n          <leafValues>\n            -4.1600000113248825e-03 -5.9327799081802368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2848 4.6640001237392426e-03</internalNodes>\n          <leafValues>\n            -3.0153999105095863e-02 4.8345300555229187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2849 6.7579997703433037e-03</internalNodes>\n          <leafValues>\n            -2.2667400538921356e-01 3.3662301301956177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2850 4.7289999201893806e-03</internalNodes>\n          <leafValues>\n            -6.0373999178409576e-02 3.1458100676536560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2851 2.5869999080896378e-03</internalNodes>\n          <leafValues>\n            -2.9872599244117737e-01 1.7787499725818634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2852 2.8989999555051327e-03</internalNodes>\n          <leafValues>\n            2.1890200674533844e-01 -2.9567098617553711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2853 -3.0053999274969101e-02</internalNodes>\n          <leafValues>\n            1.2150429487228394e+00 -1.4354999363422394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2854 1.4181000180542469e-02</internalNodes>\n          <leafValues>\n            1.2451999820768833e-02 5.5490100383758545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2855 -6.0527000576257706e-02</internalNodes>\n          <leafValues>\n            -1.4933999776840210e+00 -6.5227001905441284e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2856 -1.9882999360561371e-02</internalNodes>\n          <leafValues>\n            -3.8526400923728943e-01 1.9761200249195099e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2857 3.1218999996781349e-02</internalNodes>\n          <leafValues>\n            -2.1281200647354126e-01 2.9446500539779663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2858 1.8271999433636665e-02</internalNodes>\n          <leafValues>\n            9.7200000891461968e-04 6.6814202070236206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2859 1.1089999461546540e-03</internalNodes>\n          <leafValues>\n            -6.2467902898788452e-01 -1.6599999507889152e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2860 -3.6713998764753342e-02</internalNodes>\n          <leafValues>\n            -4.2333900928497314e-01 1.2084700167179108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2861 1.2044000439345837e-02</internalNodes>\n          <leafValues>\n            2.5882000103592873e-02 -5.0732398033142090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2862 7.4749000370502472e-02</internalNodes>\n          <leafValues>\n            1.3184699416160583e-01 -2.1739600598812103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2863 -2.3473200201988220e-01</internalNodes>\n          <leafValues>\n            1.1775610446929932e+00 -1.5114699304103851e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2864 1.4096499979496002e-01</internalNodes>\n          <leafValues>\n            3.3991001546382904e-02 3.9923098683357239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2865 6.1789997853338718e-03</internalNodes>\n          <leafValues>\n            -3.1806701421737671e-01 1.1681699752807617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2866 -5.7216998189687729e-02</internalNodes>\n          <leafValues>\n            8.4399098157882690e-01 8.3889000117778778e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2867 -5.5227000266313553e-02</internalNodes>\n          <leafValues>\n            3.6888301372528076e-01 -1.8913400173187256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2868 -2.1583000198006630e-02</internalNodes>\n          <leafValues>\n            -5.2161800861358643e-01 1.5772600471973419e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2869 2.5747999548912048e-02</internalNodes>\n          <leafValues>\n            -5.9921998530626297e-02 -1.0674990415573120e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2870 -1.3098999857902527e-02</internalNodes>\n          <leafValues>\n            7.8958398103713989e-01 5.2099999040365219e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2871 2.2799998987466097e-03</internalNodes>\n          <leafValues>\n            -1.1704430580139160e+00 -5.9356998652219772e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2872 8.8060004636645317e-03</internalNodes>\n          <leafValues>\n            4.1717998683452606e-02 6.6352599859237671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2873 -8.9699998497962952e-03</internalNodes>\n          <leafValues>\n            -3.5862699151039124e-01 6.0458000749349594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2874 4.0230001322925091e-03</internalNodes>\n          <leafValues>\n            2.0979399979114532e-01 -2.4806000292301178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2875 2.5017000734806061e-02</internalNodes>\n          <leafValues>\n            -1.8795900046825409e-01 3.9547100663185120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2876 -5.9009999968111515e-03</internalNodes>\n          <leafValues>\n            2.5663900375366211e-01 -9.4919003546237946e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2877 4.3850000947713852e-03</internalNodes>\n          <leafValues>\n            3.3139001578092575e-02 -4.6075400710105896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2878 -3.3771999180316925e-02</internalNodes>\n          <leafValues>\n            -9.8881602287292480e-01 1.4636899530887604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2879 4.4523000717163086e-02</internalNodes>\n          <leafValues>\n            -1.3286699354648590e-01 1.5796790122985840e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2880 -4.0929000824689865e-02</internalNodes>\n          <leafValues>\n            3.3877098560333252e-01 7.4970997869968414e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2881 3.9351999759674072e-02</internalNodes>\n          <leafValues>\n            -1.8327899277210236e-01 4.6980699896812439e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2882 -7.0322997868061066e-02</internalNodes>\n          <leafValues>\n            -9.8322701454162598e-01 1.1808100342750549e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2883 3.5743001848459244e-02</internalNodes>\n          <leafValues>\n            -3.3050999045372009e-02 -8.3610898256301880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2884 -4.2961999773979187e-02</internalNodes>\n          <leafValues>\n            1.1670809984207153e+00 8.0692000687122345e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2885 -2.1007999777793884e-02</internalNodes>\n          <leafValues>\n            6.3869798183441162e-01 -1.7626300454139709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2886 -1.5742200613021851e-01</internalNodes>\n          <leafValues>\n            -2.3302499949932098e-01 1.2517499923706055e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2887 7.8659998252987862e-03</internalNodes>\n          <leafValues>\n            -2.2037999331951141e-01 2.7196800708770752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2888 2.3622000589966774e-02</internalNodes>\n          <leafValues>\n            1.6127300262451172e-01 -4.3329000473022461e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2889 7.4692003428936005e-02</internalNodes>\n          <leafValues>\n            -1.6991999745368958e-01 5.8884900808334351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2890 -6.4799998654052615e-04</internalNodes>\n          <leafValues>\n            2.5842899084091187e-01 -3.5911999642848969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2891 -1.6290999948978424e-02</internalNodes>\n          <leafValues>\n            -7.6764398813247681e-01 -2.0472999662160873e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2892 -3.3133998513221741e-02</internalNodes>\n          <leafValues>\n            -2.7180099487304688e-01 1.4325700700283051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2893 4.8797998577356339e-02</internalNodes>\n          <leafValues>\n            7.6408997178077698e-02 -4.1445198655128479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2894 2.2869999520480633e-03</internalNodes>\n          <leafValues>\n            -3.8628999143838882e-02 2.0753799378871918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2895 4.5304000377655029e-02</internalNodes>\n          <leafValues>\n            -1.7777900397777557e-01 6.3461399078369141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2896 1.0705800354480743e-01</internalNodes>\n          <leafValues>\n            1.8972299993038177e-01 -5.1236200332641602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2897 -4.0525000542402267e-02</internalNodes>\n          <leafValues>\n            7.0614999532699585e-01 -1.7803299427032471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2898 3.1968999654054642e-02</internalNodes>\n          <leafValues>\n            6.8149998784065247e-02 6.8733102083206177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2899 -5.7617001235485077e-02</internalNodes>\n          <leafValues>\n            7.5170499086380005e-01 -1.5764999389648438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2900 1.3593999668955803e-02</internalNodes>\n          <leafValues>\n            1.9411900639533997e-01 -2.4561899900436401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2901 7.1396000683307648e-02</internalNodes>\n          <leafValues>\n            -4.6881001442670822e-02 -8.8198298215866089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2902 -1.4895999804139137e-02</internalNodes>\n          <leafValues>\n            -4.4532400369644165e-01 1.7679899930953979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2903 -1.0026000440120697e-02</internalNodes>\n          <leafValues>\n            6.5122699737548828e-01 -1.6709999740123749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2904 3.7589999847114086e-03</internalNodes>\n          <leafValues>\n            -5.8301001787185669e-02 3.4483298659324646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2905 1.6263000667095184e-02</internalNodes>\n          <leafValues>\n            -1.5581500530242920e-01 8.6432701349258423e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2906 -4.0176000446081161e-02</internalNodes>\n          <leafValues>\n            -6.1028599739074707e-01 1.1796399950981140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2907 2.7080999687314034e-02</internalNodes>\n          <leafValues>\n            -4.9601998180150986e-02 -8.9990001916885376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2908 5.2420001477003098e-02</internalNodes>\n          <leafValues>\n            1.1297199875116348e-01 -1.0833640098571777e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2909 -1.9160000607371330e-02</internalNodes>\n          <leafValues>\n            -7.9880100488662720e-01 -3.4079000353813171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2910 -3.7730000913143158e-03</internalNodes>\n          <leafValues>\n            -1.9124099612236023e-01 2.1535199880599976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2911 7.5762003660202026e-02</internalNodes>\n          <leafValues>\n            -1.3421699404716492e-01 1.6807060241699219e+00</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2912 -2.2173000499606133e-02</internalNodes>\n          <leafValues>\n            4.8600998520851135e-01 3.6160000599920750e-03</leafValues></_></weakClassifiers></_></stages>\n  <features>\n    <_>\n      <rects>\n        <_>\n          6 4 12 9 -1.</_>\n        <_>\n          6 7 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 7 -1.</_>\n        <_>\n          10 4 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 18 9 -1.</_>\n        <_>\n          3 12 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 9 6 -1.</_>\n        <_>\n          8 20 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 4 19 -1.</_>\n        <_>\n          5 5 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 16 -1.</_>\n        <_>\n          6 13 12 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 6 -1.</_>\n        <_>\n          5 11 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 4 10 -1.</_>\n        <_>\n          11 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 7 6 -1.</_>\n        <_>\n          4 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 6 -1.</_>\n        <_>\n          6 8 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 7 -1.</_>\n        <_>\n          10 4 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 19 12 -1.</_>\n        <_>\n          1 12 19 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 3 -1.</_>\n        <_>\n          8 2 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 15 -1.</_>\n        <_>\n          9 14 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 10 -1.</_>\n        <_>\n          5 11 14 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 14 9 -1.</_>\n        <_>\n          5 3 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 9 6 -1.</_>\n        <_>\n          16 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          9 5 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 10 -1.</_>\n        <_>\n          12 8 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 4 9 -1.</_>\n        <_>\n          4 5 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 6 11 -1.</_>\n        <_>\n          20 0 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 24 13 -1.</_>\n        <_>\n          8 6 8 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 10 6 -1.</_>\n        <_>\n          7 20 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 14 12 -1.</_>\n        <_>\n          5 13 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 24 3 -1.</_>\n        <_>\n          8 3 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 15 6 -1.</_>\n        <_>\n          5 11 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 5 14 -1.</_>\n        <_>\n          9 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 10 -1.</_>\n        <_>\n          11 5 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 3 12 -1.</_>\n        <_>\n          6 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 18 3 -1.</_>\n        <_>\n          9 21 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 13 6 -1.</_>\n        <_>\n          5 8 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 6 15 -1.</_>\n        <_>\n          18 1 3 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 15 -1.</_>\n        <_>\n          4 1 3 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 24 15 -1.</_>\n        <_>\n          8 8 8 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 12 -1.</_>\n        <_>\n          5 6 7 6 2.</_>\n        <_>\n          12 12 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 21 12 -1.</_>\n        <_>\n          2 16 21 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          10 1 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 20 10 -1.</_>\n        <_>\n          2 13 10 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 13 -1.</_>\n        <_>\n          2 1 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 2 4 13 -1.</_>\n        <_>\n          20 2 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 22 19 -1.</_>\n        <_>\n          11 5 11 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 6 9 -1.</_>\n        <_>\n          20 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 11 -1.</_>\n        <_>\n          2 3 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 4 9 -1.</_>\n        <_>\n          12 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 19 3 -1.</_>\n        <_>\n          0 7 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 4 9 -1.</_>\n        <_>\n          12 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 9 -1.</_>\n        <_>\n          10 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 14 14 -1.</_>\n        <_>\n          12 5 7 7 2.</_>\n        <_>\n          5 12 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 2 -1.</_>\n        <_>\n          1 11 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 13 4 11 -1.</_>\n        <_>\n          17 13 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 9 -1.</_>\n        <_>\n          0 7 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 9 -1.</_>\n        <_>\n          6 7 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 6 -1.</_>\n        <_>\n          10 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 5 -1.</_>\n        <_>\n          8 1 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 18 6 -1.</_>\n        <_>\n          4 12 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 12 6 -1.</_>\n        <_>\n          2 17 6 3 2.</_>\n        <_>\n          8 20 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 3 4 13 -1.</_>\n        <_>\n          19 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 4 13 -1.</_>\n        <_>\n          3 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 23 -1.</_>\n        <_>\n          8 1 8 23 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 8 12 -1.</_>\n        <_>\n          1 11 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 3 14 -1.</_>\n        <_>\n          14 14 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 16 6 -1.</_>\n        <_>\n          3 12 8 3 2.</_>\n        <_>\n          11 15 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 6 -1.</_>\n        <_>\n          6 8 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 12 -1.</_>\n        <_>\n          8 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 9 6 -1.</_>\n        <_>\n          15 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          1 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 16 12 -1.</_>\n        <_>\n          4 10 16 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 20 -1.</_>\n        <_>\n          2 1 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 18 2 -1.</_>\n        <_>\n          3 1 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 20 14 -1.</_>\n        <_>\n          1 5 10 7 2.</_>\n        <_>\n          11 12 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 14 12 -1.</_>\n        <_>\n          5 12 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 7 9 -1.</_>\n        <_>\n          3 17 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 9 6 -1.</_>\n        <_>\n          14 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 9 6 -1.</_>\n        <_>\n          1 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 8 10 -1.</_>\n        <_>\n          15 6 4 5 2.</_>\n        <_>\n          11 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 14 14 -1.</_>\n        <_>\n          5 5 7 7 2.</_>\n        <_>\n          12 12 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 5 -1.</_>\n        <_>\n          10 0 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 9 -1.</_>\n        <_>\n          9 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 9 -1.</_>\n        <_>\n          12 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 9 -1.</_>\n        <_>\n          10 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 18 4 -1.</_>\n        <_>\n          9 8 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 9 -1.</_>\n        <_>\n          6 3 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 6 -1.</_>\n        <_>\n          8 0 8 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 16 12 -1.</_>\n        <_>\n          4 11 16 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 6 -1.</_>\n        <_>\n          11 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 20 24 3 -1.</_>\n        <_>\n          8 20 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 9 -1.</_>\n        <_>\n          11 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 4 -1.</_>\n        <_>\n          9 13 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 9 -1.</_>\n        <_>\n          11 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 9 -1.</_>\n        <_>\n          11 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 12 -1.</_>\n        <_>\n          9 18 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 22 18 2 -1.</_>\n        <_>\n          1 23 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 4 10 -1.</_>\n        <_>\n          10 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 10 -1.</_>\n        <_>\n          6 12 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          7 8 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 10 4 -1.</_>\n        <_>\n          0 16 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 18 2 -1.</_>\n        <_>\n          6 19 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 22 3 -1.</_>\n        <_>\n          1 2 22 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 18 3 -1.</_>\n        <_>\n          6 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 15 -1.</_>\n        <_>\n          5 4 3 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 4 4 10 -1.</_>\n        <_>\n          20 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 10 -1.</_>\n        <_>\n          2 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 20 6 -1.</_>\n        <_>\n          12 16 10 3 2.</_>\n        <_>\n          2 19 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 9 -1.</_>\n        <_>\n          4 12 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 9 -1.</_>\n        <_>\n          14 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 6 -1.</_>\n        <_>\n          8 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 12 6 -1.</_>\n        <_>\n          17 8 6 3 2.</_>\n        <_>\n          11 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 6 -1.</_>\n        <_>\n          0 8 6 3 2.</_>\n        <_>\n          6 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 9 -1.</_>\n        <_>\n          14 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 9 -1.</_>\n        <_>\n          8 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 9 6 -1.</_>\n        <_>\n          8 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 9 6 -1.</_>\n        <_>\n          0 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 10 -1.</_>\n        <_>\n          12 8 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 19 12 3 -1.</_>\n        <_>\n          9 19 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 20 2 -1.</_>\n        <_>\n          2 11 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 18 12 -1.</_>\n        <_>\n          2 9 9 6 2.</_>\n        <_>\n          11 15 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 18 24 -1.</_>\n        <_>\n          3 0 9 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 10 -1.</_>\n        <_>\n          5 6 7 5 2.</_>\n        <_>\n          12 11 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 12 -1.</_>\n        <_>\n          14 5 5 6 2.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 12 -1.</_>\n        <_>\n          4 5 6 6 2.</_>\n        <_>\n          10 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 18 3 -1.</_>\n        <_>\n          4 15 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 8 8 -1.</_>\n        <_>\n          6 17 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 18 6 -1.</_>\n        <_>\n          3 19 18 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 18 -1.</_>\n        <_>\n          10 6 4 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 14 -1.</_>\n        <_>\n          8 1 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 19 2 -1.</_>\n        <_>\n          3 3 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 22 13 -1.</_>\n        <_>\n          12 8 11 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 11 4 -1.</_>\n        <_>\n          8 11 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 15 10 -1.</_>\n        <_>\n          5 12 5 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 12 6 -1.</_>\n        <_>\n          16 16 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 12 6 -1.</_>\n        <_>\n          4 16 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 1 5 12 -1.</_>\n        <_>\n          19 5 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 4 -1.</_>\n        <_>\n          8 2 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          6 10 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 9 6 -1.</_>\n        <_>\n          10 5 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 6 6 -1.</_>\n        <_>\n          9 20 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 22 15 -1.</_>\n        <_>\n          0 12 22 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 17 9 -1.</_>\n        <_>\n          4 4 17 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          9 5 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 6 8 -1.</_>\n        <_>\n          18 1 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 7 -1.</_>\n        <_>\n          3 1 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 6 22 -1.</_>\n        <_>\n          18 0 3 22 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 22 -1.</_>\n        <_>\n          3 0 3 22 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 8 16 -1.</_>\n        <_>\n          16 7 4 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 19 6 -1.</_>\n        <_>\n          2 12 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 12 -1.</_>\n        <_>\n          9 13 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 17 6 -1.</_>\n        <_>\n          2 17 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 3 14 -1.</_>\n        <_>\n          14 14 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 10 -1.</_>\n        <_>\n          5 6 4 5 2.</_>\n        <_>\n          9 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 9 11 -1.</_>\n        <_>\n          18 8 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 11 -1.</_>\n        <_>\n          3 8 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 10 18 -1.</_>\n        <_>\n          8 15 10 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 14 -1.</_>\n        <_>\n          7 14 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 24 8 -1.</_>\n        <_>\n          8 14 8 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 14 -1.</_>\n        <_>\n          10 10 9 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 6 -1.</_>\n        <_>\n          14 15 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 10 16 -1.</_>\n        <_>\n          7 0 5 8 2.</_>\n        <_>\n          12 8 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 9 6 -1.</_>\n        <_>\n          13 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 4 -1.</_>\n        <_>\n          12 3 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 9 6 -1.</_>\n        <_>\n          13 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 20 4 -1.</_>\n        <_>\n          1 1 10 2 2.</_>\n        <_>\n          11 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 9 6 -1.</_>\n        <_>\n          13 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 9 6 -1.</_>\n        <_>\n          8 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 10 6 -1.</_>\n        <_>\n          8 20 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 9 -1.</_>\n        <_>\n          8 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 12 6 -1.</_>\n        <_>\n          7 5 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 3 -1.</_>\n        <_>\n          0 11 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 22 3 -1.</_>\n        <_>\n          1 11 22 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 8 8 -1.</_>\n        <_>\n          9 11 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 6 6 -1.</_>\n        <_>\n          12 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 6 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 11 6 -1.</_>\n        <_>\n          7 12 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 24 4 -1.</_>\n        <_>\n          0 13 12 2 2.</_>\n        <_>\n          12 15 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 22 12 -1.</_>\n        <_>\n          13 4 11 6 2.</_>\n        <_>\n          2 10 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 20 17 -1.</_>\n        <_>\n          12 0 10 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 24 -1.</_>\n        <_>\n          14 0 1 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 24 -1.</_>\n        <_>\n          9 0 1 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 2 22 -1.</_>\n        <_>\n          14 1 1 22 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 2 22 -1.</_>\n        <_>\n          9 1 1 22 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 6 3 18 -1.</_>\n        <_>\n          18 6 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 9 6 -1.</_>\n        <_>\n          6 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 9 4 -1.</_>\n        <_>\n          13 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 18 3 -1.</_>\n        <_>\n          3 19 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 8 18 -1.</_>\n        <_>\n          13 4 4 9 2.</_>\n        <_>\n          9 13 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 12 4 -1.</_>\n        <_>\n          6 2 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 14 6 -1.</_>\n        <_>\n          6 11 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 6 -1.</_>\n        <_>\n          10 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 16 -1.</_>\n        <_>\n          10 13 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 9 16 -1.</_>\n        <_>\n          4 4 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 18 9 -1.</_>\n        <_>\n          5 3 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 5 8 -1.</_>\n        <_>\n          9 19 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 0 4 9 -1.</_>\n        <_>\n          20 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 3 -1.</_>\n        <_>\n          2 1 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 22 19 2 -1.</_>\n        <_>\n          5 23 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 9 -1.</_>\n        <_>\n          2 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 19 18 -1.</_>\n        <_>\n          5 12 19 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          2 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 14 12 -1.</_>\n        <_>\n          13 5 7 6 2.</_>\n        <_>\n          6 11 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 2 -1.</_>\n        <_>\n          0 2 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 22 3 -1.</_>\n        <_>\n          1 3 22 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 7 9 -1.</_>\n        <_>\n          2 11 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 22 4 -1.</_>\n        <_>\n          13 12 11 2 2.</_>\n        <_>\n          2 14 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 22 4 -1.</_>\n        <_>\n          0 12 11 2 2.</_>\n        <_>\n          11 14 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 11 -1.</_>\n        <_>\n          11 7 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 6 -1.</_>\n        <_>\n          10 1 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 4 10 -1.</_>\n        <_>\n          11 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 12 -1.</_>\n        <_>\n          6 10 12 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 6 15 -1.</_>\n        <_>\n          18 6 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 18 3 -1.</_>\n        <_>\n          3 16 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 6 9 -1.</_>\n        <_>\n          18 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 16 6 -1.</_>\n        <_>\n          1 5 8 3 2.</_>\n        <_>\n          9 8 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 24 14 -1.</_>\n        <_>\n          0 4 12 7 2.</_>\n        <_>\n          12 11 12 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 13 -1.</_>\n        <_>\n          13 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 13 -1.</_>\n        <_>\n          9 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 9 -1.</_>\n        <_>\n          13 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 9 -1.</_>\n        <_>\n          10 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 17 9 6 -1.</_>\n        <_>\n          13 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 14 6 -1.</_>\n        <_>\n          2 18 7 3 2.</_>\n        <_>\n          9 21 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 18 4 -1.</_>\n        <_>\n          12 18 9 2 2.</_>\n        <_>\n          3 20 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 20 15 4 -1.</_>\n        <_>\n          5 20 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 15 9 -1.</_>\n        <_>\n          14 15 5 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 16 4 -1.</_>\n        <_>\n          4 6 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          7 8 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 15 10 -1.</_>\n        <_>\n          5 14 5 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 10 14 -1.</_>\n        <_>\n          12 9 5 7 2.</_>\n        <_>\n          7 16 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 9 -1.</_>\n        <_>\n          9 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 3 -1.</_>\n        <_>\n          3 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 3 -1.</_>\n        <_>\n          0 11 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 18 4 -1.</_>\n        <_>\n          12 16 9 2 2.</_>\n        <_>\n          3 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 14 6 -1.</_>\n        <_>\n          4 6 7 3 2.</_>\n        <_>\n          11 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 2 18 -1.</_>\n        <_>\n          13 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 18 -1.</_>\n        <_>\n          10 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 10 -1.</_>\n        <_>\n          10 7 5 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 20 21 4 -1.</_>\n        <_>\n          8 20 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 5 18 -1.</_>\n        <_>\n          10 14 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 6 -1.</_>\n        <_>\n          0 2 12 3 2.</_>\n        <_>\n          12 5 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 22 8 -1.</_>\n        <_>\n          12 1 11 4 2.</_>\n        <_>\n          1 5 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 15 9 -1.</_>\n        <_>\n          4 3 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 19 -1.</_>\n        <_>\n          8 0 8 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 21 18 3 -1.</_>\n        <_>\n          11 21 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 10 4 -1.</_>\n        <_>\n          9 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 4 -1.</_>\n        <_>\n          10 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 8 6 16 -1.</_>\n        <_>\n          20 8 3 8 2.</_>\n        <_>\n          17 16 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 20 4 -1.</_>\n        <_>\n          1 15 10 2 2.</_>\n        <_>\n          11 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 10 6 -1.</_>\n        <_>\n          14 17 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 16 9 -1.</_>\n        <_>\n          3 3 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 7 15 -1.</_>\n        <_>\n          15 11 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 13 -1.</_>\n        <_>\n          11 1 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 6 14 -1.</_>\n        <_>\n          17 2 3 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 12 10 -1.</_>\n        <_>\n          3 14 6 5 2.</_>\n        <_>\n          9 19 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          7 8 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 14 -1.</_>\n        <_>\n          4 2 3 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 5 12 -1.</_>\n        <_>\n          10 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 24 5 -1.</_>\n        <_>\n          8 17 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 12 -1.</_>\n        <_>\n          15 11 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 12 -1.</_>\n        <_>\n          3 1 3 6 2.</_>\n        <_>\n          6 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 6 6 -1.</_>\n        <_>\n          12 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 6 -1.</_>\n        <_>\n          6 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 3 16 -1.</_>\n        <_>\n          14 14 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 13 6 -1.</_>\n        <_>\n          1 14 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 9 -1.</_>\n        <_>\n          13 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 9 6 -1.</_>\n        <_>\n          10 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 6 9 -1.</_>\n        <_>\n          12 2 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 6 9 -1.</_>\n        <_>\n          9 2 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 12 6 -1.</_>\n        <_>\n          6 20 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 9 -1.</_>\n        <_>\n          9 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 12 3 -1.</_>\n        <_>\n          7 7 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 8 21 -1.</_>\n        <_>\n          8 10 8 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 10 12 -1.</_>\n        <_>\n          7 8 10 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          0 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 2 20 -1.</_>\n        <_>\n          15 2 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 9 -1.</_>\n        <_>\n          0 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 2 21 -1.</_>\n        <_>\n          15 3 1 21 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 23 -1.</_>\n        <_>\n          8 0 1 23 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 9 4 -1.</_>\n        <_>\n          15 10 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 4 -1.</_>\n        <_>\n          0 10 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 9 6 -1.</_>\n        <_>\n          8 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 6 -1.</_>\n        <_>\n          0 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 18 4 -1.</_>\n        <_>\n          9 10 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 19 -1.</_>\n        <_>\n          8 0 8 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 8 12 -1.</_>\n        <_>\n          9 7 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 10 -1.</_>\n        <_>\n          12 6 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 10 12 -1.</_>\n        <_>\n          12 9 5 6 2.</_>\n        <_>\n          7 15 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 19 -1.</_>\n        <_>\n          6 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 10 -1.</_>\n        <_>\n          16 0 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 12 -1.</_>\n        <_>\n          2 0 3 6 2.</_>\n        <_>\n          5 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 24 2 -1.</_>\n        <_>\n          0 12 24 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 13 4 -1.</_>\n        <_>\n          4 11 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 9 -1.</_>\n        <_>\n          9 11 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 16 4 -1.</_>\n        <_>\n          0 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 12 6 9 -1.</_>\n        <_>\n          18 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 9 -1.</_>\n        <_>\n          0 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 10 4 -1.</_>\n        <_>\n          8 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 9 -1.</_>\n        <_>\n          10 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 6 15 -1.</_>\n        <_>\n          14 3 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 15 -1.</_>\n        <_>\n          8 3 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 9 4 -1.</_>\n        <_>\n          15 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 7 -1.</_>\n        <_>\n          8 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 6 10 -1.</_>\n        <_>\n          9 19 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 5 8 -1.</_>\n        <_>\n          7 17 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 3 16 -1.</_>\n        <_>\n          14 13 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          2 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 19 3 -1.</_>\n        <_>\n          5 19 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 9 -1.</_>\n        <_>\n          11 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 18 -1.</_>\n        <_>\n          13 4 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 18 -1.</_>\n        <_>\n          10 4 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 18 9 -1.</_>\n        <_>\n          9 3 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 14 -1.</_>\n        <_>\n          8 1 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 9 6 -1.</_>\n        <_>\n          12 19 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 20 16 -1.</_>\n        <_>\n          1 3 10 8 2.</_>\n        <_>\n          11 11 10 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 12 -1.</_>\n        <_>\n          15 5 3 6 2.</_>\n        <_>\n          12 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 22 16 -1.</_>\n        <_>\n          1 2 11 8 2.</_>\n        <_>\n          12 10 11 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 5 10 -1.</_>\n        <_>\n          10 19 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 18 3 -1.</_>\n        <_>\n          3 22 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 6 10 -1.</_>\n        <_>\n          12 14 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 4 -1.</_>\n        <_>\n          8 2 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 9 -1.</_>\n        <_>\n          6 7 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 5 -1.</_>\n        <_>\n          10 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 14 12 -1.</_>\n        <_>\n          5 12 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 8 10 -1.</_>\n        <_>\n          4 14 4 5 2.</_>\n        <_>\n          8 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 5 14 -1.</_>\n        <_>\n          11 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 16 -1.</_>\n        <_>\n          7 14 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 18 8 -1.</_>\n        <_>\n          9 7 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 20 2 -1.</_>\n        <_>\n          2 4 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 19 6 -1.</_>\n        <_>\n          3 14 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 9 -1.</_>\n        <_>\n          10 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 6 14 -1.</_>\n        <_>\n          16 6 3 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 12 -1.</_>\n        <_>\n          9 9 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 6 18 -1.</_>\n        <_>\n          21 6 3 9 2.</_>\n        <_>\n          18 15 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 18 -1.</_>\n        <_>\n          0 6 3 9 2.</_>\n        <_>\n          3 15 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 9 -1.</_>\n        <_>\n          18 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 15 6 -1.</_>\n        <_>\n          3 20 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 9 -1.</_>\n        <_>\n          18 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 18 2 -1.</_>\n        <_>\n          5 11 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 6 -1.</_>\n        <_>\n          6 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          12 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 9 -1.</_>\n        <_>\n          10 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 9 6 -1.</_>\n        <_>\n          15 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 6 -1.</_>\n        <_>\n          3 8 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 9 6 -1.</_>\n        <_>\n          15 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 15 -1.</_>\n        <_>\n          5 5 3 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 9 6 -1.</_>\n        <_>\n          11 8 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          8 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 9 6 -1.</_>\n        <_>\n          15 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 10 4 -1.</_>\n        <_>\n          9 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 19 -1.</_>\n        <_>\n          13 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 4 19 -1.</_>\n        <_>\n          9 1 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 9 6 9 -1.</_>\n        <_>\n          18 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 21 18 3 -1.</_>\n        <_>\n          1 22 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 10 9 -1.</_>\n        <_>\n          14 16 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 22 4 -1.</_>\n        <_>\n          1 13 11 2 2.</_>\n        <_>\n          12 15 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 6 -1.</_>\n        <_>\n          12 6 8 3 2.</_>\n        <_>\n          4 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 22 -1.</_>\n        <_>\n          1 0 9 11 2.</_>\n        <_>\n          10 11 9 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 8 14 -1.</_>\n        <_>\n          14 7 4 7 2.</_>\n        <_>\n          10 14 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 20 -1.</_>\n        <_>\n          0 4 3 10 2.</_>\n        <_>\n          3 14 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 6 9 -1.</_>\n        <_>\n          17 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 9 -1.</_>\n        <_>\n          5 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 6 12 -1.</_>\n        <_>\n          18 12 3 6 2.</_>\n        <_>\n          15 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 6 12 -1.</_>\n        <_>\n          3 12 3 6 2.</_>\n        <_>\n          6 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 9 6 -1.</_>\n        <_>\n          15 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 9 6 -1.</_>\n        <_>\n          0 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 19 3 -1.</_>\n        <_>\n          4 15 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 19 3 -1.</_>\n        <_>\n          2 14 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 10 6 -1.</_>\n        <_>\n          14 17 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 12 -1.</_>\n        <_>\n          6 0 5 6 2.</_>\n        <_>\n          11 6 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 1 6 12 -1.</_>\n        <_>\n          20 1 3 6 2.</_>\n        <_>\n          17 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 12 -1.</_>\n        <_>\n          1 1 3 6 2.</_>\n        <_>\n          4 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 6 9 -1.</_>\n        <_>\n          16 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 9 12 -1.</_>\n        <_>\n          7 9 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 4 12 -1.</_>\n        <_>\n          12 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 8 -1.</_>\n        <_>\n          4 4 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 9 -1.</_>\n        <_>\n          12 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 3 -1.</_>\n        <_>\n          8 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 9 6 -1.</_>\n        <_>\n          15 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 21 23 -1.</_>\n        <_>\n          7 1 7 23 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 17 4 -1.</_>\n        <_>\n          6 11 17 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 11 18 -1.</_>\n        <_>\n          1 6 11 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 13 6 -1.</_>\n        <_>\n          6 17 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 6 -1.</_>\n        <_>\n          0 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 15 4 -1.</_>\n        <_>\n          13 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 9 -1.</_>\n        <_>\n          9 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 18 3 -1.</_>\n        <_>\n          12 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 24 4 -1.</_>\n        <_>\n          8 14 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 3 12 -1.</_>\n        <_>\n          16 16 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 24 3 -1.</_>\n        <_>\n          0 4 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 17 10 6 -1.</_>\n        <_>\n          14 19 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 18 3 -1.</_>\n        <_>\n          7 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 18 9 -1.</_>\n        <_>\n          5 3 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 9 -1.</_>\n        <_>\n          4 6 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 3 12 -1.</_>\n        <_>\n          16 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 18 4 -1.</_>\n        <_>\n          6 7 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 9 -1.</_>\n        <_>\n          12 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 10 -1.</_>\n        <_>\n          11 8 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 6 9 -1.</_>\n        <_>\n          11 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 18 21 -1.</_>\n        <_>\n          12 1 9 21 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 7 -1.</_>\n        <_>\n          6 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 9 -1.</_>\n        <_>\n          10 5 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 4 -1.</_>\n        <_>\n          8 2 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 5 12 -1.</_>\n        <_>\n          14 11 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 5 12 -1.</_>\n        <_>\n          5 11 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 17 -1.</_>\n        <_>\n          3 1 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 19 9 -1.</_>\n        <_>\n          3 4 19 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 12 6 -1.</_>\n        <_>\n          3 18 6 3 2.</_>\n        <_>\n          9 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 4 4 19 -1.</_>\n        <_>\n          20 4 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 10 7 -1.</_>\n        <_>\n          5 16 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 10 12 -1.</_>\n        <_>\n          13 7 5 6 2.</_>\n        <_>\n          8 13 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 12 -1.</_>\n        <_>\n          6 7 5 6 2.</_>\n        <_>\n          11 13 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 9 6 -1.</_>\n        <_>\n          12 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 20 21 4 -1.</_>\n        <_>\n          8 20 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 9 6 -1.</_>\n        <_>\n          9 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 9 6 -1.</_>\n        <_>\n          10 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 14 -1.</_>\n        <_>\n          13 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 14 -1.</_>\n        <_>\n          9 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 9 6 -1.</_>\n        <_>\n          14 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 18 5 -1.</_>\n        <_>\n          8 8 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 6 11 -1.</_>\n        <_>\n          20 3 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 11 14 -1.</_>\n        <_>\n          6 12 11 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 6 9 -1.</_>\n        <_>\n          18 7 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 6 -1.</_>\n        <_>\n          7 8 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 6 9 -1.</_>\n        <_>\n          18 7 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 9 -1.</_>\n        <_>\n          0 7 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 9 4 -1.</_>\n        <_>\n          9 6 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 22 19 2 -1.</_>\n        <_>\n          0 23 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 14 6 9 -1.</_>\n        <_>\n          17 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 6 9 -1.</_>\n        <_>\n          1 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 4 9 -1.</_>\n        <_>\n          14 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 4 9 -1.</_>\n        <_>\n          8 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 18 7 -1.</_>\n        <_>\n          9 9 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 10 -1.</_>\n        <_>\n          9 17 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 9 -1.</_>\n        <_>\n          14 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 9 -1.</_>\n        <_>\n          8 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 18 3 -1.</_>\n        <_>\n          6 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          1 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 11 12 -1.</_>\n        <_>\n          10 12 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 6 -1.</_>\n        <_>\n          5 6 7 3 2.</_>\n        <_>\n          12 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 4 -1.</_>\n        <_>\n          5 6 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 22 2 -1.</_>\n        <_>\n          0 1 22 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 24 -1.</_>\n        <_>\n          8 0 8 24 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 4 -1.</_>\n        <_>\n          10 15 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 9 -1.</_>\n        <_>\n          6 11 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 7 12 -1.</_>\n        <_>\n          4 16 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 22 6 -1.</_>\n        <_>\n          12 2 11 3 2.</_>\n        <_>\n          1 5 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 20 14 3 -1.</_>\n        <_>\n          12 20 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 16 -1.</_>\n        <_>\n          12 0 12 8 2.</_>\n        <_>\n          0 8 12 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 18 4 -1.</_>\n        <_>\n          3 13 9 2 2.</_>\n        <_>\n          12 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 22 2 -1.</_>\n        <_>\n          2 11 22 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 11 8 -1.</_>\n        <_>\n          6 7 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 6 -1.</_>\n        <_>\n          14 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 24 6 -1.</_>\n        <_>\n          0 9 24 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 10 10 -1.</_>\n        <_>\n          19 0 5 5 2.</_>\n        <_>\n          14 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 10 -1.</_>\n        <_>\n          0 0 5 5 2.</_>\n        <_>\n          5 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 4 -1.</_>\n        <_>\n          12 1 12 2 2.</_>\n        <_>\n          0 3 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 16 6 -1.</_>\n        <_>\n          13 15 8 3 2.</_>\n        <_>\n          5 18 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 16 6 -1.</_>\n        <_>\n          3 15 8 3 2.</_>\n        <_>\n          11 18 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 18 3 -1.</_>\n        <_>\n          6 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 21 10 -1.</_>\n        <_>\n          0 18 21 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 24 -1.</_>\n        <_>\n          15 0 2 24 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 6 11 -1.</_>\n        <_>\n          9 4 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 9 6 -1.</_>\n        <_>\n          12 5 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 2 20 -1.</_>\n        <_>\n          1 14 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 24 -1.</_>\n        <_>\n          15 0 2 24 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 24 -1.</_>\n        <_>\n          7 0 2 24 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 6 14 -1.</_>\n        <_>\n          19 7 3 7 2.</_>\n        <_>\n          16 14 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 4 12 -1.</_>\n        <_>\n          6 7 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 24 14 -1.</_>\n        <_>\n          8 5 8 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 10 6 -1.</_>\n        <_>\n          5 15 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 9 -1.</_>\n        <_>\n          14 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 6 14 -1.</_>\n        <_>\n          2 7 3 7 2.</_>\n        <_>\n          5 14 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 9 15 -1.</_>\n        <_>\n          18 2 3 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          2 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 10 14 -1.</_>\n        <_>\n          17 2 5 7 2.</_>\n        <_>\n          12 9 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 2 18 -1.</_>\n        <_>\n          12 6 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 15 6 -1.</_>\n        <_>\n          14 5 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 10 -1.</_>\n        <_>\n          10 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 9 -1.</_>\n        <_>\n          14 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 9 7 -1.</_>\n        <_>\n          6 3 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 3 -1.</_>\n        <_>\n          6 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 8 6 -1.</_>\n        <_>\n          11 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 12 -1.</_>\n        <_>\n          12 13 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 18 -1.</_>\n        <_>\n          10 6 2 9 2.</_>\n        <_>\n          12 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 6 9 -1.</_>\n        <_>\n          16 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 13 -1.</_>\n        <_>\n          6 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 21 3 -1.</_>\n        <_>\n          9 2 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 5 12 -1.</_>\n        <_>\n          5 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 10 -1.</_>\n        <_>\n          10 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 5 8 -1.</_>\n        <_>\n          8 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 11 9 -1.</_>\n        <_>\n          6 3 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 5 -1.</_>\n        <_>\n          10 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 5 -1.</_>\n        <_>\n          8 0 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 23 6 -1.</_>\n        <_>\n          1 12 23 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 18 3 -1.</_>\n        <_>\n          9 21 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 21 6 -1.</_>\n        <_>\n          3 8 21 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 12 -1.</_>\n        <_>\n          2 5 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 15 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 8 10 -1.</_>\n        <_>\n          8 12 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 12 -1.</_>\n        <_>\n          10 7 5 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 10 6 -1.</_>\n        <_>\n          0 19 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 18 9 6 -1.</_>\n        <_>\n          14 20 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 16 -1.</_>\n        <_>\n          9 14 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 18 9 6 -1.</_>\n        <_>\n          14 20 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 9 6 -1.</_>\n        <_>\n          1 20 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 9 6 -1.</_>\n        <_>\n          15 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 9 6 -1.</_>\n        <_>\n          0 11 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 6 9 -1.</_>\n        <_>\n          19 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 18 3 -1.</_>\n        <_>\n          2 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 21 6 -1.</_>\n        <_>\n          3 17 21 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 6 6 -1.</_>\n        <_>\n          9 20 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 6 9 -1.</_>\n        <_>\n          18 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 9 -1.</_>\n        <_>\n          0 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 10 -1.</_>\n        <_>\n          12 0 8 5 2.</_>\n        <_>\n          4 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 10 16 -1.</_>\n        <_>\n          2 0 5 8 2.</_>\n        <_>\n          7 8 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 10 5 -1.</_>\n        <_>\n          14 0 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 5 -1.</_>\n        <_>\n          5 0 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 6 10 -1.</_>\n        <_>\n          18 3 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 12 6 -1.</_>\n        <_>\n          5 11 6 3 2.</_>\n        <_>\n          11 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          21 0 3 18 -1.</_>\n        <_>\n          22 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 9 -1.</_>\n        <_>\n          8 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 9 7 -1.</_>\n        <_>\n          11 8 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 8 10 -1.</_>\n        <_>\n          7 12 4 5 2.</_>\n        <_>\n          11 17 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          21 0 3 18 -1.</_>\n        <_>\n          22 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 9 -1.</_>\n        <_>\n          12 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 9 6 -1.</_>\n        <_>\n          15 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 3 -1.</_>\n        <_>\n          0 3 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 6 9 -1.</_>\n        <_>\n          13 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 10 -1.</_>\n        <_>\n          9 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 12 -1.</_>\n        <_>\n          14 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 12 -1.</_>\n        <_>\n          6 10 12 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 2 21 -1.</_>\n        <_>\n          14 3 1 21 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 12 8 -1.</_>\n        <_>\n          6 5 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 18 8 -1.</_>\n        <_>\n          3 4 18 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 18 3 -1.</_>\n        <_>\n          3 1 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 24 4 -1.</_>\n        <_>\n          12 13 12 2 2.</_>\n        <_>\n          0 15 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 9 -1.</_>\n        <_>\n          12 5 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 9 -1.</_>\n        <_>\n          13 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 6 22 -1.</_>\n        <_>\n          8 2 2 22 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 8 14 -1.</_>\n        <_>\n          20 10 4 7 2.</_>\n        <_>\n          16 17 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 16 15 -1.</_>\n        <_>\n          3 9 16 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 8 14 -1.</_>\n        <_>\n          20 10 4 7 2.</_>\n        <_>\n          16 17 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 8 14 -1.</_>\n        <_>\n          0 10 4 7 2.</_>\n        <_>\n          4 17 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 11 6 -1.</_>\n        <_>\n          10 17 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 24 9 -1.</_>\n        <_>\n          8 7 8 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 16 -1.</_>\n        <_>\n          13 1 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 4 16 -1.</_>\n        <_>\n          9 1 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 16 8 -1.</_>\n        <_>\n          13 5 8 4 2.</_>\n        <_>\n          5 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 6 9 -1.</_>\n        <_>\n          0 12 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 18 3 -1.</_>\n        <_>\n          6 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 6 9 -1.</_>\n        <_>\n          3 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 9 6 -1.</_>\n        <_>\n          8 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 8 10 -1.</_>\n        <_>\n          2 13 4 5 2.</_>\n        <_>\n          6 18 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 3 18 -1.</_>\n        <_>\n          15 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 18 3 -1.</_>\n        <_>\n          3 6 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 6 11 -1.</_>\n        <_>\n          19 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 6 11 -1.</_>\n        <_>\n          3 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 1 4 9 -1.</_>\n        <_>\n          19 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 4 9 -1.</_>\n        <_>\n          3 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 18 9 -1.</_>\n        <_>\n          4 15 9 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 12 4 -1.</_>\n        <_>\n          6 11 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 9 6 -1.</_>\n        <_>\n          15 4 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 9 6 -1.</_>\n        <_>\n          0 4 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 6 17 -1.</_>\n        <_>\n          17 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 17 -1.</_>\n        <_>\n          5 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 9 4 -1.</_>\n        <_>\n          8 19 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 3 18 -1.</_>\n        <_>\n          6 11 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 12 -1.</_>\n        <_>\n          5 8 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 3 12 -1.</_>\n        <_>\n          10 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 14 15 -1.</_>\n        <_>\n          10 12 14 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 14 15 -1.</_>\n        <_>\n          0 12 14 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 9 6 -1.</_>\n        <_>\n          15 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 6 -1.</_>\n        <_>\n          0 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 6 14 -1.</_>\n        <_>\n          14 6 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 9 -1.</_>\n        <_>\n          11 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 6 15 -1.</_>\n        <_>\n          14 6 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 15 -1.</_>\n        <_>\n          8 6 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 8 9 -1.</_>\n        <_>\n          15 3 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 21 -1.</_>\n        <_>\n          3 0 3 21 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 8 12 -1.</_>\n        <_>\n          11 13 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 12 -1.</_>\n        <_>\n          6 7 5 6 2.</_>\n        <_>\n          11 13 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 18 -1.</_>\n        <_>\n          12 6 2 9 2.</_>\n        <_>\n          10 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          0 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 18 3 -1.</_>\n        <_>\n          3 15 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 8 10 -1.</_>\n        <_>\n          3 14 4 5 2.</_>\n        <_>\n          7 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 24 4 -1.</_>\n        <_>\n          12 12 12 2 2.</_>\n        <_>\n          0 14 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 3 20 -1.</_>\n        <_>\n          1 2 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 10 8 -1.</_>\n        <_>\n          17 16 5 4 2.</_>\n        <_>\n          12 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 10 8 -1.</_>\n        <_>\n          2 16 5 4 2.</_>\n        <_>\n          7 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 10 9 -1.</_>\n        <_>\n          7 3 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 3 -1.</_>\n        <_>\n          8 0 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 15 4 -1.</_>\n        <_>\n          3 10 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 6 -1.</_>\n        <_>\n          10 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 14 6 -1.</_>\n        <_>\n          5 16 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 4 10 -1.</_>\n        <_>\n          11 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 7 -1.</_>\n        <_>\n          3 6 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 6 6 -1.</_>\n        <_>\n          18 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 18 3 -1.</_>\n        <_>\n          3 2 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 14 18 -1.</_>\n        <_>\n          9 12 14 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 20 24 3 -1.</_>\n        <_>\n          8 20 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 7 -1.</_>\n        <_>\n          13 11 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 10 6 -1.</_>\n        <_>\n          4 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 7 -1.</_>\n        <_>\n          8 11 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 11 12 -1.</_>\n        <_>\n          7 8 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 10 4 -1.</_>\n        <_>\n          6 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 9 -1.</_>\n        <_>\n          16 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 4 15 -1.</_>\n        <_>\n          11 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 18 10 6 -1.</_>\n        <_>\n          13 20 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 6 11 -1.</_>\n        <_>\n          5 7 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 10 9 -1.</_>\n        <_>\n          10 17 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 9 -1.</_>\n        <_>\n          10 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 10 4 -1.</_>\n        <_>\n          14 3 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 6 -1.</_>\n        <_>\n          6 6 6 3 2.</_>\n        <_>\n          12 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 8 10 -1.</_>\n        <_>\n          12 8 4 5 2.</_>\n        <_>\n          8 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 4 16 -1.</_>\n        <_>\n          7 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 9 4 -1.</_>\n        <_>\n          8 10 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 9 -1.</_>\n        <_>\n          5 5 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 19 8 -1.</_>\n        <_>\n          3 20 19 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 8 -1.</_>\n        <_>\n          5 0 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 16 18 -1.</_>\n        <_>\n          5 2 8 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 24 11 -1.</_>\n        <_>\n          8 11 8 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 18 5 -1.</_>\n        <_>\n          3 3 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 3 -1.</_>\n        <_>\n          1 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 18 3 -1.</_>\n        <_>\n          5 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 9 6 -1.</_>\n        <_>\n          1 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 23 10 -1.</_>\n        <_>\n          1 14 23 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 18 3 -1.</_>\n        <_>\n          3 8 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 3 -1.</_>\n        <_>\n          6 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 22 -1.</_>\n        <_>\n          7 2 1 22 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 17 10 6 -1.</_>\n        <_>\n          14 19 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 10 6 -1.</_>\n        <_>\n          1 20 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 12 -1.</_>\n        <_>\n          13 3 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 9 -1.</_>\n        <_>\n          12 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 9 6 -1.</_>\n        <_>\n          15 10 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 6 9 -1.</_>\n        <_>\n          5 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 3 19 -1.</_>\n        <_>\n          15 5 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 6 -1.</_>\n        <_>\n          6 8 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 3 19 -1.</_>\n        <_>\n          15 5 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 9 -1.</_>\n        <_>\n          0 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 21 18 3 -1.</_>\n        <_>\n          5 22 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 4 -1.</_>\n        <_>\n          7 10 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 8 10 -1.</_>\n        <_>\n          17 4 4 5 2.</_>\n        <_>\n          13 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 6 -1.</_>\n        <_>\n          10 8 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 9 8 -1.</_>\n        <_>\n          15 9 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 12 -1.</_>\n        <_>\n          0 10 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 14 6 -1.</_>\n        <_>\n          14 6 7 3 2.</_>\n        <_>\n          7 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 19 -1.</_>\n        <_>\n          8 5 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 15 20 -1.</_>\n        <_>\n          13 4 5 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 15 20 -1.</_>\n        <_>\n          6 4 5 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 6 -1.</_>\n        <_>\n          13 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 6 -1.</_>\n        <_>\n          8 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 14 -1.</_>\n        <_>\n          17 2 3 7 2.</_>\n        <_>\n          14 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 14 -1.</_>\n        <_>\n          4 2 3 7 2.</_>\n        <_>\n          7 9 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 6 7 -1.</_>\n        <_>\n          12 4 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 9 -1.</_>\n        <_>\n          11 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 8 10 -1.</_>\n        <_>\n          11 4 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 8 10 -1.</_>\n        <_>\n          9 4 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 10 6 -1.</_>\n        <_>\n          8 20 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 21 6 -1.</_>\n        <_>\n          1 20 21 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 12 6 -1.</_>\n        <_>\n          9 2 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 6 -1.</_>\n        <_>\n          9 2 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 12 6 -1.</_>\n        <_>\n          18 5 6 3 2.</_>\n        <_>\n          12 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 9 -1.</_>\n        <_>\n          8 11 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 20 6 -1.</_>\n        <_>\n          2 9 20 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 6 -1.</_>\n        <_>\n          0 5 6 3 2.</_>\n        <_>\n          6 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 8 10 -1.</_>\n        <_>\n          18 14 4 5 2.</_>\n        <_>\n          14 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 8 10 -1.</_>\n        <_>\n          2 14 4 5 2.</_>\n        <_>\n          6 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 20 13 -1.</_>\n        <_>\n          2 11 10 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 12 5 -1.</_>\n        <_>\n          12 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 16 6 -1.</_>\n        <_>\n          13 6 8 3 2.</_>\n        <_>\n          5 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 9 4 -1.</_>\n        <_>\n          1 21 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 12 5 -1.</_>\n        <_>\n          11 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 14 12 -1.</_>\n        <_>\n          3 5 7 6 2.</_>\n        <_>\n          10 11 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 9 6 -1.</_>\n        <_>\n          12 4 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 19 3 -1.</_>\n        <_>\n          2 7 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 10 6 9 -1.</_>\n        <_>\n          18 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 18 2 -1.</_>\n        <_>\n          3 8 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 2 4 18 -1.</_>\n        <_>\n          22 2 2 9 2.</_>\n        <_>\n          20 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 20 3 -1.</_>\n        <_>\n          2 19 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 22 3 -1.</_>\n        <_>\n          1 10 22 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 18 -1.</_>\n        <_>\n          0 2 2 9 2.</_>\n        <_>\n          2 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 0 4 23 -1.</_>\n        <_>\n          19 0 2 23 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 19 -1.</_>\n        <_>\n          3 3 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 9 -1.</_>\n        <_>\n          20 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 12 12 -1.</_>\n        <_>\n          13 0 6 6 2.</_>\n        <_>\n          7 6 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 24 6 -1.</_>\n        <_>\n          0 3 12 3 2.</_>\n        <_>\n          12 6 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 4 10 -1.</_>\n        <_>\n          10 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 15 -1.</_>\n        <_>\n          8 14 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 17 6 -1.</_>\n        <_>\n          4 14 17 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 8 -1.</_>\n        <_>\n          2 5 9 4 2.</_>\n        <_>\n          11 9 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 14 6 -1.</_>\n        <_>\n          14 6 7 3 2.</_>\n        <_>\n          7 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 6 -1.</_>\n        <_>\n          3 6 7 3 2.</_>\n        <_>\n          10 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 3 18 -1.</_>\n        <_>\n          17 5 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 18 -1.</_>\n        <_>\n          6 5 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 14 4 -1.</_>\n        <_>\n          10 12 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 9 4 -1.</_>\n        <_>\n          4 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 9 -1.</_>\n        <_>\n          2 3 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 12 8 -1.</_>\n        <_>\n          10 3 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 5 -1.</_>\n        <_>\n          5 1 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 7 8 -1.</_>\n        <_>\n          12 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 22 4 -1.</_>\n        <_>\n          0 14 22 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 4 15 -1.</_>\n        <_>\n          15 11 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 7 8 -1.</_>\n        <_>\n          5 11 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 9 4 -1.</_>\n        <_>\n          8 20 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 22 4 -1.</_>\n        <_>\n          1 4 22 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 6 17 -1.</_>\n        <_>\n          19 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 8 18 -1.</_>\n        <_>\n          8 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 6 12 -1.</_>\n        <_>\n          20 0 3 6 2.</_>\n        <_>\n          17 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 9 12 -1.</_>\n        <_>\n          15 11 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 22 18 2 -1.</_>\n        <_>\n          2 23 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 12 6 -1.</_>\n        <_>\n          16 10 6 3 2.</_>\n        <_>\n          10 13 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 11 -1.</_>\n        <_>\n          2 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 0 4 10 -1.</_>\n        <_>\n          20 0 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 17 -1.</_>\n        <_>\n          3 3 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 9 6 -1.</_>\n        <_>\n          15 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 9 -1.</_>\n        <_>\n          0 16 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 6 12 -1.</_>\n        <_>\n          16 12 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 6 12 -1.</_>\n        <_>\n          2 12 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 15 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 19 3 -1.</_>\n        <_>\n          1 6 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 9 7 -1.</_>\n        <_>\n          14 8 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 12 9 -1.</_>\n        <_>\n          3 11 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 3 -1.</_>\n        <_>\n          3 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 12 -1.</_>\n        <_>\n          10 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 18 14 -1.</_>\n        <_>\n          3 9 9 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 4 9 -1.</_>\n        <_>\n          2 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 18 -1.</_>\n        <_>\n          12 5 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 4 18 -1.</_>\n        <_>\n          10 5 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 10 -1.</_>\n        <_>\n          12 5 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 4 11 -1.</_>\n        <_>\n          11 4 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 18 3 -1.</_>\n        <_>\n          4 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 20 3 -1.</_>\n        <_>\n          0 17 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 12 -1.</_>\n        <_>\n          9 13 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 8 8 -1.</_>\n        <_>\n          8 17 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 3 12 -1.</_>\n        <_>\n          13 16 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 14 14 -1.</_>\n        <_>\n          5 9 7 7 2.</_>\n        <_>\n          12 16 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 10 -1.</_>\n        <_>\n          12 0 12 5 2.</_>\n        <_>\n          0 5 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 18 2 -1.</_>\n        <_>\n          1 12 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 5 5 12 -1.</_>\n        <_>\n          19 9 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 5 12 -1.</_>\n        <_>\n          0 9 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 8 18 -1.</_>\n        <_>\n          20 6 4 9 2.</_>\n        <_>\n          16 15 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 18 -1.</_>\n        <_>\n          0 6 4 9 2.</_>\n        <_>\n          4 15 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 12 12 -1.</_>\n        <_>\n          18 5 6 6 2.</_>\n        <_>\n          12 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 9 -1.</_>\n        <_>\n          9 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 11 -1.</_>\n        <_>\n          11 13 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 12 12 -1.</_>\n        <_>\n          0 5 6 6 2.</_>\n        <_>\n          6 11 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 23 3 -1.</_>\n        <_>\n          1 3 23 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 19 3 -1.</_>\n        <_>\n          1 16 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 17 11 4 -1.</_>\n        <_>\n          13 19 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 5 -1.</_>\n        <_>\n          4 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 10 4 -1.</_>\n        <_>\n          12 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 9 9 -1.</_>\n        <_>\n          4 9 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 9 6 -1.</_>\n        <_>\n          15 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 9 6 -1.</_>\n        <_>\n          1 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 20 8 -1.</_>\n        <_>\n          13 10 10 4 2.</_>\n        <_>\n          3 14 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 18 -1.</_>\n        <_>\n          5 0 3 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 9 10 -1.</_>\n        <_>\n          16 11 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 5 -1.</_>\n        <_>\n          5 2 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 21 6 -1.</_>\n        <_>\n          10 4 7 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 10 14 -1.</_>\n        <_>\n          7 0 5 7 2.</_>\n        <_>\n          12 7 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 12 4 -1.</_>\n        <_>\n          12 19 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 23 4 -1.</_>\n        <_>\n          0 8 23 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 8 10 -1.</_>\n        <_>\n          17 10 4 5 2.</_>\n        <_>\n          13 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 3 -1.</_>\n        <_>\n          0 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 16 9 4 -1.</_>\n        <_>\n          15 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 9 4 -1.</_>\n        <_>\n          0 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 6 -1.</_>\n        <_>\n          8 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 24 6 -1.</_>\n        <_>\n          12 3 12 3 2.</_>\n        <_>\n          0 6 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 18 3 -1.</_>\n        <_>\n          2 5 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 4 -1.</_>\n        <_>\n          12 0 12 2 2.</_>\n        <_>\n          0 2 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 3 -1.</_>\n        <_>\n          1 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 9 6 -1.</_>\n        <_>\n          15 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 6 -1.</_>\n        <_>\n          0 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 18 3 -1.</_>\n        <_>\n          6 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 10 -1.</_>\n        <_>\n          10 8 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 9 -1.</_>\n        <_>\n          12 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 5 8 -1.</_>\n        <_>\n          8 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 6 8 -1.</_>\n        <_>\n          12 12 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 11 -1.</_>\n        <_>\n          8 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 8 9 -1.</_>\n        <_>\n          13 9 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 21 6 -1.</_>\n        <_>\n          1 9 21 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 3 12 -1.</_>\n        <_>\n          15 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 11 12 -1.</_>\n        <_>\n          6 13 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 10 8 -1.</_>\n        <_>\n          18 8 5 4 2.</_>\n        <_>\n          13 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 3 -1.</_>\n        <_>\n          11 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 18 4 -1.</_>\n        <_>\n          12 11 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 22 22 -1.</_>\n        <_>\n          0 11 22 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 6 8 -1.</_>\n        <_>\n          11 6 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 9 -1.</_>\n        <_>\n          11 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          12 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 6 14 -1.</_>\n        <_>\n          8 3 3 7 2.</_>\n        <_>\n          11 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 18 8 -1.</_>\n        <_>\n          9 10 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 14 -1.</_>\n        <_>\n          10 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 20 -1.</_>\n        <_>\n          4 13 16 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 10 -1.</_>\n        <_>\n          11 4 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 16 4 -1.</_>\n        <_>\n          5 2 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 4 -1.</_>\n        <_>\n          8 5 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 9 -1.</_>\n        <_>\n          15 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 8 5 -1.</_>\n        <_>\n          12 4 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 10 4 -1.</_>\n        <_>\n          12 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 10 4 -1.</_>\n        <_>\n          7 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 12 5 -1.</_>\n        <_>\n          11 11 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 8 10 -1.</_>\n        <_>\n          3 10 4 5 2.</_>\n        <_>\n          7 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 9 8 -1.</_>\n        <_>\n          14 12 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 21 24 3 -1.</_>\n        <_>\n          8 21 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 20 18 4 -1.</_>\n        <_>\n          9 20 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 9 6 -1.</_>\n        <_>\n          1 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 17 10 4 -1.</_>\n        <_>\n          11 19 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 4 12 -1.</_>\n        <_>\n          9 18 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 6 -1.</_>\n        <_>\n          12 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 6 9 -1.</_>\n        <_>\n          1 16 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 12 4 -1.</_>\n        <_>\n          6 18 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 20 3 -1.</_>\n        <_>\n          1 6 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 9 9 -1.</_>\n        <_>\n          8 4 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 19 9 4 -1.</_>\n        <_>\n          2 21 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 18 -1.</_>\n        <_>\n          11 7 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 12 -1.</_>\n        <_>\n          7 2 4 6 2.</_>\n        <_>\n          11 8 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 9 8 -1.</_>\n        <_>\n          14 10 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 12 5 -1.</_>\n        <_>\n          9 11 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 9 6 -1.</_>\n        <_>\n          14 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 9 -1.</_>\n        <_>\n          7 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 5 12 -1.</_>\n        <_>\n          4 11 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 21 6 -1.</_>\n        <_>\n          9 0 7 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          7 8 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 15 -1.</_>\n        <_>\n          11 0 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 2 -1.</_>\n        <_>\n          2 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 8 6 -1.</_>\n        <_>\n          8 20 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 18 2 -1.</_>\n        <_>\n          3 1 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 6 -1.</_>\n        <_>\n          11 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 5 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 9 -1.</_>\n        <_>\n          2 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 2 4 9 -1.</_>\n        <_>\n          20 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 9 -1.</_>\n        <_>\n          2 2 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 4 -1.</_>\n        <_>\n          12 1 12 2 2.</_>\n        <_>\n          0 3 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 9 6 -1.</_>\n        <_>\n          0 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 9 6 -1.</_>\n        <_>\n          14 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 19 3 -1.</_>\n        <_>\n          0 16 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 22 12 -1.</_>\n        <_>\n          12 5 11 6 2.</_>\n        <_>\n          1 11 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 6 -1.</_>\n        <_>\n          8 13 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 20 3 -1.</_>\n        <_>\n          4 3 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 6 10 -1.</_>\n        <_>\n          10 14 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 16 6 -1.</_>\n        <_>\n          14 12 8 3 2.</_>\n        <_>\n          6 15 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 8 9 -1.</_>\n        <_>\n          2 16 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 6 14 -1.</_>\n        <_>\n          14 8 3 7 2.</_>\n        <_>\n          11 15 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 16 6 -1.</_>\n        <_>\n          2 12 8 3 2.</_>\n        <_>\n          10 15 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 16 8 -1.</_>\n        <_>\n          5 20 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 12 -1.</_>\n        <_>\n          9 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 8 10 -1.</_>\n        <_>\n          12 2 4 5 2.</_>\n        <_>\n          8 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 6 -1.</_>\n        <_>\n          6 6 6 3 2.</_>\n        <_>\n          12 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 9 -1.</_>\n        <_>\n          12 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 8 6 9 -1.</_>\n        <_>\n          18 11 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 6 6 -1.</_>\n        <_>\n          5 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 21 3 -1.</_>\n        <_>\n          10 21 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 16 6 -1.</_>\n        <_>\n          2 3 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 7 6 -1.</_>\n        <_>\n          13 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 14 -1.</_>\n        <_>\n          6 11 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 9 -1.</_>\n        <_>\n          11 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 14 -1.</_>\n        <_>\n          7 8 3 7 2.</_>\n        <_>\n          10 15 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 8 4 16 -1.</_>\n        <_>\n          18 16 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 6 10 -1.</_>\n        <_>\n          11 14 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 12 5 -1.</_>\n        <_>\n          10 11 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 23 3 -1.</_>\n        <_>\n          0 13 23 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 12 -1.</_>\n        <_>\n          15 0 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 12 5 -1.</_>\n        <_>\n          4 10 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 10 4 -1.</_>\n        <_>\n          13 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 12 -1.</_>\n        <_>\n          7 0 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 9 6 -1.</_>\n        <_>\n          14 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 9 6 -1.</_>\n        <_>\n          7 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 18 13 -1.</_>\n        <_>\n          12 11 6 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 18 13 -1.</_>\n        <_>\n          6 11 6 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 12 6 -1.</_>\n        <_>\n          16 16 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 21 3 -1.</_>\n        <_>\n          0 7 21 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 12 6 -1.</_>\n        <_>\n          16 16 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 14 -1.</_>\n        <_>\n          5 14 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 19 2 -1.</_>\n        <_>\n          5 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 4 -1.</_>\n        <_>\n          5 6 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 18 4 -1.</_>\n        <_>\n          9 18 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 9 -1.</_>\n        <_>\n          9 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 11 4 -1.</_>\n        <_>\n          13 5 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 6 -1.</_>\n        <_>\n          5 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 1 4 23 -1.</_>\n        <_>\n          19 1 2 23 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 4 23 -1.</_>\n        <_>\n          3 1 2 23 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 18 3 -1.</_>\n        <_>\n          5 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 11 4 -1.</_>\n        <_>\n          0 5 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 20 3 -1.</_>\n        <_>\n          2 17 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 13 4 -1.</_>\n        <_>\n          5 5 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 22 15 -1.</_>\n        <_>\n          1 9 11 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 14 3 -1.</_>\n        <_>\n          10 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 10 4 -1.</_>\n        <_>\n          8 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 4 -1.</_>\n        <_>\n          11 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 9 -1.</_>\n        <_>\n          12 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 9 6 -1.</_>\n        <_>\n          4 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 8 10 -1.</_>\n        <_>\n          12 3 4 5 2.</_>\n        <_>\n          8 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 16 6 -1.</_>\n        <_>\n          3 6 8 3 2.</_>\n        <_>\n          11 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 6 -1.</_>\n        <_>\n          5 9 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 9 6 -1.</_>\n        <_>\n          4 5 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 18 2 -1.</_>\n        <_>\n          6 4 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 6 -1.</_>\n        <_>\n          10 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 3 -1.</_>\n        <_>\n          0 2 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 10 6 -1.</_>\n        <_>\n          0 19 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 18 3 -1.</_>\n        <_>\n          3 19 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 6 16 -1.</_>\n        <_>\n          2 5 3 8 2.</_>\n        <_>\n          5 13 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 11 6 -1.</_>\n        <_>\n          7 8 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 22 -1.</_>\n        <_>\n          5 13 12 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 4 10 -1.</_>\n        <_>\n          10 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 18 -1.</_>\n        <_>\n          9 6 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 8 6 9 -1.</_>\n        <_>\n          18 11 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 15 10 -1.</_>\n        <_>\n          9 7 5 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 9 -1.</_>\n        <_>\n          12 5 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 10 -1.</_>\n        <_>\n          11 9 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 6 10 -1.</_>\n        <_>\n          13 14 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 10 -1.</_>\n        <_>\n          9 14 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 16 9 -1.</_>\n        <_>\n          4 11 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 20 3 -1.</_>\n        <_>\n          2 12 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 13 -1.</_>\n        <_>\n          13 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 13 -1.</_>\n        <_>\n          9 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 18 7 -1.</_>\n        <_>\n          9 1 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 6 9 -1.</_>\n        <_>\n          1 14 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 9 6 -1.</_>\n        <_>\n          8 20 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 15 6 -1.</_>\n        <_>\n          3 11 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 19 2 -1.</_>\n        <_>\n          5 11 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 7 16 -1.</_>\n        <_>\n          8 14 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 9 6 -1.</_>\n        <_>\n          9 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 12 -1.</_>\n        <_>\n          0 11 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 18 3 -1.</_>\n        <_>\n          6 5 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 12 6 -1.</_>\n        <_>\n          4 16 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 9 4 -1.</_>\n        <_>\n          13 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 14 14 -1.</_>\n        <_>\n          5 8 7 7 2.</_>\n        <_>\n          12 15 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 22 6 -1.</_>\n        <_>\n          12 16 11 3 2.</_>\n        <_>\n          1 19 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 9 -1.</_>\n        <_>\n          11 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 10 -1.</_>\n        <_>\n          14 5 5 5 2.</_>\n        <_>\n          9 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 10 -1.</_>\n        <_>\n          5 5 5 5 2.</_>\n        <_>\n          10 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 6 -1.</_>\n        <_>\n          12 6 8 3 2.</_>\n        <_>\n          4 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 9 -1.</_>\n        <_>\n          0 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 8 14 -1.</_>\n        <_>\n          20 10 4 7 2.</_>\n        <_>\n          16 17 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 12 -1.</_>\n        <_>\n          9 18 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 8 12 -1.</_>\n        <_>\n          12 10 4 6 2.</_>\n        <_>\n          8 16 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 9 -1.</_>\n        <_>\n          10 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 16 -1.</_>\n        <_>\n          14 4 4 8 2.</_>\n        <_>\n          10 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 10 6 -1.</_>\n        <_>\n          7 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 14 -1.</_>\n        <_>\n          12 6 7 7 2.</_>\n        <_>\n          5 13 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 20 2 -1.</_>\n        <_>\n          2 12 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 8 4 16 -1.</_>\n        <_>\n          18 16 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 12 10 -1.</_>\n        <_>\n          1 11 6 5 2.</_>\n        <_>\n          7 16 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 12 4 -1.</_>\n        <_>\n          6 11 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 7 -1.</_>\n        <_>\n          12 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 16 -1.</_>\n        <_>\n          14 4 4 8 2.</_>\n        <_>\n          10 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 16 -1.</_>\n        <_>\n          6 4 4 8 2.</_>\n        <_>\n          10 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 9 6 -1.</_>\n        <_>\n          11 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 16 12 -1.</_>\n        <_>\n          1 5 8 6 2.</_>\n        <_>\n          9 11 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 8 -1.</_>\n        <_>\n          9 9 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 18 -1.</_>\n        <_>\n          7 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 9 5 14 -1.</_>\n        <_>\n          17 16 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 5 14 -1.</_>\n        <_>\n          2 16 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 10 6 -1.</_>\n        <_>\n          7 7 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 23 18 -1.</_>\n        <_>\n          1 9 23 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 21 3 -1.</_>\n        <_>\n          8 1 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 12 6 -1.</_>\n        <_>\n          3 18 6 3 2.</_>\n        <_>\n          9 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 8 16 -1.</_>\n        <_>\n          20 8 4 8 2.</_>\n        <_>\n          16 16 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 19 24 4 -1.</_>\n        <_>\n          8 19 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 8 16 -1.</_>\n        <_>\n          20 8 4 8 2.</_>\n        <_>\n          16 16 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 16 -1.</_>\n        <_>\n          0 8 4 8 2.</_>\n        <_>\n          4 16 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 8 10 -1.</_>\n        <_>\n          8 17 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 5 8 -1.</_>\n        <_>\n          5 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 19 2 -1.</_>\n        <_>\n          4 2 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 24 9 -1.</_>\n        <_>\n          8 12 8 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 8 -1.</_>\n        <_>\n          6 4 13 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 3 -1.</_>\n        <_>\n          0 1 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 3 4 11 -1.</_>\n        <_>\n          20 3 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 9 -1.</_>\n        <_>\n          10 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 12 8 -1.</_>\n        <_>\n          12 11 6 4 2.</_>\n        <_>\n          6 15 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 6 -1.</_>\n        <_>\n          0 8 6 3 2.</_>\n        <_>\n          6 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 18 3 -1.</_>\n        <_>\n          6 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 6 -1.</_>\n        <_>\n          0 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 3 4 9 -1.</_>\n        <_>\n          20 3 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 9 -1.</_>\n        <_>\n          2 3 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 9 19 -1.</_>\n        <_>\n          18 0 3 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 19 -1.</_>\n        <_>\n          3 0 3 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 8 -1.</_>\n        <_>\n          13 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 8 -1.</_>\n        <_>\n          8 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 19 3 -1.</_>\n        <_>\n          5 12 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 20 18 4 -1.</_>\n        <_>\n          9 20 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 16 6 -1.</_>\n        <_>\n          6 8 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 9 6 -1.</_>\n        <_>\n          9 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 4 14 -1.</_>\n        <_>\n          10 10 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 15 12 -1.</_>\n        <_>\n          1 11 15 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 8 5 -1.</_>\n        <_>\n          11 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 9 -1.</_>\n        <_>\n          7 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 9 -1.</_>\n        <_>\n          14 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 8 -1.</_>\n        <_>\n          5 5 6 4 2.</_>\n        <_>\n          11 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 11 6 -1.</_>\n        <_>\n          13 14 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 21 3 -1.</_>\n        <_>\n          0 14 21 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 8 12 -1.</_>\n        <_>\n          12 1 4 6 2.</_>\n        <_>\n          8 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 12 -1.</_>\n        <_>\n          1 0 3 6 2.</_>\n        <_>\n          4 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 21 2 -1.</_>\n        <_>\n          2 3 21 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 19 3 -1.</_>\n        <_>\n          2 3 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 10 6 14 -1.</_>\n        <_>\n          20 10 3 7 2.</_>\n        <_>\n          17 17 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 14 -1.</_>\n        <_>\n          1 10 3 7 2.</_>\n        <_>\n          4 17 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 14 14 -1.</_>\n        <_>\n          14 6 7 7 2.</_>\n        <_>\n          7 13 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 9 6 -1.</_>\n        <_>\n          0 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 8 9 -1.</_>\n        <_>\n          15 17 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 22 4 -1.</_>\n        <_>\n          1 1 11 2 2.</_>\n        <_>\n          12 3 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 9 6 -1.</_>\n        <_>\n          9 13 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 3 -1.</_>\n        <_>\n          0 16 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 7 9 -1.</_>\n        <_>\n          16 17 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 4 -1.</_>\n        <_>\n          12 3 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 12 5 -1.</_>\n        <_>\n          7 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 9 -1.</_>\n        <_>\n          11 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 4 10 -1.</_>\n        <_>\n          12 1 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 10 -1.</_>\n        <_>\n          10 1 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 6 9 -1.</_>\n        <_>\n          15 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 6 9 -1.</_>\n        <_>\n          3 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 3 19 -1.</_>\n        <_>\n          16 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 9 -1.</_>\n        <_>\n          3 3 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 3 19 -1.</_>\n        <_>\n          16 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 12 4 -1.</_>\n        <_>\n          12 3 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 9 -1.</_>\n        <_>\n          10 5 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 19 -1.</_>\n        <_>\n          7 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 12 -1.</_>\n        <_>\n          11 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 5 -1.</_>\n        <_>\n          11 7 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 18 -1.</_>\n        <_>\n          12 3 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 6 12 -1.</_>\n        <_>\n          11 3 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 19 3 -1.</_>\n        <_>\n          3 8 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 18 3 -1.</_>\n        <_>\n          2 8 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 18 4 -1.</_>\n        <_>\n          12 13 9 2 2.</_>\n        <_>\n          3 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 6 9 -1.</_>\n        <_>\n          5 5 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 20 4 -1.</_>\n        <_>\n          14 1 10 2 2.</_>\n        <_>\n          4 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 20 4 -1.</_>\n        <_>\n          0 1 10 2 2.</_>\n        <_>\n          10 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 6 -1.</_>\n        <_>\n          10 15 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 8 -1.</_>\n        <_>\n          8 2 8 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 18 3 -1.</_>\n        <_>\n          5 6 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 6 6 -1.</_>\n        <_>\n          11 15 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 8 5 -1.</_>\n        <_>\n          11 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 8 5 -1.</_>\n        <_>\n          9 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 14 6 -1.</_>\n        <_>\n          5 2 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 15 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 5 12 -1.</_>\n        <_>\n          10 11 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 8 14 -1.</_>\n        <_>\n          7 9 4 7 2.</_>\n        <_>\n          11 16 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 22 6 -1.</_>\n        <_>\n          12 5 11 3 2.</_>\n        <_>\n          1 8 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 6 -1.</_>\n        <_>\n          0 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 9 4 -1.</_>\n        <_>\n          12 19 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 19 3 -1.</_>\n        <_>\n          2 19 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 9 4 -1.</_>\n        <_>\n          12 19 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          1 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 9 4 -1.</_>\n        <_>\n          12 19 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 3 -1.</_>\n        <_>\n          0 1 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 14 4 -1.</_>\n        <_>\n          5 2 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 9 6 -1.</_>\n        <_>\n          6 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 6 9 -1.</_>\n        <_>\n          14 16 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 20 13 4 -1.</_>\n        <_>\n          5 22 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 12 -1.</_>\n        <_>\n          9 13 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 21 3 -1.</_>\n        <_>\n          8 10 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 9 6 -1.</_>\n        <_>\n          11 8 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 9 7 -1.</_>\n        <_>\n          6 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 10 8 -1.</_>\n        <_>\n          17 10 5 4 2.</_>\n        <_>\n          12 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 24 3 -1.</_>\n        <_>\n          8 15 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 9 6 -1.</_>\n        <_>\n          8 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 6 9 -1.</_>\n        <_>\n          4 16 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 9 4 -1.</_>\n        <_>\n          12 19 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 6 -1.</_>\n        <_>\n          9 15 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 14 10 -1.</_>\n        <_>\n          16 9 7 5 2.</_>\n        <_>\n          9 14 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 14 10 -1.</_>\n        <_>\n          1 9 7 5 2.</_>\n        <_>\n          8 14 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 17 -1.</_>\n        <_>\n          11 7 3 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 20 -1.</_>\n        <_>\n          3 4 3 10 2.</_>\n        <_>\n          6 14 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 4 -1.</_>\n        <_>\n          7 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 4 9 -1.</_>\n        <_>\n          12 7 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 9 -1.</_>\n        <_>\n          12 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 6 16 -1.</_>\n        <_>\n          3 8 3 8 2.</_>\n        <_>\n          6 16 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 9 4 -1.</_>\n        <_>\n          12 19 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 9 4 -1.</_>\n        <_>\n          3 19 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 9 6 -1.</_>\n        <_>\n          13 1 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 10 -1.</_>\n        <_>\n          5 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 12 6 -1.</_>\n        <_>\n          11 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 9 8 -1.</_>\n        <_>\n          9 4 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 10 8 -1.</_>\n        <_>\n          17 16 5 4 2.</_>\n        <_>\n          12 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 10 8 -1.</_>\n        <_>\n          2 16 5 4 2.</_>\n        <_>\n          7 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 4 -1.</_>\n        <_>\n          12 0 12 2 2.</_>\n        <_>\n          0 2 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 9 6 -1.</_>\n        <_>\n          0 8 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 24 6 -1.</_>\n        <_>\n          12 4 12 3 2.</_>\n        <_>\n          0 7 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 11 4 -1.</_>\n        <_>\n          5 2 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 22 4 -1.</_>\n        <_>\n          12 1 11 2 2.</_>\n        <_>\n          1 3 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 18 -1.</_>\n        <_>\n          9 15 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 20 4 -1.</_>\n        <_>\n          2 11 20 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 14 -1.</_>\n        <_>\n          5 9 14 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 16 6 -1.</_>\n        <_>\n          4 5 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 19 3 -1.</_>\n        <_>\n          2 4 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 4 -1.</_>\n        <_>\n          7 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 4 15 -1.</_>\n        <_>\n          0 14 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 21 3 -1.</_>\n        <_>\n          2 11 21 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 6 -1.</_>\n        <_>\n          6 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 14 9 -1.</_>\n        <_>\n          6 7 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 9 -1.</_>\n        <_>\n          11 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 9 9 -1.</_>\n        <_>\n          15 11 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 4 21 -1.</_>\n        <_>\n          8 7 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 22 19 2 -1.</_>\n        <_>\n          3 23 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 20 3 -1.</_>\n        <_>\n          2 16 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 0 4 13 -1.</_>\n        <_>\n          19 0 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 8 8 -1.</_>\n        <_>\n          1 11 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 6 9 -1.</_>\n        <_>\n          14 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 6 9 -1.</_>\n        <_>\n          4 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 4 10 -1.</_>\n        <_>\n          14 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 10 -1.</_>\n        <_>\n          8 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 6 -1.</_>\n        <_>\n          14 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 6 -1.</_>\n        <_>\n          4 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 21 -1.</_>\n        <_>\n          8 2 8 21 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 13 -1.</_>\n        <_>\n          3 2 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 0 4 21 -1.</_>\n        <_>\n          20 0 2 21 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 20 -1.</_>\n        <_>\n          2 4 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 9 6 -1.</_>\n        <_>\n          8 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 7 9 -1.</_>\n        <_>\n          16 15 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 21 14 3 -1.</_>\n        <_>\n          12 21 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 6 9 -1.</_>\n        <_>\n          11 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 10 -1.</_>\n        <_>\n          12 5 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 9 -1.</_>\n        <_>\n          12 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 9 -1.</_>\n        <_>\n          10 5 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 10 4 -1.</_>\n        <_>\n          14 16 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 14 14 -1.</_>\n        <_>\n          5 5 7 7 2.</_>\n        <_>\n          12 12 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 12 6 -1.</_>\n        <_>\n          18 8 6 3 2.</_>\n        <_>\n          12 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 12 -1.</_>\n        <_>\n          6 6 6 6 2.</_>\n        <_>\n          12 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 6 10 -1.</_>\n        <_>\n          13 13 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 20 8 -1.</_>\n        <_>\n          1 10 10 4 2.</_>\n        <_>\n          11 14 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 9 6 -1.</_>\n        <_>\n          15 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 9 -1.</_>\n        <_>\n          9 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 5 14 -1.</_>\n        <_>\n          10 8 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 16 6 -1.</_>\n        <_>\n          3 6 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 8 9 -1.</_>\n        <_>\n          16 6 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 6 10 -1.</_>\n        <_>\n          9 13 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 9 6 -1.</_>\n        <_>\n          15 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 9 6 -1.</_>\n        <_>\n          0 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 16 9 6 -1.</_>\n        <_>\n          13 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 9 6 -1.</_>\n        <_>\n          2 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 18 3 -1.</_>\n        <_>\n          5 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 18 3 -1.</_>\n        <_>\n          1 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 18 3 -1.</_>\n        <_>\n          5 1 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 19 2 -1.</_>\n        <_>\n          1 2 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 11 -1.</_>\n        <_>\n          16 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 15 6 -1.</_>\n        <_>\n          9 15 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 11 -1.</_>\n        <_>\n          16 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 6 11 -1.</_>\n        <_>\n          6 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 9 -1.</_>\n        <_>\n          18 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 22 4 -1.</_>\n        <_>\n          1 2 11 2 2.</_>\n        <_>\n          12 4 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 21 12 -1.</_>\n        <_>\n          9 0 7 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 18 3 -1.</_>\n        <_>\n          0 13 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 6 9 -1.</_>\n        <_>\n          14 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 18 3 -1.</_>\n        <_>\n          3 11 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 8 9 -1.</_>\n        <_>\n          16 6 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 18 3 -1.</_>\n        <_>\n          3 8 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 9 -1.</_>\n        <_>\n          11 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 9 -1.</_>\n        <_>\n          11 8 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 2 18 -1.</_>\n        <_>\n          15 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 18 -1.</_>\n        <_>\n          8 0 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 7 9 -1.</_>\n        <_>\n          17 6 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 9 6 -1.</_>\n        <_>\n          3 20 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 21 3 -1.</_>\n        <_>\n          3 19 21 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 7 9 -1.</_>\n        <_>\n          0 6 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 22 3 -1.</_>\n        <_>\n          2 8 22 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 24 16 -1.</_>\n        <_>\n          0 3 12 8 2.</_>\n        <_>\n          12 11 12 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 17 9 4 -1.</_>\n        <_>\n          13 19 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 12 8 -1.</_>\n        <_>\n          5 5 6 4 2.</_>\n        <_>\n          11 9 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 6 -1.</_>\n        <_>\n          12 6 7 3 2.</_>\n        <_>\n          5 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 14 6 -1.</_>\n        <_>\n          5 16 7 3 2.</_>\n        <_>\n          12 19 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 9 -1.</_>\n        <_>\n          18 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 20 10 -1.</_>\n        <_>\n          13 4 10 5 2.</_>\n        <_>\n          3 9 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 9 8 -1.</_>\n        <_>\n          5 13 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 21 15 -1.</_>\n        <_>\n          9 1 7 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 14 8 -1.</_>\n        <_>\n          12 12 7 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 4 -1.</_>\n        <_>\n          6 7 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 6 -1.</_>\n        <_>\n          9 5 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 6 -1.</_>\n        <_>\n          8 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 18 2 -1.</_>\n        <_>\n          6 5 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          2 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 6 15 -1.</_>\n        <_>\n          20 0 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 13 -1.</_>\n        <_>\n          2 0 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 9 -1.</_>\n        <_>\n          14 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 9 -1.</_>\n        <_>\n          8 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 4 -1.</_>\n        <_>\n          8 2 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 18 4 -1.</_>\n        <_>\n          12 13 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 10 4 -1.</_>\n        <_>\n          9 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 3 -1.</_>\n        <_>\n          11 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 19 3 -1.</_>\n        <_>\n          4 15 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 20 -1.</_>\n        <_>\n          10 10 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 9 6 -1.</_>\n        <_>\n          8 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 15 4 -1.</_>\n        <_>\n          7 9 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 12 7 -1.</_>\n        <_>\n          12 4 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 9 -1.</_>\n        <_>\n          0 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 6 9 -1.</_>\n        <_>\n          18 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 16 6 -1.</_>\n        <_>\n          0 18 8 3 2.</_>\n        <_>\n          8 21 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 14 6 -1.</_>\n        <_>\n          16 18 7 3 2.</_>\n        <_>\n          9 21 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 20 20 4 -1.</_>\n        <_>\n          1 20 10 2 2.</_>\n        <_>\n          11 22 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 20 6 -1.</_>\n        <_>\n          12 8 10 3 2.</_>\n        <_>\n          2 11 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 9 -1.</_>\n        <_>\n          9 8 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 8 -1.</_>\n        <_>\n          12 5 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 12 8 -1.</_>\n        <_>\n          8 5 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 9 -1.</_>\n        <_>\n          12 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 16 -1.</_>\n        <_>\n          4 0 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 6 12 -1.</_>\n        <_>\n          15 8 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 12 -1.</_>\n        <_>\n          3 8 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 9 6 -1.</_>\n        <_>\n          15 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 15 22 -1.</_>\n        <_>\n          4 11 15 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 9 6 -1.</_>\n        <_>\n          15 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 9 6 -1.</_>\n        <_>\n          0 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 9 6 -1.</_>\n        <_>\n          15 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 6 -1.</_>\n        <_>\n          0 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 8 10 -1.</_>\n        <_>\n          14 0 4 5 2.</_>\n        <_>\n          10 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 16 -1.</_>\n        <_>\n          3 0 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          7 8 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 4 10 -1.</_>\n        <_>\n          10 17 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 10 6 -1.</_>\n        <_>\n          8 6 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 22 18 2 -1.</_>\n        <_>\n          12 22 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 11 6 -1.</_>\n        <_>\n          7 9 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 10 -1.</_>\n        <_>\n          0 0 6 5 2.</_>\n        <_>\n          6 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 12 6 -1.</_>\n        <_>\n          16 1 6 3 2.</_>\n        <_>\n          10 4 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 9 4 -1.</_>\n        <_>\n          7 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 16 -1.</_>\n        <_>\n          10 7 5 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 13 -1.</_>\n        <_>\n          11 10 6 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 6 -1.</_>\n        <_>\n          12 2 6 3 2.</_>\n        <_>\n          6 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 12 9 -1.</_>\n        <_>\n          3 12 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 8 6 -1.</_>\n        <_>\n          16 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 6 -1.</_>\n        <_>\n          0 5 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 24 11 -1.</_>\n        <_>\n          0 3 12 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 10 -1.</_>\n        <_>\n          0 13 4 5 2.</_>\n        <_>\n          4 18 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 4 10 -1.</_>\n        <_>\n          10 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 21 -1.</_>\n        <_>\n          10 9 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 15 9 -1.</_>\n        <_>\n          4 7 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 6 -1.</_>\n        <_>\n          8 1 8 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 5 16 -1.</_>\n        <_>\n          9 14 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 18 3 -1.</_>\n        <_>\n          9 21 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 3 12 -1.</_>\n        <_>\n          6 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 9 -1.</_>\n        <_>\n          11 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 8 -1.</_>\n        <_>\n          8 6 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 20 2 -1.</_>\n        <_>\n          4 4 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 3 -1.</_>\n        <_>\n          8 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 10 6 -1.</_>\n        <_>\n          7 17 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 4 18 -1.</_>\n        <_>\n          1 4 2 9 2.</_>\n        <_>\n          3 13 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 9 -1.</_>\n        <_>\n          15 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 9 -1.</_>\n        <_>\n          7 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 9 6 -1.</_>\n        <_>\n          9 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 18 2 -1.</_>\n        <_>\n          3 1 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 4 -1.</_>\n        <_>\n          0 10 10 2 2.</_>\n        <_>\n          10 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 12 -1.</_>\n        <_>\n          10 8 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 12 -1.</_>\n        <_>\n          6 5 3 6 2.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 18 22 -1.</_>\n        <_>\n          15 0 9 11 2.</_>\n        <_>\n          6 11 9 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 22 -1.</_>\n        <_>\n          0 0 9 11 2.</_>\n        <_>\n          9 11 9 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 11 -1.</_>\n        <_>\n          20 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          2 2 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 3 -1.</_>\n        <_>\n          0 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 20 2 -1.</_>\n        <_>\n          2 3 20 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 2 -1.</_>\n        <_>\n          1 11 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 7 6 9 -1.</_>\n        <_>\n          18 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 22 9 -1.</_>\n        <_>\n          0 3 22 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 6 9 -1.</_>\n        <_>\n          17 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 6 9 -1.</_>\n        <_>\n          0 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 24 6 -1.</_>\n        <_>\n          0 8 24 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 10 -1.</_>\n        <_>\n          2 2 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 9 -1.</_>\n        <_>\n          12 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 6 9 -1.</_>\n        <_>\n          17 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 9 -1.</_>\n        <_>\n          5 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 6 -1.</_>\n        <_>\n          15 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 9 6 -1.</_>\n        <_>\n          15 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 23 6 -1.</_>\n        <_>\n          0 17 23 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 18 3 -1.</_>\n        <_>\n          5 16 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 6 -1.</_>\n        <_>\n          0 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 8 10 -1.</_>\n        <_>\n          13 8 4 5 2.</_>\n        <_>\n          9 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 15 6 -1.</_>\n        <_>\n          8 7 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 8 10 -1.</_>\n        <_>\n          13 8 4 5 2.</_>\n        <_>\n          9 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 12 -1.</_>\n        <_>\n          8 0 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 8 10 -1.</_>\n        <_>\n          13 8 4 5 2.</_>\n        <_>\n          9 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 9 -1.</_>\n        <_>\n          10 5 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 18 -1.</_>\n        <_>\n          12 6 2 9 2.</_>\n        <_>\n          10 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 12 4 -1.</_>\n        <_>\n          11 7 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 8 10 -1.</_>\n        <_>\n          13 8 4 5 2.</_>\n        <_>\n          9 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 8 10 -1.</_>\n        <_>\n          7 8 4 5 2.</_>\n        <_>\n          11 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 6 14 -1.</_>\n        <_>\n          14 10 3 7 2.</_>\n        <_>\n          11 17 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 19 -1.</_>\n        <_>\n          12 5 3 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 12 6 -1.</_>\n        <_>\n          12 12 6 3 2.</_>\n        <_>\n          6 15 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 6 -1.</_>\n        <_>\n          1 9 9 3 2.</_>\n        <_>\n          10 12 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 8 10 -1.</_>\n        <_>\n          20 14 4 5 2.</_>\n        <_>\n          16 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 22 8 -1.</_>\n        <_>\n          0 9 11 4 2.</_>\n        <_>\n          11 13 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 12 6 -1.</_>\n        <_>\n          14 18 6 3 2.</_>\n        <_>\n          8 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 18 -1.</_>\n        <_>\n          0 6 10 9 2.</_>\n        <_>\n          10 15 10 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 20 12 -1.</_>\n        <_>\n          13 6 10 6 2.</_>\n        <_>\n          3 12 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 10 8 -1.</_>\n        <_>\n          0 16 5 4 2.</_>\n        <_>\n          5 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 18 3 -1.</_>\n        <_>\n          6 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 19 3 -1.</_>\n        <_>\n          0 12 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 9 -1.</_>\n        <_>\n          14 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 22 4 -1.</_>\n        <_>\n          1 7 11 2 2.</_>\n        <_>\n          12 9 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 7 12 -1.</_>\n        <_>\n          13 10 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 11 9 -1.</_>\n        <_>\n          4 10 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 10 8 -1.</_>\n        <_>\n          17 10 5 4 2.</_>\n        <_>\n          12 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 9 7 -1.</_>\n        <_>\n          5 12 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 6 9 -1.</_>\n        <_>\n          16 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 6 12 -1.</_>\n        <_>\n          3 16 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 6 6 -1.</_>\n        <_>\n          14 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 9 -1.</_>\n        <_>\n          10 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 23 -1.</_>\n        <_>\n          11 1 2 23 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 9 6 -1.</_>\n        <_>\n          0 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 17 18 3 -1.</_>\n        <_>\n          4 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 13 14 -1.</_>\n        <_>\n          5 9 13 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 8 12 -1.</_>\n        <_>\n          19 0 4 6 2.</_>\n        <_>\n          15 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          0 0 4 6 2.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 8 7 -1.</_>\n        <_>\n          8 2 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 9 -1.</_>\n        <_>\n          3 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 12 -1.</_>\n        <_>\n          17 8 3 6 2.</_>\n        <_>\n          14 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 12 -1.</_>\n        <_>\n          4 8 3 6 2.</_>\n        <_>\n          7 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 5 15 -1.</_>\n        <_>\n          16 10 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 5 15 -1.</_>\n        <_>\n          3 10 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 6 9 -1.</_>\n        <_>\n          18 7 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 15 -1.</_>\n        <_>\n          1 12 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 12 8 -1.</_>\n        <_>\n          17 15 6 4 2.</_>\n        <_>\n          11 19 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 4 -1.</_>\n        <_>\n          0 2 12 2 2.</_>\n        <_>\n          12 4 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 2 19 -1.</_>\n        <_>\n          15 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 2 19 -1.</_>\n        <_>\n          8 1 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          22 1 2 20 -1.</_>\n        <_>\n          22 1 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 2 20 -1.</_>\n        <_>\n          1 1 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 11 6 12 -1.</_>\n        <_>\n          20 11 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 12 -1.</_>\n        <_>\n          2 11 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 14 -1.</_>\n        <_>\n          3 13 18 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 7 8 -1.</_>\n        <_>\n          6 14 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 12 12 -1.</_>\n        <_>\n          7 13 12 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 18 5 -1.</_>\n        <_>\n          11 18 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 21 20 3 -1.</_>\n        <_>\n          4 22 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 12 -1.</_>\n        <_>\n          9 12 3 6 2.</_>\n        <_>\n          12 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 18 3 -1.</_>\n        <_>\n          4 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 3 -1.</_>\n        <_>\n          3 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 6 9 -1.</_>\n        <_>\n          18 7 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 9 6 -1.</_>\n        <_>\n          2 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 18 4 -1.</_>\n        <_>\n          13 14 9 2 2.</_>\n        <_>\n          4 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 14 -1.</_>\n        <_>\n          7 7 3 7 2.</_>\n        <_>\n          10 14 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 12 6 -1.</_>\n        <_>\n          13 13 6 3 2.</_>\n        <_>\n          7 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 9 -1.</_>\n        <_>\n          10 7 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 6 6 -1.</_>\n        <_>\n          12 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 4 10 -1.</_>\n        <_>\n          0 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 9 6 -1.</_>\n        <_>\n          11 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 12 6 -1.</_>\n        <_>\n          2 12 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 6 9 -1.</_>\n        <_>\n          13 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 9 -1.</_>\n        <_>\n          5 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 9 6 -1.</_>\n        <_>\n          9 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 12 6 -1.</_>\n        <_>\n          5 19 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 20 3 -1.</_>\n        <_>\n          3 3 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 12 6 -1.</_>\n        <_>\n          6 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 24 -1.</_>\n        <_>\n          12 0 1 24 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 15 4 -1.</_>\n        <_>\n          8 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 12 -1.</_>\n        <_>\n          9 18 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 12 8 -1.</_>\n        <_>\n          1 15 6 4 2.</_>\n        <_>\n          7 19 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 8 14 -1.</_>\n        <_>\n          19 10 4 7 2.</_>\n        <_>\n          15 17 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 8 14 -1.</_>\n        <_>\n          1 9 4 7 2.</_>\n        <_>\n          5 16 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 9 10 -1.</_>\n        <_>\n          9 16 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 6 -1.</_>\n        <_>\n          6 9 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 9 -1.</_>\n        <_>\n          12 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 7 -1.</_>\n        <_>\n          10 8 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 10 -1.</_>\n        <_>\n          14 4 4 5 2.</_>\n        <_>\n          10 9 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 9 -1.</_>\n        <_>\n          4 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 24 12 -1.</_>\n        <_>\n          8 6 8 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 6 14 -1.</_>\n        <_>\n          6 7 3 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 8 5 8 -1.</_>\n        <_>\n          19 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 5 8 -1.</_>\n        <_>\n          0 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 6 6 -1.</_>\n        <_>\n          17 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 6 -1.</_>\n        <_>\n          1 6 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 9 -1.</_>\n        <_>\n          18 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 18 6 -1.</_>\n        <_>\n          3 5 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 9 6 -1.</_>\n        <_>\n          2 5 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 10 8 -1.</_>\n        <_>\n          14 3 5 4 2.</_>\n        <_>\n          9 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 10 8 -1.</_>\n        <_>\n          5 3 5 4 2.</_>\n        <_>\n          10 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 6 12 -1.</_>\n        <_>\n          10 11 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 11 -1.</_>\n        <_>\n          11 11 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 4 -1.</_>\n        <_>\n          7 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 7 -1.</_>\n        <_>\n          12 6 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 18 3 -1.</_>\n        <_>\n          5 19 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 9 -1.</_>\n        <_>\n          10 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 9 7 -1.</_>\n        <_>\n          11 1 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 6 -1.</_>\n        <_>\n          9 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 4 11 -1.</_>\n        <_>\n          14 12 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 4 11 -1.</_>\n        <_>\n          8 12 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 18 -1.</_>\n        <_>\n          12 0 4 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 10 5 -1.</_>\n        <_>\n          7 12 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 20 22 3 -1.</_>\n        <_>\n          2 21 22 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 2 20 -1.</_>\n        <_>\n          1 4 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 4 -1.</_>\n        <_>\n          8 2 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 4 -1.</_>\n        <_>\n          7 10 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 8 10 -1.</_>\n        <_>\n          6 7 4 5 2.</_>\n        <_>\n          10 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 14 -1.</_>\n        <_>\n          17 0 3 7 2.</_>\n        <_>\n          14 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 5 8 -1.</_>\n        <_>\n          4 15 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 20 9 -1.</_>\n        <_>\n          2 3 20 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 8 -1.</_>\n        <_>\n          6 7 6 4 2.</_>\n        <_>\n          12 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 6 6 -1.</_>\n        <_>\n          9 20 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 10 4 -1.</_>\n        <_>\n          7 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 9 -1.</_>\n        <_>\n          10 5 4 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 8 -1.</_>\n        <_>\n          8 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 4 17 -1.</_>\n        <_>\n          18 4 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 4 17 -1.</_>\n        <_>\n          18 4 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 4 17 -1.</_>\n        <_>\n          4 4 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 19 3 -1.</_>\n        <_>\n          5 19 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 18 -1.</_>\n        <_>\n          11 9 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 2 18 -1.</_>\n        <_>\n          15 13 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 18 -1.</_>\n        <_>\n          7 13 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 10 8 -1.</_>\n        <_>\n          12 11 5 4 2.</_>\n        <_>\n          7 15 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 9 -1.</_>\n        <_>\n          12 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          12 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 16 8 -1.</_>\n        <_>\n          2 9 8 4 2.</_>\n        <_>\n          10 13 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 9 -1.</_>\n        <_>\n          14 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 9 -1.</_>\n        <_>\n          10 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 9 -1.</_>\n        <_>\n          14 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 12 6 -1.</_>\n        <_>\n          3 14 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 9 6 -1.</_>\n        <_>\n          14 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 9 6 -1.</_>\n        <_>\n          1 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 18 3 -1.</_>\n        <_>\n          3 8 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 22 6 -1.</_>\n        <_>\n          1 9 22 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 6 6 -1.</_>\n        <_>\n          18 7 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 6 6 -1.</_>\n        <_>\n          0 7 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 16 6 -1.</_>\n        <_>\n          5 14 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 9 4 -1.</_>\n        <_>\n          6 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 9 -1.</_>\n        <_>\n          14 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 6 9 -1.</_>\n        <_>\n          4 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 6 23 -1.</_>\n        <_>\n          17 1 2 23 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 21 24 3 -1.</_>\n        <_>\n          8 21 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 20 24 4 -1.</_>\n        <_>\n          8 20 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 23 -1.</_>\n        <_>\n          5 1 2 23 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 18 3 -1.</_>\n        <_>\n          3 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 3 -1.</_>\n        <_>\n          0 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 22 4 -1.</_>\n        <_>\n          12 16 11 2 2.</_>\n        <_>\n          1 18 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 9 6 -1.</_>\n        <_>\n          0 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 21 3 -1.</_>\n        <_>\n          9 10 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 12 6 -1.</_>\n        <_>\n          2 18 6 3 2.</_>\n        <_>\n          8 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 24 4 -1.</_>\n        <_>\n          0 7 24 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 15 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 12 -1.</_>\n        <_>\n          10 13 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 9 -1.</_>\n        <_>\n          8 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 6 9 -1.</_>\n        <_>\n          11 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 20 3 -1.</_>\n        <_>\n          2 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 12 6 -1.</_>\n        <_>\n          1 18 6 3 2.</_>\n        <_>\n          7 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 4 13 -1.</_>\n        <_>\n          13 2 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 4 -1.</_>\n        <_>\n          12 7 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 13 -1.</_>\n        <_>\n          10 1 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 3 18 -1.</_>\n        <_>\n          7 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 10 5 -1.</_>\n        <_>\n          14 3 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 12 8 -1.</_>\n        <_>\n          10 15 4 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 9 -1.</_>\n        <_>\n          11 10 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 9 -1.</_>\n        <_>\n          10 3 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 6 14 -1.</_>\n        <_>\n          20 0 3 7 2.</_>\n        <_>\n          17 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 14 -1.</_>\n        <_>\n          1 0 3 7 2.</_>\n        <_>\n          4 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 16 -1.</_>\n        <_>\n          17 0 3 8 2.</_>\n        <_>\n          14 8 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 4 10 -1.</_>\n        <_>\n          9 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 18 6 -1.</_>\n        <_>\n          12 17 9 3 2.</_>\n        <_>\n          3 20 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 20 22 4 -1.</_>\n        <_>\n          12 20 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 10 5 -1.</_>\n        <_>\n          14 3 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 10 5 -1.</_>\n        <_>\n          5 3 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 12 16 -1.</_>\n        <_>\n          16 6 4 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 12 16 -1.</_>\n        <_>\n          4 6 4 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 5 15 -1.</_>\n        <_>\n          10 14 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 21 2 -1.</_>\n        <_>\n          1 19 21 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 9 6 -1.</_>\n        <_>\n          15 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 12 4 -1.</_>\n        <_>\n          12 1 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 12 -1.</_>\n        <_>\n          12 0 6 6 2.</_>\n        <_>\n          6 6 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 8 12 -1.</_>\n        <_>\n          8 10 4 6 2.</_>\n        <_>\n          12 16 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 16 10 8 -1.</_>\n        <_>\n          19 16 5 4 2.</_>\n        <_>\n          14 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 10 8 -1.</_>\n        <_>\n          0 16 5 4 2.</_>\n        <_>\n          5 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 12 5 -1.</_>\n        <_>\n          14 12 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 10 8 -1.</_>\n        <_>\n          6 16 5 4 2.</_>\n        <_>\n          11 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 12 6 -1.</_>\n        <_>\n          13 6 6 3 2.</_>\n        <_>\n          7 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 18 -1.</_>\n        <_>\n          9 6 2 9 2.</_>\n        <_>\n          11 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 6 14 -1.</_>\n        <_>\n          13 9 3 7 2.</_>\n        <_>\n          10 16 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 14 -1.</_>\n        <_>\n          8 9 3 7 2.</_>\n        <_>\n          11 16 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 11 12 -1.</_>\n        <_>\n          7 10 11 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 16 -1.</_>\n        <_>\n          4 8 3 8 2.</_>\n        <_>\n          7 16 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 4 21 -1.</_>\n        <_>\n          17 10 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 4 21 -1.</_>\n        <_>\n          3 10 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 8 18 -1.</_>\n        <_>\n          14 1 4 9 2.</_>\n        <_>\n          10 10 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 16 8 -1.</_>\n        <_>\n          2 5 8 4 2.</_>\n        <_>\n          10 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 12 -1.</_>\n        <_>\n          3 10 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 16 12 -1.</_>\n        <_>\n          4 14 16 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 8 20 -1.</_>\n        <_>\n          19 4 4 10 2.</_>\n        <_>\n          15 14 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 9 6 -1.</_>\n        <_>\n          10 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 8 20 -1.</_>\n        <_>\n          19 4 4 10 2.</_>\n        <_>\n          15 14 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 8 20 -1.</_>\n        <_>\n          1 4 4 10 2.</_>\n        <_>\n          5 14 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 8 14 -1.</_>\n        <_>\n          15 8 4 7 2.</_>\n        <_>\n          11 15 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 8 14 -1.</_>\n        <_>\n          5 8 4 7 2.</_>\n        <_>\n          9 15 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 5 8 -1.</_>\n        <_>\n          10 17 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 7 9 -1.</_>\n        <_>\n          4 16 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 24 10 -1.</_>\n        <_>\n          0 18 24 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 8 11 -1.</_>\n        <_>\n          8 2 4 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 8 16 -1.</_>\n        <_>\n          14 2 4 8 2.</_>\n        <_>\n          10 10 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 6 -1.</_>\n        <_>\n          0 2 12 3 2.</_>\n        <_>\n          12 5 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 9 -1.</_>\n        <_>\n          6 3 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 12 12 -1.</_>\n        <_>\n          1 2 6 6 2.</_>\n        <_>\n          7 8 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 6 9 -1.</_>\n        <_>\n          18 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 8 10 -1.</_>\n        <_>\n          4 3 4 5 2.</_>\n        <_>\n          8 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 21 18 3 -1.</_>\n        <_>\n          6 22 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 2 -1.</_>\n        <_>\n          1 11 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 22 3 -1.</_>\n        <_>\n          1 11 22 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 12 9 -1.</_>\n        <_>\n          2 11 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 12 6 -1.</_>\n        <_>\n          18 8 6 3 2.</_>\n        <_>\n          12 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 6 -1.</_>\n        <_>\n          0 8 6 3 2.</_>\n        <_>\n          6 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 9 -1.</_>\n        <_>\n          12 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 9 6 -1.</_>\n        <_>\n          7 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 7 12 -1.</_>\n        <_>\n          9 14 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 9 6 -1.</_>\n        <_>\n          7 13 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 18 4 -1.</_>\n        <_>\n          12 15 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 16 -1.</_>\n        <_>\n          7 4 2 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 9 -1.</_>\n        <_>\n          12 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 6 9 -1.</_>\n        <_>\n          10 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 12 10 -1.</_>\n        <_>\n          15 11 6 5 2.</_>\n        <_>\n          9 16 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 14 6 -1.</_>\n        <_>\n          3 8 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 17 8 -1.</_>\n        <_>\n          4 6 17 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 21 -1.</_>\n        <_>\n          6 9 12 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 9 9 -1.</_>\n        <_>\n          8 4 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 24 3 -1.</_>\n        <_>\n          12 7 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 9 10 -1.</_>\n        <_>\n          11 11 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 18 3 -1.</_>\n        <_>\n          2 12 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 9 4 -1.</_>\n        <_>\n          8 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 6 -1.</_>\n        <_>\n          0 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 24 6 -1.</_>\n        <_>\n          0 13 24 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 20 6 -1.</_>\n        <_>\n          2 12 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 12 -1.</_>\n        <_>\n          12 5 8 6 2.</_>\n        <_>\n          4 11 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 15 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 10 4 -1.</_>\n        <_>\n          7 5 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 6 8 -1.</_>\n        <_>\n          9 19 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 7 10 -1.</_>\n        <_>\n          17 5 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 10 -1.</_>\n        <_>\n          0 5 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 6 12 -1.</_>\n        <_>\n          19 1 3 6 2.</_>\n        <_>\n          16 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 19 8 -1.</_>\n        <_>\n          1 4 19 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 9 4 -1.</_>\n        <_>\n          12 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 9 4 -1.</_>\n        <_>\n          3 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 10 6 -1.</_>\n        <_>\n          12 4 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 18 2 -1.</_>\n        <_>\n          12 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 4 9 -1.</_>\n        <_>\n          12 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 9 -1.</_>\n        <_>\n          10 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 10 -1.</_>\n        <_>\n          14 5 4 5 2.</_>\n        <_>\n          10 10 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 13 -1.</_>\n        <_>\n          10 4 4 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 6 6 -1.</_>\n        <_>\n          13 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 12 3 -1.</_>\n        <_>\n          7 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 10 6 -1.</_>\n        <_>\n          7 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 21 5 -1.</_>\n        <_>\n          9 0 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 9 -1.</_>\n        <_>\n          0 11 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 7 -1.</_>\n        <_>\n          3 3 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 12 6 -1.</_>\n        <_>\n          15 18 6 3 2.</_>\n        <_>\n          9 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 20 6 -1.</_>\n        <_>\n          2 8 10 3 2.</_>\n        <_>\n          12 11 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 10 4 -1.</_>\n        <_>\n          13 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 5 18 -1.</_>\n        <_>\n          4 11 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 4 4 9 -1.</_>\n        <_>\n          20 4 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 14 -1.</_>\n        <_>\n          8 13 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 6 -1.</_>\n        <_>\n          12 1 12 3 2.</_>\n        <_>\n          0 4 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 9 -1.</_>\n        <_>\n          2 4 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 3 -1.</_>\n        <_>\n          3 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 16 6 -1.</_>\n        <_>\n          3 19 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 6 9 -1.</_>\n        <_>\n          13 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 6 -1.</_>\n        <_>\n          5 6 7 3 2.</_>\n        <_>\n          12 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 8 10 -1.</_>\n        <_>\n          17 5 4 5 2.</_>\n        <_>\n          13 10 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 20 3 -1.</_>\n        <_>\n          2 3 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 9 6 -1.</_>\n        <_>\n          12 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 9 -1.</_>\n        <_>\n          10 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 4 11 -1.</_>\n        <_>\n          12 3 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 11 -1.</_>\n        <_>\n          10 3 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 8 10 -1.</_>\n        <_>\n          12 3 4 5 2.</_>\n        <_>\n          8 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 2 18 -1.</_>\n        <_>\n          12 1 1 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 9 6 -1.</_>\n        <_>\n          12 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 19 3 -1.</_>\n        <_>\n          0 3 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 9 6 -1.</_>\n        <_>\n          9 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 18 5 -1.</_>\n        <_>\n          7 8 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 9 -1.</_>\n        <_>\n          14 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 9 -1.</_>\n        <_>\n          8 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 4 15 -1.</_>\n        <_>\n          13 11 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 3 -1.</_>\n        <_>\n          1 6 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 14 6 -1.</_>\n        <_>\n          9 9 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 18 3 -1.</_>\n        <_>\n          2 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 6 -1.</_>\n        <_>\n          15 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 6 -1.</_>\n        <_>\n          0 8 6 3 2.</_>\n        <_>\n          6 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 7 8 -1.</_>\n        <_>\n          9 17 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 20 3 -1.</_>\n        <_>\n          2 18 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 6 -1.</_>\n        <_>\n          15 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 15 4 -1.</_>\n        <_>\n          4 2 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 6 6 -1.</_>\n        <_>\n          17 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 9 -1.</_>\n        <_>\n          0 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 6 -1.</_>\n        <_>\n          15 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 9 6 -1.</_>\n        <_>\n          0 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 12 6 -1.</_>\n        <_>\n          15 18 6 3 2.</_>\n        <_>\n          9 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 6 9 -1.</_>\n        <_>\n          3 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 13 8 10 -1.</_>\n        <_>\n          20 13 4 5 2.</_>\n        <_>\n          16 18 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 24 4 -1.</_>\n        <_>\n          8 14 8 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 18 6 6 -1.</_>\n        <_>\n          13 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 8 10 -1.</_>\n        <_>\n          0 13 4 5 2.</_>\n        <_>\n          4 18 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 24 6 -1.</_>\n        <_>\n          0 17 24 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 8 -1.</_>\n        <_>\n          5 2 6 4 2.</_>\n        <_>\n          11 6 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 9 6 -1.</_>\n        <_>\n          11 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 4 -1.</_>\n        <_>\n          4 5 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 10 -1.</_>\n        <_>\n          10 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 5 8 -1.</_>\n        <_>\n          8 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 9 12 -1.</_>\n        <_>\n          11 9 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 9 12 -1.</_>\n        <_>\n          4 9 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 9 -1.</_>\n        <_>\n          14 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 20 12 -1.</_>\n        <_>\n          2 8 20 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 17 16 -1.</_>\n        <_>\n          4 12 17 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 7 6 -1.</_>\n        <_>\n          8 10 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 23 2 -1.</_>\n        <_>\n          1 10 23 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 4 9 -1.</_>\n        <_>\n          13 3 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 6 13 -1.</_>\n        <_>\n          10 1 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 22 18 2 -1.</_>\n        <_>\n          4 23 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 9 6 -1.</_>\n        <_>\n          6 10 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 24 -1.</_>\n        <_>\n          14 0 1 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 24 -1.</_>\n        <_>\n          9 0 1 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 18 10 -1.</_>\n        <_>\n          9 2 6 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 15 6 -1.</_>\n        <_>\n          9 13 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 18 3 -1.</_>\n        <_>\n          9 21 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 11 -1.</_>\n        <_>\n          11 1 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 10 4 -1.</_>\n        <_>\n          9 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 10 18 -1.</_>\n        <_>\n          12 0 5 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 16 -1.</_>\n        <_>\n          14 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 16 -1.</_>\n        <_>\n          8 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 6 -1.</_>\n        <_>\n          18 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 18 2 -1.</_>\n        <_>\n          3 6 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 6 -1.</_>\n        <_>\n          18 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 6 -1.</_>\n        <_>\n          0 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 11 6 -1.</_>\n        <_>\n          13 13 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 4 -1.</_>\n        <_>\n          10 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 10 7 -1.</_>\n        <_>\n          11 9 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 7 -1.</_>\n        <_>\n          8 9 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 6 6 -1.</_>\n        <_>\n          16 4 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 8 -1.</_>\n        <_>\n          5 6 5 4 2.</_>\n        <_>\n          10 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 21 16 3 -1.</_>\n        <_>\n          7 21 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 21 16 3 -1.</_>\n        <_>\n          9 21 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 22 14 -1.</_>\n        <_>\n          13 5 11 7 2.</_>\n        <_>\n          2 12 11 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 8 10 -1.</_>\n        <_>\n          3 10 4 5 2.</_>\n        <_>\n          7 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 6 12 -1.</_>\n        <_>\n          20 0 3 6 2.</_>\n        <_>\n          17 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 18 -1.</_>\n        <_>\n          7 2 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 9 -1.</_>\n        <_>\n          15 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 7 9 -1.</_>\n        <_>\n          0 15 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 8 10 -1.</_>\n        <_>\n          19 13 4 5 2.</_>\n        <_>\n          15 18 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 12 -1.</_>\n        <_>\n          1 0 3 6 2.</_>\n        <_>\n          4 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 3 12 -1.</_>\n        <_>\n          12 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 8 10 -1.</_>\n        <_>\n          1 13 4 5 2.</_>\n        <_>\n          5 18 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 19 2 -1.</_>\n        <_>\n          3 22 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 13 -1.</_>\n        <_>\n          8 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 18 3 -1.</_>\n        <_>\n          5 11 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 5 12 -1.</_>\n        <_>\n          9 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 4 15 -1.</_>\n        <_>\n          11 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 16 4 -1.</_>\n        <_>\n          4 3 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 18 3 -1.</_>\n        <_>\n          6 1 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 8 -1.</_>\n        <_>\n          5 1 5 4 2.</_>\n        <_>\n          10 5 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 12 6 -1.</_>\n        <_>\n          17 18 6 3 2.</_>\n        <_>\n          11 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 12 3 -1.</_>\n        <_>\n          11 15 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 22 4 -1.</_>\n        <_>\n          1 10 11 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 9 6 -1.</_>\n        <_>\n          10 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 12 5 -1.</_>\n        <_>\n          10 11 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 7 -1.</_>\n        <_>\n          11 7 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 8 10 -1.</_>\n        <_>\n          11 2 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 8 10 -1.</_>\n        <_>\n          9 2 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 18 6 -1.</_>\n        <_>\n          15 4 9 3 2.</_>\n        <_>\n          6 7 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 9 -1.</_>\n        <_>\n          0 8 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 21 6 -1.</_>\n        <_>\n          2 9 21 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 22 16 -1.</_>\n        <_>\n          0 4 11 8 2.</_>\n        <_>\n          11 12 11 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 22 -1.</_>\n        <_>\n          9 11 6 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 12 -1.</_>\n        <_>\n          9 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 12 18 -1.</_>\n        <_>\n          18 0 6 9 2.</_>\n        <_>\n          12 9 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 18 -1.</_>\n        <_>\n          0 0 6 9 2.</_>\n        <_>\n          6 9 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 22 4 -1.</_>\n        <_>\n          12 1 11 2 2.</_>\n        <_>\n          1 3 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 18 4 -1.</_>\n        <_>\n          3 2 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 22 6 -1.</_>\n        <_>\n          2 7 22 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 9 -1.</_>\n        <_>\n          5 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 6 9 -1.</_>\n        <_>\n          12 14 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 6 9 -1.</_>\n        <_>\n          10 14 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 18 3 -1.</_>\n        <_>\n          5 19 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 13 -1.</_>\n        <_>\n          9 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 12 4 -1.</_>\n        <_>\n          7 4 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 6 -1.</_>\n        <_>\n          9 2 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 18 3 -1.</_>\n        <_>\n          4 2 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 12 -1.</_>\n        <_>\n          0 12 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 6 9 -1.</_>\n        <_>\n          11 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 13 -1.</_>\n        <_>\n          11 10 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 18 2 -1.</_>\n        <_>\n          6 18 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 6 9 -1.</_>\n        <_>\n          11 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          12 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 10 8 -1.</_>\n        <_>\n          5 6 5 4 2.</_>\n        <_>\n          10 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 5 8 -1.</_>\n        <_>\n          14 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 5 8 -1.</_>\n        <_>\n          5 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 11 9 6 -1.</_>\n        <_>\n          14 13 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 23 15 -1.</_>\n        <_>\n          0 7 23 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 8 12 -1.</_>\n        <_>\n          16 6 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 6 9 -1.</_>\n        <_>\n          4 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 9 4 -1.</_>\n        <_>\n          8 20 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 11 6 -1.</_>\n        <_>\n          13 13 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 11 6 -1.</_>\n        <_>\n          0 13 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 24 6 -1.</_>\n        <_>\n          12 9 12 3 2.</_>\n        <_>\n          0 12 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 8 8 -1.</_>\n        <_>\n          6 20 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 14 6 -1.</_>\n        <_>\n          10 18 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 21 3 -1.</_>\n        <_>\n          1 2 21 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 3 -1.</_>\n        <_>\n          0 2 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 8 5 -1.</_>\n        <_>\n          6 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 21 3 -1.</_>\n        <_>\n          9 11 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 12 6 -1.</_>\n        <_>\n          1 18 6 3 2.</_>\n        <_>\n          7 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 4 10 -1.</_>\n        <_>\n          10 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 4 10 -1.</_>\n        <_>\n          7 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 12 -1.</_>\n        <_>\n          9 12 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 6 -1.</_>\n        <_>\n          10 1 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 19 2 -1.</_>\n        <_>\n          3 15 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 10 10 -1.</_>\n        <_>\n          7 7 5 5 2.</_>\n        <_>\n          12 12 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 18 12 -1.</_>\n        <_>\n          3 12 9 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 12 -1.</_>\n        <_>\n          10 0 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 17 9 -1.</_>\n        <_>\n          3 3 17 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 11 -1.</_>\n        <_>\n          10 0 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 13 -1.</_>\n        <_>\n          4 0 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 16 6 -1.</_>\n        <_>\n          5 11 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 5 12 -1.</_>\n        <_>\n          8 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 18 3 -1.</_>\n        <_>\n          9 21 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 20 3 -1.</_>\n        <_>\n          2 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 15 10 -1.</_>\n        <_>\n          9 6 5 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 9 -1.</_>\n        <_>\n          11 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 9 -1.</_>\n        <_>\n          16 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 9 6 -1.</_>\n        <_>\n          7 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 9 -1.</_>\n        <_>\n          16 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 1 6 16 -1.</_>\n        <_>\n          19 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 16 -1.</_>\n        <_>\n          3 1 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 6 9 -1.</_>\n        <_>\n          14 16 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 9 -1.</_>\n        <_>\n          0 3 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 6 -1.</_>\n        <_>\n          9 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 9 6 -1.</_>\n        <_>\n          6 10 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 3 16 -1.</_>\n        <_>\n          14 15 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 14 12 -1.</_>\n        <_>\n          4 10 7 6 2.</_>\n        <_>\n          11 16 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 12 6 -1.</_>\n        <_>\n          7 8 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 4 20 -1.</_>\n        <_>\n          9 2 2 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 6 9 -1.</_>\n        <_>\n          14 16 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 9 -1.</_>\n        <_>\n          12 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 6 9 -1.</_>\n        <_>\n          14 16 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 20 14 4 -1.</_>\n        <_>\n          5 22 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 16 12 -1.</_>\n        <_>\n          4 10 16 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 21 4 -1.</_>\n        <_>\n          3 2 21 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 6 9 -1.</_>\n        <_>\n          4 16 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 16 5 8 -1.</_>\n        <_>\n          16 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 16 -1.</_>\n        <_>\n          4 0 8 8 2.</_>\n        <_>\n          12 8 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 6 -1.</_>\n        <_>\n          13 6 7 3 2.</_>\n        <_>\n          6 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 15 -1.</_>\n        <_>\n          10 10 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 12 8 -1.</_>\n        <_>\n          15 15 6 4 2.</_>\n        <_>\n          9 19 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 4 -1.</_>\n        <_>\n          12 7 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 6 -1.</_>\n        <_>\n          12 6 7 3 2.</_>\n        <_>\n          5 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 10 -1.</_>\n        <_>\n          3 6 9 5 2.</_>\n        <_>\n          12 11 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 18 21 -1.</_>\n        <_>\n          12 0 6 21 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 21 -1.</_>\n        <_>\n          8 0 8 21 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 18 3 -1.</_>\n        <_>\n          6 19 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 6 -1.</_>\n        <_>\n          0 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 19 2 -1.</_>\n        <_>\n          4 4 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 24 2 -1.</_>\n        <_>\n          0 4 24 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 9 4 -1.</_>\n        <_>\n          15 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 4 -1.</_>\n        <_>\n          0 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 18 2 -1.</_>\n        <_>\n          6 16 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 18 3 -1.</_>\n        <_>\n          3 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 23 -1.</_>\n        <_>\n          13 0 1 23 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 6 -1.</_>\n        <_>\n          6 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 18 3 -1.</_>\n        <_>\n          6 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 23 -1.</_>\n        <_>\n          10 0 1 23 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 4 10 -1.</_>\n        <_>\n          10 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 12 -1.</_>\n        <_>\n          7 12 10 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 14 -1.</_>\n        <_>\n          17 9 3 7 2.</_>\n        <_>\n          14 16 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 10 9 -1.</_>\n        <_>\n          2 3 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 5 12 -1.</_>\n        <_>\n          11 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 12 10 -1.</_>\n        <_>\n          1 4 6 5 2.</_>\n        <_>\n          7 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 9 4 -1.</_>\n        <_>\n          15 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 10 -1.</_>\n        <_>\n          1 2 4 5 2.</_>\n        <_>\n          5 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 5 12 -1.</_>\n        <_>\n          10 5 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 24 -1.</_>\n        <_>\n          11 0 7 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 10 4 -1.</_>\n        <_>\n          7 19 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 4 10 -1.</_>\n        <_>\n          10 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 15 6 9 -1.</_>\n        <_>\n          15 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 18 3 -1.</_>\n        <_>\n          3 22 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 15 6 9 -1.</_>\n        <_>\n          15 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 6 9 -1.</_>\n        <_>\n          7 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 18 -1.</_>\n        <_>\n          12 6 2 9 2.</_>\n        <_>\n          10 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 6 11 -1.</_>\n        <_>\n          9 3 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 9 4 -1.</_>\n        <_>\n          15 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 8 -1.</_>\n        <_>\n          5 8 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 15 9 -1.</_>\n        <_>\n          8 4 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 10 -1.</_>\n        <_>\n          7 2 4 5 2.</_>\n        <_>\n          11 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 6 12 -1.</_>\n        <_>\n          12 2 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 6 12 -1.</_>\n        <_>\n          9 2 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 12 4 -1.</_>\n        <_>\n          7 7 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 12 10 -1.</_>\n        <_>\n          10 3 4 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 16 6 -1.</_>\n        <_>\n          13 6 8 3 2.</_>\n        <_>\n          5 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 18 9 -1.</_>\n        <_>\n          9 1 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 18 5 -1.</_>\n        <_>\n          9 8 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 22 -1.</_>\n        <_>\n          0 0 12 11 2.</_>\n        <_>\n          12 11 12 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 16 9 6 -1.</_>\n        <_>\n          14 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 24 8 -1.</_>\n        <_>\n          0 20 24 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 22 4 -1.</_>\n        <_>\n          12 19 11 2 2.</_>\n        <_>\n          1 21 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 9 6 -1.</_>\n        <_>\n          1 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 4 -1.</_>\n        <_>\n          7 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 6 9 -1.</_>\n        <_>\n          11 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 12 6 -1.</_>\n        <_>\n          16 18 6 3 2.</_>\n        <_>\n          10 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 12 6 -1.</_>\n        <_>\n          2 18 6 3 2.</_>\n        <_>\n          8 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 16 9 -1.</_>\n        <_>\n          8 6 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 18 3 -1.</_>\n        <_>\n          5 6 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 9 6 -1.</_>\n        <_>\n          2 9 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 10 9 -1.</_>\n        <_>\n          14 5 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 3 -1.</_>\n        <_>\n          3 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 15 6 -1.</_>\n        <_>\n          9 4 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 15 6 -1.</_>\n        <_>\n          4 10 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 24 4 -1.</_>\n        <_>\n          12 5 12 2 2.</_>\n        <_>\n          0 7 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 12 -1.</_>\n        <_>\n          9 8 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 12 -1.</_>\n        <_>\n          0 12 3 6 2.</_>\n        <_>\n          3 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 10 6 -1.</_>\n        <_>\n          14 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 18 9 -1.</_>\n        <_>\n          2 10 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 10 9 -1.</_>\n        <_>\n          11 17 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 8 -1.</_>\n        <_>\n          7 6 5 4 2.</_>\n        <_>\n          12 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 6 -1.</_>\n        <_>\n          13 6 7 3 2.</_>\n        <_>\n          6 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 9 7 -1.</_>\n        <_>\n          7 13 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 12 -1.</_>\n        <_>\n          17 10 3 6 2.</_>\n        <_>\n          14 16 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 6 12 -1.</_>\n        <_>\n          4 10 3 6 2.</_>\n        <_>\n          7 16 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 8 6 -1.</_>\n        <_>\n          13 9 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 14 -1.</_>\n        <_>\n          10 3 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 18 -1.</_>\n        <_>\n          18 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 16 12 -1.</_>\n        <_>\n          12 12 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 6 14 -1.</_>\n        <_>\n          17 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 14 -1.</_>\n        <_>\n          5 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 12 20 -1.</_>\n        <_>\n          16 2 4 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 12 20 -1.</_>\n        <_>\n          4 2 4 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 6 17 -1.</_>\n        <_>\n          18 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 17 -1.</_>\n        <_>\n          4 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 9 6 -1.</_>\n        <_>\n          15 8 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 9 6 -1.</_>\n        <_>\n          0 8 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 6 13 -1.</_>\n        <_>\n          20 1 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 13 -1.</_>\n        <_>\n          2 1 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 9 -1.</_>\n        <_>\n          16 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 12 7 -1.</_>\n        <_>\n          9 10 4 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 12 6 -1.</_>\n        <_>\n          12 11 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 12 6 -1.</_>\n        <_>\n          0 11 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 14 9 -1.</_>\n        <_>\n          5 10 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 3 -1.</_>\n        <_>\n          0 16 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 8 10 -1.</_>\n        <_>\n          12 10 4 5 2.</_>\n        <_>\n          8 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 13 9 -1.</_>\n        <_>\n          5 7 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 6 18 -1.</_>\n        <_>\n          10 8 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 9 -1.</_>\n        <_>\n          8 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 12 4 -1.</_>\n        <_>\n          6 11 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 15 12 -1.</_>\n        <_>\n          3 6 15 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 12 5 -1.</_>\n        <_>\n          16 0 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 3 -1.</_>\n        <_>\n          6 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 24 5 -1.</_>\n        <_>\n          8 14 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 18 -1.</_>\n        <_>\n          6 1 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 14 -1.</_>\n        <_>\n          10 0 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 4 9 -1.</_>\n        <_>\n          11 3 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 12 6 -1.</_>\n        <_>\n          14 2 6 3 2.</_>\n        <_>\n          8 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 17 4 -1.</_>\n        <_>\n          0 6 17 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 16 5 8 -1.</_>\n        <_>\n          16 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 5 8 -1.</_>\n        <_>\n          3 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 18 2 -1.</_>\n        <_>\n          6 19 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 5 -1.</_>\n        <_>\n          4 0 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 12 -1.</_>\n        <_>\n          17 3 3 6 2.</_>\n        <_>\n          14 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 12 -1.</_>\n        <_>\n          2 12 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 21 3 -1.</_>\n        <_>\n          2 4 21 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 6 12 -1.</_>\n        <_>\n          4 3 3 6 2.</_>\n        <_>\n          7 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 12 6 -1.</_>\n        <_>\n          18 8 6 3 2.</_>\n        <_>\n          12 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 16 9 -1.</_>\n        <_>\n          8 15 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 18 5 -1.</_>\n        <_>\n          6 13 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 15 6 -1.</_>\n        <_>\n          6 6 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 9 6 -1.</_>\n        <_>\n          14 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 15 11 -1.</_>\n        <_>\n          8 0 5 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 3 18 -1.</_>\n        <_>\n          15 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 18 -1.</_>\n        <_>\n          6 9 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 10 8 -1.</_>\n        <_>\n          14 5 5 4 2.</_>\n        <_>\n          9 9 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 16 8 -1.</_>\n        <_>\n          4 4 8 4 2.</_>\n        <_>\n          12 8 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 12 3 -1.</_>\n        <_>\n          7 7 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 9 13 -1.</_>\n        <_>\n          8 0 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 10 9 -1.</_>\n        <_>\n          8 4 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 18 2 -1.</_>\n        <_>\n          0 3 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 14 6 -1.</_>\n        <_>\n          17 13 7 3 2.</_>\n        <_>\n          10 16 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 14 6 -1.</_>\n        <_>\n          0 13 7 3 2.</_>\n        <_>\n          7 16 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 2 3 21 -1.</_>\n        <_>\n          21 2 1 21 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 5 12 -1.</_>\n        <_>\n          0 13 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 12 6 -1.</_>\n        <_>\n          12 8 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 20 3 -1.</_>\n        <_>\n          1 9 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 19 3 -1.</_>\n        <_>\n          5 8 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 9 6 -1.</_>\n        <_>\n          1 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 14 12 -1.</_>\n        <_>\n          6 14 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 18 -1.</_>\n        <_>\n          5 12 14 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 9 7 -1.</_>\n        <_>\n          14 12 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 18 4 -1.</_>\n        <_>\n          1 17 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 6 9 -1.</_>\n        <_>\n          11 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 4 -1.</_>\n        <_>\n          0 8 9 2 2.</_>\n        <_>\n          9 10 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 20 6 -1.</_>\n        <_>\n          13 10 10 3 2.</_>\n        <_>\n          3 13 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 20 6 -1.</_>\n        <_>\n          1 10 10 3 2.</_>\n        <_>\n          11 13 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 24 2 -1.</_>\n        <_>\n          0 9 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 20 8 -1.</_>\n        <_>\n          1 12 10 4 2.</_>\n        <_>\n          11 16 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 9 7 -1.</_>\n        <_>\n          14 12 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 9 7 -1.</_>\n        <_>\n          7 12 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 8 5 -1.</_>\n        <_>\n          12 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 8 5 -1.</_>\n        <_>\n          8 12 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 4 10 -1.</_>\n        <_>\n          13 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 20 2 -1.</_>\n        <_>\n          11 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 6 -1.</_>\n        <_>\n          9 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 21 3 -1.</_>\n        <_>\n          7 1 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 13 9 -1.</_>\n        <_>\n          6 7 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 5 -1.</_>\n        <_>\n          10 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 6 -1.</_>\n        <_>\n          10 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 5 8 -1.</_>\n        <_>\n          6 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 9 -1.</_>\n        <_>\n          15 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 18 6 -1.</_>\n        <_>\n          8 10 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 9 4 -1.</_>\n        <_>\n          11 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 20 21 3 -1.</_>\n        <_>\n          8 20 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 22 2 -1.</_>\n        <_>\n          1 11 22 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 9 -1.</_>\n        <_>\n          15 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 9 -1.</_>\n        <_>\n          7 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 20 -1.</_>\n        <_>\n          20 2 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 20 -1.</_>\n        <_>\n          2 2 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 6 14 -1.</_>\n        <_>\n          14 7 3 7 2.</_>\n        <_>\n          11 14 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 4 9 -1.</_>\n        <_>\n          2 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 9 4 -1.</_>\n        <_>\n          12 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 9 4 -1.</_>\n        <_>\n          1 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 15 6 -1.</_>\n        <_>\n          7 8 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 18 -1.</_>\n        <_>\n          8 8 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 6 -1.</_>\n        <_>\n          12 6 6 3 2.</_>\n        <_>\n          6 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 19 20 4 -1.</_>\n        <_>\n          2 19 10 2 2.</_>\n        <_>\n          12 21 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 6 9 -1.</_>\n        <_>\n          14 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 18 14 -1.</_>\n        <_>\n          3 5 9 7 2.</_>\n        <_>\n          12 12 9 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 4 18 -1.</_>\n        <_>\n          17 6 2 9 2.</_>\n        <_>\n          15 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 18 -1.</_>\n        <_>\n          5 6 2 9 2.</_>\n        <_>\n          7 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 9 -1.</_>\n        <_>\n          13 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 6 9 -1.</_>\n        <_>\n          13 5 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 6 -1.</_>\n        <_>\n          12 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 16 6 -1.</_>\n        <_>\n          12 1 8 3 2.</_>\n        <_>\n          4 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 11 -1.</_>\n        <_>\n          11 13 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 1 6 12 -1.</_>\n        <_>\n          20 1 3 6 2.</_>\n        <_>\n          17 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 18 3 -1.</_>\n        <_>\n          1 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 10 8 -1.</_>\n        <_>\n          7 17 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 10 6 -1.</_>\n        <_>\n          6 20 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 9 4 -1.</_>\n        <_>\n          9 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 6 12 -1.</_>\n        <_>\n          1 1 3 6 2.</_>\n        <_>\n          4 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 4 5 12 -1.</_>\n        <_>\n          19 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 8 -1.</_>\n        <_>\n          4 0 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 19 3 -1.</_>\n        <_>\n          3 6 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 12 6 -1.</_>\n        <_>\n          1 5 6 3 2.</_>\n        <_>\n          7 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 21 8 -1.</_>\n        <_>\n          9 1 7 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 16 8 -1.</_>\n        <_>\n          4 5 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 18 3 -1.</_>\n        <_>\n          6 1 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 10 14 -1.</_>\n        <_>\n          4 11 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 4 10 -1.</_>\n        <_>\n          15 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 18 3 -1.</_>\n        <_>\n          9 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 12 6 -1.</_>\n        <_>\n          12 18 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 6 9 -1.</_>\n        <_>\n          6 15 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 6 8 -1.</_>\n        <_>\n          15 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 6 8 -1.</_>\n        <_>\n          3 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 18 6 -1.</_>\n        <_>\n          14 9 9 3 2.</_>\n        <_>\n          5 12 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 12 6 -1.</_>\n        <_>\n          1 15 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 10 6 -1.</_>\n        <_>\n          14 17 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 10 6 -1.</_>\n        <_>\n          0 17 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 6 9 -1.</_>\n        <_>\n          15 16 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 6 9 -1.</_>\n        <_>\n          3 16 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 8 -1.</_>\n        <_>\n          9 5 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 12 6 -1.</_>\n        <_>\n          1 18 6 3 2.</_>\n        <_>\n          7 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 19 10 4 -1.</_>\n        <_>\n          13 21 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 19 10 4 -1.</_>\n        <_>\n          1 21 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 19 18 3 -1.</_>\n        <_>\n          6 20 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 10 -1.</_>\n        <_>\n          8 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 6 -1.</_>\n        <_>\n          0 2 24 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          0 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 20 6 -1.</_>\n        <_>\n          14 9 10 3 2.</_>\n        <_>\n          4 12 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 19 8 -1.</_>\n        <_>\n          1 19 19 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 10 6 -1.</_>\n        <_>\n          14 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 21 14 -1.</_>\n        <_>\n          8 10 7 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 8 8 -1.</_>\n        <_>\n          10 10 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 10 4 -1.</_>\n        <_>\n          11 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 9 -1.</_>\n        <_>\n          10 5 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          9 5 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 4 13 -1.</_>\n        <_>\n          14 4 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 13 -1.</_>\n        <_>\n          8 4 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 6 -1.</_>\n        <_>\n          11 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 16 6 -1.</_>\n        <_>\n          3 6 8 3 2.</_>\n        <_>\n          11 9 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 16 14 -1.</_>\n        <_>\n          13 4 8 7 2.</_>\n        <_>\n          5 11 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 4 -1.</_>\n        <_>\n          0 0 12 2 2.</_>\n        <_>\n          12 2 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 9 6 -1.</_>\n        <_>\n          12 1 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 14 4 -1.</_>\n        <_>\n          11 1 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 7 9 -1.</_>\n        <_>\n          10 17 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 8 10 -1.</_>\n        <_>\n          8 3 4 5 2.</_>\n        <_>\n          12 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 12 5 -1.</_>\n        <_>\n          11 3 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 4 13 -1.</_>\n        <_>\n          10 2 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 19 -1.</_>\n        <_>\n          12 2 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 9 6 -1.</_>\n        <_>\n          10 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 22 20 2 -1.</_>\n        <_>\n          4 22 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 24 4 -1.</_>\n        <_>\n          0 16 12 2 2.</_>\n        <_>\n          12 18 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 12 5 -1.</_>\n        <_>\n          11 3 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 8 14 -1.</_>\n        <_>\n          1 10 4 7 2.</_>\n        <_>\n          5 17 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 6 6 -1.</_>\n        <_>\n          11 19 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 10 24 -1.</_>\n        <_>\n          6 0 5 12 2.</_>\n        <_>\n          11 12 5 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 14 14 -1.</_>\n        <_>\n          14 5 7 7 2.</_>\n        <_>\n          7 12 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 8 -1.</_>\n        <_>\n          7 8 5 4 2.</_>\n        <_>\n          12 12 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 9 6 -1.</_>\n        <_>\n          12 1 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 24 3 -1.</_>\n        <_>\n          12 6 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 12 5 -1.</_>\n        <_>\n          11 3 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 22 4 -1.</_>\n        <_>\n          1 13 11 2 2.</_>\n        <_>\n          12 15 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 12 6 -1.</_>\n        <_>\n          9 14 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 9 6 -1.</_>\n        <_>\n          0 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 23 6 -1.</_>\n        <_>\n          1 7 23 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 19 12 -1.</_>\n        <_>\n          1 10 19 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 21 -1.</_>\n        <_>\n          9 8 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 19 18 3 -1.</_>\n        <_>\n          9 19 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 6 9 -1.</_>\n        <_>\n          11 14 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 4 12 -1.</_>\n        <_>\n          11 6 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 6 9 -1.</_>\n        <_>\n          18 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 9 -1.</_>\n        <_>\n          4 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 22 -1.</_>\n        <_>\n          15 1 2 11 2.</_>\n        <_>\n          13 12 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 8 12 -1.</_>\n        <_>\n          1 14 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 7 9 -1.</_>\n        <_>\n          14 10 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 18 4 -1.</_>\n        <_>\n          3 12 9 2 2.</_>\n        <_>\n          12 14 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 4 22 -1.</_>\n        <_>\n          15 1 2 11 2.</_>\n        <_>\n          13 12 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 4 22 -1.</_>\n        <_>\n          7 1 2 11 2.</_>\n        <_>\n          9 12 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 20 4 -1.</_>\n        <_>\n          14 7 10 2 2.</_>\n        <_>\n          4 9 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 7 -1.</_>\n        <_>\n          12 10 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 10 4 -1.</_>\n        <_>\n          7 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 4 15 -1.</_>\n        <_>\n          0 8 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 8 12 -1.</_>\n        <_>\n          19 0 4 6 2.</_>\n        <_>\n          15 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 8 12 -1.</_>\n        <_>\n          1 0 4 6 2.</_>\n        <_>\n          5 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 16 -1.</_>\n        <_>\n          16 5 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 6 16 -1.</_>\n        <_>\n          6 5 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 6 16 -1.</_>\n        <_>\n          17 0 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 16 -1.</_>\n        <_>\n          5 0 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 24 3 -1.</_>\n        <_>\n          0 3 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 10 4 -1.</_>\n        <_>\n          7 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 23 8 -1.</_>\n        <_>\n          1 4 23 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 19 3 -1.</_>\n        <_>\n          1 18 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 18 2 -1.</_>\n        <_>\n          6 19 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 9 6 -1.</_>\n        <_>\n          1 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 6 9 -1.</_>\n        <_>\n          15 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 6 9 -1.</_>\n        <_>\n          3 18 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 20 6 -1.</_>\n        <_>\n          4 17 20 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 6 14 -1.</_>\n        <_>\n          0 10 3 7 2.</_>\n        <_>\n          3 17 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 18 3 -1.</_>\n        <_>\n          6 19 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 9 7 -1.</_>\n        <_>\n          7 12 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 18 5 -1.</_>\n        <_>\n          12 10 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 18 5 -1.</_>\n        <_>\n          6 10 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 18 9 -1.</_>\n        <_>\n          9 2 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 10 -1.</_>\n        <_>\n          4 6 5 5 2.</_>\n        <_>\n          9 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 14 4 9 -1.</_>\n        <_>\n          20 14 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 4 9 -1.</_>\n        <_>\n          2 14 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 20 -1.</_>\n        <_>\n          13 1 2 10 2.</_>\n        <_>\n          11 11 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 21 12 3 -1.</_>\n        <_>\n          12 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 20 -1.</_>\n        <_>\n          13 1 2 10 2.</_>\n        <_>\n          11 11 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 10 8 -1.</_>\n        <_>\n          1 16 5 4 2.</_>\n        <_>\n          6 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 20 -1.</_>\n        <_>\n          13 1 2 10 2.</_>\n        <_>\n          11 11 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 3 19 -1.</_>\n        <_>\n          2 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 20 -1.</_>\n        <_>\n          13 1 2 10 2.</_>\n        <_>\n          11 11 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 9 -1.</_>\n        <_>\n          2 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 19 4 -1.</_>\n        <_>\n          3 9 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 9 6 -1.</_>\n        <_>\n          7 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 1 7 6 -1.</_>\n        <_>\n          17 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 14 8 -1.</_>\n        <_>\n          5 4 14 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 8 6 -1.</_>\n        <_>\n          16 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 6 -1.</_>\n        <_>\n          0 4 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 18 4 -1.</_>\n        <_>\n          15 0 9 2 2.</_>\n        <_>\n          6 2 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 6 -1.</_>\n        <_>\n          0 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 18 8 -1.</_>\n        <_>\n          9 7 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 6 9 -1.</_>\n        <_>\n          4 11 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 6 9 -1.</_>\n        <_>\n          12 5 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 18 -1.</_>\n        <_>\n          10 6 2 9 2.</_>\n        <_>\n          12 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 4 20 -1.</_>\n        <_>\n          13 1 2 10 2.</_>\n        <_>\n          11 11 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 20 -1.</_>\n        <_>\n          9 1 2 10 2.</_>\n        <_>\n          11 11 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 18 6 -1.</_>\n        <_>\n          14 9 9 3 2.</_>\n        <_>\n          5 12 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 9 -1.</_>\n        <_>\n          8 4 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 8 6 -1.</_>\n        <_>\n          10 16 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 8 -1.</_>\n        <_>\n          0 0 9 4 2.</_>\n        <_>\n          9 4 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 14 12 -1.</_>\n        <_>\n          13 5 7 6 2.</_>\n        <_>\n          6 11 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 15 7 -1.</_>\n        <_>\n          9 3 5 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 10 6 -1.</_>\n        <_>\n          14 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 4 10 -1.</_>\n        <_>\n          0 16 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 22 3 -1.</_>\n        <_>\n          1 11 22 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 10 -1.</_>\n        <_>\n          10 9 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 12 -1.</_>\n        <_>\n          16 2 3 6 2.</_>\n        <_>\n          13 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 18 -1.</_>\n        <_>\n          10 6 2 9 2.</_>\n        <_>\n          12 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 16 -1.</_>\n        <_>\n          12 8 5 8 2.</_>\n        <_>\n          7 16 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 8 12 -1.</_>\n        <_>\n          8 1 4 6 2.</_>\n        <_>\n          12 7 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 12 14 -1.</_>\n        <_>\n          13 1 6 7 2.</_>\n        <_>\n          7 8 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 12 6 -1.</_>\n        <_>\n          2 16 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 6 6 -1.</_>\n        <_>\n          11 19 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 6 6 -1.</_>\n        <_>\n          7 19 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 4 10 -1.</_>\n        <_>\n          13 4 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 19 19 3 -1.</_>\n        <_>\n          0 20 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 6 8 -1.</_>\n        <_>\n          12 12 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 8 22 -1.</_>\n        <_>\n          8 12 8 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 6 8 -1.</_>\n        <_>\n          12 12 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 8 -1.</_>\n        <_>\n          6 12 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 9 -1.</_>\n        <_>\n          14 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 24 4 -1.</_>\n        <_>\n          0 8 24 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 10 6 -1.</_>\n        <_>\n          14 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 10 6 -1.</_>\n        <_>\n          0 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 19 3 -1.</_>\n        <_>\n          4 7 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 19 3 -1.</_>\n        <_>\n          1 7 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 9 -1.</_>\n        <_>\n          4 3 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 5 -1.</_>\n        <_>\n          8 1 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 15 -1.</_>\n        <_>\n          3 11 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 22 18 2 -1.</_>\n        <_>\n          6 23 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 6 9 -1.</_>\n        <_>\n          2 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 12 6 9 -1.</_>\n        <_>\n          18 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 9 -1.</_>\n        <_>\n          0 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 4 10 -1.</_>\n        <_>\n          11 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 16 -1.</_>\n        <_>\n          9 14 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 10 10 -1.</_>\n        <_>\n          7 12 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 13 -1.</_>\n        <_>\n          3 3 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 6 13 -1.</_>\n        <_>\n          18 1 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 9 -1.</_>\n        <_>\n          7 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 6 11 -1.</_>\n        <_>\n          18 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 11 -1.</_>\n        <_>\n          3 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 15 6 -1.</_>\n        <_>\n          9 14 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 20 3 -1.</_>\n        <_>\n          2 3 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 9 -1.</_>\n        <_>\n          10 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 14 -1.</_>\n        <_>\n          5 6 6 7 2.</_>\n        <_>\n          11 13 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 9 -1.</_>\n        <_>\n          11 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 9 6 -1.</_>\n        <_>\n          10 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 9 -1.</_>\n        <_>\n          12 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 20 -1.</_>\n        <_>\n          4 1 6 10 2.</_>\n        <_>\n          10 11 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 18 3 -1.</_>\n        <_>\n          6 7 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 18 3 -1.</_>\n        <_>\n          9 7 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 20 18 3 -1.</_>\n        <_>\n          9 20 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 12 15 -1.</_>\n        <_>\n          10 2 4 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 18 3 -1.</_>\n        <_>\n          2 4 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 4 4 18 -1.</_>\n        <_>\n          21 4 2 9 2.</_>\n        <_>\n          19 13 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 19 3 -1.</_>\n        <_>\n          0 2 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 15 4 -1.</_>\n        <_>\n          5 2 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 14 5 -1.</_>\n        <_>\n          12 2 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 22 14 -1.</_>\n        <_>\n          1 2 11 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 6 9 -1.</_>\n        <_>\n          10 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 18 3 -1.</_>\n        <_>\n          6 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 18 -1.</_>\n        <_>\n          9 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 20 3 -1.</_>\n        <_>\n          2 1 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 5 12 -1.</_>\n        <_>\n          5 8 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 12 5 -1.</_>\n        <_>\n          12 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 12 -1.</_>\n        <_>\n          9 12 3 6 2.</_>\n        <_>\n          12 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 8 10 -1.</_>\n        <_>\n          18 14 4 5 2.</_>\n        <_>\n          14 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 8 10 -1.</_>\n        <_>\n          2 14 4 5 2.</_>\n        <_>\n          6 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 12 6 -1.</_>\n        <_>\n          16 18 6 3 2.</_>\n        <_>\n          10 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 9 -1.</_>\n        <_>\n          1 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 20 -1.</_>\n        <_>\n          12 3 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 14 6 -1.</_>\n        <_>\n          4 6 7 3 2.</_>\n        <_>\n          11 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 13 -1.</_>\n        <_>\n          10 5 4 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 4 15 -1.</_>\n        <_>\n          5 9 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 15 4 -1.</_>\n        <_>\n          14 16 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 14 -1.</_>\n        <_>\n          7 8 3 7 2.</_>\n        <_>\n          10 15 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 6 -1.</_>\n        <_>\n          7 8 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 3 -1.</_>\n        <_>\n          2 6 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 15 8 -1.</_>\n        <_>\n          5 5 15 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 8 18 -1.</_>\n        <_>\n          7 10 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 24 3 -1.</_>\n        <_>\n          0 11 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 13 -1.</_>\n        <_>\n          2 2 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 8 10 -1.</_>\n        <_>\n          20 0 4 5 2.</_>\n        <_>\n          16 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 10 9 -1.</_>\n        <_>\n          5 4 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 18 3 -1.</_>\n        <_>\n          5 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 3 -1.</_>\n        <_>\n          0 2 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 6 11 -1.</_>\n        <_>\n          13 4 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 10 -1.</_>\n        <_>\n          0 0 4 5 2.</_>\n        <_>\n          4 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 18 3 -1.</_>\n        <_>\n          4 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 18 3 -1.</_>\n        <_>\n          2 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 18 10 -1.</_>\n        <_>\n          12 0 9 5 2.</_>\n        <_>\n          3 5 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 20 21 -1.</_>\n        <_>\n          12 3 10 21 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 3 -1.</_>\n        <_>\n          6 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 12 6 -1.</_>\n        <_>\n          0 9 6 3 2.</_>\n        <_>\n          6 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 21 4 -1.</_>\n        <_>\n          10 14 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 21 4 -1.</_>\n        <_>\n          7 14 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 21 18 3 -1.</_>\n        <_>\n          11 21 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 21 18 3 -1.</_>\n        <_>\n          7 21 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 4 4 18 -1.</_>\n        <_>\n          21 4 2 9 2.</_>\n        <_>\n          19 13 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 18 3 -1.</_>\n        <_>\n          3 8 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 4 4 18 -1.</_>\n        <_>\n          21 4 2 9 2.</_>\n        <_>\n          19 13 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 10 6 -1.</_>\n        <_>\n          7 17 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 11 9 -1.</_>\n        <_>\n          9 16 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 4 10 -1.</_>\n        <_>\n          0 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 16 9 6 -1.</_>\n        <_>\n          15 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 4 18 -1.</_>\n        <_>\n          1 5 2 9 2.</_>\n        <_>\n          3 14 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 8 10 -1.</_>\n        <_>\n          13 8 4 5 2.</_>\n        <_>\n          9 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 8 10 -1.</_>\n        <_>\n          7 8 4 5 2.</_>\n        <_>\n          11 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 12 5 -1.</_>\n        <_>\n          13 8 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 7 -1.</_>\n        <_>\n          10 8 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 12 5 -1.</_>\n        <_>\n          13 8 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 7 -1.</_>\n        <_>\n          10 6 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 12 5 -1.</_>\n        <_>\n          13 8 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 18 -1.</_>\n        <_>\n          10 11 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 14 12 -1.</_>\n        <_>\n          5 11 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 11 4 -1.</_>\n        <_>\n          0 3 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 10 -1.</_>\n        <_>\n          11 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 17 11 6 -1.</_>\n        <_>\n          2 19 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 16 9 6 -1.</_>\n        <_>\n          15 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 18 2 -1.</_>\n        <_>\n          1 11 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 13 -1.</_>\n        <_>\n          10 4 4 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 18 3 -1.</_>\n        <_>\n          0 19 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 18 3 -1.</_>\n        <_>\n          6 19 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 9 6 -1.</_>\n        <_>\n          0 18 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 15 9 6 -1.</_>\n        <_>\n          13 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 9 6 -1.</_>\n        <_>\n          2 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 6 16 -1.</_>\n        <_>\n          13 1 3 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 16 -1.</_>\n        <_>\n          8 1 3 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 6 10 -1.</_>\n        <_>\n          13 5 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 10 -1.</_>\n        <_>\n          9 5 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 24 -1.</_>\n        <_>\n          12 0 2 24 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 4 20 -1.</_>\n        <_>\n          3 4 2 10 2.</_>\n        <_>\n          5 14 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 9 -1.</_>\n        <_>\n          16 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 6 9 -1.</_>\n        <_>\n          6 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 18 5 -1.</_>\n        <_>\n          10 5 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 9 -1.</_>\n        <_>\n          7 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 15 8 -1.</_>\n        <_>\n          12 2 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 8 -1.</_>\n        <_>\n          7 2 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 9 -1.</_>\n        <_>\n          10 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 12 -1.</_>\n        <_>\n          3 4 3 6 2.</_>\n        <_>\n          6 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 8 18 -1.</_>\n        <_>\n          16 0 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 18 -1.</_>\n        <_>\n          4 0 4 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 24 6 -1.</_>\n        <_>\n          0 9 24 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 14 3 -1.</_>\n        <_>\n          11 7 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 8 15 -1.</_>\n        <_>\n          10 8 4 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 10 14 -1.</_>\n        <_>\n          12 0 5 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 8 10 -1.</_>\n        <_>\n          17 10 4 5 2.</_>\n        <_>\n          13 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 4 9 -1.</_>\n        <_>\n          5 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 6 8 -1.</_>\n        <_>\n          16 1 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 6 8 -1.</_>\n        <_>\n          5 1 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 12 -1.</_>\n        <_>\n          3 10 18 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 16 4 -1.</_>\n        <_>\n          4 14 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 16 15 -1.</_>\n        <_>\n          4 14 16 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 8 10 -1.</_>\n        <_>\n          3 10 4 5 2.</_>\n        <_>\n          7 15 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 16 6 -1.</_>\n        <_>\n          16 18 8 3 2.</_>\n        <_>\n          8 21 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 12 5 -1.</_>\n        <_>\n          6 16 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 9 4 -1.</_>\n        <_>\n          14 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 9 6 -1.</_>\n        <_>\n          7 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 16 12 -1.</_>\n        <_>\n          4 14 16 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 19 6 -1.</_>\n        <_>\n          0 15 19 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 9 6 -1.</_>\n        <_>\n          10 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 23 -1.</_>\n        <_>\n          6 0 1 23 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 24 6 -1.</_>\n        <_>\n          0 10 24 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 5 12 -1.</_>\n        <_>\n          0 9 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 19 18 -1.</_>\n        <_>\n          3 9 19 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 12 -1.</_>\n        <_>\n          9 11 3 6 2.</_>\n        <_>\n          12 17 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 24 8 -1.</_>\n        <_>\n          12 5 12 4 2.</_>\n        <_>\n          0 9 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 18 9 4 -1.</_>\n        <_>\n          6 20 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 10 6 -1.</_>\n        <_>\n          8 10 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 20 3 -1.</_>\n        <_>\n          2 8 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 7 20 -1.</_>\n        <_>\n          12 10 7 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 7 20 -1.</_>\n        <_>\n          5 10 7 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 2 18 -1.</_>\n        <_>\n          14 11 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 12 -1.</_>\n        <_>\n          10 8 5 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 12 8 -1.</_>\n        <_>\n          12 9 6 4 2.</_>\n        <_>\n          6 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 14 -1.</_>\n        <_>\n          7 14 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 12 16 -1.</_>\n        <_>\n          17 2 6 8 2.</_>\n        <_>\n          11 10 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 9 -1.</_>\n        <_>\n          9 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 9 4 -1.</_>\n        <_>\n          13 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 22 4 -1.</_>\n        <_>\n          0 12 11 2 2.</_>\n        <_>\n          11 14 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 22 6 -1.</_>\n        <_>\n          12 12 11 3 2.</_>\n        <_>\n          1 15 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 6 -1.</_>\n        <_>\n          9 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 4 9 -1.</_>\n        <_>\n          10 0 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 18 7 -1.</_>\n        <_>\n          9 8 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 24 6 -1.</_>\n        <_>\n          0 8 24 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 24 10 -1.</_>\n        <_>\n          8 11 8 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 18 21 -1.</_>\n        <_>\n          9 3 6 21 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 4 10 -1.</_>\n        <_>\n          9 12 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 10 8 -1.</_>\n        <_>\n          15 16 5 4 2.</_>\n        <_>\n          10 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 9 -1.</_>\n        <_>\n          10 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 6 12 -1.</_>\n        <_>\n          15 10 3 6 2.</_>\n        <_>\n          12 16 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 6 12 -1.</_>\n        <_>\n          6 10 3 6 2.</_>\n        <_>\n          9 16 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 6 12 -1.</_>\n        <_>\n          19 12 3 6 2.</_>\n        <_>\n          16 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 6 12 -1.</_>\n        <_>\n          2 12 3 6 2.</_>\n        <_>\n          5 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 9 -1.</_>\n        <_>\n          12 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 6 9 -1.</_>\n        <_>\n          10 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 20 10 4 -1.</_>\n        <_>\n          14 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 20 10 4 -1.</_>\n        <_>\n          5 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 17 9 6 -1.</_>\n        <_>\n          11 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 4 -1.</_>\n        <_>\n          3 4 14 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 10 4 -1.</_>\n        <_>\n          10 3 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 10 4 -1.</_>\n        <_>\n          5 15 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 2 3 19 -1.</_>\n        <_>\n          20 2 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 9 8 -1.</_>\n        <_>\n          7 12 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 5 12 -1.</_>\n        <_>\n          4 11 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 3 -1.</_>\n        <_>\n          8 1 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 4 -1.</_>\n        <_>\n          6 10 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 3 4 10 -1.</_>\n        <_>\n          19 3 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 9 6 -1.</_>\n        <_>\n          3 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 6 22 -1.</_>\n        <_>\n          20 0 2 22 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 22 -1.</_>\n        <_>\n          2 0 2 22 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 19 3 -1.</_>\n        <_>\n          5 16 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 4 15 -1.</_>\n        <_>\n          10 12 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 21 18 3 -1.</_>\n        <_>\n          0 22 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 10 15 -1.</_>\n        <_>\n          7 8 10 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 18 3 -1.</_>\n        <_>\n          1 8 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 9 6 -1.</_>\n        <_>\n          11 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 24 14 -1.</_>\n        <_>\n          0 17 24 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 8 10 -1.</_>\n        <_>\n          17 9 4 5 2.</_>\n        <_>\n          13 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 4 9 -1.</_>\n        <_>\n          12 5 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 8 10 -1.</_>\n        <_>\n          17 9 4 5 2.</_>\n        <_>\n          13 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 10 10 -1.</_>\n        <_>\n          7 11 5 5 2.</_>\n        <_>\n          12 16 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 18 4 -1.</_>\n        <_>\n          13 13 9 2 2.</_>\n        <_>\n          4 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 19 2 -1.</_>\n        <_>\n          0 1 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 24 6 -1.</_>\n        <_>\n          8 18 8 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 8 16 -1.</_>\n        <_>\n          6 12 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 4 -1.</_>\n        <_>\n          7 10 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 9 -1.</_>\n        <_>\n          0 6 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 15 7 9 -1.</_>\n        <_>\n          13 18 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 12 6 -1.</_>\n        <_>\n          3 18 6 3 2.</_>\n        <_>\n          9 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 6 9 -1.</_>\n        <_>\n          12 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 15 8 -1.</_>\n        <_>\n          2 19 15 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 16 -1.</_>\n        <_>\n          9 14 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 7 12 -1.</_>\n        <_>\n          6 10 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 9 -1.</_>\n        <_>\n          14 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 6 9 -1.</_>\n        <_>\n          5 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 9 -1.</_>\n        <_>\n          12 8 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 18 -1.</_>\n        <_>\n          6 6 2 9 2.</_>\n        <_>\n          8 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 12 -1.</_>\n        <_>\n          17 9 3 6 2.</_>\n        <_>\n          14 15 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 12 -1.</_>\n        <_>\n          4 9 3 6 2.</_>\n        <_>\n          7 15 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 9 6 -1.</_>\n        <_>\n          14 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 20 18 4 -1.</_>\n        <_>\n          0 20 9 2 2.</_>\n        <_>\n          9 22 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 18 9 6 -1.</_>\n        <_>\n          13 20 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 9 6 -1.</_>\n        <_>\n          2 20 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 18 3 -1.</_>\n        <_>\n          6 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 3 -1.</_>\n        <_>\n          0 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 2 4 22 -1.</_>\n        <_>\n          21 2 2 11 2.</_>\n        <_>\n          19 13 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 4 22 -1.</_>\n        <_>\n          1 2 2 11 2.</_>\n        <_>\n          3 13 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 2 24 -1.</_>\n        <_>\n          15 0 1 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 20 16 4 -1.</_>\n        <_>\n          11 20 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 18 -1.</_>\n        <_>\n          13 6 2 9 2.</_>\n        <_>\n          11 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 10 14 -1.</_>\n        <_>\n          7 9 5 7 2.</_>\n        <_>\n          12 16 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 9 -1.</_>\n        <_>\n          14 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 7 9 -1.</_>\n        <_>\n          3 9 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 4 4 20 -1.</_>\n        <_>\n          22 4 2 10 2.</_>\n        <_>\n          20 14 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 9 -1.</_>\n        <_>\n          7 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 10 14 -1.</_>\n        <_>\n          12 0 5 7 2.</_>\n        <_>\n          7 7 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 18 6 -1.</_>\n        <_>\n          11 1 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 2 24 -1.</_>\n        <_>\n          15 0 1 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 24 -1.</_>\n        <_>\n          8 0 1 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 6 7 -1.</_>\n        <_>\n          13 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 7 -1.</_>\n        <_>\n          8 12 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 18 19 -1.</_>\n        <_>\n          9 5 6 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 9 6 -1.</_>\n        <_>\n          8 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 9 6 -1.</_>\n        <_>\n          12 5 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 10 8 -1.</_>\n        <_>\n          3 16 5 4 2.</_>\n        <_>\n          8 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 8 5 15 -1.</_>\n        <_>\n          19 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 5 15 -1.</_>\n        <_>\n          0 13 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 4 4 20 -1.</_>\n        <_>\n          22 4 2 10 2.</_>\n        <_>\n          20 14 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 4 20 -1.</_>\n        <_>\n          0 4 2 10 2.</_>\n        <_>\n          2 14 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 10 4 -1.</_>\n        <_>\n          7 7 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 19 14 4 -1.</_>\n        <_>\n          11 19 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 12 3 -1.</_>\n        <_>\n          10 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 3 -1.</_>\n        <_>\n          0 2 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 14 20 -1.</_>\n        <_>\n          14 2 7 10 2.</_>\n        <_>\n          7 12 7 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 6 9 -1.</_>\n        <_>\n          2 13 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 19 -1.</_>\n        <_>\n          13 0 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 14 3 -1.</_>\n        <_>\n          8 11 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 16 20 -1.</_>\n        <_>\n          15 1 8 10 2.</_>\n        <_>\n          7 11 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 21 9 -1.</_>\n        <_>\n          7 10 7 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 19 15 5 -1.</_>\n        <_>\n          11 19 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 6 6 -1.</_>\n        <_>\n          11 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 16 20 -1.</_>\n        <_>\n          15 1 8 10 2.</_>\n        <_>\n          7 11 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 16 20 -1.</_>\n        <_>\n          1 1 8 10 2.</_>\n        <_>\n          9 11 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 3 12 -1.</_>\n        <_>\n          16 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 3 12 -1.</_>\n        <_>\n          5 10 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 8 -1.</_>\n        <_>\n          12 6 5 4 2.</_>\n        <_>\n          7 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 6 -1.</_>\n        <_>\n          4 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 4 -1.</_>\n        <_>\n          6 7 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 5 15 -1.</_>\n        <_>\n          9 7 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 9 6 -1.</_>\n        <_>\n          15 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 11 10 -1.</_>\n        <_>\n          6 5 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 12 -1.</_>\n        <_>\n          12 13 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 9 4 -1.</_>\n        <_>\n          7 4 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 13 6 -1.</_>\n        <_>\n          6 2 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 18 -1.</_>\n        <_>\n          10 6 2 9 2.</_>\n        <_>\n          12 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 9 -1.</_>\n        <_>\n          12 8 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 10 6 -1.</_>\n        <_>\n          3 20 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 20 3 -1.</_>\n        <_>\n          4 15 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 9 6 -1.</_>\n        <_>\n          2 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 19 -1.</_>\n        <_>\n          13 0 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 19 -1.</_>\n        <_>\n          9 0 2 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 22 2 -1.</_>\n        <_>\n          1 5 22 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 9 6 -1.</_>\n        <_>\n          0 2 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 24 18 -1.</_>\n        <_>\n          0 9 24 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 16 8 -1.</_>\n        <_>\n          3 6 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 18 6 -1.</_>\n        <_>\n          3 8 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 10 -1.</_>\n        <_>\n          5 1 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 9 6 -1.</_>\n        <_>\n          16 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 6 -1.</_>\n        <_>\n          5 0 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 15 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 7 10 -1.</_>\n        <_>\n          6 5 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 20 4 -1.</_>\n        <_>\n          12 2 10 2 2.</_>\n        <_>\n          2 4 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 19 3 -1.</_>\n        <_>\n          2 12 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 9 -1.</_>\n        <_>\n          12 8 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 9 -1.</_>\n        <_>\n          10 8 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 4 9 -1.</_>\n        <_>\n          13 8 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 9 9 -1.</_>\n        <_>\n          6 11 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 18 5 -1.</_>\n        <_>\n          9 9 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 2 20 -1.</_>\n        <_>\n          2 14 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 17 8 6 -1.</_>\n        <_>\n          14 20 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 18 2 -1.</_>\n        <_>\n          3 22 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 15 6 -1.</_>\n        <_>\n          10 4 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 12 6 -1.</_>\n        <_>\n          2 17 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 8 6 9 -1.</_>\n        <_>\n          17 11 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 20 4 -1.</_>\n        <_>\n          2 12 10 2 2.</_>\n        <_>\n          12 14 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 24 6 -1.</_>\n        <_>\n          0 19 24 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 9 4 -1.</_>\n        <_>\n          7 18 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 4 22 -1.</_>\n        <_>\n          17 1 2 11 2.</_>\n        <_>\n          15 12 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 22 -1.</_>\n        <_>\n          5 1 2 11 2.</_>\n        <_>\n          7 12 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 8 9 -1.</_>\n        <_>\n          11 16 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 6 9 -1.</_>\n        <_>\n          8 1 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 18 -1.</_>\n        <_>\n          11 10 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 12 6 -1.</_>\n        <_>\n          5 8 6 3 2.</_>\n        <_>\n          11 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 5 8 -1.</_>\n        <_>\n          15 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 5 8 -1.</_>\n        <_>\n          4 11 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 6 12 -1.</_>\n        <_>\n          15 6 3 6 2.</_>\n        <_>\n          12 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 12 -1.</_>\n        <_>\n          6 6 3 6 2.</_>\n        <_>\n          9 12 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 14 8 -1.</_>\n        <_>\n          12 9 7 4 2.</_>\n        <_>\n          5 13 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 14 -1.</_>\n        <_>\n          9 8 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 6 12 -1.</_>\n        <_>\n          12 10 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 18 -1.</_>\n        <_>\n          4 5 2 9 2.</_>\n        <_>\n          6 14 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 16 18 -1.</_>\n        <_>\n          4 12 16 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 7 20 -1.</_>\n        <_>\n          5 14 7 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 8 12 -1.</_>\n        <_>\n          14 14 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 14 -1.</_>\n        <_>\n          9 10 3 7 2.</_>\n        <_>\n          12 17 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 9 6 -1.</_>\n        <_>\n          12 5 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 18 -1.</_>\n        <_>\n          10 4 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 22 14 -1.</_>\n        <_>\n          12 4 11 7 2.</_>\n        <_>\n          1 11 11 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 18 2 -1.</_>\n        <_>\n          2 8 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 6 12 -1.</_>\n        <_>\n          12 10 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 7 -1.</_>\n        <_>\n          9 5 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 12 -1.</_>\n        <_>\n          12 13 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 12 -1.</_>\n        <_>\n          8 13 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 10 22 -1.</_>\n        <_>\n          7 13 10 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 3 20 -1.</_>\n        <_>\n          1 1 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 18 4 -1.</_>\n        <_>\n          13 13 9 2 2.</_>\n        <_>\n          4 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 4 -1.</_>\n        <_>\n          2 13 9 2 2.</_>\n        <_>\n          11 15 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 9 6 -1.</_>\n        <_>\n          15 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 6 -1.</_>\n        <_>\n          0 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 18 24 -1.</_>\n        <_>\n          15 0 9 12 2.</_>\n        <_>\n          6 12 9 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 12 -1.</_>\n        <_>\n          6 10 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 10 4 -1.</_>\n        <_>\n          8 9 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 18 6 -1.</_>\n        <_>\n          1 9 9 3 2.</_>\n        <_>\n          10 12 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 18 3 -1.</_>\n        <_>\n          6 7 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 9 8 -1.</_>\n        <_>\n          10 7 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 6 12 -1.</_>\n        <_>\n          12 12 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 18 3 -1.</_>\n        <_>\n          3 15 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 7 -1.</_>\n        <_>\n          18 17 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 10 6 -1.</_>\n        <_>\n          1 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 7 -1.</_>\n        <_>\n          18 17 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 3 19 -1.</_>\n        <_>\n          11 3 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 7 -1.</_>\n        <_>\n          18 17 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 11 9 -1.</_>\n        <_>\n          6 4 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 7 -1.</_>\n        <_>\n          18 17 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 11 6 -1.</_>\n        <_>\n          6 8 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 8 5 -1.</_>\n        <_>\n          16 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 20 19 -1.</_>\n        <_>\n          12 4 10 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 21 6 -1.</_>\n        <_>\n          9 1 7 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 14 -1.</_>\n        <_>\n          6 5 6 7 2.</_>\n        <_>\n          12 12 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 9 -1.</_>\n        <_>\n          11 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 8 5 -1.</_>\n        <_>\n          6 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 8 5 -1.</_>\n        <_>\n          16 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 5 -1.</_>\n        <_>\n          4 7 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 7 -1.</_>\n        <_>\n          18 17 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 10 -1.</_>\n        <_>\n          8 6 4 5 2.</_>\n        <_>\n          12 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 9 9 -1.</_>\n        <_>\n          18 15 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 9 9 -1.</_>\n        <_>\n          3 15 3 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 9 7 -1.</_>\n        <_>\n          15 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 9 7 -1.</_>\n        <_>\n          6 10 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 15 10 8 -1.</_>\n        <_>\n          18 15 5 4 2.</_>\n        <_>\n          13 19 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 12 -1.</_>\n        <_>\n          0 1 3 6 2.</_>\n        <_>\n          3 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 12 -1.</_>\n        <_>\n          13 0 3 6 2.</_>\n        <_>\n          10 6 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 10 12 -1.</_>\n        <_>\n          7 0 5 6 2.</_>\n        <_>\n          12 6 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 16 8 -1.</_>\n        <_>\n          4 1 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 21 19 3 -1.</_>\n        <_>\n          0 22 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 18 4 -1.</_>\n        <_>\n          15 9 9 2 2.</_>\n        <_>\n          6 11 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 9 6 -1.</_>\n        <_>\n          3 6 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 15 -1.</_>\n        <_>\n          9 6 6 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 6 -1.</_>\n        <_>\n          8 9 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 14 9 -1.</_>\n        <_>\n          5 4 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 8 20 -1.</_>\n        <_>\n          3 0 4 10 2.</_>\n        <_>\n          7 10 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 7 9 -1.</_>\n        <_>\n          5 3 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 12 5 -1.</_>\n        <_>\n          10 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 14 -1.</_>\n        <_>\n          4 1 4 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 22 4 -1.</_>\n        <_>\n          2 14 22 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 6 6 -1.</_>\n        <_>\n          8 20 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 6 7 -1.</_>\n        <_>\n          18 1 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 6 -1.</_>\n        <_>\n          3 0 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 17 18 -1.</_>\n        <_>\n          4 12 17 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 6 -1.</_>\n        <_>\n          6 0 6 3 2.</_>\n        <_>\n          12 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 18 4 -1.</_>\n        <_>\n          13 7 9 2 2.</_>\n        <_>\n          4 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 10 6 -1.</_>\n        <_>\n          4 14 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 10 12 -1.</_>\n        <_>\n          12 9 5 6 2.</_>\n        <_>\n          7 15 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 3 -1.</_>\n        <_>\n          8 1 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 6 6 -1.</_>\n        <_>\n          13 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 6 -1.</_>\n        <_>\n          8 11 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 19 3 -1.</_>\n        <_>\n          3 11 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 9 -1.</_>\n        <_>\n          0 5 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 16 10 6 -1.</_>\n        <_>\n          14 18 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 10 6 -1.</_>\n        <_>\n          0 18 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 9 6 -1.</_>\n        <_>\n          14 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 3 -1.</_>\n        <_>\n          0 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 18 3 -1.</_>\n        <_>\n          6 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 9 6 -1.</_>\n        <_>\n          0 20 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 9 6 -1.</_>\n        <_>\n          14 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 6 9 -1.</_>\n        <_>\n          8 2 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 4 12 -1.</_>\n        <_>\n          15 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 8 8 -1.</_>\n        <_>\n          8 17 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 20 18 3 -1.</_>\n        <_>\n          10 20 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 12 -1.</_>\n        <_>\n          7 8 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 12 3 -1.</_>\n        <_>\n          7 7 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 9 -1.</_>\n        <_>\n          12 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 20 18 3 -1.</_>\n        <_>\n          11 20 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 20 18 3 -1.</_>\n        <_>\n          7 20 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 6 20 -1.</_>\n        <_>\n          21 1 3 10 2.</_>\n        <_>\n          18 11 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 20 -1.</_>\n        <_>\n          0 1 3 10 2.</_>\n        <_>\n          3 11 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 4 18 -1.</_>\n        <_>\n          15 3 2 9 2.</_>\n        <_>\n          13 12 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 12 -1.</_>\n        <_>\n          0 6 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 12 6 -1.</_>\n        <_>\n          18 9 6 3 2.</_>\n        <_>\n          12 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 4 18 -1.</_>\n        <_>\n          7 3 2 9 2.</_>\n        <_>\n          9 12 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 9 -1.</_>\n        <_>\n          16 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 12 6 -1.</_>\n        <_>\n          0 9 6 3 2.</_>\n        <_>\n          6 12 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 8 20 -1.</_>\n        <_>\n          18 4 4 10 2.</_>\n        <_>\n          14 14 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 8 20 -1.</_>\n        <_>\n          2 4 4 10 2.</_>\n        <_>\n          6 14 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 9 6 -1.</_>\n        <_>\n          14 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 9 6 -1.</_>\n        <_>\n          1 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 18 3 -1.</_>\n        <_>\n          9 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 9 6 -1.</_>\n        <_>\n          5 15 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 18 3 -1.</_>\n        <_>\n          5 1 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 6 7 -1.</_>\n        <_>\n          11 2 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 9 6 -1.</_>\n        <_>\n          12 1 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 9 6 -1.</_>\n        <_>\n          9 1 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 14 6 -1.</_>\n        <_>\n          12 6 7 3 2.</_>\n        <_>\n          5 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 6 13 -1.</_>\n        <_>\n          10 2 2 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 12 6 -1.</_>\n        <_>\n          12 11 6 3 2.</_>\n        <_>\n          6 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 18 15 -1.</_>\n        <_>\n          9 1 6 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 7 -1.</_>\n        <_>\n          13 0 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 16 6 -1.</_>\n        <_>\n          3 6 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 3 12 -1.</_>\n        <_>\n          12 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 9 -1.</_>\n        <_>\n          9 7 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 24 -1.</_>\n        <_>\n          13 0 2 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 24 -1.</_>\n        <_>\n          9 0 2 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 5 12 -1.</_>\n        <_>\n          11 13 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 9 6 -1.</_>\n        <_>\n          7 17 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 18 6 -1.</_>\n        <_>\n          5 9 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 5 12 -1.</_>\n        <_>\n          8 13 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 17 17 6 -1.</_>\n        <_>\n          4 19 17 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 18 14 -1.</_>\n        <_>\n          0 3 9 7 2.</_>\n        <_>\n          9 10 9 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 24 2 -1.</_>\n        <_>\n          0 2 24 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 18 3 -1.</_>\n        <_>\n          0 16 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 9 -1.</_>\n        <_>\n          11 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 14 12 -1.</_>\n        <_>\n          3 9 14 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 3 12 -1.</_>\n        <_>\n          12 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 9 -1.</_>\n        <_>\n          10 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 10 -1.</_>\n        <_>\n          12 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 6 9 -1.</_>\n        <_>\n          7 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 21 7 -1.</_>\n        <_>\n          9 0 7 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 12 5 -1.</_>\n        <_>\n          10 11 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 8 -1.</_>\n        <_>\n          11 7 3 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 18 -1.</_>\n        <_>\n          9 6 3 9 2.</_>\n        <_>\n          12 15 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 8 10 -1.</_>\n        <_>\n          19 14 4 5 2.</_>\n        <_>\n          15 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 8 10 -1.</_>\n        <_>\n          1 14 4 5 2.</_>\n        <_>\n          5 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 10 -1.</_>\n        <_>\n          15 0 4 5 2.</_>\n        <_>\n          11 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 10 -1.</_>\n        <_>\n          5 0 4 5 2.</_>\n        <_>\n          9 5 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 12 5 -1.</_>\n        <_>\n          6 1 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 18 2 -1.</_>\n        <_>\n          10 12 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 20 6 -1.</_>\n        <_>\n          12 8 10 3 2.</_>\n        <_>\n          2 11 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 7 -1.</_>\n        <_>\n          10 6 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 16 -1.</_>\n        <_>\n          14 5 4 8 2.</_>\n        <_>\n          10 13 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 16 8 -1.</_>\n        <_>\n          3 9 8 4 2.</_>\n        <_>\n          11 13 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 10 4 -1.</_>\n        <_>\n          7 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 10 8 -1.</_>\n        <_>\n          7 12 5 4 2.</_>\n        <_>\n          12 16 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 19 15 4 -1.</_>\n        <_>\n          14 19 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 9 -1.</_>\n        <_>\n          7 0 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 10 8 -1.</_>\n        <_>\n          18 4 5 4 2.</_>\n        <_>\n          13 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 18 4 -1.</_>\n        <_>\n          9 16 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 10 12 -1.</_>\n        <_>\n          13 7 5 6 2.</_>\n        <_>\n          8 13 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 10 12 -1.</_>\n        <_>\n          6 7 5 6 2.</_>\n        <_>\n          11 13 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 18 7 -1.</_>\n        <_>\n          10 6 6 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 18 3 -1.</_>\n        <_>\n          0 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 18 3 -1.</_>\n        <_>\n          3 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 10 -1.</_>\n        <_>\n          4 4 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 8 24 -1.</_>\n        <_>\n          16 0 4 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 15 -1.</_>\n        <_>\n          8 0 4 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 8 24 -1.</_>\n        <_>\n          16 0 4 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 18 9 -1.</_>\n        <_>\n          7 4 6 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 9 6 -1.</_>\n        <_>\n          15 14 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 18 6 -1.</_>\n        <_>\n          3 9 9 3 2.</_>\n        <_>\n          12 12 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 6 9 -1.</_>\n        <_>\n          18 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 9 -1.</_>\n        <_>\n          0 8 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 18 4 -1.</_>\n        <_>\n          13 7 9 2 2.</_>\n        <_>\n          4 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 12 20 -1.</_>\n        <_>\n          2 1 6 10 2.</_>\n        <_>\n          8 11 6 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 6 23 -1.</_>\n        <_>\n          17 0 3 23 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 2 18 -1.</_>\n        <_>\n          1 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 10 6 -1.</_>\n        <_>\n          8 10 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 6 -1.</_>\n        <_>\n          0 6 10 3 2.</_>\n        <_>\n          10 9 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 12 5 -1.</_>\n        <_>\n          15 12 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 3 19 -1.</_>\n        <_>\n          1 4 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 1 3 18 -1.</_>\n        <_>\n          20 1 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 3 18 -1.</_>\n        <_>\n          3 1 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 18 3 -1.</_>\n        <_>\n          9 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 10 9 -1.</_>\n        <_>\n          9 4 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 14 7 -1.</_>\n        <_>\n          7 13 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 14 7 -1.</_>\n        <_>\n          10 13 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 9 6 -1.</_>\n        <_>\n          11 15 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 8 10 -1.</_>\n        <_>\n          4 14 4 5 2.</_>\n        <_>\n          8 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 4 10 -1.</_>\n        <_>\n          10 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 5 16 -1.</_>\n        <_>\n          3 16 5 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 9 6 -1.</_>\n        <_>\n          15 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 9 6 -1.</_>\n        <_>\n          0 12 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 12 9 -1.</_>\n        <_>\n          6 10 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 5 8 -1.</_>\n        <_>\n          9 14 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 3 12 -1.</_>\n        <_>\n          12 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 6 9 -1.</_>\n        <_>\n          10 15 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 7 6 -1.</_>\n        <_>\n          16 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 4 22 -1.</_>\n        <_>\n          10 1 2 22 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 3 -1.</_>\n        <_>\n          6 6 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 19 3 -1.</_>\n        <_>\n          0 19 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 6 24 -1.</_>\n        <_>\n          17 0 3 24 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 15 6 -1.</_>\n        <_>\n          5 13 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 10 14 -1.</_>\n        <_>\n          14 6 5 7 2.</_>\n        <_>\n          9 13 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 8 10 -1.</_>\n        <_>\n          1 6 4 5 2.</_>\n        <_>\n          5 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 12 5 -1.</_>\n        <_>\n          7 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 9 6 -1.</_>\n        <_>\n          10 7 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 14 14 -1.</_>\n        <_>\n          14 8 7 7 2.</_>\n        <_>\n          7 15 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 14 14 -1.</_>\n        <_>\n          3 8 7 7 2.</_>\n        <_>\n          10 15 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 13 4 -1.</_>\n        <_>\n          9 10 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 6 12 -1.</_>\n        <_>\n          3 2 3 6 2.</_>\n        <_>\n          6 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 17 6 -1.</_>\n        <_>\n          6 13 17 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 17 6 -1.</_>\n        <_>\n          1 13 17 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 7 8 9 -1.</_>\n        <_>\n          16 10 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 9 -1.</_>\n        <_>\n          0 10 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 24 10 -1.</_>\n        <_>\n          12 9 12 5 2.</_>\n        <_>\n          0 14 12 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 15 8 -1.</_>\n        <_>\n          8 2 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 18 8 -1.</_>\n        <_>\n          10 2 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 18 4 -1.</_>\n        <_>\n          0 1 9 2 2.</_>\n        <_>\n          9 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          20 2 3 18 -1.</_>\n        <_>\n          21 2 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 3 19 -1.</_>\n        <_>\n          2 3 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 8 6 16 -1.</_>\n        <_>\n          20 8 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 16 -1.</_>\n        <_>\n          2 8 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 11 6 -1.</_>\n        <_>\n          8 20 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 5 -1.</_>\n        <_>\n          8 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 12 5 -1.</_>\n        <_>\n          11 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 9 6 -1.</_>\n        <_>\n          9 3 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 12 5 -1.</_>\n        <_>\n          7 6 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 7 -1.</_>\n        <_>\n          12 8 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 9 6 -1.</_>\n        <_>\n          11 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 6 9 -1.</_>\n        <_>\n          8 17 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 9 6 -1.</_>\n        <_>\n          11 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 20 -1.</_>\n        <_>\n          4 3 8 10 2.</_>\n        <_>\n          12 13 8 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 10 12 -1.</_>\n        <_>\n          12 6 5 6 2.</_>\n        <_>\n          7 12 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 7 12 -1.</_>\n        <_>\n          0 6 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 11 6 -1.</_>\n        <_>\n          12 19 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 12 8 -1.</_>\n        <_>\n          4 7 6 4 2.</_>\n        <_>\n          10 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 8 10 -1.</_>\n        <_>\n          12 11 4 5 2.</_>\n        <_>\n          8 16 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 4 9 -1.</_>\n        <_>\n          11 1 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 22 -1.</_>\n        <_>\n          15 0 1 22 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 22 -1.</_>\n        <_>\n          8 0 1 22 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 18 4 -1.</_>\n        <_>\n          13 7 9 2 2.</_>\n        <_>\n          4 9 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 4 15 -1.</_>\n        <_>\n          10 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 3 12 -1.</_>\n        <_>\n          12 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 13 -1.</_>\n        <_>\n          9 0 9 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 24 -1.</_>\n        <_>\n          17 0 1 24 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 24 -1.</_>\n        <_>\n          6 0 1 24 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 5 8 -1.</_>\n        <_>\n          10 19 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 18 18 2 -1.</_>\n        <_>\n          2 19 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 20 3 -1.</_>\n        <_>\n          2 9 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 6 -1.</_>\n        <_>\n          7 8 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 19 10 -1.</_>\n        <_>\n          3 7 19 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 19 3 -1.</_>\n        <_>\n          2 8 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 9 4 -1.</_>\n        <_>\n          15 8 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 8 -1.</_>\n        <_>\n          8 2 6 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 14 4 -1.</_>\n        <_>\n          10 9 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 6 16 -1.</_>\n        <_>\n          7 4 3 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 9 16 -1.</_>\n        <_>\n          18 8 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 9 16 -1.</_>\n        <_>\n          3 8 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 6 14 -1.</_>\n        <_>\n          20 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 14 -1.</_>\n        <_>\n          2 0 2 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 6 22 -1.</_>\n        <_>\n          17 0 2 22 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 6 22 -1.</_>\n        <_>\n          5 0 2 22 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 12 20 -1.</_>\n        <_>\n          16 2 4 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 12 20 -1.</_>\n        <_>\n          4 2 4 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 9 -1.</_>\n        <_>\n          11 6 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 16 -1.</_>\n        <_>\n          12 0 3 16 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 3 12 -1.</_>\n        <_>\n          12 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 18 6 -1.</_>\n        <_>\n          3 4 9 3 2.</_>\n        <_>\n          12 7 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 16 8 -1.</_>\n        <_>\n          13 5 8 4 2.</_>\n        <_>\n          5 9 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 10 6 -1.</_>\n        <_>\n          0 15 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 9 6 -1.</_>\n        <_>\n          8 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 9 6 -1.</_>\n        <_>\n          9 2 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 10 8 -1.</_>\n        <_>\n          19 1 5 4 2.</_>\n        <_>\n          14 5 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 12 -1.</_>\n        <_>\n          9 7 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 9 -1.</_>\n        <_>\n          6 7 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 6 -1.</_>\n        <_>\n          10 5 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 8 5 -1.</_>\n        <_>\n          5 1 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 6 8 -1.</_>\n        <_>\n          12 16 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 12 6 -1.</_>\n        <_>\n          3 14 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 12 6 -1.</_>\n        <_>\n          15 18 6 3 2.</_>\n        <_>\n          9 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 6 6 -1.</_>\n        <_>\n          4 16 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 7 18 -1.</_>\n        <_>\n          11 12 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 18 3 -1.</_>\n        <_>\n          9 9 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 19 2 -1.</_>\n        <_>\n          5 4 19 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 6 -1.</_>\n        <_>\n          4 2 6 3 2.</_>\n        <_>\n          10 5 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 9 -1.</_>\n        <_>\n          11 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 6 9 -1.</_>\n        <_>\n          10 6 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 5 15 -1.</_>\n        <_>\n          16 14 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 5 15 -1.</_>\n        <_>\n          3 14 5 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 6 -1.</_>\n        <_>\n          13 6 7 3 2.</_>\n        <_>\n          6 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 14 -1.</_>\n        <_>\n          8 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 24 5 -1.</_>\n        <_>\n          8 16 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 20 20 3 -1.</_>\n        <_>\n          10 20 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 18 2 -1.</_>\n        <_>\n          5 11 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 10 -1.</_>\n        <_>\n          2 6 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 20 3 -1.</_>\n        <_>\n          2 2 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 11 -1.</_>\n        <_>\n          11 13 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 6 8 -1.</_>\n        <_>\n          9 19 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 9 -1.</_>\n        <_>\n          9 15 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 18 2 -1.</_>\n        <_>\n          5 12 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 15 6 -1.</_>\n        <_>\n          2 8 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 18 3 -1.</_>\n        <_>\n          6 1 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 18 -1.</_>\n        <_>\n          6 0 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 6 10 -1.</_>\n        <_>\n          20 3 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 10 -1.</_>\n        <_>\n          2 3 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 9 -1.</_>\n        <_>\n          10 5 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 8 9 -1.</_>\n        <_>\n          10 5 4 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 20 3 -1.</_>\n        <_>\n          3 3 20 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 13 4 -1.</_>\n        <_>\n          5 4 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 7 14 -1.</_>\n        <_>\n          17 7 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 7 14 -1.</_>\n        <_>\n          0 7 7 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 10 6 -1.</_>\n        <_>\n          9 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 6 -1.</_>\n        <_>\n          10 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 3 18 -1.</_>\n        <_>\n          11 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 3 -1.</_>\n        <_>\n          0 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 18 3 -1.</_>\n        <_>\n          6 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 9 10 -1.</_>\n        <_>\n          4 11 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 15 4 -1.</_>\n        <_>\n          9 9 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 12 6 -1.</_>\n        <_>\n          5 6 6 3 2.</_>\n        <_>\n          11 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 12 9 -1.</_>\n        <_>\n          6 4 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 12 -1.</_>\n        <_>\n          7 9 3 6 2.</_>\n        <_>\n          10 15 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 13 6 -1.</_>\n        <_>\n          11 7 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 22 13 -1.</_>\n        <_>\n          12 11 11 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 8 6 6 -1.</_>\n        <_>\n          18 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 6 6 -1.</_>\n        <_>\n          0 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 24 3 -1.</_>\n        <_>\n          0 7 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 10 6 -1.</_>\n        <_>\n          0 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 18 3 -1.</_>\n        <_>\n          6 8 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 6 -1.</_>\n        <_>\n          0 2 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 0 3 19 -1.</_>\n        <_>\n          20 0 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 12 16 -1.</_>\n        <_>\n          4 6 6 8 2.</_>\n        <_>\n          10 14 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 6 4 18 -1.</_>\n        <_>\n          21 6 2 9 2.</_>\n        <_>\n          19 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 4 18 -1.</_>\n        <_>\n          1 6 2 9 2.</_>\n        <_>\n          3 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 21 18 3 -1.</_>\n        <_>\n          3 22 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 19 9 4 -1.</_>\n        <_>\n          0 21 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 12 6 -1.</_>\n        <_>\n          18 18 6 3 2.</_>\n        <_>\n          12 21 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 18 9 4 -1.</_>\n        <_>\n          7 20 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 10 8 -1.</_>\n        <_>\n          17 16 5 4 2.</_>\n        <_>\n          12 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 10 8 -1.</_>\n        <_>\n          2 16 5 4 2.</_>\n        <_>\n          7 20 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 10 12 -1.</_>\n        <_>\n          19 0 5 6 2.</_>\n        <_>\n          14 6 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 12 -1.</_>\n        <_>\n          0 0 5 6 2.</_>\n        <_>\n          5 6 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 9 6 -1.</_>\n        <_>\n          15 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 9 6 -1.</_>\n        <_>\n          0 16 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 10 6 -1.</_>\n        <_>\n          14 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 10 6 -1.</_>\n        <_>\n          0 16 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 18 2 -1.</_>\n        <_>\n          5 19 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 18 3 -1.</_>\n        <_>\n          0 19 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 18 12 -1.</_>\n        <_>\n          12 5 9 6 2.</_>\n        <_>\n          3 11 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 7 9 -1.</_>\n        <_>\n          5 6 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 19 15 -1.</_>\n        <_>\n          4 5 19 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 16 4 -1.</_>\n        <_>\n          3 2 16 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 16 12 -1.</_>\n        <_>\n          4 12 8 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 15 -1.</_>\n        <_>\n          10 3 6 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 2 19 -1.</_>\n        <_>\n          16 4 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 19 -1.</_>\n        <_>\n          7 4 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 8 10 -1.</_>\n        <_>\n          17 14 4 5 2.</_>\n        <_>\n          13 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 8 10 -1.</_>\n        <_>\n          3 14 4 5 2.</_>\n        <_>\n          7 19 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 18 -1.</_>\n        <_>\n          12 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 12 6 -1.</_>\n        <_>\n          5 11 6 3 2.</_>\n        <_>\n          11 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 10 -1.</_>\n        <_>\n          14 5 4 5 2.</_>\n        <_>\n          10 10 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 10 -1.</_>\n        <_>\n          6 4 6 5 2.</_>\n        <_>\n          12 9 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 18 10 -1.</_>\n        <_>\n          15 8 9 5 2.</_>\n        <_>\n          6 13 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 18 10 -1.</_>\n        <_>\n          0 8 9 5 2.</_>\n        <_>\n          9 13 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 18 -1.</_>\n        <_>\n          12 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 18 3 -1.</_>\n        <_>\n          0 15 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 18 -1.</_>\n        <_>\n          12 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 18 -1.</_>\n        <_>\n          9 12 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 18 3 -1.</_>\n        <_>\n          6 15 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 18 3 -1.</_>\n        <_>\n          0 6 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 22 3 -1.</_>\n        <_>\n          2 6 22 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 21 10 -1.</_>\n        <_>\n          7 0 7 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 18 17 -1.</_>\n        <_>\n          12 3 6 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 18 17 -1.</_>\n        <_>\n          6 3 6 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 24 11 -1.</_>\n        <_>\n          8 12 8 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 16 6 -1.</_>\n        <_>\n          4 13 16 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 6 8 -1.</_>\n        <_>\n          12 12 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 7 -1.</_>\n        <_>\n          10 14 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 6 14 -1.</_>\n        <_>\n          18 10 3 7 2.</_>\n        <_>\n          15 17 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 14 -1.</_>\n        <_>\n          3 10 3 7 2.</_>\n        <_>\n          6 17 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 18 2 -1.</_>\n        <_>\n          6 13 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 6 -1.</_>\n        <_>\n          5 10 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 9 4 -1.</_>\n        <_>\n          12 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 9 6 -1.</_>\n        <_>\n          0 13 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 18 -1.</_>\n        <_>\n          12 2 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 3 18 -1.</_>\n        <_>\n          11 2 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 10 -1.</_>\n        <_>\n          11 12 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 9 -1.</_>\n        <_>\n          1 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 16 6 -1.</_>\n        <_>\n          14 9 8 3 2.</_>\n        <_>\n          6 12 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 9 6 -1.</_>\n        <_>\n          1 10 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 16 6 -1.</_>\n        <_>\n          7 9 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 3 -1.</_>\n        <_>\n          0 1 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 9 -1.</_>\n        <_>\n          12 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 6 -1.</_>\n        <_>\n          12 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 18 -1.</_>\n        <_>\n          12 6 2 9 2.</_>\n        <_>\n          10 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 9 -1.</_>\n        <_>\n          10 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 9 -1.</_>\n        <_>\n          9 4 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 9 -1.</_>\n        <_>\n          1 3 18 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 24 3 -1.</_>\n        <_>\n          0 4 24 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 9 4 -1.</_>\n        <_>\n          6 16 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 8 10 -1.</_>\n        <_>\n          12 9 4 5 2.</_>\n        <_>\n          8 14 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 13 9 -1.</_>\n        <_>\n          5 5 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 16 9 -1.</_>\n        <_>\n          4 7 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 14 9 -1.</_>\n        <_>\n          4 7 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 9 6 -1.</_>\n        <_>\n          8 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 16 6 -1.</_>\n        <_>\n          1 9 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 13 9 -1.</_>\n        <_>\n          10 8 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 13 9 -1.</_>\n        <_>\n          1 8 13 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 24 6 -1.</_>\n        <_>\n          12 4 12 3 2.</_>\n        <_>\n          0 7 12 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 10 9 -1.</_>\n        <_>\n          1 17 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 18 3 -1.</_>\n        <_>\n          5 18 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 18 3 -1.</_>\n        <_>\n          0 17 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 9 6 -1.</_>\n        <_>\n          9 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 20 22 4 -1.</_>\n        <_>\n          1 20 11 2 2.</_>\n        <_>\n          12 22 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 8 6 -1.</_>\n        <_>\n          8 17 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 15 -1.</_>\n        <_>\n          8 11 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 18 3 -1.</_>\n        <_>\n          5 5 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 5 10 -1.</_>\n        <_>\n          9 8 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 12 3 -1.</_>\n        <_>\n          6 8 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 18 6 -1.</_>\n        <_>\n          2 6 9 3 2.</_>\n        <_>\n          11 9 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 18 -1.</_>\n        <_>\n          12 6 2 9 2.</_>\n        <_>\n          10 15 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 6 6 -1.</_>\n        <_>\n          10 5 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 2 18 -1.</_>\n        <_>\n          14 14 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 18 -1.</_>\n        <_>\n          8 14 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 10 6 -1.</_>\n        <_>\n          9 2 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 18 12 -1.</_>\n        <_>\n          12 1 9 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 17 22 -1.</_>\n        <_>\n          5 13 17 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 12 6 -1.</_>\n        <_>\n          4 2 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 16 6 -1.</_>\n        <_>\n          14 9 8 3 2.</_>\n        <_>\n          6 12 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 5 18 -1.</_>\n        <_>\n          9 9 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 6 9 -1.</_>\n        <_>\n          14 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 9 -1.</_>\n        <_>\n          8 0 2 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 12 -1.</_>\n        <_>\n          11 1 2 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 13 4 -1.</_>\n        <_>\n          5 11 13 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 19 3 -1.</_>\n        <_>\n          5 9 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 8 -1.</_>\n        <_>\n          9 13 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 15 -1.</_>\n        <_>\n          11 14 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 14 -1.</_>\n        <_>\n          2 0 3 7 2.</_>\n        <_>\n          5 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 6 14 -1.</_>\n        <_>\n          18 1 3 7 2.</_>\n        <_>\n          15 8 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 14 -1.</_>\n        <_>\n          3 1 3 7 2.</_>\n        <_>\n          6 8 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 20 18 4 -1.</_>\n        <_>\n          12 20 9 2 2.</_>\n        <_>\n          3 22 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 4 20 -1.</_>\n        <_>\n          5 0 2 10 2.</_>\n        <_>\n          7 10 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 8 12 -1.</_>\n        <_>\n          20 8 4 6 2.</_>\n        <_>\n          16 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 8 12 -1.</_>\n        <_>\n          0 8 4 6 2.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 10 8 -1.</_>\n        <_>\n          18 13 5 4 2.</_>\n        <_>\n          13 17 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 10 8 -1.</_>\n        <_>\n          1 13 5 4 2.</_>\n        <_>\n          6 17 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 4 15 -1.</_>\n        <_>\n          15 13 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 15 -1.</_>\n        <_>\n          5 13 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 16 12 -1.</_>\n        <_>\n          6 15 16 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 16 12 -1.</_>\n        <_>\n          2 15 16 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 7 9 -1.</_>\n        <_>\n          14 15 7 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 21 -1.</_>\n        <_>\n          10 8 3 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 9 4 -1.</_>\n        <_>\n          13 13 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 17 9 -1.</_>\n        <_>\n          3 13 17 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 8 15 -1.</_>\n        <_>\n          13 13 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 8 15 -1.</_>\n        <_>\n          3 13 8 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 10 8 -1.</_>\n        <_>\n          16 14 5 4 2.</_>\n        <_>\n          11 18 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 22 6 -1.</_>\n        <_>\n          0 18 11 3 2.</_>\n        <_>\n          11 21 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 24 4 -1.</_>\n        <_>\n          0 16 12 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 20 12 3 -1.</_>\n        <_>\n          12 20 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 12 6 12 -1.</_>\n        <_>\n          21 12 3 6 2.</_>\n        <_>\n          18 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 6 12 -1.</_>\n        <_>\n          0 12 3 6 2.</_>\n        <_>\n          3 18 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 6 -1.</_>\n        <_>\n          15 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 22 10 -1.</_>\n        <_>\n          1 6 11 5 2.</_>\n        <_>\n          12 11 11 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 6 -1.</_>\n        <_>\n          15 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 18 2 -1.</_>\n        <_>\n          0 19 18 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 19 3 -1.</_>\n        <_>\n          3 16 19 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 18 3 -1.</_>\n        <_>\n          0 14 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 9 6 -1.</_>\n        <_>\n          15 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 9 6 -1.</_>\n        <_>\n          0 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 9 6 -1.</_>\n        <_>\n          12 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 9 6 -1.</_>\n        <_>\n          3 19 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 3 20 -1.</_>\n        <_>\n          17 2 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 24 8 -1.</_>\n        <_>\n          0 17 24 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 22 -1.</_>\n        <_>\n          12 1 3 11 2.</_>\n        <_>\n          9 12 3 11 2.</_></rects></_></features></cascade>\n</opencv_storage>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/classifiers/haarcascade_profileface.xml",
    "content": "<?xml version=\"1.0\"?>\n<!--\n    20x20 profile face detector.\n    Contributed by David Bradley from Princeton University.\n\n////////////////////////////////////////////////////////////////////////////////////////\n\n  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n\n  By downloading, copying, installing or using the software you agree to this license.\n  If you do not agree to this license, do not download, install,\n  copy or use the software.\n\n\n                        Intel License Agreement\n                For Open Source Computer Vision Library\n\n Copyright (C) 2000, Intel Corporation, all rights reserved.\n Third party copyrights are property of their respective owners.\n\n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n\n   * Redistribution's of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n\n   * Redistribution's in binary form must reproduce the above copyright notice,\n     this list of conditions and the following disclaimer in the documentation\n     and/or other materials provided with the distribution.\n\n   * The name of Intel Corporation may not be used to endorse or promote products\n     derived from this software without specific prior written permission.\n\n This software is provided by the copyright holders and contributors \"as is\" and\n any express or implied warranties, including, but not limited to, the implied\n warranties of merchantability and fitness for a particular purpose are disclaimed.\n In no event shall the Intel Corporation or contributors be liable for any direct,\n indirect, incidental, special, exemplary, or consequential damages\n (including, but not limited to, procurement of substitute goods or services;\n loss of use, data, or profits; or business interruption) however caused\n and on any theory of liability, whether in contract, strict liability,\n or tort (including negligence or otherwise) arising in any way out of\n the use of this software, even if advised of the possibility of such damage.\n-->\n<opencv_storage>\n<cascade type_id=\"opencv-cascade-classifier\"><stageType>BOOST</stageType>\n  <featureType>HAAR</featureType>\n  <height>20</height>\n  <width>20</width>\n  <stageParams>\n    <maxWeakCount>195</maxWeakCount></stageParams>\n  <featureParams>\n    <maxCatCount>0</maxCatCount></featureParams>\n  <stageNum>26</stageNum>\n  <stages>\n    <_>\n      <maxWeakCount>3</maxWeakCount>\n      <stageThreshold>-1.1856809854507446e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 0 1.1384399840608239e-03</internalNodes>\n          <leafValues>\n            -8.3771979808807373e-01 7.3413830995559692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1 -1.1342350393533707e-02</internalNodes>\n          <leafValues>\n            6.2702018022537231e-01 -7.2396302223205566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2 -1.1023089755326509e-03</internalNodes>\n          <leafValues>\n            3.7600189447402954e-01 -6.6088408231735229e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>12</maxWeakCount>\n      <stageThreshold>-1.4913179874420166e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 3 -1.9553869962692261e-02</internalNodes>\n          <leafValues>\n            4.9245831370353699e-01 -6.3396167755126953e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 4 2.2794529795646667e-03</internalNodes>\n          <leafValues>\n            -6.4604967832565308e-01 3.5818460583686829e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 5 2.4270440917462111e-03</internalNodes>\n          <leafValues>\n            -4.7253230214118958e-01 2.8494310379028320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 6 1.9644061103463173e-03</internalNodes>\n          <leafValues>\n            1.6999539732933044e-01 -7.7868157625198364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 7 2.2895270958542824e-03</internalNodes>\n          <leafValues>\n            1.5551710128784180e-01 -6.6725099086761475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 8 -3.0143910553306341e-03</internalNodes>\n          <leafValues>\n            -6.8721300363540649e-01 1.4604569971561432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 9 -1.7399009317159653e-02</internalNodes>\n          <leafValues>\n            7.2524380683898926e-01 -1.6572900116443634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 10 9.0722442837432027e-04</internalNodes>\n          <leafValues>\n            -4.6388080716133118e-01 2.3604999482631683e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 11 -1.5043979510664940e-03</internalNodes>\n          <leafValues>\n            -7.5959628820419312e-01 1.1436919867992401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 12 1.0804689675569534e-01</internalNodes>\n          <leafValues>\n            -1.2865519523620605e-01 7.9092341661453247e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 13 -1.1923050042241812e-03</internalNodes>\n          <leafValues>\n            -6.2403547763824463e-01 1.4847490191459656e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 14 -2.0571390166878700e-02</internalNodes>\n          <leafValues>\n            4.0808489918708801e-01 -2.1287000179290771e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>27</maxWeakCount>\n      <stageThreshold>-1.9596290588378906e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 15 -3.6899209022521973e-02</internalNodes>\n          <leafValues>\n            5.3308618068695068e-01 -4.0872651338577271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 16 2.4960909504443407e-03</internalNodes>\n          <leafValues>\n            -6.9489312171936035e-01 2.7125179767608643e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 17 2.4068039783742279e-04</internalNodes>\n          <leafValues>\n            -5.6208252906799316e-01 2.1930350363254547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 18 -5.8021828532218933e-02</internalNodes>\n          <leafValues>\n            6.9060617685317993e-01 -1.5082140266895294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 19 1.1526979506015778e-03</internalNodes>\n          <leafValues>\n            1.3925389945507050e-01 -6.6311657428741455e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 20 7.4388440698385239e-03</internalNodes>\n          <leafValues>\n            -3.3333170413970947e-01 3.1699380278587341e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 21 -1.4158539706841111e-03</internalNodes>\n          <leafValues>\n            -6.8007302284240723e-01 1.3243320584297180e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 22 8.8562711607664824e-04</internalNodes>\n          <leafValues>\n            -3.8672161102294922e-01 1.9732959568500519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 23 2.5714060757309198e-03</internalNodes>\n          <leafValues>\n            1.2035659700632095e-01 -7.3177069425582886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 24 1.8255549948662519e-03</internalNodes>\n          <leafValues>\n            7.7979840338230133e-02 -7.7196091413497925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 25 -1.1993020307272673e-03</internalNodes>\n          <leafValues>\n            1.6821229457855225e-01 -4.1479128599166870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 26 2.3179080337285995e-02</internalNodes>\n          <leafValues>\n            7.5337320566177368e-02 -7.1047067642211914e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 27 4.6539418399333954e-02</internalNodes>\n          <leafValues>\n            -1.0464839637279510e-01 6.6270697116851807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 28 -1.7157640540972352e-03</internalNodes>\n          <leafValues>\n            -4.9618211388587952e-01 1.6275240480899811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 29 -1.2778829783201218e-02</internalNodes>\n          <leafValues>\n            4.6254539489746094e-01 -1.6027900576591492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 30 -1.5214820206165314e-01</internalNodes>\n          <leafValues>\n            -7.0592701435089111e-01 1.0022509843111038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 31 3.1789899803698063e-03</internalNodes>\n          <leafValues>\n            1.2345749884843826e-01 -3.9093419909477234e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 32 -2.2882770281285048e-03</internalNodes>\n          <leafValues>\n            3.7081500887870789e-01 -1.6210420429706573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 33 -2.9806189704686403e-03</internalNodes>\n          <leafValues>\n            1.8087059259414673e-01 -3.3239859342575073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 34 -1.5072739915922284e-03</internalNodes>\n          <leafValues>\n            -4.9472311139106750e-01 9.8288856446743011e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 35 1.9225040450692177e-03</internalNodes>\n          <leafValues>\n            -1.7791110277175903e-01 3.0773329734802246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 36 1.9025449873879552e-03</internalNodes>\n          <leafValues>\n            8.4794998168945312e-02 -5.9020972251892090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 37 -3.5421559587121010e-03</internalNodes>\n          <leafValues>\n            3.1175771355628967e-01 -1.4392930269241333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 38 -2.9751660767942667e-03</internalNodes>\n          <leafValues>\n            -6.3649141788482666e-01 8.2639887928962708e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 39 1.0003290139138699e-02</internalNodes>\n          <leafValues>\n            -1.1699260026216507e-01 4.2387530207633972e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 40 -1.9193530315533280e-03</internalNodes>\n          <leafValues>\n            -4.7115838527679443e-01 1.1038240045309067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 41 2.5070620700716972e-02</internalNodes>\n          <leafValues>\n            4.8775929957628250e-02 -8.0351328849792480e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>28</maxWeakCount>\n      <stageThreshold>-1.9849590063095093e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 42 1.4214799739420414e-02</internalNodes>\n          <leafValues>\n            -6.3577878475189209e-01 3.3461728692054749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 43 -1.2525909580290318e-02</internalNodes>\n          <leafValues>\n            3.2766130566596985e-01 -4.1331529617309570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 44 -2.2514370357384905e-05</internalNodes>\n          <leafValues>\n            2.3102630674839020e-01 -5.4282051324844360e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 45 1.8600060138851404e-03</internalNodes>\n          <leafValues>\n            1.7933349311351776e-01 -6.9131940603256226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 46 7.8344792127609253e-03</internalNodes>\n          <leafValues>\n            9.1071300208568573e-02 -7.8126847743988037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 47 -4.2322301305830479e-03</internalNodes>\n          <leafValues>\n            2.0658409595489502e-01 -4.2906031012535095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 48 -7.5860600918531418e-04</internalNodes>\n          <leafValues>\n            2.0730710029602051e-01 -4.2070311307907104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 49 -3.5626380704343319e-03</internalNodes>\n          <leafValues>\n            -6.3227087259292603e-01 1.3118620216846466e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 50 -4.9960161559283733e-03</internalNodes>\n          <leafValues>\n            -7.5112378597259521e-01 7.8203327953815460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 51 7.3098740540444851e-03</internalNodes>\n          <leafValues>\n            9.3428641557693481e-02 -6.6310107707977295e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 52 2.2772040392737836e-04</internalNodes>\n          <leafValues>\n            -3.4148821234703064e-01 2.0008200407028198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 53 8.3124160300940275e-04</internalNodes>\n          <leafValues>\n            -2.5448161363601685e-01 2.5857710838317871e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 54 -7.5492179021239281e-03</internalNodes>\n          <leafValues>\n            -6.6138988733291626e-01 8.3004422485828400e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 55 -3.8039948791265488e-02</internalNodes>\n          <leafValues>\n            -8.2163572311401367e-01 5.9231590479612350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 56 2.8484580107033253e-03</internalNodes>\n          <leafValues>\n            8.9729957282543182e-02 -5.8333742618560791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 57 4.8181698657572269e-03</internalNodes>\n          <leafValues>\n            9.3960560858249664e-02 -5.7619768381118774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 58 -1.1190489865839481e-02</internalNodes>\n          <leafValues>\n            -6.2544298171997070e-01 7.3608897626399994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 59 -6.4537129364907742e-03</internalNodes>\n          <leafValues>\n            5.5123388767242432e-01 -1.0020790249109268e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 60 3.3225629013031721e-03</internalNodes>\n          <leafValues>\n            -1.0797890275716782e-01 5.3664940595626831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 61 4.6705761924386024e-03</internalNodes>\n          <leafValues>\n            8.8321126997470856e-02 -6.7683601379394531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 62 -1.1613310314714909e-02</internalNodes>\n          <leafValues>\n            -5.0711882114410400e-01 7.6556630432605743e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 63 -3.7515610456466675e-02</internalNodes>\n          <leafValues>\n            -7.2936272621154785e-01 5.9448610991239548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 64 2.3086030036211014e-02</internalNodes>\n          <leafValues>\n            5.0718959420919418e-02 -7.8459781408309937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 65 -7.1651988946541678e-06</internalNodes>\n          <leafValues>\n            1.6686220467090607e-01 -2.5713220238685608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 66 7.1611627936363220e-04</internalNodes>\n          <leafValues>\n            1.0636030137538910e-01 -4.2793640494346619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 67 4.1476460173726082e-03</internalNodes>\n          <leafValues>\n            -1.2069659680128098e-01 4.1993188858032227e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 68 -2.5815099943429232e-03</internalNodes>\n          <leafValues>\n            4.8718088865280151e-01 -1.0045810043811798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 69 -1.7147070029750466e-03</internalNodes>\n          <leafValues>\n            -4.6096310019493103e-01 1.0375110059976578e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>28</maxWeakCount>\n      <stageThreshold>-1.8260079622268677e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 70 -6.1202719807624817e-02</internalNodes>\n          <leafValues>\n            3.9079108834266663e-01 -3.9401251077651978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 71 -1.4643670292571187e-03</internalNodes>\n          <leafValues>\n            -7.3697841167449951e-01 1.5660220384597778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 72 7.2080420795828104e-04</internalNodes>\n          <leafValues>\n            2.1675530076026917e-01 -5.8012658357620239e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 73 6.4895692048594356e-04</internalNodes>\n          <leafValues>\n            -7.2308099269866943e-01 1.2785249948501587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 74 -1.7158190021291375e-03</internalNodes>\n          <leafValues>\n            -7.7100431919097900e-01 1.0210309922695160e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 75 -2.2490581031888723e-03</internalNodes>\n          <leafValues>\n            -6.0623127222061157e-01 1.2427269667387009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 76 5.3841978311538696e-02</internalNodes>\n          <leafValues>\n            -1.7169749736785889e-01 5.3350567817687988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 77 -1.3288970291614532e-01</internalNodes>\n          <leafValues>\n            5.5924367904663086e-01 -1.8954899907112122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 78 9.0965389972552657e-04</internalNodes>\n          <leafValues>\n            -4.7166430950164795e-01 1.6924260556697845e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 79 6.0799147468060255e-04</internalNodes>\n          <leafValues>\n            1.1347220093011856e-01 -5.9846878051757812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 80 1.6072629392147064e-01</internalNodes>\n          <leafValues>\n            -1.0295519977807999e-01 6.6487199068069458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 81 -1.7097239615395665e-03</internalNodes>\n          <leafValues>\n            -4.7276279330253601e-01 1.3392050564289093e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 82 1.1734620202332735e-03</internalNodes>\n          <leafValues>\n            -2.2795589268207550e-01 2.6135650277137756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 83 -1.5138329472392797e-03</internalNodes>\n          <leafValues>\n            -5.5395001173019409e-01 1.1028339713811874e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 84 -2.1774161141365767e-03</internalNodes>\n          <leafValues>\n            -6.2228900194168091e-01 7.8486673533916473e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 85 -2.7727920096367598e-03</internalNodes>\n          <leafValues>\n            4.6141120791435242e-01 -1.3496559858322144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 86 9.3199027469381690e-04</internalNodes>\n          <leafValues>\n            1.0162770003080368e-01 -5.1631838083267212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 87 2.9746659565716982e-03</internalNodes>\n          <leafValues>\n            -1.2999209761619568e-01 4.2117300629615784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 88 -5.0399480387568474e-03</internalNodes>\n          <leafValues>\n            -6.3706171512603760e-01 7.7624127268791199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 89 2.3414850234985352e-02</internalNodes>\n          <leafValues>\n            7.2182796895503998e-02 -5.9831130504608154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 90 -1.0927390540018678e-03</internalNodes>\n          <leafValues>\n            -4.1664880514144897e-01 1.1829990148544312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 91 -1.6441360348835588e-03</internalNodes>\n          <leafValues>\n            1.8583069741725922e-01 -2.7551019191741943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 92 -2.5736279785633087e-02</internalNodes>\n          <leafValues>\n            -7.5146478414535522e-01 6.3907749950885773e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 93 -2.8924590442329645e-03</internalNodes>\n          <leafValues>\n            -5.6780880689620972e-01 7.3297739028930664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 94 -5.2889231592416763e-03</internalNodes>\n          <leafValues>\n            -6.3738888502120972e-01 6.8686947226524353e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 95 3.2964269630610943e-03</internalNodes>\n          <leafValues>\n            -2.5062951445579529e-01 1.5989780426025391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 96 2.4914439767599106e-02</internalNodes>\n          <leafValues>\n            5.5260978639125824e-02 -7.6208770275115967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 97 -1.5088500455021858e-02</internalNodes>\n          <leafValues>\n            3.7033379077911377e-01 -1.2003959715366364e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>53</maxWeakCount>\n      <stageThreshold>-1.9446740150451660e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 98 -1.1857179924845695e-02</internalNodes>\n          <leafValues>\n            2.9421558976173401e-01 -5.1703310012817383e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 99 2.0991980563849211e-03</internalNodes>\n          <leafValues>\n            -6.1471748352050781e-01 2.0648500323295593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 100 -1.5772449842188507e-04</internalNodes>\n          <leafValues>\n            2.2870740294456482e-01 -5.5258047580718994e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 101 -2.0669099467340857e-04</internalNodes>\n          <leafValues>\n            1.2070009857416153e-01 -5.4926127195358276e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 102 2.2675560321658850e-03</internalNodes>\n          <leafValues>\n            1.5354810655117035e-01 -4.6074301004409790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 103 1.4469499699771404e-02</internalNodes>\n          <leafValues>\n            -1.8976309895515442e-01 4.2071411013603210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 104 -1.2127560330554843e-03</internalNodes>\n          <leafValues>\n            -4.5139861106872559e-01 9.9425867199897766e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 105 2.1505509503185749e-03</internalNodes>\n          <leafValues>\n            1.0200879722833633e-01 -6.2064242362976074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 106 -1.6638869419693947e-03</internalNodes>\n          <leafValues>\n            -7.0367491245269775e-01 7.7214680612087250e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 107 1.0530210565775633e-03</internalNodes>\n          <leafValues>\n            -3.2453960180282593e-01 1.7616109549999237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 108 1.1836409568786621e-02</internalNodes>\n          <leafValues>\n            -1.3507820665836334e-01 4.2641130089759827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 109 9.6512871095910668e-04</internalNodes>\n          <leafValues>\n            9.4502769410610199e-02 -4.8544931411743164e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 110 7.5651629595085979e-04</internalNodes>\n          <leafValues>\n            -2.9959529638290405e-01 1.6867619752883911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 111 1.0839150287210941e-02</internalNodes>\n          <leafValues>\n            -1.1121030151844025e-01 4.6914410591125488e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 112 -5.1439419388771057e-02</internalNodes>\n          <leafValues>\n            4.1726920008659363e-01 -1.1776400357484818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 113 3.4927250817418098e-03</internalNodes>\n          <leafValues>\n            9.2512279748916626e-02 -5.2599352598190308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 114 -1.3926399871706963e-02</internalNodes>\n          <leafValues>\n            -6.6633498668670654e-01 5.2386458963155746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 115 4.5590959489345551e-03</internalNodes>\n          <leafValues>\n            -9.3383841216564178e-02 4.3774750828742981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 116 -3.7318699061870575e-02</internalNodes>\n          <leafValues>\n            -5.9583687782287598e-01 7.2627849876880646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 117 1.2496879789978266e-03</internalNodes>\n          <leafValues>\n            6.9537237286567688e-02 -4.8772460222244263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 118 -3.7307639140635729e-03</internalNodes>\n          <leafValues>\n            3.2699251174926758e-01 -1.1739090085029602e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 119 2.1144179627299309e-03</internalNodes>\n          <leafValues>\n            9.2889092862606049e-02 -4.1788020730018616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 120 -6.4239342464134097e-04</internalNodes>\n          <leafValues>\n            -2.9332190752029419e-01 1.3107809424400330e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 121 -3.1379980500787497e-03</internalNodes>\n          <leafValues>\n            3.2445520162582397e-01 -1.1506850272417068e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 122 -3.9186969399452209e-02</internalNodes>\n          <leafValues>\n            -7.9360449314117432e-01 5.0053481012582779e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 123 4.4646807946264744e-03</internalNodes>\n          <leafValues>\n            5.4776020348072052e-02 -5.6535738706588745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 124 8.6451368406414986e-04</internalNodes>\n          <leafValues>\n            -1.7471200227737427e-01 1.9758160412311554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 125 2.4237011093646288e-03</internalNodes>\n          <leafValues>\n            -9.5296189188957214e-02 4.0760260820388794e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 126 -2.5377490092068911e-03</internalNodes>\n          <leafValues>\n            -6.2454742193222046e-01 6.9920547306537628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 127 -7.3309220169903710e-06</internalNodes>\n          <leafValues>\n            1.2249249964952469e-01 -2.8157269954681396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 128 -1.8882560543715954e-03</internalNodes>\n          <leafValues>\n            -6.2670397758483887e-01 6.5820932388305664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 129 6.0609861975535750e-04</internalNodes>\n          <leafValues>\n            -2.5481408834457397e-01 1.2902240455150604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 130 2.3213759995996952e-03</internalNodes>\n          <leafValues>\n            -9.7430117428302765e-02 3.2456091046333313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 131 -1.8534410046413541e-03</internalNodes>\n          <leafValues>\n            -4.4065341353416443e-01 8.2968853414058685e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 132 2.3999500554054976e-03</internalNodes>\n          <leafValues>\n            -1.2041269987821579e-01 2.8288060426712036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 133 -8.1356197595596313e-02</internalNodes>\n          <leafValues>\n            -7.3972231149673462e-01 4.6568300575017929e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 134 -2.9865680262446404e-03</internalNodes>\n          <leafValues>\n            1.6334620118141174e-01 -1.9834910333156586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 135 2.8128880076110363e-03</internalNodes>\n          <leafValues>\n            1.1837379634380341e-01 -2.9398199915885925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 136 -1.0060790181159973e-01</internalNodes>\n          <leafValues>\n            -7.3717647790908813e-01 4.2510021477937698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 137 1.1854549666168168e-04</internalNodes>\n          <leafValues>\n            1.0471060127019882e-01 -2.9139861464500427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 138 2.2375308908522129e-03</internalNodes>\n          <leafValues>\n            -9.6042059361934662e-02 3.4045928716659546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 139 -4.4986992143094540e-03</internalNodes>\n          <leafValues>\n            -5.8234661817550659e-01 5.6236840784549713e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 140 -3.6484538577497005e-04</internalNodes>\n          <leafValues>\n            -2.7956131100654602e-01 1.0113990306854248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 141 -7.9940296709537506e-03</internalNodes>\n          <leafValues>\n            2.7775949239730835e-01 -1.1941230297088623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 142 -5.1547219045460224e-03</internalNodes>\n          <leafValues>\n            -6.0229510068893433e-01 4.8917140811681747e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 143 -8.1772619159892201e-04</internalNodes>\n          <leafValues>\n            1.7660500109195709e-01 -1.6407689452171326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 144 6.7434698343276978e-02</internalNodes>\n          <leafValues>\n            4.0761459618806839e-02 -7.1865761280059814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 145 -2.4103289470076561e-03</internalNodes>\n          <leafValues>\n            1.7671680450439453e-01 -1.6081850230693817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 146 -3.5183799918740988e-03</internalNodes>\n          <leafValues>\n            -4.3078601360321045e-01 7.0671632885932922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 147 -1.4561560419679154e-05</internalNodes>\n          <leafValues>\n            1.2714700400829315e-01 -2.3387859761714935e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 148 -4.7951821237802505e-02</internalNodes>\n          <leafValues>\n            -7.9085767269134521e-01 3.6803081631660461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 149 2.1735159680247307e-03</internalNodes>\n          <leafValues>\n            -1.3089279830455780e-01 2.5330349802970886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 150 -3.4542270004749298e-03</internalNodes>\n          <leafValues>\n            5.1025247573852539e-01 -7.5337253510951996e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>54</maxWeakCount>\n      <stageThreshold>-1.8389279842376709e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 151 4.5243161730468273e-03</internalNodes>\n          <leafValues>\n            -3.0485519766807556e-01 5.1908642053604126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 152 2.3372350260615349e-03</internalNodes>\n          <leafValues>\n            -4.2904540896415710e-01 2.9052159190177917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 153 -4.4243237935006618e-03</internalNodes>\n          <leafValues>\n            2.1068570017814636e-01 -4.5954981446266174e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 154 -1.2887439690530300e-02</internalNodes>\n          <leafValues>\n            1.9138230383396149e-01 -4.5879068970680237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 155 -5.2370920457178727e-05</internalNodes>\n          <leafValues>\n            1.4141489565372467e-01 -5.0267368555068970e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 156 -4.7738491557538509e-03</internalNodes>\n          <leafValues>\n            -4.8760831356048584e-01 1.2341009825468063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 157 9.6315861446782947e-04</internalNodes>\n          <leafValues>\n            1.3367399573326111e-01 -4.4793748855590820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 158 -8.9140303432941437e-02</internalNodes>\n          <leafValues>\n            5.0387668609619141e-01 -1.5923009812831879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 159 1.7201449954882264e-03</internalNodes>\n          <leafValues>\n            -2.0535360276699066e-01 2.4340680241584778e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 160 -2.6712119579315186e-03</internalNodes>\n          <leafValues>\n            -6.3319712877273560e-01 5.3035650402307510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 161 3.7353280931711197e-02</internalNodes>\n          <leafValues>\n            -1.1360249668359756e-01 4.6645331382751465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 162 -3.1510960310697556e-02</internalNodes>\n          <leafValues>\n            -6.8820482492446899e-01 6.9371856749057770e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 163 1.5293819829821587e-02</internalNodes>\n          <leafValues>\n            -1.0043840110301971e-01 4.6267789602279663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 164 5.4966909810900688e-03</internalNodes>\n          <leafValues>\n            -9.3514643609523773e-02 4.5127061009407043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 165 -4.6311439946293831e-03</internalNodes>\n          <leafValues>\n            -6.4314597845077515e-01 8.5003547370433807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 166 8.0943357897922397e-04</internalNodes>\n          <leafValues>\n            7.9738967120647430e-02 -4.9320799112319946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 167 2.9745940119028091e-02</internalNodes>\n          <leafValues>\n            7.8420467674732208e-02 -5.0482439994812012e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 168 9.7070122137665749e-04</internalNodes>\n          <leafValues>\n            5.8135438710451126e-02 -5.7035177946090698e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 169 2.4534659460186958e-03</internalNodes>\n          <leafValues>\n            -1.1259060353040695e-01 3.6852970719337463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 170 1.9709810148924589e-03</internalNodes>\n          <leafValues>\n            7.7185310423374176e-02 -5.2683860063552856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 171 4.8643019981682301e-03</internalNodes>\n          <leafValues>\n            -1.0479539632797241e-01 4.1474440693855286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 172 1.0143260005861521e-03</internalNodes>\n          <leafValues>\n            -1.4731560647487640e-01 2.8671079874038696e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 173 -9.5099088503047824e-04</internalNodes>\n          <leafValues>\n            -3.8070049881935120e-01 8.8108353316783905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 174 -5.6730289943516254e-03</internalNodes>\n          <leafValues>\n            2.4818900227546692e-01 -1.3696339726448059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 175 1.6987899318337440e-02</internalNodes>\n          <leafValues>\n            -8.0896042287349701e-02 5.2781671285629272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 176 -7.5278789736330509e-03</internalNodes>\n          <leafValues>\n            -4.6880009770393372e-01 8.9389666914939880e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 177 3.3948529511690140e-02</internalNodes>\n          <leafValues>\n            5.0594791769981384e-02 -6.7399561405181885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 178 8.3328841719776392e-04</internalNodes>\n          <leafValues>\n            -1.8931360542774200e-01 1.9607099890708923e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 179 -5.9632491320371628e-04</internalNodes>\n          <leafValues>\n            -3.6229288578033447e-01 1.0544770210981369e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 180 3.0905720777809620e-03</internalNodes>\n          <leafValues>\n            5.7209629565477371e-02 -5.5316972732543945e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 181 3.5152619238942862e-03</internalNodes>\n          <leafValues>\n            -1.2211070209741592e-01 2.9369899630546570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 182 7.9333729809150100e-04</internalNodes>\n          <leafValues>\n            7.5977906584739685e-02 -4.4539821147918701e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 183 -1.1189360171556473e-02</internalNodes>\n          <leafValues>\n            -5.0596517324447632e-01 5.7438369840383530e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 184 -1.1787790572270751e-03</internalNodes>\n          <leafValues>\n            3.0799698829650879e-01 -1.0762230306863785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 185 5.4418851505033672e-05</internalNodes>\n          <leafValues>\n            -2.5997561216354370e-01 1.3138440251350403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 186 -7.2562302193546202e-06</internalNodes>\n          <leafValues>\n            1.5439839661121368e-01 -2.1094700694084167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 187 -8.3436258137226105e-04</internalNodes>\n          <leafValues>\n            1.3689869642257690e-01 -2.4367660284042358e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 188 -3.3380609005689621e-02</internalNodes>\n          <leafValues>\n            -6.7477357387542725e-01 5.0986740738153458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 189 7.4093497823923826e-04</internalNodes>\n          <leafValues>\n            9.1248527169227600e-02 -3.5220760107040405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 190 -2.0966369193047285e-03</internalNodes>\n          <leafValues>\n            1.9110049307346344e-01 -1.6380029916763306e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 191 -6.9339506328105927e-02</internalNodes>\n          <leafValues>\n            -8.7700867652893066e-01 3.5726629197597504e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 192 -5.7089990004897118e-03</internalNodes>\n          <leafValues>\n            -6.8067228794097900e-01 3.5545960068702698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 193 6.8668760359287262e-03</internalNodes>\n          <leafValues>\n            -6.4886868000030518e-02 5.2265900373458862e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 194 5.4602831369265914e-04</internalNodes>\n          <leafValues>\n            1.0924419760704041e-01 -3.0285251140594482e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 195 6.4349039457738400e-03</internalNodes>\n          <leafValues>\n            -1.6561950743198395e-01 1.9022129476070404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 196 -1.0112419724464417e-02</internalNodes>\n          <leafValues>\n            7.4523001909255981e-01 -3.8347329944372177e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 197 -7.5152877252548933e-04</internalNodes>\n          <leafValues>\n            -2.8147280216217041e-01 1.1321689933538437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 198 2.8225290589034557e-03</internalNodes>\n          <leafValues>\n            -1.2364400178194046e-01 2.5608530640602112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 199 2.2058798931539059e-03</internalNodes>\n          <leafValues>\n            5.7334281504154205e-02 -5.6152081489562988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 200 2.8164181113243103e-01</internalNodes>\n          <leafValues>\n            4.2092379182577133e-02 -6.4923799037933350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 201 -4.2593148536980152e-03</internalNodes>\n          <leafValues>\n            -6.4854997396469116e-01 4.3502658605575562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 202 2.6586679741740227e-03</internalNodes>\n          <leafValues>\n            -9.3526139855384827e-02 3.4158730506896973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 203 2.0971989724785089e-03</internalNodes>\n          <leafValues>\n            -1.1068929731845856e-01 3.1760269403457642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 204 -1.0267860488966107e-03</internalNodes>\n          <leafValues>\n            -3.7612101435661316e-01 9.8973110318183899e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>56</maxWeakCount>\n      <stageThreshold>-1.8807189464569092e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 205 2.6354179717600346e-03</internalNodes>\n          <leafValues>\n            -5.2496808767318726e-01 2.7711030840873718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 206 2.6279650628566742e-03</internalNodes>\n          <leafValues>\n            -3.2195448875427246e-01 3.7013629078865051e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 207 -5.8889109641313553e-03</internalNodes>\n          <leafValues>\n            2.3777529597282410e-01 -4.1800329089164734e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 208 1.9291159696877003e-03</internalNodes>\n          <leafValues>\n            -4.7122061252593994e-01 1.3692170381546021e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 209 -1.5205480158329010e-02</internalNodes>\n          <leafValues>\n            -3.9618429541587830e-01 1.7402400076389313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 210 2.3393579758703709e-03</internalNodes>\n          <leafValues>\n            -3.8508901000022888e-01 1.5659110248088837e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 211 4.2395621538162231e-02</internalNodes>\n          <leafValues>\n            1.0478709638118744e-01 -6.2164002656936646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 212 -5.6959640234708786e-02</internalNodes>\n          <leafValues>\n            5.1225858926773071e-01 -1.2684780359268188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 213 -7.2845568865886889e-06</internalNodes>\n          <leafValues>\n            1.5136890113353729e-01 -3.1185621023178101e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 214 -7.9633750021457672e-02</internalNodes>\n          <leafValues>\n            -8.4324747323989868e-01 4.4978428632020950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 215 5.9168688021600246e-03</internalNodes>\n          <leafValues>\n            -1.0745979845523834e-01 4.7434100508689880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 216 -1.4736950397491455e-03</internalNodes>\n          <leafValues>\n            3.6067450046539307e-01 -1.4760640263557434e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 217 -3.9630971848964691e-02</internalNodes>\n          <leafValues>\n            -6.5838980674743652e-01 7.4866786599159241e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 218 6.2401412287726998e-04</internalNodes>\n          <leafValues>\n            -2.6195651292800903e-01 1.5652139484882355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 219 -2.3399210476782173e-05</internalNodes>\n          <leafValues>\n            1.2157510221004486e-01 -3.0320811271667480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 220 3.0802030116319656e-02</internalNodes>\n          <leafValues>\n            4.4408731162548065e-02 -6.6609877347946167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 221 1.4787449617870152e-04</internalNodes>\n          <leafValues>\n            -2.4449509382247925e-01 1.4723050594329834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 222 4.8630568198859692e-03</internalNodes>\n          <leafValues>\n            -1.1267810314893723e-01 3.2596799731254578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 223 6.2191881239414215e-02</internalNodes>\n          <leafValues>\n            5.7439960539340973e-02 -6.4031070470809937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 224 1.4668420189991593e-03</internalNodes>\n          <leafValues>\n            9.5356643199920654e-02 -3.3727881312370300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 225 -1.4742349776497576e-05</internalNodes>\n          <leafValues>\n            1.9759610295295715e-01 -1.7083899676799774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 226 -3.2495670020580292e-02</internalNodes>\n          <leafValues>\n            -3.6848729848861694e-01 9.0363331139087677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 227 -1.5333830378949642e-03</internalNodes>\n          <leafValues>\n            3.2256379723548889e-01 -1.0416819900274277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 228 -2.7998909354209900e-02</internalNodes>\n          <leafValues>\n            -4.9097910523414612e-01 8.2653783261775970e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 229 4.9783890135586262e-03</internalNodes>\n          <leafValues>\n            7.3238030076026917e-02 -4.4057780504226685e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 230 6.8226028233766556e-03</internalNodes>\n          <leafValues>\n            7.6766029000282288e-02 -4.1460910439491272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 231 1.1497880332171917e-02</internalNodes>\n          <leafValues>\n            -9.1440111398696899e-02 4.0099748969078064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 232 -1.1003069579601288e-02</internalNodes>\n          <leafValues>\n            -5.7417541742324829e-01 7.2776727378368378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 233 4.9345887964591384e-04</internalNodes>\n          <leafValues>\n            -1.3353590667247772e-01 2.4575209617614746e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 234 2.2130589932203293e-03</internalNodes>\n          <leafValues>\n            -1.0753840208053589e-01 3.1632119417190552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 235 5.1011620089411736e-03</internalNodes>\n          <leafValues>\n            7.8985318541526794e-02 -4.2948201298713684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 236 -3.7305638194084167e-02</internalNodes>\n          <leafValues>\n            -6.7921191453933716e-01 4.5049939304590225e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 237 -6.1271698214113712e-03</internalNodes>\n          <leafValues>\n            2.3062059283256531e-01 -1.4559289813041687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 238 7.6517700217664242e-03</internalNodes>\n          <leafValues>\n            -9.0355172753334045e-02 4.3072968721389771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 239 -1.1280870065093040e-02</internalNodes>\n          <leafValues>\n            -4.7850719094276428e-01 7.4674449861049652e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 240 -1.4724049833603203e-05</internalNodes>\n          <leafValues>\n            1.4459890127182007e-01 -2.2535640001296997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 241 -1.9895960576832294e-03</internalNodes>\n          <leafValues>\n            -6.1527568101882935e-01 5.4905921220779419e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 242 1.6876959707587957e-03</internalNodes>\n          <leafValues>\n            -9.7619786858558655e-02 3.3004701137542725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 243 9.8390737548470497e-03</internalNodes>\n          <leafValues>\n            4.0972411632537842e-02 -7.5515109300613403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 244 1.3243829598650336e-03</internalNodes>\n          <leafValues>\n            -1.0046280175447464e-01 3.0665108561515808e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 245 3.1150300055742264e-03</internalNodes>\n          <leafValues>\n            8.9804470539093018e-02 -3.3524599671363831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 246 7.3907422120100819e-06</internalNodes>\n          <leafValues>\n            -2.2410400211811066e-01 1.3288240134716034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 247 3.2559569925069809e-02</internalNodes>\n          <leafValues>\n            5.0113398581743240e-02 -5.4240328073501587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 248 -2.9865119140595198e-03</internalNodes>\n          <leafValues>\n            2.8385341167449951e-01 -1.1164219677448273e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 249 1.6058710170909762e-03</internalNodes>\n          <leafValues>\n            -1.2024080008268356e-01 2.9032671451568604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 250 2.2018649615347385e-03</internalNodes>\n          <leafValues>\n            7.8110128641128540e-02 -4.3846049904823303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 251 -5.7107508182525635e-03</internalNodes>\n          <leafValues>\n            -3.2608801126480103e-01 9.2941299080848694e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 252 8.9503038907423615e-04</internalNodes>\n          <leafValues>\n            -1.3504159450531006e-01 2.2331899404525757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 253 7.7259249985218048e-02</internalNodes>\n          <leafValues>\n            7.3221340775489807e-02 -4.1714018583297729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 254 -1.0145610198378563e-02</internalNodes>\n          <leafValues>\n            -2.7330970764160156e-01 1.4099189639091492e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 255 -7.0878718361200299e-06</internalNodes>\n          <leafValues>\n            1.2602959573268890e-01 -2.3253719508647919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 256 -8.0232005566358566e-03</internalNodes>\n          <leafValues>\n            -6.2682849168777466e-01 4.4199578464031219e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 257 -1.5409339684993029e-03</internalNodes>\n          <leafValues>\n            3.2154878973960876e-01 -9.5819726586341858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 258 -1.3815560378134251e-03</internalNodes>\n          <leafValues>\n            2.3909060657024384e-01 -1.0845059901475906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 259 -8.5559524595737457e-03</internalNodes>\n          <leafValues>\n            -6.2880992889404297e-01 4.6904459595680237e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 260 1.4967939932830632e-05</internalNodes>\n          <leafValues>\n            -1.7331050336360931e-01 1.6265609860420227e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>68</maxWeakCount>\n      <stageThreshold>-1.7268099784851074e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 261 -9.2911375686526299e-03</internalNodes>\n          <leafValues>\n            2.6676508784294128e-01 -4.8681628704071045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 262 -1.0201609693467617e-03</internalNodes>\n          <leafValues>\n            2.1469169855117798e-01 -4.2971470952033997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 263 1.8099240260198712e-03</internalNodes>\n          <leafValues>\n            -4.7085261344909668e-01 1.7293150722980499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 264 -6.3195452094078064e-02</internalNodes>\n          <leafValues>\n            5.5868512392044067e-01 -1.1922080069780350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 265 1.5157799934968352e-03</internalNodes>\n          <leafValues>\n            -3.3087429404258728e-01 1.4256539940834045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 266 -3.1134260352700949e-03</internalNodes>\n          <leafValues>\n            3.1897360086441040e-01 -1.5563400089740753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 267 6.7187240347266197e-03</internalNodes>\n          <leafValues>\n            1.1308009922504425e-01 -4.6142110228538513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 268 -1.4929190001566894e-05</internalNodes>\n          <leafValues>\n            1.1303120106458664e-01 -3.8268089294433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 269 -1.9974811002612114e-03</internalNodes>\n          <leafValues>\n            -6.7833811044692993e-01 5.5562671273946762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 270 4.4361899199429899e-05</internalNodes>\n          <leafValues>\n            -2.1478720009326935e-01 1.7524589598178864e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 271 -9.4379335641860962e-03</internalNodes>\n          <leafValues>\n            -2.9008820652961731e-01 1.0494410246610641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 272 1.0263459989801049e-04</internalNodes>\n          <leafValues>\n            -3.6809450387954712e-01 1.1580110341310501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 273 -4.3512079864740372e-02</internalNodes>\n          <leafValues>\n            -5.7967478036880493e-01 4.5160628855228424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 274 2.3894330952316523e-03</internalNodes>\n          <leafValues>\n            -1.2443830072879791e-01 2.5726899504661560e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 275 3.6203579511493444e-03</internalNodes>\n          <leafValues>\n            4.8385269939899445e-02 -6.4456540346145630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 276 -4.2086638859473169e-04</internalNodes>\n          <leafValues>\n            -2.9963639378547668e-01 9.7508132457733154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 277 -3.6320161074399948e-02</internalNodes>\n          <leafValues>\n            3.2499030232429504e-01 -1.0373180359601974e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 278 5.5678240023553371e-03</internalNodes>\n          <leafValues>\n            -1.2865519523620605e-01 2.7721390128135681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 279 1.4324679505079985e-03</internalNodes>\n          <leafValues>\n            6.3044667243957520e-02 -5.0411659479141235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 280 1.2268769787624478e-03</internalNodes>\n          <leafValues>\n            -1.7073589563369751e-01 1.7944329977035522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 281 4.0125530213117599e-03</internalNodes>\n          <leafValues>\n            7.2100132703781128e-02 -4.1321611404418945e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 282 4.7377590090036392e-03</internalNodes>\n          <leafValues>\n            -9.0100876986980438e-02 3.4303799271583557e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 283 4.3965759687125683e-03</internalNodes>\n          <leafValues>\n            5.4753091186285019e-02 -5.9175938367843628e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 284 1.8952810205519199e-03</internalNodes>\n          <leafValues>\n            4.0120709687471390e-02 -6.4907258749008179e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 285 -1.3425230281427503e-03</internalNodes>\n          <leafValues>\n            3.0321699380874634e-01 -1.1009240150451660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 286 -4.6405740082263947e-02</internalNodes>\n          <leafValues>\n            -4.6026471257209778e-01 7.0307031273841858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 287 2.5875549763441086e-02</internalNodes>\n          <leafValues>\n            3.8987319916486740e-02 -6.4847522974014282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 288 1.0986380511894822e-03</internalNodes>\n          <leafValues>\n            -1.6458760201931000e-01 1.8133540451526642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 289 -3.9583959733135998e-04</internalNodes>\n          <leafValues>\n            9.7805656492710114e-02 -2.7554351091384888e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 290 -4.5633990317583084e-02</internalNodes>\n          <leafValues>\n            -5.4276019334793091e-01 5.4855771362781525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 291 -4.7068470157682896e-03</internalNodes>\n          <leafValues>\n            4.0961420536041260e-01 -6.9687090814113617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 292 2.0004810357932001e-04</internalNodes>\n          <leafValues>\n            1.2908969819545746e-01 -2.1091359853744507e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 293 1.1126570170745254e-03</internalNodes>\n          <leafValues>\n            -2.2213070094585419e-01 1.2458589673042297e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 294 -1.4747029636055231e-03</internalNodes>\n          <leafValues>\n            2.9185178875923157e-01 -9.0756237506866455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 295 4.3162931688129902e-03</internalNodes>\n          <leafValues>\n            6.1542909592390060e-02 -5.1068651676177979e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 296 2.0302709890529513e-04</internalNodes>\n          <leafValues>\n            -1.5639910101890564e-01 1.6466440260410309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 297 3.4639390651136637e-04</internalNodes>\n          <leafValues>\n            1.0773540288209915e-01 -2.5532799959182739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 298 1.5631220303475857e-03</internalNodes>\n          <leafValues>\n            -9.5428019762039185e-02 2.5450360774993896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 299 5.5476918350905180e-04</internalNodes>\n          <leafValues>\n            7.9774253070354462e-02 -3.0791428685188293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 300 2.7690480928868055e-03</internalNodes>\n          <leafValues>\n            -9.1900892555713654e-02 3.0198639631271362e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 301 1.1085179867222905e-03</internalNodes>\n          <leafValues>\n            6.2624886631965637e-02 -4.1680490970611572e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 302 3.4288389142602682e-03</internalNodes>\n          <leafValues>\n            -5.7473558932542801e-02 4.7293519973754883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 303 -2.0233790855854750e-03</internalNodes>\n          <leafValues>\n            -2.4128660559654236e-01 1.0806660354137421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 304 -9.1446418082341552e-04</internalNodes>\n          <leafValues>\n            1.7990960180759430e-01 -1.6031919419765472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 305 3.8880690932273865e-02</internalNodes>\n          <leafValues>\n            3.9132621139287949e-02 -6.4085322618484497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 306 1.2836069799959660e-03</internalNodes>\n          <leafValues>\n            5.2912048995494843e-02 -4.3914559483528137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 307 3.5828219261020422e-03</internalNodes>\n          <leafValues>\n            -9.7462162375450134e-02 3.0772930383682251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 308 2.3203529417514801e-03</internalNodes>\n          <leafValues>\n            -1.0929799824953079e-01 2.6735728979110718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 309 1.1978139809798449e-04</internalNodes>\n          <leafValues>\n            1.1623129993677139e-01 -2.3586340248584747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 310 -2.8259279206395149e-03</internalNodes>\n          <leafValues>\n            -4.1935729980468750e-01 5.7008400559425354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 311 2.4410230107605457e-03</internalNodes>\n          <leafValues>\n            4.2706880718469620e-02 -5.3362858295440674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 312 2.6899650692939758e-03</internalNodes>\n          <leafValues>\n            -1.1351829767227173e-01 2.4779020249843597e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 313 -3.1081750057637691e-03</internalNodes>\n          <leafValues>\n            -2.9488921165466309e-01 8.2543209195137024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 314 -6.6210748627781868e-03</internalNodes>\n          <leafValues>\n            2.2958689928054810e-01 -1.1443620175123215e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 315 4.6786409802734852e-03</internalNodes>\n          <leafValues>\n            -1.2875209748744965e-01 2.6777699589729309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 316 -1.2973829871043563e-03</internalNodes>\n          <leafValues>\n            -2.7280429005622864e-01 9.6471726894378662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 317 2.9523740522563457e-03</internalNodes>\n          <leafValues>\n            -8.7040692567825317e-02 2.9207450151443481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 318 -1.6173559706658125e-03</internalNodes>\n          <leafValues>\n            -4.0207850933074951e-01 6.5386466681957245e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 319 -7.5417757034301758e-02</internalNodes>\n          <leafValues>\n            -8.9723330736160278e-01 2.4602690711617470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 320 -2.5402200408279896e-03</internalNodes>\n          <leafValues>\n            1.5258650481700897e-01 -1.5025460720062256e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 321 3.7864660844206810e-03</internalNodes>\n          <leafValues>\n            7.6477207243442535e-02 -3.3881941437721252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 322 -1.4005510136485100e-02</internalNodes>\n          <leafValues>\n            4.4426390528678894e-01 -5.9003930538892746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 323 5.5956508731469512e-04</internalNodes>\n          <leafValues>\n            7.4007123708724976e-02 -3.5604709386825562e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 324 2.5946850655600429e-04</internalNodes>\n          <leafValues>\n            -2.8126189112663269e-01 8.7399207055568695e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 325 4.4409232214093208e-03</internalNodes>\n          <leafValues>\n            2.8623659163713455e-02 -7.7284187078475952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 326 -2.3343560751527548e-03</internalNodes>\n          <leafValues>\n            3.5460600256919861e-01 -7.1207538247108459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 327 9.7654951969161630e-04</internalNodes>\n          <leafValues>\n            -1.0138420015573502e-01 2.2545370459556580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 328 -4.3227209243923426e-04</internalNodes>\n          <leafValues>\n            -2.1095879375934601e-01 1.2273149937391281e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>70</maxWeakCount>\n      <stageThreshold>-1.6056820154190063e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 329 -1.2480209581553936e-02</internalNodes>\n          <leafValues>\n            2.6112109422683716e-01 -4.7001519799232483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 330 3.5450961440801620e-02</internalNodes>\n          <leafValues>\n            -2.0008459687232971e-01 4.7718611359596252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 331 2.0369330886751413e-03</internalNodes>\n          <leafValues>\n            -4.7703158855438232e-01 1.5132640302181244e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 332 -4.3946420191787183e-05</internalNodes>\n          <leafValues>\n            1.2288480252027512e-01 -5.1796287298202515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 333 -3.8480788934975863e-03</internalNodes>\n          <leafValues>\n            4.1113680601119995e-01 -1.4595329761505127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 334 -2.8316550888121128e-03</internalNodes>\n          <leafValues>\n            2.8710970282554626e-01 -1.7629599571228027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 335 2.5026081129908562e-03</internalNodes>\n          <leafValues>\n            7.9668842256069183e-02 -5.7808011770248413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 336 3.0812958721071482e-04</internalNodes>\n          <leafValues>\n            8.2838706672191620e-02 -4.2540180683135986e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 337 6.1186961829662323e-04</internalNodes>\n          <leafValues>\n            1.3641810417175293e-01 -3.0591419339179993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 338 -1.4354350241774227e-05</internalNodes>\n          <leafValues>\n            1.4197489619255066e-01 -2.5681999325752258e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 339 1.6148330178111792e-03</internalNodes>\n          <leafValues>\n            -2.6239329576492310e-01 1.3288390636444092e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 340 2.0318101160228252e-03</internalNodes>\n          <leafValues>\n            7.5749568641185760e-02 -4.3141460418701172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 341 9.5563679933547974e-03</internalNodes>\n          <leafValues>\n            -9.1424480080604553e-02 4.0004569292068481e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 342 -7.8439561184495687e-04</internalNodes>\n          <leafValues>\n            -3.6619931459426880e-01 9.1777816414833069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 343 -3.9661130867898464e-03</internalNodes>\n          <leafValues>\n            2.3698210716247559e-01 -1.4281649887561798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 344 -2.3194469977170229e-03</internalNodes>\n          <leafValues>\n            -4.2245340347290039e-01 7.8684106469154358e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 345 -7.3490202426910400e-02</internalNodes>\n          <leafValues>\n            -6.2218552827835083e-01 4.0496870875358582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 346 -3.6803178954869509e-03</internalNodes>\n          <leafValues>\n            1.2612029910087585e-01 -2.0990429818630219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 347 -4.1019290685653687e-02</internalNodes>\n          <leafValues>\n            -8.0316942930221558e-01 2.7993949130177498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 348 -4.8213129048235714e-04</internalNodes>\n          <leafValues>\n            1.4825980365276337e-01 -1.7869630455970764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 349 -1.6598250716924667e-02</internalNodes>\n          <leafValues>\n            4.1442281007766724e-01 -6.4051687717437744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 350 -1.0631670011207461e-03</internalNodes>\n          <leafValues>\n            -3.3466520905494690e-01 8.2425996661186218e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 351 1.8658409826457500e-03</internalNodes>\n          <leafValues>\n            -1.3119789958000183e-01 2.3183380067348480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 352 -2.5827190838754177e-03</internalNodes>\n          <leafValues>\n            3.8415950536727905e-01 -8.4121666848659515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 353 1.7159619601443410e-03</internalNodes>\n          <leafValues>\n            7.6971538364887238e-02 -4.1098991036415100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 354 -3.9140181615948677e-03</internalNodes>\n          <leafValues>\n            -6.2508618831634521e-01 3.8418460637331009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 355 4.2724498780444264e-04</internalNodes>\n          <leafValues>\n            8.6016573011875153e-02 -2.6975229382514954e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 356 3.3992920070886612e-03</internalNodes>\n          <leafValues>\n            -1.0176510363817215e-01 2.7030828595161438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 357 -3.6457281559705734e-02</internalNodes>\n          <leafValues>\n            -4.9261981248855591e-01 5.5854249745607376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 358 1.6230379696935415e-03</internalNodes>\n          <leafValues>\n            5.7567078620195389e-02 -4.2053499817848206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 359 4.6655549667775631e-03</internalNodes>\n          <leafValues>\n            -9.1158397495746613e-02 3.2095280289649963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 360 3.1331549398601055e-03</internalNodes>\n          <leafValues>\n            -9.6932657063007355e-02 3.4073451161384583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 361 -1.6835830174386501e-03</internalNodes>\n          <leafValues>\n            -3.6766248941421509e-01 8.2226082682609558e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 362 2.7728650718927383e-02</internalNodes>\n          <leafValues>\n            4.0117498487234116e-02 -6.5198391675949097e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 363 9.5015309751033783e-02</internalNodes>\n          <leafValues>\n            2.3065119981765747e-02 -8.8881981372833252e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 364 7.4755616486072540e-02</internalNodes>\n          <leafValues>\n            -6.3946872949600220e-02 4.7399708628654480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 365 1.6693340614438057e-02</internalNodes>\n          <leafValues>\n            4.6477258205413818e-02 -7.1152418851852417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 366 1.2088769581168890e-03</internalNodes>\n          <leafValues>\n            -1.1359269917011261e-01 2.2424149513244629e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 367 -6.1751517932862043e-04</internalNodes>\n          <leafValues>\n            -3.1268230080604553e-01 8.5018932819366455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 368 8.5786692798137665e-03</internalNodes>\n          <leafValues>\n            -1.5559460222721100e-01 1.5640939772129059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 369 6.1184767400845885e-04</internalNodes>\n          <leafValues>\n            9.4403937458992004e-02 -2.6520138978958130e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 370 -3.4570440184324980e-03</internalNodes>\n          <leafValues>\n            1.5146060287952423e-01 -1.6220529377460480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 371 1.3953070156276226e-03</internalNodes>\n          <leafValues>\n            -9.9996216595172882e-02 2.4998310208320618e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 372 3.5910680890083313e-03</internalNodes>\n          <leafValues>\n            8.1011682748794556e-02 -3.0081549286842346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 373 5.4192831739783287e-03</internalNodes>\n          <leafValues>\n            6.7650042474269867e-02 -3.2355660200119019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 374 -1.1379310162737966e-03</internalNodes>\n          <leafValues>\n            1.8887449800968170e-01 -1.2729729712009430e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 375 9.1047259047627449e-03</internalNodes>\n          <leafValues>\n            1.0160540044307709e-01 -2.2280150651931763e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 376 6.5050171688199043e-03</internalNodes>\n          <leafValues>\n            -7.2986416518688202e-02 3.5770270228385925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 377 -1.4676549653813709e-05</internalNodes>\n          <leafValues>\n            1.4693109691143036e-01 -1.7403540015220642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 378 -9.4403158873319626e-03</internalNodes>\n          <leafValues>\n            -2.6536750793457031e-01 9.6619546413421631e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 379 -4.2933300137519836e-03</internalNodes>\n          <leafValues>\n            2.5656831264495850e-01 -1.0550209879875183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 380 4.3133171275258064e-03</internalNodes>\n          <leafValues>\n            6.5936572849750519e-02 -4.5719939470291138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 381 5.8854468166828156e-02</internalNodes>\n          <leafValues>\n            6.7918263375759125e-02 -3.3078071475028992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 382 -2.8407620266079903e-03</internalNodes>\n          <leafValues>\n            2.3953500390052795e-01 -9.2092156410217285e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 383 9.6359942108392715e-04</internalNodes>\n          <leafValues>\n            -1.0982380062341690e-01 2.6462998986244202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 384 -1.4724590073456056e-05</internalNodes>\n          <leafValues>\n            1.1111160367727280e-01 -2.2704580426216125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 385 -8.0675468780100346e-04</internalNodes>\n          <leafValues>\n            -3.6335140466690063e-01 7.8122653067111969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 386 7.3296198388561606e-04</internalNodes>\n          <leafValues>\n            -1.5605129301548004e-01 1.5184900164604187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 387 6.3753738068044186e-03</internalNodes>\n          <leafValues>\n            -7.1957953274250031e-02 2.9723879694938660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 388 4.6390579082071781e-03</internalNodes>\n          <leafValues>\n            3.5969600081443787e-02 -6.1132347583770752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 389 -7.1079272311180830e-04</internalNodes>\n          <leafValues>\n            -2.8806841373443604e-01 6.9314628839492798e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 390 2.9162289574742317e-03</internalNodes>\n          <leafValues>\n            -7.5968459248542786e-02 3.2681688666343689e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 391 -1.7853140830993652e-02</internalNodes>\n          <leafValues>\n            4.4206309318542480e-01 -4.8174031078815460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 392 8.3874985575675964e-03</internalNodes>\n          <leafValues>\n            4.8913899809122086e-02 -5.4415327310562134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 393 2.9458320568664931e-05</internalNodes>\n          <leafValues>\n            -2.1131239831447601e-01 1.0629370063543320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 394 -9.8192706704139709e-02</internalNodes>\n          <leafValues>\n            3.5318240523338318e-01 -6.9296866655349731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 395 4.6140368795022368e-04</internalNodes>\n          <leafValues>\n            9.6270777285099030e-02 -2.5811928510665894e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 396 -2.4016610404942185e-04</internalNodes>\n          <leafValues>\n            -2.2976429760456085e-01 9.9984891712665558e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 397 3.7882480770349503e-02</internalNodes>\n          <leafValues>\n            -1.0365439951419830e-01 2.3164770007133484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 398 3.2621581340208650e-04</internalNodes>\n          <leafValues>\n            9.7933940589427948e-02 -2.3689700663089752e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>85</maxWeakCount>\n      <stageThreshold>-1.5173089504241943e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 399 -3.6744121462106705e-02</internalNodes>\n          <leafValues>\n            3.4079340100288391e-01 -3.1779891252517700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 400 2.1955010015517473e-03</internalNodes>\n          <leafValues>\n            -2.8729590773582458e-01 2.5869798660278320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 401 8.3034839481115341e-03</internalNodes>\n          <leafValues>\n            -2.1800449490547180e-01 2.6759269833564758e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 402 2.6289420202374458e-03</internalNodes>\n          <leafValues>\n            -3.6006081104278564e-01 1.4639839529991150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 403 1.9458869937807322e-03</internalNodes>\n          <leafValues>\n            1.3677720725536346e-01 -4.2058759927749634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 404 -2.1704390645027161e-02</internalNodes>\n          <leafValues>\n            4.8903319239616394e-01 -9.8091572523117065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 405 4.2956420220434666e-03</internalNodes>\n          <leafValues>\n            -2.7825561165809631e-01 1.5712629258632660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 406 4.9894629046320915e-04</internalNodes>\n          <leafValues>\n            1.1003810167312622e-01 -3.3779421448707581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 407 2.4652799591422081e-02</internalNodes>\n          <leafValues>\n            4.5820660889148712e-02 -5.4710537195205688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 408 -2.3075740784406662e-02</internalNodes>\n          <leafValues>\n            -4.9801421165466309e-01 6.7044779658317566e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 409 1.1991280131042004e-02</internalNodes>\n          <leafValues>\n            -7.0877023041248322e-02 4.8294249176979065e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 410 1.5430679544806480e-02</internalNodes>\n          <leafValues>\n            -6.5949738025665283e-02 4.5236849784851074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 411 -4.5555769465863705e-03</internalNodes>\n          <leafValues>\n            -4.4665691256523132e-01 6.7877657711505890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 412 -4.4582979753613472e-03</internalNodes>\n          <leafValues>\n            3.3656919002532959e-01 -9.4792358577251434e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 413 1.3494009908754379e-04</internalNodes>\n          <leafValues>\n            -3.0288851261138916e-01 1.0293830186128616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 414 -4.2500188574194908e-03</internalNodes>\n          <leafValues>\n            4.2550128698348999e-01 -7.2956383228302002e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 415 -1.4293759595602751e-03</internalNodes>\n          <leafValues>\n            -3.0116760730743408e-01 9.0039253234863281e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 416 -6.3978550024330616e-03</internalNodes>\n          <leafValues>\n            4.1943550109863281e-01 -7.9320870339870453e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 417 2.6083870325237513e-03</internalNodes>\n          <leafValues>\n            8.3598926663398743e-02 -4.1897168755531311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 418 8.6870808154344559e-03</internalNodes>\n          <leafValues>\n            -6.3015699386596680e-02 5.2644741535186768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 419 -1.0380990570411086e-03</internalNodes>\n          <leafValues>\n            -3.6220151185989380e-01 8.0301038920879364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 420 4.4070050120353699e-01</internalNodes>\n          <leafValues>\n            3.4913059324026108e-02 -7.2764492034912109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 421 3.3689520787447691e-03</internalNodes>\n          <leafValues>\n            5.7332780212163925e-02 -4.8633271455764771e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 422 1.7443710239604115e-03</internalNodes>\n          <leafValues>\n            -1.0994660109281540e-01 2.7023580670356750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 423 5.3788698278367519e-04</internalNodes>\n          <leafValues>\n            -2.7439421415328979e-01 1.0063380002975464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 424 1.0072899749502540e-03</internalNodes>\n          <leafValues>\n            1.0756769776344299e-01 -2.3221600055694580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 425 -8.2518812268972397e-03</internalNodes>\n          <leafValues>\n            -6.5216302871704102e-01 3.5704229027032852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 426 3.5490558948367834e-03</internalNodes>\n          <leafValues>\n            -8.4254868328571320e-02 3.1767430901527405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 427 -1.1033359915018082e-02</internalNodes>\n          <leafValues>\n            4.1271620988845825e-01 -6.2587052583694458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 428 3.2278439030051231e-03</internalNodes>\n          <leafValues>\n            7.1266986429691315e-02 -4.1172251105308533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 429 1.7540389299392700e-01</internalNodes>\n          <leafValues>\n            3.4958980977535248e-02 -6.3775068521499634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 430 -4.8067080206237733e-04</internalNodes>\n          <leafValues>\n            -2.4503110349178314e-01 9.8930649459362030e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 431 -1.8284550169482827e-03</internalNodes>\n          <leafValues>\n            1.3486519455909729e-01 -1.9799900054931641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 432 1.7096720403060317e-03</internalNodes>\n          <leafValues>\n            -1.0525950044393539e-01 2.1005709469318390e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 433 3.9468301110900939e-04</internalNodes>\n          <leafValues>\n            8.0952547490596771e-02 -2.7405399084091187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 434 2.3097719531506300e-03</internalNodes>\n          <leafValues>\n            1.2338220328092575e-01 -1.9958800077438354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 435 3.1529190018773079e-03</internalNodes>\n          <leafValues>\n            -1.0612549632787704e-01 2.2089600563049316e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 436 -1.9097010372206569e-03</internalNodes>\n          <leafValues>\n            -2.5094708800315857e-01 8.7022580206394196e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 437 -1.2370609911158681e-03</internalNodes>\n          <leafValues>\n            3.0760520696640015e-01 -7.5937293469905853e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 438 3.7081091431900859e-04</internalNodes>\n          <leafValues>\n            -1.6065080463886261e-01 1.3480199873447418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 439 3.4268848598003387e-02</internalNodes>\n          <leafValues>\n            3.5260949283838272e-02 -6.3547158241271973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 440 4.6664681285619736e-03</internalNodes>\n          <leafValues>\n            -5.2494861185550690e-02 4.3242320418357849e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 441 1.0423569940030575e-02</internalNodes>\n          <leafValues>\n            5.1612429320812225e-02 -5.0745230913162231e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 442 1.1215180158615112e-02</internalNodes>\n          <leafValues>\n            -3.8614250719547272e-02 5.7645928859710693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 443 -7.3029109444178175e-06</internalNodes>\n          <leafValues>\n            1.2052319943904877e-01 -1.7274369299411774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 444 -4.9072802066802979e-03</internalNodes>\n          <leafValues>\n            -3.4818550944328308e-01 5.9116441756486893e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 445 1.9488829420879483e-03</internalNodes>\n          <leafValues>\n            -8.8861227035522461e-02 2.4020899832248688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 446 1.3313010276760906e-04</internalNodes>\n          <leafValues>\n            -1.4657719433307648e-01 1.9929920136928558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 447 -1.4298240421339869e-03</internalNodes>\n          <leafValues>\n            -3.9005228877067566e-01 5.9909418225288391e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 448 -6.4831459894776344e-03</internalNodes>\n          <leafValues>\n            1.8141369521617889e-01 -1.1655449867248535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 449 7.2958500823006034e-06</internalNodes>\n          <leafValues>\n            -1.8219240009784698e-01 1.1812780052423477e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 450 4.1690681246109307e-04</internalNodes>\n          <leafValues>\n            1.0591679811477661e-01 -2.0353710651397705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 451 5.1982058212161064e-03</internalNodes>\n          <leafValues>\n            -3.5962641239166260e-02 6.0264211893081665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 452 -4.0649957954883575e-03</internalNodes>\n          <leafValues>\n            2.0696419477462769e-01 -9.8599843680858612e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 453 -4.7734950203448534e-04</internalNodes>\n          <leafValues>\n            -2.4629549682140350e-01 9.3174271285533905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 454 5.2415160462260246e-03</internalNodes>\n          <leafValues>\n            3.6528520286083221e-02 -5.4934787750244141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 455 3.7873629480600357e-03</internalNodes>\n          <leafValues>\n            -5.7597089558839798e-02 3.8733980059623718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 456 -1.4434250260819681e-05</internalNodes>\n          <leafValues>\n            1.1292859911918640e-01 -1.7447079718112946e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 457 4.2011599987745285e-02</internalNodes>\n          <leafValues>\n            -4.6556860208511353e-02 4.5454800128936768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 458 7.9663433134555817e-03</internalNodes>\n          <leafValues>\n            4.2258739471435547e-02 -5.3702521324157715e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 459 5.3092982852831483e-04</internalNodes>\n          <leafValues>\n            -9.7918719053268433e-02 2.1795919537544250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 460 5.2906107157468796e-04</internalNodes>\n          <leafValues>\n            7.7961057424545288e-02 -2.8867539763450623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 461 -1.9556249678134918e-01</internalNodes>\n          <leafValues>\n            -7.6475739479064941e-01 2.7276000007987022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 462 -1.1559950187802315e-02</internalNodes>\n          <leafValues>\n            3.3526000380516052e-01 -6.3614986836910248e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 463 -1.4005659520626068e-01</internalNodes>\n          <leafValues>\n            -7.6232051849365234e-01 2.8024470433592796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 464 4.4643289584200829e-05</internalNodes>\n          <leafValues>\n            -2.0320929586887360e-01 9.9391698837280273e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 465 3.9411801844835281e-03</internalNodes>\n          <leafValues>\n            4.9936279654502869e-02 -3.7584540247917175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 466 -4.5965691097080708e-03</internalNodes>\n          <leafValues>\n            3.3031210303306580e-01 -6.3809931278228760e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 467 -6.9790292764082551e-04</internalNodes>\n          <leafValues>\n            1.6093710064888000e-01 -1.3192920386791229e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 468 6.1886821640655398e-04</internalNodes>\n          <leafValues>\n            7.4621193110942841e-02 -3.3021458983421326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 469 -3.2755140215158463e-02</internalNodes>\n          <leafValues>\n            -4.0643560886383057e-01 4.9308661371469498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 470 3.3697509206831455e-03</internalNodes>\n          <leafValues>\n            4.0627099573612213e-02 -4.9757328629493713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 471 3.7391821388155222e-04</internalNodes>\n          <leafValues>\n            -1.4931799471378326e-01 1.6517969965934753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 472 -4.0217190980911255e-03</internalNodes>\n          <leafValues>\n            2.9531970620155334e-01 -7.6642103493213654e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 473 -7.2943832492455840e-04</internalNodes>\n          <leafValues>\n            -2.7355810999870300e-01 7.9243987798690796e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 474 -5.7726111263036728e-03</internalNodes>\n          <leafValues>\n            3.4741240739822388e-01 -7.6087206602096558e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 475 -2.1122458856552839e-03</internalNodes>\n          <leafValues>\n            1.7290510237216949e-01 -1.2444470077753067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 476 4.4956691563129425e-03</internalNodes>\n          <leafValues>\n            3.0218729749321938e-02 -7.4003338813781738e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 477 -1.1419389629736543e-03</internalNodes>\n          <leafValues>\n            -2.3494489490985870e-01 7.6911546289920807e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 478 2.7658098842948675e-03</internalNodes>\n          <leafValues>\n            -9.1666661202907562e-02 2.1009710431098938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 479 -7.2281848406419158e-04</internalNodes>\n          <leafValues>\n            -2.5587469339370728e-01 7.5378142297267914e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 480 1.8604539800435305e-03</internalNodes>\n          <leafValues>\n            -9.4511069357395172e-02 1.9726920127868652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 481 -2.8568008565343916e-04</internalNodes>\n          <leafValues>\n            -2.1073310077190399e-01 9.7290039062500000e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 482 -3.8796100765466690e-02</internalNodes>\n          <leafValues>\n            -7.8724592924118042e-01 2.4410309270024300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 483 -1.2119869701564312e-02</internalNodes>\n          <leafValues>\n            3.6466810107231140e-01 -5.7907499372959137e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>93</maxWeakCount>\n      <stageThreshold>-1.6563049554824829e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 484 5.6008538231253624e-03</internalNodes>\n          <leafValues>\n            -3.8491588830947876e-01 3.3817461133003235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 485 -3.7205789703875780e-03</internalNodes>\n          <leafValues>\n            2.4614119529724121e-01 -3.0673781037330627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 486 -2.5333440862596035e-03</internalNodes>\n          <leafValues>\n            1.2531200051307678e-01 -4.2720189690589905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 487 -7.3425087612122297e-04</internalNodes>\n          <leafValues>\n            1.3314330577850342e-01 -3.5111570358276367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 488 -1.4792960428167135e-04</internalNodes>\n          <leafValues>\n            1.2545309960842133e-01 -3.8591191172599792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 489 -4.8976339399814606e-02</internalNodes>\n          <leafValues>\n            3.6456748843193054e-01 -1.1494780331850052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 490 1.0917349718511105e-03</internalNodes>\n          <leafValues>\n            7.9005338251590729e-02 -4.1399830579757690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 491 5.4457997903227806e-03</internalNodes>\n          <leafValues>\n            -1.1921840161085129e-01 3.3085560798645020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 492 1.5979419695213437e-03</internalNodes>\n          <leafValues>\n            4.1181199252605438e-02 -5.5028229951858521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 493 -1.3023250503465533e-03</internalNodes>\n          <leafValues>\n            8.2839436829090118e-02 -3.5719320178031921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 494 4.8810569569468498e-04</internalNodes>\n          <leafValues>\n            -2.0928630232810974e-01 1.4972810447216034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 495 2.1033850498497486e-03</internalNodes>\n          <leafValues>\n            5.1839418709278107e-02 -6.1099958419799805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 496 1.1984360404312611e-02</internalNodes>\n          <leafValues>\n            4.1022349148988724e-02 -5.8985722064971924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 497 -1.1898590251803398e-02</internalNodes>\n          <leafValues>\n            4.5844998955726624e-01 -6.4714707434177399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 498 5.3713661618530750e-03</internalNodes>\n          <leafValues>\n            -6.1560470610857010e-02 4.1204369068145752e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 499 4.3421140871942043e-03</internalNodes>\n          <leafValues>\n            6.0501661151647568e-02 -4.8703390359878540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 500 6.6142519935965538e-03</internalNodes>\n          <leafValues>\n            4.6873189508914948e-02 -5.0346171855926514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 501 1.2339729582890868e-03</internalNodes>\n          <leafValues>\n            -8.1538438796997070e-02 3.0428299307823181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 502 -1.2975660152733326e-02</internalNodes>\n          <leafValues>\n            -4.7834330797195435e-01 4.8681490123271942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 503 -1.7806360265240073e-03</internalNodes>\n          <leafValues>\n            3.7698730826377869e-01 -6.8126037716865540e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 504 7.8339744359254837e-03</internalNodes>\n          <leafValues>\n            5.4501280188560486e-02 -4.6738588809967041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 505 -6.0113701038062572e-03</internalNodes>\n          <leafValues>\n            5.4870051145553589e-01 -4.4434640556573868e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 506 -2.0694560371339321e-03</internalNodes>\n          <leafValues>\n            -3.7755548954010010e-01 6.4383402466773987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 507 4.7843591310083866e-03</internalNodes>\n          <leafValues>\n            4.6252150088548660e-02 -5.2633982896804810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 508 -6.2808818183839321e-03</internalNodes>\n          <leafValues>\n            3.9451861381530762e-01 -6.9051302969455719e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 509 1.6099009662866592e-03</internalNodes>\n          <leafValues>\n            -1.0316190123558044e-01 2.7321669459342957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 510 -8.2392559852451086e-04</internalNodes>\n          <leafValues>\n            -2.8039410710334778e-01 8.4601573646068573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 511 -1.0123319923877716e-02</internalNodes>\n          <leafValues>\n            3.3635950088500977e-01 -6.1322949826717377e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 512 1.0525720193982124e-02</internalNodes>\n          <leafValues>\n            4.6165600419044495e-02 -5.1672130823135376e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 513 -2.6774499565362930e-02</internalNodes>\n          <leafValues>\n            -5.0325971841812134e-01 3.9857819676399231e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 514 4.0248301811516285e-03</internalNodes>\n          <leafValues>\n            -6.1501380056142807e-02 3.6659809947013855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 515 -4.6271650353446603e-04</internalNodes>\n          <leafValues>\n            -2.6439830660820007e-01 8.1311263144016266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 516 -5.1834900659741834e-05</internalNodes>\n          <leafValues>\n            1.1154399812221527e-01 -2.0269370079040527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 517 4.8874281346797943e-03</internalNodes>\n          <leafValues>\n            -6.9644987583160400e-02 3.3612030744552612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 518 1.2638230621814728e-01</internalNodes>\n          <leafValues>\n            3.6813639104366302e-02 -6.5849918127059937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 519 -8.0248164013028145e-03</internalNodes>\n          <leafValues>\n            4.6601921319961548e-01 -4.8885859549045563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 520 -1.1518909595906734e-03</internalNodes>\n          <leafValues>\n            -4.0466758608818054e-01 5.8572851121425629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 521 9.8190037533640862e-04</internalNodes>\n          <leafValues>\n            -1.3197229802608490e-01 1.7744350433349609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 522 -1.9447980448603630e-02</internalNodes>\n          <leafValues>\n            -6.8489527702331543e-01 3.3834591507911682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 523 -7.2442039709130768e-06</internalNodes>\n          <leafValues>\n            1.1553110182285309e-01 -1.8726129829883575e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 524 -1.7039060592651367e-02</internalNodes>\n          <leafValues>\n            -3.5105291008949280e-01 6.7737713456153870e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 525 1.1186580173671246e-02</internalNodes>\n          <leafValues>\n            -9.3420043587684631e-02 2.1077099442481995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 526 7.6585268834605813e-04</internalNodes>\n          <leafValues>\n            6.5965756773948669e-02 -3.2127881050109863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 527 1.4231950626708567e-04</internalNodes>\n          <leafValues>\n            -1.5460130572319031e-01 1.3757640123367310e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 528 -5.5553209967911243e-03</internalNodes>\n          <leafValues>\n            3.1319350004196167e-01 -6.4753532409667969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 529 1.2308239820413291e-04</internalNodes>\n          <leafValues>\n            9.7666621208190918e-02 -2.2251069545745850e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 530 -1.6092039877548814e-03</internalNodes>\n          <leafValues>\n            -3.6215591430664062e-01 6.4452558755874634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 531 -1.5626100357621908e-03</internalNodes>\n          <leafValues>\n            2.2588780522346497e-01 -9.5551103353500366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 532 -5.0116342026740313e-04</internalNodes>\n          <leafValues>\n            -2.2289219498634338e-01 8.9174531400203705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 533 3.7322030402719975e-04</internalNodes>\n          <leafValues>\n            9.1969013214111328e-02 -2.1129919588565826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 534 -2.2882660850882530e-03</internalNodes>\n          <leafValues>\n            3.8989049196243286e-01 -5.3455859422683716e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 535 -4.6884030103683472e-02</internalNodes>\n          <leafValues>\n            -6.2357091903686523e-01 3.2194521278142929e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 536 1.8901260336861014e-03</internalNodes>\n          <leafValues>\n            -7.2615146636962891e-02 2.7420088648796082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 537 1.5805330127477646e-02</internalNodes>\n          <leafValues>\n            2.8601830825209618e-02 -6.9608169794082642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 538 3.2644178718328476e-02</internalNodes>\n          <leafValues>\n            -4.0772251784801483e-02 5.0873398780822754e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 539 6.5482832724228501e-04</internalNodes>\n          <leafValues>\n            8.5724912583827972e-02 -2.7580630779266357e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 540 -1.1142930015921593e-02</internalNodes>\n          <leafValues>\n            8.7326012551784515e-02 -2.0914819836616516e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 541 -5.8072229148820043e-04</internalNodes>\n          <leafValues>\n            -2.9471421241760254e-01 6.6337890923023224e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 542 -7.4414577102288604e-04</internalNodes>\n          <leafValues>\n            1.8017959594726562e-01 -1.0654629766941071e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 543 7.6460661366581917e-03</internalNodes>\n          <leafValues>\n            -6.3608147203922272e-02 3.1582340598106384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 544 3.2617211341857910e-02</internalNodes>\n          <leafValues>\n            3.2606441527605057e-02 -6.0541188716888428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 545 -3.4527231007814407e-02</internalNodes>\n          <leafValues>\n            -5.9770858287811279e-01 2.7888769283890724e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 546 3.2211719080805779e-03</internalNodes>\n          <leafValues>\n            -4.9183920025825500e-02 4.0305620431900024e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 547 -4.1549839079380035e-04</internalNodes>\n          <leafValues>\n            1.3533140718936920e-01 -1.5845330059528351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 548 2.5140501093119383e-03</internalNodes>\n          <leafValues>\n            6.3218571245670319e-02 -3.0768528580665588e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 549 -2.0818209648132324e-01</internalNodes>\n          <leafValues>\n            -7.5750261545181274e-01 2.2695960476994514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 550 -2.6067279279232025e-02</internalNodes>\n          <leafValues>\n            -7.4959957599639893e-01 1.9375480711460114e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 551 -5.8264029212296009e-04</internalNodes>\n          <leafValues>\n            9.4658233225345612e-02 -1.9919820129871368e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 552 -3.2769259996712208e-03</internalNodes>\n          <leafValues>\n            1.6214330494403839e-01 -1.2322030216455460e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 553 1.3998829526826739e-03</internalNodes>\n          <leafValues>\n            -1.0849200189113617e-01 2.3151659965515137e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 554 -1.2055980041623116e-02</internalNodes>\n          <leafValues>\n            -2.4002850055694580e-01 9.3272961676120758e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 555 3.1805539038032293e-03</internalNodes>\n          <leafValues>\n            7.6264120638370514e-02 -2.5435069203376770e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 556 -1.0693799704313278e-03</internalNodes>\n          <leafValues>\n            2.2258889675140381e-01 -9.0730242431163788e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 557 -2.9467688873410225e-03</internalNodes>\n          <leafValues>\n            -3.4242698550224304e-01 6.0581039637327194e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 558 8.8108901400119066e-04</internalNodes>\n          <leafValues>\n            -7.8326202929019928e-02 2.6911988854408264e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 559 2.8118939371779561e-04</internalNodes>\n          <leafValues>\n            9.8370827734470367e-02 -2.1947909891605377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 560 -1.8574869260191917e-02</internalNodes>\n          <leafValues>\n            2.6729720830917358e-01 -7.1240752935409546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 561 -2.4810349568724632e-02</internalNodes>\n          <leafValues>\n            -6.8322032690048218e-01 2.9446309432387352e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 562 2.8904930222779512e-03</internalNodes>\n          <leafValues>\n            7.6161012053489685e-02 -2.4025200307369232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 563 3.5410430282354355e-03</internalNodes>\n          <leafValues>\n            -1.0742089897394180e-01 1.8509419262409210e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 564 -8.4244477329775691e-04</internalNodes>\n          <leafValues>\n            1.8727229535579681e-01 -1.1407770216464996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 565 -2.5338360574096441e-03</internalNodes>\n          <leafValues>\n            -3.5870191454887390e-01 5.1251661032438278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 566 1.9654980860650539e-03</internalNodes>\n          <leafValues>\n            -1.4064720273017883e-01 1.3041019439697266e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 567 3.1574100255966187e-01</internalNodes>\n          <leafValues>\n            2.9550969600677490e-02 -6.3157892227172852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 568 -2.9846638790331781e-04</internalNodes>\n          <leafValues>\n            -2.2911080718040466e-01 7.8875422477722168e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 569 -1.1545480042695999e-01</internalNodes>\n          <leafValues>\n            -8.1895941495895386e-01 2.2261450067162514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 570 -3.5817299038171768e-02</internalNodes>\n          <leafValues>\n            -3.0612939596176147e-01 6.0644190758466721e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 571 1.7071690410375595e-02</internalNodes>\n          <leafValues>\n            -6.1134841293096542e-02 3.2152679562568665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 572 -2.1385080181062222e-03</internalNodes>\n          <leafValues>\n            -5.4798161983489990e-01 3.8667369633913040e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 573 6.5424457192420959e-02</internalNodes>\n          <leafValues>\n            1.7884260043501854e-02 -8.5628831386566162e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 574 -1.3419929891824722e-02</internalNodes>\n          <leafValues>\n            3.0995100736618042e-01 -6.7559666931629181e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 575 1.8939709290862083e-02</internalNodes>\n          <leafValues>\n            2.8729729354381561e-02 -7.5338190793991089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 576 -2.9120460152626038e-02</internalNodes>\n          <leafValues>\n            -7.3594617843627930e-01 2.0359549671411514e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>79</maxWeakCount>\n      <stageThreshold>-1.5920439958572388e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 577 -1.3419030234217644e-02</internalNodes>\n          <leafValues>\n            3.0538010597229004e-01 -4.1782331466674805e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 578 1.7404999816790223e-03</internalNodes>\n          <leafValues>\n            -2.7101579308509827e-01 3.5409560799598694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 579 7.7174860052764416e-03</internalNodes>\n          <leafValues>\n            -3.1271371245384216e-01 2.1189980208873749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 580 -1.4514879694615956e-05</internalNodes>\n          <leafValues>\n            1.6157090663909912e-01 -3.3522731065750122e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 581 -1.4871519852022175e-05</internalNodes>\n          <leafValues>\n            1.4571620523929596e-01 -2.9369521141052246e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 582 1.5004149463493377e-04</internalNodes>\n          <leafValues>\n            -4.0149879455566406e-01 1.0407949984073639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 583 1.8634879961609840e-03</internalNodes>\n          <leafValues>\n            4.9062840640544891e-02 -6.5208268165588379e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 584 -2.9590800404548645e-03</internalNodes>\n          <leafValues>\n            2.8804430365562439e-01 -1.3293409347534180e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 585 3.3067780896089971e-04</internalNodes>\n          <leafValues>\n            3.9615370333194733e-02 -4.1540861129760742e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 586 -1.6816710121929646e-03</internalNodes>\n          <leafValues>\n            1.3032579421997070e-01 -2.3237510025501251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 587 3.4896740689873695e-03</internalNodes>\n          <leafValues>\n            6.8852916359901428e-02 -4.7176009416580200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 588 1.6204500570893288e-03</internalNodes>\n          <leafValues>\n            -1.0996960103511810e-01 3.4887188673019409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 589 1.9125849939882755e-04</internalNodes>\n          <leafValues>\n            -2.0317320525646210e-01 1.4775620400905609e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 590 2.2485259920358658e-02</internalNodes>\n          <leafValues>\n            5.1929730921983719e-02 -5.4815691709518433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 591 1.0035949759185314e-02</internalNodes>\n          <leafValues>\n            -1.0943319648504257e-01 2.6000571250915527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 592 4.0091630071401596e-02</internalNodes>\n          <leafValues>\n            3.8657050579786301e-02 -7.4724602699279785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 593 1.5319019556045532e-02</internalNodes>\n          <leafValues>\n            2.8579369187355042e-02 -7.7717798948287964e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 594 9.0913427993655205e-04</internalNodes>\n          <leafValues>\n            -1.5049549937248230e-01 1.7363379895687103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 595 -6.0226190835237503e-03</internalNodes>\n          <leafValues>\n            -4.7704491019248962e-01 5.8185670524835587e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 596 7.8066787682473660e-04</internalNodes>\n          <leafValues>\n            -1.6349339485168457e-01 1.6236920654773712e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 597 -1.1492020450532436e-02</internalNodes>\n          <leafValues>\n            -5.6185477972030640e-01 4.6009611338376999e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 598 8.9691327884793282e-03</internalNodes>\n          <leafValues>\n            6.6570483148097992e-02 -3.3824840188026428e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 599 7.2241941234096885e-04</internalNodes>\n          <leafValues>\n            -1.2882669270038605e-01 1.9002969563007355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 600 1.4879239643050823e-05</internalNodes>\n          <leafValues>\n            -2.1765929460525513e-01 1.3151009380817413e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 601 8.7159732356667519e-03</internalNodes>\n          <leafValues>\n            4.8188239336013794e-02 -5.2367717027664185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 602 -1.3809900265187025e-03</internalNodes>\n          <leafValues>\n            -3.1734630465507507e-01 6.7012362182140350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 603 1.4004110358655453e-02</internalNodes>\n          <leafValues>\n            -7.2155177593231201e-02 3.4900391101837158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 604 -1.2883460149168968e-02</internalNodes>\n          <leafValues>\n            -5.9674298763275146e-01 3.9219990372657776e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 605 9.9220760166645050e-03</internalNodes>\n          <leafValues>\n            -7.3617048561573029e-02 3.5491651296615601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 606 -1.0360360145568848e-02</internalNodes>\n          <leafValues>\n            -4.9655780196189880e-01 5.4516721516847610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 607 5.9103948296979070e-04</internalNodes>\n          <leafValues>\n            -9.1649092733860016e-02 2.3738409578800201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 608 1.4986419955675956e-05</internalNodes>\n          <leafValues>\n            -1.5624360740184784e-01 1.4216689765453339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 609 6.2526292167603970e-03</internalNodes>\n          <leafValues>\n            4.6570941805839539e-02 -4.3861261010169983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 610 9.0722978115081787e-02</internalNodes>\n          <leafValues>\n            2.3544119670987129e-02 -7.5557678937911987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 611 1.2880839640274644e-03</internalNodes>\n          <leafValues>\n            -1.0999819636344910e-01 1.9954189658164978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 612 -5.3202832350507379e-04</internalNodes>\n          <leafValues>\n            -2.3681020736694336e-01 9.4349831342697144e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 613 1.4669039519503713e-03</internalNodes>\n          <leafValues>\n            -6.0417938977479935e-02 3.5437929630279541e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 614 2.5929270312190056e-02</internalNodes>\n          <leafValues>\n            3.0205380171537399e-02 -7.1175122261047363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 615 -7.2257839143276215e-02</internalNodes>\n          <leafValues>\n            -7.6830059289932251e-01 2.2078540176153183e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 616 -2.5999830104410648e-03</internalNodes>\n          <leafValues>\n            2.2878250479698181e-01 -9.2575646936893463e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 617 4.2036110162734985e-01</internalNodes>\n          <leafValues>\n            3.4129150211811066e-02 -6.3944667577743530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 618 -2.1722039673477411e-03</internalNodes>\n          <leafValues>\n            -2.0458799600601196e-01 9.6727348864078522e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 619 -1.8573250621557236e-02</internalNodes>\n          <leafValues>\n            -7.2321742773056030e-01 2.6587400585412979e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 620 2.1321140229701996e-03</internalNodes>\n          <leafValues>\n            -7.9263173043727875e-02 2.9004418849945068e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 621 1.4585970347980037e-05</internalNodes>\n          <leafValues>\n            -1.5812200307846069e-01 1.2857919931411743e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 622 -2.5919941067695618e-01</internalNodes>\n          <leafValues>\n            -8.3206391334533691e-01 2.1327629685401917e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 623 -1.2713880278170109e-02</internalNodes>\n          <leafValues>\n            -4.8670661449432373e-01 3.5282909870147705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 624 2.1182969212532043e-03</internalNodes>\n          <leafValues>\n            -4.8141859471797943e-02 4.3498820066452026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 625 4.9225408583879471e-03</internalNodes>\n          <leafValues>\n            5.9389010071754456e-02 -3.5719910264015198e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 626 7.1720690466463566e-03</internalNodes>\n          <leafValues>\n            -7.2721220552921295e-02 3.1716778874397278e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 627 1.5319329686462879e-03</internalNodes>\n          <leafValues>\n            7.6105281710624695e-02 -2.9826408624649048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 628 -2.6141680777072906e-02</internalNodes>\n          <leafValues>\n            -4.8129829764366150e-01 4.1991200298070908e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 629 -7.1861818469187710e-06</internalNodes>\n          <leafValues>\n            1.0385909676551819e-01 -2.5540891289710999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 630 -5.8513309340924025e-04</internalNodes>\n          <leafValues>\n            2.1552430093288422e-01 -1.0446780174970627e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 631 7.3564669582992792e-04</internalNodes>\n          <leafValues>\n            8.2850307226181030e-02 -2.3229689896106720e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 632 -4.4216000242158771e-04</internalNodes>\n          <leafValues>\n            1.9849689304828644e-01 -1.1084359884262085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 633 6.6545000299811363e-03</internalNodes>\n          <leafValues>\n            2.9844839125871658e-02 -6.3819402456283569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 634 -1.4856060261081439e-05</internalNodes>\n          <leafValues>\n            1.0647810250520706e-01 -1.6304740309715271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 635 4.4933347962796688e-03</internalNodes>\n          <leafValues>\n            -5.8312181383371353e-02 3.2200211286544800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 636 3.8110970053821802e-03</internalNodes>\n          <leafValues>\n            7.1237437427043915e-02 -2.7149480581283569e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 637 -3.8309019058942795e-02</internalNodes>\n          <leafValues>\n            -6.2387478351593018e-01 2.9790399596095085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 638 -2.5534629821777344e-03</internalNodes>\n          <leafValues>\n            2.0947620272636414e-01 -9.3472570180892944e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 639 -2.9908109354437329e-05</internalNodes>\n          <leafValues>\n            1.4771899580955505e-01 -1.2858720123767853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 640 2.0549520850181580e-03</internalNodes>\n          <leafValues>\n            -9.3603983521461487e-02 2.1911169588565826e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 641 3.3064800663851202e-04</internalNodes>\n          <leafValues>\n            -1.4430660009384155e-01 1.6905060410499573e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 642 4.0969369001686573e-04</internalNodes>\n          <leafValues>\n            8.9844956994056702e-02 -2.1793210506439209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 643 -5.1680381875485182e-04</internalNodes>\n          <leafValues>\n            -2.7330860495567322e-01 7.2490707039833069e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 644 -1.2285299599170685e-02</internalNodes>\n          <leafValues>\n            -5.7899951934814453e-01 2.8828129172325134e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 645 1.4923219569027424e-03</internalNodes>\n          <leafValues>\n            -8.9748427271842957e-02 2.1315790712833405e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 646 3.7809570785611868e-03</internalNodes>\n          <leafValues>\n            5.6869130581617355e-02 -3.2580479979515076e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 647 -1.3630799949169159e-01</internalNodes>\n          <leafValues>\n            -5.1958292722702026e-01 3.4014869481325150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 648 2.1192250773310661e-02</internalNodes>\n          <leafValues>\n            -5.9815749526023865e-02 4.3134000897407532e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 649 -2.2501780185848475e-03</internalNodes>\n          <leafValues>\n            -3.2725110650062561e-01 6.9494038820266724e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 650 -1.3309439644217491e-02</internalNodes>\n          <leafValues>\n            5.5684721469879150e-01 -3.8055110722780228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 651 -4.8674400895833969e-02</internalNodes>\n          <leafValues>\n            3.7503889203071594e-01 -4.8045299947261810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 652 -1.4651560377387796e-05</internalNodes>\n          <leafValues>\n            9.3043543398380280e-02 -2.2984559834003448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 653 -7.7605661936104298e-03</internalNodes>\n          <leafValues>\n            3.8858211040496826e-01 -5.4669309407472610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 654 2.4429330602288246e-02</internalNodes>\n          <leafValues>\n            4.5898649841547012e-02 -5.1061111688613892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 655 -2.1317049686331302e-04</internalNodes>\n          <leafValues>\n            -2.0513610541820526e-01 1.0507310181856155e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>105</maxWeakCount>\n      <stageThreshold>-1.6632529497146606e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 656 -5.7014292106032372e-03</internalNodes>\n          <leafValues>\n            2.7576211094856262e-01 -3.3123719692230225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 657 -4.4359369203448296e-03</internalNodes>\n          <leafValues>\n            1.5587480366230011e-01 -5.0288617610931396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 658 -5.0388257950544357e-03</internalNodes>\n          <leafValues>\n            1.6109010577201843e-01 -3.5196068882942200e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 659 8.0847437493503094e-04</internalNodes>\n          <leafValues>\n            -3.3315700292587280e-01 1.4446459710597992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 660 2.1605329588055611e-02</internalNodes>\n          <leafValues>\n            -8.6723573505878448e-02 5.9101939201354980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 661 -1.8266839906573296e-02</internalNodes>\n          <leafValues>\n            5.0261861085891724e-01 -8.4620863199234009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 662 -8.3384668687358499e-04</internalNodes>\n          <leafValues>\n            -3.0832511186599731e-01 1.1352760344743729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 663 -1.5336600132286549e-02</internalNodes>\n          <leafValues>\n            -6.8610608577728271e-01 3.3057838678359985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 664 -5.0607877783477306e-03</internalNodes>\n          <leafValues>\n            3.4399279952049255e-01 -9.2118233442306519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 665 -1.4741700397280511e-05</internalNodes>\n          <leafValues>\n            1.1778169870376587e-01 -2.5235179066658020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 666 -1.1485730065032840e-03</internalNodes>\n          <leafValues>\n            -2.9050019383430481e-01 8.3533048629760742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 667 2.8824089094996452e-03</internalNodes>\n          <leafValues>\n            -9.0674236416816711e-02 3.1274148821830750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 668 -2.9224360361695290e-02</internalNodes>\n          <leafValues>\n            -6.9156378507614136e-01 3.3279780298471451e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 669 2.1423520520329475e-03</internalNodes>\n          <leafValues>\n            -1.0087729990482330e-01 2.4603089690208435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 670 -3.3471059054136276e-02</internalNodes>\n          <leafValues>\n            -5.0953942537307739e-01 5.5052071809768677e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 671 1.4763450053578708e-05</internalNodes>\n          <leafValues>\n            -1.7823149263858795e-01 1.2816399335861206e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 672 1.6341559588909149e-02</internalNodes>\n          <leafValues>\n            -1.3254739344120026e-01 1.9663499295711517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 673 2.2475779987871647e-03</internalNodes>\n          <leafValues>\n            7.9048447310924530e-02 -2.9476320743560791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 674 4.6113221906125546e-03</internalNodes>\n          <leafValues>\n            -7.6338447630405426e-02 3.2394409179687500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 675 2.8979079797863960e-03</internalNodes>\n          <leafValues>\n            -1.0839050263166428e-01 2.6353389024734497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 676 1.3482819776982069e-03</internalNodes>\n          <leafValues>\n            7.9134561121463776e-02 -3.4839859604835510e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 677 4.6576592139899731e-03</internalNodes>\n          <leafValues>\n            7.6356090605258942e-02 -3.1110540032386780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 678 -3.9915097877383232e-03</internalNodes>\n          <leafValues>\n            -3.4151628613471985e-01 8.2623466849327087e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 679 6.0268798843026161e-03</internalNodes>\n          <leafValues>\n            -9.6277832984924316e-02 2.6347661018371582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 680 -4.1388701647520065e-03</internalNodes>\n          <leafValues>\n            2.3571729660034180e-01 -9.4335287809371948e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 681 -1.0371750220656395e-02</internalNodes>\n          <leafValues>\n            -7.2972798347473145e-01 3.3645220100879669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 682 1.0373629629611969e-01</internalNodes>\n          <leafValues>\n            3.1347069889307022e-02 -5.8245128393173218e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 683 -1.8832299974747002e-04</internalNodes>\n          <leafValues>\n            1.6663299500942230e-01 -1.3723160326480865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 684 -6.0749921249225736e-04</internalNodes>\n          <leafValues>\n            -2.7257540822029114e-01 8.1483371555805206e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 685 2.3499270901083946e-03</internalNodes>\n          <leafValues>\n            -1.0285440087318420e-01 2.1854889392852783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 686 -3.1354159582406282e-03</internalNodes>\n          <leafValues>\n            -4.9246039986610413e-01 4.4747360050678253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 687 1.5564589994028211e-03</internalNodes>\n          <leafValues>\n            5.3096260875463486e-02 -4.0526211261749268e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 688 6.3236099667847157e-03</internalNodes>\n          <leafValues>\n            -7.9116806387901306e-02 2.8413718938827515e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 689 -4.8074051737785339e-03</internalNodes>\n          <leafValues>\n            2.9990258812904358e-01 -8.2824081182479858e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 690 7.6432302594184875e-02</internalNodes>\n          <leafValues>\n            3.9146371185779572e-02 -5.7314342260360718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 691 7.0249952841550112e-04</internalNodes>\n          <leafValues>\n            5.2832871675491333e-02 -3.3245471119880676e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 692 -8.2157138967886567e-04</internalNodes>\n          <leafValues>\n            -2.1230019629001617e-01 8.8145829737186432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 693 -1.0148280300199986e-02</internalNodes>\n          <leafValues>\n            -2.2071610391139984e-01 9.6597403287887573e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 694 -1.7348809540271759e-01</internalNodes>\n          <leafValues>\n            -5.9822201728820801e-01 3.2547060400247574e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 695 4.3031540699303150e-03</internalNodes>\n          <leafValues>\n            -6.8253546953201294e-02 2.8981029987335205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 696 -7.3378678280278109e-06</internalNodes>\n          <leafValues>\n            7.5155563652515411e-02 -2.5863590836524963e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 697 1.9277239916846156e-03</internalNodes>\n          <leafValues>\n            1.0856460034847260e-01 -1.6595140099525452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 698 -4.2054480873048306e-03</internalNodes>\n          <leafValues>\n            1.9811309874057770e-01 -9.1941706836223602e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 699 1.1466189753264189e-03</internalNodes>\n          <leafValues>\n            4.2078729718923569e-02 -4.3991029262542725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 700 -6.7244949750602245e-03</internalNodes>\n          <leafValues>\n            3.4456861019134521e-01 -5.7096958160400391e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 701 -1.4554189874615986e-05</internalNodes>\n          <leafValues>\n            1.1632560193538666e-01 -1.6252210736274719e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 702 -2.6114559732377529e-03</internalNodes>\n          <leafValues>\n            2.8084969520568848e-01 -6.8243041634559631e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 703 -1.9477460591588169e-04</internalNodes>\n          <leafValues>\n            -1.9368860125541687e-01 9.3413226306438446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 704 2.6438338682055473e-04</internalNodes>\n          <leafValues>\n            9.9354371428489685e-02 -2.1586629748344421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 705 2.0134719088673592e-03</internalNodes>\n          <leafValues>\n            -6.1209201812744141e-02 2.9120978713035583e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 706 -2.6024359464645386e-01</internalNodes>\n          <leafValues>\n            -8.3802181482315063e-01 2.1150760352611542e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 707 -1.5944700688123703e-02</internalNodes>\n          <leafValues>\n            -6.3974797725677490e-01 2.2144839167594910e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 708 6.7249889252707362e-04</internalNodes>\n          <leafValues>\n            -1.4014090597629547e-01 1.2326350063085556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 709 1.3042770326137543e-02</internalNodes>\n          <leafValues>\n            2.4306889623403549e-02 -6.6303068399429321e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 710 -1.4540290067088790e-05</internalNodes>\n          <leafValues>\n            9.0137362480163574e-02 -1.7409169673919678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 711 1.7920829355716705e-02</internalNodes>\n          <leafValues>\n            2.5644620880484581e-02 -6.5067142248153687e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 712 1.6542300581932068e-03</internalNodes>\n          <leafValues>\n            -1.0385700315237045e-01 1.6688160598278046e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 713 3.5362090915441513e-02</internalNodes>\n          <leafValues>\n            2.3093009367585182e-02 -6.9009417295455933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 714 3.3049840567400679e-05</internalNodes>\n          <leafValues>\n            -1.7408940196037292e-01 9.3873098492622375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 715 3.3775588963180780e-03</internalNodes>\n          <leafValues>\n            -5.8522459119558334e-02 3.0490559339523315e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 716 7.3239738121628761e-03</internalNodes>\n          <leafValues>\n            4.0999408811330795e-02 -4.6160981059074402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 717 -2.9797051101922989e-03</internalNodes>\n          <leafValues>\n            5.1136761903762817e-01 -3.6246869713068008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 718 2.0306499209254980e-03</internalNodes>\n          <leafValues>\n            6.5309353172779083e-02 -2.6698499917984009e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 719 -6.8856950383633375e-04</internalNodes>\n          <leafValues>\n            -1.7604120075702667e-01 9.9361896514892578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 720 1.5746579738333821e-03</internalNodes>\n          <leafValues>\n            -1.0312269628047943e-01 1.6940550506114960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 721 1.5011089853942394e-03</internalNodes>\n          <leafValues>\n            -8.8128447532653809e-02 1.8899090588092804e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 722 1.3503979425877333e-04</internalNodes>\n          <leafValues>\n            9.4145476818084717e-02 -1.8483440577983856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 723 5.5570588447153568e-03</internalNodes>\n          <leafValues>\n            2.9959060251712799e-02 -5.5482620000839233e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 724 9.4529995694756508e-03</internalNodes>\n          <leafValues>\n            -5.3136389702558517e-02 4.0138289332389832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 725 -6.1030662618577480e-04</internalNodes>\n          <leafValues>\n            -2.7060449123382568e-01 6.6881351172924042e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 726 -1.1329240351915359e-01</internalNodes>\n          <leafValues>\n            -6.5178507566452026e-01 2.5042990222573280e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 727 -2.0354389562271535e-04</internalNodes>\n          <leafValues>\n            1.0892420262098312e-01 -1.5174369513988495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 728 -1.4983189757913351e-03</internalNodes>\n          <leafValues>\n            2.7388730645179749e-01 -5.8467049151659012e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 729 7.5277159921824932e-03</internalNodes>\n          <leafValues>\n            4.0991529822349548e-02 -4.2739889025688171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 730 3.6209179088473320e-03</internalNodes>\n          <leafValues>\n            -6.7309238016605377e-02 2.6064750552177429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 731 1.2153049930930138e-02</internalNodes>\n          <leafValues>\n            5.0768271088600159e-02 -3.8319081068038940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 732 4.6126339584589005e-02</internalNodes>\n          <leafValues>\n            2.4232989177107811e-02 -6.5039527416229248e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 733 7.1408541407436132e-04</internalNodes>\n          <leafValues>\n            -1.3476370275020599e-01 1.2208549678325653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 734 -4.4331620447337627e-03</internalNodes>\n          <leafValues>\n            1.9939610362052917e-01 -1.0218709707260132e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 735 1.3099729549139738e-03</internalNodes>\n          <leafValues>\n            7.4517026543617249e-02 -2.4503719806671143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 736 2.6161450659856200e-04</internalNodes>\n          <leafValues>\n            -8.4287956357002258e-02 1.9924600422382355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 737 -2.7577539440244436e-03</internalNodes>\n          <leafValues>\n            -6.8734467029571533e-01 2.4851109832525253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 738 6.9469690322875977e-02</internalNodes>\n          <leafValues>\n            3.8438729941844940e-02 -3.9717179536819458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 739 -1.3031469425186515e-03</internalNodes>\n          <leafValues>\n            2.0089949667453766e-01 -9.1723307967185974e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 740 1.3012000126764178e-03</internalNodes>\n          <leafValues>\n            -9.5305852591991425e-02 1.9248190522193909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 741 -3.9377259090542793e-03</internalNodes>\n          <leafValues>\n            -3.9224091172218323e-01 4.3738011270761490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 742 9.6125707030296326e-02</internalNodes>\n          <leafValues>\n            -4.3269440531730652e-02 3.7441849708557129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 743 -1.9181859493255615e-01</internalNodes>\n          <leafValues>\n            -6.1320561170578003e-01 2.8775539249181747e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 744 -3.2945619896054268e-03</internalNodes>\n          <leafValues>\n            -2.2446820139884949e-01 7.7655017375946045e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 745 -8.5190916433930397e-03</internalNodes>\n          <leafValues>\n            4.4720551371574402e-01 -4.1310388594865799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 746 -4.9431469291448593e-02</internalNodes>\n          <leafValues>\n            -5.1819682121276855e-01 3.6863740533590317e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 747 2.3110879585146904e-02</internalNodes>\n          <leafValues>\n            -3.3078420907258987e-02 5.9146630764007568e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 748 -4.3400399590609595e-05</internalNodes>\n          <leafValues>\n            1.1395029723644257e-01 -1.9526299834251404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 749 5.4926839657127857e-03</internalNodes>\n          <leafValues>\n            6.1616070568561554e-02 -2.5591990351676941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 750 1.1886029969900846e-03</internalNodes>\n          <leafValues>\n            -6.8509116768836975e-02 2.4291250109672546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 751 8.8473428040742874e-03</internalNodes>\n          <leafValues>\n            7.6467283070087433e-02 -2.3176389932632446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 752 2.3952820338308811e-03</internalNodes>\n          <leafValues>\n            -4.4620860368013382e-02 4.5811769366264343e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 753 -1.5011220239102840e-04</internalNodes>\n          <leafValues>\n            -1.6560749709606171e-01 1.0622239857912064e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 754 -2.3465899750590324e-02</internalNodes>\n          <leafValues>\n            -2.4931310117244720e-01 6.6179357469081879e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 755 -6.6368370316922665e-03</internalNodes>\n          <leafValues>\n            1.4358420670032501e-01 -1.1510509997606277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 756 1.1986029567196965e-03</internalNodes>\n          <leafValues>\n            -9.8347522318363190e-02 1.7605540156364441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 757 7.9502072185277939e-03</internalNodes>\n          <leafValues>\n            3.5481378436088562e-02 -5.0176638364791870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 758 -4.5950649655424058e-04</internalNodes>\n          <leafValues>\n            -1.6928760707378387e-01 9.3400083482265472e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 759 -1.9301069900393486e-02</internalNodes>\n          <leafValues>\n            4.1836661100387573e-01 -5.1140110939741135e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 760 4.0163499116897583e-01</internalNodes>\n          <leafValues>\n            2.9358919709920883e-02 -6.4768058061599731e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>114</maxWeakCount>\n      <stageThreshold>-1.5384509563446045e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 761 -3.6284290254116058e-02</internalNodes>\n          <leafValues>\n            4.2841899394989014e-01 -2.5840431451797485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 762 3.0520830303430557e-02</internalNodes>\n          <leafValues>\n            -2.9715040326118469e-01 2.1756610274314880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 763 3.3444820437580347e-03</internalNodes>\n          <leafValues>\n            -2.1734359860420227e-01 1.9754439592361450e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 764 -1.3315919786691666e-03</internalNodes>\n          <leafValues>\n            1.5535929799079895e-01 -2.3133680224418640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 765 -1.9773480016738176e-03</internalNodes>\n          <leafValues>\n            -4.2001301050186157e-01 8.8554427027702332e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 766 -3.7038238951936364e-04</internalNodes>\n          <leafValues>\n            1.2769789993762970e-01 -2.3879130184650421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 767 -7.3736459016799927e-03</internalNodes>\n          <leafValues>\n            -4.0720060467720032e-01 2.9765319079160690e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 768 -2.1873020159546286e-05</internalNodes>\n          <leafValues>\n            1.2338209897279739e-01 -2.2237089276313782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 769 4.5575048716273159e-05</internalNodes>\n          <leafValues>\n            -2.3092910647392273e-01 1.2953619658946991e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 770 -1.1247170157730579e-02</internalNodes>\n          <leafValues>\n            -5.4762738943099976e-01 4.1907660663127899e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 771 -8.9430268853902817e-03</internalNodes>\n          <leafValues>\n            2.7945289015769958e-01 -9.0801216661930084e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 772 1.4646670024376363e-05</internalNodes>\n          <leafValues>\n            -1.6777880489826202e-01 1.4968040585517883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 773 -6.5398351289331913e-03</internalNodes>\n          <leafValues>\n            3.3654621243476868e-01 -7.1987256407737732e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 774 3.3825531136244535e-03</internalNodes>\n          <leafValues>\n            4.9931880086660385e-02 -4.5806300640106201e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 775 2.7450500056147575e-03</internalNodes>\n          <leafValues>\n            3.6119509488344193e-02 -5.7113862037658691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 776 1.0356379672884941e-02</internalNodes>\n          <leafValues>\n            -5.3049158304929733e-02 4.2121198773384094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 777 3.1687319278717041e-03</internalNodes>\n          <leafValues>\n            6.2849938869476318e-02 -3.4674918651580811e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 778 1.3616570504382253e-03</internalNodes>\n          <leafValues>\n            -9.0661056339740753e-02 2.5257480144500732e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 779 -2.2238260135054588e-03</internalNodes>\n          <leafValues>\n            2.6595190167427063e-01 -9.6649080514907837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 780 1.1090899817645550e-02</internalNodes>\n          <leafValues>\n            8.6638063192367554e-02 -3.0103358626365662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 781 -6.7766150459647179e-04</internalNodes>\n          <leafValues>\n            9.4277828931808472e-02 -2.1464149653911591e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 782 -3.3104580361396074e-03</internalNodes>\n          <leafValues>\n            -5.9162640571594238e-01 3.2738488167524338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 783 2.3221869487315416e-03</internalNodes>\n          <leafValues>\n            -9.5557250082492828e-02 2.0546199381351471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 784 3.0947118648327887e-04</internalNodes>\n          <leafValues>\n            -1.2992270290851593e-01 1.7704719305038452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 785 -3.2214168459177017e-02</internalNodes>\n          <leafValues>\n            -6.4662492275238037e-01 3.1749259680509567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 786 -8.3192758029326797e-04</internalNodes>\n          <leafValues>\n            -3.0666750669479370e-01 6.1040591448545456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 787 3.9188290247693658e-04</internalNodes>\n          <leafValues>\n            -1.5795469284057617e-01 1.1830350011587143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 788 -3.6203738301992416e-02</internalNodes>\n          <leafValues>\n            -2.2731229662895203e-01 8.3183012902736664e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 789 2.6437509804964066e-03</internalNodes>\n          <leafValues>\n            -7.6691061258316040e-02 2.3545509576797485e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 790 -3.4368310589343309e-03</internalNodes>\n          <leafValues>\n            3.6057031154632568e-01 -7.3672987520694733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 791 -5.5921601597219706e-04</internalNodes>\n          <leafValues>\n            -2.5343179702758789e-01 7.8275643289089203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 792 4.3010139052057639e-05</internalNodes>\n          <leafValues>\n            -1.8223099410533905e-01 9.7539380192756653e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 793 5.3192679770290852e-03</internalNodes>\n          <leafValues>\n            -7.6901949942111969e-02 2.4221810698509216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 794 -6.9484501145780087e-03</internalNodes>\n          <leafValues>\n            -5.8275872468948364e-01 3.4601949155330658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 795 1.2447779998183250e-02</internalNodes>\n          <leafValues>\n            2.3883659392595291e-02 -6.1712497472763062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 796 1.0083100060001016e-03</internalNodes>\n          <leafValues>\n            -7.5152181088924408e-02 2.4744270741939545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 797 -2.3544009309262037e-03</internalNodes>\n          <leafValues>\n            3.1459400057792664e-01 -6.5026231110095978e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 798 4.5676861191168427e-04</internalNodes>\n          <leafValues>\n            7.9758197069168091e-02 -2.3777219653129578e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 799 6.6723190248012543e-03</internalNodes>\n          <leafValues>\n            3.8779199123382568e-02 -4.6045419573783875e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 800 7.1861818469187710e-06</internalNodes>\n          <leafValues>\n            -1.3110539317131042e-01 1.2532530725002289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 801 3.0392590910196304e-02</internalNodes>\n          <leafValues>\n            2.9670530930161476e-02 -5.3870928287506104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 802 1.4835850379313342e-05</internalNodes>\n          <leafValues>\n            -1.5778580307960510e-01 1.0566859692335129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 803 1.4415860176086426e-02</internalNodes>\n          <leafValues>\n            -7.6271347701549530e-02 3.0597710609436035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 804 3.2787520904093981e-03</internalNodes>\n          <leafValues>\n            4.4464308768510818e-02 -3.8928028941154480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 805 1.0770520195364952e-02</internalNodes>\n          <leafValues>\n            -3.9324011653661728e-02 4.1493979096412659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 806 5.4678268497809768e-04</internalNodes>\n          <leafValues>\n            5.8721691370010376e-02 -2.7546930313110352e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 807 -1.8106499919667840e-03</internalNodes>\n          <leafValues>\n            1.8281750380992889e-01 -9.3675427138805389e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 808 1.1771249771118164e-01</internalNodes>\n          <leafValues>\n            2.3175759240984917e-02 -7.0696681737899780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 809 -3.1166549888439476e-04</internalNodes>\n          <leafValues>\n            -2.0585930347442627e-01 7.6573841273784637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 810 -9.7939418628811836e-03</internalNodes>\n          <leafValues>\n            4.8732680082321167e-01 -3.4746028482913971e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 811 1.0002780472859740e-03</internalNodes>\n          <leafValues>\n            -1.1003620177507401e-01 1.5490560233592987e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 812 6.9929230958223343e-03</internalNodes>\n          <leafValues>\n            3.2923609018325806e-02 -5.4326117038726807e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 813 3.4163020551204681e-02</internalNodes>\n          <leafValues>\n            1.8062820658087730e-02 -7.0809149742126465e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 814 -2.0808410644531250e-01</internalNodes>\n          <leafValues>\n            -6.7879611253738403e-01 2.0255820825695992e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 815 2.4889659835025668e-04</internalNodes>\n          <leafValues>\n            -1.7719520628452301e-01 8.8152356445789337e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 816 -9.3355607241392136e-03</internalNodes>\n          <leafValues>\n            1.7948059737682343e-01 -9.4474621117115021e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 817 2.9192469082772732e-04</internalNodes>\n          <leafValues>\n            -1.3786169886589050e-01 1.3819259405136108e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 818 9.1989226639270782e-03</internalNodes>\n          <leafValues>\n            -1.0269109904766083e-01 1.7618100345134735e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 819 6.8165437551215291e-04</internalNodes>\n          <leafValues>\n            7.4821308255195618e-02 -2.3621830344200134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 820 -1.4507620107906405e-05</internalNodes>\n          <leafValues>\n            9.5861770212650299e-02 -1.7785739898681641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 821 1.7662490427028388e-04</internalNodes>\n          <leafValues>\n            -1.3805359601974487e-01 1.3394320011138916e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 822 -1.7513500060886145e-03</internalNodes>\n          <leafValues>\n            7.7623583376407623e-02 -2.3174029588699341e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 823 5.1342020742595196e-03</internalNodes>\n          <leafValues>\n            3.0363969504833221e-02 -5.2420848608016968e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 824 9.4114318490028381e-03</internalNodes>\n          <leafValues>\n            -5.8994568884372711e-02 3.0291381478309631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 825 -1.0448819957673550e-03</internalNodes>\n          <leafValues>\n            -1.7124690115451813e-01 1.0156030207872391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 826 -6.3579198904335499e-03</internalNodes>\n          <leafValues>\n            3.1986710429191589e-01 -5.0694450736045837e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 827 -6.3502117991447449e-03</internalNodes>\n          <leafValues>\n            -5.2413272857666016e-01 3.1800068914890289e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 828 1.2251759879291058e-02</internalNodes>\n          <leafValues>\n            1.6559680923819542e-02 -7.9422187805175781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 829 -1.4000720344483852e-02</internalNodes>\n          <leafValues>\n            -5.4444402456283569e-01 2.4652559310197830e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 830 1.9229920580983162e-03</internalNodes>\n          <leafValues>\n            -7.6944977045059204e-02 2.1888209879398346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 831 -3.4030789975076914e-03</internalNodes>\n          <leafValues>\n            3.0143401026725769e-01 -5.8023329824209213e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 832 -2.7728609740734100e-02</internalNodes>\n          <leafValues>\n            -5.6704998016357422e-01 3.0071720480918884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 833 1.4990579802542925e-04</internalNodes>\n          <leafValues>\n            9.1404616832733154e-02 -1.6989429295063019e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 834 -1.4532960449287202e-05</internalNodes>\n          <leafValues>\n            1.0442660003900528e-01 -1.3983349502086639e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 835 2.8315950185060501e-02</internalNodes>\n          <leafValues>\n            1.7812129110097885e-02 -8.1201279163360596e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 836 -1.7363600200042129e-03</internalNodes>\n          <leafValues>\n            1.9688630104064941e-01 -7.6398819684982300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 837 -2.2081490606069565e-02</internalNodes>\n          <leafValues>\n            4.4497510790824890e-01 -3.3445868641138077e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 838 1.2189210392534733e-03</internalNodes>\n          <leafValues>\n            4.9154780805110931e-02 -3.7790310382843018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 839 -5.4838892538100481e-04</internalNodes>\n          <leafValues>\n            -2.2823029756546021e-01 8.0446496605873108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 840 -9.3702552840113640e-04</internalNodes>\n          <leafValues>\n            2.5258961319923401e-01 -6.5389201045036316e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 841 1.2496720068156719e-02</internalNodes>\n          <leafValues>\n            3.8215879350900650e-02 -4.0465530753135681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 842 -1.6764370724558830e-02</internalNodes>\n          <leafValues>\n            -1.4508719742298126e-01 1.2119810283184052e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 843 5.6504327803850174e-03</internalNodes>\n          <leafValues>\n            -8.7139137089252472e-02 2.2194419801235199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 844 5.2610319107770920e-04</internalNodes>\n          <leafValues>\n            8.7222076952457428e-02 -2.0502470433712006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 845 1.5574200078845024e-03</internalNodes>\n          <leafValues>\n            -1.7036689817905426e-01 9.4435282051563263e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 846 2.5609090924263000e-01</internalNodes>\n          <leafValues>\n            1.7790110781788826e-02 -7.4050921201705933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 847 3.3561999443918467e-03</internalNodes>\n          <leafValues>\n            -4.2667269706726074e-02 3.7573391199111938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 848 4.7072928398847580e-02</internalNodes>\n          <leafValues>\n            3.2015219330787659e-02 -6.4522278308868408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 849 -2.2168930154293776e-03</internalNodes>\n          <leafValues>\n            2.0757040381431580e-01 -7.7372692525386810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 850 5.0796428695321083e-03</internalNodes>\n          <leafValues>\n            4.1829328984022141e-02 -3.7722969055175781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 851 7.0120906457304955e-05</internalNodes>\n          <leafValues>\n            8.1031888723373413e-02 -1.8506260216236115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 852 -5.2204862004145980e-04</internalNodes>\n          <leafValues>\n            1.2528459727764130e-01 -1.3090319931507111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 853 -6.1609707772731781e-03</internalNodes>\n          <leafValues>\n            3.1177788972854614e-01 -5.1252178847789764e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 854 -2.8424879908561707e-01</internalNodes>\n          <leafValues>\n            -7.0340508222579956e-01 2.2811079397797585e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 855 -4.1746720671653748e-02</internalNodes>\n          <leafValues>\n            -7.8914260864257812e-01 1.6686350107192993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 856 -1.0051350109279156e-03</internalNodes>\n          <leafValues>\n            -2.2181299328804016e-01 6.1887398362159729e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 857 -1.3900640187785029e-03</internalNodes>\n          <leafValues>\n            1.8797479569911957e-01 -7.6582401990890503e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 858 -4.0118378819897771e-04</internalNodes>\n          <leafValues>\n            -1.7291170358657837e-01 8.6806759238243103e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 859 -2.9202610676293261e-05</internalNodes>\n          <leafValues>\n            9.2319779098033905e-02 -1.7136460542678833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 860 -2.6532830670475960e-03</internalNodes>\n          <leafValues>\n            3.9422848820686340e-01 -3.9826449006795883e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 861 -7.8933471813797951e-03</internalNodes>\n          <leafValues>\n            -4.3326890468597412e-01 3.6603361368179321e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 862 8.7933447211980820e-03</internalNodes>\n          <leafValues>\n            -3.3205948770046234e-02 4.8740789294242859e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 863 1.2014759704470634e-02</internalNodes>\n          <leafValues>\n            2.2244220599532127e-02 -8.1597268581390381e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 864 2.1147020161151886e-03</internalNodes>\n          <leafValues>\n            6.4942933619022369e-02 -2.0959229767322540e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 865 -9.9916034378111362e-04</internalNodes>\n          <leafValues>\n            1.5402349829673767e-01 -1.0149469971656799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 866 -7.6499581336975098e-04</internalNodes>\n          <leafValues>\n            2.0236450433731079e-01 -7.1199662983417511e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 867 -4.2193511035293341e-04</internalNodes>\n          <leafValues>\n            1.1521430313587189e-01 -1.2845459580421448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 868 -4.1548791341483593e-04</internalNodes>\n          <leafValues>\n            -2.1168529987335205e-01 7.0376142859458923e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 869 1.5300279483199120e-03</internalNodes>\n          <leafValues>\n            6.1263758689165115e-02 -2.2269320487976074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 870 -2.6573969516903162e-03</internalNodes>\n          <leafValues>\n            3.8462328910827637e-01 -3.8276020437479019e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 871 -2.1988600492477417e-01</internalNodes>\n          <leafValues>\n            -5.1546782255172729e-01 2.8099389746785164e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 872 -8.7377207819372416e-04</internalNodes>\n          <leafValues>\n            1.0149329900741577e-01 -1.3990689814090729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 873 7.5169820338487625e-03</internalNodes>\n          <leafValues>\n            -6.1671640723943710e-02 2.5486430525779724e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 874 -1.3438290625344962e-04</internalNodes>\n          <leafValues>\n            -1.6618040204048157e-01 8.8938876986503601e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>117</maxWeakCount>\n      <stageThreshold>-1.5079799890518188e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 875 3.5007519181817770e-03</internalNodes>\n          <leafValues>\n            -2.8256690502166748e-01 3.3628109097480774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 876 4.1042729280889034e-03</internalNodes>\n          <leafValues>\n            -1.5877629816532135e-01 3.4091961383819580e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 877 9.8724407143890858e-04</internalNodes>\n          <leafValues>\n            -4.6094760298728943e-01 1.1771719902753830e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 878 -4.0168981067836285e-03</internalNodes>\n          <leafValues>\n            1.3994920253753662e-01 -3.8476601243019104e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 879 -4.2784500867128372e-02</internalNodes>\n          <leafValues>\n            3.1519949436187744e-01 -1.1673810333013535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 880 -5.6273501832038164e-04</internalNodes>\n          <leafValues>\n            8.2315109670162201e-02 -3.3594700694084167e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 881 -4.3416650441940874e-05</internalNodes>\n          <leafValues>\n            1.0691779851913452e-01 -2.5068029761314392e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 882 1.5347570180892944e-02</internalNodes>\n          <leafValues>\n            9.7383828833699226e-03 -6.4612430334091187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 883 1.8295480404049158e-03</internalNodes>\n          <leafValues>\n            8.9164443314075470e-02 -2.9637640714645386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 884 3.2098879455588758e-04</internalNodes>\n          <leafValues>\n            -2.3136790096759796e-01 1.1478479951620102e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 885 1.0728760389611125e-03</internalNodes>\n          <leafValues>\n            -1.2982189655303955e-01 1.9653689861297607e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 886 -4.9566011875867844e-03</internalNodes>\n          <leafValues>\n            3.5313999652862549e-01 -7.6989777386188507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 887 -1.6319400165230036e-03</internalNodes>\n          <leafValues>\n            -2.3701989650726318e-01 1.0319659858942032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 888 1.9862050190567970e-02</internalNodes>\n          <leafValues>\n            5.9187598526477814e-02 -4.0955111384391785e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 889 -9.5205483958125114e-03</internalNodes>\n          <leafValues>\n            3.9061769843101501e-01 -5.7647578418254852e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 890 -1.0885810479521751e-03</internalNodes>\n          <leafValues>\n            -5.2902680635452271e-01 4.4961001724004745e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 891 3.5348529927432537e-03</internalNodes>\n          <leafValues>\n            -9.2707537114620209e-02 2.4449980258941650e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 892 5.7174800895154476e-03</internalNodes>\n          <leafValues>\n            5.7306189090013504e-02 -3.9878991246223450e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 893 -1.4010589802637696e-03</internalNodes>\n          <leafValues>\n            1.0757780075073242e-01 -1.9520820677280426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 894 -2.2306239698082209e-03</internalNodes>\n          <leafValues>\n            -6.1328327655792236e-01 2.7875339612364769e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 895 -5.0583072006702423e-03</internalNodes>\n          <leafValues>\n            -5.4739731550216675e-01 3.0482530593872070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 896 1.3725720345973969e-01</internalNodes>\n          <leafValues>\n            2.8162300586700439e-02 -6.0817748308181763e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 897 3.7828299682587385e-03</internalNodes>\n          <leafValues>\n            -1.2640979886054993e-01 1.3382309675216675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 898 -1.0629029944539070e-02</internalNodes>\n          <leafValues>\n            -1.7343379557132721e-01 9.9954582750797272e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 899 5.6623672135174274e-03</internalNodes>\n          <leafValues>\n            -5.2419230341911316e-02 3.2940819859504700e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 900 -4.5901038683950901e-03</internalNodes>\n          <leafValues>\n            1.8784660100936890e-01 -9.2681042850017548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 901 7.1088741533458233e-03</internalNodes>\n          <leafValues>\n            3.2605409622192383e-02 -5.7968139648437500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 902 -1.9310249481350183e-03</internalNodes>\n          <leafValues>\n            -2.8707239031791687e-01 5.8658700436353683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 903 3.5559700336307287e-03</internalNodes>\n          <leafValues>\n            -6.2841393053531647e-02 3.0232760310173035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 904 2.1007249597460032e-04</internalNodes>\n          <leafValues>\n            -1.2029449641704559e-01 2.0722889900207520e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 905 3.0181880574673414e-03</internalNodes>\n          <leafValues>\n            4.2764421552419662e-02 -4.5567208528518677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 906 -2.0919379312545061e-03</internalNodes>\n          <leafValues>\n            -5.8067041635513306e-01 2.4772390723228455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 907 4.9380292184650898e-03</internalNodes>\n          <leafValues>\n            -6.7825779318809509e-02 2.6715460419654846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 908 1.0227119782939553e-03</internalNodes>\n          <leafValues>\n            -1.1050579696893692e-01 1.7136010527610779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 909 -9.1216713190078735e-02</internalNodes>\n          <leafValues>\n            -5.5617409944534302e-01 3.1176509335637093e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 910 1.9377609714865685e-03</internalNodes>\n          <leafValues>\n            5.2470069378614426e-02 -3.3402100205421448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 911 -4.5235231518745422e-03</internalNodes>\n          <leafValues>\n            -3.8628038763999939e-01 4.4883530586957932e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 912 1.1070469627156854e-03</internalNodes>\n          <leafValues>\n            -9.4648011028766632e-02 1.7694370448589325e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 913 -1.4522889629006386e-02</internalNodes>\n          <leafValues>\n            -4.4854640960693359e-01 4.0654070675373077e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 914 2.0895639434456825e-02</internalNodes>\n          <leafValues>\n            3.5988390445709229e-02 -4.4317048788070679e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 915 7.3273790803796146e-06</internalNodes>\n          <leafValues>\n            -1.9736979901790619e-01 8.8131763041019440e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 916 -1.4750339687452652e-05</internalNodes>\n          <leafValues>\n            8.8203012943267822e-02 -1.9387699663639069e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 917 1.0160019621253014e-02</internalNodes>\n          <leafValues>\n            -7.3683522641658783e-02 2.7725589275360107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 918 1.4658429790870287e-05</internalNodes>\n          <leafValues>\n            -1.3514040410518646e-01 1.1165390163660049e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 919 2.9789519030600786e-03</internalNodes>\n          <leafValues>\n            -5.6356389075517654e-02 2.9033899307250977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 920 6.7907930351793766e-03</internalNodes>\n          <leafValues>\n            -5.5468060076236725e-02 2.9650750756263733e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 921 3.5746619105339050e-02</internalNodes>\n          <leafValues>\n            4.4232271611690521e-02 -3.7943100929260254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 922 -8.6023868061602116e-04</internalNodes>\n          <leafValues>\n            -2.5524240732192993e-01 6.3983328640460968e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 923 -3.2749359961599112e-03</internalNodes>\n          <leafValues>\n            5.1642370223999023e-01 -3.0802410095930099e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 924 -1.4287419617176056e-04</internalNodes>\n          <leafValues>\n            -1.7014829814434052e-01 9.0200550854206085e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 925 -5.9252060949802399e-02</internalNodes>\n          <leafValues>\n            4.4787400960922241e-01 -3.4802999347448349e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 926 4.9169741570949554e-02</internalNodes>\n          <leafValues>\n            4.3797228485345840e-02 -3.9337700605392456e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 927 2.4047859478741884e-03</internalNodes>\n          <leafValues>\n            -8.5982158780097961e-02 1.7597770690917969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 928 -8.8569998741149902e-02</internalNodes>\n          <leafValues>\n            -2.9694429039955139e-01 5.6752521544694901e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 929 3.5266599152237177e-03</internalNodes>\n          <leafValues>\n            -5.4160539060831070e-02 3.2359990477561951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 930 -1.4674359590571839e-05</internalNodes>\n          <leafValues>\n            1.0095299780368805e-01 -1.7195940017700195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 931 -1.0672880336642265e-02</internalNodes>\n          <leafValues>\n            -3.9103358983993530e-01 3.9687499403953552e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 932 -1.3177569955587387e-02</internalNodes>\n          <leafValues>\n            2.7460250258445740e-01 -5.5524408817291260e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 933 -2.0427990239113569e-03</internalNodes>\n          <leafValues>\n            -3.2616940140724182e-01 5.1151938736438751e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 934 2.5430709123611450e-02</internalNodes>\n          <leafValues>\n            3.4412149339914322e-02 -3.9120680093765259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 935 6.6575622186064720e-03</internalNodes>\n          <leafValues>\n            -6.2124639749526978e-02 2.5493910908699036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 936 -2.4922629818320274e-02</internalNodes>\n          <leafValues>\n            -7.5617647171020508e-01 2.0520050078630447e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 937 6.4869478344917297e-02</internalNodes>\n          <leafValues>\n            1.3535760343074799e-02 -8.5182607173919678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 938 -1.9129139836877584e-03</internalNodes>\n          <leafValues>\n            -2.0609579980373383e-01 6.8809613585472107e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 939 -2.7280850335955620e-03</internalNodes>\n          <leafValues>\n            1.3853220641613007e-01 -1.1308959871530533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 940 3.9647668600082397e-03</internalNodes>\n          <leafValues>\n            -8.5980050265789032e-02 1.8867929279804230e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 941 8.6866566562093794e-05</internalNodes>\n          <leafValues>\n            -1.3409359753131866e-01 1.1543890088796616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 942 -1.0680439881980419e-03</internalNodes>\n          <leafValues>\n            2.4043959379196167e-01 -5.9584230184555054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 943 6.4973197877407074e-03</internalNodes>\n          <leafValues>\n            3.5721741616725922e-02 -4.3827891349792480e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 944 3.3825050923041999e-04</internalNodes>\n          <leafValues>\n            7.5188770890235901e-02 -1.9240869581699371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 945 2.4638089817017317e-03</internalNodes>\n          <leafValues>\n            -3.8108248263597488e-02 4.1398531198501587e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 946 7.1629788726568222e-04</internalNodes>\n          <leafValues>\n            6.7675560712814331e-02 -2.3129940032958984e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 947 -1.1354340240359306e-03</internalNodes>\n          <leafValues>\n            1.6413919627666473e-01 -9.8224140703678131e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 948 -4.6024488983675838e-04</internalNodes>\n          <leafValues>\n            7.8879103064537048e-02 -1.8191289901733398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 949 -8.1474315375089645e-03</internalNodes>\n          <leafValues>\n            -1.8627829849720001e-01 7.7696673572063446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 950 -3.3882331103086472e-02</internalNodes>\n          <leafValues>\n            4.1818460822105408e-01 -4.0109351277351379e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 951 -4.3395790271461010e-03</internalNodes>\n          <leafValues>\n            1.8961839377880096e-01 -8.3509556949138641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 952 2.4691419675946236e-03</internalNodes>\n          <leafValues>\n            4.3756991624832153e-02 -3.8284140825271606e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 953 8.7688177824020386e-02</internalNodes>\n          <leafValues>\n            2.3466430604457855e-02 -5.9991317987442017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 954 7.1277258939517196e-06</internalNodes>\n          <leafValues>\n            -1.4574949443340302e-01 9.4181038439273834e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 955 -2.2863550111651421e-03</internalNodes>\n          <leafValues>\n            2.2176849842071533e-01 -6.2630541622638702e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 956 -1.4718780221301131e-05</internalNodes>\n          <leafValues>\n            1.1210440099239349e-01 -1.3407769799232483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 957 2.9124629218131304e-03</internalNodes>\n          <leafValues>\n            -6.1113931238651276e-02 2.6921069622039795e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 958 -7.2532321792095900e-04</internalNodes>\n          <leafValues>\n            -1.8317590653896332e-01 9.0204723179340363e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 959 -1.7109309555962682e-03</internalNodes>\n          <leafValues>\n            -2.9150980710983276e-01 5.6865800172090530e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 960 3.5050138831138611e-02</internalNodes>\n          <leafValues>\n            2.4259999394416809e-02 -5.9926068782806396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 961 2.5119259953498840e-02</internalNodes>\n          <leafValues>\n            -4.6499390155076981e-02 3.3078059554100037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 962 1.3924979604780674e-02</internalNodes>\n          <leafValues>\n            5.4394099861383438e-02 -3.2431459426879883e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 963 1.2507860083132982e-03</internalNodes>\n          <leafValues>\n            -8.6275100708007812e-02 1.6083979606628418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 964 3.2347340602427721e-03</internalNodes>\n          <leafValues>\n            4.0214668959379196e-02 -3.3414369821548462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 965 2.3993090726435184e-03</internalNodes>\n          <leafValues>\n            -3.6099448800086975e-02 4.0332961082458496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 966 -6.4468860626220703e-02</internalNodes>\n          <leafValues>\n            -9.2355471849441528e-01 1.7104439437389374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 967 2.6983879506587982e-02</internalNodes>\n          <leafValues>\n            -4.1323971003293991e-02 3.8095420598983765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 968 -1.4244250451156404e-05</internalNodes>\n          <leafValues>\n            9.8453678190708160e-02 -1.3854749500751495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 969 3.6304299719631672e-03</internalNodes>\n          <leafValues>\n            2.2532820701599121e-02 -5.7740187644958496e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 970 -2.7509450446814299e-03</internalNodes>\n          <leafValues>\n            2.8656649589538574e-01 -4.9012679606676102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 971 3.4084690269082785e-03</internalNodes>\n          <leafValues>\n            3.8566160947084427e-02 -3.5187271237373352e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 972 -2.0442469976842403e-03</internalNodes>\n          <leafValues>\n            1.5499830245971680e-01 -8.1280998885631561e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 973 -3.3763761166483164e-04</internalNodes>\n          <leafValues>\n            -1.8969820439815521e-01 7.3497541248798370e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 974 -1.9649739842861891e-03</internalNodes>\n          <leafValues>\n            2.4030299484729767e-01 -5.3698450326919556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 975 2.6115038781426847e-04</internalNodes>\n          <leafValues>\n            -1.0585899651050568e-01 1.4551800489425659e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 976 -2.4496200494468212e-03</internalNodes>\n          <leafValues>\n            -3.3511948585510254e-01 4.3949641287326813e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 977 2.5791170075535774e-02</internalNodes>\n          <leafValues>\n            1.9443970173597336e-02 -6.3135677576065063e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 978 -1.7996380338445306e-03</internalNodes>\n          <leafValues>\n            1.5620160102844238e-01 -8.9669622480869293e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 979 -5.5190739221870899e-03</internalNodes>\n          <leafValues>\n            3.8429600000381470e-01 -3.9308220148086548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 980 9.3076081248000264e-04</internalNodes>\n          <leafValues>\n            5.3146060556173325e-02 -2.7482900023460388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 981 2.7754770126193762e-03</internalNodes>\n          <leafValues>\n            -5.3488280624151230e-02 2.4878840148448944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 982 1.9387940410524607e-03</internalNodes>\n          <leafValues>\n            7.5177863240242004e-02 -1.9432419538497925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 983 -4.0069930255413055e-03</internalNodes>\n          <leafValues>\n            -2.7330648899078369e-01 6.2000360339879990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 984 7.4540930800139904e-03</internalNodes>\n          <leafValues>\n            -5.0977949053049088e-02 2.7055469155311584e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 985 -1.6338729765266180e-03</internalNodes>\n          <leafValues>\n            1.0920850187540054e-01 -1.4821110665798187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 986 -1.1626870185136795e-01</internalNodes>\n          <leafValues>\n            -9.4307368993759155e-01 1.4511439949274063e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 987 -1.2051310390233994e-02</internalNodes>\n          <leafValues>\n            -3.0964991450309753e-01 3.7726309150457382e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 988 1.5592000447213650e-02</internalNodes>\n          <leafValues>\n            -3.8526348769664764e-02 3.6706140637397766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 989 -1.1198739521205425e-03</internalNodes>\n          <leafValues>\n            -1.4644260704517365e-01 9.6057042479515076e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 990 -1.4623399692936800e-05</internalNodes>\n          <leafValues>\n            1.0641819983720779e-01 -1.3394460082054138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 991 -1.0319639742374420e-01</internalNodes>\n          <leafValues>\n            -7.0196557044982910e-01 1.8891770392656326e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>121</maxWeakCount>\n      <stageThreshold>-1.4499469995498657e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 992 -3.7469431757926941e-02</internalNodes>\n          <leafValues>\n            2.9079249501228333e-01 -3.5205191373825073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 993 4.0861819870769978e-03</internalNodes>\n          <leafValues>\n            -2.9098600149154663e-01 1.8445029854774475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 994 -9.2446897178888321e-04</internalNodes>\n          <leafValues>\n            1.1087530106306076e-01 -4.1064518690109253e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 995 8.5803697584196925e-04</internalNodes>\n          <leafValues>\n            -2.2129820287227631e-01 1.5465059876441956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 996 2.3659599537495524e-04</internalNodes>\n          <leafValues>\n            -3.2185178995132446e-01 1.1183690279722214e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 997 -3.5021029412746429e-02</internalNodes>\n          <leafValues>\n            2.2721460461616516e-01 -1.4156529307365417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 998 -3.4688229206949472e-03</internalNodes>\n          <leafValues>\n            -4.0247380733489990e-01 4.3791528791189194e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 999 5.0372090190649033e-03</internalNodes>\n          <leafValues>\n            -1.2387280166149139e-01 2.2701320052146912e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1000 -1.1929610045626760e-03</internalNodes>\n          <leafValues>\n            -4.8692488670349121e-01 5.2568510174751282e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1001 9.5561221241950989e-03</internalNodes>\n          <leafValues>\n            -4.6204000711441040e-02 5.1149028539657593e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1002 1.1109219631180167e-03</internalNodes>\n          <leafValues>\n            4.5496881008148193e-02 -4.5278310775756836e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1003 5.7835641200654209e-05</internalNodes>\n          <leafValues>\n            -1.5641710162162781e-01 1.3276909291744232e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1004 -9.4595848349854350e-04</internalNodes>\n          <leafValues>\n            -2.8471308946609497e-01 6.4549557864665985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1005 8.8587577920407057e-04</internalNodes>\n          <leafValues>\n            6.5990276634693146e-02 -3.2505878806114197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1006 2.1180589683353901e-03</internalNodes>\n          <leafValues>\n            -7.1820907294750214e-02 3.3132740855216980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1007 -1.6004469245672226e-02</internalNodes>\n          <leafValues>\n            -4.9266660213470459e-01 3.5758759826421738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1008 1.4956319937482476e-03</internalNodes>\n          <leafValues>\n            -8.3095543086528778e-02 2.7613210678100586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1009 7.5204619206488132e-03</internalNodes>\n          <leafValues>\n            2.6987679302692413e-02 -6.5507948398590088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1010 -1.4567610378435347e-05</internalNodes>\n          <leafValues>\n            1.1181929707527161e-01 -1.8279710412025452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1011 1.5564640052616596e-03</internalNodes>\n          <leafValues>\n            -1.5681059658527374e-01 1.1271400004625320e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1012 -3.6522798240184784e-02</internalNodes>\n          <leafValues>\n            -1.4254869520664215e-01 1.3022269308567047e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1013 9.4677843153476715e-03</internalNodes>\n          <leafValues>\n            -4.3431900441646576e-02 3.6521318554878235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1014 -1.4508370441035368e-05</internalNodes>\n          <leafValues>\n            8.4056511521339417e-02 -2.0373860001564026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1015 9.7979931160807610e-04</internalNodes>\n          <leafValues>\n            -9.2570282518863678e-02 1.9765810668468475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1016 1.4909260244166944e-05</internalNodes>\n          <leafValues>\n            -1.4167930185794830e-01 1.2542089819908142e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1017 -2.1510709484573454e-04</internalNodes>\n          <leafValues>\n            2.0154480636119843e-01 -8.0978751182556152e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1018 -1.3552160235121846e-03</internalNodes>\n          <leafValues>\n            -3.9648211002349854e-01 4.5137099921703339e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1019 8.4163509309291840e-03</internalNodes>\n          <leafValues>\n            -7.5962640345096588e-02 2.2327689826488495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1020 -3.0116800917312503e-04</internalNodes>\n          <leafValues>\n            -1.9837650656700134e-01 8.5917882621288300e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1021 9.7665376961231232e-04</internalNodes>\n          <leafValues>\n            6.1060719192028046e-02 -3.1315010786056519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1022 1.9718110561370850e-03</internalNodes>\n          <leafValues>\n            -5.4124880582094193e-02 3.2931008934974670e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1023 6.4220376312732697e-02</internalNodes>\n          <leafValues>\n            3.1034920364618301e-02 -5.8339309692382812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1024 -4.8852190375328064e-03</internalNodes>\n          <leafValues>\n            1.8666909635066986e-01 -8.5492432117462158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1025 -2.5309080956503749e-04</internalNodes>\n          <leafValues>\n            -1.6574999690055847e-01 9.2472381889820099e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1026 2.9818940674886107e-05</internalNodes>\n          <leafValues>\n            -1.4195050299167633e-01 1.0154379904270172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1027 -1.0288760066032410e-02</internalNodes>\n          <leafValues>\n            2.5133699178695679e-01 -5.9286661446094513e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1028 -2.9165179512347095e-05</internalNodes>\n          <leafValues>\n            1.2957669794559479e-01 -1.1733850091695786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1029 -2.0741471089422703e-03</internalNodes>\n          <leafValues>\n            -2.2633939981460571e-01 6.6792942583560944e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1030 1.1343799997121096e-03</internalNodes>\n          <leafValues>\n            -6.3913702964782715e-02 2.7956250309944153e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1031 -1.5007710317149758e-05</internalNodes>\n          <leafValues>\n            1.3454750180244446e-01 -1.1705060303211212e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1032 4.9826782196760178e-03</internalNodes>\n          <leafValues>\n            2.6505010202527046e-02 -6.0010671615600586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1033 -3.4576859325170517e-03</internalNodes>\n          <leafValues>\n            3.1286209821701050e-01 -5.4155170917510986e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1034 5.4344828240573406e-03</internalNodes>\n          <leafValues>\n            2.8702750802040100e-02 -5.6824082136154175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1035 -1.4558049770130310e-05</internalNodes>\n          <leafValues>\n            1.0756780207157135e-01 -1.3127699494361877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1036 1.5321969985961914e-03</internalNodes>\n          <leafValues>\n            -1.1911620199680328e-01 1.4021439850330353e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1037 -2.2449430078268051e-02</internalNodes>\n          <leafValues>\n            -3.3376368880271912e-01 4.9373220652341843e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1038 1.1923030018806458e-02</internalNodes>\n          <leafValues>\n            6.3558742403984070e-02 -2.4746930599212646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1039 2.0685950294137001e-02</internalNodes>\n          <leafValues>\n            -6.1905119568109512e-02 2.6367300748825073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1040 5.0756777636706829e-04</internalNodes>\n          <leafValues>\n            -1.2528319656848907e-01 1.4505800604820251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1041 9.2508539091795683e-04</internalNodes>\n          <leafValues>\n            5.9009589254856110e-02 -2.6204380393028259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1042 8.6694798665121198e-04</internalNodes>\n          <leafValues>\n            -8.8942721486091614e-02 1.7795750498771667e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1043 4.7340960009023547e-04</internalNodes>\n          <leafValues>\n            6.8137630820274353e-02 -2.1880300343036652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1044 9.0366601943969727e-02</internalNodes>\n          <leafValues>\n            1.8516469746828079e-02 -6.5736871957778931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1045 2.0585930906236172e-03</internalNodes>\n          <leafValues>\n            -4.5568998903036118e-02 3.2879421114921570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1046 -4.0761628188192844e-03</internalNodes>\n          <leafValues>\n            -3.5896709561347961e-01 4.0903490036725998e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1047 3.2309619709849358e-03</internalNodes>\n          <leafValues>\n            -5.8772470802068710e-02 2.5518509745597839e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1048 2.0424150861799717e-03</internalNodes>\n          <leafValues>\n            4.3209441006183624e-02 -3.3393308520317078e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1049 -2.8341729193925858e-04</internalNodes>\n          <leafValues>\n            -1.6685059666633606e-01 8.1555336713790894e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1050 -1.0859699686989188e-03</internalNodes>\n          <leafValues>\n            1.7807449400424957e-01 -9.2171236872673035e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1051 -2.0089520141482353e-02</internalNodes>\n          <leafValues>\n            -3.5236391425132751e-01 4.4607751071453094e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1052 -1.8073120154440403e-03</internalNodes>\n          <leafValues>\n            3.0220940709114075e-01 -5.2047580480575562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1053 1.0337149724364281e-02</internalNodes>\n          <leafValues>\n            2.4787139147520065e-02 -6.8838161230087280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1054 -2.4023749865591526e-03</internalNodes>\n          <leafValues>\n            3.3173340559005737e-01 -4.6199489384889603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1055 -5.8347097365185618e-04</internalNodes>\n          <leafValues>\n            -1.8856820464134216e-01 7.7347792685031891e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1056 -2.1759211085736752e-03</internalNodes>\n          <leafValues>\n            3.3067348599433899e-01 -4.0855869650840759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1057 -1.1984390439465642e-03</internalNodes>\n          <leafValues>\n            -2.1580339968204498e-01 6.8534582853317261e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1058 1.4474330237135291e-03</internalNodes>\n          <leafValues>\n            -5.8074928820133209e-02 2.3362369835376740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1059 5.1625841297209263e-04</internalNodes>\n          <leafValues>\n            7.5655579566955566e-02 -2.0956470072269440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1060 -1.4388939598575234e-03</internalNodes>\n          <leafValues>\n            -3.0948141217231750e-01 5.8159999549388885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1061 -1.7495449865236878e-03</internalNodes>\n          <leafValues>\n            1.0236290097236633e-01 -1.5715239942073822e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1062 1.6774939373135567e-02</internalNodes>\n          <leafValues>\n            2.3711699992418289e-02 -5.8594572544097900e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1063 -8.3265192806720734e-03</internalNodes>\n          <leafValues>\n            3.0943349003791809e-01 -4.8807561397552490e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1064 -4.4853150029666722e-05</internalNodes>\n          <leafValues>\n            1.0615509748458862e-01 -1.3089710474014282e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1065 5.9908269904553890e-03</internalNodes>\n          <leafValues>\n            8.0168873071670532e-02 -1.6817809641361237e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1066 1.4110070187598467e-03</internalNodes>\n          <leafValues>\n            -6.9941587746143341e-02 2.2045080363750458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1067 4.1205998510122299e-02</internalNodes>\n          <leafValues>\n            3.1721431761980057e-02 -4.4176858663558960e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1068 1.5044870087876916e-04</internalNodes>\n          <leafValues>\n            -1.2152300029993057e-01 1.1241420358419418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1069 -4.8399530351161957e-03</internalNodes>\n          <leafValues>\n            2.8244999051094055e-01 -5.1606610417366028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1070 -1.0831269901245832e-03</internalNodes>\n          <leafValues>\n            -1.6978019475936890e-01 8.3731047809123993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1071 -1.3483200222253799e-02</internalNodes>\n          <leafValues>\n            2.8269320726394653e-01 -5.2228599786758423e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1072 5.9854640858247876e-04</internalNodes>\n          <leafValues>\n            -1.3749149441719055e-01 1.2280890345573425e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1073 -6.4943352481350303e-04</internalNodes>\n          <leafValues>\n            -1.6931599378585815e-01 8.8171690702438354e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1074 -6.3191158697009087e-03</internalNodes>\n          <leafValues>\n            1.6245460510253906e-01 -8.6300060153007507e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1075 -2.5179239455610514e-03</internalNodes>\n          <leafValues>\n            -3.1853398680686951e-01 5.2688188850879669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1076 -4.6924971044063568e-02</internalNodes>\n          <leafValues>\n            -6.5773141384124756e-01 2.0505079999566078e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1077 -9.6446421230211854e-04</internalNodes>\n          <leafValues>\n            -2.7256599068641663e-01 4.5441299676895142e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1078 1.5073099639266729e-03</internalNodes>\n          <leafValues>\n            -5.0479460507631302e-02 2.8486481308937073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1079 1.6149930655956268e-02</internalNodes>\n          <leafValues>\n            3.8769058883190155e-02 -3.6149570345878601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1080 1.9126510247588158e-02</internalNodes>\n          <leafValues>\n            -3.6233641207218170e-02 4.7573548555374146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1081 -1.2546279467642307e-03</internalNodes>\n          <leafValues>\n            1.1009909957647324e-01 -1.5554140508174896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1082 -1.4754529729543719e-05</internalNodes>\n          <leafValues>\n            9.6549153327941895e-02 -1.3947430253028870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1083 1.5680169686675072e-02</internalNodes>\n          <leafValues>\n            2.3214520886540413e-02 -5.7713180780410767e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1084 1.2293360196053982e-02</internalNodes>\n          <leafValues>\n            -5.7809889316558838e-02 2.3951390385627747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1085 -9.6596255898475647e-03</internalNodes>\n          <leafValues>\n            2.4098740518093109e-01 -6.5823532640933990e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1086 4.4940081425011158e-03</internalNodes>\n          <leafValues>\n            5.4532490670681000e-02 -3.1474688649177551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1087 1.1480580084025860e-02</internalNodes>\n          <leafValues>\n            1.7419299110770226e-02 -7.4722832441329956e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1088 -6.5499639511108398e-01</internalNodes>\n          <leafValues>\n            -4.5483970642089844e-01 2.6187120005488396e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1089 -1.5746919962111861e-04</internalNodes>\n          <leafValues>\n            8.4341458976268768e-02 -1.8240310251712799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1090 -1.0111900046467781e-03</internalNodes>\n          <leafValues>\n            -2.0862899720668793e-01 6.7676216363906860e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1091 1.8488839268684387e-02</internalNodes>\n          <leafValues>\n            -3.5499621182680130e-02 4.1342151165008545e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1092 -3.8888910785317421e-04</internalNodes>\n          <leafValues>\n            1.5692460536956787e-01 -8.6299479007720947e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1093 -4.5315301977097988e-03</internalNodes>\n          <leafValues>\n            -4.3912211060523987e-01 3.4103620797395706e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1094 3.3536020666360855e-02</internalNodes>\n          <leafValues>\n            -3.2231528311967850e-02 4.7096571326255798e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1095 2.0854349713772535e-03</internalNodes>\n          <leafValues>\n            -7.6001010835170746e-02 1.7373880743980408e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1096 -1.4060589819564484e-05</internalNodes>\n          <leafValues>\n            8.5960999131202698e-02 -1.6348780691623688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1097 4.2995680123567581e-02</internalNodes>\n          <leafValues>\n            2.2033119574189186e-02 -5.9274291992187500e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1098 2.4928380735218525e-03</internalNodes>\n          <leafValues>\n            -6.3020773231983185e-02 2.1398860216140747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1099 1.4520809600071516e-05</internalNodes>\n          <leafValues>\n            -1.1218129843473434e-01 1.1997319757938385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1100 2.1152360364794731e-02</internalNodes>\n          <leafValues>\n            3.0270710587501526e-02 -4.4600808620452881e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1101 2.1028789342381060e-04</internalNodes>\n          <leafValues>\n            8.0384418368339539e-02 -1.7209020256996155e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1102 1.0620340472087264e-03</internalNodes>\n          <leafValues>\n            -6.4051970839500427e-02 2.1304920315742493e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1103 -2.5768030900508165e-03</internalNodes>\n          <leafValues>\n            -5.2309602499008179e-01 2.6146469637751579e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1104 4.7555579803884029e-03</internalNodes>\n          <leafValues>\n            3.6213729530572891e-02 -3.4408730268478394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1105 -5.9062540531158447e-01</internalNodes>\n          <leafValues>\n            -9.1701269149780273e-01 1.3416379690170288e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1106 -9.7031831741333008e-02</internalNodes>\n          <leafValues>\n            4.8288398981094360e-01 -3.2344181090593338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1107 1.4890159945935011e-03</internalNodes>\n          <leafValues>\n            4.0591750293970108e-02 -3.8898488879203796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1108 2.4702500086277723e-03</internalNodes>\n          <leafValues>\n            -6.3159219920635223e-02 2.1322609484195709e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1109 -2.9705299530178308e-03</internalNodes>\n          <leafValues>\n            1.4960889518260956e-01 -1.0181649774312973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1110 1.5555499494075775e-01</internalNodes>\n          <leafValues>\n            3.6674879491329193e-02 -3.5983988642692566e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1111 1.4113659970462322e-02</internalNodes>\n          <leafValues>\n            1.3834640383720398e-02 -8.7112957239151001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1112 -9.5594127196818590e-04</internalNodes>\n          <leafValues>\n            -2.2359329462051392e-01 5.5646751075983047e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>137</maxWeakCount>\n      <stageThreshold>-1.4971179962158203e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1113 2.3068320006132126e-02</internalNodes>\n          <leafValues>\n            -3.0734539031982422e-01 2.5758111476898193e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1114 -1.1603030376136303e-02</internalNodes>\n          <leafValues>\n            1.7347939312458038e-01 -2.9917559027671814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1115 -1.0232869535684586e-03</internalNodes>\n          <leafValues>\n            1.9289019703865051e-01 -2.4926829338073730e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1116 1.2194960378110409e-02</internalNodes>\n          <leafValues>\n            8.7591417133808136e-02 -4.0853890776634216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1117 -1.2484550243243575e-03</internalNodes>\n          <leafValues>\n            1.6345569491386414e-01 -1.8811899423599243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1118 3.2145460136234760e-04</internalNodes>\n          <leafValues>\n            7.9135909676551819e-02 -3.7722501158714294e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1119 -7.9707789700478315e-04</internalNodes>\n          <leafValues>\n            -2.6377388834953308e-01 9.6936263144016266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1120 7.0924922823905945e-02</internalNodes>\n          <leafValues>\n            -1.2538060545921326e-01 2.5267291069030762e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1121 2.5408361107110977e-03</internalNodes>\n          <leafValues>\n            -1.3923250138759613e-01 1.4974319934844971e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1122 -6.9253891706466675e-04</internalNodes>\n          <leafValues>\n            -3.1363919377326965e-01 3.9419740438461304e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1123 2.5845640338957310e-03</internalNodes>\n          <leafValues>\n            -7.0067122578620911e-02 2.8096580505371094e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1124 -1.6803950071334839e-02</internalNodes>\n          <leafValues>\n            -4.6254080533981323e-01 3.6509469151496887e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1125 -2.1332600153982639e-03</internalNodes>\n          <leafValues>\n            2.2691309452056885e-01 -8.4447480738162994e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1126 -5.5397138930857182e-04</internalNodes>\n          <leafValues>\n            -2.0728160440921783e-01 1.0041700303554535e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1127 -1.4573110092896968e-05</internalNodes>\n          <leafValues>\n            8.8534340262413025e-02 -2.0813420414924622e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1128 8.0281507689505816e-04</internalNodes>\n          <leafValues>\n            -8.8521443307399750e-02 1.9553969800472260e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1129 3.6762449890375137e-03</internalNodes>\n          <leafValues>\n            -8.3966277539730072e-02 2.4232700467109680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1130 -1.6549570136703551e-04</internalNodes>\n          <leafValues>\n            -1.9402000308036804e-01 1.0044509917497635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1131 5.5225789546966553e-03</internalNodes>\n          <leafValues>\n            4.6014141291379929e-02 -4.1095688939094543e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1132 1.1023939587175846e-03</internalNodes>\n          <leafValues>\n            -2.1053719520568848e-01 8.4169827401638031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1133 -2.1610360592603683e-02</internalNodes>\n          <leafValues>\n            -3.4724879264831543e-01 5.1196940243244171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1134 -1.4869699953123927e-05</internalNodes>\n          <leafValues>\n            1.1187150329351425e-01 -1.6249230504035950e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1135 3.1727060675621033e-02</internalNodes>\n          <leafValues>\n            3.7546031177043915e-02 -4.5357111096382141e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1136 -6.5588178113102913e-03</internalNodes>\n          <leafValues>\n            2.9756790399551392e-01 -6.1539310961961746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1137 3.7398359272629023e-03</internalNodes>\n          <leafValues>\n            -6.9362841546535492e-02 2.2881920635700226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1138 -2.1445790771394968e-03</internalNodes>\n          <leafValues>\n            -3.0691981315612793e-01 5.7085540145635605e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1139 1.4241340104490519e-03</internalNodes>\n          <leafValues>\n            4.7747720032930374e-02 -3.5141488909721375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1140 1.8902820302173495e-03</internalNodes>\n          <leafValues>\n            1.1250650137662888e-01 -1.5074999630451202e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1141 -6.4917900599539280e-03</internalNodes>\n          <leafValues>\n            2.8712779283523560e-01 -6.2573678791522980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1142 -8.7750004604458809e-03</internalNodes>\n          <leafValues>\n            -5.4141241312026978e-01 2.9559530317783356e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1143 9.3647688627243042e-02</internalNodes>\n          <leafValues>\n            -5.6943789124488831e-02 2.9638379812240601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1144 -4.4028809497831389e-05</internalNodes>\n          <leafValues>\n            1.0726290196180344e-01 -1.5169329941272736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1145 7.9690842540003359e-05</internalNodes>\n          <leafValues>\n            8.7704338133335114e-02 -1.8157640099525452e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1146 -6.6510448232293129e-03</internalNodes>\n          <leafValues>\n            2.1250769495964050e-01 -7.8765399754047394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1147 2.1358320116996765e-01</internalNodes>\n          <leafValues>\n            3.2704930752515793e-02 -4.9895349144935608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1148 -9.8035410046577454e-02</internalNodes>\n          <leafValues>\n            -6.3620072603225708e-01 2.4300750344991684e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1149 -3.6894609220325947e-03</internalNodes>\n          <leafValues>\n            -5.7873171567916870e-01 2.5343220680952072e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1150 4.7867568209767342e-03</internalNodes>\n          <leafValues>\n            -6.9719798862934113e-02 2.4641029536724091e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1151 4.0250780875794590e-04</internalNodes>\n          <leafValues>\n            -1.1852599680423737e-01 1.7163689434528351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1152 -3.8258030544966459e-03</internalNodes>\n          <leafValues>\n            -3.1708711385726929e-01 5.2796650677919388e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1153 2.9255099434521981e-05</internalNodes>\n          <leafValues>\n            -1.2157870084047318e-01 1.2443509697914124e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1154 -5.5969221284613013e-04</internalNodes>\n          <leafValues>\n            -2.3942449688911438e-01 6.1564020812511444e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1155 1.6149280127137899e-03</internalNodes>\n          <leafValues>\n            -8.9536681771278381e-02 1.9396179914474487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1156 -5.9165759012103081e-03</internalNodes>\n          <leafValues>\n            -6.0741347074508667e-01 2.4107500910758972e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1157 4.5592039823532104e-03</internalNodes>\n          <leafValues>\n            -5.4090119898319244e-02 2.8721129894256592e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1158 -5.1767788827419281e-02</internalNodes>\n          <leafValues>\n            -6.4853471517562866e-01 2.4329099804162979e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1159 -1.0635569691658020e-02</internalNodes>\n          <leafValues>\n            3.2359760999679565e-01 -5.0231788307428360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1160 2.5121110957115889e-04</internalNodes>\n          <leafValues>\n            9.5274448394775391e-02 -1.4859940111637115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1161 1.3107099803164601e-03</internalNodes>\n          <leafValues>\n            -1.1612690240144730e-01 1.2647250294685364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1162 -7.3629721999168396e-02</internalNodes>\n          <leafValues>\n            -6.2977832555770874e-01 2.4197410792112350e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1163 5.1864539273083210e-04</internalNodes>\n          <leafValues>\n            8.0843970179557800e-02 -1.8038350343704224e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1164 -2.0541099365800619e-03</internalNodes>\n          <leafValues>\n            2.0690770447254181e-01 -7.1559637784957886e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1165 -7.2738518938422203e-03</internalNodes>\n          <leafValues>\n            -1.8049220740795135e-01 8.4618158638477325e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1166 -7.0418710820376873e-03</internalNodes>\n          <leafValues>\n            -5.5255848169326782e-01 2.4243000894784927e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1167 2.3678881116211414e-03</internalNodes>\n          <leafValues>\n            -7.4315063655376434e-02 2.2013199329376221e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1168 -4.1341409087181091e-03</internalNodes>\n          <leafValues>\n            -3.1461110711097717e-01 5.7645540684461594e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1169 5.9597631916403770e-03</internalNodes>\n          <leafValues>\n            2.1551210433244705e-02 -6.6399222612380981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1170 -1.4643320355389733e-05</internalNodes>\n          <leafValues>\n            1.0325399786233902e-01 -1.4378640055656433e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1171 -8.0324069131165743e-04</internalNodes>\n          <leafValues>\n            -2.8026849031448364e-01 5.2175540477037430e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1172 -1.7860220745205879e-02</internalNodes>\n          <leafValues>\n            3.1547638773918152e-01 -4.7295480966567993e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1173 8.5229711839929223e-04</internalNodes>\n          <leafValues>\n            -1.0860790312290192e-01 1.6905729472637177e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1174 8.8618341833353043e-03</internalNodes>\n          <leafValues>\n            2.0629420876502991e-02 -7.1686798334121704e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1175 4.1418620385229588e-03</internalNodes>\n          <leafValues>\n            3.1313210725784302e-02 -3.9753648638725281e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1176 -9.6616581082344055e-02</internalNodes>\n          <leafValues>\n            4.2378899455070496e-01 -3.2291099429130554e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1177 -8.4853649139404297e-02</internalNodes>\n          <leafValues>\n            -4.8360210657119751e-01 3.4420508891344070e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1178 -2.7399489656090736e-02</internalNodes>\n          <leafValues>\n            -2.8981518745422363e-01 4.6805508434772491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1179 1.9653420895338058e-03</internalNodes>\n          <leafValues>\n            -7.6221130788326263e-02 1.8894240260124207e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1180 -9.0222749859094620e-03</internalNodes>\n          <leafValues>\n            -5.8255058526992798e-01 2.6038780808448792e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1181 1.7859010398387909e-01</internalNodes>\n          <leafValues>\n            1.4113079756498337e-02 -7.5876772403717041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1182 2.6170860510319471e-03</internalNodes>\n          <leafValues>\n            -4.2011409997940063e-02 3.4582638740539551e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1183 -1.8247140105813742e-03</internalNodes>\n          <leafValues>\n            -2.5125750899314880e-01 5.4113451391458511e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1184 1.0635840008035302e-03</internalNodes>\n          <leafValues>\n            -6.9988057017326355e-02 2.1111090481281281e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1185 -8.5794121026992798e-02</internalNodes>\n          <leafValues>\n            -5.2950221300125122e-01 2.4234309792518616e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1186 -2.4844249710440636e-03</internalNodes>\n          <leafValues>\n            2.2798889875411987e-01 -5.7894941419363022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1187 2.4517390411347151e-03</internalNodes>\n          <leafValues>\n            4.7758270055055618e-02 -2.9931840300559998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1188 7.2088139131665230e-03</internalNodes>\n          <leafValues>\n            8.9190460741519928e-02 -1.4663650095462799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1189 -6.0728411190211773e-03</internalNodes>\n          <leafValues>\n            2.9773110151290894e-01 -4.4187791645526886e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1190 2.9379719868302345e-02</internalNodes>\n          <leafValues>\n            1.8384920433163643e-02 -7.2799599170684814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1191 3.5265460610389709e-02</internalNodes>\n          <leafValues>\n            -4.0345128625631332e-02 3.4369349479675293e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1192 8.0668088048696518e-04</internalNodes>\n          <leafValues>\n            -1.0171490162611008e-01 1.3324069976806641e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1193 -1.4964640140533447e-03</internalNodes>\n          <leafValues>\n            -2.3296439647674561e-01 5.9193279594182968e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1194 2.6136979460716248e-02</internalNodes>\n          <leafValues>\n            1.7993519082665443e-02 -7.3094600439071655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1195 1.8663259223103523e-02</internalNodes>\n          <leafValues>\n            1.4693800359964371e-02 -7.2105181217193604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1196 -5.0944439863087609e-05</internalNodes>\n          <leafValues>\n            9.8113812506198883e-02 -1.3487009704113007e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1197 -5.5268028518185019e-04</internalNodes>\n          <leafValues>\n            -1.1313900351524353e-01 1.1931320279836655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1198 5.4916120134294033e-03</internalNodes>\n          <leafValues>\n            -6.8996928632259369e-02 2.2312630712985992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1199 3.1243199482560158e-02</internalNodes>\n          <leafValues>\n            -3.2394438982009888e-02 3.9250150322914124e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1200 2.7375440113246441e-03</internalNodes>\n          <leafValues>\n            3.6713510751724243e-02 -4.0632349252700806e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1201 9.0960890054702759e-02</internalNodes>\n          <leafValues>\n            2.7709199115633965e-02 -4.1612899303436279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1202 -4.2210621177218854e-04</internalNodes>\n          <leafValues>\n            -1.5993569791316986e-01 7.8440353274345398e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1203 -2.3689800873398781e-03</internalNodes>\n          <leafValues>\n            1.4372199773788452e-01 -9.0417243540287018e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1204 4.5116269029676914e-03</internalNodes>\n          <leafValues>\n            -6.8068206310272217e-02 2.1011069416999817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1205 -1.4441140228882432e-03</internalNodes>\n          <leafValues>\n            -1.3376539945602417e-01 1.1816109716892242e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1206 2.1477979607880116e-03</internalNodes>\n          <leafValues>\n            -9.8067082464694977e-02 1.7571650445461273e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1207 2.2534599527716637e-02</internalNodes>\n          <leafValues>\n            5.3246740251779556e-02 -2.8085210919380188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1208 -1.6165290027856827e-02</internalNodes>\n          <leafValues>\n            2.6058629155158997e-01 -5.6349318474531174e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1209 1.3157909736037254e-02</internalNodes>\n          <leafValues>\n            4.4960599392652512e-02 -3.1084328889846802e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1210 -2.5218630209565163e-02</internalNodes>\n          <leafValues>\n            -1.2245389819145203e-01 1.1707650125026703e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1211 -1.0043029760709032e-04</internalNodes>\n          <leafValues>\n            6.2668606638908386e-02 -2.3665410280227661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1212 2.2884309291839600e-02</internalNodes>\n          <leafValues>\n            -5.6393388658761978e-02 2.6951891183853149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1213 -3.7653960753232241e-03</internalNodes>\n          <leafValues>\n            2.4265049397945404e-01 -6.0327839106321335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1214 -1.2131360126659274e-03</internalNodes>\n          <leafValues>\n            -2.2581340372562408e-01 6.3866272568702698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1215 3.6897920072078705e-03</internalNodes>\n          <leafValues>\n            -7.5056307017803192e-02 1.7121140658855438e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1216 3.9484380977228284e-04</internalNodes>\n          <leafValues>\n            7.2925560176372528e-02 -1.8006080389022827e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1217 -2.8756330721080303e-03</internalNodes>\n          <leafValues>\n            2.3332679271697998e-01 -5.8312799781560898e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1218 -1.2939549982547760e-02</internalNodes>\n          <leafValues>\n            -5.9966820478439331e-01 2.4746209383010864e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1219 4.8920139670372009e-03</internalNodes>\n          <leafValues>\n            -5.0808548927307129e-02 2.7142828702926636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1220 -6.3685458153486252e-03</internalNodes>\n          <leafValues>\n            -1.7759549617767334e-01 7.8720703721046448e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1221 9.1700062155723572e-02</internalNodes>\n          <leafValues>\n            -2.4316219612956047e-02 5.6610620021820068e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1222 -2.9075080528855324e-03</internalNodes>\n          <leafValues>\n            -5.3473442792892456e-01 2.6738349348306656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1223 -3.9782752282917500e-03</internalNodes>\n          <leafValues>\n            1.7898949980735779e-01 -7.3634162545204163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1224 3.8189089391380548e-03</internalNodes>\n          <leafValues>\n            9.6640147268772125e-02 -1.2615419924259186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1225 -6.1400169506669044e-03</internalNodes>\n          <leafValues>\n            -2.8025910258293152e-01 4.8952069133520126e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1226 4.6048378571867943e-03</internalNodes>\n          <leafValues>\n            -3.5297919064760208e-02 3.6271721124649048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1227 6.9598153233528137e-02</internalNodes>\n          <leafValues>\n            2.8236450627446175e-02 -4.7523179650306702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1228 8.2954921526834369e-04</internalNodes>\n          <leafValues>\n            6.5010666847229004e-02 -1.9608500599861145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1229 1.0073450393974781e-02</internalNodes>\n          <leafValues>\n            2.4091430008411407e-02 -5.2702528238296509e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1230 -4.9964170902967453e-02</internalNodes>\n          <leafValues>\n            2.7060431241989136e-01 -5.2939768880605698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1231 -2.3425720632076263e-02</internalNodes>\n          <leafValues>\n            -6.5538042783737183e-01 2.0399950444698334e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1232 4.5370758743956685e-04</internalNodes>\n          <leafValues>\n            -1.0145729780197144e-01 1.2575489282608032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1233 -9.4329239800572395e-04</internalNodes>\n          <leafValues>\n            -2.3677830398082733e-01 5.2147369831800461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1234 -2.5503130163997412e-03</internalNodes>\n          <leafValues>\n            1.8695800006389618e-01 -6.4383536577224731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1235 -2.1031149663031101e-03</internalNodes>\n          <leafValues>\n            -4.0381109714508057e-01 2.8763780370354652e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1236 2.3942890111356974e-03</internalNodes>\n          <leafValues>\n            -5.8961909264326096e-02 2.0151209831237793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1237 3.4859919105656445e-04</internalNodes>\n          <leafValues>\n            -1.1594740301370621e-01 1.1559849977493286e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1238 6.5279641421511769e-04</internalNodes>\n          <leafValues>\n            -9.6583247184753418e-02 1.4546130597591400e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1239 6.6208152566105127e-04</internalNodes>\n          <leafValues>\n            5.5666640400886536e-02 -2.3408170044422150e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1240 -1.1246719956398010e-01</internalNodes>\n          <leafValues>\n            -7.2129100561141968e-01 1.6700809821486473e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1241 2.4760260712355375e-03</internalNodes>\n          <leafValues>\n            -7.0752441883087158e-02 1.6832010447978973e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1242 -8.7723489850759506e-03</internalNodes>\n          <leafValues>\n            -4.8666760325431824e-01 2.6006119325757027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1243 2.8840279206633568e-02</internalNodes>\n          <leafValues>\n            3.3308699727058411e-02 -3.4549170732498169e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1244 4.7115320921875536e-04</internalNodes>\n          <leafValues>\n            5.8610469102859497e-02 -2.1334120631217957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1245 -7.5157210230827332e-03</internalNodes>\n          <leafValues>\n            3.7866720557212830e-01 -3.6307640373706818e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1246 -1.7479779489804059e-04</internalNodes>\n          <leafValues>\n            -1.8687920272350311e-01 7.0380441844463348e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1247 6.9826189428567886e-03</internalNodes>\n          <leafValues>\n            -7.5376212596893311e-02 1.8541449308395386e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1248 -2.5053499266505241e-03</internalNodes>\n          <leafValues>\n            -4.7345471382141113e-01 2.6765290647745132e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1249 6.5240712137892842e-04</internalNodes>\n          <leafValues>\n            -1.1398679763078690e-01 1.1460109800100327e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>153</maxWeakCount>\n      <stageThreshold>-1.5120370388031006e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1250 2.7968829497694969e-02</internalNodes>\n          <leafValues>\n            -2.4054290354251862e-01 3.3976718783378601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1251 4.7484100796282291e-03</internalNodes>\n          <leafValues>\n            -1.8598410487174988e-01 2.6523759961128235e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1252 -9.6774380654096603e-03</internalNodes>\n          <leafValues>\n            1.3574579358100891e-01 -3.1734740734100342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1253 1.0649940231814981e-03</internalNodes>\n          <leafValues>\n            -5.0356131792068481e-01 7.0383183658123016e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1254 3.0151519458740950e-03</internalNodes>\n          <leafValues>\n            -1.7585769295692444e-01 1.6750140488147736e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1255 7.6821137918159366e-04</internalNodes>\n          <leafValues>\n            -2.3158560693264008e-01 1.2748460471630096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1256 -5.6622780859470367e-02</internalNodes>\n          <leafValues>\n            3.0103230476379395e-01 -1.1525429785251617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1257 4.7889677807688713e-03</internalNodes>\n          <leafValues>\n            -6.8797349929809570e-02 3.5774651169776917e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1258 3.7908130325376987e-03</internalNodes>\n          <leafValues>\n            1.1250580102205276e-01 -2.3389840126037598e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1259 -3.6302749067544937e-03</internalNodes>\n          <leafValues>\n            -2.7425950765609741e-01 6.0180071741342545e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1260 1.4986160211265087e-02</internalNodes>\n          <leafValues>\n            5.8370150625705719e-02 -3.5088211297988892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1261 6.1338639352470636e-04</internalNodes>\n          <leafValues>\n            -1.0045500099658966e-01 1.8004140257835388e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1262 1.7827099654823542e-03</internalNodes>\n          <leafValues>\n            -5.8504570275545120e-02 2.8165730834007263e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1263 1.0279649868607521e-03</internalNodes>\n          <leafValues>\n            4.6049151569604874e-02 -4.1633561253547668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1264 -1.4470520000031684e-05</internalNodes>\n          <leafValues>\n            9.7594477236270905e-02 -1.7005239427089691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1265 7.2919862577691674e-04</internalNodes>\n          <leafValues>\n            -8.9277692139148712e-02 1.9683800637722015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1266 -1.2752750189974904e-03</internalNodes>\n          <leafValues>\n            -2.1324349939823151e-01 7.7781319618225098e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1267 2.7510570362210274e-02</internalNodes>\n          <leafValues>\n            9.8059087991714478e-02 -1.8463979661464691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1268 3.9082998409867287e-03</internalNodes>\n          <leafValues>\n            -9.8240077495574951e-02 1.7902830243110657e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1269 2.8285238659009337e-04</internalNodes>\n          <leafValues>\n            6.4882382750511169e-02 -2.5903809070587158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1270 5.8698928914964199e-03</internalNodes>\n          <leafValues>\n            -4.8436500132083893e-02 3.5584059357643127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1271 5.2106438670307398e-04</internalNodes>\n          <leafValues>\n            6.4200893044471741e-02 -2.4268729984760284e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1272 -3.8013618905097246e-03</internalNodes>\n          <leafValues>\n            3.1349530816078186e-01 -4.9372490495443344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1273 -3.5830549895763397e-03</internalNodes>\n          <leafValues>\n            -1.9015640020370483e-01 8.5928887128829956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1274 7.3326388373970985e-03</internalNodes>\n          <leafValues>\n            -8.7244078516960144e-02 1.8596029281616211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1275 6.8118958733975887e-04</internalNodes>\n          <leafValues>\n            9.0353183448314667e-02 -1.7380879819393158e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1276 -2.4127468932420015e-03</internalNodes>\n          <leafValues>\n            2.6583871245384216e-01 -6.2018260359764099e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1277 4.4389287941157818e-03</internalNodes>\n          <leafValues>\n            3.8672439754009247e-02 -4.4039198756217957e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1278 2.9394390367087908e-05</internalNodes>\n          <leafValues>\n            -1.3116660714149475e-01 1.2389960139989853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1279 5.2613918669521809e-03</internalNodes>\n          <leafValues>\n            -5.4326139390468597e-02 3.1434679031372070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1280 2.3712380789220333e-03</internalNodes>\n          <leafValues>\n            3.5234931856393814e-02 -4.5936021208763123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1281 -2.4774149060249329e-03</internalNodes>\n          <leafValues>\n            -3.2579651474952698e-01 4.1676308959722519e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1282 5.1308068213984370e-04</internalNodes>\n          <leafValues>\n            -9.8032839596271515e-02 1.5209600329399109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1283 -7.6761870877817273e-04</internalNodes>\n          <leafValues>\n            -2.0944289863109589e-01 6.9563657045364380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1284 4.1551832109689713e-03</internalNodes>\n          <leafValues>\n            -5.9142418205738068e-02 2.4788859486579895e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1285 1.4315149746835232e-02</internalNodes>\n          <leafValues>\n            2.4713350459933281e-02 -6.2663692235946655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1286 8.9347898028790951e-04</internalNodes>\n          <leafValues>\n            -1.3387380540370941e-01 1.0626660287380219e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1287 -5.8425782481208444e-04</internalNodes>\n          <leafValues>\n            -2.1583810448646545e-01 6.7552872002124786e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1288 8.9712149929255247e-04</internalNodes>\n          <leafValues>\n            -1.5998089313507080e-01 9.6859596669673920e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1289 -4.4576660729944706e-03</internalNodes>\n          <leafValues>\n            -4.6839779615402222e-01 3.4481108188629150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1290 1.6316650435328484e-02</internalNodes>\n          <leafValues>\n            1.6176480799913406e-02 -7.6990699768066406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1291 -1.9581869710236788e-03</internalNodes>\n          <leafValues>\n            2.3423190414905548e-01 -6.3605003058910370e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1292 2.9628631472587585e-01</internalNodes>\n          <leafValues>\n            3.8007281720638275e-02 -3.8991358876228333e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1293 -9.1676972806453705e-04</internalNodes>\n          <leafValues>\n            1.2086489796638489e-01 -1.0912480205297470e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1294 -2.5543299852870405e-04</internalNodes>\n          <leafValues>\n            -1.8755780160427094e-01 7.1104221045970917e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1295 8.2945115864276886e-03</internalNodes>\n          <leafValues>\n            -3.9912570267915726e-02 3.3551681041717529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1296 -5.8387689292430878e-02</internalNodes>\n          <leafValues>\n            -3.3475118875503540e-01 4.1011139750480652e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1297 1.0927469702437520e-03</internalNodes>\n          <leafValues>\n            -8.3243489265441895e-02 1.6046769917011261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1298 1.0653319768607616e-03</internalNodes>\n          <leafValues>\n            -1.1920040100812912e-01 1.0561779886484146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1299 -3.5323720425367355e-02</internalNodes>\n          <leafValues>\n            2.8399449586868286e-01 -4.7650910913944244e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1300 6.7976478021591902e-04</internalNodes>\n          <leafValues>\n            5.9223521500825882e-02 -2.2741270065307617e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1301 -2.4810519069433212e-02</internalNodes>\n          <leafValues>\n            -6.5788549184799194e-01 1.8828939646482468e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1302 4.5880349352955818e-03</internalNodes>\n          <leafValues>\n            -5.0799869000911713e-02 2.6886260509490967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1303 3.9034360088407993e-03</internalNodes>\n          <leafValues>\n            -5.9183020144701004e-02 2.2644530236721039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1304 1.2360659986734390e-01</internalNodes>\n          <leafValues>\n            2.2052299231290817e-02 -6.7844098806381226e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1305 -3.7856408744119108e-04</internalNodes>\n          <leafValues>\n            -2.1715499460697174e-01 5.7522300630807877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1306 2.8562229126691818e-02</internalNodes>\n          <leafValues>\n            -3.4095268696546555e-02 4.2474791407585144e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1307 2.2348840720951557e-03</internalNodes>\n          <leafValues>\n            -3.5655528306961060e-02 3.5050040483474731e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1308 1.9211059436202049e-02</internalNodes>\n          <leafValues>\n            2.5078350678086281e-02 -5.9314918518066406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1309 1.5611639618873596e-01</internalNodes>\n          <leafValues>\n            2.3612640798091888e-02 -4.8740550875663757e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1310 -1.2261980446055532e-03</internalNodes>\n          <leafValues>\n            -3.0421718955039978e-01 3.9526391774415970e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1311 3.6561759188771248e-03</internalNodes>\n          <leafValues>\n            -7.7627539634704590e-02 2.0262609422206879e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1312 1.1567790061235428e-03</internalNodes>\n          <leafValues>\n            5.5682398378849030e-02 -2.4368490278720856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1313 6.2764538452029228e-03</internalNodes>\n          <leafValues>\n            -6.4452603459358215e-02 2.1183019876480103e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1314 1.2091239914298058e-02</internalNodes>\n          <leafValues>\n            2.0667979493737221e-02 -6.2231677770614624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1315 3.7568950210697949e-04</internalNodes>\n          <leafValues>\n            7.3670476675033569e-02 -1.7809109389781952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1316 3.8157668896019459e-03</internalNodes>\n          <leafValues>\n            3.3845711499452591e-02 -3.6262959241867065e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1317 -1.3252210337668657e-03</internalNodes>\n          <leafValues>\n            1.4732490479946136e-01 -8.1727422773838043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1318 2.1575710270553827e-03</internalNodes>\n          <leafValues>\n            -6.8624198436737061e-02 1.7562319338321686e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1319 -6.4548188820481300e-03</internalNodes>\n          <leafValues>\n            -5.8159267902374268e-01 2.3020049557089806e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1320 -8.1042833626270294e-03</internalNodes>\n          <leafValues>\n            -3.5549208521842957e-01 3.5372331738471985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1321 1.6489460540469736e-04</internalNodes>\n          <leafValues>\n            7.4472688138484955e-02 -1.5718360245227814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1322 -1.9494029693305492e-03</internalNodes>\n          <leafValues>\n            3.5157081484794617e-01 -3.6213818937540054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1323 -1.5267659910023212e-04</internalNodes>\n          <leafValues>\n            -1.4115719497203827e-01 8.4802761673927307e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1324 2.3890420794487000e-02</internalNodes>\n          <leafValues>\n            1.9317669793963432e-02 -6.3186031579971313e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1325 -4.4950367882847786e-03</internalNodes>\n          <leafValues>\n            2.1254129707813263e-01 -5.9143088757991791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1326 2.8725271113216877e-03</internalNodes>\n          <leafValues>\n            3.2794039696455002e-02 -3.9505231380462646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1327 2.0885460544377565e-03</internalNodes>\n          <leafValues>\n            -8.5443787276744843e-02 1.4347669482231140e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1328 -4.4343829154968262e-01</internalNodes>\n          <leafValues>\n            -4.0052318572998047e-01 2.9428049921989441e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1329 2.0199170336127281e-02</internalNodes>\n          <leafValues>\n            4.0000550448894501e-02 -3.1763339042663574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1330 1.4570879749953747e-02</internalNodes>\n          <leafValues>\n            1.3662800192832947e-02 -8.6441951990127563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1331 -3.8080150261521339e-03</internalNodes>\n          <leafValues>\n            4.0930721163749695e-01 -3.3838968724012375e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1332 1.0009920224547386e-03</internalNodes>\n          <leafValues>\n            -8.2600250840187073e-02 1.3928790390491486e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1333 1.1500980472192168e-03</internalNodes>\n          <leafValues>\n            6.9677546620368958e-02 -1.7433060705661774e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1334 3.4720861003734171e-04</internalNodes>\n          <leafValues>\n            6.6659383475780487e-02 -1.7403809726238251e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1335 2.7565560303628445e-03</internalNodes>\n          <leafValues>\n            -2.9285680502653122e-02 4.0243569016456604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1336 -2.4124220013618469e-02</internalNodes>\n          <leafValues>\n            -3.2424208521842957e-01 3.7330508232116699e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1337 -1.3989120721817017e-01</internalNodes>\n          <leafValues>\n            -6.5967488288879395e-01 1.7929619178175926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1338 3.0997680500149727e-02</internalNodes>\n          <leafValues>\n            1.4100589789450169e-02 -6.9532638788223267e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1339 4.6191760338842869e-04</internalNodes>\n          <leafValues>\n            -6.7944146692752838e-02 1.8066139519214630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1340 3.4264490008354187e-02</internalNodes>\n          <leafValues>\n            2.2298639640212059e-02 -5.8638918399810791e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1341 3.9756381884217262e-03</internalNodes>\n          <leafValues>\n            -4.1803721338510513e-02 3.1669101119041443e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1342 -3.4192908788099885e-04</internalNodes>\n          <leafValues>\n            -1.5810790657997131e-01 7.7484056353569031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1343 7.1672953665256500e-02</internalNodes>\n          <leafValues>\n            -2.3302769288420677e-02 5.2465027570724487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1344 7.1812322130426764e-04</internalNodes>\n          <leafValues>\n            4.8268780112266541e-02 -2.7771729230880737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1345 -1.8881190335378051e-03</internalNodes>\n          <leafValues>\n            8.3184987306594849e-02 -1.4802010357379913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1346 -1.2498029973357916e-03</internalNodes>\n          <leafValues>\n            2.5329118967056274e-01 -4.9769390374422073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1347 -1.2756100296974182e-01</internalNodes>\n          <leafValues>\n            -6.7970567941665649e-01 2.0871700718998909e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1348 -1.4621549780713394e-05</internalNodes>\n          <leafValues>\n            7.9338513314723969e-02 -1.5043739974498749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1349 3.5788679961115122e-03</internalNodes>\n          <leafValues>\n            -5.5469110608100891e-02 2.4075509607791901e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1350 9.4902152195572853e-03</internalNodes>\n          <leafValues>\n            2.8637239709496498e-02 -5.3680288791656494e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1351 1.0283050127327442e-02</internalNodes>\n          <leafValues>\n            1.1550529859960079e-02 -7.7501267194747925e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1352 -4.2507290840148926e-02</internalNodes>\n          <leafValues>\n            -8.8770490884780884e-01 9.7261751070618629e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1353 3.6155930138193071e-04</internalNodes>\n          <leafValues>\n            6.4407013356685638e-02 -1.7109510302543640e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1354 -3.4245628863573074e-02</internalNodes>\n          <leafValues>\n            2.4231609702110291e-01 -4.7188870608806610e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1355 -1.2806710600852966e-01</internalNodes>\n          <leafValues>\n            -5.4869401454925537e-01 2.1854300051927567e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1356 5.3918339312076569e-02</internalNodes>\n          <leafValues>\n            -2.5415059179067612e-02 4.8263218998908997e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1357 -3.7711810320615768e-02</internalNodes>\n          <leafValues>\n            1.4176939427852631e-01 -8.8871710002422333e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1358 -2.8310909867286682e-01</internalNodes>\n          <leafValues>\n            -6.4925712347030640e-01 2.0563820376992226e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1359 -1.1926019564270973e-02</internalNodes>\n          <leafValues>\n            -2.1756759285926819e-01 5.1851660013198853e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1360 3.7750680348835886e-04</internalNodes>\n          <leafValues>\n            7.2340622544288635e-02 -1.6360169649124146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1361 1.5865910798311234e-02</internalNodes>\n          <leafValues>\n            -7.9940237104892731e-02 1.6453659534454346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1362 7.1175709366798401e-02</internalNodes>\n          <leafValues>\n            3.1589020043611526e-02 -4.1988191008567810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1363 5.8520520105957985e-03</internalNodes>\n          <leafValues>\n            2.3279080167412758e-02 -4.8604270815849304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1364 -1.3924130471423268e-03</internalNodes>\n          <leafValues>\n            1.6908380389213562e-01 -7.3783926665782928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1365 -1.8412459758110344e-04</internalNodes>\n          <leafValues>\n            1.2232059985399246e-01 -1.0313989967107773e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1366 2.2130980505608022e-04</internalNodes>\n          <leafValues>\n            -8.1976376473903656e-02 1.6332870721817017e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1367 2.0723740453831851e-04</internalNodes>\n          <leafValues>\n            9.2730201780796051e-02 -1.3733580708503723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1368 -3.8736319402232766e-04</internalNodes>\n          <leafValues>\n            -2.0004619657993317e-01 8.4838382899761200e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1369 3.2468559220433235e-03</internalNodes>\n          <leafValues>\n            -5.6439258158206940e-02 2.2364979982376099e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1370 9.3086768174543977e-04</internalNodes>\n          <leafValues>\n            3.1926579773426056e-02 -3.9701279997825623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1371 1.0306099429726601e-03</internalNodes>\n          <leafValues>\n            -6.0154888778924942e-02 2.0189760625362396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1372 -7.6027261093258858e-04</internalNodes>\n          <leafValues>\n            1.4901119470596313e-01 -9.9665373563766479e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1373 -4.0442569297738373e-04</internalNodes>\n          <leafValues>\n            -1.9113409519195557e-01 7.4125148355960846e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1374 -4.7783120535314083e-03</internalNodes>\n          <leafValues>\n            -3.5730269551277161e-01 3.6531679332256317e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1375 -7.7672587940469384e-04</internalNodes>\n          <leafValues>\n            1.0242869704961777e-01 -1.2974999845027924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1376 -5.7417969219386578e-03</internalNodes>\n          <leafValues>\n            -1.6698950529098511e-01 7.0111282169818878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1377 -1.0879320092499256e-02</internalNodes>\n          <leafValues>\n            4.4120571017265320e-01 -2.9255589470267296e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1378 6.4163492061197758e-04</internalNodes>\n          <leafValues>\n            -1.1195279657840729e-01 1.0681179910898209e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1379 1.8341830000281334e-02</internalNodes>\n          <leafValues>\n            1.6387680172920227e-01 -8.0189116299152374e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1380 -1.5051739756017923e-03</internalNodes>\n          <leafValues>\n            -2.2313259541988373e-01 6.1541710048913956e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1381 4.4345208443701267e-03</internalNodes>\n          <leafValues>\n            -6.6646136343479156e-02 2.2299060225486755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1382 -1.4749550246051513e-05</internalNodes>\n          <leafValues>\n            1.1597889661788940e-01 -1.0377810150384903e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1383 -2.6539659593254328e-03</internalNodes>\n          <leafValues>\n            1.3116030395030975e-01 -8.6488783359527588e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1384 2.7743550017476082e-03</internalNodes>\n          <leafValues>\n            4.1064068675041199e-02 -3.1225061416625977e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1385 1.1590829817578197e-03</internalNodes>\n          <leafValues>\n            6.4309477806091309e-02 -1.7413079738616943e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1386 9.2315068468451500e-04</internalNodes>\n          <leafValues>\n            -8.2974001765251160e-02 1.4439080655574799e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1387 -8.2323597744107246e-03</internalNodes>\n          <leafValues>\n            3.0380389094352722e-01 -4.1229110211133957e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1388 3.5314110573381186e-03</internalNodes>\n          <leafValues>\n            3.9511259645223618e-02 -3.3097168803215027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1389 5.7490761391818523e-03</internalNodes>\n          <leafValues>\n            1.9821660593152046e-02 -5.8780592679977417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1390 7.8584970906376839e-03</internalNodes>\n          <leafValues>\n            -4.9952238798141479e-02 2.7249589562416077e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1391 -1.4245980310079176e-05</internalNodes>\n          <leafValues>\n            8.8010340929031372e-02 -1.3228349387645721e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1392 6.9364177761599422e-04</internalNodes>\n          <leafValues>\n            -6.7391887307167053e-02 1.7463630437850952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1393 -2.9837749898433685e-02</internalNodes>\n          <leafValues>\n            -5.1709812879562378e-01 2.4871410802006721e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1394 7.1383598260581493e-03</internalNodes>\n          <leafValues>\n            6.7430503666400909e-02 -1.9037249684333801e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1395 1.7582569271326065e-02</internalNodes>\n          <leafValues>\n            -3.6622371524572372e-02 3.5335469245910645e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1396 -1.2527840444818139e-03</internalNodes>\n          <leafValues>\n            -2.1730649471282959e-01 6.1200018972158432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1397 7.4575009057298303e-04</internalNodes>\n          <leafValues>\n            -6.4467661082744598e-02 1.9775040447711945e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1398 -7.2683871258050203e-04</internalNodes>\n          <leafValues>\n            -1.7233370244503021e-01 7.1719951927661896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1399 2.6301289908587933e-03</internalNodes>\n          <leafValues>\n            -3.9274338632822037e-02 3.3066290616989136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1400 -1.4553769688063767e-05</internalNodes>\n          <leafValues>\n            7.9698577523231506e-02 -1.7852419614791870e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1401 -4.5518940896727145e-04</internalNodes>\n          <leafValues>\n            -1.6662250459194183e-01 7.5660362839698792e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1402 -4.0261688991449773e-04</internalNodes>\n          <leafValues>\n            -1.4214369654655457e-01 8.1017293035984039e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>161</maxWeakCount>\n      <stageThreshold>-1.4741109609603882e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1403 -8.3439666777849197e-03</internalNodes>\n          <leafValues>\n            3.1942158937454224e-01 -2.6766449213027954e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1404 7.8073277836665511e-04</internalNodes>\n          <leafValues>\n            -3.4852638840675354e-01 1.3628880679607391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1405 8.6505862418562174e-04</internalNodes>\n          <leafValues>\n            -2.5323680043220520e-01 1.7417639493942261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1406 -2.0879819930996746e-04</internalNodes>\n          <leafValues>\n            8.8503703474998474e-02 -3.6038509011268616e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1407 -7.4667241424322128e-03</internalNodes>\n          <leafValues>\n            1.6120630502700806e-01 -1.7366449534893036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1408 -6.9383758818730712e-04</internalNodes>\n          <leafValues>\n            9.6873007714748383e-02 -2.6793479919433594e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1409 -4.7926991101121530e-05</internalNodes>\n          <leafValues>\n            9.1756246984004974e-02 -2.6212221384048462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1410 -1.5861799474805593e-03</internalNodes>\n          <leafValues>\n            -6.1400872468948364e-01 -7.4168378487229347e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1411 4.4573731429409236e-05</internalNodes>\n          <leafValues>\n            -1.4841860532760620e-01 1.3855740427970886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1412 5.0104141701012850e-04</internalNodes>\n          <leafValues>\n            5.9088941663503647e-02 -2.9596069455146790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1413 -4.7243628650903702e-03</internalNodes>\n          <leafValues>\n            1.7092029750347137e-01 -1.0624700039625168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1414 3.9171050302684307e-03</internalNodes>\n          <leafValues>\n            8.8605202734470367e-02 -2.2775200009346008e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1415 8.8675727602094412e-04</internalNodes>\n          <leafValues>\n            -1.6839639842510223e-01 1.1958680301904678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1416 -4.2634559795260429e-03</internalNodes>\n          <leafValues>\n            -3.3663240075111389e-01 4.7266270965337753e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1417 6.8006501533091068e-03</internalNodes>\n          <leafValues>\n            -5.9237081557512283e-02 3.1675300002098083e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1418 -1.3168989680707455e-02</internalNodes>\n          <leafValues>\n            3.7162569165229797e-01 -4.2714890092611313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1419 7.3881301796063781e-04</internalNodes>\n          <leafValues>\n            5.9158101677894592e-02 -3.0953711271286011e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1420 1.7939460230991244e-03</internalNodes>\n          <leafValues>\n            -8.4615282714366913e-02 2.0452530682086945e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1421 1.6819390002638102e-03</internalNodes>\n          <leafValues>\n            -8.6703762412071228e-02 2.0580549538135529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1422 -2.5033599231392145e-03</internalNodes>\n          <leafValues>\n            -4.3473190069198608e-01 3.8707830011844635e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1423 3.3658559550531209e-04</internalNodes>\n          <leafValues>\n            -1.0717310011386871e-01 1.5238380432128906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1424 1.3037879951298237e-02</internalNodes>\n          <leafValues>\n            4.4682659208774567e-02 -4.0395650267601013e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1425 1.3743729505222291e-04</internalNodes>\n          <leafValues>\n            -2.1432510018348694e-01 6.8643413484096527e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1426 3.7178888916969299e-01</internalNodes>\n          <leafValues>\n            3.4502930939197540e-02 -4.5998379588127136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1427 -7.1649150922894478e-03</internalNodes>\n          <leafValues>\n            2.6640880107879639e-01 -5.4557949304580688e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1428 -7.1985478280112147e-04</internalNodes>\n          <leafValues>\n            -1.4415690302848816e-01 9.8254486918449402e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1429 1.6854539513587952e-02</internalNodes>\n          <leafValues>\n            2.8428679332137108e-02 -4.5227599143981934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1430 1.3624729588627815e-02</internalNodes>\n          <leafValues>\n            -6.0474298894405365e-02 2.2715990245342255e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1431 1.3620140030980110e-02</internalNodes>\n          <leafValues>\n            7.9177603125572205e-02 -1.8104650080204010e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1432 -4.4976719655096531e-03</internalNodes>\n          <leafValues>\n            2.1300099790096283e-01 -7.1392573416233063e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1433 7.1611418388783932e-04</internalNodes>\n          <leafValues>\n            -9.4237379729747772e-02 1.5830449759960175e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1434 7.0651061832904816e-04</internalNodes>\n          <leafValues>\n            4.8840671777725220e-02 -2.9152449965476990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1435 -3.1002271175384521e-01</internalNodes>\n          <leafValues>\n            -3.8511890172958374e-01 3.4369651228189468e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1436 4.3721711263060570e-03</internalNodes>\n          <leafValues>\n            -4.6880301088094711e-02 2.9952910542488098e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1437 -1.4383009634912014e-02</internalNodes>\n          <leafValues>\n            -4.5463728904724121e-01 3.4184519201517105e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1438 -3.7763800937682390e-03</internalNodes>\n          <leafValues>\n            -5.6709027290344238e-01 2.1684719249606133e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1439 -3.4393940586596727e-03</internalNodes>\n          <leafValues>\n            2.8183689713478088e-01 -5.2640009671449661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1440 -3.5846829414367676e-03</internalNodes>\n          <leafValues>\n            -2.9227399826049805e-01 5.2231520414352417e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1441 3.6200750619173050e-03</internalNodes>\n          <leafValues>\n            -5.3378768265247345e-02 2.6364138722419739e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1442 7.6435408554971218e-03</internalNodes>\n          <leafValues>\n            3.6897629499435425e-02 -3.9242339134216309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1443 3.5417820326983929e-03</internalNodes>\n          <leafValues>\n            3.5689998418092728e-02 -3.5601079463958740e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1444 -2.4041049182415009e-03</internalNodes>\n          <leafValues>\n            1.6313059628009796e-01 -8.9239962399005890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1445 6.5479031763970852e-03</internalNodes>\n          <leafValues>\n            3.6708708852529526e-02 -3.4187689423561096e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1446 -1.2350000441074371e-02</internalNodes>\n          <leafValues>\n            2.6157799363136292e-01 -5.2475821226835251e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1447 1.4726500012329780e-05</internalNodes>\n          <leafValues>\n            -1.7869140207767487e-01 7.7807463705539703e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1448 -2.1563619375228882e-02</internalNodes>\n          <leafValues>\n            -6.3926118612289429e-01 1.9050199538469315e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1449 5.0762481987476349e-03</internalNodes>\n          <leafValues>\n            -5.1665481179952621e-02 2.9126250743865967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1450 -5.9531949460506439e-02</internalNodes>\n          <leafValues>\n            -7.5291550159454346e-01 2.0238230004906654e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1451 -1.6808489337563515e-02</internalNodes>\n          <leafValues>\n            -4.2833268642425537e-01 2.5997729972004890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1452 3.4431689418852329e-03</internalNodes>\n          <leafValues>\n            -5.4912570863962173e-02 2.4233500659465790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1453 -1.0451589478179812e-03</internalNodes>\n          <leafValues>\n            -2.6243540644645691e-01 4.5748569071292877e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1454 -4.8333409358747303e-04</internalNodes>\n          <leafValues>\n            8.9791953563690186e-02 -1.2892110645771027e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1455 -4.7575961798429489e-03</internalNodes>\n          <leafValues>\n            -3.1868740916252136e-01 3.6020528525114059e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1456 -1.0407149791717529e-01</internalNodes>\n          <leafValues>\n            5.1398742198944092e-01 -2.3598119616508484e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1457 9.6292654052376747e-03</internalNodes>\n          <leafValues>\n            -4.7965578734874725e-02 2.1790429949760437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1458 5.9226430021226406e-03</internalNodes>\n          <leafValues>\n            6.4275130629539490e-02 -1.8210859596729279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1459 1.6943799331784248e-02</internalNodes>\n          <leafValues>\n            -3.7509348243474960e-02 3.1458830833435059e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1460 -6.5468349494040012e-03</internalNodes>\n          <leafValues>\n            -1.5812429785728455e-01 9.0520747005939484e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1461 9.4754863530397415e-03</internalNodes>\n          <leafValues>\n            4.8995878547430038e-02 -2.7853849530220032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1462 -4.9254479818046093e-03</internalNodes>\n          <leafValues>\n            3.1902191042900085e-01 -4.5609470456838608e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1463 -9.4199541490525007e-04</internalNodes>\n          <leafValues>\n            -1.6472989320755005e-01 7.3966227471828461e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1464 7.0046652108430862e-03</internalNodes>\n          <leafValues>\n            -3.6342341452836990e-02 3.3846628665924072e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1465 -9.1483298456296325e-04</internalNodes>\n          <leafValues>\n            1.0460989922285080e-01 -1.1206439882516861e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1466 -1.8404760339763016e-04</internalNodes>\n          <leafValues>\n            1.4215709269046783e-01 -8.7627373635768890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1467 -3.1692520133219659e-04</internalNodes>\n          <leafValues>\n            -1.6067850589752197e-01 7.0096842944622040e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1468 2.3108009248971939e-02</internalNodes>\n          <leafValues>\n            -5.3784500807523727e-02 2.0780019462108612e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1469 6.3212551176548004e-03</internalNodes>\n          <leafValues>\n            2.9342239722609520e-02 -3.8378500938415527e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1470 7.3698158375918865e-03</internalNodes>\n          <leafValues>\n            -4.1625689715147018e-02 2.6526549458503723e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1471 3.3730969298630953e-03</internalNodes>\n          <leafValues>\n            3.7753321230411530e-02 -3.0138298869132996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1472 -6.4016957767307758e-03</internalNodes>\n          <leafValues>\n            2.1839860081672668e-01 -5.4551340639591217e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1473 1.3553920201957226e-02</internalNodes>\n          <leafValues>\n            2.8121260926127434e-02 -4.3601170182228088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1474 -6.7636291496455669e-03</internalNodes>\n          <leafValues>\n            -1.6322250664234161e-01 6.7339658737182617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1475 -1.3078070478513837e-03</internalNodes>\n          <leafValues>\n            1.2315399944782257e-01 -1.0096319764852524e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1476 -7.6282368972897530e-03</internalNodes>\n          <leafValues>\n            2.5165349245071411e-01 -5.0460711121559143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1477 7.9994397237896919e-03</internalNodes>\n          <leafValues>\n            7.3020651936531067e-02 -1.8877799808979034e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1478 -3.1321209389716387e-03</internalNodes>\n          <leafValues>\n            2.7653199434280396e-01 -4.3276838958263397e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1479 -4.0931310504674911e-02</internalNodes>\n          <leafValues>\n            -6.5518248081207275e-01 1.8600920215249062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1480 7.0344978012144566e-03</internalNodes>\n          <leafValues>\n            2.1914770826697350e-02 -4.8595818877220154e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1481 -2.5299859698861837e-03</internalNodes>\n          <leafValues>\n            1.4030769467353821e-01 -8.0566473305225372e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1482 3.8867890834808350e-03</internalNodes>\n          <leafValues>\n            -8.9075699448585510e-02 1.6832409799098969e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1483 3.8210590719245374e-04</internalNodes>\n          <leafValues>\n            6.5200872719287872e-02 -1.8599529564380646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1484 1.0954789817333221e-01</internalNodes>\n          <leafValues>\n            1.5036020427942276e-02 -8.6908358335494995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1485 -1.4177490083966404e-04</internalNodes>\n          <leafValues>\n            -1.4669269323348999e-01 7.9050153493881226e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1486 2.0990408957004547e-03</internalNodes>\n          <leafValues>\n            -4.6489678323268890e-02 2.3045249283313751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1487 -2.3089480237103999e-04</internalNodes>\n          <leafValues>\n            -1.6784009337425232e-01 6.9773100316524506e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1488 -4.3103471398353577e-04</internalNodes>\n          <leafValues>\n            8.1758759915828705e-02 -1.2939240038394928e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1489 -2.9572288622148335e-04</internalNodes>\n          <leafValues>\n            -1.9068230688571930e-01 5.8420080691576004e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1490 -4.0046018548309803e-03</internalNodes>\n          <leafValues>\n            1.2948529422283173e-01 -8.1599622964859009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1491 1.4935520084691234e-05</internalNodes>\n          <leafValues>\n            -1.3364720344543457e-01 9.8664022982120514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1492 5.7824450777843595e-04</internalNodes>\n          <leafValues>\n            5.9095639735460281e-02 -1.8318089842796326e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1493 1.3251320458948612e-02</internalNodes>\n          <leafValues>\n            -7.1488671004772186e-02 1.5635989606380463e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1494 7.1273561843554489e-06</internalNodes>\n          <leafValues>\n            -1.2283089756965637e-01 9.7752511501312256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1495 1.4193489914759994e-03</internalNodes>\n          <leafValues>\n            -8.1696748733520508e-02 1.3701570034027100e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1496 -8.0165416002273560e-03</internalNodes>\n          <leafValues>\n            2.4697229266166687e-01 -5.6527040898799896e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1497 -2.3803471121937037e-03</internalNodes>\n          <leafValues>\n            -3.7901589274406433e-01 3.4532550722360611e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1498 -4.8633730039000511e-03</internalNodes>\n          <leafValues>\n            6.5441012382507324e-01 -1.9296199083328247e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1499 -1.4388219824468251e-05</internalNodes>\n          <leafValues>\n            7.5101882219314575e-02 -1.4394460618495941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1500 1.4798780284763779e-05</internalNodes>\n          <leafValues>\n            -1.0807389765977859e-01 9.6213810145854950e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1501 2.4176139384508133e-02</internalNodes>\n          <leafValues>\n            2.6983680203557014e-02 -4.0708479285240173e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1502 -3.9851912297308445e-03</internalNodes>\n          <leafValues>\n            2.1786700189113617e-01 -5.4170310497283936e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1503 -2.5377580896019936e-03</internalNodes>\n          <leafValues>\n            -1.5314599871635437e-01 8.8059239089488983e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1504 2.1663319785147905e-03</internalNodes>\n          <leafValues>\n            1.0252720117568970e-01 -1.2039250135421753e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1505 3.5593929351307452e-04</internalNodes>\n          <leafValues>\n            -8.2267768681049347e-02 1.3228890299797058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1506 1.1394560569897294e-03</internalNodes>\n          <leafValues>\n            -8.6393490433692932e-02 1.5693899989128113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1507 5.5563818663358688e-02</internalNodes>\n          <leafValues>\n            1.7108110710978508e-02 -7.0473742485046387e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1508 5.5514591932296753e-01</internalNodes>\n          <leafValues>\n            1.3345389626920223e-02 -6.9916892051696777e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1509 -4.6235490590333939e-03</internalNodes>\n          <leafValues>\n            -2.3983679711818695e-01 3.9515350013971329e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1510 -4.5803869143128395e-03</internalNodes>\n          <leafValues>\n            4.2900869250297546e-01 -2.6430539786815643e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1511 7.0851319469511509e-03</internalNodes>\n          <leafValues>\n            1.1231079697608948e-01 -1.0711509734392166e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1512 -4.0524810901843011e-04</internalNodes>\n          <leafValues>\n            -2.5740951299667358e-01 4.6670019626617432e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1513 -4.9121538177132607e-03</internalNodes>\n          <leafValues>\n            2.7129280567169189e-01 -4.3966241180896759e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1514 -1.9348099827766418e-02</internalNodes>\n          <leafValues>\n            -4.0643858909606934e-01 2.9176769778132439e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1515 -1.3842330081388354e-03</internalNodes>\n          <leafValues>\n            2.3537209630012512e-01 -5.0227548927068710e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1516 6.2752598896622658e-03</internalNodes>\n          <leafValues>\n            2.8113570064306259e-02 -3.9913201332092285e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1517 1.4853129869152326e-05</internalNodes>\n          <leafValues>\n            -1.0750629752874374e-01 1.0206390172243118e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1518 -1.1780710192397237e-03</internalNodes>\n          <leafValues>\n            1.8112790584564209e-01 -5.8998040854930878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1519 -3.2166391611099243e-02</internalNodes>\n          <leafValues>\n            -9.8135101795196533e-01 1.1817139573395252e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1520 2.8749080374836922e-03</internalNodes>\n          <leafValues>\n            5.0774369388818741e-02 -2.0650039613246918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1521 -3.5098160151392221e-03</internalNodes>\n          <leafValues>\n            1.4354039728641510e-01 -7.8006736934185028e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1522 -7.2203627787530422e-03</internalNodes>\n          <leafValues>\n            2.3853950202465057e-01 -4.6176180243492126e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1523 2.0837699994444847e-03</internalNodes>\n          <leafValues>\n            2.2801460698246956e-02 -5.0945621728897095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1524 3.6175400018692017e-02</internalNodes>\n          <leafValues>\n            1.4734740369021893e-02 -6.1349362134933472e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1525 7.5545758008956909e-03</internalNodes>\n          <leafValues>\n            1.6166130080819130e-02 -5.8863008022308350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1526 -2.6058950461447239e-03</internalNodes>\n          <leafValues>\n            3.6436009407043457e-01 -3.4624300897121429e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1527 6.4669351559132338e-04</internalNodes>\n          <leafValues>\n            6.3444733619689941e-02 -1.8953520059585571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1528 -3.1747641041874886e-03</internalNodes>\n          <leafValues>\n            4.2877858877182007e-01 -2.6968790218234062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1529 -2.3839730769395828e-02</internalNodes>\n          <leafValues>\n            -3.6871370673179626e-01 3.3688500523567200e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1530 1.1973649961873889e-03</internalNodes>\n          <leafValues>\n            -6.2898509204387665e-02 1.9179169833660126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1531 4.4593929487746209e-05</internalNodes>\n          <leafValues>\n            -1.1022660136222839e-01 1.2159959971904755e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1532 9.1575905680656433e-03</internalNodes>\n          <leafValues>\n            2.5353889912366867e-02 -4.9928730726242065e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1533 2.3933469783514738e-03</internalNodes>\n          <leafValues>\n            4.8282090574502945e-02 -2.2685450315475464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1534 -1.1994830565527081e-03</internalNodes>\n          <leafValues>\n            1.0886570066213608e-01 -1.0669539868831635e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1535 2.1603968925774097e-03</internalNodes>\n          <leafValues>\n            -7.6076626777648926e-02 1.6507959365844727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1536 -1.6556339338421822e-02</internalNodes>\n          <leafValues>\n            -5.4167211055755615e-01 2.0711649209260941e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1537 -8.8350269943475723e-03</internalNodes>\n          <leafValues>\n            -3.6710909008979797e-01 2.8870400041341782e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1538 -1.4592399566026870e-05</internalNodes>\n          <leafValues>\n            7.8724071383476257e-02 -1.3622610270977020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1539 -1.4897900400683284e-03</internalNodes>\n          <leafValues>\n            1.1436119675636292e-01 -1.0104899853467941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1540 -3.9764028042554855e-03</internalNodes>\n          <leafValues>\n            -1.0250560194253922e-01 1.0466060042381287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1541 -7.2657042182981968e-03</internalNodes>\n          <leafValues>\n            2.2982269525527954e-01 -4.5155581086874008e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1542 8.9115025475621223e-03</internalNodes>\n          <leafValues>\n            2.9681159183382988e-02 -4.4235008955001831e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1543 -1.8145949579775333e-03</internalNodes>\n          <leafValues>\n            2.3911419510841370e-01 -4.6856120228767395e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1544 -3.7546321749687195e-02</internalNodes>\n          <leafValues>\n            -1.8569689989089966e-01 6.1533749103546143e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1545 -1.0010029654949903e-03</internalNodes>\n          <leafValues>\n            1.4361350238323212e-01 -8.6990483105182648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1546 -3.7357229739427567e-03</internalNodes>\n          <leafValues>\n            2.0245459675788879e-01 -6.1167530715465546e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1547 -1.4672010365757160e-05</internalNodes>\n          <leafValues>\n            8.8180869817733765e-02 -1.3037009537220001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1548 9.4379713118541986e-05</internalNodes>\n          <leafValues>\n            5.5626530200242996e-02 -2.0025369524955750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1549 1.5706509293522686e-04</internalNodes>\n          <leafValues>\n            -9.8335877060890198e-02 1.1518850177526474e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1550 -8.1810058327391744e-04</internalNodes>\n          <leafValues>\n            -2.1701550483703613e-01 5.2880410104990005e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1551 -5.1689259707927704e-02</internalNodes>\n          <leafValues>\n            5.7715278863906860e-01 -1.8761100247502327e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1552 -9.0719409286975861e-02</internalNodes>\n          <leafValues>\n            -3.6278849840164185e-01 3.6741130053997040e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1553 -1.0959040373563766e-02</internalNodes>\n          <leafValues>\n            1.6787180304527283e-01 -6.9725647568702698e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1554 3.7122920621186495e-03</internalNodes>\n          <leafValues>\n            6.0360308736562729e-02 -2.0567069947719574e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1555 -1.9315730780363083e-02</internalNodes>\n          <leafValues>\n            -5.7397401332855225e-01 1.9705319777131081e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1556 -2.7051189914345741e-02</internalNodes>\n          <leafValues>\n            3.4983208775520325e-01 -3.6084290593862534e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1557 2.1742910146713257e-02</internalNodes>\n          <leafValues>\n            2.2767079994082451e-02 -6.5319198369979858e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1558 9.9608592689037323e-02</internalNodes>\n          <leafValues>\n            -3.1259559094905853e-02 3.8271111249923706e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1559 4.6517839655280113e-03</internalNodes>\n          <leafValues>\n            1.0088030248880386e-01 -1.2396019697189331e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1560 -1.4784580343984999e-05</internalNodes>\n          <leafValues>\n            7.9683482646942139e-02 -1.5573020279407501e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1561 -1.6718909610062838e-03</internalNodes>\n          <leafValues>\n            1.7077329754829407e-01 -6.7733809351921082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1562 1.4456630196946207e-05</internalNodes>\n          <leafValues>\n            -1.0106030106544495e-01 1.1116830259561539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1563 -2.7084909379482269e-03</internalNodes>\n          <leafValues>\n            1.1312720179557800e-01 -1.0880629718303680e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>159</maxWeakCount>\n      <stageThreshold>-1.3943890333175659e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1564 -2.2686859592795372e-02</internalNodes>\n          <leafValues>\n            2.7316910028457642e-01 -2.7358779311180115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1565 4.2952829971909523e-04</internalNodes>\n          <leafValues>\n            -2.5107958912849426e-01 1.5740729868412018e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1566 2.5115790776908398e-03</internalNodes>\n          <leafValues>\n            -2.2002549469470978e-01 1.5660229325294495e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1567 -6.3958892133086920e-04</internalNodes>\n          <leafValues>\n            7.2609938681125641e-02 -3.8278979063034058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1568 2.6575280353426933e-03</internalNodes>\n          <leafValues>\n            -1.1523439735174179e-01 2.3414239287376404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1569 -7.5916409492492676e-02</internalNodes>\n          <leafValues>\n            3.2517579197883606e-01 -8.2622267305850983e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1570 1.4966350136091933e-05</internalNodes>\n          <leafValues>\n            -3.5640290379524231e-01 5.2353590726852417e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1571 -1.4678399566037115e-05</internalNodes>\n          <leafValues>\n            1.0198219865560532e-01 -2.2452689707279205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1572 5.2314779168227687e-05</internalNodes>\n          <leafValues>\n            -1.7757849395275116e-01 1.0107079893350601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1573 1.4088390162214637e-04</internalNodes>\n          <leafValues>\n            -1.5139770507812500e-01 1.3872760534286499e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1574 -2.3411789909005165e-02</internalNodes>\n          <leafValues>\n            -1.6435989737510681e-01 1.0702139884233475e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1575 2.3284659255295992e-03</internalNodes>\n          <leafValues>\n            -8.0950729548931122e-02 2.2333970665931702e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1576 -3.3611140679568052e-03</internalNodes>\n          <leafValues>\n            -4.4329941272735596e-01 3.4489039331674576e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1577 5.8458978310227394e-04</internalNodes>\n          <leafValues>\n            -1.1083470284938812e-01 1.7215029895305634e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1578 -3.3180968603119254e-04</internalNodes>\n          <leafValues>\n            6.9152593612670898e-02 -2.6321241259574890e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1579 -8.8515877723693848e-04</internalNodes>\n          <leafValues>\n            -3.4764730930328369e-01 4.3258201330900192e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1580 1.4169749920256436e-04</internalNodes>\n          <leafValues>\n            -1.4600689709186554e-01 1.0149820148944855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1581 1.4851680025458336e-03</internalNodes>\n          <leafValues>\n            2.9983170330524445e-02 -4.1786131262779236e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1582 -7.5329327955842018e-04</internalNodes>\n          <leafValues>\n            -2.1557639539241791e-01 6.4534209668636322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1583 1.4260539785027504e-02</internalNodes>\n          <leafValues>\n            -8.0013327300548553e-02 1.9511990249156952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1584 -1.4687920156575274e-05</internalNodes>\n          <leafValues>\n            9.7121663391590118e-02 -1.3502350449562073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1585 -9.8925074562430382e-03</internalNodes>\n          <leafValues>\n            -5.1035261154174805e-01 2.9335800558328629e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1586 -1.8316040514037013e-03</internalNodes>\n          <leafValues>\n            3.2676079869270325e-01 -4.5014020055532455e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1587 8.6495577124878764e-04</internalNodes>\n          <leafValues>\n            -7.7836513519287109e-02 1.8764939904212952e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1588 1.4902660250663757e-01</internalNodes>\n          <leafValues>\n            1.9568990916013718e-02 -6.2450677156448364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1589 -1.7126720398664474e-02</internalNodes>\n          <leafValues>\n            -1.8141449987888336e-01 7.3048681020736694e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1590 -1.7061959952116013e-03</internalNodes>\n          <leafValues>\n            3.1236839294433594e-01 -4.4152028858661652e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1591 3.8261809386312962e-03</internalNodes>\n          <leafValues>\n            5.1518529653549194e-02 -2.9330030083656311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1592 3.8093670736998320e-03</internalNodes>\n          <leafValues>\n            -7.6707206666469574e-02 1.7574439942836761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1593 -3.4228331060148776e-04</internalNodes>\n          <leafValues>\n            -2.3458020389080048e-01 6.1726640909910202e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1594 -4.1697870939970016e-02</internalNodes>\n          <leafValues>\n            4.3929129838943481e-01 -3.6892820149660110e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1595 1.9080520723946393e-04</internalNodes>\n          <leafValues>\n            -1.3488939404487610e-01 9.7168661653995514e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1596 2.6400710339657962e-04</internalNodes>\n          <leafValues>\n            -1.6539520025253296e-01 7.3270231485366821e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1597 7.9839164391160011e-03</internalNodes>\n          <leafValues>\n            -3.3527340739965439e-02 3.6535859107971191e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1598 -1.4267410151660442e-02</internalNodes>\n          <leafValues>\n            4.6739241480827332e-01 -2.7154419571161270e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1599 -9.4726070528849959e-05</internalNodes>\n          <leafValues>\n            -1.5017749369144440e-01 8.7657302618026733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1600 -2.9629279742948711e-04</internalNodes>\n          <leafValues>\n            -1.6194540262222290e-01 7.3863230645656586e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1601 2.3301010951399803e-03</internalNodes>\n          <leafValues>\n            -7.9925157129764557e-02 1.5778550505638123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1602 3.6623800406232476e-04</internalNodes>\n          <leafValues>\n            -8.7019346654415131e-02 2.0495669543743134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1603 -4.4499669224023819e-02</internalNodes>\n          <leafValues>\n            -2.9891410470008850e-01 4.5648001134395599e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1604 -6.0768700204789639e-03</internalNodes>\n          <leafValues>\n            2.3746150732040405e-01 -5.3580708801746368e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1605 6.6064862767234445e-04</internalNodes>\n          <leafValues>\n            5.9221439063549042e-02 -2.3569910228252411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1606 7.4699260294437408e-03</internalNodes>\n          <leafValues>\n            5.1304049789905548e-02 -2.3386649787425995e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1607 -6.7128022201359272e-03</internalNodes>\n          <leafValues>\n            2.7061641216278076e-01 -5.0031121820211411e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1608 4.6589970588684082e-03</internalNodes>\n          <leafValues>\n            4.4932201504707336e-02 -3.0730488896369934e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1609 4.9815201200544834e-03</internalNodes>\n          <leafValues>\n            -4.8255410045385361e-02 2.6853010058403015e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1610 9.9244136363267899e-03</internalNodes>\n          <leafValues>\n            1.9446769729256630e-02 -7.0352387428283691e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1611 6.1988402158021927e-03</internalNodes>\n          <leafValues>\n            -3.5107269883155823e-02 3.5460400581359863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1612 8.8433362543582916e-03</internalNodes>\n          <leafValues>\n            4.5328389853239059e-02 -2.7485930919647217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1613 1.1110560037195683e-02</internalNodes>\n          <leafValues>\n            2.2391419857740402e-02 -5.0172042846679688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1614 -6.9408811395987868e-04</internalNodes>\n          <leafValues>\n            1.7079490423202515e-01 -6.3849426805973053e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1615 8.0377031117677689e-03</internalNodes>\n          <leafValues>\n            8.8937461376190186e-02 -1.6416129469871521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1616 1.4750069567526225e-05</internalNodes>\n          <leafValues>\n            -1.3713030517101288e-01 9.6981123089790344e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1617 1.2381490087136626e-03</internalNodes>\n          <leafValues>\n            -6.9491222500801086e-02 1.6551379859447479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1618 2.6584148872643709e-04</internalNodes>\n          <leafValues>\n            -9.6803613007068634e-02 1.2020370364189148e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1619 -5.4076651576906443e-04</internalNodes>\n          <leafValues>\n            -2.3185379803180695e-01 4.8987850546836853e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1620 -5.1092808134853840e-03</internalNodes>\n          <leafValues>\n            3.0391758680343628e-01 -4.0800470858812332e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1621 1.5575919533148408e-03</internalNodes>\n          <leafValues>\n            -1.0150980204343796e-01 1.4465929567813873e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1622 2.8396019712090492e-02</internalNodes>\n          <leafValues>\n            1.5098540484905243e-01 -8.8314309716224670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1623 1.5096530551090837e-03</internalNodes>\n          <leafValues>\n            5.1589738577604294e-02 -2.6199528574943542e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1624 1.4308419777080417e-03</internalNodes>\n          <leafValues>\n            -4.5497849583625793e-02 2.7584540843963623e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1625 1.3030369579792023e-01</internalNodes>\n          <leafValues>\n            2.0329989492893219e-02 -5.7491821050643921e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1626 -3.3548770006746054e-03</internalNodes>\n          <leafValues>\n            1.2289950251579285e-01 -8.9937411248683929e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1627 2.7094839140772820e-02</internalNodes>\n          <leafValues>\n            1.4342390000820160e-02 -7.8952521085739136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1628 -3.6210110783576965e-01</internalNodes>\n          <leafValues>\n            -6.2560427188873291e-01 1.4021329581737518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1629 -6.6879601217806339e-04</internalNodes>\n          <leafValues>\n            2.1966129541397095e-01 -5.2415199577808380e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1630 -3.7389241158962250e-02</internalNodes>\n          <leafValues>\n            -4.7313681244850159e-01 2.5704499334096909e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1631 -7.4386061169207096e-03</internalNodes>\n          <leafValues>\n            -5.2914857864379883e-01 2.0038880407810211e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1632 1.0443119704723358e-01</internalNodes>\n          <leafValues>\n            -2.2909460589289665e-02 5.1592028141021729e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1633 -6.1161867051851004e-05</internalNodes>\n          <leafValues>\n            7.7016606926918030e-02 -1.4625400304794312e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1634 6.5830379026010633e-04</internalNodes>\n          <leafValues>\n            7.0015281438827515e-02 -1.5569929778575897e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1635 9.7367232665419579e-03</internalNodes>\n          <leafValues>\n            -3.1582240015268326e-02 3.2754561305046082e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1636 -2.9574360232800245e-03</internalNodes>\n          <leafValues>\n            -3.4247711300849915e-01 3.2184720039367676e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1637 1.6319820424541831e-03</internalNodes>\n          <leafValues>\n            -4.9400478601455688e-02 2.2656440734863281e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1638 1.3844939880073071e-02</internalNodes>\n          <leafValues>\n            2.0476659759879112e-02 -5.4600667953491211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1639 3.1580299139022827e-02</internalNodes>\n          <leafValues>\n            -4.2422048747539520e-02 2.9091480374336243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1640 8.6624026298522949e-03</internalNodes>\n          <leafValues>\n            5.4432898759841919e-02 -2.1892189979553223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1641 -4.6714721247553825e-04</internalNodes>\n          <leafValues>\n            -1.8205730617046356e-01 7.1491912007331848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1642 4.1834521107375622e-03</internalNodes>\n          <leafValues>\n            -6.7491203546524048e-02 1.7285770177841187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1643 -5.3335628472268581e-03</internalNodes>\n          <leafValues>\n            -8.4681749343872070e-01 1.3804829679429531e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1644 7.8782793134450912e-03</internalNodes>\n          <leafValues>\n            -4.8166718333959579e-02 2.4242730438709259e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1645 3.8775329012423754e-03</internalNodes>\n          <leafValues>\n            2.4311149492859840e-02 -4.9763259291648865e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1646 -1.6564880206715316e-04</internalNodes>\n          <leafValues>\n            5.5546380579471588e-02 -1.9554230570793152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1647 1.8993400037288666e-02</internalNodes>\n          <leafValues>\n            -3.6479089409112930e-02 2.8472718596458435e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1648 -3.4308759495615959e-03</internalNodes>\n          <leafValues>\n            -3.2813000679016113e-01 3.6524198949337006e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1649 1.4614370229537599e-05</internalNodes>\n          <leafValues>\n            -1.0106439888477325e-01 1.0622490197420120e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1650 1.5978919342160225e-02</internalNodes>\n          <leafValues>\n            3.0059399083256721e-02 -3.9310181140899658e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1651 -2.2245719446800649e-04</internalNodes>\n          <leafValues>\n            1.8586489558219910e-01 -7.2151653468608856e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1652 2.0615909248590469e-02</internalNodes>\n          <leafValues>\n            1.5250990167260170e-02 -7.8391200304031372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1653 2.8645060956478119e-04</internalNodes>\n          <leafValues>\n            6.8745598196983337e-02 -1.5308310091495514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1654 -5.9233439969830215e-05</internalNodes>\n          <leafValues>\n            -1.2545019388198853e-01 9.8448492586612701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1655 -7.6257862383499742e-04</internalNodes>\n          <leafValues>\n            2.1546240150928497e-01 -5.3760219365358353e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1656 -1.4181639999151230e-03</internalNodes>\n          <leafValues>\n            -1.9876889884471893e-01 5.1982138305902481e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1657 -4.4716868549585342e-02</internalNodes>\n          <leafValues>\n            -7.5508397817611694e-01 1.2906449846923351e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1658 -1.3735699467360973e-03</internalNodes>\n          <leafValues>\n            2.2003139555454254e-01 -5.1394689828157425e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1659 -1.5352779999375343e-02</internalNodes>\n          <leafValues>\n            -2.1422849595546722e-01 5.3781170397996902e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1660 1.3817439787089825e-02</internalNodes>\n          <leafValues>\n            -3.5158120095729828e-02 2.9399091005325317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1661 8.7981626391410828e-02</internalNodes>\n          <leafValues>\n            1.6688749194145203e-02 -7.2053599357604980e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1662 4.0486121177673340e-01</internalNodes>\n          <leafValues>\n            9.4695771113038063e-03 -8.2725608348846436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1663 1.9231239566579461e-03</internalNodes>\n          <leafValues>\n            -5.8016318827867508e-02 1.7696020007133484e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1664 -4.0756969247013330e-04</internalNodes>\n          <leafValues>\n            8.7600946426391602e-02 -1.2633720040321350e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1665 -2.3862780071794987e-03</internalNodes>\n          <leafValues>\n            -4.0085569024085999e-01 2.7183029800653458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1666 5.6235089898109436e-02</internalNodes>\n          <leafValues>\n            -1.7541319131851196e-02 7.3818737268447876e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1667 4.9810402560979128e-04</internalNodes>\n          <leafValues>\n            -7.6487071812152863e-02 1.2697990238666534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1668 5.3285917965695262e-04</internalNodes>\n          <leafValues>\n            5.9596300125122070e-02 -1.7600339651107788e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1669 5.9949647402390838e-04</internalNodes>\n          <leafValues>\n            -8.2509063184261322e-02 1.3002809882164001e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1670 -2.0725550712086260e-04</internalNodes>\n          <leafValues>\n            9.3374222517013550e-02 -1.1726769804954529e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1671 8.1314949784427881e-04</internalNodes>\n          <leafValues>\n            -8.0063126981258392e-02 1.4701730012893677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1672 -3.4973450237885118e-04</internalNodes>\n          <leafValues>\n            1.1057929694652557e-01 -1.0881700366735458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1673 -2.1448899805545807e-01</internalNodes>\n          <leafValues>\n            -3.1701159477233887e-01 4.1711531579494476e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1674 5.9010740369558334e-04</internalNodes>\n          <leafValues>\n            4.6280328184366226e-02 -2.3512250185012817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1675 -1.2093999981880188e-01</internalNodes>\n          <leafValues>\n            -6.8957090377807617e-01 1.4982040040194988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1676 1.0181350260972977e-01</internalNodes>\n          <leafValues>\n            1.1298139579594135e-02 -7.1199649572372437e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1677 3.5208329558372498e-01</internalNodes>\n          <leafValues>\n            1.2944510206580162e-02 -6.7572408914566040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1678 -1.4602140254282858e-05</internalNodes>\n          <leafValues>\n            6.9550313055515289e-02 -1.4288060367107391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1679 -2.3212860524654388e-01</internalNodes>\n          <leafValues>\n            -7.5287401676177979e-01 1.1394330300390720e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1680 -1.4764709630981088e-03</internalNodes>\n          <leafValues>\n            1.3547790050506592e-01 -8.5470907390117645e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1681 9.9324379116296768e-03</internalNodes>\n          <leafValues>\n            -4.8758801072835922e-02 2.4582690000534058e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1682 -2.6857290416955948e-02</internalNodes>\n          <leafValues>\n            -4.3975710868835449e-01 2.5082239881157875e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1683 -7.3618912138044834e-03</internalNodes>\n          <leafValues>\n            1.2384700030088425e-01 -9.7226209938526154e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1684 -1.9785730168223381e-02</internalNodes>\n          <leafValues>\n            -5.0932317972183228e-01 2.3481979966163635e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1685 -1.4635100342275109e-05</internalNodes>\n          <leafValues>\n            9.4043917953968048e-02 -1.2145669758319855e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1686 -5.4067030549049377e-02</internalNodes>\n          <leafValues>\n            -5.4586207866668701e-01 1.9500140100717545e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1687 1.1532169766724110e-02</internalNodes>\n          <leafValues>\n            -7.6409153640270233e-02 1.3763970136642456e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1688 -4.4358540326356888e-03</internalNodes>\n          <leafValues>\n            1.2359759956598282e-01 -9.1719299554824829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1689 8.3216017810627818e-04</internalNodes>\n          <leafValues>\n            6.3659071922302246e-02 -2.0440760254859924e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1690 -1.2503969669342041e-01</internalNodes>\n          <leafValues>\n            -4.1524758934974670e-01 2.7199100703001022e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1691 4.9618318676948547e-02</internalNodes>\n          <leafValues>\n            1.5955109149217606e-02 -6.1666852235794067e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1692 -3.0613599810749292e-03</internalNodes>\n          <leafValues>\n            3.6662209033966064e-01 -3.3449448645114899e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1693 3.5273379180580378e-03</internalNodes>\n          <leafValues>\n            3.1757980585098267e-02 -3.8478809595108032e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1694 -6.6726570948958397e-03</internalNodes>\n          <leafValues>\n            3.2095840573310852e-01 -3.4408681094646454e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1695 -2.5795500259846449e-03</internalNodes>\n          <leafValues>\n            -3.7870529294013977e-01 2.8562130406498909e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1696 7.8417789191007614e-03</internalNodes>\n          <leafValues>\n            -2.0479770377278328e-02 5.1704108715057373e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1697 3.1101319473236799e-04</internalNodes>\n          <leafValues>\n            -1.0809139907360077e-01 9.7204521298408508e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1698 2.6113479398190975e-03</internalNodes>\n          <leafValues>\n            -8.1770427525043488e-02 1.4691209793090820e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1699 7.3472261428833008e-03</internalNodes>\n          <leafValues>\n            2.5131259113550186e-02 -4.3025061488151550e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1700 1.3528259296435863e-04</internalNodes>\n          <leafValues>\n            -1.4751060307025909e-01 6.7584678530693054e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1701 -5.1026898290729150e-05</internalNodes>\n          <leafValues>\n            -1.2161359935998917e-01 8.4333047270774841e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1702 1.1552199721336365e-03</internalNodes>\n          <leafValues>\n            -5.4663829505443573e-02 1.9773660600185394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1703 -8.2931712269783020e-02</internalNodes>\n          <leafValues>\n            -5.1923328638076782e-01 2.0582359284162521e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1704 -4.6260739327408373e-04</internalNodes>\n          <leafValues>\n            8.5588268935680389e-02 -1.1725299805402756e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1705 6.7906372714787722e-04</internalNodes>\n          <leafValues>\n            4.5980118215084076e-02 -2.2628420591354370e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1706 1.4090019976720214e-03</internalNodes>\n          <leafValues>\n            -4.7628920525312424e-02 2.2722719609737396e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1707 2.8954911231994629e-01</internalNodes>\n          <leafValues>\n            1.6701240092515945e-02 -6.3967019319534302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1708 1.9376130774617195e-02</internalNodes>\n          <leafValues>\n            -2.2569410502910614e-02 5.0590497255325317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1709 4.2641081381589174e-04</internalNodes>\n          <leafValues>\n            6.6041722893714905e-02 -1.6666300594806671e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1710 1.7502580303698778e-03</internalNodes>\n          <leafValues>\n            -5.8077909052371979e-02 1.9512599706649780e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1711 -3.2605750020593405e-03</internalNodes>\n          <leafValues>\n            -2.9101881384849548e-01 3.8328718394041061e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1712 1.9519040361046791e-03</internalNodes>\n          <leafValues>\n            5.9565968811511993e-02 -1.6910600662231445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1713 -3.2053990289568901e-03</internalNodes>\n          <leafValues>\n            1.9927769899368286e-01 -5.6053258478641510e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1714 1.7617279663681984e-03</internalNodes>\n          <leafValues>\n            5.0697531551122665e-02 -2.1276649832725525e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1715 -6.0043102130293846e-03</internalNodes>\n          <leafValues>\n            -1.3699269294738770e-01 8.2275278866291046e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1716 2.4830829352140427e-03</internalNodes>\n          <leafValues>\n            -5.1561661064624786e-02 2.1684220433235168e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1717 -1.0821930319070816e-01</internalNodes>\n          <leafValues>\n            -7.8375291824340820e-01 1.4433650299906731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1718 -7.5229378417134285e-03</internalNodes>\n          <leafValues>\n            1.3453729450702667e-01 -9.0582698583602905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1719 3.0750989913940430e-02</internalNodes>\n          <leafValues>\n            1.1081690341234207e-01 -9.9475599825382233e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1720 -2.8948320541530848e-03</internalNodes>\n          <leafValues>\n            1.9005739688873291e-01 -5.2639260888099670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1721 2.7011099737137556e-03</internalNodes>\n          <leafValues>\n            5.8573558926582336e-02 -1.9851949810981750e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1722 1.2562989722937346e-03</internalNodes>\n          <leafValues>\n            -7.3565311729907990e-02 1.5436840057373047e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>173</maxWeakCount>\n      <stageThreshold>-1.4785599708557129e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1723 -2.1460579708218575e-02</internalNodes>\n          <leafValues>\n            3.2505050301551819e-01 -2.0890380442142487e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1724 7.6785432174801826e-03</internalNodes>\n          <leafValues>\n            -1.3231310248374939e-01 3.0525839328765869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1725 3.4118059556931257e-03</internalNodes>\n          <leafValues>\n            -3.0793079733848572e-01 1.1010979861021042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1726 -1.4710490177094471e-05</internalNodes>\n          <leafValues>\n            9.5858857035636902e-02 -2.9641860723495483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1727 1.0538049973547459e-02</internalNodes>\n          <leafValues>\n            -7.9252541065216064e-02 3.7234848737716675e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1728 -2.5260078837163746e-04</internalNodes>\n          <leafValues>\n            6.7121110856533051e-02 -3.0784338712692261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1729 -3.5665810573846102e-03</internalNodes>\n          <leafValues>\n            1.4667609333992004e-01 -1.7083789408206940e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1730 -1.2677359627559781e-03</internalNodes>\n          <leafValues>\n            -4.9063721299171448e-01 2.0374119281768799e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1731 -6.7669381387531757e-03</internalNodes>\n          <leafValues>\n            2.5767329335212708e-01 -7.4175901710987091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1732 -6.0447258874773979e-04</internalNodes>\n          <leafValues>\n            -1.9196410477161407e-01 9.1349847614765167e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1733 -2.5375590194016695e-03</internalNodes>\n          <leafValues>\n            -3.5663878917694092e-01 5.1547251641750336e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1734 -7.0200557820498943e-03</internalNodes>\n          <leafValues>\n            3.9719080924987793e-01 -4.3967988342046738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1735 -5.7049379684031010e-03</internalNodes>\n          <leafValues>\n            -5.0015491247177124e-01 2.9825929552316666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1736 1.4744909713044763e-03</internalNodes>\n          <leafValues>\n            5.8546211570501328e-02 -2.6139810681343079e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1737 9.2834811657667160e-03</internalNodes>\n          <leafValues>\n            -4.2836759239435196e-02 3.3443170785903931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1738 9.9660153500735760e-04</internalNodes>\n          <leafValues>\n            -1.0425110161304474e-01 1.6191780567169189e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1739 -7.5932733714580536e-02</internalNodes>\n          <leafValues>\n            -3.7356320023536682e-01 4.3075688183307648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1740 5.5370710470015183e-05</internalNodes>\n          <leafValues>\n            -1.4570540189743042e-01 1.1560150235891342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1741 1.4746849956281949e-05</internalNodes>\n          <leafValues>\n            -1.2972679734230042e-01 1.1747740209102631e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1742 -1.4875919441692531e-04</internalNodes>\n          <leafValues>\n            -1.8002930283546448e-01 7.8782692551612854e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1743 3.3751460723578930e-03</internalNodes>\n          <leafValues>\n            -7.7242009341716766e-02 1.8596859276294708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1744 3.4271259210072458e-04</internalNodes>\n          <leafValues>\n            -1.5393340587615967e-01 1.0472580045461655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1745 -4.5711229904554784e-04</internalNodes>\n          <leafValues>\n            -2.2300529479980469e-01 6.1818670481443405e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1746 3.2788628595881164e-04</internalNodes>\n          <leafValues>\n            7.9448707401752472e-02 -1.8889829516410828e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1747 -9.6754019614309072e-04</internalNodes>\n          <leafValues>\n            1.3137130439281464e-01 -1.0801070183515549e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1748 1.0537009686231613e-02</internalNodes>\n          <leafValues>\n            2.2138269618153572e-02 -5.7479751110076904e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1749 5.6796409189701080e-03</internalNodes>\n          <leafValues>\n            -5.6034579873085022e-02 2.4849580228328705e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1750 -8.8083967566490173e-03</internalNodes>\n          <leafValues>\n            -3.7167680263519287e-01 4.2726948857307434e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1751 -2.8319710865616798e-02</internalNodes>\n          <leafValues>\n            -6.2387847900390625e-01 2.0844049751758575e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1752 1.3637860305607319e-02</internalNodes>\n          <leafValues>\n            1.4434239827096462e-02 -7.1537137031555176e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1753 1.1822770349681377e-02</internalNodes>\n          <leafValues>\n            -4.3181091547012329e-02 3.0682548880577087e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1754 -6.1035697581246495e-04</internalNodes>\n          <leafValues>\n            -2.0418339967727661e-01 6.2115620821714401e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1755 -5.6125568225979805e-03</internalNodes>\n          <leafValues>\n            3.6485010385513306e-01 -3.5448960959911346e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1756 1.4603640011046082e-05</internalNodes>\n          <leafValues>\n            -9.6096910536289215e-02 1.2142290174961090e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1757 1.9061230123043060e-03</internalNodes>\n          <leafValues>\n            5.3135868161916733e-02 -2.2978909313678741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1758 -3.6644220817834139e-03</internalNodes>\n          <leafValues>\n            1.9614529609680176e-01 -6.8556912243366241e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1759 1.2336249928921461e-03</internalNodes>\n          <leafValues>\n            -8.7000347673892975e-02 1.3920229673385620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1760 5.4660569876432419e-03</internalNodes>\n          <leafValues>\n            2.2660890594124794e-02 -4.8329529166221619e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1761 -6.1730947345495224e-04</internalNodes>\n          <leafValues>\n            -2.1959540247917175e-01 5.5258519947528839e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1762 2.9604700393974781e-03</internalNodes>\n          <leafValues>\n            -5.0548229366540909e-02 2.7476710081100464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1763 2.8015000745654106e-02</internalNodes>\n          <leafValues>\n            1.8874650821089745e-02 -6.0498368740081787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1764 -7.1651988946541678e-06</internalNodes>\n          <leafValues>\n            1.0836219787597656e-01 -1.0606969892978668e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1765 -1.6367150470614433e-02</internalNodes>\n          <leafValues>\n            2.8645038604736328e-01 -3.7137690931558609e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1766 1.0280719725415111e-03</internalNodes>\n          <leafValues>\n            5.6318141520023346e-02 -2.1795029938220978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1767 1.3662660494446754e-03</internalNodes>\n          <leafValues>\n            -4.6803500503301620e-02 2.3804000020027161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1768 7.6626739464700222e-03</internalNodes>\n          <leafValues>\n            2.1595260128378868e-02 -5.6847488880157471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1769 -4.5117521658539772e-03</internalNodes>\n          <leafValues>\n            -3.5794979333877563e-01 3.0485490337014198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1770 -4.3773967772722244e-03</internalNodes>\n          <leafValues>\n            2.3192660510540009e-01 -5.3999818861484528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1771 -7.2474628686904907e-03</internalNodes>\n          <leafValues>\n            -4.3440380692481995e-01 2.6374189183115959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1772 7.9146260395646095e-04</internalNodes>\n          <leafValues>\n            -9.9924586713314056e-02 1.1088500171899796e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1773 6.4166806638240814e-02</internalNodes>\n          <leafValues>\n            1.8938669934868813e-02 -5.7849419116973877e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1774 -1.1797840124927461e-04</internalNodes>\n          <leafValues>\n            -1.4889569580554962e-01 6.8777203559875488e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1775 1.2801289558410645e-02</internalNodes>\n          <leafValues>\n            5.6179329752922058e-02 -2.0865969359874725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1776 -2.7018740773200989e-02</internalNodes>\n          <leafValues>\n            4.5356890559196472e-01 -2.5054579600691795e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1777 -6.9431727752089500e-03</internalNodes>\n          <leafValues>\n            -5.2916550636291504e-01 2.1800139918923378e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1778 3.3396780490875244e-03</internalNodes>\n          <leafValues>\n            -3.7295959889888763e-02 3.1198439002037048e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1779 -3.8888349081389606e-04</internalNodes>\n          <leafValues>\n            -1.5630130469799042e-01 7.0981830358505249e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1780 -7.1400677552446723e-04</internalNodes>\n          <leafValues>\n            2.1799430251121521e-01 -5.4069280624389648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1781 1.2549630366265774e-02</internalNodes>\n          <leafValues>\n            1.7357179895043373e-02 -7.8320449590682983e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1782 -1.4623020433646161e-05</internalNodes>\n          <leafValues>\n            7.8640103340148926e-02 -1.4212970435619354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1783 -1.2133170384913683e-03</internalNodes>\n          <leafValues>\n            -3.1371229887008667e-01 3.4287638962268829e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1784 3.6882720887660980e-03</internalNodes>\n          <leafValues>\n            -3.8382381200790405e-02 3.0124679207801819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1785 -1.4818239833402913e-05</internalNodes>\n          <leafValues>\n            1.2561169266700745e-01 -9.1703377664089203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1786 3.0302109662443399e-03</internalNodes>\n          <leafValues>\n            -2.9543070122599602e-02 3.7889540195465088e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1787 5.9340851294109598e-05</internalNodes>\n          <leafValues>\n            -1.7745719850063324e-01 7.0102430880069733e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1788 -2.9449560315697454e-05</internalNodes>\n          <leafValues>\n            1.2052319943904877e-01 -1.1128979921340942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1789 -1.7771139740943909e-02</internalNodes>\n          <leafValues>\n            -4.7108310461044312e-01 2.5600789114832878e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1790 7.6775359921157360e-03</internalNodes>\n          <leafValues>\n            -4.0757879614830017e-02 2.7021768689155579e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1791 -1.8513019382953644e-01</internalNodes>\n          <leafValues>\n            -3.0238750576972961e-01 3.8790911436080933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1792 2.7697190642356873e-02</internalNodes>\n          <leafValues>\n            2.6712810620665550e-02 -4.4166600704193115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1793 -2.0427649840712547e-02</internalNodes>\n          <leafValues>\n            2.5086608529090881e-01 -5.5672701448202133e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1794 9.0200370177626610e-03</internalNodes>\n          <leafValues>\n            4.7344069927930832e-02 -2.7445980906486511e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1795 -1.2504979968070984e-03</internalNodes>\n          <leafValues>\n            -1.4971190690994263e-01 7.9667650163173676e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1796 -1.0021160356700420e-02</internalNodes>\n          <leafValues>\n            2.4248859286308289e-01 -4.9217909574508667e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1797 2.6042328681796789e-04</internalNodes>\n          <leafValues>\n            6.3192427158355713e-02 -1.8544280529022217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1798 1.1920549441128969e-03</internalNodes>\n          <leafValues>\n            -8.6547911167144775e-02 1.3552339375019073e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1799 3.0391330365091562e-03</internalNodes>\n          <leafValues>\n            -7.2965219616889954e-02 1.6479800641536713e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1800 -2.9615699531859718e-05</internalNodes>\n          <leafValues>\n            8.2047976553440094e-02 -1.4502969384193420e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1801 -1.2226340360939503e-02</internalNodes>\n          <leafValues>\n            -5.3014177083969116e-01 2.0405799150466919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1802 -2.8124889358878136e-02</internalNodes>\n          <leafValues>\n            -5.5148762464523315e-01 1.7688119783997536e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1803 -4.8307109624147415e-02</internalNodes>\n          <leafValues>\n            -8.2579791545867920e-01 1.1020540259778500e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1804 4.6184109523892403e-03</internalNodes>\n          <leafValues>\n            3.2069969922304153e-02 -3.0115368962287903e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1805 -8.4275740664452314e-04</internalNodes>\n          <leafValues>\n            1.7034439742565155e-01 -6.3009433448314667e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1806 6.3863280229270458e-03</internalNodes>\n          <leafValues>\n            1.6307299956679344e-02 -7.1346491575241089e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1807 -7.7203067485243082e-04</internalNodes>\n          <leafValues>\n            1.6715280711650848e-01 -6.6192783415317535e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1808 -2.2645338904112577e-03</internalNodes>\n          <leafValues>\n            -3.5107091069221497e-01 2.8168670833110809e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1809 -3.7738790269941092e-03</internalNodes>\n          <leafValues>\n            5.2762818336486816e-01 -2.0222609862685204e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1810 5.8204168453812599e-03</internalNodes>\n          <leafValues>\n            7.0864066481590271e-02 -1.4675390720367432e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1811 -1.2069250456988811e-02</internalNodes>\n          <leafValues>\n            2.3928099870681763e-01 -4.4312968850135803e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1812 3.3203759230673313e-03</internalNodes>\n          <leafValues>\n            -6.5749533474445343e-02 2.0277680456638336e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1813 2.1621929481625557e-03</internalNodes>\n          <leafValues>\n            6.7407980561256409e-02 -1.8125349283218384e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1814 1.2229150161147118e-02</internalNodes>\n          <leafValues>\n            2.2559309378266335e-02 -4.9180999398231506e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1815 -6.7253508605062962e-03</internalNodes>\n          <leafValues>\n            -1.5290050208568573e-01 6.9786652922630310e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1816 2.3579499684274197e-03</internalNodes>\n          <leafValues>\n            4.9212101846933365e-02 -2.0838280022144318e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1817 -2.2950689308345318e-03</internalNodes>\n          <leafValues>\n            1.2400440126657486e-01 -9.6624918282032013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1818 1.0958530474454165e-03</internalNodes>\n          <leafValues>\n            -7.3270753026008606e-02 1.5208619832992554e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1819 -1.3427219819277525e-03</internalNodes>\n          <leafValues>\n            1.2233039736747742e-01 -9.5689877867698669e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1820 5.4691417608410120e-04</internalNodes>\n          <leafValues>\n            -1.3924160599708557e-01 8.4381736814975739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1821 8.4598818793892860e-03</internalNodes>\n          <leafValues>\n            8.9689873158931732e-02 -1.3318899273872375e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1822 -9.1597117483615875e-02</internalNodes>\n          <leafValues>\n            -6.1854732036590576e-01 2.2867869585752487e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1823 -1.1090439511463046e-03</internalNodes>\n          <leafValues>\n            5.8513749390840530e-02 -1.8806450068950653e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1824 2.2256910597207025e-05</internalNodes>\n          <leafValues>\n            -8.4488280117511749e-02 1.2780910730361938e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1825 -1.5437819820363075e-04</internalNodes>\n          <leafValues>\n            -1.2228029966354370e-01 8.6046978831291199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1826 -2.6862788945436478e-03</internalNodes>\n          <leafValues>\n            -2.4487000703811646e-01 4.4255960732698441e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1827 -4.0478641167283058e-03</internalNodes>\n          <leafValues>\n            2.7030688524246216e-01 -4.2200870811939240e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1828 -5.3340241312980652e-02</internalNodes>\n          <leafValues>\n            -7.6232349872589111e-01 1.4388039708137512e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1829 2.8256059158593416e-03</internalNodes>\n          <leafValues>\n            -2.9877070337533951e-02 3.9692971110343933e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1830 1.4443730004131794e-02</internalNodes>\n          <leafValues>\n            3.0186710879206657e-02 -3.6606648564338684e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1831 1.3111650478094816e-03</internalNodes>\n          <leafValues>\n            -4.8140369355678558e-02 2.2434459626674652e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1832 1.6730680363252759e-03</internalNodes>\n          <leafValues>\n            -5.9983398765325546e-02 1.6394190490245819e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1833 2.3517120629549026e-02</internalNodes>\n          <leafValues>\n            2.4109700694680214e-02 -4.0492439270019531e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1834 -3.5689130891114473e-03</internalNodes>\n          <leafValues>\n            3.1903558969497681e-01 -3.4295879304409027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1835 -2.8193008620291948e-04</internalNodes>\n          <leafValues>\n            -1.4874160289764404e-01 7.0669896900653839e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1836 1.0215859860181808e-01</internalNodes>\n          <leafValues>\n            1.2840500101447105e-02 -7.7848541736602783e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1837 -1.9175480306148529e-01</internalNodes>\n          <leafValues>\n            -7.5706577301025391e-01 1.0587760247290134e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1838 5.3162658587098122e-03</internalNodes>\n          <leafValues>\n            -4.0066570043563843e-02 2.6050180196762085e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1839 -1.1487120063975453e-03</internalNodes>\n          <leafValues>\n            -1.8017220497131348e-01 6.1610430479049683e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1840 -2.8316730260848999e-01</internalNodes>\n          <leafValues>\n            -8.4913408756256104e-01 1.1647139675915241e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1841 3.3731758594512939e-02</internalNodes>\n          <leafValues>\n            1.2357609719038010e-01 -7.7482230961322784e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1842 9.8635945469141006e-03</internalNodes>\n          <leafValues>\n            4.3958030641078949e-02 -2.5541779398918152e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1843 -3.1564768869429827e-03</internalNodes>\n          <leafValues>\n            1.8942989408969879e-01 -5.8221038430929184e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1844 1.5572150005027652e-03</internalNodes>\n          <leafValues>\n            -1.0376139730215073e-01 1.4107349514961243e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1845 6.2360420823097229e-02</internalNodes>\n          <leafValues>\n            9.6462322399020195e-03 -8.5804969072341919e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1846 1.1480550165288150e-04</internalNodes>\n          <leafValues>\n            -8.4419928491115570e-02 1.1312700062990189e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1847 -5.9252730570733547e-03</internalNodes>\n          <leafValues>\n            -3.1650778651237488e-01 3.2079849392175674e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1848 -2.4660851340740919e-04</internalNodes>\n          <leafValues>\n            8.8697679340839386e-02 -1.1085110157728195e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1849 1.6946049872785807e-03</internalNodes>\n          <leafValues>\n            -5.9657149016857147e-02 2.0904210209846497e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1850 9.0623252617660910e-05</internalNodes>\n          <leafValues>\n            7.7441960573196411e-02 -1.2806339561939240e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1851 1.1666920036077499e-03</internalNodes>\n          <leafValues>\n            -6.1748579144477844e-02 1.5702450275421143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1852 1.2541549513116479e-03</internalNodes>\n          <leafValues>\n            4.4608380645513535e-02 -2.3140360414981842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1853 -6.0275900177657604e-03</internalNodes>\n          <leafValues>\n            9.5281846821308136e-02 -1.0283090174198151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1854 -2.0472849905490875e-01</internalNodes>\n          <leafValues>\n            -4.1114759445190430e-01 2.3537550121545792e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1855 1.7691280692815781e-02</internalNodes>\n          <leafValues>\n            -3.9257150143384933e-02 2.8564441204071045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1856 -1.2875649333000183e-01</internalNodes>\n          <leafValues>\n            -8.2030779123306274e-01 1.1735290288925171e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1857 1.2868089834228158e-03</internalNodes>\n          <leafValues>\n            5.0858870148658752e-02 -1.7848010361194611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1858 -4.5859832316637039e-03</internalNodes>\n          <leafValues>\n            1.6802109777927399e-01 -6.1582598835229874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1859 4.6391240903176367e-04</internalNodes>\n          <leafValues>\n            6.6747047007083893e-02 -1.4237800240516663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1860 -4.4439961202442646e-03</internalNodes>\n          <leafValues>\n            4.5714980363845825e-01 -2.1746810525655746e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1861 3.8220020942389965e-03</internalNodes>\n          <leafValues>\n            1.8094329163432121e-02 -6.0244542360305786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1862 1.3894500443711877e-03</internalNodes>\n          <leafValues>\n            3.4007851034402847e-02 -2.7153480052947998e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1863 -7.2111929766833782e-03</internalNodes>\n          <leafValues>\n            2.7312570810317993e-01 -3.6855131387710571e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1864 1.6509749693796039e-03</internalNodes>\n          <leafValues>\n            -8.4407016634941101e-02 1.3134449720382690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1865 -5.0506892148405313e-04</internalNodes>\n          <leafValues>\n            -1.4193339645862579e-01 7.3628053069114685e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1866 -1.1205329559743404e-02</internalNodes>\n          <leafValues>\n            3.0093750357627869e-01 -3.4171391278505325e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1867 -3.4860160667449236e-04</internalNodes>\n          <leafValues>\n            -2.4538309872150421e-01 5.9823978692293167e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1868 7.3347258148714900e-04</internalNodes>\n          <leafValues>\n            -6.1770260334014893e-02 1.6367949545383453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1869 -9.2969406396150589e-03</internalNodes>\n          <leafValues>\n            -3.0236640572547913e-01 3.9257898926734924e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1870 2.3957120254635811e-02</internalNodes>\n          <leafValues>\n            -2.3900719359517097e-02 4.8340830206871033e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1871 3.6422210541786626e-05</internalNodes>\n          <leafValues>\n            -1.2283039838075638e-01 9.1258950531482697e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1872 5.0458200275897980e-02</internalNodes>\n          <leafValues>\n            1.3529149815440178e-02 -7.7827727794647217e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1873 -9.8683983087539673e-03</internalNodes>\n          <leafValues>\n            -4.4060459733009338e-01 2.0404359325766563e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1874 -1.0851239785552025e-02</internalNodes>\n          <leafValues>\n            2.0165500044822693e-01 -5.2248589694499969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1875 1.7670930537860841e-04</internalNodes>\n          <leafValues>\n            -1.3691440224647522e-01 8.3170592784881592e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1876 1.2582179624587297e-04</internalNodes>\n          <leafValues>\n            6.1275351792573929e-02 -1.6542710363864899e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1877 -7.0588971721008420e-04</internalNodes>\n          <leafValues>\n            1.5219129621982574e-01 -6.6164620220661163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1878 1.1355109745636582e-03</internalNodes>\n          <leafValues>\n            -5.4115369915962219e-02 2.1311099827289581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1879 -3.7436310667544603e-03</internalNodes>\n          <leafValues>\n            -2.3469850420951843e-01 4.9591001123189926e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1880 1.2309269513934851e-03</internalNodes>\n          <leafValues>\n            -7.5196012854576111e-02 1.4646540582180023e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1881 3.6228948738425970e-04</internalNodes>\n          <leafValues>\n            -9.7789406776428223e-02 1.2091729789972305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1882 7.5996189843863249e-04</internalNodes>\n          <leafValues>\n            6.9713920354843140e-02 -1.6278789937496185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1883 -1.8509250367060304e-03</internalNodes>\n          <leafValues>\n            -1.8382890522480011e-01 5.7501520961523056e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1884 7.9539678990840912e-03</internalNodes>\n          <leafValues>\n            -5.8848708868026733e-02 1.8846440315246582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1885 -3.1013600528240204e-04</internalNodes>\n          <leafValues>\n            -1.4575460553169250e-01 7.2403199970722198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1886 1.6956350300461054e-03</internalNodes>\n          <leafValues>\n            7.0550262928009033e-02 -1.6740930080413818e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1887 2.9058079235255718e-05</internalNodes>\n          <leafValues>\n            -1.0341589897871017e-01 9.5376282930374146e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1888 1.4466919936239719e-02</internalNodes>\n          <leafValues>\n            -1.7532069236040115e-02 5.4767167568206787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1889 -5.7156499475240707e-02</internalNodes>\n          <leafValues>\n            -7.4789309501647949e-01 1.6394419595599174e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1890 3.0681469943374395e-03</internalNodes>\n          <leafValues>\n            3.8702819496393204e-02 -2.4164369702339172e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1891 3.7490210961550474e-03</internalNodes>\n          <leafValues>\n            -5.6555431336164474e-02 2.0308320224285126e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1892 -1.0643450077623129e-03</internalNodes>\n          <leafValues>\n            -2.8211921453475952e-01 3.5207509994506836e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1893 -8.9807435870170593e-03</internalNodes>\n          <leafValues>\n            2.1754769980907440e-01 -5.0628181546926498e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1894 2.4643479264341295e-04</internalNodes>\n          <leafValues>\n            7.2727531194686890e-02 -1.4768819510936737e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1895 2.2197801154106855e-03</internalNodes>\n          <leafValues>\n            -3.6754861474037170e-02 2.6939278841018677e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>169</maxWeakCount>\n      <stageThreshold>-1.3372850418090820e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 1896 -3.5328421741724014e-02</internalNodes>\n          <leafValues>\n            2.4123990535736084e-01 -2.7961900830268860e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1897 2.6829841081053019e-03</internalNodes>\n          <leafValues>\n            -1.6362559795379639e-01 2.3433500528335571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1898 2.1330378949642181e-03</internalNodes>\n          <leafValues>\n            -2.0100639760494232e-01 1.5679529309272766e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1899 4.2972870869562030e-04</internalNodes>\n          <leafValues>\n            -3.7790980935096741e-01 7.4083693325519562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1900 -3.4645918756723404e-02</internalNodes>\n          <leafValues>\n            3.0556240677833557e-01 -8.3546526730060577e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1901 -1.4237920368032064e-05</internalNodes>\n          <leafValues>\n            8.2699142396450043e-02 -2.3583950102329254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1902 4.9165110103785992e-03</internalNodes>\n          <leafValues>\n            -1.9556050002574921e-01 9.6965387463569641e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1903 6.0989488847553730e-03</internalNodes>\n          <leafValues>\n            7.8470550477504730e-02 -2.3209640383720398e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1904 7.4874181300401688e-03</internalNodes>\n          <leafValues>\n            7.1725919842720032e-03 -5.1566261053085327e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1905 4.2871991172432899e-03</internalNodes>\n          <leafValues>\n            4.0530510246753693e-02 -4.1086289286613464e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1906 1.6856180503964424e-02</internalNodes>\n          <leafValues>\n            -7.7506266534328461e-02 2.3657779395580292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1907 -1.0347689967602491e-03</internalNodes>\n          <leafValues>\n            -4.6704441308975220e-01 3.4468568861484528e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1908 1.6820980235934258e-03</internalNodes>\n          <leafValues>\n            -6.7206740379333496e-02 2.3671430349349976e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1909 -1.2018240056931973e-02</internalNodes>\n          <leafValues>\n            -2.2372600436210632e-01 7.4281953275203705e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1910 1.3802549801766872e-03</internalNodes>\n          <leafValues>\n            -9.9990189075469971e-02 1.5270860493183136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1911 -1.4281070232391357e-01</internalNodes>\n          <leafValues>\n            -2.8344118595123291e-01 6.2299348413944244e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1912 -1.5463490039110184e-02</internalNodes>\n          <leafValues>\n            2.9084190726280212e-01 -5.3395688533782959e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1913 -9.9617196246981621e-04</internalNodes>\n          <leafValues>\n            -3.6011821031570435e-01 4.1922971606254578e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1914 -2.6956679299473763e-02</internalNodes>\n          <leafValues>\n            -4.3736729025840759e-01 3.1731128692626953e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1915 -8.7780617177486420e-03</internalNodes>\n          <leafValues>\n            -5.0374472141265869e-01 2.5146849453449249e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1916 4.2969950300175697e-05</internalNodes>\n          <leafValues>\n            -1.5406499803066254e-01 8.8478356599807739e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1917 -6.2619051896035671e-03</internalNodes>\n          <leafValues>\n            2.2435919940471649e-01 -5.9849821031093597e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1918 -6.4296770142391324e-04</internalNodes>\n          <leafValues>\n            -2.4377089738845825e-01 5.9389740228652954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1919 -1.5573870041407645e-04</internalNodes>\n          <leafValues>\n            -1.6867999732494354e-01 7.8476317226886749e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1920 4.1139780660159886e-04</internalNodes>\n          <leafValues>\n            -8.9017570018768311e-02 1.4019380509853363e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1921 1.8635790329426527e-03</internalNodes>\n          <leafValues>\n            3.8603689521551132e-02 -3.2118970155715942e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1922 1.6059159534052014e-03</internalNodes>\n          <leafValues>\n            -7.8801520168781281e-02 1.5801469981670380e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1923 8.6740078404545784e-04</internalNodes>\n          <leafValues>\n            5.4134480655193329e-02 -2.3538430035114288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1924 -7.9801032552495599e-04</internalNodes>\n          <leafValues>\n            1.3330009579658508e-01 -9.5731817185878754e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1925 -4.8548211343586445e-03</internalNodes>\n          <leafValues>\n            -2.0736059546470642e-01 6.1038620769977570e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1926 -1.1426740325987339e-02</internalNodes>\n          <leafValues>\n            1.7201809585094452e-01 -7.1152277290821075e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1927 8.7062492966651917e-03</internalNodes>\n          <leafValues>\n            -7.2185672819614410e-02 1.9082969427108765e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1928 -1.1634400580078363e-03</internalNodes>\n          <leafValues>\n            -1.3751690089702606e-01 9.1818131506443024e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1929 6.8914610892534256e-03</internalNodes>\n          <leafValues>\n            9.6225969493389130e-02 -1.3246159255504608e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1930 -2.2426620125770569e-03</internalNodes>\n          <leafValues>\n            3.5683241486549377e-01 -3.6280050873756409e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1931 1.2301520444452763e-02</internalNodes>\n          <leafValues>\n            4.6940989792346954e-02 -3.0623328685760498e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1932 3.9963610470294952e-03</internalNodes>\n          <leafValues>\n            -8.2999393343925476e-02 1.5486459434032440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1933 -2.2026189981261268e-05</internalNodes>\n          <leafValues>\n            1.1778099834918976e-01 -1.1899650096893311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1934 5.8708270080387592e-04</internalNodes>\n          <leafValues>\n            5.6864660233259201e-02 -2.2509899735450745e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1935 -5.8760121464729309e-03</internalNodes>\n          <leafValues>\n            2.6625269651412964e-01 -4.4570129364728928e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1936 4.3262130930088460e-04</internalNodes>\n          <leafValues>\n            5.8049838989973068e-02 -2.1173800528049469e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1937 4.7852578572928905e-03</internalNodes>\n          <leafValues>\n            -4.0710568428039551e-02 2.9509121179580688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1938 4.5480159315047786e-05</internalNodes>\n          <leafValues>\n            -1.8201610445976257e-01 6.0179539024829865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1939 2.5633929762989283e-03</internalNodes>\n          <leafValues>\n            -8.7039761245250702e-02 1.2692840397357941e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1940 -4.7383471392095089e-03</internalNodes>\n          <leafValues>\n            2.3961830139160156e-01 -4.9914900213479996e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1941 4.4647231698036194e-03</internalNodes>\n          <leafValues>\n            4.0540020912885666e-02 -3.2467570900917053e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1942 -6.7061209119856358e-03</internalNodes>\n          <leafValues>\n            -3.2789680361747742e-01 3.2299648970365524e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1943 7.1761049330234528e-02</internalNodes>\n          <leafValues>\n            -2.3713670670986176e-02 4.7772058844566345e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1944 3.0584860593080521e-02</internalNodes>\n          <leafValues>\n            1.6793910413980484e-02 -7.8061228990554810e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1945 3.8672669325023890e-03</internalNodes>\n          <leafValues>\n            -2.4876890704035759e-02 5.1260662078857422e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1946 -5.2802208811044693e-02</internalNodes>\n          <leafValues>\n            -5.0759661197662354e-01 2.3873040452599525e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1947 -6.5651582553982735e-04</internalNodes>\n          <leafValues>\n            -2.0122329890727997e-01 4.9672801047563553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1948 8.5785267874598503e-03</internalNodes>\n          <leafValues>\n            -4.5007020235061646e-02 2.3518909513950348e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1949 -1.2620680499821901e-03</internalNodes>\n          <leafValues>\n            -1.9962050020694733e-01 5.5564209818840027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1950 1.4215289615094662e-02</internalNodes>\n          <leafValues>\n            -4.6983979642391205e-02 2.0781150460243225e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1951 1.6393810510635376e-01</internalNodes>\n          <leafValues>\n            1.4973269775509834e-02 -6.5025687217712402e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1952 1.4837640523910522e-01</internalNodes>\n          <leafValues>\n            8.1885885447263718e-03 -9.4296187162399292e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1953 1.4631190424552187e-05</internalNodes>\n          <leafValues>\n            -1.2383759766817093e-01 8.2489579916000366e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1954 -3.3909391611814499e-02</internalNodes>\n          <leafValues>\n            -2.2818760573863983e-01 4.3302498757839203e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1955 3.8288589566946030e-03</internalNodes>\n          <leafValues>\n            -3.7276919931173325e-02 2.7613049745559692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1956 8.0947913229465485e-03</internalNodes>\n          <leafValues>\n            2.8445359319448471e-02 -3.9388808608055115e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1957 -7.0019601844251156e-04</internalNodes>\n          <leafValues>\n            1.2199380248785019e-01 -9.2714257538318634e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1958 3.4412490203976631e-03</internalNodes>\n          <leafValues>\n            -4.8972681164741516e-02 2.0617230236530304e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1959 -1.6337490081787109e-01</internalNodes>\n          <leafValues>\n            -6.1850237846374512e-01 1.6467820852994919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1960 6.5640709362924099e-03</internalNodes>\n          <leafValues>\n            1.1007189750671387e-01 -9.2340007424354553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1961 4.4708838686347008e-04</internalNodes>\n          <leafValues>\n            -1.3933309912681580e-01 7.7039696276187897e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1962 1.7568700015544891e-02</internalNodes>\n          <leafValues>\n            9.7569692879915237e-03 -8.0032902956008911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1963 -1.9571769516915083e-03</internalNodes>\n          <leafValues>\n            2.8000330924987793e-01 -3.6428239196538925e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1964 5.1913037896156311e-04</internalNodes>\n          <leafValues>\n            5.3515341132879257e-02 -1.9425579905509949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1965 9.6273031085729599e-03</internalNodes>\n          <leafValues>\n            3.1317751854658127e-02 -3.1802541017532349e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1966 -5.0332810729742050e-02</internalNodes>\n          <leafValues>\n            5.6659060716629028e-01 -1.8494980409741402e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1967 -6.4624901860952377e-03</internalNodes>\n          <leafValues>\n            -4.1894671320915222e-01 2.7350850403308868e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1968 -5.2857249975204468e-03</internalNodes>\n          <leafValues>\n            1.7756509780883789e-01 -5.8377739042043686e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1969 9.9454462528228760e-02</internalNodes>\n          <leafValues>\n            1.6487719491124153e-02 -5.8526170253753662e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1970 2.1917840058449656e-04</internalNodes>\n          <leafValues>\n            -1.0714250057935715e-01 9.1884173452854156e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1971 -4.3873358663404360e-05</internalNodes>\n          <leafValues>\n            7.8036926686763763e-02 -1.2723919749259949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1972 -6.7227642284706235e-04</internalNodes>\n          <leafValues>\n            -2.5709420442581177e-01 3.8843378424644470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1973 1.1754270235542208e-04</internalNodes>\n          <leafValues>\n            -7.9695962369441986e-02 1.2093970179557800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1974 4.6061190962791443e-01</internalNodes>\n          <leafValues>\n            1.3886069878935814e-02 -6.5241271257400513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1975 1.1115600354969501e-02</internalNodes>\n          <leafValues>\n            1.3871660456061363e-02 -6.0222518444061279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1976 9.0776477009057999e-03</internalNodes>\n          <leafValues>\n            -3.6118660122156143e-02 2.5702419877052307e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1977 -4.9597548786550760e-04</internalNodes>\n          <leafValues>\n            1.1017049849033356e-01 -8.9249506592750549e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1978 1.5807070303708315e-03</internalNodes>\n          <leafValues>\n            4.8131279647350311e-02 -2.0215910673141479e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1979 -6.9012932479381561e-02</internalNodes>\n          <leafValues>\n            -8.1536060571670532e-01 1.0660010389983654e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1980 1.9330780196469277e-04</internalNodes>\n          <leafValues>\n            -1.1231829971075058e-01 8.5046432912349701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1981 7.8813207801431417e-04</internalNodes>\n          <leafValues>\n            -5.5200818926095963e-02 1.7654439806938171e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1982 9.5367128960788250e-04</internalNodes>\n          <leafValues>\n            5.4411198943853378e-02 -1.8674199283123016e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1983 -2.3191540967673063e-03</internalNodes>\n          <leafValues>\n            -2.7544409036636353e-01 3.8513321429491043e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1984 9.5087959198281169e-04</internalNodes>\n          <leafValues>\n            -6.8218901753425598e-02 1.6082139313220978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1985 9.5385108143091202e-03</internalNodes>\n          <leafValues>\n            -3.8826879113912582e-02 3.0370831489562988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1986 -1.4489189721643925e-02</internalNodes>\n          <leafValues>\n            -4.6989730000495911e-01 2.3550020530819893e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1987 1.0756050236523151e-02</internalNodes>\n          <leafValues>\n            2.0565100014209747e-02 -4.7243130207061768e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1988 -2.0074830390512943e-03</internalNodes>\n          <leafValues>\n            -2.7946698665618896e-01 3.6021549254655838e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1989 -1.7316909506917000e-03</internalNodes>\n          <leafValues>\n            2.0902790129184723e-01 -4.6300981193780899e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1990 1.5234799683094025e-01</internalNodes>\n          <leafValues>\n            1.4934250153601170e-02 -6.0461127758026123e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1991 6.3340878114104271e-04</internalNodes>\n          <leafValues>\n            5.0307150930166245e-02 -1.8277199566364288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1992 -8.2793915644288063e-03</internalNodes>\n          <leafValues>\n            3.6463031172752380e-01 -2.6474289596080780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1993 1.3667670078575611e-02</internalNodes>\n          <leafValues>\n            1.2511620298027992e-02 -8.9023828506469727e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1994 2.0979309920221567e-03</internalNodes>\n          <leafValues>\n            -8.0247193574905396e-02 1.2989950180053711e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1995 -8.9776562526822090e-03</internalNodes>\n          <leafValues>\n            1.7411080002784729e-01 -6.1771109700202942e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1996 1.2094390112906694e-03</internalNodes>\n          <leafValues>\n            6.8711720407009125e-02 -1.6561290621757507e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1997 6.8200258538126945e-03</internalNodes>\n          <leafValues>\n            5.7795759290456772e-02 -1.8231619894504547e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1998 -1.8268059939146042e-03</internalNodes>\n          <leafValues>\n            1.3340330123901367e-01 -7.5343966484069824e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 1999 7.9908408224582672e-03</internalNodes>\n          <leafValues>\n            -4.5094471424818039e-02 2.4594159424304962e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2000 -2.5262041017413139e-03</internalNodes>\n          <leafValues>\n            -2.0763960480690002e-01 5.2334129810333252e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2001 -7.4825510382652283e-02</internalNodes>\n          <leafValues>\n            -5.4688757658004761e-01 1.7803389579057693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2002 -3.3099399879574776e-03</internalNodes>\n          <leafValues>\n            3.3455818891525269e-01 -2.8966419398784637e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2003 8.2276277244091034e-03</internalNodes>\n          <leafValues>\n            4.1579861193895340e-02 -2.6652270555496216e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2004 3.1686299480497837e-03</internalNodes>\n          <leafValues>\n            -4.1817110031843185e-02 2.9769781231880188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2005 1.5170290134847164e-02</internalNodes>\n          <leafValues>\n            4.3392360210418701e-02 -2.4617969989776611e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2006 -1.5946379862725735e-03</internalNodes>\n          <leafValues>\n            1.5057189762592316e-01 -7.3017738759517670e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2007 -8.5226353257894516e-03</internalNodes>\n          <leafValues>\n            -1.5050080418586731e-01 6.9656036794185638e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2008 -1.1418120004236698e-02</internalNodes>\n          <leafValues>\n            1.2974749505519867e-01 -9.5122329890727997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2009 -2.8856399655342102e-01</internalNodes>\n          <leafValues>\n            -2.1124540269374847e-01 4.7410819679498672e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2010 -3.9014229550957680e-03</internalNodes>\n          <leafValues>\n            -2.6843780279159546e-01 3.8698658347129822e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2011 -3.5567739978432655e-03</internalNodes>\n          <leafValues>\n            2.3385030031204224e-01 -4.5723881572484970e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2012 -6.4394129440188408e-03</internalNodes>\n          <leafValues>\n            -6.0463881492614746e-01 1.6156049445271492e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2013 -7.4861319735646248e-03</internalNodes>\n          <leafValues>\n            1.6867969930171967e-01 -5.5975880473852158e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2014 2.3621210129931569e-04</internalNodes>\n          <leafValues>\n            5.3596749901771545e-02 -2.1872919797897339e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2015 2.6099249720573425e-02</internalNodes>\n          <leafValues>\n            -5.3937491029500961e-02 2.2728930413722992e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2016 -1.7809759592637420e-03</internalNodes>\n          <leafValues>\n            8.6759522557258606e-02 -1.2009979784488678e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2017 -1.1987469770247117e-04</internalNodes>\n          <leafValues>\n            -1.5347549319267273e-01 7.0707783102989197e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2018 -6.8248361349105835e-03</internalNodes>\n          <leafValues>\n            -3.7341019511222839e-01 2.6779960840940475e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2019 -1.3119089999236166e-04</internalNodes>\n          <leafValues>\n            -1.1640869826078415e-01 8.7211161851882935e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2020 -1.8228540429845452e-03</internalNodes>\n          <leafValues>\n            1.5664499998092651e-01 -6.8006090819835663e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2021 2.6267999783158302e-03</internalNodes>\n          <leafValues>\n            -3.6987219005823135e-02 2.6393121480941772e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2022 -7.0677183568477631e-02</internalNodes>\n          <leafValues>\n            -2.8295999765396118e-01 3.5035520792007446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2023 1.8061319366097450e-02</internalNodes>\n          <leafValues>\n            -2.8041649609804153e-02 3.5313779115676880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2024 9.2649407451972365e-04</internalNodes>\n          <leafValues>\n            4.4600278139114380e-02 -2.2788539528846741e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2025 -5.3023721557110548e-04</internalNodes>\n          <leafValues>\n            -2.0866680145263672e-01 6.2718503177165985e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2026 3.6058931145817041e-03</internalNodes>\n          <leafValues>\n            -6.7796908318996429e-02 1.4900009334087372e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2027 8.5915643721818924e-03</internalNodes>\n          <leafValues>\n            -4.5626759529113770e-02 2.3078480362892151e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2028 -8.8329352438449860e-03</internalNodes>\n          <leafValues>\n            -4.1117089986801147e-01 2.8230689465999603e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2029 4.0959479520097375e-04</internalNodes>\n          <leafValues>\n            5.3656630218029022e-02 -1.8243549764156342e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2030 -2.5011589750647545e-03</internalNodes>\n          <leafValues>\n            1.6313549876213074e-01 -6.0954701155424118e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2031 -1.4622169546782970e-02</internalNodes>\n          <leafValues>\n            -4.9988400936126709e-01 1.8572760745882988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2032 -6.3790678977966309e-02</internalNodes>\n          <leafValues>\n            -4.8329600691795349e-01 1.7903389409184456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2033 -1.6671139746904373e-02</internalNodes>\n          <leafValues>\n            -2.6661589741706848e-01 3.4886009991168976e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2034 -1.2526069767773151e-02</internalNodes>\n          <leafValues>\n            3.4061339497566223e-01 -2.8094800189137459e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2035 4.8325158655643463e-02</internalNodes>\n          <leafValues>\n            -3.3176191151142120e-02 2.9025658965110779e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2036 1.3246550224721432e-03</internalNodes>\n          <leafValues>\n            3.7181440740823746e-02 -2.6850658655166626e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2037 -2.2221319377422333e-01</internalNodes>\n          <leafValues>\n            -8.9892768859863281e-01 1.0064439848065376e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2038 1.2954319827258587e-03</internalNodes>\n          <leafValues>\n            -1.0161759704351425e-01 9.0588621795177460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2039 1.3794669881463051e-02</internalNodes>\n          <leafValues>\n            -7.4244648218154907e-02 1.4314259588718414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2040 8.5643801139667630e-04</internalNodes>\n          <leafValues>\n            5.9753969311714172e-02 -1.8660190701484680e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2041 -2.3317540064454079e-02</internalNodes>\n          <leafValues>\n            -6.9259917736053467e-01 1.3667319901287556e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2042 1.6281680436804891e-03</internalNodes>\n          <leafValues>\n            -6.1060748994350433e-02 1.5505290031433105e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2043 -1.2380329892039299e-02</internalNodes>\n          <leafValues>\n            -1.5146850049495697e-01 6.1767600476741791e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2044 1.8393599893897772e-03</internalNodes>\n          <leafValues>\n            -3.7167988717556000e-02 2.4822179973125458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2045 3.5529870074242353e-03</internalNodes>\n          <leafValues>\n            -2.9200790449976921e-02 3.3592289686203003e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2046 1.0305979521945119e-03</internalNodes>\n          <leafValues>\n            3.7694081664085388e-02 -2.9085698723793030e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2047 2.9916960556874983e-05</internalNodes>\n          <leafValues>\n            -8.8014192879199982e-02 1.0515210032463074e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2048 -4.1505339322611690e-04</internalNodes>\n          <leafValues>\n            6.5726242959499359e-02 -1.5021100640296936e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2049 -1.4631619706051424e-05</internalNodes>\n          <leafValues>\n            7.8170351684093475e-02 -1.1962439864873886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2050 -4.3779090046882629e-03</internalNodes>\n          <leafValues>\n            2.0752459764480591e-01 -5.2089329808950424e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2051 4.7036199248395860e-04</internalNodes>\n          <leafValues>\n            6.3348479568958282e-02 -1.8767729401588440e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2052 1.4788640328333713e-05</internalNodes>\n          <leafValues>\n            -9.5828853547573090e-02 1.1213099956512451e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2053 3.7048431113362312e-04</internalNodes>\n          <leafValues>\n            -9.8723009228706360e-02 9.8647676408290863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2054 -1.8590339459478855e-03</internalNodes>\n          <leafValues>\n            -2.6873630285263062e-01 3.8352578878402710e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2055 -7.0764529518783092e-03</internalNodes>\n          <leafValues>\n            -1.5984000265598297e-01 5.7841330766677856e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2056 1.4920010231435299e-02</internalNodes>\n          <leafValues>\n            -5.1178149878978729e-02 1.9242909550666809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2057 -5.0713191740214825e-03</internalNodes>\n          <leafValues>\n            1.3863259553909302e-01 -1.1121229827404022e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2058 -1.5005500055849552e-02</internalNodes>\n          <leafValues>\n            4.8583930730819702e-01 -1.8811760470271111e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2059 -2.0439480431377888e-03</internalNodes>\n          <leafValues>\n            -3.2754859328269958e-01 2.7816310524940491e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2060 -1.3060690253041685e-04</internalNodes>\n          <leafValues>\n            9.8868042230606079e-02 -8.4957577288150787e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2061 8.8742617517709732e-03</internalNodes>\n          <leafValues>\n            -2.5235600769519806e-02 3.2389879226684570e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2062 7.0397509261965752e-04</internalNodes>\n          <leafValues>\n            5.6327521800994873e-02 -1.7392079532146454e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2063 -2.5402469560503960e-02</internalNodes>\n          <leafValues>\n            1.9675390422344208e-01 -4.7362301498651505e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2064 -9.3743661418557167e-03</internalNodes>\n          <leafValues>\n            -1.5204219520092010e-01 5.9932630509138107e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>178</maxWeakCount>\n      <stageThreshold>-1.3418790102005005e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2065 4.0453020483255386e-02</internalNodes>\n          <leafValues>\n            -2.3637829720973969e-01 2.8865531086921692e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2066 -1.1056049726903439e-02</internalNodes>\n          <leafValues>\n            1.6062900424003601e-01 -2.6259741187095642e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2067 -3.9778949576430023e-04</internalNodes>\n          <leafValues>\n            1.1591099947690964e-01 -2.7081018686294556e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2068 1.0191530454903841e-03</internalNodes>\n          <leafValues>\n            -2.0969370007514954e-01 1.3642899692058563e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2069 3.6101979203522205e-03</internalNodes>\n          <leafValues>\n            -2.1725459396839142e-01 1.2617790699005127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2070 4.4545531272888184e-04</internalNodes>\n          <leafValues>\n            -1.5974539518356323e-01 1.2596489489078522e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2071 5.8226222172379494e-03</internalNodes>\n          <leafValues>\n            -1.5484449267387390e-01 9.7783811390399933e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2072 -2.1416260860860348e-03</internalNodes>\n          <leafValues>\n            -3.6377671360969543e-01 4.0103349834680557e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2073 -2.6691620587371290e-04</internalNodes>\n          <leafValues>\n            8.4470756351947784e-02 -1.7496100068092346e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2074 -5.4352330043911934e-03</internalNodes>\n          <leafValues>\n            -3.1830930709838867e-01 4.9786038696765900e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2075 -1.5426309546455741e-03</internalNodes>\n          <leafValues>\n            -2.1333709359169006e-01 6.4884513616561890e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2076 -2.7932289522141218e-03</internalNodes>\n          <leafValues>\n            2.5483250617980957e-01 -6.5170928835868835e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2077 1.3845940120518208e-03</internalNodes>\n          <leafValues>\n            3.9304580539464951e-02 -3.7404829263687134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2078 -3.2193479128181934e-03</internalNodes>\n          <leafValues>\n            2.6290428638458252e-01 -5.6396361440420151e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2079 -9.7977351397275925e-03</internalNodes>\n          <leafValues>\n            3.2044389843940735e-01 -4.6382289379835129e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2080 -1.7625789623707533e-03</internalNodes>\n          <leafValues>\n            1.5050819516181946e-01 -8.8892437517642975e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2081 -3.6096889525651932e-02</internalNodes>\n          <leafValues>\n            -4.3137839436531067e-01 3.1785801053047180e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2082 2.0813369192183018e-03</internalNodes>\n          <leafValues>\n            -6.5957918763160706e-02 1.9275289773941040e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2083 -6.0533690266311169e-03</internalNodes>\n          <leafValues>\n            -3.1374609470367432e-01 5.1007431000471115e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2084 3.7253410555422306e-03</internalNodes>\n          <leafValues>\n            -6.1402589082717896e-02 2.5631371140480042e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2085 5.0668260082602501e-03</internalNodes>\n          <leafValues>\n            5.7962730526924133e-02 -2.4340160191059113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2086 2.8038739692419767e-03</internalNodes>\n          <leafValues>\n            -7.0329703390598297e-02 2.1375860273838043e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2087 1.5925259795039892e-03</internalNodes>\n          <leafValues>\n            2.6637760922312737e-02 -5.1129138469696045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2088 2.9422679290291853e-05</internalNodes>\n          <leafValues>\n            -2.1710200607776642e-01 6.4985051751136780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2089 -2.2399190129362978e-05</internalNodes>\n          <leafValues>\n            8.1582568585872650e-02 -1.5135610103607178e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2090 6.7072827368974686e-04</internalNodes>\n          <leafValues>\n            1.0502190142869949e-01 -1.1787360161542892e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2091 -1.5262300148606300e-03</internalNodes>\n          <leafValues>\n            -3.4620371460914612e-01 3.9244089275598526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2092 1.8151829717680812e-03</internalNodes>\n          <leafValues>\n            -7.4669457972049713e-02 1.6847759485244751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2093 5.8078771689906716e-04</internalNodes>\n          <leafValues>\n            -9.7952410578727722e-02 1.4192749559879303e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2094 -8.9623313397169113e-03</internalNodes>\n          <leafValues>\n            -1.9601620733737946e-01 6.6268041729927063e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2095 1.1146809905767441e-01</internalNodes>\n          <leafValues>\n            1.7000140622258186e-02 -6.4917707443237305e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2096 -1.7872039461508393e-04</internalNodes>\n          <leafValues>\n            -1.4053599536418915e-01 8.0108702182769775e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2097 -4.6587768010795116e-03</internalNodes>\n          <leafValues>\n            1.9530229270458221e-01 -5.8602340519428253e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2098 3.4576000180095434e-03</internalNodes>\n          <leafValues>\n            5.9805799275636673e-02 -2.1990789473056793e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2099 -1.9979270291514695e-04</internalNodes>\n          <leafValues>\n            -1.3726149499416351e-01 8.3430230617523193e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2100 -4.8079751431941986e-03</internalNodes>\n          <leafValues>\n            5.5041921138763428e-01 -2.0715299993753433e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2101 -7.3389292083447799e-06</internalNodes>\n          <leafValues>\n            7.5302027165889740e-02 -1.4486590027809143e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2102 -3.5799799952656031e-03</internalNodes>\n          <leafValues>\n            2.6277220249176025e-01 -4.2550459504127502e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2103 1.1689850362017751e-03</internalNodes>\n          <leafValues>\n            -1.0984169691801071e-01 1.2971849739551544e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2104 3.2639548182487488e-02</internalNodes>\n          <leafValues>\n            3.1038379296660423e-02 -3.9474260807037354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2105 1.1596709955483675e-03</internalNodes>\n          <leafValues>\n            5.2021898329257965e-02 -2.2035829722881317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2106 -1.4262240147218108e-03</internalNodes>\n          <leafValues>\n            1.0745699703693390e-01 -1.0067079961299896e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2107 -2.3668329417705536e-01</internalNodes>\n          <leafValues>\n            -7.3174351453781128e-01 1.6999609768390656e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2108 1.9279429398011416e-04</internalNodes>\n          <leafValues>\n            -1.3248440623283386e-01 7.8186027705669403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2109 -1.7292149364948273e-02</internalNodes>\n          <leafValues>\n            -9.7199842333793640e-02 1.1069560050964355e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2110 -1.2431619688868523e-03</internalNodes>\n          <leafValues>\n            1.7741470038890839e-01 -7.2548337280750275e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2111 2.1754560293629766e-05</internalNodes>\n          <leafValues>\n            -9.6952050924301147e-02 1.0899409651756287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2112 3.0975879053585231e-04</internalNodes>\n          <leafValues>\n            6.2249891459941864e-02 -1.7384719848632812e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2113 -1.1590570211410522e-02</internalNodes>\n          <leafValues>\n            2.6162809133529663e-01 -4.1994079947471619e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2114 1.8150920048356056e-02</internalNodes>\n          <leafValues>\n            2.6353549212217331e-02 -4.4685411453247070e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2115 8.0223509576171637e-04</internalNodes>\n          <leafValues>\n            -1.2143869698047638e-01 8.7092787027359009e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2116 -1.4258639421314001e-03</internalNodes>\n          <leafValues>\n            1.9236080348491669e-01 -5.2987430244684219e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2117 -2.4536260752938688e-04</internalNodes>\n          <leafValues>\n            -1.6683700680732727e-01 6.5604820847511292e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2118 2.2050029656384140e-05</internalNodes>\n          <leafValues>\n            -9.3477472662925720e-02 1.0711719840764999e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2119 4.7658861149102449e-04</internalNodes>\n          <leafValues>\n            -8.0596633255481720e-02 1.2512689828872681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2120 4.0533850551582873e-04</internalNodes>\n          <leafValues>\n            6.8990617990493774e-02 -1.5740759670734406e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2121 -1.6471749171614647e-02</internalNodes>\n          <leafValues>\n            -5.9667861461639404e-01 1.8876109272241592e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2122 2.2267159074544907e-03</internalNodes>\n          <leafValues>\n            -4.5803830027580261e-02 2.3071089386940002e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2123 4.9383189529180527e-02</internalNodes>\n          <leafValues>\n            1.9837729632854462e-02 -5.9306108951568604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2124 8.6411498486995697e-03</internalNodes>\n          <leafValues>\n            2.8697369620203972e-02 -3.5161119699478149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2125 -4.8241391777992249e-03</internalNodes>\n          <leafValues>\n            2.2474339604377747e-01 -4.8463210463523865e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2126 -8.6174849420785904e-03</internalNodes>\n          <leafValues>\n            -5.7088959217071533e-01 1.9183190539479256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2127 -5.7220697635784745e-04</internalNodes>\n          <leafValues>\n            1.1697269976139069e-01 -8.8938057422637939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2128 1.1997730471193790e-03</internalNodes>\n          <leafValues>\n            8.4181122481822968e-02 -1.2565499544143677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2129 2.6049909647554159e-03</internalNodes>\n          <leafValues>\n            5.9500031173229218e-02 -2.0638149976730347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2130 -1.4789920533075929e-03</internalNodes>\n          <leafValues>\n            2.5114980340003967e-01 -4.7535050660371780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2131 -2.5746721029281616e-01</internalNodes>\n          <leafValues>\n            -7.3038768768310547e-01 1.5440680086612701e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2132 -1.2104290071874857e-03</internalNodes>\n          <leafValues>\n            1.8646970391273499e-01 -5.5789809674024582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2133 3.4140399657189846e-04</internalNodes>\n          <leafValues>\n            6.7707672715187073e-02 -1.5597160160541534e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2134 3.1749058980494738e-03</internalNodes>\n          <leafValues>\n            3.5003460943698883e-02 -2.9529309272766113e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2135 4.4338819384574890e-01</internalNodes>\n          <leafValues>\n            1.4550019986927509e-02 -6.1034661531448364e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2136 3.9458259940147400e-02</internalNodes>\n          <leafValues>\n            -4.5779328793287277e-02 2.2927519679069519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2137 3.0410829931497574e-03</internalNodes>\n          <leafValues>\n            1.6304129734635353e-02 -5.7491117715835571e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2138 -1.4853020012378693e-01</internalNodes>\n          <leafValues>\n            -5.6220901012420654e-01 1.5771050006151199e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2139 4.4339009036775678e-05</internalNodes>\n          <leafValues>\n            -9.1284371912479401e-02 1.0920979827642441e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2140 2.2139810025691986e-03</internalNodes>\n          <leafValues>\n            -4.7668289393186569e-02 2.2291789948940277e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2141 8.7831966578960419e-02</internalNodes>\n          <leafValues>\n            2.6718059554696083e-02 -4.0396329760551453e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2142 -2.2798930294811726e-03</internalNodes>\n          <leafValues>\n            -1.6160930693149567e-01 6.6071107983589172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2143 -1.4653969628852792e-05</internalNodes>\n          <leafValues>\n            8.5298359394073486e-02 -1.2724019587039948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2144 1.2313240440562367e-03</internalNodes>\n          <leafValues>\n            -6.5917477011680603e-02 1.6606420278549194e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2145 4.5110988616943359e-01</internalNodes>\n          <leafValues>\n            1.3457960449159145e-02 -7.1525502204895020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2146 -2.4518640711903572e-02</internalNodes>\n          <leafValues>\n            -4.3282639980316162e-01 2.0400719717144966e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2147 -1.1901959805982187e-04</internalNodes>\n          <leafValues>\n            8.9420333504676819e-02 -1.1834760010242462e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2148 -1.3584910193458200e-03</internalNodes>\n          <leafValues>\n            2.4722290039062500e-01 -4.3907400220632553e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2149 6.9289728999137878e-03</internalNodes>\n          <leafValues>\n            -5.6832619011402130e-02 1.6665740311145782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2150 -6.9041848182678223e-03</internalNodes>\n          <leafValues>\n            -1.2742209434509277e-01 7.9310603439807892e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2151 1.2964820489287376e-03</internalNodes>\n          <leafValues>\n            7.2462439537048340e-02 -1.6863870620727539e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2152 2.3060059174895287e-02</internalNodes>\n          <leafValues>\n            -5.0913080573081970e-02 2.1664789319038391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2153 -4.0960568934679031e-02</internalNodes>\n          <leafValues>\n            -5.6479138135910034e-01 1.9609550014138222e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2154 7.4867479270324111e-05</internalNodes>\n          <leafValues>\n            -6.9450333714485168e-02 1.4615139365196228e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2155 -6.8458272144198418e-03</internalNodes>\n          <leafValues>\n            6.6049978137016296e-02 -2.0840729773044586e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2156 1.9395649433135986e-02</internalNodes>\n          <leafValues>\n            1.6168899834156036e-02 -5.6396162509918213e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2157 -1.6121419321279973e-04</internalNodes>\n          <leafValues>\n            -1.3194569945335388e-01 7.4094116687774658e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2158 6.6511691547930241e-03</internalNodes>\n          <leafValues>\n            -5.5261820554733276e-02 1.9894389808177948e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2159 4.5172171667218208e-03</internalNodes>\n          <leafValues>\n            3.2863661646842957e-02 -3.0980890989303589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2160 -4.0247041732072830e-02</internalNodes>\n          <leafValues>\n            -6.8980348110198975e-01 1.2438739649951458e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2161 7.2544030444987584e-06</internalNodes>\n          <leafValues>\n            -9.5949873328208923e-02 9.7919799387454987e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2162 -1.6025650501251221e-01</internalNodes>\n          <leafValues>\n            4.9472638964653015e-01 -1.8643429502844810e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2163 5.0598900998011231e-04</internalNodes>\n          <leafValues>\n            -1.2216579914093018e-01 8.6699098348617554e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2164 -1.0506899654865265e-01</internalNodes>\n          <leafValues>\n            -8.5855627059936523e-01 8.2870386540889740e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2165 -1.8218380212783813e-01</internalNodes>\n          <leafValues>\n            -5.8477312326431274e-01 1.3160600326955318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2166 1.6435410827398300e-02</internalNodes>\n          <leafValues>\n            1.6296360641717911e-02 -5.5137562751770020e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2167 1.9282519817352295e-02</internalNodes>\n          <leafValues>\n            -2.5027479976415634e-02 4.3645161390304565e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2168 3.4772949293255806e-03</internalNodes>\n          <leafValues>\n            3.1632781028747559e-02 -2.9246759414672852e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2169 2.2620869800448418e-02</internalNodes>\n          <leafValues>\n            -2.3985739797353745e-02 4.3105301260948181e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2170 -1.8172320723533630e-01</internalNodes>\n          <leafValues>\n            -1.8037860095500946e-01 5.1903489977121353e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2171 -4.3819830752909184e-03</internalNodes>\n          <leafValues>\n            -2.8302851319313049e-01 3.3024039119482040e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2172 -1.5246120281517506e-02</internalNodes>\n          <leafValues>\n            2.3519919812679291e-01 -4.1242249310016632e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2173 3.9043289422988892e-01</internalNodes>\n          <leafValues>\n            2.8530629351735115e-02 -3.5845771431922913e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2174 3.9103450253605843e-03</internalNodes>\n          <leafValues>\n            -5.1523748785257339e-02 1.7829769849777222e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2175 -1.0847560130059719e-02</internalNodes>\n          <leafValues>\n            -4.8355281352996826e-01 1.8765790387988091e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2176 5.7015339843928814e-03</internalNodes>\n          <leafValues>\n            1.2250830419361591e-02 -7.0457488298416138e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2177 -1.1917110532522202e-03</internalNodes>\n          <leafValues>\n            1.8404430150985718e-01 -5.0144620239734650e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2178 4.0988530963659286e-04</internalNodes>\n          <leafValues>\n            -9.7399666905403137e-02 1.0874579846858978e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2179 4.5295488089323044e-03</internalNodes>\n          <leafValues>\n            4.5356839895248413e-02 -2.1069140732288361e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2180 -5.4893731139600277e-03</internalNodes>\n          <leafValues>\n            2.9642790555953979e-01 -3.5870831459760666e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2181 1.9906361121684313e-03</internalNodes>\n          <leafValues>\n            3.4332871437072754e-02 -3.1506469845771790e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2182 8.3358466625213623e-02</internalNodes>\n          <leafValues>\n            1.9684519618749619e-02 -4.4279980659484863e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2183 3.0363420955836773e-03</internalNodes>\n          <leafValues>\n            -3.3693831413984299e-02 2.6669681072235107e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2184 5.7799968868494034e-02</internalNodes>\n          <leafValues>\n            8.5875885561108589e-03 -9.8965817689895630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2185 -7.8585641458630562e-03</internalNodes>\n          <leafValues>\n            2.0088459551334381e-01 -4.6583641320466995e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2186 1.9253200152888894e-03</internalNodes>\n          <leafValues>\n            4.7922369092702866e-02 -2.2640110552310944e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2187 1.0996909812092781e-02</internalNodes>\n          <leafValues>\n            1.6258660703897476e-02 -5.4048168659210205e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2188 1.6405170026700944e-04</internalNodes>\n          <leafValues>\n            -1.1542510241270065e-01 7.6001413166522980e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2189 5.3780381567776203e-03</internalNodes>\n          <leafValues>\n            1.1179029941558838e-01 -8.4179848432540894e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2190 2.2905960213392973e-03</internalNodes>\n          <leafValues>\n            -5.7969480752944946e-02 1.6899429261684418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2191 6.3102580606937408e-03</internalNodes>\n          <leafValues>\n            4.1471399366855621e-02 -2.0478209853172302e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2192 -1.4342570304870605e-01</internalNodes>\n          <leafValues>\n            -7.8573477268218994e-01 1.1634309776127338e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2193 1.2364640133455396e-03</internalNodes>\n          <leafValues>\n            -5.1800731569528580e-02 1.7734350264072418e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2194 -2.0046550780534744e-02</internalNodes>\n          <leafValues>\n            -3.1420910358428955e-01 2.8849070891737938e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2195 1.0868109762668610e-01</internalNodes>\n          <leafValues>\n            1.6183530911803246e-02 -5.1956307888031006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2196 5.1173489540815353e-02</internalNodes>\n          <leafValues>\n            -3.2460309565067291e-02 3.1230181455612183e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2197 1.3251069933176041e-02</internalNodes>\n          <leafValues>\n            2.3655060678720474e-02 -4.4210249185562134e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2198 -2.0110961049795151e-03</internalNodes>\n          <leafValues>\n            1.0359399765729904e-01 -9.3961462378501892e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2199 -3.2843051012605429e-03</internalNodes>\n          <leafValues>\n            3.3196929097175598e-01 -2.9921280220150948e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2200 8.8341237278655171e-04</internalNodes>\n          <leafValues>\n            5.9891819953918457e-02 -1.6192750632762909e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2201 8.4265992045402527e-03</internalNodes>\n          <leafValues>\n            -3.6928750574588776e-02 2.3691199719905853e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2202 -1.4503750207950361e-05</internalNodes>\n          <leafValues>\n            7.7373847365379333e-02 -1.3290609419345856e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2203 8.0891689285635948e-03</internalNodes>\n          <leafValues>\n            2.8817569836974144e-02 -3.0961230397224426e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2204 1.0339939966797829e-02</internalNodes>\n          <leafValues>\n            -2.4850569665431976e-02 3.7060049176216125e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2205 -2.2790539078414440e-03</internalNodes>\n          <leafValues>\n            -2.2051370143890381e-01 4.1877530515193939e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2206 -1.7716860165819526e-03</internalNodes>\n          <leafValues>\n            1.4205080270767212e-01 -6.5252363681793213e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2207 -6.9317207671701908e-03</internalNodes>\n          <leafValues>\n            -3.3556079864501953e-01 2.7605969458818436e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2208 -4.2506060563027859e-03</internalNodes>\n          <leafValues>\n            2.3591980338096619e-01 -3.7345319986343384e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2209 1.5317599754780531e-03</internalNodes>\n          <leafValues>\n            3.9657011628150940e-02 -2.3438200354576111e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2210 1.4941049739718437e-03</internalNodes>\n          <leafValues>\n            -6.0311999171972275e-02 1.4468440413475037e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2211 -5.2249869331717491e-03</internalNodes>\n          <leafValues>\n            -4.0660250186920166e-01 2.3257270455360413e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2212 6.4759532688185573e-04</internalNodes>\n          <leafValues>\n            6.4828239381313324e-02 -1.2987309694290161e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2213 3.2836120226420462e-04</internalNodes>\n          <leafValues>\n            6.1917629092931747e-02 -1.4835810661315918e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2214 -3.4691279288381338e-03</internalNodes>\n          <leafValues>\n            1.5662840008735657e-01 -5.7200349867343903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2215 4.5903379213996232e-04</internalNodes>\n          <leafValues>\n            5.2517898380756378e-02 -1.9093179702758789e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2216 -2.6641879230737686e-03</internalNodes>\n          <leafValues>\n            1.5235909819602966e-01 -6.8154700100421906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2217 -8.2513149827718735e-03</internalNodes>\n          <leafValues>\n            3.6680310964584351e-01 -2.8480609878897667e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2218 7.1076201274991035e-03</internalNodes>\n          <leafValues>\n            1.5445350110530853e-01 -6.7992970347404480e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2219 -4.3808001279830933e-01</internalNodes>\n          <leafValues>\n            -2.8871530294418335e-01 3.6639489233493805e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2220 6.3719082390889525e-04</internalNodes>\n          <leafValues>\n            -1.5995030105113983e-01 5.9860341250896454e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2221 -1.9303169392514974e-04</internalNodes>\n          <leafValues>\n            8.6703971028327942e-02 -1.0924819856882095e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2222 3.0723758973181248e-03</internalNodes>\n          <leafValues>\n            4.8543959856033325e-02 -1.7700059711933136e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2223 1.8341860268265009e-03</internalNodes>\n          <leafValues>\n            -5.1901239901781082e-02 1.8232129514217377e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2224 6.3172310590744019e-02</internalNodes>\n          <leafValues>\n            2.3308899253606796e-02 -4.2870610952377319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2225 2.4458649568259716e-03</internalNodes>\n          <leafValues>\n            -8.6425289511680603e-02 1.1974500119686127e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2226 1.1953969951719046e-03</internalNodes>\n          <leafValues>\n            1.1685889959335327e-01 -1.0430490225553513e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2227 3.1024610507301986e-04</internalNodes>\n          <leafValues>\n            6.2281988561153412e-02 -1.9196020066738129e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2228 -3.1970158219337463e-02</internalNodes>\n          <leafValues>\n            -6.4184898138046265e-01 1.3087569735944271e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2229 -1.0163170518353581e-03</internalNodes>\n          <leafValues>\n            -2.5210660696029663e-01 3.4096211194992065e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2230 -5.1776540931314230e-04</internalNodes>\n          <leafValues>\n            1.1874090135097504e-01 -8.2813777029514313e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2231 -4.0794219821691513e-03</internalNodes>\n          <leafValues>\n            -1.6135309636592865e-01 6.5708972513675690e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2232 9.9409874528646469e-03</internalNodes>\n          <leafValues>\n            -3.0160220339894295e-02 3.5104531049728394e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2233 1.9788760691881180e-03</internalNodes>\n          <leafValues>\n            -4.4945359230041504e-02 2.3295649886131287e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2234 1.0975249856710434e-01</internalNodes>\n          <leafValues>\n            1.6620220616459846e-02 -6.0423362255096436e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2235 -9.2024728655815125e-03</internalNodes>\n          <leafValues>\n            -5.6000357866287231e-01 1.4122909866273403e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2236 5.8626191457733512e-04</internalNodes>\n          <leafValues>\n            -1.0622119903564453e-01 8.4198087453842163e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2237 3.3601750619709492e-03</internalNodes>\n          <leafValues>\n            -2.1583529189229012e-02 4.1820129752159119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2238 -4.8143669962882996e-02</internalNodes>\n          <leafValues>\n            -7.2092157602310181e-01 1.4954459853470325e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2239 1.2209859676659107e-02</internalNodes>\n          <leafValues>\n            2.1544290706515312e-02 -3.5482150316238403e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2240 -3.9961449801921844e-02</internalNodes>\n          <leafValues>\n            -8.8848268985748291e-01 9.4328429549932480e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2241 1.5312479808926582e-03</internalNodes>\n          <leafValues>\n            -6.4070880413055420e-02 1.3569630682468414e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2242 8.9791123173199594e-05</internalNodes>\n          <leafValues>\n            5.0932768732309341e-02 -1.8393670022487640e-01</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>195</maxWeakCount>\n      <stageThreshold>-1.3934370279312134e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2243 -3.8741368800401688e-02</internalNodes>\n          <leafValues>\n            2.8778830170631409e-01 -2.3312190175056458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2244 -2.5511500425636768e-03</internalNodes>\n          <leafValues>\n            2.5108599662780762e-01 -2.1116070449352264e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2245 -2.7973129181191325e-04</internalNodes>\n          <leafValues>\n            8.9916922152042389e-02 -3.4069269895553589e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2246 1.1981100542470813e-03</internalNodes>\n          <leafValues>\n            -2.2542229294776917e-01 1.3602660596370697e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2247 -5.6686070747673512e-03</internalNodes>\n          <leafValues>\n            8.2847259938716888e-02 -2.8080710768699646e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2248 -2.7642669738270342e-04</internalNodes>\n          <leafValues>\n            1.0485479980707169e-01 -1.8848650157451630e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2249 2.0516710355877876e-03</internalNodes>\n          <leafValues>\n            3.4714280627667904e-03 -4.8608478903770447e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2250 -1.4435249795496929e-05</internalNodes>\n          <leafValues>\n            8.4275819361209869e-02 -1.9356100261211395e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2251 7.4418791336938739e-04</internalNodes>\n          <leafValues>\n            -1.2526750564575195e-01 1.1769519746303558e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2252 -4.9923241138458252e-02</internalNodes>\n          <leafValues>\n            -4.0080299973487854e-01 2.7910390868782997e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2253 9.2694535851478577e-03</internalNodes>\n          <leafValues>\n            -9.1088913381099701e-02 1.7550450563430786e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2254 -7.4646030552685261e-03</internalNodes>\n          <leafValues>\n            1.6380469501018524e-01 -1.0385499894618988e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2255 -8.1985909491777420e-03</internalNodes>\n          <leafValues>\n            -1.9168980419635773e-01 8.5415020585060120e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2256 -8.1690691877156496e-04</internalNodes>\n          <leafValues>\n            -3.0793309211730957e-01 4.0833581238985062e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2257 2.8902110643684864e-03</internalNodes>\n          <leafValues>\n            -5.0324201583862305e-02 2.9259419441223145e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2258 8.0008199438452721e-03</internalNodes>\n          <leafValues>\n            -4.6863578259944916e-02 3.1964871287345886e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2259 -5.8349180035293102e-03</internalNodes>\n          <leafValues>\n            -1.5489180386066437e-01 8.8137261569499969e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2260 -1.2492289533838630e-03</internalNodes>\n          <leafValues>\n            -3.6294621229171753e-01 3.6120988428592682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2261 2.2950479760766029e-02</internalNodes>\n          <leafValues>\n            -4.7119770199060440e-02 2.8532719612121582e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2262 -6.9193239323794842e-03</internalNodes>\n          <leafValues>\n            1.7873649299144745e-01 -7.3547556996345520e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2263 -1.9392240210436285e-04</internalNodes>\n          <leafValues>\n            1.3911420106887817e-01 -9.2489100992679596e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2264 1.9811228848993778e-03</internalNodes>\n          <leafValues>\n            4.3448008596897125e-02 -3.0942690372467041e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2265 1.6018489375710487e-02</internalNodes>\n          <leafValues>\n            -3.9718918502330780e-02 3.4248939156532288e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2266 9.3541406095027924e-03</internalNodes>\n          <leafValues>\n            3.2482650130987167e-02 -4.4502100348472595e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2267 -1.3822780456393957e-03</internalNodes>\n          <leafValues>\n            2.1627070009708405e-01 -5.6410200893878937e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2268 2.5065820664167404e-02</internalNodes>\n          <leafValues>\n            2.3123230785131454e-02 -5.3954011201858521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2269 5.9798579663038254e-02</internalNodes>\n          <leafValues>\n            2.8747579082846642e-02 -3.6572590470314026e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2270 -2.7519159484654665e-03</internalNodes>\n          <leafValues>\n            1.7491349577903748e-01 -6.3990972936153412e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2271 -3.2093640416860580e-02</internalNodes>\n          <leafValues>\n            -2.5695550441741943e-01 4.0945108979940414e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2272 -2.3349749390035868e-03</internalNodes>\n          <leafValues>\n            1.5433880686759949e-01 -7.2836689651012421e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2273 2.6897678617388010e-04</internalNodes>\n          <leafValues>\n            7.2721242904663086e-02 -1.5513220429420471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2274 -8.9813407976180315e-04</internalNodes>\n          <leafValues>\n            -2.0699620246887207e-01 5.3738221526145935e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2275 3.8521869573742151e-03</internalNodes>\n          <leafValues>\n            3.6562010645866394e-02 -2.8075969219207764e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2276 1.3440090231597424e-02</internalNodes>\n          <leafValues>\n            -3.6046478897333145e-02 3.1876960396766663e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2277 7.7129118144512177e-03</internalNodes>\n          <leafValues>\n            9.5960013568401337e-02 -1.1787489801645279e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2278 2.1991880203131586e-04</internalNodes>\n          <leafValues>\n            -1.3249869644641876e-01 8.4939576685428619e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2279 -7.4781170114874840e-03</internalNodes>\n          <leafValues>\n            -2.3073039948940277e-01 5.0310928374528885e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2280 8.9175272732973099e-03</internalNodes>\n          <leafValues>\n            -5.3924769163131714e-02 2.0320640504360199e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2281 2.2819850128144026e-03</internalNodes>\n          <leafValues>\n            3.5264909267425537e-02 -3.0841338634490967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2282 2.6413009036332369e-03</internalNodes>\n          <leafValues>\n            -3.2939229160547256e-02 3.1721460819244385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2283 -1.4605689793825150e-03</internalNodes>\n          <leafValues>\n            -1.7154279351234436e-01 6.3374556601047516e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2284 -3.1993410084396601e-03</internalNodes>\n          <leafValues>\n            3.4501680731773376e-01 -3.0717490240931511e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2285 2.3919229861348867e-03</internalNodes>\n          <leafValues>\n            2.0887520164251328e-02 -4.8564168810844421e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2286 -3.5997610539197922e-03</internalNodes>\n          <leafValues>\n            2.8900530934333801e-01 -3.5605821758508682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2287 -1.4754279618500732e-05</internalNodes>\n          <leafValues>\n            7.2744622826576233e-02 -1.4580619335174561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2288 1.5968360006809235e-02</internalNodes>\n          <leafValues>\n            1.2548550032079220e-02 -6.7445451021194458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2289 -4.0752082131803036e-03</internalNodes>\n          <leafValues>\n            3.1447470188140869e-01 -3.2155450433492661e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2290 7.5432872108649462e-05</internalNodes>\n          <leafValues>\n            -9.9738657474517822e-02 8.9665092527866364e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2291 -3.9632249623537064e-02</internalNodes>\n          <leafValues>\n            2.7617400884628296e-01 -3.4800730645656586e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2292 2.9354610887821764e-05</internalNodes>\n          <leafValues>\n            -1.4023000001907349e-01 8.8519610464572906e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2293 3.1818989664316177e-02</internalNodes>\n          <leafValues>\n            2.9925649985671043e-02 -3.3958339691162109e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2294 1.2690100073814392e-01</internalNodes>\n          <leafValues>\n            1.1263390071690083e-02 -8.9932328462600708e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2295 -3.5952320322394371e-03</internalNodes>\n          <leafValues>\n            1.7751759290695190e-01 -5.8113489300012589e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2296 -1.9231259822845459e-02</internalNodes>\n          <leafValues>\n            -3.3173981308937073e-01 4.0587101131677628e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2297 2.2836721036583185e-03</internalNodes>\n          <leafValues>\n            3.7206009030342102e-02 -2.8370648622512817e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2298 -1.6381660243496299e-03</internalNodes>\n          <leafValues>\n            1.4629170298576355e-01 -6.7781522870063782e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2299 2.1173330023884773e-03</internalNodes>\n          <leafValues>\n            2.0773969590663910e-02 -4.3928679823875427e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2300 6.4710620790719986e-03</internalNodes>\n          <leafValues>\n            -7.2133928537368774e-02 1.3981610536575317e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2301 -3.1431620009243488e-03</internalNodes>\n          <leafValues>\n            -1.9903449714183807e-01 4.7544669359922409e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2302 1.6056640306487679e-03</internalNodes>\n          <leafValues>\n            -3.9751898497343063e-02 2.5931739807128906e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2303 4.8740832135081291e-03</internalNodes>\n          <leafValues>\n            3.4082379192113876e-02 -2.7611988782882690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2304 -9.6354109700769186e-05</internalNodes>\n          <leafValues>\n            -1.0709609836339951e-01 8.3503186702728271e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2305 7.7706458978354931e-03</internalNodes>\n          <leafValues>\n            -3.0095349997282028e-02 2.9493871331214905e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2306 1.3028859393671155e-04</internalNodes>\n          <leafValues>\n            -1.1232890188694000e-01 9.4578683376312256e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2307 1.2239719508215785e-03</internalNodes>\n          <leafValues>\n            5.1999621093273163e-02 -1.8106269836425781e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2308 -8.7549741147086024e-04</internalNodes>\n          <leafValues>\n            1.4276699721813202e-01 -7.5098946690559387e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2309 -8.8081993162631989e-02</internalNodes>\n          <leafValues>\n            -7.0848828554153442e-01 1.4353640377521515e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2310 -3.2854160666465759e-01</internalNodes>\n          <leafValues>\n            -4.9687421321868896e-01 1.6604600474238396e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2311 9.8696127533912659e-03</internalNodes>\n          <leafValues>\n            1.9364370033144951e-02 -4.9978300929069519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2312 -2.7273639570921659e-03</internalNodes>\n          <leafValues>\n            2.9612520337104797e-01 -3.2831400632858276e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2313 9.9100142717361450e-02</internalNodes>\n          <leafValues>\n            1.9799079746007919e-02 -4.7344958782196045e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2314 -6.3501899130642414e-03</internalNodes>\n          <leafValues>\n            -5.1504719257354736e-01 1.6986010596156120e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2315 2.9596920285257511e-05</internalNodes>\n          <leafValues>\n            -1.0923019796609879e-01 8.9656107127666473e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2316 2.1247670054435730e-02</internalNodes>\n          <leafValues>\n            -4.1462190449237823e-02 2.2684270143508911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2317 -7.2977989912033081e-02</internalNodes>\n          <leafValues>\n            -6.3227838277816772e-01 1.6678869724273682e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2318 1.6230919957160950e-01</internalNodes>\n          <leafValues>\n            -2.5661909952759743e-02 3.7533140182495117e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2319 -1.4590819773729891e-05</internalNodes>\n          <leafValues>\n            8.5613600909709930e-02 -1.1900989711284637e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2320 2.7719149366021156e-03</internalNodes>\n          <leafValues>\n            -5.4649248719215393e-02 2.0311379432678223e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2321 -8.7484354153275490e-03</internalNodes>\n          <leafValues>\n            -7.3674517869949341e-01 1.5571890398859978e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2322 1.3679199852049351e-02</internalNodes>\n          <leafValues>\n            7.8902930021286011e-02 -1.1590500175952911e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2323 -1.1001150123775005e-02</internalNodes>\n          <leafValues>\n            3.1690821051597595e-01 -3.2384991645812988e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2324 3.2964799902401865e-04</internalNodes>\n          <leafValues>\n            5.0016529858112335e-02 -2.0451450347900391e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2325 2.7753270696848631e-03</internalNodes>\n          <leafValues>\n            -6.7407429218292236e-02 1.5935909748077393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2326 -2.8740249108523130e-03</internalNodes>\n          <leafValues>\n            2.2455960512161255e-01 -5.1031488925218582e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2327 8.1631669308990240e-04</internalNodes>\n          <leafValues>\n            6.9849550724029541e-02 -1.4791619777679443e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2328 3.7573580630123615e-03</internalNodes>\n          <leafValues>\n            3.1594600528478622e-02 -3.1387978792190552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2329 -3.4902389161288738e-03</internalNodes>\n          <leafValues>\n            1.1638429760932922e-01 -8.5947930812835693e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2330 -2.9415320605039597e-02</internalNodes>\n          <leafValues>\n            6.8403428792953491e-01 -1.6140609979629517e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2331 -8.8095385581254959e-03</internalNodes>\n          <leafValues>\n            -2.0775319635868073e-01 4.9950890243053436e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2332 -1.5459939837455750e-02</internalNodes>\n          <leafValues>\n            -4.8748460412025452e-01 2.0065559074282646e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2333 -3.6481369286775589e-02</internalNodes>\n          <leafValues>\n            -5.2395141124725342e-01 1.5850989148020744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2334 -8.8937362306751311e-05</internalNodes>\n          <leafValues>\n            -1.3299320638179779e-01 6.6926807165145874e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2335 1.4536709932144731e-04</internalNodes>\n          <leafValues>\n            8.7170369923114777e-02 -1.0435820370912552e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2336 1.5216879546642303e-01</internalNodes>\n          <leafValues>\n            1.6140580177307129e-02 -6.4970171451568604e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2337 -4.2344830580987036e-04</internalNodes>\n          <leafValues>\n            1.8045839667320251e-01 -5.2974540740251541e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2338 1.0672640055418015e-03</internalNodes>\n          <leafValues>\n            2.0548380911350250e-02 -4.8242041468620300e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2339 1.5491680242121220e-02</internalNodes>\n          <leafValues>\n            -5.1540851593017578e-02 1.8363960087299347e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2340 6.1393307987600565e-04</internalNodes>\n          <leafValues>\n            2.9983729124069214e-02 -3.1031700968742371e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2341 -1.4619939975091256e-05</internalNodes>\n          <leafValues>\n            1.0368499904870987e-01 -9.1634131968021393e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2342 6.9900648668408394e-03</internalNodes>\n          <leafValues>\n            1.4683909714221954e-02 -5.9485381841659546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2343 -5.3000110201537609e-03</internalNodes>\n          <leafValues>\n            -1.2457770109176636e-01 7.0542782545089722e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2344 5.0289987120777369e-04</internalNodes>\n          <leafValues>\n            -7.7135689556598663e-02 1.2228710204362869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2345 1.1190979741513729e-02</internalNodes>\n          <leafValues>\n            5.0308059900999069e-02 -1.8091809749603271e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2346 1.7019819468259811e-02</internalNodes>\n          <leafValues>\n            -3.8816768676042557e-02 3.0851981043815613e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2347 -5.8241572696715593e-04</internalNodes>\n          <leafValues>\n            1.2537799775600433e-01 -7.6115481555461884e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2348 2.0036669448018074e-02</internalNodes>\n          <leafValues>\n            4.9899481236934662e-02 -1.8082989752292633e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2349 -5.4328818805515766e-03</internalNodes>\n          <leafValues>\n            2.3409770429134369e-01 -4.2385410517454147e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2350 -2.9535360226873308e-05</internalNodes>\n          <leafValues>\n            5.7630240917205811e-02 -1.5753529965877533e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2351 -1.0352370142936707e-01</internalNodes>\n          <leafValues>\n            7.1587741374969482e-01 -1.2989929877221584e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2352 -1.2122269719839096e-02</internalNodes>\n          <leafValues>\n            -1.4788970351219177e-01 6.6566437482833862e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2353 3.0254870653152466e-03</internalNodes>\n          <leafValues>\n            -5.4378628730773926e-02 1.7140829563140869e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2354 -5.8111078105866909e-03</internalNodes>\n          <leafValues>\n            2.4422149360179901e-01 -5.7652641087770462e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2355 8.2830740138888359e-03</internalNodes>\n          <leafValues>\n            2.2720400243997574e-02 -4.2961999773979187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2356 1.2375120073556900e-02</internalNodes>\n          <leafValues>\n            2.2810289636254311e-02 -3.7505629658699036e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2357 1.9211210310459137e-02</internalNodes>\n          <leafValues>\n            1.1791059747338295e-02 -6.5529459714889526e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2358 3.1843129545450211e-04</internalNodes>\n          <leafValues>\n            6.4130060374736786e-02 -1.3995569944381714e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2359 8.4224628517404199e-04</internalNodes>\n          <leafValues>\n            -5.4134279489517212e-02 1.7525580525398254e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2360 -1.6085049510002136e-01</internalNodes>\n          <leafValues>\n            -9.4571417570114136e-01 7.8549478203058243e-03</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2361 -1.6774870455265045e-03</internalNodes>\n          <leafValues>\n            -1.9166129827499390e-01 4.5787028968334198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2362 -1.8989649834111333e-03</internalNodes>\n          <leafValues>\n            1.5783150494098663e-01 -6.5896913409233093e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2363 4.0205760160461068e-04</internalNodes>\n          <leafValues>\n            -7.3599092662334442e-02 1.3118380308151245e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2364 2.4369959719479084e-03</internalNodes>\n          <leafValues>\n            2.3522870615124702e-02 -4.2745968699455261e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2365 -2.8488409952842630e-05</internalNodes>\n          <leafValues>\n            6.3280619680881500e-02 -1.3599009811878204e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2366 1.9538639113306999e-02</internalNodes>\n          <leafValues>\n            -2.1458270028233528e-02 4.7534748911857605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2367 -1.6530340071767569e-03</internalNodes>\n          <leafValues>\n            -1.5323260426521301e-01 5.9455979615449905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2368 -2.1052840165793896e-03</internalNodes>\n          <leafValues>\n            1.1017639935016632e-01 -8.3118103444576263e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2369 -4.5266482047736645e-03</internalNodes>\n          <leafValues>\n            2.5815379619598389e-01 -3.5743940621614456e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2370 -1.6275560483336449e-04</internalNodes>\n          <leafValues>\n            -1.3548290729522705e-01 6.9295726716518402e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2371 -3.3048219047486782e-03</internalNodes>\n          <leafValues>\n            1.7806029319763184e-01 -5.2156440913677216e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2372 -5.1905210129916668e-03</internalNodes>\n          <leafValues>\n            -3.4897321462631226e-01 2.5990990921854973e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2373 1.1190810054540634e-01</internalNodes>\n          <leafValues>\n            2.9962029308080673e-02 -2.9597550630569458e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2374 -5.2873138338327408e-03</internalNodes>\n          <leafValues>\n            1.8564499914646149e-01 -5.0216298550367355e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2375 2.6098049711436033e-03</internalNodes>\n          <leafValues>\n            -7.3559276759624481e-02 1.4365130662918091e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2376 -2.8581928927451372e-03</internalNodes>\n          <leafValues>\n            -1.2605139613151550e-01 7.5433082878589630e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2377 -2.9555680157500319e-05</internalNodes>\n          <leafValues>\n            1.0733310133218765e-01 -1.0386200249195099e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2378 5.9023561334470287e-05</internalNodes>\n          <leafValues>\n            -1.3029119372367859e-01 7.6478391885757446e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2379 -4.3344721198081970e-02</internalNodes>\n          <leafValues>\n            -6.9299221038818359e-01 1.4173300005495548e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2380 -4.6946998685598373e-02</internalNodes>\n          <leafValues>\n            -5.5803751945495605e-01 1.2422920204699039e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2381 -1.5189060010015965e-02</internalNodes>\n          <leafValues>\n            3.7049770355224609e-01 -2.5564119219779968e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2382 1.6361879184842110e-02</internalNodes>\n          <leafValues>\n            2.7049979194998741e-02 -3.4278920292854309e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2383 4.0752839297056198e-02</internalNodes>\n          <leafValues>\n            9.3995258212089539e-03 -8.8683712482452393e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2384 -1.0879869572818279e-02</internalNodes>\n          <leafValues>\n            5.3260582685470581e-01 -1.9450860098004341e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2385 -7.7538257755804807e-05</internalNodes>\n          <leafValues>\n            -1.1696249991655350e-01 7.7288232743740082e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2386 -4.0953079587779939e-04</internalNodes>\n          <leafValues>\n            1.6214360296726227e-01 -5.3711488842964172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2387 -1.8464239314198494e-02</internalNodes>\n          <leafValues>\n            -5.0844788551330566e-01 1.9838189706206322e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2388 -5.6788129732012749e-03</internalNodes>\n          <leafValues>\n            3.0203920602798462e-01 -3.0203990638256073e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2389 3.8324110209941864e-04</internalNodes>\n          <leafValues>\n            -1.6841089725494385e-01 5.4902028292417526e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2390 6.4761550165712833e-03</internalNodes>\n          <leafValues>\n            9.5140263438224792e-02 -1.0746160149574280e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2391 -2.4377859663218260e-03</internalNodes>\n          <leafValues>\n            -1.5647719800472260e-01 6.3407607376575470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2392 5.4156291298568249e-04</internalNodes>\n          <leafValues>\n            -6.5962299704551697e-02 1.8441629409790039e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2393 2.7917029336094856e-02</internalNodes>\n          <leafValues>\n            -2.7590230107307434e-02 3.5032740235328674e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2394 4.6622849185951054e-04</internalNodes>\n          <leafValues>\n            4.9628820270299911e-02 -2.2624179720878601e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2395 -3.7316799163818359e-02</internalNodes>\n          <leafValues>\n            -4.2978170514106750e-01 2.1337680518627167e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2396 -2.6047111023217440e-03</internalNodes>\n          <leafValues>\n            3.6650991439819336e-01 -2.5405049324035645e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2397 5.1927138119935989e-03</internalNodes>\n          <leafValues>\n            2.6877930387854576e-02 -3.3478578925132751e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2398 3.0462879221886396e-03</internalNodes>\n          <leafValues>\n            -3.0848290771245956e-02 2.9788359999656677e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2399 -4.1325599886476994e-04</internalNodes>\n          <leafValues>\n            7.2986789047718048e-02 -1.2147530168294907e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2400 -1.1456120014190674e-01</internalNodes>\n          <leafValues>\n            3.1955468654632568e-01 -3.3379800617694855e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2401 -1.3044059742242098e-03</internalNodes>\n          <leafValues>\n            -2.0625290274620056e-01 5.4634369909763336e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2402 4.5045089791528881e-05</internalNodes>\n          <leafValues>\n            -1.1376550048589706e-01 7.8123383224010468e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2403 1.8890319624915719e-03</internalNodes>\n          <leafValues>\n            -6.5578728914260864e-02 1.7001299560070038e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2404 -5.4107961477711797e-04</internalNodes>\n          <leafValues>\n            -1.8184140324592590e-01 5.1611810922622681e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2405 4.4150161556899548e-03</internalNodes>\n          <leafValues>\n            -3.6324780434370041e-02 2.4938449263572693e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2406 -2.1878050640225410e-02</internalNodes>\n          <leafValues>\n            -1.7643679678440094e-01 5.4811108857393265e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2407 -2.0328219980001450e-03</internalNodes>\n          <leafValues>\n            9.4266183674335480e-02 -9.7129411995410919e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2408 2.6754371356219053e-04</internalNodes>\n          <leafValues>\n            5.7487931102514267e-02 -1.5442019701004028e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2409 1.4061420224606991e-03</internalNodes>\n          <leafValues>\n            -5.0268959254026413e-02 1.8814170360565186e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2410 2.0725419744849205e-04</internalNodes>\n          <leafValues>\n            7.7659189701080322e-02 -1.2538130581378937e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2411 1.8001600401476026e-03</internalNodes>\n          <leafValues>\n            -4.2675640434026718e-02 2.2430649399757385e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2412 -4.6744230203330517e-03</internalNodes>\n          <leafValues>\n            -3.3480471372604370e-01 2.9364420101046562e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2413 7.2110369801521301e-03</internalNodes>\n          <leafValues>\n            -5.2441328763961792e-02 1.8891569972038269e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2414 2.3627521004527807e-03</internalNodes>\n          <leafValues>\n            3.4400060772895813e-02 -2.7200448513031006e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2415 -1.3181479880586267e-03</internalNodes>\n          <leafValues>\n            1.7767719924449921e-01 -5.6363631039857864e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2416 -1.7586319881957024e-04</internalNodes>\n          <leafValues>\n            9.1534242033958435e-02 -1.0412310063838959e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2417 -2.5801590527407825e-04</internalNodes>\n          <leafValues>\n            -1.1226779967546463e-01 8.1381812691688538e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2418 9.6790950919967145e-05</internalNodes>\n          <leafValues>\n            -1.1881929636001587e-01 7.1883186697959900e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2419 8.2001117989420891e-03</internalNodes>\n          <leafValues>\n            -4.0254529565572739e-02 2.2790899872779846e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2420 -6.7277951166033745e-04</internalNodes>\n          <leafValues>\n            -7.0979103446006775e-02 1.2775769829750061e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2421 3.7424470065161586e-04</internalNodes>\n          <leafValues>\n            6.7096449434757233e-02 -1.3645760715007782e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2422 2.5741120334714651e-03</internalNodes>\n          <leafValues>\n            -5.4319828748703003e-02 1.6720260679721832e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2423 4.3884690967388451e-04</internalNodes>\n          <leafValues>\n            8.2114033401012421e-02 -1.1024679988622665e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2424 -4.8180628567934036e-02</internalNodes>\n          <leafValues>\n            -7.2217732667922974e-01 1.2223210185766220e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2425 9.9836904555559158e-03</internalNodes>\n          <leafValues>\n            1.2195640243589878e-02 -6.7448061704635620e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2426 -1.2344559654593468e-03</internalNodes>\n          <leafValues>\n            1.7145380377769470e-01 -5.5381339043378830e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2427 -2.7302911039441824e-03</internalNodes>\n          <leafValues>\n            -1.3044339418411255e-01 7.4266709387302399e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2428 5.5562541820108891e-04</internalNodes>\n          <leafValues>\n            -1.0187319666147232e-01 1.0454159975051880e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2429 1.5140359755605459e-03</internalNodes>\n          <leafValues>\n            8.2843840122222900e-02 -1.1898560076951981e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2430 -7.2555973019916564e-05</internalNodes>\n          <leafValues>\n            -1.2512299418449402e-01 7.1132406592369080e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2431 -2.4981278693303466e-04</internalNodes>\n          <leafValues>\n            -1.3125610351562500e-01 6.8963102996349335e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2432 -6.0206428170204163e-03</internalNodes>\n          <leafValues>\n            2.1284450590610504e-01 -4.7603111714124680e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2433 -7.2469102451577783e-04</internalNodes>\n          <leafValues>\n            1.0499659925699234e-01 -8.5549630224704742e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2434 6.3740357290953398e-04</internalNodes>\n          <leafValues>\n            5.4655481129884720e-02 -1.7353290319442749e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2435 1.0901190340518951e-02</internalNodes>\n          <leafValues>\n            -5.2832279354333878e-02 1.8752649426460266e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2436 7.0734010078012943e-03</internalNodes>\n          <leafValues>\n            6.2958806753158569e-02 -1.6468439996242523e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2437 1.3333789538592100e-03</internalNodes>\n          <leafValues>\n            -1.2590870261192322e-01 9.4716809689998627e-02</leafValues></_></weakClassifiers></_>\n    <_>\n      <maxWeakCount>171</maxWeakCount>\n      <stageThreshold>-1.2739679813385010e+00</stageThreshold>\n      <weakClassifiers>\n        <_>\n          <internalNodes>\n            0 -1 2438 6.2053989619016647e-02</internalNodes>\n          <leafValues>\n            -2.5427028536796570e-01 2.3591099679470062e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2439 5.9534627944231033e-03</internalNodes>\n          <leafValues>\n            -2.2544360160827637e-01 1.7751939594745636e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2440 7.2477371431887150e-03</internalNodes>\n          <leafValues>\n            -1.1398050189018250e-01 2.7556711435317993e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2441 -2.2824530024081469e-03</internalNodes>\n          <leafValues>\n            8.6277678608894348e-02 -3.1412398815155029e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2442 1.1776019819080830e-02</internalNodes>\n          <leafValues>\n            -6.2360338866710663e-02 3.4443479776382446e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2443 4.3855342082679272e-03</internalNodes>\n          <leafValues>\n            1.8105769529938698e-02 -5.0128728151321411e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2444 1.5859069302678108e-02</internalNodes>\n          <leafValues>\n            -7.8765146434307098e-02 2.6402598619461060e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2445 3.0654110014438629e-03</internalNodes>\n          <leafValues>\n            3.3250238746404648e-02 -4.3427819013595581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2446 2.5912460405379534e-03</internalNodes>\n          <leafValues>\n            4.0578570216894150e-02 -4.9658200144767761e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2447 3.0834769131615758e-04</internalNodes>\n          <leafValues>\n            -1.4615769684314728e-01 1.2339019775390625e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2448 -2.4314899928867817e-03</internalNodes>\n          <leafValues>\n            7.2739332914352417e-02 -1.9999310374259949e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2449 -1.8934230320155621e-03</internalNodes>\n          <leafValues>\n            -2.3373599350452423e-01 5.6464370340108871e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2450 4.4724289327859879e-03</internalNodes>\n          <leafValues>\n            4.7042880207300186e-02 -3.1258741021156311e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2451 1.5810050535947084e-04</internalNodes>\n          <leafValues>\n            -1.3098309934139252e-01 1.0137090086936951e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2452 1.8755989149212837e-02</internalNodes>\n          <leafValues>\n            -3.8183789700269699e-02 3.7149110436439514e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2453 -7.4876967119053006e-04</internalNodes>\n          <leafValues>\n            1.9981959462165833e-01 -6.0278389602899551e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2454 -9.3861011555418372e-04</internalNodes>\n          <leafValues>\n            8.7467707693576813e-02 -1.6001270711421967e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2455 -1.3442989438772202e-03</internalNodes>\n          <leafValues>\n            -3.3072051405906677e-01 3.6564111709594727e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2456 -1.1384190293028951e-03</internalNodes>\n          <leafValues>\n            -2.0630060136318207e-01 5.6614480912685394e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2457 2.5966269895434380e-03</internalNodes>\n          <leafValues>\n            -6.2676019966602325e-02 1.9195850193500519e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2458 1.2499650474637747e-03</internalNodes>\n          <leafValues>\n            5.7390280067920685e-02 -1.9605259597301483e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2459 1.1832700110971928e-03</internalNodes>\n          <leafValues>\n            -8.5788756608963013e-02 1.3682979345321655e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2460 -5.1836138591170311e-03</internalNodes>\n          <leafValues>\n            3.1635698676109314e-01 -4.6736460179090500e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2461 -1.3185790181159973e-01</internalNodes>\n          <leafValues>\n            -6.2279629707336426e-01 1.8798090517520905e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2462 1.8653980223461986e-03</internalNodes>\n          <leafValues>\n            3.8837268948554993e-02 -3.0104321241378784e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2463 7.3482480365782976e-04</internalNodes>\n          <leafValues>\n            -7.6612047851085663e-02 1.5002079308032990e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2464 -1.5738410002086312e-04</internalNodes>\n          <leafValues>\n            -1.6588360071182251e-01 7.0020452141761780e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2465 5.1779212662950158e-04</internalNodes>\n          <leafValues>\n            7.4801079928874969e-02 -1.6358199715614319e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2466 7.5904270634055138e-03</internalNodes>\n          <leafValues>\n            -5.1050990819931030e-02 2.4487720429897308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2467 -1.1010250076651573e-02</internalNodes>\n          <leafValues>\n            -5.8380401134490967e-01 2.0622009411454201e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2468 1.1621849983930588e-01</internalNodes>\n          <leafValues>\n            2.5175059214234352e-02 -4.1262671351432800e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2469 -7.4468040838837624e-04</internalNodes>\n          <leafValues>\n            1.2729789316654205e-01 -8.9675500988960266e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2470 1.1765309609472752e-02</internalNodes>\n          <leafValues>\n            2.0906679332256317e-02 -5.3172761201858521e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2471 -4.4441698119044304e-03</internalNodes>\n          <leafValues>\n            1.4282639324665070e-01 -7.8762412071228027e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2472 -4.3369788909330964e-04</internalNodes>\n          <leafValues>\n            -2.2131459414958954e-01 5.4554950445890427e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2473 -1.9204010022804141e-03</internalNodes>\n          <leafValues>\n            -2.5610721111297607e-01 4.0600918233394623e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2474 -2.9081690590828657e-03</internalNodes>\n          <leafValues>\n            2.0206320285797119e-01 -5.6222829967737198e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2475 -1.4549949810316321e-05</internalNodes>\n          <leafValues>\n            9.0000502765178680e-02 -1.1770520359277725e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2476 -5.3217669483274221e-04</internalNodes>\n          <leafValues>\n            -1.5299430489540100e-01 6.8925492465496063e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2477 -1.4590179547667503e-02</internalNodes>\n          <leafValues>\n            2.1776519715785980e-01 -5.1850430667400360e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2478 -4.0213059401139617e-04</internalNodes>\n          <leafValues>\n            9.4017893075942993e-02 -1.1027640104293823e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2479 -2.3089889436960220e-03</internalNodes>\n          <leafValues>\n            2.4792349338531494e-01 -5.7857040315866470e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2480 3.1196139752864838e-04</internalNodes>\n          <leafValues>\n            -1.4021940529346466e-01 7.7247492969036102e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2481 -9.1317007318139076e-03</internalNodes>\n          <leafValues>\n            4.0242809057235718e-01 -2.8953509405255318e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2482 4.2655199649743736e-04</internalNodes>\n          <leafValues>\n            5.3114388138055801e-02 -2.1355339884757996e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2483 3.9956220425665379e-03</internalNodes>\n          <leafValues>\n            4.4066920876502991e-02 -2.2994419932365417e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2484 -1.4012040337547660e-03</internalNodes>\n          <leafValues>\n            2.7106899023056030e-01 -4.5171830803155899e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2485 3.6064770072698593e-02</internalNodes>\n          <leafValues>\n            3.3628080040216446e-02 -3.2830131053924561e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2486 -1.3408949598670006e-04</internalNodes>\n          <leafValues>\n            -1.3888040184974670e-01 8.0078050494194031e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2487 -6.9480319507420063e-03</internalNodes>\n          <leafValues>\n            -3.9315450191497803e-01 2.7302930131554604e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2488 -1.4855440240353346e-03</internalNodes>\n          <leafValues>\n            1.9761669635772705e-01 -5.1562070846557617e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2489 -1.3757539913058281e-02</internalNodes>\n          <leafValues>\n            -5.5620980262756348e-01 1.8301570788025856e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2490 8.4021147340536118e-03</internalNodes>\n          <leafValues>\n            1.3690480031073093e-02 -6.3171321153640747e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2491 -1.7845979891717434e-04</internalNodes>\n          <leafValues>\n            -1.4535990357398987e-01 6.3921131193637848e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2492 -1.1326850391924381e-02</internalNodes>\n          <leafValues>\n            6.5870612859725952e-01 -1.6460629180073738e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2493 1.5268150018528104e-03</internalNodes>\n          <leafValues>\n            -6.0389541089534760e-02 1.5454010665416718e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2494 -6.0069989413022995e-03</internalNodes>\n          <leafValues>\n            2.5859731435775757e-01 -4.9466971307992935e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2495 -7.4241221882402897e-03</internalNodes>\n          <leafValues>\n            -3.8806110620498657e-01 2.9393190518021584e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2496 -3.9992430247366428e-03</internalNodes>\n          <leafValues>\n            -1.3788199424743652e-01 7.7991880476474762e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2497 1.0202969860984012e-04</internalNodes>\n          <leafValues>\n            7.2710737586021423e-02 -1.7032580077648163e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2498 4.0135599556379020e-04</internalNodes>\n          <leafValues>\n            -9.2788018286228180e-02 1.2305440008640289e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2499 -9.7611807286739349e-03</internalNodes>\n          <leafValues>\n            -3.6630520224571228e-01 2.9748899862170219e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2500 -3.0745539069175720e-01</internalNodes>\n          <leafValues>\n            -7.8651821613311768e-01 1.3058690354228020e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2501 -6.0231718234717846e-03</internalNodes>\n          <leafValues>\n            -5.0900238752365112e-01 1.8171619623899460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2502 -2.3784159566275775e-04</internalNodes>\n          <leafValues>\n            -9.9822521209716797e-02 1.0530869662761688e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2503 1.3516229810193181e-03</internalNodes>\n          <leafValues>\n            -6.6444016993045807e-02 1.5425109863281250e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2504 -1.6924949595704675e-03</internalNodes>\n          <leafValues>\n            -4.4133850932121277e-01 2.5100700557231903e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2505 1.0610929457470775e-03</internalNodes>\n          <leafValues>\n            -6.0577899217605591e-02 1.7217910289764404e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2506 5.6644581491127610e-04</internalNodes>\n          <leafValues>\n            -7.8687779605388641e-02 1.6784669458866119e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2507 -1.3955390080809593e-02</internalNodes>\n          <leafValues>\n            -5.7841098308563232e-01 1.9087139517068863e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2508 -1.8862909637391567e-03</internalNodes>\n          <leafValues>\n            6.2118150293827057e-02 -1.6523399949073792e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2509 1.6784170642495155e-02</internalNodes>\n          <leafValues>\n            -3.0380919575691223e-02 3.6105319857597351e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2510 -1.4158519661577884e-05</internalNodes>\n          <leafValues>\n            7.2182632982730865e-02 -1.4407490193843842e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2511 7.3750452138483524e-03</internalNodes>\n          <leafValues>\n            2.9791580513119698e-02 -2.9277870059013367e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2512 8.0517530441284180e-03</internalNodes>\n          <leafValues>\n            -4.4681299477815628e-02 2.1760399639606476e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2513 -7.9519696533679962e-02</internalNodes>\n          <leafValues>\n            -6.5208691358566284e-01 1.4618909917771816e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2514 1.2065700255334377e-02</internalNodes>\n          <leafValues>\n            2.9202880337834358e-02 -2.9454120993614197e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2515 -1.0122699663043022e-02</internalNodes>\n          <leafValues>\n            2.7746239304542542e-01 -4.3713569641113281e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2516 -1.8515810370445251e-01</internalNodes>\n          <leafValues>\n            -4.6136859059333801e-01 2.4093240499496460e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2517 -8.0726131796836853e-02</internalNodes>\n          <leafValues>\n            -4.4673430919647217e-01 2.0845459774136543e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2518 1.5173270367085934e-03</internalNodes>\n          <leafValues>\n            -5.1575969904661179e-02 1.8063379824161530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2519 -1.1184819974005222e-02</internalNodes>\n          <leafValues>\n            -3.5373958945274353e-01 2.7059540152549744e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2520 -3.5008399281650782e-03</internalNodes>\n          <leafValues>\n            2.0548710227012634e-01 -4.6032059937715530e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2521 1.4720410108566284e-03</internalNodes>\n          <leafValues>\n            -6.3871711492538452e-02 1.8168300390243530e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2522 -4.5021830010227859e-04</internalNodes>\n          <leafValues>\n            -1.6353920102119446e-01 5.9327740222215652e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2523 6.1653478769585490e-04</internalNodes>\n          <leafValues>\n            6.9089323282241821e-02 -1.9156040251255035e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2524 1.4797239564359188e-03</internalNodes>\n          <leafValues>\n            -5.2241999655961990e-02 1.8631340563297272e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2525 -1.4754989933862817e-05</internalNodes>\n          <leafValues>\n            7.3586143553256989e-02 -1.5092320740222931e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2526 8.6423632455989718e-04</internalNodes>\n          <leafValues>\n            6.6930077970027924e-02 -1.3976100087165833e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2527 -4.1005611419677734e-03</internalNodes>\n          <leafValues>\n            2.0946699380874634e-01 -4.7175008803606033e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2528 -2.1505339536815882e-03</internalNodes>\n          <leafValues>\n            -5.2753841876983643e-01 1.7665250226855278e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2529 7.8334724530577660e-03</internalNodes>\n          <leafValues>\n            -4.5125011354684830e-02 2.0374919474124908e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2530 -3.2690390944480896e-03</internalNodes>\n          <leafValues>\n            -1.3836699724197388e-01 7.0653162896633148e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2531 3.9274748414754868e-03</internalNodes>\n          <leafValues>\n            6.8428598344326019e-02 -1.6210170090198517e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2532 7.6534547843039036e-03</internalNodes>\n          <leafValues>\n            -9.3162156641483307e-02 9.9912680685520172e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2533 -3.2620150595903397e-02</internalNodes>\n          <leafValues>\n            3.5453549027442932e-01 -3.0765339732170105e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2534 -1.8247209489345551e-02</internalNodes>\n          <leafValues>\n            -3.8171181082725525e-01 2.7764180675148964e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2535 -8.0104079097509384e-04</internalNodes>\n          <leafValues>\n            -1.4329099655151367e-01 6.4936630427837372e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2536 -1.0993109643459320e-01</internalNodes>\n          <leafValues>\n            8.7319427728652954e-01 -1.1242670007050037e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2537 -3.0508199706673622e-02</internalNodes>\n          <leafValues>\n            -6.1269849538803101e-01 1.9372699782252312e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2538 -1.9187819212675095e-02</internalNodes>\n          <leafValues>\n            2.8533020615577698e-01 -3.6832328885793686e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2539 2.3266570642590523e-03</internalNodes>\n          <leafValues>\n            4.7289360314607620e-02 -2.1252959966659546e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2540 -1.4535760274156928e-03</internalNodes>\n          <leafValues>\n            1.3778920471668243e-01 -7.4501492083072662e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2541 -1.0573640465736389e-03</internalNodes>\n          <leafValues>\n            -2.2186830639839172e-01 4.2039170861244202e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2542 1.7203199677169323e-03</internalNodes>\n          <leafValues>\n            -6.9299750030040741e-02 1.3794890046119690e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2543 -1.4716150471940637e-03</internalNodes>\n          <leafValues>\n            2.4296709895133972e-01 -4.0795009583234787e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2544 -5.2822660654783249e-03</internalNodes>\n          <leafValues>\n            -3.1959480047225952e-01 3.4215260297060013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2545 -4.7165742143988609e-03</internalNodes>\n          <leafValues>\n            3.0581191182136536e-01 -3.1772918999195099e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2546 7.3668370023369789e-03</internalNodes>\n          <leafValues>\n            6.1085078865289688e-02 -1.6390019655227661e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2547 -7.6594999991357327e-03</internalNodes>\n          <leafValues>\n            -4.6472349762916565e-01 1.8869750201702118e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2548 7.6969028450548649e-03</internalNodes>\n          <leafValues>\n            -1.8191590905189514e-02 5.5395811796188354e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2549 -5.6195858633145690e-04</internalNodes>\n          <leafValues>\n            9.7618483006954193e-02 -1.0844089835882187e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2550 -1.4587530131393578e-05</internalNodes>\n          <leafValues>\n            7.4585132300853729e-02 -1.2353610247373581e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2551 -9.5779378898441792e-04</internalNodes>\n          <leafValues>\n            1.6370140016078949e-01 -5.8610081672668457e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2552 8.0253500491380692e-03</internalNodes>\n          <leafValues>\n            2.6857670396566391e-02 -4.1507768630981445e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2553 1.6938529442995787e-03</internalNodes>\n          <leafValues>\n            4.8536270856857300e-02 -1.7888469994068146e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2554 -4.3334178626537323e-03</internalNodes>\n          <leafValues>\n            1.9798220694065094e-01 -4.8085059970617294e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2555 -2.2440029715653509e-04</internalNodes>\n          <leafValues>\n            -1.5113249421119690e-01 6.0428649187088013e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2556 -1.1392509564757347e-02</internalNodes>\n          <leafValues>\n            3.2737928628921509e-01 -2.9751259833574295e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2557 -9.3984175473451614e-03</internalNodes>\n          <leafValues>\n            -1.2912990152835846e-01 7.6302282512187958e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2558 8.7430170970037580e-04</internalNodes>\n          <leafValues>\n            -9.7556166350841522e-02 9.7808010876178741e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2559 7.5171617791056633e-03</internalNodes>\n          <leafValues>\n            6.5084353089332581e-02 -1.5419410169124603e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2560 -2.7937069535255432e-03</internalNodes>\n          <leafValues>\n            1.5009529888629913e-01 -6.3355393707752228e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2561 -3.4385098842903972e-04</internalNodes>\n          <leafValues>\n            1.2404289841651917e-01 -7.5780630111694336e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2562 8.7557926774024963e-02</internalNodes>\n          <leafValues>\n            -1.5905940905213356e-02 5.6607347726821899e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2563 -9.3594435602426529e-03</internalNodes>\n          <leafValues>\n            -3.3039200305938721e-01 3.0874710530042648e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2564 -6.7703737877309322e-03</internalNodes>\n          <leafValues>\n            1.7960870265960693e-01 -5.1310319453477859e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2565 -6.2513751909136772e-03</internalNodes>\n          <leafValues>\n            -5.7952338457107544e-01 1.5425769612193108e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2566 -2.5206409394741058e-02</internalNodes>\n          <leafValues>\n            -6.3777071237564087e-01 1.3051119633018970e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2567 -1.1819769861176610e-03</internalNodes>\n          <leafValues>\n            -2.0478110015392303e-01 4.0494531393051147e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2568 -1.0458839824423194e-03</internalNodes>\n          <leafValues>\n            1.4812879264354706e-01 -6.2631592154502869e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2569 -2.5445020291954279e-03</internalNodes>\n          <leafValues>\n            1.3021010160446167e-01 -6.9430023431777954e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2570 -8.0673627555370331e-02</internalNodes>\n          <leafValues>\n            -2.8054219484329224e-01 3.8956280797719955e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2571 -1.4390920114237815e-04</internalNodes>\n          <leafValues>\n            1.0780519992113113e-01 -9.6550762653350830e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2572 7.6481432188302279e-04</internalNodes>\n          <leafValues>\n            6.0667239129543304e-02 -1.5742610394954681e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2573 -3.4516688901931047e-04</internalNodes>\n          <leafValues>\n            1.1415769904851913e-01 -8.8832370936870575e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2574 -2.2118249908089638e-03</internalNodes>\n          <leafValues>\n            2.2988039255142212e-01 -5.0498738884925842e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2575 9.4616543501615524e-03</internalNodes>\n          <leafValues>\n            1.9827060401439667e-02 -5.0633531808853149e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2576 1.0567939607426524e-03</internalNodes>\n          <leafValues>\n            3.8744639605283737e-02 -2.3509359359741211e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2577 2.9194469098001719e-03</internalNodes>\n          <leafValues>\n            -6.1895478516817093e-02 1.5313319861888885e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2578 -1.0768010281026363e-02</internalNodes>\n          <leafValues>\n            -5.5298101902008057e-01 1.7847239971160889e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2579 -1.0197740048170090e-03</internalNodes>\n          <leafValues>\n            1.1559300124645233e-01 -8.0185852944850922e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2580 1.8127029761672020e-04</internalNodes>\n          <leafValues>\n            5.6652870029211044e-02 -1.6549369692802429e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2581 7.1620188464294188e-06</internalNodes>\n          <leafValues>\n            -9.1480091214179993e-02 9.7915090620517731e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2582 5.2910070866346359e-02</internalNodes>\n          <leafValues>\n            -1.3591200113296509e-02 6.6090220212936401e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2583 4.0185371041297913e-01</internalNodes>\n          <leafValues>\n            1.9574489444494247e-02 -4.9015858769416809e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2584 -1.7914770171046257e-02</internalNodes>\n          <leafValues>\n            -8.8317036628723145e-02 1.0532960295677185e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2585 -1.4578569789591711e-05</internalNodes>\n          <leafValues>\n            7.8513152897357941e-02 -1.2300349771976471e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2586 6.4994548447430134e-03</internalNodes>\n          <leafValues>\n            -4.0843468159437180e-02 2.9337158799171448e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2587 9.5762982964515686e-02</internalNodes>\n          <leafValues>\n            1.9332479685544968e-02 -5.3444057703018188e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2588 1.4263469893194269e-05</internalNodes>\n          <leafValues>\n            -8.8897533714771271e-02 1.0632789880037308e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2589 2.2215039934962988e-03</internalNodes>\n          <leafValues>\n            -4.0777951478958130e-02 2.6405128836631775e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2590 3.1875250861048698e-03</internalNodes>\n          <leafValues>\n            5.9725038707256317e-02 -1.6202959418296814e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2591 9.6069589257240295e-02</internalNodes>\n          <leafValues>\n            1.1318460106849670e-02 -7.9110687971115112e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2592 1.9584870897233486e-03</internalNodes>\n          <leafValues>\n            -3.9252020418643951e-02 2.3639929294586182e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2593 -1.8468469381332397e-01</internalNodes>\n          <leafValues>\n            -5.8974397182464600e-01 1.5758410096168518e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2594 2.1685050160158426e-04</internalNodes>\n          <leafValues>\n            4.6320449560880661e-02 -1.8274679780006409e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2595 1.8809709697961807e-02</internalNodes>\n          <leafValues>\n            -4.3357118964195251e-02 2.7832600474357605e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2596 -6.2639699317514896e-03</internalNodes>\n          <leafValues>\n            -1.3891190290451050e-01 7.7115900814533234e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2597 3.2622940489090979e-04</internalNodes>\n          <leafValues>\n            -9.1803021728992462e-02 1.0588289797306061e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2598 5.3745559416711330e-03</internalNodes>\n          <leafValues>\n            1.0803489945828915e-02 -7.6716458797454834e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2599 2.8126770630478859e-03</internalNodes>\n          <leafValues>\n            -5.9618860483169556e-02 1.6133050620555878e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2600 -6.5314618404954672e-04</internalNodes>\n          <leafValues>\n            -8.5690811276435852e-02 1.1540769785642624e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2601 -1.7845110269263387e-03</internalNodes>\n          <leafValues>\n            8.1831991672515869e-02 -1.2700800597667694e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2602 3.0969830695539713e-03</internalNodes>\n          <leafValues>\n            6.8366639316082001e-02 -1.4475439488887787e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2603 -4.1442047804594040e-03</internalNodes>\n          <leafValues>\n            1.8632030487060547e-01 -5.4030310362577438e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2604 -4.9972519278526306e-02</internalNodes>\n          <leafValues>\n            -1.2800359725952148e-01 8.5049159824848175e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2605 -1.0743910446763039e-02</internalNodes>\n          <leafValues>\n            1.3701729476451874e-01 -7.7366456389427185e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2606 -3.0474149389192462e-04</internalNodes>\n          <leafValues>\n            -1.6938340663909912e-01 5.7971168309450150e-02</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2607 3.6023318767547607e-02</internalNodes>\n          <leafValues>\n            1.3561300002038479e-02 -6.3279747962951660e-01</leafValues></_>\n        <_>\n          <internalNodes>\n            0 -1 2608 2.5479190517216921e-03</internalNodes>\n          <leafValues>\n            -4.3824359774589539e-02 2.2150419652462006e-01</leafValues></_></weakClassifiers></_></stages>\n  <features>\n    <_>\n      <rects>\n        <_>\n          8 7 2 6 -1.</_>\n        <_>\n          8 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 10 7 -1.</_>\n        <_>\n          13 3 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 3 6 -1.</_>\n        <_>\n          10 14 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 8 8 -1.</_>\n        <_>\n          14 4 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 5 4 -1.</_>\n        <_>\n          5 9 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 6 -1.</_>\n        <_>\n          8 4 3 3 2.</_>\n        <_>\n          11 7 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 5 2 -1.</_>\n        <_>\n          10 15 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 8 4 -1.</_>\n        <_>\n          7 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 3 3 -1.</_>\n        <_>\n          11 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 3 11 -1.</_>\n        <_>\n          4 5 1 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 6 -1.</_>\n        <_>\n          8 10 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 1 2 -1.</_>\n        <_>\n          13 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 17 -1.</_>\n        <_>\n          4 3 3 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 3 -1.</_>\n        <_>\n          11 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 6 9 -1.</_>\n        <_>\n          4 9 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 6 -1.</_>\n        <_>\n          14 5 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 9 6 -1.</_>\n        <_>\n          7 10 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 6 -1.</_>\n        <_>\n          5 8 3 3 2.</_>\n        <_>\n          8 11 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 4 18 -1.</_>\n        <_>\n          4 0 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 3 4 -1.</_>\n        <_>\n          10 14 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 3 9 -1.</_>\n        <_>\n          7 3 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 1 3 -1.</_>\n        <_>\n          11 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 5 2 -1.</_>\n        <_>\n          4 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 2 3 -1.</_>\n        <_>\n          11 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 1 3 -1.</_>\n        <_>\n          12 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 8 -1.</_>\n        <_>\n          9 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 13 -1.</_>\n        <_>\n          8 3 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 4 12 -1.</_>\n        <_>\n          4 6 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 3 2 -1.</_>\n        <_>\n          12 13 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 3 11 -1.</_>\n        <_>\n          4 5 1 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 13 12 -1.</_>\n        <_>\n          3 12 13 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 6 -1.</_>\n        <_>\n          7 7 3 3 2.</_>\n        <_>\n          10 10 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 2 -1.</_>\n        <_>\n          5 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 14 3 -1.</_>\n        <_>\n          12 4 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 3 2 -1.</_>\n        <_>\n          11 12 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 1 3 -1.</_>\n        <_>\n          12 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 3 3 -1.</_>\n        <_>\n          4 6 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 2 -1.</_>\n        <_>\n          9 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 3 13 -1.</_>\n        <_>\n          4 3 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 2 3 -1.</_>\n        <_>\n          15 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 4 4 -1.</_>\n        <_>\n          12 10 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 8 9 -1.</_>\n        <_>\n          8 10 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 6 -1.</_>\n        <_>\n          8 0 6 3 2.</_>\n        <_>\n          14 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 6 -1.</_>\n        <_>\n          5 12 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 4 -1.</_>\n        <_>\n          12 12 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 3 8 -1.</_>\n        <_>\n          11 11 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 5 6 -1.</_>\n        <_>\n          5 7 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 6 -1.</_>\n        <_>\n          10 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 3 4 -1.</_>\n        <_>\n          11 15 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 3 -1.</_>\n        <_>\n          8 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 2 -1.</_>\n        <_>\n          8 8 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 2 -1.</_>\n        <_>\n          10 7 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          6 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 8 -1.</_>\n        <_>\n          9 0 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 3 8 -1.</_>\n        <_>\n          5 14 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 2 -1.</_>\n        <_>\n          13 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 4 -1.</_>\n        <_>\n          9 2 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 1 8 -1.</_>\n        <_>\n          14 14 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 3 -1.</_>\n        <_>\n          6 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 3 -1.</_>\n        <_>\n          6 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 2 -1.</_>\n        <_>\n          10 12 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 1 12 -1.</_>\n        <_>\n          12 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 14 6 -1.</_>\n        <_>\n          2 8 7 3 2.</_>\n        <_>\n          9 11 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 17 -1.</_>\n        <_>\n          12 3 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 1 2 -1.</_>\n        <_>\n          12 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 2 1 -1.</_>\n        <_>\n          14 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 3 -1.</_>\n        <_>\n          12 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 10 10 -1.</_>\n        <_>\n          13 2 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 3 1 -1.</_>\n        <_>\n          12 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 1 4 -1.</_>\n        <_>\n          12 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 6 -1.</_>\n        <_>\n          8 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 1 3 -1.</_>\n        <_>\n          12 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          10 12 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 8 6 -1.</_>\n        <_>\n          6 3 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 19 -1.</_>\n        <_>\n          4 0 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 9 -1.</_>\n        <_>\n          5 9 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 1 2 -1.</_>\n        <_>\n          13 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 15 -1.</_>\n        <_>\n          5 3 4 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 2 3 -1.</_>\n        <_>\n          13 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 2 -1.</_>\n        <_>\n          6 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 1 -1.</_>\n        <_>\n          9 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 1 -1.</_>\n        <_>\n          10 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 1 3 -1.</_>\n        <_>\n          6 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 1 2 -1.</_>\n        <_>\n          18 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 3 -1.</_>\n        <_>\n          6 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 3 4 -1.</_>\n        <_>\n          11 10 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 14 -1.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 3 4 -1.</_>\n        <_>\n          14 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 3 6 -1.</_>\n        <_>\n          4 7 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 8 -1.</_>\n        <_>\n          5 14 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 3 2 -1.</_>\n        <_>\n          10 1 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 3 -1.</_>\n        <_>\n          11 1 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 8 8 -1.</_>\n        <_>\n          9 12 4 4 2.</_>\n        <_>\n          13 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 6 4 -1.</_>\n        <_>\n          10 13 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 3 12 -1.</_>\n        <_>\n          4 6 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 8 5 -1.</_>\n        <_>\n          13 3 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 3 6 -1.</_>\n        <_>\n          7 10 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 4 -1.</_>\n        <_>\n          5 12 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 6 -1.</_>\n        <_>\n          11 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 2 -1.</_>\n        <_>\n          8 8 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 8 4 -1.</_>\n        <_>\n          2 0 4 2 2.</_>\n        <_>\n          6 2 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 3 5 -1.</_>\n        <_>\n          12 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 2 3 -1.</_>\n        <_>\n          12 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 1 2 -1.</_>\n        <_>\n          12 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 3 -1.</_>\n        <_>\n          8 11 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 3 9 -1.</_>\n        <_>\n          3 6 1 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 1 3 -1.</_>\n        <_>\n          12 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 4 2 -1.</_>\n        <_>\n          5 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 3 7 -1.</_>\n        <_>\n          4 8 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 15 -1.</_>\n        <_>\n          3 3 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 4 3 -1.</_>\n        <_>\n          12 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 20 -1.</_>\n        <_>\n          9 0 1 10 2.</_>\n        <_>\n          10 10 1 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 3 3 -1.</_>\n        <_>\n          6 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 10 -1.</_>\n        <_>\n          5 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 1 -1.</_>\n        <_>\n          9 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 3 3 -1.</_>\n        <_>\n          5 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 4 2 -1.</_>\n        <_>\n          15 6 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 5 3 2 -1.</_>\n        <_>\n          15 6 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 3 -1.</_>\n        <_>\n          5 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 12 -1.</_>\n        <_>\n          8 5 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 3 -1.</_>\n        <_>\n          8 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          6 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 1 -1.</_>\n        <_>\n          5 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 2 1 -1.</_>\n        <_>\n          13 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 5 2 -1.</_>\n        <_>\n          10 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 1 3 -1.</_>\n        <_>\n          11 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 6 -1.</_>\n        <_>\n          7 4 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 3 -1.</_>\n        <_>\n          5 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 2 3 -1.</_>\n        <_>\n          12 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 3 -1.</_>\n        <_>\n          8 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 9 10 -1.</_>\n        <_>\n          7 11 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 18 2 -1.</_>\n        <_>\n          6 18 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 1 8 -1.</_>\n        <_>\n          0 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 8 10 -1.</_>\n        <_>\n          1 8 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 2 -1.</_>\n        <_>\n          9 13 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 3 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 3 -1.</_>\n        <_>\n          10 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 1 3 -1.</_>\n        <_>\n          13 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 13 3 -1.</_>\n        <_>\n          2 7 13 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 2 4 -1.</_>\n        <_>\n          11 15 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 2 3 -1.</_>\n        <_>\n          8 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 8 -1.</_>\n        <_>\n          3 6 6 4 2.</_>\n        <_>\n          9 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 4 -1.</_>\n        <_>\n          12 0 4 2 2.</_>\n        <_>\n          16 2 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 3 3 -1.</_>\n        <_>\n          10 15 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 2 -1.</_>\n        <_>\n          10 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 5 6 -1.</_>\n        <_>\n          6 14 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 4 -1.</_>\n        <_>\n          6 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 4 -1.</_>\n        <_>\n          11 6 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 12 6 -1.</_>\n        <_>\n          6 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 16 7 -1.</_>\n        <_>\n          11 1 8 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 1 6 -1.</_>\n        <_>\n          12 14 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 9 8 -1.</_>\n        <_>\n          6 10 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 6 -1.</_>\n        <_>\n          5 12 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 6 14 -1.</_>\n        <_>\n          4 0 3 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 1 9 -1.</_>\n        <_>\n          8 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 2 2 -1.</_>\n        <_>\n          11 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 4 13 -1.</_>\n        <_>\n          4 7 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 6 -1.</_>\n        <_>\n          8 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 20 -1.</_>\n        <_>\n          19 0 1 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 3 -1.</_>\n        <_>\n          7 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 1 4 -1.</_>\n        <_>\n          13 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 2 -1.</_>\n        <_>\n          12 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 12 6 -1.</_>\n        <_>\n          3 6 6 3 2.</_>\n        <_>\n          9 9 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 2 -1.</_>\n        <_>\n          10 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 2 3 -1.</_>\n        <_>\n          6 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 1 3 -1.</_>\n        <_>\n          13 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 3 3 -1.</_>\n        <_>\n          6 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 3 3 -1.</_>\n        <_>\n          5 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 1 3 -1.</_>\n        <_>\n          15 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 3 12 -1.</_>\n        <_>\n          4 8 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 3 14 -1.</_>\n        <_>\n          4 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 2 -1.</_>\n        <_>\n          9 11 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 8 4 -1.</_>\n        <_>\n          8 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 2 4 -1.</_>\n        <_>\n          5 5 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 1 -1.</_>\n        <_>\n          8 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 16 2 3 -1.</_>\n        <_>\n          12 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 6 3 -1.</_>\n        <_>\n          3 17 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 2 1 -1.</_>\n        <_>\n          14 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 4 4 -1.</_>\n        <_>\n          11 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 1 -1.</_>\n        <_>\n          6 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 2 -1.</_>\n        <_>\n          6 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 2 1 -1.</_>\n        <_>\n          13 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 3 -1.</_>\n        <_>\n          8 7 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 2 10 -1.</_>\n        <_>\n          5 13 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 1 2 -1.</_>\n        <_>\n          0 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 4 4 -1.</_>\n        <_>\n          4 11 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 12 3 -1.</_>\n        <_>\n          5 9 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 2 3 -1.</_>\n        <_>\n          9 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 3 -1.</_>\n        <_>\n          8 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 1 2 -1.</_>\n        <_>\n          1 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 7 6 -1.</_>\n        <_>\n          5 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 4 -1.</_>\n        <_>\n          13 9 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 3 3 -1.</_>\n        <_>\n          5 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 1 -1.</_>\n        <_>\n          8 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 11 16 -1.</_>\n        <_>\n          0 8 11 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 2 -1.</_>\n        <_>\n          8 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 3 -1.</_>\n        <_>\n          6 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 3 -1.</_>\n        <_>\n          6 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 2 -1.</_>\n        <_>\n          13 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 2 6 -1.</_>\n        <_>\n          8 10 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 4 -1.</_>\n        <_>\n          6 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 8 -1.</_>\n        <_>\n          10 0 5 4 2.</_>\n        <_>\n          15 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 12 -1.</_>\n        <_>\n          9 11 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 12 12 -1.</_>\n        <_>\n          6 3 6 6 2.</_>\n        <_>\n          12 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 4 6 -1.</_>\n        <_>\n          5 9 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 10 10 -1.</_>\n        <_>\n          5 7 5 5 2.</_>\n        <_>\n          10 12 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 15 -1.</_>\n        <_>\n          4 1 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 2 -1.</_>\n        <_>\n          13 11 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 6 -1.</_>\n        <_>\n          6 14 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 3 -1.</_>\n        <_>\n          5 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 1 3 -1.</_>\n        <_>\n          6 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 8 -1.</_>\n        <_>\n          3 7 6 4 2.</_>\n        <_>\n          9 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 6 -1.</_>\n        <_>\n          6 4 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 5 4 -1.</_>\n        <_>\n          11 13 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 6 -1.</_>\n        <_>\n          8 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 2 -1.</_>\n        <_>\n          7 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 3 7 -1.</_>\n        <_>\n          4 13 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 5 9 -1.</_>\n        <_>\n          11 10 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 15 9 -1.</_>\n        <_>\n          4 6 15 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 2 2 -1.</_>\n        <_>\n          15 13 1 1 2.</_>\n        <_>\n          16 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 13 -1.</_>\n        <_>\n          9 5 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 1 -1.</_>\n        <_>\n          6 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 15 -1.</_>\n        <_>\n          6 6 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 4 3 -1.</_>\n        <_>\n          13 0 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 4 -1.</_>\n        <_>\n          0 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 9 3 -1.</_>\n        <_>\n          4 9 9 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 2 -1.</_>\n        <_>\n          8 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 2 2 -1.</_>\n        <_>\n          4 15 1 1 2.</_>\n        <_>\n          5 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 2 3 -1.</_>\n        <_>\n          6 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 1 6 -1.</_>\n        <_>\n          6 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 2 10 -1.</_>\n        <_>\n          5 14 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 3 10 -1.</_>\n        <_>\n          4 6 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 3 5 -1.</_>\n        <_>\n          4 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 2 -1.</_>\n        <_>\n          13 0 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 1 -1.</_>\n        <_>\n          12 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 1 -1.</_>\n        <_>\n          12 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 1 3 -1.</_>\n        <_>\n          6 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 5 3 -1.</_>\n        <_>\n          10 17 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 1 3 -1.</_>\n        <_>\n          7 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 8 2 -1.</_>\n        <_>\n          12 5 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 3 -1.</_>\n        <_>\n          10 7 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 5 9 -1.</_>\n        <_>\n          12 13 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 3 -1.</_>\n        <_>\n          5 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          5 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 4 -1.</_>\n        <_>\n          12 0 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 3 3 -1.</_>\n        <_>\n          6 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 12 -1.</_>\n        <_>\n          1 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 5 10 -1.</_>\n        <_>\n          1 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 2 -1.</_>\n        <_>\n          10 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 8 -1.</_>\n        <_>\n          9 5 1 4 2.</_>\n        <_>\n          10 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 12 3 1 -1.</_>\n        <_>\n          18 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 2 3 -1.</_>\n        <_>\n          5 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 7 2 -1.</_>\n        <_>\n          11 19 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 8 -1.</_>\n        <_>\n          13 6 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 5 -1.</_>\n        <_>\n          14 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 6 -1.</_>\n        <_>\n          9 7 2 3 2.</_>\n        <_>\n          11 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 6 6 -1.</_>\n        <_>\n          10 10 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 17 -1.</_>\n        <_>\n          4 1 2 17 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 9 4 -1.</_>\n        <_>\n          7 3 9 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 4 -1.</_>\n        <_>\n          8 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 8 2 -1.</_>\n        <_>\n          9 9 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 4 -1.</_>\n        <_>\n          11 14 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 1 3 -1.</_>\n        <_>\n          13 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 19 4 1 -1.</_>\n        <_>\n          12 19 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 12 -1.</_>\n        <_>\n          5 4 5 6 2.</_>\n        <_>\n          10 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 5 6 -1.</_>\n        <_>\n          4 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 8 -1.</_>\n        <_>\n          5 14 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 3 -1.</_>\n        <_>\n          7 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 2 -1.</_>\n        <_>\n          8 4 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 1 -1.</_>\n        <_>\n          1 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 6 16 -1.</_>\n        <_>\n          2 3 2 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 3 12 -1.</_>\n        <_>\n          3 6 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 2 -1.</_>\n        <_>\n          12 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 13 -1.</_>\n        <_>\n          19 0 1 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 5 4 -1.</_>\n        <_>\n          9 16 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 4 3 -1.</_>\n        <_>\n          10 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 1 3 -1.</_>\n        <_>\n          12 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 14 -1.</_>\n        <_>\n          9 6 3 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 3 -1.</_>\n        <_>\n          8 11 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 4 -1.</_>\n        <_>\n          6 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 11 9 -1.</_>\n        <_>\n          7 6 11 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 9 6 -1.</_>\n        <_>\n          10 6 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 3 -1.</_>\n        <_>\n          8 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 3 1 -1.</_>\n        <_>\n          1 0 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 4 6 -1.</_>\n        <_>\n          9 4 2 3 2.</_>\n        <_>\n          11 7 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 1 -1.</_>\n        <_>\n          6 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 2 -1.</_>\n        <_>\n          7 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 1 3 -1.</_>\n        <_>\n          7 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 1 2 -1.</_>\n        <_>\n          1 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 2 3 -1.</_>\n        <_>\n          7 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 6 1 2 -1.</_>\n        <_>\n          19 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 2 3 -1.</_>\n        <_>\n          6 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 1 3 -1.</_>\n        <_>\n          11 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 10 3 1 -1.</_>\n        <_>\n          18 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 1 -1.</_>\n        <_>\n          13 0 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 4 -1.</_>\n        <_>\n          14 0 3 2 2.</_>\n        <_>\n          17 2 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 6 -1.</_>\n        <_>\n          12 10 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 1 2 -1.</_>\n        <_>\n          14 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 4 3 -1.</_>\n        <_>\n          6 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 3 -1.</_>\n        <_>\n          5 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 1 -1.</_>\n        <_>\n          10 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 3 -1.</_>\n        <_>\n          10 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 1 -1.</_>\n        <_>\n          10 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 3 -1.</_>\n        <_>\n          7 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 1 6 -1.</_>\n        <_>\n          1 6 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 11 -1.</_>\n        <_>\n          4 2 1 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 18 -1.</_>\n        <_>\n          4 2 1 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 6 2 -1.</_>\n        <_>\n          8 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 3 -1.</_>\n        <_>\n          6 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 3 1 -1.</_>\n        <_>\n          8 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 8 6 -1.</_>\n        <_>\n          3 13 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 3 17 -1.</_>\n        <_>\n          4 2 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 8 1 -1.</_>\n        <_>\n          8 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 3 6 -1.</_>\n        <_>\n          3 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 1 2 -1.</_>\n        <_>\n          18 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 2 6 -1.</_>\n        <_>\n          7 10 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 3 -1.</_>\n        <_>\n          11 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 3 1 -1.</_>\n        <_>\n          17 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 3 2 -1.</_>\n        <_>\n          17 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 1 4 -1.</_>\n        <_>\n          15 5 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 11 -1.</_>\n        <_>\n          14 0 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 5 6 -1.</_>\n        <_>\n          7 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 6 -1.</_>\n        <_>\n          8 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 4 6 -1.</_>\n        <_>\n          11 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 2 -1.</_>\n        <_>\n          5 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 3 2 -1.</_>\n        <_>\n          4 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 3 -1.</_>\n        <_>\n          11 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 6 -1.</_>\n        <_>\n          5 12 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 2 3 -1.</_>\n        <_>\n          17 4 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 1 -1.</_>\n        <_>\n          13 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 6 4 -1.</_>\n        <_>\n          8 5 3 2 2.</_>\n        <_>\n          11 7 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 3 3 -1.</_>\n        <_>\n          11 15 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 3 7 -1.</_>\n        <_>\n          4 7 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 1 2 -1.</_>\n        <_>\n          11 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 3 5 -1.</_>\n        <_>\n          4 9 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 3 3 -1.</_>\n        <_>\n          11 15 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 6 12 -1.</_>\n        <_>\n          3 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 5 6 -1.</_>\n        <_>\n          3 7 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 11 -1.</_>\n        <_>\n          8 6 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 6 -1.</_>\n        <_>\n          7 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 3 8 -1.</_>\n        <_>\n          3 6 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 1 -1.</_>\n        <_>\n          7 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 2 3 -1.</_>\n        <_>\n          13 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 2 3 -1.</_>\n        <_>\n          10 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 5 1 3 -1.</_>\n        <_>\n          19 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 5 3 -1.</_>\n        <_>\n          5 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 10 4 -1.</_>\n        <_>\n          9 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 3 -1.</_>\n        <_>\n          12 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 4 3 -1.</_>\n        <_>\n          5 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 3 3 -1.</_>\n        <_>\n          6 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 2 -1.</_>\n        <_>\n          7 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 8 2 -1.</_>\n        <_>\n          8 11 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 8 -1.</_>\n        <_>\n          14 7 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 5 -1.</_>\n        <_>\n          12 5 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 6 2 -1.</_>\n        <_>\n          7 14 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 3 -1.</_>\n        <_>\n          6 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 1 3 -1.</_>\n        <_>\n          13 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 14 12 -1.</_>\n        <_>\n          6 3 7 6 2.</_>\n        <_>\n          13 9 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 2 -1.</_>\n        <_>\n          18 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 6 10 -1.</_>\n        <_>\n          16 7 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 3 -1.</_>\n        <_>\n          9 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 4 -1.</_>\n        <_>\n          0 8 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 2 -1.</_>\n        <_>\n          11 0 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 2 -1.</_>\n        <_>\n          12 0 4 1 2.</_>\n        <_>\n          16 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 14 6 -1.</_>\n        <_>\n          3 12 14 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 4 -1.</_>\n        <_>\n          7 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 1 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 5 10 -1.</_>\n        <_>\n          11 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 4 4 -1.</_>\n        <_>\n          3 16 2 2 2.</_>\n        <_>\n          5 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 3 -1.</_>\n        <_>\n          7 2 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 20 -1.</_>\n        <_>\n          4 0 4 10 2.</_>\n        <_>\n          8 10 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 3 4 -1.</_>\n        <_>\n          4 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 3 1 -1.</_>\n        <_>\n          4 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 1 2 -1.</_>\n        <_>\n          11 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 1 3 -1.</_>\n        <_>\n          11 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 19 14 1 -1.</_>\n        <_>\n          13 19 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 3 -1.</_>\n        <_>\n          6 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 2 -1.</_>\n        <_>\n          8 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 2 1 -1.</_>\n        <_>\n          10 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 2 3 -1.</_>\n        <_>\n          6 18 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 3 6 -1.</_>\n        <_>\n          9 9 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 7 -1.</_>\n        <_>\n          10 12 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 1 3 -1.</_>\n        <_>\n          8 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 11 -1.</_>\n        <_>\n          12 5 4 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 1 2 -1.</_>\n        <_>\n          2 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 1 2 -1.</_>\n        <_>\n          0 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 16 -1.</_>\n        <_>\n          12 0 4 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 1 2 -1.</_>\n        <_>\n          0 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 9 11 -1.</_>\n        <_>\n          14 0 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 6 -1.</_>\n        <_>\n          6 5 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 4 -1.</_>\n        <_>\n          8 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 12 -1.</_>\n        <_>\n          13 8 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 4 14 -1.</_>\n        <_>\n          10 13 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 10 1 -1.</_>\n        <_>\n          6 1 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 13 6 -1.</_>\n        <_>\n          4 4 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 2 3 -1.</_>\n        <_>\n          12 13 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 4 9 -1.</_>\n        <_>\n          6 12 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 3 10 -1.</_>\n        <_>\n          6 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 3 4 -1.</_>\n        <_>\n          3 10 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 3 6 -1.</_>\n        <_>\n          4 8 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 3 6 -1.</_>\n        <_>\n          12 12 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 2 3 -1.</_>\n        <_>\n          8 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 6 -1.</_>\n        <_>\n          5 8 3 3 2.</_>\n        <_>\n          8 11 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 3 1 -1.</_>\n        <_>\n          4 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 3 3 -1.</_>\n        <_>\n          10 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 3 -1.</_>\n        <_>\n          5 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 4 3 -1.</_>\n        <_>\n          10 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          5 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 1 -1.</_>\n        <_>\n          10 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 14 -1.</_>\n        <_>\n          2 7 18 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 2 -1.</_>\n        <_>\n          10 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 3 -1.</_>\n        <_>\n          8 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 5 2 -1.</_>\n        <_>\n          4 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 1 6 -1.</_>\n        <_>\n          0 5 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 1 6 -1.</_>\n        <_>\n          13 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 3 3 -1.</_>\n        <_>\n          6 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 7 3 -1.</_>\n        <_>\n          3 17 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 5 3 -1.</_>\n        <_>\n          10 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 5 20 -1.</_>\n        <_>\n          4 10 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 2 -1.</_>\n        <_>\n          7 2 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 15 -1.</_>\n        <_>\n          18 5 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 7 3 -1.</_>\n        <_>\n          6 16 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 6 2 -1.</_>\n        <_>\n          10 14 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 1 9 -1.</_>\n        <_>\n          13 11 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 4 4 -1.</_>\n        <_>\n          3 0 2 2 2.</_>\n        <_>\n          5 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 1 6 -1.</_>\n        <_>\n          0 5 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 3 1 -1.</_>\n        <_>\n          6 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          6 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 7 -1.</_>\n        <_>\n          8 11 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 3 -1.</_>\n        <_>\n          8 8 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 8 1 -1.</_>\n        <_>\n          7 8 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 3 3 -1.</_>\n        <_>\n          5 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 8 -1.</_>\n        <_>\n          9 7 1 4 2.</_>\n        <_>\n          10 11 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 3 5 -1.</_>\n        <_>\n          15 2 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 2 3 -1.</_>\n        <_>\n          6 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 1 2 -1.</_>\n        <_>\n          6 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 2 3 -1.</_>\n        <_>\n          12 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 12 3 -1.</_>\n        <_>\n          5 14 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 3 1 -1.</_>\n        <_>\n          12 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 2 3 -1.</_>\n        <_>\n          14 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 2 -1.</_>\n        <_>\n          8 8 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 3 11 -1.</_>\n        <_>\n          3 7 1 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 2 1 -1.</_>\n        <_>\n          1 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 2 -1.</_>\n        <_>\n          7 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 10 2 4 -1.</_>\n        <_>\n          18 10 1 2 2.</_>\n        <_>\n          19 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 2 2 -1.</_>\n        <_>\n          14 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 12 -1.</_>\n        <_>\n          13 5 4 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 3 3 -1.</_>\n        <_>\n          12 5 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 2 2 -1.</_>\n        <_>\n          16 11 1 1 2.</_>\n        <_>\n          17 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 1 2 -1.</_>\n        <_>\n          14 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 8 16 -1.</_>\n        <_>\n          3 8 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 3 5 -1.</_>\n        <_>\n          4 11 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 12 6 -1.</_>\n        <_>\n          4 8 4 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 4 2 -1.</_>\n        <_>\n          6 9 2 1 2.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 3 5 -1.</_>\n        <_>\n          12 15 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 10 2 6 -1.</_>\n        <_>\n          18 10 1 3 2.</_>\n        <_>\n          19 13 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 15 6 1 -1.</_>\n        <_>\n          16 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 7 6 -1.</_>\n        <_>\n          5 13 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 6 6 -1.</_>\n        <_>\n          2 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 3 3 -1.</_>\n        <_>\n          11 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 3 -1.</_>\n        <_>\n          7 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 5 3 -1.</_>\n        <_>\n          5 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 3 1 -1.</_>\n        <_>\n          7 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 4 3 -1.</_>\n        <_>\n          4 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 4 8 -1.</_>\n        <_>\n          2 2 2 4 2.</_>\n        <_>\n          4 6 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 2 3 -1.</_>\n        <_>\n          12 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 4 3 -1.</_>\n        <_>\n          9 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 5 3 -1.</_>\n        <_>\n          8 9 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 2 -1.</_>\n        <_>\n          10 12 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 8 2 -1.</_>\n        <_>\n          4 0 4 1 2.</_>\n        <_>\n          8 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 1 2 -1.</_>\n        <_>\n          0 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 8 4 -1.</_>\n        <_>\n          8 16 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 17 9 3 -1.</_>\n        <_>\n          4 18 9 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 2 8 -1.</_>\n        <_>\n          10 4 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 6 -1.</_>\n        <_>\n          10 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 10 5 -1.</_>\n        <_>\n          12 2 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 6 -1.</_>\n        <_>\n          9 7 2 3 2.</_>\n        <_>\n          11 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 1 6 -1.</_>\n        <_>\n          12 13 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 6 8 -1.</_>\n        <_>\n          4 2 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 1 3 -1.</_>\n        <_>\n          10 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 2 -1.</_>\n        <_>\n          6 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 1 3 -1.</_>\n        <_>\n          10 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 16 9 -1.</_>\n        <_>\n          4 6 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 3 -1.</_>\n        <_>\n          7 12 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 3 -1.</_>\n        <_>\n          10 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 3 8 -1.</_>\n        <_>\n          11 6 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 3 5 -1.</_>\n        <_>\n          2 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 2 -1.</_>\n        <_>\n          7 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 3 -1.</_>\n        <_>\n          10 10 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 4 3 -1.</_>\n        <_>\n          11 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 3 1 -1.</_>\n        <_>\n          17 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 3 -1.</_>\n        <_>\n          10 0 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 2 2 -1.</_>\n        <_>\n          17 11 1 1 2.</_>\n        <_>\n          18 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 7 3 -1.</_>\n        <_>\n          11 4 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 1 3 -1.</_>\n        <_>\n          6 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 2 -1.</_>\n        <_>\n          8 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 3 -1.</_>\n        <_>\n          8 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 3 -1.</_>\n        <_>\n          6 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 3 -1.</_>\n        <_>\n          6 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 3 -1.</_>\n        <_>\n          10 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 12 2 -1.</_>\n        <_>\n          5 1 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 8 4 -1.</_>\n        <_>\n          4 13 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 8 4 -1.</_>\n        <_>\n          6 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 2 -1.</_>\n        <_>\n          4 0 2 1 2.</_>\n        <_>\n          6 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 2 -1.</_>\n        <_>\n          13 10 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 2 2 -1.</_>\n        <_>\n          13 10 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 1 -1.</_>\n        <_>\n          12 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 14 6 -1.</_>\n        <_>\n          6 9 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 1 3 -1.</_>\n        <_>\n          11 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 6 2 -1.</_>\n        <_>\n          14 11 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 1 -1.</_>\n        <_>\n          12 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 1 -1.</_>\n        <_>\n          10 11 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 6 5 -1.</_>\n        <_>\n          3 13 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 1 -1.</_>\n        <_>\n          15 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 1 -1.</_>\n        <_>\n          15 0 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 3 3 -1.</_>\n        <_>\n          5 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 2 2 -1.</_>\n        <_>\n          12 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 2 3 -1.</_>\n        <_>\n          12 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 1 3 -1.</_>\n        <_>\n          8 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 1 3 -1.</_>\n        <_>\n          0 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 1 3 -1.</_>\n        <_>\n          0 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 2 2 -1.</_>\n        <_>\n          4 8 1 1 2.</_>\n        <_>\n          5 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 8 10 -1.</_>\n        <_>\n          3 6 4 5 2.</_>\n        <_>\n          7 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 1 3 -1.</_>\n        <_>\n          6 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 3 8 -1.</_>\n        <_>\n          13 0 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 6 -1.</_>\n        <_>\n          10 0 5 3 2.</_>\n        <_>\n          15 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 2 2 -1.</_>\n        <_>\n          17 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 14 -1.</_>\n        <_>\n          14 0 6 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 2 1 -1.</_>\n        <_>\n          11 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 9 2 6 -1.</_>\n        <_>\n          18 9 1 3 2.</_>\n        <_>\n          19 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 16 -1.</_>\n        <_>\n          18 4 1 8 2.</_>\n        <_>\n          19 12 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 6 -1.</_>\n        <_>\n          8 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 11 -1.</_>\n        <_>\n          8 5 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 2 -1.</_>\n        <_>\n          7 8 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 5 -1.</_>\n        <_>\n          7 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 4 -1.</_>\n        <_>\n          11 16 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 8 18 -1.</_>\n        <_>\n          3 9 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 7 3 -1.</_>\n        <_>\n          1 8 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 6 -1.</_>\n        <_>\n          5 7 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 3 10 -1.</_>\n        <_>\n          4 8 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 3 2 -1.</_>\n        <_>\n          4 12 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 10 3 -1.</_>\n        <_>\n          8 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 6 2 -1.</_>\n        <_>\n          8 15 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 2 -1.</_>\n        <_>\n          6 9 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 3 3 -1.</_>\n        <_>\n          17 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 1 3 -1.</_>\n        <_>\n          8 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 1 3 -1.</_>\n        <_>\n          18 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 5 6 -1.</_>\n        <_>\n          5 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 3 -1.</_>\n        <_>\n          13 1 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 10 -1.</_>\n        <_>\n          6 12 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 4 4 -1.</_>\n        <_>\n          5 14 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 4 1 -1.</_>\n        <_>\n          4 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 2 -1.</_>\n        <_>\n          7 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 2 6 -1.</_>\n        <_>\n          8 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 20 10 -1.</_>\n        <_>\n          10 10 10 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 2 2 -1.</_>\n        <_>\n          13 8 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 10 4 -1.</_>\n        <_>\n          15 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 16 2 -1.</_>\n        <_>\n          8 10 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 6 6 -1.</_>\n        <_>\n          10 14 3 3 2.</_>\n        <_>\n          13 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 1 3 -1.</_>\n        <_>\n          13 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 10 8 -1.</_>\n        <_>\n          4 4 5 4 2.</_>\n        <_>\n          9 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 6 6 -1.</_>\n        <_>\n          5 1 3 3 2.</_>\n        <_>\n          8 4 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 3 -1.</_>\n        <_>\n          11 11 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 3 6 -1.</_>\n        <_>\n          3 13 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 6 -1.</_>\n        <_>\n          8 0 6 3 2.</_>\n        <_>\n          14 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 2 4 -1.</_>\n        <_>\n          7 8 1 2 2.</_>\n        <_>\n          8 10 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 7 10 -1.</_>\n        <_>\n          11 6 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 3 2 -1.</_>\n        <_>\n          10 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 3 -1.</_>\n        <_>\n          12 11 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 3 2 -1.</_>\n        <_>\n          6 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 1 3 -1.</_>\n        <_>\n          11 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 3 -1.</_>\n        <_>\n          5 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 2 -1.</_>\n        <_>\n          12 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 9 -1.</_>\n        <_>\n          11 6 8 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 3 3 -1.</_>\n        <_>\n          11 11 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 1 3 -1.</_>\n        <_>\n          6 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 3 -1.</_>\n        <_>\n          10 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 2 6 -1.</_>\n        <_>\n          7 10 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 4 6 -1.</_>\n        <_>\n          3 0 2 3 2.</_>\n        <_>\n          5 3 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 17 -1.</_>\n        <_>\n          6 0 1 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 6 3 -1.</_>\n        <_>\n          12 10 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 19 8 1 -1.</_>\n        <_>\n          14 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 5 3 -1.</_>\n        <_>\n          13 4 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 2 -1.</_>\n        <_>\n          6 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 3 10 -1.</_>\n        <_>\n          13 10 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 3 -1.</_>\n        <_>\n          7 7 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 1 3 -1.</_>\n        <_>\n          6 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 2 3 -1.</_>\n        <_>\n          6 10 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 6 3 -1.</_>\n        <_>\n          11 4 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 2 3 -1.</_>\n        <_>\n          13 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 8 4 -1.</_>\n        <_>\n          6 16 4 2 2.</_>\n        <_>\n          10 18 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 3 15 -1.</_>\n        <_>\n          11 5 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 6 -1.</_>\n        <_>\n          10 0 5 3 2.</_>\n        <_>\n          15 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 16 -1.</_>\n        <_>\n          12 2 1 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 2 2 -1.</_>\n        <_>\n          7 12 1 1 2.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 1 -1.</_>\n        <_>\n          7 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 4 -1.</_>\n        <_>\n          7 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 16 6 -1.</_>\n        <_>\n          0 15 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 2 3 -1.</_>\n        <_>\n          7 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 17 2 2 -1.</_>\n        <_>\n          15 18 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 12 2 2 -1.</_>\n        <_>\n          17 12 1 1 2.</_>\n        <_>\n          18 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 19 -1.</_>\n        <_>\n          12 1 1 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 11 19 4 -1.</_>\n        <_>\n          1 13 19 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 8 2 10 -1.</_>\n        <_>\n          17 8 1 5 2.</_>\n        <_>\n          18 13 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 11 20 -1.</_>\n        <_>\n          9 10 11 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 12 12 -1.</_>\n        <_>\n          4 1 6 6 2.</_>\n        <_>\n          10 7 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 6 -1.</_>\n        <_>\n          6 11 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 1 -1.</_>\n        <_>\n          5 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 4 -1.</_>\n        <_>\n          19 1 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 15 -1.</_>\n        <_>\n          15 0 4 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 2 -1.</_>\n        <_>\n          7 5 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 2 2 -1.</_>\n        <_>\n          17 11 1 1 2.</_>\n        <_>\n          18 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 8 -1.</_>\n        <_>\n          6 12 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 4 -1.</_>\n        <_>\n          9 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 2 2 -1.</_>\n        <_>\n          0 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 8 4 -1.</_>\n        <_>\n          7 14 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 3 2 -1.</_>\n        <_>\n          11 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 2 2 -1.</_>\n        <_>\n          5 8 1 1 2.</_>\n        <_>\n          6 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 3 -1.</_>\n        <_>\n          12 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 2 2 -1.</_>\n        <_>\n          10 8 1 1 2.</_>\n        <_>\n          11 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 3 2 -1.</_>\n        <_>\n          7 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 2 1 -1.</_>\n        <_>\n          14 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 2 6 -1.</_>\n        <_>\n          16 9 1 3 2.</_>\n        <_>\n          17 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 2 6 -1.</_>\n        <_>\n          17 4 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 7 6 -1.</_>\n        <_>\n          13 4 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 4 4 -1.</_>\n        <_>\n          16 10 2 2 2.</_>\n        <_>\n          18 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 2 -1.</_>\n        <_>\n          11 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 3 3 -1.</_>\n        <_>\n          6 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 4 2 -1.</_>\n        <_>\n          4 15 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 2 1 -1.</_>\n        <_>\n          1 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 4 8 -1.</_>\n        <_>\n          7 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 7 3 -1.</_>\n        <_>\n          9 18 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 2 3 -1.</_>\n        <_>\n          7 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 17 4 3 -1.</_>\n        <_>\n          12 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 9 11 -1.</_>\n        <_>\n          14 7 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 4 5 -1.</_>\n        <_>\n          18 14 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 3 4 -1.</_>\n        <_>\n          10 2 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 2 8 -1.</_>\n        <_>\n          3 11 1 4 2.</_>\n        <_>\n          4 15 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 6 18 -1.</_>\n        <_>\n          13 2 3 9 2.</_>\n        <_>\n          16 11 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 5 2 -1.</_>\n        <_>\n          9 13 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 4 10 -1.</_>\n        <_>\n          11 8 2 5 2.</_>\n        <_>\n          13 13 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 1 -1.</_>\n        <_>\n          10 11 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 1 2 -1.</_>\n        <_>\n          1 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 3 -1.</_>\n        <_>\n          8 7 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 10 3 -1.</_>\n        <_>\n          13 5 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 4 6 -1.</_>\n        <_>\n          5 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 3 -1.</_>\n        <_>\n          8 11 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 3 7 -1.</_>\n        <_>\n          3 8 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 3 6 -1.</_>\n        <_>\n          3 10 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 2 -1.</_>\n        <_>\n          15 0 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 4 -1.</_>\n        <_>\n          8 7 2 2 2.</_>\n        <_>\n          10 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 4 3 -1.</_>\n        <_>\n          4 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 6 2 -1.</_>\n        <_>\n          8 12 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 1 4 -1.</_>\n        <_>\n          17 5 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 2 3 -1.</_>\n        <_>\n          6 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 8 -1.</_>\n        <_>\n          7 9 3 4 2.</_>\n        <_>\n          10 13 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 2 3 -1.</_>\n        <_>\n          5 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 4 9 -1.</_>\n        <_>\n          7 13 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 1 -1.</_>\n        <_>\n          6 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 6 19 -1.</_>\n        <_>\n          2 1 2 19 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 2 -1.</_>\n        <_>\n          8 8 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          5 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 4 -1.</_>\n        <_>\n          9 12 1 2 2.</_>\n        <_>\n          10 14 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 10 -1.</_>\n        <_>\n          12 12 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 6 8 -1.</_>\n        <_>\n          10 10 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 2 6 -1.</_>\n        <_>\n          5 3 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 3 3 -1.</_>\n        <_>\n          5 6 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 2 8 -1.</_>\n        <_>\n          10 7 1 4 2.</_>\n        <_>\n          11 11 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 10 -1.</_>\n        <_>\n          2 5 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 6 2 -1.</_>\n        <_>\n          8 11 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 2 1 -1.</_>\n        <_>\n          11 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 4 3 -1.</_>\n        <_>\n          4 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 2 -1.</_>\n        <_>\n          8 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 1 -1.</_>\n        <_>\n          8 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 3 -1.</_>\n        <_>\n          5 6 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 5 3 -1.</_>\n        <_>\n          5 6 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 9 -1.</_>\n        <_>\n          10 10 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 1 2 -1.</_>\n        <_>\n          17 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 10 4 -1.</_>\n        <_>\n          4 9 5 2 2.</_>\n        <_>\n          9 11 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 10 -1.</_>\n        <_>\n          5 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 18 5 -1.</_>\n        <_>\n          11 13 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 3 3 -1.</_>\n        <_>\n          5 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 4 -1.</_>\n        <_>\n          9 14 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 15 6 -1.</_>\n        <_>\n          5 13 15 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 6 -1.</_>\n        <_>\n          16 0 2 3 2.</_>\n        <_>\n          18 3 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 2 -1.</_>\n        <_>\n          11 12 1 1 2.</_>\n        <_>\n          12 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 3 5 -1.</_>\n        <_>\n          7 6 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 2 1 -1.</_>\n        <_>\n          14 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 3 2 -1.</_>\n        <_>\n          6 8 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 1 -1.</_>\n        <_>\n          1 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 1 -1.</_>\n        <_>\n          1 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 3 1 -1.</_>\n        <_>\n          17 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 8 -1.</_>\n        <_>\n          14 5 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 4 4 -1.</_>\n        <_>\n          5 13 2 2 2.</_>\n        <_>\n          7 15 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 3 -1.</_>\n        <_>\n          6 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 2 10 -1.</_>\n        <_>\n          9 2 1 5 2.</_>\n        <_>\n          10 7 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 2 -1.</_>\n        <_>\n          9 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 2 4 -1.</_>\n        <_>\n          15 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 3 -1.</_>\n        <_>\n          7 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 8 2 -1.</_>\n        <_>\n          7 10 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 2 2 -1.</_>\n        <_>\n          13 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 3 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 5 2 -1.</_>\n        <_>\n          13 11 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 2 2 -1.</_>\n        <_>\n          16 11 1 1 2.</_>\n        <_>\n          17 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 2 4 -1.</_>\n        <_>\n          0 10 1 2 2.</_>\n        <_>\n          1 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 2 8 -1.</_>\n        <_>\n          0 8 1 4 2.</_>\n        <_>\n          1 12 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 5 3 -1.</_>\n        <_>\n          6 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 8 2 4 -1.</_>\n        <_>\n          19 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 3 1 -1.</_>\n        <_>\n          15 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 3 3 -1.</_>\n        <_>\n          9 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 6 3 -1.</_>\n        <_>\n          5 14 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 1 3 -1.</_>\n        <_>\n          12 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 14 6 -1.</_>\n        <_>\n          2 17 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 2 4 -1.</_>\n        <_>\n          7 5 1 2 2.</_>\n        <_>\n          8 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 2 2 -1.</_>\n        <_>\n          5 17 1 1 2.</_>\n        <_>\n          6 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 3 5 -1.</_>\n        <_>\n          10 3 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 4 3 -1.</_>\n        <_>\n          6 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 6 4 -1.</_>\n        <_>\n          12 0 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 10 -1.</_>\n        <_>\n          4 8 3 5 2.</_>\n        <_>\n          7 13 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 2 6 -1.</_>\n        <_>\n          5 3 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 6 6 -1.</_>\n        <_>\n          5 4 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 2 8 -1.</_>\n        <_>\n          5 12 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 2 -1.</_>\n        <_>\n          5 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 1 3 -1.</_>\n        <_>\n          12 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 15 -1.</_>\n        <_>\n          5 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 1 3 -1.</_>\n        <_>\n          6 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 3 3 -1.</_>\n        <_>\n          6 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 3 -1.</_>\n        <_>\n          12 0 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 15 3 -1.</_>\n        <_>\n          7 2 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 16 5 -1.</_>\n        <_>\n          12 0 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 8 -1.</_>\n        <_>\n          13 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 4 -1.</_>\n        <_>\n          9 11 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 6 16 -1.</_>\n        <_>\n          5 2 3 8 2.</_>\n        <_>\n          8 10 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 6 3 -1.</_>\n        <_>\n          13 7 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 1 -1.</_>\n        <_>\n          13 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 1 8 -1.</_>\n        <_>\n          0 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 15 -1.</_>\n        <_>\n          8 5 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 2 2 -1.</_>\n        <_>\n          8 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 1 2 -1.</_>\n        <_>\n          1 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 6 11 -1.</_>\n        <_>\n          9 2 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 6 -1.</_>\n        <_>\n          9 8 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 3 -1.</_>\n        <_>\n          9 9 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 3 -1.</_>\n        <_>\n          6 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 2 8 -1.</_>\n        <_>\n          13 5 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 6 4 -1.</_>\n        <_>\n          6 2 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 20 14 -1.</_>\n        <_>\n          10 6 10 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 6 -1.</_>\n        <_>\n          8 0 6 3 2.</_>\n        <_>\n          14 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 9 -1.</_>\n        <_>\n          8 10 9 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 6 6 -1.</_>\n        <_>\n          10 14 3 3 2.</_>\n        <_>\n          13 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 10 -1.</_>\n        <_>\n          8 7 2 5 2.</_>\n        <_>\n          10 12 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 3 3 -1.</_>\n        <_>\n          15 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          16 0 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 1 -1.</_>\n        <_>\n          12 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 3 7 -1.</_>\n        <_>\n          12 7 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 2 18 -1.</_>\n        <_>\n          9 0 1 9 2.</_>\n        <_>\n          10 9 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 3 4 -1.</_>\n        <_>\n          4 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 2 2 -1.</_>\n        <_>\n          14 10 1 1 2.</_>\n        <_>\n          15 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 2 -1.</_>\n        <_>\n          5 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 4 3 -1.</_>\n        <_>\n          10 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 3 -1.</_>\n        <_>\n          12 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 2 8 -1.</_>\n        <_>\n          3 0 1 4 2.</_>\n        <_>\n          4 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 5 3 -1.</_>\n        <_>\n          14 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 1 3 -1.</_>\n        <_>\n          6 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 2 3 -1.</_>\n        <_>\n          5 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 10 6 -1.</_>\n        <_>\n          4 6 5 3 2.</_>\n        <_>\n          9 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 7 4 -1.</_>\n        <_>\n          9 16 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 2 4 -1.</_>\n        <_>\n          10 11 1 2 2.</_>\n        <_>\n          11 13 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 3 -1.</_>\n        <_>\n          5 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 3 2 -1.</_>\n        <_>\n          5 14 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 8 4 -1.</_>\n        <_>\n          7 15 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 1 -1.</_>\n        <_>\n          9 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 1 4 -1.</_>\n        <_>\n          6 3 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 6 -1.</_>\n        <_>\n          8 0 6 3 2.</_>\n        <_>\n          14 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 3 -1.</_>\n        <_>\n          8 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 3 -1.</_>\n        <_>\n          8 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 1 -1.</_>\n        <_>\n          8 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 2 2 -1.</_>\n        <_>\n          7 9 1 1 2.</_>\n        <_>\n          8 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 14 4 6 -1.</_>\n        <_>\n          15 14 2 3 2.</_>\n        <_>\n          17 17 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 1 4 -1.</_>\n        <_>\n          7 11 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 3 9 -1.</_>\n        <_>\n          11 11 1 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 3 1 -1.</_>\n        <_>\n          18 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 3 1 -1.</_>\n        <_>\n          18 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 1 2 -1.</_>\n        <_>\n          0 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 7 3 -1.</_>\n        <_>\n          9 16 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 2 2 -1.</_>\n        <_>\n          16 0 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 1 14 -1.</_>\n        <_>\n          5 7 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 1 2 -1.</_>\n        <_>\n          7 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 4 6 -1.</_>\n        <_>\n          7 2 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 2 -1.</_>\n        <_>\n          8 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 3 -1.</_>\n        <_>\n          5 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 1 2 -1.</_>\n        <_>\n          18 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 10 -1.</_>\n        <_>\n          18 0 1 5 2.</_>\n        <_>\n          19 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 13 6 -1.</_>\n        <_>\n          0 4 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 2 -1.</_>\n        <_>\n          0 0 1 1 2.</_>\n        <_>\n          1 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 4 -1.</_>\n        <_>\n          7 12 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 4 10 -1.</_>\n        <_>\n          9 9 2 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 16 -1.</_>\n        <_>\n          2 8 9 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 2 8 -1.</_>\n        <_>\n          10 3 1 4 2.</_>\n        <_>\n          11 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 12 3 -1.</_>\n        <_>\n          5 2 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 2 3 -1.</_>\n        <_>\n          5 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 10 -1.</_>\n        <_>\n          3 7 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 2 1 -1.</_>\n        <_>\n          2 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 3 5 -1.</_>\n        <_>\n          13 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 9 6 -1.</_>\n        <_>\n          6 7 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 2 3 -1.</_>\n        <_>\n          13 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 4 -1.</_>\n        <_>\n          7 15 3 2 2.</_>\n        <_>\n          10 17 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 3 -1.</_>\n        <_>\n          10 16 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 2 6 -1.</_>\n        <_>\n          3 2 1 3 2.</_>\n        <_>\n          4 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 3 5 -1.</_>\n        <_>\n          11 15 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 5 2 -1.</_>\n        <_>\n          12 10 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 10 1 -1.</_>\n        <_>\n          9 11 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 6 2 -1.</_>\n        <_>\n          6 12 3 1 2.</_>\n        <_>\n          9 13 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 1 3 -1.</_>\n        <_>\n          6 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 8 4 -1.</_>\n        <_>\n          3 12 4 2 2.</_>\n        <_>\n          7 14 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 3 1 3 -1.</_>\n        <_>\n          0 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 1 -1.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 3 6 -1.</_>\n        <_>\n          3 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 6 -1.</_>\n        <_>\n          8 9 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 1 3 -1.</_>\n        <_>\n          12 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 3 -1.</_>\n        <_>\n          12 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 2 2 -1.</_>\n        <_>\n          6 10 1 1 2.</_>\n        <_>\n          7 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 9 6 -1.</_>\n        <_>\n          3 13 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 7 10 -1.</_>\n        <_>\n          4 13 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 11 3 -1.</_>\n        <_>\n          6 9 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 1 14 -1.</_>\n        <_>\n          6 12 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 5 10 -1.</_>\n        <_>\n          13 11 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 13 15 -1.</_>\n        <_>\n          2 5 13 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 2 -1.</_>\n        <_>\n          7 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 9 4 -1.</_>\n        <_>\n          7 5 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 3 -1.</_>\n        <_>\n          7 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 4 -1.</_>\n        <_>\n          9 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 7 2 -1.</_>\n        <_>\n          8 12 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 2 -1.</_>\n        <_>\n          5 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 2 6 -1.</_>\n        <_>\n          4 14 1 3 2.</_>\n        <_>\n          5 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 13 -1.</_>\n        <_>\n          4 7 4 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 9 -1.</_>\n        <_>\n          8 3 2 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 3 -1.</_>\n        <_>\n          9 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 14 2 6 -1.</_>\n        <_>\n          16 14 1 3 2.</_>\n        <_>\n          17 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 2 3 -1.</_>\n        <_>\n          11 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 1 2 -1.</_>\n        <_>\n          11 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 2 -1.</_>\n        <_>\n          8 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 5 -1.</_>\n        <_>\n          14 1 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 8 2 -1.</_>\n        <_>\n          6 15 4 1 2.</_>\n        <_>\n          10 16 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 2 3 4 -1.</_>\n        <_>\n          14 2 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 1 6 -1.</_>\n        <_>\n          1 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 2 -1.</_>\n        <_>\n          12 0 4 1 2.</_>\n        <_>\n          16 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 3 1 -1.</_>\n        <_>\n          6 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 2 4 -1.</_>\n        <_>\n          8 5 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 1 -1.</_>\n        <_>\n          8 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 2 3 -1.</_>\n        <_>\n          0 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 17 2 2 -1.</_>\n        <_>\n          3 17 1 1 2.</_>\n        <_>\n          4 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 9 -1.</_>\n        <_>\n          12 0 6 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 12 3 -1.</_>\n        <_>\n          11 0 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 6 -1.</_>\n        <_>\n          14 0 3 3 2.</_>\n        <_>\n          17 3 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 1 2 -1.</_>\n        <_>\n          15 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 1 6 -1.</_>\n        <_>\n          8 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 2 -1.</_>\n        <_>\n          6 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 4 6 -1.</_>\n        <_>\n          6 10 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 10 2 -1.</_>\n        <_>\n          13 6 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 1 4 15 -1.</_>\n        <_>\n          4 1 2 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 6 -1.</_>\n        <_>\n          5 12 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 1 -1.</_>\n        <_>\n          13 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 6 2 -1.</_>\n        <_>\n          8 4 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 4 8 -1.</_>\n        <_>\n          12 13 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 2 4 -1.</_>\n        <_>\n          15 10 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 3 3 -1.</_>\n        <_>\n          6 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 3 -1.</_>\n        <_>\n          6 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 6 -1.</_>\n        <_>\n          7 10 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 2 9 -1.</_>\n        <_>\n          7 11 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 4 3 -1.</_>\n        <_>\n          5 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 2 -1.</_>\n        <_>\n          11 12 1 1 2.</_>\n        <_>\n          12 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 5 3 -1.</_>\n        <_>\n          5 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 8 1 -1.</_>\n        <_>\n          8 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 6 -1.</_>\n        <_>\n          12 0 4 3 2.</_>\n        <_>\n          16 3 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 3 -1.</_>\n        <_>\n          9 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 7 15 -1.</_>\n        <_>\n          8 5 7 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 8 4 -1.</_>\n        <_>\n          3 0 4 2 2.</_>\n        <_>\n          7 2 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 20 1 -1.</_>\n        <_>\n          10 11 10 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 3 2 -1.</_>\n        <_>\n          4 14 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 3 8 -1.</_>\n        <_>\n          4 11 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 5 -1.</_>\n        <_>\n          8 13 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 3 3 -1.</_>\n        <_>\n          14 5 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 3 -1.</_>\n        <_>\n          5 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 1 2 -1.</_>\n        <_>\n          6 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 3 1 -1.</_>\n        <_>\n          6 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 1 3 -1.</_>\n        <_>\n          12 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 1 3 -1.</_>\n        <_>\n          5 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 9 12 9 -1.</_>\n        <_>\n          1 12 12 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 3 3 -1.</_>\n        <_>\n          12 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 5 3 -1.</_>\n        <_>\n          10 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          5 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 6 -1.</_>\n        <_>\n          5 14 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 14 -1.</_>\n        <_>\n          6 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 5 2 -1.</_>\n        <_>\n          2 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 1 2 -1.</_>\n        <_>\n          10 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 4 6 -1.</_>\n        <_>\n          7 16 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 1 -1.</_>\n        <_>\n          9 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 1 -1.</_>\n        <_>\n          5 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 3 4 -1.</_>\n        <_>\n          4 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 8 -1.</_>\n        <_>\n          4 8 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 2 2 -1.</_>\n        <_>\n          12 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 2 2 -1.</_>\n        <_>\n          16 10 1 1 2.</_>\n        <_>\n          17 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 1 -1.</_>\n        <_>\n          1 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 5 8 -1.</_>\n        <_>\n          7 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 10 -1.</_>\n        <_>\n          4 5 4 5 2.</_>\n        <_>\n          8 10 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 3 -1.</_>\n        <_>\n          7 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 10 14 -1.</_>\n        <_>\n          10 13 10 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 2 3 -1.</_>\n        <_>\n          8 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 1 4 -1.</_>\n        <_>\n          13 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 12 4 -1.</_>\n        <_>\n          3 9 6 2 2.</_>\n        <_>\n          9 11 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 3 6 -1.</_>\n        <_>\n          7 16 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 3 2 -1.</_>\n        <_>\n          11 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 10 4 -1.</_>\n        <_>\n          3 4 5 2 2.</_>\n        <_>\n          8 6 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 3 -1.</_>\n        <_>\n          4 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 4 -1.</_>\n        <_>\n          5 3 3 2 2.</_>\n        <_>\n          8 5 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 10 -1.</_>\n        <_>\n          9 8 3 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 3 -1.</_>\n        <_>\n          10 16 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 3 7 -1.</_>\n        <_>\n          4 4 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 3 11 -1.</_>\n        <_>\n          4 3 1 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 5 3 -1.</_>\n        <_>\n          7 15 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 2 2 -1.</_>\n        <_>\n          17 11 1 1 2.</_>\n        <_>\n          18 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 3 4 -1.</_>\n        <_>\n          10 0 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 1 -1.</_>\n        <_>\n          12 1 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 2 2 -1.</_>\n        <_>\n          17 11 1 1 2.</_>\n        <_>\n          18 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 10 2 1 -1.</_>\n        <_>\n          1 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 2 8 -1.</_>\n        <_>\n          17 0 1 4 2.</_>\n        <_>\n          18 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 2 -1.</_>\n        <_>\n          8 7 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 9 -1.</_>\n        <_>\n          8 7 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 9 3 -1.</_>\n        <_>\n          9 8 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 6 4 -1.</_>\n        <_>\n          13 7 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 2 -1.</_>\n        <_>\n          9 5 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 4 10 -1.</_>\n        <_>\n          15 8 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 1 2 -1.</_>\n        <_>\n          9 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 8 2 -1.</_>\n        <_>\n          7 15 4 1 2.</_>\n        <_>\n          11 16 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 9 -1.</_>\n        <_>\n          7 5 1 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 4 -1.</_>\n        <_>\n          7 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 2 4 -1.</_>\n        <_>\n          11 15 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 7 4 -1.</_>\n        <_>\n          12 11 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 9 3 -1.</_>\n        <_>\n          8 9 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 5 -1.</_>\n        <_>\n          8 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 4 3 -1.</_>\n        <_>\n          7 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 4 3 -1.</_>\n        <_>\n          15 5 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 2 2 -1.</_>\n        <_>\n          16 10 1 1 2.</_>\n        <_>\n          17 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 9 -1.</_>\n        <_>\n          8 6 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 6 -1.</_>\n        <_>\n          10 0 5 3 2.</_>\n        <_>\n          15 3 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 1 2 -1.</_>\n        <_>\n          13 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 3 1 -1.</_>\n        <_>\n          11 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 1 3 -1.</_>\n        <_>\n          6 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 4 3 -1.</_>\n        <_>\n          11 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 6 -1.</_>\n        <_>\n          14 10 3 3 2.</_>\n        <_>\n          17 13 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 1 2 -1.</_>\n        <_>\n          1 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 1 3 -1.</_>\n        <_>\n          6 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 1 3 -1.</_>\n        <_>\n          7 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 3 2 -1.</_>\n        <_>\n          9 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 3 9 -1.</_>\n        <_>\n          6 8 1 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 2 10 -1.</_>\n        <_>\n          3 3 1 5 2.</_>\n        <_>\n          4 8 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 3 1 -1.</_>\n        <_>\n          4 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 2 1 -1.</_>\n        <_>\n          3 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 3 -1.</_>\n        <_>\n          7 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 1 9 -1.</_>\n        <_>\n          7 12 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 1 9 -1.</_>\n        <_>\n          7 11 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 3 10 -1.</_>\n        <_>\n          16 7 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 7 6 10 -1.</_>\n        <_>\n          16 7 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 18 6 -1.</_>\n        <_>\n          2 14 18 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 12 1 -1.</_>\n        <_>\n          4 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 3 6 -1.</_>\n        <_>\n          2 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 8 1 -1.</_>\n        <_>\n          9 6 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 1 -1.</_>\n        <_>\n          11 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 6 10 -1.</_>\n        <_>\n          16 8 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 7 -1.</_>\n        <_>\n          14 5 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 8 4 -1.</_>\n        <_>\n          8 5 4 2 2.</_>\n        <_>\n          12 7 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 1 8 -1.</_>\n        <_>\n          11 15 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 4 -1.</_>\n        <_>\n          6 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 2 2 -1.</_>\n        <_>\n          7 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 11 -1.</_>\n        <_>\n          4 2 4 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 8 8 -1.</_>\n        <_>\n          8 10 8 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 2 6 -1.</_>\n        <_>\n          5 4 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 1 2 -1.</_>\n        <_>\n          13 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 3 2 -1.</_>\n        <_>\n          4 8 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 1 3 -1.</_>\n        <_>\n          13 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 19 4 1 -1.</_>\n        <_>\n          11 19 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 2 3 -1.</_>\n        <_>\n          15 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 11 4 -1.</_>\n        <_>\n          5 13 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 1 3 -1.</_>\n        <_>\n          7 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 4 4 -1.</_>\n        <_>\n          6 14 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 1 3 -1.</_>\n        <_>\n          7 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 3 -1.</_>\n        <_>\n          10 10 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 1 -1.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 12 16 -1.</_>\n        <_>\n          7 1 6 8 2.</_>\n        <_>\n          13 9 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 8 7 -1.</_>\n        <_>\n          14 5 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 8 2 10 -1.</_>\n        <_>\n          18 8 1 5 2.</_>\n        <_>\n          19 13 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 2 -1.</_>\n        <_>\n          13 11 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 3 1 -1.</_>\n        <_>\n          4 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 2 1 -1.</_>\n        <_>\n          6 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 1 2 -1.</_>\n        <_>\n          11 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 3 1 -1.</_>\n        <_>\n          11 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 7 2 -1.</_>\n        <_>\n          5 10 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 1 -1.</_>\n        <_>\n          12 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 2 2 -1.</_>\n        <_>\n          12 0 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 2 -1.</_>\n        <_>\n          5 0 1 1 2.</_>\n        <_>\n          6 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 12 6 -1.</_>\n        <_>\n          8 5 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 12 -1.</_>\n        <_>\n          18 0 1 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 2 1 -1.</_>\n        <_>\n          12 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 1 -1.</_>\n        <_>\n          6 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 6 -1.</_>\n        <_>\n          7 14 3 3 2.</_>\n        <_>\n          10 17 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 1 2 -1.</_>\n        <_>\n          11 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 12 4 -1.</_>\n        <_>\n          3 9 6 2 2.</_>\n        <_>\n          9 11 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 2 -1.</_>\n        <_>\n          5 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 2 1 -1.</_>\n        <_>\n          7 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 3 2 -1.</_>\n        <_>\n          9 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 3 2 -1.</_>\n        <_>\n          8 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 2 1 -1.</_>\n        <_>\n          9 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 3 -1.</_>\n        <_>\n          5 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 4 12 -1.</_>\n        <_>\n          8 7 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 7 -1.</_>\n        <_>\n          8 6 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 11 -1.</_>\n        <_>\n          11 4 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 3 -1.</_>\n        <_>\n          9 9 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 1 2 -1.</_>\n        <_>\n          0 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 3 1 -1.</_>\n        <_>\n          7 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 2 2 -1.</_>\n        <_>\n          13 1 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 10 12 -1.</_>\n        <_>\n          4 4 5 6 2.</_>\n        <_>\n          9 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 2 2 -1.</_>\n        <_>\n          5 18 1 1 2.</_>\n        <_>\n          6 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 3 3 -1.</_>\n        <_>\n          7 3 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 2 3 -1.</_>\n        <_>\n          5 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 2 3 -1.</_>\n        <_>\n          11 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 1 3 -1.</_>\n        <_>\n          11 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 2 -1.</_>\n        <_>\n          7 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 14 1 -1.</_>\n        <_>\n          10 11 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 1 -1.</_>\n        <_>\n          6 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 3 3 -1.</_>\n        <_>\n          14 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 17 2 2 -1.</_>\n        <_>\n          4 17 1 1 2.</_>\n        <_>\n          5 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 16 2 2 -1.</_>\n        <_>\n          15 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 12 2 2 -1.</_>\n        <_>\n          18 12 1 1 2.</_>\n        <_>\n          19 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 3 -1.</_>\n        <_>\n          7 11 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 3 -1.</_>\n        <_>\n          9 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 2 -1.</_>\n        <_>\n          18 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 2 -1.</_>\n        <_>\n          18 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 2 6 -1.</_>\n        <_>\n          4 7 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 6 4 -1.</_>\n        <_>\n          3 11 3 2 2.</_>\n        <_>\n          6 13 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 3 3 -1.</_>\n        <_>\n          2 10 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 4 -1.</_>\n        <_>\n          15 0 2 2 2.</_>\n        <_>\n          17 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 10 -1.</_>\n        <_>\n          5 11 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 1 3 -1.</_>\n        <_>\n          7 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 4 -1.</_>\n        <_>\n          3 10 8 2 2.</_>\n        <_>\n          11 12 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 1 3 -1.</_>\n        <_>\n          7 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 3 3 -1.</_>\n        <_>\n          5 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 8 -1.</_>\n        <_>\n          10 9 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 7 4 -1.</_>\n        <_>\n          6 2 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 1 4 -1.</_>\n        <_>\n          8 2 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 1 6 -1.</_>\n        <_>\n          1 6 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 15 3 -1.</_>\n        <_>\n          5 2 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 2 2 -1.</_>\n        <_>\n          0 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 4 -1.</_>\n        <_>\n          5 10 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 1 -1.</_>\n        <_>\n          9 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 2 2 -1.</_>\n        <_>\n          15 11 1 1 2.</_>\n        <_>\n          16 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 6 2 -1.</_>\n        <_>\n          7 11 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 6 4 -1.</_>\n        <_>\n          8 8 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 6 -1.</_>\n        <_>\n          8 5 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 2 3 -1.</_>\n        <_>\n          15 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 3 7 -1.</_>\n        <_>\n          12 5 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 8 4 -1.</_>\n        <_>\n          7 16 4 2 2.</_>\n        <_>\n          11 18 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 12 4 -1.</_>\n        <_>\n          5 16 6 2 2.</_>\n        <_>\n          11 18 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 6 3 -1.</_>\n        <_>\n          10 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 3 -1.</_>\n        <_>\n          6 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 20 18 -1.</_>\n        <_>\n          10 0 10 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 5 -1.</_>\n        <_>\n          11 0 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 4 2 -1.</_>\n        <_>\n          13 5 2 1 2.</_>\n        <_>\n          15 6 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 11 -1.</_>\n        <_>\n          12 4 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 3 1 -1.</_>\n        <_>\n          6 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 2 3 -1.</_>\n        <_>\n          17 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 8 6 -1.</_>\n        <_>\n          6 13 4 3 2.</_>\n        <_>\n          10 16 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 3 10 -1.</_>\n        <_>\n          18 5 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 2 2 -1.</_>\n        <_>\n          14 11 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 9 -1.</_>\n        <_>\n          5 12 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 3 -1.</_>\n        <_>\n          5 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 2 2 -1.</_>\n        <_>\n          15 15 1 1 2.</_>\n        <_>\n          16 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 6 5 -1.</_>\n        <_>\n          8 13 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 8 -1.</_>\n        <_>\n          9 7 1 4 2.</_>\n        <_>\n          10 11 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 2 2 -1.</_>\n        <_>\n          4 12 1 1 2.</_>\n        <_>\n          5 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 1 -1.</_>\n        <_>\n          8 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 3 4 -1.</_>\n        <_>\n          13 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 20 -1.</_>\n        <_>\n          2 10 18 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 7 12 -1.</_>\n        <_>\n          11 8 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 2 -1.</_>\n        <_>\n          14 5 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 17 4 1 -1.</_>\n        <_>\n          6 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 4 4 -1.</_>\n        <_>\n          5 14 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 8 18 -1.</_>\n        <_>\n          0 11 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 3 -1.</_>\n        <_>\n          5 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 2 -1.</_>\n        <_>\n          9 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 15 4 -1.</_>\n        <_>\n          5 9 15 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 8 -1.</_>\n        <_>\n          10 0 5 4 2.</_>\n        <_>\n          15 4 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 4 4 -1.</_>\n        <_>\n          10 8 2 2 2.</_>\n        <_>\n          12 10 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 10 -1.</_>\n        <_>\n          5 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 4 -1.</_>\n        <_>\n          8 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 2 2 -1.</_>\n        <_>\n          12 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 12 -1.</_>\n        <_>\n          7 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 6 18 -1.</_>\n        <_>\n          2 0 2 18 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 10 6 -1.</_>\n        <_>\n          6 3 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 3 2 -1.</_>\n        <_>\n          13 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 1 10 -1.</_>\n        <_>\n          6 15 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 4 -1.</_>\n        <_>\n          9 11 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 2 -1.</_>\n        <_>\n          7 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 1 -1.</_>\n        <_>\n          13 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 1 3 -1.</_>\n        <_>\n          7 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          5 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 1 2 -1.</_>\n        <_>\n          1 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 6 3 -1.</_>\n        <_>\n          10 17 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 4 6 -1.</_>\n        <_>\n          9 4 2 3 2.</_>\n        <_>\n          11 7 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 10 1 -1.</_>\n        <_>\n          15 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 1 2 -1.</_>\n        <_>\n          9 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 6 -1.</_>\n        <_>\n          7 10 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 18 8 2 -1.</_>\n        <_>\n          1 18 4 1 2.</_>\n        <_>\n          5 19 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 3 3 -1.</_>\n        <_>\n          5 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 5 6 -1.</_>\n        <_>\n          4 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 1 -1.</_>\n        <_>\n          7 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 1 6 -1.</_>\n        <_>\n          11 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 4 3 -1.</_>\n        <_>\n          6 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 2 10 -1.</_>\n        <_>\n          10 4 1 5 2.</_>\n        <_>\n          11 9 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 9 13 -1.</_>\n        <_>\n          11 4 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 2 2 -1.</_>\n        <_>\n          11 11 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 15 1 2 -1.</_>\n        <_>\n          13 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 14 10 -1.</_>\n        <_>\n          0 5 14 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 15 -1.</_>\n        <_>\n          14 5 2 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 2 3 -1.</_>\n        <_>\n          11 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 3 3 -1.</_>\n        <_>\n          5 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 3 2 -1.</_>\n        <_>\n          5 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 3 6 -1.</_>\n        <_>\n          12 14 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 18 2 1 -1.</_>\n        <_>\n          13 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 1 2 -1.</_>\n        <_>\n          16 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 8 3 4 -1.</_>\n        <_>\n          18 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 2 3 -1.</_>\n        <_>\n          9 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 4 -1.</_>\n        <_>\n          6 7 1 2 2.</_>\n        <_>\n          7 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 12 2 -1.</_>\n        <_>\n          7 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 3 -1.</_>\n        <_>\n          5 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 2 1 -1.</_>\n        <_>\n          2 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 2 5 -1.</_>\n        <_>\n          5 4 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 14 2 -1.</_>\n        <_>\n          13 7 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 17 2 3 -1.</_>\n        <_>\n          14 18 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 1 3 -1.</_>\n        <_>\n          6 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 8 16 -1.</_>\n        <_>\n          11 11 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 5 3 -1.</_>\n        <_>\n          9 13 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 1 3 -1.</_>\n        <_>\n          5 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 8 4 -1.</_>\n        <_>\n          3 8 4 2 2.</_>\n        <_>\n          7 10 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 2 3 -1.</_>\n        <_>\n          10 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 1 6 -1.</_>\n        <_>\n          14 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 1 3 -1.</_>\n        <_>\n          13 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 6 -1.</_>\n        <_>\n          8 9 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 4 3 -1.</_>\n        <_>\n          9 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 2 5 -1.</_>\n        <_>\n          9 2 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 3 3 -1.</_>\n        <_>\n          13 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 5 14 -1.</_>\n        <_>\n          12 7 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 7 10 -1.</_>\n        <_>\n          2 7 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 6 11 -1.</_>\n        <_>\n          8 5 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 3 3 -1.</_>\n        <_>\n          6 18 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 8 -1.</_>\n        <_>\n          9 5 1 4 2.</_>\n        <_>\n          10 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 4 16 -1.</_>\n        <_>\n          14 8 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 1 3 -1.</_>\n        <_>\n          10 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 3 2 -1.</_>\n        <_>\n          8 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 1 3 -1.</_>\n        <_>\n          10 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 14 6 -1.</_>\n        <_>\n          5 14 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 1 3 -1.</_>\n        <_>\n          9 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 5 4 -1.</_>\n        <_>\n          6 13 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 10 8 -1.</_>\n        <_>\n          6 9 5 4 2.</_>\n        <_>\n          11 13 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 9 2 6 -1.</_>\n        <_>\n          18 9 1 3 2.</_>\n        <_>\n          19 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 8 2 -1.</_>\n        <_>\n          9 12 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 12 -1.</_>\n        <_>\n          8 8 3 6 2.</_>\n        <_>\n          11 14 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 5 -1.</_>\n        <_>\n          13 7 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 4 3 -1.</_>\n        <_>\n          10 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 4 3 15 -1.</_>\n        <_>\n          13 4 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 4 2 -1.</_>\n        <_>\n          6 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 6 1 -1.</_>\n        <_>\n          16 1 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 3 2 8 -1.</_>\n        <_>\n          16 3 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 16 6 4 -1.</_>\n        <_>\n          13 16 3 2 2.</_>\n        <_>\n          16 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 6 7 -1.</_>\n        <_>\n          12 5 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 2 -1.</_>\n        <_>\n          18 4 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 4 -1.</_>\n        <_>\n          11 0 9 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 2 2 -1.</_>\n        <_>\n          1 8 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 3 6 -1.</_>\n        <_>\n          5 12 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 4 2 -1.</_>\n        <_>\n          5 13 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 11 2 -1.</_>\n        <_>\n          4 15 11 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 8 3 -1.</_>\n        <_>\n          4 14 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 6 10 -1.</_>\n        <_>\n          3 7 3 5 2.</_>\n        <_>\n          6 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 4 -1.</_>\n        <_>\n          7 7 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 10 6 -1.</_>\n        <_>\n          2 14 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 9 12 -1.</_>\n        <_>\n          5 13 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 7 4 -1.</_>\n        <_>\n          9 14 7 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 8 4 -1.</_>\n        <_>\n          2 0 4 2 2.</_>\n        <_>\n          6 2 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 4 -1.</_>\n        <_>\n          4 0 2 2 2.</_>\n        <_>\n          6 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 3 2 -1.</_>\n        <_>\n          7 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 3 4 -1.</_>\n        <_>\n          3 11 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 17 2 1 -1.</_>\n        <_>\n          2 17 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 4 3 -1.</_>\n        <_>\n          15 13 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 15 7 3 -1.</_>\n        <_>\n          9 16 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 2 -1.</_>\n        <_>\n          7 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 12 10 -1.</_>\n        <_>\n          3 5 6 5 2.</_>\n        <_>\n          9 10 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 12 5 -1.</_>\n        <_>\n          10 2 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 1 -1.</_>\n        <_>\n          10 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 3 4 -1.</_>\n        <_>\n          3 10 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 2 10 -1.</_>\n        <_>\n          11 10 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 7 8 -1.</_>\n        <_>\n          8 10 7 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 8 4 -1.</_>\n        <_>\n          6 8 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 9 2 2 -1.</_>\n        <_>\n          1 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 4 2 -1.</_>\n        <_>\n          15 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 12 5 -1.</_>\n        <_>\n          12 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 9 1 -1.</_>\n        <_>\n          14 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 2 4 -1.</_>\n        <_>\n          15 10 1 2 2.</_>\n        <_>\n          16 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 1 3 -1.</_>\n        <_>\n          18 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 7 3 -1.</_>\n        <_>\n          4 11 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 1 -1.</_>\n        <_>\n          9 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 3 -1.</_>\n        <_>\n          7 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 3 3 -1.</_>\n        <_>\n          7 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 3 3 -1.</_>\n        <_>\n          7 16 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 15 1 3 -1.</_>\n        <_>\n          14 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 10 6 -1.</_>\n        <_>\n          2 17 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 5 3 -1.</_>\n        <_>\n          5 13 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 1 6 -1.</_>\n        <_>\n          7 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 5 6 -1.</_>\n        <_>\n          0 8 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 3 4 -1.</_>\n        <_>\n          6 12 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 9 2 -1.</_>\n        <_>\n          4 10 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 1 2 -1.</_>\n        <_>\n          7 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 4 4 -1.</_>\n        <_>\n          8 11 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 3 1 -1.</_>\n        <_>\n          12 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 2 -1.</_>\n        <_>\n          5 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 6 -1.</_>\n        <_>\n          7 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 4 -1.</_>\n        <_>\n          6 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 9 12 -1.</_>\n        <_>\n          14 1 3 12 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 4 9 -1.</_>\n        <_>\n          6 10 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 8 6 -1.</_>\n        <_>\n          11 7 4 3 2.</_>\n        <_>\n          15 10 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 7 3 -1.</_>\n        <_>\n          8 10 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 4 18 -1.</_>\n        <_>\n          5 2 2 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 3 -1.</_>\n        <_>\n          6 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 8 6 -1.</_>\n        <_>\n          6 11 4 3 2.</_>\n        <_>\n          10 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 4 7 -1.</_>\n        <_>\n          7 9 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 5 -1.</_>\n        <_>\n          8 8 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 1 3 -1.</_>\n        <_>\n          7 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 3 1 -1.</_>\n        <_>\n          16 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 2 -1.</_>\n        <_>\n          10 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 2 1 -1.</_>\n        <_>\n          12 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 2 -1.</_>\n        <_>\n          6 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 2 12 -1.</_>\n        <_>\n          11 2 1 6 2.</_>\n        <_>\n          12 8 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 6 -1.</_>\n        <_>\n          7 3 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 4 2 -1.</_>\n        <_>\n          4 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 1 2 -1.</_>\n        <_>\n          14 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 4 -1.</_>\n        <_>\n          4 0 1 2 2.</_>\n        <_>\n          5 2 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 2 1 -1.</_>\n        <_>\n          16 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 3 1 -1.</_>\n        <_>\n          4 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 10 4 -1.</_>\n        <_>\n          5 11 5 2 2.</_>\n        <_>\n          10 13 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 12 3 -1.</_>\n        <_>\n          4 11 12 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 4 6 -1.</_>\n        <_>\n          15 2 2 3 2.</_>\n        <_>\n          17 5 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 1 4 -1.</_>\n        <_>\n          5 10 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 2 -1.</_>\n        <_>\n          7 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 19 2 1 -1.</_>\n        <_>\n          12 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 2 -1.</_>\n        <_>\n          7 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 1 -1.</_>\n        <_>\n          7 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 2 -1.</_>\n        <_>\n          7 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 2 -1.</_>\n        <_>\n          6 8 1 1 2.</_>\n        <_>\n          7 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 2 -1.</_>\n        <_>\n          7 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 2 4 -1.</_>\n        <_>\n          4 8 1 2 2.</_>\n        <_>\n          5 10 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 7 3 -1.</_>\n        <_>\n          10 5 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 2 6 -1.</_>\n        <_>\n          5 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 1 3 -1.</_>\n        <_>\n          10 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 6 3 -1.</_>\n        <_>\n          9 11 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 3 2 -1.</_>\n        <_>\n          10 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 2 -1.</_>\n        <_>\n          10 8 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 12 3 1 -1.</_>\n        <_>\n          18 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 11 16 -1.</_>\n        <_>\n          9 8 11 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 6 -1.</_>\n        <_>\n          17 2 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 1 2 -1.</_>\n        <_>\n          0 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          5 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 10 9 -1.</_>\n        <_>\n          4 13 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 3 5 -1.</_>\n        <_>\n          4 3 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 2 6 -1.</_>\n        <_>\n          6 3 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 8 6 -1.</_>\n        <_>\n          5 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 1 2 -1.</_>\n        <_>\n          0 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 6 4 -1.</_>\n        <_>\n          8 3 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 3 -1.</_>\n        <_>\n          8 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 3 6 -1.</_>\n        <_>\n          9 8 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 12 12 -1.</_>\n        <_>\n          4 3 6 6 2.</_>\n        <_>\n          10 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 3 2 -1.</_>\n        <_>\n          13 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 10 2 -1.</_>\n        <_>\n          9 3 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 14 2 2 -1.</_>\n        <_>\n          18 14 1 1 2.</_>\n        <_>\n          19 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 6 2 -1.</_>\n        <_>\n          8 6 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 20 5 -1.</_>\n        <_>\n          10 14 10 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 2 1 -1.</_>\n        <_>\n          10 17 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 5 3 -1.</_>\n        <_>\n          5 17 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 3 2 -1.</_>\n        <_>\n          10 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 5 3 -1.</_>\n        <_>\n          6 6 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 3 8 -1.</_>\n        <_>\n          12 12 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 9 -1.</_>\n        <_>\n          4 6 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 3 -1.</_>\n        <_>\n          12 0 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 10 2 -1.</_>\n        <_>\n          5 17 5 1 2.</_>\n        <_>\n          10 18 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 2 3 -1.</_>\n        <_>\n          5 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 2 4 -1.</_>\n        <_>\n          6 14 1 2 2.</_>\n        <_>\n          7 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 6 3 -1.</_>\n        <_>\n          10 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 5 1 3 -1.</_>\n        <_>\n          19 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 13 2 2 -1.</_>\n        <_>\n          16 13 1 1 2.</_>\n        <_>\n          17 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 2 1 -1.</_>\n        <_>\n          1 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 6 6 -1.</_>\n        <_>\n          4 12 3 3 2.</_>\n        <_>\n          7 15 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 15 4 3 -1.</_>\n        <_>\n          5 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 3 2 -1.</_>\n        <_>\n          11 16 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 10 2 -1.</_>\n        <_>\n          1 0 5 1 2.</_>\n        <_>\n          6 1 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 14 -1.</_>\n        <_>\n          11 0 9 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 4 7 -1.</_>\n        <_>\n          17 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 4 -1.</_>\n        <_>\n          6 10 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 16 3 1 -1.</_>\n        <_>\n          16 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 5 3 -1.</_>\n        <_>\n          7 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 6 3 -1.</_>\n        <_>\n          14 1 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 2 2 1 -1.</_>\n        <_>\n          17 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 2 2 -1.</_>\n        <_>\n          17 0 1 1 2.</_>\n        <_>\n          18 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 4 6 -1.</_>\n        <_>\n          1 2 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 6 18 -1.</_>\n        <_>\n          3 7 6 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 1 12 -1.</_>\n        <_>\n          5 7 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 2 2 -1.</_>\n        <_>\n          16 9 1 1 2.</_>\n        <_>\n          17 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 11 -1.</_>\n        <_>\n          5 2 1 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 1 -1.</_>\n        <_>\n          5 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 18 2 2 -1.</_>\n        <_>\n          14 19 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 10 -1.</_>\n        <_>\n          10 0 5 5 2.</_>\n        <_>\n          15 5 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 6 1 2 -1.</_>\n        <_>\n          19 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 8 -1.</_>\n        <_>\n          11 0 3 4 2.</_>\n        <_>\n          14 4 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 2 -1.</_>\n        <_>\n          5 0 1 1 2.</_>\n        <_>\n          6 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 1 9 11 -1.</_>\n        <_>\n          6 1 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 3 2 -1.</_>\n        <_>\n          10 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 4 2 -1.</_>\n        <_>\n          12 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 1 6 -1.</_>\n        <_>\n          13 9 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 6 2 -1.</_>\n        <_>\n          8 10 3 1 2.</_>\n        <_>\n          11 11 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 4 6 -1.</_>\n        <_>\n          4 14 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 2 3 -1.</_>\n        <_>\n          17 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 8 14 -1.</_>\n        <_>\n          10 2 4 7 2.</_>\n        <_>\n          14 9 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 8 7 -1.</_>\n        <_>\n          16 8 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 18 1 -1.</_>\n        <_>\n          7 2 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 8 19 -1.</_>\n        <_>\n          4 1 4 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 8 12 -1.</_>\n        <_>\n          4 0 4 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 5 12 -1.</_>\n        <_>\n          13 11 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 1 4 -1.</_>\n        <_>\n          7 11 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 10 3 -1.</_>\n        <_>\n          5 13 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 7 12 4 -1.</_>\n        <_>\n          6 7 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 2 6 -1.</_>\n        <_>\n          9 1 1 3 2.</_>\n        <_>\n          10 4 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 3 3 -1.</_>\n        <_>\n          7 8 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 1 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 2 -1.</_>\n        <_>\n          5 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 4 1 -1.</_>\n        <_>\n          2 17 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 16 2 1 -1.</_>\n        <_>\n          2 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 2 3 -1.</_>\n        <_>\n          7 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 2 -1.</_>\n        <_>\n          10 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 3 1 -1.</_>\n        <_>\n          17 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 3 2 -1.</_>\n        <_>\n          17 10 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 1 -1.</_>\n        <_>\n          8 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 5 3 -1.</_>\n        <_>\n          14 5 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 2 3 -1.</_>\n        <_>\n          8 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 7 -1.</_>\n        <_>\n          8 7 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 6 -1.</_>\n        <_>\n          4 2 1 3 2.</_>\n        <_>\n          5 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 2 3 -1.</_>\n        <_>\n          4 10 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 7 12 -1.</_>\n        <_>\n          8 10 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 10 -1.</_>\n        <_>\n          8 10 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 5 -1.</_>\n        <_>\n          5 3 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 1 -1.</_>\n        <_>\n          10 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 3 4 -1.</_>\n        <_>\n          4 8 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 3 3 -1.</_>\n        <_>\n          13 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 2 3 -1.</_>\n        <_>\n          2 14 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 4 -1.</_>\n        <_>\n          5 0 1 2 2.</_>\n        <_>\n          6 2 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 4 3 -1.</_>\n        <_>\n          5 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 6 -1.</_>\n        <_>\n          6 12 1 3 2.</_>\n        <_>\n          7 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 2 2 -1.</_>\n        <_>\n          7 13 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 4 5 -1.</_>\n        <_>\n          11 10 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 2 1 -1.</_>\n        <_>\n          12 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 2 -1.</_>\n        <_>\n          6 7 1 1 2.</_>\n        <_>\n          7 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 6 5 -1.</_>\n        <_>\n          7 3 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 8 -1.</_>\n        <_>\n          7 6 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 3 -1.</_>\n        <_>\n          7 7 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 4 -1.</_>\n        <_>\n          10 12 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 3 1 -1.</_>\n        <_>\n          17 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 3 3 -1.</_>\n        <_>\n          13 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 4 2 -1.</_>\n        <_>\n          7 13 2 1 2.</_>\n        <_>\n          9 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 1 2 -1.</_>\n        <_>\n          10 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 3 -1.</_>\n        <_>\n          9 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 3 -1.</_>\n        <_>\n          9 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 8 1 -1.</_>\n        <_>\n          13 6 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 3 2 -1.</_>\n        <_>\n          6 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 3 -1.</_>\n        <_>\n          6 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 2 6 -1.</_>\n        <_>\n          12 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 2 -1.</_>\n        <_>\n          7 0 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 4 6 -1.</_>\n        <_>\n          9 7 2 3 2.</_>\n        <_>\n          11 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 2 4 -1.</_>\n        <_>\n          13 10 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 1 2 -1.</_>\n        <_>\n          13 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 18 2 2 -1.</_>\n        <_>\n          14 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 4 2 1 -1.</_>\n        <_>\n          16 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 3 -1.</_>\n        <_>\n          7 7 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 8 3 -1.</_>\n        <_>\n          9 8 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 6 3 -1.</_>\n        <_>\n          9 12 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 3 6 -1.</_>\n        <_>\n          13 14 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 9 2 8 -1.</_>\n        <_>\n          18 9 1 4 2.</_>\n        <_>\n          19 13 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 7 3 -1.</_>\n        <_>\n          5 6 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 2 -1.</_>\n        <_>\n          10 13 1 1 2.</_>\n        <_>\n          11 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 3 -1.</_>\n        <_>\n          6 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 4 2 -1.</_>\n        <_>\n          9 13 2 1 2.</_>\n        <_>\n          11 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 1 3 -1.</_>\n        <_>\n          7 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 6 -1.</_>\n        <_>\n          7 12 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 4 4 -1.</_>\n        <_>\n          13 10 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 18 -1.</_>\n        <_>\n          8 9 12 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 9 2 10 -1.</_>\n        <_>\n          18 9 1 5 2.</_>\n        <_>\n          19 14 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 3 6 -1.</_>\n        <_>\n          14 5 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 3 14 -1.</_>\n        <_>\n          11 0 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 8 4 -1.</_>\n        <_>\n          6 16 4 2 2.</_>\n        <_>\n          10 18 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 5 12 -1.</_>\n        <_>\n          5 7 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 6 3 -1.</_>\n        <_>\n          4 16 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 1 3 -1.</_>\n        <_>\n          6 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 2 1 -1.</_>\n        <_>\n          14 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 18 9 -1.</_>\n        <_>\n          11 2 9 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 2 4 -1.</_>\n        <_>\n          4 16 1 2 2.</_>\n        <_>\n          5 18 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 1 3 8 -1.</_>\n        <_>\n          16 1 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 3 -1.</_>\n        <_>\n          11 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 4 -1.</_>\n        <_>\n          9 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 8 4 -1.</_>\n        <_>\n          5 9 4 2 2.</_>\n        <_>\n          9 11 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 3 -1.</_>\n        <_>\n          9 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 2 3 -1.</_>\n        <_>\n          7 10 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 4 3 -1.</_>\n        <_>\n          11 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 2 3 -1.</_>\n        <_>\n          8 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 3 -1.</_>\n        <_>\n          6 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 6 3 -1.</_>\n        <_>\n          8 9 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 4 2 -1.</_>\n        <_>\n          6 9 2 1 2.</_>\n        <_>\n          8 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 9 1 -1.</_>\n        <_>\n          7 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 6 -1.</_>\n        <_>\n          5 7 1 3 2.</_>\n        <_>\n          6 10 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 4 8 -1.</_>\n        <_>\n          4 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 2 19 -1.</_>\n        <_>\n          8 0 1 19 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 1 3 -1.</_>\n        <_>\n          5 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 3 1 -1.</_>\n        <_>\n          10 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 4 3 6 -1.</_>\n        <_>\n          16 6 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 5 3 -1.</_>\n        <_>\n          10 16 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 5 14 -1.</_>\n        <_>\n          13 8 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 4 4 -1.</_>\n        <_>\n          3 0 2 2 2.</_>\n        <_>\n          5 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 13 -1.</_>\n        <_>\n          8 5 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 16 -1.</_>\n        <_>\n          4 2 1 8 2.</_>\n        <_>\n          5 10 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 8 3 -1.</_>\n        <_>\n          8 8 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 2 12 -1.</_>\n        <_>\n          5 12 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 4 -1.</_>\n        <_>\n          9 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 5 4 -1.</_>\n        <_>\n          13 11 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 2 -1.</_>\n        <_>\n          12 0 4 1 2.</_>\n        <_>\n          16 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 4 -1.</_>\n        <_>\n          14 0 3 2 2.</_>\n        <_>\n          17 2 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 6 2 -1.</_>\n        <_>\n          6 9 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 2 1 -1.</_>\n        <_>\n          14 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 12 3 -1.</_>\n        <_>\n          6 0 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 3 3 -1.</_>\n        <_>\n          6 12 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 3 -1.</_>\n        <_>\n          5 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 2 4 -1.</_>\n        <_>\n          5 13 1 2 2.</_>\n        <_>\n          6 15 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 3 3 -1.</_>\n        <_>\n          4 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 6 2 -1.</_>\n        <_>\n          1 9 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 4 12 -1.</_>\n        <_>\n          6 12 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 4 -1.</_>\n        <_>\n          7 14 3 2 2.</_>\n        <_>\n          10 16 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 8 4 -1.</_>\n        <_>\n          8 16 4 2 2.</_>\n        <_>\n          12 18 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 10 6 -1.</_>\n        <_>\n          5 12 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 1 3 -1.</_>\n        <_>\n          6 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 4 6 -1.</_>\n        <_>\n          3 13 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 6 3 -1.</_>\n        <_>\n          10 15 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 4 2 -1.</_>\n        <_>\n          5 15 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 4 3 -1.</_>\n        <_>\n          5 14 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 1 2 -1.</_>\n        <_>\n          1 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 8 4 -1.</_>\n        <_>\n          4 12 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 1 2 -1.</_>\n        <_>\n          1 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 1 3 -1.</_>\n        <_>\n          5 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 19 2 1 -1.</_>\n        <_>\n          11 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 4 4 -1.</_>\n        <_>\n          6 6 2 2 2.</_>\n        <_>\n          8 8 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 1 2 -1.</_>\n        <_>\n          6 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 10 2 -1.</_>\n        <_>\n          5 4 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 2 1 -1.</_>\n        <_>\n          5 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 12 2 1 -1.</_>\n        <_>\n          1 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 6 11 -1.</_>\n        <_>\n          3 4 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 1 -1.</_>\n        <_>\n          7 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 1 6 -1.</_>\n        <_>\n          7 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 4 -1.</_>\n        <_>\n          7 2 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 2 2 -1.</_>\n        <_>\n          13 7 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 15 2 2 -1.</_>\n        <_>\n          16 15 1 1 2.</_>\n        <_>\n          17 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 1 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 5 2 -1.</_>\n        <_>\n          4 5 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 3 9 -1.</_>\n        <_>\n          4 6 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 3 -1.</_>\n        <_>\n          7 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 1 -1.</_>\n        <_>\n          7 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 12 5 -1.</_>\n        <_>\n          9 8 6 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 1 3 -1.</_>\n        <_>\n          9 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 1 -1.</_>\n        <_>\n          12 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 7 6 -1.</_>\n        <_>\n          13 9 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 20 18 -1.</_>\n        <_>\n          10 2 10 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 3 -1.</_>\n        <_>\n          12 6 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 3 2 -1.</_>\n        <_>\n          8 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 11 6 -1.</_>\n        <_>\n          4 11 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 7 6 -1.</_>\n        <_>\n          7 10 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 2 8 -1.</_>\n        <_>\n          15 7 1 4 2.</_>\n        <_>\n          16 11 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 2 6 -1.</_>\n        <_>\n          4 12 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 2 -1.</_>\n        <_>\n          7 13 1 1 2.</_>\n        <_>\n          8 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 4 -1.</_>\n        <_>\n          8 2 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 3 -1.</_>\n        <_>\n          8 3 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 1 -1.</_>\n        <_>\n          6 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 3 8 -1.</_>\n        <_>\n          15 6 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 2 6 -1.</_>\n        <_>\n          4 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 10 3 -1.</_>\n        <_>\n          0 18 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 18 7 2 -1.</_>\n        <_>\n          5 19 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 1 3 -1.</_>\n        <_>\n          13 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 4 16 -1.</_>\n        <_>\n          9 2 2 8 2.</_>\n        <_>\n          11 10 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 3 -1.</_>\n        <_>\n          6 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 4 -1.</_>\n        <_>\n          9 10 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 3 -1.</_>\n        <_>\n          18 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 2 2 -1.</_>\n        <_>\n          16 10 1 1 2.</_>\n        <_>\n          17 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 6 6 -1.</_>\n        <_>\n          14 4 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 3 1 -1.</_>\n        <_>\n          17 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 10 2 1 -1.</_>\n        <_>\n          18 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 2 4 -1.</_>\n        <_>\n          17 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 6 3 -1.</_>\n        <_>\n          11 16 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 3 4 -1.</_>\n        <_>\n          4 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 5 3 5 -1.</_>\n        <_>\n          4 5 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 6 1 -1.</_>\n        <_>\n          5 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 4 2 -1.</_>\n        <_>\n          14 0 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 1 2 -1.</_>\n        <_>\n          9 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 5 6 -1.</_>\n        <_>\n          15 14 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 10 4 -1.</_>\n        <_>\n          4 15 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 6 4 -1.</_>\n        <_>\n          7 16 3 2 2.</_>\n        <_>\n          10 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 7 3 -1.</_>\n        <_>\n          9 17 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 2 2 -1.</_>\n        <_>\n          4 8 1 1 2.</_>\n        <_>\n          5 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 17 20 2 -1.</_>\n        <_>\n          10 17 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 1 -1.</_>\n        <_>\n          5 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 6 -1.</_>\n        <_>\n          4 7 1 3 2.</_>\n        <_>\n          5 10 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 1 2 -1.</_>\n        <_>\n          11 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 5 2 -1.</_>\n        <_>\n          10 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 3 3 -1.</_>\n        <_>\n          8 17 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 3 1 -1.</_>\n        <_>\n          10 18 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 11 12 -1.</_>\n        <_>\n          8 10 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 13 12 -1.</_>\n        <_>\n          2 10 13 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 10 4 -1.</_>\n        <_>\n          0 15 5 2 2.</_>\n        <_>\n          5 17 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 6 2 -1.</_>\n        <_>\n          7 8 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 6 2 -1.</_>\n        <_>\n          12 1 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 6 7 -1.</_>\n        <_>\n          9 8 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 6 2 -1.</_>\n        <_>\n          11 9 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 15 4 -1.</_>\n        <_>\n          8 14 5 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 2 14 -1.</_>\n        <_>\n          7 10 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 1 2 -1.</_>\n        <_>\n          11 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 1 3 -1.</_>\n        <_>\n          5 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 3 3 -1.</_>\n        <_>\n          11 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 9 4 -1.</_>\n        <_>\n          13 7 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 5 -1.</_>\n        <_>\n          14 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 1 2 -1.</_>\n        <_>\n          8 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 1 10 -1.</_>\n        <_>\n          16 8 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 10 4 -1.</_>\n        <_>\n          6 13 10 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 2 -1.</_>\n        <_>\n          6 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 6 11 -1.</_>\n        <_>\n          4 6 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 3 2 -1.</_>\n        <_>\n          6 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 1 2 -1.</_>\n        <_>\n          10 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 1 -1.</_>\n        <_>\n          14 0 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 2 2 -1.</_>\n        <_>\n          6 3 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 6 5 -1.</_>\n        <_>\n          14 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 3 3 -1.</_>\n        <_>\n          6 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 3 3 -1.</_>\n        <_>\n          11 10 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 2 2 -1.</_>\n        <_>\n          6 14 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 16 8 -1.</_>\n        <_>\n          12 2 8 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 2 -1.</_>\n        <_>\n          10 12 1 1 2.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 2 2 -1.</_>\n        <_>\n          11 7 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 1 3 -1.</_>\n        <_>\n          13 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 2 3 -1.</_>\n        <_>\n          13 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 13 6 4 -1.</_>\n        <_>\n          4 13 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 1 -1.</_>\n        <_>\n          11 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 2 10 -1.</_>\n        <_>\n          10 6 1 5 2.</_>\n        <_>\n          11 11 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 2 2 -1.</_>\n        <_>\n          16 11 1 1 2.</_>\n        <_>\n          17 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 3 1 -1.</_>\n        <_>\n          17 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 7 12 -1.</_>\n        <_>\n          9 9 7 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 10 18 -1.</_>\n        <_>\n          4 1 5 9 2.</_>\n        <_>\n          9 10 5 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 12 2 2 -1.</_>\n        <_>\n          17 12 1 1 2.</_>\n        <_>\n          18 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 2 -1.</_>\n        <_>\n          12 6 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 5 2 -1.</_>\n        <_>\n          4 8 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 1 2 -1.</_>\n        <_>\n          7 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 7 6 -1.</_>\n        <_>\n          6 3 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 11 2 8 -1.</_>\n        <_>\n          13 11 1 4 2.</_>\n        <_>\n          14 15 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 2 -1.</_>\n        <_>\n          10 7 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 4 -1.</_>\n        <_>\n          4 1 1 2 2.</_>\n        <_>\n          5 3 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 8 -1.</_>\n        <_>\n          4 0 1 4 2.</_>\n        <_>\n          5 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 2 1 -1.</_>\n        <_>\n          7 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 1 3 -1.</_>\n        <_>\n          14 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 2 -1.</_>\n        <_>\n          5 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 4 15 -1.</_>\n        <_>\n          5 6 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 4 14 -1.</_>\n        <_>\n          11 5 2 7 2.</_>\n        <_>\n          13 12 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 3 1 -1.</_>\n        <_>\n          10 18 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 5 6 -1.</_>\n        <_>\n          4 12 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 3 3 -1.</_>\n        <_>\n          5 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 3 5 -1.</_>\n        <_>\n          9 1 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 2 -1.</_>\n        <_>\n          5 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 3 3 -1.</_>\n        <_>\n          7 14 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 3 -1.</_>\n        <_>\n          7 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 2 9 -1.</_>\n        <_>\n          4 6 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 2 -1.</_>\n        <_>\n          4 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 2 2 -1.</_>\n        <_>\n          10 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 12 6 -1.</_>\n        <_>\n          7 8 6 3 2.</_>\n        <_>\n          13 11 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 3 2 -1.</_>\n        <_>\n          14 11 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 6 2 -1.</_>\n        <_>\n          5 17 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 4 3 -1.</_>\n        <_>\n          8 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 2 2 -1.</_>\n        <_>\n          14 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 3 -1.</_>\n        <_>\n          8 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 3 3 -1.</_>\n        <_>\n          8 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 17 9 -1.</_>\n        <_>\n          1 10 17 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 8 -1.</_>\n        <_>\n          5 14 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 1 2 2 -1.</_>\n        <_>\n          18 1 1 1 2.</_>\n        <_>\n          19 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 11 6 -1.</_>\n        <_>\n          0 3 11 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 16 3 -1.</_>\n        <_>\n          3 1 16 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 10 3 -1.</_>\n        <_>\n          10 11 10 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 15 18 -1.</_>\n        <_>\n          0 9 15 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 2 2 -1.</_>\n        <_>\n          15 11 1 1 2.</_>\n        <_>\n          16 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 6 3 -1.</_>\n        <_>\n          17 12 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 4 -1.</_>\n        <_>\n          9 4 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 12 4 -1.</_>\n        <_>\n          12 6 4 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 2 -1.</_>\n        <_>\n          9 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 1 2 -1.</_>\n        <_>\n          6 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 8 -1.</_>\n        <_>\n          4 7 1 4 2.</_>\n        <_>\n          5 11 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 17 3 2 -1.</_>\n        <_>\n          10 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 1 3 -1.</_>\n        <_>\n          9 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 1 6 -1.</_>\n        <_>\n          6 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 13 6 -1.</_>\n        <_>\n          5 8 13 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 4 12 -1.</_>\n        <_>\n          8 7 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 4 -1.</_>\n        <_>\n          7 12 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 4 3 -1.</_>\n        <_>\n          5 15 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 3 1 -1.</_>\n        <_>\n          11 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 15 4 3 -1.</_>\n        <_>\n          4 16 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 3 2 -1.</_>\n        <_>\n          12 12 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 10 8 2 -1.</_>\n        <_>\n          15 10 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 18 6 2 -1.</_>\n        <_>\n          17 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 2 -1.</_>\n        <_>\n          8 5 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 2 1 -1.</_>\n        <_>\n          12 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 3 6 -1.</_>\n        <_>\n          12 8 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 1 2 -1.</_>\n        <_>\n          11 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 3 9 -1.</_>\n        <_>\n          13 9 1 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 1 3 -1.</_>\n        <_>\n          0 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 1 3 -1.</_>\n        <_>\n          0 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 8 2 2 -1.</_>\n        <_>\n          3 8 1 1 2.</_>\n        <_>\n          4 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 2 6 -1.</_>\n        <_>\n          4 9 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 2 9 -1.</_>\n        <_>\n          4 12 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 2 -1.</_>\n        <_>\n          7 13 1 1 2.</_>\n        <_>\n          8 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 10 6 -1.</_>\n        <_>\n          3 6 5 3 2.</_>\n        <_>\n          8 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 4 6 -1.</_>\n        <_>\n          11 9 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 14 3 -1.</_>\n        <_>\n          9 12 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 11 18 -1.</_>\n        <_>\n          0 9 11 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 4 2 -1.</_>\n        <_>\n          4 18 2 1 2.</_>\n        <_>\n          6 19 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 4 6 -1.</_>\n        <_>\n          7 13 2 3 2.</_>\n        <_>\n          9 16 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 1 -1.</_>\n        <_>\n          9 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 8 6 -1.</_>\n        <_>\n          5 14 4 3 2.</_>\n        <_>\n          9 17 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 2 3 -1.</_>\n        <_>\n          7 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 4 4 2 -1.</_>\n        <_>\n          14 4 2 1 2.</_>\n        <_>\n          16 5 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 3 -1.</_>\n        <_>\n          7 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 4 2 -1.</_>\n        <_>\n          7 14 2 1 2.</_>\n        <_>\n          9 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 6 -1.</_>\n        <_>\n          10 16 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 1 -1.</_>\n        <_>\n          12 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 5 18 7 -1.</_>\n        <_>\n          11 5 9 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 1 2 -1.</_>\n        <_>\n          18 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 14 6 -1.</_>\n        <_>\n          4 17 14 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 6 20 -1.</_>\n        <_>\n          10 0 2 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 18 -1.</_>\n        <_>\n          12 9 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 2 1 -1.</_>\n        <_>\n          13 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 6 13 -1.</_>\n        <_>\n          3 6 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 15 3 4 -1.</_>\n        <_>\n          4 15 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 3 6 -1.</_>\n        <_>\n          4 13 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 9 2 -1.</_>\n        <_>\n          6 11 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 11 6 8 -1.</_>\n        <_>\n          3 11 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 3 7 -1.</_>\n        <_>\n          17 0 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 1 2 6 -1.</_>\n        <_>\n          16 1 1 3 2.</_>\n        <_>\n          17 4 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 6 10 -1.</_>\n        <_>\n          3 7 3 5 2.</_>\n        <_>\n          6 12 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 6 7 -1.</_>\n        <_>\n          5 0 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 12 2 -1.</_>\n        <_>\n          5 2 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 1 2 -1.</_>\n        <_>\n          6 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 8 6 -1.</_>\n        <_>\n          4 14 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 9 3 -1.</_>\n        <_>\n          6 11 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 2 2 -1.</_>\n        <_>\n          4 14 1 1 2.</_>\n        <_>\n          5 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 3 2 -1.</_>\n        <_>\n          12 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 2 6 -1.</_>\n        <_>\n          18 5 1 3 2.</_>\n        <_>\n          19 8 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 1 2 -1.</_>\n        <_>\n          0 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 1 -1.</_>\n        <_>\n          11 4 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 2 3 -1.</_>\n        <_>\n          5 5 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 6 4 -1.</_>\n        <_>\n          3 3 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 6 1 -1.</_>\n        <_>\n          14 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 3 3 -1.</_>\n        <_>\n          6 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 2 2 -1.</_>\n        <_>\n          4 4 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 3 3 -1.</_>\n        <_>\n          8 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 10 14 -1.</_>\n        <_>\n          5 5 5 7 2.</_>\n        <_>\n          10 12 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 5 2 6 -1.</_>\n        <_>\n          16 7 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 5 1 3 -1.</_>\n        <_>\n          19 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 2 2 -1.</_>\n        <_>\n          3 6 1 1 2.</_>\n        <_>\n          4 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 10 10 -1.</_>\n        <_>\n          5 1 5 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 8 1 -1.</_>\n        <_>\n          7 0 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 1 -1.</_>\n        <_>\n          16 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 1 3 -1.</_>\n        <_>\n          6 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 2 4 -1.</_>\n        <_>\n          6 14 1 2 2.</_>\n        <_>\n          7 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 5 -1.</_>\n        <_>\n          1 7 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 0 2 8 -1.</_>\n        <_>\n          18 0 1 4 2.</_>\n        <_>\n          19 4 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 2 -1.</_>\n        <_>\n          8 8 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 8 3 -1.</_>\n        <_>\n          8 8 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 2 2 -1.</_>\n        <_>\n          8 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 6 11 -1.</_>\n        <_>\n          15 8 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 9 5 -1.</_>\n        <_>\n          14 15 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 12 15 -1.</_>\n        <_>\n          9 4 4 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 2 8 -1.</_>\n        <_>\n          16 12 1 4 2.</_>\n        <_>\n          17 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 10 6 -1.</_>\n        <_>\n          7 16 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 4 -1.</_>\n        <_>\n          6 17 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 8 2 -1.</_>\n        <_>\n          13 5 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 3 4 -1.</_>\n        <_>\n          6 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 7 6 -1.</_>\n        <_>\n          10 10 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 1 4 -1.</_>\n        <_>\n          12 15 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 3 4 -1.</_>\n        <_>\n          3 10 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 6 -1.</_>\n        <_>\n          8 7 3 3 2.</_>\n        <_>\n          11 10 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 15 2 -1.</_>\n        <_>\n          7 0 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 1 3 -1.</_>\n        <_>\n          13 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 9 3 4 -1.</_>\n        <_>\n          3 9 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 2 -1.</_>\n        <_>\n          6 5 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 16 2 3 -1.</_>\n        <_>\n          11 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 3 -1.</_>\n        <_>\n          7 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 4 -1.</_>\n        <_>\n          6 12 1 2 2.</_>\n        <_>\n          7 14 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 6 1 -1.</_>\n        <_>\n          12 1 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 3 4 -1.</_>\n        <_>\n          7 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 3 3 -1.</_>\n        <_>\n          9 9 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 12 3 -1.</_>\n        <_>\n          14 7 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 4 2 -1.</_>\n        <_>\n          12 10 2 1 2.</_>\n        <_>\n          14 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 1 2 -1.</_>\n        <_>\n          16 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 1 2 -1.</_>\n        <_>\n          6 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 3 -1.</_>\n        <_>\n          5 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 2 3 -1.</_>\n        <_>\n          5 10 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 1 -1.</_>\n        <_>\n          1 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 1 -1.</_>\n        <_>\n          1 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 2 -1.</_>\n        <_>\n          12 0 4 1 2.</_>\n        <_>\n          16 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 3 8 -1.</_>\n        <_>\n          11 11 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          5 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 6 -1.</_>\n        <_>\n          5 13 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 6 6 -1.</_>\n        <_>\n          6 2 3 3 2.</_>\n        <_>\n          9 5 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 1 6 -1.</_>\n        <_>\n          11 6 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 3 2 16 -1.</_>\n        <_>\n          18 3 1 8 2.</_>\n        <_>\n          19 11 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 3 2 -1.</_>\n        <_>\n          11 12 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 2 3 -1.</_>\n        <_>\n          7 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 2 1 -1.</_>\n        <_>\n          17 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 4 2 -1.</_>\n        <_>\n          15 7 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 2 3 -1.</_>\n        <_>\n          4 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 19 6 1 -1.</_>\n        <_>\n          11 19 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          9 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 1 3 -1.</_>\n        <_>\n          10 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 2 3 -1.</_>\n        <_>\n          8 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 5 -1.</_>\n        <_>\n          8 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 1 2 -1.</_>\n        <_>\n          14 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 6 3 -1.</_>\n        <_>\n          13 7 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 6 1 -1.</_>\n        <_>\n          16 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 1 3 -1.</_>\n        <_>\n          9 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 2 8 -1.</_>\n        <_>\n          9 5 1 4 2.</_>\n        <_>\n          10 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 1 4 -1.</_>\n        <_>\n          6 14 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 4 2 -1.</_>\n        <_>\n          5 14 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 2 4 -1.</_>\n        <_>\n          12 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 6 -1.</_>\n        <_>\n          13 7 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 14 -1.</_>\n        <_>\n          5 7 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 1 2 -1.</_>\n        <_>\n          9 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 14 12 -1.</_>\n        <_>\n          6 5 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 7 6 -1.</_>\n        <_>\n          13 9 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 3 3 -1.</_>\n        <_>\n          14 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 12 3 1 -1.</_>\n        <_>\n          18 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 3 2 -1.</_>\n        <_>\n          9 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 1 -1.</_>\n        <_>\n          8 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 3 2 -1.</_>\n        <_>\n          5 8 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 2 1 -1.</_>\n        <_>\n          12 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 11 3 1 -1.</_>\n        <_>\n          12 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 5 1 3 -1.</_>\n        <_>\n          9 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 9 1 2 -1.</_>\n        <_>\n          12 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 2 3 -1.</_>\n        <_>\n          13 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 3 -1.</_>\n        <_>\n          8 11 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 2 2 -1.</_>\n        <_>\n          6 10 1 1 2.</_>\n        <_>\n          7 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 1 9 -1.</_>\n        <_>\n          17 5 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 6 -1.</_>\n        <_>\n          4 7 1 3 2.</_>\n        <_>\n          5 10 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 11 18 -1.</_>\n        <_>\n          0 10 11 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 2 8 -1.</_>\n        <_>\n          7 10 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 6 -1.</_>\n        <_>\n          6 5 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 12 4 -1.</_>\n        <_>\n          2 14 12 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 6 1 -1.</_>\n        <_>\n          12 0 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 12 2 -1.</_>\n        <_>\n          5 1 12 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 2 1 -1.</_>\n        <_>\n          11 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 3 3 -1.</_>\n        <_>\n          7 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 5 3 -1.</_>\n        <_>\n          4 14 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 6 2 -1.</_>\n        <_>\n          9 17 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 5 3 -1.</_>\n        <_>\n          11 17 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 15 -1.</_>\n        <_>\n          6 0 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 16 8 4 -1.</_>\n        <_>\n          9 18 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 3 2 -1.</_>\n        <_>\n          0 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 1 -1.</_>\n        <_>\n          6 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 4 2 -1.</_>\n        <_>\n          9 11 2 1 2.</_>\n        <_>\n          11 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 2 2 -1.</_>\n        <_>\n          4 13 1 1 2.</_>\n        <_>\n          5 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 1 2 -1.</_>\n        <_>\n          6 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 18 2 2 -1.</_>\n        <_>\n          14 18 1 1 2.</_>\n        <_>\n          15 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 5 6 -1.</_>\n        <_>\n          7 12 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 6 -1.</_>\n        <_>\n          8 9 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 6 2 -1.</_>\n        <_>\n          9 9 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 4 -1.</_>\n        <_>\n          6 6 3 2 2.</_>\n        <_>\n          9 8 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 3 1 6 -1.</_>\n        <_>\n          10 5 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 14 -1.</_>\n        <_>\n          5 2 6 7 2.</_>\n        <_>\n          11 9 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 6 2 -1.</_>\n        <_>\n          13 6 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 8 -1.</_>\n        <_>\n          16 0 2 4 2.</_>\n        <_>\n          18 4 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 3 1 -1.</_>\n        <_>\n          4 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 3 4 -1.</_>\n        <_>\n          4 10 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 1 6 -1.</_>\n        <_>\n          4 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 15 1 -1.</_>\n        <_>\n          8 7 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 15 6 5 -1.</_>\n        <_>\n          4 15 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 8 4 -1.</_>\n        <_>\n          15 9 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 7 2 4 -1.</_>\n        <_>\n          16 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 1 1 2 -1.</_>\n        <_>\n          19 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 3 -1.</_>\n        <_>\n          7 15 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 3 1 -1.</_>\n        <_>\n          4 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 3 10 -1.</_>\n        <_>\n          4 10 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 17 2 2 -1.</_>\n        <_>\n          18 17 1 1 2.</_>\n        <_>\n          19 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 6 4 -1.</_>\n        <_>\n          3 12 3 2 2.</_>\n        <_>\n          6 14 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 2 2 -1.</_>\n        <_>\n          5 17 1 1 2.</_>\n        <_>\n          6 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 2 3 -1.</_>\n        <_>\n          7 17 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 6 3 -1.</_>\n        <_>\n          8 11 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 1 3 -1.</_>\n        <_>\n          7 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 16 2 1 -1.</_>\n        <_>\n          1 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 9 6 -1.</_>\n        <_>\n          11 10 9 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 9 16 -1.</_>\n        <_>\n          12 4 3 16 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 12 5 3 -1.</_>\n        <_>\n          14 13 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 18 3 2 -1.</_>\n        <_>\n          9 18 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 11 16 -1.</_>\n        <_>\n          4 8 11 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 12 15 -1.</_>\n        <_>\n          2 9 12 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 11 4 -1.</_>\n        <_>\n          3 15 11 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 4 3 -1.</_>\n        <_>\n          7 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 3 -1.</_>\n        <_>\n          6 6 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 9 -1.</_>\n        <_>\n          5 3 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 8 2 2 -1.</_>\n        <_>\n          16 8 1 1 2.</_>\n        <_>\n          17 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 8 2 -1.</_>\n        <_>\n          12 10 4 1 2.</_>\n        <_>\n          16 11 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 8 -1.</_>\n        <_>\n          7 2 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 3 -1.</_>\n        <_>\n          7 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 1 3 -1.</_>\n        <_>\n          17 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 3 2 -1.</_>\n        <_>\n          16 13 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 2 3 -1.</_>\n        <_>\n          11 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 6 11 -1.</_>\n        <_>\n          16 5 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 12 8 -1.</_>\n        <_>\n          12 0 6 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 8 4 -1.</_>\n        <_>\n          7 15 4 2 2.</_>\n        <_>\n          11 17 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 16 6 -1.</_>\n        <_>\n          4 16 16 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 6 -1.</_>\n        <_>\n          6 12 1 3 2.</_>\n        <_>\n          7 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 4 -1.</_>\n        <_>\n          7 14 3 2 2.</_>\n        <_>\n          10 16 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 4 -1.</_>\n        <_>\n          0 0 1 2 2.</_>\n        <_>\n          1 2 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 1 3 -1.</_>\n        <_>\n          15 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 3 1 -1.</_>\n        <_>\n          8 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 8 1 2 -1.</_>\n        <_>\n          1 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 3 2 -1.</_>\n        <_>\n          4 14 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 13 3 5 -1.</_>\n        <_>\n          4 13 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 3 4 -1.</_>\n        <_>\n          8 2 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 4 4 -1.</_>\n        <_>\n          10 3 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 1 2 -1.</_>\n        <_>\n          9 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 2 2 -1.</_>\n        <_>\n          7 12 1 1 2.</_>\n        <_>\n          8 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 4 4 -1.</_>\n        <_>\n          4 11 2 2 2.</_>\n        <_>\n          6 13 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 4 -1.</_>\n        <_>\n          12 10 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 3 2 -1.</_>\n        <_>\n          9 12 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 6 6 -1.</_>\n        <_>\n          13 9 3 3 2.</_>\n        <_>\n          16 12 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 3 5 -1.</_>\n        <_>\n          15 0 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 6 4 -1.</_>\n        <_>\n          9 8 3 2 2.</_>\n        <_>\n          12 10 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 3 3 -1.</_>\n        <_>\n          11 6 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 2 1 -1.</_>\n        <_>\n          14 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 2 2 -1.</_>\n        <_>\n          4 5 1 1 2.</_>\n        <_>\n          5 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 2 2 -1.</_>\n        <_>\n          4 5 1 1 2.</_>\n        <_>\n          5 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 2 6 -1.</_>\n        <_>\n          7 11 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 3 -1.</_>\n        <_>\n          6 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 2 3 -1.</_>\n        <_>\n          6 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 3 2 -1.</_>\n        <_>\n          8 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 4 -1.</_>\n        <_>\n          14 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 11 3 -1.</_>\n        <_>\n          6 9 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 5 2 -1.</_>\n        <_>\n          13 11 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 3 6 -1.</_>\n        <_>\n          13 12 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 5 2 -1.</_>\n        <_>\n          3 15 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 2 -1.</_>\n        <_>\n          11 0 4 1 2.</_>\n        <_>\n          15 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 6 -1.</_>\n        <_>\n          13 3 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 1 -1.</_>\n        <_>\n          13 0 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 5 3 -1.</_>\n        <_>\n          8 2 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 1 3 -1.</_>\n        <_>\n          12 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 13 3 6 -1.</_>\n        <_>\n          17 15 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 1 3 -1.</_>\n        <_>\n          12 12 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 3 1 -1.</_>\n        <_>\n          16 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 11 -1.</_>\n        <_>\n          13 4 3 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 4 4 -1.</_>\n        <_>\n          13 9 2 2 2.</_>\n        <_>\n          15 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 1 6 -1.</_>\n        <_>\n          8 4 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 6 -1.</_>\n        <_>\n          5 9 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 4 8 -1.</_>\n        <_>\n          4 6 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 1 2 -1.</_>\n        <_>\n          11 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 7 10 -1.</_>\n        <_>\n          11 6 7 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 9 6 -1.</_>\n        <_>\n          7 13 9 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 8 1 -1.</_>\n        <_>\n          8 9 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 3 3 -1.</_>\n        <_>\n          11 10 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 7 6 -1.</_>\n        <_>\n          8 2 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 2 2 -1.</_>\n        <_>\n          11 13 1 1 2.</_>\n        <_>\n          12 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 1 3 -1.</_>\n        <_>\n          7 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 9 -1.</_>\n        <_>\n          7 13 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 1 3 -1.</_>\n        <_>\n          5 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 18 6 -1.</_>\n        <_>\n          11 8 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 6 4 -1.</_>\n        <_>\n          13 7 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 6 -1.</_>\n        <_>\n          7 10 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 4 6 -1.</_>\n        <_>\n          10 6 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 6 1 -1.</_>\n        <_>\n          13 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 1 -1.</_>\n        <_>\n          6 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 3 3 -1.</_>\n        <_>\n          5 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 17 1 2 -1.</_>\n        <_>\n          16 18 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 2 1 -1.</_>\n        <_>\n          2 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 2 2 -1.</_>\n        <_>\n          5 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 2 3 -1.</_>\n        <_>\n          12 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          5 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 2 1 -1.</_>\n        <_>\n          2 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 4 -1.</_>\n        <_>\n          16 0 2 2 2.</_>\n        <_>\n          18 2 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 8 10 -1.</_>\n        <_>\n          4 5 4 5 2.</_>\n        <_>\n          8 10 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 14 4 5 -1.</_>\n        <_>\n          5 14 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 16 6 2 -1.</_>\n        <_>\n          5 16 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 8 1 -1.</_>\n        <_>\n          12 0 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 15 6 -1.</_>\n        <_>\n          0 7 15 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 3 2 -1.</_>\n        <_>\n          9 10 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 2 6 -1.</_>\n        <_>\n          7 11 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 3 -1.</_>\n        <_>\n          5 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 1 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 1 3 -1.</_>\n        <_>\n          17 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 4 4 -1.</_>\n        <_>\n          11 9 2 2 2.</_>\n        <_>\n          13 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 6 2 -1.</_>\n        <_>\n          10 15 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 8 -1.</_>\n        <_>\n          11 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 5 6 -1.</_>\n        <_>\n          11 10 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 2 6 -1.</_>\n        <_>\n          5 2 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 0 5 2 -1.</_>\n        <_>\n          6 1 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 4 3 -1.</_>\n        <_>\n          10 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 7 3 -1.</_>\n        <_>\n          12 4 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 1 12 8 -1.</_>\n        <_>\n          8 1 6 4 2.</_>\n        <_>\n          14 5 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 20 -1.</_>\n        <_>\n          12 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 1 2 2 -1.</_>\n        <_>\n          17 1 1 1 2.</_>\n        <_>\n          18 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 7 6 -1.</_>\n        <_>\n          2 12 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 1 -1.</_>\n        <_>\n          8 3 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 17 11 3 -1.</_>\n        <_>\n          4 18 11 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 3 2 -1.</_>\n        <_>\n          8 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 3 13 -1.</_>\n        <_>\n          4 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 2 12 14 -1.</_>\n        <_>\n          5 2 6 7 2.</_>\n        <_>\n          11 9 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 10 6 -1.</_>\n        <_>\n          0 3 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 2 1 -1.</_>\n        <_>\n          6 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 13 -1.</_>\n        <_>\n          10 7 3 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 2 8 -1.</_>\n        <_>\n          7 2 1 4 2.</_>\n        <_>\n          8 6 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 3 4 -1.</_>\n        <_>\n          7 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 2 1 -1.</_>\n        <_>\n          8 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 4 2 -1.</_>\n        <_>\n          4 0 2 1 2.</_>\n        <_>\n          6 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 16 8 -1.</_>\n        <_>\n          3 14 16 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 5 10 -1.</_>\n        <_>\n          10 10 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 3 4 -1.</_>\n        <_>\n          13 8 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 5 3 -1.</_>\n        <_>\n          13 11 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 2 2 -1.</_>\n        <_>\n          16 12 1 1 2.</_>\n        <_>\n          17 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 3 2 1 -1.</_>\n        <_>\n          17 3 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 1 3 5 -1.</_>\n        <_>\n          6 1 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 8 6 -1.</_>\n        <_>\n          5 9 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 2 -1.</_>\n        <_>\n          6 10 4 1 2.</_>\n        <_>\n          10 11 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 4 8 -1.</_>\n        <_>\n          6 9 2 4 2.</_>\n        <_>\n          8 13 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 8 4 -1.</_>\n        <_>\n          4 7 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 2 6 -1.</_>\n        <_>\n          14 13 1 3 2.</_>\n        <_>\n          15 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 2 1 -1.</_>\n        <_>\n          13 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 2 -1.</_>\n        <_>\n          6 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 1 -1.</_>\n        <_>\n          16 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 18 14 -1.</_>\n        <_>\n          0 7 18 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 3 3 -1.</_>\n        <_>\n          12 5 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 3 3 -1.</_>\n        <_>\n          5 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 1 -1.</_>\n        <_>\n          5 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 1 8 -1.</_>\n        <_>\n          5 13 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 3 15 -1.</_>\n        <_>\n          5 2 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 4 -1.</_>\n        <_>\n          17 0 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 1 3 -1.</_>\n        <_>\n          10 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 17 3 2 -1.</_>\n        <_>\n          9 17 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 6 1 3 -1.</_>\n        <_>\n          10 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 4 4 -1.</_>\n        <_>\n          6 7 2 2 2.</_>\n        <_>\n          8 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 4 -1.</_>\n        <_>\n          8 7 2 2 2.</_>\n        <_>\n          10 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 2 7 -1.</_>\n        <_>\n          16 8 1 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 3 2 -1.</_>\n        <_>\n          9 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 17 3 1 -1.</_>\n        <_>\n          17 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 14 -1.</_>\n        <_>\n          3 2 6 7 2.</_>\n        <_>\n          9 9 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 16 1 2 -1.</_>\n        <_>\n          16 17 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 2 3 -1.</_>\n        <_>\n          7 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 2 6 -1.</_>\n        <_>\n          8 13 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 2 6 -1.</_>\n        <_>\n          8 16 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 4 6 -1.</_>\n        <_>\n          6 16 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 3 6 -1.</_>\n        <_>\n          12 12 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 1 12 -1.</_>\n        <_>\n          0 10 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 2 10 -1.</_>\n        <_>\n          3 3 1 5 2.</_>\n        <_>\n          4 8 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 2 8 -1.</_>\n        <_>\n          3 3 1 4 2.</_>\n        <_>\n          4 7 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 1 12 -1.</_>\n        <_>\n          9 10 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 5 6 4 -1.</_>\n        <_>\n          3 5 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 1 4 -1.</_>\n        <_>\n          9 11 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 6 4 -1.</_>\n        <_>\n          4 6 3 2 2.</_>\n        <_>\n          7 8 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 2 -1.</_>\n        <_>\n          7 8 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 4 14 -1.</_>\n        <_>\n          8 4 2 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 3 -1.</_>\n        <_>\n          7 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 5 -1.</_>\n        <_>\n          7 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 8 10 -1.</_>\n        <_>\n          4 4 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 18 14 -1.</_>\n        <_>\n          9 6 9 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 3 5 -1.</_>\n        <_>\n          12 15 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 18 4 2 -1.</_>\n        <_>\n          3 18 2 1 2.</_>\n        <_>\n          5 19 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 2 2 -1.</_>\n        <_>\n          7 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 3 10 -1.</_>\n        <_>\n          10 6 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 8 10 -1.</_>\n        <_>\n          13 0 4 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 2 8 13 -1.</_>\n        <_>\n          11 2 4 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 3 12 7 -1.</_>\n        <_>\n          9 3 6 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 3 2 -1.</_>\n        <_>\n          12 8 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 2 8 -1.</_>\n        <_>\n          11 7 1 4 2.</_>\n        <_>\n          12 11 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 3 2 -1.</_>\n        <_>\n          0 7 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 2 3 -1.</_>\n        <_>\n          6 18 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 2 -1.</_>\n        <_>\n          4 7 1 1 2.</_>\n        <_>\n          5 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 10 9 -1.</_>\n        <_>\n          9 5 10 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 10 4 -1.</_>\n        <_>\n          9 0 5 2 2.</_>\n        <_>\n          14 2 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 2 1 -1.</_>\n        <_>\n          8 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 2 1 -1.</_>\n        <_>\n          8 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 3 3 -1.</_>\n        <_>\n          4 10 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 4 3 -1.</_>\n        <_>\n          4 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 3 -1.</_>\n        <_>\n          6 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 1 3 -1.</_>\n        <_>\n          18 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 5 -1.</_>\n        <_>\n          18 0 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 8 3 -1.</_>\n        <_>\n          11 3 8 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 5 -1.</_>\n        <_>\n          17 9 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 4 6 -1.</_>\n        <_>\n          0 9 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 4 12 -1.</_>\n        <_>\n          12 7 2 6 2.</_>\n        <_>\n          14 13 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 3 -1.</_>\n        <_>\n          11 7 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 3 -1.</_>\n        <_>\n          12 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 20 -1.</_>\n        <_>\n          14 0 3 20 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 2 6 -1.</_>\n        <_>\n          5 5 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 6 11 -1.</_>\n        <_>\n          3 7 2 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 2 1 -1.</_>\n        <_>\n          3 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 6 -1.</_>\n        <_>\n          5 14 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 2 3 -1.</_>\n        <_>\n          6 18 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 11 12 -1.</_>\n        <_>\n          5 12 11 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 2 2 -1.</_>\n        <_>\n          16 10 1 1 2.</_>\n        <_>\n          17 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 3 1 -1.</_>\n        <_>\n          16 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 1 3 -1.</_>\n        <_>\n          13 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 3 4 -1.</_>\n        <_>\n          6 16 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 14 -1.</_>\n        <_>\n          6 13 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 2 1 -1.</_>\n        <_>\n          12 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 6 6 -1.</_>\n        <_>\n          9 13 3 3 2.</_>\n        <_>\n          12 16 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 3 1 -1.</_>\n        <_>\n          11 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 2 6 -1.</_>\n        <_>\n          9 13 1 3 2.</_>\n        <_>\n          10 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 18 4 2 -1.</_>\n        <_>\n          13 18 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          10 12 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 1 12 -1.</_>\n        <_>\n          5 12 1 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 4 6 6 -1.</_>\n        <_>\n          4 4 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 4 9 3 -1.</_>\n        <_>\n          4 4 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 3 3 -1.</_>\n        <_>\n          5 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 1 3 -1.</_>\n        <_>\n          8 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 19 6 1 -1.</_>\n        <_>\n          13 19 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 8 -1.</_>\n        <_>\n          18 4 1 4 2.</_>\n        <_>\n          19 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 5 2 3 -1.</_>\n        <_>\n          17 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 15 8 4 -1.</_>\n        <_>\n          16 15 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 4 10 -1.</_>\n        <_>\n          14 13 4 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 18 -1.</_>\n        <_>\n          11 6 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 12 6 -1.</_>\n        <_>\n          8 7 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 4 2 -1.</_>\n        <_>\n          12 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 2 8 -1.</_>\n        <_>\n          6 7 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 12 12 -1.</_>\n        <_>\n          6 3 6 6 2.</_>\n        <_>\n          12 9 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 4 2 -1.</_>\n        <_>\n          6 10 2 1 2.</_>\n        <_>\n          8 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 6 10 -1.</_>\n        <_>\n          2 2 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 3 2 -1.</_>\n        <_>\n          11 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 10 2 -1.</_>\n        <_>\n          6 8 5 1 2.</_>\n        <_>\n          11 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 1 6 -1.</_>\n        <_>\n          6 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 0 4 1 -1.</_>\n        <_>\n          11 0 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 3 -1.</_>\n        <_>\n          8 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 2 1 -1.</_>\n        <_>\n          8 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 11 3 1 -1.</_>\n        <_>\n          3 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 3 3 -1.</_>\n        <_>\n          2 10 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 2 -1.</_>\n        <_>\n          12 0 4 1 2.</_>\n        <_>\n          16 1 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 6 8 -1.</_>\n        <_>\n          9 6 3 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 1 3 -1.</_>\n        <_>\n          6 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 7 2 -1.</_>\n        <_>\n          8 13 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 3 -1.</_>\n        <_>\n          6 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 12 -1.</_>\n        <_>\n          6 12 2 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 2 3 -1.</_>\n        <_>\n          6 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 1 3 -1.</_>\n        <_>\n          12 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 1 2 -1.</_>\n        <_>\n          8 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 4 6 -1.</_>\n        <_>\n          7 11 2 3 2.</_>\n        <_>\n          9 14 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 10 4 3 -1.</_>\n        <_>\n          10 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 2 3 -1.</_>\n        <_>\n          12 11 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 2 3 -1.</_>\n        <_>\n          6 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 1 3 -1.</_>\n        <_>\n          7 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 8 6 -1.</_>\n        <_>\n          6 12 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 12 -1.</_>\n        <_>\n          5 12 6 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 14 2 1 -1.</_>\n        <_>\n          2 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 2 3 -1.</_>\n        <_>\n          8 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 8 4 -1.</_>\n        <_>\n          4 6 4 2 2.</_>\n        <_>\n          8 8 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 3 1 -1.</_>\n        <_>\n          1 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 2 -1.</_>\n        <_>\n          4 1 1 1 2.</_>\n        <_>\n          5 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 1 6 -1.</_>\n        <_>\n          14 13 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 3 3 -1.</_>\n        <_>\n          5 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 3 12 4 -1.</_>\n        <_>\n          2 3 6 2 2.</_>\n        <_>\n          8 5 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 3 2 -1.</_>\n        <_>\n          11 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 8 1 -1.</_>\n        <_>\n          16 14 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 8 13 -1.</_>\n        <_>\n          15 0 4 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 8 -1.</_>\n        <_>\n          12 12 1 4 2.</_>\n        <_>\n          13 16 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 8 12 -1.</_>\n        <_>\n          4 13 8 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 2 4 -1.</_>\n        <_>\n          10 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 3 1 -1.</_>\n        <_>\n          5 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 1 3 -1.</_>\n        <_>\n          18 6 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 9 1 -1.</_>\n        <_>\n          9 9 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 4 6 -1.</_>\n        <_>\n          12 7 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 4 4 -1.</_>\n        <_>\n          18 0 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 2 2 -1.</_>\n        <_>\n          3 10 1 1 2.</_>\n        <_>\n          4 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 2 1 -1.</_>\n        <_>\n          1 0 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 4 2 8 -1.</_>\n        <_>\n          17 4 1 4 2.</_>\n        <_>\n          18 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 1 3 -1.</_>\n        <_>\n          7 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 2 1 -1.</_>\n        <_>\n          1 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 2 4 -1.</_>\n        <_>\n          7 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 19 3 1 -1.</_>\n        <_>\n          5 19 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 14 4 5 -1.</_>\n        <_>\n          4 14 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 4 4 -1.</_>\n        <_>\n          4 11 2 2 2.</_>\n        <_>\n          6 13 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 2 6 -1.</_>\n        <_>\n          4 13 1 3 2.</_>\n        <_>\n          5 16 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 3 3 4 -1.</_>\n        <_>\n          8 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 3 2 -1.</_>\n        <_>\n          18 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 4 6 2 -1.</_>\n        <_>\n          10 5 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 6 3 -1.</_>\n        <_>\n          12 4 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 12 2 2 -1.</_>\n        <_>\n          17 12 1 1 2.</_>\n        <_>\n          18 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 15 8 -1.</_>\n        <_>\n          10 12 5 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 2 2 -1.</_>\n        <_>\n          4 18 1 1 2.</_>\n        <_>\n          5 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 2 2 -1.</_>\n        <_>\n          0 15 1 1 2.</_>\n        <_>\n          1 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 1 6 -1.</_>\n        <_>\n          5 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 0 18 14 -1.</_>\n        <_>\n          1 7 18 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 7 6 -1.</_>\n        <_>\n          6 5 7 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 16 2 1 -1.</_>\n        <_>\n          7 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 16 9 -1.</_>\n        <_>\n          4 14 16 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 2 2 -1.</_>\n        <_>\n          17 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 2 -1.</_>\n        <_>\n          7 8 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 14 12 3 -1.</_>\n        <_>\n          6 14 6 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 3 10 -1.</_>\n        <_>\n          7 11 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 11 1 2 -1.</_>\n        <_>\n          10 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 17 2 2 -1.</_>\n        <_>\n          6 17 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 18 -1.</_>\n        <_>\n          11 0 9 18 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 6 3 -1.</_>\n        <_>\n          14 11 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 6 1 -1.</_>\n        <_>\n          14 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 2 2 -1.</_>\n        <_>\n          15 10 1 1 2.</_>\n        <_>\n          16 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 3 8 -1.</_>\n        <_>\n          4 11 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 1 4 12 -1.</_>\n        <_>\n          8 1 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 3 4 8 -1.</_>\n        <_>\n          8 3 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 6 12 -1.</_>\n        <_>\n          11 4 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 12 4 5 -1.</_>\n        <_>\n          18 12 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 2 3 -1.</_>\n        <_>\n          15 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 10 6 -1.</_>\n        <_>\n          14 7 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 7 3 11 -1.</_>\n        <_>\n          13 7 1 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 16 1 2 -1.</_>\n        <_>\n          19 17 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 15 12 1 -1.</_>\n        <_>\n          14 15 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 6 3 -1.</_>\n        <_>\n          10 16 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 10 4 -1.</_>\n        <_>\n          6 8 5 2 2.</_>\n        <_>\n          11 10 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 1 3 -1.</_>\n        <_>\n          10 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 9 12 -1.</_>\n        <_>\n          10 7 9 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 1 4 -1.</_>\n        <_>\n          10 3 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 5 18 4 -1.</_>\n        <_>\n          1 7 18 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 12 6 -1.</_>\n        <_>\n          12 4 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 7 3 -1.</_>\n        <_>\n          13 2 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 4 -1.</_>\n        <_>\n          14 0 3 2 2.</_>\n        <_>\n          17 2 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 3 3 -1.</_>\n        <_>\n          9 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 8 4 -1.</_>\n        <_>\n          5 14 4 2 2.</_>\n        <_>\n          9 16 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 6 14 14 -1.</_>\n        <_>\n          8 6 7 14 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 4 6 2 -1.</_>\n        <_>\n          13 4 3 1 2.</_>\n        <_>\n          16 5 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 6 6 -1.</_>\n        <_>\n          8 9 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 20 -1.</_>\n        <_>\n          8 10 12 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 4 3 -1.</_>\n        <_>\n          9 9 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 18 8 2 -1.</_>\n        <_>\n          10 19 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 4 2 -1.</_>\n        <_>\n          9 12 2 1 2.</_>\n        <_>\n          11 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 2 2 -1.</_>\n        <_>\n          4 14 1 1 2.</_>\n        <_>\n          5 15 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 3 2 -1.</_>\n        <_>\n          5 15 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 6 3 -1.</_>\n        <_>\n          13 1 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 2 3 -1.</_>\n        <_>\n          6 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 2 2 -1.</_>\n        <_>\n          15 1 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 13 6 7 -1.</_>\n        <_>\n          3 13 3 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 3 1 -1.</_>\n        <_>\n          18 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 8 4 -1.</_>\n        <_>\n          9 10 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 16 8 4 -1.</_>\n        <_>\n          7 16 4 2 2.</_>\n        <_>\n          11 18 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 16 4 3 -1.</_>\n        <_>\n          11 17 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 6 2 -1.</_>\n        <_>\n          3 10 3 1 2.</_>\n        <_>\n          6 11 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 3 2 -1.</_>\n        <_>\n          12 7 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 9 2 -1.</_>\n        <_>\n          11 7 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 3 10 -1.</_>\n        <_>\n          14 6 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 4 3 -1.</_>\n        <_>\n          17 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 10 6 10 -1.</_>\n        <_>\n          3 10 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 2 2 -1.</_>\n        <_>\n          5 0 1 1 2.</_>\n        <_>\n          6 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 11 3 6 -1.</_>\n        <_>\n          3 13 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 9 10 -1.</_>\n        <_>\n          7 6 3 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 9 5 -1.</_>\n        <_>\n          9 10 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 5 3 9 -1.</_>\n        <_>\n          11 5 1 9 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 7 3 4 -1.</_>\n        <_>\n          4 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 2 2 -1.</_>\n        <_>\n          4 6 1 1 2.</_>\n        <_>\n          5 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 2 2 3 -1.</_>\n        <_>\n          0 3 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 0 8 4 -1.</_>\n        <_>\n          12 0 4 2 2.</_>\n        <_>\n          16 2 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 8 2 -1.</_>\n        <_>\n          11 1 4 1 2.</_>\n        <_>\n          15 2 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 2 7 3 -1.</_>\n        <_>\n          12 3 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 3 2 -1.</_>\n        <_>\n          4 6 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 4 6 -1.</_>\n        <_>\n          4 9 4 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 6 4 -1.</_>\n        <_>\n          13 12 3 2 2.</_>\n        <_>\n          16 14 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 2 4 -1.</_>\n        <_>\n          13 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 3 3 -1.</_>\n        <_>\n          15 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 14 2 3 -1.</_>\n        <_>\n          14 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 4 2 8 -1.</_>\n        <_>\n          18 4 1 4 2.</_>\n        <_>\n          19 8 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 2 4 -1.</_>\n        <_>\n          7 14 1 2 2.</_>\n        <_>\n          8 16 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 6 6 -1.</_>\n        <_>\n          14 5 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 7 1 2 -1.</_>\n        <_>\n          19 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 6 2 -1.</_>\n        <_>\n          8 8 3 1 2.</_>\n        <_>\n          11 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 6 1 3 -1.</_>\n        <_>\n          19 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 7 3 -1.</_>\n        <_>\n          7 9 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 6 2 6 -1.</_>\n        <_>\n          18 6 1 3 2.</_>\n        <_>\n          19 9 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 8 6 -1.</_>\n        <_>\n          5 10 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 1 18 15 -1.</_>\n        <_>\n          10 1 9 15 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 5 4 -1.</_>\n        <_>\n          11 9 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 3 -1.</_>\n        <_>\n          11 12 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 7 2 4 -1.</_>\n        <_>\n          0 9 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 4 2 -1.</_>\n        <_>\n          6 12 2 1 2.</_>\n        <_>\n          8 13 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 6 8 -1.</_>\n        <_>\n          7 11 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 2 4 -1.</_>\n        <_>\n          9 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 6 6 -1.</_>\n        <_>\n          9 12 6 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 4 2 -1.</_>\n        <_>\n          12 14 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 8 1 -1.</_>\n        <_>\n          4 4 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 13 1 2 -1.</_>\n        <_>\n          14 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 6 -1.</_>\n        <_>\n          8 7 1 3 2.</_>\n        <_>\n          9 10 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 10 6 -1.</_>\n        <_>\n          5 8 5 3 2.</_>\n        <_>\n          10 11 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 3 3 -1.</_>\n        <_>\n          5 13 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 2 2 -1.</_>\n        <_>\n          5 11 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 4 15 -1.</_>\n        <_>\n          6 7 4 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 2 4 -1.</_>\n        <_>\n          7 6 1 2 2.</_>\n        <_>\n          8 8 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 2 3 -1.</_>\n        <_>\n          5 10 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 16 2 2 -1.</_>\n        <_>\n          15 16 1 1 2.</_>\n        <_>\n          16 17 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 4 6 -1.</_>\n        <_>\n          4 13 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 0 3 6 -1.</_>\n        <_>\n          6 0 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 11 12 4 -1.</_>\n        <_>\n          4 11 6 2 2.</_>\n        <_>\n          10 13 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 13 3 3 -1.</_>\n        <_>\n          7 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 6 2 -1.</_>\n        <_>\n          9 13 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 8 -1.</_>\n        <_>\n          8 0 6 4 2.</_>\n        <_>\n          14 4 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 4 4 -1.</_>\n        <_>\n          10 8 2 2 2.</_>\n        <_>\n          12 10 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 10 1 6 -1.</_>\n        <_>\n          12 13 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 3 10 -1.</_>\n        <_>\n          6 5 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 14 6 -1.</_>\n        <_>\n          11 0 7 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 7 2 6 -1.</_>\n        <_>\n          9 7 1 3 2.</_>\n        <_>\n          10 10 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 3 1 -1.</_>\n        <_>\n          9 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 2 2 -1.</_>\n        <_>\n          11 15 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 18 6 2 -1.</_>\n        <_>\n          12 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 12 8 6 -1.</_>\n        <_>\n          8 15 8 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 8 6 -1.</_>\n        <_>\n          7 2 8 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 12 3 -1.</_>\n        <_>\n          5 2 4 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 10 12 -1.</_>\n        <_>\n          5 4 5 6 2.</_>\n        <_>\n          10 10 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 3 2 -1.</_>\n        <_>\n          5 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 1 3 -1.</_>\n        <_>\n          7 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          5 12 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 6 9 -1.</_>\n        <_>\n          8 13 6 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 3 6 -1.</_>\n        <_>\n          7 10 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 3 14 -1.</_>\n        <_>\n          4 4 1 14 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 10 3 6 -1.</_>\n        <_>\n          4 10 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 2 2 -1.</_>\n        <_>\n          4 8 1 1 2.</_>\n        <_>\n          5 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 2 3 -1.</_>\n        <_>\n          10 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 14 8 4 -1.</_>\n        <_>\n          6 14 4 2 2.</_>\n        <_>\n          10 16 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 3 4 -1.</_>\n        <_>\n          6 12 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 2 2 -1.</_>\n        <_>\n          17 11 1 1 2.</_>\n        <_>\n          18 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 1 10 -1.</_>\n        <_>\n          15 11 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 1 12 6 -1.</_>\n        <_>\n          7 3 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 2 4 -1.</_>\n        <_>\n          4 9 1 2 2.</_>\n        <_>\n          5 11 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 6 12 -1.</_>\n        <_>\n          9 7 3 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 2 3 -1.</_>\n        <_>\n          8 6 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 1 3 -1.</_>\n        <_>\n          0 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 1 3 -1.</_>\n        <_>\n          0 2 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 15 3 5 -1.</_>\n        <_>\n          12 15 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 6 -1.</_>\n        <_>\n          8 8 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 3 12 -1.</_>\n        <_>\n          5 7 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 9 2 2 -1.</_>\n        <_>\n          7 9 1 1 2.</_>\n        <_>\n          8 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 4 2 12 -1.</_>\n        <_>\n          4 8 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 7 3 -1.</_>\n        <_>\n          4 6 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 3 -1.</_>\n        <_>\n          13 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 2 -1.</_>\n        <_>\n          4 0 1 1 2.</_>\n        <_>\n          5 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 3 11 -1.</_>\n        <_>\n          12 8 1 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 0 2 2 -1.</_>\n        <_>\n          4 0 1 1 2.</_>\n        <_>\n          5 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 3 2 2 -1.</_>\n        <_>\n          9 3 1 1 2.</_>\n        <_>\n          10 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 3 2 -1.</_>\n        <_>\n          8 11 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 1 -1.</_>\n        <_>\n          12 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 4 2 -1.</_>\n        <_>\n          10 8 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 15 3 1 -1.</_>\n        <_>\n          18 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 6 2 4 -1.</_>\n        <_>\n          12 6 1 2 2.</_>\n        <_>\n          13 8 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 9 11 -1.</_>\n        <_>\n          11 3 3 11 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 2 2 -1.</_>\n        <_>\n          11 8 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 9 -1.</_>\n        <_>\n          12 8 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 6 17 -1.</_>\n        <_>\n          15 0 2 17 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 3 4 -1.</_>\n        <_>\n          7 6 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 7 -1.</_>\n        <_>\n          7 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 5 3 2 -1.</_>\n        <_>\n          8 5 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 15 6 2 -1.</_>\n        <_>\n          7 15 3 1 2.</_>\n        <_>\n          10 16 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 1 3 -1.</_>\n        <_>\n          11 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 6 7 -1.</_>\n        <_>\n          4 12 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 17 5 3 -1.</_>\n        <_>\n          11 18 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 11 2 2 -1.</_>\n        <_>\n          17 11 1 1 2.</_>\n        <_>\n          18 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 17 6 3 -1.</_>\n        <_>\n          10 18 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 1 2 -1.</_>\n        <_>\n          2 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 3 3 -1.</_>\n        <_>\n          8 7 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 1 2 -1.</_>\n        <_>\n          7 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 15 2 2 -1.</_>\n        <_>\n          2 16 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 3 1 -1.</_>\n        <_>\n          4 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 20 -1.</_>\n        <_>\n          4 0 1 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 12 12 -1.</_>\n        <_>\n          14 2 6 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 2 3 -1.</_>\n        <_>\n          5 4 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 2 2 -1.</_>\n        <_>\n          3 4 1 1 2.</_>\n        <_>\n          4 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 15 20 3 -1.</_>\n        <_>\n          10 15 10 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 13 2 4 -1.</_>\n        <_>\n          6 13 1 2 2.</_>\n        <_>\n          7 15 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 3 7 -1.</_>\n        <_>\n          13 8 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 9 6 10 -1.</_>\n        <_>\n          8 9 3 5 2.</_>\n        <_>\n          11 14 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 10 16 2 -1.</_>\n        <_>\n          10 10 8 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 15 6 -1.</_>\n        <_>\n          10 3 5 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 14 2 1 -1.</_>\n        <_>\n          11 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 4 4 -1.</_>\n        <_>\n          11 11 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 8 2 4 -1.</_>\n        <_>\n          12 10 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 3 10 14 -1.</_>\n        <_>\n          1 3 5 7 2.</_>\n        <_>\n          6 10 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 3 4 -1.</_>\n        <_>\n          8 2 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 2 2 1 -1.</_>\n        <_>\n          11 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 5 3 -1.</_>\n        <_>\n          5 13 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 1 3 -1.</_>\n        <_>\n          7 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 6 3 -1.</_>\n        <_>\n          10 13 6 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 1 3 -1.</_>\n        <_>\n          6 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 18 3 -1.</_>\n        <_>\n          2 1 18 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 11 6 -1.</_>\n        <_>\n          8 10 11 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 10 8 -1.</_>\n        <_>\n          2 6 5 4 2.</_>\n        <_>\n          7 10 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 2 6 2 -1.</_>\n        <_>\n          11 2 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 6 3 -1.</_>\n        <_>\n          15 9 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 3 1 2 -1.</_>\n        <_>\n          5 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 7 3 1 -1.</_>\n        <_>\n          2 7 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 8 6 -1.</_>\n        <_>\n          4 6 4 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 9 1 2 -1.</_>\n        <_>\n          11 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 13 1 2 -1.</_>\n        <_>\n          12 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 15 10 4 -1.</_>\n        <_>\n          10 15 5 2 2.</_>\n        <_>\n          15 17 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 1 2 -1.</_>\n        <_>\n          12 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 1 -1.</_>\n        <_>\n          7 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 3 3 2 -1.</_>\n        <_>\n          12 3 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 5 -1.</_>\n        <_>\n          7 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 16 3 1 -1.</_>\n        <_>\n          4 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 6 5 -1.</_>\n        <_>\n          7 7 3 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 7 6 3 -1.</_>\n        <_>\n          7 7 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 4 8 -1.</_>\n        <_>\n          7 8 2 4 2.</_>\n        <_>\n          9 12 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 2 14 12 -1.</_>\n        <_>\n          4 6 14 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 14 2 6 -1.</_>\n        <_>\n          4 14 1 3 2.</_>\n        <_>\n          5 17 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 4 -1.</_>\n        <_>\n          7 13 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 10 15 -1.</_>\n        <_>\n          6 9 10 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 12 6 -1.</_>\n        <_>\n          6 13 12 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 4 3 -1.</_>\n        <_>\n          6 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 4 3 -1.</_>\n        <_>\n          6 18 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 3 7 -1.</_>\n        <_>\n          10 13 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 8 5 2 -1.</_>\n        <_>\n          2 9 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 3 8 -1.</_>\n        <_>\n          15 1 1 8 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 1 2 -1.</_>\n        <_>\n          2 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 2 2 -1.</_>\n        <_>\n          8 6 1 1 2.</_>\n        <_>\n          9 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 10 12 -1.</_>\n        <_>\n          4 9 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 8 4 -1.</_>\n        <_>\n          5 9 4 2 2.</_>\n        <_>\n          9 11 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 9 4 4 -1.</_>\n        <_>\n          9 11 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 2 -1.</_>\n        <_>\n          5 11 4 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 17 2 1 -1.</_>\n        <_>\n          7 17 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 2 1 -1.</_>\n        <_>\n          13 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 6 4 8 -1.</_>\n        <_>\n          13 6 2 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 4 3 10 -1.</_>\n        <_>\n          10 4 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 18 9 2 -1.</_>\n        <_>\n          3 18 3 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 13 3 3 -1.</_>\n        <_>\n          15 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 12 2 2 -1.</_>\n        <_>\n          9 12 1 1 2.</_>\n        <_>\n          10 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 7 3 -1.</_>\n        <_>\n          13 13 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 6 2 -1.</_>\n        <_>\n          14 11 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 5 14 -1.</_>\n        <_>\n          14 12 5 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 16 5 3 -1.</_>\n        <_>\n          4 17 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 16 5 3 -1.</_>\n        <_>\n          5 17 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 4 5 -1.</_>\n        <_>\n          10 14 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 14 2 1 -1.</_>\n        <_>\n          10 14 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 10 6 2 -1.</_>\n        <_>\n          6 10 3 1 2.</_>\n        <_>\n          9 11 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 6 -1.</_>\n        <_>\n          8 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 7 6 -1.</_>\n        <_>\n          10 15 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 1 2 8 -1.</_>\n        <_>\n          4 1 1 4 2.</_>\n        <_>\n          5 5 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 6 6 4 -1.</_>\n        <_>\n          3 6 3 2 2.</_>\n        <_>\n          6 8 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 2 3 13 -1.</_>\n        <_>\n          16 2 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 2 6 -1.</_>\n        <_>\n          16 10 1 3 2.</_>\n        <_>\n          17 13 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 19 2 1 -1.</_>\n        <_>\n          14 19 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 11 2 1 -1.</_>\n        <_>\n          8 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 10 3 4 -1.</_>\n        <_>\n          5 10 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 2 4 -1.</_>\n        <_>\n          4 7 1 2 2.</_>\n        <_>\n          5 9 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 7 5 4 -1.</_>\n        <_>\n          10 9 5 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 4 8 16 -1.</_>\n        <_>\n          7 4 4 8 2.</_>\n        <_>\n          11 12 4 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 10 6 -1.</_>\n        <_>\n          5 9 5 3 2.</_>\n        <_>\n          10 12 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 2 -1.</_>\n        <_>\n          5 12 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 12 4 8 -1.</_>\n        <_>\n          12 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 6 2 -1.</_>\n        <_>\n          8 14 6 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 5 6 -1.</_>\n        <_>\n          3 14 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 0 2 2 -1.</_>\n        <_>\n          16 0 1 1 2.</_>\n        <_>\n          17 1 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 3 3 4 -1.</_>\n        <_>\n          14 3 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 11 3 1 -1.</_>\n        <_>\n          16 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 6 5 -1.</_>\n        <_>\n          16 0 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 1 8 18 -1.</_>\n        <_>\n          10 10 8 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 5 3 2 -1.</_>\n        <_>\n          11 6 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 5 2 1 -1.</_>\n        <_>\n          6 5 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 4 3 3 -1.</_>\n        <_>\n          4 4 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 1 3 -1.</_>\n        <_>\n          11 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 13 3 3 -1.</_>\n        <_>\n          16 14 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 8 5 12 -1.</_>\n        <_>\n          15 14 5 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 3 10 -1.</_>\n        <_>\n          4 0 1 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 15 1 2 -1.</_>\n        <_>\n          15 16 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 4 2 -1.</_>\n        <_>\n          15 0 2 1 2.</_>\n        <_>\n          17 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 2 2 1 -1.</_>\n        <_>\n          18 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 13 1 3 -1.</_>\n        <_>\n          8 14 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 1 2 6 -1.</_>\n        <_>\n          9 1 1 3 2.</_>\n        <_>\n          10 4 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 12 9 3 -1.</_>\n        <_>\n          1 13 9 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 14 3 3 -1.</_>\n        <_>\n          12 15 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 10 3 1 -1.</_>\n        <_>\n          16 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 9 1 -1.</_>\n        <_>\n          12 6 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 5 3 7 -1.</_>\n        <_>\n          13 5 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 2 2 -1.</_>\n        <_>\n          8 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 9 2 -1.</_>\n        <_>\n          7 1 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 5 2 5 -1.</_>\n        <_>\n          14 5 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 2 3 6 -1.</_>\n        <_>\n          15 2 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 4 3 -1.</_>\n        <_>\n          8 7 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 1 9 -1.</_>\n        <_>\n          6 11 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 9 7 6 -1.</_>\n        <_>\n          3 11 7 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 2 3 -1.</_>\n        <_>\n          6 7 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 1 -1.</_>\n        <_>\n          6 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 4 4 -1.</_>\n        <_>\n          4 5 2 2 2.</_>\n        <_>\n          6 7 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 5 2 3 -1.</_>\n        <_>\n          8 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 6 4 7 -1.</_>\n        <_>\n          7 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 8 3 5 -1.</_>\n        <_>\n          11 8 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 4 3 13 -1.</_>\n        <_>\n          12 4 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 13 3 3 -1.</_>\n        <_>\n          3 13 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 2 -1.</_>\n        <_>\n          5 8 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 1 3 -1.</_>\n        <_>\n          0 5 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 6 6 6 -1.</_>\n        <_>\n          9 6 2 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 7 4 12 -1.</_>\n        <_>\n          9 7 2 12 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 6 3 -1.</_>\n        <_>\n          9 12 3 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 6 9 12 -1.</_>\n        <_>\n          8 10 9 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 3 15 -1.</_>\n        <_>\n          11 5 3 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 6 4 -1.</_>\n        <_>\n          8 16 3 2 2.</_>\n        <_>\n          11 18 3 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 10 6 -1.</_>\n        <_>\n          6 7 10 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 3 4 -1.</_>\n        <_>\n          3 12 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 13 4 3 -1.</_>\n        <_>\n          9 14 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 4 6 -1.</_>\n        <_>\n          3 0 2 3 2.</_>\n        <_>\n          5 3 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 1 -1.</_>\n        <_>\n          8 9 3 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 14 2 3 -1.</_>\n        <_>\n          11 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 2 1 -1.</_>\n        <_>\n          6 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 12 -1.</_>\n        <_>\n          17 4 3 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 3 6 -1.</_>\n        <_>\n          11 13 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 3 7 -1.</_>\n        <_>\n          11 13 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 6 1 -1.</_>\n        <_>\n          8 5 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 2 2 8 -1.</_>\n        <_>\n          19 2 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 3 1 -1.</_>\n        <_>\n          6 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 4 6 -1.</_>\n        <_>\n          8 7 2 3 2.</_>\n        <_>\n          10 10 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 2 2 -1.</_>\n        <_>\n          8 3 1 1 2.</_>\n        <_>\n          9 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          18 5 2 3 -1.</_>\n        <_>\n          18 6 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 7 3 4 -1.</_>\n        <_>\n          18 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 2 2 4 -1.</_>\n        <_>\n          8 2 1 2 2.</_>\n        <_>\n          9 4 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 6 2 2 -1.</_>\n        <_>\n          5 6 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 3 1 -1.</_>\n        <_>\n          5 8 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 9 9 10 -1.</_>\n        <_>\n          10 14 9 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 3 1 -1.</_>\n        <_>\n          7 4 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 14 1 3 -1.</_>\n        <_>\n          8 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 2 1 -1.</_>\n        <_>\n          7 4 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 3 9 -1.</_>\n        <_>\n          5 12 3 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 7 3 -1.</_>\n        <_>\n          5 14 7 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 2 10 -1.</_>\n        <_>\n          9 6 1 5 2.</_>\n        <_>\n          10 11 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 1 3 18 -1.</_>\n        <_>\n          13 10 3 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 13 2 3 -1.</_>\n        <_>\n          5 14 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 7 -1.</_>\n        <_>\n          10 10 1 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 0 3 13 -1.</_>\n        <_>\n          18 0 1 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 1 2 -1.</_>\n        <_>\n          13 7 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 3 2 -1.</_>\n        <_>\n          7 15 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 14 2 3 -1.</_>\n        <_>\n          5 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 6 1 6 -1.</_>\n        <_>\n          16 8 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 6 2 2 -1.</_>\n        <_>\n          1 6 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 12 4 8 -1.</_>\n        <_>\n          3 12 2 4 2.</_>\n        <_>\n          5 16 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 8 -1.</_>\n        <_>\n          7 2 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 6 -1.</_>\n        <_>\n          6 7 1 3 2.</_>\n        <_>\n          7 10 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 12 4 2 -1.</_>\n        <_>\n          7 12 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 13 2 -1.</_>\n        <_>\n          4 10 13 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          19 5 1 2 -1.</_>\n        <_>\n          19 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 9 1 -1.</_>\n        <_>\n          7 8 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 8 2 1 -1.</_>\n        <_>\n          9 8 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 2 10 -1.</_>\n        <_>\n          3 5 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 1 -1.</_>\n        <_>\n          7 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 5 3 3 -1.</_>\n        <_>\n          15 5 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 2 2 -1.</_>\n        <_>\n          4 8 1 1 2.</_>\n        <_>\n          5 9 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 16 9 2 -1.</_>\n        <_>\n          8 17 9 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 2 3 -1.</_>\n        <_>\n          6 8 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 11 2 2 -1.</_>\n        <_>\n          12 11 1 1 2.</_>\n        <_>\n          13 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 2 4 -1.</_>\n        <_>\n          15 11 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 2 3 -1.</_>\n        <_>\n          5 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 11 2 3 -1.</_>\n        <_>\n          6 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 12 1 6 -1.</_>\n        <_>\n          6 15 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 9 5 9 -1.</_>\n        <_>\n          6 12 5 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 2 2 -1.</_>\n        <_>\n          8 12 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 2 -1.</_>\n        <_>\n          10 10 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 10 4 6 -1.</_>\n        <_>\n          8 10 2 3 2.</_>\n        <_>\n          10 13 2 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 9 20 -1.</_>\n        <_>\n          5 0 3 20 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 3 2 4 -1.</_>\n        <_>\n          12 3 1 2 2.</_>\n        <_>\n          13 5 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 0 2 10 -1.</_>\n        <_>\n          16 0 1 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 3 4 -1.</_>\n        <_>\n          14 7 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 10 1 2 -1.</_>\n        <_>\n          14 11 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 3 1 -1.</_>\n        <_>\n          17 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 11 2 2 -1.</_>\n        <_>\n          16 11 1 1 2.</_>\n        <_>\n          17 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 12 6 1 -1.</_>\n        <_>\n          15 12 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 14 9 -1.</_>\n        <_>\n          10 2 7 9 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 4 12 2 -1.</_>\n        <_>\n          11 4 6 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 6 2 1 -1.</_>\n        <_>\n          14 6 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 10 3 3 -1.</_>\n        <_>\n          7 11 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 17 4 2 -1.</_>\n        <_>\n          18 17 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 12 8 8 -1.</_>\n        <_>\n          4 12 4 4 2.</_>\n        <_>\n          8 16 4 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 8 4 5 -1.</_>\n        <_>\n          16 8 2 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 8 6 2 -1.</_>\n        <_>\n          13 8 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 5 16 5 -1.</_>\n        <_>\n          12 5 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 9 6 10 -1.</_>\n        <_>\n          16 9 2 10 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 18 3 1 -1.</_>\n        <_>\n          5 18 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 13 4 4 -1.</_>\n        <_>\n          4 13 2 2 2.</_>\n        <_>\n          6 15 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 2 3 -1.</_>\n        <_>\n          6 16 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 1 3 -1.</_>\n        <_>\n          6 16 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 3 1 -1.</_>\n        <_>\n          8 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 3 1 -1.</_>\n        <_>\n          8 17 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 4 1 -1.</_>\n        <_>\n          11 10 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 12 2 1 -1.</_>\n        <_>\n          12 12 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 8 1 6 -1.</_>\n        <_>\n          7 11 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 7 3 3 -1.</_>\n        <_>\n          7 7 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 10 1 3 -1.</_>\n        <_>\n          13 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 2 4 -1.</_>\n        <_>\n          5 10 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 8 6 6 -1.</_>\n        <_>\n          8 8 3 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 4 13 -1.</_>\n        <_>\n          8 5 2 13 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 4 10 8 -1.</_>\n        <_>\n          8 4 5 4 2.</_>\n        <_>\n          13 8 5 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 9 6 -1.</_>\n        <_>\n          11 3 3 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 0 6 3 -1.</_>\n        <_>\n          13 0 2 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 15 -1.</_>\n        <_>\n          12 1 1 15 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 14 9 -1.</_>\n        <_>\n          4 11 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 2 1 16 -1.</_>\n        <_>\n          11 10 1 8 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          12 1 2 14 -1.</_>\n        <_>\n          12 8 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 1 3 4 -1.</_>\n        <_>\n          12 1 1 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 4 2 -1.</_>\n        <_>\n          9 8 2 1 2.</_>\n        <_>\n          11 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          17 3 2 2 -1.</_>\n        <_>\n          18 3 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 6 3 2 -1.</_>\n        <_>\n          3 6 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 8 2 2 -1.</_>\n        <_>\n          9 9 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 15 6 1 -1.</_>\n        <_>\n          8 15 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 2 4 -1.</_>\n        <_>\n          16 10 1 2 2.</_>\n        <_>\n          17 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 6 10 6 -1.</_>\n        <_>\n          6 6 5 3 2.</_>\n        <_>\n          11 9 5 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 8 3 3 -1.</_>\n        <_>\n          13 9 3 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 0 4 2 -1.</_>\n        <_>\n          13 0 2 1 2.</_>\n        <_>\n          15 1 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 0 10 2 -1.</_>\n        <_>\n          10 0 5 1 2.</_>\n        <_>\n          15 1 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 13 2 1 -1.</_>\n        <_>\n          14 13 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 2 2 -1.</_>\n        <_>\n          4 9 1 1 2.</_>\n        <_>\n          5 10 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 8 2 3 -1.</_>\n        <_>\n          6 9 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 12 2 3 -1.</_>\n        <_>\n          2 13 2 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 0 10 2 -1.</_>\n        <_>\n          2 0 5 1 2.</_>\n        <_>\n          7 1 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 2 2 2 -1.</_>\n        <_>\n          6 3 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 8 2 -1.</_>\n        <_>\n          5 11 8 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 7 5 10 -1.</_>\n        <_>\n          11 12 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 4 3 -1.</_>\n        <_>\n          5 11 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 6 6 12 -1.</_>\n        <_>\n          9 12 6 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 10 3 5 -1.</_>\n        <_>\n          17 10 1 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 12 2 4 -1.</_>\n        <_>\n          15 12 1 2 2.</_>\n        <_>\n          16 14 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 0 12 8 -1.</_>\n        <_>\n          8 0 6 4 2.</_>\n        <_>\n          14 4 6 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 1 5 3 -1.</_>\n        <_>\n          14 2 5 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          2 2 3 6 -1.</_>\n        <_>\n          3 2 1 6 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 5 2 2 -1.</_>\n        <_>\n          7 5 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 12 12 1 -1.</_>\n        <_>\n          11 12 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 9 7 2 -1.</_>\n        <_>\n          13 10 7 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 1 3 -1.</_>\n        <_>\n          5 11 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 4 15 2 -1.</_>\n        <_>\n          5 4 5 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 0 9 13 -1.</_>\n        <_>\n          6 0 3 13 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 10 6 2 -1.</_>\n        <_>\n          7 10 2 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 3 4 2 -1.</_>\n        <_>\n          8 3 2 1 2.</_>\n        <_>\n          10 4 2 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 6 -1.</_>\n        <_>\n          8 7 1 3 2.</_>\n        <_>\n          9 10 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 7 2 3 -1.</_>\n        <_>\n          9 7 1 3 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 3 3 -1.</_>\n        <_>\n          6 11 1 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 1 1 2 -1.</_>\n        <_>\n          0 2 1 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 1 6 -1.</_>\n        <_>\n          7 2 1 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 0 2 5 -1.</_>\n        <_>\n          15 0 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          3 2 12 1 -1.</_>\n        <_>\n          7 2 4 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          11 13 5 2 -1.</_>\n        <_>\n          11 14 5 1 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 14 1 3 -1.</_>\n        <_>\n          13 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 17 12 2 -1.</_>\n        <_>\n          11 17 4 2 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 0 13 20 -1.</_>\n        <_>\n          0 10 13 10 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 7 10 12 -1.</_>\n        <_>\n          4 13 10 6 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 12 2 2 -1.</_>\n        <_>\n          11 12 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 4 4 -1.</_>\n        <_>\n          11 11 2 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 9 16 5 -1.</_>\n        <_>\n          12 9 8 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 2 4 -1.</_>\n        <_>\n          17 9 1 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 9 3 1 -1.</_>\n        <_>\n          16 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 3 4 11 -1.</_>\n        <_>\n          16 3 2 11 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 3 10 10 -1.</_>\n        <_>\n          4 3 5 5 2.</_>\n        <_>\n          9 8 5 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          16 9 3 1 -1.</_>\n        <_>\n          17 9 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          6 4 14 9 -1.</_>\n        <_>\n          6 7 14 3 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          8 11 2 4 -1.</_>\n        <_>\n          8 13 2 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 9 6 8 -1.</_>\n        <_>\n          5 9 3 4 2.</_>\n        <_>\n          8 13 3 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          5 11 4 4 -1.</_>\n        <_>\n          5 13 4 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 1 3 -1.</_>\n        <_>\n          7 15 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 10 3 1 -1.</_>\n        <_>\n          10 10 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          4 8 2 4 -1.</_>\n        <_>\n          4 8 1 2 2.</_>\n        <_>\n          5 10 1 2 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          14 6 2 5 -1.</_>\n        <_>\n          15 6 1 5 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          13 7 6 7 -1.</_>\n        <_>\n          15 7 2 7 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          15 6 4 7 -1.</_>\n        <_>\n          17 6 2 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          9 11 6 5 -1.</_>\n        <_>\n          11 11 2 5 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          0 8 20 4 -1.</_>\n        <_>\n          10 8 10 4 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          1 2 8 14 -1.</_>\n        <_>\n          1 2 4 7 2.</_>\n        <_>\n          5 9 4 7 2.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          10 13 3 1 -1.</_>\n        <_>\n          11 13 1 1 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 0 6 4 -1.</_>\n        <_>\n          9 0 2 4 3.</_></rects></_>\n    <_>\n      <rects>\n        <_>\n          7 14 6 2 -1.</_>\n        <_>\n          7 14 3 1 2.</_>\n        <_>\n          10 15 3 1 2.</_></rects></_></features></cascade>\n</opencv_storage>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/cv.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OLD_CV_H__\n#define __OPENCV_OLD_CV_H__\n\n#if defined(_MSC_VER)\n    #define CV_DO_PRAGMA(x) __pragma(x)\n    #define __CVSTR2__(x) #x\n    #define __CVSTR1__(x) __CVSTR2__(x)\n    #define __CVMSVCLOC__ __FILE__ \"(\"__CVSTR1__(__LINE__)\") : \"\n    #define CV_MSG_PRAGMA(_msg) CV_DO_PRAGMA(message (__CVMSVCLOC__ _msg))\n#elif defined(__GNUC__)\n    #define CV_DO_PRAGMA(x) _Pragma (#x)\n    #define CV_MSG_PRAGMA(_msg) CV_DO_PRAGMA(message (_msg))\n#else\n    #define CV_DO_PRAGMA(x)\n    #define CV_MSG_PRAGMA(_msg)\n#endif\n#define CV_WARNING(x) CV_MSG_PRAGMA(\"Warning: \" #x)\n\n//CV_WARNING(\"This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module\")\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/imgproc/imgproc_c.h\"\n#include \"opencv2/photo/photo_c.h\"\n#include \"opencv2/video/tracking_c.h\"\n#include \"opencv2/objdetect/objdetect_c.h\"\n\n#if !defined(CV_IMPL)\n#define CV_IMPL extern \"C\"\n#endif //CV_IMPL\n\n#endif // __OPENCV_OLD_CV_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/cv.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OLD_CV_HPP__\n#define __OPENCV_OLD_CV_HPP__\n\n//#if defined(__GNUC__)\n//#warning \"This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module\"\n//#endif\n\n#include \"cv.h\"\n#include \"opencv2/core.hpp\"\n#include \"opencv2/imgproc.hpp\"\n#include \"opencv2/photo.hpp\"\n#include \"opencv2/video.hpp\"\n#include \"opencv2/highgui.hpp\"\n#include \"opencv2/features2d.hpp\"\n#include \"opencv2/calib3d.hpp\"\n#include \"opencv2/objdetect.hpp\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/cvaux.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OLD_AUX_H__\n#define __OPENCV_OLD_AUX_H__\n\n//#if defined(__GNUC__)\n//#warning \"This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module\"\n//#endif\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/imgproc/imgproc_c.h\"\n#include \"opencv2/photo/photo_c.h\"\n#include \"opencv2/video/tracking_c.h\"\n#include \"opencv2/objdetect/objdetect_c.h\"\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/cvaux.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OLD_AUX_HPP__\n#define __OPENCV_OLD_AUX_HPP__\n\n//#if defined(__GNUC__)\n//#warning \"This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module\"\n//#endif\n\n#include \"cvaux.h\"\n#include \"opencv2/core/utility.hpp\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/cvwimage.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to\n//  this license.  If you do not agree to this license, do not download,\n//  install, copy or use the software.\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2008, Google, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n//  * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//  * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//  * The name of Intel Corporation or contributors may not be used to endorse\n//     or promote products derived from this software without specific\n//     prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\"\n// and any express or implied warranties, including, but not limited to, the\n// implied warranties of merchantability and fitness for a particular purpose\n// are disclaimed. In no event shall the Intel Corporation or contributors be\n// liable for any direct, indirect, incidental, special, exemplary, or\n// consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n\n\n#ifndef __OPENCV_OLD_WIMAGE_HPP__\n#define __OPENCV_OLD_WIMAGE_HPP__\n\n#include \"opencv2/core/wimage.hpp\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/cxcore.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OLD_CXCORE_H__\n#define __OPENCV_OLD_CXCORE_H__\n\n//#if defined(__GNUC__)\n//#warning \"This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module\"\n//#endif\n\n#include \"opencv2/core/core_c.h\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/cxcore.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OLD_CXCORE_HPP__\n#define __OPENCV_OLD_CXCORE_HPP__\n\n//#if defined(__GNUC__)\n//#warning \"This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module\"\n//#endif\n\n#include \"cxcore.h\"\n#include \"opencv2/core.hpp\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/cxeigen.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OLD_EIGEN_HPP__\n#define __OPENCV_OLD_EIGEN_HPP__\n\n#include \"opencv2/core/eigen.hpp\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/cxmisc.h",
    "content": "#ifndef __OPENCV_OLD_CXMISC_H__\n#define __OPENCV_OLD_CXMISC_H__\n\n#ifdef __cplusplus\n#  include \"opencv2/core/utility.hpp\"\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/highgui.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OLD_HIGHGUI_H__\n#define __OPENCV_OLD_HIGHGUI_H__\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/highgui/highgui_c.h\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv/ml.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OLD_ML_H__\n#define __OPENCV_OLD_ML_H__\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/ml.hpp\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/calib3d/calib3d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/calib3d.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/calib3d/calib3d_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CALIB3D_C_H__\n#define __OPENCV_CALIB3D_C_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @addtogroup calib3d_c\n  @{\n  */\n\n/****************************************************************************************\\\n*                      Camera Calibration, Pose Estimation and Stereo                    *\n\\****************************************************************************************/\n\ntypedef struct CvPOSITObject CvPOSITObject;\n\n/* Allocates and initializes CvPOSITObject structure before doing cvPOSIT */\nCVAPI(CvPOSITObject*)  cvCreatePOSITObject( CvPoint3D32f* points, int point_count );\n\n\n/* Runs POSIT (POSe from ITeration) algorithm for determining 3d position of\n   an object given its model and projection in a weak-perspective case */\nCVAPI(void)  cvPOSIT(  CvPOSITObject* posit_object, CvPoint2D32f* image_points,\n                       double focal_length, CvTermCriteria criteria,\n                       float* rotation_matrix, float* translation_vector);\n\n/* Releases CvPOSITObject structure */\nCVAPI(void)  cvReleasePOSITObject( CvPOSITObject**  posit_object );\n\n/* updates the number of RANSAC iterations */\nCVAPI(int) cvRANSACUpdateNumIters( double p, double err_prob,\n                                   int model_points, int max_iters );\n\nCVAPI(void) cvConvertPointsHomogeneous( const CvMat* src, CvMat* dst );\n\n/* Calculates fundamental matrix given a set of corresponding points */\n#define CV_FM_7POINT 1\n#define CV_FM_8POINT 2\n\n#define CV_LMEDS 4\n#define CV_RANSAC 8\n\n#define CV_FM_LMEDS_ONLY  CV_LMEDS\n#define CV_FM_RANSAC_ONLY CV_RANSAC\n#define CV_FM_LMEDS CV_LMEDS\n#define CV_FM_RANSAC CV_RANSAC\n\nenum\n{\n    CV_ITERATIVE = 0,\n    CV_EPNP = 1, // F.Moreno-Noguer, V.Lepetit and P.Fua \"EPnP: Efficient Perspective-n-Point Camera Pose Estimation\"\n    CV_P3P = 2, // X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang; \"Complete Solution Classification for the Perspective-Three-Point Problem\"\n    CV_DLS = 3 // Joel A. Hesch and Stergios I. Roumeliotis. \"A Direct Least-Squares (DLS) Method for PnP\"\n};\n\nCVAPI(int) cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,\n                                 CvMat* fundamental_matrix,\n                                 int method CV_DEFAULT(CV_FM_RANSAC),\n                                 double param1 CV_DEFAULT(3.), double param2 CV_DEFAULT(0.99),\n                                 CvMat* status CV_DEFAULT(NULL) );\n\n/* For each input point on one of images\n   computes parameters of the corresponding\n   epipolar line on the other image */\nCVAPI(void) cvComputeCorrespondEpilines( const CvMat* points,\n                                         int which_image,\n                                         const CvMat* fundamental_matrix,\n                                         CvMat* correspondent_lines );\n\n/* Triangulation functions */\n\nCVAPI(void) cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2,\n                                CvMat* projPoints1, CvMat* projPoints2,\n                                CvMat* points4D);\n\nCVAPI(void) cvCorrectMatches(CvMat* F, CvMat* points1, CvMat* points2,\n                             CvMat* new_points1, CvMat* new_points2);\n\n\n/* Computes the optimal new camera matrix according to the free scaling parameter alpha:\n   alpha=0 - only valid pixels will be retained in the undistorted image\n   alpha=1 - all the source image pixels will be retained in the undistorted image\n*/\nCVAPI(void) cvGetOptimalNewCameraMatrix( const CvMat* camera_matrix,\n                                         const CvMat* dist_coeffs,\n                                         CvSize image_size, double alpha,\n                                         CvMat* new_camera_matrix,\n                                         CvSize new_imag_size CV_DEFAULT(cvSize(0,0)),\n                                         CvRect* valid_pixel_ROI CV_DEFAULT(0),\n                                         int center_principal_point CV_DEFAULT(0));\n\n/* Converts rotation vector to rotation matrix or vice versa */\nCVAPI(int) cvRodrigues2( const CvMat* src, CvMat* dst,\n                         CvMat* jacobian CV_DEFAULT(0) );\n\n/* Finds perspective transformation between the object plane and image (view) plane */\nCVAPI(int) cvFindHomography( const CvMat* src_points,\n                             const CvMat* dst_points,\n                             CvMat* homography,\n                             int method CV_DEFAULT(0),\n                             double ransacReprojThreshold CV_DEFAULT(3),\n                             CvMat* mask CV_DEFAULT(0),\n                             int maxIters CV_DEFAULT(2000),\n                             double confidence CV_DEFAULT(0.995));\n\n/* Computes RQ decomposition for 3x3 matrices */\nCVAPI(void) cvRQDecomp3x3( const CvMat *matrixM, CvMat *matrixR, CvMat *matrixQ,\n                           CvMat *matrixQx CV_DEFAULT(NULL),\n                           CvMat *matrixQy CV_DEFAULT(NULL),\n                           CvMat *matrixQz CV_DEFAULT(NULL),\n                           CvPoint3D64f *eulerAngles CV_DEFAULT(NULL));\n\n/* Computes projection matrix decomposition */\nCVAPI(void) cvDecomposeProjectionMatrix( const CvMat *projMatr, CvMat *calibMatr,\n                                         CvMat *rotMatr, CvMat *posVect,\n                                         CvMat *rotMatrX CV_DEFAULT(NULL),\n                                         CvMat *rotMatrY CV_DEFAULT(NULL),\n                                         CvMat *rotMatrZ CV_DEFAULT(NULL),\n                                         CvPoint3D64f *eulerAngles CV_DEFAULT(NULL));\n\n/* Computes d(AB)/dA and d(AB)/dB */\nCVAPI(void) cvCalcMatMulDeriv( const CvMat* A, const CvMat* B, CvMat* dABdA, CvMat* dABdB );\n\n/* Computes r3 = rodrigues(rodrigues(r2)*rodrigues(r1)),\n   t3 = rodrigues(r2)*t1 + t2 and the respective derivatives */\nCVAPI(void) cvComposeRT( const CvMat* _rvec1, const CvMat* _tvec1,\n                         const CvMat* _rvec2, const CvMat* _tvec2,\n                         CvMat* _rvec3, CvMat* _tvec3,\n                         CvMat* dr3dr1 CV_DEFAULT(0), CvMat* dr3dt1 CV_DEFAULT(0),\n                         CvMat* dr3dr2 CV_DEFAULT(0), CvMat* dr3dt2 CV_DEFAULT(0),\n                         CvMat* dt3dr1 CV_DEFAULT(0), CvMat* dt3dt1 CV_DEFAULT(0),\n                         CvMat* dt3dr2 CV_DEFAULT(0), CvMat* dt3dt2 CV_DEFAULT(0) );\n\n/* Projects object points to the view plane using\n   the specified extrinsic and intrinsic camera parameters */\nCVAPI(void) cvProjectPoints2( const CvMat* object_points, const CvMat* rotation_vector,\n                              const CvMat* translation_vector, const CvMat* camera_matrix,\n                              const CvMat* distortion_coeffs, CvMat* image_points,\n                              CvMat* dpdrot CV_DEFAULT(NULL), CvMat* dpdt CV_DEFAULT(NULL),\n                              CvMat* dpdf CV_DEFAULT(NULL), CvMat* dpdc CV_DEFAULT(NULL),\n                              CvMat* dpddist CV_DEFAULT(NULL),\n                              double aspect_ratio CV_DEFAULT(0));\n\n/* Finds extrinsic camera parameters from\n   a few known corresponding point pairs and intrinsic parameters */\nCVAPI(void) cvFindExtrinsicCameraParams2( const CvMat* object_points,\n                                          const CvMat* image_points,\n                                          const CvMat* camera_matrix,\n                                          const CvMat* distortion_coeffs,\n                                          CvMat* rotation_vector,\n                                          CvMat* translation_vector,\n                                          int use_extrinsic_guess CV_DEFAULT(0) );\n\n/* Computes initial estimate of the intrinsic camera parameters\n   in case of planar calibration target (e.g. chessboard) */\nCVAPI(void) cvInitIntrinsicParams2D( const CvMat* object_points,\n                                     const CvMat* image_points,\n                                     const CvMat* npoints, CvSize image_size,\n                                     CvMat* camera_matrix,\n                                     double aspect_ratio CV_DEFAULT(1.) );\n\n#define CV_CALIB_CB_ADAPTIVE_THRESH  1\n#define CV_CALIB_CB_NORMALIZE_IMAGE  2\n#define CV_CALIB_CB_FILTER_QUADS     4\n#define CV_CALIB_CB_FAST_CHECK       8\n\n// Performs a fast check if a chessboard is in the input image. This is a workaround to\n// a problem of cvFindChessboardCorners being slow on images with no chessboard\n// - src: input image\n// - size: chessboard size\n// Returns 1 if a chessboard can be in this image and findChessboardCorners should be called,\n// 0 if there is no chessboard, -1 in case of error\nCVAPI(int) cvCheckChessboard(IplImage* src, CvSize size);\n\n    /* Detects corners on a chessboard calibration pattern */\nCVAPI(int) cvFindChessboardCorners( const void* image, CvSize pattern_size,\n                                    CvPoint2D32f* corners,\n                                    int* corner_count CV_DEFAULT(NULL),\n                                    int flags CV_DEFAULT(CV_CALIB_CB_ADAPTIVE_THRESH+CV_CALIB_CB_NORMALIZE_IMAGE) );\n\n/* Draws individual chessboard corners or the whole chessboard detected */\nCVAPI(void) cvDrawChessboardCorners( CvArr* image, CvSize pattern_size,\n                                     CvPoint2D32f* corners,\n                                     int count, int pattern_was_found );\n\n#define CV_CALIB_USE_INTRINSIC_GUESS  1\n#define CV_CALIB_FIX_ASPECT_RATIO     2\n#define CV_CALIB_FIX_PRINCIPAL_POINT  4\n#define CV_CALIB_ZERO_TANGENT_DIST    8\n#define CV_CALIB_FIX_FOCAL_LENGTH 16\n#define CV_CALIB_FIX_K1  32\n#define CV_CALIB_FIX_K2  64\n#define CV_CALIB_FIX_K3  128\n#define CV_CALIB_FIX_K4  2048\n#define CV_CALIB_FIX_K5  4096\n#define CV_CALIB_FIX_K6  8192\n#define CV_CALIB_RATIONAL_MODEL 16384\n#define CV_CALIB_THIN_PRISM_MODEL 32768\n#define CV_CALIB_FIX_S1_S2_S3_S4  65536\n#define CV_CALIB_TILTED_MODEL  262144\n#define CV_CALIB_FIX_TAUX_TAUY  524288\n\n\n/* Finds intrinsic and extrinsic camera parameters\n   from a few views of known calibration pattern */\nCVAPI(double) cvCalibrateCamera2( const CvMat* object_points,\n                                const CvMat* image_points,\n                                const CvMat* point_counts,\n                                CvSize image_size,\n                                CvMat* camera_matrix,\n                                CvMat* distortion_coeffs,\n                                CvMat* rotation_vectors CV_DEFAULT(NULL),\n                                CvMat* translation_vectors CV_DEFAULT(NULL),\n                                int flags CV_DEFAULT(0),\n                                CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria(\n                                    CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,DBL_EPSILON)) );\n\n/* Computes various useful characteristics of the camera from the data computed by\n   cvCalibrateCamera2 */\nCVAPI(void) cvCalibrationMatrixValues( const CvMat *camera_matrix,\n                                CvSize image_size,\n                                double aperture_width CV_DEFAULT(0),\n                                double aperture_height CV_DEFAULT(0),\n                                double *fovx CV_DEFAULT(NULL),\n                                double *fovy CV_DEFAULT(NULL),\n                                double *focal_length CV_DEFAULT(NULL),\n                                CvPoint2D64f *principal_point CV_DEFAULT(NULL),\n                                double *pixel_aspect_ratio CV_DEFAULT(NULL));\n\n#define CV_CALIB_FIX_INTRINSIC  256\n#define CV_CALIB_SAME_FOCAL_LENGTH 512\n\n/* Computes the transformation from one camera coordinate system to another one\n   from a few correspondent views of the same calibration target. Optionally, calibrates\n   both cameras */\nCVAPI(double) cvStereoCalibrate( const CvMat* object_points, const CvMat* image_points1,\n                               const CvMat* image_points2, const CvMat* npoints,\n                               CvMat* camera_matrix1, CvMat* dist_coeffs1,\n                               CvMat* camera_matrix2, CvMat* dist_coeffs2,\n                               CvSize image_size, CvMat* R, CvMat* T,\n                               CvMat* E CV_DEFAULT(0), CvMat* F CV_DEFAULT(0),\n                               int flags CV_DEFAULT(CV_CALIB_FIX_INTRINSIC),\n                               CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria(\n                                   CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,1e-6)) );\n\n#define CV_CALIB_ZERO_DISPARITY 1024\n\n/* Computes 3D rotations (+ optional shift) for each camera coordinate system to make both\n   views parallel (=> to make all the epipolar lines horizontal or vertical) */\nCVAPI(void) cvStereoRectify( const CvMat* camera_matrix1, const CvMat* camera_matrix2,\n                             const CvMat* dist_coeffs1, const CvMat* dist_coeffs2,\n                             CvSize image_size, const CvMat* R, const CvMat* T,\n                             CvMat* R1, CvMat* R2, CvMat* P1, CvMat* P2,\n                             CvMat* Q CV_DEFAULT(0),\n                             int flags CV_DEFAULT(CV_CALIB_ZERO_DISPARITY),\n                             double alpha CV_DEFAULT(-1),\n                             CvSize new_image_size CV_DEFAULT(cvSize(0,0)),\n                             CvRect* valid_pix_ROI1 CV_DEFAULT(0),\n                             CvRect* valid_pix_ROI2 CV_DEFAULT(0));\n\n/* Computes rectification transformations for uncalibrated pair of images using a set\n   of point correspondences */\nCVAPI(int) cvStereoRectifyUncalibrated( const CvMat* points1, const CvMat* points2,\n                                        const CvMat* F, CvSize img_size,\n                                        CvMat* H1, CvMat* H2,\n                                        double threshold CV_DEFAULT(5));\n\n\n\n/* stereo correspondence parameters and functions */\n\n#define CV_STEREO_BM_NORMALIZED_RESPONSE  0\n#define CV_STEREO_BM_XSOBEL               1\n\n/* Block matching algorithm structure */\ntypedef struct CvStereoBMState\n{\n    // pre-filtering (normalization of input images)\n    int preFilterType; // =CV_STEREO_BM_NORMALIZED_RESPONSE now\n    int preFilterSize; // averaging window size: ~5x5..21x21\n    int preFilterCap; // the output of pre-filtering is clipped by [-preFilterCap,preFilterCap]\n\n    // correspondence using Sum of Absolute Difference (SAD)\n    int SADWindowSize; // ~5x5..21x21\n    int minDisparity;  // minimum disparity (can be negative)\n    int numberOfDisparities; // maximum disparity - minimum disparity (> 0)\n\n    // post-filtering\n    int textureThreshold;  // the disparity is only computed for pixels\n                           // with textured enough neighborhood\n    int uniquenessRatio;   // accept the computed disparity d* only if\n                           // SAD(d) >= SAD(d*)*(1 + uniquenessRatio/100.)\n                           // for any d != d*+/-1 within the search range.\n    int speckleWindowSize; // disparity variation window\n    int speckleRange; // acceptable range of variation in window\n\n    int trySmallerWindows; // if 1, the results may be more accurate,\n                           // at the expense of slower processing\n    CvRect roi1, roi2;\n    int disp12MaxDiff;\n\n    // temporary buffers\n    CvMat* preFilteredImg0;\n    CvMat* preFilteredImg1;\n    CvMat* slidingSumBuf;\n    CvMat* cost;\n    CvMat* disp;\n} CvStereoBMState;\n\n#define CV_STEREO_BM_BASIC 0\n#define CV_STEREO_BM_FISH_EYE 1\n#define CV_STEREO_BM_NARROW 2\n\nCVAPI(CvStereoBMState*) cvCreateStereoBMState(int preset CV_DEFAULT(CV_STEREO_BM_BASIC),\n                                              int numberOfDisparities CV_DEFAULT(0));\n\nCVAPI(void) cvReleaseStereoBMState( CvStereoBMState** state );\n\nCVAPI(void) cvFindStereoCorrespondenceBM( const CvArr* left, const CvArr* right,\n                                          CvArr* disparity, CvStereoBMState* state );\n\nCVAPI(CvRect) cvGetValidDisparityROI( CvRect roi1, CvRect roi2, int minDisparity,\n                                      int numberOfDisparities, int SADWindowSize );\n\nCVAPI(void) cvValidateDisparity( CvArr* disparity, const CvArr* cost,\n                                 int minDisparity, int numberOfDisparities,\n                                 int disp12MaxDiff CV_DEFAULT(1) );\n\n/* Reprojects the computed disparity image to the 3D space using the specified 4x4 matrix */\nCVAPI(void)  cvReprojectImageTo3D( const CvArr* disparityImage,\n                                   CvArr* _3dImage, const CvMat* Q,\n                                   int handleMissingValues CV_DEFAULT(0) );\n\n/** @} calib3d_c */\n\n#ifdef __cplusplus\n} // extern \"C\"\n\n//////////////////////////////////////////////////////////////////////////////////////////\nclass CV_EXPORTS CvLevMarq\n{\npublic:\n    CvLevMarq();\n    CvLevMarq( int nparams, int nerrs, CvTermCriteria criteria=\n              cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),\n              bool completeSymmFlag=false );\n    ~CvLevMarq();\n    void init( int nparams, int nerrs, CvTermCriteria criteria=\n              cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),\n              bool completeSymmFlag=false );\n    bool update( const CvMat*& param, CvMat*& J, CvMat*& err );\n    bool updateAlt( const CvMat*& param, CvMat*& JtJ, CvMat*& JtErr, double*& errNorm );\n\n    void clear();\n    void step();\n    enum { DONE=0, STARTED=1, CALC_J=2, CHECK_ERR=3 };\n\n    cv::Ptr<CvMat> mask;\n    cv::Ptr<CvMat> prevParam;\n    cv::Ptr<CvMat> param;\n    cv::Ptr<CvMat> J;\n    cv::Ptr<CvMat> err;\n    cv::Ptr<CvMat> JtJ;\n    cv::Ptr<CvMat> JtJN;\n    cv::Ptr<CvMat> JtErr;\n    cv::Ptr<CvMat> JtJV;\n    cv::Ptr<CvMat> JtJW;\n    double prevErrNorm, errNorm;\n    int lambdaLg10;\n    CvTermCriteria criteria;\n    int state;\n    int iters;\n    bool completeSymmFlag;\n    int solveMethod;\n};\n\n#endif\n\n#endif /* __OPENCV_CALIB3D_C_H__ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/calib3d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CALIB3D_HPP__\n#define __OPENCV_CALIB3D_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/features2d.hpp\"\n#include \"opencv2/core/affine.hpp\"\n\n/**\n  @defgroup calib3d Camera Calibration and 3D Reconstruction\n\nThe functions in this section use a so-called pinhole camera model. In this model, a scene view is\nformed by projecting 3D points into the image plane using a perspective transformation.\n\n\\f[s  \\; m' = A [R|t] M'\\f]\n\nor\n\n\\f[s  \\vecthree{u}{v}{1} = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\n\\begin{bmatrix}\nr_{11} & r_{12} & r_{13} & t_1  \\\\\nr_{21} & r_{22} & r_{23} & t_2  \\\\\nr_{31} & r_{32} & r_{33} & t_3\n\\end{bmatrix}\n\\begin{bmatrix}\nX \\\\\nY \\\\\nZ \\\\\n1\n\\end{bmatrix}\\f]\n\nwhere:\n\n-   \\f$(X, Y, Z)\\f$ are the coordinates of a 3D point in the world coordinate space\n-   \\f$(u, v)\\f$ are the coordinates of the projection point in pixels\n-   \\f$A\\f$ is a camera matrix, or a matrix of intrinsic parameters\n-   \\f$(cx, cy)\\f$ is a principal point that is usually at the image center\n-   \\f$fx, fy\\f$ are the focal lengths expressed in pixel units.\n\nThus, if an image from the camera is scaled by a factor, all of these parameters should be scaled\n(multiplied/divided, respectively) by the same factor. The matrix of intrinsic parameters does not\ndepend on the scene viewed. So, once estimated, it can be re-used as long as the focal length is\nfixed (in case of zoom lens). The joint rotation-translation matrix \\f$[R|t]\\f$ is called a matrix of\nextrinsic parameters. It is used to describe the camera motion around a static scene, or vice versa,\nrigid motion of an object in front of a still camera. That is, \\f$[R|t]\\f$ translates coordinates of a\npoint \\f$(X, Y, Z)\\f$ to a coordinate system, fixed with respect to the camera. The transformation above\nis equivalent to the following (when \\f$z \\ne 0\\f$ ):\n\n\\f[\\begin{array}{l}\n\\vecthree{x}{y}{z} = R  \\vecthree{X}{Y}{Z} + t \\\\\nx' = x/z \\\\\ny' = y/z \\\\\nu = f_x*x' + c_x \\\\\nv = f_y*y' + c_y\n\\end{array}\\f]\n\nReal lenses usually have some distortion, mostly radial distortion and slight tangential distortion.\nSo, the above model is extended as:\n\n\\f[\\begin{array}{l}\n\\vecthree{x}{y}{z} = R  \\vecthree{X}{Y}{Z} + t \\\\\nx' = x/z \\\\\ny' = y/z \\\\\nx'' = x'  \\frac{1 + k_1 r^2 + k_2 r^4 + k_3 r^6}{1 + k_4 r^2 + k_5 r^4 + k_6 r^6} + 2 p_1 x' y' + p_2(r^2 + 2 x'^2) + s_1 r^2 + s_2 r^4 \\\\\ny'' = y'  \\frac{1 + k_1 r^2 + k_2 r^4 + k_3 r^6}{1 + k_4 r^2 + k_5 r^4 + k_6 r^6} + p_1 (r^2 + 2 y'^2) + 2 p_2 x' y' + s_3 r^2 + s_4 r^4 \\\\\n\\text{where} \\quad r^2 = x'^2 + y'^2  \\\\\nu = f_x*x'' + c_x \\\\\nv = f_y*y'' + c_y\n\\end{array}\\f]\n\n\\f$k_1\\f$, \\f$k_2\\f$, \\f$k_3\\f$, \\f$k_4\\f$, \\f$k_5\\f$, and \\f$k_6\\f$ are radial distortion coefficients. \\f$p_1\\f$ and \\f$p_2\\f$ are\ntangential distortion coefficients. \\f$s_1\\f$, \\f$s_2\\f$, \\f$s_3\\f$, and \\f$s_4\\f$, are the thin prism distortion\ncoefficients. Higher-order coefficients are not considered in OpenCV.\n\nIn some cases the image sensor may be tilted in order to focus an oblique plane in front of the\ncamera (Scheimpfug condition). This can be useful for particle image velocimetry (PIV) or\ntriangulation with a laser fan. The tilt causes a perspective distortion of \\f$x''\\f$ and\n\\f$y''\\f$. This distortion can be modelled in the following way, see e.g. @cite Louhichi07.\n\n\\f[\\begin{array}{l}\ns\\vecthree{x'''}{y'''}{1} =\n\\vecthreethree{R_{33}(\\tau_x, \\tau_y)}{0}{-R_{13}(\\tau_x, \\tau_y)}\n{0}{R_{33}(\\tau_x, \\tau_y)}{-R_{23}(\\tau_x, \\tau_y)}\n{0}{0}{1} R(\\tau_x, \\tau_y) \\vecthree{x''}{y''}{1}\\\\\nu = f_x*x''' + c_x \\\\\nv = f_y*y''' + c_y\n\\end{array}\\f]\n\nwhere the matrix \\f$R(\\tau_x, \\tau_y)\\f$ is defined by two rotations with angular parameter \\f$\\tau_x\\f$\nand \\f$\\tau_y\\f$, respectively,\n\n\\f[\nR(\\tau_x, \\tau_y) =\n\\vecthreethree{\\cos(\\tau_y)}{0}{-\\sin(\\tau_y)}{0}{1}{0}{\\sin(\\tau_y)}{0}{\\cos(\\tau_y)}\n\\vecthreethree{1}{0}{0}{0}{\\cos(\\tau_x)}{\\sin(\\tau_x)}{0}{-\\sin(\\tau_x)}{\\cos(\\tau_x)} =\n\\vecthreethree{\\cos(\\tau_y)}{\\sin(\\tau_y)\\sin(\\tau_x)}{-\\sin(\\tau_y)\\cos(\\tau_x)}\n{0}{\\cos(\\tau_x)}{\\sin(\\tau_x)}\n{\\sin(\\tau_y)}{-\\cos(\\tau_y)\\sin(\\tau_x)}{\\cos(\\tau_y)\\cos(\\tau_x)}.\n\\f]\n\nIn the functions below the coefficients are passed or returned as\n\n\\f[(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f]\n\nvector. That is, if the vector contains four elements, it means that \\f$k_3=0\\f$ . The distortion\ncoefficients do not depend on the scene viewed. Thus, they also belong to the intrinsic camera\nparameters. And they remain the same regardless of the captured image resolution. If, for example, a\ncamera has been calibrated on images of 320 x 240 resolution, absolutely the same distortion\ncoefficients can be used for 640 x 480 images from the same camera while \\f$f_x\\f$, \\f$f_y\\f$, \\f$c_x\\f$, and\n\\f$c_y\\f$ need to be scaled appropriately.\n\nThe functions below use the above model to do the following:\n\n-   Project 3D points to the image plane given intrinsic and extrinsic parameters.\n-   Compute extrinsic parameters given intrinsic parameters, a few 3D points, and their\nprojections.\n-   Estimate intrinsic and extrinsic camera parameters from several views of a known calibration\npattern (every view is described by several 3D-2D point correspondences).\n-   Estimate the relative position and orientation of the stereo camera \"heads\" and compute the\n*rectification* transformation that makes the camera optical axes parallel.\n\n@note\n   -   A calibration sample for 3 cameras in horizontal position can be found at\n        opencv_source_code/samples/cpp/3calibration.cpp\n    -   A calibration sample based on a sequence of images can be found at\n        opencv_source_code/samples/cpp/calibration.cpp\n    -   A calibration sample in order to do 3D reconstruction can be found at\n        opencv_source_code/samples/cpp/build3dmodel.cpp\n    -   A calibration sample of an artificially generated camera and chessboard patterns can be\n        found at opencv_source_code/samples/cpp/calibration_artificial.cpp\n    -   A calibration example on stereo calibration can be found at\n        opencv_source_code/samples/cpp/stereo_calib.cpp\n    -   A calibration example on stereo matching can be found at\n        opencv_source_code/samples/cpp/stereo_match.cpp\n    -   (Python) A camera calibration sample can be found at\n        opencv_source_code/samples/python/calibrate.py\n\n  @{\n    @defgroup calib3d_fisheye Fisheye camera model\n\n    Definitions: Let P be a point in 3D of coordinates X in the world reference frame (stored in the\n    matrix X) The coordinate vector of P in the camera reference frame is:\n\n    \\f[Xc = R X + T\\f]\n\n    where R is the rotation matrix corresponding to the rotation vector om: R = rodrigues(om); call x, y\n    and z the 3 coordinates of Xc:\n\n    \\f[x = Xc_1 \\\\ y = Xc_2 \\\\ z = Xc_3\\f]\n\n    The pinehole projection coordinates of P is [a; b] where\n\n    \\f[a = x / z \\ and \\ b = y / z \\\\ r^2 = a^2 + b^2 \\\\ \\theta = atan(r)\\f]\n\n    Fisheye distortion:\n\n    \\f[\\theta_d = \\theta (1 + k_1 \\theta^2 + k_2 \\theta^4 + k_3 \\theta^6 + k_4 \\theta^8)\\f]\n\n    The distorted point coordinates are [x'; y'] where\n\n    \\f[x' = (\\theta_d / r) x \\\\ y' = (\\theta_d / r) y \\f]\n\n    Finally, conversion into pixel coordinates: The final pixel coordinates vector [u; v] where:\n\n    \\f[u = f_x (x' + \\alpha y') + c_x \\\\\n    v = f_y yy + c_y\\f]\n\n    @defgroup calib3d_c C API\n\n  @}\n */\n\nnamespace cv\n{\n\n//! @addtogroup calib3d\n//! @{\n\n//! type of the robust estimation algorithm\nenum { LMEDS  = 4, //!< least-median algorithm\n       RANSAC = 8, //!< RANSAC algorithm\n       RHO    = 16 //!< RHO algorithm\n     };\n\nenum { SOLVEPNP_ITERATIVE = 0,\n       SOLVEPNP_EPNP      = 1, //!< EPnP: Efficient Perspective-n-Point Camera Pose Estimation @cite lepetit2009epnp\n       SOLVEPNP_P3P       = 2, //!< Complete Solution Classification for the Perspective-Three-Point Problem @cite gao2003complete\n       SOLVEPNP_DLS       = 3, //!< A Direct Least-Squares (DLS) Method for PnP  @cite hesch2011direct\n       SOLVEPNP_UPNP      = 4  //!< Exhaustive Linearization for Robust Camera Pose and Focal Length Estimation @cite penate2013exhaustive\n\n};\n\nenum { CALIB_CB_ADAPTIVE_THRESH = 1,\n       CALIB_CB_NORMALIZE_IMAGE = 2,\n       CALIB_CB_FILTER_QUADS    = 4,\n       CALIB_CB_FAST_CHECK      = 8\n     };\n\nenum { CALIB_CB_SYMMETRIC_GRID  = 1,\n       CALIB_CB_ASYMMETRIC_GRID = 2,\n       CALIB_CB_CLUSTERING      = 4\n     };\n\nenum { CALIB_USE_INTRINSIC_GUESS = 0x00001,\n       CALIB_FIX_ASPECT_RATIO    = 0x00002,\n       CALIB_FIX_PRINCIPAL_POINT = 0x00004,\n       CALIB_ZERO_TANGENT_DIST   = 0x00008,\n       CALIB_FIX_FOCAL_LENGTH    = 0x00010,\n       CALIB_FIX_K1              = 0x00020,\n       CALIB_FIX_K2              = 0x00040,\n       CALIB_FIX_K3              = 0x00080,\n       CALIB_FIX_K4              = 0x00800,\n       CALIB_FIX_K5              = 0x01000,\n       CALIB_FIX_K6              = 0x02000,\n       CALIB_RATIONAL_MODEL      = 0x04000,\n       CALIB_THIN_PRISM_MODEL    = 0x08000,\n       CALIB_FIX_S1_S2_S3_S4     = 0x10000,\n       CALIB_TILTED_MODEL        = 0x40000,\n       CALIB_FIX_TAUX_TAUY       = 0x80000,\n       // only for stereo\n       CALIB_FIX_INTRINSIC       = 0x00100,\n       CALIB_SAME_FOCAL_LENGTH   = 0x00200,\n       // for stereo rectification\n       CALIB_ZERO_DISPARITY      = 0x00400,\n       CALIB_USE_LU              = (1 << 17), //!< use LU instead of SVD decomposition for solving. much faster but potentially less precise\n     };\n\n//! the algorithm for finding fundamental matrix\nenum { FM_7POINT = 1, //!< 7-point algorithm\n       FM_8POINT = 2, //!< 8-point algorithm\n       FM_LMEDS  = 4, //!< least-median algorithm\n       FM_RANSAC = 8  //!< RANSAC algorithm\n     };\n\n\n\n/** @brief Converts a rotation matrix to a rotation vector or vice versa.\n\n@param src Input rotation vector (3x1 or 1x3) or rotation matrix (3x3).\n@param dst Output rotation matrix (3x3) or rotation vector (3x1 or 1x3), respectively.\n@param jacobian Optional output Jacobian matrix, 3x9 or 9x3, which is a matrix of partial\nderivatives of the output array components with respect to the input array components.\n\n\\f[\\begin{array}{l} \\theta \\leftarrow norm(r) \\\\ r  \\leftarrow r/ \\theta \\\\ R =  \\cos{\\theta} I + (1- \\cos{\\theta} ) r r^T +  \\sin{\\theta} \\vecthreethree{0}{-r_z}{r_y}{r_z}{0}{-r_x}{-r_y}{r_x}{0} \\end{array}\\f]\n\nInverse transformation can be also done easily, since\n\n\\f[\\sin ( \\theta ) \\vecthreethree{0}{-r_z}{r_y}{r_z}{0}{-r_x}{-r_y}{r_x}{0} = \\frac{R - R^T}{2}\\f]\n\nA rotation vector is a convenient and most compact representation of a rotation matrix (since any\nrotation matrix has just 3 degrees of freedom). The representation is used in the global 3D geometry\noptimization procedures like calibrateCamera, stereoCalibrate, or solvePnP .\n */\nCV_EXPORTS_W void Rodrigues( InputArray src, OutputArray dst, OutputArray jacobian = noArray() );\n\n/** @brief Finds a perspective transformation between two planes.\n\n@param srcPoints Coordinates of the points in the original plane, a matrix of the type CV_32FC2\nor vector\\<Point2f\\> .\n@param dstPoints Coordinates of the points in the target plane, a matrix of the type CV_32FC2 or\na vector\\<Point2f\\> .\n@param method Method used to computed a homography matrix. The following methods are possible:\n-   **0** - a regular method using all the points\n-   **RANSAC** - RANSAC-based robust method\n-   **LMEDS** - Least-Median robust method\n-   **RHO**    - PROSAC-based robust method\n@param ransacReprojThreshold Maximum allowed reprojection error to treat a point pair as an inlier\n(used in the RANSAC and RHO methods only). That is, if\n\\f[\\| \\texttt{dstPoints} _i -  \\texttt{convertPointsHomogeneous} ( \\texttt{H} * \\texttt{srcPoints} _i) \\|  >  \\texttt{ransacReprojThreshold}\\f]\nthen the point \\f$i\\f$ is considered an outlier. If srcPoints and dstPoints are measured in pixels,\nit usually makes sense to set this parameter somewhere in the range of 1 to 10.\n@param mask Optional output mask set by a robust method ( RANSAC or LMEDS ). Note that the input\nmask values are ignored.\n@param maxIters The maximum number of RANSAC iterations, 2000 is the maximum it can be.\n@param confidence Confidence level, between 0 and 1.\n\nThe functions find and return the perspective transformation \\f$H\\f$ between the source and the\ndestination planes:\n\n\\f[s_i  \\vecthree{x'_i}{y'_i}{1} \\sim H  \\vecthree{x_i}{y_i}{1}\\f]\n\nso that the back-projection error\n\n\\f[\\sum _i \\left ( x'_i- \\frac{h_{11} x_i + h_{12} y_i + h_{13}}{h_{31} x_i + h_{32} y_i + h_{33}} \\right )^2+ \\left ( y'_i- \\frac{h_{21} x_i + h_{22} y_i + h_{23}}{h_{31} x_i + h_{32} y_i + h_{33}} \\right )^2\\f]\n\nis minimized. If the parameter method is set to the default value 0, the function uses all the point\npairs to compute an initial homography estimate with a simple least-squares scheme.\n\nHowever, if not all of the point pairs ( \\f$srcPoints_i\\f$, \\f$dstPoints_i\\f$ ) fit the rigid perspective\ntransformation (that is, there are some outliers), this initial estimate will be poor. In this case,\nyou can use one of the three robust methods. The methods RANSAC, LMeDS and RHO try many different\nrandom subsets of the corresponding point pairs (of four pairs each), estimate the homography matrix\nusing this subset and a simple least-square algorithm, and then compute the quality/goodness of the\ncomputed homography (which is the number of inliers for RANSAC or the median re-projection error for\nLMeDs). The best subset is then used to produce the initial estimate of the homography matrix and\nthe mask of inliers/outliers.\n\nRegardless of the method, robust or not, the computed homography matrix is refined further (using\ninliers only in case of a robust method) with the Levenberg-Marquardt method to reduce the\nre-projection error even more.\n\nThe methods RANSAC and RHO can handle practically any ratio of outliers but need a threshold to\ndistinguish inliers from outliers. The method LMeDS does not need any threshold but it works\ncorrectly only when there are more than 50% of inliers. Finally, if there are no outliers and the\nnoise is rather small, use the default method (method=0).\n\nThe function is used to find initial intrinsic and extrinsic matrices. Homography matrix is\ndetermined up to a scale. Thus, it is normalized so that \\f$h_{33}=1\\f$. Note that whenever an H matrix\ncannot be estimated, an empty one will be returned.\n\n@sa\n   getAffineTransform, getPerspectiveTransform, estimateRigidTransform, warpPerspective,\n    perspectiveTransform\n\n@note\n   -   A example on calculating a homography for image matching can be found at\n        opencv_source_code/samples/cpp/video_homography.cpp\n\n */\nCV_EXPORTS_W Mat findHomography( InputArray srcPoints, InputArray dstPoints,\n                                 int method = 0, double ransacReprojThreshold = 3,\n                                 OutputArray mask=noArray(), const int maxIters = 2000,\n                                 const double confidence = 0.995);\n\n/** @overload */\nCV_EXPORTS Mat findHomography( InputArray srcPoints, InputArray dstPoints,\n                               OutputArray mask, int method = 0, double ransacReprojThreshold = 3 );\n\n/** @brief Computes an RQ decomposition of 3x3 matrices.\n\n@param src 3x3 input matrix.\n@param mtxR Output 3x3 upper-triangular matrix.\n@param mtxQ Output 3x3 orthogonal matrix.\n@param Qx Optional output 3x3 rotation matrix around x-axis.\n@param Qy Optional output 3x3 rotation matrix around y-axis.\n@param Qz Optional output 3x3 rotation matrix around z-axis.\n\nThe function computes a RQ decomposition using the given rotations. This function is used in\ndecomposeProjectionMatrix to decompose the left 3x3 submatrix of a projection matrix into a camera\nand a rotation matrix.\n\nIt optionally returns three rotation matrices, one for each axis, and the three Euler angles in\ndegrees (as the return value) that could be used in OpenGL. Note, there is always more than one\nsequence of rotations about the three principle axes that results in the same orientation of an\nobject, eg. see @cite Slabaugh . Returned tree rotation matrices and corresponding three Euler angules\nare only one of the possible solutions.\n */\nCV_EXPORTS_W Vec3d RQDecomp3x3( InputArray src, OutputArray mtxR, OutputArray mtxQ,\n                                OutputArray Qx = noArray(),\n                                OutputArray Qy = noArray(),\n                                OutputArray Qz = noArray());\n\n/** @brief Decomposes a projection matrix into a rotation matrix and a camera matrix.\n\n@param projMatrix 3x4 input projection matrix P.\n@param cameraMatrix Output 3x3 camera matrix K.\n@param rotMatrix Output 3x3 external rotation matrix R.\n@param transVect Output 4x1 translation vector T.\n@param rotMatrixX Optional 3x3 rotation matrix around x-axis.\n@param rotMatrixY Optional 3x3 rotation matrix around y-axis.\n@param rotMatrixZ Optional 3x3 rotation matrix around z-axis.\n@param eulerAngles Optional three-element vector containing three Euler angles of rotation in\ndegrees.\n\nThe function computes a decomposition of a projection matrix into a calibration and a rotation\nmatrix and the position of a camera.\n\nIt optionally returns three rotation matrices, one for each axis, and three Euler angles that could\nbe used in OpenGL. Note, there is always more than one sequence of rotations about the three\nprinciple axes that results in the same orientation of an object, eg. see @cite Slabaugh . Returned\ntree rotation matrices and corresponding three Euler angules are only one of the possible solutions.\n\nThe function is based on RQDecomp3x3 .\n */\nCV_EXPORTS_W void decomposeProjectionMatrix( InputArray projMatrix, OutputArray cameraMatrix,\n                                             OutputArray rotMatrix, OutputArray transVect,\n                                             OutputArray rotMatrixX = noArray(),\n                                             OutputArray rotMatrixY = noArray(),\n                                             OutputArray rotMatrixZ = noArray(),\n                                             OutputArray eulerAngles =noArray() );\n\n/** @brief Computes partial derivatives of the matrix product for each multiplied matrix.\n\n@param A First multiplied matrix.\n@param B Second multiplied matrix.\n@param dABdA First output derivative matrix d(A\\*B)/dA of size\n\\f$\\texttt{A.rows*B.cols} \\times {A.rows*A.cols}\\f$ .\n@param dABdB Second output derivative matrix d(A\\*B)/dB of size\n\\f$\\texttt{A.rows*B.cols} \\times {B.rows*B.cols}\\f$ .\n\nThe function computes partial derivatives of the elements of the matrix product \\f$A*B\\f$ with regard to\nthe elements of each of the two input matrices. The function is used to compute the Jacobian\nmatrices in stereoCalibrate but can also be used in any other similar optimization function.\n */\nCV_EXPORTS_W void matMulDeriv( InputArray A, InputArray B, OutputArray dABdA, OutputArray dABdB );\n\n/** @brief Combines two rotation-and-shift transformations.\n\n@param rvec1 First rotation vector.\n@param tvec1 First translation vector.\n@param rvec2 Second rotation vector.\n@param tvec2 Second translation vector.\n@param rvec3 Output rotation vector of the superposition.\n@param tvec3 Output translation vector of the superposition.\n@param dr3dr1\n@param dr3dt1\n@param dr3dr2\n@param dr3dt2\n@param dt3dr1\n@param dt3dt1\n@param dt3dr2\n@param dt3dt2 Optional output derivatives of rvec3 or tvec3 with regard to rvec1, rvec2, tvec1 and\ntvec2, respectively.\n\nThe functions compute:\n\n\\f[\\begin{array}{l} \\texttt{rvec3} =  \\mathrm{rodrigues} ^{-1} \\left ( \\mathrm{rodrigues} ( \\texttt{rvec2} )  \\cdot \\mathrm{rodrigues} ( \\texttt{rvec1} ) \\right )  \\\\ \\texttt{tvec3} =  \\mathrm{rodrigues} ( \\texttt{rvec2} )  \\cdot \\texttt{tvec1} +  \\texttt{tvec2} \\end{array} ,\\f]\n\nwhere \\f$\\mathrm{rodrigues}\\f$ denotes a rotation vector to a rotation matrix transformation, and\n\\f$\\mathrm{rodrigues}^{-1}\\f$ denotes the inverse transformation. See Rodrigues for details.\n\nAlso, the functions can compute the derivatives of the output vectors with regards to the input\nvectors (see matMulDeriv ). The functions are used inside stereoCalibrate but can also be used in\nyour own code where Levenberg-Marquardt or another gradient-based solver is used to optimize a\nfunction that contains a matrix multiplication.\n */\nCV_EXPORTS_W void composeRT( InputArray rvec1, InputArray tvec1,\n                             InputArray rvec2, InputArray tvec2,\n                             OutputArray rvec3, OutputArray tvec3,\n                             OutputArray dr3dr1 = noArray(), OutputArray dr3dt1 = noArray(),\n                             OutputArray dr3dr2 = noArray(), OutputArray dr3dt2 = noArray(),\n                             OutputArray dt3dr1 = noArray(), OutputArray dt3dt1 = noArray(),\n                             OutputArray dt3dr2 = noArray(), OutputArray dt3dt2 = noArray() );\n\n/** @brief Projects 3D points to an image plane.\n\n@param objectPoints Array of object points, 3xN/Nx3 1-channel or 1xN/Nx1 3-channel (or\nvector\\<Point3f\\> ), where N is the number of points in the view.\n@param rvec Rotation vector. See Rodrigues for details.\n@param tvec Translation vector.\n@param cameraMatrix Camera matrix \\f$A = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\\f$ .\n@param distCoeffs Input vector of distortion coefficients\n\\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$ of\n4, 5, 8, 12 or 14 elements. If the vector is empty, the zero distortion coefficients are assumed.\n@param imagePoints Output array of image points, 2xN/Nx2 1-channel or 1xN/Nx1 2-channel, or\nvector\\<Point2f\\> .\n@param jacobian Optional output 2Nx(10+\\<numDistCoeffs\\>) jacobian matrix of derivatives of image\npoints with respect to components of the rotation vector, translation vector, focal lengths,\ncoordinates of the principal point and the distortion coefficients. In the old interface different\ncomponents of the jacobian are returned via different output parameters.\n@param aspectRatio Optional \"fixed aspect ratio\" parameter. If the parameter is not 0, the\nfunction assumes that the aspect ratio (*fx/fy*) is fixed and correspondingly adjusts the jacobian\nmatrix.\n\nThe function computes projections of 3D points to the image plane given intrinsic and extrinsic\ncamera parameters. Optionally, the function computes Jacobians - matrices of partial derivatives of\nimage points coordinates (as functions of all the input parameters) with respect to the particular\nparameters, intrinsic and/or extrinsic. The Jacobians are used during the global optimization in\ncalibrateCamera, solvePnP, and stereoCalibrate . The function itself can also be used to compute a\nre-projection error given the current intrinsic and extrinsic parameters.\n\n@note By setting rvec=tvec=(0,0,0) or by setting cameraMatrix to a 3x3 identity matrix, or by\npassing zero distortion coefficients, you can get various useful partial cases of the function. This\nmeans that you can compute the distorted coordinates for a sparse set of points or apply a\nperspective transformation (and also compute the derivatives) in the ideal zero-distortion setup.\n */\nCV_EXPORTS_W void projectPoints( InputArray objectPoints,\n                                 InputArray rvec, InputArray tvec,\n                                 InputArray cameraMatrix, InputArray distCoeffs,\n                                 OutputArray imagePoints,\n                                 OutputArray jacobian = noArray(),\n                                 double aspectRatio = 0 );\n\n/** @brief Finds an object pose from 3D-2D point correspondences.\n\n@param objectPoints Array of object points in the object coordinate space, 3xN/Nx3 1-channel or\n1xN/Nx1 3-channel, where N is the number of points. vector\\<Point3f\\> can be also passed here.\n@param imagePoints Array of corresponding image points, 2xN/Nx2 1-channel or 1xN/Nx1 2-channel,\nwhere N is the number of points. vector\\<Point2f\\> can be also passed here.\n@param cameraMatrix Input camera matrix \\f$A = \\vecthreethree{fx}{0}{cx}{0}{fy}{cy}{0}{0}{1}\\f$ .\n@param distCoeffs Input vector of distortion coefficients\n\\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$ of\n4, 5, 8, 12 or 14 elements. If the vector is NULL/empty, the zero distortion coefficients are\nassumed.\n@param rvec Output rotation vector (see Rodrigues ) that, together with tvec , brings points from\nthe model coordinate system to the camera coordinate system.\n@param tvec Output translation vector.\n@param useExtrinsicGuess Parameter used for SOLVEPNP_ITERATIVE. If true (1), the function uses\nthe provided rvec and tvec values as initial approximations of the rotation and translation\nvectors, respectively, and further optimizes them.\n@param flags Method for solving a PnP problem:\n-   **SOLVEPNP_ITERATIVE** Iterative method is based on Levenberg-Marquardt optimization. In\nthis case the function finds such a pose that minimizes reprojection error, that is the sum\nof squared distances between the observed projections imagePoints and the projected (using\nprojectPoints ) objectPoints .\n-   **SOLVEPNP_P3P** Method is based on the paper of X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang\n\"Complete Solution Classification for the Perspective-Three-Point Problem\". In this case the\nfunction requires exactly four object and image points.\n-   **SOLVEPNP_EPNP** Method has been introduced by F.Moreno-Noguer, V.Lepetit and P.Fua in the\npaper \"EPnP: Efficient Perspective-n-Point Camera Pose Estimation\".\n-   **SOLVEPNP_DLS** Method is based on the paper of Joel A. Hesch and Stergios I. Roumeliotis.\n\"A Direct Least-Squares (DLS) Method for PnP\".\n-   **SOLVEPNP_UPNP** Method is based on the paper of A.Penate-Sanchez, J.Andrade-Cetto,\nF.Moreno-Noguer. \"Exhaustive Linearization for Robust Camera Pose and Focal Length\nEstimation\". In this case the function also estimates the parameters \\f$f_x\\f$ and \\f$f_y\\f$\nassuming that both have the same value. Then the cameraMatrix is updated with the estimated\nfocal length.\n\nThe function estimates the object pose given a set of object points, their corresponding image\nprojections, as well as the camera matrix and the distortion coefficients.\n\n@note\n   -   An example of how to use solvePnP for planar augmented reality can be found at\n        opencv_source_code/samples/python/plane_ar.py\n   -   If you are using Python:\n        - Numpy array slices won't work as input because solvePnP requires contiguous\n        arrays (enforced by the assertion using cv::Mat::checkVector() around line 55 of\n        modules/calib3d/src/solvepnp.cpp version 2.4.9)\n        - The P3P algorithm requires image points to be in an array of shape (N,1,2) due\n        to its calling of cv::undistortPoints (around line 75 of modules/calib3d/src/solvepnp.cpp version 2.4.9)\n        which requires 2-channel information.\n        - Thus, given some data D = np.array(...) where D.shape = (N,M), in order to use a subset of\n        it as, e.g., imagePoints, one must effectively copy it into a new array: imagePoints =\n        np.ascontiguousarray(D[:,:2]).reshape((N,1,2))\n */\nCV_EXPORTS_W bool solvePnP( InputArray objectPoints, InputArray imagePoints,\n                            InputArray cameraMatrix, InputArray distCoeffs,\n                            OutputArray rvec, OutputArray tvec,\n                            bool useExtrinsicGuess = false, int flags = SOLVEPNP_ITERATIVE );\n\n/** @brief Finds an object pose from 3D-2D point correspondences using the RANSAC scheme.\n\n@param objectPoints Array of object points in the object coordinate space, 3xN/Nx3 1-channel or\n1xN/Nx1 3-channel, where N is the number of points. vector\\<Point3f\\> can be also passed here.\n@param imagePoints Array of corresponding image points, 2xN/Nx2 1-channel or 1xN/Nx1 2-channel,\nwhere N is the number of points. vector\\<Point2f\\> can be also passed here.\n@param cameraMatrix Input camera matrix \\f$A = \\vecthreethree{fx}{0}{cx}{0}{fy}{cy}{0}{0}{1}\\f$ .\n@param distCoeffs Input vector of distortion coefficients\n\\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$ of\n4, 5, 8, 12 or 14 elements. If the vector is NULL/empty, the zero distortion coefficients are\nassumed.\n@param rvec Output rotation vector (see Rodrigues ) that, together with tvec , brings points from\nthe model coordinate system to the camera coordinate system.\n@param tvec Output translation vector.\n@param useExtrinsicGuess Parameter used for SOLVEPNP_ITERATIVE. If true (1), the function uses\nthe provided rvec and tvec values as initial approximations of the rotation and translation\nvectors, respectively, and further optimizes them.\n@param iterationsCount Number of iterations.\n@param reprojectionError Inlier threshold value used by the RANSAC procedure. The parameter value\nis the maximum allowed distance between the observed and computed point projections to consider it\nan inlier.\n@param confidence The probability that the algorithm produces a useful result.\n@param inliers Output vector that contains indices of inliers in objectPoints and imagePoints .\n@param flags Method for solving a PnP problem (see solvePnP ).\n\nThe function estimates an object pose given a set of object points, their corresponding image\nprojections, as well as the camera matrix and the distortion coefficients. This function finds such\na pose that minimizes reprojection error, that is, the sum of squared distances between the observed\nprojections imagePoints and the projected (using projectPoints ) objectPoints. The use of RANSAC\nmakes the function resistant to outliers.\n\n@note\n   -   An example of how to use solvePNPRansac for object detection can be found at\n        opencv_source_code/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/\n */\nCV_EXPORTS_W bool solvePnPRansac( InputArray objectPoints, InputArray imagePoints,\n                                  InputArray cameraMatrix, InputArray distCoeffs,\n                                  OutputArray rvec, OutputArray tvec,\n                                  bool useExtrinsicGuess = false, int iterationsCount = 100,\n                                  float reprojectionError = 8.0, double confidence = 0.99,\n                                  OutputArray inliers = noArray(), int flags = SOLVEPNP_ITERATIVE );\n\n/** @brief Finds an initial camera matrix from 3D-2D point correspondences.\n\n@param objectPoints Vector of vectors of the calibration pattern points in the calibration pattern\ncoordinate space. In the old interface all the per-view vectors are concatenated. See\ncalibrateCamera for details.\n@param imagePoints Vector of vectors of the projections of the calibration pattern points. In the\nold interface all the per-view vectors are concatenated.\n@param imageSize Image size in pixels used to initialize the principal point.\n@param aspectRatio If it is zero or negative, both \\f$f_x\\f$ and \\f$f_y\\f$ are estimated independently.\nOtherwise, \\f$f_x = f_y * \\texttt{aspectRatio}\\f$ .\n\nThe function estimates and returns an initial camera matrix for the camera calibration process.\nCurrently, the function only supports planar calibration patterns, which are patterns where each\nobject point has z-coordinate =0.\n */\nCV_EXPORTS_W Mat initCameraMatrix2D( InputArrayOfArrays objectPoints,\n                                     InputArrayOfArrays imagePoints,\n                                     Size imageSize, double aspectRatio = 1.0 );\n\n/** @brief Finds the positions of internal corners of the chessboard.\n\n@param image Source chessboard view. It must be an 8-bit grayscale or color image.\n@param patternSize Number of inner corners per a chessboard row and column\n( patternSize = cvSize(points_per_row,points_per_colum) = cvSize(columns,rows) ).\n@param corners Output array of detected corners.\n@param flags Various operation flags that can be zero or a combination of the following values:\n-   **CV_CALIB_CB_ADAPTIVE_THRESH** Use adaptive thresholding to convert the image to black\nand white, rather than a fixed threshold level (computed from the average image brightness).\n-   **CV_CALIB_CB_NORMALIZE_IMAGE** Normalize the image gamma with equalizeHist before\napplying fixed or adaptive thresholding.\n-   **CV_CALIB_CB_FILTER_QUADS** Use additional criteria (like contour area, perimeter,\nsquare-like shape) to filter out false quads extracted at the contour retrieval stage.\n-   **CALIB_CB_FAST_CHECK** Run a fast check on the image that looks for chessboard corners,\nand shortcut the call if none is found. This can drastically speed up the call in the\ndegenerate condition when no chessboard is observed.\n\nThe function attempts to determine whether the input image is a view of the chessboard pattern and\nlocate the internal chessboard corners. The function returns a non-zero value if all of the corners\nare found and they are placed in a certain order (row by row, left to right in every row).\nOtherwise, if the function fails to find all the corners or reorder them, it returns 0. For example,\na regular chessboard has 8 x 8 squares and 7 x 7 internal corners, that is, points where the black\nsquares touch each other. The detected coordinates are approximate, and to determine their positions\nmore accurately, the function calls cornerSubPix. You also may use the function cornerSubPix with\ndifferent parameters if returned coordinates are not accurate enough.\n\nSample usage of detecting and drawing chessboard corners: :\n@code\n    Size patternsize(8,6); //interior number of corners\n    Mat gray = ....; //source image\n    vector<Point2f> corners; //this will be filled by the detected corners\n\n    //CALIB_CB_FAST_CHECK saves a lot of time on images\n    //that do not contain any chessboard corners\n    bool patternfound = findChessboardCorners(gray, patternsize, corners,\n            CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE\n            + CALIB_CB_FAST_CHECK);\n\n    if(patternfound)\n      cornerSubPix(gray, corners, Size(11, 11), Size(-1, -1),\n        TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));\n\n    drawChessboardCorners(img, patternsize, Mat(corners), patternfound);\n@endcode\n@note The function requires white space (like a square-thick border, the wider the better) around\nthe board to make the detection more robust in various environments. Otherwise, if there is no\nborder and the background is dark, the outer black squares cannot be segmented properly and so the\nsquare grouping and ordering algorithm fails.\n */\nCV_EXPORTS_W bool findChessboardCorners( InputArray image, Size patternSize, OutputArray corners,\n                                         int flags = CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE );\n\n//! finds subpixel-accurate positions of the chessboard corners\nCV_EXPORTS bool find4QuadCornerSubpix( InputArray img, InputOutputArray corners, Size region_size );\n\n/** @brief Renders the detected chessboard corners.\n\n@param image Destination image. It must be an 8-bit color image.\n@param patternSize Number of inner corners per a chessboard row and column\n(patternSize = cv::Size(points_per_row,points_per_column)).\n@param corners Array of detected corners, the output of findChessboardCorners.\n@param patternWasFound Parameter indicating whether the complete board was found or not. The\nreturn value of findChessboardCorners should be passed here.\n\nThe function draws individual chessboard corners detected either as red circles if the board was not\nfound, or as colored corners connected with lines if the board was found.\n */\nCV_EXPORTS_W void drawChessboardCorners( InputOutputArray image, Size patternSize,\n                                         InputArray corners, bool patternWasFound );\n\n/** @brief Finds centers in the grid of circles.\n\n@param image grid view of input circles; it must be an 8-bit grayscale or color image.\n@param patternSize number of circles per row and column\n( patternSize = Size(points_per_row, points_per_colum) ).\n@param centers output array of detected centers.\n@param flags various operation flags that can be one of the following values:\n-   **CALIB_CB_SYMMETRIC_GRID** uses symmetric pattern of circles.\n-   **CALIB_CB_ASYMMETRIC_GRID** uses asymmetric pattern of circles.\n-   **CALIB_CB_CLUSTERING** uses a special algorithm for grid detection. It is more robust to\nperspective distortions but much more sensitive to background clutter.\n@param blobDetector feature detector that finds blobs like dark circles on light background.\n\nThe function attempts to determine whether the input image contains a grid of circles. If it is, the\nfunction locates centers of the circles. The function returns a non-zero value if all of the centers\nhave been found and they have been placed in a certain order (row by row, left to right in every\nrow). Otherwise, if the function fails to find all the corners or reorder them, it returns 0.\n\nSample usage of detecting and drawing the centers of circles: :\n@code\n    Size patternsize(7,7); //number of centers\n    Mat gray = ....; //source image\n    vector<Point2f> centers; //this will be filled by the detected centers\n\n    bool patternfound = findCirclesGrid(gray, patternsize, centers);\n\n    drawChessboardCorners(img, patternsize, Mat(centers), patternfound);\n@endcode\n@note The function requires white space (like a square-thick border, the wider the better) around\nthe board to make the detection more robust in various environments.\n */\nCV_EXPORTS_W bool findCirclesGrid( InputArray image, Size patternSize,\n                                   OutputArray centers, int flags = CALIB_CB_SYMMETRIC_GRID,\n                                   const Ptr<FeatureDetector> &blobDetector = SimpleBlobDetector::create());\n\n/** @brief Finds the camera intrinsic and extrinsic parameters from several views of a calibration pattern.\n\n@param objectPoints In the new interface it is a vector of vectors of calibration pattern points in\nthe calibration pattern coordinate space (e.g. std::vector<std::vector<cv::Vec3f>>). The outer\nvector contains as many elements as the number of the pattern views. If the same calibration pattern\nis shown in each view and it is fully visible, all the vectors will be the same. Although, it is\npossible to use partially occluded patterns, or even different patterns in different views. Then,\nthe vectors will be different. The points are 3D, but since they are in a pattern coordinate system,\nthen, if the rig is planar, it may make sense to put the model to a XY coordinate plane so that\nZ-coordinate of each input object point is 0.\nIn the old interface all the vectors of object points from different views are concatenated\ntogether.\n@param imagePoints In the new interface it is a vector of vectors of the projections of calibration\npattern points (e.g. std::vector<std::vector<cv::Vec2f>>). imagePoints.size() and\nobjectPoints.size() and imagePoints[i].size() must be equal to objectPoints[i].size() for each i.\nIn the old interface all the vectors of object points from different views are concatenated\ntogether.\n@param imageSize Size of the image used only to initialize the intrinsic camera matrix.\n@param cameraMatrix Output 3x3 floating-point camera matrix\n\\f$A = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\\f$ . If CV\\_CALIB\\_USE\\_INTRINSIC\\_GUESS\nand/or CV_CALIB_FIX_ASPECT_RATIO are specified, some or all of fx, fy, cx, cy must be\ninitialized before calling the function.\n@param distCoeffs Output vector of distortion coefficients\n\\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$ of\n4, 5, 8, 12 or 14 elements.\n@param rvecs Output vector of rotation vectors (see Rodrigues ) estimated for each pattern view\n(e.g. std::vector<cv::Mat>>). That is, each k-th rotation vector together with the corresponding\nk-th translation vector (see the next output parameter description) brings the calibration pattern\nfrom the model coordinate space (in which object points are specified) to the world coordinate\nspace, that is, a real position of the calibration pattern in the k-th pattern view (k=0.. *M* -1).\n@param tvecs Output vector of translation vectors estimated for each pattern view.\n@param flags Different flags that may be zero or a combination of the following values:\n-   **CV_CALIB_USE_INTRINSIC_GUESS** cameraMatrix contains valid initial values of\nfx, fy, cx, cy that are optimized further. Otherwise, (cx, cy) is initially set to the image\ncenter ( imageSize is used), and focal distances are computed in a least-squares fashion.\nNote, that if intrinsic parameters are known, there is no need to use this function just to\nestimate extrinsic parameters. Use solvePnP instead.\n-   **CV_CALIB_FIX_PRINCIPAL_POINT** The principal point is not changed during the global\noptimization. It stays at the center or at a different location specified when\nCV_CALIB_USE_INTRINSIC_GUESS is set too.\n-   **CV_CALIB_FIX_ASPECT_RATIO** The functions considers only fy as a free parameter. The\nratio fx/fy stays the same as in the input cameraMatrix . When\nCV_CALIB_USE_INTRINSIC_GUESS is not set, the actual input values of fx and fy are\nignored, only their ratio is computed and used further.\n-   **CV_CALIB_ZERO_TANGENT_DIST** Tangential distortion coefficients \\f$(p_1, p_2)\\f$ are set\nto zeros and stay zero.\n-   **CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6** The corresponding radial distortion\ncoefficient is not changed during the optimization. If CV_CALIB_USE_INTRINSIC_GUESS is\nset, the coefficient from the supplied distCoeffs matrix is used. Otherwise, it is set to 0.\n-   **CV_CALIB_RATIONAL_MODEL** Coefficients k4, k5, and k6 are enabled. To provide the\nbackward compatibility, this extra flag should be explicitly specified to make the\ncalibration function use the rational model and return 8 coefficients. If the flag is not\nset, the function computes and returns only 5 distortion coefficients.\n-   **CALIB_THIN_PRISM_MODEL** Coefficients s1, s2, s3 and s4 are enabled. To provide the\nbackward compatibility, this extra flag should be explicitly specified to make the\ncalibration function use the thin prism model and return 12 coefficients. If the flag is not\nset, the function computes and returns only 5 distortion coefficients.\n-   **CALIB_FIX_S1_S2_S3_S4** The thin prism distortion coefficients are not changed during\nthe optimization. If CV_CALIB_USE_INTRINSIC_GUESS is set, the coefficient from the\nsupplied distCoeffs matrix is used. Otherwise, it is set to 0.\n-   **CALIB_TILTED_MODEL** Coefficients tauX and tauY are enabled. To provide the\nbackward compatibility, this extra flag should be explicitly specified to make the\ncalibration function use the tilted sensor model and return 14 coefficients. If the flag is not\nset, the function computes and returns only 5 distortion coefficients.\n-   **CALIB_FIX_TAUX_TAUY** The coefficients of the tilted sensor model are not changed during\nthe optimization. If CV_CALIB_USE_INTRINSIC_GUESS is set, the coefficient from the\nsupplied distCoeffs matrix is used. Otherwise, it is set to 0.\n@param criteria Termination criteria for the iterative optimization algorithm.\n\nThe function estimates the intrinsic camera parameters and extrinsic parameters for each of the\nviews. The algorithm is based on @cite Zhang2000 and @cite BouguetMCT . The coordinates of 3D object\npoints and their corresponding 2D projections in each view must be specified. That may be achieved\nby using an object with a known geometry and easily detectable feature points. Such an object is\ncalled a calibration rig or calibration pattern, and OpenCV has built-in support for a chessboard as\na calibration rig (see findChessboardCorners ). Currently, initialization of intrinsic parameters\n(when CV_CALIB_USE_INTRINSIC_GUESS is not set) is only implemented for planar calibration\npatterns (where Z-coordinates of the object points must be all zeros). 3D calibration rigs can also\nbe used as long as initial cameraMatrix is provided.\n\nThe algorithm performs the following steps:\n\n-   Compute the initial intrinsic parameters (the option only available for planar calibration\n    patterns) or read them from the input parameters. The distortion coefficients are all set to\n    zeros initially unless some of CV_CALIB_FIX_K? are specified.\n\n-   Estimate the initial camera pose as if the intrinsic parameters have been already known. This is\n    done using solvePnP .\n\n-   Run the global Levenberg-Marquardt optimization algorithm to minimize the reprojection error,\n    that is, the total sum of squared distances between the observed feature points imagePoints and\n    the projected (using the current estimates for camera parameters and the poses) object points\n    objectPoints. See projectPoints for details.\n\nThe function returns the final re-projection error.\n\n@note\n   If you use a non-square (=non-NxN) grid and findChessboardCorners for calibration, and\n    calibrateCamera returns bad values (zero distortion coefficients, an image center very far from\n    (w/2-0.5,h/2-0.5), and/or large differences between \\f$f_x\\f$ and \\f$f_y\\f$ (ratios of 10:1 or more)),\n    then you have probably used patternSize=cvSize(rows,cols) instead of using\n    patternSize=cvSize(cols,rows) in findChessboardCorners .\n\n@sa\n   findChessboardCorners, solvePnP, initCameraMatrix2D, stereoCalibrate, undistort\n */\nCV_EXPORTS_W double calibrateCamera( InputArrayOfArrays objectPoints,\n                                     InputArrayOfArrays imagePoints, Size imageSize,\n                                     InputOutputArray cameraMatrix, InputOutputArray distCoeffs,\n                                     OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs,\n                                     int flags = 0, TermCriteria criteria = TermCriteria(\n                                        TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON) );\n\n/** @brief Computes useful camera characteristics from the camera matrix.\n\n@param cameraMatrix Input camera matrix that can be estimated by calibrateCamera or\nstereoCalibrate .\n@param imageSize Input image size in pixels.\n@param apertureWidth Physical width in mm of the sensor.\n@param apertureHeight Physical height in mm of the sensor.\n@param fovx Output field of view in degrees along the horizontal sensor axis.\n@param fovy Output field of view in degrees along the vertical sensor axis.\n@param focalLength Focal length of the lens in mm.\n@param principalPoint Principal point in mm.\n@param aspectRatio \\f$f_y/f_x\\f$\n\nThe function computes various useful camera characteristics from the previously estimated camera\nmatrix.\n\n@note\n   Do keep in mind that the unity measure 'mm' stands for whatever unit of measure one chooses for\n    the chessboard pitch (it can thus be any value).\n */\nCV_EXPORTS_W void calibrationMatrixValues( InputArray cameraMatrix, Size imageSize,\n                                           double apertureWidth, double apertureHeight,\n                                           CV_OUT double& fovx, CV_OUT double& fovy,\n                                           CV_OUT double& focalLength, CV_OUT Point2d& principalPoint,\n                                           CV_OUT double& aspectRatio );\n\n/** @brief Calibrates the stereo camera.\n\n@param objectPoints Vector of vectors of the calibration pattern points.\n@param imagePoints1 Vector of vectors of the projections of the calibration pattern points,\nobserved by the first camera.\n@param imagePoints2 Vector of vectors of the projections of the calibration pattern points,\nobserved by the second camera.\n@param cameraMatrix1 Input/output first camera matrix:\n\\f$\\vecthreethree{f_x^{(j)}}{0}{c_x^{(j)}}{0}{f_y^{(j)}}{c_y^{(j)}}{0}{0}{1}\\f$ , \\f$j = 0,\\, 1\\f$ . If\nany of CV_CALIB_USE_INTRINSIC_GUESS , CV_CALIB_FIX_ASPECT_RATIO ,\nCV_CALIB_FIX_INTRINSIC , or CV_CALIB_FIX_FOCAL_LENGTH are specified, some or all of the\nmatrix components must be initialized. See the flags description for details.\n@param distCoeffs1 Input/output vector of distortion coefficients\n\\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$ of\n4, 5, 8, 12 or 14 elements. The output vector length depends on the flags.\n@param cameraMatrix2 Input/output second camera matrix. The parameter is similar to cameraMatrix1\n@param distCoeffs2 Input/output lens distortion coefficients for the second camera. The parameter\nis similar to distCoeffs1 .\n@param imageSize Size of the image used only to initialize intrinsic camera matrix.\n@param R Output rotation matrix between the 1st and the 2nd camera coordinate systems.\n@param T Output translation vector between the coordinate systems of the cameras.\n@param E Output essential matrix.\n@param F Output fundamental matrix.\n@param flags Different flags that may be zero or a combination of the following values:\n-   **CV_CALIB_FIX_INTRINSIC** Fix cameraMatrix? and distCoeffs? so that only R, T, E , and F\nmatrices are estimated.\n-   **CV_CALIB_USE_INTRINSIC_GUESS** Optimize some or all of the intrinsic parameters\naccording to the specified flags. Initial values are provided by the user.\n-   **CV_CALIB_FIX_PRINCIPAL_POINT** Fix the principal points during the optimization.\n-   **CV_CALIB_FIX_FOCAL_LENGTH** Fix \\f$f^{(j)}_x\\f$ and \\f$f^{(j)}_y\\f$ .\n-   **CV_CALIB_FIX_ASPECT_RATIO** Optimize \\f$f^{(j)}_y\\f$ . Fix the ratio \\f$f^{(j)}_x/f^{(j)}_y\\f$\n.\n-   **CV_CALIB_SAME_FOCAL_LENGTH** Enforce \\f$f^{(0)}_x=f^{(1)}_x\\f$ and \\f$f^{(0)}_y=f^{(1)}_y\\f$ .\n-   **CV_CALIB_ZERO_TANGENT_DIST** Set tangential distortion coefficients for each camera to\nzeros and fix there.\n-   **CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6** Do not change the corresponding radial\ndistortion coefficient during the optimization. If CV_CALIB_USE_INTRINSIC_GUESS is set,\nthe coefficient from the supplied distCoeffs matrix is used. Otherwise, it is set to 0.\n-   **CV_CALIB_RATIONAL_MODEL** Enable coefficients k4, k5, and k6. To provide the backward\ncompatibility, this extra flag should be explicitly specified to make the calibration\nfunction use the rational model and return 8 coefficients. If the flag is not set, the\nfunction computes and returns only 5 distortion coefficients.\n-   **CALIB_THIN_PRISM_MODEL** Coefficients s1, s2, s3 and s4 are enabled. To provide the\nbackward compatibility, this extra flag should be explicitly specified to make the\ncalibration function use the thin prism model and return 12 coefficients. If the flag is not\nset, the function computes and returns only 5 distortion coefficients.\n-   **CALIB_FIX_S1_S2_S3_S4** The thin prism distortion coefficients are not changed during\nthe optimization. If CV_CALIB_USE_INTRINSIC_GUESS is set, the coefficient from the\nsupplied distCoeffs matrix is used. Otherwise, it is set to 0.\n-   **CALIB_TILTED_MODEL** Coefficients tauX and tauY are enabled. To provide the\nbackward compatibility, this extra flag should be explicitly specified to make the\ncalibration function use the tilted sensor model and return 14 coefficients. If the flag is not\nset, the function computes and returns only 5 distortion coefficients.\n-   **CALIB_FIX_TAUX_TAUY** The coefficients of the tilted sensor model are not changed during\nthe optimization. If CV_CALIB_USE_INTRINSIC_GUESS is set, the coefficient from the\nsupplied distCoeffs matrix is used. Otherwise, it is set to 0.\n@param criteria Termination criteria for the iterative optimization algorithm.\n\nThe function estimates transformation between two cameras making a stereo pair. If you have a stereo\ncamera where the relative position and orientation of two cameras is fixed, and if you computed\nposes of an object relative to the first camera and to the second camera, (R1, T1) and (R2, T2),\nrespectively (this can be done with solvePnP ), then those poses definitely relate to each other.\nThis means that, given ( \\f$R_1\\f$,\\f$T_1\\f$ ), it should be possible to compute ( \\f$R_2\\f$,\\f$T_2\\f$ ). You only\nneed to know the position and orientation of the second camera relative to the first camera. This is\nwhat the described function does. It computes ( \\f$R\\f$,\\f$T\\f$ ) so that:\n\n\\f[R_2=R*R_1\nT_2=R*T_1 + T,\\f]\n\nOptionally, it computes the essential matrix E:\n\n\\f[E= \\vecthreethree{0}{-T_2}{T_1}{T_2}{0}{-T_0}{-T_1}{T_0}{0} *R\\f]\n\nwhere \\f$T_i\\f$ are components of the translation vector \\f$T\\f$ : \\f$T=[T_0, T_1, T_2]^T\\f$ . And the function\ncan also compute the fundamental matrix F:\n\n\\f[F = cameraMatrix2^{-T} E cameraMatrix1^{-1}\\f]\n\nBesides the stereo-related information, the function can also perform a full calibration of each of\ntwo cameras. However, due to the high dimensionality of the parameter space and noise in the input\ndata, the function can diverge from the correct solution. If the intrinsic parameters can be\nestimated with high accuracy for each of the cameras individually (for example, using\ncalibrateCamera ), you are recommended to do so and then pass CV_CALIB_FIX_INTRINSIC flag to the\nfunction along with the computed intrinsic parameters. Otherwise, if all the parameters are\nestimated at once, it makes sense to restrict some parameters, for example, pass\nCV_CALIB_SAME_FOCAL_LENGTH and CV_CALIB_ZERO_TANGENT_DIST flags, which is usually a\nreasonable assumption.\n\nSimilarly to calibrateCamera , the function minimizes the total re-projection error for all the\npoints in all the available views from both cameras. The function returns the final value of the\nre-projection error.\n */\nCV_EXPORTS_W double stereoCalibrate( InputArrayOfArrays objectPoints,\n                                     InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2,\n                                     InputOutputArray cameraMatrix1, InputOutputArray distCoeffs1,\n                                     InputOutputArray cameraMatrix2, InputOutputArray distCoeffs2,\n                                     Size imageSize, OutputArray R,OutputArray T, OutputArray E, OutputArray F,\n                                     int flags = CALIB_FIX_INTRINSIC,\n                                     TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6) );\n\n\n/** @brief Computes rectification transforms for each head of a calibrated stereo camera.\n\n@param cameraMatrix1 First camera matrix.\n@param distCoeffs1 First camera distortion parameters.\n@param cameraMatrix2 Second camera matrix.\n@param distCoeffs2 Second camera distortion parameters.\n@param imageSize Size of the image used for stereo calibration.\n@param R Rotation matrix between the coordinate systems of the first and the second cameras.\n@param T Translation vector between coordinate systems of the cameras.\n@param R1 Output 3x3 rectification transform (rotation matrix) for the first camera.\n@param R2 Output 3x3 rectification transform (rotation matrix) for the second camera.\n@param P1 Output 3x4 projection matrix in the new (rectified) coordinate systems for the first\ncamera.\n@param P2 Output 3x4 projection matrix in the new (rectified) coordinate systems for the second\ncamera.\n@param Q Output \\f$4 \\times 4\\f$ disparity-to-depth mapping matrix (see reprojectImageTo3D ).\n@param flags Operation flags that may be zero or CV_CALIB_ZERO_DISPARITY . If the flag is set,\nthe function makes the principal points of each camera have the same pixel coordinates in the\nrectified views. And if the flag is not set, the function may still shift the images in the\nhorizontal or vertical direction (depending on the orientation of epipolar lines) to maximize the\nuseful image area.\n@param alpha Free scaling parameter. If it is -1 or absent, the function performs the default\nscaling. Otherwise, the parameter should be between 0 and 1. alpha=0 means that the rectified\nimages are zoomed and shifted so that only valid pixels are visible (no black areas after\nrectification). alpha=1 means that the rectified image is decimated and shifted so that all the\npixels from the original images from the cameras are retained in the rectified images (no source\nimage pixels are lost). Obviously, any intermediate value yields an intermediate result between\nthose two extreme cases.\n@param newImageSize New image resolution after rectification. The same size should be passed to\ninitUndistortRectifyMap (see the stereo_calib.cpp sample in OpenCV samples directory). When (0,0)\nis passed (default), it is set to the original imageSize . Setting it to larger value can help you\npreserve details in the original image, especially when there is a big radial distortion.\n@param validPixROI1 Optional output rectangles inside the rectified images where all the pixels\nare valid. If alpha=0 , the ROIs cover the whole images. Otherwise, they are likely to be smaller\n(see the picture below).\n@param validPixROI2 Optional output rectangles inside the rectified images where all the pixels\nare valid. If alpha=0 , the ROIs cover the whole images. Otherwise, they are likely to be smaller\n(see the picture below).\n\nThe function computes the rotation matrices for each camera that (virtually) make both camera image\nplanes the same plane. Consequently, this makes all the epipolar lines parallel and thus simplifies\nthe dense stereo correspondence problem. The function takes the matrices computed by stereoCalibrate\nas input. As output, it provides two rotation matrices and also two projection matrices in the new\ncoordinates. The function distinguishes the following two cases:\n\n-   **Horizontal stereo**: the first and the second camera views are shifted relative to each other\n    mainly along the x axis (with possible small vertical shift). In the rectified images, the\n    corresponding epipolar lines in the left and right cameras are horizontal and have the same\n    y-coordinate. P1 and P2 look like:\n\n    \\f[\\texttt{P1} = \\begin{bmatrix} f & 0 & cx_1 & 0 \\\\ 0 & f & cy & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix}\\f]\n\n    \\f[\\texttt{P2} = \\begin{bmatrix} f & 0 & cx_2 & T_x*f \\\\ 0 & f & cy & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} ,\\f]\n\n    where \\f$T_x\\f$ is a horizontal shift between the cameras and \\f$cx_1=cx_2\\f$ if\n    CV_CALIB_ZERO_DISPARITY is set.\n\n-   **Vertical stereo**: the first and the second camera views are shifted relative to each other\n    mainly in vertical direction (and probably a bit in the horizontal direction too). The epipolar\n    lines in the rectified images are vertical and have the same x-coordinate. P1 and P2 look like:\n\n    \\f[\\texttt{P1} = \\begin{bmatrix} f & 0 & cx & 0 \\\\ 0 & f & cy_1 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix}\\f]\n\n    \\f[\\texttt{P2} = \\begin{bmatrix} f & 0 & cx & 0 \\\\ 0 & f & cy_2 & T_y*f \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} ,\\f]\n\n    where \\f$T_y\\f$ is a vertical shift between the cameras and \\f$cy_1=cy_2\\f$ if CALIB_ZERO_DISPARITY is\n    set.\n\nAs you can see, the first three columns of P1 and P2 will effectively be the new \"rectified\" camera\nmatrices. The matrices, together with R1 and R2 , can then be passed to initUndistortRectifyMap to\ninitialize the rectification map for each camera.\n\nSee below the screenshot from the stereo_calib.cpp sample. Some red horizontal lines pass through\nthe corresponding image regions. This means that the images are well rectified, which is what most\nstereo correspondence algorithms rely on. The green rectangles are roi1 and roi2 . You see that\ntheir interiors are all valid pixels.\n\n![image](pics/stereo_undistort.jpg)\n */\nCV_EXPORTS_W void stereoRectify( InputArray cameraMatrix1, InputArray distCoeffs1,\n                                 InputArray cameraMatrix2, InputArray distCoeffs2,\n                                 Size imageSize, InputArray R, InputArray T,\n                                 OutputArray R1, OutputArray R2,\n                                 OutputArray P1, OutputArray P2,\n                                 OutputArray Q, int flags = CALIB_ZERO_DISPARITY,\n                                 double alpha = -1, Size newImageSize = Size(),\n                                 CV_OUT Rect* validPixROI1 = 0, CV_OUT Rect* validPixROI2 = 0 );\n\n/** @brief Computes a rectification transform for an uncalibrated stereo camera.\n\n@param points1 Array of feature points in the first image.\n@param points2 The corresponding points in the second image. The same formats as in\nfindFundamentalMat are supported.\n@param F Input fundamental matrix. It can be computed from the same set of point pairs using\nfindFundamentalMat .\n@param imgSize Size of the image.\n@param H1 Output rectification homography matrix for the first image.\n@param H2 Output rectification homography matrix for the second image.\n@param threshold Optional threshold used to filter out the outliers. If the parameter is greater\nthan zero, all the point pairs that do not comply with the epipolar geometry (that is, the points\nfor which \\f$|\\texttt{points2[i]}^T*\\texttt{F}*\\texttt{points1[i]}|>\\texttt{threshold}\\f$ ) are\nrejected prior to computing the homographies. Otherwise,all the points are considered inliers.\n\nThe function computes the rectification transformations without knowing intrinsic parameters of the\ncameras and their relative position in the space, which explains the suffix \"uncalibrated\". Another\nrelated difference from stereoRectify is that the function outputs not the rectification\ntransformations in the object (3D) space, but the planar perspective transformations encoded by the\nhomography matrices H1 and H2 . The function implements the algorithm @cite Hartley99 .\n\n@note\n   While the algorithm does not need to know the intrinsic parameters of the cameras, it heavily\n    depends on the epipolar geometry. Therefore, if the camera lenses have a significant distortion,\n    it would be better to correct it before computing the fundamental matrix and calling this\n    function. For example, distortion coefficients can be estimated for each head of stereo camera\n    separately by using calibrateCamera . Then, the images can be corrected using undistort , or\n    just the point coordinates can be corrected with undistortPoints .\n */\nCV_EXPORTS_W bool stereoRectifyUncalibrated( InputArray points1, InputArray points2,\n                                             InputArray F, Size imgSize,\n                                             OutputArray H1, OutputArray H2,\n                                             double threshold = 5 );\n\n//! computes the rectification transformations for 3-head camera, where all the heads are on the same line.\nCV_EXPORTS_W float rectify3Collinear( InputArray cameraMatrix1, InputArray distCoeffs1,\n                                      InputArray cameraMatrix2, InputArray distCoeffs2,\n                                      InputArray cameraMatrix3, InputArray distCoeffs3,\n                                      InputArrayOfArrays imgpt1, InputArrayOfArrays imgpt3,\n                                      Size imageSize, InputArray R12, InputArray T12,\n                                      InputArray R13, InputArray T13,\n                                      OutputArray R1, OutputArray R2, OutputArray R3,\n                                      OutputArray P1, OutputArray P2, OutputArray P3,\n                                      OutputArray Q, double alpha, Size newImgSize,\n                                      CV_OUT Rect* roi1, CV_OUT Rect* roi2, int flags );\n\n/** @brief Returns the new camera matrix based on the free scaling parameter.\n\n@param cameraMatrix Input camera matrix.\n@param distCoeffs Input vector of distortion coefficients\n\\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$ of\n4, 5, 8, 12 or 14 elements. If the vector is NULL/empty, the zero distortion coefficients are\nassumed.\n@param imageSize Original image size.\n@param alpha Free scaling parameter between 0 (when all the pixels in the undistorted image are\nvalid) and 1 (when all the source image pixels are retained in the undistorted image). See\nstereoRectify for details.\n@param newImgSize Image size after rectification. By default,it is set to imageSize .\n@param validPixROI Optional output rectangle that outlines all-good-pixels region in the\nundistorted image. See roi1, roi2 description in stereoRectify .\n@param centerPrincipalPoint Optional flag that indicates whether in the new camera matrix the\nprincipal point should be at the image center or not. By default, the principal point is chosen to\nbest fit a subset of the source image (determined by alpha) to the corrected image.\n@return new_camera_matrix Output new camera matrix.\n\nThe function computes and returns the optimal new camera matrix based on the free scaling parameter.\nBy varying this parameter, you may retrieve only sensible pixels alpha=0 , keep all the original\nimage pixels if there is valuable information in the corners alpha=1 , or get something in between.\nWhen alpha\\>0 , the undistortion result is likely to have some black pixels corresponding to\n\"virtual\" pixels outside of the captured distorted image. The original camera matrix, distortion\ncoefficients, the computed new camera matrix, and newImageSize should be passed to\ninitUndistortRectifyMap to produce the maps for remap .\n */\nCV_EXPORTS_W Mat getOptimalNewCameraMatrix( InputArray cameraMatrix, InputArray distCoeffs,\n                                            Size imageSize, double alpha, Size newImgSize = Size(),\n                                            CV_OUT Rect* validPixROI = 0,\n                                            bool centerPrincipalPoint = false);\n\n/** @brief Converts points from Euclidean to homogeneous space.\n\n@param src Input vector of N-dimensional points.\n@param dst Output vector of N+1-dimensional points.\n\nThe function converts points from Euclidean to homogeneous space by appending 1's to the tuple of\npoint coordinates. That is, each point (x1, x2, ..., xn) is converted to (x1, x2, ..., xn, 1).\n */\nCV_EXPORTS_W void convertPointsToHomogeneous( InputArray src, OutputArray dst );\n\n/** @brief Converts points from homogeneous to Euclidean space.\n\n@param src Input vector of N-dimensional points.\n@param dst Output vector of N-1-dimensional points.\n\nThe function converts points homogeneous to Euclidean space using perspective projection. That is,\neach point (x1, x2, ... x(n-1), xn) is converted to (x1/xn, x2/xn, ..., x(n-1)/xn). When xn=0, the\noutput point coordinates will be (0,0,0,...).\n */\nCV_EXPORTS_W void convertPointsFromHomogeneous( InputArray src, OutputArray dst );\n\n/** @brief Converts points to/from homogeneous coordinates.\n\n@param src Input array or vector of 2D, 3D, or 4D points.\n@param dst Output vector of 2D, 3D, or 4D points.\n\nThe function converts 2D or 3D points from/to homogeneous coordinates by calling either\nconvertPointsToHomogeneous or convertPointsFromHomogeneous.\n\n@note The function is obsolete. Use one of the previous two functions instead.\n */\nCV_EXPORTS void convertPointsHomogeneous( InputArray src, OutputArray dst );\n\n/** @brief Calculates a fundamental matrix from the corresponding points in two images.\n\n@param points1 Array of N points from the first image. The point coordinates should be\nfloating-point (single or double precision).\n@param points2 Array of the second image points of the same size and format as points1 .\n@param method Method for computing a fundamental matrix.\n-   **CV_FM_7POINT** for a 7-point algorithm. \\f$N = 7\\f$\n-   **CV_FM_8POINT** for an 8-point algorithm. \\f$N \\ge 8\\f$\n-   **CV_FM_RANSAC** for the RANSAC algorithm. \\f$N \\ge 8\\f$\n-   **CV_FM_LMEDS** for the LMedS algorithm. \\f$N \\ge 8\\f$\n@param param1 Parameter used for RANSAC. It is the maximum distance from a point to an epipolar\nline in pixels, beyond which the point is considered an outlier and is not used for computing the\nfinal fundamental matrix. It can be set to something like 1-3, depending on the accuracy of the\npoint localization, image resolution, and the image noise.\n@param param2 Parameter used for the RANSAC or LMedS methods only. It specifies a desirable level\nof confidence (probability) that the estimated matrix is correct.\n@param mask\n\nThe epipolar geometry is described by the following equation:\n\n\\f[[p_2; 1]^T F [p_1; 1] = 0\\f]\n\nwhere \\f$F\\f$ is a fundamental matrix, \\f$p_1\\f$ and \\f$p_2\\f$ are corresponding points in the first and the\nsecond images, respectively.\n\nThe function calculates the fundamental matrix using one of four methods listed above and returns\nthe found fundamental matrix. Normally just one matrix is found. But in case of the 7-point\nalgorithm, the function may return up to 3 solutions ( \\f$9 \\times 3\\f$ matrix that stores all 3\nmatrices sequentially).\n\nThe calculated fundamental matrix may be passed further to computeCorrespondEpilines that finds the\nepipolar lines corresponding to the specified points. It can also be passed to\nstereoRectifyUncalibrated to compute the rectification transformation. :\n@code\n    // Example. Estimation of fundamental matrix using the RANSAC algorithm\n    int point_count = 100;\n    vector<Point2f> points1(point_count);\n    vector<Point2f> points2(point_count);\n\n    // initialize the points here ...\n    for( int i = 0; i < point_count; i++ )\n    {\n        points1[i] = ...;\n        points2[i] = ...;\n    }\n\n    Mat fundamental_matrix =\n     findFundamentalMat(points1, points2, FM_RANSAC, 3, 0.99);\n@endcode\n */\nCV_EXPORTS_W Mat findFundamentalMat( InputArray points1, InputArray points2,\n                                     int method = FM_RANSAC,\n                                     double param1 = 3., double param2 = 0.99,\n                                     OutputArray mask = noArray() );\n\n/** @overload */\nCV_EXPORTS Mat findFundamentalMat( InputArray points1, InputArray points2,\n                                   OutputArray mask, int method = FM_RANSAC,\n                                   double param1 = 3., double param2 = 0.99 );\n\n/** @brief Calculates an essential matrix from the corresponding points in two images.\n\n@param points1 Array of N (N \\>= 5) 2D points from the first image. The point coordinates should\nbe floating-point (single or double precision).\n@param points2 Array of the second image points of the same size and format as points1 .\n@param cameraMatrix Camera matrix \\f$K = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\\f$ .\nNote that this function assumes that points1 and points2 are feature points from cameras with the\nsame camera matrix.\n@param method Method for computing a fundamental matrix.\n-   **RANSAC** for the RANSAC algorithm.\n-   **MEDS** for the LMedS algorithm.\n@param threshold Parameter used for RANSAC. It is the maximum distance from a point to an epipolar\nline in pixels, beyond which the point is considered an outlier and is not used for computing the\nfinal fundamental matrix. It can be set to something like 1-3, depending on the accuracy of the\npoint localization, image resolution, and the image noise.\n@param prob Parameter used for the RANSAC or LMedS methods only. It specifies a desirable level of\nconfidence (probability) that the estimated matrix is correct.\n@param mask Output array of N elements, every element of which is set to 0 for outliers and to 1\nfor the other points. The array is computed only in the RANSAC and LMedS methods.\n\nThis function estimates essential matrix based on the five-point algorithm solver in @cite Nister03 .\n@cite SteweniusCFS is also a related. The epipolar geometry is described by the following equation:\n\n\\f[[p_2; 1]^T K^{-T} E K^{-1} [p_1; 1] = 0\\f]\n\nwhere \\f$E\\f$ is an essential matrix, \\f$p_1\\f$ and \\f$p_2\\f$ are corresponding points in the first and the\nsecond images, respectively. The result of this function may be passed further to\ndecomposeEssentialMat or recoverPose to recover the relative pose between cameras.\n */\nCV_EXPORTS_W Mat findEssentialMat( InputArray points1, InputArray points2,\n                                 InputArray cameraMatrix, int method = RANSAC,\n                                 double prob = 0.999, double threshold = 1.0,\n                                 OutputArray mask = noArray() );\n\n/** @overload\n@param points1 Array of N (N \\>= 5) 2D points from the first image. The point coordinates should\nbe floating-point (single or double precision).\n@param points2 Array of the second image points of the same size and format as points1 .\n@param focal focal length of the camera. Note that this function assumes that points1 and points2\nare feature points from cameras with same focal length and principle point.\n@param pp principle point of the camera.\n@param method Method for computing a fundamental matrix.\n-   **RANSAC** for the RANSAC algorithm.\n-   **LMEDS** for the LMedS algorithm.\n@param threshold Parameter used for RANSAC. It is the maximum distance from a point to an epipolar\nline in pixels, beyond which the point is considered an outlier and is not used for computing the\nfinal fundamental matrix. It can be set to something like 1-3, depending on the accuracy of the\npoint localization, image resolution, and the image noise.\n@param prob Parameter used for the RANSAC or LMedS methods only. It specifies a desirable level of\nconfidence (probability) that the estimated matrix is correct.\n@param mask Output array of N elements, every element of which is set to 0 for outliers and to 1\nfor the other points. The array is computed only in the RANSAC and LMedS methods.\n\nThis function differs from the one above that it computes camera matrix from focal length and\nprincipal point:\n\n\\f[K =\n\\begin{bmatrix}\nf & 0 & x_{pp}  \\\\\n0 & f & y_{pp}  \\\\\n0 & 0 & 1\n\\end{bmatrix}\\f]\n */\nCV_EXPORTS_W Mat findEssentialMat( InputArray points1, InputArray points2,\n                                 double focal = 1.0, Point2d pp = Point2d(0, 0),\n                                 int method = RANSAC, double prob = 0.999,\n                                 double threshold = 1.0, OutputArray mask = noArray() );\n\n/** @brief Decompose an essential matrix to possible rotations and translation.\n\n@param E The input essential matrix.\n@param R1 One possible rotation matrix.\n@param R2 Another possible rotation matrix.\n@param t One possible translation.\n\nThis function decompose an essential matrix E using svd decomposition @cite HartleyZ00 . Generally 4\npossible poses exists for a given E. They are \\f$[R_1, t]\\f$, \\f$[R_1, -t]\\f$, \\f$[R_2, t]\\f$, \\f$[R_2, -t]\\f$. By\ndecomposing E, you can only get the direction of the translation, so the function returns unit t.\n */\nCV_EXPORTS_W void decomposeEssentialMat( InputArray E, OutputArray R1, OutputArray R2, OutputArray t );\n\n/** @brief Recover relative camera rotation and translation from an estimated essential matrix and the\ncorresponding points in two images, using cheirality check. Returns the number of inliers which pass\nthe check.\n\n@param E The input essential matrix.\n@param points1 Array of N 2D points from the first image. The point coordinates should be\nfloating-point (single or double precision).\n@param points2 Array of the second image points of the same size and format as points1 .\n@param cameraMatrix Camera matrix \\f$K = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\\f$ .\nNote that this function assumes that points1 and points2 are feature points from cameras with the\nsame camera matrix.\n@param R Recovered relative rotation.\n@param t Recoverd relative translation.\n@param mask Input/output mask for inliers in points1 and points2.\n:   If it is not empty, then it marks inliers in points1 and points2 for then given essential\nmatrix E. Only these inliers will be used to recover pose. In the output mask only inliers\nwhich pass the cheirality check.\nThis function decomposes an essential matrix using decomposeEssentialMat and then verifies possible\npose hypotheses by doing cheirality check. The cheirality check basically means that the\ntriangulated 3D points should have positive depth. Some details can be found in @cite Nister03 .\n\nThis function can be used to process output E and mask from findEssentialMat. In this scenario,\npoints1 and points2 are the same input for findEssentialMat. :\n@code\n    // Example. Estimation of fundamental matrix using the RANSAC algorithm\n    int point_count = 100;\n    vector<Point2f> points1(point_count);\n    vector<Point2f> points2(point_count);\n\n    // initialize the points here ...\n    for( int i = 0; i < point_count; i++ )\n    {\n        points1[i] = ...;\n        points2[i] = ...;\n    }\n\n    // cametra matrix with both focal lengths = 1, and principal point = (0, 0)\n    Mat cameraMatrix = Mat::eye(3, 3, CV_64F);\n\n    Mat E, R, t, mask;\n\n    E = findEssentialMat(points1, points2, cameraMatrix, RANSAC, 0.999, 1.0, mask);\n    recoverPose(E, points1, points2, cameraMatrix, R, t, mask);\n@endcode\n */\nCV_EXPORTS_W int recoverPose( InputArray E, InputArray points1, InputArray points2,\n                            InputArray cameraMatrix, OutputArray R, OutputArray t,\n                            InputOutputArray mask = noArray() );\n\n/** @overload\n@param E The input essential matrix.\n@param points1 Array of N 2D points from the first image. The point coordinates should be\nfloating-point (single or double precision).\n@param points2 Array of the second image points of the same size and format as points1 .\n@param R Recovered relative rotation.\n@param t Recoverd relative translation.\n@param focal Focal length of the camera. Note that this function assumes that points1 and points2\nare feature points from cameras with same focal length and principle point.\n@param pp Principle point of the camera.\n@param mask Input/output mask for inliers in points1 and points2.\n:   If it is not empty, then it marks inliers in points1 and points2 for then given essential\nmatrix E. Only these inliers will be used to recover pose. In the output mask only inliers\nwhich pass the cheirality check.\n\nThis function differs from the one above that it computes camera matrix from focal length and\nprincipal point:\n\n\\f[K =\n\\begin{bmatrix}\nf & 0 & x_{pp}  \\\\\n0 & f & y_{pp}  \\\\\n0 & 0 & 1\n\\end{bmatrix}\\f]\n */\nCV_EXPORTS_W int recoverPose( InputArray E, InputArray points1, InputArray points2,\n                            OutputArray R, OutputArray t,\n                            double focal = 1.0, Point2d pp = Point2d(0, 0),\n                            InputOutputArray mask = noArray() );\n\n/** @brief For points in an image of a stereo pair, computes the corresponding epilines in the other image.\n\n@param points Input points. \\f$N \\times 1\\f$ or \\f$1 \\times N\\f$ matrix of type CV_32FC2 or\nvector\\<Point2f\\> .\n@param whichImage Index of the image (1 or 2) that contains the points .\n@param F Fundamental matrix that can be estimated using findFundamentalMat or stereoRectify .\n@param lines Output vector of the epipolar lines corresponding to the points in the other image.\nEach line \\f$ax + by + c=0\\f$ is encoded by 3 numbers \\f$(a, b, c)\\f$ .\n\nFor every point in one of the two images of a stereo pair, the function finds the equation of the\ncorresponding epipolar line in the other image.\n\nFrom the fundamental matrix definition (see findFundamentalMat ), line \\f$l^{(2)}_i\\f$ in the second\nimage for the point \\f$p^{(1)}_i\\f$ in the first image (when whichImage=1 ) is computed as:\n\n\\f[l^{(2)}_i = F p^{(1)}_i\\f]\n\nAnd vice versa, when whichImage=2, \\f$l^{(1)}_i\\f$ is computed from \\f$p^{(2)}_i\\f$ as:\n\n\\f[l^{(1)}_i = F^T p^{(2)}_i\\f]\n\nLine coefficients are defined up to a scale. They are normalized so that \\f$a_i^2+b_i^2=1\\f$ .\n */\nCV_EXPORTS_W void computeCorrespondEpilines( InputArray points, int whichImage,\n                                             InputArray F, OutputArray lines );\n\n/** @brief Reconstructs points by triangulation.\n\n@param projMatr1 3x4 projection matrix of the first camera.\n@param projMatr2 3x4 projection matrix of the second camera.\n@param projPoints1 2xN array of feature points in the first image. In case of c++ version it can\nbe also a vector of feature points or two-channel matrix of size 1xN or Nx1.\n@param projPoints2 2xN array of corresponding points in the second image. In case of c++ version\nit can be also a vector of feature points or two-channel matrix of size 1xN or Nx1.\n@param points4D 4xN array of reconstructed points in homogeneous coordinates.\n\nThe function reconstructs 3-dimensional points (in homogeneous coordinates) by using their\nobservations with a stereo camera. Projections matrices can be obtained from stereoRectify.\n\n@note\n   Keep in mind that all input data should be of float type in order for this function to work.\n\n@sa\n   reprojectImageTo3D\n */\nCV_EXPORTS_W void triangulatePoints( InputArray projMatr1, InputArray projMatr2,\n                                     InputArray projPoints1, InputArray projPoints2,\n                                     OutputArray points4D );\n\n/** @brief Refines coordinates of corresponding points.\n\n@param F 3x3 fundamental matrix.\n@param points1 1xN array containing the first set of points.\n@param points2 1xN array containing the second set of points.\n@param newPoints1 The optimized points1.\n@param newPoints2 The optimized points2.\n\nThe function implements the Optimal Triangulation Method (see Multiple View Geometry for details).\nFor each given point correspondence points1[i] \\<-\\> points2[i], and a fundamental matrix F, it\ncomputes the corrected correspondences newPoints1[i] \\<-\\> newPoints2[i] that minimize the geometric\nerror \\f$d(points1[i], newPoints1[i])^2 + d(points2[i],newPoints2[i])^2\\f$ (where \\f$d(a,b)\\f$ is the\ngeometric distance between points \\f$a\\f$ and \\f$b\\f$ ) subject to the epipolar constraint\n\\f$newPoints2^T * F * newPoints1 = 0\\f$ .\n */\nCV_EXPORTS_W void correctMatches( InputArray F, InputArray points1, InputArray points2,\n                                  OutputArray newPoints1, OutputArray newPoints2 );\n\n/** @brief Filters off small noise blobs (speckles) in the disparity map\n\n@param img The input 16-bit signed disparity image\n@param newVal The disparity value used to paint-off the speckles\n@param maxSpeckleSize The maximum speckle size to consider it a speckle. Larger blobs are not\naffected by the algorithm\n@param maxDiff Maximum difference between neighbor disparity pixels to put them into the same\nblob. Note that since StereoBM, StereoSGBM and may be other algorithms return a fixed-point\ndisparity map, where disparity values are multiplied by 16, this scale factor should be taken into\naccount when specifying this parameter value.\n@param buf The optional temporary buffer to avoid memory allocation within the function.\n */\nCV_EXPORTS_W void filterSpeckles( InputOutputArray img, double newVal,\n                                  int maxSpeckleSize, double maxDiff,\n                                  InputOutputArray buf = noArray() );\n\n//! computes valid disparity ROI from the valid ROIs of the rectified images (that are returned by cv::stereoRectify())\nCV_EXPORTS_W Rect getValidDisparityROI( Rect roi1, Rect roi2,\n                                        int minDisparity, int numberOfDisparities,\n                                        int SADWindowSize );\n\n//! validates disparity using the left-right check. The matrix \"cost\" should be computed by the stereo correspondence algorithm\nCV_EXPORTS_W void validateDisparity( InputOutputArray disparity, InputArray cost,\n                                     int minDisparity, int numberOfDisparities,\n                                     int disp12MaxDisp = 1 );\n\n/** @brief Reprojects a disparity image to 3D space.\n\n@param disparity Input single-channel 8-bit unsigned, 16-bit signed, 32-bit signed or 32-bit\nfloating-point disparity image. If 16-bit signed format is used, the values are assumed to have no\nfractional bits.\n@param _3dImage Output 3-channel floating-point image of the same size as disparity . Each\nelement of _3dImage(x,y) contains 3D coordinates of the point (x,y) computed from the disparity\nmap.\n@param Q \\f$4 \\times 4\\f$ perspective transformation matrix that can be obtained with stereoRectify.\n@param handleMissingValues Indicates, whether the function should handle missing values (i.e.\npoints where the disparity was not computed). If handleMissingValues=true, then pixels with the\nminimal disparity that corresponds to the outliers (see StereoMatcher::compute ) are transformed\nto 3D points with a very large Z value (currently set to 10000).\n@param ddepth The optional output array depth. If it is -1, the output image will have CV_32F\ndepth. ddepth can also be set to CV_16S, CV_32S or CV_32F.\n\nThe function transforms a single-channel disparity map to a 3-channel image representing a 3D\nsurface. That is, for each pixel (x,y) andthe corresponding disparity d=disparity(x,y) , it\ncomputes:\n\n\\f[\\begin{array}{l} [X \\; Y \\; Z \\; W]^T =  \\texttt{Q} *[x \\; y \\; \\texttt{disparity} (x,y) \\; 1]^T  \\\\ \\texttt{\\_3dImage} (x,y) = (X/W, \\; Y/W, \\; Z/W) \\end{array}\\f]\n\nThe matrix Q can be an arbitrary \\f$4 \\times 4\\f$ matrix (for example, the one computed by\nstereoRectify). To reproject a sparse set of points {(x,y,d),...} to 3D space, use\nperspectiveTransform .\n */\nCV_EXPORTS_W void reprojectImageTo3D( InputArray disparity,\n                                      OutputArray _3dImage, InputArray Q,\n                                      bool handleMissingValues = false,\n                                      int ddepth = -1 );\n\n/** @brief Calculates the Sampson Distance between two points.\n\nThe function sampsonDistance calculates and returns the first order approximation of the geometric error as:\n\\f[sd( \\texttt{pt1} , \\texttt{pt2} )= \\frac{(\\texttt{pt2}^t \\cdot \\texttt{F} \\cdot \\texttt{pt1})^2}{(\\texttt{F} \\cdot \\texttt{pt1})(0) + (\\texttt{F} \\cdot \\texttt{pt1})(1) + (\\texttt{F}^t \\cdot \\texttt{pt2})(0) + (\\texttt{F}^t \\cdot \\texttt{pt2})(1)}\\f]\nThe fundamental matrix may be calculated using the cv::findFundamentalMat function. See HZ 11.4.3 for details.\n@param pt1 first homogeneous 2d point\n@param pt2 second homogeneous 2d point\n@param F fundamental matrix\n*/\nCV_EXPORTS_W double sampsonDistance(InputArray pt1, InputArray pt2, InputArray F);\n\n/** @brief Computes an optimal affine transformation between two 3D point sets.\n\n@param src First input 3D point set.\n@param dst Second input 3D point set.\n@param out Output 3D affine transformation matrix \\f$3 \\times 4\\f$ .\n@param inliers Output vector indicating which points are inliers.\n@param ransacThreshold Maximum reprojection error in the RANSAC algorithm to consider a point as\nan inlier.\n@param confidence Confidence level, between 0 and 1, for the estimated transformation. Anything\nbetween 0.95 and 0.99 is usually good enough. Values too close to 1 can slow down the estimation\nsignificantly. Values lower than 0.8-0.9 can result in an incorrectly estimated transformation.\n\nThe function estimates an optimal 3D affine transformation between two 3D point sets using the\nRANSAC algorithm.\n */\nCV_EXPORTS_W  int estimateAffine3D(InputArray src, InputArray dst,\n                                   OutputArray out, OutputArray inliers,\n                                   double ransacThreshold = 3, double confidence = 0.99);\n\n/** @brief Decompose a homography matrix to rotation(s), translation(s) and plane normal(s).\n\n@param H The input homography matrix between two images.\n@param K The input intrinsic camera calibration matrix.\n@param rotations Array of rotation matrices.\n@param translations Array of translation matrices.\n@param normals Array of plane normal matrices.\n\nThis function extracts relative camera motion between two views observing a planar object from the\nhomography H induced by the plane. The intrinsic camera matrix K must also be provided. The function\nmay return up to four mathematical solution sets. At least two of the solutions may further be\ninvalidated if point correspondences are available by applying positive depth constraint (all points\nmust be in front of the camera). The decomposition method is described in detail in @cite Malis .\n */\nCV_EXPORTS_W int decomposeHomographyMat(InputArray H,\n                                        InputArray K,\n                                        OutputArrayOfArrays rotations,\n                                        OutputArrayOfArrays translations,\n                                        OutputArrayOfArrays normals);\n\n/** @brief The base class for stereo correspondence algorithms.\n */\nclass CV_EXPORTS_W StereoMatcher : public Algorithm\n{\npublic:\n    enum { DISP_SHIFT = 4,\n           DISP_SCALE = (1 << DISP_SHIFT)\n         };\n\n    /** @brief Computes disparity map for the specified stereo pair\n\n    @param left Left 8-bit single-channel image.\n    @param right Right image of the same size and the same type as the left one.\n    @param disparity Output disparity map. It has the same size as the input images. Some algorithms,\n    like StereoBM or StereoSGBM compute 16-bit fixed-point disparity map (where each disparity value\n    has 4 fractional bits), whereas other algorithms output 32-bit floating-point disparity map.\n     */\n    CV_WRAP virtual void compute( InputArray left, InputArray right,\n                                  OutputArray disparity ) = 0;\n\n    CV_WRAP virtual int getMinDisparity() const = 0;\n    CV_WRAP virtual void setMinDisparity(int minDisparity) = 0;\n\n    CV_WRAP virtual int getNumDisparities() const = 0;\n    CV_WRAP virtual void setNumDisparities(int numDisparities) = 0;\n\n    CV_WRAP virtual int getBlockSize() const = 0;\n    CV_WRAP virtual void setBlockSize(int blockSize) = 0;\n\n    CV_WRAP virtual int getSpeckleWindowSize() const = 0;\n    CV_WRAP virtual void setSpeckleWindowSize(int speckleWindowSize) = 0;\n\n    CV_WRAP virtual int getSpeckleRange() const = 0;\n    CV_WRAP virtual void setSpeckleRange(int speckleRange) = 0;\n\n    CV_WRAP virtual int getDisp12MaxDiff() const = 0;\n    CV_WRAP virtual void setDisp12MaxDiff(int disp12MaxDiff) = 0;\n};\n\n\n/** @brief Class for computing stereo correspondence using the block matching algorithm, introduced and\ncontributed to OpenCV by K. Konolige.\n */\nclass CV_EXPORTS_W StereoBM : public StereoMatcher\n{\npublic:\n    enum { PREFILTER_NORMALIZED_RESPONSE = 0,\n           PREFILTER_XSOBEL              = 1\n         };\n\n    CV_WRAP virtual int getPreFilterType() const = 0;\n    CV_WRAP virtual void setPreFilterType(int preFilterType) = 0;\n\n    CV_WRAP virtual int getPreFilterSize() const = 0;\n    CV_WRAP virtual void setPreFilterSize(int preFilterSize) = 0;\n\n    CV_WRAP virtual int getPreFilterCap() const = 0;\n    CV_WRAP virtual void setPreFilterCap(int preFilterCap) = 0;\n\n    CV_WRAP virtual int getTextureThreshold() const = 0;\n    CV_WRAP virtual void setTextureThreshold(int textureThreshold) = 0;\n\n    CV_WRAP virtual int getUniquenessRatio() const = 0;\n    CV_WRAP virtual void setUniquenessRatio(int uniquenessRatio) = 0;\n\n    CV_WRAP virtual int getSmallerBlockSize() const = 0;\n    CV_WRAP virtual void setSmallerBlockSize(int blockSize) = 0;\n\n    CV_WRAP virtual Rect getROI1() const = 0;\n    CV_WRAP virtual void setROI1(Rect roi1) = 0;\n\n    CV_WRAP virtual Rect getROI2() const = 0;\n    CV_WRAP virtual void setROI2(Rect roi2) = 0;\n\n    /** @brief Creates StereoBM object\n\n    @param numDisparities the disparity search range. For each pixel algorithm will find the best\n    disparity from 0 (default minimum disparity) to numDisparities. The search range can then be\n    shifted by changing the minimum disparity.\n    @param blockSize the linear size of the blocks compared by the algorithm. The size should be odd\n    (as the block is centered at the current pixel). Larger block size implies smoother, though less\n    accurate disparity map. Smaller block size gives more detailed disparity map, but there is higher\n    chance for algorithm to find a wrong correspondence.\n\n    The function create StereoBM object. You can then call StereoBM::compute() to compute disparity for\n    a specific stereo pair.\n     */\n    CV_WRAP static Ptr<StereoBM> create(int numDisparities = 0, int blockSize = 21);\n};\n\n/** @brief The class implements the modified H. Hirschmuller algorithm @cite HH08 that differs from the original\none as follows:\n\n-   By default, the algorithm is single-pass, which means that you consider only 5 directions\ninstead of 8. Set mode=StereoSGBM::MODE_HH in createStereoSGBM to run the full variant of the\nalgorithm but beware that it may consume a lot of memory.\n-   The algorithm matches blocks, not individual pixels. Though, setting blockSize=1 reduces the\nblocks to single pixels.\n-   Mutual information cost function is not implemented. Instead, a simpler Birchfield-Tomasi\nsub-pixel metric from @cite BT98 is used. Though, the color images are supported as well.\n-   Some pre- and post- processing steps from K. Konolige algorithm StereoBM are included, for\nexample: pre-filtering (StereoBM::PREFILTER_XSOBEL type) and post-filtering (uniqueness\ncheck, quadratic interpolation and speckle filtering).\n\n@note\n   -   (Python) An example illustrating the use of the StereoSGBM matching algorithm can be found\n        at opencv_source_code/samples/python/stereo_match.py\n */\nclass CV_EXPORTS_W StereoSGBM : public StereoMatcher\n{\npublic:\n    enum\n    {\n        MODE_SGBM = 0,\n        MODE_HH   = 1,\n        MODE_SGBM_3WAY = 2\n    };\n\n    CV_WRAP virtual int getPreFilterCap() const = 0;\n    CV_WRAP virtual void setPreFilterCap(int preFilterCap) = 0;\n\n    CV_WRAP virtual int getUniquenessRatio() const = 0;\n    CV_WRAP virtual void setUniquenessRatio(int uniquenessRatio) = 0;\n\n    CV_WRAP virtual int getP1() const = 0;\n    CV_WRAP virtual void setP1(int P1) = 0;\n\n    CV_WRAP virtual int getP2() const = 0;\n    CV_WRAP virtual void setP2(int P2) = 0;\n\n    CV_WRAP virtual int getMode() const = 0;\n    CV_WRAP virtual void setMode(int mode) = 0;\n\n    /** @brief Creates StereoSGBM object\n\n    @param minDisparity Minimum possible disparity value. Normally, it is zero but sometimes\n    rectification algorithms can shift images, so this parameter needs to be adjusted accordingly.\n    @param numDisparities Maximum disparity minus minimum disparity. The value is always greater than\n    zero. In the current implementation, this parameter must be divisible by 16.\n    @param blockSize Matched block size. It must be an odd number \\>=1 . Normally, it should be\n    somewhere in the 3..11 range.\n    @param P1 The first parameter controlling the disparity smoothness. See below.\n    @param P2 The second parameter controlling the disparity smoothness. The larger the values are,\n    the smoother the disparity is. P1 is the penalty on the disparity change by plus or minus 1\n    between neighbor pixels. P2 is the penalty on the disparity change by more than 1 between neighbor\n    pixels. The algorithm requires P2 \\> P1 . See stereo_match.cpp sample where some reasonably good\n    P1 and P2 values are shown (like 8\\*number_of_image_channels\\*SADWindowSize\\*SADWindowSize and\n    32\\*number_of_image_channels\\*SADWindowSize\\*SADWindowSize , respectively).\n    @param disp12MaxDiff Maximum allowed difference (in integer pixel units) in the left-right\n    disparity check. Set it to a non-positive value to disable the check.\n    @param preFilterCap Truncation value for the prefiltered image pixels. The algorithm first\n    computes x-derivative at each pixel and clips its value by [-preFilterCap, preFilterCap] interval.\n    The result values are passed to the Birchfield-Tomasi pixel cost function.\n    @param uniquenessRatio Margin in percentage by which the best (minimum) computed cost function\n    value should \"win\" the second best value to consider the found match correct. Normally, a value\n    within the 5-15 range is good enough.\n    @param speckleWindowSize Maximum size of smooth disparity regions to consider their noise speckles\n    and invalidate. Set it to 0 to disable speckle filtering. Otherwise, set it somewhere in the\n    50-200 range.\n    @param speckleRange Maximum disparity variation within each connected component. If you do speckle\n    filtering, set the parameter to a positive value, it will be implicitly multiplied by 16.\n    Normally, 1 or 2 is good enough.\n    @param mode Set it to StereoSGBM::MODE_HH to run the full-scale two-pass dynamic programming\n    algorithm. It will consume O(W\\*H\\*numDisparities) bytes, which is large for 640x480 stereo and\n    huge for HD-size pictures. By default, it is set to false .\n\n    The first constructor initializes StereoSGBM with all the default parameters. So, you only have to\n    set StereoSGBM::numDisparities at minimum. The second constructor enables you to set each parameter\n    to a custom value.\n     */\n    CV_WRAP static Ptr<StereoSGBM> create(int minDisparity, int numDisparities, int blockSize,\n                                          int P1 = 0, int P2 = 0, int disp12MaxDiff = 0,\n                                          int preFilterCap = 0, int uniquenessRatio = 0,\n                                          int speckleWindowSize = 0, int speckleRange = 0,\n                                          int mode = StereoSGBM::MODE_SGBM);\n};\n\n//! @} calib3d\n\n/** @brief The methods in this namespace use a so-called fisheye camera model.\n  @ingroup calib3d_fisheye\n*/\nnamespace fisheye\n{\n//! @addtogroup calib3d_fisheye\n//! @{\n\n    enum{\n        CALIB_USE_INTRINSIC_GUESS   = 1,\n        CALIB_RECOMPUTE_EXTRINSIC   = 2,\n        CALIB_CHECK_COND            = 4,\n        CALIB_FIX_SKEW              = 8,\n        CALIB_FIX_K1                = 16,\n        CALIB_FIX_K2                = 32,\n        CALIB_FIX_K3                = 64,\n        CALIB_FIX_K4                = 128,\n        CALIB_FIX_INTRINSIC         = 256\n    };\n\n    /** @brief Projects points using fisheye model\n\n    @param objectPoints Array of object points, 1xN/Nx1 3-channel (or vector\\<Point3f\\> ), where N is\n    the number of points in the view.\n    @param imagePoints Output array of image points, 2xN/Nx2 1-channel or 1xN/Nx1 2-channel, or\n    vector\\<Point2f\\>.\n    @param affine\n    @param K Camera matrix \\f$K = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\\f$.\n    @param D Input vector of distortion coefficients \\f$(k_1, k_2, k_3, k_4)\\f$.\n    @param alpha The skew coefficient.\n    @param jacobian Optional output 2Nx15 jacobian matrix of derivatives of image points with respect\n    to components of the focal lengths, coordinates of the principal point, distortion coefficients,\n    rotation vector, translation vector, and the skew. In the old interface different components of\n    the jacobian are returned via different output parameters.\n\n    The function computes projections of 3D points to the image plane given intrinsic and extrinsic\n    camera parameters. Optionally, the function computes Jacobians - matrices of partial derivatives of\n    image points coordinates (as functions of all the input parameters) with respect to the particular\n    parameters, intrinsic and/or extrinsic.\n     */\n    CV_EXPORTS void projectPoints(InputArray objectPoints, OutputArray imagePoints, const Affine3d& affine,\n        InputArray K, InputArray D, double alpha = 0, OutputArray jacobian = noArray());\n\n    /** @overload */\n    CV_EXPORTS_W void projectPoints(InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec,\n        InputArray K, InputArray D, double alpha = 0, OutputArray jacobian = noArray());\n\n    /** @brief Distorts 2D points using fisheye model.\n\n    @param undistorted Array of object points, 1xN/Nx1 2-channel (or vector\\<Point2f\\> ), where N is\n    the number of points in the view.\n    @param K Camera matrix \\f$K = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\\f$.\n    @param D Input vector of distortion coefficients \\f$(k_1, k_2, k_3, k_4)\\f$.\n    @param alpha The skew coefficient.\n    @param distorted Output array of image points, 1xN/Nx1 2-channel, or vector\\<Point2f\\> .\n     */\n    CV_EXPORTS_W void distortPoints(InputArray undistorted, OutputArray distorted, InputArray K, InputArray D, double alpha = 0);\n\n    /** @brief Undistorts 2D points using fisheye model\n\n    @param distorted Array of object points, 1xN/Nx1 2-channel (or vector\\<Point2f\\> ), where N is the\n    number of points in the view.\n    @param K Camera matrix \\f$K = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\\f$.\n    @param D Input vector of distortion coefficients \\f$(k_1, k_2, k_3, k_4)\\f$.\n    @param R Rectification transformation in the object space: 3x3 1-channel, or vector: 3x1/1x3\n    1-channel or 1x1 3-channel\n    @param P New camera matrix (3x3) or new projection matrix (3x4)\n    @param undistorted Output array of image points, 1xN/Nx1 2-channel, or vector\\<Point2f\\> .\n     */\n    CV_EXPORTS_W void undistortPoints(InputArray distorted, OutputArray undistorted,\n        InputArray K, InputArray D, InputArray R = noArray(), InputArray P  = noArray());\n\n    /** @brief Computes undistortion and rectification maps for image transform by cv::remap(). If D is empty zero\n    distortion is used, if R or P is empty identity matrixes are used.\n\n    @param K Camera matrix \\f$K = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\\f$.\n    @param D Input vector of distortion coefficients \\f$(k_1, k_2, k_3, k_4)\\f$.\n    @param R Rectification transformation in the object space: 3x3 1-channel, or vector: 3x1/1x3\n    1-channel or 1x1 3-channel\n    @param P New camera matrix (3x3) or new projection matrix (3x4)\n    @param size Undistorted image size.\n    @param m1type Type of the first output map that can be CV_32FC1 or CV_16SC2 . See convertMaps()\n    for details.\n    @param map1 The first output map.\n    @param map2 The second output map.\n     */\n    CV_EXPORTS_W void initUndistortRectifyMap(InputArray K, InputArray D, InputArray R, InputArray P,\n        const cv::Size& size, int m1type, OutputArray map1, OutputArray map2);\n\n    /** @brief Transforms an image to compensate for fisheye lens distortion.\n\n    @param distorted image with fisheye lens distortion.\n    @param undistorted Output image with compensated fisheye lens distortion.\n    @param K Camera matrix \\f$K = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\\f$.\n    @param D Input vector of distortion coefficients \\f$(k_1, k_2, k_3, k_4)\\f$.\n    @param Knew Camera matrix of the distorted image. By default, it is the identity matrix but you\n    may additionally scale and shift the result by using a different matrix.\n    @param new_size\n\n    The function transforms an image to compensate radial and tangential lens distortion.\n\n    The function is simply a combination of fisheye::initUndistortRectifyMap (with unity R ) and remap\n    (with bilinear interpolation). See the former function for details of the transformation being\n    performed.\n\n    See below the results of undistortImage.\n       -   a\\) result of undistort of perspective camera model (all possible coefficients (k_1, k_2, k_3,\n            k_4, k_5, k_6) of distortion were optimized under calibration)\n        -   b\\) result of fisheye::undistortImage of fisheye camera model (all possible coefficients (k_1, k_2,\n            k_3, k_4) of fisheye distortion were optimized under calibration)\n        -   c\\) original image was captured with fisheye lens\n\n    Pictures a) and b) almost the same. But if we consider points of image located far from the center\n    of image, we can notice that on image a) these points are distorted.\n\n    ![image](pics/fisheye_undistorted.jpg)\n     */\n    CV_EXPORTS_W void undistortImage(InputArray distorted, OutputArray undistorted,\n        InputArray K, InputArray D, InputArray Knew = cv::noArray(), const Size& new_size = Size());\n\n    /** @brief Estimates new camera matrix for undistortion or rectification.\n\n    @param K Camera matrix \\f$K = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\\f$.\n    @param image_size\n    @param D Input vector of distortion coefficients \\f$(k_1, k_2, k_3, k_4)\\f$.\n    @param R Rectification transformation in the object space: 3x3 1-channel, or vector: 3x1/1x3\n    1-channel or 1x1 3-channel\n    @param P New camera matrix (3x3) or new projection matrix (3x4)\n    @param balance Sets the new focal length in range between the min focal length and the max focal\n    length. Balance is in range of [0, 1].\n    @param new_size\n    @param fov_scale Divisor for new focal length.\n     */\n    CV_EXPORTS_W void estimateNewCameraMatrixForUndistortRectify(InputArray K, InputArray D, const Size &image_size, InputArray R,\n        OutputArray P, double balance = 0.0, const Size& new_size = Size(), double fov_scale = 1.0);\n\n    /** @brief Performs camera calibaration\n\n    @param objectPoints vector of vectors of calibration pattern points in the calibration pattern\n    coordinate space.\n    @param imagePoints vector of vectors of the projections of calibration pattern points.\n    imagePoints.size() and objectPoints.size() and imagePoints[i].size() must be equal to\n    objectPoints[i].size() for each i.\n    @param image_size Size of the image used only to initialize the intrinsic camera matrix.\n    @param K Output 3x3 floating-point camera matrix\n    \\f$A = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\\f$ . If\n    fisheye::CALIB_USE_INTRINSIC_GUESS/ is specified, some or all of fx, fy, cx, cy must be\n    initialized before calling the function.\n    @param D Output vector of distortion coefficients \\f$(k_1, k_2, k_3, k_4)\\f$.\n    @param rvecs Output vector of rotation vectors (see Rodrigues ) estimated for each pattern view.\n    That is, each k-th rotation vector together with the corresponding k-th translation vector (see\n    the next output parameter description) brings the calibration pattern from the model coordinate\n    space (in which object points are specified) to the world coordinate space, that is, a real\n    position of the calibration pattern in the k-th pattern view (k=0.. *M* -1).\n    @param tvecs Output vector of translation vectors estimated for each pattern view.\n    @param flags Different flags that may be zero or a combination of the following values:\n    -   **fisheye::CALIB_USE_INTRINSIC_GUESS** cameraMatrix contains valid initial values of\n    fx, fy, cx, cy that are optimized further. Otherwise, (cx, cy) is initially set to the image\n    center ( imageSize is used), and focal distances are computed in a least-squares fashion.\n    -   **fisheye::CALIB_RECOMPUTE_EXTRINSIC** Extrinsic will be recomputed after each iteration\n    of intrinsic optimization.\n    -   **fisheye::CALIB_CHECK_COND** The functions will check validity of condition number.\n    -   **fisheye::CALIB_FIX_SKEW** Skew coefficient (alpha) is set to zero and stay zero.\n    -   **fisheye::CALIB_FIX_K1..4** Selected distortion coefficients are set to zeros and stay\n    zero.\n    @param criteria Termination criteria for the iterative optimization algorithm.\n     */\n    CV_EXPORTS_W double calibrate(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, const Size& image_size,\n        InputOutputArray K, InputOutputArray D, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags = 0,\n            TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 100, DBL_EPSILON));\n\n    /** @brief Stereo rectification for fisheye camera model\n\n    @param K1 First camera matrix.\n    @param D1 First camera distortion parameters.\n    @param K2 Second camera matrix.\n    @param D2 Second camera distortion parameters.\n    @param imageSize Size of the image used for stereo calibration.\n    @param R Rotation matrix between the coordinate systems of the first and the second\n    cameras.\n    @param tvec Translation vector between coordinate systems of the cameras.\n    @param R1 Output 3x3 rectification transform (rotation matrix) for the first camera.\n    @param R2 Output 3x3 rectification transform (rotation matrix) for the second camera.\n    @param P1 Output 3x4 projection matrix in the new (rectified) coordinate systems for the first\n    camera.\n    @param P2 Output 3x4 projection matrix in the new (rectified) coordinate systems for the second\n    camera.\n    @param Q Output \\f$4 \\times 4\\f$ disparity-to-depth mapping matrix (see reprojectImageTo3D ).\n    @param flags Operation flags that may be zero or CV_CALIB_ZERO_DISPARITY . If the flag is set,\n    the function makes the principal points of each camera have the same pixel coordinates in the\n    rectified views. And if the flag is not set, the function may still shift the images in the\n    horizontal or vertical direction (depending on the orientation of epipolar lines) to maximize the\n    useful image area.\n    @param newImageSize New image resolution after rectification. The same size should be passed to\n    initUndistortRectifyMap (see the stereo_calib.cpp sample in OpenCV samples directory). When (0,0)\n    is passed (default), it is set to the original imageSize . Setting it to larger value can help you\n    preserve details in the original image, especially when there is a big radial distortion.\n    @param balance Sets the new focal length in range between the min focal length and the max focal\n    length. Balance is in range of [0, 1].\n    @param fov_scale Divisor for new focal length.\n     */\n    CV_EXPORTS_W void stereoRectify(InputArray K1, InputArray D1, InputArray K2, InputArray D2, const Size &imageSize, InputArray R, InputArray tvec,\n        OutputArray R1, OutputArray R2, OutputArray P1, OutputArray P2, OutputArray Q, int flags, const Size &newImageSize = Size(),\n        double balance = 0.0, double fov_scale = 1.0);\n\n    /** @brief Performs stereo calibration\n\n    @param objectPoints Vector of vectors of the calibration pattern points.\n    @param imagePoints1 Vector of vectors of the projections of the calibration pattern points,\n    observed by the first camera.\n    @param imagePoints2 Vector of vectors of the projections of the calibration pattern points,\n    observed by the second camera.\n    @param K1 Input/output first camera matrix:\n    \\f$\\vecthreethree{f_x^{(j)}}{0}{c_x^{(j)}}{0}{f_y^{(j)}}{c_y^{(j)}}{0}{0}{1}\\f$ , \\f$j = 0,\\, 1\\f$ . If\n    any of fisheye::CALIB_USE_INTRINSIC_GUESS , fisheye::CV_CALIB_FIX_INTRINSIC are specified,\n    some or all of the matrix components must be initialized.\n    @param D1 Input/output vector of distortion coefficients \\f$(k_1, k_2, k_3, k_4)\\f$ of 4 elements.\n    @param K2 Input/output second camera matrix. The parameter is similar to K1 .\n    @param D2 Input/output lens distortion coefficients for the second camera. The parameter is\n    similar to D1 .\n    @param imageSize Size of the image used only to initialize intrinsic camera matrix.\n    @param R Output rotation matrix between the 1st and the 2nd camera coordinate systems.\n    @param T Output translation vector between the coordinate systems of the cameras.\n    @param flags Different flags that may be zero or a combination of the following values:\n    -   **fisheye::CV_CALIB_FIX_INTRINSIC** Fix K1, K2? and D1, D2? so that only R, T matrices\n    are estimated.\n    -   **fisheye::CALIB_USE_INTRINSIC_GUESS** K1, K2 contains valid initial values of\n    fx, fy, cx, cy that are optimized further. Otherwise, (cx, cy) is initially set to the image\n    center (imageSize is used), and focal distances are computed in a least-squares fashion.\n    -   **fisheye::CALIB_RECOMPUTE_EXTRINSIC** Extrinsic will be recomputed after each iteration\n    of intrinsic optimization.\n    -   **fisheye::CALIB_CHECK_COND** The functions will check validity of condition number.\n    -   **fisheye::CALIB_FIX_SKEW** Skew coefficient (alpha) is set to zero and stay zero.\n    -   **fisheye::CALIB_FIX_K1..4** Selected distortion coefficients are set to zeros and stay\n    zero.\n    @param criteria Termination criteria for the iterative optimization algorithm.\n     */\n    CV_EXPORTS_W double stereoCalibrate(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2,\n                                  InputOutputArray K1, InputOutputArray D1, InputOutputArray K2, InputOutputArray D2, Size imageSize,\n                                  OutputArray R, OutputArray T, int flags = fisheye::CALIB_FIX_INTRINSIC,\n                                  TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 100, DBL_EPSILON));\n\n//! @} calib3d_fisheye\n}\n\n} // cv\n\n#ifndef DISABLE_OPENCV_24_COMPATIBILITY\n#include \"opencv2/calib3d/calib3d_c.h\"\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/affine.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_AFFINE3_HPP__\n#define __OPENCV_CORE_AFFINE3_HPP__\n\n#ifdef __cplusplus\n\n#include <opencv2/core.hpp>\n\nnamespace cv\n{\n\n//! @addtogroup core\n//! @{\n\n    /** @brief Affine transform\n      @todo document\n     */\n    template<typename T>\n    class Affine3\n    {\n    public:\n        typedef T float_type;\n        typedef Matx<float_type, 3, 3> Mat3;\n        typedef Matx<float_type, 4, 4> Mat4;\n        typedef Vec<float_type, 3> Vec3;\n\n        Affine3();\n\n        //! Augmented affine matrix\n        Affine3(const Mat4& affine);\n\n        //! Rotation matrix\n        Affine3(const Mat3& R, const Vec3& t = Vec3::all(0));\n\n        //! Rodrigues vector\n        Affine3(const Vec3& rvec, const Vec3& t = Vec3::all(0));\n\n        //! Combines all contructors above. Supports 4x4, 4x3, 3x3, 1x3, 3x1 sizes of data matrix\n        explicit Affine3(const Mat& data, const Vec3& t = Vec3::all(0));\n\n        //! From 16th element array\n        explicit Affine3(const float_type* vals);\n\n        //! Create identity transform\n        static Affine3 Identity();\n\n        //! Rotation matrix\n        void rotation(const Mat3& R);\n\n        //! Rodrigues vector\n        void rotation(const Vec3& rvec);\n\n        //! Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix;\n        void rotation(const Mat& data);\n\n        void linear(const Mat3& L);\n        void translation(const Vec3& t);\n\n        Mat3 rotation() const;\n        Mat3 linear() const;\n        Vec3 translation() const;\n\n        //! Rodrigues vector\n        Vec3 rvec() const;\n\n        Affine3 inv(int method = cv::DECOMP_SVD) const;\n\n        //! a.rotate(R) is equivalent to Affine(R, 0) * a;\n        Affine3 rotate(const Mat3& R) const;\n\n        //! a.rotate(rvec) is equivalent to Affine(rvec, 0) * a;\n        Affine3 rotate(const Vec3& rvec) const;\n\n        //! a.translate(t) is equivalent to Affine(E, t) * a;\n        Affine3 translate(const Vec3& t) const;\n\n        //! a.concatenate(affine) is equivalent to affine * a;\n        Affine3 concatenate(const Affine3& affine) const;\n\n        template <typename Y> operator Affine3<Y>() const;\n\n        template <typename Y> Affine3<Y> cast() const;\n\n        Mat4 matrix;\n\n#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H\n        Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine);\n        Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine);\n        operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const;\n        operator Eigen::Transform<T, 3, Eigen::Affine>() const;\n#endif\n    };\n\n    template<typename T> static\n    Affine3<T> operator*(const Affine3<T>& affine1, const Affine3<T>& affine2);\n\n    template<typename T, typename V> static\n    V operator*(const Affine3<T>& affine, const V& vector);\n\n    typedef Affine3<float> Affine3f;\n    typedef Affine3<double> Affine3d;\n\n    static Vec3f operator*(const Affine3f& affine, const Vec3f& vector);\n    static Vec3d operator*(const Affine3d& affine, const Vec3d& vector);\n\n    template<typename _Tp> class DataType< Affine3<_Tp> >\n    {\n    public:\n        typedef Affine3<_Tp>                               value_type;\n        typedef Affine3<typename DataType<_Tp>::work_type> work_type;\n        typedef _Tp                                        channel_type;\n\n        enum { generic_type = 0,\n               depth        = DataType<channel_type>::depth,\n               channels     = 16,\n               fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n               type         = CV_MAKETYPE(depth, channels)\n             };\n\n        typedef Vec<channel_type, channels> vec_type;\n    };\n\n//! @} core\n\n}\n\n//! @cond IGNORED\n\n///////////////////////////////////////////////////////////////////////////////////\n// Implementaiton\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3()\n    : matrix(Mat4::eye())\n{}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Mat4& affine)\n    : matrix(affine)\n{}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Mat3& R, const Vec3& t)\n{\n    rotation(R);\n    translation(t);\n    matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;\n    matrix.val[15] = 1;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Vec3& _rvec, const Vec3& t)\n{\n    rotation(_rvec);\n    translation(t);\n    matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;\n    matrix.val[15] = 1;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const cv::Mat& data, const Vec3& t)\n{\n    CV_Assert(data.type() == cv::DataType<T>::type);\n\n    if (data.cols == 4 && data.rows == 4)\n    {\n        data.copyTo(matrix);\n        return;\n    }\n    else if (data.cols == 4 && data.rows == 3)\n    {\n        rotation(data(Rect(0, 0, 3, 3)));\n        translation(data(Rect(3, 0, 1, 3)));\n        return;\n    }\n\n    rotation(data);\n    translation(t);\n    matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;\n    matrix.val[15] = 1;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const float_type* vals) : matrix(vals)\n{}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::Identity()\n{\n    return Affine3<T>(cv::Affine3<T>::Mat4::eye());\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::rotation(const Mat3& R)\n{\n    linear(R);\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::rotation(const Vec3& _rvec)\n{\n    double rx = _rvec[0], ry = _rvec[1], rz = _rvec[2];\n    double theta = std::sqrt(rx*rx + ry*ry + rz*rz);\n\n    if (theta < DBL_EPSILON)\n        rotation(Mat3::eye());\n    else\n    {\n        const double I[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1 };\n\n        double c = std::cos(theta);\n        double s = std::sin(theta);\n        double c1 = 1. - c;\n        double itheta = (theta != 0) ? 1./theta : 0.;\n\n        rx *= itheta; ry *= itheta; rz *= itheta;\n\n        double rrt[] = { rx*rx, rx*ry, rx*rz, rx*ry, ry*ry, ry*rz, rx*rz, ry*rz, rz*rz };\n        double _r_x_[] = { 0, -rz, ry, rz, 0, -rx, -ry, rx, 0 };\n        Mat3 R;\n\n        // R = cos(theta)*I + (1 - cos(theta))*r*rT + sin(theta)*[r_x]\n        // where [r_x] is [0 -rz ry; rz 0 -rx; -ry rx 0]\n        for(int k = 0; k < 9; ++k)\n            R.val[k] = static_cast<float_type>(c*I[k] + c1*rrt[k] + s*_r_x_[k]);\n\n        rotation(R);\n    }\n}\n\n//Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix;\ntemplate<typename T> inline\nvoid cv::Affine3<T>::rotation(const cv::Mat& data)\n{\n    CV_Assert(data.type() == cv::DataType<T>::type);\n\n    if (data.cols == 3 && data.rows == 3)\n    {\n        Mat3 R;\n        data.copyTo(R);\n        rotation(R);\n    }\n    else if ((data.cols == 3 && data.rows == 1) || (data.cols == 1 && data.rows == 3))\n    {\n        Vec3 _rvec;\n        data.reshape(1, 3).copyTo(_rvec);\n        rotation(_rvec);\n    }\n    else\n        CV_Assert(!\"Input marix can be 3x3, 1x3 or 3x1\");\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::linear(const Mat3& L)\n{\n    matrix.val[0] = L.val[0]; matrix.val[1] = L.val[1];  matrix.val[ 2] = L.val[2];\n    matrix.val[4] = L.val[3]; matrix.val[5] = L.val[4];  matrix.val[ 6] = L.val[5];\n    matrix.val[8] = L.val[6]; matrix.val[9] = L.val[7];  matrix.val[10] = L.val[8];\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::translation(const Vec3& t)\n{\n    matrix.val[3] = t[0]; matrix.val[7] = t[1]; matrix.val[11] = t[2];\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Mat3 cv::Affine3<T>::rotation() const\n{\n    return linear();\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Mat3 cv::Affine3<T>::linear() const\n{\n    typename cv::Affine3<T>::Mat3 R;\n    R.val[0] = matrix.val[0];  R.val[1] = matrix.val[1];  R.val[2] = matrix.val[ 2];\n    R.val[3] = matrix.val[4];  R.val[4] = matrix.val[5];  R.val[5] = matrix.val[ 6];\n    R.val[6] = matrix.val[8];  R.val[7] = matrix.val[9];  R.val[8] = matrix.val[10];\n    return R;\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Vec3 cv::Affine3<T>::translation() const\n{\n    return Vec3(matrix.val[3], matrix.val[7], matrix.val[11]);\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Vec3 cv::Affine3<T>::rvec() const\n{\n    cv::Vec3d w;\n    cv::Matx33d u, vt, R = rotation();\n    cv::SVD::compute(R, w, u, vt, cv::SVD::FULL_UV + cv::SVD::MODIFY_A);\n    R = u * vt;\n\n    double rx = R.val[7] - R.val[5];\n    double ry = R.val[2] - R.val[6];\n    double rz = R.val[3] - R.val[1];\n\n    double s = std::sqrt((rx*rx + ry*ry + rz*rz)*0.25);\n    double c = (R.val[0] + R.val[4] + R.val[8] - 1) * 0.5;\n    c = c > 1.0 ? 1.0 : c < -1.0 ? -1.0 : c;\n    double theta = acos(c);\n\n    if( s < 1e-5 )\n    {\n        if( c > 0 )\n            rx = ry = rz = 0;\n        else\n        {\n            double t;\n            t = (R.val[0] + 1) * 0.5;\n            rx = std::sqrt(std::max(t, 0.0));\n            t = (R.val[4] + 1) * 0.5;\n            ry = std::sqrt(std::max(t, 0.0)) * (R.val[1] < 0 ? -1.0 : 1.0);\n            t = (R.val[8] + 1) * 0.5;\n            rz = std::sqrt(std::max(t, 0.0)) * (R.val[2] < 0 ? -1.0 : 1.0);\n\n            if( fabs(rx) < fabs(ry) && fabs(rx) < fabs(rz) && (R.val[5] > 0) != (ry*rz > 0) )\n                rz = -rz;\n            theta /= std::sqrt(rx*rx + ry*ry + rz*rz);\n            rx *= theta;\n            ry *= theta;\n            rz *= theta;\n        }\n    }\n    else\n    {\n        double vth = 1/(2*s);\n        vth *= theta;\n        rx *= vth; ry *= vth; rz *= vth;\n    }\n\n    return cv::Vec3d(rx, ry, rz);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::inv(int method) const\n{\n    return matrix.inv(method);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::rotate(const Mat3& R) const\n{\n    Mat3 Lc = linear();\n    Vec3 tc = translation();\n    Mat4 result;\n    result.val[12] = result.val[13] = result.val[14] = 0;\n    result.val[15] = 1;\n\n    for(int j = 0; j < 3; ++j)\n    {\n        for(int i = 0; i < 3; ++i)\n        {\n            float_type value = 0;\n            for(int k = 0; k < 3; ++k)\n                value += R(j, k) * Lc(k, i);\n            result(j, i) = value;\n        }\n\n        result(j, 3) = R.row(j).dot(tc.t());\n    }\n    return result;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::rotate(const Vec3& _rvec) const\n{\n    return rotate(Affine3f(_rvec).rotation());\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::translate(const Vec3& t) const\n{\n    Mat4 m = matrix;\n    m.val[ 3] += t[0];\n    m.val[ 7] += t[1];\n    m.val[11] += t[2];\n    return m;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::concatenate(const Affine3<T>& affine) const\n{\n    return (*this).rotate(affine.rotation()).translate(affine.translation());\n}\n\ntemplate<typename T> template <typename Y> inline\ncv::Affine3<T>::operator Affine3<Y>() const\n{\n    return Affine3<Y>(matrix);\n}\n\ntemplate<typename T> template <typename Y> inline\ncv::Affine3<Y> cv::Affine3<T>::cast() const\n{\n    return Affine3<Y>(matrix);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::operator*(const cv::Affine3<T>& affine1, const cv::Affine3<T>& affine2)\n{\n    return affine2.concatenate(affine1);\n}\n\ntemplate<typename T, typename V> inline\nV cv::operator*(const cv::Affine3<T>& affine, const V& v)\n{\n    const typename Affine3<T>::Mat4& m = affine.matrix;\n\n    V r;\n    r.x = m.val[0] * v.x + m.val[1] * v.y + m.val[ 2] * v.z + m.val[ 3];\n    r.y = m.val[4] * v.x + m.val[5] * v.y + m.val[ 6] * v.z + m.val[ 7];\n    r.z = m.val[8] * v.x + m.val[9] * v.y + m.val[10] * v.z + m.val[11];\n    return r;\n}\n\nstatic inline\ncv::Vec3f cv::operator*(const cv::Affine3f& affine, const cv::Vec3f& v)\n{\n    const cv::Matx44f& m = affine.matrix;\n    cv::Vec3f r;\n    r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3];\n    r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7];\n    r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11];\n    return r;\n}\n\nstatic inline\ncv::Vec3d cv::operator*(const cv::Affine3d& affine, const cv::Vec3d& v)\n{\n    const cv::Matx44d& m = affine.matrix;\n    cv::Vec3d r;\n    r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3];\n    r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7];\n    r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11];\n    return r;\n}\n\n\n\n#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine)\n{\n    cv::Mat(4, 4, cv::DataType<T>::type, affine.matrix().data()).copyTo(matrix);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine)\n{\n    Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> a = affine;\n    cv::Mat(4, 4, cv::DataType<T>::type, a.matrix().data()).copyTo(matrix);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const\n{\n    Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> r;\n    cv::Mat hdr(4, 4, cv::DataType<T>::type, r.matrix().data());\n    cv::Mat(matrix, false).copyTo(hdr);\n    return r;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine>() const\n{\n    return this->operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>();\n}\n\n#endif /* defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H */\n\n//! @endcond\n\n#endif /* __cplusplus */\n\n#endif /* __OPENCV_CORE_AFFINE3_HPP__ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/base.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2014, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_BASE_HPP__\n#define __OPENCV_CORE_BASE_HPP__\n\n#ifndef __cplusplus\n#  error base.hpp header must be compiled as C++\n#endif\n\n#include <climits>\n#include <algorithm>\n\n#include \"opencv2/core/cvdef.h\"\n#include \"opencv2/core/cvstd.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup core_utils\n//! @{\n\nnamespace Error {\n//! error codes\nenum Code {\n    StsOk=                       0,  //!< everithing is ok\n    StsBackTrace=               -1,  //!< pseudo error for back trace\n    StsError=                   -2,  //!< unknown /unspecified error\n    StsInternal=                -3,  //!< internal error (bad state)\n    StsNoMem=                   -4,  //!< insufficient memory\n    StsBadArg=                  -5,  //!< function arg/param is bad\n    StsBadFunc=                 -6,  //!< unsupported function\n    StsNoConv=                  -7,  //!< iter. didn't converge\n    StsAutoTrace=               -8,  //!< tracing\n    HeaderIsNull=               -9,  //!< image header is NULL\n    BadImageSize=              -10,  //!< image size is invalid\n    BadOffset=                 -11,  //!< offset is invalid\n    BadDataPtr=                -12,  //!<\n    BadStep=                   -13,  //!<\n    BadModelOrChSeq=           -14,  //!<\n    BadNumChannels=            -15,  //!<\n    BadNumChannel1U=           -16,  //!<\n    BadDepth=                  -17,  //!<\n    BadAlphaChannel=           -18,  //!<\n    BadOrder=                  -19,  //!<\n    BadOrigin=                 -20,  //!<\n    BadAlign=                  -21,  //!<\n    BadCallBack=               -22,  //!<\n    BadTileSize=               -23,  //!<\n    BadCOI=                    -24,  //!<\n    BadROISize=                -25,  //!<\n    MaskIsTiled=               -26,  //!<\n    StsNullPtr=                -27,  //!< null pointer\n    StsVecLengthErr=           -28,  //!< incorrect vector length\n    StsFilterStructContentErr= -29,  //!< incorr. filter structure content\n    StsKernelStructContentErr= -30,  //!< incorr. transform kernel content\n    StsFilterOffsetErr=        -31,  //!< incorrect filter ofset value\n    StsBadSize=                -201, //!< the input/output structure size is incorrect\n    StsDivByZero=              -202, //!< division by zero\n    StsInplaceNotSupported=    -203, //!< in-place operation is not supported\n    StsObjectNotFound=         -204, //!< request can't be completed\n    StsUnmatchedFormats=       -205, //!< formats of input/output arrays differ\n    StsBadFlag=                -206, //!< flag is wrong or not supported\n    StsBadPoint=               -207, //!< bad CvPoint\n    StsBadMask=                -208, //!< bad format of mask (neither 8uC1 nor 8sC1)\n    StsUnmatchedSizes=         -209, //!< sizes of input/output structures do not match\n    StsUnsupportedFormat=      -210, //!< the data format/type is not supported by the function\n    StsOutOfRange=             -211, //!< some of parameters are out of range\n    StsParseError=             -212, //!< invalid syntax/structure of the parsed file\n    StsNotImplemented=         -213, //!< the requested function/feature is not implemented\n    StsBadMemBlock=            -214, //!< an allocated block has been corrupted\n    StsAssert=                 -215, //!< assertion failed\n    GpuNotSupported=           -216,\n    GpuApiCallError=           -217,\n    OpenGlNotSupported=        -218,\n    OpenGlApiCallError=        -219,\n    OpenCLApiCallError=        -220,\n    OpenCLDoubleNotSupported=  -221,\n    OpenCLInitError=           -222,\n    OpenCLNoAMDBlasFft=        -223\n};\n} //Error\n\n//! @} core_utils\n\n//! @addtogroup core_array\n//! @{\n\n//! matrix decomposition types\nenum DecompTypes {\n    /** Gaussian elimination with the optimal pivot element chosen. */\n    DECOMP_LU       = 0,\n    /** singular value decomposition (SVD) method; the system can be over-defined and/or the matrix\n    src1 can be singular */\n    DECOMP_SVD      = 1,\n    /** eigenvalue decomposition; the matrix src1 must be symmetrical */\n    DECOMP_EIG      = 2,\n    /** Cholesky \\f$LL^T\\f$ factorization; the matrix src1 must be symmetrical and positively\n    defined */\n    DECOMP_CHOLESKY = 3,\n    /** QR factorization; the system can be over-defined and/or the matrix src1 can be singular */\n    DECOMP_QR       = 4,\n    /** while all the previous flags are mutually exclusive, this flag can be used together with\n    any of the previous; it means that the normal equations\n    \\f$\\texttt{src1}^T\\cdot\\texttt{src1}\\cdot\\texttt{dst}=\\texttt{src1}^T\\texttt{src2}\\f$ are\n    solved instead of the original system\n    \\f$\\texttt{src1}\\cdot\\texttt{dst}=\\texttt{src2}\\f$ */\n    DECOMP_NORMAL   = 16\n};\n\n/** norm types\n- For one array:\n\\f[norm =  \\forkthree{\\|\\texttt{src1}\\|_{L_{\\infty}} =  \\max _I | \\texttt{src1} (I)|}{if  \\(\\texttt{normType} = \\texttt{NORM_INF}\\) }\n{ \\| \\texttt{src1} \\| _{L_1} =  \\sum _I | \\texttt{src1} (I)|}{if  \\(\\texttt{normType} = \\texttt{NORM_L1}\\) }\n{ \\| \\texttt{src1} \\| _{L_2} =  \\sqrt{\\sum_I \\texttt{src1}(I)^2} }{if  \\(\\texttt{normType} = \\texttt{NORM_L2}\\) }\\f]\n\n- Absolute norm for two arrays\n\\f[norm =  \\forkthree{\\|\\texttt{src1}-\\texttt{src2}\\|_{L_{\\infty}} =  \\max _I | \\texttt{src1} (I) -  \\texttt{src2} (I)|}{if  \\(\\texttt{normType} = \\texttt{NORM_INF}\\) }\n{ \\| \\texttt{src1} - \\texttt{src2} \\| _{L_1} =  \\sum _I | \\texttt{src1} (I) -  \\texttt{src2} (I)|}{if  \\(\\texttt{normType} = \\texttt{NORM_L1}\\) }\n{ \\| \\texttt{src1} - \\texttt{src2} \\| _{L_2} =  \\sqrt{\\sum_I (\\texttt{src1}(I) - \\texttt{src2}(I))^2} }{if  \\(\\texttt{normType} = \\texttt{NORM_L2}\\) }\\f]\n\n- Relative norm for two arrays\n\\f[norm =  \\forkthree{\\frac{\\|\\texttt{src1}-\\texttt{src2}\\|_{L_{\\infty}}    }{\\|\\texttt{src2}\\|_{L_{\\infty}} }}{if  \\(\\texttt{normType} = \\texttt{NORM_RELATIVE_INF}\\) }\n{ \\frac{\\|\\texttt{src1}-\\texttt{src2}\\|_{L_1} }{\\|\\texttt{src2}\\|_{L_1}} }{if  \\(\\texttt{normType} = \\texttt{NORM_RELATIVE_L1}\\) }\n{ \\frac{\\|\\texttt{src1}-\\texttt{src2}\\|_{L_2} }{\\|\\texttt{src2}\\|_{L_2}} }{if  \\(\\texttt{normType} = \\texttt{NORM_RELATIVE_L2}\\) }\\f]\n\nAs example for one array consider the function \\f$r(x)= \\begin{pmatrix} x \\\\ 1-x \\end{pmatrix}, x \\in [-1;1]\\f$.\nThe \\f$ L_{1}, L_{2} \\f$ and \\f$ L_{\\infty} \\f$ norm for the sample value \\f$r(-1) = \\begin{pmatrix} -1 \\\\ 2 \\end{pmatrix}\\f$\nis calculated as follows\n\\f{align*}\n    \\| r(-1) \\|_{L_1} &= |-1| + |2| = 3 \\\\\n    \\| r(-1) \\|_{L_2} &= \\sqrt{(-1)^{2} + (2)^{2}} = \\sqrt{5} \\\\\n    \\| r(-1) \\|_{L_\\infty} &= \\max(|-1|,|2|) = 2\n\\f}\nand for \\f$r(0.5) = \\begin{pmatrix} 0.5 \\\\ 0.5 \\end{pmatrix}\\f$ the calculation is\n\\f{align*}\n    \\| r(0.5) \\|_{L_1} &= |0.5| + |0.5| = 1 \\\\\n    \\| r(0.5) \\|_{L_2} &= \\sqrt{(0.5)^{2} + (0.5)^{2}} = \\sqrt{0.5} \\\\\n    \\| r(0.5) \\|_{L_\\infty} &= \\max(|0.5|,|0.5|) = 0.5.\n\\f}\nThe following graphic shows all values for the three norm functions \\f$\\| r(x) \\|_{L_1}, \\| r(x) \\|_{L_2}\\f$ and \\f$\\| r(x) \\|_{L_\\infty}\\f$.\nIt is notable that the \\f$ L_{1} \\f$ norm forms the upper and the \\f$ L_{\\infty} \\f$ norm forms the lower border for the example function \\f$ r(x) \\f$.\n![Graphs for the different norm functions from the above example](pics/NormTypes_OneArray_1-2-INF.png)\n */\nenum NormTypes { NORM_INF       = 1,\n                 NORM_L1        = 2,\n                 NORM_L2        = 4,\n                 NORM_L2SQR     = 5,\n                 NORM_HAMMING   = 6,\n                 NORM_HAMMING2  = 7,\n                 NORM_TYPE_MASK = 7,\n                 NORM_RELATIVE  = 8, //!< flag\n                 NORM_MINMAX    = 32 //!< flag\n               };\n\n//! comparison types\nenum CmpTypes { CMP_EQ = 0, //!< src1 is equal to src2.\n                CMP_GT = 1, //!< src1 is greater than src2.\n                CMP_GE = 2, //!< src1 is greater than or equal to src2.\n                CMP_LT = 3, //!< src1 is less than src2.\n                CMP_LE = 4, //!< src1 is less than or equal to src2.\n                CMP_NE = 5  //!< src1 is unequal to src2.\n              };\n\n//! generalized matrix multiplication flags\nenum GemmFlags { GEMM_1_T = 1, //!< transposes src1\n                 GEMM_2_T = 2, //!< transposes src2\n                 GEMM_3_T = 4 //!< transposes src3\n               };\n\nenum DftFlags {\n    /** performs an inverse 1D or 2D transform instead of the default forward\n        transform. */\n    DFT_INVERSE        = 1,\n    /** scales the result: divide it by the number of array elements. Normally, it is\n        combined with DFT_INVERSE. */\n    DFT_SCALE          = 2,\n    /** performs a forward or inverse transform of every individual row of the input\n        matrix; this flag enables you to transform multiple vectors simultaneously and can be used to\n        decrease the overhead (which is sometimes several times larger than the processing itself) to\n        perform 3D and higher-dimensional transformations and so forth.*/\n    DFT_ROWS           = 4,\n    /** performs a forward transformation of 1D or 2D real array; the result,\n        though being a complex array, has complex-conjugate symmetry (*CCS*, see the function\n        description below for details), and such an array can be packed into a real array of the same\n        size as input, which is the fastest option and which is what the function does by default;\n        however, you may wish to get a full complex array (for simpler spectrum analysis, and so on) -\n        pass the flag to enable the function to produce a full-size complex output array. */\n    DFT_COMPLEX_OUTPUT = 16,\n    /** performs an inverse transformation of a 1D or 2D complex array; the\n        result is normally a complex array of the same size, however, if the input array has\n        conjugate-complex symmetry (for example, it is a result of forward transformation with\n        DFT_COMPLEX_OUTPUT flag), the output is a real array; while the function itself does not\n        check whether the input is symmetrical or not, you can pass the flag and then the function\n        will assume the symmetry and produce the real output array (note that when the input is packed\n        into a real array and inverse transformation is executed, the function treats the input as a\n        packed complex-conjugate symmetrical array, and the output will also be a real array). */\n    DFT_REAL_OUTPUT    = 32,\n    /** performs an inverse 1D or 2D transform instead of the default forward transform. */\n    DCT_INVERSE        = DFT_INVERSE,\n    /** performs a forward or inverse transform of every individual row of the input\n        matrix. This flag enables you to transform multiple vectors simultaneously and can be used to\n        decrease the overhead (which is sometimes several times larger than the processing itself) to\n        perform 3D and higher-dimensional transforms and so forth.*/\n    DCT_ROWS           = DFT_ROWS\n};\n\n//! Various border types, image boundaries are denoted with `|`\n//! @see borderInterpolate, copyMakeBorder\nenum BorderTypes {\n    BORDER_CONSTANT    = 0, //!< `iiiiii|abcdefgh|iiiiiii`  with some specified `i`\n    BORDER_REPLICATE   = 1, //!< `aaaaaa|abcdefgh|hhhhhhh`\n    BORDER_REFLECT     = 2, //!< `fedcba|abcdefgh|hgfedcb`\n    BORDER_WRAP        = 3, //!< `cdefgh|abcdefgh|abcdefg`\n    BORDER_REFLECT_101 = 4, //!< `gfedcb|abcdefgh|gfedcba`\n    BORDER_TRANSPARENT = 5, //!< `uvwxyz|absdefgh|ijklmno`\n\n    BORDER_REFLECT101  = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101\n    BORDER_DEFAULT     = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101\n    BORDER_ISOLATED    = 16 //!< do not look outside of ROI\n};\n\n//! @} core_array\n\n//! @addtogroup core_utils\n//! @{\n\n//! @cond IGNORED\n\n//////////////// static assert /////////////////\n#define CVAUX_CONCAT_EXP(a, b) a##b\n#define CVAUX_CONCAT(a, b) CVAUX_CONCAT_EXP(a,b)\n\n#if defined(__clang__)\n#  ifndef __has_extension\n#    define __has_extension __has_feature /* compatibility, for older versions of clang */\n#  endif\n#  if __has_extension(cxx_static_assert)\n#    define CV_StaticAssert(condition, reason)    static_assert((condition), reason \" \" #condition)\n#  elif __has_extension(c_static_assert)\n#    define CV_StaticAssert(condition, reason)    _Static_assert((condition), reason \" \" #condition)\n#  endif\n#elif defined(__GNUC__)\n#  if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)\n#    define CV_StaticAssert(condition, reason)    static_assert((condition), reason \" \" #condition)\n#  endif\n#elif defined(_MSC_VER)\n#  if _MSC_VER >= 1600 /* MSVC 10 */\n#    define CV_StaticAssert(condition, reason)    static_assert((condition), reason \" \" #condition)\n#  endif\n#endif\n#ifndef CV_StaticAssert\n#  if !defined(__clang__) && defined(__GNUC__) && (__GNUC__*100 + __GNUC_MINOR__ > 302)\n#    define CV_StaticAssert(condition, reason) ({ extern int __attribute__((error(\"CV_StaticAssert: \" reason \" \" #condition))) CV_StaticAssert(); ((condition) ? 0 : CV_StaticAssert()); })\n#  else\n     template <bool x> struct CV_StaticAssert_failed;\n     template <> struct CV_StaticAssert_failed<true> { enum { val = 1 }; };\n     template<int x> struct CV_StaticAssert_test {};\n#    define CV_StaticAssert(condition, reason)\\\n       typedef cv::CV_StaticAssert_test< sizeof(cv::CV_StaticAssert_failed< static_cast<bool>(condition) >) > CVAUX_CONCAT(CV_StaticAssert_failed_at_, __LINE__)\n#  endif\n#endif\n\n// Suppress warning \"-Wdeprecated-declarations\" / C4996\n#if defined(_MSC_VER)\n    #define CV_DO_PRAGMA(x) __pragma(x)\n#elif defined(__GNUC__)\n    #define CV_DO_PRAGMA(x) _Pragma (#x)\n#else\n    #define CV_DO_PRAGMA(x)\n#endif\n\n#ifdef _MSC_VER\n#define CV_SUPPRESS_DEPRECATED_START \\\n    CV_DO_PRAGMA(warning(push)) \\\n    CV_DO_PRAGMA(warning(disable: 4996))\n#define CV_SUPPRESS_DEPRECATED_END CV_DO_PRAGMA(warning(pop))\n#elif defined (__clang__) || ((__GNUC__)  && (__GNUC__*100 + __GNUC_MINOR__ > 405))\n#define CV_SUPPRESS_DEPRECATED_START \\\n    CV_DO_PRAGMA(GCC diagnostic push) \\\n    CV_DO_PRAGMA(GCC diagnostic ignored \"-Wdeprecated-declarations\")\n#define CV_SUPPRESS_DEPRECATED_END CV_DO_PRAGMA(GCC diagnostic pop)\n#else\n#define CV_SUPPRESS_DEPRECATED_START\n#define CV_SUPPRESS_DEPRECATED_END\n#endif\n#define CV_UNUSED(name) (void)name\n//! @endcond\n\n/*! @brief Signals an error and raises the exception.\n\nBy default the function prints information about the error to stderr,\nthen it either stops if setBreakOnError() had been called before or raises the exception.\nIt is possible to alternate error processing by using redirectError().\n@param _code - error code (Error::Code)\n@param _err - error description\n@param _func - function name. Available only when the compiler supports getting it\n@param _file - source file name where the error has occured\n@param _line - line number in the source file where the error has occured\n@see CV_Error, CV_Error_, CV_ErrorNoReturn, CV_ErrorNoReturn_, CV_Assert, CV_DbgAssert\n */\nCV_EXPORTS void error(int _code, const String& _err, const char* _func, const char* _file, int _line);\n\n#ifdef __GNUC__\n# if defined __clang__ || defined __APPLE__\n#   pragma GCC diagnostic push\n#   pragma GCC diagnostic ignored \"-Winvalid-noreturn\"\n# endif\n#endif\n\n/** same as cv::error, but does not return */\nCV_INLINE CV_NORETURN void errorNoReturn(int _code, const String& _err, const char* _func, const char* _file, int _line)\n{\n    error(_code, _err, _func, _file, _line);\n#ifdef __GNUC__\n# if !defined __clang__ && !defined __APPLE__\n    // this suppresses this warning: \"noreturn\" function does return [enabled by default]\n    __builtin_trap();\n    // or use infinite loop: for (;;) {}\n# endif\n#endif\n}\n#ifdef __GNUC__\n# if defined __clang__ || defined __APPLE__\n#   pragma GCC diagnostic pop\n# endif\n#endif\n\n#if defined __GNUC__\n#define CV_Func __func__\n#elif defined _MSC_VER\n#define CV_Func __FUNCTION__\n#else\n#define CV_Func \"\"\n#endif\n\n/** @brief Call the error handler.\n\nCurrently, the error handler prints the error code and the error message to the standard\nerror stream `stderr`. In the Debug configuration, it then provokes memory access violation, so that\nthe execution stack and all the parameters can be analyzed by the debugger. In the Release\nconfiguration, the exception is thrown.\n\n@param code one of Error::Code\n@param msg error message\n*/\n#define CV_Error( code, msg ) cv::error( code, msg, CV_Func, __FILE__, __LINE__ )\n\n/**  @brief Call the error handler.\n\nThis macro can be used to construct an error message on-fly to include some dynamic information,\nfor example:\n@code\n    // note the extra parentheses around the formatted text message\n    CV_Error_( CV_StsOutOfRange,\n    (\"the value at (%d, %d)=%g is out of range\", badPt.x, badPt.y, badValue));\n@endcode\n@param code one of Error::Code\n@param args printf-like formatted error message in parentheses\n*/\n#define CV_Error_( code, args ) cv::error( code, cv::format args, CV_Func, __FILE__, __LINE__ )\n\n/** @brief Checks a condition at runtime and throws exception if it fails\n\nThe macros CV_Assert (and CV_DbgAssert(expr)) evaluate the specified expression. If it is 0, the macros\nraise an error (see cv::error). The macro CV_Assert checks the condition in both Debug and Release\nconfigurations while CV_DbgAssert is only retained in the Debug configuration.\n*/\n#define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Error::StsAssert, #expr, CV_Func, __FILE__, __LINE__ )\n\n/** same as CV_Error(code,msg), but does not return */\n#define CV_ErrorNoReturn( code, msg ) cv::errorNoReturn( code, msg, CV_Func, __FILE__, __LINE__ )\n\n/** same as CV_Error_(code,args), but does not return */\n#define CV_ErrorNoReturn_( code, args ) cv::errorNoReturn( code, cv::format args, CV_Func, __FILE__, __LINE__ )\n\n/** replaced with CV_Assert(expr) in Debug configuration */\n#ifdef _DEBUG\n#  define CV_DbgAssert(expr) CV_Assert(expr)\n#else\n#  define CV_DbgAssert(expr)\n#endif\n\n/*\n * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor\n * bit count of A exclusive XOR'ed with B\n */\nstruct CV_EXPORTS Hamming\n{\n    enum { normType = NORM_HAMMING };\n    typedef unsigned char ValueType;\n    typedef int ResultType;\n\n    /** this will count the bits in a ^ b\n     */\n    ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const;\n};\n\ntypedef Hamming HammingLUT;\n\n/////////////////////////////////// inline norms ////////////////////////////////////\n\ntemplate<typename _Tp> inline _Tp cv_abs(_Tp x) { return std::abs(x); }\ninline int cv_abs(uchar x) { return x; }\ninline int cv_abs(schar x) { return std::abs(x); }\ninline int cv_abs(ushort x) { return x; }\ninline int cv_abs(short x) { return std::abs(x); }\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL2Sqr(const _Tp* a, int n)\n{\n    _AccTp s = 0;\n    int i=0;\n#if CV_ENABLE_UNROLLED\n    for( ; i <= n - 4; i += 4 )\n    {\n        _AccTp v0 = a[i], v1 = a[i+1], v2 = a[i+2], v3 = a[i+3];\n        s += v0*v0 + v1*v1 + v2*v2 + v3*v3;\n    }\n#endif\n    for( ; i < n; i++ )\n    {\n        _AccTp v = a[i];\n        s += v*v;\n    }\n    return s;\n}\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL1(const _Tp* a, int n)\n{\n    _AccTp s = 0;\n    int i = 0;\n#if CV_ENABLE_UNROLLED\n    for(; i <= n - 4; i += 4 )\n    {\n        s += (_AccTp)cv_abs(a[i]) + (_AccTp)cv_abs(a[i+1]) +\n            (_AccTp)cv_abs(a[i+2]) + (_AccTp)cv_abs(a[i+3]);\n    }\n#endif\n    for( ; i < n; i++ )\n        s += cv_abs(a[i]);\n    return s;\n}\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normInf(const _Tp* a, int n)\n{\n    _AccTp s = 0;\n    for( int i = 0; i < n; i++ )\n        s = std::max(s, (_AccTp)cv_abs(a[i]));\n    return s;\n}\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL2Sqr(const _Tp* a, const _Tp* b, int n)\n{\n    _AccTp s = 0;\n    int i= 0;\n#if CV_ENABLE_UNROLLED\n    for(; i <= n - 4; i += 4 )\n    {\n        _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]);\n        s += v0*v0 + v1*v1 + v2*v2 + v3*v3;\n    }\n#endif\n    for( ; i < n; i++ )\n    {\n        _AccTp v = _AccTp(a[i] - b[i]);\n        s += v*v;\n    }\n    return s;\n}\n\nstatic inline float normL2Sqr(const float* a, const float* b, int n)\n{\n    float s = 0.f;\n    for( int i = 0; i < n; i++ )\n    {\n        float v = a[i] - b[i];\n        s += v*v;\n    }\n    return s;\n}\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL1(const _Tp* a, const _Tp* b, int n)\n{\n    _AccTp s = 0;\n    int i= 0;\n#if CV_ENABLE_UNROLLED\n    for(; i <= n - 4; i += 4 )\n    {\n        _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]);\n        s += std::abs(v0) + std::abs(v1) + std::abs(v2) + std::abs(v3);\n    }\n#endif\n    for( ; i < n; i++ )\n    {\n        _AccTp v = _AccTp(a[i] - b[i]);\n        s += std::abs(v);\n    }\n    return s;\n}\n\ninline float normL1(const float* a, const float* b, int n)\n{\n    float s = 0.f;\n    for( int i = 0; i < n; i++ )\n    {\n        s += std::abs(a[i] - b[i]);\n    }\n    return s;\n}\n\ninline int normL1(const uchar* a, const uchar* b, int n)\n{\n    int s = 0;\n    for( int i = 0; i < n; i++ )\n    {\n        s += std::abs(a[i] - b[i]);\n    }\n    return s;\n}\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normInf(const _Tp* a, const _Tp* b, int n)\n{\n    _AccTp s = 0;\n    for( int i = 0; i < n; i++ )\n    {\n        _AccTp v0 = a[i] - b[i];\n        s = std::max(s, std::abs(v0));\n    }\n    return s;\n}\n\n/** @brief Computes the cube root of an argument.\n\n The function cubeRoot computes \\f$\\sqrt[3]{\\texttt{val}}\\f$. Negative arguments are handled correctly.\n NaN and Inf are not handled. The accuracy approaches the maximum possible accuracy for\n single-precision data.\n @param val A function argument.\n */\nCV_EXPORTS_W float cubeRoot(float val);\n\n/** @brief Calculates the angle of a 2D vector in degrees.\n\n The function fastAtan2 calculates the full-range angle of an input 2D vector. The angle is measured\n in degrees and varies from 0 to 360 degrees. The accuracy is about 0.3 degrees.\n @param x x-coordinate of the vector.\n @param y y-coordinate of the vector.\n */\nCV_EXPORTS_W float fastAtan2(float y, float x);\n\n/** proxy for hal::LU */\nCV_EXPORTS int LU(float* A, size_t astep, int m, float* b, size_t bstep, int n);\n/** proxy for hal::LU */\nCV_EXPORTS int LU(double* A, size_t astep, int m, double* b, size_t bstep, int n);\n/** proxy for hal::Cholesky */\nCV_EXPORTS bool Cholesky(float* A, size_t astep, int m, float* b, size_t bstep, int n);\n/** proxy for hal::Cholesky */\nCV_EXPORTS bool Cholesky(double* A, size_t astep, int m, double* b, size_t bstep, int n);\n\n////////////////// forward declarations for important OpenCV types //////////////////\n\n//! @cond IGNORED\n\ntemplate<typename _Tp, int cn> class Vec;\ntemplate<typename _Tp, int m, int n> class Matx;\n\ntemplate<typename _Tp> class Complex;\ntemplate<typename _Tp> class Point_;\ntemplate<typename _Tp> class Point3_;\ntemplate<typename _Tp> class Size_;\ntemplate<typename _Tp> class Rect_;\ntemplate<typename _Tp> class Scalar_;\n\nclass CV_EXPORTS RotatedRect;\nclass CV_EXPORTS Range;\nclass CV_EXPORTS TermCriteria;\nclass CV_EXPORTS KeyPoint;\nclass CV_EXPORTS DMatch;\nclass CV_EXPORTS RNG;\n\nclass CV_EXPORTS Mat;\nclass CV_EXPORTS MatExpr;\n\nclass CV_EXPORTS UMat;\n\nclass CV_EXPORTS SparseMat;\ntypedef Mat MatND;\n\ntemplate<typename _Tp> class Mat_;\ntemplate<typename _Tp> class SparseMat_;\n\nclass CV_EXPORTS MatConstIterator;\nclass CV_EXPORTS SparseMatIterator;\nclass CV_EXPORTS SparseMatConstIterator;\ntemplate<typename _Tp> class MatIterator_;\ntemplate<typename _Tp> class MatConstIterator_;\ntemplate<typename _Tp> class SparseMatIterator_;\ntemplate<typename _Tp> class SparseMatConstIterator_;\n\nnamespace ogl\n{\n    class CV_EXPORTS Buffer;\n    class CV_EXPORTS Texture2D;\n    class CV_EXPORTS Arrays;\n}\n\nnamespace cuda\n{\n    class CV_EXPORTS GpuMat;\n    class CV_EXPORTS HostMem;\n    class CV_EXPORTS Stream;\n    class CV_EXPORTS Event;\n}\n\nnamespace cudev\n{\n    template <typename _Tp> class GpuMat_;\n}\n\nnamespace ipp\n{\nCV_EXPORTS int getIppFeatures();\nCV_EXPORTS void setIppStatus(int status, const char * const funcname = NULL, const char * const filename = NULL,\n                             int line = 0);\nCV_EXPORTS int getIppStatus();\nCV_EXPORTS String getIppErrorLocation();\nCV_EXPORTS bool useIPP();\nCV_EXPORTS void setUseIPP(bool flag);\n\n} // ipp\n\n//! @endcond\n\n//! @} core_utils\n\n\n\n\n} // cv\n\n#include \"opencv2/core/neon_utils.hpp\"\n\n#endif //__OPENCV_CORE_BASE_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/bufferpool.hpp",
    "content": "// This file is part of OpenCV project.\n// It is subject to the license terms in the LICENSE file found in the top-level directory\n// of this distribution and at http://opencv.org/license.html.\n//\n// Copyright (C) 2014, Advanced Micro Devices, Inc., all rights reserved.\n\n#ifndef __OPENCV_CORE_BUFFER_POOL_HPP__\n#define __OPENCV_CORE_BUFFER_POOL_HPP__\n\nnamespace cv\n{\n\n//! @addtogroup core\n//! @{\n\nclass BufferPoolController\n{\nprotected:\n    ~BufferPoolController() { }\npublic:\n    virtual size_t getReservedSize() const = 0;\n    virtual size_t getMaxReservedSize() const = 0;\n    virtual void setMaxReservedSize(size_t size) = 0;\n    virtual void freeAllReservedBuffers() = 0;\n};\n\n//! @}\n\n}\n\n#endif // __OPENCV_CORE_BUFFER_POOL_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/core.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/core.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/core_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n\n#ifndef __OPENCV_CORE_C_H__\n#define __OPENCV_CORE_C_H__\n\n#include \"opencv2/core/types_c.h\"\n\n#ifdef __cplusplus\n#  ifdef _MSC_VER\n/* disable warning C4190: 'function' has C-linkage specified, but returns UDT 'typename'\n                          which is incompatible with C\n\n   It is OK to disable it because we only extend few plain structures with\n   C++ construrtors for simpler interoperability with C++ API of the library\n*/\n#    pragma warning(disable:4190)\n#  elif defined __clang__ && __clang_major__ >= 3\n#    pragma GCC diagnostic ignored \"-Wreturn-type-c-linkage\"\n#  endif\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @addtogroup core_c\n    @{\n*/\n\n/****************************************************************************************\\\n*          Array allocation, deallocation, initialization and access to elements         *\n\\****************************************************************************************/\n\n/** `malloc` wrapper.\n   If there is no enough memory, the function\n   (as well as other OpenCV functions that call cvAlloc)\n   raises an error. */\nCVAPI(void*)  cvAlloc( size_t size );\n\n/** `free` wrapper.\n   Here and further all the memory releasing functions\n   (that all call cvFree) take double pointer in order to\n   to clear pointer to the data after releasing it.\n   Passing pointer to NULL pointer is Ok: nothing happens in this case\n*/\nCVAPI(void)   cvFree_( void* ptr );\n#define cvFree(ptr) (cvFree_(*(ptr)), *(ptr)=0)\n\n/** @brief Creates an image header but does not allocate the image data.\n\n@param size Image width and height\n@param depth Image depth (see cvCreateImage )\n@param channels Number of channels (see cvCreateImage )\n */\nCVAPI(IplImage*)  cvCreateImageHeader( CvSize size, int depth, int channels );\n\n/** @brief Initializes an image header that was previously allocated.\n\nThe returned IplImage\\* points to the initialized header.\n@param image Image header to initialize\n@param size Image width and height\n@param depth Image depth (see cvCreateImage )\n@param channels Number of channels (see cvCreateImage )\n@param origin Top-left IPL_ORIGIN_TL or bottom-left IPL_ORIGIN_BL\n@param align Alignment for image rows, typically 4 or 8 bytes\n */\nCVAPI(IplImage*) cvInitImageHeader( IplImage* image, CvSize size, int depth,\n                                   int channels, int origin CV_DEFAULT(0),\n                                   int align CV_DEFAULT(4));\n\n/** @brief Creates an image header and allocates the image data.\n\nThis function call is equivalent to the following code:\n@code\n    header = cvCreateImageHeader(size, depth, channels);\n    cvCreateData(header);\n@endcode\n@param size Image width and height\n@param depth Bit depth of image elements. See IplImage for valid depths.\n@param channels Number of channels per pixel. See IplImage for details. This function only creates\nimages with interleaved channels.\n */\nCVAPI(IplImage*)  cvCreateImage( CvSize size, int depth, int channels );\n\n/** @brief Deallocates an image header.\n\nThis call is an analogue of :\n@code\n    if(image )\n    {\n        iplDeallocate(*image, IPL_IMAGE_HEADER | IPL_IMAGE_ROI);\n        *image = 0;\n    }\n@endcode\nbut it does not use IPL functions by default (see the CV_TURN_ON_IPL_COMPATIBILITY macro).\n@param image Double pointer to the image header\n */\nCVAPI(void)  cvReleaseImageHeader( IplImage** image );\n\n/** @brief Deallocates the image header and the image data.\n\nThis call is a shortened form of :\n@code\n    if(*image )\n    {\n        cvReleaseData(*image);\n        cvReleaseImageHeader(image);\n    }\n@endcode\n@param image Double pointer to the image header\n*/\nCVAPI(void)  cvReleaseImage( IplImage** image );\n\n/** Creates a copy of IPL image (widthStep may differ) */\nCVAPI(IplImage*) cvCloneImage( const IplImage* image );\n\n/** @brief Sets the channel of interest in an IplImage.\n\nIf the ROI is set to NULL and the coi is *not* 0, the ROI is allocated. Most OpenCV functions do\n*not* support the COI setting, so to process an individual image/matrix channel one may copy (via\ncvCopy or cvSplit) the channel to a separate image/matrix, process it and then copy the result\nback (via cvCopy or cvMerge) if needed.\n@param image A pointer to the image header\n@param coi The channel of interest. 0 - all channels are selected, 1 - first channel is selected,\netc. Note that the channel indices become 1-based.\n */\nCVAPI(void)  cvSetImageCOI( IplImage* image, int coi );\n\n/** @brief Returns the index of the channel of interest.\n\nReturns the channel of interest of in an IplImage. Returned values correspond to the coi in\ncvSetImageCOI.\n@param image A pointer to the image header\n */\nCVAPI(int)  cvGetImageCOI( const IplImage* image );\n\n/** @brief Sets an image Region Of Interest (ROI) for a given rectangle.\n\nIf the original image ROI was NULL and the rect is not the whole image, the ROI structure is\nallocated.\n\nMost OpenCV functions support the use of ROI and treat the image rectangle as a separate image. For\nexample, all of the pixel coordinates are counted from the top-left (or bottom-left) corner of the\nROI, not the original image.\n@param image A pointer to the image header\n@param rect The ROI rectangle\n */\nCVAPI(void)  cvSetImageROI( IplImage* image, CvRect rect );\n\n/** @brief Resets the image ROI to include the entire image and releases the ROI structure.\n\nThis produces a similar result to the following, but in addition it releases the ROI structure. :\n@code\n    cvSetImageROI(image, cvRect(0, 0, image->width, image->height ));\n    cvSetImageCOI(image, 0);\n@endcode\n@param image A pointer to the image header\n */\nCVAPI(void)  cvResetImageROI( IplImage* image );\n\n/** @brief Returns the image ROI.\n\nIf there is no ROI set, cvRect(0,0,image-\\>width,image-\\>height) is returned.\n@param image A pointer to the image header\n */\nCVAPI(CvRect) cvGetImageROI( const IplImage* image );\n\n/** @brief Creates a matrix header but does not allocate the matrix data.\n\nThe function allocates a new matrix header and returns a pointer to it. The matrix data can then be\nallocated using cvCreateData or set explicitly to user-allocated data via cvSetData.\n@param rows Number of rows in the matrix\n@param cols Number of columns in the matrix\n@param type Type of the matrix elements, see cvCreateMat\n */\nCVAPI(CvMat*)  cvCreateMatHeader( int rows, int cols, int type );\n\n#define CV_AUTOSTEP  0x7fffffff\n\n/** @brief Initializes a pre-allocated matrix header.\n\nThis function is often used to process raw data with OpenCV matrix functions. For example, the\nfollowing code computes the matrix product of two matrices, stored as ordinary arrays:\n@code\n    double a[] = { 1, 2, 3, 4,\n                   5, 6, 7, 8,\n                   9, 10, 11, 12 };\n\n    double b[] = { 1, 5, 9,\n                   2, 6, 10,\n                   3, 7, 11,\n                   4, 8, 12 };\n\n    double c[9];\n    CvMat Ma, Mb, Mc ;\n\n    cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a);\n    cvInitMatHeader(&Mb, 4, 3, CV_64FC1, b);\n    cvInitMatHeader(&Mc, 3, 3, CV_64FC1, c);\n\n    cvMatMulAdd(&Ma, &Mb, 0, &Mc);\n    // the c array now contains the product of a (3x4) and b (4x3)\n@endcode\n@param mat A pointer to the matrix header to be initialized\n@param rows Number of rows in the matrix\n@param cols Number of columns in the matrix\n@param type Type of the matrix elements, see cvCreateMat .\n@param data Optional: data pointer assigned to the matrix header\n@param step Optional: full row width in bytes of the assigned data. By default, the minimal\npossible step is used which assumes there are no gaps between subsequent rows of the matrix.\n */\nCVAPI(CvMat*) cvInitMatHeader( CvMat* mat, int rows, int cols,\n                              int type, void* data CV_DEFAULT(NULL),\n                              int step CV_DEFAULT(CV_AUTOSTEP) );\n\n/** @brief Creates a matrix header and allocates the matrix data.\n\nThe function call is equivalent to the following code:\n@code\n    CvMat* mat = cvCreateMatHeader(rows, cols, type);\n    cvCreateData(mat);\n@endcode\n@param rows Number of rows in the matrix\n@param cols Number of columns in the matrix\n@param type The type of the matrix elements in the form\nCV_\\<bit depth\\>\\<S|U|F\\>C\\<number of channels\\> , where S=signed, U=unsigned, F=float. For\nexample, CV _ 8UC1 means the elements are 8-bit unsigned and the there is 1 channel, and CV _\n32SC2 means the elements are 32-bit signed and there are 2 channels.\n */\nCVAPI(CvMat*)  cvCreateMat( int rows, int cols, int type );\n\n/** @brief Deallocates a matrix.\n\nThe function decrements the matrix data reference counter and deallocates matrix header. If the data\nreference counter is 0, it also deallocates the data. :\n@code\n    if(*mat )\n        cvDecRefData(*mat);\n    cvFree((void**)mat);\n@endcode\n@param mat Double pointer to the matrix\n */\nCVAPI(void)  cvReleaseMat( CvMat** mat );\n\n/** @brief Decrements an array data reference counter.\n\nThe function decrements the data reference counter in a CvMat or CvMatND if the reference counter\n\npointer is not NULL. If the counter reaches zero, the data is deallocated. In the current\nimplementation the reference counter is not NULL only if the data was allocated using the\ncvCreateData function. The counter will be NULL in other cases such as: external data was assigned\nto the header using cvSetData, header is part of a larger matrix or image, or the header was\nconverted from an image or n-dimensional matrix header.\n@param arr Pointer to an array header\n */\nCV_INLINE  void  cvDecRefData( CvArr* arr )\n{\n    if( CV_IS_MAT( arr ))\n    {\n        CvMat* mat = (CvMat*)arr;\n        mat->data.ptr = NULL;\n        if( mat->refcount != NULL && --*mat->refcount == 0 )\n            cvFree( &mat->refcount );\n        mat->refcount = NULL;\n    }\n    else if( CV_IS_MATND( arr ))\n    {\n        CvMatND* mat = (CvMatND*)arr;\n        mat->data.ptr = NULL;\n        if( mat->refcount != NULL && --*mat->refcount == 0 )\n            cvFree( &mat->refcount );\n        mat->refcount = NULL;\n    }\n}\n\n/** @brief Increments array data reference counter.\n\nThe function increments CvMat or CvMatND data reference counter and returns the new counter value if\nthe reference counter pointer is not NULL, otherwise it returns zero.\n@param arr Array header\n */\nCV_INLINE  int  cvIncRefData( CvArr* arr )\n{\n    int refcount = 0;\n    if( CV_IS_MAT( arr ))\n    {\n        CvMat* mat = (CvMat*)arr;\n        if( mat->refcount != NULL )\n            refcount = ++*mat->refcount;\n    }\n    else if( CV_IS_MATND( arr ))\n    {\n        CvMatND* mat = (CvMatND*)arr;\n        if( mat->refcount != NULL )\n            refcount = ++*mat->refcount;\n    }\n    return refcount;\n}\n\n\n/** Creates an exact copy of the input matrix (except, may be, step value) */\nCVAPI(CvMat*) cvCloneMat( const CvMat* mat );\n\n\n/** @brief Returns matrix header corresponding to the rectangular sub-array of input image or matrix.\n\nThe function returns header, corresponding to a specified rectangle of the input array. In other\n\nwords, it allows the user to treat a rectangular part of input array as a stand-alone array. ROI is\ntaken into account by the function so the sub-array of ROI is actually extracted.\n@param arr Input array\n@param submat Pointer to the resultant sub-array header\n@param rect Zero-based coordinates of the rectangle of interest\n */\nCVAPI(CvMat*) cvGetSubRect( const CvArr* arr, CvMat* submat, CvRect rect );\n#define cvGetSubArr cvGetSubRect\n\n/** @brief Returns array row or row span.\n\nThe functions return the header, corresponding to a specified row/row span of the input array.\ncvGetRow(arr, submat, row) is a shortcut for cvGetRows(arr, submat, row, row+1).\n@param arr Input array\n@param submat Pointer to the resulting sub-array header\n@param start_row Zero-based index of the starting row (inclusive) of the span\n@param end_row Zero-based index of the ending row (exclusive) of the span\n@param delta_row Index step in the row span. That is, the function extracts every delta_row -th\nrow from start_row and up to (but not including) end_row .\n */\nCVAPI(CvMat*) cvGetRows( const CvArr* arr, CvMat* submat,\n                        int start_row, int end_row,\n                        int delta_row CV_DEFAULT(1));\n\n/** @overload\n@param arr Input array\n@param submat Pointer to the resulting sub-array header\n@param row Zero-based index of the selected row\n*/\nCV_INLINE  CvMat*  cvGetRow( const CvArr* arr, CvMat* submat, int row )\n{\n    return cvGetRows( arr, submat, row, row + 1, 1 );\n}\n\n\n/** @brief Returns one of more array columns.\n\nThe functions return the header, corresponding to a specified column span of the input array. That\n\nis, no data is copied. Therefore, any modifications of the submatrix will affect the original array.\nIf you need to copy the columns, use cvCloneMat. cvGetCol(arr, submat, col) is a shortcut for\ncvGetCols(arr, submat, col, col+1).\n@param arr Input array\n@param submat Pointer to the resulting sub-array header\n@param start_col Zero-based index of the starting column (inclusive) of the span\n@param end_col Zero-based index of the ending column (exclusive) of the span\n */\nCVAPI(CvMat*) cvGetCols( const CvArr* arr, CvMat* submat,\n                        int start_col, int end_col );\n\n/** @overload\n@param arr Input array\n@param submat Pointer to the resulting sub-array header\n@param col Zero-based index of the selected column\n*/\nCV_INLINE  CvMat*  cvGetCol( const CvArr* arr, CvMat* submat, int col )\n{\n    return cvGetCols( arr, submat, col, col + 1 );\n}\n\n/** @brief Returns one of array diagonals.\n\nThe function returns the header, corresponding to a specified diagonal of the input array.\n@param arr Input array\n@param submat Pointer to the resulting sub-array header\n@param diag Index of the array diagonal. Zero value corresponds to the main diagonal, -1\ncorresponds to the diagonal above the main, 1 corresponds to the diagonal below the main, and so\nforth.\n */\nCVAPI(CvMat*) cvGetDiag( const CvArr* arr, CvMat* submat,\n                            int diag CV_DEFAULT(0));\n\n/** low-level scalar <-> raw data conversion functions */\nCVAPI(void) cvScalarToRawData( const CvScalar* scalar, void* data, int type,\n                              int extend_to_12 CV_DEFAULT(0) );\n\nCVAPI(void) cvRawDataToScalar( const void* data, int type, CvScalar* scalar );\n\n/** @brief Creates a new matrix header but does not allocate the matrix data.\n\nThe function allocates a header for a multi-dimensional dense array. The array data can further be\nallocated using cvCreateData or set explicitly to user-allocated data via cvSetData.\n@param dims Number of array dimensions\n@param sizes Array of dimension sizes\n@param type Type of array elements, see cvCreateMat\n */\nCVAPI(CvMatND*)  cvCreateMatNDHeader( int dims, const int* sizes, int type );\n\n/** @brief Creates the header and allocates the data for a multi-dimensional dense array.\n\nThis function call is equivalent to the following code:\n@code\n    CvMatND* mat = cvCreateMatNDHeader(dims, sizes, type);\n    cvCreateData(mat);\n@endcode\n@param dims Number of array dimensions. This must not exceed CV_MAX_DIM (32 by default, but can be\nchanged at build time).\n@param sizes Array of dimension sizes.\n@param type Type of array elements, see cvCreateMat .\n */\nCVAPI(CvMatND*)  cvCreateMatND( int dims, const int* sizes, int type );\n\n/** @brief Initializes a pre-allocated multi-dimensional array header.\n\n@param mat A pointer to the array header to be initialized\n@param dims The number of array dimensions\n@param sizes An array of dimension sizes\n@param type Type of array elements, see cvCreateMat\n@param data Optional data pointer assigned to the matrix header\n */\nCVAPI(CvMatND*)  cvInitMatNDHeader( CvMatND* mat, int dims, const int* sizes,\n                                    int type, void* data CV_DEFAULT(NULL) );\n\n/** @brief Deallocates a multi-dimensional array.\n\nThe function decrements the array data reference counter and releases the array header. If the\nreference counter reaches 0, it also deallocates the data. :\n@code\n    if(*mat )\n        cvDecRefData(*mat);\n    cvFree((void**)mat);\n@endcode\n@param mat Double pointer to the array\n */\nCV_INLINE  void  cvReleaseMatND( CvMatND** mat )\n{\n    cvReleaseMat( (CvMat**)mat );\n}\n\n/** Creates a copy of CvMatND (except, may be, steps) */\nCVAPI(CvMatND*) cvCloneMatND( const CvMatND* mat );\n\n/** @brief Creates sparse array.\n\nThe function allocates a multi-dimensional sparse array. Initially the array contain no elements,\nthat is PtrND and other related functions will return 0 for every index.\n@param dims Number of array dimensions. In contrast to the dense matrix, the number of dimensions is\npractically unlimited (up to \\f$2^{16}\\f$ ).\n@param sizes Array of dimension sizes\n@param type Type of array elements. The same as for CvMat\n */\nCVAPI(CvSparseMat*)  cvCreateSparseMat( int dims, const int* sizes, int type );\n\n/** @brief Deallocates sparse array.\n\nThe function releases the sparse array and clears the array pointer upon exit.\n@param mat Double pointer to the array\n */\nCVAPI(void)  cvReleaseSparseMat( CvSparseMat** mat );\n\n/** Creates a copy of CvSparseMat (except, may be, zero items) */\nCVAPI(CvSparseMat*) cvCloneSparseMat( const CvSparseMat* mat );\n\n/** @brief Initializes sparse array elements iterator.\n\nThe function initializes iterator of sparse array elements and returns pointer to the first element,\nor NULL if the array is empty.\n@param mat Input array\n@param mat_iterator Initialized iterator\n */\nCVAPI(CvSparseNode*) cvInitSparseMatIterator( const CvSparseMat* mat,\n                                              CvSparseMatIterator* mat_iterator );\n\n/** @brief Returns the next sparse matrix element\n\nThe function moves iterator to the next sparse matrix element and returns pointer to it. In the\ncurrent version there is no any particular order of the elements, because they are stored in the\nhash table. The sample below demonstrates how to iterate through the sparse matrix:\n@code\n    // print all the non-zero sparse matrix elements and compute their sum\n    double sum = 0;\n    int i, dims = cvGetDims(sparsemat);\n    CvSparseMatIterator it;\n    CvSparseNode* node = cvInitSparseMatIterator(sparsemat, &it);\n\n    for(; node != 0; node = cvGetNextSparseNode(&it))\n    {\n        int* idx = CV_NODE_IDX(array, node);\n        float val = *(float*)CV_NODE_VAL(array, node);\n        printf(\"M\");\n        for(i = 0; i < dims; i++ )\n            printf(\"[%d]\", idx[i]);\n        printf(\"=%g\\n\", val);\n\n        sum += val;\n    }\n\n    printf(\"nTotal sum = %g\\n\", sum);\n@endcode\n@param mat_iterator Sparse array iterator\n */\nCV_INLINE CvSparseNode* cvGetNextSparseNode( CvSparseMatIterator* mat_iterator )\n{\n    if( mat_iterator->node->next )\n        return mat_iterator->node = mat_iterator->node->next;\n    else\n    {\n        int idx;\n        for( idx = ++mat_iterator->curidx; idx < mat_iterator->mat->hashsize; idx++ )\n        {\n            CvSparseNode* node = (CvSparseNode*)mat_iterator->mat->hashtable[idx];\n            if( node )\n            {\n                mat_iterator->curidx = idx;\n                return mat_iterator->node = node;\n            }\n        }\n        return NULL;\n    }\n}\n\n\n#define CV_MAX_ARR 10\n\n/** matrix iterator: used for n-ary operations on dense arrays */\ntypedef struct CvNArrayIterator\n{\n    int count; /**< number of arrays */\n    int dims; /**< number of dimensions to iterate */\n    CvSize size; /**< maximal common linear size: { width = size, height = 1 } */\n    uchar* ptr[CV_MAX_ARR]; /**< pointers to the array slices */\n    int stack[CV_MAX_DIM]; /**< for internal use */\n    CvMatND* hdr[CV_MAX_ARR]; /**< pointers to the headers of the\n                                 matrices that are processed */\n}\nCvNArrayIterator;\n\n#define CV_NO_DEPTH_CHECK     1\n#define CV_NO_CN_CHECK        2\n#define CV_NO_SIZE_CHECK      4\n\n/** initializes iterator that traverses through several arrays simulteneously\n   (the function together with cvNextArraySlice is used for\n    N-ari element-wise operations) */\nCVAPI(int) cvInitNArrayIterator( int count, CvArr** arrs,\n                                 const CvArr* mask, CvMatND* stubs,\n                                 CvNArrayIterator* array_iterator,\n                                 int flags CV_DEFAULT(0) );\n\n/** returns zero value if iteration is finished, non-zero (slice length) otherwise */\nCVAPI(int) cvNextNArraySlice( CvNArrayIterator* array_iterator );\n\n\n/** @brief Returns type of array elements.\n\nThe function returns type of the array elements. In the case of IplImage the type is converted to\nCvMat-like representation. For example, if the image has been created as:\n@code\n    IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 3);\n@endcode\nThe code cvGetElemType(img) will return CV_8UC3.\n@param arr Input array\n */\nCVAPI(int) cvGetElemType( const CvArr* arr );\n\n/** @brief Return number of array dimensions\n\nThe function returns the array dimensionality and the array of dimension sizes. In the case of\nIplImage or CvMat it always returns 2 regardless of number of image/matrix rows. For example, the\nfollowing code calculates total number of array elements:\n@code\n    int sizes[CV_MAX_DIM];\n    int i, total = 1;\n    int dims = cvGetDims(arr, size);\n    for(i = 0; i < dims; i++ )\n        total *= sizes[i];\n@endcode\n@param arr Input array\n@param sizes Optional output vector of the array dimension sizes. For 2d arrays the number of rows\n(height) goes first, number of columns (width) next.\n */\nCVAPI(int) cvGetDims( const CvArr* arr, int* sizes CV_DEFAULT(NULL) );\n\n\n/** @brief Returns array size along the specified dimension.\n\n@param arr Input array\n@param index Zero-based dimension index (for matrices 0 means number of rows, 1 means number of\ncolumns; for images 0 means height, 1 means width)\n */\nCVAPI(int) cvGetDimSize( const CvArr* arr, int index );\n\n\n/** @brief Return pointer to a particular array element.\n\nThe functions return a pointer to a specific array element. Number of array dimension should match\nto the number of indices passed to the function except for cvPtr1D function that can be used for\nsequential access to 1D, 2D or nD dense arrays.\n\nThe functions can be used for sparse arrays as well - if the requested node does not exist they\ncreate it and set it to zero.\n\nAll these as well as other functions accessing array elements ( cvGetND , cvGetRealND , cvSet\n, cvSetND , cvSetRealND ) raise an error in case if the element index is out of range.\n@param arr Input array\n@param idx0 The first zero-based component of the element index\n@param type Optional output parameter: type of matrix elements\n */\nCVAPI(uchar*) cvPtr1D( const CvArr* arr, int idx0, int* type CV_DEFAULT(NULL));\n/** @overload */\nCVAPI(uchar*) cvPtr2D( const CvArr* arr, int idx0, int idx1, int* type CV_DEFAULT(NULL) );\n/** @overload */\nCVAPI(uchar*) cvPtr3D( const CvArr* arr, int idx0, int idx1, int idx2,\n                      int* type CV_DEFAULT(NULL));\n/** @overload\n@param arr Input array\n@param idx Array of the element indices\n@param type Optional output parameter: type of matrix elements\n@param create_node Optional input parameter for sparse matrices. Non-zero value of the parameter\nmeans that the requested element is created if it does not exist already.\n@param precalc_hashval Optional input parameter for sparse matrices. If the pointer is not NULL,\nthe function does not recalculate the node hash value, but takes it from the specified location.\nIt is useful for speeding up pair-wise operations (TODO: provide an example)\n*/\nCVAPI(uchar*) cvPtrND( const CvArr* arr, const int* idx, int* type CV_DEFAULT(NULL),\n                      int create_node CV_DEFAULT(1),\n                      unsigned* precalc_hashval CV_DEFAULT(NULL));\n\n/** @brief Return a specific array element.\n\nThe functions return a specific array element. In the case of a sparse array the functions return 0\nif the requested node does not exist (no new node is created by the functions).\n@param arr Input array\n@param idx0 The first zero-based component of the element index\n */\nCVAPI(CvScalar) cvGet1D( const CvArr* arr, int idx0 );\n/** @overload */\nCVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );\n/** @overload */\nCVAPI(CvScalar) cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 );\n/** @overload\n@param arr Input array\n@param idx Array of the element indices\n*/\nCVAPI(CvScalar) cvGetND( const CvArr* arr, const int* idx );\n\n/** @brief Return a specific element of single-channel 1D, 2D, 3D or nD array.\n\nReturns a specific element of a single-channel array. If the array has multiple channels, a runtime\nerror is raised. Note that Get?D functions can be used safely for both single-channel and\nmultiple-channel arrays though they are a bit slower.\n\nIn the case of a sparse array the functions return 0 if the requested node does not exist (no new\nnode is created by the functions).\n@param arr Input array. Must have a single channel.\n@param idx0 The first zero-based component of the element index\n */\nCVAPI(double) cvGetReal1D( const CvArr* arr, int idx0 );\n/** @overload */\nCVAPI(double) cvGetReal2D( const CvArr* arr, int idx0, int idx1 );\n/** @overload */\nCVAPI(double) cvGetReal3D( const CvArr* arr, int idx0, int idx1, int idx2 );\n/** @overload\n@param arr Input array. Must have a single channel.\n@param idx Array of the element indices\n*/\nCVAPI(double) cvGetRealND( const CvArr* arr, const int* idx );\n\n/** @brief Change the particular array element.\n\nThe functions assign the new value to a particular array element. In the case of a sparse array the\nfunctions create the node if it does not exist yet.\n@param arr Input array\n@param idx0 The first zero-based component of the element index\n@param value The assigned value\n */\nCVAPI(void) cvSet1D( CvArr* arr, int idx0, CvScalar value );\n/** @overload */\nCVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );\n/** @overload */\nCVAPI(void) cvSet3D( CvArr* arr, int idx0, int idx1, int idx2, CvScalar value );\n/** @overload\n@param arr Input array\n@param idx Array of the element indices\n@param value The assigned value\n*/\nCVAPI(void) cvSetND( CvArr* arr, const int* idx, CvScalar value );\n\n/** @brief Change a specific array element.\n\nThe functions assign a new value to a specific element of a single-channel array. If the array has\nmultiple channels, a runtime error is raised. Note that the Set\\*D function can be used safely for\nboth single-channel and multiple-channel arrays, though they are a bit slower.\n\nIn the case of a sparse array the functions create the node if it does not yet exist.\n@param arr Input array\n@param idx0 The first zero-based component of the element index\n@param value The assigned value\n */\nCVAPI(void) cvSetReal1D( CvArr* arr, int idx0, double value );\n/** @overload */\nCVAPI(void) cvSetReal2D( CvArr* arr, int idx0, int idx1, double value );\n/** @overload */\nCVAPI(void) cvSetReal3D( CvArr* arr, int idx0,\n                        int idx1, int idx2, double value );\n/** @overload\n@param arr Input array\n@param idx Array of the element indices\n@param value The assigned value\n*/\nCVAPI(void) cvSetRealND( CvArr* arr, const int* idx, double value );\n\n/** clears element of ND dense array,\n   in case of sparse arrays it deletes the specified node */\nCVAPI(void) cvClearND( CvArr* arr, const int* idx );\n\n/** @brief Returns matrix header for arbitrary array.\n\nThe function returns a matrix header for the input array that can be a matrix - CvMat, an image -\nIplImage, or a multi-dimensional dense array - CvMatND (the third option is allowed only if\nallowND != 0) . In the case of matrix the function simply returns the input pointer. In the case of\nIplImage\\* or CvMatND it initializes the header structure with parameters of the current image ROI\nand returns &header. Because COI is not supported by CvMat, it is returned separately.\n\nThe function provides an easy way to handle both types of arrays - IplImage and CvMat using the same\ncode. Input array must have non-zero data pointer, otherwise the function will report an error.\n\n@note If the input array is IplImage with planar data layout and COI set, the function returns the\npointer to the selected plane and COI == 0. This feature allows user to process IplImage structures\nwith planar data layout, even though OpenCV does not support such images.\n@param arr Input array\n@param header Pointer to CvMat structure used as a temporary buffer\n@param coi Optional output parameter for storing COI\n@param allowND If non-zero, the function accepts multi-dimensional dense arrays (CvMatND\\*) and\nreturns 2D matrix (if CvMatND has two dimensions) or 1D matrix (when CvMatND has 1 dimension or\nmore than 2 dimensions). The CvMatND array must be continuous.\n@sa cvGetImage, cvarrToMat.\n */\nCVAPI(CvMat*) cvGetMat( const CvArr* arr, CvMat* header,\n                       int* coi CV_DEFAULT(NULL),\n                       int allowND CV_DEFAULT(0));\n\n/** @brief Returns image header for arbitrary array.\n\nThe function returns the image header for the input array that can be a matrix (CvMat) or image\n(IplImage). In the case of an image the function simply returns the input pointer. In the case of\nCvMat it initializes an image_header structure with the parameters of the input matrix. Note that\nif we transform IplImage to CvMat using cvGetMat and then transform CvMat back to IplImage using\nthis function, we will get different headers if the ROI is set in the original image.\n@param arr Input array\n@param image_header Pointer to IplImage structure used as a temporary buffer\n */\nCVAPI(IplImage*) cvGetImage( const CvArr* arr, IplImage* image_header );\n\n\n/** @brief Changes the shape of a multi-dimensional array without copying the data.\n\nThe function is an advanced version of cvReshape that can work with multi-dimensional arrays as\nwell (though it can work with ordinary images and matrices) and change the number of dimensions.\n\nBelow are the two samples from the cvReshape description rewritten using cvReshapeMatND:\n@code\n    IplImage* color_img = cvCreateImage(cvSize(320,240), IPL_DEPTH_8U, 3);\n    IplImage gray_img_hdr, *gray_img;\n    gray_img = (IplImage*)cvReshapeMatND(color_img, sizeof(gray_img_hdr), &gray_img_hdr, 1, 0, 0);\n    ...\n    int size[] = { 2, 2, 2 };\n    CvMatND* mat = cvCreateMatND(3, size, CV_32F);\n    CvMat row_header, *row;\n    row = (CvMat*)cvReshapeMatND(mat, sizeof(row_header), &row_header, 0, 1, 0);\n@endcode\nIn C, the header file for this function includes a convenient macro cvReshapeND that does away with\nthe sizeof_header parameter. So, the lines containing the call to cvReshapeMatND in the examples\nmay be replaced as follow:\n@code\n    gray_img = (IplImage*)cvReshapeND(color_img, &gray_img_hdr, 1, 0, 0);\n    ...\n    row = (CvMat*)cvReshapeND(mat, &row_header, 0, 1, 0);\n@endcode\n@param arr Input array\n@param sizeof_header Size of output header to distinguish between IplImage, CvMat and CvMatND\noutput headers\n@param header Output header to be filled\n@param new_cn New number of channels. new_cn = 0 means that the number of channels remains\nunchanged.\n@param new_dims New number of dimensions. new_dims = 0 means that the number of dimensions\nremains the same.\n@param new_sizes Array of new dimension sizes. Only new_dims-1 values are used, because the\ntotal number of elements must remain the same. Thus, if new_dims = 1, new_sizes array is not\nused.\n */\nCVAPI(CvArr*) cvReshapeMatND( const CvArr* arr,\n                             int sizeof_header, CvArr* header,\n                             int new_cn, int new_dims, int* new_sizes );\n\n#define cvReshapeND( arr, header, new_cn, new_dims, new_sizes )   \\\n      cvReshapeMatND( (arr), sizeof(*(header)), (header),         \\\n                      (new_cn), (new_dims), (new_sizes))\n\n/** @brief Changes shape of matrix/image without copying data.\n\nThe function initializes the CvMat header so that it points to the same data as the original array\nbut has a different shape - different number of channels, different number of rows, or both.\n\nThe following example code creates one image buffer and two image headers, the first is for a\n320x240x3 image and the second is for a 960x240x1 image:\n@code\n    IplImage* color_img = cvCreateImage(cvSize(320,240), IPL_DEPTH_8U, 3);\n    CvMat gray_mat_hdr;\n    IplImage gray_img_hdr, *gray_img;\n    cvReshape(color_img, &gray_mat_hdr, 1);\n    gray_img = cvGetImage(&gray_mat_hdr, &gray_img_hdr);\n@endcode\nAnd the next example converts a 3x3 matrix to a single 1x9 vector:\n@code\n    CvMat* mat = cvCreateMat(3, 3, CV_32F);\n    CvMat row_header, *row;\n    row = cvReshape(mat, &row_header, 0, 1);\n@endcode\n@param arr Input array\n@param header Output header to be filled\n@param new_cn New number of channels. 'new_cn = 0' means that the number of channels remains\nunchanged.\n@param new_rows New number of rows. 'new_rows = 0' means that the number of rows remains\nunchanged unless it needs to be changed according to new_cn value.\n*/\nCVAPI(CvMat*) cvReshape( const CvArr* arr, CvMat* header,\n                        int new_cn, int new_rows CV_DEFAULT(0) );\n\n/** Repeats source 2d array several times in both horizontal and\n   vertical direction to fill destination array */\nCVAPI(void) cvRepeat( const CvArr* src, CvArr* dst );\n\n/** @brief Allocates array data\n\nThe function allocates image, matrix or multi-dimensional dense array data. Note that in the case of\nmatrix types OpenCV allocation functions are used. In the case of IplImage they are used unless\nCV_TURN_ON_IPL_COMPATIBILITY() has been called before. In the latter case IPL functions are used\nto allocate the data.\n@param arr Array header\n */\nCVAPI(void)  cvCreateData( CvArr* arr );\n\n/** @brief Releases array data.\n\nThe function releases the array data. In the case of CvMat or CvMatND it simply calls\ncvDecRefData(), that is the function can not deallocate external data. See also the note to\ncvCreateData .\n@param arr Array header\n */\nCVAPI(void)  cvReleaseData( CvArr* arr );\n\n/** @brief Assigns user data to the array header.\n\nThe function assigns user data to the array header. Header should be initialized before using\ncvCreateMatHeader, cvCreateImageHeader, cvCreateMatNDHeader, cvInitMatHeader,\ncvInitImageHeader or cvInitMatNDHeader.\n@param arr Array header\n@param data User data\n@param step Full row length in bytes\n */\nCVAPI(void)  cvSetData( CvArr* arr, void* data, int step );\n\n/** @brief Retrieves low-level information about the array.\n\nThe function fills output variables with low-level information about the array data. All output\n\nparameters are optional, so some of the pointers may be set to NULL. If the array is IplImage with\nROI set, the parameters of ROI are returned.\n\nThe following example shows how to get access to array elements. It computes absolute values of the\narray elements :\n@code\n    float* data;\n    int step;\n    CvSize size;\n\n    cvGetRawData(array, (uchar**)&data, &step, &size);\n    step /= sizeof(data[0]);\n\n    for(int y = 0; y < size.height; y++, data += step )\n        for(int x = 0; x < size.width; x++ )\n            data[x] = (float)fabs(data[x]);\n@endcode\n@param arr Array header\n@param data Output pointer to the whole image origin or ROI origin if ROI is set\n@param step Output full row length in bytes\n@param roi_size Output ROI size\n */\nCVAPI(void) cvGetRawData( const CvArr* arr, uchar** data,\n                         int* step CV_DEFAULT(NULL),\n                         CvSize* roi_size CV_DEFAULT(NULL));\n\n/** @brief Returns size of matrix or image ROI.\n\nThe function returns number of rows (CvSize::height) and number of columns (CvSize::width) of the\ninput matrix or image. In the case of image the size of ROI is returned.\n@param arr array header\n */\nCVAPI(CvSize) cvGetSize( const CvArr* arr );\n\n/** @brief Copies one array to another.\n\nThe function copies selected elements from an input array to an output array:\n\n\\f[\\texttt{dst} (I)= \\texttt{src} (I)  \\quad \\text{if} \\quad \\texttt{mask} (I)  \\ne 0.\\f]\n\nIf any of the passed arrays is of IplImage type, then its ROI and COI fields are used. Both arrays\nmust have the same type, the same number of dimensions, and the same size. The function can also\ncopy sparse arrays (mask is not supported in this case).\n@param src The source array\n@param dst The destination array\n@param mask Operation mask, 8-bit single channel array; specifies elements of the destination array\nto be changed\n */\nCVAPI(void)  cvCopy( const CvArr* src, CvArr* dst,\n                     const CvArr* mask CV_DEFAULT(NULL) );\n\n/** @brief Sets every element of an array to a given value.\n\nThe function copies the scalar value to every selected element of the destination array:\n\\f[\\texttt{arr} (I)= \\texttt{value} \\quad \\text{if} \\quad \\texttt{mask} (I)  \\ne 0\\f]\nIf array arr is of IplImage type, then is ROI used, but COI must not be set.\n@param arr The destination array\n@param value Fill value\n@param mask Operation mask, 8-bit single channel array; specifies elements of the destination\narray to be changed\n */\nCVAPI(void)  cvSet( CvArr* arr, CvScalar value,\n                    const CvArr* mask CV_DEFAULT(NULL) );\n\n/** @brief Clears the array.\n\nThe function clears the array. In the case of dense arrays (CvMat, CvMatND or IplImage),\ncvZero(array) is equivalent to cvSet(array,cvScalarAll(0),0). In the case of sparse arrays all the\nelements are removed.\n@param arr Array to be cleared\n */\nCVAPI(void)  cvSetZero( CvArr* arr );\n#define cvZero  cvSetZero\n\n\n/** Splits a multi-channel array into the set of single-channel arrays or\n   extracts particular [color] plane */\nCVAPI(void)  cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1,\n                      CvArr* dst2, CvArr* dst3 );\n\n/** Merges a set of single-channel arrays into the single multi-channel array\n   or inserts one particular [color] plane to the array */\nCVAPI(void)  cvMerge( const CvArr* src0, const CvArr* src1,\n                      const CvArr* src2, const CvArr* src3,\n                      CvArr* dst );\n\n/** Copies several channels from input arrays to\n   certain channels of output arrays */\nCVAPI(void)  cvMixChannels( const CvArr** src, int src_count,\n                            CvArr** dst, int dst_count,\n                            const int* from_to, int pair_count );\n\n/** @brief Converts one array to another with optional linear transformation.\n\nThe function has several different purposes, and thus has several different names. It copies one\narray to another with optional scaling, which is performed first, and/or optional type conversion,\nperformed after:\n\n\\f[\\texttt{dst} (I) =  \\texttt{scale} \\texttt{src} (I) + ( \\texttt{shift} _0, \\texttt{shift} _1,...)\\f]\n\nAll the channels of multi-channel arrays are processed independently.\n\nThe type of conversion is done with rounding and saturation, that is if the result of scaling +\nconversion can not be represented exactly by a value of the destination array element type, it is\nset to the nearest representable value on the real axis.\n@param src Source array\n@param dst Destination array\n@param scale Scale factor\n@param shift Value added to the scaled source array elements\n */\nCVAPI(void)  cvConvertScale( const CvArr* src, CvArr* dst,\n                             double scale CV_DEFAULT(1),\n                             double shift CV_DEFAULT(0) );\n#define cvCvtScale cvConvertScale\n#define cvScale  cvConvertScale\n#define cvConvert( src, dst )  cvConvertScale( (src), (dst), 1, 0 )\n\n\n/** Performs linear transformation on every source array element,\n   stores absolute value of the result:\n   dst(x,y,c) = abs(scale*src(x,y,c)+shift).\n   destination array must have 8u type.\n   In other cases one may use cvConvertScale + cvAbsDiffS */\nCVAPI(void)  cvConvertScaleAbs( const CvArr* src, CvArr* dst,\n                                double scale CV_DEFAULT(1),\n                                double shift CV_DEFAULT(0) );\n#define cvCvtScaleAbs  cvConvertScaleAbs\n\n\n/** checks termination criteria validity and\n   sets eps to default_eps (if it is not set),\n   max_iter to default_max_iters (if it is not set)\n*/\nCVAPI(CvTermCriteria) cvCheckTermCriteria( CvTermCriteria criteria,\n                                           double default_eps,\n                                           int default_max_iters );\n\n/****************************************************************************************\\\n*                   Arithmetic, logic and comparison operations                          *\n\\****************************************************************************************/\n\n/** dst(mask) = src1(mask) + src2(mask) */\nCVAPI(void)  cvAdd( const CvArr* src1, const CvArr* src2, CvArr* dst,\n                    const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(mask) = src(mask) + value */\nCVAPI(void)  cvAddS( const CvArr* src, CvScalar value, CvArr* dst,\n                     const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(mask) = src1(mask) - src2(mask) */\nCVAPI(void)  cvSub( const CvArr* src1, const CvArr* src2, CvArr* dst,\n                    const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(mask) = src(mask) - value = src(mask) + (-value) */\nCV_INLINE  void  cvSubS( const CvArr* src, CvScalar value, CvArr* dst,\n                         const CvArr* mask CV_DEFAULT(NULL))\n{\n    cvAddS( src, cvScalar( -value.val[0], -value.val[1], -value.val[2], -value.val[3]),\n            dst, mask );\n}\n\n/** dst(mask) = value - src(mask) */\nCVAPI(void)  cvSubRS( const CvArr* src, CvScalar value, CvArr* dst,\n                      const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(idx) = src1(idx) * src2(idx) * scale\n   (scaled element-wise multiplication of 2 arrays) */\nCVAPI(void)  cvMul( const CvArr* src1, const CvArr* src2,\n                    CvArr* dst, double scale CV_DEFAULT(1) );\n\n/** element-wise division/inversion with scaling:\n    dst(idx) = src1(idx) * scale / src2(idx)\n    or dst(idx) = scale / src2(idx) if src1 == 0 */\nCVAPI(void)  cvDiv( const CvArr* src1, const CvArr* src2,\n                    CvArr* dst, double scale CV_DEFAULT(1));\n\n/** dst = src1 * scale + src2 */\nCVAPI(void)  cvScaleAdd( const CvArr* src1, CvScalar scale,\n                         const CvArr* src2, CvArr* dst );\n#define cvAXPY( A, real_scalar, B, C ) cvScaleAdd(A, cvRealScalar(real_scalar), B, C)\n\n/** dst = src1 * alpha + src2 * beta + gamma */\nCVAPI(void)  cvAddWeighted( const CvArr* src1, double alpha,\n                            const CvArr* src2, double beta,\n                            double gamma, CvArr* dst );\n\n/** @brief Calculates the dot product of two arrays in Euclidean metrics.\n\nThe function calculates and returns the Euclidean dot product of two arrays.\n\n\\f[src1  \\bullet src2 =  \\sum _I ( \\texttt{src1} (I)  \\texttt{src2} (I))\\f]\n\nIn the case of multiple channel arrays, the results for all channels are accumulated. In particular,\ncvDotProduct(a,a) where a is a complex vector, will return \\f$||\\texttt{a}||^2\\f$. The function can\nprocess multi-dimensional arrays, row by row, layer by layer, and so on.\n@param src1 The first source array\n@param src2 The second source array\n */\nCVAPI(double)  cvDotProduct( const CvArr* src1, const CvArr* src2 );\n\n/** dst(idx) = src1(idx) & src2(idx) */\nCVAPI(void) cvAnd( const CvArr* src1, const CvArr* src2,\n                  CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(idx) = src(idx) & value */\nCVAPI(void) cvAndS( const CvArr* src, CvScalar value,\n                   CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(idx) = src1(idx) | src2(idx) */\nCVAPI(void) cvOr( const CvArr* src1, const CvArr* src2,\n                 CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(idx) = src(idx) | value */\nCVAPI(void) cvOrS( const CvArr* src, CvScalar value,\n                  CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(idx) = src1(idx) ^ src2(idx) */\nCVAPI(void) cvXor( const CvArr* src1, const CvArr* src2,\n                  CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(idx) = src(idx) ^ value */\nCVAPI(void) cvXorS( const CvArr* src, CvScalar value,\n                   CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/** dst(idx) = ~src(idx) */\nCVAPI(void) cvNot( const CvArr* src, CvArr* dst );\n\n/** dst(idx) = lower(idx) <= src(idx) < upper(idx) */\nCVAPI(void) cvInRange( const CvArr* src, const CvArr* lower,\n                      const CvArr* upper, CvArr* dst );\n\n/** dst(idx) = lower <= src(idx) < upper */\nCVAPI(void) cvInRangeS( const CvArr* src, CvScalar lower,\n                       CvScalar upper, CvArr* dst );\n\n#define CV_CMP_EQ   0\n#define CV_CMP_GT   1\n#define CV_CMP_GE   2\n#define CV_CMP_LT   3\n#define CV_CMP_LE   4\n#define CV_CMP_NE   5\n\n/** The comparison operation support single-channel arrays only.\n   Destination image should be 8uC1 or 8sC1 */\n\n/** dst(idx) = src1(idx) _cmp_op_ src2(idx) */\nCVAPI(void) cvCmp( const CvArr* src1, const CvArr* src2, CvArr* dst, int cmp_op );\n\n/** dst(idx) = src1(idx) _cmp_op_ value */\nCVAPI(void) cvCmpS( const CvArr* src, double value, CvArr* dst, int cmp_op );\n\n/** dst(idx) = min(src1(idx),src2(idx)) */\nCVAPI(void) cvMin( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/** dst(idx) = max(src1(idx),src2(idx)) */\nCVAPI(void) cvMax( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/** dst(idx) = min(src(idx),value) */\nCVAPI(void) cvMinS( const CvArr* src, double value, CvArr* dst );\n\n/** dst(idx) = max(src(idx),value) */\nCVAPI(void) cvMaxS( const CvArr* src, double value, CvArr* dst );\n\n/** dst(x,y,c) = abs(src1(x,y,c) - src2(x,y,c)) */\nCVAPI(void) cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/** dst(x,y,c) = abs(src(x,y,c) - value(c)) */\nCVAPI(void) cvAbsDiffS( const CvArr* src, CvArr* dst, CvScalar value );\n#define cvAbs( src, dst ) cvAbsDiffS( (src), (dst), cvScalarAll(0))\n\n/****************************************************************************************\\\n*                                Math operations                                         *\n\\****************************************************************************************/\n\n/** Does cartesian->polar coordinates conversion.\n   Either of output components (magnitude or angle) is optional */\nCVAPI(void)  cvCartToPolar( const CvArr* x, const CvArr* y,\n                            CvArr* magnitude, CvArr* angle CV_DEFAULT(NULL),\n                            int angle_in_degrees CV_DEFAULT(0));\n\n/** Does polar->cartesian coordinates conversion.\n   Either of output components (magnitude or angle) is optional.\n   If magnitude is missing it is assumed to be all 1's */\nCVAPI(void)  cvPolarToCart( const CvArr* magnitude, const CvArr* angle,\n                            CvArr* x, CvArr* y,\n                            int angle_in_degrees CV_DEFAULT(0));\n\n/** Does powering: dst(idx) = src(idx)^power */\nCVAPI(void)  cvPow( const CvArr* src, CvArr* dst, double power );\n\n/** Does exponention: dst(idx) = exp(src(idx)).\n   Overflow is not handled yet. Underflow is handled.\n   Maximal relative error is ~7e-6 for single-precision input */\nCVAPI(void)  cvExp( const CvArr* src, CvArr* dst );\n\n/** Calculates natural logarithms: dst(idx) = log(abs(src(idx))).\n   Logarithm of 0 gives large negative number(~-700)\n   Maximal relative error is ~3e-7 for single-precision output\n*/\nCVAPI(void)  cvLog( const CvArr* src, CvArr* dst );\n\n/** Fast arctangent calculation */\nCVAPI(float) cvFastArctan( float y, float x );\n\n/** Fast cubic root calculation */\nCVAPI(float)  cvCbrt( float value );\n\n#define  CV_CHECK_RANGE    1\n#define  CV_CHECK_QUIET    2\n/** Checks array values for NaNs, Infs or simply for too large numbers\n   (if CV_CHECK_RANGE is set). If CV_CHECK_QUIET is set,\n   no runtime errors is raised (function returns zero value in case of \"bad\" values).\n   Otherwise cvError is called */\nCVAPI(int)  cvCheckArr( const CvArr* arr, int flags CV_DEFAULT(0),\n                        double min_val CV_DEFAULT(0), double max_val CV_DEFAULT(0));\n#define cvCheckArray cvCheckArr\n\n#define CV_RAND_UNI      0\n#define CV_RAND_NORMAL   1\n\n/** @brief Fills an array with random numbers and updates the RNG state.\n\nThe function fills the destination array with uniformly or normally distributed random numbers.\n@param rng CvRNG state initialized by cvRNG\n@param arr The destination array\n@param dist_type Distribution type\n> -   **CV_RAND_UNI** uniform distribution\n> -   **CV_RAND_NORMAL** normal or Gaussian distribution\n@param param1 The first parameter of the distribution. In the case of a uniform distribution it is\nthe inclusive lower boundary of the random numbers range. In the case of a normal distribution it\nis the mean value of the random numbers.\n@param param2 The second parameter of the distribution. In the case of a uniform distribution it\nis the exclusive upper boundary of the random numbers range. In the case of a normal distribution\nit is the standard deviation of the random numbers.\n@sa randu, randn, RNG::fill.\n */\nCVAPI(void) cvRandArr( CvRNG* rng, CvArr* arr, int dist_type,\n                      CvScalar param1, CvScalar param2 );\n\nCVAPI(void) cvRandShuffle( CvArr* mat, CvRNG* rng,\n                           double iter_factor CV_DEFAULT(1.));\n\n#define CV_SORT_EVERY_ROW 0\n#define CV_SORT_EVERY_COLUMN 1\n#define CV_SORT_ASCENDING 0\n#define CV_SORT_DESCENDING 16\n\nCVAPI(void) cvSort( const CvArr* src, CvArr* dst CV_DEFAULT(NULL),\n                    CvArr* idxmat CV_DEFAULT(NULL),\n                    int flags CV_DEFAULT(0));\n\n/** Finds real roots of a cubic equation */\nCVAPI(int) cvSolveCubic( const CvMat* coeffs, CvMat* roots );\n\n/** Finds all real and complex roots of a polynomial equation */\nCVAPI(void) cvSolvePoly(const CvMat* coeffs, CvMat *roots2,\n      int maxiter CV_DEFAULT(20), int fig CV_DEFAULT(100));\n\n/****************************************************************************************\\\n*                                Matrix operations                                       *\n\\****************************************************************************************/\n\n/** @brief Calculates the cross product of two 3D vectors.\n\nThe function calculates the cross product of two 3D vectors:\n\\f[\\texttt{dst} =  \\texttt{src1} \\times \\texttt{src2}\\f]\nor:\n\\f[\\begin{array}{l} \\texttt{dst} _1 =  \\texttt{src1} _2  \\texttt{src2} _3 -  \\texttt{src1} _3  \\texttt{src2} _2 \\\\ \\texttt{dst} _2 =  \\texttt{src1} _3  \\texttt{src2} _1 -  \\texttt{src1} _1  \\texttt{src2} _3 \\\\ \\texttt{dst} _3 =  \\texttt{src1} _1  \\texttt{src2} _2 -  \\texttt{src1} _2  \\texttt{src2} _1 \\end{array}\\f]\n@param src1 The first source vector\n@param src2 The second source vector\n@param dst The destination vector\n */\nCVAPI(void)  cvCrossProduct( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/** Matrix transform: dst = A*B + C, C is optional */\n#define cvMatMulAdd( src1, src2, src3, dst ) cvGEMM( (src1), (src2), 1., (src3), 1., (dst), 0 )\n#define cvMatMul( src1, src2, dst )  cvMatMulAdd( (src1), (src2), NULL, (dst))\n\n#define CV_GEMM_A_T 1\n#define CV_GEMM_B_T 2\n#define CV_GEMM_C_T 4\n/** Extended matrix transform:\n   dst = alpha*op(A)*op(B) + beta*op(C), where op(X) is X or X^T */\nCVAPI(void)  cvGEMM( const CvArr* src1, const CvArr* src2, double alpha,\n                     const CvArr* src3, double beta, CvArr* dst,\n                     int tABC CV_DEFAULT(0));\n#define cvMatMulAddEx cvGEMM\n\n/** Transforms each element of source array and stores\n   resultant vectors in destination array */\nCVAPI(void)  cvTransform( const CvArr* src, CvArr* dst,\n                          const CvMat* transmat,\n                          const CvMat* shiftvec CV_DEFAULT(NULL));\n#define cvMatMulAddS cvTransform\n\n/** Does perspective transform on every element of input array */\nCVAPI(void)  cvPerspectiveTransform( const CvArr* src, CvArr* dst,\n                                     const CvMat* mat );\n\n/** Calculates (A-delta)*(A-delta)^T (order=0) or (A-delta)^T*(A-delta) (order=1) */\nCVAPI(void) cvMulTransposed( const CvArr* src, CvArr* dst, int order,\n                             const CvArr* delta CV_DEFAULT(NULL),\n                             double scale CV_DEFAULT(1.) );\n\n/** Tranposes matrix. Square matrices can be transposed in-place */\nCVAPI(void)  cvTranspose( const CvArr* src, CvArr* dst );\n#define cvT cvTranspose\n\n/** Completes the symmetric matrix from the lower (LtoR=0) or from the upper (LtoR!=0) part */\nCVAPI(void)  cvCompleteSymm( CvMat* matrix, int LtoR CV_DEFAULT(0) );\n\n/** Mirror array data around horizontal (flip=0),\n   vertical (flip=1) or both(flip=-1) axises:\n   cvFlip(src) flips images vertically and sequences horizontally (inplace) */\nCVAPI(void)  cvFlip( const CvArr* src, CvArr* dst CV_DEFAULT(NULL),\n                     int flip_mode CV_DEFAULT(0));\n#define cvMirror cvFlip\n\n\n#define CV_SVD_MODIFY_A   1\n#define CV_SVD_U_T        2\n#define CV_SVD_V_T        4\n\n/** Performs Singular Value Decomposition of a matrix */\nCVAPI(void)   cvSVD( CvArr* A, CvArr* W, CvArr* U CV_DEFAULT(NULL),\n                     CvArr* V CV_DEFAULT(NULL), int flags CV_DEFAULT(0));\n\n/** Performs Singular Value Back Substitution (solves A*X = B):\n   flags must be the same as in cvSVD */\nCVAPI(void)   cvSVBkSb( const CvArr* W, const CvArr* U,\n                        const CvArr* V, const CvArr* B,\n                        CvArr* X, int flags );\n\n#define CV_LU  0\n#define CV_SVD 1\n#define CV_SVD_SYM 2\n#define CV_CHOLESKY 3\n#define CV_QR  4\n#define CV_NORMAL 16\n\n/** Inverts matrix */\nCVAPI(double)  cvInvert( const CvArr* src, CvArr* dst,\n                         int method CV_DEFAULT(CV_LU));\n#define cvInv cvInvert\n\n/** Solves linear system (src1)*(dst) = (src2)\n   (returns 0 if src1 is a singular and CV_LU method is used) */\nCVAPI(int)  cvSolve( const CvArr* src1, const CvArr* src2, CvArr* dst,\n                     int method CV_DEFAULT(CV_LU));\n\n/** Calculates determinant of input matrix */\nCVAPI(double) cvDet( const CvArr* mat );\n\n/** Calculates trace of the matrix (sum of elements on the main diagonal) */\nCVAPI(CvScalar) cvTrace( const CvArr* mat );\n\n/** Finds eigen values and vectors of a symmetric matrix */\nCVAPI(void)  cvEigenVV( CvArr* mat, CvArr* evects, CvArr* evals,\n                        double eps CV_DEFAULT(0),\n                        int lowindex CV_DEFAULT(-1),\n                        int highindex CV_DEFAULT(-1));\n\n///* Finds selected eigen values and vectors of a symmetric matrix */\n//CVAPI(void)  cvSelectedEigenVV( CvArr* mat, CvArr* evects, CvArr* evals,\n//                                int lowindex, int highindex );\n\n/** Makes an identity matrix (mat_ij = i == j) */\nCVAPI(void)  cvSetIdentity( CvArr* mat, CvScalar value CV_DEFAULT(cvRealScalar(1)) );\n\n/** Fills matrix with given range of numbers */\nCVAPI(CvArr*)  cvRange( CvArr* mat, double start, double end );\n\n/**   @anchor core_c_CovarFlags\n@name Flags for cvCalcCovarMatrix\n@see cvCalcCovarMatrix\n  @{\n*/\n\n/** flag for cvCalcCovarMatrix, transpose([v1-avg, v2-avg,...]) * [v1-avg,v2-avg,...] */\n#define CV_COVAR_SCRAMBLED 0\n\n/** flag for cvCalcCovarMatrix, [v1-avg, v2-avg,...] * transpose([v1-avg,v2-avg,...]) */\n#define CV_COVAR_NORMAL    1\n\n/** flag for cvCalcCovarMatrix, do not calc average (i.e. mean vector) - use the input vector instead\n   (useful for calculating covariance matrix by parts) */\n#define CV_COVAR_USE_AVG   2\n\n/** flag for cvCalcCovarMatrix, scale the covariance matrix coefficients by number of the vectors */\n#define CV_COVAR_SCALE     4\n\n/** flag for cvCalcCovarMatrix, all the input vectors are stored in a single matrix, as its rows */\n#define CV_COVAR_ROWS      8\n\n/** flag for cvCalcCovarMatrix, all the input vectors are stored in a single matrix, as its columns */\n#define CV_COVAR_COLS     16\n\n/** @} */\n\n/** Calculates covariation matrix for a set of vectors\n@see @ref core_c_CovarFlags \"flags\"\n*/\nCVAPI(void)  cvCalcCovarMatrix( const CvArr** vects, int count,\n                                CvArr* cov_mat, CvArr* avg, int flags );\n\n#define CV_PCA_DATA_AS_ROW 0\n#define CV_PCA_DATA_AS_COL 1\n#define CV_PCA_USE_AVG 2\nCVAPI(void)  cvCalcPCA( const CvArr* data, CvArr* mean,\n                        CvArr* eigenvals, CvArr* eigenvects, int flags );\n\nCVAPI(void)  cvProjectPCA( const CvArr* data, const CvArr* mean,\n                           const CvArr* eigenvects, CvArr* result );\n\nCVAPI(void)  cvBackProjectPCA( const CvArr* proj, const CvArr* mean,\n                               const CvArr* eigenvects, CvArr* result );\n\n/** Calculates Mahalanobis(weighted) distance */\nCVAPI(double)  cvMahalanobis( const CvArr* vec1, const CvArr* vec2, const CvArr* mat );\n#define cvMahalonobis  cvMahalanobis\n\n/****************************************************************************************\\\n*                                    Array Statistics                                    *\n\\****************************************************************************************/\n\n/** Finds sum of array elements */\nCVAPI(CvScalar)  cvSum( const CvArr* arr );\n\n/** Calculates number of non-zero pixels */\nCVAPI(int)  cvCountNonZero( const CvArr* arr );\n\n/** Calculates mean value of array elements */\nCVAPI(CvScalar)  cvAvg( const CvArr* arr, const CvArr* mask CV_DEFAULT(NULL) );\n\n/** Calculates mean and standard deviation of pixel values */\nCVAPI(void)  cvAvgSdv( const CvArr* arr, CvScalar* mean, CvScalar* std_dev,\n                       const CvArr* mask CV_DEFAULT(NULL) );\n\n/** Finds global minimum, maximum and their positions */\nCVAPI(void)  cvMinMaxLoc( const CvArr* arr, double* min_val, double* max_val,\n                          CvPoint* min_loc CV_DEFAULT(NULL),\n                          CvPoint* max_loc CV_DEFAULT(NULL),\n                          const CvArr* mask CV_DEFAULT(NULL) );\n\n/** @anchor core_c_NormFlags\n  @name Flags for cvNorm and cvNormalize\n  @{\n*/\n#define CV_C            1\n#define CV_L1           2\n#define CV_L2           4\n#define CV_NORM_MASK    7\n#define CV_RELATIVE     8\n#define CV_DIFF         16\n#define CV_MINMAX       32\n\n#define CV_DIFF_C       (CV_DIFF | CV_C)\n#define CV_DIFF_L1      (CV_DIFF | CV_L1)\n#define CV_DIFF_L2      (CV_DIFF | CV_L2)\n#define CV_RELATIVE_C   (CV_RELATIVE | CV_C)\n#define CV_RELATIVE_L1  (CV_RELATIVE | CV_L1)\n#define CV_RELATIVE_L2  (CV_RELATIVE | CV_L2)\n/** @} */\n\n/** Finds norm, difference norm or relative difference norm for an array (or two arrays)\n@see ref core_c_NormFlags \"flags\"\n*/\nCVAPI(double)  cvNorm( const CvArr* arr1, const CvArr* arr2 CV_DEFAULT(NULL),\n                       int norm_type CV_DEFAULT(CV_L2),\n                       const CvArr* mask CV_DEFAULT(NULL) );\n\n/** @see ref core_c_NormFlags \"flags\" */\nCVAPI(void)  cvNormalize( const CvArr* src, CvArr* dst,\n                          double a CV_DEFAULT(1.), double b CV_DEFAULT(0.),\n                          int norm_type CV_DEFAULT(CV_L2),\n                          const CvArr* mask CV_DEFAULT(NULL) );\n\n/** @anchor core_c_ReduceFlags\n  @name Flags for cvReduce\n  @{\n*/\n#define CV_REDUCE_SUM 0\n#define CV_REDUCE_AVG 1\n#define CV_REDUCE_MAX 2\n#define CV_REDUCE_MIN 3\n/** @} */\n\n/** @see @ref core_c_ReduceFlags \"flags\" */\nCVAPI(void)  cvReduce( const CvArr* src, CvArr* dst, int dim CV_DEFAULT(-1),\n                       int op CV_DEFAULT(CV_REDUCE_SUM) );\n\n/****************************************************************************************\\\n*                      Discrete Linear Transforms and Related Functions                  *\n\\****************************************************************************************/\n\n/** @anchor core_c_DftFlags\n  @name Flags for cvDFT, cvDCT and cvMulSpectrums\n  @{\n  */\n#define CV_DXT_FORWARD  0\n#define CV_DXT_INVERSE  1\n#define CV_DXT_SCALE    2 /**< divide result by size of array */\n#define CV_DXT_INV_SCALE (CV_DXT_INVERSE + CV_DXT_SCALE)\n#define CV_DXT_INVERSE_SCALE CV_DXT_INV_SCALE\n#define CV_DXT_ROWS     4 /**< transform each row individually */\n#define CV_DXT_MUL_CONJ 8 /**< conjugate the second argument of cvMulSpectrums */\n/** @} */\n\n/** Discrete Fourier Transform:\n    complex->complex,\n    real->ccs (forward),\n    ccs->real (inverse)\n@see core_c_DftFlags \"flags\"\n*/\nCVAPI(void)  cvDFT( const CvArr* src, CvArr* dst, int flags,\n                    int nonzero_rows CV_DEFAULT(0) );\n#define cvFFT cvDFT\n\n/** Multiply results of DFTs: DFT(X)*DFT(Y) or DFT(X)*conj(DFT(Y))\n@see core_c_DftFlags \"flags\"\n*/\nCVAPI(void)  cvMulSpectrums( const CvArr* src1, const CvArr* src2,\n                             CvArr* dst, int flags );\n\n/** Finds optimal DFT vector size >= size0 */\nCVAPI(int)  cvGetOptimalDFTSize( int size0 );\n\n/** Discrete Cosine Transform\n@see core_c_DftFlags \"flags\"\n*/\nCVAPI(void)  cvDCT( const CvArr* src, CvArr* dst, int flags );\n\n/****************************************************************************************\\\n*                              Dynamic data structures                                   *\n\\****************************************************************************************/\n\n/** Calculates length of sequence slice (with support of negative indices). */\nCVAPI(int) cvSliceLength( CvSlice slice, const CvSeq* seq );\n\n\n/** Creates new memory storage.\n   block_size == 0 means that default,\n   somewhat optimal size, is used (currently, it is 64K) */\nCVAPI(CvMemStorage*)  cvCreateMemStorage( int block_size CV_DEFAULT(0));\n\n\n/** Creates a memory storage that will borrow memory blocks from parent storage */\nCVAPI(CvMemStorage*)  cvCreateChildMemStorage( CvMemStorage* parent );\n\n\n/** Releases memory storage. All the children of a parent must be released before\n   the parent. A child storage returns all the blocks to parent when it is released */\nCVAPI(void)  cvReleaseMemStorage( CvMemStorage** storage );\n\n\n/** Clears memory storage. This is the only way(!!!) (besides cvRestoreMemStoragePos)\n   to reuse memory allocated for the storage - cvClearSeq,cvClearSet ...\n   do not free any memory.\n   A child storage returns all the blocks to the parent when it is cleared */\nCVAPI(void)  cvClearMemStorage( CvMemStorage* storage );\n\n/** Remember a storage \"free memory\" position */\nCVAPI(void)  cvSaveMemStoragePos( const CvMemStorage* storage, CvMemStoragePos* pos );\n\n/** Restore a storage \"free memory\" position */\nCVAPI(void)  cvRestoreMemStoragePos( CvMemStorage* storage, CvMemStoragePos* pos );\n\n/** Allocates continuous buffer of the specified size in the storage */\nCVAPI(void*) cvMemStorageAlloc( CvMemStorage* storage, size_t size );\n\n/** Allocates string in memory storage */\nCVAPI(CvString) cvMemStorageAllocString( CvMemStorage* storage, const char* ptr,\n                                         int len CV_DEFAULT(-1) );\n\n/** Creates new empty sequence that will reside in the specified storage */\nCVAPI(CvSeq*)  cvCreateSeq( int seq_flags, size_t header_size,\n                            size_t elem_size, CvMemStorage* storage );\n\n/** Changes default size (granularity) of sequence blocks.\n   The default size is ~1Kbyte */\nCVAPI(void)  cvSetSeqBlockSize( CvSeq* seq, int delta_elems );\n\n\n/** Adds new element to the end of sequence. Returns pointer to the element */\nCVAPI(schar*)  cvSeqPush( CvSeq* seq, const void* element CV_DEFAULT(NULL));\n\n\n/** Adds new element to the beginning of sequence. Returns pointer to it */\nCVAPI(schar*)  cvSeqPushFront( CvSeq* seq, const void* element CV_DEFAULT(NULL));\n\n\n/** Removes the last element from sequence and optionally saves it */\nCVAPI(void)  cvSeqPop( CvSeq* seq, void* element CV_DEFAULT(NULL));\n\n\n/** Removes the first element from sequence and optioanally saves it */\nCVAPI(void)  cvSeqPopFront( CvSeq* seq, void* element CV_DEFAULT(NULL));\n\n\n#define CV_FRONT 1\n#define CV_BACK 0\n/** Adds several new elements to the end of sequence */\nCVAPI(void)  cvSeqPushMulti( CvSeq* seq, const void* elements,\n                             int count, int in_front CV_DEFAULT(0) );\n\n/** Removes several elements from the end of sequence and optionally saves them */\nCVAPI(void)  cvSeqPopMulti( CvSeq* seq, void* elements,\n                            int count, int in_front CV_DEFAULT(0) );\n\n/** Inserts a new element in the middle of sequence.\n   cvSeqInsert(seq,0,elem) == cvSeqPushFront(seq,elem) */\nCVAPI(schar*)  cvSeqInsert( CvSeq* seq, int before_index,\n                            const void* element CV_DEFAULT(NULL));\n\n/** Removes specified sequence element */\nCVAPI(void)  cvSeqRemove( CvSeq* seq, int index );\n\n\n/** Removes all the elements from the sequence. The freed memory\n   can be reused later only by the same sequence unless cvClearMemStorage\n   or cvRestoreMemStoragePos is called */\nCVAPI(void)  cvClearSeq( CvSeq* seq );\n\n\n/** Retrieves pointer to specified sequence element.\n   Negative indices are supported and mean counting from the end\n   (e.g -1 means the last sequence element) */\nCVAPI(schar*)  cvGetSeqElem( const CvSeq* seq, int index );\n\n/** Calculates index of the specified sequence element.\n   Returns -1 if element does not belong to the sequence */\nCVAPI(int)  cvSeqElemIdx( const CvSeq* seq, const void* element,\n                         CvSeqBlock** block CV_DEFAULT(NULL) );\n\n/** Initializes sequence writer. The new elements will be added to the end of sequence */\nCVAPI(void)  cvStartAppendToSeq( CvSeq* seq, CvSeqWriter* writer );\n\n\n/** Combination of cvCreateSeq and cvStartAppendToSeq */\nCVAPI(void)  cvStartWriteSeq( int seq_flags, int header_size,\n                              int elem_size, CvMemStorage* storage,\n                              CvSeqWriter* writer );\n\n/** Closes sequence writer, updates sequence header and returns pointer\n   to the resultant sequence\n   (which may be useful if the sequence was created using cvStartWriteSeq))\n*/\nCVAPI(CvSeq*)  cvEndWriteSeq( CvSeqWriter* writer );\n\n\n/** Updates sequence header. May be useful to get access to some of previously\n   written elements via cvGetSeqElem or sequence reader */\nCVAPI(void)   cvFlushSeqWriter( CvSeqWriter* writer );\n\n\n/** Initializes sequence reader.\n   The sequence can be read in forward or backward direction */\nCVAPI(void) cvStartReadSeq( const CvSeq* seq, CvSeqReader* reader,\n                           int reverse CV_DEFAULT(0) );\n\n\n/** Returns current sequence reader position (currently observed sequence element) */\nCVAPI(int)  cvGetSeqReaderPos( CvSeqReader* reader );\n\n\n/** Changes sequence reader position. It may seek to an absolute or\n   to relative to the current position */\nCVAPI(void)   cvSetSeqReaderPos( CvSeqReader* reader, int index,\n                                 int is_relative CV_DEFAULT(0));\n\n/** Copies sequence content to a continuous piece of memory */\nCVAPI(void*)  cvCvtSeqToArray( const CvSeq* seq, void* elements,\n                               CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ) );\n\n/** Creates sequence header for array.\n   After that all the operations on sequences that do not alter the content\n   can be applied to the resultant sequence */\nCVAPI(CvSeq*) cvMakeSeqHeaderForArray( int seq_type, int header_size,\n                                       int elem_size, void* elements, int total,\n                                       CvSeq* seq, CvSeqBlock* block );\n\n/** Extracts sequence slice (with or without copying sequence elements) */\nCVAPI(CvSeq*) cvSeqSlice( const CvSeq* seq, CvSlice slice,\n                         CvMemStorage* storage CV_DEFAULT(NULL),\n                         int copy_data CV_DEFAULT(0));\n\nCV_INLINE CvSeq* cvCloneSeq( const CvSeq* seq, CvMemStorage* storage CV_DEFAULT(NULL))\n{\n    return cvSeqSlice( seq, CV_WHOLE_SEQ, storage, 1 );\n}\n\n/** Removes sequence slice */\nCVAPI(void)  cvSeqRemoveSlice( CvSeq* seq, CvSlice slice );\n\n/** Inserts a sequence or array into another sequence */\nCVAPI(void)  cvSeqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr );\n\n/** a < b ? -1 : a > b ? 1 : 0 */\ntypedef int (CV_CDECL* CvCmpFunc)(const void* a, const void* b, void* userdata );\n\n/** Sorts sequence in-place given element comparison function */\nCVAPI(void) cvSeqSort( CvSeq* seq, CvCmpFunc func, void* userdata CV_DEFAULT(NULL) );\n\n/** Finds element in a [sorted] sequence */\nCVAPI(schar*) cvSeqSearch( CvSeq* seq, const void* elem, CvCmpFunc func,\n                           int is_sorted, int* elem_idx,\n                           void* userdata CV_DEFAULT(NULL) );\n\n/** Reverses order of sequence elements in-place */\nCVAPI(void) cvSeqInvert( CvSeq* seq );\n\n/** Splits sequence into one or more equivalence classes using the specified criteria */\nCVAPI(int)  cvSeqPartition( const CvSeq* seq, CvMemStorage* storage,\n                            CvSeq** labels, CvCmpFunc is_equal, void* userdata );\n\n/************ Internal sequence functions ************/\nCVAPI(void)  cvChangeSeqBlock( void* reader, int direction );\nCVAPI(void)  cvCreateSeqBlock( CvSeqWriter* writer );\n\n\n/** Creates a new set */\nCVAPI(CvSet*)  cvCreateSet( int set_flags, int header_size,\n                            int elem_size, CvMemStorage* storage );\n\n/** Adds new element to the set and returns pointer to it */\nCVAPI(int)  cvSetAdd( CvSet* set_header, CvSetElem* elem CV_DEFAULT(NULL),\n                      CvSetElem** inserted_elem CV_DEFAULT(NULL) );\n\n/** Fast variant of cvSetAdd */\nCV_INLINE  CvSetElem* cvSetNew( CvSet* set_header )\n{\n    CvSetElem* elem = set_header->free_elems;\n    if( elem )\n    {\n        set_header->free_elems = elem->next_free;\n        elem->flags = elem->flags & CV_SET_ELEM_IDX_MASK;\n        set_header->active_count++;\n    }\n    else\n        cvSetAdd( set_header, NULL, &elem );\n    return elem;\n}\n\n/** Removes set element given its pointer */\nCV_INLINE  void cvSetRemoveByPtr( CvSet* set_header, void* elem )\n{\n    CvSetElem* _elem = (CvSetElem*)elem;\n    assert( _elem->flags >= 0 /*&& (elem->flags & CV_SET_ELEM_IDX_MASK) < set_header->total*/ );\n    _elem->next_free = set_header->free_elems;\n    _elem->flags = (_elem->flags & CV_SET_ELEM_IDX_MASK) | CV_SET_ELEM_FREE_FLAG;\n    set_header->free_elems = _elem;\n    set_header->active_count--;\n}\n\n/** Removes element from the set by its index  */\nCVAPI(void)   cvSetRemove( CvSet* set_header, int index );\n\n/** Returns a set element by index. If the element doesn't belong to the set,\n   NULL is returned */\nCV_INLINE CvSetElem* cvGetSetElem( const CvSet* set_header, int idx )\n{\n    CvSetElem* elem = (CvSetElem*)(void *)cvGetSeqElem( (CvSeq*)set_header, idx );\n    return elem && CV_IS_SET_ELEM( elem ) ? elem : 0;\n}\n\n/** Removes all the elements from the set */\nCVAPI(void)  cvClearSet( CvSet* set_header );\n\n/** Creates new graph */\nCVAPI(CvGraph*)  cvCreateGraph( int graph_flags, int header_size,\n                                int vtx_size, int edge_size,\n                                CvMemStorage* storage );\n\n/** Adds new vertex to the graph */\nCVAPI(int)  cvGraphAddVtx( CvGraph* graph, const CvGraphVtx* vtx CV_DEFAULT(NULL),\n                           CvGraphVtx** inserted_vtx CV_DEFAULT(NULL) );\n\n\n/** Removes vertex from the graph together with all incident edges */\nCVAPI(int)  cvGraphRemoveVtx( CvGraph* graph, int index );\nCVAPI(int)  cvGraphRemoveVtxByPtr( CvGraph* graph, CvGraphVtx* vtx );\n\n\n/** Link two vertices specifed by indices or pointers if they\n   are not connected or return pointer to already existing edge\n   connecting the vertices.\n   Functions return 1 if a new edge was created, 0 otherwise */\nCVAPI(int)  cvGraphAddEdge( CvGraph* graph,\n                            int start_idx, int end_idx,\n                            const CvGraphEdge* edge CV_DEFAULT(NULL),\n                            CvGraphEdge** inserted_edge CV_DEFAULT(NULL) );\n\nCVAPI(int)  cvGraphAddEdgeByPtr( CvGraph* graph,\n                               CvGraphVtx* start_vtx, CvGraphVtx* end_vtx,\n                               const CvGraphEdge* edge CV_DEFAULT(NULL),\n                               CvGraphEdge** inserted_edge CV_DEFAULT(NULL) );\n\n/** Remove edge connecting two vertices */\nCVAPI(void)  cvGraphRemoveEdge( CvGraph* graph, int start_idx, int end_idx );\nCVAPI(void)  cvGraphRemoveEdgeByPtr( CvGraph* graph, CvGraphVtx* start_vtx,\n                                     CvGraphVtx* end_vtx );\n\n/** Find edge connecting two vertices */\nCVAPI(CvGraphEdge*)  cvFindGraphEdge( const CvGraph* graph, int start_idx, int end_idx );\nCVAPI(CvGraphEdge*)  cvFindGraphEdgeByPtr( const CvGraph* graph,\n                                           const CvGraphVtx* start_vtx,\n                                           const CvGraphVtx* end_vtx );\n#define cvGraphFindEdge cvFindGraphEdge\n#define cvGraphFindEdgeByPtr cvFindGraphEdgeByPtr\n\n/** Remove all vertices and edges from the graph */\nCVAPI(void)  cvClearGraph( CvGraph* graph );\n\n\n/** Count number of edges incident to the vertex */\nCVAPI(int)  cvGraphVtxDegree( const CvGraph* graph, int vtx_idx );\nCVAPI(int)  cvGraphVtxDegreeByPtr( const CvGraph* graph, const CvGraphVtx* vtx );\n\n\n/** Retrieves graph vertex by given index */\n#define cvGetGraphVtx( graph, idx ) (CvGraphVtx*)cvGetSetElem((CvSet*)(graph), (idx))\n\n/** Retrieves index of a graph vertex given its pointer */\n#define cvGraphVtxIdx( graph, vtx ) ((vtx)->flags & CV_SET_ELEM_IDX_MASK)\n\n/** Retrieves index of a graph edge given its pointer */\n#define cvGraphEdgeIdx( graph, edge ) ((edge)->flags & CV_SET_ELEM_IDX_MASK)\n\n#define cvGraphGetVtxCount( graph ) ((graph)->active_count)\n#define cvGraphGetEdgeCount( graph ) ((graph)->edges->active_count)\n\n#define  CV_GRAPH_VERTEX        1\n#define  CV_GRAPH_TREE_EDGE     2\n#define  CV_GRAPH_BACK_EDGE     4\n#define  CV_GRAPH_FORWARD_EDGE  8\n#define  CV_GRAPH_CROSS_EDGE    16\n#define  CV_GRAPH_ANY_EDGE      30\n#define  CV_GRAPH_NEW_TREE      32\n#define  CV_GRAPH_BACKTRACKING  64\n#define  CV_GRAPH_OVER          -1\n\n#define  CV_GRAPH_ALL_ITEMS    -1\n\n/** flags for graph vertices and edges */\n#define  CV_GRAPH_ITEM_VISITED_FLAG  (1 << 30)\n#define  CV_IS_GRAPH_VERTEX_VISITED(vtx) \\\n    (((CvGraphVtx*)(vtx))->flags & CV_GRAPH_ITEM_VISITED_FLAG)\n#define  CV_IS_GRAPH_EDGE_VISITED(edge) \\\n    (((CvGraphEdge*)(edge))->flags & CV_GRAPH_ITEM_VISITED_FLAG)\n#define  CV_GRAPH_SEARCH_TREE_NODE_FLAG   (1 << 29)\n#define  CV_GRAPH_FORWARD_EDGE_FLAG       (1 << 28)\n\ntypedef struct CvGraphScanner\n{\n    CvGraphVtx* vtx;       /* current graph vertex (or current edge origin) */\n    CvGraphVtx* dst;       /* current graph edge destination vertex */\n    CvGraphEdge* edge;     /* current edge */\n\n    CvGraph* graph;        /* the graph */\n    CvSeq*   stack;        /* the graph vertex stack */\n    int      index;        /* the lower bound of certainly visited vertices */\n    int      mask;         /* event mask */\n}\nCvGraphScanner;\n\n/** Creates new graph scanner. */\nCVAPI(CvGraphScanner*)  cvCreateGraphScanner( CvGraph* graph,\n                                             CvGraphVtx* vtx CV_DEFAULT(NULL),\n                                             int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS));\n\n/** Releases graph scanner. */\nCVAPI(void) cvReleaseGraphScanner( CvGraphScanner** scanner );\n\n/** Get next graph element */\nCVAPI(int)  cvNextGraphItem( CvGraphScanner* scanner );\n\n/** Creates a copy of graph */\nCVAPI(CvGraph*) cvCloneGraph( const CvGraph* graph, CvMemStorage* storage );\n\n\n/** Does look-up transformation. Elements of the source array\n   (that should be 8uC1 or 8sC1) are used as indexes in lutarr 256-element table */\nCVAPI(void) cvLUT( const CvArr* src, CvArr* dst, const CvArr* lut );\n\n\n/******************* Iteration through the sequence tree *****************/\ntypedef struct CvTreeNodeIterator\n{\n    const void* node;\n    int level;\n    int max_level;\n}\nCvTreeNodeIterator;\n\nCVAPI(void) cvInitTreeNodeIterator( CvTreeNodeIterator* tree_iterator,\n                                   const void* first, int max_level );\nCVAPI(void*) cvNextTreeNode( CvTreeNodeIterator* tree_iterator );\nCVAPI(void*) cvPrevTreeNode( CvTreeNodeIterator* tree_iterator );\n\n/** Inserts sequence into tree with specified \"parent\" sequence.\n   If parent is equal to frame (e.g. the most external contour),\n   then added contour will have null pointer to parent. */\nCVAPI(void) cvInsertNodeIntoTree( void* node, void* parent, void* frame );\n\n/** Removes contour from tree (together with the contour children). */\nCVAPI(void) cvRemoveNodeFromTree( void* node, void* frame );\n\n/** Gathers pointers to all the sequences,\n   accessible from the `first`, to the single sequence */\nCVAPI(CvSeq*) cvTreeToNodeSeq( const void* first, int header_size,\n                              CvMemStorage* storage );\n\n/** The function implements the K-means algorithm for clustering an array of sample\n   vectors in a specified number of classes */\n#define CV_KMEANS_USE_INITIAL_LABELS    1\nCVAPI(int) cvKMeans2( const CvArr* samples, int cluster_count, CvArr* labels,\n                      CvTermCriteria termcrit, int attempts CV_DEFAULT(1),\n                      CvRNG* rng CV_DEFAULT(0), int flags CV_DEFAULT(0),\n                      CvArr* _centers CV_DEFAULT(0), double* compactness CV_DEFAULT(0) );\n\n/****************************************************************************************\\\n*                                    System functions                                    *\n\\****************************************************************************************/\n\n/** Loads optimized functions from IPP, MKL etc. or switches back to pure C code */\nCVAPI(int)  cvUseOptimized( int on_off );\n\ntypedef IplImage* (CV_STDCALL* Cv_iplCreateImageHeader)\n                            (int,int,int,char*,char*,int,int,int,int,int,\n                            IplROI*,IplImage*,void*,IplTileInfo*);\ntypedef void (CV_STDCALL* Cv_iplAllocateImageData)(IplImage*,int,int);\ntypedef void (CV_STDCALL* Cv_iplDeallocate)(IplImage*,int);\ntypedef IplROI* (CV_STDCALL* Cv_iplCreateROI)(int,int,int,int,int);\ntypedef IplImage* (CV_STDCALL* Cv_iplCloneImage)(const IplImage*);\n\n/** @brief Makes OpenCV use IPL functions for allocating IplImage and IplROI structures.\n\nNormally, the function is not called directly. Instead, a simple macro\nCV_TURN_ON_IPL_COMPATIBILITY() is used that calls cvSetIPLAllocators and passes there pointers\nto IPL allocation functions. :\n@code\n    ...\n    CV_TURN_ON_IPL_COMPATIBILITY()\n    ...\n@endcode\n@param create_header pointer to a function, creating IPL image header.\n@param allocate_data pointer to a function, allocating IPL image data.\n@param deallocate pointer to a function, deallocating IPL image.\n@param create_roi pointer to a function, creating IPL image ROI (i.e. Region of Interest).\n@param clone_image pointer to a function, cloning an IPL image.\n */\nCVAPI(void) cvSetIPLAllocators( Cv_iplCreateImageHeader create_header,\n                               Cv_iplAllocateImageData allocate_data,\n                               Cv_iplDeallocate deallocate,\n                               Cv_iplCreateROI create_roi,\n                               Cv_iplCloneImage clone_image );\n\n#define CV_TURN_ON_IPL_COMPATIBILITY()                                  \\\n    cvSetIPLAllocators( iplCreateImageHeader, iplAllocateImage,         \\\n                        iplDeallocate, iplCreateROI, iplCloneImage )\n\n/****************************************************************************************\\\n*                                    Data Persistence                                    *\n\\****************************************************************************************/\n\n/********************************** High-level functions ********************************/\n\n/** @brief Opens file storage for reading or writing data.\n\nThe function opens file storage for reading or writing data. In the latter case, a new file is\ncreated or an existing file is rewritten. The type of the read or written file is determined by the\nfilename extension: .xml for XML and .yml or .yaml for YAML. The function returns a pointer to the\nCvFileStorage structure. If the file cannot be opened then the function returns NULL.\n@param filename Name of the file associated with the storage\n@param memstorage Memory storage used for temporary data and for\n:   storing dynamic structures, such as CvSeq or CvGraph . If it is NULL, a temporary memory\n    storage is created and used.\n@param flags Can be one of the following:\n> -   **CV_STORAGE_READ** the storage is open for reading\n> -   **CV_STORAGE_WRITE** the storage is open for writing\n@param encoding\n */\nCVAPI(CvFileStorage*)  cvOpenFileStorage( const char* filename, CvMemStorage* memstorage,\n                                          int flags, const char* encoding CV_DEFAULT(NULL) );\n\n/** @brief Releases file storage.\n\nThe function closes the file associated with the storage and releases all the temporary structures.\nIt must be called after all I/O operations with the storage are finished.\n@param fs Double pointer to the released file storage\n */\nCVAPI(void) cvReleaseFileStorage( CvFileStorage** fs );\n\n/** returns attribute value or 0 (NULL) if there is no such attribute */\nCVAPI(const char*) cvAttrValue( const CvAttrList* attr, const char* attr_name );\n\n/** @brief Starts writing a new structure.\n\nThe function starts writing a compound structure (collection) that can be a sequence or a map. After\nall the structure fields, which can be scalars or structures, are written, cvEndWriteStruct should\nbe called. The function can be used to group some objects or to implement the write function for a\nsome user object (see CvTypeInfo).\n@param fs File storage\n@param name Name of the written structure. The structure can be accessed by this name when the\nstorage is read.\n@param struct_flags A combination one of the following values:\n-   **CV_NODE_SEQ** the written structure is a sequence (see discussion of CvFileStorage ),\n    that is, its elements do not have a name.\n-   **CV_NODE_MAP** the written structure is a map (see discussion of CvFileStorage ), that\n    is, all its elements have names.\nOne and only one of the two above flags must be specified\n-   **CV_NODE_FLOW** the optional flag that makes sense only for YAML streams. It means that\n     the structure is written as a flow (not as a block), which is more compact. It is\n     recommended to use this flag for structures or arrays whose elements are all scalars.\n@param type_name Optional parameter - the object type name. In\n    case of XML it is written as a type_id attribute of the structure opening tag. In the case of\n    YAML it is written after a colon following the structure name (see the example in\n    CvFileStorage description). Mainly it is used with user objects. When the storage is read, the\n    encoded type name is used to determine the object type (see CvTypeInfo and cvFindType ).\n@param attributes This parameter is not used in the current implementation\n */\nCVAPI(void) cvStartWriteStruct( CvFileStorage* fs, const char* name,\n                                int struct_flags, const char* type_name CV_DEFAULT(NULL),\n                                CvAttrList attributes CV_DEFAULT(cvAttrList()));\n\n/** @brief Finishes writing to a file node collection.\n@param fs File storage\n@sa cvStartWriteStruct.\n */\nCVAPI(void) cvEndWriteStruct( CvFileStorage* fs );\n\n/** @brief Writes an integer value.\n\nThe function writes a single integer value (with or without a name) to the file storage.\n@param fs File storage\n@param name Name of the written value. Should be NULL if and only if the parent structure is a\nsequence.\n@param value The written value\n */\nCVAPI(void) cvWriteInt( CvFileStorage* fs, const char* name, int value );\n\n/** @brief Writes a floating-point value.\n\nThe function writes a single floating-point value (with or without a name) to file storage. Special\nvalues are encoded as follows: NaN (Not A Number) as .NaN, infinity as +.Inf or -.Inf.\n\nThe following example shows how to use the low-level writing functions to store custom structures,\nsuch as termination criteria, without registering a new type. :\n@code\n    void write_termcriteria( CvFileStorage* fs, const char* struct_name,\n                             CvTermCriteria* termcrit )\n    {\n        cvStartWriteStruct( fs, struct_name, CV_NODE_MAP, NULL, cvAttrList(0,0));\n        cvWriteComment( fs, \"termination criteria\", 1 ); // just a description\n        if( termcrit->type & CV_TERMCRIT_ITER )\n            cvWriteInteger( fs, \"max_iterations\", termcrit->max_iter );\n        if( termcrit->type & CV_TERMCRIT_EPS )\n            cvWriteReal( fs, \"accuracy\", termcrit->epsilon );\n        cvEndWriteStruct( fs );\n    }\n@endcode\n@param fs File storage\n@param name Name of the written value. Should be NULL if and only if the parent structure is a\nsequence.\n@param value The written value\n*/\nCVAPI(void) cvWriteReal( CvFileStorage* fs, const char* name, double value );\n\n/** @brief Writes a text string.\n\nThe function writes a text string to file storage.\n@param fs File storage\n@param name Name of the written string . Should be NULL if and only if the parent structure is a\nsequence.\n@param str The written text string\n@param quote If non-zero, the written string is put in quotes, regardless of whether they are\nrequired. Otherwise, if the flag is zero, quotes are used only when they are required (e.g. when\nthe string starts with a digit or contains spaces).\n */\nCVAPI(void) cvWriteString( CvFileStorage* fs, const char* name,\n                           const char* str, int quote CV_DEFAULT(0) );\n\n/** @brief Writes a comment.\n\nThe function writes a comment into file storage. The comments are skipped when the storage is read.\n@param fs File storage\n@param comment The written comment, single-line or multi-line\n@param eol_comment If non-zero, the function tries to put the comment at the end of current line.\nIf the flag is zero, if the comment is multi-line, or if it does not fit at the end of the current\nline, the comment starts a new line.\n */\nCVAPI(void) cvWriteComment( CvFileStorage* fs, const char* comment,\n                            int eol_comment );\n\n/** @brief Writes an object to file storage.\n\nThe function writes an object to file storage. First, the appropriate type info is found using\ncvTypeOf. Then, the write method associated with the type info is called.\n\nAttributes are used to customize the writing procedure. The standard types support the following\nattributes (all the dt attributes have the same format as in cvWriteRawData):\n\n-# CvSeq\n    -   **header_dt** description of user fields of the sequence header that follow CvSeq, or\n        CvChain (if the sequence is a Freeman chain) or CvContour (if the sequence is a contour or\n        point sequence)\n    -   **dt** description of the sequence elements.\n    -   **recursive** if the attribute is present and is not equal to \"0\" or \"false\", the whole\n        tree of sequences (contours) is stored.\n-# CvGraph\n    -   **header_dt** description of user fields of the graph header that follows CvGraph;\n    -   **vertex_dt** description of user fields of graph vertices\n    -   **edge_dt** description of user fields of graph edges (note that the edge weight is\n        always written, so there is no need to specify it explicitly)\n\nBelow is the code that creates the YAML file shown in the CvFileStorage description:\n@code\n    #include \"cxcore.h\"\n\n    int main( int argc, char** argv )\n    {\n        CvMat* mat = cvCreateMat( 3, 3, CV_32F );\n        CvFileStorage* fs = cvOpenFileStorage( \"example.yml\", 0, CV_STORAGE_WRITE );\n\n        cvSetIdentity( mat );\n        cvWrite( fs, \"A\", mat, cvAttrList(0,0) );\n\n        cvReleaseFileStorage( &fs );\n        cvReleaseMat( &mat );\n        return 0;\n    }\n@endcode\n@param fs File storage\n@param name Name of the written object. Should be NULL if and only if the parent structure is a\nsequence.\n@param ptr Pointer to the object\n@param attributes The attributes of the object. They are specific for each particular type (see\nthe discussion below).\n */\nCVAPI(void) cvWrite( CvFileStorage* fs, const char* name, const void* ptr,\n                         CvAttrList attributes CV_DEFAULT(cvAttrList()));\n\n/** @brief Starts the next stream.\n\nThe function finishes the currently written stream and starts the next stream. In the case of XML\nthe file with multiple streams looks like this:\n@code{.xml}\n    <opencv_storage>\n    <!-- stream #1 data -->\n    </opencv_storage>\n    <opencv_storage>\n    <!-- stream #2 data -->\n    </opencv_storage>\n    ...\n@endcode\nThe YAML file will look like this:\n@code{.yaml}\n    %YAML:1.0\n    # stream #1 data\n    ...\n    ---\n    # stream #2 data\n@endcode\nThis is useful for concatenating files or for resuming the writing process.\n@param fs File storage\n */\nCVAPI(void) cvStartNextStream( CvFileStorage* fs );\n\n/** @brief Writes multiple numbers.\n\nThe function writes an array, whose elements consist of single or multiple numbers. The function\ncall can be replaced with a loop containing a few cvWriteInt and cvWriteReal calls, but a single\ncall is more efficient. Note that because none of the elements have a name, they should be written\nto a sequence rather than a map.\n@param fs File storage\n@param src Pointer to the written array\n@param len Number of the array elements to write\n@param dt Specification of each array element, see @ref format_spec \"format specification\"\n */\nCVAPI(void) cvWriteRawData( CvFileStorage* fs, const void* src,\n                                int len, const char* dt );\n\n/** @brief Returns a unique pointer for a given name.\n\nThe function returns a unique pointer for each particular file node name. This pointer can be then\npassed to the cvGetFileNode function that is faster than cvGetFileNodeByName because it compares\ntext strings by comparing pointers rather than the strings' content.\n\nConsider the following example where an array of points is encoded as a sequence of 2-entry maps:\n@code\n    points:\n      - { x: 10, y: 10 }\n      - { x: 20, y: 20 }\n      - { x: 30, y: 30 }\n      # ...\n@endcode\nThen, it is possible to get hashed \"x\" and \"y\" pointers to speed up decoding of the points. :\n@code\n    #include \"cxcore.h\"\n\n    int main( int argc, char** argv )\n    {\n        CvFileStorage* fs = cvOpenFileStorage( \"points.yml\", 0, CV_STORAGE_READ );\n        CvStringHashNode* x_key = cvGetHashedNode( fs, \"x\", -1, 1 );\n        CvStringHashNode* y_key = cvGetHashedNode( fs, \"y\", -1, 1 );\n        CvFileNode* points = cvGetFileNodeByName( fs, 0, \"points\" );\n\n        if( CV_NODE_IS_SEQ(points->tag) )\n        {\n            CvSeq* seq = points->data.seq;\n            int i, total = seq->total;\n            CvSeqReader reader;\n            cvStartReadSeq( seq, &reader, 0 );\n            for( i = 0; i < total; i++ )\n            {\n                CvFileNode* pt = (CvFileNode*)reader.ptr;\n    #if 1 // faster variant\n                CvFileNode* xnode = cvGetFileNode( fs, pt, x_key, 0 );\n                CvFileNode* ynode = cvGetFileNode( fs, pt, y_key, 0 );\n                assert( xnode && CV_NODE_IS_INT(xnode->tag) &&\n                        ynode && CV_NODE_IS_INT(ynode->tag));\n                int x = xnode->data.i; // or x = cvReadInt( xnode, 0 );\n                int y = ynode->data.i; // or y = cvReadInt( ynode, 0 );\n    #elif 1 // slower variant; does not use x_key & y_key\n                CvFileNode* xnode = cvGetFileNodeByName( fs, pt, \"x\" );\n                CvFileNode* ynode = cvGetFileNodeByName( fs, pt, \"y\" );\n                assert( xnode && CV_NODE_IS_INT(xnode->tag) &&\n                        ynode && CV_NODE_IS_INT(ynode->tag));\n                int x = xnode->data.i; // or x = cvReadInt( xnode, 0 );\n                int y = ynode->data.i; // or y = cvReadInt( ynode, 0 );\n    #else // the slowest yet the easiest to use variant\n                int x = cvReadIntByName( fs, pt, \"x\", 0 );\n                int y = cvReadIntByName( fs, pt, \"y\", 0 );\n    #endif\n                CV_NEXT_SEQ_ELEM( seq->elem_size, reader );\n                printf(\"\n            }\n        }\n        cvReleaseFileStorage( &fs );\n        return 0;\n    }\n@endcode\nPlease note that whatever method of accessing a map you are using, it is still much slower than\nusing plain sequences; for example, in the above example, it is more efficient to encode the points\nas pairs of integers in a single numeric sequence.\n@param fs File storage\n@param name Literal node name\n@param len Length of the name (if it is known apriori), or -1 if it needs to be calculated\n@param create_missing Flag that specifies, whether an absent key should be added into the hash table\n*/\nCVAPI(CvStringHashNode*) cvGetHashedKey( CvFileStorage* fs, const char* name,\n                                        int len CV_DEFAULT(-1),\n                                        int create_missing CV_DEFAULT(0));\n\n/** @brief Retrieves one of the top-level nodes of the file storage.\n\nThe function returns one of the top-level file nodes. The top-level nodes do not have a name, they\ncorrespond to the streams that are stored one after another in the file storage. If the index is out\nof range, the function returns a NULL pointer, so all the top-level nodes can be iterated by\nsubsequent calls to the function with stream_index=0,1,..., until the NULL pointer is returned.\nThis function can be used as a base for recursive traversal of the file storage.\n@param fs File storage\n@param stream_index Zero-based index of the stream. See cvStartNextStream . In most cases,\nthere is only one stream in the file; however, there can be several.\n */\nCVAPI(CvFileNode*) cvGetRootFileNode( const CvFileStorage* fs,\n                                     int stream_index CV_DEFAULT(0) );\n\n/** @brief Finds a node in a map or file storage.\n\nThe function finds a file node. It is a faster version of cvGetFileNodeByName (see\ncvGetHashedKey discussion). Also, the function can insert a new node, if it is not in the map yet.\n@param fs File storage\n@param map The parent map. If it is NULL, the function searches a top-level node. If both map and\nkey are NULLs, the function returns the root file node - a map that contains top-level nodes.\n@param key Unique pointer to the node name, retrieved with cvGetHashedKey\n@param create_missing Flag that specifies whether an absent node should be added to the map\n */\nCVAPI(CvFileNode*) cvGetFileNode( CvFileStorage* fs, CvFileNode* map,\n                                 const CvStringHashNode* key,\n                                 int create_missing CV_DEFAULT(0) );\n\n/** @brief Finds a node in a map or file storage.\n\nThe function finds a file node by name. The node is searched either in map or, if the pointer is\nNULL, among the top-level file storage nodes. Using this function for maps and cvGetSeqElem (or\nsequence reader) for sequences, it is possible to navigate through the file storage. To speed up\nmultiple queries for a certain key (e.g., in the case of an array of structures) one may use a\ncombination of cvGetHashedKey and cvGetFileNode.\n@param fs File storage\n@param map The parent map. If it is NULL, the function searches in all the top-level nodes\n(streams), starting with the first one.\n@param name The file node name\n */\nCVAPI(CvFileNode*) cvGetFileNodeByName( const CvFileStorage* fs,\n                                       const CvFileNode* map,\n                                       const char* name );\n\n/** @brief Retrieves an integer value from a file node.\n\nThe function returns an integer that is represented by the file node. If the file node is NULL, the\ndefault_value is returned (thus, it is convenient to call the function right after cvGetFileNode\nwithout checking for a NULL pointer). If the file node has type CV_NODE_INT, then node-\\>data.i is\nreturned. If the file node has type CV_NODE_REAL, then node-\\>data.f is converted to an integer\nand returned. Otherwise the error is reported.\n@param node File node\n@param default_value The value that is returned if node is NULL\n */\nCV_INLINE int cvReadInt( const CvFileNode* node, int default_value CV_DEFAULT(0) )\n{\n    return !node ? default_value :\n        CV_NODE_IS_INT(node->tag) ? node->data.i :\n        CV_NODE_IS_REAL(node->tag) ? cvRound(node->data.f) : 0x7fffffff;\n}\n\n/** @brief Finds a file node and returns its value.\n\nThe function is a simple superposition of cvGetFileNodeByName and cvReadInt.\n@param fs File storage\n@param map The parent map. If it is NULL, the function searches a top-level node.\n@param name The node name\n@param default_value The value that is returned if the file node is not found\n */\nCV_INLINE int cvReadIntByName( const CvFileStorage* fs, const CvFileNode* map,\n                         const char* name, int default_value CV_DEFAULT(0) )\n{\n    return cvReadInt( cvGetFileNodeByName( fs, map, name ), default_value );\n}\n\n/** @brief Retrieves a floating-point value from a file node.\n\nThe function returns a floating-point value that is represented by the file node. If the file node\nis NULL, the default_value is returned (thus, it is convenient to call the function right after\ncvGetFileNode without checking for a NULL pointer). If the file node has type CV_NODE_REAL ,\nthen node-\\>data.f is returned. If the file node has type CV_NODE_INT , then node-:math:\\>data.f\nis converted to floating-point and returned. Otherwise the result is not determined.\n@param node File node\n@param default_value The value that is returned if node is NULL\n */\nCV_INLINE double cvReadReal( const CvFileNode* node, double default_value CV_DEFAULT(0.) )\n{\n    return !node ? default_value :\n        CV_NODE_IS_INT(node->tag) ? (double)node->data.i :\n        CV_NODE_IS_REAL(node->tag) ? node->data.f : 1e300;\n}\n\n/** @brief Finds a file node and returns its value.\n\nThe function is a simple superposition of cvGetFileNodeByName and cvReadReal .\n@param fs File storage\n@param map The parent map. If it is NULL, the function searches a top-level node.\n@param name The node name\n@param default_value The value that is returned if the file node is not found\n */\nCV_INLINE double cvReadRealByName( const CvFileStorage* fs, const CvFileNode* map,\n                        const char* name, double default_value CV_DEFAULT(0.) )\n{\n    return cvReadReal( cvGetFileNodeByName( fs, map, name ), default_value );\n}\n\n/** @brief Retrieves a text string from a file node.\n\nThe function returns a text string that is represented by the file node. If the file node is NULL,\nthe default_value is returned (thus, it is convenient to call the function right after\ncvGetFileNode without checking for a NULL pointer). If the file node has type CV_NODE_STR , then\nnode-:math:\\>data.str.ptr is returned. Otherwise the result is not determined.\n@param node File node\n@param default_value The value that is returned if node is NULL\n */\nCV_INLINE const char* cvReadString( const CvFileNode* node,\n                        const char* default_value CV_DEFAULT(NULL) )\n{\n    return !node ? default_value : CV_NODE_IS_STRING(node->tag) ? node->data.str.ptr : 0;\n}\n\n/** @brief Finds a file node by its name and returns its value.\n\nThe function is a simple superposition of cvGetFileNodeByName and cvReadString .\n@param fs File storage\n@param map The parent map. If it is NULL, the function searches a top-level node.\n@param name The node name\n@param default_value The value that is returned if the file node is not found\n */\nCV_INLINE const char* cvReadStringByName( const CvFileStorage* fs, const CvFileNode* map,\n                        const char* name, const char* default_value CV_DEFAULT(NULL) )\n{\n    return cvReadString( cvGetFileNodeByName( fs, map, name ), default_value );\n}\n\n\n/** @brief Decodes an object and returns a pointer to it.\n\nThe function decodes a user object (creates an object in a native representation from the file\nstorage subtree) and returns it. The object to be decoded must be an instance of a registered type\nthat supports the read method (see CvTypeInfo). The type of the object is determined by the type\nname that is encoded in the file. If the object is a dynamic structure, it is created either in\nmemory storage and passed to cvOpenFileStorage or, if a NULL pointer was passed, in temporary\nmemory storage, which is released when cvReleaseFileStorage is called. Otherwise, if the object is\nnot a dynamic structure, it is created in a heap and should be released with a specialized function\nor by using the generic cvRelease.\n@param fs File storage\n@param node The root object node\n@param attributes Unused parameter\n */\nCVAPI(void*) cvRead( CvFileStorage* fs, CvFileNode* node,\n                        CvAttrList* attributes CV_DEFAULT(NULL));\n\n/** @brief Finds an object by name and decodes it.\n\nThe function is a simple superposition of cvGetFileNodeByName and cvRead.\n@param fs File storage\n@param map The parent map. If it is NULL, the function searches a top-level node.\n@param name The node name\n@param attributes Unused parameter\n */\nCV_INLINE void* cvReadByName( CvFileStorage* fs, const CvFileNode* map,\n                              const char* name, CvAttrList* attributes CV_DEFAULT(NULL) )\n{\n    return cvRead( fs, cvGetFileNodeByName( fs, map, name ), attributes );\n}\n\n\n/** @brief Initializes the file node sequence reader.\n\nThe function initializes the sequence reader to read data from a file node. The initialized reader\ncan be then passed to cvReadRawDataSlice.\n@param fs File storage\n@param src The file node (a sequence) to read numbers from\n@param reader Pointer to the sequence reader\n */\nCVAPI(void) cvStartReadRawData( const CvFileStorage* fs, const CvFileNode* src,\n                               CvSeqReader* reader );\n\n/** @brief Initializes file node sequence reader.\n\nThe function reads one or more elements from the file node, representing a sequence, to a\nuser-specified array. The total number of read sequence elements is a product of total and the\nnumber of components in each array element. For example, if dt=2if, the function will read total\\*3\nsequence elements. As with any sequence, some parts of the file node sequence can be skipped or read\nrepeatedly by repositioning the reader using cvSetSeqReaderPos.\n@param fs File storage\n@param reader The sequence reader. Initialize it with cvStartReadRawData .\n@param count The number of elements to read\n@param dst Pointer to the destination array\n@param dt Specification of each array element. It has the same format as in cvWriteRawData .\n */\nCVAPI(void) cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader,\n                               int count, void* dst, const char* dt );\n\n/** @brief Reads multiple numbers.\n\nThe function reads elements from a file node that represents a sequence of scalars.\n@param fs File storage\n@param src The file node (a sequence) to read numbers from\n@param dst Pointer to the destination array\n@param dt Specification of each array element. It has the same format as in cvWriteRawData .\n */\nCVAPI(void) cvReadRawData( const CvFileStorage* fs, const CvFileNode* src,\n                          void* dst, const char* dt );\n\n/** @brief Writes a file node to another file storage.\n\nThe function writes a copy of a file node to file storage. Possible applications of the function are\nmerging several file storages into one and conversion between XML and YAML formats.\n@param fs Destination file storage\n@param new_node_name New name of the file node in the destination file storage. To keep the\nexisting name, use cvcvGetFileNodeName\n@param node The written node\n@param embed If the written node is a collection and this parameter is not zero, no extra level of\nhierarchy is created. Instead, all the elements of node are written into the currently written\nstructure. Of course, map elements can only be embedded into another map, and sequence elements\ncan only be embedded into another sequence.\n */\nCVAPI(void) cvWriteFileNode( CvFileStorage* fs, const char* new_node_name,\n                            const CvFileNode* node, int embed );\n\n/** @brief Returns the name of a file node.\n\nThe function returns the name of a file node or NULL, if the file node does not have a name or if\nnode is NULL.\n@param node File node\n */\nCVAPI(const char*) cvGetFileNodeName( const CvFileNode* node );\n\n/*********************************** Adding own types ***********************************/\n\n/** @brief Registers a new type.\n\nThe function registers a new type, which is described by info . The function creates a copy of the\nstructure, so the user should delete it after calling the function.\n@param info Type info structure\n */\nCVAPI(void) cvRegisterType( const CvTypeInfo* info );\n\n/** @brief Unregisters the type.\n\nThe function unregisters a type with a specified name. If the name is unknown, it is possible to\nlocate the type info by an instance of the type using cvTypeOf or by iterating the type list,\nstarting from cvFirstType, and then calling cvUnregisterType(info-\\>typeName).\n@param type_name Name of an unregistered type\n */\nCVAPI(void) cvUnregisterType( const char* type_name );\n\n/** @brief Returns the beginning of a type list.\n\nThe function returns the first type in the list of registered types. Navigation through the list can\nbe done via the prev and next fields of the CvTypeInfo structure.\n */\nCVAPI(CvTypeInfo*) cvFirstType(void);\n\n/** @brief Finds a type by its name.\n\nThe function finds a registered type by its name. It returns NULL if there is no type with the\nspecified name.\n@param type_name Type name\n */\nCVAPI(CvTypeInfo*) cvFindType( const char* type_name );\n\n/** @brief Returns the type of an object.\n\nThe function finds the type of a given object. It iterates through the list of registered types and\ncalls the is_instance function/method for every type info structure with that object until one of\nthem returns non-zero or until the whole list has been traversed. In the latter case, the function\nreturns NULL.\n@param struct_ptr The object pointer\n */\nCVAPI(CvTypeInfo*) cvTypeOf( const void* struct_ptr );\n\n/** @brief Releases an object.\n\nThe function finds the type of a given object and calls release with the double pointer.\n@param struct_ptr Double pointer to the object\n */\nCVAPI(void) cvRelease( void** struct_ptr );\n\n/** @brief Makes a clone of an object.\n\nThe function finds the type of a given object and calls clone with the passed object. Of course, if\nyou know the object type, for example, struct_ptr is CvMat\\*, it is faster to call the specific\nfunction, like cvCloneMat.\n@param struct_ptr The object to clone\n */\nCVAPI(void*) cvClone( const void* struct_ptr );\n\n/** @brief Saves an object to a file.\n\nThe function saves an object to a file. It provides a simple interface to cvWrite .\n@param filename File name\n@param struct_ptr Object to save\n@param name Optional object name. If it is NULL, the name will be formed from filename .\n@param comment Optional comment to put in the beginning of the file\n@param attributes Optional attributes passed to cvWrite\n */\nCVAPI(void) cvSave( const char* filename, const void* struct_ptr,\n                    const char* name CV_DEFAULT(NULL),\n                    const char* comment CV_DEFAULT(NULL),\n                    CvAttrList attributes CV_DEFAULT(cvAttrList()));\n\n/** @brief Loads an object from a file.\n\nThe function loads an object from a file. It basically reads the specified file, find the first\ntop-level node and calls cvRead for that node. If the file node does not have type information or\nthe type information can not be found by the type name, the function returns NULL. After the object\nis loaded, the file storage is closed and all the temporary buffers are deleted. Thus, to load a\ndynamic structure, such as a sequence, contour, or graph, one should pass a valid memory storage\ndestination to the function.\n@param filename File name\n@param memstorage Memory storage for dynamic structures, such as CvSeq or CvGraph . It is not used\nfor matrices or images.\n@param name Optional object name. If it is NULL, the first top-level object in the storage will be\nloaded.\n@param real_name Optional output parameter that will contain the name of the loaded object\n(useful if name=NULL )\n */\nCVAPI(void*) cvLoad( const char* filename,\n                     CvMemStorage* memstorage CV_DEFAULT(NULL),\n                     const char* name CV_DEFAULT(NULL),\n                     const char** real_name CV_DEFAULT(NULL) );\n\n/*********************************** Measuring Execution Time ***************************/\n\n/** helper functions for RNG initialization and accurate time measurement:\n   uses internal clock counter on x86 */\nCVAPI(int64)  cvGetTickCount( void );\nCVAPI(double) cvGetTickFrequency( void );\n\n/*********************************** CPU capabilities ***********************************/\n\nCVAPI(int) cvCheckHardwareSupport(int feature);\n\n/*********************************** Multi-Threading ************************************/\n\n/** retrieve/set the number of threads used in OpenMP implementations */\nCVAPI(int)  cvGetNumThreads( void );\nCVAPI(void) cvSetNumThreads( int threads CV_DEFAULT(0) );\n/** get index of the thread being executed */\nCVAPI(int)  cvGetThreadNum( void );\n\n\n/********************************** Error Handling **************************************/\n\n/** Get current OpenCV error status */\nCVAPI(int) cvGetErrStatus( void );\n\n/** Sets error status silently */\nCVAPI(void) cvSetErrStatus( int status );\n\n#define CV_ErrModeLeaf     0   /* Print error and exit program */\n#define CV_ErrModeParent   1   /* Print error and continue */\n#define CV_ErrModeSilent   2   /* Don't print and continue */\n\n/** Retrives current error processing mode */\nCVAPI(int)  cvGetErrMode( void );\n\n/** Sets error processing mode, returns previously used mode */\nCVAPI(int) cvSetErrMode( int mode );\n\n/** Sets error status and performs some additonal actions (displaying message box,\n writing message to stderr, terminating application etc.)\n depending on the current error mode */\nCVAPI(void) cvError( int status, const char* func_name,\n                    const char* err_msg, const char* file_name, int line );\n\n/** Retrieves textual description of the error given its code */\nCVAPI(const char*) cvErrorStr( int status );\n\n/** Retrieves detailed information about the last error occured */\nCVAPI(int) cvGetErrInfo( const char** errcode_desc, const char** description,\n                        const char** filename, int* line );\n\n/** Maps IPP error codes to the counterparts from OpenCV */\nCVAPI(int) cvErrorFromIppStatus( int ipp_status );\n\ntypedef int (CV_CDECL *CvErrorCallback)( int status, const char* func_name,\n                                        const char* err_msg, const char* file_name, int line, void* userdata );\n\n/** Assigns a new error-handling function */\nCVAPI(CvErrorCallback) cvRedirectError( CvErrorCallback error_handler,\n                                       void* userdata CV_DEFAULT(NULL),\n                                       void** prev_userdata CV_DEFAULT(NULL) );\n\n/** Output nothing */\nCVAPI(int) cvNulDevReport( int status, const char* func_name, const char* err_msg,\n                          const char* file_name, int line, void* userdata );\n\n/** Output to console(fprintf(stderr,...)) */\nCVAPI(int) cvStdErrReport( int status, const char* func_name, const char* err_msg,\n                          const char* file_name, int line, void* userdata );\n\n/** Output to MessageBox(WIN32) */\nCVAPI(int) cvGuiBoxReport( int status, const char* func_name, const char* err_msg,\n                          const char* file_name, int line, void* userdata );\n\n#define OPENCV_ERROR(status,func,context)                           \\\ncvError((status),(func),(context),__FILE__,__LINE__)\n\n#define OPENCV_ASSERT(expr,func,context)                            \\\n{if (! (expr))                                      \\\n{OPENCV_ERROR(CV_StsInternal,(func),(context));}}\n\n#define OPENCV_CALL( Func )                                         \\\n{                                                                   \\\nFunc;                                                           \\\n}\n\n\n/** CV_FUNCNAME macro defines icvFuncName constant which is used by CV_ERROR macro */\n#ifdef CV_NO_FUNC_NAMES\n#define CV_FUNCNAME( Name )\n#define cvFuncName \"\"\n#else\n#define CV_FUNCNAME( Name )  \\\nstatic char cvFuncName[] = Name\n#endif\n\n\n/**\n CV_ERROR macro unconditionally raises error with passed code and message.\n After raising error, control will be transferred to the exit label.\n */\n#define CV_ERROR( Code, Msg )                                       \\\n{                                                                   \\\n    cvError( (Code), cvFuncName, Msg, __FILE__, __LINE__ );        \\\n    __CV_EXIT__;                                                   \\\n}\n\n/**\n CV_CHECK macro checks error status after CV (or IPL)\n function call. If error detected, control will be transferred to the exit\n label.\n */\n#define CV_CHECK()                                                  \\\n{                                                                   \\\n    if( cvGetErrStatus() < 0 )                                      \\\n        CV_ERROR( CV_StsBackTrace, \"Inner function failed.\" );      \\\n}\n\n\n/**\n CV_CALL macro calls CV (or IPL) function, checks error status and\n signals a error if the function failed. Useful in \"parent node\"\n error procesing mode\n */\n#define CV_CALL( Func )                                             \\\n{                                                                   \\\n    Func;                                                           \\\n    CV_CHECK();                                                     \\\n}\n\n\n/** Runtime assertion macro */\n#define CV_ASSERT( Condition )                                          \\\n{                                                                       \\\n    if( !(Condition) )                                                  \\\n        CV_ERROR( CV_StsInternal, \"Assertion: \" #Condition \" failed\" ); \\\n}\n\n#define __CV_BEGIN__       {\n#define __CV_END__         goto exit; exit: ; }\n#define __CV_EXIT__        goto exit\n\n/** @} core_c */\n\n#ifdef __cplusplus\n} // extern \"C\"\n#endif\n\n#ifdef __cplusplus\n\n//! @addtogroup core_c_glue\n//! @{\n\n//! class for automatic module/RTTI data registration/unregistration\nstruct CV_EXPORTS CvType\n{\n    CvType( const char* type_name,\n            CvIsInstanceFunc is_instance, CvReleaseFunc release=0,\n            CvReadFunc read=0, CvWriteFunc write=0, CvCloneFunc clone=0 );\n    ~CvType();\n    CvTypeInfo* info;\n\n    static CvTypeInfo* first;\n    static CvTypeInfo* last;\n};\n\n//! @}\n\n#include \"opencv2/core/utility.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup core_c_glue\n//! @{\n\n/////////////////////////////////////////// glue ///////////////////////////////////////////\n\n//! converts array (CvMat or IplImage) to cv::Mat\nCV_EXPORTS Mat cvarrToMat(const CvArr* arr, bool copyData=false,\n                          bool allowND=true, int coiMode=0,\n                          AutoBuffer<double>* buf=0);\n\nstatic inline Mat cvarrToMatND(const CvArr* arr, bool copyData=false, int coiMode=0)\n{\n    return cvarrToMat(arr, copyData, true, coiMode);\n}\n\n\n//! extracts Channel of Interest from CvMat or IplImage and makes cv::Mat out of it.\nCV_EXPORTS void extractImageCOI(const CvArr* arr, OutputArray coiimg, int coi=-1);\n//! inserts single-channel cv::Mat into a multi-channel CvMat or IplImage\nCV_EXPORTS void insertImageCOI(InputArray coiimg, CvArr* arr, int coi=-1);\n\n\n\n////// specialized implementations of DefaultDeleter::operator() for classic OpenCV types //////\n\ntemplate<> CV_EXPORTS void DefaultDeleter<CvMat>::operator ()(CvMat* obj) const;\ntemplate<> CV_EXPORTS void DefaultDeleter<IplImage>::operator ()(IplImage* obj) const;\ntemplate<> CV_EXPORTS void DefaultDeleter<CvMatND>::operator ()(CvMatND* obj) const;\ntemplate<> CV_EXPORTS void DefaultDeleter<CvSparseMat>::operator ()(CvSparseMat* obj) const;\ntemplate<> CV_EXPORTS void DefaultDeleter<CvMemStorage>::operator ()(CvMemStorage* obj) const;\n\n////////////// convenient wrappers for operating old-style dynamic structures //////////////\n\ntemplate<typename _Tp> class SeqIterator;\n\ntypedef Ptr<CvMemStorage> MemStorage;\n\n/*!\n Template Sequence Class derived from CvSeq\n\n The class provides more convenient access to sequence elements,\n STL-style operations and iterators.\n\n \\note The class is targeted for simple data types,\n    i.e. no constructors or destructors\n    are called for the sequence elements.\n*/\ntemplate<typename _Tp> class Seq\n{\npublic:\n    typedef SeqIterator<_Tp> iterator;\n    typedef SeqIterator<_Tp> const_iterator;\n\n    //! the default constructor\n    Seq();\n    //! the constructor for wrapping CvSeq structure. The real element type in CvSeq should match _Tp.\n    Seq(const CvSeq* seq);\n    //! creates the empty sequence that resides in the specified storage\n    Seq(MemStorage& storage, int headerSize = sizeof(CvSeq));\n    //! returns read-write reference to the specified element\n    _Tp& operator [](int idx);\n    //! returns read-only reference to the specified element\n    const _Tp& operator[](int idx) const;\n    //! returns iterator pointing to the beginning of the sequence\n    SeqIterator<_Tp> begin() const;\n    //! returns iterator pointing to the element following the last sequence element\n    SeqIterator<_Tp> end() const;\n    //! returns the number of elements in the sequence\n    size_t size() const;\n    //! returns the type of sequence elements (CV_8UC1 ... CV_64FC(CV_CN_MAX) ...)\n    int type() const;\n    //! returns the depth of sequence elements (CV_8U ... CV_64F)\n    int depth() const;\n    //! returns the number of channels in each sequence element\n    int channels() const;\n    //! returns the size of each sequence element\n    size_t elemSize() const;\n    //! returns index of the specified sequence element\n    size_t index(const _Tp& elem) const;\n    //! appends the specified element to the end of the sequence\n    void push_back(const _Tp& elem);\n    //! appends the specified element to the front of the sequence\n    void push_front(const _Tp& elem);\n    //! appends zero or more elements to the end of the sequence\n    void push_back(const _Tp* elems, size_t count);\n    //! appends zero or more elements to the front of the sequence\n    void push_front(const _Tp* elems, size_t count);\n    //! inserts the specified element to the specified position\n    void insert(int idx, const _Tp& elem);\n    //! inserts zero or more elements to the specified position\n    void insert(int idx, const _Tp* elems, size_t count);\n    //! removes element at the specified position\n    void remove(int idx);\n    //! removes the specified subsequence\n    void remove(const Range& r);\n\n    //! returns reference to the first sequence element\n    _Tp& front();\n    //! returns read-only reference to the first sequence element\n    const _Tp& front() const;\n    //! returns reference to the last sequence element\n    _Tp& back();\n    //! returns read-only reference to the last sequence element\n    const _Tp& back() const;\n    //! returns true iff the sequence contains no elements\n    bool empty() const;\n\n    //! removes all the elements from the sequence\n    void clear();\n    //! removes the first element from the sequence\n    void pop_front();\n    //! removes the last element from the sequence\n    void pop_back();\n    //! removes zero or more elements from the beginning of the sequence\n    void pop_front(_Tp* elems, size_t count);\n    //! removes zero or more elements from the end of the sequence\n    void pop_back(_Tp* elems, size_t count);\n\n    //! copies the whole sequence or the sequence slice to the specified vector\n    void copyTo(std::vector<_Tp>& vec, const Range& range=Range::all()) const;\n    //! returns the vector containing all the sequence elements\n    operator std::vector<_Tp>() const;\n\n    CvSeq* seq;\n};\n\n\n/*!\n STL-style Sequence Iterator inherited from the CvSeqReader structure\n*/\ntemplate<typename _Tp> class SeqIterator : public CvSeqReader\n{\npublic:\n    //! the default constructor\n    SeqIterator();\n    //! the constructor setting the iterator to the beginning or to the end of the sequence\n    SeqIterator(const Seq<_Tp>& seq, bool seekEnd=false);\n    //! positions the iterator within the sequence\n    void seek(size_t pos);\n    //! reports the current iterator position\n    size_t tell() const;\n    //! returns reference to the current sequence element\n    _Tp& operator *();\n    //! returns read-only reference to the current sequence element\n    const _Tp& operator *() const;\n    //! moves iterator to the next sequence element\n    SeqIterator& operator ++();\n    //! moves iterator to the next sequence element\n    SeqIterator operator ++(int) const;\n    //! moves iterator to the previous sequence element\n    SeqIterator& operator --();\n    //! moves iterator to the previous sequence element\n    SeqIterator operator --(int) const;\n\n    //! moves iterator forward by the specified offset (possibly negative)\n    SeqIterator& operator +=(int);\n    //! moves iterator backward by the specified offset (possibly negative)\n    SeqIterator& operator -=(int);\n\n    // this is index of the current element module seq->total*2\n    // (to distinguish between 0 and seq->total)\n    int index;\n};\n\n\n\n// bridge C++ => C Seq API\nCV_EXPORTS schar*  seqPush( CvSeq* seq, const void* element=0);\nCV_EXPORTS schar*  seqPushFront( CvSeq* seq, const void* element=0);\nCV_EXPORTS void  seqPop( CvSeq* seq, void* element=0);\nCV_EXPORTS void  seqPopFront( CvSeq* seq, void* element=0);\nCV_EXPORTS void  seqPopMulti( CvSeq* seq, void* elements,\n                              int count, int in_front=0 );\nCV_EXPORTS void  seqRemove( CvSeq* seq, int index );\nCV_EXPORTS void  clearSeq( CvSeq* seq );\nCV_EXPORTS schar*  getSeqElem( const CvSeq* seq, int index );\nCV_EXPORTS void  seqRemoveSlice( CvSeq* seq, CvSlice slice );\nCV_EXPORTS void  seqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr );\n\ntemplate<typename _Tp> inline Seq<_Tp>::Seq() : seq(0) {}\ntemplate<typename _Tp> inline Seq<_Tp>::Seq( const CvSeq* _seq ) : seq((CvSeq*)_seq)\n{\n    CV_Assert(!_seq || _seq->elem_size == sizeof(_Tp));\n}\n\ntemplate<typename _Tp> inline Seq<_Tp>::Seq( MemStorage& storage,\n                                             int headerSize )\n{\n    CV_Assert(headerSize >= (int)sizeof(CvSeq));\n    seq = cvCreateSeq(DataType<_Tp>::type, headerSize, sizeof(_Tp), storage);\n}\n\ntemplate<typename _Tp> inline _Tp& Seq<_Tp>::operator [](int idx)\n{ return *(_Tp*)getSeqElem(seq, idx); }\n\ntemplate<typename _Tp> inline const _Tp& Seq<_Tp>::operator [](int idx) const\n{ return *(_Tp*)getSeqElem(seq, idx); }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> Seq<_Tp>::begin() const\n{ return SeqIterator<_Tp>(*this); }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> Seq<_Tp>::end() const\n{ return SeqIterator<_Tp>(*this, true); }\n\ntemplate<typename _Tp> inline size_t Seq<_Tp>::size() const\n{ return seq ? seq->total : 0; }\n\ntemplate<typename _Tp> inline int Seq<_Tp>::type() const\n{ return seq ? CV_MAT_TYPE(seq->flags) : 0; }\n\ntemplate<typename _Tp> inline int Seq<_Tp>::depth() const\n{ return seq ? CV_MAT_DEPTH(seq->flags) : 0; }\n\ntemplate<typename _Tp> inline int Seq<_Tp>::channels() const\n{ return seq ? CV_MAT_CN(seq->flags) : 0; }\n\ntemplate<typename _Tp> inline size_t Seq<_Tp>::elemSize() const\n{ return seq ? seq->elem_size : 0; }\n\ntemplate<typename _Tp> inline size_t Seq<_Tp>::index(const _Tp& elem) const\n{ return cvSeqElemIdx(seq, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_back(const _Tp& elem)\n{ cvSeqPush(seq, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_front(const _Tp& elem)\n{ cvSeqPushFront(seq, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_back(const _Tp* elem, size_t count)\n{ cvSeqPushMulti(seq, elem, (int)count, 0); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_front(const _Tp* elem, size_t count)\n{ cvSeqPushMulti(seq, elem, (int)count, 1); }\n\ntemplate<typename _Tp> inline _Tp& Seq<_Tp>::back()\n{ return *(_Tp*)getSeqElem(seq, -1); }\n\ntemplate<typename _Tp> inline const _Tp& Seq<_Tp>::back() const\n{ return *(const _Tp*)getSeqElem(seq, -1); }\n\ntemplate<typename _Tp> inline _Tp& Seq<_Tp>::front()\n{ return *(_Tp*)getSeqElem(seq, 0); }\n\ntemplate<typename _Tp> inline const _Tp& Seq<_Tp>::front() const\n{ return *(const _Tp*)getSeqElem(seq, 0); }\n\ntemplate<typename _Tp> inline bool Seq<_Tp>::empty() const\n{ return !seq || seq->total == 0; }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::clear()\n{ if(seq) clearSeq(seq); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_back()\n{ seqPop(seq); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_front()\n{ seqPopFront(seq); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_back(_Tp* elem, size_t count)\n{ seqPopMulti(seq, elem, (int)count, 0); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_front(_Tp* elem, size_t count)\n{ seqPopMulti(seq, elem, (int)count, 1); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::insert(int idx, const _Tp& elem)\n{ seqInsert(seq, idx, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::insert(int idx, const _Tp* elems, size_t count)\n{\n    CvMat m = cvMat(1, count, DataType<_Tp>::type, elems);\n    seqInsertSlice(seq, idx, &m);\n}\n\ntemplate<typename _Tp> inline void Seq<_Tp>::remove(int idx)\n{ seqRemove(seq, idx); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::remove(const Range& r)\n{ seqRemoveSlice(seq, cvSlice(r.start, r.end)); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::copyTo(std::vector<_Tp>& vec, const Range& range) const\n{\n    size_t len = !seq ? 0 : range == Range::all() ? seq->total : range.end - range.start;\n    vec.resize(len);\n    if( seq && len )\n        cvCvtSeqToArray(seq, &vec[0], range);\n}\n\ntemplate<typename _Tp> inline Seq<_Tp>::operator std::vector<_Tp>() const\n{\n    std::vector<_Tp> vec;\n    copyTo(vec);\n    return vec;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>::SeqIterator()\n{ memset(this, 0, sizeof(*this)); }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>::SeqIterator(const Seq<_Tp>& _seq, bool seekEnd)\n{\n    cvStartReadSeq(_seq.seq, this);\n    index = seekEnd ? _seq.seq->total : 0;\n}\n\ntemplate<typename _Tp> inline void SeqIterator<_Tp>::seek(size_t pos)\n{\n    cvSetSeqReaderPos(this, (int)pos, false);\n    index = pos;\n}\n\ntemplate<typename _Tp> inline size_t SeqIterator<_Tp>::tell() const\n{ return index; }\n\ntemplate<typename _Tp> inline _Tp& SeqIterator<_Tp>::operator *()\n{ return *(_Tp*)ptr; }\n\ntemplate<typename _Tp> inline const _Tp& SeqIterator<_Tp>::operator *() const\n{ return *(const _Tp*)ptr; }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator ++()\n{\n    CV_NEXT_SEQ_ELEM(sizeof(_Tp), *this);\n    if( ++index >= seq->total*2 )\n        index = 0;\n    return *this;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> SeqIterator<_Tp>::operator ++(int) const\n{\n    SeqIterator<_Tp> it = *this;\n    ++*this;\n    return it;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator --()\n{\n    CV_PREV_SEQ_ELEM(sizeof(_Tp), *this);\n    if( --index < 0 )\n        index = seq->total*2-1;\n    return *this;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> SeqIterator<_Tp>::operator --(int) const\n{\n    SeqIterator<_Tp> it = *this;\n    --*this;\n    return it;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator +=(int delta)\n{\n    cvSetSeqReaderPos(this, delta, 1);\n    index += delta;\n    int n = seq->total*2;\n    if( index < 0 )\n        index += n;\n    if( index >= n )\n        index -= n;\n    return *this;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator -=(int delta)\n{\n    return (*this += -delta);\n}\n\ntemplate<typename _Tp> inline ptrdiff_t operator - (const SeqIterator<_Tp>& a,\n                                                    const SeqIterator<_Tp>& b)\n{\n    ptrdiff_t delta = a.index - b.index, n = a.seq->total;\n    if( delta > n || delta < -n )\n        delta += delta < 0 ? n : -n;\n    return delta;\n}\n\ntemplate<typename _Tp> inline bool operator == (const SeqIterator<_Tp>& a,\n                                                const SeqIterator<_Tp>& b)\n{\n    return a.seq == b.seq && a.index == b.index;\n}\n\ntemplate<typename _Tp> inline bool operator != (const SeqIterator<_Tp>& a,\n                                                const SeqIterator<_Tp>& b)\n{\n    return !(a == b);\n}\n\n//! @}\n\n} // cv\n\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/cuda.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_CUDA_HPP__\n#define __OPENCV_CORE_CUDA_HPP__\n\n#ifndef __cplusplus\n#  error cuda.hpp header must be compiled as C++\n#endif\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/core/cuda_types.hpp\"\n\n/**\n  @defgroup cuda CUDA-accelerated Computer Vision\n  @{\n    @defgroup cudacore Core part\n    @{\n      @defgroup cudacore_init Initalization and Information\n      @defgroup cudacore_struct Data Structures\n    @}\n  @}\n */\n\nnamespace cv { namespace cuda {\n\n//! @addtogroup cudacore_struct\n//! @{\n\n//===================================================================================\n// GpuMat\n//===================================================================================\n\n/** @brief Base storage class for GPU memory with reference counting.\n\nIts interface matches the Mat interface with the following limitations:\n\n-   no arbitrary dimensions support (only 2D)\n-   no functions that return references to their data (because references on GPU are not valid for\n    CPU)\n-   no expression templates technique support\n\nBeware that the latter limitation may lead to overloaded matrix operators that cause memory\nallocations. The GpuMat class is convertible to cuda::PtrStepSz and cuda::PtrStep so it can be\npassed directly to the kernel.\n\n@note In contrast with Mat, in most cases GpuMat::isContinuous() == false . This means that rows are\naligned to a size depending on the hardware. Single-row GpuMat is always a continuous matrix.\n\n@note You are not recommended to leave static or global GpuMat variables allocated, that is, to rely\non its destructor. The destruction order of such variables and CUDA context is undefined. GPU memory\nrelease function returns error if the CUDA context has been destroyed before.\n\n@sa Mat\n */\nclass CV_EXPORTS GpuMat\n{\npublic:\n    class CV_EXPORTS Allocator\n    {\n    public:\n        virtual ~Allocator() {}\n\n        // allocator must fill data, step and refcount fields\n        virtual bool allocate(GpuMat* mat, int rows, int cols, size_t elemSize) = 0;\n        virtual void free(GpuMat* mat) = 0;\n    };\n\n    //! default allocator\n    static Allocator* defaultAllocator();\n    static void setDefaultAllocator(Allocator* allocator);\n\n    //! default constructor\n    explicit GpuMat(Allocator* allocator = defaultAllocator());\n\n    //! constructs GpuMat of the specified size and type\n    GpuMat(int rows, int cols, int type, Allocator* allocator = defaultAllocator());\n    GpuMat(Size size, int type, Allocator* allocator = defaultAllocator());\n\n    //! constucts GpuMat and fills it with the specified value _s\n    GpuMat(int rows, int cols, int type, Scalar s, Allocator* allocator = defaultAllocator());\n    GpuMat(Size size, int type, Scalar s, Allocator* allocator = defaultAllocator());\n\n    //! copy constructor\n    GpuMat(const GpuMat& m);\n\n    //! constructor for GpuMat headers pointing to user-allocated data\n    GpuMat(int rows, int cols, int type, void* data, size_t step = Mat::AUTO_STEP);\n    GpuMat(Size size, int type, void* data, size_t step = Mat::AUTO_STEP);\n\n    //! creates a GpuMat header for a part of the bigger matrix\n    GpuMat(const GpuMat& m, Range rowRange, Range colRange);\n    GpuMat(const GpuMat& m, Rect roi);\n\n    //! builds GpuMat from host memory (Blocking call)\n    explicit GpuMat(InputArray arr, Allocator* allocator = defaultAllocator());\n\n    //! destructor - calls release()\n    ~GpuMat();\n\n    //! assignment operators\n    GpuMat& operator =(const GpuMat& m);\n\n    //! allocates new GpuMat data unless the GpuMat already has specified size and type\n    void create(int rows, int cols, int type);\n    void create(Size size, int type);\n\n    //! decreases reference counter, deallocate the data when reference counter reaches 0\n    void release();\n\n    //! swaps with other smart pointer\n    void swap(GpuMat& mat);\n\n    //! pefroms upload data to GpuMat (Blocking call)\n    void upload(InputArray arr);\n\n    //! pefroms upload data to GpuMat (Non-Blocking call)\n    void upload(InputArray arr, Stream& stream);\n\n    //! pefroms download data from device to host memory (Blocking call)\n    void download(OutputArray dst) const;\n\n    //! pefroms download data from device to host memory (Non-Blocking call)\n    void download(OutputArray dst, Stream& stream) const;\n\n    //! returns deep copy of the GpuMat, i.e. the data is copied\n    GpuMat clone() const;\n\n    //! copies the GpuMat content to device memory (Blocking call)\n    void copyTo(OutputArray dst) const;\n\n    //! copies the GpuMat content to device memory (Non-Blocking call)\n    void copyTo(OutputArray dst, Stream& stream) const;\n\n    //! copies those GpuMat elements to \"m\" that are marked with non-zero mask elements (Blocking call)\n    void copyTo(OutputArray dst, InputArray mask) const;\n\n    //! copies those GpuMat elements to \"m\" that are marked with non-zero mask elements (Non-Blocking call)\n    void copyTo(OutputArray dst, InputArray mask, Stream& stream) const;\n\n    //! sets some of the GpuMat elements to s (Blocking call)\n    GpuMat& setTo(Scalar s);\n\n    //! sets some of the GpuMat elements to s (Non-Blocking call)\n    GpuMat& setTo(Scalar s, Stream& stream);\n\n    //! sets some of the GpuMat elements to s, according to the mask (Blocking call)\n    GpuMat& setTo(Scalar s, InputArray mask);\n\n    //! sets some of the GpuMat elements to s, according to the mask (Non-Blocking call)\n    GpuMat& setTo(Scalar s, InputArray mask, Stream& stream);\n\n    //! converts GpuMat to another datatype (Blocking call)\n    void convertTo(OutputArray dst, int rtype) const;\n\n    //! converts GpuMat to another datatype (Non-Blocking call)\n    void convertTo(OutputArray dst, int rtype, Stream& stream) const;\n\n    //! converts GpuMat to another datatype with scaling (Blocking call)\n    void convertTo(OutputArray dst, int rtype, double alpha, double beta = 0.0) const;\n\n    //! converts GpuMat to another datatype with scaling (Non-Blocking call)\n    void convertTo(OutputArray dst, int rtype, double alpha, Stream& stream) const;\n\n    //! converts GpuMat to another datatype with scaling (Non-Blocking call)\n    void convertTo(OutputArray dst, int rtype, double alpha, double beta, Stream& stream) const;\n\n    void assignTo(GpuMat& m, int type=-1) const;\n\n    //! returns pointer to y-th row\n    uchar* ptr(int y = 0);\n    const uchar* ptr(int y = 0) const;\n\n    //! template version of the above method\n    template<typename _Tp> _Tp* ptr(int y = 0);\n    template<typename _Tp> const _Tp* ptr(int y = 0) const;\n\n    template <typename _Tp> operator PtrStepSz<_Tp>() const;\n    template <typename _Tp> operator PtrStep<_Tp>() const;\n\n    //! returns a new GpuMat header for the specified row\n    GpuMat row(int y) const;\n\n    //! returns a new GpuMat header for the specified column\n    GpuMat col(int x) const;\n\n    //! ... for the specified row span\n    GpuMat rowRange(int startrow, int endrow) const;\n    GpuMat rowRange(Range r) const;\n\n    //! ... for the specified column span\n    GpuMat colRange(int startcol, int endcol) const;\n    GpuMat colRange(Range r) const;\n\n    //! extracts a rectangular sub-GpuMat (this is a generalized form of row, rowRange etc.)\n    GpuMat operator ()(Range rowRange, Range colRange) const;\n    GpuMat operator ()(Rect roi) const;\n\n    //! creates alternative GpuMat header for the same data, with different\n    //! number of channels and/or different number of rows\n    GpuMat reshape(int cn, int rows = 0) const;\n\n    //! locates GpuMat header within a parent GpuMat\n    void locateROI(Size& wholeSize, Point& ofs) const;\n\n    //! moves/resizes the current GpuMat ROI inside the parent GpuMat\n    GpuMat& adjustROI(int dtop, int dbottom, int dleft, int dright);\n\n    //! returns true iff the GpuMat data is continuous\n    //! (i.e. when there are no gaps between successive rows)\n    bool isContinuous() const;\n\n    //! returns element size in bytes\n    size_t elemSize() const;\n\n    //! returns the size of element channel in bytes\n    size_t elemSize1() const;\n\n    //! returns element type\n    int type() const;\n\n    //! returns element type\n    int depth() const;\n\n    //! returns number of channels\n    int channels() const;\n\n    //! returns step/elemSize1()\n    size_t step1() const;\n\n    //! returns GpuMat size : width == number of columns, height == number of rows\n    Size size() const;\n\n    //! returns true if GpuMat data is NULL\n    bool empty() const;\n\n    /*! includes several bit-fields:\n    - the magic signature\n    - continuity flag\n    - depth\n    - number of channels\n    */\n    int flags;\n\n    //! the number of rows and columns\n    int rows, cols;\n\n    //! a distance between successive rows in bytes; includes the gap if any\n    size_t step;\n\n    //! pointer to the data\n    uchar* data;\n\n    //! pointer to the reference counter;\n    //! when GpuMat points to user-allocated data, the pointer is NULL\n    int* refcount;\n\n    //! helper fields used in locateROI and adjustROI\n    uchar* datastart;\n    const uchar* dataend;\n\n    //! allocator\n    Allocator* allocator;\n};\n\n/** @brief Creates a continuous matrix.\n\n@param rows Row count.\n@param cols Column count.\n@param type Type of the matrix.\n@param arr Destination matrix. This parameter changes only if it has a proper type and area (\n\\f$\\texttt{rows} \\times \\texttt{cols}\\f$ ).\n\nMatrix is called continuous if its elements are stored continuously, that is, without gaps at the\nend of each row.\n */\nCV_EXPORTS void createContinuous(int rows, int cols, int type, OutputArray arr);\n\n/** @brief Ensures that the size of a matrix is big enough and the matrix has a proper type.\n\n@param rows Minimum desired number of rows.\n@param cols Minimum desired number of columns.\n@param type Desired matrix type.\n@param arr Destination matrix.\n\nThe function does not reallocate memory if the matrix has proper attributes already.\n */\nCV_EXPORTS void ensureSizeIsEnough(int rows, int cols, int type, OutputArray arr);\n\n//! BufferPool management (must be called before Stream creation)\nCV_EXPORTS void setBufferPoolUsage(bool on);\nCV_EXPORTS void setBufferPoolConfig(int deviceId, size_t stackSize, int stackCount);\n\n//===================================================================================\n// HostMem\n//===================================================================================\n\n/** @brief Class with reference counting wrapping special memory type allocation functions from CUDA.\n\nIts interface is also Mat-like but with additional memory type parameters.\n\n-   **PAGE_LOCKED** sets a page locked memory type used commonly for fast and asynchronous\n    uploading/downloading data from/to GPU.\n-   **SHARED** specifies a zero copy memory allocation that enables mapping the host memory to GPU\n    address space, if supported.\n-   **WRITE_COMBINED** sets the write combined buffer that is not cached by CPU. Such buffers are\n    used to supply GPU with data when GPU only reads it. The advantage is a better CPU cache\n    utilization.\n\n@note Allocation size of such memory types is usually limited. For more details, see *CUDA 2.2\nPinned Memory APIs* document or *CUDA C Programming Guide*.\n */\nclass CV_EXPORTS HostMem\n{\npublic:\n    enum AllocType { PAGE_LOCKED = 1, SHARED = 2, WRITE_COMBINED = 4 };\n\n    static MatAllocator* getAllocator(AllocType alloc_type = PAGE_LOCKED);\n\n    explicit HostMem(AllocType alloc_type = PAGE_LOCKED);\n\n    HostMem(const HostMem& m);\n\n    HostMem(int rows, int cols, int type, AllocType alloc_type = PAGE_LOCKED);\n    HostMem(Size size, int type, AllocType alloc_type = PAGE_LOCKED);\n\n    //! creates from host memory with coping data\n    explicit HostMem(InputArray arr, AllocType alloc_type = PAGE_LOCKED);\n\n    ~HostMem();\n\n    HostMem& operator =(const HostMem& m);\n\n    //! swaps with other smart pointer\n    void swap(HostMem& b);\n\n    //! returns deep copy of the matrix, i.e. the data is copied\n    HostMem clone() const;\n\n    //! allocates new matrix data unless the matrix already has specified size and type.\n    void create(int rows, int cols, int type);\n    void create(Size size, int type);\n\n    //! creates alternative HostMem header for the same data, with different\n    //! number of channels and/or different number of rows\n    HostMem reshape(int cn, int rows = 0) const;\n\n    //! decrements reference counter and released memory if needed.\n    void release();\n\n    //! returns matrix header with disabled reference counting for HostMem data.\n    Mat createMatHeader() const;\n\n    /** @brief Maps CPU memory to GPU address space and creates the cuda::GpuMat header without reference counting\n    for it.\n\n    This can be done only if memory was allocated with the SHARED flag and if it is supported by the\n    hardware. Laptops often share video and CPU memory, so address spaces can be mapped, which\n    eliminates an extra copy.\n     */\n    GpuMat createGpuMatHeader() const;\n\n    // Please see cv::Mat for descriptions\n    bool isContinuous() const;\n    size_t elemSize() const;\n    size_t elemSize1() const;\n    int type() const;\n    int depth() const;\n    int channels() const;\n    size_t step1() const;\n    Size size() const;\n    bool empty() const;\n\n    // Please see cv::Mat for descriptions\n    int flags;\n    int rows, cols;\n    size_t step;\n\n    uchar* data;\n    int* refcount;\n\n    uchar* datastart;\n    const uchar* dataend;\n\n    AllocType alloc_type;\n};\n\n/** @brief Page-locks the memory of matrix and maps it for the device(s).\n\n@param m Input matrix.\n */\nCV_EXPORTS void registerPageLocked(Mat& m);\n\n/** @brief Unmaps the memory of matrix and makes it pageable again.\n\n@param m Input matrix.\n */\nCV_EXPORTS void unregisterPageLocked(Mat& m);\n\n//===================================================================================\n// Stream\n//===================================================================================\n\n/** @brief This class encapsulates a queue of asynchronous calls.\n\n@note Currently, you may face problems if an operation is enqueued twice with different data. Some\nfunctions use the constant GPU memory, and next call may update the memory before the previous one\nhas been finished. But calling different operations asynchronously is safe because each operation\nhas its own constant buffer. Memory copy/upload/download/set operations to the buffers you hold are\nalso safe. :\n */\nclass CV_EXPORTS Stream\n{\n    typedef void (Stream::*bool_type)() const;\n    void this_type_does_not_support_comparisons() const {}\n\npublic:\n    typedef void (*StreamCallback)(int status, void* userData);\n\n    //! creates a new asynchronous stream\n    Stream();\n\n    /** @brief Returns true if the current stream queue is finished. Otherwise, it returns false.\n    */\n    bool queryIfComplete() const;\n\n    /** @brief Blocks the current CPU thread until all operations in the stream are complete.\n    */\n    void waitForCompletion();\n\n    /** @brief Makes a compute stream wait on an event.\n    */\n    void waitEvent(const Event& event);\n\n    /** @brief Adds a callback to be called on the host after all currently enqueued items in the stream have\n    completed.\n\n    @note Callbacks must not make any CUDA API calls. Callbacks must not perform any synchronization\n    that may depend on outstanding device work or other callbacks that are not mandated to run earlier.\n    Callbacks without a mandated order (in independent streams) execute in undefined order and may be\n    serialized.\n     */\n    void enqueueHostCallback(StreamCallback callback, void* userData);\n\n    //! return Stream object for default CUDA stream\n    static Stream& Null();\n\n    //! returns true if stream object is not default (!= 0)\n    operator bool_type() const;\n\n    class Impl;\n\nprivate:\n    Ptr<Impl> impl_;\n    Stream(const Ptr<Impl>& impl);\n\n    friend struct StreamAccessor;\n    friend class BufferPool;\n    friend class DefaultDeviceInitializer;\n};\n\nclass CV_EXPORTS Event\n{\npublic:\n    enum CreateFlags\n    {\n        DEFAULT        = 0x00,  /**< Default event flag */\n        BLOCKING_SYNC  = 0x01,  /**< Event uses blocking synchronization */\n        DISABLE_TIMING = 0x02,  /**< Event will not record timing data */\n        INTERPROCESS   = 0x04   /**< Event is suitable for interprocess use. DisableTiming must be set */\n    };\n\n    explicit Event(CreateFlags flags = DEFAULT);\n\n    //! records an event\n    void record(Stream& stream = Stream::Null());\n\n    //! queries an event's status\n    bool queryIfComplete() const;\n\n    //! waits for an event to complete\n    void waitForCompletion();\n\n    //! computes the elapsed time between events\n    static float elapsedTime(const Event& start, const Event& end);\n\n    class Impl;\n\nprivate:\n    Ptr<Impl> impl_;\n    Event(const Ptr<Impl>& impl);\n\n    friend struct EventAccessor;\n};\n\n//! @} cudacore_struct\n\n//===================================================================================\n// Initialization & Info\n//===================================================================================\n\n//! @addtogroup cudacore_init\n//! @{\n\n/** @brief Returns the number of installed CUDA-enabled devices.\n\nUse this function before any other CUDA functions calls. If OpenCV is compiled without CUDA support,\nthis function returns 0.\n */\nCV_EXPORTS int getCudaEnabledDeviceCount();\n\n/** @brief Sets a device and initializes it for the current thread.\n\n@param device System index of a CUDA device starting with 0.\n\nIf the call of this function is omitted, a default device is initialized at the fist CUDA usage.\n */\nCV_EXPORTS void setDevice(int device);\n\n/** @brief Returns the current device index set by cuda::setDevice or initialized by default.\n */\nCV_EXPORTS int getDevice();\n\n/** @brief Explicitly destroys and cleans up all resources associated with the current device in the current\nprocess.\n\nAny subsequent API call to this device will reinitialize the device.\n */\nCV_EXPORTS void resetDevice();\n\n/** @brief Enumeration providing CUDA computing features.\n */\nenum FeatureSet\n{\n    FEATURE_SET_COMPUTE_10 = 10,\n    FEATURE_SET_COMPUTE_11 = 11,\n    FEATURE_SET_COMPUTE_12 = 12,\n    FEATURE_SET_COMPUTE_13 = 13,\n    FEATURE_SET_COMPUTE_20 = 20,\n    FEATURE_SET_COMPUTE_21 = 21,\n    FEATURE_SET_COMPUTE_30 = 30,\n    FEATURE_SET_COMPUTE_32 = 32,\n    FEATURE_SET_COMPUTE_35 = 35,\n    FEATURE_SET_COMPUTE_50 = 50,\n\n    GLOBAL_ATOMICS = FEATURE_SET_COMPUTE_11,\n    SHARED_ATOMICS = FEATURE_SET_COMPUTE_12,\n    NATIVE_DOUBLE = FEATURE_SET_COMPUTE_13,\n    WARP_SHUFFLE_FUNCTIONS = FEATURE_SET_COMPUTE_30,\n    DYNAMIC_PARALLELISM = FEATURE_SET_COMPUTE_35\n};\n\n//! checks whether current device supports the given feature\nCV_EXPORTS bool deviceSupports(FeatureSet feature_set);\n\n/** @brief Class providing a set of static methods to check what NVIDIA\\* card architecture the CUDA module was\nbuilt for.\n\nAccording to the CUDA C Programming Guide Version 3.2: \"PTX code produced for some specific compute\ncapability can always be compiled to binary code of greater or equal compute capability\".\n */\nclass CV_EXPORTS TargetArchs\n{\npublic:\n    /** @brief The following method checks whether the module was built with the support of the given feature:\n\n    @param feature_set Features to be checked. See :ocvcuda::FeatureSet.\n     */\n    static bool builtWith(FeatureSet feature_set);\n\n    /** @brief There is a set of methods to check whether the module contains intermediate (PTX) or binary CUDA\n    code for the given architecture(s):\n\n    @param major Major compute capability version.\n    @param minor Minor compute capability version.\n     */\n    static bool has(int major, int minor);\n    static bool hasPtx(int major, int minor);\n    static bool hasBin(int major, int minor);\n\n    static bool hasEqualOrLessPtx(int major, int minor);\n    static bool hasEqualOrGreater(int major, int minor);\n    static bool hasEqualOrGreaterPtx(int major, int minor);\n    static bool hasEqualOrGreaterBin(int major, int minor);\n};\n\n/** @brief Class providing functionality for querying the specified GPU properties.\n */\nclass CV_EXPORTS DeviceInfo\n{\npublic:\n    //! creates DeviceInfo object for the current GPU\n    DeviceInfo();\n\n    /** @brief The constructors.\n\n    @param device_id System index of the CUDA device starting with 0.\n\n    Constructs the DeviceInfo object for the specified device. If device_id parameter is missed, it\n    constructs an object for the current device.\n     */\n    DeviceInfo(int device_id);\n\n    /** @brief Returns system index of the CUDA device starting with 0.\n    */\n    int deviceID() const;\n\n    //! ASCII string identifying device\n    const char* name() const;\n\n    //! global memory available on device in bytes\n    size_t totalGlobalMem() const;\n\n    //! shared memory available per block in bytes\n    size_t sharedMemPerBlock() const;\n\n    //! 32-bit registers available per block\n    int regsPerBlock() const;\n\n    //! warp size in threads\n    int warpSize() const;\n\n    //! maximum pitch in bytes allowed by memory copies\n    size_t memPitch() const;\n\n    //! maximum number of threads per block\n    int maxThreadsPerBlock() const;\n\n    //! maximum size of each dimension of a block\n    Vec3i maxThreadsDim() const;\n\n    //! maximum size of each dimension of a grid\n    Vec3i maxGridSize() const;\n\n    //! clock frequency in kilohertz\n    int clockRate() const;\n\n    //! constant memory available on device in bytes\n    size_t totalConstMem() const;\n\n    //! major compute capability\n    int majorVersion() const;\n\n    //! minor compute capability\n    int minorVersion() const;\n\n    //! alignment requirement for textures\n    size_t textureAlignment() const;\n\n    //! pitch alignment requirement for texture references bound to pitched memory\n    size_t texturePitchAlignment() const;\n\n    //! number of multiprocessors on device\n    int multiProcessorCount() const;\n\n    //! specified whether there is a run time limit on kernels\n    bool kernelExecTimeoutEnabled() const;\n\n    //! device is integrated as opposed to discrete\n    bool integrated() const;\n\n    //! device can map host memory with cudaHostAlloc/cudaHostGetDevicePointer\n    bool canMapHostMemory() const;\n\n    enum ComputeMode\n    {\n        ComputeModeDefault,         /**< default compute mode (Multiple threads can use cudaSetDevice with this device) */\n        ComputeModeExclusive,       /**< compute-exclusive-thread mode (Only one thread in one process will be able to use cudaSetDevice with this device) */\n        ComputeModeProhibited,      /**< compute-prohibited mode (No threads can use cudaSetDevice with this device) */\n        ComputeModeExclusiveProcess /**< compute-exclusive-process mode (Many threads in one process will be able to use cudaSetDevice with this device) */\n    };\n\n    //! compute mode\n    ComputeMode computeMode() const;\n\n    //! maximum 1D texture size\n    int maxTexture1D() const;\n\n    //! maximum 1D mipmapped texture size\n    int maxTexture1DMipmap() const;\n\n    //! maximum size for 1D textures bound to linear memory\n    int maxTexture1DLinear() const;\n\n    //! maximum 2D texture dimensions\n    Vec2i maxTexture2D() const;\n\n    //! maximum 2D mipmapped texture dimensions\n    Vec2i maxTexture2DMipmap() const;\n\n    //! maximum dimensions (width, height, pitch) for 2D textures bound to pitched memory\n    Vec3i maxTexture2DLinear() const;\n\n    //! maximum 2D texture dimensions if texture gather operations have to be performed\n    Vec2i maxTexture2DGather() const;\n\n    //! maximum 3D texture dimensions\n    Vec3i maxTexture3D() const;\n\n    //! maximum Cubemap texture dimensions\n    int maxTextureCubemap() const;\n\n    //! maximum 1D layered texture dimensions\n    Vec2i maxTexture1DLayered() const;\n\n    //! maximum 2D layered texture dimensions\n    Vec3i maxTexture2DLayered() const;\n\n    //! maximum Cubemap layered texture dimensions\n    Vec2i maxTextureCubemapLayered() const;\n\n    //! maximum 1D surface size\n    int maxSurface1D() const;\n\n    //! maximum 2D surface dimensions\n    Vec2i maxSurface2D() const;\n\n    //! maximum 3D surface dimensions\n    Vec3i maxSurface3D() const;\n\n    //! maximum 1D layered surface dimensions\n    Vec2i maxSurface1DLayered() const;\n\n    //! maximum 2D layered surface dimensions\n    Vec3i maxSurface2DLayered() const;\n\n    //! maximum Cubemap surface dimensions\n    int maxSurfaceCubemap() const;\n\n    //! maximum Cubemap layered surface dimensions\n    Vec2i maxSurfaceCubemapLayered() const;\n\n    //! alignment requirements for surfaces\n    size_t surfaceAlignment() const;\n\n    //! device can possibly execute multiple kernels concurrently\n    bool concurrentKernels() const;\n\n    //! device has ECC support enabled\n    bool ECCEnabled() const;\n\n    //! PCI bus ID of the device\n    int pciBusID() const;\n\n    //! PCI device ID of the device\n    int pciDeviceID() const;\n\n    //! PCI domain ID of the device\n    int pciDomainID() const;\n\n    //! true if device is a Tesla device using TCC driver, false otherwise\n    bool tccDriver() const;\n\n    //! number of asynchronous engines\n    int asyncEngineCount() const;\n\n    //! device shares a unified address space with the host\n    bool unifiedAddressing() const;\n\n    //! peak memory clock frequency in kilohertz\n    int memoryClockRate() const;\n\n    //! global memory bus width in bits\n    int memoryBusWidth() const;\n\n    //! size of L2 cache in bytes\n    int l2CacheSize() const;\n\n    //! maximum resident threads per multiprocessor\n    int maxThreadsPerMultiProcessor() const;\n\n    //! gets free and total device memory\n    void queryMemory(size_t& totalMemory, size_t& freeMemory) const;\n    size_t freeMemory() const;\n    size_t totalMemory() const;\n\n    /** @brief Provides information on CUDA feature support.\n\n    @param feature_set Features to be checked. See cuda::FeatureSet.\n\n    This function returns true if the device has the specified CUDA feature. Otherwise, it returns false\n     */\n    bool supports(FeatureSet feature_set) const;\n\n    /** @brief Checks the CUDA module and device compatibility.\n\n    This function returns true if the CUDA module can be run on the specified device. Otherwise, it\n    returns false .\n     */\n    bool isCompatible() const;\n\nprivate:\n    int device_id_;\n};\n\nCV_EXPORTS void printCudaDeviceInfo(int device);\nCV_EXPORTS void printShortCudaDeviceInfo(int device);\n\n//! @} cudacore_init\n\n}} // namespace cv { namespace cuda {\n\n\n#include \"opencv2/core/cuda.inl.hpp\"\n\n#endif /* __OPENCV_CORE_CUDA_HPP__ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/cuda.inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_CUDAINL_HPP__\n#define __OPENCV_CORE_CUDAINL_HPP__\n\n#include \"opencv2/core/cuda.hpp\"\n\n//! @cond IGNORED\n\nnamespace cv { namespace cuda {\n\n//===================================================================================\n// GpuMat\n//===================================================================================\n\ninline\nGpuMat::GpuMat(Allocator* allocator_)\n    : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), allocator(allocator_)\n{}\n\ninline\nGpuMat::GpuMat(int rows_, int cols_, int type_, Allocator* allocator_)\n    : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), allocator(allocator_)\n{\n    if (rows_ > 0 && cols_ > 0)\n        create(rows_, cols_, type_);\n}\n\ninline\nGpuMat::GpuMat(Size size_, int type_, Allocator* allocator_)\n    : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), allocator(allocator_)\n{\n    if (size_.height > 0 && size_.width > 0)\n        create(size_.height, size_.width, type_);\n}\n\ninline\nGpuMat::GpuMat(int rows_, int cols_, int type_, Scalar s_, Allocator* allocator_)\n    : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), allocator(allocator_)\n{\n    if (rows_ > 0 && cols_ > 0)\n    {\n        create(rows_, cols_, type_);\n        setTo(s_);\n    }\n}\n\ninline\nGpuMat::GpuMat(Size size_, int type_, Scalar s_, Allocator* allocator_)\n    : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), allocator(allocator_)\n{\n    if (size_.height > 0 && size_.width > 0)\n    {\n        create(size_.height, size_.width, type_);\n        setTo(s_);\n    }\n}\n\ninline\nGpuMat::GpuMat(const GpuMat& m)\n    : flags(m.flags), rows(m.rows), cols(m.cols), step(m.step), data(m.data), refcount(m.refcount), datastart(m.datastart), dataend(m.dataend), allocator(m.allocator)\n{\n    if (refcount)\n        CV_XADD(refcount, 1);\n}\n\ninline\nGpuMat::GpuMat(InputArray arr, Allocator* allocator_) :\n    flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), allocator(allocator_)\n{\n    upload(arr);\n}\n\ninline\nGpuMat::~GpuMat()\n{\n    release();\n}\n\ninline\nGpuMat& GpuMat::operator =(const GpuMat& m)\n{\n    if (this != &m)\n    {\n        GpuMat temp(m);\n        swap(temp);\n    }\n\n    return *this;\n}\n\ninline\nvoid GpuMat::create(Size size_, int type_)\n{\n    create(size_.height, size_.width, type_);\n}\n\ninline\nvoid GpuMat::swap(GpuMat& b)\n{\n    std::swap(flags, b.flags);\n    std::swap(rows, b.rows);\n    std::swap(cols, b.cols);\n    std::swap(step, b.step);\n    std::swap(data, b.data);\n    std::swap(datastart, b.datastart);\n    std::swap(dataend, b.dataend);\n    std::swap(refcount, b.refcount);\n    std::swap(allocator, b.allocator);\n}\n\ninline\nGpuMat GpuMat::clone() const\n{\n    GpuMat m;\n    copyTo(m);\n    return m;\n}\n\ninline\nvoid GpuMat::copyTo(OutputArray dst, InputArray mask) const\n{\n    copyTo(dst, mask, Stream::Null());\n}\n\ninline\nGpuMat& GpuMat::setTo(Scalar s)\n{\n    return setTo(s, Stream::Null());\n}\n\ninline\nGpuMat& GpuMat::setTo(Scalar s, InputArray mask)\n{\n    return setTo(s, mask, Stream::Null());\n}\n\ninline\nvoid GpuMat::convertTo(OutputArray dst, int rtype) const\n{\n    convertTo(dst, rtype, Stream::Null());\n}\n\ninline\nvoid GpuMat::convertTo(OutputArray dst, int rtype, double alpha, double beta) const\n{\n    convertTo(dst, rtype, alpha, beta, Stream::Null());\n}\n\ninline\nvoid GpuMat::convertTo(OutputArray dst, int rtype, double alpha, Stream& stream) const\n{\n    convertTo(dst, rtype, alpha, 0.0, stream);\n}\n\ninline\nvoid GpuMat::assignTo(GpuMat& m, int _type) const\n{\n    if (_type < 0)\n        m = *this;\n    else\n        convertTo(m, _type);\n}\n\ninline\nuchar* GpuMat::ptr(int y)\n{\n    CV_DbgAssert( (unsigned)y < (unsigned)rows );\n    return data + step * y;\n}\n\ninline\nconst uchar* GpuMat::ptr(int y) const\n{\n    CV_DbgAssert( (unsigned)y < (unsigned)rows );\n    return data + step * y;\n}\n\ntemplate<typename _Tp> inline\n_Tp* GpuMat::ptr(int y)\n{\n    return (_Tp*)ptr(y);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp* GpuMat::ptr(int y) const\n{\n    return (const _Tp*)ptr(y);\n}\n\ntemplate <class T> inline\nGpuMat::operator PtrStepSz<T>() const\n{\n    return PtrStepSz<T>(rows, cols, (T*)data, step);\n}\n\ntemplate <class T> inline\nGpuMat::operator PtrStep<T>() const\n{\n    return PtrStep<T>((T*)data, step);\n}\n\ninline\nGpuMat GpuMat::row(int y) const\n{\n    return GpuMat(*this, Range(y, y+1), Range::all());\n}\n\ninline\nGpuMat GpuMat::col(int x) const\n{\n    return GpuMat(*this, Range::all(), Range(x, x+1));\n}\n\ninline\nGpuMat GpuMat::rowRange(int startrow, int endrow) const\n{\n    return GpuMat(*this, Range(startrow, endrow), Range::all());\n}\n\ninline\nGpuMat GpuMat::rowRange(Range r) const\n{\n    return GpuMat(*this, r, Range::all());\n}\n\ninline\nGpuMat GpuMat::colRange(int startcol, int endcol) const\n{\n    return GpuMat(*this, Range::all(), Range(startcol, endcol));\n}\n\ninline\nGpuMat GpuMat::colRange(Range r) const\n{\n    return GpuMat(*this, Range::all(), r);\n}\n\ninline\nGpuMat GpuMat::operator ()(Range rowRange_, Range colRange_) const\n{\n    return GpuMat(*this, rowRange_, colRange_);\n}\n\ninline\nGpuMat GpuMat::operator ()(Rect roi) const\n{\n    return GpuMat(*this, roi);\n}\n\ninline\nbool GpuMat::isContinuous() const\n{\n    return (flags & Mat::CONTINUOUS_FLAG) != 0;\n}\n\ninline\nsize_t GpuMat::elemSize() const\n{\n    return CV_ELEM_SIZE(flags);\n}\n\ninline\nsize_t GpuMat::elemSize1() const\n{\n    return CV_ELEM_SIZE1(flags);\n}\n\ninline\nint GpuMat::type() const\n{\n    return CV_MAT_TYPE(flags);\n}\n\ninline\nint GpuMat::depth() const\n{\n    return CV_MAT_DEPTH(flags);\n}\n\ninline\nint GpuMat::channels() const\n{\n    return CV_MAT_CN(flags);\n}\n\ninline\nsize_t GpuMat::step1() const\n{\n    return step / elemSize1();\n}\n\ninline\nSize GpuMat::size() const\n{\n    return Size(cols, rows);\n}\n\ninline\nbool GpuMat::empty() const\n{\n    return data == 0;\n}\n\nstatic inline\nGpuMat createContinuous(int rows, int cols, int type)\n{\n    GpuMat m;\n    createContinuous(rows, cols, type, m);\n    return m;\n}\n\nstatic inline\nvoid createContinuous(Size size, int type, OutputArray arr)\n{\n    createContinuous(size.height, size.width, type, arr);\n}\n\nstatic inline\nGpuMat createContinuous(Size size, int type)\n{\n    GpuMat m;\n    createContinuous(size, type, m);\n    return m;\n}\n\nstatic inline\nvoid ensureSizeIsEnough(Size size, int type, OutputArray arr)\n{\n    ensureSizeIsEnough(size.height, size.width, type, arr);\n}\n\nstatic inline\nvoid swap(GpuMat& a, GpuMat& b)\n{\n    a.swap(b);\n}\n\n//===================================================================================\n// HostMem\n//===================================================================================\n\ninline\nHostMem::HostMem(AllocType alloc_type_)\n    : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), alloc_type(alloc_type_)\n{\n}\n\ninline\nHostMem::HostMem(const HostMem& m)\n    : flags(m.flags), rows(m.rows), cols(m.cols), step(m.step), data(m.data), refcount(m.refcount), datastart(m.datastart), dataend(m.dataend), alloc_type(m.alloc_type)\n{\n    if( refcount )\n        CV_XADD(refcount, 1);\n}\n\ninline\nHostMem::HostMem(int rows_, int cols_, int type_, AllocType alloc_type_)\n    : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), alloc_type(alloc_type_)\n{\n    if (rows_ > 0 && cols_ > 0)\n        create(rows_, cols_, type_);\n}\n\ninline\nHostMem::HostMem(Size size_, int type_, AllocType alloc_type_)\n    : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), alloc_type(alloc_type_)\n{\n    if (size_.height > 0 && size_.width > 0)\n        create(size_.height, size_.width, type_);\n}\n\ninline\nHostMem::HostMem(InputArray arr, AllocType alloc_type_)\n    : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0), alloc_type(alloc_type_)\n{\n    arr.getMat().copyTo(*this);\n}\n\ninline\nHostMem::~HostMem()\n{\n    release();\n}\n\ninline\nHostMem& HostMem::operator =(const HostMem& m)\n{\n    if (this != &m)\n    {\n        HostMem temp(m);\n        swap(temp);\n    }\n\n    return *this;\n}\n\ninline\nvoid HostMem::swap(HostMem& b)\n{\n    std::swap(flags, b.flags);\n    std::swap(rows, b.rows);\n    std::swap(cols, b.cols);\n    std::swap(step, b.step);\n    std::swap(data, b.data);\n    std::swap(datastart, b.datastart);\n    std::swap(dataend, b.dataend);\n    std::swap(refcount, b.refcount);\n    std::swap(alloc_type, b.alloc_type);\n}\n\ninline\nHostMem HostMem::clone() const\n{\n    HostMem m(size(), type(), alloc_type);\n    createMatHeader().copyTo(m);\n    return m;\n}\n\ninline\nvoid HostMem::create(Size size_, int type_)\n{\n    create(size_.height, size_.width, type_);\n}\n\ninline\nMat HostMem::createMatHeader() const\n{\n    return Mat(size(), type(), data, step);\n}\n\ninline\nbool HostMem::isContinuous() const\n{\n    return (flags & Mat::CONTINUOUS_FLAG) != 0;\n}\n\ninline\nsize_t HostMem::elemSize() const\n{\n    return CV_ELEM_SIZE(flags);\n}\n\ninline\nsize_t HostMem::elemSize1() const\n{\n    return CV_ELEM_SIZE1(flags);\n}\n\ninline\nint HostMem::type() const\n{\n    return CV_MAT_TYPE(flags);\n}\n\ninline\nint HostMem::depth() const\n{\n    return CV_MAT_DEPTH(flags);\n}\n\ninline\nint HostMem::channels() const\n{\n    return CV_MAT_CN(flags);\n}\n\ninline\nsize_t HostMem::step1() const\n{\n    return step / elemSize1();\n}\n\ninline\nSize HostMem::size() const\n{\n    return Size(cols, rows);\n}\n\ninline\nbool HostMem::empty() const\n{\n    return data == 0;\n}\n\nstatic inline\nvoid swap(HostMem& a, HostMem& b)\n{\n    a.swap(b);\n}\n\n//===================================================================================\n// Stream\n//===================================================================================\n\ninline\nStream::Stream(const Ptr<Impl>& impl)\n    : impl_(impl)\n{\n}\n\n//===================================================================================\n// Event\n//===================================================================================\n\ninline\nEvent::Event(const Ptr<Impl>& impl)\n    : impl_(impl)\n{\n}\n\n//===================================================================================\n// Initialization & Info\n//===================================================================================\n\ninline\nbool TargetArchs::has(int major, int minor)\n{\n    return hasPtx(major, minor) || hasBin(major, minor);\n}\n\ninline\nbool TargetArchs::hasEqualOrGreater(int major, int minor)\n{\n    return hasEqualOrGreaterPtx(major, minor) || hasEqualOrGreaterBin(major, minor);\n}\n\ninline\nDeviceInfo::DeviceInfo()\n{\n    device_id_ = getDevice();\n}\n\ninline\nDeviceInfo::DeviceInfo(int device_id)\n{\n    CV_Assert( device_id >= 0 && device_id < getCudaEnabledDeviceCount() );\n    device_id_ = device_id;\n}\n\ninline\nint DeviceInfo::deviceID() const\n{\n    return device_id_;\n}\n\ninline\nsize_t DeviceInfo::freeMemory() const\n{\n    size_t _totalMemory = 0, _freeMemory = 0;\n    queryMemory(_totalMemory, _freeMemory);\n    return _freeMemory;\n}\n\ninline\nsize_t DeviceInfo::totalMemory() const\n{\n    size_t _totalMemory = 0, _freeMemory = 0;\n    queryMemory(_totalMemory, _freeMemory);\n    return _totalMemory;\n}\n\ninline\nbool DeviceInfo::supports(FeatureSet feature_set) const\n{\n    int version = majorVersion() * 10 + minorVersion();\n    return version >= feature_set;\n}\n\n\n}} // namespace cv { namespace cuda {\n\n//===================================================================================\n// Mat\n//===================================================================================\n\nnamespace cv {\n\ninline\nMat::Mat(const cuda::GpuMat& m)\n    : flags(0), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0), datalimit(0), allocator(0), u(0), size(&rows)\n{\n    m.download(*this);\n}\n\n}\n\n//! @endcond\n\n#endif // __OPENCV_CORE_CUDAINL_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/cuda_stream_accessor.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_CUDA_STREAM_ACCESSOR_HPP__\n#define __OPENCV_CORE_CUDA_STREAM_ACCESSOR_HPP__\n\n#ifndef __cplusplus\n#  error cuda_stream_accessor.hpp header must be compiled as C++\n#endif\n\n/** @file cuda_stream_accessor.hpp\n * This is only header file that depends on CUDA Runtime API. All other headers are independent.\n */\n\n#include <cuda_runtime.h>\n#include \"opencv2/core/cuda.hpp\"\n\nnamespace cv\n{\n    namespace cuda\n    {\n\n//! @addtogroup cudacore_struct\n//! @{\n\n        /** @brief Class that enables getting cudaStream_t from cuda::Stream\n         */\n        struct StreamAccessor\n        {\n            CV_EXPORTS static cudaStream_t getStream(const Stream& stream);\n            CV_EXPORTS static Stream wrapStream(cudaStream_t stream);\n        };\n\n        /** @brief Class that enables getting cudaEvent_t from cuda::Event\n         */\n        struct EventAccessor\n        {\n            CV_EXPORTS static cudaEvent_t getEvent(const Event& event);\n            CV_EXPORTS static Event wrapEvent(cudaEvent_t event);\n        };\n\n//! @}\n\n    }\n}\n\n#endif /* __OPENCV_CORE_CUDA_STREAM_ACCESSOR_HPP__ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/cuda_types.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_CUDA_TYPES_HPP__\n#define __OPENCV_CORE_CUDA_TYPES_HPP__\n\n#ifndef __cplusplus\n#  error cuda_types.hpp header must be compiled as C++\n#endif\n\n/** @file\n * @deprecated Use @ref cudev instead.\n */\n\n//! @cond IGNORED\n\n#ifdef __CUDACC__\n    #define __CV_CUDA_HOST_DEVICE__ __host__ __device__ __forceinline__\n#else\n    #define __CV_CUDA_HOST_DEVICE__\n#endif\n\nnamespace cv\n{\n    namespace cuda\n    {\n\n        // Simple lightweight structures that encapsulates information about an image on device.\n        // It is intended to pass to nvcc-compiled code. GpuMat depends on headers that nvcc can't compile\n\n        template <typename T> struct DevPtr\n        {\n            typedef T elem_type;\n            typedef int index_type;\n\n            enum { elem_size = sizeof(elem_type) };\n\n            T* data;\n\n            __CV_CUDA_HOST_DEVICE__ DevPtr() : data(0) {}\n            __CV_CUDA_HOST_DEVICE__ DevPtr(T* data_) : data(data_) {}\n\n            __CV_CUDA_HOST_DEVICE__ size_t elemSize() const { return elem_size; }\n            __CV_CUDA_HOST_DEVICE__ operator       T*()       { return data; }\n            __CV_CUDA_HOST_DEVICE__ operator const T*() const { return data; }\n        };\n\n        template <typename T> struct PtrSz : public DevPtr<T>\n        {\n            __CV_CUDA_HOST_DEVICE__ PtrSz() : size(0) {}\n            __CV_CUDA_HOST_DEVICE__ PtrSz(T* data_, size_t size_) : DevPtr<T>(data_), size(size_) {}\n\n            size_t size;\n        };\n\n        template <typename T> struct PtrStep : public DevPtr<T>\n        {\n            __CV_CUDA_HOST_DEVICE__ PtrStep() : step(0) {}\n            __CV_CUDA_HOST_DEVICE__ PtrStep(T* data_, size_t step_) : DevPtr<T>(data_), step(step_) {}\n\n            size_t step;\n\n            __CV_CUDA_HOST_DEVICE__       T* ptr(int y = 0)       { return (      T*)( (      char*)DevPtr<T>::data + y * step); }\n            __CV_CUDA_HOST_DEVICE__ const T* ptr(int y = 0) const { return (const T*)( (const char*)DevPtr<T>::data + y * step); }\n\n            __CV_CUDA_HOST_DEVICE__       T& operator ()(int y, int x)       { return ptr(y)[x]; }\n            __CV_CUDA_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; }\n        };\n\n        template <typename T> struct PtrStepSz : public PtrStep<T>\n        {\n            __CV_CUDA_HOST_DEVICE__ PtrStepSz() : cols(0), rows(0) {}\n            __CV_CUDA_HOST_DEVICE__ PtrStepSz(int rows_, int cols_, T* data_, size_t step_)\n                : PtrStep<T>(data_, step_), cols(cols_), rows(rows_) {}\n\n            template <typename U>\n            explicit PtrStepSz(const PtrStepSz<U>& d) : PtrStep<T>((T*)d.data, d.step), cols(d.cols), rows(d.rows){}\n\n            int cols;\n            int rows;\n        };\n\n        typedef PtrStepSz<unsigned char> PtrStepSzb;\n        typedef PtrStepSz<float> PtrStepSzf;\n        typedef PtrStepSz<int> PtrStepSzi;\n\n        typedef PtrStep<unsigned char> PtrStepb;\n        typedef PtrStep<float> PtrStepf;\n        typedef PtrStep<int> PtrStepi;\n\n    }\n}\n\n//! @endcond\n\n#endif /* __OPENCV_CORE_CUDA_TYPES_HPP__ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/cvdef.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_CVDEF_H__\n#define __OPENCV_CORE_CVDEF_H__\n\n//! @addtogroup core_utils\n//! @{\n\n#if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER && _MSC_VER > 1300\n#  define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio warnings */\n#endif\n\n// undef problematic defines sometimes defined by system headers (windows.h in particular)\n#undef small\n#undef min\n#undef max\n#undef abs\n#undef Complex\n\n#if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER && _MSC_VER > 1300\n#  define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio warnings */\n#endif\n\n#include <limits.h>\n#include \"opencv2/core/hal/interface.h\"\n\n#if defined __ICL\n#  define CV_ICC   __ICL\n#elif defined __ICC\n#  define CV_ICC   __ICC\n#elif defined __ECL\n#  define CV_ICC   __ECL\n#elif defined __ECC\n#  define CV_ICC   __ECC\n#elif defined __INTEL_COMPILER\n#  define CV_ICC   __INTEL_COMPILER\n#endif\n\n#ifndef CV_INLINE\n#  if defined __cplusplus\n#    define CV_INLINE static inline\n#  elif defined _MSC_VER\n#    define CV_INLINE __inline\n#  else\n#    define CV_INLINE static\n#  endif\n#endif\n\n#if defined CV_ICC && !defined CV_ENABLE_UNROLLED\n#  define CV_ENABLE_UNROLLED 0\n#else\n#  define CV_ENABLE_UNROLLED 1\n#endif\n\n#ifdef __GNUC__\n#  define CV_DECL_ALIGNED(x) __attribute__ ((aligned (x)))\n#elif defined _MSC_VER\n#  define CV_DECL_ALIGNED(x) __declspec(align(x))\n#else\n#  define CV_DECL_ALIGNED(x)\n#endif\n\n/* CPU features and intrinsics support */\n#define CV_CPU_NONE             0\n#define CV_CPU_MMX              1\n#define CV_CPU_SSE              2\n#define CV_CPU_SSE2             3\n#define CV_CPU_SSE3             4\n#define CV_CPU_SSSE3            5\n#define CV_CPU_SSE4_1           6\n#define CV_CPU_SSE4_2           7\n#define CV_CPU_POPCNT           8\n\n#define CV_CPU_AVX              10\n#define CV_CPU_AVX2             11\n#define CV_CPU_FMA3             12\n\n#define CV_CPU_AVX_512F         13\n#define CV_CPU_AVX_512BW        14\n#define CV_CPU_AVX_512CD        15\n#define CV_CPU_AVX_512DQ        16\n#define CV_CPU_AVX_512ER        17\n#define CV_CPU_AVX_512IFMA512   18\n#define CV_CPU_AVX_512PF        19\n#define CV_CPU_AVX_512VBMI      20\n#define CV_CPU_AVX_512VL        21\n\n#define CV_CPU_NEON   100\n\n// when adding to this list remember to update the following enum\n#define CV_HARDWARE_MAX_FEATURE 255\n\n/** @brief Available CPU features.\n*/\nenum CpuFeatures {\n    CPU_MMX             = 1,\n    CPU_SSE             = 2,\n    CPU_SSE2            = 3,\n    CPU_SSE3            = 4,\n    CPU_SSSE3           = 5,\n    CPU_SSE4_1          = 6,\n    CPU_SSE4_2          = 7,\n    CPU_POPCNT          = 8,\n\n    CPU_AVX             = 10,\n    CPU_AVX2            = 11,\n    CPU_FMA3            = 12,\n\n    CPU_AVX_512F        = 13,\n    CPU_AVX_512BW       = 14,\n    CPU_AVX_512CD       = 15,\n    CPU_AVX_512DQ       = 16,\n    CPU_AVX_512ER       = 17,\n    CPU_AVX_512IFMA512  = 18,\n    CPU_AVX_512PF       = 19,\n    CPU_AVX_512VBMI     = 20,\n    CPU_AVX_512VL       = 21,\n\n    CPU_NEON            = 100\n};\n\n// do not include SSE/AVX/NEON headers for NVCC compiler\n#ifndef __CUDACC__\n\n#if defined __SSE2__ || defined _M_X64 || (defined _M_IX86_FP && _M_IX86_FP >= 2)\n#  include <emmintrin.h>\n#  define CV_MMX 1\n#  define CV_SSE 1\n#  define CV_SSE2 1\n#  if defined __SSE3__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include <pmmintrin.h>\n#    define CV_SSE3 1\n#  endif\n#  if defined __SSSE3__  || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include <tmmintrin.h>\n#    define CV_SSSE3 1\n#  endif\n#  if defined __SSE4_1__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include <smmintrin.h>\n#    define CV_SSE4_1 1\n#  endif\n#  if defined __SSE4_2__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include <nmmintrin.h>\n#    define CV_SSE4_2 1\n#  endif\n#  if defined __POPCNT__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    ifdef _MSC_VER\n#      include <nmmintrin.h>\n#    else\n#      include <popcntintrin.h>\n#    endif\n#    define CV_POPCNT 1\n#  endif\n#  if defined __AVX__ || (defined _MSC_VER && _MSC_VER >= 1600 && 0)\n// MS Visual Studio 2010 (2012?) has no macro pre-defined to identify the use of /arch:AVX\n// See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32\n#    include <immintrin.h>\n#    define CV_AVX 1\n#    if defined(_XCR_XFEATURE_ENABLED_MASK)\n#      define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK)\n#    else\n#      define __xgetbv() 0\n#    endif\n#  endif\n#  if defined __AVX2__ || (defined _MSC_VER && _MSC_VER >= 1800 && 0)\n#    include <immintrin.h>\n#    define CV_AVX2 1\n#    if defined __FMA__\n#      define CV_FMA3 1\n#    endif\n#  endif\n#endif\n\n#if (defined WIN32 || defined _WIN32) && defined(_M_ARM)\n# include <Intrin.h>\n# include \"arm_neon.h\"\n# define CV_NEON 1\n# define CPU_HAS_NEON_FEATURE (true)\n#elif defined(__ARM_NEON__) || (defined (__ARM_NEON) && defined(__aarch64__))\n#  include <arm_neon.h>\n#  define CV_NEON 1\n#endif\n\n#if defined __GNUC__ && defined __arm__ && (defined __ARM_PCS_VFP || defined __ARM_VFPV3__ || defined __ARM_NEON__) && !defined __SOFTFP__\n#  define CV_VFP 1\n#endif\n\n#endif // __CUDACC__\n\n#ifndef CV_POPCNT\n#define CV_POPCNT 0\n#endif\n#ifndef CV_MMX\n#  define CV_MMX 0\n#endif\n#ifndef CV_SSE\n#  define CV_SSE 0\n#endif\n#ifndef CV_SSE2\n#  define CV_SSE2 0\n#endif\n#ifndef CV_SSE3\n#  define CV_SSE3 0\n#endif\n#ifndef CV_SSSE3\n#  define CV_SSSE3 0\n#endif\n#ifndef CV_SSE4_1\n#  define CV_SSE4_1 0\n#endif\n#ifndef CV_SSE4_2\n#  define CV_SSE4_2 0\n#endif\n#ifndef CV_AVX\n#  define CV_AVX 0\n#endif\n#ifndef CV_AVX2\n#  define CV_AVX2 0\n#endif\n#ifndef CV_FMA3\n#  define CV_FMA3 0\n#endif\n#ifndef CV_AVX_512F\n#  define CV_AVX_512F 0\n#endif\n#ifndef CV_AVX_512BW\n#  define CV_AVX_512BW 0\n#endif\n#ifndef CV_AVX_512CD\n#  define CV_AVX_512CD 0\n#endif\n#ifndef CV_AVX_512DQ\n#  define CV_AVX_512DQ 0\n#endif\n#ifndef CV_AVX_512ER\n#  define CV_AVX_512ER 0\n#endif\n#ifndef CV_AVX_512IFMA512\n#  define CV_AVX_512IFMA512 0\n#endif\n#ifndef CV_AVX_512PF\n#  define CV_AVX_512PF 0\n#endif\n#ifndef CV_AVX_512VBMI\n#  define CV_AVX_512VBMI 0\n#endif\n#ifndef CV_AVX_512VL\n#  define CV_AVX_512VL 0\n#endif\n\n#ifndef CV_NEON\n#  define CV_NEON 0\n#endif\n\n#ifndef CV_VFP\n#  define CV_VFP 0\n#endif\n\n/* fundamental constants */\n#define CV_PI   3.1415926535897932384626433832795\n#define CV_2PI 6.283185307179586476925286766559\n#define CV_LOG2 0.69314718055994530941723212145818\n\ntypedef union Cv32suf\n{\n    int i;\n    unsigned u;\n    float f;\n}\nCv32suf;\n\ntypedef union Cv64suf\n{\n    int64 i;\n    uint64 u;\n    double f;\n}\nCv64suf;\n\n#define OPENCV_ABI_COMPATIBILITY 300\n\n#ifdef __OPENCV_BUILD\n#  define DISABLE_OPENCV_24_COMPATIBILITY\n#endif\n\n#if (defined WIN32 || defined _WIN32 || defined WINCE || defined __CYGWIN__) && defined CVAPI_EXPORTS\n#  define CV_EXPORTS __declspec(dllexport)\n#elif defined __GNUC__ && __GNUC__ >= 4\n#  define CV_EXPORTS __attribute__ ((visibility (\"default\")))\n#else\n#  define CV_EXPORTS\n#endif\n\n#ifndef CV_EXTERN_C\n#  ifdef __cplusplus\n#    define CV_EXTERN_C extern \"C\"\n#  else\n#    define CV_EXTERN_C\n#  endif\n#endif\n\n/* special informative macros for wrapper generators */\n#define CV_EXPORTS_W CV_EXPORTS\n#define CV_EXPORTS_W_SIMPLE CV_EXPORTS\n#define CV_EXPORTS_AS(synonym) CV_EXPORTS\n#define CV_EXPORTS_W_MAP CV_EXPORTS\n#define CV_IN_OUT\n#define CV_OUT\n#define CV_PROP\n#define CV_PROP_RW\n#define CV_WRAP\n#define CV_WRAP_AS(synonym)\n\n/****************************************************************************************\\\n*                                  Matrix type (Mat)                                     *\n\\****************************************************************************************/\n\n#define CV_CN_MAX     512\n#define CV_CN_SHIFT   3\n#define CV_DEPTH_MAX  (1 << CV_CN_SHIFT)\n\n#define CV_8U   0\n#define CV_8S   1\n#define CV_16U  2\n#define CV_16S  3\n#define CV_32S  4\n#define CV_32F  5\n#define CV_64F  6\n#define CV_USRTYPE1 7\n\n#define CV_MAT_DEPTH_MASK       (CV_DEPTH_MAX - 1)\n#define CV_MAT_DEPTH(flags)     ((flags) & CV_MAT_DEPTH_MASK)\n\n#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))\n#define CV_MAKE_TYPE CV_MAKETYPE\n\n#define CV_8UC1 CV_MAKETYPE(CV_8U,1)\n#define CV_8UC2 CV_MAKETYPE(CV_8U,2)\n#define CV_8UC3 CV_MAKETYPE(CV_8U,3)\n#define CV_8UC4 CV_MAKETYPE(CV_8U,4)\n#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))\n\n#define CV_8SC1 CV_MAKETYPE(CV_8S,1)\n#define CV_8SC2 CV_MAKETYPE(CV_8S,2)\n#define CV_8SC3 CV_MAKETYPE(CV_8S,3)\n#define CV_8SC4 CV_MAKETYPE(CV_8S,4)\n#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))\n\n#define CV_16UC1 CV_MAKETYPE(CV_16U,1)\n#define CV_16UC2 CV_MAKETYPE(CV_16U,2)\n#define CV_16UC3 CV_MAKETYPE(CV_16U,3)\n#define CV_16UC4 CV_MAKETYPE(CV_16U,4)\n#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))\n\n#define CV_16SC1 CV_MAKETYPE(CV_16S,1)\n#define CV_16SC2 CV_MAKETYPE(CV_16S,2)\n#define CV_16SC3 CV_MAKETYPE(CV_16S,3)\n#define CV_16SC4 CV_MAKETYPE(CV_16S,4)\n#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))\n\n#define CV_32SC1 CV_MAKETYPE(CV_32S,1)\n#define CV_32SC2 CV_MAKETYPE(CV_32S,2)\n#define CV_32SC3 CV_MAKETYPE(CV_32S,3)\n#define CV_32SC4 CV_MAKETYPE(CV_32S,4)\n#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))\n\n#define CV_32FC1 CV_MAKETYPE(CV_32F,1)\n#define CV_32FC2 CV_MAKETYPE(CV_32F,2)\n#define CV_32FC3 CV_MAKETYPE(CV_32F,3)\n#define CV_32FC4 CV_MAKETYPE(CV_32F,4)\n#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))\n\n#define CV_64FC1 CV_MAKETYPE(CV_64F,1)\n#define CV_64FC2 CV_MAKETYPE(CV_64F,2)\n#define CV_64FC3 CV_MAKETYPE(CV_64F,3)\n#define CV_64FC4 CV_MAKETYPE(CV_64F,4)\n#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))\n\n#define CV_MAT_CN_MASK          ((CV_CN_MAX - 1) << CV_CN_SHIFT)\n#define CV_MAT_CN(flags)        ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1)\n#define CV_MAT_TYPE_MASK        (CV_DEPTH_MAX*CV_CN_MAX - 1)\n#define CV_MAT_TYPE(flags)      ((flags) & CV_MAT_TYPE_MASK)\n#define CV_MAT_CONT_FLAG_SHIFT  14\n#define CV_MAT_CONT_FLAG        (1 << CV_MAT_CONT_FLAG_SHIFT)\n#define CV_IS_MAT_CONT(flags)   ((flags) & CV_MAT_CONT_FLAG)\n#define CV_IS_CONT_MAT          CV_IS_MAT_CONT\n#define CV_SUBMAT_FLAG_SHIFT    15\n#define CV_SUBMAT_FLAG          (1 << CV_SUBMAT_FLAG_SHIFT)\n#define CV_IS_SUBMAT(flags)     ((flags) & CV_MAT_SUBMAT_FLAG)\n\n/** Size of each channel item,\n   0x124489 = 1000 0100 0100 0010 0010 0001 0001 ~ array of sizeof(arr_type_elem) */\n#define CV_ELEM_SIZE1(type) \\\n    ((((sizeof(size_t)<<28)|0x8442211) >> CV_MAT_DEPTH(type)*4) & 15)\n\n/** 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */\n#define CV_ELEM_SIZE(type) \\\n    (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3))\n\n#ifndef MIN\n#  define MIN(a,b)  ((a) > (b) ? (b) : (a))\n#endif\n\n#ifndef MAX\n#  define MAX(a,b)  ((a) < (b) ? (b) : (a))\n#endif\n\n/****************************************************************************************\\\n*          exchange-add operation for atomic operations on reference counters            *\n\\****************************************************************************************/\n\n#if defined __INTEL_COMPILER && !(defined WIN32 || defined _WIN32)\n   // atomic increment on the linux version of the Intel(tm) compiler\n#  define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd(const_cast<void*>(reinterpret_cast<volatile void*>(addr)), delta)\n#elif defined __GNUC__\n#  if defined __clang__ && __clang_major__ >= 3 && !defined __ANDROID__ && !defined __EMSCRIPTEN__ && !defined(__CUDACC__)\n#    ifdef __ATOMIC_ACQ_REL\n#      define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL)\n#    else\n#      define CV_XADD(addr, delta) __atomic_fetch_add((_Atomic(int)*)(addr), delta, 4)\n#    endif\n#  else\n#    if defined __ATOMIC_ACQ_REL && !defined __clang__\n       // version for gcc >= 4.7\n#      define CV_XADD(addr, delta) (int)__atomic_fetch_add((unsigned*)(addr), (unsigned)(delta), __ATOMIC_ACQ_REL)\n#    else\n#      define CV_XADD(addr, delta) (int)__sync_fetch_and_add((unsigned*)(addr), (unsigned)(delta))\n#    endif\n#  endif\n#elif defined _MSC_VER && !defined RC_INVOKED\n#  include <intrin.h>\n#  define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd((long volatile*)addr, delta)\n#else\n   CV_INLINE CV_XADD(int* addr, int delta) { int tmp = *addr; *addr += delta; return tmp; }\n#endif\n\n\n/****************************************************************************************\\\n*                                  CV_NORETURN attribute                                 *\n\\****************************************************************************************/\n\n#ifndef CV_NORETURN\n#  if defined(__GNUC__)\n#    define CV_NORETURN __attribute__((__noreturn__))\n#  elif defined(_MSC_VER) && (_MSC_VER >= 1300)\n#    define CV_NORETURN __declspec(noreturn)\n#  else\n#    define CV_NORETURN /* nothing by default */\n#  endif\n#endif\n\n\n/****************************************************************************************\\\n*                                    C++ Move semantics                                  *\n\\****************************************************************************************/\n\n#ifndef CV_CXX_MOVE_SEMANTICS\n#  if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) || defined(_MSC_VER) && _MSC_VER >= 1600\n#    define CV_CXX_MOVE_SEMANTICS 1\n#  elif defined(__clang)\n#    if __has_feature(cxx_rvalue_references)\n#      define CV_CXX_MOVE_SEMANTICS 1\n#    endif\n#  endif\n#else\n#  if CV_CXX_MOVE_SEMANTICS == 0\n#    undef CV_CXX_MOVE_SEMANTICS\n#  endif\n#endif\n\n//! @}\n\n#endif // __OPENCV_CORE_CVDEF_H__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/cvstd.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_CVSTD_HPP__\n#define __OPENCV_CORE_CVSTD_HPP__\n\n#ifndef __cplusplus\n#  error cvstd.hpp header must be compiled as C++\n#endif\n\n#include \"opencv2/core/cvdef.h\"\n\n#include <cstddef>\n#include <cstring>\n#include <cctype>\n\n#ifndef OPENCV_NOSTL\n#  include <string>\n#endif\n\n// import useful primitives from stl\n#ifndef OPENCV_NOSTL_TRANSITIONAL\n#  include <algorithm>\n#  include <utility>\n#  include <cstdlib> //for abs(int)\n#  include <cmath>\n\nnamespace cv\n{\n    using std::min;\n    using std::max;\n    using std::abs;\n    using std::swap;\n    using std::sqrt;\n    using std::exp;\n    using std::pow;\n    using std::log;\n}\n\nnamespace std\n{\n    static inline uchar abs(uchar a) { return a; }\n    static inline ushort abs(ushort a) { return a; }\n    static inline unsigned abs(unsigned a) { return a; }\n    static inline uint64 abs(uint64 a) { return a; }\n}\n\n#else\nnamespace cv\n{\n    template<typename T> static inline T min(T a, T b) { return a < b ? a : b; }\n    template<typename T> static inline T max(T a, T b) { return a > b ? a : b; }\n    template<typename T> static inline T abs(T a) { return a < 0 ? -a : a; }\n    template<typename T> static inline void swap(T& a, T& b) { T tmp = a; a = b; b = tmp; }\n\n    template<> inline uchar abs(uchar a) { return a; }\n    template<> inline ushort abs(ushort a) { return a; }\n    template<> inline unsigned abs(unsigned a) { return a; }\n    template<> inline uint64 abs(uint64 a) { return a; }\n}\n#endif\n\nnamespace cv {\n\n//! @addtogroup core_utils\n//! @{\n\n//////////////////////////// memory management functions ////////////////////////////\n\n/** @brief Allocates an aligned memory buffer.\n\nThe function allocates the buffer of the specified size and returns it. When the buffer size is 16\nbytes or more, the returned buffer is aligned to 16 bytes.\n@param bufSize Allocated buffer size.\n */\nCV_EXPORTS void* fastMalloc(size_t bufSize);\n\n/** @brief Deallocates a memory buffer.\n\nThe function deallocates the buffer allocated with fastMalloc . If NULL pointer is passed, the\nfunction does nothing. C version of the function clears the pointer *pptr* to avoid problems with\ndouble memory deallocation.\n@param ptr Pointer to the allocated buffer.\n */\nCV_EXPORTS void fastFree(void* ptr);\n\n/*!\n  The STL-compilant memory Allocator based on cv::fastMalloc() and cv::fastFree()\n*/\ntemplate<typename _Tp> class Allocator\n{\npublic:\n    typedef _Tp value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> class rebind { typedef Allocator<U> other; };\n\n    explicit Allocator() {}\n    ~Allocator() {}\n    explicit Allocator(Allocator const&) {}\n    template<typename U>\n    explicit Allocator(Allocator<U> const&) {}\n\n    // address\n    pointer address(reference r) { return &r; }\n    const_pointer address(const_reference r) { return &r; }\n\n    pointer allocate(size_type count, const void* =0) { return reinterpret_cast<pointer>(fastMalloc(count * sizeof (_Tp))); }\n    void deallocate(pointer p, size_type) { fastFree(p); }\n\n    void construct(pointer p, const _Tp& v) { new(static_cast<void*>(p)) _Tp(v); }\n    void destroy(pointer p) { p->~_Tp(); }\n\n    size_type max_size() const { return cv::max(static_cast<_Tp>(-1)/sizeof(_Tp), 1); }\n};\n\n//! @} core_utils\n\n//! @cond IGNORED\n\nnamespace detail\n{\n\n// Metafunction to avoid taking a reference to void.\ntemplate<typename T>\nstruct RefOrVoid { typedef T& type; };\n\ntemplate<>\nstruct RefOrVoid<void>{ typedef void type; };\n\ntemplate<>\nstruct RefOrVoid<const void>{ typedef const void type; };\n\ntemplate<>\nstruct RefOrVoid<volatile void>{ typedef volatile void type; };\n\ntemplate<>\nstruct RefOrVoid<const volatile void>{ typedef const volatile void type; };\n\n// This class would be private to Ptr, if it didn't have to be a non-template.\nstruct PtrOwner;\n\n}\n\ntemplate<typename Y>\nstruct DefaultDeleter\n{\n    void operator () (Y* p) const;\n};\n\n//! @endcond\n\n//! @addtogroup core_basic\n//! @{\n\n/** @brief Template class for smart pointers with shared ownership\n\nA Ptr\\<T\\> pretends to be a pointer to an object of type T. Unlike an ordinary pointer, however, the\nobject will be automatically cleaned up once all Ptr instances pointing to it are destroyed.\n\nPtr is similar to boost::shared_ptr that is part of the Boost library\n(<http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm>) and std::shared_ptr from\nthe [C++11](http://en.wikipedia.org/wiki/C++11) standard.\n\nThis class provides the following advantages:\n-   Default constructor, copy constructor, and assignment operator for an arbitrary C++ class or C\n    structure. For some objects, like files, windows, mutexes, sockets, and others, a copy\n    constructor or an assignment operator are difficult to define. For some other objects, like\n    complex classifiers in OpenCV, copy constructors are absent and not easy to implement. Finally,\n    some of complex OpenCV and your own data structures may be written in C. However, copy\n    constructors and default constructors can simplify programming a lot. Besides, they are often\n    required (for example, by STL containers). By using a Ptr to such an object instead of the\n    object itself, you automatically get all of the necessary constructors and the assignment\n    operator.\n-   *O(1)* complexity of the above-mentioned operations. While some structures, like std::vector,\n    provide a copy constructor and an assignment operator, the operations may take a considerable\n    amount of time if the data structures are large. But if the structures are put into a Ptr, the\n    overhead is small and independent of the data size.\n-   Automatic and customizable cleanup, even for C structures. See the example below with FILE\\*.\n-   Heterogeneous collections of objects. The standard STL and most other C++ and OpenCV containers\n    can store only objects of the same type and the same size. The classical solution to store\n    objects of different types in the same container is to store pointers to the base class (Base\\*)\n    instead but then you lose the automatic memory management. Again, by using Ptr\\<Base\\> instead\n    of raw pointers, you can solve the problem.\n\nA Ptr is said to *own* a pointer - that is, for each Ptr there is a pointer that will be deleted\nonce all Ptr instances that own it are destroyed. The owned pointer may be null, in which case\nnothing is deleted. Each Ptr also *stores* a pointer. The stored pointer is the pointer the Ptr\npretends to be; that is, the one you get when you use Ptr::get or the conversion to T\\*. It's\nusually the same as the owned pointer, but if you use casts or the general shared-ownership\nconstructor, the two may diverge: the Ptr will still own the original pointer, but will itself point\nto something else.\n\nThe owned pointer is treated as a black box. The only thing Ptr needs to know about it is how to\ndelete it. This knowledge is encapsulated in the *deleter* - an auxiliary object that is associated\nwith the owned pointer and shared between all Ptr instances that own it. The default deleter is an\ninstance of DefaultDeleter, which uses the standard C++ delete operator; as such it will work with\nany pointer allocated with the standard new operator.\n\nHowever, if the pointer must be deleted in a different way, you must specify a custom deleter upon\nPtr construction. A deleter is simply a callable object that accepts the pointer as its sole\nargument. For example, if you want to wrap FILE, you may do so as follows:\n@code\n    Ptr<FILE> f(fopen(\"myfile.txt\", \"w\"), fclose);\n    if(!f) throw ...;\n    fprintf(f, ....);\n    ...\n    // the file will be closed automatically by f's destructor.\n@endcode\nAlternatively, if you want all pointers of a particular type to be deleted the same way, you can\nspecialize DefaultDeleter<T>::operator() for that type, like this:\n@code\n    namespace cv {\n    template<> void DefaultDeleter<FILE>::operator ()(FILE * obj) const\n    {\n        fclose(obj);\n    }\n    }\n@endcode\nFor convenience, the following types from the OpenCV C API already have such a specialization that\ncalls the appropriate release function:\n-   CvCapture\n-   CvFileStorage\n-   CvHaarClassifierCascade\n-   CvMat\n-   CvMatND\n-   CvMemStorage\n-   CvSparseMat\n-   CvVideoWriter\n-   IplImage\n@note The shared ownership mechanism is implemented with reference counting. As such, cyclic\nownership (e.g. when object a contains a Ptr to object b, which contains a Ptr to object a) will\nlead to all involved objects never being cleaned up. Avoid such situations.\n@note It is safe to concurrently read (but not write) a Ptr instance from multiple threads and\ntherefore it is normally safe to use it in multi-threaded applications. The same is true for Mat and\nother C++ OpenCV classes that use internal reference counts.\n*/\ntemplate<typename T>\nstruct Ptr\n{\n    /** Generic programming support. */\n    typedef T element_type;\n\n    /** The default constructor creates a null Ptr - one that owns and stores a null pointer.\n    */\n    Ptr();\n\n    /**\n    If p is null, these are equivalent to the default constructor.\n    Otherwise, these constructors assume ownership of p - that is, the created Ptr owns and stores p\n    and assumes it is the sole owner of it. Don't use them if p is already owned by another Ptr, or\n    else p will get deleted twice.\n    With the first constructor, DefaultDeleter\\<Y\\>() becomes the associated deleter (so p will\n    eventually be deleted with the standard delete operator). Y must be a complete type at the point\n    of invocation.\n    With the second constructor, d becomes the associated deleter.\n    Y\\* must be convertible to T\\*.\n    @param p Pointer to own.\n    @note It is often easier to use makePtr instead.\n     */\n    template<typename Y>\n#ifdef DISABLE_OPENCV_24_COMPATIBILITY\n    explicit\n#endif\n    Ptr(Y* p);\n\n    /** @overload\n    @param d Deleter to use for the owned pointer.\n    @param p Pointer to own.\n    */\n    template<typename Y, typename D>\n    Ptr(Y* p, D d);\n\n    /**\n    These constructors create a Ptr that shares ownership with another Ptr - that is, own the same\n    pointer as o.\n    With the first two, the same pointer is stored, as well; for the second, Y\\* must be convertible\n    to T\\*.\n    With the third, p is stored, and Y may be any type. This constructor allows to have completely\n    unrelated owned and stored pointers, and should be used with care to avoid confusion. A relatively\n    benign use is to create a non-owning Ptr, like this:\n    @code\n        ptr = Ptr<T>(Ptr<T>(), dont_delete_me); // owns nothing; will not delete the pointer.\n    @endcode\n    @param o Ptr to share ownership with.\n    */\n    Ptr(const Ptr& o);\n\n    /** @overload\n    @param o Ptr to share ownership with.\n    */\n    template<typename Y>\n    Ptr(const Ptr<Y>& o);\n\n    /** @overload\n    @param o Ptr to share ownership with.\n    @param p Pointer to store.\n    */\n    template<typename Y>\n    Ptr(const Ptr<Y>& o, T* p);\n\n    /** The destructor is equivalent to calling Ptr::release. */\n    ~Ptr();\n\n    /**\n    Assignment replaces the current Ptr instance with one that owns and stores same pointers as o and\n    then destroys the old instance.\n    @param o Ptr to share ownership with.\n     */\n    Ptr& operator = (const Ptr& o);\n\n    /** @overload */\n    template<typename Y>\n    Ptr& operator = (const Ptr<Y>& o);\n\n    /** If no other Ptr instance owns the owned pointer, deletes it with the associated deleter. Then sets\n    both the owned and the stored pointers to NULL.\n    */\n    void release();\n\n    /**\n    `ptr.reset(...)` is equivalent to `ptr = Ptr<T>(...)`.\n    @param p Pointer to own.\n    */\n    template<typename Y>\n    void reset(Y* p);\n\n    /** @overload\n    @param d Deleter to use for the owned pointer.\n    @param p Pointer to own.\n    */\n    template<typename Y, typename D>\n    void reset(Y* p, D d);\n\n    /**\n    Swaps the owned and stored pointers (and deleters, if any) of this and o.\n    @param o Ptr to swap with.\n    */\n    void swap(Ptr& o);\n\n    /** Returns the stored pointer. */\n    T* get() const;\n\n    /** Ordinary pointer emulation. */\n    typename detail::RefOrVoid<T>::type operator * () const;\n\n    /** Ordinary pointer emulation. */\n    T* operator -> () const;\n\n    /** Equivalent to get(). */\n    operator T* () const;\n\n    /** ptr.empty() is equivalent to `!ptr.get()`. */\n    bool empty() const;\n\n    /** Returns a Ptr that owns the same pointer as this, and stores the same\n       pointer as this, except converted via static_cast to Y*.\n    */\n    template<typename Y>\n    Ptr<Y> staticCast() const;\n\n    /** Ditto for const_cast. */\n    template<typename Y>\n    Ptr<Y> constCast() const;\n\n    /** Ditto for dynamic_cast. */\n    template<typename Y>\n    Ptr<Y> dynamicCast() const;\n\n#ifdef CV_CXX_MOVE_SEMANTICS\n    Ptr(Ptr&& o);\n    Ptr& operator = (Ptr&& o);\n#endif\n\nprivate:\n    detail::PtrOwner* owner;\n    T* stored;\n\n    template<typename Y>\n    friend struct Ptr; // have to do this for the cross-type copy constructor\n};\n\n/** Equivalent to ptr1.swap(ptr2). Provided to help write generic algorithms. */\ntemplate<typename T>\nvoid swap(Ptr<T>& ptr1, Ptr<T>& ptr2);\n\n/** Return whether ptr1.get() and ptr2.get() are equal and not equal, respectively. */\ntemplate<typename T>\nbool operator == (const Ptr<T>& ptr1, const Ptr<T>& ptr2);\ntemplate<typename T>\nbool operator != (const Ptr<T>& ptr1, const Ptr<T>& ptr2);\n\n/** `makePtr<T>(...)` is equivalent to `Ptr<T>(new T(...))`. It is shorter than the latter, and it's\nmarginally safer than using a constructor or Ptr::reset, since it ensures that the owned pointer\nis new and thus not owned by any other Ptr instance.\nUnfortunately, perfect forwarding is impossible to implement in C++03, and so makePtr is limited\nto constructors of T that have up to 10 arguments, none of which are non-const references.\n */\ntemplate<typename T>\nPtr<T> makePtr();\n/** @overload */\ntemplate<typename T, typename A1>\nPtr<T> makePtr(const A1& a1);\n/** @overload */\ntemplate<typename T, typename A1, typename A2>\nPtr<T> makePtr(const A1& a1, const A2& a2);\n/** @overload */\ntemplate<typename T, typename A1, typename A2, typename A3>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3);\n/** @overload */\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4);\n/** @overload */\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5);\n/** @overload */\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6);\n/** @overload */\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7);\n/** @overload */\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8);\n/** @overload */\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9);\n/** @overload */\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, const A10& a10);\n\n//////////////////////////////// string class ////////////////////////////////\n\nclass CV_EXPORTS FileNode; //for string constructor from FileNode\n\nclass CV_EXPORTS String\n{\npublic:\n    typedef char value_type;\n    typedef char& reference;\n    typedef const char& const_reference;\n    typedef char* pointer;\n    typedef const char* const_pointer;\n    typedef ptrdiff_t difference_type;\n    typedef size_t size_type;\n    typedef char* iterator;\n    typedef const char* const_iterator;\n\n    static const size_t npos = size_t(-1);\n\n    explicit String();\n    String(const String& str);\n    String(const String& str, size_t pos, size_t len = npos);\n    String(const char* s);\n    String(const char* s, size_t n);\n    String(size_t n, char c);\n    String(const char* first, const char* last);\n    template<typename Iterator> String(Iterator first, Iterator last);\n    explicit String(const FileNode& fn);\n    ~String();\n\n    String& operator=(const String& str);\n    String& operator=(const char* s);\n    String& operator=(char c);\n\n    String& operator+=(const String& str);\n    String& operator+=(const char* s);\n    String& operator+=(char c);\n\n    size_t size() const;\n    size_t length() const;\n\n    char operator[](size_t idx) const;\n    char operator[](int idx) const;\n\n    const char* begin() const;\n    const char* end() const;\n\n    const char* c_str() const;\n\n    bool empty() const;\n    void clear();\n\n    int compare(const char* s) const;\n    int compare(const String& str) const;\n\n    void swap(String& str);\n    String substr(size_t pos = 0, size_t len = npos) const;\n\n    size_t find(const char* s, size_t pos, size_t n) const;\n    size_t find(char c, size_t pos = 0) const;\n    size_t find(const String& str, size_t pos = 0) const;\n    size_t find(const char* s, size_t pos = 0) const;\n\n    size_t rfind(const char* s, size_t pos, size_t n) const;\n    size_t rfind(char c, size_t pos = npos) const;\n    size_t rfind(const String& str, size_t pos = npos) const;\n    size_t rfind(const char* s, size_t pos = npos) const;\n\n    size_t find_first_of(const char* s, size_t pos, size_t n) const;\n    size_t find_first_of(char c, size_t pos = 0) const;\n    size_t find_first_of(const String& str, size_t pos = 0) const;\n    size_t find_first_of(const char* s, size_t pos = 0) const;\n\n    size_t find_last_of(const char* s, size_t pos, size_t n) const;\n    size_t find_last_of(char c, size_t pos = npos) const;\n    size_t find_last_of(const String& str, size_t pos = npos) const;\n    size_t find_last_of(const char* s, size_t pos = npos) const;\n\n    friend String operator+ (const String& lhs, const String& rhs);\n    friend String operator+ (const String& lhs, const char*   rhs);\n    friend String operator+ (const char*   lhs, const String& rhs);\n    friend String operator+ (const String& lhs, char          rhs);\n    friend String operator+ (char          lhs, const String& rhs);\n\n    String toLowerCase() const;\n\n#ifndef OPENCV_NOSTL\n    String(const std::string& str);\n    String(const std::string& str, size_t pos, size_t len = npos);\n    String& operator=(const std::string& str);\n    String& operator+=(const std::string& str);\n    operator std::string() const;\n\n    friend String operator+ (const String& lhs, const std::string& rhs);\n    friend String operator+ (const std::string& lhs, const String& rhs);\n#endif\n\nprivate:\n    char*  cstr_;\n    size_t len_;\n\n    char* allocate(size_t len); // len without trailing 0\n    void deallocate();\n\n    String(int); // disabled and invalid. Catch invalid usages like, commandLineParser.has(0) problem\n};\n\n//! @} core_basic\n\n////////////////////////// cv::String implementation /////////////////////////\n\n//! @cond IGNORED\n\ninline\nString::String()\n    : cstr_(0), len_(0)\n{}\n\ninline\nString::String(const String& str)\n    : cstr_(str.cstr_), len_(str.len_)\n{\n    if (cstr_)\n        CV_XADD(((int*)cstr_)-1, 1);\n}\n\ninline\nString::String(const String& str, size_t pos, size_t len)\n    : cstr_(0), len_(0)\n{\n    pos = min(pos, str.len_);\n    len = min(str.len_ - pos, len);\n    if (!len) return;\n    if (len == str.len_)\n    {\n        CV_XADD(((int*)str.cstr_)-1, 1);\n        cstr_ = str.cstr_;\n        len_ = str.len_;\n        return;\n    }\n    memcpy(allocate(len), str.cstr_ + pos, len);\n}\n\ninline\nString::String(const char* s)\n    : cstr_(0), len_(0)\n{\n    if (!s) return;\n    size_t len = strlen(s);\n    memcpy(allocate(len), s, len);\n}\n\ninline\nString::String(const char* s, size_t n)\n    : cstr_(0), len_(0)\n{\n    if (!n) return;\n    memcpy(allocate(n), s, n);\n}\n\ninline\nString::String(size_t n, char c)\n    : cstr_(0), len_(0)\n{\n    memset(allocate(n), c, n);\n}\n\ninline\nString::String(const char* first, const char* last)\n    : cstr_(0), len_(0)\n{\n    size_t len = (size_t)(last - first);\n    memcpy(allocate(len), first, len);\n}\n\ntemplate<typename Iterator> inline\nString::String(Iterator first, Iterator last)\n    : cstr_(0), len_(0)\n{\n    size_t len = (size_t)(last - first);\n    char* str = allocate(len);\n    while (first != last)\n    {\n        *str++ = *first;\n        ++first;\n    }\n}\n\ninline\nString::~String()\n{\n    deallocate();\n}\n\ninline\nString& String::operator=(const String& str)\n{\n    if (&str == this) return *this;\n\n    deallocate();\n    if (str.cstr_) CV_XADD(((int*)str.cstr_)-1, 1);\n    cstr_ = str.cstr_;\n    len_ = str.len_;\n    return *this;\n}\n\ninline\nString& String::operator=(const char* s)\n{\n    deallocate();\n    if (!s) return *this;\n    size_t len = strlen(s);\n    memcpy(allocate(len), s, len);\n    return *this;\n}\n\ninline\nString& String::operator=(char c)\n{\n    deallocate();\n    allocate(1)[0] = c;\n    return *this;\n}\n\ninline\nString& String::operator+=(const String& str)\n{\n    *this = *this + str;\n    return *this;\n}\n\ninline\nString& String::operator+=(const char* s)\n{\n    *this = *this + s;\n    return *this;\n}\n\ninline\nString& String::operator+=(char c)\n{\n    *this = *this + c;\n    return *this;\n}\n\ninline\nsize_t String::size() const\n{\n    return len_;\n}\n\ninline\nsize_t String::length() const\n{\n    return len_;\n}\n\ninline\nchar String::operator[](size_t idx) const\n{\n    return cstr_[idx];\n}\n\ninline\nchar String::operator[](int idx) const\n{\n    return cstr_[idx];\n}\n\ninline\nconst char* String::begin() const\n{\n    return cstr_;\n}\n\ninline\nconst char* String::end() const\n{\n    return len_ ? cstr_ + 1 : 0;\n}\n\ninline\nbool String::empty() const\n{\n    return len_ == 0;\n}\n\ninline\nconst char* String::c_str() const\n{\n    return cstr_ ? cstr_ : \"\";\n}\n\ninline\nvoid String::swap(String& str)\n{\n    cv::swap(cstr_, str.cstr_);\n    cv::swap(len_, str.len_);\n}\n\ninline\nvoid String::clear()\n{\n    deallocate();\n}\n\ninline\nint String::compare(const char* s) const\n{\n    if (cstr_ == s) return 0;\n    return strcmp(c_str(), s);\n}\n\ninline\nint String::compare(const String& str) const\n{\n    if (cstr_ == str.cstr_) return 0;\n    return strcmp(c_str(), str.c_str());\n}\n\ninline\nString String::substr(size_t pos, size_t len) const\n{\n    return String(*this, pos, len);\n}\n\ninline\nsize_t String::find(const char* s, size_t pos, size_t n) const\n{\n    if (n == 0 || pos + n > len_) return npos;\n    const char* lmax = cstr_ + len_ - n;\n    for (const char* i = cstr_ + pos; i <= lmax; ++i)\n    {\n        size_t j = 0;\n        while (j < n && s[j] == i[j]) ++j;\n        if (j == n) return (size_t)(i - cstr_);\n    }\n    return npos;\n}\n\ninline\nsize_t String::find(char c, size_t pos) const\n{\n    return find(&c, pos, 1);\n}\n\ninline\nsize_t String::find(const String& str, size_t pos) const\n{\n    return find(str.c_str(), pos, str.len_);\n}\n\ninline\nsize_t String::find(const char* s, size_t pos) const\n{\n    if (pos >= len_ || !s[0]) return npos;\n    const char* lmax = cstr_ + len_;\n    for (const char* i = cstr_ + pos; i < lmax; ++i)\n    {\n        size_t j = 0;\n        while (s[j] && s[j] == i[j])\n        {   if(i + j >= lmax) return npos;\n            ++j;\n        }\n        if (!s[j]) return (size_t)(i - cstr_);\n    }\n    return npos;\n}\n\ninline\nsize_t String::rfind(const char* s, size_t pos, size_t n) const\n{\n    if (n > len_) return npos;\n    if (pos > len_ - n) pos = len_ - n;\n    for (const char* i = cstr_ + pos; i >= cstr_; --i)\n    {\n        size_t j = 0;\n        while (j < n && s[j] == i[j]) ++j;\n        if (j == n) return (size_t)(i - cstr_);\n    }\n    return npos;\n}\n\ninline\nsize_t String::rfind(char c, size_t pos) const\n{\n    return rfind(&c, pos, 1);\n}\n\ninline\nsize_t String::rfind(const String& str, size_t pos) const\n{\n    return rfind(str.c_str(), pos, str.len_);\n}\n\ninline\nsize_t String::rfind(const char* s, size_t pos) const\n{\n    return rfind(s, pos, strlen(s));\n}\n\ninline\nsize_t String::find_first_of(const char* s, size_t pos, size_t n) const\n{\n    if (n == 0 || pos + n > len_) return npos;\n    const char* lmax = cstr_ + len_;\n    for (const char* i = cstr_ + pos; i < lmax; ++i)\n    {\n        for (size_t j = 0; j < n; ++j)\n            if (s[j] == *i)\n                return (size_t)(i - cstr_);\n    }\n    return npos;\n}\n\ninline\nsize_t String::find_first_of(char c, size_t pos) const\n{\n    return find_first_of(&c, pos, 1);\n}\n\ninline\nsize_t String::find_first_of(const String& str, size_t pos) const\n{\n    return find_first_of(str.c_str(), pos, str.len_);\n}\n\ninline\nsize_t String::find_first_of(const char* s, size_t pos) const\n{\n    if (len_ == 0) return npos;\n    if (pos >= len_ || !s[0]) return npos;\n    const char* lmax = cstr_ + len_;\n    for (const char* i = cstr_ + pos; i < lmax; ++i)\n    {\n        for (size_t j = 0; s[j]; ++j)\n            if (s[j] == *i)\n                return (size_t)(i - cstr_);\n    }\n    return npos;\n}\n\ninline\nsize_t String::find_last_of(const char* s, size_t pos, size_t n) const\n{\n    if (len_ == 0) return npos;\n    if (pos >= len_) pos = len_ - 1;\n    for (const char* i = cstr_ + pos; i >= cstr_; --i)\n    {\n        for (size_t j = 0; j < n; ++j)\n            if (s[j] == *i)\n                return (size_t)(i - cstr_);\n    }\n    return npos;\n}\n\ninline\nsize_t String::find_last_of(char c, size_t pos) const\n{\n    return find_last_of(&c, pos, 1);\n}\n\ninline\nsize_t String::find_last_of(const String& str, size_t pos) const\n{\n    return find_last_of(str.c_str(), pos, str.len_);\n}\n\ninline\nsize_t String::find_last_of(const char* s, size_t pos) const\n{\n    if (len_ == 0) return npos;\n    if (pos >= len_) pos = len_ - 1;\n    for (const char* i = cstr_ + pos; i >= cstr_; --i)\n    {\n        for (size_t j = 0; s[j]; ++j)\n            if (s[j] == *i)\n                return (size_t)(i - cstr_);\n    }\n    return npos;\n}\n\ninline\nString String::toLowerCase() const\n{\n    String res(cstr_, len_);\n\n    for (size_t i = 0; i < len_; ++i)\n        res.cstr_[i] = (char) ::tolower(cstr_[i]);\n\n    return res;\n}\n\n//! @endcond\n\n// ************************* cv::String non-member functions *************************\n\n//! @relates cv::String\n//! @{\n\ninline\nString operator + (const String& lhs, const String& rhs)\n{\n    String s;\n    s.allocate(lhs.len_ + rhs.len_);\n    memcpy(s.cstr_, lhs.cstr_, lhs.len_);\n    memcpy(s.cstr_ + lhs.len_, rhs.cstr_, rhs.len_);\n    return s;\n}\n\ninline\nString operator + (const String& lhs, const char* rhs)\n{\n    String s;\n    size_t rhslen = strlen(rhs);\n    s.allocate(lhs.len_ + rhslen);\n    memcpy(s.cstr_, lhs.cstr_, lhs.len_);\n    memcpy(s.cstr_ + lhs.len_, rhs, rhslen);\n    return s;\n}\n\ninline\nString operator + (const char* lhs, const String& rhs)\n{\n    String s;\n    size_t lhslen = strlen(lhs);\n    s.allocate(lhslen + rhs.len_);\n    memcpy(s.cstr_, lhs, lhslen);\n    memcpy(s.cstr_ + lhslen, rhs.cstr_, rhs.len_);\n    return s;\n}\n\ninline\nString operator + (const String& lhs, char rhs)\n{\n    String s;\n    s.allocate(lhs.len_ + 1);\n    memcpy(s.cstr_, lhs.cstr_, lhs.len_);\n    s.cstr_[lhs.len_] = rhs;\n    return s;\n}\n\ninline\nString operator + (char lhs, const String& rhs)\n{\n    String s;\n    s.allocate(rhs.len_ + 1);\n    s.cstr_[0] = lhs;\n    memcpy(s.cstr_ + 1, rhs.cstr_, rhs.len_);\n    return s;\n}\n\nstatic inline bool operator== (const String& lhs, const String& rhs) { return 0 == lhs.compare(rhs); }\nstatic inline bool operator== (const char*   lhs, const String& rhs) { return 0 == rhs.compare(lhs); }\nstatic inline bool operator== (const String& lhs, const char*   rhs) { return 0 == lhs.compare(rhs); }\nstatic inline bool operator!= (const String& lhs, const String& rhs) { return 0 != lhs.compare(rhs); }\nstatic inline bool operator!= (const char*   lhs, const String& rhs) { return 0 != rhs.compare(lhs); }\nstatic inline bool operator!= (const String& lhs, const char*   rhs) { return 0 != lhs.compare(rhs); }\nstatic inline bool operator<  (const String& lhs, const String& rhs) { return lhs.compare(rhs) <  0; }\nstatic inline bool operator<  (const char*   lhs, const String& rhs) { return rhs.compare(lhs) >  0; }\nstatic inline bool operator<  (const String& lhs, const char*   rhs) { return lhs.compare(rhs) <  0; }\nstatic inline bool operator<= (const String& lhs, const String& rhs) { return lhs.compare(rhs) <= 0; }\nstatic inline bool operator<= (const char*   lhs, const String& rhs) { return rhs.compare(lhs) >= 0; }\nstatic inline bool operator<= (const String& lhs, const char*   rhs) { return lhs.compare(rhs) <= 0; }\nstatic inline bool operator>  (const String& lhs, const String& rhs) { return lhs.compare(rhs) >  0; }\nstatic inline bool operator>  (const char*   lhs, const String& rhs) { return rhs.compare(lhs) <  0; }\nstatic inline bool operator>  (const String& lhs, const char*   rhs) { return lhs.compare(rhs) >  0; }\nstatic inline bool operator>= (const String& lhs, const String& rhs) { return lhs.compare(rhs) >= 0; }\nstatic inline bool operator>= (const char*   lhs, const String& rhs) { return rhs.compare(lhs) <= 0; }\nstatic inline bool operator>= (const String& lhs, const char*   rhs) { return lhs.compare(rhs) >= 0; }\n\n//! @} relates cv::String\n\n} // cv\n\n#ifndef OPENCV_NOSTL_TRANSITIONAL\nnamespace std\n{\n    static inline void swap(cv::String& a, cv::String& b) { a.swap(b); }\n}\n#else\nnamespace cv\n{\n    template<> inline\n    void swap<cv::String>(cv::String& a, cv::String& b)\n    {\n        a.swap(b);\n    }\n}\n#endif\n\n#include \"opencv2/core/ptr.inl.hpp\"\n\n#endif //__OPENCV_CORE_CVSTD_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/cvstd.inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_CVSTDINL_HPP__\n#define __OPENCV_CORE_CVSTDINL_HPP__\n\n#ifndef OPENCV_NOSTL\n#  include <complex>\n#  include <ostream>\n#endif\n\n//! @cond IGNORED\n\nnamespace cv\n{\n#ifndef OPENCV_NOSTL\n\ntemplate<typename _Tp> class DataType< std::complex<_Tp> >\n{\npublic:\n    typedef std::complex<_Tp>  value_type;\n    typedef value_type         work_type;\n    typedef _Tp                channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = 2,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels) };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ninline\nString::String(const std::string& str)\n    : cstr_(0), len_(0)\n{\n    if (!str.empty())\n    {\n        size_t len = str.size();\n        memcpy(allocate(len), str.c_str(), len);\n    }\n}\n\ninline\nString::String(const std::string& str, size_t pos, size_t len)\n    : cstr_(0), len_(0)\n{\n    size_t strlen = str.size();\n    pos = min(pos, strlen);\n    len = min(strlen - pos, len);\n    if (!len) return;\n    memcpy(allocate(len), str.c_str() + pos, len);\n}\n\ninline\nString& String::operator = (const std::string& str)\n{\n    deallocate();\n    if (!str.empty())\n    {\n        size_t len = str.size();\n        memcpy(allocate(len), str.c_str(), len);\n    }\n    return *this;\n}\n\ninline\nString& String::operator += (const std::string& str)\n{\n    *this = *this + str;\n    return *this;\n}\n\ninline\nString::operator std::string() const\n{\n    return std::string(cstr_, len_);\n}\n\ninline\nString operator + (const String& lhs, const std::string& rhs)\n{\n    String s;\n    size_t rhslen = rhs.size();\n    s.allocate(lhs.len_ + rhslen);\n    memcpy(s.cstr_, lhs.cstr_, lhs.len_);\n    memcpy(s.cstr_ + lhs.len_, rhs.c_str(), rhslen);\n    return s;\n}\n\ninline\nString operator + (const std::string& lhs, const String& rhs)\n{\n    String s;\n    size_t lhslen = lhs.size();\n    s.allocate(lhslen + rhs.len_);\n    memcpy(s.cstr_, lhs.c_str(), lhslen);\n    memcpy(s.cstr_ + lhslen, rhs.cstr_, rhs.len_);\n    return s;\n}\n\ninline\nFileNode::operator std::string() const\n{\n    String value;\n    read(*this, value, value);\n    return value;\n}\n\ntemplate<> inline\nvoid operator >> (const FileNode& n, std::string& value)\n{\n    String val;\n    read(n, val, val);\n    value = val;\n}\n\ntemplate<> inline\nFileStorage& operator << (FileStorage& fs, const std::string& value)\n{\n    return fs << cv::String(value);\n}\n\nstatic inline\nstd::ostream& operator << (std::ostream& os, const String& str)\n{\n    return os << str.c_str();\n}\n\nstatic inline\nstd::ostream& operator << (std::ostream& out, Ptr<Formatted> fmtd)\n{\n    fmtd->reset();\n    for(const char* str = fmtd->next(); str; str = fmtd->next())\n        out << str;\n    return out;\n}\n\nstatic inline\nstd::ostream& operator << (std::ostream& out, const Mat& mtx)\n{\n    return out << Formatter::get()->format(mtx);\n}\n\ntemplate<typename _Tp> static inline\nstd::ostream& operator << (std::ostream& out, const std::vector<Point_<_Tp> >& vec)\n{\n    return out << Formatter::get()->format(Mat(vec));\n}\n\n\ntemplate<typename _Tp> static inline\nstd::ostream& operator << (std::ostream& out, const std::vector<Point3_<_Tp> >& vec)\n{\n    return out << Formatter::get()->format(Mat(vec));\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nstd::ostream& operator << (std::ostream& out, const Matx<_Tp, m, n>& matx)\n{\n    return out << Formatter::get()->format(Mat(matx));\n}\n\ntemplate<typename _Tp> static inline\nstd::ostream& operator << (std::ostream& out, const Point_<_Tp>& p)\n{\n    out << \"[\" << p.x << \", \" << p.y << \"]\";\n    return out;\n}\n\ntemplate<typename _Tp> static inline\nstd::ostream& operator << (std::ostream& out, const Point3_<_Tp>& p)\n{\n    out << \"[\" << p.x << \", \" << p.y << \", \" << p.z << \"]\";\n    return out;\n}\n\ntemplate<typename _Tp, int n> static inline\nstd::ostream& operator << (std::ostream& out, const Vec<_Tp, n>& vec)\n{\n    out << \"[\";\n#ifdef _MSC_VER\n#pragma warning( push )\n#pragma warning( disable: 4127 )\n#endif\n    if(Vec<_Tp, n>::depth < CV_32F)\n#ifdef _MSC_VER\n#pragma warning( pop )\n#endif\n    {\n        for (int i = 0; i < n - 1; ++i) {\n            out << (int)vec[i] << \", \";\n        }\n        out << (int)vec[n-1] << \"]\";\n    }\n    else\n    {\n        for (int i = 0; i < n - 1; ++i) {\n            out << vec[i] << \", \";\n        }\n        out << vec[n-1] << \"]\";\n    }\n\n    return out;\n}\n\ntemplate<typename _Tp> static inline\nstd::ostream& operator << (std::ostream& out, const Size_<_Tp>& size)\n{\n    return out << \"[\" << size.width << \" x \" << size.height << \"]\";\n}\n\ntemplate<typename _Tp> static inline\nstd::ostream& operator << (std::ostream& out, const Rect_<_Tp>& rect)\n{\n    return out << \"[\" << rect.width << \" x \" << rect.height << \" from (\" << rect.x << \", \" << rect.y << \")]\";\n}\n\n\n#endif // OPENCV_NOSTL\n} // cv\n\n//! @endcond\n\n#endif // __OPENCV_CORE_CVSTDINL_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/directx.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors as is and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the copyright holders or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_DIRECTX_HPP__\n#define __OPENCV_CORE_DIRECTX_HPP__\n\n#include \"mat.hpp\"\n#include \"ocl.hpp\"\n\n#if !defined(__d3d11_h__)\nstruct ID3D11Device;\nstruct ID3D11Texture2D;\n#endif\n\n#if !defined(__d3d10_h__)\nstruct ID3D10Device;\nstruct ID3D10Texture2D;\n#endif\n\n#if !defined(_D3D9_H_)\nstruct IDirect3DDevice9;\nstruct IDirect3DDevice9Ex;\nstruct IDirect3DSurface9;\n#endif\n\n\nnamespace cv { namespace directx {\n\nnamespace ocl {\nusing namespace cv::ocl;\n\n//! @addtogroup core_directx\n// This section describes OpenCL and DirectX interoperability.\n//\n// To enable DirectX support, configure OpenCV using CMake with WITH_DIRECTX=ON . Note, DirectX is\n// supported only on Windows.\n//\n// To use OpenCL functionality you should first initialize OpenCL context from DirectX resource.\n//\n//! @{\n\n// TODO static functions in the Context class\n//! @brief Creates OpenCL context from D3D11 device\n//\n//! @param pD3D11Device - pointer to D3D11 device\n//! @return Returns reference to OpenCL Context\nCV_EXPORTS Context& initializeContextFromD3D11Device(ID3D11Device* pD3D11Device);\n\n//! @brief Creates OpenCL context from D3D10 device\n//\n//! @param pD3D10Device - pointer to D3D10 device\n//! @return Returns reference to OpenCL Context\nCV_EXPORTS Context& initializeContextFromD3D10Device(ID3D10Device* pD3D10Device);\n\n//! @brief Creates OpenCL context from Direct3DDevice9Ex device\n//\n//! @param pDirect3DDevice9Ex - pointer to Direct3DDevice9Ex device\n//! @return Returns reference to OpenCL Context\nCV_EXPORTS Context& initializeContextFromDirect3DDevice9Ex(IDirect3DDevice9Ex* pDirect3DDevice9Ex);\n\n//! @brief Creates OpenCL context from Direct3DDevice9 device\n//\n//! @param pDirect3DDevice9 - pointer to Direct3Device9 device\n//! @return Returns reference to OpenCL Context\nCV_EXPORTS Context& initializeContextFromDirect3DDevice9(IDirect3DDevice9* pDirect3DDevice9);\n\n//! @}\n\n} // namespace cv::directx::ocl\n\n//! @addtogroup core_directx\n//! @{\n\n//! @brief Converts InputArray to ID3D11Texture2D. If destination texture format is DXGI_FORMAT_NV12 then\n//!        input UMat expected to be in BGR format and data will be downsampled and color-converted to NV12.\n//\n//! @note Note: Destination texture must be allocated by application. Function does memory copy from src to\n//!             pD3D11Texture2D\n//\n//! @param src - source InputArray\n//! @param pD3D11Texture2D - destination D3D11 texture\nCV_EXPORTS void convertToD3D11Texture2D(InputArray src, ID3D11Texture2D* pD3D11Texture2D);\n\n//! @brief Converts ID3D11Texture2D to OutputArray. If input texture format is DXGI_FORMAT_NV12 then\n//!        data will be upsampled and color-converted to BGR format.\n//\n//! @note Note: Destination matrix will be re-allocated if it has not enough memory to match texture size.\n//!             function does memory copy from pD3D11Texture2D to dst\n//\n//! @param pD3D11Texture2D - source D3D11 texture\n//! @param dst             - destination OutputArray\nCV_EXPORTS void convertFromD3D11Texture2D(ID3D11Texture2D* pD3D11Texture2D, OutputArray dst);\n\n//! @brief Converts InputArray to ID3D10Texture2D\n//\n//! @note Note: function does memory copy from src to\n//!             pD3D10Texture2D\n//\n//! @param src             - source InputArray\n//! @param pD3D10Texture2D - destination D3D10 texture\nCV_EXPORTS void convertToD3D10Texture2D(InputArray src, ID3D10Texture2D* pD3D10Texture2D);\n\n//! @brief Converts ID3D10Texture2D to OutputArray\n//\n//! @note Note: function does memory copy from pD3D10Texture2D\n//!             to dst\n//\n//! @param pD3D10Texture2D - source D3D10 texture\n//! @param dst             - destination OutputArray\nCV_EXPORTS void convertFromD3D10Texture2D(ID3D10Texture2D* pD3D10Texture2D, OutputArray dst);\n\n//! @brief Converts InputArray to IDirect3DSurface9\n//\n//! @note Note: function does memory copy from src to\n//!             pDirect3DSurface9\n//\n//! @param src                 - source InputArray\n//! @param pDirect3DSurface9   - destination D3D10 texture\n//! @param surfaceSharedHandle - shared handle\nCV_EXPORTS void convertToDirect3DSurface9(InputArray src, IDirect3DSurface9* pDirect3DSurface9, void* surfaceSharedHandle = NULL);\n\n//! @brief Converts IDirect3DSurface9 to OutputArray\n//\n//! @note Note: function does memory copy from pDirect3DSurface9\n//!             to dst\n//\n//! @param pDirect3DSurface9   - source D3D10 texture\n//! @param dst                 - destination OutputArray\n//! @param surfaceSharedHandle - shared handle\nCV_EXPORTS void convertFromDirect3DSurface9(IDirect3DSurface9* pDirect3DSurface9, OutputArray dst, void* surfaceSharedHandle = NULL);\n\n//! @brief Get OpenCV type from DirectX type\n//! @param iDXGI_FORMAT - enum DXGI_FORMAT for D3D10/D3D11\n//! @return OpenCV type or -1 if there is no equivalent\nCV_EXPORTS int getTypeFromDXGI_FORMAT(const int iDXGI_FORMAT); // enum DXGI_FORMAT for D3D10/D3D11\n\n//! @brief Get OpenCV type from DirectX type\n//! @param iD3DFORMAT - enum D3DTYPE for D3D9\n//! @return OpenCV type or -1 if there is no equivalent\nCV_EXPORTS int getTypeFromD3DFORMAT(const int iD3DFORMAT); // enum D3DTYPE for D3D9\n\n//! @}\n\n} } // namespace cv::directx\n\n#endif // __OPENCV_CORE_DIRECTX_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/eigen.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n\n#ifndef __OPENCV_CORE_EIGEN_HPP__\n#define __OPENCV_CORE_EIGEN_HPP__\n\n#include \"opencv2/core.hpp\"\n\n#if defined _MSC_VER && _MSC_VER >= 1200\n#pragma warning( disable: 4714 ) //__forceinline is not inlined\n#pragma warning( disable: 4127 ) //conditional expression is constant\n#pragma warning( disable: 4244 ) //conversion from '__int64' to 'int', possible loss of data\n#endif\n\nnamespace cv\n{\n\n//! @addtogroup core_eigen\n//! @{\n\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols> static inline\nvoid eigen2cv( const Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& src, Mat& dst )\n{\n    if( !(src.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _src(src.cols(), src.rows(), DataType<_Tp>::type,\n              (void*)src.data(), src.stride()*sizeof(_Tp));\n        transpose(_src, dst);\n    }\n    else\n    {\n        Mat _src(src.rows(), src.cols(), DataType<_Tp>::type,\n                 (void*)src.data(), src.stride()*sizeof(_Tp));\n        _src.copyTo(dst);\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols> static inline\nvoid eigen2cv( const Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& src,\n               Matx<_Tp, _rows, _cols>& dst )\n{\n    if( !(src.Flags & Eigen::RowMajorBit) )\n    {\n        dst = Matx<_Tp, _cols, _rows>(static_cast<const _Tp*>(src.data())).t();\n    }\n    else\n    {\n        dst = Matx<_Tp, _rows, _cols>(static_cast<const _Tp*>(src.data()));\n    }\n}\n\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols> static inline\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst )\n{\n    CV_DbgAssert(src.rows == _rows && src.cols == _cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        const Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else if( src.cols == src.rows )\n        {\n            src.convertTo(_dst, _dst.type());\n            transpose(_dst, _dst);\n        }\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n    }\n    else\n    {\n        const Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols> static inline\nvoid cv2eigen( const Matx<_Tp, _rows, _cols>& src,\n               Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst )\n{\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        const Mat _dst(_cols, _rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n    }\n    else\n    {\n        const Mat _dst(_rows, _cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        Mat(src).copyTo(_dst);\n    }\n}\n\ntemplate<typename _Tp>  static inline\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst )\n{\n    dst.resize(src.rows, src.cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        const Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n             dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else if( src.cols == src.rows )\n        {\n            src.convertTo(_dst, _dst.type());\n            transpose(_dst, _dst);\n        }\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n    }\n    else\n    {\n        const Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows, int _cols> static inline\nvoid cv2eigen( const Matx<_Tp, _rows, _cols>& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst )\n{\n    dst.resize(_rows, _cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        const Mat _dst(_cols, _rows, DataType<_Tp>::type,\n             dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n    }\n    else\n    {\n        const Mat _dst(_rows, _cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        Mat(src).copyTo(_dst);\n    }\n}\n\ntemplate<typename _Tp> static inline\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst )\n{\n    CV_Assert(src.cols == 1);\n    dst.resize(src.rows);\n\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        const Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n    }\n    else\n    {\n        const Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows> static inline\nvoid cv2eigen( const Matx<_Tp, _rows, 1>& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst )\n{\n    dst.resize(_rows);\n\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        const Mat _dst(1, _rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n    }\n    else\n    {\n        const Mat _dst(_rows, 1, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.copyTo(_dst);\n    }\n}\n\n\ntemplate<typename _Tp> static inline\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst )\n{\n    CV_Assert(src.rows == 1);\n    dst.resize(src.cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        const Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n    }\n    else\n    {\n        const Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n    }\n}\n\n//Matx\ntemplate<typename _Tp, int _cols> static inline\nvoid cv2eigen( const Matx<_Tp, 1, _cols>& src,\n               Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst )\n{\n    dst.resize(_cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        const Mat _dst(_cols, 1, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n    }\n    else\n    {\n        const Mat _dst(1, _cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        Mat(src).copyTo(_dst);\n    }\n}\n\n//! @}\n\n} // cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/fast_math.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_FAST_MATH_HPP__\n#define __OPENCV_CORE_FAST_MATH_HPP__\n\n#include \"opencv2/core/cvdef.h\"\n\n//! @addtogroup core_utils\n//! @{\n\n/****************************************************************************************\\\n*                                      fast math                                         *\n\\****************************************************************************************/\n\n#if defined __BORLANDC__\n#  include <fastmath.h>\n#elif defined __cplusplus\n#  include <cmath>\n#else\n#  include <math.h>\n#endif\n\n#ifdef HAVE_TEGRA_OPTIMIZATION\n#  include \"tegra_round.hpp\"\n#endif\n\n#if CV_VFP\n    // 1. general scheme\n    #define ARM_ROUND(_value, _asm_string) \\\n        int res; \\\n        float temp; \\\n        asm(_asm_string : [res] \"=r\" (res), [temp] \"=w\" (temp) : [value] \"w\" (_value)); \\\n        return res\n    // 2. version for double\n    #ifdef __clang__\n        #define ARM_ROUND_DBL(value) ARM_ROUND(value, \"vcvtr.s32.f64 %[temp], %[value] \\n vmov %[res], %[temp]\")\n    #else\n        #define ARM_ROUND_DBL(value) ARM_ROUND(value, \"vcvtr.s32.f64 %[temp], %P[value] \\n vmov %[res], %[temp]\")\n    #endif\n    // 3. version for float\n    #define ARM_ROUND_FLT(value) ARM_ROUND(value, \"vcvtr.s32.f32 %[temp], %[value]\\n vmov %[res], %[temp]\")\n#endif // CV_VFP\n\n/** @brief Rounds floating-point number to the nearest integer\n\n @param value floating-point number. If the value is outside of INT_MIN ... INT_MAX range, the\n result is not defined.\n */\nCV_INLINE int\ncvRound( double value )\n{\n#if ((defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__ \\\n    && defined __SSE2__ && !defined __APPLE__)) && !defined(__CUDACC__)\n    __m128d t = _mm_set_sd( value );\n    return _mm_cvtsd_si32(t);\n#elif defined _MSC_VER && defined _M_IX86\n    int t;\n    __asm\n    {\n        fld value;\n        fistp t;\n    }\n    return t;\n#elif ((defined _MSC_VER && defined _M_ARM) || defined CV_ICC || \\\n        defined __GNUC__) && defined HAVE_TEGRA_OPTIMIZATION\n    TEGRA_ROUND_DBL(value);\n#elif defined CV_ICC || defined __GNUC__\n# if CV_VFP\n    ARM_ROUND_DBL(value);\n# else\n    return (int)lrint(value);\n# endif\n#else\n    /* it's ok if round does not comply with IEEE754 standard;\n       the tests should allow +/-1 difference when the tested functions use round */\n    return (int)(value + (value >= 0 ? 0.5 : -0.5));\n#endif\n}\n\n\n/** @brief Rounds floating-point number to the nearest integer not larger than the original.\n\n The function computes an integer i such that:\n \\f[i \\le \\texttt{value} < i+1\\f]\n @param value floating-point number. If the value is outside of INT_MIN ... INT_MAX range, the\n result is not defined.\n */\nCV_INLINE int cvFloor( double value )\n{\n#if (defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__ && !defined __APPLE__)) && !defined(__CUDACC__)\n    __m128d t = _mm_set_sd( value );\n    int i = _mm_cvtsd_si32(t);\n    return i - _mm_movemask_pd(_mm_cmplt_sd(t, _mm_cvtsi32_sd(t,i)));\n#elif defined __GNUC__\n    int i = (int)value;\n    return i - (i > value);\n#else\n    int i = cvRound(value);\n    float diff = (float)(value - i);\n    return i - (diff < 0);\n#endif\n}\n\n/** @brief Rounds floating-point number to the nearest integer not smaller than the original.\n\n The function computes an integer i such that:\n \\f[i \\le \\texttt{value} < i+1\\f]\n @param value floating-point number. If the value is outside of INT_MIN ... INT_MAX range, the\n result is not defined.\n */\nCV_INLINE int cvCeil( double value )\n{\n#if (defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__&& !defined __APPLE__)) && !defined(__CUDACC__)\n    __m128d t = _mm_set_sd( value );\n    int i = _mm_cvtsd_si32(t);\n    return i + _mm_movemask_pd(_mm_cmplt_sd(_mm_cvtsi32_sd(t,i), t));\n#elif defined __GNUC__\n    int i = (int)value;\n    return i + (i < value);\n#else\n    int i = cvRound(value);\n    float diff = (float)(i - value);\n    return i + (diff < 0);\n#endif\n}\n\n/** @brief Determines if the argument is Not A Number.\n\n @param value The input floating-point value\n\n The function returns 1 if the argument is Not A Number (as defined by IEEE754 standard), 0\n otherwise. */\nCV_INLINE int cvIsNaN( double value )\n{\n    Cv64suf ieee754;\n    ieee754.f = value;\n    return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) +\n           ((unsigned)ieee754.u != 0) > 0x7ff00000;\n}\n\n/** @brief Determines if the argument is Infinity.\n\n @param value The input floating-point value\n\n The function returns 1 if the argument is a plus or minus infinity (as defined by IEEE754 standard)\n and 0 otherwise. */\nCV_INLINE int cvIsInf( double value )\n{\n    Cv64suf ieee754;\n    ieee754.f = value;\n    return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 &&\n            (unsigned)ieee754.u == 0;\n}\n\n#ifdef __cplusplus\n\n/** @overload */\nCV_INLINE int cvRound(float value)\n{\n#if ((defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__ && \\\n      defined __SSE2__ && !defined __APPLE__)) && !defined(__CUDACC__)\n    __m128 t = _mm_set_ss( value );\n    return _mm_cvtss_si32(t);\n#elif defined _MSC_VER && defined _M_IX86\n    int t;\n    __asm\n    {\n        fld value;\n        fistp t;\n    }\n    return t;\n#elif ((defined _MSC_VER && defined _M_ARM) || defined CV_ICC || \\\n        defined __GNUC__) && defined HAVE_TEGRA_OPTIMIZATION\n    TEGRA_ROUND_FLT(value);\n#elif defined CV_ICC || defined __GNUC__\n# if CV_VFP\n    ARM_ROUND_FLT(value);\n# else\n    return (int)lrintf(value);\n# endif\n#else\n    /* it's ok if round does not comply with IEEE754 standard;\n     the tests should allow +/-1 difference when the tested functions use round */\n    return (int)(value + (value >= 0 ? 0.5f : -0.5f));\n#endif\n}\n\n/** @overload */\nCV_INLINE int cvRound( int value )\n{\n    return value;\n}\n\n/** @overload */\nCV_INLINE int cvFloor( float value )\n{\n#if (defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__ && !defined __APPLE__)) && !defined(__CUDACC__)\n    __m128 t = _mm_set_ss( value );\n    int i = _mm_cvtss_si32(t);\n    return i - _mm_movemask_ps(_mm_cmplt_ss(t, _mm_cvtsi32_ss(t,i)));\n#elif defined __GNUC__\n    int i = (int)value;\n    return i - (i > value);\n#else\n    int i = cvRound(value);\n    float diff = (float)(value - i);\n    return i - (diff < 0);\n#endif\n}\n\n/** @overload */\nCV_INLINE int cvFloor( int value )\n{\n    return value;\n}\n\n/** @overload */\nCV_INLINE int cvCeil( float value )\n{\n#if (defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__&& !defined __APPLE__)) && !defined(__CUDACC__)\n    __m128 t = _mm_set_ss( value );\n    int i = _mm_cvtss_si32(t);\n    return i + _mm_movemask_ps(_mm_cmplt_ss(_mm_cvtsi32_ss(t,i), t));\n#elif defined __GNUC__\n    int i = (int)value;\n    return i + (i < value);\n#else\n    int i = cvRound(value);\n    float diff = (float)(i - value);\n    return i + (diff < 0);\n#endif\n}\n\n/** @overload */\nCV_INLINE int cvCeil( int value )\n{\n    return value;\n}\n\n/** @overload */\nCV_INLINE int cvIsNaN( float value )\n{\n    Cv32suf ieee754;\n    ieee754.f = value;\n    return (ieee754.u & 0x7fffffff) > 0x7f800000;\n}\n\n/** @overload */\nCV_INLINE int cvIsInf( float value )\n{\n    Cv32suf ieee754;\n    ieee754.f = value;\n    return (ieee754.u & 0x7fffffff) == 0x7f800000;\n}\n\n#endif // __cplusplus\n\n//! @} core_utils\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/hal/hal.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HAL_HPP__\n#define __OPENCV_HAL_HPP__\n\n#include \"opencv2/core/cvdef.h\"\n#include \"opencv2/core/hal/interface.h\"\n\n//! @cond IGNORED\n#define CALL_HAL(name, fun, ...) \\\n    int res = fun(__VA_ARGS__); \\\n    if (res == CV_HAL_ERROR_OK) \\\n        return; \\\n    else if (res != CV_HAL_ERROR_NOT_IMPLEMENTED) \\\n        CV_Error_(cv::Error::StsInternal, \\\n            (\"HAL implementation \" CVAUX_STR(name) \" ==> \" CVAUX_STR(fun) \" returned %d (0x%08x)\", res, res));\n//! @endcond\n\n\nnamespace cv { namespace hal {\n\n//! @addtogroup core_hal_functions\n//! @{\n\nCV_EXPORTS int normHamming(const uchar* a, int n);\nCV_EXPORTS int normHamming(const uchar* a, const uchar* b, int n);\n\nCV_EXPORTS int normHamming(const uchar* a, int n, int cellSize);\nCV_EXPORTS int normHamming(const uchar* a, const uchar* b, int n, int cellSize);\n\nCV_EXPORTS int LU32f(float* A, size_t astep, int m, float* b, size_t bstep, int n);\nCV_EXPORTS int LU64f(double* A, size_t astep, int m, double* b, size_t bstep, int n);\nCV_EXPORTS bool Cholesky32f(float* A, size_t astep, int m, float* b, size_t bstep, int n);\nCV_EXPORTS bool Cholesky64f(double* A, size_t astep, int m, double* b, size_t bstep, int n);\n\nCV_EXPORTS int normL1_(const uchar* a, const uchar* b, int n);\nCV_EXPORTS float normL1_(const float* a, const float* b, int n);\nCV_EXPORTS float normL2Sqr_(const float* a, const float* b, int n);\n\nCV_EXPORTS void exp32f(const float* src, float* dst, int n);\nCV_EXPORTS void exp64f(const double* src, double* dst, int n);\nCV_EXPORTS void log32f(const float* src, float* dst, int n);\nCV_EXPORTS void log64f(const double* src, double* dst, int n);\n\nCV_EXPORTS void fastAtan2(const float* y, const float* x, float* dst, int n, bool angleInDegrees);\nCV_EXPORTS void magnitude32f(const float* x, const float* y, float* dst, int n);\nCV_EXPORTS void magnitude64f(const double* x, const double* y, double* dst, int n);\nCV_EXPORTS void sqrt32f(const float* src, float* dst, int len);\nCV_EXPORTS void sqrt64f(const double* src, double* dst, int len);\nCV_EXPORTS void invSqrt32f(const float* src, float* dst, int len);\nCV_EXPORTS void invSqrt64f(const double* src, double* dst, int len);\n\nCV_EXPORTS void split8u(const uchar* src, uchar** dst, int len, int cn );\nCV_EXPORTS void split16u(const ushort* src, ushort** dst, int len, int cn );\nCV_EXPORTS void split32s(const int* src, int** dst, int len, int cn );\nCV_EXPORTS void split64s(const int64* src, int64** dst, int len, int cn );\n\nCV_EXPORTS void merge8u(const uchar** src, uchar* dst, int len, int cn );\nCV_EXPORTS void merge16u(const ushort** src, ushort* dst, int len, int cn );\nCV_EXPORTS void merge32s(const int** src, int* dst, int len, int cn );\nCV_EXPORTS void merge64s(const int64** src, int64* dst, int len, int cn );\n\nCV_EXPORTS void add8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void add8s( const schar* src1, size_t step1, const schar* src2, size_t step2, schar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void add16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, ushort* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void add16s( const short* src1, size_t step1, const short* src2, size_t step2, short* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void add32s( const int* src1, size_t step1, const int* src2, size_t step2, int* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void add32f( const float* src1, size_t step1, const float* src2, size_t step2, float* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void add64f( const double* src1, size_t step1, const double* src2, size_t step2, double* dst, size_t step, int width, int height, void* );\n\nCV_EXPORTS void sub8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void sub8s( const schar* src1, size_t step1, const schar* src2, size_t step2, schar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void sub16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, ushort* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void sub16s( const short* src1, size_t step1, const short* src2, size_t step2, short* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void sub32s( const int* src1, size_t step1, const int* src2, size_t step2, int* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void sub32f( const float* src1, size_t step1, const float* src2, size_t step2, float* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void sub64f( const double* src1, size_t step1, const double* src2, size_t step2, double* dst, size_t step, int width, int height, void* );\n\nCV_EXPORTS void max8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void max8s( const schar* src1, size_t step1, const schar* src2, size_t step2, schar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void max16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, ushort* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void max16s( const short* src1, size_t step1, const short* src2, size_t step2, short* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void max32s( const int* src1, size_t step1, const int* src2, size_t step2, int* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void max32f( const float* src1, size_t step1, const float* src2, size_t step2, float* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void max64f( const double* src1, size_t step1, const double* src2, size_t step2, double* dst, size_t step, int width, int height, void* );\n\nCV_EXPORTS void min8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void min8s( const schar* src1, size_t step1, const schar* src2, size_t step2, schar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void min16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, ushort* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void min16s( const short* src1, size_t step1, const short* src2, size_t step2, short* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void min32s( const int* src1, size_t step1, const int* src2, size_t step2, int* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void min32f( const float* src1, size_t step1, const float* src2, size_t step2, float* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void min64f( const double* src1, size_t step1, const double* src2, size_t step2, double* dst, size_t step, int width, int height, void* );\n\nCV_EXPORTS void absdiff8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void absdiff8s( const schar* src1, size_t step1, const schar* src2, size_t step2, schar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void absdiff16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, ushort* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void absdiff16s( const short* src1, size_t step1, const short* src2, size_t step2, short* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void absdiff32s( const int* src1, size_t step1, const int* src2, size_t step2, int* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void absdiff32f( const float* src1, size_t step1, const float* src2, size_t step2, float* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void absdiff64f( const double* src1, size_t step1, const double* src2, size_t step2, double* dst, size_t step, int width, int height, void* );\n\nCV_EXPORTS void and8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void or8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void xor8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* );\nCV_EXPORTS void not8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* );\n\nCV_EXPORTS void cmp8u(const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* _cmpop);\nCV_EXPORTS void cmp8s(const schar* src1, size_t step1, const schar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* _cmpop);\nCV_EXPORTS void cmp16u(const ushort* src1, size_t step1, const ushort* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* _cmpop);\nCV_EXPORTS void cmp16s(const short* src1, size_t step1, const short* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* _cmpop);\nCV_EXPORTS void cmp32s(const int* src1, size_t step1, const int* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* _cmpop);\nCV_EXPORTS void cmp32f(const float* src1, size_t step1, const float* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* _cmpop);\nCV_EXPORTS void cmp64f(const double* src1, size_t step1, const double* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* _cmpop);\n\nCV_EXPORTS void mul8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void mul8s( const schar* src1, size_t step1, const schar* src2, size_t step2, schar* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void mul16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, ushort* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void mul16s( const short* src1, size_t step1, const short* src2, size_t step2, short* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void mul32s( const int* src1, size_t step1, const int* src2, size_t step2, int* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void mul32f( const float* src1, size_t step1, const float* src2, size_t step2, float* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void mul64f( const double* src1, size_t step1, const double* src2, size_t step2, double* dst, size_t step, int width, int height, void* scale);\n\nCV_EXPORTS void div8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void div8s( const schar* src1, size_t step1, const schar* src2, size_t step2, schar* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void div16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, ushort* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void div16s( const short* src1, size_t step1, const short* src2, size_t step2, short* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void div32s( const int* src1, size_t step1, const int* src2, size_t step2, int* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void div32f( const float* src1, size_t step1, const float* src2, size_t step2, float* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void div64f( const double* src1, size_t step1, const double* src2, size_t step2, double* dst, size_t step, int width, int height, void* scale);\n\nCV_EXPORTS void recip8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void recip8s( const schar* src1, size_t step1, const schar* src2, size_t step2, schar* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void recip16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, ushort* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void recip16s( const short* src1, size_t step1, const short* src2, size_t step2, short* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void recip32s( const int* src1, size_t step1, const int* src2, size_t step2, int* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void recip32f( const float* src1, size_t step1, const float* src2, size_t step2, float* dst, size_t step, int width, int height, void* scale);\nCV_EXPORTS void recip64f( const double* src1, size_t step1, const double* src2, size_t step2, double* dst, size_t step, int width, int height, void* scale);\n\nCV_EXPORTS void addWeighted8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, uchar* dst, size_t step, int width, int height, void* _scalars );\nCV_EXPORTS void addWeighted8s( const schar* src1, size_t step1, const schar* src2, size_t step2, schar* dst, size_t step, int width, int height, void* scalars );\nCV_EXPORTS void addWeighted16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, ushort* dst, size_t step, int width, int height, void* scalars );\nCV_EXPORTS void addWeighted16s( const short* src1, size_t step1, const short* src2, size_t step2, short* dst, size_t step, int width, int height, void* scalars );\nCV_EXPORTS void addWeighted32s( const int* src1, size_t step1, const int* src2, size_t step2, int* dst, size_t step, int width, int height, void* scalars );\nCV_EXPORTS void addWeighted32f( const float* src1, size_t step1, const float* src2, size_t step2, float* dst, size_t step, int width, int height, void* scalars );\nCV_EXPORTS void addWeighted64f( const double* src1, size_t step1, const double* src2, size_t step2, double* dst, size_t step, int width, int height, void* scalars );\n\n//! @} core_hal\n\n//=============================================================================\n// for binary compatibility with 3.0\n\n//! @cond IGNORED\n\nCV_EXPORTS int LU(float* A, size_t astep, int m, float* b, size_t bstep, int n);\nCV_EXPORTS int LU(double* A, size_t astep, int m, double* b, size_t bstep, int n);\nCV_EXPORTS bool Cholesky(float* A, size_t astep, int m, float* b, size_t bstep, int n);\nCV_EXPORTS bool Cholesky(double* A, size_t astep, int m, double* b, size_t bstep, int n);\n\nCV_EXPORTS void exp(const float* src, float* dst, int n);\nCV_EXPORTS void exp(const double* src, double* dst, int n);\nCV_EXPORTS void log(const float* src, float* dst, int n);\nCV_EXPORTS void log(const double* src, double* dst, int n);\n\nCV_EXPORTS void magnitude(const float* x, const float* y, float* dst, int n);\nCV_EXPORTS void magnitude(const double* x, const double* y, double* dst, int n);\nCV_EXPORTS void sqrt(const float* src, float* dst, int len);\nCV_EXPORTS void sqrt(const double* src, double* dst, int len);\nCV_EXPORTS void invSqrt(const float* src, float* dst, int len);\nCV_EXPORTS void invSqrt(const double* src, double* dst, int len);\n\n//! @endcond\n\n}} //cv::hal\n\n#endif //__OPENCV_HAL_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/hal/interface.h",
    "content": "#ifndef _HAL_INTERFACE_HPP_INCLUDED_\n#define _HAL_INTERFACE_HPP_INCLUDED_\n\n//! @addtogroup core_hal_interface\n//! @{\n\n#define CV_HAL_ERROR_OK 0\n#define CV_HAL_ERROR_NOT_IMPLEMENTED 1\n#define CV_HAL_ERROR_UNKNOWN -1\n\n#define CV_HAL_CMP_EQ 0\n#define CV_HAL_CMP_GT 1\n#define CV_HAL_CMP_GE 2\n#define CV_HAL_CMP_LT 3\n#define CV_HAL_CMP_LE 4\n#define CV_HAL_CMP_NE 5\n\n#ifdef __cplusplus\n#include <cstddef>\n#else\n#include <stddef.h>\n#endif\n\n/* primitive types */\n/*\n  schar  - signed 1 byte integer\n  uchar  - unsigned 1 byte integer\n  short  - signed 2 byte integer\n  ushort - unsigned 2 byte integer\n  int    - signed 4 byte integer\n  uint   - unsigned 4 byte integer\n  int64  - signed 8 byte integer\n  uint64 - unsigned 8 byte integer\n*/\n\n#if !defined _MSC_VER && !defined __BORLANDC__\n#  if defined __cplusplus && __cplusplus >= 201103L && !defined __APPLE__\n#    include <cstdint>\n     typedef std::uint32_t uint;\n#  else\n#    include <stdint.h>\n     typedef uint32_t uint;\n#  endif\n#else\n   typedef unsigned uint;\n#endif\n\ntypedef signed char schar;\n\n#ifndef __IPL_H__\n   typedef unsigned char uchar;\n   typedef unsigned short ushort;\n#endif\n\n#if defined _MSC_VER || defined __BORLANDC__\n   typedef __int64 int64;\n   typedef unsigned __int64 uint64;\n#  define CV_BIG_INT(n)   n##I64\n#  define CV_BIG_UINT(n)  n##UI64\n#else\n   typedef int64_t int64;\n   typedef uint64_t uint64;\n#  define CV_BIG_INT(n)   n##LL\n#  define CV_BIG_UINT(n)  n##ULL\n#endif\n\n//! @}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/hal/intrin.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HAL_INTRIN_HPP__\n#define __OPENCV_HAL_INTRIN_HPP__\n\n#include <cmath>\n#include <float.h>\n#include <stdlib.h>\n#include \"opencv2/core/cvdef.h\"\n\n#define OPENCV_HAL_ADD(a, b) ((a) + (b))\n#define OPENCV_HAL_AND(a, b) ((a) & (b))\n#define OPENCV_HAL_NOP(a) (a)\n#define OPENCV_HAL_1ST(a, b) (a)\n\n// unlike HAL API, which is in cv::hal,\n// we put intrinsics into cv namespace to make its\n// access from within opencv code more accessible\nnamespace cv {\n\n//! @addtogroup core_hal_intrin\n//! @{\n\n//! @cond IGNORED\ntemplate<typename _Tp> struct V_TypeTraits\n{\n    typedef _Tp int_type;\n    typedef _Tp uint_type;\n    typedef _Tp abs_type;\n    typedef _Tp sum_type;\n\n    enum { delta = 0, shift = 0 };\n\n    static int_type reinterpret_int(_Tp x) { return x; }\n    static uint_type reinterpet_uint(_Tp x) { return x; }\n    static _Tp reinterpret_from_int(int_type x) { return (_Tp)x; }\n};\n\ntemplate<> struct V_TypeTraits<uchar>\n{\n    typedef uchar value_type;\n    typedef schar int_type;\n    typedef uchar uint_type;\n    typedef uchar abs_type;\n    typedef int sum_type;\n\n    typedef ushort w_type;\n    typedef unsigned q_type;\n\n    enum { delta = 128, shift = 8 };\n\n    static int_type reinterpret_int(value_type x) { return (int_type)x; }\n    static uint_type reinterpret_uint(value_type x) { return (uint_type)x; }\n    static value_type reinterpret_from_int(int_type x) { return (value_type)x; }\n};\n\ntemplate<> struct V_TypeTraits<schar>\n{\n    typedef schar value_type;\n    typedef schar int_type;\n    typedef uchar uint_type;\n    typedef uchar abs_type;\n    typedef int sum_type;\n\n    typedef short w_type;\n    typedef int q_type;\n\n    enum { delta = 128, shift = 8 };\n\n    static int_type reinterpret_int(value_type x) { return (int_type)x; }\n    static uint_type reinterpret_uint(value_type x) { return (uint_type)x; }\n    static value_type reinterpret_from_int(int_type x) { return (value_type)x; }\n};\n\ntemplate<> struct V_TypeTraits<ushort>\n{\n    typedef ushort value_type;\n    typedef short int_type;\n    typedef ushort uint_type;\n    typedef ushort abs_type;\n    typedef int sum_type;\n\n    typedef unsigned w_type;\n    typedef uchar nu_type;\n\n    enum { delta = 32768, shift = 16 };\n\n    static int_type reinterpret_int(value_type x) { return (int_type)x; }\n    static uint_type reinterpret_uint(value_type x) { return (uint_type)x; }\n    static value_type reinterpret_from_int(int_type x) { return (value_type)x; }\n};\n\ntemplate<> struct V_TypeTraits<short>\n{\n    typedef short value_type;\n    typedef short int_type;\n    typedef ushort uint_type;\n    typedef ushort abs_type;\n    typedef int sum_type;\n\n    typedef int w_type;\n    typedef uchar nu_type;\n    typedef schar n_type;\n\n    enum { delta = 128, shift = 8 };\n\n    static int_type reinterpret_int(value_type x) { return (int_type)x; }\n    static uint_type reinterpret_uint(value_type x) { return (uint_type)x; }\n    static value_type reinterpret_from_int(int_type x) { return (value_type)x; }\n};\n\ntemplate<> struct V_TypeTraits<unsigned>\n{\n    typedef unsigned value_type;\n    typedef int int_type;\n    typedef unsigned uint_type;\n    typedef unsigned abs_type;\n    typedef unsigned sum_type;\n\n    typedef uint64 w_type;\n    typedef ushort nu_type;\n\n    static int_type reinterpret_int(value_type x) { return (int_type)x; }\n    static uint_type reinterpret_uint(value_type x) { return (uint_type)x; }\n    static value_type reinterpret_from_int(int_type x) { return (value_type)x; }\n};\n\ntemplate<> struct V_TypeTraits<int>\n{\n    typedef int value_type;\n    typedef int int_type;\n    typedef unsigned uint_type;\n    typedef unsigned abs_type;\n    typedef int sum_type;\n\n    typedef int64 w_type;\n    typedef short n_type;\n    typedef ushort nu_type;\n\n    static int_type reinterpret_int(value_type x) { return (int_type)x; }\n    static uint_type reinterpret_uint(value_type x) { return (uint_type)x; }\n    static value_type reinterpret_from_int(int_type x) { return (value_type)x; }\n};\n\ntemplate<> struct V_TypeTraits<uint64>\n{\n    typedef uint64 value_type;\n    typedef int64 int_type;\n    typedef uint64 uint_type;\n    typedef uint64 abs_type;\n    typedef uint64 sum_type;\n\n    typedef unsigned nu_type;\n\n    static int_type reinterpret_int(value_type x) { return (int_type)x; }\n    static uint_type reinterpret_uint(value_type x) { return (uint_type)x; }\n    static value_type reinterpret_from_int(int_type x) { return (value_type)x; }\n};\n\ntemplate<> struct V_TypeTraits<int64>\n{\n    typedef int64 value_type;\n    typedef int64 int_type;\n    typedef uint64 uint_type;\n    typedef uint64 abs_type;\n    typedef int64 sum_type;\n\n    typedef int nu_type;\n\n    static int_type reinterpret_int(value_type x) { return (int_type)x; }\n    static uint_type reinterpret_uint(value_type x) { return (uint_type)x; }\n    static value_type reinterpret_from_int(int_type x) { return (value_type)x; }\n};\n\n\ntemplate<> struct V_TypeTraits<float>\n{\n    typedef float value_type;\n    typedef int int_type;\n    typedef unsigned uint_type;\n    typedef float abs_type;\n    typedef float sum_type;\n\n    typedef double w_type;\n\n    static int_type reinterpret_int(value_type x)\n    {\n        Cv32suf u;\n        u.f = x;\n        return u.i;\n    }\n    static uint_type reinterpet_uint(value_type x)\n    {\n        Cv32suf u;\n        u.f = x;\n        return u.u;\n    }\n    static value_type reinterpret_from_int(int_type x)\n    {\n        Cv32suf u;\n        u.i = x;\n        return u.f;\n    }\n};\n\ntemplate<> struct V_TypeTraits<double>\n{\n    typedef double value_type;\n    typedef int64 int_type;\n    typedef uint64 uint_type;\n    typedef double abs_type;\n    typedef double sum_type;\n    static int_type reinterpret_int(value_type x)\n    {\n        Cv64suf u;\n        u.f = x;\n        return u.i;\n    }\n    static uint_type reinterpet_uint(value_type x)\n    {\n        Cv64suf u;\n        u.f = x;\n        return u.u;\n    }\n    static value_type reinterpret_from_int(int_type x)\n    {\n        Cv64suf u;\n        u.i = x;\n        return u.f;\n    }\n};\n\ntemplate <typename T> struct V_SIMD128Traits\n{\n    enum { nlanes = 16 / sizeof(T) };\n};\n\n//! @endcond\n\n//! @}\n\n}\n\n#ifdef CV_DOXYGEN\n#   undef CV_SSE2\n#   undef CV_NEON\n#endif\n\n#if CV_SSE2\n\n#include \"opencv2/core/hal/intrin_sse.hpp\"\n\n#elif CV_NEON\n\n#include \"opencv2/core/hal/intrin_neon.hpp\"\n\n#else\n\n#include \"opencv2/core/hal/intrin_cpp.hpp\"\n\n#endif\n\n//! @addtogroup core_hal_intrin\n//! @{\n\n#ifndef CV_SIMD128\n//! Set to 1 if current compiler supports vector extensions (NEON or SSE is enabled)\n#define CV_SIMD128 0\n#endif\n\n#ifndef CV_SIMD128_64F\n//! Set to 1 if current intrinsics implementation supports 64-bit float vectors\n#define CV_SIMD128_64F 0\n#endif\n\n//! @}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/hal/intrin_cpp.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HAL_INTRIN_CPP_HPP__\n#define __OPENCV_HAL_INTRIN_CPP_HPP__\n\n#include <limits>\n#include <cstring>\n#include <algorithm>\n#include \"opencv2/core/saturate.hpp\"\n\nnamespace cv\n{\n\n/** @addtogroup core_hal_intrin\n\n\"Universal intrinsics\" is a types and functions set intended to simplify vectorization of code on\ndifferent platforms. Currently there are two supported SIMD extensions: __SSE/SSE2__ on x86\narchitectures and __NEON__ on ARM architectures, both allow working with 128 bit registers\ncontaining packed values of different types. In case when there is no SIMD extension available\nduring compilation, fallback C++ implementation of intrinsics will be chosen and code will work as\nexpected although it could be slower.\n\n### Types\n\nThere are several types representing 128-bit register as a vector of packed values, each type is\nimplemented as a structure based on a one SIMD register.\n\n- cv::v_uint8x16 and cv::v_int8x16: sixteen 8-bit integer values (unsigned/signed) - char\n- cv::v_uint16x8 and cv::v_int16x8: eight 16-bit integer values (unsigned/signed) - short\n- cv::v_uint32x4 and cv::v_int32x4: four 32-bit integer values (unsgined/signed) - int\n- cv::v_uint64x2 and cv::v_int64x2: two 64-bit integer values (unsigned/signed) - int64\n- cv::v_float32x4: four 32-bit floating point values (signed) - float\n- cv::v_float64x2: two 64-bit floating point valies (signed) - double\n\n@note\ncv::v_float64x2 is not implemented in NEON variant, if you want to use this type, don't forget to\ncheck the CV_SIMD128_64F preprocessor definition:\n@code\n#if CV_SIMD128_64F\n//...\n#endif\n@endcode\n\n### Load and store operations\n\nThese operations allow to set contents of the register explicitly or by loading it from some memory\nblock and to save contents of the register to memory block.\n\n- Constructors:\n@ref v_reg::v_reg(const _Tp *ptr) \"from memory\",\n@ref v_reg::v_reg(_Tp s0, _Tp s1) \"from two values\", ...\n- Other create methods:\n@ref v_setall_s8, @ref v_setall_u8, ...,\n@ref v_setzero_u8, @ref v_setzero_s8, ...\n- Memory operations:\n@ref v_load, @ref v_load_aligned, @ref v_load_halves,\n@ref v_store, @ref v_store_aligned,\n@ref v_store_high, @ref v_store_low\n\n### Value reordering\n\nThese operations allow to reorder or recombine elements in one or multiple vectors.\n\n- Interleave, deinterleave (3 and 4 channels): @ref v_load_deinterleave, @ref v_store_interleave\n- Expand: @ref v_load_expand, @ref v_load_expand_q, @ref v_expand\n- Pack: @ref v_pack, @ref v_pack_u, @ref v_rshr_pack, @ref v_rshr_pack_u,\n@ref v_pack_store, @ref v_pack_u_store, @ref v_rshr_pack_store, @ref v_rshr_pack_u_store\n- Recombine: @ref v_zip, @ref v_recombine, @ref v_combine_low, @ref v_combine_high\n- Extract: @ref v_extract\n\n\n### Arithmetic, bitwise and comparison operations\n\nElement-wise binary and unary operations.\n\n- Arithmetics:\n@ref operator+(const v_reg &a, const v_reg &b) \"+\",\n@ref operator-(const v_reg &a, const v_reg &b) \"-\",\n@ref operator*(const v_reg &a, const v_reg &b) \"*\",\n@ref operator/(const v_reg &a, const v_reg &b) \"/\",\n@ref v_mul_expand\n\n- Non-saturating arithmetics: @ref v_add_wrap, @ref v_sub_wrap\n\n- Bitwise shifts:\n@ref operator<<(const v_reg &a, int s) \"<<\",\n@ref operator>>(const v_reg &a, int s) \">>\",\n@ref v_shl, @ref v_shr\n\n- Bitwise logic:\n@ref operator&(const v_reg &a, const v_reg &b) \"&\",\n@ref operator|(const v_reg &a, const v_reg &b) \"|\",\n@ref operator^(const v_reg &a, const v_reg &b) \"^\",\n@ref operator~(const v_reg &a) \"~\"\n\n- Comparison:\n@ref operator>(const v_reg &a, const v_reg &b) \">\",\n@ref operator>=(const v_reg &a, const v_reg &b) \">=\",\n@ref operator<(const v_reg &a, const v_reg &b) \"<\",\n@ref operator<=(const v_reg &a, const v_reg &b) \"<=\",\n@ref operator==(const v_reg &a, const v_reg &b) \"==\",\n@ref operator!=(const v_reg &a, const v_reg &b) \"!=\"\n\n- min/max: @ref v_min, @ref v_max\n\n### Reduce and mask\n\nMost of these operations return only one value.\n\n- Reduce: @ref v_reduce_min, @ref v_reduce_max, @ref v_reduce_sum\n- Mask: @ref v_signmask, @ref v_check_all, @ref v_check_any, @ref v_select\n\n### Other math\n\n- Some frequent operations: @ref v_sqrt, @ref v_invsqrt, @ref v_magnitude, @ref v_sqr_magnitude\n- Absolute values: @ref v_abs, @ref v_absdiff\n\n### Conversions\n\nDifferent type conversions and casts:\n\n- Rounding: @ref v_round, @ref v_floor, @ref v_ceil, @ref v_trunc,\n- To float: @ref v_cvt_f32, @ref v_cvt_f64\n- Reinterpret: @ref v_reinterpret_as_u8, @ref v_reinterpret_as_s8, ...\n\n### Matrix operations\n\nIn these operations vectors represent matrix rows/columns: @ref v_dotprod, @ref v_matmul, @ref v_transpose4x4\n\n### Usability\n\nMost operations are implemented only for some subset of the available types, following matrices\nshows the applicability of different operations to the types.\n\nRegular integers:\n\n| Operations\\\\Types | uint 8x16 | int 8x16 | uint 16x8 | int 16x8 | uint 32x4 | int 32x4 |\n|-------------------|:-:|:-:|:-:|:-:|:-:|:-:|\n|load, store        | x | x | x | x | x | x |\n|interleave         | x | x | x | x | x | x |\n|expand             | x | x | x | x | x | x |\n|expand_q           | x | x |   |   |   |   |\n|add, sub           | x | x | x | x | x | x |\n|add_wrap, sub_wrap | x | x | x | x |   |   |\n|mul                |   |   | x | x | x | x |\n|mul_expand         |   |   | x | x | x |   |\n|compare            | x | x | x | x | x | x |\n|shift              |   |   | x | x | x | x |\n|dotprod            |   |   |   | x |   |   |\n|logical            | x | x | x | x | x | x |\n|min, max           | x | x | x | x | x | x |\n|absdiff            | x | x | x | x | x | x |\n|reduce             |   |   |   |   | x | x |\n|mask               | x | x | x | x | x | x |\n|pack               | x | x | x | x | x | x |\n|pack_u             | x |   | x |   |   |   |\n|unpack             | x | x | x | x | x | x |\n|extract            | x | x | x | x | x | x |\n|cvt_flt32          |   |   |   |   |   | x |\n|cvt_flt64          |   |   |   |   |   | x |\n|transpose4x4       |   |   |   |   | x | x |\n\nBig integers:\n\n| Operations\\\\Types | uint 64x2 | int 64x2 |\n|-------------------|:-:|:-:|\n|load, store        | x | x |\n|add, sub           | x | x |\n|shift              | x | x |\n|logical            | x | x |\n|extract            | x | x |\n\nFloating point:\n\n| Operations\\\\Types | float 32x4 | float 64x2 |\n|-------------------|:-:|:-:|\n|load, store        | x | x |\n|interleave         | x |   |\n|add, sub           | x | x |\n|mul                | x | x |\n|div                | x | x |\n|compare            | x | x |\n|min, max           | x | x |\n|absdiff            | x | x |\n|reduce             | x |   |\n|mask               | x | x |\n|unpack             | x | x |\n|cvt_flt32          |   | x |\n|cvt_flt64          | x |   |\n|sqrt, abs          | x | x |\n|float math         | x | x |\n|transpose4x4       | x |   |\n\n\n @{ */\n\ntemplate<typename _Tp, int n> struct v_reg\n{\n//! @cond IGNORED\n    typedef _Tp lane_type;\n    typedef v_reg<typename V_TypeTraits<_Tp>::int_type, n> int_vec;\n    typedef v_reg<typename V_TypeTraits<_Tp>::abs_type, n> abs_vec;\n    enum { nlanes = n };\n// !@endcond\n\n    /** @brief Constructor\n\n    Initializes register with data from memory\n    @param ptr pointer to memory block with data for register */\n    explicit v_reg(const _Tp* ptr) { for( int i = 0; i < n; i++ ) s[i] = ptr[i]; }\n\n    /** @brief Constructor\n\n    Initializes register with two 64-bit values */\n    v_reg(_Tp s0, _Tp s1) { s[0] = s0; s[1] = s1; }\n\n    /** @brief Constructor\n\n    Initializes register with four 32-bit values */\n    v_reg(_Tp s0, _Tp s1, _Tp s2, _Tp s3) { s[0] = s0; s[1] = s1; s[2] = s2; s[3] = s3; }\n\n    /** @brief Constructor\n\n    Initializes register with eight 16-bit values */\n    v_reg(_Tp s0, _Tp s1, _Tp s2, _Tp s3,\n           _Tp s4, _Tp s5, _Tp s6, _Tp s7)\n    {\n        s[0] = s0; s[1] = s1; s[2] = s2; s[3] = s3;\n        s[4] = s4; s[5] = s5; s[6] = s6; s[7] = s7;\n    }\n\n    /** @brief Constructor\n\n    Initializes register with sixteen 8-bit values */\n    v_reg(_Tp s0, _Tp s1, _Tp s2, _Tp s3,\n           _Tp s4, _Tp s5, _Tp s6, _Tp s7,\n           _Tp s8, _Tp s9, _Tp s10, _Tp s11,\n           _Tp s12, _Tp s13, _Tp s14, _Tp s15)\n    {\n        s[0] = s0; s[1] = s1; s[2] = s2; s[3] = s3;\n        s[4] = s4; s[5] = s5; s[6] = s6; s[7] = s7;\n        s[8] = s8; s[9] = s9; s[10] = s10; s[11] = s11;\n        s[12] = s12; s[13] = s13; s[14] = s14; s[15] = s15;\n    }\n\n    /** @brief Default constructor\n\n    Does not initialize anything*/\n    v_reg() {}\n\n    /** @brief Copy constructor */\n    v_reg(const v_reg<_Tp, n> & r)\n    {\n        for( int i = 0; i < n; i++ )\n            s[i] = r.s[i];\n    }\n    /** @brief Access first value\n\n    Returns value of the first lane according to register type, for example:\n    @code{.cpp}\n    v_int32x4 r(1, 2, 3, 4);\n    int v = r.get0(); // returns 1\n    v_uint64x2 r(1, 2);\n    uint64_t v = r.get0(); // returns 1\n    @endcode\n    */\n    _Tp get0() const { return s[0]; }\n\n//! @cond IGNORED\n    _Tp get(const int i) const { return s[i]; }\n    v_reg<_Tp, n> high() const\n    {\n        v_reg<_Tp, n> c;\n        int i;\n        for( i = 0; i < n/2; i++ )\n        {\n            c.s[i] = s[i+(n/2)];\n            c.s[i+(n/2)] = 0;\n        }\n        return c;\n    }\n\n    static v_reg<_Tp, n> zero()\n    {\n        v_reg<_Tp, n> c;\n        for( int i = 0; i < n; i++ )\n            c.s[i] = (_Tp)0;\n        return c;\n    }\n\n    static v_reg<_Tp, n> all(_Tp s)\n    {\n        v_reg<_Tp, n> c;\n        for( int i = 0; i < n; i++ )\n            c.s[i] = s;\n        return c;\n    }\n\n    template<typename _Tp2, int n2> v_reg<_Tp2, n2> reinterpret_as() const\n    {\n        size_t bytes = std::min(sizeof(_Tp2)*n2, sizeof(_Tp)*n);\n        v_reg<_Tp2, n2> c;\n        std::memcpy(&c.s[0], &s[0], bytes);\n        return c;\n    }\n\n    _Tp s[n];\n//! @endcond\n};\n\n/** @brief Sixteen 8-bit unsigned integer values */\ntypedef v_reg<uchar, 16> v_uint8x16;\n/** @brief Sixteen 8-bit signed integer values */\ntypedef v_reg<schar, 16> v_int8x16;\n/** @brief Eight 16-bit unsigned integer values */\ntypedef v_reg<ushort, 8> v_uint16x8;\n/** @brief Eight 16-bit signed integer values */\ntypedef v_reg<short, 8> v_int16x8;\n/** @brief Four 32-bit unsigned integer values */\ntypedef v_reg<unsigned, 4> v_uint32x4;\n/** @brief Four 32-bit signed integer values */\ntypedef v_reg<int, 4> v_int32x4;\n/** @brief Four 32-bit floating point values (single precision) */\ntypedef v_reg<float, 4> v_float32x4;\n/** @brief Two 64-bit floating point values (double precision) */\ntypedef v_reg<double, 2> v_float64x2;\n/** @brief Two 64-bit unsigned integer values */\ntypedef v_reg<uint64, 2> v_uint64x2;\n/** @brief Two 64-bit signed integer values */\ntypedef v_reg<int64, 2> v_int64x2;\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_BIN_OP(bin_op) \\\ntemplate<typename _Tp, int n> inline v_reg<_Tp, n> \\\n    operator bin_op (const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \\\n{ \\\n    v_reg<_Tp, n> c; \\\n    for( int i = 0; i < n; i++ ) \\\n        c.s[i] = saturate_cast<_Tp>(a.s[i] bin_op b.s[i]); \\\n    return c; \\\n} \\\ntemplate<typename _Tp, int n> inline v_reg<_Tp, n>& \\\n    operator bin_op##= (v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \\\n{ \\\n    for( int i = 0; i < n; i++ ) \\\n        a.s[i] = saturate_cast<_Tp>(a.s[i] bin_op b.s[i]); \\\n    return a; \\\n}\n\n/** @brief Add values\n\nFor all types. */\nOPENCV_HAL_IMPL_BIN_OP(+)\n\n/** @brief Subtract values\n\nFor all types. */\nOPENCV_HAL_IMPL_BIN_OP(-)\n\n/** @brief Multiply values\n\nFor 16- and 32-bit integer types and floating types. */\nOPENCV_HAL_IMPL_BIN_OP(*)\n\n/** @brief Divide values\n\nFor floating types only. */\nOPENCV_HAL_IMPL_BIN_OP(/)\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_BIT_OP(bit_op) \\\ntemplate<typename _Tp, int n> inline v_reg<_Tp, n> operator bit_op \\\n    (const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \\\n{ \\\n    v_reg<_Tp, n> c; \\\n    typedef typename V_TypeTraits<_Tp>::int_type itype; \\\n    for( int i = 0; i < n; i++ ) \\\n        c.s[i] = V_TypeTraits<_Tp>::reinterpret_from_int((itype)(V_TypeTraits<_Tp>::reinterpret_int(a.s[i]) bit_op \\\n                                                        V_TypeTraits<_Tp>::reinterpret_int(b.s[i]))); \\\n    return c; \\\n} \\\ntemplate<typename _Tp, int n> inline v_reg<_Tp, n>& operator \\\n    bit_op##= (v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \\\n{ \\\n    typedef typename V_TypeTraits<_Tp>::int_type itype; \\\n    for( int i = 0; i < n; i++ ) \\\n        a.s[i] = V_TypeTraits<_Tp>::reinterpret_from_int((itype)(V_TypeTraits<_Tp>::reinterpret_int(a.s[i]) bit_op \\\n                                                        V_TypeTraits<_Tp>::reinterpret_int(b.s[i]))); \\\n    return a; \\\n}\n\n/** @brief Bitwise AND\n\nOnly for integer types. */\nOPENCV_HAL_IMPL_BIT_OP(&)\n\n/** @brief Bitwise OR\n\nOnly for integer types. */\nOPENCV_HAL_IMPL_BIT_OP(|)\n\n/** @brief Bitwise XOR\n\nOnly for integer types.*/\nOPENCV_HAL_IMPL_BIT_OP(^)\n\n/** @brief Bitwise NOT\n\nOnly for integer types.*/\ntemplate<typename _Tp, int n> inline v_reg<_Tp, n> operator ~ (const v_reg<_Tp, n>& a)\n{\n    v_reg<_Tp, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = V_TypeTraits<_Tp>::reinterpret_from_int(~V_TypeTraits<_Tp>::reinterpret_int(a.s[i]));\n        return c;\n}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_MATH_FUNC(func, cfunc, _Tp2) \\\ntemplate<typename _Tp, int n> inline v_reg<_Tp2, n> func(const v_reg<_Tp, n>& a) \\\n{ \\\n    v_reg<_Tp2, n> c; \\\n    for( int i = 0; i < n; i++ ) \\\n        c.s[i] = cfunc(a.s[i]); \\\n    return c; \\\n}\n\n/** @brief Square root of elements\n\nOnly for floating point types.*/\nOPENCV_HAL_IMPL_MATH_FUNC(v_sqrt, std::sqrt, _Tp)\n\n//! @cond IGNORED\nOPENCV_HAL_IMPL_MATH_FUNC(v_sin, std::sin, _Tp)\nOPENCV_HAL_IMPL_MATH_FUNC(v_cos, std::cos, _Tp)\nOPENCV_HAL_IMPL_MATH_FUNC(v_exp, std::exp, _Tp)\nOPENCV_HAL_IMPL_MATH_FUNC(v_log, std::log, _Tp)\n//! @endcond\n\n/** @brief Absolute value of elements\n\nOnly for floating point types.*/\nOPENCV_HAL_IMPL_MATH_FUNC(v_abs, (typename V_TypeTraits<_Tp>::abs_type)std::abs,\n                          typename V_TypeTraits<_Tp>::abs_type)\n\n/** @brief Round elements\n\nOnly for floating point types.*/\nOPENCV_HAL_IMPL_MATH_FUNC(v_round, cvRound, int)\n\n/** @brief Floor elements\n\nOnly for floating point types.*/\nOPENCV_HAL_IMPL_MATH_FUNC(v_floor, cvFloor, int)\n\n/** @brief Ceil elements\n\nOnly for floating point types.*/\nOPENCV_HAL_IMPL_MATH_FUNC(v_ceil, cvCeil, int)\n\n/** @brief Truncate elements\n\nOnly for floating point types.*/\nOPENCV_HAL_IMPL_MATH_FUNC(v_trunc, int, int)\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_MINMAX_FUNC(func, cfunc) \\\ntemplate<typename _Tp, int n> inline v_reg<_Tp, n> func(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \\\n{ \\\n    v_reg<_Tp, n> c; \\\n    for( int i = 0; i < n; i++ ) \\\n        c.s[i] = cfunc(a.s[i], b.s[i]); \\\n    return c; \\\n}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_REDUCE_MINMAX_FUNC(func, cfunc) \\\ntemplate<typename _Tp, int n> inline _Tp func(const v_reg<_Tp, n>& a) \\\n{ \\\n    _Tp c = a.s[0]; \\\n    for( int i = 1; i < n; i++ ) \\\n        c = cfunc(c, a.s[i]); \\\n    return c; \\\n}\n\n/** @brief Choose min values for each pair\n\nScheme:\n@code\n{A1 A2 ...}\n{B1 B2 ...}\n--------------\n{min(A1,B1) min(A2,B2) ...}\n@endcode\nFor all types except 64-bit integer. */\nOPENCV_HAL_IMPL_MINMAX_FUNC(v_min, std::min)\n\n/** @brief Choose max values for each pair\n\nScheme:\n@code\n{A1 A2 ...}\n{B1 B2 ...}\n--------------\n{max(A1,B1) max(A2,B2) ...}\n@endcode\nFor all types except 64-bit integer. */\nOPENCV_HAL_IMPL_MINMAX_FUNC(v_max, std::max)\n\n/** @brief Find one min value\n\nScheme:\n@code\n{A1 A2 A3 ...} => min(A1,A2,A3,...)\n@endcode\nFor 32-bit integer and 32-bit floating point types. */\nOPENCV_HAL_IMPL_REDUCE_MINMAX_FUNC(v_reduce_min, std::min)\n\n/** @brief Find one max value\n\nScheme:\n@code\n{A1 A2 A3 ...} => max(A1,A2,A3,...)\n@endcode\nFor 32-bit integer and 32-bit floating point types. */\nOPENCV_HAL_IMPL_REDUCE_MINMAX_FUNC(v_reduce_max, std::max)\n\n//! @cond IGNORED\ntemplate<typename _Tp, int n>\ninline void v_minmax( const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b,\n                      v_reg<_Tp, n>& minval, v_reg<_Tp, n>& maxval )\n{\n    for( int i = 0; i < n; i++ )\n    {\n        minval.s[i] = std::min(a.s[i], b.s[i]);\n        maxval.s[i] = std::max(a.s[i], b.s[i]);\n    }\n}\n//! @endcond\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_CMP_OP(cmp_op) \\\ntemplate<typename _Tp, int n> \\\ninline v_reg<_Tp, n> operator cmp_op(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \\\n{ \\\n    typedef typename V_TypeTraits<_Tp>::int_type itype; \\\n    v_reg<_Tp, n> c; \\\n    for( int i = 0; i < n; i++ ) \\\n        c.s[i] = V_TypeTraits<_Tp>::reinterpret_from_int((itype)-(int)(a.s[i] cmp_op b.s[i])); \\\n    return c; \\\n}\n\n/** @brief Less-than comparison\n\nFor all types except 64-bit integer values. */\nOPENCV_HAL_IMPL_CMP_OP(<)\n\n/** @brief Greater-than comparison\n\nFor all types except 64-bit integer values. */\nOPENCV_HAL_IMPL_CMP_OP(>)\n\n/** @brief Less-than or equal comparison\n\nFor all types except 64-bit integer values. */\nOPENCV_HAL_IMPL_CMP_OP(<=)\n\n/** @brief Greater-than or equal comparison\n\nFor all types except 64-bit integer values. */\nOPENCV_HAL_IMPL_CMP_OP(>=)\n\n/** @brief Equal comparison\n\nFor all types except 64-bit integer values. */\nOPENCV_HAL_IMPL_CMP_OP(==)\n\n/** @brief Not equal comparison\n\nFor all types except 64-bit integer values. */\nOPENCV_HAL_IMPL_CMP_OP(!=)\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_ADD_SUB_OP(func, bin_op, cast_op, _Tp2) \\\ntemplate<typename _Tp, int n> \\\ninline v_reg<_Tp2, n> func(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \\\n{ \\\n    typedef _Tp2 rtype; \\\n    v_reg<rtype, n> c; \\\n    for( int i = 0; i < n; i++ ) \\\n        c.s[i] = cast_op(a.s[i] bin_op b.s[i]); \\\n    return c; \\\n}\n\n/** @brief Add values without saturation\n\nFor 8- and 16-bit integer values. */\nOPENCV_HAL_IMPL_ADD_SUB_OP(v_add_wrap, +, (_Tp), _Tp)\n\n/** @brief Subtract values without saturation\n\nFor 8- and 16-bit integer values. */\nOPENCV_HAL_IMPL_ADD_SUB_OP(v_sub_wrap, -, (_Tp), _Tp)\n\n//! @cond IGNORED\ntemplate<typename T> inline T _absdiff(T a, T b)\n{\n    return a > b ? a - b : b - a;\n}\n//! @endcond\n\n/** @brief Absolute difference\n\nReturns \\f$ |a - b| \\f$ converted to corresponding unsigned type.\nExample:\n@code{.cpp}\nv_int32x4 a, b; // {1, 2, 3, 4} and {4, 3, 2, 1}\nv_uint32x4 c = v_absdiff(a, b); // result is {3, 1, 1, 3}\n@endcode\nFor 8-, 16-, 32-bit integer source types. */\ntemplate<typename _Tp, int n>\ninline v_reg<typename V_TypeTraits<_Tp>::abs_type, n> v_absdiff(const v_reg<_Tp, n>& a, const v_reg<_Tp, n> & b)\n{\n    typedef typename V_TypeTraits<_Tp>::abs_type rtype;\n    v_reg<rtype, n> c;\n    const rtype mask = std::numeric_limits<_Tp>::is_signed ? (1 << (sizeof(rtype)*8 - 1)) : 0;\n    for( int i = 0; i < n; i++ )\n    {\n        rtype ua = a.s[i] ^ mask;\n        rtype ub = b.s[i] ^ mask;\n        c.s[i] = _absdiff(ua, ub);\n    }\n    return c;\n}\n\n/** @overload\n\nFor 32-bit floating point values */\ninline v_float32x4 v_absdiff(const v_float32x4& a, const v_float32x4& b)\n{\n    v_float32x4 c;\n    for( int i = 0; i < c.nlanes; i++ )\n        c.s[i] = _absdiff(a.s[i], b.s[i]);\n    return c;\n}\n\n/** @overload\n\nFor 64-bit floating point values */\ninline v_float64x2 v_absdiff(const v_float64x2& a, const v_float64x2& b)\n{\n    v_float64x2 c;\n    for( int i = 0; i < c.nlanes; i++ )\n        c.s[i] = _absdiff(a.s[i], b.s[i]);\n    return c;\n}\n\n/** @brief Inversed square root\n\nReturns \\f$ 1/sqrt(a) \\f$\nFor floating point types only. */\ntemplate<typename _Tp, int n>\ninline v_reg<_Tp, n> v_invsqrt(const v_reg<_Tp, n>& a)\n{\n    v_reg<_Tp, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = 1.f/std::sqrt(a.s[i]);\n    return c;\n}\n\n/** @brief Magnitude\n\nReturns \\f$ sqrt(a^2 + b^2) \\f$\nFor floating point types only. */\ntemplate<typename _Tp, int n>\ninline v_reg<_Tp, n> v_magnitude(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b)\n{\n    v_reg<_Tp, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = std::sqrt(a.s[i]*a.s[i] + b.s[i]*b.s[i]);\n    return c;\n}\n\n/** @brief Square of the magnitude\n\nReturns \\f$ a^2 + b^2 \\f$\nFor floating point types only. */\ntemplate<typename _Tp, int n>\ninline v_reg<_Tp, n> v_sqr_magnitude(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b)\n{\n    v_reg<_Tp, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = a.s[i]*a.s[i] + b.s[i]*b.s[i];\n    return c;\n}\n\n/** @brief Multiply and add\n\nReturns \\f$ a*b + c \\f$\nFor floating point types only. */\ntemplate<typename _Tp, int n>\ninline v_reg<_Tp, n> v_muladd(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b,\n                              const v_reg<_Tp, n>& c)\n{\n    v_reg<_Tp, n> d;\n    for( int i = 0; i < n; i++ )\n        d.s[i] = a.s[i]*b.s[i] + c.s[i];\n    return d;\n}\n\n/** @brief Dot product of elements\n\nMultiply values in two registers and sum adjacent result pairs.\nScheme:\n@code\n  {A1 A2 ...} // 16-bit\nx {B1 B2 ...} // 16-bit\n-------------\n{A1B1+A2B2 ...} // 32-bit\n@endcode\nImplemented only for 16-bit signed source type (v_int16x8).\n*/\ntemplate<typename _Tp, int n> inline v_reg<typename V_TypeTraits<_Tp>::w_type, n/2>\n    v_dotprod(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b)\n{\n    typedef typename V_TypeTraits<_Tp>::w_type w_type;\n    v_reg<w_type, n/2> c;\n    for( int i = 0; i < (n/2); i++ )\n        c.s[i] = (w_type)a.s[i*2]*b.s[i*2] + (w_type)a.s[i*2+1]*b.s[i*2+1];\n    return c;\n}\n\n/** @brief Multiply and expand\n\nMultiply values two registers and store results in two registers with wider pack type.\nScheme:\n@code\n  {A B C D} // 32-bit\nx {E F G H} // 32-bit\n---------------\n{AE BF}         // 64-bit\n        {CG DH} // 64-bit\n@endcode\nExample:\n@code{.cpp}\nv_uint32x4 a, b; // {1,2,3,4} and {2,2,2,2}\nv_uint64x2 c, d; // results\nv_mul_expand(a, b, c, d); // c, d = {2,4}, {6, 8}\n@endcode\nImplemented only for 16- and unsigned 32-bit source types (v_int16x8, v_uint16x8, v_uint32x4).\n*/\ntemplate<typename _Tp, int n> inline void v_mul_expand(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b,\n                                                       v_reg<typename V_TypeTraits<_Tp>::w_type, n/2>& c,\n                                                       v_reg<typename V_TypeTraits<_Tp>::w_type, n/2>& d)\n{\n    typedef typename V_TypeTraits<_Tp>::w_type w_type;\n    for( int i = 0; i < (n/2); i++ )\n    {\n        c.s[i] = (w_type)a.s[i]*b.s[i];\n        d.s[i] = (w_type)a.s[i+(n/2)]*b.s[i+(n/2)];\n    }\n}\n\n//! @cond IGNORED\ntemplate<typename _Tp, int n> inline void v_hsum(const v_reg<_Tp, n>& a,\n                                                 v_reg<typename V_TypeTraits<_Tp>::w_type, n/2>& c)\n{\n    typedef typename V_TypeTraits<_Tp>::w_type w_type;\n    for( int i = 0; i < (n/2); i++ )\n    {\n        c.s[i] = (w_type)a.s[i*2] + a.s[i*2+1];\n    }\n}\n//! @endcond\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_SHIFT_OP(shift_op) \\\ntemplate<typename _Tp, int n> inline v_reg<_Tp, n> operator shift_op(const v_reg<_Tp, n>& a, int imm) \\\n{ \\\n    v_reg<_Tp, n> c; \\\n    for( int i = 0; i < n; i++ ) \\\n        c.s[i] = (_Tp)(a.s[i] shift_op imm); \\\n    return c; \\\n}\n\n/** @brief Bitwise shift left\n\nFor 16-, 32- and 64-bit integer values. */\nOPENCV_HAL_IMPL_SHIFT_OP(<<)\n\n/** @brief Bitwise shift right\n\nFor 16-, 32- and 64-bit integer values. */\nOPENCV_HAL_IMPL_SHIFT_OP(>>)\n\n/** @brief Sum packed values\n\nScheme:\n@code\n{A1 A2 A3 ...} => sum{A1,A2,A3,...}\n@endcode\nFor 32-bit integer and 32-bit floating point types.*/\ntemplate<typename _Tp, int n> inline typename V_TypeTraits<_Tp>::sum_type v_reduce_sum(const v_reg<_Tp, n>& a)\n{\n    typename V_TypeTraits<_Tp>::sum_type c = a.s[0];\n    for( int i = 1; i < n; i++ )\n        c += a.s[i];\n    return c;\n}\n\n/** @brief Get negative values mask\n\nReturned value is a bit mask with bits set to 1 on places corresponding to negative packed values indexes.\nExample:\n@code{.cpp}\nv_int32x4 r; // set to {-1, -1, 1, 1}\nint mask = v_signmask(r); // mask = 3 <== 00000000 00000000 00000000 00000011\n@endcode\nFor all types except 64-bit. */\ntemplate<typename _Tp, int n> inline int v_signmask(const v_reg<_Tp, n>& a)\n{\n    int mask = 0;\n    for( int i = 0; i < n; i++ )\n        mask |= (V_TypeTraits<_Tp>::reinterpret_int(a.s[i]) < 0) << i;\n    return mask;\n}\n\n/** @brief Check if all packed values are less than zero\n\nUnsigned values will be casted to signed: `uchar 254 => char -2`.\nFor all types except 64-bit. */\ntemplate<typename _Tp, int n> inline bool v_check_all(const v_reg<_Tp, n>& a)\n{\n    for( int i = 0; i < n; i++ )\n        if( V_TypeTraits<_Tp>::reinterpret_int(a.s[i]) >= 0 )\n            return false;\n    return true;\n}\n\n/** @brief Check if any of packed values is less than zero\n\nUnsigned values will be casted to signed: `uchar 254 => char -2`.\nFor all types except 64-bit. */\ntemplate<typename _Tp, int n> inline bool v_check_any(const v_reg<_Tp, n>& a)\n{\n    for( int i = 0; i < n; i++ )\n        if( V_TypeTraits<_Tp>::reinterpret_int(a.s[i]) < 0 )\n            return true;\n    return false;\n}\n\n/** @brief Bitwise select\n\nReturn value will be built by combining values a and b using the following scheme:\nIf the i-th bit in _mask_ is 1\n    select i-th bit from _a_\nelse\n    select i-th bit from _b_ */\ntemplate<typename _Tp, int n> inline v_reg<_Tp, n> v_select(const v_reg<_Tp, n>& mask,\n                                                           const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b)\n{\n    typedef V_TypeTraits<_Tp> Traits;\n    typedef typename Traits::int_type int_type;\n    v_reg<_Tp, n> c;\n    for( int i = 0; i < n; i++ )\n    {\n        int_type m = Traits::reinterpret_int(mask.s[i]);\n        c.s[i] =  Traits::reinterpret_from_int((Traits::reinterpret_int(a.s[i]) & m)\n                                             | (Traits::reinterpret_int(b.s[i]) & ~m));\n    }\n    return c;\n}\n\n/** @brief Expand values to the wider pack type\n\nCopy contents of register to two registers with 2x wider pack type.\nScheme:\n@code\n int32x4     int64x2 int64x2\n{A B C D} ==> {A B} , {C D}\n@endcode */\ntemplate<typename _Tp, int n> inline void v_expand(const v_reg<_Tp, n>& a,\n                            v_reg<typename V_TypeTraits<_Tp>::w_type, n/2>& b0,\n                            v_reg<typename V_TypeTraits<_Tp>::w_type, n/2>& b1)\n{\n    for( int i = 0; i < (n/2); i++ )\n    {\n        b0.s[i] = a.s[i];\n        b1.s[i] = a.s[i+(n/2)];\n    }\n}\n\n//! @cond IGNORED\ntemplate<typename _Tp, int n> inline v_reg<typename V_TypeTraits<_Tp>::int_type, n>\n    v_reinterpret_as_int(const v_reg<_Tp, n>& a)\n{\n    v_reg<typename V_TypeTraits<_Tp>::int_type, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = V_TypeTraits<_Tp>::reinterpret_int(a.s[i]);\n    return c;\n}\n\ntemplate<typename _Tp, int n> inline v_reg<typename V_TypeTraits<_Tp>::uint_type, n>\n    v_reinterpret_as_uint(const v_reg<_Tp, n>& a)\n{\n    v_reg<typename V_TypeTraits<_Tp>::uint_type, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = V_TypeTraits<_Tp>::reinterpret_uint(a.s[i]);\n    return c;\n}\n//! @endcond\n\n/** @brief Interleave two vectors\n\nScheme:\n@code\n  {A1 A2 A3 A4}\n  {B1 B2 B3 B4}\n---------------\n  {A1 B1 A2 B2} and {A3 B3 A4 B4}\n@endcode\nFor all types except 64-bit.\n*/\ntemplate<typename _Tp, int n> inline void v_zip( const v_reg<_Tp, n>& a0, const v_reg<_Tp, n>& a1,\n                                               v_reg<_Tp, n>& b0, v_reg<_Tp, n>& b1 )\n{\n    int i;\n    for( i = 0; i < n/2; i++ )\n    {\n        b0.s[i*2] = a0.s[i];\n        b0.s[i*2+1] = a1.s[i];\n    }\n    for( ; i < n; i++ )\n    {\n        b1.s[i*2-n] = a0.s[i];\n        b1.s[i*2-n+1] = a1.s[i];\n    }\n}\n\n/** @brief Load register contents from memory\n\n@param ptr pointer to memory block with data\n@return register object\n\n@note Returned type will be detected from passed pointer type, for example uchar ==> cv::v_uint8x16, int ==> cv::v_int32x4, etc.\n */\ntemplate<typename _Tp>\ninline v_reg<_Tp, V_SIMD128Traits<_Tp>::nlanes> v_load(const _Tp* ptr)\n{\n    return v_reg<_Tp, V_SIMD128Traits<_Tp>::nlanes>(ptr);\n}\n\n/** @brief Load register contents from memory (aligned)\n\nsimilar to cv::v_load, but source memory block should be aligned (to 16-byte boundary)\n */\ntemplate<typename _Tp>\ninline v_reg<_Tp, V_SIMD128Traits<_Tp>::nlanes> v_load_aligned(const _Tp* ptr)\n{\n    return v_reg<_Tp, V_SIMD128Traits<_Tp>::nlanes>(ptr);\n}\n\n/** @brief Load register contents from two memory blocks\n\n@param loptr memory block containing data for first half (0..n/2)\n@param hiptr memory block containing data for second half (n/2..n)\n\n@code{.cpp}\nint lo[2] = { 1, 2 }, hi[2] = { 3, 4 };\nv_int32x4 r = v_load_halves(lo, hi);\n@endcode\n */\ntemplate<typename _Tp>\ninline v_reg<_Tp, V_SIMD128Traits<_Tp>::nlanes> v_load_halves(const _Tp* loptr, const _Tp* hiptr)\n{\n    v_reg<_Tp, V_SIMD128Traits<_Tp>::nlanes> c;\n    for( int i = 0; i < c.nlanes/2; i++ )\n    {\n        c.s[i] = loptr[i];\n        c.s[i+c.nlanes/2] = hiptr[i];\n    }\n    return c;\n}\n\n/** @brief Load register contents from memory with double expand\n\nSame as cv::v_load, but result pack type will be 2x wider than memory type.\n\n@code{.cpp}\nshort buf[4] = {1, 2, 3, 4}; // type is int16\nv_int32x4 r = v_load_expand(buf); // r = {1, 2, 3, 4} - type is int32\n@endcode\nFor 8-, 16-, 32-bit integer source types. */\ntemplate<typename _Tp>\ninline v_reg<typename V_TypeTraits<_Tp>::w_type, V_SIMD128Traits<_Tp>::nlanes / 2>\nv_load_expand(const _Tp* ptr)\n{\n    typedef typename V_TypeTraits<_Tp>::w_type w_type;\n    v_reg<w_type, V_SIMD128Traits<w_type>::nlanes> c;\n    for( int i = 0; i < c.nlanes; i++ )\n    {\n        c.s[i] = ptr[i];\n    }\n    return c;\n}\n\n/** @brief Load register contents from memory with quad expand\n\nSame as cv::v_load_expand, but result type is 4 times wider than source.\n@code{.cpp}\nchar buf[4] = {1, 2, 3, 4}; // type is int8\nv_int32x4 r = v_load_q(buf); // r = {1, 2, 3, 4} - type is int32\n@endcode\nFor 8-bit integer source types. */\ntemplate<typename _Tp>\ninline v_reg<typename V_TypeTraits<_Tp>::q_type, V_SIMD128Traits<_Tp>::nlanes / 4>\nv_load_expand_q(const _Tp* ptr)\n{\n    typedef typename V_TypeTraits<_Tp>::q_type q_type;\n    v_reg<q_type, V_SIMD128Traits<q_type>::nlanes> c;\n    for( int i = 0; i < c.nlanes; i++ )\n    {\n        c.s[i] = ptr[i];\n    }\n    return c;\n}\n\n/** @brief Load and deinterleave (4 channels)\n\nLoad data from memory deinterleave and store to 4 registers.\nScheme:\n@code\n{A1 B1 C1 D1 A2 B2 C2 D2 ...} ==> {A1 A2 ...}, {B1 B2 ...}, {C1 C2 ...}, {D1 D2 ...}\n@endcode\nFor all types except 64-bit. */\ntemplate<typename _Tp, int n> inline void v_load_deinterleave(const _Tp* ptr, v_reg<_Tp, n>& a,\n                                                            v_reg<_Tp, n>& b, v_reg<_Tp, n>& c)\n{\n    int i, i3;\n    for( i = i3 = 0; i < n; i++, i3 += 3 )\n    {\n        a.s[i] = ptr[i3];\n        b.s[i] = ptr[i3+1];\n        c.s[i] = ptr[i3+2];\n    }\n}\n\n/** @brief Load and deinterleave (3 channels)\n\nLoad data from memory deinterleave and store to 3 registers.\nScheme:\n@code\n{A1 B1 C1 A2 B2 C2 ...} ==> {A1 A2 ...}, {B1 B2 ...}, {C1 C2 ...}\n@endcode\nFor all types except 64-bit. */\ntemplate<typename _Tp, int n>\ninline void v_load_deinterleave(const _Tp* ptr, v_reg<_Tp, n>& a,\n                                v_reg<_Tp, n>& b, v_reg<_Tp, n>& c,\n                                v_reg<_Tp, n>& d)\n{\n    int i, i4;\n    for( i = i4 = 0; i < n; i++, i4 += 4 )\n    {\n        a.s[i] = ptr[i4];\n        b.s[i] = ptr[i4+1];\n        c.s[i] = ptr[i4+2];\n        d.s[i] = ptr[i4+3];\n    }\n}\n\n/** @brief Interleave and store (3 channels)\n\nInterleave and store data from 3 registers to memory.\nScheme:\n@code\n{A1 A2 ...}, {B1 B2 ...}, {C1 C2 ...}, {D1 D2 ...} ==> {A1 B1 C1 D1 A2 B2 C2 D2 ...}\n@endcode\nFor all types except 64-bit. */\ntemplate<typename _Tp, int n>\ninline void v_store_interleave( _Tp* ptr, const v_reg<_Tp, n>& a,\n                                const v_reg<_Tp, n>& b, const v_reg<_Tp, n>& c)\n{\n    int i, i3;\n    for( i = i3 = 0; i < n; i++, i3 += 3 )\n    {\n        ptr[i3] = a.s[i];\n        ptr[i3+1] = b.s[i];\n        ptr[i3+2] = c.s[i];\n    }\n}\n\n/** @brief Interleave and store (4 channels)\n\nInterleave and store data from 4 registers to memory.\nScheme:\n@code\n{A1 A2 ...}, {B1 B2 ...}, {C1 C2 ...}, {D1 D2 ...} ==> {A1 B1 C1 D1 A2 B2 C2 D2 ...}\n@endcode\nFor all types except 64-bit. */\ntemplate<typename _Tp, int n> inline void v_store_interleave( _Tp* ptr, const v_reg<_Tp, n>& a,\n                                                            const v_reg<_Tp, n>& b, const v_reg<_Tp, n>& c,\n                                                            const v_reg<_Tp, n>& d)\n{\n    int i, i4;\n    for( i = i4 = 0; i < n; i++, i4 += 4 )\n    {\n        ptr[i4] = a.s[i];\n        ptr[i4+1] = b.s[i];\n        ptr[i4+2] = c.s[i];\n        ptr[i4+3] = d.s[i];\n    }\n}\n\n/** @brief Store data to memory\n\nStore register contents to memory.\nScheme:\n@code\n  REG {A B C D} ==> MEM {A B C D}\n@endcode\nPointer can be unaligned. */\ntemplate<typename _Tp, int n>\ninline void v_store(_Tp* ptr, const v_reg<_Tp, n>& a)\n{\n    for( int i = 0; i < n; i++ )\n        ptr[i] = a.s[i];\n}\n\n/** @brief Store data to memory (lower half)\n\nStore lower half of register contents to memory.\nScheme:\n@code\n  REG {A B C D} ==> MEM {A B}\n@endcode */\ntemplate<typename _Tp, int n>\ninline void v_store_low(_Tp* ptr, const v_reg<_Tp, n>& a)\n{\n    for( int i = 0; i < (n/2); i++ )\n        ptr[i] = a.s[i];\n}\n\n/** @brief Store data to memory (higher half)\n\nStore higher half of register contents to memory.\nScheme:\n@code\n  REG {A B C D} ==> MEM {C D}\n@endcode */\ntemplate<typename _Tp, int n>\ninline void v_store_high(_Tp* ptr, const v_reg<_Tp, n>& a)\n{\n    for( int i = 0; i < (n/2); i++ )\n        ptr[i] = a.s[i+(n/2)];\n}\n\n/** @brief Store data to memory (aligned)\n\nStore register contents to memory.\nScheme:\n@code\n  REG {A B C D} ==> MEM {A B C D}\n@endcode\nPointer __should__ be aligned by 16-byte boundary. */\ntemplate<typename _Tp, int n>\ninline void v_store_aligned(_Tp* ptr, const v_reg<_Tp, n>& a)\n{\n    for( int i = 0; i < n; i++ )\n        ptr[i] = a.s[i];\n}\n\n/** @brief Combine vector from first elements of two vectors\n\nScheme:\n@code\n  {A1 A2 A3 A4}\n  {B1 B2 B3 B4}\n---------------\n  {A1 A2 B1 B2}\n@endcode\nFor all types except 64-bit. */\ntemplate<typename _Tp, int n>\ninline v_reg<_Tp, n> v_combine_low(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b)\n{\n    v_reg<_Tp, n> c;\n    for( int i = 0; i < (n/2); i++ )\n    {\n        c.s[i] = a.s[i];\n        c.s[i+(n/2)] = b.s[i];\n    }\n    return c;\n}\n\n/** @brief Combine vector from last elements of two vectors\n\nScheme:\n@code\n  {A1 A2 A3 A4}\n  {B1 B2 B3 B4}\n---------------\n  {A3 A4 B3 B4}\n@endcode\nFor all types except 64-bit. */\ntemplate<typename _Tp, int n>\ninline v_reg<_Tp, n> v_combine_high(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b)\n{\n    v_reg<_Tp, n> c;\n    for( int i = 0; i < (n/2); i++ )\n    {\n        c.s[i] = a.s[i+(n/2)];\n        c.s[i+(n/2)] = b.s[i+(n/2)];\n    }\n    return c;\n}\n\n/** @brief Combine two vectors from lower and higher parts of two other vectors\n\n@code{.cpp}\nlow = cv::v_combine_low(a, b);\nhigh = cv::v_combine_high(a, b);\n@endcode */\ntemplate<typename _Tp, int n>\ninline void v_recombine(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b,\n                        v_reg<_Tp, n>& low, v_reg<_Tp, n>& high)\n{\n    for( int i = 0; i < (n/2); i++ )\n    {\n        low.s[i] = a.s[i];\n        low.s[i+(n/2)] = b.s[i];\n        high.s[i] = a.s[i+(n/2)];\n        high.s[i+(n/2)] = b.s[i+(n/2)];\n    }\n}\n\n/** @brief Vector extract\n\nScheme:\n@code\n  {A1 A2 A3 A4}\n  {B1 B2 B3 B4}\n========================\nshift = 1  {A2 A3 A4 B1}\nshift = 2  {A3 A4 B1 B2}\nshift = 3  {A4 B1 B2 B3}\n@endcode\nRestriction: 0 <= shift < nlanes\n\nUsage:\n@code\nv_int32x4 a, b, c;\nc = v_extract<2>(a, b);\n@endcode\nFor integer types only. */\ntemplate<int s, typename _Tp, int n>\ninline v_reg<_Tp, n> v_extract(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b)\n{\n    v_reg<_Tp, n> r;\n    const int shift = n - s;\n    int i = 0;\n    for (; i < shift; ++i)\n        r.s[i] = a.s[i+s];\n    for (; i < n; ++i)\n        r.s[i] = b.s[i-shift];\n    return r;\n}\n\n/** @brief Round\n\nRounds each value. Input type is float vector ==> output type is int vector.*/\ntemplate<int n> inline v_reg<int, n> v_round(const v_reg<float, n>& a)\n{\n    v_reg<int, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = cvRound(a.s[i]);\n    return c;\n}\n\n/** @brief Floor\n\nFloor each value. Input type is float vector ==> output type is int vector.*/\ntemplate<int n> inline v_reg<int, n> v_floor(const v_reg<float, n>& a)\n{\n    v_reg<int, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = cvFloor(a.s[i]);\n    return c;\n}\n\n/** @brief Ceil\n\nCeil each value. Input type is float vector ==> output type is int vector.*/\ntemplate<int n> inline v_reg<int, n> v_ceil(const v_reg<float, n>& a)\n{\n    v_reg<int, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = cvCeil(a.s[i]);\n    return c;\n}\n\n/** @brief Trunc\n\nTruncate each value. Input type is float vector ==> output type is int vector.*/\ntemplate<int n> inline v_reg<int, n> v_trunc(const v_reg<float, n>& a)\n{\n    v_reg<int, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = (int)(a.s[i]);\n    return c;\n}\n\n/** @overload */\ntemplate<int n> inline v_reg<int, n*2> v_round(const v_reg<double, n>& a)\n{\n    v_reg<int, n*2> c;\n    for( int i = 0; i < n; i++ )\n    {\n        c.s[i] = cvRound(a.s[i]);\n        c.s[i+n] = 0;\n    }\n    return c;\n}\n\n/** @overload */\ntemplate<int n> inline v_reg<int, n*2> v_floor(const v_reg<double, n>& a)\n{\n    v_reg<int, n> c;\n    for( int i = 0; i < n; i++ )\n    {\n        c.s[i] = cvFloor(a.s[i]);\n        c.s[i+n] = 0;\n    }\n    return c;\n}\n\n/** @overload */\ntemplate<int n> inline v_reg<int, n*2> v_ceil(const v_reg<double, n>& a)\n{\n    v_reg<int, n> c;\n    for( int i = 0; i < n; i++ )\n    {\n        c.s[i] = cvCeil(a.s[i]);\n        c.s[i+n] = 0;\n    }\n    return c;\n}\n\n/** @overload */\ntemplate<int n> inline v_reg<int, n*2> v_trunc(const v_reg<double, n>& a)\n{\n    v_reg<int, n> c;\n    for( int i = 0; i < n; i++ )\n    {\n        c.s[i] = cvCeil(a.s[i]);\n        c.s[i+n] = 0;\n    }\n    return c;\n}\n\n/** @brief Convert to float\n\nSupported input type is cv::v_int32x4. */\ntemplate<int n> inline v_reg<float, n> v_cvt_f32(const v_reg<int, n>& a)\n{\n    v_reg<float, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = (float)a.s[i];\n    return c;\n}\n\n/** @brief Convert to double\n\nSupported input type is cv::v_int32x4. */\ntemplate<int n> inline v_reg<double, n> v_cvt_f64(const v_reg<int, n*2>& a)\n{\n    v_reg<double, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = (double)a.s[i];\n    return c;\n}\n\n/** @brief Convert to double\n\nSupported input type is cv::v_float32x4. */\ntemplate<int n> inline v_reg<double, n> v_cvt_f64(const v_reg<float, n*2>& a)\n{\n    v_reg<double, n> c;\n    for( int i = 0; i < n; i++ )\n        c.s[i] = (double)a.s[i];\n    return c;\n}\n\n/** @brief Transpose 4x4 matrix\n\nScheme:\n@code\na0  {A1 A2 A3 A4}\na1  {B1 B2 B3 B4}\na2  {C1 C2 C3 C4}\na3  {D1 D2 D3 D4}\n===============\nb0  {A1 B1 C1 D1}\nb1  {A2 B2 C2 D2}\nb2  {A3 B3 C3 D3}\nb3  {A4 B4 C4 D4}\n@endcode\n*/\ntemplate<typename _Tp>\ninline void v_transpose4x4( v_reg<_Tp, 4>& a0, const v_reg<_Tp, 4>& a1,\n                            const v_reg<_Tp, 4>& a2, const v_reg<_Tp, 4>& a3,\n                            v_reg<_Tp, 4>& b0, v_reg<_Tp, 4>& b1,\n                            v_reg<_Tp, 4>& b2, v_reg<_Tp, 4>& b3 )\n{\n    b0 = v_reg<_Tp, 4>(a0.s[0], a1.s[0], a2.s[0], a3.s[0]);\n    b1 = v_reg<_Tp, 4>(a0.s[1], a1.s[1], a2.s[1], a3.s[1]);\n    b2 = v_reg<_Tp, 4>(a0.s[2], a1.s[2], a2.s[2], a3.s[2]);\n    b3 = v_reg<_Tp, 4>(a0.s[3], a1.s[3], a2.s[3], a3.s[3]);\n}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_INIT_ZERO(_Tpvec, _Tp, suffix) \\\ninline _Tpvec v_setzero_##suffix() { return _Tpvec::zero(); }\n\n//! @name Init with zero\n//! @{\n//! @brief Create new vector with zero elements\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_uint8x16, uchar, u8)\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_int8x16, schar, s8)\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_uint16x8, ushort, u16)\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_int16x8, short, s16)\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_uint32x4, unsigned, u32)\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_int32x4, int, s32)\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_float32x4, float, f32)\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_float64x2, double, f64)\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_uint64x2, uint64, u64)\nOPENCV_HAL_IMPL_C_INIT_ZERO(v_int64x2, int64, s64)\n//! @}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_INIT_VAL(_Tpvec, _Tp, suffix) \\\ninline _Tpvec v_setall_##suffix(_Tp val) { return _Tpvec::all(val); }\n\n//! @name Init with value\n//! @{\n//! @brief Create new vector with elements set to a specific value\nOPENCV_HAL_IMPL_C_INIT_VAL(v_uint8x16, uchar, u8)\nOPENCV_HAL_IMPL_C_INIT_VAL(v_int8x16, schar, s8)\nOPENCV_HAL_IMPL_C_INIT_VAL(v_uint16x8, ushort, u16)\nOPENCV_HAL_IMPL_C_INIT_VAL(v_int16x8, short, s16)\nOPENCV_HAL_IMPL_C_INIT_VAL(v_uint32x4, unsigned, u32)\nOPENCV_HAL_IMPL_C_INIT_VAL(v_int32x4, int, s32)\nOPENCV_HAL_IMPL_C_INIT_VAL(v_float32x4, float, f32)\nOPENCV_HAL_IMPL_C_INIT_VAL(v_float64x2, double, f64)\nOPENCV_HAL_IMPL_C_INIT_VAL(v_uint64x2, uint64, u64)\nOPENCV_HAL_IMPL_C_INIT_VAL(v_int64x2, int64, s64)\n//! @}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_REINTERPRET(_Tpvec, _Tp, suffix) \\\ntemplate<typename _Tp0, int n0> inline _Tpvec \\\n    v_reinterpret_as_##suffix(const v_reg<_Tp0, n0>& a) \\\n{ return a.template reinterpret_as<_Tp, _Tpvec::nlanes>(); }\n\n//! @name Reinterpret\n//! @{\n//! @brief Convert vector to different type without modifying underlying data.\nOPENCV_HAL_IMPL_C_REINTERPRET(v_uint8x16, uchar, u8)\nOPENCV_HAL_IMPL_C_REINTERPRET(v_int8x16, schar, s8)\nOPENCV_HAL_IMPL_C_REINTERPRET(v_uint16x8, ushort, u16)\nOPENCV_HAL_IMPL_C_REINTERPRET(v_int16x8, short, s16)\nOPENCV_HAL_IMPL_C_REINTERPRET(v_uint32x4, unsigned, u32)\nOPENCV_HAL_IMPL_C_REINTERPRET(v_int32x4, int, s32)\nOPENCV_HAL_IMPL_C_REINTERPRET(v_float32x4, float, f32)\nOPENCV_HAL_IMPL_C_REINTERPRET(v_float64x2, double, f64)\nOPENCV_HAL_IMPL_C_REINTERPRET(v_uint64x2, uint64, u64)\nOPENCV_HAL_IMPL_C_REINTERPRET(v_int64x2, int64, s64)\n//! @}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_SHIFTL(_Tpvec, _Tp) \\\ntemplate<int n> inline _Tpvec v_shl(const _Tpvec& a) \\\n{ return a << n; }\n\n//! @name Left shift\n//! @{\n//! @brief Shift left\nOPENCV_HAL_IMPL_C_SHIFTL(v_uint16x8, ushort)\nOPENCV_HAL_IMPL_C_SHIFTL(v_int16x8, short)\nOPENCV_HAL_IMPL_C_SHIFTL(v_uint32x4, unsigned)\nOPENCV_HAL_IMPL_C_SHIFTL(v_int32x4, int)\nOPENCV_HAL_IMPL_C_SHIFTL(v_uint64x2, uint64)\nOPENCV_HAL_IMPL_C_SHIFTL(v_int64x2, int64)\n//! @}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_SHIFTR(_Tpvec, _Tp) \\\ntemplate<int n> inline _Tpvec v_shr(const _Tpvec& a) \\\n{ return a >> n; }\n\n//! @name Right shift\n//! @{\n//! @brief Shift right\nOPENCV_HAL_IMPL_C_SHIFTR(v_uint16x8, ushort)\nOPENCV_HAL_IMPL_C_SHIFTR(v_int16x8, short)\nOPENCV_HAL_IMPL_C_SHIFTR(v_uint32x4, unsigned)\nOPENCV_HAL_IMPL_C_SHIFTR(v_int32x4, int)\nOPENCV_HAL_IMPL_C_SHIFTR(v_uint64x2, uint64)\nOPENCV_HAL_IMPL_C_SHIFTR(v_int64x2, int64)\n//! @}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_RSHIFTR(_Tpvec, _Tp) \\\ntemplate<int n> inline _Tpvec v_rshr(const _Tpvec& a) \\\n{ \\\n    _Tpvec c; \\\n    for( int i = 0; i < _Tpvec::nlanes; i++ ) \\\n        c.s[i] = (_Tp)((a.s[i] + ((_Tp)1 << (n - 1))) >> n); \\\n    return c; \\\n}\n\n//! @name Rounding shift\n//! @{\n//! @brief Rounding shift right\nOPENCV_HAL_IMPL_C_RSHIFTR(v_uint16x8, ushort)\nOPENCV_HAL_IMPL_C_RSHIFTR(v_int16x8, short)\nOPENCV_HAL_IMPL_C_RSHIFTR(v_uint32x4, unsigned)\nOPENCV_HAL_IMPL_C_RSHIFTR(v_int32x4, int)\nOPENCV_HAL_IMPL_C_RSHIFTR(v_uint64x2, uint64)\nOPENCV_HAL_IMPL_C_RSHIFTR(v_int64x2, int64)\n//! @}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_PACK(_Tpvec, _Tpnvec, _Tpn, pack_suffix) \\\ninline _Tpnvec v_##pack_suffix(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    _Tpnvec c; \\\n    for( int i = 0; i < _Tpvec::nlanes; i++ ) \\\n    { \\\n        c.s[i] = saturate_cast<_Tpn>(a.s[i]); \\\n        c.s[i+_Tpvec::nlanes] = saturate_cast<_Tpn>(b.s[i]); \\\n    } \\\n    return c; \\\n}\n\n//! @name Pack\n//! @{\n//! @brief Pack values from two vectors to one\n//!\n//! Return vector type have twice more elements than input vector types. Variant with _u_ suffix also\n//! converts to corresponding unsigned type.\n//!\n//! - pack: for 16-, 32- and 64-bit integer input types\n//! - pack_u: for 16- and 32-bit signed integer input types\nOPENCV_HAL_IMPL_C_PACK(v_uint16x8, v_uint8x16, uchar, pack)\nOPENCV_HAL_IMPL_C_PACK(v_int16x8, v_int8x16, schar, pack)\nOPENCV_HAL_IMPL_C_PACK(v_uint32x4, v_uint16x8, ushort, pack)\nOPENCV_HAL_IMPL_C_PACK(v_int32x4, v_int16x8, short, pack)\nOPENCV_HAL_IMPL_C_PACK(v_uint64x2, v_uint32x4, unsigned, pack)\nOPENCV_HAL_IMPL_C_PACK(v_int64x2, v_int32x4, int, pack)\nOPENCV_HAL_IMPL_C_PACK(v_int16x8, v_uint8x16, uchar, pack_u)\nOPENCV_HAL_IMPL_C_PACK(v_int32x4, v_uint16x8, ushort, pack_u)\n//! @}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_RSHR_PACK(_Tpvec, _Tp, _Tpnvec, _Tpn, pack_suffix) \\\ntemplate<int n> inline _Tpnvec v_rshr_##pack_suffix(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    _Tpnvec c; \\\n    for( int i = 0; i < _Tpvec::nlanes; i++ ) \\\n    { \\\n        c.s[i] = saturate_cast<_Tpn>((a.s[i] + ((_Tp)1 << (n - 1))) >> n); \\\n        c.s[i+_Tpvec::nlanes] = saturate_cast<_Tpn>((b.s[i] + ((_Tp)1 << (n - 1))) >> n); \\\n    } \\\n    return c; \\\n}\n\n//! @name Pack with rounding shift\n//! @{\n//! @brief Pack values from two vectors to one with rounding shift\n//!\n//! Values from the input vectors will be shifted right by _n_ bits with rounding, converted to narrower\n//! type and returned in the result vector. Variant with _u_ suffix converts to unsigned type.\n//!\n//! - pack: for 16-, 32- and 64-bit integer input types\n//! - pack_u: for 16- and 32-bit signed integer input types\nOPENCV_HAL_IMPL_C_RSHR_PACK(v_uint16x8, ushort, v_uint8x16, uchar, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK(v_int16x8, short, v_int8x16, schar, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK(v_uint32x4, unsigned, v_uint16x8, ushort, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK(v_int32x4, int, v_int16x8, short, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK(v_uint64x2, uint64, v_uint32x4, unsigned, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK(v_int64x2, int64, v_int32x4, int, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK(v_int16x8, short, v_uint8x16, uchar, pack_u)\nOPENCV_HAL_IMPL_C_RSHR_PACK(v_int32x4, int, v_uint16x8, ushort, pack_u)\n//! @}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_PACK_STORE(_Tpvec, _Tp, _Tpnvec, _Tpn, pack_suffix) \\\ninline void v_##pack_suffix##_store(_Tpn* ptr, const _Tpvec& a) \\\n{ \\\n    for( int i = 0; i < _Tpvec::nlanes; i++ ) \\\n        ptr[i] = saturate_cast<_Tpn>(a.s[i]); \\\n}\n\n//! @name Pack and store\n//! @{\n//! @brief Store values from the input vector into memory with pack\n//!\n//! Values will be stored into memory with saturating conversion to narrower type.\n//! Variant with _u_ suffix converts to corresponding unsigned type.\n//!\n//! - pack: for 16-, 32- and 64-bit integer input types\n//! - pack_u: for 16- and 32-bit signed integer input types\nOPENCV_HAL_IMPL_C_PACK_STORE(v_uint16x8, ushort, v_uint8x16, uchar, pack)\nOPENCV_HAL_IMPL_C_PACK_STORE(v_int16x8, short, v_int8x16, schar, pack)\nOPENCV_HAL_IMPL_C_PACK_STORE(v_uint32x4, unsigned, v_uint16x8, ushort, pack)\nOPENCV_HAL_IMPL_C_PACK_STORE(v_int32x4, int, v_int16x8, short, pack)\nOPENCV_HAL_IMPL_C_PACK_STORE(v_uint64x2, uint64, v_uint32x4, unsigned, pack)\nOPENCV_HAL_IMPL_C_PACK_STORE(v_int64x2, int64, v_int32x4, int, pack)\nOPENCV_HAL_IMPL_C_PACK_STORE(v_int16x8, short, v_uint8x16, uchar, pack_u)\nOPENCV_HAL_IMPL_C_PACK_STORE(v_int32x4, int, v_uint16x8, ushort, pack_u)\n//! @}\n\n//! @brief Helper macro\n//! @ingroup core_hal_intrin_impl\n#define OPENCV_HAL_IMPL_C_RSHR_PACK_STORE(_Tpvec, _Tp, _Tpnvec, _Tpn, pack_suffix) \\\ntemplate<int n> inline void v_rshr_##pack_suffix##_store(_Tpn* ptr, const _Tpvec& a) \\\n{ \\\n    for( int i = 0; i < _Tpvec::nlanes; i++ ) \\\n        ptr[i] = saturate_cast<_Tpn>((a.s[i] + ((_Tp)1 << (n - 1))) >> n); \\\n}\n\n//! @name Pack and store with rounding shift\n//! @{\n//! @brief Store values from the input vector into memory with pack\n//!\n//! Values will be shifted _n_ bits right with rounding, converted to narrower type and stored into\n//! memory. Variant with _u_ suffix converts to unsigned type.\n//!\n//! - pack: for 16-, 32- and 64-bit integer input types\n//! - pack_u: for 16- and 32-bit signed integer input types\nOPENCV_HAL_IMPL_C_RSHR_PACK_STORE(v_uint16x8, ushort, v_uint8x16, uchar, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK_STORE(v_int16x8, short, v_int8x16, schar, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK_STORE(v_uint32x4, unsigned, v_uint16x8, ushort, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK_STORE(v_int32x4, int, v_int16x8, short, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK_STORE(v_uint64x2, uint64, v_uint32x4, unsigned, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK_STORE(v_int64x2, int64, v_int32x4, int, pack)\nOPENCV_HAL_IMPL_C_RSHR_PACK_STORE(v_int16x8, short, v_uint8x16, uchar, pack_u)\nOPENCV_HAL_IMPL_C_RSHR_PACK_STORE(v_int32x4, int, v_uint16x8, ushort, pack_u)\n//! @}\n\n/** @brief Matrix multiplication\n\nScheme:\n@code\n{A0 A1 A2 A3}   |V0|\n{B0 B1 B2 B3}   |V1|\n{C0 C1 C2 C3}   |V2|\n{D0 D1 D2 D3} x |V3|\n====================\n{R0 R1 R2 R3}, where:\nR0 = A0V0 + A1V1 + A2V2 + A3V3,\nR1 = B0V0 + B1V1 + B2V2 + B3V3\n...\n@endcode\n*/\ninline v_float32x4 v_matmul(const v_float32x4& v, const v_float32x4& m0,\n                            const v_float32x4& m1, const v_float32x4& m2,\n                            const v_float32x4& m3)\n{\n    return v_float32x4(v.s[0]*m0.s[0] + v.s[1]*m1.s[0] + v.s[2]*m2.s[0] + v.s[3]*m3.s[0],\n                       v.s[0]*m0.s[1] + v.s[1]*m1.s[1] + v.s[2]*m2.s[1] + v.s[3]*m3.s[1],\n                       v.s[0]*m0.s[2] + v.s[1]*m1.s[2] + v.s[2]*m2.s[2] + v.s[3]*m3.s[2],\n                       v.s[0]*m0.s[3] + v.s[1]*m1.s[3] + v.s[2]*m2.s[3] + v.s[3]*m3.s[3]);\n}\n\n//! @}\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/hal/intrin_neon.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HAL_INTRIN_NEON_HPP__\n#define __OPENCV_HAL_INTRIN_NEON_HPP__\n\n#include <algorithm>\n\nnamespace cv\n{\n\n//! @cond IGNORED\n\n#define CV_SIMD128 1\n\nstruct v_uint8x16\n{\n    typedef uchar lane_type;\n    enum { nlanes = 16 };\n\n    v_uint8x16() {}\n    explicit v_uint8x16(uint8x16_t v) : val(v) {}\n    v_uint8x16(uchar v0, uchar v1, uchar v2, uchar v3, uchar v4, uchar v5, uchar v6, uchar v7,\n               uchar v8, uchar v9, uchar v10, uchar v11, uchar v12, uchar v13, uchar v14, uchar v15)\n    {\n        uchar v[] = {v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15};\n        val = vld1q_u8(v);\n    }\n    uchar get0() const\n    {\n        return vgetq_lane_u8(val, 0);\n    }\n\n    uint8x16_t val;\n};\n\nstruct v_int8x16\n{\n    typedef schar lane_type;\n    enum { nlanes = 16 };\n\n    v_int8x16() {}\n    explicit v_int8x16(int8x16_t v) : val(v) {}\n    v_int8x16(schar v0, schar v1, schar v2, schar v3, schar v4, schar v5, schar v6, schar v7,\n               schar v8, schar v9, schar v10, schar v11, schar v12, schar v13, schar v14, schar v15)\n    {\n        schar v[] = {v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15};\n        val = vld1q_s8(v);\n    }\n    schar get0() const\n    {\n        return vgetq_lane_s8(val, 0);\n    }\n\n    int8x16_t val;\n};\n\nstruct v_uint16x8\n{\n    typedef ushort lane_type;\n    enum { nlanes = 8 };\n\n    v_uint16x8() {}\n    explicit v_uint16x8(uint16x8_t v) : val(v) {}\n    v_uint16x8(ushort v0, ushort v1, ushort v2, ushort v3, ushort v4, ushort v5, ushort v6, ushort v7)\n    {\n        ushort v[] = {v0, v1, v2, v3, v4, v5, v6, v7};\n        val = vld1q_u16(v);\n    }\n    ushort get0() const\n    {\n        return vgetq_lane_u16(val, 0);\n    }\n\n    uint16x8_t val;\n};\n\nstruct v_int16x8\n{\n    typedef short lane_type;\n    enum { nlanes = 8 };\n\n    v_int16x8() {}\n    explicit v_int16x8(int16x8_t v) : val(v) {}\n    v_int16x8(short v0, short v1, short v2, short v3, short v4, short v5, short v6, short v7)\n    {\n        short v[] = {v0, v1, v2, v3, v4, v5, v6, v7};\n        val = vld1q_s16(v);\n    }\n    short get0() const\n    {\n        return vgetq_lane_s16(val, 0);\n    }\n\n    int16x8_t val;\n};\n\nstruct v_uint32x4\n{\n    typedef unsigned lane_type;\n    enum { nlanes = 4 };\n\n    v_uint32x4() {}\n    explicit v_uint32x4(uint32x4_t v) : val(v) {}\n    v_uint32x4(unsigned v0, unsigned v1, unsigned v2, unsigned v3)\n    {\n        unsigned v[] = {v0, v1, v2, v3};\n        val = vld1q_u32(v);\n    }\n    unsigned get0() const\n    {\n        return vgetq_lane_u32(val, 0);\n    }\n\n    uint32x4_t val;\n};\n\nstruct v_int32x4\n{\n    typedef int lane_type;\n    enum { nlanes = 4 };\n\n    v_int32x4() {}\n    explicit v_int32x4(int32x4_t v) : val(v) {}\n    v_int32x4(int v0, int v1, int v2, int v3)\n    {\n        int v[] = {v0, v1, v2, v3};\n        val = vld1q_s32(v);\n    }\n    int get0() const\n    {\n        return vgetq_lane_s32(val, 0);\n    }\n    int32x4_t val;\n};\n\nstruct v_float32x4\n{\n    typedef float lane_type;\n    enum { nlanes = 4 };\n\n    v_float32x4() {}\n    explicit v_float32x4(float32x4_t v) : val(v) {}\n    v_float32x4(float v0, float v1, float v2, float v3)\n    {\n        float v[] = {v0, v1, v2, v3};\n        val = vld1q_f32(v);\n    }\n    float get0() const\n    {\n        return vgetq_lane_f32(val, 0);\n    }\n    float32x4_t val;\n};\n\nstruct v_uint64x2\n{\n    typedef uint64 lane_type;\n    enum { nlanes = 2 };\n\n    v_uint64x2() {}\n    explicit v_uint64x2(uint64x2_t v) : val(v) {}\n    v_uint64x2(unsigned v0, unsigned v1)\n    {\n        uint64 v[] = {v0, v1};\n        val = vld1q_u64(v);\n    }\n    uint64 get0() const\n    {\n        return vgetq_lane_u64(val, 0);\n    }\n    uint64x2_t val;\n};\n\nstruct v_int64x2\n{\n    typedef int64 lane_type;\n    enum { nlanes = 2 };\n\n    v_int64x2() {}\n    explicit v_int64x2(int64x2_t v) : val(v) {}\n    v_int64x2(int v0, int v1)\n    {\n        int64 v[] = {v0, v1};\n        val = vld1q_s64(v);\n    }\n    int64 get0() const\n    {\n        return vgetq_lane_s64(val, 0);\n    }\n    int64x2_t val;\n};\n\n#define OPENCV_HAL_IMPL_NEON_INIT(_Tpv, _Tp, suffix) \\\ninline v_##_Tpv v_setzero_##suffix() { return v_##_Tpv(vdupq_n_##suffix((_Tp)0)); } \\\ninline v_##_Tpv v_setall_##suffix(_Tp v) { return v_##_Tpv(vdupq_n_##suffix(v)); } \\\ninline _Tpv##_t vreinterpretq_##suffix##_##suffix(_Tpv##_t v) { return v; } \\\ninline v_uint8x16 v_reinterpret_as_u8(const v_##_Tpv& v) { return v_uint8x16(vreinterpretq_u8_##suffix(v.val)); } \\\ninline v_int8x16 v_reinterpret_as_s8(const v_##_Tpv& v) { return v_int8x16(vreinterpretq_s8_##suffix(v.val)); } \\\ninline v_uint16x8 v_reinterpret_as_u16(const v_##_Tpv& v) { return v_uint16x8(vreinterpretq_u16_##suffix(v.val)); } \\\ninline v_int16x8 v_reinterpret_as_s16(const v_##_Tpv& v) { return v_int16x8(vreinterpretq_s16_##suffix(v.val)); } \\\ninline v_uint32x4 v_reinterpret_as_u32(const v_##_Tpv& v) { return v_uint32x4(vreinterpretq_u32_##suffix(v.val)); } \\\ninline v_int32x4 v_reinterpret_as_s32(const v_##_Tpv& v) { return v_int32x4(vreinterpretq_s32_##suffix(v.val)); } \\\ninline v_uint64x2 v_reinterpret_as_u64(const v_##_Tpv& v) { return v_uint64x2(vreinterpretq_u64_##suffix(v.val)); } \\\ninline v_int64x2 v_reinterpret_as_s64(const v_##_Tpv& v) { return v_int64x2(vreinterpretq_s64_##suffix(v.val)); } \\\ninline v_float32x4 v_reinterpret_as_f32(const v_##_Tpv& v) { return v_float32x4(vreinterpretq_f32_##suffix(v.val)); }\n\nOPENCV_HAL_IMPL_NEON_INIT(uint8x16, uchar, u8)\nOPENCV_HAL_IMPL_NEON_INIT(int8x16, schar, s8)\nOPENCV_HAL_IMPL_NEON_INIT(uint16x8, ushort, u16)\nOPENCV_HAL_IMPL_NEON_INIT(int16x8, short, s16)\nOPENCV_HAL_IMPL_NEON_INIT(uint32x4, unsigned, u32)\nOPENCV_HAL_IMPL_NEON_INIT(int32x4, int, s32)\nOPENCV_HAL_IMPL_NEON_INIT(uint64x2, uint64, u64)\nOPENCV_HAL_IMPL_NEON_INIT(int64x2, int64, s64)\nOPENCV_HAL_IMPL_NEON_INIT(float32x4, float, f32)\n\n#define OPENCV_HAL_IMPL_NEON_PACK(_Tpvec, _Tp, hreg, suffix, _Tpwvec, wsuffix, pack, op) \\\ninline _Tpvec v_##pack(const _Tpwvec& a, const _Tpwvec& b) \\\n{ \\\n    hreg a1 = vqmov##op##_##wsuffix(a.val), b1 = vqmov##op##_##wsuffix(b.val); \\\n    return _Tpvec(vcombine_##suffix(a1, b1)); \\\n} \\\ninline void v_##pack##_store(_Tp* ptr, const _Tpwvec& a) \\\n{ \\\n    hreg a1 = vqmov##op##_##wsuffix(a.val); \\\n    vst1_##suffix(ptr, a1); \\\n} \\\ntemplate<int n> inline \\\n_Tpvec v_rshr_##pack(const _Tpwvec& a, const _Tpwvec& b) \\\n{ \\\n    hreg a1 = vqrshr##op##_n_##wsuffix(a.val, n); \\\n    hreg b1 = vqrshr##op##_n_##wsuffix(b.val, n); \\\n    return _Tpvec(vcombine_##suffix(a1, b1)); \\\n} \\\ntemplate<int n> inline \\\nvoid v_rshr_##pack##_store(_Tp* ptr, const _Tpwvec& a) \\\n{ \\\n    hreg a1 = vqrshr##op##_n_##wsuffix(a.val, n); \\\n    vst1_##suffix(ptr, a1); \\\n}\n\nOPENCV_HAL_IMPL_NEON_PACK(v_uint8x16, uchar, uint8x8_t, u8, v_uint16x8, u16, pack, n)\nOPENCV_HAL_IMPL_NEON_PACK(v_int8x16, schar, int8x8_t, s8, v_int16x8, s16, pack, n)\nOPENCV_HAL_IMPL_NEON_PACK(v_uint16x8, ushort, uint16x4_t, u16, v_uint32x4, u32, pack, n)\nOPENCV_HAL_IMPL_NEON_PACK(v_int16x8, short, int16x4_t, s16, v_int32x4, s32, pack, n)\nOPENCV_HAL_IMPL_NEON_PACK(v_uint32x4, unsigned, uint32x2_t, u32, v_uint64x2, u64, pack, n)\nOPENCV_HAL_IMPL_NEON_PACK(v_int32x4, int, int32x2_t, s32, v_int64x2, s64, pack, n)\n\nOPENCV_HAL_IMPL_NEON_PACK(v_uint8x16, uchar, uint8x8_t, u8, v_int16x8, s16, pack_u, un)\nOPENCV_HAL_IMPL_NEON_PACK(v_uint16x8, ushort, uint16x4_t, u16, v_int32x4, s32, pack_u, un)\n\ninline v_float32x4 v_matmul(const v_float32x4& v, const v_float32x4& m0,\n                            const v_float32x4& m1, const v_float32x4& m2,\n                            const v_float32x4& m3)\n{\n    float32x2_t vl = vget_low_f32(v.val), vh = vget_high_f32(v.val);\n    float32x4_t res = vmulq_lane_f32(m0.val, vl, 0);\n    res = vmlaq_lane_f32(res, m1.val, vl, 1);\n    res = vmlaq_lane_f32(res, m2.val, vh, 0);\n    res = vmlaq_lane_f32(res, m3.val, vh, 1);\n    return v_float32x4(res);\n}\n\n#define OPENCV_HAL_IMPL_NEON_BIN_OP(bin_op, _Tpvec, intrin) \\\ninline _Tpvec operator bin_op (const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    return _Tpvec(intrin(a.val, b.val)); \\\n} \\\ninline _Tpvec& operator bin_op##= (_Tpvec& a, const _Tpvec& b) \\\n{ \\\n    a.val = intrin(a.val, b.val); \\\n    return a; \\\n}\n\nOPENCV_HAL_IMPL_NEON_BIN_OP(+, v_uint8x16, vqaddq_u8)\nOPENCV_HAL_IMPL_NEON_BIN_OP(-, v_uint8x16, vqsubq_u8)\nOPENCV_HAL_IMPL_NEON_BIN_OP(+, v_int8x16, vqaddq_s8)\nOPENCV_HAL_IMPL_NEON_BIN_OP(-, v_int8x16, vqsubq_s8)\nOPENCV_HAL_IMPL_NEON_BIN_OP(+, v_uint16x8, vqaddq_u16)\nOPENCV_HAL_IMPL_NEON_BIN_OP(-, v_uint16x8, vqsubq_u16)\nOPENCV_HAL_IMPL_NEON_BIN_OP(*, v_uint16x8, vmulq_u16)\nOPENCV_HAL_IMPL_NEON_BIN_OP(+, v_int16x8, vqaddq_s16)\nOPENCV_HAL_IMPL_NEON_BIN_OP(-, v_int16x8, vqsubq_s16)\nOPENCV_HAL_IMPL_NEON_BIN_OP(*, v_int16x8, vmulq_s16)\nOPENCV_HAL_IMPL_NEON_BIN_OP(+, v_int32x4, vaddq_s32)\nOPENCV_HAL_IMPL_NEON_BIN_OP(-, v_int32x4, vsubq_s32)\nOPENCV_HAL_IMPL_NEON_BIN_OP(*, v_int32x4, vmulq_s32)\nOPENCV_HAL_IMPL_NEON_BIN_OP(+, v_uint32x4, vaddq_u32)\nOPENCV_HAL_IMPL_NEON_BIN_OP(-, v_uint32x4, vsubq_u32)\nOPENCV_HAL_IMPL_NEON_BIN_OP(*, v_uint32x4, vmulq_u32)\nOPENCV_HAL_IMPL_NEON_BIN_OP(+, v_float32x4, vaddq_f32)\nOPENCV_HAL_IMPL_NEON_BIN_OP(-, v_float32x4, vsubq_f32)\nOPENCV_HAL_IMPL_NEON_BIN_OP(*, v_float32x4, vmulq_f32)\nOPENCV_HAL_IMPL_NEON_BIN_OP(+, v_int64x2, vaddq_s64)\nOPENCV_HAL_IMPL_NEON_BIN_OP(-, v_int64x2, vsubq_s64)\nOPENCV_HAL_IMPL_NEON_BIN_OP(+, v_uint64x2, vaddq_u64)\nOPENCV_HAL_IMPL_NEON_BIN_OP(-, v_uint64x2, vsubq_u64)\n\ninline v_float32x4 operator / (const v_float32x4& a, const v_float32x4& b)\n{\n    float32x4_t reciprocal = vrecpeq_f32(b.val);\n    reciprocal = vmulq_f32(vrecpsq_f32(b.val, reciprocal), reciprocal);\n    reciprocal = vmulq_f32(vrecpsq_f32(b.val, reciprocal), reciprocal);\n    return v_float32x4(vmulq_f32(a.val, reciprocal));\n}\ninline v_float32x4& operator /= (v_float32x4& a, const v_float32x4& b)\n{\n    float32x4_t reciprocal = vrecpeq_f32(b.val);\n    reciprocal = vmulq_f32(vrecpsq_f32(b.val, reciprocal), reciprocal);\n    reciprocal = vmulq_f32(vrecpsq_f32(b.val, reciprocal), reciprocal);\n    a.val = vmulq_f32(a.val, reciprocal);\n    return a;\n}\n\ninline void v_mul_expand(const v_int16x8& a, const v_int16x8& b,\n                         v_int32x4& c, v_int32x4& d)\n{\n    c.val = vmull_s16(vget_low_s16(a.val), vget_low_s16(b.val));\n    d.val = vmull_s16(vget_high_s16(a.val), vget_high_s16(b.val));\n}\n\ninline void v_mul_expand(const v_uint16x8& a, const v_uint16x8& b,\n                         v_uint32x4& c, v_uint32x4& d)\n{\n    c.val = vmull_u16(vget_low_u16(a.val), vget_low_u16(b.val));\n    d.val = vmull_u16(vget_high_u16(a.val), vget_high_u16(b.val));\n}\n\ninline void v_mul_expand(const v_uint32x4& a, const v_uint32x4& b,\n                         v_uint64x2& c, v_uint64x2& d)\n{\n    c.val = vmull_u32(vget_low_u32(a.val), vget_low_u32(b.val));\n    d.val = vmull_u32(vget_high_u32(a.val), vget_high_u32(b.val));\n}\n\ninline v_int32x4 v_dotprod(const v_int16x8& a, const v_int16x8& b)\n{\n    int32x4_t c = vmull_s16(vget_low_s16(a.val), vget_low_s16(b.val));\n    int32x4_t d = vmull_s16(vget_high_s16(a.val), vget_high_s16(b.val));\n    int32x4x2_t cd = vuzpq_s32(c, d);\n    return v_int32x4(vaddq_s32(cd.val[0], cd.val[1]));\n}\n\n#define OPENCV_HAL_IMPL_NEON_LOGIC_OP(_Tpvec, suffix) \\\n    OPENCV_HAL_IMPL_NEON_BIN_OP(&, _Tpvec, vandq_##suffix) \\\n    OPENCV_HAL_IMPL_NEON_BIN_OP(|, _Tpvec, vorrq_##suffix) \\\n    OPENCV_HAL_IMPL_NEON_BIN_OP(^, _Tpvec, veorq_##suffix) \\\n    inline _Tpvec operator ~ (const _Tpvec& a) \\\n    { \\\n        return _Tpvec(vreinterpretq_##suffix##_u8(vmvnq_u8(vreinterpretq_u8_##suffix(a.val)))); \\\n    }\n\nOPENCV_HAL_IMPL_NEON_LOGIC_OP(v_uint8x16, u8)\nOPENCV_HAL_IMPL_NEON_LOGIC_OP(v_int8x16, s8)\nOPENCV_HAL_IMPL_NEON_LOGIC_OP(v_uint16x8, u16)\nOPENCV_HAL_IMPL_NEON_LOGIC_OP(v_int16x8, s16)\nOPENCV_HAL_IMPL_NEON_LOGIC_OP(v_uint32x4, u32)\nOPENCV_HAL_IMPL_NEON_LOGIC_OP(v_int32x4, s32)\nOPENCV_HAL_IMPL_NEON_LOGIC_OP(v_uint64x2, u64)\nOPENCV_HAL_IMPL_NEON_LOGIC_OP(v_int64x2, s64)\n\n#define OPENCV_HAL_IMPL_NEON_FLT_BIT_OP(bin_op, intrin) \\\ninline v_float32x4 operator bin_op (const v_float32x4& a, const v_float32x4& b) \\\n{ \\\n    return v_float32x4(vreinterpretq_f32_s32(intrin(vreinterpretq_s32_f32(a.val), vreinterpretq_s32_f32(b.val)))); \\\n} \\\ninline v_float32x4& operator bin_op##= (v_float32x4& a, const v_float32x4& b) \\\n{ \\\n    a.val = vreinterpretq_f32_s32(intrin(vreinterpretq_s32_f32(a.val), vreinterpretq_s32_f32(b.val))); \\\n    return a; \\\n}\n\nOPENCV_HAL_IMPL_NEON_FLT_BIT_OP(&, vandq_s32)\nOPENCV_HAL_IMPL_NEON_FLT_BIT_OP(|, vorrq_s32)\nOPENCV_HAL_IMPL_NEON_FLT_BIT_OP(^, veorq_s32)\n\ninline v_float32x4 operator ~ (const v_float32x4& a)\n{\n    return v_float32x4(vreinterpretq_f32_s32(vmvnq_s32(vreinterpretq_s32_f32(a.val))));\n}\n\ninline v_float32x4 v_sqrt(const v_float32x4& x)\n{\n    float32x4_t x1 = vmaxq_f32(x.val, vdupq_n_f32(FLT_MIN));\n    float32x4_t e = vrsqrteq_f32(x1);\n    e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x1, e), e), e);\n    e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x1, e), e), e);\n    return v_float32x4(vmulq_f32(x.val, e));\n}\n\ninline v_float32x4 v_invsqrt(const v_float32x4& x)\n{\n    float32x4_t e = vrsqrteq_f32(x.val);\n    e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x.val, e), e), e);\n    e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x.val, e), e), e);\n    return v_float32x4(e);\n}\n\ninline v_float32x4 v_abs(v_float32x4 x)\n{ return v_float32x4(vabsq_f32(x.val)); }\n\n// TODO: exp, log, sin, cos\n\n#define OPENCV_HAL_IMPL_NEON_BIN_FUNC(_Tpvec, func, intrin) \\\ninline _Tpvec func(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    return _Tpvec(intrin(a.val, b.val)); \\\n}\n\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint8x16, v_min, vminq_u8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint8x16, v_max, vmaxq_u8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int8x16, v_min, vminq_s8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int8x16, v_max, vmaxq_s8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint16x8, v_min, vminq_u16)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint16x8, v_max, vmaxq_u16)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int16x8, v_min, vminq_s16)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int16x8, v_max, vmaxq_s16)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint32x4, v_min, vminq_u32)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint32x4, v_max, vmaxq_u32)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int32x4, v_min, vminq_s32)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int32x4, v_max, vmaxq_s32)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_float32x4, v_min, vminq_f32)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_float32x4, v_max, vmaxq_f32)\n\n\n#define OPENCV_HAL_IMPL_NEON_INT_CMP_OP(_Tpvec, cast, suffix, not_suffix) \\\ninline _Tpvec operator == (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(cast(vceqq_##suffix(a.val, b.val))); } \\\ninline _Tpvec operator != (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(cast(vmvnq_##not_suffix(vceqq_##suffix(a.val, b.val)))); } \\\ninline _Tpvec operator < (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(cast(vcltq_##suffix(a.val, b.val))); } \\\ninline _Tpvec operator > (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(cast(vcgtq_##suffix(a.val, b.val))); } \\\ninline _Tpvec operator <= (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(cast(vcleq_##suffix(a.val, b.val))); } \\\ninline _Tpvec operator >= (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(cast(vcgeq_##suffix(a.val, b.val))); }\n\nOPENCV_HAL_IMPL_NEON_INT_CMP_OP(v_uint8x16, OPENCV_HAL_NOP, u8, u8)\nOPENCV_HAL_IMPL_NEON_INT_CMP_OP(v_int8x16, vreinterpretq_s8_u8, s8, u8)\nOPENCV_HAL_IMPL_NEON_INT_CMP_OP(v_uint16x8, OPENCV_HAL_NOP, u16, u16)\nOPENCV_HAL_IMPL_NEON_INT_CMP_OP(v_int16x8, vreinterpretq_s16_u16, s16, u16)\nOPENCV_HAL_IMPL_NEON_INT_CMP_OP(v_uint32x4, OPENCV_HAL_NOP, u32, u32)\nOPENCV_HAL_IMPL_NEON_INT_CMP_OP(v_int32x4, vreinterpretq_s32_u32, s32, u32)\nOPENCV_HAL_IMPL_NEON_INT_CMP_OP(v_float32x4, vreinterpretq_f32_u32, f32, u32)\n\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint8x16, v_add_wrap, vaddq_u8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int8x16, v_add_wrap, vaddq_s8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint16x8, v_add_wrap, vaddq_u16)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int16x8, v_add_wrap, vaddq_s16)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint8x16, v_sub_wrap, vsubq_u8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int8x16, v_sub_wrap, vsubq_s8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint16x8, v_sub_wrap, vsubq_u16)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_int16x8, v_sub_wrap, vsubq_s16)\n\n// TODO: absdiff for signed integers\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint8x16, v_absdiff, vabdq_u8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint16x8, v_absdiff, vabdq_u16)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_uint32x4, v_absdiff, vabdq_u32)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC(v_float32x4, v_absdiff, vabdq_f32)\n\n#define OPENCV_HAL_IMPL_NEON_BIN_FUNC2(_Tpvec, _Tpvec2, cast, func, intrin) \\\ninline _Tpvec2 func(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    return _Tpvec2(cast(intrin(a.val, b.val))); \\\n}\n\nOPENCV_HAL_IMPL_NEON_BIN_FUNC2(v_int8x16, v_uint8x16, vreinterpretq_u8_s8, v_absdiff, vabdq_s8)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC2(v_int16x8, v_uint16x8, vreinterpretq_u16_s16, v_absdiff, vabdq_s16)\nOPENCV_HAL_IMPL_NEON_BIN_FUNC2(v_int32x4, v_uint32x4, vreinterpretq_u32_s32, v_absdiff, vabdq_s32)\n\ninline v_float32x4 v_magnitude(const v_float32x4& a, const v_float32x4& b)\n{\n    v_float32x4 x(vmlaq_f32(vmulq_f32(a.val, a.val), b.val, b.val));\n    return v_sqrt(x);\n}\n\ninline v_float32x4 v_sqr_magnitude(const v_float32x4& a, const v_float32x4& b)\n{\n    return v_float32x4(vmlaq_f32(vmulq_f32(a.val, a.val), b.val, b.val));\n}\n\ninline v_float32x4 v_muladd(const v_float32x4& a, const v_float32x4& b, const v_float32x4& c)\n{\n    return v_float32x4(vmlaq_f32(c.val, a.val, b.val));\n}\n\n// trade efficiency for convenience\n#define OPENCV_HAL_IMPL_NEON_SHIFT_OP(_Tpvec, suffix, _Tps, ssuffix) \\\ninline _Tpvec operator << (const _Tpvec& a, int n) \\\n{ return _Tpvec(vshlq_##suffix(a.val, vdupq_n_##ssuffix((_Tps)n))); } \\\ninline _Tpvec operator >> (const _Tpvec& a, int n) \\\n{ return _Tpvec(vshlq_##suffix(a.val, vdupq_n_##ssuffix((_Tps)-n))); } \\\ntemplate<int n> inline _Tpvec v_shl(const _Tpvec& a) \\\n{ return _Tpvec(vshlq_n_##suffix(a.val, n)); } \\\ntemplate<int n> inline _Tpvec v_shr(const _Tpvec& a) \\\n{ return _Tpvec(vshrq_n_##suffix(a.val, n)); } \\\ntemplate<int n> inline _Tpvec v_rshr(const _Tpvec& a) \\\n{ return _Tpvec(vrshrq_n_##suffix(a.val, n)); }\n\nOPENCV_HAL_IMPL_NEON_SHIFT_OP(v_uint8x16, u8, schar, s8)\nOPENCV_HAL_IMPL_NEON_SHIFT_OP(v_int8x16, s8, schar, s8)\nOPENCV_HAL_IMPL_NEON_SHIFT_OP(v_uint16x8, u16, short, s16)\nOPENCV_HAL_IMPL_NEON_SHIFT_OP(v_int16x8, s16, short, s16)\nOPENCV_HAL_IMPL_NEON_SHIFT_OP(v_uint32x4, u32, int, s32)\nOPENCV_HAL_IMPL_NEON_SHIFT_OP(v_int32x4, s32, int, s32)\nOPENCV_HAL_IMPL_NEON_SHIFT_OP(v_uint64x2, u64, int64, s64)\nOPENCV_HAL_IMPL_NEON_SHIFT_OP(v_int64x2, s64, int64, s64)\n\n#define OPENCV_HAL_IMPL_NEON_LOADSTORE_OP(_Tpvec, _Tp, suffix) \\\ninline _Tpvec v_load(const _Tp* ptr) \\\n{ return _Tpvec(vld1q_##suffix(ptr)); } \\\ninline _Tpvec v_load_aligned(const _Tp* ptr) \\\n{ return _Tpvec(vld1q_##suffix(ptr)); } \\\ninline _Tpvec v_load_halves(const _Tp* ptr0, const _Tp* ptr1) \\\n{ return _Tpvec(vcombine_##suffix(vld1_##suffix(ptr0), vld1_##suffix(ptr1))); } \\\ninline void v_store(_Tp* ptr, const _Tpvec& a) \\\n{ vst1q_##suffix(ptr, a.val); } \\\ninline void v_store_aligned(_Tp* ptr, const _Tpvec& a) \\\n{ vst1q_##suffix(ptr, a.val); } \\\ninline void v_store_low(_Tp* ptr, const _Tpvec& a) \\\n{ vst1_##suffix(ptr, vget_low_##suffix(a.val)); } \\\ninline void v_store_high(_Tp* ptr, const _Tpvec& a) \\\n{ vst1_##suffix(ptr, vget_high_##suffix(a.val)); }\n\nOPENCV_HAL_IMPL_NEON_LOADSTORE_OP(v_uint8x16, uchar, u8)\nOPENCV_HAL_IMPL_NEON_LOADSTORE_OP(v_int8x16, schar, s8)\nOPENCV_HAL_IMPL_NEON_LOADSTORE_OP(v_uint16x8, ushort, u16)\nOPENCV_HAL_IMPL_NEON_LOADSTORE_OP(v_int16x8, short, s16)\nOPENCV_HAL_IMPL_NEON_LOADSTORE_OP(v_uint32x4, unsigned, u32)\nOPENCV_HAL_IMPL_NEON_LOADSTORE_OP(v_int32x4, int, s32)\nOPENCV_HAL_IMPL_NEON_LOADSTORE_OP(v_uint64x2, uint64, u64)\nOPENCV_HAL_IMPL_NEON_LOADSTORE_OP(v_int64x2, int64, s64)\nOPENCV_HAL_IMPL_NEON_LOADSTORE_OP(v_float32x4, float, f32)\n\n#define OPENCV_HAL_IMPL_NEON_REDUCE_OP_4(_Tpvec, scalartype, func, scalar_func) \\\ninline scalartype v_reduce_##func(const _Tpvec& a) \\\n{ \\\n    scalartype CV_DECL_ALIGNED(16) buf[4]; \\\n    v_store_aligned(buf, a); \\\n    scalartype s0 = scalar_func(buf[0], buf[1]); \\\n    scalartype s1 = scalar_func(buf[2], buf[3]); \\\n    return scalar_func(s0, s1); \\\n}\n\nOPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_uint32x4, unsigned, sum, OPENCV_HAL_ADD)\nOPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_uint32x4, unsigned, max, std::max)\nOPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_uint32x4, unsigned, min, std::min)\nOPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_int32x4, int, sum, OPENCV_HAL_ADD)\nOPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_int32x4, int, max, std::max)\nOPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_int32x4, int, min, std::min)\nOPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_float32x4, float, sum, OPENCV_HAL_ADD)\nOPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_float32x4, float, max, std::max)\nOPENCV_HAL_IMPL_NEON_REDUCE_OP_4(v_float32x4, float, min, std::min)\n\ninline int v_signmask(const v_uint8x16& a)\n{\n    int8x8_t m0 = vcreate_s8(CV_BIG_UINT(0x0706050403020100));\n    uint8x16_t v0 = vshlq_u8(vshrq_n_u8(a.val, 7), vcombine_s8(m0, m0));\n    uint64x2_t v1 = vpaddlq_u32(vpaddlq_u16(vpaddlq_u8(v0)));\n    return (int)vgetq_lane_u64(v1, 0) + ((int)vgetq_lane_u64(v1, 1) << 8);\n}\ninline int v_signmask(const v_int8x16& a)\n{ return v_signmask(v_reinterpret_as_u8(a)); }\n\ninline int v_signmask(const v_uint16x8& a)\n{\n    int16x4_t m0 = vcreate_s16(CV_BIG_UINT(0x0003000200010000));\n    uint16x8_t v0 = vshlq_u16(vshrq_n_u16(a.val, 15), vcombine_s16(m0, m0));\n    uint64x2_t v1 = vpaddlq_u32(vpaddlq_u16(v0));\n    return (int)vgetq_lane_u64(v1, 0) + ((int)vgetq_lane_u64(v1, 1) << 4);\n}\ninline int v_signmask(const v_int16x8& a)\n{ return v_signmask(v_reinterpret_as_u16(a)); }\n\ninline int v_signmask(const v_uint32x4& a)\n{\n    int32x2_t m0 = vcreate_s32(CV_BIG_UINT(0x0000000100000000));\n    uint32x4_t v0 = vshlq_u32(vshrq_n_u32(a.val, 31), vcombine_s32(m0, m0));\n    uint64x2_t v1 = vpaddlq_u32(v0);\n    return (int)vgetq_lane_u64(v1, 0) + ((int)vgetq_lane_u64(v1, 1) << 2);\n}\ninline int v_signmask(const v_int32x4& a)\n{ return v_signmask(v_reinterpret_as_u32(a)); }\ninline int v_signmask(const v_float32x4& a)\n{ return v_signmask(v_reinterpret_as_u32(a)); }\n\n#define OPENCV_HAL_IMPL_NEON_CHECK_ALLANY(_Tpvec, suffix, shift) \\\ninline bool v_check_all(const v_##_Tpvec& a) \\\n{ \\\n    _Tpvec##_t v0 = vshrq_n_##suffix(vmvnq_##suffix(a.val), shift); \\\n    uint64x2_t v1 = vreinterpretq_u64_##suffix(v0); \\\n    return (vgetq_lane_u64(v1, 0) | vgetq_lane_u64(v1, 1)) == 0; \\\n} \\\ninline bool v_check_any(const v_##_Tpvec& a) \\\n{ \\\n    _Tpvec##_t v0 = vshrq_n_##suffix(a.val, shift); \\\n    uint64x2_t v1 = vreinterpretq_u64_##suffix(v0); \\\n    return (vgetq_lane_u64(v1, 0) | vgetq_lane_u64(v1, 1)) != 0; \\\n}\n\nOPENCV_HAL_IMPL_NEON_CHECK_ALLANY(uint8x16, u8, 7)\nOPENCV_HAL_IMPL_NEON_CHECK_ALLANY(uint16x8, u16, 15)\nOPENCV_HAL_IMPL_NEON_CHECK_ALLANY(uint32x4, u32, 31)\n\ninline bool v_check_all(const v_int8x16& a)\n{ return v_check_all(v_reinterpret_as_u8(a)); }\ninline bool v_check_all(const v_int16x8& a)\n{ return v_check_all(v_reinterpret_as_u16(a)); }\ninline bool v_check_all(const v_int32x4& a)\n{ return v_check_all(v_reinterpret_as_u32(a)); }\ninline bool v_check_all(const v_float32x4& a)\n{ return v_check_all(v_reinterpret_as_u32(a)); }\n\ninline bool v_check_any(const v_int8x16& a)\n{ return v_check_any(v_reinterpret_as_u8(a)); }\ninline bool v_check_any(const v_int16x8& a)\n{ return v_check_any(v_reinterpret_as_u16(a)); }\ninline bool v_check_any(const v_int32x4& a)\n{ return v_check_any(v_reinterpret_as_u32(a)); }\ninline bool v_check_any(const v_float32x4& a)\n{ return v_check_any(v_reinterpret_as_u32(a)); }\n\n#define OPENCV_HAL_IMPL_NEON_SELECT(_Tpvec, suffix, usuffix) \\\ninline _Tpvec v_select(const _Tpvec& mask, const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    return _Tpvec(vbslq_##suffix(vreinterpretq_##usuffix##_##suffix(mask.val), a.val, b.val)); \\\n}\n\nOPENCV_HAL_IMPL_NEON_SELECT(v_uint8x16, u8, u8)\nOPENCV_HAL_IMPL_NEON_SELECT(v_int8x16, s8, u8)\nOPENCV_HAL_IMPL_NEON_SELECT(v_uint16x8, u16, u16)\nOPENCV_HAL_IMPL_NEON_SELECT(v_int16x8, s16, u16)\nOPENCV_HAL_IMPL_NEON_SELECT(v_uint32x4, u32, u32)\nOPENCV_HAL_IMPL_NEON_SELECT(v_int32x4, s32, u32)\nOPENCV_HAL_IMPL_NEON_SELECT(v_float32x4, f32, u32)\n\n#define OPENCV_HAL_IMPL_NEON_EXPAND(_Tpvec, _Tpwvec, _Tp, suffix) \\\ninline void v_expand(const _Tpvec& a, _Tpwvec& b0, _Tpwvec& b1) \\\n{ \\\n    b0.val = vmovl_##suffix(vget_low_##suffix(a.val)); \\\n    b1.val = vmovl_##suffix(vget_high_##suffix(a.val)); \\\n} \\\ninline _Tpwvec v_load_expand(const _Tp* ptr) \\\n{ \\\n    return _Tpwvec(vmovl_##suffix(vld1_##suffix(ptr))); \\\n}\n\nOPENCV_HAL_IMPL_NEON_EXPAND(v_uint8x16, v_uint16x8, uchar, u8)\nOPENCV_HAL_IMPL_NEON_EXPAND(v_int8x16, v_int16x8, schar, s8)\nOPENCV_HAL_IMPL_NEON_EXPAND(v_uint16x8, v_uint32x4, ushort, u16)\nOPENCV_HAL_IMPL_NEON_EXPAND(v_int16x8, v_int32x4, short, s16)\nOPENCV_HAL_IMPL_NEON_EXPAND(v_uint32x4, v_uint64x2, uint, u32)\nOPENCV_HAL_IMPL_NEON_EXPAND(v_int32x4, v_int64x2, int, s32)\n\ninline v_uint32x4 v_load_expand_q(const uchar* ptr)\n{\n    uint8x8_t v0 = vcreate_u8(*(unsigned*)ptr);\n    uint16x4_t v1 = vget_low_u16(vmovl_u8(v0));\n    return v_uint32x4(vmovl_u16(v1));\n}\n\ninline v_int32x4 v_load_expand_q(const schar* ptr)\n{\n    int8x8_t v0 = vcreate_s8(*(unsigned*)ptr);\n    int16x4_t v1 = vget_low_s16(vmovl_s8(v0));\n    return v_int32x4(vmovl_s16(v1));\n}\n\n#define OPENCV_HAL_IMPL_NEON_UNPACKS(_Tpvec, suffix) \\\ninline void v_zip(const v_##_Tpvec& a0, const v_##_Tpvec& a1, v_##_Tpvec& b0, v_##_Tpvec& b1) \\\n{ \\\n    _Tpvec##x2_t p = vzipq_##suffix(a0.val, a1.val); \\\n    b0.val = p.val[0]; \\\n    b1.val = p.val[1]; \\\n} \\\ninline v_##_Tpvec v_combine_low(const v_##_Tpvec& a, const v_##_Tpvec& b) \\\n{ \\\n    return v_##_Tpvec(vcombine_##suffix(vget_low_##suffix(a.val), vget_low_##suffix(b.val))); \\\n} \\\ninline v_##_Tpvec v_combine_high(const v_##_Tpvec& a, const v_##_Tpvec& b) \\\n{ \\\n    return v_##_Tpvec(vcombine_##suffix(vget_high_##suffix(a.val), vget_high_##suffix(b.val))); \\\n} \\\ninline void v_recombine(const v_##_Tpvec& a, const v_##_Tpvec& b, v_##_Tpvec& c, v_##_Tpvec& d) \\\n{ \\\n    c.val = vcombine_##suffix(vget_low_##suffix(a.val), vget_low_##suffix(b.val)); \\\n    d.val = vcombine_##suffix(vget_high_##suffix(a.val), vget_high_##suffix(b.val)); \\\n}\n\nOPENCV_HAL_IMPL_NEON_UNPACKS(uint8x16, u8)\nOPENCV_HAL_IMPL_NEON_UNPACKS(int8x16, s8)\nOPENCV_HAL_IMPL_NEON_UNPACKS(uint16x8, u16)\nOPENCV_HAL_IMPL_NEON_UNPACKS(int16x8, s16)\nOPENCV_HAL_IMPL_NEON_UNPACKS(uint32x4, u32)\nOPENCV_HAL_IMPL_NEON_UNPACKS(int32x4, s32)\nOPENCV_HAL_IMPL_NEON_UNPACKS(float32x4, f32)\n\n#define OPENCV_HAL_IMPL_NEON_EXTRACT(_Tpvec, suffix) \\\ntemplate <int s> \\\ninline v_##_Tpvec v_extract(const v_##_Tpvec& a, const v_##_Tpvec& b) \\\n{ \\\n    return v_##_Tpvec(vextq_##suffix(a.val, b.val, s)); \\\n}\n\nOPENCV_HAL_IMPL_NEON_EXTRACT(uint8x16, u8)\nOPENCV_HAL_IMPL_NEON_EXTRACT(int8x16, s8)\nOPENCV_HAL_IMPL_NEON_EXTRACT(uint16x8, u16)\nOPENCV_HAL_IMPL_NEON_EXTRACT(int16x8, s16)\nOPENCV_HAL_IMPL_NEON_EXTRACT(uint32x4, u32)\nOPENCV_HAL_IMPL_NEON_EXTRACT(int32x4, s32)\nOPENCV_HAL_IMPL_NEON_EXTRACT(uint64x2, u64)\nOPENCV_HAL_IMPL_NEON_EXTRACT(int64x2, s64)\nOPENCV_HAL_IMPL_NEON_EXTRACT(float32x4, f32)\n\ninline v_int32x4 v_round(const v_float32x4& a)\n{\n    static const int32x4_t v_sign = vdupq_n_s32(1 << 31),\n        v_05 = vreinterpretq_s32_f32(vdupq_n_f32(0.5f));\n\n    int32x4_t v_addition = vorrq_s32(v_05, vandq_s32(v_sign, vreinterpretq_s32_f32(a.val)));\n    return v_int32x4(vcvtq_s32_f32(vaddq_f32(a.val, vreinterpretq_f32_s32(v_addition))));\n}\n\ninline v_int32x4 v_floor(const v_float32x4& a)\n{\n    int32x4_t a1 = vcvtq_s32_f32(a.val);\n    uint32x4_t mask = vcgtq_f32(vcvtq_f32_s32(a1), a.val);\n    return v_int32x4(vaddq_s32(a1, vreinterpretq_s32_u32(mask)));\n}\n\ninline v_int32x4 v_ceil(const v_float32x4& a)\n{\n    int32x4_t a1 = vcvtq_s32_f32(a.val);\n    uint32x4_t mask = vcgtq_f32(a.val, vcvtq_f32_s32(a1));\n    return v_int32x4(vsubq_s32(a1, vreinterpretq_s32_u32(mask)));\n}\n\ninline v_int32x4 v_trunc(const v_float32x4& a)\n{ return v_int32x4(vcvtq_s32_f32(a.val)); }\n\n#define OPENCV_HAL_IMPL_NEON_TRANSPOSE4x4(_Tpvec, suffix) \\\ninline void v_transpose4x4(const v_##_Tpvec& a0, const v_##_Tpvec& a1, \\\n                         const v_##_Tpvec& a2, const v_##_Tpvec& a3, \\\n                         v_##_Tpvec& b0, v_##_Tpvec& b1, \\\n                         v_##_Tpvec& b2, v_##_Tpvec& b3) \\\n{ \\\n    /* m00 m01 m02 m03 */ \\\n    /* m10 m11 m12 m13 */ \\\n    /* m20 m21 m22 m23 */ \\\n    /* m30 m31 m32 m33 */ \\\n    _Tpvec##x2_t t0 = vtrnq_##suffix(a0.val, a1.val); \\\n    _Tpvec##x2_t t1 = vtrnq_##suffix(a2.val, a3.val); \\\n    /* m00 m10 m02 m12 */ \\\n    /* m01 m11 m03 m13 */ \\\n    /* m20 m30 m22 m32 */ \\\n    /* m21 m31 m23 m33 */ \\\n    b0.val = vcombine_##suffix(vget_low_##suffix(t0.val[0]), vget_low_##suffix(t1.val[0])); \\\n    b1.val = vcombine_##suffix(vget_low_##suffix(t0.val[1]), vget_low_##suffix(t1.val[1])); \\\n    b2.val = vcombine_##suffix(vget_high_##suffix(t0.val[0]), vget_high_##suffix(t1.val[0])); \\\n    b3.val = vcombine_##suffix(vget_high_##suffix(t0.val[1]), vget_high_##suffix(t1.val[1])); \\\n}\n\nOPENCV_HAL_IMPL_NEON_TRANSPOSE4x4(uint32x4, u32)\nOPENCV_HAL_IMPL_NEON_TRANSPOSE4x4(int32x4, s32)\nOPENCV_HAL_IMPL_NEON_TRANSPOSE4x4(float32x4, f32)\n\n#define OPENCV_HAL_IMPL_NEON_INTERLEAVED(_Tpvec, _Tp, suffix) \\\ninline void v_load_deinterleave(const _Tp* ptr, v_##_Tpvec& a, v_##_Tpvec& b, v_##_Tpvec& c) \\\n{ \\\n    _Tpvec##x3_t v = vld3q_##suffix(ptr); \\\n    a.val = v.val[0]; \\\n    b.val = v.val[1]; \\\n    c.val = v.val[2]; \\\n} \\\ninline void v_load_deinterleave(const _Tp* ptr, v_##_Tpvec& a, v_##_Tpvec& b, \\\n                                v_##_Tpvec& c, v_##_Tpvec& d) \\\n{ \\\n    _Tpvec##x4_t v = vld4q_##suffix(ptr); \\\n    a.val = v.val[0]; \\\n    b.val = v.val[1]; \\\n    c.val = v.val[2]; \\\n    d.val = v.val[3]; \\\n} \\\ninline void v_store_interleave( _Tp* ptr, const v_##_Tpvec& a, const v_##_Tpvec& b, const v_##_Tpvec& c) \\\n{ \\\n    _Tpvec##x3_t v; \\\n    v.val[0] = a.val; \\\n    v.val[1] = b.val; \\\n    v.val[2] = c.val; \\\n    vst3q_##suffix(ptr, v); \\\n} \\\ninline void v_store_interleave( _Tp* ptr, const v_##_Tpvec& a, const v_##_Tpvec& b, \\\n                               const v_##_Tpvec& c, const v_##_Tpvec& d) \\\n{ \\\n    _Tpvec##x4_t v; \\\n    v.val[0] = a.val; \\\n    v.val[1] = b.val; \\\n    v.val[2] = c.val; \\\n    v.val[3] = d.val; \\\n    vst4q_##suffix(ptr, v); \\\n}\n\nOPENCV_HAL_IMPL_NEON_INTERLEAVED(uint8x16, uchar, u8)\nOPENCV_HAL_IMPL_NEON_INTERLEAVED(int8x16, schar, s8)\nOPENCV_HAL_IMPL_NEON_INTERLEAVED(uint16x8, ushort, u16)\nOPENCV_HAL_IMPL_NEON_INTERLEAVED(int16x8, short, s16)\nOPENCV_HAL_IMPL_NEON_INTERLEAVED(uint32x4, unsigned, u32)\nOPENCV_HAL_IMPL_NEON_INTERLEAVED(int32x4, int, s32)\nOPENCV_HAL_IMPL_NEON_INTERLEAVED(float32x4, float, f32)\n\ninline v_float32x4 v_cvt_f32(const v_int32x4& a)\n{\n    return v_float32x4(vcvtq_f32_s32(a.val));\n}\n\n//! @endcond\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/hal/intrin_sse.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HAL_SSE_HPP__\n#define __OPENCV_HAL_SSE_HPP__\n\n#include <algorithm>\n\n#define CV_SIMD128 1\n#define CV_SIMD128_64F 1\n\nnamespace cv\n{\n\n//! @cond IGNORED\n\nstruct v_uint8x16\n{\n    typedef uchar lane_type;\n    enum { nlanes = 16 };\n\n    v_uint8x16() {}\n    explicit v_uint8x16(__m128i v) : val(v) {}\n    v_uint8x16(uchar v0, uchar v1, uchar v2, uchar v3, uchar v4, uchar v5, uchar v6, uchar v7,\n               uchar v8, uchar v9, uchar v10, uchar v11, uchar v12, uchar v13, uchar v14, uchar v15)\n    {\n        val = _mm_setr_epi8((char)v0, (char)v1, (char)v2, (char)v3,\n                            (char)v4, (char)v5, (char)v6, (char)v7,\n                            (char)v8, (char)v9, (char)v10, (char)v11,\n                            (char)v12, (char)v13, (char)v14, (char)v15);\n    }\n    uchar get0() const\n    {\n        return (uchar)_mm_cvtsi128_si32(val);\n    }\n\n    __m128i val;\n};\n\nstruct v_int8x16\n{\n    typedef schar lane_type;\n    enum { nlanes = 16 };\n\n    v_int8x16() {}\n    explicit v_int8x16(__m128i v) : val(v) {}\n    v_int8x16(schar v0, schar v1, schar v2, schar v3, schar v4, schar v5, schar v6, schar v7,\n              schar v8, schar v9, schar v10, schar v11, schar v12, schar v13, schar v14, schar v15)\n    {\n        val = _mm_setr_epi8((char)v0, (char)v1, (char)v2, (char)v3,\n                            (char)v4, (char)v5, (char)v6, (char)v7,\n                            (char)v8, (char)v9, (char)v10, (char)v11,\n                            (char)v12, (char)v13, (char)v14, (char)v15);\n    }\n    schar get0() const\n    {\n        return (schar)_mm_cvtsi128_si32(val);\n    }\n\n    __m128i val;\n};\n\nstruct v_uint16x8\n{\n    typedef ushort lane_type;\n    enum { nlanes = 8 };\n\n    v_uint16x8() {}\n    explicit v_uint16x8(__m128i v) : val(v) {}\n    v_uint16x8(ushort v0, ushort v1, ushort v2, ushort v3, ushort v4, ushort v5, ushort v6, ushort v7)\n    {\n        val = _mm_setr_epi16((short)v0, (short)v1, (short)v2, (short)v3,\n                             (short)v4, (short)v5, (short)v6, (short)v7);\n    }\n    ushort get0() const\n    {\n        return (ushort)_mm_cvtsi128_si32(val);\n    }\n\n    __m128i val;\n};\n\nstruct v_int16x8\n{\n    typedef short lane_type;\n    enum { nlanes = 8 };\n\n    v_int16x8() {}\n    explicit v_int16x8(__m128i v) : val(v) {}\n    v_int16x8(short v0, short v1, short v2, short v3, short v4, short v5, short v6, short v7)\n    {\n        val = _mm_setr_epi16((short)v0, (short)v1, (short)v2, (short)v3,\n                             (short)v4, (short)v5, (short)v6, (short)v7);\n    }\n    short get0() const\n    {\n        return (short)_mm_cvtsi128_si32(val);\n    }\n    __m128i val;\n};\n\nstruct v_uint32x4\n{\n    typedef unsigned lane_type;\n    enum { nlanes = 4 };\n\n    v_uint32x4() {}\n    explicit v_uint32x4(__m128i v) : val(v) {}\n    v_uint32x4(unsigned v0, unsigned v1, unsigned v2, unsigned v3)\n    {\n        val = _mm_setr_epi32((int)v0, (int)v1, (int)v2, (int)v3);\n    }\n    unsigned get0() const\n    {\n        return (unsigned)_mm_cvtsi128_si32(val);\n    }\n    __m128i val;\n};\n\nstruct v_int32x4\n{\n    typedef int lane_type;\n    enum { nlanes = 4 };\n\n    v_int32x4() {}\n    explicit v_int32x4(__m128i v) : val(v) {}\n    v_int32x4(int v0, int v1, int v2, int v3)\n    {\n        val = _mm_setr_epi32(v0, v1, v2, v3);\n    }\n    int get0() const\n    {\n        return _mm_cvtsi128_si32(val);\n    }\n    __m128i val;\n};\n\nstruct v_float32x4\n{\n    typedef float lane_type;\n    enum { nlanes = 4 };\n\n    v_float32x4() {}\n    explicit v_float32x4(__m128 v) : val(v) {}\n    v_float32x4(float v0, float v1, float v2, float v3)\n    {\n        val = _mm_setr_ps(v0, v1, v2, v3);\n    }\n    float get0() const\n    {\n        return _mm_cvtss_f32(val);\n    }\n    __m128 val;\n};\n\nstruct v_uint64x2\n{\n    typedef uint64 lane_type;\n    enum { nlanes = 2 };\n\n    v_uint64x2() {}\n    explicit v_uint64x2(__m128i v) : val(v) {}\n    v_uint64x2(uint64 v0, uint64 v1)\n    {\n        val = _mm_setr_epi32((int)v0, (int)(v0 >> 32), (int)v1, (int)(v1 >> 32));\n    }\n    uint64 get0() const\n    {\n        int a = _mm_cvtsi128_si32(val);\n        int b = _mm_cvtsi128_si32(_mm_srli_epi64(val, 32));\n        return (unsigned)a | ((uint64)(unsigned)b << 32);\n    }\n    __m128i val;\n};\n\nstruct v_int64x2\n{\n    typedef int64 lane_type;\n    enum { nlanes = 2 };\n\n    v_int64x2() {}\n    explicit v_int64x2(__m128i v) : val(v) {}\n    v_int64x2(int64 v0, int64 v1)\n    {\n        val = _mm_setr_epi32((int)v0, (int)(v0 >> 32), (int)v1, (int)(v1 >> 32));\n    }\n    int64 get0() const\n    {\n        int a = _mm_cvtsi128_si32(val);\n        int b = _mm_cvtsi128_si32(_mm_srli_epi64(val, 32));\n        return (int64)((unsigned)a | ((uint64)(unsigned)b << 32));\n    }\n    __m128i val;\n};\n\nstruct v_float64x2\n{\n    typedef double lane_type;\n    enum { nlanes = 2 };\n\n    v_float64x2() {}\n    explicit v_float64x2(__m128d v) : val(v) {}\n    v_float64x2(double v0, double v1)\n    {\n        val = _mm_setr_pd(v0, v1);\n    }\n    double get0() const\n    {\n        return _mm_cvtsd_f64(val);\n    }\n    __m128d val;\n};\n\n#define OPENCV_HAL_IMPL_SSE_INITVEC(_Tpvec, _Tp, suffix, zsuffix, ssuffix, _Tps, cast) \\\ninline _Tpvec v_setzero_##suffix() { return _Tpvec(_mm_setzero_##zsuffix()); } \\\ninline _Tpvec v_setall_##suffix(_Tp v) { return _Tpvec(_mm_set1_##ssuffix((_Tps)v)); } \\\ntemplate<typename _Tpvec0> inline _Tpvec v_reinterpret_as_##suffix(const _Tpvec0& a) \\\n{ return _Tpvec(cast(a.val)); }\n\nOPENCV_HAL_IMPL_SSE_INITVEC(v_uint8x16, uchar, u8, si128, epi8, char, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_INITVEC(v_int8x16, schar, s8, si128, epi8, char, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_INITVEC(v_uint16x8, ushort, u16, si128, epi16, short, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_INITVEC(v_int16x8, short, s16, si128, epi16, short, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_INITVEC(v_uint32x4, unsigned, u32, si128, epi32, int, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_INITVEC(v_int32x4, int, s32, si128, epi32, int, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_INITVEC(v_float32x4, float, f32, ps, ps, float, _mm_castsi128_ps)\nOPENCV_HAL_IMPL_SSE_INITVEC(v_float64x2, double, f64, pd, pd, double, _mm_castsi128_pd)\n\ninline v_uint64x2 v_setzero_u64() { return v_uint64x2(_mm_setzero_si128()); }\ninline v_int64x2 v_setzero_s64() { return v_int64x2(_mm_setzero_si128()); }\ninline v_uint64x2 v_setall_u64(uint64 val) { return v_uint64x2(val, val); }\ninline v_int64x2 v_setall_s64(int64 val) { return v_int64x2(val, val); }\n\ntemplate<typename _Tpvec> inline\nv_uint64x2 v_reinterpret_as_u64(const _Tpvec& a) { return v_uint64x2(a.val); }\ntemplate<typename _Tpvec> inline\nv_int64x2 v_reinterpret_as_s64(const _Tpvec& a) { return v_int64x2(a.val); }\ninline v_float32x4 v_reinterpret_as_f32(const v_uint64x2& a)\n{ return v_float32x4(_mm_castsi128_ps(a.val)); }\ninline v_float32x4 v_reinterpret_as_f32(const v_int64x2& a)\n{ return v_float32x4(_mm_castsi128_ps(a.val)); }\ninline v_float64x2 v_reinterpret_as_f64(const v_uint64x2& a)\n{ return v_float64x2(_mm_castsi128_pd(a.val)); }\ninline v_float64x2 v_reinterpret_as_f64(const v_int64x2& a)\n{ return v_float64x2(_mm_castsi128_pd(a.val)); }\n\n#define OPENCV_HAL_IMPL_SSE_INIT_FROM_FLT(_Tpvec, suffix) \\\ninline _Tpvec v_reinterpret_as_##suffix(const v_float32x4& a) \\\n{ return _Tpvec(_mm_castps_si128(a.val)); } \\\ninline _Tpvec v_reinterpret_as_##suffix(const v_float64x2& a) \\\n{ return _Tpvec(_mm_castpd_si128(a.val)); }\n\nOPENCV_HAL_IMPL_SSE_INIT_FROM_FLT(v_uint8x16, u8)\nOPENCV_HAL_IMPL_SSE_INIT_FROM_FLT(v_int8x16, s8)\nOPENCV_HAL_IMPL_SSE_INIT_FROM_FLT(v_uint16x8, u16)\nOPENCV_HAL_IMPL_SSE_INIT_FROM_FLT(v_int16x8, s16)\nOPENCV_HAL_IMPL_SSE_INIT_FROM_FLT(v_uint32x4, u32)\nOPENCV_HAL_IMPL_SSE_INIT_FROM_FLT(v_int32x4, s32)\nOPENCV_HAL_IMPL_SSE_INIT_FROM_FLT(v_uint64x2, u64)\nOPENCV_HAL_IMPL_SSE_INIT_FROM_FLT(v_int64x2, s64)\n\ninline v_float32x4 v_reinterpret_as_f32(const v_float32x4& a) {return a; }\ninline v_float64x2 v_reinterpret_as_f64(const v_float64x2& a) {return a; }\ninline v_float32x4 v_reinterpret_as_f32(const v_float64x2& a) {return v_float32x4(_mm_castpd_ps(a.val)); }\ninline v_float64x2 v_reinterpret_as_f64(const v_float32x4& a) {return v_float64x2(_mm_castps_pd(a.val)); }\n\n//////////////// PACK ///////////////\ninline v_uint8x16 v_pack(const v_uint16x8& a, const v_uint16x8& b)\n{\n    __m128i delta = _mm_set1_epi16(255);\n    return v_uint8x16(_mm_packus_epi16(_mm_subs_epu16(a.val, _mm_subs_epu16(a.val, delta)),\n                                       _mm_subs_epu16(b.val, _mm_subs_epu16(b.val, delta))));\n}\n\ninline void v_pack_store(uchar* ptr, const v_uint16x8& a)\n{\n    __m128i delta = _mm_set1_epi16(255);\n    __m128i a1 = _mm_subs_epu16(a.val, _mm_subs_epu16(a.val, delta));\n    _mm_storel_epi64((__m128i*)ptr, _mm_packus_epi16(a1, a1));\n}\n\ninline v_uint8x16 v_pack_u(const v_int16x8& a, const v_int16x8& b)\n{ return v_uint8x16(_mm_packus_epi16(a.val, b.val)); }\n\ninline void v_pack_u_store(uchar* ptr, const v_int16x8& a)\n{ _mm_storel_epi64((__m128i*)ptr, _mm_packus_epi16(a.val, a.val)); }\n\ntemplate<int n> inline\nv_uint8x16 v_rshr_pack(const v_uint16x8& a, const v_uint16x8& b)\n{\n    // we assume that n > 0, and so the shifted 16-bit values can be treated as signed numbers.\n    __m128i delta = _mm_set1_epi16((short)(1 << (n-1)));\n    return v_uint8x16(_mm_packus_epi16(_mm_srli_epi16(_mm_adds_epu16(a.val, delta), n),\n                                       _mm_srli_epi16(_mm_adds_epu16(b.val, delta), n)));\n}\n\ntemplate<int n> inline\nvoid v_rshr_pack_store(uchar* ptr, const v_uint16x8& a)\n{\n    __m128i delta = _mm_set1_epi16((short)(1 << (n-1)));\n    __m128i a1 = _mm_srli_epi16(_mm_adds_epu16(a.val, delta), n);\n    _mm_storel_epi64((__m128i*)ptr, _mm_packus_epi16(a1, a1));\n}\n\ntemplate<int n> inline\nv_uint8x16 v_rshr_pack_u(const v_int16x8& a, const v_int16x8& b)\n{\n    __m128i delta = _mm_set1_epi16((short)(1 << (n-1)));\n    return v_uint8x16(_mm_packus_epi16(_mm_srai_epi16(_mm_adds_epi16(a.val, delta), n),\n                                       _mm_srai_epi16(_mm_adds_epi16(b.val, delta), n)));\n}\n\ntemplate<int n> inline\nvoid v_rshr_pack_u_store(uchar* ptr, const v_int16x8& a)\n{\n    __m128i delta = _mm_set1_epi16((short)(1 << (n-1)));\n    __m128i a1 = _mm_srai_epi16(_mm_adds_epi16(a.val, delta), n);\n    _mm_storel_epi64((__m128i*)ptr, _mm_packus_epi16(a1, a1));\n}\n\ninline v_int8x16 v_pack(const v_int16x8& a, const v_int16x8& b)\n{ return v_int8x16(_mm_packs_epi16(a.val, b.val)); }\n\ninline void v_pack_store(schar* ptr, v_int16x8& a)\n{ _mm_storel_epi64((__m128i*)ptr, _mm_packs_epi16(a.val, a.val)); }\n\ntemplate<int n> inline\nv_int8x16 v_rshr_pack(const v_int16x8& a, const v_int16x8& b)\n{\n    // we assume that n > 0, and so the shifted 16-bit values can be treated as signed numbers.\n    __m128i delta = _mm_set1_epi16((short)(1 << (n-1)));\n    return v_int8x16(_mm_packs_epi16(_mm_srai_epi16(_mm_adds_epi16(a.val, delta), n),\n                                     _mm_srai_epi16(_mm_adds_epi16(b.val, delta), n)));\n}\ntemplate<int n> inline\nvoid v_rshr_pack_store(schar* ptr, const v_int16x8& a)\n{\n    // we assume that n > 0, and so the shifted 16-bit values can be treated as signed numbers.\n    __m128i delta = _mm_set1_epi16((short)(1 << (n-1)));\n    __m128i a1 = _mm_srai_epi16(_mm_adds_epi16(a.val, delta), n);\n    _mm_storel_epi64((__m128i*)ptr, _mm_packs_epi16(a1, a1));\n}\n\n\n// bit-wise \"mask ? a : b\"\ninline __m128i v_select_si128(__m128i mask, __m128i a, __m128i b)\n{\n    return _mm_xor_si128(b, _mm_and_si128(_mm_xor_si128(a, b), mask));\n}\n\ninline v_uint16x8 v_pack(const v_uint32x4& a, const v_uint32x4& b)\n{\n    __m128i z = _mm_setzero_si128(), maxval32 = _mm_set1_epi32(65535), delta32 = _mm_set1_epi32(32768);\n    __m128i a1 = _mm_sub_epi32(v_select_si128(_mm_cmpgt_epi32(z, a.val), maxval32, a.val), delta32);\n    __m128i b1 = _mm_sub_epi32(v_select_si128(_mm_cmpgt_epi32(z, b.val), maxval32, b.val), delta32);\n    __m128i r = _mm_packs_epi32(a1, b1);\n    return v_uint16x8(_mm_sub_epi16(r, _mm_set1_epi16(-32768)));\n}\n\ninline void v_pack_store(ushort* ptr, const v_uint32x4& a)\n{\n    __m128i z = _mm_setzero_si128(), maxval32 = _mm_set1_epi32(65535), delta32 = _mm_set1_epi32(32768);\n    __m128i a1 = _mm_sub_epi32(v_select_si128(_mm_cmpgt_epi32(z, a.val), maxval32, a.val), delta32);\n    __m128i r = _mm_packs_epi32(a1, a1);\n    _mm_storel_epi64((__m128i*)ptr, _mm_sub_epi16(r, _mm_set1_epi16(-32768)));\n}\n\ntemplate<int n> inline\nv_uint16x8 v_rshr_pack(const v_uint32x4& a, const v_uint32x4& b)\n{\n    __m128i delta = _mm_set1_epi32(1 << (n-1)), delta32 = _mm_set1_epi32(32768);\n    __m128i a1 = _mm_sub_epi32(_mm_srli_epi32(_mm_add_epi32(a.val, delta), n), delta32);\n    __m128i b1 = _mm_sub_epi32(_mm_srli_epi32(_mm_add_epi32(b.val, delta), n), delta32);\n    return v_uint16x8(_mm_sub_epi16(_mm_packs_epi32(a1, b1), _mm_set1_epi16(-32768)));\n}\n\ntemplate<int n> inline\nvoid v_rshr_pack_store(ushort* ptr, const v_uint32x4& a)\n{\n    __m128i delta = _mm_set1_epi32(1 << (n-1)), delta32 = _mm_set1_epi32(32768);\n    __m128i a1 = _mm_sub_epi32(_mm_srli_epi32(_mm_add_epi32(a.val, delta), n), delta32);\n    __m128i a2 = _mm_sub_epi16(_mm_packs_epi32(a1, a1), _mm_set1_epi16(-32768));\n    _mm_storel_epi64((__m128i*)ptr, a2);\n}\n\ninline v_uint16x8 v_pack_u(const v_int32x4& a, const v_int32x4& b)\n{\n    __m128i delta32 = _mm_set1_epi32(32768);\n    __m128i r = _mm_packs_epi32(_mm_sub_epi32(a.val, delta32), _mm_sub_epi32(b.val, delta32));\n    return v_uint16x8(_mm_sub_epi16(r, _mm_set1_epi16(-32768)));\n}\n\ninline void v_pack_u_store(ushort* ptr, const v_int32x4& a)\n{\n    __m128i delta32 = _mm_set1_epi32(32768);\n    __m128i a1 = _mm_sub_epi32(a.val, delta32);\n    __m128i r = _mm_sub_epi16(_mm_packs_epi32(a1, a1), _mm_set1_epi16(-32768));\n    _mm_storel_epi64((__m128i*)ptr, r);\n}\n\ntemplate<int n> inline\nv_uint16x8 v_rshr_pack_u(const v_int32x4& a, const v_int32x4& b)\n{\n    __m128i delta = _mm_set1_epi32(1 << (n-1)), delta32 = _mm_set1_epi32(32768);\n    __m128i a1 = _mm_sub_epi32(_mm_srai_epi32(_mm_add_epi32(a.val, delta), n), delta32);\n    __m128i a2 = _mm_sub_epi16(_mm_packs_epi32(a1, a1), _mm_set1_epi16(-32768));\n    __m128i b1 = _mm_sub_epi32(_mm_srai_epi32(_mm_add_epi32(b.val, delta), n), delta32);\n    __m128i b2 = _mm_sub_epi16(_mm_packs_epi32(b1, b1), _mm_set1_epi16(-32768));\n    return v_uint16x8(_mm_unpacklo_epi64(a2, b2));\n}\n\ntemplate<int n> inline\nvoid v_rshr_pack_u_store(ushort* ptr, const v_int32x4& a)\n{\n    __m128i delta = _mm_set1_epi32(1 << (n-1)), delta32 = _mm_set1_epi32(32768);\n    __m128i a1 = _mm_sub_epi32(_mm_srai_epi32(_mm_add_epi32(a.val, delta), n), delta32);\n    __m128i a2 = _mm_sub_epi16(_mm_packs_epi32(a1, a1), _mm_set1_epi16(-32768));\n    _mm_storel_epi64((__m128i*)ptr, a2);\n}\n\ninline v_int16x8 v_pack(const v_int32x4& a, const v_int32x4& b)\n{ return v_int16x8(_mm_packs_epi32(a.val, b.val)); }\n\ninline void v_pack_store(short* ptr, const v_int32x4& a)\n{\n    _mm_storel_epi64((__m128i*)ptr, _mm_packs_epi32(a.val, a.val));\n}\n\ntemplate<int n> inline\nv_int16x8 v_rshr_pack(const v_int32x4& a, const v_int32x4& b)\n{\n    __m128i delta = _mm_set1_epi32(1 << (n-1));\n    return v_int16x8(_mm_packs_epi32(_mm_srai_epi32(_mm_add_epi32(a.val, delta), n),\n                                     _mm_srai_epi32(_mm_add_epi32(b.val, delta), n)));\n}\n\ntemplate<int n> inline\nvoid v_rshr_pack_store(short* ptr, const v_int32x4& a)\n{\n    __m128i delta = _mm_set1_epi32(1 << (n-1));\n    __m128i a1 = _mm_srai_epi32(_mm_add_epi32(a.val, delta), n);\n    _mm_storel_epi64((__m128i*)ptr, _mm_packs_epi32(a1, a1));\n}\n\n\n// [a0 0 | b0 0]  [a1 0 | b1 0]\ninline v_uint32x4 v_pack(const v_uint64x2& a, const v_uint64x2& b)\n{\n    __m128i v0 = _mm_unpacklo_epi32(a.val, b.val); // a0 a1 0 0\n    __m128i v1 = _mm_unpackhi_epi32(a.val, b.val); // b0 b1 0 0\n    return v_uint32x4(_mm_unpacklo_epi32(v0, v1));\n}\n\ninline void v_pack_store(unsigned* ptr, const v_uint64x2& a)\n{\n    __m128i a1 = _mm_shuffle_epi32(a.val, _MM_SHUFFLE(0, 2, 2, 0));\n    _mm_storel_epi64((__m128i*)ptr, a1);\n}\n\n// [a0 0 | b0 0]  [a1 0 | b1 0]\ninline v_int32x4 v_pack(const v_int64x2& a, const v_int64x2& b)\n{\n    __m128i v0 = _mm_unpacklo_epi32(a.val, b.val); // a0 a1 0 0\n    __m128i v1 = _mm_unpackhi_epi32(a.val, b.val); // b0 b1 0 0\n    return v_int32x4(_mm_unpacklo_epi32(v0, v1));\n}\n\ninline void v_pack_store(int* ptr, const v_int64x2& a)\n{\n    __m128i a1 = _mm_shuffle_epi32(a.val, _MM_SHUFFLE(0, 2, 2, 0));\n    _mm_storel_epi64((__m128i*)ptr, a1);\n}\n\ntemplate<int n> inline\nv_uint32x4 v_rshr_pack(const v_uint64x2& a, const v_uint64x2& b)\n{\n    uint64 delta = (uint64)1 << (n-1);\n    v_uint64x2 delta2(delta, delta);\n    __m128i a1 = _mm_srli_epi64(_mm_add_epi64(a.val, delta2.val), n);\n    __m128i b1 = _mm_srli_epi64(_mm_add_epi64(b.val, delta2.val), n);\n    __m128i v0 = _mm_unpacklo_epi32(a1, b1); // a0 a1 0 0\n    __m128i v1 = _mm_unpackhi_epi32(a1, b1); // b0 b1 0 0\n    return v_uint32x4(_mm_unpacklo_epi32(v0, v1));\n}\n\ntemplate<int n> inline\nvoid v_rshr_pack_store(unsigned* ptr, const v_uint64x2& a)\n{\n    uint64 delta = (uint64)1 << (n-1);\n    v_uint64x2 delta2(delta, delta);\n    __m128i a1 = _mm_srli_epi64(_mm_add_epi64(a.val, delta2.val), n);\n    __m128i a2 = _mm_shuffle_epi32(a1, _MM_SHUFFLE(0, 2, 2, 0));\n    _mm_storel_epi64((__m128i*)ptr, a2);\n}\n\ninline __m128i v_sign_epi64(__m128i a)\n{\n    return _mm_shuffle_epi32(_mm_srai_epi32(a, 31), _MM_SHUFFLE(3, 3, 1, 1)); // x m0 | x m1\n}\n\ninline __m128i v_srai_epi64(__m128i a, int imm)\n{\n    __m128i smask = v_sign_epi64(a);\n    return _mm_xor_si128(_mm_srli_epi64(_mm_xor_si128(a, smask), imm), smask);\n}\n\ntemplate<int n> inline\nv_int32x4 v_rshr_pack(const v_int64x2& a, const v_int64x2& b)\n{\n    int64 delta = (int64)1 << (n-1);\n    v_int64x2 delta2(delta, delta);\n    __m128i a1 = v_srai_epi64(_mm_add_epi64(a.val, delta2.val), n);\n    __m128i b1 = v_srai_epi64(_mm_add_epi64(b.val, delta2.val), n);\n    __m128i v0 = _mm_unpacklo_epi32(a1, b1); // a0 a1 0 0\n    __m128i v1 = _mm_unpackhi_epi32(a1, b1); // b0 b1 0 0\n    return v_int32x4(_mm_unpacklo_epi32(v0, v1));\n}\n\ntemplate<int n> inline\nvoid v_rshr_pack_store(int* ptr, const v_int64x2& a)\n{\n    int64 delta = (int64)1 << (n-1);\n    v_int64x2 delta2(delta, delta);\n    __m128i a1 = v_srai_epi64(_mm_add_epi64(a.val, delta2.val), n);\n    __m128i a2 = _mm_shuffle_epi32(a1, _MM_SHUFFLE(0, 2, 2, 0));\n    _mm_storel_epi64((__m128i*)ptr, a2);\n}\n\ninline v_float32x4 v_matmul(const v_float32x4& v, const v_float32x4& m0,\n                            const v_float32x4& m1, const v_float32x4& m2,\n                            const v_float32x4& m3)\n{\n    __m128 v0 = _mm_mul_ps(_mm_shuffle_ps(v.val, v.val, _MM_SHUFFLE(0, 0, 0, 0)), m0.val);\n    __m128 v1 = _mm_mul_ps(_mm_shuffle_ps(v.val, v.val, _MM_SHUFFLE(1, 1, 1, 1)), m1.val);\n    __m128 v2 = _mm_mul_ps(_mm_shuffle_ps(v.val, v.val, _MM_SHUFFLE(2, 2, 2, 2)), m2.val);\n    __m128 v3 = _mm_mul_ps(_mm_shuffle_ps(v.val, v.val, _MM_SHUFFLE(3, 3, 3, 3)), m3.val);\n\n    return v_float32x4(_mm_add_ps(_mm_add_ps(v0, v1), _mm_add_ps(v2, v3)));\n}\n\n\n#define OPENCV_HAL_IMPL_SSE_BIN_OP(bin_op, _Tpvec, intrin) \\\n    inline _Tpvec operator bin_op (const _Tpvec& a, const _Tpvec& b) \\\n    { \\\n        return _Tpvec(intrin(a.val, b.val)); \\\n    } \\\n    inline _Tpvec& operator bin_op##= (_Tpvec& a, const _Tpvec& b) \\\n    { \\\n        a.val = intrin(a.val, b.val); \\\n        return a; \\\n    }\n\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_uint8x16, _mm_adds_epu8)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_uint8x16, _mm_subs_epu8)\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_int8x16, _mm_adds_epi8)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_int8x16, _mm_subs_epi8)\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_uint16x8, _mm_adds_epu16)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_uint16x8, _mm_subs_epu16)\nOPENCV_HAL_IMPL_SSE_BIN_OP(*, v_uint16x8, _mm_mullo_epi16)\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_int16x8, _mm_adds_epi16)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_int16x8, _mm_subs_epi16)\nOPENCV_HAL_IMPL_SSE_BIN_OP(*, v_int16x8, _mm_mullo_epi16)\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_uint32x4, _mm_add_epi32)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_uint32x4, _mm_sub_epi32)\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_int32x4, _mm_add_epi32)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_int32x4, _mm_sub_epi32)\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_float32x4, _mm_add_ps)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_float32x4, _mm_sub_ps)\nOPENCV_HAL_IMPL_SSE_BIN_OP(*, v_float32x4, _mm_mul_ps)\nOPENCV_HAL_IMPL_SSE_BIN_OP(/, v_float32x4, _mm_div_ps)\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_float64x2, _mm_add_pd)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_float64x2, _mm_sub_pd)\nOPENCV_HAL_IMPL_SSE_BIN_OP(*, v_float64x2, _mm_mul_pd)\nOPENCV_HAL_IMPL_SSE_BIN_OP(/, v_float64x2, _mm_div_pd)\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_uint64x2, _mm_add_epi64)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_uint64x2, _mm_sub_epi64)\nOPENCV_HAL_IMPL_SSE_BIN_OP(+, v_int64x2, _mm_add_epi64)\nOPENCV_HAL_IMPL_SSE_BIN_OP(-, v_int64x2, _mm_sub_epi64)\n\ninline v_uint32x4 operator * (const v_uint32x4& a, const v_uint32x4& b)\n{\n    __m128i c0 = _mm_mul_epu32(a.val, b.val);\n    __m128i c1 = _mm_mul_epu32(_mm_srli_epi64(a.val, 32), _mm_srli_epi64(b.val, 32));\n    __m128i d0 = _mm_unpacklo_epi32(c0, c1);\n    __m128i d1 = _mm_unpackhi_epi32(c0, c1);\n    return v_uint32x4(_mm_unpacklo_epi64(d0, d1));\n}\ninline v_int32x4 operator * (const v_int32x4& a, const v_int32x4& b)\n{\n    __m128i c0 = _mm_mul_epu32(a.val, b.val);\n    __m128i c1 = _mm_mul_epu32(_mm_srli_epi64(a.val, 32), _mm_srli_epi64(b.val, 32));\n    __m128i d0 = _mm_unpacklo_epi32(c0, c1);\n    __m128i d1 = _mm_unpackhi_epi32(c0, c1);\n    return v_int32x4(_mm_unpacklo_epi64(d0, d1));\n}\ninline v_uint32x4& operator *= (v_uint32x4& a, const v_uint32x4& b)\n{\n    a = a * b;\n    return a;\n}\ninline v_int32x4& operator *= (v_int32x4& a, const v_int32x4& b)\n{\n    a = a * b;\n    return a;\n}\n\ninline void v_mul_expand(const v_int16x8& a, const v_int16x8& b,\n                         v_int32x4& c, v_int32x4& d)\n{\n    __m128i v0 = _mm_mullo_epi16(a.val, b.val);\n    __m128i v1 = _mm_mulhi_epi16(a.val, b.val);\n    c.val = _mm_unpacklo_epi16(v0, v1);\n    d.val = _mm_unpackhi_epi16(v0, v1);\n}\n\ninline void v_mul_expand(const v_uint16x8& a, const v_uint16x8& b,\n                         v_uint32x4& c, v_uint32x4& d)\n{\n    __m128i v0 = _mm_mullo_epi16(a.val, b.val);\n    __m128i v1 = _mm_mulhi_epu16(a.val, b.val);\n    c.val = _mm_unpacklo_epi16(v0, v1);\n    d.val = _mm_unpackhi_epi16(v0, v1);\n}\n\ninline void v_mul_expand(const v_uint32x4& a, const v_uint32x4& b,\n                         v_uint64x2& c, v_uint64x2& d)\n{\n    __m128i c0 = _mm_mul_epu32(a.val, b.val);\n    __m128i c1 = _mm_mul_epu32(_mm_srli_epi64(a.val, 32), _mm_srli_epi64(b.val, 32));\n    c.val = _mm_unpacklo_epi64(c0, c1);\n    d.val = _mm_unpackhi_epi64(c0, c1);\n}\n\ninline v_int32x4 v_dotprod(const v_int16x8& a, const v_int16x8& b)\n{\n    return v_int32x4(_mm_madd_epi16(a.val, b.val));\n}\n\n#define OPENCV_HAL_IMPL_SSE_LOGIC_OP(_Tpvec, suffix, not_const) \\\n    OPENCV_HAL_IMPL_SSE_BIN_OP(&, _Tpvec, _mm_and_##suffix) \\\n    OPENCV_HAL_IMPL_SSE_BIN_OP(|, _Tpvec, _mm_or_##suffix) \\\n    OPENCV_HAL_IMPL_SSE_BIN_OP(^, _Tpvec, _mm_xor_##suffix) \\\n    inline _Tpvec operator ~ (const _Tpvec& a) \\\n    { \\\n        return _Tpvec(_mm_xor_##suffix(a.val, not_const)); \\\n    }\n\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_uint8x16, si128, _mm_set1_epi32(-1))\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_int8x16, si128, _mm_set1_epi32(-1))\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_uint16x8, si128, _mm_set1_epi32(-1))\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_int16x8, si128, _mm_set1_epi32(-1))\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_uint32x4, si128, _mm_set1_epi32(-1))\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_int32x4, si128, _mm_set1_epi32(-1))\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_uint64x2, si128, _mm_set1_epi32(-1))\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_int64x2, si128, _mm_set1_epi32(-1))\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_float32x4, ps, _mm_castsi128_ps(_mm_set1_epi32(-1)))\nOPENCV_HAL_IMPL_SSE_LOGIC_OP(v_float64x2, pd, _mm_castsi128_pd(_mm_set1_epi32(-1)))\n\ninline v_float32x4 v_sqrt(const v_float32x4& x)\n{ return v_float32x4(_mm_sqrt_ps(x.val)); }\n\ninline v_float32x4 v_invsqrt(const v_float32x4& x)\n{\n    static const __m128 _0_5 = _mm_set1_ps(0.5f), _1_5 = _mm_set1_ps(1.5f);\n    __m128 t = x.val;\n    __m128 h = _mm_mul_ps(t, _0_5);\n    t = _mm_rsqrt_ps(t);\n    t = _mm_mul_ps(t, _mm_sub_ps(_1_5, _mm_mul_ps(_mm_mul_ps(t, t), h)));\n    return v_float32x4(t);\n}\n\ninline v_float64x2 v_sqrt(const v_float64x2& x)\n{ return v_float64x2(_mm_sqrt_pd(x.val)); }\n\ninline v_float64x2 v_invsqrt(const v_float64x2& x)\n{\n    static const __m128d v_1 = _mm_set1_pd(1.);\n    return v_float64x2(_mm_div_pd(v_1, _mm_sqrt_pd(x.val)));\n}\n\ninline v_float32x4 v_abs(const v_float32x4& x)\n{ return v_float32x4(_mm_and_ps(x.val, _mm_castsi128_ps(_mm_set1_epi32(0x7fffffff)))); }\ninline v_float64x2 v_abs(const v_float64x2& x)\n{\n    return v_float64x2(_mm_and_pd(x.val,\n        _mm_castsi128_pd(_mm_srli_epi64(_mm_set1_epi32(-1), 1))));\n}\n\n// TODO: exp, log, sin, cos\n\n#define OPENCV_HAL_IMPL_SSE_BIN_FUNC(_Tpvec, func, intrin) \\\ninline _Tpvec func(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    return _Tpvec(intrin(a.val, b.val)); \\\n}\n\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_uint8x16, v_min, _mm_min_epu8)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_uint8x16, v_max, _mm_max_epu8)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_int16x8, v_min, _mm_min_epi16)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_int16x8, v_max, _mm_max_epi16)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_float32x4, v_min, _mm_min_ps)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_float32x4, v_max, _mm_max_ps)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_float64x2, v_min, _mm_min_pd)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_float64x2, v_max, _mm_max_pd)\n\ninline v_int8x16 v_min(const v_int8x16& a, const v_int8x16& b)\n{\n    __m128i delta = _mm_set1_epi8((char)-128);\n    return v_int8x16(_mm_xor_si128(delta, _mm_min_epu8(_mm_xor_si128(a.val, delta),\n                                                       _mm_xor_si128(b.val, delta))));\n}\ninline v_int8x16 v_max(const v_int8x16& a, const v_int8x16& b)\n{\n    __m128i delta = _mm_set1_epi8((char)-128);\n    return v_int8x16(_mm_xor_si128(delta, _mm_max_epu8(_mm_xor_si128(a.val, delta),\n                                                       _mm_xor_si128(b.val, delta))));\n}\ninline v_uint16x8 v_min(const v_uint16x8& a, const v_uint16x8& b)\n{\n    return v_uint16x8(_mm_subs_epu16(a.val, _mm_subs_epu16(a.val, b.val)));\n}\ninline v_uint16x8 v_max(const v_uint16x8& a, const v_uint16x8& b)\n{\n    return v_uint16x8(_mm_adds_epu16(_mm_subs_epu16(a.val, b.val), b.val));\n}\ninline v_uint32x4 v_min(const v_uint32x4& a, const v_uint32x4& b)\n{\n    __m128i delta = _mm_set1_epi32((int)0x80000000);\n    __m128i mask = _mm_cmpgt_epi32(_mm_xor_si128(a.val, delta), _mm_xor_si128(b.val, delta));\n    return v_uint32x4(v_select_si128(mask, b.val, a.val));\n}\ninline v_uint32x4 v_max(const v_uint32x4& a, const v_uint32x4& b)\n{\n    __m128i delta = _mm_set1_epi32((int)0x80000000);\n    __m128i mask = _mm_cmpgt_epi32(_mm_xor_si128(a.val, delta), _mm_xor_si128(b.val, delta));\n    return v_uint32x4(v_select_si128(mask, a.val, b.val));\n}\ninline v_int32x4 v_min(const v_int32x4& a, const v_int32x4& b)\n{\n    return v_int32x4(v_select_si128(_mm_cmpgt_epi32(a.val, b.val), b.val, a.val));\n}\ninline v_int32x4 v_max(const v_int32x4& a, const v_int32x4& b)\n{\n    return v_int32x4(v_select_si128(_mm_cmpgt_epi32(a.val, b.val), a.val, b.val));\n}\n\n#define OPENCV_HAL_IMPL_SSE_INT_CMP_OP(_Tpuvec, _Tpsvec, suffix, sbit) \\\ninline _Tpuvec operator == (const _Tpuvec& a, const _Tpuvec& b) \\\n{ return _Tpuvec(_mm_cmpeq_##suffix(a.val, b.val)); } \\\ninline _Tpuvec operator != (const _Tpuvec& a, const _Tpuvec& b) \\\n{ \\\n    __m128i not_mask = _mm_set1_epi32(-1); \\\n    return _Tpuvec(_mm_xor_si128(_mm_cmpeq_##suffix(a.val, b.val), not_mask)); \\\n} \\\ninline _Tpsvec operator == (const _Tpsvec& a, const _Tpsvec& b) \\\n{ return _Tpsvec(_mm_cmpeq_##suffix(a.val, b.val)); } \\\ninline _Tpsvec operator != (const _Tpsvec& a, const _Tpsvec& b) \\\n{ \\\n    __m128i not_mask = _mm_set1_epi32(-1); \\\n    return _Tpsvec(_mm_xor_si128(_mm_cmpeq_##suffix(a.val, b.val), not_mask)); \\\n} \\\ninline _Tpuvec operator < (const _Tpuvec& a, const _Tpuvec& b) \\\n{ \\\n    __m128i smask = _mm_set1_##suffix(sbit); \\\n    return _Tpuvec(_mm_cmpgt_##suffix(_mm_xor_si128(b.val, smask), _mm_xor_si128(a.val, smask))); \\\n} \\\ninline _Tpuvec operator > (const _Tpuvec& a, const _Tpuvec& b) \\\n{ \\\n    __m128i smask = _mm_set1_##suffix(sbit); \\\n    return _Tpuvec(_mm_cmpgt_##suffix(_mm_xor_si128(a.val, smask), _mm_xor_si128(b.val, smask))); \\\n} \\\ninline _Tpuvec operator <= (const _Tpuvec& a, const _Tpuvec& b) \\\n{ \\\n    __m128i smask = _mm_set1_##suffix(sbit); \\\n    __m128i not_mask = _mm_set1_epi32(-1); \\\n    __m128i res = _mm_cmpgt_##suffix(_mm_xor_si128(a.val, smask), _mm_xor_si128(b.val, smask)); \\\n    return _Tpuvec(_mm_xor_si128(res, not_mask)); \\\n} \\\ninline _Tpuvec operator >= (const _Tpuvec& a, const _Tpuvec& b) \\\n{ \\\n    __m128i smask = _mm_set1_##suffix(sbit); \\\n    __m128i not_mask = _mm_set1_epi32(-1); \\\n    __m128i res = _mm_cmpgt_##suffix(_mm_xor_si128(b.val, smask), _mm_xor_si128(a.val, smask)); \\\n    return _Tpuvec(_mm_xor_si128(res, not_mask)); \\\n} \\\ninline _Tpsvec operator < (const _Tpsvec& a, const _Tpsvec& b) \\\n{ \\\n    return _Tpsvec(_mm_cmpgt_##suffix(b.val, a.val)); \\\n} \\\ninline _Tpsvec operator > (const _Tpsvec& a, const _Tpsvec& b) \\\n{ \\\n    return _Tpsvec(_mm_cmpgt_##suffix(a.val, b.val)); \\\n} \\\ninline _Tpsvec operator <= (const _Tpsvec& a, const _Tpsvec& b) \\\n{ \\\n    __m128i not_mask = _mm_set1_epi32(-1); \\\n    return _Tpsvec(_mm_xor_si128(_mm_cmpgt_##suffix(a.val, b.val), not_mask)); \\\n} \\\ninline _Tpsvec operator >= (const _Tpsvec& a, const _Tpsvec& b) \\\n{ \\\n    __m128i not_mask = _mm_set1_epi32(-1); \\\n    return _Tpsvec(_mm_xor_si128(_mm_cmpgt_##suffix(b.val, a.val), not_mask)); \\\n}\n\nOPENCV_HAL_IMPL_SSE_INT_CMP_OP(v_uint8x16, v_int8x16, epi8, (char)-128)\nOPENCV_HAL_IMPL_SSE_INT_CMP_OP(v_uint16x8, v_int16x8, epi16, (short)-32768)\nOPENCV_HAL_IMPL_SSE_INT_CMP_OP(v_uint32x4, v_int32x4, epi32, (int)0x80000000)\n\n#define OPENCV_HAL_IMPL_SSE_FLT_CMP_OP(_Tpvec, suffix) \\\ninline _Tpvec operator == (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(_mm_cmpeq_##suffix(a.val, b.val)); } \\\ninline _Tpvec operator != (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(_mm_cmpneq_##suffix(a.val, b.val)); } \\\ninline _Tpvec operator < (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(_mm_cmplt_##suffix(a.val, b.val)); } \\\ninline _Tpvec operator > (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(_mm_cmpgt_##suffix(a.val, b.val)); } \\\ninline _Tpvec operator <= (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(_mm_cmple_##suffix(a.val, b.val)); } \\\ninline _Tpvec operator >= (const _Tpvec& a, const _Tpvec& b) \\\n{ return _Tpvec(_mm_cmpge_##suffix(a.val, b.val)); }\n\nOPENCV_HAL_IMPL_SSE_FLT_CMP_OP(v_float32x4, ps)\nOPENCV_HAL_IMPL_SSE_FLT_CMP_OP(v_float64x2, pd)\n\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_uint8x16, v_add_wrap, _mm_add_epi8)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_int8x16, v_add_wrap, _mm_add_epi8)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_uint16x8, v_add_wrap, _mm_add_epi16)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_int16x8, v_add_wrap, _mm_add_epi16)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_uint8x16, v_sub_wrap, _mm_sub_epi8)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_int8x16, v_sub_wrap, _mm_sub_epi8)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_uint16x8, v_sub_wrap, _mm_sub_epi16)\nOPENCV_HAL_IMPL_SSE_BIN_FUNC(v_int16x8, v_sub_wrap, _mm_sub_epi16)\n\n#define OPENCV_HAL_IMPL_SSE_ABSDIFF_8_16(_Tpuvec, _Tpsvec, bits, smask32) \\\ninline _Tpuvec v_absdiff(const _Tpuvec& a, const _Tpuvec& b) \\\n{ \\\n    return _Tpuvec(_mm_add_epi##bits(_mm_subs_epu##bits(a.val, b.val), _mm_subs_epu##bits(b.val, a.val))); \\\n} \\\ninline _Tpuvec v_absdiff(const _Tpsvec& a, const _Tpsvec& b) \\\n{ \\\n    __m128i smask = _mm_set1_epi32(smask32); \\\n    __m128i a1 = _mm_xor_si128(a.val, smask); \\\n    __m128i b1 = _mm_xor_si128(b.val, smask); \\\n    return _Tpuvec(_mm_add_epi##bits(_mm_subs_epu##bits(a1, b1), _mm_subs_epu##bits(b1, a1))); \\\n}\n\nOPENCV_HAL_IMPL_SSE_ABSDIFF_8_16(v_uint8x16, v_int8x16, 8, (int)0x80808080)\nOPENCV_HAL_IMPL_SSE_ABSDIFF_8_16(v_uint16x8, v_int16x8, 16, (int)0x80008000)\n\ninline v_uint32x4 v_absdiff(const v_uint32x4& a, const v_uint32x4& b)\n{\n    return v_max(a, b) - v_min(a, b);\n}\n\ninline v_uint32x4 v_absdiff(const v_int32x4& a, const v_int32x4& b)\n{\n    __m128i d = _mm_sub_epi32(a.val, b.val);\n    __m128i m = _mm_cmpgt_epi32(b.val, a.val);\n    return v_uint32x4(_mm_sub_epi32(_mm_xor_si128(d, m), m));\n}\n\n#define OPENCV_HAL_IMPL_SSE_MISC_FLT_OP(_Tpvec, _Tp, _Tpreg, suffix, absmask_vec) \\\ninline _Tpvec v_absdiff(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    _Tpreg absmask = _mm_castsi128_##suffix(absmask_vec); \\\n    return _Tpvec(_mm_and_##suffix(_mm_sub_##suffix(a.val, b.val), absmask)); \\\n} \\\ninline _Tpvec v_magnitude(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    _Tpreg res = _mm_add_##suffix(_mm_mul_##suffix(a.val, a.val), _mm_mul_##suffix(b.val, b.val)); \\\n    return _Tpvec(_mm_sqrt_##suffix(res)); \\\n} \\\ninline _Tpvec v_sqr_magnitude(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    _Tpreg res = _mm_add_##suffix(_mm_mul_##suffix(a.val, a.val), _mm_mul_##suffix(b.val, b.val)); \\\n    return _Tpvec(res); \\\n} \\\ninline _Tpvec v_muladd(const _Tpvec& a, const _Tpvec& b, const _Tpvec& c) \\\n{ \\\n    return _Tpvec(_mm_add_##suffix(_mm_mul_##suffix(a.val, b.val), c.val)); \\\n}\n\nOPENCV_HAL_IMPL_SSE_MISC_FLT_OP(v_float32x4, float, __m128, ps, _mm_set1_epi32((int)0x7fffffff))\nOPENCV_HAL_IMPL_SSE_MISC_FLT_OP(v_float64x2, double, __m128d, pd, _mm_srli_epi64(_mm_set1_epi32(-1), 1))\n\n#define OPENCV_HAL_IMPL_SSE_SHIFT_OP(_Tpuvec, _Tpsvec, suffix, srai) \\\ninline _Tpuvec operator << (const _Tpuvec& a, int imm) \\\n{ \\\n    return _Tpuvec(_mm_slli_##suffix(a.val, imm)); \\\n} \\\ninline _Tpsvec operator << (const _Tpsvec& a, int imm) \\\n{ \\\n    return _Tpsvec(_mm_slli_##suffix(a.val, imm)); \\\n} \\\ninline _Tpuvec operator >> (const _Tpuvec& a, int imm) \\\n{ \\\n    return _Tpuvec(_mm_srli_##suffix(a.val, imm)); \\\n} \\\ninline _Tpsvec operator >> (const _Tpsvec& a, int imm) \\\n{ \\\n    return _Tpsvec(srai(a.val, imm)); \\\n} \\\ntemplate<int imm> \\\ninline _Tpuvec v_shl(const _Tpuvec& a) \\\n{ \\\n    return _Tpuvec(_mm_slli_##suffix(a.val, imm)); \\\n} \\\ntemplate<int imm> \\\ninline _Tpsvec v_shl(const _Tpsvec& a) \\\n{ \\\n    return _Tpsvec(_mm_slli_##suffix(a.val, imm)); \\\n} \\\ntemplate<int imm> \\\ninline _Tpuvec v_shr(const _Tpuvec& a) \\\n{ \\\n    return _Tpuvec(_mm_srli_##suffix(a.val, imm)); \\\n} \\\ntemplate<int imm> \\\ninline _Tpsvec v_shr(const _Tpsvec& a) \\\n{ \\\n    return _Tpsvec(srai(a.val, imm)); \\\n}\n\nOPENCV_HAL_IMPL_SSE_SHIFT_OP(v_uint16x8, v_int16x8, epi16, _mm_srai_epi16)\nOPENCV_HAL_IMPL_SSE_SHIFT_OP(v_uint32x4, v_int32x4, epi32, _mm_srai_epi32)\nOPENCV_HAL_IMPL_SSE_SHIFT_OP(v_uint64x2, v_int64x2, epi64, v_srai_epi64)\n\n#define OPENCV_HAL_IMPL_SSE_LOADSTORE_INT_OP(_Tpvec, _Tp) \\\ninline _Tpvec v_load(const _Tp* ptr) \\\n{ return _Tpvec(_mm_loadu_si128((const __m128i*)ptr)); } \\\ninline _Tpvec v_load_aligned(const _Tp* ptr) \\\n{ return _Tpvec(_mm_load_si128((const __m128i*)ptr)); } \\\ninline _Tpvec v_load_halves(const _Tp* ptr0, const _Tp* ptr1) \\\n{ \\\n    return _Tpvec(_mm_unpacklo_epi64(_mm_loadl_epi64((const __m128i*)ptr0), \\\n                                     _mm_loadl_epi64((const __m128i*)ptr1))); \\\n} \\\ninline void v_store(_Tp* ptr, const _Tpvec& a) \\\n{ _mm_storeu_si128((__m128i*)ptr, a.val); } \\\ninline void v_store_aligned(_Tp* ptr, const _Tpvec& a) \\\n{ _mm_store_si128((__m128i*)ptr, a.val); } \\\ninline void v_store_low(_Tp* ptr, const _Tpvec& a) \\\n{ _mm_storel_epi64((__m128i*)ptr, a.val); } \\\ninline void v_store_high(_Tp* ptr, const _Tpvec& a) \\\n{ _mm_storel_epi64((__m128i*)ptr, _mm_unpackhi_epi64(a.val, a.val)); }\n\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INT_OP(v_uint8x16, uchar)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INT_OP(v_int8x16, schar)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INT_OP(v_uint16x8, ushort)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INT_OP(v_int16x8, short)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INT_OP(v_uint32x4, unsigned)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INT_OP(v_int32x4, int)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INT_OP(v_uint64x2, uint64)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INT_OP(v_int64x2, int64)\n\n#define OPENCV_HAL_IMPL_SSE_LOADSTORE_FLT_OP(_Tpvec, _Tp, suffix) \\\ninline _Tpvec v_load(const _Tp* ptr) \\\n{ return _Tpvec(_mm_loadu_##suffix(ptr)); } \\\ninline _Tpvec v_load_aligned(const _Tp* ptr) \\\n{ return _Tpvec(_mm_load_##suffix(ptr)); } \\\ninline _Tpvec v_load_halves(const _Tp* ptr0, const _Tp* ptr1) \\\n{ \\\n    return _Tpvec(_mm_castsi128_##suffix( \\\n        _mm_unpacklo_epi64(_mm_loadl_epi64((const __m128i*)ptr0), \\\n                           _mm_loadl_epi64((const __m128i*)ptr1)))); \\\n} \\\ninline void v_store(_Tp* ptr, const _Tpvec& a) \\\n{ _mm_storeu_##suffix(ptr, a.val); } \\\ninline void v_store_aligned(_Tp* ptr, const _Tpvec& a) \\\n{ _mm_store_##suffix(ptr, a.val); } \\\ninline void v_store_low(_Tp* ptr, const _Tpvec& a) \\\n{ _mm_storel_epi64((__m128i*)ptr, _mm_cast##suffix##_si128(a.val)); } \\\ninline void v_store_high(_Tp* ptr, const _Tpvec& a) \\\n{ \\\n    __m128i a1 = _mm_cast##suffix##_si128(a.val); \\\n    _mm_storel_epi64((__m128i*)ptr, _mm_unpackhi_epi64(a1, a1)); \\\n}\n\nOPENCV_HAL_IMPL_SSE_LOADSTORE_FLT_OP(v_float32x4, float, ps)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_FLT_OP(v_float64x2, double, pd)\n\n#define OPENCV_HAL_IMPL_SSE_REDUCE_OP_4(_Tpvec, scalartype, func, scalar_func) \\\ninline scalartype v_reduce_##func(const _Tpvec& a) \\\n{ \\\n    scalartype CV_DECL_ALIGNED(16) buf[4]; \\\n    v_store_aligned(buf, a); \\\n    scalartype s0 = scalar_func(buf[0], buf[1]); \\\n    scalartype s1 = scalar_func(buf[2], buf[3]); \\\n    return scalar_func(s0, s1); \\\n}\n\nOPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_uint32x4, unsigned, sum, OPENCV_HAL_ADD)\nOPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_uint32x4, unsigned, max, std::max)\nOPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_uint32x4, unsigned, min, std::min)\nOPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_int32x4, int, sum, OPENCV_HAL_ADD)\nOPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_int32x4, int, max, std::max)\nOPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_int32x4, int, min, std::min)\nOPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_float32x4, float, sum, OPENCV_HAL_ADD)\nOPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_float32x4, float, max, std::max)\nOPENCV_HAL_IMPL_SSE_REDUCE_OP_4(v_float32x4, float, min, std::min)\n\n#define OPENCV_HAL_IMPL_SSE_CHECK_SIGNS(_Tpvec, suffix, pack_op, and_op, signmask, allmask) \\\ninline int v_signmask(const _Tpvec& a) \\\n{ \\\n    return and_op(_mm_movemask_##suffix(pack_op(a.val)), signmask); \\\n} \\\ninline bool v_check_all(const _Tpvec& a) \\\n{ return and_op(_mm_movemask_##suffix(a.val), allmask) == allmask; } \\\ninline bool v_check_any(const _Tpvec& a) \\\n{ return and_op(_mm_movemask_##suffix(a.val), allmask) != 0; }\n\n#define OPENCV_HAL_PACKS(a) _mm_packs_epi16(a, a)\ninline __m128i v_packq_epi32(__m128i a)\n{\n    __m128i b = _mm_packs_epi32(a, a);\n    return _mm_packs_epi16(b, b);\n}\n\nOPENCV_HAL_IMPL_SSE_CHECK_SIGNS(v_uint8x16, epi8, OPENCV_HAL_NOP, OPENCV_HAL_1ST, 65535, 65535)\nOPENCV_HAL_IMPL_SSE_CHECK_SIGNS(v_int8x16, epi8, OPENCV_HAL_NOP, OPENCV_HAL_1ST, 65535, 65535)\nOPENCV_HAL_IMPL_SSE_CHECK_SIGNS(v_uint16x8, epi8, OPENCV_HAL_PACKS, OPENCV_HAL_AND, 255, (int)0xaaaa)\nOPENCV_HAL_IMPL_SSE_CHECK_SIGNS(v_int16x8, epi8, OPENCV_HAL_PACKS, OPENCV_HAL_AND, 255, (int)0xaaaa)\nOPENCV_HAL_IMPL_SSE_CHECK_SIGNS(v_uint32x4, epi8, v_packq_epi32, OPENCV_HAL_AND, 15, (int)0x8888)\nOPENCV_HAL_IMPL_SSE_CHECK_SIGNS(v_int32x4, epi8, v_packq_epi32, OPENCV_HAL_AND, 15, (int)0x8888)\nOPENCV_HAL_IMPL_SSE_CHECK_SIGNS(v_float32x4, ps, OPENCV_HAL_NOP, OPENCV_HAL_1ST, 15, 15)\nOPENCV_HAL_IMPL_SSE_CHECK_SIGNS(v_float64x2, pd, OPENCV_HAL_NOP, OPENCV_HAL_1ST, 3, 3)\n\n#define OPENCV_HAL_IMPL_SSE_SELECT(_Tpvec, suffix) \\\ninline _Tpvec v_select(const _Tpvec& mask, const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    return _Tpvec(_mm_xor_##suffix(b.val, _mm_and_##suffix(_mm_xor_##suffix(b.val, a.val), mask.val))); \\\n}\n\nOPENCV_HAL_IMPL_SSE_SELECT(v_uint8x16, si128)\nOPENCV_HAL_IMPL_SSE_SELECT(v_int8x16, si128)\nOPENCV_HAL_IMPL_SSE_SELECT(v_uint16x8, si128)\nOPENCV_HAL_IMPL_SSE_SELECT(v_int16x8, si128)\nOPENCV_HAL_IMPL_SSE_SELECT(v_uint32x4, si128)\nOPENCV_HAL_IMPL_SSE_SELECT(v_int32x4, si128)\n// OPENCV_HAL_IMPL_SSE_SELECT(v_uint64x2, si128)\n// OPENCV_HAL_IMPL_SSE_SELECT(v_int64x2, si128)\nOPENCV_HAL_IMPL_SSE_SELECT(v_float32x4, ps)\nOPENCV_HAL_IMPL_SSE_SELECT(v_float64x2, pd)\n\n#define OPENCV_HAL_IMPL_SSE_EXPAND(_Tpuvec, _Tpwuvec, _Tpu, _Tpsvec, _Tpwsvec, _Tps, suffix, wsuffix, shift) \\\ninline void v_expand(const _Tpuvec& a, _Tpwuvec& b0, _Tpwuvec& b1) \\\n{ \\\n    __m128i z = _mm_setzero_si128(); \\\n    b0.val = _mm_unpacklo_##suffix(a.val, z); \\\n    b1.val = _mm_unpackhi_##suffix(a.val, z); \\\n} \\\ninline _Tpwuvec v_load_expand(const _Tpu* ptr) \\\n{ \\\n    __m128i z = _mm_setzero_si128(); \\\n    return _Tpwuvec(_mm_unpacklo_##suffix(_mm_loadl_epi64((const __m128i*)ptr), z)); \\\n} \\\ninline void v_expand(const _Tpsvec& a, _Tpwsvec& b0, _Tpwsvec& b1) \\\n{ \\\n    b0.val = _mm_srai_##wsuffix(_mm_unpacklo_##suffix(a.val, a.val), shift); \\\n    b1.val = _mm_srai_##wsuffix(_mm_unpackhi_##suffix(a.val, a.val), shift); \\\n} \\\ninline _Tpwsvec v_load_expand(const _Tps* ptr) \\\n{ \\\n    __m128i a = _mm_loadl_epi64((const __m128i*)ptr); \\\n    return _Tpwsvec(_mm_srai_##wsuffix(_mm_unpacklo_##suffix(a, a), shift)); \\\n}\n\nOPENCV_HAL_IMPL_SSE_EXPAND(v_uint8x16, v_uint16x8, uchar, v_int8x16, v_int16x8, schar, epi8, epi16, 8)\nOPENCV_HAL_IMPL_SSE_EXPAND(v_uint16x8, v_uint32x4, ushort, v_int16x8, v_int32x4, short, epi16, epi32, 16)\n\ninline void v_expand(const v_uint32x4& a, v_uint64x2& b0, v_uint64x2& b1)\n{\n    __m128i z = _mm_setzero_si128();\n    b0.val = _mm_unpacklo_epi32(a.val, z);\n    b1.val = _mm_unpackhi_epi32(a.val, z);\n}\ninline v_uint64x2 v_load_expand(const unsigned* ptr)\n{\n    __m128i z = _mm_setzero_si128();\n    return v_uint64x2(_mm_unpacklo_epi32(_mm_loadl_epi64((const __m128i*)ptr), z));\n}\ninline void v_expand(const v_int32x4& a, v_int64x2& b0, v_int64x2& b1)\n{\n    __m128i s = _mm_srai_epi32(a.val, 31);\n    b0.val = _mm_unpacklo_epi32(a.val, s);\n    b1.val = _mm_unpackhi_epi32(a.val, s);\n}\ninline v_int64x2 v_load_expand(const int* ptr)\n{\n    __m128i a = _mm_loadl_epi64((const __m128i*)ptr);\n    __m128i s = _mm_srai_epi32(a, 31);\n    return v_int64x2(_mm_unpacklo_epi32(a, s));\n}\n\ninline v_uint32x4 v_load_expand_q(const uchar* ptr)\n{\n    __m128i z = _mm_setzero_si128();\n    __m128i a = _mm_cvtsi32_si128(*(const int*)ptr);\n    return v_uint32x4(_mm_unpacklo_epi16(_mm_unpacklo_epi8(a, z), z));\n}\n\ninline v_int32x4 v_load_expand_q(const schar* ptr)\n{\n    __m128i a = _mm_cvtsi32_si128(*(const int*)ptr);\n    a = _mm_unpacklo_epi8(a, a);\n    a = _mm_unpacklo_epi8(a, a);\n    return v_int32x4(_mm_srai_epi32(a, 24));\n}\n\n#define OPENCV_HAL_IMPL_SSE_UNPACKS(_Tpvec, suffix, cast_from, cast_to) \\\ninline void v_zip(const _Tpvec& a0, const _Tpvec& a1, _Tpvec& b0, _Tpvec& b1) \\\n{ \\\n    b0.val = _mm_unpacklo_##suffix(a0.val, a1.val); \\\n    b1.val = _mm_unpackhi_##suffix(a0.val, a1.val); \\\n} \\\ninline _Tpvec v_combine_low(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    __m128i a1 = cast_from(a.val), b1 = cast_from(b.val); \\\n    return _Tpvec(cast_to(_mm_unpacklo_epi64(a1, b1))); \\\n} \\\ninline _Tpvec v_combine_high(const _Tpvec& a, const _Tpvec& b) \\\n{ \\\n    __m128i a1 = cast_from(a.val), b1 = cast_from(b.val); \\\n    return _Tpvec(cast_to(_mm_unpackhi_epi64(a1, b1))); \\\n} \\\ninline void v_recombine(const _Tpvec& a, const _Tpvec& b, _Tpvec& c, _Tpvec& d) \\\n{ \\\n    __m128i a1 = cast_from(a.val), b1 = cast_from(b.val); \\\n    c.val = cast_to(_mm_unpacklo_epi64(a1, b1)); \\\n    d.val = cast_to(_mm_unpackhi_epi64(a1, b1)); \\\n}\n\nOPENCV_HAL_IMPL_SSE_UNPACKS(v_uint8x16, epi8, OPENCV_HAL_NOP, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_UNPACKS(v_int8x16, epi8, OPENCV_HAL_NOP, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_UNPACKS(v_uint16x8, epi16, OPENCV_HAL_NOP, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_UNPACKS(v_int16x8, epi16, OPENCV_HAL_NOP, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_UNPACKS(v_uint32x4, epi32, OPENCV_HAL_NOP, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_UNPACKS(v_int32x4, epi32, OPENCV_HAL_NOP, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_UNPACKS(v_float32x4, ps, _mm_castps_si128, _mm_castsi128_ps)\nOPENCV_HAL_IMPL_SSE_UNPACKS(v_float64x2, pd, _mm_castpd_si128, _mm_castsi128_pd)\n\ntemplate<int s, typename _Tpvec>\ninline _Tpvec v_extract(const _Tpvec& a, const _Tpvec& b)\n{\n    const int w = sizeof(typename _Tpvec::lane_type);\n    const int n = _Tpvec::nlanes;\n    __m128i ra, rb;\n    ra = _mm_srli_si128(a.val, s*w);\n    rb = _mm_slli_si128(b.val, (n-s)*w);\n    return _Tpvec(_mm_or_si128(ra, rb));\n}\n\ninline v_int32x4 v_round(const v_float32x4& a)\n{ return v_int32x4(_mm_cvtps_epi32(a.val)); }\n\ninline v_int32x4 v_floor(const v_float32x4& a)\n{\n    __m128i a1 = _mm_cvtps_epi32(a.val);\n    __m128i mask = _mm_castps_si128(_mm_cmpgt_ps(_mm_cvtepi32_ps(a1), a.val));\n    return v_int32x4(_mm_add_epi32(a1, mask));\n}\n\ninline v_int32x4 v_ceil(const v_float32x4& a)\n{\n    __m128i a1 = _mm_cvtps_epi32(a.val);\n    __m128i mask = _mm_castps_si128(_mm_cmpgt_ps(a.val, _mm_cvtepi32_ps(a1)));\n    return v_int32x4(_mm_sub_epi32(a1, mask));\n}\n\ninline v_int32x4 v_trunc(const v_float32x4& a)\n{ return v_int32x4(_mm_cvttps_epi32(a.val)); }\n\ninline v_int32x4 v_round(const v_float64x2& a)\n{ return v_int32x4(_mm_cvtpd_epi32(a.val)); }\n\ninline v_int32x4 v_floor(const v_float64x2& a)\n{\n    __m128i a1 = _mm_cvtpd_epi32(a.val);\n    __m128i mask = _mm_castpd_si128(_mm_cmpgt_pd(_mm_cvtepi32_pd(a1), a.val));\n    mask = _mm_srli_si128(_mm_slli_si128(mask, 4), 8); // m0 m0 m1 m1 => m0 m1 0 0\n    return v_int32x4(_mm_add_epi32(a1, mask));\n}\n\ninline v_int32x4 v_ceil(const v_float64x2& a)\n{\n    __m128i a1 = _mm_cvtpd_epi32(a.val);\n    __m128i mask = _mm_castpd_si128(_mm_cmpgt_pd(a.val, _mm_cvtepi32_pd(a1)));\n    mask = _mm_srli_si128(_mm_slli_si128(mask, 4), 8); // m0 m0 m1 m1 => m0 m1 0 0\n    return v_int32x4(_mm_sub_epi32(a1, mask));\n}\n\ninline v_int32x4 v_trunc(const v_float64x2& a)\n{ return v_int32x4(_mm_cvttpd_epi32(a.val)); }\n\n#define OPENCV_HAL_IMPL_SSE_TRANSPOSE4x4(_Tpvec, suffix, cast_from, cast_to) \\\ninline void v_transpose4x4(const _Tpvec& a0, const _Tpvec& a1, \\\n                           const _Tpvec& a2, const _Tpvec& a3, \\\n                           _Tpvec& b0, _Tpvec& b1, \\\n                           _Tpvec& b2, _Tpvec& b3) \\\n{ \\\n    __m128i t0 = cast_from(_mm_unpacklo_##suffix(a0.val, a1.val)); \\\n    __m128i t1 = cast_from(_mm_unpacklo_##suffix(a2.val, a3.val)); \\\n    __m128i t2 = cast_from(_mm_unpackhi_##suffix(a0.val, a1.val)); \\\n    __m128i t3 = cast_from(_mm_unpackhi_##suffix(a2.val, a3.val)); \\\n\\\n    b0.val = cast_to(_mm_unpacklo_epi64(t0, t1)); \\\n    b1.val = cast_to(_mm_unpackhi_epi64(t0, t1)); \\\n    b2.val = cast_to(_mm_unpacklo_epi64(t2, t3)); \\\n    b3.val = cast_to(_mm_unpackhi_epi64(t2, t3)); \\\n}\n\nOPENCV_HAL_IMPL_SSE_TRANSPOSE4x4(v_uint32x4, epi32, OPENCV_HAL_NOP, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_TRANSPOSE4x4(v_int32x4, epi32, OPENCV_HAL_NOP, OPENCV_HAL_NOP)\nOPENCV_HAL_IMPL_SSE_TRANSPOSE4x4(v_float32x4, ps, _mm_castps_si128, _mm_castsi128_ps)\n\n// adopted from sse_utils.hpp\ninline void v_load_deinterleave(const uchar* ptr, v_uint8x16& a, v_uint8x16& b, v_uint8x16& c)\n{\n    __m128i t00 = _mm_loadu_si128((const __m128i*)ptr);\n    __m128i t01 = _mm_loadu_si128((const __m128i*)(ptr + 16));\n    __m128i t02 = _mm_loadu_si128((const __m128i*)(ptr + 32));\n\n    __m128i t10 = _mm_unpacklo_epi8(t00, _mm_unpackhi_epi64(t01, t01));\n    __m128i t11 = _mm_unpacklo_epi8(_mm_unpackhi_epi64(t00, t00), t02);\n    __m128i t12 = _mm_unpacklo_epi8(t01, _mm_unpackhi_epi64(t02, t02));\n\n    __m128i t20 = _mm_unpacklo_epi8(t10, _mm_unpackhi_epi64(t11, t11));\n    __m128i t21 = _mm_unpacklo_epi8(_mm_unpackhi_epi64(t10, t10), t12);\n    __m128i t22 = _mm_unpacklo_epi8(t11, _mm_unpackhi_epi64(t12, t12));\n\n    __m128i t30 = _mm_unpacklo_epi8(t20, _mm_unpackhi_epi64(t21, t21));\n    __m128i t31 = _mm_unpacklo_epi8(_mm_unpackhi_epi64(t20, t20), t22);\n    __m128i t32 = _mm_unpacklo_epi8(t21, _mm_unpackhi_epi64(t22, t22));\n\n    a.val = _mm_unpacklo_epi8(t30, _mm_unpackhi_epi64(t31, t31));\n    b.val = _mm_unpacklo_epi8(_mm_unpackhi_epi64(t30, t30), t32);\n    c.val = _mm_unpacklo_epi8(t31, _mm_unpackhi_epi64(t32, t32));\n}\n\ninline void v_load_deinterleave(const uchar* ptr, v_uint8x16& a, v_uint8x16& b, v_uint8x16& c, v_uint8x16& d)\n{\n    __m128i u0 = _mm_loadu_si128((const __m128i*)ptr); // a0 b0 c0 d0 a1 b1 c1 d1 ...\n    __m128i u1 = _mm_loadu_si128((const __m128i*)(ptr + 16)); // a4 b4 c4 d4 ...\n    __m128i u2 = _mm_loadu_si128((const __m128i*)(ptr + 32)); // a8 b8 c8 d8 ...\n    __m128i u3 = _mm_loadu_si128((const __m128i*)(ptr + 48)); // a12 b12 c12 d12 ...\n\n    __m128i v0 = _mm_unpacklo_epi8(u0, u2); // a0 a8 b0 b8 ...\n    __m128i v1 = _mm_unpackhi_epi8(u0, u2); // a2 a10 b2 b10 ...\n    __m128i v2 = _mm_unpacklo_epi8(u1, u3); // a4 a12 b4 b12 ...\n    __m128i v3 = _mm_unpackhi_epi8(u1, u3); // a6 a14 b6 b14 ...\n\n    u0 = _mm_unpacklo_epi8(v0, v2); // a0 a4 a8 a12 ...\n    u1 = _mm_unpacklo_epi8(v1, v3); // a2 a6 a10 a14 ...\n    u2 = _mm_unpackhi_epi8(v0, v2); // a1 a5 a9 a13 ...\n    u3 = _mm_unpackhi_epi8(v1, v3); // a3 a7 a11 a15 ...\n\n    v0 = _mm_unpacklo_epi8(u0, u1); // a0 a2 a4 a6 ...\n    v1 = _mm_unpacklo_epi8(u2, u3); // a1 a3 a5 a7 ...\n    v2 = _mm_unpackhi_epi8(u0, u1); // c0 c2 c4 c6 ...\n    v3 = _mm_unpackhi_epi8(u2, u3); // c1 c3 c5 c7 ...\n\n    a.val = _mm_unpacklo_epi8(v0, v1);\n    b.val = _mm_unpackhi_epi8(v0, v1);\n    c.val = _mm_unpacklo_epi8(v2, v3);\n    d.val = _mm_unpackhi_epi8(v2, v3);\n}\n\ninline void v_load_deinterleave(const ushort* ptr, v_uint16x8& a, v_uint16x8& b, v_uint16x8& c)\n{\n    __m128i t00 = _mm_loadu_si128((const __m128i*)ptr);\n    __m128i t01 = _mm_loadu_si128((const __m128i*)(ptr + 8));\n    __m128i t02 = _mm_loadu_si128((const __m128i*)(ptr + 16));\n\n    __m128i t10 = _mm_unpacklo_epi16(t00, _mm_unpackhi_epi64(t01, t01));\n    __m128i t11 = _mm_unpacklo_epi16(_mm_unpackhi_epi64(t00, t00), t02);\n    __m128i t12 = _mm_unpacklo_epi16(t01, _mm_unpackhi_epi64(t02, t02));\n\n    __m128i t20 = _mm_unpacklo_epi16(t10, _mm_unpackhi_epi64(t11, t11));\n    __m128i t21 = _mm_unpacklo_epi16(_mm_unpackhi_epi64(t10, t10), t12);\n    __m128i t22 = _mm_unpacklo_epi16(t11, _mm_unpackhi_epi64(t12, t12));\n\n    a.val = _mm_unpacklo_epi16(t20, _mm_unpackhi_epi64(t21, t21));\n    b.val = _mm_unpacklo_epi16(_mm_unpackhi_epi64(t20, t20), t22);\n    c.val = _mm_unpacklo_epi16(t21, _mm_unpackhi_epi64(t22, t22));\n}\n\ninline void v_load_deinterleave(const ushort* ptr, v_uint16x8& a, v_uint16x8& b, v_uint16x8& c, v_uint16x8& d)\n{\n    __m128i u0 = _mm_loadu_si128((const __m128i*)ptr); // a0 b0 c0 d0 a1 b1 c1 d1\n    __m128i u1 = _mm_loadu_si128((const __m128i*)(ptr + 8)); // a2 b2 c2 d2 ...\n    __m128i u2 = _mm_loadu_si128((const __m128i*)(ptr + 16)); // a4 b4 c4 d4 ...\n    __m128i u3 = _mm_loadu_si128((const __m128i*)(ptr + 24)); // a6 b6 c6 d6 ...\n\n    __m128i v0 = _mm_unpacklo_epi16(u0, u2); // a0 a4 b0 b4 ...\n    __m128i v1 = _mm_unpackhi_epi16(u0, u2); // a1 a5 b1 b5 ...\n    __m128i v2 = _mm_unpacklo_epi16(u1, u3); // a2 a6 b2 b6 ...\n    __m128i v3 = _mm_unpackhi_epi16(u1, u3); // a3 a7 b3 b7 ...\n\n    u0 = _mm_unpacklo_epi16(v0, v2); // a0 a2 a4 a6 ...\n    u1 = _mm_unpacklo_epi16(v1, v3); // a1 a3 a5 a7 ...\n    u2 = _mm_unpackhi_epi16(v0, v2); // c0 c2 c4 c6 ...\n    u3 = _mm_unpackhi_epi16(v1, v3); // c1 c3 c5 c7 ...\n\n    a.val = _mm_unpacklo_epi16(u0, u1);\n    b.val = _mm_unpackhi_epi16(u0, u1);\n    c.val = _mm_unpacklo_epi16(u2, u3);\n    d.val = _mm_unpackhi_epi16(u2, u3);\n}\n\ninline void v_load_deinterleave(const unsigned* ptr, v_uint32x4& a, v_uint32x4& b, v_uint32x4& c)\n{\n    __m128i t00 = _mm_loadu_si128((const __m128i*)ptr);\n    __m128i t01 = _mm_loadu_si128((const __m128i*)(ptr + 4));\n    __m128i t02 = _mm_loadu_si128((const __m128i*)(ptr + 8));\n\n    __m128i t10 = _mm_unpacklo_epi32(t00, _mm_unpackhi_epi64(t01, t01));\n    __m128i t11 = _mm_unpacklo_epi32(_mm_unpackhi_epi64(t00, t00), t02);\n    __m128i t12 = _mm_unpacklo_epi32(t01, _mm_unpackhi_epi64(t02, t02));\n\n    a.val = _mm_unpacklo_epi32(t10, _mm_unpackhi_epi64(t11, t11));\n    b.val = _mm_unpacklo_epi32(_mm_unpackhi_epi64(t10, t10), t12);\n    c.val = _mm_unpacklo_epi32(t11, _mm_unpackhi_epi64(t12, t12));\n}\n\ninline void v_load_deinterleave(const unsigned* ptr, v_uint32x4& a, v_uint32x4& b, v_uint32x4& c, v_uint32x4& d)\n{\n    v_uint32x4 u0(_mm_loadu_si128((const __m128i*)ptr));        // a0 b0 c0 d0\n    v_uint32x4 u1(_mm_loadu_si128((const __m128i*)(ptr + 4))); // a1 b1 c1 d1\n    v_uint32x4 u2(_mm_loadu_si128((const __m128i*)(ptr + 8))); // a2 b2 c2 d2\n    v_uint32x4 u3(_mm_loadu_si128((const __m128i*)(ptr + 12))); // a3 b3 c3 d3\n\n    v_transpose4x4(u0, u1, u2, u3, a, b, c, d);\n}\n\ninline void v_store_interleave( uchar* ptr, const v_uint8x16& a, const v_uint8x16& b,\n                                const v_uint8x16& c )\n{\n    __m128i z = _mm_setzero_si128();\n    __m128i ab0 = _mm_unpacklo_epi8(a.val, b.val);\n    __m128i ab1 = _mm_unpackhi_epi8(a.val, b.val);\n    __m128i c0 = _mm_unpacklo_epi8(c.val, z);\n    __m128i c1 = _mm_unpackhi_epi8(c.val, z);\n\n    __m128i p00 = _mm_unpacklo_epi16(ab0, c0);\n    __m128i p01 = _mm_unpackhi_epi16(ab0, c0);\n    __m128i p02 = _mm_unpacklo_epi16(ab1, c1);\n    __m128i p03 = _mm_unpackhi_epi16(ab1, c1);\n\n    __m128i p10 = _mm_unpacklo_epi32(p00, p01);\n    __m128i p11 = _mm_unpackhi_epi32(p00, p01);\n    __m128i p12 = _mm_unpacklo_epi32(p02, p03);\n    __m128i p13 = _mm_unpackhi_epi32(p02, p03);\n\n    __m128i p20 = _mm_unpacklo_epi64(p10, p11);\n    __m128i p21 = _mm_unpackhi_epi64(p10, p11);\n    __m128i p22 = _mm_unpacklo_epi64(p12, p13);\n    __m128i p23 = _mm_unpackhi_epi64(p12, p13);\n\n    p20 = _mm_slli_si128(p20, 1);\n    p22 = _mm_slli_si128(p22, 1);\n\n    __m128i p30 = _mm_slli_epi64(_mm_unpacklo_epi32(p20, p21), 8);\n    __m128i p31 = _mm_srli_epi64(_mm_unpackhi_epi32(p20, p21), 8);\n    __m128i p32 = _mm_slli_epi64(_mm_unpacklo_epi32(p22, p23), 8);\n    __m128i p33 = _mm_srli_epi64(_mm_unpackhi_epi32(p22, p23), 8);\n\n    __m128i p40 = _mm_unpacklo_epi64(p30, p31);\n    __m128i p41 = _mm_unpackhi_epi64(p30, p31);\n    __m128i p42 = _mm_unpacklo_epi64(p32, p33);\n    __m128i p43 = _mm_unpackhi_epi64(p32, p33);\n\n    __m128i v0 = _mm_or_si128(_mm_srli_si128(p40, 2), _mm_slli_si128(p41, 10));\n    __m128i v1 = _mm_or_si128(_mm_srli_si128(p41, 6), _mm_slli_si128(p42, 6));\n    __m128i v2 = _mm_or_si128(_mm_srli_si128(p42, 10), _mm_slli_si128(p43, 2));\n\n    _mm_storeu_si128((__m128i*)(ptr), v0);\n    _mm_storeu_si128((__m128i*)(ptr + 16), v1);\n    _mm_storeu_si128((__m128i*)(ptr + 32), v2);\n}\n\ninline void v_store_interleave( uchar* ptr, const v_uint8x16& a, const v_uint8x16& b,\n                                const v_uint8x16& c, const v_uint8x16& d)\n{\n    // a0 a1 a2 a3 ....\n    // b0 b1 b2 b3 ....\n    // c0 c1 c2 c3 ....\n    // d0 d1 d2 d3 ....\n    __m128i u0 = _mm_unpacklo_epi8(a.val, c.val); // a0 c0 a1 c1 ...\n    __m128i u1 = _mm_unpackhi_epi8(a.val, c.val); // a8 c8 a9 c9 ...\n    __m128i u2 = _mm_unpacklo_epi8(b.val, d.val); // b0 d0 b1 d1 ...\n    __m128i u3 = _mm_unpackhi_epi8(b.val, d.val); // b8 d8 b9 d9 ...\n\n    __m128i v0 = _mm_unpacklo_epi8(u0, u2); // a0 b0 c0 d0 ...\n    __m128i v1 = _mm_unpacklo_epi8(u1, u3); // a8 b8 c8 d8 ...\n    __m128i v2 = _mm_unpackhi_epi8(u0, u2); // a4 b4 c4 d4 ...\n    __m128i v3 = _mm_unpackhi_epi8(u1, u3); // a12 b12 c12 d12 ...\n\n    _mm_storeu_si128((__m128i*)ptr, v0);\n    _mm_storeu_si128((__m128i*)(ptr + 16), v2);\n    _mm_storeu_si128((__m128i*)(ptr + 32), v1);\n    _mm_storeu_si128((__m128i*)(ptr + 48), v3);\n}\n\ninline void v_store_interleave( ushort* ptr, const v_uint16x8& a,\n                                const v_uint16x8& b,\n                                const v_uint16x8& c )\n{\n    __m128i z = _mm_setzero_si128();\n    __m128i ab0 = _mm_unpacklo_epi16(a.val, b.val);\n    __m128i ab1 = _mm_unpackhi_epi16(a.val, b.val);\n    __m128i c0 = _mm_unpacklo_epi16(c.val, z);\n    __m128i c1 = _mm_unpackhi_epi16(c.val, z);\n\n    __m128i p10 = _mm_unpacklo_epi32(ab0, c0);\n    __m128i p11 = _mm_unpackhi_epi32(ab0, c0);\n    __m128i p12 = _mm_unpacklo_epi32(ab1, c1);\n    __m128i p13 = _mm_unpackhi_epi32(ab1, c1);\n\n    __m128i p20 = _mm_unpacklo_epi64(p10, p11);\n    __m128i p21 = _mm_unpackhi_epi64(p10, p11);\n    __m128i p22 = _mm_unpacklo_epi64(p12, p13);\n    __m128i p23 = _mm_unpackhi_epi64(p12, p13);\n\n    p20 = _mm_slli_si128(p20, 2);\n    p22 = _mm_slli_si128(p22, 2);\n\n    __m128i p30 = _mm_unpacklo_epi64(p20, p21);\n    __m128i p31 = _mm_unpackhi_epi64(p20, p21);\n    __m128i p32 = _mm_unpacklo_epi64(p22, p23);\n    __m128i p33 = _mm_unpackhi_epi64(p22, p23);\n\n    __m128i v0 = _mm_or_si128(_mm_srli_si128(p30, 2), _mm_slli_si128(p31, 10));\n    __m128i v1 = _mm_or_si128(_mm_srli_si128(p31, 6), _mm_slli_si128(p32, 6));\n    __m128i v2 = _mm_or_si128(_mm_srli_si128(p32, 10), _mm_slli_si128(p33, 2));\n\n    _mm_storeu_si128((__m128i*)(ptr), v0);\n    _mm_storeu_si128((__m128i*)(ptr + 8), v1);\n    _mm_storeu_si128((__m128i*)(ptr + 16), v2);\n}\n\ninline void v_store_interleave( ushort* ptr, const v_uint16x8& a, const v_uint16x8& b,\n                                const v_uint16x8& c, const v_uint16x8& d)\n{\n    // a0 a1 a2 a3 ....\n    // b0 b1 b2 b3 ....\n    // c0 c1 c2 c3 ....\n    // d0 d1 d2 d3 ....\n    __m128i u0 = _mm_unpacklo_epi16(a.val, c.val); // a0 c0 a1 c1 ...\n    __m128i u1 = _mm_unpackhi_epi16(a.val, c.val); // a4 c4 a5 c5 ...\n    __m128i u2 = _mm_unpacklo_epi16(b.val, d.val); // b0 d0 b1 d1 ...\n    __m128i u3 = _mm_unpackhi_epi16(b.val, d.val); // b4 d4 b5 d5 ...\n\n    __m128i v0 = _mm_unpacklo_epi16(u0, u2); // a0 b0 c0 d0 ...\n    __m128i v1 = _mm_unpacklo_epi16(u1, u3); // a4 b4 c4 d4 ...\n    __m128i v2 = _mm_unpackhi_epi16(u0, u2); // a2 b2 c2 d2 ...\n    __m128i v3 = _mm_unpackhi_epi16(u1, u3); // a6 b6 c6 d6 ...\n\n    _mm_storeu_si128((__m128i*)ptr, v0);\n    _mm_storeu_si128((__m128i*)(ptr + 8), v2);\n    _mm_storeu_si128((__m128i*)(ptr + 16), v1);\n    _mm_storeu_si128((__m128i*)(ptr + 24), v3);\n}\n\ninline void v_store_interleave( unsigned* ptr, const v_uint32x4& a, const v_uint32x4& b,\n                                const v_uint32x4& c )\n{\n    v_uint32x4 z = v_setzero_u32(), u0, u1, u2, u3;\n    v_transpose4x4(a, b, c, z, u0, u1, u2, u3);\n\n    __m128i v0 = _mm_or_si128(u0.val, _mm_slli_si128(u1.val, 12));\n    __m128i v1 = _mm_or_si128(_mm_srli_si128(u1.val, 4), _mm_slli_si128(u2.val, 8));\n    __m128i v2 = _mm_or_si128(_mm_srli_si128(u2.val, 8), _mm_slli_si128(u3.val, 4));\n\n    _mm_storeu_si128((__m128i*)ptr, v0);\n    _mm_storeu_si128((__m128i*)(ptr + 4), v1);\n    _mm_storeu_si128((__m128i*)(ptr + 8), v2);\n}\n\ninline void v_store_interleave(unsigned* ptr, const v_uint32x4& a, const v_uint32x4& b,\n                               const v_uint32x4& c, const v_uint32x4& d)\n{\n    v_uint32x4 t0, t1, t2, t3;\n    v_transpose4x4(a, b, c, d, t0, t1, t2, t3);\n    v_store(ptr, t0);\n    v_store(ptr + 4, t1);\n    v_store(ptr + 8, t2);\n    v_store(ptr + 12, t3);\n}\n\n#define OPENCV_HAL_IMPL_SSE_LOADSTORE_INTERLEAVE(_Tpvec, _Tp, suffix, _Tpuvec, _Tpu, usuffix) \\\ninline void v_load_deinterleave( const _Tp* ptr, _Tpvec& a0, \\\n                                 _Tpvec& b0, _Tpvec& c0 ) \\\n{ \\\n    _Tpuvec a1, b1, c1; \\\n    v_load_deinterleave((const _Tpu*)ptr, a1, b1, c1); \\\n    a0 = v_reinterpret_as_##suffix(a1); \\\n    b0 = v_reinterpret_as_##suffix(b1); \\\n    c0 = v_reinterpret_as_##suffix(c1); \\\n} \\\ninline void v_load_deinterleave( const _Tp* ptr, _Tpvec& a0, \\\n                                 _Tpvec& b0, _Tpvec& c0, _Tpvec& d0 ) \\\n{ \\\n    _Tpuvec a1, b1, c1, d1; \\\n    v_load_deinterleave((const _Tpu*)ptr, a1, b1, c1, d1); \\\n    a0 = v_reinterpret_as_##suffix(a1); \\\n    b0 = v_reinterpret_as_##suffix(b1); \\\n    c0 = v_reinterpret_as_##suffix(c1); \\\n    d0 = v_reinterpret_as_##suffix(d1); \\\n} \\\ninline void v_store_interleave( _Tp* ptr, const _Tpvec& a0, \\\n                               const _Tpvec& b0, const _Tpvec& c0 ) \\\n{ \\\n    _Tpuvec a1 = v_reinterpret_as_##usuffix(a0); \\\n    _Tpuvec b1 = v_reinterpret_as_##usuffix(b0); \\\n    _Tpuvec c1 = v_reinterpret_as_##usuffix(c0); \\\n    v_store_interleave((_Tpu*)ptr, a1, b1, c1); \\\n} \\\ninline void v_store_interleave( _Tp* ptr, const _Tpvec& a0, const _Tpvec& b0, \\\n                               const _Tpvec& c0, const _Tpvec& d0 ) \\\n{ \\\n    _Tpuvec a1 = v_reinterpret_as_##usuffix(a0); \\\n    _Tpuvec b1 = v_reinterpret_as_##usuffix(b0); \\\n    _Tpuvec c1 = v_reinterpret_as_##usuffix(c0); \\\n    _Tpuvec d1 = v_reinterpret_as_##usuffix(d0); \\\n    v_store_interleave((_Tpu*)ptr, a1, b1, c1, d1); \\\n}\n\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INTERLEAVE(v_int8x16, schar, s8, v_uint8x16, uchar, u8)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INTERLEAVE(v_int16x8, short, s16, v_uint16x8, ushort, u16)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INTERLEAVE(v_int32x4, int, s32, v_uint32x4, unsigned, u32)\nOPENCV_HAL_IMPL_SSE_LOADSTORE_INTERLEAVE(v_float32x4, float, f32, v_uint32x4, unsigned, u32)\n\ninline v_float32x4 v_cvt_f32(const v_int32x4& a)\n{\n    return v_float32x4(_mm_cvtepi32_ps(a.val));\n}\n\ninline v_float32x4 v_cvt_f32(const v_float64x2& a)\n{\n    return v_float32x4(_mm_cvtpd_ps(a.val));\n}\n\ninline v_float64x2 v_cvt_f64(const v_int32x4& a)\n{\n    return v_float64x2(_mm_cvtepi32_pd(a.val));\n}\n\ninline v_float64x2 v_cvt_f64(const v_float32x4& a)\n{\n    return v_float64x2(_mm_cvtps_pd(a.val));\n}\n\n//! @endcond\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/ippasync.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2015, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_IPPASYNC_HPP__\n#define __OPENCV_CORE_IPPASYNC_HPP__\n\n#ifdef HAVE_IPP_A\n\n#include \"opencv2/core.hpp\"\n#include <ipp_async_op.h>\n#include <ipp_async_accel.h>\n\nnamespace cv\n{\n\nnamespace hpp\n{\n\n/** @addtogroup core_ipp\nThis section describes conversion between OpenCV and [Intel&reg; IPP Asynchronous\nC/C++](http://software.intel.com/en-us/intel-ipp-preview) library. [Getting Started\nGuide](http://registrationcenter.intel.com/irc_nas/3727/ipp_async_get_started.htm) help you to\ninstall the library, configure header and library build paths.\n */\n//! @{\n\n    //! convert OpenCV data type to hppDataType\n    inline int toHppType(const int cvType)\n    {\n        int depth = CV_MAT_DEPTH(cvType);\n        int hppType = depth == CV_8U ? HPP_DATA_TYPE_8U :\n                     depth == CV_16U ? HPP_DATA_TYPE_16U :\n                     depth == CV_16S ? HPP_DATA_TYPE_16S :\n                     depth == CV_32S ? HPP_DATA_TYPE_32S :\n                     depth == CV_32F ? HPP_DATA_TYPE_32F :\n                     depth == CV_64F ? HPP_DATA_TYPE_64F : -1;\n        CV_Assert( hppType >= 0 );\n        return hppType;\n    }\n\n    //! convert hppDataType to OpenCV data type\n    inline int toCvType(const int hppType)\n    {\n        int cvType = hppType == HPP_DATA_TYPE_8U ? CV_8U :\n                    hppType == HPP_DATA_TYPE_16U ? CV_16U :\n                    hppType == HPP_DATA_TYPE_16S ? CV_16S :\n                    hppType == HPP_DATA_TYPE_32S ? CV_32S :\n                    hppType == HPP_DATA_TYPE_32F ? CV_32F :\n                    hppType == HPP_DATA_TYPE_64F ? CV_64F : -1;\n        CV_Assert( cvType >= 0 );\n        return cvType;\n    }\n\n    /** @brief Convert hppiMatrix to Mat.\n\n    This function allocates and initializes new matrix (if needed) that has the same size and type as\n    input matrix. Supports CV_8U, CV_16U, CV_16S, CV_32S, CV_32F, CV_64F.\n    @param src input hppiMatrix.\n    @param dst output matrix.\n    @param accel accelerator instance (see hpp::getHpp for the list of acceleration framework types).\n    @param cn number of channels.\n     */\n    inline void copyHppToMat(hppiMatrix* src, Mat& dst, hppAccel accel, int cn)\n    {\n        hppDataType type;\n        hpp32u width, height;\n        hppStatus sts;\n\n        if (src == NULL)\n            return dst.release();\n\n        sts = hppiInquireMatrix(src, &type, &width, &height);\n\n        CV_Assert( sts == HPP_STATUS_NO_ERROR);\n\n        int matType = CV_MAKETYPE(toCvType(type), cn);\n\n        CV_Assert(width%cn == 0);\n\n        width /= cn;\n\n        dst.create((int)height, (int)width, (int)matType);\n\n        size_t newSize = (size_t)(height*(hpp32u)(dst.step));\n\n        sts = hppiGetMatrixData(accel,src,(hpp32u)(dst.step),dst.data,&newSize);\n\n        CV_Assert( sts == HPP_STATUS_NO_ERROR);\n    }\n\n    /** @brief Create Mat from hppiMatrix.\n\n    This function allocates and initializes the Mat that has the same size and type as input matrix.\n    Supports CV_8U, CV_16U, CV_16S, CV_32S, CV_32F, CV_64F.\n    @param src input hppiMatrix.\n    @param accel accelerator instance (see hpp::getHpp for the list of acceleration framework types).\n    @param cn number of channels.\n    @sa howToUseIPPAconversion, hpp::copyHppToMat, hpp::getHpp.\n     */\n    inline Mat getMat(hppiMatrix* src, hppAccel accel, int cn)\n    {\n        Mat dst;\n        copyHppToMat(src, dst, accel, cn);\n        return dst;\n    }\n\n    /** @brief Create hppiMatrix from Mat.\n\n    This function allocates and initializes the hppiMatrix that has the same size and type as input\n    matrix, returns the hppiMatrix*.\n\n    If you want to use zero-copy for GPU you should to have 4KB aligned matrix data. See details\n    [hppiCreateSharedMatrix](http://software.intel.com/ru-ru/node/501697).\n\n    Supports CV_8U, CV_16U, CV_16S, CV_32S, CV_32F, CV_64F.\n\n    @note The hppiMatrix pointer to the image buffer in system memory refers to the src.data. Control\n    the lifetime of the matrix and don't change its data, if there is no special need.\n    @param src input matrix.\n    @param accel accelerator instance. Supports type:\n    -   **HPP_ACCEL_TYPE_CPU** - accelerated by optimized CPU instructions.\n    -   **HPP_ACCEL_TYPE_GPU** - accelerated by GPU programmable units or fixed-function\n        accelerators.\n    -   **HPP_ACCEL_TYPE_ANY** - any acceleration or no acceleration available.\n    @sa howToUseIPPAconversion, hpp::getMat\n     */\n    inline hppiMatrix* getHpp(const Mat& src, hppAccel accel)\n    {\n        int htype = toHppType(src.type());\n        int cn = src.channels();\n\n        CV_Assert(src.data);\n        hppAccelType accelType = hppQueryAccelType(accel);\n\n        if (accelType!=HPP_ACCEL_TYPE_CPU)\n        {\n            hpp32u pitch, size;\n            hppQueryMatrixAllocParams(accel, src.cols*cn, src.rows, htype, &pitch, &size);\n            if (pitch!=0 && size!=0)\n                if ((int)(src.data)%4096==0 && pitch==(hpp32u)(src.step))\n                {\n                    return hppiCreateSharedMatrix(htype, src.cols*cn, src.rows, src.data, pitch, size);\n                }\n        }\n\n        return hppiCreateMatrix(htype, src.cols*cn, src.rows, src.data, (hpp32s)(src.step));;\n    }\n\n//! @}\n}}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/mat.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_MAT_HPP__\n#define __OPENCV_CORE_MAT_HPP__\n\n#ifndef __cplusplus\n#  error mat.hpp header must be compiled as C++\n#endif\n\n#include \"opencv2/core/matx.hpp\"\n#include \"opencv2/core/types.hpp\"\n\n#include \"opencv2/core/bufferpool.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup core_basic\n//! @{\n\nenum { ACCESS_READ=1<<24, ACCESS_WRITE=1<<25,\n    ACCESS_RW=3<<24, ACCESS_MASK=ACCESS_RW, ACCESS_FAST=1<<26 };\n\nclass CV_EXPORTS _OutputArray;\n\n//////////////////////// Input/Output Array Arguments /////////////////////////////////\n\n/** @brief This is the proxy class for passing read-only input arrays into OpenCV functions.\n\nIt is defined as:\n@code\n    typedef const _InputArray& InputArray;\n@endcode\nwhere _InputArray is a class that can be constructed from `Mat`, `Mat_<T>`, `Matx<T, m, n>`,\n`std::vector<T>`, `std::vector<std::vector<T> >` or `std::vector<Mat>`. It can also be constructed\nfrom a matrix expression.\n\nSince this is mostly implementation-level class, and its interface may change in future versions, we\ndo not describe it in details. There are a few key things, though, that should be kept in mind:\n\n-   When you see in the reference manual or in OpenCV source code a function that takes\n    InputArray, it means that you can actually pass `Mat`, `Matx`, `vector<T>` etc. (see above the\n    complete list).\n-   Optional input arguments: If some of the input arrays may be empty, pass cv::noArray() (or\n    simply cv::Mat() as you probably did before).\n-   The class is designed solely for passing parameters. That is, normally you *should not*\n    declare class members, local and global variables of this type.\n-   If you want to design your own function or a class method that can operate of arrays of\n    multiple types, you can use InputArray (or OutputArray) for the respective parameters. Inside\n    a function you should use _InputArray::getMat() method to construct a matrix header for the\n    array (without copying data). _InputArray::kind() can be used to distinguish Mat from\n    `vector<>` etc., but normally it is not needed.\n\nHere is how you can use a function that takes InputArray :\n@code\n    std::vector<Point2f> vec;\n    // points or a circle\n    for( int i = 0; i < 30; i++ )\n        vec.push_back(Point2f((float)(100 + 30*cos(i*CV_PI*2/5)),\n                              (float)(100 - 30*sin(i*CV_PI*2/5))));\n    cv::transform(vec, vec, cv::Matx23f(0.707, -0.707, 10, 0.707, 0.707, 20));\n@endcode\nThat is, we form an STL vector containing points, and apply in-place affine transformation to the\nvector using the 2x3 matrix created inline as `Matx<float, 2, 3>` instance.\n\nHere is how such a function can be implemented (for simplicity, we implement a very specific case of\nit, according to the assertion statement inside) :\n@code\n    void myAffineTransform(InputArray _src, OutputArray _dst, InputArray _m)\n    {\n        // get Mat headers for input arrays. This is O(1) operation,\n        // unless _src and/or _m are matrix expressions.\n        Mat src = _src.getMat(), m = _m.getMat();\n        CV_Assert( src.type() == CV_32FC2 && m.type() == CV_32F && m.size() == Size(3, 2) );\n\n        // [re]create the output array so that it has the proper size and type.\n        // In case of Mat it calls Mat::create, in case of STL vector it calls vector::resize.\n        _dst.create(src.size(), src.type());\n        Mat dst = _dst.getMat();\n\n        for( int i = 0; i < src.rows; i++ )\n            for( int j = 0; j < src.cols; j++ )\n            {\n                Point2f pt = src.at<Point2f>(i, j);\n                dst.at<Point2f>(i, j) = Point2f(m.at<float>(0, 0)*pt.x +\n                                                m.at<float>(0, 1)*pt.y +\n                                                m.at<float>(0, 2),\n                                                m.at<float>(1, 0)*pt.x +\n                                                m.at<float>(1, 1)*pt.y +\n                                                m.at<float>(1, 2));\n            }\n    }\n@endcode\nThere is another related type, InputArrayOfArrays, which is currently defined as a synonym for\nInputArray:\n@code\n    typedef InputArray InputArrayOfArrays;\n@endcode\nIt denotes function arguments that are either vectors of vectors or vectors of matrices. A separate\nsynonym is needed to generate Python/Java etc. wrappers properly. At the function implementation\nlevel their use is similar, but _InputArray::getMat(idx) should be used to get header for the\nidx-th component of the outer vector and _InputArray::size().area() should be used to find the\nnumber of components (vectors/matrices) of the outer vector.\n */\nclass CV_EXPORTS _InputArray\n{\npublic:\n    enum {\n        KIND_SHIFT = 16,\n        FIXED_TYPE = 0x8000 << KIND_SHIFT,\n        FIXED_SIZE = 0x4000 << KIND_SHIFT,\n        KIND_MASK = 31 << KIND_SHIFT,\n\n        NONE              = 0 << KIND_SHIFT,\n        MAT               = 1 << KIND_SHIFT,\n        MATX              = 2 << KIND_SHIFT,\n        STD_VECTOR        = 3 << KIND_SHIFT,\n        STD_VECTOR_VECTOR = 4 << KIND_SHIFT,\n        STD_VECTOR_MAT    = 5 << KIND_SHIFT,\n        EXPR              = 6 << KIND_SHIFT,\n        OPENGL_BUFFER     = 7 << KIND_SHIFT,\n        CUDA_HOST_MEM     = 8 << KIND_SHIFT,\n        CUDA_GPU_MAT      = 9 << KIND_SHIFT,\n        UMAT              =10 << KIND_SHIFT,\n        STD_VECTOR_UMAT   =11 << KIND_SHIFT,\n        STD_BOOL_VECTOR   =12 << KIND_SHIFT,\n        STD_VECTOR_CUDA_GPU_MAT = 13 << KIND_SHIFT\n    };\n\n    _InputArray();\n    _InputArray(int _flags, void* _obj);\n    _InputArray(const Mat& m);\n    _InputArray(const MatExpr& expr);\n    _InputArray(const std::vector<Mat>& vec);\n    template<typename _Tp> _InputArray(const Mat_<_Tp>& m);\n    template<typename _Tp> _InputArray(const std::vector<_Tp>& vec);\n    _InputArray(const std::vector<bool>& vec);\n    template<typename _Tp> _InputArray(const std::vector<std::vector<_Tp> >& vec);\n    template<typename _Tp> _InputArray(const std::vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _InputArray(const _Tp* vec, int n);\n    template<typename _Tp, int m, int n> _InputArray(const Matx<_Tp, m, n>& matx);\n    _InputArray(const double& val);\n    _InputArray(const cuda::GpuMat& d_mat);\n    _InputArray(const std::vector<cuda::GpuMat>& d_mat_array);\n    _InputArray(const ogl::Buffer& buf);\n    _InputArray(const cuda::HostMem& cuda_mem);\n    template<typename _Tp> _InputArray(const cudev::GpuMat_<_Tp>& m);\n    _InputArray(const UMat& um);\n    _InputArray(const std::vector<UMat>& umv);\n\n    Mat getMat(int idx=-1) const;\n    Mat getMat_(int idx=-1) const;\n    UMat getUMat(int idx=-1) const;\n    void getMatVector(std::vector<Mat>& mv) const;\n    void getUMatVector(std::vector<UMat>& umv) const;\n    void getGpuMatVector(std::vector<cuda::GpuMat>& gpumv) const;\n    cuda::GpuMat getGpuMat() const;\n    ogl::Buffer getOGlBuffer() const;\n\n    int getFlags() const;\n    void* getObj() const;\n    Size getSz() const;\n\n    int kind() const;\n    int dims(int i=-1) const;\n    int cols(int i=-1) const;\n    int rows(int i=-1) const;\n    Size size(int i=-1) const;\n    int sizend(int* sz, int i=-1) const;\n    bool sameSize(const _InputArray& arr) const;\n    size_t total(int i=-1) const;\n    int type(int i=-1) const;\n    int depth(int i=-1) const;\n    int channels(int i=-1) const;\n    bool isContinuous(int i=-1) const;\n    bool isSubmatrix(int i=-1) const;\n    bool empty() const;\n    void copyTo(const _OutputArray& arr) const;\n    void copyTo(const _OutputArray& arr, const _InputArray & mask) const;\n    size_t offset(int i=-1) const;\n    size_t step(int i=-1) const;\n    bool isMat() const;\n    bool isUMat() const;\n    bool isMatVector() const;\n    bool isUMatVector() const;\n    bool isMatx() const;\n    bool isVector() const;\n    bool isGpuMatVector() const;\n    ~_InputArray();\n\nprotected:\n    int flags;\n    void* obj;\n    Size sz;\n\n    void init(int _flags, const void* _obj);\n    void init(int _flags, const void* _obj, Size _sz);\n};\n\n\n/** @brief This type is very similar to InputArray except that it is used for input/output and output function\nparameters.\n\nJust like with InputArray, OpenCV users should not care about OutputArray, they just pass `Mat`,\n`vector<T>` etc. to the functions. The same limitation as for `InputArray`: *Do not explicitly\ncreate OutputArray instances* applies here too.\n\nIf you want to make your function polymorphic (i.e. accept different arrays as output parameters),\nit is also not very difficult. Take the sample above as the reference. Note that\n_OutputArray::create() needs to be called before _OutputArray::getMat(). This way you guarantee\nthat the output array is properly allocated.\n\nOptional output parameters. If you do not need certain output array to be computed and returned to\nyou, pass cv::noArray(), just like you would in the case of optional input array. At the\nimplementation level, use _OutputArray::needed() to check if certain output array needs to be\ncomputed or not.\n\nThere are several synonyms for OutputArray that are used to assist automatic Python/Java/... wrapper\ngenerators:\n@code\n    typedef OutputArray OutputArrayOfArrays;\n    typedef OutputArray InputOutputArray;\n    typedef OutputArray InputOutputArrayOfArrays;\n@endcode\n */\nclass CV_EXPORTS _OutputArray : public _InputArray\n{\npublic:\n    enum\n    {\n        DEPTH_MASK_8U = 1 << CV_8U,\n        DEPTH_MASK_8S = 1 << CV_8S,\n        DEPTH_MASK_16U = 1 << CV_16U,\n        DEPTH_MASK_16S = 1 << CV_16S,\n        DEPTH_MASK_32S = 1 << CV_32S,\n        DEPTH_MASK_32F = 1 << CV_32F,\n        DEPTH_MASK_64F = 1 << CV_64F,\n        DEPTH_MASK_ALL = (DEPTH_MASK_64F<<1)-1,\n        DEPTH_MASK_ALL_BUT_8S = DEPTH_MASK_ALL & ~DEPTH_MASK_8S,\n        DEPTH_MASK_FLT = DEPTH_MASK_32F + DEPTH_MASK_64F\n    };\n\n    _OutputArray();\n    _OutputArray(int _flags, void* _obj);\n    _OutputArray(Mat& m);\n    _OutputArray(std::vector<Mat>& vec);\n    _OutputArray(cuda::GpuMat& d_mat);\n    _OutputArray(std::vector<cuda::GpuMat>& d_mat);\n    _OutputArray(ogl::Buffer& buf);\n    _OutputArray(cuda::HostMem& cuda_mem);\n    template<typename _Tp> _OutputArray(cudev::GpuMat_<_Tp>& m);\n    template<typename _Tp> _OutputArray(std::vector<_Tp>& vec);\n    _OutputArray(std::vector<bool>& vec);\n    template<typename _Tp> _OutputArray(std::vector<std::vector<_Tp> >& vec);\n    template<typename _Tp> _OutputArray(std::vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _OutputArray(Mat_<_Tp>& m);\n    template<typename _Tp> _OutputArray(_Tp* vec, int n);\n    template<typename _Tp, int m, int n> _OutputArray(Matx<_Tp, m, n>& matx);\n    _OutputArray(UMat& m);\n    _OutputArray(std::vector<UMat>& vec);\n\n    _OutputArray(const Mat& m);\n    _OutputArray(const std::vector<Mat>& vec);\n    _OutputArray(const cuda::GpuMat& d_mat);\n    _OutputArray(const std::vector<cuda::GpuMat>& d_mat);\n    _OutputArray(const ogl::Buffer& buf);\n    _OutputArray(const cuda::HostMem& cuda_mem);\n    template<typename _Tp> _OutputArray(const cudev::GpuMat_<_Tp>& m);\n    template<typename _Tp> _OutputArray(const std::vector<_Tp>& vec);\n    template<typename _Tp> _OutputArray(const std::vector<std::vector<_Tp> >& vec);\n    template<typename _Tp> _OutputArray(const std::vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _OutputArray(const Mat_<_Tp>& m);\n    template<typename _Tp> _OutputArray(const _Tp* vec, int n);\n    template<typename _Tp, int m, int n> _OutputArray(const Matx<_Tp, m, n>& matx);\n    _OutputArray(const UMat& m);\n    _OutputArray(const std::vector<UMat>& vec);\n\n    bool fixedSize() const;\n    bool fixedType() const;\n    bool needed() const;\n    Mat& getMatRef(int i=-1) const;\n    UMat& getUMatRef(int i=-1) const;\n    cuda::GpuMat& getGpuMatRef() const;\n    std::vector<cuda::GpuMat>& getGpuMatVecRef() const;\n    ogl::Buffer& getOGlBufferRef() const;\n    cuda::HostMem& getHostMemRef() const;\n    void create(Size sz, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;\n    void create(int rows, int cols, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;\n    void create(int dims, const int* size, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;\n    void createSameSize(const _InputArray& arr, int mtype) const;\n    void release() const;\n    void clear() const;\n    void setTo(const _InputArray& value, const _InputArray & mask = _InputArray()) const;\n\n    void assign(const UMat& u) const;\n    void assign(const Mat& m) const;\n};\n\n\nclass CV_EXPORTS _InputOutputArray : public _OutputArray\n{\npublic:\n    _InputOutputArray();\n    _InputOutputArray(int _flags, void* _obj);\n    _InputOutputArray(Mat& m);\n    _InputOutputArray(std::vector<Mat>& vec);\n    _InputOutputArray(cuda::GpuMat& d_mat);\n    _InputOutputArray(ogl::Buffer& buf);\n    _InputOutputArray(cuda::HostMem& cuda_mem);\n    template<typename _Tp> _InputOutputArray(cudev::GpuMat_<_Tp>& m);\n    template<typename _Tp> _InputOutputArray(std::vector<_Tp>& vec);\n    _InputOutputArray(std::vector<bool>& vec);\n    template<typename _Tp> _InputOutputArray(std::vector<std::vector<_Tp> >& vec);\n    template<typename _Tp> _InputOutputArray(std::vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _InputOutputArray(Mat_<_Tp>& m);\n    template<typename _Tp> _InputOutputArray(_Tp* vec, int n);\n    template<typename _Tp, int m, int n> _InputOutputArray(Matx<_Tp, m, n>& matx);\n    _InputOutputArray(UMat& m);\n    _InputOutputArray(std::vector<UMat>& vec);\n\n    _InputOutputArray(const Mat& m);\n    _InputOutputArray(const std::vector<Mat>& vec);\n    _InputOutputArray(const cuda::GpuMat& d_mat);\n    _InputOutputArray(const std::vector<cuda::GpuMat>& d_mat);\n    _InputOutputArray(const ogl::Buffer& buf);\n    _InputOutputArray(const cuda::HostMem& cuda_mem);\n    template<typename _Tp> _InputOutputArray(const cudev::GpuMat_<_Tp>& m);\n    template<typename _Tp> _InputOutputArray(const std::vector<_Tp>& vec);\n    template<typename _Tp> _InputOutputArray(const std::vector<std::vector<_Tp> >& vec);\n    template<typename _Tp> _InputOutputArray(const std::vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _InputOutputArray(const Mat_<_Tp>& m);\n    template<typename _Tp> _InputOutputArray(const _Tp* vec, int n);\n    template<typename _Tp, int m, int n> _InputOutputArray(const Matx<_Tp, m, n>& matx);\n    _InputOutputArray(const UMat& m);\n    _InputOutputArray(const std::vector<UMat>& vec);\n};\n\ntypedef const _InputArray& InputArray;\ntypedef InputArray InputArrayOfArrays;\ntypedef const _OutputArray& OutputArray;\ntypedef OutputArray OutputArrayOfArrays;\ntypedef const _InputOutputArray& InputOutputArray;\ntypedef InputOutputArray InputOutputArrayOfArrays;\n\nCV_EXPORTS InputOutputArray noArray();\n\n/////////////////////////////////// MatAllocator //////////////////////////////////////\n\n//! Usage flags for allocator\nenum UMatUsageFlags\n{\n    USAGE_DEFAULT = 0,\n\n    // buffer allocation policy is platform and usage specific\n    USAGE_ALLOCATE_HOST_MEMORY = 1 << 0,\n    USAGE_ALLOCATE_DEVICE_MEMORY = 1 << 1,\n    USAGE_ALLOCATE_SHARED_MEMORY = 1 << 2, // It is not equal to: USAGE_ALLOCATE_HOST_MEMORY | USAGE_ALLOCATE_DEVICE_MEMORY\n\n    __UMAT_USAGE_FLAGS_32BIT = 0x7fffffff // Binary compatibility hint\n};\n\nstruct CV_EXPORTS UMatData;\n\n/** @brief  Custom array allocator\n*/\nclass CV_EXPORTS MatAllocator\n{\npublic:\n    MatAllocator() {}\n    virtual ~MatAllocator() {}\n\n    // let's comment it off for now to detect and fix all the uses of allocator\n    //virtual void allocate(int dims, const int* sizes, int type, int*& refcount,\n    //                      uchar*& datastart, uchar*& data, size_t* step) = 0;\n    //virtual void deallocate(int* refcount, uchar* datastart, uchar* data) = 0;\n    virtual UMatData* allocate(int dims, const int* sizes, int type,\n                               void* data, size_t* step, int flags, UMatUsageFlags usageFlags) const = 0;\n    virtual bool allocate(UMatData* data, int accessflags, UMatUsageFlags usageFlags) const = 0;\n    virtual void deallocate(UMatData* data) const = 0;\n    virtual void map(UMatData* data, int accessflags) const;\n    virtual void unmap(UMatData* data) const;\n    virtual void download(UMatData* data, void* dst, int dims, const size_t sz[],\n                          const size_t srcofs[], const size_t srcstep[],\n                          const size_t dststep[]) const;\n    virtual void upload(UMatData* data, const void* src, int dims, const size_t sz[],\n                        const size_t dstofs[], const size_t dststep[],\n                        const size_t srcstep[]) const;\n    virtual void copy(UMatData* srcdata, UMatData* dstdata, int dims, const size_t sz[],\n                      const size_t srcofs[], const size_t srcstep[],\n                      const size_t dstofs[], const size_t dststep[], bool sync) const;\n\n    // default implementation returns DummyBufferPoolController\n    virtual BufferPoolController* getBufferPoolController(const char* id = NULL) const;\n};\n\n\n//////////////////////////////// MatCommaInitializer //////////////////////////////////\n\n/** @brief  Comma-separated Matrix Initializer\n\n The class instances are usually not created explicitly.\n Instead, they are created on \"matrix << firstValue\" operator.\n\n The sample below initializes 2x2 rotation matrix:\n\n \\code\n double angle = 30, a = cos(angle*CV_PI/180), b = sin(angle*CV_PI/180);\n Mat R = (Mat_<double>(2,2) << a, -b, b, a);\n \\endcode\n*/\ntemplate<typename _Tp> class MatCommaInitializer_\n{\npublic:\n    //! the constructor, created by \"matrix << firstValue\" operator, where matrix is cv::Mat\n    MatCommaInitializer_(Mat_<_Tp>* _m);\n    //! the operator that takes the next value and put it to the matrix\n    template<typename T2> MatCommaInitializer_<_Tp>& operator , (T2 v);\n    //! another form of conversion operator\n    operator Mat_<_Tp>() const;\nprotected:\n    MatIterator_<_Tp> it;\n};\n\n\n/////////////////////////////////////// Mat ///////////////////////////////////////////\n\n// note that umatdata might be allocated together\n// with the matrix data, not as a separate object.\n// therefore, it does not have constructor or destructor;\n// it should be explicitly initialized using init().\nstruct CV_EXPORTS UMatData\n{\n    enum { COPY_ON_MAP=1, HOST_COPY_OBSOLETE=2,\n        DEVICE_COPY_OBSOLETE=4, TEMP_UMAT=8, TEMP_COPIED_UMAT=24,\n        USER_ALLOCATED=32, DEVICE_MEM_MAPPED=64};\n    UMatData(const MatAllocator* allocator);\n    ~UMatData();\n\n    // provide atomic access to the structure\n    void lock();\n    void unlock();\n\n    bool hostCopyObsolete() const;\n    bool deviceCopyObsolete() const;\n    bool deviceMemMapped() const;\n    bool copyOnMap() const;\n    bool tempUMat() const;\n    bool tempCopiedUMat() const;\n    void markHostCopyObsolete(bool flag);\n    void markDeviceCopyObsolete(bool flag);\n    void markDeviceMemMapped(bool flag);\n\n    const MatAllocator* prevAllocator;\n    const MatAllocator* currAllocator;\n    int urefcount;\n    int refcount;\n    uchar* data;\n    uchar* origdata;\n    size_t size;\n\n    int flags;\n    void* handle;\n    void* userdata;\n    int allocatorFlags_;\n    int mapcount;\n    UMatData* originalUMatData;\n};\n\n\nstruct CV_EXPORTS UMatDataAutoLock\n{\n    explicit UMatDataAutoLock(UMatData* u);\n    ~UMatDataAutoLock();\n    UMatData* u;\n};\n\n\nstruct CV_EXPORTS MatSize\n{\n    explicit MatSize(int* _p);\n    Size operator()() const;\n    const int& operator[](int i) const;\n    int& operator[](int i);\n    operator const int*() const;\n    bool operator == (const MatSize& sz) const;\n    bool operator != (const MatSize& sz) const;\n\n    int* p;\n};\n\nstruct CV_EXPORTS MatStep\n{\n    MatStep();\n    explicit MatStep(size_t s);\n    const size_t& operator[](int i) const;\n    size_t& operator[](int i);\n    operator size_t() const;\n    MatStep& operator = (size_t s);\n\n    size_t* p;\n    size_t buf[2];\nprotected:\n    MatStep& operator = (const MatStep&);\n};\n\n/** @example cout_mat.cpp\nAn example demonstrating the serial out capabilities of cv::Mat\n*/\n\n /** @brief n-dimensional dense array class\n\nThe class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It\ncan be used to store real or complex-valued vectors and matrices, grayscale or color images, voxel\nvolumes, vector fields, point clouds, tensors, histograms (though, very high-dimensional histograms\nmay be better stored in a SparseMat ). The data layout of the array `M` is defined by the array\n`M.step[]`, so that the address of element \\f$(i_0,...,i_{M.dims-1})\\f$, where \\f$0\\leq i_k<M.size[k]\\f$, is\ncomputed as:\n\\f[addr(M_{i_0,...,i_{M.dims-1}}) = M.data + M.step[0]*i_0 + M.step[1]*i_1 + ... + M.step[M.dims-1]*i_{M.dims-1}\\f]\nIn case of a 2-dimensional array, the above formula is reduced to:\n\\f[addr(M_{i,j}) = M.data + M.step[0]*i + M.step[1]*j\\f]\nNote that `M.step[i] >= M.step[i+1]` (in fact, `M.step[i] >= M.step[i+1]*M.size[i+1]` ). This means\nthat 2-dimensional matrices are stored row-by-row, 3-dimensional matrices are stored plane-by-plane,\nand so on. M.step[M.dims-1] is minimal and always equal to the element size M.elemSize() .\n\nSo, the data layout in Mat is fully compatible with CvMat, IplImage, and CvMatND types from OpenCV\n1.x. It is also compatible with the majority of dense array types from the standard toolkits and\nSDKs, such as Numpy (ndarray), Win32 (independent device bitmaps), and others, that is, with any\narray that uses *steps* (or *strides*) to compute the position of a pixel. Due to this\ncompatibility, it is possible to make a Mat header for user-allocated data and process it in-place\nusing OpenCV functions.\n\nThere are many different ways to create a Mat object. The most popular options are listed below:\n\n- Use the create(nrows, ncols, type) method or the similar Mat(nrows, ncols, type[, fillValue])\nconstructor. A new array of the specified size and type is allocated. type has the same meaning as\nin the cvCreateMat method. For example, CV_8UC1 means a 8-bit single-channel array, CV_32FC2\nmeans a 2-channel (complex) floating-point array, and so on.\n@code\n    // make a 7x7 complex matrix filled with 1+3j.\n    Mat M(7,7,CV_32FC2,Scalar(1,3));\n    // and now turn M to a 100x60 15-channel 8-bit matrix.\n    // The old content will be deallocated\n    M.create(100,60,CV_8UC(15));\n@endcode\nAs noted in the introduction to this chapter, create() allocates only a new array when the shape\nor type of the current array are different from the specified ones.\n\n- Create a multi-dimensional array:\n@code\n    // create a 100x100x100 8-bit array\n    int sz[] = {100, 100, 100};\n    Mat bigCube(3, sz, CV_8U, Scalar::all(0));\n@endcode\nIt passes the number of dimensions =1 to the Mat constructor but the created array will be\n2-dimensional with the number of columns set to 1. So, Mat::dims is always \\>= 2 (can also be 0\nwhen the array is empty).\n\n- Use a copy constructor or assignment operator where there can be an array or expression on the\nright side (see below). As noted in the introduction, the array assignment is an O(1) operation\nbecause it only copies the header and increases the reference counter. The Mat::clone() method can\nbe used to get a full (deep) copy of the array when you need it.\n\n- Construct a header for a part of another array. It can be a single row, single column, several\nrows, several columns, rectangular region in the array (called a *minor* in algebra) or a\ndiagonal. Such operations are also O(1) because the new header references the same data. You can\nactually modify a part of the array using this feature, for example:\n@code\n    // add the 5-th row, multiplied by 3 to the 3rd row\n    M.row(3) = M.row(3) + M.row(5)*3;\n    // now copy the 7-th column to the 1-st column\n    // M.col(1) = M.col(7); // this will not work\n    Mat M1 = M.col(1);\n    M.col(7).copyTo(M1);\n    // create a new 320x240 image\n    Mat img(Size(320,240),CV_8UC3);\n    // select a ROI\n    Mat roi(img, Rect(10,10,100,100));\n    // fill the ROI with (0,255,0) (which is green in RGB space);\n    // the original 320x240 image will be modified\n    roi = Scalar(0,255,0);\n@endcode\nDue to the additional datastart and dataend members, it is possible to compute a relative\nsub-array position in the main *container* array using locateROI():\n@code\n    Mat A = Mat::eye(10, 10, CV_32S);\n    // extracts A columns, 1 (inclusive) to 3 (exclusive).\n    Mat B = A(Range::all(), Range(1, 3));\n    // extracts B rows, 5 (inclusive) to 9 (exclusive).\n    // that is, C \\~ A(Range(5, 9), Range(1, 3))\n    Mat C = B(Range(5, 9), Range::all());\n    Size size; Point ofs;\n    C.locateROI(size, ofs);\n    // size will be (width=10,height=10) and the ofs will be (x=1, y=5)\n@endcode\nAs in case of whole matrices, if you need a deep copy, use the `clone()` method of the extracted\nsub-matrices.\n\n- Make a header for user-allocated data. It can be useful to do the following:\n    -# Process \"foreign\" data using OpenCV (for example, when you implement a DirectShow\\* filter or\n    a processing module for gstreamer, and so on). For example:\n    @code\n        void process_video_frame(const unsigned char* pixels,\n                                 int width, int height, int step)\n        {\n            Mat img(height, width, CV_8UC3, pixels, step);\n            GaussianBlur(img, img, Size(7,7), 1.5, 1.5);\n        }\n    @endcode\n    -# Quickly initialize small matrices and/or get a super-fast element access.\n    @code\n        double m[3][3] = {{a, b, c}, {d, e, f}, {g, h, i}};\n        Mat M = Mat(3, 3, CV_64F, m).inv();\n    @endcode\n    .\n    Partial yet very common cases of this *user-allocated data* case are conversions from CvMat and\n    IplImage to Mat. For this purpose, there is function cv::cvarrToMat taking pointers to CvMat or\n    IplImage and the optional flag indicating whether to copy the data or not.\n    @snippet samples/cpp/image.cpp iplimage\n\n- Use MATLAB-style array initializers, zeros(), ones(), eye(), for example:\n@code\n    // create a double-precision identity martix and add it to M.\n    M += Mat::eye(M.rows, M.cols, CV_64F);\n@endcode\n\n- Use a comma-separated initializer:\n@code\n    // create a 3x3 double-precision identity matrix\n    Mat M = (Mat_<double>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);\n@endcode\nWith this approach, you first call a constructor of the Mat class with the proper parameters, and\nthen you just put `<< operator` followed by comma-separated values that can be constants,\nvariables, expressions, and so on. Also, note the extra parentheses required to avoid compilation\nerrors.\n\nOnce the array is created, it is automatically managed via a reference-counting mechanism. If the\narray header is built on top of user-allocated data, you should handle the data by yourself. The\narray data is deallocated when no one points to it. If you want to release the data pointed by a\narray header before the array destructor is called, use Mat::release().\n\nThe next important thing to learn about the array class is element access. This manual already\ndescribed how to compute an address of each array element. Normally, you are not required to use the\nformula directly in the code. If you know the array element type (which can be retrieved using the\nmethod Mat::type() ), you can access the element \\f$M_{ij}\\f$ of a 2-dimensional array as:\n@code\n    M.at<double>(i,j) += 1.f;\n@endcode\nassuming that `M` is a double-precision floating-point array. There are several variants of the method\nat for a different number of dimensions.\n\nIf you need to process a whole row of a 2D array, the most efficient way is to get the pointer to\nthe row first, and then just use the plain C operator [] :\n@code\n    // compute sum of positive matrix elements\n    // (assuming that M isa double-precision matrix)\n    double sum=0;\n    for(int i = 0; i < M.rows; i++)\n    {\n        const double* Mi = M.ptr<double>(i);\n        for(int j = 0; j < M.cols; j++)\n            sum += std::max(Mi[j], 0.);\n    }\n@endcode\nSome operations, like the one above, do not actually depend on the array shape. They just process\nelements of an array one by one (or elements from multiple arrays that have the same coordinates,\nfor example, array addition). Such operations are called *element-wise*. It makes sense to check\nwhether all the input/output arrays are continuous, namely, have no gaps at the end of each row. If\nyes, process them as a long single row:\n@code\n    // compute the sum of positive matrix elements, optimized variant\n    double sum=0;\n    int cols = M.cols, rows = M.rows;\n    if(M.isContinuous())\n    {\n        cols *= rows;\n        rows = 1;\n    }\n    for(int i = 0; i < rows; i++)\n    {\n        const double* Mi = M.ptr<double>(i);\n        for(int j = 0; j < cols; j++)\n            sum += std::max(Mi[j], 0.);\n    }\n@endcode\nIn case of the continuous matrix, the outer loop body is executed just once. So, the overhead is\nsmaller, which is especially noticeable in case of small matrices.\n\nFinally, there are STL-style iterators that are smart enough to skip gaps between successive rows:\n@code\n    // compute sum of positive matrix elements, iterator-based variant\n    double sum=0;\n    MatConstIterator_<double> it = M.begin<double>(), it_end = M.end<double>();\n    for(; it != it_end; ++it)\n        sum += std::max(*it, 0.);\n@endcode\nThe matrix iterators are random-access iterators, so they can be passed to any STL algorithm,\nincluding std::sort().\n*/\nclass CV_EXPORTS Mat\n{\npublic:\n    /**\n    These are various constructors that form a matrix. As noted in the AutomaticAllocation, often\n    the default constructor is enough, and the proper matrix will be allocated by an OpenCV function.\n    The constructed matrix can further be assigned to another matrix or matrix expression or can be\n    allocated with Mat::create . In the former case, the old content is de-referenced.\n     */\n    Mat();\n\n    /** @overload\n    @param rows Number of rows in a 2D array.\n    @param cols Number of columns in a 2D array.\n    @param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or\n    CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.\n    */\n    Mat(int rows, int cols, int type);\n\n    /** @overload\n    @param size 2D array size: Size(cols, rows) . In the Size() constructor, the number of rows and the\n    number of columns go in the reverse order.\n    @param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or\n    CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.\n      */\n    Mat(Size size, int type);\n\n    /** @overload\n    @param rows Number of rows in a 2D array.\n    @param cols Number of columns in a 2D array.\n    @param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or\n    CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.\n    @param s An optional value to initialize each matrix element with. To set all the matrix elements to\n    the particular value after the construction, use the assignment operator\n    Mat::operator=(const Scalar& value) .\n    */\n    Mat(int rows, int cols, int type, const Scalar& s);\n\n    /** @overload\n    @param size 2D array size: Size(cols, rows) . In the Size() constructor, the number of rows and the\n    number of columns go in the reverse order.\n    @param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or\n    CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.\n    @param s An optional value to initialize each matrix element with. To set all the matrix elements to\n    the particular value after the construction, use the assignment operator\n    Mat::operator=(const Scalar& value) .\n      */\n    Mat(Size size, int type, const Scalar& s);\n\n    /** @overload\n    @param ndims Array dimensionality.\n    @param sizes Array of integers specifying an n-dimensional array shape.\n    @param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or\n    CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.\n    */\n    Mat(int ndims, const int* sizes, int type);\n\n    /** @overload\n    @param ndims Array dimensionality.\n    @param sizes Array of integers specifying an n-dimensional array shape.\n    @param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or\n    CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.\n    @param s An optional value to initialize each matrix element with. To set all the matrix elements to\n    the particular value after the construction, use the assignment operator\n    Mat::operator=(const Scalar& value) .\n    */\n    Mat(int ndims, const int* sizes, int type, const Scalar& s);\n\n    /** @overload\n    @param m Array that (as a whole or partly) is assigned to the constructed matrix. No data is copied\n    by these constructors. Instead, the header pointing to m data or its sub-array is constructed and\n    associated with it. The reference counter, if any, is incremented. So, when you modify the matrix\n    formed using such a constructor, you also modify the corresponding elements of m . If you want to\n    have an independent copy of the sub-array, use Mat::clone() .\n    */\n    Mat(const Mat& m);\n\n    /** @overload\n    @param rows Number of rows in a 2D array.\n    @param cols Number of columns in a 2D array.\n    @param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or\n    CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.\n    @param data Pointer to the user data. Matrix constructors that take data and step parameters do not\n    allocate matrix data. Instead, they just initialize the matrix header that points to the specified\n    data, which means that no data is copied. This operation is very efficient and can be used to\n    process external data using OpenCV functions. The external data is not automatically deallocated, so\n    you should take care of it.\n    @param step Number of bytes each matrix row occupies. The value should include the padding bytes at\n    the end of each row, if any. If the parameter is missing (set to AUTO_STEP ), no padding is assumed\n    and the actual step is calculated as cols*elemSize(). See Mat::elemSize.\n    */\n    Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP);\n\n    /** @overload\n    @param size 2D array size: Size(cols, rows) . In the Size() constructor, the number of rows and the\n    number of columns go in the reverse order.\n    @param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or\n    CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.\n    @param data Pointer to the user data. Matrix constructors that take data and step parameters do not\n    allocate matrix data. Instead, they just initialize the matrix header that points to the specified\n    data, which means that no data is copied. This operation is very efficient and can be used to\n    process external data using OpenCV functions. The external data is not automatically deallocated, so\n    you should take care of it.\n    @param step Number of bytes each matrix row occupies. The value should include the padding bytes at\n    the end of each row, if any. If the parameter is missing (set to AUTO_STEP ), no padding is assumed\n    and the actual step is calculated as cols*elemSize(). See Mat::elemSize.\n    */\n    Mat(Size size, int type, void* data, size_t step=AUTO_STEP);\n\n    /** @overload\n    @param ndims Array dimensionality.\n    @param sizes Array of integers specifying an n-dimensional array shape.\n    @param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or\n    CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.\n    @param data Pointer to the user data. Matrix constructors that take data and step parameters do not\n    allocate matrix data. Instead, they just initialize the matrix header that points to the specified\n    data, which means that no data is copied. This operation is very efficient and can be used to\n    process external data using OpenCV functions. The external data is not automatically deallocated, so\n    you should take care of it.\n    @param steps Array of ndims-1 steps in case of a multi-dimensional array (the last step is always\n    set to the element size). If not specified, the matrix is assumed to be continuous.\n    */\n    Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0);\n\n    /** @overload\n    @param m Array that (as a whole or partly) is assigned to the constructed matrix. No data is copied\n    by these constructors. Instead, the header pointing to m data or its sub-array is constructed and\n    associated with it. The reference counter, if any, is incremented. So, when you modify the matrix\n    formed using such a constructor, you also modify the corresponding elements of m . If you want to\n    have an independent copy of the sub-array, use Mat::clone() .\n    @param rowRange Range of the m rows to take. As usual, the range start is inclusive and the range\n    end is exclusive. Use Range::all() to take all the rows.\n    @param colRange Range of the m columns to take. Use Range::all() to take all the columns.\n    */\n    Mat(const Mat& m, const Range& rowRange, const Range& colRange=Range::all());\n\n    /** @overload\n    @param m Array that (as a whole or partly) is assigned to the constructed matrix. No data is copied\n    by these constructors. Instead, the header pointing to m data or its sub-array is constructed and\n    associated with it. The reference counter, if any, is incremented. So, when you modify the matrix\n    formed using such a constructor, you also modify the corresponding elements of m . If you want to\n    have an independent copy of the sub-array, use Mat::clone() .\n    @param roi Region of interest.\n    */\n    Mat(const Mat& m, const Rect& roi);\n\n    /** @overload\n    @param m Array that (as a whole or partly) is assigned to the constructed matrix. No data is copied\n    by these constructors. Instead, the header pointing to m data or its sub-array is constructed and\n    associated with it. The reference counter, if any, is incremented. So, when you modify the matrix\n    formed using such a constructor, you also modify the corresponding elements of m . If you want to\n    have an independent copy of the sub-array, use Mat::clone() .\n    @param ranges Array of selected ranges of m along each dimensionality.\n    */\n    Mat(const Mat& m, const Range* ranges);\n\n    /** @overload\n    @param vec STL vector whose elements form the matrix. The matrix has a single column and the number\n    of rows equal to the number of vector elements. Type of the matrix matches the type of vector\n    elements. The constructor can handle arbitrary types, for which there is a properly declared\n    DataType . This means that the vector elements must be primitive numbers or uni-type numerical\n    tuples of numbers. Mixed-type structures are not supported. The corresponding constructor is\n    explicit. Since STL vectors are not automatically converted to Mat instances, you should write\n    Mat(vec) explicitly. Unless you copy the data into the matrix ( copyData=true ), no new elements\n    will be added to the vector because it can potentially yield vector data reallocation, and, thus,\n    the matrix data pointer will be invalid.\n    @param copyData Flag to specify whether the underlying data of the STL vector should be copied\n    to (true) or shared with (false) the newly constructed matrix. When the data is copied, the\n    allocated buffer is managed using Mat reference counting mechanism. While the data is shared,\n    the reference counter is NULL, and you should not deallocate the data until the matrix is not\n    destructed.\n    */\n    template<typename _Tp> explicit Mat(const std::vector<_Tp>& vec, bool copyData=false);\n\n    /** @overload\n    */\n    template<typename _Tp, int n> explicit Mat(const Vec<_Tp, n>& vec, bool copyData=true);\n\n    /** @overload\n    */\n    template<typename _Tp, int m, int n> explicit Mat(const Matx<_Tp, m, n>& mtx, bool copyData=true);\n\n    /** @overload\n    */\n    template<typename _Tp> explicit Mat(const Point_<_Tp>& pt, bool copyData=true);\n\n    /** @overload\n    */\n    template<typename _Tp> explicit Mat(const Point3_<_Tp>& pt, bool copyData=true);\n\n    /** @overload\n    */\n    template<typename _Tp> explicit Mat(const MatCommaInitializer_<_Tp>& commaInitializer);\n\n    //! download data from GpuMat\n    explicit Mat(const cuda::GpuMat& m);\n\n    //! destructor - calls release()\n    ~Mat();\n\n    /** @brief assignment operators\n\n    These are available assignment operators. Since they all are very different, make sure to read the\n    operator parameters description.\n    @param m Assigned, right-hand-side matrix. Matrix assignment is an O(1) operation. This means that\n    no data is copied but the data is shared and the reference counter, if any, is incremented. Before\n    assigning new data, the old data is de-referenced via Mat::release .\n     */\n    Mat& operator = (const Mat& m);\n\n    /** @overload\n    @param expr Assigned matrix expression object. As opposite to the first form of the assignment\n    operation, the second form can reuse already allocated matrix if it has the right size and type to\n    fit the matrix expression result. It is automatically handled by the real function that the matrix\n    expressions is expanded to. For example, C=A+B is expanded to add(A, B, C), and add takes care of\n    automatic C reallocation.\n    */\n    Mat& operator = (const MatExpr& expr);\n\n    //! retrieve UMat from Mat\n    UMat getUMat(int accessFlags, UMatUsageFlags usageFlags = USAGE_DEFAULT) const;\n\n    /** @brief Creates a matrix header for the specified matrix row.\n\n    The method makes a new header for the specified matrix row and returns it. This is an O(1)\n    operation, regardless of the matrix size. The underlying data of the new matrix is shared with the\n    original matrix. Here is the example of one of the classical basic matrix processing operations,\n    axpy, used by LU and many other algorithms:\n    @code\n        inline void matrix_axpy(Mat& A, int i, int j, double alpha)\n        {\n            A.row(i) += A.row(j)*alpha;\n        }\n    @endcode\n    @note In the current implementation, the following code does not work as expected:\n    @code\n        Mat A;\n        ...\n        A.row(i) = A.row(j); // will not work\n    @endcode\n    This happens because A.row(i) forms a temporary header that is further assigned to another header.\n    Remember that each of these operations is O(1), that is, no data is copied. Thus, the above\n    assignment is not true if you may have expected the j-th row to be copied to the i-th row. To\n    achieve that, you should either turn this simple assignment into an expression or use the\n    Mat::copyTo method:\n    @code\n        Mat A;\n        ...\n        // works, but looks a bit obscure.\n        A.row(i) = A.row(j) + 0;\n        // this is a bit longer, but the recommended method.\n        A.row(j).copyTo(A.row(i));\n    @endcode\n    @param y A 0-based row index.\n     */\n    Mat row(int y) const;\n\n    /** @brief Creates a matrix header for the specified matrix column.\n\n    The method makes a new header for the specified matrix column and returns it. This is an O(1)\n    operation, regardless of the matrix size. The underlying data of the new matrix is shared with the\n    original matrix. See also the Mat::row description.\n    @param x A 0-based column index.\n     */\n    Mat col(int x) const;\n\n    /** @brief Creates a matrix header for the specified row span.\n\n    The method makes a new header for the specified row span of the matrix. Similarly to Mat::row and\n    Mat::col , this is an O(1) operation.\n    @param startrow An inclusive 0-based start index of the row span.\n    @param endrow An exclusive 0-based ending index of the row span.\n     */\n    Mat rowRange(int startrow, int endrow) const;\n\n    /** @overload\n    @param r Range structure containing both the start and the end indices.\n    */\n    Mat rowRange(const Range& r) const;\n\n    /** @brief Creates a matrix header for the specified column span.\n\n    The method makes a new header for the specified column span of the matrix. Similarly to Mat::row and\n    Mat::col , this is an O(1) operation.\n    @param startcol An inclusive 0-based start index of the column span.\n    @param endcol An exclusive 0-based ending index of the column span.\n     */\n    Mat colRange(int startcol, int endcol) const;\n\n    /** @overload\n    @param r Range structure containing both the start and the end indices.\n    */\n    Mat colRange(const Range& r) const;\n\n    /** @brief Extracts a diagonal from a matrix\n\n    The method makes a new header for the specified matrix diagonal. The new matrix is represented as a\n    single-column matrix. Similarly to Mat::row and Mat::col, this is an O(1) operation.\n    @param d index of the diagonal, with the following values:\n    - `d=0` is the main diagonal.\n    - `d>0` is a diagonal from the lower half. For example, d=1 means the diagonal is set\n      immediately below the main one.\n    - `d<0` is a diagonal from the upper half. For example, d=-1 means the diagonal is set\n      immediately above the main one.\n     */\n    Mat diag(int d=0) const;\n\n    /** @brief creates a diagonal matrix\n\n    The method makes a new header for the specified matrix diagonal. The new matrix is represented as a\n    single-column matrix. Similarly to Mat::row and Mat::col, this is an O(1) operation.\n    @param d Single-column matrix that forms a diagonal matrix\n     */\n    static Mat diag(const Mat& d);\n\n    /** @brief Creates a full copy of the array and the underlying data.\n\n    The method creates a full copy of the array. The original step[] is not taken into account. So, the\n    array copy is a continuous array occupying total()*elemSize() bytes.\n     */\n    Mat clone() const;\n\n    /** @brief Copies the matrix to another one.\n\n    The method copies the matrix data to another matrix. Before copying the data, the method invokes :\n    @code\n        m.create(this->size(), this->type());\n    @endcode\n    so that the destination matrix is reallocated if needed. While m.copyTo(m); works flawlessly, the\n    function does not handle the case of a partial overlap between the source and the destination\n    matrices.\n\n    When the operation mask is specified, if the Mat::create call shown above reallocates the matrix,\n    the newly allocated matrix is initialized with all zeros before copying the data.\n    @param m Destination matrix. If it does not have a proper size or type before the operation, it is\n    reallocated.\n     */\n    void copyTo( OutputArray m ) const;\n\n    /** @overload\n    @param m Destination matrix. If it does not have a proper size or type before the operation, it is\n    reallocated.\n    @param mask Operation mask. Its non-zero elements indicate which matrix elements need to be copied.\n    The mask has to be of type CV_8U and can have 1 or multiple channels.\n    */\n    void copyTo( OutputArray m, InputArray mask ) const;\n\n    /** @brief Converts an array to another data type with optional scaling.\n\n    The method converts source pixel values to the target data type. saturate_cast\\<\\> is applied at\n    the end to avoid possible overflows:\n\n    \\f[m(x,y) = saturate \\_ cast<rType>( \\alpha (*this)(x,y) +  \\beta )\\f]\n    @param m output matrix; if it does not have a proper size or type before the operation, it is\n    reallocated.\n    @param rtype desired output matrix type or, rather, the depth since the number of channels are the\n    same as the input has; if rtype is negative, the output matrix will have the same type as the input.\n    @param alpha optional scale factor.\n    @param beta optional delta added to the scaled values.\n     */\n    void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const;\n\n    /** @brief Provides a functional form of convertTo.\n\n    This is an internally used method called by the @ref MatrixExpressions engine.\n    @param m Destination array.\n    @param type Desired destination array depth (or -1 if it should be the same as the source type).\n     */\n    void assignTo( Mat& m, int type=-1 ) const;\n\n    /** @brief Sets all or some of the array elements to the specified value.\n    @param s Assigned scalar converted to the actual array type.\n    */\n    Mat& operator = (const Scalar& s);\n\n    /** @brief Sets all or some of the array elements to the specified value.\n\n    This is an advanced variant of the Mat::operator=(const Scalar& s) operator.\n    @param value Assigned scalar converted to the actual array type.\n    @param mask Operation mask of the same size as \\*this.\n     */\n    Mat& setTo(InputArray value, InputArray mask=noArray());\n\n    /** @brief Changes the shape and/or the number of channels of a 2D matrix without copying the data.\n\n    The method makes a new matrix header for \\*this elements. The new matrix may have a different size\n    and/or different number of channels. Any combination is possible if:\n    -   No extra elements are included into the new matrix and no elements are excluded. Consequently,\n        the product rows\\*cols\\*channels() must stay the same after the transformation.\n    -   No data is copied. That is, this is an O(1) operation. Consequently, if you change the number of\n        rows, or the operation changes the indices of elements row in some other way, the matrix must be\n        continuous. See Mat::isContinuous .\n\n    For example, if there is a set of 3D points stored as an STL vector, and you want to represent the\n    points as a 3xN matrix, do the following:\n    @code\n        std::vector<Point3f> vec;\n        ...\n        Mat pointMat = Mat(vec). // convert vector to Mat, O(1) operation\n                          reshape(1). // make Nx3 1-channel matrix out of Nx1 3-channel.\n                                      // Also, an O(1) operation\n                             t(); // finally, transpose the Nx3 matrix.\n                                  // This involves copying all the elements\n    @endcode\n    @param cn New number of channels. If the parameter is 0, the number of channels remains the same.\n    @param rows New number of rows. If the parameter is 0, the number of rows remains the same.\n     */\n    Mat reshape(int cn, int rows=0) const;\n\n    /** @overload */\n    Mat reshape(int cn, int newndims, const int* newsz) const;\n\n    /** @brief Transposes a matrix.\n\n    The method performs matrix transposition by means of matrix expressions. It does not perform the\n    actual transposition but returns a temporary matrix transposition object that can be further used as\n    a part of more complex matrix expressions or can be assigned to a matrix:\n    @code\n        Mat A1 = A + Mat::eye(A.size(), A.type())*lambda;\n        Mat C = A1.t()*A1; // compute (A + lambda*I)^t * (A + lamda*I)\n    @endcode\n     */\n    MatExpr t() const;\n\n    /** @brief Inverses a matrix.\n\n    The method performs a matrix inversion by means of matrix expressions. This means that a temporary\n    matrix inversion object is returned by the method and can be used further as a part of more complex\n    matrix expressions or can be assigned to a matrix.\n    @param method Matrix inversion method. One of cv::DecompTypes\n     */\n    MatExpr inv(int method=DECOMP_LU) const;\n\n    /** @brief Performs an element-wise multiplication or division of the two matrices.\n\n    The method returns a temporary object encoding per-element array multiplication, with optional\n    scale. Note that this is not a matrix multiplication that corresponds to a simpler \"\\*\" operator.\n\n    Example:\n    @code\n        Mat C = A.mul(5/B); // equivalent to divide(A, B, C, 5)\n    @endcode\n    @param m Another array of the same type and the same size as \\*this, or a matrix expression.\n    @param scale Optional scale factor.\n     */\n    MatExpr mul(InputArray m, double scale=1) const;\n\n    /** @brief Computes a cross-product of two 3-element vectors.\n\n    The method computes a cross-product of two 3-element vectors. The vectors must be 3-element\n    floating-point vectors of the same shape and size. The result is another 3-element vector of the\n    same shape and type as operands.\n    @param m Another cross-product operand.\n     */\n    Mat cross(InputArray m) const;\n\n    /** @brief Computes a dot-product of two vectors.\n\n    The method computes a dot-product of two matrices. If the matrices are not single-column or\n    single-row vectors, the top-to-bottom left-to-right scan ordering is used to treat them as 1D\n    vectors. The vectors must have the same size and type. If the matrices have more than one channel,\n    the dot products from all the channels are summed together.\n    @param m another dot-product operand.\n     */\n    double dot(InputArray m) const;\n\n    /** @brief Returns a zero array of the specified size and type.\n\n    The method returns a Matlab-style zero array initializer. It can be used to quickly form a constant\n    array as a function parameter, part of a matrix expression, or as a matrix initializer. :\n    @code\n        Mat A;\n        A = Mat::zeros(3, 3, CV_32F);\n    @endcode\n    In the example above, a new matrix is allocated only if A is not a 3x3 floating-point matrix.\n    Otherwise, the existing matrix A is filled with zeros.\n    @param rows Number of rows.\n    @param cols Number of columns.\n    @param type Created matrix type.\n     */\n    static MatExpr zeros(int rows, int cols, int type);\n\n    /** @overload\n    @param size Alternative to the matrix size specification Size(cols, rows) .\n    @param type Created matrix type.\n    */\n    static MatExpr zeros(Size size, int type);\n\n    /** @overload\n    @param ndims Array dimensionality.\n    @param sz Array of integers specifying the array shape.\n    @param type Created matrix type.\n    */\n    static MatExpr zeros(int ndims, const int* sz, int type);\n\n    /** @brief Returns an array of all 1's of the specified size and type.\n\n    The method returns a Matlab-style 1's array initializer, similarly to Mat::zeros. Note that using\n    this method you can initialize an array with an arbitrary value, using the following Matlab idiom:\n    @code\n        Mat A = Mat::ones(100, 100, CV_8U)*3; // make 100x100 matrix filled with 3.\n    @endcode\n    The above operation does not form a 100x100 matrix of 1's and then multiply it by 3. Instead, it\n    just remembers the scale factor (3 in this case) and use it when actually invoking the matrix\n    initializer.\n    @param rows Number of rows.\n    @param cols Number of columns.\n    @param type Created matrix type.\n     */\n    static MatExpr ones(int rows, int cols, int type);\n\n    /** @overload\n    @param size Alternative to the matrix size specification Size(cols, rows) .\n    @param type Created matrix type.\n    */\n    static MatExpr ones(Size size, int type);\n\n    /** @overload\n    @param ndims Array dimensionality.\n    @param sz Array of integers specifying the array shape.\n    @param type Created matrix type.\n    */\n    static MatExpr ones(int ndims, const int* sz, int type);\n\n    /** @brief Returns an identity matrix of the specified size and type.\n\n    The method returns a Matlab-style identity matrix initializer, similarly to Mat::zeros. Similarly to\n    Mat::ones, you can use a scale operation to create a scaled identity matrix efficiently:\n    @code\n        // make a 4x4 diagonal matrix with 0.1's on the diagonal.\n        Mat A = Mat::eye(4, 4, CV_32F)*0.1;\n    @endcode\n    @param rows Number of rows.\n    @param cols Number of columns.\n    @param type Created matrix type.\n     */\n    static MatExpr eye(int rows, int cols, int type);\n\n    /** @overload\n    @param size Alternative matrix size specification as Size(cols, rows) .\n    @param type Created matrix type.\n    */\n    static MatExpr eye(Size size, int type);\n\n    /** @brief Allocates new array data if needed.\n\n    This is one of the key Mat methods. Most new-style OpenCV functions and methods that produce arrays\n    call this method for each output array. The method uses the following algorithm:\n\n    -# If the current array shape and the type match the new ones, return immediately. Otherwise,\n       de-reference the previous data by calling Mat::release.\n    -# Initialize the new header.\n    -# Allocate the new data of total()\\*elemSize() bytes.\n    -# Allocate the new, associated with the data, reference counter and set it to 1.\n\n    Such a scheme makes the memory management robust and efficient at the same time and helps avoid\n    extra typing for you. This means that usually there is no need to explicitly allocate output arrays.\n    That is, instead of writing:\n    @code\n        Mat color;\n        ...\n        Mat gray(color.rows, color.cols, color.depth());\n        cvtColor(color, gray, COLOR_BGR2GRAY);\n    @endcode\n    you can simply write:\n    @code\n        Mat color;\n        ...\n        Mat gray;\n        cvtColor(color, gray, COLOR_BGR2GRAY);\n    @endcode\n    because cvtColor, as well as the most of OpenCV functions, calls Mat::create() for the output array\n    internally.\n    @param rows New number of rows.\n    @param cols New number of columns.\n    @param type New matrix type.\n     */\n    void create(int rows, int cols, int type);\n\n    /** @overload\n    @param size Alternative new matrix size specification: Size(cols, rows)\n    @param type New matrix type.\n    */\n    void create(Size size, int type);\n\n    /** @overload\n    @param ndims New array dimensionality.\n    @param sizes Array of integers specifying a new array shape.\n    @param type New matrix type.\n    */\n    void create(int ndims, const int* sizes, int type);\n\n    /** @brief Increments the reference counter.\n\n    The method increments the reference counter associated with the matrix data. If the matrix header\n    points to an external data set (see Mat::Mat ), the reference counter is NULL, and the method has no\n    effect in this case. Normally, to avoid memory leaks, the method should not be called explicitly. It\n    is called implicitly by the matrix assignment operator. The reference counter increment is an atomic\n    operation on the platforms that support it. Thus, it is safe to operate on the same matrices\n    asynchronously in different threads.\n     */\n    void addref();\n\n    /** @brief Decrements the reference counter and deallocates the matrix if needed.\n\n    The method decrements the reference counter associated with the matrix data. When the reference\n    counter reaches 0, the matrix data is deallocated and the data and the reference counter pointers\n    are set to NULL's. If the matrix header points to an external data set (see Mat::Mat ), the\n    reference counter is NULL, and the method has no effect in this case.\n\n    This method can be called manually to force the matrix data deallocation. But since this method is\n    automatically called in the destructor, or by any other method that changes the data pointer, it is\n    usually not needed. The reference counter decrement and check for 0 is an atomic operation on the\n    platforms that support it. Thus, it is safe to operate on the same matrices asynchronously in\n    different threads.\n     */\n    void release();\n\n    //! deallocates the matrix data\n    void deallocate();\n    //! internal use function; properly re-allocates _size, _step arrays\n    void copySize(const Mat& m);\n\n    /** @brief Reserves space for the certain number of rows.\n\n    The method reserves space for sz rows. If the matrix already has enough space to store sz rows,\n    nothing happens. If the matrix is reallocated, the first Mat::rows rows are preserved. The method\n    emulates the corresponding method of the STL vector class.\n    @param sz Number of rows.\n     */\n    void reserve(size_t sz);\n\n    /** @brief Changes the number of matrix rows.\n\n    The methods change the number of matrix rows. If the matrix is reallocated, the first\n    min(Mat::rows, sz) rows are preserved. The methods emulate the corresponding methods of the STL\n    vector class.\n    @param sz New number of rows.\n     */\n    void resize(size_t sz);\n\n    /** @overload\n    @param sz New number of rows.\n    @param s Value assigned to the newly added elements.\n     */\n    void resize(size_t sz, const Scalar& s);\n\n    //! internal function\n    void push_back_(const void* elem);\n\n    /** @brief Adds elements to the bottom of the matrix.\n\n    The methods add one or more elements to the bottom of the matrix. They emulate the corresponding\n    method of the STL vector class. When elem is Mat , its type and the number of columns must be the\n    same as in the container matrix.\n    @param elem Added element(s).\n     */\n    template<typename _Tp> void push_back(const _Tp& elem);\n\n    /** @overload\n    @param elem Added element(s).\n    */\n    template<typename _Tp> void push_back(const Mat_<_Tp>& elem);\n\n    /** @overload\n    @param m Added line(s).\n    */\n    void push_back(const Mat& m);\n\n    /** @brief Removes elements from the bottom of the matrix.\n\n    The method removes one or more rows from the bottom of the matrix.\n    @param nelems Number of removed rows. If it is greater than the total number of rows, an exception\n    is thrown.\n     */\n    void pop_back(size_t nelems=1);\n\n    /** @brief Locates the matrix header within a parent matrix.\n\n    After you extracted a submatrix from a matrix using Mat::row, Mat::col, Mat::rowRange,\n    Mat::colRange, and others, the resultant submatrix points just to the part of the original big\n    matrix. However, each submatrix contains information (represented by datastart and dataend\n    fields) that helps reconstruct the original matrix size and the position of the extracted\n    submatrix within the original matrix. The method locateROI does exactly that.\n    @param wholeSize Output parameter that contains the size of the whole matrix containing *this*\n    as a part.\n    @param ofs Output parameter that contains an offset of *this* inside the whole matrix.\n     */\n    void locateROI( Size& wholeSize, Point& ofs ) const;\n\n    /** @brief Adjusts a submatrix size and position within the parent matrix.\n\n    The method is complimentary to Mat::locateROI . The typical use of these functions is to determine\n    the submatrix position within the parent matrix and then shift the position somehow. Typically, it\n    can be required for filtering operations when pixels outside of the ROI should be taken into\n    account. When all the method parameters are positive, the ROI needs to grow in all directions by the\n    specified amount, for example:\n    @code\n        A.adjustROI(2, 2, 2, 2);\n    @endcode\n    In this example, the matrix size is increased by 4 elements in each direction. The matrix is shifted\n    by 2 elements to the left and 2 elements up, which brings in all the necessary pixels for the\n    filtering with the 5x5 kernel.\n\n    adjustROI forces the adjusted ROI to be inside of the parent matrix that is boundaries of the\n    adjusted ROI are constrained by boundaries of the parent matrix. For example, if the submatrix A is\n    located in the first row of a parent matrix and you called A.adjustROI(2, 2, 2, 2) then A will not\n    be increased in the upward direction.\n\n    The function is used internally by the OpenCV filtering functions, like filter2D , morphological\n    operations, and so on.\n    @param dtop Shift of the top submatrix boundary upwards.\n    @param dbottom Shift of the bottom submatrix boundary downwards.\n    @param dleft Shift of the left submatrix boundary to the left.\n    @param dright Shift of the right submatrix boundary to the right.\n    @sa copyMakeBorder\n     */\n    Mat& adjustROI( int dtop, int dbottom, int dleft, int dright );\n\n    /** @brief Extracts a rectangular submatrix.\n\n    The operators make a new header for the specified sub-array of \\*this . They are the most\n    generalized forms of Mat::row, Mat::col, Mat::rowRange, and Mat::colRange . For example,\n    `A(Range(0, 10), Range::all())` is equivalent to `A.rowRange(0, 10)`. Similarly to all of the above,\n    the operators are O(1) operations, that is, no matrix data is copied.\n    @param rowRange Start and end row of the extracted submatrix. The upper boundary is not included. To\n    select all the rows, use Range::all().\n    @param colRange Start and end column of the extracted submatrix. The upper boundary is not included.\n    To select all the columns, use Range::all().\n     */\n    Mat operator()( Range rowRange, Range colRange ) const;\n\n    /** @overload\n    @param roi Extracted submatrix specified as a rectangle.\n    */\n    Mat operator()( const Rect& roi ) const;\n\n    /** @overload\n    @param ranges Array of selected ranges along each array dimension.\n    */\n    Mat operator()( const Range* ranges ) const;\n\n    // //! converts header to CvMat; no data is copied\n    // operator CvMat() const;\n    // //! converts header to CvMatND; no data is copied\n    // operator CvMatND() const;\n    // //! converts header to IplImage; no data is copied\n    // operator IplImage() const;\n\n    template<typename _Tp> operator std::vector<_Tp>() const;\n    template<typename _Tp, int n> operator Vec<_Tp, n>() const;\n    template<typename _Tp, int m, int n> operator Matx<_Tp, m, n>() const;\n\n    /** @brief Reports whether the matrix is continuous or not.\n\n    The method returns true if the matrix elements are stored continuously without gaps at the end of\n    each row. Otherwise, it returns false. Obviously, 1x1 or 1xN matrices are always continuous.\n    Matrices created with Mat::create are always continuous. But if you extract a part of the matrix\n    using Mat::col, Mat::diag, and so on, or constructed a matrix header for externally allocated data,\n    such matrices may no longer have this property.\n\n    The continuity flag is stored as a bit in the Mat::flags field and is computed automatically when\n    you construct a matrix header. Thus, the continuity check is a very fast operation, though\n    theoretically it could be done as follows:\n    @code\n        // alternative implementation of Mat::isContinuous()\n        bool myCheckMatContinuity(const Mat& m)\n        {\n            //return (m.flags & Mat::CONTINUOUS_FLAG) != 0;\n            return m.rows == 1 || m.step == m.cols*m.elemSize();\n        }\n    @endcode\n    The method is used in quite a few of OpenCV functions. The point is that element-wise operations\n    (such as arithmetic and logical operations, math functions, alpha blending, color space\n    transformations, and others) do not depend on the image geometry. Thus, if all the input and output\n    arrays are continuous, the functions can process them as very long single-row vectors. The example\n    below illustrates how an alpha-blending function can be implemented:\n    @code\n        template<typename T>\n        void alphaBlendRGBA(const Mat& src1, const Mat& src2, Mat& dst)\n        {\n            const float alpha_scale = (float)std::numeric_limits<T>::max(),\n                        inv_scale = 1.f/alpha_scale;\n\n            CV_Assert( src1.type() == src2.type() &&\n                       src1.type() == CV_MAKETYPE(DataType<T>::depth, 4) &&\n                       src1.size() == src2.size());\n            Size size = src1.size();\n            dst.create(size, src1.type());\n\n            // here is the idiom: check the arrays for continuity and,\n            // if this is the case,\n            // treat the arrays as 1D vectors\n            if( src1.isContinuous() && src2.isContinuous() && dst.isContinuous() )\n            {\n                size.width *= size.height;\n                size.height = 1;\n            }\n            size.width *= 4;\n\n            for( int i = 0; i < size.height; i++ )\n            {\n                // when the arrays are continuous,\n                // the outer loop is executed only once\n                const T* ptr1 = src1.ptr<T>(i);\n                const T* ptr2 = src2.ptr<T>(i);\n                T* dptr = dst.ptr<T>(i);\n\n                for( int j = 0; j < size.width; j += 4 )\n                {\n                    float alpha = ptr1[j+3]*inv_scale, beta = ptr2[j+3]*inv_scale;\n                    dptr[j] = saturate_cast<T>(ptr1[j]*alpha + ptr2[j]*beta);\n                    dptr[j+1] = saturate_cast<T>(ptr1[j+1]*alpha + ptr2[j+1]*beta);\n                    dptr[j+2] = saturate_cast<T>(ptr1[j+2]*alpha + ptr2[j+2]*beta);\n                    dptr[j+3] = saturate_cast<T>((1 - (1-alpha)*(1-beta))*alpha_scale);\n                }\n            }\n        }\n    @endcode\n    This approach, while being very simple, can boost the performance of a simple element-operation by\n    10-20 percents, especially if the image is rather small and the operation is quite simple.\n\n    Another OpenCV idiom in this function, a call of Mat::create for the destination array, that\n    allocates the destination array unless it already has the proper size and type. And while the newly\n    allocated arrays are always continuous, you still need to check the destination array because\n    Mat::create does not always allocate a new matrix.\n     */\n    bool isContinuous() const;\n\n    //! returns true if the matrix is a submatrix of another matrix\n    bool isSubmatrix() const;\n\n    /** @brief Returns the matrix element size in bytes.\n\n    The method returns the matrix element size in bytes. For example, if the matrix type is CV_16SC3 ,\n    the method returns 3\\*sizeof(short) or 6.\n     */\n    size_t elemSize() const;\n\n    /** @brief Returns the size of each matrix element channel in bytes.\n\n    The method returns the matrix element channel size in bytes, that is, it ignores the number of\n    channels. For example, if the matrix type is CV_16SC3 , the method returns sizeof(short) or 2.\n     */\n    size_t elemSize1() const;\n\n    /** @brief Returns the type of a matrix element.\n\n    The method returns a matrix element type. This is an identifier compatible with the CvMat type\n    system, like CV_16SC3 or 16-bit signed 3-channel array, and so on.\n     */\n    int type() const;\n\n    /** @brief Returns the depth of a matrix element.\n\n    The method returns the identifier of the matrix element depth (the type of each individual channel).\n    For example, for a 16-bit signed element array, the method returns CV_16S . A complete list of\n    matrix types contains the following values:\n    -   CV_8U - 8-bit unsigned integers ( 0..255 )\n    -   CV_8S - 8-bit signed integers ( -128..127 )\n    -   CV_16U - 16-bit unsigned integers ( 0..65535 )\n    -   CV_16S - 16-bit signed integers ( -32768..32767 )\n    -   CV_32S - 32-bit signed integers ( -2147483648..2147483647 )\n    -   CV_32F - 32-bit floating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN )\n    -   CV_64F - 64-bit floating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )\n     */\n    int depth() const;\n\n    /** @brief Returns the number of matrix channels.\n\n    The method returns the number of matrix channels.\n     */\n    int channels() const;\n\n    /** @brief Returns a normalized step.\n\n    The method returns a matrix step divided by Mat::elemSize1() . It can be useful to quickly access an\n    arbitrary matrix element.\n     */\n    size_t step1(int i=0) const;\n\n    /** @brief Returns true if the array has no elements.\n\n    The method returns true if Mat::total() is 0 or if Mat::data is NULL. Because of pop_back() and\n    resize() methods `M.total() == 0` does not imply that `M.data == NULL`.\n     */\n    bool empty() const;\n\n    /** @brief Returns the total number of array elements.\n\n    The method returns the number of array elements (a number of pixels if the array represents an\n    image).\n     */\n    size_t total() const;\n\n    //! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise\n    int checkVector(int elemChannels, int depth=-1, bool requireContinuous=true) const;\n\n    /** @brief Returns a pointer to the specified matrix row.\n\n    The methods return `uchar*` or typed pointer to the specified matrix row. See the sample in\n    Mat::isContinuous to know how to use these methods.\n    @param i0 A 0-based row index.\n     */\n    uchar* ptr(int i0=0);\n    /** @overload */\n    const uchar* ptr(int i0=0) const;\n\n    /** @overload */\n    uchar* ptr(int i0, int i1);\n    /** @overload */\n    const uchar* ptr(int i0, int i1) const;\n\n    /** @overload */\n    uchar* ptr(int i0, int i1, int i2);\n    /** @overload */\n    const uchar* ptr(int i0, int i1, int i2) const;\n\n    /** @overload */\n    uchar* ptr(const int* idx);\n    /** @overload */\n    const uchar* ptr(const int* idx) const;\n    /** @overload */\n    template<int n> uchar* ptr(const Vec<int, n>& idx);\n    /** @overload */\n    template<int n> const uchar* ptr(const Vec<int, n>& idx) const;\n\n    /** @overload */\n    template<typename _Tp> _Tp* ptr(int i0=0);\n    /** @overload */\n    template<typename _Tp> const _Tp* ptr(int i0=0) const;\n    /** @overload */\n    template<typename _Tp> _Tp* ptr(int i0, int i1);\n    /** @overload */\n    template<typename _Tp> const _Tp* ptr(int i0, int i1) const;\n    /** @overload */\n    template<typename _Tp> _Tp* ptr(int i0, int i1, int i2);\n    /** @overload */\n    template<typename _Tp> const _Tp* ptr(int i0, int i1, int i2) const;\n    /** @overload */\n    template<typename _Tp> _Tp* ptr(const int* idx);\n    /** @overload */\n    template<typename _Tp> const _Tp* ptr(const int* idx) const;\n    /** @overload */\n    template<typename _Tp, int n> _Tp* ptr(const Vec<int, n>& idx);\n    /** @overload */\n    template<typename _Tp, int n> const _Tp* ptr(const Vec<int, n>& idx) const;\n\n    /** @brief Returns a reference to the specified array element.\n\n    The template methods return a reference to the specified array element. For the sake of higher\n    performance, the index range checks are only performed in the Debug configuration.\n\n    Note that the variants with a single index (i) can be used to access elements of single-row or\n    single-column 2-dimensional arrays. That is, if, for example, A is a 1 x N floating-point matrix and\n    B is an M x 1 integer matrix, you can simply write `A.at<float>(k+4)` and `B.at<int>(2*i+1)`\n    instead of `A.at<float>(0,k+4)` and `B.at<int>(2*i+1,0)`, respectively.\n\n    The example below initializes a Hilbert matrix:\n    @code\n        Mat H(100, 100, CV_64F);\n        for(int i = 0; i < H.rows; i++)\n            for(int j = 0; j < H.cols; j++)\n                H.at<double>(i,j)=1./(i+j+1);\n    @endcode\n    @param i0 Index along the dimension 0\n     */\n    template<typename _Tp> _Tp& at(int i0=0);\n    /** @overload\n    @param i0 Index along the dimension 0\n    */\n    template<typename _Tp> const _Tp& at(int i0=0) const;\n    /** @overload\n    @param i0 Index along the dimension 0\n    @param i1 Index along the dimension 1\n    */\n    template<typename _Tp> _Tp& at(int i0, int i1);\n    /** @overload\n    @param i0 Index along the dimension 0\n    @param i1 Index along the dimension 1\n    */\n    template<typename _Tp> const _Tp& at(int i0, int i1) const;\n\n    /** @overload\n    @param i0 Index along the dimension 0\n    @param i1 Index along the dimension 1\n    @param i2 Index along the dimension 2\n    */\n    template<typename _Tp> _Tp& at(int i0, int i1, int i2);\n    /** @overload\n    @param i0 Index along the dimension 0\n    @param i1 Index along the dimension 1\n    @param i2 Index along the dimension 2\n    */\n    template<typename _Tp> const _Tp& at(int i0, int i1, int i2) const;\n\n    /** @overload\n    @param idx Array of Mat::dims indices.\n    */\n    template<typename _Tp> _Tp& at(const int* idx);\n    /** @overload\n    @param idx Array of Mat::dims indices.\n    */\n    template<typename _Tp> const _Tp& at(const int* idx) const;\n\n    /** @overload */\n    template<typename _Tp, int n> _Tp& at(const Vec<int, n>& idx);\n    /** @overload */\n    template<typename _Tp, int n> const _Tp& at(const Vec<int, n>& idx) const;\n\n    /** @overload\n    special versions for 2D arrays (especially convenient for referencing image pixels)\n    @param pt Element position specified as Point(j,i) .\n    */\n    template<typename _Tp> _Tp& at(Point pt);\n    /** @overload\n    special versions for 2D arrays (especially convenient for referencing image pixels)\n    @param pt Element position specified as Point(j,i) .\n    */\n    template<typename _Tp> const _Tp& at(Point pt) const;\n\n    /** @brief Returns the matrix iterator and sets it to the first matrix element.\n\n    The methods return the matrix read-only or read-write iterators. The use of matrix iterators is very\n    similar to the use of bi-directional STL iterators. In the example below, the alpha blending\n    function is rewritten using the matrix iterators:\n    @code\n        template<typename T>\n        void alphaBlendRGBA(const Mat& src1, const Mat& src2, Mat& dst)\n        {\n            typedef Vec<T, 4> VT;\n\n            const float alpha_scale = (float)std::numeric_limits<T>::max(),\n                        inv_scale = 1.f/alpha_scale;\n\n            CV_Assert( src1.type() == src2.type() &&\n                       src1.type() == DataType<VT>::type &&\n                       src1.size() == src2.size());\n            Size size = src1.size();\n            dst.create(size, src1.type());\n\n            MatConstIterator_<VT> it1 = src1.begin<VT>(), it1_end = src1.end<VT>();\n            MatConstIterator_<VT> it2 = src2.begin<VT>();\n            MatIterator_<VT> dst_it = dst.begin<VT>();\n\n            for( ; it1 != it1_end; ++it1, ++it2, ++dst_it )\n            {\n                VT pix1 = *it1, pix2 = *it2;\n                float alpha = pix1[3]*inv_scale, beta = pix2[3]*inv_scale;\n                *dst_it = VT(saturate_cast<T>(pix1[0]*alpha + pix2[0]*beta),\n                             saturate_cast<T>(pix1[1]*alpha + pix2[1]*beta),\n                             saturate_cast<T>(pix1[2]*alpha + pix2[2]*beta),\n                             saturate_cast<T>((1 - (1-alpha)*(1-beta))*alpha_scale));\n            }\n        }\n    @endcode\n     */\n    template<typename _Tp> MatIterator_<_Tp> begin();\n    template<typename _Tp> MatConstIterator_<_Tp> begin() const;\n\n    /** @brief Returns the matrix iterator and sets it to the after-last matrix element.\n\n    The methods return the matrix read-only or read-write iterators, set to the point following the last\n    matrix element.\n     */\n    template<typename _Tp> MatIterator_<_Tp> end();\n    template<typename _Tp> MatConstIterator_<_Tp> end() const;\n\n    /** @brief Invoke with arguments functor, and runs the functor over all matrix element.\n\n    The methods runs operation in parallel. Operation is passed by arguments. Operation have to be a\n    function pointer, a function object or a lambda(C++11).\n\n    All of below operation is equal. Put 0xFF to first channel of all matrix elements:\n    @code\n        Mat image(1920, 1080, CV_8UC3);\n        typedef cv::Point3_<uint8_t> Pixel;\n\n        // first. raw pointer access.\n        for (int r = 0; r < image.rows; ++r) {\n            Pixel* ptr = image.ptr<Pixel>(0, r);\n            const Pixel* ptr_end = ptr + image.cols;\n            for (; ptr != ptr_end; ++ptr) {\n                ptr->x = 255;\n            }\n        }\n\n        // Using MatIterator. (Simple but there are a Iterator's overhead)\n        for (Pixel &p : cv::Mat_<Pixel>(image)) {\n            p.x = 255;\n        }\n\n        // Parallel execution with function object.\n        struct Operator {\n            void operator ()(Pixel &pixel, const int * position) {\n                pixel.x = 255;\n            }\n        };\n        image.forEach<Pixel>(Operator());\n\n        // Parallel execution using C++11 lambda.\n        image.forEach<Pixel>([](Pixel &p, const int * position) -> void {\n            p.x = 255;\n        });\n    @endcode\n    position parameter is index of current pixel:\n    @code\n        // Creating 3D matrix (255 x 255 x 255) typed uint8_t,\n        //  and initialize all elements by the value which equals elements position.\n        //  i.e. pixels (x,y,z) = (1,2,3) is (b,g,r) = (1,2,3).\n\n        int sizes[] = { 255, 255, 255 };\n        typedef cv::Point3_<uint8_t> Pixel;\n\n        Mat_<Pixel> image = Mat::zeros(3, sizes, CV_8UC3);\n\n        image.forEachWithPosition([&](Pixel& pixel, const int position[]) -> void{\n            pixel.x = position[0];\n            pixel.y = position[1];\n            pixel.z = position[2];\n        });\n    @endcode\n     */\n    template<typename _Tp, typename Functor> void forEach(const Functor& operation);\n    /** @overload */\n    template<typename _Tp, typename Functor> void forEach(const Functor& operation) const;\n\n#ifdef CV_CXX_MOVE_SEMANTICS\n    Mat(Mat&& m);\n    Mat& operator = (Mat&& m);\n#endif\n\n    enum { MAGIC_VAL  = 0x42FF0000, AUTO_STEP = 0, CONTINUOUS_FLAG = CV_MAT_CONT_FLAG, SUBMATRIX_FLAG = CV_SUBMAT_FLAG };\n    enum { MAGIC_MASK = 0xFFFF0000, TYPE_MASK = 0x00000FFF, DEPTH_MASK = 7 };\n\n    /*! includes several bit-fields:\n         - the magic signature\n         - continuity flag\n         - depth\n         - number of channels\n     */\n    int flags;\n    //! the matrix dimensionality, >= 2\n    int dims;\n    //! the number of rows and columns or (-1, -1) when the matrix has more than 2 dimensions\n    int rows, cols;\n    //! pointer to the data\n    uchar* data;\n\n    //! helper fields used in locateROI and adjustROI\n    const uchar* datastart;\n    const uchar* dataend;\n    const uchar* datalimit;\n\n    //! custom allocator\n    MatAllocator* allocator;\n    //! and the standard allocator\n    static MatAllocator* getStdAllocator();\n    static MatAllocator* getDefaultAllocator();\n    static void setDefaultAllocator(MatAllocator* allocator);\n\n    //! interaction with UMat\n    UMatData* u;\n\n    MatSize size;\n    MatStep step;\n\nprotected:\n    template<typename _Tp, typename Functor> void forEach_impl(const Functor& operation);\n};\n\n\n///////////////////////////////// Mat_<_Tp> ////////////////////////////////////\n\n/** @brief Template matrix class derived from Mat\n\n@code\n    template<typename _Tp> class Mat_ : public Mat\n    {\n    public:\n        // ... some specific methods\n        //         and\n        // no new extra fields\n    };\n@endcode\nThe class `Mat_<_Tp>` is a *thin* template wrapper on top of the Mat class. It does not have any\nextra data fields. Nor this class nor Mat has any virtual methods. Thus, references or pointers to\nthese two classes can be freely but carefully converted one to another. For example:\n@code\n    // create a 100x100 8-bit matrix\n    Mat M(100,100,CV_8U);\n    // this will be compiled fine. no any data conversion will be done.\n    Mat_<float>& M1 = (Mat_<float>&)M;\n    // the program is likely to crash at the statement below\n    M1(99,99) = 1.f;\n@endcode\nWhile Mat is sufficient in most cases, Mat_ can be more convenient if you use a lot of element\naccess operations and if you know matrix type at the compilation time. Note that\n`Mat::at(int y,int x)` and `Mat_::operator()(int y,int x)` do absolutely the same\nand run at the same speed, but the latter is certainly shorter:\n@code\n    Mat_<double> M(20,20);\n    for(int i = 0; i < M.rows; i++)\n        for(int j = 0; j < M.cols; j++)\n            M(i,j) = 1./(i+j+1);\n    Mat E, V;\n    eigen(M,E,V);\n    cout << E.at<double>(0,0)/E.at<double>(M.rows-1,0);\n@endcode\nTo use Mat_ for multi-channel images/matrices, pass Vec as a Mat_ parameter:\n@code\n    // allocate a 320x240 color image and fill it with green (in RGB space)\n    Mat_<Vec3b> img(240, 320, Vec3b(0,255,0));\n    // now draw a diagonal white line\n    for(int i = 0; i < 100; i++)\n        img(i,i)=Vec3b(255,255,255);\n    // and now scramble the 2nd (red) channel of each pixel\n    for(int i = 0; i < img.rows; i++)\n        for(int j = 0; j < img.cols; j++)\n            img(i,j)[2] ^= (uchar)(i ^ j);\n@endcode\n */\ntemplate<typename _Tp> class Mat_ : public Mat\n{\npublic:\n    typedef _Tp value_type;\n    typedef typename DataType<_Tp>::channel_type channel_type;\n    typedef MatIterator_<_Tp> iterator;\n    typedef MatConstIterator_<_Tp> const_iterator;\n\n    //! default constructor\n    Mat_();\n    //! equivalent to Mat(_rows, _cols, DataType<_Tp>::type)\n    Mat_(int _rows, int _cols);\n    //! constructor that sets each matrix element to specified value\n    Mat_(int _rows, int _cols, const _Tp& value);\n    //! equivalent to Mat(_size, DataType<_Tp>::type)\n    explicit Mat_(Size _size);\n    //! constructor that sets each matrix element to specified value\n    Mat_(Size _size, const _Tp& value);\n    //! n-dim array constructor\n    Mat_(int _ndims, const int* _sizes);\n    //! n-dim array constructor that sets each matrix element to specified value\n    Mat_(int _ndims, const int* _sizes, const _Tp& value);\n    //! copy/conversion contructor. If m is of different type, it's converted\n    Mat_(const Mat& m);\n    //! copy constructor\n    Mat_(const Mat_& m);\n    //! constructs a matrix on top of user-allocated data. step is in bytes(!!!), regardless of the type\n    Mat_(int _rows, int _cols, _Tp* _data, size_t _step=AUTO_STEP);\n    //! constructs n-dim matrix on top of user-allocated data. steps are in bytes(!!!), regardless of the type\n    Mat_(int _ndims, const int* _sizes, _Tp* _data, const size_t* _steps=0);\n    //! selects a submatrix\n    Mat_(const Mat_& m, const Range& rowRange, const Range& colRange=Range::all());\n    //! selects a submatrix\n    Mat_(const Mat_& m, const Rect& roi);\n    //! selects a submatrix, n-dim version\n    Mat_(const Mat_& m, const Range* ranges);\n    //! from a matrix expression\n    explicit Mat_(const MatExpr& e);\n    //! makes a matrix out of Vec, std::vector, Point_ or Point3_. The matrix will have a single column\n    explicit Mat_(const std::vector<_Tp>& vec, bool copyData=false);\n    template<int n> explicit Mat_(const Vec<typename DataType<_Tp>::channel_type, n>& vec, bool copyData=true);\n    template<int m, int n> explicit Mat_(const Matx<typename DataType<_Tp>::channel_type, m, n>& mtx, bool copyData=true);\n    explicit Mat_(const Point_<typename DataType<_Tp>::channel_type>& pt, bool copyData=true);\n    explicit Mat_(const Point3_<typename DataType<_Tp>::channel_type>& pt, bool copyData=true);\n    explicit Mat_(const MatCommaInitializer_<_Tp>& commaInitializer);\n\n    Mat_& operator = (const Mat& m);\n    Mat_& operator = (const Mat_& m);\n    //! set all the elements to s.\n    Mat_& operator = (const _Tp& s);\n    //! assign a matrix expression\n    Mat_& operator = (const MatExpr& e);\n\n    //! iterators; they are smart enough to skip gaps in the end of rows\n    iterator begin();\n    iterator end();\n    const_iterator begin() const;\n    const_iterator end() const;\n\n    //! template methods for for operation over all matrix elements.\n    // the operations take care of skipping gaps in the end of rows (if any)\n    template<typename Functor> void forEach(const Functor& operation);\n    template<typename Functor> void forEach(const Functor& operation) const;\n\n    //! equivalent to Mat::create(_rows, _cols, DataType<_Tp>::type)\n    void create(int _rows, int _cols);\n    //! equivalent to Mat::create(_size, DataType<_Tp>::type)\n    void create(Size _size);\n    //! equivalent to Mat::create(_ndims, _sizes, DatType<_Tp>::type)\n    void create(int _ndims, const int* _sizes);\n    //! cross-product\n    Mat_ cross(const Mat_& m) const;\n    //! data type conversion\n    template<typename T2> operator Mat_<T2>() const;\n    //! overridden forms of Mat::row() etc.\n    Mat_ row(int y) const;\n    Mat_ col(int x) const;\n    Mat_ diag(int d=0) const;\n    Mat_ clone() const;\n\n    //! overridden forms of Mat::elemSize() etc.\n    size_t elemSize() const;\n    size_t elemSize1() const;\n    int type() const;\n    int depth() const;\n    int channels() const;\n    size_t step1(int i=0) const;\n    //! returns step()/sizeof(_Tp)\n    size_t stepT(int i=0) const;\n\n    //! overridden forms of Mat::zeros() etc. Data type is omitted, of course\n    static MatExpr zeros(int rows, int cols);\n    static MatExpr zeros(Size size);\n    static MatExpr zeros(int _ndims, const int* _sizes);\n    static MatExpr ones(int rows, int cols);\n    static MatExpr ones(Size size);\n    static MatExpr ones(int _ndims, const int* _sizes);\n    static MatExpr eye(int rows, int cols);\n    static MatExpr eye(Size size);\n\n    //! some more overriden methods\n    Mat_& adjustROI( int dtop, int dbottom, int dleft, int dright );\n    Mat_ operator()( const Range& rowRange, const Range& colRange ) const;\n    Mat_ operator()( const Rect& roi ) const;\n    Mat_ operator()( const Range* ranges ) const;\n\n    //! more convenient forms of row and element access operators\n    _Tp* operator [](int y);\n    const _Tp* operator [](int y) const;\n\n    //! returns reference to the specified element\n    _Tp& operator ()(const int* idx);\n    //! returns read-only reference to the specified element\n    const _Tp& operator ()(const int* idx) const;\n\n    //! returns reference to the specified element\n    template<int n> _Tp& operator ()(const Vec<int, n>& idx);\n    //! returns read-only reference to the specified element\n    template<int n> const _Tp& operator ()(const Vec<int, n>& idx) const;\n\n    //! returns reference to the specified element (1D case)\n    _Tp& operator ()(int idx0);\n    //! returns read-only reference to the specified element (1D case)\n    const _Tp& operator ()(int idx0) const;\n    //! returns reference to the specified element (2D case)\n    _Tp& operator ()(int idx0, int idx1);\n    //! returns read-only reference to the specified element (2D case)\n    const _Tp& operator ()(int idx0, int idx1) const;\n    //! returns reference to the specified element (3D case)\n    _Tp& operator ()(int idx0, int idx1, int idx2);\n    //! returns read-only reference to the specified element (3D case)\n    const _Tp& operator ()(int idx0, int idx1, int idx2) const;\n\n    _Tp& operator ()(Point pt);\n    const _Tp& operator ()(Point pt) const;\n\n    //! conversion to vector.\n    operator std::vector<_Tp>() const;\n    //! conversion to Vec\n    template<int n> operator Vec<typename DataType<_Tp>::channel_type, n>() const;\n    //! conversion to Matx\n    template<int m, int n> operator Matx<typename DataType<_Tp>::channel_type, m, n>() const;\n\n#ifdef CV_CXX_MOVE_SEMANTICS\n    Mat_(Mat_&& m);\n    Mat_& operator = (Mat_&& m);\n\n    Mat_(Mat&& m);\n    Mat_& operator = (Mat&& m);\n\n    Mat_(MatExpr&& e);\n#endif\n};\n\ntypedef Mat_<uchar> Mat1b;\ntypedef Mat_<Vec2b> Mat2b;\ntypedef Mat_<Vec3b> Mat3b;\ntypedef Mat_<Vec4b> Mat4b;\n\ntypedef Mat_<short> Mat1s;\ntypedef Mat_<Vec2s> Mat2s;\ntypedef Mat_<Vec3s> Mat3s;\ntypedef Mat_<Vec4s> Mat4s;\n\ntypedef Mat_<ushort> Mat1w;\ntypedef Mat_<Vec2w> Mat2w;\ntypedef Mat_<Vec3w> Mat3w;\ntypedef Mat_<Vec4w> Mat4w;\n\ntypedef Mat_<int>   Mat1i;\ntypedef Mat_<Vec2i> Mat2i;\ntypedef Mat_<Vec3i> Mat3i;\ntypedef Mat_<Vec4i> Mat4i;\n\ntypedef Mat_<float> Mat1f;\ntypedef Mat_<Vec2f> Mat2f;\ntypedef Mat_<Vec3f> Mat3f;\ntypedef Mat_<Vec4f> Mat4f;\n\ntypedef Mat_<double> Mat1d;\ntypedef Mat_<Vec2d> Mat2d;\ntypedef Mat_<Vec3d> Mat3d;\ntypedef Mat_<Vec4d> Mat4d;\n\n/** @todo document */\nclass CV_EXPORTS UMat\n{\npublic:\n    //! default constructor\n    UMat(UMatUsageFlags usageFlags = USAGE_DEFAULT);\n    //! constructs 2D matrix of the specified size and type\n    // (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)\n    UMat(int rows, int cols, int type, UMatUsageFlags usageFlags = USAGE_DEFAULT);\n    UMat(Size size, int type, UMatUsageFlags usageFlags = USAGE_DEFAULT);\n    //! constucts 2D matrix and fills it with the specified value _s.\n    UMat(int rows, int cols, int type, const Scalar& s, UMatUsageFlags usageFlags = USAGE_DEFAULT);\n    UMat(Size size, int type, const Scalar& s, UMatUsageFlags usageFlags = USAGE_DEFAULT);\n\n    //! constructs n-dimensional matrix\n    UMat(int ndims, const int* sizes, int type, UMatUsageFlags usageFlags = USAGE_DEFAULT);\n    UMat(int ndims, const int* sizes, int type, const Scalar& s, UMatUsageFlags usageFlags = USAGE_DEFAULT);\n\n    //! copy constructor\n    UMat(const UMat& m);\n\n    //! creates a matrix header for a part of the bigger matrix\n    UMat(const UMat& m, const Range& rowRange, const Range& colRange=Range::all());\n    UMat(const UMat& m, const Rect& roi);\n    UMat(const UMat& m, const Range* ranges);\n    //! builds matrix from std::vector with or without copying the data\n    template<typename _Tp> explicit UMat(const std::vector<_Tp>& vec, bool copyData=false);\n    //! builds matrix from cv::Vec; the data is copied by default\n    template<typename _Tp, int n> explicit UMat(const Vec<_Tp, n>& vec, bool copyData=true);\n    //! builds matrix from cv::Matx; the data is copied by default\n    template<typename _Tp, int m, int n> explicit UMat(const Matx<_Tp, m, n>& mtx, bool copyData=true);\n    //! builds matrix from a 2D point\n    template<typename _Tp> explicit UMat(const Point_<_Tp>& pt, bool copyData=true);\n    //! builds matrix from a 3D point\n    template<typename _Tp> explicit UMat(const Point3_<_Tp>& pt, bool copyData=true);\n    //! builds matrix from comma initializer\n    template<typename _Tp> explicit UMat(const MatCommaInitializer_<_Tp>& commaInitializer);\n\n    //! destructor - calls release()\n    ~UMat();\n    //! assignment operators\n    UMat& operator = (const UMat& m);\n\n    Mat getMat(int flags) const;\n\n    //! returns a new matrix header for the specified row\n    UMat row(int y) const;\n    //! returns a new matrix header for the specified column\n    UMat col(int x) const;\n    //! ... for the specified row span\n    UMat rowRange(int startrow, int endrow) const;\n    UMat rowRange(const Range& r) const;\n    //! ... for the specified column span\n    UMat colRange(int startcol, int endcol) const;\n    UMat colRange(const Range& r) const;\n    //! ... for the specified diagonal\n    // (d=0 - the main diagonal,\n    //  >0 - a diagonal from the lower half,\n    //  <0 - a diagonal from the upper half)\n    UMat diag(int d=0) const;\n    //! constructs a square diagonal matrix which main diagonal is vector \"d\"\n    static UMat diag(const UMat& d);\n\n    //! returns deep copy of the matrix, i.e. the data is copied\n    UMat clone() const;\n    //! copies the matrix content to \"m\".\n    // It calls m.create(this->size(), this->type()).\n    void copyTo( OutputArray m ) const;\n    //! copies those matrix elements to \"m\" that are marked with non-zero mask elements.\n    void copyTo( OutputArray m, InputArray mask ) const;\n    //! converts matrix to another datatype with optional scalng. See cvConvertScale.\n    void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const;\n\n    void assignTo( UMat& m, int type=-1 ) const;\n\n    //! sets every matrix element to s\n    UMat& operator = (const Scalar& s);\n    //! sets some of the matrix elements to s, according to the mask\n    UMat& setTo(InputArray value, InputArray mask=noArray());\n    //! creates alternative matrix header for the same data, with different\n    // number of channels and/or different number of rows. see cvReshape.\n    UMat reshape(int cn, int rows=0) const;\n    UMat reshape(int cn, int newndims, const int* newsz) const;\n\n    //! matrix transposition by means of matrix expressions\n    UMat t() const;\n    //! matrix inversion by means of matrix expressions\n    UMat inv(int method=DECOMP_LU) const;\n    //! per-element matrix multiplication by means of matrix expressions\n    UMat mul(InputArray m, double scale=1) const;\n\n    //! computes dot-product\n    double dot(InputArray m) const;\n\n    //! Matlab-style matrix initialization\n    static UMat zeros(int rows, int cols, int type);\n    static UMat zeros(Size size, int type);\n    static UMat zeros(int ndims, const int* sz, int type);\n    static UMat ones(int rows, int cols, int type);\n    static UMat ones(Size size, int type);\n    static UMat ones(int ndims, const int* sz, int type);\n    static UMat eye(int rows, int cols, int type);\n    static UMat eye(Size size, int type);\n\n    //! allocates new matrix data unless the matrix already has specified size and type.\n    // previous data is unreferenced if needed.\n    void create(int rows, int cols, int type, UMatUsageFlags usageFlags = USAGE_DEFAULT);\n    void create(Size size, int type, UMatUsageFlags usageFlags = USAGE_DEFAULT);\n    void create(int ndims, const int* sizes, int type, UMatUsageFlags usageFlags = USAGE_DEFAULT);\n\n    //! increases the reference counter; use with care to avoid memleaks\n    void addref();\n    //! decreases reference counter;\n    // deallocates the data when reference counter reaches 0.\n    void release();\n\n    //! deallocates the matrix data\n    void deallocate();\n    //! internal use function; properly re-allocates _size, _step arrays\n    void copySize(const UMat& m);\n\n    //! locates matrix header within a parent matrix. See below\n    void locateROI( Size& wholeSize, Point& ofs ) const;\n    //! moves/resizes the current matrix ROI inside the parent matrix.\n    UMat& adjustROI( int dtop, int dbottom, int dleft, int dright );\n    //! extracts a rectangular sub-matrix\n    // (this is a generalized form of row, rowRange etc.)\n    UMat operator()( Range rowRange, Range colRange ) const;\n    UMat operator()( const Rect& roi ) const;\n    UMat operator()( const Range* ranges ) const;\n\n    //! returns true iff the matrix data is continuous\n    // (i.e. when there are no gaps between successive rows).\n    // similar to CV_IS_MAT_CONT(cvmat->type)\n    bool isContinuous() const;\n\n    //! returns true if the matrix is a submatrix of another matrix\n    bool isSubmatrix() const;\n\n    //! returns element size in bytes,\n    // similar to CV_ELEM_SIZE(cvmat->type)\n    size_t elemSize() const;\n    //! returns the size of element channel in bytes.\n    size_t elemSize1() const;\n    //! returns element type, similar to CV_MAT_TYPE(cvmat->type)\n    int type() const;\n    //! returns element type, similar to CV_MAT_DEPTH(cvmat->type)\n    int depth() const;\n    //! returns element type, similar to CV_MAT_CN(cvmat->type)\n    int channels() const;\n    //! returns step/elemSize1()\n    size_t step1(int i=0) const;\n    //! returns true if matrix data is NULL\n    bool empty() const;\n    //! returns the total number of matrix elements\n    size_t total() const;\n\n    //! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise\n    int checkVector(int elemChannels, int depth=-1, bool requireContinuous=true) const;\n\n#ifdef CV_CXX_MOVE_SEMANTICS\n    UMat(UMat&& m);\n    UMat& operator = (UMat&& m);\n#endif\n\n    void* handle(int accessFlags) const;\n    void ndoffset(size_t* ofs) const;\n\n    enum { MAGIC_VAL  = 0x42FF0000, AUTO_STEP = 0, CONTINUOUS_FLAG = CV_MAT_CONT_FLAG, SUBMATRIX_FLAG = CV_SUBMAT_FLAG };\n    enum { MAGIC_MASK = 0xFFFF0000, TYPE_MASK = 0x00000FFF, DEPTH_MASK = 7 };\n\n    /*! includes several bit-fields:\n         - the magic signature\n         - continuity flag\n         - depth\n         - number of channels\n     */\n    int flags;\n    //! the matrix dimensionality, >= 2\n    int dims;\n    //! the number of rows and columns or (-1, -1) when the matrix has more than 2 dimensions\n    int rows, cols;\n\n    //! custom allocator\n    MatAllocator* allocator;\n    UMatUsageFlags usageFlags; // usage flags for allocator\n    //! and the standard allocator\n    static MatAllocator* getStdAllocator();\n\n    // black-box container of UMat data\n    UMatData* u;\n\n    // offset of the submatrix (or 0)\n    size_t offset;\n\n    MatSize size;\n    MatStep step;\n\nprotected:\n};\n\n\n/////////////////////////// multi-dimensional sparse matrix //////////////////////////\n\n/** @brief The class SparseMat represents multi-dimensional sparse numerical arrays.\n\nSuch a sparse array can store elements of any type that Mat can store. *Sparse* means that only\nnon-zero elements are stored (though, as a result of operations on a sparse matrix, some of its\nstored elements can actually become 0. It is up to you to detect such elements and delete them\nusing SparseMat::erase ). The non-zero elements are stored in a hash table that grows when it is\nfilled so that the search time is O(1) in average (regardless of whether element is there or not).\nElements can be accessed using the following methods:\n-   Query operations (SparseMat::ptr and the higher-level SparseMat::ref, SparseMat::value and\n    SparseMat::find), for example:\n    @code\n        const int dims = 5;\n        int size[] = {10, 10, 10, 10, 10};\n        SparseMat sparse_mat(dims, size, CV_32F);\n        for(int i = 0; i < 1000; i++)\n        {\n            int idx[dims];\n            for(int k = 0; k < dims; k++)\n                idx[k] = rand()\n            sparse_mat.ref<float>(idx) += 1.f;\n        }\n    @endcode\n-   Sparse matrix iterators. They are similar to MatIterator but different from NAryMatIterator.\n    That is, the iteration loop is familiar to STL users:\n    @code\n        // prints elements of a sparse floating-point matrix\n        // and the sum of elements.\n        SparseMatConstIterator_<float>\n            it = sparse_mat.begin<float>(),\n            it_end = sparse_mat.end<float>();\n        double s = 0;\n        int dims = sparse_mat.dims();\n        for(; it != it_end; ++it)\n        {\n            // print element indices and the element value\n            const SparseMat::Node* n = it.node();\n            printf(\"(\");\n            for(int i = 0; i < dims; i++)\n                printf(\"%d%s\", n->idx[i], i < dims-1 ? \", \" : \")\");\n            printf(\": %g\\n\", it.value<float>());\n            s += *it;\n        }\n        printf(\"Element sum is %g\\n\", s);\n    @endcode\n    If you run this loop, you will notice that elements are not enumerated in a logical order\n    (lexicographical, and so on). They come in the same order as they are stored in the hash table\n    (semi-randomly). You may collect pointers to the nodes and sort them to get the proper ordering.\n    Note, however, that pointers to the nodes may become invalid when you add more elements to the\n    matrix. This may happen due to possible buffer reallocation.\n-   Combination of the above 2 methods when you need to process 2 or more sparse matrices\n    simultaneously. For example, this is how you can compute unnormalized cross-correlation of the 2\n    floating-point sparse matrices:\n    @code\n        double cross_corr(const SparseMat& a, const SparseMat& b)\n        {\n            const SparseMat *_a = &a, *_b = &b;\n            // if b contains less elements than a,\n            // it is faster to iterate through b\n            if(_a->nzcount() > _b->nzcount())\n                std::swap(_a, _b);\n            SparseMatConstIterator_<float> it = _a->begin<float>(),\n                                           it_end = _a->end<float>();\n            double ccorr = 0;\n            for(; it != it_end; ++it)\n            {\n                // take the next element from the first matrix\n                float avalue = *it;\n                const Node* anode = it.node();\n                // and try to find an element with the same index in the second matrix.\n                // since the hash value depends only on the element index,\n                // reuse the hash value stored in the node\n                float bvalue = _b->value<float>(anode->idx,&anode->hashval);\n                ccorr += avalue*bvalue;\n            }\n            return ccorr;\n        }\n    @endcode\n */\nclass CV_EXPORTS SparseMat\n{\npublic:\n    typedef SparseMatIterator iterator;\n    typedef SparseMatConstIterator const_iterator;\n\n    enum { MAGIC_VAL=0x42FD0000, MAX_DIM=32, HASH_SCALE=0x5bd1e995, HASH_BIT=0x80000000 };\n\n    //! the sparse matrix header\n    struct CV_EXPORTS Hdr\n    {\n        Hdr(int _dims, const int* _sizes, int _type);\n        void clear();\n        int refcount;\n        int dims;\n        int valueOffset;\n        size_t nodeSize;\n        size_t nodeCount;\n        size_t freeList;\n        std::vector<uchar> pool;\n        std::vector<size_t> hashtab;\n        int size[MAX_DIM];\n    };\n\n    //! sparse matrix node - element of a hash table\n    struct CV_EXPORTS Node\n    {\n        //! hash value\n        size_t hashval;\n        //! index of the next node in the same hash table entry\n        size_t next;\n        //! index of the matrix element\n        int idx[MAX_DIM];\n    };\n\n    /** @brief Various SparseMat constructors.\n     */\n    SparseMat();\n\n    /** @overload\n    @param dims Array dimensionality.\n    @param _sizes Sparce matrix size on all dementions.\n    @param _type Sparse matrix data type.\n    */\n    SparseMat(int dims, const int* _sizes, int _type);\n\n    /** @overload\n    @param m Source matrix for copy constructor. If m is dense matrix (ocvMat) then it will be converted\n    to sparse representation.\n    */\n    SparseMat(const SparseMat& m);\n\n    /** @overload\n    @param m Source matrix for copy constructor. If m is dense matrix (ocvMat) then it will be converted\n    to sparse representation.\n    */\n    explicit SparseMat(const Mat& m);\n\n    //! the destructor\n    ~SparseMat();\n\n    //! assignment operator. This is O(1) operation, i.e. no data is copied\n    SparseMat& operator = (const SparseMat& m);\n    //! equivalent to the corresponding constructor\n    SparseMat& operator = (const Mat& m);\n\n    //! creates full copy of the matrix\n    SparseMat clone() const;\n\n    //! copies all the data to the destination matrix. All the previous content of m is erased\n    void copyTo( SparseMat& m ) const;\n    //! converts sparse matrix to dense matrix.\n    void copyTo( Mat& m ) const;\n    //! multiplies all the matrix elements by the specified scale factor alpha and converts the results to the specified data type\n    void convertTo( SparseMat& m, int rtype, double alpha=1 ) const;\n    //! converts sparse matrix to dense n-dim matrix with optional type conversion and scaling.\n    /*!\n        @param [out] m - output matrix; if it does not have a proper size or type before the operation,\n            it is reallocated\n        @param [in] rtype – desired output matrix type or, rather, the depth since the number of channels\n            are the same as the input has; if rtype is negative, the output matrix will have the\n            same type as the input.\n        @param [in] alpha – optional scale factor\n        @param [in] beta – optional delta added to the scaled values\n    */\n    void convertTo( Mat& m, int rtype, double alpha=1, double beta=0 ) const;\n\n    // not used now\n    void assignTo( SparseMat& m, int type=-1 ) const;\n\n    //! reallocates sparse matrix.\n    /*!\n        If the matrix already had the proper size and type,\n        it is simply cleared with clear(), otherwise,\n        the old matrix is released (using release()) and the new one is allocated.\n    */\n    void create(int dims, const int* _sizes, int _type);\n    //! sets all the sparse matrix elements to 0, which means clearing the hash table.\n    void clear();\n    //! manually increments the reference counter to the header.\n    void addref();\n    // decrements the header reference counter. When the counter reaches 0, the header and all the underlying data are deallocated.\n    void release();\n\n    //! converts sparse matrix to the old-style representation; all the elements are copied.\n    //operator CvSparseMat*() const;\n    //! returns the size of each element in bytes (not including the overhead - the space occupied by SparseMat::Node elements)\n    size_t elemSize() const;\n    //! returns elemSize()/channels()\n    size_t elemSize1() const;\n\n    //! returns type of sparse matrix elements\n    int type() const;\n    //! returns the depth of sparse matrix elements\n    int depth() const;\n    //! returns the number of channels\n    int channels() const;\n\n    //! returns the array of sizes, or NULL if the matrix is not allocated\n    const int* size() const;\n    //! returns the size of i-th matrix dimension (or 0)\n    int size(int i) const;\n    //! returns the matrix dimensionality\n    int dims() const;\n    //! returns the number of non-zero elements (=the number of hash table nodes)\n    size_t nzcount() const;\n\n    //! computes the element hash value (1D case)\n    size_t hash(int i0) const;\n    //! computes the element hash value (2D case)\n    size_t hash(int i0, int i1) const;\n    //! computes the element hash value (3D case)\n    size_t hash(int i0, int i1, int i2) const;\n    //! computes the element hash value (nD case)\n    size_t hash(const int* idx) const;\n\n    //!@{\n    /*!\n     specialized variants for 1D, 2D, 3D cases and the generic_type one for n-D case.\n     return pointer to the matrix element.\n      - if the element is there (it's non-zero), the pointer to it is returned\n      - if it's not there and createMissing=false, NULL pointer is returned\n      - if it's not there and createMissing=true, then the new element\n        is created and initialized with 0. Pointer to it is returned\n      - if the optional hashval pointer is not NULL, the element hash value is\n        not computed, but *hashval is taken instead.\n    */\n    //! returns pointer to the specified element (1D case)\n    uchar* ptr(int i0, bool createMissing, size_t* hashval=0);\n    //! returns pointer to the specified element (2D case)\n    uchar* ptr(int i0, int i1, bool createMissing, size_t* hashval=0);\n    //! returns pointer to the specified element (3D case)\n    uchar* ptr(int i0, int i1, int i2, bool createMissing, size_t* hashval=0);\n    //! returns pointer to the specified element (nD case)\n    uchar* ptr(const int* idx, bool createMissing, size_t* hashval=0);\n    //!@}\n\n    //!@{\n    /*!\n     return read-write reference to the specified sparse matrix element.\n\n     `ref<_Tp>(i0,...[,hashval])` is equivalent to `*(_Tp*)ptr(i0,...,true[,hashval])`.\n     The methods always return a valid reference.\n     If the element did not exist, it is created and initialiazed with 0.\n    */\n    //! returns reference to the specified element (1D case)\n    template<typename _Tp> _Tp& ref(int i0, size_t* hashval=0);\n    //! returns reference to the specified element (2D case)\n    template<typename _Tp> _Tp& ref(int i0, int i1, size_t* hashval=0);\n    //! returns reference to the specified element (3D case)\n    template<typename _Tp> _Tp& ref(int i0, int i1, int i2, size_t* hashval=0);\n    //! returns reference to the specified element (nD case)\n    template<typename _Tp> _Tp& ref(const int* idx, size_t* hashval=0);\n    //!@}\n\n    //!@{\n    /*!\n     return value of the specified sparse matrix element.\n\n     `value<_Tp>(i0,...[,hashval])` is equivalent to\n     @code\n     { const _Tp* p = find<_Tp>(i0,...[,hashval]); return p ? *p : _Tp(); }\n     @endcode\n\n     That is, if the element did not exist, the methods return 0.\n     */\n    //! returns value of the specified element (1D case)\n    template<typename _Tp> _Tp value(int i0, size_t* hashval=0) const;\n    //! returns value of the specified element (2D case)\n    template<typename _Tp> _Tp value(int i0, int i1, size_t* hashval=0) const;\n    //! returns value of the specified element (3D case)\n    template<typename _Tp> _Tp value(int i0, int i1, int i2, size_t* hashval=0) const;\n    //! returns value of the specified element (nD case)\n    template<typename _Tp> _Tp value(const int* idx, size_t* hashval=0) const;\n    //!@}\n\n    //!@{\n    /*!\n     Return pointer to the specified sparse matrix element if it exists\n\n     `find<_Tp>(i0,...[,hashval])` is equivalent to `(_const Tp*)ptr(i0,...false[,hashval])`.\n\n     If the specified element does not exist, the methods return NULL.\n    */\n    //! returns pointer to the specified element (1D case)\n    template<typename _Tp> const _Tp* find(int i0, size_t* hashval=0) const;\n    //! returns pointer to the specified element (2D case)\n    template<typename _Tp> const _Tp* find(int i0, int i1, size_t* hashval=0) const;\n    //! returns pointer to the specified element (3D case)\n    template<typename _Tp> const _Tp* find(int i0, int i1, int i2, size_t* hashval=0) const;\n    //! returns pointer to the specified element (nD case)\n    template<typename _Tp> const _Tp* find(const int* idx, size_t* hashval=0) const;\n    //!@}\n\n    //! erases the specified element (2D case)\n    void erase(int i0, int i1, size_t* hashval=0);\n    //! erases the specified element (3D case)\n    void erase(int i0, int i1, int i2, size_t* hashval=0);\n    //! erases the specified element (nD case)\n    void erase(const int* idx, size_t* hashval=0);\n\n    //!@{\n    /*!\n       return the sparse matrix iterator pointing to the first sparse matrix element\n    */\n    //! returns the sparse matrix iterator at the matrix beginning\n    SparseMatIterator begin();\n    //! returns the sparse matrix iterator at the matrix beginning\n    template<typename _Tp> SparseMatIterator_<_Tp> begin();\n    //! returns the read-only sparse matrix iterator at the matrix beginning\n    SparseMatConstIterator begin() const;\n    //! returns the read-only sparse matrix iterator at the matrix beginning\n    template<typename _Tp> SparseMatConstIterator_<_Tp> begin() const;\n    //!@}\n    /*!\n       return the sparse matrix iterator pointing to the element following the last sparse matrix element\n    */\n    //! returns the sparse matrix iterator at the matrix end\n    SparseMatIterator end();\n    //! returns the read-only sparse matrix iterator at the matrix end\n    SparseMatConstIterator end() const;\n    //! returns the typed sparse matrix iterator at the matrix end\n    template<typename _Tp> SparseMatIterator_<_Tp> end();\n    //! returns the typed read-only sparse matrix iterator at the matrix end\n    template<typename _Tp> SparseMatConstIterator_<_Tp> end() const;\n\n    //! returns the value stored in the sparse martix node\n    template<typename _Tp> _Tp& value(Node* n);\n    //! returns the value stored in the sparse martix node\n    template<typename _Tp> const _Tp& value(const Node* n) const;\n\n    ////////////// some internal-use methods ///////////////\n    Node* node(size_t nidx);\n    const Node* node(size_t nidx) const;\n\n    uchar* newNode(const int* idx, size_t hashval);\n    void removeNode(size_t hidx, size_t nidx, size_t previdx);\n    void resizeHashTab(size_t newsize);\n\n    int flags;\n    Hdr* hdr;\n};\n\n\n\n///////////////////////////////// SparseMat_<_Tp> ////////////////////////////////////\n\n/** @brief Template sparse n-dimensional array class derived from SparseMat\n\nSparseMat_ is a thin wrapper on top of SparseMat created in the same way as Mat_ . It simplifies\nnotation of some operations:\n@code\n    int sz[] = {10, 20, 30};\n    SparseMat_<double> M(3, sz);\n    ...\n    M.ref(1, 2, 3) = M(4, 5, 6) + M(7, 8, 9);\n@endcode\n */\ntemplate<typename _Tp> class SparseMat_ : public SparseMat\n{\npublic:\n    typedef SparseMatIterator_<_Tp> iterator;\n    typedef SparseMatConstIterator_<_Tp> const_iterator;\n\n    //! the default constructor\n    SparseMat_();\n    //! the full constructor equivelent to SparseMat(dims, _sizes, DataType<_Tp>::type)\n    SparseMat_(int dims, const int* _sizes);\n    //! the copy constructor. If DataType<_Tp>.type != m.type(), the m elements are converted\n    SparseMat_(const SparseMat& m);\n    //! the copy constructor. This is O(1) operation - no data is copied\n    SparseMat_(const SparseMat_& m);\n    //! converts dense matrix to the sparse form\n    SparseMat_(const Mat& m);\n    //! converts the old-style sparse matrix to the C++ class. All the elements are copied\n    //SparseMat_(const CvSparseMat* m);\n    //! the assignment operator. If DataType<_Tp>.type != m.type(), the m elements are converted\n    SparseMat_& operator = (const SparseMat& m);\n    //! the assignment operator. This is O(1) operation - no data is copied\n    SparseMat_& operator = (const SparseMat_& m);\n    //! converts dense matrix to the sparse form\n    SparseMat_& operator = (const Mat& m);\n\n    //! makes full copy of the matrix. All the elements are duplicated\n    SparseMat_ clone() const;\n    //! equivalent to cv::SparseMat::create(dims, _sizes, DataType<_Tp>::type)\n    void create(int dims, const int* _sizes);\n    //! converts sparse matrix to the old-style CvSparseMat. All the elements are copied\n    //operator CvSparseMat*() const;\n\n    //! returns type of the matrix elements\n    int type() const;\n    //! returns depth of the matrix elements\n    int depth() const;\n    //! returns the number of channels in each matrix element\n    int channels() const;\n\n    //! equivalent to SparseMat::ref<_Tp>(i0, hashval)\n    _Tp& ref(int i0, size_t* hashval=0);\n    //! equivalent to SparseMat::ref<_Tp>(i0, i1, hashval)\n    _Tp& ref(int i0, int i1, size_t* hashval=0);\n    //! equivalent to SparseMat::ref<_Tp>(i0, i1, i2, hashval)\n    _Tp& ref(int i0, int i1, int i2, size_t* hashval=0);\n    //! equivalent to SparseMat::ref<_Tp>(idx, hashval)\n    _Tp& ref(const int* idx, size_t* hashval=0);\n\n    //! equivalent to SparseMat::value<_Tp>(i0, hashval)\n    _Tp operator()(int i0, size_t* hashval=0) const;\n    //! equivalent to SparseMat::value<_Tp>(i0, i1, hashval)\n    _Tp operator()(int i0, int i1, size_t* hashval=0) const;\n    //! equivalent to SparseMat::value<_Tp>(i0, i1, i2, hashval)\n    _Tp operator()(int i0, int i1, int i2, size_t* hashval=0) const;\n    //! equivalent to SparseMat::value<_Tp>(idx, hashval)\n    _Tp operator()(const int* idx, size_t* hashval=0) const;\n\n    //! returns sparse matrix iterator pointing to the first sparse matrix element\n    SparseMatIterator_<_Tp> begin();\n    //! returns read-only sparse matrix iterator pointing to the first sparse matrix element\n    SparseMatConstIterator_<_Tp> begin() const;\n    //! returns sparse matrix iterator pointing to the element following the last sparse matrix element\n    SparseMatIterator_<_Tp> end();\n    //! returns read-only sparse matrix iterator pointing to the element following the last sparse matrix element\n    SparseMatConstIterator_<_Tp> end() const;\n};\n\n\n\n////////////////////////////////// MatConstIterator //////////////////////////////////\n\nclass CV_EXPORTS MatConstIterator\n{\npublic:\n    typedef uchar* value_type;\n    typedef ptrdiff_t difference_type;\n    typedef const uchar** pointer;\n    typedef uchar* reference;\n\n#ifndef OPENCV_NOSTL\n    typedef std::random_access_iterator_tag iterator_category;\n#endif\n\n    //! default constructor\n    MatConstIterator();\n    //! constructor that sets the iterator to the beginning of the matrix\n    MatConstIterator(const Mat* _m);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator(const Mat* _m, int _row, int _col=0);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator(const Mat* _m, Point _pt);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator(const Mat* _m, const int* _idx);\n    //! copy constructor\n    MatConstIterator(const MatConstIterator& it);\n\n    //! copy operator\n    MatConstIterator& operator = (const MatConstIterator& it);\n    //! returns the current matrix element\n    const uchar* operator *() const;\n    //! returns the i-th matrix element, relative to the current\n    const uchar* operator [](ptrdiff_t i) const;\n\n    //! shifts the iterator forward by the specified number of elements\n    MatConstIterator& operator += (ptrdiff_t ofs);\n    //! shifts the iterator backward by the specified number of elements\n    MatConstIterator& operator -= (ptrdiff_t ofs);\n    //! decrements the iterator\n    MatConstIterator& operator --();\n    //! decrements the iterator\n    MatConstIterator operator --(int);\n    //! increments the iterator\n    MatConstIterator& operator ++();\n    //! increments the iterator\n    MatConstIterator operator ++(int);\n    //! returns the current iterator position\n    Point pos() const;\n    //! returns the current iterator position\n    void pos(int* _idx) const;\n\n    ptrdiff_t lpos() const;\n    void seek(ptrdiff_t ofs, bool relative = false);\n    void seek(const int* _idx, bool relative = false);\n\n    const Mat* m;\n    size_t elemSize;\n    const uchar* ptr;\n    const uchar* sliceStart;\n    const uchar* sliceEnd;\n};\n\n\n\n////////////////////////////////// MatConstIterator_ /////////////////////////////////\n\n/** @brief Matrix read-only iterator\n */\ntemplate<typename _Tp>\nclass MatConstIterator_ : public MatConstIterator\n{\npublic:\n    typedef _Tp value_type;\n    typedef ptrdiff_t difference_type;\n    typedef const _Tp* pointer;\n    typedef const _Tp& reference;\n\n#ifndef OPENCV_NOSTL\n    typedef std::random_access_iterator_tag iterator_category;\n#endif\n\n    //! default constructor\n    MatConstIterator_();\n    //! constructor that sets the iterator to the beginning of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m, int _row, int _col=0);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m, Point _pt);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m, const int* _idx);\n    //! copy constructor\n    MatConstIterator_(const MatConstIterator_& it);\n\n    //! copy operator\n    MatConstIterator_& operator = (const MatConstIterator_& it);\n    //! returns the current matrix element\n    _Tp operator *() const;\n    //! returns the i-th matrix element, relative to the current\n    _Tp operator [](ptrdiff_t i) const;\n\n    //! shifts the iterator forward by the specified number of elements\n    MatConstIterator_& operator += (ptrdiff_t ofs);\n    //! shifts the iterator backward by the specified number of elements\n    MatConstIterator_& operator -= (ptrdiff_t ofs);\n    //! decrements the iterator\n    MatConstIterator_& operator --();\n    //! decrements the iterator\n    MatConstIterator_ operator --(int);\n    //! increments the iterator\n    MatConstIterator_& operator ++();\n    //! increments the iterator\n    MatConstIterator_ operator ++(int);\n    //! returns the current iterator position\n    Point pos() const;\n};\n\n\n\n//////////////////////////////////// MatIterator_ ////////////////////////////////////\n\n/** @brief Matrix read-write iterator\n*/\ntemplate<typename _Tp>\nclass MatIterator_ : public MatConstIterator_<_Tp>\n{\npublic:\n    typedef _Tp* pointer;\n    typedef _Tp& reference;\n\n#ifndef OPENCV_NOSTL\n    typedef std::random_access_iterator_tag iterator_category;\n#endif\n\n    //! the default constructor\n    MatIterator_();\n    //! constructor that sets the iterator to the beginning of the matrix\n    MatIterator_(Mat_<_Tp>* _m);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatIterator_(Mat_<_Tp>* _m, int _row, int _col=0);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatIterator_(Mat_<_Tp>* _m, Point _pt);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatIterator_(Mat_<_Tp>* _m, const int* _idx);\n    //! copy constructor\n    MatIterator_(const MatIterator_& it);\n    //! copy operator\n    MatIterator_& operator = (const MatIterator_<_Tp>& it );\n\n    //! returns the current matrix element\n    _Tp& operator *() const;\n    //! returns the i-th matrix element, relative to the current\n    _Tp& operator [](ptrdiff_t i) const;\n\n    //! shifts the iterator forward by the specified number of elements\n    MatIterator_& operator += (ptrdiff_t ofs);\n    //! shifts the iterator backward by the specified number of elements\n    MatIterator_& operator -= (ptrdiff_t ofs);\n    //! decrements the iterator\n    MatIterator_& operator --();\n    //! decrements the iterator\n    MatIterator_ operator --(int);\n    //! increments the iterator\n    MatIterator_& operator ++();\n    //! increments the iterator\n    MatIterator_ operator ++(int);\n};\n\n\n\n/////////////////////////////// SparseMatConstIterator ///////////////////////////////\n\n/**  @brief Read-Only Sparse Matrix Iterator.\n\n Here is how to use the iterator to compute the sum of floating-point sparse matrix elements:\n\n \\code\n SparseMatConstIterator it = m.begin(), it_end = m.end();\n double s = 0;\n CV_Assert( m.type() == CV_32F );\n for( ; it != it_end; ++it )\n    s += it.value<float>();\n \\endcode\n*/\nclass CV_EXPORTS SparseMatConstIterator\n{\npublic:\n    //! the default constructor\n    SparseMatConstIterator();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatConstIterator(const SparseMat* _m);\n    //! the copy constructor\n    SparseMatConstIterator(const SparseMatConstIterator& it);\n\n    //! the assignment operator\n    SparseMatConstIterator& operator = (const SparseMatConstIterator& it);\n\n    //! template method returning the current matrix element\n    template<typename _Tp> const _Tp& value() const;\n    //! returns the current node of the sparse matrix. it.node->idx is the current element index\n    const SparseMat::Node* node() const;\n\n    //! moves iterator to the previous element\n    SparseMatConstIterator& operator --();\n    //! moves iterator to the previous element\n    SparseMatConstIterator operator --(int);\n    //! moves iterator to the next element\n    SparseMatConstIterator& operator ++();\n    //! moves iterator to the next element\n    SparseMatConstIterator operator ++(int);\n\n    //! moves iterator to the element after the last element\n    void seekEnd();\n\n    const SparseMat* m;\n    size_t hashidx;\n    uchar* ptr;\n};\n\n\n\n////////////////////////////////// SparseMatIterator /////////////////////////////////\n\n/** @brief  Read-write Sparse Matrix Iterator\n\n The class is similar to cv::SparseMatConstIterator,\n but can be used for in-place modification of the matrix elements.\n*/\nclass CV_EXPORTS SparseMatIterator : public SparseMatConstIterator\n{\npublic:\n    //! the default constructor\n    SparseMatIterator();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatIterator(SparseMat* _m);\n    //! the full constructor setting the iterator to the specified sparse matrix element\n    SparseMatIterator(SparseMat* _m, const int* idx);\n    //! the copy constructor\n    SparseMatIterator(const SparseMatIterator& it);\n\n    //! the assignment operator\n    SparseMatIterator& operator = (const SparseMatIterator& it);\n    //! returns read-write reference to the current sparse matrix element\n    template<typename _Tp> _Tp& value() const;\n    //! returns pointer to the current sparse matrix node. it.node->idx is the index of the current element (do not modify it!)\n    SparseMat::Node* node() const;\n\n    //! moves iterator to the next element\n    SparseMatIterator& operator ++();\n    //! moves iterator to the next element\n    SparseMatIterator operator ++(int);\n};\n\n\n\n/////////////////////////////// SparseMatConstIterator_ //////////////////////////////\n\n/** @brief  Template Read-Only Sparse Matrix Iterator Class.\n\n This is the derived from SparseMatConstIterator class that\n introduces more convenient operator *() for accessing the current element.\n*/\ntemplate<typename _Tp> class SparseMatConstIterator_ : public SparseMatConstIterator\n{\npublic:\n\n#ifndef OPENCV_NOSTL\n    typedef std::forward_iterator_tag iterator_category;\n#endif\n\n    //! the default constructor\n    SparseMatConstIterator_();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatConstIterator_(const SparseMat_<_Tp>* _m);\n    SparseMatConstIterator_(const SparseMat* _m);\n    //! the copy constructor\n    SparseMatConstIterator_(const SparseMatConstIterator_& it);\n\n    //! the assignment operator\n    SparseMatConstIterator_& operator = (const SparseMatConstIterator_& it);\n    //! the element access operator\n    const _Tp& operator *() const;\n\n    //! moves iterator to the next element\n    SparseMatConstIterator_& operator ++();\n    //! moves iterator to the next element\n    SparseMatConstIterator_ operator ++(int);\n};\n\n\n\n///////////////////////////////// SparseMatIterator_ /////////////////////////////////\n\n/** @brief  Template Read-Write Sparse Matrix Iterator Class.\n\n This is the derived from cv::SparseMatConstIterator_ class that\n introduces more convenient operator *() for accessing the current element.\n*/\ntemplate<typename _Tp> class SparseMatIterator_ : public SparseMatConstIterator_<_Tp>\n{\npublic:\n\n#ifndef OPENCV_NOSTL\n    typedef std::forward_iterator_tag iterator_category;\n#endif\n\n    //! the default constructor\n    SparseMatIterator_();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatIterator_(SparseMat_<_Tp>* _m);\n    SparseMatIterator_(SparseMat* _m);\n    //! the copy constructor\n    SparseMatIterator_(const SparseMatIterator_& it);\n\n    //! the assignment operator\n    SparseMatIterator_& operator = (const SparseMatIterator_& it);\n    //! returns the reference to the current element\n    _Tp& operator *() const;\n\n    //! moves the iterator to the next element\n    SparseMatIterator_& operator ++();\n    //! moves the iterator to the next element\n    SparseMatIterator_ operator ++(int);\n};\n\n\n\n/////////////////////////////////// NAryMatIterator //////////////////////////////////\n\n/** @brief n-ary multi-dimensional array iterator.\n\nUse the class to implement unary, binary, and, generally, n-ary element-wise operations on\nmulti-dimensional arrays. Some of the arguments of an n-ary function may be continuous arrays, some\nmay be not. It is possible to use conventional MatIterator 's for each array but incrementing all of\nthe iterators after each small operations may be a big overhead. In this case consider using\nNAryMatIterator to iterate through several matrices simultaneously as long as they have the same\ngeometry (dimensionality and all the dimension sizes are the same). On each iteration `it.planes[0]`,\n`it.planes[1]`,... will be the slices of the corresponding matrices.\n\nThe example below illustrates how you can compute a normalized and threshold 3D color histogram:\n@code\n    void computeNormalizedColorHist(const Mat& image, Mat& hist, int N, double minProb)\n    {\n        const int histSize[] = {N, N, N};\n\n        // make sure that the histogram has a proper size and type\n        hist.create(3, histSize, CV_32F);\n\n        // and clear it\n        hist = Scalar(0);\n\n        // the loop below assumes that the image\n        // is a 8-bit 3-channel. check it.\n        CV_Assert(image.type() == CV_8UC3);\n        MatConstIterator_<Vec3b> it = image.begin<Vec3b>(),\n                                 it_end = image.end<Vec3b>();\n        for( ; it != it_end; ++it )\n        {\n            const Vec3b& pix = *it;\n            hist.at<float>(pix[0]*N/256, pix[1]*N/256, pix[2]*N/256) += 1.f;\n        }\n\n        minProb *= image.rows*image.cols;\n        Mat plane;\n        NAryMatIterator it(&hist, &plane, 1);\n        double s = 0;\n        // iterate through the matrix. on each iteration\n        // it.planes[*] (of type Mat) will be set to the current plane.\n        for(int p = 0; p < it.nplanes; p++, ++it)\n        {\n            threshold(it.planes[0], it.planes[0], minProb, 0, THRESH_TOZERO);\n            s += sum(it.planes[0])[0];\n        }\n\n        s = 1./s;\n        it = NAryMatIterator(&hist, &plane, 1);\n        for(int p = 0; p < it.nplanes; p++, ++it)\n            it.planes[0] *= s;\n    }\n@endcode\n */\nclass CV_EXPORTS NAryMatIterator\n{\npublic:\n    //! the default constructor\n    NAryMatIterator();\n    //! the full constructor taking arbitrary number of n-dim matrices\n    NAryMatIterator(const Mat** arrays, uchar** ptrs, int narrays=-1);\n    //! the full constructor taking arbitrary number of n-dim matrices\n    NAryMatIterator(const Mat** arrays, Mat* planes, int narrays=-1);\n    //! the separate iterator initialization method\n    void init(const Mat** arrays, Mat* planes, uchar** ptrs, int narrays=-1);\n\n    //! proceeds to the next plane of every iterated matrix\n    NAryMatIterator& operator ++();\n    //! proceeds to the next plane of every iterated matrix (postfix increment operator)\n    NAryMatIterator operator ++(int);\n\n    //! the iterated arrays\n    const Mat** arrays;\n    //! the current planes\n    Mat* planes;\n    //! data pointers\n    uchar** ptrs;\n    //! the number of arrays\n    int narrays;\n    //! the number of hyper-planes that the iterator steps through\n    size_t nplanes;\n    //! the size of each segment (in elements)\n    size_t size;\nprotected:\n    int iterdepth;\n    size_t idx;\n};\n\n\n\n///////////////////////////////// Matrix Expressions /////////////////////////////////\n\nclass CV_EXPORTS MatOp\n{\npublic:\n    MatOp();\n    virtual ~MatOp();\n\n    virtual bool elementWise(const MatExpr& expr) const;\n    virtual void assign(const MatExpr& expr, Mat& m, int type=-1) const = 0;\n    virtual void roi(const MatExpr& expr, const Range& rowRange,\n                     const Range& colRange, MatExpr& res) const;\n    virtual void diag(const MatExpr& expr, int d, MatExpr& res) const;\n    virtual void augAssignAdd(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignSubtract(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignMultiply(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignDivide(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignAnd(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignOr(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignXor(const MatExpr& expr, Mat& m) const;\n\n    virtual void add(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const;\n    virtual void add(const MatExpr& expr1, const Scalar& s, MatExpr& res) const;\n\n    virtual void subtract(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const;\n    virtual void subtract(const Scalar& s, const MatExpr& expr, MatExpr& res) const;\n\n    virtual void multiply(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res, double scale=1) const;\n    virtual void multiply(const MatExpr& expr1, double s, MatExpr& res) const;\n\n    virtual void divide(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res, double scale=1) const;\n    virtual void divide(double s, const MatExpr& expr, MatExpr& res) const;\n\n    virtual void abs(const MatExpr& expr, MatExpr& res) const;\n\n    virtual void transpose(const MatExpr& expr, MatExpr& res) const;\n    virtual void matmul(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const;\n    virtual void invert(const MatExpr& expr, int method, MatExpr& res) const;\n\n    virtual Size size(const MatExpr& expr) const;\n    virtual int type(const MatExpr& expr) const;\n};\n\n/** @brief Matrix expression representation\n@anchor MatrixExpressions\nThis is a list of implemented matrix operations that can be combined in arbitrary complex\nexpressions (here A, B stand for matrices ( Mat ), s for a scalar ( Scalar ), alpha for a\nreal-valued scalar ( double )):\n-   Addition, subtraction, negation: `A+B`, `A-B`, `A+s`, `A-s`, `s+A`, `s-A`, `-A`\n-   Scaling: `A*alpha`\n-   Per-element multiplication and division: `A.mul(B)`, `A/B`, `alpha/A`\n-   Matrix multiplication: `A*B`\n-   Transposition: `A.t()` (means A<sup>T</sup>)\n-   Matrix inversion and pseudo-inversion, solving linear systems and least-squares problems:\n    `A.inv([method]) (~ A<sup>-1</sup>)`,   `A.inv([method])*B (~ X: AX=B)`\n-   Comparison: `A cmpop B`, `A cmpop alpha`, `alpha cmpop A`, where *cmpop* is one of\n  `>`, `>=`, `==`, `!=`, `<=`, `<`. The result of comparison is an 8-bit single channel mask whose\n    elements are set to 255 (if the particular element or pair of elements satisfy the condition) or\n    0.\n-   Bitwise logical operations: `A logicop B`, `A logicop s`, `s logicop A`, `~A`, where *logicop* is one of\n  `&`, `|`, `^`.\n-   Element-wise minimum and maximum: `min(A, B)`, `min(A, alpha)`, `max(A, B)`, `max(A, alpha)`\n-   Element-wise absolute value: `abs(A)`\n-   Cross-product, dot-product: `A.cross(B)`, `A.dot(B)`\n-   Any function of matrix or matrices and scalars that returns a matrix or a scalar, such as norm,\n    mean, sum, countNonZero, trace, determinant, repeat, and others.\n-   Matrix initializers ( Mat::eye(), Mat::zeros(), Mat::ones() ), matrix comma-separated\n    initializers, matrix constructors and operators that extract sub-matrices (see Mat description).\n-   Mat_<destination_type>() constructors to cast the result to the proper type.\n@note Comma-separated initializers and probably some other operations may require additional\nexplicit Mat() or Mat_<T>() constructor calls to resolve a possible ambiguity.\n\nHere are examples of matrix expressions:\n@code\n    // compute pseudo-inverse of A, equivalent to A.inv(DECOMP_SVD)\n    SVD svd(A);\n    Mat pinvA = svd.vt.t()*Mat::diag(1./svd.w)*svd.u.t();\n\n    // compute the new vector of parameters in the Levenberg-Marquardt algorithm\n    x -= (A.t()*A + lambda*Mat::eye(A.cols,A.cols,A.type())).inv(DECOMP_CHOLESKY)*(A.t()*err);\n\n    // sharpen image using \"unsharp mask\" algorithm\n    Mat blurred; double sigma = 1, threshold = 5, amount = 1;\n    GaussianBlur(img, blurred, Size(), sigma, sigma);\n    Mat lowContrastMask = abs(img - blurred) < threshold;\n    Mat sharpened = img*(1+amount) + blurred*(-amount);\n    img.copyTo(sharpened, lowContrastMask);\n@endcode\n*/\nclass CV_EXPORTS MatExpr\n{\npublic:\n    MatExpr();\n    explicit MatExpr(const Mat& m);\n\n    MatExpr(const MatOp* _op, int _flags, const Mat& _a = Mat(), const Mat& _b = Mat(),\n            const Mat& _c = Mat(), double _alpha = 1, double _beta = 1, const Scalar& _s = Scalar());\n\n    operator Mat() const;\n    template<typename _Tp> operator Mat_<_Tp>() const;\n\n    Size size() const;\n    int type() const;\n\n    MatExpr row(int y) const;\n    MatExpr col(int x) const;\n    MatExpr diag(int d = 0) const;\n    MatExpr operator()( const Range& rowRange, const Range& colRange ) const;\n    MatExpr operator()( const Rect& roi ) const;\n\n    MatExpr t() const;\n    MatExpr inv(int method = DECOMP_LU) const;\n    MatExpr mul(const MatExpr& e, double scale=1) const;\n    MatExpr mul(const Mat& m, double scale=1) const;\n\n    Mat cross(const Mat& m) const;\n    double dot(const Mat& m) const;\n\n    const MatOp* op;\n    int flags;\n\n    Mat a, b, c;\n    double alpha, beta;\n    Scalar s;\n};\n\n//! @} core_basic\n\n//! @relates cv::MatExpr\n//! @{\nCV_EXPORTS MatExpr operator + (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator + (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator + (const Scalar& s, const Mat& a);\nCV_EXPORTS MatExpr operator + (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator + (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator + (const MatExpr& e, const Scalar& s);\nCV_EXPORTS MatExpr operator + (const Scalar& s, const MatExpr& e);\nCV_EXPORTS MatExpr operator + (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator - (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator - (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator - (const Scalar& s, const Mat& a);\nCV_EXPORTS MatExpr operator - (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator - (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator - (const MatExpr& e, const Scalar& s);\nCV_EXPORTS MatExpr operator - (const Scalar& s, const MatExpr& e);\nCV_EXPORTS MatExpr operator - (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator - (const Mat& m);\nCV_EXPORTS MatExpr operator - (const MatExpr& e);\n\nCV_EXPORTS MatExpr operator * (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator * (const Mat& a, double s);\nCV_EXPORTS MatExpr operator * (double s, const Mat& a);\nCV_EXPORTS MatExpr operator * (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator * (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator * (const MatExpr& e, double s);\nCV_EXPORTS MatExpr operator * (double s, const MatExpr& e);\nCV_EXPORTS MatExpr operator * (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator / (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator / (const Mat& a, double s);\nCV_EXPORTS MatExpr operator / (double s, const Mat& a);\nCV_EXPORTS MatExpr operator / (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator / (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator / (const MatExpr& e, double s);\nCV_EXPORTS MatExpr operator / (double s, const MatExpr& e);\nCV_EXPORTS MatExpr operator / (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator < (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator < (const Mat& a, double s);\nCV_EXPORTS MatExpr operator < (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator <= (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator <= (const Mat& a, double s);\nCV_EXPORTS MatExpr operator <= (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator == (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator == (const Mat& a, double s);\nCV_EXPORTS MatExpr operator == (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator != (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator != (const Mat& a, double s);\nCV_EXPORTS MatExpr operator != (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator >= (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator >= (const Mat& a, double s);\nCV_EXPORTS MatExpr operator >= (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator > (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator > (const Mat& a, double s);\nCV_EXPORTS MatExpr operator > (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator & (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator & (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator & (const Scalar& s, const Mat& a);\n\nCV_EXPORTS MatExpr operator | (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator | (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator | (const Scalar& s, const Mat& a);\n\nCV_EXPORTS MatExpr operator ^ (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator ^ (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator ^ (const Scalar& s, const Mat& a);\n\nCV_EXPORTS MatExpr operator ~(const Mat& m);\n\nCV_EXPORTS MatExpr min(const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr min(const Mat& a, double s);\nCV_EXPORTS MatExpr min(double s, const Mat& a);\n\nCV_EXPORTS MatExpr max(const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr max(const Mat& a, double s);\nCV_EXPORTS MatExpr max(double s, const Mat& a);\n\n/** @brief Calculates an absolute value of each matrix element.\n\nabs is a meta-function that is expanded to one of absdiff or convertScaleAbs forms:\n- C = abs(A-B) is equivalent to `absdiff(A, B, C)`\n- C = abs(A) is equivalent to `absdiff(A, Scalar::all(0), C)`\n- C = `Mat_<Vec<uchar,n> >(abs(A*alpha + beta))` is equivalent to `convertScaleAbs(A, C, alpha,\nbeta)`\n\nThe output matrix has the same size and the same type as the input one except for the last case,\nwhere C is depth=CV_8U .\n@param m matrix.\n@sa @ref MatrixExpressions, absdiff, convertScaleAbs\n */\nCV_EXPORTS MatExpr abs(const Mat& m);\n/** @overload\n@param e matrix expression.\n*/\nCV_EXPORTS MatExpr abs(const MatExpr& e);\n//! @} relates cv::MatExpr\n\n} // cv\n\n#include \"opencv2/core/mat.inl.hpp\"\n\n#endif // __OPENCV_CORE_MAT_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/mat.inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_MATRIX_OPERATIONS_HPP__\n#define __OPENCV_CORE_MATRIX_OPERATIONS_HPP__\n\n#ifndef __cplusplus\n#  error mat.inl.hpp header must be compiled as C++\n#endif\n\nnamespace cv\n{\n\n//! @cond IGNORED\n\n//////////////////////// Input/Output Arrays ////////////////////////\n\ninline void _InputArray::init(int _flags, const void* _obj)\n{ flags = _flags; obj = (void*)_obj; }\n\ninline void _InputArray::init(int _flags, const void* _obj, Size _sz)\n{ flags = _flags; obj = (void*)_obj; sz = _sz; }\n\ninline void* _InputArray::getObj() const { return obj; }\ninline int _InputArray::getFlags() const { return flags; }\ninline Size _InputArray::getSz() const { return sz; }\n\ninline _InputArray::_InputArray() { init(NONE, 0); }\ninline _InputArray::_InputArray(int _flags, void* _obj) { init(_flags, _obj); }\ninline _InputArray::_InputArray(const Mat& m) { init(MAT+ACCESS_READ, &m); }\ninline _InputArray::_InputArray(const std::vector<Mat>& vec) { init(STD_VECTOR_MAT+ACCESS_READ, &vec); }\ninline _InputArray::_InputArray(const UMat& m) { init(UMAT+ACCESS_READ, &m); }\ninline _InputArray::_InputArray(const std::vector<UMat>& vec) { init(STD_VECTOR_UMAT+ACCESS_READ, &vec); }\n\ntemplate<typename _Tp> inline\n_InputArray::_InputArray(const std::vector<_Tp>& vec)\n{ init(FIXED_TYPE + STD_VECTOR + DataType<_Tp>::type + ACCESS_READ, &vec); }\n\ninline\n_InputArray::_InputArray(const std::vector<bool>& vec)\n{ init(FIXED_TYPE + STD_BOOL_VECTOR + DataType<bool>::type + ACCESS_READ, &vec); }\n\ntemplate<typename _Tp> inline\n_InputArray::_InputArray(const std::vector<std::vector<_Tp> >& vec)\n{ init(FIXED_TYPE + STD_VECTOR_VECTOR + DataType<_Tp>::type + ACCESS_READ, &vec); }\n\ntemplate<typename _Tp> inline\n_InputArray::_InputArray(const std::vector<Mat_<_Tp> >& vec)\n{ init(FIXED_TYPE + STD_VECTOR_MAT + DataType<_Tp>::type + ACCESS_READ, &vec); }\n\ntemplate<typename _Tp, int m, int n> inline\n_InputArray::_InputArray(const Matx<_Tp, m, n>& mtx)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_READ, &mtx, Size(n, m)); }\n\ntemplate<typename _Tp> inline\n_InputArray::_InputArray(const _Tp* vec, int n)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_READ, vec, Size(n, 1)); }\n\ntemplate<typename _Tp> inline\n_InputArray::_InputArray(const Mat_<_Tp>& m)\n{ init(FIXED_TYPE + MAT + DataType<_Tp>::type + ACCESS_READ, &m); }\n\ninline _InputArray::_InputArray(const double& val)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + CV_64F + ACCESS_READ, &val, Size(1,1)); }\n\ninline _InputArray::_InputArray(const MatExpr& expr)\n{ init(FIXED_TYPE + FIXED_SIZE + EXPR + ACCESS_READ, &expr); }\n\ninline _InputArray::_InputArray(const cuda::GpuMat& d_mat)\n{ init(CUDA_GPU_MAT + ACCESS_READ, &d_mat); }\n\ninline _InputArray::_InputArray(const std::vector<cuda::GpuMat>& d_mat)\n{\tinit(STD_VECTOR_CUDA_GPU_MAT + ACCESS_READ, &d_mat);}\n\ninline _InputArray::_InputArray(const ogl::Buffer& buf)\n{ init(OPENGL_BUFFER + ACCESS_READ, &buf); }\n\ninline _InputArray::_InputArray(const cuda::HostMem& cuda_mem)\n{ init(CUDA_HOST_MEM + ACCESS_READ, &cuda_mem); }\n\ninline _InputArray::~_InputArray() {}\n\ninline Mat _InputArray::getMat(int i) const\n{\n    if( kind() == MAT && i < 0 )\n        return *(const Mat*)obj;\n    return getMat_(i);\n}\n\ninline bool _InputArray::isMat() const { return kind() == _InputArray::MAT; }\ninline bool _InputArray::isUMat() const  { return kind() == _InputArray::UMAT; }\ninline bool _InputArray::isMatVector() const { return kind() == _InputArray::STD_VECTOR_MAT; }\ninline bool _InputArray::isUMatVector() const  { return kind() == _InputArray::STD_VECTOR_UMAT; }\ninline bool _InputArray::isMatx() const { return kind() == _InputArray::MATX; }\ninline bool _InputArray::isVector() const { return kind() == _InputArray::STD_VECTOR || kind() == _InputArray::STD_BOOL_VECTOR; }\ninline bool _InputArray::isGpuMatVector() const { return kind() == _InputArray::STD_VECTOR_CUDA_GPU_MAT; }\n\n////////////////////////////////////////////////////////////////////////////////////////\n\ninline _OutputArray::_OutputArray() { init(ACCESS_WRITE, 0); }\ninline _OutputArray::_OutputArray(int _flags, void* _obj) { init(_flags|ACCESS_WRITE, _obj); }\ninline _OutputArray::_OutputArray(Mat& m) { init(MAT+ACCESS_WRITE, &m); }\ninline _OutputArray::_OutputArray(std::vector<Mat>& vec) { init(STD_VECTOR_MAT+ACCESS_WRITE, &vec); }\ninline _OutputArray::_OutputArray(UMat& m) { init(UMAT+ACCESS_WRITE, &m); }\ninline _OutputArray::_OutputArray(std::vector<UMat>& vec) { init(STD_VECTOR_UMAT+ACCESS_WRITE, &vec); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(std::vector<_Tp>& vec)\n{ init(FIXED_TYPE + STD_VECTOR + DataType<_Tp>::type + ACCESS_WRITE, &vec); }\n\ninline\n_OutputArray::_OutputArray(std::vector<bool>&)\n{ CV_Error(Error::StsUnsupportedFormat, \"std::vector<bool> cannot be an output array\\n\"); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(std::vector<std::vector<_Tp> >& vec)\n{ init(FIXED_TYPE + STD_VECTOR_VECTOR + DataType<_Tp>::type + ACCESS_WRITE, &vec); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(std::vector<Mat_<_Tp> >& vec)\n{ init(FIXED_TYPE + STD_VECTOR_MAT + DataType<_Tp>::type + ACCESS_WRITE, &vec); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(Mat_<_Tp>& m)\n{ init(FIXED_TYPE + MAT + DataType<_Tp>::type + ACCESS_WRITE, &m); }\n\ntemplate<typename _Tp, int m, int n> inline\n_OutputArray::_OutputArray(Matx<_Tp, m, n>& mtx)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_WRITE, &mtx, Size(n, m)); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(_Tp* vec, int n)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_WRITE, vec, Size(n, 1)); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(const std::vector<_Tp>& vec)\n{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR + DataType<_Tp>::type + ACCESS_WRITE, &vec); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(const std::vector<std::vector<_Tp> >& vec)\n{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_VECTOR + DataType<_Tp>::type + ACCESS_WRITE, &vec); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(const std::vector<Mat_<_Tp> >& vec)\n{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_MAT + DataType<_Tp>::type + ACCESS_WRITE, &vec); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(const Mat_<_Tp>& m)\n{ init(FIXED_TYPE + FIXED_SIZE + MAT + DataType<_Tp>::type + ACCESS_WRITE, &m); }\n\ntemplate<typename _Tp, int m, int n> inline\n_OutputArray::_OutputArray(const Matx<_Tp, m, n>& mtx)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_WRITE, &mtx, Size(n, m)); }\n\ntemplate<typename _Tp> inline\n_OutputArray::_OutputArray(const _Tp* vec, int n)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_WRITE, vec, Size(n, 1)); }\n\ninline _OutputArray::_OutputArray(cuda::GpuMat& d_mat)\n{ init(CUDA_GPU_MAT + ACCESS_WRITE, &d_mat); }\n\ninline _OutputArray::_OutputArray(std::vector<cuda::GpuMat>& d_mat)\n{\tinit(STD_VECTOR_CUDA_GPU_MAT + ACCESS_WRITE, &d_mat);}\n\ninline _OutputArray::_OutputArray(ogl::Buffer& buf)\n{ init(OPENGL_BUFFER + ACCESS_WRITE, &buf); }\n\ninline _OutputArray::_OutputArray(cuda::HostMem& cuda_mem)\n{ init(CUDA_HOST_MEM + ACCESS_WRITE, &cuda_mem); }\n\ninline _OutputArray::_OutputArray(const Mat& m)\n{ init(FIXED_TYPE + FIXED_SIZE + MAT + ACCESS_WRITE, &m); }\n\ninline _OutputArray::_OutputArray(const std::vector<Mat>& vec)\n{ init(FIXED_SIZE + STD_VECTOR_MAT + ACCESS_WRITE, &vec); }\n\ninline _OutputArray::_OutputArray(const UMat& m)\n{ init(FIXED_TYPE + FIXED_SIZE + UMAT + ACCESS_WRITE, &m); }\n\ninline _OutputArray::_OutputArray(const std::vector<UMat>& vec)\n{ init(FIXED_SIZE + STD_VECTOR_UMAT + ACCESS_WRITE, &vec); }\n\ninline _OutputArray::_OutputArray(const cuda::GpuMat& d_mat)\n{ init(FIXED_TYPE + FIXED_SIZE + CUDA_GPU_MAT + ACCESS_WRITE, &d_mat); }\n\n\ninline _OutputArray::_OutputArray(const ogl::Buffer& buf)\n{ init(FIXED_TYPE + FIXED_SIZE + OPENGL_BUFFER + ACCESS_WRITE, &buf); }\n\ninline _OutputArray::_OutputArray(const cuda::HostMem& cuda_mem)\n{ init(FIXED_TYPE + FIXED_SIZE + CUDA_HOST_MEM + ACCESS_WRITE, &cuda_mem); }\n\n///////////////////////////////////////////////////////////////////////////////////////////\n\ninline _InputOutputArray::_InputOutputArray() { init(ACCESS_RW, 0); }\ninline _InputOutputArray::_InputOutputArray(int _flags, void* _obj) { init(_flags|ACCESS_RW, _obj); }\ninline _InputOutputArray::_InputOutputArray(Mat& m) { init(MAT+ACCESS_RW, &m); }\ninline _InputOutputArray::_InputOutputArray(std::vector<Mat>& vec) { init(STD_VECTOR_MAT+ACCESS_RW, &vec); }\ninline _InputOutputArray::_InputOutputArray(UMat& m) { init(UMAT+ACCESS_RW, &m); }\ninline _InputOutputArray::_InputOutputArray(std::vector<UMat>& vec) { init(STD_VECTOR_UMAT+ACCESS_RW, &vec); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(std::vector<_Tp>& vec)\n{ init(FIXED_TYPE + STD_VECTOR + DataType<_Tp>::type + ACCESS_RW, &vec); }\n\ninline _InputOutputArray::_InputOutputArray(std::vector<bool>&)\n{ CV_Error(Error::StsUnsupportedFormat, \"std::vector<bool> cannot be an input/output array\\n\"); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(std::vector<std::vector<_Tp> >& vec)\n{ init(FIXED_TYPE + STD_VECTOR_VECTOR + DataType<_Tp>::type + ACCESS_RW, &vec); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(std::vector<Mat_<_Tp> >& vec)\n{ init(FIXED_TYPE + STD_VECTOR_MAT + DataType<_Tp>::type + ACCESS_RW, &vec); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(Mat_<_Tp>& m)\n{ init(FIXED_TYPE + MAT + DataType<_Tp>::type + ACCESS_RW, &m); }\n\ntemplate<typename _Tp, int m, int n> inline\n_InputOutputArray::_InputOutputArray(Matx<_Tp, m, n>& mtx)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_RW, &mtx, Size(n, m)); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(_Tp* vec, int n)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_RW, vec, Size(n, 1)); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(const std::vector<_Tp>& vec)\n{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR + DataType<_Tp>::type + ACCESS_RW, &vec); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(const std::vector<std::vector<_Tp> >& vec)\n{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_VECTOR + DataType<_Tp>::type + ACCESS_RW, &vec); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(const std::vector<Mat_<_Tp> >& vec)\n{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_MAT + DataType<_Tp>::type + ACCESS_RW, &vec); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(const Mat_<_Tp>& m)\n{ init(FIXED_TYPE + FIXED_SIZE + MAT + DataType<_Tp>::type + ACCESS_RW, &m); }\n\ntemplate<typename _Tp, int m, int n> inline\n_InputOutputArray::_InputOutputArray(const Matx<_Tp, m, n>& mtx)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_RW, &mtx, Size(n, m)); }\n\ntemplate<typename _Tp> inline\n_InputOutputArray::_InputOutputArray(const _Tp* vec, int n)\n{ init(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type + ACCESS_RW, vec, Size(n, 1)); }\n\ninline _InputOutputArray::_InputOutputArray(cuda::GpuMat& d_mat)\n{ init(CUDA_GPU_MAT + ACCESS_RW, &d_mat); }\n\ninline _InputOutputArray::_InputOutputArray(ogl::Buffer& buf)\n{ init(OPENGL_BUFFER + ACCESS_RW, &buf); }\n\ninline _InputOutputArray::_InputOutputArray(cuda::HostMem& cuda_mem)\n{ init(CUDA_HOST_MEM + ACCESS_RW, &cuda_mem); }\n\ninline _InputOutputArray::_InputOutputArray(const Mat& m)\n{ init(FIXED_TYPE + FIXED_SIZE + MAT + ACCESS_RW, &m); }\n\ninline _InputOutputArray::_InputOutputArray(const std::vector<Mat>& vec)\n{ init(FIXED_SIZE + STD_VECTOR_MAT + ACCESS_RW, &vec); }\n\ninline _InputOutputArray::_InputOutputArray(const UMat& m)\n{ init(FIXED_TYPE + FIXED_SIZE + UMAT + ACCESS_RW, &m); }\n\ninline _InputOutputArray::_InputOutputArray(const std::vector<UMat>& vec)\n{ init(FIXED_SIZE + STD_VECTOR_UMAT + ACCESS_RW, &vec); }\n\ninline _InputOutputArray::_InputOutputArray(const cuda::GpuMat& d_mat)\n{ init(FIXED_TYPE + FIXED_SIZE + CUDA_GPU_MAT + ACCESS_RW, &d_mat); }\ninline _InputOutputArray::_InputOutputArray(const std::vector<cuda::GpuMat>& d_mat)\n{\tinit(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_CUDA_GPU_MAT + ACCESS_RW, &d_mat);}\n\ninline _InputOutputArray::_InputOutputArray(const ogl::Buffer& buf)\n{ init(FIXED_TYPE + FIXED_SIZE + OPENGL_BUFFER + ACCESS_RW, &buf); }\n\ninline _InputOutputArray::_InputOutputArray(const cuda::HostMem& cuda_mem)\n{ init(FIXED_TYPE + FIXED_SIZE + CUDA_HOST_MEM + ACCESS_RW, &cuda_mem); }\n\n//////////////////////////////////////////// Mat //////////////////////////////////////////\n\ninline\nMat::Mat()\n    : flags(MAGIC_VAL), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0),\n      datalimit(0), allocator(0), u(0), size(&rows)\n{}\n\ninline\nMat::Mat(int _rows, int _cols, int _type)\n    : flags(MAGIC_VAL), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0),\n      datalimit(0), allocator(0), u(0), size(&rows)\n{\n    create(_rows, _cols, _type);\n}\n\ninline\nMat::Mat(int _rows, int _cols, int _type, const Scalar& _s)\n    : flags(MAGIC_VAL), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0),\n      datalimit(0), allocator(0), u(0), size(&rows)\n{\n    create(_rows, _cols, _type);\n    *this = _s;\n}\n\ninline\nMat::Mat(Size _sz, int _type)\n    : flags(MAGIC_VAL), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0),\n      datalimit(0), allocator(0), u(0), size(&rows)\n{\n    create( _sz.height, _sz.width, _type );\n}\n\ninline\nMat::Mat(Size _sz, int _type, const Scalar& _s)\n    : flags(MAGIC_VAL), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0),\n      datalimit(0), allocator(0), u(0), size(&rows)\n{\n    create(_sz.height, _sz.width, _type);\n    *this = _s;\n}\n\ninline\nMat::Mat(int _dims, const int* _sz, int _type)\n    : flags(MAGIC_VAL), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0),\n      datalimit(0), allocator(0), u(0), size(&rows)\n{\n    create(_dims, _sz, _type);\n}\n\ninline\nMat::Mat(int _dims, const int* _sz, int _type, const Scalar& _s)\n    : flags(MAGIC_VAL), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0),\n      datalimit(0), allocator(0), u(0), size(&rows)\n{\n    create(_dims, _sz, _type);\n    *this = _s;\n}\n\ninline\nMat::Mat(const Mat& m)\n    : flags(m.flags), dims(m.dims), rows(m.rows), cols(m.cols), data(m.data),\n      datastart(m.datastart), dataend(m.dataend), datalimit(m.datalimit), allocator(m.allocator),\n      u(m.u), size(&rows)\n{\n    if( u )\n        CV_XADD(&u->refcount, 1);\n    if( m.dims <= 2 )\n    {\n        step[0] = m.step[0]; step[1] = m.step[1];\n    }\n    else\n    {\n        dims = 0;\n        copySize(m);\n    }\n}\n\ninline\nMat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step)\n    : flags(MAGIC_VAL + (_type & TYPE_MASK)), dims(2), rows(_rows), cols(_cols),\n      data((uchar*)_data), datastart((uchar*)_data), dataend(0), datalimit(0),\n      allocator(0), u(0), size(&rows)\n{\n    CV_Assert(total() == 0 || data != NULL);\n\n    size_t esz = CV_ELEM_SIZE(_type), esz1 = CV_ELEM_SIZE1(_type);\n    size_t minstep = cols * esz;\n    if( _step == AUTO_STEP )\n    {\n        _step = minstep;\n        flags |= CONTINUOUS_FLAG;\n    }\n    else\n    {\n        if( rows == 1 ) _step = minstep;\n        CV_DbgAssert( _step >= minstep );\n\n        if (_step % esz1 != 0)\n        {\n            CV_Error(Error::BadStep, \"Step must be a multiple of esz1\");\n        }\n\n        flags |= _step == minstep ? CONTINUOUS_FLAG : 0;\n    }\n    step[0] = _step;\n    step[1] = esz;\n    datalimit = datastart + _step * rows;\n    dataend = datalimit - _step + minstep;\n}\n\ninline\nMat::Mat(Size _sz, int _type, void* _data, size_t _step)\n    : flags(MAGIC_VAL + (_type & TYPE_MASK)), dims(2), rows(_sz.height), cols(_sz.width),\n      data((uchar*)_data), datastart((uchar*)_data), dataend(0), datalimit(0),\n      allocator(0), u(0), size(&rows)\n{\n    CV_Assert(total() == 0 || data != NULL);\n\n    size_t esz = CV_ELEM_SIZE(_type), esz1 = CV_ELEM_SIZE1(_type);\n    size_t minstep = cols*esz;\n    if( _step == AUTO_STEP )\n    {\n        _step = minstep;\n        flags |= CONTINUOUS_FLAG;\n    }\n    else\n    {\n        if( rows == 1 ) _step = minstep;\n        CV_DbgAssert( _step >= minstep );\n\n        if (_step % esz1 != 0)\n        {\n            CV_Error(Error::BadStep, \"Step must be a multiple of esz1\");\n        }\n\n        flags |= _step == minstep ? CONTINUOUS_FLAG : 0;\n    }\n    step[0] = _step;\n    step[1] = esz;\n    datalimit = datastart + _step*rows;\n    dataend = datalimit - _step + minstep;\n}\n\ntemplate<typename _Tp> inline\nMat::Mat(const std::vector<_Tp>& vec, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), dims(2), rows((int)vec.size()),\n      cols(1), data(0), datastart(0), dataend(0), allocator(0), u(0), size(&rows)\n{\n    if(vec.empty())\n        return;\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        datastart = data = (uchar*)&vec[0];\n        datalimit = dataend = datastart + rows * step[0];\n    }\n    else\n        Mat((int)vec.size(), 1, DataType<_Tp>::type, (uchar*)&vec[0]).copyTo(*this);\n}\n\ntemplate<typename _Tp, int n> inline\nMat::Mat(const Vec<_Tp, n>& vec, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), dims(2), rows(n), cols(1), data(0),\n      datastart(0), dataend(0), allocator(0), u(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        datastart = data = (uchar*)vec.val;\n        datalimit = dataend = datastart + rows * step[0];\n    }\n    else\n        Mat(n, 1, DataType<_Tp>::type, (void*)vec.val).copyTo(*this);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMat::Mat(const Matx<_Tp,m,n>& M, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), dims(2), rows(m), cols(n), data(0),\n      datastart(0), dataend(0), allocator(0), u(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = cols * sizeof(_Tp);\n        step[1] = sizeof(_Tp);\n        datastart = data = (uchar*)M.val;\n        datalimit = dataend = datastart + rows * step[0];\n    }\n    else\n        Mat(m, n, DataType<_Tp>::type, (uchar*)M.val).copyTo(*this);\n}\n\ntemplate<typename _Tp> inline\nMat::Mat(const Point_<_Tp>& pt, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), dims(2), rows(2), cols(1), data(0),\n      datastart(0), dataend(0), allocator(0), u(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        datastart = data = (uchar*)&pt.x;\n        datalimit = dataend = datastart + rows * step[0];\n    }\n    else\n    {\n        create(2, 1, DataType<_Tp>::type);\n        ((_Tp*)data)[0] = pt.x;\n        ((_Tp*)data)[1] = pt.y;\n    }\n}\n\ntemplate<typename _Tp> inline\nMat::Mat(const Point3_<_Tp>& pt, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), dims(2), rows(3), cols(1), data(0),\n      datastart(0), dataend(0), allocator(0), u(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        datastart = data = (uchar*)&pt.x;\n        datalimit = dataend = datastart + rows * step[0];\n    }\n    else\n    {\n        create(3, 1, DataType<_Tp>::type);\n        ((_Tp*)data)[0] = pt.x;\n        ((_Tp*)data)[1] = pt.y;\n        ((_Tp*)data)[2] = pt.z;\n    }\n}\n\ntemplate<typename _Tp> inline\nMat::Mat(const MatCommaInitializer_<_Tp>& commaInitializer)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), dims(0), rows(0), cols(0), data(0),\n      datastart(0), dataend(0), allocator(0), u(0), size(&rows)\n{\n    *this = commaInitializer.operator Mat_<_Tp>();\n}\n\ninline\nMat::~Mat()\n{\n    release();\n    if( step.p != step.buf )\n        fastFree(step.p);\n}\n\ninline\nMat& Mat::operator = (const Mat& m)\n{\n    if( this != &m )\n    {\n        if( m.u )\n            CV_XADD(&m.u->refcount, 1);\n        release();\n        flags = m.flags;\n        if( dims <= 2 && m.dims <= 2 )\n        {\n            dims = m.dims;\n            rows = m.rows;\n            cols = m.cols;\n            step[0] = m.step[0];\n            step[1] = m.step[1];\n        }\n        else\n            copySize(m);\n        data = m.data;\n        datastart = m.datastart;\n        dataend = m.dataend;\n        datalimit = m.datalimit;\n        allocator = m.allocator;\n        u = m.u;\n    }\n    return *this;\n}\n\ninline\nMat Mat::row(int y) const\n{\n    return Mat(*this, Range(y, y + 1), Range::all());\n}\n\ninline\nMat Mat::col(int x) const\n{\n    return Mat(*this, Range::all(), Range(x, x + 1));\n}\n\ninline\nMat Mat::rowRange(int startrow, int endrow) const\n{\n    return Mat(*this, Range(startrow, endrow), Range::all());\n}\n\ninline\nMat Mat::rowRange(const Range& r) const\n{\n    return Mat(*this, r, Range::all());\n}\n\ninline\nMat Mat::colRange(int startcol, int endcol) const\n{\n    return Mat(*this, Range::all(), Range(startcol, endcol));\n}\n\ninline\nMat Mat::colRange(const Range& r) const\n{\n    return Mat(*this, Range::all(), r);\n}\n\ninline\nMat Mat::clone() const\n{\n    Mat m;\n    copyTo(m);\n    return m;\n}\n\ninline\nvoid Mat::assignTo( Mat& m, int _type ) const\n{\n    if( _type < 0 )\n        m = *this;\n    else\n        convertTo(m, _type);\n}\n\ninline\nvoid Mat::create(int _rows, int _cols, int _type)\n{\n    _type &= TYPE_MASK;\n    if( dims <= 2 && rows == _rows && cols == _cols && type() == _type && data )\n        return;\n    int sz[] = {_rows, _cols};\n    create(2, sz, _type);\n}\n\ninline\nvoid Mat::create(Size _sz, int _type)\n{\n    create(_sz.height, _sz.width, _type);\n}\n\ninline\nvoid Mat::addref()\n{\n    if( u )\n        CV_XADD(&u->refcount, 1);\n}\n\ninline void Mat::release()\n{\n    if( u && CV_XADD(&u->refcount, -1) == 1 )\n        deallocate();\n    u = NULL;\n    datastart = dataend = datalimit = data = 0;\n    for(int i = 0; i < dims; i++)\n        size.p[i] = 0;\n}\n\ninline\nMat Mat::operator()( Range _rowRange, Range _colRange ) const\n{\n    return Mat(*this, _rowRange, _colRange);\n}\n\ninline\nMat Mat::operator()( const Rect& roi ) const\n{\n    return Mat(*this, roi);\n}\n\ninline\nMat Mat::operator()(const Range* ranges) const\n{\n    return Mat(*this, ranges);\n}\n\ninline\nbool Mat::isContinuous() const\n{\n    return (flags & CONTINUOUS_FLAG) != 0;\n}\n\ninline\nbool Mat::isSubmatrix() const\n{\n    return (flags & SUBMATRIX_FLAG) != 0;\n}\n\ninline\nsize_t Mat::elemSize() const\n{\n    return dims > 0 ? step.p[dims - 1] : 0;\n}\n\ninline\nsize_t Mat::elemSize1() const\n{\n    return CV_ELEM_SIZE1(flags);\n}\n\ninline\nint Mat::type() const\n{\n    return CV_MAT_TYPE(flags);\n}\n\ninline\nint Mat::depth() const\n{\n    return CV_MAT_DEPTH(flags);\n}\n\ninline\nint Mat::channels() const\n{\n    return CV_MAT_CN(flags);\n}\n\ninline\nsize_t Mat::step1(int i) const\n{\n    return step.p[i] / elemSize1();\n}\n\ninline\nbool Mat::empty() const\n{\n    return data == 0 || total() == 0;\n}\n\ninline\nsize_t Mat::total() const\n{\n    if( dims <= 2 )\n        return (size_t)rows * cols;\n    size_t p = 1;\n    for( int i = 0; i < dims; i++ )\n        p *= size[i];\n    return p;\n}\n\ninline\nuchar* Mat::ptr(int y)\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return data + step.p[0] * y;\n}\n\ninline\nconst uchar* Mat::ptr(int y) const\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return data + step.p[0] * y;\n}\n\ntemplate<typename _Tp> inline\n_Tp* Mat::ptr(int y)\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return (_Tp*)(data + step.p[0] * y);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp* Mat::ptr(int y) const\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && data && (unsigned)y < (unsigned)size.p[0]) );\n    return (const _Tp*)(data + step.p[0] * y);\n}\n\ninline\nuchar* Mat::ptr(int i0, int i1)\n{\n    CV_DbgAssert(dims >= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    return data + i0 * step.p[0] + i1 * step.p[1];\n}\n\ninline\nconst uchar* Mat::ptr(int i0, int i1) const\n{\n    CV_DbgAssert(dims >= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    return data + i0 * step.p[0] + i1 * step.p[1];\n}\n\ntemplate<typename _Tp> inline\n_Tp* Mat::ptr(int i0, int i1)\n{\n    CV_DbgAssert(dims >= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    return (_Tp*)(data + i0 * step.p[0] + i1 * step.p[1]);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp* Mat::ptr(int i0, int i1) const\n{\n    CV_DbgAssert(dims >= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    return (const _Tp*)(data + i0 * step.p[0] + i1 * step.p[1]);\n}\n\ninline\nuchar* Mat::ptr(int i0, int i1, int i2)\n{\n    CV_DbgAssert(dims >= 3);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    CV_DbgAssert((unsigned)i2 < (unsigned)size.p[2]);\n    return data + i0 * step.p[0] + i1 * step.p[1] + i2 * step.p[2];\n}\n\ninline\nconst uchar* Mat::ptr(int i0, int i1, int i2) const\n{\n    CV_DbgAssert(dims >= 3);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    CV_DbgAssert((unsigned)i2 < (unsigned)size.p[2]);\n    return data + i0 * step.p[0] + i1 * step.p[1] + i2 * step.p[2];\n}\n\ntemplate<typename _Tp> inline\n_Tp* Mat::ptr(int i0, int i1, int i2)\n{\n    CV_DbgAssert(dims >= 3);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    CV_DbgAssert((unsigned)i2 < (unsigned)size.p[2]);\n    return (_Tp*)(data + i0 * step.p[0] + i1 * step.p[1] + i2 * step.p[2]);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp* Mat::ptr(int i0, int i1, int i2) const\n{\n    CV_DbgAssert(dims >= 3);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    CV_DbgAssert((unsigned)i2 < (unsigned)size.p[2]);\n    return (const _Tp*)(data + i0 * step.p[0] + i1 * step.p[1] + i2 * step.p[2]);\n}\n\ninline\nuchar* Mat::ptr(const int* idx)\n{\n    int i, d = dims;\n    uchar* p = data;\n    CV_DbgAssert( d >= 1 && p );\n    for( i = 0; i < d; i++ )\n    {\n        CV_DbgAssert( (unsigned)idx[i] < (unsigned)size.p[i] );\n        p += idx[i] * step.p[i];\n    }\n    return p;\n}\n\ninline\nconst uchar* Mat::ptr(const int* idx) const\n{\n    int i, d = dims;\n    uchar* p = data;\n    CV_DbgAssert( d >= 1 && p );\n    for( i = 0; i < d; i++ )\n    {\n        CV_DbgAssert( (unsigned)idx[i] < (unsigned)size.p[i] );\n        p += idx[i] * step.p[i];\n    }\n    return p;\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat::at(int i0, int i1)\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels()));\n    CV_DbgAssert(CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((_Tp*)(data + step.p[0] * i0))[i1];\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat::at(int i0, int i1) const\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels()));\n    CV_DbgAssert(CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((const _Tp*)(data + step.p[0] * i0))[i1];\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat::at(Point pt)\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)pt.y < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)(pt.x * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels()));\n    CV_DbgAssert(CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((_Tp*)(data + step.p[0] * pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat::at(Point pt) const\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)pt.y < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)(pt.x * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels()));\n    CV_DbgAssert(CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((const _Tp*)(data + step.p[0] * pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat::at(int i0)\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)(size.p[0] * size.p[1]));\n    CV_DbgAssert(elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type));\n    if( isContinuous() || size.p[0] == 1 )\n        return ((_Tp*)data)[i0];\n    if( size.p[1] == 1 )\n        return *(_Tp*)(data + step.p[0] * i0);\n    int i = i0 / cols, j = i0 - i * cols;\n    return ((_Tp*)(data + step.p[0] * i))[j];\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat::at(int i0) const\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)(size.p[0] * size.p[1]));\n    CV_DbgAssert(elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type));\n    if( isContinuous() || size.p[0] == 1 )\n        return ((const _Tp*)data)[i0];\n    if( size.p[1] == 1 )\n        return *(const _Tp*)(data + step.p[0] * i0);\n    int i = i0 / cols, j = i0 - i * cols;\n    return ((const _Tp*)(data + step.p[0] * i))[j];\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat::at(int i0, int i1, int i2)\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(_Tp*)ptr(i0, i1, i2);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat::at(int i0, int i1, int i2) const\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(const _Tp*)ptr(i0, i1, i2);\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat::at(const int* idx)\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(_Tp*)ptr(idx);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat::at(const int* idx) const\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(const _Tp*)ptr(idx);\n}\n\ntemplate<typename _Tp, int n> inline\n_Tp& Mat::at(const Vec<int, n>& idx)\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(_Tp*)ptr(idx.val);\n}\n\ntemplate<typename _Tp, int n> inline\nconst _Tp& Mat::at(const Vec<int, n>& idx) const\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(const _Tp*)ptr(idx.val);\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp> Mat::begin() const\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    return MatConstIterator_<_Tp>((const Mat_<_Tp>*)this);\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp> Mat::end() const\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    MatConstIterator_<_Tp> it((const Mat_<_Tp>*)this);\n    it += total();\n    return it;\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp> Mat::begin()\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    return MatIterator_<_Tp>((Mat_<_Tp>*)this);\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp> Mat::end()\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    MatIterator_<_Tp> it((Mat_<_Tp>*)this);\n    it += total();\n    return it;\n}\n\ntemplate<typename _Tp, typename Functor> inline\nvoid Mat::forEach(const Functor& operation) {\n    this->forEach_impl<_Tp>(operation);\n}\n\ntemplate<typename _Tp, typename Functor> inline\nvoid Mat::forEach(const Functor& operation) const {\n    // call as not const\n    (const_cast<Mat*>(this))->forEach<const _Tp>(operation);\n}\n\ntemplate<typename _Tp> inline\nMat::operator std::vector<_Tp>() const\n{\n    std::vector<_Tp> v;\n    copyTo(v);\n    return v;\n}\n\ntemplate<typename _Tp, int n> inline\nMat::operator Vec<_Tp, n>() const\n{\n    CV_Assert( data && dims <= 2 && (rows == 1 || cols == 1) &&\n               rows + cols - 1 == n && channels() == 1 );\n\n    if( isContinuous() && type() == DataType<_Tp>::type )\n        return Vec<_Tp, n>((_Tp*)data);\n    Vec<_Tp, n> v;\n    Mat tmp(rows, cols, DataType<_Tp>::type, v.val);\n    convertTo(tmp, tmp.type());\n    return v;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMat::operator Matx<_Tp, m, n>() const\n{\n    CV_Assert( data && dims <= 2 && rows == m && cols == n && channels() == 1 );\n\n    if( isContinuous() && type() == DataType<_Tp>::type )\n        return Matx<_Tp, m, n>((_Tp*)data);\n    Matx<_Tp, m, n> mtx;\n    Mat tmp(rows, cols, DataType<_Tp>::type, mtx.val);\n    convertTo(tmp, tmp.type());\n    return mtx;\n}\n\ntemplate<typename _Tp> inline\nvoid Mat::push_back(const _Tp& elem)\n{\n    if( !data )\n    {\n        *this = Mat(1, 1, DataType<_Tp>::type, (void*)&elem).clone();\n        return;\n    }\n    CV_Assert(DataType<_Tp>::type == type() && cols == 1\n              /* && dims == 2 (cols == 1 implies dims == 2) */);\n    const uchar* tmp = dataend + step[0];\n    if( !isSubmatrix() && isContinuous() && tmp <= datalimit )\n    {\n        *(_Tp*)(data + (size.p[0]++) * step.p[0]) = elem;\n        dataend = tmp;\n    }\n    else\n        push_back_(&elem);\n}\n\ntemplate<typename _Tp> inline\nvoid Mat::push_back(const Mat_<_Tp>& m)\n{\n    push_back((const Mat&)m);\n}\n\ntemplate<> inline\nvoid Mat::push_back(const MatExpr& expr)\n{\n    push_back(static_cast<Mat>(expr));\n}\n\n#ifdef CV_CXX_MOVE_SEMANTICS\n\ninline\nMat::Mat(Mat&& m)\n    : flags(m.flags), dims(m.dims), rows(m.rows), cols(m.cols), data(m.data),\n      datastart(m.datastart), dataend(m.dataend), datalimit(m.datalimit), allocator(m.allocator),\n      u(m.u), size(&rows)\n{\n    if (m.dims <= 2)  // move new step/size info\n    {\n        step[0] = m.step[0];\n        step[1] = m.step[1];\n    }\n    else\n    {\n        CV_DbgAssert(m.step.p != m.step.buf);\n        step.p = m.step.p;\n        size.p = m.size.p;\n        m.step.p = m.step.buf;\n        m.size.p = &m.rows;\n    }\n    m.flags = MAGIC_VAL; m.dims = m.rows = m.cols = 0;\n    m.data = NULL; m.datastart = NULL; m.dataend = NULL; m.datalimit = NULL;\n    m.allocator = NULL;\n    m.u = NULL;\n}\n\ninline\nMat& Mat::operator = (Mat&& m)\n{\n    release();\n    flags = m.flags; dims = m.dims; rows = m.rows; cols = m.cols; data = m.data;\n    datastart = m.datastart; dataend = m.dataend; datalimit = m.datalimit; allocator = m.allocator;\n    u = m.u;\n    if (step.p != step.buf) // release self step/size\n    {\n        fastFree(step.p);\n        step.p = step.buf;\n        size.p = &rows;\n    }\n    if (m.dims <= 2) // move new step/size info\n    {\n        step[0] = m.step[0];\n        step[1] = m.step[1];\n    }\n    else\n    {\n        CV_DbgAssert(m.step.p != m.step.buf);\n        step.p = m.step.p;\n        size.p = m.size.p;\n        m.step.p = m.step.buf;\n        m.size.p = &m.rows;\n    }\n    m.flags = MAGIC_VAL; m.dims = m.rows = m.cols = 0;\n    m.data = NULL; m.datastart = NULL; m.dataend = NULL; m.datalimit = NULL;\n    m.allocator = NULL;\n    m.u = NULL;\n    return *this;\n}\n\n#endif\n\n\n///////////////////////////// MatSize ////////////////////////////\n\ninline\nMatSize::MatSize(int* _p)\n    : p(_p) {}\n\ninline\nSize MatSize::operator()() const\n{\n    CV_DbgAssert(p[-1] <= 2);\n    return Size(p[1], p[0]);\n}\n\ninline\nconst int& MatSize::operator[](int i) const\n{\n    return p[i];\n}\n\ninline\nint& MatSize::operator[](int i)\n{\n    return p[i];\n}\n\ninline\nMatSize::operator const int*() const\n{\n    return p;\n}\n\ninline\nbool MatSize::operator == (const MatSize& sz) const\n{\n    int d = p[-1];\n    int dsz = sz.p[-1];\n    if( d != dsz )\n        return false;\n    if( d == 2 )\n        return p[0] == sz.p[0] && p[1] == sz.p[1];\n\n    for( int i = 0; i < d; i++ )\n        if( p[i] != sz.p[i] )\n            return false;\n    return true;\n}\n\ninline\nbool MatSize::operator != (const MatSize& sz) const\n{\n    return !(*this == sz);\n}\n\n\n\n///////////////////////////// MatStep ////////////////////////////\n\ninline\nMatStep::MatStep()\n{\n    p = buf; p[0] = p[1] = 0;\n}\n\ninline\nMatStep::MatStep(size_t s)\n{\n    p = buf; p[0] = s; p[1] = 0;\n}\n\ninline\nconst size_t& MatStep::operator[](int i) const\n{\n    return p[i];\n}\n\ninline\nsize_t& MatStep::operator[](int i)\n{\n    return p[i];\n}\n\ninline MatStep::operator size_t() const\n{\n    CV_DbgAssert( p == buf );\n    return buf[0];\n}\n\ninline MatStep& MatStep::operator = (size_t s)\n{\n    CV_DbgAssert( p == buf );\n    buf[0] = s;\n    return *this;\n}\n\n\n\n////////////////////////////// Mat_<_Tp> ////////////////////////////\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_()\n    : Mat()\n{\n    flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(int _rows, int _cols)\n    : Mat(_rows, _cols, DataType<_Tp>::type)\n{\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(int _rows, int _cols, const _Tp& value)\n    : Mat(_rows, _cols, DataType<_Tp>::type)\n{\n    *this = value;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(Size _sz)\n    : Mat(_sz.height, _sz.width, DataType<_Tp>::type)\n{}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(Size _sz, const _Tp& value)\n    : Mat(_sz.height, _sz.width, DataType<_Tp>::type)\n{\n    *this = value;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(int _dims, const int* _sz)\n    : Mat(_dims, _sz, DataType<_Tp>::type)\n{}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(int _dims, const int* _sz, const _Tp& _s)\n    : Mat(_dims, _sz, DataType<_Tp>::type, Scalar(_s))\n{}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const Mat_<_Tp>& m, const Range* ranges)\n    : Mat(m, ranges)\n{}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const Mat& m)\n    : Mat()\n{\n    flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type;\n    *this = m;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const Mat_& m)\n    : Mat(m)\n{}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(int _rows, int _cols, _Tp* _data, size_t steps)\n    : Mat(_rows, _cols, DataType<_Tp>::type, _data, steps)\n{}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const Mat_& m, const Range& _rowRange, const Range& _colRange)\n    : Mat(m, _rowRange, _colRange)\n{}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const Mat_& m, const Rect& roi)\n    : Mat(m, roi)\n{}\n\ntemplate<typename _Tp> template<int n> inline\nMat_<_Tp>::Mat_(const Vec<typename DataType<_Tp>::channel_type, n>& vec, bool copyData)\n    : Mat(n / DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&vec)\n{\n    CV_Assert(n%DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> template<int m, int n> inline\nMat_<_Tp>::Mat_(const Matx<typename DataType<_Tp>::channel_type, m, n>& M, bool copyData)\n    : Mat(m, n / DataType<_Tp>::channels, DataType<_Tp>::type, (void*)&M)\n{\n    CV_Assert(n % DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const Point_<typename DataType<_Tp>::channel_type>& pt, bool copyData)\n    : Mat(2 / DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&pt)\n{\n    CV_Assert(2 % DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const Point3_<typename DataType<_Tp>::channel_type>& pt, bool copyData)\n    : Mat(3 / DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&pt)\n{\n    CV_Assert(3 % DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const MatCommaInitializer_<_Tp>& commaInitializer)\n    : Mat(commaInitializer)\n{}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const std::vector<_Tp>& vec, bool copyData)\n    : Mat(vec, copyData)\n{}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>& Mat_<_Tp>::operator = (const Mat& m)\n{\n    if( DataType<_Tp>::type == m.type() )\n    {\n        Mat::operator = (m);\n        return *this;\n    }\n    if( DataType<_Tp>::depth == m.depth() )\n    {\n        return (*this = m.reshape(DataType<_Tp>::channels, m.dims, 0));\n    }\n    CV_DbgAssert(DataType<_Tp>::channels == m.channels());\n    m.convertTo(*this, type());\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>& Mat_<_Tp>::operator = (const Mat_& m)\n{\n    Mat::operator=(m);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>& Mat_<_Tp>::operator = (const _Tp& s)\n{\n    typedef typename DataType<_Tp>::vec_type VT;\n    Mat::operator=(Scalar((const VT&)s));\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nvoid Mat_<_Tp>::create(int _rows, int _cols)\n{\n    Mat::create(_rows, _cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nvoid Mat_<_Tp>::create(Size _sz)\n{\n    Mat::create(_sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nvoid Mat_<_Tp>::create(int _dims, const int* _sz)\n{\n    Mat::create(_dims, _sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp> Mat_<_Tp>::cross(const Mat_& m) const\n{\n    return Mat_<_Tp>(Mat::cross(m));\n}\n\ntemplate<typename _Tp> template<typename T2> inline\nMat_<_Tp>::operator Mat_<T2>() const\n{\n    return Mat_<T2>(*this);\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp> Mat_<_Tp>::row(int y) const\n{\n    return Mat_(*this, Range(y, y+1), Range::all());\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp> Mat_<_Tp>::col(int x) const\n{\n    return Mat_(*this, Range::all(), Range(x, x+1));\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp> Mat_<_Tp>::diag(int d) const\n{\n    return Mat_(Mat::diag(d));\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp> Mat_<_Tp>::clone() const\n{\n    return Mat_(Mat::clone());\n}\n\ntemplate<typename _Tp> inline\nsize_t Mat_<_Tp>::elemSize() const\n{\n    CV_DbgAssert( Mat::elemSize() == sizeof(_Tp) );\n    return sizeof(_Tp);\n}\n\ntemplate<typename _Tp> inline\nsize_t Mat_<_Tp>::elemSize1() const\n{\n    CV_DbgAssert( Mat::elemSize1() == sizeof(_Tp) / DataType<_Tp>::channels );\n    return sizeof(_Tp) / DataType<_Tp>::channels;\n}\n\ntemplate<typename _Tp> inline\nint Mat_<_Tp>::type() const\n{\n    CV_DbgAssert( Mat::type() == DataType<_Tp>::type );\n    return DataType<_Tp>::type;\n}\n\ntemplate<typename _Tp> inline\nint Mat_<_Tp>::depth() const\n{\n    CV_DbgAssert( Mat::depth() == DataType<_Tp>::depth );\n    return DataType<_Tp>::depth;\n}\n\ntemplate<typename _Tp> inline\nint Mat_<_Tp>::channels() const\n{\n    CV_DbgAssert( Mat::channels() == DataType<_Tp>::channels );\n    return DataType<_Tp>::channels;\n}\n\ntemplate<typename _Tp> inline\nsize_t Mat_<_Tp>::stepT(int i) const\n{\n    return step.p[i] / elemSize();\n}\n\ntemplate<typename _Tp> inline\nsize_t Mat_<_Tp>::step1(int i) const\n{\n    return step.p[i] / elemSize1();\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>& Mat_<_Tp>::adjustROI( int dtop, int dbottom, int dleft, int dright )\n{\n    return (Mat_<_Tp>&)(Mat::adjustROI(dtop, dbottom, dleft, dright));\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp> Mat_<_Tp>::operator()( const Range& _rowRange, const Range& _colRange ) const\n{\n    return Mat_<_Tp>(*this, _rowRange, _colRange);\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp> Mat_<_Tp>::operator()( const Rect& roi ) const\n{\n    return Mat_<_Tp>(*this, roi);\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp> Mat_<_Tp>::operator()( const Range* ranges ) const\n{\n    return Mat_<_Tp>(*this, ranges);\n}\n\ntemplate<typename _Tp> inline\n_Tp* Mat_<_Tp>::operator [](int y)\n{\n    CV_DbgAssert( 0 <= y && y < rows );\n    return (_Tp*)(data + y*step.p[0]);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp* Mat_<_Tp>::operator [](int y) const\n{\n    CV_DbgAssert( 0 <= y && y < rows );\n    return (const _Tp*)(data + y*step.p[0]);\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat_<_Tp>::operator ()(int i0, int i1)\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    CV_DbgAssert(type() == DataType<_Tp>::type);\n    return ((_Tp*)(data + step.p[0] * i0))[i1];\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat_<_Tp>::operator ()(int i0, int i1) const\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)i1 < (unsigned)size.p[1]);\n    CV_DbgAssert(type() == DataType<_Tp>::type);\n    return ((const _Tp*)(data + step.p[0] * i0))[i1];\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat_<_Tp>::operator ()(Point pt)\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)pt.y < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)pt.x < (unsigned)size.p[1]);\n    CV_DbgAssert(type() == DataType<_Tp>::type);\n    return ((_Tp*)(data + step.p[0] * pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat_<_Tp>::operator ()(Point pt) const\n{\n    CV_DbgAssert(dims <= 2);\n    CV_DbgAssert(data);\n    CV_DbgAssert((unsigned)pt.y < (unsigned)size.p[0]);\n    CV_DbgAssert((unsigned)pt.x < (unsigned)size.p[1]);\n    CV_DbgAssert(type() == DataType<_Tp>::type);\n    return ((const _Tp*)(data + step.p[0] * pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat_<_Tp>::operator ()(const int* idx)\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat_<_Tp>::operator ()(const int* idx) const\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> template<int n> inline\n_Tp& Mat_<_Tp>::operator ()(const Vec<int, n>& idx)\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> template<int n> inline\nconst _Tp& Mat_<_Tp>::operator ()(const Vec<int, n>& idx) const\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat_<_Tp>::operator ()(int i0)\n{\n    return this->at<_Tp>(i0);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat_<_Tp>::operator ()(int i0) const\n{\n    return this->at<_Tp>(i0);\n}\n\ntemplate<typename _Tp> inline\n_Tp& Mat_<_Tp>::operator ()(int i0, int i1, int i2)\n{\n    return this->at<_Tp>(i0, i1, i2);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& Mat_<_Tp>::operator ()(int i0, int i1, int i2) const\n{\n    return this->at<_Tp>(i0, i1, i2);\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::operator std::vector<_Tp>() const\n{\n    std::vector<_Tp> v;\n    copyTo(v);\n    return v;\n}\n\ntemplate<typename _Tp> template<int n> inline\nMat_<_Tp>::operator Vec<typename DataType<_Tp>::channel_type, n>() const\n{\n    CV_Assert(n % DataType<_Tp>::channels == 0);\n\n#if defined _MSC_VER\n    const Mat* pMat = (const Mat*)this; // workaround for MSVS <= 2012 compiler bugs (but GCC 4.6 dislikes this workaround)\n    return pMat->operator Vec<typename DataType<_Tp>::channel_type, n>();\n#else\n    return this->Mat::operator Vec<typename DataType<_Tp>::channel_type, n>();\n#endif\n}\n\ntemplate<typename _Tp> template<int m, int n> inline\nMat_<_Tp>::operator Matx<typename DataType<_Tp>::channel_type, m, n>() const\n{\n    CV_Assert(n % DataType<_Tp>::channels == 0);\n\n#if defined _MSC_VER\n    const Mat* pMat = (const Mat*)this; // workaround for MSVS <= 2012 compiler bugs (but GCC 4.6 dislikes this workaround)\n    Matx<typename DataType<_Tp>::channel_type, m, n> res = pMat->operator Matx<typename DataType<_Tp>::channel_type, m, n>();\n    return res;\n#else\n    Matx<typename DataType<_Tp>::channel_type, m, n> res = this->Mat::operator Matx<typename DataType<_Tp>::channel_type, m, n>();\n    return res;\n#endif\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp> Mat_<_Tp>::begin() const\n{\n    return Mat::begin<_Tp>();\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp> Mat_<_Tp>::end() const\n{\n    return Mat::end<_Tp>();\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp> Mat_<_Tp>::begin()\n{\n    return Mat::begin<_Tp>();\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp> Mat_<_Tp>::end()\n{\n    return Mat::end<_Tp>();\n}\n\ntemplate<typename _Tp> template<typename Functor> inline\nvoid Mat_<_Tp>::forEach(const Functor& operation) {\n    Mat::forEach<_Tp, Functor>(operation);\n}\n\ntemplate<typename _Tp> template<typename Functor> inline\nvoid Mat_<_Tp>::forEach(const Functor& operation) const {\n    Mat::forEach<_Tp, Functor>(operation);\n}\n\n#ifdef CV_CXX_MOVE_SEMANTICS\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(Mat_&& m)\n    : Mat(m)\n{\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>& Mat_<_Tp>::operator = (Mat_&& m)\n{\n    Mat::operator = (m);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(Mat&& m)\n    : Mat()\n{\n    flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type;\n    *this = m;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>& Mat_<_Tp>::operator = (Mat&& m)\n{\n    if( DataType<_Tp>::type == m.type() )\n    {\n        Mat::operator = ((Mat&&)m);\n        return *this;\n    }\n    if( DataType<_Tp>::depth == m.depth() )\n    {\n        Mat::operator = ((Mat&&)m.reshape(DataType<_Tp>::channels, m.dims, 0));\n        return *this;\n    }\n    CV_DbgAssert(DataType<_Tp>::channels == m.channels());\n    m.convertTo(*this, type());\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(MatExpr&& e)\n    : Mat()\n{\n    flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type;\n    *this = Mat(e);\n}\n\n#endif\n\n///////////////////////////// SparseMat /////////////////////////////\n\ninline\nSparseMat::SparseMat()\n    : flags(MAGIC_VAL), hdr(0)\n{}\n\ninline\nSparseMat::SparseMat(int _dims, const int* _sizes, int _type)\n    : flags(MAGIC_VAL), hdr(0)\n{\n    create(_dims, _sizes, _type);\n}\n\ninline\nSparseMat::SparseMat(const SparseMat& m)\n    : flags(m.flags), hdr(m.hdr)\n{\n    addref();\n}\n\ninline\nSparseMat::~SparseMat()\n{\n    release();\n}\n\ninline\nSparseMat& SparseMat::operator = (const SparseMat& m)\n{\n    if( this != &m )\n    {\n        if( m.hdr )\n            CV_XADD(&m.hdr->refcount, 1);\n        release();\n        flags = m.flags;\n        hdr = m.hdr;\n    }\n    return *this;\n}\n\ninline\nSparseMat& SparseMat::operator = (const Mat& m)\n{\n    return (*this = SparseMat(m));\n}\n\ninline\nSparseMat SparseMat::clone() const\n{\n    SparseMat temp;\n    this->copyTo(temp);\n    return temp;\n}\n\ninline\nvoid SparseMat::assignTo( SparseMat& m, int _type ) const\n{\n    if( _type < 0 )\n        m = *this;\n    else\n        convertTo(m, _type);\n}\n\ninline\nvoid SparseMat::addref()\n{\n    if( hdr )\n        CV_XADD(&hdr->refcount, 1);\n}\n\ninline\nvoid SparseMat::release()\n{\n    if( hdr && CV_XADD(&hdr->refcount, -1) == 1 )\n        delete hdr;\n    hdr = 0;\n}\n\ninline\nsize_t SparseMat::elemSize() const\n{\n    return CV_ELEM_SIZE(flags);\n}\n\ninline\nsize_t SparseMat::elemSize1() const\n{\n    return CV_ELEM_SIZE1(flags);\n}\n\ninline\nint SparseMat::type() const\n{\n    return CV_MAT_TYPE(flags);\n}\n\ninline\nint SparseMat::depth() const\n{\n    return CV_MAT_DEPTH(flags);\n}\n\ninline\nint SparseMat::channels() const\n{\n    return CV_MAT_CN(flags);\n}\n\ninline\nconst int* SparseMat::size() const\n{\n    return hdr ? hdr->size : 0;\n}\n\ninline\nint SparseMat::size(int i) const\n{\n    if( hdr )\n    {\n        CV_DbgAssert((unsigned)i < (unsigned)hdr->dims);\n        return hdr->size[i];\n    }\n    return 0;\n}\n\ninline\nint SparseMat::dims() const\n{\n    return hdr ? hdr->dims : 0;\n}\n\ninline\nsize_t SparseMat::nzcount() const\n{\n    return hdr ? hdr->nodeCount : 0;\n}\n\ninline\nsize_t SparseMat::hash(int i0) const\n{\n    return (size_t)i0;\n}\n\ninline\nsize_t SparseMat::hash(int i0, int i1) const\n{\n    return (size_t)(unsigned)i0 * HASH_SCALE + (unsigned)i1;\n}\n\ninline\nsize_t SparseMat::hash(int i0, int i1, int i2) const\n{\n    return ((size_t)(unsigned)i0 * HASH_SCALE + (unsigned)i1) * HASH_SCALE + (unsigned)i2;\n}\n\ninline\nsize_t SparseMat::hash(const int* idx) const\n{\n    size_t h = (unsigned)idx[0];\n    if( !hdr )\n        return 0;\n    int d = hdr->dims;\n    for(int i = 1; i < d; i++ )\n        h = h * HASH_SCALE + (unsigned)idx[i];\n    return h;\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMat::ref(int i0, size_t* hashval)\n{\n    return *(_Tp*)((SparseMat*)this)->ptr(i0, true, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMat::ref(int i0, int i1, size_t* hashval)\n{\n    return *(_Tp*)((SparseMat*)this)->ptr(i0, i1, true, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMat::ref(int i0, int i1, int i2, size_t* hashval)\n{\n    return *(_Tp*)((SparseMat*)this)->ptr(i0, i1, i2, true, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMat::ref(const int* idx, size_t* hashval)\n{\n    return *(_Tp*)((SparseMat*)this)->ptr(idx, true, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp SparseMat::value(int i0, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline\n_Tp SparseMat::value(int i0, int i1, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, i1, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline\n_Tp SparseMat::value(int i0, int i1, int i2, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, i1, i2, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline\n_Tp SparseMat::value(const int* idx, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(idx, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline\nconst _Tp* SparseMat::find(int i0, size_t* hashval) const\n{\n    return (const _Tp*)((SparseMat*)this)->ptr(i0, false, hashval);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp* SparseMat::find(int i0, int i1, size_t* hashval) const\n{\n    return (const _Tp*)((SparseMat*)this)->ptr(i0, i1, false, hashval);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp* SparseMat::find(int i0, int i1, int i2, size_t* hashval) const\n{\n    return (const _Tp*)((SparseMat*)this)->ptr(i0, i1, i2, false, hashval);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp* SparseMat::find(const int* idx, size_t* hashval) const\n{\n    return (const _Tp*)((SparseMat*)this)->ptr(idx, false, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMat::value(Node* n)\n{\n    return *(_Tp*)((uchar*)n + hdr->valueOffset);\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& SparseMat::value(const Node* n) const\n{\n    return *(const _Tp*)((const uchar*)n + hdr->valueOffset);\n}\n\ninline\nSparseMat::Node* SparseMat::node(size_t nidx)\n{\n    return (Node*)(void*)&hdr->pool[nidx];\n}\n\ninline\nconst SparseMat::Node* SparseMat::node(size_t nidx) const\n{\n    return (const Node*)(const void*)&hdr->pool[nidx];\n}\n\ninline\nSparseMatIterator SparseMat::begin()\n{\n    return SparseMatIterator(this);\n}\n\ninline\nSparseMatConstIterator SparseMat::begin() const\n{\n    return SparseMatConstIterator(this);\n}\n\ninline\nSparseMatIterator SparseMat::end()\n{\n    SparseMatIterator it(this);\n    it.seekEnd();\n    return it;\n}\n\ninline\nSparseMatConstIterator SparseMat::end() const\n{\n    SparseMatConstIterator it(this);\n    it.seekEnd();\n    return it;\n}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp> SparseMat::begin()\n{\n    return SparseMatIterator_<_Tp>(this);\n}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp> SparseMat::begin() const\n{\n    return SparseMatConstIterator_<_Tp>(this);\n}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp> SparseMat::end()\n{\n    SparseMatIterator_<_Tp> it(this);\n    it.seekEnd();\n    return it;\n}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp> SparseMat::end() const\n{\n    SparseMatConstIterator_<_Tp> it(this);\n    it.seekEnd();\n    return it;\n}\n\n\n\n///////////////////////////// SparseMat_ ////////////////////////////\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>::SparseMat_()\n{\n    flags = MAGIC_VAL | DataType<_Tp>::type;\n}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>::SparseMat_(int _dims, const int* _sizes)\n    : SparseMat(_dims, _sizes, DataType<_Tp>::type)\n{}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>::SparseMat_(const SparseMat& m)\n{\n    if( m.type() == DataType<_Tp>::type )\n        *this = (const SparseMat_<_Tp>&)m;\n    else\n        m.convertTo(*this, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>::SparseMat_(const SparseMat_<_Tp>& m)\n{\n    this->flags = m.flags;\n    this->hdr = m.hdr;\n    if( this->hdr )\n        CV_XADD(&this->hdr->refcount, 1);\n}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>::SparseMat_(const Mat& m)\n{\n    SparseMat sm(m);\n    *this = sm;\n}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>& SparseMat_<_Tp>::operator = (const SparseMat_<_Tp>& m)\n{\n    if( this != &m )\n    {\n        if( m.hdr ) CV_XADD(&m.hdr->refcount, 1);\n        release();\n        flags = m.flags;\n        hdr = m.hdr;\n    }\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>& SparseMat_<_Tp>::operator = (const SparseMat& m)\n{\n    if( m.type() == DataType<_Tp>::type )\n        return (*this = (const SparseMat_<_Tp>&)m);\n    m.convertTo(*this, DataType<_Tp>::type);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>& SparseMat_<_Tp>::operator = (const Mat& m)\n{\n    return (*this = SparseMat(m));\n}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp> SparseMat_<_Tp>::clone() const\n{\n    SparseMat_<_Tp> m;\n    this->copyTo(m);\n    return m;\n}\n\ntemplate<typename _Tp> inline\nvoid SparseMat_<_Tp>::create(int _dims, const int* _sizes)\n{\n    SparseMat::create(_dims, _sizes, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nint SparseMat_<_Tp>::type() const\n{\n    return DataType<_Tp>::type;\n}\n\ntemplate<typename _Tp> inline\nint SparseMat_<_Tp>::depth() const\n{\n    return DataType<_Tp>::depth;\n}\n\ntemplate<typename _Tp> inline\nint SparseMat_<_Tp>::channels() const\n{\n    return DataType<_Tp>::channels;\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMat_<_Tp>::ref(int i0, size_t* hashval)\n{\n    return SparseMat::ref<_Tp>(i0, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp SparseMat_<_Tp>::operator()(int i0, size_t* hashval) const\n{\n    return SparseMat::value<_Tp>(i0, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMat_<_Tp>::ref(int i0, int i1, size_t* hashval)\n{\n    return SparseMat::ref<_Tp>(i0, i1, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp SparseMat_<_Tp>::operator()(int i0, int i1, size_t* hashval) const\n{\n    return SparseMat::value<_Tp>(i0, i1, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMat_<_Tp>::ref(int i0, int i1, int i2, size_t* hashval)\n{\n    return SparseMat::ref<_Tp>(i0, i1, i2, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp SparseMat_<_Tp>::operator()(int i0, int i1, int i2, size_t* hashval) const\n{\n    return SparseMat::value<_Tp>(i0, i1, i2, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMat_<_Tp>::ref(const int* idx, size_t* hashval)\n{\n    return SparseMat::ref<_Tp>(idx, hashval);\n}\n\ntemplate<typename _Tp> inline\n_Tp SparseMat_<_Tp>::operator()(const int* idx, size_t* hashval) const\n{\n    return SparseMat::value<_Tp>(idx, hashval);\n}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp> SparseMat_<_Tp>::begin()\n{\n    return SparseMatIterator_<_Tp>(this);\n}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp> SparseMat_<_Tp>::begin() const\n{\n    return SparseMatConstIterator_<_Tp>(this);\n}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp> SparseMat_<_Tp>::end()\n{\n    SparseMatIterator_<_Tp> it(this);\n    it.seekEnd();\n    return it;\n}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp> SparseMat_<_Tp>::end() const\n{\n    SparseMatConstIterator_<_Tp> it(this);\n    it.seekEnd();\n    return it;\n}\n\n\n\n////////////////////////// MatConstIterator /////////////////////////\n\ninline\nMatConstIterator::MatConstIterator()\n    : m(0), elemSize(0), ptr(0), sliceStart(0), sliceEnd(0)\n{}\n\ninline\nMatConstIterator::MatConstIterator(const Mat* _m)\n    : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)\n{\n    if( m && m->isContinuous() )\n    {\n        sliceStart = m->ptr();\n        sliceEnd = sliceStart + m->total()*elemSize;\n    }\n    seek((const int*)0);\n}\n\ninline\nMatConstIterator::MatConstIterator(const Mat* _m, int _row, int _col)\n    : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)\n{\n    CV_Assert(m && m->dims <= 2);\n    if( m->isContinuous() )\n    {\n        sliceStart = m->ptr();\n        sliceEnd = sliceStart + m->total()*elemSize;\n    }\n    int idx[] = {_row, _col};\n    seek(idx);\n}\n\ninline\nMatConstIterator::MatConstIterator(const Mat* _m, Point _pt)\n    : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)\n{\n    CV_Assert(m && m->dims <= 2);\n    if( m->isContinuous() )\n    {\n        sliceStart = m->ptr();\n        sliceEnd = sliceStart + m->total()*elemSize;\n    }\n    int idx[] = {_pt.y, _pt.x};\n    seek(idx);\n}\n\ninline\nMatConstIterator::MatConstIterator(const MatConstIterator& it)\n    : m(it.m), elemSize(it.elemSize), ptr(it.ptr), sliceStart(it.sliceStart), sliceEnd(it.sliceEnd)\n{}\n\ninline\nMatConstIterator& MatConstIterator::operator = (const MatConstIterator& it )\n{\n    m = it.m; elemSize = it.elemSize; ptr = it.ptr;\n    sliceStart = it.sliceStart; sliceEnd = it.sliceEnd;\n    return *this;\n}\n\ninline\nconst uchar* MatConstIterator::operator *() const\n{\n    return ptr;\n}\n\ninline MatConstIterator& MatConstIterator::operator += (ptrdiff_t ofs)\n{\n    if( !m || ofs == 0 )\n        return *this;\n    ptrdiff_t ofsb = ofs*elemSize;\n    ptr += ofsb;\n    if( ptr < sliceStart || sliceEnd <= ptr )\n    {\n        ptr -= ofsb;\n        seek(ofs, true);\n    }\n    return *this;\n}\n\ninline\nMatConstIterator& MatConstIterator::operator -= (ptrdiff_t ofs)\n{\n    return (*this += -ofs);\n}\n\ninline\nMatConstIterator& MatConstIterator::operator --()\n{\n    if( m && (ptr -= elemSize) < sliceStart )\n    {\n        ptr += elemSize;\n        seek(-1, true);\n    }\n    return *this;\n}\n\ninline\nMatConstIterator MatConstIterator::operator --(int)\n{\n    MatConstIterator b = *this;\n    *this += -1;\n    return b;\n}\n\ninline\nMatConstIterator& MatConstIterator::operator ++()\n{\n    if( m && (ptr += elemSize) >= sliceEnd )\n    {\n        ptr -= elemSize;\n        seek(1, true);\n    }\n    return *this;\n}\n\ninline MatConstIterator MatConstIterator::operator ++(int)\n{\n    MatConstIterator b = *this;\n    *this += 1;\n    return b;\n}\n\n\nstatic inline\nbool operator == (const MatConstIterator& a, const MatConstIterator& b)\n{\n    return a.m == b.m && a.ptr == b.ptr;\n}\n\nstatic inline\nbool operator != (const MatConstIterator& a, const MatConstIterator& b)\n{\n    return !(a == b);\n}\n\nstatic inline\nbool operator < (const MatConstIterator& a, const MatConstIterator& b)\n{\n    return a.ptr < b.ptr;\n}\n\nstatic inline\nbool operator > (const MatConstIterator& a, const MatConstIterator& b)\n{\n    return a.ptr > b.ptr;\n}\n\nstatic inline\nbool operator <= (const MatConstIterator& a, const MatConstIterator& b)\n{\n    return a.ptr <= b.ptr;\n}\n\nstatic inline\nbool operator >= (const MatConstIterator& a, const MatConstIterator& b)\n{\n    return a.ptr >= b.ptr;\n}\n\nstatic inline\nptrdiff_t operator - (const MatConstIterator& b, const MatConstIterator& a)\n{\n    if( a.m != b.m )\n        return ((size_t)(-1) >> 1);\n    if( a.sliceEnd == b.sliceEnd )\n        return (b.ptr - a.ptr)/b.elemSize;\n\n    return b.lpos() - a.lpos();\n}\n\nstatic inline\nMatConstIterator operator + (const MatConstIterator& a, ptrdiff_t ofs)\n{\n    MatConstIterator b = a;\n    return b += ofs;\n}\n\nstatic inline\nMatConstIterator operator + (ptrdiff_t ofs, const MatConstIterator& a)\n{\n    MatConstIterator b = a;\n    return b += ofs;\n}\n\nstatic inline\nMatConstIterator operator - (const MatConstIterator& a, ptrdiff_t ofs)\n{\n    MatConstIterator b = a;\n    return b += -ofs;\n}\n\n\ninline\nconst uchar* MatConstIterator::operator [](ptrdiff_t i) const\n{\n    return *(*this + i);\n}\n\n\n\n///////////////////////// MatConstIterator_ /////////////////////////\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>::MatConstIterator_()\n{}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>::MatConstIterator_(const Mat_<_Tp>* _m)\n    : MatConstIterator(_m)\n{}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>::MatConstIterator_(const Mat_<_Tp>* _m, int _row, int _col)\n    : MatConstIterator(_m, _row, _col)\n{}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>::MatConstIterator_(const Mat_<_Tp>* _m, Point _pt)\n    : MatConstIterator(_m, _pt)\n{}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>::MatConstIterator_(const MatConstIterator_& it)\n    : MatConstIterator(it)\n{}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator = (const MatConstIterator_& it )\n{\n    MatConstIterator::operator = (it);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\n_Tp MatConstIterator_<_Tp>::operator *() const\n{\n    return *(_Tp*)(this->ptr);\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator += (ptrdiff_t ofs)\n{\n    MatConstIterator::operator += (ofs);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator -= (ptrdiff_t ofs)\n{\n    return (*this += -ofs);\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator --()\n{\n    MatConstIterator::operator --();\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator --(int)\n{\n    MatConstIterator_ b = *this;\n    MatConstIterator::operator --();\n    return b;\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator ++()\n{\n    MatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator ++(int)\n{\n    MatConstIterator_ b = *this;\n    MatConstIterator::operator ++();\n    return b;\n}\n\n\ntemplate<typename _Tp> inline\nPoint MatConstIterator_<_Tp>::pos() const\n{\n    if( !m )\n        return Point();\n    CV_DbgAssert( m->dims <= 2 );\n    if( m->isContinuous() )\n    {\n        ptrdiff_t ofs = (const _Tp*)ptr - (const _Tp*)m->data;\n        int y = (int)(ofs / m->cols);\n        int x = (int)(ofs - (ptrdiff_t)y * m->cols);\n        return Point(x, y);\n    }\n    else\n    {\n        ptrdiff_t ofs = (uchar*)ptr - m->data;\n        int y = (int)(ofs / m->step);\n        int x = (int)((ofs - y * m->step)/sizeof(_Tp));\n        return Point(x, y);\n    }\n}\n\n\ntemplate<typename _Tp> static inline\nbool operator == (const MatConstIterator_<_Tp>& a, const MatConstIterator_<_Tp>& b)\n{\n    return a.m == b.m && a.ptr == b.ptr;\n}\n\ntemplate<typename _Tp> static inline\nbool operator != (const MatConstIterator_<_Tp>& a, const MatConstIterator_<_Tp>& b)\n{\n    return a.m != b.m || a.ptr != b.ptr;\n}\n\ntemplate<typename _Tp> static inline\nMatConstIterator_<_Tp> operator + (const MatConstIterator_<_Tp>& a, ptrdiff_t ofs)\n{\n    MatConstIterator t = (const MatConstIterator&)a + ofs;\n    return (MatConstIterator_<_Tp>&)t;\n}\n\ntemplate<typename _Tp> static inline\nMatConstIterator_<_Tp> operator + (ptrdiff_t ofs, const MatConstIterator_<_Tp>& a)\n{\n    MatConstIterator t = (const MatConstIterator&)a + ofs;\n    return (MatConstIterator_<_Tp>&)t;\n}\n\ntemplate<typename _Tp> static inline\nMatConstIterator_<_Tp> operator - (const MatConstIterator_<_Tp>& a, ptrdiff_t ofs)\n{\n    MatConstIterator t = (const MatConstIterator&)a - ofs;\n    return (MatConstIterator_<_Tp>&)t;\n}\n\ntemplate<typename _Tp> inline\n_Tp MatConstIterator_<_Tp>::operator [](ptrdiff_t i) const\n{\n    return *(_Tp*)MatConstIterator::operator [](i);\n}\n\n\n\n//////////////////////////// MatIterator_ ///////////////////////////\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>::MatIterator_()\n    : MatConstIterator_<_Tp>()\n{}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m)\n    : MatConstIterator_<_Tp>(_m)\n{}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m, int _row, int _col)\n    : MatConstIterator_<_Tp>(_m, _row, _col)\n{}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m, Point _pt)\n    : MatConstIterator_<_Tp>(_m, _pt)\n{}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m, const int* _idx)\n    : MatConstIterator_<_Tp>(_m, _idx)\n{}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>::MatIterator_(const MatIterator_& it)\n    : MatConstIterator_<_Tp>(it)\n{}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>& MatIterator_<_Tp>::operator = (const MatIterator_<_Tp>& it )\n{\n    MatConstIterator::operator = (it);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\n_Tp& MatIterator_<_Tp>::operator *() const\n{\n    return *(_Tp*)(this->ptr);\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>& MatIterator_<_Tp>::operator += (ptrdiff_t ofs)\n{\n    MatConstIterator::operator += (ofs);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>& MatIterator_<_Tp>::operator -= (ptrdiff_t ofs)\n{\n    MatConstIterator::operator += (-ofs);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>& MatIterator_<_Tp>::operator --()\n{\n    MatConstIterator::operator --();\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp> MatIterator_<_Tp>::operator --(int)\n{\n    MatIterator_ b = *this;\n    MatConstIterator::operator --();\n    return b;\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp>& MatIterator_<_Tp>::operator ++()\n{\n    MatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMatIterator_<_Tp> MatIterator_<_Tp>::operator ++(int)\n{\n    MatIterator_ b = *this;\n    MatConstIterator::operator ++();\n    return b;\n}\n\ntemplate<typename _Tp> inline\n_Tp& MatIterator_<_Tp>::operator [](ptrdiff_t i) const\n{\n    return *(*this + i);\n}\n\n\ntemplate<typename _Tp> static inline\nbool operator == (const MatIterator_<_Tp>& a, const MatIterator_<_Tp>& b)\n{\n    return a.m == b.m && a.ptr == b.ptr;\n}\n\ntemplate<typename _Tp> static inline\nbool operator != (const MatIterator_<_Tp>& a, const MatIterator_<_Tp>& b)\n{\n    return a.m != b.m || a.ptr != b.ptr;\n}\n\ntemplate<typename _Tp> static inline\nMatIterator_<_Tp> operator + (const MatIterator_<_Tp>& a, ptrdiff_t ofs)\n{\n    MatConstIterator t = (const MatConstIterator&)a + ofs;\n    return (MatIterator_<_Tp>&)t;\n}\n\ntemplate<typename _Tp> static inline\nMatIterator_<_Tp> operator + (ptrdiff_t ofs, const MatIterator_<_Tp>& a)\n{\n    MatConstIterator t = (const MatConstIterator&)a + ofs;\n    return (MatIterator_<_Tp>&)t;\n}\n\ntemplate<typename _Tp> static inline\nMatIterator_<_Tp> operator - (const MatIterator_<_Tp>& a, ptrdiff_t ofs)\n{\n    MatConstIterator t = (const MatConstIterator&)a - ofs;\n    return (MatIterator_<_Tp>&)t;\n}\n\n\n\n/////////////////////// SparseMatConstIterator //////////////////////\n\ninline\nSparseMatConstIterator::SparseMatConstIterator()\n    : m(0), hashidx(0), ptr(0)\n{}\n\ninline\nSparseMatConstIterator::SparseMatConstIterator(const SparseMatConstIterator& it)\n    : m(it.m), hashidx(it.hashidx), ptr(it.ptr)\n{}\n\ninline SparseMatConstIterator& SparseMatConstIterator::operator = (const SparseMatConstIterator& it)\n{\n    if( this != &it )\n    {\n        m = it.m;\n        hashidx = it.hashidx;\n        ptr = it.ptr;\n    }\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& SparseMatConstIterator::value() const\n{\n    return *(const _Tp*)ptr;\n}\n\ninline\nconst SparseMat::Node* SparseMatConstIterator::node() const\n{\n    return (ptr && m && m->hdr) ? (const SparseMat::Node*)(const void*)(ptr - m->hdr->valueOffset) : 0;\n}\n\ninline\nSparseMatConstIterator SparseMatConstIterator::operator ++(int)\n{\n    SparseMatConstIterator it = *this;\n    ++*this;\n    return it;\n}\n\ninline\nvoid SparseMatConstIterator::seekEnd()\n{\n    if( m && m->hdr )\n    {\n        hashidx = m->hdr->hashtab.size();\n        ptr = 0;\n    }\n}\n\n\nstatic inline\nbool operator == (const SparseMatConstIterator& it1, const SparseMatConstIterator& it2)\n{\n    return it1.m == it2.m && it1.ptr == it2.ptr;\n}\n\nstatic inline\nbool operator != (const SparseMatConstIterator& it1, const SparseMatConstIterator& it2)\n{\n    return !(it1 == it2);\n}\n\n\n\n///////////////////////// SparseMatIterator /////////////////////////\n\ninline\nSparseMatIterator::SparseMatIterator()\n{}\n\ninline\nSparseMatIterator::SparseMatIterator(SparseMat* _m)\n    : SparseMatConstIterator(_m)\n{}\n\ninline\nSparseMatIterator::SparseMatIterator(const SparseMatIterator& it)\n    : SparseMatConstIterator(it)\n{}\n\ninline\nSparseMatIterator& SparseMatIterator::operator = (const SparseMatIterator& it)\n{\n    (SparseMatConstIterator&)*this = it;\n    return *this;\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMatIterator::value() const\n{\n    return *(_Tp*)ptr;\n}\n\ninline\nSparseMat::Node* SparseMatIterator::node() const\n{\n    return (SparseMat::Node*)SparseMatConstIterator::node();\n}\n\ninline\nSparseMatIterator& SparseMatIterator::operator ++()\n{\n    SparseMatConstIterator::operator ++();\n    return *this;\n}\n\ninline\nSparseMatIterator SparseMatIterator::operator ++(int)\n{\n    SparseMatIterator it = *this;\n    ++*this;\n    return it;\n}\n\n\n\n////////////////////// SparseMatConstIterator_ //////////////////////\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_()\n{}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMat_<_Tp>* _m)\n    : SparseMatConstIterator(_m)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMat* _m)\n    : SparseMatConstIterator(_m)\n{\n    CV_Assert( _m->type() == DataType<_Tp>::type );\n}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMatConstIterator_<_Tp>& it)\n    : SparseMatConstIterator(it)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>& SparseMatConstIterator_<_Tp>::operator = (const SparseMatConstIterator_<_Tp>& it)\n{\n    return reinterpret_cast<SparseMatConstIterator_<_Tp>&>\n         (*reinterpret_cast<SparseMatConstIterator*>(this) =\n           reinterpret_cast<const SparseMatConstIterator&>(it));\n}\n\ntemplate<typename _Tp> inline\nconst _Tp& SparseMatConstIterator_<_Tp>::operator *() const\n{\n    return *(const _Tp*)this->ptr;\n}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>& SparseMatConstIterator_<_Tp>::operator ++()\n{\n    SparseMatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp> SparseMatConstIterator_<_Tp>::operator ++(int)\n{\n    SparseMatConstIterator_<_Tp> it = *this;\n    SparseMatConstIterator::operator ++();\n    return it;\n}\n\n\n\n///////////////////////// SparseMatIterator_ ////////////////////////\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_()\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat_<_Tp>* _m)\n    : SparseMatConstIterator_<_Tp>(_m)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat* _m)\n    : SparseMatConstIterator_<_Tp>(_m)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_(const SparseMatIterator_<_Tp>& it)\n    : SparseMatConstIterator_<_Tp>(it)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>& SparseMatIterator_<_Tp>::operator = (const SparseMatIterator_<_Tp>& it)\n{\n    return reinterpret_cast<SparseMatIterator_<_Tp>&>\n         (*reinterpret_cast<SparseMatConstIterator*>(this) =\n           reinterpret_cast<const SparseMatConstIterator&>(it));\n}\n\ntemplate<typename _Tp> inline\n_Tp& SparseMatIterator_<_Tp>::operator *() const\n{\n    return *(_Tp*)this->ptr;\n}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>& SparseMatIterator_<_Tp>::operator ++()\n{\n    SparseMatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp> SparseMatIterator_<_Tp>::operator ++(int)\n{\n    SparseMatIterator_<_Tp> it = *this;\n    SparseMatConstIterator::operator ++();\n    return it;\n}\n\n\n\n//////////////////////// MatCommaInitializer_ ///////////////////////\n\ntemplate<typename _Tp> inline\nMatCommaInitializer_<_Tp>::MatCommaInitializer_(Mat_<_Tp>* _m)\n    : it(_m)\n{}\n\ntemplate<typename _Tp> template<typename T2> inline\nMatCommaInitializer_<_Tp>& MatCommaInitializer_<_Tp>::operator , (T2 v)\n{\n    CV_DbgAssert( this->it < ((const Mat_<_Tp>*)this->it.m)->end() );\n    *this->it = _Tp(v);\n    ++this->it;\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMatCommaInitializer_<_Tp>::operator Mat_<_Tp>() const\n{\n    CV_DbgAssert( this->it == ((const Mat_<_Tp>*)this->it.m)->end() );\n    return Mat_<_Tp>(*this->it.m);\n}\n\n\ntemplate<typename _Tp, typename T2> static inline\nMatCommaInitializer_<_Tp> operator << (const Mat_<_Tp>& m, T2 val)\n{\n    MatCommaInitializer_<_Tp> commaInitializer((Mat_<_Tp>*)&m);\n    return (commaInitializer, val);\n}\n\n\n\n///////////////////////// Matrix Expressions ////////////////////////\n\ninline\nMat& Mat::operator = (const MatExpr& e)\n{\n    e.op->assign(e, *this);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>::Mat_(const MatExpr& e)\n{\n    e.op->assign(e, *this, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nMat_<_Tp>& Mat_<_Tp>::operator = (const MatExpr& e)\n{\n    e.op->assign(e, *this, DataType<_Tp>::type);\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nMatExpr Mat_<_Tp>::zeros(int rows, int cols)\n{\n    return Mat::zeros(rows, cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nMatExpr Mat_<_Tp>::zeros(Size sz)\n{\n    return Mat::zeros(sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nMatExpr Mat_<_Tp>::ones(int rows, int cols)\n{\n    return Mat::ones(rows, cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nMatExpr Mat_<_Tp>::ones(Size sz)\n{\n    return Mat::ones(sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nMatExpr Mat_<_Tp>::eye(int rows, int cols)\n{\n    return Mat::eye(rows, cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nMatExpr Mat_<_Tp>::eye(Size sz)\n{\n    return Mat::eye(sz, DataType<_Tp>::type);\n}\n\ninline\nMatExpr::MatExpr()\n    : op(0), flags(0), a(Mat()), b(Mat()), c(Mat()), alpha(0), beta(0), s()\n{}\n\ninline\nMatExpr::MatExpr(const MatOp* _op, int _flags, const Mat& _a, const Mat& _b,\n                 const Mat& _c, double _alpha, double _beta, const Scalar& _s)\n    : op(_op), flags(_flags), a(_a), b(_b), c(_c), alpha(_alpha), beta(_beta), s(_s)\n{}\n\ninline\nMatExpr::operator Mat() const\n{\n    Mat m;\n    op->assign(*this, m);\n    return m;\n}\n\ntemplate<typename _Tp> inline\nMatExpr::operator Mat_<_Tp>() const\n{\n    Mat_<_Tp> m;\n    op->assign(*this, m, DataType<_Tp>::type);\n    return m;\n}\n\n\ntemplate<typename _Tp> static inline\nMatExpr min(const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    return cv::min((const Mat&)a, (const Mat&)b);\n}\n\ntemplate<typename _Tp> static inline\nMatExpr min(const Mat_<_Tp>& a, double s)\n{\n    return cv::min((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline\nMatExpr min(double s, const Mat_<_Tp>& a)\n{\n    return cv::min((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline\nMatExpr max(const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    return cv::max((const Mat&)a, (const Mat&)b);\n}\n\ntemplate<typename _Tp> static inline\nMatExpr max(const Mat_<_Tp>& a, double s)\n{\n    return cv::max((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline\nMatExpr max(double s, const Mat_<_Tp>& a)\n{\n    return cv::max((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline\nMatExpr abs(const Mat_<_Tp>& m)\n{\n    return cv::abs((const Mat&)m);\n}\n\n\nstatic inline\nMat& operator += (Mat& a, const MatExpr& b)\n{\n    b.op->augAssignAdd(b, a);\n    return a;\n}\n\nstatic inline\nconst Mat& operator += (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignAdd(b, (Mat&)a);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator += (Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignAdd(b, a);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nconst Mat_<_Tp>& operator += (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignAdd(b, (Mat&)a);\n    return a;\n}\n\nstatic inline\nMat& operator -= (Mat& a, const MatExpr& b)\n{\n    b.op->augAssignSubtract(b, a);\n    return a;\n}\n\nstatic inline\nconst Mat& operator -= (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignSubtract(b, (Mat&)a);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator -= (Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignSubtract(b, a);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nconst Mat_<_Tp>& operator -= (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignSubtract(b, (Mat&)a);\n    return a;\n}\n\nstatic inline\nMat& operator *= (Mat& a, const MatExpr& b)\n{\n    b.op->augAssignMultiply(b, a);\n    return a;\n}\n\nstatic inline\nconst Mat& operator *= (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignMultiply(b, (Mat&)a);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator *= (Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignMultiply(b, a);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nconst Mat_<_Tp>& operator *= (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignMultiply(b, (Mat&)a);\n    return a;\n}\n\nstatic inline\nMat& operator /= (Mat& a, const MatExpr& b)\n{\n    b.op->augAssignDivide(b, a);\n    return a;\n}\n\nstatic inline\nconst Mat& operator /= (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignDivide(b, (Mat&)a);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator /= (Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignDivide(b, a);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nconst Mat_<_Tp>& operator /= (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignDivide(b, (Mat&)a);\n    return a;\n}\n\n\n//////////////////////////////// UMat ////////////////////////////////\n\ninline\nUMat::UMat(UMatUsageFlags _usageFlags)\n: flags(MAGIC_VAL), dims(0), rows(0), cols(0), allocator(0), usageFlags(_usageFlags), u(0), offset(0), size(&rows)\n{}\n\ninline\nUMat::UMat(int _rows, int _cols, int _type, UMatUsageFlags _usageFlags)\n: flags(MAGIC_VAL), dims(0), rows(0), cols(0), allocator(0), usageFlags(_usageFlags), u(0), offset(0), size(&rows)\n{\n    create(_rows, _cols, _type);\n}\n\ninline\nUMat::UMat(int _rows, int _cols, int _type, const Scalar& _s, UMatUsageFlags _usageFlags)\n: flags(MAGIC_VAL), dims(0), rows(0), cols(0), allocator(0), usageFlags(_usageFlags), u(0), offset(0), size(&rows)\n{\n    create(_rows, _cols, _type);\n    *this = _s;\n}\n\ninline\nUMat::UMat(Size _sz, int _type, UMatUsageFlags _usageFlags)\n: flags(MAGIC_VAL), dims(0), rows(0), cols(0), allocator(0), usageFlags(_usageFlags), u(0), offset(0), size(&rows)\n{\n    create( _sz.height, _sz.width, _type );\n}\n\ninline\nUMat::UMat(Size _sz, int _type, const Scalar& _s, UMatUsageFlags _usageFlags)\n: flags(MAGIC_VAL), dims(0), rows(0), cols(0), allocator(0), usageFlags(_usageFlags), u(0), offset(0), size(&rows)\n{\n    create(_sz.height, _sz.width, _type);\n    *this = _s;\n}\n\ninline\nUMat::UMat(int _dims, const int* _sz, int _type, UMatUsageFlags _usageFlags)\n: flags(MAGIC_VAL), dims(0), rows(0), cols(0), allocator(0), usageFlags(_usageFlags), u(0), offset(0), size(&rows)\n{\n    create(_dims, _sz, _type);\n}\n\ninline\nUMat::UMat(int _dims, const int* _sz, int _type, const Scalar& _s, UMatUsageFlags _usageFlags)\n: flags(MAGIC_VAL), dims(0), rows(0), cols(0), allocator(0), usageFlags(_usageFlags), u(0), offset(0), size(&rows)\n{\n    create(_dims, _sz, _type);\n    *this = _s;\n}\n\ninline\nUMat::UMat(const UMat& m)\n: flags(m.flags), dims(m.dims), rows(m.rows), cols(m.cols), allocator(m.allocator),\n  usageFlags(m.usageFlags), u(m.u), offset(m.offset), size(&rows)\n{\n    addref();\n    if( m.dims <= 2 )\n    {\n        step[0] = m.step[0]; step[1] = m.step[1];\n    }\n    else\n    {\n        dims = 0;\n        copySize(m);\n    }\n}\n\n\ntemplate<typename _Tp> inline\nUMat::UMat(const std::vector<_Tp>& vec, bool copyData)\n: flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), dims(2), rows((int)vec.size()),\ncols(1), allocator(0), usageFlags(USAGE_DEFAULT), u(0), offset(0), size(&rows)\n{\n    if(vec.empty())\n        return;\n    if( !copyData )\n    {\n        // !!!TODO!!!\n        CV_Error(Error::StsNotImplemented, \"\");\n    }\n    else\n        Mat((int)vec.size(), 1, DataType<_Tp>::type, (uchar*)&vec[0]).copyTo(*this);\n}\n\n\ninline\nUMat& UMat::operator = (const UMat& m)\n{\n    if( this != &m )\n    {\n        const_cast<UMat&>(m).addref();\n        release();\n        flags = m.flags;\n        if( dims <= 2 && m.dims <= 2 )\n        {\n            dims = m.dims;\n            rows = m.rows;\n            cols = m.cols;\n            step[0] = m.step[0];\n            step[1] = m.step[1];\n        }\n        else\n            copySize(m);\n        allocator = m.allocator;\n        if (usageFlags == USAGE_DEFAULT)\n            usageFlags = m.usageFlags;\n        u = m.u;\n        offset = m.offset;\n    }\n    return *this;\n}\n\ninline\nUMat UMat::row(int y) const\n{\n    return UMat(*this, Range(y, y + 1), Range::all());\n}\n\ninline\nUMat UMat::col(int x) const\n{\n    return UMat(*this, Range::all(), Range(x, x + 1));\n}\n\ninline\nUMat UMat::rowRange(int startrow, int endrow) const\n{\n    return UMat(*this, Range(startrow, endrow), Range::all());\n}\n\ninline\nUMat UMat::rowRange(const Range& r) const\n{\n    return UMat(*this, r, Range::all());\n}\n\ninline\nUMat UMat::colRange(int startcol, int endcol) const\n{\n    return UMat(*this, Range::all(), Range(startcol, endcol));\n}\n\ninline\nUMat UMat::colRange(const Range& r) const\n{\n    return UMat(*this, Range::all(), r);\n}\n\ninline\nUMat UMat::clone() const\n{\n    UMat m;\n    copyTo(m);\n    return m;\n}\n\ninline\nvoid UMat::assignTo( UMat& m, int _type ) const\n{\n    if( _type < 0 )\n        m = *this;\n    else\n        convertTo(m, _type);\n}\n\ninline\nvoid UMat::create(int _rows, int _cols, int _type, UMatUsageFlags _usageFlags)\n{\n    _type &= TYPE_MASK;\n    if( dims <= 2 && rows == _rows && cols == _cols && type() == _type && u )\n        return;\n    int sz[] = {_rows, _cols};\n    create(2, sz, _type, _usageFlags);\n}\n\ninline\nvoid UMat::create(Size _sz, int _type, UMatUsageFlags _usageFlags)\n{\n    create(_sz.height, _sz.width, _type, _usageFlags);\n}\n\ninline\nvoid UMat::addref()\n{\n    if( u )\n        CV_XADD(&(u->urefcount), 1);\n}\n\ninline void UMat::release()\n{\n    if( u && CV_XADD(&(u->urefcount), -1) == 1 )\n        deallocate();\n    for(int i = 0; i < dims; i++)\n        size.p[i] = 0;\n    u = 0;\n}\n\ninline\nUMat UMat::operator()( Range _rowRange, Range _colRange ) const\n{\n    return UMat(*this, _rowRange, _colRange);\n}\n\ninline\nUMat UMat::operator()( const Rect& roi ) const\n{\n    return UMat(*this, roi);\n}\n\ninline\nUMat UMat::operator()(const Range* ranges) const\n{\n    return UMat(*this, ranges);\n}\n\ninline\nbool UMat::isContinuous() const\n{\n    return (flags & CONTINUOUS_FLAG) != 0;\n}\n\ninline\nbool UMat::isSubmatrix() const\n{\n    return (flags & SUBMATRIX_FLAG) != 0;\n}\n\ninline\nsize_t UMat::elemSize() const\n{\n    return dims > 0 ? step.p[dims - 1] : 0;\n}\n\ninline\nsize_t UMat::elemSize1() const\n{\n    return CV_ELEM_SIZE1(flags);\n}\n\ninline\nint UMat::type() const\n{\n    return CV_MAT_TYPE(flags);\n}\n\ninline\nint UMat::depth() const\n{\n    return CV_MAT_DEPTH(flags);\n}\n\ninline\nint UMat::channels() const\n{\n    return CV_MAT_CN(flags);\n}\n\ninline\nsize_t UMat::step1(int i) const\n{\n    return step.p[i] / elemSize1();\n}\n\ninline\nbool UMat::empty() const\n{\n    return u == 0 || total() == 0;\n}\n\ninline\nsize_t UMat::total() const\n{\n    if( dims <= 2 )\n        return (size_t)rows * cols;\n    size_t p = 1;\n    for( int i = 0; i < dims; i++ )\n        p *= size[i];\n    return p;\n}\n\n#ifdef CV_CXX_MOVE_SEMANTICS\n\ninline\nUMat::UMat(UMat&& m)\n: flags(m.flags), dims(m.dims), rows(m.rows), cols(m.cols), allocator(m.allocator),\n  usageFlags(m.usageFlags), u(m.u), offset(m.offset), size(&rows)\n{\n    if (m.dims <= 2)  // move new step/size info\n    {\n        step[0] = m.step[0];\n        step[1] = m.step[1];\n    }\n    else\n    {\n        CV_DbgAssert(m.step.p != m.step.buf);\n        step.p = m.step.p;\n        size.p = m.size.p;\n        m.step.p = m.step.buf;\n        m.size.p = &m.rows;\n    }\n    m.flags = MAGIC_VAL; m.dims = m.rows = m.cols = 0;\n    m.allocator = NULL;\n    m.u = NULL;\n    m.offset = 0;\n}\n\ninline\nUMat& UMat::operator = (UMat&& m)\n{\n    release();\n    flags = m.flags; dims = m.dims; rows = m.rows; cols = m.cols;\n    allocator = m.allocator; usageFlags = m.usageFlags;\n    u = m.u;\n    offset = m.offset;\n    if (step.p != step.buf) // release self step/size\n    {\n        fastFree(step.p);\n        step.p = step.buf;\n        size.p = &rows;\n    }\n    if (m.dims <= 2) // move new step/size info\n    {\n        step[0] = m.step[0];\n        step[1] = m.step[1];\n    }\n    else\n    {\n        CV_DbgAssert(m.step.p != m.step.buf);\n        step.p = m.step.p;\n        size.p = m.size.p;\n        m.step.p = m.step.buf;\n        m.size.p = &m.rows;\n    }\n    m.flags = MAGIC_VAL; m.dims = m.rows = m.cols = 0;\n    m.allocator = NULL;\n    m.u = NULL;\n    m.offset = 0;\n    return *this;\n}\n\n#endif\n\n\ninline bool UMatData::hostCopyObsolete() const { return (flags & HOST_COPY_OBSOLETE) != 0; }\ninline bool UMatData::deviceCopyObsolete() const { return (flags & DEVICE_COPY_OBSOLETE) != 0; }\ninline bool UMatData::deviceMemMapped() const { return (flags & DEVICE_MEM_MAPPED) != 0; }\ninline bool UMatData::copyOnMap() const { return (flags & COPY_ON_MAP) != 0; }\ninline bool UMatData::tempUMat() const { return (flags & TEMP_UMAT) != 0; }\ninline bool UMatData::tempCopiedUMat() const { return (flags & TEMP_COPIED_UMAT) == TEMP_COPIED_UMAT; }\n\ninline void UMatData::markDeviceMemMapped(bool flag)\n{\n  if(flag)\n    flags |= DEVICE_MEM_MAPPED;\n  else\n    flags &= ~DEVICE_MEM_MAPPED;\n}\n\ninline void UMatData::markHostCopyObsolete(bool flag)\n{\n    if(flag)\n        flags |= HOST_COPY_OBSOLETE;\n    else\n        flags &= ~HOST_COPY_OBSOLETE;\n}\ninline void UMatData::markDeviceCopyObsolete(bool flag)\n{\n    if(flag)\n        flags |= DEVICE_COPY_OBSOLETE;\n    else\n        flags &= ~DEVICE_COPY_OBSOLETE;\n}\n\ninline UMatDataAutoLock::UMatDataAutoLock(UMatData* _u) : u(_u) { u->lock(); }\ninline UMatDataAutoLock::~UMatDataAutoLock() { u->unlock(); }\n\n//! @endcond\n\n} //cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/matx.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_MATX_HPP__\n#define __OPENCV_CORE_MATX_HPP__\n\n#ifndef __cplusplus\n#  error matx.hpp header must be compiled as C++\n#endif\n\n#include \"opencv2/core/cvdef.h\"\n#include \"opencv2/core/base.hpp\"\n#include \"opencv2/core/traits.hpp\"\n#include \"opencv2/core/saturate.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup core_basic\n//! @{\n\n////////////////////////////// Small Matrix ///////////////////////////\n\n//! @cond IGNORED\nstruct CV_EXPORTS Matx_AddOp {};\nstruct CV_EXPORTS Matx_SubOp {};\nstruct CV_EXPORTS Matx_ScaleOp {};\nstruct CV_EXPORTS Matx_MulOp {};\nstruct CV_EXPORTS Matx_DivOp {};\nstruct CV_EXPORTS Matx_MatMulOp {};\nstruct CV_EXPORTS Matx_TOp {};\n//! @endcond\n\n/** @brief Template class for small matrices whose type and size are known at compilation time\n\nIf you need a more flexible type, use Mat . The elements of the matrix M are accessible using the\nM(i,j) notation. Most of the common matrix operations (see also @ref MatrixExpressions ) are\navailable. To do an operation on Matx that is not implemented, you can easily convert the matrix to\nMat and backwards:\n@code\n    Matx33f m(1, 2, 3,\n              4, 5, 6,\n              7, 8, 9);\n    cout << sum(Mat(m*m.t())) << endl;\n @endcode\n */\ntemplate<typename _Tp, int m, int n> class Matx\n{\npublic:\n    enum { depth    = DataType<_Tp>::depth,\n           rows     = m,\n           cols     = n,\n           channels = rows*cols,\n           type     = CV_MAKETYPE(depth, channels),\n           shortdim = (m < n ? m : n)\n         };\n\n    typedef _Tp                           value_type;\n    typedef Matx<_Tp, m, n>               mat_type;\n    typedef Matx<_Tp, shortdim, 1> diag_type;\n\n    //! default constructor\n    Matx();\n\n    Matx(_Tp v0); //!< 1x1 matrix\n    Matx(_Tp v0, _Tp v1); //!< 1x2 or 2x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2); //!< 1x3 or 3x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3); //!< 1x4, 2x2 or 4x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4); //!< 1x5 or 5x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5); //!< 1x6, 2x3, 3x2 or 6x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6); //!< 1x7 or 7x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7); //!< 1x8, 2x4, 4x2 or 8x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8); //!< 1x9, 3x3 or 9x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9); //!< 1x10, 2x5 or 5x2 or 10x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n         _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n         _Tp v8, _Tp v9, _Tp v10, _Tp v11); //!< 1x12, 2x6, 3x4, 4x3, 6x2 or 12x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n         _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n         _Tp v8, _Tp v9, _Tp v10, _Tp v11,\n         _Tp v12, _Tp v13); //!< 1x14, 2x7, 7x2 or 14x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n         _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n         _Tp v8, _Tp v9, _Tp v10, _Tp v11,\n         _Tp v12, _Tp v13, _Tp v14, _Tp v15); //!< 1x16, 4x4 or 16x1 matrix\n    explicit Matx(const _Tp* vals); //!< initialize from a plain array\n\n    static Matx all(_Tp alpha);\n    static Matx zeros();\n    static Matx ones();\n    static Matx eye();\n    static Matx diag(const diag_type& d);\n    static Matx randu(_Tp a, _Tp b);\n    static Matx randn(_Tp a, _Tp b);\n\n    //! dot product computed with the default precision\n    _Tp dot(const Matx<_Tp, m, n>& v) const;\n\n    //! dot product computed in double-precision arithmetics\n    double ddot(const Matx<_Tp, m, n>& v) const;\n\n    //! conversion to another data type\n    template<typename T2> operator Matx<T2, m, n>() const;\n\n    //! change the matrix shape\n    template<int m1, int n1> Matx<_Tp, m1, n1> reshape() const;\n\n    //! extract part of the matrix\n    template<int m1, int n1> Matx<_Tp, m1, n1> get_minor(int i, int j) const;\n\n    //! extract the matrix row\n    Matx<_Tp, 1, n> row(int i) const;\n\n    //! extract the matrix column\n    Matx<_Tp, m, 1> col(int i) const;\n\n    //! extract the matrix diagonal\n    diag_type diag() const;\n\n    //! transpose the matrix\n    Matx<_Tp, n, m> t() const;\n\n    //! invert the matrix\n    Matx<_Tp, n, m> inv(int method=DECOMP_LU, bool *p_is_ok = NULL) const;\n\n    //! solve linear system\n    template<int l> Matx<_Tp, n, l> solve(const Matx<_Tp, m, l>& rhs, int flags=DECOMP_LU) const;\n    Vec<_Tp, n> solve(const Vec<_Tp, m>& rhs, int method) const;\n\n    //! multiply two matrices element-wise\n    Matx<_Tp, m, n> mul(const Matx<_Tp, m, n>& a) const;\n\n    //! divide two matrices element-wise\n    Matx<_Tp, m, n> div(const Matx<_Tp, m, n>& a) const;\n\n    //! element access\n    const _Tp& operator ()(int i, int j) const;\n    _Tp& operator ()(int i, int j);\n\n    //! 1D element access\n    const _Tp& operator ()(int i) const;\n    _Tp& operator ()(int i);\n\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_AddOp);\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp);\n    template<typename _T2> Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp);\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp);\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_DivOp);\n    template<int l> Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp);\n    Matx(const Matx<_Tp, n, m>& a, Matx_TOp);\n\n    _Tp val[m*n]; //< matrix elements\n};\n\ntypedef Matx<float, 1, 2> Matx12f;\ntypedef Matx<double, 1, 2> Matx12d;\ntypedef Matx<float, 1, 3> Matx13f;\ntypedef Matx<double, 1, 3> Matx13d;\ntypedef Matx<float, 1, 4> Matx14f;\ntypedef Matx<double, 1, 4> Matx14d;\ntypedef Matx<float, 1, 6> Matx16f;\ntypedef Matx<double, 1, 6> Matx16d;\n\ntypedef Matx<float, 2, 1> Matx21f;\ntypedef Matx<double, 2, 1> Matx21d;\ntypedef Matx<float, 3, 1> Matx31f;\ntypedef Matx<double, 3, 1> Matx31d;\ntypedef Matx<float, 4, 1> Matx41f;\ntypedef Matx<double, 4, 1> Matx41d;\ntypedef Matx<float, 6, 1> Matx61f;\ntypedef Matx<double, 6, 1> Matx61d;\n\ntypedef Matx<float, 2, 2> Matx22f;\ntypedef Matx<double, 2, 2> Matx22d;\ntypedef Matx<float, 2, 3> Matx23f;\ntypedef Matx<double, 2, 3> Matx23d;\ntypedef Matx<float, 3, 2> Matx32f;\ntypedef Matx<double, 3, 2> Matx32d;\n\ntypedef Matx<float, 3, 3> Matx33f;\ntypedef Matx<double, 3, 3> Matx33d;\n\ntypedef Matx<float, 3, 4> Matx34f;\ntypedef Matx<double, 3, 4> Matx34d;\ntypedef Matx<float, 4, 3> Matx43f;\ntypedef Matx<double, 4, 3> Matx43d;\n\ntypedef Matx<float, 4, 4> Matx44f;\ntypedef Matx<double, 4, 4> Matx44d;\ntypedef Matx<float, 6, 6> Matx66f;\ntypedef Matx<double, 6, 6> Matx66d;\n\n/*!\n  traits\n*/\ntemplate<typename _Tp, int m, int n> class DataType< Matx<_Tp, m, n> >\n{\npublic:\n    typedef Matx<_Tp, m, n>                               value_type;\n    typedef Matx<typename DataType<_Tp>::work_type, m, n> work_type;\n    typedef _Tp                                           channel_type;\n    typedef value_type                                    vec_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = m * n,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\n/** @brief  Comma-separated Matrix Initializer\n*/\ntemplate<typename _Tp, int m, int n> class MatxCommaInitializer\n{\npublic:\n    MatxCommaInitializer(Matx<_Tp, m, n>* _mtx);\n    template<typename T2> MatxCommaInitializer<_Tp, m, n>& operator , (T2 val);\n    Matx<_Tp, m, n> operator *() const;\n\n    Matx<_Tp, m, n>* dst;\n    int idx;\n};\n\n/*\n Utility methods\n*/\ntemplate<typename _Tp, int m> static double determinant(const Matx<_Tp, m, m>& a);\ntemplate<typename _Tp, int m, int n> static double trace(const Matx<_Tp, m, n>& a);\ntemplate<typename _Tp, int m, int n> static double norm(const Matx<_Tp, m, n>& M);\ntemplate<typename _Tp, int m, int n> static double norm(const Matx<_Tp, m, n>& M, int normType);\n\n\n\n/////////////////////// Vec (used as element of multi-channel images /////////////////////\n\n/** @brief Template class for short numerical vectors, a partial case of Matx\n\nThis template class represents short numerical vectors (of 1, 2, 3, 4 ... elements) on which you\ncan perform basic arithmetical operations, access individual elements using [] operator etc. The\nvectors are allocated on stack, as opposite to std::valarray, std::vector, cv::Mat etc., which\nelements are dynamically allocated in the heap.\n\nThe template takes 2 parameters:\n@tparam _Tp element type\n@tparam cn the number of elements\n\nIn addition to the universal notation like Vec<float, 3>, you can use shorter aliases\nfor the most popular specialized variants of Vec, e.g. Vec3f ~ Vec<float, 3>.\n\nIt is possible to convert Vec\\<T,2\\> to/from Point_, Vec\\<T,3\\> to/from Point3_ , and Vec\\<T,4\\>\nto CvScalar or Scalar_. Use operator[] to access the elements of Vec.\n\nAll the expected vector operations are also implemented:\n-   v1 = v2 + v3\n-   v1 = v2 - v3\n-   v1 = v2 \\* scale\n-   v1 = scale \\* v2\n-   v1 = -v2\n-   v1 += v2 and other augmenting operations\n-   v1 == v2, v1 != v2\n-   norm(v1) (euclidean norm)\nThe Vec class is commonly used to describe pixel types of multi-channel arrays. See Mat for details.\n*/\ntemplate<typename _Tp, int cn> class Vec : public Matx<_Tp, cn, 1>\n{\npublic:\n    typedef _Tp value_type;\n    enum { depth    = Matx<_Tp, cn, 1>::depth,\n           channels = cn,\n           type     = CV_MAKETYPE(depth, channels)\n         };\n\n    //! default constructor\n    Vec();\n\n    Vec(_Tp v0); //!< 1-element vector constructor\n    Vec(_Tp v0, _Tp v1); //!< 2-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2); //!< 3-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3); //!< 4-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4); //!< 5-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5); //!< 6-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6); //!< 7-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7); //!< 8-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8); //!< 9-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9); //!< 10-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9, _Tp v10, _Tp v11, _Tp v12, _Tp v13); //!< 14-element vector constructor\n    explicit Vec(const _Tp* values);\n\n    Vec(const Vec<_Tp, cn>& v);\n\n    static Vec all(_Tp alpha);\n\n    //! per-element multiplication\n    Vec mul(const Vec<_Tp, cn>& v) const;\n\n    //! conjugation (makes sense for complex numbers and quaternions)\n    Vec conj() const;\n\n    /*!\n      cross product of the two 3D vectors.\n\n      For other dimensionalities the exception is raised\n    */\n    Vec cross(const Vec& v) const;\n    //! conversion to another data type\n    template<typename T2> operator Vec<T2, cn>() const;\n\n    /*! element access */\n    const _Tp& operator [](int i) const;\n    _Tp& operator[](int i);\n    const _Tp& operator ()(int i) const;\n    _Tp& operator ()(int i);\n\n    Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_AddOp);\n    Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_SubOp);\n    template<typename _T2> Vec(const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp);\n};\n\n/** @name Shorter aliases for the most popular specializations of Vec<T,n>\n  @{\n*/\ntypedef Vec<uchar, 2> Vec2b;\ntypedef Vec<uchar, 3> Vec3b;\ntypedef Vec<uchar, 4> Vec4b;\n\ntypedef Vec<short, 2> Vec2s;\ntypedef Vec<short, 3> Vec3s;\ntypedef Vec<short, 4> Vec4s;\n\ntypedef Vec<ushort, 2> Vec2w;\ntypedef Vec<ushort, 3> Vec3w;\ntypedef Vec<ushort, 4> Vec4w;\n\ntypedef Vec<int, 2> Vec2i;\ntypedef Vec<int, 3> Vec3i;\ntypedef Vec<int, 4> Vec4i;\ntypedef Vec<int, 6> Vec6i;\ntypedef Vec<int, 8> Vec8i;\n\ntypedef Vec<float, 2> Vec2f;\ntypedef Vec<float, 3> Vec3f;\ntypedef Vec<float, 4> Vec4f;\ntypedef Vec<float, 6> Vec6f;\n\ntypedef Vec<double, 2> Vec2d;\ntypedef Vec<double, 3> Vec3d;\ntypedef Vec<double, 4> Vec4d;\ntypedef Vec<double, 6> Vec6d;\n/** @} */\n\n/*!\n  traits\n*/\ntemplate<typename _Tp, int cn> class DataType< Vec<_Tp, cn> >\n{\npublic:\n    typedef Vec<_Tp, cn>                               value_type;\n    typedef Vec<typename DataType<_Tp>::work_type, cn> work_type;\n    typedef _Tp                                        channel_type;\n    typedef value_type                                 vec_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = cn,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\n/** @brief  Comma-separated Vec Initializer\n*/\ntemplate<typename _Tp, int m> class VecCommaInitializer : public MatxCommaInitializer<_Tp, m, 1>\n{\npublic:\n    VecCommaInitializer(Vec<_Tp, m>* _vec);\n    template<typename T2> VecCommaInitializer<_Tp, m>& operator , (T2 val);\n    Vec<_Tp, m> operator *() const;\n};\n\ntemplate<typename _Tp, int cn> static Vec<_Tp, cn> normalize(const Vec<_Tp, cn>& v);\n\n//! @} core_basic\n\n//! @cond IGNORED\n\n///////////////////////////////////// helper classes /////////////////////////////////////\nnamespace internal\n{\n\ntemplate<typename _Tp, int m> struct Matx_DetOp\n{\n    double operator ()(const Matx<_Tp, m, m>& a) const\n    {\n        Matx<_Tp, m, m> temp = a;\n        double p = LU(temp.val, m*sizeof(_Tp), m, 0, 0, 0);\n        if( p == 0 )\n            return p;\n        for( int i = 0; i < m; i++ )\n            p *= temp(i, i);\n        return 1./p;\n    }\n};\n\ntemplate<typename _Tp> struct Matx_DetOp<_Tp, 1>\n{\n    double operator ()(const Matx<_Tp, 1, 1>& a) const\n    {\n        return a(0,0);\n    }\n};\n\ntemplate<typename _Tp> struct Matx_DetOp<_Tp, 2>\n{\n    double operator ()(const Matx<_Tp, 2, 2>& a) const\n    {\n        return a(0,0)*a(1,1) - a(0,1)*a(1,0);\n    }\n};\n\ntemplate<typename _Tp> struct Matx_DetOp<_Tp, 3>\n{\n    double operator ()(const Matx<_Tp, 3, 3>& a) const\n    {\n        return a(0,0)*(a(1,1)*a(2,2) - a(2,1)*a(1,2)) -\n            a(0,1)*(a(1,0)*a(2,2) - a(2,0)*a(1,2)) +\n            a(0,2)*(a(1,0)*a(2,1) - a(2,0)*a(1,1));\n    }\n};\n\ntemplate<typename _Tp> Vec<_Tp, 2> inline conjugate(const Vec<_Tp, 2>& v)\n{\n    return Vec<_Tp, 2>(v[0], -v[1]);\n}\n\ntemplate<typename _Tp> Vec<_Tp, 4> inline conjugate(const Vec<_Tp, 4>& v)\n{\n    return Vec<_Tp, 4>(v[0], -v[1], -v[2], -v[3]);\n}\n\n} // internal\n\n\n\n////////////////////////////////// Matx Implementation ///////////////////////////////////\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx()\n{\n    for(int i = 0; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0)\n{\n    val[0] = v0;\n    for(int i = 1; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0, _Tp v1)\n{\n    CV_StaticAssert(channels >= 2, \"Matx should have at least 2 elements.\");\n    val[0] = v0; val[1] = v1;\n    for(int i = 2; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2)\n{\n    CV_StaticAssert(channels >= 3, \"Matx should have at least 3 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2;\n    for(int i = 3; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3)\n{\n    CV_StaticAssert(channels >= 4, \"Matx should have at least 4 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    for(int i = 4; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4)\n{\n    CV_StaticAssert(channels >= 5, \"Matx should have at least 5 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; val[4] = v4;\n    for(int i = 5; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5)\n{\n    CV_StaticAssert(channels >= 6, \"Matx should have at least 6 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5;\n    for(int i = 6; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6)\n{\n    CV_StaticAssert(channels >= 7, \"Matx should have at least 7 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6;\n    for(int i = 7; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7)\n{\n    CV_StaticAssert(channels >= 8, \"Matx should have at least 8 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    for(int i = 8; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8)\n{\n    CV_StaticAssert(channels >= 9, \"Matx should have at least 9 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8;\n    for(int i = 9; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9)\n{\n    CV_StaticAssert(channels >= 10, \"Matx should have at least 10 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9;\n    for(int i = 10; i < channels; i++) val[i] = _Tp(0);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9, _Tp v10, _Tp v11)\n{\n    CV_StaticAssert(channels >= 12, \"Matx should have at least 12 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9; val[10] = v10; val[11] = v11;\n    for(int i = 12; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9, _Tp v10, _Tp v11, _Tp v12, _Tp v13)\n{\n    CV_StaticAssert(channels == 14, \"Matx should have at least 14 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9; val[10] = v10; val[11] = v11;\n    val[12] = v12; val[13] = v13;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9, _Tp v10, _Tp v11, _Tp v12, _Tp v13, _Tp v14, _Tp v15)\n{\n    CV_StaticAssert(channels >= 16, \"Matx should have at least 16 elements.\");\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9; val[10] = v10; val[11] = v11;\n    val[12] = v12; val[13] = v13; val[14] = v14; val[15] = v15;\n    for(int i = 16; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n>::Matx(const _Tp* values)\n{\n    for( int i = 0; i < channels; i++ ) val[i] = values[i];\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n> Matx<_Tp, m, n>::all(_Tp alpha)\n{\n    Matx<_Tp, m, n> M;\n    for( int i = 0; i < m*n; i++ ) M.val[i] = alpha;\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::zeros()\n{\n    return all(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::ones()\n{\n    return all(1);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::eye()\n{\n    Matx<_Tp,m,n> M;\n    for(int i = 0; i < shortdim; i++)\n        M(i,i) = 1;\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\n_Tp Matx<_Tp, m, n>::dot(const Matx<_Tp, m, n>& M) const\n{\n    _Tp s = 0;\n    for( int i = 0; i < channels; i++ ) s += val[i]*M.val[i];\n    return s;\n}\n\ntemplate<typename _Tp, int m, int n> inline\ndouble Matx<_Tp, m, n>::ddot(const Matx<_Tp, m, n>& M) const\n{\n    double s = 0;\n    for( int i = 0; i < channels; i++ ) s += (double)val[i]*M.val[i];\n    return s;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::diag(const typename Matx<_Tp,m,n>::diag_type& d)\n{\n    Matx<_Tp,m,n> M;\n    for(int i = 0; i < shortdim; i++)\n        M(i,i) = d(i, 0);\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> template<typename T2>\ninline Matx<_Tp, m, n>::operator Matx<T2, m, n>() const\n{\n    Matx<T2, m, n> M;\n    for( int i = 0; i < m*n; i++ ) M.val[i] = saturate_cast<T2>(val[i]);\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> template<int m1, int n1> inline\nMatx<_Tp, m1, n1> Matx<_Tp, m, n>::reshape() const\n{\n    CV_StaticAssert(m1*n1 == m*n, \"Input and destnarion matrices must have the same number of elements\");\n    return (const Matx<_Tp, m1, n1>&)*this;\n}\n\ntemplate<typename _Tp, int m, int n>\ntemplate<int m1, int n1> inline\nMatx<_Tp, m1, n1> Matx<_Tp, m, n>::get_minor(int i, int j) const\n{\n    CV_DbgAssert(0 <= i && i+m1 <= m && 0 <= j && j+n1 <= n);\n    Matx<_Tp, m1, n1> s;\n    for( int di = 0; di < m1; di++ )\n        for( int dj = 0; dj < n1; dj++ )\n            s(di, dj) = (*this)(i+di, j+dj);\n    return s;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, 1, n> Matx<_Tp, m, n>::row(int i) const\n{\n    CV_DbgAssert((unsigned)i < (unsigned)m);\n    return Matx<_Tp, 1, n>(&val[i*n]);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, 1> Matx<_Tp, m, n>::col(int j) const\n{\n    CV_DbgAssert((unsigned)j < (unsigned)n);\n    Matx<_Tp, m, 1> v;\n    for( int i = 0; i < m; i++ )\n        v.val[i] = val[i*n + j];\n    return v;\n}\n\ntemplate<typename _Tp, int m, int n> inline\ntypename Matx<_Tp, m, n>::diag_type Matx<_Tp, m, n>::diag() const\n{\n    diag_type d;\n    for( int i = 0; i < shortdim; i++ )\n        d.val[i] = val[i*n + i];\n    return d;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nconst _Tp& Matx<_Tp, m, n>::operator()(int i, int j) const\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)m && (unsigned)j < (unsigned)n );\n    return this->val[i*n + j];\n}\n\ntemplate<typename _Tp, int m, int n> inline\n_Tp& Matx<_Tp, m, n>::operator ()(int i, int j)\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)m && (unsigned)j < (unsigned)n );\n    return val[i*n + j];\n}\n\ntemplate<typename _Tp, int m, int n> inline\nconst _Tp& Matx<_Tp, m, n>::operator ()(int i) const\n{\n    CV_StaticAssert(m == 1 || n == 1, \"Single index indexation requires matrix to be a column or a row\");\n    CV_DbgAssert( (unsigned)i < (unsigned)(m+n-1) );\n    return val[i];\n}\n\ntemplate<typename _Tp, int m, int n> inline\n_Tp& Matx<_Tp, m, n>::operator ()(int i)\n{\n    CV_StaticAssert(m == 1 || n == 1, \"Single index indexation requires matrix to be a column or a row\");\n    CV_DbgAssert( (unsigned)i < (unsigned)(m+n-1) );\n    return val[i];\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_AddOp)\n{\n    for( int i = 0; i < channels; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] + b.val[i]);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp)\n{\n    for( int i = 0; i < channels; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] - b.val[i]);\n}\n\ntemplate<typename _Tp, int m, int n> template<typename _T2> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp)\n{\n    for( int i = 0; i < channels; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp)\n{\n    for( int i = 0; i < channels; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] * b.val[i]);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_DivOp)\n{\n    for( int i = 0; i < channels; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] / b.val[i]);\n}\n\ntemplate<typename _Tp, int m, int n> template<int l> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp)\n{\n    for( int i = 0; i < m; i++ )\n        for( int j = 0; j < n; j++ )\n        {\n            _Tp s = 0;\n            for( int k = 0; k < l; k++ )\n                s += a(i, k) * b(k, j);\n            val[i*n + j] = s;\n        }\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, n, m>& a, Matx_TOp)\n{\n    for( int i = 0; i < m; i++ )\n        for( int j = 0; j < n; j++ )\n            val[i*n + j] = a(j, i);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n> Matx<_Tp, m, n>::mul(const Matx<_Tp, m, n>& a) const\n{\n    return Matx<_Tp, m, n>(*this, a, Matx_MulOp());\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n> Matx<_Tp, m, n>::div(const Matx<_Tp, m, n>& a) const\n{\n    return Matx<_Tp, m, n>(*this, a, Matx_DivOp());\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, n, m> Matx<_Tp, m, n>::t() const\n{\n    return Matx<_Tp, n, m>(*this, Matx_TOp());\n}\n\ntemplate<typename _Tp, int m, int n> inline\nVec<_Tp, n> Matx<_Tp, m, n>::solve(const Vec<_Tp, m>& rhs, int method) const\n{\n    Matx<_Tp, n, 1> x = solve((const Matx<_Tp, m, 1>&)(rhs), method);\n    return (Vec<_Tp, n>&)(x);\n}\n\ntemplate<typename _Tp, int m> static inline\ndouble determinant(const Matx<_Tp, m, m>& a)\n{\n    return cv::internal::Matx_DetOp<_Tp, m>()(a);\n}\n\ntemplate<typename _Tp, int m, int n> static inline\ndouble trace(const Matx<_Tp, m, n>& a)\n{\n    _Tp s = 0;\n    for( int i = 0; i < std::min(m, n); i++ )\n        s += a(i,i);\n    return s;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\ndouble norm(const Matx<_Tp, m, n>& M)\n{\n    return std::sqrt(normL2Sqr<_Tp, double>(M.val, m*n));\n}\n\ntemplate<typename _Tp, int m, int n> static inline\ndouble norm(const Matx<_Tp, m, n>& M, int normType)\n{\n    switch(normType) {\n    case NORM_INF:\n        return (double)normInf<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n);\n    case NORM_L1:\n        return (double)normL1<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n);\n    case NORM_L2SQR:\n        return (double)normL2Sqr<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n);\n    default:\n    case NORM_L2:\n        return std::sqrt((double)normL2Sqr<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n));\n    }\n}\n\n\n\n//////////////////////////////// matx comma initializer //////////////////////////////////\n\ntemplate<typename _Tp, typename _T2, int m, int n> static inline\nMatxCommaInitializer<_Tp, m, n> operator << (const Matx<_Tp, m, n>& mtx, _T2 val)\n{\n    MatxCommaInitializer<_Tp, m, n> commaInitializer((Matx<_Tp, m, n>*)&mtx);\n    return (commaInitializer, val);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatxCommaInitializer<_Tp, m, n>::MatxCommaInitializer(Matx<_Tp, m, n>* _mtx)\n    : dst(_mtx), idx(0)\n{}\n\ntemplate<typename _Tp, int m, int n> template<typename _T2> inline\nMatxCommaInitializer<_Tp, m, n>& MatxCommaInitializer<_Tp, m, n>::operator , (_T2 value)\n{\n    CV_DbgAssert( idx < m*n );\n    dst->val[idx++] = saturate_cast<_Tp>(value);\n    return *this;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n> MatxCommaInitializer<_Tp, m, n>::operator *() const\n{\n    CV_DbgAssert( idx == n*m );\n    return *dst;\n}\n\n\n\n/////////////////////////////////// Vec Implementation ///////////////////////////////////\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec() {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0)\n    : Matx<_Tp, cn, 1>(v0) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1)\n    : Matx<_Tp, cn, 1>(v0, v1) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2)\n    : Matx<_Tp, cn, 1>(v0, v1, v2) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7, v8) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9, _Tp v10, _Tp v11, _Tp v12, _Tp v13)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(const _Tp* values)\n    : Matx<_Tp, cn, 1>(values) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(const Vec<_Tp, cn>& m)\n    : Matx<_Tp, cn, 1>(m.val) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_AddOp op)\n    : Matx<_Tp, cn, 1>(a, b, op) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_SubOp op)\n    : Matx<_Tp, cn, 1>(a, b, op) {}\n\ntemplate<typename _Tp, int cn> template<typename _T2> inline\nVec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp op)\n    : Matx<_Tp, cn, 1>(a, alpha, op) {}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn> Vec<_Tp, cn>::all(_Tp alpha)\n{\n    Vec v;\n    for( int i = 0; i < cn; i++ ) v.val[i] = alpha;\n    return v;\n}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn> Vec<_Tp, cn>::mul(const Vec<_Tp, cn>& v) const\n{\n    Vec<_Tp, cn> w;\n    for( int i = 0; i < cn; i++ ) w.val[i] = saturate_cast<_Tp>(this->val[i]*v.val[i]);\n    return w;\n}\n\ntemplate<> inline\nVec<float, 2> Vec<float, 2>::conj() const\n{\n    return cv::internal::conjugate(*this);\n}\n\ntemplate<> inline\nVec<double, 2> Vec<double, 2>::conj() const\n{\n    return cv::internal::conjugate(*this);\n}\n\ntemplate<> inline\nVec<float, 4> Vec<float, 4>::conj() const\n{\n    return cv::internal::conjugate(*this);\n}\n\ntemplate<> inline\nVec<double, 4> Vec<double, 4>::conj() const\n{\n    return cv::internal::conjugate(*this);\n}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn> Vec<_Tp, cn>::cross(const Vec<_Tp, cn>&) const\n{\n    CV_StaticAssert(cn == 3, \"for arbitrary-size vector there is no cross-product defined\");\n    return Vec<_Tp, cn>();\n}\n\ntemplate<> inline\nVec<float, 3> Vec<float, 3>::cross(const Vec<float, 3>& v) const\n{\n    return Vec<float,3>(val[1]*v.val[2] - val[2]*v.val[1],\n                     val[2]*v.val[0] - val[0]*v.val[2],\n                     val[0]*v.val[1] - val[1]*v.val[0]);\n}\n\ntemplate<> inline\nVec<double, 3> Vec<double, 3>::cross(const Vec<double, 3>& v) const\n{\n    return Vec<double,3>(val[1]*v.val[2] - val[2]*v.val[1],\n                     val[2]*v.val[0] - val[0]*v.val[2],\n                     val[0]*v.val[1] - val[1]*v.val[0]);\n}\n\ntemplate<typename _Tp, int cn> template<typename T2> inline\nVec<_Tp, cn>::operator Vec<T2, cn>() const\n{\n    Vec<T2, cn> v;\n    for( int i = 0; i < cn; i++ ) v.val[i] = saturate_cast<T2>(this->val[i]);\n    return v;\n}\n\ntemplate<typename _Tp, int cn> inline\nconst _Tp& Vec<_Tp, cn>::operator [](int i) const\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline\n_Tp& Vec<_Tp, cn>::operator [](int i)\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline\nconst _Tp& Vec<_Tp, cn>::operator ()(int i) const\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline\n_Tp& Vec<_Tp, cn>::operator ()(int i)\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn> normalize(const Vec<_Tp, cn>& v)\n{\n    double nv = norm(v);\n    return v * (nv ? 1./nv : 0.);\n}\n\n\n\n//////////////////////////////// matx comma initializer //////////////////////////////////\n\n\ntemplate<typename _Tp, typename _T2, int cn> static inline\nVecCommaInitializer<_Tp, cn> operator << (const Vec<_Tp, cn>& vec, _T2 val)\n{\n    VecCommaInitializer<_Tp, cn> commaInitializer((Vec<_Tp, cn>*)&vec);\n    return (commaInitializer, val);\n}\n\ntemplate<typename _Tp, int cn> inline\nVecCommaInitializer<_Tp, cn>::VecCommaInitializer(Vec<_Tp, cn>* _vec)\n    : MatxCommaInitializer<_Tp, cn, 1>(_vec)\n{}\n\ntemplate<typename _Tp, int cn> template<typename _T2> inline\nVecCommaInitializer<_Tp, cn>& VecCommaInitializer<_Tp, cn>::operator , (_T2 value)\n{\n    CV_DbgAssert( this->idx < cn );\n    this->dst->val[this->idx++] = saturate_cast<_Tp>(value);\n    return *this;\n}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn> VecCommaInitializer<_Tp, cn>::operator *() const\n{\n    CV_DbgAssert( this->idx == cn );\n    return *this->dst;\n}\n\n//! @endcond\n\n///////////////////////////// Matx out-of-class operators ////////////////////////////////\n\n//! @relates cv::Matx\n//! @{\n\ntemplate<typename _Tp1, typename _Tp2, int m, int n> static inline\nMatx<_Tp1, m, n>& operator += (Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] + b.val[i]);\n    return a;\n}\n\ntemplate<typename _Tp1, typename _Tp2, int m, int n> static inline\nMatx<_Tp1, m, n>& operator -= (Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] - b.val[i]);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator + (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    return Matx<_Tp, m, n>(a, b, Matx_AddOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator - (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    return Matx<_Tp, m, n>(a, b, Matx_SubOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, int alpha)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, float alpha)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, double alpha)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, int alpha)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, float alpha)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, double alpha)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (int alpha, const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (float alpha, const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (double alpha, const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator - (const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, -1, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n, int l> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b)\n{\n    return Matx<_Tp, m, n>(a, b, Matx_MatMulOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nVec<_Tp, m> operator * (const Matx<_Tp, m, n>& a, const Vec<_Tp, n>& b)\n{\n    Matx<_Tp, m, 1> c(a, b, Matx_MatMulOp());\n    return (const Vec<_Tp, m>&)(c);\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nbool operator == (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    for( int i = 0; i < m*n; i++ )\n        if( a.val[i] != b.val[i] ) return false;\n    return true;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nbool operator != (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    return !(a == b);\n}\n\n//! @}\n\n////////////////////////////// Vec out-of-class operators ////////////////////////////////\n\n//! @relates cv::Vec\n//! @{\n\ntemplate<typename _Tp1, typename _Tp2, int cn> static inline\nVec<_Tp1, cn>& operator += (Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b)\n{\n    for( int i = 0; i < cn; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] + b.val[i]);\n    return a;\n}\n\ntemplate<typename _Tp1, typename _Tp2, int cn> static inline\nVec<_Tp1, cn>& operator -= (Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b)\n{\n    for( int i = 0; i < cn; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] - b.val[i]);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator + (const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b)\n{\n    return Vec<_Tp, cn>(a, b, Matx_AddOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator - (const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b)\n{\n    return Vec<_Tp, cn>(a, b, Matx_SubOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, int alpha)\n{\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, float alpha)\n{\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, double alpha)\n{\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, int alpha)\n{\n    double ialpha = 1./alpha;\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*ialpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, float alpha)\n{\n    float ialpha = 1.f/alpha;\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*ialpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, double alpha)\n{\n    double ialpha = 1./alpha;\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*ialpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator * (const Vec<_Tp, cn>& a, int alpha)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator * (int alpha, const Vec<_Tp, cn>& a)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator * (const Vec<_Tp, cn>& a, float alpha)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator * (float alpha, const Vec<_Tp, cn>& a)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator * (const Vec<_Tp, cn>& a, double alpha)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator * (double alpha, const Vec<_Tp, cn>& a)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator / (const Vec<_Tp, cn>& a, int alpha)\n{\n    return Vec<_Tp, cn>(a, 1./alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator / (const Vec<_Tp, cn>& a, float alpha)\n{\n    return Vec<_Tp, cn>(a, 1.f/alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator / (const Vec<_Tp, cn>& a, double alpha)\n{\n    return Vec<_Tp, cn>(a, 1./alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn> operator - (const Vec<_Tp, cn>& a)\n{\n    Vec<_Tp,cn> t;\n    for( int i = 0; i < cn; i++ ) t.val[i] = saturate_cast<_Tp>(-a.val[i]);\n    return t;\n}\n\ntemplate<typename _Tp> inline Vec<_Tp, 4> operator * (const Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2)\n{\n    return Vec<_Tp, 4>(saturate_cast<_Tp>(v1[0]*v2[0] - v1[1]*v2[1] - v1[2]*v2[2] - v1[3]*v2[3]),\n                       saturate_cast<_Tp>(v1[0]*v2[1] + v1[1]*v2[0] + v1[2]*v2[3] - v1[3]*v2[2]),\n                       saturate_cast<_Tp>(v1[0]*v2[2] - v1[1]*v2[3] + v1[2]*v2[0] + v1[3]*v2[1]),\n                       saturate_cast<_Tp>(v1[0]*v2[3] + v1[1]*v2[2] - v1[2]*v2[1] + v1[3]*v2[0]));\n}\n\ntemplate<typename _Tp> inline Vec<_Tp, 4>& operator *= (Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2)\n{\n    v1 = v1 * v2;\n    return v1;\n}\n\n//! @}\n\n} // cv\n\n#endif // __OPENCV_CORE_MATX_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/neon_utils.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HAL_NEON_UTILS_HPP__\n#define __OPENCV_HAL_NEON_UTILS_HPP__\n\n#include \"opencv2/core/cvdef.h\"\n\n//! @addtogroup core_utils_neon\n//! @{\n\n#if CV_NEON\n\ninline int32x2_t cv_vrnd_s32_f32(float32x2_t v)\n{\n    static int32x2_t v_sign = vdup_n_s32(1 << 31),\n        v_05 = vreinterpret_s32_f32(vdup_n_f32(0.5f));\n\n    int32x2_t v_addition = vorr_s32(v_05, vand_s32(v_sign, vreinterpret_s32_f32(v)));\n    return vcvt_s32_f32(vadd_f32(v, vreinterpret_f32_s32(v_addition)));\n}\n\ninline int32x4_t cv_vrndq_s32_f32(float32x4_t v)\n{\n    static int32x4_t v_sign = vdupq_n_s32(1 << 31),\n        v_05 = vreinterpretq_s32_f32(vdupq_n_f32(0.5f));\n\n    int32x4_t v_addition = vorrq_s32(v_05, vandq_s32(v_sign, vreinterpretq_s32_f32(v)));\n    return vcvtq_s32_f32(vaddq_f32(v, vreinterpretq_f32_s32(v_addition)));\n}\n\ninline uint32x2_t cv_vrnd_u32_f32(float32x2_t v)\n{\n    static float32x2_t v_05 = vdup_n_f32(0.5f);\n    return vcvt_u32_f32(vadd_f32(v, v_05));\n}\n\ninline uint32x4_t cv_vrndq_u32_f32(float32x4_t v)\n{\n    static float32x4_t v_05 = vdupq_n_f32(0.5f);\n    return vcvtq_u32_f32(vaddq_f32(v, v_05));\n}\n\ninline float32x4_t cv_vrecpq_f32(float32x4_t val)\n{\n    float32x4_t reciprocal = vrecpeq_f32(val);\n    reciprocal = vmulq_f32(vrecpsq_f32(val, reciprocal), reciprocal);\n    reciprocal = vmulq_f32(vrecpsq_f32(val, reciprocal), reciprocal);\n    return reciprocal;\n}\n\ninline float32x2_t cv_vrecp_f32(float32x2_t val)\n{\n    float32x2_t reciprocal = vrecpe_f32(val);\n    reciprocal = vmul_f32(vrecps_f32(val, reciprocal), reciprocal);\n    reciprocal = vmul_f32(vrecps_f32(val, reciprocal), reciprocal);\n    return reciprocal;\n}\n\ninline float32x4_t cv_vrsqrtq_f32(float32x4_t val)\n{\n    float32x4_t e = vrsqrteq_f32(val);\n    e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(e, e), val), e);\n    e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(e, e), val), e);\n    return e;\n}\n\ninline float32x2_t cv_vrsqrt_f32(float32x2_t val)\n{\n    float32x2_t e = vrsqrte_f32(val);\n    e = vmul_f32(vrsqrts_f32(vmul_f32(e, e), val), e);\n    e = vmul_f32(vrsqrts_f32(vmul_f32(e, e), val), e);\n    return e;\n}\n\ninline float32x4_t cv_vsqrtq_f32(float32x4_t val)\n{\n    return cv_vrecpq_f32(cv_vrsqrtq_f32(val));\n}\n\ninline float32x2_t cv_vsqrt_f32(float32x2_t val)\n{\n    return cv_vrecp_f32(cv_vrsqrt_f32(val));\n}\n\n#endif\n\n//! @}\n\n#endif // __OPENCV_HAL_NEON_UTILS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/ocl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the OpenCV Foundation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OPENCL_HPP__\n#define __OPENCV_OPENCL_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv { namespace ocl {\n\n//! @addtogroup core_opencl\n//! @{\n\nCV_EXPORTS_W bool haveOpenCL();\nCV_EXPORTS_W bool useOpenCL();\nCV_EXPORTS_W bool haveAmdBlas();\nCV_EXPORTS_W bool haveAmdFft();\nCV_EXPORTS_W void setUseOpenCL(bool flag);\nCV_EXPORTS_W void finish();\n\nCV_EXPORTS bool haveSVM();\n\nclass CV_EXPORTS Context;\nclass CV_EXPORTS Device;\nclass CV_EXPORTS Kernel;\nclass CV_EXPORTS Program;\nclass CV_EXPORTS ProgramSource;\nclass CV_EXPORTS Queue;\nclass CV_EXPORTS PlatformInfo;\nclass CV_EXPORTS Image2D;\n\nclass CV_EXPORTS Device\n{\npublic:\n    Device();\n    explicit Device(void* d);\n    Device(const Device& d);\n    Device& operator = (const Device& d);\n    ~Device();\n\n    void set(void* d);\n\n    enum\n    {\n        TYPE_DEFAULT     = (1 << 0),\n        TYPE_CPU         = (1 << 1),\n        TYPE_GPU         = (1 << 2),\n        TYPE_ACCELERATOR = (1 << 3),\n        TYPE_DGPU        = TYPE_GPU + (1 << 16),\n        TYPE_IGPU        = TYPE_GPU + (1 << 17),\n        TYPE_ALL         = 0xFFFFFFFF\n    };\n\n    String name() const;\n    String extensions() const;\n    String version() const;\n    String vendorName() const;\n    String OpenCL_C_Version() const;\n    String OpenCLVersion() const;\n    int deviceVersionMajor() const;\n    int deviceVersionMinor() const;\n    String driverVersion() const;\n    void* ptr() const;\n\n    int type() const;\n\n    int addressBits() const;\n    bool available() const;\n    bool compilerAvailable() const;\n    bool linkerAvailable() const;\n\n    enum\n    {\n        FP_DENORM=(1 << 0),\n        FP_INF_NAN=(1 << 1),\n        FP_ROUND_TO_NEAREST=(1 << 2),\n        FP_ROUND_TO_ZERO=(1 << 3),\n        FP_ROUND_TO_INF=(1 << 4),\n        FP_FMA=(1 << 5),\n        FP_SOFT_FLOAT=(1 << 6),\n        FP_CORRECTLY_ROUNDED_DIVIDE_SQRT=(1 << 7)\n    };\n    int doubleFPConfig() const;\n    int singleFPConfig() const;\n    int halfFPConfig() const;\n\n    bool endianLittle() const;\n    bool errorCorrectionSupport() const;\n\n    enum\n    {\n        EXEC_KERNEL=(1 << 0),\n        EXEC_NATIVE_KERNEL=(1 << 1)\n    };\n    int executionCapabilities() const;\n\n    size_t globalMemCacheSize() const;\n\n    enum\n    {\n        NO_CACHE=0,\n        READ_ONLY_CACHE=1,\n        READ_WRITE_CACHE=2\n    };\n    int globalMemCacheType() const;\n    int globalMemCacheLineSize() const;\n    size_t globalMemSize() const;\n\n    size_t localMemSize() const;\n    enum\n    {\n        NO_LOCAL_MEM=0,\n        LOCAL_IS_LOCAL=1,\n        LOCAL_IS_GLOBAL=2\n    };\n    int localMemType() const;\n    bool hostUnifiedMemory() const;\n\n    bool imageSupport() const;\n\n    bool imageFromBufferSupport() const;\n    uint imagePitchAlignment() const;\n    uint imageBaseAddressAlignment() const;\n\n    size_t image2DMaxWidth() const;\n    size_t image2DMaxHeight() const;\n\n    size_t image3DMaxWidth() const;\n    size_t image3DMaxHeight() const;\n    size_t image3DMaxDepth() const;\n\n    size_t imageMaxBufferSize() const;\n    size_t imageMaxArraySize() const;\n\n    enum\n    {\n        UNKNOWN_VENDOR=0,\n        VENDOR_AMD=1,\n        VENDOR_INTEL=2,\n        VENDOR_NVIDIA=3\n    };\n    int vendorID() const;\n    // FIXIT\n    // dev.isAMD() doesn't work for OpenCL CPU devices from AMD OpenCL platform.\n    // This method should use platform name instead of vendor name.\n    // After fix restore code in arithm.cpp: ocl_compare()\n    inline bool isAMD() const { return vendorID() == VENDOR_AMD; }\n    inline bool isIntel() const { return vendorID() == VENDOR_INTEL; }\n    inline bool isNVidia() const { return vendorID() == VENDOR_NVIDIA; }\n\n    int maxClockFrequency() const;\n    int maxComputeUnits() const;\n    int maxConstantArgs() const;\n    size_t maxConstantBufferSize() const;\n\n    size_t maxMemAllocSize() const;\n    size_t maxParameterSize() const;\n\n    int maxReadImageArgs() const;\n    int maxWriteImageArgs() const;\n    int maxSamplers() const;\n\n    size_t maxWorkGroupSize() const;\n    int maxWorkItemDims() const;\n    void maxWorkItemSizes(size_t*) const;\n\n    int memBaseAddrAlign() const;\n\n    int nativeVectorWidthChar() const;\n    int nativeVectorWidthShort() const;\n    int nativeVectorWidthInt() const;\n    int nativeVectorWidthLong() const;\n    int nativeVectorWidthFloat() const;\n    int nativeVectorWidthDouble() const;\n    int nativeVectorWidthHalf() const;\n\n    int preferredVectorWidthChar() const;\n    int preferredVectorWidthShort() const;\n    int preferredVectorWidthInt() const;\n    int preferredVectorWidthLong() const;\n    int preferredVectorWidthFloat() const;\n    int preferredVectorWidthDouble() const;\n    int preferredVectorWidthHalf() const;\n\n    size_t printfBufferSize() const;\n    size_t profilingTimerResolution() const;\n\n    static const Device& getDefault();\n\nprotected:\n    struct Impl;\n    Impl* p;\n};\n\n\nclass CV_EXPORTS Context\n{\npublic:\n    Context();\n    explicit Context(int dtype);\n    ~Context();\n    Context(const Context& c);\n    Context& operator = (const Context& c);\n\n    bool create();\n    bool create(int dtype);\n    size_t ndevices() const;\n    const Device& device(size_t idx) const;\n    Program getProg(const ProgramSource& prog,\n                    const String& buildopt, String& errmsg);\n\n    static Context& getDefault(bool initialize = true);\n    void* ptr() const;\n\n    friend void initializeContextFromHandle(Context& ctx, void* platform, void* context, void* device);\n\n    bool useSVM() const;\n    void setUseSVM(bool enabled);\n\n    struct Impl;\n    Impl* p;\n};\n\nclass CV_EXPORTS Platform\n{\npublic:\n    Platform();\n    ~Platform();\n    Platform(const Platform& p);\n    Platform& operator = (const Platform& p);\n\n    void* ptr() const;\n    static Platform& getDefault();\n\n    friend void initializeContextFromHandle(Context& ctx, void* platform, void* context, void* device);\nprotected:\n    struct Impl;\n    Impl* p;\n};\n\n/*\n//! @brief Attaches OpenCL context to OpenCV\n//\n//! @note Note:\n//    OpenCV will check if available OpenCL platform has platformName name,\n//    then assign context to OpenCV and call clRetainContext function.\n//    The deviceID device will be used as target device and new command queue\n//    will be created.\n//\n// Params:\n//! @param platformName - name of OpenCL platform to attach,\n//!                       this string is used to check if platform is available\n//!                       to OpenCV at runtime\n//! @param platfromID   - ID of platform attached context was created for\n//! @param context      - OpenCL context to be attached to OpenCV\n//! @param deviceID     - ID of device, must be created from attached context\n*/\nCV_EXPORTS void attachContext(const String& platformName, void* platformID, void* context, void* deviceID);\n\n/*\n//! @brief Convert OpenCL buffer to UMat\n//\n//! @note Note:\n//   OpenCL buffer (cl_mem_buffer) should contain 2D image data, compatible with OpenCV.\n//   Memory content is not copied from clBuffer to UMat. Instead, buffer handle assigned\n//   to UMat and clRetainMemObject is called.\n//\n// Params:\n//! @param  cl_mem_buffer - source clBuffer handle\n//! @param  step          - num of bytes in single row\n//! @param  rows          - number of rows\n//! @param  cols          - number of cols\n//! @param  type          - OpenCV type of image\n//! @param  dst           - destination UMat\n*/\nCV_EXPORTS void convertFromBuffer(void* cl_mem_buffer, size_t step, int rows, int cols, int type, UMat& dst);\n\n/*\n//! @brief Convert OpenCL image2d_t to UMat\n//\n//! @note Note:\n//   OpenCL image2d_t (cl_mem_image), should be compatible with OpenCV\n//   UMat formats.\n//   Memory content is copied from image to UMat with\n//   clEnqueueCopyImageToBuffer function.\n//\n// Params:\n//! @param  cl_mem_image - source image2d_t handle\n//! @param  dst          - destination UMat\n*/\nCV_EXPORTS void convertFromImage(void* cl_mem_image, UMat& dst);\n\n// TODO Move to internal header\nvoid initializeContextFromHandle(Context& ctx, void* platform, void* context, void* device);\n\nclass CV_EXPORTS Queue\n{\npublic:\n    Queue();\n    explicit Queue(const Context& c, const Device& d=Device());\n    ~Queue();\n    Queue(const Queue& q);\n    Queue& operator = (const Queue& q);\n\n    bool create(const Context& c=Context(), const Device& d=Device());\n    void finish();\n    void* ptr() const;\n    static Queue& getDefault();\n\nprotected:\n    struct Impl;\n    Impl* p;\n};\n\n\nclass CV_EXPORTS KernelArg\n{\npublic:\n    enum { LOCAL=1, READ_ONLY=2, WRITE_ONLY=4, READ_WRITE=6, CONSTANT=8, PTR_ONLY = 16, NO_SIZE=256 };\n    KernelArg(int _flags, UMat* _m, int wscale=1, int iwscale=1, const void* _obj=0, size_t _sz=0);\n    KernelArg();\n\n    static KernelArg Local() { return KernelArg(LOCAL, 0); }\n    static KernelArg PtrWriteOnly(const UMat& m)\n    { return KernelArg(PTR_ONLY+WRITE_ONLY, (UMat*)&m); }\n    static KernelArg PtrReadOnly(const UMat& m)\n    { return KernelArg(PTR_ONLY+READ_ONLY, (UMat*)&m); }\n    static KernelArg PtrReadWrite(const UMat& m)\n    { return KernelArg(PTR_ONLY+READ_WRITE, (UMat*)&m); }\n    static KernelArg ReadWrite(const UMat& m, int wscale=1, int iwscale=1)\n    { return KernelArg(READ_WRITE, (UMat*)&m, wscale, iwscale); }\n    static KernelArg ReadWriteNoSize(const UMat& m, int wscale=1, int iwscale=1)\n    { return KernelArg(READ_WRITE+NO_SIZE, (UMat*)&m, wscale, iwscale); }\n    static KernelArg ReadOnly(const UMat& m, int wscale=1, int iwscale=1)\n    { return KernelArg(READ_ONLY, (UMat*)&m, wscale, iwscale); }\n    static KernelArg WriteOnly(const UMat& m, int wscale=1, int iwscale=1)\n    { return KernelArg(WRITE_ONLY, (UMat*)&m, wscale, iwscale); }\n    static KernelArg ReadOnlyNoSize(const UMat& m, int wscale=1, int iwscale=1)\n    { return KernelArg(READ_ONLY+NO_SIZE, (UMat*)&m, wscale, iwscale); }\n    static KernelArg WriteOnlyNoSize(const UMat& m, int wscale=1, int iwscale=1)\n    { return KernelArg(WRITE_ONLY+NO_SIZE, (UMat*)&m, wscale, iwscale); }\n    static KernelArg Constant(const Mat& m);\n    template<typename _Tp> static KernelArg Constant(const _Tp* arr, size_t n)\n    { return KernelArg(CONSTANT, 0, 1, 1, (void*)arr, n); }\n\n    int flags;\n    UMat* m;\n    const void* obj;\n    size_t sz;\n    int wscale, iwscale;\n};\n\n\nclass CV_EXPORTS Kernel\n{\npublic:\n    Kernel();\n    Kernel(const char* kname, const Program& prog);\n    Kernel(const char* kname, const ProgramSource& prog,\n           const String& buildopts = String(), String* errmsg=0);\n    ~Kernel();\n    Kernel(const Kernel& k);\n    Kernel& operator = (const Kernel& k);\n\n    bool empty() const;\n    bool create(const char* kname, const Program& prog);\n    bool create(const char* kname, const ProgramSource& prog,\n                const String& buildopts, String* errmsg=0);\n\n    int set(int i, const void* value, size_t sz);\n    int set(int i, const Image2D& image2D);\n    int set(int i, const UMat& m);\n    int set(int i, const KernelArg& arg);\n    template<typename _Tp> int set(int i, const _Tp& value)\n    { return set(i, &value, sizeof(value)); }\n\n    template<typename _Tp0>\n    Kernel& args(const _Tp0& a0)\n    {\n        set(0, a0); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1)\n    {\n        int i = set(0, a0); set(i, a1); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2)\n    {\n        int i = set(0, a0); i = set(i, a1); set(i, a2); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2,\n                 const _Tp3& a3, const _Tp4& a4)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2);\n        i = set(i, a3); set(i, a4); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2,\n             typename _Tp3, typename _Tp4, typename _Tp5>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2,\n                 const _Tp3& a3, const _Tp4& a4, const _Tp5& a5)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2);\n        i = set(i, a3); i = set(i, a4); set(i, a5); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,\n             typename _Tp4, typename _Tp5, typename _Tp6>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3);\n        i = set(i, a4); i = set(i, a5); set(i, a6); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,\n             typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3);\n        i = set(i, a4); i = set(i, a5); i = set(i, a6); set(i, a7); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4,\n             typename _Tp5, typename _Tp6, typename _Tp7, typename _Tp8>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7,\n                 const _Tp8& a8)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4);\n        i = set(i, a5); i = set(i, a6); i = set(i, a7); set(i, a8); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4,\n             typename _Tp5, typename _Tp6, typename _Tp7, typename _Tp8, typename _Tp9>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7,\n                 const _Tp8& a8, const _Tp9& a9)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5);\n        i = set(i, a6); i = set(i, a7); i = set(i, a8); set(i, a9); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,\n             typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,\n             typename _Tp8, typename _Tp9, typename _Tp10>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7,\n                 const _Tp8& a8, const _Tp9& a9, const _Tp10& a10)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5);\n        i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); set(i, a10); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,\n             typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,\n             typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7,\n                 const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5);\n        i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); set(i, a11); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,\n             typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,\n             typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11, typename _Tp12>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7,\n                 const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11,\n                 const _Tp12& a12)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5);\n        i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); i = set(i, a11);\n        set(i, a12); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,\n             typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,\n             typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11, typename _Tp12,\n             typename _Tp13>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7,\n                 const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11,\n                 const _Tp12& a12, const _Tp13& a13)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5);\n        i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); i = set(i, a11);\n        i = set(i, a12); set(i, a13); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,\n             typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,\n             typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11, typename _Tp12,\n             typename _Tp13, typename _Tp14>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7,\n                 const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11,\n                 const _Tp12& a12, const _Tp13& a13, const _Tp14& a14)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5);\n        i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); i = set(i, a11);\n        i = set(i, a12); i = set(i, a13); set(i, a14); return *this;\n    }\n\n    template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,\n             typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,\n             typename _Tp8, typename _Tp9, typename _Tp10, typename _Tp11, typename _Tp12,\n             typename _Tp13, typename _Tp14, typename _Tp15>\n    Kernel& args(const _Tp0& a0, const _Tp1& a1, const _Tp2& a2, const _Tp3& a3,\n                 const _Tp4& a4, const _Tp5& a5, const _Tp6& a6, const _Tp7& a7,\n                 const _Tp8& a8, const _Tp9& a9, const _Tp10& a10, const _Tp11& a11,\n                 const _Tp12& a12, const _Tp13& a13, const _Tp14& a14, const _Tp15& a15)\n    {\n        int i = set(0, a0); i = set(i, a1); i = set(i, a2); i = set(i, a3); i = set(i, a4); i = set(i, a5);\n        i = set(i, a6); i = set(i, a7); i = set(i, a8); i = set(i, a9); i = set(i, a10); i = set(i, a11);\n        i = set(i, a12); i = set(i, a13); i = set(i, a14); set(i, a15); return *this;\n    }\n\n    bool run(int dims, size_t globalsize[],\n             size_t localsize[], bool sync, const Queue& q=Queue());\n    bool runTask(bool sync, const Queue& q=Queue());\n\n    size_t workGroupSize() const;\n    size_t preferedWorkGroupSizeMultiple() const;\n    bool compileWorkGroupSize(size_t wsz[]) const;\n    size_t localMemSize() const;\n\n    void* ptr() const;\n    struct Impl;\n\nprotected:\n    Impl* p;\n};\n\nclass CV_EXPORTS Program\n{\npublic:\n    Program();\n    Program(const ProgramSource& src,\n            const String& buildflags, String& errmsg);\n    explicit Program(const String& buf);\n    Program(const Program& prog);\n\n    Program& operator = (const Program& prog);\n    ~Program();\n\n    bool create(const ProgramSource& src,\n                const String& buildflags, String& errmsg);\n    bool read(const String& buf, const String& buildflags);\n    bool write(String& buf) const;\n\n    const ProgramSource& source() const;\n    void* ptr() const;\n\n    String getPrefix() const;\n    static String getPrefix(const String& buildflags);\n\nprotected:\n    struct Impl;\n    Impl* p;\n};\n\n\nclass CV_EXPORTS ProgramSource\n{\npublic:\n    typedef uint64 hash_t;\n\n    ProgramSource();\n    explicit ProgramSource(const String& prog);\n    explicit ProgramSource(const char* prog);\n    ~ProgramSource();\n    ProgramSource(const ProgramSource& prog);\n    ProgramSource& operator = (const ProgramSource& prog);\n\n    const String& source() const;\n    hash_t hash() const;\n\nprotected:\n    struct Impl;\n    Impl* p;\n};\n\nclass CV_EXPORTS PlatformInfo\n{\npublic:\n    PlatformInfo();\n    explicit PlatformInfo(void* id);\n    ~PlatformInfo();\n\n    PlatformInfo(const PlatformInfo& i);\n    PlatformInfo& operator =(const PlatformInfo& i);\n\n    String name() const;\n    String vendor() const;\n    String version() const;\n    int deviceNumber() const;\n    void getDevice(Device& device, int d) const;\n\nprotected:\n    struct Impl;\n    Impl* p;\n};\n\nCV_EXPORTS const char* convertTypeStr(int sdepth, int ddepth, int cn, char* buf);\nCV_EXPORTS const char* typeToStr(int t);\nCV_EXPORTS const char* memopTypeToStr(int t);\nCV_EXPORTS const char* vecopTypeToStr(int t);\nCV_EXPORTS String kernelToStr(InputArray _kernel, int ddepth = -1, const char * name = NULL);\nCV_EXPORTS void getPlatfomsInfo(std::vector<PlatformInfo>& platform_info);\n\n\nenum OclVectorStrategy\n{\n    // all matrices have its own vector width\n    OCL_VECTOR_OWN = 0,\n    // all matrices have maximal vector width among all matrices\n    // (useful for cases when matrices have different data types)\n    OCL_VECTOR_MAX = 1,\n\n    // default strategy\n    OCL_VECTOR_DEFAULT = OCL_VECTOR_OWN\n};\n\nCV_EXPORTS int predictOptimalVectorWidth(InputArray src1, InputArray src2 = noArray(), InputArray src3 = noArray(),\n                                         InputArray src4 = noArray(), InputArray src5 = noArray(), InputArray src6 = noArray(),\n                                         InputArray src7 = noArray(), InputArray src8 = noArray(), InputArray src9 = noArray(),\n                                         OclVectorStrategy strat = OCL_VECTOR_DEFAULT);\n\nCV_EXPORTS int checkOptimalVectorWidth(const int *vectorWidths,\n                                       InputArray src1, InputArray src2 = noArray(), InputArray src3 = noArray(),\n                                       InputArray src4 = noArray(), InputArray src5 = noArray(), InputArray src6 = noArray(),\n                                       InputArray src7 = noArray(), InputArray src8 = noArray(), InputArray src9 = noArray(),\n                                       OclVectorStrategy strat = OCL_VECTOR_DEFAULT);\n\n// with OCL_VECTOR_MAX strategy\nCV_EXPORTS int predictOptimalVectorWidthMax(InputArray src1, InputArray src2 = noArray(), InputArray src3 = noArray(),\n                                            InputArray src4 = noArray(), InputArray src5 = noArray(), InputArray src6 = noArray(),\n                                            InputArray src7 = noArray(), InputArray src8 = noArray(), InputArray src9 = noArray());\n\nCV_EXPORTS void buildOptionsAddMatrixDescription(String& buildOptions, const String& name, InputArray _m);\n\nclass CV_EXPORTS Image2D\n{\npublic:\n    Image2D();\n\n    // src:     The UMat from which to get image properties and data\n    // norm:    Flag to enable the use of normalized channel data types\n    // alias:   Flag indicating that the image should alias the src UMat.\n    //          If true, changes to the image or src will be reflected in\n    //          both objects.\n    explicit Image2D(const UMat &src, bool norm = false, bool alias = false);\n    Image2D(const Image2D & i);\n    ~Image2D();\n\n    Image2D & operator = (const Image2D & i);\n\n    // Indicates if creating an aliased image should succeed.  Depends on the\n    // underlying platform and the dimensions of the UMat.\n    static bool canCreateAlias(const UMat &u);\n\n    // Indicates if the image format is supported.\n    static bool isFormatSupported(int depth, int cn, bool norm);\n\n    void* ptr() const;\nprotected:\n    struct Impl;\n    Impl* p;\n};\n\n\nCV_EXPORTS MatAllocator* getOpenCLAllocator();\n\n\n#ifdef __OPENCV_BUILD\nnamespace internal {\n\nCV_EXPORTS bool isPerformanceCheckBypassed();\n#define OCL_PERFORMANCE_CHECK(condition) (cv::ocl::internal::isPerformanceCheckBypassed() || (condition))\n\nCV_EXPORTS bool isCLBuffer(UMat& u);\n\n} // namespace internal\n#endif\n\n//! @}\n\n}}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/ocl_genbase.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the OpenCV Foundation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OPENCL_GENBASE_HPP__\n#define __OPENCV_OPENCL_GENBASE_HPP__\n\nnamespace cv\n{\nnamespace ocl\n{\n\n//! @cond IGNORED\n\nstruct ProgramEntry\n{\n    const char* name;\n    const char* programStr;\n    const char* programHash;\n};\n\n//! @endcond\n\n}\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/opengl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_OPENGL_HPP__\n#define __OPENCV_CORE_OPENGL_HPP__\n\n#ifndef __cplusplus\n#  error opengl.hpp header must be compiled as C++\n#endif\n\n#include \"opencv2/core.hpp\"\n#include \"ocl.hpp\"\n\nnamespace cv { namespace ogl {\n\n/** @addtogroup core_opengl\nThis section describes OpenGL interoperability.\n\nTo enable OpenGL support, configure OpenCV using CMake with WITH_OPENGL=ON . Currently OpenGL is\nsupported only with WIN32, GTK and Qt backends on Windows and Linux (MacOS and Android are not\nsupported). For GTK backend gtkglext-1.0 library is required.\n\nTo use OpenGL functionality you should first create OpenGL context (window or frame buffer). You can\ndo this with namedWindow function or with other OpenGL toolkit (GLUT, for example).\n*/\n//! @{\n\n/////////////////// OpenGL Objects ///////////////////\n\n/** @brief Smart pointer for OpenGL buffer object with reference counting.\n\nBuffer Objects are OpenGL objects that store an array of unformatted memory allocated by the OpenGL\ncontext. These can be used to store vertex data, pixel data retrieved from images or the\nframebuffer, and a variety of other things.\n\nogl::Buffer has interface similar with Mat interface and represents 2D array memory.\n\nogl::Buffer supports memory transfers between host and device and also can be mapped to CUDA memory.\n */\nclass CV_EXPORTS Buffer\n{\npublic:\n    /** @brief The target defines how you intend to use the buffer object.\n    */\n    enum Target\n    {\n        ARRAY_BUFFER         = 0x8892, //!< The buffer will be used as a source for vertex data\n        ELEMENT_ARRAY_BUFFER = 0x8893, //!< The buffer will be used for indices (in glDrawElements, for example)\n        PIXEL_PACK_BUFFER    = 0x88EB, //!< The buffer will be used for reading from OpenGL textures\n        PIXEL_UNPACK_BUFFER  = 0x88EC  //!< The buffer will be used for writing to OpenGL textures\n    };\n\n    enum Access\n    {\n        READ_ONLY  = 0x88B8,\n        WRITE_ONLY = 0x88B9,\n        READ_WRITE = 0x88BA\n    };\n\n    /** @brief The constructors.\n\n    Creates empty ogl::Buffer object, creates ogl::Buffer object from existed buffer ( abufId\n    parameter), allocates memory for ogl::Buffer object or copies from host/device memory.\n     */\n    Buffer();\n\n    /** @overload\n    @param arows Number of rows in a 2D array.\n    @param acols Number of columns in a 2D array.\n    @param atype Array type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.\n    @param abufId Buffer object name.\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    Buffer(int arows, int acols, int atype, unsigned int abufId, bool autoRelease = false);\n\n    /** @overload\n    @param asize 2D array size.\n    @param atype Array type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.\n    @param abufId Buffer object name.\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    Buffer(Size asize, int atype, unsigned int abufId, bool autoRelease = false);\n\n    /** @overload\n    @param arows Number of rows in a 2D array.\n    @param acols Number of columns in a 2D array.\n    @param atype Array type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.\n    @param target Buffer usage. See cv::ogl::Buffer::Target .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    Buffer(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    /** @overload\n    @param asize 2D array size.\n    @param atype Array type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.\n    @param target Buffer usage. See cv::ogl::Buffer::Target .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    Buffer(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    /** @overload\n    @param arr Input array (host or device memory, it can be Mat , cuda::GpuMat or std::vector ).\n    @param target Buffer usage. See cv::ogl::Buffer::Target .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    explicit Buffer(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    /** @brief Allocates memory for ogl::Buffer object.\n\n    @param arows Number of rows in a 2D array.\n    @param acols Number of columns in a 2D array.\n    @param atype Array type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.\n    @param target Buffer usage. See cv::ogl::Buffer::Target .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n     */\n    void create(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    /** @overload\n    @param asize 2D array size.\n    @param atype Array type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.\n    @param target Buffer usage. See cv::ogl::Buffer::Target .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    void create(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    /** @brief Decrements the reference counter and destroys the buffer object if needed.\n\n    The function will call setAutoRelease(true) .\n     */\n    void release();\n\n    /** @brief Sets auto release mode.\n\n    The lifetime of the OpenGL object is tied to the lifetime of the context. If OpenGL context was\n    bound to a window it could be released at any time (user can close a window). If object's destructor\n    is called after destruction of the context it will cause an error. Thus ogl::Buffer doesn't destroy\n    OpenGL object in destructor by default (all OpenGL resources will be released with OpenGL context).\n    This function can force ogl::Buffer destructor to destroy OpenGL object.\n    @param flag Auto release mode (if true, release will be called in object's destructor).\n     */\n    void setAutoRelease(bool flag);\n\n    /** @brief Copies from host/device memory to OpenGL buffer.\n    @param arr Input array (host or device memory, it can be Mat , cuda::GpuMat or std::vector ).\n    @param target Buffer usage. See cv::ogl::Buffer::Target .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n     */\n    void copyFrom(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    /** @overload */\n    void copyFrom(InputArray arr, cuda::Stream& stream, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    /** @brief Copies from OpenGL buffer to host/device memory or another OpenGL buffer object.\n\n    @param arr Destination array (host or device memory, can be Mat , cuda::GpuMat , std::vector or\n    ogl::Buffer ).\n     */\n    void copyTo(OutputArray arr) const;\n\n    /** @overload */\n    void copyTo(OutputArray arr, cuda::Stream& stream) const;\n\n    /** @brief Creates a full copy of the buffer object and the underlying data.\n\n    @param target Buffer usage for destination buffer.\n    @param autoRelease Auto release mode for destination buffer.\n     */\n    Buffer clone(Target target = ARRAY_BUFFER, bool autoRelease = false) const;\n\n    /** @brief Binds OpenGL buffer to the specified buffer binding point.\n\n    @param target Binding point. See cv::ogl::Buffer::Target .\n     */\n    void bind(Target target) const;\n\n    /** @brief Unbind any buffers from the specified binding point.\n\n    @param target Binding point. See cv::ogl::Buffer::Target .\n     */\n    static void unbind(Target target);\n\n    /** @brief Maps OpenGL buffer to host memory.\n\n    mapHost maps to the client's address space the entire data store of the buffer object. The data can\n    then be directly read and/or written relative to the returned pointer, depending on the specified\n    access policy.\n\n    A mapped data store must be unmapped with ogl::Buffer::unmapHost before its buffer object is used.\n\n    This operation can lead to memory transfers between host and device.\n\n    Only one buffer object can be mapped at a time.\n    @param access Access policy, indicating whether it will be possible to read from, write to, or both\n    read from and write to the buffer object's mapped data store. The symbolic constant must be\n    ogl::Buffer::READ_ONLY , ogl::Buffer::WRITE_ONLY or ogl::Buffer::READ_WRITE .\n     */\n    Mat mapHost(Access access);\n\n    /** @brief Unmaps OpenGL buffer.\n    */\n    void unmapHost();\n\n    //! map to device memory (blocking)\n    cuda::GpuMat mapDevice();\n    void unmapDevice();\n\n    /** @brief Maps OpenGL buffer to CUDA device memory.\n\n    This operatation doesn't copy data. Several buffer objects can be mapped to CUDA memory at a time.\n\n    A mapped data store must be unmapped with ogl::Buffer::unmapDevice before its buffer object is used.\n     */\n    cuda::GpuMat mapDevice(cuda::Stream& stream);\n\n    /** @brief Unmaps OpenGL buffer.\n    */\n    void unmapDevice(cuda::Stream& stream);\n\n    int rows() const;\n    int cols() const;\n    Size size() const;\n    bool empty() const;\n\n    int type() const;\n    int depth() const;\n    int channels() const;\n    int elemSize() const;\n    int elemSize1() const;\n\n    //! get OpenGL opject id\n    unsigned int bufId() const;\n\n    class Impl;\n\nprivate:\n    Ptr<Impl> impl_;\n    int rows_;\n    int cols_;\n    int type_;\n};\n\n/** @brief Smart pointer for OpenGL 2D texture memory with reference counting.\n */\nclass CV_EXPORTS Texture2D\n{\npublic:\n    /** @brief An Image Format describes the way that the images in Textures store their data.\n    */\n    enum Format\n    {\n        NONE            = 0,\n        DEPTH_COMPONENT = 0x1902, //!< Depth\n        RGB             = 0x1907, //!< Red, Green, Blue\n        RGBA            = 0x1908  //!< Red, Green, Blue, Alpha\n    };\n\n    /** @brief The constructors.\n\n    Creates empty ogl::Texture2D object, allocates memory for ogl::Texture2D object or copies from\n    host/device memory.\n     */\n    Texture2D();\n\n    /** @overload */\n    Texture2D(int arows, int acols, Format aformat, unsigned int atexId, bool autoRelease = false);\n\n    /** @overload */\n    Texture2D(Size asize, Format aformat, unsigned int atexId, bool autoRelease = false);\n\n    /** @overload\n    @param arows Number of rows.\n    @param acols Number of columns.\n    @param aformat Image format. See cv::ogl::Texture2D::Format .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    Texture2D(int arows, int acols, Format aformat, bool autoRelease = false);\n\n    /** @overload\n    @param asize 2D array size.\n    @param aformat Image format. See cv::ogl::Texture2D::Format .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    Texture2D(Size asize, Format aformat, bool autoRelease = false);\n\n    /** @overload\n    @param arr Input array (host or device memory, it can be Mat , cuda::GpuMat or ogl::Buffer ).\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    explicit Texture2D(InputArray arr, bool autoRelease = false);\n\n    /** @brief Allocates memory for ogl::Texture2D object.\n\n    @param arows Number of rows.\n    @param acols Number of columns.\n    @param aformat Image format. See cv::ogl::Texture2D::Format .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n     */\n    void create(int arows, int acols, Format aformat, bool autoRelease = false);\n    /** @overload\n    @param asize 2D array size.\n    @param aformat Image format. See cv::ogl::Texture2D::Format .\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n    */\n    void create(Size asize, Format aformat, bool autoRelease = false);\n\n    /** @brief Decrements the reference counter and destroys the texture object if needed.\n\n    The function will call setAutoRelease(true) .\n     */\n    void release();\n\n    /** @brief Sets auto release mode.\n\n    @param flag Auto release mode (if true, release will be called in object's destructor).\n\n    The lifetime of the OpenGL object is tied to the lifetime of the context. If OpenGL context was\n    bound to a window it could be released at any time (user can close a window). If object's destructor\n    is called after destruction of the context it will cause an error. Thus ogl::Texture2D doesn't\n    destroy OpenGL object in destructor by default (all OpenGL resources will be released with OpenGL\n    context). This function can force ogl::Texture2D destructor to destroy OpenGL object.\n     */\n    void setAutoRelease(bool flag);\n\n    /** @brief Copies from host/device memory to OpenGL texture.\n\n    @param arr Input array (host or device memory, it can be Mat , cuda::GpuMat or ogl::Buffer ).\n    @param autoRelease Auto release mode (if true, release will be called in object's destructor).\n     */\n    void copyFrom(InputArray arr, bool autoRelease = false);\n\n    /** @brief Copies from OpenGL texture to host/device memory or another OpenGL texture object.\n\n    @param arr Destination array (host or device memory, can be Mat , cuda::GpuMat , ogl::Buffer or\n    ogl::Texture2D ).\n    @param ddepth Destination depth.\n    @param autoRelease Auto release mode for destination buffer (if arr is OpenGL buffer or texture).\n     */\n    void copyTo(OutputArray arr, int ddepth = CV_32F, bool autoRelease = false) const;\n\n    /** @brief Binds texture to current active texture unit for GL_TEXTURE_2D target.\n    */\n    void bind() const;\n\n    int rows() const;\n    int cols() const;\n    Size size() const;\n    bool empty() const;\n\n    Format format() const;\n\n    //! get OpenGL opject id\n    unsigned int texId() const;\n\n    class Impl;\n\nprivate:\n    Ptr<Impl> impl_;\n    int rows_;\n    int cols_;\n    Format format_;\n};\n\n/** @brief Wrapper for OpenGL Client-Side Vertex arrays.\n\nogl::Arrays stores vertex data in ogl::Buffer objects.\n */\nclass CV_EXPORTS Arrays\n{\npublic:\n    /** @brief Default constructor\n     */\n    Arrays();\n\n    /** @brief Sets an array of vertex coordinates.\n    @param vertex array with vertex coordinates, can be both host and device memory.\n    */\n    void setVertexArray(InputArray vertex);\n\n    /** @brief Resets vertex coordinates.\n    */\n    void resetVertexArray();\n\n    /** @brief Sets an array of vertex colors.\n    @param color array with vertex colors, can be both host and device memory.\n     */\n    void setColorArray(InputArray color);\n\n    /** @brief Resets vertex colors.\n    */\n    void resetColorArray();\n\n    /** @brief Sets an array of vertex normals.\n    @param normal array with vertex normals, can be both host and device memory.\n     */\n    void setNormalArray(InputArray normal);\n\n    /** @brief Resets vertex normals.\n    */\n    void resetNormalArray();\n\n    /** @brief Sets an array of vertex texture coordinates.\n    @param texCoord array with vertex texture coordinates, can be both host and device memory.\n     */\n    void setTexCoordArray(InputArray texCoord);\n\n    /** @brief Resets vertex texture coordinates.\n    */\n    void resetTexCoordArray();\n\n    /** @brief Releases all inner buffers.\n    */\n    void release();\n\n    /** @brief Sets auto release mode all inner buffers.\n    @param flag Auto release mode.\n     */\n    void setAutoRelease(bool flag);\n\n    /** @brief Binds all vertex arrays.\n    */\n    void bind() const;\n\n    /** @brief Returns the vertex count.\n    */\n    int size() const;\n    bool empty() const;\n\nprivate:\n    int size_;\n    Buffer vertex_;\n    Buffer color_;\n    Buffer normal_;\n    Buffer texCoord_;\n};\n\n/////////////////// Render Functions ///////////////////\n\n//! render mode\nenum RenderModes {\n    POINTS         = 0x0000,\n    LINES          = 0x0001,\n    LINE_LOOP      = 0x0002,\n    LINE_STRIP     = 0x0003,\n    TRIANGLES      = 0x0004,\n    TRIANGLE_STRIP = 0x0005,\n    TRIANGLE_FAN   = 0x0006,\n    QUADS          = 0x0007,\n    QUAD_STRIP     = 0x0008,\n    POLYGON        = 0x0009\n};\n\n/** @brief Render OpenGL texture or primitives.\n@param tex Texture to draw.\n@param wndRect Region of window, where to draw a texture (normalized coordinates).\n@param texRect Region of texture to draw (normalized coordinates).\n */\nCV_EXPORTS void render(const Texture2D& tex,\n    Rect_<double> wndRect = Rect_<double>(0.0, 0.0, 1.0, 1.0),\n    Rect_<double> texRect = Rect_<double>(0.0, 0.0, 1.0, 1.0));\n\n/** @overload\n@param arr Array of privitives vertices.\n@param mode Render mode. One of cv::ogl::RenderModes\n@param color Color for all vertices. Will be used if arr doesn't contain color array.\n*/\nCV_EXPORTS void render(const Arrays& arr, int mode = POINTS, Scalar color = Scalar::all(255));\n\n/** @overload\n@param arr Array of privitives vertices.\n@param indices Array of vertices indices (host or device memory).\n@param mode Render mode. One of cv::ogl::RenderModes\n@param color Color for all vertices. Will be used if arr doesn't contain color array.\n*/\nCV_EXPORTS void render(const Arrays& arr, InputArray indices, int mode = POINTS, Scalar color = Scalar::all(255));\n\n/////////////////// CL-GL Interoperability Functions ///////////////////\n\nnamespace ocl {\nusing namespace cv::ocl;\n\n// TODO static functions in the Context class\n/** @brief Creates OpenCL context from GL.\n@return Returns reference to OpenCL Context\n */\nCV_EXPORTS Context& initializeContextFromGL();\n\n} // namespace cv::ogl::ocl\n\n/** @brief Converts InputArray to Texture2D object.\n@param src     - source InputArray.\n@param texture - destination Texture2D object.\n */\nCV_EXPORTS void convertToGLTexture2D(InputArray src, Texture2D& texture);\n\n/** @brief Converts Texture2D object to OutputArray.\n@param texture - source Texture2D object.\n@param dst     - destination OutputArray.\n */\nCV_EXPORTS void convertFromGLTexture2D(const Texture2D& texture, OutputArray dst);\n\n/** @brief Maps Buffer object to process on CL side (convert to UMat).\n\nFunction creates CL buffer from GL one, and then constructs UMat that can be used\nto process buffer data with OpenCV functions. Note that in current implementation\nUMat constructed this way doesn't own corresponding GL buffer object, so it is\nthe user responsibility to close down CL/GL buffers relationships by explicitly\ncalling unmapGLBuffer() function.\n@param buffer      - source Buffer object.\n@param accessFlags - data access flags (ACCESS_READ|ACCESS_WRITE).\n@return Returns UMat object\n */\nCV_EXPORTS UMat mapGLBuffer(const Buffer& buffer, int accessFlags = ACCESS_READ|ACCESS_WRITE);\n\n/** @brief Unmaps Buffer object (releases UMat, previously mapped from Buffer).\n\nFunction must be called explicitly by the user for each UMat previously constructed\nby the call to mapGLBuffer() function.\n@param u           - source UMat, created by mapGLBuffer().\n */\nCV_EXPORTS void unmapGLBuffer(UMat& u);\n\n}} // namespace cv::ogl\n\nnamespace cv { namespace cuda {\n\n//! @addtogroup cuda\n//! @{\n\n/** @brief Sets a CUDA device and initializes it for the current thread with OpenGL interoperability.\n\nThis function should be explicitly called after OpenGL context creation and before any CUDA calls.\n@param device System index of a CUDA device starting with 0.\n@ingroup core_opengl\n */\nCV_EXPORTS void setGlDevice(int device = 0);\n\n//! @}\n\n}}\n\n//! @cond IGNORED\n\n////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n\ninline\ncv::ogl::Buffer::Buffer(int arows, int acols, int atype, Target target, bool autoRelease) : rows_(0), cols_(0), type_(0)\n{\n    create(arows, acols, atype, target, autoRelease);\n}\n\ninline\ncv::ogl::Buffer::Buffer(Size asize, int atype, Target target, bool autoRelease) : rows_(0), cols_(0), type_(0)\n{\n    create(asize, atype, target, autoRelease);\n}\n\ninline\nvoid cv::ogl::Buffer::create(Size asize, int atype, Target target, bool autoRelease)\n{\n    create(asize.height, asize.width, atype, target, autoRelease);\n}\n\ninline\nint cv::ogl::Buffer::rows() const\n{\n    return rows_;\n}\n\ninline\nint cv::ogl::Buffer::cols() const\n{\n    return cols_;\n}\n\ninline\ncv::Size cv::ogl::Buffer::size() const\n{\n    return Size(cols_, rows_);\n}\n\ninline\nbool cv::ogl::Buffer::empty() const\n{\n    return rows_ == 0 || cols_ == 0;\n}\n\ninline\nint cv::ogl::Buffer::type() const\n{\n    return type_;\n}\n\ninline\nint cv::ogl::Buffer::depth() const\n{\n    return CV_MAT_DEPTH(type_);\n}\n\ninline\nint cv::ogl::Buffer::channels() const\n{\n    return CV_MAT_CN(type_);\n}\n\ninline\nint cv::ogl::Buffer::elemSize() const\n{\n    return CV_ELEM_SIZE(type_);\n}\n\ninline\nint cv::ogl::Buffer::elemSize1() const\n{\n    return CV_ELEM_SIZE1(type_);\n}\n\n///////\n\ninline\ncv::ogl::Texture2D::Texture2D(int arows, int acols, Format aformat, bool autoRelease) : rows_(0), cols_(0), format_(NONE)\n{\n    create(arows, acols, aformat, autoRelease);\n}\n\ninline\ncv::ogl::Texture2D::Texture2D(Size asize, Format aformat, bool autoRelease) : rows_(0), cols_(0), format_(NONE)\n{\n    create(asize, aformat, autoRelease);\n}\n\ninline\nvoid cv::ogl::Texture2D::create(Size asize, Format aformat, bool autoRelease)\n{\n    create(asize.height, asize.width, aformat, autoRelease);\n}\n\ninline\nint cv::ogl::Texture2D::rows() const\n{\n    return rows_;\n}\n\ninline\nint cv::ogl::Texture2D::cols() const\n{\n    return cols_;\n}\n\ninline\ncv::Size cv::ogl::Texture2D::size() const\n{\n    return Size(cols_, rows_);\n}\n\ninline\nbool cv::ogl::Texture2D::empty() const\n{\n    return rows_ == 0 || cols_ == 0;\n}\n\ninline\ncv::ogl::Texture2D::Format cv::ogl::Texture2D::format() const\n{\n    return format_;\n}\n\n///////\n\ninline\ncv::ogl::Arrays::Arrays() : size_(0)\n{\n}\n\ninline\nint cv::ogl::Arrays::size() const\n{\n    return size_;\n}\n\ninline\nbool cv::ogl::Arrays::empty() const\n{\n    return size_ == 0;\n}\n\n//! @endcond\n\n#endif /* __OPENCV_CORE_OPENGL_HPP__ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/operations.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_OPERATIONS_HPP__\n#define __OPENCV_CORE_OPERATIONS_HPP__\n\n#ifndef __cplusplus\n#  error operations.hpp header must be compiled as C++\n#endif\n\n#include <cstdio>\n\n//! @cond IGNORED\n\nnamespace cv\n{\n\n////////////////////////////// Matx methods depending on core API /////////////////////////////\n\nnamespace internal\n{\n\ntemplate<typename _Tp, int m> struct Matx_FastInvOp\n{\n    bool operator()(const Matx<_Tp, m, m>& a, Matx<_Tp, m, m>& b, int method) const\n    {\n        Matx<_Tp, m, m> temp = a;\n\n        // assume that b is all 0's on input => make it a unity matrix\n        for( int i = 0; i < m; i++ )\n            b(i, i) = (_Tp)1;\n\n        if( method == DECOMP_CHOLESKY )\n            return Cholesky(temp.val, m*sizeof(_Tp), m, b.val, m*sizeof(_Tp), m);\n\n        return LU(temp.val, m*sizeof(_Tp), m, b.val, m*sizeof(_Tp), m) != 0;\n    }\n};\n\ntemplate<typename _Tp> struct Matx_FastInvOp<_Tp, 2>\n{\n    bool operator()(const Matx<_Tp, 2, 2>& a, Matx<_Tp, 2, 2>& b, int) const\n    {\n        _Tp d = determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        b(1,1) = a(0,0)*d;\n        b(0,0) = a(1,1)*d;\n        b(0,1) = -a(0,1)*d;\n        b(1,0) = -a(1,0)*d;\n        return true;\n    }\n};\n\ntemplate<typename _Tp> struct Matx_FastInvOp<_Tp, 3>\n{\n    bool operator()(const Matx<_Tp, 3, 3>& a, Matx<_Tp, 3, 3>& b, int) const\n    {\n        _Tp d = (_Tp)determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        b(0,0) = (a(1,1) * a(2,2) - a(1,2) * a(2,1)) * d;\n        b(0,1) = (a(0,2) * a(2,1) - a(0,1) * a(2,2)) * d;\n        b(0,2) = (a(0,1) * a(1,2) - a(0,2) * a(1,1)) * d;\n\n        b(1,0) = (a(1,2) * a(2,0) - a(1,0) * a(2,2)) * d;\n        b(1,1) = (a(0,0) * a(2,2) - a(0,2) * a(2,0)) * d;\n        b(1,2) = (a(0,2) * a(1,0) - a(0,0) * a(1,2)) * d;\n\n        b(2,0) = (a(1,0) * a(2,1) - a(1,1) * a(2,0)) * d;\n        b(2,1) = (a(0,1) * a(2,0) - a(0,0) * a(2,1)) * d;\n        b(2,2) = (a(0,0) * a(1,1) - a(0,1) * a(1,0)) * d;\n        return true;\n    }\n};\n\n\ntemplate<typename _Tp, int m, int n> struct Matx_FastSolveOp\n{\n    bool operator()(const Matx<_Tp, m, m>& a, const Matx<_Tp, m, n>& b,\n                    Matx<_Tp, m, n>& x, int method) const\n    {\n        Matx<_Tp, m, m> temp = a;\n        x = b;\n        if( method == DECOMP_CHOLESKY )\n            return Cholesky(temp.val, m*sizeof(_Tp), m, x.val, n*sizeof(_Tp), n);\n\n        return LU(temp.val, m*sizeof(_Tp), m, x.val, n*sizeof(_Tp), n) != 0;\n    }\n};\n\ntemplate<typename _Tp> struct Matx_FastSolveOp<_Tp, 2, 1>\n{\n    bool operator()(const Matx<_Tp, 2, 2>& a, const Matx<_Tp, 2, 1>& b,\n                    Matx<_Tp, 2, 1>& x, int) const\n    {\n        _Tp d = determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        x(0) = (b(0)*a(1,1) - b(1)*a(0,1))*d;\n        x(1) = (b(1)*a(0,0) - b(0)*a(1,0))*d;\n        return true;\n    }\n};\n\ntemplate<typename _Tp> struct Matx_FastSolveOp<_Tp, 3, 1>\n{\n    bool operator()(const Matx<_Tp, 3, 3>& a, const Matx<_Tp, 3, 1>& b,\n                    Matx<_Tp, 3, 1>& x, int) const\n    {\n        _Tp d = (_Tp)determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        x(0) = d*(b(0)*(a(1,1)*a(2,2) - a(1,2)*a(2,1)) -\n                a(0,1)*(b(1)*a(2,2) - a(1,2)*b(2)) +\n                a(0,2)*(b(1)*a(2,1) - a(1,1)*b(2)));\n\n        x(1) = d*(a(0,0)*(b(1)*a(2,2) - a(1,2)*b(2)) -\n                b(0)*(a(1,0)*a(2,2) - a(1,2)*a(2,0)) +\n                a(0,2)*(a(1,0)*b(2) - b(1)*a(2,0)));\n\n        x(2) = d*(a(0,0)*(a(1,1)*b(2) - b(1)*a(2,1)) -\n                a(0,1)*(a(1,0)*b(2) - b(1)*a(2,0)) +\n                b(0)*(a(1,0)*a(2,1) - a(1,1)*a(2,0)));\n        return true;\n    }\n};\n\n} // internal\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::randu(_Tp a, _Tp b)\n{\n    Matx<_Tp,m,n> M;\n    cv::randu(M, Scalar(a), Scalar(b));\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::randn(_Tp a, _Tp b)\n{\n    Matx<_Tp,m,n> M;\n    cv::randn(M, Scalar(a), Scalar(b));\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, n, m> Matx<_Tp, m, n>::inv(int method, bool *p_is_ok /*= NULL*/) const\n{\n    Matx<_Tp, n, m> b;\n    bool ok;\n    if( method == DECOMP_LU || method == DECOMP_CHOLESKY )\n        ok = cv::internal::Matx_FastInvOp<_Tp, m>()(*this, b, method);\n    else\n    {\n        Mat A(*this, false), B(b, false);\n        ok = (invert(A, B, method) != 0);\n    }\n    if( NULL != p_is_ok ) { *p_is_ok = ok; }\n    return ok ? b : Matx<_Tp, n, m>::zeros();\n}\n\ntemplate<typename _Tp, int m, int n> template<int l> inline\nMatx<_Tp, n, l> Matx<_Tp, m, n>::solve(const Matx<_Tp, m, l>& rhs, int method) const\n{\n    Matx<_Tp, n, l> x;\n    bool ok;\n    if( method == DECOMP_LU || method == DECOMP_CHOLESKY )\n        ok = cv::internal::Matx_FastSolveOp<_Tp, m, l>()(*this, rhs, x, method);\n    else\n    {\n        Mat A(*this, false), B(rhs, false), X(x, false);\n        ok = cv::solve(A, B, X, method);\n    }\n\n    return ok ? x : Matx<_Tp, n, l>::zeros();\n}\n\n\n\n////////////////////////// Augmenting algebraic & logical operations //////////////////////////\n\n#define CV_MAT_AUG_OPERATOR1(op, cvop, A, B) \\\n    static inline A& operator op (A& a, const B& b) { cvop; return a; }\n\n#define CV_MAT_AUG_OPERATOR(op, cvop, A, B)   \\\n    CV_MAT_AUG_OPERATOR1(op, cvop, A, B)      \\\n    CV_MAT_AUG_OPERATOR1(op, cvop, const A, B)\n\n#define CV_MAT_AUG_OPERATOR_T(op, cvop, A, B)                   \\\n    template<typename _Tp> CV_MAT_AUG_OPERATOR1(op, cvop, A, B) \\\n    template<typename _Tp> CV_MAT_AUG_OPERATOR1(op, cvop, const A, B)\n\nCV_MAT_AUG_OPERATOR  (+=, cv::add(a,b,a), Mat, Mat)\nCV_MAT_AUG_OPERATOR  (+=, cv::add(a,b,a), Mat, Scalar)\nCV_MAT_AUG_OPERATOR_T(+=, cv::add(a,b,a), Mat_<_Tp>, Mat)\nCV_MAT_AUG_OPERATOR_T(+=, cv::add(a,b,a), Mat_<_Tp>, Scalar)\nCV_MAT_AUG_OPERATOR_T(+=, cv::add(a,b,a), Mat_<_Tp>, Mat_<_Tp>)\n\nCV_MAT_AUG_OPERATOR  (-=, cv::subtract(a,b,a), Mat, Mat)\nCV_MAT_AUG_OPERATOR  (-=, cv::subtract(a,b,a), Mat, Scalar)\nCV_MAT_AUG_OPERATOR_T(-=, cv::subtract(a,b,a), Mat_<_Tp>, Mat)\nCV_MAT_AUG_OPERATOR_T(-=, cv::subtract(a,b,a), Mat_<_Tp>, Scalar)\nCV_MAT_AUG_OPERATOR_T(-=, cv::subtract(a,b,a), Mat_<_Tp>, Mat_<_Tp>)\n\nCV_MAT_AUG_OPERATOR  (*=, cv::gemm(a, b, 1, Mat(), 0, a, 0), Mat, Mat)\nCV_MAT_AUG_OPERATOR_T(*=, cv::gemm(a, b, 1, Mat(), 0, a, 0), Mat_<_Tp>, Mat)\nCV_MAT_AUG_OPERATOR_T(*=, cv::gemm(a, b, 1, Mat(), 0, a, 0), Mat_<_Tp>, Mat_<_Tp>)\nCV_MAT_AUG_OPERATOR  (*=, a.convertTo(a, -1, b), Mat, double)\nCV_MAT_AUG_OPERATOR_T(*=, a.convertTo(a, -1, b), Mat_<_Tp>, double)\n\nCV_MAT_AUG_OPERATOR  (/=, cv::divide(a,b,a), Mat, Mat)\nCV_MAT_AUG_OPERATOR_T(/=, cv::divide(a,b,a), Mat_<_Tp>, Mat)\nCV_MAT_AUG_OPERATOR_T(/=, cv::divide(a,b,a), Mat_<_Tp>, Mat_<_Tp>)\nCV_MAT_AUG_OPERATOR  (/=, a.convertTo((Mat&)a, -1, 1./b), Mat, double)\nCV_MAT_AUG_OPERATOR_T(/=, a.convertTo((Mat&)a, -1, 1./b), Mat_<_Tp>, double)\n\nCV_MAT_AUG_OPERATOR  (&=, cv::bitwise_and(a,b,a), Mat, Mat)\nCV_MAT_AUG_OPERATOR  (&=, cv::bitwise_and(a,b,a), Mat, Scalar)\nCV_MAT_AUG_OPERATOR_T(&=, cv::bitwise_and(a,b,a), Mat_<_Tp>, Mat)\nCV_MAT_AUG_OPERATOR_T(&=, cv::bitwise_and(a,b,a), Mat_<_Tp>, Scalar)\nCV_MAT_AUG_OPERATOR_T(&=, cv::bitwise_and(a,b,a), Mat_<_Tp>, Mat_<_Tp>)\n\nCV_MAT_AUG_OPERATOR  (|=, cv::bitwise_or(a,b,a), Mat, Mat)\nCV_MAT_AUG_OPERATOR  (|=, cv::bitwise_or(a,b,a), Mat, Scalar)\nCV_MAT_AUG_OPERATOR_T(|=, cv::bitwise_or(a,b,a), Mat_<_Tp>, Mat)\nCV_MAT_AUG_OPERATOR_T(|=, cv::bitwise_or(a,b,a), Mat_<_Tp>, Scalar)\nCV_MAT_AUG_OPERATOR_T(|=, cv::bitwise_or(a,b,a), Mat_<_Tp>, Mat_<_Tp>)\n\nCV_MAT_AUG_OPERATOR  (^=, cv::bitwise_xor(a,b,a), Mat, Mat)\nCV_MAT_AUG_OPERATOR  (^=, cv::bitwise_xor(a,b,a), Mat, Scalar)\nCV_MAT_AUG_OPERATOR_T(^=, cv::bitwise_xor(a,b,a), Mat_<_Tp>, Mat)\nCV_MAT_AUG_OPERATOR_T(^=, cv::bitwise_xor(a,b,a), Mat_<_Tp>, Scalar)\nCV_MAT_AUG_OPERATOR_T(^=, cv::bitwise_xor(a,b,a), Mat_<_Tp>, Mat_<_Tp>)\n\n#undef CV_MAT_AUG_OPERATOR_T\n#undef CV_MAT_AUG_OPERATOR\n#undef CV_MAT_AUG_OPERATOR1\n\n\n\n///////////////////////////////////////////// SVD /////////////////////////////////////////////\n\ninline SVD::SVD() {}\ninline SVD::SVD( InputArray m, int flags ) { operator ()(m, flags); }\ninline void SVD::solveZ( InputArray m, OutputArray _dst )\n{\n    Mat mtx = m.getMat();\n    SVD svd(mtx, (mtx.rows >= mtx.cols ? 0 : SVD::FULL_UV));\n    _dst.create(svd.vt.cols, 1, svd.vt.type());\n    Mat dst = _dst.getMat();\n    svd.vt.row(svd.vt.rows-1).reshape(1,svd.vt.cols).copyTo(dst);\n}\n\ntemplate<typename _Tp, int m, int n, int nm> inline void\n    SVD::compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt )\n{\n    CV_StaticAssert( nm == MIN(m, n), \"Invalid size of output vector.\");\n    Mat _a(a, false), _u(u, false), _w(w, false), _vt(vt, false);\n    SVD::compute(_a, _w, _u, _vt);\n    CV_Assert(_w.data == (uchar*)&w.val[0] && _u.data == (uchar*)&u.val[0] && _vt.data == (uchar*)&vt.val[0]);\n}\n\ntemplate<typename _Tp, int m, int n, int nm> inline void\nSVD::compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w )\n{\n    CV_StaticAssert( nm == MIN(m, n), \"Invalid size of output vector.\");\n    Mat _a(a, false), _w(w, false);\n    SVD::compute(_a, _w);\n    CV_Assert(_w.data == (uchar*)&w.val[0]);\n}\n\ntemplate<typename _Tp, int m, int n, int nm, int nb> inline void\nSVD::backSubst( const Matx<_Tp, nm, 1>& w, const Matx<_Tp, m, nm>& u,\n                const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs,\n                Matx<_Tp, n, nb>& dst )\n{\n    CV_StaticAssert( nm == MIN(m, n), \"Invalid size of output vector.\");\n    Mat _u(u, false), _w(w, false), _vt(vt, false), _rhs(rhs, false), _dst(dst, false);\n    SVD::backSubst(_w, _u, _vt, _rhs, _dst);\n    CV_Assert(_dst.data == (uchar*)&dst.val[0]);\n}\n\n\n\n/////////////////////////////////// Multiply-with-Carry RNG ///////////////////////////////////\n\ninline RNG::RNG()              { state = 0xffffffff; }\ninline RNG::RNG(uint64 _state) { state = _state ? _state : 0xffffffff; }\n\ninline RNG::operator uchar()    { return (uchar)next(); }\ninline RNG::operator schar()    { return (schar)next(); }\ninline RNG::operator ushort()   { return (ushort)next(); }\ninline RNG::operator short()    { return (short)next(); }\ninline RNG::operator int()      { return (int)next(); }\ninline RNG::operator unsigned() { return next(); }\ninline RNG::operator float()    { return next()*2.3283064365386962890625e-10f; }\ninline RNG::operator double()   { unsigned t = next(); return (((uint64)t << 32) | next()) * 5.4210108624275221700372640043497e-20; }\n\ninline unsigned RNG::operator ()(unsigned N) { return (unsigned)uniform(0,N); }\ninline unsigned RNG::operator ()()           { return next(); }\n\ninline int    RNG::uniform(int a, int b)       { return a == b ? a : (int)(next() % (b - a) + a); }\ninline float  RNG::uniform(float a, float b)   { return ((float)*this)*(b - a) + a; }\ninline double RNG::uniform(double a, double b) { return ((double)*this)*(b - a) + a; }\n\ninline unsigned RNG::next()\n{\n    state = (uint64)(unsigned)state* /*CV_RNG_COEFF*/ 4164903690U + (unsigned)(state >> 32);\n    return (unsigned)state;\n}\n\n//! returns the next unifomly-distributed random number of the specified type\ntemplate<typename _Tp> static inline _Tp randu()\n{\n  return (_Tp)theRNG();\n}\n\n///////////////////////////////// Formatted string generation /////////////////////////////////\n\nCV_EXPORTS String format( const char* fmt, ... );\n\n///////////////////////////////// Formatted output of cv::Mat /////////////////////////////////\n\nstatic inline\nPtr<Formatted> format(InputArray mtx, int fmt)\n{\n    return Formatter::get(fmt)->format(mtx.getMat());\n}\n\nstatic inline\nint print(Ptr<Formatted> fmtd, FILE* stream = stdout)\n{\n    int written = 0;\n    fmtd->reset();\n    for(const char* str = fmtd->next(); str; str = fmtd->next())\n        written += fputs(str, stream);\n\n    return written;\n}\n\nstatic inline\nint print(const Mat& mtx, FILE* stream = stdout)\n{\n    return print(Formatter::get()->format(mtx), stream);\n}\n\nstatic inline\nint print(const UMat& mtx, FILE* stream = stdout)\n{\n    return print(Formatter::get()->format(mtx.getMat(ACCESS_READ)), stream);\n}\n\ntemplate<typename _Tp> static inline\nint print(const std::vector<Point_<_Tp> >& vec, FILE* stream = stdout)\n{\n    return print(Formatter::get()->format(Mat(vec)), stream);\n}\n\ntemplate<typename _Tp> static inline\nint print(const std::vector<Point3_<_Tp> >& vec, FILE* stream = stdout)\n{\n    return print(Formatter::get()->format(Mat(vec)), stream);\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nint print(const Matx<_Tp, m, n>& matx, FILE* stream = stdout)\n{\n    return print(Formatter::get()->format(cv::Mat(matx)), stream);\n}\n\n//! @endcond\n\n/****************************************************************************************\\\n*                                  Auxiliary algorithms                                  *\n\\****************************************************************************************/\n\n/** @brief Splits an element set into equivalency classes.\n\nThe generic function partition implements an \\f$O(N^2)\\f$ algorithm for splitting a set of \\f$N\\f$ elements\ninto one or more equivalency classes, as described in\n<http://en.wikipedia.org/wiki/Disjoint-set_data_structure> . The function returns the number of\nequivalency classes.\n@param _vec Set of elements stored as a vector.\n@param labels Output vector of labels. It contains as many elements as vec. Each label labels[i] is\na 0-based cluster index of `vec[i]`.\n@param predicate Equivalence predicate (pointer to a boolean function of two arguments or an\ninstance of the class that has the method bool operator()(const _Tp& a, const _Tp& b) ). The\npredicate returns true when the elements are certainly in the same class, and returns false if they\nmay or may not be in the same class.\n@ingroup core_cluster\n*/\ntemplate<typename _Tp, class _EqPredicate> int\npartition( const std::vector<_Tp>& _vec, std::vector<int>& labels,\n          _EqPredicate predicate=_EqPredicate())\n{\n    int i, j, N = (int)_vec.size();\n    const _Tp* vec = &_vec[0];\n\n    const int PARENT=0;\n    const int RANK=1;\n\n    std::vector<int> _nodes(N*2);\n    int (*nodes)[2] = (int(*)[2])&_nodes[0];\n\n    // The first O(N) pass: create N single-vertex trees\n    for(i = 0; i < N; i++)\n    {\n        nodes[i][PARENT]=-1;\n        nodes[i][RANK] = 0;\n    }\n\n    // The main O(N^2) pass: merge connected components\n    for( i = 0; i < N; i++ )\n    {\n        int root = i;\n\n        // find root\n        while( nodes[root][PARENT] >= 0 )\n            root = nodes[root][PARENT];\n\n        for( j = 0; j < N; j++ )\n        {\n            if( i == j || !predicate(vec[i], vec[j]))\n                continue;\n            int root2 = j;\n\n            while( nodes[root2][PARENT] >= 0 )\n                root2 = nodes[root2][PARENT];\n\n            if( root2 != root )\n            {\n                // unite both trees\n                int rank = nodes[root][RANK], rank2 = nodes[root2][RANK];\n                if( rank > rank2 )\n                    nodes[root2][PARENT] = root;\n                else\n                {\n                    nodes[root][PARENT] = root2;\n                    nodes[root2][RANK] += rank == rank2;\n                    root = root2;\n                }\n                CV_Assert( nodes[root][PARENT] < 0 );\n\n                int k = j, parent;\n\n                // compress the path from node2 to root\n                while( (parent = nodes[k][PARENT]) >= 0 )\n                {\n                    nodes[k][PARENT] = root;\n                    k = parent;\n                }\n\n                // compress the path from node to root\n                k = i;\n                while( (parent = nodes[k][PARENT]) >= 0 )\n                {\n                    nodes[k][PARENT] = root;\n                    k = parent;\n                }\n            }\n        }\n    }\n\n    // Final O(N) pass: enumerate classes\n    labels.resize(N);\n    int nclasses = 0;\n\n    for( i = 0; i < N; i++ )\n    {\n        int root = i;\n        while( nodes[root][PARENT] >= 0 )\n            root = nodes[root][PARENT];\n        // re-use the rank as the class label\n        if( nodes[root][RANK] >= 0 )\n            nodes[root][RANK] = ~nclasses++;\n        labels[i] = ~nodes[root][RANK];\n    }\n\n    return nclasses;\n}\n\n} // cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/optim.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the OpenCV Foundation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OPTIM_HPP__\n#define __OPENCV_OPTIM_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\n\n/** @addtogroup core_optim\nThe algorithms in this section minimize or maximize function value within specified constraints or\nwithout any constraints.\n@{\n*/\n\n/** @brief Basic interface for all solvers\n */\nclass CV_EXPORTS MinProblemSolver : public Algorithm\n{\npublic:\n    /** @brief Represents function being optimized\n     */\n    class CV_EXPORTS Function\n    {\n    public:\n        virtual ~Function() {}\n        virtual int getDims() const = 0;\n        virtual double getGradientEps() const;\n        virtual double calc(const double* x) const = 0;\n        virtual void getGradient(const double* x,double* grad);\n    };\n\n    /** @brief Getter for the optimized function.\n\n    The optimized function is represented by Function interface, which requires derivatives to\n    implement the sole method calc(double*) to evaluate the function.\n\n    @return Smart-pointer to an object that implements Function interface - it represents the\n    function that is being optimized. It can be empty, if no function was given so far.\n     */\n    virtual Ptr<Function> getFunction() const = 0;\n\n    /** @brief Setter for the optimized function.\n\n    *It should be called at least once before the call to* minimize(), as default value is not usable.\n\n    @param f The new function to optimize.\n     */\n    virtual void setFunction(const Ptr<Function>& f) = 0;\n\n    /** @brief Getter for the previously set terminal criteria for this algorithm.\n\n    @return Deep copy of the terminal criteria used at the moment.\n     */\n    virtual TermCriteria getTermCriteria() const = 0;\n\n    /** @brief Set terminal criteria for solver.\n\n    This method *is not necessary* to be called before the first call to minimize(), as the default\n    value is sensible.\n\n    Algorithm stops when the number of function evaluations done exceeds termcrit.maxCount, when\n    the function values at the vertices of simplex are within termcrit.epsilon range or simplex\n    becomes so small that it can enclosed in a box with termcrit.epsilon sides, whatever comes\n    first.\n    @param termcrit Terminal criteria to be used, represented as cv::TermCriteria structure.\n     */\n    virtual void setTermCriteria(const TermCriteria& termcrit) = 0;\n\n    /** @brief actually runs the algorithm and performs the minimization.\n\n    The sole input parameter determines the centroid of the starting simplex (roughly, it tells\n    where to start), all the others (terminal criteria, initial step, function to be minimized) are\n    supposed to be set via the setters before the call to this method or the default values (not\n    always sensible) will be used.\n\n    @param x The initial point, that will become a centroid of an initial simplex. After the algorithm\n    will terminate, it will be setted to the point where the algorithm stops, the point of possible\n    minimum.\n    @return The value of a function at the point found.\n     */\n    virtual double minimize(InputOutputArray x) = 0;\n};\n\n/** @brief This class is used to perform the non-linear non-constrained minimization of a function,\n\ndefined on an `n`-dimensional Euclidean space, using the **Nelder-Mead method**, also known as\n**downhill simplex method**. The basic idea about the method can be obtained from\n<http://en.wikipedia.org/wiki/Nelder-Mead_method>.\n\nIt should be noted, that this method, although deterministic, is rather a heuristic and therefore\nmay converge to a local minima, not necessary a global one. It is iterative optimization technique,\nwhich at each step uses an information about the values of a function evaluated only at `n+1`\npoints, arranged as a *simplex* in `n`-dimensional space (hence the second name of the method). At\neach step new point is chosen to evaluate function at, obtained value is compared with previous\nones and based on this information simplex changes it's shape , slowly moving to the local minimum.\nThus this method is using *only* function values to make decision, on contrary to, say, Nonlinear\nConjugate Gradient method (which is also implemented in optim).\n\nAlgorithm stops when the number of function evaluations done exceeds termcrit.maxCount, when the\nfunction values at the vertices of simplex are within termcrit.epsilon range or simplex becomes so\nsmall that it can enclosed in a box with termcrit.epsilon sides, whatever comes first, for some\ndefined by user positive integer termcrit.maxCount and positive non-integer termcrit.epsilon.\n\n@note DownhillSolver is a derivative of the abstract interface\ncv::MinProblemSolver, which in turn is derived from the Algorithm interface and is used to\nencapsulate the functionality, common to all non-linear optimization algorithms in the optim\nmodule.\n\n@note term criteria should meet following condition:\n@code\n    termcrit.type == (TermCriteria::MAX_ITER + TermCriteria::EPS) && termcrit.epsilon > 0 && termcrit.maxCount > 0\n@endcode\n */\nclass CV_EXPORTS DownhillSolver : public MinProblemSolver\n{\npublic:\n    /** @brief Returns the initial step that will be used in downhill simplex algorithm.\n\n    @param step Initial step that will be used in algorithm. Note, that although corresponding setter\n    accepts column-vectors as well as row-vectors, this method will return a row-vector.\n    @see DownhillSolver::setInitStep\n     */\n    virtual void getInitStep(OutputArray step) const=0;\n\n    /** @brief Sets the initial step that will be used in downhill simplex algorithm.\n\n    Step, together with initial point (givin in DownhillSolver::minimize) are two `n`-dimensional\n    vectors that are used to determine the shape of initial simplex. Roughly said, initial point\n    determines the position of a simplex (it will become simplex's centroid), while step determines the\n    spread (size in each dimension) of a simplex. To be more precise, if \\f$s,x_0\\in\\mathbb{R}^n\\f$ are\n    the initial step and initial point respectively, the vertices of a simplex will be:\n    \\f$v_0:=x_0-\\frac{1}{2} s\\f$ and \\f$v_i:=x_0+s_i\\f$ for \\f$i=1,2,\\dots,n\\f$ where \\f$s_i\\f$ denotes\n    projections of the initial step of *n*-th coordinate (the result of projection is treated to be\n    vector given by \\f$s_i:=e_i\\cdot\\left<e_i\\cdot s\\right>\\f$, where \\f$e_i\\f$ form canonical basis)\n\n    @param step Initial step that will be used in algorithm. Roughly said, it determines the spread\n    (size in each dimension) of an initial simplex.\n     */\n    virtual void setInitStep(InputArray step)=0;\n\n    /** @brief This function returns the reference to the ready-to-use DownhillSolver object.\n\n    All the parameters are optional, so this procedure can be called even without parameters at\n    all. In this case, the default values will be used. As default value for terminal criteria are\n    the only sensible ones, MinProblemSolver::setFunction() and DownhillSolver::setInitStep()\n    should be called upon the obtained object, if the respective parameters were not given to\n    create(). Otherwise, the two ways (give parameters to createDownhillSolver() or miss them out\n    and call the MinProblemSolver::setFunction() and DownhillSolver::setInitStep()) are absolutely\n    equivalent (and will drop the same errors in the same way, should invalid input be detected).\n    @param f Pointer to the function that will be minimized, similarly to the one you submit via\n    MinProblemSolver::setFunction.\n    @param initStep Initial step, that will be used to construct the initial simplex, similarly to the one\n    you submit via MinProblemSolver::setInitStep.\n    @param termcrit Terminal criteria to the algorithm, similarly to the one you submit via\n    MinProblemSolver::setTermCriteria.\n     */\n    static Ptr<DownhillSolver> create(const Ptr<MinProblemSolver::Function>& f=Ptr<MinProblemSolver::Function>(),\n                                      InputArray initStep=Mat_<double>(1,1,0.0),\n                                      TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5000,0.000001));\n};\n\n/** @brief This class is used to perform the non-linear non-constrained minimization of a function\nwith known gradient,\n\ndefined on an *n*-dimensional Euclidean space, using the **Nonlinear Conjugate Gradient method**.\nThe implementation was done based on the beautifully clear explanatory article [An Introduction to\nthe Conjugate Gradient Method Without the Agonizing\nPain](http://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf) by Jonathan Richard\nShewchuk. The method can be seen as an adaptation of a standard Conjugate Gradient method (see, for\nexample <http://en.wikipedia.org/wiki/Conjugate_gradient_method>) for numerically solving the\nsystems of linear equations.\n\nIt should be noted, that this method, although deterministic, is rather a heuristic method and\ntherefore may converge to a local minima, not necessary a global one. What is even more disastrous,\nmost of its behaviour is ruled by gradient, therefore it essentially cannot distinguish between\nlocal minima and maxima. Therefore, if it starts sufficiently near to the local maximum, it may\nconverge to it. Another obvious restriction is that it should be possible to compute the gradient of\na function at any point, thus it is preferable to have analytic expression for gradient and\ncomputational burden should be born by the user.\n\nThe latter responsibility is accompilished via the getGradient method of a\nMinProblemSolver::Function interface (which represents function being optimized). This method takes\npoint a point in *n*-dimensional space (first argument represents the array of coordinates of that\npoint) and comput its gradient (it should be stored in the second argument as an array).\n\n@note class ConjGradSolver thus does not add any new methods to the basic MinProblemSolver interface.\n\n@note term criteria should meet following condition:\n@code\n    termcrit.type == (TermCriteria::MAX_ITER + TermCriteria::EPS) && termcrit.epsilon > 0 && termcrit.maxCount > 0\n    // or\n    termcrit.type == TermCriteria::MAX_ITER) && termcrit.maxCount > 0\n@endcode\n */\nclass CV_EXPORTS ConjGradSolver : public MinProblemSolver\n{\npublic:\n    /** @brief This function returns the reference to the ready-to-use ConjGradSolver object.\n\n    All the parameters are optional, so this procedure can be called even without parameters at\n    all. In this case, the default values will be used. As default value for terminal criteria are\n    the only sensible ones, MinProblemSolver::setFunction() should be called upon the obtained\n    object, if the function was not given to create(). Otherwise, the two ways (submit it to\n    create() or miss it out and call the MinProblemSolver::setFunction()) are absolutely equivalent\n    (and will drop the same errors in the same way, should invalid input be detected).\n    @param f Pointer to the function that will be minimized, similarly to the one you submit via\n    MinProblemSolver::setFunction.\n    @param termcrit Terminal criteria to the algorithm, similarly to the one you submit via\n    MinProblemSolver::setTermCriteria.\n    */\n    static Ptr<ConjGradSolver> create(const Ptr<MinProblemSolver::Function>& f=Ptr<ConjGradSolver::Function>(),\n                                      TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5000,0.000001));\n};\n\n//! return codes for cv::solveLP() function\nenum SolveLPResult\n{\n    SOLVELP_UNBOUNDED    = -2, //!< problem is unbounded (target function can achieve arbitrary high values)\n    SOLVELP_UNFEASIBLE    = -1, //!< problem is unfeasible (there are no points that satisfy all the constraints imposed)\n    SOLVELP_SINGLE    = 0, //!< there is only one maximum for target function\n    SOLVELP_MULTI    = 1 //!< there are multiple maxima for target function - the arbitrary one is returned\n};\n\n/** @brief Solve given (non-integer) linear programming problem using the Simplex Algorithm (Simplex Method).\n\nWhat we mean here by \"linear programming problem\" (or LP problem, for short) can be formulated as:\n\n\\f[\\mbox{Maximize } c\\cdot x\\\\\n \\mbox{Subject to:}\\\\\n Ax\\leq b\\\\\n x\\geq 0\\f]\n\nWhere \\f$c\\f$ is fixed `1`-by-`n` row-vector, \\f$A\\f$ is fixed `m`-by-`n` matrix, \\f$b\\f$ is fixed `m`-by-`1`\ncolumn vector and \\f$x\\f$ is an arbitrary `n`-by-`1` column vector, which satisfies the constraints.\n\nSimplex algorithm is one of many algorithms that are designed to handle this sort of problems\nefficiently. Although it is not optimal in theoretical sense (there exist algorithms that can solve\nany problem written as above in polynomial time, while simplex method degenerates to exponential\ntime for some special cases), it is well-studied, easy to implement and is shown to work well for\nreal-life purposes.\n\nThe particular implementation is taken almost verbatim from **Introduction to Algorithms, third\nedition** by T. H. Cormen, C. E. Leiserson, R. L. Rivest and Clifford Stein. In particular, the\nBland's rule <http://en.wikipedia.org/wiki/Bland%27s_rule> is used to prevent cycling.\n\n@param Func This row-vector corresponds to \\f$c\\f$ in the LP problem formulation (see above). It should\ncontain 32- or 64-bit floating point numbers. As a convenience, column-vector may be also submitted,\nin the latter case it is understood to correspond to \\f$c^T\\f$.\n@param Constr `m`-by-`n+1` matrix, whose rightmost column corresponds to \\f$b\\f$ in formulation above\nand the remaining to \\f$A\\f$. It should containt 32- or 64-bit floating point numbers.\n@param z The solution will be returned here as a column-vector - it corresponds to \\f$c\\f$ in the\nformulation above. It will contain 64-bit floating point numbers.\n@return One of cv::SolveLPResult\n */\nCV_EXPORTS_W int solveLP(const Mat& Func, const Mat& Constr, Mat& z);\n\n//! @}\n\n}// cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/persistence.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_PERSISTENCE_HPP__\n#define __OPENCV_CORE_PERSISTENCE_HPP__\n\n#ifndef __cplusplus\n#  error persistence.hpp header must be compiled as C++\n#endif\n\n//! @addtogroup core_c\n//! @{\n\n/** @brief \"black box\" representation of the file storage associated with a file on disk.\n\nSeveral functions that are described below take CvFileStorage\\* as inputs and allow the user to\nsave or to load hierarchical collections that consist of scalar values, standard CXCore objects\n(such as matrices, sequences, graphs), and user-defined objects.\n\nOpenCV can read and write data in XML (<http://www.w3c.org/XML>) or YAML (<http://www.yaml.org>)\nformats. Below is an example of 3x3 floating-point identity matrix A, stored in XML and YAML files\nusing CXCore functions:\nXML:\n@code{.xml}\n    <?xml version=\"1.0\">\n    <opencv_storage>\n    <A type_id=\"opencv-matrix\">\n      <rows>3</rows>\n      <cols>3</cols>\n      <dt>f</dt>\n      <data>1. 0. 0. 0. 1. 0. 0. 0. 1.</data>\n    </A>\n    </opencv_storage>\n@endcode\nYAML:\n@code{.yaml}\n    %YAML:1.0\n    A: !!opencv-matrix\n      rows: 3\n      cols: 3\n      dt: f\n      data: [ 1., 0., 0., 0., 1., 0., 0., 0., 1.]\n@endcode\nAs it can be seen from the examples, XML uses nested tags to represent hierarchy, while YAML uses\nindentation for that purpose (similar to the Python programming language).\n\nThe same functions can read and write data in both formats; the particular format is determined by\nthe extension of the opened file, \".xml\" for XML files and \".yml\" or \".yaml\" for YAML.\n */\ntypedef struct CvFileStorage CvFileStorage;\ntypedef struct CvFileNode CvFileNode;\n\n//! @} core_c\n\n#include \"opencv2/core/types.hpp\"\n#include \"opencv2/core/mat.hpp\"\n\nnamespace cv {\n\n/** @addtogroup core_xml\n\nXML/YAML file storages.     {#xml_storage}\n=======================\nWriting to a file storage.\n--------------------------\nYou can store and then restore various OpenCV data structures to/from XML (<http://www.w3c.org/XML>)\nor YAML (<http://www.yaml.org>) formats. Also, it is possible store and load arbitrarily complex\ndata structures, which include OpenCV data structures, as well as primitive data types (integer and\nfloating-point numbers and text strings) as their elements.\n\nUse the following procedure to write something to XML or YAML:\n-# Create new FileStorage and open it for writing. It can be done with a single call to\nFileStorage::FileStorage constructor that takes a filename, or you can use the default constructor\nand then call FileStorage::open. Format of the file (XML or YAML) is determined from the filename\nextension (\".xml\" and \".yml\"/\".yaml\", respectively)\n-# Write all the data you want using the streaming operator `<<`, just like in the case of STL\nstreams.\n-# Close the file using FileStorage::release. FileStorage destructor also closes the file.\n\nHere is an example:\n@code\n    #include \"opencv2/opencv.hpp\"\n    #include <time.h>\n\n    using namespace cv;\n\n    int main(int, char** argv)\n    {\n        FileStorage fs(\"test.yml\", FileStorage::WRITE);\n\n        fs << \"frameCount\" << 5;\n        time_t rawtime; time(&rawtime);\n        fs << \"calibrationDate\" << asctime(localtime(&rawtime));\n        Mat cameraMatrix = (Mat_<double>(3,3) << 1000, 0, 320, 0, 1000, 240, 0, 0, 1);\n        Mat distCoeffs = (Mat_<double>(5,1) << 0.1, 0.01, -0.001, 0, 0);\n        fs << \"cameraMatrix\" << cameraMatrix << \"distCoeffs\" << distCoeffs;\n        fs << \"features\" << \"[\";\n        for( int i = 0; i < 3; i++ )\n        {\n            int x = rand() % 640;\n            int y = rand() % 480;\n            uchar lbp = rand() % 256;\n\n            fs << \"{:\" << \"x\" << x << \"y\" << y << \"lbp\" << \"[:\";\n            for( int j = 0; j < 8; j++ )\n                fs << ((lbp >> j) & 1);\n            fs << \"]\" << \"}\";\n        }\n        fs << \"]\";\n        fs.release();\n        return 0;\n    }\n@endcode\nThe sample above stores to XML and integer, text string (calibration date), 2 matrices, and a custom\nstructure \"feature\", which includes feature coordinates and LBP (local binary pattern) value. Here\nis output of the sample:\n@code{.yaml}\n%YAML:1.0\nframeCount: 5\ncalibrationDate: \"Fri Jun 17 14:09:29 2011\\n\"\ncameraMatrix: !!opencv-matrix\n   rows: 3\n   cols: 3\n   dt: d\n   data: [ 1000., 0., 320., 0., 1000., 240., 0., 0., 1. ]\ndistCoeffs: !!opencv-matrix\n   rows: 5\n   cols: 1\n   dt: d\n   data: [ 1.0000000000000001e-01, 1.0000000000000000e-02,\n       -1.0000000000000000e-03, 0., 0. ]\nfeatures:\n   - { x:167, y:49, lbp:[ 1, 0, 0, 1, 1, 0, 1, 1 ] }\n   - { x:298, y:130, lbp:[ 0, 0, 0, 1, 0, 0, 1, 1 ] }\n   - { x:344, y:158, lbp:[ 1, 1, 0, 0, 0, 0, 1, 0 ] }\n@endcode\n\nAs an exercise, you can replace \".yml\" with \".xml\" in the sample above and see, how the\ncorresponding XML file will look like.\n\nSeveral things can be noted by looking at the sample code and the output:\n\n-   The produced YAML (and XML) consists of heterogeneous collections that can be nested. There are 2\n    types of collections: named collections (mappings) and unnamed collections (sequences). In mappings\n    each element has a name and is accessed by name. This is similar to structures and std::map in\n    C/C++ and dictionaries in Python. In sequences elements do not have names, they are accessed by\n    indices. This is similar to arrays and std::vector in C/C++ and lists, tuples in Python.\n    \"Heterogeneous\" means that elements of each single collection can have different types.\n\n    Top-level collection in YAML/XML is a mapping. Each matrix is stored as a mapping, and the matrix\n    elements are stored as a sequence. Then, there is a sequence of features, where each feature is\n    represented a mapping, and lbp value in a nested sequence.\n\n-   When you write to a mapping (a structure), you write element name followed by its value. When you\n    write to a sequence, you simply write the elements one by one. OpenCV data structures (such as\n    cv::Mat) are written in absolutely the same way as simple C data structures - using `<<`\n    operator.\n\n-   To write a mapping, you first write the special string `{` to the storage, then write the\n    elements as pairs (`fs << <element_name> << <element_value>`) and then write the closing\n    `}`.\n\n-   To write a sequence, you first write the special string `[`, then write the elements, then\n    write the closing `]`.\n\n-   In YAML (but not XML), mappings and sequences can be written in a compact Python-like inline\n    form. In the sample above matrix elements, as well as each feature, including its lbp value, is\n    stored in such inline form. To store a mapping/sequence in a compact form, put `:` after the\n    opening character, e.g. use `{:` instead of `{` and `[:` instead of `[`. When the\n    data is written to XML, those extra `:` are ignored.\n\nReading data from a file storage.\n---------------------------------\nTo read the previously written XML or YAML file, do the following:\n-#  Open the file storage using FileStorage::FileStorage constructor or FileStorage::open method.\n    In the current implementation the whole file is parsed and the whole representation of file\n    storage is built in memory as a hierarchy of file nodes (see FileNode)\n\n-#  Read the data you are interested in. Use FileStorage::operator [], FileNode::operator []\n    and/or FileNodeIterator.\n\n-#  Close the storage using FileStorage::release.\n\nHere is how to read the file created by the code sample above:\n@code\n    FileStorage fs2(\"test.yml\", FileStorage::READ);\n\n    // first method: use (type) operator on FileNode.\n    int frameCount = (int)fs2[\"frameCount\"];\n\n    String date;\n    // second method: use FileNode::operator >>\n    fs2[\"calibrationDate\"] >> date;\n\n    Mat cameraMatrix2, distCoeffs2;\n    fs2[\"cameraMatrix\"] >> cameraMatrix2;\n    fs2[\"distCoeffs\"] >> distCoeffs2;\n\n    cout << \"frameCount: \" << frameCount << endl\n         << \"calibration date: \" << date << endl\n         << \"camera matrix: \" << cameraMatrix2 << endl\n         << \"distortion coeffs: \" << distCoeffs2 << endl;\n\n    FileNode features = fs2[\"features\"];\n    FileNodeIterator it = features.begin(), it_end = features.end();\n    int idx = 0;\n    std::vector<uchar> lbpval;\n\n    // iterate through a sequence using FileNodeIterator\n    for( ; it != it_end; ++it, idx++ )\n    {\n        cout << \"feature #\" << idx << \": \";\n        cout << \"x=\" << (int)(*it)[\"x\"] << \", y=\" << (int)(*it)[\"y\"] << \", lbp: (\";\n        // you can also easily read numerical arrays using FileNode >> std::vector operator.\n        (*it)[\"lbp\"] >> lbpval;\n        for( int i = 0; i < (int)lbpval.size(); i++ )\n            cout << \" \" << (int)lbpval[i];\n        cout << \")\" << endl;\n    }\n    fs2.release();\n@endcode\n\nFormat specification    {#format_spec}\n--------------------\n`([count]{u|c|w|s|i|f|d})`... where the characters correspond to fundamental C++ types:\n-   `u` 8-bit unsigned number\n-   `c` 8-bit signed number\n-   `w` 16-bit unsigned number\n-   `s` 16-bit signed number\n-   `i` 32-bit signed number\n-   `f` single precision floating-point number\n-   `d` double precision floating-point number\n-   `r` pointer, 32 lower bits of which are written as a signed integer. The type can be used to\n    store structures with links between the elements.\n\n`count` is the optional counter of values of a given type. For example, `2if` means that each array\nelement is a structure of 2 integers, followed by a single-precision floating-point number. The\nequivalent notations of the above specification are `iif`, `2i1f` and so forth. Other examples: `u`\nmeans that the array consists of bytes, and `2d` means the array consists of pairs of doubles.\n\n@see @ref filestorage.cpp\n*/\n\n//! @{\n\n/** @example filestorage.cpp\nA complete example using the FileStorage interface\n*/\n\n////////////////////////// XML & YAML I/O //////////////////////////\n\nclass CV_EXPORTS FileNode;\nclass CV_EXPORTS FileNodeIterator;\n\n/** @brief XML/YAML file storage class that encapsulates all the information necessary for writing or reading\ndata to/from a file.\n */\nclass CV_EXPORTS_W FileStorage\n{\npublic:\n    //! file storage mode\n    enum Mode\n    {\n        READ        = 0, //!< value, open the file for reading\n        WRITE       = 1, //!< value, open the file for writing\n        APPEND      = 2, //!< value, open the file for appending\n        MEMORY      = 4, //!< flag, read data from source or write data to the internal buffer (which is\n                         //!< returned by FileStorage::release)\n        FORMAT_MASK = (7<<3), //!< mask for format flags\n        FORMAT_AUTO = 0,      //!< flag, auto format\n        FORMAT_XML  = (1<<3), //!< flag, XML format\n        FORMAT_YAML = (2<<3)  //!< flag, YAML format\n    };\n    enum\n    {\n        UNDEFINED      = 0,\n        VALUE_EXPECTED = 1,\n        NAME_EXPECTED  = 2,\n        INSIDE_MAP     = 4\n    };\n\n    /** @brief The constructors.\n\n    The full constructor opens the file. Alternatively you can use the default constructor and then\n    call FileStorage::open.\n     */\n    CV_WRAP FileStorage();\n\n    /** @overload\n    @param source Name of the file to open or the text string to read the data from. Extension of the\n    file (.xml or .yml/.yaml) determines its format (XML or YAML respectively). Also you can append .gz\n    to work with compressed files, for example myHugeMatrix.xml.gz. If both FileStorage::WRITE and\n    FileStorage::MEMORY flags are specified, source is used just to specify the output file format (e.g.\n    mydata.xml, .yml etc.).\n    @param flags Mode of operation. See  FileStorage::Mode\n    @param encoding Encoding of the file. Note that UTF-16 XML encoding is not supported currently and\n    you should use 8-bit encoding instead of it.\n    */\n    CV_WRAP FileStorage(const String& source, int flags, const String& encoding=String());\n\n    /** @overload */\n    FileStorage(CvFileStorage* fs, bool owning=true);\n\n    //! the destructor. calls release()\n    virtual ~FileStorage();\n\n    /** @brief Opens a file.\n\n    See description of parameters in FileStorage::FileStorage. The method calls FileStorage::release\n    before opening the file.\n    @param filename Name of the file to open or the text string to read the data from.\n       Extension of the file (.xml or .yml/.yaml) determines its format (XML or YAML respectively).\n        Also you can append .gz to work with compressed files, for example myHugeMatrix.xml.gz. If both\n        FileStorage::WRITE and FileStorage::MEMORY flags are specified, source is used just to specify\n        the output file format (e.g. mydata.xml, .yml etc.).\n    @param flags Mode of operation. One of FileStorage::Mode\n    @param encoding Encoding of the file. Note that UTF-16 XML encoding is not supported currently and\n    you should use 8-bit encoding instead of it.\n     */\n    CV_WRAP virtual bool open(const String& filename, int flags, const String& encoding=String());\n\n    /** @brief Checks whether the file is opened.\n\n    @returns true if the object is associated with the current file and false otherwise. It is a\n    good practice to call this method after you tried to open a file.\n     */\n    CV_WRAP virtual bool isOpened() const;\n\n    /** @brief Closes the file and releases all the memory buffers.\n\n    Call this method after all I/O operations with the storage are finished.\n     */\n    CV_WRAP virtual void release();\n\n    /** @brief Closes the file and releases all the memory buffers.\n\n    Call this method after all I/O operations with the storage are finished. If the storage was\n    opened for writing data and FileStorage::WRITE was specified\n     */\n    CV_WRAP virtual String releaseAndGetString();\n\n    /** @brief Returns the first element of the top-level mapping.\n    @returns The first element of the top-level mapping.\n     */\n    CV_WRAP FileNode getFirstTopLevelNode() const;\n\n    /** @brief Returns the top-level mapping\n    @param streamidx Zero-based index of the stream. In most cases there is only one stream in the file.\n    However, YAML supports multiple streams and so there can be several.\n    @returns The top-level mapping.\n     */\n    CV_WRAP FileNode root(int streamidx=0) const;\n\n    /** @brief Returns the specified element of the top-level mapping.\n    @param nodename Name of the file node.\n    @returns Node with the given name.\n     */\n    FileNode operator[](const String& nodename) const;\n\n    /** @overload */\n    CV_WRAP FileNode operator[](const char* nodename) const;\n\n    /** @brief Returns the obsolete C FileStorage structure.\n    @returns Pointer to the underlying C FileStorage structure\n     */\n    CvFileStorage* operator *() { return fs.get(); }\n\n    /** @overload */\n    const CvFileStorage* operator *() const { return fs.get(); }\n\n    /** @brief Writes multiple numbers.\n\n    Writes one or more numbers of the specified format to the currently written structure. Usually it is\n    more convenient to use operator `<<` instead of this method.\n    @param fmt Specification of each array element, see @ref format_spec \"format specification\"\n    @param vec Pointer to the written array.\n    @param len Number of the uchar elements to write.\n     */\n    void writeRaw( const String& fmt, const uchar* vec, size_t len );\n\n    /** @brief Writes the registered C structure (CvMat, CvMatND, CvSeq).\n    @param name Name of the written object.\n    @param obj Pointer to the object.\n    @see ocvWrite for details.\n     */\n    void writeObj( const String& name, const void* obj );\n\n    /** @brief Returns the normalized object name for the specified name of a file.\n    @param filename Name of a file\n    @returns The normalized object name.\n     */\n    static String getDefaultObjectName(const String& filename);\n\n    Ptr<CvFileStorage> fs; //!< the underlying C FileStorage structure\n    String elname; //!< the currently written element\n    std::vector<char> structs; //!< the stack of written structures\n    int state; //!< the writer state\n};\n\ntemplate<> CV_EXPORTS void DefaultDeleter<CvFileStorage>::operator ()(CvFileStorage* obj) const;\n\n/** @brief File Storage Node class.\n\nThe node is used to store each and every element of the file storage opened for reading. When\nXML/YAML file is read, it is first parsed and stored in the memory as a hierarchical collection of\nnodes. Each node can be a “leaf” that is contain a single number or a string, or be a collection of\nother nodes. There can be named collections (mappings) where each element has a name and it is\naccessed by a name, and ordered collections (sequences) where elements do not have names but rather\naccessed by index. Type of the file node can be determined using FileNode::type method.\n\nNote that file nodes are only used for navigating file storages opened for reading. When a file\nstorage is opened for writing, no data is stored in memory after it is written.\n */\nclass CV_EXPORTS_W_SIMPLE FileNode\n{\npublic:\n    //! type of the file storage node\n    enum Type\n    {\n        NONE      = 0, //!< empty node\n        INT       = 1, //!< an integer\n        REAL      = 2, //!< floating-point number\n        FLOAT     = REAL, //!< synonym or REAL\n        STR       = 3, //!< text string in UTF-8 encoding\n        STRING    = STR, //!< synonym for STR\n        REF       = 4, //!< integer of size size_t. Typically used for storing complex dynamic structures where some elements reference the others\n        SEQ       = 5, //!< sequence\n        MAP       = 6, //!< mapping\n        TYPE_MASK = 7,\n        FLOW      = 8,  //!< compact representation of a sequence or mapping. Used only by YAML writer\n        USER      = 16, //!< a registered object (e.g. a matrix)\n        EMPTY     = 32, //!< empty structure (sequence or mapping)\n        NAMED     = 64  //!< the node has a name (i.e. it is element of a mapping)\n    };\n    /** @brief The constructors.\n\n    These constructors are used to create a default file node, construct it from obsolete structures or\n    from the another file node.\n     */\n    CV_WRAP FileNode();\n\n    /** @overload\n    @param fs Pointer to the obsolete file storage structure.\n    @param node File node to be used as initialization for the created file node.\n    */\n    FileNode(const CvFileStorage* fs, const CvFileNode* node);\n\n    /** @overload\n    @param node File node to be used as initialization for the created file node.\n    */\n    FileNode(const FileNode& node);\n\n    /** @brief Returns element of a mapping node or a sequence node.\n    @param nodename Name of an element in the mapping node.\n    @returns Returns the element with the given identifier.\n     */\n    FileNode operator[](const String& nodename) const;\n\n    /** @overload\n    @param nodename Name of an element in the mapping node.\n    */\n    CV_WRAP FileNode operator[](const char* nodename) const;\n\n    /** @overload\n    @param i Index of an element in the sequence node.\n    */\n    CV_WRAP FileNode operator[](int i) const;\n\n    /** @brief Returns type of the node.\n    @returns Type of the node. See FileNode::Type\n     */\n    CV_WRAP int type() const;\n\n    //! returns true if the node is empty\n    CV_WRAP bool empty() const;\n    //! returns true if the node is a \"none\" object\n    CV_WRAP bool isNone() const;\n    //! returns true if the node is a sequence\n    CV_WRAP bool isSeq() const;\n    //! returns true if the node is a mapping\n    CV_WRAP bool isMap() const;\n    //! returns true if the node is an integer\n    CV_WRAP bool isInt() const;\n    //! returns true if the node is a floating-point number\n    CV_WRAP bool isReal() const;\n    //! returns true if the node is a text string\n    CV_WRAP bool isString() const;\n    //! returns true if the node has a name\n    CV_WRAP bool isNamed() const;\n    //! returns the node name or an empty string if the node is nameless\n    CV_WRAP String name() const;\n    //! returns the number of elements in the node, if it is a sequence or mapping, or 1 otherwise.\n    CV_WRAP size_t size() const;\n    //! returns the node content as an integer. If the node stores floating-point number, it is rounded.\n    operator int() const;\n    //! returns the node content as float\n    operator float() const;\n    //! returns the node content as double\n    operator double() const;\n    //! returns the node content as text string\n    operator String() const;\n#ifndef OPENCV_NOSTL\n    operator std::string() const;\n#endif\n\n    //! returns pointer to the underlying file node\n    CvFileNode* operator *();\n    //! returns pointer to the underlying file node\n    const CvFileNode* operator* () const;\n\n    //! returns iterator pointing to the first node element\n    FileNodeIterator begin() const;\n    //! returns iterator pointing to the element following the last node element\n    FileNodeIterator end() const;\n\n    /** @brief Reads node elements to the buffer with the specified format.\n\n    Usually it is more convenient to use operator `>>` instead of this method.\n    @param fmt Specification of each array element. See @ref format_spec \"format specification\"\n    @param vec Pointer to the destination array.\n    @param len Number of elements to read. If it is greater than number of remaining elements then all\n    of them will be read.\n     */\n    void readRaw( const String& fmt, uchar* vec, size_t len ) const;\n\n    //! reads the registered object and returns pointer to it\n    void* readObj() const;\n\n    // do not use wrapper pointer classes for better efficiency\n    const CvFileStorage* fs;\n    const CvFileNode* node;\n};\n\n\n/** @brief used to iterate through sequences and mappings.\n\nA standard STL notation, with node.begin(), node.end() denoting the beginning and the end of a\nsequence, stored in node. See the data reading sample in the beginning of the section.\n */\nclass CV_EXPORTS FileNodeIterator\n{\npublic:\n    /** @brief The constructors.\n\n    These constructors are used to create a default iterator, set it to specific element in a file node\n    or construct it from another iterator.\n     */\n    FileNodeIterator();\n\n    /** @overload\n    @param fs File storage for the iterator.\n    @param node File node for the iterator.\n    @param ofs Index of the element in the node. The created iterator will point to this element.\n    */\n    FileNodeIterator(const CvFileStorage* fs, const CvFileNode* node, size_t ofs=0);\n\n    /** @overload\n    @param it Iterator to be used as initialization for the created iterator.\n    */\n    FileNodeIterator(const FileNodeIterator& it);\n\n    //! returns the currently observed element\n    FileNode operator *() const;\n    //! accesses the currently observed element methods\n    FileNode operator ->() const;\n\n    //! moves iterator to the next node\n    FileNodeIterator& operator ++ ();\n    //! moves iterator to the next node\n    FileNodeIterator operator ++ (int);\n    //! moves iterator to the previous node\n    FileNodeIterator& operator -- ();\n    //! moves iterator to the previous node\n    FileNodeIterator operator -- (int);\n    //! moves iterator forward by the specified offset (possibly negative)\n    FileNodeIterator& operator += (int ofs);\n    //! moves iterator backward by the specified offset (possibly negative)\n    FileNodeIterator& operator -= (int ofs);\n\n    /** @brief Reads node elements to the buffer with the specified format.\n\n    Usually it is more convenient to use operator `>>` instead of this method.\n    @param fmt Specification of each array element. See @ref format_spec \"format specification\"\n    @param vec Pointer to the destination array.\n    @param maxCount Number of elements to read. If it is greater than number of remaining elements then\n    all of them will be read.\n     */\n    FileNodeIterator& readRaw( const String& fmt, uchar* vec,\n                               size_t maxCount=(size_t)INT_MAX );\n\n    struct SeqReader\n    {\n      int          header_size;\n      void*        seq;        /* sequence, beign read; CvSeq      */\n      void*        block;      /* current block;        CvSeqBlock */\n      schar*       ptr;        /* pointer to element be read next */\n      schar*       block_min;  /* pointer to the beginning of block */\n      schar*       block_max;  /* pointer to the end of block */\n      int          delta_index;/* = seq->first->start_index   */\n      schar*       prev_elem;  /* pointer to previous element */\n    };\n\n    const CvFileStorage* fs;\n    const CvFileNode* container;\n    SeqReader reader;\n    size_t remaining;\n};\n\n//! @} core_xml\n\n/////////////////// XML & YAML I/O implementation //////////////////\n\n//! @relates cv::FileStorage\n//! @{\n\nCV_EXPORTS void write( FileStorage& fs, const String& name, int value );\nCV_EXPORTS void write( FileStorage& fs, const String& name, float value );\nCV_EXPORTS void write( FileStorage& fs, const String& name, double value );\nCV_EXPORTS void write( FileStorage& fs, const String& name, const String& value );\nCV_EXPORTS void write( FileStorage& fs, const String& name, const Mat& value );\nCV_EXPORTS void write( FileStorage& fs, const String& name, const SparseMat& value );\nCV_EXPORTS void write( FileStorage& fs, const String& name, const std::vector<KeyPoint>& value);\nCV_EXPORTS void write( FileStorage& fs, const String& name, const std::vector<DMatch>& value);\n\nCV_EXPORTS void writeScalar( FileStorage& fs, int value );\nCV_EXPORTS void writeScalar( FileStorage& fs, float value );\nCV_EXPORTS void writeScalar( FileStorage& fs, double value );\nCV_EXPORTS void writeScalar( FileStorage& fs, const String& value );\n\n//! @}\n\n//! @relates cv::FileNode\n//! @{\n\nCV_EXPORTS void read(const FileNode& node, int& value, int default_value);\nCV_EXPORTS void read(const FileNode& node, float& value, float default_value);\nCV_EXPORTS void read(const FileNode& node, double& value, double default_value);\nCV_EXPORTS void read(const FileNode& node, String& value, const String& default_value);\nCV_EXPORTS void read(const FileNode& node, Mat& mat, const Mat& default_mat = Mat() );\nCV_EXPORTS void read(const FileNode& node, SparseMat& mat, const SparseMat& default_mat = SparseMat() );\nCV_EXPORTS void read(const FileNode& node, std::vector<KeyPoint>& keypoints);\nCV_EXPORTS void read(const FileNode& node, std::vector<DMatch>& matches);\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Point_<_Tp>& value, const Point_<_Tp>& default_value)\n{\n    std::vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 2 ? default_value : Point_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Point3_<_Tp>& value, const Point3_<_Tp>& default_value)\n{\n    std::vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 3 ? default_value : Point3_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]),\n                                                            saturate_cast<_Tp>(temp[2]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Size_<_Tp>& value, const Size_<_Tp>& default_value)\n{\n    std::vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 2 ? default_value : Size_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Complex<_Tp>& value, const Complex<_Tp>& default_value)\n{\n    std::vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 2 ? default_value : Complex<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Rect_<_Tp>& value, const Rect_<_Tp>& default_value)\n{\n    std::vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 4 ? default_value : Rect_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]),\n                                                          saturate_cast<_Tp>(temp[2]), saturate_cast<_Tp>(temp[3]));\n}\n\ntemplate<typename _Tp, int cn> static inline void read(const FileNode& node, Vec<_Tp, cn>& value, const Vec<_Tp, cn>& default_value)\n{\n    std::vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != cn ? default_value : Vec<_Tp, cn>(&temp[0]);\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Scalar_<_Tp>& value, const Scalar_<_Tp>& default_value)\n{\n    std::vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 4 ? default_value : Scalar_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]),\n                                                            saturate_cast<_Tp>(temp[2]), saturate_cast<_Tp>(temp[3]));\n}\n\nstatic inline void read(const FileNode& node, Range& value, const Range& default_value)\n{\n    Point2i temp(value.start, value.end); const Point2i default_temp = Point2i(default_value.start, default_value.end);\n    read(node, temp, default_temp);\n    value.start = temp.x; value.end = temp.y;\n}\n\n//! @}\n\n/** @brief Writes string to a file storage.\n@relates cv::FileStorage\n */\nCV_EXPORTS FileStorage& operator << (FileStorage& fs, const String& str);\n\n//! @cond IGNORED\n\nnamespace internal\n{\n    class CV_EXPORTS WriteStructContext\n    {\n    public:\n        WriteStructContext(FileStorage& _fs, const String& name, int flags, const String& typeName = String());\n        ~WriteStructContext();\n    private:\n        FileStorage* fs;\n    };\n\n    template<typename _Tp, int numflag> class VecWriterProxy\n    {\n    public:\n        VecWriterProxy( FileStorage* _fs ) : fs(_fs) {}\n        void operator()(const std::vector<_Tp>& vec) const\n        {\n            size_t count = vec.size();\n            for (size_t i = 0; i < count; i++)\n                write(*fs, vec[i]);\n        }\n    private:\n        FileStorage* fs;\n    };\n\n    template<typename _Tp> class VecWriterProxy<_Tp, 1>\n    {\n    public:\n        VecWriterProxy( FileStorage* _fs ) : fs(_fs) {}\n        void operator()(const std::vector<_Tp>& vec) const\n        {\n            int _fmt = DataType<_Tp>::fmt;\n            char fmt[] = { (char)((_fmt >> 8) + '1'), (char)_fmt, '\\0' };\n            fs->writeRaw(fmt, !vec.empty() ? (uchar*)&vec[0] : 0, vec.size() * sizeof(_Tp));\n        }\n    private:\n        FileStorage* fs;\n    };\n\n    template<typename _Tp, int numflag> class VecReaderProxy\n    {\n    public:\n        VecReaderProxy( FileNodeIterator* _it ) : it(_it) {}\n        void operator()(std::vector<_Tp>& vec, size_t count) const\n        {\n            count = std::min(count, it->remaining);\n            vec.resize(count);\n            for (size_t i = 0; i < count; i++, ++(*it))\n                read(**it, vec[i], _Tp());\n        }\n    private:\n        FileNodeIterator* it;\n    };\n\n    template<typename _Tp> class VecReaderProxy<_Tp, 1>\n    {\n    public:\n        VecReaderProxy( FileNodeIterator* _it ) : it(_it) {}\n        void operator()(std::vector<_Tp>& vec, size_t count) const\n        {\n            size_t remaining = it->remaining;\n            size_t cn = DataType<_Tp>::channels;\n            int _fmt = DataType<_Tp>::fmt;\n            char fmt[] = { (char)((_fmt >> 8)+'1'), (char)_fmt, '\\0' };\n            size_t remaining1 = remaining / cn;\n            count = count < remaining1 ? count : remaining1;\n            vec.resize(count);\n            it->readRaw(fmt, !vec.empty() ? (uchar*)&vec[0] : 0, count*sizeof(_Tp));\n        }\n    private:\n        FileNodeIterator* it;\n    };\n\n} // internal\n\n//! @endcond\n\n//! @relates cv::FileStorage\n//! @{\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const _Tp& value)\n{\n    write(fs, String(), value);\n}\n\ntemplate<> inline\nvoid write( FileStorage& fs, const int& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<> inline\nvoid write( FileStorage& fs, const float& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<> inline\nvoid write( FileStorage& fs, const double& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<> inline\nvoid write( FileStorage& fs, const String& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const Point_<_Tp>& pt )\n{\n    write(fs, pt.x);\n    write(fs, pt.y);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const Point3_<_Tp>& pt )\n{\n    write(fs, pt.x);\n    write(fs, pt.y);\n    write(fs, pt.z);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const Size_<_Tp>& sz )\n{\n    write(fs, sz.width);\n    write(fs, sz.height);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const Complex<_Tp>& c )\n{\n    write(fs, c.re);\n    write(fs, c.im);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const Rect_<_Tp>& r )\n{\n    write(fs, r.x);\n    write(fs, r.y);\n    write(fs, r.width);\n    write(fs, r.height);\n}\n\ntemplate<typename _Tp, int cn> static inline\nvoid write(FileStorage& fs, const Vec<_Tp, cn>& v )\n{\n    for(int i = 0; i < cn; i++)\n        write(fs, v.val[i]);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const Scalar_<_Tp>& s )\n{\n    write(fs, s.val[0]);\n    write(fs, s.val[1]);\n    write(fs, s.val[2]);\n    write(fs, s.val[3]);\n}\n\nstatic inline\nvoid write(FileStorage& fs, const Range& r )\n{\n    write(fs, r.start);\n    write(fs, r.end);\n}\n\ntemplate<typename _Tp> static inline\nvoid write( FileStorage& fs, const std::vector<_Tp>& vec )\n{\n    cv::internal::VecWriterProxy<_Tp, DataType<_Tp>::fmt != 0> w(&fs);\n    w(vec);\n}\n\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const String& name, const Point_<_Tp>& pt )\n{\n    cv::internal::WriteStructContext ws(fs, name, FileNode::SEQ+FileNode::FLOW);\n    write(fs, pt);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const String& name, const Point3_<_Tp>& pt )\n{\n    cv::internal::WriteStructContext ws(fs, name, FileNode::SEQ+FileNode::FLOW);\n    write(fs, pt);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const String& name, const Size_<_Tp>& sz )\n{\n    cv::internal::WriteStructContext ws(fs, name, FileNode::SEQ+FileNode::FLOW);\n    write(fs, sz);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const String& name, const Complex<_Tp>& c )\n{\n    cv::internal::WriteStructContext ws(fs, name, FileNode::SEQ+FileNode::FLOW);\n    write(fs, c);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const String& name, const Rect_<_Tp>& r )\n{\n    cv::internal::WriteStructContext ws(fs, name, FileNode::SEQ+FileNode::FLOW);\n    write(fs, r);\n}\n\ntemplate<typename _Tp, int cn> static inline\nvoid write(FileStorage& fs, const String& name, const Vec<_Tp, cn>& v )\n{\n    cv::internal::WriteStructContext ws(fs, name, FileNode::SEQ+FileNode::FLOW);\n    write(fs, v);\n}\n\ntemplate<typename _Tp> static inline\nvoid write(FileStorage& fs, const String& name, const Scalar_<_Tp>& s )\n{\n    cv::internal::WriteStructContext ws(fs, name, FileNode::SEQ+FileNode::FLOW);\n    write(fs, s);\n}\n\nstatic inline\nvoid write(FileStorage& fs, const String& name, const Range& r )\n{\n    cv::internal::WriteStructContext ws(fs, name, FileNode::SEQ+FileNode::FLOW);\n    write(fs, r);\n}\n\ntemplate<typename _Tp> static inline\nvoid write( FileStorage& fs, const String& name, const std::vector<_Tp>& vec )\n{\n    cv::internal::WriteStructContext ws(fs, name, FileNode::SEQ+(DataType<_Tp>::fmt != 0 ? FileNode::FLOW : 0));\n    write(fs, vec);\n}\n\n//! @} FileStorage\n\n//! @relates cv::FileNode\n//! @{\n\nstatic inline\nvoid read(const FileNode& node, bool& value, bool default_value)\n{\n    int temp;\n    read(node, temp, (int)default_value);\n    value = temp != 0;\n}\n\nstatic inline\nvoid read(const FileNode& node, uchar& value, uchar default_value)\n{\n    int temp;\n    read(node, temp, (int)default_value);\n    value = saturate_cast<uchar>(temp);\n}\n\nstatic inline\nvoid read(const FileNode& node, schar& value, schar default_value)\n{\n    int temp;\n    read(node, temp, (int)default_value);\n    value = saturate_cast<schar>(temp);\n}\n\nstatic inline\nvoid read(const FileNode& node, ushort& value, ushort default_value)\n{\n    int temp;\n    read(node, temp, (int)default_value);\n    value = saturate_cast<ushort>(temp);\n}\n\nstatic inline\nvoid read(const FileNode& node, short& value, short default_value)\n{\n    int temp;\n    read(node, temp, (int)default_value);\n    value = saturate_cast<short>(temp);\n}\n\ntemplate<typename _Tp> static inline\nvoid read( FileNodeIterator& it, std::vector<_Tp>& vec, size_t maxCount = (size_t)INT_MAX )\n{\n    cv::internal::VecReaderProxy<_Tp, DataType<_Tp>::fmt != 0> r(&it);\n    r(vec, maxCount);\n}\n\ntemplate<typename _Tp> static inline\nvoid read( const FileNode& node, std::vector<_Tp>& vec, const std::vector<_Tp>& default_value = std::vector<_Tp>() )\n{\n    if(!node.node)\n        vec = default_value;\n    else\n    {\n        FileNodeIterator it = node.begin();\n        read( it, vec );\n    }\n}\n\n//! @} FileNode\n\n//! @relates cv::FileStorage\n//! @{\n\n/** @brief Writes data to a file storage.\n */\ntemplate<typename _Tp> static inline\nFileStorage& operator << (FileStorage& fs, const _Tp& value)\n{\n    if( !fs.isOpened() )\n        return fs;\n    if( fs.state == FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP )\n        CV_Error( Error::StsError, \"No element name has been given\" );\n    write( fs, fs.elname, value );\n    if( fs.state & FileStorage::INSIDE_MAP )\n        fs.state = FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP;\n    return fs;\n}\n\n/** @brief Writes data to a file storage.\n */\nstatic inline\nFileStorage& operator << (FileStorage& fs, const char* str)\n{\n    return (fs << String(str));\n}\n\n/** @brief Writes data to a file storage.\n */\nstatic inline\nFileStorage& operator << (FileStorage& fs, char* value)\n{\n    return (fs << String(value));\n}\n\n//! @} FileStorage\n\n//! @relates cv::FileNodeIterator\n//! @{\n\n/** @brief Reads data from a file storage.\n */\ntemplate<typename _Tp> static inline\nFileNodeIterator& operator >> (FileNodeIterator& it, _Tp& value)\n{\n    read( *it, value, _Tp());\n    return ++it;\n}\n\n/** @brief Reads data from a file storage.\n */\ntemplate<typename _Tp> static inline\nFileNodeIterator& operator >> (FileNodeIterator& it, std::vector<_Tp>& vec)\n{\n    cv::internal::VecReaderProxy<_Tp, DataType<_Tp>::fmt != 0> r(&it);\n    r(vec, (size_t)INT_MAX);\n    return it;\n}\n\n//! @} FileNodeIterator\n\n//! @relates cv::FileNode\n//! @{\n\n/** @brief Reads data from a file storage.\n */\ntemplate<typename _Tp> static inline\nvoid operator >> (const FileNode& n, _Tp& value)\n{\n    read( n, value, _Tp());\n}\n\n/** @brief Reads data from a file storage.\n */\ntemplate<typename _Tp> static inline\nvoid operator >> (const FileNode& n, std::vector<_Tp>& vec)\n{\n    FileNodeIterator it = n.begin();\n    it >> vec;\n}\n\n//! @} FileNode\n\n//! @relates cv::FileNodeIterator\n//! @{\n\nstatic inline\nbool operator == (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return it1.fs == it2.fs && it1.container == it2.container &&\n        it1.reader.ptr == it2.reader.ptr && it1.remaining == it2.remaining;\n}\n\nstatic inline\nbool operator != (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return !(it1 == it2);\n}\n\nstatic inline\nptrdiff_t operator - (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return it2.remaining - it1.remaining;\n}\n\nstatic inline\nbool operator < (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return it1.remaining > it2.remaining;\n}\n\n//! @} FileNodeIterator\n\n//! @cond IGNORED\n\ninline FileNode FileStorage::getFirstTopLevelNode() const { FileNode r = root(); FileNodeIterator it = r.begin(); return it != r.end() ? *it : FileNode(); }\ninline FileNode::FileNode() : fs(0), node(0) {}\ninline FileNode::FileNode(const CvFileStorage* _fs, const CvFileNode* _node) : fs(_fs), node(_node) {}\ninline FileNode::FileNode(const FileNode& _node) : fs(_node.fs), node(_node.node) {}\ninline bool FileNode::empty() const    { return node   == 0;    }\ninline bool FileNode::isNone() const   { return type() == NONE; }\ninline bool FileNode::isSeq() const    { return type() == SEQ;  }\ninline bool FileNode::isMap() const    { return type() == MAP;  }\ninline bool FileNode::isInt() const    { return type() == INT;  }\ninline bool FileNode::isReal() const   { return type() == REAL; }\ninline bool FileNode::isString() const { return type() == STR;  }\ninline CvFileNode* FileNode::operator *() { return (CvFileNode*)node; }\ninline const CvFileNode* FileNode::operator* () const { return node; }\ninline FileNode::operator int() const    { int value;    read(*this, value, 0);     return value; }\ninline FileNode::operator float() const  { float value;  read(*this, value, 0.f);   return value; }\ninline FileNode::operator double() const { double value; read(*this, value, 0.);    return value; }\ninline FileNode::operator String() const { String value; read(*this, value, value); return value; }\ninline FileNodeIterator FileNode::begin() const { return FileNodeIterator(fs, node); }\ninline FileNodeIterator FileNode::end() const   { return FileNodeIterator(fs, node, size()); }\ninline void FileNode::readRaw( const String& fmt, uchar* vec, size_t len ) const { begin().readRaw( fmt, vec, len ); }\ninline FileNode FileNodeIterator::operator *() const  { return FileNode(fs, (const CvFileNode*)(const void*)reader.ptr); }\ninline FileNode FileNodeIterator::operator ->() const { return FileNode(fs, (const CvFileNode*)(const void*)reader.ptr); }\ninline String::String(const FileNode& fn): cstr_(0), len_(0) { read(fn, *this, *this); }\n\n//! @endcond\n\n} // cv\n\n#endif // __OPENCV_CORE_PERSISTENCE_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/private.cuda.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_PRIVATE_CUDA_HPP__\n#define __OPENCV_CORE_PRIVATE_CUDA_HPP__\n\n#ifndef __OPENCV_BUILD\n#  error this is a private header which should not be used from outside of the OpenCV library\n#endif\n\n#include \"cvconfig.h\"\n\n#include \"opencv2/core/cvdef.h\"\n#include \"opencv2/core/base.hpp\"\n\n#include \"opencv2/core/cuda.hpp\"\n\n#ifdef HAVE_CUDA\n#  include <cuda.h>\n#  include <cuda_runtime.h>\n#  include <npp.h>\n#  include \"opencv2/core/cuda_stream_accessor.hpp\"\n#  include \"opencv2/core/cuda/common.hpp\"\n\n#  define NPP_VERSION (NPP_VERSION_MAJOR * 1000 + NPP_VERSION_MINOR * 100 + NPP_VERSION_BUILD)\n\n#  define CUDART_MINIMUM_REQUIRED_VERSION 4020\n\n#  if (CUDART_VERSION < CUDART_MINIMUM_REQUIRED_VERSION)\n#    error \"Insufficient Cuda Runtime library version, please update it.\"\n#  endif\n\n#  if defined(CUDA_ARCH_BIN_OR_PTX_10)\n#    error \"OpenCV CUDA module doesn't support NVIDIA compute capability 1.0\"\n#  endif\n#endif\n\n//! @cond IGNORED\n\nnamespace cv { namespace cuda {\n    CV_EXPORTS cv::String getNppErrorMessage(int code);\n    CV_EXPORTS cv::String getCudaDriverApiErrorMessage(int code);\n\n    CV_EXPORTS GpuMat getInputMat(InputArray _src, Stream& stream);\n\n    CV_EXPORTS GpuMat getOutputMat(OutputArray _dst, int rows, int cols, int type, Stream& stream);\n    static inline GpuMat getOutputMat(OutputArray _dst, Size size, int type, Stream& stream)\n    {\n        return getOutputMat(_dst, size.height, size.width, type, stream);\n    }\n\n    CV_EXPORTS void syncOutput(const GpuMat& dst, OutputArray _dst, Stream& stream);\n}}\n\n#ifndef HAVE_CUDA\n\nstatic inline void throw_no_cuda() { CV_Error(cv::Error::GpuNotSupported, \"The library is compiled without CUDA support\"); }\n\n#else // HAVE_CUDA\n\nstatic inline void throw_no_cuda() { CV_Error(cv::Error::StsNotImplemented, \"The called functionality is disabled for current build or platform\"); }\n\nnamespace cv { namespace cuda\n{\n    class CV_EXPORTS BufferPool\n    {\n    public:\n        explicit BufferPool(Stream& stream);\n\n        GpuMat getBuffer(int rows, int cols, int type);\n        GpuMat getBuffer(Size size, int type) { return getBuffer(size.height, size.width, type); }\n\n        GpuMat::Allocator* getAllocator() const { return allocator_; }\n\n    private:\n        GpuMat::Allocator* allocator_;\n    };\n\n    static inline void checkNppError(int code, const char* file, const int line, const char* func)\n    {\n        if (code < 0)\n            cv::error(cv::Error::GpuApiCallError, getNppErrorMessage(code), func, file, line);\n    }\n\n    static inline void checkCudaDriverApiError(int code, const char* file, const int line, const char* func)\n    {\n        if (code != CUDA_SUCCESS)\n            cv::error(cv::Error::GpuApiCallError, getCudaDriverApiErrorMessage(code), func, file, line);\n    }\n\n    template<int n> struct NPPTypeTraits;\n    template<> struct NPPTypeTraits<CV_8U>  { typedef Npp8u npp_type; };\n    template<> struct NPPTypeTraits<CV_8S>  { typedef Npp8s npp_type; };\n    template<> struct NPPTypeTraits<CV_16U> { typedef Npp16u npp_type; };\n    template<> struct NPPTypeTraits<CV_16S> { typedef Npp16s npp_type; };\n    template<> struct NPPTypeTraits<CV_32S> { typedef Npp32s npp_type; };\n    template<> struct NPPTypeTraits<CV_32F> { typedef Npp32f npp_type; };\n    template<> struct NPPTypeTraits<CV_64F> { typedef Npp64f npp_type; };\n\n    class NppStreamHandler\n    {\n    public:\n        inline explicit NppStreamHandler(Stream& newStream)\n        {\n            oldStream = nppGetStream();\n            nppSetStream(StreamAccessor::getStream(newStream));\n        }\n\n        inline explicit NppStreamHandler(cudaStream_t newStream)\n        {\n            oldStream = nppGetStream();\n            nppSetStream(newStream);\n        }\n\n        inline ~NppStreamHandler()\n        {\n            nppSetStream(oldStream);\n        }\n\n    private:\n        cudaStream_t oldStream;\n    };\n}}\n\n#define nppSafeCall(expr)  cv::cuda::checkNppError(expr, __FILE__, __LINE__, CV_Func)\n#define cuSafeCall(expr)  cv::cuda::checkCudaDriverApiError(expr, __FILE__, __LINE__, CV_Func)\n\n#endif // HAVE_CUDA\n\n//! @endcond\n\n#endif // __OPENCV_CORE_CUDA_PRIVATE_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/private.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_PRIVATE_HPP__\n#define __OPENCV_CORE_PRIVATE_HPP__\n\n#ifndef __OPENCV_BUILD\n#  error this is a private header which should not be used from outside of the OpenCV library\n#endif\n\n#include \"opencv2/core.hpp\"\n#include \"cvconfig.h\"\n\n#ifdef HAVE_EIGEN\n#  if defined __GNUC__ && defined __APPLE__\n#    pragma GCC diagnostic ignored \"-Wshadow\"\n#  endif\n#  include <Eigen/Core>\n#  include \"opencv2/core/eigen.hpp\"\n#endif\n\n#ifdef HAVE_TBB\n#  include \"tbb/tbb_stddef.h\"\n#  if TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202\n#    include \"tbb/tbb.h\"\n#    include \"tbb/task.h\"\n#    undef min\n#    undef max\n#  else\n#    undef HAVE_TBB\n#  endif\n#endif\n\n//! @cond IGNORED\n\nnamespace cv\n{\n#ifdef HAVE_TBB\n\n    typedef tbb::blocked_range<int> BlockedRange;\n\n    template<typename Body> static inline\n    void parallel_for( const BlockedRange& range, const Body& body )\n    {\n        tbb::parallel_for(range, body);\n    }\n\n    typedef tbb::split Split;\n\n    template<typename Body> static inline\n    void parallel_reduce( const BlockedRange& range, Body& body )\n    {\n        tbb::parallel_reduce(range, body);\n    }\n\n    typedef tbb::concurrent_vector<Rect> ConcurrentRectVector;\n#else\n    class BlockedRange\n    {\n    public:\n        BlockedRange() : _begin(0), _end(0), _grainsize(0) {}\n        BlockedRange(int b, int e, int g=1) : _begin(b), _end(e), _grainsize(g) {}\n        int begin() const { return _begin; }\n        int end() const { return _end; }\n        int grainsize() const { return _grainsize; }\n\n    protected:\n        int _begin, _end, _grainsize;\n    };\n\n    template<typename Body> static inline\n    void parallel_for( const BlockedRange& range, const Body& body )\n    {\n        body(range);\n    }\n    typedef std::vector<Rect> ConcurrentRectVector;\n\n    class Split {};\n\n    template<typename Body> static inline\n    void parallel_reduce( const BlockedRange& range, Body& body )\n    {\n        body(range);\n    }\n#endif\n\n    // Returns a static string if there is a parallel framework,\n    // NULL otherwise.\n    CV_EXPORTS const char* currentParallelFramework();\n} //namespace cv\n\n/****************************************************************************************\\\n*                                  Common declarations                                   *\n\\****************************************************************************************/\n\n/* the alignment of all the allocated buffers */\n#define  CV_MALLOC_ALIGN    16\n\n/* IEEE754 constants and macros */\n#define  CV_TOGGLE_FLT(x) ((x)^((int)(x) < 0 ? 0x7fffffff : 0))\n#define  CV_TOGGLE_DBL(x) ((x)^((int64)(x) < 0 ? CV_BIG_INT(0x7fffffffffffffff) : 0))\n\nstatic inline void* cvAlignPtr( const void* ptr, int align = 32 )\n{\n    CV_DbgAssert ( (align & (align-1)) == 0 );\n    return (void*)( ((size_t)ptr + align - 1) & ~(size_t)(align-1) );\n}\n\nstatic inline int cvAlign( int size, int align )\n{\n    CV_DbgAssert( (align & (align-1)) == 0 && size < INT_MAX );\n    return (size + align - 1) & -align;\n}\n\n#ifdef IPL_DEPTH_8U\nstatic inline cv::Size cvGetMatSize( const CvMat* mat )\n{\n    return cv::Size(mat->cols, mat->rows);\n}\n#endif\n\nnamespace cv\n{\nCV_EXPORTS void scalarToRawData(const cv::Scalar& s, void* buf, int type, int unroll_to = 0);\n}\n\n// property implementation macros\n\n#define CV_IMPL_PROPERTY_RO(type, name, member) \\\n    inline type get##name() const { return member; }\n\n#define CV_HELP_IMPL_PROPERTY(r_type, w_type, name, member) \\\n    CV_IMPL_PROPERTY_RO(r_type, name, member) \\\n    inline void set##name(w_type val) { member = val; }\n\n#define CV_HELP_WRAP_PROPERTY(r_type, w_type, name, internal_name, internal_obj) \\\n    r_type get##name() const { return internal_obj.get##internal_name(); } \\\n    void set##name(w_type val) { internal_obj.set##internal_name(val); }\n\n#define CV_IMPL_PROPERTY(type, name, member) CV_HELP_IMPL_PROPERTY(type, type, name, member)\n#define CV_IMPL_PROPERTY_S(type, name, member) CV_HELP_IMPL_PROPERTY(type, const type &, name, member)\n\n#define CV_WRAP_PROPERTY(type, name, internal_name, internal_obj)  CV_HELP_WRAP_PROPERTY(type, type, name, internal_name, internal_obj)\n#define CV_WRAP_PROPERTY_S(type, name, internal_name, internal_obj) CV_HELP_WRAP_PROPERTY(type, const type &, name, internal_name, internal_obj)\n\n#define CV_WRAP_SAME_PROPERTY(type, name, internal_obj) CV_WRAP_PROPERTY(type, name, name, internal_obj)\n#define CV_WRAP_SAME_PROPERTY_S(type, name, internal_obj) CV_WRAP_PROPERTY_S(type, name, name, internal_obj)\n\n/****************************************************************************************\\\n*                     Structures and macros for integration with IPP                     *\n\\****************************************************************************************/\n\n#ifdef HAVE_IPP\n#include \"ipp.h\"\n\n#ifndef IPP_VERSION_UPDATE // prior to 7.1\n#define IPP_VERSION_UPDATE 0\n#endif\n\n#define IPP_VERSION_X100 (IPP_VERSION_MAJOR * 100 + IPP_VERSION_MINOR*10 + IPP_VERSION_UPDATE)\n\n// General define for ipp function disabling\n#define IPP_DISABLE_BLOCK 0\n\n#ifdef CV_MALLOC_ALIGN\n#undef CV_MALLOC_ALIGN\n#endif\n#define CV_MALLOC_ALIGN 32 // required for AVX optimization\n\n#define setIppErrorStatus() cv::ipp::setIppStatus(-1, CV_Func, __FILE__, __LINE__)\n\nstatic inline IppiSize ippiSize(int width, int height)\n{\n    IppiSize size = { width, height };\n    return size;\n}\n\nstatic inline IppiSize ippiSize(const cv::Size & _size)\n{\n    IppiSize size = { _size.width, _size.height };\n    return size;\n}\n\nstatic inline IppiBorderType ippiGetBorderType(int borderTypeNI)\n{\n    return borderTypeNI == cv::BORDER_CONSTANT ? ippBorderConst :\n        borderTypeNI == cv::BORDER_WRAP ? ippBorderWrap :\n        borderTypeNI == cv::BORDER_REPLICATE ? ippBorderRepl :\n        borderTypeNI == cv::BORDER_REFLECT_101 ? ippBorderMirror :\n        borderTypeNI == cv::BORDER_REFLECT ? ippBorderMirrorR : (IppiBorderType)-1;\n}\n\nstatic inline IppDataType ippiGetDataType(int depth)\n{\n    return depth == CV_8U ? ipp8u :\n        depth == CV_8S ? ipp8s :\n        depth == CV_16U ? ipp16u :\n        depth == CV_16S ? ipp16s :\n        depth == CV_32S ? ipp32s :\n        depth == CV_32F ? ipp32f :\n        depth == CV_64F ? ipp64f : (IppDataType)-1;\n}\n\n// IPP temporary buffer hepler\ntemplate<typename T>\nclass IppAutoBuffer\n{\npublic:\n    IppAutoBuffer() { m_pBuffer = NULL; }\n    IppAutoBuffer(int size) { Alloc(size); }\n    ~IppAutoBuffer() { Release(); }\n    T* Alloc(int size) { m_pBuffer = (T*)ippMalloc(size); return m_pBuffer; }\n    void Release() { if(m_pBuffer) ippFree(m_pBuffer); }\n    inline operator T* () { return (T*)m_pBuffer;}\n    inline operator const T* () const { return (const T*)m_pBuffer;}\nprivate:\n    // Disable copy operations\n    IppAutoBuffer(IppAutoBuffer &) {};\n    IppAutoBuffer& operator =(const IppAutoBuffer &) {return *this;};\n\n    T* m_pBuffer;\n};\n\n#else\n#define IPP_VERSION_X100 0\n#endif\n\n// There shoud be no API difference in OpenCV between ICV and IPP since 9.0\n#if (defined HAVE_IPP_ICV_ONLY) && IPP_VERSION_X100 >= 900\n#undef HAVE_IPP_ICV_ONLY\n#endif\n\n#ifdef HAVE_IPP_ICV_ONLY\n#define HAVE_ICV 1\n#else\n#define HAVE_ICV 0\n#endif\n\n#if defined HAVE_IPP\n#if IPP_VERSION_X100 >= 900\n#define IPP_INITIALIZER(FEAT)                           \\\n{                                                       \\\n    if(FEAT)                                            \\\n        ippSetCpuFeatures(FEAT);                        \\\n    else                                                \\\n        ippInit();                                      \\\n}\n#elif IPP_VERSION_X100 >= 800\n#define IPP_INITIALIZER(FEAT)                           \\\n{                                                       \\\n    ippInit();                                          \\\n}\n#else\n#define IPP_INITIALIZER(FEAT)                           \\\n{                                                       \\\n    ippStaticInit();                                    \\\n}\n#endif\n\n#ifdef CVAPI_EXPORTS\n#define IPP_INITIALIZER_AUTO                            \\\nstruct __IppInitializer__                               \\\n{                                                       \\\n    __IppInitializer__()                                \\\n    {IPP_INITIALIZER(cv::ipp::getIppFeatures())}        \\\n};                                                      \\\nstatic struct __IppInitializer__ __ipp_initializer__;\n#else\n#define IPP_INITIALIZER_AUTO\n#endif\n#else\n#define IPP_INITIALIZER\n#define IPP_INITIALIZER_AUTO\n#endif\n\n#define CV_IPP_CHECK_COND (cv::ipp::useIPP())\n#define CV_IPP_CHECK() if(CV_IPP_CHECK_COND)\n\n#ifdef HAVE_IPP\n\n#ifdef CV_IPP_RUN_VERBOSE\n#define CV_IPP_RUN_(condition, func, ...)                                   \\\n    {                                                                       \\\n        if (cv::ipp::useIPP() && (condition) && func)                       \\\n        {                                                                   \\\n            printf(\"%s: IPP implementation is running\\n\", CV_Func);         \\\n            fflush(stdout);                                                 \\\n            CV_IMPL_ADD(CV_IMPL_IPP);                                       \\\n            return __VA_ARGS__;                                             \\\n        }                                                                   \\\n        else                                                                \\\n        {                                                                   \\\n            printf(\"%s: Plain implementation is running\\n\", CV_Func);       \\\n            fflush(stdout);                                                 \\\n        }                                                                   \\\n    }\n#elif defined CV_IPP_RUN_ASSERT\n#define CV_IPP_RUN_(condition, func, ...)                                   \\\n    {                                                                       \\\n        if (cv::ipp::useIPP() && (condition))                               \\\n        {                                                                   \\\n            if(func)                                                        \\\n            {                                                               \\\n                CV_IMPL_ADD(CV_IMPL_IPP);                                   \\\n            }                                                               \\\n            else                                                            \\\n            {                                                               \\\n                setIppErrorStatus();                                        \\\n                CV_Error(cv::Error::StsAssert, #func);                      \\\n            }                                                               \\\n            return __VA_ARGS__;                                             \\\n        }                                                                   \\\n    }\n#else\n#define CV_IPP_RUN_(condition, func, ...)                                   \\\n    if (cv::ipp::useIPP() && (condition) && func)                           \\\n    {                                                                       \\\n        CV_IMPL_ADD(CV_IMPL_IPP);                                           \\\n        return __VA_ARGS__;                                                 \\\n    }\n#endif\n\n#else\n#define CV_IPP_RUN_(condition, func, ...)\n#endif\n\n#define CV_IPP_RUN(condition, func, ...) CV_IPP_RUN_(condition, func, __VA_ARGS__)\n\n\n#ifndef IPPI_CALL\n#  define IPPI_CALL(func) CV_Assert((func) >= 0)\n#endif\n\n/* IPP-compatible return codes */\ntypedef enum CvStatus\n{\n    CV_BADMEMBLOCK_ERR          = -113,\n    CV_INPLACE_NOT_SUPPORTED_ERR= -112,\n    CV_UNMATCHED_ROI_ERR        = -111,\n    CV_NOTFOUND_ERR             = -110,\n    CV_BADCONVERGENCE_ERR       = -109,\n\n    CV_BADDEPTH_ERR             = -107,\n    CV_BADROI_ERR               = -106,\n    CV_BADHEADER_ERR            = -105,\n    CV_UNMATCHED_FORMATS_ERR    = -104,\n    CV_UNSUPPORTED_COI_ERR      = -103,\n    CV_UNSUPPORTED_CHANNELS_ERR = -102,\n    CV_UNSUPPORTED_DEPTH_ERR    = -101,\n    CV_UNSUPPORTED_FORMAT_ERR   = -100,\n\n    CV_BADARG_ERR               = -49,  //ipp comp\n    CV_NOTDEFINED_ERR           = -48,  //ipp comp\n\n    CV_BADCHANNELS_ERR          = -47,  //ipp comp\n    CV_BADRANGE_ERR             = -44,  //ipp comp\n    CV_BADSTEP_ERR              = -29,  //ipp comp\n\n    CV_BADFLAG_ERR              =  -12,\n    CV_DIV_BY_ZERO_ERR          =  -11, //ipp comp\n    CV_BADCOEF_ERR              =  -10,\n\n    CV_BADFACTOR_ERR            =  -7,\n    CV_BADPOINT_ERR             =  -6,\n    CV_BADSCALE_ERR             =  -4,\n    CV_OUTOFMEM_ERR             =  -3,\n    CV_NULLPTR_ERR              =  -2,\n    CV_BADSIZE_ERR              =  -1,\n    CV_NO_ERR                   =   0,\n    CV_OK                       =   CV_NO_ERR\n}\nCvStatus;\n\n#ifdef HAVE_TEGRA_OPTIMIZATION\nnamespace tegra {\n\nCV_EXPORTS bool useTegra();\nCV_EXPORTS void setUseTegra(bool flag);\n\n}\n#endif\n\n//! @endcond\n\n#endif // __OPENCV_CORE_PRIVATE_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/ptr.inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2013, NVIDIA Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the copyright holders or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_PTR_INL_HPP__\n#define __OPENCV_CORE_PTR_INL_HPP__\n\n#include <algorithm>\n\n//! @cond IGNORED\n\nnamespace cv {\n\ntemplate<typename Y>\nvoid DefaultDeleter<Y>::operator () (Y* p) const\n{\n    delete p;\n}\n\nnamespace detail\n{\n\nstruct PtrOwner\n{\n    PtrOwner() : refCount(1)\n    {}\n\n    void incRef()\n    {\n        CV_XADD(&refCount, 1);\n    }\n\n    void decRef()\n    {\n        if (CV_XADD(&refCount, -1) == 1) deleteSelf();\n    }\n\nprotected:\n    /* This doesn't really need to be virtual, since PtrOwner is never deleted\n       directly, but it doesn't hurt and it helps avoid warnings. */\n    virtual ~PtrOwner()\n    {}\n\n    virtual void deleteSelf() = 0;\n\nprivate:\n    unsigned int refCount;\n\n    // noncopyable\n    PtrOwner(const PtrOwner&);\n    PtrOwner& operator = (const PtrOwner&);\n};\n\ntemplate<typename Y, typename D>\nstruct PtrOwnerImpl : PtrOwner\n{\n    PtrOwnerImpl(Y* p, D d) : owned(p), deleter(d)\n    {}\n\n    void deleteSelf()\n    {\n        deleter(owned);\n        delete this;\n    }\n\nprivate:\n    Y* owned;\n    D deleter;\n};\n\n\n}\n\ntemplate<typename T>\nPtr<T>::Ptr() : owner(NULL), stored(NULL)\n{}\n\ntemplate<typename T>\ntemplate<typename Y>\nPtr<T>::Ptr(Y* p)\n  : owner(p\n      ? new detail::PtrOwnerImpl<Y, DefaultDeleter<Y> >(p, DefaultDeleter<Y>())\n      : NULL),\n    stored(p)\n{}\n\ntemplate<typename T>\ntemplate<typename Y, typename D>\nPtr<T>::Ptr(Y* p, D d)\n  : owner(p\n      ? new detail::PtrOwnerImpl<Y, D>(p, d)\n      : NULL),\n    stored(p)\n{}\n\ntemplate<typename T>\nPtr<T>::Ptr(const Ptr& o) : owner(o.owner), stored(o.stored)\n{\n    if (owner) owner->incRef();\n}\n\ntemplate<typename T>\ntemplate<typename Y>\nPtr<T>::Ptr(const Ptr<Y>& o) : owner(o.owner), stored(o.stored)\n{\n    if (owner) owner->incRef();\n}\n\ntemplate<typename T>\ntemplate<typename Y>\nPtr<T>::Ptr(const Ptr<Y>& o, T* p) : owner(o.owner), stored(p)\n{\n    if (owner) owner->incRef();\n}\n\ntemplate<typename T>\nPtr<T>::~Ptr()\n{\n    release();\n}\n\ntemplate<typename T>\nPtr<T>& Ptr<T>::operator = (const Ptr<T>& o)\n{\n    Ptr(o).swap(*this);\n    return *this;\n}\n\ntemplate<typename T>\ntemplate<typename Y>\nPtr<T>& Ptr<T>::operator = (const Ptr<Y>& o)\n{\n    Ptr(o).swap(*this);\n    return *this;\n}\n\ntemplate<typename T>\nvoid Ptr<T>::release()\n{\n    if (owner) owner->decRef();\n    owner = NULL;\n    stored = NULL;\n}\n\ntemplate<typename T>\ntemplate<typename Y>\nvoid Ptr<T>::reset(Y* p)\n{\n    Ptr(p).swap(*this);\n}\n\ntemplate<typename T>\ntemplate<typename Y, typename D>\nvoid Ptr<T>::reset(Y* p, D d)\n{\n    Ptr(p, d).swap(*this);\n}\n\ntemplate<typename T>\nvoid Ptr<T>::swap(Ptr<T>& o)\n{\n    std::swap(owner, o.owner);\n    std::swap(stored, o.stored);\n}\n\ntemplate<typename T>\nT* Ptr<T>::get() const\n{\n    return stored;\n}\n\ntemplate<typename T>\ntypename detail::RefOrVoid<T>::type Ptr<T>::operator * () const\n{\n    return *stored;\n}\n\ntemplate<typename T>\nT* Ptr<T>::operator -> () const\n{\n    return stored;\n}\n\ntemplate<typename T>\nPtr<T>::operator T* () const\n{\n    return stored;\n}\n\n\ntemplate<typename T>\nbool Ptr<T>::empty() const\n{\n    return !stored;\n}\n\ntemplate<typename T>\ntemplate<typename Y>\nPtr<Y> Ptr<T>::staticCast() const\n{\n    return Ptr<Y>(*this, static_cast<Y*>(stored));\n}\n\ntemplate<typename T>\ntemplate<typename Y>\nPtr<Y> Ptr<T>::constCast() const\n{\n    return Ptr<Y>(*this, const_cast<Y*>(stored));\n}\n\ntemplate<typename T>\ntemplate<typename Y>\nPtr<Y> Ptr<T>::dynamicCast() const\n{\n    return Ptr<Y>(*this, dynamic_cast<Y*>(stored));\n}\n\n#ifdef CV_CXX_MOVE_SEMANTICS\n\ntemplate<typename T>\nPtr<T>::Ptr(Ptr&& o) : owner(o.owner), stored(o.stored)\n{\n    o.owner = NULL;\n    o.stored = NULL;\n}\n\ntemplate<typename T>\nPtr<T>& Ptr<T>::operator = (Ptr<T>&& o)\n{\n    release();\n    owner = o.owner;\n    stored = o.stored;\n    o.owner = NULL;\n    o.stored = NULL;\n    return *this;\n}\n\n#endif\n\n\ntemplate<typename T>\nvoid swap(Ptr<T>& ptr1, Ptr<T>& ptr2){\n    ptr1.swap(ptr2);\n}\n\ntemplate<typename T>\nbool operator == (const Ptr<T>& ptr1, const Ptr<T>& ptr2)\n{\n    return ptr1.get() == ptr2.get();\n}\n\ntemplate<typename T>\nbool operator != (const Ptr<T>& ptr1, const Ptr<T>& ptr2)\n{\n    return ptr1.get() != ptr2.get();\n}\n\ntemplate<typename T>\nPtr<T> makePtr()\n{\n    return Ptr<T>(new T());\n}\n\ntemplate<typename T, typename A1>\nPtr<T> makePtr(const A1& a1)\n{\n    return Ptr<T>(new T(a1));\n}\n\ntemplate<typename T, typename A1, typename A2>\nPtr<T> makePtr(const A1& a1, const A2& a2)\n{\n    return Ptr<T>(new T(a1, a2));\n}\n\ntemplate<typename T, typename A1, typename A2, typename A3>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3)\n{\n    return Ptr<T>(new T(a1, a2, a3));\n}\n\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4)\n{\n    return Ptr<T>(new T(a1, a2, a3, a4));\n}\n\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5)\n{\n    return Ptr<T>(new T(a1, a2, a3, a4, a5));\n}\n\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6)\n{\n    return Ptr<T>(new T(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7)\n{\n    return Ptr<T>(new T(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8)\n{\n    return Ptr<T>(new T(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9)\n{\n    return Ptr<T>(new T(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\ntemplate<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>\nPtr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, const A10& a10)\n{\n    return Ptr<T>(new T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10));\n}\n\n} // namespace cv\n\n//! @endcond\n\n#endif // __OPENCV_CORE_PTR_INL_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/saturate.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2014, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_SATURATE_HPP__\n#define __OPENCV_CORE_SATURATE_HPP__\n\n#include \"opencv2/core/cvdef.h\"\n#include \"opencv2/core/fast_math.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup core_utils\n//! @{\n\n/////////////// saturate_cast (used in image & signal processing) ///////////////////\n\n/** @brief Template function for accurate conversion from one primitive type to another.\n\n The functions saturate_cast resemble the standard C++ cast operations, such as static_cast\\<T\\>()\n and others. They perform an efficient and accurate conversion from one primitive type to another\n (see the introduction chapter). saturate in the name means that when the input value v is out of the\n range of the target type, the result is not formed just by taking low bits of the input, but instead\n the value is clipped. For example:\n @code\n uchar a = saturate_cast<uchar>(-100); // a = 0 (UCHAR_MIN)\n short b = saturate_cast<short>(33333.33333); // b = 32767 (SHRT_MAX)\n @endcode\n Such clipping is done when the target type is unsigned char , signed char , unsigned short or\n signed short . For 32-bit integers, no clipping is done.\n\n When the parameter is a floating-point value and the target type is an integer (8-, 16- or 32-bit),\n the floating-point value is first rounded to the nearest integer and then clipped if needed (when\n the target type is 8- or 16-bit).\n\n This operation is used in the simplest or most complex image processing functions in OpenCV.\n\n @param v Function parameter.\n @sa add, subtract, multiply, divide, Mat::convertTo\n */\ntemplate<typename _Tp> static inline _Tp saturate_cast(uchar v)    { return _Tp(v); }\n/** @overload */\ntemplate<typename _Tp> static inline _Tp saturate_cast(schar v)    { return _Tp(v); }\n/** @overload */\ntemplate<typename _Tp> static inline _Tp saturate_cast(ushort v)   { return _Tp(v); }\n/** @overload */\ntemplate<typename _Tp> static inline _Tp saturate_cast(short v)    { return _Tp(v); }\n/** @overload */\ntemplate<typename _Tp> static inline _Tp saturate_cast(unsigned v) { return _Tp(v); }\n/** @overload */\ntemplate<typename _Tp> static inline _Tp saturate_cast(int v)      { return _Tp(v); }\n/** @overload */\ntemplate<typename _Tp> static inline _Tp saturate_cast(float v)    { return _Tp(v); }\n/** @overload */\ntemplate<typename _Tp> static inline _Tp saturate_cast(double v)   { return _Tp(v); }\n/** @overload */\ntemplate<typename _Tp> static inline _Tp saturate_cast(int64 v)    { return _Tp(v); }\n/** @overload */\ntemplate<typename _Tp> static inline _Tp saturate_cast(uint64 v)   { return _Tp(v); }\n\ntemplate<> inline uchar saturate_cast<uchar>(schar v)        { return (uchar)std::max((int)v, 0); }\ntemplate<> inline uchar saturate_cast<uchar>(ushort v)       { return (uchar)std::min((unsigned)v, (unsigned)UCHAR_MAX); }\ntemplate<> inline uchar saturate_cast<uchar>(int v)          { return (uchar)((unsigned)v <= UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0); }\ntemplate<> inline uchar saturate_cast<uchar>(short v)        { return saturate_cast<uchar>((int)v); }\ntemplate<> inline uchar saturate_cast<uchar>(unsigned v)     { return (uchar)std::min(v, (unsigned)UCHAR_MAX); }\ntemplate<> inline uchar saturate_cast<uchar>(float v)        { int iv = cvRound(v); return saturate_cast<uchar>(iv); }\ntemplate<> inline uchar saturate_cast<uchar>(double v)       { int iv = cvRound(v); return saturate_cast<uchar>(iv); }\ntemplate<> inline uchar saturate_cast<uchar>(int64 v)        { return (uchar)((uint64)v <= (uint64)UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0); }\ntemplate<> inline uchar saturate_cast<uchar>(uint64 v)       { return (uchar)std::min(v, (uint64)UCHAR_MAX); }\n\ntemplate<> inline schar saturate_cast<schar>(uchar v)        { return (schar)std::min((int)v, SCHAR_MAX); }\ntemplate<> inline schar saturate_cast<schar>(ushort v)       { return (schar)std::min((unsigned)v, (unsigned)SCHAR_MAX); }\ntemplate<> inline schar saturate_cast<schar>(int v)          { return (schar)((unsigned)(v-SCHAR_MIN) <= (unsigned)UCHAR_MAX ? v : v > 0 ? SCHAR_MAX : SCHAR_MIN); }\ntemplate<> inline schar saturate_cast<schar>(short v)        { return saturate_cast<schar>((int)v); }\ntemplate<> inline schar saturate_cast<schar>(unsigned v)     { return (schar)std::min(v, (unsigned)SCHAR_MAX); }\ntemplate<> inline schar saturate_cast<schar>(float v)        { int iv = cvRound(v); return saturate_cast<schar>(iv); }\ntemplate<> inline schar saturate_cast<schar>(double v)       { int iv = cvRound(v); return saturate_cast<schar>(iv); }\ntemplate<> inline schar saturate_cast<schar>(int64 v)        { return (schar)((uint64)((int64)v-SCHAR_MIN) <= (uint64)UCHAR_MAX ? v : v > 0 ? SCHAR_MAX : SCHAR_MIN); }\ntemplate<> inline schar saturate_cast<schar>(uint64 v)       { return (schar)std::min(v, (uint64)SCHAR_MAX); }\n\ntemplate<> inline ushort saturate_cast<ushort>(schar v)      { return (ushort)std::max((int)v, 0); }\ntemplate<> inline ushort saturate_cast<ushort>(short v)      { return (ushort)std::max((int)v, 0); }\ntemplate<> inline ushort saturate_cast<ushort>(int v)        { return (ushort)((unsigned)v <= (unsigned)USHRT_MAX ? v : v > 0 ? USHRT_MAX : 0); }\ntemplate<> inline ushort saturate_cast<ushort>(unsigned v)   { return (ushort)std::min(v, (unsigned)USHRT_MAX); }\ntemplate<> inline ushort saturate_cast<ushort>(float v)      { int iv = cvRound(v); return saturate_cast<ushort>(iv); }\ntemplate<> inline ushort saturate_cast<ushort>(double v)     { int iv = cvRound(v); return saturate_cast<ushort>(iv); }\ntemplate<> inline ushort saturate_cast<ushort>(int64 v)      { return (ushort)((uint64)v <= (uint64)USHRT_MAX ? v : v > 0 ? USHRT_MAX : 0); }\ntemplate<> inline ushort saturate_cast<ushort>(uint64 v)     { return (ushort)std::min(v, (uint64)USHRT_MAX); }\n\ntemplate<> inline short saturate_cast<short>(ushort v)       { return (short)std::min((int)v, SHRT_MAX); }\ntemplate<> inline short saturate_cast<short>(int v)          { return (short)((unsigned)(v - SHRT_MIN) <= (unsigned)USHRT_MAX ? v : v > 0 ? SHRT_MAX : SHRT_MIN); }\ntemplate<> inline short saturate_cast<short>(unsigned v)     { return (short)std::min(v, (unsigned)SHRT_MAX); }\ntemplate<> inline short saturate_cast<short>(float v)        { int iv = cvRound(v); return saturate_cast<short>(iv); }\ntemplate<> inline short saturate_cast<short>(double v)       { int iv = cvRound(v); return saturate_cast<short>(iv); }\ntemplate<> inline short saturate_cast<short>(int64 v)        { return (short)((uint64)((int64)v - SHRT_MIN) <= (uint64)USHRT_MAX ? v : v > 0 ? SHRT_MAX : SHRT_MIN); }\ntemplate<> inline short saturate_cast<short>(uint64 v)       { return (short)std::min(v, (uint64)SHRT_MAX); }\n\ntemplate<> inline int saturate_cast<int>(float v)            { return cvRound(v); }\ntemplate<> inline int saturate_cast<int>(double v)           { return cvRound(v); }\n\n// we intentionally do not clip negative numbers, to make -1 become 0xffffffff etc.\ntemplate<> inline unsigned saturate_cast<unsigned>(float v)  { return cvRound(v); }\ntemplate<> inline unsigned saturate_cast<unsigned>(double v) { return cvRound(v); }\n\n//! @}\n\n} // cv\n\n#endif // __OPENCV_CORE_SATURATE_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/sse_utils.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_SSE_UTILS_HPP__\n#define __OPENCV_CORE_SSE_UTILS_HPP__\n\n#ifndef __cplusplus\n#  error sse_utils.hpp header must be compiled as C++\n#endif\n\n#include \"opencv2/core/cvdef.h\"\n\n//! @addtogroup core_utils_sse\n//! @{\n\n#if CV_SSE2\n\ninline void _mm_deinterleave_epi8(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0, __m128i & v_g1)\n{\n    __m128i layer1_chunk0 = _mm_unpacklo_epi8(v_r0, v_g0);\n    __m128i layer1_chunk1 = _mm_unpackhi_epi8(v_r0, v_g0);\n    __m128i layer1_chunk2 = _mm_unpacklo_epi8(v_r1, v_g1);\n    __m128i layer1_chunk3 = _mm_unpackhi_epi8(v_r1, v_g1);\n\n    __m128i layer2_chunk0 = _mm_unpacklo_epi8(layer1_chunk0, layer1_chunk2);\n    __m128i layer2_chunk1 = _mm_unpackhi_epi8(layer1_chunk0, layer1_chunk2);\n    __m128i layer2_chunk2 = _mm_unpacklo_epi8(layer1_chunk1, layer1_chunk3);\n    __m128i layer2_chunk3 = _mm_unpackhi_epi8(layer1_chunk1, layer1_chunk3);\n\n    __m128i layer3_chunk0 = _mm_unpacklo_epi8(layer2_chunk0, layer2_chunk2);\n    __m128i layer3_chunk1 = _mm_unpackhi_epi8(layer2_chunk0, layer2_chunk2);\n    __m128i layer3_chunk2 = _mm_unpacklo_epi8(layer2_chunk1, layer2_chunk3);\n    __m128i layer3_chunk3 = _mm_unpackhi_epi8(layer2_chunk1, layer2_chunk3);\n\n    __m128i layer4_chunk0 = _mm_unpacklo_epi8(layer3_chunk0, layer3_chunk2);\n    __m128i layer4_chunk1 = _mm_unpackhi_epi8(layer3_chunk0, layer3_chunk2);\n    __m128i layer4_chunk2 = _mm_unpacklo_epi8(layer3_chunk1, layer3_chunk3);\n    __m128i layer4_chunk3 = _mm_unpackhi_epi8(layer3_chunk1, layer3_chunk3);\n\n    v_r0 = _mm_unpacklo_epi8(layer4_chunk0, layer4_chunk2);\n    v_r1 = _mm_unpackhi_epi8(layer4_chunk0, layer4_chunk2);\n    v_g0 = _mm_unpacklo_epi8(layer4_chunk1, layer4_chunk3);\n    v_g1 = _mm_unpackhi_epi8(layer4_chunk1, layer4_chunk3);\n}\n\ninline void _mm_deinterleave_epi8(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0,\n                                  __m128i & v_g1, __m128i & v_b0, __m128i & v_b1)\n{\n    __m128i layer1_chunk0 = _mm_unpacklo_epi8(v_r0, v_g1);\n    __m128i layer1_chunk1 = _mm_unpackhi_epi8(v_r0, v_g1);\n    __m128i layer1_chunk2 = _mm_unpacklo_epi8(v_r1, v_b0);\n    __m128i layer1_chunk3 = _mm_unpackhi_epi8(v_r1, v_b0);\n    __m128i layer1_chunk4 = _mm_unpacklo_epi8(v_g0, v_b1);\n    __m128i layer1_chunk5 = _mm_unpackhi_epi8(v_g0, v_b1);\n\n    __m128i layer2_chunk0 = _mm_unpacklo_epi8(layer1_chunk0, layer1_chunk3);\n    __m128i layer2_chunk1 = _mm_unpackhi_epi8(layer1_chunk0, layer1_chunk3);\n    __m128i layer2_chunk2 = _mm_unpacklo_epi8(layer1_chunk1, layer1_chunk4);\n    __m128i layer2_chunk3 = _mm_unpackhi_epi8(layer1_chunk1, layer1_chunk4);\n    __m128i layer2_chunk4 = _mm_unpacklo_epi8(layer1_chunk2, layer1_chunk5);\n    __m128i layer2_chunk5 = _mm_unpackhi_epi8(layer1_chunk2, layer1_chunk5);\n\n    __m128i layer3_chunk0 = _mm_unpacklo_epi8(layer2_chunk0, layer2_chunk3);\n    __m128i layer3_chunk1 = _mm_unpackhi_epi8(layer2_chunk0, layer2_chunk3);\n    __m128i layer3_chunk2 = _mm_unpacklo_epi8(layer2_chunk1, layer2_chunk4);\n    __m128i layer3_chunk3 = _mm_unpackhi_epi8(layer2_chunk1, layer2_chunk4);\n    __m128i layer3_chunk4 = _mm_unpacklo_epi8(layer2_chunk2, layer2_chunk5);\n    __m128i layer3_chunk5 = _mm_unpackhi_epi8(layer2_chunk2, layer2_chunk5);\n\n    __m128i layer4_chunk0 = _mm_unpacklo_epi8(layer3_chunk0, layer3_chunk3);\n    __m128i layer4_chunk1 = _mm_unpackhi_epi8(layer3_chunk0, layer3_chunk3);\n    __m128i layer4_chunk2 = _mm_unpacklo_epi8(layer3_chunk1, layer3_chunk4);\n    __m128i layer4_chunk3 = _mm_unpackhi_epi8(layer3_chunk1, layer3_chunk4);\n    __m128i layer4_chunk4 = _mm_unpacklo_epi8(layer3_chunk2, layer3_chunk5);\n    __m128i layer4_chunk5 = _mm_unpackhi_epi8(layer3_chunk2, layer3_chunk5);\n\n    v_r0 = _mm_unpacklo_epi8(layer4_chunk0, layer4_chunk3);\n    v_r1 = _mm_unpackhi_epi8(layer4_chunk0, layer4_chunk3);\n    v_g0 = _mm_unpacklo_epi8(layer4_chunk1, layer4_chunk4);\n    v_g1 = _mm_unpackhi_epi8(layer4_chunk1, layer4_chunk4);\n    v_b0 = _mm_unpacklo_epi8(layer4_chunk2, layer4_chunk5);\n    v_b1 = _mm_unpackhi_epi8(layer4_chunk2, layer4_chunk5);\n}\n\ninline void _mm_deinterleave_epi8(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0, __m128i & v_g1,\n                                  __m128i & v_b0, __m128i & v_b1, __m128i & v_a0, __m128i & v_a1)\n{\n    __m128i layer1_chunk0 = _mm_unpacklo_epi8(v_r0, v_b0);\n    __m128i layer1_chunk1 = _mm_unpackhi_epi8(v_r0, v_b0);\n    __m128i layer1_chunk2 = _mm_unpacklo_epi8(v_r1, v_b1);\n    __m128i layer1_chunk3 = _mm_unpackhi_epi8(v_r1, v_b1);\n    __m128i layer1_chunk4 = _mm_unpacklo_epi8(v_g0, v_a0);\n    __m128i layer1_chunk5 = _mm_unpackhi_epi8(v_g0, v_a0);\n    __m128i layer1_chunk6 = _mm_unpacklo_epi8(v_g1, v_a1);\n    __m128i layer1_chunk7 = _mm_unpackhi_epi8(v_g1, v_a1);\n\n    __m128i layer2_chunk0 = _mm_unpacklo_epi8(layer1_chunk0, layer1_chunk4);\n    __m128i layer2_chunk1 = _mm_unpackhi_epi8(layer1_chunk0, layer1_chunk4);\n    __m128i layer2_chunk2 = _mm_unpacklo_epi8(layer1_chunk1, layer1_chunk5);\n    __m128i layer2_chunk3 = _mm_unpackhi_epi8(layer1_chunk1, layer1_chunk5);\n    __m128i layer2_chunk4 = _mm_unpacklo_epi8(layer1_chunk2, layer1_chunk6);\n    __m128i layer2_chunk5 = _mm_unpackhi_epi8(layer1_chunk2, layer1_chunk6);\n    __m128i layer2_chunk6 = _mm_unpacklo_epi8(layer1_chunk3, layer1_chunk7);\n    __m128i layer2_chunk7 = _mm_unpackhi_epi8(layer1_chunk3, layer1_chunk7);\n\n    __m128i layer3_chunk0 = _mm_unpacklo_epi8(layer2_chunk0, layer2_chunk4);\n    __m128i layer3_chunk1 = _mm_unpackhi_epi8(layer2_chunk0, layer2_chunk4);\n    __m128i layer3_chunk2 = _mm_unpacklo_epi8(layer2_chunk1, layer2_chunk5);\n    __m128i layer3_chunk3 = _mm_unpackhi_epi8(layer2_chunk1, layer2_chunk5);\n    __m128i layer3_chunk4 = _mm_unpacklo_epi8(layer2_chunk2, layer2_chunk6);\n    __m128i layer3_chunk5 = _mm_unpackhi_epi8(layer2_chunk2, layer2_chunk6);\n    __m128i layer3_chunk6 = _mm_unpacklo_epi8(layer2_chunk3, layer2_chunk7);\n    __m128i layer3_chunk7 = _mm_unpackhi_epi8(layer2_chunk3, layer2_chunk7);\n\n    __m128i layer4_chunk0 = _mm_unpacklo_epi8(layer3_chunk0, layer3_chunk4);\n    __m128i layer4_chunk1 = _mm_unpackhi_epi8(layer3_chunk0, layer3_chunk4);\n    __m128i layer4_chunk2 = _mm_unpacklo_epi8(layer3_chunk1, layer3_chunk5);\n    __m128i layer4_chunk3 = _mm_unpackhi_epi8(layer3_chunk1, layer3_chunk5);\n    __m128i layer4_chunk4 = _mm_unpacklo_epi8(layer3_chunk2, layer3_chunk6);\n    __m128i layer4_chunk5 = _mm_unpackhi_epi8(layer3_chunk2, layer3_chunk6);\n    __m128i layer4_chunk6 = _mm_unpacklo_epi8(layer3_chunk3, layer3_chunk7);\n    __m128i layer4_chunk7 = _mm_unpackhi_epi8(layer3_chunk3, layer3_chunk7);\n\n    v_r0 = _mm_unpacklo_epi8(layer4_chunk0, layer4_chunk4);\n    v_r1 = _mm_unpackhi_epi8(layer4_chunk0, layer4_chunk4);\n    v_g0 = _mm_unpacklo_epi8(layer4_chunk1, layer4_chunk5);\n    v_g1 = _mm_unpackhi_epi8(layer4_chunk1, layer4_chunk5);\n    v_b0 = _mm_unpacklo_epi8(layer4_chunk2, layer4_chunk6);\n    v_b1 = _mm_unpackhi_epi8(layer4_chunk2, layer4_chunk6);\n    v_a0 = _mm_unpacklo_epi8(layer4_chunk3, layer4_chunk7);\n    v_a1 = _mm_unpackhi_epi8(layer4_chunk3, layer4_chunk7);\n}\n\ninline void _mm_interleave_epi8(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0, __m128i & v_g1)\n{\n    __m128i v_mask = _mm_set1_epi16(0x00ff);\n\n    __m128i layer4_chunk0 = _mm_packus_epi16(_mm_and_si128(v_r0, v_mask), _mm_and_si128(v_r1, v_mask));\n    __m128i layer4_chunk2 = _mm_packus_epi16(_mm_srli_epi16(v_r0, 8), _mm_srli_epi16(v_r1, 8));\n    __m128i layer4_chunk1 = _mm_packus_epi16(_mm_and_si128(v_g0, v_mask), _mm_and_si128(v_g1, v_mask));\n    __m128i layer4_chunk3 = _mm_packus_epi16(_mm_srli_epi16(v_g0, 8), _mm_srli_epi16(v_g1, 8));\n\n    __m128i layer3_chunk0 = _mm_packus_epi16(_mm_and_si128(layer4_chunk0, v_mask), _mm_and_si128(layer4_chunk1, v_mask));\n    __m128i layer3_chunk2 = _mm_packus_epi16(_mm_srli_epi16(layer4_chunk0, 8), _mm_srli_epi16(layer4_chunk1, 8));\n    __m128i layer3_chunk1 = _mm_packus_epi16(_mm_and_si128(layer4_chunk2, v_mask), _mm_and_si128(layer4_chunk3, v_mask));\n    __m128i layer3_chunk3 = _mm_packus_epi16(_mm_srli_epi16(layer4_chunk2, 8), _mm_srli_epi16(layer4_chunk3, 8));\n\n    __m128i layer2_chunk0 = _mm_packus_epi16(_mm_and_si128(layer3_chunk0, v_mask), _mm_and_si128(layer3_chunk1, v_mask));\n    __m128i layer2_chunk2 = _mm_packus_epi16(_mm_srli_epi16(layer3_chunk0, 8), _mm_srli_epi16(layer3_chunk1, 8));\n    __m128i layer2_chunk1 = _mm_packus_epi16(_mm_and_si128(layer3_chunk2, v_mask), _mm_and_si128(layer3_chunk3, v_mask));\n    __m128i layer2_chunk3 = _mm_packus_epi16(_mm_srli_epi16(layer3_chunk2, 8), _mm_srli_epi16(layer3_chunk3, 8));\n\n    __m128i layer1_chunk0 = _mm_packus_epi16(_mm_and_si128(layer2_chunk0, v_mask), _mm_and_si128(layer2_chunk1, v_mask));\n    __m128i layer1_chunk2 = _mm_packus_epi16(_mm_srli_epi16(layer2_chunk0, 8), _mm_srli_epi16(layer2_chunk1, 8));\n    __m128i layer1_chunk1 = _mm_packus_epi16(_mm_and_si128(layer2_chunk2, v_mask), _mm_and_si128(layer2_chunk3, v_mask));\n    __m128i layer1_chunk3 = _mm_packus_epi16(_mm_srli_epi16(layer2_chunk2, 8), _mm_srli_epi16(layer2_chunk3, 8));\n\n    v_r0 = _mm_packus_epi16(_mm_and_si128(layer1_chunk0, v_mask), _mm_and_si128(layer1_chunk1, v_mask));\n    v_g0 = _mm_packus_epi16(_mm_srli_epi16(layer1_chunk0, 8), _mm_srli_epi16(layer1_chunk1, 8));\n    v_r1 = _mm_packus_epi16(_mm_and_si128(layer1_chunk2, v_mask), _mm_and_si128(layer1_chunk3, v_mask));\n    v_g1 = _mm_packus_epi16(_mm_srli_epi16(layer1_chunk2, 8), _mm_srli_epi16(layer1_chunk3, 8));\n}\n\ninline void _mm_interleave_epi8(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0,\n                                __m128i & v_g1, __m128i & v_b0, __m128i & v_b1)\n{\n    __m128i v_mask = _mm_set1_epi16(0x00ff);\n\n    __m128i layer4_chunk0 = _mm_packus_epi16(_mm_and_si128(v_r0, v_mask), _mm_and_si128(v_r1, v_mask));\n    __m128i layer4_chunk3 = _mm_packus_epi16(_mm_srli_epi16(v_r0, 8), _mm_srli_epi16(v_r1, 8));\n    __m128i layer4_chunk1 = _mm_packus_epi16(_mm_and_si128(v_g0, v_mask), _mm_and_si128(v_g1, v_mask));\n    __m128i layer4_chunk4 = _mm_packus_epi16(_mm_srli_epi16(v_g0, 8), _mm_srli_epi16(v_g1, 8));\n    __m128i layer4_chunk2 = _mm_packus_epi16(_mm_and_si128(v_b0, v_mask), _mm_and_si128(v_b1, v_mask));\n    __m128i layer4_chunk5 = _mm_packus_epi16(_mm_srli_epi16(v_b0, 8), _mm_srli_epi16(v_b1, 8));\n\n    __m128i layer3_chunk0 = _mm_packus_epi16(_mm_and_si128(layer4_chunk0, v_mask), _mm_and_si128(layer4_chunk1, v_mask));\n    __m128i layer3_chunk3 = _mm_packus_epi16(_mm_srli_epi16(layer4_chunk0, 8), _mm_srli_epi16(layer4_chunk1, 8));\n    __m128i layer3_chunk1 = _mm_packus_epi16(_mm_and_si128(layer4_chunk2, v_mask), _mm_and_si128(layer4_chunk3, v_mask));\n    __m128i layer3_chunk4 = _mm_packus_epi16(_mm_srli_epi16(layer4_chunk2, 8), _mm_srli_epi16(layer4_chunk3, 8));\n    __m128i layer3_chunk2 = _mm_packus_epi16(_mm_and_si128(layer4_chunk4, v_mask), _mm_and_si128(layer4_chunk5, v_mask));\n    __m128i layer3_chunk5 = _mm_packus_epi16(_mm_srli_epi16(layer4_chunk4, 8), _mm_srli_epi16(layer4_chunk5, 8));\n\n    __m128i layer2_chunk0 = _mm_packus_epi16(_mm_and_si128(layer3_chunk0, v_mask), _mm_and_si128(layer3_chunk1, v_mask));\n    __m128i layer2_chunk3 = _mm_packus_epi16(_mm_srli_epi16(layer3_chunk0, 8), _mm_srli_epi16(layer3_chunk1, 8));\n    __m128i layer2_chunk1 = _mm_packus_epi16(_mm_and_si128(layer3_chunk2, v_mask), _mm_and_si128(layer3_chunk3, v_mask));\n    __m128i layer2_chunk4 = _mm_packus_epi16(_mm_srli_epi16(layer3_chunk2, 8), _mm_srli_epi16(layer3_chunk3, 8));\n    __m128i layer2_chunk2 = _mm_packus_epi16(_mm_and_si128(layer3_chunk4, v_mask), _mm_and_si128(layer3_chunk5, v_mask));\n    __m128i layer2_chunk5 = _mm_packus_epi16(_mm_srli_epi16(layer3_chunk4, 8), _mm_srli_epi16(layer3_chunk5, 8));\n\n    __m128i layer1_chunk0 = _mm_packus_epi16(_mm_and_si128(layer2_chunk0, v_mask), _mm_and_si128(layer2_chunk1, v_mask));\n    __m128i layer1_chunk3 = _mm_packus_epi16(_mm_srli_epi16(layer2_chunk0, 8), _mm_srli_epi16(layer2_chunk1, 8));\n    __m128i layer1_chunk1 = _mm_packus_epi16(_mm_and_si128(layer2_chunk2, v_mask), _mm_and_si128(layer2_chunk3, v_mask));\n    __m128i layer1_chunk4 = _mm_packus_epi16(_mm_srli_epi16(layer2_chunk2, 8), _mm_srli_epi16(layer2_chunk3, 8));\n    __m128i layer1_chunk2 = _mm_packus_epi16(_mm_and_si128(layer2_chunk4, v_mask), _mm_and_si128(layer2_chunk5, v_mask));\n    __m128i layer1_chunk5 = _mm_packus_epi16(_mm_srli_epi16(layer2_chunk4, 8), _mm_srli_epi16(layer2_chunk5, 8));\n\n    v_r0 = _mm_packus_epi16(_mm_and_si128(layer1_chunk0, v_mask), _mm_and_si128(layer1_chunk1, v_mask));\n    v_g1 = _mm_packus_epi16(_mm_srli_epi16(layer1_chunk0, 8), _mm_srli_epi16(layer1_chunk1, 8));\n    v_r1 = _mm_packus_epi16(_mm_and_si128(layer1_chunk2, v_mask), _mm_and_si128(layer1_chunk3, v_mask));\n    v_b0 = _mm_packus_epi16(_mm_srli_epi16(layer1_chunk2, 8), _mm_srli_epi16(layer1_chunk3, 8));\n    v_g0 = _mm_packus_epi16(_mm_and_si128(layer1_chunk4, v_mask), _mm_and_si128(layer1_chunk5, v_mask));\n    v_b1 = _mm_packus_epi16(_mm_srli_epi16(layer1_chunk4, 8), _mm_srli_epi16(layer1_chunk5, 8));\n}\n\ninline void _mm_interleave_epi8(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0, __m128i & v_g1,\n                                __m128i & v_b0, __m128i & v_b1, __m128i & v_a0, __m128i & v_a1)\n{\n    __m128i v_mask = _mm_set1_epi16(0x00ff);\n\n    __m128i layer4_chunk0 = _mm_packus_epi16(_mm_and_si128(v_r0, v_mask), _mm_and_si128(v_r1, v_mask));\n    __m128i layer4_chunk4 = _mm_packus_epi16(_mm_srli_epi16(v_r0, 8), _mm_srli_epi16(v_r1, 8));\n    __m128i layer4_chunk1 = _mm_packus_epi16(_mm_and_si128(v_g0, v_mask), _mm_and_si128(v_g1, v_mask));\n    __m128i layer4_chunk5 = _mm_packus_epi16(_mm_srli_epi16(v_g0, 8), _mm_srli_epi16(v_g1, 8));\n    __m128i layer4_chunk2 = _mm_packus_epi16(_mm_and_si128(v_b0, v_mask), _mm_and_si128(v_b1, v_mask));\n    __m128i layer4_chunk6 = _mm_packus_epi16(_mm_srli_epi16(v_b0, 8), _mm_srli_epi16(v_b1, 8));\n    __m128i layer4_chunk3 = _mm_packus_epi16(_mm_and_si128(v_a0, v_mask), _mm_and_si128(v_a1, v_mask));\n    __m128i layer4_chunk7 = _mm_packus_epi16(_mm_srli_epi16(v_a0, 8), _mm_srli_epi16(v_a1, 8));\n\n    __m128i layer3_chunk0 = _mm_packus_epi16(_mm_and_si128(layer4_chunk0, v_mask), _mm_and_si128(layer4_chunk1, v_mask));\n    __m128i layer3_chunk4 = _mm_packus_epi16(_mm_srli_epi16(layer4_chunk0, 8), _mm_srli_epi16(layer4_chunk1, 8));\n    __m128i layer3_chunk1 = _mm_packus_epi16(_mm_and_si128(layer4_chunk2, v_mask), _mm_and_si128(layer4_chunk3, v_mask));\n    __m128i layer3_chunk5 = _mm_packus_epi16(_mm_srli_epi16(layer4_chunk2, 8), _mm_srli_epi16(layer4_chunk3, 8));\n    __m128i layer3_chunk2 = _mm_packus_epi16(_mm_and_si128(layer4_chunk4, v_mask), _mm_and_si128(layer4_chunk5, v_mask));\n    __m128i layer3_chunk6 = _mm_packus_epi16(_mm_srli_epi16(layer4_chunk4, 8), _mm_srli_epi16(layer4_chunk5, 8));\n    __m128i layer3_chunk3 = _mm_packus_epi16(_mm_and_si128(layer4_chunk6, v_mask), _mm_and_si128(layer4_chunk7, v_mask));\n    __m128i layer3_chunk7 = _mm_packus_epi16(_mm_srli_epi16(layer4_chunk6, 8), _mm_srli_epi16(layer4_chunk7, 8));\n\n    __m128i layer2_chunk0 = _mm_packus_epi16(_mm_and_si128(layer3_chunk0, v_mask), _mm_and_si128(layer3_chunk1, v_mask));\n    __m128i layer2_chunk4 = _mm_packus_epi16(_mm_srli_epi16(layer3_chunk0, 8), _mm_srli_epi16(layer3_chunk1, 8));\n    __m128i layer2_chunk1 = _mm_packus_epi16(_mm_and_si128(layer3_chunk2, v_mask), _mm_and_si128(layer3_chunk3, v_mask));\n    __m128i layer2_chunk5 = _mm_packus_epi16(_mm_srli_epi16(layer3_chunk2, 8), _mm_srli_epi16(layer3_chunk3, 8));\n    __m128i layer2_chunk2 = _mm_packus_epi16(_mm_and_si128(layer3_chunk4, v_mask), _mm_and_si128(layer3_chunk5, v_mask));\n    __m128i layer2_chunk6 = _mm_packus_epi16(_mm_srli_epi16(layer3_chunk4, 8), _mm_srli_epi16(layer3_chunk5, 8));\n    __m128i layer2_chunk3 = _mm_packus_epi16(_mm_and_si128(layer3_chunk6, v_mask), _mm_and_si128(layer3_chunk7, v_mask));\n    __m128i layer2_chunk7 = _mm_packus_epi16(_mm_srli_epi16(layer3_chunk6, 8), _mm_srli_epi16(layer3_chunk7, 8));\n\n    __m128i layer1_chunk0 = _mm_packus_epi16(_mm_and_si128(layer2_chunk0, v_mask), _mm_and_si128(layer2_chunk1, v_mask));\n    __m128i layer1_chunk4 = _mm_packus_epi16(_mm_srli_epi16(layer2_chunk0, 8), _mm_srli_epi16(layer2_chunk1, 8));\n    __m128i layer1_chunk1 = _mm_packus_epi16(_mm_and_si128(layer2_chunk2, v_mask), _mm_and_si128(layer2_chunk3, v_mask));\n    __m128i layer1_chunk5 = _mm_packus_epi16(_mm_srli_epi16(layer2_chunk2, 8), _mm_srli_epi16(layer2_chunk3, 8));\n    __m128i layer1_chunk2 = _mm_packus_epi16(_mm_and_si128(layer2_chunk4, v_mask), _mm_and_si128(layer2_chunk5, v_mask));\n    __m128i layer1_chunk6 = _mm_packus_epi16(_mm_srli_epi16(layer2_chunk4, 8), _mm_srli_epi16(layer2_chunk5, 8));\n    __m128i layer1_chunk3 = _mm_packus_epi16(_mm_and_si128(layer2_chunk6, v_mask), _mm_and_si128(layer2_chunk7, v_mask));\n    __m128i layer1_chunk7 = _mm_packus_epi16(_mm_srli_epi16(layer2_chunk6, 8), _mm_srli_epi16(layer2_chunk7, 8));\n\n    v_r0 = _mm_packus_epi16(_mm_and_si128(layer1_chunk0, v_mask), _mm_and_si128(layer1_chunk1, v_mask));\n    v_b0 = _mm_packus_epi16(_mm_srli_epi16(layer1_chunk0, 8), _mm_srli_epi16(layer1_chunk1, 8));\n    v_r1 = _mm_packus_epi16(_mm_and_si128(layer1_chunk2, v_mask), _mm_and_si128(layer1_chunk3, v_mask));\n    v_b1 = _mm_packus_epi16(_mm_srli_epi16(layer1_chunk2, 8), _mm_srli_epi16(layer1_chunk3, 8));\n    v_g0 = _mm_packus_epi16(_mm_and_si128(layer1_chunk4, v_mask), _mm_and_si128(layer1_chunk5, v_mask));\n    v_a0 = _mm_packus_epi16(_mm_srli_epi16(layer1_chunk4, 8), _mm_srli_epi16(layer1_chunk5, 8));\n    v_g1 = _mm_packus_epi16(_mm_and_si128(layer1_chunk6, v_mask), _mm_and_si128(layer1_chunk7, v_mask));\n    v_a1 = _mm_packus_epi16(_mm_srli_epi16(layer1_chunk6, 8), _mm_srli_epi16(layer1_chunk7, 8));\n}\n\ninline void _mm_deinterleave_epi16(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0, __m128i & v_g1)\n{\n    __m128i layer1_chunk0 = _mm_unpacklo_epi16(v_r0, v_g0);\n    __m128i layer1_chunk1 = _mm_unpackhi_epi16(v_r0, v_g0);\n    __m128i layer1_chunk2 = _mm_unpacklo_epi16(v_r1, v_g1);\n    __m128i layer1_chunk3 = _mm_unpackhi_epi16(v_r1, v_g1);\n\n    __m128i layer2_chunk0 = _mm_unpacklo_epi16(layer1_chunk0, layer1_chunk2);\n    __m128i layer2_chunk1 = _mm_unpackhi_epi16(layer1_chunk0, layer1_chunk2);\n    __m128i layer2_chunk2 = _mm_unpacklo_epi16(layer1_chunk1, layer1_chunk3);\n    __m128i layer2_chunk3 = _mm_unpackhi_epi16(layer1_chunk1, layer1_chunk3);\n\n    __m128i layer3_chunk0 = _mm_unpacklo_epi16(layer2_chunk0, layer2_chunk2);\n    __m128i layer3_chunk1 = _mm_unpackhi_epi16(layer2_chunk0, layer2_chunk2);\n    __m128i layer3_chunk2 = _mm_unpacklo_epi16(layer2_chunk1, layer2_chunk3);\n    __m128i layer3_chunk3 = _mm_unpackhi_epi16(layer2_chunk1, layer2_chunk3);\n\n    v_r0 = _mm_unpacklo_epi16(layer3_chunk0, layer3_chunk2);\n    v_r1 = _mm_unpackhi_epi16(layer3_chunk0, layer3_chunk2);\n    v_g0 = _mm_unpacklo_epi16(layer3_chunk1, layer3_chunk3);\n    v_g1 = _mm_unpackhi_epi16(layer3_chunk1, layer3_chunk3);\n}\n\ninline void _mm_deinterleave_epi16(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0,\n                                   __m128i & v_g1, __m128i & v_b0, __m128i & v_b1)\n{\n    __m128i layer1_chunk0 = _mm_unpacklo_epi16(v_r0, v_g1);\n    __m128i layer1_chunk1 = _mm_unpackhi_epi16(v_r0, v_g1);\n    __m128i layer1_chunk2 = _mm_unpacklo_epi16(v_r1, v_b0);\n    __m128i layer1_chunk3 = _mm_unpackhi_epi16(v_r1, v_b0);\n    __m128i layer1_chunk4 = _mm_unpacklo_epi16(v_g0, v_b1);\n    __m128i layer1_chunk5 = _mm_unpackhi_epi16(v_g0, v_b1);\n\n    __m128i layer2_chunk0 = _mm_unpacklo_epi16(layer1_chunk0, layer1_chunk3);\n    __m128i layer2_chunk1 = _mm_unpackhi_epi16(layer1_chunk0, layer1_chunk3);\n    __m128i layer2_chunk2 = _mm_unpacklo_epi16(layer1_chunk1, layer1_chunk4);\n    __m128i layer2_chunk3 = _mm_unpackhi_epi16(layer1_chunk1, layer1_chunk4);\n    __m128i layer2_chunk4 = _mm_unpacklo_epi16(layer1_chunk2, layer1_chunk5);\n    __m128i layer2_chunk5 = _mm_unpackhi_epi16(layer1_chunk2, layer1_chunk5);\n\n    __m128i layer3_chunk0 = _mm_unpacklo_epi16(layer2_chunk0, layer2_chunk3);\n    __m128i layer3_chunk1 = _mm_unpackhi_epi16(layer2_chunk0, layer2_chunk3);\n    __m128i layer3_chunk2 = _mm_unpacklo_epi16(layer2_chunk1, layer2_chunk4);\n    __m128i layer3_chunk3 = _mm_unpackhi_epi16(layer2_chunk1, layer2_chunk4);\n    __m128i layer3_chunk4 = _mm_unpacklo_epi16(layer2_chunk2, layer2_chunk5);\n    __m128i layer3_chunk5 = _mm_unpackhi_epi16(layer2_chunk2, layer2_chunk5);\n\n    v_r0 = _mm_unpacklo_epi16(layer3_chunk0, layer3_chunk3);\n    v_r1 = _mm_unpackhi_epi16(layer3_chunk0, layer3_chunk3);\n    v_g0 = _mm_unpacklo_epi16(layer3_chunk1, layer3_chunk4);\n    v_g1 = _mm_unpackhi_epi16(layer3_chunk1, layer3_chunk4);\n    v_b0 = _mm_unpacklo_epi16(layer3_chunk2, layer3_chunk5);\n    v_b1 = _mm_unpackhi_epi16(layer3_chunk2, layer3_chunk5);\n}\n\ninline void _mm_deinterleave_epi16(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0, __m128i & v_g1,\n                                   __m128i & v_b0, __m128i & v_b1, __m128i & v_a0, __m128i & v_a1)\n{\n    __m128i layer1_chunk0 = _mm_unpacklo_epi16(v_r0, v_b0);\n    __m128i layer1_chunk1 = _mm_unpackhi_epi16(v_r0, v_b0);\n    __m128i layer1_chunk2 = _mm_unpacklo_epi16(v_r1, v_b1);\n    __m128i layer1_chunk3 = _mm_unpackhi_epi16(v_r1, v_b1);\n    __m128i layer1_chunk4 = _mm_unpacklo_epi16(v_g0, v_a0);\n    __m128i layer1_chunk5 = _mm_unpackhi_epi16(v_g0, v_a0);\n    __m128i layer1_chunk6 = _mm_unpacklo_epi16(v_g1, v_a1);\n    __m128i layer1_chunk7 = _mm_unpackhi_epi16(v_g1, v_a1);\n\n    __m128i layer2_chunk0 = _mm_unpacklo_epi16(layer1_chunk0, layer1_chunk4);\n    __m128i layer2_chunk1 = _mm_unpackhi_epi16(layer1_chunk0, layer1_chunk4);\n    __m128i layer2_chunk2 = _mm_unpacklo_epi16(layer1_chunk1, layer1_chunk5);\n    __m128i layer2_chunk3 = _mm_unpackhi_epi16(layer1_chunk1, layer1_chunk5);\n    __m128i layer2_chunk4 = _mm_unpacklo_epi16(layer1_chunk2, layer1_chunk6);\n    __m128i layer2_chunk5 = _mm_unpackhi_epi16(layer1_chunk2, layer1_chunk6);\n    __m128i layer2_chunk6 = _mm_unpacklo_epi16(layer1_chunk3, layer1_chunk7);\n    __m128i layer2_chunk7 = _mm_unpackhi_epi16(layer1_chunk3, layer1_chunk7);\n\n    __m128i layer3_chunk0 = _mm_unpacklo_epi16(layer2_chunk0, layer2_chunk4);\n    __m128i layer3_chunk1 = _mm_unpackhi_epi16(layer2_chunk0, layer2_chunk4);\n    __m128i layer3_chunk2 = _mm_unpacklo_epi16(layer2_chunk1, layer2_chunk5);\n    __m128i layer3_chunk3 = _mm_unpackhi_epi16(layer2_chunk1, layer2_chunk5);\n    __m128i layer3_chunk4 = _mm_unpacklo_epi16(layer2_chunk2, layer2_chunk6);\n    __m128i layer3_chunk5 = _mm_unpackhi_epi16(layer2_chunk2, layer2_chunk6);\n    __m128i layer3_chunk6 = _mm_unpacklo_epi16(layer2_chunk3, layer2_chunk7);\n    __m128i layer3_chunk7 = _mm_unpackhi_epi16(layer2_chunk3, layer2_chunk7);\n\n    v_r0 = _mm_unpacklo_epi16(layer3_chunk0, layer3_chunk4);\n    v_r1 = _mm_unpackhi_epi16(layer3_chunk0, layer3_chunk4);\n    v_g0 = _mm_unpacklo_epi16(layer3_chunk1, layer3_chunk5);\n    v_g1 = _mm_unpackhi_epi16(layer3_chunk1, layer3_chunk5);\n    v_b0 = _mm_unpacklo_epi16(layer3_chunk2, layer3_chunk6);\n    v_b1 = _mm_unpackhi_epi16(layer3_chunk2, layer3_chunk6);\n    v_a0 = _mm_unpacklo_epi16(layer3_chunk3, layer3_chunk7);\n    v_a1 = _mm_unpackhi_epi16(layer3_chunk3, layer3_chunk7);\n}\n\n#if CV_SSE4_1\n\ninline void _mm_interleave_epi16(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0, __m128i & v_g1)\n{\n    __m128i v_mask = _mm_set1_epi32(0x0000ffff);\n\n    __m128i layer3_chunk0 = _mm_packus_epi32(_mm_and_si128(v_r0, v_mask), _mm_and_si128(v_r1, v_mask));\n    __m128i layer3_chunk2 = _mm_packus_epi32(_mm_srli_epi32(v_r0, 16), _mm_srli_epi32(v_r1, 16));\n    __m128i layer3_chunk1 = _mm_packus_epi32(_mm_and_si128(v_g0, v_mask), _mm_and_si128(v_g1, v_mask));\n    __m128i layer3_chunk3 = _mm_packus_epi32(_mm_srli_epi32(v_g0, 16), _mm_srli_epi32(v_g1, 16));\n\n    __m128i layer2_chunk0 = _mm_packus_epi32(_mm_and_si128(layer3_chunk0, v_mask), _mm_and_si128(layer3_chunk1, v_mask));\n    __m128i layer2_chunk2 = _mm_packus_epi32(_mm_srli_epi32(layer3_chunk0, 16), _mm_srli_epi32(layer3_chunk1, 16));\n    __m128i layer2_chunk1 = _mm_packus_epi32(_mm_and_si128(layer3_chunk2, v_mask), _mm_and_si128(layer3_chunk3, v_mask));\n    __m128i layer2_chunk3 = _mm_packus_epi32(_mm_srli_epi32(layer3_chunk2, 16), _mm_srli_epi32(layer3_chunk3, 16));\n\n    __m128i layer1_chunk0 = _mm_packus_epi32(_mm_and_si128(layer2_chunk0, v_mask), _mm_and_si128(layer2_chunk1, v_mask));\n    __m128i layer1_chunk2 = _mm_packus_epi32(_mm_srli_epi32(layer2_chunk0, 16), _mm_srli_epi32(layer2_chunk1, 16));\n    __m128i layer1_chunk1 = _mm_packus_epi32(_mm_and_si128(layer2_chunk2, v_mask), _mm_and_si128(layer2_chunk3, v_mask));\n    __m128i layer1_chunk3 = _mm_packus_epi32(_mm_srli_epi32(layer2_chunk2, 16), _mm_srli_epi32(layer2_chunk3, 16));\n\n    v_r0 = _mm_packus_epi32(_mm_and_si128(layer1_chunk0, v_mask), _mm_and_si128(layer1_chunk1, v_mask));\n    v_g0 = _mm_packus_epi32(_mm_srli_epi32(layer1_chunk0, 16), _mm_srli_epi32(layer1_chunk1, 16));\n    v_r1 = _mm_packus_epi32(_mm_and_si128(layer1_chunk2, v_mask), _mm_and_si128(layer1_chunk3, v_mask));\n    v_g1 = _mm_packus_epi32(_mm_srli_epi32(layer1_chunk2, 16), _mm_srli_epi32(layer1_chunk3, 16));\n}\n\ninline void _mm_interleave_epi16(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0,\n                                 __m128i & v_g1, __m128i & v_b0, __m128i & v_b1)\n{\n    __m128i v_mask = _mm_set1_epi32(0x0000ffff);\n\n    __m128i layer3_chunk0 = _mm_packus_epi32(_mm_and_si128(v_r0, v_mask), _mm_and_si128(v_r1, v_mask));\n    __m128i layer3_chunk3 = _mm_packus_epi32(_mm_srli_epi32(v_r0, 16), _mm_srli_epi32(v_r1, 16));\n    __m128i layer3_chunk1 = _mm_packus_epi32(_mm_and_si128(v_g0, v_mask), _mm_and_si128(v_g1, v_mask));\n    __m128i layer3_chunk4 = _mm_packus_epi32(_mm_srli_epi32(v_g0, 16), _mm_srli_epi32(v_g1, 16));\n    __m128i layer3_chunk2 = _mm_packus_epi32(_mm_and_si128(v_b0, v_mask), _mm_and_si128(v_b1, v_mask));\n    __m128i layer3_chunk5 = _mm_packus_epi32(_mm_srli_epi32(v_b0, 16), _mm_srli_epi32(v_b1, 16));\n\n    __m128i layer2_chunk0 = _mm_packus_epi32(_mm_and_si128(layer3_chunk0, v_mask), _mm_and_si128(layer3_chunk1, v_mask));\n    __m128i layer2_chunk3 = _mm_packus_epi32(_mm_srli_epi32(layer3_chunk0, 16), _mm_srli_epi32(layer3_chunk1, 16));\n    __m128i layer2_chunk1 = _mm_packus_epi32(_mm_and_si128(layer3_chunk2, v_mask), _mm_and_si128(layer3_chunk3, v_mask));\n    __m128i layer2_chunk4 = _mm_packus_epi32(_mm_srli_epi32(layer3_chunk2, 16), _mm_srli_epi32(layer3_chunk3, 16));\n    __m128i layer2_chunk2 = _mm_packus_epi32(_mm_and_si128(layer3_chunk4, v_mask), _mm_and_si128(layer3_chunk5, v_mask));\n    __m128i layer2_chunk5 = _mm_packus_epi32(_mm_srli_epi32(layer3_chunk4, 16), _mm_srli_epi32(layer3_chunk5, 16));\n\n    __m128i layer1_chunk0 = _mm_packus_epi32(_mm_and_si128(layer2_chunk0, v_mask), _mm_and_si128(layer2_chunk1, v_mask));\n    __m128i layer1_chunk3 = _mm_packus_epi32(_mm_srli_epi32(layer2_chunk0, 16), _mm_srli_epi32(layer2_chunk1, 16));\n    __m128i layer1_chunk1 = _mm_packus_epi32(_mm_and_si128(layer2_chunk2, v_mask), _mm_and_si128(layer2_chunk3, v_mask));\n    __m128i layer1_chunk4 = _mm_packus_epi32(_mm_srli_epi32(layer2_chunk2, 16), _mm_srli_epi32(layer2_chunk3, 16));\n    __m128i layer1_chunk2 = _mm_packus_epi32(_mm_and_si128(layer2_chunk4, v_mask), _mm_and_si128(layer2_chunk5, v_mask));\n    __m128i layer1_chunk5 = _mm_packus_epi32(_mm_srli_epi32(layer2_chunk4, 16), _mm_srli_epi32(layer2_chunk5, 16));\n\n    v_r0 = _mm_packus_epi32(_mm_and_si128(layer1_chunk0, v_mask), _mm_and_si128(layer1_chunk1, v_mask));\n    v_g1 = _mm_packus_epi32(_mm_srli_epi32(layer1_chunk0, 16), _mm_srli_epi32(layer1_chunk1, 16));\n    v_r1 = _mm_packus_epi32(_mm_and_si128(layer1_chunk2, v_mask), _mm_and_si128(layer1_chunk3, v_mask));\n    v_b0 = _mm_packus_epi32(_mm_srli_epi32(layer1_chunk2, 16), _mm_srli_epi32(layer1_chunk3, 16));\n    v_g0 = _mm_packus_epi32(_mm_and_si128(layer1_chunk4, v_mask), _mm_and_si128(layer1_chunk5, v_mask));\n    v_b1 = _mm_packus_epi32(_mm_srli_epi32(layer1_chunk4, 16), _mm_srli_epi32(layer1_chunk5, 16));\n}\n\ninline void _mm_interleave_epi16(__m128i & v_r0, __m128i & v_r1, __m128i & v_g0, __m128i & v_g1,\n                                 __m128i & v_b0, __m128i & v_b1, __m128i & v_a0, __m128i & v_a1)\n{\n    __m128i v_mask = _mm_set1_epi32(0x0000ffff);\n\n    __m128i layer3_chunk0 = _mm_packus_epi32(_mm_and_si128(v_r0, v_mask), _mm_and_si128(v_r1, v_mask));\n    __m128i layer3_chunk4 = _mm_packus_epi32(_mm_srli_epi32(v_r0, 16), _mm_srli_epi32(v_r1, 16));\n    __m128i layer3_chunk1 = _mm_packus_epi32(_mm_and_si128(v_g0, v_mask), _mm_and_si128(v_g1, v_mask));\n    __m128i layer3_chunk5 = _mm_packus_epi32(_mm_srli_epi32(v_g0, 16), _mm_srli_epi32(v_g1, 16));\n    __m128i layer3_chunk2 = _mm_packus_epi32(_mm_and_si128(v_b0, v_mask), _mm_and_si128(v_b1, v_mask));\n    __m128i layer3_chunk6 = _mm_packus_epi32(_mm_srli_epi32(v_b0, 16), _mm_srli_epi32(v_b1, 16));\n    __m128i layer3_chunk3 = _mm_packus_epi32(_mm_and_si128(v_a0, v_mask), _mm_and_si128(v_a1, v_mask));\n    __m128i layer3_chunk7 = _mm_packus_epi32(_mm_srli_epi32(v_a0, 16), _mm_srli_epi32(v_a1, 16));\n\n    __m128i layer2_chunk0 = _mm_packus_epi32(_mm_and_si128(layer3_chunk0, v_mask), _mm_and_si128(layer3_chunk1, v_mask));\n    __m128i layer2_chunk4 = _mm_packus_epi32(_mm_srli_epi32(layer3_chunk0, 16), _mm_srli_epi32(layer3_chunk1, 16));\n    __m128i layer2_chunk1 = _mm_packus_epi32(_mm_and_si128(layer3_chunk2, v_mask), _mm_and_si128(layer3_chunk3, v_mask));\n    __m128i layer2_chunk5 = _mm_packus_epi32(_mm_srli_epi32(layer3_chunk2, 16), _mm_srli_epi32(layer3_chunk3, 16));\n    __m128i layer2_chunk2 = _mm_packus_epi32(_mm_and_si128(layer3_chunk4, v_mask), _mm_and_si128(layer3_chunk5, v_mask));\n    __m128i layer2_chunk6 = _mm_packus_epi32(_mm_srli_epi32(layer3_chunk4, 16), _mm_srli_epi32(layer3_chunk5, 16));\n    __m128i layer2_chunk3 = _mm_packus_epi32(_mm_and_si128(layer3_chunk6, v_mask), _mm_and_si128(layer3_chunk7, v_mask));\n    __m128i layer2_chunk7 = _mm_packus_epi32(_mm_srli_epi32(layer3_chunk6, 16), _mm_srli_epi32(layer3_chunk7, 16));\n\n    __m128i layer1_chunk0 = _mm_packus_epi32(_mm_and_si128(layer2_chunk0, v_mask), _mm_and_si128(layer2_chunk1, v_mask));\n    __m128i layer1_chunk4 = _mm_packus_epi32(_mm_srli_epi32(layer2_chunk0, 16), _mm_srli_epi32(layer2_chunk1, 16));\n    __m128i layer1_chunk1 = _mm_packus_epi32(_mm_and_si128(layer2_chunk2, v_mask), _mm_and_si128(layer2_chunk3, v_mask));\n    __m128i layer1_chunk5 = _mm_packus_epi32(_mm_srli_epi32(layer2_chunk2, 16), _mm_srli_epi32(layer2_chunk3, 16));\n    __m128i layer1_chunk2 = _mm_packus_epi32(_mm_and_si128(layer2_chunk4, v_mask), _mm_and_si128(layer2_chunk5, v_mask));\n    __m128i layer1_chunk6 = _mm_packus_epi32(_mm_srli_epi32(layer2_chunk4, 16), _mm_srli_epi32(layer2_chunk5, 16));\n    __m128i layer1_chunk3 = _mm_packus_epi32(_mm_and_si128(layer2_chunk6, v_mask), _mm_and_si128(layer2_chunk7, v_mask));\n    __m128i layer1_chunk7 = _mm_packus_epi32(_mm_srli_epi32(layer2_chunk6, 16), _mm_srli_epi32(layer2_chunk7, 16));\n\n    v_r0 = _mm_packus_epi32(_mm_and_si128(layer1_chunk0, v_mask), _mm_and_si128(layer1_chunk1, v_mask));\n    v_b0 = _mm_packus_epi32(_mm_srli_epi32(layer1_chunk0, 16), _mm_srli_epi32(layer1_chunk1, 16));\n    v_r1 = _mm_packus_epi32(_mm_and_si128(layer1_chunk2, v_mask), _mm_and_si128(layer1_chunk3, v_mask));\n    v_b1 = _mm_packus_epi32(_mm_srli_epi32(layer1_chunk2, 16), _mm_srli_epi32(layer1_chunk3, 16));\n    v_g0 = _mm_packus_epi32(_mm_and_si128(layer1_chunk4, v_mask), _mm_and_si128(layer1_chunk5, v_mask));\n    v_a0 = _mm_packus_epi32(_mm_srli_epi32(layer1_chunk4, 16), _mm_srli_epi32(layer1_chunk5, 16));\n    v_g1 = _mm_packus_epi32(_mm_and_si128(layer1_chunk6, v_mask), _mm_and_si128(layer1_chunk7, v_mask));\n    v_a1 = _mm_packus_epi32(_mm_srli_epi32(layer1_chunk6, 16), _mm_srli_epi32(layer1_chunk7, 16));\n}\n\n#endif // CV_SSE4_1\n\ninline void _mm_deinterleave_ps(__m128 & v_r0, __m128 & v_r1, __m128 & v_g0, __m128 & v_g1)\n{\n    __m128 layer1_chunk0 = _mm_unpacklo_ps(v_r0, v_g0);\n    __m128 layer1_chunk1 = _mm_unpackhi_ps(v_r0, v_g0);\n    __m128 layer1_chunk2 = _mm_unpacklo_ps(v_r1, v_g1);\n    __m128 layer1_chunk3 = _mm_unpackhi_ps(v_r1, v_g1);\n\n    __m128 layer2_chunk0 = _mm_unpacklo_ps(layer1_chunk0, layer1_chunk2);\n    __m128 layer2_chunk1 = _mm_unpackhi_ps(layer1_chunk0, layer1_chunk2);\n    __m128 layer2_chunk2 = _mm_unpacklo_ps(layer1_chunk1, layer1_chunk3);\n    __m128 layer2_chunk3 = _mm_unpackhi_ps(layer1_chunk1, layer1_chunk3);\n\n    v_r0 = _mm_unpacklo_ps(layer2_chunk0, layer2_chunk2);\n    v_r1 = _mm_unpackhi_ps(layer2_chunk0, layer2_chunk2);\n    v_g0 = _mm_unpacklo_ps(layer2_chunk1, layer2_chunk3);\n    v_g1 = _mm_unpackhi_ps(layer2_chunk1, layer2_chunk3);\n}\n\ninline void _mm_deinterleave_ps(__m128 & v_r0, __m128 & v_r1, __m128 & v_g0,\n                                __m128 & v_g1, __m128 & v_b0, __m128 & v_b1)\n{\n    __m128 layer1_chunk0 = _mm_unpacklo_ps(v_r0, v_g1);\n    __m128 layer1_chunk1 = _mm_unpackhi_ps(v_r0, v_g1);\n    __m128 layer1_chunk2 = _mm_unpacklo_ps(v_r1, v_b0);\n    __m128 layer1_chunk3 = _mm_unpackhi_ps(v_r1, v_b0);\n    __m128 layer1_chunk4 = _mm_unpacklo_ps(v_g0, v_b1);\n    __m128 layer1_chunk5 = _mm_unpackhi_ps(v_g0, v_b1);\n\n    __m128 layer2_chunk0 = _mm_unpacklo_ps(layer1_chunk0, layer1_chunk3);\n    __m128 layer2_chunk1 = _mm_unpackhi_ps(layer1_chunk0, layer1_chunk3);\n    __m128 layer2_chunk2 = _mm_unpacklo_ps(layer1_chunk1, layer1_chunk4);\n    __m128 layer2_chunk3 = _mm_unpackhi_ps(layer1_chunk1, layer1_chunk4);\n    __m128 layer2_chunk4 = _mm_unpacklo_ps(layer1_chunk2, layer1_chunk5);\n    __m128 layer2_chunk5 = _mm_unpackhi_ps(layer1_chunk2, layer1_chunk5);\n\n    v_r0 = _mm_unpacklo_ps(layer2_chunk0, layer2_chunk3);\n    v_r1 = _mm_unpackhi_ps(layer2_chunk0, layer2_chunk3);\n    v_g0 = _mm_unpacklo_ps(layer2_chunk1, layer2_chunk4);\n    v_g1 = _mm_unpackhi_ps(layer2_chunk1, layer2_chunk4);\n    v_b0 = _mm_unpacklo_ps(layer2_chunk2, layer2_chunk5);\n    v_b1 = _mm_unpackhi_ps(layer2_chunk2, layer2_chunk5);\n}\n\ninline void _mm_deinterleave_ps(__m128 & v_r0, __m128 & v_r1, __m128 & v_g0, __m128 & v_g1,\n                                __m128 & v_b0, __m128 & v_b1, __m128 & v_a0, __m128 & v_a1)\n{\n    __m128 layer1_chunk0 = _mm_unpacklo_ps(v_r0, v_b0);\n    __m128 layer1_chunk1 = _mm_unpackhi_ps(v_r0, v_b0);\n    __m128 layer1_chunk2 = _mm_unpacklo_ps(v_r1, v_b1);\n    __m128 layer1_chunk3 = _mm_unpackhi_ps(v_r1, v_b1);\n    __m128 layer1_chunk4 = _mm_unpacklo_ps(v_g0, v_a0);\n    __m128 layer1_chunk5 = _mm_unpackhi_ps(v_g0, v_a0);\n    __m128 layer1_chunk6 = _mm_unpacklo_ps(v_g1, v_a1);\n    __m128 layer1_chunk7 = _mm_unpackhi_ps(v_g1, v_a1);\n\n    __m128 layer2_chunk0 = _mm_unpacklo_ps(layer1_chunk0, layer1_chunk4);\n    __m128 layer2_chunk1 = _mm_unpackhi_ps(layer1_chunk0, layer1_chunk4);\n    __m128 layer2_chunk2 = _mm_unpacklo_ps(layer1_chunk1, layer1_chunk5);\n    __m128 layer2_chunk3 = _mm_unpackhi_ps(layer1_chunk1, layer1_chunk5);\n    __m128 layer2_chunk4 = _mm_unpacklo_ps(layer1_chunk2, layer1_chunk6);\n    __m128 layer2_chunk5 = _mm_unpackhi_ps(layer1_chunk2, layer1_chunk6);\n    __m128 layer2_chunk6 = _mm_unpacklo_ps(layer1_chunk3, layer1_chunk7);\n    __m128 layer2_chunk7 = _mm_unpackhi_ps(layer1_chunk3, layer1_chunk7);\n\n    v_r0 = _mm_unpacklo_ps(layer2_chunk0, layer2_chunk4);\n    v_r1 = _mm_unpackhi_ps(layer2_chunk0, layer2_chunk4);\n    v_g0 = _mm_unpacklo_ps(layer2_chunk1, layer2_chunk5);\n    v_g1 = _mm_unpackhi_ps(layer2_chunk1, layer2_chunk5);\n    v_b0 = _mm_unpacklo_ps(layer2_chunk2, layer2_chunk6);\n    v_b1 = _mm_unpackhi_ps(layer2_chunk2, layer2_chunk6);\n    v_a0 = _mm_unpacklo_ps(layer2_chunk3, layer2_chunk7);\n    v_a1 = _mm_unpackhi_ps(layer2_chunk3, layer2_chunk7);\n}\n\ninline void _mm_interleave_ps(__m128 & v_r0, __m128 & v_r1, __m128 & v_g0, __m128 & v_g1)\n{\n    const int mask_lo = _MM_SHUFFLE(2, 0, 2, 0), mask_hi = _MM_SHUFFLE(3, 1, 3, 1);\n\n    __m128 layer2_chunk0 = _mm_shuffle_ps(v_r0, v_r1, mask_lo);\n    __m128 layer2_chunk2 = _mm_shuffle_ps(v_r0, v_r1, mask_hi);\n    __m128 layer2_chunk1 = _mm_shuffle_ps(v_g0, v_g1, mask_lo);\n    __m128 layer2_chunk3 = _mm_shuffle_ps(v_g0, v_g1, mask_hi);\n\n    __m128 layer1_chunk0 = _mm_shuffle_ps(layer2_chunk0, layer2_chunk1, mask_lo);\n    __m128 layer1_chunk2 = _mm_shuffle_ps(layer2_chunk0, layer2_chunk1, mask_hi);\n    __m128 layer1_chunk1 = _mm_shuffle_ps(layer2_chunk2, layer2_chunk3, mask_lo);\n    __m128 layer1_chunk3 = _mm_shuffle_ps(layer2_chunk2, layer2_chunk3, mask_hi);\n\n    v_r0 = _mm_shuffle_ps(layer1_chunk0, layer1_chunk1, mask_lo);\n    v_g0 = _mm_shuffle_ps(layer1_chunk0, layer1_chunk1, mask_hi);\n    v_r1 = _mm_shuffle_ps(layer1_chunk2, layer1_chunk3, mask_lo);\n    v_g1 = _mm_shuffle_ps(layer1_chunk2, layer1_chunk3, mask_hi);\n}\n\ninline void _mm_interleave_ps(__m128 & v_r0, __m128 & v_r1, __m128 & v_g0,\n                              __m128 & v_g1, __m128 & v_b0, __m128 & v_b1)\n{\n    const int mask_lo = _MM_SHUFFLE(2, 0, 2, 0), mask_hi = _MM_SHUFFLE(3, 1, 3, 1);\n\n    __m128 layer2_chunk0 = _mm_shuffle_ps(v_r0, v_r1, mask_lo);\n    __m128 layer2_chunk3 = _mm_shuffle_ps(v_r0, v_r1, mask_hi);\n    __m128 layer2_chunk1 = _mm_shuffle_ps(v_g0, v_g1, mask_lo);\n    __m128 layer2_chunk4 = _mm_shuffle_ps(v_g0, v_g1, mask_hi);\n    __m128 layer2_chunk2 = _mm_shuffle_ps(v_b0, v_b1, mask_lo);\n    __m128 layer2_chunk5 = _mm_shuffle_ps(v_b0, v_b1, mask_hi);\n\n    __m128 layer1_chunk0 = _mm_shuffle_ps(layer2_chunk0, layer2_chunk1, mask_lo);\n    __m128 layer1_chunk3 = _mm_shuffle_ps(layer2_chunk0, layer2_chunk1, mask_hi);\n    __m128 layer1_chunk1 = _mm_shuffle_ps(layer2_chunk2, layer2_chunk3, mask_lo);\n    __m128 layer1_chunk4 = _mm_shuffle_ps(layer2_chunk2, layer2_chunk3, mask_hi);\n    __m128 layer1_chunk2 = _mm_shuffle_ps(layer2_chunk4, layer2_chunk5, mask_lo);\n    __m128 layer1_chunk5 = _mm_shuffle_ps(layer2_chunk4, layer2_chunk5, mask_hi);\n\n    v_r0 = _mm_shuffle_ps(layer1_chunk0, layer1_chunk1, mask_lo);\n    v_g1 = _mm_shuffle_ps(layer1_chunk0, layer1_chunk1, mask_hi);\n    v_r1 = _mm_shuffle_ps(layer1_chunk2, layer1_chunk3, mask_lo);\n    v_b0 = _mm_shuffle_ps(layer1_chunk2, layer1_chunk3, mask_hi);\n    v_g0 = _mm_shuffle_ps(layer1_chunk4, layer1_chunk5, mask_lo);\n    v_b1 = _mm_shuffle_ps(layer1_chunk4, layer1_chunk5, mask_hi);\n}\n\ninline void _mm_interleave_ps(__m128 & v_r0, __m128 & v_r1, __m128 & v_g0, __m128 & v_g1,\n                              __m128 & v_b0, __m128 & v_b1, __m128 & v_a0, __m128 & v_a1)\n{\n    const int mask_lo = _MM_SHUFFLE(2, 0, 2, 0), mask_hi = _MM_SHUFFLE(3, 1, 3, 1);\n\n    __m128 layer2_chunk0 = _mm_shuffle_ps(v_r0, v_r1, mask_lo);\n    __m128 layer2_chunk4 = _mm_shuffle_ps(v_r0, v_r1, mask_hi);\n    __m128 layer2_chunk1 = _mm_shuffle_ps(v_g0, v_g1, mask_lo);\n    __m128 layer2_chunk5 = _mm_shuffle_ps(v_g0, v_g1, mask_hi);\n    __m128 layer2_chunk2 = _mm_shuffle_ps(v_b0, v_b1, mask_lo);\n    __m128 layer2_chunk6 = _mm_shuffle_ps(v_b0, v_b1, mask_hi);\n    __m128 layer2_chunk3 = _mm_shuffle_ps(v_a0, v_a1, mask_lo);\n    __m128 layer2_chunk7 = _mm_shuffle_ps(v_a0, v_a1, mask_hi);\n\n    __m128 layer1_chunk0 = _mm_shuffle_ps(layer2_chunk0, layer2_chunk1, mask_lo);\n    __m128 layer1_chunk4 = _mm_shuffle_ps(layer2_chunk0, layer2_chunk1, mask_hi);\n    __m128 layer1_chunk1 = _mm_shuffle_ps(layer2_chunk2, layer2_chunk3, mask_lo);\n    __m128 layer1_chunk5 = _mm_shuffle_ps(layer2_chunk2, layer2_chunk3, mask_hi);\n    __m128 layer1_chunk2 = _mm_shuffle_ps(layer2_chunk4, layer2_chunk5, mask_lo);\n    __m128 layer1_chunk6 = _mm_shuffle_ps(layer2_chunk4, layer2_chunk5, mask_hi);\n    __m128 layer1_chunk3 = _mm_shuffle_ps(layer2_chunk6, layer2_chunk7, mask_lo);\n    __m128 layer1_chunk7 = _mm_shuffle_ps(layer2_chunk6, layer2_chunk7, mask_hi);\n\n    v_r0 = _mm_shuffle_ps(layer1_chunk0, layer1_chunk1, mask_lo);\n    v_b0 = _mm_shuffle_ps(layer1_chunk0, layer1_chunk1, mask_hi);\n    v_r1 = _mm_shuffle_ps(layer1_chunk2, layer1_chunk3, mask_lo);\n    v_b1 = _mm_shuffle_ps(layer1_chunk2, layer1_chunk3, mask_hi);\n    v_g0 = _mm_shuffle_ps(layer1_chunk4, layer1_chunk5, mask_lo);\n    v_a0 = _mm_shuffle_ps(layer1_chunk4, layer1_chunk5, mask_hi);\n    v_g1 = _mm_shuffle_ps(layer1_chunk6, layer1_chunk7, mask_lo);\n    v_a1 = _mm_shuffle_ps(layer1_chunk6, layer1_chunk7, mask_hi);\n}\n\n#endif // CV_SSE2\n\n//! @}\n\n#endif //__OPENCV_CORE_SSE_UTILS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/traits.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_TRAITS_HPP__\n#define __OPENCV_CORE_TRAITS_HPP__\n\n#include \"opencv2/core/cvdef.h\"\n\nnamespace cv\n{\n\n//! @addtogroup core_basic\n//! @{\n\n/** @brief Template \"trait\" class for OpenCV primitive data types.\n\nA primitive OpenCV data type is one of unsigned char, bool, signed char, unsigned short, signed\nshort, int, float, double, or a tuple of values of one of these types, where all the values in the\ntuple have the same type. Any primitive type from the list can be defined by an identifier in the\nform CV_\\<bit-depth\\>{U|S|F}C(\\<number_of_channels\\>), for example: uchar \\~ CV_8UC1, 3-element\nfloating-point tuple \\~ CV_32FC3, and so on. A universal OpenCV structure that is able to store a\nsingle instance of such a primitive data type is Vec. Multiple instances of such a type can be\nstored in a std::vector, Mat, Mat_, SparseMat, SparseMat_, or any other container that is able to\nstore Vec instances.\n\nThe DataType class is basically used to provide a description of such primitive data types without\nadding any fields or methods to the corresponding classes (and it is actually impossible to add\nanything to primitive C/C++ data types). This technique is known in C++ as class traits. It is not\nDataType itself that is used but its specialized versions, such as:\n@code\n    template<> class DataType<uchar>\n    {\n        typedef uchar value_type;\n        typedef int work_type;\n        typedef uchar channel_type;\n        enum { channel_type = CV_8U, channels = 1, fmt='u', type = CV_8U };\n    };\n    ...\n    template<typename _Tp> DataType<std::complex<_Tp> >\n    {\n        typedef std::complex<_Tp> value_type;\n        typedef std::complex<_Tp> work_type;\n        typedef _Tp channel_type;\n        // DataDepth is another helper trait class\n        enum { depth = DataDepth<_Tp>::value, channels=2,\n            fmt=(channels-1)*256+DataDepth<_Tp>::fmt,\n            type=CV_MAKETYPE(depth, channels) };\n    };\n    ...\n@endcode\nThe main purpose of this class is to convert compilation-time type information to an\nOpenCV-compatible data type identifier, for example:\n@code\n    // allocates a 30x40 floating-point matrix\n    Mat A(30, 40, DataType<float>::type);\n\n    Mat B = Mat_<std::complex<double> >(3, 3);\n    // the statement below will print 6, 2 , that is depth == CV_64F, channels == 2\n    cout << B.depth() << \", \" << B.channels() << endl;\n@endcode\nSo, such traits are used to tell OpenCV which data type you are working with, even if such a type is\nnot native to OpenCV. For example, the matrix B initialization above is compiled because OpenCV\ndefines the proper specialized template class DataType\\<complex\\<_Tp\\> \\> . This mechanism is also\nuseful (and used in OpenCV this way) for generic algorithms implementations.\n*/\ntemplate<typename _Tp> class DataType\n{\npublic:\n    typedef _Tp         value_type;\n    typedef value_type  work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 1,\n           depth        = -1,\n           channels     = 1,\n           fmt          = 0,\n           type = CV_MAKETYPE(depth, channels)\n         };\n};\n\ntemplate<> class DataType<bool>\n{\npublic:\n    typedef bool        value_type;\n    typedef int         work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 0,\n           depth        = CV_8U,\n           channels     = 1,\n           fmt          = (int)'u',\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\ntemplate<> class DataType<uchar>\n{\npublic:\n    typedef uchar       value_type;\n    typedef int         work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 0,\n           depth        = CV_8U,\n           channels     = 1,\n           fmt          = (int)'u',\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\ntemplate<> class DataType<schar>\n{\npublic:\n    typedef schar       value_type;\n    typedef int         work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 0,\n           depth        = CV_8S,\n           channels     = 1,\n           fmt          = (int)'c',\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\ntemplate<> class DataType<char>\n{\npublic:\n    typedef schar       value_type;\n    typedef int         work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 0,\n           depth        = CV_8S,\n           channels     = 1,\n           fmt          = (int)'c',\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\ntemplate<> class DataType<ushort>\n{\npublic:\n    typedef ushort      value_type;\n    typedef int         work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 0,\n           depth        = CV_16U,\n           channels     = 1,\n           fmt          = (int)'w',\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\ntemplate<> class DataType<short>\n{\npublic:\n    typedef short       value_type;\n    typedef int         work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 0,\n           depth        = CV_16S,\n           channels     = 1,\n           fmt          = (int)'s',\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\ntemplate<> class DataType<int>\n{\npublic:\n    typedef int         value_type;\n    typedef value_type  work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 0,\n           depth        = CV_32S,\n           channels     = 1,\n           fmt          = (int)'i',\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\ntemplate<> class DataType<float>\n{\npublic:\n    typedef float       value_type;\n    typedef value_type  work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 0,\n           depth        = CV_32F,\n           channels     = 1,\n           fmt          = (int)'f',\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\ntemplate<> class DataType<double>\n{\npublic:\n    typedef double      value_type;\n    typedef value_type  work_type;\n    typedef value_type  channel_type;\n    typedef value_type  vec_type;\n    enum { generic_type = 0,\n           depth        = CV_64F,\n           channels     = 1,\n           fmt          = (int)'d',\n           type         = CV_MAKETYPE(depth, channels)\n         };\n};\n\n\n/** @brief A helper class for cv::DataType\n\nThe class is specialized for each fundamental numerical data type supported by OpenCV. It provides\nDataDepth<T>::value constant.\n*/\ntemplate<typename _Tp> class DataDepth\n{\npublic:\n    enum\n    {\n        value = DataType<_Tp>::depth,\n        fmt   = DataType<_Tp>::fmt\n    };\n};\n\n\n\ntemplate<int _depth> class TypeDepth\n{\n    enum { depth = CV_USRTYPE1 };\n    typedef void value_type;\n};\n\ntemplate<> class TypeDepth<CV_8U>\n{\n    enum { depth = CV_8U };\n    typedef uchar value_type;\n};\n\ntemplate<> class TypeDepth<CV_8S>\n{\n    enum { depth = CV_8S };\n    typedef schar value_type;\n};\n\ntemplate<> class TypeDepth<CV_16U>\n{\n    enum { depth = CV_16U };\n    typedef ushort value_type;\n};\n\ntemplate<> class TypeDepth<CV_16S>\n{\n    enum { depth = CV_16S };\n    typedef short value_type;\n};\n\ntemplate<> class TypeDepth<CV_32S>\n{\n    enum { depth = CV_32S };\n    typedef int value_type;\n};\n\ntemplate<> class TypeDepth<CV_32F>\n{\n    enum { depth = CV_32F };\n    typedef float value_type;\n};\n\ntemplate<> class TypeDepth<CV_64F>\n{\n    enum { depth = CV_64F };\n    typedef double value_type;\n};\n\n//! @}\n\n} // cv\n\n#endif // __OPENCV_CORE_TRAITS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/types.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_TYPES_HPP__\n#define __OPENCV_CORE_TYPES_HPP__\n\n#ifndef __cplusplus\n#  error types.hpp header must be compiled as C++\n#endif\n\n#include <climits>\n#include <cfloat>\n#include <vector>\n\n#include \"opencv2/core/cvdef.h\"\n#include \"opencv2/core/cvstd.hpp\"\n#include \"opencv2/core/matx.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup core_basic\n//! @{\n\n//////////////////////////////// Complex //////////////////////////////\n\n/** @brief  A complex number class.\n\n  The template class is similar and compatible with std::complex, however it provides slightly\n  more convenient access to the real and imaginary parts using through the simple field access, as opposite\n  to std::complex::real() and std::complex::imag().\n*/\ntemplate<typename _Tp> class Complex\n{\npublic:\n\n    //! constructors\n    Complex();\n    Complex( _Tp _re, _Tp _im = 0 );\n\n    //! conversion to another data type\n    template<typename T2> operator Complex<T2>() const;\n    //! conjugation\n    Complex conj() const;\n\n    _Tp re, im; //< the real and the imaginary parts\n};\n\ntypedef Complex<float> Complexf;\ntypedef Complex<double> Complexd;\n\ntemplate<typename _Tp> class DataType< Complex<_Tp> >\n{\npublic:\n    typedef Complex<_Tp> value_type;\n    typedef value_type   work_type;\n    typedef _Tp          channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = 2,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels) };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n//////////////////////////////// Point_ ////////////////////////////////\n\n/** @brief Template class for 2D points specified by its coordinates `x` and `y`.\n\nAn instance of the class is interchangeable with C structures, CvPoint and CvPoint2D32f . There is\nalso a cast operator to convert point coordinates to the specified type. The conversion from\nfloating-point coordinates to integer coordinates is done by rounding. Commonly, the conversion\nuses this operation for each of the coordinates. Besides the class members listed in the\ndeclaration above, the following operations on points are implemented:\n@code\n    pt1 = pt2 + pt3;\n    pt1 = pt2 - pt3;\n    pt1 = pt2 * a;\n    pt1 = a * pt2;\n    pt1 = pt2 / a;\n    pt1 += pt2;\n    pt1 -= pt2;\n    pt1 *= a;\n    pt1 /= a;\n    double value = norm(pt); // L2 norm\n    pt1 == pt2;\n    pt1 != pt2;\n@endcode\nFor your convenience, the following type aliases are defined:\n@code\n    typedef Point_<int> Point2i;\n    typedef Point2i Point;\n    typedef Point_<float> Point2f;\n    typedef Point_<double> Point2d;\n@endcode\nExample:\n@code\n    Point2f a(0.3f, 0.f), b(0.f, 0.4f);\n    Point pt = (a + b)*10.f;\n    cout << pt.x << \", \" << pt.y << endl;\n@endcode\n*/\ntemplate<typename _Tp> class Point_\n{\npublic:\n    typedef _Tp value_type;\n\n    // various constructors\n    Point_();\n    Point_(_Tp _x, _Tp _y);\n    Point_(const Point_& pt);\n    Point_(const Size_<_Tp>& sz);\n    Point_(const Vec<_Tp, 2>& v);\n\n    Point_& operator = (const Point_& pt);\n    //! conversion to another data type\n    template<typename _Tp2> operator Point_<_Tp2>() const;\n\n    //! conversion to the old-style C structures\n    operator Vec<_Tp, 2>() const;\n\n    //! dot product\n    _Tp dot(const Point_& pt) const;\n    //! dot product computed in double-precision arithmetics\n    double ddot(const Point_& pt) const;\n    //! cross-product\n    double cross(const Point_& pt) const;\n    //! checks whether the point is inside the specified rectangle\n    bool inside(const Rect_<_Tp>& r) const;\n\n    _Tp x, y; //< the point coordinates\n};\n\ntypedef Point_<int> Point2i;\ntypedef Point_<float> Point2f;\ntypedef Point_<double> Point2d;\ntypedef Point2i Point;\n\ntemplate<typename _Tp> class DataType< Point_<_Tp> >\n{\npublic:\n    typedef Point_<_Tp>                               value_type;\n    typedef Point_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp                                       channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = 2,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n//////////////////////////////// Point3_ ////////////////////////////////\n\n/** @brief Template class for 3D points specified by its coordinates `x`, `y` and `z`.\n\nAn instance of the class is interchangeable with the C structure CvPoint2D32f . Similarly to\nPoint_ , the coordinates of 3D points can be converted to another type. The vector arithmetic and\ncomparison operations are also supported.\n\nThe following Point3_\\<\\> aliases are available:\n@code\n    typedef Point3_<int> Point3i;\n    typedef Point3_<float> Point3f;\n    typedef Point3_<double> Point3d;\n@endcode\n@see cv::Point3i, cv::Point3f and cv::Point3d\n*/\ntemplate<typename _Tp> class Point3_\n{\npublic:\n    typedef _Tp value_type;\n\n    // various constructors\n    Point3_();\n    Point3_(_Tp _x, _Tp _y, _Tp _z);\n    Point3_(const Point3_& pt);\n    explicit Point3_(const Point_<_Tp>& pt);\n    Point3_(const Vec<_Tp, 3>& v);\n\n    Point3_& operator = (const Point3_& pt);\n    //! conversion to another data type\n    template<typename _Tp2> operator Point3_<_Tp2>() const;\n    //! conversion to cv::Vec<>\n    operator Vec<_Tp, 3>() const;\n\n    //! dot product\n    _Tp dot(const Point3_& pt) const;\n    //! dot product computed in double-precision arithmetics\n    double ddot(const Point3_& pt) const;\n    //! cross product of the 2 3D points\n    Point3_ cross(const Point3_& pt) const;\n\n    _Tp x, y, z; //< the point coordinates\n};\n\ntypedef Point3_<int> Point3i;\ntypedef Point3_<float> Point3f;\ntypedef Point3_<double> Point3d;\n\ntemplate<typename _Tp> class DataType< Point3_<_Tp> >\n{\npublic:\n    typedef Point3_<_Tp>                               value_type;\n    typedef Point3_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp                                        channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = 3,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n//////////////////////////////// Size_ ////////////////////////////////\n\n/** @brief Template class for specifying the size of an image or rectangle.\n\nThe class includes two members called width and height. The structure can be converted to and from\nthe old OpenCV structures CvSize and CvSize2D32f . The same set of arithmetic and comparison\noperations as for Point_ is available.\n\nOpenCV defines the following Size_\\<\\> aliases:\n@code\n    typedef Size_<int> Size2i;\n    typedef Size2i Size;\n    typedef Size_<float> Size2f;\n@endcode\n*/\ntemplate<typename _Tp> class Size_\n{\npublic:\n    typedef _Tp value_type;\n\n    //! various constructors\n    Size_();\n    Size_(_Tp _width, _Tp _height);\n    Size_(const Size_& sz);\n    Size_(const Point_<_Tp>& pt);\n\n    Size_& operator = (const Size_& sz);\n    //! the area (width*height)\n    _Tp area() const;\n\n    //! conversion of another data type.\n    template<typename _Tp2> operator Size_<_Tp2>() const;\n\n    _Tp width, height; // the width and the height\n};\n\ntypedef Size_<int> Size2i;\ntypedef Size_<float> Size2f;\ntypedef Size_<double> Size2d;\ntypedef Size2i Size;\n\ntemplate<typename _Tp> class DataType< Size_<_Tp> >\n{\npublic:\n    typedef Size_<_Tp>                               value_type;\n    typedef Size_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp                                      channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = 2,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n//////////////////////////////// Rect_ ////////////////////////////////\n\n/** @brief Template class for 2D rectangles\n\ndescribed by the following parameters:\n-   Coordinates of the top-left corner. This is a default interpretation of Rect_::x and Rect_::y\n    in OpenCV. Though, in your algorithms you may count x and y from the bottom-left corner.\n-   Rectangle width and height.\n\nOpenCV typically assumes that the top and left boundary of the rectangle are inclusive, while the\nright and bottom boundaries are not. For example, the method Rect_::contains returns true if\n\n\\f[x  \\leq pt.x < x+width,\n      y  \\leq pt.y < y+height\\f]\n\nVirtually every loop over an image ROI in OpenCV (where ROI is specified by Rect_\\<int\\> ) is\nimplemented as:\n@code\n    for(int y = roi.y; y < roi.y + roi.height; y++)\n        for(int x = roi.x; x < roi.x + roi.width; x++)\n        {\n            // ...\n        }\n@endcode\nIn addition to the class members, the following operations on rectangles are implemented:\n-   \\f$\\texttt{rect} = \\texttt{rect} \\pm \\texttt{point}\\f$ (shifting a rectangle by a certain offset)\n-   \\f$\\texttt{rect} = \\texttt{rect} \\pm \\texttt{size}\\f$ (expanding or shrinking a rectangle by a\n    certain amount)\n-   rect += point, rect -= point, rect += size, rect -= size (augmenting operations)\n-   rect = rect1 & rect2 (rectangle intersection)\n-   rect = rect1 | rect2 (minimum area rectangle containing rect1 and rect2 )\n-   rect &= rect1, rect |= rect1 (and the corresponding augmenting operations)\n-   rect == rect1, rect != rect1 (rectangle comparison)\n\nThis is an example how the partial ordering on rectangles can be established (rect1 \\f$\\subseteq\\f$\nrect2):\n@code\n    template<typename _Tp> inline bool\n    operator <= (const Rect_<_Tp>& r1, const Rect_<_Tp>& r2)\n    {\n        return (r1 & r2) == r1;\n    }\n@endcode\nFor your convenience, the Rect_\\<\\> alias is available: cv::Rect\n*/\ntemplate<typename _Tp> class Rect_\n{\npublic:\n    typedef _Tp value_type;\n\n    //! various constructors\n    Rect_();\n    Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);\n    Rect_(const Rect_& r);\n    Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz);\n    Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2);\n\n    Rect_& operator = ( const Rect_& r );\n    //! the top-left corner\n    Point_<_Tp> tl() const;\n    //! the bottom-right corner\n    Point_<_Tp> br() const;\n\n    //! size (width, height) of the rectangle\n    Size_<_Tp> size() const;\n    //! area (width*height) of the rectangle\n    _Tp area() const;\n\n    //! conversion to another data type\n    template<typename _Tp2> operator Rect_<_Tp2>() const;\n\n    //! checks whether the rectangle contains the point\n    bool contains(const Point_<_Tp>& pt) const;\n\n    _Tp x, y, width, height; //< the top-left corner, as well as width and height of the rectangle\n};\n\ntypedef Rect_<int> Rect2i;\ntypedef Rect_<float> Rect2f;\ntypedef Rect_<double> Rect2d;\ntypedef Rect2i Rect;\n\ntemplate<typename _Tp> class DataType< Rect_<_Tp> >\n{\npublic:\n    typedef Rect_<_Tp>                               value_type;\n    typedef Rect_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp                                      channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = 4,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n///////////////////////////// RotatedRect /////////////////////////////\n\n/** @brief The class represents rotated (i.e. not up-right) rectangles on a plane.\n\nEach rectangle is specified by the center point (mass center), length of each side (represented by\ncv::Size2f structure) and the rotation angle in degrees.\n\nThe sample below demonstrates how to use RotatedRect:\n@code\n    Mat image(200, 200, CV_8UC3, Scalar(0));\n    RotatedRect rRect = RotatedRect(Point2f(100,100), Size2f(100,50), 30);\n\n    Point2f vertices[4];\n    rRect.points(vertices);\n    for (int i = 0; i < 4; i++)\n        line(image, vertices[i], vertices[(i+1)%4], Scalar(0,255,0));\n\n    Rect brect = rRect.boundingRect();\n    rectangle(image, brect, Scalar(255,0,0));\n\n    imshow(\"rectangles\", image);\n    waitKey(0);\n@endcode\n![image](pics/rotatedrect.png)\n\n@sa CamShift, fitEllipse, minAreaRect, CvBox2D\n*/\nclass CV_EXPORTS RotatedRect\n{\npublic:\n    //! various constructors\n    RotatedRect();\n    /**\n    @param center The rectangle mass center.\n    @param size Width and height of the rectangle.\n    @param angle The rotation angle in a clockwise direction. When the angle is 0, 90, 180, 270 etc.,\n    the rectangle becomes an up-right rectangle.\n    */\n    RotatedRect(const Point2f& center, const Size2f& size, float angle);\n    /**\n    Any 3 end points of the RotatedRect. They must be given in order (either clockwise or\n    anticlockwise).\n     */\n    RotatedRect(const Point2f& point1, const Point2f& point2, const Point2f& point3);\n\n    /** returns 4 vertices of the rectangle\n    @param pts The points array for storing rectangle vertices.\n    */\n    void points(Point2f pts[]) const;\n    //! returns the minimal up-right rectangle containing the rotated rectangle\n    Rect boundingRect() const;\n\n    Point2f center; //< the rectangle mass center\n    Size2f size;    //< width and height of the rectangle\n    float angle;    //< the rotation angle. When the angle is 0, 90, 180, 270 etc., the rectangle becomes an up-right rectangle.\n};\n\ntemplate<> class DataType< RotatedRect >\n{\npublic:\n    typedef RotatedRect  value_type;\n    typedef value_type   work_type;\n    typedef float        channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = (int)sizeof(value_type)/sizeof(channel_type), // 5\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n//////////////////////////////// Range /////////////////////////////////\n\n/** @brief Template class specifying a continuous subsequence (slice) of a sequence.\n\nThe class is used to specify a row or a column span in a matrix ( Mat ) and for many other purposes.\nRange(a,b) is basically the same as a:b in Matlab or a..b in Python. As in Python, start is an\ninclusive left boundary of the range and end is an exclusive right boundary of the range. Such a\nhalf-opened interval is usually denoted as \\f$[start,end)\\f$ .\n\nThe static method Range::all() returns a special variable that means \"the whole sequence\" or \"the\nwhole range\", just like \" : \" in Matlab or \" ... \" in Python. All the methods and functions in\nOpenCV that take Range support this special Range::all() value. But, of course, in case of your own\ncustom processing, you will probably have to check and handle it explicitly:\n@code\n    void my_function(..., const Range& r, ....)\n    {\n        if(r == Range::all()) {\n            // process all the data\n        }\n        else {\n            // process [r.start, r.end)\n        }\n    }\n@endcode\n*/\nclass CV_EXPORTS Range\n{\npublic:\n    Range();\n    Range(int _start, int _end);\n    int size() const;\n    bool empty() const;\n    static Range all();\n\n    int start, end;\n};\n\ntemplate<> class DataType<Range>\n{\npublic:\n    typedef Range      value_type;\n    typedef value_type work_type;\n    typedef int        channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = 2,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n//////////////////////////////// Scalar_ ///////////////////////////////\n\n/** @brief Template class for a 4-element vector derived from Vec.\n\nBeing derived from Vec\\<_Tp, 4\\> , Scalar_ and Scalar can be used just as typical 4-element\nvectors. In addition, they can be converted to/from CvScalar . The type Scalar is widely used in\nOpenCV to pass pixel values.\n*/\ntemplate<typename _Tp> class Scalar_ : public Vec<_Tp, 4>\n{\npublic:\n    //! various constructors\n    Scalar_();\n    Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);\n    Scalar_(_Tp v0);\n\n    template<typename _Tp2, int cn>\n    Scalar_(const Vec<_Tp2, cn>& v);\n\n    //! returns a scalar with all elements set to v0\n    static Scalar_<_Tp> all(_Tp v0);\n\n    //! conversion to another data type\n    template<typename T2> operator Scalar_<T2>() const;\n\n    //! per-element product\n    Scalar_<_Tp> mul(const Scalar_<_Tp>& a, double scale=1 ) const;\n\n    // returns (v0, -v1, -v2, -v3)\n    Scalar_<_Tp> conj() const;\n\n    // returns true iff v1 == v2 == v3 == 0\n    bool isReal() const;\n};\n\ntypedef Scalar_<double> Scalar;\n\ntemplate<typename _Tp> class DataType< Scalar_<_Tp> >\n{\npublic:\n    typedef Scalar_<_Tp>                               value_type;\n    typedef Scalar_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp                                        channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = 4,\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n/////////////////////////////// KeyPoint ////////////////////////////////\n\n/** @brief Data structure for salient point detectors.\n\nThe class instance stores a keypoint, i.e. a point feature found by one of many available keypoint\ndetectors, such as Harris corner detector, cv::FAST, cv::StarDetector, cv::SURF, cv::SIFT,\ncv::LDetector etc.\n\nThe keypoint is characterized by the 2D position, scale (proportional to the diameter of the\nneighborhood that needs to be taken into account), orientation and some other parameters. The\nkeypoint neighborhood is then analyzed by another algorithm that builds a descriptor (usually\nrepresented as a feature vector). The keypoints representing the same object in different images\ncan then be matched using cv::KDTree or another method.\n*/\nclass CV_EXPORTS_W_SIMPLE KeyPoint\n{\npublic:\n    //! the default constructor\n    CV_WRAP KeyPoint();\n    /**\n    @param _pt x & y coordinates of the keypoint\n    @param _size keypoint diameter\n    @param _angle keypoint orientation\n    @param _response keypoint detector response on the keypoint (that is, strength of the keypoint)\n    @param _octave pyramid octave in which the keypoint has been detected\n    @param _class_id object id\n     */\n    KeyPoint(Point2f _pt, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1);\n    /**\n    @param x x-coordinate of the keypoint\n    @param y y-coordinate of the keypoint\n    @param _size keypoint diameter\n    @param _angle keypoint orientation\n    @param _response keypoint detector response on the keypoint (that is, strength of the keypoint)\n    @param _octave pyramid octave in which the keypoint has been detected\n    @param _class_id object id\n     */\n    CV_WRAP KeyPoint(float x, float y, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1);\n\n    size_t hash() const;\n\n    /**\n    This method converts vector of keypoints to vector of points or the reverse, where each keypoint is\n    assigned the same size and the same orientation.\n\n    @param keypoints Keypoints obtained from any feature detection algorithm like SIFT/SURF/ORB\n    @param points2f Array of (x,y) coordinates of each keypoint\n    @param keypointIndexes Array of indexes of keypoints to be converted to points. (Acts like a mask to\n    convert only specified keypoints)\n    */\n    CV_WRAP static void convert(const std::vector<KeyPoint>& keypoints,\n                                CV_OUT std::vector<Point2f>& points2f,\n                                const std::vector<int>& keypointIndexes=std::vector<int>());\n    /** @overload\n    @param points2f Array of (x,y) coordinates of each keypoint\n    @param keypoints Keypoints obtained from any feature detection algorithm like SIFT/SURF/ORB\n    @param size keypoint diameter\n    @param response keypoint detector response on the keypoint (that is, strength of the keypoint)\n    @param octave pyramid octave in which the keypoint has been detected\n    @param class_id object id\n    */\n    CV_WRAP static void convert(const std::vector<Point2f>& points2f,\n                                CV_OUT std::vector<KeyPoint>& keypoints,\n                                float size=1, float response=1, int octave=0, int class_id=-1);\n\n    /**\n    This method computes overlap for pair of keypoints. Overlap is the ratio between area of keypoint\n    regions' intersection and area of keypoint regions' union (considering keypoint region as circle).\n    If they don't overlap, we get zero. If they coincide at same location with same size, we get 1.\n    @param kp1 First keypoint\n    @param kp2 Second keypoint\n    */\n    CV_WRAP static float overlap(const KeyPoint& kp1, const KeyPoint& kp2);\n\n    CV_PROP_RW Point2f pt; //!< coordinates of the keypoints\n    CV_PROP_RW float size; //!< diameter of the meaningful keypoint neighborhood\n    CV_PROP_RW float angle; //!< computed orientation of the keypoint (-1 if not applicable);\n                            //!< it's in [0,360) degrees and measured relative to\n                            //!< image coordinate system, ie in clockwise.\n    CV_PROP_RW float response; //!< the response by which the most strong keypoints have been selected. Can be used for the further sorting or subsampling\n    CV_PROP_RW int octave; //!< octave (pyramid layer) from which the keypoint has been extracted\n    CV_PROP_RW int class_id; //!< object class (if the keypoints need to be clustered by an object they belong to)\n};\n\ntemplate<> class DataType<KeyPoint>\n{\npublic:\n    typedef KeyPoint      value_type;\n    typedef float         work_type;\n    typedef float         channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = (int)(sizeof(value_type)/sizeof(channel_type)), // 7\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n//////////////////////////////// DMatch /////////////////////////////////\n\n/** @brief Class for matching keypoint descriptors\n\nquery descriptor index, train descriptor index, train image index, and distance between\ndescriptors.\n*/\nclass CV_EXPORTS_W_SIMPLE DMatch\n{\npublic:\n    CV_WRAP DMatch();\n    CV_WRAP DMatch(int _queryIdx, int _trainIdx, float _distance);\n    CV_WRAP DMatch(int _queryIdx, int _trainIdx, int _imgIdx, float _distance);\n\n    CV_PROP_RW int queryIdx; // query descriptor index\n    CV_PROP_RW int trainIdx; // train descriptor index\n    CV_PROP_RW int imgIdx;   // train image index\n\n    CV_PROP_RW float distance;\n\n    // less is better\n    bool operator<(const DMatch &m) const;\n};\n\ntemplate<> class DataType<DMatch>\n{\npublic:\n    typedef DMatch      value_type;\n    typedef int         work_type;\n    typedef int         channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = (int)(sizeof(value_type)/sizeof(channel_type)), // 4\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n\n\n///////////////////////////// TermCriteria //////////////////////////////\n\n/** @brief The class defining termination criteria for iterative algorithms.\n\nYou can initialize it by default constructor and then override any parameters, or the structure may\nbe fully initialized using the advanced variant of the constructor.\n*/\nclass CV_EXPORTS TermCriteria\n{\npublic:\n    /**\n      Criteria type, can be one of: COUNT, EPS or COUNT + EPS\n    */\n    enum Type\n    {\n        COUNT=1, //!< the maximum number of iterations or elements to compute\n        MAX_ITER=COUNT, //!< ditto\n        EPS=2 //!< the desired accuracy or change in parameters at which the iterative algorithm stops\n    };\n\n    //! default constructor\n    TermCriteria();\n    /**\n    @param type The type of termination criteria, one of TermCriteria::Type\n    @param maxCount The maximum number of iterations or elements to compute.\n    @param epsilon The desired accuracy or change in parameters at which the iterative algorithm stops.\n    */\n    TermCriteria(int type, int maxCount, double epsilon);\n\n    int type; //!< the type of termination criteria: COUNT, EPS or COUNT + EPS\n    int maxCount; // the maximum number of iterations/elements\n    double epsilon; // the desired accuracy\n};\n\n\n//! @} core_basic\n\n///////////////////////// raster image moments //////////////////////////\n\n//! @addtogroup imgproc_shape\n//! @{\n\n/** @brief struct returned by cv::moments\n\nThe spatial moments \\f$\\texttt{Moments::m}_{ji}\\f$ are computed as:\n\n\\f[\\texttt{m} _{ji}= \\sum _{x,y}  \\left ( \\texttt{array} (x,y)  \\cdot x^j  \\cdot y^i \\right )\\f]\n\nThe central moments \\f$\\texttt{Moments::mu}_{ji}\\f$ are computed as:\n\n\\f[\\texttt{mu} _{ji}= \\sum _{x,y}  \\left ( \\texttt{array} (x,y)  \\cdot (x -  \\bar{x} )^j  \\cdot (y -  \\bar{y} )^i \\right )\\f]\n\nwhere \\f$(\\bar{x}, \\bar{y})\\f$ is the mass center:\n\n\\f[\\bar{x} = \\frac{\\texttt{m}_{10}}{\\texttt{m}_{00}} , \\; \\bar{y} = \\frac{\\texttt{m}_{01}}{\\texttt{m}_{00}}\\f]\n\nThe normalized central moments \\f$\\texttt{Moments::nu}_{ij}\\f$ are computed as:\n\n\\f[\\texttt{nu} _{ji}= \\frac{\\texttt{mu}_{ji}}{\\texttt{m}_{00}^{(i+j)/2+1}} .\\f]\n\n@note\n\\f$\\texttt{mu}_{00}=\\texttt{m}_{00}\\f$, \\f$\\texttt{nu}_{00}=1\\f$\n\\f$\\texttt{nu}_{10}=\\texttt{mu}_{10}=\\texttt{mu}_{01}=\\texttt{mu}_{10}=0\\f$ , hence the values are not\nstored.\n\nThe moments of a contour are defined in the same way but computed using the Green's formula (see\n<http://en.wikipedia.org/wiki/Green_theorem>). So, due to a limited raster resolution, the moments\ncomputed for a contour are slightly different from the moments computed for the same rasterized\ncontour.\n\n@note\nSince the contour moments are computed using Green formula, you may get seemingly odd results for\ncontours with self-intersections, e.g. a zero area (m00) for butterfly-shaped contours.\n */\nclass CV_EXPORTS_W_MAP Moments\n{\npublic:\n    //! the default constructor\n    Moments();\n    //! the full constructor\n    Moments(double m00, double m10, double m01, double m20, double m11,\n            double m02, double m30, double m21, double m12, double m03 );\n    ////! the conversion from CvMoments\n    //Moments( const CvMoments& moments );\n    ////! the conversion to CvMoments\n    //operator CvMoments() const;\n\n    //! @name spatial moments\n    //! @{\n    CV_PROP_RW double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03;\n    //! @}\n\n    //! @name central moments\n    //! @{\n    CV_PROP_RW double  mu20, mu11, mu02, mu30, mu21, mu12, mu03;\n    //! @}\n\n    //! @name central normalized moments\n    //! @{\n    CV_PROP_RW double  nu20, nu11, nu02, nu30, nu21, nu12, nu03;\n    //! @}\n};\n\ntemplate<> class DataType<Moments>\n{\npublic:\n    typedef Moments     value_type;\n    typedef double      work_type;\n    typedef double      channel_type;\n\n    enum { generic_type = 0,\n           depth        = DataType<channel_type>::depth,\n           channels     = (int)(sizeof(value_type)/sizeof(channel_type)), // 24\n           fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n           type         = CV_MAKETYPE(depth, channels)\n         };\n\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n//! @} imgproc_shape\n\n//! @cond IGNORED\n\n/////////////////////////////////////////////////////////////////////////\n///////////////////////////// Implementation ////////////////////////////\n/////////////////////////////////////////////////////////////////////////\n\n//////////////////////////////// Complex ////////////////////////////////\n\ntemplate<typename _Tp> inline\nComplex<_Tp>::Complex()\n    : re(0), im(0) {}\n\ntemplate<typename _Tp> inline\nComplex<_Tp>::Complex( _Tp _re, _Tp _im )\n    : re(_re), im(_im) {}\n\ntemplate<typename _Tp> template<typename T2> inline\nComplex<_Tp>::operator Complex<T2>() const\n{\n    return Complex<T2>(saturate_cast<T2>(re), saturate_cast<T2>(im));\n}\n\ntemplate<typename _Tp> inline\nComplex<_Tp> Complex<_Tp>::conj() const\n{\n    return Complex<_Tp>(re, -im);\n}\n\n\ntemplate<typename _Tp> static inline\nbool operator == (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    return a.re == b.re && a.im == b.im;\n}\n\ntemplate<typename _Tp> static inline\nbool operator != (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    return a.re != b.re || a.im != b.im;\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator + (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    return Complex<_Tp>( a.re + b.re, a.im + b.im );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator += (Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    a.re += b.re; a.im += b.im;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    return Complex<_Tp>( a.re - b.re, a.im - b.im );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator -= (Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    a.re -= b.re; a.im -= b.im;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (const Complex<_Tp>& a)\n{\n    return Complex<_Tp>(-a.re, -a.im);\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator * (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    return Complex<_Tp>( a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator * (const Complex<_Tp>& a, _Tp b)\n{\n    return Complex<_Tp>( a.re*b, a.im*b );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator * (_Tp b, const Complex<_Tp>& a)\n{\n    return Complex<_Tp>( a.re*b, a.im*b );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator + (const Complex<_Tp>& a, _Tp b)\n{\n    return Complex<_Tp>( a.re + b, a.im );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (const Complex<_Tp>& a, _Tp b)\n{ return Complex<_Tp>( a.re - b, a.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator + (_Tp b, const Complex<_Tp>& a)\n{\n    return Complex<_Tp>( a.re + b, a.im );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (_Tp b, const Complex<_Tp>& a)\n{\n    return Complex<_Tp>( b - a.re, -a.im );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator += (Complex<_Tp>& a, _Tp b)\n{\n    a.re += b; return a;\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator -= (Complex<_Tp>& a, _Tp b)\n{\n    a.re -= b; return a;\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator *= (Complex<_Tp>& a, _Tp b)\n{\n    a.re *= b; a.im *= b; return a;\n}\n\ntemplate<typename _Tp> static inline\ndouble abs(const Complex<_Tp>& a)\n{\n    return std::sqrt( (double)a.re*a.re + (double)a.im*a.im);\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator / (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    double t = 1./((double)b.re*b.re + (double)b.im*b.im);\n    return Complex<_Tp>( (_Tp)((a.re*b.re + a.im*b.im)*t),\n                        (_Tp)((-a.re*b.im + a.im*b.re)*t) );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator /= (Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    return (a = a / b);\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator / (const Complex<_Tp>& a, _Tp b)\n{\n    _Tp t = (_Tp)1/b;\n    return Complex<_Tp>( a.re*t, a.im*t );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator / (_Tp b, const Complex<_Tp>& a)\n{\n    return Complex<_Tp>(b)/a;\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator /= (const Complex<_Tp>& a, _Tp b)\n{\n    _Tp t = (_Tp)1/b;\n    a.re *= t; a.im *= t; return a;\n}\n\n\n\n//////////////////////////////// 2D Point ///////////////////////////////\n\ntemplate<typename _Tp> inline\nPoint_<_Tp>::Point_()\n    : x(0), y(0) {}\n\ntemplate<typename _Tp> inline\nPoint_<_Tp>::Point_(_Tp _x, _Tp _y)\n    : x(_x), y(_y) {}\n\ntemplate<typename _Tp> inline\nPoint_<_Tp>::Point_(const Point_& pt)\n    : x(pt.x), y(pt.y) {}\n\ntemplate<typename _Tp> inline\nPoint_<_Tp>::Point_(const Size_<_Tp>& sz)\n    : x(sz.width), y(sz.height) {}\n\ntemplate<typename _Tp> inline\nPoint_<_Tp>::Point_(const Vec<_Tp,2>& v)\n    : x(v[0]), y(v[1]) {}\n\ntemplate<typename _Tp> inline\nPoint_<_Tp>& Point_<_Tp>::operator = (const Point_& pt)\n{\n    x = pt.x; y = pt.y;\n    return *this;\n}\n\ntemplate<typename _Tp> template<typename _Tp2> inline\nPoint_<_Tp>::operator Point_<_Tp2>() const\n{\n    return Point_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y));\n}\n\ntemplate<typename _Tp> inline\nPoint_<_Tp>::operator Vec<_Tp, 2>() const\n{\n    return Vec<_Tp, 2>(x, y);\n}\n\ntemplate<typename _Tp> inline\n_Tp Point_<_Tp>::dot(const Point_& pt) const\n{\n    return saturate_cast<_Tp>(x*pt.x + y*pt.y);\n}\n\ntemplate<typename _Tp> inline\ndouble Point_<_Tp>::ddot(const Point_& pt) const\n{\n    return (double)x*pt.x + (double)y*pt.y;\n}\n\ntemplate<typename _Tp> inline\ndouble Point_<_Tp>::cross(const Point_& pt) const\n{\n    return (double)x*pt.y - (double)y*pt.x;\n}\n\ntemplate<typename _Tp> inline bool\nPoint_<_Tp>::inside( const Rect_<_Tp>& r ) const\n{\n    return r.contains(*this);\n}\n\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp>& operator += (Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    a.x += b.x;\n    a.y += b.y;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp>& operator -= (Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    a.x -= b.x;\n    a.y -= b.y;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp>& operator *= (Point_<_Tp>& a, int b)\n{\n    a.x = saturate_cast<_Tp>(a.x * b);\n    a.y = saturate_cast<_Tp>(a.y * b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp>& operator *= (Point_<_Tp>& a, float b)\n{\n    a.x = saturate_cast<_Tp>(a.x * b);\n    a.y = saturate_cast<_Tp>(a.y * b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp>& operator *= (Point_<_Tp>& a, double b)\n{\n    a.x = saturate_cast<_Tp>(a.x * b);\n    a.y = saturate_cast<_Tp>(a.y * b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp>& operator /= (Point_<_Tp>& a, int b)\n{\n    a.x = saturate_cast<_Tp>(a.x / b);\n    a.y = saturate_cast<_Tp>(a.y / b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp>& operator /= (Point_<_Tp>& a, float b)\n{\n    a.x = saturate_cast<_Tp>(a.x / b);\n    a.y = saturate_cast<_Tp>(a.y / b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp>& operator /= (Point_<_Tp>& a, double b)\n{\n    a.x = saturate_cast<_Tp>(a.x / b);\n    a.y = saturate_cast<_Tp>(a.y / b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\ndouble norm(const Point_<_Tp>& pt)\n{\n    return std::sqrt((double)pt.x*pt.x + (double)pt.y*pt.y);\n}\n\ntemplate<typename _Tp> static inline\nbool operator == (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return a.x == b.x && a.y == b.y;\n}\n\ntemplate<typename _Tp> static inline\nbool operator != (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return a.x != b.x || a.y != b.y;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator + (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return Point_<_Tp>( saturate_cast<_Tp>(a.x + b.x), saturate_cast<_Tp>(a.y + b.y) );\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator - (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return Point_<_Tp>( saturate_cast<_Tp>(a.x - b.x), saturate_cast<_Tp>(a.y - b.y) );\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator - (const Point_<_Tp>& a)\n{\n    return Point_<_Tp>( saturate_cast<_Tp>(-a.x), saturate_cast<_Tp>(-a.y) );\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator * (const Point_<_Tp>& a, int b)\n{\n    return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) );\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator * (int a, const Point_<_Tp>& b)\n{\n    return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) );\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator * (const Point_<_Tp>& a, float b)\n{\n    return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) );\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator * (float a, const Point_<_Tp>& b)\n{\n    return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) );\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator * (const Point_<_Tp>& a, double b)\n{\n    return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) );\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator * (double a, const Point_<_Tp>& b)\n{\n    return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) );\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator * (const Matx<_Tp, 2, 2>& a, const Point_<_Tp>& b)\n{\n    Matx<_Tp, 2, 1> tmp = a * Vec<_Tp,2>(b.x, b.y);\n    return Point_<_Tp>(tmp.val[0], tmp.val[1]);\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (const Matx<_Tp, 3, 3>& a, const Point_<_Tp>& b)\n{\n    Matx<_Tp, 3, 1> tmp = a * Vec<_Tp,3>(b.x, b.y, 1);\n    return Point3_<_Tp>(tmp.val[0], tmp.val[1], tmp.val[2]);\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator / (const Point_<_Tp>& a, int b)\n{\n    Point_<_Tp> tmp(a);\n    tmp /= b;\n    return tmp;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator / (const Point_<_Tp>& a, float b)\n{\n    Point_<_Tp> tmp(a);\n    tmp /= b;\n    return tmp;\n}\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator / (const Point_<_Tp>& a, double b)\n{\n    Point_<_Tp> tmp(a);\n    tmp /= b;\n    return tmp;\n}\n\n\n\n//////////////////////////////// 3D Point ///////////////////////////////\n\ntemplate<typename _Tp> inline\nPoint3_<_Tp>::Point3_()\n    : x(0), y(0), z(0) {}\n\ntemplate<typename _Tp> inline\nPoint3_<_Tp>::Point3_(_Tp _x, _Tp _y, _Tp _z)\n    : x(_x), y(_y), z(_z) {}\n\ntemplate<typename _Tp> inline\nPoint3_<_Tp>::Point3_(const Point3_& pt)\n    : x(pt.x), y(pt.y), z(pt.z) {}\n\ntemplate<typename _Tp> inline\nPoint3_<_Tp>::Point3_(const Point_<_Tp>& pt)\n    : x(pt.x), y(pt.y), z(_Tp()) {}\n\ntemplate<typename _Tp> inline\nPoint3_<_Tp>::Point3_(const Vec<_Tp, 3>& v)\n    : x(v[0]), y(v[1]), z(v[2]) {}\n\ntemplate<typename _Tp> template<typename _Tp2> inline\nPoint3_<_Tp>::operator Point3_<_Tp2>() const\n{\n    return Point3_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y), saturate_cast<_Tp2>(z));\n}\n\ntemplate<typename _Tp> inline\nPoint3_<_Tp>::operator Vec<_Tp, 3>() const\n{\n    return Vec<_Tp, 3>(x, y, z);\n}\n\ntemplate<typename _Tp> inline\nPoint3_<_Tp>& Point3_<_Tp>::operator = (const Point3_& pt)\n{\n    x = pt.x; y = pt.y; z = pt.z;\n    return *this;\n}\n\ntemplate<typename _Tp> inline\n_Tp Point3_<_Tp>::dot(const Point3_& pt) const\n{\n    return saturate_cast<_Tp>(x*pt.x + y*pt.y + z*pt.z);\n}\n\ntemplate<typename _Tp> inline\ndouble Point3_<_Tp>::ddot(const Point3_& pt) const\n{\n    return (double)x*pt.x + (double)y*pt.y + (double)z*pt.z;\n}\n\ntemplate<typename _Tp> inline\nPoint3_<_Tp> Point3_<_Tp>::cross(const Point3_<_Tp>& pt) const\n{\n    return Point3_<_Tp>(y*pt.z - z*pt.y, z*pt.x - x*pt.z, x*pt.y - y*pt.x);\n}\n\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp>& operator += (Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    a.x += b.x;\n    a.y += b.y;\n    a.z += b.z;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp>& operator -= (Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    a.x -= b.x;\n    a.y -= b.y;\n    a.z -= b.z;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp>& operator *= (Point3_<_Tp>& a, int b)\n{\n    a.x = saturate_cast<_Tp>(a.x * b);\n    a.y = saturate_cast<_Tp>(a.y * b);\n    a.z = saturate_cast<_Tp>(a.z * b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp>& operator *= (Point3_<_Tp>& a, float b)\n{\n    a.x = saturate_cast<_Tp>(a.x * b);\n    a.y = saturate_cast<_Tp>(a.y * b);\n    a.z = saturate_cast<_Tp>(a.z * b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp>& operator *= (Point3_<_Tp>& a, double b)\n{\n    a.x = saturate_cast<_Tp>(a.x * b);\n    a.y = saturate_cast<_Tp>(a.y * b);\n    a.z = saturate_cast<_Tp>(a.z * b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp>& operator /= (Point3_<_Tp>& a, int b)\n{\n    a.x = saturate_cast<_Tp>(a.x / b);\n    a.y = saturate_cast<_Tp>(a.y / b);\n    a.z = saturate_cast<_Tp>(a.z / b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp>& operator /= (Point3_<_Tp>& a, float b)\n{\n    a.x = saturate_cast<_Tp>(a.x / b);\n    a.y = saturate_cast<_Tp>(a.y / b);\n    a.z = saturate_cast<_Tp>(a.z / b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp>& operator /= (Point3_<_Tp>& a, double b)\n{\n    a.x = saturate_cast<_Tp>(a.x / b);\n    a.y = saturate_cast<_Tp>(a.y / b);\n    a.z = saturate_cast<_Tp>(a.z / b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline\ndouble norm(const Point3_<_Tp>& pt)\n{\n    return std::sqrt((double)pt.x*pt.x + (double)pt.y*pt.y + (double)pt.z*pt.z);\n}\n\ntemplate<typename _Tp> static inline\nbool operator == (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    return a.x == b.x && a.y == b.y && a.z == b.z;\n}\n\ntemplate<typename _Tp> static inline\nbool operator != (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    return a.x != b.x || a.y != b.y || a.z != b.z;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator + (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    return Point3_<_Tp>( saturate_cast<_Tp>(a.x + b.x), saturate_cast<_Tp>(a.y + b.y), saturate_cast<_Tp>(a.z + b.z));\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator - (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    return Point3_<_Tp>( saturate_cast<_Tp>(a.x - b.x), saturate_cast<_Tp>(a.y - b.y), saturate_cast<_Tp>(a.z - b.z));\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator - (const Point3_<_Tp>& a)\n{\n    return Point3_<_Tp>( saturate_cast<_Tp>(-a.x), saturate_cast<_Tp>(-a.y), saturate_cast<_Tp>(-a.z) );\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (const Point3_<_Tp>& a, int b)\n{\n    return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b), saturate_cast<_Tp>(a.z*b) );\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (int a, const Point3_<_Tp>& b)\n{\n    return Point3_<_Tp>( saturate_cast<_Tp>(b.x * a), saturate_cast<_Tp>(b.y * a), saturate_cast<_Tp>(b.z * a) );\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (const Point3_<_Tp>& a, float b)\n{\n    return Point3_<_Tp>( saturate_cast<_Tp>(a.x * b), saturate_cast<_Tp>(a.y * b), saturate_cast<_Tp>(a.z * b) );\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (float a, const Point3_<_Tp>& b)\n{\n    return Point3_<_Tp>( saturate_cast<_Tp>(b.x * a), saturate_cast<_Tp>(b.y * a), saturate_cast<_Tp>(b.z * a) );\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (const Point3_<_Tp>& a, double b)\n{\n    return Point3_<_Tp>( saturate_cast<_Tp>(a.x * b), saturate_cast<_Tp>(a.y * b), saturate_cast<_Tp>(a.z * b) );\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (double a, const Point3_<_Tp>& b)\n{\n    return Point3_<_Tp>( saturate_cast<_Tp>(b.x * a), saturate_cast<_Tp>(b.y * a), saturate_cast<_Tp>(b.z * a) );\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (const Matx<_Tp, 3, 3>& a, const Point3_<_Tp>& b)\n{\n    Matx<_Tp, 3, 1> tmp = a * Vec<_Tp,3>(b.x, b.y, b.z);\n    return Point3_<_Tp>(tmp.val[0], tmp.val[1], tmp.val[2]);\n}\n\ntemplate<typename _Tp> static inline\nMatx<_Tp, 4, 1> operator * (const Matx<_Tp, 4, 4>& a, const Point3_<_Tp>& b)\n{\n    return a * Matx<_Tp, 4, 1>(b.x, b.y, b.z, 1);\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator / (const Point3_<_Tp>& a, int b)\n{\n    Point3_<_Tp> tmp(a);\n    tmp /= b;\n    return tmp;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator / (const Point3_<_Tp>& a, float b)\n{\n    Point3_<_Tp> tmp(a);\n    tmp /= b;\n    return tmp;\n}\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator / (const Point3_<_Tp>& a, double b)\n{\n    Point3_<_Tp> tmp(a);\n    tmp /= b;\n    return tmp;\n}\n\n\n\n////////////////////////////////// Size /////////////////////////////////\n\ntemplate<typename _Tp> inline\nSize_<_Tp>::Size_()\n    : width(0), height(0) {}\n\ntemplate<typename _Tp> inline\nSize_<_Tp>::Size_(_Tp _width, _Tp _height)\n    : width(_width), height(_height) {}\n\ntemplate<typename _Tp> inline\nSize_<_Tp>::Size_(const Size_& sz)\n    : width(sz.width), height(sz.height) {}\n\ntemplate<typename _Tp> inline\nSize_<_Tp>::Size_(const Point_<_Tp>& pt)\n    : width(pt.x), height(pt.y) {}\n\ntemplate<typename _Tp> template<typename _Tp2> inline\nSize_<_Tp>::operator Size_<_Tp2>() const\n{\n    return Size_<_Tp2>(saturate_cast<_Tp2>(width), saturate_cast<_Tp2>(height));\n}\n\ntemplate<typename _Tp> inline\nSize_<_Tp>& Size_<_Tp>::operator = (const Size_<_Tp>& sz)\n{\n    width = sz.width; height = sz.height;\n    return *this;\n}\n\ntemplate<typename _Tp> inline\n_Tp Size_<_Tp>::area() const\n{\n    return width * height;\n}\n\ntemplate<typename _Tp> static inline\nSize_<_Tp>& operator *= (Size_<_Tp>& a, _Tp b)\n{\n    a.width *= b;\n    a.height *= b;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nSize_<_Tp> operator * (const Size_<_Tp>& a, _Tp b)\n{\n    Size_<_Tp> tmp(a);\n    tmp *= b;\n    return tmp;\n}\n\ntemplate<typename _Tp> static inline\nSize_<_Tp>& operator /= (Size_<_Tp>& a, _Tp b)\n{\n    a.width /= b;\n    a.height /= b;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nSize_<_Tp> operator / (const Size_<_Tp>& a, _Tp b)\n{\n    Size_<_Tp> tmp(a);\n    tmp /= b;\n    return tmp;\n}\n\ntemplate<typename _Tp> static inline\nSize_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b)\n{\n    a.width += b.width;\n    a.height += b.height;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nSize_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{\n    Size_<_Tp> tmp(a);\n    tmp += b;\n    return tmp;\n}\n\ntemplate<typename _Tp> static inline\nSize_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b)\n{\n    a.width -= b.width;\n    a.height -= b.height;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nSize_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{\n    Size_<_Tp> tmp(a);\n    tmp -= b;\n    return tmp;\n}\n\ntemplate<typename _Tp> static inline\nbool operator == (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{\n    return a.width == b.width && a.height == b.height;\n}\n\ntemplate<typename _Tp> static inline\nbool operator != (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{\n    return !(a == b);\n}\n\n\n\n////////////////////////////////// Rect /////////////////////////////////\n\ntemplate<typename _Tp> inline\nRect_<_Tp>::Rect_()\n    : x(0), y(0), width(0), height(0) {}\n\ntemplate<typename _Tp> inline\nRect_<_Tp>::Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height)\n    : x(_x), y(_y), width(_width), height(_height) {}\n\ntemplate<typename _Tp> inline\nRect_<_Tp>::Rect_(const Rect_<_Tp>& r)\n    : x(r.x), y(r.y), width(r.width), height(r.height) {}\n\ntemplate<typename _Tp> inline\nRect_<_Tp>::Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz)\n    : x(org.x), y(org.y), width(sz.width), height(sz.height) {}\n\ntemplate<typename _Tp> inline\nRect_<_Tp>::Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2)\n{\n    x = std::min(pt1.x, pt2.x);\n    y = std::min(pt1.y, pt2.y);\n    width = std::max(pt1.x, pt2.x) - x;\n    height = std::max(pt1.y, pt2.y) - y;\n}\n\ntemplate<typename _Tp> inline\nRect_<_Tp>& Rect_<_Tp>::operator = ( const Rect_<_Tp>& r )\n{\n    x = r.x;\n    y = r.y;\n    width = r.width;\n    height = r.height;\n    return *this;\n}\n\ntemplate<typename _Tp> inline\nPoint_<_Tp> Rect_<_Tp>::tl() const\n{\n    return Point_<_Tp>(x,y);\n}\n\ntemplate<typename _Tp> inline\nPoint_<_Tp> Rect_<_Tp>::br() const\n{\n    return Point_<_Tp>(x + width, y + height);\n}\n\ntemplate<typename _Tp> inline\nSize_<_Tp> Rect_<_Tp>::size() const\n{\n    return Size_<_Tp>(width, height);\n}\n\ntemplate<typename _Tp> inline\n_Tp Rect_<_Tp>::area() const\n{\n    return width * height;\n}\n\ntemplate<typename _Tp> template<typename _Tp2> inline\nRect_<_Tp>::operator Rect_<_Tp2>() const\n{\n    return Rect_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y), saturate_cast<_Tp2>(width), saturate_cast<_Tp2>(height));\n}\n\ntemplate<typename _Tp> inline\nbool Rect_<_Tp>::contains(const Point_<_Tp>& pt) const\n{\n    return x <= pt.x && pt.x < x + width && y <= pt.y && pt.y < y + height;\n}\n\n\ntemplate<typename _Tp> static inline\nRect_<_Tp>& operator += ( Rect_<_Tp>& a, const Point_<_Tp>& b )\n{\n    a.x += b.x;\n    a.y += b.y;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp>& operator -= ( Rect_<_Tp>& a, const Point_<_Tp>& b )\n{\n    a.x -= b.x;\n    a.y -= b.y;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp>& operator += ( Rect_<_Tp>& a, const Size_<_Tp>& b )\n{\n    a.width += b.width;\n    a.height += b.height;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp>& operator -= ( Rect_<_Tp>& a, const Size_<_Tp>& b )\n{\n    a.width -= b.width;\n    a.height -= b.height;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp>& operator &= ( Rect_<_Tp>& a, const Rect_<_Tp>& b )\n{\n    _Tp x1 = std::max(a.x, b.x);\n    _Tp y1 = std::max(a.y, b.y);\n    a.width = std::min(a.x + a.width, b.x + b.width) - x1;\n    a.height = std::min(a.y + a.height, b.y + b.height) - y1;\n    a.x = x1;\n    a.y = y1;\n    if( a.width <= 0 || a.height <= 0 )\n        a = Rect();\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp>& operator |= ( Rect_<_Tp>& a, const Rect_<_Tp>& b )\n{\n    _Tp x1 = std::min(a.x, b.x);\n    _Tp y1 = std::min(a.y, b.y);\n    a.width = std::max(a.x + a.width, b.x + b.width) - x1;\n    a.height = std::max(a.y + a.height, b.y + b.height) - y1;\n    a.x = x1;\n    a.y = y1;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nbool operator == (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    return a.x == b.x && a.y == b.y && a.width == b.width && a.height == b.height;\n}\n\ntemplate<typename _Tp> static inline\nbool operator != (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    return a.x != b.x || a.y != b.y || a.width != b.width || a.height != b.height;\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp> operator + (const Rect_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return Rect_<_Tp>( a.x + b.x, a.y + b.y, a.width, a.height );\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp> operator - (const Rect_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return Rect_<_Tp>( a.x - b.x, a.y - b.y, a.width, a.height );\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp> operator + (const Rect_<_Tp>& a, const Size_<_Tp>& b)\n{\n    return Rect_<_Tp>( a.x, a.y, a.width + b.width, a.height + b.height );\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp> operator & (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    Rect_<_Tp> c = a;\n    return c &= b;\n}\n\ntemplate<typename _Tp> static inline\nRect_<_Tp> operator | (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    Rect_<_Tp> c = a;\n    return c |= b;\n}\n\n\n\n////////////////////////////// RotatedRect //////////////////////////////\n\ninline\nRotatedRect::RotatedRect()\n    : center(), size(), angle(0) {}\n\ninline\nRotatedRect::RotatedRect(const Point2f& _center, const Size2f& _size, float _angle)\n    : center(_center), size(_size), angle(_angle) {}\n\n\n\n///////////////////////////////// Range /////////////////////////////////\n\ninline\nRange::Range()\n    : start(0), end(0) {}\n\ninline\nRange::Range(int _start, int _end)\n    : start(_start), end(_end) {}\n\ninline\nint Range::size() const\n{\n    return end - start;\n}\n\ninline\nbool Range::empty() const\n{\n    return start == end;\n}\n\ninline\nRange Range::all()\n{\n    return Range(INT_MIN, INT_MAX);\n}\n\n\nstatic inline\nbool operator == (const Range& r1, const Range& r2)\n{\n    return r1.start == r2.start && r1.end == r2.end;\n}\n\nstatic inline\nbool operator != (const Range& r1, const Range& r2)\n{\n    return !(r1 == r2);\n}\n\nstatic inline\nbool operator !(const Range& r)\n{\n    return r.start == r.end;\n}\n\nstatic inline\nRange operator & (const Range& r1, const Range& r2)\n{\n    Range r(std::max(r1.start, r2.start), std::min(r1.end, r2.end));\n    r.end = std::max(r.end, r.start);\n    return r;\n}\n\nstatic inline\nRange& operator &= (Range& r1, const Range& r2)\n{\n    r1 = r1 & r2;\n    return r1;\n}\n\nstatic inline\nRange operator + (const Range& r1, int delta)\n{\n    return Range(r1.start + delta, r1.end + delta);\n}\n\nstatic inline\nRange operator + (int delta, const Range& r1)\n{\n    return Range(r1.start + delta, r1.end + delta);\n}\n\nstatic inline\nRange operator - (const Range& r1, int delta)\n{\n    return r1 + (-delta);\n}\n\n\n\n///////////////////////////////// Scalar ////////////////////////////////\n\ntemplate<typename _Tp> inline\nScalar_<_Tp>::Scalar_()\n{\n    this->val[0] = this->val[1] = this->val[2] = this->val[3] = 0;\n}\n\ntemplate<typename _Tp> inline\nScalar_<_Tp>::Scalar_(_Tp v0, _Tp v1, _Tp v2, _Tp v3)\n{\n    this->val[0] = v0;\n    this->val[1] = v1;\n    this->val[2] = v2;\n    this->val[3] = v3;\n}\n\ntemplate<typename _Tp> template<typename _Tp2, int cn> inline\nScalar_<_Tp>::Scalar_(const Vec<_Tp2, cn>& v)\n{\n    int i;\n    for( i = 0; i < (cn < 4 ? cn : 4); i++ )\n        this->val[i] = cv::saturate_cast<_Tp>(v.val[i]);\n    for( ; i < 4; i++ )\n        this->val[i] = 0;\n}\n\ntemplate<typename _Tp> inline\nScalar_<_Tp>::Scalar_(_Tp v0)\n{\n    this->val[0] = v0;\n    this->val[1] = this->val[2] = this->val[3] = 0;\n}\n\ntemplate<typename _Tp> inline\nScalar_<_Tp> Scalar_<_Tp>::all(_Tp v0)\n{\n    return Scalar_<_Tp>(v0, v0, v0, v0);\n}\n\n\ntemplate<typename _Tp> inline\nScalar_<_Tp> Scalar_<_Tp>::mul(const Scalar_<_Tp>& a, double scale ) const\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(this->val[0] * a.val[0] * scale),\n                        saturate_cast<_Tp>(this->val[1] * a.val[1] * scale),\n                        saturate_cast<_Tp>(this->val[2] * a.val[2] * scale),\n                        saturate_cast<_Tp>(this->val[3] * a.val[3] * scale));\n}\n\ntemplate<typename _Tp> inline\nScalar_<_Tp> Scalar_<_Tp>::conj() const\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>( this->val[0]),\n                        saturate_cast<_Tp>(-this->val[1]),\n                        saturate_cast<_Tp>(-this->val[2]),\n                        saturate_cast<_Tp>(-this->val[3]));\n}\n\ntemplate<typename _Tp> inline\nbool Scalar_<_Tp>::isReal() const\n{\n    return this->val[1] == 0 && this->val[2] == 0 && this->val[3] == 0;\n}\n\n\ntemplate<typename _Tp> template<typename T2> inline\nScalar_<_Tp>::operator Scalar_<T2>() const\n{\n    return Scalar_<T2>(saturate_cast<T2>(this->val[0]),\n                       saturate_cast<T2>(this->val[1]),\n                       saturate_cast<T2>(this->val[2]),\n                       saturate_cast<T2>(this->val[3]));\n}\n\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator += (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a.val[0] += b.val[0];\n    a.val[1] += b.val[1];\n    a.val[2] += b.val[2];\n    a.val[3] += b.val[3];\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator -= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a.val[0] -= b.val[0];\n    a.val[1] -= b.val[1];\n    a.val[2] -= b.val[2];\n    a.val[3] -= b.val[3];\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator *= ( Scalar_<_Tp>& a, _Tp v )\n{\n    a.val[0] *= v;\n    a.val[1] *= v;\n    a.val[2] *= v;\n    a.val[3] *= v;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nbool operator == ( const Scalar_<_Tp>& a, const Scalar_<_Tp>& b )\n{\n    return a.val[0] == b.val[0] && a.val[1] == b.val[1] &&\n           a.val[2] == b.val[2] && a.val[3] == b.val[3];\n}\n\ntemplate<typename _Tp> static inline\nbool operator != ( const Scalar_<_Tp>& a, const Scalar_<_Tp>& b )\n{\n    return a.val[0] != b.val[0] || a.val[1] != b.val[1] ||\n           a.val[2] != b.val[2] || a.val[3] != b.val[3];\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator + (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return Scalar_<_Tp>(a.val[0] + b.val[0],\n                        a.val[1] + b.val[1],\n                        a.val[2] + b.val[2],\n                        a.val[3] + b.val[3]);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator - (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] - b.val[0]),\n                        saturate_cast<_Tp>(a.val[1] - b.val[1]),\n                        saturate_cast<_Tp>(a.val[2] - b.val[2]),\n                        saturate_cast<_Tp>(a.val[3] - b.val[3]));\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator * (const Scalar_<_Tp>& a, _Tp alpha)\n{\n    return Scalar_<_Tp>(a.val[0] * alpha,\n                        a.val[1] * alpha,\n                        a.val[2] * alpha,\n                        a.val[3] * alpha);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator * (_Tp alpha, const Scalar_<_Tp>& a)\n{\n    return a*alpha;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator - (const Scalar_<_Tp>& a)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(-a.val[0]),\n                        saturate_cast<_Tp>(-a.val[1]),\n                        saturate_cast<_Tp>(-a.val[2]),\n                        saturate_cast<_Tp>(-a.val[3]));\n}\n\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator * (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a[0]*b[0] - a[1]*b[1] - a[2]*b[2] - a[3]*b[3]),\n                        saturate_cast<_Tp>(a[0]*b[1] + a[1]*b[0] + a[2]*b[3] - a[3]*b[2]),\n                        saturate_cast<_Tp>(a[0]*b[2] - a[1]*b[3] + a[2]*b[0] + a[3]*b[1]),\n                        saturate_cast<_Tp>(a[0]*b[3] + a[1]*b[2] - a[2]*b[1] + a[3]*b[0]));\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator *= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a = a * b;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator / (const Scalar_<_Tp>& a, _Tp alpha)\n{\n    return Scalar_<_Tp>(a.val[0] / alpha,\n                        a.val[1] / alpha,\n                        a.val[2] / alpha,\n                        a.val[3] / alpha);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<float> operator / (const Scalar_<float>& a, float alpha)\n{\n    float s = 1 / alpha;\n    return Scalar_<float>(a.val[0] * s, a.val[1] * s, a.val[2] * s, a.val[3] * s);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<double> operator / (const Scalar_<double>& a, double alpha)\n{\n    double s = 1 / alpha;\n    return Scalar_<double>(a.val[0] * s, a.val[1] * s, a.val[2] * s, a.val[3] * s);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator /= (Scalar_<_Tp>& a, _Tp alpha)\n{\n    a = a / alpha;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator / (_Tp a, const Scalar_<_Tp>& b)\n{\n    _Tp s = a / (b[0]*b[0] + b[1]*b[1] + b[2]*b[2] + b[3]*b[3]);\n    return b.conj() * s;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator / (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return a * ((_Tp)1 / b);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator /= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a = a / b;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nScalar operator * (const Matx<_Tp, 4, 4>& a, const Scalar& b)\n{\n    Matx<double, 4, 1> c((Matx<double, 4, 4>)a, b, Matx_MatMulOp());\n    return reinterpret_cast<const Scalar&>(c);\n}\n\ntemplate<> inline\nScalar operator * (const Matx<double, 4, 4>& a, const Scalar& b)\n{\n    Matx<double, 4, 1> c(a, b, Matx_MatMulOp());\n    return reinterpret_cast<const Scalar&>(c);\n}\n\n\n\n//////////////////////////////// KeyPoint ///////////////////////////////\n\ninline\nKeyPoint::KeyPoint()\n    : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {}\n\ninline\nKeyPoint::KeyPoint(Point2f _pt, float _size, float _angle, float _response, int _octave, int _class_id)\n    : pt(_pt), size(_size), angle(_angle), response(_response), octave(_octave), class_id(_class_id) {}\n\ninline\nKeyPoint::KeyPoint(float x, float y, float _size, float _angle, float _response, int _octave, int _class_id)\n    : pt(x, y), size(_size), angle(_angle), response(_response), octave(_octave), class_id(_class_id) {}\n\n\n\n///////////////////////////////// DMatch ////////////////////////////////\n\ninline\nDMatch::DMatch()\n    : queryIdx(-1), trainIdx(-1), imgIdx(-1), distance(FLT_MAX) {}\n\ninline\nDMatch::DMatch(int _queryIdx, int _trainIdx, float _distance)\n    : queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(-1), distance(_distance) {}\n\ninline\nDMatch::DMatch(int _queryIdx, int _trainIdx, int _imgIdx, float _distance)\n    : queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(_imgIdx), distance(_distance) {}\n\ninline\nbool DMatch::operator < (const DMatch &m) const\n{\n    return distance < m.distance;\n}\n\n\n\n////////////////////////////// TermCriteria /////////////////////////////\n\ninline\nTermCriteria::TermCriteria()\n    : type(0), maxCount(0), epsilon(0) {}\n\ninline\nTermCriteria::TermCriteria(int _type, int _maxCount, double _epsilon)\n    : type(_type), maxCount(_maxCount), epsilon(_epsilon) {}\n\n//! @endcond\n\n} // cv\n\n#endif //__OPENCV_CORE_TYPES_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/types_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_TYPES_H__\n#define __OPENCV_CORE_TYPES_H__\n\n#ifdef HAVE_IPL\n#  ifndef __IPL_H__\n#    if defined WIN32 || defined _WIN32\n#      include <ipl.h>\n#    else\n#      include <ipl/ipl.h>\n#    endif\n#  endif\n#elif defined __IPL_H__\n#  define HAVE_IPL\n#endif\n\n#include \"opencv2/core/cvdef.h\"\n\n#ifndef SKIP_INCLUDES\n#include <assert.h>\n#include <stdlib.h>\n#include <string.h>\n#include <float.h>\n#endif // SKIP_INCLUDES\n\n#if defined WIN32 || defined _WIN32\n#  define CV_CDECL __cdecl\n#  define CV_STDCALL __stdcall\n#else\n#  define CV_CDECL\n#  define CV_STDCALL\n#endif\n\n#ifndef CV_DEFAULT\n#  ifdef __cplusplus\n#    define CV_DEFAULT(val) = val\n#  else\n#    define CV_DEFAULT(val)\n#  endif\n#endif\n\n#ifndef CV_EXTERN_C_FUNCPTR\n#  ifdef __cplusplus\n#    define CV_EXTERN_C_FUNCPTR(x) extern \"C\" { typedef x; }\n#  else\n#    define CV_EXTERN_C_FUNCPTR(x) typedef x\n#  endif\n#endif\n\n#ifndef CVAPI\n#  define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL\n#endif\n\n#ifndef CV_IMPL\n#  define CV_IMPL CV_EXTERN_C\n#endif\n\n#ifdef __cplusplus\n#  include \"opencv2/core.hpp\"\n#endif\n\n/** @addtogroup core_c\n    @{\n*/\n\n/** @brief This is the \"metatype\" used *only* as a function parameter.\n\nIt denotes that the function accepts arrays of multiple types, such as IplImage*, CvMat* or even\nCvSeq* sometimes. The particular array type is determined at runtime by analyzing the first 4\nbytes of the header. In C++ interface the role of CvArr is played by InputArray and OutputArray.\n */\ntypedef void CvArr;\n\ntypedef int CVStatus;\n\n/** @see cv::Error::Code */\nenum {\n CV_StsOk=                       0,  /**< everything is ok                */\n CV_StsBackTrace=               -1,  /**< pseudo error for back trace     */\n CV_StsError=                   -2,  /**< unknown /unspecified error      */\n CV_StsInternal=                -3,  /**< internal error (bad state)      */\n CV_StsNoMem=                   -4,  /**< insufficient memory             */\n CV_StsBadArg=                  -5,  /**< function arg/param is bad       */\n CV_StsBadFunc=                 -6,  /**< unsupported function            */\n CV_StsNoConv=                  -7,  /**< iter. didn't converge           */\n CV_StsAutoTrace=               -8,  /**< tracing                         */\n CV_HeaderIsNull=               -9,  /**< image header is NULL            */\n CV_BadImageSize=              -10,  /**< image size is invalid           */\n CV_BadOffset=                 -11,  /**< offset is invalid               */\n CV_BadDataPtr=                -12,  /**/\n CV_BadStep=                   -13,  /**/\n CV_BadModelOrChSeq=           -14,  /**/\n CV_BadNumChannels=            -15,  /**/\n CV_BadNumChannel1U=           -16,  /**/\n CV_BadDepth=                  -17,  /**/\n CV_BadAlphaChannel=           -18,  /**/\n CV_BadOrder=                  -19,  /**/\n CV_BadOrigin=                 -20,  /**/\n CV_BadAlign=                  -21,  /**/\n CV_BadCallBack=               -22,  /**/\n CV_BadTileSize=               -23,  /**/\n CV_BadCOI=                    -24,  /**/\n CV_BadROISize=                -25,  /**/\n CV_MaskIsTiled=               -26,  /**/\n CV_StsNullPtr=                -27,  /**< null pointer */\n CV_StsVecLengthErr=           -28,  /**< incorrect vector length */\n CV_StsFilterStructContentErr= -29,  /**< incorr. filter structure content */\n CV_StsKernelStructContentErr= -30,  /**< incorr. transform kernel content */\n CV_StsFilterOffsetErr=        -31,  /**< incorrect filter offset value */\n CV_StsBadSize=                -201, /**< the input/output structure size is incorrect  */\n CV_StsDivByZero=              -202, /**< division by zero */\n CV_StsInplaceNotSupported=    -203, /**< in-place operation is not supported */\n CV_StsObjectNotFound=         -204, /**< request can't be completed */\n CV_StsUnmatchedFormats=       -205, /**< formats of input/output arrays differ */\n CV_StsBadFlag=                -206, /**< flag is wrong or not supported */\n CV_StsBadPoint=               -207, /**< bad CvPoint */\n CV_StsBadMask=                -208, /**< bad format of mask (neither 8uC1 nor 8sC1)*/\n CV_StsUnmatchedSizes=         -209, /**< sizes of input/output structures do not match */\n CV_StsUnsupportedFormat=      -210, /**< the data format/type is not supported by the function*/\n CV_StsOutOfRange=             -211, /**< some of parameters are out of range */\n CV_StsParseError=             -212, /**< invalid syntax/structure of the parsed file */\n CV_StsNotImplemented=         -213, /**< the requested function/feature is not implemented */\n CV_StsBadMemBlock=            -214, /**< an allocated block has been corrupted */\n CV_StsAssert=                 -215, /**< assertion failed */\n CV_GpuNotSupported=           -216,\n CV_GpuApiCallError=           -217,\n CV_OpenGlNotSupported=        -218,\n CV_OpenGlApiCallError=        -219,\n CV_OpenCLApiCallError=        -220,\n CV_OpenCLDoubleNotSupported=  -221,\n CV_OpenCLInitError=           -222,\n CV_OpenCLNoAMDBlasFft=        -223\n};\n\n/****************************************************************************************\\\n*                             Common macros and inline functions                         *\n\\****************************************************************************************/\n\n#define CV_SWAP(a,b,t) ((t) = (a), (a) = (b), (b) = (t))\n\n/** min & max without jumps */\n#define  CV_IMIN(a, b)  ((a) ^ (((a)^(b)) & (((a) < (b)) - 1)))\n\n#define  CV_IMAX(a, b)  ((a) ^ (((a)^(b)) & (((a) > (b)) - 1)))\n\n/** absolute value without jumps */\n#ifndef __cplusplus\n#  define  CV_IABS(a)     (((a) ^ ((a) < 0 ? -1 : 0)) - ((a) < 0 ? -1 : 0))\n#else\n#  define  CV_IABS(a)     abs(a)\n#endif\n#define  CV_CMP(a,b)    (((a) > (b)) - ((a) < (b)))\n#define  CV_SIGN(a)     CV_CMP((a),0)\n\n#define cvInvSqrt(value) ((float)(1./sqrt(value)))\n#define cvSqrt(value)  ((float)sqrt(value))\n\n\n/*************** Random number generation *******************/\n\ntypedef uint64 CvRNG;\n\n#define CV_RNG_COEFF 4164903690U\n\n/** @brief Initializes a random number generator state.\n\nThe function initializes a random number generator and returns the state. The pointer to the state\ncan be then passed to the cvRandInt, cvRandReal and cvRandArr functions. In the current\nimplementation a multiply-with-carry generator is used.\n@param seed 64-bit value used to initiate a random sequence\n@sa the C++ class RNG replaced CvRNG.\n */\nCV_INLINE CvRNG cvRNG( int64 seed CV_DEFAULT(-1))\n{\n    CvRNG rng = seed ? (uint64)seed : (uint64)(int64)-1;\n    return rng;\n}\n\n/** @brief Returns a 32-bit unsigned integer and updates RNG.\n\nThe function returns a uniformly-distributed random 32-bit unsigned integer and updates the RNG\nstate. It is similar to the rand() function from the C runtime library, except that OpenCV functions\nalways generates a 32-bit random number, regardless of the platform.\n@param rng CvRNG state initialized by cvRNG.\n */\nCV_INLINE unsigned cvRandInt( CvRNG* rng )\n{\n    uint64 temp = *rng;\n    temp = (uint64)(unsigned)temp*CV_RNG_COEFF + (temp >> 32);\n    *rng = temp;\n    return (unsigned)temp;\n}\n\n/** @brief Returns a floating-point random number and updates RNG.\n\nThe function returns a uniformly-distributed random floating-point number between 0 and 1 (1 is not\nincluded).\n@param rng RNG state initialized by cvRNG\n */\nCV_INLINE double cvRandReal( CvRNG* rng )\n{\n    return cvRandInt(rng)*2.3283064365386962890625e-10 /* 2^-32 */;\n}\n\n/****************************************************************************************\\\n*                                  Image type (IplImage)                                 *\n\\****************************************************************************************/\n\n#ifndef HAVE_IPL\n\n/*\n * The following definitions (until #endif)\n * is an extract from IPL headers.\n * Copyright (c) 1995 Intel Corporation.\n */\n#define IPL_DEPTH_SIGN 0x80000000\n\n#define IPL_DEPTH_1U     1\n#define IPL_DEPTH_8U     8\n#define IPL_DEPTH_16U   16\n#define IPL_DEPTH_32F   32\n\n#define IPL_DEPTH_8S  (IPL_DEPTH_SIGN| 8)\n#define IPL_DEPTH_16S (IPL_DEPTH_SIGN|16)\n#define IPL_DEPTH_32S (IPL_DEPTH_SIGN|32)\n\n#define IPL_DATA_ORDER_PIXEL  0\n#define IPL_DATA_ORDER_PLANE  1\n\n#define IPL_ORIGIN_TL 0\n#define IPL_ORIGIN_BL 1\n\n#define IPL_ALIGN_4BYTES   4\n#define IPL_ALIGN_8BYTES   8\n#define IPL_ALIGN_16BYTES 16\n#define IPL_ALIGN_32BYTES 32\n\n#define IPL_ALIGN_DWORD   IPL_ALIGN_4BYTES\n#define IPL_ALIGN_QWORD   IPL_ALIGN_8BYTES\n\n#define IPL_BORDER_CONSTANT   0\n#define IPL_BORDER_REPLICATE  1\n#define IPL_BORDER_REFLECT    2\n#define IPL_BORDER_WRAP       3\n\n/** The IplImage is taken from the Intel Image Processing Library, in which the format is native. OpenCV\nonly supports a subset of possible IplImage formats, as outlined in the parameter list above.\n\nIn addition to the above restrictions, OpenCV handles ROIs differently. OpenCV functions require\nthat the image size or ROI size of all source and destination images match exactly. On the other\nhand, the Intel Image Processing Library processes the area of intersection between the source and\ndestination images (or ROIs), allowing them to vary independently.\n*/\ntypedef struct\n#ifdef __cplusplus\n  CV_EXPORTS\n#endif\n_IplImage\n{\n    int  nSize;             /**< sizeof(IplImage) */\n    int  ID;                /**< version (=0)*/\n    int  nChannels;         /**< Most of OpenCV functions support 1,2,3 or 4 channels */\n    int  alphaChannel;      /**< Ignored by OpenCV */\n    int  depth;             /**< Pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,\n                               IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported.  */\n    char colorModel[4];     /**< Ignored by OpenCV */\n    char channelSeq[4];     /**< ditto */\n    int  dataOrder;         /**< 0 - interleaved color channels, 1 - separate color channels.\n                               cvCreateImage can only create interleaved images */\n    int  origin;            /**< 0 - top-left origin,\n                               1 - bottom-left origin (Windows bitmaps style).  */\n    int  align;             /**< Alignment of image rows (4 or 8).\n                               OpenCV ignores it and uses widthStep instead.    */\n    int  width;             /**< Image width in pixels.                           */\n    int  height;            /**< Image height in pixels.                          */\n    struct _IplROI *roi;    /**< Image ROI. If NULL, the whole image is selected. */\n    struct _IplImage *maskROI;      /**< Must be NULL. */\n    void  *imageId;                 /**< \"           \" */\n    struct _IplTileInfo *tileInfo;  /**< \"           \" */\n    int  imageSize;         /**< Image data size in bytes\n                               (==image->height*image->widthStep\n                               in case of interleaved data)*/\n    char *imageData;        /**< Pointer to aligned image data.         */\n    int  widthStep;         /**< Size of aligned image row in bytes.    */\n    int  BorderMode[4];     /**< Ignored by OpenCV.                     */\n    int  BorderConst[4];    /**< Ditto.                                 */\n    char *imageDataOrigin;  /**< Pointer to very origin of image data\n                               (not necessarily aligned) -\n                               needed for correct deallocation */\n\n#ifdef __cplusplus\n    _IplImage() {}\n    _IplImage(const cv::Mat& m);\n#endif\n}\nIplImage;\n\ntypedef struct _IplTileInfo IplTileInfo;\n\ntypedef struct _IplROI\n{\n    int  coi; /**< 0 - no COI (all channels are selected), 1 - 0th channel is selected ...*/\n    int  xOffset;\n    int  yOffset;\n    int  width;\n    int  height;\n}\nIplROI;\n\ntypedef struct _IplConvKernel\n{\n    int  nCols;\n    int  nRows;\n    int  anchorX;\n    int  anchorY;\n    int *values;\n    int  nShiftR;\n}\nIplConvKernel;\n\ntypedef struct _IplConvKernelFP\n{\n    int  nCols;\n    int  nRows;\n    int  anchorX;\n    int  anchorY;\n    float *values;\n}\nIplConvKernelFP;\n\n#define IPL_IMAGE_HEADER 1\n#define IPL_IMAGE_DATA   2\n#define IPL_IMAGE_ROI    4\n\n#endif/*HAVE_IPL*/\n\n/** extra border mode */\n#define IPL_BORDER_REFLECT_101    4\n#define IPL_BORDER_TRANSPARENT    5\n\n#define IPL_IMAGE_MAGIC_VAL  ((int)sizeof(IplImage))\n#define CV_TYPE_NAME_IMAGE \"opencv-image\"\n\n#define CV_IS_IMAGE_HDR(img) \\\n    ((img) != NULL && ((const IplImage*)(img))->nSize == sizeof(IplImage))\n\n#define CV_IS_IMAGE(img) \\\n    (CV_IS_IMAGE_HDR(img) && ((IplImage*)img)->imageData != NULL)\n\n/** for storing double-precision\n   floating point data in IplImage's */\n#define IPL_DEPTH_64F  64\n\n/** get reference to pixel at (col,row),\n   for multi-channel images (col) should be multiplied by number of channels */\n#define CV_IMAGE_ELEM( image, elemtype, row, col )       \\\n    (((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)])\n\n/****************************************************************************************\\\n*                                  Matrix type (CvMat)                                   *\n\\****************************************************************************************/\n\n#define CV_AUTO_STEP  0x7fffffff\n#define CV_WHOLE_ARR  cvSlice( 0, 0x3fffffff )\n\n#define CV_MAGIC_MASK       0xFFFF0000\n#define CV_MAT_MAGIC_VAL    0x42420000\n#define CV_TYPE_NAME_MAT    \"opencv-matrix\"\n\n/** Matrix elements are stored row by row. Element (i, j) (i - 0-based row index, j - 0-based column\nindex) of a matrix can be retrieved or modified using CV_MAT_ELEM macro:\n\n    uchar pixval = CV_MAT_ELEM(grayimg, uchar, i, j)\n    CV_MAT_ELEM(cameraMatrix, float, 0, 2) = image.width*0.5f;\n\nTo access multiple-channel matrices, you can use\nCV_MAT_ELEM(matrix, type, i, j\\*nchannels + channel_idx).\n\n@deprecated CvMat is now obsolete; consider using Mat instead.\n */\ntypedef struct CvMat\n{\n    int type;\n    int step;\n\n    /* for internal use only */\n    int* refcount;\n    int hdr_refcount;\n\n    union\n    {\n        uchar* ptr;\n        short* s;\n        int* i;\n        float* fl;\n        double* db;\n    } data;\n\n#ifdef __cplusplus\n    union\n    {\n        int rows;\n        int height;\n    };\n\n    union\n    {\n        int cols;\n        int width;\n    };\n#else\n    int rows;\n    int cols;\n#endif\n\n\n#ifdef __cplusplus\n    CvMat() {}\n    CvMat(const CvMat& m) { memcpy(this, &m, sizeof(CvMat));}\n    CvMat(const cv::Mat& m);\n#endif\n\n}\nCvMat;\n\n\n#define CV_IS_MAT_HDR(mat) \\\n    ((mat) != NULL && \\\n    (((const CvMat*)(mat))->type & CV_MAGIC_MASK) == CV_MAT_MAGIC_VAL && \\\n    ((const CvMat*)(mat))->cols > 0 && ((const CvMat*)(mat))->rows > 0)\n\n#define CV_IS_MAT_HDR_Z(mat) \\\n    ((mat) != NULL && \\\n    (((const CvMat*)(mat))->type & CV_MAGIC_MASK) == CV_MAT_MAGIC_VAL && \\\n    ((const CvMat*)(mat))->cols >= 0 && ((const CvMat*)(mat))->rows >= 0)\n\n#define CV_IS_MAT(mat) \\\n    (CV_IS_MAT_HDR(mat) && ((const CvMat*)(mat))->data.ptr != NULL)\n\n#define CV_IS_MASK_ARR(mat) \\\n    (((mat)->type & (CV_MAT_TYPE_MASK & ~CV_8SC1)) == 0)\n\n#define CV_ARE_TYPES_EQ(mat1, mat2) \\\n    ((((mat1)->type ^ (mat2)->type) & CV_MAT_TYPE_MASK) == 0)\n\n#define CV_ARE_CNS_EQ(mat1, mat2) \\\n    ((((mat1)->type ^ (mat2)->type) & CV_MAT_CN_MASK) == 0)\n\n#define CV_ARE_DEPTHS_EQ(mat1, mat2) \\\n    ((((mat1)->type ^ (mat2)->type) & CV_MAT_DEPTH_MASK) == 0)\n\n#define CV_ARE_SIZES_EQ(mat1, mat2) \\\n    ((mat1)->rows == (mat2)->rows && (mat1)->cols == (mat2)->cols)\n\n#define CV_IS_MAT_CONST(mat)  \\\n    (((mat)->rows|(mat)->cols) == 1)\n\n#define IPL2CV_DEPTH(depth) \\\n    ((((CV_8U)+(CV_16U<<4)+(CV_32F<<8)+(CV_64F<<16)+(CV_8S<<20)+ \\\n    (CV_16S<<24)+(CV_32S<<28)) >> ((((depth) & 0xF0) >> 2) + \\\n    (((depth) & IPL_DEPTH_SIGN) ? 20 : 0))) & 15)\n\n/** Inline constructor. No data is allocated internally!!!\n * (Use together with cvCreateData, or use cvCreateMat instead to\n * get a matrix with allocated data):\n */\nCV_INLINE CvMat cvMat( int rows, int cols, int type, void* data CV_DEFAULT(NULL))\n{\n    CvMat m;\n\n    assert( (unsigned)CV_MAT_DEPTH(type) <= CV_64F );\n    type = CV_MAT_TYPE(type);\n    m.type = CV_MAT_MAGIC_VAL | CV_MAT_CONT_FLAG | type;\n    m.cols = cols;\n    m.rows = rows;\n    m.step = m.cols*CV_ELEM_SIZE(type);\n    m.data.ptr = (uchar*)data;\n    m.refcount = NULL;\n    m.hdr_refcount = 0;\n\n    return m;\n}\n\n#ifdef __cplusplus\ninline CvMat::CvMat(const cv::Mat& m)\n{\n    CV_DbgAssert(m.dims <= 2);\n    *this = cvMat(m.rows, m.dims == 1 ? 1 : m.cols, m.type(), m.data);\n    step = (int)m.step[0];\n    type = (type & ~cv::Mat::CONTINUOUS_FLAG) | (m.flags & cv::Mat::CONTINUOUS_FLAG);\n}\n#endif\n\n\n#define CV_MAT_ELEM_PTR_FAST( mat, row, col, pix_size )  \\\n    (assert( (unsigned)(row) < (unsigned)(mat).rows &&   \\\n             (unsigned)(col) < (unsigned)(mat).cols ),   \\\n     (mat).data.ptr + (size_t)(mat).step*(row) + (pix_size)*(col))\n\n#define CV_MAT_ELEM_PTR( mat, row, col )                 \\\n    CV_MAT_ELEM_PTR_FAST( mat, row, col, CV_ELEM_SIZE((mat).type) )\n\n#define CV_MAT_ELEM( mat, elemtype, row, col )           \\\n    (*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype)))\n\n/** @brief Returns the particular element of single-channel floating-point matrix.\n\nThe function is a fast replacement for cvGetReal2D in the case of single-channel floating-point\nmatrices. It is faster because it is inline, it does fewer checks for array type and array element\ntype, and it checks for the row and column ranges only in debug mode.\n@param mat Input matrix\n@param row The zero-based index of row\n@param col The zero-based index of column\n */\nCV_INLINE  double  cvmGet( const CvMat* mat, int row, int col )\n{\n    int type;\n\n    type = CV_MAT_TYPE(mat->type);\n    assert( (unsigned)row < (unsigned)mat->rows &&\n            (unsigned)col < (unsigned)mat->cols );\n\n    if( type == CV_32FC1 )\n        return ((float*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col];\n    else\n    {\n        assert( type == CV_64FC1 );\n        return ((double*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col];\n    }\n}\n\n/** @brief Sets a specific element of a single-channel floating-point matrix.\n\nThe function is a fast replacement for cvSetReal2D in the case of single-channel floating-point\nmatrices. It is faster because it is inline, it does fewer checks for array type and array element\ntype, and it checks for the row and column ranges only in debug mode.\n@param mat The matrix\n@param row The zero-based index of row\n@param col The zero-based index of column\n@param value The new value of the matrix element\n */\nCV_INLINE  void  cvmSet( CvMat* mat, int row, int col, double value )\n{\n    int type;\n    type = CV_MAT_TYPE(mat->type);\n    assert( (unsigned)row < (unsigned)mat->rows &&\n            (unsigned)col < (unsigned)mat->cols );\n\n    if( type == CV_32FC1 )\n        ((float*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = (float)value;\n    else\n    {\n        assert( type == CV_64FC1 );\n        ((double*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = value;\n    }\n}\n\n\nCV_INLINE int cvIplDepth( int type )\n{\n    int depth = CV_MAT_DEPTH(type);\n    return CV_ELEM_SIZE1(depth)*8 | (depth == CV_8S || depth == CV_16S ||\n           depth == CV_32S ? IPL_DEPTH_SIGN : 0);\n}\n\n\n/****************************************************************************************\\\n*                       Multi-dimensional dense array (CvMatND)                          *\n\\****************************************************************************************/\n\n#define CV_MATND_MAGIC_VAL    0x42430000\n#define CV_TYPE_NAME_MATND    \"opencv-nd-matrix\"\n\n#define CV_MAX_DIM            32\n#define CV_MAX_DIM_HEAP       1024\n\n/**\n  @deprecated consider using cv::Mat instead\n  */\ntypedef struct\n#ifdef __cplusplus\n  CV_EXPORTS\n#endif\nCvMatND\n{\n    int type;\n    int dims;\n\n    int* refcount;\n    int hdr_refcount;\n\n    union\n    {\n        uchar* ptr;\n        float* fl;\n        double* db;\n        int* i;\n        short* s;\n    } data;\n\n    struct\n    {\n        int size;\n        int step;\n    }\n    dim[CV_MAX_DIM];\n\n#ifdef __cplusplus\n    CvMatND() {}\n    CvMatND(const cv::Mat& m);\n#endif\n}\nCvMatND;\n\n#define CV_IS_MATND_HDR(mat) \\\n    ((mat) != NULL && (((const CvMatND*)(mat))->type & CV_MAGIC_MASK) == CV_MATND_MAGIC_VAL)\n\n#define CV_IS_MATND(mat) \\\n    (CV_IS_MATND_HDR(mat) && ((const CvMatND*)(mat))->data.ptr != NULL)\n\n\n/****************************************************************************************\\\n*                      Multi-dimensional sparse array (CvSparseMat)                      *\n\\****************************************************************************************/\n\n#define CV_SPARSE_MAT_MAGIC_VAL    0x42440000\n#define CV_TYPE_NAME_SPARSE_MAT    \"opencv-sparse-matrix\"\n\nstruct CvSet;\n\ntypedef struct\n#ifdef __cplusplus\n  CV_EXPORTS\n#endif\nCvSparseMat\n{\n    int type;\n    int dims;\n    int* refcount;\n    int hdr_refcount;\n\n    struct CvSet* heap;\n    void** hashtable;\n    int hashsize;\n    int valoffset;\n    int idxoffset;\n    int size[CV_MAX_DIM];\n\n#ifdef __cplusplus\n    void copyToSparseMat(cv::SparseMat& m) const;\n#endif\n}\nCvSparseMat;\n\n#ifdef __cplusplus\n    CV_EXPORTS CvSparseMat* cvCreateSparseMat(const cv::SparseMat& m);\n#endif\n\n#define CV_IS_SPARSE_MAT_HDR(mat) \\\n    ((mat) != NULL && \\\n    (((const CvSparseMat*)(mat))->type & CV_MAGIC_MASK) == CV_SPARSE_MAT_MAGIC_VAL)\n\n#define CV_IS_SPARSE_MAT(mat) \\\n    CV_IS_SPARSE_MAT_HDR(mat)\n\n/**************** iteration through a sparse array *****************/\n\ntypedef struct CvSparseNode\n{\n    unsigned hashval;\n    struct CvSparseNode* next;\n}\nCvSparseNode;\n\ntypedef struct CvSparseMatIterator\n{\n    CvSparseMat* mat;\n    CvSparseNode* node;\n    int curidx;\n}\nCvSparseMatIterator;\n\n#define CV_NODE_VAL(mat,node)   ((void*)((uchar*)(node) + (mat)->valoffset))\n#define CV_NODE_IDX(mat,node)   ((int*)((uchar*)(node) + (mat)->idxoffset))\n\n/****************************************************************************************\\\n*                                         Histogram                                      *\n\\****************************************************************************************/\n\ntypedef int CvHistType;\n\n#define CV_HIST_MAGIC_VAL     0x42450000\n#define CV_HIST_UNIFORM_FLAG  (1 << 10)\n\n/** indicates whether bin ranges are set already or not */\n#define CV_HIST_RANGES_FLAG   (1 << 11)\n\n#define CV_HIST_ARRAY         0\n#define CV_HIST_SPARSE        1\n#define CV_HIST_TREE          CV_HIST_SPARSE\n\n/** should be used as a parameter only,\n   it turns to CV_HIST_UNIFORM_FLAG of hist->type */\n#define CV_HIST_UNIFORM       1\n\ntypedef struct CvHistogram\n{\n    int     type;\n    CvArr*  bins;\n    float   thresh[CV_MAX_DIM][2];  /**< For uniform histograms.                      */\n    float** thresh2;                /**< For non-uniform histograms.                  */\n    CvMatND mat;                    /**< Embedded matrix header for array histograms. */\n}\nCvHistogram;\n\n#define CV_IS_HIST( hist ) \\\n    ((hist) != NULL  && \\\n     (((CvHistogram*)(hist))->type & CV_MAGIC_MASK) == CV_HIST_MAGIC_VAL && \\\n     (hist)->bins != NULL)\n\n#define CV_IS_UNIFORM_HIST( hist ) \\\n    (((hist)->type & CV_HIST_UNIFORM_FLAG) != 0)\n\n#define CV_IS_SPARSE_HIST( hist ) \\\n    CV_IS_SPARSE_MAT((hist)->bins)\n\n#define CV_HIST_HAS_RANGES( hist ) \\\n    (((hist)->type & CV_HIST_RANGES_FLAG) != 0)\n\n/****************************************************************************************\\\n*                      Other supplementary data type definitions                         *\n\\****************************************************************************************/\n\n/*************************************** CvRect *****************************************/\n/** @sa Rect_ */\ntypedef struct CvRect\n{\n    int x;\n    int y;\n    int width;\n    int height;\n\n#ifdef __cplusplus\n    CvRect(int _x = 0, int _y = 0, int w = 0, int h = 0): x(_x), y(_y), width(w), height(h) {}\n    template<typename _Tp>\n    CvRect(const cv::Rect_<_Tp>& r): x(cv::saturate_cast<int>(r.x)), y(cv::saturate_cast<int>(r.y)), width(cv::saturate_cast<int>(r.width)), height(cv::saturate_cast<int>(r.height)) {}\n    template<typename _Tp>\n    operator cv::Rect_<_Tp>() const { return cv::Rect_<_Tp>((_Tp)x, (_Tp)y, (_Tp)width, (_Tp)height); }\n#endif\n}\nCvRect;\n\n/** constructs CvRect structure. */\nCV_INLINE  CvRect  cvRect( int x, int y, int width, int height )\n{\n    CvRect r;\n\n    r.x = x;\n    r.y = y;\n    r.width = width;\n    r.height = height;\n\n    return r;\n}\n\n\nCV_INLINE  IplROI  cvRectToROI( CvRect rect, int coi )\n{\n    IplROI roi;\n    roi.xOffset = rect.x;\n    roi.yOffset = rect.y;\n    roi.width = rect.width;\n    roi.height = rect.height;\n    roi.coi = coi;\n\n    return roi;\n}\n\n\nCV_INLINE  CvRect  cvROIToRect( IplROI roi )\n{\n    return cvRect( roi.xOffset, roi.yOffset, roi.width, roi.height );\n}\n\n/*********************************** CvTermCriteria *************************************/\n\n#define CV_TERMCRIT_ITER    1\n#define CV_TERMCRIT_NUMBER  CV_TERMCRIT_ITER\n#define CV_TERMCRIT_EPS     2\n\n/** @sa TermCriteria\n */\ntypedef struct CvTermCriteria\n{\n    int    type;  /**< may be combination of\n                     CV_TERMCRIT_ITER\n                     CV_TERMCRIT_EPS */\n    int    max_iter;\n    double epsilon;\n\n#ifdef __cplusplus\n    CvTermCriteria(int _type = 0, int _iter = 0, double _eps = 0) : type(_type), max_iter(_iter), epsilon(_eps)  {}\n    CvTermCriteria(const cv::TermCriteria& t) : type(t.type), max_iter(t.maxCount), epsilon(t.epsilon)  {}\n    operator cv::TermCriteria() const { return cv::TermCriteria(type, max_iter, epsilon); }\n#endif\n\n}\nCvTermCriteria;\n\nCV_INLINE  CvTermCriteria  cvTermCriteria( int type, int max_iter, double epsilon )\n{\n    CvTermCriteria t;\n\n    t.type = type;\n    t.max_iter = max_iter;\n    t.epsilon = (float)epsilon;\n\n    return t;\n}\n\n\n/******************************* CvPoint and variants ***********************************/\n\ntypedef struct CvPoint\n{\n    int x;\n    int y;\n\n#ifdef __cplusplus\n    CvPoint(int _x = 0, int _y = 0): x(_x), y(_y) {}\n    template<typename _Tp>\n    CvPoint(const cv::Point_<_Tp>& pt): x((int)pt.x), y((int)pt.y) {}\n    template<typename _Tp>\n    operator cv::Point_<_Tp>() const { return cv::Point_<_Tp>(cv::saturate_cast<_Tp>(x), cv::saturate_cast<_Tp>(y)); }\n#endif\n}\nCvPoint;\n\n/** constructs CvPoint structure. */\nCV_INLINE  CvPoint  cvPoint( int x, int y )\n{\n    CvPoint p;\n\n    p.x = x;\n    p.y = y;\n\n    return p;\n}\n\n\ntypedef struct CvPoint2D32f\n{\n    float x;\n    float y;\n\n#ifdef __cplusplus\n    CvPoint2D32f(float _x = 0, float _y = 0): x(_x), y(_y) {}\n    template<typename _Tp>\n    CvPoint2D32f(const cv::Point_<_Tp>& pt): x((float)pt.x), y((float)pt.y) {}\n    template<typename _Tp>\n    operator cv::Point_<_Tp>() const { return cv::Point_<_Tp>(cv::saturate_cast<_Tp>(x), cv::saturate_cast<_Tp>(y)); }\n#endif\n}\nCvPoint2D32f;\n\n/** constructs CvPoint2D32f structure. */\nCV_INLINE  CvPoint2D32f  cvPoint2D32f( double x, double y )\n{\n    CvPoint2D32f p;\n\n    p.x = (float)x;\n    p.y = (float)y;\n\n    return p;\n}\n\n/** converts CvPoint to CvPoint2D32f. */\nCV_INLINE  CvPoint2D32f  cvPointTo32f( CvPoint point )\n{\n    return cvPoint2D32f( (float)point.x, (float)point.y );\n}\n\n/** converts CvPoint2D32f to CvPoint. */\nCV_INLINE  CvPoint  cvPointFrom32f( CvPoint2D32f point )\n{\n    CvPoint ipt;\n    ipt.x = cvRound(point.x);\n    ipt.y = cvRound(point.y);\n\n    return ipt;\n}\n\n\ntypedef struct CvPoint3D32f\n{\n    float x;\n    float y;\n    float z;\n\n#ifdef __cplusplus\n    CvPoint3D32f(float _x = 0, float _y = 0, float _z = 0): x(_x), y(_y), z(_z) {}\n    template<typename _Tp>\n    CvPoint3D32f(const cv::Point3_<_Tp>& pt): x((float)pt.x), y((float)pt.y), z((float)pt.z) {}\n    template<typename _Tp>\n    operator cv::Point3_<_Tp>() const { return cv::Point3_<_Tp>(cv::saturate_cast<_Tp>(x), cv::saturate_cast<_Tp>(y), cv::saturate_cast<_Tp>(z)); }\n#endif\n}\nCvPoint3D32f;\n\n/** constructs CvPoint3D32f structure. */\nCV_INLINE  CvPoint3D32f  cvPoint3D32f( double x, double y, double z )\n{\n    CvPoint3D32f p;\n\n    p.x = (float)x;\n    p.y = (float)y;\n    p.z = (float)z;\n\n    return p;\n}\n\n\ntypedef struct CvPoint2D64f\n{\n    double x;\n    double y;\n}\nCvPoint2D64f;\n\n/** constructs CvPoint2D64f structure.*/\nCV_INLINE  CvPoint2D64f  cvPoint2D64f( double x, double y )\n{\n    CvPoint2D64f p;\n\n    p.x = x;\n    p.y = y;\n\n    return p;\n}\n\n\ntypedef struct CvPoint3D64f\n{\n    double x;\n    double y;\n    double z;\n}\nCvPoint3D64f;\n\n/** constructs CvPoint3D64f structure. */\nCV_INLINE  CvPoint3D64f  cvPoint3D64f( double x, double y, double z )\n{\n    CvPoint3D64f p;\n\n    p.x = x;\n    p.y = y;\n    p.z = z;\n\n    return p;\n}\n\n\n/******************************** CvSize's & CvBox **************************************/\n\ntypedef struct CvSize\n{\n    int width;\n    int height;\n\n#ifdef __cplusplus\n    CvSize(int w = 0, int h = 0): width(w), height(h) {}\n    template<typename _Tp>\n    CvSize(const cv::Size_<_Tp>& sz): width(cv::saturate_cast<int>(sz.width)), height(cv::saturate_cast<int>(sz.height)) {}\n    template<typename _Tp>\n    operator cv::Size_<_Tp>() const { return cv::Size_<_Tp>(cv::saturate_cast<_Tp>(width), cv::saturate_cast<_Tp>(height)); }\n#endif\n}\nCvSize;\n\n/** constructs CvSize structure. */\nCV_INLINE  CvSize  cvSize( int width, int height )\n{\n    CvSize s;\n\n    s.width = width;\n    s.height = height;\n\n    return s;\n}\n\ntypedef struct CvSize2D32f\n{\n    float width;\n    float height;\n\n#ifdef __cplusplus\n    CvSize2D32f(float w = 0, float h = 0): width(w), height(h) {}\n    template<typename _Tp>\n    CvSize2D32f(const cv::Size_<_Tp>& sz): width(cv::saturate_cast<float>(sz.width)), height(cv::saturate_cast<float>(sz.height)) {}\n    template<typename _Tp>\n    operator cv::Size_<_Tp>() const { return cv::Size_<_Tp>(cv::saturate_cast<_Tp>(width), cv::saturate_cast<_Tp>(height)); }\n#endif\n}\nCvSize2D32f;\n\n/** constructs CvSize2D32f structure. */\nCV_INLINE  CvSize2D32f  cvSize2D32f( double width, double height )\n{\n    CvSize2D32f s;\n\n    s.width = (float)width;\n    s.height = (float)height;\n\n    return s;\n}\n\n/** @sa RotatedRect\n */\ntypedef struct CvBox2D\n{\n    CvPoint2D32f center;  /**< Center of the box.                          */\n    CvSize2D32f  size;    /**< Box width and length.                       */\n    float angle;          /**< Angle between the horizontal axis           */\n                          /**< and the first side (i.e. length) in degrees */\n\n#ifdef __cplusplus\n    CvBox2D(CvPoint2D32f c = CvPoint2D32f(), CvSize2D32f s = CvSize2D32f(), float a = 0) : center(c), size(s), angle(a) {}\n    CvBox2D(const cv::RotatedRect& rr) : center(rr.center), size(rr.size), angle(rr.angle) {}\n    operator cv::RotatedRect() const { return cv::RotatedRect(center, size, angle); }\n#endif\n}\nCvBox2D;\n\n\n/** Line iterator state: */\ntypedef struct CvLineIterator\n{\n    /** Pointer to the current point: */\n    uchar* ptr;\n\n    /* Bresenham algorithm state: */\n    int  err;\n    int  plus_delta;\n    int  minus_delta;\n    int  plus_step;\n    int  minus_step;\n}\nCvLineIterator;\n\n\n\n/************************************* CvSlice ******************************************/\n#define CV_WHOLE_SEQ_END_INDEX 0x3fffffff\n#define CV_WHOLE_SEQ  cvSlice(0, CV_WHOLE_SEQ_END_INDEX)\n\ntypedef struct CvSlice\n{\n    int  start_index, end_index;\n\n#if defined(__cplusplus) && !defined(__CUDACC__)\n    CvSlice(int start = 0, int end = 0) : start_index(start), end_index(end) {}\n    CvSlice(const cv::Range& r) { *this = (r.start != INT_MIN && r.end != INT_MAX) ? CvSlice(r.start, r.end) : CvSlice(0, CV_WHOLE_SEQ_END_INDEX); }\n    operator cv::Range() const { return (start_index == 0 && end_index == CV_WHOLE_SEQ_END_INDEX ) ? cv::Range::all() : cv::Range(start_index, end_index); }\n#endif\n}\nCvSlice;\n\nCV_INLINE  CvSlice  cvSlice( int start, int end )\n{\n    CvSlice slice;\n    slice.start_index = start;\n    slice.end_index = end;\n\n    return slice;\n}\n\n\n\n/************************************* CvScalar *****************************************/\n/** @sa Scalar_\n */\ntypedef struct CvScalar\n{\n    double val[4];\n\n#ifdef __cplusplus\n    CvScalar() {}\n    CvScalar(double d0, double d1 = 0, double d2 = 0, double d3 = 0) { val[0] = d0; val[1] = d1; val[2] = d2; val[3] = d3; }\n    template<typename _Tp>\n    CvScalar(const cv::Scalar_<_Tp>& s) { val[0] = s.val[0]; val[1] = s.val[1]; val[2] = s.val[2]; val[3] = s.val[3]; }\n    template<typename _Tp>\n    operator cv::Scalar_<_Tp>() const { return cv::Scalar_<_Tp>(cv::saturate_cast<_Tp>(val[0]), cv::saturate_cast<_Tp>(val[1]), cv::saturate_cast<_Tp>(val[2]), cv::saturate_cast<_Tp>(val[3])); }\n    template<typename _Tp, int cn>\n    CvScalar(const cv::Vec<_Tp, cn>& v)\n    {\n        int i;\n        for( i = 0; i < (cn < 4 ? cn : 4); i++ ) val[i] = v.val[i];\n        for( ; i < 4; i++ ) val[i] = 0;\n    }\n#endif\n}\nCvScalar;\n\nCV_INLINE  CvScalar  cvScalar( double val0, double val1 CV_DEFAULT(0),\n                               double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0))\n{\n    CvScalar scalar;\n    scalar.val[0] = val0; scalar.val[1] = val1;\n    scalar.val[2] = val2; scalar.val[3] = val3;\n    return scalar;\n}\n\n\nCV_INLINE  CvScalar  cvRealScalar( double val0 )\n{\n    CvScalar scalar;\n    scalar.val[0] = val0;\n    scalar.val[1] = scalar.val[2] = scalar.val[3] = 0;\n    return scalar;\n}\n\nCV_INLINE  CvScalar  cvScalarAll( double val0123 )\n{\n    CvScalar scalar;\n    scalar.val[0] = val0123;\n    scalar.val[1] = val0123;\n    scalar.val[2] = val0123;\n    scalar.val[3] = val0123;\n    return scalar;\n}\n\n/****************************************************************************************\\\n*                                   Dynamic Data structures                              *\n\\****************************************************************************************/\n\n/******************************** Memory storage ****************************************/\n\ntypedef struct CvMemBlock\n{\n    struct CvMemBlock*  prev;\n    struct CvMemBlock*  next;\n}\nCvMemBlock;\n\n#define CV_STORAGE_MAGIC_VAL    0x42890000\n\ntypedef struct CvMemStorage\n{\n    int signature;\n    CvMemBlock* bottom;           /**< First allocated block.                   */\n    CvMemBlock* top;              /**< Current memory block - top of the stack. */\n    struct  CvMemStorage* parent; /**< We get new blocks from parent as needed. */\n    int block_size;               /**< Block size.                              */\n    int free_space;               /**< Remaining free space in current block.   */\n}\nCvMemStorage;\n\n#define CV_IS_STORAGE(storage)  \\\n    ((storage) != NULL &&       \\\n    (((CvMemStorage*)(storage))->signature & CV_MAGIC_MASK) == CV_STORAGE_MAGIC_VAL)\n\n\ntypedef struct CvMemStoragePos\n{\n    CvMemBlock* top;\n    int free_space;\n}\nCvMemStoragePos;\n\n\n/*********************************** Sequence *******************************************/\n\ntypedef struct CvSeqBlock\n{\n    struct CvSeqBlock*  prev; /**< Previous sequence block.                   */\n    struct CvSeqBlock*  next; /**< Next sequence block.                       */\n  int    start_index;         /**< Index of the first element in the block +  */\n                              /**< sequence->first->start_index.              */\n    int    count;             /**< Number of elements in the block.           */\n    schar* data;              /**< Pointer to the first element of the block. */\n}\nCvSeqBlock;\n\n\n#define CV_TREE_NODE_FIELDS(node_type)                               \\\n    int       flags;             /**< Miscellaneous flags.     */      \\\n    int       header_size;       /**< Size of sequence header. */      \\\n    struct    node_type* h_prev; /**< Previous sequence.       */      \\\n    struct    node_type* h_next; /**< Next sequence.           */      \\\n    struct    node_type* v_prev; /**< 2nd previous sequence.   */      \\\n    struct    node_type* v_next  /**< 2nd next sequence.       */\n\n/**\n   Read/Write sequence.\n   Elements can be dynamically inserted to or deleted from the sequence.\n*/\n#define CV_SEQUENCE_FIELDS()                                              \\\n    CV_TREE_NODE_FIELDS(CvSeq);                                           \\\n    int       total;          /**< Total number of elements.            */  \\\n    int       elem_size;      /**< Size of sequence element in bytes.   */  \\\n    schar*    block_max;      /**< Maximal bound of the last block.     */  \\\n    schar*    ptr;            /**< Current write pointer.               */  \\\n    int       delta_elems;    /**< Grow seq this many at a time.        */  \\\n    CvMemStorage* storage;    /**< Where the seq is stored.             */  \\\n    CvSeqBlock* free_blocks;  /**< Free blocks list.                    */  \\\n    CvSeqBlock* first;        /**< Pointer to the first sequence block. */\n\ntypedef struct CvSeq\n{\n    CV_SEQUENCE_FIELDS()\n}\nCvSeq;\n\n#define CV_TYPE_NAME_SEQ             \"opencv-sequence\"\n#define CV_TYPE_NAME_SEQ_TREE        \"opencv-sequence-tree\"\n\n/*************************************** Set ********************************************/\n/** @brief Set\n  Order is not preserved. There can be gaps between sequence elements.\n  After the element has been inserted it stays in the same place all the time.\n  The MSB(most-significant or sign bit) of the first field (flags) is 0 iff the element exists.\n*/\n#define CV_SET_ELEM_FIELDS(elem_type)   \\\n    int  flags;                         \\\n    struct elem_type* next_free;\n\ntypedef struct CvSetElem\n{\n    CV_SET_ELEM_FIELDS(CvSetElem)\n}\nCvSetElem;\n\n#define CV_SET_FIELDS()      \\\n    CV_SEQUENCE_FIELDS()     \\\n    CvSetElem* free_elems;   \\\n    int active_count;\n\ntypedef struct CvSet\n{\n    CV_SET_FIELDS()\n}\nCvSet;\n\n\n#define CV_SET_ELEM_IDX_MASK   ((1 << 26) - 1)\n#define CV_SET_ELEM_FREE_FLAG  (1 << (sizeof(int)*8-1))\n\n/** Checks whether the element pointed by ptr belongs to a set or not */\n#define CV_IS_SET_ELEM( ptr )  (((CvSetElem*)(ptr))->flags >= 0)\n\n/************************************* Graph ********************************************/\n\n/** @name Graph\n\nWe represent a graph as a set of vertices. Vertices contain their adjacency lists (more exactly,\npointers to first incoming or outcoming edge (or 0 if isolated vertex)). Edges are stored in\nanother set. There is a singly-linked list of incoming/outcoming edges for each vertex.\n\nEach edge consists of:\n\n- Two pointers to the starting and ending vertices (vtx[0] and vtx[1] respectively).\n\n    A graph may be oriented or not. In the latter case, edges between vertex i to vertex j are not\ndistinguished during search operations.\n\n- Two pointers to next edges for the starting and ending vertices, where next[0] points to the\nnext edge in the vtx[0] adjacency list and next[1] points to the next edge in the vtx[1]\nadjacency list.\n\n@see CvGraphEdge, CvGraphVtx, CvGraphVtx2D, CvGraph\n@{\n*/\n#define CV_GRAPH_EDGE_FIELDS()      \\\n    int flags;                      \\\n    float weight;                   \\\n    struct CvGraphEdge* next[2];    \\\n    struct CvGraphVtx* vtx[2];\n\n\n#define CV_GRAPH_VERTEX_FIELDS()    \\\n    int flags;                      \\\n    struct CvGraphEdge* first;\n\n\ntypedef struct CvGraphEdge\n{\n    CV_GRAPH_EDGE_FIELDS()\n}\nCvGraphEdge;\n\ntypedef struct CvGraphVtx\n{\n    CV_GRAPH_VERTEX_FIELDS()\n}\nCvGraphVtx;\n\ntypedef struct CvGraphVtx2D\n{\n    CV_GRAPH_VERTEX_FIELDS()\n    CvPoint2D32f* ptr;\n}\nCvGraphVtx2D;\n\n/**\n   Graph is \"derived\" from the set (this is set a of vertices)\n   and includes another set (edges)\n*/\n#define  CV_GRAPH_FIELDS()   \\\n    CV_SET_FIELDS()          \\\n    CvSet* edges;\n\ntypedef struct CvGraph\n{\n    CV_GRAPH_FIELDS()\n}\nCvGraph;\n\n#define CV_TYPE_NAME_GRAPH \"opencv-graph\"\n\n/** @} */\n\n/*********************************** Chain/Countour *************************************/\n\ntypedef struct CvChain\n{\n    CV_SEQUENCE_FIELDS()\n    CvPoint  origin;\n}\nCvChain;\n\n#define CV_CONTOUR_FIELDS()  \\\n    CV_SEQUENCE_FIELDS()     \\\n    CvRect rect;             \\\n    int color;               \\\n    int reserved[3];\n\ntypedef struct CvContour\n{\n    CV_CONTOUR_FIELDS()\n}\nCvContour;\n\ntypedef CvContour CvPoint2DSeq;\n\n/****************************************************************************************\\\n*                                    Sequence types                                      *\n\\****************************************************************************************/\n\n#define CV_SEQ_MAGIC_VAL             0x42990000\n\n#define CV_IS_SEQ(seq) \\\n    ((seq) != NULL && (((CvSeq*)(seq))->flags & CV_MAGIC_MASK) == CV_SEQ_MAGIC_VAL)\n\n#define CV_SET_MAGIC_VAL             0x42980000\n#define CV_IS_SET(set) \\\n    ((set) != NULL && (((CvSeq*)(set))->flags & CV_MAGIC_MASK) == CV_SET_MAGIC_VAL)\n\n#define CV_SEQ_ELTYPE_BITS           12\n#define CV_SEQ_ELTYPE_MASK           ((1 << CV_SEQ_ELTYPE_BITS) - 1)\n\n#define CV_SEQ_ELTYPE_POINT          CV_32SC2  /**< (x,y) */\n#define CV_SEQ_ELTYPE_CODE           CV_8UC1   /**< freeman code: 0..7 */\n#define CV_SEQ_ELTYPE_GENERIC        0\n#define CV_SEQ_ELTYPE_PTR            CV_USRTYPE1\n#define CV_SEQ_ELTYPE_PPOINT         CV_SEQ_ELTYPE_PTR  /**< &(x,y) */\n#define CV_SEQ_ELTYPE_INDEX          CV_32SC1  /**< #(x,y) */\n#define CV_SEQ_ELTYPE_GRAPH_EDGE     0  /**< &next_o, &next_d, &vtx_o, &vtx_d */\n#define CV_SEQ_ELTYPE_GRAPH_VERTEX   0  /**< first_edge, &(x,y) */\n#define CV_SEQ_ELTYPE_TRIAN_ATR      0  /**< vertex of the binary tree   */\n#define CV_SEQ_ELTYPE_CONNECTED_COMP 0  /**< connected component  */\n#define CV_SEQ_ELTYPE_POINT3D        CV_32FC3  /**< (x,y,z)  */\n\n#define CV_SEQ_KIND_BITS        2\n#define CV_SEQ_KIND_MASK        (((1 << CV_SEQ_KIND_BITS) - 1)<<CV_SEQ_ELTYPE_BITS)\n\n/** types of sequences */\n#define CV_SEQ_KIND_GENERIC     (0 << CV_SEQ_ELTYPE_BITS)\n#define CV_SEQ_KIND_CURVE       (1 << CV_SEQ_ELTYPE_BITS)\n#define CV_SEQ_KIND_BIN_TREE    (2 << CV_SEQ_ELTYPE_BITS)\n\n/** types of sparse sequences (sets) */\n#define CV_SEQ_KIND_GRAPH       (1 << CV_SEQ_ELTYPE_BITS)\n#define CV_SEQ_KIND_SUBDIV2D    (2 << CV_SEQ_ELTYPE_BITS)\n\n#define CV_SEQ_FLAG_SHIFT       (CV_SEQ_KIND_BITS + CV_SEQ_ELTYPE_BITS)\n\n/** flags for curves */\n#define CV_SEQ_FLAG_CLOSED     (1 << CV_SEQ_FLAG_SHIFT)\n#define CV_SEQ_FLAG_SIMPLE     (0 << CV_SEQ_FLAG_SHIFT)\n#define CV_SEQ_FLAG_CONVEX     (0 << CV_SEQ_FLAG_SHIFT)\n#define CV_SEQ_FLAG_HOLE       (2 << CV_SEQ_FLAG_SHIFT)\n\n/** flags for graphs */\n#define CV_GRAPH_FLAG_ORIENTED (1 << CV_SEQ_FLAG_SHIFT)\n\n#define CV_GRAPH               CV_SEQ_KIND_GRAPH\n#define CV_ORIENTED_GRAPH      (CV_SEQ_KIND_GRAPH|CV_GRAPH_FLAG_ORIENTED)\n\n/** point sets */\n#define CV_SEQ_POINT_SET       (CV_SEQ_KIND_GENERIC| CV_SEQ_ELTYPE_POINT)\n#define CV_SEQ_POINT3D_SET     (CV_SEQ_KIND_GENERIC| CV_SEQ_ELTYPE_POINT3D)\n#define CV_SEQ_POLYLINE        (CV_SEQ_KIND_CURVE  | CV_SEQ_ELTYPE_POINT)\n#define CV_SEQ_POLYGON         (CV_SEQ_FLAG_CLOSED | CV_SEQ_POLYLINE )\n#define CV_SEQ_CONTOUR         CV_SEQ_POLYGON\n#define CV_SEQ_SIMPLE_POLYGON  (CV_SEQ_FLAG_SIMPLE | CV_SEQ_POLYGON  )\n\n/** chain-coded curves */\n#define CV_SEQ_CHAIN           (CV_SEQ_KIND_CURVE  | CV_SEQ_ELTYPE_CODE)\n#define CV_SEQ_CHAIN_CONTOUR   (CV_SEQ_FLAG_CLOSED | CV_SEQ_CHAIN)\n\n/** binary tree for the contour */\n#define CV_SEQ_POLYGON_TREE    (CV_SEQ_KIND_BIN_TREE  | CV_SEQ_ELTYPE_TRIAN_ATR)\n\n/** sequence of the connected components */\n#define CV_SEQ_CONNECTED_COMP  (CV_SEQ_KIND_GENERIC  | CV_SEQ_ELTYPE_CONNECTED_COMP)\n\n/** sequence of the integer numbers */\n#define CV_SEQ_INDEX           (CV_SEQ_KIND_GENERIC  | CV_SEQ_ELTYPE_INDEX)\n\n#define CV_SEQ_ELTYPE( seq )   ((seq)->flags & CV_SEQ_ELTYPE_MASK)\n#define CV_SEQ_KIND( seq )     ((seq)->flags & CV_SEQ_KIND_MASK )\n\n/** flag checking */\n#define CV_IS_SEQ_INDEX( seq )      ((CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_INDEX) && \\\n                                     (CV_SEQ_KIND(seq) == CV_SEQ_KIND_GENERIC))\n\n#define CV_IS_SEQ_CURVE( seq )      (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE)\n#define CV_IS_SEQ_CLOSED( seq )     (((seq)->flags & CV_SEQ_FLAG_CLOSED) != 0)\n#define CV_IS_SEQ_CONVEX( seq )     0\n#define CV_IS_SEQ_HOLE( seq )       (((seq)->flags & CV_SEQ_FLAG_HOLE) != 0)\n#define CV_IS_SEQ_SIMPLE( seq )     1\n\n/** type checking macros */\n#define CV_IS_SEQ_POINT_SET( seq ) \\\n    ((CV_SEQ_ELTYPE(seq) == CV_32SC2 || CV_SEQ_ELTYPE(seq) == CV_32FC2))\n\n#define CV_IS_SEQ_POINT_SUBSET( seq ) \\\n    (CV_IS_SEQ_INDEX( seq ) || CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_PPOINT)\n\n#define CV_IS_SEQ_POLYLINE( seq )   \\\n    (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && CV_IS_SEQ_POINT_SET(seq))\n\n#define CV_IS_SEQ_POLYGON( seq )   \\\n    (CV_IS_SEQ_POLYLINE(seq) && CV_IS_SEQ_CLOSED(seq))\n\n#define CV_IS_SEQ_CHAIN( seq )   \\\n    (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && (seq)->elem_size == 1)\n\n#define CV_IS_SEQ_CONTOUR( seq )   \\\n    (CV_IS_SEQ_CLOSED(seq) && (CV_IS_SEQ_POLYLINE(seq) || CV_IS_SEQ_CHAIN(seq)))\n\n#define CV_IS_SEQ_CHAIN_CONTOUR( seq ) \\\n    (CV_IS_SEQ_CHAIN( seq ) && CV_IS_SEQ_CLOSED( seq ))\n\n#define CV_IS_SEQ_POLYGON_TREE( seq ) \\\n    (CV_SEQ_ELTYPE (seq) ==  CV_SEQ_ELTYPE_TRIAN_ATR &&    \\\n    CV_SEQ_KIND( seq ) ==  CV_SEQ_KIND_BIN_TREE )\n\n#define CV_IS_GRAPH( seq )    \\\n    (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_GRAPH)\n\n#define CV_IS_GRAPH_ORIENTED( seq )   \\\n    (((seq)->flags & CV_GRAPH_FLAG_ORIENTED) != 0)\n\n#define CV_IS_SUBDIV2D( seq )  \\\n    (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_SUBDIV2D)\n\n/****************************************************************************************/\n/*                            Sequence writer & reader                                  */\n/****************************************************************************************/\n\n#define CV_SEQ_WRITER_FIELDS()                                     \\\n    int          header_size;                                      \\\n    CvSeq*       seq;        /**< the sequence written */            \\\n    CvSeqBlock*  block;      /**< current block */                   \\\n    schar*       ptr;        /**< pointer to free space */           \\\n    schar*       block_min;  /**< pointer to the beginning of block*/\\\n    schar*       block_max;  /**< pointer to the end of block */\n\ntypedef struct CvSeqWriter\n{\n    CV_SEQ_WRITER_FIELDS()\n}\nCvSeqWriter;\n\n\n#define CV_SEQ_READER_FIELDS()                                      \\\n    int          header_size;                                       \\\n    CvSeq*       seq;        /**< sequence, beign read */             \\\n    CvSeqBlock*  block;      /**< current block */                    \\\n    schar*       ptr;        /**< pointer to element be read next */  \\\n    schar*       block_min;  /**< pointer to the beginning of block */\\\n    schar*       block_max;  /**< pointer to the end of block */      \\\n    int          delta_index;/**< = seq->first->start_index   */      \\\n    schar*       prev_elem;  /**< pointer to previous element */\n\ntypedef struct CvSeqReader\n{\n    CV_SEQ_READER_FIELDS()\n}\nCvSeqReader;\n\n/****************************************************************************************/\n/*                                Operations on sequences                               */\n/****************************************************************************************/\n\n#define  CV_SEQ_ELEM( seq, elem_type, index )                    \\\n/** assert gives some guarantee that <seq> parameter is valid */  \\\n(   assert(sizeof((seq)->first[0]) == sizeof(CvSeqBlock) &&      \\\n    (seq)->elem_size == sizeof(elem_type)),                      \\\n    (elem_type*)((seq)->first && (unsigned)index <               \\\n    (unsigned)((seq)->first->count) ?                            \\\n    (seq)->first->data + (index) * sizeof(elem_type) :           \\\n    cvGetSeqElem( (CvSeq*)(seq), (index) )))\n#define CV_GET_SEQ_ELEM( elem_type, seq, index ) CV_SEQ_ELEM( (seq), elem_type, (index) )\n\n/** Add element to sequence: */\n#define CV_WRITE_SEQ_ELEM_VAR( elem_ptr, writer )     \\\n{                                                     \\\n    if( (writer).ptr >= (writer).block_max )          \\\n    {                                                 \\\n        cvCreateSeqBlock( &writer);                   \\\n    }                                                 \\\n    memcpy((writer).ptr, elem_ptr, (writer).seq->elem_size);\\\n    (writer).ptr += (writer).seq->elem_size;          \\\n}\n\n#define CV_WRITE_SEQ_ELEM( elem, writer )             \\\n{                                                     \\\n    assert( (writer).seq->elem_size == sizeof(elem)); \\\n    if( (writer).ptr >= (writer).block_max )          \\\n    {                                                 \\\n        cvCreateSeqBlock( &writer);                   \\\n    }                                                 \\\n    assert( (writer).ptr <= (writer).block_max - sizeof(elem));\\\n    memcpy((writer).ptr, &(elem), sizeof(elem));      \\\n    (writer).ptr += sizeof(elem);                     \\\n}\n\n\n/** Move reader position forward: */\n#define CV_NEXT_SEQ_ELEM( elem_size, reader )                 \\\n{                                                             \\\n    if( ((reader).ptr += (elem_size)) >= (reader).block_max ) \\\n    {                                                         \\\n        cvChangeSeqBlock( &(reader), 1 );                     \\\n    }                                                         \\\n}\n\n\n/** Move reader position backward: */\n#define CV_PREV_SEQ_ELEM( elem_size, reader )                \\\n{                                                            \\\n    if( ((reader).ptr -= (elem_size)) < (reader).block_min ) \\\n    {                                                        \\\n        cvChangeSeqBlock( &(reader), -1 );                   \\\n    }                                                        \\\n}\n\n/** Read element and move read position forward: */\n#define CV_READ_SEQ_ELEM( elem, reader )                       \\\n{                                                              \\\n    assert( (reader).seq->elem_size == sizeof(elem));          \\\n    memcpy( &(elem), (reader).ptr, sizeof((elem)));            \\\n    CV_NEXT_SEQ_ELEM( sizeof(elem), reader )                   \\\n}\n\n/** Read element and move read position backward: */\n#define CV_REV_READ_SEQ_ELEM( elem, reader )                     \\\n{                                                                \\\n    assert( (reader).seq->elem_size == sizeof(elem));            \\\n    memcpy(&(elem), (reader).ptr, sizeof((elem)));               \\\n    CV_PREV_SEQ_ELEM( sizeof(elem), reader )                     \\\n}\n\n\n#define CV_READ_CHAIN_POINT( _pt, reader )                              \\\n{                                                                       \\\n    (_pt) = (reader).pt;                                                \\\n    if( (reader).ptr )                                                  \\\n    {                                                                   \\\n        CV_READ_SEQ_ELEM( (reader).code, (reader));                     \\\n        assert( ((reader).code & ~7) == 0 );                            \\\n        (reader).pt.x += (reader).deltas[(int)(reader).code][0];        \\\n        (reader).pt.y += (reader).deltas[(int)(reader).code][1];        \\\n    }                                                                   \\\n}\n\n#define CV_CURRENT_POINT( reader )  (*((CvPoint*)((reader).ptr)))\n#define CV_PREV_POINT( reader )     (*((CvPoint*)((reader).prev_elem)))\n\n#define CV_READ_EDGE( pt1, pt2, reader )               \\\n{                                                      \\\n    assert( sizeof(pt1) == sizeof(CvPoint) &&          \\\n            sizeof(pt2) == sizeof(CvPoint) &&          \\\n            reader.seq->elem_size == sizeof(CvPoint)); \\\n    (pt1) = CV_PREV_POINT( reader );                   \\\n    (pt2) = CV_CURRENT_POINT( reader );                \\\n    (reader).prev_elem = (reader).ptr;                 \\\n    CV_NEXT_SEQ_ELEM( sizeof(CvPoint), (reader));      \\\n}\n\n/************ Graph macros ************/\n\n/** Return next graph edge for given vertex: */\n#define  CV_NEXT_GRAPH_EDGE( edge, vertex )                              \\\n     (assert((edge)->vtx[0] == (vertex) || (edge)->vtx[1] == (vertex)),  \\\n      (edge)->next[(edge)->vtx[1] == (vertex)])\n\n\n\n/****************************************************************************************\\\n*             Data structures for persistence (a.k.a serialization) functionality        *\n\\****************************************************************************************/\n\n/** \"black box\" file storage */\ntypedef struct CvFileStorage CvFileStorage;\n\n/** Storage flags: */\n#define CV_STORAGE_READ          0\n#define CV_STORAGE_WRITE         1\n#define CV_STORAGE_WRITE_TEXT    CV_STORAGE_WRITE\n#define CV_STORAGE_WRITE_BINARY  CV_STORAGE_WRITE\n#define CV_STORAGE_APPEND        2\n#define CV_STORAGE_MEMORY        4\n#define CV_STORAGE_FORMAT_MASK   (7<<3)\n#define CV_STORAGE_FORMAT_AUTO   0\n#define CV_STORAGE_FORMAT_XML    8\n#define CV_STORAGE_FORMAT_YAML  16\n\n/** @brief List of attributes. :\n\nIn the current implementation, attributes are used to pass extra parameters when writing user\nobjects (see cvWrite). XML attributes inside tags are not supported, aside from the object type\nspecification (type_id attribute).\n@see cvAttrList, cvAttrValue\n */\ntypedef struct CvAttrList\n{\n    const char** attr;         /**< NULL-terminated array of (attribute_name,attribute_value) pairs. */\n    struct CvAttrList* next;   /**< Pointer to next chunk of the attributes list.                    */\n}\nCvAttrList;\n\n/** initializes CvAttrList structure */\nCV_INLINE CvAttrList cvAttrList( const char** attr CV_DEFAULT(NULL),\n                                 CvAttrList* next CV_DEFAULT(NULL) )\n{\n    CvAttrList l;\n    l.attr = attr;\n    l.next = next;\n\n    return l;\n}\n\nstruct CvTypeInfo;\n\n#define CV_NODE_NONE        0\n#define CV_NODE_INT         1\n#define CV_NODE_INTEGER     CV_NODE_INT\n#define CV_NODE_REAL        2\n#define CV_NODE_FLOAT       CV_NODE_REAL\n#define CV_NODE_STR         3\n#define CV_NODE_STRING      CV_NODE_STR\n#define CV_NODE_REF         4 /**< not used */\n#define CV_NODE_SEQ         5\n#define CV_NODE_MAP         6\n#define CV_NODE_TYPE_MASK   7\n\n#define CV_NODE_TYPE(flags)  ((flags) & CV_NODE_TYPE_MASK)\n\n/** file node flags */\n#define CV_NODE_FLOW        8 /**<Used only for writing structures in YAML format. */\n#define CV_NODE_USER        16\n#define CV_NODE_EMPTY       32\n#define CV_NODE_NAMED       64\n\n#define CV_NODE_IS_INT(flags)        (CV_NODE_TYPE(flags) == CV_NODE_INT)\n#define CV_NODE_IS_REAL(flags)       (CV_NODE_TYPE(flags) == CV_NODE_REAL)\n#define CV_NODE_IS_STRING(flags)     (CV_NODE_TYPE(flags) == CV_NODE_STRING)\n#define CV_NODE_IS_SEQ(flags)        (CV_NODE_TYPE(flags) == CV_NODE_SEQ)\n#define CV_NODE_IS_MAP(flags)        (CV_NODE_TYPE(flags) == CV_NODE_MAP)\n#define CV_NODE_IS_COLLECTION(flags) (CV_NODE_TYPE(flags) >= CV_NODE_SEQ)\n#define CV_NODE_IS_FLOW(flags)       (((flags) & CV_NODE_FLOW) != 0)\n#define CV_NODE_IS_EMPTY(flags)      (((flags) & CV_NODE_EMPTY) != 0)\n#define CV_NODE_IS_USER(flags)       (((flags) & CV_NODE_USER) != 0)\n#define CV_NODE_HAS_NAME(flags)      (((flags) & CV_NODE_NAMED) != 0)\n\n#define CV_NODE_SEQ_SIMPLE 256\n#define CV_NODE_SEQ_IS_SIMPLE(seq) (((seq)->flags & CV_NODE_SEQ_SIMPLE) != 0)\n\ntypedef struct CvString\n{\n    int len;\n    char* ptr;\n}\nCvString;\n\n/** All the keys (names) of elements in the readed file storage\n   are stored in the hash to speed up the lookup operations: */\ntypedef struct CvStringHashNode\n{\n    unsigned hashval;\n    CvString str;\n    struct CvStringHashNode* next;\n}\nCvStringHashNode;\n\ntypedef struct CvGenericHash CvFileNodeHash;\n\n/** Basic element of the file storage - scalar or collection: */\ntypedef struct CvFileNode\n{\n    int tag;\n    struct CvTypeInfo* info; /**< type information\n            (only for user-defined object, for others it is 0) */\n    union\n    {\n        double f; /**< scalar floating-point number */\n        int i;    /**< scalar integer number */\n        CvString str; /**< text string */\n        CvSeq* seq; /**< sequence (ordered collection of file nodes) */\n        CvFileNodeHash* map; /**< map (collection of named file nodes) */\n    } data;\n}\nCvFileNode;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\ntypedef int (CV_CDECL *CvIsInstanceFunc)( const void* struct_ptr );\ntypedef void (CV_CDECL *CvReleaseFunc)( void** struct_dblptr );\ntypedef void* (CV_CDECL *CvReadFunc)( CvFileStorage* storage, CvFileNode* node );\ntypedef void (CV_CDECL *CvWriteFunc)( CvFileStorage* storage, const char* name,\n                                      const void* struct_ptr, CvAttrList attributes );\ntypedef void* (CV_CDECL *CvCloneFunc)( const void* struct_ptr );\n#ifdef __cplusplus\n}\n#endif\n\n/** @brief Type information\n\nThe structure contains information about one of the standard or user-defined types. Instances of the\ntype may or may not contain a pointer to the corresponding CvTypeInfo structure. In any case, there\nis a way to find the type info structure for a given object using the cvTypeOf function.\nAlternatively, type info can be found by type name using cvFindType, which is used when an object\nis read from file storage. The user can register a new type with cvRegisterType that adds the type\ninformation structure into the beginning of the type list. Thus, it is possible to create\nspecialized types from generic standard types and override the basic methods.\n */\ntypedef struct CvTypeInfo\n{\n    int flags; /**< not used */\n    int header_size; /**< sizeof(CvTypeInfo) */\n    struct CvTypeInfo* prev; /**< previous registered type in the list */\n    struct CvTypeInfo* next; /**< next registered type in the list */\n    const char* type_name; /**< type name, written to file storage */\n    CvIsInstanceFunc is_instance; /**< checks if the passed object belongs to the type */\n    CvReleaseFunc release; /**< releases object (memory etc.) */\n    CvReadFunc read; /**< reads object from file storage */\n    CvWriteFunc write; /**< writes object to file storage */\n    CvCloneFunc clone; /**< creates a copy of the object */\n}\nCvTypeInfo;\n\n\n/**** System data types ******/\n\ntypedef struct CvPluginFuncInfo\n{\n    void** func_addr;\n    void* default_func_addr;\n    const char* func_names;\n    int search_modules;\n    int loaded_from;\n}\nCvPluginFuncInfo;\n\ntypedef struct CvModuleInfo\n{\n    struct CvModuleInfo* next;\n    const char* name;\n    const char* version;\n    CvPluginFuncInfo* func_tab;\n}\nCvModuleInfo;\n\n/** @} */\n\n#endif /*__OPENCV_CORE_TYPES_H__*/\n\n/* End of file. */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/utility.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_UTILITY_H__\n#define __OPENCV_CORE_UTILITY_H__\n\n#ifndef __cplusplus\n#  error utility.hpp header must be compiled as C++\n#endif\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\n\n#ifdef CV_COLLECT_IMPL_DATA\nCV_EXPORTS void setImpl(int flags); // set implementation flags and reset storage arrays\nCV_EXPORTS void addImpl(int flag, const char* func = 0); // add implementation and function name to storage arrays\n// Get stored implementation flags and fucntions names arrays\n// Each implementation entry correspond to function name entry, so you can find which implementation was executed in which fucntion\nCV_EXPORTS int getImpl(std::vector<int> &impl, std::vector<String> &funName);\n\nCV_EXPORTS bool useCollection(); // return implementation collection state\nCV_EXPORTS void setUseCollection(bool flag); // set implementation collection state\n\n#define CV_IMPL_PLAIN  0x01 // native CPU OpenCV implementation\n#define CV_IMPL_OCL    0x02 // OpenCL implementation\n#define CV_IMPL_IPP    0x04 // IPP implementation\n#define CV_IMPL_MT     0x10 // multithreaded implementation\n\n#define CV_IMPL_ADD(impl)                                                   \\\n    if(cv::useCollection())                                                 \\\n    {                                                                       \\\n        cv::addImpl(impl, CV_Func);                                         \\\n    }\n#else\n#define CV_IMPL_ADD(impl)\n#endif\n\n//! @addtogroup core_utils\n//! @{\n\n/** @brief  Automatically Allocated Buffer Class\n\n The class is used for temporary buffers in functions and methods.\n If a temporary buffer is usually small (a few K's of memory),\n but its size depends on the parameters, it makes sense to create a small\n fixed-size array on stack and use it if it's large enough. If the required buffer size\n is larger than the fixed size, another buffer of sufficient size is allocated dynamically\n and released after the processing. Therefore, in typical cases, when the buffer size is small,\n there is no overhead associated with malloc()/free().\n At the same time, there is no limit on the size of processed data.\n\n This is what AutoBuffer does. The template takes 2 parameters - type of the buffer elements and\n the number of stack-allocated elements. Here is how the class is used:\n\n \\code\n void my_func(const cv::Mat& m)\n {\n    cv::AutoBuffer<float> buf; // create automatic buffer containing 1000 floats\n\n    buf.allocate(m.rows); // if m.rows <= 1000, the pre-allocated buffer is used,\n                          // otherwise the buffer of \"m.rows\" floats will be allocated\n                          // dynamically and deallocated in cv::AutoBuffer destructor\n    ...\n }\n \\endcode\n*/\ntemplate<typename _Tp, size_t fixed_size = 1024/sizeof(_Tp)+8> class AutoBuffer\n{\npublic:\n    typedef _Tp value_type;\n\n    //! the default constructor\n    AutoBuffer();\n    //! constructor taking the real buffer size\n    AutoBuffer(size_t _size);\n\n    //! the copy constructor\n    AutoBuffer(const AutoBuffer<_Tp, fixed_size>& buf);\n    //! the assignment operator\n    AutoBuffer<_Tp, fixed_size>& operator = (const AutoBuffer<_Tp, fixed_size>& buf);\n\n    //! destructor. calls deallocate()\n    ~AutoBuffer();\n\n    //! allocates the new buffer of size _size. if the _size is small enough, stack-allocated buffer is used\n    void allocate(size_t _size);\n    //! deallocates the buffer if it was dynamically allocated\n    void deallocate();\n    //! resizes the buffer and preserves the content\n    void resize(size_t _size);\n    //! returns the current buffer size\n    size_t size() const;\n    //! returns pointer to the real buffer, stack-allocated or head-allocated\n    operator _Tp* ();\n    //! returns read-only pointer to the real buffer, stack-allocated or head-allocated\n    operator const _Tp* () const;\n\nprotected:\n    //! pointer to the real buffer, can point to buf if the buffer is small enough\n    _Tp* ptr;\n    //! size of the real buffer\n    size_t sz;\n    //! pre-allocated buffer. At least 1 element to confirm C++ standard reqirements\n    _Tp buf[(fixed_size > 0) ? fixed_size : 1];\n};\n\n/**  @brief Sets/resets the break-on-error mode.\n\nWhen the break-on-error mode is set, the default error handler issues a hardware exception, which\ncan make debugging more convenient.\n\n\\return the previous state\n */\nCV_EXPORTS bool setBreakOnError(bool flag);\n\nextern \"C\" typedef int (*ErrorCallback)( int status, const char* func_name,\n                                       const char* err_msg, const char* file_name,\n                                       int line, void* userdata );\n\n\n/** @brief Sets the new error handler and the optional user data.\n\n  The function sets the new error handler, called from cv::error().\n\n  \\param errCallback the new error handler. If NULL, the default error handler is used.\n  \\param userdata the optional user data pointer, passed to the callback.\n  \\param prevUserdata the optional output parameter where the previous user data pointer is stored\n\n  \\return the previous error handler\n*/\nCV_EXPORTS ErrorCallback redirectError( ErrorCallback errCallback, void* userdata=0, void** prevUserdata=0);\n\n/** @brief Returns a text string formatted using the printf-like expression.\n\nThe function acts like sprintf but forms and returns an STL string. It can be used to form an error\nmessage in the Exception constructor.\n@param fmt printf-compatible formatting specifiers.\n */\nCV_EXPORTS String format( const char* fmt, ... );\nCV_EXPORTS String tempfile( const char* suffix = 0);\nCV_EXPORTS void glob(String pattern, std::vector<String>& result, bool recursive = false);\n\n/** @brief OpenCV will try to set the number of threads for the next parallel region.\n\nIf threads == 0, OpenCV will disable threading optimizations and run all it's functions\nsequentially. Passing threads \\< 0 will reset threads number to system default. This function must\nbe called outside of parallel region.\n\nOpenCV will try to run it's functions with specified threads number, but some behaviour differs from\nframework:\n-   `TBB` – User-defined parallel constructions will run with the same threads number, if\n    another does not specified. If late on user creates own scheduler, OpenCV will be use it.\n-   `OpenMP` – No special defined behaviour.\n-   `Concurrency` – If threads == 1, OpenCV will disable threading optimizations and run it's\n    functions sequentially.\n-   `GCD` – Supports only values \\<= 0.\n-   `C=` – No special defined behaviour.\n@param nthreads Number of threads used by OpenCV.\n@sa getNumThreads, getThreadNum\n */\nCV_EXPORTS_W void setNumThreads(int nthreads);\n\n/** @brief Returns the number of threads used by OpenCV for parallel regions.\n\nAlways returns 1 if OpenCV is built without threading support.\n\nThe exact meaning of return value depends on the threading framework used by OpenCV library:\n- `TBB` – The number of threads, that OpenCV will try to use for parallel regions. If there is\n  any tbb::thread_scheduler_init in user code conflicting with OpenCV, then function returns\n  default number of threads used by TBB library.\n- `OpenMP` – An upper bound on the number of threads that could be used to form a new team.\n- `Concurrency` – The number of threads, that OpenCV will try to use for parallel regions.\n- `GCD` – Unsupported; returns the GCD thread pool limit (512) for compatibility.\n- `C=` – The number of threads, that OpenCV will try to use for parallel regions, if before\n  called setNumThreads with threads \\> 0, otherwise returns the number of logical CPUs,\n  available for the process.\n@sa setNumThreads, getThreadNum\n */\nCV_EXPORTS_W int getNumThreads();\n\n/** @brief Returns the index of the currently executed thread within the current parallel region. Always\nreturns 0 if called outside of parallel region.\n\nThe exact meaning of return value depends on the threading framework used by OpenCV library:\n- `TBB` – Unsupported with current 4.1 TBB release. May be will be supported in future.\n- `OpenMP` – The thread number, within the current team, of the calling thread.\n- `Concurrency` – An ID for the virtual processor that the current context is executing on (0\n  for master thread and unique number for others, but not necessary 1,2,3,...).\n- `GCD` – System calling thread's ID. Never returns 0 inside parallel region.\n- `C=` – The index of the current parallel task.\n@sa setNumThreads, getNumThreads\n */\nCV_EXPORTS_W int getThreadNum();\n\n/** @brief Returns full configuration time cmake output.\n\nReturned value is raw cmake output including version control system revision, compiler version,\ncompiler flags, enabled modules and third party libraries, etc. Output format depends on target\narchitecture.\n */\nCV_EXPORTS_W const String& getBuildInformation();\n\n/** @brief Returns the number of ticks.\n\nThe function returns the number of ticks after the certain event (for example, when the machine was\nturned on). It can be used to initialize RNG or to measure a function execution time by reading the\ntick count before and after the function call. See also the tick frequency.\n */\nCV_EXPORTS_W int64 getTickCount();\n\n/** @brief Returns the number of ticks per second.\n\nThe function returns the number of ticks per second. That is, the following code computes the\nexecution time in seconds:\n@code\n    double t = (double)getTickCount();\n    // do something ...\n    t = ((double)getTickCount() - t)/getTickFrequency();\n@endcode\n */\nCV_EXPORTS_W double getTickFrequency();\n\n/** @brief Returns the number of CPU ticks.\n\nThe function returns the current number of CPU ticks on some architectures (such as x86, x64,\nPowerPC). On other platforms the function is equivalent to getTickCount. It can also be used for\nvery accurate time measurements, as well as for RNG initialization. Note that in case of multi-CPU\nsystems a thread, from which getCPUTickCount is called, can be suspended and resumed at another CPU\nwith its own counter. So, theoretically (and practically) the subsequent calls to the function do\nnot necessary return the monotonously increasing values. Also, since a modern CPU varies the CPU\nfrequency depending on the load, the number of CPU clocks spent in some code cannot be directly\nconverted to time units. Therefore, getTickCount is generally a preferable solution for measuring\nexecution time.\n */\nCV_EXPORTS_W int64 getCPUTickCount();\n\n/** @brief Returns true if the specified feature is supported by the host hardware.\n\nThe function returns true if the host hardware supports the specified feature. When user calls\nsetUseOptimized(false), the subsequent calls to checkHardwareSupport() will return false until\nsetUseOptimized(true) is called. This way user can dynamically switch on and off the optimized code\nin OpenCV.\n@param feature The feature of interest, one of cv::CpuFeatures\n */\nCV_EXPORTS_W bool checkHardwareSupport(int feature);\n\n/** @brief Returns the number of logical CPUs available for the process.\n */\nCV_EXPORTS_W int getNumberOfCPUs();\n\n\n/** @brief Aligns a pointer to the specified number of bytes.\n\nThe function returns the aligned pointer of the same type as the input pointer:\n\\f[\\texttt{(_Tp*)(((size_t)ptr + n-1) & -n)}\\f]\n@param ptr Aligned pointer.\n@param n Alignment size that must be a power of two.\n */\ntemplate<typename _Tp> static inline _Tp* alignPtr(_Tp* ptr, int n=(int)sizeof(_Tp))\n{\n    return (_Tp*)(((size_t)ptr + n-1) & -n);\n}\n\n/** @brief Aligns a buffer size to the specified number of bytes.\n\nThe function returns the minimum number that is greater or equal to sz and is divisible by n :\n\\f[\\texttt{(sz + n-1) & -n}\\f]\n@param sz Buffer size to align.\n@param n Alignment size that must be a power of two.\n */\nstatic inline size_t alignSize(size_t sz, int n)\n{\n    CV_DbgAssert((n & (n - 1)) == 0); // n is a power of 2\n    return (sz + n-1) & -n;\n}\n\n/** @brief Enables or disables the optimized code.\n\nThe function can be used to dynamically turn on and off optimized code (code that uses SSE2, AVX,\nand other instructions on the platforms that support it). It sets a global flag that is further\nchecked by OpenCV functions. Since the flag is not checked in the inner OpenCV loops, it is only\nsafe to call the function on the very top level in your application where you can be sure that no\nother OpenCV function is currently executed.\n\nBy default, the optimized code is enabled unless you disable it in CMake. The current status can be\nretrieved using useOptimized.\n@param onoff The boolean flag specifying whether the optimized code should be used (onoff=true)\nor not (onoff=false).\n */\nCV_EXPORTS_W void setUseOptimized(bool onoff);\n\n/** @brief Returns the status of optimized code usage.\n\nThe function returns true if the optimized code is enabled. Otherwise, it returns false.\n */\nCV_EXPORTS_W bool useOptimized();\n\nstatic inline size_t getElemSize(int type) { return CV_ELEM_SIZE(type); }\n\n/////////////////////////////// Parallel Primitives //////////////////////////////////\n\n/** @brief Base class for parallel data processors\n*/\nclass CV_EXPORTS ParallelLoopBody\n{\npublic:\n    virtual ~ParallelLoopBody();\n    virtual void operator() (const Range& range) const = 0;\n};\n\n/** @brief Parallel data processor\n*/\nCV_EXPORTS void parallel_for_(const Range& range, const ParallelLoopBody& body, double nstripes=-1.);\n\n/////////////////////////////// forEach method of cv::Mat ////////////////////////////\ntemplate<typename _Tp, typename Functor> inline\nvoid Mat::forEach_impl(const Functor& operation) {\n    if (false) {\n        operation(*reinterpret_cast<_Tp*>(0), reinterpret_cast<int*>(NULL));\n        // If your compiler fail in this line.\n        // Please check that your functor signature is\n        //     (_Tp&, const int*)   <- multidimential\n        //  or (_Tp&, void*)        <- in case of you don't need current idx.\n    }\n\n    CV_Assert(this->total() / this->size[this->dims - 1] <= INT_MAX);\n    const int LINES = static_cast<int>(this->total() / this->size[this->dims - 1]);\n\n    class PixelOperationWrapper :public ParallelLoopBody\n    {\n    public:\n        PixelOperationWrapper(Mat_<_Tp>* const frame, const Functor& _operation)\n            : mat(frame), op(_operation) {};\n        virtual ~PixelOperationWrapper(){};\n        // ! Overloaded virtual operator\n        // convert range call to row call.\n        virtual void operator()(const Range &range) const {\n            const int DIMS = mat->dims;\n            const int COLS = mat->size[DIMS - 1];\n            if (DIMS <= 2) {\n                for (int row = range.start; row < range.end; ++row) {\n                    this->rowCall2(row, COLS);\n                }\n            } else {\n                std::vector<int> idx(COLS); /// idx is modified in this->rowCall\n                idx[DIMS - 2] = range.start - 1;\n\n                for (int line_num = range.start; line_num < range.end; ++line_num) {\n                    idx[DIMS - 2]++;\n                    for (int i = DIMS - 2; i >= 0; --i) {\n                        if (idx[i] >= mat->size[i]) {\n                            idx[i - 1] += idx[i] / mat->size[i];\n                            idx[i] %= mat->size[i];\n                            continue; // carry-over;\n                        }\n                        else {\n                            break;\n                        }\n                    }\n                    this->rowCall(&idx[0], COLS, DIMS);\n                }\n            }\n        };\n    private:\n        Mat_<_Tp>* const mat;\n        const Functor op;\n        // ! Call operator for each elements in this row.\n        inline void rowCall(int* const idx, const int COLS, const int DIMS) const {\n            int &col = idx[DIMS - 1];\n            col = 0;\n            _Tp* pixel = &(mat->template at<_Tp>(idx));\n\n            while (col < COLS) {\n                op(*pixel, const_cast<const int*>(idx));\n                pixel++; col++;\n            }\n            col = 0;\n        }\n        // ! Call operator for each elements in this row. 2d mat special version.\n        inline void rowCall2(const int row, const int COLS) const {\n            union Index{\n                int body[2];\n                operator const int*() const {\n                    return reinterpret_cast<const int*>(this);\n                }\n                int& operator[](const int i) {\n                    return body[i];\n                }\n            } idx = {{row, 0}};\n            // Special union is needed to avoid\n            // \"error: array subscript is above array bounds [-Werror=array-bounds]\"\n            // when call the functor `op` such that access idx[3].\n\n            _Tp* pixel = &(mat->template at<_Tp>(idx));\n            const _Tp* const pixel_end = pixel + COLS;\n            while(pixel < pixel_end) {\n                op(*pixel++, static_cast<const int*>(idx));\n                idx[1]++;\n            }\n        };\n        PixelOperationWrapper& operator=(const PixelOperationWrapper &) {\n            CV_Assert(false);\n            // We can not remove this implementation because Visual Studio warning C4822.\n            return *this;\n        };\n    };\n\n    parallel_for_(cv::Range(0, LINES), PixelOperationWrapper(reinterpret_cast<Mat_<_Tp>*>(this), operation));\n}\n\n/////////////////////////// Synchronization Primitives ///////////////////////////////\n\nclass CV_EXPORTS Mutex\n{\npublic:\n    Mutex();\n    ~Mutex();\n    Mutex(const Mutex& m);\n    Mutex& operator = (const Mutex& m);\n\n    void lock();\n    bool trylock();\n    void unlock();\n\n    struct Impl;\nprotected:\n    Impl* impl;\n};\n\nclass CV_EXPORTS AutoLock\n{\npublic:\n    AutoLock(Mutex& m) : mutex(&m) { mutex->lock(); }\n    ~AutoLock() { mutex->unlock(); }\nprotected:\n    Mutex* mutex;\nprivate:\n    AutoLock(const AutoLock&);\n    AutoLock& operator = (const AutoLock&);\n};\n\n// TLS interface\nclass CV_EXPORTS TLSDataContainer\n{\nprotected:\n    TLSDataContainer();\n    virtual ~TLSDataContainer();\n\n    void  gatherData(std::vector<void*> &data) const;\n#if OPENCV_ABI_COMPATIBILITY > 300\n    void* getData() const;\n    void  release();\n\nprivate:\n#else\n    void  release();\n\npublic:\n    void* getData() const;\n#endif\n    virtual void* createDataInstance() const = 0;\n    virtual void  deleteDataInstance(void* pData) const = 0;\n\n    int key_;\n};\n\n// Main TLS data class\ntemplate <typename T>\nclass TLSData : protected TLSDataContainer\n{\npublic:\n    inline TLSData()        {}\n    inline ~TLSData()       { release();            } // Release key and delete associated data\n    inline T* get() const   { return (T*)getData(); } // Get data assosiated with key\n\n     // Get data from all threads\n    inline void gather(std::vector<T*> &data) const\n    {\n        std::vector<void*> &dataVoid = reinterpret_cast<std::vector<void*>&>(data);\n        gatherData(dataVoid);\n    }\n\nprivate:\n    virtual void* createDataInstance() const {return new T;}                // Wrapper to allocate data by template\n    virtual void  deleteDataInstance(void* pData) const {delete (T*)pData;} // Wrapper to release data by template\n\n    // Disable TLS copy operations\n    TLSData(TLSData &) {};\n    TLSData& operator =(const TLSData &) {return *this;};\n};\n\n/** @brief Designed for command line parsing\n\nThe sample below demonstrates how to use CommandLineParser:\n@code\n    CommandLineParser parser(argc, argv, keys);\n    parser.about(\"Application name v1.0.0\");\n\n    if (parser.has(\"help\"))\n    {\n        parser.printMessage();\n        return 0;\n    }\n\n    int N = parser.get<int>(\"N\");\n    double fps = parser.get<double>(\"fps\");\n    String path = parser.get<String>(\"path\");\n\n    use_time_stamp = parser.has(\"timestamp\");\n\n    String img1 = parser.get<String>(0);\n    String img2 = parser.get<String>(1);\n\n    int repeat = parser.get<int>(2);\n\n    if (!parser.check())\n    {\n        parser.printErrors();\n        return 0;\n    }\n@endcode\n\n### Keys syntax\n\nThe keys parameter is a string containing several blocks, each one is enclosed in curley braces and\ndescribes one argument. Each argument contains three parts separated by the `|` symbol:\n\n-# argument names is a space-separated list of option synonyms (to mark argument as positional, prefix it with the `@` symbol)\n-# default value will be used if the argument was not provided (can be empty)\n-# help message (can be empty)\n\nFor example:\n\n@code{.cpp}\n    const String keys =\n        \"{help h usage ? |      | print this message   }\"\n        \"{@image1        |      | image1 for compare   }\"\n        \"{@image2        |<none>| image2 for compare   }\"\n        \"{@repeat        |1     | number               }\"\n        \"{path           |.     | path to file         }\"\n        \"{fps            | -1.0 | fps for output video }\"\n        \"{N count        |100   | count of objects     }\"\n        \"{ts timestamp   |      | use time stamp       }\"\n        ;\n}\n@endcode\n\nNote that there are no default values for `help` and `timestamp` so we can check their presence using the `has()` method.\nArguments with default values are considered to be always present. Use the `get()` method in these cases to check their\nactual value instead.\n\nString keys like `get<String>(\"@image1\")` return the empty string `\"\"` by default - even with an empty default value.\nUse the special `<none>` default value to enforce that the returned string must not be empty. (like in `get<String>(\"@image2\")`)\n\n### Usage\n\nFor the described keys:\n\n@code{.sh}\n    # Good call (3 positional parameters: image1, image2 and repeat; N is 200, ts is true)\n    $ ./app -N=200 1.png 2.jpg 19 -ts\n\n    # Bad call\n    $ ./app -fps=aaa\n    ERRORS:\n    Parameter 'fps': can not convert: [aaa] to [double]\n@endcode\n */\nclass CV_EXPORTS CommandLineParser\n{\npublic:\n\n    /** @brief Constructor\n\n    Initializes command line parser object\n\n    @param argc number of command line arguments (from main())\n    @param argv array of command line arguments (from main())\n    @param keys string describing acceptable command line parameters (see class description for syntax)\n    */\n    CommandLineParser(int argc, const char* const argv[], const String& keys);\n\n    /** @brief Copy constructor */\n    CommandLineParser(const CommandLineParser& parser);\n\n    /** @brief Assignment operator */\n    CommandLineParser& operator = (const CommandLineParser& parser);\n\n    /** @brief Destructor */\n    ~CommandLineParser();\n\n    /** @brief Returns application path\n\n    This method returns the path to the executable from the command line (`argv[0]`).\n\n    For example, if the application has been started with such command:\n    @code{.sh}\n    $ ./bin/my-executable\n    @endcode\n    this method will return `./bin`.\n    */\n    String getPathToApplication() const;\n\n    /** @brief Access arguments by name\n\n    Returns argument converted to selected type. If the argument is not known or can not be\n    converted to selected type, the error flag is set (can be checked with @ref check).\n\n    For example, define:\n    @code{.cpp}\n    String keys = \"{N count||}\";\n    @endcode\n\n    Call:\n    @code{.sh}\n    $ ./my-app -N=20\n    # or\n    $ ./my-app --count=20\n    @endcode\n\n    Access:\n    @code{.cpp}\n    int N = parser.get<int>(\"N\");\n    @endcode\n\n    @param name name of the argument\n    @param space_delete remove spaces from the left and right of the string\n    @tparam T the argument will be converted to this type if possible\n\n    @note You can access positional arguments by their `@`-prefixed name:\n    @code{.cpp}\n    parser.get<String>(\"@image\");\n    @endcode\n     */\n    template <typename T>\n    T get(const String& name, bool space_delete = true) const\n    {\n        T val = T();\n        getByName(name, space_delete, ParamType<T>::type, (void*)&val);\n        return val;\n    }\n\n    /** @brief Access positional arguments by index\n\n    Returns argument converted to selected type. Indexes are counted from zero.\n\n    For example, define:\n    @code{.cpp}\n    String keys = \"{@arg1||}{@arg2||}\"\n    @endcode\n\n    Call:\n    @code{.sh}\n    ./my-app abc qwe\n    @endcode\n\n    Access arguments:\n    @code{.cpp}\n    String val_1 = parser.get<String>(0); // returns \"abc\", arg1\n    String val_2 = parser.get<String>(1); // returns \"qwe\", arg2\n    @endcode\n\n    @param index index of the argument\n    @param space_delete remove spaces from the left and right of the string\n    @tparam T the argument will be converted to this type if possible\n     */\n    template <typename T>\n    T get(int index, bool space_delete = true) const\n    {\n        T val = T();\n        getByIndex(index, space_delete, ParamType<T>::type, (void*)&val);\n        return val;\n    }\n\n    /** @brief Check if field was provided in the command line\n\n    @param name argument name to check\n    */\n    bool has(const String& name) const;\n\n    /** @brief Check for parsing errors\n\n    Returns true if error occured while accessing the parameters (bad conversion, missing arguments,\n    etc.). Call @ref printErrors to print error messages list.\n     */\n    bool check() const;\n\n    /** @brief Set the about message\n\n    The about message will be shown when @ref printMessage is called, right before arguments table.\n     */\n    void about(const String& message);\n\n    /** @brief Print help message\n\n    This method will print standard help message containing the about message and arguments description.\n\n    @sa about\n    */\n    void printMessage() const;\n\n    /** @brief Print list of errors occured\n\n    @sa check\n    */\n    void printErrors() const;\n\nprotected:\n    void getByName(const String& name, bool space_delete, int type, void* dst) const;\n    void getByIndex(int index, bool space_delete, int type, void* dst) const;\n\n    struct Impl;\n    Impl* impl;\n};\n\n//! @} core_utils\n\n//! @cond IGNORED\n\n/////////////////////////////// AutoBuffer implementation ////////////////////////////////////////\n\ntemplate<typename _Tp, size_t fixed_size> inline\nAutoBuffer<_Tp, fixed_size>::AutoBuffer()\n{\n    ptr = buf;\n    sz = fixed_size;\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline\nAutoBuffer<_Tp, fixed_size>::AutoBuffer(size_t _size)\n{\n    ptr = buf;\n    sz = fixed_size;\n    allocate(_size);\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline\nAutoBuffer<_Tp, fixed_size>::AutoBuffer(const AutoBuffer<_Tp, fixed_size>& abuf )\n{\n    ptr = buf;\n    sz = fixed_size;\n    allocate(abuf.size());\n    for( size_t i = 0; i < sz; i++ )\n        ptr[i] = abuf.ptr[i];\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>&\nAutoBuffer<_Tp, fixed_size>::operator = (const AutoBuffer<_Tp, fixed_size>& abuf)\n{\n    if( this != &abuf )\n    {\n        deallocate();\n        allocate(abuf.size());\n        for( size_t i = 0; i < sz; i++ )\n            ptr[i] = abuf.ptr[i];\n    }\n    return *this;\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline\nAutoBuffer<_Tp, fixed_size>::~AutoBuffer()\n{ deallocate(); }\n\ntemplate<typename _Tp, size_t fixed_size> inline void\nAutoBuffer<_Tp, fixed_size>::allocate(size_t _size)\n{\n    if(_size <= sz)\n    {\n        sz = _size;\n        return;\n    }\n    deallocate();\n    if(_size > fixed_size)\n    {\n        ptr = new _Tp[_size];\n        sz = _size;\n    }\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline void\nAutoBuffer<_Tp, fixed_size>::deallocate()\n{\n    if( ptr != buf )\n    {\n        delete[] ptr;\n        ptr = buf;\n        sz = fixed_size;\n    }\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline void\nAutoBuffer<_Tp, fixed_size>::resize(size_t _size)\n{\n    if(_size <= sz)\n    {\n        sz = _size;\n        return;\n    }\n    size_t i, prevsize = sz, minsize = MIN(prevsize, _size);\n    _Tp* prevptr = ptr;\n\n    ptr = _size > fixed_size ? new _Tp[_size] : buf;\n    sz = _size;\n\n    if( ptr != prevptr )\n        for( i = 0; i < minsize; i++ )\n            ptr[i] = prevptr[i];\n    for( i = prevsize; i < _size; i++ )\n        ptr[i] = _Tp();\n\n    if( prevptr != buf )\n        delete[] prevptr;\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline size_t\nAutoBuffer<_Tp, fixed_size>::size() const\n{ return sz; }\n\ntemplate<typename _Tp, size_t fixed_size> inline\nAutoBuffer<_Tp, fixed_size>::operator _Tp* ()\n{ return ptr; }\n\ntemplate<typename _Tp, size_t fixed_size> inline\nAutoBuffer<_Tp, fixed_size>::operator const _Tp* () const\n{ return ptr; }\n\n#ifndef OPENCV_NOSTL\ntemplate<> inline std::string CommandLineParser::get<std::string>(int index, bool space_delete) const\n{\n    return get<String>(index, space_delete);\n}\ntemplate<> inline std::string CommandLineParser::get<std::string>(const String& name, bool space_delete) const\n{\n    return get<String>(name, space_delete);\n}\n#endif // OPENCV_NOSTL\n\n//! @endcond\n\n} //namespace cv\n\n#ifndef DISABLE_OPENCV_24_COMPATIBILITY\n#include \"opencv2/core/core_c.h\"\n#endif\n\n#endif //__OPENCV_CORE_UTILITY_H__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/va_intel.hpp",
    "content": "// This file is part of OpenCV project.\n// It is subject to the license terms in the LICENSE file found in the top-level directory\n// of this distribution and at http://opencv.org/license.html.\n\n// Copyright (C) 2015, Itseez, Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n\n#ifndef __OPENCV_CORE_VA_INTEL_HPP__\n#define __OPENCV_CORE_VA_INTEL_HPP__\n\n#ifndef __cplusplus\n#  error va_intel.hpp header must be compiled as C++\n#endif\n\n#include \"opencv2/core.hpp\"\n#include \"ocl.hpp\"\n\n#if defined(HAVE_VA)\n# include \"va/va.h\"\n#else  // HAVE_VA\n# if !defined(_VA_H_)\n    typedef void* VADisplay;\n    typedef unsigned int VASurfaceID;\n# endif // !_VA_H_\n#endif // HAVE_VA\n\nnamespace cv { namespace va_intel {\n\n/** @addtogroup core_va_intel\nThis section describes Intel VA-API/OpenCL (CL-VA) interoperability.\n\nTo enable CL-VA interoperability support, configure OpenCV using CMake with WITH_VA_INTEL=ON . Currently VA-API is\nsupported on Linux only. You should also install Intel Media Server Studio (MSS) to use this feature. You may\nhave to specify the path(s) to MSS components for cmake in environment variables: VA_INTEL_MSDK_ROOT for Media SDK\n(default is \"/opt/intel/mediasdk\"), and VA_INTEL_IOCL_ROOT for Intel OpenCL (default is \"/opt/intel/opencl\").\n\nTo use CL-VA interoperability you should first create VADisplay (libva), and then call initializeContextFromVA()\nfunction to create OpenCL context and set up interoperability.\n*/\n//! @{\n\n/////////////////// CL-VA Interoperability Functions ///////////////////\n\nnamespace ocl {\nusing namespace cv::ocl;\n\n// TODO static functions in the Context class\n/** @brief Creates OpenCL context from VA.\n@param display    - VADisplay for which CL interop should be established.\n@param tryInterop - try to set up for interoperability, if true; set up for use slow copy if false.\n@return Returns reference to OpenCL Context\n */\nCV_EXPORTS Context& initializeContextFromVA(VADisplay display, bool tryInterop = true);\n\n} // namespace cv::va_intel::ocl\n\n/** @brief Converts InputArray to VASurfaceID object.\n@param display - VADisplay object.\n@param src     - source InputArray.\n@param surface - destination VASurfaceID object.\n@param size    - size of image represented by VASurfaceID object.\n */\nCV_EXPORTS void convertToVASurface(VADisplay display, InputArray src, VASurfaceID surface, Size size);\n\n/** @brief Converts VASurfaceID object to OutputArray.\n@param display - VADisplay object.\n@param surface - source VASurfaceID object.\n@param size    - size of image represented by VASurfaceID object.\n@param dst     - destination OutputArray.\n */\nCV_EXPORTS void convertFromVASurface(VADisplay display, VASurfaceID surface, Size size, OutputArray dst);\n\n//! @}\n\n}} // namespace cv::va_intel\n\n#endif /* __OPENCV_CORE_VA_INTEL_HPP__ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/version.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright( C) 2000-2015, Intel Corporation, all rights reserved.\n// Copyright (C) 2011-2013, NVIDIA Corporation, all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n//(including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort(including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n/*\n  definition of the current version of OpenCV\n  Usefull to test in user programs\n*/\n\n#ifndef __OPENCV_VERSION_HPP__\n#define __OPENCV_VERSION_HPP__\n\n#define CV_VERSION_MAJOR    3\n#define CV_VERSION_MINOR    1\n#define CV_VERSION_REVISION 0\n#define CV_VERSION_STATUS   \"\"\n\n#define CVAUX_STR_EXP(__A)  #__A\n#define CVAUX_STR(__A)      CVAUX_STR_EXP(__A)\n\n#define CVAUX_STRW_EXP(__A)  L#__A\n#define CVAUX_STRW(__A)      CVAUX_STRW_EXP(__A)\n\n#define CV_VERSION          CVAUX_STR(CV_VERSION_MAJOR) \".\" CVAUX_STR(CV_VERSION_MINOR) \".\" CVAUX_STR(CV_VERSION_REVISION) CV_VERSION_STATUS\n\n/* old  style version constants*/\n#define CV_MAJOR_VERSION    CV_VERSION_MAJOR\n#define CV_MINOR_VERSION    CV_VERSION_MINOR\n#define CV_SUBMINOR_VERSION CV_VERSION_REVISION\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core/wimage.hpp",
    "content": "/*M//////////////////////////////////////////////////////////////////////////////\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to\n//  this license.  If you do not agree to this license, do not download,\n//  install, copy or use the software.\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2008, Google, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n//  * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//  * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//  * The name of Intel Corporation or contributors may not be used to endorse\n//     or promote products derived from this software without specific\n//     prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\"\n// and any express or implied warranties, including, but not limited to, the\n// implied warranties of merchantability and fitness for a particular purpose\n// are disclaimed. In no event shall the Intel Corporation or contributors be\n// liable for any direct, indirect, incidental, special, exemplary, or\n// consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n/////////////////////////////////////////////////////////////////////////////////\n//M*/\n\n#ifndef __OPENCV_CORE_WIMAGE_HPP__\n#define __OPENCV_CORE_WIMAGE_HPP__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\n\nnamespace cv {\n\n//! @addtogroup core\n//! @{\n\ntemplate <typename T> class WImage;\ntemplate <typename T> class WImageBuffer;\ntemplate <typename T> class WImageView;\n\ntemplate<typename T, int C> class WImageC;\ntemplate<typename T, int C> class WImageBufferC;\ntemplate<typename T, int C> class WImageViewC;\n\n// Commonly used typedefs.\ntypedef WImage<uchar>            WImage_b;\ntypedef WImageView<uchar>        WImageView_b;\ntypedef WImageBuffer<uchar>      WImageBuffer_b;\n\ntypedef WImageC<uchar, 1>        WImage1_b;\ntypedef WImageViewC<uchar, 1>    WImageView1_b;\ntypedef WImageBufferC<uchar, 1>  WImageBuffer1_b;\n\ntypedef WImageC<uchar, 3>        WImage3_b;\ntypedef WImageViewC<uchar, 3>    WImageView3_b;\ntypedef WImageBufferC<uchar, 3>  WImageBuffer3_b;\n\ntypedef WImage<float>            WImage_f;\ntypedef WImageView<float>        WImageView_f;\ntypedef WImageBuffer<float>      WImageBuffer_f;\n\ntypedef WImageC<float, 1>        WImage1_f;\ntypedef WImageViewC<float, 1>    WImageView1_f;\ntypedef WImageBufferC<float, 1>  WImageBuffer1_f;\n\ntypedef WImageC<float, 3>        WImage3_f;\ntypedef WImageViewC<float, 3>    WImageView3_f;\ntypedef WImageBufferC<float, 3>  WImageBuffer3_f;\n\n// There isn't a standard for signed and unsigned short so be more\n// explicit in the typename for these cases.\ntypedef WImage<short>            WImage_16s;\ntypedef WImageView<short>        WImageView_16s;\ntypedef WImageBuffer<short>      WImageBuffer_16s;\n\ntypedef WImageC<short, 1>        WImage1_16s;\ntypedef WImageViewC<short, 1>    WImageView1_16s;\ntypedef WImageBufferC<short, 1>  WImageBuffer1_16s;\n\ntypedef WImageC<short, 3>        WImage3_16s;\ntypedef WImageViewC<short, 3>    WImageView3_16s;\ntypedef WImageBufferC<short, 3>  WImageBuffer3_16s;\n\ntypedef WImage<ushort>            WImage_16u;\ntypedef WImageView<ushort>        WImageView_16u;\ntypedef WImageBuffer<ushort>      WImageBuffer_16u;\n\ntypedef WImageC<ushort, 1>        WImage1_16u;\ntypedef WImageViewC<ushort, 1>    WImageView1_16u;\ntypedef WImageBufferC<ushort, 1>  WImageBuffer1_16u;\n\ntypedef WImageC<ushort, 3>        WImage3_16u;\ntypedef WImageViewC<ushort, 3>    WImageView3_16u;\ntypedef WImageBufferC<ushort, 3>  WImageBuffer3_16u;\n\n/** @brief Image class which provides a thin layer around an IplImage.\n\nThe goals of the class design are:\n\n    -# All the data has explicit ownership to avoid memory leaks\n    -# No hidden allocations or copies for performance.\n    -# Easy access to OpenCV methods (which will access IPP if available)\n    -# Can easily treat external data as an image\n    -# Easy to create images which are subsets of other images\n    -# Fast pixel access which can take advantage of number of channels if known at compile time.\n\nThe WImage class is the image class which provides the data accessors. The 'W' comes from the fact\nthat it is also a wrapper around the popular but inconvenient IplImage class. A WImage can be\nconstructed either using a WImageBuffer class which allocates and frees the data, or using a\nWImageView class which constructs a subimage or a view into external data. The view class does no\nmemory management. Each class actually has two versions, one when the number of channels is known\nat compile time and one when it isn't. Using the one with the number of channels specified can\nprovide some compile time optimizations by using the fact that the number of channels is a\nconstant.\n\nWe use the convention (c,r) to refer to column c and row r with (0,0) being the upper left corner.\nThis is similar to standard Euclidean coordinates with the first coordinate varying in the\nhorizontal direction and the second coordinate varying in the vertical direction. Thus (c,r) is\nusually in the domain [0, width) X [0, height)\n\nExample usage:\n@code\nWImageBuffer3_b  im(5,7);  // Make a 5X7 3 channel image of type uchar\nWImageView3_b  sub_im(im, 2,2, 3,3); // 3X3 submatrix\nvector<float> vec(10, 3.0f);\nWImageView1_f user_im(&vec[0], 2, 5);  // 2X5 image w/ supplied data\n\nim.SetZero();  // same as cvSetZero(im.Ipl())\n*im(2, 3) = 15;  // Modify the element at column 2, row 3\nMySetRand(&sub_im);\n\n// Copy the second row into the first.  This can be done with no memory\n// allocation and will use SSE if IPP is available.\nint w = im.Width();\nim.View(0,0, w,1).CopyFrom(im.View(0,1, w,1));\n\n// Doesn't care about source of data since using WImage\nvoid MySetRand(WImage_b* im) { // Works with any number of channels\nfor (int r = 0; r < im->Height(); ++r) {\n float* row = im->Row(r);\n for (int c = 0; c < im->Width(); ++c) {\n    for (int ch = 0; ch < im->Channels(); ++ch, ++row) {\n      *row = uchar(rand() & 255);\n    }\n }\n}\n}\n@endcode\n\nFunctions that are not part of the basic image allocation, viewing, and access should come from\nOpenCV, except some useful functions that are not part of OpenCV can be found in wimage_util.h\n*/\ntemplate<typename T>\nclass WImage\n{\npublic:\n    typedef T BaseType;\n\n    // WImage is an abstract class with no other virtual methods so make the\n    // destructor virtual.\n    virtual ~WImage() = 0;\n\n    // Accessors\n    IplImage* Ipl() {return image_; }\n    const IplImage* Ipl() const {return image_; }\n    T* ImageData() { return reinterpret_cast<T*>(image_->imageData); }\n    const T* ImageData() const {\n        return reinterpret_cast<const T*>(image_->imageData);\n    }\n\n    int Width() const {return image_->width; }\n    int Height() const {return image_->height; }\n\n    // WidthStep is the number of bytes to go to the pixel with the next y coord\n    int WidthStep() const {return image_->widthStep; }\n\n    int Channels() const {return image_->nChannels; }\n    int ChannelSize() const {return sizeof(T); }  // number of bytes per channel\n\n    // Number of bytes per pixel\n    int PixelSize() const {return Channels() * ChannelSize(); }\n\n    // Return depth type (e.g. IPL_DEPTH_8U, IPL_DEPTH_32F) which is the number\n    // of bits per channel and with the signed bit set.\n    // This is known at compile time using specializations.\n    int Depth() const;\n\n    inline const T* Row(int r) const {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep);\n    }\n\n    inline T* Row(int r) {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep);\n    }\n\n    // Pixel accessors which returns a pointer to the start of the channel\n    inline T* operator() (int c, int r)  {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep) +\n            c*Channels();\n    }\n\n    inline const T* operator() (int c, int r) const  {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep) +\n            c*Channels();\n    }\n\n    // Copy the contents from another image which is just a convenience to cvCopy\n    void CopyFrom(const WImage<T>& src) { cvCopy(src.Ipl(), image_); }\n\n    // Set contents to zero which is just a convenient to cvSetZero\n    void SetZero() { cvSetZero(image_); }\n\n    // Construct a view into a region of this image\n    WImageView<T> View(int c, int r, int width, int height);\n\nprotected:\n    // Disallow copy and assignment\n    WImage(const WImage&);\n    void operator=(const WImage&);\n\n    explicit WImage(IplImage* img) : image_(img) {\n        assert(!img || img->depth == Depth());\n    }\n\n    void SetIpl(IplImage* image) {\n        assert(!image || image->depth == Depth());\n        image_ = image;\n    }\n\n    IplImage* image_;\n};\n\n\n/** Image class when both the pixel type and number of channels\nare known at compile time.  This wrapper will speed up some of the operations\nlike accessing individual pixels using the () operator.\n*/\ntemplate<typename T, int C>\nclass WImageC : public WImage<T>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n    enum { kChannels = C };\n\n    explicit WImageC(IplImage* img) : WImage<T>(img) {\n        assert(!img || img->nChannels == Channels());\n    }\n\n    // Construct a view into a region of this image\n    WImageViewC<T, C> View(int c, int r, int width, int height);\n\n    // Copy the contents from another image which is just a convenience to cvCopy\n    void CopyFrom(const WImageC<T, C>& src) {\n        cvCopy(src.Ipl(), WImage<T>::image_);\n    }\n\n    // WImageC is an abstract class with no other virtual methods so make the\n    // destructor virtual.\n    virtual ~WImageC() = 0;\n\n    int Channels() const {return C; }\n\nprotected:\n    // Disallow copy and assignment\n    WImageC(const WImageC&);\n    void operator=(const WImageC&);\n\n    void SetIpl(IplImage* image) {\n        assert(!image || image->depth == WImage<T>::Depth());\n        WImage<T>::SetIpl(image);\n    }\n};\n\n/** Image class which owns the data, so it can be allocated and is always\nfreed.  It cannot be copied but can be explicity cloned.\n*/\ntemplate<typename T>\nclass WImageBuffer : public WImage<T>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n\n    // Default constructor which creates an object that can be\n    WImageBuffer() : WImage<T>(0) {}\n\n    WImageBuffer(int width, int height, int nchannels) : WImage<T>(0) {\n        Allocate(width, height, nchannels);\n    }\n\n    // Constructor which takes ownership of a given IplImage so releases\n    // the image on destruction.\n    explicit WImageBuffer(IplImage* img) : WImage<T>(img) {}\n\n    // Allocate an image.  Does nothing if current size is the same as\n    // the new size.\n    void Allocate(int width, int height, int nchannels);\n\n    // Set the data to point to an image, releasing the old data\n    void SetIpl(IplImage* img) {\n        ReleaseImage();\n        WImage<T>::SetIpl(img);\n    }\n\n    // Clone an image which reallocates the image if of a different dimension.\n    void CloneFrom(const WImage<T>& src) {\n        Allocate(src.Width(), src.Height(), src.Channels());\n        CopyFrom(src);\n    }\n\n    ~WImageBuffer() {\n        ReleaseImage();\n    }\n\n    // Release the image if it isn't null.\n    void ReleaseImage() {\n        if (WImage<T>::image_) {\n            IplImage* image = WImage<T>::image_;\n            cvReleaseImage(&image);\n            WImage<T>::SetIpl(0);\n        }\n    }\n\n    bool IsNull() const {return WImage<T>::image_ == NULL; }\n\nprivate:\n    // Disallow copy and assignment\n    WImageBuffer(const WImageBuffer&);\n    void operator=(const WImageBuffer&);\n};\n\n/** Like a WImageBuffer class but when the number of channels is known at compile time.\n*/\ntemplate<typename T, int C>\nclass WImageBufferC : public WImageC<T, C>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n    enum { kChannels = C };\n\n    // Default constructor which creates an object that can be\n    WImageBufferC() : WImageC<T, C>(0) {}\n\n    WImageBufferC(int width, int height) : WImageC<T, C>(0) {\n        Allocate(width, height);\n    }\n\n    // Constructor which takes ownership of a given IplImage so releases\n    // the image on destruction.\n    explicit WImageBufferC(IplImage* img) : WImageC<T, C>(img) {}\n\n    // Allocate an image.  Does nothing if current size is the same as\n    // the new size.\n    void Allocate(int width, int height);\n\n    // Set the data to point to an image, releasing the old data\n    void SetIpl(IplImage* img) {\n        ReleaseImage();\n        WImageC<T, C>::SetIpl(img);\n    }\n\n    // Clone an image which reallocates the image if of a different dimension.\n    void CloneFrom(const WImageC<T, C>& src) {\n        Allocate(src.Width(), src.Height());\n        CopyFrom(src);\n    }\n\n    ~WImageBufferC() {\n        ReleaseImage();\n    }\n\n    // Release the image if it isn't null.\n    void ReleaseImage() {\n        if (WImage<T>::image_) {\n            IplImage* image = WImage<T>::image_;\n            cvReleaseImage(&image);\n            WImageC<T, C>::SetIpl(0);\n        }\n    }\n\n    bool IsNull() const {return WImage<T>::image_ == NULL; }\n\nprivate:\n    // Disallow copy and assignment\n    WImageBufferC(const WImageBufferC&);\n    void operator=(const WImageBufferC&);\n};\n\n/** View into an image class which allows treating a subimage as an image or treating external data\nas an image\n*/\ntemplate<typename T> class WImageView : public WImage<T>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n\n    // Construct a subimage.  No checks are done that the subimage lies\n    // completely inside the original image.\n    WImageView(WImage<T>* img, int c, int r, int width, int height);\n\n    // Refer to external data.\n    // If not given width_step assumed to be same as width.\n    WImageView(T* data, int width, int height, int channels, int width_step = -1);\n\n    // Refer to external data.  This does NOT take ownership\n    // of the supplied IplImage.\n    WImageView(IplImage* img) : WImage<T>(img) {}\n\n    // Copy constructor\n    WImageView(const WImage<T>& img) : WImage<T>(0) {\n        header_ = *(img.Ipl());\n        WImage<T>::SetIpl(&header_);\n    }\n\n    WImageView& operator=(const WImage<T>& img) {\n        header_ = *(img.Ipl());\n        WImage<T>::SetIpl(&header_);\n        return *this;\n    }\n\nprotected:\n    IplImage header_;\n};\n\n\ntemplate<typename T, int C>\nclass WImageViewC : public WImageC<T, C>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n    enum { kChannels = C };\n\n    // Default constructor needed for vectors of views.\n    WImageViewC();\n\n    virtual ~WImageViewC() {}\n\n    // Construct a subimage.  No checks are done that the subimage lies\n    // completely inside the original image.\n    WImageViewC(WImageC<T, C>* img,\n        int c, int r, int width, int height);\n\n    // Refer to external data\n    WImageViewC(T* data, int width, int height, int width_step = -1);\n\n    // Refer to external data.  This does NOT take ownership\n    // of the supplied IplImage.\n    WImageViewC(IplImage* img) : WImageC<T, C>(img) {}\n\n    // Copy constructor which does a shallow copy to allow multiple views\n    // of same data.  gcc-4.1.1 gets confused if both versions of\n    // the constructor and assignment operator are not provided.\n    WImageViewC(const WImageC<T, C>& img) : WImageC<T, C>(0) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n    }\n    WImageViewC(const WImageViewC<T, C>& img) : WImageC<T, C>(0) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n    }\n\n    WImageViewC& operator=(const WImageC<T, C>& img) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n        return *this;\n    }\n    WImageViewC& operator=(const WImageViewC<T, C>& img) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n        return *this;\n    }\n\nprotected:\n    IplImage header_;\n};\n\n\n// Specializations for depth\ntemplate<>\ninline int WImage<uchar>::Depth() const {return IPL_DEPTH_8U; }\ntemplate<>\ninline int WImage<signed char>::Depth() const {return IPL_DEPTH_8S; }\ntemplate<>\ninline int WImage<short>::Depth() const {return IPL_DEPTH_16S; }\ntemplate<>\ninline int WImage<ushort>::Depth() const {return IPL_DEPTH_16U; }\ntemplate<>\ninline int WImage<int>::Depth() const {return IPL_DEPTH_32S; }\ntemplate<>\ninline int WImage<float>::Depth() const {return IPL_DEPTH_32F; }\ntemplate<>\ninline int WImage<double>::Depth() const {return IPL_DEPTH_64F; }\n\ntemplate<typename T> inline WImage<T>::~WImage() {}\ntemplate<typename T, int C> inline WImageC<T, C>::~WImageC() {}\n\ntemplate<typename T>\ninline void WImageBuffer<T>::Allocate(int width, int height, int nchannels)\n{\n    if (IsNull() || WImage<T>::Width() != width ||\n        WImage<T>::Height() != height || WImage<T>::Channels() != nchannels) {\n        ReleaseImage();\n        WImage<T>::image_ = cvCreateImage(cvSize(width, height),\n            WImage<T>::Depth(), nchannels);\n    }\n}\n\ntemplate<typename T, int C>\ninline void WImageBufferC<T, C>::Allocate(int width, int height)\n{\n    if (IsNull() || WImage<T>::Width() != width || WImage<T>::Height() != height) {\n        ReleaseImage();\n        WImageC<T, C>::SetIpl(cvCreateImage(cvSize(width, height),WImage<T>::Depth(), C));\n    }\n}\n\ntemplate<typename T>\nWImageView<T>::WImageView(WImage<T>* img, int c, int r, int width, int height)\n        : WImage<T>(0)\n{\n    header_ = *(img->Ipl());\n    header_.imageData = reinterpret_cast<char*>((*img)(c, r));\n    header_.width = width;\n    header_.height = height;\n    WImage<T>::SetIpl(&header_);\n}\n\ntemplate<typename T>\nWImageView<T>::WImageView(T* data, int width, int height, int nchannels, int width_step)\n          : WImage<T>(0)\n{\n    cvInitImageHeader(&header_, cvSize(width, height), WImage<T>::Depth(), nchannels);\n    header_.imageData = reinterpret_cast<char*>(data);\n    if (width_step > 0) {\n        header_.widthStep = width_step;\n    }\n    WImage<T>::SetIpl(&header_);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C>::WImageViewC(WImageC<T, C>* img, int c, int r, int width, int height)\n        : WImageC<T, C>(0)\n{\n    header_ = *(img->Ipl());\n    header_.imageData = reinterpret_cast<char*>((*img)(c, r));\n    header_.width = width;\n    header_.height = height;\n    WImageC<T, C>::SetIpl(&header_);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C>::WImageViewC() : WImageC<T, C>(0) {\n    cvInitImageHeader(&header_, cvSize(0, 0), WImage<T>::Depth(), C);\n    header_.imageData = reinterpret_cast<char*>(0);\n    WImageC<T, C>::SetIpl(&header_);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C>::WImageViewC(T* data, int width, int height, int width_step)\n    : WImageC<T, C>(0)\n{\n    cvInitImageHeader(&header_, cvSize(width, height), WImage<T>::Depth(), C);\n    header_.imageData = reinterpret_cast<char*>(data);\n    if (width_step > 0) {\n        header_.widthStep = width_step;\n    }\n    WImageC<T, C>::SetIpl(&header_);\n}\n\n// Construct a view into a region of an image\ntemplate<typename T>\nWImageView<T> WImage<T>::View(int c, int r, int width, int height) {\n    return WImageView<T>(this, c, r, width, height);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C> WImageC<T, C>::View(int c, int r, int width, int height) {\n    return WImageViewC<T, C>(this, c, r, width, height);\n}\n\n//! @} core\n\n}  // end of namespace\n\n#endif // __cplusplus\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/core.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2015, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2015, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2015, Itseez Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_HPP__\n#define __OPENCV_CORE_HPP__\n\n#ifndef __cplusplus\n#  error core.hpp header must be compiled as C++\n#endif\n\n#include \"opencv2/core/cvdef.h\"\n#include \"opencv2/core/version.hpp\"\n#include \"opencv2/core/base.hpp\"\n#include \"opencv2/core/cvstd.hpp\"\n#include \"opencv2/core/traits.hpp\"\n#include \"opencv2/core/matx.hpp\"\n#include \"opencv2/core/types.hpp\"\n#include \"opencv2/core/mat.hpp\"\n#include \"opencv2/core/persistence.hpp\"\n\n/**\n@defgroup core Core functionality\n@{\n    @defgroup core_basic Basic structures\n    @defgroup core_c C structures and operations\n    @{\n        @defgroup core_c_glue Connections with C++\n    @}\n    @defgroup core_array Operations on arrays\n    @defgroup core_xml XML/YAML Persistence\n    @defgroup core_cluster Clustering\n    @defgroup core_utils Utility and system functions and macros\n    @{\n        @defgroup core_utils_sse SSE utilities\n        @defgroup core_utils_neon NEON utilities\n    @}\n    @defgroup core_opengl OpenGL interoperability\n    @defgroup core_ipp Intel IPP Asynchronous C/C++ Converters\n    @defgroup core_optim Optimization Algorithms\n    @defgroup core_directx DirectX interoperability\n    @defgroup core_eigen Eigen support\n    @defgroup core_opencl OpenCL support\n    @defgroup core_va_intel Intel VA-API/OpenCL (CL-VA) interoperability\n    @defgroup core_hal Hardware Acceleration Layer\n    @{\n        @defgroup core_hal_functions Functions\n        @defgroup core_hal_interface Interface\n        @defgroup core_hal_intrin Universal intrinsics\n        @{\n            @defgroup core_hal_intrin_impl Private implementation helpers\n        @}\n    @}\n@}\n */\n\nnamespace cv {\n\n//! @addtogroup core_utils\n//! @{\n\n/*! @brief Class passed to an error.\n\nThis class encapsulates all or almost all necessary\ninformation about the error happened in the program. The exception is\nusually constructed and thrown implicitly via CV_Error and CV_Error_ macros.\n@see error\n */\nclass CV_EXPORTS Exception : public std::exception\n{\npublic:\n    /*!\n     Default constructor\n     */\n    Exception();\n    /*!\n     Full constructor. Normally the constuctor is not called explicitly.\n     Instead, the macros CV_Error(), CV_Error_() and CV_Assert() are used.\n    */\n    Exception(int _code, const String& _err, const String& _func, const String& _file, int _line);\n    virtual ~Exception() throw();\n\n    /*!\n     \\return the error description and the context as a text string.\n    */\n    virtual const char *what() const throw();\n    void formatMessage();\n\n    String msg; ///< the formatted error message\n\n    int code; ///< error code @see CVStatus\n    String err; ///< error description\n    String func; ///< function name. Available only when the compiler supports getting it\n    String file; ///< source file name where the error has occured\n    int line; ///< line number in the source file where the error has occured\n};\n\n/*! @brief Signals an error and raises the exception.\n\nBy default the function prints information about the error to stderr,\nthen it either stops if cv::setBreakOnError() had been called before or raises the exception.\nIt is possible to alternate error processing by using cv::redirectError().\n@param exc the exception raisen.\n@deprecated drop this version\n */\nCV_EXPORTS void error( const Exception& exc );\n\nenum SortFlags { SORT_EVERY_ROW    = 0, //!< each matrix row is sorted independently\n                 SORT_EVERY_COLUMN = 1, //!< each matrix column is sorted\n                                        //!< independently; this flag and the previous one are\n                                        //!< mutually exclusive.\n                 SORT_ASCENDING    = 0, //!< each matrix row is sorted in the ascending\n                                        //!< order.\n                 SORT_DESCENDING   = 16 //!< each matrix row is sorted in the\n                                        //!< descending order; this flag and the previous one are also\n                                        //!< mutually exclusive.\n               };\n\n//! @} core_utils\n\n//! @addtogroup core\n//! @{\n\n//! Covariation flags\nenum CovarFlags {\n    /** The output covariance matrix is calculated as:\n       \\f[\\texttt{scale}   \\cdot  [  \\texttt{vects}  [0]-  \\texttt{mean}  , \\texttt{vects}  [1]-  \\texttt{mean}  ,...]^T  \\cdot  [ \\texttt{vects}  [0]- \\texttt{mean}  , \\texttt{vects}  [1]- \\texttt{mean}  ,...],\\f]\n       The covariance matrix will be nsamples x nsamples. Such an unusual covariance matrix is used\n       for fast PCA of a set of very large vectors (see, for example, the EigenFaces technique for\n       face recognition). Eigenvalues of this \"scrambled\" matrix match the eigenvalues of the true\n       covariance matrix. The \"true\" eigenvectors can be easily calculated from the eigenvectors of\n       the \"scrambled\" covariance matrix. */\n    COVAR_SCRAMBLED = 0,\n    /**The output covariance matrix is calculated as:\n        \\f[\\texttt{scale}   \\cdot  [  \\texttt{vects}  [0]-  \\texttt{mean}  , \\texttt{vects}  [1]-  \\texttt{mean}  ,...]  \\cdot  [ \\texttt{vects}  [0]- \\texttt{mean}  , \\texttt{vects}  [1]- \\texttt{mean}  ,...]^T,\\f]\n        covar will be a square matrix of the same size as the total number of elements in each input\n        vector. One and only one of COVAR_SCRAMBLED and COVAR_NORMAL must be specified.*/\n    COVAR_NORMAL    = 1,\n    /** If the flag is specified, the function does not calculate mean from\n        the input vectors but, instead, uses the passed mean vector. This is useful if mean has been\n        pre-calculated or known in advance, or if the covariance matrix is calculated by parts. In\n        this case, mean is not a mean vector of the input sub-set of vectors but rather the mean\n        vector of the whole set.*/\n    COVAR_USE_AVG   = 2,\n    /** If the flag is specified, the covariance matrix is scaled. In the\n        \"normal\" mode, scale is 1./nsamples . In the \"scrambled\" mode, scale is the reciprocal of the\n        total number of elements in each input vector. By default (if the flag is not specified), the\n        covariance matrix is not scaled ( scale=1 ).*/\n    COVAR_SCALE     = 4,\n    /** If the flag is\n        specified, all the input vectors are stored as rows of the samples matrix. mean should be a\n        single-row vector in this case.*/\n    COVAR_ROWS      = 8,\n    /** If the flag is\n        specified, all the input vectors are stored as columns of the samples matrix. mean should be a\n        single-column vector in this case.*/\n    COVAR_COLS      = 16\n};\n\n//! k-Means flags\nenum KmeansFlags {\n    /** Select random initial centers in each attempt.*/\n    KMEANS_RANDOM_CENTERS     = 0,\n    /** Use kmeans++ center initialization by Arthur and Vassilvitskii [Arthur2007].*/\n    KMEANS_PP_CENTERS         = 2,\n    /** During the first (and possibly the only) attempt, use the\n        user-supplied labels instead of computing them from the initial centers. For the second and\n        further attempts, use the random or semi-random centers. Use one of KMEANS_\\*_CENTERS flag\n        to specify the exact method.*/\n    KMEANS_USE_INITIAL_LABELS = 1\n};\n\n//! type of line\nenum LineTypes {\n    FILLED  = -1,\n    LINE_4  = 4, //!< 4-connected line\n    LINE_8  = 8, //!< 8-connected line\n    LINE_AA = 16 //!< antialiased line\n};\n\n//! Only a subset of Hershey fonts\n//! <http://sources.isc.org/utils/misc/hershey-font.txt> are supported\nenum HersheyFonts {\n    FONT_HERSHEY_SIMPLEX        = 0, //!< normal size sans-serif font\n    FONT_HERSHEY_PLAIN          = 1, //!< small size sans-serif font\n    FONT_HERSHEY_DUPLEX         = 2, //!< normal size sans-serif font (more complex than FONT_HERSHEY_SIMPLEX)\n    FONT_HERSHEY_COMPLEX        = 3, //!< normal size serif font\n    FONT_HERSHEY_TRIPLEX        = 4, //!< normal size serif font (more complex than FONT_HERSHEY_COMPLEX)\n    FONT_HERSHEY_COMPLEX_SMALL  = 5, //!< smaller version of FONT_HERSHEY_COMPLEX\n    FONT_HERSHEY_SCRIPT_SIMPLEX = 6, //!< hand-writing style font\n    FONT_HERSHEY_SCRIPT_COMPLEX = 7, //!< more complex variant of FONT_HERSHEY_SCRIPT_SIMPLEX\n    FONT_ITALIC                 = 16 //!< flag for italic font\n};\n\nenum ReduceTypes { REDUCE_SUM = 0, //!< the output is the sum of all rows/columns of the matrix.\n                   REDUCE_AVG = 1, //!< the output is the mean vector of all rows/columns of the matrix.\n                   REDUCE_MAX = 2, //!< the output is the maximum (column/row-wise) of all rows/columns of the matrix.\n                   REDUCE_MIN = 3  //!< the output is the minimum (column/row-wise) of all rows/columns of the matrix.\n                 };\n\n\n/** @brief Swaps two matrices\n*/\nCV_EXPORTS void swap(Mat& a, Mat& b);\n/** @overload */\nCV_EXPORTS void swap( UMat& a, UMat& b );\n\n//! @} core\n\n//! @addtogroup core_array\n//! @{\n\n/** @brief Computes the source location of an extrapolated pixel.\n\nThe function computes and returns the coordinate of a donor pixel corresponding to the specified\nextrapolated pixel when using the specified extrapolation border mode. For example, if you use\ncv::BORDER_WRAP mode in the horizontal direction, cv::BORDER_REFLECT_101 in the vertical direction and\nwant to compute value of the \"virtual\" pixel Point(-5, 100) in a floating-point image img , it\nlooks like:\n@code{.cpp}\n    float val = img.at<float>(borderInterpolate(100, img.rows, cv::BORDER_REFLECT_101),\n                              borderInterpolate(-5, img.cols, cv::BORDER_WRAP));\n@endcode\nNormally, the function is not called directly. It is used inside filtering functions and also in\ncopyMakeBorder.\n@param p 0-based coordinate of the extrapolated pixel along one of the axes, likely \\<0 or \\>= len\n@param len Length of the array along the corresponding axis.\n@param borderType Border type, one of the cv::BorderTypes, except for cv::BORDER_TRANSPARENT and\ncv::BORDER_ISOLATED . When borderType==cv::BORDER_CONSTANT , the function always returns -1, regardless\nof p and len.\n\n@sa copyMakeBorder\n*/\nCV_EXPORTS_W int borderInterpolate(int p, int len, int borderType);\n\n/** @brief Forms a border around an image.\n\nThe function copies the source image into the middle of the destination image. The areas to the\nleft, to the right, above and below the copied source image will be filled with extrapolated\npixels. This is not what filtering functions based on it do (they extrapolate pixels on-fly), but\nwhat other more complex functions, including your own, may do to simplify image boundary handling.\n\nThe function supports the mode when src is already in the middle of dst . In this case, the\nfunction does not copy src itself but simply constructs the border, for example:\n\n@code{.cpp}\n    // let border be the same in all directions\n    int border=2;\n    // constructs a larger image to fit both the image and the border\n    Mat gray_buf(rgb.rows + border*2, rgb.cols + border*2, rgb.depth());\n    // select the middle part of it w/o copying data\n    Mat gray(gray_canvas, Rect(border, border, rgb.cols, rgb.rows));\n    // convert image from RGB to grayscale\n    cvtColor(rgb, gray, COLOR_RGB2GRAY);\n    // form a border in-place\n    copyMakeBorder(gray, gray_buf, border, border,\n                   border, border, BORDER_REPLICATE);\n    // now do some custom filtering ...\n    ...\n@endcode\n@note When the source image is a part (ROI) of a bigger image, the function will try to use the\npixels outside of the ROI to form a border. To disable this feature and always do extrapolation, as\nif src was not a ROI, use borderType | BORDER_ISOLATED.\n\n@param src Source image.\n@param dst Destination image of the same type as src and the size Size(src.cols+left+right,\nsrc.rows+top+bottom) .\n@param top\n@param bottom\n@param left\n@param right Parameter specifying how many pixels in each direction from the source image rectangle\nto extrapolate. For example, top=1, bottom=1, left=1, right=1 mean that 1 pixel-wide border needs\nto be built.\n@param borderType Border type. See borderInterpolate for details.\n@param value Border value if borderType==BORDER_CONSTANT .\n\n@sa  borderInterpolate\n*/\nCV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst,\n                                 int top, int bottom, int left, int right,\n                                 int borderType, const Scalar& value = Scalar() );\n\n/** @brief Calculates the per-element sum of two arrays or an array and a scalar.\n\nThe function add calculates:\n- Sum of two arrays when both input arrays have the same size and the same number of channels:\n\\f[\\texttt{dst}(I) =  \\texttt{saturate} ( \\texttt{src1}(I) +  \\texttt{src2}(I)) \\quad \\texttt{if mask}(I) \\ne0\\f]\n- Sum of an array and a scalar when src2 is constructed from Scalar or has the same number of\nelements as `src1.channels()`:\n\\f[\\texttt{dst}(I) =  \\texttt{saturate} ( \\texttt{src1}(I) +  \\texttt{src2} ) \\quad \\texttt{if mask}(I) \\ne0\\f]\n- Sum of a scalar and an array when src1 is constructed from Scalar or has the same number of\nelements as `src2.channels()`:\n\\f[\\texttt{dst}(I) =  \\texttt{saturate} ( \\texttt{src1} +  \\texttt{src2}(I) ) \\quad \\texttt{if mask}(I) \\ne0\\f]\nwhere `I` is a multi-dimensional index of array elements. In case of multi-channel arrays, each\nchannel is processed independently.\n\nThe first function in the list above can be replaced with matrix expressions:\n@code{.cpp}\n    dst = src1 + src2;\n    dst += src1; // equivalent to add(dst, src1, dst);\n@endcode\nThe input arrays and the output array can all have the same or different depths. For example, you\ncan add a 16-bit unsigned array to a 8-bit signed array and store the sum as a 32-bit\nfloating-point array. Depth of the output array is determined by the dtype parameter. In the second\nand third cases above, as well as in the first case, when src1.depth() == src2.depth(), dtype can\nbe set to the default -1. In this case, the output array will have the same depth as the input\narray, be it src1, src2 or both.\n@note Saturation is not applied when the output array has the depth CV_32S. You may even get\nresult of an incorrect sign in the case of overflow.\n@param src1 first input array or a scalar.\n@param src2 second input array or a scalar.\n@param dst output array that has the same size and number of channels as the input array(s); the\ndepth is defined by dtype or src1/src2.\n@param mask optional operation mask - 8-bit single channel array, that specifies elements of the\noutput array to be changed.\n@param dtype optional depth of the output array (see the discussion below).\n@sa subtract, addWeighted, scaleAdd, Mat::convertTo\n*/\nCV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst,\n                      InputArray mask = noArray(), int dtype = -1);\n\n/** @brief Calculates the per-element difference between two arrays or array and a scalar.\n\nThe function subtract calculates:\n- Difference between two arrays, when both input arrays have the same size and the same number of\nchannels:\n    \\f[\\texttt{dst}(I) =  \\texttt{saturate} ( \\texttt{src1}(I) -  \\texttt{src2}(I)) \\quad \\texttt{if mask}(I) \\ne0\\f]\n- Difference between an array and a scalar, when src2 is constructed from Scalar or has the same\nnumber of elements as `src1.channels()`:\n    \\f[\\texttt{dst}(I) =  \\texttt{saturate} ( \\texttt{src1}(I) -  \\texttt{src2} ) \\quad \\texttt{if mask}(I) \\ne0\\f]\n- Difference between a scalar and an array, when src1 is constructed from Scalar or has the same\nnumber of elements as `src2.channels()`:\n    \\f[\\texttt{dst}(I) =  \\texttt{saturate} ( \\texttt{src1} -  \\texttt{src2}(I) ) \\quad \\texttt{if mask}(I) \\ne0\\f]\n- The reverse difference between a scalar and an array in the case of `SubRS`:\n    \\f[\\texttt{dst}(I) =  \\texttt{saturate} ( \\texttt{src2} -  \\texttt{src1}(I) ) \\quad \\texttt{if mask}(I) \\ne0\\f]\nwhere I is a multi-dimensional index of array elements. In case of multi-channel arrays, each\nchannel is processed independently.\n\nThe first function in the list above can be replaced with matrix expressions:\n@code{.cpp}\n    dst = src1 - src2;\n    dst -= src1; // equivalent to subtract(dst, src1, dst);\n@endcode\nThe input arrays and the output array can all have the same or different depths. For example, you\ncan subtract to 8-bit unsigned arrays and store the difference in a 16-bit signed array. Depth of\nthe output array is determined by dtype parameter. In the second and third cases above, as well as\nin the first case, when src1.depth() == src2.depth(), dtype can be set to the default -1. In this\ncase the output array will have the same depth as the input array, be it src1, src2 or both.\n@note Saturation is not applied when the output array has the depth CV_32S. You may even get\nresult of an incorrect sign in the case of overflow.\n@param src1 first input array or a scalar.\n@param src2 second input array or a scalar.\n@param dst output array of the same size and the same number of channels as the input array.\n@param mask optional operation mask; this is an 8-bit single channel array that specifies elements\nof the output array to be changed.\n@param dtype optional depth of the output array\n@sa  add, addWeighted, scaleAdd, Mat::convertTo\n  */\nCV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst,\n                           InputArray mask = noArray(), int dtype = -1);\n\n\n/** @brief Calculates the per-element scaled product of two arrays.\n\nThe function multiply calculates the per-element product of two arrays:\n\n\\f[\\texttt{dst} (I)= \\texttt{saturate} ( \\texttt{scale} \\cdot \\texttt{src1} (I)  \\cdot \\texttt{src2} (I))\\f]\n\nThere is also a @ref MatrixExpressions -friendly variant of the first function. See Mat::mul .\n\nFor a not-per-element matrix product, see gemm .\n\n@note Saturation is not applied when the output array has the depth\nCV_32S. You may even get result of an incorrect sign in the case of\noverflow.\n@param src1 first input array.\n@param src2 second input array of the same size and the same type as src1.\n@param dst output array of the same size and type as src1.\n@param scale optional scale factor.\n@param dtype optional depth of the output array\n@sa add, subtract, divide, scaleAdd, addWeighted, accumulate, accumulateProduct, accumulateSquare,\nMat::convertTo\n*/\nCV_EXPORTS_W void multiply(InputArray src1, InputArray src2,\n                           OutputArray dst, double scale = 1, int dtype = -1);\n\n/** @brief Performs per-element division of two arrays or a scalar by an array.\n\nThe functions divide divide one array by another:\n\\f[\\texttt{dst(I) = saturate(src1(I)*scale/src2(I))}\\f]\nor a scalar by an array when there is no src1 :\n\\f[\\texttt{dst(I) = saturate(scale/src2(I))}\\f]\n\nWhen src2(I) is zero, dst(I) will also be zero. Different channels of\nmulti-channel arrays are processed independently.\n\n@note Saturation is not applied when the output array has the depth CV_32S. You may even get\nresult of an incorrect sign in the case of overflow.\n@param src1 first input array.\n@param src2 second input array of the same size and type as src1.\n@param scale scalar factor.\n@param dst output array of the same size and type as src2.\n@param dtype optional depth of the output array; if -1, dst will have depth src2.depth(), but in\ncase of an array-by-array division, you can only pass -1 when src1.depth()==src2.depth().\n@sa  multiply, add, subtract\n*/\nCV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst,\n                         double scale = 1, int dtype = -1);\n\n/** @overload */\nCV_EXPORTS_W void divide(double scale, InputArray src2,\n                         OutputArray dst, int dtype = -1);\n\n/** @brief Calculates the sum of a scaled array and another array.\n\nThe function scaleAdd is one of the classical primitive linear algebra operations, known as DAXPY\nor SAXPY in [BLAS](http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms). It calculates\nthe sum of a scaled array and another array:\n\\f[\\texttt{dst} (I)= \\texttt{scale} \\cdot \\texttt{src1} (I) +  \\texttt{src2} (I)\\f]\nThe function can also be emulated with a matrix expression, for example:\n@code{.cpp}\n    Mat A(3, 3, CV_64F);\n    ...\n    A.row(0) = A.row(1)*2 + A.row(2);\n@endcode\n@param src1 first input array.\n@param alpha scale factor for the first array.\n@param src2 second input array of the same size and type as src1.\n@param dst output array of the same size and type as src1.\n@sa add, addWeighted, subtract, Mat::dot, Mat::convertTo\n*/\nCV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst);\n\n/** @brief Calculates the weighted sum of two arrays.\n\nThe function addWeighted calculates the weighted sum of two arrays as follows:\n\\f[\\texttt{dst} (I)= \\texttt{saturate} ( \\texttt{src1} (I)* \\texttt{alpha} +  \\texttt{src2} (I)* \\texttt{beta} +  \\texttt{gamma} )\\f]\nwhere I is a multi-dimensional index of array elements. In case of multi-channel arrays, each\nchannel is processed independently.\nThe function can be replaced with a matrix expression:\n@code{.cpp}\n    dst = src1*alpha + src2*beta + gamma;\n@endcode\n@note Saturation is not applied when the output array has the depth CV_32S. You may even get\nresult of an incorrect sign in the case of overflow.\n@param src1 first input array.\n@param alpha weight of the first array elements.\n@param src2 second input array of the same size and channel number as src1.\n@param beta weight of the second array elements.\n@param gamma scalar added to each sum.\n@param dst output array that has the same size and number of channels as the input arrays.\n@param dtype optional depth of the output array; when both input arrays have the same depth, dtype\ncan be set to -1, which will be equivalent to src1.depth().\n@sa  add, subtract, scaleAdd, Mat::convertTo\n*/\nCV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,\n                              double beta, double gamma, OutputArray dst, int dtype = -1);\n\n/** @brief Scales, calculates absolute values, and converts the result to 8-bit.\n\nOn each element of the input array, the function convertScaleAbs\nperforms three operations sequentially: scaling, taking an absolute\nvalue, conversion to an unsigned 8-bit type:\n\\f[\\texttt{dst} (I)= \\texttt{saturate\\_cast<uchar>} (| \\texttt{src} (I)* \\texttt{alpha} +  \\texttt{beta} |)\\f]\nIn case of multi-channel arrays, the function processes each channel\nindependently. When the output is not 8-bit, the operation can be\nemulated by calling the Mat::convertTo method (or by using matrix\nexpressions) and then by calculating an absolute value of the result.\nFor example:\n@code{.cpp}\n    Mat_<float> A(30,30);\n    randu(A, Scalar(-100), Scalar(100));\n    Mat_<float> B = A*5 + 3;\n    B = abs(B);\n    // Mat_<float> B = abs(A*5+3) will also do the job,\n    // but it will allocate a temporary matrix\n@endcode\n@param src input array.\n@param dst output array.\n@param alpha optional scale factor.\n@param beta optional delta added to the scaled values.\n@sa  Mat::convertTo, cv::abs(const Mat&)\n*/\nCV_EXPORTS_W void convertScaleAbs(InputArray src, OutputArray dst,\n                                  double alpha = 1, double beta = 0);\n\n/** @brief Performs a look-up table transform of an array.\n\nThe function LUT fills the output array with values from the look-up table. Indices of the entries\nare taken from the input array. That is, the function processes each element of src as follows:\n\\f[\\texttt{dst} (I)  \\leftarrow \\texttt{lut(src(I) + d)}\\f]\nwhere\n\\f[d =  \\fork{0}{if \\(\\texttt{src}\\) has depth \\(\\texttt{CV_8U}\\)}{128}{if \\(\\texttt{src}\\) has depth \\(\\texttt{CV_8S}\\)}\\f]\n@param src input array of 8-bit elements.\n@param lut look-up table of 256 elements; in case of multi-channel input array, the table should\neither have a single channel (in this case the same table is used for all channels) or the same\nnumber of channels as in the input array.\n@param dst output array of the same size and number of channels as src, and the same depth as lut.\n@sa  convertScaleAbs, Mat::convertTo\n*/\nCV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst);\n\n/** @brief Calculates the sum of array elements.\n\nThe functions sum calculate and return the sum of array elements,\nindependently for each channel.\n@param src input array that must have from 1 to 4 channels.\n@sa  countNonZero, mean, meanStdDev, norm, minMaxLoc, reduce\n*/\nCV_EXPORTS_AS(sumElems) Scalar sum(InputArray src);\n\n/** @brief Counts non-zero array elements.\n\nThe function returns the number of non-zero elements in src :\n\\f[\\sum _{I: \\; \\texttt{src} (I) \\ne0 } 1\\f]\n@param src single-channel array.\n@sa  mean, meanStdDev, norm, minMaxLoc, calcCovarMatrix\n*/\nCV_EXPORTS_W int countNonZero( InputArray src );\n\n/** @brief Returns the list of locations of non-zero pixels\n\nGiven a binary matrix (likely returned from an operation such\nas threshold(), compare(), >, ==, etc, return all of\nthe non-zero indices as a cv::Mat or std::vector<cv::Point> (x,y)\nFor example:\n@code{.cpp}\n    cv::Mat binaryImage; // input, binary image\n    cv::Mat locations;   // output, locations of non-zero pixels\n    cv::findNonZero(binaryImage, locations);\n\n    // access pixel coordinates\n    Point pnt = locations.at<Point>(i);\n@endcode\nor\n@code{.cpp}\n    cv::Mat binaryImage; // input, binary image\n    vector<Point> locations;   // output, locations of non-zero pixels\n    cv::findNonZero(binaryImage, locations);\n\n    // access pixel coordinates\n    Point pnt = locations[i];\n@endcode\n@param src single-channel array (type CV_8UC1)\n@param idx the output array, type of cv::Mat or std::vector<Point>, corresponding to non-zero indices in the input\n*/\nCV_EXPORTS_W void findNonZero( InputArray src, OutputArray idx );\n\n/** @brief Calculates an average (mean) of array elements.\n\nThe function mean calculates the mean value M of array elements,\nindependently for each channel, and return it:\n\\f[\\begin{array}{l} N =  \\sum _{I: \\; \\texttt{mask} (I) \\ne 0} 1 \\\\ M_c =  \\left ( \\sum _{I: \\; \\texttt{mask} (I) \\ne 0}{ \\texttt{mtx} (I)_c} \\right )/N \\end{array}\\f]\nWhen all the mask elements are 0's, the functions return Scalar::all(0)\n@param src input array that should have from 1 to 4 channels so that the result can be stored in\nScalar_ .\n@param mask optional operation mask.\n@sa  countNonZero, meanStdDev, norm, minMaxLoc\n*/\nCV_EXPORTS_W Scalar mean(InputArray src, InputArray mask = noArray());\n\n/** Calculates a mean and standard deviation of array elements.\n\nThe function meanStdDev calculates the mean and the standard deviation M\nof array elements independently for each channel and returns it via the\noutput parameters:\n\\f[\\begin{array}{l} N =  \\sum _{I, \\texttt{mask} (I)  \\ne 0} 1 \\\\ \\texttt{mean} _c =  \\frac{\\sum_{ I: \\; \\texttt{mask}(I) \\ne 0} \\texttt{src} (I)_c}{N} \\\\ \\texttt{stddev} _c =  \\sqrt{\\frac{\\sum_{ I: \\; \\texttt{mask}(I) \\ne 0} \\left ( \\texttt{src} (I)_c -  \\texttt{mean} _c \\right )^2}{N}} \\end{array}\\f]\nWhen all the mask elements are 0's, the functions return\nmean=stddev=Scalar::all(0).\n@note The calculated standard deviation is only the diagonal of the\ncomplete normalized covariance matrix. If the full matrix is needed, you\ncan reshape the multi-channel array M x N to the single-channel array\nM\\*N x mtx.channels() (only possible when the matrix is continuous) and\nthen pass the matrix to calcCovarMatrix .\n@param src input array that should have from 1 to 4 channels so that the results can be stored in\nScalar_ 's.\n@param mean output parameter: calculated mean value.\n@param stddev output parameter: calculateded standard deviation.\n@param mask optional operation mask.\n@sa  countNonZero, mean, norm, minMaxLoc, calcCovarMatrix\n*/\nCV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev,\n                             InputArray mask=noArray());\n\n/** @brief Calculates an absolute array norm, an absolute difference norm, or a\nrelative difference norm.\n\nThe functions norm calculate an absolute norm of src1 (when there is no\nsrc2 ):\n\n\\f[norm =  \\forkthree{\\|\\texttt{src1}\\|_{L_{\\infty}} =  \\max _I | \\texttt{src1} (I)|}{if  \\(\\texttt{normType} = \\texttt{NORM_INF}\\) }\n{ \\| \\texttt{src1} \\| _{L_1} =  \\sum _I | \\texttt{src1} (I)|}{if  \\(\\texttt{normType} = \\texttt{NORM_L1}\\) }\n{ \\| \\texttt{src1} \\| _{L_2} =  \\sqrt{\\sum_I \\texttt{src1}(I)^2} }{if  \\(\\texttt{normType} = \\texttt{NORM_L2}\\) }\\f]\n\nor an absolute or relative difference norm if src2 is there:\n\n\\f[norm =  \\forkthree{\\|\\texttt{src1}-\\texttt{src2}\\|_{L_{\\infty}} =  \\max _I | \\texttt{src1} (I) -  \\texttt{src2} (I)|}{if  \\(\\texttt{normType} = \\texttt{NORM_INF}\\) }\n{ \\| \\texttt{src1} - \\texttt{src2} \\| _{L_1} =  \\sum _I | \\texttt{src1} (I) -  \\texttt{src2} (I)|}{if  \\(\\texttt{normType} = \\texttt{NORM_L1}\\) }\n{ \\| \\texttt{src1} - \\texttt{src2} \\| _{L_2} =  \\sqrt{\\sum_I (\\texttt{src1}(I) - \\texttt{src2}(I))^2} }{if  \\(\\texttt{normType} = \\texttt{NORM_L2}\\) }\\f]\n\nor\n\n\\f[norm =  \\forkthree{\\frac{\\|\\texttt{src1}-\\texttt{src2}\\|_{L_{\\infty}}    }{\\|\\texttt{src2}\\|_{L_{\\infty}} }}{if  \\(\\texttt{normType} = \\texttt{NORM_RELATIVE_INF}\\) }\n{ \\frac{\\|\\texttt{src1}-\\texttt{src2}\\|_{L_1} }{\\|\\texttt{src2}\\|_{L_1}} }{if  \\(\\texttt{normType} = \\texttt{NORM_RELATIVE_L1}\\) }\n{ \\frac{\\|\\texttt{src1}-\\texttt{src2}\\|_{L_2} }{\\|\\texttt{src2}\\|_{L_2}} }{if  \\(\\texttt{normType} = \\texttt{NORM_RELATIVE_L2}\\) }\\f]\n\nThe functions norm return the calculated norm.\n\nWhen the mask parameter is specified and it is not empty, the norm is\ncalculated only over the region specified by the mask.\n\nA multi-channel input arrays are treated as a single-channel, that is,\nthe results for all channels are combined.\n\n@param src1 first input array.\n@param normType type of the norm (see cv::NormTypes).\n@param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.\n*/\nCV_EXPORTS_W double norm(InputArray src1, int normType = NORM_L2, InputArray mask = noArray());\n\n/** @overload\n@param src1 first input array.\n@param src2 second input array of the same size and the same type as src1.\n@param normType type of the norm (cv::NormTypes).\n@param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.\n*/\nCV_EXPORTS_W double norm(InputArray src1, InputArray src2,\n                         int normType = NORM_L2, InputArray mask = noArray());\n/** @overload\n@param src first input array.\n@param normType type of the norm (see cv::NormTypes).\n*/\nCV_EXPORTS double norm( const SparseMat& src, int normType );\n\n/** @brief computes PSNR image/video quality metric\n\nsee http://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio for details\n@todo document\n  */\nCV_EXPORTS_W double PSNR(InputArray src1, InputArray src2);\n\n/** @brief naive nearest neighbor finder\n\nsee http://en.wikipedia.org/wiki/Nearest_neighbor_search\n@todo document\n  */\nCV_EXPORTS_W void batchDistance(InputArray src1, InputArray src2,\n                                OutputArray dist, int dtype, OutputArray nidx,\n                                int normType = NORM_L2, int K = 0,\n                                InputArray mask = noArray(), int update = 0,\n                                bool crosscheck = false);\n\n/** @brief Normalizes the norm or value range of an array.\n\nThe functions normalize scale and shift the input array elements so that\n\\f[\\| \\texttt{dst} \\| _{L_p}= \\texttt{alpha}\\f]\n(where p=Inf, 1 or 2) when normType=NORM_INF, NORM_L1, or NORM_L2, respectively; or so that\n\\f[\\min _I  \\texttt{dst} (I)= \\texttt{alpha} , \\, \\, \\max _I  \\texttt{dst} (I)= \\texttt{beta}\\f]\n\nwhen normType=NORM_MINMAX (for dense arrays only). The optional mask specifies a sub-array to be\nnormalized. This means that the norm or min-n-max are calculated over the sub-array, and then this\nsub-array is modified to be normalized. If you want to only use the mask to calculate the norm or\nmin-max but modify the whole array, you can use norm and Mat::convertTo.\n\nIn case of sparse matrices, only the non-zero values are analyzed and transformed. Because of this,\nthe range transformation for sparse matrices is not allowed since it can shift the zero level.\n\nPossible usage with some positive example data:\n@code{.cpp}\n    vector<double> positiveData = { 2.0, 8.0, 10.0 };\n    vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax;\n\n    // Norm to probability (total count)\n    // sum(numbers) = 20.0\n    // 2.0      0.1     (2.0/20.0)\n    // 8.0      0.4     (8.0/20.0)\n    // 10.0     0.5     (10.0/20.0)\n    normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1);\n\n    // Norm to unit vector: ||positiveData|| = 1.0\n    // 2.0      0.15\n    // 8.0      0.62\n    // 10.0     0.77\n    normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2);\n\n    // Norm to max element\n    // 2.0      0.2     (2.0/10.0)\n    // 8.0      0.8     (8.0/10.0)\n    // 10.0     1.0     (10.0/10.0)\n    normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF);\n\n    // Norm to range [0.0;1.0]\n    // 2.0      0.0     (shift to left border)\n    // 8.0      0.75    (6.0/8.0)\n    // 10.0     1.0     (shift to right border)\n    normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);\n@endcode\n\n@param src input array.\n@param dst output array of the same size as src .\n@param alpha norm value to normalize to or the lower range boundary in case of the range\nnormalization.\n@param beta upper range boundary in case of the range normalization; it is not used for the norm\nnormalization.\n@param norm_type normalization type (see cv::NormTypes).\n@param dtype when negative, the output array has the same type as src; otherwise, it has the same\nnumber of channels as src and the depth =CV_MAT_DEPTH(dtype).\n@param mask optional operation mask.\n@sa norm, Mat::convertTo, SparseMat::convertTo\n*/\nCV_EXPORTS_W void normalize( InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0,\n                             int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray());\n\n/** @overload\n@param src input array.\n@param dst output array of the same size as src .\n@param alpha norm value to normalize to or the lower range boundary in case of the range\nnormalization.\n@param normType normalization type (see cv::NormTypes).\n*/\nCV_EXPORTS void normalize( const SparseMat& src, SparseMat& dst, double alpha, int normType );\n\n/** @brief Finds the global minimum and maximum in an array.\n\nThe functions minMaxLoc find the minimum and maximum element values and their positions. The\nextremums are searched across the whole array or, if mask is not an empty array, in the specified\narray region.\n\nThe functions do not work with multi-channel arrays. If you need to find minimum or maximum\nelements across all the channels, use Mat::reshape first to reinterpret the array as\nsingle-channel. Or you may extract the particular channel using either extractImageCOI , or\nmixChannels , or split .\n@param src input single-channel array.\n@param minVal pointer to the returned minimum value; NULL is used if not required.\n@param maxVal pointer to the returned maximum value; NULL is used if not required.\n@param minLoc pointer to the returned minimum location (in 2D case); NULL is used if not required.\n@param maxLoc pointer to the returned maximum location (in 2D case); NULL is used if not required.\n@param mask optional mask used to select a sub-array.\n@sa max, min, compare, inRange, extractImageCOI, mixChannels, split, Mat::reshape\n*/\nCV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal,\n                            CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0,\n                            CV_OUT Point* maxLoc = 0, InputArray mask = noArray());\n\n\n/** @brief Finds the global minimum and maximum in an array\n\nThe function minMaxIdx finds the minimum and maximum element values and their positions. The\nextremums are searched across the whole array or, if mask is not an empty array, in the specified\narray region. The function does not work with multi-channel arrays. If you need to find minimum or\nmaximum elements across all the channels, use Mat::reshape first to reinterpret the array as\nsingle-channel. Or you may extract the particular channel using either extractImageCOI , or\nmixChannels , or split . In case of a sparse matrix, the minimum is found among non-zero elements\nonly.\n@note When minIdx is not NULL, it must have at least 2 elements (as well as maxIdx), even if src is\na single-row or single-column matrix. In OpenCV (following MATLAB) each array has at least 2\ndimensions, i.e. single-column matrix is Mx1 matrix (and therefore minIdx/maxIdx will be\n(i1,0)/(i2,0)) and single-row matrix is 1xN matrix (and therefore minIdx/maxIdx will be\n(0,j1)/(0,j2)).\n@param src input single-channel array.\n@param minVal pointer to the returned minimum value; NULL is used if not required.\n@param maxVal pointer to the returned maximum value; NULL is used if not required.\n@param minIdx pointer to the returned minimum location (in nD case); NULL is used if not required;\nOtherwise, it must point to an array of src.dims elements, the coordinates of the minimum element\nin each dimension are stored there sequentially.\n@param maxIdx pointer to the returned maximum location (in nD case). NULL is used if not required.\n@param mask specified array region\n*/\nCV_EXPORTS void minMaxIdx(InputArray src, double* minVal, double* maxVal = 0,\n                          int* minIdx = 0, int* maxIdx = 0, InputArray mask = noArray());\n\n/** @overload\n@param a input single-channel array.\n@param minVal pointer to the returned minimum value; NULL is used if not required.\n@param maxVal pointer to the returned maximum value; NULL is used if not required.\n@param minIdx pointer to the returned minimum location (in nD case); NULL is used if not required;\nOtherwise, it must point to an array of src.dims elements, the coordinates of the minimum element\nin each dimension are stored there sequentially.\n@param maxIdx pointer to the returned maximum location (in nD case). NULL is used if not required.\n*/\nCV_EXPORTS void minMaxLoc(const SparseMat& a, double* minVal,\n                          double* maxVal, int* minIdx = 0, int* maxIdx = 0);\n\n/** @brief Reduces a matrix to a vector.\n\nThe function reduce reduces the matrix to a vector by treating the matrix rows/columns as a set of\n1D vectors and performing the specified operation on the vectors until a single row/column is\nobtained. For example, the function can be used to compute horizontal and vertical projections of a\nraster image. In case of REDUCE_SUM and REDUCE_AVG , the output may have a larger element\nbit-depth to preserve accuracy. And multi-channel arrays are also supported in these two reduction\nmodes.\n@param src input 2D matrix.\n@param dst output vector. Its size and type is defined by dim and dtype parameters.\n@param dim dimension index along which the matrix is reduced. 0 means that the matrix is reduced to\na single row. 1 means that the matrix is reduced to a single column.\n@param rtype reduction operation that could be one of cv::ReduceTypes\n@param dtype when negative, the output vector will have the same type as the input matrix,\notherwise, its type will be CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), src.channels()).\n@sa repeat\n*/\nCV_EXPORTS_W void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype = -1);\n\n/** @brief Creates one multi-channel array out of several single-channel ones.\n\nThe function merge merges several arrays to make a single multi-channel array. That is, each\nelement of the output array will be a concatenation of the elements of the input arrays, where\nelements of i-th input array are treated as mv[i].channels()-element vectors.\n\nThe function cv::split does the reverse operation. If you need to shuffle channels in some other\nadvanced way, use cv::mixChannels.\n@param mv input array of matrices to be merged; all the matrices in mv must have the same\nsize and the same depth.\n@param count number of input matrices when mv is a plain C array; it must be greater than zero.\n@param dst output array of the same size and the same depth as mv[0]; The number of channels will\nbe equal to the parameter count.\n@sa  mixChannels, split, Mat::reshape\n*/\nCV_EXPORTS void merge(const Mat* mv, size_t count, OutputArray dst);\n\n/** @overload\n@param mv input vector of matrices to be merged; all the matrices in mv must have the same\nsize and the same depth.\n@param dst output array of the same size and the same depth as mv[0]; The number of channels will\nbe the total number of channels in the matrix array.\n  */\nCV_EXPORTS_W void merge(InputArrayOfArrays mv, OutputArray dst);\n\n/** @brief Divides a multi-channel array into several single-channel arrays.\n\nThe functions split split a multi-channel array into separate single-channel arrays:\n\\f[\\texttt{mv} [c](I) =  \\texttt{src} (I)_c\\f]\nIf you need to extract a single channel or do some other sophisticated channel permutation, use\nmixChannels .\n@param src input multi-channel array.\n@param mvbegin output array; the number of arrays must match src.channels(); the arrays themselves are\nreallocated, if needed.\n@sa merge, mixChannels, cvtColor\n*/\nCV_EXPORTS void split(const Mat& src, Mat* mvbegin);\n\n/** @overload\n@param m input multi-channel array.\n@param mv output vector of arrays; the arrays themselves are reallocated, if needed.\n*/\nCV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv);\n\n/** @brief Copies specified channels from input arrays to the specified channels of\noutput arrays.\n\nThe function cv::mixChannels provides an advanced mechanism for shuffling image channels.\n\ncv::split and cv::merge and some forms of cv::cvtColor are partial cases of cv::mixChannels .\n\nIn the example below, the code splits a 4-channel BGRA image into a 3-channel BGR (with B and R\nchannels swapped) and a separate alpha-channel image:\n@code{.cpp}\n    Mat bgra( 100, 100, CV_8UC4, Scalar(255,0,0,255) );\n    Mat bgr( bgra.rows, bgra.cols, CV_8UC3 );\n    Mat alpha( bgra.rows, bgra.cols, CV_8UC1 );\n\n    // forming an array of matrices is a quite efficient operation,\n    // because the matrix data is not copied, only the headers\n    Mat out[] = { bgr, alpha };\n    // bgra[0] -> bgr[2], bgra[1] -> bgr[1],\n    // bgra[2] -> bgr[0], bgra[3] -> alpha[0]\n    int from_to[] = { 0,2, 1,1, 2,0, 3,3 };\n    mixChannels( &bgra, 1, out, 2, from_to, 4 );\n@endcode\n@note Unlike many other new-style C++ functions in OpenCV (see the introduction section and\nMat::create ), cv::mixChannels requires the output arrays to be pre-allocated before calling the\nfunction.\n@param src input array or vector of matrices; all of the matrices must have the same size and the\nsame depth.\n@param nsrcs number of matrices in `src`.\n@param dst output array or vector of matrices; all the matrices **must be allocated**; their size and\ndepth must be the same as in `src[0]`.\n@param ndsts number of matrices in `dst`.\n@param fromTo array of index pairs specifying which channels are copied and where; fromTo[k\\*2] is\na 0-based index of the input channel in src, fromTo[k\\*2+1] is an index of the output channel in\ndst; the continuous channel numbering is used: the first input image channels are indexed from 0 to\nsrc[0].channels()-1, the second input image channels are indexed from src[0].channels() to\nsrc[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image\nchannels; as a special case, when fromTo[k\\*2] is negative, the corresponding output channel is\nfilled with zero .\n@param npairs number of index pairs in `fromTo`.\n@sa cv::split, cv::merge, cv::cvtColor\n*/\nCV_EXPORTS void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts,\n                            const int* fromTo, size_t npairs);\n\n/** @overload\n@param src input array or vector of matrices; all of the matrices must have the same size and the\nsame depth.\n@param dst output array or vector of matrices; all the matrices **must be allocated**; their size and\ndepth must be the same as in src[0].\n@param fromTo array of index pairs specifying which channels are copied and where; fromTo[k\\*2] is\na 0-based index of the input channel in src, fromTo[k\\*2+1] is an index of the output channel in\ndst; the continuous channel numbering is used: the first input image channels are indexed from 0 to\nsrc[0].channels()-1, the second input image channels are indexed from src[0].channels() to\nsrc[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image\nchannels; as a special case, when fromTo[k\\*2] is negative, the corresponding output channel is\nfilled with zero .\n@param npairs number of index pairs in fromTo.\n*/\nCV_EXPORTS void mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,\n                            const int* fromTo, size_t npairs);\n\n/** @overload\n@param src input array or vector of matrices; all of the matrices must have the same size and the\nsame depth.\n@param dst output array or vector of matrices; all the matrices **must be allocated**; their size and\ndepth must be the same as in src[0].\n@param fromTo array of index pairs specifying which channels are copied and where; fromTo[k\\*2] is\na 0-based index of the input channel in src, fromTo[k\\*2+1] is an index of the output channel in\ndst; the continuous channel numbering is used: the first input image channels are indexed from 0 to\nsrc[0].channels()-1, the second input image channels are indexed from src[0].channels() to\nsrc[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image\nchannels; as a special case, when fromTo[k\\*2] is negative, the corresponding output channel is\nfilled with zero .\n*/\nCV_EXPORTS_W void mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,\n                              const std::vector<int>& fromTo);\n\n/** @brief extracts a single channel from src (coi is 0-based index)\n@todo document\n*/\nCV_EXPORTS_W void extractChannel(InputArray src, OutputArray dst, int coi);\n\n/** @brief inserts a single channel to dst (coi is 0-based index)\n@todo document\n*/\nCV_EXPORTS_W void insertChannel(InputArray src, InputOutputArray dst, int coi);\n\n/** @brief Flips a 2D array around vertical, horizontal, or both axes.\n\nThe function flip flips the array in one of three different ways (row\nand column indices are 0-based):\n\\f[\\texttt{dst} _{ij} =\n\\left\\{\n\\begin{array}{l l}\n\\texttt{src} _{\\texttt{src.rows}-i-1,j} & if\\;  \\texttt{flipCode} = 0 \\\\\n\\texttt{src} _{i, \\texttt{src.cols} -j-1} & if\\;  \\texttt{flipCode} > 0 \\\\\n\\texttt{src} _{ \\texttt{src.rows} -i-1, \\texttt{src.cols} -j-1} & if\\; \\texttt{flipCode} < 0 \\\\\n\\end{array}\n\\right.\\f]\nThe example scenarios of using the function are the following:\n*   Vertical flipping of the image (flipCode == 0) to switch between\n    top-left and bottom-left image origin. This is a typical operation\n    in video processing on Microsoft Windows\\* OS.\n*   Horizontal flipping of the image with the subsequent horizontal\n    shift and absolute difference calculation to check for a\n    vertical-axis symmetry (flipCode \\> 0).\n*   Simultaneous horizontal and vertical flipping of the image with\n    the subsequent shift and absolute difference calculation to check\n    for a central symmetry (flipCode \\< 0).\n*   Reversing the order of point arrays (flipCode \\> 0 or\n    flipCode == 0).\n@param src input array.\n@param dst output array of the same size and type as src.\n@param flipCode a flag to specify how to flip the array; 0 means\nflipping around the x-axis and positive value (for example, 1) means\nflipping around y-axis. Negative value (for example, -1) means flipping\naround both axes.\n@sa transpose , repeat , completeSymm\n*/\nCV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);\n\n/** @brief Fills the output array with repeated copies of the input array.\n\nThe functions repeat duplicate the input array one or more times along each of the two axes:\n\\f[\\texttt{dst} _{ij}= \\texttt{src} _{i\\mod src.rows, \\; j\\mod src.cols }\\f]\nThe second variant of the function is more convenient to use with @ref MatrixExpressions.\n@param src input array to replicate.\n@param dst output array of the same type as src.\n@param ny Flag to specify how many times the src is repeated along the\nvertical axis.\n@param nx Flag to specify how many times the src is repeated along the\nhorizontal axis.\n@sa reduce\n*/\nCV_EXPORTS_W void repeat(InputArray src, int ny, int nx, OutputArray dst);\n\n/** @overload\n@param src input array to replicate.\n@param ny Flag to specify how many times the src is repeated along the\nvertical axis.\n@param nx Flag to specify how many times the src is repeated along the\nhorizontal axis.\n  */\nCV_EXPORTS Mat repeat(const Mat& src, int ny, int nx);\n\n/** @brief Applies horizontal concatenation to given matrices.\n\nThe function horizontally concatenates two or more cv::Mat matrices (with the same number of rows).\n@code{.cpp}\n    cv::Mat matArray[] = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),\n                           cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),\n                           cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};\n\n    cv::Mat out;\n    cv::hconcat( matArray, 3, out );\n    //out:\n    //[1, 2, 3;\n    // 1, 2, 3;\n    // 1, 2, 3;\n    // 1, 2, 3]\n@endcode\n@param src input array or vector of matrices. all of the matrices must have the same number of rows and the same depth.\n@param nsrc number of matrices in src.\n@param dst output array. It has the same number of rows and depth as the src, and the sum of cols of the src.\n@sa cv::vconcat(const Mat*, size_t, OutputArray), @sa cv::vconcat(InputArrayOfArrays, OutputArray) and @sa cv::vconcat(InputArray, InputArray, OutputArray)\n*/\nCV_EXPORTS void hconcat(const Mat* src, size_t nsrc, OutputArray dst);\n/** @overload\n @code{.cpp}\n    cv::Mat_<float> A = (cv::Mat_<float>(3, 2) << 1, 4,\n                                                  2, 5,\n                                                  3, 6);\n    cv::Mat_<float> B = (cv::Mat_<float>(3, 2) << 7, 10,\n                                                  8, 11,\n                                                  9, 12);\n\n    cv::Mat C;\n    cv::hconcat(A, B, C);\n    //C:\n    //[1, 4, 7, 10;\n    // 2, 5, 8, 11;\n    // 3, 6, 9, 12]\n @endcode\n @param src1 first input array to be considered for horizontal concatenation.\n @param src2 second input array to be considered for horizontal concatenation.\n @param dst output array. It has the same number of rows and depth as the src1 and src2, and the sum of cols of the src1 and src2.\n */\nCV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst);\n/** @overload\n @code{.cpp}\n    std::vector<cv::Mat> matrices = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),\n                                      cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),\n                                      cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};\n\n    cv::Mat out;\n    cv::hconcat( matrices, out );\n    //out:\n    //[1, 2, 3;\n    // 1, 2, 3;\n    // 1, 2, 3;\n    // 1, 2, 3]\n @endcode\n @param src input array or vector of matrices. all of the matrices must have the same number of rows and the same depth.\n @param dst output array. It has the same number of rows and depth as the src, and the sum of cols of the src.\nsame depth.\n */\nCV_EXPORTS_W void hconcat(InputArrayOfArrays src, OutputArray dst);\n\n/** @brief Applies vertical concatenation to given matrices.\n\nThe function vertically concatenates two or more cv::Mat matrices (with the same number of cols).\n@code{.cpp}\n    cv::Mat matArray[] = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)),\n                           cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)),\n                           cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),};\n\n    cv::Mat out;\n    cv::vconcat( matArray, 3, out );\n    //out:\n    //[1,   1,   1,   1;\n    // 2,   2,   2,   2;\n    // 3,   3,   3,   3]\n@endcode\n@param src input array or vector of matrices. all of the matrices must have the same number of cols and the same depth.\n@param nsrc number of matrices in src.\n@param dst output array. It has the same number of cols and depth as the src, and the sum of rows of the src.\n@sa cv::hconcat(const Mat*, size_t, OutputArray), @sa cv::hconcat(InputArrayOfArrays, OutputArray) and @sa cv::hconcat(InputArray, InputArray, OutputArray)\n*/\nCV_EXPORTS void vconcat(const Mat* src, size_t nsrc, OutputArray dst);\n/** @overload\n @code{.cpp}\n    cv::Mat_<float> A = (cv::Mat_<float>(3, 2) << 1, 7,\n                                                  2, 8,\n                                                  3, 9);\n    cv::Mat_<float> B = (cv::Mat_<float>(3, 2) << 4, 10,\n                                                  5, 11,\n                                                  6, 12);\n\n    cv::Mat C;\n    cv::vconcat(A, B, C);\n    //C:\n    //[1, 7;\n    // 2, 8;\n    // 3, 9;\n    // 4, 10;\n    // 5, 11;\n    // 6, 12]\n @endcode\n @param src1 first input array to be considered for vertical concatenation.\n @param src2 second input array to be considered for vertical concatenation.\n @param dst output array. It has the same number of cols and depth as the src1 and src2, and the sum of rows of the src1 and src2.\n */\nCV_EXPORTS void vconcat(InputArray src1, InputArray src2, OutputArray dst);\n/** @overload\n @code{.cpp}\n    std::vector<cv::Mat> matrices = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)),\n                                      cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)),\n                                      cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),};\n\n    cv::Mat out;\n    cv::vconcat( matrices, out );\n    //out:\n    //[1,   1,   1,   1;\n    // 2,   2,   2,   2;\n    // 3,   3,   3,   3]\n @endcode\n @param src input array or vector of matrices. all of the matrices must have the same number of cols and the same depth\n @param dst output array. It has the same number of cols and depth as the src, and the sum of rows of the src.\nsame depth.\n */\nCV_EXPORTS_W void vconcat(InputArrayOfArrays src, OutputArray dst);\n\n/** @brief computes bitwise conjunction of the two arrays (dst = src1 & src2)\nCalculates the per-element bit-wise conjunction of two arrays or an\narray and a scalar.\n\nThe function calculates the per-element bit-wise logical conjunction for:\n*   Two arrays when src1 and src2 have the same size:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1} (I)  \\wedge \\texttt{src2} (I) \\quad \\texttt{if mask} (I) \\ne0\\f]\n*   An array and a scalar when src2 is constructed from Scalar or has\n    the same number of elements as `src1.channels()`:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1} (I)  \\wedge \\texttt{src2} \\quad \\texttt{if mask} (I) \\ne0\\f]\n*   A scalar and an array when src1 is constructed from Scalar or has\n    the same number of elements as `src2.channels()`:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1}  \\wedge \\texttt{src2} (I) \\quad \\texttt{if mask} (I) \\ne0\\f]\nIn case of floating-point arrays, their machine-specific bit\nrepresentations (usually IEEE754-compliant) are used for the operation.\nIn case of multi-channel arrays, each channel is processed\nindependently. In the second and third cases above, the scalar is first\nconverted to the array type.\n@param src1 first input array or a scalar.\n@param src2 second input array or a scalar.\n@param dst output array that has the same size and type as the input\narrays.\n@param mask optional operation mask, 8-bit single channel array, that\nspecifies elements of the output array to be changed.\n*/\nCV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2,\n                              OutputArray dst, InputArray mask = noArray());\n\n/** @brief Calculates the per-element bit-wise disjunction of two arrays or an\narray and a scalar.\n\nThe function calculates the per-element bit-wise logical disjunction for:\n*   Two arrays when src1 and src2 have the same size:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1} (I)  \\vee \\texttt{src2} (I) \\quad \\texttt{if mask} (I) \\ne0\\f]\n*   An array and a scalar when src2 is constructed from Scalar or has\n    the same number of elements as `src1.channels()`:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1} (I)  \\vee \\texttt{src2} \\quad \\texttt{if mask} (I) \\ne0\\f]\n*   A scalar and an array when src1 is constructed from Scalar or has\n    the same number of elements as `src2.channels()`:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1}  \\vee \\texttt{src2} (I) \\quad \\texttt{if mask} (I) \\ne0\\f]\nIn case of floating-point arrays, their machine-specific bit\nrepresentations (usually IEEE754-compliant) are used for the operation.\nIn case of multi-channel arrays, each channel is processed\nindependently. In the second and third cases above, the scalar is first\nconverted to the array type.\n@param src1 first input array or a scalar.\n@param src2 second input array or a scalar.\n@param dst output array that has the same size and type as the input\narrays.\n@param mask optional operation mask, 8-bit single channel array, that\nspecifies elements of the output array to be changed.\n*/\nCV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2,\n                             OutputArray dst, InputArray mask = noArray());\n\n/** @brief Calculates the per-element bit-wise \"exclusive or\" operation on two\narrays or an array and a scalar.\n\nThe function calculates the per-element bit-wise logical \"exclusive-or\"\noperation for:\n*   Two arrays when src1 and src2 have the same size:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1} (I)  \\oplus \\texttt{src2} (I) \\quad \\texttt{if mask} (I) \\ne0\\f]\n*   An array and a scalar when src2 is constructed from Scalar or has\n    the same number of elements as `src1.channels()`:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1} (I)  \\oplus \\texttt{src2} \\quad \\texttt{if mask} (I) \\ne0\\f]\n*   A scalar and an array when src1 is constructed from Scalar or has\n    the same number of elements as `src2.channels()`:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1}  \\oplus \\texttt{src2} (I) \\quad \\texttt{if mask} (I) \\ne0\\f]\nIn case of floating-point arrays, their machine-specific bit\nrepresentations (usually IEEE754-compliant) are used for the operation.\nIn case of multi-channel arrays, each channel is processed\nindependently. In the 2nd and 3rd cases above, the scalar is first\nconverted to the array type.\n@param src1 first input array or a scalar.\n@param src2 second input array or a scalar.\n@param dst output array that has the same size and type as the input\narrays.\n@param mask optional operation mask, 8-bit single channel array, that\nspecifies elements of the output array to be changed.\n*/\nCV_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2,\n                              OutputArray dst, InputArray mask = noArray());\n\n/** @brief  Inverts every bit of an array.\n\nThe function calculates per-element bit-wise inversion of the input\narray:\n\\f[\\texttt{dst} (I) =  \\neg \\texttt{src} (I)\\f]\nIn case of a floating-point input array, its machine-specific bit\nrepresentation (usually IEEE754-compliant) is used for the operation. In\ncase of multi-channel arrays, each channel is processed independently.\n@param src input array.\n@param dst output array that has the same size and type as the input\narray.\n@param mask optional operation mask, 8-bit single channel array, that\nspecifies elements of the output array to be changed.\n*/\nCV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst,\n                              InputArray mask = noArray());\n\n/** @brief Calculates the per-element absolute difference between two arrays or between an array and a scalar.\n\nThe function absdiff calculates:\n*   Absolute difference between two arrays when they have the same\n    size and type:\n    \\f[\\texttt{dst}(I) =  \\texttt{saturate} (| \\texttt{src1}(I) -  \\texttt{src2}(I)|)\\f]\n*   Absolute difference between an array and a scalar when the second\n    array is constructed from Scalar or has as many elements as the\n    number of channels in `src1`:\n    \\f[\\texttt{dst}(I) =  \\texttt{saturate} (| \\texttt{src1}(I) -  \\texttt{src2} |)\\f]\n*   Absolute difference between a scalar and an array when the first\n    array is constructed from Scalar or has as many elements as the\n    number of channels in `src2`:\n    \\f[\\texttt{dst}(I) =  \\texttt{saturate} (| \\texttt{src1} -  \\texttt{src2}(I) |)\\f]\n    where I is a multi-dimensional index of array elements. In case of\n    multi-channel arrays, each channel is processed independently.\n@note Saturation is not applied when the arrays have the depth CV_32S.\nYou may even get a negative value in the case of overflow.\n@param src1 first input array or a scalar.\n@param src2 second input array or a scalar.\n@param dst output array that has the same size and type as input arrays.\n@sa cv::abs(const Mat&)\n*/\nCV_EXPORTS_W void absdiff(InputArray src1, InputArray src2, OutputArray dst);\n\n/** @brief  Checks if array elements lie between the elements of two other arrays.\n\nThe function checks the range as follows:\n-   For every element of a single-channel input array:\n    \\f[\\texttt{dst} (I)= \\texttt{lowerb} (I)_0  \\leq \\texttt{src} (I)_0 \\leq  \\texttt{upperb} (I)_0\\f]\n-   For two-channel arrays:\n    \\f[\\texttt{dst} (I)= \\texttt{lowerb} (I)_0  \\leq \\texttt{src} (I)_0 \\leq  \\texttt{upperb} (I)_0  \\land \\texttt{lowerb} (I)_1  \\leq \\texttt{src} (I)_1 \\leq  \\texttt{upperb} (I)_1\\f]\n-   and so forth.\n\nThat is, dst (I) is set to 255 (all 1 -bits) if src (I) is within the\nspecified 1D, 2D, 3D, ... box and 0 otherwise.\n\nWhen the lower and/or upper boundary parameters are scalars, the indexes\n(I) at lowerb and upperb in the above formulas should be omitted.\n@param src first input array.\n@param lowerb inclusive lower boundary array or a scalar.\n@param upperb inclusive upper boundary array or a scalar.\n@param dst output array of the same size as src and CV_8U type.\n*/\nCV_EXPORTS_W void inRange(InputArray src, InputArray lowerb,\n                          InputArray upperb, OutputArray dst);\n\n/** @brief Performs the per-element comparison of two arrays or an array and scalar value.\n\nThe function compares:\n*   Elements of two arrays when src1 and src2 have the same size:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1} (I)  \\,\\texttt{cmpop}\\, \\texttt{src2} (I)\\f]\n*   Elements of src1 with a scalar src2 when src2 is constructed from\n    Scalar or has a single element:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1}(I) \\,\\texttt{cmpop}\\,  \\texttt{src2}\\f]\n*   src1 with elements of src2 when src1 is constructed from Scalar or\n    has a single element:\n    \\f[\\texttt{dst} (I) =  \\texttt{src1}  \\,\\texttt{cmpop}\\, \\texttt{src2} (I)\\f]\nWhen the comparison result is true, the corresponding element of output\narray is set to 255. The comparison operations can be replaced with the\nequivalent matrix expressions:\n@code{.cpp}\n    Mat dst1 = src1 >= src2;\n    Mat dst2 = src1 < 8;\n    ...\n@endcode\n@param src1 first input array or a scalar; when it is an array, it must have a single channel.\n@param src2 second input array or a scalar; when it is an array, it must have a single channel.\n@param dst output array of type ref CV_8U that has the same size and the same number of channels as\n    the input arrays.\n@param cmpop a flag, that specifies correspondence between the arrays (cv::CmpTypes)\n@sa checkRange, min, max, threshold\n*/\nCV_EXPORTS_W void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop);\n\n/** @brief Calculates per-element minimum of two arrays or an array and a scalar.\n\nThe functions min calculate the per-element minimum of two arrays:\n\\f[\\texttt{dst} (I)= \\min ( \\texttt{src1} (I), \\texttt{src2} (I))\\f]\nor array and a scalar:\n\\f[\\texttt{dst} (I)= \\min ( \\texttt{src1} (I), \\texttt{value} )\\f]\n@param src1 first input array.\n@param src2 second input array of the same size and type as src1.\n@param dst output array of the same size and type as src1.\n@sa max, compare, inRange, minMaxLoc\n*/\nCV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst);\n/** @overload\nneeded to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)\n*/\nCV_EXPORTS void min(const Mat& src1, const Mat& src2, Mat& dst);\n/** @overload\nneeded to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)\n*/\nCV_EXPORTS void min(const UMat& src1, const UMat& src2, UMat& dst);\n\n/** @brief Calculates per-element maximum of two arrays or an array and a scalar.\n\nThe functions max calculate the per-element maximum of two arrays:\n\\f[\\texttt{dst} (I)= \\max ( \\texttt{src1} (I), \\texttt{src2} (I))\\f]\nor array and a scalar:\n\\f[\\texttt{dst} (I)= \\max ( \\texttt{src1} (I), \\texttt{value} )\\f]\n@param src1 first input array.\n@param src2 second input array of the same size and type as src1 .\n@param dst output array of the same size and type as src1.\n@sa  min, compare, inRange, minMaxLoc, @ref MatrixExpressions\n*/\nCV_EXPORTS_W void max(InputArray src1, InputArray src2, OutputArray dst);\n/** @overload\nneeded to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)\n*/\nCV_EXPORTS void max(const Mat& src1, const Mat& src2, Mat& dst);\n/** @overload\nneeded to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)\n*/\nCV_EXPORTS void max(const UMat& src1, const UMat& src2, UMat& dst);\n\n/** @brief Calculates a square root of array elements.\n\nThe functions sqrt calculate a square root of each input array element.\nIn case of multi-channel arrays, each channel is processed\nindependently. The accuracy is approximately the same as of the built-in\nstd::sqrt .\n@param src input floating-point array.\n@param dst output array of the same size and type as src.\n*/\nCV_EXPORTS_W void sqrt(InputArray src, OutputArray dst);\n\n/** @brief Raises every array element to a power.\n\nThe function pow raises every element of the input array to power :\n\\f[\\texttt{dst} (I) =  \\fork{\\texttt{src}(I)^{power}}{if \\(\\texttt{power}\\) is integer}{|\\texttt{src}(I)|^{power}}{otherwise}\\f]\n\nSo, for a non-integer power exponent, the absolute values of input array\nelements are used. However, it is possible to get true values for\nnegative values using some extra operations. In the example below,\ncomputing the 5th root of array src shows:\n@code{.cpp}\n    Mat mask = src < 0;\n    pow(src, 1./5, dst);\n    subtract(Scalar::all(0), dst, dst, mask);\n@endcode\nFor some values of power, such as integer values, 0.5 and -0.5,\nspecialized faster algorithms are used.\n\nSpecial values (NaN, Inf) are not handled.\n@param src input array.\n@param power exponent of power.\n@param dst output array of the same size and type as src.\n@sa sqrt, exp, log, cartToPolar, polarToCart\n*/\nCV_EXPORTS_W void pow(InputArray src, double power, OutputArray dst);\n\n/** @brief Calculates the exponent of every array element.\n\nThe function exp calculates the exponent of every element of the input\narray:\n\\f[\\texttt{dst} [I] = e^{ src(I) }\\f]\n\nThe maximum relative error is about 7e-6 for single-precision input and\nless than 1e-10 for double-precision input. Currently, the function\nconverts denormalized values to zeros on output. Special values (NaN,\nInf) are not handled.\n@param src input array.\n@param dst output array of the same size and type as src.\n@sa log , cartToPolar , polarToCart , phase , pow , sqrt , magnitude\n*/\nCV_EXPORTS_W void exp(InputArray src, OutputArray dst);\n\n/** @brief Calculates the natural logarithm of every array element.\n\nThe function log calculates the natural logarithm of the absolute value\nof every element of the input array:\n\\f[\\texttt{dst} (I) =  \\fork{\\log |\\texttt{src}(I)|}{if \\(\\texttt{src}(I) \\ne 0\\) }{\\texttt{C}}{otherwise}\\f]\n\nwhere C is a large negative number (about -700 in the current\nimplementation). The maximum relative error is about 7e-6 for\nsingle-precision input and less than 1e-10 for double-precision input.\nSpecial values (NaN, Inf) are not handled.\n@param src input array.\n@param dst output array of the same size and type as src .\n@sa exp, cartToPolar, polarToCart, phase, pow, sqrt, magnitude\n*/\nCV_EXPORTS_W void log(InputArray src, OutputArray dst);\n\n/** @brief Calculates x and y coordinates of 2D vectors from their magnitude and angle.\n\nThe function polarToCart calculates the Cartesian coordinates of each 2D\nvector represented by the corresponding elements of magnitude and angle:\n\\f[\\begin{array}{l} \\texttt{x} (I) =  \\texttt{magnitude} (I) \\cos ( \\texttt{angle} (I)) \\\\ \\texttt{y} (I) =  \\texttt{magnitude} (I) \\sin ( \\texttt{angle} (I)) \\\\ \\end{array}\\f]\n\nThe relative accuracy of the estimated coordinates is about 1e-6.\n@param magnitude input floating-point array of magnitudes of 2D vectors;\nit can be an empty matrix (=Mat()), in this case, the function assumes\nthat all the magnitudes are =1; if it is not empty, it must have the\nsame size and type as angle.\n@param angle input floating-point array of angles of 2D vectors.\n@param x output array of x-coordinates of 2D vectors; it has the same\nsize and type as angle.\n@param y output array of y-coordinates of 2D vectors; it has the same\nsize and type as angle.\n@param angleInDegrees when true, the input angles are measured in\ndegrees, otherwise, they are measured in radians.\n@sa cartToPolar, magnitude, phase, exp, log, pow, sqrt\n*/\nCV_EXPORTS_W void polarToCart(InputArray magnitude, InputArray angle,\n                              OutputArray x, OutputArray y, bool angleInDegrees = false);\n\n/** @brief Calculates the magnitude and angle of 2D vectors.\n\nThe function cartToPolar calculates either the magnitude, angle, or both\nfor every 2D vector (x(I),y(I)):\n\\f[\\begin{array}{l} \\texttt{magnitude} (I)= \\sqrt{\\texttt{x}(I)^2+\\texttt{y}(I)^2} , \\\\ \\texttt{angle} (I)= \\texttt{atan2} ( \\texttt{y} (I), \\texttt{x} (I))[ \\cdot180 / \\pi ] \\end{array}\\f]\n\nThe angles are calculated with accuracy about 0.3 degrees. For the point\n(0,0), the angle is set to 0.\n@param x array of x-coordinates; this must be a single-precision or\ndouble-precision floating-point array.\n@param y array of y-coordinates, that must have the same size and same type as x.\n@param magnitude output array of magnitudes of the same size and type as x.\n@param angle output array of angles that has the same size and type as\nx; the angles are measured in radians (from 0 to 2\\*Pi) or in degrees (0 to 360 degrees).\n@param angleInDegrees a flag, indicating whether the angles are measured\nin radians (which is by default), or in degrees.\n@sa Sobel, Scharr\n*/\nCV_EXPORTS_W void cartToPolar(InputArray x, InputArray y,\n                              OutputArray magnitude, OutputArray angle,\n                              bool angleInDegrees = false);\n\n/** @brief Calculates the rotation angle of 2D vectors.\n\nThe function phase calculates the rotation angle of each 2D vector that\nis formed from the corresponding elements of x and y :\n\\f[\\texttt{angle} (I) =  \\texttt{atan2} ( \\texttt{y} (I), \\texttt{x} (I))\\f]\n\nThe angle estimation accuracy is about 0.3 degrees. When x(I)=y(I)=0 ,\nthe corresponding angle(I) is set to 0.\n@param x input floating-point array of x-coordinates of 2D vectors.\n@param y input array of y-coordinates of 2D vectors; it must have the\nsame size and the same type as x.\n@param angle output array of vector angles; it has the same size and\nsame type as x .\n@param angleInDegrees when true, the function calculates the angle in\ndegrees, otherwise, they are measured in radians.\n*/\nCV_EXPORTS_W void phase(InputArray x, InputArray y, OutputArray angle,\n                        bool angleInDegrees = false);\n\n/** @brief Calculates the magnitude of 2D vectors.\n\nThe function magnitude calculates the magnitude of 2D vectors formed\nfrom the corresponding elements of x and y arrays:\n\\f[\\texttt{dst} (I) =  \\sqrt{\\texttt{x}(I)^2 + \\texttt{y}(I)^2}\\f]\n@param x floating-point array of x-coordinates of the vectors.\n@param y floating-point array of y-coordinates of the vectors; it must\nhave the same size as x.\n@param magnitude output array of the same size and type as x.\n@sa cartToPolar, polarToCart, phase, sqrt\n*/\nCV_EXPORTS_W void magnitude(InputArray x, InputArray y, OutputArray magnitude);\n\n/** @brief Checks every element of an input array for invalid values.\n\nThe functions checkRange check that every array element is neither NaN nor infinite. When minVal \\>\n-DBL_MAX and maxVal \\< DBL_MAX, the functions also check that each value is between minVal and\nmaxVal. In case of multi-channel arrays, each channel is processed independently. If some values\nare out of range, position of the first outlier is stored in pos (when pos != NULL). Then, the\nfunctions either return false (when quiet=true) or throw an exception.\n@param a input array.\n@param quiet a flag, indicating whether the functions quietly return false when the array elements\nare out of range or they throw an exception.\n@param pos optional output parameter, when not NULL, must be a pointer to array of src.dims\nelements.\n@param minVal inclusive lower boundary of valid values range.\n@param maxVal exclusive upper boundary of valid values range.\n*/\nCV_EXPORTS_W bool checkRange(InputArray a, bool quiet = true, CV_OUT Point* pos = 0,\n                            double minVal = -DBL_MAX, double maxVal = DBL_MAX);\n\n/** @brief converts NaN's to the given number\n*/\nCV_EXPORTS_W void patchNaNs(InputOutputArray a, double val = 0);\n\n/** @brief Performs generalized matrix multiplication.\n\nThe function performs generalized matrix multiplication similar to the\ngemm functions in BLAS level 3. For example,\n`gemm(src1, src2, alpha, src3, beta, dst, GEMM_1_T + GEMM_3_T)`\ncorresponds to\n\\f[\\texttt{dst} =  \\texttt{alpha} \\cdot \\texttt{src1} ^T  \\cdot \\texttt{src2} +  \\texttt{beta} \\cdot \\texttt{src3} ^T\\f]\n\nIn case of complex (two-channel) data, performed a complex matrix\nmultiplication.\n\nThe function can be replaced with a matrix expression. For example, the\nabove call can be replaced with:\n@code{.cpp}\n    dst = alpha*src1.t()*src2 + beta*src3.t();\n@endcode\n@param src1 first multiplied input matrix that could be real(CV_32FC1,\nCV_64FC1) or complex(CV_32FC2, CV_64FC2).\n@param src2 second multiplied input matrix of the same type as src1.\n@param alpha weight of the matrix product.\n@param src3 third optional delta matrix added to the matrix product; it\nshould have the same type as src1 and src2.\n@param beta weight of src3.\n@param dst output matrix; it has the proper size and the same type as\ninput matrices.\n@param flags operation flags (cv::GemmFlags)\n@sa mulTransposed , transform\n*/\nCV_EXPORTS_W void gemm(InputArray src1, InputArray src2, double alpha,\n                       InputArray src3, double beta, OutputArray dst, int flags = 0);\n\n/** @brief Calculates the product of a matrix and its transposition.\n\nThe function mulTransposed calculates the product of src and its\ntransposition:\n\\f[\\texttt{dst} = \\texttt{scale} ( \\texttt{src} - \\texttt{delta} )^T ( \\texttt{src} - \\texttt{delta} )\\f]\nif aTa=true , and\n\\f[\\texttt{dst} = \\texttt{scale} ( \\texttt{src} - \\texttt{delta} ) ( \\texttt{src} - \\texttt{delta} )^T\\f]\notherwise. The function is used to calculate the covariance matrix. With\nzero delta, it can be used as a faster substitute for general matrix\nproduct A\\*B when B=A'\n@param src input single-channel matrix. Note that unlike gemm, the\nfunction can multiply not only floating-point matrices.\n@param dst output square matrix.\n@param aTa Flag specifying the multiplication ordering. See the\ndescription below.\n@param delta Optional delta matrix subtracted from src before the\nmultiplication. When the matrix is empty ( delta=noArray() ), it is\nassumed to be zero, that is, nothing is subtracted. If it has the same\nsize as src , it is simply subtracted. Otherwise, it is \"repeated\" (see\nrepeat ) to cover the full src and then subtracted. Type of the delta\nmatrix, when it is not empty, must be the same as the type of created\noutput matrix. See the dtype parameter description below.\n@param scale Optional scale factor for the matrix product.\n@param dtype Optional type of the output matrix. When it is negative,\nthe output matrix will have the same type as src . Otherwise, it will be\ntype=CV_MAT_DEPTH(dtype) that should be either CV_32F or CV_64F .\n@sa calcCovarMatrix, gemm, repeat, reduce\n*/\nCV_EXPORTS_W void mulTransposed( InputArray src, OutputArray dst, bool aTa,\n                                 InputArray delta = noArray(),\n                                 double scale = 1, int dtype = -1 );\n\n/** @brief Transposes a matrix.\n\nThe function transpose transposes the matrix src :\n\\f[\\texttt{dst} (i,j) =  \\texttt{src} (j,i)\\f]\n@note No complex conjugation is done in case of a complex matrix. It it\nshould be done separately if needed.\n@param src input array.\n@param dst output array of the same type as src.\n*/\nCV_EXPORTS_W void transpose(InputArray src, OutputArray dst);\n\n/** @brief Performs the matrix transformation of every array element.\n\nThe function transform performs the matrix transformation of every\nelement of the array src and stores the results in dst :\n\\f[\\texttt{dst} (I) =  \\texttt{m} \\cdot \\texttt{src} (I)\\f]\n(when m.cols=src.channels() ), or\n\\f[\\texttt{dst} (I) =  \\texttt{m} \\cdot [ \\texttt{src} (I); 1]\\f]\n(when m.cols=src.channels()+1 )\n\nEvery element of the N -channel array src is interpreted as N -element\nvector that is transformed using the M x N or M x (N+1) matrix m to\nM-element vector - the corresponding element of the output array dst .\n\nThe function may be used for geometrical transformation of\nN -dimensional points, arbitrary linear color space transformation (such\nas various kinds of RGB to YUV transforms), shuffling the image\nchannels, and so forth.\n@param src input array that must have as many channels (1 to 4) as\nm.cols or m.cols-1.\n@param dst output array of the same size and depth as src; it has as\nmany channels as m.rows.\n@param m transformation 2x2 or 2x3 floating-point matrix.\n@sa perspectiveTransform, getAffineTransform, estimateRigidTransform, warpAffine, warpPerspective\n*/\nCV_EXPORTS_W void transform(InputArray src, OutputArray dst, InputArray m );\n\n/** @brief Performs the perspective matrix transformation of vectors.\n\nThe function perspectiveTransform transforms every element of src by\ntreating it as a 2D or 3D vector, in the following way:\n\\f[(x, y, z)  \\rightarrow (x'/w, y'/w, z'/w)\\f]\nwhere\n\\f[(x', y', z', w') =  \\texttt{mat} \\cdot \\begin{bmatrix} x & y & z & 1  \\end{bmatrix}\\f]\nand\n\\f[w =  \\fork{w'}{if \\(w' \\ne 0\\)}{\\infty}{otherwise}\\f]\n\nHere a 3D vector transformation is shown. In case of a 2D vector\ntransformation, the z component is omitted.\n\n@note The function transforms a sparse set of 2D or 3D vectors. If you\nwant to transform an image using perspective transformation, use\nwarpPerspective . If you have an inverse problem, that is, you want to\ncompute the most probable perspective transformation out of several\npairs of corresponding points, you can use getPerspectiveTransform or\nfindHomography .\n@param src input two-channel or three-channel floating-point array; each\nelement is a 2D/3D vector to be transformed.\n@param dst output array of the same size and type as src.\n@param m 3x3 or 4x4 floating-point transformation matrix.\n@sa  transform, warpPerspective, getPerspectiveTransform, findHomography\n*/\nCV_EXPORTS_W void perspectiveTransform(InputArray src, OutputArray dst, InputArray m );\n\n/** @brief Copies the lower or the upper half of a square matrix to another half.\n\nThe function completeSymm copies the lower half of a square matrix to\nits another half. The matrix diagonal remains unchanged:\n*   \\f$\\texttt{mtx}_{ij}=\\texttt{mtx}_{ji}\\f$ for \\f$i > j\\f$ if\n    lowerToUpper=false\n*   \\f$\\texttt{mtx}_{ij}=\\texttt{mtx}_{ji}\\f$ for \\f$i < j\\f$ if\n    lowerToUpper=true\n@param mtx input-output floating-point square matrix.\n@param lowerToUpper operation flag; if true, the lower half is copied to\nthe upper half. Otherwise, the upper half is copied to the lower half.\n@sa flip, transpose\n*/\nCV_EXPORTS_W void completeSymm(InputOutputArray mtx, bool lowerToUpper = false);\n\n/** @brief Initializes a scaled identity matrix.\n\nThe function setIdentity initializes a scaled identity matrix:\n\\f[\\texttt{mtx} (i,j)= \\fork{\\texttt{value}}{ if \\(i=j\\)}{0}{otherwise}\\f]\n\nThe function can also be emulated using the matrix initializers and the\nmatrix expressions:\n@code\n    Mat A = Mat::eye(4, 3, CV_32F)*5;\n    // A will be set to [[5, 0, 0], [0, 5, 0], [0, 0, 5], [0, 0, 0]]\n@endcode\n@param mtx matrix to initialize (not necessarily square).\n@param s value to assign to diagonal elements.\n@sa Mat::zeros, Mat::ones, Mat::setTo, Mat::operator=\n*/\nCV_EXPORTS_W void setIdentity(InputOutputArray mtx, const Scalar& s = Scalar(1));\n\n/** @brief Returns the determinant of a square floating-point matrix.\n\nThe function determinant calculates and returns the determinant of the\nspecified matrix. For small matrices ( mtx.cols=mtx.rows\\<=3 ), the\ndirect method is used. For larger matrices, the function uses LU\nfactorization with partial pivoting.\n\nFor symmetric positively-determined matrices, it is also possible to use\neigen decomposition to calculate the determinant.\n@param mtx input matrix that must have CV_32FC1 or CV_64FC1 type and\nsquare size.\n@sa trace, invert, solve, eigen, @ref MatrixExpressions\n*/\nCV_EXPORTS_W double determinant(InputArray mtx);\n\n/** @brief Returns the trace of a matrix.\n\nThe function trace returns the sum of the diagonal elements of the\nmatrix mtx .\n\\f[\\mathrm{tr} ( \\texttt{mtx} ) =  \\sum _i  \\texttt{mtx} (i,i)\\f]\n@param mtx input matrix.\n*/\nCV_EXPORTS_W Scalar trace(InputArray mtx);\n\n/** @brief Finds the inverse or pseudo-inverse of a matrix.\n\nThe function invert inverts the matrix src and stores the result in dst\n. When the matrix src is singular or non-square, the function calculates\nthe pseudo-inverse matrix (the dst matrix) so that norm(src\\*dst - I) is\nminimal, where I is an identity matrix.\n\nIn case of the DECOMP_LU method, the function returns non-zero value if\nthe inverse has been successfully calculated and 0 if src is singular.\n\nIn case of the DECOMP_SVD method, the function returns the inverse\ncondition number of src (the ratio of the smallest singular value to the\nlargest singular value) and 0 if src is singular. The SVD method\ncalculates a pseudo-inverse matrix if src is singular.\n\nSimilarly to DECOMP_LU, the method DECOMP_CHOLESKY works only with\nnon-singular square matrices that should also be symmetrical and\npositively defined. In this case, the function stores the inverted\nmatrix in dst and returns non-zero. Otherwise, it returns 0.\n\n@param src input floating-point M x N matrix.\n@param dst output matrix of N x M size and the same type as src.\n@param flags inversion method (cv::DecompTypes)\n@sa solve, SVD\n*/\nCV_EXPORTS_W double invert(InputArray src, OutputArray dst, int flags = DECOMP_LU);\n\n/** @brief Solves one or more linear systems or least-squares problems.\n\nThe function solve solves a linear system or least-squares problem (the\nlatter is possible with SVD or QR methods, or by specifying the flag\nDECOMP_NORMAL ):\n\\f[\\texttt{dst} =  \\arg \\min _X \\| \\texttt{src1} \\cdot \\texttt{X} -  \\texttt{src2} \\|\\f]\n\nIf DECOMP_LU or DECOMP_CHOLESKY method is used, the function returns 1\nif src1 (or \\f$\\texttt{src1}^T\\texttt{src1}\\f$ ) is non-singular. Otherwise,\nit returns 0. In the latter case, dst is not valid. Other methods find a\npseudo-solution in case of a singular left-hand side part.\n\n@note If you want to find a unity-norm solution of an under-defined\nsingular system \\f$\\texttt{src1}\\cdot\\texttt{dst}=0\\f$ , the function solve\nwill not do the work. Use SVD::solveZ instead.\n\n@param src1 input matrix on the left-hand side of the system.\n@param src2 input matrix on the right-hand side of the system.\n@param dst output solution.\n@param flags solution (matrix inversion) method (cv::DecompTypes)\n@sa invert, SVD, eigen\n*/\nCV_EXPORTS_W bool solve(InputArray src1, InputArray src2,\n                        OutputArray dst, int flags = DECOMP_LU);\n\n/** @brief Sorts each row or each column of a matrix.\n\nThe function sort sorts each matrix row or each matrix column in\nascending or descending order. So you should pass two operation flags to\nget desired behaviour. If you want to sort matrix rows or columns\nlexicographically, you can use STL std::sort generic function with the\nproper comparison predicate.\n\n@param src input single-channel array.\n@param dst output array of the same size and type as src.\n@param flags operation flags, a combination of cv::SortFlags\n@sa sortIdx, randShuffle\n*/\nCV_EXPORTS_W void sort(InputArray src, OutputArray dst, int flags);\n\n/** @brief Sorts each row or each column of a matrix.\n\nThe function sortIdx sorts each matrix row or each matrix column in the\nascending or descending order. So you should pass two operation flags to\nget desired behaviour. Instead of reordering the elements themselves, it\nstores the indices of sorted elements in the output array. For example:\n@code\n    Mat A = Mat::eye(3,3,CV_32F), B;\n    sortIdx(A, B, SORT_EVERY_ROW + SORT_ASCENDING);\n    // B will probably contain\n    // (because of equal elements in A some permutations are possible):\n    // [[1, 2, 0], [0, 2, 1], [0, 1, 2]]\n@endcode\n@param src input single-channel array.\n@param dst output integer array of the same size as src.\n@param flags operation flags that could be a combination of cv::SortFlags\n@sa sort, randShuffle\n*/\nCV_EXPORTS_W void sortIdx(InputArray src, OutputArray dst, int flags);\n\n/** @brief Finds the real roots of a cubic equation.\n\nThe function solveCubic finds the real roots of a cubic equation:\n-   if coeffs is a 4-element vector:\n\\f[\\texttt{coeffs} [0] x^3 +  \\texttt{coeffs} [1] x^2 +  \\texttt{coeffs} [2] x +  \\texttt{coeffs} [3] = 0\\f]\n-   if coeffs is a 3-element vector:\n\\f[x^3 +  \\texttt{coeffs} [0] x^2 +  \\texttt{coeffs} [1] x +  \\texttt{coeffs} [2] = 0\\f]\n\nThe roots are stored in the roots array.\n@param coeffs equation coefficients, an array of 3 or 4 elements.\n@param roots output array of real roots that has 1 or 3 elements.\n*/\nCV_EXPORTS_W int solveCubic(InputArray coeffs, OutputArray roots);\n\n/** @brief Finds the real or complex roots of a polynomial equation.\n\nThe function solvePoly finds real and complex roots of a polynomial equation:\n\\f[\\texttt{coeffs} [n] x^{n} +  \\texttt{coeffs} [n-1] x^{n-1} + ... +  \\texttt{coeffs} [1] x +  \\texttt{coeffs} [0] = 0\\f]\n@param coeffs array of polynomial coefficients.\n@param roots output (complex) array of roots.\n@param maxIters maximum number of iterations the algorithm does.\n*/\nCV_EXPORTS_W double solvePoly(InputArray coeffs, OutputArray roots, int maxIters = 300);\n\n/** @brief Calculates eigenvalues and eigenvectors of a symmetric matrix.\n\nThe functions eigen calculate just eigenvalues, or eigenvalues and eigenvectors of the symmetric\nmatrix src:\n@code\n    src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()\n@endcode\n@note in the new and the old interfaces different ordering of eigenvalues and eigenvectors\nparameters is used.\n@param src input matrix that must have CV_32FC1 or CV_64FC1 type, square size and be symmetrical\n(src ^T^ == src).\n@param eigenvalues output vector of eigenvalues of the same type as src; the eigenvalues are stored\nin the descending order.\n@param eigenvectors output matrix of eigenvectors; it has the same size and type as src; the\neigenvectors are stored as subsequent matrix rows, in the same order as the corresponding\neigenvalues.\n@sa completeSymm , PCA\n*/\nCV_EXPORTS_W bool eigen(InputArray src, OutputArray eigenvalues,\n                        OutputArray eigenvectors = noArray());\n\n/** @brief Calculates the covariance matrix of a set of vectors.\n\nThe functions calcCovarMatrix calculate the covariance matrix and, optionally, the mean vector of\nthe set of input vectors.\n@param samples samples stored as separate matrices\n@param nsamples number of samples\n@param covar output covariance matrix of the type ctype and square size.\n@param mean input or output (depending on the flags) array as the average value of the input vectors.\n@param flags operation flags as a combination of cv::CovarFlags\n@param ctype type of the matrixl; it equals 'CV_64F' by default.\n@sa PCA, mulTransposed, Mahalanobis\n@todo InputArrayOfArrays\n*/\nCV_EXPORTS void calcCovarMatrix( const Mat* samples, int nsamples, Mat& covar, Mat& mean,\n                                 int flags, int ctype = CV_64F);\n\n/** @overload\n@note use cv::COVAR_ROWS or cv::COVAR_COLS flag\n@param samples samples stored as rows/columns of a single matrix.\n@param covar output covariance matrix of the type ctype and square size.\n@param mean input or output (depending on the flags) array as the average value of the input vectors.\n@param flags operation flags as a combination of cv::CovarFlags\n@param ctype type of the matrixl; it equals 'CV_64F' by default.\n*/\nCV_EXPORTS_W void calcCovarMatrix( InputArray samples, OutputArray covar,\n                                   InputOutputArray mean, int flags, int ctype = CV_64F);\n\n/** wrap PCA::operator() */\nCV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean,\n                             OutputArray eigenvectors, int maxComponents = 0);\n\n/** wrap PCA::operator() */\nCV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean,\n                             OutputArray eigenvectors, double retainedVariance);\n\n/** wrap PCA::project */\nCV_EXPORTS_W void PCAProject(InputArray data, InputArray mean,\n                             InputArray eigenvectors, OutputArray result);\n\n/** wrap PCA::backProject */\nCV_EXPORTS_W void PCABackProject(InputArray data, InputArray mean,\n                                 InputArray eigenvectors, OutputArray result);\n\n/** wrap SVD::compute */\nCV_EXPORTS_W void SVDecomp( InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags = 0 );\n\n/** wrap SVD::backSubst */\nCV_EXPORTS_W void SVBackSubst( InputArray w, InputArray u, InputArray vt,\n                               InputArray rhs, OutputArray dst );\n\n/** @brief Calculates the Mahalanobis distance between two vectors.\n\nThe function Mahalanobis calculates and returns the weighted distance between two vectors:\n\\f[d( \\texttt{vec1} , \\texttt{vec2} )= \\sqrt{\\sum_{i,j}{\\texttt{icovar(i,j)}\\cdot(\\texttt{vec1}(I)-\\texttt{vec2}(I))\\cdot(\\texttt{vec1(j)}-\\texttt{vec2(j)})} }\\f]\nThe covariance matrix may be calculated using the cv::calcCovarMatrix function and then inverted using\nthe invert function (preferably using the cv::DECOMP_SVD method, as the most accurate).\n@param v1 first 1D input vector.\n@param v2 second 1D input vector.\n@param icovar inverse covariance matrix.\n*/\nCV_EXPORTS_W double Mahalanobis(InputArray v1, InputArray v2, InputArray icovar);\n\n/** @brief Performs a forward or inverse Discrete Fourier transform of a 1D or 2D floating-point array.\n\nThe function performs one of the following:\n-   Forward the Fourier transform of a 1D vector of N elements:\n    \\f[Y = F^{(N)}  \\cdot X,\\f]\n    where \\f$F^{(N)}_{jk}=\\exp(-2\\pi i j k/N)\\f$ and \\f$i=\\sqrt{-1}\\f$\n-   Inverse the Fourier transform of a 1D vector of N elements:\n    \\f[\\begin{array}{l} X'=  \\left (F^{(N)} \\right )^{-1}  \\cdot Y =  \\left (F^{(N)} \\right )^*  \\cdot y  \\\\ X = (1/N)  \\cdot X, \\end{array}\\f]\n    where \\f$F^*=\\left(\\textrm{Re}(F^{(N)})-\\textrm{Im}(F^{(N)})\\right)^T\\f$\n-   Forward the 2D Fourier transform of a M x N matrix:\n    \\f[Y = F^{(M)}  \\cdot X  \\cdot F^{(N)}\\f]\n-   Inverse the 2D Fourier transform of a M x N matrix:\n    \\f[\\begin{array}{l} X'=  \\left (F^{(M)} \\right )^*  \\cdot Y  \\cdot \\left (F^{(N)} \\right )^* \\\\ X =  \\frac{1}{M \\cdot N} \\cdot X' \\end{array}\\f]\n\nIn case of real (single-channel) data, the output spectrum of the forward Fourier transform or input\nspectrum of the inverse Fourier transform can be represented in a packed format called *CCS*\n(complex-conjugate-symmetrical). It was borrowed from IPL (Intel\\* Image Processing Library). Here\nis how 2D *CCS* spectrum looks:\n\\f[\\begin{bmatrix} Re Y_{0,0} & Re Y_{0,1} & Im Y_{0,1} & Re Y_{0,2} & Im Y_{0,2} &  \\cdots & Re Y_{0,N/2-1} & Im Y_{0,N/2-1} & Re Y_{0,N/2}  \\\\ Re Y_{1,0} & Re Y_{1,1} & Im Y_{1,1} & Re Y_{1,2} & Im Y_{1,2} &  \\cdots & Re Y_{1,N/2-1} & Im Y_{1,N/2-1} & Re Y_{1,N/2}  \\\\ Im Y_{1,0} & Re Y_{2,1} & Im Y_{2,1} & Re Y_{2,2} & Im Y_{2,2} &  \\cdots & Re Y_{2,N/2-1} & Im Y_{2,N/2-1} & Im Y_{1,N/2}  \\\\ \\hdotsfor{9} \\\\ Re Y_{M/2-1,0} &  Re Y_{M-3,1}  & Im Y_{M-3,1} &  \\hdotsfor{3} & Re Y_{M-3,N/2-1} & Im Y_{M-3,N/2-1}& Re Y_{M/2-1,N/2}  \\\\ Im Y_{M/2-1,0} &  Re Y_{M-2,1}  & Im Y_{M-2,1} &  \\hdotsfor{3} & Re Y_{M-2,N/2-1} & Im Y_{M-2,N/2-1}& Im Y_{M/2-1,N/2}  \\\\ Re Y_{M/2,0}  &  Re Y_{M-1,1} &  Im Y_{M-1,1} &  \\hdotsfor{3} & Re Y_{M-1,N/2-1} & Im Y_{M-1,N/2-1}& Re Y_{M/2,N/2} \\end{bmatrix}\\f]\n\nIn case of 1D transform of a real vector, the output looks like the first row of the matrix above.\n\nSo, the function chooses an operation mode depending on the flags and size of the input array:\n-   If DFT_ROWS is set or the input array has a single row or single column, the function\n    performs a 1D forward or inverse transform of each row of a matrix when DFT_ROWS is set.\n    Otherwise, it performs a 2D transform.\n-   If the input array is real and DFT_INVERSE is not set, the function performs a forward 1D or\n    2D transform:\n    -   When DFT_COMPLEX_OUTPUT is set, the output is a complex matrix of the same size as\n        input.\n    -   When DFT_COMPLEX_OUTPUT is not set, the output is a real matrix of the same size as\n        input. In case of 2D transform, it uses the packed format as shown above. In case of a\n        single 1D transform, it looks like the first row of the matrix above. In case of\n        multiple 1D transforms (when using the DFT_ROWS flag), each row of the output matrix\n        looks like the first row of the matrix above.\n-   If the input array is complex and either DFT_INVERSE or DFT_REAL_OUTPUT are not set, the\n    output is a complex array of the same size as input. The function performs a forward or\n    inverse 1D or 2D transform of the whole input array or each row of the input array\n    independently, depending on the flags DFT_INVERSE and DFT_ROWS.\n-   When DFT_INVERSE is set and the input array is real, or it is complex but DFT_REAL_OUTPUT\n    is set, the output is a real array of the same size as input. The function performs a 1D or 2D\n    inverse transformation of the whole input array or each individual row, depending on the flags\n    DFT_INVERSE and DFT_ROWS.\n\nIf DFT_SCALE is set, the scaling is done after the transformation.\n\nUnlike dct , the function supports arrays of arbitrary size. But only those arrays are processed\nefficiently, whose sizes can be factorized in a product of small prime numbers (2, 3, and 5 in the\ncurrent implementation). Such an efficient DFT size can be calculated using the getOptimalDFTSize\nmethod.\n\nThe sample below illustrates how to calculate a DFT-based convolution of two 2D real arrays:\n@code\n    void convolveDFT(InputArray A, InputArray B, OutputArray C)\n    {\n        // reallocate the output array if needed\n        C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type());\n        Size dftSize;\n        // calculate the size of DFT transform\n        dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1);\n        dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1);\n\n        // allocate temporary buffers and initialize them with 0's\n        Mat tempA(dftSize, A.type(), Scalar::all(0));\n        Mat tempB(dftSize, B.type(), Scalar::all(0));\n\n        // copy A and B to the top-left corners of tempA and tempB, respectively\n        Mat roiA(tempA, Rect(0,0,A.cols,A.rows));\n        A.copyTo(roiA);\n        Mat roiB(tempB, Rect(0,0,B.cols,B.rows));\n        B.copyTo(roiB);\n\n        // now transform the padded A & B in-place;\n        // use \"nonzeroRows\" hint for faster processing\n        dft(tempA, tempA, 0, A.rows);\n        dft(tempB, tempB, 0, B.rows);\n\n        // multiply the spectrums;\n        // the function handles packed spectrum representations well\n        mulSpectrums(tempA, tempB, tempA);\n\n        // transform the product back from the frequency domain.\n        // Even though all the result rows will be non-zero,\n        // you need only the first C.rows of them, and thus you\n        // pass nonzeroRows == C.rows\n        dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows);\n\n        // now copy the result back to C.\n        tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C);\n\n        // all the temporary buffers will be deallocated automatically\n    }\n@endcode\nTo optimize this sample, consider the following approaches:\n-   Since nonzeroRows != 0 is passed to the forward transform calls and since A and B are copied to\n    the top-left corners of tempA and tempB, respectively, it is not necessary to clear the whole\n    tempA and tempB. It is only necessary to clear the tempA.cols - A.cols ( tempB.cols - B.cols)\n    rightmost columns of the matrices.\n-   This DFT-based convolution does not have to be applied to the whole big arrays, especially if B\n    is significantly smaller than A or vice versa. Instead, you can calculate convolution by parts.\n    To do this, you need to split the output array C into multiple tiles. For each tile, estimate\n    which parts of A and B are required to calculate convolution in this tile. If the tiles in C are\n    too small, the speed will decrease a lot because of repeated work. In the ultimate case, when\n    each tile in C is a single pixel, the algorithm becomes equivalent to the naive convolution\n    algorithm. If the tiles are too big, the temporary arrays tempA and tempB become too big and\n    there is also a slowdown because of bad cache locality. So, there is an optimal tile size\n    somewhere in the middle.\n-   If different tiles in C can be calculated in parallel and, thus, the convolution is done by\n    parts, the loop can be threaded.\n\nAll of the above improvements have been implemented in matchTemplate and filter2D . Therefore, by\nusing them, you can get the performance even better than with the above theoretically optimal\nimplementation. Though, those two functions actually calculate cross-correlation, not convolution,\nso you need to \"flip\" the second convolution operand B vertically and horizontally using flip .\n@note\n-   An example using the discrete fourier transform can be found at\n    opencv_source_code/samples/cpp/dft.cpp\n-   (Python) An example using the dft functionality to perform Wiener deconvolution can be found\n    at opencv_source/samples/python/deconvolution.py\n-   (Python) An example rearranging the quadrants of a Fourier image can be found at\n    opencv_source/samples/python/dft.py\n@param src input array that could be real or complex.\n@param dst output array whose size and type depends on the flags .\n@param flags transformation flags, representing a combination of the cv::DftFlags\n@param nonzeroRows when the parameter is not zero, the function assumes that only the first\nnonzeroRows rows of the input array (DFT_INVERSE is not set) or only the first nonzeroRows of the\noutput array (DFT_INVERSE is set) contain non-zeros, thus, the function can handle the rest of the\nrows more efficiently and save some time; this technique is very useful for calculating array\ncross-correlation or convolution using DFT.\n@sa dct , getOptimalDFTSize , mulSpectrums, filter2D , matchTemplate , flip , cartToPolar ,\nmagnitude , phase\n*/\nCV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0);\n\n/** @brief Calculates the inverse Discrete Fourier Transform of a 1D or 2D array.\n\nidft(src, dst, flags) is equivalent to dft(src, dst, flags | DFT_INVERSE) .\n@note None of dft and idft scales the result by default. So, you should pass DFT_SCALE to one of\ndft or idft explicitly to make these transforms mutually inverse.\n@sa dft, dct, idct, mulSpectrums, getOptimalDFTSize\n@param src input floating-point real or complex array.\n@param dst output array whose size and type depend on the flags.\n@param flags operation flags (see dft and cv::DftFlags).\n@param nonzeroRows number of dst rows to process; the rest of the rows have undefined content (see\nthe convolution sample in dft description.\n*/\nCV_EXPORTS_W void idft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0);\n\n/** @brief Performs a forward or inverse discrete Cosine transform of 1D or 2D array.\n\nThe function dct performs a forward or inverse discrete Cosine transform (DCT) of a 1D or 2D\nfloating-point array:\n-   Forward Cosine transform of a 1D vector of N elements:\n    \\f[Y = C^{(N)}  \\cdot X\\f]\n    where\n    \\f[C^{(N)}_{jk}= \\sqrt{\\alpha_j/N} \\cos \\left ( \\frac{\\pi(2k+1)j}{2N} \\right )\\f]\n    and\n    \\f$\\alpha_0=1\\f$, \\f$\\alpha_j=2\\f$ for *j \\> 0*.\n-   Inverse Cosine transform of a 1D vector of N elements:\n    \\f[X =  \\left (C^{(N)} \\right )^{-1}  \\cdot Y =  \\left (C^{(N)} \\right )^T  \\cdot Y\\f]\n    (since \\f$C^{(N)}\\f$ is an orthogonal matrix, \\f$C^{(N)} \\cdot \\left(C^{(N)}\\right)^T = I\\f$ )\n-   Forward 2D Cosine transform of M x N matrix:\n    \\f[Y = C^{(N)}  \\cdot X  \\cdot \\left (C^{(N)} \\right )^T\\f]\n-   Inverse 2D Cosine transform of M x N matrix:\n    \\f[X =  \\left (C^{(N)} \\right )^T  \\cdot X  \\cdot C^{(N)}\\f]\n\nThe function chooses the mode of operation by looking at the flags and size of the input array:\n-   If (flags & DCT_INVERSE) == 0 , the function does a forward 1D or 2D transform. Otherwise, it\n    is an inverse 1D or 2D transform.\n-   If (flags & DCT_ROWS) != 0 , the function performs a 1D transform of each row.\n-   If the array is a single column or a single row, the function performs a 1D transform.\n-   If none of the above is true, the function performs a 2D transform.\n\n@note Currently dct supports even-size arrays (2, 4, 6 ...). For data analysis and approximation, you\ncan pad the array when necessary.\nAlso, the function performance depends very much, and not monotonically, on the array size (see\ngetOptimalDFTSize ). In the current implementation DCT of a vector of size N is calculated via DFT\nof a vector of size N/2 . Thus, the optimal DCT size N1 \\>= N can be calculated as:\n@code\n    size_t getOptimalDCTSize(size_t N) { return 2*getOptimalDFTSize((N+1)/2); }\n    N1 = getOptimalDCTSize(N);\n@endcode\n@param src input floating-point array.\n@param dst output array of the same size and type as src .\n@param flags transformation flags as a combination of cv::DftFlags (DCT_*)\n@sa dft , getOptimalDFTSize , idct\n*/\nCV_EXPORTS_W void dct(InputArray src, OutputArray dst, int flags = 0);\n\n/** @brief Calculates the inverse Discrete Cosine Transform of a 1D or 2D array.\n\nidct(src, dst, flags) is equivalent to dct(src, dst, flags | DCT_INVERSE).\n@param src input floating-point single-channel array.\n@param dst output array of the same size and type as src.\n@param flags operation flags.\n@sa  dct, dft, idft, getOptimalDFTSize\n*/\nCV_EXPORTS_W void idct(InputArray src, OutputArray dst, int flags = 0);\n\n/** @brief Performs the per-element multiplication of two Fourier spectrums.\n\nThe function mulSpectrums performs the per-element multiplication of the two CCS-packed or complex\nmatrices that are results of a real or complex Fourier transform.\n\nThe function, together with dft and idft , may be used to calculate convolution (pass conjB=false )\nor correlation (pass conjB=true ) of two arrays rapidly. When the arrays are complex, they are\nsimply multiplied (per element) with an optional conjugation of the second-array elements. When the\narrays are real, they are assumed to be CCS-packed (see dft for details).\n@param a first input array.\n@param b second input array of the same size and type as src1 .\n@param c output array of the same size and type as src1 .\n@param flags operation flags; currently, the only supported flag is cv::DFT_ROWS, which indicates that\neach row of src1 and src2 is an independent 1D Fourier spectrum. If you do not want to use this flag, then simply add a `0` as value.\n@param conjB optional flag that conjugates the second input array before the multiplication (true)\nor not (false).\n*/\nCV_EXPORTS_W void mulSpectrums(InputArray a, InputArray b, OutputArray c,\n                               int flags, bool conjB = false);\n\n/** @brief Returns the optimal DFT size for a given vector size.\n\nDFT performance is not a monotonic function of a vector size. Therefore, when you calculate\nconvolution of two arrays or perform the spectral analysis of an array, it usually makes sense to\npad the input data with zeros to get a bit larger array that can be transformed much faster than the\noriginal one. Arrays whose size is a power-of-two (2, 4, 8, 16, 32, ...) are the fastest to process.\nThough, the arrays whose size is a product of 2's, 3's, and 5's (for example, 300 = 5\\*5\\*3\\*2\\*2)\nare also processed quite efficiently.\n\nThe function getOptimalDFTSize returns the minimum number N that is greater than or equal to vecsize\nso that the DFT of a vector of size N can be processed efficiently. In the current implementation N\n= 2 ^p^ \\* 3 ^q^ \\* 5 ^r^ for some integer p, q, r.\n\nThe function returns a negative number if vecsize is too large (very close to INT_MAX ).\n\nWhile the function cannot be used directly to estimate the optimal vector size for DCT transform\n(since the current DCT implementation supports only even-size vectors), it can be easily processed\nas getOptimalDFTSize((vecsize+1)/2)\\*2.\n@param vecsize vector size.\n@sa dft , dct , idft , idct , mulSpectrums\n*/\nCV_EXPORTS_W int getOptimalDFTSize(int vecsize);\n\n/** @brief Returns the default random number generator.\n\nThe function theRNG returns the default random number generator. For each thread, there is a\nseparate random number generator, so you can use the function safely in multi-thread environments.\nIf you just need to get a single random number using this generator or initialize an array, you can\nuse randu or randn instead. But if you are going to generate many random numbers inside a loop, it\nis much faster to use this function to retrieve the generator and then use RNG::operator _Tp() .\n@sa RNG, randu, randn\n*/\nCV_EXPORTS RNG& theRNG();\n\n/** @brief Generates a single uniformly-distributed random number or an array of random numbers.\n\nNon-template variant of the function fills the matrix dst with uniformly-distributed\nrandom numbers from the specified range:\n\\f[\\texttt{low} _c  \\leq \\texttt{dst} (I)_c <  \\texttt{high} _c\\f]\n@param dst output array of random numbers; the array must be pre-allocated.\n@param low inclusive lower boundary of the generated random numbers.\n@param high exclusive upper boundary of the generated random numbers.\n@sa RNG, randn, theRNG\n*/\nCV_EXPORTS_W void randu(InputOutputArray dst, InputArray low, InputArray high);\n\n/** @brief Fills the array with normally distributed random numbers.\n\nThe function randn fills the matrix dst with normally distributed random numbers with the specified\nmean vector and the standard deviation matrix. The generated random numbers are clipped to fit the\nvalue range of the output array data type.\n@param dst output array of random numbers; the array must be pre-allocated and have 1 to 4 channels.\n@param mean mean value (expectation) of the generated random numbers.\n@param stddev standard deviation of the generated random numbers; it can be either a vector (in\nwhich case a diagonal standard deviation matrix is assumed) or a square matrix.\n@sa RNG, randu\n*/\nCV_EXPORTS_W void randn(InputOutputArray dst, InputArray mean, InputArray stddev);\n\n/** @brief Shuffles the array elements randomly.\n\nThe function randShuffle shuffles the specified 1D array by randomly choosing pairs of elements and\nswapping them. The number of such swap operations will be dst.rows\\*dst.cols\\*iterFactor .\n@param dst input/output numerical 1D array.\n@param iterFactor scale factor that determines the number of random swap operations (see the details\nbelow).\n@param rng optional random number generator used for shuffling; if it is zero, theRNG () is used\ninstead.\n@sa RNG, sort\n*/\nCV_EXPORTS_W void randShuffle(InputOutputArray dst, double iterFactor = 1., RNG* rng = 0);\n\n/** @brief Principal Component Analysis\n\nThe class is used to calculate a special basis for a set of vectors. The\nbasis will consist of eigenvectors of the covariance matrix calculated\nfrom the input set of vectors. The class %PCA can also transform\nvectors to/from the new coordinate space defined by the basis. Usually,\nin this new coordinate system, each vector from the original set (and\nany linear combination of such vectors) can be quite accurately\napproximated by taking its first few components, corresponding to the\neigenvectors of the largest eigenvalues of the covariance matrix.\nGeometrically it means that you calculate a projection of the vector to\na subspace formed by a few eigenvectors corresponding to the dominant\neigenvalues of the covariance matrix. And usually such a projection is\nvery close to the original vector. So, you can represent the original\nvector from a high-dimensional space with a much shorter vector\nconsisting of the projected vector's coordinates in the subspace. Such a\ntransformation is also known as Karhunen-Loeve Transform, or KLT.\nSee http://en.wikipedia.org/wiki/Principal_component_analysis\n\nThe sample below is the function that takes two matrices. The first\nfunction stores a set of vectors (a row per vector) that is used to\ncalculate PCA. The second function stores another \"test\" set of vectors\n(a row per vector). First, these vectors are compressed with PCA, then\nreconstructed back, and then the reconstruction error norm is computed\nand printed for each vector. :\n\n@code{.cpp}\nusing namespace cv;\n\nPCA compressPCA(const Mat& pcaset, int maxComponents,\n                const Mat& testset, Mat& compressed)\n{\n    PCA pca(pcaset, // pass the data\n            Mat(), // we do not have a pre-computed mean vector,\n                   // so let the PCA engine to compute it\n            PCA::DATA_AS_ROW, // indicate that the vectors\n                                // are stored as matrix rows\n                                // (use PCA::DATA_AS_COL if the vectors are\n                                // the matrix columns)\n            maxComponents // specify, how many principal components to retain\n            );\n    // if there is no test data, just return the computed basis, ready-to-use\n    if( !testset.data )\n        return pca;\n    CV_Assert( testset.cols == pcaset.cols );\n\n    compressed.create(testset.rows, maxComponents, testset.type());\n\n    Mat reconstructed;\n    for( int i = 0; i < testset.rows; i++ )\n    {\n        Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed;\n        // compress the vector, the result will be stored\n        // in the i-th row of the output matrix\n        pca.project(vec, coeffs);\n        // and then reconstruct it\n        pca.backProject(coeffs, reconstructed);\n        // and measure the error\n        printf(\"%d. diff = %g\\n\", i, norm(vec, reconstructed, NORM_L2));\n    }\n    return pca;\n}\n@endcode\n@sa calcCovarMatrix, mulTransposed, SVD, dft, dct\n*/\nclass CV_EXPORTS PCA\n{\npublic:\n    enum Flags { DATA_AS_ROW = 0, //!< indicates that the input samples are stored as matrix rows\n                 DATA_AS_COL = 1, //!< indicates that the input samples are stored as matrix columns\n                 USE_AVG     = 2  //!\n               };\n\n    /** @brief default constructor\n\n    The default constructor initializes an empty %PCA structure. The other\n    constructors initialize the structure and call PCA::operator()().\n    */\n    PCA();\n\n    /** @overload\n    @param data input samples stored as matrix rows or matrix columns.\n    @param mean optional mean value; if the matrix is empty (@c noArray()),\n    the mean is computed from the data.\n    @param flags operation flags; currently the parameter is only used to\n    specify the data layout (PCA::Flags)\n    @param maxComponents maximum number of components that %PCA should\n    retain; by default, all the components are retained.\n    */\n    PCA(InputArray data, InputArray mean, int flags, int maxComponents = 0);\n\n    /** @overload\n    @param data input samples stored as matrix rows or matrix columns.\n    @param mean optional mean value; if the matrix is empty (noArray()),\n    the mean is computed from the data.\n    @param flags operation flags; currently the parameter is only used to\n    specify the data layout (PCA::Flags)\n    @param retainedVariance Percentage of variance that PCA should retain.\n    Using this parameter will let the PCA decided how many components to\n    retain but it will always keep at least 2.\n    */\n    PCA(InputArray data, InputArray mean, int flags, double retainedVariance);\n\n    /** @brief performs %PCA\n\n    The operator performs %PCA of the supplied dataset. It is safe to reuse\n    the same PCA structure for multiple datasets. That is, if the structure\n    has been previously used with another dataset, the existing internal\n    data is reclaimed and the new eigenvalues, @ref eigenvectors , and @ref\n    mean are allocated and computed.\n\n    The computed eigenvalues are sorted from the largest to the smallest and\n    the corresponding eigenvectors are stored as eigenvectors rows.\n\n    @param data input samples stored as the matrix rows or as the matrix\n    columns.\n    @param mean optional mean value; if the matrix is empty (noArray()),\n    the mean is computed from the data.\n    @param flags operation flags; currently the parameter is only used to\n    specify the data layout. (Flags)\n    @param maxComponents maximum number of components that PCA should\n    retain; by default, all the components are retained.\n    */\n    PCA& operator()(InputArray data, InputArray mean, int flags, int maxComponents = 0);\n\n    /** @overload\n    @param data input samples stored as the matrix rows or as the matrix\n    columns.\n    @param mean optional mean value; if the matrix is empty (noArray()),\n    the mean is computed from the data.\n    @param flags operation flags; currently the parameter is only used to\n    specify the data layout. (PCA::Flags)\n    @param retainedVariance Percentage of variance that %PCA should retain.\n    Using this parameter will let the %PCA decided how many components to\n    retain but it will always keep at least 2.\n     */\n    PCA& operator()(InputArray data, InputArray mean, int flags, double retainedVariance);\n\n    /** @brief Projects vector(s) to the principal component subspace.\n\n    The methods project one or more vectors to the principal component\n    subspace, where each vector projection is represented by coefficients in\n    the principal component basis. The first form of the method returns the\n    matrix that the second form writes to the result. So the first form can\n    be used as a part of expression while the second form can be more\n    efficient in a processing loop.\n    @param vec input vector(s); must have the same dimensionality and the\n    same layout as the input data used at %PCA phase, that is, if\n    DATA_AS_ROW are specified, then `vec.cols==data.cols`\n    (vector dimensionality) and `vec.rows` is the number of vectors to\n    project, and the same is true for the PCA::DATA_AS_COL case.\n    */\n    Mat project(InputArray vec) const;\n\n    /** @overload\n    @param vec input vector(s); must have the same dimensionality and the\n    same layout as the input data used at PCA phase, that is, if\n    DATA_AS_ROW are specified, then `vec.cols==data.cols`\n    (vector dimensionality) and `vec.rows` is the number of vectors to\n    project, and the same is true for the PCA::DATA_AS_COL case.\n    @param result output vectors; in case of PCA::DATA_AS_COL, the\n    output matrix has as many columns as the number of input vectors, this\n    means that `result.cols==vec.cols` and the number of rows match the\n    number of principal components (for example, `maxComponents` parameter\n    passed to the constructor).\n     */\n    void project(InputArray vec, OutputArray result) const;\n\n    /** @brief Reconstructs vectors from their PC projections.\n\n    The methods are inverse operations to PCA::project. They take PC\n    coordinates of projected vectors and reconstruct the original vectors.\n    Unless all the principal components have been retained, the\n    reconstructed vectors are different from the originals. But typically,\n    the difference is small if the number of components is large enough (but\n    still much smaller than the original vector dimensionality). As a\n    result, PCA is used.\n    @param vec coordinates of the vectors in the principal component\n    subspace, the layout and size are the same as of PCA::project output\n    vectors.\n     */\n    Mat backProject(InputArray vec) const;\n\n    /** @overload\n    @param vec coordinates of the vectors in the principal component\n    subspace, the layout and size are the same as of PCA::project output\n    vectors.\n    @param result reconstructed vectors; the layout and size are the same as\n    of PCA::project input vectors.\n     */\n    void backProject(InputArray vec, OutputArray result) const;\n\n    /** @brief write and load PCA matrix\n\n*/\n    void write(FileStorage& fs ) const;\n    void read(const FileNode& fs);\n\n    Mat eigenvectors; //!< eigenvectors of the covariation matrix\n    Mat eigenvalues; //!< eigenvalues of the covariation matrix\n    Mat mean; //!< mean value subtracted before the projection and added after the back projection\n};\n\n/** @example pca.cpp\n  An example using %PCA for dimensionality reduction while maintaining an amount of variance\n */\n\n/**\n   @brief Linear Discriminant Analysis\n   @todo document this class\n */\nclass CV_EXPORTS LDA\n{\npublic:\n    /** @brief constructor\n    Initializes a LDA with num_components (default 0).\n    */\n    explicit LDA(int num_components = 0);\n\n    /** Initializes and performs a Discriminant Analysis with Fisher's\n     Optimization Criterion on given data in src and corresponding labels\n     in labels. If 0 (or less) number of components are given, they are\n     automatically determined for given data in computation.\n    */\n    LDA(InputArrayOfArrays src, InputArray labels, int num_components = 0);\n\n    /** Serializes this object to a given filename.\n      */\n    void save(const String& filename) const;\n\n    /** Deserializes this object from a given filename.\n      */\n    void load(const String& filename);\n\n    /** Serializes this object to a given cv::FileStorage.\n      */\n    void save(FileStorage& fs) const;\n\n    /** Deserializes this object from a given cv::FileStorage.\n      */\n    void load(const FileStorage& node);\n\n    /** destructor\n      */\n    ~LDA();\n\n    /** Compute the discriminants for data in src (row aligned) and labels.\n      */\n    void compute(InputArrayOfArrays src, InputArray labels);\n\n    /** Projects samples into the LDA subspace.\n        src may be one or more row aligned samples.\n      */\n    Mat project(InputArray src);\n\n    /** Reconstructs projections from the LDA subspace.\n        src may be one or more row aligned projections.\n      */\n    Mat reconstruct(InputArray src);\n\n    /** Returns the eigenvectors of this LDA.\n      */\n    Mat eigenvectors() const { return _eigenvectors; }\n\n    /** Returns the eigenvalues of this LDA.\n      */\n    Mat eigenvalues() const { return _eigenvalues; }\n\n    static Mat subspaceProject(InputArray W, InputArray mean, InputArray src);\n    static Mat subspaceReconstruct(InputArray W, InputArray mean, InputArray src);\n\nprotected:\n    bool _dataAsRow; // unused, but needed for 3.0 ABI compatibility.\n    int _num_components;\n    Mat _eigenvectors;\n    Mat _eigenvalues;\n    void lda(InputArrayOfArrays src, InputArray labels);\n};\n\n/** @brief Singular Value Decomposition\n\nClass for computing Singular Value Decomposition of a floating-point\nmatrix. The Singular Value Decomposition is used to solve least-square\nproblems, under-determined linear systems, invert matrices, compute\ncondition numbers, and so on.\n\nIf you want to compute a condition number of a matrix or an absolute value of\nits determinant, you do not need `u` and `vt`. You can pass\nflags=SVD::NO_UV|... . Another flag SVD::FULL_UV indicates that full-size u\nand vt must be computed, which is not necessary most of the time.\n\n@sa invert, solve, eigen, determinant\n*/\nclass CV_EXPORTS SVD\n{\npublic:\n    enum Flags {\n        /** allow the algorithm to modify the decomposed matrix; it can save space and speed up\n            processing. currently ignored. */\n        MODIFY_A = 1,\n        /** indicates that only a vector of singular values `w` is to be processed, while u and vt\n            will be set to empty matrices */\n        NO_UV    = 2,\n        /** when the matrix is not square, by default the algorithm produces u and vt matrices of\n            sufficiently large size for the further A reconstruction; if, however, FULL_UV flag is\n            specified, u and vt will be full-size square orthogonal matrices.*/\n        FULL_UV  = 4\n    };\n\n    /** @brief the default constructor\n\n    initializes an empty SVD structure\n      */\n    SVD();\n\n    /** @overload\n    initializes an empty SVD structure and then calls SVD::operator()\n    @param src decomposed matrix.\n    @param flags operation flags (SVD::Flags)\n      */\n    SVD( InputArray src, int flags = 0 );\n\n    /** @brief the operator that performs SVD. The previously allocated u, w and vt are released.\n\n    The operator performs the singular value decomposition of the supplied\n    matrix. The u,`vt` , and the vector of singular values w are stored in\n    the structure. The same SVD structure can be reused many times with\n    different matrices. Each time, if needed, the previous u,`vt` , and w\n    are reclaimed and the new matrices are created, which is all handled by\n    Mat::create.\n    @param src decomposed matrix.\n    @param flags operation flags (SVD::Flags)\n      */\n    SVD& operator ()( InputArray src, int flags = 0 );\n\n    /** @brief decomposes matrix and stores the results to user-provided matrices\n\n    The methods/functions perform SVD of matrix. Unlike SVD::SVD constructor\n    and SVD::operator(), they store the results to the user-provided\n    matrices:\n\n    @code{.cpp}\n    Mat A, w, u, vt;\n    SVD::compute(A, w, u, vt);\n    @endcode\n\n    @param src decomposed matrix\n    @param w calculated singular values\n    @param u calculated left singular vectors\n    @param vt transposed matrix of right singular values\n    @param flags operation flags - see SVD::SVD.\n      */\n    static void compute( InputArray src, OutputArray w,\n                         OutputArray u, OutputArray vt, int flags = 0 );\n\n    /** @overload\n    computes singular values of a matrix\n    @param src decomposed matrix\n    @param w calculated singular values\n    @param flags operation flags - see SVD::Flags.\n      */\n    static void compute( InputArray src, OutputArray w, int flags = 0 );\n\n    /** @brief performs back substitution\n      */\n    static void backSubst( InputArray w, InputArray u,\n                           InputArray vt, InputArray rhs,\n                           OutputArray dst );\n\n    /** @brief solves an under-determined singular linear system\n\n    The method finds a unit-length solution x of a singular linear system\n    A\\*x = 0. Depending on the rank of A, there can be no solutions, a\n    single solution or an infinite number of solutions. In general, the\n    algorithm solves the following problem:\n    \\f[dst =  \\arg \\min _{x:  \\| x \\| =1}  \\| src  \\cdot x  \\|\\f]\n    @param src left-hand-side matrix.\n    @param dst found solution.\n      */\n    static void solveZ( InputArray src, OutputArray dst );\n\n    /** @brief performs a singular value back substitution.\n\n    The method calculates a back substitution for the specified right-hand\n    side:\n\n    \\f[\\texttt{x} =  \\texttt{vt} ^T  \\cdot diag( \\texttt{w} )^{-1}  \\cdot \\texttt{u} ^T  \\cdot \\texttt{rhs} \\sim \\texttt{A} ^{-1}  \\cdot \\texttt{rhs}\\f]\n\n    Using this technique you can either get a very accurate solution of the\n    convenient linear system, or the best (in the least-squares terms)\n    pseudo-solution of an overdetermined linear system.\n\n    @param rhs right-hand side of a linear system (u\\*w\\*v')\\*dst = rhs to\n    be solved, where A has been previously decomposed.\n\n    @param dst found solution of the system.\n\n    @note Explicit SVD with the further back substitution only makes sense\n    if you need to solve many linear systems with the same left-hand side\n    (for example, src ). If all you need is to solve a single system\n    (possibly with multiple rhs immediately available), simply call solve\n    add pass DECOMP_SVD there. It does absolutely the same thing.\n      */\n    void backSubst( InputArray rhs, OutputArray dst ) const;\n\n    /** @todo document */\n    template<typename _Tp, int m, int n, int nm> static\n    void compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt );\n\n    /** @todo document */\n    template<typename _Tp, int m, int n, int nm> static\n    void compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w );\n\n    /** @todo document */\n    template<typename _Tp, int m, int n, int nm, int nb> static\n    void backSubst( const Matx<_Tp, nm, 1>& w, const Matx<_Tp, m, nm>& u, const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs, Matx<_Tp, n, nb>& dst );\n\n    Mat u, w, vt;\n};\n\n/** @brief Random Number Generator\n\nRandom number generator. It encapsulates the state (currently, a 64-bit\ninteger) and has methods to return scalar random values and to fill\narrays with random values. Currently it supports uniform and Gaussian\n(normal) distributions. The generator uses Multiply-With-Carry\nalgorithm, introduced by G. Marsaglia (\n<http://en.wikipedia.org/wiki/Multiply-with-carry> ).\nGaussian-distribution random numbers are generated using the Ziggurat\nalgorithm ( <http://en.wikipedia.org/wiki/Ziggurat_algorithm> ),\nintroduced by G. Marsaglia and W. W. Tsang.\n*/\nclass CV_EXPORTS RNG\n{\npublic:\n    enum { UNIFORM = 0,\n           NORMAL  = 1\n         };\n\n    /** @brief constructor\n\n    These are the RNG constructors. The first form sets the state to some\n    pre-defined value, equal to 2\\*\\*32-1 in the current implementation. The\n    second form sets the state to the specified value. If you passed state=0\n    , the constructor uses the above default value instead to avoid the\n    singular random number sequence, consisting of all zeros.\n    */\n    RNG();\n    /** @overload\n    @param state 64-bit value used to initialize the RNG.\n    */\n    RNG(uint64 state);\n    /**The method updates the state using the MWC algorithm and returns the\n    next 32-bit random number.*/\n    unsigned next();\n\n    /**Each of the methods updates the state using the MWC algorithm and\n    returns the next random number of the specified type. In case of integer\n    types, the returned number is from the available value range for the\n    specified type. In case of floating-point types, the returned value is\n    from [0,1) range.\n    */\n    operator uchar();\n    /** @overload */\n    operator schar();\n    /** @overload */\n    operator ushort();\n    /** @overload */\n    operator short();\n    /** @overload */\n    operator unsigned();\n    /** @overload */\n    operator int();\n    /** @overload */\n    operator float();\n    /** @overload */\n    operator double();\n\n    /** @brief returns a random integer sampled uniformly from [0, N).\n\n    The methods transform the state using the MWC algorithm and return the\n    next random number. The first form is equivalent to RNG::next . The\n    second form returns the random number modulo N , which means that the\n    result is in the range [0, N) .\n    */\n    unsigned operator ()();\n    /** @overload\n    @param N upper non-inclusive boundary of the returned random number.\n    */\n    unsigned operator ()(unsigned N);\n\n    /** @brief returns uniformly distributed integer random number from [a,b) range\n\n    The methods transform the state using the MWC algorithm and return the\n    next uniformly-distributed random number of the specified type, deduced\n    from the input parameter type, from the range [a, b) . There is a nuance\n    illustrated by the following sample:\n\n    @code{.cpp}\n    RNG rng;\n\n    // always produces 0\n    double a = rng.uniform(0, 1);\n\n    // produces double from [0, 1)\n    double a1 = rng.uniform((double)0, (double)1);\n\n    // produces float from [0, 1)\n    double b = rng.uniform(0.f, 1.f);\n\n    // produces double from [0, 1)\n    double c = rng.uniform(0., 1.);\n\n    // may cause compiler error because of ambiguity:\n    //  RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0, 0.99999)?\n    double d = rng.uniform(0, 0.999999);\n    @endcode\n\n    The compiler does not take into account the type of the variable to\n    which you assign the result of RNG::uniform . The only thing that\n    matters to the compiler is the type of a and b parameters. So, if you\n    want a floating-point random number, but the range boundaries are\n    integer numbers, either put dots in the end, if they are constants, or\n    use explicit type cast operators, as in the a1 initialization above.\n    @param a lower inclusive boundary of the returned random numbers.\n    @param b upper non-inclusive boundary of the returned random numbers.\n      */\n    int uniform(int a, int b);\n    /** @overload */\n    float uniform(float a, float b);\n    /** @overload */\n    double uniform(double a, double b);\n\n    /** @brief Fills arrays with random numbers.\n\n    @param mat 2D or N-dimensional matrix; currently matrices with more than\n    4 channels are not supported by the methods, use Mat::reshape as a\n    possible workaround.\n    @param distType distribution type, RNG::UNIFORM or RNG::NORMAL.\n    @param a first distribution parameter; in case of the uniform\n    distribution, this is an inclusive lower boundary, in case of the normal\n    distribution, this is a mean value.\n    @param b second distribution parameter; in case of the uniform\n    distribution, this is a non-inclusive upper boundary, in case of the\n    normal distribution, this is a standard deviation (diagonal of the\n    standard deviation matrix or the full standard deviation matrix).\n    @param saturateRange pre-saturation flag; for uniform distribution only;\n    if true, the method will first convert a and b to the acceptable value\n    range (according to the mat datatype) and then will generate uniformly\n    distributed random numbers within the range [saturate(a), saturate(b)),\n    if saturateRange=false, the method will generate uniformly distributed\n    random numbers in the original range [a, b) and then will saturate them,\n    it means, for example, that\n    <tt>theRNG().fill(mat_8u, RNG::UNIFORM, -DBL_MAX, DBL_MAX)</tt> will likely\n    produce array mostly filled with 0's and 255's, since the range (0, 255)\n    is significantly smaller than [-DBL_MAX, DBL_MAX).\n\n    Each of the methods fills the matrix with the random values from the\n    specified distribution. As the new numbers are generated, the RNG state\n    is updated accordingly. In case of multiple-channel images, every\n    channel is filled independently, which means that RNG cannot generate\n    samples from the multi-dimensional Gaussian distribution with\n    non-diagonal covariance matrix directly. To do that, the method\n    generates samples from multi-dimensional standard Gaussian distribution\n    with zero mean and identity covariation matrix, and then transforms them\n    using transform to get samples from the specified Gaussian distribution.\n    */\n    void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange = false );\n\n    /** @brief Returns the next random number sampled from the Gaussian distribution\n    @param sigma standard deviation of the distribution.\n\n    The method transforms the state using the MWC algorithm and returns the\n    next random number from the Gaussian distribution N(0,sigma) . That is,\n    the mean value of the returned random numbers is zero and the standard\n    deviation is the specified sigma .\n    */\n    double gaussian(double sigma);\n\n    uint64 state;\n};\n\n/** @brief Mersenne Twister random number generator\n\nInspired by http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c\n@todo document\n */\nclass CV_EXPORTS RNG_MT19937\n{\npublic:\n    RNG_MT19937();\n    RNG_MT19937(unsigned s);\n    void seed(unsigned s);\n\n    unsigned next();\n\n    operator int();\n    operator unsigned();\n    operator float();\n    operator double();\n\n    unsigned operator ()(unsigned N);\n    unsigned operator ()();\n\n    /** @brief returns uniformly distributed integer random number from [a,b) range\n\n*/\n    int uniform(int a, int b);\n    /** @brief returns uniformly distributed floating-point random number from [a,b) range\n\n*/\n    float uniform(float a, float b);\n    /** @brief returns uniformly distributed double-precision floating-point random number from [a,b) range\n\n*/\n    double uniform(double a, double b);\n\nprivate:\n    enum PeriodParameters {N = 624, M = 397};\n    unsigned state[N];\n    int mti;\n};\n\n//! @} core_array\n\n//! @addtogroup core_cluster\n//!  @{\n\n/** @example kmeans.cpp\n  An example on K-means clustering\n*/\n\n/** @brief Finds centers of clusters and groups input samples around the clusters.\n\nThe function kmeans implements a k-means algorithm that finds the centers of cluster_count clusters\nand groups the input samples around the clusters. As an output, \\f$\\texttt{labels}_i\\f$ contains a\n0-based cluster index for the sample stored in the \\f$i^{th}\\f$ row of the samples matrix.\n\n@note\n-   (Python) An example on K-means clustering can be found at\n    opencv_source_code/samples/python/kmeans.py\n@param data Data for clustering. An array of N-Dimensional points with float coordinates is needed.\nExamples of this array can be:\n-   Mat points(count, 2, CV_32F);\n-   Mat points(count, 1, CV_32FC2);\n-   Mat points(1, count, CV_32FC2);\n-   std::vector\\<cv::Point2f\\> points(sampleCount);\n@param K Number of clusters to split the set by.\n@param bestLabels Input/output integer array that stores the cluster indices for every sample.\n@param criteria The algorithm termination criteria, that is, the maximum number of iterations and/or\nthe desired accuracy. The accuracy is specified as criteria.epsilon. As soon as each of the cluster\ncenters moves by less than criteria.epsilon on some iteration, the algorithm stops.\n@param attempts Flag to specify the number of times the algorithm is executed using different\ninitial labellings. The algorithm returns the labels that yield the best compactness (see the last\nfunction parameter).\n@param flags Flag that can take values of cv::KmeansFlags\n@param centers Output matrix of the cluster centers, one row per each cluster center.\n@return The function returns the compactness measure that is computed as\n\\f[\\sum _i  \\| \\texttt{samples} _i -  \\texttt{centers} _{ \\texttt{labels} _i} \\| ^2\\f]\nafter every attempt. The best (minimum) value is chosen and the corresponding labels and the\ncompactness value are returned by the function. Basically, you can use only the core of the\nfunction, set the number of attempts to 1, initialize labels each time using a custom algorithm,\npass them with the ( flags = KMEANS_USE_INITIAL_LABELS ) flag, and then choose the best\n(most-compact) clustering.\n*/\nCV_EXPORTS_W double kmeans( InputArray data, int K, InputOutputArray bestLabels,\n                            TermCriteria criteria, int attempts,\n                            int flags, OutputArray centers = noArray() );\n\n//! @} core_cluster\n\n//! @addtogroup core_basic\n//! @{\n\n/////////////////////////////// Formatted output of cv::Mat ///////////////////////////\n\n/** @todo document */\nclass CV_EXPORTS Formatted\n{\npublic:\n    virtual const char* next() = 0;\n    virtual void reset() = 0;\n    virtual ~Formatted();\n};\n\n/** @todo document */\nclass CV_EXPORTS Formatter\n{\npublic:\n    enum { FMT_DEFAULT = 0,\n           FMT_MATLAB  = 1,\n           FMT_CSV     = 2,\n           FMT_PYTHON  = 3,\n           FMT_NUMPY   = 4,\n           FMT_C       = 5\n         };\n\n    virtual ~Formatter();\n\n    virtual Ptr<Formatted> format(const Mat& mtx) const = 0;\n\n    virtual void set32fPrecision(int p = 8) = 0;\n    virtual void set64fPrecision(int p = 16) = 0;\n    virtual void setMultiline(bool ml = true) = 0;\n\n    static Ptr<Formatter> get(int fmt = FMT_DEFAULT);\n\n};\n\nstatic inline\nString& operator << (String& out, Ptr<Formatted> fmtd)\n{\n    fmtd->reset();\n    for(const char* str = fmtd->next(); str; str = fmtd->next())\n        out += cv::String(str);\n    return out;\n}\n\nstatic inline\nString& operator << (String& out, const Mat& mtx)\n{\n    return out << Formatter::get()->format(mtx);\n}\n\n//////////////////////////////////////// Algorithm ////////////////////////////////////\n\nclass CV_EXPORTS Algorithm;\n\ntemplate<typename _Tp> struct ParamType {};\n\n\n/** @brief This is a base class for all more or less complex algorithms in OpenCV\n\nespecially for classes of algorithms, for which there can be multiple implementations. The examples\nare stereo correspondence (for which there are algorithms like block matching, semi-global block\nmatching, graph-cut etc.), background subtraction (which can be done using mixture-of-gaussians\nmodels, codebook-based algorithm etc.), optical flow (block matching, Lucas-Kanade, Horn-Schunck\netc.).\n\nHere is example of SIFT use in your application via Algorithm interface:\n@code\n    #include \"opencv2/opencv.hpp\"\n    #include \"opencv2/xfeatures2d.hpp\"\n    using namespace cv::xfeatures2d;\n\n    Ptr<Feature2D> sift = SIFT::create();\n    FileStorage fs(\"sift_params.xml\", FileStorage::READ);\n    if( fs.isOpened() ) // if we have file with parameters, read them\n    {\n        sift->read(fs[\"sift_params\"]);\n        fs.release();\n    }\n    else // else modify the parameters and store them; user can later edit the file to use different parameters\n    {\n        sift->setContrastThreshold(0.01f); // lower the contrast threshold, compared to the default value\n        {\n            WriteStructContext ws(fs, \"sift_params\", CV_NODE_MAP);\n            sift->write(fs);\n        }\n    }\n    Mat image = imread(\"myimage.png\", 0), descriptors;\n    vector<KeyPoint> keypoints;\n    sift->detectAndCompute(image, noArray(), keypoints, descriptors);\n@endcode\n */\nclass CV_EXPORTS_W Algorithm\n{\npublic:\n    Algorithm();\n    virtual ~Algorithm();\n\n    /** @brief Clears the algorithm state\n    */\n    CV_WRAP virtual void clear() {}\n\n    /** @brief Stores algorithm parameters in a file storage\n    */\n    virtual void write(FileStorage& fs) const { (void)fs; }\n\n    /** @brief Reads algorithm parameters from a file storage\n    */\n    virtual void read(const FileNode& fn) { (void)fn; }\n\n    /** @brief Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read\n     */\n    virtual bool empty() const { return false; }\n\n    /** @brief Reads algorithm from the file node\n\n     This is static template method of Algorithm. It's usage is following (in the case of SVM):\n     @code\n     Ptr<SVM> svm = Algorithm::read<SVM>(fn);\n     @endcode\n     In order to make this method work, the derived class must overwrite Algorithm::read(const\n     FileNode& fn) and also have static create() method without parameters\n     (or with all the optional parameters)\n     */\n    template<typename _Tp> static Ptr<_Tp> read(const FileNode& fn)\n    {\n        Ptr<_Tp> obj = _Tp::create();\n        obj->read(fn);\n        return !obj->empty() ? obj : Ptr<_Tp>();\n    }\n\n    /** @brief Loads algorithm from the file\n\n     @param filename Name of the file to read.\n     @param objname The optional name of the node to read (if empty, the first top-level node will be used)\n\n     This is static template method of Algorithm. It's usage is following (in the case of SVM):\n     @code\n     Ptr<SVM> svm = Algorithm::load<SVM>(\"my_svm_model.xml\");\n     @endcode\n     In order to make this method work, the derived class must overwrite Algorithm::read(const\n     FileNode& fn).\n     */\n    template<typename _Tp> static Ptr<_Tp> load(const String& filename, const String& objname=String())\n    {\n        FileStorage fs(filename, FileStorage::READ);\n        FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname];\n        Ptr<_Tp> obj = _Tp::create();\n        obj->read(fn);\n        return !obj->empty() ? obj : Ptr<_Tp>();\n    }\n\n    /** @brief Loads algorithm from a String\n\n     @param strModel The string variable containing the model you want to load.\n     @param objname The optional name of the node to read (if empty, the first top-level node will be used)\n\n     This is static template method of Algorithm. It's usage is following (in the case of SVM):\n     @code\n     Ptr<SVM> svm = Algorithm::loadFromString<SVM>(myStringModel);\n     @endcode\n     */\n    template<typename _Tp> static Ptr<_Tp> loadFromString(const String& strModel, const String& objname=String())\n    {\n        FileStorage fs(strModel, FileStorage::READ + FileStorage::MEMORY);\n        FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname];\n        Ptr<_Tp> obj = _Tp::create();\n        obj->read(fn);\n        return !obj->empty() ? obj : Ptr<_Tp>();\n    }\n\n    /** Saves the algorithm to a file.\n     In order to make this method work, the derived class must implement Algorithm::write(FileStorage& fs). */\n    CV_WRAP virtual void save(const String& filename) const;\n\n    /** Returns the algorithm string identifier.\n     This string is used as top level xml/yml node tag when the object is saved to a file or string. */\n    CV_WRAP virtual String getDefaultName() const;\n};\n\nstruct Param {\n    enum { INT=0, BOOLEAN=1, REAL=2, STRING=3, MAT=4, MAT_VECTOR=5, ALGORITHM=6, FLOAT=7,\n           UNSIGNED_INT=8, UINT64=9, UCHAR=11 };\n};\n\n\n\ntemplate<> struct ParamType<bool>\n{\n    typedef bool const_param_type;\n    typedef bool member_type;\n\n    enum { type = Param::BOOLEAN };\n};\n\ntemplate<> struct ParamType<int>\n{\n    typedef int const_param_type;\n    typedef int member_type;\n\n    enum { type = Param::INT };\n};\n\ntemplate<> struct ParamType<double>\n{\n    typedef double const_param_type;\n    typedef double member_type;\n\n    enum { type = Param::REAL };\n};\n\ntemplate<> struct ParamType<String>\n{\n    typedef const String& const_param_type;\n    typedef String member_type;\n\n    enum { type = Param::STRING };\n};\n\ntemplate<> struct ParamType<Mat>\n{\n    typedef const Mat& const_param_type;\n    typedef Mat member_type;\n\n    enum { type = Param::MAT };\n};\n\ntemplate<> struct ParamType<std::vector<Mat> >\n{\n    typedef const std::vector<Mat>& const_param_type;\n    typedef std::vector<Mat> member_type;\n\n    enum { type = Param::MAT_VECTOR };\n};\n\ntemplate<> struct ParamType<Algorithm>\n{\n    typedef const Ptr<Algorithm>& const_param_type;\n    typedef Ptr<Algorithm> member_type;\n\n    enum { type = Param::ALGORITHM };\n};\n\ntemplate<> struct ParamType<float>\n{\n    typedef float const_param_type;\n    typedef float member_type;\n\n    enum { type = Param::FLOAT };\n};\n\ntemplate<> struct ParamType<unsigned>\n{\n    typedef unsigned const_param_type;\n    typedef unsigned member_type;\n\n    enum { type = Param::UNSIGNED_INT };\n};\n\ntemplate<> struct ParamType<uint64>\n{\n    typedef uint64 const_param_type;\n    typedef uint64 member_type;\n\n    enum { type = Param::UINT64 };\n};\n\ntemplate<> struct ParamType<uchar>\n{\n    typedef uchar const_param_type;\n    typedef uchar member_type;\n\n    enum { type = Param::UCHAR };\n};\n\n//! @} core_basic\n\n} //namespace cv\n\n#include \"opencv2/core/operations.hpp\"\n#include \"opencv2/core/cvstd.inl.hpp\"\n#include \"opencv2/core/utility.hpp\"\n#include \"opencv2/core/optim.hpp\"\n\n#endif /*__OPENCV_CORE_HPP__*/\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/cvconfig.h",
    "content": "/* OpenCV compiled as static or dynamic libs */\n#define BUILD_SHARED_LIBS\n\n/* Compile for 'real' NVIDIA GPU architectures */\n#define CUDA_ARCH_BIN \"\"\n\n/* Create PTX or BIN for 1.0 compute capability */\n/* #undef CUDA_ARCH_BIN_OR_PTX_10 */\n\n/* NVIDIA GPU features are used */\n#define CUDA_ARCH_FEATURES \"\"\n\n/* Compile for 'virtual' NVIDIA PTX architectures */\n#define CUDA_ARCH_PTX \"\"\n\n/* AVFoundation video libraries */\n/* #undef HAVE_AVFOUNDATION */\n\n/* V4L capturing support */\n/* #undef HAVE_CAMV4L */\n\n/* V4L2 capturing support */\n/* #undef HAVE_CAMV4L2 */\n\n/* Carbon windowing environment */\n/* #undef HAVE_CARBON */\n\n/* AMD's Basic Linear Algebra Subprograms Library*/\n#define HAVE_CLAMDBLAS\n\n/* AMD's OpenCL Fast Fourier Transform Library*/\n#define HAVE_CLAMDFFT\n\n/* Clp support */\n/* #undef HAVE_CLP */\n\n/* Cocoa API */\n/* #undef HAVE_COCOA */\n\n/* C= */\n/* #undef HAVE_CSTRIPES */\n\n/* NVidia Cuda Basic Linear Algebra Subprograms (BLAS) API*/\n/* #undef HAVE_CUBLAS */\n\n/* NVidia Cuda Runtime API*/\n/* #undef HAVE_CUDA */\n\n/* NVidia Cuda Fast Fourier Transform (FFT) API*/\n/* #undef HAVE_CUFFT */\n\n/* IEEE1394 capturing support */\n/* #undef HAVE_DC1394 */\n\n/* IEEE1394 capturing support - libdc1394 v2.x */\n/* #undef HAVE_DC1394_2 */\n\n/* DirectX */\n#define HAVE_DIRECTX\n#define HAVE_DIRECTX_NV12\n#define HAVE_D3D11\n#define HAVE_D3D10\n#define HAVE_D3D9\n\n/* DirectShow Video Capture library */\n#define HAVE_DSHOW\n\n/* Eigen Matrix & Linear Algebra Library */\n/* #undef HAVE_EIGEN */\n\n/* FFMpeg video library */\n#define HAVE_FFMPEG\n\n/* ffmpeg's libswscale */\n#define HAVE_FFMPEG_SWSCALE\n\n/* ffmpeg in Gentoo */\n#define HAVE_GENTOO_FFMPEG\n\n/* Geospatial Data Abstraction Library */\n/* #undef HAVE_GDAL */\n\n/* GStreamer multimedia framework */\n/* #undef HAVE_GSTREAMER */\n\n/* GTK+ 2.0 Thread support */\n/* #undef HAVE_GTHREAD */\n\n/* GTK+ 2.x toolkit */\n/* #undef HAVE_GTK */\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n/* #undef HAVE_INTTYPES_H */\n\n/* Intel Perceptual Computing SDK library */\n/* #undef HAVE_INTELPERC */\n\n/* Intel Integrated Performance Primitives */\n#define HAVE_IPP\n#define HAVE_IPP_ICV_ONLY\n\n/* Intel IPP Async */\n/* #undef HAVE_IPP_A */\n\n/* JPEG-2000 codec */\n#define HAVE_JASPER\n\n/* IJG JPEG codec */\n#define HAVE_JPEG\n\n/* libpng/png.h needs to be included */\n/* #undef HAVE_LIBPNG_PNG_H */\n\n/* V4L/V4L2 capturing support via libv4l */\n/* #undef HAVE_LIBV4L */\n\n/* Microsoft Media Foundation Capture library */\n/* #undef HAVE_MSMF */\n\n/* NVidia Video Decoding API*/\n/* #undef HAVE_NVCUVID */\n\n/* OpenCL Support */\n#define HAVE_OPENCL\n/* #undef HAVE_OPENCL_STATIC */\n/* #undef HAVE_OPENCL_SVM */\n\n/* OpenEXR codec */\n#define HAVE_OPENEXR\n\n/* OpenGL support*/\n/* #undef HAVE_OPENGL */\n\n/* OpenNI library */\n/* #undef HAVE_OPENNI */\n\n/* OpenNI library */\n/* #undef HAVE_OPENNI2 */\n\n/* PNG codec */\n#define HAVE_PNG\n\n/* Posix threads (pthreads) */\n/* #undef HAVE_PTHREADS */\n\n/* parallel_for with pthreads */\n/* #undef HAVE_PTHREADS_PF */\n\n/* Qt support */\n/* #undef HAVE_QT */\n\n/* Qt OpenGL support */\n/* #undef HAVE_QT_OPENGL */\n\n/* QuickTime video libraries */\n/* #undef HAVE_QUICKTIME */\n\n/* QTKit video libraries */\n/* #undef HAVE_QTKIT */\n\n/* Intel Threading Building Blocks */\n/* #undef HAVE_TBB */\n\n/* TIFF codec */\n#define HAVE_TIFF\n\n/* Unicap video capture library */\n/* #undef HAVE_UNICAP */\n\n/* Video for Windows support */\n#define HAVE_VFW\n\n/* V4L2 capturing support in videoio.h */\n/* #undef HAVE_VIDEOIO */\n\n/* Win32 UI */\n#define HAVE_WIN32UI\n\n/* XIMEA camera support */\n/* #undef HAVE_XIMEA */\n\n/* Xine video library */\n/* #undef HAVE_XINE */\n\n/* Define if your processor stores words with the most significant byte\n   first (like Motorola and SPARC, unlike Intel and VAX). */\n/* #undef WORDS_BIGENDIAN */\n\n/* gPhoto2 library */\n/* #undef HAVE_GPHOTO2 */\n\n/* VA library (libva) */\n/* #undef HAVE_VA */\n\n/* Intel VA-API/OpenCL */\n/* #undef HAVE_VA_INTEL */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/features2d/features2d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/features2d.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/features2d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_FEATURES_2D_HPP__\n#define __OPENCV_FEATURES_2D_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/flann/miniflann.hpp\"\n\n/**\n  @defgroup features2d 2D Features Framework\n  @{\n    @defgroup features2d_main Feature Detection and Description\n    @defgroup features2d_match Descriptor Matchers\n\nMatchers of keypoint descriptors in OpenCV have wrappers with a common interface that enables you to\neasily switch between different algorithms solving the same problem. This section is devoted to\nmatching descriptors that are represented as vectors in a multidimensional space. All objects that\nimplement vector descriptor matchers inherit the DescriptorMatcher interface.\n\n@note\n   -   An example explaining keypoint matching can be found at\n        opencv_source_code/samples/cpp/descriptor_extractor_matcher.cpp\n    -   An example on descriptor matching evaluation can be found at\n        opencv_source_code/samples/cpp/detector_descriptor_matcher_evaluation.cpp\n    -   An example on one to many image matching can be found at\n        opencv_source_code/samples/cpp/matching_to_many_images.cpp\n\n    @defgroup features2d_draw Drawing Function of Keypoints and Matches\n    @defgroup features2d_category Object Categorization\n\nThis section describes approaches based on local 2D features and used to categorize objects.\n\n@note\n   -   A complete Bag-Of-Words sample can be found at\n        opencv_source_code/samples/cpp/bagofwords_classification.cpp\n    -   (Python) An example using the features2D framework to perform object categorization can be\n        found at opencv_source_code/samples/python/find_obj.py\n\n  @}\n */\n\nnamespace cv\n{\n\n//! @addtogroup features2d\n//! @{\n\n// //! writes vector of keypoints to the file storage\n// CV_EXPORTS void write(FileStorage& fs, const String& name, const std::vector<KeyPoint>& keypoints);\n// //! reads vector of keypoints from the specified file storage node\n// CV_EXPORTS void read(const FileNode& node, CV_OUT std::vector<KeyPoint>& keypoints);\n\n/** @brief A class filters a vector of keypoints.\n\n Because now it is difficult to provide a convenient interface for all usage scenarios of the\n keypoints filter class, it has only several needed by now static methods.\n */\nclass CV_EXPORTS KeyPointsFilter\n{\npublic:\n    KeyPointsFilter(){}\n\n    /*\n     * Remove keypoints within borderPixels of an image edge.\n     */\n    static void runByImageBorder( std::vector<KeyPoint>& keypoints, Size imageSize, int borderSize );\n    /*\n     * Remove keypoints of sizes out of range.\n     */\n    static void runByKeypointSize( std::vector<KeyPoint>& keypoints, float minSize,\n                                   float maxSize=FLT_MAX );\n    /*\n     * Remove keypoints from some image by mask for pixels of this image.\n     */\n    static void runByPixelsMask( std::vector<KeyPoint>& keypoints, const Mat& mask );\n    /*\n     * Remove duplicated keypoints.\n     */\n    static void removeDuplicated( std::vector<KeyPoint>& keypoints );\n\n    /*\n     * Retain the specified number of the best keypoints (according to the response)\n     */\n    static void retainBest( std::vector<KeyPoint>& keypoints, int npoints );\n};\n\n\n/************************************ Base Classes ************************************/\n\n/** @brief Abstract base class for 2D image feature detectors and descriptor extractors\n*/\nclass CV_EXPORTS_W Feature2D : public virtual Algorithm\n{\npublic:\n    virtual ~Feature2D();\n\n    /** @brief Detects keypoints in an image (first variant) or image set (second variant).\n\n    @param image Image.\n    @param keypoints The detected keypoints. In the second variant of the method keypoints[i] is a set\n    of keypoints detected in images[i] .\n    @param mask Mask specifying where to look for keypoints (optional). It must be a 8-bit integer\n    matrix with non-zero values in the region of interest.\n     */\n    CV_WRAP virtual void detect( InputArray image,\n                                 CV_OUT std::vector<KeyPoint>& keypoints,\n                                 InputArray mask=noArray() );\n\n    /** @overload\n    @param images Image set.\n    @param keypoints The detected keypoints. In the second variant of the method keypoints[i] is a set\n    of keypoints detected in images[i] .\n    @param masks Masks for each input image specifying where to look for keypoints (optional).\n    masks[i] is a mask for images[i].\n    */\n    virtual void detect( InputArrayOfArrays images,\n                         std::vector<std::vector<KeyPoint> >& keypoints,\n                         InputArrayOfArrays masks=noArray() );\n\n    /** @brief Computes the descriptors for a set of keypoints detected in an image (first variant) or image set\n    (second variant).\n\n    @param image Image.\n    @param keypoints Input collection of keypoints. Keypoints for which a descriptor cannot be\n    computed are removed. Sometimes new keypoints can be added, for example: SIFT duplicates keypoint\n    with several dominant orientations (for each orientation).\n    @param descriptors Computed descriptors. In the second variant of the method descriptors[i] are\n    descriptors computed for a keypoints[i]. Row j is the keypoints (or keypoints[i]) is the\n    descriptor for keypoint j-th keypoint.\n     */\n    CV_WRAP virtual void compute( InputArray image,\n                                  CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints,\n                                  OutputArray descriptors );\n\n    /** @overload\n\n    @param images Image set.\n    @param keypoints Input collection of keypoints. Keypoints for which a descriptor cannot be\n    computed are removed. Sometimes new keypoints can be added, for example: SIFT duplicates keypoint\n    with several dominant orientations (for each orientation).\n    @param descriptors Computed descriptors. In the second variant of the method descriptors[i] are\n    descriptors computed for a keypoints[i]. Row j is the keypoints (or keypoints[i]) is the\n    descriptor for keypoint j-th keypoint.\n    */\n    virtual void compute( InputArrayOfArrays images,\n                          std::vector<std::vector<KeyPoint> >& keypoints,\n                          OutputArrayOfArrays descriptors );\n\n    /** Detects keypoints and computes the descriptors */\n    CV_WRAP virtual void detectAndCompute( InputArray image, InputArray mask,\n                                           CV_OUT std::vector<KeyPoint>& keypoints,\n                                           OutputArray descriptors,\n                                           bool useProvidedKeypoints=false );\n\n    CV_WRAP virtual int descriptorSize() const;\n    CV_WRAP virtual int descriptorType() const;\n    CV_WRAP virtual int defaultNorm() const;\n\n    //! Return true if detector object is empty\n    CV_WRAP virtual bool empty() const;\n};\n\n/** Feature detectors in OpenCV have wrappers with a common interface that enables you to easily switch\nbetween different algorithms solving the same problem. All objects that implement keypoint detectors\ninherit the FeatureDetector interface. */\ntypedef Feature2D FeatureDetector;\n\n/** Extractors of keypoint descriptors in OpenCV have wrappers with a common interface that enables you\nto easily switch between different algorithms solving the same problem. This section is devoted to\ncomputing descriptors represented as vectors in a multidimensional space. All objects that implement\nthe vector descriptor extractors inherit the DescriptorExtractor interface.\n */\ntypedef Feature2D DescriptorExtractor;\n\n//! @addtogroup features2d_main\n//! @{\n\n/** @brief Class implementing the BRISK keypoint detector and descriptor extractor, described in @cite LCS11 .\n */\nclass CV_EXPORTS_W BRISK : public Feature2D\n{\npublic:\n    /** @brief The BRISK constructor\n\n    @param thresh AGAST detection threshold score.\n    @param octaves detection octaves. Use 0 to do single scale.\n    @param patternScale apply this scale to the pattern used for sampling the neighbourhood of a\n    keypoint.\n     */\n    CV_WRAP static Ptr<BRISK> create(int thresh=30, int octaves=3, float patternScale=1.0f);\n\n    /** @brief The BRISK constructor for a custom pattern\n\n    @param radiusList defines the radii (in pixels) where the samples around a keypoint are taken (for\n    keypoint scale 1).\n    @param numberList defines the number of sampling points on the sampling circle. Must be the same\n    size as radiusList..\n    @param dMax threshold for the short pairings used for descriptor formation (in pixels for keypoint\n    scale 1).\n    @param dMin threshold for the long pairings used for orientation determination (in pixels for\n    keypoint scale 1).\n    @param indexChange index remapping of the bits. */\n    CV_WRAP static Ptr<BRISK> create(const std::vector<float> &radiusList, const std::vector<int> &numberList,\n        float dMax=5.85f, float dMin=8.2f, const std::vector<int>& indexChange=std::vector<int>());\n};\n\n/** @brief Class implementing the ORB (*oriented BRIEF*) keypoint detector and descriptor extractor\n\ndescribed in @cite RRKB11 . The algorithm uses FAST in pyramids to detect stable keypoints, selects\nthe strongest features using FAST or Harris response, finds their orientation using first-order\nmoments and computes the descriptors using BRIEF (where the coordinates of random point pairs (or\nk-tuples) are rotated according to the measured orientation).\n */\nclass CV_EXPORTS_W ORB : public Feature2D\n{\npublic:\n    enum { kBytes = 32, HARRIS_SCORE=0, FAST_SCORE=1 };\n\n    /** @brief The ORB constructor\n\n    @param nfeatures The maximum number of features to retain.\n    @param scaleFactor Pyramid decimation ratio, greater than 1. scaleFactor==2 means the classical\n    pyramid, where each next level has 4x less pixels than the previous, but such a big scale factor\n    will degrade feature matching scores dramatically. On the other hand, too close to 1 scale factor\n    will mean that to cover certain scale range you will need more pyramid levels and so the speed\n    will suffer.\n    @param nlevels The number of pyramid levels. The smallest level will have linear size equal to\n    input_image_linear_size/pow(scaleFactor, nlevels).\n    @param edgeThreshold This is size of the border where the features are not detected. It should\n    roughly match the patchSize parameter.\n    @param firstLevel It should be 0 in the current implementation.\n    @param WTA_K The number of points that produce each element of the oriented BRIEF descriptor. The\n    default value 2 means the BRIEF where we take a random point pair and compare their brightnesses,\n    so we get 0/1 response. Other possible values are 3 and 4. For example, 3 means that we take 3\n    random points (of course, those point coordinates are random, but they are generated from the\n    pre-defined seed, so each element of BRIEF descriptor is computed deterministically from the pixel\n    rectangle), find point of maximum brightness and output index of the winner (0, 1 or 2). Such\n    output will occupy 2 bits, and therefore it will need a special variant of Hamming distance,\n    denoted as NORM_HAMMING2 (2 bits per bin). When WTA_K=4, we take 4 random points to compute each\n    bin (that will also occupy 2 bits with possible values 0, 1, 2 or 3).\n    @param scoreType The default HARRIS_SCORE means that Harris algorithm is used to rank features\n    (the score is written to KeyPoint::score and is used to retain best nfeatures features);\n    FAST_SCORE is alternative value of the parameter that produces slightly less stable keypoints,\n    but it is a little faster to compute.\n    @param patchSize size of the patch used by the oriented BRIEF descriptor. Of course, on smaller\n    pyramid layers the perceived image area covered by a feature will be larger.\n    @param fastThreshold\n     */\n    CV_WRAP static Ptr<ORB> create(int nfeatures=500, float scaleFactor=1.2f, int nlevels=8, int edgeThreshold=31,\n        int firstLevel=0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31, int fastThreshold=20);\n\n    CV_WRAP virtual void setMaxFeatures(int maxFeatures) = 0;\n    CV_WRAP virtual int getMaxFeatures() const = 0;\n\n    CV_WRAP virtual void setScaleFactor(double scaleFactor) = 0;\n    CV_WRAP virtual double getScaleFactor() const = 0;\n\n    CV_WRAP virtual void setNLevels(int nlevels) = 0;\n    CV_WRAP virtual int getNLevels() const = 0;\n\n    CV_WRAP virtual void setEdgeThreshold(int edgeThreshold) = 0;\n    CV_WRAP virtual int getEdgeThreshold() const = 0;\n\n    CV_WRAP virtual void setFirstLevel(int firstLevel) = 0;\n    CV_WRAP virtual int getFirstLevel() const = 0;\n\n    CV_WRAP virtual void setWTA_K(int wta_k) = 0;\n    CV_WRAP virtual int getWTA_K() const = 0;\n\n    CV_WRAP virtual void setScoreType(int scoreType) = 0;\n    CV_WRAP virtual int getScoreType() const = 0;\n\n    CV_WRAP virtual void setPatchSize(int patchSize) = 0;\n    CV_WRAP virtual int getPatchSize() const = 0;\n\n    CV_WRAP virtual void setFastThreshold(int fastThreshold) = 0;\n    CV_WRAP virtual int getFastThreshold() const = 0;\n};\n\n/** @brief Maximally stable extremal region extractor\n\nThe class encapsulates all the parameters of the %MSER extraction algorithm (see [wiki\narticle](http://en.wikipedia.org/wiki/Maximally_stable_extremal_regions)).\n\n- there are two different implementation of %MSER: one for grey image, one for color image\n\n- the grey image algorithm is taken from: @cite nister2008linear ;  the paper claims to be faster\nthan union-find method; it actually get 1.5~2m/s on my centrino L7200 1.2GHz laptop.\n\n- the color image algorithm is taken from: @cite forssen2007maximally ; it should be much slower\nthan grey image method ( 3~4 times ); the chi_table.h file is taken directly from paper's source\ncode which is distributed under GPL.\n\n- (Python) A complete example showing the use of the %MSER detector can be found at samples/python/mser.py\n*/\nclass CV_EXPORTS_W MSER : public Feature2D\n{\npublic:\n    /** @brief Full consturctor for %MSER detector\n\n    @param _delta it compares \\f$(size_{i}-size_{i-delta})/size_{i-delta}\\f$\n    @param _min_area prune the area which smaller than minArea\n    @param _max_area prune the area which bigger than maxArea\n    @param _max_variation prune the area have simliar size to its children\n    @param _min_diversity for color image, trace back to cut off mser with diversity less than min_diversity\n    @param _max_evolution  for color image, the evolution steps\n    @param _area_threshold for color image, the area threshold to cause re-initialize\n    @param _min_margin for color image, ignore too small margin\n    @param _edge_blur_size for color image, the aperture size for edge blur\n     */\n    CV_WRAP static Ptr<MSER> create( int _delta=5, int _min_area=60, int _max_area=14400,\n          double _max_variation=0.25, double _min_diversity=.2,\n          int _max_evolution=200, double _area_threshold=1.01,\n          double _min_margin=0.003, int _edge_blur_size=5 );\n\n    /** @brief Detect %MSER regions\n\n    @param image input image (8UC1, 8UC3 or 8UC4)\n    @param msers resulting list of point sets\n    @param bboxes resulting bounding boxes\n    */\n    CV_WRAP virtual void detectRegions( InputArray image,\n                                        CV_OUT std::vector<std::vector<Point> >& msers,\n                                        std::vector<Rect>& bboxes ) = 0;\n\n    CV_WRAP virtual void setDelta(int delta) = 0;\n    CV_WRAP virtual int getDelta() const = 0;\n\n    CV_WRAP virtual void setMinArea(int minArea) = 0;\n    CV_WRAP virtual int getMinArea() const = 0;\n\n    CV_WRAP virtual void setMaxArea(int maxArea) = 0;\n    CV_WRAP virtual int getMaxArea() const = 0;\n\n    CV_WRAP virtual void setPass2Only(bool f) = 0;\n    CV_WRAP virtual bool getPass2Only() const = 0;\n};\n\n/** @overload */\nCV_EXPORTS void FAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints,\n                      int threshold, bool nonmaxSuppression=true );\n\n/** @brief Detects corners using the FAST algorithm\n\n@param image grayscale image where keypoints (corners) are detected.\n@param keypoints keypoints detected on the image.\n@param threshold threshold on difference between intensity of the central pixel and pixels of a\ncircle around this pixel.\n@param nonmaxSuppression if true, non-maximum suppression is applied to detected corners\n(keypoints).\n@param type one of the three neighborhoods as defined in the paper:\nFastFeatureDetector::TYPE_9_16, FastFeatureDetector::TYPE_7_12,\nFastFeatureDetector::TYPE_5_8\n\nDetects corners using the FAST algorithm by @cite Rosten06 .\n\n@note In Python API, types are given as cv2.FAST_FEATURE_DETECTOR_TYPE_5_8,\ncv2.FAST_FEATURE_DETECTOR_TYPE_7_12 and cv2.FAST_FEATURE_DETECTOR_TYPE_9_16. For corner\ndetection, use cv2.FAST.detect() method.\n */\nCV_EXPORTS void FAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints,\n                      int threshold, bool nonmaxSuppression, int type );\n\n//! @} features2d_main\n\n//! @addtogroup features2d_main\n//! @{\n\n/** @brief Wrapping class for feature detection using the FAST method. :\n */\nclass CV_EXPORTS_W FastFeatureDetector : public Feature2D\n{\npublic:\n    enum\n    {\n        TYPE_5_8 = 0, TYPE_7_12 = 1, TYPE_9_16 = 2,\n        THRESHOLD = 10000, NONMAX_SUPPRESSION=10001, FAST_N=10002,\n    };\n\n    CV_WRAP static Ptr<FastFeatureDetector> create( int threshold=10,\n                                                    bool nonmaxSuppression=true,\n                                                    int type=FastFeatureDetector::TYPE_9_16 );\n\n    CV_WRAP virtual void setThreshold(int threshold) = 0;\n    CV_WRAP virtual int getThreshold() const = 0;\n\n    CV_WRAP virtual void setNonmaxSuppression(bool f) = 0;\n    CV_WRAP virtual bool getNonmaxSuppression() const = 0;\n\n    CV_WRAP virtual void setType(int type) = 0;\n    CV_WRAP virtual int getType() const = 0;\n};\n\n/** @overload */\nCV_EXPORTS void AGAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints,\n                      int threshold, bool nonmaxSuppression=true );\n\n/** @brief Detects corners using the AGAST algorithm\n\n@param image grayscale image where keypoints (corners) are detected.\n@param keypoints keypoints detected on the image.\n@param threshold threshold on difference between intensity of the central pixel and pixels of a\ncircle around this pixel.\n@param nonmaxSuppression if true, non-maximum suppression is applied to detected corners\n(keypoints).\n@param type one of the four neighborhoods as defined in the paper:\nAgastFeatureDetector::AGAST_5_8, AgastFeatureDetector::AGAST_7_12d,\nAgastFeatureDetector::AGAST_7_12s, AgastFeatureDetector::OAST_9_16\n\nFor non-Intel platforms, there is a tree optimised variant of AGAST with same numerical results.\nThe 32-bit binary tree tables were generated automatically from original code using perl script.\nThe perl script and examples of tree generation are placed in features2d/doc folder.\nDetects corners using the AGAST algorithm by @cite mair2010_agast .\n\n */\nCV_EXPORTS void AGAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints,\n                      int threshold, bool nonmaxSuppression, int type );\n//! @} features2d_main\n\n//! @addtogroup features2d_main\n//! @{\n\n/** @brief Wrapping class for feature detection using the AGAST method. :\n */\nclass CV_EXPORTS_W AgastFeatureDetector : public Feature2D\n{\npublic:\n    enum\n    {\n        AGAST_5_8 = 0, AGAST_7_12d = 1, AGAST_7_12s = 2, OAST_9_16 = 3,\n        THRESHOLD = 10000, NONMAX_SUPPRESSION = 10001,\n    };\n\n    CV_WRAP static Ptr<AgastFeatureDetector> create( int threshold=10,\n                                                     bool nonmaxSuppression=true,\n                                                     int type=AgastFeatureDetector::OAST_9_16 );\n\n    CV_WRAP virtual void setThreshold(int threshold) = 0;\n    CV_WRAP virtual int getThreshold() const = 0;\n\n    CV_WRAP virtual void setNonmaxSuppression(bool f) = 0;\n    CV_WRAP virtual bool getNonmaxSuppression() const = 0;\n\n    CV_WRAP virtual void setType(int type) = 0;\n    CV_WRAP virtual int getType() const = 0;\n};\n\n/** @brief Wrapping class for feature detection using the goodFeaturesToTrack function. :\n */\nclass CV_EXPORTS_W GFTTDetector : public Feature2D\n{\npublic:\n    CV_WRAP static Ptr<GFTTDetector> create( int maxCorners=1000, double qualityLevel=0.01, double minDistance=1,\n                                             int blockSize=3, bool useHarrisDetector=false, double k=0.04 );\n    CV_WRAP virtual void setMaxFeatures(int maxFeatures) = 0;\n    CV_WRAP virtual int getMaxFeatures() const = 0;\n\n    CV_WRAP virtual void setQualityLevel(double qlevel) = 0;\n    CV_WRAP virtual double getQualityLevel() const = 0;\n\n    CV_WRAP virtual void setMinDistance(double minDistance) = 0;\n    CV_WRAP virtual double getMinDistance() const = 0;\n\n    CV_WRAP virtual void setBlockSize(int blockSize) = 0;\n    CV_WRAP virtual int getBlockSize() const = 0;\n\n    CV_WRAP virtual void setHarrisDetector(bool val) = 0;\n    CV_WRAP virtual bool getHarrisDetector() const = 0;\n\n    CV_WRAP virtual void setK(double k) = 0;\n    CV_WRAP virtual double getK() const = 0;\n};\n\n/** @brief Class for extracting blobs from an image. :\n\nThe class implements a simple algorithm for extracting blobs from an image:\n\n1.  Convert the source image to binary images by applying thresholding with several thresholds from\n    minThreshold (inclusive) to maxThreshold (exclusive) with distance thresholdStep between\n    neighboring thresholds.\n2.  Extract connected components from every binary image by findContours and calculate their\n    centers.\n3.  Group centers from several binary images by their coordinates. Close centers form one group that\n    corresponds to one blob, which is controlled by the minDistBetweenBlobs parameter.\n4.  From the groups, estimate final centers of blobs and their radiuses and return as locations and\n    sizes of keypoints.\n\nThis class performs several filtrations of returned blobs. You should set filterBy\\* to true/false\nto turn on/off corresponding filtration. Available filtrations:\n\n-   **By color**. This filter compares the intensity of a binary image at the center of a blob to\nblobColor. If they differ, the blob is filtered out. Use blobColor = 0 to extract dark blobs\nand blobColor = 255 to extract light blobs.\n-   **By area**. Extracted blobs have an area between minArea (inclusive) and maxArea (exclusive).\n-   **By circularity**. Extracted blobs have circularity\n(\\f$\\frac{4*\\pi*Area}{perimeter * perimeter}\\f$) between minCircularity (inclusive) and\nmaxCircularity (exclusive).\n-   **By ratio of the minimum inertia to maximum inertia**. Extracted blobs have this ratio\nbetween minInertiaRatio (inclusive) and maxInertiaRatio (exclusive).\n-   **By convexity**. Extracted blobs have convexity (area / area of blob convex hull) between\nminConvexity (inclusive) and maxConvexity (exclusive).\n\nDefault values of parameters are tuned to extract dark circular blobs.\n */\nclass CV_EXPORTS_W SimpleBlobDetector : public Feature2D\n{\npublic:\n  struct CV_EXPORTS_W_SIMPLE Params\n  {\n      CV_WRAP Params();\n      CV_PROP_RW float thresholdStep;\n      CV_PROP_RW float minThreshold;\n      CV_PROP_RW float maxThreshold;\n      CV_PROP_RW size_t minRepeatability;\n      CV_PROP_RW float minDistBetweenBlobs;\n\n      CV_PROP_RW bool filterByColor;\n      CV_PROP_RW uchar blobColor;\n\n      CV_PROP_RW bool filterByArea;\n      CV_PROP_RW float minArea, maxArea;\n\n      CV_PROP_RW bool filterByCircularity;\n      CV_PROP_RW float minCircularity, maxCircularity;\n\n      CV_PROP_RW bool filterByInertia;\n      CV_PROP_RW float minInertiaRatio, maxInertiaRatio;\n\n      CV_PROP_RW bool filterByConvexity;\n      CV_PROP_RW float minConvexity, maxConvexity;\n\n      void read( const FileNode& fn );\n      void write( FileStorage& fs ) const;\n  };\n\n  CV_WRAP static Ptr<SimpleBlobDetector>\n    create(const SimpleBlobDetector::Params &parameters = SimpleBlobDetector::Params());\n};\n\n//! @} features2d_main\n\n//! @addtogroup features2d_main\n//! @{\n\n/** @brief Class implementing the KAZE keypoint detector and descriptor extractor, described in @cite ABD12 .\n\n@note AKAZE descriptor can only be used with KAZE or AKAZE keypoints .. [ABD12] KAZE Features. Pablo\nF. Alcantarilla, Adrien Bartoli and Andrew J. Davison. In European Conference on Computer Vision\n(ECCV), Fiorenze, Italy, October 2012.\n*/\nclass CV_EXPORTS_W KAZE : public Feature2D\n{\npublic:\n    enum\n    {\n        DIFF_PM_G1 = 0,\n        DIFF_PM_G2 = 1,\n        DIFF_WEICKERT = 2,\n        DIFF_CHARBONNIER = 3\n    };\n\n    /** @brief The KAZE constructor\n\n    @param extended Set to enable extraction of extended (128-byte) descriptor.\n    @param upright Set to enable use of upright descriptors (non rotation-invariant).\n    @param threshold Detector response threshold to accept point\n    @param nOctaves Maximum octave evolution of the image\n    @param nOctaveLayers Default number of sublevels per scale level\n    @param diffusivity Diffusivity type. DIFF_PM_G1, DIFF_PM_G2, DIFF_WEICKERT or\n    DIFF_CHARBONNIER\n     */\n    CV_WRAP static Ptr<KAZE> create(bool extended=false, bool upright=false,\n                                    float threshold = 0.001f,\n                                    int nOctaves = 4, int nOctaveLayers = 4,\n                                    int diffusivity = KAZE::DIFF_PM_G2);\n\n    CV_WRAP virtual void setExtended(bool extended) = 0;\n    CV_WRAP virtual bool getExtended() const = 0;\n\n    CV_WRAP virtual void setUpright(bool upright) = 0;\n    CV_WRAP virtual bool getUpright() const = 0;\n\n    CV_WRAP virtual void setThreshold(double threshold) = 0;\n    CV_WRAP virtual double getThreshold() const = 0;\n\n    CV_WRAP virtual void setNOctaves(int octaves) = 0;\n    CV_WRAP virtual int getNOctaves() const = 0;\n\n    CV_WRAP virtual void setNOctaveLayers(int octaveLayers) = 0;\n    CV_WRAP virtual int getNOctaveLayers() const = 0;\n\n    CV_WRAP virtual void setDiffusivity(int diff) = 0;\n    CV_WRAP virtual int getDiffusivity() const = 0;\n};\n\n/** @brief Class implementing the AKAZE keypoint detector and descriptor extractor, described in @cite ANB13 . :\n\n@note AKAZE descriptors can only be used with KAZE or AKAZE keypoints. Try to avoid using *extract*\nand *detect* instead of *operator()* due to performance reasons. .. [ANB13] Fast Explicit Diffusion\nfor Accelerated Features in Nonlinear Scale Spaces. Pablo F. Alcantarilla, Jesús Nuevo and Adrien\nBartoli. In British Machine Vision Conference (BMVC), Bristol, UK, September 2013.\n */\nclass CV_EXPORTS_W AKAZE : public Feature2D\n{\npublic:\n    // AKAZE descriptor type\n    enum\n    {\n        DESCRIPTOR_KAZE_UPRIGHT = 2, ///< Upright descriptors, not invariant to rotation\n        DESCRIPTOR_KAZE = 3,\n        DESCRIPTOR_MLDB_UPRIGHT = 4, ///< Upright descriptors, not invariant to rotation\n        DESCRIPTOR_MLDB = 5\n    };\n\n    /** @brief The AKAZE constructor\n\n    @param descriptor_type Type of the extracted descriptor: DESCRIPTOR_KAZE,\n    DESCRIPTOR_KAZE_UPRIGHT, DESCRIPTOR_MLDB or DESCRIPTOR_MLDB_UPRIGHT.\n    @param descriptor_size Size of the descriptor in bits. 0 -\\> Full size\n    @param descriptor_channels Number of channels in the descriptor (1, 2, 3)\n    @param threshold Detector response threshold to accept point\n    @param nOctaves Maximum octave evolution of the image\n    @param nOctaveLayers Default number of sublevels per scale level\n    @param diffusivity Diffusivity type. DIFF_PM_G1, DIFF_PM_G2, DIFF_WEICKERT or\n    DIFF_CHARBONNIER\n     */\n    CV_WRAP static Ptr<AKAZE> create(int descriptor_type=AKAZE::DESCRIPTOR_MLDB,\n                                     int descriptor_size = 0, int descriptor_channels = 3,\n                                     float threshold = 0.001f, int nOctaves = 4,\n                                     int nOctaveLayers = 4, int diffusivity = KAZE::DIFF_PM_G2);\n\n    CV_WRAP virtual void setDescriptorType(int dtype) = 0;\n    CV_WRAP virtual int getDescriptorType() const = 0;\n\n    CV_WRAP virtual void setDescriptorSize(int dsize) = 0;\n    CV_WRAP virtual int getDescriptorSize() const = 0;\n\n    CV_WRAP virtual void setDescriptorChannels(int dch) = 0;\n    CV_WRAP virtual int getDescriptorChannels() const = 0;\n\n    CV_WRAP virtual void setThreshold(double threshold) = 0;\n    CV_WRAP virtual double getThreshold() const = 0;\n\n    CV_WRAP virtual void setNOctaves(int octaves) = 0;\n    CV_WRAP virtual int getNOctaves() const = 0;\n\n    CV_WRAP virtual void setNOctaveLayers(int octaveLayers) = 0;\n    CV_WRAP virtual int getNOctaveLayers() const = 0;\n\n    CV_WRAP virtual void setDiffusivity(int diff) = 0;\n    CV_WRAP virtual int getDiffusivity() const = 0;\n};\n\n//! @} features2d_main\n\n/****************************************************************************************\\\n*                                      Distance                                          *\n\\****************************************************************************************/\n\ntemplate<typename T>\nstruct CV_EXPORTS Accumulator\n{\n    typedef T Type;\n};\n\ntemplate<> struct Accumulator<unsigned char>  { typedef float Type; };\ntemplate<> struct Accumulator<unsigned short> { typedef float Type; };\ntemplate<> struct Accumulator<char>   { typedef float Type; };\ntemplate<> struct Accumulator<short>  { typedef float Type; };\n\n/*\n * Squared Euclidean distance functor\n */\ntemplate<class T>\nstruct CV_EXPORTS SL2\n{\n    enum { normType = NORM_L2SQR };\n    typedef T ValueType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    ResultType operator()( const T* a, const T* b, int size ) const\n    {\n        return normL2Sqr<ValueType, ResultType>(a, b, size);\n    }\n};\n\n/*\n * Euclidean distance functor\n */\ntemplate<class T>\nstruct CV_EXPORTS L2\n{\n    enum { normType = NORM_L2 };\n    typedef T ValueType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    ResultType operator()( const T* a, const T* b, int size ) const\n    {\n        return (ResultType)std::sqrt((double)normL2Sqr<ValueType, ResultType>(a, b, size));\n    }\n};\n\n/*\n * Manhattan distance (city block distance) functor\n */\ntemplate<class T>\nstruct CV_EXPORTS L1\n{\n    enum { normType = NORM_L1 };\n    typedef T ValueType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    ResultType operator()( const T* a, const T* b, int size ) const\n    {\n        return normL1<ValueType, ResultType>(a, b, size);\n    }\n};\n\n/****************************************************************************************\\\n*                                  DescriptorMatcher                                     *\n\\****************************************************************************************/\n\n//! @addtogroup features2d_match\n//! @{\n\n/** @brief Abstract base class for matching keypoint descriptors.\n\nIt has two groups of match methods: for matching descriptors of an image with another image or with\nan image set.\n */\nclass CV_EXPORTS_W DescriptorMatcher : public Algorithm\n{\npublic:\n    virtual ~DescriptorMatcher();\n\n    /** @brief Adds descriptors to train a CPU(trainDescCollectionis) or GPU(utrainDescCollectionis) descriptor\n    collection.\n\n    If the collection is not empty, the new descriptors are added to existing train descriptors.\n\n    @param descriptors Descriptors to add. Each descriptors[i] is a set of descriptors from the same\n    train image.\n     */\n    CV_WRAP virtual void add( InputArrayOfArrays descriptors );\n\n    /** @brief Returns a constant link to the train descriptor collection trainDescCollection .\n     */\n    CV_WRAP const std::vector<Mat>& getTrainDescriptors() const;\n\n    /** @brief Clears the train descriptor collections.\n     */\n    CV_WRAP virtual void clear();\n\n    /** @brief Returns true if there are no train descriptors in the both collections.\n     */\n    CV_WRAP virtual bool empty() const;\n\n    /** @brief Returns true if the descriptor matcher supports masking permissible matches.\n     */\n    CV_WRAP virtual bool isMaskSupported() const = 0;\n\n    /** @brief Trains a descriptor matcher\n\n    Trains a descriptor matcher (for example, the flann index). In all methods to match, the method\n    train() is run every time before matching. Some descriptor matchers (for example, BruteForceMatcher)\n    have an empty implementation of this method. Other matchers really train their inner structures (for\n    example, FlannBasedMatcher trains flann::Index ).\n     */\n    CV_WRAP virtual void train();\n\n    /** @brief Finds the best match for each descriptor from a query set.\n\n    @param queryDescriptors Query set of descriptors.\n    @param trainDescriptors Train set of descriptors. This set is not added to the train descriptors\n    collection stored in the class object.\n    @param matches Matches. If a query descriptor is masked out in mask , no match is added for this\n    descriptor. So, matches size may be smaller than the query descriptors count.\n    @param mask Mask specifying permissible matches between an input query and train matrices of\n    descriptors.\n\n    In the first variant of this method, the train descriptors are passed as an input argument. In the\n    second variant of the method, train descriptors collection that was set by DescriptorMatcher::add is\n    used. Optional mask (or masks) can be passed to specify which query and training descriptors can be\n    matched. Namely, queryDescriptors[i] can be matched with trainDescriptors[j] only if\n    mask.at\\<uchar\\>(i,j) is non-zero.\n     */\n    CV_WRAP void match( InputArray queryDescriptors, InputArray trainDescriptors,\n                CV_OUT std::vector<DMatch>& matches, InputArray mask=noArray() ) const;\n\n    /** @brief Finds the k best matches for each descriptor from a query set.\n\n    @param queryDescriptors Query set of descriptors.\n    @param trainDescriptors Train set of descriptors. This set is not added to the train descriptors\n    collection stored in the class object.\n    @param mask Mask specifying permissible matches between an input query and train matrices of\n    descriptors.\n    @param matches Matches. Each matches[i] is k or less matches for the same query descriptor.\n    @param k Count of best matches found per each query descriptor or less if a query descriptor has\n    less than k possible matches in total.\n    @param compactResult Parameter used when the mask (or masks) is not empty. If compactResult is\n    false, the matches vector has the same size as queryDescriptors rows. If compactResult is true,\n    the matches vector does not contain matches for fully masked-out query descriptors.\n\n    These extended variants of DescriptorMatcher::match methods find several best matches for each query\n    descriptor. The matches are returned in the distance increasing order. See DescriptorMatcher::match\n    for the details about query and train descriptors.\n     */\n    CV_WRAP void knnMatch( InputArray queryDescriptors, InputArray trainDescriptors,\n                   CV_OUT std::vector<std::vector<DMatch> >& matches, int k,\n                   InputArray mask=noArray(), bool compactResult=false ) const;\n\n    /** @brief For each query descriptor, finds the training descriptors not farther than the specified distance.\n\n    @param queryDescriptors Query set of descriptors.\n    @param trainDescriptors Train set of descriptors. This set is not added to the train descriptors\n    collection stored in the class object.\n    @param matches Found matches.\n    @param compactResult Parameter used when the mask (or masks) is not empty. If compactResult is\n    false, the matches vector has the same size as queryDescriptors rows. If compactResult is true,\n    the matches vector does not contain matches for fully masked-out query descriptors.\n    @param maxDistance Threshold for the distance between matched descriptors. Distance means here\n    metric distance (e.g. Hamming distance), not the distance between coordinates (which is measured\n    in Pixels)!\n    @param mask Mask specifying permissible matches between an input query and train matrices of\n    descriptors.\n\n    For each query descriptor, the methods find such training descriptors that the distance between the\n    query descriptor and the training descriptor is equal or smaller than maxDistance. Found matches are\n    returned in the distance increasing order.\n     */\n    void radiusMatch( InputArray queryDescriptors, InputArray trainDescriptors,\n                      std::vector<std::vector<DMatch> >& matches, float maxDistance,\n                      InputArray mask=noArray(), bool compactResult=false ) const;\n\n    /** @overload\n    @param queryDescriptors Query set of descriptors.\n    @param matches Matches. If a query descriptor is masked out in mask , no match is added for this\n    descriptor. So, matches size may be smaller than the query descriptors count.\n    @param masks Set of masks. Each masks[i] specifies permissible matches between the input query\n    descriptors and stored train descriptors from the i-th image trainDescCollection[i].\n    */\n    CV_WRAP void match( InputArray queryDescriptors, CV_OUT std::vector<DMatch>& matches,\n                        InputArrayOfArrays masks=noArray() );\n    /** @overload\n    @param queryDescriptors Query set of descriptors.\n    @param matches Matches. Each matches[i] is k or less matches for the same query descriptor.\n    @param k Count of best matches found per each query descriptor or less if a query descriptor has\n    less than k possible matches in total.\n    @param masks Set of masks. Each masks[i] specifies permissible matches between the input query\n    descriptors and stored train descriptors from the i-th image trainDescCollection[i].\n    @param compactResult Parameter used when the mask (or masks) is not empty. If compactResult is\n    false, the matches vector has the same size as queryDescriptors rows. If compactResult is true,\n    the matches vector does not contain matches for fully masked-out query descriptors.\n    */\n    CV_WRAP void knnMatch( InputArray queryDescriptors, CV_OUT std::vector<std::vector<DMatch> >& matches, int k,\n                           InputArrayOfArrays masks=noArray(), bool compactResult=false );\n    /** @overload\n    @param queryDescriptors Query set of descriptors.\n    @param matches Found matches.\n    @param maxDistance Threshold for the distance between matched descriptors. Distance means here\n    metric distance (e.g. Hamming distance), not the distance between coordinates (which is measured\n    in Pixels)!\n    @param masks Set of masks. Each masks[i] specifies permissible matches between the input query\n    descriptors and stored train descriptors from the i-th image trainDescCollection[i].\n    @param compactResult Parameter used when the mask (or masks) is not empty. If compactResult is\n    false, the matches vector has the same size as queryDescriptors rows. If compactResult is true,\n    the matches vector does not contain matches for fully masked-out query descriptors.\n    */\n    void radiusMatch( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,\n                      InputArrayOfArrays masks=noArray(), bool compactResult=false );\n\n    // Reads matcher object from a file node\n    virtual void read( const FileNode& );\n    // Writes matcher object to a file storage\n    virtual void write( FileStorage& ) const;\n\n    /** @brief Clones the matcher.\n\n    @param emptyTrainData If emptyTrainData is false, the method creates a deep copy of the object,\n    that is, copies both parameters and train data. If emptyTrainData is true, the method creates an\n    object copy with the current parameters but with empty train data.\n     */\n    virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const = 0;\n\n    /** @brief Creates a descriptor matcher of a given type with the default parameters (using default\n    constructor).\n\n    @param descriptorMatcherType Descriptor matcher type. Now the following matcher types are\n    supported:\n    -   `BruteForce` (it uses L2 )\n    -   `BruteForce-L1`\n    -   `BruteForce-Hamming`\n    -   `BruteForce-Hamming(2)`\n    -   `FlannBased`\n     */\n    CV_WRAP static Ptr<DescriptorMatcher> create( const String& descriptorMatcherType );\nprotected:\n    /**\n     * Class to work with descriptors from several images as with one merged matrix.\n     * It is used e.g. in FlannBasedMatcher.\n     */\n    class CV_EXPORTS DescriptorCollection\n    {\n    public:\n        DescriptorCollection();\n        DescriptorCollection( const DescriptorCollection& collection );\n        virtual ~DescriptorCollection();\n\n        // Vector of matrices \"descriptors\" will be merged to one matrix \"mergedDescriptors\" here.\n        void set( const std::vector<Mat>& descriptors );\n        virtual void clear();\n\n        const Mat& getDescriptors() const;\n        const Mat getDescriptor( int imgIdx, int localDescIdx ) const;\n        const Mat getDescriptor( int globalDescIdx ) const;\n        void getLocalIdx( int globalDescIdx, int& imgIdx, int& localDescIdx ) const;\n\n        int size() const;\n\n    protected:\n        Mat mergedDescriptors;\n        std::vector<int> startIdxs;\n    };\n\n    //! In fact the matching is implemented only by the following two methods. These methods suppose\n    //! that the class object has been trained already. Public match methods call these methods\n    //! after calling train().\n    virtual void knnMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, int k,\n        InputArrayOfArrays masks=noArray(), bool compactResult=false ) = 0;\n    virtual void radiusMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,\n        InputArrayOfArrays masks=noArray(), bool compactResult=false ) = 0;\n\n    static bool isPossibleMatch( InputArray mask, int queryIdx, int trainIdx );\n    static bool isMaskedOut( InputArrayOfArrays masks, int queryIdx );\n\n    static Mat clone_op( Mat m ) { return m.clone(); }\n    void checkMasks( InputArrayOfArrays masks, int queryDescriptorsCount ) const;\n\n    //! Collection of descriptors from train images.\n    std::vector<Mat> trainDescCollection;\n    std::vector<UMat> utrainDescCollection;\n};\n\n/** @brief Brute-force descriptor matcher.\n\nFor each descriptor in the first set, this matcher finds the closest descriptor in the second set\nby trying each one. This descriptor matcher supports masking permissible matches of descriptor\nsets.\n */\nclass CV_EXPORTS_W BFMatcher : public DescriptorMatcher\n{\npublic:\n    /** @brief Brute-force matcher constructor.\n\n    @param normType One of NORM_L1, NORM_L2, NORM_HAMMING, NORM_HAMMING2. L1 and L2 norms are\n    preferable choices for SIFT and SURF descriptors, NORM_HAMMING should be used with ORB, BRISK and\n    BRIEF, NORM_HAMMING2 should be used with ORB when WTA_K==3 or 4 (see ORB::ORB constructor\n    description).\n    @param crossCheck If it is false, this is will be default BFMatcher behaviour when it finds the k\n    nearest neighbors for each query descriptor. If crossCheck==true, then the knnMatch() method with\n    k=1 will only return pairs (i,j) such that for i-th query descriptor the j-th descriptor in the\n    matcher's collection is the nearest and vice versa, i.e. the BFMatcher will only return consistent\n    pairs. Such technique usually produces best results with minimal number of outliers when there are\n    enough matches. This is alternative to the ratio test, used by D. Lowe in SIFT paper.\n     */\n    CV_WRAP BFMatcher( int normType=NORM_L2, bool crossCheck=false );\n    virtual ~BFMatcher() {}\n\n    virtual bool isMaskSupported() const { return true; }\n\n    virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const;\nprotected:\n    virtual void knnMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, int k,\n        InputArrayOfArrays masks=noArray(), bool compactResult=false );\n    virtual void radiusMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,\n        InputArrayOfArrays masks=noArray(), bool compactResult=false );\n\n    int normType;\n    bool crossCheck;\n};\n\n\n/** @brief Flann-based descriptor matcher.\n\nThis matcher trains flann::Index_ on a train descriptor collection and calls its nearest search\nmethods to find the best matches. So, this matcher may be faster when matching a large train\ncollection than the brute force matcher. FlannBasedMatcher does not support masking permissible\nmatches of descriptor sets because flann::Index does not support this. :\n */\nclass CV_EXPORTS_W FlannBasedMatcher : public DescriptorMatcher\n{\npublic:\n    CV_WRAP FlannBasedMatcher( const Ptr<flann::IndexParams>& indexParams=makePtr<flann::KDTreeIndexParams>(),\n                       const Ptr<flann::SearchParams>& searchParams=makePtr<flann::SearchParams>() );\n\n    virtual void add( InputArrayOfArrays descriptors );\n    virtual void clear();\n\n    // Reads matcher object from a file node\n    virtual void read( const FileNode& );\n    // Writes matcher object to a file storage\n    virtual void write( FileStorage& ) const;\n\n    virtual void train();\n    virtual bool isMaskSupported() const;\n\n    virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const;\nprotected:\n    static void convertToDMatches( const DescriptorCollection& descriptors,\n                                   const Mat& indices, const Mat& distances,\n                                   std::vector<std::vector<DMatch> >& matches );\n\n    virtual void knnMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, int k,\n        InputArrayOfArrays masks=noArray(), bool compactResult=false );\n    virtual void radiusMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,\n        InputArrayOfArrays masks=noArray(), bool compactResult=false );\n\n    Ptr<flann::IndexParams> indexParams;\n    Ptr<flann::SearchParams> searchParams;\n    Ptr<flann::Index> flannIndex;\n\n    DescriptorCollection mergedDescriptors;\n    int addedDescCount;\n};\n\n//! @} features2d_match\n\n/****************************************************************************************\\\n*                                   Drawing functions                                    *\n\\****************************************************************************************/\n\n//! @addtogroup features2d_draw\n//! @{\n\nstruct CV_EXPORTS DrawMatchesFlags\n{\n    enum{ DEFAULT = 0, //!< Output image matrix will be created (Mat::create),\n                       //!< i.e. existing memory of output image may be reused.\n                       //!< Two source image, matches and single keypoints will be drawn.\n                       //!< For each keypoint only the center point will be drawn (without\n                       //!< the circle around keypoint with keypoint size and orientation).\n          DRAW_OVER_OUTIMG = 1, //!< Output image matrix will not be created (Mat::create).\n                                //!< Matches will be drawn on existing content of output image.\n          NOT_DRAW_SINGLE_POINTS = 2, //!< Single keypoints will not be drawn.\n          DRAW_RICH_KEYPOINTS = 4 //!< For each keypoint the circle around keypoint with keypoint size and\n                                  //!< orientation will be drawn.\n        };\n};\n\n/** @brief Draws keypoints.\n\n@param image Source image.\n@param keypoints Keypoints from the source image.\n@param outImage Output image. Its content depends on the flags value defining what is drawn in the\noutput image. See possible flags bit values below.\n@param color Color of keypoints.\n@param flags Flags setting drawing features. Possible flags bit values are defined by\nDrawMatchesFlags. See details above in drawMatches .\n\n@note\nFor Python API, flags are modified as cv2.DRAW_MATCHES_FLAGS_DEFAULT,\ncv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG,\ncv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS\n */\nCV_EXPORTS_W void drawKeypoints( InputArray image, const std::vector<KeyPoint>& keypoints, InputOutputArray outImage,\n                               const Scalar& color=Scalar::all(-1), int flags=DrawMatchesFlags::DEFAULT );\n\n/** @brief Draws the found matches of keypoints from two images.\n\n@param img1 First source image.\n@param keypoints1 Keypoints from the first source image.\n@param img2 Second source image.\n@param keypoints2 Keypoints from the second source image.\n@param matches1to2 Matches from the first image to the second one, which means that keypoints1[i]\nhas a corresponding point in keypoints2[matches[i]] .\n@param outImg Output image. Its content depends on the flags value defining what is drawn in the\noutput image. See possible flags bit values below.\n@param matchColor Color of matches (lines and connected keypoints). If matchColor==Scalar::all(-1)\n, the color is generated randomly.\n@param singlePointColor Color of single keypoints (circles), which means that keypoints do not\nhave the matches. If singlePointColor==Scalar::all(-1) , the color is generated randomly.\n@param matchesMask Mask determining which matches are drawn. If the mask is empty, all matches are\ndrawn.\n@param flags Flags setting drawing features. Possible flags bit values are defined by\nDrawMatchesFlags.\n\nThis function draws matches of keypoints from two images in the output image. Match is a line\nconnecting two keypoints (circles). See cv::DrawMatchesFlags.\n */\nCV_EXPORTS_W void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,\n                             InputArray img2, const std::vector<KeyPoint>& keypoints2,\n                             const std::vector<DMatch>& matches1to2, InputOutputArray outImg,\n                             const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),\n                             const std::vector<char>& matchesMask=std::vector<char>(), int flags=DrawMatchesFlags::DEFAULT );\n\n/** @overload */\nCV_EXPORTS_AS(drawMatchesKnn) void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,\n                             InputArray img2, const std::vector<KeyPoint>& keypoints2,\n                             const std::vector<std::vector<DMatch> >& matches1to2, InputOutputArray outImg,\n                             const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),\n                             const std::vector<std::vector<char> >& matchesMask=std::vector<std::vector<char> >(), int flags=DrawMatchesFlags::DEFAULT );\n\n//! @} features2d_draw\n\n/****************************************************************************************\\\n*   Functions to evaluate the feature detectors and [generic] descriptor extractors      *\n\\****************************************************************************************/\n\nCV_EXPORTS void evaluateFeatureDetector( const Mat& img1, const Mat& img2, const Mat& H1to2,\n                                         std::vector<KeyPoint>* keypoints1, std::vector<KeyPoint>* keypoints2,\n                                         float& repeatability, int& correspCount,\n                                         const Ptr<FeatureDetector>& fdetector=Ptr<FeatureDetector>() );\n\nCV_EXPORTS void computeRecallPrecisionCurve( const std::vector<std::vector<DMatch> >& matches1to2,\n                                             const std::vector<std::vector<uchar> >& correctMatches1to2Mask,\n                                             std::vector<Point2f>& recallPrecisionCurve );\n\nCV_EXPORTS float getRecall( const std::vector<Point2f>& recallPrecisionCurve, float l_precision );\nCV_EXPORTS int getNearestPoint( const std::vector<Point2f>& recallPrecisionCurve, float l_precision );\n\n/****************************************************************************************\\\n*                                     Bag of visual words                                *\n\\****************************************************************************************/\n\n//! @addtogroup features2d_category\n//! @{\n\n/** @brief Abstract base class for training the *bag of visual words* vocabulary from a set of descriptors.\n\nFor details, see, for example, *Visual Categorization with Bags of Keypoints* by Gabriella Csurka,\nChristopher R. Dance, Lixin Fan, Jutta Willamowski, Cedric Bray, 2004. :\n */\nclass CV_EXPORTS_W BOWTrainer\n{\npublic:\n    BOWTrainer();\n    virtual ~BOWTrainer();\n\n    /** @brief Adds descriptors to a training set.\n\n    @param descriptors Descriptors to add to a training set. Each row of the descriptors matrix is a\n    descriptor.\n\n    The training set is clustered using clustermethod to construct the vocabulary.\n     */\n    CV_WRAP void add( const Mat& descriptors );\n\n    /** @brief Returns a training set of descriptors.\n    */\n    CV_WRAP const std::vector<Mat>& getDescriptors() const;\n\n    /** @brief Returns the count of all descriptors stored in the training set.\n    */\n    CV_WRAP int descriptorsCount() const;\n\n    CV_WRAP virtual void clear();\n\n    /** @overload */\n    CV_WRAP virtual Mat cluster() const = 0;\n\n    /** @brief Clusters train descriptors.\n\n    @param descriptors Descriptors to cluster. Each row of the descriptors matrix is a descriptor.\n    Descriptors are not added to the inner train descriptor set.\n\n    The vocabulary consists of cluster centers. So, this method returns the vocabulary. In the first\n    variant of the method, train descriptors stored in the object are clustered. In the second variant,\n    input descriptors are clustered.\n     */\n    CV_WRAP virtual Mat cluster( const Mat& descriptors ) const = 0;\n\nprotected:\n    std::vector<Mat> descriptors;\n    int size;\n};\n\n/** @brief kmeans -based class to train visual vocabulary using the *bag of visual words* approach. :\n */\nclass CV_EXPORTS_W BOWKMeansTrainer : public BOWTrainer\n{\npublic:\n    /** @brief The constructor.\n\n    @see cv::kmeans\n    */\n    CV_WRAP BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(),\n                      int attempts=3, int flags=KMEANS_PP_CENTERS );\n    virtual ~BOWKMeansTrainer();\n\n    // Returns trained vocabulary (i.e. cluster centers).\n    CV_WRAP virtual Mat cluster() const;\n    CV_WRAP virtual Mat cluster( const Mat& descriptors ) const;\n\nprotected:\n\n    int clusterCount;\n    TermCriteria termcrit;\n    int attempts;\n    int flags;\n};\n\n/** @brief Class to compute an image descriptor using the *bag of visual words*.\n\nSuch a computation consists of the following steps:\n\n1.  Compute descriptors for a given image and its keypoints set.\n2.  Find the nearest visual words from the vocabulary for each keypoint descriptor.\n3.  Compute the bag-of-words image descriptor as is a normalized histogram of vocabulary words\nencountered in the image. The i-th bin of the histogram is a frequency of i-th word of the\nvocabulary in the given image.\n */\nclass CV_EXPORTS_W BOWImgDescriptorExtractor\n{\npublic:\n    /** @brief The constructor.\n\n    @param dextractor Descriptor extractor that is used to compute descriptors for an input image and\n    its keypoints.\n    @param dmatcher Descriptor matcher that is used to find the nearest word of the trained vocabulary\n    for each keypoint descriptor of the image.\n     */\n    CV_WRAP BOWImgDescriptorExtractor( const Ptr<DescriptorExtractor>& dextractor,\n                               const Ptr<DescriptorMatcher>& dmatcher );\n    /** @overload */\n    BOWImgDescriptorExtractor( const Ptr<DescriptorMatcher>& dmatcher );\n    virtual ~BOWImgDescriptorExtractor();\n\n    /** @brief Sets a visual vocabulary.\n\n    @param vocabulary Vocabulary (can be trained using the inheritor of BOWTrainer ). Each row of the\n    vocabulary is a visual word (cluster center).\n     */\n    CV_WRAP void setVocabulary( const Mat& vocabulary );\n\n    /** @brief Returns the set vocabulary.\n    */\n    CV_WRAP const Mat& getVocabulary() const;\n\n    /** @brief Computes an image descriptor using the set visual vocabulary.\n\n    @param image Image, for which the descriptor is computed.\n    @param keypoints Keypoints detected in the input image.\n    @param imgDescriptor Computed output image descriptor.\n    @param pointIdxsOfClusters Indices of keypoints that belong to the cluster. This means that\n    pointIdxsOfClusters[i] are keypoint indices that belong to the i -th cluster (word of vocabulary)\n    returned if it is non-zero.\n    @param descriptors Descriptors of the image keypoints that are returned if they are non-zero.\n     */\n    void compute( InputArray image, std::vector<KeyPoint>& keypoints, OutputArray imgDescriptor,\n                  std::vector<std::vector<int> >* pointIdxsOfClusters=0, Mat* descriptors=0 );\n    /** @overload\n    @param keypointDescriptors Computed descriptors to match with vocabulary.\n    @param imgDescriptor Computed output image descriptor.\n    @param pointIdxsOfClusters Indices of keypoints that belong to the cluster. This means that\n    pointIdxsOfClusters[i] are keypoint indices that belong to the i -th cluster (word of vocabulary)\n    returned if it is non-zero.\n    */\n    void compute( InputArray keypointDescriptors, OutputArray imgDescriptor,\n                  std::vector<std::vector<int> >* pointIdxsOfClusters=0 );\n    // compute() is not constant because DescriptorMatcher::match is not constant\n\n    CV_WRAP_AS(compute) void compute2( const Mat& image, std::vector<KeyPoint>& keypoints, CV_OUT Mat& imgDescriptor )\n    { compute(image,keypoints,imgDescriptor); }\n\n    /** @brief Returns an image descriptor size if the vocabulary is set. Otherwise, it returns 0.\n    */\n    CV_WRAP int descriptorSize() const;\n\n    /** @brief Returns an image descriptor type.\n     */\n    CV_WRAP int descriptorType() const;\n\nprotected:\n    Mat vocabulary;\n    Ptr<DescriptorExtractor> dextractor;\n    Ptr<DescriptorMatcher> dmatcher;\n};\n\n//! @} features2d_category\n\n//! @} features2d\n\n} /* namespace cv */\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/all_indices.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_ALL_INDICES_H_\n#define OPENCV_FLANN_ALL_INDICES_H_\n\n#include \"general.h\"\n\n#include \"nn_index.h\"\n#include \"kdtree_index.h\"\n#include \"kdtree_single_index.h\"\n#include \"kmeans_index.h\"\n#include \"composite_index.h\"\n#include \"linear_index.h\"\n#include \"hierarchical_clustering_index.h\"\n#include \"lsh_index.h\"\n#include \"autotuned_index.h\"\n\n\nnamespace cvflann\n{\n\ntemplate<typename KDTreeCapability, typename VectorSpace, typename Distance>\nstruct index_creator\n{\n    static NNIndex<Distance>* create(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params, \"algorithm\");\n\n        NNIndex<Distance>* nnIndex;\n        switch (index_type) {\n        case FLANN_INDEX_LINEAR:\n            nnIndex = new LinearIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KDTREE_SINGLE:\n            nnIndex = new KDTreeSingleIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KDTREE:\n            nnIndex = new KDTreeIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KMEANS:\n            nnIndex = new KMeansIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_COMPOSITE:\n            nnIndex = new CompositeIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_AUTOTUNED:\n            nnIndex = new AutotunedIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_HIERARCHICAL:\n            nnIndex = new HierarchicalClusteringIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_LSH:\n            nnIndex = new LshIndex<Distance>(dataset, params, distance);\n            break;\n        default:\n            throw FLANNException(\"Unknown index type\");\n        }\n\n        return nnIndex;\n    }\n};\n\ntemplate<typename VectorSpace, typename Distance>\nstruct index_creator<False,VectorSpace,Distance>\n{\n    static NNIndex<Distance>* create(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params, \"algorithm\");\n\n        NNIndex<Distance>* nnIndex;\n        switch (index_type) {\n        case FLANN_INDEX_LINEAR:\n            nnIndex = new LinearIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KMEANS:\n            nnIndex = new KMeansIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_HIERARCHICAL:\n            nnIndex = new HierarchicalClusteringIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_LSH:\n            nnIndex = new LshIndex<Distance>(dataset, params, distance);\n            break;\n        default:\n            throw FLANNException(\"Unknown index type\");\n        }\n\n        return nnIndex;\n    }\n};\n\ntemplate<typename Distance>\nstruct index_creator<False,False,Distance>\n{\n    static NNIndex<Distance>* create(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params, \"algorithm\");\n\n        NNIndex<Distance>* nnIndex;\n        switch (index_type) {\n        case FLANN_INDEX_LINEAR:\n            nnIndex = new LinearIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_HIERARCHICAL:\n            nnIndex = new HierarchicalClusteringIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_LSH:\n            nnIndex = new LshIndex<Distance>(dataset, params, distance);\n            break;\n        default:\n            throw FLANNException(\"Unknown index type\");\n        }\n\n        return nnIndex;\n    }\n};\n\ntemplate<typename Distance>\nNNIndex<Distance>* create_index_by_type(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n{\n    return index_creator<typename Distance::is_kdtree_distance,\n                         typename Distance::is_vector_space_distance,\n                         Distance>::create(dataset, params,distance);\n}\n\n}\n\n#endif /* OPENCV_FLANN_ALL_INDICES_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/allocator.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_ALLOCATOR_H_\n#define OPENCV_FLANN_ALLOCATOR_H_\n\n#include <stdlib.h>\n#include <stdio.h>\n\n\nnamespace cvflann\n{\n\n/**\n * Allocates (using C's malloc) a generic type T.\n *\n * Params:\n *     count = number of instances to allocate.\n * Returns: pointer (of type T*) to memory buffer\n */\ntemplate <typename T>\nT* allocate(size_t count = 1)\n{\n    T* mem = (T*) ::malloc(sizeof(T)*count);\n    return mem;\n}\n\n\n/**\n * Pooled storage allocator\n *\n * The following routines allow for the efficient allocation of storage in\n * small chunks from a specified pool.  Rather than allowing each structure\n * to be freed individually, an entire pool of storage is freed at once.\n * This method has two advantages over just using malloc() and free().  First,\n * it is far more efficient for allocating small objects, as there is\n * no overhead for remembering all the information needed to free each\n * object or consolidating fragmented memory.  Second, the decision about\n * how long to keep an object is made at the time of allocation, and there\n * is no need to track down all the objects to free them.\n *\n */\n\nconst size_t     WORDSIZE=16;\nconst  size_t     BLOCKSIZE=8192;\n\nclass PooledAllocator\n{\n    /* We maintain memory alignment to word boundaries by requiring that all\n        allocations be in multiples of the machine wordsize.  */\n    /* Size of machine word in bytes.  Must be power of 2. */\n    /* Minimum number of bytes requested at a time from\tthe system.  Must be multiple of WORDSIZE. */\n\n\n    int     remaining;  /* Number of bytes left in current block of storage. */\n    void*   base;     /* Pointer to base of current block of storage. */\n    void*   loc;      /* Current location in block to next allocate memory. */\n    int     blocksize;\n\n\npublic:\n    int     usedMemory;\n    int     wastedMemory;\n\n    /**\n        Default constructor. Initializes a new pool.\n     */\n    PooledAllocator(int blockSize = BLOCKSIZE)\n    {\n        blocksize = blockSize;\n        remaining = 0;\n        base = NULL;\n\n        usedMemory = 0;\n        wastedMemory = 0;\n    }\n\n    /**\n     * Destructor. Frees all the memory allocated in this pool.\n     */\n    ~PooledAllocator()\n    {\n        void* prev;\n\n        while (base != NULL) {\n            prev = *((void**) base); /* Get pointer to prev block. */\n            ::free(base);\n            base = prev;\n        }\n    }\n\n    /**\n     * Returns a pointer to a piece of new memory of the given size in bytes\n     * allocated from the pool.\n     */\n    void* allocateMemory(int size)\n    {\n        int blockSize;\n\n        /* Round size up to a multiple of wordsize.  The following expression\n            only works for WORDSIZE that is a power of 2, by masking last bits of\n            incremented size to zero.\n         */\n        size = (size + (WORDSIZE - 1)) & ~(WORDSIZE - 1);\n\n        /* Check whether a new block must be allocated.  Note that the first word\n            of a block is reserved for a pointer to the previous block.\n         */\n        if (size > remaining) {\n\n            wastedMemory += remaining;\n\n            /* Allocate new storage. */\n            blockSize = (size + sizeof(void*) + (WORDSIZE-1) > BLOCKSIZE) ?\n                        size + sizeof(void*) + (WORDSIZE-1) : BLOCKSIZE;\n\n            // use the standard C malloc to allocate memory\n            void* m = ::malloc(blockSize);\n            if (!m) {\n                fprintf(stderr,\"Failed to allocate memory.\\n\");\n                return NULL;\n            }\n\n            /* Fill first word of new block with pointer to previous block. */\n            ((void**) m)[0] = base;\n            base = m;\n\n            int shift = 0;\n            //int shift = (WORDSIZE - ( (((size_t)m) + sizeof(void*)) & (WORDSIZE-1))) & (WORDSIZE-1);\n\n            remaining = blockSize - sizeof(void*) - shift;\n            loc = ((char*)m + sizeof(void*) + shift);\n        }\n        void* rloc = loc;\n        loc = (char*)loc + size;\n        remaining -= size;\n\n        usedMemory += size;\n\n        return rloc;\n    }\n\n    /**\n     * Allocates (using this pool) a generic type T.\n     *\n     * Params:\n     *     count = number of instances to allocate.\n     * Returns: pointer (of type T*) to memory buffer\n     */\n    template <typename T>\n    T* allocate(size_t count = 1)\n    {\n        T* mem = (T*) this->allocateMemory((int)(sizeof(T)*count));\n        return mem;\n    }\n\n};\n\n}\n\n#endif //OPENCV_FLANN_ALLOCATOR_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/any.h",
    "content": "#ifndef OPENCV_FLANN_ANY_H_\n#define OPENCV_FLANN_ANY_H_\n/*\n * (C) Copyright Christopher Diggins 2005-2011\n * (C) Copyright Pablo Aguilar 2005\n * (C) Copyright Kevlin Henney 2001\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt\n *\n * Adapted for FLANN by Marius Muja\n */\n\n#include \"defines.h\"\n#include <stdexcept>\n#include <ostream>\n#include <typeinfo>\n\nnamespace cvflann\n{\n\nnamespace anyimpl\n{\n\nstruct bad_any_cast\n{\n};\n\nstruct empty_any\n{\n};\n\ninline std::ostream& operator <<(std::ostream& out, const empty_any&)\n{\n    out << \"[empty_any]\";\n    return out;\n}\n\nstruct base_any_policy\n{\n    virtual void static_delete(void** x) = 0;\n    virtual void copy_from_value(void const* src, void** dest) = 0;\n    virtual void clone(void* const* src, void** dest) = 0;\n    virtual void move(void* const* src, void** dest) = 0;\n    virtual void* get_value(void** src) = 0;\n    virtual const void* get_value(void* const * src) = 0;\n    virtual ::size_t get_size() = 0;\n    virtual const std::type_info& type() = 0;\n    virtual void print(std::ostream& out, void* const* src) = 0;\n    virtual ~base_any_policy() {}\n};\n\ntemplate<typename T>\nstruct typed_base_any_policy : base_any_policy\n{\n    virtual ::size_t get_size() { return sizeof(T); }\n    virtual const std::type_info& type() { return typeid(T); }\n\n};\n\ntemplate<typename T>\nstruct small_any_policy : typed_base_any_policy<T>\n{\n    virtual void static_delete(void**) { }\n    virtual void copy_from_value(void const* src, void** dest)\n    {\n        new (dest) T(* reinterpret_cast<T const*>(src));\n    }\n    virtual void clone(void* const* src, void** dest) { *dest = *src; }\n    virtual void move(void* const* src, void** dest) { *dest = *src; }\n    virtual void* get_value(void** src) { return reinterpret_cast<void*>(src); }\n    virtual const void* get_value(void* const * src) { return reinterpret_cast<const void*>(src); }\n    virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast<T const*>(src); }\n};\n\ntemplate<typename T>\nstruct big_any_policy : typed_base_any_policy<T>\n{\n    virtual void static_delete(void** x)\n    {\n        if (* x) delete (* reinterpret_cast<T**>(x)); *x = NULL;\n    }\n    virtual void copy_from_value(void const* src, void** dest)\n    {\n        *dest = new T(*reinterpret_cast<T const*>(src));\n    }\n    virtual void clone(void* const* src, void** dest)\n    {\n        *dest = new T(**reinterpret_cast<T* const*>(src));\n    }\n    virtual void move(void* const* src, void** dest)\n    {\n        (*reinterpret_cast<T**>(dest))->~T();\n        **reinterpret_cast<T**>(dest) = **reinterpret_cast<T* const*>(src);\n    }\n    virtual void* get_value(void** src) { return *src; }\n    virtual const void* get_value(void* const * src) { return *src; }\n    virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast<T const*>(*src); }\n};\n\ntemplate<> inline void big_any_policy<flann_centers_init_t>::print(std::ostream& out, void* const* src)\n{\n    out << int(*reinterpret_cast<flann_centers_init_t const*>(*src));\n}\n\ntemplate<> inline void big_any_policy<flann_algorithm_t>::print(std::ostream& out, void* const* src)\n{\n    out << int(*reinterpret_cast<flann_algorithm_t const*>(*src));\n}\n\ntemplate<> inline void big_any_policy<cv::String>::print(std::ostream& out, void* const* src)\n{\n    out << (*reinterpret_cast<cv::String const*>(*src)).c_str();\n}\n\ntemplate<typename T>\nstruct choose_policy\n{\n    typedef big_any_policy<T> type;\n};\n\ntemplate<typename T>\nstruct choose_policy<T*>\n{\n    typedef small_any_policy<T*> type;\n};\n\nstruct any;\n\n/// Choosing the policy for an any type is illegal, but should never happen.\n/// This is designed to throw a compiler error.\ntemplate<>\nstruct choose_policy<any>\n{\n    typedef void type;\n};\n\n/// Specializations for small types.\n#define SMALL_POLICY(TYPE) \\\n    template<> \\\n    struct choose_policy<TYPE> { typedef small_any_policy<TYPE> type; \\\n    }\n\nSMALL_POLICY(signed char);\nSMALL_POLICY(unsigned char);\nSMALL_POLICY(signed short);\nSMALL_POLICY(unsigned short);\nSMALL_POLICY(signed int);\nSMALL_POLICY(unsigned int);\nSMALL_POLICY(signed long);\nSMALL_POLICY(unsigned long);\nSMALL_POLICY(float);\nSMALL_POLICY(bool);\n\n#undef SMALL_POLICY\n\ntemplate <typename T>\nclass SinglePolicy\n{\n    SinglePolicy();\n    SinglePolicy(const SinglePolicy& other);\n    SinglePolicy& operator=(const SinglePolicy& other);\n\npublic:\n    static base_any_policy* get_policy();\n\nprivate:\n    static typename choose_policy<T>::type policy;\n};\n\ntemplate <typename T>\ntypename choose_policy<T>::type SinglePolicy<T>::policy;\n\n/// This function will return a different policy for each type.\ntemplate <typename T>\ninline base_any_policy* SinglePolicy<T>::get_policy() { return &policy; }\n\n} // namespace anyimpl\n\nstruct any\n{\nprivate:\n    // fields\n    anyimpl::base_any_policy* policy;\n    void* object;\n\npublic:\n    /// Initializing constructor.\n    template <typename T>\n    any(const T& x)\n        : policy(anyimpl::SinglePolicy<anyimpl::empty_any>::get_policy()), object(NULL)\n    {\n        assign(x);\n    }\n\n    /// Empty constructor.\n    any()\n        : policy(anyimpl::SinglePolicy<anyimpl::empty_any>::get_policy()), object(NULL)\n    { }\n\n    /// Special initializing constructor for string literals.\n    any(const char* x)\n        : policy(anyimpl::SinglePolicy<anyimpl::empty_any>::get_policy()), object(NULL)\n    {\n        assign(x);\n    }\n\n    /// Copy constructor.\n    any(const any& x)\n        : policy(anyimpl::SinglePolicy<anyimpl::empty_any>::get_policy()), object(NULL)\n    {\n        assign(x);\n    }\n\n    /// Destructor.\n    ~any()\n    {\n        policy->static_delete(&object);\n    }\n\n    /// Assignment function from another any.\n    any& assign(const any& x)\n    {\n        reset();\n        policy = x.policy;\n        policy->clone(&x.object, &object);\n        return *this;\n    }\n\n    /// Assignment function.\n    template <typename T>\n    any& assign(const T& x)\n    {\n        reset();\n        policy = anyimpl::SinglePolicy<T>::get_policy();\n        policy->copy_from_value(&x, &object);\n        return *this;\n    }\n\n    /// Assignment operator.\n    template<typename T>\n    any& operator=(const T& x)\n    {\n        return assign(x);\n    }\n\n    /// Assignment operator, specialed for literal strings.\n    /// They have types like const char [6] which don't work as expected.\n    any& operator=(const char* x)\n    {\n        return assign(x);\n    }\n\n    /// Utility functions\n    any& swap(any& x)\n    {\n        std::swap(policy, x.policy);\n        std::swap(object, x.object);\n        return *this;\n    }\n\n    /// Cast operator. You can only cast to the original type.\n    template<typename T>\n    T& cast()\n    {\n        if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast();\n        T* r = reinterpret_cast<T*>(policy->get_value(&object));\n        return *r;\n    }\n\n    /// Cast operator. You can only cast to the original type.\n    template<typename T>\n    const T& cast() const\n    {\n        if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast();\n        const T* r = reinterpret_cast<const T*>(policy->get_value(&object));\n        return *r;\n    }\n\n    /// Returns true if the any contains no value.\n    bool empty() const\n    {\n        return policy->type() == typeid(anyimpl::empty_any);\n    }\n\n    /// Frees any allocated memory, and sets the value to NULL.\n    void reset()\n    {\n        policy->static_delete(&object);\n        policy = anyimpl::SinglePolicy<anyimpl::empty_any>::get_policy();\n    }\n\n    /// Returns true if the two types are the same.\n    bool compatible(const any& x) const\n    {\n        return policy->type() == x.policy->type();\n    }\n\n    /// Returns if the type is compatible with the policy\n    template<typename T>\n    bool has_type()\n    {\n        return policy->type() == typeid(T);\n    }\n\n    const std::type_info& type() const\n    {\n        return policy->type();\n    }\n\n    friend std::ostream& operator <<(std::ostream& out, const any& any_val);\n};\n\ninline std::ostream& operator <<(std::ostream& out, const any& any_val)\n{\n    any_val.policy->print(out,&any_val.object);\n    return out;\n}\n\n}\n\n#endif // OPENCV_FLANN_ANY_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/autotuned_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n#ifndef OPENCV_FLANN_AUTOTUNED_INDEX_H_\n#define OPENCV_FLANN_AUTOTUNED_INDEX_H_\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"ground_truth.h\"\n#include \"index_testing.h\"\n#include \"sampling.h\"\n#include \"kdtree_index.h\"\n#include \"kdtree_single_index.h\"\n#include \"kmeans_index.h\"\n#include \"composite_index.h\"\n#include \"linear_index.h\"\n#include \"logger.h\"\n\nnamespace cvflann\n{\n\ntemplate<typename Distance>\nNNIndex<Distance>* create_index_by_type(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance);\n\n\nstruct AutotunedIndexParams : public IndexParams\n{\n    AutotunedIndexParams(float target_precision = 0.8, float build_weight = 0.01, float memory_weight = 0, float sample_fraction = 0.1)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_AUTOTUNED;\n        // precision desired (used for autotuning, -1 otherwise)\n        (*this)[\"target_precision\"] = target_precision;\n        // build tree time weighting factor\n        (*this)[\"build_weight\"] = build_weight;\n        // index memory weighting factor\n        (*this)[\"memory_weight\"] = memory_weight;\n        // what fraction of the dataset to use for autotuning\n        (*this)[\"sample_fraction\"] = sample_fraction;\n    }\n};\n\n\ntemplate <typename Distance>\nclass AutotunedIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    AutotunedIndex(const Matrix<ElementType>& inputData, const IndexParams& params = AutotunedIndexParams(), Distance d = Distance()) :\n        dataset_(inputData), distance_(d)\n    {\n        target_precision_ = get_param(params, \"target_precision\",0.8f);\n        build_weight_ =  get_param(params,\"build_weight\", 0.01f);\n        memory_weight_ = get_param(params, \"memory_weight\", 0.0f);\n        sample_fraction_ = get_param(params,\"sample_fraction\", 0.1f);\n        bestIndex_ = NULL;\n    }\n\n    AutotunedIndex(const AutotunedIndex&);\n    AutotunedIndex& operator=(const AutotunedIndex&);\n\n    virtual ~AutotunedIndex()\n    {\n        if (bestIndex_ != NULL) {\n            delete bestIndex_;\n            bestIndex_ = NULL;\n        }\n    }\n\n    /**\n     *          Method responsible with building the index.\n     */\n    virtual void buildIndex()\n    {\n        std::ostringstream stream;\n        bestParams_ = estimateBuildParams();\n        print_params(bestParams_, stream);\n        Logger::info(\"----------------------------------------------------\\n\");\n        Logger::info(\"Autotuned parameters:\\n\");\n        Logger::info(\"%s\", stream.str().c_str());\n        Logger::info(\"----------------------------------------------------\\n\");\n\n        bestIndex_ = create_index_by_type(dataset_, bestParams_, distance_);\n        bestIndex_->buildIndex();\n        speedup_ = estimateSearchParams(bestSearchParams_);\n        stream.str(std::string());\n        print_params(bestSearchParams_, stream);\n        Logger::info(\"----------------------------------------------------\\n\");\n        Logger::info(\"Search parameters:\\n\");\n        Logger::info(\"%s\", stream.str().c_str());\n        Logger::info(\"----------------------------------------------------\\n\");\n    }\n\n    /**\n     *  Saves the index to a stream\n     */\n    virtual void saveIndex(FILE* stream)\n    {\n        save_value(stream, (int)bestIndex_->getType());\n        bestIndex_->saveIndex(stream);\n        save_value(stream, get_param<int>(bestSearchParams_, \"checks\"));\n    }\n\n    /**\n     *  Loads the index from a stream\n     */\n    virtual void loadIndex(FILE* stream)\n    {\n        int index_type;\n\n        load_value(stream, index_type);\n        IndexParams params;\n        params[\"algorithm\"] = (flann_algorithm_t)index_type;\n        bestIndex_ = create_index_by_type<Distance>(dataset_, params, distance_);\n        bestIndex_->loadIndex(stream);\n        int checks;\n        load_value(stream, checks);\n        bestSearchParams_[\"checks\"] = checks;\n    }\n\n    /**\n     *      Method that searches for nearest-neighbors\n     */\n    virtual void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        int checks = get_param<int>(searchParams,\"checks\",FLANN_CHECKS_AUTOTUNED);\n        if (checks == FLANN_CHECKS_AUTOTUNED) {\n            bestIndex_->findNeighbors(result, vec, bestSearchParams_);\n        }\n        else {\n            bestIndex_->findNeighbors(result, vec, searchParams);\n        }\n    }\n\n\n    IndexParams getParameters() const\n    {\n        return bestIndex_->getParameters();\n    }\n\n    SearchParams getSearchParameters() const\n    {\n        return bestSearchParams_;\n    }\n\n    float getSpeedup() const\n    {\n        return speedup_;\n    }\n\n\n    /**\n     *      Number of features in this index.\n     */\n    virtual size_t size() const\n    {\n        return bestIndex_->size();\n    }\n\n    /**\n     *  The length of each vector in this index.\n     */\n    virtual size_t veclen() const\n    {\n        return bestIndex_->veclen();\n    }\n\n    /**\n     * The amount of memory (in bytes) this index uses.\n     */\n    virtual int usedMemory() const\n    {\n        return bestIndex_->usedMemory();\n    }\n\n    /**\n     * Algorithm name\n     */\n    virtual flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_AUTOTUNED;\n    }\n\nprivate:\n\n    struct CostData\n    {\n        float searchTimeCost;\n        float buildTimeCost;\n        float memoryCost;\n        float totalCost;\n        IndexParams params;\n    };\n\n    void evaluate_kmeans(CostData& cost)\n    {\n        StartStopTimer t;\n        int checks;\n        const int nn = 1;\n\n        Logger::info(\"KMeansTree using params: max_iterations=%d, branching=%d\\n\",\n                     get_param<int>(cost.params,\"iterations\"),\n                     get_param<int>(cost.params,\"branching\"));\n        KMeansIndex<Distance> kmeans(sampledDataset_, cost.params, distance_);\n        // measure index build time\n        t.start();\n        kmeans.buildIndex();\n        t.stop();\n        float buildTime = (float)t.value;\n\n        // measure search time\n        float searchTime = test_index_precision(kmeans, sampledDataset_, testDataset_, gt_matches_, target_precision_, checks, distance_, nn);\n\n        float datasetMemory = float(sampledDataset_.rows * sampledDataset_.cols * sizeof(float));\n        cost.memoryCost = (kmeans.usedMemory() + datasetMemory) / datasetMemory;\n        cost.searchTimeCost = searchTime;\n        cost.buildTimeCost = buildTime;\n        Logger::info(\"KMeansTree buildTime=%g, searchTime=%g, build_weight=%g\\n\", buildTime, searchTime, build_weight_);\n    }\n\n\n    void evaluate_kdtree(CostData& cost)\n    {\n        StartStopTimer t;\n        int checks;\n        const int nn = 1;\n\n        Logger::info(\"KDTree using params: trees=%d\\n\", get_param<int>(cost.params,\"trees\"));\n        KDTreeIndex<Distance> kdtree(sampledDataset_, cost.params, distance_);\n\n        t.start();\n        kdtree.buildIndex();\n        t.stop();\n        float buildTime = (float)t.value;\n\n        //measure search time\n        float searchTime = test_index_precision(kdtree, sampledDataset_, testDataset_, gt_matches_, target_precision_, checks, distance_, nn);\n\n        float datasetMemory = float(sampledDataset_.rows * sampledDataset_.cols * sizeof(float));\n        cost.memoryCost = (kdtree.usedMemory() + datasetMemory) / datasetMemory;\n        cost.searchTimeCost = searchTime;\n        cost.buildTimeCost = buildTime;\n        Logger::info(\"KDTree buildTime=%g, searchTime=%g\\n\", buildTime, searchTime);\n    }\n\n\n    //    struct KMeansSimpleDownhillFunctor {\n    //\n    //        Autotune& autotuner;\n    //        KMeansSimpleDownhillFunctor(Autotune& autotuner_) : autotuner(autotuner_) {}\n    //\n    //        float operator()(int* params) {\n    //\n    //            float maxFloat = numeric_limits<float>::max();\n    //\n    //            if (params[0]<2) return maxFloat;\n    //            if (params[1]<0) return maxFloat;\n    //\n    //            CostData c;\n    //            c.params[\"algorithm\"] = KMEANS;\n    //            c.params[\"centers-init\"] = CENTERS_RANDOM;\n    //            c.params[\"branching\"] = params[0];\n    //            c.params[\"max-iterations\"] = params[1];\n    //\n    //            autotuner.evaluate_kmeans(c);\n    //\n    //            return c.timeCost;\n    //\n    //        }\n    //    };\n    //\n    //    struct KDTreeSimpleDownhillFunctor {\n    //\n    //        Autotune& autotuner;\n    //        KDTreeSimpleDownhillFunctor(Autotune& autotuner_) : autotuner(autotuner_) {}\n    //\n    //        float operator()(int* params) {\n    //            float maxFloat = numeric_limits<float>::max();\n    //\n    //            if (params[0]<1) return maxFloat;\n    //\n    //            CostData c;\n    //            c.params[\"algorithm\"] = KDTREE;\n    //            c.params[\"trees\"] = params[0];\n    //\n    //            autotuner.evaluate_kdtree(c);\n    //\n    //            return c.timeCost;\n    //\n    //        }\n    //    };\n\n\n\n    void optimizeKMeans(std::vector<CostData>& costs)\n    {\n        Logger::info(\"KMEANS, Step 1: Exploring parameter space\\n\");\n\n        // explore kmeans parameters space using combinations of the parameters below\n        int maxIterations[] = { 1, 5, 10, 15 };\n        int branchingFactors[] = { 16, 32, 64, 128, 256 };\n\n        int kmeansParamSpaceSize = FLANN_ARRAY_LEN(maxIterations) * FLANN_ARRAY_LEN(branchingFactors);\n        costs.reserve(costs.size() + kmeansParamSpaceSize);\n\n        // evaluate kmeans for all parameter combinations\n        for (size_t i = 0; i < FLANN_ARRAY_LEN(maxIterations); ++i) {\n            for (size_t j = 0; j < FLANN_ARRAY_LEN(branchingFactors); ++j) {\n                CostData cost;\n                cost.params[\"algorithm\"] = FLANN_INDEX_KMEANS;\n                cost.params[\"centers_init\"] = FLANN_CENTERS_RANDOM;\n                cost.params[\"iterations\"] = maxIterations[i];\n                cost.params[\"branching\"] = branchingFactors[j];\n\n                evaluate_kmeans(cost);\n                costs.push_back(cost);\n            }\n        }\n\n        //         Logger::info(\"KMEANS, Step 2: simplex-downhill optimization\\n\");\n        //\n        //         const int n = 2;\n        //         // choose initial simplex points as the best parameters so far\n        //         int kmeansNMPoints[n*(n+1)];\n        //         float kmeansVals[n+1];\n        //         for (int i=0;i<n+1;++i) {\n        //             kmeansNMPoints[i*n] = (int)kmeansCosts[i].params[\"branching\"];\n        //             kmeansNMPoints[i*n+1] = (int)kmeansCosts[i].params[\"max-iterations\"];\n        //             kmeansVals[i] = kmeansCosts[i].timeCost;\n        //         }\n        //         KMeansSimpleDownhillFunctor kmeans_cost_func(*this);\n        //         // run optimization\n        //         optimizeSimplexDownhill(kmeansNMPoints,n,kmeans_cost_func,kmeansVals);\n        //         // store results\n        //         for (int i=0;i<n+1;++i) {\n        //             kmeansCosts[i].params[\"branching\"] = kmeansNMPoints[i*2];\n        //             kmeansCosts[i].params[\"max-iterations\"] = kmeansNMPoints[i*2+1];\n        //             kmeansCosts[i].timeCost = kmeansVals[i];\n        //         }\n    }\n\n\n    void optimizeKDTree(std::vector<CostData>& costs)\n    {\n        Logger::info(\"KD-TREE, Step 1: Exploring parameter space\\n\");\n\n        // explore kd-tree parameters space using the parameters below\n        int testTrees[] = { 1, 4, 8, 16, 32 };\n\n        // evaluate kdtree for all parameter combinations\n        for (size_t i = 0; i < FLANN_ARRAY_LEN(testTrees); ++i) {\n            CostData cost;\n            cost.params[\"algorithm\"] = FLANN_INDEX_KDTREE;\n            cost.params[\"trees\"] = testTrees[i];\n\n            evaluate_kdtree(cost);\n            costs.push_back(cost);\n        }\n\n        //         Logger::info(\"KD-TREE, Step 2: simplex-downhill optimization\\n\");\n        //\n        //         const int n = 1;\n        //         // choose initial simplex points as the best parameters so far\n        //         int kdtreeNMPoints[n*(n+1)];\n        //         float kdtreeVals[n+1];\n        //         for (int i=0;i<n+1;++i) {\n        //             kdtreeNMPoints[i] = (int)kdtreeCosts[i].params[\"trees\"];\n        //             kdtreeVals[i] = kdtreeCosts[i].timeCost;\n        //         }\n        //         KDTreeSimpleDownhillFunctor kdtree_cost_func(*this);\n        //         // run optimization\n        //         optimizeSimplexDownhill(kdtreeNMPoints,n,kdtree_cost_func,kdtreeVals);\n        //         // store results\n        //         for (int i=0;i<n+1;++i) {\n        //             kdtreeCosts[i].params[\"trees\"] = kdtreeNMPoints[i];\n        //             kdtreeCosts[i].timeCost = kdtreeVals[i];\n        //         }\n    }\n\n    /**\n     *  Chooses the best nearest-neighbor algorithm and estimates the optimal\n     *  parameters to use when building the index (for a given precision).\n     *  Returns a dictionary with the optimal parameters.\n     */\n    IndexParams estimateBuildParams()\n    {\n        std::vector<CostData> costs;\n\n        int sampleSize = int(sample_fraction_ * dataset_.rows);\n        int testSampleSize = std::min(sampleSize / 10, 1000);\n\n        Logger::info(\"Entering autotuning, dataset size: %d, sampleSize: %d, testSampleSize: %d, target precision: %g\\n\", dataset_.rows, sampleSize, testSampleSize, target_precision_);\n\n        // For a very small dataset, it makes no sense to build any fancy index, just\n        // use linear search\n        if (testSampleSize < 10) {\n            Logger::info(\"Choosing linear, dataset too small\\n\");\n            return LinearIndexParams();\n        }\n\n        // We use a fraction of the original dataset to speedup the autotune algorithm\n        sampledDataset_ = random_sample(dataset_, sampleSize);\n        // We use a cross-validation approach, first we sample a testset from the dataset\n        testDataset_ = random_sample(sampledDataset_, testSampleSize, true);\n\n        // We compute the ground truth using linear search\n        Logger::info(\"Computing ground truth... \\n\");\n        gt_matches_ = Matrix<int>(new int[testDataset_.rows], testDataset_.rows, 1);\n        StartStopTimer t;\n        t.start();\n        compute_ground_truth<Distance>(sampledDataset_, testDataset_, gt_matches_, 0, distance_);\n        t.stop();\n\n        CostData linear_cost;\n        linear_cost.searchTimeCost = (float)t.value;\n        linear_cost.buildTimeCost = 0;\n        linear_cost.memoryCost = 0;\n        linear_cost.params[\"algorithm\"] = FLANN_INDEX_LINEAR;\n\n        costs.push_back(linear_cost);\n\n        // Start parameter autotune process\n        Logger::info(\"Autotuning parameters...\\n\");\n\n        optimizeKMeans(costs);\n        optimizeKDTree(costs);\n\n        float bestTimeCost = costs[0].searchTimeCost;\n        for (size_t i = 0; i < costs.size(); ++i) {\n            float timeCost = costs[i].buildTimeCost * build_weight_ + costs[i].searchTimeCost;\n            if (timeCost < bestTimeCost) {\n                bestTimeCost = timeCost;\n            }\n        }\n\n        float bestCost = costs[0].searchTimeCost / bestTimeCost;\n        IndexParams bestParams = costs[0].params;\n        if (bestTimeCost > 0) {\n            for (size_t i = 0; i < costs.size(); ++i) {\n                float crtCost = (costs[i].buildTimeCost * build_weight_ + costs[i].searchTimeCost) / bestTimeCost +\n                                memory_weight_ * costs[i].memoryCost;\n                if (crtCost < bestCost) {\n                    bestCost = crtCost;\n                    bestParams = costs[i].params;\n                }\n            }\n        }\n\n        delete[] gt_matches_.data;\n        delete[] testDataset_.data;\n        delete[] sampledDataset_.data;\n\n        return bestParams;\n    }\n\n\n\n    /**\n     *  Estimates the search time parameters needed to get the desired precision.\n     *  Precondition: the index is built\n     *  Postcondition: the searchParams will have the optimum params set, also the speedup obtained over linear search.\n     */\n    float estimateSearchParams(SearchParams& searchParams)\n    {\n        const int nn = 1;\n        const size_t SAMPLE_COUNT = 1000;\n\n        assert(bestIndex_ != NULL); // must have a valid index\n\n        float speedup = 0;\n\n        int samples = (int)std::min(dataset_.rows / 10, SAMPLE_COUNT);\n        if (samples > 0) {\n            Matrix<ElementType> testDataset = random_sample(dataset_, samples);\n\n            Logger::info(\"Computing ground truth\\n\");\n\n            // we need to compute the ground truth first\n            Matrix<int> gt_matches(new int[testDataset.rows], testDataset.rows, 1);\n            StartStopTimer t;\n            t.start();\n            compute_ground_truth<Distance>(dataset_, testDataset, gt_matches, 1, distance_);\n            t.stop();\n            float linear = (float)t.value;\n\n            int checks;\n            Logger::info(\"Estimating number of checks\\n\");\n\n            float searchTime;\n            float cb_index;\n            if (bestIndex_->getType() == FLANN_INDEX_KMEANS) {\n                Logger::info(\"KMeans algorithm, estimating cluster border factor\\n\");\n                KMeansIndex<Distance>* kmeans = (KMeansIndex<Distance>*)bestIndex_;\n                float bestSearchTime = -1;\n                float best_cb_index = -1;\n                int best_checks = -1;\n                for (cb_index = 0; cb_index < 1.1f; cb_index += 0.2f) {\n                    kmeans->set_cb_index(cb_index);\n                    searchTime = test_index_precision(*kmeans, dataset_, testDataset, gt_matches, target_precision_, checks, distance_, nn, 1);\n                    if ((searchTime < bestSearchTime) || (bestSearchTime == -1)) {\n                        bestSearchTime = searchTime;\n                        best_cb_index = cb_index;\n                        best_checks = checks;\n                    }\n                }\n                searchTime = bestSearchTime;\n                cb_index = best_cb_index;\n                checks = best_checks;\n\n                kmeans->set_cb_index(best_cb_index);\n                Logger::info(\"Optimum cb_index: %g\\n\", cb_index);\n                bestParams_[\"cb_index\"] = cb_index;\n            }\n            else {\n                searchTime = test_index_precision(*bestIndex_, dataset_, testDataset, gt_matches, target_precision_, checks, distance_, nn, 1);\n            }\n\n            Logger::info(\"Required number of checks: %d \\n\", checks);\n            searchParams[\"checks\"] = checks;\n\n            speedup = linear / searchTime;\n\n            delete[] gt_matches.data;\n            delete[] testDataset.data;\n        }\n\n        return speedup;\n    }\n\nprivate:\n    NNIndex<Distance>* bestIndex_;\n\n    IndexParams bestParams_;\n    SearchParams bestSearchParams_;\n\n    Matrix<ElementType> sampledDataset_;\n    Matrix<ElementType> testDataset_;\n    Matrix<int> gt_matches_;\n\n    float speedup_;\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    /**\n     * Index parameters\n     */\n    float target_precision_;\n    float build_weight_;\n    float memory_weight_;\n    float sample_fraction_;\n\n    Distance distance_;\n\n\n};\n}\n\n#endif /* OPENCV_FLANN_AUTOTUNED_INDEX_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/composite_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_COMPOSITE_INDEX_H_\n#define OPENCV_FLANN_COMPOSITE_INDEX_H_\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"kdtree_index.h\"\n#include \"kmeans_index.h\"\n\nnamespace cvflann\n{\n\n/**\n * Index parameters for the CompositeIndex.\n */\nstruct CompositeIndexParams : public IndexParams\n{\n    CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11,\n                         flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM, float cb_index = 0.2 )\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KMEANS;\n        // number of randomized trees to use (for kdtree)\n        (*this)[\"trees\"] = trees;\n        // branching factor\n        (*this)[\"branching\"] = branching;\n        // max iterations to perform in one kmeans clustering (kmeans tree)\n        (*this)[\"iterations\"] = iterations;\n        // algorithm used for picking the initial cluster centers for kmeans tree\n        (*this)[\"centers_init\"] = centers_init;\n        // cluster boundary index. Used when searching the kmeans tree\n        (*this)[\"cb_index\"] = cb_index;\n    }\n};\n\n\n/**\n * This index builds a kd-tree index and a k-means index and performs nearest\n * neighbour search both indexes. This gives a slight boost in search performance\n * as some of the neighbours that are missed by one index are found by the other.\n */\ntemplate <typename Distance>\nclass CompositeIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    /**\n     * Index constructor\n     * @param inputData dataset containing the points to index\n     * @param params Index parameters\n     * @param d Distance functor\n     * @return\n     */\n    CompositeIndex(const Matrix<ElementType>& inputData, const IndexParams& params = CompositeIndexParams(),\n                   Distance d = Distance()) : index_params_(params)\n    {\n        kdtree_index_ = new KDTreeIndex<Distance>(inputData, params, d);\n        kmeans_index_ = new KMeansIndex<Distance>(inputData, params, d);\n\n    }\n\n    CompositeIndex(const CompositeIndex&);\n    CompositeIndex& operator=(const CompositeIndex&);\n\n    virtual ~CompositeIndex()\n    {\n        delete kdtree_index_;\n        delete kmeans_index_;\n    }\n\n    /**\n     * @return The index type\n     */\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_COMPOSITE;\n    }\n\n    /**\n     * @return Size of the index\n     */\n    size_t size() const\n    {\n        return kdtree_index_->size();\n    }\n\n    /**\n     * \\returns The dimensionality of the features in this index.\n     */\n    size_t veclen() const\n    {\n        return kdtree_index_->veclen();\n    }\n\n    /**\n     * \\returns The amount of memory (in bytes) used by the index.\n     */\n    int usedMemory() const\n    {\n        return kmeans_index_->usedMemory() + kdtree_index_->usedMemory();\n    }\n\n    /**\n     * \\brief Builds the index\n     */\n    void buildIndex()\n    {\n        Logger::info(\"Building kmeans tree...\\n\");\n        kmeans_index_->buildIndex();\n        Logger::info(\"Building kdtree tree...\\n\");\n        kdtree_index_->buildIndex();\n    }\n\n    /**\n     * \\brief Saves the index to a stream\n     * \\param stream The stream to save the index to\n     */\n    void saveIndex(FILE* stream)\n    {\n        kmeans_index_->saveIndex(stream);\n        kdtree_index_->saveIndex(stream);\n    }\n\n    /**\n     * \\brief Loads the index from a stream\n     * \\param stream The stream from which the index is loaded\n     */\n    void loadIndex(FILE* stream)\n    {\n        kmeans_index_->loadIndex(stream);\n        kdtree_index_->loadIndex(stream);\n    }\n\n    /**\n     * \\returns The index parameters\n     */\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n    /**\n     * \\brief Method that searches for nearest-neighbours\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        kmeans_index_->findNeighbors(result, vec, searchParams);\n        kdtree_index_->findNeighbors(result, vec, searchParams);\n    }\n\nprivate:\n    /** The k-means index */\n    KMeansIndex<Distance>* kmeans_index_;\n\n    /** The kd-tree index */\n    KDTreeIndex<Distance>* kdtree_index_;\n\n    /** The index parameters */\n    const IndexParams index_params_;\n};\n\n}\n\n#endif //OPENCV_FLANN_COMPOSITE_INDEX_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/config.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_CONFIG_H_\n#define OPENCV_FLANN_CONFIG_H_\n\n#ifdef FLANN_VERSION_\n#undef FLANN_VERSION_\n#endif\n#define FLANN_VERSION_ \"1.6.10\"\n\n#endif /* OPENCV_FLANN_CONFIG_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/defines.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_DEFINES_H_\n#define OPENCV_FLANN_DEFINES_H_\n\n#include \"config.h\"\n\n#ifdef FLANN_EXPORT\n#undef FLANN_EXPORT\n#endif\n#ifdef WIN32\n/* win32 dll export/import directives */\n #ifdef FLANN_EXPORTS\n  #define FLANN_EXPORT __declspec(dllexport)\n #elif defined(FLANN_STATIC)\n  #define FLANN_EXPORT\n #else\n  #define FLANN_EXPORT __declspec(dllimport)\n #endif\n#else\n/* unix needs nothing */\n #define FLANN_EXPORT\n#endif\n\n\n#ifdef FLANN_DEPRECATED\n#undef FLANN_DEPRECATED\n#endif\n#ifdef __GNUC__\n#define FLANN_DEPRECATED __attribute__ ((deprecated))\n#elif defined(_MSC_VER)\n#define FLANN_DEPRECATED __declspec(deprecated)\n#else\n#pragma message(\"WARNING: You need to implement FLANN_DEPRECATED for this compiler\")\n#define FLANN_DEPRECATED\n#endif\n\n\n#undef FLANN_PLATFORM_32_BIT\n#undef FLANN_PLATFORM_64_BIT\n#if defined __amd64__ || defined __x86_64__ || defined _WIN64 || defined _M_X64\n#define FLANN_PLATFORM_64_BIT\n#else\n#define FLANN_PLATFORM_32_BIT\n#endif\n\n\n#undef FLANN_ARRAY_LEN\n#define FLANN_ARRAY_LEN(a) (sizeof(a)/sizeof(a[0]))\n\nnamespace cvflann {\n\n/* Nearest neighbour index algorithms */\nenum flann_algorithm_t\n{\n    FLANN_INDEX_LINEAR = 0,\n    FLANN_INDEX_KDTREE = 1,\n    FLANN_INDEX_KMEANS = 2,\n    FLANN_INDEX_COMPOSITE = 3,\n    FLANN_INDEX_KDTREE_SINGLE = 4,\n    FLANN_INDEX_HIERARCHICAL = 5,\n    FLANN_INDEX_LSH = 6,\n    FLANN_INDEX_SAVED = 254,\n    FLANN_INDEX_AUTOTUNED = 255,\n\n    // deprecated constants, should use the FLANN_INDEX_* ones instead\n    LINEAR = 0,\n    KDTREE = 1,\n    KMEANS = 2,\n    COMPOSITE = 3,\n    KDTREE_SINGLE = 4,\n    SAVED = 254,\n    AUTOTUNED = 255\n};\n\n\n\nenum flann_centers_init_t\n{\n    FLANN_CENTERS_RANDOM = 0,\n    FLANN_CENTERS_GONZALES = 1,\n    FLANN_CENTERS_KMEANSPP = 2,\n    FLANN_CENTERS_GROUPWISE = 3,\n\n    // deprecated constants, should use the FLANN_CENTERS_* ones instead\n    CENTERS_RANDOM = 0,\n    CENTERS_GONZALES = 1,\n    CENTERS_KMEANSPP = 2\n};\n\nenum flann_log_level_t\n{\n    FLANN_LOG_NONE = 0,\n    FLANN_LOG_FATAL = 1,\n    FLANN_LOG_ERROR = 2,\n    FLANN_LOG_WARN = 3,\n    FLANN_LOG_INFO = 4\n};\n\nenum flann_distance_t\n{\n    FLANN_DIST_EUCLIDEAN = 1,\n    FLANN_DIST_L2 = 1,\n    FLANN_DIST_MANHATTAN = 2,\n    FLANN_DIST_L1 = 2,\n    FLANN_DIST_MINKOWSKI = 3,\n    FLANN_DIST_MAX   = 4,\n    FLANN_DIST_HIST_INTERSECT   = 5,\n    FLANN_DIST_HELLINGER = 6,\n    FLANN_DIST_CHI_SQUARE = 7,\n    FLANN_DIST_CS         = 7,\n    FLANN_DIST_KULLBACK_LEIBLER  = 8,\n    FLANN_DIST_KL                = 8,\n    FLANN_DIST_HAMMING          = 9,\n\n    // deprecated constants, should use the FLANN_DIST_* ones instead\n    EUCLIDEAN = 1,\n    MANHATTAN = 2,\n    MINKOWSKI = 3,\n    MAX_DIST   = 4,\n    HIST_INTERSECT   = 5,\n    HELLINGER = 6,\n    CS         = 7,\n    KL         = 8,\n    KULLBACK_LEIBLER  = 8\n};\n\nenum flann_datatype_t\n{\n    FLANN_INT8 = 0,\n    FLANN_INT16 = 1,\n    FLANN_INT32 = 2,\n    FLANN_INT64 = 3,\n    FLANN_UINT8 = 4,\n    FLANN_UINT16 = 5,\n    FLANN_UINT32 = 6,\n    FLANN_UINT64 = 7,\n    FLANN_FLOAT32 = 8,\n    FLANN_FLOAT64 = 9\n};\n\nenum\n{\n    FLANN_CHECKS_UNLIMITED = -1,\n    FLANN_CHECKS_AUTOTUNED = -2\n};\n\n}\n\n#endif /* OPENCV_FLANN_DEFINES_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/dist.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_DIST_H_\n#define OPENCV_FLANN_DIST_H_\n\n#include <cmath>\n#include <cstdlib>\n#include <string.h>\n#ifdef _MSC_VER\ntypedef unsigned __int32 uint32_t;\ntypedef unsigned __int64 uint64_t;\n#else\n#include <stdint.h>\n#endif\n\n#include \"defines.h\"\n\n#if (defined WIN32 || defined _WIN32) && defined(_M_ARM)\n# include <Intrin.h>\n#endif\n\n#ifdef __ARM_NEON__\n# include \"arm_neon.h\"\n#endif\n\nnamespace cvflann\n{\n\ntemplate<typename T>\ninline T abs(T x) { return (x<0) ? -x : x; }\n\ntemplate<>\ninline int abs<int>(int x) { return ::abs(x); }\n\ntemplate<>\ninline float abs<float>(float x) { return fabsf(x); }\n\ntemplate<>\ninline double abs<double>(double x) { return fabs(x); }\n\ntemplate<typename T>\nstruct Accumulator { typedef T Type; };\ntemplate<>\nstruct Accumulator<unsigned char>  { typedef float Type; };\ntemplate<>\nstruct Accumulator<unsigned short> { typedef float Type; };\ntemplate<>\nstruct Accumulator<unsigned int> { typedef float Type; };\ntemplate<>\nstruct Accumulator<char>   { typedef float Type; };\ntemplate<>\nstruct Accumulator<short>  { typedef float Type; };\ntemplate<>\nstruct Accumulator<int> { typedef float Type; };\n\n#undef True\n#undef False\n\nclass True\n{\n};\n\nclass False\n{\n};\n\n\n/**\n * Squared Euclidean distance functor.\n *\n * This is the simpler, unrolled version. This is preferable for\n * very low dimensionality data (eg 3D points)\n */\ntemplate<class T>\nstruct L2_Simple\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff;\n        for(size_t i = 0; i < size; ++i ) {\n            diff = *a++ - *b++;\n            result += diff*diff;\n        }\n        return result;\n    }\n\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return (a-b)*(a-b);\n    }\n};\n\n\n\n/**\n * Squared Euclidean distance functor, optimized version\n */\ntemplate<class T>\nstruct L2\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the squared Euclidean distance between two vectors.\n     *\n     *\tThis is highly optimised, with loop unrolling, as it is one\n     *\tof the most expensive inner loops.\n     *\n     *\tThe computation of squared root at the end is omitted for\n     *\tefficiency.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = (ResultType)(a[0] - b[0]);\n            diff1 = (ResultType)(a[1] - b[1]);\n            diff2 = (ResultType)(a[2] - b[2]);\n            diff3 = (ResultType)(a[3] - b[3]);\n            result += diff0 * diff0 + diff1 * diff1 + diff2 * diff2 + diff3 * diff3;\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = (ResultType)(*a++ - *b++);\n            result += diff0 * diff0;\n        }\n        return result;\n    }\n\n    /**\n     *\tPartial euclidean distance, using just one dimension. This is used by the\n     *\tkd-tree when computing partial distances while traversing the tree.\n     *\n     *\tSquared root is omitted for efficiency.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return (a-b)*(a-b);\n    }\n};\n\n\n/*\n * Manhattan distance functor, optimized version\n */\ntemplate<class T>\nstruct L1\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the Manhattan (L_1) distance between two vectors.\n     *\n     *\tThis is highly optimised, with loop unrolling, as it is one\n     *\tof the most expensive inner loops.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = (ResultType)abs(a[0] - b[0]);\n            diff1 = (ResultType)abs(a[1] - b[1]);\n            diff2 = (ResultType)abs(a[2] - b[2]);\n            diff3 = (ResultType)abs(a[3] - b[3]);\n            result += diff0 + diff1 + diff2 + diff3;\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = (ResultType)abs(*a++ - *b++);\n            result += diff0;\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return abs(a-b);\n    }\n};\n\n\n\ntemplate<class T>\nstruct MinkowskiDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    int order;\n\n    MinkowskiDistance(int order_) : order(order_) {}\n\n    /**\n     *  Compute the Minkowsky (L_p) distance between two vectors.\n     *\n     *\tThis is highly optimised, with loop unrolling, as it is one\n     *\tof the most expensive inner loops.\n     *\n     *\tThe computation of squared root at the end is omitted for\n     *\tefficiency.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = (ResultType)abs(a[0] - b[0]);\n            diff1 = (ResultType)abs(a[1] - b[1]);\n            diff2 = (ResultType)abs(a[2] - b[2]);\n            diff3 = (ResultType)abs(a[3] - b[3]);\n            result += pow(diff0,order) + pow(diff1,order) + pow(diff2,order) + pow(diff3,order);\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = (ResultType)abs(*a++ - *b++);\n            result += pow(diff0,order);\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return pow(static_cast<ResultType>(abs(a-b)),order);\n    }\n};\n\n\n\ntemplate<class T>\nstruct MaxDistance\n{\n    typedef False is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the max distance (L_infinity) between two vectors.\n     *\n     *  This distance is not a valid kdtree distance, it's not dimensionwise additive.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = abs(a[0] - b[0]);\n            diff1 = abs(a[1] - b[1]);\n            diff2 = abs(a[2] - b[2]);\n            diff3 = abs(a[3] - b[3]);\n            if (diff0>result) {result = diff0; }\n            if (diff1>result) {result = diff1; }\n            if (diff2>result) {result = diff2; }\n            if (diff3>result) {result = diff3; }\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = abs(*a++ - *b++);\n            result = (diff0>result) ? diff0 : result;\n        }\n        return result;\n    }\n\n    /* This distance functor is not dimension-wise additive, which\n     * makes it an invalid kd-tree distance, not implementing the accum_dist method */\n\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor\n * bit count of A exclusive XOR'ed with B\n */\nstruct HammingLUT\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n    typedef unsigned char ElementType;\n    typedef int ResultType;\n\n    /** this will count the bits in a ^ b\n     */\n    ResultType operator()(const unsigned char* a, const unsigned char* b, size_t size) const\n    {\n        static const uchar popCountTable[] =\n        {\n            0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8\n        };\n        ResultType result = 0;\n        for (size_t i = 0; i < size; i++) {\n            result += popCountTable[a[i] ^ b[i]];\n        }\n        return result;\n    }\n};\n\n/**\n * Hamming distance functor (pop count between two binary vectors, i.e. xor them and count the number of bits set)\n * That code was taken from brief.cpp in OpenCV\n */\ntemplate<class T>\nstruct Hamming\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n\n    typedef T ElementType;\n    typedef int ResultType;\n\n    template<typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n        ResultType result = 0;\n#ifdef __ARM_NEON__\n        {\n            uint32x4_t bits = vmovq_n_u32(0);\n            for (size_t i = 0; i < size; i += 16) {\n                uint8x16_t A_vec = vld1q_u8 (a + i);\n                uint8x16_t B_vec = vld1q_u8 (b + i);\n                uint8x16_t AxorB = veorq_u8 (A_vec, B_vec);\n                uint8x16_t bitsSet = vcntq_u8 (AxorB);\n                uint16x8_t bitSet8 = vpaddlq_u8 (bitsSet);\n                uint32x4_t bitSet4 = vpaddlq_u16 (bitSet8);\n                bits = vaddq_u32(bits, bitSet4);\n            }\n            uint64x2_t bitSet2 = vpaddlq_u32 (bits);\n            result = vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),0);\n            result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2);\n        }\n#elif __GNUC__\n        {\n            //for portability just use unsigned long -- and use the __builtin_popcountll (see docs for __builtin_popcountll)\n            typedef unsigned long long pop_t;\n            const size_t modulo = size % sizeof(pop_t);\n            const pop_t* a2 = reinterpret_cast<const pop_t*> (a);\n            const pop_t* b2 = reinterpret_cast<const pop_t*> (b);\n            const pop_t* a2_end = a2 + (size / sizeof(pop_t));\n\n            for (; a2 != a2_end; ++a2, ++b2) result += __builtin_popcountll((*a2) ^ (*b2));\n\n            if (modulo) {\n                //in the case where size is not dividable by sizeof(size_t)\n                //need to mask off the bits at the end\n                pop_t a_final = 0, b_final = 0;\n                memcpy(&a_final, a2, modulo);\n                memcpy(&b_final, b2, modulo);\n                result += __builtin_popcountll(a_final ^ b_final);\n            }\n        }\n#else // NO NEON and NOT GNUC\n        typedef unsigned long long pop_t;\n        HammingLUT lut;\n        result = lut(reinterpret_cast<const unsigned char*> (a),\n                     reinterpret_cast<const unsigned char*> (b), size * sizeof(pop_t));\n#endif\n        return result;\n    }\n};\n\ntemplate<typename T>\nstruct Hamming2\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef int ResultType;\n\n    /** This is popcount_3() from:\n     * http://en.wikipedia.org/wiki/Hamming_weight */\n    unsigned int popcnt32(uint32_t n) const\n    {\n        n -= ((n >> 1) & 0x55555555);\n        n = (n & 0x33333333) + ((n >> 2) & 0x33333333);\n        return (((n + (n >> 4))& 0xF0F0F0F)* 0x1010101) >> 24;\n    }\n\n#ifdef FLANN_PLATFORM_64_BIT\n    unsigned int popcnt64(uint64_t n) const\n    {\n        n -= ((n >> 1) & 0x5555555555555555);\n        n = (n & 0x3333333333333333) + ((n >> 2) & 0x3333333333333333);\n        return (((n + (n >> 4))& 0x0f0f0f0f0f0f0f0f)* 0x0101010101010101) >> 56;\n    }\n#endif\n\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n#ifdef FLANN_PLATFORM_64_BIT\n        const uint64_t* pa = reinterpret_cast<const uint64_t*>(a);\n        const uint64_t* pb = reinterpret_cast<const uint64_t*>(b);\n        ResultType result = 0;\n        size /= (sizeof(uint64_t)/sizeof(unsigned char));\n        for(size_t i = 0; i < size; ++i ) {\n            result += popcnt64(*pa ^ *pb);\n            ++pa;\n            ++pb;\n        }\n#else\n        const uint32_t* pa = reinterpret_cast<const uint32_t*>(a);\n        const uint32_t* pb = reinterpret_cast<const uint32_t*>(b);\n        ResultType result = 0;\n        size /= (sizeof(uint32_t)/sizeof(unsigned char));\n        for(size_t i = 0; i < size; ++i ) {\n            result += popcnt32(*pa ^ *pb);\n            ++pa;\n            ++pb;\n        }\n#endif\n        return result;\n    }\n};\n\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\ntemplate<class T>\nstruct HistIntersectionDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the histogram intersection distance\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType min0, min1, min2, min3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            min0 = (ResultType)(a[0] < b[0] ? a[0] : b[0]);\n            min1 = (ResultType)(a[1] < b[1] ? a[1] : b[1]);\n            min2 = (ResultType)(a[2] < b[2] ? a[2] : b[2]);\n            min3 = (ResultType)(a[3] < b[3] ? a[3] : b[3]);\n            result += min0 + min1 + min2 + min3;\n            a += 4;\n            b += 4;\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            min0 = (ResultType)(*a < *b ? *a : *b);\n            result += min0;\n            ++a;\n            ++b;\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return a<b ? a : b;\n    }\n};\n\n\n\ntemplate<class T>\nstruct HellingerDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the Hellinger distance\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = sqrt(static_cast<ResultType>(a[0])) - sqrt(static_cast<ResultType>(b[0]));\n            diff1 = sqrt(static_cast<ResultType>(a[1])) - sqrt(static_cast<ResultType>(b[1]));\n            diff2 = sqrt(static_cast<ResultType>(a[2])) - sqrt(static_cast<ResultType>(b[2]));\n            diff3 = sqrt(static_cast<ResultType>(a[3])) - sqrt(static_cast<ResultType>(b[3]));\n            result += diff0 * diff0 + diff1 * diff1 + diff2 * diff2 + diff3 * diff3;\n            a += 4;\n            b += 4;\n        }\n        while (a < last) {\n            diff0 = sqrt(static_cast<ResultType>(*a++)) - sqrt(static_cast<ResultType>(*b++));\n            result += diff0 * diff0;\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        ResultType diff = sqrt(static_cast<ResultType>(a)) - sqrt(static_cast<ResultType>(b));\n        return diff * diff;\n    }\n};\n\n\ntemplate<class T>\nstruct ChiSquareDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the chi-square distance\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType sum, diff;\n        Iterator1 last = a + size;\n\n        while (a < last) {\n            sum = (ResultType)(*a + *b);\n            if (sum>0) {\n                diff = (ResultType)(*a - *b);\n                result += diff*diff/sum;\n            }\n            ++a;\n            ++b;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        ResultType result = ResultType();\n        ResultType sum, diff;\n\n        sum = (ResultType)(a+b);\n        if (sum>0) {\n            diff = (ResultType)(a-b);\n            result = diff*diff/sum;\n        }\n        return result;\n    }\n};\n\n\ntemplate<class T>\nstruct KL_Divergence\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the Kullback–Leibler divergence\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        Iterator1 last = a + size;\n\n        while (a < last) {\n            if (* b != 0) {\n                ResultType ratio = (ResultType)(*a / *b);\n                if (ratio>0) {\n                    result += *a * log(ratio);\n                }\n            }\n            ++a;\n            ++b;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        ResultType result = ResultType();\n        if( *b != 0 ) {\n            ResultType ratio = (ResultType)(a / b);\n            if (ratio>0) {\n                result = a * log(ratio);\n            }\n        }\n        return result;\n    }\n};\n\n\n\n/*\n * This is a \"zero iterator\". It basically behaves like a zero filled\n * array to all algorithms that use arrays as iterators (STL style).\n * It's useful when there's a need to compute the distance between feature\n * and origin it and allows for better compiler optimisation than using a\n * zero-filled array.\n */\ntemplate <typename T>\nstruct ZeroIterator\n{\n\n    T operator*()\n    {\n        return 0;\n    }\n\n    T operator[](int)\n    {\n        return 0;\n    }\n\n    const ZeroIterator<T>& operator ++()\n    {\n        return *this;\n    }\n\n    ZeroIterator<T> operator ++(int)\n    {\n        return *this;\n    }\n\n    ZeroIterator<T>& operator+=(int)\n    {\n        return *this;\n    }\n\n};\n\n\n/*\n * Depending on processed distances, some of them are already squared (e.g. L2)\n * and some are not (e.g.Hamming). In KMeans++ for instance we want to be sure\n * we are working on ^2 distances, thus following templates to ensure that.\n */\ntemplate <typename Distance, typename ElementType>\nstruct squareDistance\n{\n    typedef typename Distance::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return dist*dist; }\n};\n\n\ntemplate <typename ElementType>\nstruct squareDistance<L2_Simple<ElementType>, ElementType>\n{\n    typedef typename L2_Simple<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return dist; }\n};\n\ntemplate <typename ElementType>\nstruct squareDistance<L2<ElementType>, ElementType>\n{\n    typedef typename L2<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return dist; }\n};\n\n\ntemplate <typename ElementType>\nstruct squareDistance<MinkowskiDistance<ElementType>, ElementType>\n{\n    typedef typename MinkowskiDistance<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return dist; }\n};\n\ntemplate <typename ElementType>\nstruct squareDistance<HellingerDistance<ElementType>, ElementType>\n{\n    typedef typename HellingerDistance<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return dist; }\n};\n\ntemplate <typename ElementType>\nstruct squareDistance<ChiSquareDistance<ElementType>, ElementType>\n{\n    typedef typename ChiSquareDistance<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return dist; }\n};\n\n\ntemplate <typename Distance>\ntypename Distance::ResultType ensureSquareDistance( typename Distance::ResultType dist )\n{\n    typedef typename Distance::ElementType ElementType;\n\n    squareDistance<Distance, ElementType> dummy;\n    return dummy( dist );\n}\n\n\n/*\n * ...and a template to ensure the user that he will process the normal distance,\n * and not squared distance, without loosing processing time calling sqrt(ensureSquareDistance)\n * that will result in doing actually sqrt(dist*dist) for L1 distance for instance.\n */\ntemplate <typename Distance, typename ElementType>\nstruct simpleDistance\n{\n    typedef typename Distance::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return dist; }\n};\n\n\ntemplate <typename ElementType>\nstruct simpleDistance<L2_Simple<ElementType>, ElementType>\n{\n    typedef typename L2_Simple<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return sqrt(dist); }\n};\n\ntemplate <typename ElementType>\nstruct simpleDistance<L2<ElementType>, ElementType>\n{\n    typedef typename L2<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return sqrt(dist); }\n};\n\n\ntemplate <typename ElementType>\nstruct simpleDistance<MinkowskiDistance<ElementType>, ElementType>\n{\n    typedef typename MinkowskiDistance<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return sqrt(dist); }\n};\n\ntemplate <typename ElementType>\nstruct simpleDistance<HellingerDistance<ElementType>, ElementType>\n{\n    typedef typename HellingerDistance<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return sqrt(dist); }\n};\n\ntemplate <typename ElementType>\nstruct simpleDistance<ChiSquareDistance<ElementType>, ElementType>\n{\n    typedef typename ChiSquareDistance<ElementType>::ResultType ResultType;\n    ResultType operator()( ResultType dist ) { return sqrt(dist); }\n};\n\n\ntemplate <typename Distance>\ntypename Distance::ResultType ensureSimpleDistance( typename Distance::ResultType dist )\n{\n    typedef typename Distance::ElementType ElementType;\n\n    simpleDistance<Distance, ElementType> dummy;\n    return dummy( dist );\n}\n\n}\n\n#endif //OPENCV_FLANN_DIST_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/dummy.h",
    "content": "\n#ifndef OPENCV_FLANN_DUMMY_H_\n#define OPENCV_FLANN_DUMMY_H_\n\nnamespace cvflann\n{\n\n#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS\n__declspec(dllexport)\n#endif\nvoid dummyfunc();\n\n}\n\n\n#endif  /* OPENCV_FLANN_DUMMY_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/dynamic_bitset.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n/***********************************************************************\n * Author: Vincent Rabaud\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_DYNAMIC_BITSET_H_\n#define OPENCV_FLANN_DYNAMIC_BITSET_H_\n\n#ifndef FLANN_USE_BOOST\n#  define FLANN_USE_BOOST 0\n#endif\n//#define FLANN_USE_BOOST 1\n#if FLANN_USE_BOOST\n#include <boost/dynamic_bitset.hpp>\ntypedef boost::dynamic_bitset<> DynamicBitset;\n#else\n\n#include <limits.h>\n\n#include \"dist.h\"\n\nnamespace cvflann {\n\n/** Class re-implementing the boost version of it\n * This helps not depending on boost, it also does not do the bound checks\n * and has a way to reset a block for speed\n */\nclass DynamicBitset\n{\npublic:\n    /** default constructor\n     */\n    DynamicBitset()\n    {\n    }\n\n    /** only constructor we use in our code\n     * @param sz the size of the bitset (in bits)\n     */\n    DynamicBitset(size_t sz)\n    {\n        resize(sz);\n        reset();\n    }\n\n    /** Sets all the bits to 0\n     */\n    void clear()\n    {\n        std::fill(bitset_.begin(), bitset_.end(), 0);\n    }\n\n    /** @brief checks if the bitset is empty\n     * @return true if the bitset is empty\n     */\n    bool empty() const\n    {\n        return bitset_.empty();\n    }\n\n    /** set all the bits to 0\n     */\n    void reset()\n    {\n        std::fill(bitset_.begin(), bitset_.end(), 0);\n    }\n\n    /** @brief set one bit to 0\n     * @param index\n     */\n    void reset(size_t index)\n    {\n        bitset_[index / cell_bit_size_] &= ~(size_t(1) << (index % cell_bit_size_));\n    }\n\n    /** @brief sets a specific bit to 0, and more bits too\n     * This function is useful when resetting a given set of bits so that the\n     * whole bitset ends up being 0: if that's the case, we don't care about setting\n     * other bits to 0\n     * @param index\n     */\n    void reset_block(size_t index)\n    {\n        bitset_[index / cell_bit_size_] = 0;\n    }\n\n    /** resize the bitset so that it contains at least sz bits\n     * @param sz\n     */\n    void resize(size_t sz)\n    {\n        size_ = sz;\n        bitset_.resize(sz / cell_bit_size_ + 1);\n    }\n\n    /** set a bit to true\n     * @param index the index of the bit to set to 1\n     */\n    void set(size_t index)\n    {\n        bitset_[index / cell_bit_size_] |= size_t(1) << (index % cell_bit_size_);\n    }\n\n    /** gives the number of contained bits\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /** check if a bit is set\n     * @param index the index of the bit to check\n     * @return true if the bit is set\n     */\n    bool test(size_t index) const\n    {\n        return (bitset_[index / cell_bit_size_] & (size_t(1) << (index % cell_bit_size_))) != 0;\n    }\n\nprivate:\n    std::vector<size_t> bitset_;\n    size_t size_;\n    static const unsigned int cell_bit_size_ = CHAR_BIT * sizeof(size_t);\n};\n\n} // namespace cvflann\n\n#endif\n\n#endif // OPENCV_FLANN_DYNAMIC_BITSET_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/flann.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/flann.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/flann_base.hpp",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_BASE_HPP_\n#define OPENCV_FLANN_BASE_HPP_\n\n#include <vector>\n#include <cassert>\n#include <cstdio>\n\n#include \"general.h\"\n#include \"matrix.h\"\n#include \"params.h\"\n#include \"saving.h\"\n\n#include \"all_indices.h\"\n\nnamespace cvflann\n{\n\n/**\n * Sets the log level used for all flann functions\n * @param level Verbosity level\n */\ninline void log_verbosity(int level)\n{\n    if (level >= 0) {\n        Logger::setLevel(level);\n    }\n}\n\n/**\n * (Deprecated) Index parameters for creating a saved index.\n */\nstruct SavedIndexParams : public IndexParams\n{\n    SavedIndexParams(cv::String filename)\n    {\n        (* this)[\"algorithm\"] = FLANN_INDEX_SAVED;\n        (*this)[\"filename\"] = filename;\n    }\n};\n\n\ntemplate<typename Distance>\nNNIndex<Distance>* load_saved_index(const Matrix<typename Distance::ElementType>& dataset, const cv::String& filename, Distance distance)\n{\n    typedef typename Distance::ElementType ElementType;\n\n    FILE* fin = fopen(filename.c_str(), \"rb\");\n    if (fin == NULL) {\n        return NULL;\n    }\n    IndexHeader header = load_header(fin);\n    if (header.data_type != Datatype<ElementType>::type()) {\n        throw FLANNException(\"Datatype of saved index is different than of the one to be created.\");\n    }\n    if ((size_t(header.rows) != dataset.rows)||(size_t(header.cols) != dataset.cols)) {\n        throw FLANNException(\"The index saved belongs to a different dataset\");\n    }\n\n    IndexParams params;\n    params[\"algorithm\"] = header.index_type;\n    NNIndex<Distance>* nnIndex = create_index_by_type<Distance>(dataset, params, distance);\n    nnIndex->loadIndex(fin);\n    fclose(fin);\n\n    return nnIndex;\n}\n\n\ntemplate<typename Distance>\nclass Index : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    Index(const Matrix<ElementType>& features, const IndexParams& params, Distance distance = Distance() )\n        : index_params_(params)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params,\"algorithm\");\n        loaded_ = false;\n\n        if (index_type == FLANN_INDEX_SAVED) {\n            nnIndex_ = load_saved_index<Distance>(features, get_param<cv::String>(params,\"filename\"), distance);\n            loaded_ = true;\n        }\n        else {\n            nnIndex_ = create_index_by_type<Distance>(features, params, distance);\n        }\n    }\n\n    ~Index()\n    {\n        delete nnIndex_;\n    }\n\n    /**\n     * Builds the index.\n     */\n    void buildIndex()\n    {\n        if (!loaded_) {\n            nnIndex_->buildIndex();\n        }\n    }\n\n    void save(cv::String filename)\n    {\n        FILE* fout = fopen(filename.c_str(), \"wb\");\n        if (fout == NULL) {\n            throw FLANNException(\"Cannot open file\");\n        }\n        save_header(fout, *nnIndex_);\n        saveIndex(fout);\n        fclose(fout);\n    }\n\n    /**\n     * \\brief Saves the index to a stream\n     * \\param stream The stream to save the index to\n     */\n    virtual void saveIndex(FILE* stream)\n    {\n        nnIndex_->saveIndex(stream);\n    }\n\n    /**\n     * \\brief Loads the index from a stream\n     * \\param stream The stream from which the index is loaded\n     */\n    virtual void loadIndex(FILE* stream)\n    {\n        nnIndex_->loadIndex(stream);\n    }\n\n    /**\n     * \\returns number of features in this index.\n     */\n    size_t veclen() const\n    {\n        return nnIndex_->veclen();\n    }\n\n    /**\n     * \\returns The dimensionality of the features in this index.\n     */\n    size_t size() const\n    {\n        return nnIndex_->size();\n    }\n\n    /**\n     * \\returns The index type (kdtree, kmeans,...)\n     */\n    flann_algorithm_t getType() const\n    {\n        return nnIndex_->getType();\n    }\n\n    /**\n     * \\returns The amount of memory (in bytes) used by the index.\n     */\n    virtual int usedMemory() const\n    {\n        return nnIndex_->usedMemory();\n    }\n\n\n    /**\n     * \\returns The index parameters\n     */\n    IndexParams getParameters() const\n    {\n        return nnIndex_->getParameters();\n    }\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        nnIndex_->knnSearch(queries, indices, dists, knn, params);\n    }\n\n    /**\n     * \\brief Perform radius search\n     * \\param[in] query The query point\n     * \\param[out] indices The indinces of the neighbors found within the given radius\n     * \\param[out] dists The distances to the nearest neighbors found\n     * \\param[in] radius The radius used for search\n     * \\param[in] params Search parameters\n     * \\returns Number of neighbors found\n     */\n    int radiusSearch(const Matrix<ElementType>& query, Matrix<int>& indices, Matrix<DistanceType>& dists, float radius, const SearchParams& params)\n    {\n        return nnIndex_->radiusSearch(query, indices, dists, radius, params);\n    }\n\n    /**\n     * \\brief Method that searches for nearest-neighbours\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        nnIndex_->findNeighbors(result, vec, searchParams);\n    }\n\n    /**\n     * \\brief Returns actual index\n     */\n    FLANN_DEPRECATED NNIndex<Distance>* getIndex()\n    {\n        return nnIndex_;\n    }\n\n    /**\n     * \\brief Returns index parameters.\n     * \\deprecated use getParameters() instead.\n     */\n    FLANN_DEPRECATED  const IndexParams* getIndexParameters()\n    {\n        return &index_params_;\n    }\n\nprivate:\n    /** Pointer to actual index class */\n    NNIndex<Distance>* nnIndex_;\n    /** Indices if the index was loaded from a file */\n    bool loaded_;\n    /** Parameters passed to the index */\n    IndexParams index_params_;\n};\n\n/**\n * Performs a hierarchical clustering of the points passed as argument and then takes a cut in the\n * the clustering tree to return a flat clustering.\n * @param[in] points Points to be clustered\n * @param centers The computed cluster centres. Matrix should be preallocated and centers.rows is the\n *  number of clusters requested.\n * @param params Clustering parameters (The same as for cvflann::KMeansIndex)\n * @param d Distance to be used for clustering (eg: cvflann::L2)\n * @return number of clusters computed (can be different than clusters.rows and is the highest number\n * of the form (branching-1)*K+1 smaller than clusters.rows).\n */\ntemplate <typename Distance>\nint hierarchicalClustering(const Matrix<typename Distance::ElementType>& points, Matrix<typename Distance::ResultType>& centers,\n                           const KMeansIndexParams& params, Distance d = Distance())\n{\n    KMeansIndex<Distance> kmeans(points, params, d);\n    kmeans.buildIndex();\n\n    int clusterNum = kmeans.getClusterCenters(centers);\n    return clusterNum;\n}\n\n}\n#endif /* OPENCV_FLANN_BASE_HPP_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/general.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_GENERAL_H_\n#define OPENCV_FLANN_GENERAL_H_\n\n#include \"opencv2/core.hpp\"\n\nnamespace cvflann\n{\n\nclass FLANNException : public cv::Exception\n{\npublic:\n    FLANNException(const char* message) : cv::Exception(0, message, \"\", __FILE__, __LINE__) { }\n\n    FLANNException(const cv::String& message) : cv::Exception(0, message, \"\", __FILE__, __LINE__) { }\n};\n\n}\n\n\n#endif  /* OPENCV_FLANN_GENERAL_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/ground_truth.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_GROUND_TRUTH_H_\n#define OPENCV_FLANN_GROUND_TRUTH_H_\n\n#include \"dist.h\"\n#include \"matrix.h\"\n\n\nnamespace cvflann\n{\n\ntemplate <typename Distance>\nvoid find_nearest(const Matrix<typename Distance::ElementType>& dataset, typename Distance::ElementType* query, int* matches, int nn,\n                  int skip = 0, Distance distance = Distance())\n{\n    typedef typename Distance::ResultType DistanceType;\n    int n = nn + skip;\n\n    std::vector<int> match(n);\n    std::vector<DistanceType> dists(n);\n\n    dists[0] = distance(dataset[0], query, dataset.cols);\n    match[0] = 0;\n    int dcnt = 1;\n\n    for (size_t i=1; i<dataset.rows; ++i) {\n        DistanceType tmp = distance(dataset[i], query, dataset.cols);\n\n        if (dcnt<n) {\n            match[dcnt] = (int)i;\n            dists[dcnt++] = tmp;\n        }\n        else if (tmp < dists[dcnt-1]) {\n            dists[dcnt-1] = tmp;\n            match[dcnt-1] = (int)i;\n        }\n\n        int j = dcnt-1;\n        // bubble up\n        while (j>=1 && dists[j]<dists[j-1]) {\n            std::swap(dists[j],dists[j-1]);\n            std::swap(match[j],match[j-1]);\n            j--;\n        }\n    }\n\n    for (int i=0; i<nn; ++i) {\n        matches[i] = match[i+skip];\n    }\n}\n\n\ntemplate <typename Distance>\nvoid compute_ground_truth(const Matrix<typename Distance::ElementType>& dataset, const Matrix<typename Distance::ElementType>& testset, Matrix<int>& matches,\n                          int skip=0, Distance d = Distance())\n{\n    for (size_t i=0; i<testset.rows; ++i) {\n        find_nearest<Distance>(dataset, testset[i], matches[i], (int)matches.cols, skip, d);\n    }\n}\n\n\n}\n\n#endif //OPENCV_FLANN_GROUND_TRUTH_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/hdf5.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_HDF5_H_\n#define OPENCV_FLANN_HDF5_H_\n\n#include <hdf5.h>\n\n#include \"matrix.h\"\n\n\nnamespace cvflann\n{\n\nnamespace\n{\n\ntemplate<typename T>\nhid_t get_hdf5_type()\n{\n    throw FLANNException(\"Unsupported type for IO operations\");\n}\n\ntemplate<>\nhid_t get_hdf5_type<char>() { return H5T_NATIVE_CHAR; }\ntemplate<>\nhid_t get_hdf5_type<unsigned char>() { return H5T_NATIVE_UCHAR; }\ntemplate<>\nhid_t get_hdf5_type<short int>() { return H5T_NATIVE_SHORT; }\ntemplate<>\nhid_t get_hdf5_type<unsigned short int>() { return H5T_NATIVE_USHORT; }\ntemplate<>\nhid_t get_hdf5_type<int>() { return H5T_NATIVE_INT; }\ntemplate<>\nhid_t get_hdf5_type<unsigned int>() { return H5T_NATIVE_UINT; }\ntemplate<>\nhid_t get_hdf5_type<long>() { return H5T_NATIVE_LONG; }\ntemplate<>\nhid_t get_hdf5_type<unsigned long>() { return H5T_NATIVE_ULONG; }\ntemplate<>\nhid_t get_hdf5_type<float>() { return H5T_NATIVE_FLOAT; }\ntemplate<>\nhid_t get_hdf5_type<double>() { return H5T_NATIVE_DOUBLE; }\n}\n\n\n#define CHECK_ERROR(x,y) if ((x)<0) throw FLANNException((y));\n\ntemplate<typename T>\nvoid save_to_file(const cvflann::Matrix<T>& dataset, const String& filename, const String& name)\n{\n\n#if H5Eset_auto_vers == 2\n    H5Eset_auto( H5E_DEFAULT, NULL, NULL );\n#else\n    H5Eset_auto( NULL, NULL );\n#endif\n\n    herr_t status;\n    hid_t file_id;\n    file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);\n    if (file_id < 0) {\n        file_id = H5Fcreate(filename.c_str(), H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);\n    }\n    CHECK_ERROR(file_id,\"Error creating hdf5 file.\");\n\n    hsize_t     dimsf[2];              // dataset dimensions\n    dimsf[0] = dataset.rows;\n    dimsf[1] = dataset.cols;\n\n    hid_t space_id = H5Screate_simple(2, dimsf, NULL);\n    hid_t memspace_id = H5Screate_simple(2, dimsf, NULL);\n\n    hid_t dataset_id;\n#if H5Dcreate_vers == 2\n    dataset_id = H5Dcreate2(file_id, name.c_str(), get_hdf5_type<T>(), space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);\n#else\n    dataset_id = H5Dcreate(file_id, name.c_str(), get_hdf5_type<T>(), space_id, H5P_DEFAULT);\n#endif\n\n    if (dataset_id<0) {\n#if H5Dopen_vers == 2\n        dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);\n#else\n        dataset_id = H5Dopen(file_id, name.c_str());\n#endif\n    }\n    CHECK_ERROR(dataset_id,\"Error creating or opening dataset in file.\");\n\n    status = H5Dwrite(dataset_id, get_hdf5_type<T>(), memspace_id, space_id, H5P_DEFAULT, dataset.data );\n    CHECK_ERROR(status, \"Error writing to dataset\");\n\n    H5Sclose(memspace_id);\n    H5Sclose(space_id);\n    H5Dclose(dataset_id);\n    H5Fclose(file_id);\n\n}\n\n\ntemplate<typename T>\nvoid load_from_file(cvflann::Matrix<T>& dataset, const String& filename, const String& name)\n{\n    herr_t status;\n    hid_t file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);\n    CHECK_ERROR(file_id,\"Error opening hdf5 file.\");\n\n    hid_t dataset_id;\n#if H5Dopen_vers == 2\n    dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);\n#else\n    dataset_id = H5Dopen(file_id, name.c_str());\n#endif\n    CHECK_ERROR(dataset_id,\"Error opening dataset in file.\");\n\n    hid_t space_id = H5Dget_space(dataset_id);\n\n    hsize_t dims_out[2];\n    H5Sget_simple_extent_dims(space_id, dims_out, NULL);\n\n    dataset = cvflann::Matrix<T>(new T[dims_out[0]*dims_out[1]], dims_out[0], dims_out[1]);\n\n    status = H5Dread(dataset_id, get_hdf5_type<T>(), H5S_ALL, H5S_ALL, H5P_DEFAULT, dataset[0]);\n    CHECK_ERROR(status, \"Error reading dataset\");\n\n    H5Sclose(space_id);\n    H5Dclose(dataset_id);\n    H5Fclose(file_id);\n}\n\n\n#ifdef HAVE_MPI\n\nnamespace mpi\n{\n/**\n * Loads a the hyperslice corresponding to this processor from a hdf5 file.\n * @param flann_dataset Dataset where the data is loaded\n * @param filename HDF5 file name\n * @param name Name of dataset inside file\n */\ntemplate<typename T>\nvoid load_from_file(cvflann::Matrix<T>& dataset, const String& filename, const String& name)\n{\n    MPI_Comm comm  = MPI_COMM_WORLD;\n    MPI_Info info  = MPI_INFO_NULL;\n\n    int mpi_size, mpi_rank;\n    MPI_Comm_size(comm, &mpi_size);\n    MPI_Comm_rank(comm, &mpi_rank);\n\n    herr_t status;\n\n    hid_t plist_id = H5Pcreate(H5P_FILE_ACCESS);\n    H5Pset_fapl_mpio(plist_id, comm, info);\n    hid_t file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, plist_id);\n    CHECK_ERROR(file_id,\"Error opening hdf5 file.\");\n    H5Pclose(plist_id);\n    hid_t dataset_id;\n#if H5Dopen_vers == 2\n    dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);\n#else\n    dataset_id = H5Dopen(file_id, name.c_str());\n#endif\n    CHECK_ERROR(dataset_id,\"Error opening dataset in file.\");\n\n    hid_t space_id = H5Dget_space(dataset_id);\n    hsize_t dims[2];\n    H5Sget_simple_extent_dims(space_id, dims, NULL);\n\n    hsize_t count[2];\n    hsize_t offset[2];\n\n    hsize_t item_cnt = dims[0]/mpi_size+(dims[0]%mpi_size==0 ? 0 : 1);\n    hsize_t cnt = (mpi_rank<mpi_size-1 ? item_cnt : dims[0]-item_cnt*(mpi_size-1));\n\n    count[0] = cnt;\n    count[1] = dims[1];\n    offset[0] = mpi_rank*item_cnt;\n    offset[1] = 0;\n\n    hid_t memspace_id = H5Screate_simple(2,count,NULL);\n\n    H5Sselect_hyperslab(space_id, H5S_SELECT_SET, offset, NULL, count, NULL);\n\n    dataset.rows = count[0];\n    dataset.cols = count[1];\n    dataset.data = new T[dataset.rows*dataset.cols];\n\n    plist_id = H5Pcreate(H5P_DATASET_XFER);\n    H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_COLLECTIVE);\n    status = H5Dread(dataset_id, get_hdf5_type<T>(), memspace_id, space_id, plist_id, dataset.data);\n    CHECK_ERROR(status, \"Error reading dataset\");\n\n    H5Pclose(plist_id);\n    H5Sclose(space_id);\n    H5Sclose(memspace_id);\n    H5Dclose(dataset_id);\n    H5Fclose(file_id);\n}\n}\n#endif // HAVE_MPI\n} // namespace cvflann::mpi\n\n#endif /* OPENCV_FLANN_HDF5_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/heap.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_HEAP_H_\n#define OPENCV_FLANN_HEAP_H_\n\n#include <algorithm>\n#include <vector>\n\nnamespace cvflann\n{\n\n/**\n * Priority Queue Implementation\n *\n * The priority queue is implemented with a heap.  A heap is a complete\n * (full) binary tree in which each parent is less than both of its\n * children, but the order of the children is unspecified.\n */\ntemplate <typename T>\nclass Heap\n{\n\n    /**\n     * Storage array for the heap.\n     * Type T must be comparable.\n     */\n    std::vector<T> heap;\n    int length;\n\n    /**\n     * Number of element in the heap\n     */\n    int count;\n\n\n\npublic:\n    /**\n     * Constructor.\n     *\n     * Params:\n     *     sz = heap size\n     */\n\n    Heap(int sz)\n    {\n        length = sz;\n        heap.reserve(length);\n        count = 0;\n    }\n\n    /**\n     *\n     * Returns: heap size\n     */\n    int size()\n    {\n        return count;\n    }\n\n    /**\n     * Tests if the heap is empty\n     *\n     * Returns: true is heap empty, false otherwise\n     */\n    bool empty()\n    {\n        return size()==0;\n    }\n\n    /**\n     * Clears the heap.\n     */\n    void clear()\n    {\n        heap.clear();\n        count = 0;\n    }\n\n    struct CompareT\n    {\n        bool operator()(const T& t_1, const T& t_2) const\n        {\n            return t_2 < t_1;\n        }\n    };\n\n    /**\n     * Insert a new element in the heap.\n     *\n     * We select the next empty leaf node, and then keep moving any larger\n     * parents down until the right location is found to store this element.\n     *\n     * Params:\n     *     value = the new element to be inserted in the heap\n     */\n    void insert(T value)\n    {\n        /* If heap is full, then return without adding this element. */\n        if (count == length) {\n            return;\n        }\n\n        heap.push_back(value);\n        static CompareT compareT;\n        std::push_heap(heap.begin(), heap.end(), compareT);\n        ++count;\n    }\n\n\n\n    /**\n     * Returns the node of minimum value from the heap (top of the heap).\n     *\n     * Params:\n     *     value = out parameter used to return the min element\n     * Returns: false if heap empty\n     */\n    bool popMin(T& value)\n    {\n        if (count == 0) {\n            return false;\n        }\n\n        value = heap[0];\n        static CompareT compareT;\n        std::pop_heap(heap.begin(), heap.end(), compareT);\n        heap.pop_back();\n        --count;\n\n        return true;  /* Return old last node. */\n    }\n};\n\n}\n\n#endif //OPENCV_FLANN_HEAP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/hierarchical_clustering_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_\n#define OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_\n\n#include <algorithm>\n#include <map>\n#include <cassert>\n#include <limits>\n#include <cmath>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"dist.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\n\nnamespace cvflann\n{\n\nstruct HierarchicalClusteringIndexParams : public IndexParams\n{\n    HierarchicalClusteringIndexParams(int branching = 32,\n                                      flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM,\n                                      int trees = 4, int leaf_size = 100)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_HIERARCHICAL;\n        // The branching factor used in the hierarchical clustering\n        (*this)[\"branching\"] = branching;\n        // Algorithm used for picking the initial cluster centers\n        (*this)[\"centers_init\"] = centers_init;\n        // number of parallel trees to build\n        (*this)[\"trees\"] = trees;\n        // maximum leaf size\n        (*this)[\"leaf_size\"] = leaf_size;\n    }\n};\n\n\n/**\n * Hierarchical index\n *\n * Contains a tree constructed through a hierarchical clustering\n * and other information for indexing a set of points for nearest-neighbour matching.\n */\ntemplate <typename Distance>\nclass HierarchicalClusteringIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\nprivate:\n\n\n    typedef void (HierarchicalClusteringIndex::* centersAlgFunction)(int, int*, int, int*, int&);\n\n    /**\n     * The function used for choosing the cluster centers.\n     */\n    centersAlgFunction chooseCenters;\n\n\n\n    /**\n     * Chooses the initial centers in the k-means clustering in a random manner.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     *     indices_length = length of indices vector\n     *\n     */\n    void chooseCentersRandom(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        UniqueRandom r(indices_length);\n\n        int index;\n        for (index=0; index<k; ++index) {\n            bool duplicate = true;\n            int rnd;\n            while (duplicate) {\n                duplicate = false;\n                rnd = r.next();\n                if (rnd<0) {\n                    centers_length = index;\n                    return;\n                }\n\n                centers[index] = dsindices[rnd];\n\n                for (int j=0; j<index; ++j) {\n                    DistanceType sq = distance(dataset[centers[index]], dataset[centers[j]], dataset.cols);\n                    if (sq<1e-16) {\n                        duplicate = true;\n                    }\n                }\n            }\n        }\n\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using Gonzales' algorithm\n     * so that the centers are spaced apart from each other.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersGonzales(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        int rnd = rand_int(n);\n        assert(rnd >=0 && rnd < n);\n\n        centers[0] = dsindices[rnd];\n\n        int index;\n        for (index=1; index<k; ++index) {\n\n            int best_index = -1;\n            DistanceType best_val = 0;\n            for (int j=0; j<n; ++j) {\n                DistanceType dist = distance(dataset[centers[0]],dataset[dsindices[j]],dataset.cols);\n                for (int i=1; i<index; ++i) {\n                    DistanceType tmp_dist = distance(dataset[centers[i]],dataset[dsindices[j]],dataset.cols);\n                    if (tmp_dist<dist) {\n                        dist = tmp_dist;\n                    }\n                }\n                if (dist>best_val) {\n                    best_val = dist;\n                    best_index = j;\n                }\n            }\n            if (best_index!=-1) {\n                centers[index] = dsindices[best_index];\n            }\n            else {\n                break;\n            }\n        }\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using the algorithm\n     * proposed in the KMeans++ paper:\n     * Arthur, David; Vassilvitskii, Sergei - k-means++: The Advantages of Careful Seeding\n     *\n     * Implementation of this function was converted from the one provided in Arthur's code.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersKMeanspp(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        double currentPot = 0;\n        DistanceType* closestDistSq = new DistanceType[n];\n\n        // Choose one random center and set the closestDistSq values\n        int index = rand_int(n);\n        assert(index >=0 && index < n);\n        centers[0] = dsindices[index];\n\n        // Computing distance^2 will have the advantage of even higher probability further to pick new centers\n        // far from previous centers (and this complies to \"k-means++: the advantages of careful seeding\" article)\n        for (int i = 0; i < n; i++) {\n            closestDistSq[i] = distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols);\n            closestDistSq[i] = ensureSquareDistance<Distance>( closestDistSq[i] );\n            currentPot += closestDistSq[i];\n        }\n\n\n        const int numLocalTries = 1;\n\n        // Choose each center\n        int centerCount;\n        for (centerCount = 1; centerCount < k; centerCount++) {\n\n            // Repeat several trials\n            double bestNewPot = -1;\n            int bestNewIndex = 0;\n            for (int localTrial = 0; localTrial < numLocalTries; localTrial++) {\n\n                // Choose our center - have to be slightly careful to return a valid answer even accounting\n                // for possible rounding errors\n                double randVal = rand_double(currentPot);\n                for (index = 0; index < n-1; index++) {\n                    if (randVal <= closestDistSq[index]) break;\n                    else randVal -= closestDistSq[index];\n                }\n\n                // Compute the new potential\n                double newPot = 0;\n                for (int i = 0; i < n; i++) {\n                    DistanceType dist = distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols);\n                    newPot += std::min( ensureSquareDistance<Distance>(dist), closestDistSq[i] );\n                }\n\n                // Store the best result\n                if ((bestNewPot < 0)||(newPot < bestNewPot)) {\n                    bestNewPot = newPot;\n                    bestNewIndex = index;\n                }\n            }\n\n            // Add the appropriate center\n            centers[centerCount] = dsindices[bestNewIndex];\n            currentPot = bestNewPot;\n            for (int i = 0; i < n; i++) {\n                DistanceType dist = distance(dataset[dsindices[i]], dataset[dsindices[bestNewIndex]], dataset.cols);\n                closestDistSq[i] = std::min( ensureSquareDistance<Distance>(dist), closestDistSq[i] );\n            }\n        }\n\n        centers_length = centerCount;\n\n        delete[] closestDistSq;\n    }\n\n\n    /**\n     * Chooses the initial centers in a way inspired by Gonzales (by Pierre-Emmanuel Viel):\n     * select the first point of the list as a candidate, then parse the points list. If another\n     * point is further than current candidate from the other centers, test if it is a good center\n     * of a local aggregation. If it is, replace current candidate by this point. And so on...\n     *\n     * Used with KMeansIndex that computes centers coordinates by averaging positions of clusters points,\n     * this doesn't make a real difference with previous methods. But used with HierarchicalClusteringIndex\n     * class that pick centers among existing points instead of computing the barycenters, there is a real\n     * improvement.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void GroupWiseCenterChooser(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        const float kSpeedUpFactor = 1.3f;\n\n        int n = indices_length;\n\n        DistanceType* closestDistSq = new DistanceType[n];\n\n        // Choose one random center and set the closestDistSq values\n        int index = rand_int(n);\n        assert(index >=0 && index < n);\n        centers[0] = dsindices[index];\n\n        for (int i = 0; i < n; i++) {\n            closestDistSq[i] = distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols);\n        }\n\n\n        // Choose each center\n        int centerCount;\n        for (centerCount = 1; centerCount < k; centerCount++) {\n\n            // Repeat several trials\n            double bestNewPot = -1;\n            int bestNewIndex = 0;\n            DistanceType furthest = 0;\n            for (index = 0; index < n; index++) {\n\n                // We will test only the potential of the points further than current candidate\n                if( closestDistSq[index] > kSpeedUpFactor * (float)furthest ) {\n\n                    // Compute the new potential\n                    double newPot = 0;\n                    for (int i = 0; i < n; i++) {\n                        newPot += std::min( distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols)\n                                            , closestDistSq[i] );\n                    }\n\n                    // Store the best result\n                    if ((bestNewPot < 0)||(newPot <= bestNewPot)) {\n                        bestNewPot = newPot;\n                        bestNewIndex = index;\n                        furthest = closestDistSq[index];\n                    }\n                }\n            }\n\n            // Add the appropriate center\n            centers[centerCount] = dsindices[bestNewIndex];\n            for (int i = 0; i < n; i++) {\n                closestDistSq[i] = std::min( distance(dataset[dsindices[i]], dataset[dsindices[bestNewIndex]], dataset.cols)\n                                             , closestDistSq[i] );\n            }\n        }\n\n        centers_length = centerCount;\n\n        delete[] closestDistSq;\n    }\n\n\npublic:\n\n\n    /**\n     * Index constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the hierarchical k-means algorithm\n     */\n    HierarchicalClusteringIndex(const Matrix<ElementType>& inputData, const IndexParams& index_params = HierarchicalClusteringIndexParams(),\n                                Distance d = Distance())\n        : dataset(inputData), params(index_params), root(NULL), indices(NULL), distance(d)\n    {\n        memoryCounter = 0;\n\n        size_ = dataset.rows;\n        veclen_ = dataset.cols;\n\n        branching_ = get_param(params,\"branching\",32);\n        centers_init_ = get_param(params,\"centers_init\", FLANN_CENTERS_RANDOM);\n        trees_ = get_param(params,\"trees\",4);\n        leaf_size_ = get_param(params,\"leaf_size\",100);\n\n        if (centers_init_==FLANN_CENTERS_RANDOM) {\n            chooseCenters = &HierarchicalClusteringIndex::chooseCentersRandom;\n        }\n        else if (centers_init_==FLANN_CENTERS_GONZALES) {\n            chooseCenters = &HierarchicalClusteringIndex::chooseCentersGonzales;\n        }\n        else if (centers_init_==FLANN_CENTERS_KMEANSPP) {\n            chooseCenters = &HierarchicalClusteringIndex::chooseCentersKMeanspp;\n        }\n        else if (centers_init_==FLANN_CENTERS_GROUPWISE) {\n            chooseCenters = &HierarchicalClusteringIndex::GroupWiseCenterChooser;\n        }\n        else {\n            throw FLANNException(\"Unknown algorithm for choosing initial centers.\");\n        }\n\n        trees_ = get_param(params,\"trees\",4);\n        root = new NodePtr[trees_];\n        indices = new int*[trees_];\n\n        for (int i=0; i<trees_; ++i) {\n            root[i] = NULL;\n            indices[i] = NULL;\n        }\n    }\n\n    HierarchicalClusteringIndex(const HierarchicalClusteringIndex&);\n    HierarchicalClusteringIndex& operator=(const HierarchicalClusteringIndex&);\n\n    /**\n     * Index destructor.\n     *\n     * Release the memory used by the index.\n     */\n    virtual ~HierarchicalClusteringIndex()\n    {\n        free_elements();\n\n        if (root!=NULL) {\n            delete[] root;\n        }\n\n        if (indices!=NULL) {\n            delete[] indices;\n        }\n    }\n\n\n    /**\n     * Release the inner elements of indices[]\n     */\n    void free_elements()\n    {\n        if (indices!=NULL) {\n            for(int i=0; i<trees_; ++i) {\n                if (indices[i]!=NULL) {\n                    delete[] indices[i];\n                    indices[i] = NULL;\n                }\n            }\n        }\n    }\n\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return veclen_;\n    }\n\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return pool.usedMemory+pool.wastedMemory+memoryCounter;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        if (branching_<2) {\n            throw FLANNException(\"Branching factor must be at least 2\");\n        }\n\n        free_elements();\n\n        for (int i=0; i<trees_; ++i) {\n            indices[i] = new int[size_];\n            for (size_t j=0; j<size_; ++j) {\n                indices[i][j] = (int)j;\n            }\n            root[i] = pool.allocate<Node>();\n            computeClustering(root[i], indices[i], (int)size_, branching_,0);\n        }\n    }\n\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_HIERARCHICAL;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, branching_);\n        save_value(stream, trees_);\n        save_value(stream, centers_init_);\n        save_value(stream, leaf_size_);\n        save_value(stream, memoryCounter);\n        for (int i=0; i<trees_; ++i) {\n            save_value(stream, *indices[i], size_);\n            save_tree(stream, root[i], i);\n        }\n\n    }\n\n\n    void loadIndex(FILE* stream)\n    {\n        free_elements();\n\n        if (root!=NULL) {\n            delete[] root;\n        }\n\n        if (indices!=NULL) {\n            delete[] indices;\n        }\n\n        load_value(stream, branching_);\n        load_value(stream, trees_);\n        load_value(stream, centers_init_);\n        load_value(stream, leaf_size_);\n        load_value(stream, memoryCounter);\n\n        indices = new int*[trees_];\n        root = new NodePtr[trees_];\n        for (int i=0; i<trees_; ++i) {\n            indices[i] = new int[size_];\n            load_value(stream, *indices[i], size_);\n            load_tree(stream, root[i], i);\n        }\n\n        params[\"algorithm\"] = getType();\n        params[\"branching\"] = branching_;\n        params[\"trees\"] = trees_;\n        params[\"centers_init\"] = centers_init_;\n        params[\"leaf_size\"] = leaf_size_;\n    }\n\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     searchParams = parameters that influence the search algorithm (checks)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n\n        int maxChecks = get_param(searchParams,\"checks\",32);\n\n        // Priority queue storing intermediate branches in the best-bin-first search\n        Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);\n\n        std::vector<bool> checked(size_,false);\n        int checks = 0;\n        for (int i=0; i<trees_; ++i) {\n            findNN(root[i], result, vec, checks, maxChecks, heap, checked);\n        }\n\n        BranchSt branch;\n        while (heap->popMin(branch) && (checks<maxChecks || !result.full())) {\n            NodePtr node = branch.node;\n            findNN(node, result, vec, checks, maxChecks, heap, checked);\n        }\n        assert(result.full());\n\n        delete heap;\n\n    }\n\n    IndexParams getParameters() const\n    {\n        return params;\n    }\n\n\nprivate:\n\n    /**\n     * Struture representing a node in the hierarchical k-means tree.\n     */\n    struct Node\n    {\n        /**\n         * The cluster center index\n         */\n        int pivot;\n        /**\n         * The cluster size (number of points in the cluster)\n         */\n        int size;\n        /**\n         * Child nodes (only for non-terminal nodes)\n         */\n        Node** childs;\n        /**\n         * Node points (only for terminal nodes)\n         */\n        int* indices;\n        /**\n         * Level\n         */\n        int level;\n    };\n    typedef Node* NodePtr;\n\n\n\n    /**\n     * Alias definition for a nicer syntax.\n     */\n    typedef BranchStruct<NodePtr, DistanceType> BranchSt;\n\n\n\n    void save_tree(FILE* stream, NodePtr node, int num)\n    {\n        save_value(stream, *node);\n        if (node->childs==NULL) {\n            int indices_offset = (int)(node->indices - indices[num]);\n            save_value(stream, indices_offset);\n        }\n        else {\n            for(int i=0; i<branching_; ++i) {\n                save_tree(stream, node->childs[i], num);\n            }\n        }\n    }\n\n\n    void load_tree(FILE* stream, NodePtr& node, int num)\n    {\n        node = pool.allocate<Node>();\n        load_value(stream, *node);\n        if (node->childs==NULL) {\n            int indices_offset;\n            load_value(stream, indices_offset);\n            node->indices = indices[num] + indices_offset;\n        }\n        else {\n            node->childs = pool.allocate<NodePtr>(branching_);\n            for(int i=0; i<branching_; ++i) {\n                load_tree(stream, node->childs[i], num);\n            }\n        }\n    }\n\n\n\n\n    void computeLabels(int* dsindices, int indices_length,  int* centers, int centers_length, int* labels, DistanceType& cost)\n    {\n        cost = 0;\n        for (int i=0; i<indices_length; ++i) {\n            ElementType* point = dataset[dsindices[i]];\n            DistanceType dist = distance(point, dataset[centers[0]], veclen_);\n            labels[i] = 0;\n            for (int j=1; j<centers_length; ++j) {\n                DistanceType new_dist = distance(point, dataset[centers[j]], veclen_);\n                if (dist>new_dist) {\n                    labels[i] = j;\n                    dist = new_dist;\n                }\n            }\n            cost += dist;\n        }\n    }\n\n    /**\n     * The method responsible with actually doing the recursive hierarchical\n     * clustering\n     *\n     * Params:\n     *     node = the node to cluster\n     *     indices = indices of the points belonging to the current node\n     *     branching = the branching factor to use in the clustering\n     *\n     * TODO: for 1-sized clusters don't store a cluster center (it's the same as the single cluster point)\n     */\n    void computeClustering(NodePtr node, int* dsindices, int indices_length, int branching, int level)\n    {\n        node->size = indices_length;\n        node->level = level;\n\n        if (indices_length < leaf_size_) { // leaf node\n            node->indices = dsindices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n        std::vector<int> centers(branching);\n        std::vector<int> labels(indices_length);\n\n        int centers_length;\n        (this->*chooseCenters)(branching, dsindices, indices_length, &centers[0], centers_length);\n\n        if (centers_length<branching) {\n            node->indices = dsindices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n\n        //\tassign points to clusters\n        DistanceType cost;\n        computeLabels(dsindices, indices_length, &centers[0], centers_length, &labels[0], cost);\n\n        node->childs = pool.allocate<NodePtr>(branching);\n        int start = 0;\n        int end = start;\n        for (int i=0; i<branching; ++i) {\n            for (int j=0; j<indices_length; ++j) {\n                if (labels[j]==i) {\n                    std::swap(dsindices[j],dsindices[end]);\n                    std::swap(labels[j],labels[end]);\n                    end++;\n                }\n            }\n\n            node->childs[i] = pool.allocate<Node>();\n            node->childs[i]->pivot = centers[i];\n            node->childs[i]->indices = NULL;\n            computeClustering(node->childs[i],dsindices+start, end-start, branching, level+1);\n            start=end;\n        }\n    }\n\n\n\n    /**\n     * Performs one descent in the hierarchical k-means tree. The branches not\n     * visited are stored in a priority queue.\n     *\n     * Params:\n     *      node = node to explore\n     *      result = container for the k-nearest neighbors found\n     *      vec = query points\n     *      checks = how many points in the dataset have been checked so far\n     *      maxChecks = maximum dataset points to checks\n     */\n\n\n    void findNN(NodePtr node, ResultSet<DistanceType>& result, const ElementType* vec, int& checks, int maxChecks,\n                Heap<BranchSt>* heap, std::vector<bool>& checked)\n    {\n        if (node->childs==NULL) {\n            if (checks>=maxChecks) {\n                if (result.full()) return;\n            }\n            for (int i=0; i<node->size; ++i) {\n                int index = node->indices[i];\n                if (!checked[index]) {\n                    DistanceType dist = distance(dataset[index], vec, veclen_);\n                    result.addPoint(dist, index);\n                    checked[index] = true;\n                    ++checks;\n                }\n            }\n        }\n        else {\n            DistanceType* domain_distances = new DistanceType[branching_];\n            int best_index = 0;\n            domain_distances[best_index] = distance(vec, dataset[node->childs[best_index]->pivot], veclen_);\n            for (int i=1; i<branching_; ++i) {\n                domain_distances[i] = distance(vec, dataset[node->childs[i]->pivot], veclen_);\n                if (domain_distances[i]<domain_distances[best_index]) {\n                    best_index = i;\n                }\n            }\n            for (int i=0; i<branching_; ++i) {\n                if (i!=best_index) {\n                    heap->insert(BranchSt(node->childs[i],domain_distances[i]));\n                }\n            }\n            delete[] domain_distances;\n            findNN(node->childs[best_index],result,vec, checks, maxChecks, heap, checked);\n        }\n    }\n\nprivate:\n\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset;\n\n    /**\n     * Parameters used by this index\n     */\n    IndexParams params;\n\n\n    /**\n     * Number of features in the dataset.\n     */\n    size_t size_;\n\n    /**\n     * Length of each feature.\n     */\n    size_t veclen_;\n\n    /**\n     * The root node in the tree.\n     */\n    NodePtr* root;\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    int** indices;\n\n\n    /**\n     * The distance\n     */\n    Distance distance;\n\n    /**\n     * Pooled memory allocator.\n     *\n     * Using a pooled memory allocator is more efficient\n     * than allocating memory directly when there is a large\n     * number small of memory allocations.\n     */\n    PooledAllocator pool;\n\n    /**\n     * Memory occupied by the index.\n     */\n    int memoryCounter;\n\n    /** index parameters */\n    int branching_;\n    int trees_;\n    flann_centers_init_t centers_init_;\n    int leaf_size_;\n\n\n};\n\n}\n\n#endif /* OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/index_testing.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_INDEX_TESTING_H_\n#define OPENCV_FLANN_INDEX_TESTING_H_\n\n#include <cstring>\n#include <cassert>\n#include <cmath>\n\n#include \"matrix.h\"\n#include \"nn_index.h\"\n#include \"result_set.h\"\n#include \"logger.h\"\n#include \"timer.h\"\n\n\nnamespace cvflann\n{\n\ninline int countCorrectMatches(int* neighbors, int* groundTruth, int n)\n{\n    int count = 0;\n    for (int i=0; i<n; ++i) {\n        for (int k=0; k<n; ++k) {\n            if (neighbors[i]==groundTruth[k]) {\n                count++;\n                break;\n            }\n        }\n    }\n    return count;\n}\n\n\ntemplate <typename Distance>\ntypename Distance::ResultType computeDistanceRaport(const Matrix<typename Distance::ElementType>& inputData, typename Distance::ElementType* target,\n                                                    int* neighbors, int* groundTruth, int veclen, int n, const Distance& distance)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    DistanceType ret = 0;\n    for (int i=0; i<n; ++i) {\n        DistanceType den = distance(inputData[groundTruth[i]], target, veclen);\n        DistanceType num = distance(inputData[neighbors[i]], target, veclen);\n\n        if ((den==0)&&(num==0)) {\n            ret += 1;\n        }\n        else {\n            ret += num/den;\n        }\n    }\n\n    return ret;\n}\n\ntemplate <typename Distance>\nfloat search_with_ground_truth(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                               const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches, int nn, int checks,\n                               float& time, typename Distance::ResultType& dist, const Distance& distance, int skipMatches)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    if (matches.cols<size_t(nn)) {\n        Logger::info(\"matches.cols=%d, nn=%d\\n\",matches.cols,nn);\n\n        throw FLANNException(\"Ground truth is not computed for as many neighbors as requested\");\n    }\n\n    KNNResultSet<DistanceType> resultSet(nn+skipMatches);\n    SearchParams searchParams(checks);\n\n    std::vector<int> indices(nn+skipMatches);\n    std::vector<DistanceType> dists(nn+skipMatches);\n    int* neighbors = &indices[skipMatches];\n\n    int correct = 0;\n    DistanceType distR = 0;\n    StartStopTimer t;\n    int repeats = 0;\n    while (t.value<0.2) {\n        repeats++;\n        t.start();\n        correct = 0;\n        distR = 0;\n        for (size_t i = 0; i < testData.rows; i++) {\n            resultSet.init(&indices[0], &dists[0]);\n            index.findNeighbors(resultSet, testData[i], searchParams);\n\n            correct += countCorrectMatches(neighbors,matches[i], nn);\n            distR += computeDistanceRaport<Distance>(inputData, testData[i], neighbors, matches[i], (int)testData.cols, nn, distance);\n        }\n        t.stop();\n    }\n    time = float(t.value/repeats);\n\n    float precicion = (float)correct/(nn*testData.rows);\n\n    dist = distR/(testData.rows*nn);\n\n    Logger::info(\"%8d %10.4g %10.5g %10.5g %10.5g\\n\",\n                 checks, precicion, time, 1000.0 * time / testData.rows, dist);\n\n    return precicion;\n}\n\n\ntemplate <typename Distance>\nfloat test_index_checks(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                        const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches,\n                        int checks, float& precision, const Distance& distance, int nn = 1, int skipMatches = 0)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    Logger::info(\"  Nodes  Precision(%)   Time(s)   Time/vec(ms)  Mean dist\\n\");\n    Logger::info(\"---------------------------------------------------------\\n\");\n\n    float time = 0;\n    DistanceType dist = 0;\n    precision = search_with_ground_truth(index, inputData, testData, matches, nn, checks, time, dist, distance, skipMatches);\n\n    return time;\n}\n\ntemplate <typename Distance>\nfloat test_index_precision(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                           const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches,\n                           float precision, int& checks, const Distance& distance, int nn = 1, int skipMatches = 0)\n{\n    typedef typename Distance::ResultType DistanceType;\n    const float SEARCH_EPS = 0.001f;\n\n    Logger::info(\"  Nodes  Precision(%)   Time(s)   Time/vec(ms)  Mean dist\\n\");\n    Logger::info(\"---------------------------------------------------------\\n\");\n\n    int c2 = 1;\n    float p2;\n    int c1 = 1;\n    //float p1;\n    float time;\n    DistanceType dist;\n\n    p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n\n    if (p2>precision) {\n        Logger::info(\"Got as close as I can\\n\");\n        checks = c2;\n        return time;\n    }\n\n    while (p2<precision) {\n        c1 = c2;\n        //p1 = p2;\n        c2 *=2;\n        p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n    }\n\n    int cx;\n    float realPrecision;\n    if (fabs(p2-precision)>SEARCH_EPS) {\n        Logger::info(\"Start linear estimation\\n\");\n        // after we got to values in the vecinity of the desired precision\n        // use linear approximation get a better estimation\n\n        cx = (c1+c2)/2;\n        realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n        while (fabs(realPrecision-precision)>SEARCH_EPS) {\n\n            if (realPrecision<precision) {\n                c1 = cx;\n            }\n            else {\n                c2 = cx;\n            }\n            cx = (c1+c2)/2;\n            if (cx==c1) {\n                Logger::info(\"Got as close as I can\\n\");\n                break;\n            }\n            realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n        }\n\n        c2 = cx;\n        p2 = realPrecision;\n\n    }\n    else {\n        Logger::info(\"No need for linear estimation\\n\");\n        cx = c2;\n        realPrecision = p2;\n    }\n\n    checks = cx;\n    return time;\n}\n\n\ntemplate <typename Distance>\nvoid test_index_precisions(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                           const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches,\n                           float* precisions, int precisions_length, const Distance& distance, int nn = 1, int skipMatches = 0, float maxTime = 0)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    const float SEARCH_EPS = 0.001;\n\n    // make sure precisions array is sorted\n    std::sort(precisions, precisions+precisions_length);\n\n    int pindex = 0;\n    float precision = precisions[pindex];\n\n    Logger::info(\"  Nodes  Precision(%)   Time(s)   Time/vec(ms)  Mean dist\\n\");\n    Logger::info(\"---------------------------------------------------------\\n\");\n\n    int c2 = 1;\n    float p2;\n\n    int c1 = 1;\n    float p1;\n\n    float time;\n    DistanceType dist;\n\n    p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n\n    // if precision for 1 run down the tree is already\n    // better then some of the requested precisions, then\n    // skip those\n    while (precisions[pindex]<p2 && pindex<precisions_length) {\n        pindex++;\n    }\n\n    if (pindex==precisions_length) {\n        Logger::info(\"Got as close as I can\\n\");\n        return;\n    }\n\n    for (int i=pindex; i<precisions_length; ++i) {\n\n        precision = precisions[i];\n        while (p2<precision) {\n            c1 = c2;\n            p1 = p2;\n            c2 *=2;\n            p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n            if ((maxTime> 0)&&(time > maxTime)&&(p2<precision)) return;\n        }\n\n        int cx;\n        float realPrecision;\n        if (fabs(p2-precision)>SEARCH_EPS) {\n            Logger::info(\"Start linear estimation\\n\");\n            // after we got to values in the vecinity of the desired precision\n            // use linear approximation get a better estimation\n\n            cx = (c1+c2)/2;\n            realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n            while (fabs(realPrecision-precision)>SEARCH_EPS) {\n\n                if (realPrecision<precision) {\n                    c1 = cx;\n                }\n                else {\n                    c2 = cx;\n                }\n                cx = (c1+c2)/2;\n                if (cx==c1) {\n                    Logger::info(\"Got as close as I can\\n\");\n                    break;\n                }\n                realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n            }\n\n            c2 = cx;\n            p2 = realPrecision;\n\n        }\n        else {\n            Logger::info(\"No need for linear estimation\\n\");\n            cx = c2;\n            realPrecision = p2;\n        }\n\n    }\n}\n\n}\n\n#endif //OPENCV_FLANN_INDEX_TESTING_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/kdtree_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_KDTREE_INDEX_H_\n#define OPENCV_FLANN_KDTREE_INDEX_H_\n\n#include <algorithm>\n#include <map>\n#include <cassert>\n#include <cstring>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"dynamic_bitset.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\n\nnamespace cvflann\n{\n\nstruct KDTreeIndexParams : public IndexParams\n{\n    KDTreeIndexParams(int trees = 4)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KDTREE;\n        (*this)[\"trees\"] = trees;\n    }\n};\n\n\n/**\n * Randomized kd-tree index\n *\n * Contains the k-d trees and other information for indexing a set of points\n * for nearest-neighbor matching.\n */\ntemplate <typename Distance>\nclass KDTreeIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n    /**\n     * KDTree constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the kdtree algorithm\n     */\n    KDTreeIndex(const Matrix<ElementType>& inputData, const IndexParams& params = KDTreeIndexParams(),\n                Distance d = Distance() ) :\n        dataset_(inputData), index_params_(params), distance_(d)\n    {\n        size_ = dataset_.rows;\n        veclen_ = dataset_.cols;\n\n        trees_ = get_param(index_params_,\"trees\",4);\n        tree_roots_ = new NodePtr[trees_];\n\n        // Create a permutable array of indices to the input vectors.\n        vind_.resize(size_);\n        for (size_t i = 0; i < size_; ++i) {\n            vind_[i] = int(i);\n        }\n\n        mean_ = new DistanceType[veclen_];\n        var_ = new DistanceType[veclen_];\n    }\n\n\n    KDTreeIndex(const KDTreeIndex&);\n    KDTreeIndex& operator=(const KDTreeIndex&);\n\n    /**\n     * Standard destructor\n     */\n    ~KDTreeIndex()\n    {\n        if (tree_roots_!=NULL) {\n            delete[] tree_roots_;\n        }\n        delete[] mean_;\n        delete[] var_;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        /* Construct the randomized trees. */\n        for (int i = 0; i < trees_; i++) {\n            /* Randomize the order of vectors to allow for unbiased sampling. */\n            std::random_shuffle(vind_.begin(), vind_.end());\n            tree_roots_[i] = divideTree(&vind_[0], int(size_) );\n        }\n    }\n\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_KDTREE;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, trees_);\n        for (int i=0; i<trees_; ++i) {\n            save_tree(stream, tree_roots_[i]);\n        }\n    }\n\n\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, trees_);\n        if (tree_roots_!=NULL) {\n            delete[] tree_roots_;\n        }\n        tree_roots_ = new NodePtr[trees_];\n        for (int i=0; i<trees_; ++i) {\n            load_tree(stream,tree_roots_[i]);\n        }\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"trees\"] = tree_roots_;\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return veclen_;\n    }\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return int(pool_.usedMemory+pool_.wastedMemory+dataset_.rows*sizeof(int));  // pool memory and vind array memory\n    }\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     maxCheck = the maximum number of restarts (in a best-bin-first manner)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        int maxChecks = get_param(searchParams,\"checks\", 32);\n        float epsError = 1+get_param(searchParams,\"eps\",0.0f);\n\n        if (maxChecks==FLANN_CHECKS_UNLIMITED) {\n            getExactNeighbors(result, vec, epsError);\n        }\n        else {\n            getNeighbors(result, vec, maxChecks, epsError);\n        }\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\nprivate:\n\n\n    /*--------------------- Internal Data Structures --------------------------*/\n    struct Node\n    {\n        /**\n         * Dimension used for subdivision.\n         */\n        int divfeat;\n        /**\n         * The values used for subdivision.\n         */\n        DistanceType divval;\n        /**\n         * The child nodes.\n         */\n        Node* child1, * child2;\n    };\n    typedef Node* NodePtr;\n    typedef BranchStruct<NodePtr, DistanceType> BranchSt;\n    typedef BranchSt* Branch;\n\n\n\n    void save_tree(FILE* stream, NodePtr tree)\n    {\n        save_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            save_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            save_tree(stream, tree->child2);\n        }\n    }\n\n\n    void load_tree(FILE* stream, NodePtr& tree)\n    {\n        tree = pool_.allocate<Node>();\n        load_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            load_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            load_tree(stream, tree->child2);\n        }\n    }\n\n\n    /**\n     * Create a tree node that subdivides the list of vecs from vind[first]\n     * to vind[last].  The routine is called recursively on each sublist.\n     * Place a pointer to this new tree node in the location pTree.\n     *\n     * Params: pTree = the new node to create\n     *                  first = index of the first vector\n     *                  last = index of the last vector\n     */\n    NodePtr divideTree(int* ind, int count)\n    {\n        NodePtr node = pool_.allocate<Node>(); // allocate memory\n\n        /* If too few exemplars remain, then make this a leaf node. */\n        if ( count == 1) {\n            node->child1 = node->child2 = NULL;    /* Mark as leaf node. */\n            node->divfeat = *ind;    /* Store index of this vec. */\n        }\n        else {\n            int idx;\n            int cutfeat;\n            DistanceType cutval;\n            meanSplit(ind, count, idx, cutfeat, cutval);\n\n            node->divfeat = cutfeat;\n            node->divval = cutval;\n            node->child1 = divideTree(ind, idx);\n            node->child2 = divideTree(ind+idx, count-idx);\n        }\n\n        return node;\n    }\n\n\n    /**\n     * Choose which feature to use in order to subdivide this set of vectors.\n     * Make a random choice among those with the highest variance, and use\n     * its variance as the threshold value.\n     */\n    void meanSplit(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval)\n    {\n        memset(mean_,0,veclen_*sizeof(DistanceType));\n        memset(var_,0,veclen_*sizeof(DistanceType));\n\n        /* Compute mean values.  Only the first SAMPLE_MEAN values need to be\n            sampled to get a good estimate.\n         */\n        int cnt = std::min((int)SAMPLE_MEAN+1, count);\n        for (int j = 0; j < cnt; ++j) {\n            ElementType* v = dataset_[ind[j]];\n            for (size_t k=0; k<veclen_; ++k) {\n                mean_[k] += v[k];\n            }\n        }\n        for (size_t k=0; k<veclen_; ++k) {\n            mean_[k] /= cnt;\n        }\n\n        /* Compute variances (no need to divide by count). */\n        for (int j = 0; j < cnt; ++j) {\n            ElementType* v = dataset_[ind[j]];\n            for (size_t k=0; k<veclen_; ++k) {\n                DistanceType dist = v[k] - mean_[k];\n                var_[k] += dist * dist;\n            }\n        }\n        /* Select one of the highest variance indices at random. */\n        cutfeat = selectDivision(var_);\n        cutval = mean_[cutfeat];\n\n        int lim1, lim2;\n        planeSplit(ind, count, cutfeat, cutval, lim1, lim2);\n\n        if (lim1>count/2) index = lim1;\n        else if (lim2<count/2) index = lim2;\n        else index = count/2;\n\n        /* If either list is empty, it means that all remaining features\n         * are identical. Split in the middle to maintain a balanced tree.\n         */\n        if ((lim1==count)||(lim2==0)) index = count/2;\n    }\n\n\n    /**\n     * Select the top RAND_DIM largest values from v and return the index of\n     * one of these selected at random.\n     */\n    int selectDivision(DistanceType* v)\n    {\n        int num = 0;\n        size_t topind[RAND_DIM];\n\n        /* Create a list of the indices of the top RAND_DIM values. */\n        for (size_t i = 0; i < veclen_; ++i) {\n            if ((num < RAND_DIM)||(v[i] > v[topind[num-1]])) {\n                /* Put this element at end of topind. */\n                if (num < RAND_DIM) {\n                    topind[num++] = i;            /* Add to list. */\n                }\n                else {\n                    topind[num-1] = i;         /* Replace last element. */\n                }\n                /* Bubble end value down to right location by repeated swapping. */\n                int j = num - 1;\n                while (j > 0  &&  v[topind[j]] > v[topind[j-1]]) {\n                    std::swap(topind[j], topind[j-1]);\n                    --j;\n                }\n            }\n        }\n        /* Select a random integer in range [0,num-1], and return that index. */\n        int rnd = rand_int(num);\n        return (int)topind[rnd];\n    }\n\n\n    /**\n     *  Subdivide the list of points by a plane perpendicular on axe corresponding\n     *  to the 'cutfeat' dimension at 'cutval' position.\n     *\n     *  On return:\n     *  dataset[ind[0..lim1-1]][cutfeat]<cutval\n     *  dataset[ind[lim1..lim2-1]][cutfeat]==cutval\n     *  dataset[ind[lim2..count]][cutfeat]>cutval\n     */\n    void planeSplit(int* ind, int count, int cutfeat, DistanceType cutval, int& lim1, int& lim2)\n    {\n        /* Move vector indices for left subtree to front of list. */\n        int left = 0;\n        int right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>=cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        lim1 = left;\n        right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<=cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        lim2 = left;\n    }\n\n    /**\n     * Performs an exact nearest neighbor search. The exact search performs a full\n     * traversal of the tree.\n     */\n    void getExactNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, float epsError)\n    {\n        //\t\tcheckID -= 1;  /* Set a different unique ID for each search. */\n\n        if (trees_ > 1) {\n            fprintf(stderr,\"It doesn't make any sense to use more than one tree for exact search\");\n        }\n        if (trees_>0) {\n            searchLevelExact(result, vec, tree_roots_[0], 0.0, epsError);\n        }\n        assert(result.full());\n    }\n\n    /**\n     * Performs the approximate nearest-neighbor search. The search is approximate\n     * because the tree traversal is abandoned after a given number of descends in\n     * the tree.\n     */\n    void getNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, int maxCheck, float epsError)\n    {\n        int i;\n        BranchSt branch;\n\n        int checkCount = 0;\n        Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);\n        DynamicBitset checked(size_);\n\n        /* Search once through each tree down to root. */\n        for (i = 0; i < trees_; ++i) {\n            searchLevel(result, vec, tree_roots_[i], 0, checkCount, maxCheck, epsError, heap, checked);\n        }\n\n        /* Keep searching other branches from heap until finished. */\n        while ( heap->popMin(branch) && (checkCount < maxCheck || !result.full() )) {\n            searchLevel(result, vec, branch.node, branch.mindist, checkCount, maxCheck, epsError, heap, checked);\n        }\n\n        delete heap;\n\n        assert(result.full());\n    }\n\n\n    /**\n     *  Search starting from a given node of the tree.  Based on any mismatches at\n     *  higher levels, all exemplars below this level must have a distance of\n     *  at least \"mindistsq\".\n     */\n    void searchLevel(ResultSet<DistanceType>& result_set, const ElementType* vec, NodePtr node, DistanceType mindist, int& checkCount, int maxCheck,\n                     float epsError, Heap<BranchSt>* heap, DynamicBitset& checked)\n    {\n        if (result_set.worstDist()<mindist) {\n            //\t\t\tprintf(\"Ignoring branch, too far\\n\");\n            return;\n        }\n\n        /* If this is a leaf node, then do check and return. */\n        if ((node->child1 == NULL)&&(node->child2 == NULL)) {\n            /*  Do not check same node more than once when searching multiple trees.\n                Once a vector is checked, we set its location in vind to the\n                current checkID.\n             */\n            int index = node->divfeat;\n            if ( checked.test(index) || ((checkCount>=maxCheck)&& result_set.full()) ) return;\n            checked.set(index);\n            checkCount++;\n\n            DistanceType dist = distance_(dataset_[index], vec, veclen_);\n            result_set.addPoint(dist,index);\n\n            return;\n        }\n\n        /* Which child branch should be taken first? */\n        ElementType val = vec[node->divfeat];\n        DistanceType diff = val - node->divval;\n        NodePtr bestChild = (diff < 0) ? node->child1 : node->child2;\n        NodePtr otherChild = (diff < 0) ? node->child2 : node->child1;\n\n        /* Create a branch record for the branch not taken.  Add distance\n            of this feature boundary (we don't attempt to correct for any\n            use of this feature in a parent node, which is unlikely to\n            happen and would have only a small effect).  Don't bother\n            adding more branches to heap after halfway point, as cost of\n            adding exceeds their value.\n         */\n\n        DistanceType new_distsq = mindist + distance_.accum_dist(val, node->divval, node->divfeat);\n        //\t\tif (2 * checkCount < maxCheck  ||  !result.full()) {\n        if ((new_distsq*epsError < result_set.worstDist())||  !result_set.full()) {\n            heap->insert( BranchSt(otherChild, new_distsq) );\n        }\n\n        /* Call recursively to search next level down. */\n        searchLevel(result_set, vec, bestChild, mindist, checkCount, maxCheck, epsError, heap, checked);\n    }\n\n    /**\n     * Performs an exact search in the tree starting from a node.\n     */\n    void searchLevelExact(ResultSet<DistanceType>& result_set, const ElementType* vec, const NodePtr node, DistanceType mindist, const float epsError)\n    {\n        /* If this is a leaf node, then do check and return. */\n        if ((node->child1 == NULL)&&(node->child2 == NULL)) {\n            int index = node->divfeat;\n            DistanceType dist = distance_(dataset_[index], vec, veclen_);\n            result_set.addPoint(dist,index);\n            return;\n        }\n\n        /* Which child branch should be taken first? */\n        ElementType val = vec[node->divfeat];\n        DistanceType diff = val - node->divval;\n        NodePtr bestChild = (diff < 0) ? node->child1 : node->child2;\n        NodePtr otherChild = (diff < 0) ? node->child2 : node->child1;\n\n        /* Create a branch record for the branch not taken.  Add distance\n            of this feature boundary (we don't attempt to correct for any\n            use of this feature in a parent node, which is unlikely to\n            happen and would have only a small effect).  Don't bother\n            adding more branches to heap after halfway point, as cost of\n            adding exceeds their value.\n         */\n\n        DistanceType new_distsq = mindist + distance_.accum_dist(val, node->divval, node->divfeat);\n\n        /* Call recursively to search next level down. */\n        searchLevelExact(result_set, vec, bestChild, mindist, epsError);\n\n        if (new_distsq*epsError<=result_set.worstDist()) {\n            searchLevelExact(result_set, vec, otherChild, new_distsq, epsError);\n        }\n    }\n\n\nprivate:\n\n    enum\n    {\n        /**\n         * To improve efficiency, only SAMPLE_MEAN random values are used to\n         * compute the mean and variance at each level when building a tree.\n         * A value of 100 seems to perform as well as using all values.\n         */\n        SAMPLE_MEAN = 100,\n        /**\n         * Top random dimensions to consider\n         *\n         * When creating random trees, the dimension on which to subdivide is\n         * selected at random from among the top RAND_DIM dimensions with the\n         * highest variance.  A value of 5 works well.\n         */\n        RAND_DIM=5\n    };\n\n\n    /**\n     * Number of randomized trees that are used\n     */\n    int trees_;\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    std::vector<int> vind_;\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    IndexParams index_params_;\n\n    size_t size_;\n    size_t veclen_;\n\n\n    DistanceType* mean_;\n    DistanceType* var_;\n\n\n    /**\n     * Array of k-d trees used to find neighbours.\n     */\n    NodePtr* tree_roots_;\n\n    /**\n     * Pooled memory allocator.\n     *\n     * Using a pooled memory allocator is more efficient\n     * than allocating memory directly when there is a large\n     * number small of memory allocations.\n     */\n    PooledAllocator pool_;\n\n    Distance distance_;\n\n\n};   // class KDTreeForest\n\n}\n\n#endif //OPENCV_FLANN_KDTREE_INDEX_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/kdtree_single_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_\n#define OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_\n\n#include <algorithm>\n#include <map>\n#include <cassert>\n#include <cstring>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\nnamespace cvflann\n{\n\nstruct KDTreeSingleIndexParams : public IndexParams\n{\n    KDTreeSingleIndexParams(int leaf_max_size = 10, bool reorder = true, int dim = -1)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KDTREE_SINGLE;\n        (*this)[\"leaf_max_size\"] = leaf_max_size;\n        (*this)[\"reorder\"] = reorder;\n        (*this)[\"dim\"] = dim;\n    }\n};\n\n\n/**\n * Randomized kd-tree index\n *\n * Contains the k-d trees and other information for indexing a set of points\n * for nearest-neighbor matching.\n */\ntemplate <typename Distance>\nclass KDTreeSingleIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n    /**\n     * KDTree constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the kdtree algorithm\n     */\n    KDTreeSingleIndex(const Matrix<ElementType>& inputData, const IndexParams& params = KDTreeSingleIndexParams(),\n                      Distance d = Distance() ) :\n        dataset_(inputData), index_params_(params), distance_(d)\n    {\n        size_ = dataset_.rows;\n        dim_ = dataset_.cols;\n        int dim_param = get_param(params,\"dim\",-1);\n        if (dim_param>0) dim_ = dim_param;\n        leaf_max_size_ = get_param(params,\"leaf_max_size\",10);\n        reorder_ = get_param(params,\"reorder\",true);\n\n        // Create a permutable array of indices to the input vectors.\n        vind_.resize(size_);\n        for (size_t i = 0; i < size_; i++) {\n            vind_[i] = (int)i;\n        }\n    }\n\n    KDTreeSingleIndex(const KDTreeSingleIndex&);\n    KDTreeSingleIndex& operator=(const KDTreeSingleIndex&);\n\n    /**\n     * Standard destructor\n     */\n    ~KDTreeSingleIndex()\n    {\n        if (reorder_) delete[] data_.data;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        computeBoundingBox(root_bbox_);\n        root_node_ = divideTree(0, (int)size_, root_bbox_ );   // construct the tree\n\n        if (reorder_) {\n            delete[] data_.data;\n            data_ = cvflann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);\n            for (size_t i=0; i<size_; ++i) {\n                for (size_t j=0; j<dim_; ++j) {\n                    data_[i][j] = dataset_[vind_[i]][j];\n                }\n            }\n        }\n        else {\n            data_ = dataset_;\n        }\n    }\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_KDTREE_SINGLE;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, size_);\n        save_value(stream, dim_);\n        save_value(stream, root_bbox_);\n        save_value(stream, reorder_);\n        save_value(stream, leaf_max_size_);\n        save_value(stream, vind_);\n        if (reorder_) {\n            save_value(stream, data_);\n        }\n        save_tree(stream, root_node_);\n    }\n\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, size_);\n        load_value(stream, dim_);\n        load_value(stream, root_bbox_);\n        load_value(stream, reorder_);\n        load_value(stream, leaf_max_size_);\n        load_value(stream, vind_);\n        if (reorder_) {\n            load_value(stream, data_);\n        }\n        else {\n            data_ = dataset_;\n        }\n        load_tree(stream, root_node_);\n\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"leaf_max_size\"] = leaf_max_size_;\n        index_params_[\"reorder\"] = reorder_;\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return dim_;\n    }\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return (int)(pool_.usedMemory+pool_.wastedMemory+dataset_.rows*sizeof(int));  // pool memory and vind array memory\n    }\n\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        assert(queries.cols == veclen());\n        assert(indices.rows >= queries.rows);\n        assert(dists.rows >= queries.rows);\n        assert(int(indices.cols) >= knn);\n        assert(int(dists.cols) >= knn);\n\n        KNNSimpleResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.init(indices[i], dists[i]);\n            findNeighbors(resultSet, queries[i], params);\n        }\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     maxCheck = the maximum number of restarts (in a best-bin-first manner)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        float epsError = 1+get_param(searchParams,\"eps\",0.0f);\n\n        std::vector<DistanceType> dists(dim_,0);\n        DistanceType distsq = computeInitialDistances(vec, dists);\n        searchLevel(result, vec, root_node_, distsq, dists, epsError);\n    }\n\nprivate:\n\n\n    /*--------------------- Internal Data Structures --------------------------*/\n    struct Node\n    {\n        /**\n         * Indices of points in leaf node\n         */\n        int left, right;\n        /**\n         * Dimension used for subdivision.\n         */\n        int divfeat;\n        /**\n         * The values used for subdivision.\n         */\n        DistanceType divlow, divhigh;\n        /**\n         * The child nodes.\n         */\n        Node* child1, * child2;\n    };\n    typedef Node* NodePtr;\n\n\n    struct Interval\n    {\n        DistanceType low, high;\n    };\n\n    typedef std::vector<Interval> BoundingBox;\n\n    typedef BranchStruct<NodePtr, DistanceType> BranchSt;\n    typedef BranchSt* Branch;\n\n\n\n\n    void save_tree(FILE* stream, NodePtr tree)\n    {\n        save_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            save_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            save_tree(stream, tree->child2);\n        }\n    }\n\n\n    void load_tree(FILE* stream, NodePtr& tree)\n    {\n        tree = pool_.allocate<Node>();\n        load_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            load_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            load_tree(stream, tree->child2);\n        }\n    }\n\n\n    void computeBoundingBox(BoundingBox& bbox)\n    {\n        bbox.resize(dim_);\n        for (size_t i=0; i<dim_; ++i) {\n            bbox[i].low = (DistanceType)dataset_[0][i];\n            bbox[i].high = (DistanceType)dataset_[0][i];\n        }\n        for (size_t k=1; k<dataset_.rows; ++k) {\n            for (size_t i=0; i<dim_; ++i) {\n                if (dataset_[k][i]<bbox[i].low) bbox[i].low = (DistanceType)dataset_[k][i];\n                if (dataset_[k][i]>bbox[i].high) bbox[i].high = (DistanceType)dataset_[k][i];\n            }\n        }\n    }\n\n\n    /**\n     * Create a tree node that subdivides the list of vecs from vind[first]\n     * to vind[last].  The routine is called recursively on each sublist.\n     * Place a pointer to this new tree node in the location pTree.\n     *\n     * Params: pTree = the new node to create\n     *                  first = index of the first vector\n     *                  last = index of the last vector\n     */\n    NodePtr divideTree(int left, int right, BoundingBox& bbox)\n    {\n        NodePtr node = pool_.allocate<Node>(); // allocate memory\n\n        /* If too few exemplars remain, then make this a leaf node. */\n        if ( (right-left) <= leaf_max_size_) {\n            node->child1 = node->child2 = NULL;    /* Mark as leaf node. */\n            node->left = left;\n            node->right = right;\n\n            // compute bounding-box of leaf points\n            for (size_t i=0; i<dim_; ++i) {\n                bbox[i].low = (DistanceType)dataset_[vind_[left]][i];\n                bbox[i].high = (DistanceType)dataset_[vind_[left]][i];\n            }\n            for (int k=left+1; k<right; ++k) {\n                for (size_t i=0; i<dim_; ++i) {\n                    if (bbox[i].low>dataset_[vind_[k]][i]) bbox[i].low=(DistanceType)dataset_[vind_[k]][i];\n                    if (bbox[i].high<dataset_[vind_[k]][i]) bbox[i].high=(DistanceType)dataset_[vind_[k]][i];\n                }\n            }\n        }\n        else {\n            int idx;\n            int cutfeat;\n            DistanceType cutval;\n            middleSplit_(&vind_[0]+left, right-left, idx, cutfeat, cutval, bbox);\n\n            node->divfeat = cutfeat;\n\n            BoundingBox left_bbox(bbox);\n            left_bbox[cutfeat].high = cutval;\n            node->child1 = divideTree(left, left+idx, left_bbox);\n\n            BoundingBox right_bbox(bbox);\n            right_bbox[cutfeat].low = cutval;\n            node->child2 = divideTree(left+idx, right, right_bbox);\n\n            node->divlow = left_bbox[cutfeat].high;\n            node->divhigh = right_bbox[cutfeat].low;\n\n            for (size_t i=0; i<dim_; ++i) {\n                bbox[i].low = std::min(left_bbox[i].low, right_bbox[i].low);\n                bbox[i].high = std::max(left_bbox[i].high, right_bbox[i].high);\n            }\n        }\n\n        return node;\n    }\n\n    void computeMinMax(int* ind, int count, int dim, ElementType& min_elem, ElementType& max_elem)\n    {\n        min_elem = dataset_[ind[0]][dim];\n        max_elem = dataset_[ind[0]][dim];\n        for (int i=1; i<count; ++i) {\n            ElementType val = dataset_[ind[i]][dim];\n            if (val<min_elem) min_elem = val;\n            if (val>max_elem) max_elem = val;\n        }\n    }\n\n    void middleSplit(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval, const BoundingBox& bbox)\n    {\n        // find the largest span from the approximate bounding box\n        ElementType max_span = bbox[0].high-bbox[0].low;\n        cutfeat = 0;\n        cutval = (bbox[0].high+bbox[0].low)/2;\n        for (size_t i=1; i<dim_; ++i) {\n            ElementType span = bbox[i].high-bbox[i].low;\n            if (span>max_span) {\n                max_span = span;\n                cutfeat = i;\n                cutval = (bbox[i].high+bbox[i].low)/2;\n            }\n        }\n\n        // compute exact span on the found dimension\n        ElementType min_elem, max_elem;\n        computeMinMax(ind, count, cutfeat, min_elem, max_elem);\n        cutval = (min_elem+max_elem)/2;\n        max_span = max_elem - min_elem;\n\n        // check if a dimension of a largest span exists\n        size_t k = cutfeat;\n        for (size_t i=0; i<dim_; ++i) {\n            if (i==k) continue;\n            ElementType span = bbox[i].high-bbox[i].low;\n            if (span>max_span) {\n                computeMinMax(ind, count, i, min_elem, max_elem);\n                span = max_elem - min_elem;\n                if (span>max_span) {\n                    max_span = span;\n                    cutfeat = i;\n                    cutval = (min_elem+max_elem)/2;\n                }\n            }\n        }\n        int lim1, lim2;\n        planeSplit(ind, count, cutfeat, cutval, lim1, lim2);\n\n        if (lim1>count/2) index = lim1;\n        else if (lim2<count/2) index = lim2;\n        else index = count/2;\n    }\n\n\n    void middleSplit_(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval, const BoundingBox& bbox)\n    {\n        const float EPS=0.00001f;\n        DistanceType max_span = bbox[0].high-bbox[0].low;\n        for (size_t i=1; i<dim_; ++i) {\n            DistanceType span = bbox[i].high-bbox[i].low;\n            if (span>max_span) {\n                max_span = span;\n            }\n        }\n        DistanceType max_spread = -1;\n        cutfeat = 0;\n        for (size_t i=0; i<dim_; ++i) {\n            DistanceType span = bbox[i].high-bbox[i].low;\n            if (span>(DistanceType)((1-EPS)*max_span)) {\n                ElementType min_elem, max_elem;\n                computeMinMax(ind, count, cutfeat, min_elem, max_elem);\n                DistanceType spread = (DistanceType)(max_elem-min_elem);\n                if (spread>max_spread) {\n                    cutfeat = (int)i;\n                    max_spread = spread;\n                }\n            }\n        }\n        // split in the middle\n        DistanceType split_val = (bbox[cutfeat].low+bbox[cutfeat].high)/2;\n        ElementType min_elem, max_elem;\n        computeMinMax(ind, count, cutfeat, min_elem, max_elem);\n\n        if (split_val<min_elem) cutval = (DistanceType)min_elem;\n        else if (split_val>max_elem) cutval = (DistanceType)max_elem;\n        else cutval = split_val;\n\n        int lim1, lim2;\n        planeSplit(ind, count, cutfeat, cutval, lim1, lim2);\n\n        if (lim1>count/2) index = lim1;\n        else if (lim2<count/2) index = lim2;\n        else index = count/2;\n    }\n\n\n    /**\n     *  Subdivide the list of points by a plane perpendicular on axe corresponding\n     *  to the 'cutfeat' dimension at 'cutval' position.\n     *\n     *  On return:\n     *  dataset[ind[0..lim1-1]][cutfeat]<cutval\n     *  dataset[ind[lim1..lim2-1]][cutfeat]==cutval\n     *  dataset[ind[lim2..count]][cutfeat]>cutval\n     */\n    void planeSplit(int* ind, int count, int cutfeat, DistanceType cutval, int& lim1, int& lim2)\n    {\n        /* Move vector indices for left subtree to front of list. */\n        int left = 0;\n        int right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>=cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        /* If either list is empty, it means that all remaining features\n         * are identical. Split in the middle to maintain a balanced tree.\n         */\n        lim1 = left;\n        right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<=cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        lim2 = left;\n    }\n\n    DistanceType computeInitialDistances(const ElementType* vec, std::vector<DistanceType>& dists)\n    {\n        DistanceType distsq = 0.0;\n\n        for (size_t i = 0; i < dim_; ++i) {\n            if (vec[i] < root_bbox_[i].low) {\n                dists[i] = distance_.accum_dist(vec[i], root_bbox_[i].low, (int)i);\n                distsq += dists[i];\n            }\n            if (vec[i] > root_bbox_[i].high) {\n                dists[i] = distance_.accum_dist(vec[i], root_bbox_[i].high, (int)i);\n                distsq += dists[i];\n            }\n        }\n\n        return distsq;\n    }\n\n    /**\n     * Performs an exact search in the tree starting from a node.\n     */\n    void searchLevel(ResultSet<DistanceType>& result_set, const ElementType* vec, const NodePtr node, DistanceType mindistsq,\n                     std::vector<DistanceType>& dists, const float epsError)\n    {\n        /* If this is a leaf node, then do check and return. */\n        if ((node->child1 == NULL)&&(node->child2 == NULL)) {\n            DistanceType worst_dist = result_set.worstDist();\n            for (int i=node->left; i<node->right; ++i) {\n                int index = reorder_ ? i : vind_[i];\n                DistanceType dist = distance_(vec, data_[index], dim_, worst_dist);\n                if (dist<worst_dist) {\n                    result_set.addPoint(dist,vind_[i]);\n                }\n            }\n            return;\n        }\n\n        /* Which child branch should be taken first? */\n        int idx = node->divfeat;\n        ElementType val = vec[idx];\n        DistanceType diff1 = val - node->divlow;\n        DistanceType diff2 = val - node->divhigh;\n\n        NodePtr bestChild;\n        NodePtr otherChild;\n        DistanceType cut_dist;\n        if ((diff1+diff2)<0) {\n            bestChild = node->child1;\n            otherChild = node->child2;\n            cut_dist = distance_.accum_dist(val, node->divhigh, idx);\n        }\n        else {\n            bestChild = node->child2;\n            otherChild = node->child1;\n            cut_dist = distance_.accum_dist( val, node->divlow, idx);\n        }\n\n        /* Call recursively to search next level down. */\n        searchLevel(result_set, vec, bestChild, mindistsq, dists, epsError);\n\n        DistanceType dst = dists[idx];\n        mindistsq = mindistsq + cut_dist - dst;\n        dists[idx] = cut_dist;\n        if (mindistsq*epsError<=result_set.worstDist()) {\n            searchLevel(result_set, vec, otherChild, mindistsq, dists, epsError);\n        }\n        dists[idx] = dst;\n    }\n\nprivate:\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    IndexParams index_params_;\n\n    int leaf_max_size_;\n    bool reorder_;\n\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    std::vector<int> vind_;\n\n    Matrix<ElementType> data_;\n\n    size_t size_;\n    size_t dim_;\n\n    /**\n     * Array of k-d trees used to find neighbours.\n     */\n    NodePtr root_node_;\n\n    BoundingBox root_bbox_;\n\n    /**\n     * Pooled memory allocator.\n     *\n     * Using a pooled memory allocator is more efficient\n     * than allocating memory directly when there is a large\n     * number small of memory allocations.\n     */\n    PooledAllocator pool_;\n\n    Distance distance_;\n};   // class KDTree\n\n}\n\n#endif //OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/kmeans_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_KMEANS_INDEX_H_\n#define OPENCV_FLANN_KMEANS_INDEX_H_\n\n#include <algorithm>\n#include <map>\n#include <cassert>\n#include <limits>\n#include <cmath>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"dist.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n#include \"logger.h\"\n\n\nnamespace cvflann\n{\n\nstruct KMeansIndexParams : public IndexParams\n{\n    KMeansIndexParams(int branching = 32, int iterations = 11,\n                      flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM, float cb_index = 0.2 )\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KMEANS;\n        // branching factor\n        (*this)[\"branching\"] = branching;\n        // max iterations to perform in one kmeans clustering (kmeans tree)\n        (*this)[\"iterations\"] = iterations;\n        // algorithm used for picking the initial cluster centers for kmeans tree\n        (*this)[\"centers_init\"] = centers_init;\n        // cluster boundary index. Used when searching the kmeans tree\n        (*this)[\"cb_index\"] = cb_index;\n    }\n};\n\n\n/**\n * Hierarchical kmeans index\n *\n * Contains a tree constructed through a hierarchical kmeans clustering\n * and other information for indexing a set of points for nearest-neighbour matching.\n */\ntemplate <typename Distance>\nclass KMeansIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n\n    typedef void (KMeansIndex::* centersAlgFunction)(int, int*, int, int*, int&);\n\n    /**\n     * The function used for choosing the cluster centers.\n     */\n    centersAlgFunction chooseCenters;\n\n\n\n    /**\n     * Chooses the initial centers in the k-means clustering in a random manner.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     *     indices_length = length of indices vector\n     *\n     */\n    void chooseCentersRandom(int k, int* indices, int indices_length, int* centers, int& centers_length)\n    {\n        UniqueRandom r(indices_length);\n\n        int index;\n        for (index=0; index<k; ++index) {\n            bool duplicate = true;\n            int rnd;\n            while (duplicate) {\n                duplicate = false;\n                rnd = r.next();\n                if (rnd<0) {\n                    centers_length = index;\n                    return;\n                }\n\n                centers[index] = indices[rnd];\n\n                for (int j=0; j<index; ++j) {\n                    DistanceType sq = distance_(dataset_[centers[index]], dataset_[centers[j]], dataset_.cols);\n                    if (sq<1e-16) {\n                        duplicate = true;\n                    }\n                }\n            }\n        }\n\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using Gonzales' algorithm\n     * so that the centers are spaced apart from each other.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersGonzales(int k, int* indices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        int rnd = rand_int(n);\n        assert(rnd >=0 && rnd < n);\n\n        centers[0] = indices[rnd];\n\n        int index;\n        for (index=1; index<k; ++index) {\n\n            int best_index = -1;\n            DistanceType best_val = 0;\n            for (int j=0; j<n; ++j) {\n                DistanceType dist = distance_(dataset_[centers[0]],dataset_[indices[j]],dataset_.cols);\n                for (int i=1; i<index; ++i) {\n                    DistanceType tmp_dist = distance_(dataset_[centers[i]],dataset_[indices[j]],dataset_.cols);\n                    if (tmp_dist<dist) {\n                        dist = tmp_dist;\n                    }\n                }\n                if (dist>best_val) {\n                    best_val = dist;\n                    best_index = j;\n                }\n            }\n            if (best_index!=-1) {\n                centers[index] = indices[best_index];\n            }\n            else {\n                break;\n            }\n        }\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using the algorithm\n     * proposed in the KMeans++ paper:\n     * Arthur, David; Vassilvitskii, Sergei - k-means++: The Advantages of Careful Seeding\n     *\n     * Implementation of this function was converted from the one provided in Arthur's code.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersKMeanspp(int k, int* indices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        double currentPot = 0;\n        DistanceType* closestDistSq = new DistanceType[n];\n\n        // Choose one random center and set the closestDistSq values\n        int index = rand_int(n);\n        assert(index >=0 && index < n);\n        centers[0] = indices[index];\n\n        for (int i = 0; i < n; i++) {\n            closestDistSq[i] = distance_(dataset_[indices[i]], dataset_[indices[index]], dataset_.cols);\n            closestDistSq[i] = ensureSquareDistance<Distance>( closestDistSq[i] );\n            currentPot += closestDistSq[i];\n        }\n\n\n        const int numLocalTries = 1;\n\n        // Choose each center\n        int centerCount;\n        for (centerCount = 1; centerCount < k; centerCount++) {\n\n            // Repeat several trials\n            double bestNewPot = -1;\n            int bestNewIndex = -1;\n            for (int localTrial = 0; localTrial < numLocalTries; localTrial++) {\n\n                // Choose our center - have to be slightly careful to return a valid answer even accounting\n                // for possible rounding errors\n                double randVal = rand_double(currentPot);\n                for (index = 0; index < n-1; index++) {\n                    if (randVal <= closestDistSq[index]) break;\n                    else randVal -= closestDistSq[index];\n                }\n\n                // Compute the new potential\n                double newPot = 0;\n                for (int i = 0; i < n; i++) {\n                    DistanceType dist = distance_(dataset_[indices[i]], dataset_[indices[index]], dataset_.cols);\n                    newPot += std::min( ensureSquareDistance<Distance>(dist), closestDistSq[i] );\n                }\n\n                // Store the best result\n                if ((bestNewPot < 0)||(newPot < bestNewPot)) {\n                    bestNewPot = newPot;\n                    bestNewIndex = index;\n                }\n            }\n\n            // Add the appropriate center\n            centers[centerCount] = indices[bestNewIndex];\n            currentPot = bestNewPot;\n            for (int i = 0; i < n; i++) {\n                DistanceType dist = distance_(dataset_[indices[i]], dataset_[indices[bestNewIndex]], dataset_.cols);\n                closestDistSq[i] = std::min( ensureSquareDistance<Distance>(dist), closestDistSq[i] );\n            }\n        }\n\n        centers_length = centerCount;\n\n        delete[] closestDistSq;\n    }\n\n\n\npublic:\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_KMEANS;\n    }\n\n    class KMeansDistanceComputer : public cv::ParallelLoopBody\n    {\n    public:\n        KMeansDistanceComputer(Distance _distance, const Matrix<ElementType>& _dataset,\n            const int _branching, const int* _indices, const Matrix<double>& _dcenters, const size_t _veclen,\n            int* _count, int* _belongs_to, std::vector<DistanceType>& _radiuses, bool& _converged, cv::Mutex& _mtx)\n            : distance(_distance)\n            , dataset(_dataset)\n            , branching(_branching)\n            , indices(_indices)\n            , dcenters(_dcenters)\n            , veclen(_veclen)\n            , count(_count)\n            , belongs_to(_belongs_to)\n            , radiuses(_radiuses)\n            , converged(_converged)\n            , mtx(_mtx)\n        {\n        }\n\n        void operator()(const cv::Range& range) const\n        {\n            const int begin = range.start;\n            const int end = range.end;\n\n            for( int i = begin; i<end; ++i)\n            {\n                DistanceType sq_dist = distance(dataset[indices[i]], dcenters[0], veclen);\n                int new_centroid = 0;\n                for (int j=1; j<branching; ++j) {\n                    DistanceType new_sq_dist = distance(dataset[indices[i]], dcenters[j], veclen);\n                    if (sq_dist>new_sq_dist) {\n                        new_centroid = j;\n                        sq_dist = new_sq_dist;\n                    }\n                }\n                if (sq_dist > radiuses[new_centroid]) {\n                    radiuses[new_centroid] = sq_dist;\n                }\n                if (new_centroid != belongs_to[i]) {\n                    count[belongs_to[i]]--;\n                    count[new_centroid]++;\n                    belongs_to[i] = new_centroid;\n                    mtx.lock();\n                    converged = false;\n                    mtx.unlock();\n                }\n            }\n        }\n\n    private:\n        Distance distance;\n        const Matrix<ElementType>& dataset;\n        const int branching;\n        const int* indices;\n        const Matrix<double>& dcenters;\n        const size_t veclen;\n        int* count;\n        int* belongs_to;\n        std::vector<DistanceType>& radiuses;\n        bool& converged;\n        cv::Mutex& mtx;\n        KMeansDistanceComputer& operator=( const KMeansDistanceComputer & ) { return *this; }\n    };\n\n    /**\n     * Index constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the hierarchical k-means algorithm\n     */\n    KMeansIndex(const Matrix<ElementType>& inputData, const IndexParams& params = KMeansIndexParams(),\n                Distance d = Distance())\n        : dataset_(inputData), index_params_(params), root_(NULL), indices_(NULL), distance_(d)\n    {\n        memoryCounter_ = 0;\n\n        size_ = dataset_.rows;\n        veclen_ = dataset_.cols;\n\n        branching_ = get_param(params,\"branching\",32);\n        iterations_ = get_param(params,\"iterations\",11);\n        if (iterations_<0) {\n            iterations_ = (std::numeric_limits<int>::max)();\n        }\n        centers_init_  = get_param(params,\"centers_init\",FLANN_CENTERS_RANDOM);\n\n        if (centers_init_==FLANN_CENTERS_RANDOM) {\n            chooseCenters = &KMeansIndex::chooseCentersRandom;\n        }\n        else if (centers_init_==FLANN_CENTERS_GONZALES) {\n            chooseCenters = &KMeansIndex::chooseCentersGonzales;\n        }\n        else if (centers_init_==FLANN_CENTERS_KMEANSPP) {\n            chooseCenters = &KMeansIndex::chooseCentersKMeanspp;\n        }\n        else {\n            throw FLANNException(\"Unknown algorithm for choosing initial centers.\");\n        }\n        cb_index_ = 0.4f;\n\n    }\n\n\n    KMeansIndex(const KMeansIndex&);\n    KMeansIndex& operator=(const KMeansIndex&);\n\n\n    /**\n     * Index destructor.\n     *\n     * Release the memory used by the index.\n     */\n    virtual ~KMeansIndex()\n    {\n        if (root_ != NULL) {\n            free_centers(root_);\n        }\n        if (indices_!=NULL) {\n            delete[] indices_;\n        }\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return veclen_;\n    }\n\n\n    void set_cb_index( float index)\n    {\n        cb_index_ = index;\n    }\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return pool_.usedMemory+pool_.wastedMemory+memoryCounter_;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        if (branching_<2) {\n            throw FLANNException(\"Branching factor must be at least 2\");\n        }\n\n        indices_ = new int[size_];\n        for (size_t i=0; i<size_; ++i) {\n            indices_[i] = int(i);\n        }\n\n        root_ = pool_.allocate<KMeansNode>();\n        std::memset(root_, 0, sizeof(KMeansNode));\n\n        computeNodeStatistics(root_, indices_, (int)size_);\n        computeClustering(root_, indices_, (int)size_, branching_,0);\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, branching_);\n        save_value(stream, iterations_);\n        save_value(stream, memoryCounter_);\n        save_value(stream, cb_index_);\n        save_value(stream, *indices_, (int)size_);\n\n        save_tree(stream, root_);\n    }\n\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, branching_);\n        load_value(stream, iterations_);\n        load_value(stream, memoryCounter_);\n        load_value(stream, cb_index_);\n        if (indices_!=NULL) {\n            delete[] indices_;\n        }\n        indices_ = new int[size_];\n        load_value(stream, *indices_, size_);\n\n        if (root_!=NULL) {\n            free_centers(root_);\n        }\n        load_tree(stream, root_);\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"branching\"] = branching_;\n        index_params_[\"iterations\"] = iterations_;\n        index_params_[\"centers_init\"] = centers_init_;\n        index_params_[\"cb_index\"] = cb_index_;\n\n    }\n\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     searchParams = parameters that influence the search algorithm (checks, cb_index)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n\n        int maxChecks = get_param(searchParams,\"checks\",32);\n\n        if (maxChecks==FLANN_CHECKS_UNLIMITED) {\n            findExactNN(root_, result, vec);\n        }\n        else {\n            // Priority queue storing intermediate branches in the best-bin-first search\n            Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);\n\n            int checks = 0;\n            findNN(root_, result, vec, checks, maxChecks, heap);\n\n            BranchSt branch;\n            while (heap->popMin(branch) && (checks<maxChecks || !result.full())) {\n                KMeansNodePtr node = branch.node;\n                findNN(node, result, vec, checks, maxChecks, heap);\n            }\n            assert(result.full());\n\n            delete heap;\n        }\n\n    }\n\n    /**\n     * Clustering function that takes a cut in the hierarchical k-means\n     * tree and return the clusters centers of that clustering.\n     * Params:\n     *     numClusters = number of clusters to have in the clustering computed\n     * Returns: number of cluster centers\n     */\n    int getClusterCenters(Matrix<DistanceType>& centers)\n    {\n        int numClusters = centers.rows;\n        if (numClusters<1) {\n            throw FLANNException(\"Number of clusters must be at least 1\");\n        }\n\n        DistanceType variance;\n        KMeansNodePtr* clusters = new KMeansNodePtr[numClusters];\n\n        int clusterCount = getMinVarianceClusters(root_, clusters, numClusters, variance);\n\n        Logger::info(\"Clusters requested: %d, returning %d\\n\",numClusters, clusterCount);\n\n        for (int i=0; i<clusterCount; ++i) {\n            DistanceType* center = clusters[i]->pivot;\n            for (size_t j=0; j<veclen_; ++j) {\n                centers[i][j] = center[j];\n            }\n        }\n        delete[] clusters;\n\n        return clusterCount;\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n\nprivate:\n    /**\n     * Struture representing a node in the hierarchical k-means tree.\n     */\n    struct KMeansNode\n    {\n        /**\n         * The cluster center.\n         */\n        DistanceType* pivot;\n        /**\n         * The cluster radius.\n         */\n        DistanceType radius;\n        /**\n         * The cluster mean radius.\n         */\n        DistanceType mean_radius;\n        /**\n         * The cluster variance.\n         */\n        DistanceType variance;\n        /**\n         * The cluster size (number of points in the cluster)\n         */\n        int size;\n        /**\n         * Child nodes (only for non-terminal nodes)\n         */\n        KMeansNode** childs;\n        /**\n         * Node points (only for terminal nodes)\n         */\n        int* indices;\n        /**\n         * Level\n         */\n        int level;\n    };\n    typedef KMeansNode* KMeansNodePtr;\n\n    /**\n     * Alias definition for a nicer syntax.\n     */\n    typedef BranchStruct<KMeansNodePtr, DistanceType> BranchSt;\n\n\n\n\n    void save_tree(FILE* stream, KMeansNodePtr node)\n    {\n        save_value(stream, *node);\n        save_value(stream, *(node->pivot), (int)veclen_);\n        if (node->childs==NULL) {\n            int indices_offset = (int)(node->indices - indices_);\n            save_value(stream, indices_offset);\n        }\n        else {\n            for(int i=0; i<branching_; ++i) {\n                save_tree(stream, node->childs[i]);\n            }\n        }\n    }\n\n\n    void load_tree(FILE* stream, KMeansNodePtr& node)\n    {\n        node = pool_.allocate<KMeansNode>();\n        load_value(stream, *node);\n        node->pivot = new DistanceType[veclen_];\n        load_value(stream, *(node->pivot), (int)veclen_);\n        if (node->childs==NULL) {\n            int indices_offset;\n            load_value(stream, indices_offset);\n            node->indices = indices_ + indices_offset;\n        }\n        else {\n            node->childs = pool_.allocate<KMeansNodePtr>(branching_);\n            for(int i=0; i<branching_; ++i) {\n                load_tree(stream, node->childs[i]);\n            }\n        }\n    }\n\n\n    /**\n     * Helper function\n     */\n    void free_centers(KMeansNodePtr node)\n    {\n        delete[] node->pivot;\n        if (node->childs!=NULL) {\n            for (int k=0; k<branching_; ++k) {\n                free_centers(node->childs[k]);\n            }\n        }\n    }\n\n    /**\n     * Computes the statistics of a node (mean, radius, variance).\n     *\n     * Params:\n     *     node = the node to use\n     *     indices = the indices of the points belonging to the node\n     */\n    void computeNodeStatistics(KMeansNodePtr node, int* indices, int indices_length)\n    {\n\n        DistanceType radius = 0;\n        DistanceType variance = 0;\n        DistanceType* mean = new DistanceType[veclen_];\n        memoryCounter_ += int(veclen_*sizeof(DistanceType));\n\n        memset(mean,0,veclen_*sizeof(DistanceType));\n\n        for (size_t i=0; i<size_; ++i) {\n            ElementType* vec = dataset_[indices[i]];\n            for (size_t j=0; j<veclen_; ++j) {\n                mean[j] += vec[j];\n            }\n            variance += distance_(vec, ZeroIterator<ElementType>(), veclen_);\n        }\n        for (size_t j=0; j<veclen_; ++j) {\n            mean[j] /= size_;\n        }\n        variance /= size_;\n        variance -= distance_(mean, ZeroIterator<ElementType>(), veclen_);\n\n        DistanceType tmp = 0;\n        for (int i=0; i<indices_length; ++i) {\n            tmp = distance_(mean, dataset_[indices[i]], veclen_);\n            if (tmp>radius) {\n                radius = tmp;\n            }\n        }\n\n        node->variance = variance;\n        node->radius = radius;\n        node->pivot = mean;\n    }\n\n\n    /**\n     * The method responsible with actually doing the recursive hierarchical\n     * clustering\n     *\n     * Params:\n     *     node = the node to cluster\n     *     indices = indices of the points belonging to the current node\n     *     branching = the branching factor to use in the clustering\n     *\n     * TODO: for 1-sized clusters don't store a cluster center (it's the same as the single cluster point)\n     */\n    void computeClustering(KMeansNodePtr node, int* indices, int indices_length, int branching, int level)\n    {\n        node->size = indices_length;\n        node->level = level;\n\n        if (indices_length < branching) {\n            node->indices = indices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n        cv::AutoBuffer<int> centers_idx_buf(branching);\n        int* centers_idx = (int*)centers_idx_buf;\n        int centers_length;\n        (this->*chooseCenters)(branching, indices, indices_length, centers_idx, centers_length);\n\n        if (centers_length<branching) {\n            node->indices = indices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n\n        cv::AutoBuffer<double> dcenters_buf(branching*veclen_);\n        Matrix<double> dcenters((double*)dcenters_buf,branching,veclen_);\n        for (int i=0; i<centers_length; ++i) {\n            ElementType* vec = dataset_[centers_idx[i]];\n            for (size_t k=0; k<veclen_; ++k) {\n                dcenters[i][k] = double(vec[k]);\n            }\n        }\n\n        std::vector<DistanceType> radiuses(branching);\n        cv::AutoBuffer<int> count_buf(branching);\n        int* count = (int*)count_buf;\n        for (int i=0; i<branching; ++i) {\n            radiuses[i] = 0;\n            count[i] = 0;\n        }\n\n        //\tassign points to clusters\n        cv::AutoBuffer<int> belongs_to_buf(indices_length);\n        int* belongs_to = (int*)belongs_to_buf;\n        for (int i=0; i<indices_length; ++i) {\n\n            DistanceType sq_dist = distance_(dataset_[indices[i]], dcenters[0], veclen_);\n            belongs_to[i] = 0;\n            for (int j=1; j<branching; ++j) {\n                DistanceType new_sq_dist = distance_(dataset_[indices[i]], dcenters[j], veclen_);\n                if (sq_dist>new_sq_dist) {\n                    belongs_to[i] = j;\n                    sq_dist = new_sq_dist;\n                }\n            }\n            if (sq_dist>radiuses[belongs_to[i]]) {\n                radiuses[belongs_to[i]] = sq_dist;\n            }\n            count[belongs_to[i]]++;\n        }\n\n        bool converged = false;\n        int iteration = 0;\n        while (!converged && iteration<iterations_) {\n            converged = true;\n            iteration++;\n\n            // compute the new cluster centers\n            for (int i=0; i<branching; ++i) {\n                memset(dcenters[i],0,sizeof(double)*veclen_);\n                radiuses[i] = 0;\n            }\n            for (int i=0; i<indices_length; ++i) {\n                ElementType* vec = dataset_[indices[i]];\n                double* center = dcenters[belongs_to[i]];\n                for (size_t k=0; k<veclen_; ++k) {\n                    center[k] += vec[k];\n                }\n            }\n            for (int i=0; i<branching; ++i) {\n                int cnt = count[i];\n                for (size_t k=0; k<veclen_; ++k) {\n                    dcenters[i][k] /= cnt;\n                }\n            }\n\n            // reassign points to clusters\n            cv::Mutex mtx;\n            KMeansDistanceComputer invoker(distance_, dataset_, branching, indices, dcenters, veclen_, count, belongs_to, radiuses, converged, mtx);\n            parallel_for_(cv::Range(0, (int)indices_length), invoker);\n\n            for (int i=0; i<branching; ++i) {\n                // if one cluster converges to an empty cluster,\n                // move an element into that cluster\n                if (count[i]==0) {\n                    int j = (i+1)%branching;\n                    while (count[j]<=1) {\n                        j = (j+1)%branching;\n                    }\n\n                    for (int k=0; k<indices_length; ++k) {\n                        if (belongs_to[k]==j) {\n                            // for cluster j, we move the furthest element from the center to the empty cluster i\n                            if ( distance_(dataset_[indices[k]], dcenters[j], veclen_) == radiuses[j] ) {\n                                belongs_to[k] = i;\n                                count[j]--;\n                                count[i]++;\n                                break;\n                            }\n                        }\n                    }\n                    converged = false;\n                }\n            }\n\n        }\n\n        DistanceType** centers = new DistanceType*[branching];\n\n        for (int i=0; i<branching; ++i) {\n            centers[i] = new DistanceType[veclen_];\n            memoryCounter_ += (int)(veclen_*sizeof(DistanceType));\n            for (size_t k=0; k<veclen_; ++k) {\n                centers[i][k] = (DistanceType)dcenters[i][k];\n            }\n        }\n\n\n        // compute kmeans clustering for each of the resulting clusters\n        node->childs = pool_.allocate<KMeansNodePtr>(branching);\n        int start = 0;\n        int end = start;\n        for (int c=0; c<branching; ++c) {\n            int s = count[c];\n\n            DistanceType variance = 0;\n            DistanceType mean_radius =0;\n            for (int i=0; i<indices_length; ++i) {\n                if (belongs_to[i]==c) {\n                    DistanceType d = distance_(dataset_[indices[i]], ZeroIterator<ElementType>(), veclen_);\n                    variance += d;\n                    mean_radius += sqrt(d);\n                    std::swap(indices[i],indices[end]);\n                    std::swap(belongs_to[i],belongs_to[end]);\n                    end++;\n                }\n            }\n            variance /= s;\n            mean_radius /= s;\n            variance -= distance_(centers[c], ZeroIterator<ElementType>(), veclen_);\n\n            node->childs[c] = pool_.allocate<KMeansNode>();\n            std::memset(node->childs[c], 0, sizeof(KMeansNode));\n            node->childs[c]->radius = radiuses[c];\n            node->childs[c]->pivot = centers[c];\n            node->childs[c]->variance = variance;\n            node->childs[c]->mean_radius = mean_radius;\n            computeClustering(node->childs[c],indices+start, end-start, branching, level+1);\n            start=end;\n        }\n    }\n\n\n\n    /**\n     * Performs one descent in the hierarchical k-means tree. The branches not\n     * visited are stored in a priority queue.\n     *\n     * Params:\n     *      node = node to explore\n     *      result = container for the k-nearest neighbors found\n     *      vec = query points\n     *      checks = how many points in the dataset have been checked so far\n     *      maxChecks = maximum dataset points to checks\n     */\n\n\n    void findNN(KMeansNodePtr node, ResultSet<DistanceType>& result, const ElementType* vec, int& checks, int maxChecks,\n                Heap<BranchSt>* heap)\n    {\n        // Ignore those clusters that are too far away\n        {\n            DistanceType bsq = distance_(vec, node->pivot, veclen_);\n            DistanceType rsq = node->radius;\n            DistanceType wsq = result.worstDist();\n\n            DistanceType val = bsq-rsq-wsq;\n            DistanceType val2 = val*val-4*rsq*wsq;\n\n            //if (val>0) {\n            if ((val>0)&&(val2>0)) {\n                return;\n            }\n        }\n\n        if (node->childs==NULL) {\n            if (checks>=maxChecks) {\n                if (result.full()) return;\n            }\n            checks += node->size;\n            for (int i=0; i<node->size; ++i) {\n                int index = node->indices[i];\n                DistanceType dist = distance_(dataset_[index], vec, veclen_);\n                result.addPoint(dist, index);\n            }\n        }\n        else {\n            DistanceType* domain_distances = new DistanceType[branching_];\n            int closest_center = exploreNodeBranches(node, vec, domain_distances, heap);\n            delete[] domain_distances;\n            findNN(node->childs[closest_center],result,vec, checks, maxChecks, heap);\n        }\n    }\n\n    /**\n     * Helper function that computes the nearest childs of a node to a given query point.\n     * Params:\n     *     node = the node\n     *     q = the query point\n     *     distances = array with the distances to each child node.\n     * Returns:\n     */\n    int exploreNodeBranches(KMeansNodePtr node, const ElementType* q, DistanceType* domain_distances, Heap<BranchSt>* heap)\n    {\n\n        int best_index = 0;\n        domain_distances[best_index] = distance_(q, node->childs[best_index]->pivot, veclen_);\n        for (int i=1; i<branching_; ++i) {\n            domain_distances[i] = distance_(q, node->childs[i]->pivot, veclen_);\n            if (domain_distances[i]<domain_distances[best_index]) {\n                best_index = i;\n            }\n        }\n\n        //\t\tfloat* best_center = node->childs[best_index]->pivot;\n        for (int i=0; i<branching_; ++i) {\n            if (i != best_index) {\n                domain_distances[i] -= cb_index_*node->childs[i]->variance;\n\n                //\t\t\t\tfloat dist_to_border = getDistanceToBorder(node.childs[i].pivot,best_center,q);\n                //\t\t\t\tif (domain_distances[i]<dist_to_border) {\n                //\t\t\t\t\tdomain_distances[i] = dist_to_border;\n                //\t\t\t\t}\n                heap->insert(BranchSt(node->childs[i],domain_distances[i]));\n            }\n        }\n\n        return best_index;\n    }\n\n\n    /**\n     * Function the performs exact nearest neighbor search by traversing the entire tree.\n     */\n    void findExactNN(KMeansNodePtr node, ResultSet<DistanceType>& result, const ElementType* vec)\n    {\n        // Ignore those clusters that are too far away\n        {\n            DistanceType bsq = distance_(vec, node->pivot, veclen_);\n            DistanceType rsq = node->radius;\n            DistanceType wsq = result.worstDist();\n\n            DistanceType val = bsq-rsq-wsq;\n            DistanceType val2 = val*val-4*rsq*wsq;\n\n            //                  if (val>0) {\n            if ((val>0)&&(val2>0)) {\n                return;\n            }\n        }\n\n\n        if (node->childs==NULL) {\n            for (int i=0; i<node->size; ++i) {\n                int index = node->indices[i];\n                DistanceType dist = distance_(dataset_[index], vec, veclen_);\n                result.addPoint(dist, index);\n            }\n        }\n        else {\n            int* sort_indices = new int[branching_];\n\n            getCenterOrdering(node, vec, sort_indices);\n\n            for (int i=0; i<branching_; ++i) {\n                findExactNN(node->childs[sort_indices[i]],result,vec);\n            }\n\n            delete[] sort_indices;\n        }\n    }\n\n\n    /**\n     * Helper function.\n     *\n     * I computes the order in which to traverse the child nodes of a particular node.\n     */\n    void getCenterOrdering(KMeansNodePtr node, const ElementType* q, int* sort_indices)\n    {\n        DistanceType* domain_distances = new DistanceType[branching_];\n        for (int i=0; i<branching_; ++i) {\n            DistanceType dist = distance_(q, node->childs[i]->pivot, veclen_);\n\n            int j=0;\n            while (domain_distances[j]<dist && j<i) j++;\n            for (int k=i; k>j; --k) {\n                domain_distances[k] = domain_distances[k-1];\n                sort_indices[k] = sort_indices[k-1];\n            }\n            domain_distances[j] = dist;\n            sort_indices[j] = i;\n        }\n        delete[] domain_distances;\n    }\n\n    /**\n     * Method that computes the squared distance from the query point q\n     * from inside region with center c to the border between this\n     * region and the region with center p\n     */\n    DistanceType getDistanceToBorder(DistanceType* p, DistanceType* c, DistanceType* q)\n    {\n        DistanceType sum = 0;\n        DistanceType sum2 = 0;\n\n        for (int i=0; i<veclen_; ++i) {\n            DistanceType t = c[i]-p[i];\n            sum += t*(q[i]-(c[i]+p[i])/2);\n            sum2 += t*t;\n        }\n\n        return sum*sum/sum2;\n    }\n\n\n    /**\n     * Helper function the descends in the hierarchical k-means tree by spliting those clusters that minimize\n     * the overall variance of the clustering.\n     * Params:\n     *     root = root node\n     *     clusters = array with clusters centers (return value)\n     *     varianceValue = variance of the clustering (return value)\n     * Returns:\n     */\n    int getMinVarianceClusters(KMeansNodePtr root, KMeansNodePtr* clusters, int clusters_length, DistanceType& varianceValue)\n    {\n        int clusterCount = 1;\n        clusters[0] = root;\n\n        DistanceType meanVariance = root->variance*root->size;\n\n        while (clusterCount<clusters_length) {\n            DistanceType minVariance = (std::numeric_limits<DistanceType>::max)();\n            int splitIndex = -1;\n\n            for (int i=0; i<clusterCount; ++i) {\n                if (clusters[i]->childs != NULL) {\n\n                    DistanceType variance = meanVariance - clusters[i]->variance*clusters[i]->size;\n\n                    for (int j=0; j<branching_; ++j) {\n                        variance += clusters[i]->childs[j]->variance*clusters[i]->childs[j]->size;\n                    }\n                    if (variance<minVariance) {\n                        minVariance = variance;\n                        splitIndex = i;\n                    }\n                }\n            }\n\n            if (splitIndex==-1) break;\n            if ( (branching_+clusterCount-1) > clusters_length) break;\n\n            meanVariance = minVariance;\n\n            // split node\n            KMeansNodePtr toSplit = clusters[splitIndex];\n            clusters[splitIndex] = toSplit->childs[0];\n            for (int i=1; i<branching_; ++i) {\n                clusters[clusterCount++] = toSplit->childs[i];\n            }\n        }\n\n        varianceValue = meanVariance/root->size;\n        return clusterCount;\n    }\n\nprivate:\n    /** The branching factor used in the hierarchical k-means clustering */\n    int branching_;\n\n    /** Maximum number of iterations to use when performing k-means clustering */\n    int iterations_;\n\n    /** Algorithm for choosing the cluster centers */\n    flann_centers_init_t centers_init_;\n\n    /**\n     * Cluster border index. This is used in the tree search phase when determining\n     * the closest cluster to explore next. A zero value takes into account only\n     * the cluster centres, a value greater then zero also take into account the size\n     * of the cluster.\n     */\n    float cb_index_;\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    /** Index parameters */\n    IndexParams index_params_;\n\n    /**\n     * Number of features in the dataset.\n     */\n    size_t size_;\n\n    /**\n     * Length of each feature.\n     */\n    size_t veclen_;\n\n    /**\n     * The root node in the tree.\n     */\n    KMeansNodePtr root_;\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    int* indices_;\n\n    /**\n     * The distance\n     */\n    Distance distance_;\n\n    /**\n     * Pooled memory allocator.\n     */\n    PooledAllocator pool_;\n\n    /**\n     * Memory occupied by the index.\n     */\n    int memoryCounter_;\n};\n\n}\n\n#endif //OPENCV_FLANN_KMEANS_INDEX_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/linear_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LINEAR_INDEX_H_\n#define OPENCV_FLANN_LINEAR_INDEX_H_\n\n#include \"general.h\"\n#include \"nn_index.h\"\n\nnamespace cvflann\n{\n\nstruct LinearIndexParams : public IndexParams\n{\n    LinearIndexParams()\n    {\n        (* this)[\"algorithm\"] = FLANN_INDEX_LINEAR;\n    }\n};\n\ntemplate <typename Distance>\nclass LinearIndex : public NNIndex<Distance>\n{\npublic:\n\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n    LinearIndex(const Matrix<ElementType>& inputData, const IndexParams& params = LinearIndexParams(),\n                Distance d = Distance()) :\n        dataset_(inputData), index_params_(params), distance_(d)\n    {\n    }\n\n    LinearIndex(const LinearIndex&);\n    LinearIndex& operator=(const LinearIndex&);\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_LINEAR;\n    }\n\n\n    size_t size() const\n    {\n        return dataset_.rows;\n    }\n\n    size_t veclen() const\n    {\n        return dataset_.cols;\n    }\n\n\n    int usedMemory() const\n    {\n        return 0;\n    }\n\n    void buildIndex()\n    {\n        /* nothing to do here for linear search */\n    }\n\n    void saveIndex(FILE*)\n    {\n        /* nothing to do here for linear search */\n    }\n\n\n    void loadIndex(FILE*)\n    {\n        /* nothing to do here for linear search */\n\n        index_params_[\"algorithm\"] = getType();\n    }\n\n    void findNeighbors(ResultSet<DistanceType>& resultSet, const ElementType* vec, const SearchParams& /*searchParams*/)\n    {\n        ElementType* data = dataset_.data;\n        for (size_t i = 0; i < dataset_.rows; ++i, data += dataset_.cols) {\n            DistanceType dist = distance_(data, vec, dataset_.cols);\n            resultSet.addPoint(dist, (int)i);\n        }\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\nprivate:\n    /** The dataset */\n    const Matrix<ElementType> dataset_;\n    /** Index parameters */\n    IndexParams index_params_;\n    /** Index distance */\n    Distance distance_;\n\n};\n\n}\n\n#endif // OPENCV_FLANN_LINEAR_INDEX_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/logger.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LOGGER_H\n#define OPENCV_FLANN_LOGGER_H\n\n#include <stdio.h>\n#include <stdarg.h>\n\n#include \"defines.h\"\n\n\nnamespace cvflann\n{\n\nclass Logger\n{\n    Logger() : stream(stdout), logLevel(FLANN_LOG_WARN) {}\n\n    ~Logger()\n    {\n        if ((stream!=NULL)&&(stream!=stdout)) {\n            fclose(stream);\n        }\n    }\n\n    static Logger& instance()\n    {\n        static Logger logger;\n        return logger;\n    }\n\n    void _setDestination(const char* name)\n    {\n        if (name==NULL) {\n            stream = stdout;\n        }\n        else {\n            stream = fopen(name,\"w\");\n            if (stream == NULL) {\n                stream = stdout;\n            }\n        }\n    }\n\n    int _log(int level, const char* fmt, va_list arglist)\n    {\n        if (level > logLevel ) return -1;\n        int ret = vfprintf(stream, fmt, arglist);\n        return ret;\n    }\n\npublic:\n    /**\n     * Sets the logging level. All messages with lower priority will be ignored.\n     * @param level Logging level\n     */\n    static void setLevel(int level) { instance().logLevel = level; }\n\n    /**\n     * Sets the logging destination\n     * @param name Filename or NULL for console\n     */\n    static void setDestination(const char* name) { instance()._setDestination(name); }\n\n    /**\n     * Print log message\n     * @param level Log level\n     * @param fmt Message format\n     * @return\n     */\n    static int log(int level, const char* fmt, ...)\n    {\n        va_list arglist;\n        va_start(arglist, fmt);\n        int ret = instance()._log(level,fmt,arglist);\n        va_end(arglist);\n        return ret;\n    }\n\n#define LOG_METHOD(NAME,LEVEL) \\\n    static int NAME(const char* fmt, ...) \\\n    { \\\n        va_list ap; \\\n        va_start(ap, fmt); \\\n        int ret = instance()._log(LEVEL, fmt, ap); \\\n        va_end(ap); \\\n        return ret; \\\n    }\n\n    LOG_METHOD(fatal, FLANN_LOG_FATAL)\n    LOG_METHOD(error, FLANN_LOG_ERROR)\n    LOG_METHOD(warn, FLANN_LOG_WARN)\n    LOG_METHOD(info, FLANN_LOG_INFO)\n\nprivate:\n    FILE* stream;\n    int logLevel;\n};\n\n}\n\n#endif //OPENCV_FLANN_LOGGER_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/lsh_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n/***********************************************************************\n * Author: Vincent Rabaud\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LSH_INDEX_H_\n#define OPENCV_FLANN_LSH_INDEX_H_\n\n#include <algorithm>\n#include <cassert>\n#include <cstring>\n#include <map>\n#include <vector>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"lsh_table.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\nnamespace cvflann\n{\n\nstruct LshIndexParams : public IndexParams\n{\n    LshIndexParams(unsigned int table_number = 12, unsigned int key_size = 20, unsigned int multi_probe_level = 2)\n    {\n        (* this)[\"algorithm\"] = FLANN_INDEX_LSH;\n        // The number of hash tables to use\n        (*this)[\"table_number\"] = table_number;\n        // The length of the key in the hash tables\n        (*this)[\"key_size\"] = key_size;\n        // Number of levels to use in multi-probe (0 for standard LSH)\n        (*this)[\"multi_probe_level\"] = multi_probe_level;\n    }\n};\n\n/**\n * Randomized kd-tree index\n *\n * Contains the k-d trees and other information for indexing a set of points\n * for nearest-neighbor matching.\n */\ntemplate<typename Distance>\nclass LshIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    /** Constructor\n     * @param input_data dataset with the input features\n     * @param params parameters passed to the LSH algorithm\n     * @param d the distance used\n     */\n    LshIndex(const Matrix<ElementType>& input_data, const IndexParams& params = LshIndexParams(),\n             Distance d = Distance()) :\n        dataset_(input_data), index_params_(params), distance_(d)\n    {\n        // cv::flann::IndexParams sets integer params as 'int', so it is used with get_param\n        // in place of 'unsigned int'\n        table_number_ = (unsigned int)get_param<int>(index_params_,\"table_number\",12);\n        key_size_ = (unsigned int)get_param<int>(index_params_,\"key_size\",20);\n        multi_probe_level_ = (unsigned int)get_param<int>(index_params_,\"multi_probe_level\",2);\n\n        feature_size_ = (unsigned)dataset_.cols;\n        fill_xor_mask(0, key_size_, multi_probe_level_, xor_masks_);\n    }\n\n\n    LshIndex(const LshIndex&);\n    LshIndex& operator=(const LshIndex&);\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        tables_.resize(table_number_);\n        for (unsigned int i = 0; i < table_number_; ++i) {\n            lsh::LshTable<ElementType>& table = tables_[i];\n            table = lsh::LshTable<ElementType>(feature_size_, key_size_);\n\n            // Add the features to the table\n            table.add(dataset_);\n        }\n    }\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_LSH;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream,table_number_);\n        save_value(stream,key_size_);\n        save_value(stream,multi_probe_level_);\n        save_value(stream, dataset_);\n    }\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, table_number_);\n        load_value(stream, key_size_);\n        load_value(stream, multi_probe_level_);\n        load_value(stream, dataset_);\n        // Building the index is so fast we can afford not storing it\n        buildIndex();\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"table_number\"] = table_number_;\n        index_params_[\"key_size\"] = key_size_;\n        index_params_[\"multi_probe_level\"] = multi_probe_level_;\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return dataset_.rows;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return feature_size_;\n    }\n\n    /**\n     * Computes the index memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return (int)(dataset_.rows * sizeof(int));\n    }\n\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        assert(queries.cols == veclen());\n        assert(indices.rows >= queries.rows);\n        assert(dists.rows >= queries.rows);\n        assert(int(indices.cols) >= knn);\n        assert(int(dists.cols) >= knn);\n\n\n        KNNUniqueResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.clear();\n            std::fill_n(indices[i], knn, -1);\n            std::fill_n(dists[i], knn, std::numeric_limits<DistanceType>::max());\n            findNeighbors(resultSet, queries[i], params);\n            if (get_param(params,\"sorted\",true)) resultSet.sortAndCopy(indices[i], dists[i], knn);\n            else resultSet.copy(indices[i], dists[i], knn);\n        }\n    }\n\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     maxCheck = the maximum number of restarts (in a best-bin-first manner)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& /*searchParams*/)\n    {\n        getNeighbors(vec, result);\n    }\n\nprivate:\n    /** Defines the comparator on score and index\n     */\n    typedef std::pair<float, unsigned int> ScoreIndexPair;\n    struct SortScoreIndexPairOnSecond\n    {\n        bool operator()(const ScoreIndexPair& left, const ScoreIndexPair& right) const\n        {\n            return left.second < right.second;\n        }\n    };\n\n    /** Fills the different xor masks to use when getting the neighbors in multi-probe LSH\n     * @param key the key we build neighbors from\n     * @param lowest_index the lowest index of the bit set\n     * @param level the multi-probe level we are at\n     * @param xor_masks all the xor mask\n     */\n    void fill_xor_mask(lsh::BucketKey key, int lowest_index, unsigned int level,\n                       std::vector<lsh::BucketKey>& xor_masks)\n    {\n        xor_masks.push_back(key);\n        if (level == 0) return;\n        for (int index = lowest_index - 1; index >= 0; --index) {\n            // Create a new key\n            lsh::BucketKey new_key = key | (1 << index);\n            fill_xor_mask(new_key, index, level - 1, xor_masks);\n        }\n    }\n\n    /** Performs the approximate nearest-neighbor search.\n     * @param vec the feature to analyze\n     * @param do_radius flag indicating if we check the radius too\n     * @param radius the radius if it is a radius search\n     * @param do_k flag indicating if we limit the number of nn\n     * @param k_nn the number of nearest neighbors\n     * @param checked_average used for debugging\n     */\n    void getNeighbors(const ElementType* vec, bool /*do_radius*/, float radius, bool do_k, unsigned int k_nn,\n                      float& /*checked_average*/)\n    {\n        static std::vector<ScoreIndexPair> score_index_heap;\n\n        if (do_k) {\n            unsigned int worst_score = std::numeric_limits<unsigned int>::max();\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table = tables_.begin();\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table_end = tables_.end();\n            for (; table != table_end; ++table) {\n                size_t key = table->getKey(vec);\n                std::vector<lsh::BucketKey>::const_iterator xor_mask = xor_masks_.begin();\n                std::vector<lsh::BucketKey>::const_iterator xor_mask_end = xor_masks_.end();\n                for (; xor_mask != xor_mask_end; ++xor_mask) {\n                    size_t sub_key = key ^ (*xor_mask);\n                    const lsh::Bucket* bucket = table->getBucketFromKey(sub_key);\n                    if (bucket == 0) continue;\n\n                    // Go over each descriptor index\n                    std::vector<lsh::FeatureIndex>::const_iterator training_index = bucket->begin();\n                    std::vector<lsh::FeatureIndex>::const_iterator last_training_index = bucket->end();\n                    DistanceType hamming_distance;\n\n                    // Process the rest of the candidates\n                    for (; training_index < last_training_index; ++training_index) {\n                        hamming_distance = distance_(vec, dataset_[*training_index], dataset_.cols);\n\n                        if (hamming_distance < worst_score) {\n                            // Insert the new element\n                            score_index_heap.push_back(ScoreIndexPair(hamming_distance, training_index));\n                            std::push_heap(score_index_heap.begin(), score_index_heap.end());\n\n                            if (score_index_heap.size() > (unsigned int)k_nn) {\n                                // Remove the highest distance value as we have too many elements\n                                std::pop_heap(score_index_heap.begin(), score_index_heap.end());\n                                score_index_heap.pop_back();\n                                // Keep track of the worst score\n                                worst_score = score_index_heap.front().first;\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        else {\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table = tables_.begin();\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table_end = tables_.end();\n            for (; table != table_end; ++table) {\n                size_t key = table->getKey(vec);\n                std::vector<lsh::BucketKey>::const_iterator xor_mask = xor_masks_.begin();\n                std::vector<lsh::BucketKey>::const_iterator xor_mask_end = xor_masks_.end();\n                for (; xor_mask != xor_mask_end; ++xor_mask) {\n                    size_t sub_key = key ^ (*xor_mask);\n                    const lsh::Bucket* bucket = table->getBucketFromKey(sub_key);\n                    if (bucket == 0) continue;\n\n                    // Go over each descriptor index\n                    std::vector<lsh::FeatureIndex>::const_iterator training_index = bucket->begin();\n                    std::vector<lsh::FeatureIndex>::const_iterator last_training_index = bucket->end();\n                    DistanceType hamming_distance;\n\n                    // Process the rest of the candidates\n                    for (; training_index < last_training_index; ++training_index) {\n                        // Compute the Hamming distance\n                        hamming_distance = distance_(vec, dataset_[*training_index], dataset_.cols);\n                        if (hamming_distance < radius) score_index_heap.push_back(ScoreIndexPair(hamming_distance, training_index));\n                    }\n                }\n            }\n        }\n    }\n\n    /** Performs the approximate nearest-neighbor search.\n     * This is a slower version than the above as it uses the ResultSet\n     * @param vec the feature to analyze\n     */\n    void getNeighbors(const ElementType* vec, ResultSet<DistanceType>& result)\n    {\n        typename std::vector<lsh::LshTable<ElementType> >::const_iterator table = tables_.begin();\n        typename std::vector<lsh::LshTable<ElementType> >::const_iterator table_end = tables_.end();\n        for (; table != table_end; ++table) {\n            size_t key = table->getKey(vec);\n            std::vector<lsh::BucketKey>::const_iterator xor_mask = xor_masks_.begin();\n            std::vector<lsh::BucketKey>::const_iterator xor_mask_end = xor_masks_.end();\n            for (; xor_mask != xor_mask_end; ++xor_mask) {\n                size_t sub_key = key ^ (*xor_mask);\n                const lsh::Bucket* bucket = table->getBucketFromKey((lsh::BucketKey)sub_key);\n                if (bucket == 0) continue;\n\n                // Go over each descriptor index\n                std::vector<lsh::FeatureIndex>::const_iterator training_index = bucket->begin();\n                std::vector<lsh::FeatureIndex>::const_iterator last_training_index = bucket->end();\n                DistanceType hamming_distance;\n\n                // Process the rest of the candidates\n                for (; training_index < last_training_index; ++training_index) {\n                    // Compute the Hamming distance\n                    hamming_distance = distance_(vec, dataset_[*training_index], (int)dataset_.cols);\n                    result.addPoint(hamming_distance, *training_index);\n                }\n            }\n        }\n    }\n\n    /** The different hash tables */\n    std::vector<lsh::LshTable<ElementType> > tables_;\n\n    /** The data the LSH tables where built from */\n    Matrix<ElementType> dataset_;\n\n    /** The size of the features (as ElementType[]) */\n    unsigned int feature_size_;\n\n    IndexParams index_params_;\n\n    /** table number */\n    unsigned int table_number_;\n    /** key size */\n    unsigned int key_size_;\n    /** How far should we look for neighbors in multi-probe LSH */\n    unsigned int multi_probe_level_;\n\n    /** The XOR masks to apply to a key to get the neighboring buckets */\n    std::vector<lsh::BucketKey> xor_masks_;\n\n    Distance distance_;\n};\n}\n\n#endif //OPENCV_FLANN_LSH_INDEX_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/lsh_table.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n/***********************************************************************\n * Author: Vincent Rabaud\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LSH_TABLE_H_\n#define OPENCV_FLANN_LSH_TABLE_H_\n\n#include <algorithm>\n#include <iostream>\n#include <iomanip>\n#include <limits.h>\n// TODO as soon as we use C++0x, use the code in USE_UNORDERED_MAP\n#ifdef __GXX_EXPERIMENTAL_CXX0X__\n#  define USE_UNORDERED_MAP 1\n#else\n#  define USE_UNORDERED_MAP 0\n#endif\n#if USE_UNORDERED_MAP\n#include <unordered_map>\n#else\n#include <map>\n#endif\n#include <math.h>\n#include <stddef.h>\n\n#include \"dynamic_bitset.h\"\n#include \"matrix.h\"\n\nnamespace cvflann\n{\n\nnamespace lsh\n{\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** What is stored in an LSH bucket\n */\ntypedef uint32_t FeatureIndex;\n/** The id from which we can get a bucket back in an LSH table\n */\ntypedef unsigned int BucketKey;\n\n/** A bucket in an LSH table\n */\ntypedef std::vector<FeatureIndex> Bucket;\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** POD for stats about an LSH table\n */\nstruct LshStats\n{\n    std::vector<unsigned int> bucket_sizes_;\n    size_t n_buckets_;\n    size_t bucket_size_mean_;\n    size_t bucket_size_median_;\n    size_t bucket_size_min_;\n    size_t bucket_size_max_;\n    size_t bucket_size_std_dev;\n    /** Each contained vector contains three value: beginning/end for interval, number of elements in the bin\n     */\n    std::vector<std::vector<unsigned int> > size_histogram_;\n};\n\n/** Overload the << operator for LshStats\n * @param out the streams\n * @param stats the stats to display\n * @return the streams\n */\ninline std::ostream& operator <<(std::ostream& out, const LshStats& stats)\n{\n    int w = 20;\n    out << \"Lsh Table Stats:\\n\" << std::setw(w) << std::setiosflags(std::ios::right) << \"N buckets : \"\n    << stats.n_buckets_ << \"\\n\" << std::setw(w) << std::setiosflags(std::ios::right) << \"mean size : \"\n    << std::setiosflags(std::ios::left) << stats.bucket_size_mean_ << \"\\n\" << std::setw(w)\n    << std::setiosflags(std::ios::right) << \"median size : \" << stats.bucket_size_median_ << \"\\n\" << std::setw(w)\n    << std::setiosflags(std::ios::right) << \"min size : \" << std::setiosflags(std::ios::left)\n    << stats.bucket_size_min_ << \"\\n\" << std::setw(w) << std::setiosflags(std::ios::right) << \"max size : \"\n    << std::setiosflags(std::ios::left) << stats.bucket_size_max_;\n\n    // Display the histogram\n    out << std::endl << std::setw(w) << std::setiosflags(std::ios::right) << \"histogram : \"\n    << std::setiosflags(std::ios::left);\n    for (std::vector<std::vector<unsigned int> >::const_iterator iterator = stats.size_histogram_.begin(), end =\n             stats.size_histogram_.end(); iterator != end; ++iterator) out << (*iterator)[0] << \"-\" << (*iterator)[1] << \": \" << (*iterator)[2] << \",  \";\n\n    return out;\n}\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Lsh hash table. As its key is a sub-feature, and as usually\n * the size of it is pretty small, we keep it as a continuous memory array.\n * The value is an index in the corpus of features (we keep it as an unsigned\n * int for pure memory reasons, it could be a size_t)\n */\ntemplate<typename ElementType>\nclass LshTable\n{\npublic:\n    /** A container of all the feature indices. Optimized for space\n     */\n#if USE_UNORDERED_MAP\n    typedef std::unordered_map<BucketKey, Bucket> BucketsSpace;\n#else\n    typedef std::map<BucketKey, Bucket> BucketsSpace;\n#endif\n\n    /** A container of all the feature indices. Optimized for speed\n     */\n    typedef std::vector<Bucket> BucketsSpeed;\n\n    /** Default constructor\n     */\n    LshTable()\n    {\n    }\n\n    /** Default constructor\n     * Create the mask and allocate the memory\n     * @param feature_size is the size of the feature (considered as a ElementType[])\n     * @param key_size is the number of bits that are turned on in the feature\n     */\n    LshTable(unsigned int feature_size, unsigned int key_size)\n    {\n        (void)feature_size;\n        (void)key_size;\n        std::cerr << \"LSH is not implemented for that type\" << std::endl;\n        assert(0);\n    }\n\n    /** Add a feature to the table\n     * @param value the value to store for that feature\n     * @param feature the feature itself\n     */\n    void add(unsigned int value, const ElementType* feature)\n    {\n        // Add the value to the corresponding bucket\n        BucketKey key = (lsh::BucketKey)getKey(feature);\n\n        switch (speed_level_) {\n        case kArray:\n            // That means we get the buckets from an array\n            buckets_speed_[key].push_back(value);\n            break;\n        case kBitsetHash:\n            // That means we can check the bitset for the presence of a key\n            key_bitset_.set(key);\n            buckets_space_[key].push_back(value);\n            break;\n        case kHash:\n        {\n            // That means we have to check for the hash table for the presence of a key\n            buckets_space_[key].push_back(value);\n            break;\n        }\n        }\n    }\n\n    /** Add a set of features to the table\n     * @param dataset the values to store\n     */\n    void add(Matrix<ElementType> dataset)\n    {\n#if USE_UNORDERED_MAP\n        buckets_space_.rehash((buckets_space_.size() + dataset.rows) * 1.2);\n#endif\n        // Add the features to the table\n        for (unsigned int i = 0; i < dataset.rows; ++i) add(i, dataset[i]);\n        // Now that the table is full, optimize it for speed/space\n        optimize();\n    }\n\n    /** Get a bucket given the key\n     * @param key\n     * @return\n     */\n    inline const Bucket* getBucketFromKey(BucketKey key) const\n    {\n        // Generate other buckets\n        switch (speed_level_) {\n        case kArray:\n            // That means we get the buckets from an array\n            return &buckets_speed_[key];\n            break;\n        case kBitsetHash:\n            // That means we can check the bitset for the presence of a key\n            if (key_bitset_.test(key)) return &buckets_space_.find(key)->second;\n            else return 0;\n            break;\n        case kHash:\n        {\n            // That means we have to check for the hash table for the presence of a key\n            BucketsSpace::const_iterator bucket_it, bucket_end = buckets_space_.end();\n            bucket_it = buckets_space_.find(key);\n            // Stop here if that bucket does not exist\n            if (bucket_it == bucket_end) return 0;\n            else return &bucket_it->second;\n            break;\n        }\n        }\n        return 0;\n    }\n\n    /** Compute the sub-signature of a feature\n     */\n    size_t getKey(const ElementType* /*feature*/) const\n    {\n        std::cerr << \"LSH is not implemented for that type\" << std::endl;\n        assert(0);\n        return 1;\n    }\n\n    /** Get statistics about the table\n     * @return\n     */\n    LshStats getStats() const;\n\nprivate:\n    /** defines the speed fo the implementation\n     * kArray uses a vector for storing data\n     * kBitsetHash uses a hash map but checks for the validity of a key with a bitset\n     * kHash uses a hash map only\n     */\n    enum SpeedLevel\n    {\n        kArray, kBitsetHash, kHash\n    };\n\n    /** Initialize some variables\n     */\n    void initialize(size_t key_size)\n    {\n        const size_t key_size_lower_bound = 1;\n        //a value (size_t(1) << key_size) must fit the size_t type so key_size has to be strictly less than size of size_t\n        const size_t key_size_upper_bound = std::min(sizeof(BucketKey) * CHAR_BIT + 1, sizeof(size_t) * CHAR_BIT);\n        if (key_size < key_size_lower_bound || key_size >= key_size_upper_bound)\n        {\n            CV_Error(cv::Error::StsBadArg, cv::format(\"Invalid key_size (=%d). Valid values for your system are %d <= key_size < %d.\", (int)key_size, (int)key_size_lower_bound, (int)key_size_upper_bound));\n        }\n\n        speed_level_ = kHash;\n        key_size_ = (unsigned)key_size;\n    }\n\n    /** Optimize the table for speed/space\n     */\n    void optimize()\n    {\n        // If we are already using the fast storage, no need to do anything\n        if (speed_level_ == kArray) return;\n\n        // Use an array if it will be more than half full\n        if (buckets_space_.size() > ((size_t(1) << key_size_) / 2)) {\n            speed_level_ = kArray;\n            // Fill the array version of it\n            buckets_speed_.resize(size_t(1) << key_size_);\n            for (BucketsSpace::const_iterator key_bucket = buckets_space_.begin(); key_bucket != buckets_space_.end(); ++key_bucket) buckets_speed_[key_bucket->first] = key_bucket->second;\n\n            // Empty the hash table\n            buckets_space_.clear();\n            return;\n        }\n\n        // If the bitset is going to use less than 10% of the RAM of the hash map (at least 1 size_t for the key and two\n        // for the vector) or less than 512MB (key_size_ <= 30)\n        if (((std::max(buckets_space_.size(), buckets_speed_.size()) * CHAR_BIT * 3 * sizeof(BucketKey)) / 10\n             >= (size_t(1) << key_size_)) || (key_size_ <= 32)) {\n            speed_level_ = kBitsetHash;\n            key_bitset_.resize(size_t(1) << key_size_);\n            key_bitset_.reset();\n            // Try with the BucketsSpace\n            for (BucketsSpace::const_iterator key_bucket = buckets_space_.begin(); key_bucket != buckets_space_.end(); ++key_bucket) key_bitset_.set(key_bucket->first);\n        }\n        else {\n            speed_level_ = kHash;\n            key_bitset_.clear();\n        }\n    }\n\n    /** The vector of all the buckets if they are held for speed\n     */\n    BucketsSpeed buckets_speed_;\n\n    /** The hash table of all the buckets in case we cannot use the speed version\n     */\n    BucketsSpace buckets_space_;\n\n    /** What is used to store the data */\n    SpeedLevel speed_level_;\n\n    /** If the subkey is small enough, it will keep track of which subkeys are set through that bitset\n     * That is just a speedup so that we don't look in the hash table (which can be mush slower that checking a bitset)\n     */\n    DynamicBitset key_bitset_;\n\n    /** The size of the sub-signature in bits\n     */\n    unsigned int key_size_;\n\n    // Members only used for the unsigned char specialization\n    /** The mask to apply to a feature to get the hash key\n     * Only used in the unsigned char case\n     */\n    std::vector<size_t> mask_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Specialization for unsigned char\n\ntemplate<>\ninline LshTable<unsigned char>::LshTable(unsigned int feature_size, unsigned int subsignature_size)\n{\n    initialize(subsignature_size);\n    // Allocate the mask\n    mask_ = std::vector<size_t>((size_t)ceil((float)(feature_size * sizeof(char)) / (float)sizeof(size_t)), 0);\n\n    // A bit brutal but fast to code\n    std::vector<size_t> indices(feature_size * CHAR_BIT);\n    for (size_t i = 0; i < feature_size * CHAR_BIT; ++i) indices[i] = i;\n    std::random_shuffle(indices.begin(), indices.end());\n\n    // Generate a random set of order of subsignature_size_ bits\n    for (unsigned int i = 0; i < key_size_; ++i) {\n        size_t index = indices[i];\n\n        // Set that bit in the mask\n        size_t divisor = CHAR_BIT * sizeof(size_t);\n        size_t idx = index / divisor; //pick the right size_t index\n        mask_[idx] |= size_t(1) << (index % divisor); //use modulo to find the bit offset\n    }\n\n    // Set to 1 if you want to display the mask for debug\n#if 0\n    {\n        size_t bcount = 0;\n        BOOST_FOREACH(size_t mask_block, mask_){\n            out << std::setw(sizeof(size_t) * CHAR_BIT / 4) << std::setfill('0') << std::hex << mask_block\n                << std::endl;\n            bcount += __builtin_popcountll(mask_block);\n        }\n        out << \"bit count : \" << std::dec << bcount << std::endl;\n        out << \"mask size : \" << mask_.size() << std::endl;\n        return out;\n    }\n#endif\n}\n\n/** Return the Subsignature of a feature\n * @param feature the feature to analyze\n */\ntemplate<>\ninline size_t LshTable<unsigned char>::getKey(const unsigned char* feature) const\n{\n    // no need to check if T is dividable by sizeof(size_t) like in the Hamming\n    // distance computation as we have a mask\n    const size_t* feature_block_ptr = reinterpret_cast<const size_t*> ((const void*)feature);\n\n    // Figure out the subsignature of the feature\n    // Given the feature ABCDEF, and the mask 001011, the output will be\n    // 000CEF\n    size_t subsignature = 0;\n    size_t bit_index = 1;\n\n    for (std::vector<size_t>::const_iterator pmask_block = mask_.begin(); pmask_block != mask_.end(); ++pmask_block) {\n        // get the mask and signature blocks\n        size_t feature_block = *feature_block_ptr;\n        size_t mask_block = *pmask_block;\n        while (mask_block) {\n            // Get the lowest set bit in the mask block\n            size_t lowest_bit = mask_block & (-(ptrdiff_t)mask_block);\n            // Add it to the current subsignature if necessary\n            subsignature += (feature_block & lowest_bit) ? bit_index : 0;\n            // Reset the bit in the mask block\n            mask_block ^= lowest_bit;\n            // increment the bit index for the subsignature\n            bit_index <<= 1;\n        }\n        // Check the next feature block\n        ++feature_block_ptr;\n    }\n    return subsignature;\n}\n\ntemplate<>\ninline LshStats LshTable<unsigned char>::getStats() const\n{\n    LshStats stats;\n    stats.bucket_size_mean_ = 0;\n    if ((buckets_speed_.empty()) && (buckets_space_.empty())) {\n        stats.n_buckets_ = 0;\n        stats.bucket_size_median_ = 0;\n        stats.bucket_size_min_ = 0;\n        stats.bucket_size_max_ = 0;\n        return stats;\n    }\n\n    if (!buckets_speed_.empty()) {\n        for (BucketsSpeed::const_iterator pbucket = buckets_speed_.begin(); pbucket != buckets_speed_.end(); ++pbucket) {\n            stats.bucket_sizes_.push_back((lsh::FeatureIndex)pbucket->size());\n            stats.bucket_size_mean_ += pbucket->size();\n        }\n        stats.bucket_size_mean_ /= buckets_speed_.size();\n        stats.n_buckets_ = buckets_speed_.size();\n    }\n    else {\n        for (BucketsSpace::const_iterator x = buckets_space_.begin(); x != buckets_space_.end(); ++x) {\n            stats.bucket_sizes_.push_back((lsh::FeatureIndex)x->second.size());\n            stats.bucket_size_mean_ += x->second.size();\n        }\n        stats.bucket_size_mean_ /= buckets_space_.size();\n        stats.n_buckets_ = buckets_space_.size();\n    }\n\n    std::sort(stats.bucket_sizes_.begin(), stats.bucket_sizes_.end());\n\n    //  BOOST_FOREACH(int size, stats.bucket_sizes_)\n    //          std::cout << size << \" \";\n    //  std::cout << std::endl;\n    stats.bucket_size_median_ = stats.bucket_sizes_[stats.bucket_sizes_.size() / 2];\n    stats.bucket_size_min_ = stats.bucket_sizes_.front();\n    stats.bucket_size_max_ = stats.bucket_sizes_.back();\n\n    // TODO compute mean and std\n    /*float mean, stddev;\n       stats.bucket_size_mean_ = mean;\n       stats.bucket_size_std_dev = stddev;*/\n\n    // Include a histogram of the buckets\n    unsigned int bin_start = 0;\n    unsigned int bin_end = 20;\n    bool is_new_bin = true;\n    for (std::vector<unsigned int>::iterator iterator = stats.bucket_sizes_.begin(), end = stats.bucket_sizes_.end(); iterator\n         != end; )\n        if (*iterator < bin_end) {\n            if (is_new_bin) {\n                stats.size_histogram_.push_back(std::vector<unsigned int>(3, 0));\n                stats.size_histogram_.back()[0] = bin_start;\n                stats.size_histogram_.back()[1] = bin_end - 1;\n                is_new_bin = false;\n            }\n            ++stats.size_histogram_.back()[2];\n            ++iterator;\n        }\n        else {\n            bin_start += 20;\n            bin_end += 20;\n            is_new_bin = true;\n        }\n\n    return stats;\n}\n\n// End the two namespaces\n}\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n#endif /* OPENCV_FLANN_LSH_TABLE_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/matrix.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_DATASET_H_\n#define OPENCV_FLANN_DATASET_H_\n\n#include <stdio.h>\n\n#include \"general.h\"\n\nnamespace cvflann\n{\n\n/**\n * Class that implements a simple rectangular matrix stored in a memory buffer and\n * provides convenient matrix-like access using the [] operators.\n */\ntemplate <typename T>\nclass Matrix\n{\npublic:\n    typedef T type;\n\n    size_t rows;\n    size_t cols;\n    size_t stride;\n    T* data;\n\n    Matrix() : rows(0), cols(0), stride(0), data(NULL)\n    {\n    }\n\n    Matrix(T* data_, size_t rows_, size_t cols_, size_t stride_ = 0) :\n        rows(rows_), cols(cols_),  stride(stride_), data(data_)\n    {\n        if (stride==0) stride = cols;\n    }\n\n    /**\n     * Convenience function for deallocating the storage data.\n     */\n    FLANN_DEPRECATED void free()\n    {\n        fprintf(stderr, \"The cvflann::Matrix<T>::free() method is deprecated \"\n                \"and it does not do any memory deallocation any more.  You are\"\n                \"responsible for deallocating the matrix memory (by doing\"\n                \"'delete[] matrix.data' for example)\");\n    }\n\n    /**\n     * Operator that return a (pointer to a) row of the data.\n     */\n    T* operator[](size_t index) const\n    {\n        return data+index*stride;\n    }\n};\n\n\nclass UntypedMatrix\n{\npublic:\n    size_t rows;\n    size_t cols;\n    void* data;\n    flann_datatype_t type;\n\n    UntypedMatrix(void* data_, long rows_, long cols_) :\n        rows(rows_), cols(cols_), data(data_)\n    {\n    }\n\n    ~UntypedMatrix()\n    {\n    }\n\n\n    template<typename T>\n    Matrix<T> as()\n    {\n        return Matrix<T>((T*)data, rows, cols);\n    }\n};\n\n\n\n}\n\n#endif //OPENCV_FLANN_DATASET_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/miniflann.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef _OPENCV_MINIFLANN_HPP_\n#define _OPENCV_MINIFLANN_HPP_\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/flann/defines.h\"\n\nnamespace cv\n{\n\nnamespace flann\n{\n\nstruct CV_EXPORTS IndexParams\n{\n    IndexParams();\n    ~IndexParams();\n\n    String getString(const String& key, const String& defaultVal=String()) const;\n    int getInt(const String& key, int defaultVal=-1) const;\n    double getDouble(const String& key, double defaultVal=-1) const;\n\n    void setString(const String& key, const String& value);\n    void setInt(const String& key, int value);\n    void setDouble(const String& key, double value);\n    void setFloat(const String& key, float value);\n    void setBool(const String& key, bool value);\n    void setAlgorithm(int value);\n\n    void getAll(std::vector<String>& names,\n                std::vector<int>& types,\n                std::vector<String>& strValues,\n                std::vector<double>& numValues) const;\n\n    void* params;\n};\n\nstruct CV_EXPORTS KDTreeIndexParams : public IndexParams\n{\n    KDTreeIndexParams(int trees=4);\n};\n\nstruct CV_EXPORTS LinearIndexParams : public IndexParams\n{\n    LinearIndexParams();\n};\n\nstruct CV_EXPORTS CompositeIndexParams : public IndexParams\n{\n    CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11,\n                         cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2f );\n};\n\nstruct CV_EXPORTS AutotunedIndexParams : public IndexParams\n{\n    AutotunedIndexParams(float target_precision = 0.8f, float build_weight = 0.01f,\n                         float memory_weight = 0, float sample_fraction = 0.1f);\n};\n\nstruct CV_EXPORTS HierarchicalClusteringIndexParams : public IndexParams\n{\n    HierarchicalClusteringIndexParams(int branching = 32,\n                      cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, int trees = 4, int leaf_size = 100 );\n};\n\nstruct CV_EXPORTS KMeansIndexParams : public IndexParams\n{\n    KMeansIndexParams(int branching = 32, int iterations = 11,\n                      cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2f );\n};\n\nstruct CV_EXPORTS LshIndexParams : public IndexParams\n{\n    LshIndexParams(int table_number, int key_size, int multi_probe_level);\n};\n\nstruct CV_EXPORTS SavedIndexParams : public IndexParams\n{\n    SavedIndexParams(const String& filename);\n};\n\nstruct CV_EXPORTS SearchParams : public IndexParams\n{\n    SearchParams( int checks = 32, float eps = 0, bool sorted = true );\n};\n\nclass CV_EXPORTS_W Index\n{\npublic:\n    CV_WRAP Index();\n    CV_WRAP Index(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2);\n    virtual ~Index();\n\n    CV_WRAP virtual void build(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2);\n    CV_WRAP virtual void knnSearch(InputArray query, OutputArray indices,\n                   OutputArray dists, int knn, const SearchParams& params=SearchParams());\n\n    CV_WRAP virtual int radiusSearch(InputArray query, OutputArray indices,\n                             OutputArray dists, double radius, int maxResults,\n                             const SearchParams& params=SearchParams());\n\n    CV_WRAP virtual void save(const String& filename) const;\n    CV_WRAP virtual bool load(InputArray features, const String& filename);\n    CV_WRAP virtual void release();\n    CV_WRAP cvflann::flann_distance_t getDistance() const;\n    CV_WRAP cvflann::flann_algorithm_t getAlgorithm() const;\n\nprotected:\n    cvflann::flann_distance_t distType;\n    cvflann::flann_algorithm_t algo;\n    int featureType;\n    void* index;\n};\n\n} } // namespace cv::flann\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/nn_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_NNINDEX_H\n#define OPENCV_FLANN_NNINDEX_H\n\n#include \"general.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"params.h\"\n\nnamespace cvflann\n{\n\n/**\n * Nearest-neighbour index base class\n */\ntemplate <typename Distance>\nclass NNIndex\n{\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\npublic:\n\n    virtual ~NNIndex() {}\n\n    /**\n     * \\brief Builds the index\n     */\n    virtual void buildIndex() = 0;\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        assert(queries.cols == veclen());\n        assert(indices.rows >= queries.rows);\n        assert(dists.rows >= queries.rows);\n        assert(int(indices.cols) >= knn);\n        assert(int(dists.cols) >= knn);\n\n#if 0\n        KNNResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.init(indices[i], dists[i]);\n            findNeighbors(resultSet, queries[i], params);\n        }\n#else\n        KNNUniqueResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.clear();\n            findNeighbors(resultSet, queries[i], params);\n            if (get_param(params,\"sorted\",true)) resultSet.sortAndCopy(indices[i], dists[i], knn);\n            else resultSet.copy(indices[i], dists[i], knn);\n        }\n#endif\n    }\n\n    /**\n     * \\brief Perform radius search\n     * \\param[in] query The query point\n     * \\param[out] indices The indinces of the neighbors found within the given radius\n     * \\param[out] dists The distances to the nearest neighbors found\n     * \\param[in] radius The radius used for search\n     * \\param[in] params Search parameters\n     * \\returns Number of neighbors found\n     */\n    virtual int radiusSearch(const Matrix<ElementType>& query, Matrix<int>& indices, Matrix<DistanceType>& dists, float radius, const SearchParams& params)\n    {\n        if (query.rows != 1) {\n            fprintf(stderr, \"I can only search one feature at a time for range search\\n\");\n            return -1;\n        }\n        assert(query.cols == veclen());\n        assert(indices.cols == dists.cols);\n\n        int n = 0;\n        int* indices_ptr = NULL;\n        DistanceType* dists_ptr = NULL;\n        if (indices.cols > 0) {\n            n = (int)indices.cols;\n            indices_ptr = indices[0];\n            dists_ptr = dists[0];\n        }\n\n        RadiusUniqueResultSet<DistanceType> resultSet((DistanceType)radius);\n        resultSet.clear();\n        findNeighbors(resultSet, query[0], params);\n        if (n>0) {\n            if (get_param(params,\"sorted\",true)) resultSet.sortAndCopy(indices_ptr, dists_ptr, n);\n            else resultSet.copy(indices_ptr, dists_ptr, n);\n        }\n\n        return (int)resultSet.size();\n    }\n\n    /**\n     * \\brief Saves the index to a stream\n     * \\param stream The stream to save the index to\n     */\n    virtual void saveIndex(FILE* stream) = 0;\n\n    /**\n     * \\brief Loads the index from a stream\n     * \\param stream The stream from which the index is loaded\n     */\n    virtual void loadIndex(FILE* stream) = 0;\n\n    /**\n     * \\returns number of features in this index.\n     */\n    virtual size_t size() const = 0;\n\n    /**\n     * \\returns The dimensionality of the features in this index.\n     */\n    virtual size_t veclen() const = 0;\n\n    /**\n     * \\returns The amount of memory (in bytes) used by the index.\n     */\n    virtual int usedMemory() const = 0;\n\n    /**\n     * \\returns The index type (kdtree, kmeans,...)\n     */\n    virtual flann_algorithm_t getType() const = 0;\n\n    /**\n     * \\returns The index parameters\n     */\n    virtual IndexParams getParameters() const = 0;\n\n\n    /**\n     * \\brief Method that searches for nearest-neighbours\n     */\n    virtual void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams) = 0;\n};\n\n}\n\n#endif //OPENCV_FLANN_NNINDEX_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/object_factory.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_OBJECT_FACTORY_H_\n#define OPENCV_FLANN_OBJECT_FACTORY_H_\n\n#include <map>\n\nnamespace cvflann\n{\n\nclass CreatorNotFound\n{\n};\n\ntemplate<typename BaseClass,\n         typename UniqueIdType,\n         typename ObjectCreator = BaseClass* (*)()>\nclass ObjectFactory\n{\n    typedef ObjectFactory<BaseClass,UniqueIdType,ObjectCreator> ThisClass;\n    typedef std::map<UniqueIdType, ObjectCreator> ObjectRegistry;\n\n    // singleton class, private constructor\n    ObjectFactory() {}\n\npublic:\n\n    bool subscribe(UniqueIdType id, ObjectCreator creator)\n    {\n        if (object_registry.find(id) != object_registry.end()) return false;\n\n        object_registry[id] = creator;\n        return true;\n    }\n\n    bool unregister(UniqueIdType id)\n    {\n        return object_registry.erase(id) == 1;\n    }\n\n    ObjectCreator create(UniqueIdType id)\n    {\n        typename ObjectRegistry::const_iterator iter = object_registry.find(id);\n\n        if (iter == object_registry.end()) {\n            throw CreatorNotFound();\n        }\n\n        return iter->second;\n    }\n\n    static ThisClass& instance()\n    {\n        static ThisClass the_factory;\n        return the_factory;\n    }\nprivate:\n    ObjectRegistry object_registry;\n};\n\n}\n\n#endif /* OPENCV_FLANN_OBJECT_FACTORY_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/params.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_PARAMS_H_\n#define OPENCV_FLANN_PARAMS_H_\n\n#include \"any.h\"\n#include \"general.h\"\n#include <iostream>\n#include <map>\n\n\nnamespace cvflann\n{\n\ntypedef std::map<cv::String, any> IndexParams;\n\nstruct SearchParams : public IndexParams\n{\n    SearchParams(int checks = 32, float eps = 0, bool sorted = true )\n    {\n        // how many leafs to visit when searching for neighbours (-1 for unlimited)\n        (*this)[\"checks\"] = checks;\n        // search for eps-approximate neighbours (default: 0)\n        (*this)[\"eps\"] = eps;\n        // only for radius search, require neighbours sorted by distance (default: true)\n        (*this)[\"sorted\"] = sorted;\n    }\n};\n\n\ntemplate<typename T>\nT get_param(const IndexParams& params, cv::String name, const T& default_value)\n{\n    IndexParams::const_iterator it = params.find(name);\n    if (it != params.end()) {\n        return it->second.cast<T>();\n    }\n    else {\n        return default_value;\n    }\n}\n\ntemplate<typename T>\nT get_param(const IndexParams& params, cv::String name)\n{\n    IndexParams::const_iterator it = params.find(name);\n    if (it != params.end()) {\n        return it->second.cast<T>();\n    }\n    else {\n        throw FLANNException(cv::String(\"Missing parameter '\")+name+cv::String(\"' in the parameters given\"));\n    }\n}\n\ninline void print_params(const IndexParams& params, std::ostream& stream)\n{\n    IndexParams::const_iterator it;\n\n    for(it=params.begin(); it!=params.end(); ++it) {\n        stream << it->first << \" : \" << it->second << std::endl;\n    }\n}\n\ninline void print_params(const IndexParams& params)\n{\n    print_params(params, std::cout);\n}\n\n}\n\n\n#endif /* OPENCV_FLANN_PARAMS_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/random.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_RANDOM_H\n#define OPENCV_FLANN_RANDOM_H\n\n#include <algorithm>\n#include <cstdlib>\n#include <vector>\n\n#include \"general.h\"\n\nnamespace cvflann\n{\n\n/**\n * Seeds the random number generator\n *  @param seed Random seed\n */\ninline void seed_random(unsigned int seed)\n{\n    srand(seed);\n}\n\n/*\n * Generates a random double value.\n */\n/**\n * Generates a random double value.\n * @param high Upper limit\n * @param low Lower limit\n * @return Random double value\n */\ninline double rand_double(double high = 1.0, double low = 0)\n{\n    return low + ((high-low) * (std::rand() / (RAND_MAX + 1.0)));\n}\n\n/**\n * Generates a random integer value.\n * @param high Upper limit\n * @param low Lower limit\n * @return Random integer value\n */\ninline int rand_int(int high = RAND_MAX, int low = 0)\n{\n    return low + (int) ( double(high-low) * (std::rand() / (RAND_MAX + 1.0)));\n}\n\n/**\n * Random number generator that returns a distinct number from\n * the [0,n) interval each time.\n */\nclass UniqueRandom\n{\n    std::vector<int> vals_;\n    int size_;\n    int counter_;\n\npublic:\n    /**\n     * Constructor.\n     * @param n Size of the interval from which to generate\n     * @return\n     */\n    UniqueRandom(int n)\n    {\n        init(n);\n    }\n\n    /**\n     * Initializes the number generator.\n     * @param n the size of the interval from which to generate random numbers.\n     */\n    void init(int n)\n    {\n        // create and initialize an array of size n\n        vals_.resize(n);\n        size_ = n;\n        for (int i = 0; i < size_; ++i) vals_[i] = i;\n\n        // shuffle the elements in the array\n        std::random_shuffle(vals_.begin(), vals_.end());\n\n        counter_ = 0;\n    }\n\n    /**\n     * Return a distinct random integer in greater or equal to 0 and less\n     * than 'n' on each call. It should be called maximum 'n' times.\n     * Returns: a random integer\n     */\n    int next()\n    {\n        if (counter_ == size_) {\n            return -1;\n        }\n        else {\n            return vals_[counter_++];\n        }\n    }\n};\n\n}\n\n#endif //OPENCV_FLANN_RANDOM_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/result_set.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_RESULTSET_H\n#define OPENCV_FLANN_RESULTSET_H\n\n#include <algorithm>\n#include <cstring>\n#include <iostream>\n#include <limits>\n#include <set>\n#include <vector>\n\nnamespace cvflann\n{\n\n/* This record represents a branch point when finding neighbors in\n    the tree.  It contains a record of the minimum distance to the query\n    point, as well as the node at which the search resumes.\n */\n\ntemplate <typename T, typename DistanceType>\nstruct BranchStruct\n{\n    T node;           /* Tree node at which search resumes */\n    DistanceType mindist;     /* Minimum distance to query for all nodes below. */\n\n    BranchStruct() {}\n    BranchStruct(const T& aNode, DistanceType dist) : node(aNode), mindist(dist) {}\n\n    bool operator<(const BranchStruct<T, DistanceType>& rhs) const\n    {\n        return mindist<rhs.mindist;\n    }\n};\n\n\ntemplate <typename DistanceType>\nclass ResultSet\n{\npublic:\n    virtual ~ResultSet() {}\n\n    virtual bool full() const = 0;\n\n    virtual void addPoint(DistanceType dist, int index) = 0;\n\n    virtual DistanceType worstDist() const = 0;\n\n};\n\n/**\n * KNNSimpleResultSet does not ensure that the element it holds are unique.\n * Is used in those cases where the nearest neighbour algorithm used does not\n * attempt to insert the same element multiple times.\n */\ntemplate <typename DistanceType>\nclass KNNSimpleResultSet : public ResultSet<DistanceType>\n{\n    int* indices;\n    DistanceType* dists;\n    int capacity;\n    int count;\n    DistanceType worst_distance_;\n\npublic:\n    KNNSimpleResultSet(int capacity_) : capacity(capacity_), count(0)\n    {\n    }\n\n    void init(int* indices_, DistanceType* dists_)\n    {\n        indices = indices_;\n        dists = dists_;\n        count = 0;\n        worst_distance_ = (std::numeric_limits<DistanceType>::max)();\n        dists[capacity-1] = worst_distance_;\n    }\n\n    size_t size() const\n    {\n        return count;\n    }\n\n    bool full() const\n    {\n        return count == capacity;\n    }\n\n\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist >= worst_distance_) return;\n        int i;\n        for (i=count; i>0; --i) {\n#ifdef FLANN_FIRST_MATCH\n            if ( (dists[i-1]>dist) || ((dist==dists[i-1])&&(indices[i-1]>index)) )\n#else\n            if (dists[i-1]>dist)\n#endif\n            {\n                if (i<capacity) {\n                    dists[i] = dists[i-1];\n                    indices[i] = indices[i-1];\n                }\n            }\n            else break;\n        }\n        if (count < capacity) ++count;\n        dists[i] = dist;\n        indices[i] = index;\n        worst_distance_ = dists[capacity-1];\n    }\n\n    DistanceType worstDist() const\n    {\n        return worst_distance_;\n    }\n};\n\n/**\n * K-Nearest neighbour result set. Ensures that the elements inserted are unique\n */\ntemplate <typename DistanceType>\nclass KNNResultSet : public ResultSet<DistanceType>\n{\n    int* indices;\n    DistanceType* dists;\n    int capacity;\n    int count;\n    DistanceType worst_distance_;\n\npublic:\n    KNNResultSet(int capacity_) : capacity(capacity_), count(0)\n    {\n    }\n\n    void init(int* indices_, DistanceType* dists_)\n    {\n        indices = indices_;\n        dists = dists_;\n        count = 0;\n        worst_distance_ = (std::numeric_limits<DistanceType>::max)();\n        dists[capacity-1] = worst_distance_;\n    }\n\n    size_t size() const\n    {\n        return count;\n    }\n\n    bool full() const\n    {\n        return count == capacity;\n    }\n\n\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist >= worst_distance_) return;\n        int i;\n        for (i = count; i > 0; --i) {\n#ifdef FLANN_FIRST_MATCH\n            if ( (dists[i-1]<=dist) && ((dist!=dists[i-1])||(indices[i-1]<=index)) )\n#else\n            if (dists[i-1]<=dist)\n#endif\n            {\n                // Check for duplicate indices\n                int j = i - 1;\n                while ((j >= 0) && (dists[j] == dist)) {\n                    if (indices[j] == index) {\n                        return;\n                    }\n                    --j;\n                }\n                break;\n            }\n        }\n\n        if (count < capacity) ++count;\n        for (int j = count-1; j > i; --j) {\n            dists[j] = dists[j-1];\n            indices[j] = indices[j-1];\n        }\n        dists[i] = dist;\n        indices[i] = index;\n        worst_distance_ = dists[capacity-1];\n    }\n\n    DistanceType worstDist() const\n    {\n        return worst_distance_;\n    }\n};\n\n\n/**\n * A result-set class used when performing a radius based search.\n */\ntemplate <typename DistanceType>\nclass RadiusResultSet : public ResultSet<DistanceType>\n{\n    DistanceType radius;\n    int* indices;\n    DistanceType* dists;\n    size_t capacity;\n    size_t count;\n\npublic:\n    RadiusResultSet(DistanceType radius_, int* indices_, DistanceType* dists_, int capacity_) :\n        radius(radius_), indices(indices_), dists(dists_), capacity(capacity_)\n    {\n        init();\n    }\n\n    ~RadiusResultSet()\n    {\n    }\n\n    void init()\n    {\n        count = 0;\n    }\n\n    size_t size() const\n    {\n        return count;\n    }\n\n    bool full() const\n    {\n        return true;\n    }\n\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist<radius) {\n            if ((capacity>0)&&(count < capacity)) {\n                dists[count] = dist;\n                indices[count] = index;\n            }\n            count++;\n        }\n    }\n\n    DistanceType worstDist() const\n    {\n        return radius;\n    }\n\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the k NN neighbors\n * Faster than KNNResultSet as it uses a binary heap and does not maintain two arrays\n */\ntemplate<typename DistanceType>\nclass UniqueResultSet : public ResultSet<DistanceType>\n{\npublic:\n    struct DistIndex\n    {\n        DistIndex(DistanceType dist, unsigned int index) :\n            dist_(dist), index_(index)\n        {\n        }\n        bool operator<(const DistIndex dist_index) const\n        {\n            return (dist_ < dist_index.dist_) || ((dist_ == dist_index.dist_) && index_ < dist_index.index_);\n        }\n        DistanceType dist_;\n        unsigned int index_;\n    };\n\n    /** Default cosntructor */\n    UniqueResultSet() :\n        worst_distance_(std::numeric_limits<DistanceType>::max())\n    {\n    }\n\n    /** Check the status of the set\n     * @return true if we have k NN\n     */\n    inline bool full() const\n    {\n        return is_full_;\n    }\n\n    /** Remove all elements in the set\n     */\n    virtual void clear() = 0;\n\n    /** Copy the set to two C arrays\n     * @param indices pointer to a C array of indices\n     * @param dist pointer to a C array of distances\n     * @param n_neighbors the number of neighbors to copy\n     */\n    virtual void copy(int* indices, DistanceType* dist, int n_neighbors = -1) const\n    {\n        if (n_neighbors < 0) {\n            for (typename std::set<DistIndex>::const_iterator dist_index = dist_indices_.begin(), dist_index_end =\n                     dist_indices_.end(); dist_index != dist_index_end; ++dist_index, ++indices, ++dist) {\n                *indices = dist_index->index_;\n                *dist = dist_index->dist_;\n            }\n        }\n        else {\n            int i = 0;\n            for (typename std::set<DistIndex>::const_iterator dist_index = dist_indices_.begin(), dist_index_end =\n                     dist_indices_.end(); (dist_index != dist_index_end) && (i < n_neighbors); ++dist_index, ++indices, ++dist, ++i) {\n                *indices = dist_index->index_;\n                *dist = dist_index->dist_;\n            }\n        }\n    }\n\n    /** Copy the set to two C arrays but sort it according to the distance first\n     * @param indices pointer to a C array of indices\n     * @param dist pointer to a C array of distances\n     * @param n_neighbors the number of neighbors to copy\n     */\n    virtual void sortAndCopy(int* indices, DistanceType* dist, int n_neighbors = -1) const\n    {\n        copy(indices, dist, n_neighbors);\n    }\n\n    /** The number of neighbors in the set\n     * @return\n     */\n    size_t size() const\n    {\n        return dist_indices_.size();\n    }\n\n    /** The distance of the furthest neighbor\n     * If we don't have enough neighbors, it returns the max possible value\n     * @return\n     */\n    inline DistanceType worstDist() const\n    {\n        return worst_distance_;\n    }\nprotected:\n    /** Flag to say if the set is full */\n    bool is_full_;\n\n    /** The worst distance found so far */\n    DistanceType worst_distance_;\n\n    /** The best candidates so far */\n    std::set<DistIndex> dist_indices_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the k NN neighbors\n * Faster than KNNResultSet as it uses a binary heap and does not maintain two arrays\n */\ntemplate<typename DistanceType>\nclass KNNUniqueResultSet : public UniqueResultSet<DistanceType>\n{\npublic:\n    /** Constructor\n     * @param capacity the number of neighbors to store at max\n     */\n    KNNUniqueResultSet(unsigned int capacity) : capacity_(capacity)\n    {\n        this->is_full_ = false;\n        this->clear();\n    }\n\n    /** Add a possible candidate to the best neighbors\n     * @param dist distance for that neighbor\n     * @param index index of that neighbor\n     */\n    inline void addPoint(DistanceType dist, int index)\n    {\n        // Don't do anything if we are worse than the worst\n        if (dist >= worst_distance_) return;\n        dist_indices_.insert(DistIndex(dist, index));\n\n        if (is_full_) {\n            if (dist_indices_.size() > capacity_) {\n                dist_indices_.erase(*dist_indices_.rbegin());\n                worst_distance_ = dist_indices_.rbegin()->dist_;\n            }\n        }\n        else if (dist_indices_.size() == capacity_) {\n            is_full_ = true;\n            worst_distance_ = dist_indices_.rbegin()->dist_;\n        }\n    }\n\n    /** Remove all elements in the set\n     */\n    void clear()\n    {\n        dist_indices_.clear();\n        worst_distance_ = std::numeric_limits<DistanceType>::max();\n        is_full_ = false;\n    }\n\nprotected:\n    typedef typename UniqueResultSet<DistanceType>::DistIndex DistIndex;\n    using UniqueResultSet<DistanceType>::is_full_;\n    using UniqueResultSet<DistanceType>::worst_distance_;\n    using UniqueResultSet<DistanceType>::dist_indices_;\n\n    /** The number of neighbors to keep */\n    unsigned int capacity_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the radius nearest neighbors\n * It is more accurate than RadiusResult as it is not limited in the number of neighbors\n */\ntemplate<typename DistanceType>\nclass RadiusUniqueResultSet : public UniqueResultSet<DistanceType>\n{\npublic:\n    /** Constructor\n     * @param radius the maximum distance of a neighbor\n     */\n    RadiusUniqueResultSet(DistanceType radius) :\n        radius_(radius)\n    {\n        is_full_ = true;\n    }\n\n    /** Add a possible candidate to the best neighbors\n     * @param dist distance for that neighbor\n     * @param index index of that neighbor\n     */\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist <= radius_) dist_indices_.insert(DistIndex(dist, index));\n    }\n\n    /** Remove all elements in the set\n     */\n    inline void clear()\n    {\n        dist_indices_.clear();\n    }\n\n\n    /** Check the status of the set\n     * @return alwys false\n     */\n    inline bool full() const\n    {\n        return true;\n    }\n\n    /** The distance of the furthest neighbor\n     * If we don't have enough neighbors, it returns the max possible value\n     * @return\n     */\n    inline DistanceType worstDist() const\n    {\n        return radius_;\n    }\nprivate:\n    typedef typename UniqueResultSet<DistanceType>::DistIndex DistIndex;\n    using UniqueResultSet<DistanceType>::dist_indices_;\n    using UniqueResultSet<DistanceType>::is_full_;\n\n    /** The furthest distance a neighbor can be */\n    DistanceType radius_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the k NN neighbors within a radius distance\n */\ntemplate<typename DistanceType>\nclass KNNRadiusUniqueResultSet : public KNNUniqueResultSet<DistanceType>\n{\npublic:\n    /** Constructor\n     * @param capacity the number of neighbors to store at max\n     * @param radius the maximum distance of a neighbor\n     */\n    KNNRadiusUniqueResultSet(unsigned int capacity, DistanceType radius)\n    {\n        this->capacity_ = capacity;\n        this->radius_ = radius;\n        this->dist_indices_.reserve(capacity_);\n        this->clear();\n    }\n\n    /** Remove all elements in the set\n     */\n    void clear()\n    {\n        dist_indices_.clear();\n        worst_distance_ = radius_;\n        is_full_ = false;\n    }\nprivate:\n    using KNNUniqueResultSet<DistanceType>::dist_indices_;\n    using KNNUniqueResultSet<DistanceType>::is_full_;\n    using KNNUniqueResultSet<DistanceType>::worst_distance_;\n\n    /** The maximum number of neighbors to consider */\n    unsigned int capacity_;\n\n    /** The maximum distance of a neighbor */\n    DistanceType radius_;\n};\n}\n\n#endif //OPENCV_FLANN_RESULTSET_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/sampling.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_SAMPLING_H_\n#define OPENCV_FLANN_SAMPLING_H_\n\n#include \"matrix.h\"\n#include \"random.h\"\n\nnamespace cvflann\n{\n\ntemplate<typename T>\nMatrix<T> random_sample(Matrix<T>& srcMatrix, long size, bool remove = false)\n{\n    Matrix<T> newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols);\n\n    T* src,* dest;\n    for (long i=0; i<size; ++i) {\n        long r = rand_int((int)(srcMatrix.rows-i));\n        dest = newSet[i];\n        src = srcMatrix[r];\n        std::copy(src, src+srcMatrix.cols, dest);\n        if (remove) {\n            src = srcMatrix[srcMatrix.rows-i-1];\n            dest = srcMatrix[r];\n            std::copy(src, src+srcMatrix.cols, dest);\n        }\n    }\n    if (remove) {\n        srcMatrix.rows -= size;\n    }\n    return newSet;\n}\n\ntemplate<typename T>\nMatrix<T> random_sample(const Matrix<T>& srcMatrix, size_t size)\n{\n    UniqueRandom rand((int)srcMatrix.rows);\n    Matrix<T> newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols);\n\n    T* src,* dest;\n    for (size_t i=0; i<size; ++i) {\n        long r = rand.next();\n        dest = newSet[i];\n        src = srcMatrix[r];\n        std::copy(src, src+srcMatrix.cols, dest);\n    }\n    return newSet;\n}\n\n} // namespace\n\n\n#endif /* OPENCV_FLANN_SAMPLING_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/saving.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE NNIndexGOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_SAVING_H_\n#define OPENCV_FLANN_SAVING_H_\n\n#include <cstring>\n#include <vector>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n\n#ifdef FLANN_SIGNATURE_\n#undef FLANN_SIGNATURE_\n#endif\n#define FLANN_SIGNATURE_ \"FLANN_INDEX\"\n\nnamespace cvflann\n{\n\ntemplate <typename T>\nstruct Datatype {};\ntemplate<>\nstruct Datatype<char> { static flann_datatype_t type() { return FLANN_INT8; } };\ntemplate<>\nstruct Datatype<short> { static flann_datatype_t type() { return FLANN_INT16; } };\ntemplate<>\nstruct Datatype<int> { static flann_datatype_t type() { return FLANN_INT32; } };\ntemplate<>\nstruct Datatype<unsigned char> { static flann_datatype_t type() { return FLANN_UINT8; } };\ntemplate<>\nstruct Datatype<unsigned short> { static flann_datatype_t type() { return FLANN_UINT16; } };\ntemplate<>\nstruct Datatype<unsigned int> { static flann_datatype_t type() { return FLANN_UINT32; } };\ntemplate<>\nstruct Datatype<float> { static flann_datatype_t type() { return FLANN_FLOAT32; } };\ntemplate<>\nstruct Datatype<double> { static flann_datatype_t type() { return FLANN_FLOAT64; } };\n\n\n/**\n * Structure representing the index header.\n */\nstruct IndexHeader\n{\n    char signature[16];\n    char version[16];\n    flann_datatype_t data_type;\n    flann_algorithm_t index_type;\n    size_t rows;\n    size_t cols;\n};\n\n/**\n * Saves index header to stream\n *\n * @param stream - Stream to save to\n * @param index - The index to save\n */\ntemplate<typename Distance>\nvoid save_header(FILE* stream, const NNIndex<Distance>& index)\n{\n    IndexHeader header;\n    memset(header.signature, 0, sizeof(header.signature));\n    strcpy(header.signature, FLANN_SIGNATURE_);\n    memset(header.version, 0, sizeof(header.version));\n    strcpy(header.version, FLANN_VERSION_);\n    header.data_type = Datatype<typename Distance::ElementType>::type();\n    header.index_type = index.getType();\n    header.rows = index.size();\n    header.cols = index.veclen();\n\n    std::fwrite(&header, sizeof(header),1,stream);\n}\n\n\n/**\n *\n * @param stream - Stream to load from\n * @return Index header\n */\ninline IndexHeader load_header(FILE* stream)\n{\n    IndexHeader header;\n    size_t read_size = fread(&header,sizeof(header),1,stream);\n\n    if (read_size!=(size_t)1) {\n        throw FLANNException(\"Invalid index file, cannot read\");\n    }\n\n    if (strcmp(header.signature,FLANN_SIGNATURE_)!=0) {\n        throw FLANNException(\"Invalid index file, wrong signature\");\n    }\n\n    return header;\n\n}\n\n\ntemplate<typename T>\nvoid save_value(FILE* stream, const T& value, size_t count = 1)\n{\n    fwrite(&value, sizeof(value),count, stream);\n}\n\ntemplate<typename T>\nvoid save_value(FILE* stream, const cvflann::Matrix<T>& value)\n{\n    fwrite(&value, sizeof(value),1, stream);\n    fwrite(value.data, sizeof(T),value.rows*value.cols, stream);\n}\n\ntemplate<typename T>\nvoid save_value(FILE* stream, const std::vector<T>& value)\n{\n    size_t size = value.size();\n    fwrite(&size, sizeof(size_t), 1, stream);\n    fwrite(&value[0], sizeof(T), size, stream);\n}\n\ntemplate<typename T>\nvoid load_value(FILE* stream, T& value, size_t count = 1)\n{\n    size_t read_cnt = fread(&value, sizeof(value), count, stream);\n    if (read_cnt != count) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n}\n\ntemplate<typename T>\nvoid load_value(FILE* stream, cvflann::Matrix<T>& value)\n{\n    size_t read_cnt = fread(&value, sizeof(value), 1, stream);\n    if (read_cnt != 1) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n    value.data = new T[value.rows*value.cols];\n    read_cnt = fread(value.data, sizeof(T), value.rows*value.cols, stream);\n    if (read_cnt != (size_t)(value.rows*value.cols)) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n}\n\n\ntemplate<typename T>\nvoid load_value(FILE* stream, std::vector<T>& value)\n{\n    size_t size;\n    size_t read_cnt = fread(&size, sizeof(size_t), 1, stream);\n    if (read_cnt!=1) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n    value.resize(size);\n    read_cnt = fread(&value[0], sizeof(T), size, stream);\n    if (read_cnt != size) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n}\n\n}\n\n#endif /* OPENCV_FLANN_SAVING_H_ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/simplex_downhill.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_SIMPLEX_DOWNHILL_H_\n#define OPENCV_FLANN_SIMPLEX_DOWNHILL_H_\n\nnamespace cvflann\n{\n\n/**\n    Adds val to array vals (and point to array points) and keeping the arrays sorted by vals.\n */\ntemplate <typename T>\nvoid addValue(int pos, float val, float* vals, T* point, T* points, int n)\n{\n    vals[pos] = val;\n    for (int i=0; i<n; ++i) {\n        points[pos*n+i] = point[i];\n    }\n\n    // bubble down\n    int j=pos;\n    while (j>0 && vals[j]<vals[j-1]) {\n        swap(vals[j],vals[j-1]);\n        for (int i=0; i<n; ++i) {\n            swap(points[j*n+i],points[(j-1)*n+i]);\n        }\n        --j;\n    }\n}\n\n\n/**\n    Simplex downhill optimization function.\n    Preconditions: points is a 2D mattrix of size (n+1) x n\n                    func is the cost function taking n an array of n params and returning float\n                    vals is the cost function in the n+1 simplex points, if NULL it will be computed\n\n    Postcondition: returns optimum value and points[0..n] are the optimum parameters\n */\ntemplate <typename T, typename F>\nfloat optimizeSimplexDownhill(T* points, int n, F func, float* vals = NULL )\n{\n    const int MAX_ITERATIONS = 10;\n\n    assert(n>0);\n\n    T* p_o = new T[n];\n    T* p_r = new T[n];\n    T* p_e = new T[n];\n\n    int alpha = 1;\n\n    int iterations = 0;\n\n    bool ownVals = false;\n    if (vals == NULL) {\n        ownVals = true;\n        vals = new float[n+1];\n        for (int i=0; i<n+1; ++i) {\n            float val = func(points+i*n);\n            addValue(i, val, vals, points+i*n, points, n);\n        }\n    }\n    int nn = n*n;\n\n    while (true) {\n\n        if (iterations++ > MAX_ITERATIONS) break;\n\n        // compute average of simplex points (except the highest point)\n        for (int j=0; j<n; ++j) {\n            p_o[j] = 0;\n            for (int i=0; i<n; ++i) {\n                p_o[i] += points[j*n+i];\n            }\n        }\n        for (int i=0; i<n; ++i) {\n            p_o[i] /= n;\n        }\n\n        bool converged = true;\n        for (int i=0; i<n; ++i) {\n            if (p_o[i] != points[nn+i]) {\n                converged = false;\n            }\n        }\n        if (converged) break;\n\n        // trying a reflection\n        for (int i=0; i<n; ++i) {\n            p_r[i] = p_o[i] + alpha*(p_o[i]-points[nn+i]);\n        }\n        float val_r = func(p_r);\n\n        if ((val_r>=vals[0])&&(val_r<vals[n])) {\n            // reflection between second highest and lowest\n            // add it to the simplex\n            Logger::info(\"Choosing reflection\\n\");\n            addValue(n, val_r,vals, p_r, points, n);\n            continue;\n        }\n\n        if (val_r<vals[0]) {\n            // value is smaller than smalest in simplex\n\n            // expand some more to see if it drops further\n            for (int i=0; i<n; ++i) {\n                p_e[i] = 2*p_r[i]-p_o[i];\n            }\n            float val_e = func(p_e);\n\n            if (val_e<val_r) {\n                Logger::info(\"Choosing reflection and expansion\\n\");\n                addValue(n, val_e,vals,p_e,points,n);\n            }\n            else {\n                Logger::info(\"Choosing reflection\\n\");\n                addValue(n, val_r,vals,p_r,points,n);\n            }\n            continue;\n        }\n        if (val_r>=vals[n]) {\n            for (int i=0; i<n; ++i) {\n                p_e[i] = (p_o[i]+points[nn+i])/2;\n            }\n            float val_e = func(p_e);\n\n            if (val_e<vals[n]) {\n                Logger::info(\"Choosing contraction\\n\");\n                addValue(n,val_e,vals,p_e,points,n);\n                continue;\n            }\n        }\n        {\n            Logger::info(\"Full contraction\\n\");\n            for (int j=1; j<=n; ++j) {\n                for (int i=0; i<n; ++i) {\n                    points[j*n+i] = (points[j*n+i]+points[i])/2;\n                }\n                float val = func(points+j*n);\n                addValue(j,val,vals,points+j*n,points,n);\n            }\n        }\n    }\n\n    float bestVal = vals[0];\n\n    delete[] p_r;\n    delete[] p_o;\n    delete[] p_e;\n    if (ownVals) delete[] vals;\n\n    return bestVal;\n}\n\n}\n\n#endif //OPENCV_FLANN_SIMPLEX_DOWNHILL_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann/timer.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_TIMER_H\n#define OPENCV_FLANN_TIMER_H\n\n#include <time.h>\n#include \"opencv2/core.hpp\"\n#include \"opencv2/core/utility.hpp\"\n\nnamespace cvflann\n{\n\n/**\n * A start-stop timer class.\n *\n * Can be used to time portions of code.\n */\nclass StartStopTimer\n{\n    int64 startTime;\n\npublic:\n    /**\n     * Value of the timer.\n     */\n    double value;\n\n\n    /**\n     * Constructor.\n     */\n    StartStopTimer()\n    {\n        reset();\n    }\n\n    /**\n     * Starts the timer.\n     */\n    void start()\n    {\n        startTime = cv::getTickCount();\n    }\n\n    /**\n     * Stops the timer and updates timer value.\n     */\n    void stop()\n    {\n        int64 stopTime = cv::getTickCount();\n        value += ( (double)stopTime - startTime) / cv::getTickFrequency();\n    }\n\n    /**\n     * Resets the timer value to 0.\n     */\n    void reset()\n    {\n        value = 0;\n    }\n\n};\n\n}\n\n#endif // FLANN_TIMER_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/flann.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef _OPENCV_FLANN_HPP_\n#define _OPENCV_FLANN_HPP_\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/flann/miniflann.hpp\"\n#include \"opencv2/flann/flann_base.hpp\"\n\n/**\n@defgroup flann Clustering and Search in Multi-Dimensional Spaces\n\nThis section documents OpenCV's interface to the FLANN library. FLANN (Fast Library for Approximate\nNearest Neighbors) is a library that contains a collection of algorithms optimized for fast nearest\nneighbor search in large datasets and for high dimensional features. More information about FLANN\ncan be found in @cite Muja2009 .\n*/\n\nnamespace cvflann\n{\n    CV_EXPORTS flann_distance_t flann_distance_type();\n    FLANN_DEPRECATED CV_EXPORTS void set_distance_type(flann_distance_t distance_type, int order);\n}\n\n\nnamespace cv\n{\nnamespace flann\n{\n\n\n//! @addtogroup flann\n//! @{\n\ntemplate <typename T> struct CvType {};\ntemplate <> struct CvType<unsigned char> { static int type() { return CV_8U; } };\ntemplate <> struct CvType<char> { static int type() { return CV_8S; } };\ntemplate <> struct CvType<unsigned short> { static int type() { return CV_16U; } };\ntemplate <> struct CvType<short> { static int type() { return CV_16S; } };\ntemplate <> struct CvType<int> { static int type() { return CV_32S; } };\ntemplate <> struct CvType<float> { static int type() { return CV_32F; } };\ntemplate <> struct CvType<double> { static int type() { return CV_64F; } };\n\n\n// bring the flann parameters into this namespace\nusing ::cvflann::get_param;\nusing ::cvflann::print_params;\n\n// bring the flann distances into this namespace\nusing ::cvflann::L2_Simple;\nusing ::cvflann::L2;\nusing ::cvflann::L1;\nusing ::cvflann::MinkowskiDistance;\nusing ::cvflann::MaxDistance;\nusing ::cvflann::HammingLUT;\nusing ::cvflann::Hamming;\nusing ::cvflann::Hamming2;\nusing ::cvflann::HistIntersectionDistance;\nusing ::cvflann::HellingerDistance;\nusing ::cvflann::ChiSquareDistance;\nusing ::cvflann::KL_Divergence;\n\n\n/** @brief The FLANN nearest neighbor index class. This class is templated with the type of elements for which\nthe index is built.\n */\ntemplate <typename Distance>\nclass GenericIndex\n{\npublic:\n        typedef typename Distance::ElementType ElementType;\n        typedef typename Distance::ResultType DistanceType;\n\n        /** @brief Constructs a nearest neighbor search index for a given dataset.\n\n        @param features Matrix of containing the features(points) to index. The size of the matrix is\n        num_features x feature_dimensionality and the data type of the elements in the matrix must\n        coincide with the type of the index.\n        @param params Structure containing the index parameters. The type of index that will be\n        constructed depends on the type of this parameter. See the description.\n        @param distance\n\n        The method constructs a fast search structure from a set of features using the specified algorithm\n        with specified parameters, as defined by params. params is a reference to one of the following class\n        IndexParams descendants:\n\n        - **LinearIndexParams** When passing an object of this type, the index will perform a linear,\n        brute-force search. :\n        @code\n        struct LinearIndexParams : public IndexParams\n        {\n        };\n        @endcode\n        - **KDTreeIndexParams** When passing an object of this type the index constructed will consist of\n        a set of randomized kd-trees which will be searched in parallel. :\n        @code\n        struct KDTreeIndexParams : public IndexParams\n        {\n            KDTreeIndexParams( int trees = 4 );\n        };\n        @endcode\n        - **KMeansIndexParams** When passing an object of this type the index constructed will be a\n        hierarchical k-means tree. :\n        @code\n        struct KMeansIndexParams : public IndexParams\n        {\n            KMeansIndexParams(\n                int branching = 32,\n                int iterations = 11,\n                flann_centers_init_t centers_init = CENTERS_RANDOM,\n                float cb_index = 0.2 );\n        };\n        @endcode\n        - **CompositeIndexParams** When using a parameters object of this type the index created\n        combines the randomized kd-trees and the hierarchical k-means tree. :\n        @code\n        struct CompositeIndexParams : public IndexParams\n        {\n            CompositeIndexParams(\n                int trees = 4,\n                int branching = 32,\n                int iterations = 11,\n                flann_centers_init_t centers_init = CENTERS_RANDOM,\n                float cb_index = 0.2 );\n        };\n        @endcode\n        - **LshIndexParams** When using a parameters object of this type the index created uses\n        multi-probe LSH (by Multi-Probe LSH: Efficient Indexing for High-Dimensional Similarity Search\n        by Qin Lv, William Josephson, Zhe Wang, Moses Charikar, Kai Li., Proceedings of the 33rd\n        International Conference on Very Large Data Bases (VLDB). Vienna, Austria. September 2007) :\n        @code\n        struct LshIndexParams : public IndexParams\n        {\n            LshIndexParams(\n                unsigned int table_number,\n                unsigned int key_size,\n                unsigned int multi_probe_level );\n        };\n        @endcode\n        - **AutotunedIndexParams** When passing an object of this type the index created is\n        automatically tuned to offer the best performance, by choosing the optimal index type\n        (randomized kd-trees, hierarchical kmeans, linear) and parameters for the dataset provided. :\n        @code\n        struct AutotunedIndexParams : public IndexParams\n        {\n            AutotunedIndexParams(\n                float target_precision = 0.9,\n                float build_weight = 0.01,\n                float memory_weight = 0,\n                float sample_fraction = 0.1 );\n        };\n        @endcode\n        - **SavedIndexParams** This object type is used for loading a previously saved index from the\n        disk. :\n        @code\n        struct SavedIndexParams : public IndexParams\n        {\n            SavedIndexParams( String filename );\n        };\n        @endcode\n         */\n        GenericIndex(const Mat& features, const ::cvflann::IndexParams& params, Distance distance = Distance());\n\n        ~GenericIndex();\n\n        /** @brief Performs a K-nearest neighbor search for a given query point using the index.\n\n        @param query The query point\n        @param indices Vector that will contain the indices of the K-nearest neighbors found. It must have\n        at least knn size.\n        @param dists Vector that will contain the distances to the K-nearest neighbors found. It must have\n        at least knn size.\n        @param knn Number of nearest neighbors to search for.\n        @param params SearchParams\n         */\n        void knnSearch(const std::vector<ElementType>& query, std::vector<int>& indices,\n                       std::vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& params);\n        void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params);\n\n        int radiusSearch(const std::vector<ElementType>& query, std::vector<int>& indices,\n                         std::vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& params);\n        int radiusSearch(const Mat& query, Mat& indices, Mat& dists,\n                         DistanceType radius, const ::cvflann::SearchParams& params);\n\n        void save(String filename) { nnIndex->save(filename); }\n\n        int veclen() const { return nnIndex->veclen(); }\n\n        int size() const { return nnIndex->size(); }\n\n        ::cvflann::IndexParams getParameters() { return nnIndex->getParameters(); }\n\n        FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters() { return nnIndex->getIndexParameters(); }\n\nprivate:\n        ::cvflann::Index<Distance>* nnIndex;\n};\n\n//! @cond IGNORED\n\n#define FLANN_DISTANCE_CHECK \\\n    if ( ::cvflann::flann_distance_type() != cvflann::FLANN_DIST_L2) { \\\n        printf(\"[WARNING] You are using cv::flann::Index (or cv::flann::GenericIndex) and have also changed \"\\\n        \"the distance using cvflann::set_distance_type. This is no longer working as expected \"\\\n        \"(cv::flann::Index always uses L2). You should create the index templated on the distance, \"\\\n        \"for example for L1 distance use: GenericIndex< L1<float> > \\n\"); \\\n    }\n\n\ntemplate <typename Distance>\nGenericIndex<Distance>::GenericIndex(const Mat& dataset, const ::cvflann::IndexParams& params, Distance distance)\n{\n    CV_Assert(dataset.type() == CvType<ElementType>::type());\n    CV_Assert(dataset.isContinuous());\n    ::cvflann::Matrix<ElementType> m_dataset((ElementType*)dataset.ptr<ElementType>(0), dataset.rows, dataset.cols);\n\n    nnIndex = new ::cvflann::Index<Distance>(m_dataset, params, distance);\n\n    FLANN_DISTANCE_CHECK\n\n    nnIndex->buildIndex();\n}\n\ntemplate <typename Distance>\nGenericIndex<Distance>::~GenericIndex()\n{\n    delete nnIndex;\n}\n\ntemplate <typename Distance>\nvoid GenericIndex<Distance>::knnSearch(const std::vector<ElementType>& query, std::vector<int>& indices, std::vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    FLANN_DISTANCE_CHECK\n\n    nnIndex->knnSearch(m_query,m_indices,m_dists,knn,searchParams);\n}\n\n\ntemplate <typename Distance>\nvoid GenericIndex<Distance>::knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(queries.type() == CvType<ElementType>::type());\n    CV_Assert(queries.isContinuous());\n    ::cvflann::Matrix<ElementType> m_queries((ElementType*)queries.ptr<ElementType>(0), queries.rows, queries.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    FLANN_DISTANCE_CHECK\n\n    nnIndex->knnSearch(m_queries,m_indices,m_dists,knn, searchParams);\n}\n\ntemplate <typename Distance>\nint GenericIndex<Distance>::radiusSearch(const std::vector<ElementType>& query, std::vector<int>& indices, std::vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    FLANN_DISTANCE_CHECK\n\n    return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\ntemplate <typename Distance>\nint GenericIndex<Distance>::radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(query.type() == CvType<ElementType>::type());\n    CV_Assert(query.isContinuous());\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)query.ptr<ElementType>(0), query.rows, query.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    FLANN_DISTANCE_CHECK\n\n    return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\n//! @endcond\n\n/**\n * @deprecated Use GenericIndex class instead\n */\ntemplate <typename T>\nclass\n#ifndef _MSC_VER\n FLANN_DEPRECATED\n#endif\n Index_ {\npublic:\n        typedef typename L2<T>::ElementType ElementType;\n        typedef typename L2<T>::ResultType DistanceType;\n\n    Index_(const Mat& features, const ::cvflann::IndexParams& params);\n\n    ~Index_();\n\n    void knnSearch(const std::vector<ElementType>& query, std::vector<int>& indices, std::vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& params);\n    void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params);\n\n    int radiusSearch(const std::vector<ElementType>& query, std::vector<int>& indices, std::vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& params);\n    int radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& params);\n\n    void save(String filename)\n        {\n            if (nnIndex_L1) nnIndex_L1->save(filename);\n            if (nnIndex_L2) nnIndex_L2->save(filename);\n        }\n\n    int veclen() const\n    {\n            if (nnIndex_L1) return nnIndex_L1->veclen();\n            if (nnIndex_L2) return nnIndex_L2->veclen();\n        }\n\n    int size() const\n    {\n            if (nnIndex_L1) return nnIndex_L1->size();\n            if (nnIndex_L2) return nnIndex_L2->size();\n        }\n\n        ::cvflann::IndexParams getParameters()\n        {\n            if (nnIndex_L1) return nnIndex_L1->getParameters();\n            if (nnIndex_L2) return nnIndex_L2->getParameters();\n\n        }\n\n        FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters()\n        {\n            if (nnIndex_L1) return nnIndex_L1->getIndexParameters();\n            if (nnIndex_L2) return nnIndex_L2->getIndexParameters();\n        }\n\nprivate:\n        // providing backwards compatibility for L2 and L1 distances (most common)\n        ::cvflann::Index< L2<ElementType> >* nnIndex_L2;\n        ::cvflann::Index< L1<ElementType> >* nnIndex_L1;\n};\n\n#ifdef _MSC_VER\ntemplate <typename T>\nclass FLANN_DEPRECATED Index_;\n#endif\n\n//! @cond IGNORED\n\ntemplate <typename T>\nIndex_<T>::Index_(const Mat& dataset, const ::cvflann::IndexParams& params)\n{\n    printf(\"[WARNING] The cv::flann::Index_<T> class is deperecated, use cv::flann::GenericIndex<Distance> instead\\n\");\n\n    CV_Assert(dataset.type() == CvType<ElementType>::type());\n    CV_Assert(dataset.isContinuous());\n    ::cvflann::Matrix<ElementType> m_dataset((ElementType*)dataset.ptr<ElementType>(0), dataset.rows, dataset.cols);\n\n    if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L2 ) {\n        nnIndex_L1 = NULL;\n        nnIndex_L2 = new ::cvflann::Index< L2<ElementType> >(m_dataset, params);\n    }\n    else if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L1 ) {\n        nnIndex_L1 = new ::cvflann::Index< L1<ElementType> >(m_dataset, params);\n        nnIndex_L2 = NULL;\n    }\n    else {\n        printf(\"[ERROR] cv::flann::Index_<T> only provides backwards compatibility for the L1 and L2 distances. \"\n        \"For other distance types you must use cv::flann::GenericIndex<Distance>\\n\");\n        CV_Assert(0);\n    }\n    if (nnIndex_L1) nnIndex_L1->buildIndex();\n    if (nnIndex_L2) nnIndex_L2->buildIndex();\n}\n\ntemplate <typename T>\nIndex_<T>::~Index_()\n{\n    if (nnIndex_L1) delete nnIndex_L1;\n    if (nnIndex_L2) delete nnIndex_L2;\n}\n\ntemplate <typename T>\nvoid Index_<T>::knnSearch(const std::vector<ElementType>& query, std::vector<int>& indices, std::vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    if (nnIndex_L1) nnIndex_L1->knnSearch(m_query,m_indices,m_dists,knn,searchParams);\n    if (nnIndex_L2) nnIndex_L2->knnSearch(m_query,m_indices,m_dists,knn,searchParams);\n}\n\n\ntemplate <typename T>\nvoid Index_<T>::knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(queries.type() == CvType<ElementType>::type());\n    CV_Assert(queries.isContinuous());\n    ::cvflann::Matrix<ElementType> m_queries((ElementType*)queries.ptr<ElementType>(0), queries.rows, queries.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    if (nnIndex_L1) nnIndex_L1->knnSearch(m_queries,m_indices,m_dists,knn, searchParams);\n    if (nnIndex_L2) nnIndex_L2->knnSearch(m_queries,m_indices,m_dists,knn, searchParams);\n}\n\ntemplate <typename T>\nint Index_<T>::radiusSearch(const std::vector<ElementType>& query, std::vector<int>& indices, std::vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    if (nnIndex_L1) return nnIndex_L1->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n    if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\ntemplate <typename T>\nint Index_<T>::radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(query.type() == CvType<ElementType>::type());\n    CV_Assert(query.isContinuous());\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)query.ptr<ElementType>(0), query.rows, query.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    if (nnIndex_L1) return nnIndex_L1->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n    if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\n//! @endcond\n\n/** @brief Clusters features using hierarchical k-means algorithm.\n\n@param features The points to be clustered. The matrix must have elements of type\nDistance::ElementType.\n@param centers The centers of the clusters obtained. The matrix must have type\nDistance::ResultType. The number of rows in this matrix represents the number of clusters desired,\nhowever, because of the way the cut in the hierarchical tree is chosen, the number of clusters\ncomputed will be the highest number of the form (branching-1)\\*k+1 that's lower than the number of\nclusters desired, where branching is the tree's branching factor (see description of the\nKMeansIndexParams).\n@param params Parameters used in the construction of the hierarchical k-means tree.\n@param d Distance to be used for clustering.\n\nThe method clusters the given feature vectors by constructing a hierarchical k-means tree and\nchoosing a cut in the tree that minimizes the cluster's variance. It returns the number of clusters\nfound.\n */\ntemplate <typename Distance>\nint hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params,\n                           Distance d = Distance())\n{\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    CV_Assert(features.type() == CvType<ElementType>::type());\n    CV_Assert(features.isContinuous());\n    ::cvflann::Matrix<ElementType> m_features((ElementType*)features.ptr<ElementType>(0), features.rows, features.cols);\n\n    CV_Assert(centers.type() == CvType<DistanceType>::type());\n    CV_Assert(centers.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_centers((DistanceType*)centers.ptr<DistanceType>(0), centers.rows, centers.cols);\n\n    return ::cvflann::hierarchicalClustering<Distance>(m_features, m_centers, params, d);\n}\n\n/** @deprecated\n*/\ntemplate <typename ELEM_TYPE, typename DIST_TYPE>\nFLANN_DEPRECATED int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params)\n{\n    printf(\"[WARNING] cv::flann::hierarchicalClustering<ELEM_TYPE,DIST_TYPE> is deprecated, use \"\n        \"cv::flann::hierarchicalClustering<Distance> instead\\n\");\n\n    if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L2 ) {\n        return hierarchicalClustering< L2<ELEM_TYPE> >(features, centers, params);\n    }\n    else if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L1 ) {\n        return hierarchicalClustering< L1<ELEM_TYPE> >(features, centers, params);\n    }\n    else {\n        printf(\"[ERROR] cv::flann::hierarchicalClustering<ELEM_TYPE,DIST_TYPE> only provides backwards \"\n        \"compatibility for the L1 and L2 distances. \"\n        \"For other distance types you must use cv::flann::hierarchicalClustering<Distance>\\n\");\n        CV_Assert(0);\n    }\n}\n\n//! @} flann\n\n} } // namespace cv::flann\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/highgui/highgui.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/highgui.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/highgui/highgui_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HIGHGUI_H__\n#define __OPENCV_HIGHGUI_H__\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/imgproc/imgproc_c.h\"\n#include \"opencv2/imgcodecs/imgcodecs_c.h\"\n#include \"opencv2/videoio/videoio_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/** @addtogroup highgui_c\n  @{\n  */\n\n/****************************************************************************************\\\n*                                  Basic GUI functions                                   *\n\\****************************************************************************************/\n//YV\n//-----------New for Qt\n/* For font */\nenum {  CV_FONT_LIGHT           = 25,//QFont::Light,\n        CV_FONT_NORMAL          = 50,//QFont::Normal,\n        CV_FONT_DEMIBOLD        = 63,//QFont::DemiBold,\n        CV_FONT_BOLD            = 75,//QFont::Bold,\n        CV_FONT_BLACK           = 87 //QFont::Black\n};\n\nenum {  CV_STYLE_NORMAL         = 0,//QFont::StyleNormal,\n        CV_STYLE_ITALIC         = 1,//QFont::StyleItalic,\n        CV_STYLE_OBLIQUE        = 2 //QFont::StyleOblique\n};\n/* ---------*/\n\n//for color cvScalar(blue_component, green_component, red_component[, alpha_component])\n//and alpha= 0 <-> 0xFF (not transparent <-> transparent)\nCVAPI(CvFont) cvFontQt(const char* nameFont, int pointSize CV_DEFAULT(-1), CvScalar color CV_DEFAULT(cvScalarAll(0)), int weight CV_DEFAULT(CV_FONT_NORMAL),  int style CV_DEFAULT(CV_STYLE_NORMAL), int spacing CV_DEFAULT(0));\n\nCVAPI(void) cvAddText(const CvArr* img, const char* text, CvPoint org, CvFont *arg2);\n\nCVAPI(void) cvDisplayOverlay(const char* name, const char* text, int delayms CV_DEFAULT(0));\nCVAPI(void) cvDisplayStatusBar(const char* name, const char* text, int delayms CV_DEFAULT(0));\n\nCVAPI(void) cvSaveWindowParameters(const char* name);\nCVAPI(void) cvLoadWindowParameters(const char* name);\nCVAPI(int) cvStartLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]);\nCVAPI(void) cvStopLoop( void );\n\ntypedef void (CV_CDECL *CvButtonCallback)(int state, void* userdata);\nenum {CV_PUSH_BUTTON = 0, CV_CHECKBOX = 1, CV_RADIOBOX = 2};\nCVAPI(int) cvCreateButton( const char* button_name CV_DEFAULT(NULL),CvButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL) , int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0));\n//----------------------\n\n\n/* this function is used to set some external parameters in case of X Window */\nCVAPI(int) cvInitSystem( int argc, char** argv );\n\nCVAPI(int) cvStartWindowThread( void );\n\n// ---------  YV ---------\nenum\n{\n    //These 3 flags are used by cvSet/GetWindowProperty\n    CV_WND_PROP_FULLSCREEN = 0, //to change/get window's fullscreen property\n    CV_WND_PROP_AUTOSIZE   = 1, //to change/get window's autosize property\n    CV_WND_PROP_ASPECTRATIO= 2, //to change/get window's aspectratio property\n    CV_WND_PROP_OPENGL     = 3, //to change/get window's opengl support\n\n    //These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty\n    CV_WINDOW_NORMAL       = 0x00000000, //the user can resize the window (no constraint)  / also use to switch a fullscreen window to a normal size\n    CV_WINDOW_AUTOSIZE     = 0x00000001, //the user cannot resize the window, the size is constrainted by the image displayed\n    CV_WINDOW_OPENGL       = 0x00001000, //window with opengl support\n\n    //Those flags are only for Qt\n    CV_GUI_EXPANDED         = 0x00000000, //status bar and tool bar\n    CV_GUI_NORMAL           = 0x00000010, //old fashious way\n\n    //These 3 flags are used by cvNamedWindow and cvSet/GetWindowProperty\n    CV_WINDOW_FULLSCREEN   = 1,//change the window to fullscreen\n    CV_WINDOW_FREERATIO    = 0x00000100,//the image expends as much as it can (no ratio constraint)\n    CV_WINDOW_KEEPRATIO    = 0x00000000//the ration image is respected.\n};\n\n/* create window */\nCVAPI(int) cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );\n\n/* Set and Get Property of the window */\nCVAPI(void) cvSetWindowProperty(const char* name, int prop_id, double prop_value);\nCVAPI(double) cvGetWindowProperty(const char* name, int prop_id);\n\n/* display image within window (highgui windows remember their content) */\nCVAPI(void) cvShowImage( const char* name, const CvArr* image );\n\n/* resize/move window */\nCVAPI(void) cvResizeWindow( const char* name, int width, int height );\nCVAPI(void) cvMoveWindow( const char* name, int x, int y );\n\n\n/* destroy window and all the trackers associated with it */\nCVAPI(void) cvDestroyWindow( const char* name );\n\nCVAPI(void) cvDestroyAllWindows(void);\n\n/* get native window handle (HWND in case of Win32 and Widget in case of X Window) */\nCVAPI(void*) cvGetWindowHandle( const char* name );\n\n/* get name of highgui window given its native handle */\nCVAPI(const char*) cvGetWindowName( void* window_handle );\n\n\ntypedef void (CV_CDECL *CvTrackbarCallback)(int pos);\n\n/* create trackbar and display it on top of given window, set callback */\nCVAPI(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name,\n                             int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL));\n\ntypedef void (CV_CDECL *CvTrackbarCallback2)(int pos, void* userdata);\n\nCVAPI(int) cvCreateTrackbar2( const char* trackbar_name, const char* window_name,\n                              int* value, int count, CvTrackbarCallback2 on_change,\n                              void* userdata CV_DEFAULT(0));\n\n/* retrieve or set trackbar position */\nCVAPI(int) cvGetTrackbarPos( const char* trackbar_name, const char* window_name );\nCVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );\nCVAPI(void) cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval);\nCVAPI(void) cvSetTrackbarMin(const char* trackbar_name, const char* window_name, int minval);\n\nenum\n{\n    CV_EVENT_MOUSEMOVE      =0,\n    CV_EVENT_LBUTTONDOWN    =1,\n    CV_EVENT_RBUTTONDOWN    =2,\n    CV_EVENT_MBUTTONDOWN    =3,\n    CV_EVENT_LBUTTONUP      =4,\n    CV_EVENT_RBUTTONUP      =5,\n    CV_EVENT_MBUTTONUP      =6,\n    CV_EVENT_LBUTTONDBLCLK  =7,\n    CV_EVENT_RBUTTONDBLCLK  =8,\n    CV_EVENT_MBUTTONDBLCLK  =9,\n    CV_EVENT_MOUSEWHEEL     =10,\n    CV_EVENT_MOUSEHWHEEL    =11\n};\n\nenum\n{\n    CV_EVENT_FLAG_LBUTTON   =1,\n    CV_EVENT_FLAG_RBUTTON   =2,\n    CV_EVENT_FLAG_MBUTTON   =4,\n    CV_EVENT_FLAG_CTRLKEY   =8,\n    CV_EVENT_FLAG_SHIFTKEY  =16,\n    CV_EVENT_FLAG_ALTKEY    =32\n};\n\n\n#define CV_GET_WHEEL_DELTA(flags) ((short)((flags >> 16) & 0xffff)) // upper 16 bits\n\ntypedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param);\n\n/* assign callback for mouse events */\nCVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse,\n                                void* param CV_DEFAULT(NULL));\n\n/* wait for key event infinitely (delay<=0) or for \"delay\" milliseconds */\nCVAPI(int) cvWaitKey(int delay CV_DEFAULT(0));\n\n// OpenGL support\n\ntypedef void (CV_CDECL *CvOpenGlDrawCallback)(void* userdata);\nCVAPI(void) cvSetOpenGlDrawCallback(const char* window_name, CvOpenGlDrawCallback callback, void* userdata CV_DEFAULT(NULL));\n\nCVAPI(void) cvSetOpenGlContext(const char* window_name);\nCVAPI(void) cvUpdateWindow(const char* window_name);\n\n\n/****************************************************************************************\\\n\n*                              Obsolete functions/synonyms                               *\n\\****************************************************************************************/\n\n#define cvAddSearchPath(path)\n#define cvvInitSystem cvInitSystem\n#define cvvNamedWindow cvNamedWindow\n#define cvvShowImage cvShowImage\n#define cvvResizeWindow cvResizeWindow\n#define cvvDestroyWindow cvDestroyWindow\n#define cvvCreateTrackbar cvCreateTrackbar\n#define cvvAddSearchPath cvAddSearchPath\n#define cvvWaitKey(name) cvWaitKey(0)\n#define cvvWaitKeyEx(name,delay) cvWaitKey(delay)\n#define HG_AUTOSIZE CV_WINDOW_AUTOSIZE\n#define set_preprocess_func cvSetPreprocessFuncWin32\n#define set_postprocess_func cvSetPostprocessFuncWin32\n\n#if defined WIN32 || defined _WIN32\n\nCVAPI(void) cvSetPreprocessFuncWin32_(const void* callback);\nCVAPI(void) cvSetPostprocessFuncWin32_(const void* callback);\n#define cvSetPreprocessFuncWin32(callback) cvSetPreprocessFuncWin32_((const void*)(callback))\n#define cvSetPostprocessFuncWin32(callback) cvSetPostprocessFuncWin32_((const void*)(callback))\n\n#endif\n\n/** @} highgui_c */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/highgui.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HIGHGUI_HPP__\n#define __OPENCV_HIGHGUI_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/imgcodecs.hpp\"\n#include \"opencv2/videoio.hpp\"\n\n/**\n@defgroup highgui High-level GUI\n\nWhile OpenCV was designed for use in full-scale applications and can be used within functionally\nrich UI frameworks (such as Qt\\*, WinForms\\*, or Cocoa\\*) or without any UI at all, sometimes there\nit is required to try functionality quickly and visualize the results. This is what the HighGUI\nmodule has been designed for.\n\nIt provides easy interface to:\n\n-   Create and manipulate windows that can display images and \"remember\" their content (no need to\n    handle repaint events from OS).\n-   Add trackbars to the windows, handle simple mouse events as well as keyboard commands.\n\n@{\n    @defgroup highgui_opengl OpenGL support\n    @defgroup highgui_qt Qt New Functions\n\n    ![image](pics/qtgui.png)\n\n    This figure explains new functionality implemented with Qt\\* GUI. The new GUI provides a statusbar,\n    a toolbar, and a control panel. The control panel can have trackbars and buttonbars attached to it.\n    If you cannot see the control panel, press Ctrl+P or right-click any Qt window and select **Display\n    properties window**.\n\n    -   To attach a trackbar, the window name parameter must be NULL.\n\n    -   To attach a buttonbar, a button must be created. If the last bar attached to the control panel\n        is a buttonbar, the new button is added to the right of the last button. If the last bar\n        attached to the control panel is a trackbar, or the control panel is empty, a new buttonbar is\n        created. Then, a new button is attached to it.\n\n    See below the example used to generate the figure:\n    @code\n        int main(int argc, char *argv[])\n        {\n\n            int value = 50;\n            int value2 = 0;\n\n\n            namedWindow(\"main1\",WINDOW_NORMAL);\n            namedWindow(\"main2\",WINDOW_AUTOSIZE | CV_GUI_NORMAL);\n            createTrackbar( \"track1\", \"main1\", &value, 255,  NULL);\n\n            String nameb1 = \"button1\";\n            String nameb2 = \"button2\";\n\n            createButton(nameb1,callbackButton,&nameb1,QT_CHECKBOX,1);\n            createButton(nameb2,callbackButton,NULL,QT_CHECKBOX,0);\n            createTrackbar( \"track2\", NULL, &value2, 255, NULL);\n            createButton(\"button5\",callbackButton1,NULL,QT_RADIOBOX,0);\n            createButton(\"button6\",callbackButton2,NULL,QT_RADIOBOX,1);\n\n            setMouseCallback( \"main2\",on_mouse,NULL );\n\n            Mat img1 = imread(\"files/flower.jpg\");\n            VideoCapture video;\n            video.open(\"files/hockey.avi\");\n\n            Mat img2,img3;\n\n            while( waitKey(33) != 27 )\n            {\n                img1.convertTo(img2,-1,1,value);\n                video >> img3;\n\n                imshow(\"main1\",img2);\n                imshow(\"main2\",img3);\n            }\n\n            destroyAllWindows();\n\n            return 0;\n        }\n    @endcode\n\n\n    @defgroup highgui_winrt WinRT support\n\n    This figure explains new functionality implemented with WinRT GUI. The new GUI provides an Image control,\n    and a slider panel. Slider panel holds trackbars attached to it.\n\n    Sliders are attached below the image control. Every new slider is added below the previous one.\n\n    See below the example used to generate the figure:\n    @code\n        void sample_app::MainPage::ShowWindow()\n        {\n            static cv::String windowName(\"sample\");\n            cv::winrt_initContainer(this->cvContainer);\n            cv::namedWindow(windowName); // not required\n\n            cv::Mat image = cv::imread(\"Assets/sample.jpg\");\n            cv::Mat converted = cv::Mat(image.rows, image.cols, CV_8UC4);\n            cv::cvtColor(image, converted, COLOR_BGR2BGRA);\n            cv::imshow(windowName, converted); // this will create window if it hasn't been created before\n\n            int state = 42;\n            cv::TrackbarCallback callback = [](int pos, void* userdata)\n            {\n                if (pos == 0) {\n                    cv::destroyWindow(windowName);\n                }\n            };\n            cv::TrackbarCallback callbackTwin = [](int pos, void* userdata)\n            {\n                if (pos >= 70) {\n                    cv::destroyAllWindows();\n                }\n            };\n            cv::createTrackbar(\"Sample trackbar\", windowName, &state, 100, callback);\n            cv::createTrackbar(\"Twin brother\", windowName, &state, 100, callbackTwin);\n        }\n    @endcode\n\n    @defgroup highgui_c C API\n@}\n*/\n\n///////////////////////// graphical user interface //////////////////////////\nnamespace cv\n{\n\n//! @addtogroup highgui\n//! @{\n\n//! Flags for cv::namedWindow\nenum WindowFlags {\n       WINDOW_NORMAL     = 0x00000000, //!< the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size.\n       WINDOW_AUTOSIZE   = 0x00000001, //!< the user cannot resize the window, the size is constrainted by the image displayed.\n       WINDOW_OPENGL     = 0x00001000, //!< window with opengl support.\n\n       WINDOW_FULLSCREEN = 1,          //!< change the window to fullscreen.\n       WINDOW_FREERATIO  = 0x00000100, //!< the image expends as much as it can (no ratio constraint).\n       WINDOW_KEEPRATIO  = 0x00000000  //!< the ratio of the image is respected.\n     };\n\n//! Flags for cv::setWindowProperty / cv::getWindowProperty\nenum WindowPropertyFlags {\n       WND_PROP_FULLSCREEN   = 0, //!< fullscreen property    (can be WINDOW_NORMAL or WINDOW_FULLSCREEN).\n       WND_PROP_AUTOSIZE     = 1, //!< autosize property      (can be WINDOW_NORMAL or WINDOW_AUTOSIZE).\n       WND_PROP_ASPECT_RATIO = 2, //!< window's aspect ration (can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO).\n       WND_PROP_OPENGL       = 3  //!< opengl support.\n     };\n\n//! Mouse Events see cv::MouseCallback\nenum MouseEventTypes {\n       EVENT_MOUSEMOVE      = 0, //!< indicates that the mouse pointer has moved over the window.\n       EVENT_LBUTTONDOWN    = 1, //!< indicates that the left mouse button is pressed.\n       EVENT_RBUTTONDOWN    = 2, //!< indicates that the right mouse button is pressed.\n       EVENT_MBUTTONDOWN    = 3, //!< indicates that the middle mouse button is pressed.\n       EVENT_LBUTTONUP      = 4, //!< indicates that left mouse button is released.\n       EVENT_RBUTTONUP      = 5, //!< indicates that right mouse button is released.\n       EVENT_MBUTTONUP      = 6, //!< indicates that middle mouse button is released.\n       EVENT_LBUTTONDBLCLK  = 7, //!< indicates that left mouse button is double clicked.\n       EVENT_RBUTTONDBLCLK  = 8, //!< indicates that right mouse button is double clicked.\n       EVENT_MBUTTONDBLCLK  = 9, //!< indicates that middle mouse button is double clicked.\n       EVENT_MOUSEWHEEL     = 10,//!< positive and negative values mean forward and backward scrolling, respectively.\n       EVENT_MOUSEHWHEEL    = 11 //!< positive and negative values mean right and left scrolling, respectively.\n     };\n\n//! Mouse Event Flags see cv::MouseCallback\nenum MouseEventFlags {\n       EVENT_FLAG_LBUTTON   = 1, //!< indicates that the left mouse button is down.\n       EVENT_FLAG_RBUTTON   = 2, //!< indicates that the right mouse button is down.\n       EVENT_FLAG_MBUTTON   = 4, //!< indicates that the middle mouse button is down.\n       EVENT_FLAG_CTRLKEY   = 8, //!< indicates that CTRL Key is pressed.\n       EVENT_FLAG_SHIFTKEY  = 16,//!< indicates that SHIFT Key is pressed.\n       EVENT_FLAG_ALTKEY    = 32 //!< indicates that ALT Key is pressed.\n     };\n\n//! Qt font weight\nenum QtFontWeights {\n        QT_FONT_LIGHT           = 25, //!< Weight of 25\n        QT_FONT_NORMAL          = 50, //!< Weight of 50\n        QT_FONT_DEMIBOLD        = 63, //!< Weight of 63\n        QT_FONT_BOLD            = 75, //!< Weight of 75\n        QT_FONT_BLACK           = 87  //!< Weight of 87\n     };\n\n//! Qt font style\nenum QtFontStyles {\n        QT_STYLE_NORMAL         = 0, //!< Normal font.\n        QT_STYLE_ITALIC         = 1, //!< Italic font.\n        QT_STYLE_OBLIQUE        = 2  //!< Oblique font.\n     };\n\n//! Qt \"button\" type\nenum QtButtonTypes {\n       QT_PUSH_BUTTON = 0, //!< Push button.\n       QT_CHECKBOX    = 1, //!< Checkbox button.\n       QT_RADIOBOX    = 2  //!< Radiobox button.\n     };\n\n/** @brief Callback function for mouse events. see cv::setMouseCallback\n@param event one of the cv::MouseEventTypes constants.\n@param x The x-coordinate of the mouse event.\n@param y The y-coordinate of the mouse event.\n@param flags one of the cv::MouseEventFlags constants.\n@param userdata The optional parameter.\n */\ntypedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);\n\n/** @brief Callback function for Trackbar see cv::createTrackbar\n@param pos current position of the specified trackbar.\n@param userdata The optional parameter.\n */\ntypedef void (*TrackbarCallback)(int pos, void* userdata);\n\n/** @brief Callback function defined to be called every frame. See cv::setOpenGlDrawCallback\n@param userdata The optional parameter.\n */\ntypedef void (*OpenGlDrawCallback)(void* userdata);\n\n/** @brief Callback function for a button created by cv::createButton\n@param state current state of the button. It could be -1 for a push button, 0 or 1 for a check/radio box button.\n@param userdata The optional parameter.\n */\ntypedef void (*ButtonCallback)(int state, void* userdata);\n\n/** @brief Creates a window.\n\nThe function namedWindow creates a window that can be used as a placeholder for images and\ntrackbars. Created windows are referred to by their names.\n\nIf a window with the same name already exists, the function does nothing.\n\nYou can call cv::destroyWindow or cv::destroyAllWindows to close the window and de-allocate any associated\nmemory usage. For a simple program, you do not really have to call these functions because all the\nresources and windows of the application are closed automatically by the operating system upon exit.\n\n@note\n\nQt backend supports additional flags:\n -   **WINDOW_NORMAL or WINDOW_AUTOSIZE:** WINDOW_NORMAL enables you to resize the\n     window, whereas WINDOW_AUTOSIZE adjusts automatically the window size to fit the\n     displayed image (see imshow ), and you cannot change the window size manually.\n -   **WINDOW_FREERATIO or WINDOW_KEEPRATIO:** WINDOW_FREERATIO adjusts the image\n     with no respect to its ratio, whereas WINDOW_KEEPRATIO keeps the image ratio.\n -   **CV_GUI_NORMAL or CV_GUI_EXPANDED:** CV_GUI_NORMAL is the old way to draw the window\n     without statusbar and toolbar, whereas CV_GUI_EXPANDED is a new enhanced GUI.\nBy default, flags == WINDOW_AUTOSIZE | WINDOW_KEEPRATIO | CV_GUI_EXPANDED\n\n@param winname Name of the window in the window caption that may be used as a window identifier.\n@param flags Flags of the window. The supported flags are: (cv::WindowFlags)\n */\nCV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);\n\n/** @brief Destroys the specified window.\n\nThe function destroyWindow destroys the window with the given name.\n\n@param winname Name of the window to be destroyed.\n */\nCV_EXPORTS_W void destroyWindow(const String& winname);\n\n/** @brief Destroys all of the HighGUI windows.\n\nThe function destroyAllWindows destroys all of the opened HighGUI windows.\n */\nCV_EXPORTS_W void destroyAllWindows();\n\nCV_EXPORTS_W int startWindowThread();\n\n/** @brief Waits for a pressed key.\n\nThe function waitKey waits for a key event infinitely (when \\f$\\texttt{delay}\\leq 0\\f$ ) or for delay\nmilliseconds, when it is positive. Since the OS has a minimum time between switching threads, the\nfunction will not wait exactly delay ms, it will wait at least delay ms, depending on what else is\nrunning on your computer at that time. It returns the code of the pressed key or -1 if no key was\npressed before the specified time had elapsed.\n\n@note\n\nThis function is the only method in HighGUI that can fetch and handle events, so it needs to be\ncalled periodically for normal event processing unless HighGUI is used within an environment that\ntakes care of event processing.\n\n@note\n\nThe function only works if there is at least one HighGUI window created and the window is active.\nIf there are several HighGUI windows, any of them can be active.\n\n@param delay Delay in milliseconds. 0 is the special value that means \"forever\".\n */\nCV_EXPORTS_W int waitKey(int delay = 0);\n\n/** @brief Displays an image in the specified window.\n\nThe function imshow displays an image in the specified window. If the window was created with the\ncv::WINDOW_AUTOSIZE flag, the image is shown with its original size, however it is still limited by the screen resolution.\nOtherwise, the image is scaled to fit the window. The function may scale the image, depending on its depth:\n\n-   If the image is 8-bit unsigned, it is displayed as is.\n-   If the image is 16-bit unsigned or 32-bit integer, the pixels are divided by 256. That is, the\n    value range [0,255\\*256] is mapped to [0,255].\n-   If the image is 32-bit floating-point, the pixel values are multiplied by 255. That is, the\n    value range [0,1] is mapped to [0,255].\n\nIf window was created with OpenGL support, cv::imshow also support ogl::Buffer , ogl::Texture2D and\ncuda::GpuMat as input.\n\nIf the window was not created before this function, it is assumed creating a window with cv::WINDOW_AUTOSIZE.\n\nIf you need to show an image that is bigger than the screen resolution, you will need to call namedWindow(\"\", WINDOW_NORMAL) before the imshow.\n\n@note This function should be followed by cv::waitKey function which displays the image for specified\nmilliseconds. Otherwise, it won't display the image. For example, **waitKey(0)** will display the window\ninfinitely until any keypress (it is suitable for image display). **waitKey(25)** will display a frame\nfor 25 ms, after which display will be automatically closed. (If you put it in a loop to read\nvideos, it will display the video frame-by-frame)\n\n@note\n\n[__Windows Backend Only__] Pressing Ctrl+C will copy the image to the clipboard.\n\n[__Windows Backend Only__] Pressing Ctrl+S will show a dialog to save the image.\n\n@param winname Name of the window.\n@param mat Image to be shown.\n */\nCV_EXPORTS_W void imshow(const String& winname, InputArray mat);\n\n/** @brief Resizes window to the specified size\n\n@note\n\n-   The specified window size is for the image area. Toolbars are not counted.\n-   Only windows created without cv::WINDOW_AUTOSIZE flag can be resized.\n\n@param winname Window name.\n@param width The new window width.\n@param height The new window height.\n */\nCV_EXPORTS_W void resizeWindow(const String& winname, int width, int height);\n\n/** @brief Moves window to the specified position\n\n@param winname Name of the window.\n@param x The new x-coordinate of the window.\n@param y The new y-coordinate of the window.\n */\nCV_EXPORTS_W void moveWindow(const String& winname, int x, int y);\n\n/** @brief Changes parameters of a window dynamically.\n\nThe function setWindowProperty enables changing properties of a window.\n\n@param winname Name of the window.\n@param prop_id Window property to edit. The supported operation flags are: (cv::WindowPropertyFlags)\n@param prop_value New value of the window property. The supported flags are: (cv::WindowFlags)\n */\nCV_EXPORTS_W void setWindowProperty(const String& winname, int prop_id, double prop_value);\n\n/** @brief Updates window title\n@param winname Name of the window.\n@param title New title.\n*/\nCV_EXPORTS_W void setWindowTitle(const String& winname, const String& title);\n\n/** @brief Provides parameters of a window.\n\nThe function getWindowProperty returns properties of a window.\n\n@param winname Name of the window.\n@param prop_id Window property to retrieve. The following operation flags are available: (cv::WindowPropertyFlags)\n\n@sa setWindowProperty\n */\nCV_EXPORTS_W double getWindowProperty(const String& winname, int prop_id);\n\n/** @brief Sets mouse handler for the specified window\n\n@param winname Name of the window.\n@param onMouse Mouse callback. See OpenCV samples, such as\n<https://github.com/Itseez/opencv/tree/master/samples/cpp/ffilldemo.cpp>, on how to specify and\nuse the callback.\n@param userdata The optional parameter passed to the callback.\n */\nCV_EXPORTS void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);\n\n/** @brief Gets the mouse-wheel motion delta, when handling mouse-wheel events cv::EVENT_MOUSEWHEEL and\ncv::EVENT_MOUSEHWHEEL.\n\nFor regular mice with a scroll-wheel, delta will be a multiple of 120. The value 120 corresponds to\na one notch rotation of the wheel or the threshold for action to be taken and one such action should\noccur for each delta. Some high-precision mice with higher-resolution freely-rotating wheels may\ngenerate smaller values.\n\nFor cv::EVENT_MOUSEWHEEL positive and negative values mean forward and backward scrolling,\nrespectively. For cv::EVENT_MOUSEHWHEEL, where available, positive and negative values mean right and\nleft scrolling, respectively.\n\nWith the C API, the macro CV_GET_WHEEL_DELTA(flags) can be used alternatively.\n\n@note\n\nMouse-wheel events are currently supported only on Windows.\n\n@param flags The mouse callback flags parameter.\n */\nCV_EXPORTS int getMouseWheelDelta(int flags);\n\n/** @brief Creates a trackbar and attaches it to the specified window.\n\nThe function createTrackbar creates a trackbar (a slider or range control) with the specified name\nand range, assigns a variable value to be a position synchronized with the trackbar and specifies\nthe callback function onChange to be called on the trackbar position change. The created trackbar is\ndisplayed in the specified window winname.\n\n@note\n\n[__Qt Backend Only__] winname can be empty (or NULL) if the trackbar should be attached to the\ncontrol panel.\n\nClicking the label of each trackbar enables editing the trackbar values manually.\n\n@param trackbarname Name of the created trackbar.\n@param winname Name of the window that will be used as a parent of the created trackbar.\n@param value Optional pointer to an integer variable whose value reflects the position of the\nslider. Upon creation, the slider position is defined by this variable.\n@param count Maximal position of the slider. The minimal position is always 0.\n@param onChange Pointer to the function to be called every time the slider changes position. This\nfunction should be prototyped as void Foo(int,void\\*); , where the first parameter is the trackbar\nposition and the second parameter is the user data (see the next parameter). If the callback is\nthe NULL pointer, no callbacks are called, but only value is updated.\n@param userdata User data that is passed as is to the callback. It can be used to handle trackbar\nevents without using global variables.\n */\nCV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,\n                              int* value, int count,\n                              TrackbarCallback onChange = 0,\n                              void* userdata = 0);\n\n/** @brief Returns the trackbar position.\n\nThe function returns the current position of the specified trackbar.\n\n@note\n\n[__Qt Backend Only__] winname can be empty (or NULL) if the trackbar is attached to the control\npanel.\n\n@param trackbarname Name of the trackbar.\n@param winname Name of the window that is the parent of the trackbar.\n */\nCV_EXPORTS_W int getTrackbarPos(const String& trackbarname, const String& winname);\n\n/** @brief Sets the trackbar position.\n\nThe function sets the position of the specified trackbar in the specified window.\n\n@note\n\n[__Qt Backend Only__] winname can be empty (or NULL) if the trackbar is attached to the control\npanel.\n\n@param trackbarname Name of the trackbar.\n@param winname Name of the window that is the parent of trackbar.\n@param pos New position.\n */\nCV_EXPORTS_W void setTrackbarPos(const String& trackbarname, const String& winname, int pos);\n\n/** @brief Sets the trackbar maximum position.\n\nThe function sets the maximum position of the specified trackbar in the specified window.\n\n@note\n\n[__Qt Backend Only__] winname can be empty (or NULL) if the trackbar is attached to the control\npanel.\n\n@param trackbarname Name of the trackbar.\n@param winname Name of the window that is the parent of trackbar.\n@param maxval New maximum position.\n */\nCV_EXPORTS_W void setTrackbarMax(const String& trackbarname, const String& winname, int maxval);\n\n/** @brief Sets the trackbar minimum position.\n\nThe function sets the minimum position of the specified trackbar in the specified window.\n\n@note\n\n[__Qt Backend Only__] winname can be empty (or NULL) if the trackbar is attached to the control\npanel.\n\n@param trackbarname Name of the trackbar.\n@param winname Name of the window that is the parent of trackbar.\n@param minval New maximum position.\n */\nCV_EXPORTS_W void setTrackbarMin(const String& trackbarname, const String& winname, int minval);\n\n//! @addtogroup highgui_opengl OpenGL support\n//! @{\n\n/** @brief Displays OpenGL 2D texture in the specified window.\n\n@param winname Name of the window.\n@param tex OpenGL 2D texture data.\n */\nCV_EXPORTS void imshow(const String& winname, const ogl::Texture2D& tex);\n\n/** @brief Sets a callback function to be called to draw on top of displayed image.\n\nThe function setOpenGlDrawCallback can be used to draw 3D data on the window. See the example of\ncallback function below:\n@code\n    void on_opengl(void* param)\n    {\n        glLoadIdentity();\n\n        glTranslated(0.0, 0.0, -1.0);\n\n        glRotatef( 55, 1, 0, 0 );\n        glRotatef( 45, 0, 1, 0 );\n        glRotatef( 0, 0, 0, 1 );\n\n        static const int coords[6][4][3] = {\n            { { +1, -1, -1 }, { -1, -1, -1 }, { -1, +1, -1 }, { +1, +1, -1 } },\n            { { +1, +1, -1 }, { -1, +1, -1 }, { -1, +1, +1 }, { +1, +1, +1 } },\n            { { +1, -1, +1 }, { +1, -1, -1 }, { +1, +1, -1 }, { +1, +1, +1 } },\n            { { -1, -1, -1 }, { -1, -1, +1 }, { -1, +1, +1 }, { -1, +1, -1 } },\n            { { +1, -1, +1 }, { -1, -1, +1 }, { -1, -1, -1 }, { +1, -1, -1 } },\n            { { -1, -1, +1 }, { +1, -1, +1 }, { +1, +1, +1 }, { -1, +1, +1 } }\n        };\n\n        for (int i = 0; i < 6; ++i) {\n                    glColor3ub( i*20, 100+i*10, i*42 );\n                    glBegin(GL_QUADS);\n                    for (int j = 0; j < 4; ++j) {\n                            glVertex3d(0.2 * coords[i][j][0], 0.2 * coords[i][j][1], 0.2 * coords[i][j][2]);\n                    }\n                    glEnd();\n        }\n    }\n@endcode\n\n@param winname Name of the window.\n@param onOpenGlDraw Pointer to the function to be called every frame. This function should be\nprototyped as void Foo(void\\*) .\n@param userdata Pointer passed to the callback function.(__Optional__)\n */\nCV_EXPORTS void setOpenGlDrawCallback(const String& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0);\n\n/** @brief Sets the specified window as current OpenGL context.\n\n@param winname Name of the window.\n */\nCV_EXPORTS void setOpenGlContext(const String& winname);\n\n/** @brief Force window to redraw its context and call draw callback ( See cv::setOpenGlDrawCallback ).\n\n@param winname Name of the window.\n */\nCV_EXPORTS void updateWindow(const String& winname);\n\n//! @} highgui_opengl\n\n//! @addtogroup highgui_qt\n//! @{\n\n/** @brief QtFont available only for Qt. See cv::fontQt\n */\nstruct QtFont\n{\n    const char* nameFont;  //!< Name of the font\n    Scalar      color;     //!< Color of the font. Scalar(blue_component, green_component, red_component[, alpha_component])\n    int         font_face; //!< See cv::QtFontStyles\n    const int*  ascii;     //!< font data and metrics\n    const int*  greek;\n    const int*  cyrillic;\n    float       hscale, vscale;\n    float       shear;     //!< slope coefficient: 0 - normal, >0 - italic\n    int         thickness; //!< See cv::QtFontWeights\n    float       dx;        //!< horizontal interval between letters\n    int         line_type; //!< PointSize\n};\n\n/** @brief Creates the font to draw a text on an image.\n\nThe function fontQt creates a cv::QtFont object. This cv::QtFont is not compatible with putText .\n\nA basic usage of this function is the following: :\n@code\n    QtFont font = fontQt(\"Times\");\n    addText( img1, \"Hello World !\", Point(50,50), font);\n@endcode\n\n@param nameFont Name of the font. The name should match the name of a system font (such as\n*Times*). If the font is not found, a default one is used.\n@param pointSize Size of the font. If not specified, equal zero or negative, the point size of the\nfont is set to a system-dependent default value. Generally, this is 12 points.\n@param color Color of the font in BGRA where A = 255 is fully transparent. Use the macro CV_RGB\nfor simplicity.\n@param weight Font weight. Available operation flags are : cv::QtFontWeights You can also specify a positive integer for better control.\n@param style Font style. Available operation flags are : cv::QtFontStyles\n@param spacing Spacing between characters. It can be negative or positive.\n */\nCV_EXPORTS QtFont fontQt(const String& nameFont, int pointSize = -1,\n                         Scalar color = Scalar::all(0), int weight = QT_FONT_NORMAL,\n                         int style = QT_STYLE_NORMAL, int spacing = 0);\n\n/** @brief Draws a text on the image.\n\nThe function addText draws *text* on the image *img* using a specific font *font* (see example cv::fontQt\n)\n\n@param img 8-bit 3-channel image where the text should be drawn.\n@param text Text to write on an image.\n@param org Point(x,y) where the text should start on an image.\n@param font Font to use to draw a text.\n */\nCV_EXPORTS void addText( const Mat& img, const String& text, Point org, const QtFont& font);\n\n/** @brief Displays a text on a window image as an overlay for a specified duration.\n\nThe function displayOverlay displays useful information/tips on top of the window for a certain\namount of time *delayms*. The function does not modify the image, displayed in the window, that is,\nafter the specified delay the original content of the window is restored.\n\n@param winname Name of the window.\n@param text Overlay text to write on a window image.\n@param delayms The period (in milliseconds), during which the overlay text is displayed. If this\nfunction is called before the previous overlay text timed out, the timer is restarted and the text\nis updated. If this value is zero, the text never disappears.\n */\nCV_EXPORTS void displayOverlay(const String& winname, const String& text, int delayms = 0);\n\n/** @brief Displays a text on the window statusbar during the specified period of time.\n\nThe function displayStatusBar displays useful information/tips on top of the window for a certain\namount of time *delayms* . This information is displayed on the window statusbar (the window must be\ncreated with the CV_GUI_EXPANDED flags).\n\n@param winname Name of the window.\n@param text Text to write on the window statusbar.\n@param delayms Duration (in milliseconds) to display the text. If this function is called before\nthe previous text timed out, the timer is restarted and the text is updated. If this value is\nzero, the text never disappears.\n */\nCV_EXPORTS void displayStatusBar(const String& winname, const String& text, int delayms = 0);\n\n/** @brief Saves parameters of the specified window.\n\nThe function saveWindowParameters saves size, location, flags, trackbars value, zoom and panning\nlocation of the window windowName.\n\n@param windowName Name of the window.\n */\nCV_EXPORTS void saveWindowParameters(const String& windowName);\n\n/** @brief Loads parameters of the specified window.\n\nThe function loadWindowParameters loads size, location, flags, trackbars value, zoom and panning\nlocation of the window windowName.\n\n@param windowName Name of the window.\n */\nCV_EXPORTS void loadWindowParameters(const String& windowName);\n\nCV_EXPORTS  int startLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]);\n\nCV_EXPORTS  void stopLoop();\n\n/** @brief Attaches a button to the control panel.\n\nThe function createButton attaches a button to the control panel. Each button is added to a\nbuttonbar to the right of the last button. A new buttonbar is created if nothing was attached to the\ncontrol panel before, or if the last element attached to the control panel was a trackbar.\n\nSee below various examples of the cv::createButton function call: :\n@code\n    createButton(NULL,callbackButton);//create a push button \"button 0\", that will call callbackButton.\n    createButton(\"button2\",callbackButton,NULL,QT_CHECKBOX,0);\n    createButton(\"button3\",callbackButton,&value);\n    createButton(\"button5\",callbackButton1,NULL,QT_RADIOBOX);\n    createButton(\"button6\",callbackButton2,NULL,QT_PUSH_BUTTON,1);\n@endcode\n\n@param  bar_name Name of the button.\n@param on_change Pointer to the function to be called every time the button changes its state.\nThis function should be prototyped as void Foo(int state,\\*void); . *state* is the current state\nof the button. It could be -1 for a push button, 0 or 1 for a check/radio box button.\n@param userdata Pointer passed to the callback function.\n@param type Optional type of the button. Available types are: (cv::QtButtonTypes)\n@param initial_button_state Default state of the button. Use for checkbox and radiobox. Its\nvalue could be 0 or 1. (__Optional__)\n*/\nCV_EXPORTS int createButton( const String& bar_name, ButtonCallback on_change,\n                             void* userdata = 0, int type = QT_PUSH_BUTTON,\n                             bool initial_button_state = false);\n\n//! @} highgui_qt\n\n//! @} highgui\n\n} // cv\n\n#ifndef DISABLE_OPENCV_24_COMPATIBILITY\n#include \"opencv2/highgui/highgui_c.h\"\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/imgcodecs/imgcodecs.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/imgcodecs.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/imgcodecs/imgcodecs_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGCODECS_H__\n#define __OPENCV_IMGCODECS_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/** @addtogroup imgcodecs_c\n  @{\n  */\n\nenum\n{\n/* 8bit, color or not */\n    CV_LOAD_IMAGE_UNCHANGED  =-1,\n/* 8bit, gray */\n    CV_LOAD_IMAGE_GRAYSCALE  =0,\n/* ?, color */\n    CV_LOAD_IMAGE_COLOR      =1,\n/* any depth, ? */\n    CV_LOAD_IMAGE_ANYDEPTH   =2,\n/* ?, any color */\n    CV_LOAD_IMAGE_ANYCOLOR   =4\n};\n\n/* load image from file\n  iscolor can be a combination of above flags where CV_LOAD_IMAGE_UNCHANGED\n  overrides the other flags\n  using CV_LOAD_IMAGE_ANYCOLOR alone is equivalent to CV_LOAD_IMAGE_UNCHANGED\n  unless CV_LOAD_IMAGE_ANYDEPTH is specified images are converted to 8bit\n*/\nCVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\nCVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\n\nenum\n{\n    CV_IMWRITE_JPEG_QUALITY =1,\n    CV_IMWRITE_JPEG_PROGRESSIVE =2,\n    CV_IMWRITE_JPEG_OPTIMIZE =3,\n    CV_IMWRITE_JPEG_RST_INTERVAL =4,\n    CV_IMWRITE_JPEG_LUMA_QUALITY =5,\n    CV_IMWRITE_JPEG_CHROMA_QUALITY =6,\n    CV_IMWRITE_PNG_COMPRESSION =16,\n    CV_IMWRITE_PNG_STRATEGY =17,\n    CV_IMWRITE_PNG_BILEVEL =18,\n    CV_IMWRITE_PNG_STRATEGY_DEFAULT =0,\n    CV_IMWRITE_PNG_STRATEGY_FILTERED =1,\n    CV_IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY =2,\n    CV_IMWRITE_PNG_STRATEGY_RLE =3,\n    CV_IMWRITE_PNG_STRATEGY_FIXED =4,\n    CV_IMWRITE_PXM_BINARY =32,\n    CV_IMWRITE_WEBP_QUALITY =64\n};\n\n/* save image to file */\nCVAPI(int) cvSaveImage( const char* filename, const CvArr* image,\n                        const int* params CV_DEFAULT(0) );\n\n/* decode image stored in the buffer */\nCVAPI(IplImage*) cvDecodeImage( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\nCVAPI(CvMat*) cvDecodeImageM( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\n\n/* encode image and store the result as a byte vector (single-row 8uC1 matrix) */\nCVAPI(CvMat*) cvEncodeImage( const char* ext, const CvArr* image,\n                             const int* params CV_DEFAULT(0) );\n\nenum\n{\n    CV_CVTIMG_FLIP      =1,\n    CV_CVTIMG_SWAP_RB   =2\n};\n\n/* utility function: convert one image to another with optional vertical flip */\nCVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst, int flags CV_DEFAULT(0));\n\nCVAPI(int) cvHaveImageReader(const char* filename);\nCVAPI(int) cvHaveImageWriter(const char* filename);\n\n\n/****************************************************************************************\\\n*                              Obsolete functions/synonyms                               *\n\\****************************************************************************************/\n\n#define cvvLoadImage(name) cvLoadImage((name),1)\n#define cvvSaveImage cvSaveImage\n#define cvvConvertImage cvConvertImage\n\n/** @} imgcodecs_c */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // __OPENCV_IMGCODECS_H__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/imgcodecs/ios.h",
    "content": "\n/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#import <UIKit/UIKit.h>\n#import <Accelerate/Accelerate.h>\n#import <AVFoundation/AVFoundation.h>\n#import <ImageIO/ImageIO.h>\n#include \"opencv2/core/core.hpp\"\n\n//! @addtogroup imgcodecs_ios\n//! @{\n\nUIImage* MatToUIImage(const cv::Mat& image);\nvoid UIImageToMat(const UIImage* image,\n                         cv::Mat& m, bool alphaExist = false);\n\n//! @}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/imgcodecs.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGCODECS_HPP__\n#define __OPENCV_IMGCODECS_HPP__\n\n#include \"opencv2/core.hpp\"\n\n/**\n  @defgroup imgcodecs Image file reading and writing\n  @{\n    @defgroup imgcodecs_c C API\n    @defgroup imgcodecs_ios iOS glue\n  @}\n*/\n\n//////////////////////////////// image codec ////////////////////////////////\nnamespace cv\n{\n\n//! @addtogroup imgcodecs\n//! @{\n\n//! Imread flags\nenum ImreadModes {\n       IMREAD_UNCHANGED            = -1, //!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).\n       IMREAD_GRAYSCALE            = 0,  //!< If set, always convert image to the single channel grayscale image.\n       IMREAD_COLOR                = 1,  //!< If set, always convert image to the 3 channel BGR color image.\n       IMREAD_ANYDEPTH             = 2,  //!< If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.\n       IMREAD_ANYCOLOR             = 4,  //!< If set, the image is read in any possible color format.\n       IMREAD_LOAD_GDAL            = 8,  //!< If set, use the gdal driver for loading the image.\n       IMREAD_REDUCED_GRAYSCALE_2  = 16, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/2.\n       IMREAD_REDUCED_COLOR_2      = 17, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/2.\n       IMREAD_REDUCED_GRAYSCALE_4  = 32, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/4.\n       IMREAD_REDUCED_COLOR_4      = 33, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/4.\n       IMREAD_REDUCED_GRAYSCALE_8  = 64, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/8.\n       IMREAD_REDUCED_COLOR_8      = 65  //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/8.\n     };\n\n//! Imwrite flags\nenum ImwriteFlags {\n       IMWRITE_JPEG_QUALITY        = 1,  //!< For JPEG, it can be a quality from 0 to 100 (the higher is the better). Default value is 95.\n       IMWRITE_JPEG_PROGRESSIVE    = 2,  //!< Enable JPEG features, 0 or 1, default is False.\n       IMWRITE_JPEG_OPTIMIZE       = 3,  //!< Enable JPEG features, 0 or 1, default is False.\n       IMWRITE_JPEG_RST_INTERVAL   = 4,  //!< JPEG restart interval, 0 - 65535, default is 0 - no restart.\n       IMWRITE_JPEG_LUMA_QUALITY   = 5,  //!< Separate luma quality level, 0 - 100, default is 0 - don't use.\n       IMWRITE_JPEG_CHROMA_QUALITY = 6,  //!< Separate chroma quality level, 0 - 100, default is 0 - don't use.\n       IMWRITE_PNG_COMPRESSION     = 16, //!< For PNG, it can be the compression level from 0 to 9. A higher value means a smaller size and longer compression time. Default value is 3.\n       IMWRITE_PNG_STRATEGY        = 17, //!< One of cv::ImwritePNGFlags, default is IMWRITE_PNG_STRATEGY_DEFAULT.\n       IMWRITE_PNG_BILEVEL         = 18, //!< Binary level PNG, 0 or 1, default is 0.\n       IMWRITE_PXM_BINARY          = 32, //!< For PPM, PGM, or PBM, it can be a binary format flag, 0 or 1. Default value is 1.\n       IMWRITE_WEBP_QUALITY        = 64  //!< For WEBP, it can be a quality from 1 to 100 (the higher is the better). By default (without any parameter) and for quality above 100 the lossless compression is used.\n     };\n\n//! Imwrite PNG specific flags used to tune the compression algorithm.\n/** These flags will be modify the way of PNG image compression and will be passed to the underlying zlib processing stage.\n\n-   The effect of IMWRITE_PNG_STRATEGY_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between IMWRITE_PNG_STRATEGY_DEFAULT and IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY.\n-   IMWRITE_PNG_STRATEGY_RLE is designed to be almost as fast as IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY, but give better compression for PNG image data.\n-   The strategy parameter only affects the compression ratio but not the correctness of the compressed output even if it is not set appropriately.\n-   IMWRITE_PNG_STRATEGY_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler decoder for special applications.\n*/\nenum ImwritePNGFlags {\n       IMWRITE_PNG_STRATEGY_DEFAULT      = 0, //!< Use this value for normal data.\n       IMWRITE_PNG_STRATEGY_FILTERED     = 1, //!< Use this value for data produced by a filter (or predictor).Filtered data consists mostly of small values with a somewhat random distribution. In this case, the compression algorithm is tuned to compress them better.\n       IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY = 2, //!< Use this value to force Huffman encoding only (no string match).\n       IMWRITE_PNG_STRATEGY_RLE          = 3, //!< Use this value to limit match distances to one (run-length encoding).\n       IMWRITE_PNG_STRATEGY_FIXED        = 4  //!< Using this value prevents the use of dynamic Huffman codes, allowing for a simpler decoder for special applications.\n     };\n\n/** @brief Loads an image from a file.\n\n@anchor imread\n\nThe function imread loads an image from the specified file and returns it. If the image cannot be\nread (because of missing file, improper permissions, unsupported or invalid format), the function\nreturns an empty matrix ( Mat::data==NULL ).\n\nCurrently, the following file formats are supported:\n\n-   Windows bitmaps - \\*.bmp, \\*.dib (always supported)\n-   JPEG files - \\*.jpeg, \\*.jpg, \\*.jpe (see the *Notes* section)\n-   JPEG 2000 files - \\*.jp2 (see the *Notes* section)\n-   Portable Network Graphics - \\*.png (see the *Notes* section)\n-   WebP - \\*.webp (see the *Notes* section)\n-   Portable image format - \\*.pbm, \\*.pgm, \\*.ppm \\*.pxm, \\*.pnm (always supported)\n-   Sun rasters - \\*.sr, \\*.ras (always supported)\n-   TIFF files - \\*.tiff, \\*.tif (see the *Notes* section)\n-   OpenEXR Image files - \\*.exr (see the *Notes* section)\n-   Radiance HDR - \\*.hdr, \\*.pic (always supported)\n-   Raster and Vector geospatial data supported by Gdal (see the *Notes* section)\n\n@note\n\n-   The function determines the type of an image by the content, not by the file extension.\n-   In the case of color images, the decoded images will have the channels stored in **B G R** order.\n-   On Microsoft Windows\\* OS and MacOSX\\*, the codecs shipped with an OpenCV image (libjpeg,\n    libpng, libtiff, and libjasper) are used by default. So, OpenCV can always read JPEGs, PNGs,\n    and TIFFs. On MacOSX, there is also an option to use native MacOSX image readers. But beware\n    that currently these native image loaders give images with different pixel values because of\n    the color management embedded into MacOSX.\n-   On Linux\\*, BSD flavors and other Unix-like open-source operating systems, OpenCV looks for\n    codecs supplied with an OS image. Install the relevant packages (do not forget the development\n    files, for example, \"libjpeg-dev\", in Debian\\* and Ubuntu\\*) to get the codec support or turn\n    on the OPENCV_BUILD_3RDPARTY_LIBS flag in CMake.\n-   In the case you set *WITH_GDAL* flag to true in CMake and @ref IMREAD_LOAD_GDAL to load the image,\n    then [GDAL](http://www.gdal.org) driver will be used in order to decode the image by supporting\n    the following formats: [Raster](http://www.gdal.org/formats_list.html),\n    [Vector](http://www.gdal.org/ogr_formats.html).\n@param filename Name of file to be loaded.\n@param flags Flag that can take values of cv::ImreadModes\n*/\nCV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );\n\n/** @brief Loads a multi-page image from a file.\n\nThe function imreadmulti loads a multi-page image from the specified file into a vector of Mat objects.\n@param filename Name of file to be loaded.\n@param flags Flag that can take values of cv::ImreadModes, default with cv::IMREAD_ANYCOLOR.\n@param mats A vector of Mat objects holding each page, if more than one.\n@sa cv::imread\n*/\nCV_EXPORTS_W bool imreadmulti(const String& filename, std::vector<Mat>& mats, int flags = IMREAD_ANYCOLOR);\n\n/** @brief Saves an image to a specified file.\n\nThe function imwrite saves the image to the specified file. The image format is chosen based on the\nfilename extension (see cv::imread for the list of extensions). Only 8-bit (or 16-bit unsigned (CV_16U)\nin case of PNG, JPEG 2000, and TIFF) single-channel or 3-channel (with 'BGR' channel order) images\ncan be saved using this function. If the format, depth or channel order is different, use\nMat::convertTo , and cv::cvtColor to convert it before saving. Or, use the universal FileStorage I/O\nfunctions to save the image to XML or YAML format.\n\nIt is possible to store PNG images with an alpha channel using this function. To do this, create\n8-bit (or 16-bit) 4-channel image BGRA, where the alpha channel goes last. Fully transparent pixels\nshould have alpha set to 0, fully opaque pixels should have alpha set to 255/65535.\n\nThe sample below shows how to create such a BGRA image and store to PNG file. It also demonstrates how to set custom\ncompression parameters :\n@code\n    #include <opencv2/opencv.hpp>\n\n    using namespace cv;\n    using namespace std;\n\n    void createAlphaMat(Mat &mat)\n    {\n        CV_Assert(mat.channels() == 4);\n        for (int i = 0; i < mat.rows; ++i) {\n            for (int j = 0; j < mat.cols; ++j) {\n                Vec4b& bgra = mat.at<Vec4b>(i, j);\n                bgra[0] = UCHAR_MAX; // Blue\n                bgra[1] = saturate_cast<uchar>((float (mat.cols - j)) / ((float)mat.cols) * UCHAR_MAX); // Green\n                bgra[2] = saturate_cast<uchar>((float (mat.rows - i)) / ((float)mat.rows) * UCHAR_MAX); // Red\n                bgra[3] = saturate_cast<uchar>(0.5 * (bgra[1] + bgra[2])); // Alpha\n            }\n        }\n    }\n\n    int main(int argv, char **argc)\n    {\n        // Create mat with alpha channel\n        Mat mat(480, 640, CV_8UC4);\n        createAlphaMat(mat);\n\n        vector<int> compression_params;\n        compression_params.push_back(IMWRITE_PNG_COMPRESSION);\n        compression_params.push_back(9);\n\n        try {\n            imwrite(\"alpha.png\", mat, compression_params);\n        }\n        catch (cv::Exception& ex) {\n            fprintf(stderr, \"Exception converting image to PNG format: %s\\n\", ex.what());\n            return 1;\n        }\n\n        fprintf(stdout, \"Saved PNG file with alpha data.\\n\");\n        return 0;\n    }\n@endcode\n@param filename Name of the file.\n@param img Image to be saved.\n@param params Format-specific parameters encoded as pairs (paramId_1, paramValue_1, paramId_2, paramValue_2, ... .) see cv::ImwriteFlags\n*/\nCV_EXPORTS_W bool imwrite( const String& filename, InputArray img,\n              const std::vector<int>& params = std::vector<int>());\n\n/** @brief Reads an image from a buffer in memory.\n\nThe function imdecode reads an image from the specified buffer in the memory. If the buffer is too short or\ncontains invalid data, the function returns an empty matrix ( Mat::data==NULL ).\n\nSee cv::imread for the list of supported formats and flags description.\n\n@note In the case of color images, the decoded images will have the channels stored in **B G R** order.\n@param buf Input array or vector of bytes.\n@param flags The same flags as in cv::imread, see cv::ImreadModes.\n*/\nCV_EXPORTS_W Mat imdecode( InputArray buf, int flags );\n\n/** @overload\n@param buf\n@param flags\n@param dst The optional output placeholder for the decoded matrix. It can save the image\nreallocations when the function is called repeatedly for images of the same size.\n*/\nCV_EXPORTS Mat imdecode( InputArray buf, int flags, Mat* dst);\n\n/** @brief Encodes an image into a memory buffer.\n\nThe function imencode compresses the image and stores it in the memory buffer that is resized to fit the\nresult. See cv::imwrite for the list of supported formats and flags description.\n\n@param ext File extension that defines the output format.\n@param img Image to be written.\n@param buf Output buffer resized to fit the compressed image.\n@param params Format-specific parameters. See cv::imwrite and cv::ImwriteFlags.\n*/\nCV_EXPORTS_W bool imencode( const String& ext, InputArray img,\n                            CV_OUT std::vector<uchar>& buf,\n                            const std::vector<int>& params = std::vector<int>());\n\n//! @} imgcodecs\n\n} // cv\n\n#endif //__OPENCV_IMGCODECS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/imgproc/detail/distortion_model.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_DETAIL_DISTORTION_MODEL_HPP__\n#define __OPENCV_IMGPROC_DETAIL_DISTORTION_MODEL_HPP__\n\n//! @cond IGNORED\n\nnamespace cv { namespace detail {\n/**\nComputes the matrix for the projection onto a tilted image sensor\n\\param tauX angular parameter rotation around x-axis\n\\param tauY angular parameter rotation around y-axis\n\\param matTilt if not NULL returns the matrix\n\\f[\n\\vecthreethree{R_{33}(\\tau_x, \\tau_y)}{0}{-R_{13}((\\tau_x, \\tau_y)}\n{0}{R_{33}(\\tau_x, \\tau_y)}{-R_{23}(\\tau_x, \\tau_y)}\n{0}{0}{1} R(\\tau_x, \\tau_y)\n\\f]\nwhere\n\\f[\nR(\\tau_x, \\tau_y) =\n\\vecthreethree{\\cos(\\tau_y)}{0}{-\\sin(\\tau_y)}{0}{1}{0}{\\sin(\\tau_y)}{0}{\\cos(\\tau_y)}\n\\vecthreethree{1}{0}{0}{0}{\\cos(\\tau_x)}{\\sin(\\tau_x)}{0}{-\\sin(\\tau_x)}{\\cos(\\tau_x)} =\n\\vecthreethree{\\cos(\\tau_y)}{\\sin(\\tau_y)\\sin(\\tau_x)}{-\\sin(\\tau_y)\\cos(\\tau_x)}\n{0}{\\cos(\\tau_x)}{\\sin(\\tau_x)}\n{\\sin(\\tau_y)}{-\\cos(\\tau_y)\\sin(\\tau_x)}{\\cos(\\tau_y)\\cos(\\tau_x)}.\n\\f]\n\\param dMatTiltdTauX if not NULL it returns the derivative of matTilt with\nrespect to \\f$\\tau_x\\f$.\n\\param dMatTiltdTauY if not NULL it returns the derivative of matTilt with\nrespect to \\f$\\tau_y\\f$.\n\\param invMatTilt if not NULL it returns the inverse of matTilt\n**/\ntemplate <typename FLOAT>\nvoid computeTiltProjectionMatrix(FLOAT tauX,\n    FLOAT tauY,\n    Matx<FLOAT, 3, 3>* matTilt = 0,\n    Matx<FLOAT, 3, 3>* dMatTiltdTauX = 0,\n    Matx<FLOAT, 3, 3>* dMatTiltdTauY = 0,\n    Matx<FLOAT, 3, 3>* invMatTilt = 0)\n{\n    FLOAT cTauX = cos(tauX);\n    FLOAT sTauX = sin(tauX);\n    FLOAT cTauY = cos(tauY);\n    FLOAT sTauY = sin(tauY);\n    Matx<FLOAT, 3, 3> matRotX = Matx<FLOAT, 3, 3>(1,0,0,0,cTauX,sTauX,0,-sTauX,cTauX);\n    Matx<FLOAT, 3, 3> matRotY = Matx<FLOAT, 3, 3>(cTauY,0,-sTauY,0,1,0,sTauY,0,cTauY);\n    Matx<FLOAT, 3, 3> matRotXY = matRotY * matRotX;\n    Matx<FLOAT, 3, 3> matProjZ = Matx<FLOAT, 3, 3>(matRotXY(2,2),0,-matRotXY(0,2),0,matRotXY(2,2),-matRotXY(1,2),0,0,1);\n    if (matTilt)\n    {\n        // Matrix for trapezoidal distortion of tilted image sensor\n        *matTilt = matProjZ * matRotXY;\n    }\n    if (dMatTiltdTauX)\n    {\n        // Derivative with respect to tauX\n        Matx<FLOAT, 3, 3> dMatRotXYdTauX = matRotY * Matx<FLOAT, 3, 3>(0,0,0,0,-sTauX,cTauX,0,-cTauX,-sTauX);\n        Matx<FLOAT, 3, 3> dMatProjZdTauX = Matx<FLOAT, 3, 3>(dMatRotXYdTauX(2,2),0,-dMatRotXYdTauX(0,2),\n          0,dMatRotXYdTauX(2,2),-dMatRotXYdTauX(1,2),0,0,0);\n        *dMatTiltdTauX = (matProjZ * dMatRotXYdTauX) + (dMatProjZdTauX * matRotXY);\n    }\n    if (dMatTiltdTauY)\n    {\n        // Derivative with respect to tauY\n        Matx<FLOAT, 3, 3> dMatRotXYdTauY = Matx<FLOAT, 3, 3>(-sTauY,0,-cTauY,0,0,0,cTauY,0,-sTauY) * matRotX;\n        Matx<FLOAT, 3, 3> dMatProjZdTauY = Matx<FLOAT, 3, 3>(dMatRotXYdTauY(2,2),0,-dMatRotXYdTauY(0,2),\n          0,dMatRotXYdTauY(2,2),-dMatRotXYdTauY(1,2),0,0,0);\n        *dMatTiltdTauY = (matProjZ * dMatRotXYdTauY) + (dMatProjZdTauY * matRotXY);\n    }\n    if (invMatTilt)\n    {\n        FLOAT inv = 1./matRotXY(2,2);\n        Matx<FLOAT, 3, 3> invMatProjZ = Matx<FLOAT, 3, 3>(inv,0,inv*matRotXY(0,2),0,inv,inv*matRotXY(1,2),0,0,1);\n        *invMatTilt = matRotXY.t()*invMatProjZ;\n    }\n}\n}} // namespace detail, cv\n\n\n//! @endcond\n\n#endif // __OPENCV_IMGPROC_DETAIL_DISTORTION_MODEL_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/imgproc/imgproc.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/imgproc.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/imgproc/imgproc_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_IMGPROC_C_H__\n#define __OPENCV_IMGPROC_IMGPROC_C_H__\n\n#include \"opencv2/imgproc/types_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @addtogroup imgproc_c\n@{\n*/\n\n/*********************** Background statistics accumulation *****************************/\n\n/** @brief Adds image to accumulator\n@see cv::accumulate\n*/\nCVAPI(void)  cvAcc( const CvArr* image, CvArr* sum,\n                   const CvArr* mask CV_DEFAULT(NULL) );\n\n/** @brief Adds squared image to accumulator\n@see cv::accumulateSquare\n*/\nCVAPI(void)  cvSquareAcc( const CvArr* image, CvArr* sqsum,\n                         const CvArr* mask CV_DEFAULT(NULL) );\n\n/** @brief Adds a product of two images to accumulator\n@see cv::accumulateProduct\n*/\nCVAPI(void)  cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc,\n                           const CvArr* mask CV_DEFAULT(NULL) );\n\n/** @brief Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha\n@see cv::accumulateWeighted\n*/\nCVAPI(void)  cvRunningAvg( const CvArr* image, CvArr* acc, double alpha,\n                          const CvArr* mask CV_DEFAULT(NULL) );\n\n/****************************************************************************************\\\n*                                    Image Processing                                    *\n\\****************************************************************************************/\n\n/** Copies source 2D array inside of the larger destination array and\n   makes a border of the specified type (IPL_BORDER_*) around the copied area. */\nCVAPI(void) cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset,\n                              int bordertype, CvScalar value CV_DEFAULT(cvScalarAll(0)));\n\n/** @brief Smooths the image in one of several ways.\n\n@param src The source image\n@param dst The destination image\n@param smoothtype Type of the smoothing, see SmoothMethod_c\n@param size1 The first parameter of the smoothing operation, the aperture width. Must be a\npositive odd number (1, 3, 5, ...)\n@param size2 The second parameter of the smoothing operation, the aperture height. Ignored by\nCV_MEDIAN and CV_BILATERAL methods. In the case of simple scaled/non-scaled and Gaussian blur if\nsize2 is zero, it is set to size1. Otherwise it must be a positive odd number.\n@param sigma1 In the case of a Gaussian parameter this parameter may specify Gaussian \\f$\\sigma\\f$\n(standard deviation). If it is zero, it is calculated from the kernel size:\n\\f[\\sigma  = 0.3 (n/2 - 1) + 0.8  \\quad   \\text{where}   \\quad  n= \\begin{array}{l l} \\mbox{\\texttt{size1} for horizontal kernel} \\\\ \\mbox{\\texttt{size2} for vertical kernel} \\end{array}\\f]\nUsing standard sigma for small kernels ( \\f$3\\times 3\\f$ to \\f$7\\times 7\\f$ ) gives better speed. If\nsigma1 is not zero, while size1 and size2 are zeros, the kernel size is calculated from the\nsigma (to provide accurate enough operation).\n@param sigma2 additional parameter for bilateral filtering\n\n@see cv::GaussianBlur, cv::blur, cv::medianBlur, cv::bilateralFilter.\n */\nCVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,\n                      int smoothtype CV_DEFAULT(CV_GAUSSIAN),\n                      int size1 CV_DEFAULT(3),\n                      int size2 CV_DEFAULT(0),\n                      double sigma1 CV_DEFAULT(0),\n                      double sigma2 CV_DEFAULT(0));\n\n/** @brief Convolves an image with the kernel.\n\n@param src input image.\n@param dst output image of the same size and the same number of channels as src.\n@param kernel convolution kernel (or rather a correlation kernel), a single-channel floating point\nmatrix; if you want to apply different kernels to different channels, split the image into\nseparate color planes using split and process them individually.\n@param anchor anchor of the kernel that indicates the relative position of a filtered point within\nthe kernel; the anchor should lie within the kernel; default value (-1,-1) means that the anchor\nis at the kernel center.\n\n@see cv::filter2D\n */\nCVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel,\n                        CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)));\n\n/** @brief Finds integral image: SUM(X,Y) = sum(x<X,y<Y)I(x,y)\n@see cv::integral\n*/\nCVAPI(void) cvIntegral( const CvArr* image, CvArr* sum,\n                       CvArr* sqsum CV_DEFAULT(NULL),\n                       CvArr* tilted_sum CV_DEFAULT(NULL));\n\n/** @brief Smoothes the input image with gaussian kernel and then down-samples it.\n\n   dst_width = floor(src_width/2)[+1],\n   dst_height = floor(src_height/2)[+1]\n   @see cv::pyrDown\n*/\nCVAPI(void)  cvPyrDown( const CvArr* src, CvArr* dst,\n                        int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );\n\n/** @brief Up-samples image and smoothes the result with gaussian kernel.\n\n   dst_width = src_width*2,\n   dst_height = src_height*2\n   @see cv::pyrUp\n*/\nCVAPI(void)  cvPyrUp( const CvArr* src, CvArr* dst,\n                      int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );\n\n/** @brief Builds pyramid for an image\n@see buildPyramid\n*/\nCVAPI(CvMat**) cvCreatePyramid( const CvArr* img, int extra_layers, double rate,\n                                const CvSize* layer_sizes CV_DEFAULT(0),\n                                CvArr* bufarr CV_DEFAULT(0),\n                                int calc CV_DEFAULT(1),\n                                int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );\n\n/** @brief Releases pyramid */\nCVAPI(void)  cvReleasePyramid( CvMat*** pyramid, int extra_layers );\n\n\n/** @brief Filters image using meanshift algorithm\n@see cv::pyrMeanShiftFiltering\n*/\nCVAPI(void) cvPyrMeanShiftFiltering( const CvArr* src, CvArr* dst,\n    double sp, double sr, int max_level CV_DEFAULT(1),\n    CvTermCriteria termcrit CV_DEFAULT(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,5,1)));\n\n/** @brief Segments image using seed \"markers\"\n@see cv::watershed\n*/\nCVAPI(void) cvWatershed( const CvArr* image, CvArr* markers );\n\n/** @brief Calculates an image derivative using generalized Sobel\n\n   (aperture_size = 1,3,5,7) or Scharr (aperture_size = -1) operator.\n   Scharr can be used only for the first dx or dy derivative\n@see cv::Sobel\n*/\nCVAPI(void) cvSobel( const CvArr* src, CvArr* dst,\n                    int xorder, int yorder,\n                    int aperture_size CV_DEFAULT(3));\n\n/** @brief Calculates the image Laplacian: (d2/dx + d2/dy)I\n@see cv::Laplacian\n*/\nCVAPI(void) cvLaplace( const CvArr* src, CvArr* dst,\n                      int aperture_size CV_DEFAULT(3) );\n\n/** @brief Converts input array pixels from one color space to another\n@see cv::cvtColor\n*/\nCVAPI(void)  cvCvtColor( const CvArr* src, CvArr* dst, int code );\n\n\n/** @brief Resizes image (input array is resized to fit the destination array)\n@see cv::resize\n*/\nCVAPI(void)  cvResize( const CvArr* src, CvArr* dst,\n                       int interpolation CV_DEFAULT( CV_INTER_LINEAR ));\n\n/** @brief Warps image with affine transform\n@note ::cvGetQuadrangleSubPix is similar to ::cvWarpAffine, but the outliers are extrapolated using\nreplication border mode.\n@see cv::warpAffine\n*/\nCVAPI(void)  cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix,\n                           int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),\n                           CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );\n\n/** @brief Computes affine transform matrix for mapping src[i] to dst[i] (i=0,1,2)\n@see cv::getAffineTransform\n*/\nCVAPI(CvMat*) cvGetAffineTransform( const CvPoint2D32f * src,\n                                    const CvPoint2D32f * dst,\n                                    CvMat * map_matrix );\n\n/** @brief Computes rotation_matrix matrix\n@see cv::getRotationMatrix2D\n*/\nCVAPI(CvMat*)  cv2DRotationMatrix( CvPoint2D32f center, double angle,\n                                   double scale, CvMat* map_matrix );\n\n/** @brief Warps image with perspective (projective) transform\n@see cv::warpPerspective\n*/\nCVAPI(void)  cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix,\n                                int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),\n                                CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );\n\n/** @brief Computes perspective transform matrix for mapping src[i] to dst[i] (i=0,1,2,3)\n@see cv::getPerspectiveTransform\n*/\nCVAPI(CvMat*) cvGetPerspectiveTransform( const CvPoint2D32f* src,\n                                         const CvPoint2D32f* dst,\n                                         CvMat* map_matrix );\n\n/** @brief Performs generic geometric transformation using the specified coordinate maps\n@see cv::remap\n*/\nCVAPI(void)  cvRemap( const CvArr* src, CvArr* dst,\n                      const CvArr* mapx, const CvArr* mapy,\n                      int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),\n                      CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );\n\n/** @brief Converts mapx & mapy from floating-point to integer formats for cvRemap\n@see cv::convertMaps\n*/\nCVAPI(void)  cvConvertMaps( const CvArr* mapx, const CvArr* mapy,\n                            CvArr* mapxy, CvArr* mapalpha );\n\n/** @brief Performs forward or inverse log-polar image transform\n@see cv::logPolar\n*/\nCVAPI(void)  cvLogPolar( const CvArr* src, CvArr* dst,\n                         CvPoint2D32f center, double M,\n                         int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));\n\n/** Performs forward or inverse linear-polar image transform\n@see cv::linearPolar\n*/\nCVAPI(void)  cvLinearPolar( const CvArr* src, CvArr* dst,\n                         CvPoint2D32f center, double maxRadius,\n                         int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));\n\n/** @brief Transforms the input image to compensate lens distortion\n@see cv::undistort\n*/\nCVAPI(void) cvUndistort2( const CvArr* src, CvArr* dst,\n                          const CvMat* camera_matrix,\n                          const CvMat* distortion_coeffs,\n                          const CvMat* new_camera_matrix CV_DEFAULT(0) );\n\n/** @brief Computes transformation map from intrinsic camera parameters\n   that can used by cvRemap\n*/\nCVAPI(void) cvInitUndistortMap( const CvMat* camera_matrix,\n                                const CvMat* distortion_coeffs,\n                                CvArr* mapx, CvArr* mapy );\n\n/** @brief Computes undistortion+rectification map for a head of stereo camera\n@see cv::initUndistortRectifyMap\n*/\nCVAPI(void) cvInitUndistortRectifyMap( const CvMat* camera_matrix,\n                                       const CvMat* dist_coeffs,\n                                       const CvMat *R, const CvMat* new_camera_matrix,\n                                       CvArr* mapx, CvArr* mapy );\n\n/** @brief Computes the original (undistorted) feature coordinates\n   from the observed (distorted) coordinates\n@see cv::undistortPoints\n*/\nCVAPI(void) cvUndistortPoints( const CvMat* src, CvMat* dst,\n                               const CvMat* camera_matrix,\n                               const CvMat* dist_coeffs,\n                               const CvMat* R CV_DEFAULT(0),\n                               const CvMat* P CV_DEFAULT(0));\n\n/** @brief Returns a structuring element of the specified size and shape for morphological operations.\n\n@note the created structuring element IplConvKernel\\* element must be released in the end using\n`cvReleaseStructuringElement(&element)`.\n\n@param cols Width of the structuring element\n@param rows Height of the structuring element\n@param anchor_x x-coordinate of the anchor\n@param anchor_y y-coordinate of the anchor\n@param shape element shape that could be one of the cv::MorphShapes_c\n@param values integer array of cols*rows elements that specifies the custom shape of the\nstructuring element, when shape=CV_SHAPE_CUSTOM.\n\n@see cv::getStructuringElement\n */\n CVAPI(IplConvKernel*)  cvCreateStructuringElementEx(\n            int cols, int  rows, int  anchor_x, int  anchor_y,\n            int shape, int* values CV_DEFAULT(NULL) );\n\n/** @brief releases structuring element\n@see cvCreateStructuringElementEx\n*/\nCVAPI(void)  cvReleaseStructuringElement( IplConvKernel** element );\n\n/** @brief erodes input image (applies minimum filter) one or more times.\n   If element pointer is NULL, 3x3 rectangular element is used\n@see cv::erode\n*/\nCVAPI(void)  cvErode( const CvArr* src, CvArr* dst,\n                      IplConvKernel* element CV_DEFAULT(NULL),\n                      int iterations CV_DEFAULT(1) );\n\n/** @brief dilates input image (applies maximum filter) one or more times.\n\n   If element pointer is NULL, 3x3 rectangular element is used\n@see cv::dilate\n*/\nCVAPI(void)  cvDilate( const CvArr* src, CvArr* dst,\n                       IplConvKernel* element CV_DEFAULT(NULL),\n                       int iterations CV_DEFAULT(1) );\n\n/** @brief Performs complex morphological transformation\n@see cv::morphologyEx\n*/\nCVAPI(void)  cvMorphologyEx( const CvArr* src, CvArr* dst,\n                             CvArr* temp, IplConvKernel* element,\n                             int operation, int iterations CV_DEFAULT(1) );\n\n/** @brief Calculates all spatial and central moments up to the 3rd order\n@see cv::moments\n*/\nCVAPI(void) cvMoments( const CvArr* arr, CvMoments* moments, int binary CV_DEFAULT(0));\n\n/** @brief Retrieve spatial moments */\nCVAPI(double)  cvGetSpatialMoment( CvMoments* moments, int x_order, int y_order );\n/** @brief Retrieve central moments */\nCVAPI(double)  cvGetCentralMoment( CvMoments* moments, int x_order, int y_order );\n/** @brief Retrieve normalized central moments */\nCVAPI(double)  cvGetNormalizedCentralMoment( CvMoments* moments,\n                                             int x_order, int y_order );\n\n/** @brief Calculates 7 Hu's invariants from precalculated spatial and central moments\n@see cv::HuMoments\n*/\nCVAPI(void) cvGetHuMoments( CvMoments*  moments, CvHuMoments*  hu_moments );\n\n/*********************************** data sampling **************************************/\n\n/** @brief Fetches pixels that belong to the specified line segment and stores them to the buffer.\n\n   Returns the number of retrieved points.\n@see cv::LineSegmentDetector\n*/\nCVAPI(int)  cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2, void* buffer,\n                          int connectivity CV_DEFAULT(8));\n\n/** @brief Retrieves the rectangular image region with specified center from the input array.\n\n dst(x,y) <- src(x + center.x - dst_width/2, y + center.y - dst_height/2).\n Values of pixels with fractional coordinates are retrieved using bilinear interpolation\n@see cv::getRectSubPix\n*/\nCVAPI(void)  cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center );\n\n\n/** @brief Retrieves quadrangle from the input array.\n\n    matrixarr = ( a11  a12 | b1 )   dst(x,y) <- src(A[x y]' + b)\n                ( a21  a22 | b2 )   (bilinear interpolation is used to retrieve pixels\n                                     with fractional coordinates)\n@see cvWarpAffine\n*/\nCVAPI(void)  cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst,\n                                    const CvMat* map_matrix );\n\n/** @brief Measures similarity between template and overlapped windows in the source image\n   and fills the resultant image with the measurements\n@see cv::matchTemplate\n*/\nCVAPI(void)  cvMatchTemplate( const CvArr* image, const CvArr* templ,\n                              CvArr* result, int method );\n\n/** @brief Computes earth mover distance between\n   two weighted point sets (called signatures)\n@see cv::EMD\n*/\nCVAPI(float)  cvCalcEMD2( const CvArr* signature1,\n                          const CvArr* signature2,\n                          int distance_type,\n                          CvDistanceFunction distance_func CV_DEFAULT(NULL),\n                          const CvArr* cost_matrix CV_DEFAULT(NULL),\n                          CvArr* flow CV_DEFAULT(NULL),\n                          float* lower_bound CV_DEFAULT(NULL),\n                          void* userdata CV_DEFAULT(NULL));\n\n/****************************************************************************************\\\n*                              Contours retrieving                                       *\n\\****************************************************************************************/\n\n/** @brief Retrieves outer and optionally inner boundaries of white (non-zero) connected\n   components in the black (zero) background\n@see cv::findContours, cvStartFindContours, cvFindNextContour, cvSubstituteContour, cvEndFindContours\n*/\nCVAPI(int)  cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,\n                            int header_size CV_DEFAULT(sizeof(CvContour)),\n                            int mode CV_DEFAULT(CV_RETR_LIST),\n                            int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),\n                            CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n/** @brief Initializes contour retrieving process.\n\n   Calls cvStartFindContours.\n   Calls cvFindNextContour until null pointer is returned\n   or some other condition becomes true.\n   Calls cvEndFindContours at the end.\n@see cvFindContours\n*/\nCVAPI(CvContourScanner)  cvStartFindContours( CvArr* image, CvMemStorage* storage,\n                            int header_size CV_DEFAULT(sizeof(CvContour)),\n                            int mode CV_DEFAULT(CV_RETR_LIST),\n                            int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),\n                            CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n/** @brief Retrieves next contour\n@see cvFindContours\n*/\nCVAPI(CvSeq*)  cvFindNextContour( CvContourScanner scanner );\n\n\n/** @brief Substitutes the last retrieved contour with the new one\n\n   (if the substitutor is null, the last retrieved contour is removed from the tree)\n@see cvFindContours\n*/\nCVAPI(void)   cvSubstituteContour( CvContourScanner scanner, CvSeq* new_contour );\n\n\n/** @brief Releases contour scanner and returns pointer to the first outer contour\n@see cvFindContours\n*/\nCVAPI(CvSeq*)  cvEndFindContours( CvContourScanner* scanner );\n\n/** @brief Approximates Freeman chain(s) with a polygonal curve.\n\nThis is a standalone contour approximation routine, not represented in the new interface. When\ncvFindContours retrieves contours as Freeman chains, it calls the function to get approximated\ncontours, represented as polygons.\n\n@param src_seq Pointer to the approximated Freeman chain that can refer to other chains.\n@param storage Storage location for the resulting polylines.\n@param method Approximation method (see the description of the function :ocvFindContours ).\n@param parameter Method parameter (not used now).\n@param minimal_perimeter Approximates only those contours whose perimeters are not less than\nminimal_perimeter . Other chains are removed from the resulting structure.\n@param recursive Recursion flag. If it is non-zero, the function approximates all chains that can\nbe obtained from chain by using the h_next or v_next links. Otherwise, the single input chain is\napproximated.\n@see cvStartReadChainPoints, cvReadChainPoint\n */\nCVAPI(CvSeq*) cvApproxChains( CvSeq* src_seq, CvMemStorage* storage,\n                            int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),\n                            double parameter CV_DEFAULT(0),\n                            int  minimal_perimeter CV_DEFAULT(0),\n                            int  recursive CV_DEFAULT(0));\n\n/** @brief Initializes Freeman chain reader.\n\n   The reader is used to iteratively get coordinates of all the chain points.\n   If the Freeman codes should be read as is, a simple sequence reader should be used\n@see cvApproxChains\n*/\nCVAPI(void) cvStartReadChainPoints( CvChain* chain, CvChainPtReader* reader );\n\n/** @brief Retrieves the next chain point\n@see cvApproxChains\n*/\nCVAPI(CvPoint) cvReadChainPoint( CvChainPtReader* reader );\n\n\n/****************************************************************************************\\\n*                            Contour Processing and Shape Analysis                       *\n\\****************************************************************************************/\n\n/** @brief Approximates a single polygonal curve (contour) or\n   a tree of polygonal curves (contours)\n@see cv::approxPolyDP\n*/\nCVAPI(CvSeq*)  cvApproxPoly( const void* src_seq,\n                             int header_size, CvMemStorage* storage,\n                             int method, double eps,\n                             int recursive CV_DEFAULT(0));\n\n/** @brief Calculates perimeter of a contour or length of a part of contour\n@see cv::arcLength\n*/\nCVAPI(double)  cvArcLength( const void* curve,\n                            CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),\n                            int is_closed CV_DEFAULT(-1));\n\n/** same as cvArcLength for closed contour\n*/\nCV_INLINE double cvContourPerimeter( const void* contour )\n{\n    return cvArcLength( contour, CV_WHOLE_SEQ, 1 );\n}\n\n\n/** @brief Calculates contour bounding rectangle (update=1) or\n   just retrieves pre-calculated rectangle (update=0)\n@see cv::boundingRect\n*/\nCVAPI(CvRect)  cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) );\n\n/** @brief Calculates area of a contour or contour segment\n@see cv::contourArea\n*/\nCVAPI(double)  cvContourArea( const CvArr* contour,\n                              CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),\n                              int oriented CV_DEFAULT(0));\n\n/** @brief Finds minimum area rotated rectangle bounding a set of points\n@see cv::minAreaRect\n*/\nCVAPI(CvBox2D)  cvMinAreaRect2( const CvArr* points,\n                                CvMemStorage* storage CV_DEFAULT(NULL));\n\n/** @brief Finds minimum enclosing circle for a set of points\n@see cv::minEnclosingCircle\n*/\nCVAPI(int)  cvMinEnclosingCircle( const CvArr* points,\n                                  CvPoint2D32f* center, float* radius );\n\n/** @brief Compares two contours by matching their moments\n@see cv::matchShapes\n*/\nCVAPI(double)  cvMatchShapes( const void* object1, const void* object2,\n                              int method, double parameter CV_DEFAULT(0));\n\n/** @brief Calculates exact convex hull of 2d point set\n@see cv::convexHull\n*/\nCVAPI(CvSeq*) cvConvexHull2( const CvArr* input,\n                             void* hull_storage CV_DEFAULT(NULL),\n                             int orientation CV_DEFAULT(CV_CLOCKWISE),\n                             int return_points CV_DEFAULT(0));\n\n/** @brief Checks whether the contour is convex or not (returns 1 if convex, 0 if not)\n@see cv::isContourConvex\n*/\nCVAPI(int)  cvCheckContourConvexity( const CvArr* contour );\n\n\n/** @brief Finds convexity defects for the contour\n@see cv::convexityDefects\n*/\nCVAPI(CvSeq*)  cvConvexityDefects( const CvArr* contour, const CvArr* convexhull,\n                                   CvMemStorage* storage CV_DEFAULT(NULL));\n\n/** @brief Fits ellipse into a set of 2d points\n@see cv::fitEllipse\n*/\nCVAPI(CvBox2D) cvFitEllipse2( const CvArr* points );\n\n/** @brief Finds minimum rectangle containing two given rectangles */\nCVAPI(CvRect)  cvMaxRect( const CvRect* rect1, const CvRect* rect2 );\n\n/** @brief Finds coordinates of the box vertices */\nCVAPI(void) cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] );\n\n/** @brief Initializes sequence header for a matrix (column or row vector) of points\n\n   a wrapper for cvMakeSeqHeaderForArray (it does not initialize bounding rectangle!!!) */\nCVAPI(CvSeq*) cvPointSeqFromMat( int seq_kind, const CvArr* mat,\n                                 CvContour* contour_header,\n                                 CvSeqBlock* block );\n\n/** @brief Checks whether the point is inside polygon, outside, on an edge (at a vertex).\n\n   Returns positive, negative or zero value, correspondingly.\n   Optionally, measures a signed distance between\n   the point and the nearest polygon edge (measure_dist=1)\n@see cv::pointPolygonTest\n*/\nCVAPI(double) cvPointPolygonTest( const CvArr* contour,\n                                  CvPoint2D32f pt, int measure_dist );\n\n/****************************************************************************************\\\n*                                  Histogram functions                                   *\n\\****************************************************************************************/\n\n/** @brief Creates a histogram.\n\nThe function creates a histogram of the specified size and returns a pointer to the created\nhistogram. If the array ranges is 0, the histogram bin ranges must be specified later via the\nfunction cvSetHistBinRanges. Though cvCalcHist and cvCalcBackProject may process 8-bit images\nwithout setting bin ranges, they assume they are equally spaced in 0 to 255 bins.\n\n@param dims Number of histogram dimensions.\n@param sizes Array of the histogram dimension sizes.\n@param type Histogram representation format. CV_HIST_ARRAY means that the histogram data is\nrepresented as a multi-dimensional dense array CvMatND. CV_HIST_SPARSE means that histogram data\nis represented as a multi-dimensional sparse array CvSparseMat.\n@param ranges Array of ranges for the histogram bins. Its meaning depends on the uniform parameter\nvalue. The ranges are used when the histogram is calculated or backprojected to determine which\nhistogram bin corresponds to which value/tuple of values from the input image(s).\n@param uniform Uniformity flag. If not zero, the histogram has evenly spaced bins and for every\n\\f$0<=i<cDims\\f$ ranges[i] is an array of two numbers: lower and upper boundaries for the i-th\nhistogram dimension. The whole range [lower,upper] is then split into dims[i] equal parts to\ndetermine the i-th input tuple value ranges for every histogram bin. And if uniform=0 , then the\ni-th element of the ranges array contains dims[i]+1 elements: \\f$\\texttt{lower}_0,\n\\texttt{upper}_0, \\texttt{lower}_1, \\texttt{upper}_1 = \\texttt{lower}_2,\n...\n\\texttt{upper}_{dims[i]-1}\\f$ where \\f$\\texttt{lower}_j\\f$ and \\f$\\texttt{upper}_j\\f$ are lower\nand upper boundaries of the i-th input tuple value for the j-th bin, respectively. In either\ncase, the input values that are beyond the specified range for a histogram bin are not counted\nby cvCalcHist and filled with 0 by cvCalcBackProject.\n */\nCVAPI(CvHistogram*)  cvCreateHist( int dims, int* sizes, int type,\n                                   float** ranges CV_DEFAULT(NULL),\n                                   int uniform CV_DEFAULT(1));\n\n/** @brief Sets the bounds of the histogram bins.\n\nThis is a standalone function for setting bin ranges in the histogram. For a more detailed\ndescription of the parameters ranges and uniform, see the :ocvCalcHist function that can initialize\nthe ranges as well. Ranges for the histogram bins must be set before the histogram is calculated or\nthe backproject of the histogram is calculated.\n\n@param hist Histogram.\n@param ranges Array of bin ranges arrays. See :ocvCreateHist for details.\n@param uniform Uniformity flag. See :ocvCreateHist for details.\n */\nCVAPI(void)  cvSetHistBinRanges( CvHistogram* hist, float** ranges,\n                                int uniform CV_DEFAULT(1));\n\n/** @brief Makes a histogram out of an array.\n\nThe function initializes the histogram, whose header and bins are allocated by the user.\ncvReleaseHist does not need to be called afterwards. Only dense histograms can be initialized this\nway. The function returns hist.\n\n@param dims Number of the histogram dimensions.\n@param sizes Array of the histogram dimension sizes.\n@param hist Histogram header initialized by the function.\n@param data Array used to store histogram bins.\n@param ranges Histogram bin ranges. See cvCreateHist for details.\n@param uniform Uniformity flag. See cvCreateHist for details.\n */\nCVAPI(CvHistogram*)  cvMakeHistHeaderForArray(\n                            int  dims, int* sizes, CvHistogram* hist,\n                            float* data, float** ranges CV_DEFAULT(NULL),\n                            int uniform CV_DEFAULT(1));\n\n/** @brief Releases the histogram.\n\nThe function releases the histogram (header and the data). The pointer to the histogram is cleared\nby the function. If \\*hist pointer is already NULL, the function does nothing.\n\n@param hist Double pointer to the released histogram.\n */\nCVAPI(void)  cvReleaseHist( CvHistogram** hist );\n\n/** @brief Clears the histogram.\n\nThe function sets all of the histogram bins to 0 in case of a dense histogram and removes all\nhistogram bins in case of a sparse array.\n\n@param hist Histogram.\n */\nCVAPI(void)  cvClearHist( CvHistogram* hist );\n\n/** @brief Finds the minimum and maximum histogram bins.\n\nThe function finds the minimum and maximum histogram bins and their positions. All of output\narguments are optional. Among several extremas with the same value the ones with the minimum index\n(in the lexicographical order) are returned. In case of several maximums or minimums, the earliest\nin the lexicographical order (extrema locations) is returned.\n\n@param hist Histogram.\n@param min_value Pointer to the minimum value of the histogram.\n@param max_value Pointer to the maximum value of the histogram.\n@param min_idx Pointer to the array of coordinates for the minimum.\n@param max_idx Pointer to the array of coordinates for the maximum.\n */\nCVAPI(void)  cvGetMinMaxHistValue( const CvHistogram* hist,\n                                   float* min_value, float* max_value,\n                                   int* min_idx CV_DEFAULT(NULL),\n                                   int* max_idx CV_DEFAULT(NULL));\n\n\n/** @brief Normalizes the histogram.\n\nThe function normalizes the histogram bins by scaling them so that the sum of the bins becomes equal\nto factor.\n\n@param hist Pointer to the histogram.\n@param factor Normalization factor.\n */\nCVAPI(void)  cvNormalizeHist( CvHistogram* hist, double factor );\n\n\n/** @brief Thresholds the histogram.\n\nThe function clears histogram bins that are below the specified threshold.\n\n@param hist Pointer to the histogram.\n@param threshold Threshold level.\n */\nCVAPI(void)  cvThreshHist( CvHistogram* hist, double threshold );\n\n\n/** Compares two histogram */\nCVAPI(double)  cvCompareHist( const CvHistogram* hist1,\n                              const CvHistogram* hist2,\n                              int method);\n\n/** @brief Copies a histogram.\n\nThe function makes a copy of the histogram. If the second histogram pointer \\*dst is NULL, a new\nhistogram of the same size as src is created. Otherwise, both histograms must have equal types and\nsizes. Then the function copies the bin values of the source histogram to the destination histogram\nand sets the same bin value ranges as in src.\n\n@param src Source histogram.\n@param dst Pointer to the destination histogram.\n */\nCVAPI(void)  cvCopyHist( const CvHistogram* src, CvHistogram** dst );\n\n\n/** @brief Calculates bayesian probabilistic histograms\n   (each or src and dst is an array of _number_ histograms */\nCVAPI(void)  cvCalcBayesianProb( CvHistogram** src, int number,\n                                CvHistogram** dst);\n\n/** @brief Calculates array histogram\n@see cv::calcHist\n*/\nCVAPI(void)  cvCalcArrHist( CvArr** arr, CvHistogram* hist,\n                            int accumulate CV_DEFAULT(0),\n                            const CvArr* mask CV_DEFAULT(NULL) );\n\n/** @overload */\nCV_INLINE  void  cvCalcHist( IplImage** image, CvHistogram* hist,\n                             int accumulate CV_DEFAULT(0),\n                             const CvArr* mask CV_DEFAULT(NULL) )\n{\n    cvCalcArrHist( (CvArr**)image, hist, accumulate, mask );\n}\n\n/** @brief Calculates back project\n@see cvCalcBackProject, cv::calcBackProject\n*/\nCVAPI(void)  cvCalcArrBackProject( CvArr** image, CvArr* dst,\n                                   const CvHistogram* hist );\n\n#define  cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist)\n\n\n/** @brief Locates a template within an image by using a histogram comparison.\n\nThe function calculates the back projection by comparing histograms of the source image patches with\nthe given histogram. The function is similar to matchTemplate, but instead of comparing the raster\npatch with all its possible positions within the search window, the function CalcBackProjectPatch\ncompares histograms. See the algorithm diagram below:\n\n![image](pics/backprojectpatch.png)\n\n@param image Source images (though, you may pass CvMat\\*\\* as well).\n@param dst Destination image.\n@param range\n@param hist Histogram.\n@param method Comparison method passed to cvCompareHist (see the function description).\n@param factor Normalization factor for histograms that affects the normalization scale of the\ndestination image. Pass 1 if not sure.\n\n@see cvCalcBackProjectPatch\n */\nCVAPI(void)  cvCalcArrBackProjectPatch( CvArr** image, CvArr* dst, CvSize range,\n                                        CvHistogram* hist, int method,\n                                        double factor );\n\n#define  cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) \\\n     cvCalcArrBackProjectPatch( (CvArr**)image, dst, range, hist, method, factor )\n\n\n/** @brief Divides one histogram by another.\n\nThe function calculates the object probability density from two histograms as:\n\n\\f[\\texttt{disthist} (I)= \\forkthree{0}{if \\(\\texttt{hist1}(I)=0\\)}{\\texttt{scale}}{if \\(\\texttt{hist1}(I) \\ne 0\\) and \\(\\texttt{hist2}(I) > \\texttt{hist1}(I)\\)}{\\frac{\\texttt{hist2}(I) \\cdot \\texttt{scale}}{\\texttt{hist1}(I)}}{if \\(\\texttt{hist1}(I) \\ne 0\\) and \\(\\texttt{hist2}(I) \\le \\texttt{hist1}(I)\\)}\\f]\n\n@param hist1 First histogram (the divisor).\n@param hist2 Second histogram.\n@param dst_hist Destination histogram.\n@param scale Scale factor for the destination histogram.\n */\nCVAPI(void)  cvCalcProbDensity( const CvHistogram* hist1, const CvHistogram* hist2,\n                                CvHistogram* dst_hist, double scale CV_DEFAULT(255) );\n\n/** @brief equalizes histogram of 8-bit single-channel image\n@see cv::equalizeHist\n*/\nCVAPI(void)  cvEqualizeHist( const CvArr* src, CvArr* dst );\n\n\n/** @brief Applies distance transform to binary image\n@see cv::distanceTransform\n*/\nCVAPI(void)  cvDistTransform( const CvArr* src, CvArr* dst,\n                              int distance_type CV_DEFAULT(CV_DIST_L2),\n                              int mask_size CV_DEFAULT(3),\n                              const float* mask CV_DEFAULT(NULL),\n                              CvArr* labels CV_DEFAULT(NULL),\n                              int labelType CV_DEFAULT(CV_DIST_LABEL_CCOMP));\n\n\n/** @brief Applies fixed-level threshold to grayscale image.\n\n   This is a basic operation applied before retrieving contours\n@see cv::threshold\n*/\nCVAPI(double)  cvThreshold( const CvArr*  src, CvArr*  dst,\n                            double  threshold, double  max_value,\n                            int threshold_type );\n\n/** @brief Applies adaptive threshold to grayscale image.\n\n   The two parameters for methods CV_ADAPTIVE_THRESH_MEAN_C and\n   CV_ADAPTIVE_THRESH_GAUSSIAN_C are:\n   neighborhood size (3, 5, 7 etc.),\n   and a constant subtracted from mean (...,-3,-2,-1,0,1,2,3,...)\n@see cv::adaptiveThreshold\n*/\nCVAPI(void)  cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,\n                                  int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),\n                                  int threshold_type CV_DEFAULT(CV_THRESH_BINARY),\n                                  int block_size CV_DEFAULT(3),\n                                  double param1 CV_DEFAULT(5));\n\n/** @brief Fills the connected component until the color difference gets large enough\n@see cv::floodFill\n*/\nCVAPI(void)  cvFloodFill( CvArr* image, CvPoint seed_point,\n                          CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)),\n                          CvScalar up_diff CV_DEFAULT(cvScalarAll(0)),\n                          CvConnectedComp* comp CV_DEFAULT(NULL),\n                          int flags CV_DEFAULT(4),\n                          CvArr* mask CV_DEFAULT(NULL));\n\n/****************************************************************************************\\\n*                                  Feature detection                                     *\n\\****************************************************************************************/\n\n/** @brief Runs canny edge detector\n@see cv::Canny\n*/\nCVAPI(void)  cvCanny( const CvArr* image, CvArr* edges, double threshold1,\n                      double threshold2, int  aperture_size CV_DEFAULT(3) );\n\n/** @brief Calculates constraint image for corner detection\n\n   Dx^2 * Dyy + Dxx * Dy^2 - 2 * Dx * Dy * Dxy.\n   Applying threshold to the result gives coordinates of corners\n@see cv::preCornerDetect\n*/\nCVAPI(void) cvPreCornerDetect( const CvArr* image, CvArr* corners,\n                               int aperture_size CV_DEFAULT(3) );\n\n/** @brief Calculates eigen values and vectors of 2x2\n   gradient covariation matrix at every image pixel\n@see cv::cornerEigenValsAndVecs\n*/\nCVAPI(void)  cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,\n                                       int block_size, int aperture_size CV_DEFAULT(3) );\n\n/** @brief Calculates minimal eigenvalue for 2x2 gradient covariation matrix at\n   every image pixel\n@see cv::cornerMinEigenVal\n*/\nCVAPI(void)  cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval,\n                                  int block_size, int aperture_size CV_DEFAULT(3) );\n\n/** @brief Harris corner detector:\n\n   Calculates det(M) - k*(trace(M)^2), where M is 2x2 gradient covariation matrix for each pixel\n@see cv::cornerHarris\n*/\nCVAPI(void)  cvCornerHarris( const CvArr* image, CvArr* harris_response,\n                             int block_size, int aperture_size CV_DEFAULT(3),\n                             double k CV_DEFAULT(0.04) );\n\n/** @brief Adjust corner position using some sort of gradient search\n@see cv::cornerSubPix\n*/\nCVAPI(void)  cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,\n                                 int count, CvSize win, CvSize zero_zone,\n                                 CvTermCriteria  criteria );\n\n/** @brief Finds a sparse set of points within the selected region\n   that seem to be easy to track\n@see cv::goodFeaturesToTrack\n*/\nCVAPI(void)  cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image,\n                                    CvArr* temp_image, CvPoint2D32f* corners,\n                                    int* corner_count, double  quality_level,\n                                    double  min_distance,\n                                    const CvArr* mask CV_DEFAULT(NULL),\n                                    int block_size CV_DEFAULT(3),\n                                    int use_harris CV_DEFAULT(0),\n                                    double k CV_DEFAULT(0.04) );\n\n/** @brief Finds lines on binary image using one of several methods.\n\n   line_storage is either memory storage or 1 x _max number of lines_ CvMat, its\n   number of columns is changed by the function.\n   method is one of CV_HOUGH_*;\n   rho, theta and threshold are used for each of those methods;\n   param1 ~ line length, param2 ~ line gap - for probabilistic,\n   param1 ~ srn, param2 ~ stn - for multi-scale\n@see cv::HoughLines\n*/\nCVAPI(CvSeq*)  cvHoughLines2( CvArr* image, void* line_storage, int method,\n                              double rho, double theta, int threshold,\n                              double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0),\n                              double min_theta CV_DEFAULT(0), double max_theta CV_DEFAULT(CV_PI));\n\n/** @brief Finds circles in the image\n@see cv::HoughCircles\n*/\nCVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage,\n                              int method, double dp, double min_dist,\n                              double param1 CV_DEFAULT(100),\n                              double param2 CV_DEFAULT(100),\n                              int min_radius CV_DEFAULT(0),\n                              int max_radius CV_DEFAULT(0));\n\n/** @brief Fits a line into set of 2d or 3d points in a robust way (M-estimator technique)\n@see cv::fitLine\n*/\nCVAPI(void)  cvFitLine( const CvArr* points, int dist_type, double param,\n                        double reps, double aeps, float* line );\n\n/****************************************************************************************\\\n*                                     Drawing                                            *\n\\****************************************************************************************/\n\n/****************************************************************************************\\\n*       Drawing functions work with images/matrices of arbitrary type.                   *\n*       For color images the channel order is BGR[A]                                     *\n*       Antialiasing is supported only for 8-bit image now.                              *\n*       All the functions include parameter color that means rgb value (that may be      *\n*       constructed with CV_RGB macro) for color images and brightness                   *\n*       for grayscale images.                                                            *\n*       If a drawn figure is partially or completely outside of the image, it is clipped.*\n\\****************************************************************************************/\n\n#define CV_RGB( r, g, b )  cvScalar( (b), (g), (r), 0 )\n#define CV_FILLED -1\n\n#define CV_AA 16\n\n/** @brief Draws 4-connected, 8-connected or antialiased line segment connecting two points\n@see cv::line\n*/\nCVAPI(void)  cvLine( CvArr* img, CvPoint pt1, CvPoint pt2,\n                     CvScalar color, int thickness CV_DEFAULT(1),\n                     int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\n\n/** @brief Draws a rectangle given two opposite corners of the rectangle (pt1 & pt2)\n\n   if thickness<0 (e.g. thickness == CV_FILLED), the filled box is drawn\n@see cv::rectangle\n*/\nCVAPI(void)  cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2,\n                          CvScalar color, int thickness CV_DEFAULT(1),\n                          int line_type CV_DEFAULT(8),\n                          int shift CV_DEFAULT(0));\n\n/** @brief Draws a rectangle specified by a CvRect structure\n@see cv::rectangle\n*/\nCVAPI(void)  cvRectangleR( CvArr* img, CvRect r,\n                           CvScalar color, int thickness CV_DEFAULT(1),\n                           int line_type CV_DEFAULT(8),\n                           int shift CV_DEFAULT(0));\n\n\n/** @brief Draws a circle with specified center and radius.\n\n   Thickness works in the same way as with cvRectangle\n@see cv::circle\n*/\nCVAPI(void)  cvCircle( CvArr* img, CvPoint center, int radius,\n                       CvScalar color, int thickness CV_DEFAULT(1),\n                       int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\n\n/** @brief Draws ellipse outline, filled ellipse, elliptic arc or filled elliptic sector\n\n   depending on _thickness_, _start_angle_ and _end_angle_ parameters. The resultant figure\n   is rotated by _angle_. All the angles are in degrees\n@see cv::ellipse\n*/\nCVAPI(void)  cvEllipse( CvArr* img, CvPoint center, CvSize axes,\n                        double angle, double start_angle, double end_angle,\n                        CvScalar color, int thickness CV_DEFAULT(1),\n                        int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\n\nCV_INLINE  void  cvEllipseBox( CvArr* img, CvBox2D box, CvScalar color,\n                               int thickness CV_DEFAULT(1),\n                               int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) )\n{\n    CvSize axes;\n    axes.width = cvRound(box.size.width*0.5);\n    axes.height = cvRound(box.size.height*0.5);\n\n    cvEllipse( img, cvPointFrom32f( box.center ), axes, box.angle,\n               0, 360, color, thickness, line_type, shift );\n}\n\n/** @brief Fills convex or monotonous polygon.\n@see cv::fillConvexPoly\n*/\nCVAPI(void)  cvFillConvexPoly( CvArr* img, const CvPoint* pts, int npts, CvScalar color,\n                               int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\n\n/** @brief Fills an area bounded by one or more arbitrary polygons\n@see cv::fillPoly\n*/\nCVAPI(void)  cvFillPoly( CvArr* img, CvPoint** pts, const int* npts,\n                         int contours, CvScalar color,\n                         int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\n\n/** @brief Draws one or more polygonal curves\n@see cv::polylines\n*/\nCVAPI(void)  cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours,\n                         int is_closed, CvScalar color, int thickness CV_DEFAULT(1),\n                         int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\n\n#define cvDrawRect cvRectangle\n#define cvDrawLine cvLine\n#define cvDrawCircle cvCircle\n#define cvDrawEllipse cvEllipse\n#define cvDrawPolyLine cvPolyLine\n\n/** @brief Clips the line segment connecting *pt1 and *pt2\n   by the rectangular window\n\n   (0<=x<img_size.width, 0<=y<img_size.height).\n@see cv::clipLine\n*/\nCVAPI(int) cvClipLine( CvSize img_size, CvPoint* pt1, CvPoint* pt2 );\n\n/** @brief Initializes line iterator.\n\nInitially, line_iterator->ptr will point to pt1 (or pt2, see left_to_right description) location in\nthe image. Returns the number of pixels on the line between the ending points.\n@see cv::LineIterator\n*/\nCVAPI(int)  cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2,\n                                CvLineIterator* line_iterator,\n                                int connectivity CV_DEFAULT(8),\n                                int left_to_right CV_DEFAULT(0));\n\n#define CV_NEXT_LINE_POINT( line_iterator )                     \\\n{                                                               \\\n    int _line_iterator_mask = (line_iterator).err < 0 ? -1 : 0; \\\n    (line_iterator).err += (line_iterator).minus_delta +        \\\n        ((line_iterator).plus_delta & _line_iterator_mask);     \\\n    (line_iterator).ptr += (line_iterator).minus_step +         \\\n        ((line_iterator).plus_step & _line_iterator_mask);      \\\n}\n\n\n#define CV_FONT_HERSHEY_SIMPLEX         0\n#define CV_FONT_HERSHEY_PLAIN           1\n#define CV_FONT_HERSHEY_DUPLEX          2\n#define CV_FONT_HERSHEY_COMPLEX         3\n#define CV_FONT_HERSHEY_TRIPLEX         4\n#define CV_FONT_HERSHEY_COMPLEX_SMALL   5\n#define CV_FONT_HERSHEY_SCRIPT_SIMPLEX  6\n#define CV_FONT_HERSHEY_SCRIPT_COMPLEX  7\n\n#define CV_FONT_ITALIC                 16\n\n#define CV_FONT_VECTOR0    CV_FONT_HERSHEY_SIMPLEX\n\n\n/** Font structure */\ntypedef struct CvFont\n{\n  const char* nameFont;   //Qt:nameFont\n  CvScalar color;       //Qt:ColorFont -> cvScalar(blue_component, green_component, red_component[, alpha_component])\n    int         font_face;    //Qt: bool italic         /** =CV_FONT_* */\n    const int*  ascii;      //!< font data and metrics\n    const int*  greek;\n    const int*  cyrillic;\n    float       hscale, vscale;\n    float       shear;      //!< slope coefficient: 0 - normal, >0 - italic\n    int         thickness;    //!< Qt: weight               /** letters thickness */\n    float       dx;       //!< horizontal interval between letters\n    int         line_type;    //!< Qt: PointSize\n}\nCvFont;\n\n/** @brief Initializes font structure (OpenCV 1.x API).\n\nThe function initializes the font structure that can be passed to text rendering functions.\n\n@param font Pointer to the font structure initialized by the function\n@param font_face Font name identifier. See cv::HersheyFonts and corresponding old CV_* identifiers.\n@param hscale Horizontal scale. If equal to 1.0f , the characters have the original width\ndepending on the font type. If equal to 0.5f , the characters are of half the original width.\n@param vscale Vertical scale. If equal to 1.0f , the characters have the original height depending\non the font type. If equal to 0.5f , the characters are of half the original height.\n@param shear Approximate tangent of the character slope relative to the vertical line. A zero\nvalue means a non-italic font, 1.0f means about a 45 degree slope, etc.\n@param thickness Thickness of the text strokes\n@param line_type Type of the strokes, see line description\n\n@sa cvPutText\n */\nCVAPI(void)  cvInitFont( CvFont* font, int font_face,\n                         double hscale, double vscale,\n                         double shear CV_DEFAULT(0),\n                         int thickness CV_DEFAULT(1),\n                         int line_type CV_DEFAULT(8));\n\nCV_INLINE CvFont cvFont( double scale, int thickness CV_DEFAULT(1) )\n{\n    CvFont font;\n    cvInitFont( &font, CV_FONT_HERSHEY_PLAIN, scale, scale, 0, thickness, CV_AA );\n    return font;\n}\n\n/** @brief Renders text stroke with specified font and color at specified location.\n   CvFont should be initialized with cvInitFont\n@see cvInitFont, cvGetTextSize, cvFont, cv::putText\n*/\nCVAPI(void)  cvPutText( CvArr* img, const char* text, CvPoint org,\n                        const CvFont* font, CvScalar color );\n\n/** @brief Calculates bounding box of text stroke (useful for alignment)\n@see cv::getTextSize\n*/\nCVAPI(void)  cvGetTextSize( const char* text_string, const CvFont* font,\n                            CvSize* text_size, int* baseline );\n\n/** @brief Unpacks color value\n\nif arrtype is CV_8UC?, _color_ is treated as packed color value, otherwise the first channels\n(depending on arrtype) of destination scalar are set to the same value = _color_\n*/\nCVAPI(CvScalar)  cvColorToScalar( double packed_color, int arrtype );\n\n/** @brief Returns the polygon points which make up the given ellipse.\n\nThe ellipse is define by the box of size 'axes' rotated 'angle' around the 'center'. A partial\nsweep of the ellipse arc can be done by spcifying arc_start and arc_end to be something other than\n0 and 360, respectively. The input array 'pts' must be large enough to hold the result. The total\nnumber of points stored into 'pts' is returned by this function.\n@see cv::ellipse2Poly\n*/\nCVAPI(int) cvEllipse2Poly( CvPoint center, CvSize axes,\n                 int angle, int arc_start, int arc_end, CvPoint * pts, int delta );\n\n/** @brief Draws contour outlines or filled interiors on the image\n@see cv::drawContours\n*/\nCVAPI(void)  cvDrawContours( CvArr *img, CvSeq* contour,\n                             CvScalar external_color, CvScalar hole_color,\n                             int max_level, int thickness CV_DEFAULT(1),\n                             int line_type CV_DEFAULT(8),\n                             CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n/** @} */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/imgproc/types_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_TYPES_C_H__\n#define __OPENCV_IMGPROC_TYPES_C_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @addtogroup imgproc_c\n  @{\n*/\n\n/** Connected component structure */\ntypedef struct CvConnectedComp\n{\n    double area;    /**<area of the connected component  */\n    CvScalar value; /**<average color of the connected component */\n    CvRect rect;    /**<ROI of the component  */\n    CvSeq* contour; /**<optional component boundary\n                      (the contour might have child contours corresponding to the holes)*/\n}\nCvConnectedComp;\n\n/** Image smooth methods */\nenum SmoothMethod_c\n{\n    /** linear convolution with \\f$\\texttt{size1}\\times\\texttt{size2}\\f$ box kernel (all 1's). If\n    you want to smooth different pixels with different-size box kernels, you can use the integral\n    image that is computed using integral */\n    CV_BLUR_NO_SCALE =0,\n    /** linear convolution with \\f$\\texttt{size1}\\times\\texttt{size2}\\f$ box kernel (all\n    1's) with subsequent scaling by \\f$1/(\\texttt{size1}\\cdot\\texttt{size2})\\f$ */\n    CV_BLUR  =1,\n    /** linear convolution with a \\f$\\texttt{size1}\\times\\texttt{size2}\\f$ Gaussian kernel */\n    CV_GAUSSIAN  =2,\n    /** median filter with a \\f$\\texttt{size1}\\times\\texttt{size1}\\f$ square aperture */\n    CV_MEDIAN =3,\n    /** bilateral filter with a \\f$\\texttt{size1}\\times\\texttt{size1}\\f$ square aperture, color\n    sigma= sigma1 and spatial sigma= sigma2. If size1=0, the aperture square side is set to\n    cvRound(sigma2\\*1.5)\\*2+1. See cv::bilateralFilter */\n    CV_BILATERAL =4\n};\n\n/** Filters used in pyramid decomposition */\nenum\n{\n    CV_GAUSSIAN_5x5 = 7\n};\n\n/** Special filters */\nenum\n{\n    CV_SCHARR =-1,\n    CV_MAX_SOBEL_KSIZE =7\n};\n\n/** Constants for color conversion */\nenum\n{\n    CV_BGR2BGRA    =0,\n    CV_RGB2RGBA    =CV_BGR2BGRA,\n\n    CV_BGRA2BGR    =1,\n    CV_RGBA2RGB    =CV_BGRA2BGR,\n\n    CV_BGR2RGBA    =2,\n    CV_RGB2BGRA    =CV_BGR2RGBA,\n\n    CV_RGBA2BGR    =3,\n    CV_BGRA2RGB    =CV_RGBA2BGR,\n\n    CV_BGR2RGB     =4,\n    CV_RGB2BGR     =CV_BGR2RGB,\n\n    CV_BGRA2RGBA   =5,\n    CV_RGBA2BGRA   =CV_BGRA2RGBA,\n\n    CV_BGR2GRAY    =6,\n    CV_RGB2GRAY    =7,\n    CV_GRAY2BGR    =8,\n    CV_GRAY2RGB    =CV_GRAY2BGR,\n    CV_GRAY2BGRA   =9,\n    CV_GRAY2RGBA   =CV_GRAY2BGRA,\n    CV_BGRA2GRAY   =10,\n    CV_RGBA2GRAY   =11,\n\n    CV_BGR2BGR565  =12,\n    CV_RGB2BGR565  =13,\n    CV_BGR5652BGR  =14,\n    CV_BGR5652RGB  =15,\n    CV_BGRA2BGR565 =16,\n    CV_RGBA2BGR565 =17,\n    CV_BGR5652BGRA =18,\n    CV_BGR5652RGBA =19,\n\n    CV_GRAY2BGR565 =20,\n    CV_BGR5652GRAY =21,\n\n    CV_BGR2BGR555  =22,\n    CV_RGB2BGR555  =23,\n    CV_BGR5552BGR  =24,\n    CV_BGR5552RGB  =25,\n    CV_BGRA2BGR555 =26,\n    CV_RGBA2BGR555 =27,\n    CV_BGR5552BGRA =28,\n    CV_BGR5552RGBA =29,\n\n    CV_GRAY2BGR555 =30,\n    CV_BGR5552GRAY =31,\n\n    CV_BGR2XYZ     =32,\n    CV_RGB2XYZ     =33,\n    CV_XYZ2BGR     =34,\n    CV_XYZ2RGB     =35,\n\n    CV_BGR2YCrCb   =36,\n    CV_RGB2YCrCb   =37,\n    CV_YCrCb2BGR   =38,\n    CV_YCrCb2RGB   =39,\n\n    CV_BGR2HSV     =40,\n    CV_RGB2HSV     =41,\n\n    CV_BGR2Lab     =44,\n    CV_RGB2Lab     =45,\n\n    CV_BayerBG2BGR =46,\n    CV_BayerGB2BGR =47,\n    CV_BayerRG2BGR =48,\n    CV_BayerGR2BGR =49,\n\n    CV_BayerBG2RGB =CV_BayerRG2BGR,\n    CV_BayerGB2RGB =CV_BayerGR2BGR,\n    CV_BayerRG2RGB =CV_BayerBG2BGR,\n    CV_BayerGR2RGB =CV_BayerGB2BGR,\n\n    CV_BGR2Luv     =50,\n    CV_RGB2Luv     =51,\n    CV_BGR2HLS     =52,\n    CV_RGB2HLS     =53,\n\n    CV_HSV2BGR     =54,\n    CV_HSV2RGB     =55,\n\n    CV_Lab2BGR     =56,\n    CV_Lab2RGB     =57,\n    CV_Luv2BGR     =58,\n    CV_Luv2RGB     =59,\n    CV_HLS2BGR     =60,\n    CV_HLS2RGB     =61,\n\n    CV_BayerBG2BGR_VNG =62,\n    CV_BayerGB2BGR_VNG =63,\n    CV_BayerRG2BGR_VNG =64,\n    CV_BayerGR2BGR_VNG =65,\n\n    CV_BayerBG2RGB_VNG =CV_BayerRG2BGR_VNG,\n    CV_BayerGB2RGB_VNG =CV_BayerGR2BGR_VNG,\n    CV_BayerRG2RGB_VNG =CV_BayerBG2BGR_VNG,\n    CV_BayerGR2RGB_VNG =CV_BayerGB2BGR_VNG,\n\n    CV_BGR2HSV_FULL = 66,\n    CV_RGB2HSV_FULL = 67,\n    CV_BGR2HLS_FULL = 68,\n    CV_RGB2HLS_FULL = 69,\n\n    CV_HSV2BGR_FULL = 70,\n    CV_HSV2RGB_FULL = 71,\n    CV_HLS2BGR_FULL = 72,\n    CV_HLS2RGB_FULL = 73,\n\n    CV_LBGR2Lab     = 74,\n    CV_LRGB2Lab     = 75,\n    CV_LBGR2Luv     = 76,\n    CV_LRGB2Luv     = 77,\n\n    CV_Lab2LBGR     = 78,\n    CV_Lab2LRGB     = 79,\n    CV_Luv2LBGR     = 80,\n    CV_Luv2LRGB     = 81,\n\n    CV_BGR2YUV      = 82,\n    CV_RGB2YUV      = 83,\n    CV_YUV2BGR      = 84,\n    CV_YUV2RGB      = 85,\n\n    CV_BayerBG2GRAY = 86,\n    CV_BayerGB2GRAY = 87,\n    CV_BayerRG2GRAY = 88,\n    CV_BayerGR2GRAY = 89,\n\n    //YUV 4:2:0 formats family\n    CV_YUV2RGB_NV12 = 90,\n    CV_YUV2BGR_NV12 = 91,\n    CV_YUV2RGB_NV21 = 92,\n    CV_YUV2BGR_NV21 = 93,\n    CV_YUV420sp2RGB = CV_YUV2RGB_NV21,\n    CV_YUV420sp2BGR = CV_YUV2BGR_NV21,\n\n    CV_YUV2RGBA_NV12 = 94,\n    CV_YUV2BGRA_NV12 = 95,\n    CV_YUV2RGBA_NV21 = 96,\n    CV_YUV2BGRA_NV21 = 97,\n    CV_YUV420sp2RGBA = CV_YUV2RGBA_NV21,\n    CV_YUV420sp2BGRA = CV_YUV2BGRA_NV21,\n\n    CV_YUV2RGB_YV12 = 98,\n    CV_YUV2BGR_YV12 = 99,\n    CV_YUV2RGB_IYUV = 100,\n    CV_YUV2BGR_IYUV = 101,\n    CV_YUV2RGB_I420 = CV_YUV2RGB_IYUV,\n    CV_YUV2BGR_I420 = CV_YUV2BGR_IYUV,\n    CV_YUV420p2RGB = CV_YUV2RGB_YV12,\n    CV_YUV420p2BGR = CV_YUV2BGR_YV12,\n\n    CV_YUV2RGBA_YV12 = 102,\n    CV_YUV2BGRA_YV12 = 103,\n    CV_YUV2RGBA_IYUV = 104,\n    CV_YUV2BGRA_IYUV = 105,\n    CV_YUV2RGBA_I420 = CV_YUV2RGBA_IYUV,\n    CV_YUV2BGRA_I420 = CV_YUV2BGRA_IYUV,\n    CV_YUV420p2RGBA = CV_YUV2RGBA_YV12,\n    CV_YUV420p2BGRA = CV_YUV2BGRA_YV12,\n\n    CV_YUV2GRAY_420 = 106,\n    CV_YUV2GRAY_NV21 = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_NV12 = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_YV12 = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_IYUV = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_I420 = CV_YUV2GRAY_420,\n    CV_YUV420sp2GRAY = CV_YUV2GRAY_420,\n    CV_YUV420p2GRAY = CV_YUV2GRAY_420,\n\n    //YUV 4:2:2 formats family\n    CV_YUV2RGB_UYVY = 107,\n    CV_YUV2BGR_UYVY = 108,\n    //CV_YUV2RGB_VYUY = 109,\n    //CV_YUV2BGR_VYUY = 110,\n    CV_YUV2RGB_Y422 = CV_YUV2RGB_UYVY,\n    CV_YUV2BGR_Y422 = CV_YUV2BGR_UYVY,\n    CV_YUV2RGB_UYNV = CV_YUV2RGB_UYVY,\n    CV_YUV2BGR_UYNV = CV_YUV2BGR_UYVY,\n\n    CV_YUV2RGBA_UYVY = 111,\n    CV_YUV2BGRA_UYVY = 112,\n    //CV_YUV2RGBA_VYUY = 113,\n    //CV_YUV2BGRA_VYUY = 114,\n    CV_YUV2RGBA_Y422 = CV_YUV2RGBA_UYVY,\n    CV_YUV2BGRA_Y422 = CV_YUV2BGRA_UYVY,\n    CV_YUV2RGBA_UYNV = CV_YUV2RGBA_UYVY,\n    CV_YUV2BGRA_UYNV = CV_YUV2BGRA_UYVY,\n\n    CV_YUV2RGB_YUY2 = 115,\n    CV_YUV2BGR_YUY2 = 116,\n    CV_YUV2RGB_YVYU = 117,\n    CV_YUV2BGR_YVYU = 118,\n    CV_YUV2RGB_YUYV = CV_YUV2RGB_YUY2,\n    CV_YUV2BGR_YUYV = CV_YUV2BGR_YUY2,\n    CV_YUV2RGB_YUNV = CV_YUV2RGB_YUY2,\n    CV_YUV2BGR_YUNV = CV_YUV2BGR_YUY2,\n\n    CV_YUV2RGBA_YUY2 = 119,\n    CV_YUV2BGRA_YUY2 = 120,\n    CV_YUV2RGBA_YVYU = 121,\n    CV_YUV2BGRA_YVYU = 122,\n    CV_YUV2RGBA_YUYV = CV_YUV2RGBA_YUY2,\n    CV_YUV2BGRA_YUYV = CV_YUV2BGRA_YUY2,\n    CV_YUV2RGBA_YUNV = CV_YUV2RGBA_YUY2,\n    CV_YUV2BGRA_YUNV = CV_YUV2BGRA_YUY2,\n\n    CV_YUV2GRAY_UYVY = 123,\n    CV_YUV2GRAY_YUY2 = 124,\n    //CV_YUV2GRAY_VYUY = CV_YUV2GRAY_UYVY,\n    CV_YUV2GRAY_Y422 = CV_YUV2GRAY_UYVY,\n    CV_YUV2GRAY_UYNV = CV_YUV2GRAY_UYVY,\n    CV_YUV2GRAY_YVYU = CV_YUV2GRAY_YUY2,\n    CV_YUV2GRAY_YUYV = CV_YUV2GRAY_YUY2,\n    CV_YUV2GRAY_YUNV = CV_YUV2GRAY_YUY2,\n\n    // alpha premultiplication\n    CV_RGBA2mRGBA = 125,\n    CV_mRGBA2RGBA = 126,\n\n    CV_RGB2YUV_I420 = 127,\n    CV_BGR2YUV_I420 = 128,\n    CV_RGB2YUV_IYUV = CV_RGB2YUV_I420,\n    CV_BGR2YUV_IYUV = CV_BGR2YUV_I420,\n\n    CV_RGBA2YUV_I420 = 129,\n    CV_BGRA2YUV_I420 = 130,\n    CV_RGBA2YUV_IYUV = CV_RGBA2YUV_I420,\n    CV_BGRA2YUV_IYUV = CV_BGRA2YUV_I420,\n    CV_RGB2YUV_YV12  = 131,\n    CV_BGR2YUV_YV12  = 132,\n    CV_RGBA2YUV_YV12 = 133,\n    CV_BGRA2YUV_YV12 = 134,\n\n    // Edge-Aware Demosaicing\n    CV_BayerBG2BGR_EA = 135,\n    CV_BayerGB2BGR_EA = 136,\n    CV_BayerRG2BGR_EA = 137,\n    CV_BayerGR2BGR_EA = 138,\n\n    CV_BayerBG2RGB_EA = CV_BayerRG2BGR_EA,\n    CV_BayerGB2RGB_EA = CV_BayerGR2BGR_EA,\n    CV_BayerRG2RGB_EA = CV_BayerBG2BGR_EA,\n    CV_BayerGR2RGB_EA = CV_BayerGB2BGR_EA,\n\n    CV_COLORCVT_MAX  = 139\n};\n\n\n/** Sub-pixel interpolation methods */\nenum\n{\n    CV_INTER_NN        =0,\n    CV_INTER_LINEAR    =1,\n    CV_INTER_CUBIC     =2,\n    CV_INTER_AREA      =3,\n    CV_INTER_LANCZOS4  =4\n};\n\n/** ... and other image warping flags */\nenum\n{\n    CV_WARP_FILL_OUTLIERS =8,\n    CV_WARP_INVERSE_MAP  =16\n};\n\n/** Shapes of a structuring element for morphological operations\n@see cv::MorphShapes, cv::getStructuringElement\n*/\nenum MorphShapes_c\n{\n    CV_SHAPE_RECT      =0,\n    CV_SHAPE_CROSS     =1,\n    CV_SHAPE_ELLIPSE   =2,\n    CV_SHAPE_CUSTOM    =100 //!< custom structuring element\n};\n\n/** Morphological operations */\nenum\n{\n    CV_MOP_ERODE        =0,\n    CV_MOP_DILATE       =1,\n    CV_MOP_OPEN         =2,\n    CV_MOP_CLOSE        =3,\n    CV_MOP_GRADIENT     =4,\n    CV_MOP_TOPHAT       =5,\n    CV_MOP_BLACKHAT     =6\n};\n\n/** Spatial and central moments */\ntypedef struct CvMoments\n{\n    double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /**< spatial moments */\n    double  mu20, mu11, mu02, mu30, mu21, mu12, mu03; /**< central moments */\n    double  inv_sqrt_m00; /**< m00 != 0 ? 1/sqrt(m00) : 0 */\n\n#ifdef __cplusplus\n    CvMoments(){}\n    CvMoments(const cv::Moments& m)\n    {\n        m00 = m.m00; m10 = m.m10; m01 = m.m01;\n        m20 = m.m20; m11 = m.m11; m02 = m.m02;\n        m30 = m.m30; m21 = m.m21; m12 = m.m12; m03 = m.m03;\n        mu20 = m.mu20; mu11 = m.mu11; mu02 = m.mu02;\n        mu30 = m.mu30; mu21 = m.mu21; mu12 = m.mu12; mu03 = m.mu03;\n        double am00 = std::abs(m.m00);\n        inv_sqrt_m00 = am00 > DBL_EPSILON ? 1./std::sqrt(am00) : 0;\n    }\n    operator cv::Moments() const\n    {\n        return cv::Moments(m00, m10, m01, m20, m11, m02, m30, m21, m12, m03);\n    }\n#endif\n}\nCvMoments;\n\n/** Hu invariants */\ntypedef struct CvHuMoments\n{\n    double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /**< Hu invariants */\n}\nCvHuMoments;\n\n/** Template matching methods */\nenum\n{\n    CV_TM_SQDIFF        =0,\n    CV_TM_SQDIFF_NORMED =1,\n    CV_TM_CCORR         =2,\n    CV_TM_CCORR_NORMED  =3,\n    CV_TM_CCOEFF        =4,\n    CV_TM_CCOEFF_NORMED =5\n};\n\ntypedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param );\n\n/** Contour retrieval modes */\nenum\n{\n    CV_RETR_EXTERNAL=0,\n    CV_RETR_LIST=1,\n    CV_RETR_CCOMP=2,\n    CV_RETR_TREE=3,\n    CV_RETR_FLOODFILL=4\n};\n\n/** Contour approximation methods */\nenum\n{\n    CV_CHAIN_CODE=0,\n    CV_CHAIN_APPROX_NONE=1,\n    CV_CHAIN_APPROX_SIMPLE=2,\n    CV_CHAIN_APPROX_TC89_L1=3,\n    CV_CHAIN_APPROX_TC89_KCOS=4,\n    CV_LINK_RUNS=5\n};\n\n/*\nInternal structure that is used for sequential retrieving contours from the image.\nIt supports both hierarchical and plane variants of Suzuki algorithm.\n*/\ntypedef struct _CvContourScanner* CvContourScanner;\n\n/** Freeman chain reader state */\ntypedef struct CvChainPtReader\n{\n    CV_SEQ_READER_FIELDS()\n    char      code;\n    CvPoint   pt;\n    schar     deltas[8][2];\n}\nCvChainPtReader;\n\n/** initializes 8-element array for fast access to 3x3 neighborhood of a pixel */\n#define  CV_INIT_3X3_DELTAS( deltas, step, nch )            \\\n    ((deltas)[0] =  (nch),  (deltas)[1] = -(step) + (nch),  \\\n     (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch),  \\\n     (deltas)[4] = -(nch),  (deltas)[5] =  (step) - (nch),  \\\n     (deltas)[6] =  (step), (deltas)[7] =  (step) + (nch))\n\n\n/** Contour approximation algorithms */\nenum\n{\n    CV_POLY_APPROX_DP = 0\n};\n\n/** @brief Shape matching methods\n\n\\f$A\\f$ denotes object1,\\f$B\\f$ denotes object2\n\n\\f$\\begin{array}{l} m^A_i =  \\mathrm{sign} (h^A_i)  \\cdot \\log{h^A_i} \\\\ m^B_i =  \\mathrm{sign} (h^B_i)  \\cdot \\log{h^B_i} \\end{array}\\f$\n\nand \\f$h^A_i, h^B_i\\f$ are the Hu moments of \\f$A\\f$ and \\f$B\\f$ , respectively.\n*/\nenum ShapeMatchModes\n{\n    CV_CONTOURS_MATCH_I1  =1, //!< \\f[I_1(A,B) =  \\sum _{i=1...7}  \\left |  \\frac{1}{m^A_i} -  \\frac{1}{m^B_i} \\right |\\f]\n    CV_CONTOURS_MATCH_I2  =2, //!< \\f[I_2(A,B) =  \\sum _{i=1...7}  \\left | m^A_i - m^B_i  \\right |\\f]\n    CV_CONTOURS_MATCH_I3  =3  //!< \\f[I_3(A,B) =  \\max _{i=1...7}  \\frac{ \\left| m^A_i - m^B_i \\right| }{ \\left| m^A_i \\right| }\\f]\n};\n\n/** Shape orientation */\nenum\n{\n    CV_CLOCKWISE         =1,\n    CV_COUNTER_CLOCKWISE =2\n};\n\n\n/** Convexity defect */\ntypedef struct CvConvexityDefect\n{\n    CvPoint* start; /**< point of the contour where the defect begins */\n    CvPoint* end; /**< point of the contour where the defect ends */\n    CvPoint* depth_point; /**< the farthest from the convex hull point within the defect */\n    float depth; /**< distance between the farthest point and the convex hull */\n} CvConvexityDefect;\n\n\n/** Histogram comparison methods */\nenum\n{\n    CV_COMP_CORREL        =0,\n    CV_COMP_CHISQR        =1,\n    CV_COMP_INTERSECT     =2,\n    CV_COMP_BHATTACHARYYA =3,\n    CV_COMP_HELLINGER     =CV_COMP_BHATTACHARYYA,\n    CV_COMP_CHISQR_ALT    =4,\n    CV_COMP_KL_DIV        =5\n};\n\n/** Mask size for distance transform */\nenum\n{\n    CV_DIST_MASK_3   =3,\n    CV_DIST_MASK_5   =5,\n    CV_DIST_MASK_PRECISE =0\n};\n\n/** Content of output label array: connected components or pixels */\nenum\n{\n  CV_DIST_LABEL_CCOMP = 0,\n  CV_DIST_LABEL_PIXEL = 1\n};\n\n/** Distance types for Distance Transform and M-estimators */\nenum\n{\n    CV_DIST_USER    =-1,  /**< User defined distance */\n    CV_DIST_L1      =1,   /**< distance = |x1-x2| + |y1-y2| */\n    CV_DIST_L2      =2,   /**< the simple euclidean distance */\n    CV_DIST_C       =3,   /**< distance = max(|x1-x2|,|y1-y2|) */\n    CV_DIST_L12     =4,   /**< L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */\n    CV_DIST_FAIR    =5,   /**< distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */\n    CV_DIST_WELSCH  =6,   /**< distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */\n    CV_DIST_HUBER   =7    /**< distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */\n};\n\n\n/** Threshold types */\nenum\n{\n    CV_THRESH_BINARY      =0,  /**< value = value > threshold ? max_value : 0       */\n    CV_THRESH_BINARY_INV  =1,  /**< value = value > threshold ? 0 : max_value       */\n    CV_THRESH_TRUNC       =2,  /**< value = value > threshold ? threshold : value   */\n    CV_THRESH_TOZERO      =3,  /**< value = value > threshold ? value : 0           */\n    CV_THRESH_TOZERO_INV  =4,  /**< value = value > threshold ? 0 : value           */\n    CV_THRESH_MASK        =7,\n    CV_THRESH_OTSU        =8, /**< use Otsu algorithm to choose the optimal threshold value;\n                                 combine the flag with one of the above CV_THRESH_* values */\n    CV_THRESH_TRIANGLE    =16  /**< use Triangle algorithm to choose the optimal threshold value;\n                                 combine the flag with one of the above CV_THRESH_* values, but not\n                                 with CV_THRESH_OTSU */\n};\n\n/** Adaptive threshold methods */\nenum\n{\n    CV_ADAPTIVE_THRESH_MEAN_C  =0,\n    CV_ADAPTIVE_THRESH_GAUSSIAN_C  =1\n};\n\n/** FloodFill flags */\nenum\n{\n    CV_FLOODFILL_FIXED_RANGE =(1 << 16),\n    CV_FLOODFILL_MASK_ONLY   =(1 << 17)\n};\n\n\n/** Canny edge detector flags */\nenum\n{\n    CV_CANNY_L2_GRADIENT  =(1 << 31)\n};\n\n/** Variants of a Hough transform */\nenum\n{\n    CV_HOUGH_STANDARD =0,\n    CV_HOUGH_PROBABILISTIC =1,\n    CV_HOUGH_MULTI_SCALE =2,\n    CV_HOUGH_GRADIENT =3\n};\n\n\n/* Fast search data structures  */\nstruct CvFeatureTree;\nstruct CvLSH;\nstruct CvLSHOperations;\n\n/** @} */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/imgproc.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_HPP__\n#define __OPENCV_IMGPROC_HPP__\n\n#include \"opencv2/core.hpp\"\n\n/**\n  @defgroup imgproc Image processing\n  @{\n    @defgroup imgproc_filter Image Filtering\n\nFunctions and classes described in this section are used to perform various linear or non-linear\nfiltering operations on 2D images (represented as Mat's). It means that for each pixel location\n\\f$(x,y)\\f$ in the source image (normally, rectangular), its neighborhood is considered and used to\ncompute the response. In case of a linear filter, it is a weighted sum of pixel values. In case of\nmorphological operations, it is the minimum or maximum values, and so on. The computed response is\nstored in the destination image at the same location \\f$(x,y)\\f$. It means that the output image\nwill be of the same size as the input image. Normally, the functions support multi-channel arrays,\nin which case every channel is processed independently. Therefore, the output image will also have\nthe same number of channels as the input one.\n\nAnother common feature of the functions and classes described in this section is that, unlike\nsimple arithmetic functions, they need to extrapolate values of some non-existing pixels. For\nexample, if you want to smooth an image using a Gaussian \\f$3 \\times 3\\f$ filter, then, when\nprocessing the left-most pixels in each row, you need pixels to the left of them, that is, outside\nof the image. You can let these pixels be the same as the left-most image pixels (\"replicated\nborder\" extrapolation method), or assume that all the non-existing pixels are zeros (\"constant\nborder\" extrapolation method), and so on. OpenCV enables you to specify the extrapolation method.\nFor details, see cv::BorderTypes\n\n@anchor filter_depths\n### Depth combinations\nInput depth (src.depth()) | Output depth (ddepth)\n--------------------------|----------------------\nCV_8U                     | -1/CV_16S/CV_32F/CV_64F\nCV_16U/CV_16S             | -1/CV_32F/CV_64F\nCV_32F                    | -1/CV_32F/CV_64F\nCV_64F                    | -1/CV_64F\n\n@note when ddepth=-1, the output image will have the same depth as the source.\n\n    @defgroup imgproc_transform Geometric Image Transformations\n\nThe functions in this section perform various geometrical transformations of 2D images. They do not\nchange the image content but deform the pixel grid and map this deformed grid to the destination\nimage. In fact, to avoid sampling artifacts, the mapping is done in the reverse order, from\ndestination to the source. That is, for each pixel \\f$(x, y)\\f$ of the destination image, the\nfunctions compute coordinates of the corresponding \"donor\" pixel in the source image and copy the\npixel value:\n\n\\f[\\texttt{dst} (x,y)= \\texttt{src} (f_x(x,y), f_y(x,y))\\f]\n\nIn case when you specify the forward mapping \\f$\\left<g_x, g_y\\right>: \\texttt{src} \\rightarrow\n\\texttt{dst}\\f$, the OpenCV functions first compute the corresponding inverse mapping\n\\f$\\left<f_x, f_y\\right>: \\texttt{dst} \\rightarrow \\texttt{src}\\f$ and then use the above formula.\n\nThe actual implementations of the geometrical transformations, from the most generic remap and to\nthe simplest and the fastest resize, need to solve two main problems with the above formula:\n\n- Extrapolation of non-existing pixels. Similarly to the filtering functions described in the\nprevious section, for some \\f$(x,y)\\f$, either one of \\f$f_x(x,y)\\f$, or \\f$f_y(x,y)\\f$, or both\nof them may fall outside of the image. In this case, an extrapolation method needs to be used.\nOpenCV provides the same selection of extrapolation methods as in the filtering functions. In\naddition, it provides the method BORDER_TRANSPARENT. This means that the corresponding pixels in\nthe destination image will not be modified at all.\n\n- Interpolation of pixel values. Usually \\f$f_x(x,y)\\f$ and \\f$f_y(x,y)\\f$ are floating-point\nnumbers. This means that \\f$\\left<f_x, f_y\\right>\\f$ can be either an affine or perspective\ntransformation, or radial lens distortion correction, and so on. So, a pixel value at fractional\ncoordinates needs to be retrieved. In the simplest case, the coordinates can be just rounded to the\nnearest integer coordinates and the corresponding pixel can be used. This is called a\nnearest-neighbor interpolation. However, a better result can be achieved by using more\nsophisticated [interpolation methods](http://en.wikipedia.org/wiki/Multivariate_interpolation) ,\nwhere a polynomial function is fit into some neighborhood of the computed pixel \\f$(f_x(x,y),\nf_y(x,y))\\f$, and then the value of the polynomial at \\f$(f_x(x,y), f_y(x,y))\\f$ is taken as the\ninterpolated pixel value. In OpenCV, you can choose between several interpolation methods. See\nresize for details.\n\n    @defgroup imgproc_misc Miscellaneous Image Transformations\n    @defgroup imgproc_draw Drawing Functions\n\nDrawing functions work with matrices/images of arbitrary depth. The boundaries of the shapes can be\nrendered with antialiasing (implemented only for 8-bit images for now). All the functions include\nthe parameter color that uses an RGB value (that may be constructed with the Scalar constructor )\nfor color images and brightness for grayscale images. For color images, the channel ordering is\nnormally *Blue, Green, Red*. This is what imshow, imread, and imwrite expect. So, if you form a\ncolor using the Scalar constructor, it should look like:\n\n\\f[\\texttt{Scalar} (blue \\_ component, green \\_ component, red \\_ component[, alpha \\_ component])\\f]\n\nIf you are using your own image rendering and I/O functions, you can use any channel ordering. The\ndrawing functions process each channel independently and do not depend on the channel order or even\non the used color space. The whole image can be converted from BGR to RGB or to a different color\nspace using cvtColor .\n\nIf a drawn figure is partially or completely outside the image, the drawing functions clip it. Also,\nmany drawing functions can handle pixel coordinates specified with sub-pixel accuracy. This means\nthat the coordinates can be passed as fixed-point numbers encoded as integers. The number of\nfractional bits is specified by the shift parameter and the real point coordinates are calculated as\n\\f$\\texttt{Point}(x,y)\\rightarrow\\texttt{Point2f}(x*2^{-shift},y*2^{-shift})\\f$ . This feature is\nespecially effective when rendering antialiased shapes.\n\n@note The functions do not support alpha-transparency when the target image is 4-channel. In this\ncase, the color[3] is simply copied to the repainted pixels. Thus, if you want to paint\nsemi-transparent shapes, you can paint them in a separate buffer and then blend it with the main\nimage.\n\n    @defgroup imgproc_colormap ColorMaps in OpenCV\n\nThe human perception isn't built for observing fine changes in grayscale images. Human eyes are more\nsensitive to observing changes between colors, so you often need to recolor your grayscale images to\nget a clue about them. OpenCV now comes with various colormaps to enhance the visualization in your\ncomputer vision application.\n\nIn OpenCV you only need applyColorMap to apply a colormap on a given image. The following sample\ncode reads the path to an image from command line, applies a Jet colormap on it and shows the\nresult:\n\n@code\n#include <opencv2/core.hpp>\n#include <opencv2/imgproc.hpp>\n#include <opencv2/imgcodecs.hpp>\n#include <opencv2/highgui.hpp>\nusing namespace cv;\n\n#include <iostream>\nusing namespace std;\n\nint main(int argc, const char *argv[])\n{\n    // We need an input image. (can be grayscale or color)\n    if (argc < 2)\n    {\n        cerr << \"We need an image to process here. Please run: colorMap [path_to_image]\" << endl;\n        return -1;\n    }\n    Mat img_in = imread(argv[1]);\n    if(img_in.empty())\n    {\n        cerr << \"Sample image (\" << argv[1] << \") is empty. Please adjust your path, so it points to a valid input image!\" << endl;\n        return -1;\n    }\n    // Holds the colormap version of the image:\n    Mat img_color;\n    // Apply the colormap:\n    applyColorMap(img_in, img_color, COLORMAP_JET);\n    // Show the result:\n    imshow(\"colorMap\", img_color);\n    waitKey(0);\n    return 0;\n}\n@endcode\n\n@see cv::ColormapTypes\n\n    @defgroup imgproc_hist Histograms\n    @defgroup imgproc_shape Structural Analysis and Shape Descriptors\n    @defgroup imgproc_motion Motion Analysis and Object Tracking\n    @defgroup imgproc_feature Feature Detection\n    @defgroup imgproc_object Object Detection\n    @defgroup imgproc_c C API\n  @}\n*/\n\nnamespace cv\n{\n\n/** @addtogroup imgproc\n@{\n*/\n\n//! @addtogroup imgproc_filter\n//! @{\n\n//! type of morphological operation\nenum MorphTypes{\n    MORPH_ERODE    = 0, //!< see cv::erode\n    MORPH_DILATE   = 1, //!< see cv::dilate\n    MORPH_OPEN     = 2, //!< an opening operation\n                        //!< \\f[\\texttt{dst} = \\mathrm{open} ( \\texttt{src} , \\texttt{element} )= \\mathrm{dilate} ( \\mathrm{erode} ( \\texttt{src} , \\texttt{element} ))\\f]\n    MORPH_CLOSE    = 3, //!< a closing operation\n                        //!< \\f[\\texttt{dst} = \\mathrm{close} ( \\texttt{src} , \\texttt{element} )= \\mathrm{erode} ( \\mathrm{dilate} ( \\texttt{src} , \\texttt{element} ))\\f]\n    MORPH_GRADIENT = 4, //!< a morphological gradient\n                        //!< \\f[\\texttt{dst} = \\mathrm{morph\\_grad} ( \\texttt{src} , \\texttt{element} )= \\mathrm{dilate} ( \\texttt{src} , \\texttt{element} )- \\mathrm{erode} ( \\texttt{src} , \\texttt{element} )\\f]\n    MORPH_TOPHAT   = 5, //!< \"top hat\"\n                        //!< \\f[\\texttt{dst} = \\mathrm{tophat} ( \\texttt{src} , \\texttt{element} )= \\texttt{src} - \\mathrm{open} ( \\texttt{src} , \\texttt{element} )\\f]\n    MORPH_BLACKHAT = 6, //!< \"black hat\"\n                        //!< \\f[\\texttt{dst} = \\mathrm{blackhat} ( \\texttt{src} , \\texttt{element} )= \\mathrm{close} ( \\texttt{src} , \\texttt{element} )- \\texttt{src}\\f]\n    MORPH_HITMISS  = 7  //!< \"hit and miss\"\n                        //!<   .- Only supported for CV_8UC1 binary images. Tutorial can be found in [this page](http://opencv-code.com/tutorials/hit-or-miss-transform-in-opencv/)\n};\n\n//! shape of the structuring element\nenum MorphShapes {\n    MORPH_RECT    = 0, //!< a rectangular structuring element:  \\f[E_{ij}=1\\f]\n    MORPH_CROSS   = 1, //!< a cross-shaped structuring element:\n                       //!< \\f[E_{ij} =  \\fork{1}{if i=\\texttt{anchor.y} or j=\\texttt{anchor.x}}{0}{otherwise}\\f]\n    MORPH_ELLIPSE = 2 //!< an elliptic structuring element, that is, a filled ellipse inscribed\n                      //!< into the rectangle Rect(0, 0, esize.width, 0.esize.height)\n};\n\n//! @} imgproc_filter\n\n//! @addtogroup imgproc_transform\n//! @{\n\n//! interpolation algorithm\nenum InterpolationFlags{\n    /** nearest neighbor interpolation */\n    INTER_NEAREST        = 0,\n    /** bilinear interpolation */\n    INTER_LINEAR         = 1,\n    /** bicubic interpolation */\n    INTER_CUBIC          = 2,\n    /** resampling using pixel area relation. It may be a preferred method for image decimation, as\n    it gives moire'-free results. But when the image is zoomed, it is similar to the INTER_NEAREST\n    method. */\n    INTER_AREA           = 3,\n    /** Lanczos interpolation over 8x8 neighborhood */\n    INTER_LANCZOS4       = 4,\n    /** mask for interpolation codes */\n    INTER_MAX            = 7,\n    /** flag, fills all of the destination image pixels. If some of them correspond to outliers in the\n    source image, they are set to zero */\n    WARP_FILL_OUTLIERS   = 8,\n    /** flag, inverse transformation\n\n    For example, polar transforms:\n    - flag is __not__ set: \\f$dst( \\phi , \\rho ) = src(x,y)\\f$\n    - flag is set: \\f$dst(x,y) = src( \\phi , \\rho )\\f$\n    */\n    WARP_INVERSE_MAP     = 16\n};\n\nenum InterpolationMasks {\n       INTER_BITS      = 5,\n       INTER_BITS2     = INTER_BITS * 2,\n       INTER_TAB_SIZE  = 1 << INTER_BITS,\n       INTER_TAB_SIZE2 = INTER_TAB_SIZE * INTER_TAB_SIZE\n     };\n\n//! @} imgproc_transform\n\n//! @addtogroup imgproc_misc\n//! @{\n\n//! Distance types for Distance Transform and M-estimators\n//! @see cv::distanceTransform, cv::fitLine\nenum DistanceTypes {\n    DIST_USER    = -1,  //!< User defined distance\n    DIST_L1      = 1,   //!< distance = |x1-x2| + |y1-y2|\n    DIST_L2      = 2,   //!< the simple euclidean distance\n    DIST_C       = 3,   //!< distance = max(|x1-x2|,|y1-y2|)\n    DIST_L12     = 4,   //!< L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1))\n    DIST_FAIR    = 5,   //!< distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998\n    DIST_WELSCH  = 6,   //!< distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846\n    DIST_HUBER   = 7    //!< distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345\n};\n\n//! Mask size for distance transform\nenum DistanceTransformMasks {\n    DIST_MASK_3       = 3, //!< mask=3\n    DIST_MASK_5       = 5, //!< mask=5\n    DIST_MASK_PRECISE = 0  //!<\n};\n\n//! type of the threshold operation\n//! ![threshold types](pics/threshold.png)\nenum ThresholdTypes {\n    THRESH_BINARY     = 0, //!< \\f[\\texttt{dst} (x,y) =  \\fork{\\texttt{maxval}}{if \\(\\texttt{src}(x,y) > \\texttt{thresh}\\)}{0}{otherwise}\\f]\n    THRESH_BINARY_INV = 1, //!< \\f[\\texttt{dst} (x,y) =  \\fork{0}{if \\(\\texttt{src}(x,y) > \\texttt{thresh}\\)}{\\texttt{maxval}}{otherwise}\\f]\n    THRESH_TRUNC      = 2, //!< \\f[\\texttt{dst} (x,y) =  \\fork{\\texttt{threshold}}{if \\(\\texttt{src}(x,y) > \\texttt{thresh}\\)}{\\texttt{src}(x,y)}{otherwise}\\f]\n    THRESH_TOZERO     = 3, //!< \\f[\\texttt{dst} (x,y) =  \\fork{\\texttt{src}(x,y)}{if \\(\\texttt{src}(x,y) > \\texttt{thresh}\\)}{0}{otherwise}\\f]\n    THRESH_TOZERO_INV = 4, //!< \\f[\\texttt{dst} (x,y) =  \\fork{0}{if \\(\\texttt{src}(x,y) > \\texttt{thresh}\\)}{\\texttt{src}(x,y)}{otherwise}\\f]\n    THRESH_MASK       = 7,\n    THRESH_OTSU       = 8, //!< flag, use Otsu algorithm to choose the optimal threshold value\n    THRESH_TRIANGLE   = 16 //!< flag, use Triangle algorithm to choose the optimal threshold value\n};\n\n//! adaptive threshold algorithm\n//! see cv::adaptiveThreshold\nenum AdaptiveThresholdTypes {\n    /** the threshold value \\f$T(x,y)\\f$ is a mean of the \\f$\\texttt{blockSize} \\times\n    \\texttt{blockSize}\\f$ neighborhood of \\f$(x, y)\\f$ minus C */\n    ADAPTIVE_THRESH_MEAN_C     = 0,\n    /** the threshold value \\f$T(x, y)\\f$ is a weighted sum (cross-correlation with a Gaussian\n    window) of the \\f$\\texttt{blockSize} \\times \\texttt{blockSize}\\f$ neighborhood of \\f$(x, y)\\f$\n    minus C . The default sigma (standard deviation) is used for the specified blockSize . See\n    cv::getGaussianKernel*/\n    ADAPTIVE_THRESH_GAUSSIAN_C = 1\n};\n\n//! cv::undistort mode\nenum UndistortTypes {\n       PROJ_SPHERICAL_ORTHO  = 0,\n       PROJ_SPHERICAL_EQRECT = 1\n     };\n\n//! class of the pixel in GrabCut algorithm\nenum GrabCutClasses {\n    GC_BGD    = 0,  //!< an obvious background pixels\n    GC_FGD    = 1,  //!< an obvious foreground (object) pixel\n    GC_PR_BGD = 2,  //!< a possible background pixel\n    GC_PR_FGD = 3   //!< a possible foreground pixel\n};\n\n//! GrabCut algorithm flags\nenum GrabCutModes {\n    /** The function initializes the state and the mask using the provided rectangle. After that it\n    runs iterCount iterations of the algorithm. */\n    GC_INIT_WITH_RECT  = 0,\n    /** The function initializes the state using the provided mask. Note that GC_INIT_WITH_RECT\n    and GC_INIT_WITH_MASK can be combined. Then, all the pixels outside of the ROI are\n    automatically initialized with GC_BGD .*/\n    GC_INIT_WITH_MASK  = 1,\n    /** The value means that the algorithm should just resume. */\n    GC_EVAL            = 2\n};\n\n//! distanceTransform algorithm flags\nenum DistanceTransformLabelTypes {\n    /** each connected component of zeros in src (as well as all the non-zero pixels closest to the\n    connected component) will be assigned the same label */\n    DIST_LABEL_CCOMP = 0,\n    /** each zero pixel (and all the non-zero pixels closest to it) gets its own label. */\n    DIST_LABEL_PIXEL = 1\n};\n\n//! floodfill algorithm flags\nenum FloodFillFlags {\n    /** If set, the difference between the current pixel and seed pixel is considered. Otherwise,\n    the difference between neighbor pixels is considered (that is, the range is floating). */\n    FLOODFILL_FIXED_RANGE = 1 << 16,\n    /** If set, the function does not change the image ( newVal is ignored), and only fills the\n    mask with the value specified in bits 8-16 of flags as described above. This option only make\n    sense in function variants that have the mask parameter. */\n    FLOODFILL_MASK_ONLY   = 1 << 17\n};\n\n//! @} imgproc_misc\n\n//! @addtogroup imgproc_shape\n//! @{\n\n//! connected components algorithm output formats\nenum ConnectedComponentsTypes {\n    CC_STAT_LEFT   = 0, //!< The leftmost (x) coordinate which is the inclusive start of the bounding\n                        //!< box in the horizontal direction.\n    CC_STAT_TOP    = 1, //!< The topmost (y) coordinate which is the inclusive start of the bounding\n                        //!< box in the vertical direction.\n    CC_STAT_WIDTH  = 2, //!< The horizontal size of the bounding box\n    CC_STAT_HEIGHT = 3, //!< The vertical size of the bounding box\n    CC_STAT_AREA   = 4, //!< The total area (in pixels) of the connected component\n    CC_STAT_MAX    = 5\n};\n\n//! mode of the contour retrieval algorithm\nenum RetrievalModes {\n    /** retrieves only the extreme outer contours. It sets `hierarchy[i][2]=hierarchy[i][3]=-1` for\n    all the contours. */\n    RETR_EXTERNAL  = 0,\n    /** retrieves all of the contours without establishing any hierarchical relationships. */\n    RETR_LIST      = 1,\n    /** retrieves all of the contours and organizes them into a two-level hierarchy. At the top\n    level, there are external boundaries of the components. At the second level, there are\n    boundaries of the holes. If there is another contour inside a hole of a connected component, it\n    is still put at the top level. */\n    RETR_CCOMP     = 2,\n    /** retrieves all of the contours and reconstructs a full hierarchy of nested contours.*/\n    RETR_TREE      = 3,\n    RETR_FLOODFILL = 4 //!<\n};\n\n//! the contour approximation algorithm\nenum ContourApproximationModes {\n    /** stores absolutely all the contour points. That is, any 2 subsequent points (x1,y1) and\n    (x2,y2) of the contour will be either horizontal, vertical or diagonal neighbors, that is,\n    max(abs(x1-x2),abs(y2-y1))==1. */\n    CHAIN_APPROX_NONE      = 1,\n    /** compresses horizontal, vertical, and diagonal segments and leaves only their end points.\n    For example, an up-right rectangular contour is encoded with 4 points. */\n    CHAIN_APPROX_SIMPLE    = 2,\n    /** applies one of the flavors of the Teh-Chin chain approximation algorithm @cite TehChin89 */\n    CHAIN_APPROX_TC89_L1   = 3,\n    /** applies one of the flavors of the Teh-Chin chain approximation algorithm @cite TehChin89 */\n    CHAIN_APPROX_TC89_KCOS = 4\n};\n\n//! @} imgproc_shape\n\n//! Variants of a Hough transform\nenum HoughModes {\n\n    /** classical or standard Hough transform. Every line is represented by two floating-point\n    numbers \\f$(\\rho, \\theta)\\f$ , where \\f$\\rho\\f$ is a distance between (0,0) point and the line,\n    and \\f$\\theta\\f$ is the angle between x-axis and the normal to the line. Thus, the matrix must\n    be (the created sequence will be) of CV_32FC2 type */\n    HOUGH_STANDARD      = 0,\n    /** probabilistic Hough transform (more efficient in case if the picture contains a few long\n    linear segments). It returns line segments rather than the whole line. Each segment is\n    represented by starting and ending points, and the matrix must be (the created sequence will\n    be) of the CV_32SC4 type. */\n    HOUGH_PROBABILISTIC = 1,\n    /** multi-scale variant of the classical Hough transform. The lines are encoded the same way as\n    HOUGH_STANDARD. */\n    HOUGH_MULTI_SCALE   = 2,\n    HOUGH_GRADIENT      = 3 //!< basically *21HT*, described in @cite Yuen90\n};\n\n//! Variants of Line Segment %Detector\n//! @ingroup imgproc_feature\nenum LineSegmentDetectorModes {\n    LSD_REFINE_NONE = 0, //!< No refinement applied\n    LSD_REFINE_STD  = 1, //!< Standard refinement is applied. E.g. breaking arches into smaller straighter line approximations.\n    LSD_REFINE_ADV  = 2  //!< Advanced refinement. Number of false alarms is calculated, lines are\n                         //!< refined through increase of precision, decrement in size, etc.\n};\n\n/** Histogram comparison methods\n  @ingroup imgproc_hist\n*/\nenum HistCompMethods {\n    /** Correlation\n    \\f[d(H_1,H_2) =  \\frac{\\sum_I (H_1(I) - \\bar{H_1}) (H_2(I) - \\bar{H_2})}{\\sqrt{\\sum_I(H_1(I) - \\bar{H_1})^2 \\sum_I(H_2(I) - \\bar{H_2})^2}}\\f]\n    where\n    \\f[\\bar{H_k} =  \\frac{1}{N} \\sum _J H_k(J)\\f]\n    and \\f$N\\f$ is a total number of histogram bins. */\n    HISTCMP_CORREL        = 0,\n    /** Chi-Square\n    \\f[d(H_1,H_2) =  \\sum _I  \\frac{\\left(H_1(I)-H_2(I)\\right)^2}{H_1(I)}\\f] */\n    HISTCMP_CHISQR        = 1,\n    /** Intersection\n    \\f[d(H_1,H_2) =  \\sum _I  \\min (H_1(I), H_2(I))\\f] */\n    HISTCMP_INTERSECT     = 2,\n    /** Bhattacharyya distance\n    (In fact, OpenCV computes Hellinger distance, which is related to Bhattacharyya coefficient.)\n    \\f[d(H_1,H_2) =  \\sqrt{1 - \\frac{1}{\\sqrt{\\bar{H_1} \\bar{H_2} N^2}} \\sum_I \\sqrt{H_1(I) \\cdot H_2(I)}}\\f] */\n    HISTCMP_BHATTACHARYYA = 3,\n    HISTCMP_HELLINGER     = HISTCMP_BHATTACHARYYA, //!< Synonym for HISTCMP_BHATTACHARYYA\n    /** Alternative Chi-Square\n    \\f[d(H_1,H_2) =  2 * \\sum _I  \\frac{\\left(H_1(I)-H_2(I)\\right)^2}{H_1(I)+H_2(I)}\\f]\n    This alternative formula is regularly used for texture comparison. See e.g. @cite Puzicha1997 */\n    HISTCMP_CHISQR_ALT    = 4,\n    /** Kullback-Leibler divergence\n    \\f[d(H_1,H_2) = \\sum _I H_1(I) \\log \\left(\\frac{H_1(I)}{H_2(I)}\\right)\\f] */\n    HISTCMP_KL_DIV        = 5\n};\n\n/** the color conversion code\n@see @ref imgproc_color_conversions\n@ingroup imgproc_misc\n */\nenum ColorConversionCodes {\n    COLOR_BGR2BGRA     = 0, //!< add alpha channel to RGB or BGR image\n    COLOR_RGB2RGBA     = COLOR_BGR2BGRA,\n\n    COLOR_BGRA2BGR     = 1, //!< remove alpha channel from RGB or BGR image\n    COLOR_RGBA2RGB     = COLOR_BGRA2BGR,\n\n    COLOR_BGR2RGBA     = 2, //!< convert between RGB and BGR color spaces (with or without alpha channel)\n    COLOR_RGB2BGRA     = COLOR_BGR2RGBA,\n\n    COLOR_RGBA2BGR     = 3,\n    COLOR_BGRA2RGB     = COLOR_RGBA2BGR,\n\n    COLOR_BGR2RGB      = 4,\n    COLOR_RGB2BGR      = COLOR_BGR2RGB,\n\n    COLOR_BGRA2RGBA    = 5,\n    COLOR_RGBA2BGRA    = COLOR_BGRA2RGBA,\n\n    COLOR_BGR2GRAY     = 6, //!< convert between RGB/BGR and grayscale, @ref color_convert_rgb_gray \"color conversions\"\n    COLOR_RGB2GRAY     = 7,\n    COLOR_GRAY2BGR     = 8,\n    COLOR_GRAY2RGB     = COLOR_GRAY2BGR,\n    COLOR_GRAY2BGRA    = 9,\n    COLOR_GRAY2RGBA    = COLOR_GRAY2BGRA,\n    COLOR_BGRA2GRAY    = 10,\n    COLOR_RGBA2GRAY    = 11,\n\n    COLOR_BGR2BGR565   = 12, //!< convert between RGB/BGR and BGR565 (16-bit images)\n    COLOR_RGB2BGR565   = 13,\n    COLOR_BGR5652BGR   = 14,\n    COLOR_BGR5652RGB   = 15,\n    COLOR_BGRA2BGR565  = 16,\n    COLOR_RGBA2BGR565  = 17,\n    COLOR_BGR5652BGRA  = 18,\n    COLOR_BGR5652RGBA  = 19,\n\n    COLOR_GRAY2BGR565  = 20, //!< convert between grayscale to BGR565 (16-bit images)\n    COLOR_BGR5652GRAY  = 21,\n\n    COLOR_BGR2BGR555   = 22,  //!< convert between RGB/BGR and BGR555 (16-bit images)\n    COLOR_RGB2BGR555   = 23,\n    COLOR_BGR5552BGR   = 24,\n    COLOR_BGR5552RGB   = 25,\n    COLOR_BGRA2BGR555  = 26,\n    COLOR_RGBA2BGR555  = 27,\n    COLOR_BGR5552BGRA  = 28,\n    COLOR_BGR5552RGBA  = 29,\n\n    COLOR_GRAY2BGR555  = 30, //!< convert between grayscale and BGR555 (16-bit images)\n    COLOR_BGR5552GRAY  = 31,\n\n    COLOR_BGR2XYZ      = 32, //!< convert RGB/BGR to CIE XYZ, @ref color_convert_rgb_xyz \"color conversions\"\n    COLOR_RGB2XYZ      = 33,\n    COLOR_XYZ2BGR      = 34,\n    COLOR_XYZ2RGB      = 35,\n\n    COLOR_BGR2YCrCb    = 36, //!< convert RGB/BGR to luma-chroma (aka YCC), @ref color_convert_rgb_ycrcb \"color conversions\"\n    COLOR_RGB2YCrCb    = 37,\n    COLOR_YCrCb2BGR    = 38,\n    COLOR_YCrCb2RGB    = 39,\n\n    COLOR_BGR2HSV      = 40, //!< convert RGB/BGR to HSV (hue saturation value), @ref color_convert_rgb_hsv \"color conversions\"\n    COLOR_RGB2HSV      = 41,\n\n    COLOR_BGR2Lab      = 44, //!< convert RGB/BGR to CIE Lab, @ref color_convert_rgb_lab \"color conversions\"\n    COLOR_RGB2Lab      = 45,\n\n    COLOR_BGR2Luv      = 50, //!< convert RGB/BGR to CIE Luv, @ref color_convert_rgb_luv \"color conversions\"\n    COLOR_RGB2Luv      = 51,\n    COLOR_BGR2HLS      = 52, //!< convert RGB/BGR to HLS (hue lightness saturation), @ref color_convert_rgb_hls \"color conversions\"\n    COLOR_RGB2HLS      = 53,\n\n    COLOR_HSV2BGR      = 54, //!< backward conversions to RGB/BGR\n    COLOR_HSV2RGB      = 55,\n\n    COLOR_Lab2BGR      = 56,\n    COLOR_Lab2RGB      = 57,\n    COLOR_Luv2BGR      = 58,\n    COLOR_Luv2RGB      = 59,\n    COLOR_HLS2BGR      = 60,\n    COLOR_HLS2RGB      = 61,\n\n    COLOR_BGR2HSV_FULL = 66, //!<\n    COLOR_RGB2HSV_FULL = 67,\n    COLOR_BGR2HLS_FULL = 68,\n    COLOR_RGB2HLS_FULL = 69,\n\n    COLOR_HSV2BGR_FULL = 70,\n    COLOR_HSV2RGB_FULL = 71,\n    COLOR_HLS2BGR_FULL = 72,\n    COLOR_HLS2RGB_FULL = 73,\n\n    COLOR_LBGR2Lab     = 74,\n    COLOR_LRGB2Lab     = 75,\n    COLOR_LBGR2Luv     = 76,\n    COLOR_LRGB2Luv     = 77,\n\n    COLOR_Lab2LBGR     = 78,\n    COLOR_Lab2LRGB     = 79,\n    COLOR_Luv2LBGR     = 80,\n    COLOR_Luv2LRGB     = 81,\n\n    COLOR_BGR2YUV      = 82, //!< convert between RGB/BGR and YUV\n    COLOR_RGB2YUV      = 83,\n    COLOR_YUV2BGR      = 84,\n    COLOR_YUV2RGB      = 85,\n\n    //! YUV 4:2:0 family to RGB\n    COLOR_YUV2RGB_NV12  = 90,\n    COLOR_YUV2BGR_NV12  = 91,\n    COLOR_YUV2RGB_NV21  = 92,\n    COLOR_YUV2BGR_NV21  = 93,\n    COLOR_YUV420sp2RGB  = COLOR_YUV2RGB_NV21,\n    COLOR_YUV420sp2BGR  = COLOR_YUV2BGR_NV21,\n\n    COLOR_YUV2RGBA_NV12 = 94,\n    COLOR_YUV2BGRA_NV12 = 95,\n    COLOR_YUV2RGBA_NV21 = 96,\n    COLOR_YUV2BGRA_NV21 = 97,\n    COLOR_YUV420sp2RGBA = COLOR_YUV2RGBA_NV21,\n    COLOR_YUV420sp2BGRA = COLOR_YUV2BGRA_NV21,\n\n    COLOR_YUV2RGB_YV12  = 98,\n    COLOR_YUV2BGR_YV12  = 99,\n    COLOR_YUV2RGB_IYUV  = 100,\n    COLOR_YUV2BGR_IYUV  = 101,\n    COLOR_YUV2RGB_I420  = COLOR_YUV2RGB_IYUV,\n    COLOR_YUV2BGR_I420  = COLOR_YUV2BGR_IYUV,\n    COLOR_YUV420p2RGB   = COLOR_YUV2RGB_YV12,\n    COLOR_YUV420p2BGR   = COLOR_YUV2BGR_YV12,\n\n    COLOR_YUV2RGBA_YV12 = 102,\n    COLOR_YUV2BGRA_YV12 = 103,\n    COLOR_YUV2RGBA_IYUV = 104,\n    COLOR_YUV2BGRA_IYUV = 105,\n    COLOR_YUV2RGBA_I420 = COLOR_YUV2RGBA_IYUV,\n    COLOR_YUV2BGRA_I420 = COLOR_YUV2BGRA_IYUV,\n    COLOR_YUV420p2RGBA  = COLOR_YUV2RGBA_YV12,\n    COLOR_YUV420p2BGRA  = COLOR_YUV2BGRA_YV12,\n\n    COLOR_YUV2GRAY_420  = 106,\n    COLOR_YUV2GRAY_NV21 = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_NV12 = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_YV12 = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_IYUV = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_I420 = COLOR_YUV2GRAY_420,\n    COLOR_YUV420sp2GRAY = COLOR_YUV2GRAY_420,\n    COLOR_YUV420p2GRAY  = COLOR_YUV2GRAY_420,\n\n    //! YUV 4:2:2 family to RGB\n    COLOR_YUV2RGB_UYVY = 107,\n    COLOR_YUV2BGR_UYVY = 108,\n    //COLOR_YUV2RGB_VYUY = 109,\n    //COLOR_YUV2BGR_VYUY = 110,\n    COLOR_YUV2RGB_Y422 = COLOR_YUV2RGB_UYVY,\n    COLOR_YUV2BGR_Y422 = COLOR_YUV2BGR_UYVY,\n    COLOR_YUV2RGB_UYNV = COLOR_YUV2RGB_UYVY,\n    COLOR_YUV2BGR_UYNV = COLOR_YUV2BGR_UYVY,\n\n    COLOR_YUV2RGBA_UYVY = 111,\n    COLOR_YUV2BGRA_UYVY = 112,\n    //COLOR_YUV2RGBA_VYUY = 113,\n    //COLOR_YUV2BGRA_VYUY = 114,\n    COLOR_YUV2RGBA_Y422 = COLOR_YUV2RGBA_UYVY,\n    COLOR_YUV2BGRA_Y422 = COLOR_YUV2BGRA_UYVY,\n    COLOR_YUV2RGBA_UYNV = COLOR_YUV2RGBA_UYVY,\n    COLOR_YUV2BGRA_UYNV = COLOR_YUV2BGRA_UYVY,\n\n    COLOR_YUV2RGB_YUY2 = 115,\n    COLOR_YUV2BGR_YUY2 = 116,\n    COLOR_YUV2RGB_YVYU = 117,\n    COLOR_YUV2BGR_YVYU = 118,\n    COLOR_YUV2RGB_YUYV = COLOR_YUV2RGB_YUY2,\n    COLOR_YUV2BGR_YUYV = COLOR_YUV2BGR_YUY2,\n    COLOR_YUV2RGB_YUNV = COLOR_YUV2RGB_YUY2,\n    COLOR_YUV2BGR_YUNV = COLOR_YUV2BGR_YUY2,\n\n    COLOR_YUV2RGBA_YUY2 = 119,\n    COLOR_YUV2BGRA_YUY2 = 120,\n    COLOR_YUV2RGBA_YVYU = 121,\n    COLOR_YUV2BGRA_YVYU = 122,\n    COLOR_YUV2RGBA_YUYV = COLOR_YUV2RGBA_YUY2,\n    COLOR_YUV2BGRA_YUYV = COLOR_YUV2BGRA_YUY2,\n    COLOR_YUV2RGBA_YUNV = COLOR_YUV2RGBA_YUY2,\n    COLOR_YUV2BGRA_YUNV = COLOR_YUV2BGRA_YUY2,\n\n    COLOR_YUV2GRAY_UYVY = 123,\n    COLOR_YUV2GRAY_YUY2 = 124,\n    //CV_YUV2GRAY_VYUY    = CV_YUV2GRAY_UYVY,\n    COLOR_YUV2GRAY_Y422 = COLOR_YUV2GRAY_UYVY,\n    COLOR_YUV2GRAY_UYNV = COLOR_YUV2GRAY_UYVY,\n    COLOR_YUV2GRAY_YVYU = COLOR_YUV2GRAY_YUY2,\n    COLOR_YUV2GRAY_YUYV = COLOR_YUV2GRAY_YUY2,\n    COLOR_YUV2GRAY_YUNV = COLOR_YUV2GRAY_YUY2,\n\n    //! alpha premultiplication\n    COLOR_RGBA2mRGBA    = 125,\n    COLOR_mRGBA2RGBA    = 126,\n\n    //! RGB to YUV 4:2:0 family\n    COLOR_RGB2YUV_I420  = 127,\n    COLOR_BGR2YUV_I420  = 128,\n    COLOR_RGB2YUV_IYUV  = COLOR_RGB2YUV_I420,\n    COLOR_BGR2YUV_IYUV  = COLOR_BGR2YUV_I420,\n\n    COLOR_RGBA2YUV_I420 = 129,\n    COLOR_BGRA2YUV_I420 = 130,\n    COLOR_RGBA2YUV_IYUV = COLOR_RGBA2YUV_I420,\n    COLOR_BGRA2YUV_IYUV = COLOR_BGRA2YUV_I420,\n    COLOR_RGB2YUV_YV12  = 131,\n    COLOR_BGR2YUV_YV12  = 132,\n    COLOR_RGBA2YUV_YV12 = 133,\n    COLOR_BGRA2YUV_YV12 = 134,\n\n    //! Demosaicing\n    COLOR_BayerBG2BGR = 46,\n    COLOR_BayerGB2BGR = 47,\n    COLOR_BayerRG2BGR = 48,\n    COLOR_BayerGR2BGR = 49,\n\n    COLOR_BayerBG2RGB = COLOR_BayerRG2BGR,\n    COLOR_BayerGB2RGB = COLOR_BayerGR2BGR,\n    COLOR_BayerRG2RGB = COLOR_BayerBG2BGR,\n    COLOR_BayerGR2RGB = COLOR_BayerGB2BGR,\n\n    COLOR_BayerBG2GRAY = 86,\n    COLOR_BayerGB2GRAY = 87,\n    COLOR_BayerRG2GRAY = 88,\n    COLOR_BayerGR2GRAY = 89,\n\n    //! Demosaicing using Variable Number of Gradients\n    COLOR_BayerBG2BGR_VNG = 62,\n    COLOR_BayerGB2BGR_VNG = 63,\n    COLOR_BayerRG2BGR_VNG = 64,\n    COLOR_BayerGR2BGR_VNG = 65,\n\n    COLOR_BayerBG2RGB_VNG = COLOR_BayerRG2BGR_VNG,\n    COLOR_BayerGB2RGB_VNG = COLOR_BayerGR2BGR_VNG,\n    COLOR_BayerRG2RGB_VNG = COLOR_BayerBG2BGR_VNG,\n    COLOR_BayerGR2RGB_VNG = COLOR_BayerGB2BGR_VNG,\n\n    //! Edge-Aware Demosaicing\n    COLOR_BayerBG2BGR_EA  = 135,\n    COLOR_BayerGB2BGR_EA  = 136,\n    COLOR_BayerRG2BGR_EA  = 137,\n    COLOR_BayerGR2BGR_EA  = 138,\n\n    COLOR_BayerBG2RGB_EA  = COLOR_BayerRG2BGR_EA,\n    COLOR_BayerGB2RGB_EA  = COLOR_BayerGR2BGR_EA,\n    COLOR_BayerRG2RGB_EA  = COLOR_BayerBG2BGR_EA,\n    COLOR_BayerGR2RGB_EA  = COLOR_BayerGB2BGR_EA,\n\n\n    COLOR_COLORCVT_MAX  = 139\n};\n\n/** types of intersection between rectangles\n@ingroup imgproc_shape\n*/\nenum RectanglesIntersectTypes {\n    INTERSECT_NONE = 0, //!< No intersection\n    INTERSECT_PARTIAL  = 1, //!< There is a partial intersection\n    INTERSECT_FULL  = 2 //!< One of the rectangle is fully enclosed in the other\n};\n\n//! finds arbitrary template in the grayscale image using Generalized Hough Transform\nclass CV_EXPORTS GeneralizedHough : public Algorithm\n{\npublic:\n    //! set template to search\n    virtual void setTemplate(InputArray templ, Point templCenter = Point(-1, -1)) = 0;\n    virtual void setTemplate(InputArray edges, InputArray dx, InputArray dy, Point templCenter = Point(-1, -1)) = 0;\n\n    //! find template on image\n    virtual void detect(InputArray image, OutputArray positions, OutputArray votes = noArray()) = 0;\n    virtual void detect(InputArray edges, InputArray dx, InputArray dy, OutputArray positions, OutputArray votes = noArray()) = 0;\n\n    //! Canny low threshold.\n    virtual void setCannyLowThresh(int cannyLowThresh) = 0;\n    virtual int getCannyLowThresh() const = 0;\n\n    //! Canny high threshold.\n    virtual void setCannyHighThresh(int cannyHighThresh) = 0;\n    virtual int getCannyHighThresh() const = 0;\n\n    //! Minimum distance between the centers of the detected objects.\n    virtual void setMinDist(double minDist) = 0;\n    virtual double getMinDist() const = 0;\n\n    //! Inverse ratio of the accumulator resolution to the image resolution.\n    virtual void setDp(double dp) = 0;\n    virtual double getDp() const = 0;\n\n    //! Maximal size of inner buffers.\n    virtual void setMaxBufferSize(int maxBufferSize) = 0;\n    virtual int getMaxBufferSize() const = 0;\n};\n\n//! Ballard, D.H. (1981). Generalizing the Hough transform to detect arbitrary shapes. Pattern Recognition 13 (2): 111-122.\n//! Detects position only without traslation and rotation\nclass CV_EXPORTS GeneralizedHoughBallard : public GeneralizedHough\n{\npublic:\n    //! R-Table levels.\n    virtual void setLevels(int levels) = 0;\n    virtual int getLevels() const = 0;\n\n    //! The accumulator threshold for the template centers at the detection stage. The smaller it is, the more false positions may be detected.\n    virtual void setVotesThreshold(int votesThreshold) = 0;\n    virtual int getVotesThreshold() const = 0;\n};\n\n//! Guil, N., González-Linares, J.M. and Zapata, E.L. (1999). Bidimensional shape detection using an invariant approach. Pattern Recognition 32 (6): 1025-1038.\n//! Detects position, traslation and rotation\nclass CV_EXPORTS GeneralizedHoughGuil : public GeneralizedHough\n{\npublic:\n    //! Angle difference in degrees between two points in feature.\n    virtual void setXi(double xi) = 0;\n    virtual double getXi() const = 0;\n\n    //! Feature table levels.\n    virtual void setLevels(int levels) = 0;\n    virtual int getLevels() const = 0;\n\n    //! Maximal difference between angles that treated as equal.\n    virtual void setAngleEpsilon(double angleEpsilon) = 0;\n    virtual double getAngleEpsilon() const = 0;\n\n    //! Minimal rotation angle to detect in degrees.\n    virtual void setMinAngle(double minAngle) = 0;\n    virtual double getMinAngle() const = 0;\n\n    //! Maximal rotation angle to detect in degrees.\n    virtual void setMaxAngle(double maxAngle) = 0;\n    virtual double getMaxAngle() const = 0;\n\n    //! Angle step in degrees.\n    virtual void setAngleStep(double angleStep) = 0;\n    virtual double getAngleStep() const = 0;\n\n    //! Angle votes threshold.\n    virtual void setAngleThresh(int angleThresh) = 0;\n    virtual int getAngleThresh() const = 0;\n\n    //! Minimal scale to detect.\n    virtual void setMinScale(double minScale) = 0;\n    virtual double getMinScale() const = 0;\n\n    //! Maximal scale to detect.\n    virtual void setMaxScale(double maxScale) = 0;\n    virtual double getMaxScale() const = 0;\n\n    //! Scale step.\n    virtual void setScaleStep(double scaleStep) = 0;\n    virtual double getScaleStep() const = 0;\n\n    //! Scale votes threshold.\n    virtual void setScaleThresh(int scaleThresh) = 0;\n    virtual int getScaleThresh() const = 0;\n\n    //! Position votes threshold.\n    virtual void setPosThresh(int posThresh) = 0;\n    virtual int getPosThresh() const = 0;\n};\n\n\nclass CV_EXPORTS_W CLAHE : public Algorithm\n{\npublic:\n    CV_WRAP virtual void apply(InputArray src, OutputArray dst) = 0;\n\n    CV_WRAP virtual void setClipLimit(double clipLimit) = 0;\n    CV_WRAP virtual double getClipLimit() const = 0;\n\n    CV_WRAP virtual void setTilesGridSize(Size tileGridSize) = 0;\n    CV_WRAP virtual Size getTilesGridSize() const = 0;\n\n    CV_WRAP virtual void collectGarbage() = 0;\n};\n\n\nclass CV_EXPORTS_W Subdiv2D\n{\npublic:\n    enum { PTLOC_ERROR        = -2,\n           PTLOC_OUTSIDE_RECT = -1,\n           PTLOC_INSIDE       = 0,\n           PTLOC_VERTEX       = 1,\n           PTLOC_ON_EDGE      = 2\n         };\n\n    enum { NEXT_AROUND_ORG   = 0x00,\n           NEXT_AROUND_DST   = 0x22,\n           PREV_AROUND_ORG   = 0x11,\n           PREV_AROUND_DST   = 0x33,\n           NEXT_AROUND_LEFT  = 0x13,\n           NEXT_AROUND_RIGHT = 0x31,\n           PREV_AROUND_LEFT  = 0x20,\n           PREV_AROUND_RIGHT = 0x02\n         };\n\n    CV_WRAP Subdiv2D();\n    CV_WRAP Subdiv2D(Rect rect);\n    CV_WRAP void initDelaunay(Rect rect);\n\n    CV_WRAP int insert(Point2f pt);\n    CV_WRAP void insert(const std::vector<Point2f>& ptvec);\n    CV_WRAP int locate(Point2f pt, CV_OUT int& edge, CV_OUT int& vertex);\n\n    CV_WRAP int findNearest(Point2f pt, CV_OUT Point2f* nearestPt = 0);\n    CV_WRAP void getEdgeList(CV_OUT std::vector<Vec4f>& edgeList) const;\n    CV_WRAP void getTriangleList(CV_OUT std::vector<Vec6f>& triangleList) const;\n    CV_WRAP void getVoronoiFacetList(const std::vector<int>& idx, CV_OUT std::vector<std::vector<Point2f> >& facetList,\n                                     CV_OUT std::vector<Point2f>& facetCenters);\n\n    CV_WRAP Point2f getVertex(int vertex, CV_OUT int* firstEdge = 0) const;\n\n    CV_WRAP int getEdge( int edge, int nextEdgeType ) const;\n    CV_WRAP int nextEdge(int edge) const;\n    CV_WRAP int rotateEdge(int edge, int rotate) const;\n    CV_WRAP int symEdge(int edge) const;\n    CV_WRAP int edgeOrg(int edge, CV_OUT Point2f* orgpt = 0) const;\n    CV_WRAP int edgeDst(int edge, CV_OUT Point2f* dstpt = 0) const;\n\nprotected:\n    int newEdge();\n    void deleteEdge(int edge);\n    int newPoint(Point2f pt, bool isvirtual, int firstEdge = 0);\n    void deletePoint(int vtx);\n    void setEdgePoints( int edge, int orgPt, int dstPt );\n    void splice( int edgeA, int edgeB );\n    int connectEdges( int edgeA, int edgeB );\n    void swapEdges( int edge );\n    int isRightOf(Point2f pt, int edge) const;\n    void calcVoronoi();\n    void clearVoronoi();\n    void checkSubdiv() const;\n\n    struct CV_EXPORTS Vertex\n    {\n        Vertex();\n        Vertex(Point2f pt, bool _isvirtual, int _firstEdge=0);\n        bool isvirtual() const;\n        bool isfree() const;\n\n        int firstEdge;\n        int type;\n        Point2f pt;\n    };\n\n    struct CV_EXPORTS QuadEdge\n    {\n        QuadEdge();\n        QuadEdge(int edgeidx);\n        bool isfree() const;\n\n        int next[4];\n        int pt[4];\n    };\n\n    std::vector<Vertex> vtx;\n    std::vector<QuadEdge> qedges;\n    int freeQEdge;\n    int freePoint;\n    bool validGeometry;\n\n    int recentEdge;\n    Point2f topLeft;\n    Point2f bottomRight;\n};\n\n//! @addtogroup imgproc_feature\n//! @{\n\n/** @example lsd_lines.cpp\nAn example using the LineSegmentDetector\n*/\n\n/** @brief Line segment detector class\n\nfollowing the algorithm described at @cite Rafael12 .\n*/\nclass CV_EXPORTS_W LineSegmentDetector : public Algorithm\n{\npublic:\n\n    /** @brief Finds lines in the input image.\n\n    This is the output of the default parameters of the algorithm on the above shown image.\n\n    ![image](pics/building_lsd.png)\n\n    @param _image A grayscale (CV_8UC1) input image. If only a roi needs to be selected, use:\n    `lsd_ptr-\\>detect(image(roi), lines, ...); lines += Scalar(roi.x, roi.y, roi.x, roi.y);`\n    @param _lines A vector of Vec4i or Vec4f elements specifying the beginning and ending point of a line. Where\n    Vec4i/Vec4f is (x1, y1, x2, y2), point 1 is the start, point 2 - end. Returned lines are strictly\n    oriented depending on the gradient.\n    @param width Vector of widths of the regions, where the lines are found. E.g. Width of line.\n    @param prec Vector of precisions with which the lines are found.\n    @param nfa Vector containing number of false alarms in the line region, with precision of 10%. The\n    bigger the value, logarithmically better the detection.\n    - -1 corresponds to 10 mean false alarms\n    - 0 corresponds to 1 mean false alarm\n    - 1 corresponds to 0.1 mean false alarms\n    This vector will be calculated only when the objects type is LSD_REFINE_ADV.\n    */\n    CV_WRAP virtual void detect(InputArray _image, OutputArray _lines,\n                        OutputArray width = noArray(), OutputArray prec = noArray(),\n                        OutputArray nfa = noArray()) = 0;\n\n    /** @brief Draws the line segments on a given image.\n    @param _image The image, where the liens will be drawn. Should be bigger or equal to the image,\n    where the lines were found.\n    @param lines A vector of the lines that needed to be drawn.\n     */\n    CV_WRAP virtual void drawSegments(InputOutputArray _image, InputArray lines) = 0;\n\n    /** @brief Draws two groups of lines in blue and red, counting the non overlapping (mismatching) pixels.\n\n    @param size The size of the image, where lines1 and lines2 were found.\n    @param lines1 The first group of lines that needs to be drawn. It is visualized in blue color.\n    @param lines2 The second group of lines. They visualized in red color.\n    @param _image Optional image, where the lines will be drawn. The image should be color(3-channel)\n    in order for lines1 and lines2 to be drawn in the above mentioned colors.\n     */\n    CV_WRAP virtual int compareSegments(const Size& size, InputArray lines1, InputArray lines2, InputOutputArray _image = noArray()) = 0;\n\n    virtual ~LineSegmentDetector() { }\n};\n\n/** @brief Creates a smart pointer to a LineSegmentDetector object and initializes it.\n\nThe LineSegmentDetector algorithm is defined using the standard values. Only advanced users may want\nto edit those, as to tailor it for their own application.\n\n@param _refine The way found lines will be refined, see cv::LineSegmentDetectorModes\n@param _scale The scale of the image that will be used to find the lines. Range (0..1].\n@param _sigma_scale Sigma for Gaussian filter. It is computed as sigma = _sigma_scale/_scale.\n@param _quant Bound to the quantization error on the gradient norm.\n@param _ang_th Gradient angle tolerance in degrees.\n@param _log_eps Detection threshold: -log10(NFA) \\> log_eps. Used only when advancent refinement\nis chosen.\n@param _density_th Minimal density of aligned region points in the enclosing rectangle.\n@param _n_bins Number of bins in pseudo-ordering of gradient modulus.\n */\nCV_EXPORTS_W Ptr<LineSegmentDetector> createLineSegmentDetector(\n    int _refine = LSD_REFINE_STD, double _scale = 0.8,\n    double _sigma_scale = 0.6, double _quant = 2.0, double _ang_th = 22.5,\n    double _log_eps = 0, double _density_th = 0.7, int _n_bins = 1024);\n\n//! @} imgproc_feature\n\n//! @addtogroup imgproc_filter\n//! @{\n\n/** @brief Returns Gaussian filter coefficients.\n\nThe function computes and returns the \\f$\\texttt{ksize} \\times 1\\f$ matrix of Gaussian filter\ncoefficients:\n\n\\f[G_i= \\alpha *e^{-(i-( \\texttt{ksize} -1)/2)^2/(2* \\texttt{sigma}^2)},\\f]\n\nwhere \\f$i=0..\\texttt{ksize}-1\\f$ and \\f$\\alpha\\f$ is the scale factor chosen so that \\f$\\sum_i G_i=1\\f$.\n\nTwo of such generated kernels can be passed to sepFilter2D. Those functions automatically recognize\nsmoothing kernels (a symmetrical kernel with sum of weights equal to 1) and handle them accordingly.\nYou may also use the higher-level GaussianBlur.\n@param ksize Aperture size. It should be odd ( \\f$\\texttt{ksize} \\mod 2 = 1\\f$ ) and positive.\n@param sigma Gaussian standard deviation. If it is non-positive, it is computed from ksize as\n`sigma = 0.3\\*((ksize-1)\\*0.5 - 1) + 0.8`.\n@param ktype Type of filter coefficients. It can be CV_32F or CV_64F .\n@sa  sepFilter2D, getDerivKernels, getStructuringElement, GaussianBlur\n */\nCV_EXPORTS_W Mat getGaussianKernel( int ksize, double sigma, int ktype = CV_64F );\n\n/** @brief Returns filter coefficients for computing spatial image derivatives.\n\nThe function computes and returns the filter coefficients for spatial image derivatives. When\n`ksize=CV_SCHARR`, the Scharr \\f$3 \\times 3\\f$ kernels are generated (see cv::Scharr). Otherwise, Sobel\nkernels are generated (see cv::Sobel). The filters are normally passed to sepFilter2D or to\n\n@param kx Output matrix of row filter coefficients. It has the type ktype .\n@param ky Output matrix of column filter coefficients. It has the type ktype .\n@param dx Derivative order in respect of x.\n@param dy Derivative order in respect of y.\n@param ksize Aperture size. It can be CV_SCHARR, 1, 3, 5, or 7.\n@param normalize Flag indicating whether to normalize (scale down) the filter coefficients or not.\nTheoretically, the coefficients should have the denominator \\f$=2^{ksize*2-dx-dy-2}\\f$. If you are\ngoing to filter floating-point images, you are likely to use the normalized kernels. But if you\ncompute derivatives of an 8-bit image, store the results in a 16-bit image, and wish to preserve\nall the fractional bits, you may want to set normalize=false .\n@param ktype Type of filter coefficients. It can be CV_32f or CV_64F .\n */\nCV_EXPORTS_W void getDerivKernels( OutputArray kx, OutputArray ky,\n                                   int dx, int dy, int ksize,\n                                   bool normalize = false, int ktype = CV_32F );\n\n/** @brief Returns Gabor filter coefficients.\n\nFor more details about gabor filter equations and parameters, see: [Gabor\nFilter](http://en.wikipedia.org/wiki/Gabor_filter).\n\n@param ksize Size of the filter returned.\n@param sigma Standard deviation of the gaussian envelope.\n@param theta Orientation of the normal to the parallel stripes of a Gabor function.\n@param lambd Wavelength of the sinusoidal factor.\n@param gamma Spatial aspect ratio.\n@param psi Phase offset.\n@param ktype Type of filter coefficients. It can be CV_32F or CV_64F .\n */\nCV_EXPORTS_W Mat getGaborKernel( Size ksize, double sigma, double theta, double lambd,\n                                 double gamma, double psi = CV_PI*0.5, int ktype = CV_64F );\n\n//! returns \"magic\" border value for erosion and dilation. It is automatically transformed to Scalar::all(-DBL_MAX) for dilation.\nstatic inline Scalar morphologyDefaultBorderValue() { return Scalar::all(DBL_MAX); }\n\n/** @brief Returns a structuring element of the specified size and shape for morphological operations.\n\nThe function constructs and returns the structuring element that can be further passed to cv::erode,\ncv::dilate or cv::morphologyEx. But you can also construct an arbitrary binary mask yourself and use it as\nthe structuring element.\n\n@param shape Element shape that could be one of cv::MorphShapes\n@param ksize Size of the structuring element.\n@param anchor Anchor position within the element. The default value \\f$(-1, -1)\\f$ means that the\nanchor is at the center. Note that only the shape of a cross-shaped element depends on the anchor\nposition. In other cases the anchor just regulates how much the result of the morphological\noperation is shifted.\n */\nCV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));\n\n/** @brief Blurs an image using the median filter.\n\nThe function smoothes an image using the median filter with the \\f$\\texttt{ksize} \\times\n\\texttt{ksize}\\f$ aperture. Each channel of a multi-channel image is processed independently.\nIn-place operation is supported.\n\n@param src input 1-, 3-, or 4-channel image; when ksize is 3 or 5, the image depth should be\nCV_8U, CV_16U, or CV_32F, for larger aperture sizes, it can only be CV_8U.\n@param dst destination array of the same size and type as src.\n@param ksize aperture linear size; it must be odd and greater than 1, for example: 3, 5, 7 ...\n@sa  bilateralFilter, blur, boxFilter, GaussianBlur\n */\nCV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );\n\n/** @brief Blurs an image using a Gaussian filter.\n\nThe function convolves the source image with the specified Gaussian kernel. In-place filtering is\nsupported.\n\n@param src input image; the image can have any number of channels, which are processed\nindependently, but the depth should be CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.\n@param dst output image of the same size and type as src.\n@param ksize Gaussian kernel size. ksize.width and ksize.height can differ but they both must be\npositive and odd. Or, they can be zero's and then they are computed from sigma.\n@param sigmaX Gaussian kernel standard deviation in X direction.\n@param sigmaY Gaussian kernel standard deviation in Y direction; if sigmaY is zero, it is set to be\nequal to sigmaX, if both sigmas are zeros, they are computed from ksize.width and ksize.height,\nrespectively (see cv::getGaussianKernel for details); to fully control the result regardless of\npossible future modifications of all this semantics, it is recommended to specify all of ksize,\nsigmaX, and sigmaY.\n@param borderType pixel extrapolation method, see cv::BorderTypes\n\n@sa  sepFilter2D, filter2D, blur, boxFilter, bilateralFilter, medianBlur\n */\nCV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,\n                                double sigmaX, double sigmaY = 0,\n                                int borderType = BORDER_DEFAULT );\n\n/** @brief Applies the bilateral filter to an image.\n\nThe function applies bilateral filtering to the input image, as described in\nhttp://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html\nbilateralFilter can reduce unwanted noise very well while keeping edges fairly sharp. However, it is\nvery slow compared to most filters.\n\n_Sigma values_: For simplicity, you can set the 2 sigma values to be the same. If they are small (\\<\n10), the filter will not have much effect, whereas if they are large (\\> 150), they will have a very\nstrong effect, making the image look \"cartoonish\".\n\n_Filter size_: Large filters (d \\> 5) are very slow, so it is recommended to use d=5 for real-time\napplications, and perhaps d=9 for offline applications that need heavy noise filtering.\n\nThis filter does not work inplace.\n@param src Source 8-bit or floating-point, 1-channel or 3-channel image.\n@param dst Destination image of the same size and type as src .\n@param d Diameter of each pixel neighborhood that is used during filtering. If it is non-positive,\nit is computed from sigmaSpace.\n@param sigmaColor Filter sigma in the color space. A larger value of the parameter means that\nfarther colors within the pixel neighborhood (see sigmaSpace) will be mixed together, resulting\nin larger areas of semi-equal color.\n@param sigmaSpace Filter sigma in the coordinate space. A larger value of the parameter means that\nfarther pixels will influence each other as long as their colors are close enough (see sigmaColor\n). When d\\>0, it specifies the neighborhood size regardless of sigmaSpace. Otherwise, d is\nproportional to sigmaSpace.\n@param borderType border mode used to extrapolate pixels outside of the image, see cv::BorderTypes\n */\nCV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,\n                                   double sigmaColor, double sigmaSpace,\n                                   int borderType = BORDER_DEFAULT );\n\n/** @brief Blurs an image using the box filter.\n\nThe function smoothes an image using the kernel:\n\n\\f[\\texttt{K} =  \\alpha \\begin{bmatrix} 1 & 1 & 1 &  \\cdots & 1 & 1  \\\\ 1 & 1 & 1 &  \\cdots & 1 & 1  \\\\ \\hdotsfor{6} \\\\ 1 & 1 & 1 &  \\cdots & 1 & 1 \\end{bmatrix}\\f]\n\nwhere\n\n\\f[\\alpha = \\fork{\\frac{1}{\\texttt{ksize.width*ksize.height}}}{when \\texttt{normalize=true}}{1}{otherwise}\\f]\n\nUnnormalized box filter is useful for computing various integral characteristics over each pixel\nneighborhood, such as covariance matrices of image derivatives (used in dense optical flow\nalgorithms, and so on). If you need to compute pixel sums over variable-size windows, use cv::integral.\n\n@param src input image.\n@param dst output image of the same size and type as src.\n@param ddepth the output image depth (-1 to use src.depth()).\n@param ksize blurring kernel size.\n@param anchor anchor point; default value Point(-1,-1) means that the anchor is at the kernel\ncenter.\n@param normalize flag, specifying whether the kernel is normalized by its area or not.\n@param borderType border mode used to extrapolate pixels outside of the image, see cv::BorderTypes\n@sa  blur, bilateralFilter, GaussianBlur, medianBlur, integral\n */\nCV_EXPORTS_W void boxFilter( InputArray src, OutputArray dst, int ddepth,\n                             Size ksize, Point anchor = Point(-1,-1),\n                             bool normalize = true,\n                             int borderType = BORDER_DEFAULT );\n\n/** @brief Calculates the normalized sum of squares of the pixel values overlapping the filter.\n\nFor every pixel \\f$ (x, y) \\f$ in the source image, the function calculates the sum of squares of those neighboring\npixel values which overlap the filter placed over the pixel \\f$ (x, y) \\f$.\n\nThe unnormalized square box filter can be useful in computing local image statistics such as the the local\nvariance and standard deviation around the neighborhood of a pixel.\n\n@param _src input image\n@param _dst output image of the same size and type as _src\n@param ddepth the output image depth (-1 to use src.depth())\n@param ksize kernel size\n@param anchor kernel anchor point. The default value of Point(-1, -1) denotes that the anchor is at the kernel\ncenter.\n@param normalize flag, specifying whether the kernel is to be normalized by it's area or not.\n@param borderType border mode used to extrapolate pixels outside of the image, see cv::BorderTypes\n@sa boxFilter\n*/\nCV_EXPORTS_W void sqrBoxFilter( InputArray _src, OutputArray _dst, int ddepth,\n                                Size ksize, Point anchor = Point(-1, -1),\n                                bool normalize = true,\n                                int borderType = BORDER_DEFAULT );\n\n/** @brief Blurs an image using the normalized box filter.\n\nThe function smoothes an image using the kernel:\n\n\\f[\\texttt{K} =  \\frac{1}{\\texttt{ksize.width*ksize.height}} \\begin{bmatrix} 1 & 1 & 1 &  \\cdots & 1 & 1  \\\\ 1 & 1 & 1 &  \\cdots & 1 & 1  \\\\ \\hdotsfor{6} \\\\ 1 & 1 & 1 &  \\cdots & 1 & 1  \\\\ \\end{bmatrix}\\f]\n\nThe call `blur(src, dst, ksize, anchor, borderType)` is equivalent to `boxFilter(src, dst, src.type(),\nanchor, true, borderType)`.\n\n@param src input image; it can have any number of channels, which are processed independently, but\nthe depth should be CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.\n@param dst output image of the same size and type as src.\n@param ksize blurring kernel size.\n@param anchor anchor point; default value Point(-1,-1) means that the anchor is at the kernel\ncenter.\n@param borderType border mode used to extrapolate pixels outside of the image, see cv::BorderTypes\n@sa  boxFilter, bilateralFilter, GaussianBlur, medianBlur\n */\nCV_EXPORTS_W void blur( InputArray src, OutputArray dst,\n                        Size ksize, Point anchor = Point(-1,-1),\n                        int borderType = BORDER_DEFAULT );\n\n/** @brief Convolves an image with the kernel.\n\nThe function applies an arbitrary linear filter to an image. In-place operation is supported. When\nthe aperture is partially outside the image, the function interpolates outlier pixel values\naccording to the specified border mode.\n\nThe function does actually compute correlation, not the convolution:\n\n\\f[\\texttt{dst} (x,y) =  \\sum _{ \\stackrel{0\\leq x' < \\texttt{kernel.cols},}{0\\leq y' < \\texttt{kernel.rows}} }  \\texttt{kernel} (x',y')* \\texttt{src} (x+x'- \\texttt{anchor.x} ,y+y'- \\texttt{anchor.y} )\\f]\n\nThat is, the kernel is not mirrored around the anchor point. If you need a real convolution, flip\nthe kernel using cv::flip and set the new anchor to `(kernel.cols - anchor.x - 1, kernel.rows -\nanchor.y - 1)`.\n\nThe function uses the DFT-based algorithm in case of sufficiently large kernels (~`11 x 11` or\nlarger) and the direct algorithm for small kernels.\n\n@param src input image.\n@param dst output image of the same size and the same number of channels as src.\n@param ddepth desired depth of the destination image, see @ref filter_depths \"combinations\"\n@param kernel convolution kernel (or rather a correlation kernel), a single-channel floating point\nmatrix; if you want to apply different kernels to different channels, split the image into\nseparate color planes using split and process them individually.\n@param anchor anchor of the kernel that indicates the relative position of a filtered point within\nthe kernel; the anchor should lie within the kernel; default value (-1,-1) means that the anchor\nis at the kernel center.\n@param delta optional value added to the filtered pixels before storing them in dst.\n@param borderType pixel extrapolation method, see cv::BorderTypes\n@sa  sepFilter2D, dft, matchTemplate\n */\nCV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth,\n                            InputArray kernel, Point anchor = Point(-1,-1),\n                            double delta = 0, int borderType = BORDER_DEFAULT );\n\n/** @brief Applies a separable linear filter to an image.\n\nThe function applies a separable linear filter to the image. That is, first, every row of src is\nfiltered with the 1D kernel kernelX. Then, every column of the result is filtered with the 1D\nkernel kernelY. The final result shifted by delta is stored in dst .\n\n@param src Source image.\n@param dst Destination image of the same size and the same number of channels as src .\n@param ddepth Destination image depth, see @ref filter_depths \"combinations\"\n@param kernelX Coefficients for filtering each row.\n@param kernelY Coefficients for filtering each column.\n@param anchor Anchor position within the kernel. The default value \\f$(-1,-1)\\f$ means that the anchor\nis at the kernel center.\n@param delta Value added to the filtered results before storing them.\n@param borderType Pixel extrapolation method, see cv::BorderTypes\n@sa  filter2D, Sobel, GaussianBlur, boxFilter, blur\n */\nCV_EXPORTS_W void sepFilter2D( InputArray src, OutputArray dst, int ddepth,\n                               InputArray kernelX, InputArray kernelY,\n                               Point anchor = Point(-1,-1),\n                               double delta = 0, int borderType = BORDER_DEFAULT );\n\n/** @brief Calculates the first, second, third, or mixed image derivatives using an extended Sobel operator.\n\nIn all cases except one, the \\f$\\texttt{ksize} \\times \\texttt{ksize}\\f$ separable kernel is used to\ncalculate the derivative. When \\f$\\texttt{ksize = 1}\\f$, the \\f$3 \\times 1\\f$ or \\f$1 \\times 3\\f$\nkernel is used (that is, no Gaussian smoothing is done). `ksize = 1` can only be used for the first\nor the second x- or y- derivatives.\n\nThere is also the special value `ksize = CV_SCHARR (-1)` that corresponds to the \\f$3\\times3\\f$ Scharr\nfilter that may give more accurate results than the \\f$3\\times3\\f$ Sobel. The Scharr aperture is\n\n\\f[\\vecthreethree{-3}{0}{3}{-10}{0}{10}{-3}{0}{3}\\f]\n\nfor the x-derivative, or transposed for the y-derivative.\n\nThe function calculates an image derivative by convolving the image with the appropriate kernel:\n\n\\f[\\texttt{dst} =  \\frac{\\partial^{xorder+yorder} \\texttt{src}}{\\partial x^{xorder} \\partial y^{yorder}}\\f]\n\nThe Sobel operators combine Gaussian smoothing and differentiation, so the result is more or less\nresistant to the noise. Most often, the function is called with ( xorder = 1, yorder = 0, ksize = 3)\nor ( xorder = 0, yorder = 1, ksize = 3) to calculate the first x- or y- image derivative. The first\ncase corresponds to a kernel of:\n\n\\f[\\vecthreethree{-1}{0}{1}{-2}{0}{2}{-1}{0}{1}\\f]\n\nThe second case corresponds to a kernel of:\n\n\\f[\\vecthreethree{-1}{-2}{-1}{0}{0}{0}{1}{2}{1}\\f]\n\n@param src input image.\n@param dst output image of the same size and the same number of channels as src .\n@param ddepth output image depth, see @ref filter_depths \"combinations\"; in the case of\n    8-bit input images it will result in truncated derivatives.\n@param dx order of the derivative x.\n@param dy order of the derivative y.\n@param ksize size of the extended Sobel kernel; it must be 1, 3, 5, or 7.\n@param scale optional scale factor for the computed derivative values; by default, no scaling is\napplied (see cv::getDerivKernels for details).\n@param delta optional delta value that is added to the results prior to storing them in dst.\n@param borderType pixel extrapolation method, see cv::BorderTypes\n@sa  Scharr, Laplacian, sepFilter2D, filter2D, GaussianBlur, cartToPolar\n */\nCV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth,\n                         int dx, int dy, int ksize = 3,\n                         double scale = 1, double delta = 0,\n                         int borderType = BORDER_DEFAULT );\n\n/** @brief Calculates the first order image derivative in both x and y using a Sobel operator\n\nEquivalent to calling:\n\n@code\nSobel( src, dx, CV_16SC1, 1, 0, 3 );\nSobel( src, dy, CV_16SC1, 0, 1, 3 );\n@endcode\n\n@param src input image.\n@param dx output image with first-order derivative in x.\n@param dy output image with first-order derivative in y.\n@param ksize size of Sobel kernel. It must be 3.\n@param borderType pixel extrapolation method, see cv::BorderTypes\n\n@sa Sobel\n */\n\nCV_EXPORTS_W void spatialGradient( InputArray src, OutputArray dx,\n                                   OutputArray dy, int ksize = 3,\n                                   int borderType = BORDER_DEFAULT );\n\n/** @brief Calculates the first x- or y- image derivative using Scharr operator.\n\nThe function computes the first x- or y- spatial image derivative using the Scharr operator. The\ncall\n\n\\f[\\texttt{Scharr(src, dst, ddepth, dx, dy, scale, delta, borderType)}\\f]\n\nis equivalent to\n\n\\f[\\texttt{Sobel(src, dst, ddepth, dx, dy, CV\\_SCHARR, scale, delta, borderType)} .\\f]\n\n@param src input image.\n@param dst output image of the same size and the same number of channels as src.\n@param ddepth output image depth, see @ref filter_depths \"combinations\"\n@param dx order of the derivative x.\n@param dy order of the derivative y.\n@param scale optional scale factor for the computed derivative values; by default, no scaling is\napplied (see getDerivKernels for details).\n@param delta optional delta value that is added to the results prior to storing them in dst.\n@param borderType pixel extrapolation method, see cv::BorderTypes\n@sa  cartToPolar\n */\nCV_EXPORTS_W void Scharr( InputArray src, OutputArray dst, int ddepth,\n                          int dx, int dy, double scale = 1, double delta = 0,\n                          int borderType = BORDER_DEFAULT );\n\n/** @example laplace.cpp\n  An example using Laplace transformations for edge detection\n*/\n\n/** @brief Calculates the Laplacian of an image.\n\nThe function calculates the Laplacian of the source image by adding up the second x and y\nderivatives calculated using the Sobel operator:\n\n\\f[\\texttt{dst} =  \\Delta \\texttt{src} =  \\frac{\\partial^2 \\texttt{src}}{\\partial x^2} +  \\frac{\\partial^2 \\texttt{src}}{\\partial y^2}\\f]\n\nThis is done when `ksize > 1`. When `ksize == 1`, the Laplacian is computed by filtering the image\nwith the following \\f$3 \\times 3\\f$ aperture:\n\n\\f[\\vecthreethree {0}{1}{0}{1}{-4}{1}{0}{1}{0}\\f]\n\n@param src Source image.\n@param dst Destination image of the same size and the same number of channels as src .\n@param ddepth Desired depth of the destination image.\n@param ksize Aperture size used to compute the second-derivative filters. See getDerivKernels for\ndetails. The size must be positive and odd.\n@param scale Optional scale factor for the computed Laplacian values. By default, no scaling is\napplied. See getDerivKernels for details.\n@param delta Optional delta value that is added to the results prior to storing them in dst .\n@param borderType Pixel extrapolation method, see cv::BorderTypes\n@sa  Sobel, Scharr\n */\nCV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth,\n                             int ksize = 1, double scale = 1, double delta = 0,\n                             int borderType = BORDER_DEFAULT );\n\n//! @} imgproc_filter\n\n//! @addtogroup imgproc_feature\n//! @{\n\n/** @example edge.cpp\n  An example on using the canny edge detector\n*/\n\n/** @brief Finds edges in an image using the Canny algorithm @cite Canny86 .\n\nThe function finds edges in the input image image and marks them in the output map edges using the\nCanny algorithm. The smallest value between threshold1 and threshold2 is used for edge linking. The\nlargest value is used to find initial segments of strong edges. See\n<http://en.wikipedia.org/wiki/Canny_edge_detector>\n\n@param image 8-bit input image.\n@param edges output edge map; single channels 8-bit image, which has the same size as image .\n@param threshold1 first threshold for the hysteresis procedure.\n@param threshold2 second threshold for the hysteresis procedure.\n@param apertureSize aperture size for the Sobel operator.\n@param L2gradient a flag, indicating whether a more accurate \\f$L_2\\f$ norm\n\\f$=\\sqrt{(dI/dx)^2 + (dI/dy)^2}\\f$ should be used to calculate the image gradient magnitude (\nL2gradient=true ), or whether the default \\f$L_1\\f$ norm \\f$=|dI/dx|+|dI/dy|\\f$ is enough (\nL2gradient=false ).\n */\nCV_EXPORTS_W void Canny( InputArray image, OutputArray edges,\n                         double threshold1, double threshold2,\n                         int apertureSize = 3, bool L2gradient = false );\n\n/** @brief Calculates the minimal eigenvalue of gradient matrices for corner detection.\n\nThe function is similar to cornerEigenValsAndVecs but it calculates and stores only the minimal\neigenvalue of the covariance matrix of derivatives, that is, \\f$\\min(\\lambda_1, \\lambda_2)\\f$ in terms\nof the formulae in the cornerEigenValsAndVecs description.\n\n@param src Input single-channel 8-bit or floating-point image.\n@param dst Image to store the minimal eigenvalues. It has the type CV_32FC1 and the same size as\nsrc .\n@param blockSize Neighborhood size (see the details on cornerEigenValsAndVecs ).\n@param ksize Aperture parameter for the Sobel operator.\n@param borderType Pixel extrapolation method. See cv::BorderTypes.\n */\nCV_EXPORTS_W void cornerMinEigenVal( InputArray src, OutputArray dst,\n                                     int blockSize, int ksize = 3,\n                                     int borderType = BORDER_DEFAULT );\n\n/** @brief Harris corner detector.\n\nThe function runs the Harris corner detector on the image. Similarly to cornerMinEigenVal and\ncornerEigenValsAndVecs , for each pixel \\f$(x, y)\\f$ it calculates a \\f$2\\times2\\f$ gradient covariance\nmatrix \\f$M^{(x,y)}\\f$ over a \\f$\\texttt{blockSize} \\times \\texttt{blockSize}\\f$ neighborhood. Then, it\ncomputes the following characteristic:\n\n\\f[\\texttt{dst} (x,y) =  \\mathrm{det} M^{(x,y)} - k  \\cdot \\left ( \\mathrm{tr} M^{(x,y)} \\right )^2\\f]\n\nCorners in the image can be found as the local maxima of this response map.\n\n@param src Input single-channel 8-bit or floating-point image.\n@param dst Image to store the Harris detector responses. It has the type CV_32FC1 and the same\nsize as src .\n@param blockSize Neighborhood size (see the details on cornerEigenValsAndVecs ).\n@param ksize Aperture parameter for the Sobel operator.\n@param k Harris detector free parameter. See the formula below.\n@param borderType Pixel extrapolation method. See cv::BorderTypes.\n */\nCV_EXPORTS_W void cornerHarris( InputArray src, OutputArray dst, int blockSize,\n                                int ksize, double k,\n                                int borderType = BORDER_DEFAULT );\n\n/** @brief Calculates eigenvalues and eigenvectors of image blocks for corner detection.\n\nFor every pixel \\f$p\\f$ , the function cornerEigenValsAndVecs considers a blockSize \\f$\\times\\f$ blockSize\nneighborhood \\f$S(p)\\f$ . It calculates the covariation matrix of derivatives over the neighborhood as:\n\n\\f[M =  \\begin{bmatrix} \\sum _{S(p)}(dI/dx)^2 &  \\sum _{S(p)}dI/dx dI/dy  \\\\ \\sum _{S(p)}dI/dx dI/dy &  \\sum _{S(p)}(dI/dy)^2 \\end{bmatrix}\\f]\n\nwhere the derivatives are computed using the Sobel operator.\n\nAfter that, it finds eigenvectors and eigenvalues of \\f$M\\f$ and stores them in the destination image as\n\\f$(\\lambda_1, \\lambda_2, x_1, y_1, x_2, y_2)\\f$ where\n\n-   \\f$\\lambda_1, \\lambda_2\\f$ are the non-sorted eigenvalues of \\f$M\\f$\n-   \\f$x_1, y_1\\f$ are the eigenvectors corresponding to \\f$\\lambda_1\\f$\n-   \\f$x_2, y_2\\f$ are the eigenvectors corresponding to \\f$\\lambda_2\\f$\n\nThe output of the function can be used for robust edge or corner detection.\n\n@param src Input single-channel 8-bit or floating-point image.\n@param dst Image to store the results. It has the same size as src and the type CV_32FC(6) .\n@param blockSize Neighborhood size (see details below).\n@param ksize Aperture parameter for the Sobel operator.\n@param borderType Pixel extrapolation method. See cv::BorderTypes.\n\n@sa  cornerMinEigenVal, cornerHarris, preCornerDetect\n */\nCV_EXPORTS_W void cornerEigenValsAndVecs( InputArray src, OutputArray dst,\n                                          int blockSize, int ksize,\n                                          int borderType = BORDER_DEFAULT );\n\n/** @brief Calculates a feature map for corner detection.\n\nThe function calculates the complex spatial derivative-based function of the source image\n\n\\f[\\texttt{dst} = (D_x  \\texttt{src} )^2  \\cdot D_{yy}  \\texttt{src} + (D_y  \\texttt{src} )^2  \\cdot D_{xx}  \\texttt{src} - 2 D_x  \\texttt{src} \\cdot D_y  \\texttt{src} \\cdot D_{xy}  \\texttt{src}\\f]\n\nwhere \\f$D_x\\f$,\\f$D_y\\f$ are the first image derivatives, \\f$D_{xx}\\f$,\\f$D_{yy}\\f$ are the second image\nderivatives, and \\f$D_{xy}\\f$ is the mixed derivative.\n\nThe corners can be found as local maximums of the functions, as shown below:\n@code\n    Mat corners, dilated_corners;\n    preCornerDetect(image, corners, 3);\n    // dilation with 3x3 rectangular structuring element\n    dilate(corners, dilated_corners, Mat(), 1);\n    Mat corner_mask = corners == dilated_corners;\n@endcode\n\n@param src Source single-channel 8-bit of floating-point image.\n@param dst Output image that has the type CV_32F and the same size as src .\n@param ksize %Aperture size of the Sobel .\n@param borderType Pixel extrapolation method. See cv::BorderTypes.\n */\nCV_EXPORTS_W void preCornerDetect( InputArray src, OutputArray dst, int ksize,\n                                   int borderType = BORDER_DEFAULT );\n\n/** @brief Refines the corner locations.\n\nThe function iterates to find the sub-pixel accurate location of corners or radial saddle points, as\nshown on the figure below.\n\n![image](pics/cornersubpix.png)\n\nSub-pixel accurate corner locator is based on the observation that every vector from the center \\f$q\\f$\nto a point \\f$p\\f$ located within a neighborhood of \\f$q\\f$ is orthogonal to the image gradient at \\f$p\\f$\nsubject to image and measurement noise. Consider the expression:\n\n\\f[\\epsilon _i = {DI_{p_i}}^T  \\cdot (q - p_i)\\f]\n\nwhere \\f${DI_{p_i}}\\f$ is an image gradient at one of the points \\f$p_i\\f$ in a neighborhood of \\f$q\\f$ . The\nvalue of \\f$q\\f$ is to be found so that \\f$\\epsilon_i\\f$ is minimized. A system of equations may be set up\nwith \\f$\\epsilon_i\\f$ set to zero:\n\n\\f[\\sum _i(DI_{p_i}  \\cdot {DI_{p_i}}^T) -  \\sum _i(DI_{p_i}  \\cdot {DI_{p_i}}^T  \\cdot p_i)\\f]\n\nwhere the gradients are summed within a neighborhood (\"search window\") of \\f$q\\f$ . Calling the first\ngradient term \\f$G\\f$ and the second gradient term \\f$b\\f$ gives:\n\n\\f[q = G^{-1}  \\cdot b\\f]\n\nThe algorithm sets the center of the neighborhood window at this new center \\f$q\\f$ and then iterates\nuntil the center stays within a set threshold.\n\n@param image Input image.\n@param corners Initial coordinates of the input corners and refined coordinates provided for\noutput.\n@param winSize Half of the side length of the search window. For example, if winSize=Size(5,5) ,\nthen a \\f$5*2+1 \\times 5*2+1 = 11 \\times 11\\f$ search window is used.\n@param zeroZone Half of the size of the dead region in the middle of the search zone over which\nthe summation in the formula below is not done. It is used sometimes to avoid possible\nsingularities of the autocorrelation matrix. The value of (-1,-1) indicates that there is no such\na size.\n@param criteria Criteria for termination of the iterative process of corner refinement. That is,\nthe process of corner position refinement stops either after criteria.maxCount iterations or when\nthe corner position moves by less than criteria.epsilon on some iteration.\n */\nCV_EXPORTS_W void cornerSubPix( InputArray image, InputOutputArray corners,\n                                Size winSize, Size zeroZone,\n                                TermCriteria criteria );\n\n/** @brief Determines strong corners on an image.\n\nThe function finds the most prominent corners in the image or in the specified image region, as\ndescribed in @cite Shi94\n\n-   Function calculates the corner quality measure at every source image pixel using the\n    cornerMinEigenVal or cornerHarris .\n-   Function performs a non-maximum suppression (the local maximums in *3 x 3* neighborhood are\n    retained).\n-   The corners with the minimal eigenvalue less than\n    \\f$\\texttt{qualityLevel} \\cdot \\max_{x,y} qualityMeasureMap(x,y)\\f$ are rejected.\n-   The remaining corners are sorted by the quality measure in the descending order.\n-   Function throws away each corner for which there is a stronger corner at a distance less than\n    maxDistance.\n\nThe function can be used to initialize a point-based tracker of an object.\n\n@note If the function is called with different values A and B of the parameter qualityLevel , and\nA \\> B, the vector of returned corners with qualityLevel=A will be the prefix of the output vector\nwith qualityLevel=B .\n\n@param image Input 8-bit or floating-point 32-bit, single-channel image.\n@param corners Output vector of detected corners.\n@param maxCorners Maximum number of corners to return. If there are more corners than are found,\nthe strongest of them is returned.\n@param qualityLevel Parameter characterizing the minimal accepted quality of image corners. The\nparameter value is multiplied by the best corner quality measure, which is the minimal eigenvalue\n(see cornerMinEigenVal ) or the Harris function response (see cornerHarris ). The corners with the\nquality measure less than the product are rejected. For example, if the best corner has the\nquality measure = 1500, and the qualityLevel=0.01 , then all the corners with the quality measure\nless than 15 are rejected.\n@param minDistance Minimum possible Euclidean distance between the returned corners.\n@param mask Optional region of interest. If the image is not empty (it needs to have the type\nCV_8UC1 and the same size as image ), it specifies the region in which the corners are detected.\n@param blockSize Size of an average block for computing a derivative covariation matrix over each\npixel neighborhood. See cornerEigenValsAndVecs .\n@param useHarrisDetector Parameter indicating whether to use a Harris detector (see cornerHarris)\nor cornerMinEigenVal.\n@param k Free parameter of the Harris detector.\n\n@sa  cornerMinEigenVal, cornerHarris, calcOpticalFlowPyrLK, estimateRigidTransform,\n */\nCV_EXPORTS_W void goodFeaturesToTrack( InputArray image, OutputArray corners,\n                                     int maxCorners, double qualityLevel, double minDistance,\n                                     InputArray mask = noArray(), int blockSize = 3,\n                                     bool useHarrisDetector = false, double k = 0.04 );\n\n/** @example houghlines.cpp\nAn example using the Hough line detector\n*/\n\n/** @brief Finds lines in a binary image using the standard Hough transform.\n\nThe function implements the standard or standard multi-scale Hough transform algorithm for line\ndetection. See <http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm> for a good explanation of Hough\ntransform.\n\n@param image 8-bit, single-channel binary source image. The image may be modified by the function.\n@param lines Output vector of lines. Each line is represented by a two-element vector\n\\f$(\\rho, \\theta)\\f$ . \\f$\\rho\\f$ is the distance from the coordinate origin \\f$(0,0)\\f$ (top-left corner of\nthe image). \\f$\\theta\\f$ is the line rotation angle in radians (\n\\f$0 \\sim \\textrm{vertical line}, \\pi/2 \\sim \\textrm{horizontal line}\\f$ ).\n@param rho Distance resolution of the accumulator in pixels.\n@param theta Angle resolution of the accumulator in radians.\n@param threshold Accumulator threshold parameter. Only those lines are returned that get enough\nvotes ( \\f$>\\texttt{threshold}\\f$ ).\n@param srn For the multi-scale Hough transform, it is a divisor for the distance resolution rho .\nThe coarse accumulator distance resolution is rho and the accurate accumulator resolution is\nrho/srn . If both srn=0 and stn=0 , the classical Hough transform is used. Otherwise, both these\nparameters should be positive.\n@param stn For the multi-scale Hough transform, it is a divisor for the distance resolution theta.\n@param min_theta For standard and multi-scale Hough transform, minimum angle to check for lines.\nMust fall between 0 and max_theta.\n@param max_theta For standard and multi-scale Hough transform, maximum angle to check for lines.\nMust fall between min_theta and CV_PI.\n */\nCV_EXPORTS_W void HoughLines( InputArray image, OutputArray lines,\n                              double rho, double theta, int threshold,\n                              double srn = 0, double stn = 0,\n                              double min_theta = 0, double max_theta = CV_PI );\n\n/** @brief Finds line segments in a binary image using the probabilistic Hough transform.\n\nThe function implements the probabilistic Hough transform algorithm for line detection, described\nin @cite Matas00\n\nSee the line detection example below:\n\n@code\n    #include <opencv2/imgproc.hpp>\n    #include <opencv2/highgui.hpp>\n\n    using namespace cv;\n    using namespace std;\n\n    int main(int argc, char** argv)\n    {\n        Mat src, dst, color_dst;\n        if( argc != 2 || !(src=imread(argv[1], 0)).data)\n            return -1;\n\n        Canny( src, dst, 50, 200, 3 );\n        cvtColor( dst, color_dst, COLOR_GRAY2BGR );\n\n    #if 0\n        vector<Vec2f> lines;\n        HoughLines( dst, lines, 1, CV_PI/180, 100 );\n\n        for( size_t i = 0; i < lines.size(); i++ )\n        {\n            float rho = lines[i][0];\n            float theta = lines[i][1];\n            double a = cos(theta), b = sin(theta);\n            double x0 = a*rho, y0 = b*rho;\n            Point pt1(cvRound(x0 + 1000*(-b)),\n                      cvRound(y0 + 1000*(a)));\n            Point pt2(cvRound(x0 - 1000*(-b)),\n                      cvRound(y0 - 1000*(a)));\n            line( color_dst, pt1, pt2, Scalar(0,0,255), 3, 8 );\n        }\n    #else\n        vector<Vec4i> lines;\n        HoughLinesP( dst, lines, 1, CV_PI/180, 80, 30, 10 );\n        for( size_t i = 0; i < lines.size(); i++ )\n        {\n            line( color_dst, Point(lines[i][0], lines[i][1]),\n                Point(lines[i][2], lines[i][3]), Scalar(0,0,255), 3, 8 );\n        }\n    #endif\n        namedWindow( \"Source\", 1 );\n        imshow( \"Source\", src );\n\n        namedWindow( \"Detected Lines\", 1 );\n        imshow( \"Detected Lines\", color_dst );\n\n        waitKey(0);\n        return 0;\n    }\n@endcode\nThis is a sample picture the function parameters have been tuned for:\n\n![image](pics/building.jpg)\n\nAnd this is the output of the above program in case of the probabilistic Hough transform:\n\n![image](pics/houghp.png)\n\n@param image 8-bit, single-channel binary source image. The image may be modified by the function.\n@param lines Output vector of lines. Each line is represented by a 4-element vector\n\\f$(x_1, y_1, x_2, y_2)\\f$ , where \\f$(x_1,y_1)\\f$ and \\f$(x_2, y_2)\\f$ are the ending points of each detected\nline segment.\n@param rho Distance resolution of the accumulator in pixels.\n@param theta Angle resolution of the accumulator in radians.\n@param threshold Accumulator threshold parameter. Only those lines are returned that get enough\nvotes ( \\f$>\\texttt{threshold}\\f$ ).\n@param minLineLength Minimum line length. Line segments shorter than that are rejected.\n@param maxLineGap Maximum allowed gap between points on the same line to link them.\n\n@sa LineSegmentDetector\n */\nCV_EXPORTS_W void HoughLinesP( InputArray image, OutputArray lines,\n                               double rho, double theta, int threshold,\n                               double minLineLength = 0, double maxLineGap = 0 );\n\n/** @example houghcircles.cpp\nAn example using the Hough circle detector\n*/\n\n/** @brief Finds circles in a grayscale image using the Hough transform.\n\nThe function finds circles in a grayscale image using a modification of the Hough transform.\n\nExample: :\n@code\n    #include <opencv2/imgproc.hpp>\n    #include <opencv2/highgui.hpp>\n    #include <math.h>\n\n    using namespace cv;\n    using namespace std;\n\n    int main(int argc, char** argv)\n    {\n        Mat img, gray;\n        if( argc != 2 || !(img=imread(argv[1], 1)).data)\n            return -1;\n        cvtColor(img, gray, COLOR_BGR2GRAY);\n        // smooth it, otherwise a lot of false circles may be detected\n        GaussianBlur( gray, gray, Size(9, 9), 2, 2 );\n        vector<Vec3f> circles;\n        HoughCircles(gray, circles, HOUGH_GRADIENT,\n                     2, gray.rows/4, 200, 100 );\n        for( size_t i = 0; i < circles.size(); i++ )\n        {\n             Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));\n             int radius = cvRound(circles[i][2]);\n             // draw the circle center\n             circle( img, center, 3, Scalar(0,255,0), -1, 8, 0 );\n             // draw the circle outline\n             circle( img, center, radius, Scalar(0,0,255), 3, 8, 0 );\n        }\n        namedWindow( \"circles\", 1 );\n        imshow( \"circles\", img );\n\n        waitKey(0);\n        return 0;\n    }\n@endcode\n\n@note Usually the function detects the centers of circles well. However, it may fail to find correct\nradii. You can assist to the function by specifying the radius range ( minRadius and maxRadius ) if\nyou know it. Or, you may ignore the returned radius, use only the center, and find the correct\nradius using an additional procedure.\n\n@param image 8-bit, single-channel, grayscale input image.\n@param circles Output vector of found circles. Each vector is encoded as a 3-element\nfloating-point vector \\f$(x, y, radius)\\f$ .\n@param method Detection method, see cv::HoughModes. Currently, the only implemented method is HOUGH_GRADIENT\n@param dp Inverse ratio of the accumulator resolution to the image resolution. For example, if\ndp=1 , the accumulator has the same resolution as the input image. If dp=2 , the accumulator has\nhalf as big width and height.\n@param minDist Minimum distance between the centers of the detected circles. If the parameter is\ntoo small, multiple neighbor circles may be falsely detected in addition to a true one. If it is\ntoo large, some circles may be missed.\n@param param1 First method-specific parameter. In case of CV_HOUGH_GRADIENT , it is the higher\nthreshold of the two passed to the Canny edge detector (the lower one is twice smaller).\n@param param2 Second method-specific parameter. In case of CV_HOUGH_GRADIENT , it is the\naccumulator threshold for the circle centers at the detection stage. The smaller it is, the more\nfalse circles may be detected. Circles, corresponding to the larger accumulator values, will be\nreturned first.\n@param minRadius Minimum circle radius.\n@param maxRadius Maximum circle radius.\n\n@sa fitEllipse, minEnclosingCircle\n */\nCV_EXPORTS_W void HoughCircles( InputArray image, OutputArray circles,\n                               int method, double dp, double minDist,\n                               double param1 = 100, double param2 = 100,\n                               int minRadius = 0, int maxRadius = 0 );\n\n//! @} imgproc_feature\n\n//! @addtogroup imgproc_filter\n//! @{\n\n/** @example morphology2.cpp\n  An example using the morphological operations\n*/\n\n/** @brief Erodes an image by using a specific structuring element.\n\nThe function erodes the source image using the specified structuring element that determines the\nshape of a pixel neighborhood over which the minimum is taken:\n\n\\f[\\texttt{dst} (x,y) =  \\min _{(x',y'):  \\, \\texttt{element} (x',y') \\ne0 } \\texttt{src} (x+x',y+y')\\f]\n\nThe function supports the in-place mode. Erosion can be applied several ( iterations ) times. In\ncase of multi-channel images, each channel is processed independently.\n\n@param src input image; the number of channels can be arbitrary, but the depth should be one of\nCV_8U, CV_16U, CV_16S, CV_32F or CV_64F.\n@param dst output image of the same size and type as src.\n@param kernel structuring element used for erosion; if `element=Mat()`, a `3 x 3` rectangular\nstructuring element is used. Kernel can be created using getStructuringElement.\n@param anchor position of the anchor within the element; default value (-1, -1) means that the\nanchor is at the element center.\n@param iterations number of times erosion is applied.\n@param borderType pixel extrapolation method, see cv::BorderTypes\n@param borderValue border value in case of a constant border\n@sa  dilate, morphologyEx, getStructuringElement\n */\nCV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,\n                         Point anchor = Point(-1,-1), int iterations = 1,\n                         int borderType = BORDER_CONSTANT,\n                         const Scalar& borderValue = morphologyDefaultBorderValue() );\n\n/** @brief Dilates an image by using a specific structuring element.\n\nThe function dilates the source image using the specified structuring element that determines the\nshape of a pixel neighborhood over which the maximum is taken:\n\\f[\\texttt{dst} (x,y) =  \\max _{(x',y'):  \\, \\texttt{element} (x',y') \\ne0 } \\texttt{src} (x+x',y+y')\\f]\n\nThe function supports the in-place mode. Dilation can be applied several ( iterations ) times. In\ncase of multi-channel images, each channel is processed independently.\n\n@param src input image; the number of channels can be arbitrary, but the depth should be one of\nCV_8U, CV_16U, CV_16S, CV_32F or CV_64F.\n@param dst output image of the same size and type as src\\`.\n@param kernel structuring element used for dilation; if elemenat=Mat(), a 3 x 3 rectangular\nstructuring element is used. Kernel can be created using getStructuringElement\n@param anchor position of the anchor within the element; default value (-1, -1) means that the\nanchor is at the element center.\n@param iterations number of times dilation is applied.\n@param borderType pixel extrapolation method, see cv::BorderTypes\n@param borderValue border value in case of a constant border\n@sa  erode, morphologyEx, getStructuringElement\n */\nCV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,\n                          Point anchor = Point(-1,-1), int iterations = 1,\n                          int borderType = BORDER_CONSTANT,\n                          const Scalar& borderValue = morphologyDefaultBorderValue() );\n\n/** @brief Performs advanced morphological transformations.\n\nThe function morphologyEx can perform advanced morphological transformations using an erosion and dilation as\nbasic operations.\n\nAny of the operations can be done in-place. In case of multi-channel images, each channel is\nprocessed independently.\n\n@param src Source image. The number of channels can be arbitrary. The depth should be one of\nCV_8U, CV_16U, CV_16S, CV_32F or CV_64F.\n@param dst Destination image of the same size and type as source image.\n@param op Type of a morphological operation, see cv::MorphTypes\n@param kernel Structuring element. It can be created using cv::getStructuringElement.\n@param anchor Anchor position with the kernel. Negative values mean that the anchor is at the\nkernel center.\n@param iterations Number of times erosion and dilation are applied.\n@param borderType Pixel extrapolation method, see cv::BorderTypes\n@param borderValue Border value in case of a constant border. The default value has a special\nmeaning.\n@sa  dilate, erode, getStructuringElement\n */\nCV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,\n                                int op, InputArray kernel,\n                                Point anchor = Point(-1,-1), int iterations = 1,\n                                int borderType = BORDER_CONSTANT,\n                                const Scalar& borderValue = morphologyDefaultBorderValue() );\n\n//! @} imgproc_filter\n\n//! @addtogroup imgproc_transform\n//! @{\n\n/** @brief Resizes an image.\n\nThe function resize resizes the image src down to or up to the specified size. Note that the\ninitial dst type or size are not taken into account. Instead, the size and type are derived from\nthe `src`,`dsize`,`fx`, and `fy`. If you want to resize src so that it fits the pre-created dst,\nyou may call the function as follows:\n@code\n    // explicitly specify dsize=dst.size(); fx and fy will be computed from that.\n    resize(src, dst, dst.size(), 0, 0, interpolation);\n@endcode\nIf you want to decimate the image by factor of 2 in each direction, you can call the function this\nway:\n@code\n    // specify fx and fy and let the function compute the destination image size.\n    resize(src, dst, Size(), 0.5, 0.5, interpolation);\n@endcode\nTo shrink an image, it will generally look best with cv::INTER_AREA interpolation, whereas to\nenlarge an image, it will generally look best with cv::INTER_CUBIC (slow) or cv::INTER_LINEAR\n(faster but still looks OK).\n\n@param src input image.\n@param dst output image; it has the size dsize (when it is non-zero) or the size computed from\nsrc.size(), fx, and fy; the type of dst is the same as of src.\n@param dsize output image size; if it equals zero, it is computed as:\n \\f[\\texttt{dsize = Size(round(fx*src.cols), round(fy*src.rows))}\\f]\n Either dsize or both fx and fy must be non-zero.\n@param fx scale factor along the horizontal axis; when it equals 0, it is computed as\n\\f[\\texttt{(double)dsize.width/src.cols}\\f]\n@param fy scale factor along the vertical axis; when it equals 0, it is computed as\n\\f[\\texttt{(double)dsize.height/src.rows}\\f]\n@param interpolation interpolation method, see cv::InterpolationFlags\n\n@sa  warpAffine, warpPerspective, remap\n */\nCV_EXPORTS_W void resize( InputArray src, OutputArray dst,\n                          Size dsize, double fx = 0, double fy = 0,\n                          int interpolation = INTER_LINEAR );\n\n/** @brief Applies an affine transformation to an image.\n\nThe function warpAffine transforms the source image using the specified matrix:\n\n\\f[\\texttt{dst} (x,y) =  \\texttt{src} ( \\texttt{M} _{11} x +  \\texttt{M} _{12} y +  \\texttt{M} _{13}, \\texttt{M} _{21} x +  \\texttt{M} _{22} y +  \\texttt{M} _{23})\\f]\n\nwhen the flag WARP_INVERSE_MAP is set. Otherwise, the transformation is first inverted\nwith cv::invertAffineTransform and then put in the formula above instead of M. The function cannot\noperate in-place.\n\n@param src input image.\n@param dst output image that has the size dsize and the same type as src .\n@param M \\f$2\\times 3\\f$ transformation matrix.\n@param dsize size of the output image.\n@param flags combination of interpolation methods (see cv::InterpolationFlags) and the optional\nflag WARP_INVERSE_MAP that means that M is the inverse transformation (\n\\f$\\texttt{dst}\\rightarrow\\texttt{src}\\f$ ).\n@param borderMode pixel extrapolation method (see cv::BorderTypes); when\nborderMode=BORDER_TRANSPARENT, it means that the pixels in the destination image corresponding to\nthe \"outliers\" in the source image are not modified by the function.\n@param borderValue value used in case of a constant border; by default, it is 0.\n\n@sa  warpPerspective, resize, remap, getRectSubPix, transform\n */\nCV_EXPORTS_W void warpAffine( InputArray src, OutputArray dst,\n                              InputArray M, Size dsize,\n                              int flags = INTER_LINEAR,\n                              int borderMode = BORDER_CONSTANT,\n                              const Scalar& borderValue = Scalar());\n\n/** @brief Applies a perspective transformation to an image.\n\nThe function warpPerspective transforms the source image using the specified matrix:\n\n\\f[\\texttt{dst} (x,y) =  \\texttt{src} \\left ( \\frac{M_{11} x + M_{12} y + M_{13}}{M_{31} x + M_{32} y + M_{33}} ,\n     \\frac{M_{21} x + M_{22} y + M_{23}}{M_{31} x + M_{32} y + M_{33}} \\right )\\f]\n\nwhen the flag WARP_INVERSE_MAP is set. Otherwise, the transformation is first inverted with invert\nand then put in the formula above instead of M. The function cannot operate in-place.\n\n@param src input image.\n@param dst output image that has the size dsize and the same type as src .\n@param M \\f$3\\times 3\\f$ transformation matrix.\n@param dsize size of the output image.\n@param flags combination of interpolation methods (INTER_LINEAR or INTER_NEAREST) and the\noptional flag WARP_INVERSE_MAP, that sets M as the inverse transformation (\n\\f$\\texttt{dst}\\rightarrow\\texttt{src}\\f$ ).\n@param borderMode pixel extrapolation method (BORDER_CONSTANT or BORDER_REPLICATE).\n@param borderValue value used in case of a constant border; by default, it equals 0.\n\n@sa  warpAffine, resize, remap, getRectSubPix, perspectiveTransform\n */\nCV_EXPORTS_W void warpPerspective( InputArray src, OutputArray dst,\n                                   InputArray M, Size dsize,\n                                   int flags = INTER_LINEAR,\n                                   int borderMode = BORDER_CONSTANT,\n                                   const Scalar& borderValue = Scalar());\n\n/** @brief Applies a generic geometrical transformation to an image.\n\nThe function remap transforms the source image using the specified map:\n\n\\f[\\texttt{dst} (x,y) =  \\texttt{src} (map_x(x,y),map_y(x,y))\\f]\n\nwhere values of pixels with non-integer coordinates are computed using one of available\ninterpolation methods. \\f$map_x\\f$ and \\f$map_y\\f$ can be encoded as separate floating-point maps\nin \\f$map_1\\f$ and \\f$map_2\\f$ respectively, or interleaved floating-point maps of \\f$(x,y)\\f$ in\n\\f$map_1\\f$, or fixed-point maps created by using convertMaps. The reason you might want to\nconvert from floating to fixed-point representations of a map is that they can yield much faster\n(\\~2x) remapping operations. In the converted case, \\f$map_1\\f$ contains pairs (cvFloor(x),\ncvFloor(y)) and \\f$map_2\\f$ contains indices in a table of interpolation coefficients.\n\nThis function cannot operate in-place.\n\n@param src Source image.\n@param dst Destination image. It has the same size as map1 and the same type as src .\n@param map1 The first map of either (x,y) points or just x values having the type CV_16SC2 ,\nCV_32FC1, or CV_32FC2. See convertMaps for details on converting a floating point\nrepresentation to fixed-point for speed.\n@param map2 The second map of y values having the type CV_16UC1, CV_32FC1, or none (empty map\nif map1 is (x,y) points), respectively.\n@param interpolation Interpolation method (see cv::InterpolationFlags). The method INTER_AREA is\nnot supported by this function.\n@param borderMode Pixel extrapolation method (see cv::BorderTypes). When\nborderMode=BORDER_TRANSPARENT, it means that the pixels in the destination image that\ncorresponds to the \"outliers\" in the source image are not modified by the function.\n@param borderValue Value used in case of a constant border. By default, it is 0.\n */\nCV_EXPORTS_W void remap( InputArray src, OutputArray dst,\n                         InputArray map1, InputArray map2,\n                         int interpolation, int borderMode = BORDER_CONSTANT,\n                         const Scalar& borderValue = Scalar());\n\n/** @brief Converts image transformation maps from one representation to another.\n\nThe function converts a pair of maps for remap from one representation to another. The following\noptions ( (map1.type(), map2.type()) \\f$\\rightarrow\\f$ (dstmap1.type(), dstmap2.type()) ) are\nsupported:\n\n- \\f$\\texttt{(CV\\_32FC1, CV\\_32FC1)} \\rightarrow \\texttt{(CV\\_16SC2, CV\\_16UC1)}\\f$. This is the\nmost frequently used conversion operation, in which the original floating-point maps (see remap )\nare converted to a more compact and much faster fixed-point representation. The first output array\ncontains the rounded coordinates and the second array (created only when nninterpolation=false )\ncontains indices in the interpolation tables.\n\n- \\f$\\texttt{(CV\\_32FC2)} \\rightarrow \\texttt{(CV\\_16SC2, CV\\_16UC1)}\\f$. The same as above but\nthe original maps are stored in one 2-channel matrix.\n\n- Reverse conversion. Obviously, the reconstructed floating-point maps will not be exactly the same\nas the originals.\n\n@param map1 The first input map of type CV_16SC2, CV_32FC1, or CV_32FC2 .\n@param map2 The second input map of type CV_16UC1, CV_32FC1, or none (empty matrix),\nrespectively.\n@param dstmap1 The first output map that has the type dstmap1type and the same size as src .\n@param dstmap2 The second output map.\n@param dstmap1type Type of the first output map that should be CV_16SC2, CV_32FC1, or\nCV_32FC2 .\n@param nninterpolation Flag indicating whether the fixed-point maps are used for the\nnearest-neighbor or for a more complex interpolation.\n\n@sa  remap, undistort, initUndistortRectifyMap\n */\nCV_EXPORTS_W void convertMaps( InputArray map1, InputArray map2,\n                               OutputArray dstmap1, OutputArray dstmap2,\n                               int dstmap1type, bool nninterpolation = false );\n\n/** @brief Calculates an affine matrix of 2D rotation.\n\nThe function calculates the following matrix:\n\n\\f[\\begin{bmatrix} \\alpha &  \\beta & (1- \\alpha )  \\cdot \\texttt{center.x} -  \\beta \\cdot \\texttt{center.y} \\\\ - \\beta &  \\alpha &  \\beta \\cdot \\texttt{center.x} + (1- \\alpha )  \\cdot \\texttt{center.y} \\end{bmatrix}\\f]\n\nwhere\n\n\\f[\\begin{array}{l} \\alpha =  \\texttt{scale} \\cdot \\cos \\texttt{angle} , \\\\ \\beta =  \\texttt{scale} \\cdot \\sin \\texttt{angle} \\end{array}\\f]\n\nThe transformation maps the rotation center to itself. If this is not the target, adjust the shift.\n\n@param center Center of the rotation in the source image.\n@param angle Rotation angle in degrees. Positive values mean counter-clockwise rotation (the\ncoordinate origin is assumed to be the top-left corner).\n@param scale Isotropic scale factor.\n\n@sa  getAffineTransform, warpAffine, transform\n */\nCV_EXPORTS_W Mat getRotationMatrix2D( Point2f center, double angle, double scale );\n\n//! returns 3x3 perspective transformation for the corresponding 4 point pairs.\nCV_EXPORTS Mat getPerspectiveTransform( const Point2f src[], const Point2f dst[] );\n\n/** @brief Calculates an affine transform from three pairs of the corresponding points.\n\nThe function calculates the \\f$2 \\times 3\\f$ matrix of an affine transform so that:\n\n\\f[\\begin{bmatrix} x'_i \\\\ y'_i \\end{bmatrix} = \\texttt{map\\_matrix} \\cdot \\begin{bmatrix} x_i \\\\ y_i \\\\ 1 \\end{bmatrix}\\f]\n\nwhere\n\n\\f[dst(i)=(x'_i,y'_i), src(i)=(x_i, y_i), i=0,1,2\\f]\n\n@param src Coordinates of triangle vertices in the source image.\n@param dst Coordinates of the corresponding triangle vertices in the destination image.\n\n@sa  warpAffine, transform\n */\nCV_EXPORTS Mat getAffineTransform( const Point2f src[], const Point2f dst[] );\n\n/** @brief Inverts an affine transformation.\n\nThe function computes an inverse affine transformation represented by \\f$2 \\times 3\\f$ matrix M:\n\n\\f[\\begin{bmatrix} a_{11} & a_{12} & b_1  \\\\ a_{21} & a_{22} & b_2 \\end{bmatrix}\\f]\n\nThe result is also a \\f$2 \\times 3\\f$ matrix of the same type as M.\n\n@param M Original affine transformation.\n@param iM Output reverse affine transformation.\n */\nCV_EXPORTS_W void invertAffineTransform( InputArray M, OutputArray iM );\n\n/** @brief Calculates a perspective transform from four pairs of the corresponding points.\n\nThe function calculates the \\f$3 \\times 3\\f$ matrix of a perspective transform so that:\n\n\\f[\\begin{bmatrix} t_i x'_i \\\\ t_i y'_i \\\\ t_i \\end{bmatrix} = \\texttt{map\\_matrix} \\cdot \\begin{bmatrix} x_i \\\\ y_i \\\\ 1 \\end{bmatrix}\\f]\n\nwhere\n\n\\f[dst(i)=(x'_i,y'_i), src(i)=(x_i, y_i), i=0,1,2,3\\f]\n\n@param src Coordinates of quadrangle vertices in the source image.\n@param dst Coordinates of the corresponding quadrangle vertices in the destination image.\n\n@sa  findHomography, warpPerspective, perspectiveTransform\n */\nCV_EXPORTS_W Mat getPerspectiveTransform( InputArray src, InputArray dst );\n\nCV_EXPORTS_W Mat getAffineTransform( InputArray src, InputArray dst );\n\n/** @brief Retrieves a pixel rectangle from an image with sub-pixel accuracy.\n\nThe function getRectSubPix extracts pixels from src:\n\n\\f[dst(x, y) = src(x +  \\texttt{center.x} - ( \\texttt{dst.cols} -1)*0.5, y +  \\texttt{center.y} - ( \\texttt{dst.rows} -1)*0.5)\\f]\n\nwhere the values of the pixels at non-integer coordinates are retrieved using bilinear\ninterpolation. Every channel of multi-channel images is processed independently. While the center of\nthe rectangle must be inside the image, parts of the rectangle may be outside. In this case, the\nreplication border mode (see cv::BorderTypes) is used to extrapolate the pixel values outside of\nthe image.\n\n@param image Source image.\n@param patchSize Size of the extracted patch.\n@param center Floating point coordinates of the center of the extracted rectangle within the\nsource image. The center must be inside the image.\n@param patch Extracted patch that has the size patchSize and the same number of channels as src .\n@param patchType Depth of the extracted pixels. By default, they have the same depth as src .\n\n@sa  warpAffine, warpPerspective\n */\nCV_EXPORTS_W void getRectSubPix( InputArray image, Size patchSize,\n                                 Point2f center, OutputArray patch, int patchType = -1 );\n\n/** @example polar_transforms.cpp\nAn example using the cv::linearPolar and cv::logPolar operations\n*/\n\n/** @brief Remaps an image to log-polar space.\n\ntransforms the source image using the following transformation:\n\\f[dst( \\phi , \\rho ) = src(x,y)\\f]\nwhere\n\\f[\\rho = M  \\cdot \\log{\\sqrt{x^2 + y^2}} , \\phi =atan(y/x)\\f]\n\nThe function emulates the human \"foveal\" vision and can be used for fast scale and\nrotation-invariant template matching, for object tracking and so forth. The function can not operate\nin-place.\n\n@param src Source image\n@param dst Destination image\n@param center The transformation center; where the output precision is maximal\n@param M Magnitude scale parameter.\n@param flags A combination of interpolation methods, see cv::InterpolationFlags\n */\nCV_EXPORTS_W void logPolar( InputArray src, OutputArray dst,\n                            Point2f center, double M, int flags );\n\n/** @brief Remaps an image to polar space.\n\ntransforms the source image using the following transformation:\n\\f[dst( \\phi , \\rho ) = src(x,y)\\f]\nwhere\n\\f[\\rho = (src.width/maxRadius)  \\cdot \\sqrt{x^2 + y^2} , \\phi =atan(y/x)\\f]\n\nThe function can not operate in-place.\n\n@param src Source image\n@param dst Destination image\n@param center The transformation center;\n@param maxRadius Inverse magnitude scale parameter\n@param flags A combination of interpolation methods, see cv::InterpolationFlags\n */\nCV_EXPORTS_W void linearPolar( InputArray src, OutputArray dst,\n                               Point2f center, double maxRadius, int flags );\n\n//! @} imgproc_transform\n\n//! @addtogroup imgproc_misc\n//! @{\n\n/** @overload */\nCV_EXPORTS_W void integral( InputArray src, OutputArray sum, int sdepth = -1 );\n\n/** @overload */\nCV_EXPORTS_AS(integral2) void integral( InputArray src, OutputArray sum,\n                                        OutputArray sqsum, int sdepth = -1, int sqdepth = -1 );\n\n/** @brief Calculates the integral of an image.\n\nThe functions calculate one or more integral images for the source image as follows:\n\n\\f[\\texttt{sum} (X,Y) =  \\sum _{x<X,y<Y}  \\texttt{image} (x,y)\\f]\n\n\\f[\\texttt{sqsum} (X,Y) =  \\sum _{x<X,y<Y}  \\texttt{image} (x,y)^2\\f]\n\n\\f[\\texttt{tilted} (X,Y) =  \\sum _{y<Y,abs(x-X+1) \\leq Y-y-1}  \\texttt{image} (x,y)\\f]\n\nUsing these integral images, you can calculate sum, mean, and standard deviation over a specific\nup-right or rotated rectangular region of the image in a constant time, for example:\n\n\\f[\\sum _{x_1 \\leq x < x_2,  \\, y_1  \\leq y < y_2}  \\texttt{image} (x,y) =  \\texttt{sum} (x_2,y_2)- \\texttt{sum} (x_1,y_2)- \\texttt{sum} (x_2,y_1)+ \\texttt{sum} (x_1,y_1)\\f]\n\nIt makes possible to do a fast blurring or fast block correlation with a variable window size, for\nexample. In case of multi-channel images, sums for each channel are accumulated independently.\n\nAs a practical example, the next figure shows the calculation of the integral of a straight\nrectangle Rect(3,3,3,2) and of a tilted rectangle Rect(5,1,2,3) . The selected pixels in the\noriginal image are shown, as well as the relative pixels in the integral images sum and tilted .\n\n![integral calculation example](pics/integral.png)\n\n@param src input image as \\f$W \\times H\\f$, 8-bit or floating-point (32f or 64f).\n@param sum integral image as \\f$(W+1)\\times (H+1)\\f$ , 32-bit integer or floating-point (32f or 64f).\n@param sqsum integral image for squared pixel values; it is \\f$(W+1)\\times (H+1)\\f$, double-precision\nfloating-point (64f) array.\n@param tilted integral for the image rotated by 45 degrees; it is \\f$(W+1)\\times (H+1)\\f$ array with\nthe same data type as sum.\n@param sdepth desired depth of the integral and the tilted integral images, CV_32S, CV_32F, or\nCV_64F.\n@param sqdepth desired depth of the integral image of squared pixel values, CV_32F or CV_64F.\n */\nCV_EXPORTS_AS(integral3) void integral( InputArray src, OutputArray sum,\n                                        OutputArray sqsum, OutputArray tilted,\n                                        int sdepth = -1, int sqdepth = -1 );\n\n//! @} imgproc_misc\n\n//! @addtogroup imgproc_motion\n//! @{\n\n/** @brief Adds an image to the accumulator.\n\nThe function adds src or some of its elements to dst :\n\n\\f[\\texttt{dst} (x,y)  \\leftarrow \\texttt{dst} (x,y) +  \\texttt{src} (x,y)  \\quad \\text{if} \\quad \\texttt{mask} (x,y)  \\ne 0\\f]\n\nThe function supports multi-channel images. Each channel is processed independently.\n\nThe functions accumulate\\* can be used, for example, to collect statistics of a scene background\nviewed by a still camera and for the further foreground-background segmentation.\n\n@param src Input image as 1- or 3-channel, 8-bit or 32-bit floating point.\n@param dst %Accumulator image with the same number of channels as input image, 32-bit or 64-bit\nfloating-point.\n@param mask Optional operation mask.\n\n@sa  accumulateSquare, accumulateProduct, accumulateWeighted\n */\nCV_EXPORTS_W void accumulate( InputArray src, InputOutputArray dst,\n                              InputArray mask = noArray() );\n\n/** @brief Adds the square of a source image to the accumulator.\n\nThe function adds the input image src or its selected region, raised to a power of 2, to the\naccumulator dst :\n\n\\f[\\texttt{dst} (x,y)  \\leftarrow \\texttt{dst} (x,y) +  \\texttt{src} (x,y)^2  \\quad \\text{if} \\quad \\texttt{mask} (x,y)  \\ne 0\\f]\n\nThe function supports multi-channel images. Each channel is processed independently.\n\n@param src Input image as 1- or 3-channel, 8-bit or 32-bit floating point.\n@param dst %Accumulator image with the same number of channels as input image, 32-bit or 64-bit\nfloating-point.\n@param mask Optional operation mask.\n\n@sa  accumulateSquare, accumulateProduct, accumulateWeighted\n */\nCV_EXPORTS_W void accumulateSquare( InputArray src, InputOutputArray dst,\n                                    InputArray mask = noArray() );\n\n/** @brief Adds the per-element product of two input images to the accumulator.\n\nThe function adds the product of two images or their selected regions to the accumulator dst :\n\n\\f[\\texttt{dst} (x,y)  \\leftarrow \\texttt{dst} (x,y) +  \\texttt{src1} (x,y)  \\cdot \\texttt{src2} (x,y)  \\quad \\text{if} \\quad \\texttt{mask} (x,y)  \\ne 0\\f]\n\nThe function supports multi-channel images. Each channel is processed independently.\n\n@param src1 First input image, 1- or 3-channel, 8-bit or 32-bit floating point.\n@param src2 Second input image of the same type and the same size as src1 .\n@param dst %Accumulator with the same number of channels as input images, 32-bit or 64-bit\nfloating-point.\n@param mask Optional operation mask.\n\n@sa  accumulate, accumulateSquare, accumulateWeighted\n */\nCV_EXPORTS_W void accumulateProduct( InputArray src1, InputArray src2,\n                                     InputOutputArray dst, InputArray mask=noArray() );\n\n/** @brief Updates a running average.\n\nThe function calculates the weighted sum of the input image src and the accumulator dst so that dst\nbecomes a running average of a frame sequence:\n\n\\f[\\texttt{dst} (x,y)  \\leftarrow (1- \\texttt{alpha} )  \\cdot \\texttt{dst} (x,y) +  \\texttt{alpha} \\cdot \\texttt{src} (x,y)  \\quad \\text{if} \\quad \\texttt{mask} (x,y)  \\ne 0\\f]\n\nThat is, alpha regulates the update speed (how fast the accumulator \"forgets\" about earlier images).\nThe function supports multi-channel images. Each channel is processed independently.\n\n@param src Input image as 1- or 3-channel, 8-bit or 32-bit floating point.\n@param dst %Accumulator image with the same number of channels as input image, 32-bit or 64-bit\nfloating-point.\n@param alpha Weight of the input image.\n@param mask Optional operation mask.\n\n@sa  accumulate, accumulateSquare, accumulateProduct\n */\nCV_EXPORTS_W void accumulateWeighted( InputArray src, InputOutputArray dst,\n                                      double alpha, InputArray mask = noArray() );\n\n/** @brief The function is used to detect translational shifts that occur between two images.\n\nThe operation takes advantage of the Fourier shift theorem for detecting the translational shift in\nthe frequency domain. It can be used for fast image registration as well as motion estimation. For\nmore information please see <http://en.wikipedia.org/wiki/Phase_correlation>\n\nCalculates the cross-power spectrum of two supplied source arrays. The arrays are padded if needed\nwith getOptimalDFTSize.\n\nThe function performs the following equations:\n- First it applies a Hanning window (see <http://en.wikipedia.org/wiki/Hann_function>) to each\nimage to remove possible edge effects. This window is cached until the array size changes to speed\nup processing time.\n- Next it computes the forward DFTs of each source array:\n\\f[\\mathbf{G}_a = \\mathcal{F}\\{src_1\\}, \\; \\mathbf{G}_b = \\mathcal{F}\\{src_2\\}\\f]\nwhere \\f$\\mathcal{F}\\f$ is the forward DFT.\n- It then computes the cross-power spectrum of each frequency domain array:\n\\f[R = \\frac{ \\mathbf{G}_a \\mathbf{G}_b^*}{|\\mathbf{G}_a \\mathbf{G}_b^*|}\\f]\n- Next the cross-correlation is converted back into the time domain via the inverse DFT:\n\\f[r = \\mathcal{F}^{-1}\\{R\\}\\f]\n- Finally, it computes the peak location and computes a 5x5 weighted centroid around the peak to\nachieve sub-pixel accuracy.\n\\f[(\\Delta x, \\Delta y) = \\texttt{weightedCentroid} \\{\\arg \\max_{(x, y)}\\{r\\}\\}\\f]\n- If non-zero, the response parameter is computed as the sum of the elements of r within the 5x5\ncentroid around the peak location. It is normalized to a maximum of 1 (meaning there is a single\npeak) and will be smaller when there are multiple peaks.\n\n@param src1 Source floating point array (CV_32FC1 or CV_64FC1)\n@param src2 Source floating point array (CV_32FC1 or CV_64FC1)\n@param window Floating point array with windowing coefficients to reduce edge effects (optional).\n@param response Signal power within the 5x5 centroid around the peak, between 0 and 1 (optional).\n@returns detected phase shift (sub-pixel) between the two arrays.\n\n@sa dft, getOptimalDFTSize, idft, mulSpectrums createHanningWindow\n */\nCV_EXPORTS_W Point2d phaseCorrelate(InputArray src1, InputArray src2,\n                                    InputArray window = noArray(), CV_OUT double* response = 0);\n\n/** @brief This function computes a Hanning window coefficients in two dimensions.\n\nSee (http://en.wikipedia.org/wiki/Hann_function) and (http://en.wikipedia.org/wiki/Window_function)\nfor more information.\n\nAn example is shown below:\n@code\n    // create hanning window of size 100x100 and type CV_32F\n    Mat hann;\n    createHanningWindow(hann, Size(100, 100), CV_32F);\n@endcode\n@param dst Destination array to place Hann coefficients in\n@param winSize The window size specifications\n@param type Created array type\n */\nCV_EXPORTS_W void createHanningWindow(OutputArray dst, Size winSize, int type);\n\n//! @} imgproc_motion\n\n//! @addtogroup imgproc_misc\n//! @{\n\n/** @brief Applies a fixed-level threshold to each array element.\n\nThe function applies fixed-level thresholding to a single-channel array. The function is typically\nused to get a bi-level (binary) image out of a grayscale image ( cv::compare could be also used for\nthis purpose) or for removing a noise, that is, filtering out pixels with too small or too large\nvalues. There are several types of thresholding supported by the function. They are determined by\ntype parameter.\n\nAlso, the special values cv::THRESH_OTSU or cv::THRESH_TRIANGLE may be combined with one of the\nabove values. In these cases, the function determines the optimal threshold value using the Otsu's\nor Triangle algorithm and uses it instead of the specified thresh . The function returns the\ncomputed threshold value. Currently, the Otsu's and Triangle methods are implemented only for 8-bit\nimages.\n\n@param src input array (single-channel, 8-bit or 32-bit floating point).\n@param dst output array of the same size and type as src.\n@param thresh threshold value.\n@param maxval maximum value to use with the THRESH_BINARY and THRESH_BINARY_INV thresholding\ntypes.\n@param type thresholding type (see the cv::ThresholdTypes).\n\n@sa  adaptiveThreshold, findContours, compare, min, max\n */\nCV_EXPORTS_W double threshold( InputArray src, OutputArray dst,\n                               double thresh, double maxval, int type );\n\n\n/** @brief Applies an adaptive threshold to an array.\n\nThe function transforms a grayscale image to a binary image according to the formulae:\n-   **THRESH_BINARY**\n    \\f[dst(x,y) =  \\fork{\\texttt{maxValue}}{if \\(src(x,y) > T(x,y)\\)}{0}{otherwise}\\f]\n-   **THRESH_BINARY_INV**\n    \\f[dst(x,y) =  \\fork{0}{if \\(src(x,y) > T(x,y)\\)}{\\texttt{maxValue}}{otherwise}\\f]\nwhere \\f$T(x,y)\\f$ is a threshold calculated individually for each pixel (see adaptiveMethod parameter).\n\nThe function can process the image in-place.\n\n@param src Source 8-bit single-channel image.\n@param dst Destination image of the same size and the same type as src.\n@param maxValue Non-zero value assigned to the pixels for which the condition is satisfied\n@param adaptiveMethod Adaptive thresholding algorithm to use, see cv::AdaptiveThresholdTypes\n@param thresholdType Thresholding type that must be either THRESH_BINARY or THRESH_BINARY_INV,\nsee cv::ThresholdTypes.\n@param blockSize Size of a pixel neighborhood that is used to calculate a threshold value for the\npixel: 3, 5, 7, and so on.\n@param C Constant subtracted from the mean or weighted mean (see the details below). Normally, it\nis positive but may be zero or negative as well.\n\n@sa  threshold, blur, GaussianBlur\n */\nCV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,\n                                     double maxValue, int adaptiveMethod,\n                                     int thresholdType, int blockSize, double C );\n\n//! @} imgproc_misc\n\n//! @addtogroup imgproc_filter\n//! @{\n\n/** @brief Blurs an image and downsamples it.\n\nBy default, size of the output image is computed as `Size((src.cols+1)/2, (src.rows+1)/2)`, but in\nany case, the following conditions should be satisfied:\n\n\\f[\\begin{array}{l} | \\texttt{dstsize.width} *2-src.cols| \\leq 2 \\\\ | \\texttt{dstsize.height} *2-src.rows| \\leq 2 \\end{array}\\f]\n\nThe function performs the downsampling step of the Gaussian pyramid construction. First, it\nconvolves the source image with the kernel:\n\n\\f[\\frac{1}{256} \\begin{bmatrix} 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 \\end{bmatrix}\\f]\n\nThen, it downsamples the image by rejecting even rows and columns.\n\n@param src input image.\n@param dst output image; it has the specified size and the same type as src.\n@param dstsize size of the output image.\n@param borderType Pixel extrapolation method, see cv::BorderTypes (BORDER_CONSTANT isn't supported)\n */\nCV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,\n                           const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );\n\n/** @brief Upsamples an image and then blurs it.\n\nBy default, size of the output image is computed as `Size(src.cols\\*2, (src.rows\\*2)`, but in any\ncase, the following conditions should be satisfied:\n\n\\f[\\begin{array}{l} | \\texttt{dstsize.width} -src.cols*2| \\leq  ( \\texttt{dstsize.width}   \\mod  2)  \\\\ | \\texttt{dstsize.height} -src.rows*2| \\leq  ( \\texttt{dstsize.height}   \\mod  2) \\end{array}\\f]\n\nThe function performs the upsampling step of the Gaussian pyramid construction, though it can\nactually be used to construct the Laplacian pyramid. First, it upsamples the source image by\ninjecting even zero rows and columns and then convolves the result with the same kernel as in\npyrDown multiplied by 4.\n\n@param src input image.\n@param dst output image. It has the specified size and the same type as src .\n@param dstsize size of the output image.\n@param borderType Pixel extrapolation method, see cv::BorderTypes (only BORDER_DEFAULT is supported)\n */\nCV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,\n                         const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );\n\n/** @brief Constructs the Gaussian pyramid for an image.\n\nThe function constructs a vector of images and builds the Gaussian pyramid by recursively applying\npyrDown to the previously built pyramid layers, starting from `dst[0]==src`.\n\n@param src Source image. Check pyrDown for the list of supported types.\n@param dst Destination vector of maxlevel+1 images of the same type as src. dst[0] will be the\nsame as src. dst[1] is the next pyramid layer, a smoothed and down-sized src, and so on.\n@param maxlevel 0-based index of the last (the smallest) pyramid layer. It must be non-negative.\n@param borderType Pixel extrapolation method, see cv::BorderTypes (BORDER_CONSTANT isn't supported)\n */\nCV_EXPORTS void buildPyramid( InputArray src, OutputArrayOfArrays dst,\n                              int maxlevel, int borderType = BORDER_DEFAULT );\n\n//! @} imgproc_filter\n\n//! @addtogroup imgproc_transform\n//! @{\n\n/** @brief Transforms an image to compensate for lens distortion.\n\nThe function transforms an image to compensate radial and tangential lens distortion.\n\nThe function is simply a combination of cv::initUndistortRectifyMap (with unity R ) and cv::remap\n(with bilinear interpolation). See the former function for details of the transformation being\nperformed.\n\nThose pixels in the destination image, for which there is no correspondent pixels in the source\nimage, are filled with zeros (black color).\n\nA particular subset of the source image that will be visible in the corrected image can be regulated\nby newCameraMatrix. You can use cv::getOptimalNewCameraMatrix to compute the appropriate\nnewCameraMatrix depending on your requirements.\n\nThe camera matrix and the distortion parameters can be determined using cv::calibrateCamera. If\nthe resolution of images is different from the resolution used at the calibration stage, \\f$f_x,\nf_y, c_x\\f$ and \\f$c_y\\f$ need to be scaled accordingly, while the distortion coefficients remain\nthe same.\n\n@param src Input (distorted) image.\n@param dst Output (corrected) image that has the same size and type as src .\n@param cameraMatrix Input camera matrix \\f$A = \\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\\f$ .\n@param distCoeffs Input vector of distortion coefficients\n\\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6[, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$\nof 4, 5, 8, 12 or 14 elements. If the vector is NULL/empty, the zero distortion coefficients are assumed.\n@param newCameraMatrix Camera matrix of the distorted image. By default, it is the same as\ncameraMatrix but you may additionally scale and shift the result by using a different matrix.\n */\nCV_EXPORTS_W void undistort( InputArray src, OutputArray dst,\n                             InputArray cameraMatrix,\n                             InputArray distCoeffs,\n                             InputArray newCameraMatrix = noArray() );\n\n/** @brief Computes the undistortion and rectification transformation map.\n\nThe function computes the joint undistortion and rectification transformation and represents the\nresult in the form of maps for remap. The undistorted image looks like original, as if it is\ncaptured with a camera using the camera matrix =newCameraMatrix and zero distortion. In case of a\nmonocular camera, newCameraMatrix is usually equal to cameraMatrix, or it can be computed by\ncv::getOptimalNewCameraMatrix for a better control over scaling. In case of a stereo camera,\nnewCameraMatrix is normally set to P1 or P2 computed by cv::stereoRectify .\n\nAlso, this new camera is oriented differently in the coordinate space, according to R. That, for\nexample, helps to align two heads of a stereo camera so that the epipolar lines on both images\nbecome horizontal and have the same y- coordinate (in case of a horizontally aligned stereo camera).\n\nThe function actually builds the maps for the inverse mapping algorithm that is used by remap. That\nis, for each pixel \\f$(u, v)\\f$ in the destination (corrected and rectified) image, the function\ncomputes the corresponding coordinates in the source image (that is, in the original image from\ncamera). The following process is applied:\n\\f[\n\\begin{array}{l}\nx  \\leftarrow (u - {c'}_x)/{f'}_x  \\\\\ny  \\leftarrow (v - {c'}_y)/{f'}_y  \\\\\n{[X\\,Y\\,W]} ^T  \\leftarrow R^{-1}*[x \\, y \\, 1]^T  \\\\\nx'  \\leftarrow X/W  \\\\\ny'  \\leftarrow Y/W  \\\\\nr^2  \\leftarrow x'^2 + y'^2 \\\\\nx''  \\leftarrow x' \\frac{1 + k_1 r^2 + k_2 r^4 + k_3 r^6}{1 + k_4 r^2 + k_5 r^4 + k_6 r^6}\n+ 2p_1 x' y' + p_2(r^2 + 2 x'^2)  + s_1 r^2 + s_2 r^4\\\\\ny''  \\leftarrow y' \\frac{1 + k_1 r^2 + k_2 r^4 + k_3 r^6}{1 + k_4 r^2 + k_5 r^4 + k_6 r^6}\n+ p_1 (r^2 + 2 y'^2) + 2 p_2 x' y' + s_3 r^2 + s_4 r^4 \\\\\ns\\vecthree{x'''}{y'''}{1} =\n\\vecthreethree{R_{33}(\\tau_x, \\tau_y)}{0}{-R_{13}((\\tau_x, \\tau_y)}\n{0}{R_{33}(\\tau_x, \\tau_y)}{-R_{23}(\\tau_x, \\tau_y)}\n{0}{0}{1} R(\\tau_x, \\tau_y) \\vecthree{x''}{y''}{1}\\\\\nmap_x(u,v)  \\leftarrow x''' f_x + c_x  \\\\\nmap_y(u,v)  \\leftarrow y''' f_y + c_y\n\\end{array}\n\\f]\nwhere \\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6[, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$\nare the distortion coefficients.\n\nIn case of a stereo camera, this function is called twice: once for each camera head, after\nstereoRectify, which in its turn is called after cv::stereoCalibrate. But if the stereo camera\nwas not calibrated, it is still possible to compute the rectification transformations directly from\nthe fundamental matrix using cv::stereoRectifyUncalibrated. For each camera, the function computes\nhomography H as the rectification transformation in a pixel domain, not a rotation matrix R in 3D\nspace. R can be computed from H as\n\\f[\\texttt{R} = \\texttt{cameraMatrix} ^{-1} \\cdot \\texttt{H} \\cdot \\texttt{cameraMatrix}\\f]\nwhere cameraMatrix can be chosen arbitrarily.\n\n@param cameraMatrix Input camera matrix \\f$A=\\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\\f$ .\n@param distCoeffs Input vector of distortion coefficients\n\\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6[, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$\nof 4, 5, 8, 12 or 14 elements. If the vector is NULL/empty, the zero distortion coefficients are assumed.\n@param R Optional rectification transformation in the object space (3x3 matrix). R1 or R2 ,\ncomputed by stereoRectify can be passed here. If the matrix is empty, the identity transformation\nis assumed. In cvInitUndistortMap R assumed to be an identity matrix.\n@param newCameraMatrix New camera matrix \\f$A'=\\vecthreethree{f_x'}{0}{c_x'}{0}{f_y'}{c_y'}{0}{0}{1}\\f$.\n@param size Undistorted image size.\n@param m1type Type of the first output map that can be CV_32FC1 or CV_16SC2, see cv::convertMaps\n@param map1 The first output map.\n@param map2 The second output map.\n */\nCV_EXPORTS_W void initUndistortRectifyMap( InputArray cameraMatrix, InputArray distCoeffs,\n                           InputArray R, InputArray newCameraMatrix,\n                           Size size, int m1type, OutputArray map1, OutputArray map2 );\n\n//! initializes maps for cv::remap() for wide-angle\nCV_EXPORTS_W float initWideAngleProjMap( InputArray cameraMatrix, InputArray distCoeffs,\n                                         Size imageSize, int destImageWidth,\n                                         int m1type, OutputArray map1, OutputArray map2,\n                                         int projType = PROJ_SPHERICAL_EQRECT, double alpha = 0);\n\n/** @brief Returns the default new camera matrix.\n\nThe function returns the camera matrix that is either an exact copy of the input cameraMatrix (when\ncenterPrinicipalPoint=false ), or the modified one (when centerPrincipalPoint=true).\n\nIn the latter case, the new camera matrix will be:\n\n\\f[\\begin{bmatrix} f_x && 0 && ( \\texttt{imgSize.width} -1)*0.5  \\\\ 0 && f_y && ( \\texttt{imgSize.height} -1)*0.5  \\\\ 0 && 0 && 1 \\end{bmatrix} ,\\f]\n\nwhere \\f$f_x\\f$ and \\f$f_y\\f$ are \\f$(0,0)\\f$ and \\f$(1,1)\\f$ elements of cameraMatrix, respectively.\n\nBy default, the undistortion functions in OpenCV (see initUndistortRectifyMap, undistort) do not\nmove the principal point. However, when you work with stereo, it is important to move the principal\npoints in both views to the same y-coordinate (which is required by most of stereo correspondence\nalgorithms), and may be to the same x-coordinate too. So, you can form the new camera matrix for\neach view where the principal points are located at the center.\n\n@param cameraMatrix Input camera matrix.\n@param imgsize Camera view image size in pixels.\n@param centerPrincipalPoint Location of the principal point in the new camera matrix. The\nparameter indicates whether this location should be at the image center or not.\n */\nCV_EXPORTS_W Mat getDefaultNewCameraMatrix( InputArray cameraMatrix, Size imgsize = Size(),\n                                            bool centerPrincipalPoint = false );\n\n/** @brief Computes the ideal point coordinates from the observed point coordinates.\n\nThe function is similar to cv::undistort and cv::initUndistortRectifyMap but it operates on a\nsparse set of points instead of a raster image. Also the function performs a reverse transformation\nto projectPoints. In case of a 3D object, it does not reconstruct its 3D coordinates, but for a\nplanar object, it does, up to a translation vector, if the proper R is specified.\n@code\n    // (u,v) is the input point, (u', v') is the output point\n    // camera_matrix=[fx 0 cx; 0 fy cy; 0 0 1]\n    // P=[fx' 0 cx' tx; 0 fy' cy' ty; 0 0 1 tz]\n    x\" = (u - cx)/fx\n    y\" = (v - cy)/fy\n    (x',y') = undistort(x\",y\",dist_coeffs)\n    [X,Y,W]T = R*[x' y' 1]T\n    x = X/W, y = Y/W\n    // only performed if P=[fx' 0 cx' [tx]; 0 fy' cy' [ty]; 0 0 1 [tz]] is specified\n    u' = x*fx' + cx'\n    v' = y*fy' + cy',\n@endcode\nwhere cv::undistort is an approximate iterative algorithm that estimates the normalized original\npoint coordinates out of the normalized distorted point coordinates (\"normalized\" means that the\ncoordinates do not depend on the camera matrix).\n\nThe function can be used for both a stereo camera head or a monocular camera (when R is empty).\n\n@param src Observed point coordinates, 1xN or Nx1 2-channel (CV_32FC2 or CV_64FC2).\n@param dst Output ideal point coordinates after undistortion and reverse perspective\ntransformation. If matrix P is identity or omitted, dst will contain normalized point coordinates.\n@param cameraMatrix Camera matrix \\f$\\vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\\f$ .\n@param distCoeffs Input vector of distortion coefficients\n\\f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6[, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]])\\f$\nof 4, 5, 8, 12 or 14 elements. If the vector is NULL/empty, the zero distortion coefficients are assumed.\n@param R Rectification transformation in the object space (3x3 matrix). R1 or R2 computed by\ncv::stereoRectify can be passed here. If the matrix is empty, the identity transformation is used.\n@param P New camera matrix (3x3) or new projection matrix (3x4). P1 or P2 computed by\ncv::stereoRectify can be passed here. If the matrix is empty, the identity new camera matrix is used.\n */\nCV_EXPORTS_W void undistortPoints( InputArray src, OutputArray dst,\n                                   InputArray cameraMatrix, InputArray distCoeffs,\n                                   InputArray R = noArray(), InputArray P = noArray());\n\n//! @} imgproc_transform\n\n//! @addtogroup imgproc_hist\n//! @{\n\n/** @example demhist.cpp\nAn example for creating histograms of an image\n*/\n\n/** @brief Calculates a histogram of a set of arrays.\n\nThe functions calcHist calculate the histogram of one or more arrays. The elements of a tuple used\nto increment a histogram bin are taken from the corresponding input arrays at the same location. The\nsample below shows how to compute a 2D Hue-Saturation histogram for a color image. :\n@code\n    #include <opencv2/imgproc.hpp>\n    #include <opencv2/highgui.hpp>\n\n    using namespace cv;\n\n    int main( int argc, char** argv )\n    {\n        Mat src, hsv;\n        if( argc != 2 || !(src=imread(argv[1], 1)).data )\n            return -1;\n\n        cvtColor(src, hsv, COLOR_BGR2HSV);\n\n        // Quantize the hue to 30 levels\n        // and the saturation to 32 levels\n        int hbins = 30, sbins = 32;\n        int histSize[] = {hbins, sbins};\n        // hue varies from 0 to 179, see cvtColor\n        float hranges[] = { 0, 180 };\n        // saturation varies from 0 (black-gray-white) to\n        // 255 (pure spectrum color)\n        float sranges[] = { 0, 256 };\n        const float* ranges[] = { hranges, sranges };\n        MatND hist;\n        // we compute the histogram from the 0-th and 1-st channels\n        int channels[] = {0, 1};\n\n        calcHist( &hsv, 1, channels, Mat(), // do not use mask\n                 hist, 2, histSize, ranges,\n                 true, // the histogram is uniform\n                 false );\n        double maxVal=0;\n        minMaxLoc(hist, 0, &maxVal, 0, 0);\n\n        int scale = 10;\n        Mat histImg = Mat::zeros(sbins*scale, hbins*10, CV_8UC3);\n\n        for( int h = 0; h < hbins; h++ )\n            for( int s = 0; s < sbins; s++ )\n            {\n                float binVal = hist.at<float>(h, s);\n                int intensity = cvRound(binVal*255/maxVal);\n                rectangle( histImg, Point(h*scale, s*scale),\n                            Point( (h+1)*scale - 1, (s+1)*scale - 1),\n                            Scalar::all(intensity),\n                            CV_FILLED );\n            }\n\n        namedWindow( \"Source\", 1 );\n        imshow( \"Source\", src );\n\n        namedWindow( \"H-S Histogram\", 1 );\n        imshow( \"H-S Histogram\", histImg );\n        waitKey();\n    }\n@endcode\n\n@param images Source arrays. They all should have the same depth, CV_8U or CV_32F , and the same\nsize. Each of them can have an arbitrary number of channels.\n@param nimages Number of source images.\n@param channels List of the dims channels used to compute the histogram. The first array channels\nare numerated from 0 to images[0].channels()-1 , the second array channels are counted from\nimages[0].channels() to images[0].channels() + images[1].channels()-1, and so on.\n@param mask Optional mask. If the matrix is not empty, it must be an 8-bit array of the same size\nas images[i] . The non-zero mask elements mark the array elements counted in the histogram.\n@param hist Output histogram, which is a dense or sparse dims -dimensional array.\n@param dims Histogram dimensionality that must be positive and not greater than CV_MAX_DIMS\n(equal to 32 in the current OpenCV version).\n@param histSize Array of histogram sizes in each dimension.\n@param ranges Array of the dims arrays of the histogram bin boundaries in each dimension. When the\nhistogram is uniform ( uniform =true), then for each dimension i it is enough to specify the lower\n(inclusive) boundary \\f$L_0\\f$ of the 0-th histogram bin and the upper (exclusive) boundary\n\\f$U_{\\texttt{histSize}[i]-1}\\f$ for the last histogram bin histSize[i]-1 . That is, in case of a\nuniform histogram each of ranges[i] is an array of 2 elements. When the histogram is not uniform (\nuniform=false ), then each of ranges[i] contains histSize[i]+1 elements:\n\\f$L_0, U_0=L_1, U_1=L_2, ..., U_{\\texttt{histSize[i]}-2}=L_{\\texttt{histSize[i]}-1}, U_{\\texttt{histSize[i]}-1}\\f$\n. The array elements, that are not between \\f$L_0\\f$ and \\f$U_{\\texttt{histSize[i]}-1}\\f$ , are not\ncounted in the histogram.\n@param uniform Flag indicating whether the histogram is uniform or not (see above).\n@param accumulate Accumulation flag. If it is set, the histogram is not cleared in the beginning\nwhen it is allocated. This feature enables you to compute a single histogram from several sets of\narrays, or to update the histogram in time.\n*/\nCV_EXPORTS void calcHist( const Mat* images, int nimages,\n                          const int* channels, InputArray mask,\n                          OutputArray hist, int dims, const int* histSize,\n                          const float** ranges, bool uniform = true, bool accumulate = false );\n\n/** @overload\n\nthis variant uses cv::SparseMat for output\n*/\nCV_EXPORTS void calcHist( const Mat* images, int nimages,\n                          const int* channels, InputArray mask,\n                          SparseMat& hist, int dims,\n                          const int* histSize, const float** ranges,\n                          bool uniform = true, bool accumulate = false );\n\n/** @overload */\nCV_EXPORTS_W void calcHist( InputArrayOfArrays images,\n                            const std::vector<int>& channels,\n                            InputArray mask, OutputArray hist,\n                            const std::vector<int>& histSize,\n                            const std::vector<float>& ranges,\n                            bool accumulate = false );\n\n/** @brief Calculates the back projection of a histogram.\n\nThe functions calcBackProject calculate the back project of the histogram. That is, similarly to\ncv::calcHist , at each location (x, y) the function collects the values from the selected channels\nin the input images and finds the corresponding histogram bin. But instead of incrementing it, the\nfunction reads the bin value, scales it by scale , and stores in backProject(x,y) . In terms of\nstatistics, the function computes probability of each element value in respect with the empirical\nprobability distribution represented by the histogram. See how, for example, you can find and track\na bright-colored object in a scene:\n\n- Before tracking, show the object to the camera so that it covers almost the whole frame.\nCalculate a hue histogram. The histogram may have strong maximums, corresponding to the dominant\ncolors in the object.\n\n- When tracking, calculate a back projection of a hue plane of each input video frame using that\npre-computed histogram. Threshold the back projection to suppress weak colors. It may also make\nsense to suppress pixels with non-sufficient color saturation and too dark or too bright pixels.\n\n- Find connected components in the resulting picture and choose, for example, the largest\ncomponent.\n\nThis is an approximate algorithm of the CamShift color object tracker.\n\n@param images Source arrays. They all should have the same depth, CV_8U or CV_32F , and the same\nsize. Each of them can have an arbitrary number of channels.\n@param nimages Number of source images.\n@param channels The list of channels used to compute the back projection. The number of channels\nmust match the histogram dimensionality. The first array channels are numerated from 0 to\nimages[0].channels()-1 , the second array channels are counted from images[0].channels() to\nimages[0].channels() + images[1].channels()-1, and so on.\n@param hist Input histogram that can be dense or sparse.\n@param backProject Destination back projection array that is a single-channel array of the same\nsize and depth as images[0] .\n@param ranges Array of arrays of the histogram bin boundaries in each dimension. See calcHist .\n@param scale Optional scale factor for the output back projection.\n@param uniform Flag indicating whether the histogram is uniform or not (see above).\n\n@sa cv::calcHist, cv::compareHist\n */\nCV_EXPORTS void calcBackProject( const Mat* images, int nimages,\n                                 const int* channels, InputArray hist,\n                                 OutputArray backProject, const float** ranges,\n                                 double scale = 1, bool uniform = true );\n\n/** @overload */\nCV_EXPORTS void calcBackProject( const Mat* images, int nimages,\n                                 const int* channels, const SparseMat& hist,\n                                 OutputArray backProject, const float** ranges,\n                                 double scale = 1, bool uniform = true );\n\n/** @overload */\nCV_EXPORTS_W void calcBackProject( InputArrayOfArrays images, const std::vector<int>& channels,\n                                   InputArray hist, OutputArray dst,\n                                   const std::vector<float>& ranges,\n                                   double scale );\n\n/** @brief Compares two histograms.\n\nThe function compare two dense or two sparse histograms using the specified method.\n\nThe function returns \\f$d(H_1, H_2)\\f$ .\n\nWhile the function works well with 1-, 2-, 3-dimensional dense histograms, it may not be suitable\nfor high-dimensional sparse histograms. In such histograms, because of aliasing and sampling\nproblems, the coordinates of non-zero histogram bins can slightly shift. To compare such histograms\nor more general sparse configurations of weighted points, consider using the cv::EMD function.\n\n@param H1 First compared histogram.\n@param H2 Second compared histogram of the same size as H1 .\n@param method Comparison method, see cv::HistCompMethods\n */\nCV_EXPORTS_W double compareHist( InputArray H1, InputArray H2, int method );\n\n/** @overload */\nCV_EXPORTS double compareHist( const SparseMat& H1, const SparseMat& H2, int method );\n\n/** @brief Equalizes the histogram of a grayscale image.\n\nThe function equalizes the histogram of the input image using the following algorithm:\n\n- Calculate the histogram \\f$H\\f$ for src .\n- Normalize the histogram so that the sum of histogram bins is 255.\n- Compute the integral of the histogram:\n\\f[H'_i =  \\sum _{0  \\le j < i} H(j)\\f]\n- Transform the image using \\f$H'\\f$ as a look-up table: \\f$\\texttt{dst}(x,y) = H'(\\texttt{src}(x,y))\\f$\n\nThe algorithm normalizes the brightness and increases the contrast of the image.\n\n@param src Source 8-bit single channel image.\n@param dst Destination image of the same size and type as src .\n */\nCV_EXPORTS_W void equalizeHist( InputArray src, OutputArray dst );\n\n/** @brief Computes the \"minimal work\" distance between two weighted point configurations.\n\nThe function computes the earth mover distance and/or a lower boundary of the distance between the\ntwo weighted point configurations. One of the applications described in @cite RubnerSept98,\n@cite Rubner2000 is multi-dimensional histogram comparison for image retrieval. EMD is a transportation\nproblem that is solved using some modification of a simplex algorithm, thus the complexity is\nexponential in the worst case, though, on average it is much faster. In the case of a real metric\nthe lower boundary can be calculated even faster (using linear-time algorithm) and it can be used\nto determine roughly whether the two signatures are far enough so that they cannot relate to the\nsame object.\n\n@param signature1 First signature, a \\f$\\texttt{size1}\\times \\texttt{dims}+1\\f$ floating-point matrix.\nEach row stores the point weight followed by the point coordinates. The matrix is allowed to have\na single column (weights only) if the user-defined cost matrix is used.\n@param signature2 Second signature of the same format as signature1 , though the number of rows\nmay be different. The total weights may be different. In this case an extra \"dummy\" point is added\nto either signature1 or signature2 .\n@param distType Used metric. See cv::DistanceTypes.\n@param cost User-defined \\f$\\texttt{size1}\\times \\texttt{size2}\\f$ cost matrix. Also, if a cost matrix\nis used, lower boundary lowerBound cannot be calculated because it needs a metric function.\n@param lowerBound Optional input/output parameter: lower boundary of a distance between the two\nsignatures that is a distance between mass centers. The lower boundary may not be calculated if\nthe user-defined cost matrix is used, the total weights of point configurations are not equal, or\nif the signatures consist of weights only (the signature matrices have a single column). You\n**must** initialize \\*lowerBound . If the calculated distance between mass centers is greater or\nequal to \\*lowerBound (it means that the signatures are far enough), the function does not\ncalculate EMD. In any case \\*lowerBound is set to the calculated distance between mass centers on\nreturn. Thus, if you want to calculate both distance between mass centers and EMD, \\*lowerBound\nshould be set to 0.\n@param flow Resultant \\f$\\texttt{size1} \\times \\texttt{size2}\\f$ flow matrix: \\f$\\texttt{flow}_{i,j}\\f$ is\na flow from \\f$i\\f$ -th point of signature1 to \\f$j\\f$ -th point of signature2 .\n */\nCV_EXPORTS float EMD( InputArray signature1, InputArray signature2,\n                      int distType, InputArray cost=noArray(),\n                      float* lowerBound = 0, OutputArray flow = noArray() );\n\n//! @} imgproc_hist\n\n/** @example watershed.cpp\nAn example using the watershed algorithm\n */\n\n/** @brief Performs a marker-based image segmentation using the watershed algorithm.\n\nThe function implements one of the variants of watershed, non-parametric marker-based segmentation\nalgorithm, described in @cite Meyer92 .\n\nBefore passing the image to the function, you have to roughly outline the desired regions in the\nimage markers with positive (\\>0) indices. So, every region is represented as one or more connected\ncomponents with the pixel values 1, 2, 3, and so on. Such markers can be retrieved from a binary\nmask using findContours and drawContours (see the watershed.cpp demo). The markers are \"seeds\" of\nthe future image regions. All the other pixels in markers , whose relation to the outlined regions\nis not known and should be defined by the algorithm, should be set to 0's. In the function output,\neach pixel in markers is set to a value of the \"seed\" components or to -1 at boundaries between the\nregions.\n\n@note Any two neighbor connected components are not necessarily separated by a watershed boundary\n(-1's pixels); for example, they can touch each other in the initial marker image passed to the\nfunction.\n\n@param image Input 8-bit 3-channel image.\n@param markers Input/output 32-bit single-channel image (map) of markers. It should have the same\nsize as image .\n\n@sa findContours\n\n@ingroup imgproc_misc\n */\nCV_EXPORTS_W void watershed( InputArray image, InputOutputArray markers );\n\n//! @addtogroup imgproc_filter\n//! @{\n\n/** @brief Performs initial step of meanshift segmentation of an image.\n\nThe function implements the filtering stage of meanshift segmentation, that is, the output of the\nfunction is the filtered \"posterized\" image with color gradients and fine-grain texture flattened.\nAt every pixel (X,Y) of the input image (or down-sized input image, see below) the function executes\nmeanshift iterations, that is, the pixel (X,Y) neighborhood in the joint space-color hyperspace is\nconsidered:\n\n\\f[(x,y): X- \\texttt{sp} \\le x  \\le X+ \\texttt{sp} , Y- \\texttt{sp} \\le y  \\le Y+ \\texttt{sp} , ||(R,G,B)-(r,g,b)||   \\le \\texttt{sr}\\f]\n\nwhere (R,G,B) and (r,g,b) are the vectors of color components at (X,Y) and (x,y), respectively\n(though, the algorithm does not depend on the color space used, so any 3-component color space can\nbe used instead). Over the neighborhood the average spatial value (X',Y') and average color vector\n(R',G',B') are found and they act as the neighborhood center on the next iteration:\n\n\\f[(X,Y)~(X',Y'), (R,G,B)~(R',G',B').\\f]\n\nAfter the iterations over, the color components of the initial pixel (that is, the pixel from where\nthe iterations started) are set to the final value (average color at the last iteration):\n\n\\f[I(X,Y) <- (R*,G*,B*)\\f]\n\nWhen maxLevel \\> 0, the gaussian pyramid of maxLevel+1 levels is built, and the above procedure is\nrun on the smallest layer first. After that, the results are propagated to the larger layer and the\niterations are run again only on those pixels where the layer colors differ by more than sr from the\nlower-resolution layer of the pyramid. That makes boundaries of color regions sharper. Note that the\nresults will be actually different from the ones obtained by running the meanshift procedure on the\nwhole original image (i.e. when maxLevel==0).\n\n@param src The source 8-bit, 3-channel image.\n@param dst The destination image of the same format and the same size as the source.\n@param sp The spatial window radius.\n@param sr The color window radius.\n@param maxLevel Maximum level of the pyramid for the segmentation.\n@param termcrit Termination criteria: when to stop meanshift iterations.\n */\nCV_EXPORTS_W void pyrMeanShiftFiltering( InputArray src, OutputArray dst,\n                                         double sp, double sr, int maxLevel = 1,\n                                         TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5,1) );\n\n//! @}\n\n//! @addtogroup imgproc_misc\n//! @{\n\n/** @example grabcut.cpp\nAn example using the GrabCut algorithm\n */\n\n/** @brief Runs the GrabCut algorithm.\n\nThe function implements the [GrabCut image segmentation algorithm](http://en.wikipedia.org/wiki/GrabCut).\n\n@param img Input 8-bit 3-channel image.\n@param mask Input/output 8-bit single-channel mask. The mask is initialized by the function when\nmode is set to GC_INIT_WITH_RECT. Its elements may have one of the cv::GrabCutClasses.\n@param rect ROI containing a segmented object. The pixels outside of the ROI are marked as\n\"obvious background\". The parameter is only used when mode==GC_INIT_WITH_RECT .\n@param bgdModel Temporary array for the background model. Do not modify it while you are\nprocessing the same image.\n@param fgdModel Temporary arrays for the foreground model. Do not modify it while you are\nprocessing the same image.\n@param iterCount Number of iterations the algorithm should make before returning the result. Note\nthat the result can be refined with further calls with mode==GC_INIT_WITH_MASK or\nmode==GC_EVAL .\n@param mode Operation mode that could be one of the cv::GrabCutModes\n */\nCV_EXPORTS_W void grabCut( InputArray img, InputOutputArray mask, Rect rect,\n                           InputOutputArray bgdModel, InputOutputArray fgdModel,\n                           int iterCount, int mode = GC_EVAL );\n\n/** @example distrans.cpp\nAn example on using the distance transform\\\n*/\n\n\n/** @brief Calculates the distance to the closest zero pixel for each pixel of the source image.\n\nThe functions distanceTransform calculate the approximate or precise distance from every binary\nimage pixel to the nearest zero pixel. For zero image pixels, the distance will obviously be zero.\n\nWhen maskSize == DIST_MASK_PRECISE and distanceType == DIST_L2 , the function runs the\nalgorithm described in @cite Felzenszwalb04 . This algorithm is parallelized with the TBB library.\n\nIn other cases, the algorithm @cite Borgefors86 is used. This means that for a pixel the function\nfinds the shortest path to the nearest zero pixel consisting of basic shifts: horizontal, vertical,\ndiagonal, or knight's move (the latest is available for a \\f$5\\times 5\\f$ mask). The overall\ndistance is calculated as a sum of these basic distances. Since the distance function should be\nsymmetric, all of the horizontal and vertical shifts must have the same cost (denoted as a ), all\nthe diagonal shifts must have the same cost (denoted as `b`), and all knight's moves must have the\nsame cost (denoted as `c`). For the cv::DIST_C and cv::DIST_L1 types, the distance is calculated\nprecisely, whereas for cv::DIST_L2 (Euclidean distance) the distance can be calculated only with a\nrelative error (a \\f$5\\times 5\\f$ mask gives more accurate results). For `a`,`b`, and `c`, OpenCV\nuses the values suggested in the original paper:\n- DIST_L1: `a = 1, b = 2`\n- DIST_L2:\n    - `3 x 3`: `a=0.955, b=1.3693`\n    - `5 x 5`: `a=1, b=1.4, c=2.1969`\n- DIST_C: `a = 1, b = 1`\n\nTypically, for a fast, coarse distance estimation DIST_L2, a \\f$3\\times 3\\f$ mask is used. For a\nmore accurate distance estimation DIST_L2, a \\f$5\\times 5\\f$ mask or the precise algorithm is used.\nNote that both the precise and the approximate algorithms are linear on the number of pixels.\n\nThis variant of the function does not only compute the minimum distance for each pixel \\f$(x, y)\\f$\nbut also identifies the nearest connected component consisting of zero pixels\n(labelType==DIST_LABEL_CCOMP) or the nearest zero pixel (labelType==DIST_LABEL_PIXEL). Index of the\ncomponent/pixel is stored in `labels(x, y)`. When labelType==DIST_LABEL_CCOMP, the function\nautomatically finds connected components of zero pixels in the input image and marks them with\ndistinct labels. When labelType==DIST_LABEL_CCOMP, the function scans through the input image and\nmarks all the zero pixels with distinct labels.\n\nIn this mode, the complexity is still linear. That is, the function provides a very fast way to\ncompute the Voronoi diagram for a binary image. Currently, the second variant can use only the\napproximate distance transform algorithm, i.e. maskSize=DIST_MASK_PRECISE is not supported\nyet.\n\n@param src 8-bit, single-channel (binary) source image.\n@param dst Output image with calculated distances. It is a 8-bit or 32-bit floating-point,\nsingle-channel image of the same size as src.\n@param labels Output 2D array of labels (the discrete Voronoi diagram). It has the type\nCV_32SC1 and the same size as src.\n@param distanceType Type of distance, see cv::DistanceTypes\n@param maskSize Size of the distance transform mask, see cv::DistanceTransformMasks.\nDIST_MASK_PRECISE is not supported by this variant. In case of the DIST_L1 or DIST_C distance type,\nthe parameter is forced to 3 because a \\f$3\\times 3\\f$ mask gives the same result as \\f$5\\times\n5\\f$ or any larger aperture.\n@param labelType Type of the label array to build, see cv::DistanceTransformLabelTypes.\n */\nCV_EXPORTS_AS(distanceTransformWithLabels) void distanceTransform( InputArray src, OutputArray dst,\n                                     OutputArray labels, int distanceType, int maskSize,\n                                     int labelType = DIST_LABEL_CCOMP );\n\n/** @overload\n@param src 8-bit, single-channel (binary) source image.\n@param dst Output image with calculated distances. It is a 8-bit or 32-bit floating-point,\nsingle-channel image of the same size as src .\n@param distanceType Type of distance, see cv::DistanceTypes\n@param maskSize Size of the distance transform mask, see cv::DistanceTransformMasks. In case of the\nDIST_L1 or DIST_C distance type, the parameter is forced to 3 because a \\f$3\\times 3\\f$ mask gives\nthe same result as \\f$5\\times 5\\f$ or any larger aperture.\n@param dstType Type of output image. It can be CV_8U or CV_32F. Type CV_8U can be used only for\nthe first variant of the function and distanceType == DIST_L1.\n*/\nCV_EXPORTS_W void distanceTransform( InputArray src, OutputArray dst,\n                                     int distanceType, int maskSize, int dstType=CV_32F);\n\n/** @example ffilldemo.cpp\n  An example using the FloodFill technique\n*/\n\n/** @overload\n\nvariant without `mask` parameter\n*/\nCV_EXPORTS int floodFill( InputOutputArray image,\n                          Point seedPoint, Scalar newVal, CV_OUT Rect* rect = 0,\n                          Scalar loDiff = Scalar(), Scalar upDiff = Scalar(),\n                          int flags = 4 );\n\n/** @brief Fills a connected component with the given color.\n\nThe functions floodFill fill a connected component starting from the seed point with the specified\ncolor. The connectivity is determined by the color/brightness closeness of the neighbor pixels. The\npixel at \\f$(x,y)\\f$ is considered to belong to the repainted domain if:\n\n- in case of a grayscale image and floating range\n\\f[\\texttt{src} (x',y')- \\texttt{loDiff} \\leq \\texttt{src} (x,y)  \\leq \\texttt{src} (x',y')+ \\texttt{upDiff}\\f]\n\n\n- in case of a grayscale image and fixed range\n\\f[\\texttt{src} ( \\texttt{seedPoint} .x, \\texttt{seedPoint} .y)- \\texttt{loDiff} \\leq \\texttt{src} (x,y)  \\leq \\texttt{src} ( \\texttt{seedPoint} .x, \\texttt{seedPoint} .y)+ \\texttt{upDiff}\\f]\n\n\n- in case of a color image and floating range\n\\f[\\texttt{src} (x',y')_r- \\texttt{loDiff} _r \\leq \\texttt{src} (x,y)_r \\leq \\texttt{src} (x',y')_r+ \\texttt{upDiff} _r,\\f]\n\\f[\\texttt{src} (x',y')_g- \\texttt{loDiff} _g \\leq \\texttt{src} (x,y)_g \\leq \\texttt{src} (x',y')_g+ \\texttt{upDiff} _g\\f]\nand\n\\f[\\texttt{src} (x',y')_b- \\texttt{loDiff} _b \\leq \\texttt{src} (x,y)_b \\leq \\texttt{src} (x',y')_b+ \\texttt{upDiff} _b\\f]\n\n\n- in case of a color image and fixed range\n\\f[\\texttt{src} ( \\texttt{seedPoint} .x, \\texttt{seedPoint} .y)_r- \\texttt{loDiff} _r \\leq \\texttt{src} (x,y)_r \\leq \\texttt{src} ( \\texttt{seedPoint} .x, \\texttt{seedPoint} .y)_r+ \\texttt{upDiff} _r,\\f]\n\\f[\\texttt{src} ( \\texttt{seedPoint} .x, \\texttt{seedPoint} .y)_g- \\texttt{loDiff} _g \\leq \\texttt{src} (x,y)_g \\leq \\texttt{src} ( \\texttt{seedPoint} .x, \\texttt{seedPoint} .y)_g+ \\texttt{upDiff} _g\\f]\nand\n\\f[\\texttt{src} ( \\texttt{seedPoint} .x, \\texttt{seedPoint} .y)_b- \\texttt{loDiff} _b \\leq \\texttt{src} (x,y)_b \\leq \\texttt{src} ( \\texttt{seedPoint} .x, \\texttt{seedPoint} .y)_b+ \\texttt{upDiff} _b\\f]\n\n\nwhere \\f$src(x',y')\\f$ is the value of one of pixel neighbors that is already known to belong to the\ncomponent. That is, to be added to the connected component, a color/brightness of the pixel should\nbe close enough to:\n- Color/brightness of one of its neighbors that already belong to the connected component in case\nof a floating range.\n- Color/brightness of the seed point in case of a fixed range.\n\nUse these functions to either mark a connected component with the specified color in-place, or build\na mask and then extract the contour, or copy the region to another image, and so on.\n\n@param image Input/output 1- or 3-channel, 8-bit, or floating-point image. It is modified by the\nfunction unless the FLOODFILL_MASK_ONLY flag is set in the second variant of the function. See\nthe details below.\n@param mask Operation mask that should be a single-channel 8-bit image, 2 pixels wider and 2 pixels\ntaller than image. Since this is both an input and output parameter, you must take responsibility\nof initializing it. Flood-filling cannot go across non-zero pixels in the input mask. For example,\nan edge detector output can be used as a mask to stop filling at edges. On output, pixels in the\nmask corresponding to filled pixels in the image are set to 1 or to the a value specified in flags\nas described below. It is therefore possible to use the same mask in multiple calls to the function\nto make sure the filled areas do not overlap.\n@param seedPoint Starting point.\n@param newVal New value of the repainted domain pixels.\n@param loDiff Maximal lower brightness/color difference between the currently observed pixel and\none of its neighbors belonging to the component, or a seed pixel being added to the component.\n@param upDiff Maximal upper brightness/color difference between the currently observed pixel and\none of its neighbors belonging to the component, or a seed pixel being added to the component.\n@param rect Optional output parameter set by the function to the minimum bounding rectangle of the\nrepainted domain.\n@param flags Operation flags. The first 8 bits contain a connectivity value. The default value of\n4 means that only the four nearest neighbor pixels (those that share an edge) are considered. A\nconnectivity value of 8 means that the eight nearest neighbor pixels (those that share a corner)\nwill be considered. The next 8 bits (8-16) contain a value between 1 and 255 with which to fill\nthe mask (the default value is 1). For example, 4 | ( 255 \\<\\< 8 ) will consider 4 nearest\nneighbours and fill the mask with a value of 255. The following additional options occupy higher\nbits and therefore may be further combined with the connectivity and mask fill values using\nbit-wise or (|), see cv::FloodFillFlags.\n\n@note Since the mask is larger than the filled image, a pixel \\f$(x, y)\\f$ in image corresponds to the\npixel \\f$(x+1, y+1)\\f$ in the mask .\n\n@sa findContours\n */\nCV_EXPORTS_W int floodFill( InputOutputArray image, InputOutputArray mask,\n                            Point seedPoint, Scalar newVal, CV_OUT Rect* rect=0,\n                            Scalar loDiff = Scalar(), Scalar upDiff = Scalar(),\n                            int flags = 4 );\n\n/** @brief Converts an image from one color space to another.\n\nThe function converts an input image from one color space to another. In case of a transformation\nto-from RGB color space, the order of the channels should be specified explicitly (RGB or BGR). Note\nthat the default color format in OpenCV is often referred to as RGB but it is actually BGR (the\nbytes are reversed). So the first byte in a standard (24-bit) color image will be an 8-bit Blue\ncomponent, the second byte will be Green, and the third byte will be Red. The fourth, fifth, and\nsixth bytes would then be the second pixel (Blue, then Green, then Red), and so on.\n\nThe conventional ranges for R, G, and B channel values are:\n-   0 to 255 for CV_8U images\n-   0 to 65535 for CV_16U images\n-   0 to 1 for CV_32F images\n\nIn case of linear transformations, the range does not matter. But in case of a non-linear\ntransformation, an input RGB image should be normalized to the proper value range to get the correct\nresults, for example, for RGB \\f$\\rightarrow\\f$ L\\*u\\*v\\* transformation. For example, if you have a\n32-bit floating-point image directly converted from an 8-bit image without any scaling, then it will\nhave the 0..255 value range instead of 0..1 assumed by the function. So, before calling cvtColor ,\nyou need first to scale the image down:\n@code\n    img *= 1./255;\n    cvtColor(img, img, COLOR_BGR2Luv);\n@endcode\nIf you use cvtColor with 8-bit images, the conversion will have some information lost. For many\napplications, this will not be noticeable but it is recommended to use 32-bit images in applications\nthat need the full range of colors or that convert an image before an operation and then convert\nback.\n\nIf conversion adds the alpha channel, its value will set to the maximum of corresponding channel\nrange: 255 for CV_8U, 65535 for CV_16U, 1 for CV_32F.\n\n@param src input image: 8-bit unsigned, 16-bit unsigned ( CV_16UC... ), or single-precision\nfloating-point.\n@param dst output image of the same size and depth as src.\n@param code color space conversion code (see cv::ColorConversionCodes).\n@param dstCn number of channels in the destination image; if the parameter is 0, the number of the\nchannels is derived automatically from src and code.\n\n@see @ref imgproc_color_conversions\n */\nCV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );\n\n//! @} imgproc_misc\n\n// main function for all demosaicing procceses\nCV_EXPORTS_W void demosaicing(InputArray _src, OutputArray _dst, int code, int dcn = 0);\n\n//! @addtogroup imgproc_shape\n//! @{\n\n/** @brief Calculates all of the moments up to the third order of a polygon or rasterized shape.\n\nThe function computes moments, up to the 3rd order, of a vector shape or a rasterized shape. The\nresults are returned in the structure cv::Moments.\n\n@param array Raster image (single-channel, 8-bit or floating-point 2D array) or an array (\n\\f$1 \\times N\\f$ or \\f$N \\times 1\\f$ ) of 2D points (Point or Point2f ).\n@param binaryImage If it is true, all non-zero image pixels are treated as 1's. The parameter is\nused for images only.\n@returns moments.\n\n@sa  contourArea, arcLength\n */\nCV_EXPORTS_W Moments moments( InputArray array, bool binaryImage = false );\n\n/** @brief Calculates seven Hu invariants.\n\nThe function calculates seven Hu invariants (introduced in @cite Hu62; see also\n<http://en.wikipedia.org/wiki/Image_moment>) defined as:\n\n\\f[\\begin{array}{l} hu[0]= \\eta _{20}+ \\eta _{02} \\\\ hu[1]=( \\eta _{20}- \\eta _{02})^{2}+4 \\eta _{11}^{2} \\\\ hu[2]=( \\eta _{30}-3 \\eta _{12})^{2}+ (3 \\eta _{21}- \\eta _{03})^{2} \\\\ hu[3]=( \\eta _{30}+ \\eta _{12})^{2}+ ( \\eta _{21}+ \\eta _{03})^{2} \\\\ hu[4]=( \\eta _{30}-3 \\eta _{12})( \\eta _{30}+ \\eta _{12})[( \\eta _{30}+ \\eta _{12})^{2}-3( \\eta _{21}+ \\eta _{03})^{2}]+(3 \\eta _{21}- \\eta _{03})( \\eta _{21}+ \\eta _{03})[3( \\eta _{30}+ \\eta _{12})^{2}-( \\eta _{21}+ \\eta _{03})^{2}] \\\\ hu[5]=( \\eta _{20}- \\eta _{02})[( \\eta _{30}+ \\eta _{12})^{2}- ( \\eta _{21}+ \\eta _{03})^{2}]+4 \\eta _{11}( \\eta _{30}+ \\eta _{12})( \\eta _{21}+ \\eta _{03}) \\\\ hu[6]=(3 \\eta _{21}- \\eta _{03})( \\eta _{21}+ \\eta _{03})[3( \\eta _{30}+ \\eta _{12})^{2}-( \\eta _{21}+ \\eta _{03})^{2}]-( \\eta _{30}-3 \\eta _{12})( \\eta _{21}+ \\eta _{03})[3( \\eta _{30}+ \\eta _{12})^{2}-( \\eta _{21}+ \\eta _{03})^{2}] \\\\ \\end{array}\\f]\n\nwhere \\f$\\eta_{ji}\\f$ stands for \\f$\\texttt{Moments::nu}_{ji}\\f$ .\n\nThese values are proved to be invariants to the image scale, rotation, and reflection except the\nseventh one, whose sign is changed by reflection. This invariance is proved with the assumption of\ninfinite image resolution. In case of raster images, the computed Hu invariants for the original and\ntransformed images are a bit different.\n\n@param moments Input moments computed with moments .\n@param hu Output Hu invariants.\n\n@sa matchShapes\n */\nCV_EXPORTS void HuMoments( const Moments& moments, double hu[7] );\n\n/** @overload */\nCV_EXPORTS_W void HuMoments( const Moments& m, OutputArray hu );\n\n//! @} imgproc_shape\n\n//! @addtogroup imgproc_object\n//! @{\n\n//! type of the template matching operation\nenum TemplateMatchModes {\n    TM_SQDIFF        = 0, //!< \\f[R(x,y)= \\sum _{x',y'} (T(x',y')-I(x+x',y+y'))^2\\f]\n    TM_SQDIFF_NORMED = 1, //!< \\f[R(x,y)= \\frac{\\sum_{x',y'} (T(x',y')-I(x+x',y+y'))^2}{\\sqrt{\\sum_{x',y'}T(x',y')^2 \\cdot \\sum_{x',y'} I(x+x',y+y')^2}}\\f]\n    TM_CCORR         = 2, //!< \\f[R(x,y)= \\sum _{x',y'} (T(x',y')  \\cdot I(x+x',y+y'))\\f]\n    TM_CCORR_NORMED  = 3, //!< \\f[R(x,y)= \\frac{\\sum_{x',y'} (T(x',y') \\cdot I(x+x',y+y'))}{\\sqrt{\\sum_{x',y'}T(x',y')^2 \\cdot \\sum_{x',y'} I(x+x',y+y')^2}}\\f]\n    TM_CCOEFF        = 4, //!< \\f[R(x,y)= \\sum _{x',y'} (T'(x',y')  \\cdot I'(x+x',y+y'))\\f]\n                          //!< where\n                          //!< \\f[\\begin{array}{l} T'(x',y')=T(x',y') - 1/(w  \\cdot h)  \\cdot \\sum _{x'',y''} T(x'',y'') \\\\ I'(x+x',y+y')=I(x+x',y+y') - 1/(w  \\cdot h)  \\cdot \\sum _{x'',y''} I(x+x'',y+y'') \\end{array}\\f]\n    TM_CCOEFF_NORMED = 5  //!< \\f[R(x,y)= \\frac{ \\sum_{x',y'} (T'(x',y') \\cdot I'(x+x',y+y')) }{ \\sqrt{\\sum_{x',y'}T'(x',y')^2 \\cdot \\sum_{x',y'} I'(x+x',y+y')^2} }\\f]\n};\n\n/** @brief Compares a template against overlapped image regions.\n\nThe function slides through image , compares the overlapped patches of size \\f$w \\times h\\f$ against\ntempl using the specified method and stores the comparison results in result . Here are the formulae\nfor the available comparison methods ( \\f$I\\f$ denotes image, \\f$T\\f$ template, \\f$R\\f$ result ). The summation\nis done over template and/or the image patch: \\f$x' = 0...w-1, y' = 0...h-1\\f$\n\nAfter the function finishes the comparison, the best matches can be found as global minimums (when\nTM_SQDIFF was used) or maximums (when TM_CCORR or TM_CCOEFF was used) using the\nminMaxLoc function. In case of a color image, template summation in the numerator and each sum in\nthe denominator is done over all of the channels and separate mean values are used for each channel.\nThat is, the function can take a color template and a color image. The result will still be a\nsingle-channel image, which is easier to analyze.\n\n@param image Image where the search is running. It must be 8-bit or 32-bit floating-point.\n@param templ Searched template. It must be not greater than the source image and have the same\ndata type.\n@param result Map of comparison results. It must be single-channel 32-bit floating-point. If image\nis \\f$W \\times H\\f$ and templ is \\f$w \\times h\\f$ , then result is \\f$(W-w+1) \\times (H-h+1)\\f$ .\n@param method Parameter specifying the comparison method, see cv::TemplateMatchModes\n@param mask Mask of searched template. It must have the same datatype and size with templ. It is\nnot set by default.\n */\nCV_EXPORTS_W void matchTemplate( InputArray image, InputArray templ,\n                                 OutputArray result, int method, InputArray mask = noArray() );\n\n//! @}\n\n//! @addtogroup imgproc_shape\n//! @{\n\n/** @brief computes the connected components labeled image of boolean image\n\nimage with 4 or 8 way connectivity - returns N, the total number of labels [0, N-1] where 0\nrepresents the background label. ltype specifies the output label image type, an important\nconsideration based on the total number of labels or alternatively the total number of pixels in\nthe source image.\n\n@param image the 8-bit single-channel image to be labeled\n@param labels destination labeled image\n@param connectivity 8 or 4 for 8-way or 4-way connectivity respectively\n@param ltype output image label type. Currently CV_32S and CV_16U are supported.\n */\nCV_EXPORTS_W int connectedComponents(InputArray image, OutputArray labels,\n                                     int connectivity = 8, int ltype = CV_32S);\n\n/** @overload\n@param image the 8-bit single-channel image to be labeled\n@param labels destination labeled image\n@param stats statistics output for each label, including the background label, see below for\navailable statistics. Statistics are accessed via stats(label, COLUMN) where COLUMN is one of\ncv::ConnectedComponentsTypes. The data type is CV_32S.\n@param centroids centroid output for each label, including the background label. Centroids are\naccessed via centroids(label, 0) for x and centroids(label, 1) for y. The data type CV_64F.\n@param connectivity 8 or 4 for 8-way or 4-way connectivity respectively\n@param ltype output image label type. Currently CV_32S and CV_16U are supported.\n*/\nCV_EXPORTS_W int connectedComponentsWithStats(InputArray image, OutputArray labels,\n                                              OutputArray stats, OutputArray centroids,\n                                              int connectivity = 8, int ltype = CV_32S);\n\n\n/** @brief Finds contours in a binary image.\n\nThe function retrieves contours from the binary image using the algorithm @cite Suzuki85 . The contours\nare a useful tool for shape analysis and object detection and recognition. See squares.c in the\nOpenCV sample directory.\n\n@note Source image is modified by this function. Also, the function does not take into account\n1-pixel border of the image (it's filled with 0's and used for neighbor analysis in the algorithm),\ntherefore the contours touching the image border will be clipped.\n\n@param image Source, an 8-bit single-channel image. Non-zero pixels are treated as 1's. Zero\npixels remain 0's, so the image is treated as binary . You can use compare , inRange , threshold ,\nadaptiveThreshold , Canny , and others to create a binary image out of a grayscale or color one.\nThe function modifies the image while extracting the contours. If mode equals to RETR_CCOMP\nor RETR_FLOODFILL, the input can also be a 32-bit integer image of labels (CV_32SC1).\n@param contours Detected contours. Each contour is stored as a vector of points.\n@param hierarchy Optional output vector, containing information about the image topology. It has\nas many elements as the number of contours. For each i-th contour contours[i] , the elements\nhierarchy[i][0] , hiearchy[i][1] , hiearchy[i][2] , and hiearchy[i][3] are set to 0-based indices\nin contours of the next and previous contours at the same hierarchical level, the first child\ncontour and the parent contour, respectively. If for the contour i there are no next, previous,\nparent, or nested contours, the corresponding elements of hierarchy[i] will be negative.\n@param mode Contour retrieval mode, see cv::RetrievalModes\n@param method Contour approximation method, see cv::ContourApproximationModes\n@param offset Optional offset by which every contour point is shifted. This is useful if the\ncontours are extracted from the image ROI and then they should be analyzed in the whole image\ncontext.\n */\nCV_EXPORTS_W void findContours( InputOutputArray image, OutputArrayOfArrays contours,\n                              OutputArray hierarchy, int mode,\n                              int method, Point offset = Point());\n\n/** @overload */\nCV_EXPORTS void findContours( InputOutputArray image, OutputArrayOfArrays contours,\n                              int mode, int method, Point offset = Point());\n\n/** @brief Approximates a polygonal curve(s) with the specified precision.\n\nThe functions approxPolyDP approximate a curve or a polygon with another curve/polygon with less\nvertices so that the distance between them is less or equal to the specified precision. It uses the\nDouglas-Peucker algorithm <http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm>\n\n@param curve Input vector of a 2D point stored in std::vector or Mat\n@param approxCurve Result of the approximation. The type should match the type of the input curve.\n@param epsilon Parameter specifying the approximation accuracy. This is the maximum distance\nbetween the original curve and its approximation.\n@param closed If true, the approximated curve is closed (its first and last vertices are\nconnected). Otherwise, it is not closed.\n */\nCV_EXPORTS_W void approxPolyDP( InputArray curve,\n                                OutputArray approxCurve,\n                                double epsilon, bool closed );\n\n/** @brief Calculates a contour perimeter or a curve length.\n\nThe function computes a curve length or a closed contour perimeter.\n\n@param curve Input vector of 2D points, stored in std::vector or Mat.\n@param closed Flag indicating whether the curve is closed or not.\n */\nCV_EXPORTS_W double arcLength( InputArray curve, bool closed );\n\n/** @brief Calculates the up-right bounding rectangle of a point set.\n\nThe function calculates and returns the minimal up-right bounding rectangle for the specified point set.\n\n@param points Input 2D point set, stored in std::vector or Mat.\n */\nCV_EXPORTS_W Rect boundingRect( InputArray points );\n\n/** @brief Calculates a contour area.\n\nThe function computes a contour area. Similarly to moments , the area is computed using the Green\nformula. Thus, the returned area and the number of non-zero pixels, if you draw the contour using\ndrawContours or fillPoly , can be different. Also, the function will most certainly give a wrong\nresults for contours with self-intersections.\n\nExample:\n@code\n    vector<Point> contour;\n    contour.push_back(Point2f(0, 0));\n    contour.push_back(Point2f(10, 0));\n    contour.push_back(Point2f(10, 10));\n    contour.push_back(Point2f(5, 4));\n\n    double area0 = contourArea(contour);\n    vector<Point> approx;\n    approxPolyDP(contour, approx, 5, true);\n    double area1 = contourArea(approx);\n\n    cout << \"area0 =\" << area0 << endl <<\n            \"area1 =\" << area1 << endl <<\n            \"approx poly vertices\" << approx.size() << endl;\n@endcode\n@param contour Input vector of 2D points (contour vertices), stored in std::vector or Mat.\n@param oriented Oriented area flag. If it is true, the function returns a signed area value,\ndepending on the contour orientation (clockwise or counter-clockwise). Using this feature you can\ndetermine orientation of a contour by taking the sign of an area. By default, the parameter is\nfalse, which means that the absolute value is returned.\n */\nCV_EXPORTS_W double contourArea( InputArray contour, bool oriented = false );\n\n/** @brief Finds a rotated rectangle of the minimum area enclosing the input 2D point set.\n\nThe function calculates and returns the minimum-area bounding rectangle (possibly rotated) for a\nspecified point set. See the OpenCV sample minarea.cpp . Developer should keep in mind that the\nreturned rotatedRect can contain negative indices when data is close to the containing Mat element\nboundary.\n\n@param points Input vector of 2D points, stored in std::vector\\<\\> or Mat\n */\nCV_EXPORTS_W RotatedRect minAreaRect( InputArray points );\n\n/** @brief Finds the four vertices of a rotated rect. Useful to draw the rotated rectangle.\n\nThe function finds the four vertices of a rotated rectangle. This function is useful to draw the\nrectangle. In C++, instead of using this function, you can directly use box.points() method. Please\nvisit the [tutorial on bounding\nrectangle](http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html#bounding-rects-circles)\nfor more information.\n\n@param box The input rotated rectangle. It may be the output of\n@param points The output array of four vertices of rectangles.\n */\nCV_EXPORTS_W void boxPoints(RotatedRect box, OutputArray points);\n\n/** @brief Finds a circle of the minimum area enclosing a 2D point set.\n\nThe function finds the minimal enclosing circle of a 2D point set using an iterative algorithm. See\nthe OpenCV sample minarea.cpp .\n\n@param points Input vector of 2D points, stored in std::vector\\<\\> or Mat\n@param center Output center of the circle.\n@param radius Output radius of the circle.\n */\nCV_EXPORTS_W void minEnclosingCircle( InputArray points,\n                                      CV_OUT Point2f& center, CV_OUT float& radius );\n\n/** @example minarea.cpp\n  */\n\n/** @brief Finds a triangle of minimum area enclosing a 2D point set and returns its area.\n\nThe function finds a triangle of minimum area enclosing the given set of 2D points and returns its\narea. The output for a given 2D point set is shown in the image below. 2D points are depicted in\n*red* and the enclosing triangle in *yellow*.\n\n![Sample output of the minimum enclosing triangle function](pics/minenclosingtriangle.png)\n\nThe implementation of the algorithm is based on O'Rourke's @cite ORourke86 and Klee and Laskowski's\n@cite KleeLaskowski85 papers. O'Rourke provides a \\f$\\theta(n)\\f$ algorithm for finding the minimal\nenclosing triangle of a 2D convex polygon with n vertices. Since the minEnclosingTriangle function\ntakes a 2D point set as input an additional preprocessing step of computing the convex hull of the\n2D point set is required. The complexity of the convexHull function is \\f$O(n log(n))\\f$ which is higher\nthan \\f$\\theta(n)\\f$. Thus the overall complexity of the function is \\f$O(n log(n))\\f$.\n\n@param points Input vector of 2D points with depth CV_32S or CV_32F, stored in std::vector\\<\\> or Mat\n@param triangle Output vector of three 2D points defining the vertices of the triangle. The depth\nof the OutputArray must be CV_32F.\n */\nCV_EXPORTS_W double minEnclosingTriangle( InputArray points, CV_OUT OutputArray triangle );\n\n/** @brief Compares two shapes.\n\nThe function compares two shapes. All three implemented methods use the Hu invariants (see cv::HuMoments)\n\n@param contour1 First contour or grayscale image.\n@param contour2 Second contour or grayscale image.\n@param method Comparison method, see ::ShapeMatchModes\n@param parameter Method-specific parameter (not supported now).\n */\nCV_EXPORTS_W double matchShapes( InputArray contour1, InputArray contour2,\n                                 int method, double parameter );\n\n/** @example convexhull.cpp\nAn example using the convexHull functionality\n*/\n\n/** @brief Finds the convex hull of a point set.\n\nThe functions find the convex hull of a 2D point set using the Sklansky's algorithm @cite Sklansky82\nthat has *O(N logN)* complexity in the current implementation. See the OpenCV sample convexhull.cpp\nthat demonstrates the usage of different function variants.\n\n@param points Input 2D point set, stored in std::vector or Mat.\n@param hull Output convex hull. It is either an integer vector of indices or vector of points. In\nthe first case, the hull elements are 0-based indices of the convex hull points in the original\narray (since the set of convex hull points is a subset of the original point set). In the second\ncase, hull elements are the convex hull points themselves.\n@param clockwise Orientation flag. If it is true, the output convex hull is oriented clockwise.\nOtherwise, it is oriented counter-clockwise. The assumed coordinate system has its X axis pointing\nto the right, and its Y axis pointing upwards.\n@param returnPoints Operation flag. In case of a matrix, when the flag is true, the function\nreturns convex hull points. Otherwise, it returns indices of the convex hull points. When the\noutput array is std::vector, the flag is ignored, and the output depends on the type of the\nvector: std::vector\\<int\\> implies returnPoints=true, std::vector\\<Point\\> implies\nreturnPoints=false.\n */\nCV_EXPORTS_W void convexHull( InputArray points, OutputArray hull,\n                              bool clockwise = false, bool returnPoints = true );\n\n/** @brief Finds the convexity defects of a contour.\n\nThe figure below displays convexity defects of a hand contour:\n\n![image](pics/defects.png)\n\n@param contour Input contour.\n@param convexhull Convex hull obtained using convexHull that should contain indices of the contour\npoints that make the hull.\n@param convexityDefects The output vector of convexity defects. In C++ and the new Python/Java\ninterface each convexity defect is represented as 4-element integer vector (a.k.a. cv::Vec4i):\n(start_index, end_index, farthest_pt_index, fixpt_depth), where indices are 0-based indices\nin the original contour of the convexity defect beginning, end and the farthest point, and\nfixpt_depth is fixed-point approximation (with 8 fractional bits) of the distance between the\nfarthest contour point and the hull. That is, to get the floating-point value of the depth will be\nfixpt_depth/256.0.\n */\nCV_EXPORTS_W void convexityDefects( InputArray contour, InputArray convexhull, OutputArray convexityDefects );\n\n/** @brief Tests a contour convexity.\n\nThe function tests whether the input contour is convex or not. The contour must be simple, that is,\nwithout self-intersections. Otherwise, the function output is undefined.\n\n@param contour Input vector of 2D points, stored in std::vector\\<\\> or Mat\n */\nCV_EXPORTS_W bool isContourConvex( InputArray contour );\n\n//! finds intersection of two convex polygons\nCV_EXPORTS_W float intersectConvexConvex( InputArray _p1, InputArray _p2,\n                                          OutputArray _p12, bool handleNested = true );\n\n/** @example fitellipse.cpp\n  An example using the fitEllipse technique\n*/\n\n/** @brief Fits an ellipse around a set of 2D points.\n\nThe function calculates the ellipse that fits (in a least-squares sense) a set of 2D points best of\nall. It returns the rotated rectangle in which the ellipse is inscribed. The first algorithm described by @cite Fitzgibbon95\nis used. Developer should keep in mind that it is possible that the returned\nellipse/rotatedRect data contains negative indices, due to the data points being close to the\nborder of the containing Mat element.\n\n@param points Input 2D point set, stored in std::vector\\<\\> or Mat\n */\nCV_EXPORTS_W RotatedRect fitEllipse( InputArray points );\n\n/** @brief Fits a line to a 2D or 3D point set.\n\nThe function fitLine fits a line to a 2D or 3D point set by minimizing \\f$\\sum_i \\rho(r_i)\\f$ where\n\\f$r_i\\f$ is a distance between the \\f$i^{th}\\f$ point, the line and \\f$\\rho(r)\\f$ is a distance function, one\nof the following:\n-  DIST_L2\n\\f[\\rho (r) = r^2/2  \\quad \\text{(the simplest and the fastest least-squares method)}\\f]\n- DIST_L1\n\\f[\\rho (r) = r\\f]\n- DIST_L12\n\\f[\\rho (r) = 2  \\cdot ( \\sqrt{1 + \\frac{r^2}{2}} - 1)\\f]\n- DIST_FAIR\n\\f[\\rho \\left (r \\right ) = C^2  \\cdot \\left (  \\frac{r}{C} -  \\log{\\left(1 + \\frac{r}{C}\\right)} \\right )  \\quad \\text{where} \\quad C=1.3998\\f]\n- DIST_WELSCH\n\\f[\\rho \\left (r \\right ) =  \\frac{C^2}{2} \\cdot \\left ( 1 -  \\exp{\\left(-\\left(\\frac{r}{C}\\right)^2\\right)} \\right )  \\quad \\text{where} \\quad C=2.9846\\f]\n- DIST_HUBER\n\\f[\\rho (r) =  \\fork{r^2/2}{if \\(r < C\\)}{C \\cdot (r-C/2)}{otherwise} \\quad \\text{where} \\quad C=1.345\\f]\n\nThe algorithm is based on the M-estimator ( <http://en.wikipedia.org/wiki/M-estimator> ) technique\nthat iteratively fits the line using the weighted least-squares algorithm. After each iteration the\nweights \\f$w_i\\f$ are adjusted to be inversely proportional to \\f$\\rho(r_i)\\f$ .\n\n@param points Input vector of 2D or 3D points, stored in std::vector\\<\\> or Mat.\n@param line Output line parameters. In case of 2D fitting, it should be a vector of 4 elements\n(like Vec4f) - (vx, vy, x0, y0), where (vx, vy) is a normalized vector collinear to the line and\n(x0, y0) is a point on the line. In case of 3D fitting, it should be a vector of 6 elements (like\nVec6f) - (vx, vy, vz, x0, y0, z0), where (vx, vy, vz) is a normalized vector collinear to the line\nand (x0, y0, z0) is a point on the line.\n@param distType Distance used by the M-estimator, see cv::DistanceTypes\n@param param Numerical parameter ( C ) for some types of distances. If it is 0, an optimal value\nis chosen.\n@param reps Sufficient accuracy for the radius (distance between the coordinate origin and the line).\n@param aeps Sufficient accuracy for the angle. 0.01 would be a good default value for reps and aeps.\n */\nCV_EXPORTS_W void fitLine( InputArray points, OutputArray line, int distType,\n                           double param, double reps, double aeps );\n\n/** @brief Performs a point-in-contour test.\n\nThe function determines whether the point is inside a contour, outside, or lies on an edge (or\ncoincides with a vertex). It returns positive (inside), negative (outside), or zero (on an edge)\nvalue, correspondingly. When measureDist=false , the return value is +1, -1, and 0, respectively.\nOtherwise, the return value is a signed distance between the point and the nearest contour edge.\n\nSee below a sample output of the function where each image pixel is tested against the contour:\n\n![sample output](pics/pointpolygon.png)\n\n@param contour Input contour.\n@param pt Point tested against the contour.\n@param measureDist If true, the function estimates the signed distance from the point to the\nnearest contour edge. Otherwise, the function only checks if the point is inside a contour or not.\n */\nCV_EXPORTS_W double pointPolygonTest( InputArray contour, Point2f pt, bool measureDist );\n\n/** @brief Finds out if there is any intersection between two rotated rectangles.\n\nIf there is then the vertices of the interesecting region are returned as well.\n\nBelow are some examples of intersection configurations. The hatched pattern indicates the\nintersecting region and the red vertices are returned by the function.\n\n![intersection examples](pics/intersection.png)\n\n@param rect1 First rectangle\n@param rect2 Second rectangle\n@param intersectingRegion The output array of the verticies of the intersecting region. It returns\nat most 8 vertices. Stored as std::vector\\<cv::Point2f\\> or cv::Mat as Mx1 of type CV_32FC2.\n@returns One of cv::RectanglesIntersectTypes\n */\nCV_EXPORTS_W int rotatedRectangleIntersection( const RotatedRect& rect1, const RotatedRect& rect2, OutputArray intersectingRegion  );\n\n//! @} imgproc_shape\n\nCV_EXPORTS_W Ptr<CLAHE> createCLAHE(double clipLimit = 40.0, Size tileGridSize = Size(8, 8));\n\n//! Ballard, D.H. (1981). Generalizing the Hough transform to detect arbitrary shapes. Pattern Recognition 13 (2): 111-122.\n//! Detects position only without traslation and rotation\nCV_EXPORTS Ptr<GeneralizedHoughBallard> createGeneralizedHoughBallard();\n\n//! Guil, N., González-Linares, J.M. and Zapata, E.L. (1999). Bidimensional shape detection using an invariant approach. Pattern Recognition 32 (6): 1025-1038.\n//! Detects position, traslation and rotation\nCV_EXPORTS Ptr<GeneralizedHoughGuil> createGeneralizedHoughGuil();\n\n//! Performs linear blending of two images\nCV_EXPORTS void blendLinear(InputArray src1, InputArray src2, InputArray weights1, InputArray weights2, OutputArray dst);\n\n//! @addtogroup imgproc_colormap\n//! @{\n\n//! GNU Octave/MATLAB equivalent colormaps\nenum ColormapTypes\n{\n    COLORMAP_AUTUMN = 0, //!< ![autumn](pics/colormaps/colorscale_autumn.jpg)\n    COLORMAP_BONE = 1, //!< ![bone](pics/colormaps/colorscale_bone.jpg)\n    COLORMAP_JET = 2, //!< ![jet](pics/colormaps/colorscale_jet.jpg)\n    COLORMAP_WINTER = 3, //!< ![winter](pics/colormaps/colorscale_winter.jpg)\n    COLORMAP_RAINBOW = 4, //!< ![rainbow](pics/colormaps/colorscale_rainbow.jpg)\n    COLORMAP_OCEAN = 5, //!< ![ocean](pics/colormaps/colorscale_ocean.jpg)\n    COLORMAP_SUMMER = 6, //!< ![summer](pics/colormaps/colorscale_summer.jpg)\n    COLORMAP_SPRING = 7, //!< ![spring](pics/colormaps/colorscale_spring.jpg)\n    COLORMAP_COOL = 8, //!< ![cool](pics/colormaps/colorscale_cool.jpg)\n    COLORMAP_HSV = 9, //!< ![HSV](pics/colormaps/colorscale_hsv.jpg)\n    COLORMAP_PINK = 10, //!< ![pink](pics/colormaps/colorscale_pink.jpg)\n    COLORMAP_HOT = 11, //!< ![hot](pics/colormaps/colorscale_hot.jpg)\n    COLORMAP_PARULA = 12 //!< ![parula](pics/colormaps/colorscale_parula.jpg)\n};\n\n/** @brief Applies a GNU Octave/MATLAB equivalent colormap on a given image.\n\n@param src The source image, grayscale or colored does not matter.\n@param dst The result is the colormapped source image. Note: Mat::create is called on dst.\n@param colormap The colormap to apply, see cv::ColormapTypes\n */\nCV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, int colormap);\n\n//! @} imgproc_colormap\n\n//! @addtogroup imgproc_draw\n//! @{\n\n/** @brief Draws a line segment connecting two points.\n\nThe function line draws the line segment between pt1 and pt2 points in the image. The line is\nclipped by the image boundaries. For non-antialiased lines with integer coordinates, the 8-connected\nor 4-connected Bresenham algorithm is used. Thick lines are drawn with rounding endings. Antialiased\nlines are drawn using Gaussian filtering.\n\n@param img Image.\n@param pt1 First point of the line segment.\n@param pt2 Second point of the line segment.\n@param color Line color.\n@param thickness Line thickness.\n@param lineType Type of the line, see cv::LineTypes.\n@param shift Number of fractional bits in the point coordinates.\n */\nCV_EXPORTS_W void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,\n                     int thickness = 1, int lineType = LINE_8, int shift = 0);\n\n/** @brief Draws a arrow segment pointing from the first point to the second one.\n\nThe function arrowedLine draws an arrow between pt1 and pt2 points in the image. See also cv::line.\n\n@param img Image.\n@param pt1 The point the arrow starts from.\n@param pt2 The point the arrow points to.\n@param color Line color.\n@param thickness Line thickness.\n@param line_type Type of the line, see cv::LineTypes\n@param shift Number of fractional bits in the point coordinates.\n@param tipLength The length of the arrow tip in relation to the arrow length\n */\nCV_EXPORTS_W void arrowedLine(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,\n                     int thickness=1, int line_type=8, int shift=0, double tipLength=0.1);\n\n/** @brief Draws a simple, thick, or filled up-right rectangle.\n\nThe function rectangle draws a rectangle outline or a filled rectangle whose two opposite corners\nare pt1 and pt2.\n\n@param img Image.\n@param pt1 Vertex of the rectangle.\n@param pt2 Vertex of the rectangle opposite to pt1 .\n@param color Rectangle color or brightness (grayscale image).\n@param thickness Thickness of lines that make up the rectangle. Negative values, like CV_FILLED ,\nmean that the function has to draw a filled rectangle.\n@param lineType Type of the line. See the line description.\n@param shift Number of fractional bits in the point coordinates.\n */\nCV_EXPORTS_W void rectangle(InputOutputArray img, Point pt1, Point pt2,\n                          const Scalar& color, int thickness = 1,\n                          int lineType = LINE_8, int shift = 0);\n\n/** @overload\n\nuse `rec` parameter as alternative specification of the drawn rectangle: `r.tl() and\nr.br()-Point(1,1)` are opposite corners\n*/\nCV_EXPORTS void rectangle(CV_IN_OUT Mat& img, Rect rec,\n                          const Scalar& color, int thickness = 1,\n                          int lineType = LINE_8, int shift = 0);\n\n/** @brief Draws a circle.\n\nThe function circle draws a simple or filled circle with a given center and radius.\n@param img Image where the circle is drawn.\n@param center Center of the circle.\n@param radius Radius of the circle.\n@param color Circle color.\n@param thickness Thickness of the circle outline, if positive. Negative thickness means that a\nfilled circle is to be drawn.\n@param lineType Type of the circle boundary. See the line description.\n@param shift Number of fractional bits in the coordinates of the center and in the radius value.\n */\nCV_EXPORTS_W void circle(InputOutputArray img, Point center, int radius,\n                       const Scalar& color, int thickness = 1,\n                       int lineType = LINE_8, int shift = 0);\n\n/** @brief Draws a simple or thick elliptic arc or fills an ellipse sector.\n\nThe functions ellipse with less parameters draw an ellipse outline, a filled ellipse, an elliptic\narc, or a filled ellipse sector. A piecewise-linear curve is used to approximate the elliptic arc\nboundary. If you need more control of the ellipse rendering, you can retrieve the curve using\nellipse2Poly and then render it with polylines or fill it with fillPoly . If you use the first\nvariant of the function and want to draw the whole ellipse, not an arc, pass startAngle=0 and\nendAngle=360 . The figure below explains the meaning of the parameters.\n\n![Parameters of Elliptic Arc](pics/ellipse.png)\n\n@param img Image.\n@param center Center of the ellipse.\n@param axes Half of the size of the ellipse main axes.\n@param angle Ellipse rotation angle in degrees.\n@param startAngle Starting angle of the elliptic arc in degrees.\n@param endAngle Ending angle of the elliptic arc in degrees.\n@param color Ellipse color.\n@param thickness Thickness of the ellipse arc outline, if positive. Otherwise, this indicates that\na filled ellipse sector is to be drawn.\n@param lineType Type of the ellipse boundary. See the line description.\n@param shift Number of fractional bits in the coordinates of the center and values of axes.\n */\nCV_EXPORTS_W void ellipse(InputOutputArray img, Point center, Size axes,\n                        double angle, double startAngle, double endAngle,\n                        const Scalar& color, int thickness = 1,\n                        int lineType = LINE_8, int shift = 0);\n\n/** @overload\n@param img Image.\n@param box Alternative ellipse representation via RotatedRect. This means that the function draws\nan ellipse inscribed in the rotated rectangle.\n@param color Ellipse color.\n@param thickness Thickness of the ellipse arc outline, if positive. Otherwise, this indicates that\na filled ellipse sector is to be drawn.\n@param lineType Type of the ellipse boundary. See the line description.\n*/\nCV_EXPORTS_W void ellipse(InputOutputArray img, const RotatedRect& box, const Scalar& color,\n                        int thickness = 1, int lineType = LINE_8);\n\n/* ----------------------------------------------------------------------------------------- */\n/* ADDING A SET OF PREDEFINED MARKERS WHICH COULD BE USED TO HIGHLIGHT POSITIONS IN AN IMAGE */\n/* ----------------------------------------------------------------------------------------- */\n\n//! Possible set of marker types used for the cv::drawMarker function\nenum MarkerTypes\n{\n    MARKER_CROSS = 0,           //!< A crosshair marker shape\n    MARKER_TILTED_CROSS = 1,    //!< A 45 degree tilted crosshair marker shape\n    MARKER_STAR = 2,            //!< A star marker shape, combination of cross and tilted cross\n    MARKER_DIAMOND = 3,         //!< A diamond marker shape\n    MARKER_SQUARE = 4,          //!< A square marker shape\n    MARKER_TRIANGLE_UP = 5,     //!< An upwards pointing triangle marker shape\n    MARKER_TRIANGLE_DOWN = 6    //!< A downwards pointing triangle marker shape\n};\n\n/** @brief Draws a marker on a predefined position in an image.\n\nThe function drawMarker draws a marker on a given position in the image. For the moment several\nmarker types are supported, see cv::MarkerTypes for more information.\n\n@param img Image.\n@param position The point where the crosshair is positioned.\n@param markerType The specific type of marker you want to use, see cv::MarkerTypes\n@param color Line color.\n@param thickness Line thickness.\n@param line_type Type of the line, see cv::LineTypes\n@param markerSize The length of the marker axis [default = 20 pixels]\n */\nCV_EXPORTS_W void drawMarker(CV_IN_OUT Mat& img, Point position, const Scalar& color,\n                             int markerType = MARKER_CROSS, int markerSize=20, int thickness=1,\n                             int line_type=8);\n\n/* ----------------------------------------------------------------------------------------- */\n/* END OF MARKER SECTION */\n/* ----------------------------------------------------------------------------------------- */\n\n/** @overload */\nCV_EXPORTS void fillConvexPoly(Mat& img, const Point* pts, int npts,\n                               const Scalar& color, int lineType = LINE_8,\n                               int shift = 0);\n\n/** @brief Fills a convex polygon.\n\nThe function fillConvexPoly draws a filled convex polygon. This function is much faster than the\nfunction cv::fillPoly . It can fill not only convex polygons but any monotonic polygon without\nself-intersections, that is, a polygon whose contour intersects every horizontal line (scan line)\ntwice at the most (though, its top-most and/or the bottom edge could be horizontal).\n\n@param img Image.\n@param points Polygon vertices.\n@param color Polygon color.\n@param lineType Type of the polygon boundaries. See the line description.\n@param shift Number of fractional bits in the vertex coordinates.\n */\nCV_EXPORTS_W void fillConvexPoly(InputOutputArray img, InputArray points,\n                                 const Scalar& color, int lineType = LINE_8,\n                                 int shift = 0);\n\n/** @overload */\nCV_EXPORTS void fillPoly(Mat& img, const Point** pts,\n                         const int* npts, int ncontours,\n                         const Scalar& color, int lineType = LINE_8, int shift = 0,\n                         Point offset = Point() );\n\n/** @brief Fills the area bounded by one or more polygons.\n\nThe function fillPoly fills an area bounded by several polygonal contours. The function can fill\ncomplex areas, for example, areas with holes, contours with self-intersections (some of their\nparts), and so forth.\n\n@param img Image.\n@param pts Array of polygons where each polygon is represented as an array of points.\n@param color Polygon color.\n@param lineType Type of the polygon boundaries. See the line description.\n@param shift Number of fractional bits in the vertex coordinates.\n@param offset Optional offset of all points of the contours.\n */\nCV_EXPORTS_W void fillPoly(InputOutputArray img, InputArrayOfArrays pts,\n                           const Scalar& color, int lineType = LINE_8, int shift = 0,\n                           Point offset = Point() );\n\n/** @overload */\nCV_EXPORTS void polylines(Mat& img, const Point* const* pts, const int* npts,\n                          int ncontours, bool isClosed, const Scalar& color,\n                          int thickness = 1, int lineType = LINE_8, int shift = 0 );\n\n/** @brief Draws several polygonal curves.\n\n@param img Image.\n@param pts Array of polygonal curves.\n@param isClosed Flag indicating whether the drawn polylines are closed or not. If they are closed,\nthe function draws a line from the last vertex of each curve to its first vertex.\n@param color Polyline color.\n@param thickness Thickness of the polyline edges.\n@param lineType Type of the line segments. See the line description.\n@param shift Number of fractional bits in the vertex coordinates.\n\nThe function polylines draws one or more polygonal curves.\n */\nCV_EXPORTS_W void polylines(InputOutputArray img, InputArrayOfArrays pts,\n                            bool isClosed, const Scalar& color,\n                            int thickness = 1, int lineType = LINE_8, int shift = 0 );\n\n/** @example contours2.cpp\n  An example using the drawContour functionality\n*/\n\n/** @example segment_objects.cpp\nAn example using drawContours to clean up a background segmentation result\n */\n\n/** @brief Draws contours outlines or filled contours.\n\nThe function draws contour outlines in the image if \\f$\\texttt{thickness} \\ge 0\\f$ or fills the area\nbounded by the contours if \\f$\\texttt{thickness}<0\\f$ . The example below shows how to retrieve\nconnected components from the binary image and label them: :\n@code\n    #include \"opencv2/imgproc.hpp\"\n    #include \"opencv2/highgui.hpp\"\n\n    using namespace cv;\n    using namespace std;\n\n    int main( int argc, char** argv )\n    {\n        Mat src;\n        // the first command-line parameter must be a filename of the binary\n        // (black-n-white) image\n        if( argc != 2 || !(src=imread(argv[1], 0)).data)\n            return -1;\n\n        Mat dst = Mat::zeros(src.rows, src.cols, CV_8UC3);\n\n        src = src > 1;\n        namedWindow( \"Source\", 1 );\n        imshow( \"Source\", src );\n\n        vector<vector<Point> > contours;\n        vector<Vec4i> hierarchy;\n\n        findContours( src, contours, hierarchy,\n            RETR_CCOMP, CHAIN_APPROX_SIMPLE );\n\n        // iterate through all the top-level contours,\n        // draw each connected component with its own random color\n        int idx = 0;\n        for( ; idx >= 0; idx = hierarchy[idx][0] )\n        {\n            Scalar color( rand()&255, rand()&255, rand()&255 );\n            drawContours( dst, contours, idx, color, FILLED, 8, hierarchy );\n        }\n\n        namedWindow( \"Components\", 1 );\n        imshow( \"Components\", dst );\n        waitKey(0);\n    }\n@endcode\n\n@param image Destination image.\n@param contours All the input contours. Each contour is stored as a point vector.\n@param contourIdx Parameter indicating a contour to draw. If it is negative, all the contours are drawn.\n@param color Color of the contours.\n@param thickness Thickness of lines the contours are drawn with. If it is negative (for example,\nthickness=CV_FILLED ), the contour interiors are drawn.\n@param lineType Line connectivity. See cv::LineTypes.\n@param hierarchy Optional information about hierarchy. It is only needed if you want to draw only\nsome of the contours (see maxLevel ).\n@param maxLevel Maximal level for drawn contours. If it is 0, only the specified contour is drawn.\nIf it is 1, the function draws the contour(s) and all the nested contours. If it is 2, the function\ndraws the contours, all the nested contours, all the nested-to-nested contours, and so on. This\nparameter is only taken into account when there is hierarchy available.\n@param offset Optional contour shift parameter. Shift all the drawn contours by the specified\n\\f$\\texttt{offset}=(dx,dy)\\f$ .\n */\nCV_EXPORTS_W void drawContours( InputOutputArray image, InputArrayOfArrays contours,\n                              int contourIdx, const Scalar& color,\n                              int thickness = 1, int lineType = LINE_8,\n                              InputArray hierarchy = noArray(),\n                              int maxLevel = INT_MAX, Point offset = Point() );\n\n/** @brief Clips the line against the image rectangle.\n\nThe functions clipLine calculate a part of the line segment that is entirely within the specified\nrectangle. They return false if the line segment is completely outside the rectangle. Otherwise,\nthey return true .\n@param imgSize Image size. The image rectangle is Rect(0, 0, imgSize.width, imgSize.height) .\n@param pt1 First line point.\n@param pt2 Second line point.\n */\nCV_EXPORTS bool clipLine(Size imgSize, CV_IN_OUT Point& pt1, CV_IN_OUT Point& pt2);\n\n/** @overload\n@param imgRect Image rectangle.\n@param pt1 First line point.\n@param pt2 Second line point.\n*/\nCV_EXPORTS_W bool clipLine(Rect imgRect, CV_OUT CV_IN_OUT Point& pt1, CV_OUT CV_IN_OUT Point& pt2);\n\n/** @brief Approximates an elliptic arc with a polyline.\n\nThe function ellipse2Poly computes the vertices of a polyline that approximates the specified\nelliptic arc. It is used by cv::ellipse.\n\n@param center Center of the arc.\n@param axes Half of the size of the ellipse main axes. See the ellipse for details.\n@param angle Rotation angle of the ellipse in degrees. See the ellipse for details.\n@param arcStart Starting angle of the elliptic arc in degrees.\n@param arcEnd Ending angle of the elliptic arc in degrees.\n@param delta Angle between the subsequent polyline vertices. It defines the approximation\naccuracy.\n@param pts Output vector of polyline vertices.\n */\nCV_EXPORTS_W void ellipse2Poly( Point center, Size axes, int angle,\n                                int arcStart, int arcEnd, int delta,\n                                CV_OUT std::vector<Point>& pts );\n\n/** @brief Draws a text string.\n\nThe function putText renders the specified text string in the image. Symbols that cannot be rendered\nusing the specified font are replaced by question marks. See getTextSize for a text rendering code\nexample.\n\n@param img Image.\n@param text Text string to be drawn.\n@param org Bottom-left corner of the text string in the image.\n@param fontFace Font type, see cv::HersheyFonts.\n@param fontScale Font scale factor that is multiplied by the font-specific base size.\n@param color Text color.\n@param thickness Thickness of the lines used to draw a text.\n@param lineType Line type. See the line for details.\n@param bottomLeftOrigin When true, the image data origin is at the bottom-left corner. Otherwise,\nit is at the top-left corner.\n */\nCV_EXPORTS_W void putText( InputOutputArray img, const String& text, Point org,\n                         int fontFace, double fontScale, Scalar color,\n                         int thickness = 1, int lineType = LINE_8,\n                         bool bottomLeftOrigin = false );\n\n/** @brief Calculates the width and height of a text string.\n\nThe function getTextSize calculates and returns the size of a box that contains the specified text.\nThat is, the following code renders some text, the tight box surrounding it, and the baseline: :\n@code\n    String text = \"Funny text inside the box\";\n    int fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX;\n    double fontScale = 2;\n    int thickness = 3;\n\n    Mat img(600, 800, CV_8UC3, Scalar::all(0));\n\n    int baseline=0;\n    Size textSize = getTextSize(text, fontFace,\n                                fontScale, thickness, &baseline);\n    baseline += thickness;\n\n    // center the text\n    Point textOrg((img.cols - textSize.width)/2,\n                  (img.rows + textSize.height)/2);\n\n    // draw the box\n    rectangle(img, textOrg + Point(0, baseline),\n              textOrg + Point(textSize.width, -textSize.height),\n              Scalar(0,0,255));\n    // ... and the baseline first\n    line(img, textOrg + Point(0, thickness),\n         textOrg + Point(textSize.width, thickness),\n         Scalar(0, 0, 255));\n\n    // then put the text itself\n    putText(img, text, textOrg, fontFace, fontScale,\n            Scalar::all(255), thickness, 8);\n@endcode\n\n@param text Input text string.\n@param fontFace Font to use, see cv::HersheyFonts.\n@param fontScale Font scale factor that is multiplied by the font-specific base size.\n@param thickness Thickness of lines used to render the text. See putText for details.\n@param[out] baseLine y-coordinate of the baseline relative to the bottom-most text\npoint.\n@return The size of a box that contains the specified text.\n\n@see cv::putText\n */\nCV_EXPORTS_W Size getTextSize(const String& text, int fontFace,\n                            double fontScale, int thickness,\n                            CV_OUT int* baseLine);\n\n/** @brief Line iterator\n\nThe class is used to iterate over all the pixels on the raster line\nsegment connecting two specified points.\n\nThe class LineIterator is used to get each pixel of a raster line. It\ncan be treated as versatile implementation of the Bresenham algorithm\nwhere you can stop at each pixel and do some extra processing, for\nexample, grab pixel values along the line or draw a line with an effect\n(for example, with XOR operation).\n\nThe number of pixels along the line is stored in LineIterator::count.\nThe method LineIterator::pos returns the current position in the image:\n\n@code{.cpp}\n// grabs pixels along the line (pt1, pt2)\n// from 8-bit 3-channel image to the buffer\nLineIterator it(img, pt1, pt2, 8);\nLineIterator it2 = it;\nvector<Vec3b> buf(it.count);\n\nfor(int i = 0; i < it.count; i++, ++it)\n    buf[i] = *(const Vec3b)*it;\n\n// alternative way of iterating through the line\nfor(int i = 0; i < it2.count; i++, ++it2)\n{\n    Vec3b val = img.at<Vec3b>(it2.pos());\n    CV_Assert(buf[i] == val);\n}\n@endcode\n*/\nclass CV_EXPORTS LineIterator\n{\npublic:\n    /** @brief intializes the iterator\n\n    creates iterators for the line connecting pt1 and pt2\n    the line will be clipped on the image boundaries\n    the line is 8-connected or 4-connected\n    If leftToRight=true, then the iteration is always done\n    from the left-most point to the right most,\n    not to depend on the ordering of pt1 and pt2 parameters\n    */\n    LineIterator( const Mat& img, Point pt1, Point pt2,\n                  int connectivity = 8, bool leftToRight = false );\n    /** @brief returns pointer to the current pixel\n    */\n    uchar* operator *();\n    /** @brief prefix increment operator (++it). shifts iterator to the next pixel\n    */\n    LineIterator& operator ++();\n    /** @brief postfix increment operator (it++). shifts iterator to the next pixel\n    */\n    LineIterator operator ++(int);\n    /** @brief returns coordinates of the current pixel\n    */\n    Point pos() const;\n\n    uchar* ptr;\n    const uchar* ptr0;\n    int step, elemSize;\n    int err, count;\n    int minusDelta, plusDelta;\n    int minusStep, plusStep;\n};\n\n//! @cond IGNORED\n\n// === LineIterator implementation ===\n\ninline\nuchar* LineIterator::operator *()\n{\n    return ptr;\n}\n\ninline\nLineIterator& LineIterator::operator ++()\n{\n    int mask = err < 0 ? -1 : 0;\n    err += minusDelta + (plusDelta & mask);\n    ptr += minusStep + (plusStep & mask);\n    return *this;\n}\n\ninline\nLineIterator LineIterator::operator ++(int)\n{\n    LineIterator it = *this;\n    ++(*this);\n    return it;\n}\n\ninline\nPoint LineIterator::pos() const\n{\n    Point p;\n    p.y = (int)((ptr - ptr0)/step);\n    p.x = (int)(((ptr - ptr0) - p.y*step)/elemSize);\n    return p;\n}\n\n//! @endcond\n\n//! @} imgproc_draw\n\n//! @} imgproc\n\n} // cv\n\n#ifndef DISABLE_OPENCV_24_COMPATIBILITY\n#include \"opencv2/imgproc/imgproc_c.h\"\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/ml/ml.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/ml.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/ml.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Copyright (C) 2014, Itseez Inc, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_ML_HPP__\n#define __OPENCV_ML_HPP__\n\n#ifdef __cplusplus\n#  include \"opencv2/core.hpp\"\n#endif\n\n#ifdef __cplusplus\n\n#include <float.h>\n#include <map>\n#include <iostream>\n\n/**\n  @defgroup ml Machine Learning\n\n  The Machine Learning Library (MLL) is a set of classes and functions for statistical\n  classification, regression, and clustering of data.\n\n  Most of the classification and regression algorithms are implemented as C++ classes. As the\n  algorithms have different sets of features (like an ability to handle missing measurements or\n  categorical input variables), there is a little common ground between the classes. This common\n  ground is defined by the class cv::ml::StatModel that all the other ML classes are derived from.\n\n  See detailed overview here: @ref ml_intro.\n */\n\nnamespace cv\n{\n\nnamespace ml\n{\n\n//! @addtogroup ml\n//! @{\n\n/** @brief Variable types */\nenum VariableTypes\n{\n    VAR_NUMERICAL    =0, //!< same as VAR_ORDERED\n    VAR_ORDERED      =0, //!< ordered variables\n    VAR_CATEGORICAL  =1  //!< categorical variables\n};\n\n/** @brief %Error types */\nenum ErrorTypes\n{\n    TEST_ERROR = 0,\n    TRAIN_ERROR = 1\n};\n\n/** @brief Sample types */\nenum SampleTypes\n{\n    ROW_SAMPLE = 0, //!< each training sample is a row of samples\n    COL_SAMPLE = 1  //!< each training sample occupies a column of samples\n};\n\n/** @brief The structure represents the logarithmic grid range of statmodel parameters.\n\nIt is used for optimizing statmodel accuracy by varying model parameters, the accuracy estimate\nbeing computed by cross-validation.\n */\nclass CV_EXPORTS ParamGrid\n{\npublic:\n    /** @brief Default constructor */\n    ParamGrid();\n    /** @brief Constructor with parameters */\n    ParamGrid(double _minVal, double _maxVal, double _logStep);\n\n    double minVal; //!< Minimum value of the statmodel parameter. Default value is 0.\n    double maxVal; //!< Maximum value of the statmodel parameter. Default value is 0.\n    /** @brief Logarithmic step for iterating the statmodel parameter.\n\n    The grid determines the following iteration sequence of the statmodel parameter values:\n    \\f[(minVal, minVal*step, minVal*{step}^2, \\dots,  minVal*{logStep}^n),\\f]\n    where \\f$n\\f$ is the maximal index satisfying\n    \\f[\\texttt{minVal} * \\texttt{logStep} ^n <  \\texttt{maxVal}\\f]\n    The grid is logarithmic, so logStep must always be greater then 1. Default value is 1.\n    */\n    double logStep;\n};\n\n/** @brief Class encapsulating training data.\n\nPlease note that the class only specifies the interface of training data, but not implementation.\nAll the statistical model classes in _ml_ module accepts Ptr\\<TrainData\\> as parameter. In other\nwords, you can create your own class derived from TrainData and pass smart pointer to the instance\nof this class into StatModel::train.\n\n@sa @ref ml_intro_data\n */\nclass CV_EXPORTS_W TrainData\n{\npublic:\n    static inline float missingValue() { return FLT_MAX; }\n    virtual ~TrainData();\n\n    CV_WRAP virtual int getLayout() const = 0;\n    CV_WRAP virtual int getNTrainSamples() const = 0;\n    CV_WRAP virtual int getNTestSamples() const = 0;\n    CV_WRAP virtual int getNSamples() const = 0;\n    CV_WRAP virtual int getNVars() const = 0;\n    CV_WRAP virtual int getNAllVars() const = 0;\n\n    CV_WRAP virtual void getSample(InputArray varIdx, int sidx, float* buf) const = 0;\n    CV_WRAP virtual Mat getSamples() const = 0;\n    CV_WRAP virtual Mat getMissing() const = 0;\n\n    /** @brief Returns matrix of train samples\n\n    @param layout The requested layout. If it's different from the initial one, the matrix is\n        transposed. See ml::SampleTypes.\n    @param compressSamples if true, the function returns only the training samples (specified by\n        sampleIdx)\n    @param compressVars if true, the function returns the shorter training samples, containing only\n        the active variables.\n\n    In current implementation the function tries to avoid physical data copying and returns the\n    matrix stored inside TrainData (unless the transposition or compression is needed).\n     */\n    CV_WRAP virtual Mat getTrainSamples(int layout=ROW_SAMPLE,\n                                bool compressSamples=true,\n                                bool compressVars=true) const = 0;\n\n    /** @brief Returns the vector of responses\n\n    The function returns ordered or the original categorical responses. Usually it's used in\n    regression algorithms.\n     */\n    CV_WRAP virtual Mat getTrainResponses() const = 0;\n\n    /** @brief Returns the vector of normalized categorical responses\n\n    The function returns vector of responses. Each response is integer from `0` to `<number of\n    classes>-1`. The actual label value can be retrieved then from the class label vector, see\n    TrainData::getClassLabels.\n     */\n    CV_WRAP virtual Mat getTrainNormCatResponses() const = 0;\n    CV_WRAP virtual Mat getTestResponses() const = 0;\n    CV_WRAP virtual Mat getTestNormCatResponses() const = 0;\n    CV_WRAP virtual Mat getResponses() const = 0;\n    CV_WRAP virtual Mat getNormCatResponses() const = 0;\n    CV_WRAP virtual Mat getSampleWeights() const = 0;\n    CV_WRAP virtual Mat getTrainSampleWeights() const = 0;\n    CV_WRAP virtual Mat getTestSampleWeights() const = 0;\n    CV_WRAP virtual Mat getVarIdx() const = 0;\n    CV_WRAP virtual Mat getVarType() const = 0;\n    CV_WRAP virtual int getResponseType() const = 0;\n    CV_WRAP virtual Mat getTrainSampleIdx() const = 0;\n    CV_WRAP virtual Mat getTestSampleIdx() const = 0;\n    CV_WRAP virtual void getValues(int vi, InputArray sidx, float* values) const = 0;\n    virtual void getNormCatValues(int vi, InputArray sidx, int* values) const = 0;\n    CV_WRAP virtual Mat getDefaultSubstValues() const = 0;\n\n    CV_WRAP virtual int getCatCount(int vi) const = 0;\n\n    /** @brief Returns the vector of class labels\n\n    The function returns vector of unique labels occurred in the responses.\n     */\n    CV_WRAP virtual Mat getClassLabels() const = 0;\n\n    CV_WRAP virtual Mat getCatOfs() const = 0;\n    CV_WRAP virtual Mat getCatMap() const = 0;\n\n    /** @brief Splits the training data into the training and test parts\n    @sa TrainData::setTrainTestSplitRatio\n     */\n    CV_WRAP virtual void setTrainTestSplit(int count, bool shuffle=true) = 0;\n\n    /** @brief Splits the training data into the training and test parts\n\n    The function selects a subset of specified relative size and then returns it as the training\n    set. If the function is not called, all the data is used for training. Please, note that for\n    each of TrainData::getTrain\\* there is corresponding TrainData::getTest\\*, so that the test\n    subset can be retrieved and processed as well.\n    @sa TrainData::setTrainTestSplit\n     */\n    CV_WRAP virtual void setTrainTestSplitRatio(double ratio, bool shuffle=true) = 0;\n    CV_WRAP virtual void shuffleTrainTest() = 0;\n\n    CV_WRAP static Mat getSubVector(const Mat& vec, const Mat& idx);\n\n    /** @brief Reads the dataset from a .csv file and returns the ready-to-use training data.\n\n    @param filename The input file name\n    @param headerLineCount The number of lines in the beginning to skip; besides the header, the\n        function also skips empty lines and lines staring with `#`\n    @param responseStartIdx Index of the first output variable. If -1, the function considers the\n        last variable as the response\n    @param responseEndIdx Index of the last output variable + 1. If -1, then there is single\n        response variable at responseStartIdx.\n    @param varTypeSpec The optional text string that specifies the variables' types. It has the\n        format `ord[n1-n2,n3,n4-n5,...]cat[n6,n7-n8,...]`. That is, variables from `n1 to n2`\n        (inclusive range), `n3`, `n4 to n5` ... are considered ordered and `n6`, `n7 to n8` ... are\n        considered as categorical. The range `[n1..n2] + [n3] + [n4..n5] + ... + [n6] + [n7..n8]`\n        should cover all the variables. If varTypeSpec is not specified, then algorithm uses the\n        following rules:\n        - all input variables are considered ordered by default. If some column contains has non-\n          numerical values, e.g. 'apple', 'pear', 'apple', 'apple', 'mango', the corresponding\n          variable is considered categorical.\n        - if there are several output variables, they are all considered as ordered. Error is\n          reported when non-numerical values are used.\n        - if there is a single output variable, then if its values are non-numerical or are all\n          integers, then it's considered categorical. Otherwise, it's considered ordered.\n    @param delimiter The character used to separate values in each line.\n    @param missch The character used to specify missing measurements. It should not be a digit.\n        Although it's a non-numerical value, it surely does not affect the decision of whether the\n        variable ordered or categorical.\n    @note If the dataset only contains input variables and no responses, use responseStartIdx = -2\n        and responseEndIdx = 0. The output variables vector will just contain zeros.\n     */\n    static Ptr<TrainData> loadFromCSV(const String& filename,\n                                      int headerLineCount,\n                                      int responseStartIdx=-1,\n                                      int responseEndIdx=-1,\n                                      const String& varTypeSpec=String(),\n                                      char delimiter=',',\n                                      char missch='?');\n\n    /** @brief Creates training data from in-memory arrays.\n\n    @param samples matrix of samples. It should have CV_32F type.\n    @param layout see ml::SampleTypes.\n    @param responses matrix of responses. If the responses are scalar, they should be stored as a\n        single row or as a single column. The matrix should have type CV_32F or CV_32S (in the\n        former case the responses are considered as ordered by default; in the latter case - as\n        categorical)\n    @param varIdx vector specifying which variables to use for training. It can be an integer vector\n        (CV_32S) containing 0-based variable indices or byte vector (CV_8U) containing a mask of\n        active variables.\n    @param sampleIdx vector specifying which samples to use for training. It can be an integer\n        vector (CV_32S) containing 0-based sample indices or byte vector (CV_8U) containing a mask\n        of training samples.\n    @param sampleWeights optional vector with weights for each sample. It should have CV_32F type.\n    @param varType optional vector of type CV_8U and size `<number_of_variables_in_samples> +\n        <number_of_variables_in_responses>`, containing types of each input and output variable. See\n        ml::VariableTypes.\n     */\n    CV_WRAP static Ptr<TrainData> create(InputArray samples, int layout, InputArray responses,\n                                 InputArray varIdx=noArray(), InputArray sampleIdx=noArray(),\n                                 InputArray sampleWeights=noArray(), InputArray varType=noArray());\n};\n\n/** @brief Base class for statistical models in OpenCV ML.\n */\nclass CV_EXPORTS_W StatModel : public Algorithm\n{\npublic:\n    /** Predict options */\n    enum Flags {\n        UPDATE_MODEL = 1,\n        RAW_OUTPUT=1, //!< makes the method return the raw results (the sum), not the class label\n        COMPRESSED_INPUT=2,\n        PREPROCESSED_INPUT=4\n    };\n\n    /** @brief Returns the number of variables in training samples */\n    CV_WRAP virtual int getVarCount() const = 0;\n\n    CV_WRAP virtual bool empty() const;\n\n    /** @brief Returns true if the model is trained */\n    CV_WRAP virtual bool isTrained() const = 0;\n    /** @brief Returns true if the model is classifier */\n    CV_WRAP virtual bool isClassifier() const = 0;\n\n    /** @brief Trains the statistical model\n\n    @param trainData training data that can be loaded from file using TrainData::loadFromCSV or\n        created with TrainData::create.\n    @param flags optional flags, depending on the model. Some of the models can be updated with the\n        new training samples, not completely overwritten (such as NormalBayesClassifier or ANN_MLP).\n     */\n    CV_WRAP virtual bool train( const Ptr<TrainData>& trainData, int flags=0 );\n\n    /** @brief Trains the statistical model\n\n    @param samples training samples\n    @param layout See ml::SampleTypes.\n    @param responses vector of responses associated with the training samples.\n    */\n    CV_WRAP virtual bool train( InputArray samples, int layout, InputArray responses );\n\n    /** @brief Computes error on the training or test dataset\n\n    @param data the training data\n    @param test if true, the error is computed over the test subset of the data, otherwise it's\n        computed over the training subset of the data. Please note that if you loaded a completely\n        different dataset to evaluate already trained classifier, you will probably want not to set\n        the test subset at all with TrainData::setTrainTestSplitRatio and specify test=false, so\n        that the error is computed for the whole new set. Yes, this sounds a bit confusing.\n    @param resp the optional output responses.\n\n    The method uses StatModel::predict to compute the error. For regression models the error is\n    computed as RMS, for classifiers - as a percent of missclassified samples (0%-100%).\n     */\n    CV_WRAP virtual float calcError( const Ptr<TrainData>& data, bool test, OutputArray resp ) const;\n\n    /** @brief Predicts response(s) for the provided sample(s)\n\n    @param samples The input samples, floating-point matrix\n    @param results The optional output matrix of results.\n    @param flags The optional flags, model-dependent. See cv::ml::StatModel::Flags.\n     */\n    CV_WRAP virtual float predict( InputArray samples, OutputArray results=noArray(), int flags=0 ) const = 0;\n\n    /** @brief Create and train model with default parameters\n\n    The class must implement static `create()` method with no parameters or with all default parameter values\n    */\n    template<typename _Tp> static Ptr<_Tp> train(const Ptr<TrainData>& data, int flags=0)\n    {\n        Ptr<_Tp> model = _Tp::create();\n        return !model.empty() && model->train(data, flags) ? model : Ptr<_Tp>();\n    }\n};\n\n/****************************************************************************************\\\n*                                 Normal Bayes Classifier                                *\n\\****************************************************************************************/\n\n/** @brief Bayes classifier for normally distributed data.\n\n@sa @ref ml_intro_bayes\n */\nclass CV_EXPORTS_W NormalBayesClassifier : public StatModel\n{\npublic:\n    /** @brief Predicts the response for sample(s).\n\n    The method estimates the most probable classes for input vectors. Input vectors (one or more)\n    are stored as rows of the matrix inputs. In case of multiple input vectors, there should be one\n    output vector outputs. The predicted class for a single input vector is returned by the method.\n    The vector outputProbs contains the output probabilities corresponding to each element of\n    result.\n     */\n    CV_WRAP virtual float predictProb( InputArray inputs, OutputArray outputs,\n                               OutputArray outputProbs, int flags=0 ) const = 0;\n\n    /** Creates empty model\n    Use StatModel::train to train the model after creation. */\n    CV_WRAP static Ptr<NormalBayesClassifier> create();\n};\n\n/****************************************************************************************\\\n*                          K-Nearest Neighbour Classifier                                *\n\\****************************************************************************************/\n\n/** @brief The class implements K-Nearest Neighbors model\n\n@sa @ref ml_intro_knn\n */\nclass CV_EXPORTS_W KNearest : public StatModel\n{\npublic:\n\n    /** Default number of neighbors to use in predict method. */\n    /** @see setDefaultK */\n    CV_WRAP virtual int getDefaultK() const = 0;\n    /** @copybrief getDefaultK @see getDefaultK */\n    CV_WRAP virtual void setDefaultK(int val) = 0;\n\n    /** Whether classification or regression model should be trained. */\n    /** @see setIsClassifier */\n    CV_WRAP virtual bool getIsClassifier() const = 0;\n    /** @copybrief getIsClassifier @see getIsClassifier */\n    CV_WRAP virtual void setIsClassifier(bool val) = 0;\n\n    /** Parameter for KDTree implementation. */\n    /** @see setEmax */\n    CV_WRAP virtual int getEmax() const = 0;\n    /** @copybrief getEmax @see getEmax */\n    CV_WRAP virtual void setEmax(int val) = 0;\n\n    /** %Algorithm type, one of KNearest::Types. */\n    /** @see setAlgorithmType */\n    CV_WRAP virtual int getAlgorithmType() const = 0;\n    /** @copybrief getAlgorithmType @see getAlgorithmType */\n    CV_WRAP virtual void setAlgorithmType(int val) = 0;\n\n    /** @brief Finds the neighbors and predicts responses for input vectors.\n\n    @param samples Input samples stored by rows. It is a single-precision floating-point matrix of\n        `<number_of_samples> * k` size.\n    @param k Number of used nearest neighbors. Should be greater than 1.\n    @param results Vector with results of prediction (regression or classification) for each input\n        sample. It is a single-precision floating-point vector with `<number_of_samples>` elements.\n    @param neighborResponses Optional output values for corresponding neighbors. It is a single-\n        precision floating-point matrix of `<number_of_samples> * k` size.\n    @param dist Optional output distances from the input vectors to the corresponding neighbors. It\n        is a single-precision floating-point matrix of `<number_of_samples> * k` size.\n\n    For each input vector (a row of the matrix samples), the method finds the k nearest neighbors.\n    In case of regression, the predicted result is a mean value of the particular vector's neighbor\n    responses. In case of classification, the class is determined by voting.\n\n    For each input vector, the neighbors are sorted by their distances to the vector.\n\n    In case of C++ interface you can use output pointers to empty matrices and the function will\n    allocate memory itself.\n\n    If only a single input vector is passed, all output matrices are optional and the predicted\n    value is returned by the method.\n\n    The function is parallelized with the TBB library.\n     */\n    CV_WRAP virtual float findNearest( InputArray samples, int k,\n                               OutputArray results,\n                               OutputArray neighborResponses=noArray(),\n                               OutputArray dist=noArray() ) const = 0;\n\n    /** @brief Implementations of KNearest algorithm\n       */\n    enum Types\n    {\n        BRUTE_FORCE=1,\n        KDTREE=2\n    };\n\n    /** @brief Creates the empty model\n\n    The static method creates empty %KNearest classifier. It should be then trained using StatModel::train method.\n     */\n    CV_WRAP static Ptr<KNearest> create();\n};\n\n/****************************************************************************************\\\n*                                   Support Vector Machines                              *\n\\****************************************************************************************/\n\n/** @brief Support Vector Machines.\n\n@sa @ref ml_intro_svm\n */\nclass CV_EXPORTS_W SVM : public StatModel\n{\npublic:\n\n    class CV_EXPORTS Kernel : public Algorithm\n    {\n    public:\n        virtual int getType() const = 0;\n        virtual void calc( int vcount, int n, const float* vecs, const float* another, float* results ) = 0;\n    };\n\n    /** Type of a %SVM formulation.\n    See SVM::Types. Default value is SVM::C_SVC. */\n    /** @see setType */\n    CV_WRAP virtual int getType() const = 0;\n    /** @copybrief getType @see getType */\n    CV_WRAP virtual void setType(int val) = 0;\n\n    /** Parameter \\f$\\gamma\\f$ of a kernel function.\n    For SVM::POLY, SVM::RBF, SVM::SIGMOID or SVM::CHI2. Default value is 1. */\n    /** @see setGamma */\n    CV_WRAP virtual double getGamma() const = 0;\n    /** @copybrief getGamma @see getGamma */\n    CV_WRAP virtual void setGamma(double val) = 0;\n\n    /** Parameter _coef0_ of a kernel function.\n    For SVM::POLY or SVM::SIGMOID. Default value is 0.*/\n    /** @see setCoef0 */\n    CV_WRAP virtual double getCoef0() const = 0;\n    /** @copybrief getCoef0 @see getCoef0 */\n    CV_WRAP virtual void setCoef0(double val) = 0;\n\n    /** Parameter _degree_ of a kernel function.\n    For SVM::POLY. Default value is 0. */\n    /** @see setDegree */\n    CV_WRAP virtual double getDegree() const = 0;\n    /** @copybrief getDegree @see getDegree */\n    CV_WRAP virtual void setDegree(double val) = 0;\n\n    /** Parameter _C_ of a %SVM optimization problem.\n    For SVM::C_SVC, SVM::EPS_SVR or SVM::NU_SVR. Default value is 0. */\n    /** @see setC */\n    CV_WRAP virtual double getC() const = 0;\n    /** @copybrief getC @see getC */\n    CV_WRAP virtual void setC(double val) = 0;\n\n    /** Parameter \\f$\\nu\\f$ of a %SVM optimization problem.\n    For SVM::NU_SVC, SVM::ONE_CLASS or SVM::NU_SVR. Default value is 0. */\n    /** @see setNu */\n    CV_WRAP virtual double getNu() const = 0;\n    /** @copybrief getNu @see getNu */\n    CV_WRAP virtual void setNu(double val) = 0;\n\n    /** Parameter \\f$\\epsilon\\f$ of a %SVM optimization problem.\n    For SVM::EPS_SVR. Default value is 0. */\n    /** @see setP */\n    CV_WRAP virtual double getP() const = 0;\n    /** @copybrief getP @see getP */\n    CV_WRAP virtual void setP(double val) = 0;\n\n    /** Optional weights in the SVM::C_SVC problem, assigned to particular classes.\n    They are multiplied by _C_ so the parameter _C_ of class _i_ becomes `classWeights(i) * C`. Thus\n    these weights affect the misclassification penalty for different classes. The larger weight,\n    the larger penalty on misclassification of data from the corresponding class. Default value is\n    empty Mat. */\n    /** @see setClassWeights */\n    CV_WRAP virtual cv::Mat getClassWeights() const = 0;\n    /** @copybrief getClassWeights @see getClassWeights */\n    CV_WRAP virtual void setClassWeights(const cv::Mat &val) = 0;\n\n    /** Termination criteria of the iterative %SVM training procedure which solves a partial\n    case of constrained quadratic optimization problem.\n    You can specify tolerance and/or the maximum number of iterations. Default value is\n    `TermCriteria( TermCriteria::MAX_ITER + TermCriteria::EPS, 1000, FLT_EPSILON )`; */\n    /** @see setTermCriteria */\n    CV_WRAP virtual cv::TermCriteria getTermCriteria() const = 0;\n    /** @copybrief getTermCriteria @see getTermCriteria */\n    CV_WRAP virtual void setTermCriteria(const cv::TermCriteria &val) = 0;\n\n    /** Type of a %SVM kernel.\n    See SVM::KernelTypes. Default value is SVM::RBF. */\n    CV_WRAP virtual int getKernelType() const = 0;\n\n    /** Initialize with one of predefined kernels.\n    See SVM::KernelTypes. */\n    CV_WRAP virtual void setKernel(int kernelType) = 0;\n\n    /** Initialize with custom kernel.\n    See SVM::Kernel class for implementation details */\n    virtual void setCustomKernel(const Ptr<Kernel> &_kernel) = 0;\n\n    //! %SVM type\n    enum Types {\n        /** C-Support Vector Classification. n-class classification (n \\f$\\geq\\f$ 2), allows\n        imperfect separation of classes with penalty multiplier C for outliers. */\n        C_SVC=100,\n        /** \\f$\\nu\\f$-Support Vector Classification. n-class classification with possible\n        imperfect separation. Parameter \\f$\\nu\\f$ (in the range 0..1, the larger the value, the smoother\n        the decision boundary) is used instead of C. */\n        NU_SVC=101,\n        /** Distribution Estimation (One-class %SVM). All the training data are from\n        the same class, %SVM builds a boundary that separates the class from the rest of the feature\n        space. */\n        ONE_CLASS=102,\n        /** \\f$\\epsilon\\f$-Support Vector Regression. The distance between feature vectors\n        from the training set and the fitting hyper-plane must be less than p. For outliers the\n        penalty multiplier C is used. */\n        EPS_SVR=103,\n        /** \\f$\\nu\\f$-Support Vector Regression. \\f$\\nu\\f$ is used instead of p.\n        See @cite LibSVM for details. */\n        NU_SVR=104\n    };\n\n    /** @brief %SVM kernel type\n\n    A comparison of different kernels on the following 2D test case with four classes. Four\n    SVM::C_SVC SVMs have been trained (one against rest) with auto_train. Evaluation on three\n    different kernels (SVM::CHI2, SVM::INTER, SVM::RBF). The color depicts the class with max score.\n    Bright means max-score \\> 0, dark means max-score \\< 0.\n    ![image](pics/SVM_Comparison.png)\n    */\n    enum KernelTypes {\n        /** Returned by SVM::getKernelType in case when custom kernel has been set */\n        CUSTOM=-1,\n        /** Linear kernel. No mapping is done, linear discrimination (or regression) is\n        done in the original feature space. It is the fastest option. \\f$K(x_i, x_j) = x_i^T x_j\\f$. */\n        LINEAR=0,\n        /** Polynomial kernel:\n        \\f$K(x_i, x_j) = (\\gamma x_i^T x_j + coef0)^{degree}, \\gamma > 0\\f$. */\n        POLY=1,\n        /** Radial basis function (RBF), a good choice in most cases.\n        \\f$K(x_i, x_j) = e^{-\\gamma ||x_i - x_j||^2}, \\gamma > 0\\f$. */\n        RBF=2,\n        /** Sigmoid kernel: \\f$K(x_i, x_j) = \\tanh(\\gamma x_i^T x_j + coef0)\\f$. */\n        SIGMOID=3,\n        /** Exponential Chi2 kernel, similar to the RBF kernel:\n        \\f$K(x_i, x_j) = e^{-\\gamma \\chi^2(x_i,x_j)}, \\chi^2(x_i,x_j) = (x_i-x_j)^2/(x_i+x_j), \\gamma > 0\\f$. */\n        CHI2=4,\n        /** Histogram intersection kernel. A fast kernel. \\f$K(x_i, x_j) = min(x_i,x_j)\\f$. */\n        INTER=5\n    };\n\n    //! %SVM params type\n    enum ParamTypes {\n        C=0,\n        GAMMA=1,\n        P=2,\n        NU=3,\n        COEF=4,\n        DEGREE=5\n    };\n\n    /** @brief Trains an %SVM with optimal parameters.\n\n    @param data the training data that can be constructed using TrainData::create or\n        TrainData::loadFromCSV.\n    @param kFold Cross-validation parameter. The training set is divided into kFold subsets. One\n        subset is used to test the model, the others form the train set. So, the %SVM algorithm is\n        executed kFold times.\n    @param Cgrid grid for C\n    @param gammaGrid grid for gamma\n    @param pGrid grid for p\n    @param nuGrid grid for nu\n    @param coeffGrid grid for coeff\n    @param degreeGrid grid for degree\n    @param balanced If true and the problem is 2-class classification then the method creates more\n        balanced cross-validation subsets that is proportions between classes in subsets are close\n        to such proportion in the whole train dataset.\n\n    The method trains the %SVM model automatically by choosing the optimal parameters C, gamma, p,\n    nu, coef0, degree. Parameters are considered optimal when the cross-validation\n    estimate of the test set error is minimal.\n\n    If there is no need to optimize a parameter, the corresponding grid step should be set to any\n    value less than or equal to 1. For example, to avoid optimization in gamma, set `gammaGrid.step\n    = 0`, `gammaGrid.minVal`, `gamma_grid.maxVal` as arbitrary numbers. In this case, the value\n    `Gamma` is taken for gamma.\n\n    And, finally, if the optimization in a parameter is required but the corresponding grid is\n    unknown, you may call the function SVM::getDefaultGrid. To generate a grid, for example, for\n    gamma, call `SVM::getDefaultGrid(SVM::GAMMA)`.\n\n    This function works for the classification (SVM::C_SVC or SVM::NU_SVC) as well as for the\n    regression (SVM::EPS_SVR or SVM::NU_SVR). If it is SVM::ONE_CLASS, no optimization is made and\n    the usual %SVM with parameters specified in params is executed.\n     */\n    virtual bool trainAuto( const Ptr<TrainData>& data, int kFold = 10,\n                    ParamGrid Cgrid = SVM::getDefaultGrid(SVM::C),\n                    ParamGrid gammaGrid  = SVM::getDefaultGrid(SVM::GAMMA),\n                    ParamGrid pGrid      = SVM::getDefaultGrid(SVM::P),\n                    ParamGrid nuGrid     = SVM::getDefaultGrid(SVM::NU),\n                    ParamGrid coeffGrid  = SVM::getDefaultGrid(SVM::COEF),\n                    ParamGrid degreeGrid = SVM::getDefaultGrid(SVM::DEGREE),\n                    bool balanced=false) = 0;\n\n    /** @brief Retrieves all the support vectors\n\n    The method returns all the support vectors as a floating-point matrix, where support vectors are\n    stored as matrix rows.\n     */\n    CV_WRAP virtual Mat getSupportVectors() const = 0;\n\n    /** @brief Retrieves all the uncompressed support vectors of a linear %SVM\n\n    The method returns all the uncompressed support vectors of a linear %SVM that the compressed\n    support vector, used for prediction, was derived from. They are returned in a floating-point\n    matrix, where the support vectors are stored as matrix rows.\n     */\n    CV_WRAP Mat getUncompressedSupportVectors() const;\n\n    /** @brief Retrieves the decision function\n\n    @param i the index of the decision function. If the problem solved is regression, 1-class or\n        2-class classification, then there will be just one decision function and the index should\n        always be 0. Otherwise, in the case of N-class classification, there will be \\f$N(N-1)/2\\f$\n        decision functions.\n    @param alpha the optional output vector for weights, corresponding to different support vectors.\n        In the case of linear %SVM all the alpha's will be 1's.\n    @param svidx the optional output vector of indices of support vectors within the matrix of\n        support vectors (which can be retrieved by SVM::getSupportVectors). In the case of linear\n        %SVM each decision function consists of a single \"compressed\" support vector.\n\n    The method returns rho parameter of the decision function, a scalar subtracted from the weighted\n    sum of kernel responses.\n     */\n    CV_WRAP virtual double getDecisionFunction(int i, OutputArray alpha, OutputArray svidx) const = 0;\n\n    /** @brief Generates a grid for %SVM parameters.\n\n    @param param_id %SVM parameters IDs that must be one of the SVM::ParamTypes. The grid is\n    generated for the parameter with this ID.\n\n    The function generates a grid for the specified parameter of the %SVM algorithm. The grid may be\n    passed to the function SVM::trainAuto.\n     */\n    static ParamGrid getDefaultGrid( int param_id );\n\n    /** Creates empty model.\n    Use StatModel::train to train the model. Since %SVM has several parameters, you may want to\n    find the best parameters for your problem, it can be done with SVM::trainAuto. */\n    CV_WRAP static Ptr<SVM> create();\n};\n\n/****************************************************************************************\\\n*                              Expectation - Maximization                                *\n\\****************************************************************************************/\n\n/** @brief The class implements the Expectation Maximization algorithm.\n\n@sa @ref ml_intro_em\n */\nclass CV_EXPORTS_W EM : public StatModel\n{\npublic:\n    //! Type of covariation matrices\n    enum Types {\n        /** A scaled identity matrix \\f$\\mu_k * I\\f$. There is the only\n        parameter \\f$\\mu_k\\f$ to be estimated for each matrix. The option may be used in special cases,\n        when the constraint is relevant, or as a first step in the optimization (for example in case\n        when the data is preprocessed with PCA). The results of such preliminary estimation may be\n        passed again to the optimization procedure, this time with\n        covMatType=EM::COV_MAT_DIAGONAL. */\n        COV_MAT_SPHERICAL=0,\n        /** A diagonal matrix with positive diagonal elements. The number of\n        free parameters is d for each matrix. This is most commonly used option yielding good\n        estimation results. */\n        COV_MAT_DIAGONAL=1,\n        /** A symmetric positively defined matrix. The number of free\n        parameters in each matrix is about \\f$d^2/2\\f$. It is not recommended to use this option, unless\n        there is pretty accurate initial estimation of the parameters and/or a huge number of\n        training samples. */\n        COV_MAT_GENERIC=2,\n        COV_MAT_DEFAULT=COV_MAT_DIAGONAL\n    };\n\n    //! Default parameters\n    enum {DEFAULT_NCLUSTERS=5, DEFAULT_MAX_ITERS=100};\n\n    //! The initial step\n    enum {START_E_STEP=1, START_M_STEP=2, START_AUTO_STEP=0};\n\n    /** The number of mixture components in the Gaussian mixture model.\n    Default value of the parameter is EM::DEFAULT_NCLUSTERS=5. Some of %EM implementation could\n    determine the optimal number of mixtures within a specified value range, but that is not the\n    case in ML yet. */\n    /** @see setClustersNumber */\n    CV_WRAP virtual int getClustersNumber() const = 0;\n    /** @copybrief getClustersNumber @see getClustersNumber */\n    CV_WRAP virtual void setClustersNumber(int val) = 0;\n\n    /** Constraint on covariance matrices which defines type of matrices.\n    See EM::Types. */\n    /** @see setCovarianceMatrixType */\n    CV_WRAP virtual int getCovarianceMatrixType() const = 0;\n    /** @copybrief getCovarianceMatrixType @see getCovarianceMatrixType */\n    CV_WRAP virtual void setCovarianceMatrixType(int val) = 0;\n\n    /** The termination criteria of the %EM algorithm.\n    The %EM algorithm can be terminated by the number of iterations termCrit.maxCount (number of\n    M-steps) or when relative change of likelihood logarithm is less than termCrit.epsilon. Default\n    maximum number of iterations is EM::DEFAULT_MAX_ITERS=100. */\n    /** @see setTermCriteria */\n    CV_WRAP virtual TermCriteria getTermCriteria() const = 0;\n    /** @copybrief getTermCriteria @see getTermCriteria */\n    CV_WRAP virtual void setTermCriteria(const TermCriteria &val) = 0;\n\n    /** @brief Returns weights of the mixtures\n\n    Returns vector with the number of elements equal to the number of mixtures.\n     */\n    CV_WRAP virtual Mat getWeights() const = 0;\n    /** @brief Returns the cluster centers (means of the Gaussian mixture)\n\n    Returns matrix with the number of rows equal to the number of mixtures and number of columns\n    equal to the space dimensionality.\n     */\n    CV_WRAP virtual Mat getMeans() const = 0;\n    /** @brief Returns covariation matrices\n\n    Returns vector of covariation matrices. Number of matrices is the number of gaussian mixtures,\n    each matrix is a square floating-point matrix NxN, where N is the space dimensionality.\n     */\n    CV_WRAP virtual void getCovs(CV_OUT std::vector<Mat>& covs) const = 0;\n\n    /** @brief Returns a likelihood logarithm value and an index of the most probable mixture component\n    for the given sample.\n\n    @param sample A sample for classification. It should be a one-channel matrix of\n        \\f$1 \\times dims\\f$ or \\f$dims \\times 1\\f$ size.\n    @param probs Optional output matrix that contains posterior probabilities of each component\n        given the sample. It has \\f$1 \\times nclusters\\f$ size and CV_64FC1 type.\n\n    The method returns a two-element double vector. Zero element is a likelihood logarithm value for\n    the sample. First element is an index of the most probable mixture component for the given\n    sample.\n     */\n    CV_WRAP virtual Vec2d predict2(InputArray sample, OutputArray probs) const = 0;\n\n    /** @brief Estimate the Gaussian mixture parameters from a samples set.\n\n    This variation starts with Expectation step. Initial values of the model parameters will be\n    estimated by the k-means algorithm.\n\n    Unlike many of the ML models, %EM is an unsupervised learning algorithm and it does not take\n    responses (class labels or function values) as input. Instead, it computes the *Maximum\n    Likelihood Estimate* of the Gaussian mixture parameters from an input sample set, stores all the\n    parameters inside the structure: \\f$p_{i,k}\\f$ in probs, \\f$a_k\\f$ in means , \\f$S_k\\f$ in\n    covs[k], \\f$\\pi_k\\f$ in weights , and optionally computes the output \"class label\" for each\n    sample: \\f$\\texttt{labels}_i=\\texttt{arg max}_k(p_{i,k}), i=1..N\\f$ (indices of the most\n    probable mixture component for each sample).\n\n    The trained model can be used further for prediction, just like any other classifier. The\n    trained model is similar to the NormalBayesClassifier.\n\n    @param samples Samples from which the Gaussian mixture model will be estimated. It should be a\n        one-channel matrix, each row of which is a sample. If the matrix does not have CV_64F type\n        it will be converted to the inner matrix of such type for the further computing.\n    @param logLikelihoods The optional output matrix that contains a likelihood logarithm value for\n        each sample. It has \\f$nsamples \\times 1\\f$ size and CV_64FC1 type.\n    @param labels The optional output \"class label\" for each sample:\n        \\f$\\texttt{labels}_i=\\texttt{arg max}_k(p_{i,k}), i=1..N\\f$ (indices of the most probable\n        mixture component for each sample). It has \\f$nsamples \\times 1\\f$ size and CV_32SC1 type.\n    @param probs The optional output matrix that contains posterior probabilities of each Gaussian\n        mixture component given the each sample. It has \\f$nsamples \\times nclusters\\f$ size and\n        CV_64FC1 type.\n     */\n    CV_WRAP virtual bool trainEM(InputArray samples,\n                         OutputArray logLikelihoods=noArray(),\n                         OutputArray labels=noArray(),\n                         OutputArray probs=noArray()) = 0;\n\n    /** @brief Estimate the Gaussian mixture parameters from a samples set.\n\n    This variation starts with Expectation step. You need to provide initial means \\f$a_k\\f$ of\n    mixture components. Optionally you can pass initial weights \\f$\\pi_k\\f$ and covariance matrices\n    \\f$S_k\\f$ of mixture components.\n\n    @param samples Samples from which the Gaussian mixture model will be estimated. It should be a\n        one-channel matrix, each row of which is a sample. If the matrix does not have CV_64F type\n        it will be converted to the inner matrix of such type for the further computing.\n    @param means0 Initial means \\f$a_k\\f$ of mixture components. It is a one-channel matrix of\n        \\f$nclusters \\times dims\\f$ size. If the matrix does not have CV_64F type it will be\n        converted to the inner matrix of such type for the further computing.\n    @param covs0 The vector of initial covariance matrices \\f$S_k\\f$ of mixture components. Each of\n        covariance matrices is a one-channel matrix of \\f$dims \\times dims\\f$ size. If the matrices\n        do not have CV_64F type they will be converted to the inner matrices of such type for the\n        further computing.\n    @param weights0 Initial weights \\f$\\pi_k\\f$ of mixture components. It should be a one-channel\n        floating-point matrix with \\f$1 \\times nclusters\\f$ or \\f$nclusters \\times 1\\f$ size.\n    @param logLikelihoods The optional output matrix that contains a likelihood logarithm value for\n        each sample. It has \\f$nsamples \\times 1\\f$ size and CV_64FC1 type.\n    @param labels The optional output \"class label\" for each sample:\n        \\f$\\texttt{labels}_i=\\texttt{arg max}_k(p_{i,k}), i=1..N\\f$ (indices of the most probable\n        mixture component for each sample). It has \\f$nsamples \\times 1\\f$ size and CV_32SC1 type.\n    @param probs The optional output matrix that contains posterior probabilities of each Gaussian\n        mixture component given the each sample. It has \\f$nsamples \\times nclusters\\f$ size and\n        CV_64FC1 type.\n    */\n    CV_WRAP virtual bool trainE(InputArray samples, InputArray means0,\n                        InputArray covs0=noArray(),\n                        InputArray weights0=noArray(),\n                        OutputArray logLikelihoods=noArray(),\n                        OutputArray labels=noArray(),\n                        OutputArray probs=noArray()) = 0;\n\n    /** @brief Estimate the Gaussian mixture parameters from a samples set.\n\n    This variation starts with Maximization step. You need to provide initial probabilities\n    \\f$p_{i,k}\\f$ to use this option.\n\n    @param samples Samples from which the Gaussian mixture model will be estimated. It should be a\n        one-channel matrix, each row of which is a sample. If the matrix does not have CV_64F type\n        it will be converted to the inner matrix of such type for the further computing.\n    @param probs0\n    @param logLikelihoods The optional output matrix that contains a likelihood logarithm value for\n        each sample. It has \\f$nsamples \\times 1\\f$ size and CV_64FC1 type.\n    @param labels The optional output \"class label\" for each sample:\n        \\f$\\texttt{labels}_i=\\texttt{arg max}_k(p_{i,k}), i=1..N\\f$ (indices of the most probable\n        mixture component for each sample). It has \\f$nsamples \\times 1\\f$ size and CV_32SC1 type.\n    @param probs The optional output matrix that contains posterior probabilities of each Gaussian\n        mixture component given the each sample. It has \\f$nsamples \\times nclusters\\f$ size and\n        CV_64FC1 type.\n    */\n    CV_WRAP virtual bool trainM(InputArray samples, InputArray probs0,\n                        OutputArray logLikelihoods=noArray(),\n                        OutputArray labels=noArray(),\n                        OutputArray probs=noArray()) = 0;\n\n    /** Creates empty %EM model.\n    The model should be trained then using StatModel::train(traindata, flags) method. Alternatively, you\n    can use one of the EM::train\\* methods or load it from file using Algorithm::load\\<EM\\>(filename).\n     */\n    CV_WRAP static Ptr<EM> create();\n};\n\n/****************************************************************************************\\\n*                                      Decision Tree                                     *\n\\****************************************************************************************/\n\n/** @brief The class represents a single decision tree or a collection of decision trees.\n\nThe current public interface of the class allows user to train only a single decision tree, however\nthe class is capable of storing multiple decision trees and using them for prediction (by summing\nresponses or using a voting schemes), and the derived from DTrees classes (such as RTrees and Boost)\nuse this capability to implement decision tree ensembles.\n\n@sa @ref ml_intro_trees\n*/\nclass CV_EXPORTS_W DTrees : public StatModel\n{\npublic:\n    /** Predict options */\n    enum Flags { PREDICT_AUTO=0, PREDICT_SUM=(1<<8), PREDICT_MAX_VOTE=(2<<8), PREDICT_MASK=(3<<8) };\n\n    /** Cluster possible values of a categorical variable into K\\<=maxCategories clusters to\n    find a suboptimal split.\n    If a discrete variable, on which the training procedure tries to make a split, takes more than\n    maxCategories values, the precise best subset estimation may take a very long time because the\n    algorithm is exponential. Instead, many decision trees engines (including our implementation)\n    try to find sub-optimal split in this case by clustering all the samples into maxCategories\n    clusters that is some categories are merged together. The clustering is applied only in n \\>\n    2-class classification problems for categorical variables with N \\> max_categories possible\n    values. In case of regression and 2-class classification the optimal split can be found\n    efficiently without employing clustering, thus the parameter is not used in these cases.\n    Default value is 10.*/\n    /** @see setMaxCategories */\n    CV_WRAP virtual int getMaxCategories() const = 0;\n    /** @copybrief getMaxCategories @see getMaxCategories */\n    CV_WRAP virtual void setMaxCategories(int val) = 0;\n\n    /** The maximum possible depth of the tree.\n    That is the training algorithms attempts to split a node while its depth is less than maxDepth.\n    The root node has zero depth. The actual depth may be smaller if the other termination criteria\n    are met (see the outline of the training procedure @ref ml_intro_trees \"here\"), and/or if the\n    tree is pruned. Default value is INT_MAX.*/\n    /** @see setMaxDepth */\n    CV_WRAP virtual int getMaxDepth() const = 0;\n    /** @copybrief getMaxDepth @see getMaxDepth */\n    CV_WRAP virtual void setMaxDepth(int val) = 0;\n\n    /** If the number of samples in a node is less than this parameter then the node will not be split.\n\n    Default value is 10.*/\n    /** @see setMinSampleCount */\n    CV_WRAP virtual int getMinSampleCount() const = 0;\n    /** @copybrief getMinSampleCount @see getMinSampleCount */\n    CV_WRAP virtual void setMinSampleCount(int val) = 0;\n\n    /** If CVFolds \\> 1 then algorithms prunes the built decision tree using K-fold\n    cross-validation procedure where K is equal to CVFolds.\n    Default value is 10.*/\n    /** @see setCVFolds */\n    CV_WRAP virtual int getCVFolds() const = 0;\n    /** @copybrief getCVFolds @see getCVFolds */\n    CV_WRAP virtual void setCVFolds(int val) = 0;\n\n    /** If true then surrogate splits will be built.\n    These splits allow to work with missing data and compute variable importance correctly.\n    Default value is false.\n    @note currently it's not implemented.*/\n    /** @see setUseSurrogates */\n    CV_WRAP virtual bool getUseSurrogates() const = 0;\n    /** @copybrief getUseSurrogates @see getUseSurrogates */\n    CV_WRAP virtual void setUseSurrogates(bool val) = 0;\n\n    /** If true then a pruning will be harsher.\n    This will make a tree more compact and more resistant to the training data noise but a bit less\n    accurate. Default value is true.*/\n    /** @see setUse1SERule */\n    CV_WRAP virtual bool getUse1SERule() const = 0;\n    /** @copybrief getUse1SERule @see getUse1SERule */\n    CV_WRAP virtual void setUse1SERule(bool val) = 0;\n\n    /** If true then pruned branches are physically removed from the tree.\n    Otherwise they are retained and it is possible to get results from the original unpruned (or\n    pruned less aggressively) tree. Default value is true.*/\n    /** @see setTruncatePrunedTree */\n    CV_WRAP virtual bool getTruncatePrunedTree() const = 0;\n    /** @copybrief getTruncatePrunedTree @see getTruncatePrunedTree */\n    CV_WRAP virtual void setTruncatePrunedTree(bool val) = 0;\n\n    /** Termination criteria for regression trees.\n    If all absolute differences between an estimated value in a node and values of train samples\n    in this node are less than this parameter then the node will not be split further. Default\n    value is 0.01f*/\n    /** @see setRegressionAccuracy */\n    CV_WRAP virtual float getRegressionAccuracy() const = 0;\n    /** @copybrief getRegressionAccuracy @see getRegressionAccuracy */\n    CV_WRAP virtual void setRegressionAccuracy(float val) = 0;\n\n    /** @brief The array of a priori class probabilities, sorted by the class label value.\n\n    The parameter can be used to tune the decision tree preferences toward a certain class. For\n    example, if you want to detect some rare anomaly occurrence, the training base will likely\n    contain much more normal cases than anomalies, so a very good classification performance\n    will be achieved just by considering every case as normal. To avoid this, the priors can be\n    specified, where the anomaly probability is artificially increased (up to 0.5 or even\n    greater), so the weight of the misclassified anomalies becomes much bigger, and the tree is\n    adjusted properly.\n\n    You can also think about this parameter as weights of prediction categories which determine\n    relative weights that you give to misclassification. That is, if the weight of the first\n    category is 1 and the weight of the second category is 10, then each mistake in predicting\n    the second category is equivalent to making 10 mistakes in predicting the first category.\n    Default value is empty Mat.*/\n    /** @see setPriors */\n    CV_WRAP virtual cv::Mat getPriors() const = 0;\n    /** @copybrief getPriors @see getPriors */\n    CV_WRAP virtual void setPriors(const cv::Mat &val) = 0;\n\n    /** @brief The class represents a decision tree node.\n     */\n    class CV_EXPORTS Node\n    {\n    public:\n        Node();\n        double value; //!< Value at the node: a class label in case of classification or estimated\n                      //!< function value in case of regression.\n        int classIdx; //!< Class index normalized to 0..class_count-1 range and assigned to the\n                      //!< node. It is used internally in classification trees and tree ensembles.\n        int parent; //!< Index of the parent node\n        int left; //!< Index of the left child node\n        int right; //!< Index of right child node\n        int defaultDir; //!< Default direction where to go (-1: left or +1: right). It helps in the\n                        //!< case of missing values.\n        int split; //!< Index of the first split\n    };\n\n    /** @brief The class represents split in a decision tree.\n     */\n    class CV_EXPORTS Split\n    {\n    public:\n        Split();\n        int varIdx; //!< Index of variable on which the split is created.\n        bool inversed; //!< If true, then the inverse split rule is used (i.e. left and right\n                       //!< branches are exchanged in the rule expressions below).\n        float quality; //!< The split quality, a positive number. It is used to choose the best split.\n        int next; //!< Index of the next split in the list of splits for the node\n        float c; /**< The threshold value in case of split on an ordered variable.\n                      The rule is:\n                      @code{.none}\n                      if var_value < c\n                        then next_node <- left\n                        else next_node <- right\n                      @endcode */\n        int subsetOfs; /**< Offset of the bitset used by the split on a categorical variable.\n                            The rule is:\n                            @code{.none}\n                            if bitset[var_value] == 1\n                                then next_node <- left\n                                else next_node <- right\n                            @endcode */\n    };\n\n    /** @brief Returns indices of root nodes\n    */\n    virtual const std::vector<int>& getRoots() const = 0;\n    /** @brief Returns all the nodes\n\n    all the node indices are indices in the returned vector\n     */\n    virtual const std::vector<Node>& getNodes() const = 0;\n    /** @brief Returns all the splits\n\n    all the split indices are indices in the returned vector\n     */\n    virtual const std::vector<Split>& getSplits() const = 0;\n    /** @brief Returns all the bitsets for categorical splits\n\n    Split::subsetOfs is an offset in the returned vector\n     */\n    virtual const std::vector<int>& getSubsets() const = 0;\n\n    /** @brief Creates the empty model\n\n    The static method creates empty decision tree with the specified parameters. It should be then\n    trained using train method (see StatModel::train). Alternatively, you can load the model from\n    file using Algorithm::load\\<DTrees\\>(filename).\n     */\n    CV_WRAP static Ptr<DTrees> create();\n};\n\n/****************************************************************************************\\\n*                                   Random Trees Classifier                              *\n\\****************************************************************************************/\n\n/** @brief The class implements the random forest predictor.\n\n@sa @ref ml_intro_rtrees\n */\nclass CV_EXPORTS_W RTrees : public DTrees\n{\npublic:\n\n    /** If true then variable importance will be calculated and then it can be retrieved by RTrees::getVarImportance.\n    Default value is false.*/\n    /** @see setCalculateVarImportance */\n    CV_WRAP virtual bool getCalculateVarImportance() const = 0;\n    /** @copybrief getCalculateVarImportance @see getCalculateVarImportance */\n    CV_WRAP virtual void setCalculateVarImportance(bool val) = 0;\n\n    /** The size of the randomly selected subset of features at each tree node and that are used\n    to find the best split(s).\n    If you set it to 0 then the size will be set to the square root of the total number of\n    features. Default value is 0.*/\n    /** @see setActiveVarCount */\n    CV_WRAP virtual int getActiveVarCount() const = 0;\n    /** @copybrief getActiveVarCount @see getActiveVarCount */\n    CV_WRAP virtual void setActiveVarCount(int val) = 0;\n\n    /** The termination criteria that specifies when the training algorithm stops.\n    Either when the specified number of trees is trained and added to the ensemble or when\n    sufficient accuracy (measured as OOB error) is achieved. Typically the more trees you have the\n    better the accuracy. However, the improvement in accuracy generally diminishes and asymptotes\n    pass a certain number of trees. Also to keep in mind, the number of tree increases the\n    prediction time linearly. Default value is TermCriteria(TermCriteria::MAX_ITERS +\n    TermCriteria::EPS, 50, 0.1)*/\n    /** @see setTermCriteria */\n    CV_WRAP virtual TermCriteria getTermCriteria() const = 0;\n    /** @copybrief getTermCriteria @see getTermCriteria */\n    CV_WRAP virtual void setTermCriteria(const TermCriteria &val) = 0;\n\n    /** Returns the variable importance array.\n    The method returns the variable importance vector, computed at the training stage when\n    CalculateVarImportance is set to true. If this flag was set to false, the empty matrix is\n    returned.\n     */\n    CV_WRAP virtual Mat getVarImportance() const = 0;\n\n    /** Creates the empty model.\n    Use StatModel::train to train the model, StatModel::train to create and train the model,\n    Algorithm::load to load the pre-trained model.\n     */\n    CV_WRAP static Ptr<RTrees> create();\n};\n\n/****************************************************************************************\\\n*                                   Boosted tree classifier                              *\n\\****************************************************************************************/\n\n/** @brief Boosted tree classifier derived from DTrees\n\n@sa @ref ml_intro_boost\n */\nclass CV_EXPORTS_W Boost : public DTrees\n{\npublic:\n    /** Type of the boosting algorithm.\n    See Boost::Types. Default value is Boost::REAL. */\n    /** @see setBoostType */\n    CV_WRAP virtual int getBoostType() const = 0;\n    /** @copybrief getBoostType @see getBoostType */\n    CV_WRAP virtual void setBoostType(int val) = 0;\n\n    /** The number of weak classifiers.\n    Default value is 100. */\n    /** @see setWeakCount */\n    CV_WRAP virtual int getWeakCount() const = 0;\n    /** @copybrief getWeakCount @see getWeakCount */\n    CV_WRAP virtual void setWeakCount(int val) = 0;\n\n    /** A threshold between 0 and 1 used to save computational time.\n    Samples with summary weight \\f$\\leq 1 - weight_trim_rate\\f$ do not participate in the *next*\n    iteration of training. Set this parameter to 0 to turn off this functionality. Default value is 0.95.*/\n    /** @see setWeightTrimRate */\n    CV_WRAP virtual double getWeightTrimRate() const = 0;\n    /** @copybrief getWeightTrimRate @see getWeightTrimRate */\n    CV_WRAP virtual void setWeightTrimRate(double val) = 0;\n\n    /** Boosting type.\n    Gentle AdaBoost and Real AdaBoost are often the preferable choices. */\n    enum Types {\n        DISCRETE=0, //!< Discrete AdaBoost.\n        REAL=1, //!< Real AdaBoost. It is a technique that utilizes confidence-rated predictions\n                //!< and works well with categorical data.\n        LOGIT=2, //!< LogitBoost. It can produce good regression fits.\n        GENTLE=3 //!< Gentle AdaBoost. It puts less weight on outlier data points and for that\n                 //!<reason is often good with regression data.\n    };\n\n    /** Creates the empty model.\n    Use StatModel::train to train the model, Algorithm::load\\<Boost\\>(filename) to load the pre-trained model. */\n    CV_WRAP static Ptr<Boost> create();\n};\n\n/****************************************************************************************\\\n*                                   Gradient Boosted Trees                               *\n\\****************************************************************************************/\n\n/*class CV_EXPORTS_W GBTrees : public DTrees\n{\npublic:\n    struct CV_EXPORTS_W_MAP Params : public DTrees::Params\n    {\n        CV_PROP_RW int weakCount;\n        CV_PROP_RW int lossFunctionType;\n        CV_PROP_RW float subsamplePortion;\n        CV_PROP_RW float shrinkage;\n\n        Params();\n        Params( int lossFunctionType, int weakCount, float shrinkage,\n                float subsamplePortion, int maxDepth, bool useSurrogates );\n    };\n\n    enum {SQUARED_LOSS=0, ABSOLUTE_LOSS, HUBER_LOSS=3, DEVIANCE_LOSS};\n\n    virtual void setK(int k) = 0;\n\n    virtual float predictSerial( InputArray samples,\n                                 OutputArray weakResponses, int flags) const = 0;\n\n    static Ptr<GBTrees> create(const Params& p);\n};*/\n\n/****************************************************************************************\\\n*                              Artificial Neural Networks (ANN)                          *\n\\****************************************************************************************/\n\n/////////////////////////////////// Multi-Layer Perceptrons //////////////////////////////\n\n/** @brief Artificial Neural Networks - Multi-Layer Perceptrons.\n\nUnlike many other models in ML that are constructed and trained at once, in the MLP model these\nsteps are separated. First, a network with the specified topology is created using the non-default\nconstructor or the method ANN_MLP::create. All the weights are set to zeros. Then, the network is\ntrained using a set of input and output vectors. The training procedure can be repeated more than\nonce, that is, the weights can be adjusted based on the new training data.\n\nAdditional flags for StatModel::train are available: ANN_MLP::TrainFlags.\n\n@sa @ref ml_intro_ann\n */\nclass CV_EXPORTS_W ANN_MLP : public StatModel\n{\npublic:\n    /** Available training methods */\n    enum TrainingMethods {\n        BACKPROP=0, //!< The back-propagation algorithm.\n        RPROP=1 //!< The RPROP algorithm. See @cite RPROP93 for details.\n    };\n\n    /** Sets training method and common parameters.\n    @param method Default value is ANN_MLP::RPROP. See ANN_MLP::TrainingMethods.\n    @param param1 passed to setRpropDW0 for ANN_MLP::RPROP and to setBackpropWeightScale for ANN_MLP::BACKPROP\n    @param param2 passed to setRpropDWMin for ANN_MLP::RPROP and to setBackpropMomentumScale for ANN_MLP::BACKPROP.\n    */\n    CV_WRAP virtual void setTrainMethod(int method, double param1 = 0, double param2 = 0) = 0;\n\n    /** Returns current training method */\n    CV_WRAP virtual int getTrainMethod() const = 0;\n\n    /** Initialize the activation function for each neuron.\n    Currently the default and the only fully supported activation function is ANN_MLP::SIGMOID_SYM.\n    @param type The type of activation function. See ANN_MLP::ActivationFunctions.\n    @param param1 The first parameter of the activation function, \\f$\\alpha\\f$. Default value is 0.\n    @param param2 The second parameter of the activation function, \\f$\\beta\\f$. Default value is 0.\n    */\n    CV_WRAP virtual void setActivationFunction(int type, double param1 = 0, double param2 = 0) = 0;\n\n    /**  Integer vector specifying the number of neurons in each layer including the input and output layers.\n    The very first element specifies the number of elements in the input layer.\n    The last element - number of elements in the output layer. Default value is empty Mat.\n    @sa getLayerSizes */\n    CV_WRAP virtual void setLayerSizes(InputArray _layer_sizes) = 0;\n\n    /**  Integer vector specifying the number of neurons in each layer including the input and output layers.\n    The very first element specifies the number of elements in the input layer.\n    The last element - number of elements in the output layer.\n    @sa setLayerSizes */\n    CV_WRAP virtual cv::Mat getLayerSizes() const = 0;\n\n    /** Termination criteria of the training algorithm.\n    You can specify the maximum number of iterations (maxCount) and/or how much the error could\n    change between the iterations to make the algorithm continue (epsilon). Default value is\n    TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 1000, 0.01).*/\n    /** @see setTermCriteria */\n    CV_WRAP virtual TermCriteria getTermCriteria() const = 0;\n    /** @copybrief getTermCriteria @see getTermCriteria */\n    CV_WRAP virtual void setTermCriteria(TermCriteria val) = 0;\n\n    /** BPROP: Strength of the weight gradient term.\n    The recommended value is about 0.1. Default value is 0.1.*/\n    /** @see setBackpropWeightScale */\n    CV_WRAP virtual double getBackpropWeightScale() const = 0;\n    /** @copybrief getBackpropWeightScale @see getBackpropWeightScale */\n    CV_WRAP virtual void setBackpropWeightScale(double val) = 0;\n\n    /** BPROP: Strength of the momentum term (the difference between weights on the 2 previous iterations).\n    This parameter provides some inertia to smooth the random fluctuations of the weights. It can\n    vary from 0 (the feature is disabled) to 1 and beyond. The value 0.1 or so is good enough.\n    Default value is 0.1.*/\n    /** @see setBackpropMomentumScale */\n    CV_WRAP virtual double getBackpropMomentumScale() const = 0;\n    /** @copybrief getBackpropMomentumScale @see getBackpropMomentumScale */\n    CV_WRAP virtual void setBackpropMomentumScale(double val) = 0;\n\n    /** RPROP: Initial value \\f$\\Delta_0\\f$ of update-values \\f$\\Delta_{ij}\\f$.\n    Default value is 0.1.*/\n    /** @see setRpropDW0 */\n    CV_WRAP virtual double getRpropDW0() const = 0;\n    /** @copybrief getRpropDW0 @see getRpropDW0 */\n    CV_WRAP virtual void setRpropDW0(double val) = 0;\n\n    /** RPROP: Increase factor \\f$\\eta^+\\f$.\n    It must be \\>1. Default value is 1.2.*/\n    /** @see setRpropDWPlus */\n    CV_WRAP virtual double getRpropDWPlus() const = 0;\n    /** @copybrief getRpropDWPlus @see getRpropDWPlus */\n    CV_WRAP virtual void setRpropDWPlus(double val) = 0;\n\n    /** RPROP: Decrease factor \\f$\\eta^-\\f$.\n    It must be \\<1. Default value is 0.5.*/\n    /** @see setRpropDWMinus */\n    CV_WRAP virtual double getRpropDWMinus() const = 0;\n    /** @copybrief getRpropDWMinus @see getRpropDWMinus */\n    CV_WRAP virtual void setRpropDWMinus(double val) = 0;\n\n    /** RPROP: Update-values lower limit \\f$\\Delta_{min}\\f$.\n    It must be positive. Default value is FLT_EPSILON.*/\n    /** @see setRpropDWMin */\n    CV_WRAP virtual double getRpropDWMin() const = 0;\n    /** @copybrief getRpropDWMin @see getRpropDWMin */\n    CV_WRAP virtual void setRpropDWMin(double val) = 0;\n\n    /** RPROP: Update-values upper limit \\f$\\Delta_{max}\\f$.\n    It must be \\>1. Default value is 50.*/\n    /** @see setRpropDWMax */\n    CV_WRAP virtual double getRpropDWMax() const = 0;\n    /** @copybrief getRpropDWMax @see getRpropDWMax */\n    CV_WRAP virtual void setRpropDWMax(double val) = 0;\n\n    /** possible activation functions */\n    enum ActivationFunctions {\n        /** Identity function: \\f$f(x)=x\\f$ */\n        IDENTITY = 0,\n        /** Symmetrical sigmoid: \\f$f(x)=\\beta*(1-e^{-\\alpha x})/(1+e^{-\\alpha x}\\f$\n        @note\n        If you are using the default sigmoid activation function with the default parameter values\n        fparam1=0 and fparam2=0 then the function used is y = 1.7159\\*tanh(2/3 \\* x), so the output\n        will range from [-1.7159, 1.7159], instead of [0,1].*/\n        SIGMOID_SYM = 1,\n        /** Gaussian function: \\f$f(x)=\\beta e^{-\\alpha x*x}\\f$ */\n        GAUSSIAN = 2\n    };\n\n    /** Train options */\n    enum TrainFlags {\n        /** Update the network weights, rather than compute them from scratch. In the latter case\n        the weights are initialized using the Nguyen-Widrow algorithm. */\n        UPDATE_WEIGHTS = 1,\n        /** Do not normalize the input vectors. If this flag is not set, the training algorithm\n        normalizes each input feature independently, shifting its mean value to 0 and making the\n        standard deviation equal to 1. If the network is assumed to be updated frequently, the new\n        training data could be much different from original one. In this case, you should take care\n        of proper normalization. */\n        NO_INPUT_SCALE = 2,\n        /** Do not normalize the output vectors. If the flag is not set, the training algorithm\n        normalizes each output feature independently, by transforming it to the certain range\n        depending on the used activation function. */\n        NO_OUTPUT_SCALE = 4\n    };\n\n    CV_WRAP virtual Mat getWeights(int layerIdx) const = 0;\n\n    /** @brief Creates empty model\n\n    Use StatModel::train to train the model, Algorithm::load\\<ANN_MLP\\>(filename) to load the pre-trained model.\n    Note that the train method has optional flags: ANN_MLP::TrainFlags.\n     */\n    CV_WRAP static Ptr<ANN_MLP> create();\n};\n\n/****************************************************************************************\\\n*                           Logistic Regression                                          *\n\\****************************************************************************************/\n\n/** @brief Implements Logistic Regression classifier.\n\n@sa @ref ml_intro_lr\n */\nclass CV_EXPORTS_W LogisticRegression : public StatModel\n{\npublic:\n\n    /** Learning rate. */\n    /** @see setLearningRate */\n    CV_WRAP virtual double getLearningRate() const = 0;\n    /** @copybrief getLearningRate @see getLearningRate */\n    CV_WRAP virtual void setLearningRate(double val) = 0;\n\n    /** Number of iterations. */\n    /** @see setIterations */\n    CV_WRAP virtual int getIterations() const = 0;\n    /** @copybrief getIterations @see getIterations */\n    CV_WRAP virtual void setIterations(int val) = 0;\n\n    /** Kind of regularization to be applied. See LogisticRegression::RegKinds. */\n    /** @see setRegularization */\n    CV_WRAP virtual int getRegularization() const = 0;\n    /** @copybrief getRegularization @see getRegularization */\n    CV_WRAP virtual void setRegularization(int val) = 0;\n\n    /** Kind of training method used. See LogisticRegression::Methods. */\n    /** @see setTrainMethod */\n    CV_WRAP virtual int getTrainMethod() const = 0;\n    /** @copybrief getTrainMethod @see getTrainMethod */\n    CV_WRAP virtual void setTrainMethod(int val) = 0;\n\n    /** Specifies the number of training samples taken in each step of Mini-Batch Gradient\n    Descent. Will only be used if using LogisticRegression::MINI_BATCH training algorithm. It\n    has to take values less than the total number of training samples. */\n    /** @see setMiniBatchSize */\n    CV_WRAP virtual int getMiniBatchSize() const = 0;\n    /** @copybrief getMiniBatchSize @see getMiniBatchSize */\n    CV_WRAP virtual void setMiniBatchSize(int val) = 0;\n\n    /** Termination criteria of the algorithm. */\n    /** @see setTermCriteria */\n    CV_WRAP virtual TermCriteria getTermCriteria() const = 0;\n    /** @copybrief getTermCriteria @see getTermCriteria */\n    CV_WRAP virtual void setTermCriteria(TermCriteria val) = 0;\n\n    //! Regularization kinds\n    enum RegKinds {\n        REG_DISABLE = -1, //!< Regularization disabled\n        REG_L1 = 0, //!< %L1 norm\n        REG_L2 = 1 //!< %L2 norm\n    };\n\n    //! Training methods\n    enum Methods {\n        BATCH = 0,\n        MINI_BATCH = 1 //!< Set MiniBatchSize to a positive integer when using this method.\n    };\n\n    /** @brief Predicts responses for input samples and returns a float type.\n\n    @param samples The input data for the prediction algorithm. Matrix [m x n], where each row\n        contains variables (features) of one object being classified. Should have data type CV_32F.\n    @param results Predicted labels as a column matrix of type CV_32S.\n    @param flags Not used.\n     */\n    CV_WRAP virtual float predict( InputArray samples, OutputArray results=noArray(), int flags=0 ) const = 0;\n\n    /** @brief This function returns the trained paramters arranged across rows.\n\n    For a two class classifcation problem, it returns a row matrix. It returns learnt paramters of\n    the Logistic Regression as a matrix of type CV_32F.\n     */\n    CV_WRAP virtual Mat get_learnt_thetas() const = 0;\n\n    /** @brief Creates empty model.\n\n    Creates Logistic Regression model with parameters given.\n     */\n    CV_WRAP static Ptr<LogisticRegression> create();\n};\n\n/****************************************************************************************\\\n*                           Auxilary functions declarations                              *\n\\****************************************************************************************/\n\n/** @brief Generates _sample_ from multivariate normal distribution\n\n@param mean an average row vector\n@param cov symmetric covariation matrix\n@param nsamples returned samples count\n@param samples returned samples array\n*/\nCV_EXPORTS void randMVNormal( InputArray mean, InputArray cov, int nsamples, OutputArray samples);\n\n/** @brief Creates test set */\nCV_EXPORTS void createConcentricSpheresTestSet( int nsamples, int nfeatures, int nclasses,\n                                                OutputArray samples, OutputArray responses);\n\n//! @} ml\n\n}\n}\n\n#endif // __cplusplus\n#endif // __OPENCV_ML_HPP__\n\n/* End of file. */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/objdetect/detection_based_tracker.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OBJDETECT_DBT_HPP__\n#define __OPENCV_OBJDETECT_DBT_HPP__\n\n// After this condition removal update blacklist for bindings: modules/python/common.cmake\n#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(__ANDROID__) || \\\n  (defined(__cplusplus) &&  __cplusplus > 201103L) || (defined(_MSC_VER) && _MSC_VER >= 1700)\n\n#include <vector>\n\nnamespace cv\n{\n\n//! @addtogroup objdetect\n//! @{\n\nclass CV_EXPORTS DetectionBasedTracker\n{\n    public:\n        struct Parameters\n        {\n            int maxTrackLifetime;\n            int minDetectionPeriod; //the minimal time between run of the big object detector (on the whole frame) in ms (1000 mean 1 sec), default=0\n\n            Parameters();\n        };\n\n        class IDetector\n        {\n            public:\n                IDetector():\n                    minObjSize(96, 96),\n                    maxObjSize(INT_MAX, INT_MAX),\n                    minNeighbours(2),\n                    scaleFactor(1.1f)\n                {}\n\n                virtual void detect(const cv::Mat& image, std::vector<cv::Rect>& objects) = 0;\n\n                void setMinObjectSize(const cv::Size& min)\n                {\n                    minObjSize = min;\n                }\n                void setMaxObjectSize(const cv::Size& max)\n                {\n                    maxObjSize = max;\n                }\n                cv::Size getMinObjectSize() const\n                {\n                    return minObjSize;\n                }\n                cv::Size getMaxObjectSize() const\n                {\n                    return maxObjSize;\n                }\n                float getScaleFactor()\n                {\n                    return scaleFactor;\n                }\n                void setScaleFactor(float value)\n                {\n                    scaleFactor = value;\n                }\n                int getMinNeighbours()\n                {\n                    return minNeighbours;\n                }\n                void setMinNeighbours(int value)\n                {\n                    minNeighbours = value;\n                }\n                virtual ~IDetector() {}\n\n            protected:\n                cv::Size minObjSize;\n                cv::Size maxObjSize;\n                int minNeighbours;\n                float scaleFactor;\n        };\n\n        DetectionBasedTracker(cv::Ptr<IDetector> mainDetector, cv::Ptr<IDetector> trackingDetector, const Parameters& params);\n        virtual ~DetectionBasedTracker();\n\n        virtual bool run();\n        virtual void stop();\n        virtual void resetTracking();\n\n        virtual void process(const cv::Mat& imageGray);\n\n        bool setParameters(const Parameters& params);\n        const Parameters& getParameters() const;\n\n\n        typedef std::pair<cv::Rect, int> Object;\n        virtual void getObjects(std::vector<cv::Rect>& result) const;\n        virtual void getObjects(std::vector<Object>& result) const;\n\n        enum ObjectStatus\n        {\n            DETECTED_NOT_SHOWN_YET,\n            DETECTED,\n            DETECTED_TEMPORARY_LOST,\n            WRONG_OBJECT\n        };\n        struct ExtObject\n        {\n            int id;\n            cv::Rect location;\n            ObjectStatus status;\n            ExtObject(int _id, cv::Rect _location, ObjectStatus _status)\n                :id(_id), location(_location), status(_status)\n            {\n            }\n        };\n        virtual void getObjects(std::vector<ExtObject>& result) const;\n\n\n        virtual int addObject(const cv::Rect& location); //returns id of the new object\n\n    protected:\n        class SeparateDetectionWork;\n        cv::Ptr<SeparateDetectionWork> separateDetectionWork;\n        friend void* workcycleObjectDetectorFunction(void* p);\n\n        struct InnerParameters\n        {\n            int numLastPositionsToTrack;\n            int numStepsToWaitBeforeFirstShow;\n            int numStepsToTrackWithoutDetectingIfObjectHasNotBeenShown;\n            int numStepsToShowWithoutDetecting;\n\n            float coeffTrackingWindowSize;\n            float coeffObjectSizeToTrack;\n            float coeffObjectSpeedUsingInPrediction;\n\n            InnerParameters();\n        };\n        Parameters parameters;\n        InnerParameters innerParameters;\n\n        struct TrackedObject\n        {\n            typedef std::vector<cv::Rect> PositionsVector;\n\n            PositionsVector lastPositions;\n\n            int numDetectedFrames;\n            int numFramesNotDetected;\n            int id;\n\n            TrackedObject(const cv::Rect& rect):numDetectedFrames(1), numFramesNotDetected(0)\n            {\n                lastPositions.push_back(rect);\n                id=getNextId();\n            };\n\n            static int getNextId()\n            {\n                static int _id=0;\n                return _id++;\n            }\n        };\n\n        int numTrackedSteps;\n        std::vector<TrackedObject> trackedObjects;\n\n        std::vector<float> weightsPositionsSmoothing;\n        std::vector<float> weightsSizesSmoothing;\n\n        cv::Ptr<IDetector> cascadeForTracking;\n\n        void updateTrackedObjects(const std::vector<cv::Rect>& detectedObjects);\n        cv::Rect calcTrackedObjectPositionToShow(int i) const;\n        cv::Rect calcTrackedObjectPositionToShow(int i, ObjectStatus& status) const;\n        void detectInRegion(const cv::Mat& img, const cv::Rect& r, std::vector<cv::Rect>& detectedObjectsInRegions);\n};\n\n//! @} objdetect\n\n} //end of cv namespace\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/objdetect/objdetect.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/objdetect.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/objdetect/objdetect_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OBJDETECT_C_H__\n#define __OPENCV_OBJDETECT_C_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\n#include <deque>\n#include <vector>\n\nextern \"C\" {\n#endif\n\n/** @addtogroup objdetect_c\n  @{\n  */\n\n/****************************************************************************************\\\n*                         Haar-like Object Detection functions                           *\n\\****************************************************************************************/\n\n#define CV_HAAR_MAGIC_VAL    0x42500000\n#define CV_TYPE_NAME_HAAR    \"opencv-haar-classifier\"\n\n#define CV_IS_HAAR_CLASSIFIER( haar )                                                    \\\n    ((haar) != NULL &&                                                                   \\\n    (((const CvHaarClassifierCascade*)(haar))->flags & CV_MAGIC_MASK)==CV_HAAR_MAGIC_VAL)\n\n#define CV_HAAR_FEATURE_MAX  3\n\ntypedef struct CvHaarFeature\n{\n    int tilted;\n    struct\n    {\n        CvRect r;\n        float weight;\n    } rect[CV_HAAR_FEATURE_MAX];\n} CvHaarFeature;\n\ntypedef struct CvHaarClassifier\n{\n    int count;\n    CvHaarFeature* haar_feature;\n    float* threshold;\n    int* left;\n    int* right;\n    float* alpha;\n} CvHaarClassifier;\n\ntypedef struct CvHaarStageClassifier\n{\n    int  count;\n    float threshold;\n    CvHaarClassifier* classifier;\n\n    int next;\n    int child;\n    int parent;\n} CvHaarStageClassifier;\n\ntypedef struct CvHidHaarClassifierCascade CvHidHaarClassifierCascade;\n\ntypedef struct CvHaarClassifierCascade\n{\n    int  flags;\n    int  count;\n    CvSize orig_window_size;\n    CvSize real_window_size;\n    double scale;\n    CvHaarStageClassifier* stage_classifier;\n    CvHidHaarClassifierCascade* hid_cascade;\n} CvHaarClassifierCascade;\n\ntypedef struct CvAvgComp\n{\n    CvRect rect;\n    int neighbors;\n} CvAvgComp;\n\n/* Loads haar classifier cascade from a directory.\n   It is obsolete: convert your cascade to xml and use cvLoad instead */\nCVAPI(CvHaarClassifierCascade*) cvLoadHaarClassifierCascade(\n                    const char* directory, CvSize orig_window_size);\n\nCVAPI(void) cvReleaseHaarClassifierCascade( CvHaarClassifierCascade** cascade );\n\n#define CV_HAAR_DO_CANNY_PRUNING    1\n#define CV_HAAR_SCALE_IMAGE         2\n#define CV_HAAR_FIND_BIGGEST_OBJECT 4\n#define CV_HAAR_DO_ROUGH_SEARCH     8\n\nCVAPI(CvSeq*) cvHaarDetectObjects( const CvArr* image,\n                     CvHaarClassifierCascade* cascade, CvMemStorage* storage,\n                     double scale_factor CV_DEFAULT(1.1),\n                     int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),\n                     CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)));\n\n/* sets images for haar classifier cascade */\nCVAPI(void) cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* cascade,\n                                                const CvArr* sum, const CvArr* sqsum,\n                                                const CvArr* tilted_sum, double scale );\n\n/* runs the cascade on the specified window */\nCVAPI(int) cvRunHaarClassifierCascade( const CvHaarClassifierCascade* cascade,\n                                       CvPoint pt, int start_stage CV_DEFAULT(0));\n\n/** @} objdetect_c */\n\n#ifdef __cplusplus\n}\n\nCV_EXPORTS CvSeq* cvHaarDetectObjectsForROC( const CvArr* image,\n                     CvHaarClassifierCascade* cascade, CvMemStorage* storage,\n                     std::vector<int>& rejectLevels, std::vector<double>& levelWeightds,\n                     double scale_factor = 1.1,\n                     int min_neighbors = 3, int flags = 0,\n                     CvSize min_size = cvSize(0, 0), CvSize max_size = cvSize(0, 0),\n                     bool outputRejectLevels = false );\n\n#endif\n\n#endif /* __OPENCV_OBJDETECT_C_H__ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/objdetect.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OBJDETECT_HPP__\n#define __OPENCV_OBJDETECT_HPP__\n\n#include \"opencv2/core.hpp\"\n\n/**\n@defgroup objdetect Object Detection\n\nHaar Feature-based Cascade Classifier for Object Detection\n----------------------------------------------------------\n\nThe object detector described below has been initially proposed by Paul Viola @cite Viola01 and\nimproved by Rainer Lienhart @cite Lienhart02 .\n\nFirst, a classifier (namely a *cascade of boosted classifiers working with haar-like features*) is\ntrained with a few hundred sample views of a particular object (i.e., a face or a car), called\npositive examples, that are scaled to the same size (say, 20x20), and negative examples - arbitrary\nimages of the same size.\n\nAfter a classifier is trained, it can be applied to a region of interest (of the same size as used\nduring the training) in an input image. The classifier outputs a \"1\" if the region is likely to show\nthe object (i.e., face/car), and \"0\" otherwise. To search for the object in the whole image one can\nmove the search window across the image and check every location using the classifier. The\nclassifier is designed so that it can be easily \"resized\" in order to be able to find the objects of\ninterest at different sizes, which is more efficient than resizing the image itself. So, to find an\nobject of an unknown size in the image the scan procedure should be done several times at different\nscales.\n\nThe word \"cascade\" in the classifier name means that the resultant classifier consists of several\nsimpler classifiers (*stages*) that are applied subsequently to a region of interest until at some\nstage the candidate is rejected or all the stages are passed. The word \"boosted\" means that the\nclassifiers at every stage of the cascade are complex themselves and they are built out of basic\nclassifiers using one of four different boosting techniques (weighted voting). Currently Discrete\nAdaboost, Real Adaboost, Gentle Adaboost and Logitboost are supported. The basic classifiers are\ndecision-tree classifiers with at least 2 leaves. Haar-like features are the input to the basic\nclassifiers, and are calculated as described below. The current algorithm uses the following\nHaar-like features:\n\n![image](pics/haarfeatures.png)\n\nThe feature used in a particular classifier is specified by its shape (1a, 2b etc.), position within\nthe region of interest and the scale (this scale is not the same as the scale used at the detection\nstage, though these two scales are multiplied). For example, in the case of the third line feature\n(2c) the response is calculated as the difference between the sum of image pixels under the\nrectangle covering the whole feature (including the two white stripes and the black stripe in the\nmiddle) and the sum of the image pixels under the black stripe multiplied by 3 in order to\ncompensate for the differences in the size of areas. The sums of pixel values over a rectangular\nregions are calculated rapidly using integral images (see below and the integral description).\n\nTo see the object detector at work, have a look at the facedetect demo:\n<https://github.com/Itseez/opencv/tree/master/samples/cpp/dbt_face_detection.cpp>\n\nThe following reference is for the detection part only. There is a separate application called\nopencv_traincascade that can train a cascade of boosted classifiers from a set of samples.\n\n@note In the new C++ interface it is also possible to use LBP (local binary pattern) features in\naddition to Haar-like features. .. [Viola01] Paul Viola and Michael J. Jones. Rapid Object Detection\nusing a Boosted Cascade of Simple Features. IEEE CVPR, 2001. The paper is available online at\n<http://research.microsoft.com/en-us/um/people/viola/Pubs/Detect/violaJones_CVPR2001.pdf>\n\n@{\n    @defgroup objdetect_c C API\n@}\n */\n\ntypedef struct CvHaarClassifierCascade CvHaarClassifierCascade;\n\nnamespace cv\n{\n\n//! @addtogroup objdetect\n//! @{\n\n///////////////////////////// Object Detection ////////////////////////////\n\n//! class for grouping object candidates, detected by Cascade Classifier, HOG etc.\n//! instance of the class is to be passed to cv::partition (see cxoperations.hpp)\nclass CV_EXPORTS SimilarRects\n{\npublic:\n    SimilarRects(double _eps) : eps(_eps) {}\n    inline bool operator()(const Rect& r1, const Rect& r2) const\n    {\n        double delta = eps*(std::min(r1.width, r2.width) + std::min(r1.height, r2.height))*0.5;\n        return std::abs(r1.x - r2.x) <= delta &&\n            std::abs(r1.y - r2.y) <= delta &&\n            std::abs(r1.x + r1.width - r2.x - r2.width) <= delta &&\n            std::abs(r1.y + r1.height - r2.y - r2.height) <= delta;\n    }\n    double eps;\n};\n\n/** @brief Groups the object candidate rectangles.\n\n@param rectList Input/output vector of rectangles. Output vector includes retained and grouped\nrectangles. (The Python list is not modified in place.)\n@param groupThreshold Minimum possible number of rectangles minus 1. The threshold is used in a\ngroup of rectangles to retain it.\n@param eps Relative difference between sides of the rectangles to merge them into a group.\n\nThe function is a wrapper for the generic function partition . It clusters all the input rectangles\nusing the rectangle equivalence criteria that combines rectangles with similar sizes and similar\nlocations. The similarity is defined by eps. When eps=0 , no clustering is done at all. If\n\\f$\\texttt{eps}\\rightarrow +\\inf\\f$ , all the rectangles are put in one cluster. Then, the small\nclusters containing less than or equal to groupThreshold rectangles are rejected. In each other\ncluster, the average rectangle is computed and put into the output rectangle list.\n */\nCV_EXPORTS   void groupRectangles(std::vector<Rect>& rectList, int groupThreshold, double eps = 0.2);\n/** @overload */\nCV_EXPORTS_W void groupRectangles(CV_IN_OUT std::vector<Rect>& rectList, CV_OUT std::vector<int>& weights,\n                                  int groupThreshold, double eps = 0.2);\n/** @overload */\nCV_EXPORTS   void groupRectangles(std::vector<Rect>& rectList, int groupThreshold,\n                                  double eps, std::vector<int>* weights, std::vector<double>* levelWeights );\n/** @overload */\nCV_EXPORTS   void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& rejectLevels,\n                                  std::vector<double>& levelWeights, int groupThreshold, double eps = 0.2);\n/** @overload */\nCV_EXPORTS   void groupRectangles_meanshift(std::vector<Rect>& rectList, std::vector<double>& foundWeights,\n                                            std::vector<double>& foundScales,\n                                            double detectThreshold = 0.0, Size winDetSize = Size(64, 128));\n\ntemplate<> CV_EXPORTS void DefaultDeleter<CvHaarClassifierCascade>::operator ()(CvHaarClassifierCascade* obj) const;\n\nenum { CASCADE_DO_CANNY_PRUNING    = 1,\n       CASCADE_SCALE_IMAGE         = 2,\n       CASCADE_FIND_BIGGEST_OBJECT = 4,\n       CASCADE_DO_ROUGH_SEARCH     = 8\n     };\n\nclass CV_EXPORTS_W BaseCascadeClassifier : public Algorithm\n{\npublic:\n    virtual ~BaseCascadeClassifier();\n    virtual bool empty() const = 0;\n    virtual bool load( const String& filename ) = 0;\n    virtual void detectMultiScale( InputArray image,\n                           CV_OUT std::vector<Rect>& objects,\n                           double scaleFactor,\n                           int minNeighbors, int flags,\n                           Size minSize, Size maxSize ) = 0;\n\n    virtual void detectMultiScale( InputArray image,\n                           CV_OUT std::vector<Rect>& objects,\n                           CV_OUT std::vector<int>& numDetections,\n                           double scaleFactor,\n                           int minNeighbors, int flags,\n                           Size minSize, Size maxSize ) = 0;\n\n    virtual void detectMultiScale( InputArray image,\n                                   CV_OUT std::vector<Rect>& objects,\n                                   CV_OUT std::vector<int>& rejectLevels,\n                                   CV_OUT std::vector<double>& levelWeights,\n                                   double scaleFactor,\n                                   int minNeighbors, int flags,\n                                   Size minSize, Size maxSize,\n                                   bool outputRejectLevels ) = 0;\n\n    virtual bool isOldFormatCascade() const = 0;\n    virtual Size getOriginalWindowSize() const = 0;\n    virtual int getFeatureType() const = 0;\n    virtual void* getOldCascade() = 0;\n\n    class CV_EXPORTS MaskGenerator\n    {\n    public:\n        virtual ~MaskGenerator() {}\n        virtual Mat generateMask(const Mat& src)=0;\n        virtual void initializeMask(const Mat& /*src*/) { }\n    };\n    virtual void setMaskGenerator(const Ptr<MaskGenerator>& maskGenerator) = 0;\n    virtual Ptr<MaskGenerator> getMaskGenerator() = 0;\n};\n\n/** @brief Cascade classifier class for object detection.\n */\nclass CV_EXPORTS_W CascadeClassifier\n{\npublic:\n    CV_WRAP CascadeClassifier();\n    /** @brief Loads a classifier from a file.\n\n    @param filename Name of the file from which the classifier is loaded.\n     */\n    CV_WRAP CascadeClassifier(const String& filename);\n    ~CascadeClassifier();\n    /** @brief Checks whether the classifier has been loaded.\n    */\n    CV_WRAP bool empty() const;\n    /** @brief Loads a classifier from a file.\n\n    @param filename Name of the file from which the classifier is loaded. The file may contain an old\n    HAAR classifier trained by the haartraining application or a new cascade classifier trained by the\n    traincascade application.\n     */\n    CV_WRAP bool load( const String& filename );\n    /** @brief Reads a classifier from a FileStorage node.\n\n    @note The file may contain a new cascade classifier (trained traincascade application) only.\n     */\n    CV_WRAP bool read( const FileNode& node );\n\n    /** @brief Detects objects of different sizes in the input image. The detected objects are returned as a list\n    of rectangles.\n\n    @param image Matrix of the type CV_8U containing an image where objects are detected.\n    @param objects Vector of rectangles where each rectangle contains the detected object, the\n    rectangles may be partially outside the original image.\n    @param scaleFactor Parameter specifying how much the image size is reduced at each image scale.\n    @param minNeighbors Parameter specifying how many neighbors each candidate rectangle should have\n    to retain it.\n    @param flags Parameter with the same meaning for an old cascade as in the function\n    cvHaarDetectObjects. It is not used for a new cascade.\n    @param minSize Minimum possible object size. Objects smaller than that are ignored.\n    @param maxSize Maximum possible object size. Objects larger than that are ignored.\n\n    The function is parallelized with the TBB library.\n\n    @note\n       -   (Python) A face detection example using cascade classifiers can be found at\n            opencv_source_code/samples/python/facedetect.py\n    */\n    CV_WRAP void detectMultiScale( InputArray image,\n                          CV_OUT std::vector<Rect>& objects,\n                          double scaleFactor = 1.1,\n                          int minNeighbors = 3, int flags = 0,\n                          Size minSize = Size(),\n                          Size maxSize = Size() );\n\n    /** @overload\n    @param image Matrix of the type CV_8U containing an image where objects are detected.\n    @param objects Vector of rectangles where each rectangle contains the detected object, the\n    rectangles may be partially outside the original image.\n    @param numDetections Vector of detection numbers for the corresponding objects. An object's number\n    of detections is the number of neighboring positively classified rectangles that were joined\n    together to form the object.\n    @param scaleFactor Parameter specifying how much the image size is reduced at each image scale.\n    @param minNeighbors Parameter specifying how many neighbors each candidate rectangle should have\n    to retain it.\n    @param flags Parameter with the same meaning for an old cascade as in the function\n    cvHaarDetectObjects. It is not used for a new cascade.\n    @param minSize Minimum possible object size. Objects smaller than that are ignored.\n    @param maxSize Maximum possible object size. Objects larger than that are ignored.\n    */\n    CV_WRAP_AS(detectMultiScale2) void detectMultiScale( InputArray image,\n                          CV_OUT std::vector<Rect>& objects,\n                          CV_OUT std::vector<int>& numDetections,\n                          double scaleFactor=1.1,\n                          int minNeighbors=3, int flags=0,\n                          Size minSize=Size(),\n                          Size maxSize=Size() );\n\n    /** @overload\n    if `outputRejectLevels` is `true` returns `rejectLevels` and `levelWeights`\n    */\n    CV_WRAP_AS(detectMultiScale3) void detectMultiScale( InputArray image,\n                                  CV_OUT std::vector<Rect>& objects,\n                                  CV_OUT std::vector<int>& rejectLevels,\n                                  CV_OUT std::vector<double>& levelWeights,\n                                  double scaleFactor = 1.1,\n                                  int minNeighbors = 3, int flags = 0,\n                                  Size minSize = Size(),\n                                  Size maxSize = Size(),\n                                  bool outputRejectLevels = false );\n\n    CV_WRAP bool isOldFormatCascade() const;\n    CV_WRAP Size getOriginalWindowSize() const;\n    CV_WRAP int getFeatureType() const;\n    void* getOldCascade();\n\n    CV_WRAP static bool convert(const String& oldcascade, const String& newcascade);\n\n    void setMaskGenerator(const Ptr<BaseCascadeClassifier::MaskGenerator>& maskGenerator);\n    Ptr<BaseCascadeClassifier::MaskGenerator> getMaskGenerator();\n\n    Ptr<BaseCascadeClassifier> cc;\n};\n\nCV_EXPORTS Ptr<BaseCascadeClassifier::MaskGenerator> createFaceDetectionMaskGenerator();\n\n//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////\n\n//! struct for detection region of interest (ROI)\nstruct DetectionROI\n{\n   //! scale(size) of the bounding box\n   double scale;\n   //! set of requrested locations to be evaluated\n   std::vector<cv::Point> locations;\n   //! vector that will contain confidence values for each location\n   std::vector<double> confidences;\n};\n\nstruct CV_EXPORTS_W HOGDescriptor\n{\npublic:\n    enum { L2Hys = 0\n         };\n    enum { DEFAULT_NLEVELS = 64\n         };\n\n    CV_WRAP HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8),\n        cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),\n        histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true),\n        free_coef(-1.f), nlevels(HOGDescriptor::DEFAULT_NLEVELS), signedGradient(false)\n    {}\n\n    CV_WRAP HOGDescriptor(Size _winSize, Size _blockSize, Size _blockStride,\n                  Size _cellSize, int _nbins, int _derivAperture=1, double _winSigma=-1,\n                  int _histogramNormType=HOGDescriptor::L2Hys,\n                  double _L2HysThreshold=0.2, bool _gammaCorrection=false,\n                  int _nlevels=HOGDescriptor::DEFAULT_NLEVELS, bool _signedGradient=false)\n    : winSize(_winSize), blockSize(_blockSize), blockStride(_blockStride), cellSize(_cellSize),\n    nbins(_nbins), derivAperture(_derivAperture), winSigma(_winSigma),\n    histogramNormType(_histogramNormType), L2HysThreshold(_L2HysThreshold),\n    gammaCorrection(_gammaCorrection), free_coef(-1.f), nlevels(_nlevels), signedGradient(_signedGradient)\n    {}\n\n    CV_WRAP HOGDescriptor(const String& filename)\n    {\n        load(filename);\n    }\n\n    HOGDescriptor(const HOGDescriptor& d)\n    {\n        d.copyTo(*this);\n    }\n\n    virtual ~HOGDescriptor() {}\n\n    CV_WRAP size_t getDescriptorSize() const;\n    CV_WRAP bool checkDetectorSize() const;\n    CV_WRAP double getWinSigma() const;\n\n    CV_WRAP virtual void setSVMDetector(InputArray _svmdetector);\n\n    virtual bool read(FileNode& fn);\n    virtual void write(FileStorage& fs, const String& objname) const;\n\n    CV_WRAP virtual bool load(const String& filename, const String& objname = String());\n    CV_WRAP virtual void save(const String& filename, const String& objname = String()) const;\n    virtual void copyTo(HOGDescriptor& c) const;\n\n    CV_WRAP virtual void compute(InputArray img,\n                         CV_OUT std::vector<float>& descriptors,\n                         Size winStride = Size(), Size padding = Size(),\n                         const std::vector<Point>& locations = std::vector<Point>()) const;\n\n    //! with found weights output\n    CV_WRAP virtual void detect(const Mat& img, CV_OUT std::vector<Point>& foundLocations,\n                        CV_OUT std::vector<double>& weights,\n                        double hitThreshold = 0, Size winStride = Size(),\n                        Size padding = Size(),\n                        const std::vector<Point>& searchLocations = std::vector<Point>()) const;\n    //! without found weights output\n    virtual void detect(const Mat& img, CV_OUT std::vector<Point>& foundLocations,\n                        double hitThreshold = 0, Size winStride = Size(),\n                        Size padding = Size(),\n                        const std::vector<Point>& searchLocations=std::vector<Point>()) const;\n\n    //! with result weights output\n    CV_WRAP virtual void detectMultiScale(InputArray img, CV_OUT std::vector<Rect>& foundLocations,\n                                  CV_OUT std::vector<double>& foundWeights, double hitThreshold = 0,\n                                  Size winStride = Size(), Size padding = Size(), double scale = 1.05,\n                                  double finalThreshold = 2.0,bool useMeanshiftGrouping = false) const;\n    //! without found weights output\n    virtual void detectMultiScale(InputArray img, CV_OUT std::vector<Rect>& foundLocations,\n                                  double hitThreshold = 0, Size winStride = Size(),\n                                  Size padding = Size(), double scale = 1.05,\n                                  double finalThreshold = 2.0, bool useMeanshiftGrouping = false) const;\n\n    CV_WRAP virtual void computeGradient(const Mat& img, CV_OUT Mat& grad, CV_OUT Mat& angleOfs,\n                                 Size paddingTL = Size(), Size paddingBR = Size()) const;\n\n    CV_WRAP static std::vector<float> getDefaultPeopleDetector();\n    CV_WRAP static std::vector<float> getDaimlerPeopleDetector();\n\n    CV_PROP Size winSize;\n    CV_PROP Size blockSize;\n    CV_PROP Size blockStride;\n    CV_PROP Size cellSize;\n    CV_PROP int nbins;\n    CV_PROP int derivAperture;\n    CV_PROP double winSigma;\n    CV_PROP int histogramNormType;\n    CV_PROP double L2HysThreshold;\n    CV_PROP bool gammaCorrection;\n    CV_PROP std::vector<float> svmDetector;\n    UMat oclSvmDetector;\n    float free_coef;\n    CV_PROP int nlevels;\n    CV_PROP bool signedGradient;\n\n\n    //! evaluate specified ROI and return confidence value for each location\n    virtual void detectROI(const cv::Mat& img, const std::vector<cv::Point> &locations,\n                                   CV_OUT std::vector<cv::Point>& foundLocations, CV_OUT std::vector<double>& confidences,\n                                   double hitThreshold = 0, cv::Size winStride = Size(),\n                                   cv::Size padding = Size()) const;\n\n    //! evaluate specified ROI and return confidence value for each location in multiple scales\n    virtual void detectMultiScaleROI(const cv::Mat& img,\n                                                       CV_OUT std::vector<cv::Rect>& foundLocations,\n                                                       std::vector<DetectionROI>& locations,\n                                                       double hitThreshold = 0,\n                                                       int groupThreshold = 0) const;\n\n    //! read/parse Dalal's alt model file\n    void readALTModel(String modelfile);\n    void groupRectangles(std::vector<cv::Rect>& rectList, std::vector<double>& weights, int groupThreshold, double eps) const;\n};\n\n//! @} objdetect\n\n}\n\n#include \"opencv2/objdetect/detection_based_tracker.hpp\"\n\n#ifndef DISABLE_OPENCV_24_COMPATIBILITY\n#include \"opencv2/objdetect/objdetect_c.h\"\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/opencv.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_ALL_HPP__\n#define __OPENCV_ALL_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/imgproc.hpp\"\n#include \"opencv2/photo.hpp\"\n#include \"opencv2/video.hpp\"\n#include \"opencv2/features2d.hpp\"\n#include \"opencv2/objdetect.hpp\"\n#include \"opencv2/calib3d.hpp\"\n#include \"opencv2/imgcodecs.hpp\"\n#include \"opencv2/videoio.hpp\"\n#include \"opencv2/highgui.hpp\"\n#include \"opencv2/ml.hpp\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/opencv_modules.hpp",
    "content": "/*\n *      ** File generated automatically, do not modify **\n *\n * This file defines the list of modules available in current build configuration\n *\n *\n*/\n\n#define HAVE_OPENCV_CALIB3D\n#define HAVE_OPENCV_CORE\n#define HAVE_OPENCV_FEATURES2D\n#define HAVE_OPENCV_FLANN\n#define HAVE_OPENCV_HIGHGUI\n#define HAVE_OPENCV_IMGCODECS\n#define HAVE_OPENCV_IMGPROC\n#define HAVE_OPENCV_ML\n#define HAVE_OPENCV_OBJDETECT\n#define HAVE_OPENCV_PHOTO\n#define HAVE_OPENCV_SHAPE\n#define HAVE_OPENCV_STITCHING\n#define HAVE_OPENCV_SUPERRES\n#define HAVE_OPENCV_VIDEO\n#define HAVE_OPENCV_VIDEOIO\n#define HAVE_OPENCV_VIDEOSTAB\n#define HAVE_OPENCV_WORLD\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/photo/cuda.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_PHOTO_CUDA_HPP__\n#define __OPENCV_PHOTO_CUDA_HPP__\n\n#include \"opencv2/core/cuda.hpp\"\n\nnamespace cv { namespace cuda {\n\n//! @addtogroup photo_denoise\n//! @{\n\n/** @brief Performs pure non local means denoising without any simplification, and thus it is not fast.\n\n@param src Source image. Supports only CV_8UC1, CV_8UC2 and CV_8UC3.\n@param dst Destination image.\n@param h Filter sigma regulating filter strength for color.\n@param search_window Size of search window.\n@param block_size Size of block used for computing weights.\n@param borderMode Border type. See borderInterpolate for details. BORDER_REFLECT101 ,\nBORDER_REPLICATE , BORDER_CONSTANT , BORDER_REFLECT and BORDER_WRAP are supported for now.\n@param stream Stream for the asynchronous version.\n\n@sa\n   fastNlMeansDenoising\n */\nCV_EXPORTS void nonLocalMeans(InputArray src, OutputArray dst,\n                              float h,\n                              int search_window = 21,\n                              int block_size = 7,\n                              int borderMode = BORDER_DEFAULT,\n                              Stream& stream = Stream::Null());\n\n/** @brief Perform image denoising using Non-local Means Denoising algorithm\n<http://www.ipol.im/pub/algo/bcm_non_local_means_denoising> with several computational\noptimizations. Noise expected to be a gaussian white noise\n\n@param src Input 8-bit 1-channel, 2-channel or 3-channel image.\n@param dst Output image with the same size and type as src .\n@param h Parameter regulating filter strength. Big h value perfectly removes noise but also\nremoves image details, smaller h value preserves details but also preserves some noise\n@param search_window Size in pixels of the window that is used to compute weighted average for\ngiven pixel. Should be odd. Affect performance linearly: greater search_window - greater\ndenoising time. Recommended value 21 pixels\n@param block_size Size in pixels of the template patch that is used to compute weights. Should be\nodd. Recommended value 7 pixels\n@param stream Stream for the asynchronous invocations.\n\nThis function expected to be applied to grayscale images. For colored images look at\nFastNonLocalMeansDenoising::labMethod.\n\n@sa\n   fastNlMeansDenoising\n */\nCV_EXPORTS void fastNlMeansDenoising(InputArray src, OutputArray dst,\n                                     float h,\n                                     int search_window = 21,\n                                     int block_size = 7,\n                                     Stream& stream = Stream::Null());\n\n/** @brief Modification of fastNlMeansDenoising function for colored images\n\n@param src Input 8-bit 3-channel image.\n@param dst Output image with the same size and type as src .\n@param h_luminance Parameter regulating filter strength. Big h value perfectly removes noise but\nalso removes image details, smaller h value preserves details but also preserves some noise\n@param photo_render float The same as h but for color components. For most images value equals 10 will be\nenough to remove colored noise and do not distort colors\n@param search_window Size in pixels of the window that is used to compute weighted average for\ngiven pixel. Should be odd. Affect performance linearly: greater search_window - greater\ndenoising time. Recommended value 21 pixels\n@param block_size Size in pixels of the template patch that is used to compute weights. Should be\nodd. Recommended value 7 pixels\n@param stream Stream for the asynchronous invocations.\n\nThe function converts image to CIELAB colorspace and then separately denoise L and AB components\nwith given h parameters using FastNonLocalMeansDenoising::simpleMethod function.\n\n@sa\n   fastNlMeansDenoisingColored\n */\nCV_EXPORTS void fastNlMeansDenoisingColored(InputArray src, OutputArray dst,\n                                            float h_luminance, float photo_render,\n                                            int search_window = 21,\n                                            int block_size = 7,\n                                            Stream& stream = Stream::Null());\n\n//! @} photo\n\n}} // namespace cv { namespace cuda {\n\n#endif /* __OPENCV_PHOTO_CUDA_HPP__ */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/photo/photo.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/photo.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/photo/photo_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_PHOTO_C_H__\n#define __OPENCV_PHOTO_C_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @addtogroup photo_c\n  @{\n  */\n\n/* Inpainting algorithms */\nenum InpaintingModes\n{\n    CV_INPAINT_NS      =0,\n    CV_INPAINT_TELEA   =1\n};\n\n\n/* Inpaints the selected region in the image */\nCVAPI(void) cvInpaint( const CvArr* src, const CvArr* inpaint_mask,\n                       CvArr* dst, double inpaintRange, int flags );\n\n/** @} */\n\n#ifdef __cplusplus\n} //extern \"C\"\n#endif\n\n#endif //__OPENCV_PHOTO_C_H__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/photo.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_PHOTO_HPP__\n#define __OPENCV_PHOTO_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/imgproc.hpp\"\n\n/**\n@defgroup photo Computational Photography\n@{\n    @defgroup photo_denoise Denoising\n    @defgroup photo_hdr HDR imaging\n\nThis section describes high dynamic range imaging algorithms namely tonemapping, exposure alignment,\ncamera calibration with multiple exposures and exposure fusion.\n\n    @defgroup photo_clone Seamless Cloning\n    @defgroup photo_render Non-Photorealistic Rendering\n    @defgroup photo_c C API\n@}\n  */\n\nnamespace cv\n{\n\n//! @addtogroup photo\n//! @{\n\n//! the inpainting algorithm\nenum\n{\n    INPAINT_NS    = 0, // Navier-Stokes algorithm\n    INPAINT_TELEA = 1 // A. Telea algorithm\n};\n\nenum\n{\n    NORMAL_CLONE = 1,\n    MIXED_CLONE  = 2,\n    MONOCHROME_TRANSFER = 3\n};\n\nenum\n{\n    RECURS_FILTER = 1,\n    NORMCONV_FILTER = 2\n};\n\n/** @brief Restores the selected region in an image using the region neighborhood.\n\n@param src Input 8-bit 1-channel or 3-channel image.\n@param inpaintMask Inpainting mask, 8-bit 1-channel image. Non-zero pixels indicate the area that\nneeds to be inpainted.\n@param dst Output image with the same size and type as src .\n@param inpaintRadius Radius of a circular neighborhood of each point inpainted that is considered\nby the algorithm.\n@param flags Inpainting method that could be one of the following:\n-   **INPAINT_NS** Navier-Stokes based method [Navier01]\n-   **INPAINT_TELEA** Method by Alexandru Telea @cite Telea04 .\n\nThe function reconstructs the selected image area from the pixel near the area boundary. The\nfunction may be used to remove dust and scratches from a scanned photo, or to remove undesirable\nobjects from still images or video. See <http://en.wikipedia.org/wiki/Inpainting> for more details.\n\n@note\n   -   An example using the inpainting technique can be found at\n        opencv_source_code/samples/cpp/inpaint.cpp\n    -   (Python) An example using the inpainting technique can be found at\n        opencv_source_code/samples/python/inpaint.py\n */\nCV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask,\n        OutputArray dst, double inpaintRadius, int flags );\n\n//! @addtogroup photo_denoise\n//! @{\n\n/** @brief Perform image denoising using Non-local Means Denoising algorithm\n<http://www.ipol.im/pub/algo/bcm_non_local_means_denoising/> with several computational\noptimizations. Noise expected to be a gaussian white noise\n\n@param src Input 8-bit 1-channel, 2-channel, 3-channel or 4-channel image.\n@param dst Output image with the same size and type as src .\n@param templateWindowSize Size in pixels of the template patch that is used to compute weights.\nShould be odd. Recommended value 7 pixels\n@param searchWindowSize Size in pixels of the window that is used to compute weighted average for\ngiven pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater\ndenoising time. Recommended value 21 pixels\n@param h Parameter regulating filter strength. Big h value perfectly removes noise but also\nremoves image details, smaller h value preserves details but also preserves some noise\n\nThis function expected to be applied to grayscale images. For colored images look at\nfastNlMeansDenoisingColored. Advanced usage of this functions can be manual denoising of colored\nimage in different colorspaces. Such approach is used in fastNlMeansDenoisingColored by converting\nimage to CIELAB colorspace and then separately denoise L and AB components with different h\nparameter.\n */\nCV_EXPORTS_W void fastNlMeansDenoising( InputArray src, OutputArray dst, float h = 3,\n        int templateWindowSize = 7, int searchWindowSize = 21);\n\n/** @brief Perform image denoising using Non-local Means Denoising algorithm\n<http://www.ipol.im/pub/algo/bcm_non_local_means_denoising/> with several computational\noptimizations. Noise expected to be a gaussian white noise\n\n@param src Input 8-bit or 16-bit (only with NORM_L1) 1-channel,\n2-channel, 3-channel or 4-channel image.\n@param dst Output image with the same size and type as src .\n@param templateWindowSize Size in pixels of the template patch that is used to compute weights.\nShould be odd. Recommended value 7 pixels\n@param searchWindowSize Size in pixels of the window that is used to compute weighted average for\ngiven pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater\ndenoising time. Recommended value 21 pixels\n@param h Array of parameters regulating filter strength, either one\nparameter applied to all channels or one per channel in dst. Big h value\nperfectly removes noise but also removes image details, smaller h\nvalue preserves details but also preserves some noise\n@param normType Type of norm used for weight calculation. Can be either NORM_L2 or NORM_L1\n\nThis function expected to be applied to grayscale images. For colored images look at\nfastNlMeansDenoisingColored. Advanced usage of this functions can be manual denoising of colored\nimage in different colorspaces. Such approach is used in fastNlMeansDenoisingColored by converting\nimage to CIELAB colorspace and then separately denoise L and AB components with different h\nparameter.\n */\nCV_EXPORTS_W void fastNlMeansDenoising( InputArray src, OutputArray dst,\n                                        const std::vector<float>& h,\n                                        int templateWindowSize = 7, int searchWindowSize = 21,\n                                        int normType = NORM_L2);\n\n/** @brief Modification of fastNlMeansDenoising function for colored images\n\n@param src Input 8-bit 3-channel image.\n@param dst Output image with the same size and type as src .\n@param templateWindowSize Size in pixels of the template patch that is used to compute weights.\nShould be odd. Recommended value 7 pixels\n@param searchWindowSize Size in pixels of the window that is used to compute weighted average for\ngiven pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater\ndenoising time. Recommended value 21 pixels\n@param h Parameter regulating filter strength for luminance component. Bigger h value perfectly\nremoves noise but also removes image details, smaller h value preserves details but also preserves\nsome noise\n@param hColor The same as h but for color components. For most images value equals 10\nwill be enough to remove colored noise and do not distort colors\n\nThe function converts image to CIELAB colorspace and then separately denoise L and AB components\nwith given h parameters using fastNlMeansDenoising function.\n */\nCV_EXPORTS_W void fastNlMeansDenoisingColored( InputArray src, OutputArray dst,\n        float h = 3, float hColor = 3,\n        int templateWindowSize = 7, int searchWindowSize = 21);\n\n/** @brief Modification of fastNlMeansDenoising function for images sequence where consequtive images have been\ncaptured in small period of time. For example video. This version of the function is for grayscale\nimages or for manual manipulation with colorspaces. For more details see\n<http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.131.6394>\n\n@param srcImgs Input 8-bit 1-channel, 2-channel, 3-channel or\n4-channel images sequence. All images should have the same type and\nsize.\n@param imgToDenoiseIndex Target image to denoise index in srcImgs sequence\n@param temporalWindowSize Number of surrounding images to use for target image denoising. Should\nbe odd. Images from imgToDenoiseIndex - temporalWindowSize / 2 to\nimgToDenoiseIndex - temporalWindowSize / 2 from srcImgs will be used to denoise\nsrcImgs[imgToDenoiseIndex] image.\n@param dst Output image with the same size and type as srcImgs images.\n@param templateWindowSize Size in pixels of the template patch that is used to compute weights.\nShould be odd. Recommended value 7 pixels\n@param searchWindowSize Size in pixels of the window that is used to compute weighted average for\ngiven pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater\ndenoising time. Recommended value 21 pixels\n@param h Parameter regulating filter strength. Bigger h value\nperfectly removes noise but also removes image details, smaller h\nvalue preserves details but also preserves some noise\n */\nCV_EXPORTS_W void fastNlMeansDenoisingMulti( InputArrayOfArrays srcImgs, OutputArray dst,\n        int imgToDenoiseIndex, int temporalWindowSize,\n        float h = 3, int templateWindowSize = 7, int searchWindowSize = 21);\n\n/** @brief Modification of fastNlMeansDenoising function for images sequence where consequtive images have been\ncaptured in small period of time. For example video. This version of the function is for grayscale\nimages or for manual manipulation with colorspaces. For more details see\n<http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.131.6394>\n\n@param srcImgs Input 8-bit or 16-bit (only with NORM_L1) 1-channel,\n2-channel, 3-channel or 4-channel images sequence. All images should\nhave the same type and size.\n@param imgToDenoiseIndex Target image to denoise index in srcImgs sequence\n@param temporalWindowSize Number of surrounding images to use for target image denoising. Should\nbe odd. Images from imgToDenoiseIndex - temporalWindowSize / 2 to\nimgToDenoiseIndex - temporalWindowSize / 2 from srcImgs will be used to denoise\nsrcImgs[imgToDenoiseIndex] image.\n@param dst Output image with the same size and type as srcImgs images.\n@param templateWindowSize Size in pixels of the template patch that is used to compute weights.\nShould be odd. Recommended value 7 pixels\n@param searchWindowSize Size in pixels of the window that is used to compute weighted average for\ngiven pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater\ndenoising time. Recommended value 21 pixels\n@param h Array of parameters regulating filter strength, either one\nparameter applied to all channels or one per channel in dst. Big h value\nperfectly removes noise but also removes image details, smaller h\nvalue preserves details but also preserves some noise\n@param normType Type of norm used for weight calculation. Can be either NORM_L2 or NORM_L1\n */\nCV_EXPORTS_W void fastNlMeansDenoisingMulti( InputArrayOfArrays srcImgs, OutputArray dst,\n                                             int imgToDenoiseIndex, int temporalWindowSize,\n                                             const std::vector<float>& h,\n                                             int templateWindowSize = 7, int searchWindowSize = 21,\n                                             int normType = NORM_L2);\n\n/** @brief Modification of fastNlMeansDenoisingMulti function for colored images sequences\n\n@param srcImgs Input 8-bit 3-channel images sequence. All images should have the same type and\nsize.\n@param imgToDenoiseIndex Target image to denoise index in srcImgs sequence\n@param temporalWindowSize Number of surrounding images to use for target image denoising. Should\nbe odd. Images from imgToDenoiseIndex - temporalWindowSize / 2 to\nimgToDenoiseIndex - temporalWindowSize / 2 from srcImgs will be used to denoise\nsrcImgs[imgToDenoiseIndex] image.\n@param dst Output image with the same size and type as srcImgs images.\n@param templateWindowSize Size in pixels of the template patch that is used to compute weights.\nShould be odd. Recommended value 7 pixels\n@param searchWindowSize Size in pixels of the window that is used to compute weighted average for\ngiven pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater\ndenoising time. Recommended value 21 pixels\n@param h Parameter regulating filter strength for luminance component. Bigger h value perfectly\nremoves noise but also removes image details, smaller h value preserves details but also preserves\nsome noise.\n@param hColor The same as h but for color components.\n\nThe function converts images to CIELAB colorspace and then separately denoise L and AB components\nwith given h parameters using fastNlMeansDenoisingMulti function.\n */\nCV_EXPORTS_W void fastNlMeansDenoisingColoredMulti( InputArrayOfArrays srcImgs, OutputArray dst,\n        int imgToDenoiseIndex, int temporalWindowSize,\n        float h = 3, float hColor = 3,\n        int templateWindowSize = 7, int searchWindowSize = 21);\n\n/** @brief Primal-dual algorithm is an algorithm for solving special types of variational problems (that is,\nfinding a function to minimize some functional). As the image denoising, in particular, may be seen\nas the variational problem, primal-dual algorithm then can be used to perform denoising and this is\nexactly what is implemented.\n\nIt should be noted, that this implementation was taken from the July 2013 blog entry\n@cite MA13 , which also contained (slightly more general) ready-to-use source code on Python.\nSubsequently, that code was rewritten on C++ with the usage of openCV by Vadim Pisarevsky at the end\nof July 2013 and finally it was slightly adapted by later authors.\n\nAlthough the thorough discussion and justification of the algorithm involved may be found in\n@cite ChambolleEtAl, it might make sense to skim over it here, following @cite MA13 . To begin\nwith, we consider the 1-byte gray-level images as the functions from the rectangular domain of\npixels (it may be seen as set\n\\f$\\left\\{(x,y)\\in\\mathbb{N}\\times\\mathbb{N}\\mid 1\\leq x\\leq n,\\;1\\leq y\\leq m\\right\\}\\f$ for some\n\\f$m,\\;n\\in\\mathbb{N}\\f$) into \\f$\\{0,1,\\dots,255\\}\\f$. We shall denote the noised images as \\f$f_i\\f$ and with\nthis view, given some image \\f$x\\f$ of the same size, we may measure how bad it is by the formula\n\n\\f[\\left\\|\\left\\|\\nabla x\\right\\|\\right\\| + \\lambda\\sum_i\\left\\|\\left\\|x-f_i\\right\\|\\right\\|\\f]\n\n\\f$\\|\\|\\cdot\\|\\|\\f$ here denotes \\f$L_2\\f$-norm and as you see, the first addend states that we want our\nimage to be smooth (ideally, having zero gradient, thus being constant) and the second states that\nwe want our result to be close to the observations we've got. If we treat \\f$x\\f$ as a function, this is\nexactly the functional what we seek to minimize and here the Primal-Dual algorithm comes into play.\n\n@param observations This array should contain one or more noised versions of the image that is to\nbe restored.\n@param result Here the denoised image will be stored. There is no need to do pre-allocation of\nstorage space, as it will be automatically allocated, if necessary.\n@param lambda Corresponds to \\f$\\lambda\\f$ in the formulas above. As it is enlarged, the smooth\n(blurred) images are treated more favorably than detailed (but maybe more noised) ones. Roughly\nspeaking, as it becomes smaller, the result will be more blur but more sever outliers will be\nremoved.\n@param niters Number of iterations that the algorithm will run. Of course, as more iterations as\nbetter, but it is hard to quantitatively refine this statement, so just use the default and\nincrease it if the results are poor.\n */\nCV_EXPORTS_W void denoise_TVL1(const std::vector<Mat>& observations,Mat& result, double lambda=1.0, int niters=30);\n\n//! @} photo_denoise\n\n//! @addtogroup photo_hdr\n//! @{\n\nenum { LDR_SIZE = 256 };\n\n/** @brief Base class for tonemapping algorithms - tools that are used to map HDR image to 8-bit range.\n */\nclass CV_EXPORTS_W Tonemap : public Algorithm\n{\npublic:\n    /** @brief Tonemaps image\n\n    @param src source image - 32-bit 3-channel Mat\n    @param dst destination image - 32-bit 3-channel Mat with values in [0, 1] range\n     */\n    CV_WRAP virtual void process(InputArray src, OutputArray dst) = 0;\n\n    CV_WRAP virtual float getGamma() const = 0;\n    CV_WRAP virtual void setGamma(float gamma) = 0;\n};\n\n/** @brief Creates simple linear mapper with gamma correction\n\n@param gamma positive value for gamma correction. Gamma value of 1.0 implies no correction, gamma\nequal to 2.2f is suitable for most displays.\nGenerally gamma \\> 1 brightens the image and gamma \\< 1 darkens it.\n */\nCV_EXPORTS_W Ptr<Tonemap> createTonemap(float gamma = 1.0f);\n\n/** @brief Adaptive logarithmic mapping is a fast global tonemapping algorithm that scales the image in\nlogarithmic domain.\n\nSince it's a global operator the same function is applied to all the pixels, it is controlled by the\nbias parameter.\n\nOptional saturation enhancement is possible as described in @cite FL02 .\n\nFor more information see @cite DM03 .\n */\nclass CV_EXPORTS_W TonemapDrago : public Tonemap\n{\npublic:\n\n    CV_WRAP virtual float getSaturation() const = 0;\n    CV_WRAP virtual void setSaturation(float saturation) = 0;\n\n    CV_WRAP virtual float getBias() const = 0;\n    CV_WRAP virtual void setBias(float bias) = 0;\n};\n\n/** @brief Creates TonemapDrago object\n\n@param gamma gamma value for gamma correction. See createTonemap\n@param saturation positive saturation enhancement value. 1.0 preserves saturation, values greater\nthan 1 increase saturation and values less than 1 decrease it.\n@param bias value for bias function in [0, 1] range. Values from 0.7 to 0.9 usually give best\nresults, default value is 0.85.\n */\nCV_EXPORTS_W Ptr<TonemapDrago> createTonemapDrago(float gamma = 1.0f, float saturation = 1.0f, float bias = 0.85f);\n\n/** @brief This algorithm decomposes image into two layers: base layer and detail layer using bilateral filter\nand compresses contrast of the base layer thus preserving all the details.\n\nThis implementation uses regular bilateral filter from opencv.\n\nSaturation enhancement is possible as in ocvTonemapDrago.\n\nFor more information see @cite DD02 .\n */\nclass CV_EXPORTS_W TonemapDurand : public Tonemap\n{\npublic:\n\n    CV_WRAP virtual float getSaturation() const = 0;\n    CV_WRAP virtual void setSaturation(float saturation) = 0;\n\n    CV_WRAP virtual float getContrast() const = 0;\n    CV_WRAP virtual void setContrast(float contrast) = 0;\n\n    CV_WRAP virtual float getSigmaSpace() const = 0;\n    CV_WRAP virtual void setSigmaSpace(float sigma_space) = 0;\n\n    CV_WRAP virtual float getSigmaColor() const = 0;\n    CV_WRAP virtual void setSigmaColor(float sigma_color) = 0;\n};\n\n/** @brief Creates TonemapDurand object\n\n@param gamma gamma value for gamma correction. See createTonemap\n@param contrast resulting contrast on logarithmic scale, i. e. log(max / min), where max and min\nare maximum and minimum luminance values of the resulting image.\n@param saturation saturation enhancement value. See createTonemapDrago\n@param sigma_space bilateral filter sigma in color space\n@param sigma_color bilateral filter sigma in coordinate space\n */\nCV_EXPORTS_W Ptr<TonemapDurand>\ncreateTonemapDurand(float gamma = 1.0f, float contrast = 4.0f, float saturation = 1.0f, float sigma_space = 2.0f, float sigma_color = 2.0f);\n\n/** @brief This is a global tonemapping operator that models human visual system.\n\nMapping function is controlled by adaptation parameter, that is computed using light adaptation and\ncolor adaptation.\n\nFor more information see @cite RD05 .\n */\nclass CV_EXPORTS_W TonemapReinhard : public Tonemap\n{\npublic:\n    CV_WRAP virtual float getIntensity() const = 0;\n    CV_WRAP virtual void setIntensity(float intensity) = 0;\n\n    CV_WRAP virtual float getLightAdaptation() const = 0;\n    CV_WRAP virtual void setLightAdaptation(float light_adapt) = 0;\n\n    CV_WRAP virtual float getColorAdaptation() const = 0;\n    CV_WRAP virtual void setColorAdaptation(float color_adapt) = 0;\n};\n\n/** @brief Creates TonemapReinhard object\n\n@param gamma gamma value for gamma correction. See createTonemap\n@param intensity result intensity in [-8, 8] range. Greater intensity produces brighter results.\n@param light_adapt light adaptation in [0, 1] range. If 1 adaptation is based only on pixel\nvalue, if 0 it's global, otherwise it's a weighted mean of this two cases.\n@param color_adapt chromatic adaptation in [0, 1] range. If 1 channels are treated independently,\nif 0 adaptation level is the same for each channel.\n */\nCV_EXPORTS_W Ptr<TonemapReinhard>\ncreateTonemapReinhard(float gamma = 1.0f, float intensity = 0.0f, float light_adapt = 1.0f, float color_adapt = 0.0f);\n\n/** @brief This algorithm transforms image to contrast using gradients on all levels of gaussian pyramid,\ntransforms contrast values to HVS response and scales the response. After this the image is\nreconstructed from new contrast values.\n\nFor more information see @cite MM06 .\n */\nclass CV_EXPORTS_W TonemapMantiuk : public Tonemap\n{\npublic:\n    CV_WRAP virtual float getScale() const = 0;\n    CV_WRAP virtual void setScale(float scale) = 0;\n\n    CV_WRAP virtual float getSaturation() const = 0;\n    CV_WRAP virtual void setSaturation(float saturation) = 0;\n};\n\n/** @brief Creates TonemapMantiuk object\n\n@param gamma gamma value for gamma correction. See createTonemap\n@param scale contrast scale factor. HVS response is multiplied by this parameter, thus compressing\ndynamic range. Values from 0.6 to 0.9 produce best results.\n@param saturation saturation enhancement value. See createTonemapDrago\n */\nCV_EXPORTS_W Ptr<TonemapMantiuk>\ncreateTonemapMantiuk(float gamma = 1.0f, float scale = 0.7f, float saturation = 1.0f);\n\n/** @brief The base class for algorithms that align images of the same scene with different exposures\n */\nclass CV_EXPORTS_W AlignExposures : public Algorithm\n{\npublic:\n    /** @brief Aligns images\n\n    @param src vector of input images\n    @param dst vector of aligned images\n    @param times vector of exposure time values for each image\n    @param response 256x1 matrix with inverse camera response function for each pixel value, it should\n    have the same number of channels as images.\n     */\n    CV_WRAP virtual void process(InputArrayOfArrays src, std::vector<Mat>& dst,\n                                 InputArray times, InputArray response) = 0;\n};\n\n/** @brief This algorithm converts images to median threshold bitmaps (1 for pixels brighter than median\nluminance and 0 otherwise) and than aligns the resulting bitmaps using bit operations.\n\nIt is invariant to exposure, so exposure values and camera response are not necessary.\n\nIn this implementation new image regions are filled with zeros.\n\nFor more information see @cite GW03 .\n */\nclass CV_EXPORTS_W AlignMTB : public AlignExposures\n{\npublic:\n    CV_WRAP virtual void process(InputArrayOfArrays src, std::vector<Mat>& dst,\n                                 InputArray times, InputArray response) = 0;\n\n    /** @brief Short version of process, that doesn't take extra arguments.\n\n    @param src vector of input images\n    @param dst vector of aligned images\n     */\n    CV_WRAP virtual void process(InputArrayOfArrays src, std::vector<Mat>& dst) = 0;\n\n    /** @brief Calculates shift between two images, i. e. how to shift the second image to correspond it with the\n    first.\n\n    @param img0 first image\n    @param img1 second image\n     */\n    CV_WRAP virtual Point calculateShift(InputArray img0, InputArray img1) = 0;\n    /** @brief Helper function, that shift Mat filling new regions with zeros.\n\n    @param src input image\n    @param dst result image\n    @param shift shift value\n     */\n    CV_WRAP virtual void shiftMat(InputArray src, OutputArray dst, const Point shift) = 0;\n    /** @brief Computes median threshold and exclude bitmaps of given image.\n\n    @param img input image\n    @param tb median threshold bitmap\n    @param eb exclude bitmap\n     */\n    CV_WRAP virtual void computeBitmaps(InputArray img, OutputArray tb, OutputArray eb) = 0;\n\n    CV_WRAP virtual int getMaxBits() const = 0;\n    CV_WRAP virtual void setMaxBits(int max_bits) = 0;\n\n    CV_WRAP virtual int getExcludeRange() const = 0;\n    CV_WRAP virtual void setExcludeRange(int exclude_range) = 0;\n\n    CV_WRAP virtual bool getCut() const = 0;\n    CV_WRAP virtual void setCut(bool value) = 0;\n};\n\n/** @brief Creates AlignMTB object\n\n@param max_bits logarithm to the base 2 of maximal shift in each dimension. Values of 5 and 6 are\nusually good enough (31 and 63 pixels shift respectively).\n@param exclude_range range for exclusion bitmap that is constructed to suppress noise around the\nmedian value.\n@param cut if true cuts images, otherwise fills the new regions with zeros.\n */\nCV_EXPORTS_W Ptr<AlignMTB> createAlignMTB(int max_bits = 6, int exclude_range = 4, bool cut = true);\n\n/** @brief The base class for camera response calibration algorithms.\n */\nclass CV_EXPORTS_W CalibrateCRF : public Algorithm\n{\npublic:\n    /** @brief Recovers inverse camera response.\n\n    @param src vector of input images\n    @param dst 256x1 matrix with inverse camera response function\n    @param times vector of exposure time values for each image\n     */\n    CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, InputArray times) = 0;\n};\n\n/** @brief Inverse camera response function is extracted for each brightness value by minimizing an objective\nfunction as linear system. Objective function is constructed using pixel values on the same position\nin all images, extra term is added to make the result smoother.\n\nFor more information see @cite DM97 .\n */\nclass CV_EXPORTS_W CalibrateDebevec : public CalibrateCRF\n{\npublic:\n    CV_WRAP virtual float getLambda() const = 0;\n    CV_WRAP virtual void setLambda(float lambda) = 0;\n\n    CV_WRAP virtual int getSamples() const = 0;\n    CV_WRAP virtual void setSamples(int samples) = 0;\n\n    CV_WRAP virtual bool getRandom() const = 0;\n    CV_WRAP virtual void setRandom(bool random) = 0;\n};\n\n/** @brief Creates CalibrateDebevec object\n\n@param samples number of pixel locations to use\n@param lambda smoothness term weight. Greater values produce smoother results, but can alter the\nresponse.\n@param random if true sample pixel locations are chosen at random, otherwise the form a\nrectangular grid.\n */\nCV_EXPORTS_W Ptr<CalibrateDebevec> createCalibrateDebevec(int samples = 70, float lambda = 10.0f, bool random = false);\n\n/** @brief Inverse camera response function is extracted for each brightness value by minimizing an objective\nfunction as linear system. This algorithm uses all image pixels.\n\nFor more information see @cite RB99 .\n */\nclass CV_EXPORTS_W CalibrateRobertson : public CalibrateCRF\n{\npublic:\n    CV_WRAP virtual int getMaxIter() const = 0;\n    CV_WRAP virtual void setMaxIter(int max_iter) = 0;\n\n    CV_WRAP virtual float getThreshold() const = 0;\n    CV_WRAP virtual void setThreshold(float threshold) = 0;\n\n    CV_WRAP virtual Mat getRadiance() const = 0;\n};\n\n/** @brief Creates CalibrateRobertson object\n\n@param max_iter maximal number of Gauss-Seidel solver iterations.\n@param threshold target difference between results of two successive steps of the minimization.\n */\nCV_EXPORTS_W Ptr<CalibrateRobertson> createCalibrateRobertson(int max_iter = 30, float threshold = 0.01f);\n\n/** @brief The base class algorithms that can merge exposure sequence to a single image.\n */\nclass CV_EXPORTS_W MergeExposures : public Algorithm\n{\npublic:\n    /** @brief Merges images.\n\n    @param src vector of input images\n    @param dst result image\n    @param times vector of exposure time values for each image\n    @param response 256x1 matrix with inverse camera response function for each pixel value, it should\n    have the same number of channels as images.\n     */\n    CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst,\n                                 InputArray times, InputArray response) = 0;\n};\n\n/** @brief The resulting HDR image is calculated as weighted average of the exposures considering exposure\nvalues and camera response.\n\nFor more information see @cite DM97 .\n */\nclass CV_EXPORTS_W MergeDebevec : public MergeExposures\n{\npublic:\n    CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst,\n                                 InputArray times, InputArray response) = 0;\n    CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, InputArray times) = 0;\n};\n\n/** @brief Creates MergeDebevec object\n */\nCV_EXPORTS_W Ptr<MergeDebevec> createMergeDebevec();\n\n/** @brief Pixels are weighted using contrast, saturation and well-exposedness measures, than images are\ncombined using laplacian pyramids.\n\nThe resulting image weight is constructed as weighted average of contrast, saturation and\nwell-exposedness measures.\n\nThe resulting image doesn't require tonemapping and can be converted to 8-bit image by multiplying\nby 255, but it's recommended to apply gamma correction and/or linear tonemapping.\n\nFor more information see @cite MK07 .\n */\nclass CV_EXPORTS_W MergeMertens : public MergeExposures\n{\npublic:\n    CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst,\n                                 InputArray times, InputArray response) = 0;\n    /** @brief Short version of process, that doesn't take extra arguments.\n\n    @param src vector of input images\n    @param dst result image\n     */\n    CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst) = 0;\n\n    CV_WRAP virtual float getContrastWeight() const = 0;\n    CV_WRAP virtual void setContrastWeight(float contrast_weiht) = 0;\n\n    CV_WRAP virtual float getSaturationWeight() const = 0;\n    CV_WRAP virtual void setSaturationWeight(float saturation_weight) = 0;\n\n    CV_WRAP virtual float getExposureWeight() const = 0;\n    CV_WRAP virtual void setExposureWeight(float exposure_weight) = 0;\n};\n\n/** @brief Creates MergeMertens object\n\n@param contrast_weight contrast measure weight. See MergeMertens.\n@param saturation_weight saturation measure weight\n@param exposure_weight well-exposedness measure weight\n */\nCV_EXPORTS_W Ptr<MergeMertens>\ncreateMergeMertens(float contrast_weight = 1.0f, float saturation_weight = 1.0f, float exposure_weight = 0.0f);\n\n/** @brief The resulting HDR image is calculated as weighted average of the exposures considering exposure\nvalues and camera response.\n\nFor more information see @cite RB99 .\n */\nclass CV_EXPORTS_W MergeRobertson : public MergeExposures\n{\npublic:\n    CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst,\n                                 InputArray times, InputArray response) = 0;\n    CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, InputArray times) = 0;\n};\n\n/** @brief Creates MergeRobertson object\n */\nCV_EXPORTS_W Ptr<MergeRobertson> createMergeRobertson();\n\n//! @} photo_hdr\n\n/** @brief Transforms a color image to a grayscale image. It is a basic tool in digital printing, stylized\nblack-and-white photograph rendering, and in many single channel image processing applications\n@cite CL12 .\n\n@param src Input 8-bit 3-channel image.\n@param grayscale Output 8-bit 1-channel image.\n@param color_boost Output 8-bit 3-channel image.\n\nThis function is to be applied on color images.\n */\nCV_EXPORTS_W void decolor( InputArray src, OutputArray grayscale, OutputArray color_boost);\n\n//! @addtogroup photo_clone\n//! @{\n\n/** @brief Image editing tasks concern either global changes (color/intensity corrections, filters,\ndeformations) or local changes concerned to a selection. Here we are interested in achieving local\nchanges, ones that are restricted to a region manually selected (ROI), in a seamless and effortless\nmanner. The extent of the changes ranges from slight distortions to complete replacement by novel\ncontent @cite PM03 .\n\n@param src Input 8-bit 3-channel image.\n@param dst Input 8-bit 3-channel image.\n@param mask Input 8-bit 1 or 3-channel image.\n@param p Point in dst image where object is placed.\n@param blend Output image with the same size and type as dst.\n@param flags Cloning method that could be one of the following:\n-   **NORMAL_CLONE** The power of the method is fully expressed when inserting objects with\ncomplex outlines into a new background\n-   **MIXED_CLONE** The classic method, color-based selection and alpha masking might be time\nconsuming and often leaves an undesirable halo. Seamless cloning, even averaged with the\noriginal image, is not effective. Mixed seamless cloning based on a loose selection proves\neffective.\n-   **FEATURE_EXCHANGE** Feature exchange allows the user to easily replace certain features of\none object by alternative features.\n */\nCV_EXPORTS_W void seamlessClone( InputArray src, InputArray dst, InputArray mask, Point p,\n        OutputArray blend, int flags);\n\n/** @brief Given an original color image, two differently colored versions of this image can be mixed\nseamlessly.\n\n@param src Input 8-bit 3-channel image.\n@param mask Input 8-bit 1 or 3-channel image.\n@param dst Output image with the same size and type as src .\n@param red_mul R-channel multiply factor.\n@param green_mul G-channel multiply factor.\n@param blue_mul B-channel multiply factor.\n\nMultiplication factor is between .5 to 2.5.\n */\nCV_EXPORTS_W void colorChange(InputArray src, InputArray mask, OutputArray dst, float red_mul = 1.0f,\n        float green_mul = 1.0f, float blue_mul = 1.0f);\n\n/** @brief Applying an appropriate non-linear transformation to the gradient field inside the selection and\nthen integrating back with a Poisson solver, modifies locally the apparent illumination of an image.\n\n@param src Input 8-bit 3-channel image.\n@param mask Input 8-bit 1 or 3-channel image.\n@param dst Output image with the same size and type as src.\n@param alpha Value ranges between 0-2.\n@param beta Value ranges between 0-2.\n\nThis is useful to highlight under-exposed foreground objects or to reduce specular reflections.\n */\nCV_EXPORTS_W void illuminationChange(InputArray src, InputArray mask, OutputArray dst,\n        float alpha = 0.2f, float beta = 0.4f);\n\n/** @brief By retaining only the gradients at edge locations, before integrating with the Poisson solver, one\nwashes out the texture of the selected region, giving its contents a flat aspect. Here Canny Edge\nDetector is used.\n\n@param src Input 8-bit 3-channel image.\n@param mask Input 8-bit 1 or 3-channel image.\n@param dst Output image with the same size and type as src.\n@param low_threshold Range from 0 to 100.\n@param high_threshold Value \\> 100.\n@param kernel_size The size of the Sobel kernel to be used.\n\n**NOTE:**\n\nThe algorithm assumes that the color of the source image is close to that of the destination. This\nassumption means that when the colors don't match, the source image color gets tinted toward the\ncolor of the destination image.\n */\nCV_EXPORTS_W void textureFlattening(InputArray src, InputArray mask, OutputArray dst,\n        float low_threshold = 30, float high_threshold = 45,\n        int kernel_size = 3);\n\n//! @} photo_clone\n\n//! @addtogroup photo_render\n//! @{\n\n/** @brief Filtering is the fundamental operation in image and video processing. Edge-preserving smoothing\nfilters are used in many different applications @cite EM11 .\n\n@param src Input 8-bit 3-channel image.\n@param dst Output 8-bit 3-channel image.\n@param flags Edge preserving filters:\n-   **RECURS_FILTER** = 1\n-   **NORMCONV_FILTER** = 2\n@param sigma_s Range between 0 to 200.\n@param sigma_r Range between 0 to 1.\n */\nCV_EXPORTS_W void edgePreservingFilter(InputArray src, OutputArray dst, int flags = 1,\n        float sigma_s = 60, float sigma_r = 0.4f);\n\n/** @brief This filter enhances the details of a particular image.\n\n@param src Input 8-bit 3-channel image.\n@param dst Output image with the same size and type as src.\n@param sigma_s Range between 0 to 200.\n@param sigma_r Range between 0 to 1.\n */\nCV_EXPORTS_W void detailEnhance(InputArray src, OutputArray dst, float sigma_s = 10,\n        float sigma_r = 0.15f);\n\n/** @brief Pencil-like non-photorealistic line drawing\n\n@param src Input 8-bit 3-channel image.\n@param dst1 Output 8-bit 1-channel image.\n@param dst2 Output image with the same size and type as src.\n@param sigma_s Range between 0 to 200.\n@param sigma_r Range between 0 to 1.\n@param shade_factor Range between 0 to 0.1.\n */\nCV_EXPORTS_W void pencilSketch(InputArray src, OutputArray dst1, OutputArray dst2,\n        float sigma_s = 60, float sigma_r = 0.07f, float shade_factor = 0.02f);\n\n/** @brief Stylization aims to produce digital imagery with a wide variety of effects not focused on\nphotorealism. Edge-aware filters are ideal for stylization, as they can abstract regions of low\ncontrast while preserving, or enhancing, high-contrast features.\n\n@param src Input 8-bit 3-channel image.\n@param dst Output image with the same size and type as src.\n@param sigma_s Range between 0 to 200.\n@param sigma_r Range between 0 to 1.\n */\nCV_EXPORTS_W void stylization(InputArray src, OutputArray dst, float sigma_s = 60,\n        float sigma_r = 0.45f);\n\n//! @} photo_render\n\n//! @} photo\n\n} // cv\n\n#ifndef DISABLE_OPENCV_24_COMPATIBILITY\n#include \"opencv2/photo/photo_c.h\"\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/shape/emdL1.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_EMD_L1_HPP__\n#define __OPENCV_EMD_L1_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\n/****************************************************************************************\\\n*                                   EMDL1 Function                                      *\n\\****************************************************************************************/\n\n//! @addtogroup shape\n//! @{\n\n/** @brief Computes the \"minimal work\" distance between two weighted point configurations base on the papers\n\"EMD-L1: An efficient and Robust Algorithm for comparing histogram-based descriptors\", by Haibin\nLing and Kazunori Okuda; and \"The Earth Mover's Distance is the Mallows Distance: Some Insights from\nStatistics\", by Elizaveta Levina and Peter Bickel.\n\n@param signature1 First signature, a single column floating-point matrix. Each row is the value of\nthe histogram in each bin.\n@param signature2 Second signature of the same format and size as signature1.\n */\nCV_EXPORTS float EMDL1(InputArray signature1, InputArray signature2);\n\n//! @}\n\n}//namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/shape/hist_cost.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HIST_COST_HPP__\n#define __OPENCV_HIST_COST_HPP__\n\n#include \"opencv2/imgproc.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup shape\n//! @{\n\n/** @brief Abstract base class for histogram cost algorithms.\n */\nclass CV_EXPORTS_W HistogramCostExtractor : public Algorithm\n{\npublic:\n    CV_WRAP virtual void buildCostMatrix(InputArray descriptors1, InputArray descriptors2, OutputArray costMatrix) = 0;\n\n    CV_WRAP virtual void setNDummies(int nDummies) = 0;\n    CV_WRAP virtual int getNDummies() const = 0;\n\n    CV_WRAP virtual void setDefaultCost(float defaultCost) = 0;\n    CV_WRAP virtual float getDefaultCost() const = 0;\n};\n\n/** @brief A norm based cost extraction. :\n */\nclass CV_EXPORTS_W NormHistogramCostExtractor : public HistogramCostExtractor\n{\npublic:\n    CV_WRAP virtual void setNormFlag(int flag) = 0;\n    CV_WRAP virtual int getNormFlag() const = 0;\n};\n\nCV_EXPORTS_W Ptr<HistogramCostExtractor>\n    createNormHistogramCostExtractor(int flag=DIST_L2, int nDummies=25, float defaultCost=0.2f);\n\n/** @brief An EMD based cost extraction. :\n */\nclass CV_EXPORTS_W EMDHistogramCostExtractor : public HistogramCostExtractor\n{\npublic:\n    CV_WRAP virtual void setNormFlag(int flag) = 0;\n    CV_WRAP virtual int getNormFlag() const = 0;\n};\n\nCV_EXPORTS_W Ptr<HistogramCostExtractor>\n    createEMDHistogramCostExtractor(int flag=DIST_L2, int nDummies=25, float defaultCost=0.2f);\n\n/** @brief An Chi based cost extraction. :\n */\nclass CV_EXPORTS_W ChiHistogramCostExtractor : public HistogramCostExtractor\n{};\n\nCV_EXPORTS_W Ptr<HistogramCostExtractor> createChiHistogramCostExtractor(int nDummies=25, float defaultCost=0.2f);\n\n/** @brief An EMD-L1 based cost extraction. :\n */\nclass CV_EXPORTS_W EMDL1HistogramCostExtractor : public HistogramCostExtractor\n{};\n\nCV_EXPORTS_W Ptr<HistogramCostExtractor>\n    createEMDL1HistogramCostExtractor(int nDummies=25, float defaultCost=0.2f);\n\n//! @}\n\n} // cv\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/shape/shape.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/shape.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/shape/shape_distance.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_SHAPE_SHAPE_DISTANCE_HPP__\n#define __OPENCV_SHAPE_SHAPE_DISTANCE_HPP__\n#include \"opencv2/core.hpp\"\n#include \"opencv2/shape/hist_cost.hpp\"\n#include \"opencv2/shape/shape_transformer.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup shape\n//! @{\n\n/** @brief Abstract base class for shape distance algorithms.\n */\nclass CV_EXPORTS_W ShapeDistanceExtractor : public Algorithm\n{\npublic:\n    /** @brief Compute the shape distance between two shapes defined by its contours.\n\n    @param contour1 Contour defining first shape.\n    @param contour2 Contour defining second shape.\n     */\n    CV_WRAP virtual float computeDistance(InputArray contour1, InputArray contour2) = 0;\n};\n\n/***********************************************************************************/\n/***********************************************************************************/\n/***********************************************************************************/\n/** @brief Implementation of the Shape Context descriptor and matching algorithm\n\nproposed by Belongie et al. in \"Shape Matching and Object Recognition Using Shape Contexts\" (PAMI\n2002). This implementation is packaged in a generic scheme, in order to allow you the\nimplementation of the common variations of the original pipeline.\n*/\nclass CV_EXPORTS_W ShapeContextDistanceExtractor : public ShapeDistanceExtractor\n{\npublic:\n    /** @brief Establish the number of angular bins for the Shape Context Descriptor used in the shape matching\n    pipeline.\n\n    @param nAngularBins The number of angular bins in the shape context descriptor.\n     */\n    CV_WRAP virtual void setAngularBins(int nAngularBins) = 0;\n    CV_WRAP virtual int getAngularBins() const = 0;\n\n    /** @brief Establish the number of radial bins for the Shape Context Descriptor used in the shape matching\n    pipeline.\n\n    @param nRadialBins The number of radial bins in the shape context descriptor.\n     */\n    CV_WRAP virtual void setRadialBins(int nRadialBins) = 0;\n    CV_WRAP virtual int getRadialBins() const = 0;\n\n    /** @brief Set the inner radius of the shape context descriptor.\n\n    @param innerRadius The value of the inner radius.\n     */\n    CV_WRAP virtual void setInnerRadius(float innerRadius) = 0;\n    CV_WRAP virtual float getInnerRadius() const = 0;\n\n    /** @brief Set the outer radius of the shape context descriptor.\n\n    @param outerRadius The value of the outer radius.\n     */\n    CV_WRAP virtual void setOuterRadius(float outerRadius) = 0;\n    CV_WRAP virtual float getOuterRadius() const = 0;\n\n    CV_WRAP virtual void setRotationInvariant(bool rotationInvariant) = 0;\n    CV_WRAP virtual bool getRotationInvariant() const = 0;\n\n    /** @brief Set the weight of the shape context distance in the final value of the shape distance. The shape\n    context distance between two shapes is defined as the symmetric sum of shape context matching costs\n    over best matching points. The final value of the shape distance is a user-defined linear\n    combination of the shape context distance, an image appearance distance, and a bending energy.\n\n    @param shapeContextWeight The weight of the shape context distance in the final distance value.\n     */\n    CV_WRAP virtual void setShapeContextWeight(float shapeContextWeight) = 0;\n    CV_WRAP virtual float getShapeContextWeight() const = 0;\n\n    /** @brief Set the weight of the Image Appearance cost in the final value of the shape distance. The image\n    appearance cost is defined as the sum of squared brightness differences in Gaussian windows around\n    corresponding image points. The final value of the shape distance is a user-defined linear\n    combination of the shape context distance, an image appearance distance, and a bending energy. If\n    this value is set to a number different from 0, is mandatory to set the images that correspond to\n    each shape.\n\n    @param imageAppearanceWeight The weight of the appearance cost in the final distance value.\n     */\n    CV_WRAP virtual void setImageAppearanceWeight(float imageAppearanceWeight) = 0;\n    CV_WRAP virtual float getImageAppearanceWeight() const = 0;\n\n    /** @brief Set the weight of the Bending Energy in the final value of the shape distance. The bending energy\n    definition depends on what transformation is being used to align the shapes. The final value of the\n    shape distance is a user-defined linear combination of the shape context distance, an image\n    appearance distance, and a bending energy.\n\n    @param bendingEnergyWeight The weight of the Bending Energy in the final distance value.\n     */\n    CV_WRAP virtual void setBendingEnergyWeight(float bendingEnergyWeight) = 0;\n    CV_WRAP virtual float getBendingEnergyWeight() const = 0;\n\n    /** @brief Set the images that correspond to each shape. This images are used in the calculation of the Image\n    Appearance cost.\n\n    @param image1 Image corresponding to the shape defined by contours1.\n    @param image2 Image corresponding to the shape defined by contours2.\n     */\n    CV_WRAP virtual void setImages(InputArray image1, InputArray image2) = 0;\n    CV_WRAP virtual void getImages(OutputArray image1, OutputArray image2) const = 0;\n\n    CV_WRAP virtual void setIterations(int iterations) = 0;\n    CV_WRAP virtual int getIterations() const = 0;\n\n    /** @brief Set the algorithm used for building the shape context descriptor cost matrix.\n\n    @param comparer Smart pointer to a HistogramCostExtractor, an algorithm that defines the cost\n    matrix between descriptors.\n     */\n    CV_WRAP virtual void setCostExtractor(Ptr<HistogramCostExtractor> comparer) = 0;\n    CV_WRAP virtual Ptr<HistogramCostExtractor> getCostExtractor() const = 0;\n\n    /** @brief Set the value of the standard deviation for the Gaussian window for the image appearance cost.\n\n    @param sigma Standard Deviation.\n     */\n    CV_WRAP virtual void setStdDev(float sigma) = 0;\n    CV_WRAP virtual float getStdDev() const = 0;\n\n    /** @brief Set the algorithm used for aligning the shapes.\n\n    @param transformer Smart pointer to a ShapeTransformer, an algorithm that defines the aligning\n    transformation.\n     */\n    CV_WRAP virtual void setTransformAlgorithm(Ptr<ShapeTransformer> transformer) = 0;\n    CV_WRAP virtual Ptr<ShapeTransformer> getTransformAlgorithm() const = 0;\n};\n\n/* Complete constructor */\nCV_EXPORTS_W Ptr<ShapeContextDistanceExtractor>\n    createShapeContextDistanceExtractor(int nAngularBins=12, int nRadialBins=4,\n                                        float innerRadius=0.2f, float outerRadius=2, int iterations=3,\n                                        const Ptr<HistogramCostExtractor> &comparer = createChiHistogramCostExtractor(),\n                                        const Ptr<ShapeTransformer> &transformer = createThinPlateSplineShapeTransformer());\n\n/***********************************************************************************/\n/***********************************************************************************/\n/***********************************************************************************/\n/** @brief A simple Hausdorff distance measure between shapes defined by contours\n\naccording to the paper \"Comparing Images using the Hausdorff distance.\" by D.P. Huttenlocher, G.A.\nKlanderman, and W.J. Rucklidge. (PAMI 1993). :\n */\nclass CV_EXPORTS_W HausdorffDistanceExtractor : public ShapeDistanceExtractor\n{\npublic:\n    /** @brief Set the norm used to compute the Hausdorff value between two shapes. It can be L1 or L2 norm.\n\n    @param distanceFlag Flag indicating which norm is used to compute the Hausdorff distance\n    (NORM_L1, NORM_L2).\n     */\n    CV_WRAP virtual void setDistanceFlag(int distanceFlag) = 0;\n    CV_WRAP virtual int getDistanceFlag() const = 0;\n\n    /** @brief This method sets the rank proportion (or fractional value) that establish the Kth ranked value of\n    the partial Hausdorff distance. Experimentally had been shown that 0.6 is a good value to compare\n    shapes.\n\n    @param rankProportion fractional value (between 0 and 1).\n     */\n    CV_WRAP virtual void setRankProportion(float rankProportion) = 0;\n    CV_WRAP virtual float getRankProportion() const = 0;\n};\n\n/* Constructor */\nCV_EXPORTS_W Ptr<HausdorffDistanceExtractor> createHausdorffDistanceExtractor(int distanceFlag=cv::NORM_L2, float rankProp=0.6f);\n\n//! @}\n\n} // cv\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/shape/shape_transformer.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_SHAPE_SHAPE_TRANSFORM_HPP__\n#define __OPENCV_SHAPE_SHAPE_TRANSFORM_HPP__\n#include <vector>\n#include \"opencv2/core.hpp\"\n#include \"opencv2/imgproc.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup shape\n//! @{\n\n/** @brief Abstract base class for shape transformation algorithms.\n */\nclass CV_EXPORTS_W ShapeTransformer : public Algorithm\n{\npublic:\n    /** @brief Estimate the transformation parameters of the current transformer algorithm, based on point matches.\n\n    @param transformingShape Contour defining first shape.\n    @param targetShape Contour defining second shape (Target).\n    @param matches Standard vector of Matches between points.\n     */\n    CV_WRAP virtual void estimateTransformation(InputArray transformingShape, InputArray targetShape,\n                                                 std::vector<DMatch>& matches) = 0;\n\n    /** @brief Apply a transformation, given a pre-estimated transformation parameters.\n\n    @param input Contour (set of points) to apply the transformation.\n    @param output Output contour.\n     */\n    CV_WRAP virtual float applyTransformation(InputArray input, OutputArray output=noArray()) = 0;\n\n    /** @brief Apply a transformation, given a pre-estimated transformation parameters, to an Image.\n\n    @param transformingImage Input image.\n    @param output Output image.\n    @param flags Image interpolation method.\n    @param borderMode border style.\n    @param borderValue border value.\n     */\n    CV_WRAP virtual void warpImage(InputArray transformingImage, OutputArray output,\n                                   int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT,\n                                   const Scalar& borderValue=Scalar()) const = 0;\n};\n\n/***********************************************************************************/\n/***********************************************************************************/\n\n/** @brief Definition of the transformation\n\nocupied in the paper \"Principal Warps: Thin-Plate Splines and Decomposition of Deformations\", by\nF.L. Bookstein (PAMI 1989). :\n */\nclass CV_EXPORTS_W ThinPlateSplineShapeTransformer : public ShapeTransformer\n{\npublic:\n    /** @brief Set the regularization parameter for relaxing the exact interpolation requirements of the TPS\n    algorithm.\n\n    @param beta value of the regularization parameter.\n     */\n    CV_WRAP virtual void setRegularizationParameter(double beta) = 0;\n    CV_WRAP virtual double getRegularizationParameter() const = 0;\n};\n\n/** Complete constructor */\nCV_EXPORTS_W Ptr<ThinPlateSplineShapeTransformer>\n    createThinPlateSplineShapeTransformer(double regularizationParameter=0);\n\n/***********************************************************************************/\n/***********************************************************************************/\n\n/** @brief Wrapper class for the OpenCV Affine Transformation algorithm. :\n */\nclass CV_EXPORTS_W AffineTransformer : public ShapeTransformer\n{\npublic:\n    CV_WRAP virtual void setFullAffine(bool fullAffine) = 0;\n    CV_WRAP virtual bool getFullAffine() const = 0;\n};\n\n/** Complete constructor */\nCV_EXPORTS_W Ptr<AffineTransformer> createAffineTransformer(bool fullAffine);\n\n//! @}\n\n} // cv\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/shape.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_SHAPE_HPP__\n#define __OPENCV_SHAPE_HPP__\n\n#include \"opencv2/shape/emdL1.hpp\"\n#include \"opencv2/shape/shape_transformer.hpp\"\n#include \"opencv2/shape/hist_cost.hpp\"\n#include \"opencv2/shape/shape_distance.hpp\"\n\n/**\n  @defgroup shape Shape Distance and Matching\n */\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/autocalib.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_AUTOCALIB_HPP__\n#define __OPENCV_STITCHING_AUTOCALIB_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"matchers.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching_autocalib\n//! @{\n\n/** @brief Tries to estimate focal lengths from the given homography under the assumption that the camera\nundergoes rotations around its centre only.\n\n@param H Homography.\n@param f0 Estimated focal length along X axis.\n@param f1 Estimated focal length along Y axis.\n@param f0_ok True, if f0 was estimated successfully, false otherwise.\n@param f1_ok True, if f1 was estimated successfully, false otherwise.\n\nSee \"Construction of Panoramic Image Mosaics with Global and Local Alignment\"\nby Heung-Yeung Shum and Richard Szeliski.\n */\nvoid CV_EXPORTS focalsFromHomography(const Mat &H, double &f0, double &f1, bool &f0_ok, bool &f1_ok);\n\n/** @brief Estimates focal lengths for each given camera.\n\n@param features Features of images.\n@param pairwise_matches Matches between all image pairs.\n@param focals Estimated focal lengths for each camera.\n */\nvoid CV_EXPORTS estimateFocal(const std::vector<ImageFeatures> &features,\n                              const std::vector<MatchesInfo> &pairwise_matches,\n                              std::vector<double> &focals);\n\nbool CV_EXPORTS calibrateRotatingCamera(const std::vector<Mat> &Hs, Mat &K);\n\n//! @} stitching_autocalib\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_AUTOCALIB_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/blenders.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_BLENDERS_HPP__\n#define __OPENCV_STITCHING_BLENDERS_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching_blend\n//! @{\n\n/** @brief Base class for all blenders.\n\nSimple blender which puts one image over another\n*/\nclass CV_EXPORTS Blender\n{\npublic:\n    virtual ~Blender() {}\n\n    enum { NO, FEATHER, MULTI_BAND };\n    static Ptr<Blender> createDefault(int type, bool try_gpu = false);\n\n    /** @brief Prepares the blender for blending.\n\n    @param corners Source images top-left corners\n    @param sizes Source image sizes\n     */\n    void prepare(const std::vector<Point> &corners, const std::vector<Size> &sizes);\n    /** @overload */\n    virtual void prepare(Rect dst_roi);\n    /** @brief Processes the image.\n\n    @param img Source image\n    @param mask Source image mask\n    @param tl Source image top-left corners\n     */\n    virtual void feed(InputArray img, InputArray mask, Point tl);\n    /** @brief Blends and returns the final pano.\n\n    @param dst Final pano\n    @param dst_mask Final pano mask\n     */\n    virtual void blend(InputOutputArray dst, InputOutputArray dst_mask);\n\nprotected:\n    UMat dst_, dst_mask_;\n    Rect dst_roi_;\n};\n\n/** @brief Simple blender which mixes images at its borders.\n */\nclass CV_EXPORTS FeatherBlender : public Blender\n{\npublic:\n    FeatherBlender(float sharpness = 0.02f);\n\n    float sharpness() const { return sharpness_; }\n    void setSharpness(float val) { sharpness_ = val; }\n\n    void prepare(Rect dst_roi);\n    void feed(InputArray img, InputArray mask, Point tl);\n    void blend(InputOutputArray dst, InputOutputArray dst_mask);\n\n    //! Creates weight maps for fixed set of source images by their masks and top-left corners.\n    //! Final image can be obtained by simple weighting of the source images.\n    Rect createWeightMaps(const std::vector<UMat> &masks, const std::vector<Point> &corners,\n                          std::vector<UMat> &weight_maps);\n\nprivate:\n    float sharpness_;\n    UMat weight_map_;\n    UMat dst_weight_map_;\n};\n\ninline FeatherBlender::FeatherBlender(float _sharpness) { setSharpness(_sharpness); }\n\n/** @brief Blender which uses multi-band blending algorithm (see @cite BA83).\n */\nclass CV_EXPORTS MultiBandBlender : public Blender\n{\npublic:\n    MultiBandBlender(int try_gpu = false, int num_bands = 5, int weight_type = CV_32F);\n\n    int numBands() const { return actual_num_bands_; }\n    void setNumBands(int val) { actual_num_bands_ = val; }\n\n    void prepare(Rect dst_roi);\n    void feed(InputArray img, InputArray mask, Point tl);\n    void blend(InputOutputArray dst, InputOutputArray dst_mask);\n\nprivate:\n    int actual_num_bands_, num_bands_;\n    std::vector<UMat> dst_pyr_laplace_;\n    std::vector<UMat> dst_band_weights_;\n    Rect dst_roi_final_;\n    bool can_use_gpu_;\n    int weight_type_; //CV_32F or CV_16S\n};\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Auxiliary functions\n\nvoid CV_EXPORTS normalizeUsingWeightMap(InputArray weight, InputOutputArray src);\n\nvoid CV_EXPORTS createWeightMap(InputArray mask, float sharpness, InputOutputArray weight);\n\nvoid CV_EXPORTS createLaplacePyr(InputArray img, int num_levels, std::vector<UMat>& pyr);\nvoid CV_EXPORTS createLaplacePyrGpu(InputArray img, int num_levels, std::vector<UMat>& pyr);\n\n// Restores source image\nvoid CV_EXPORTS restoreImageFromLaplacePyr(std::vector<UMat>& pyr);\nvoid CV_EXPORTS restoreImageFromLaplacePyrGpu(std::vector<UMat>& pyr);\n\n//! @}\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_BLENDERS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/camera.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_CAMERA_HPP__\n#define __OPENCV_STITCHING_CAMERA_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching\n//! @{\n\n/** @brief Describes camera parameters.\n\n@note Translation is assumed to be zero during the whole stitching pipeline. :\n */\nstruct CV_EXPORTS CameraParams\n{\n    CameraParams();\n    CameraParams(const CameraParams& other);\n    const CameraParams& operator =(const CameraParams& other);\n    Mat K() const;\n\n    double focal; // Focal length\n    double aspect; // Aspect ratio\n    double ppx; // Principal point X\n    double ppy; // Principal point Y\n    Mat R; // Rotation\n    Mat t; // Translation\n};\n\n//! @}\n\n} // namespace detail\n} // namespace cv\n\n#endif // #ifndef __OPENCV_STITCHING_CAMERA_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/exposure_compensate.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__\n#define __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching_exposure\n//! @{\n\n/** @brief Base class for all exposure compensators.\n */\nclass CV_EXPORTS ExposureCompensator\n{\npublic:\n    virtual ~ExposureCompensator() {}\n\n    enum { NO, GAIN, GAIN_BLOCKS };\n    static Ptr<ExposureCompensator> createDefault(int type);\n\n    /**\n    @param corners Source image top-left corners\n    @param images Source images\n    @param masks Image masks to update (second value in pair specifies the value which should be used\n    to detect where image is)\n     */\n    void feed(const std::vector<Point> &corners, const std::vector<UMat> &images,\n              const std::vector<UMat> &masks);\n    /** @overload */\n    virtual void feed(const std::vector<Point> &corners, const std::vector<UMat> &images,\n                      const std::vector<std::pair<UMat,uchar> > &masks) = 0;\n    /** @brief Compensate exposure in the specified image.\n\n    @param index Image index\n    @param corner Image top-left corner\n    @param image Image to process\n    @param mask Image mask\n     */\n    virtual void apply(int index, Point corner, InputOutputArray image, InputArray mask) = 0;\n};\n\n/** @brief Stub exposure compensator which does nothing.\n */\nclass CV_EXPORTS NoExposureCompensator : public ExposureCompensator\n{\npublic:\n    void feed(const std::vector<Point> &/*corners*/, const std::vector<UMat> &/*images*/,\n              const std::vector<std::pair<UMat,uchar> > &/*masks*/) { }\n    void apply(int /*index*/, Point /*corner*/, InputOutputArray /*image*/, InputArray /*mask*/) { }\n};\n\n/** @brief Exposure compensator which tries to remove exposure related artifacts by adjusting image\nintensities, see @cite BL07 and @cite WJ10 for details.\n */\nclass CV_EXPORTS GainCompensator : public ExposureCompensator\n{\npublic:\n    void feed(const std::vector<Point> &corners, const std::vector<UMat> &images,\n              const std::vector<std::pair<UMat,uchar> > &masks);\n    void apply(int index, Point corner, InputOutputArray image, InputArray mask);\n    std::vector<double> gains() const;\n\nprivate:\n    Mat_<double> gains_;\n};\n\n/** @brief Exposure compensator which tries to remove exposure related artifacts by adjusting image block\nintensities, see @cite UES01 for details.\n */\nclass CV_EXPORTS BlocksGainCompensator : public ExposureCompensator\n{\npublic:\n    BlocksGainCompensator(int bl_width = 32, int bl_height = 32)\n            : bl_width_(bl_width), bl_height_(bl_height) {}\n    void feed(const std::vector<Point> &corners, const std::vector<UMat> &images,\n              const std::vector<std::pair<UMat,uchar> > &masks);\n    void apply(int index, Point corner, InputOutputArray image, InputArray mask);\n\nprivate:\n    int bl_width_, bl_height_;\n    std::vector<UMat> gain_maps_;\n};\n\n//! @}\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/matchers.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_MATCHERS_HPP__\n#define __OPENCV_STITCHING_MATCHERS_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/features2d.hpp\"\n\n#include \"opencv2/opencv_modules.hpp\"\n\n#ifdef HAVE_OPENCV_XFEATURES2D\n#  include \"opencv2/xfeatures2d/cuda.hpp\"\n#endif\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching_match\n//! @{\n\n/** @brief Structure containing image keypoints and descriptors. */\nstruct CV_EXPORTS ImageFeatures\n{\n    int img_idx;\n    Size img_size;\n    std::vector<KeyPoint> keypoints;\n    UMat descriptors;\n};\n\n/** @brief Feature finders base class */\nclass CV_EXPORTS FeaturesFinder\n{\npublic:\n    virtual ~FeaturesFinder() {}\n    /** @overload */\n    void operator ()(InputArray image, ImageFeatures &features);\n    /** @brief Finds features in the given image.\n\n    @param image Source image\n    @param features Found features\n    @param rois Regions of interest\n\n    @sa detail::ImageFeatures, Rect_\n    */\n    void operator ()(InputArray image, ImageFeatures &features, const std::vector<cv::Rect> &rois);\n    /** @brief Frees unused memory allocated before if there is any. */\n    virtual void collectGarbage() {}\n\nprotected:\n    /** @brief This method must implement features finding logic in order to make the wrappers\n    detail::FeaturesFinder::operator()_ work.\n\n    @param image Source image\n    @param features Found features\n\n    @sa detail::ImageFeatures */\n    virtual void find(InputArray image, ImageFeatures &features) = 0;\n};\n\n/** @brief SURF features finder.\n\n@sa detail::FeaturesFinder, SURF\n*/\nclass CV_EXPORTS SurfFeaturesFinder : public FeaturesFinder\n{\npublic:\n    SurfFeaturesFinder(double hess_thresh = 300., int num_octaves = 3, int num_layers = 4,\n                       int num_octaves_descr = /*4*/3, int num_layers_descr = /*2*/4);\n\nprivate:\n    void find(InputArray image, ImageFeatures &features);\n\n    Ptr<FeatureDetector> detector_;\n    Ptr<DescriptorExtractor> extractor_;\n    Ptr<Feature2D> surf;\n};\n\n/** @brief ORB features finder. :\n\n@sa detail::FeaturesFinder, ORB\n*/\nclass CV_EXPORTS OrbFeaturesFinder : public FeaturesFinder\n{\npublic:\n    OrbFeaturesFinder(Size _grid_size = Size(3,1), int nfeatures=1500, float scaleFactor=1.3f, int nlevels=5);\n\nprivate:\n    void find(InputArray image, ImageFeatures &features);\n\n    Ptr<ORB> orb;\n    Size grid_size;\n};\n\n\n#ifdef HAVE_OPENCV_XFEATURES2D\nclass CV_EXPORTS SurfFeaturesFinderGpu : public FeaturesFinder\n{\npublic:\n    SurfFeaturesFinderGpu(double hess_thresh = 300., int num_octaves = 3, int num_layers = 4,\n                          int num_octaves_descr = 4, int num_layers_descr = 2);\n\n    void collectGarbage();\n\nprivate:\n    void find(InputArray image, ImageFeatures &features);\n\n    cuda::GpuMat image_;\n    cuda::GpuMat gray_image_;\n    cuda::SURF_CUDA surf_;\n    cuda::GpuMat keypoints_;\n    cuda::GpuMat descriptors_;\n    int num_octaves_, num_layers_;\n    int num_octaves_descr_, num_layers_descr_;\n};\n#endif\n\n/** @brief Structure containing information about matches between two images.\n\nIt's assumed that there is a homography between those images.\n*/\nstruct CV_EXPORTS MatchesInfo\n{\n    MatchesInfo();\n    MatchesInfo(const MatchesInfo &other);\n    const MatchesInfo& operator =(const MatchesInfo &other);\n\n    int src_img_idx, dst_img_idx;       //!< Images indices (optional)\n    std::vector<DMatch> matches;\n    std::vector<uchar> inliers_mask;    //!< Geometrically consistent matches mask\n    int num_inliers;                    //!< Number of geometrically consistent matches\n    Mat H;                              //!< Estimated homography\n    double confidence;                  //!< Confidence two images are from the same panorama\n};\n\n/** @brief Feature matchers base class. */\nclass CV_EXPORTS FeaturesMatcher\n{\npublic:\n    virtual ~FeaturesMatcher() {}\n\n    /** @overload\n    @param features1 First image features\n    @param features2 Second image features\n    @param matches_info Found matches\n    */\n    void operator ()(const ImageFeatures &features1, const ImageFeatures &features2,\n                     MatchesInfo& matches_info) { match(features1, features2, matches_info); }\n\n    /** @brief Performs images matching.\n\n    @param features Features of the source images\n    @param pairwise_matches Found pairwise matches\n    @param mask Mask indicating which image pairs must be matched\n\n    The function is parallelized with the TBB library.\n\n    @sa detail::MatchesInfo\n    */\n    void operator ()(const std::vector<ImageFeatures> &features, std::vector<MatchesInfo> &pairwise_matches,\n                     const cv::UMat &mask = cv::UMat());\n\n    /** @return True, if it's possible to use the same matcher instance in parallel, false otherwise\n    */\n    bool isThreadSafe() const { return is_thread_safe_; }\n\n    /** @brief Frees unused memory allocated before if there is any.\n    */\n    virtual void collectGarbage() {}\n\nprotected:\n    FeaturesMatcher(bool is_thread_safe = false) : is_thread_safe_(is_thread_safe) {}\n\n    /** @brief This method must implement matching logic in order to make the wrappers\n    detail::FeaturesMatcher::operator()_ work.\n\n    @param features1 first image features\n    @param features2 second image features\n    @param matches_info found matches\n     */\n    virtual void match(const ImageFeatures &features1, const ImageFeatures &features2,\n                       MatchesInfo& matches_info) = 0;\n\n    bool is_thread_safe_;\n};\n\n/** @brief Features matcher which finds two best matches for each feature and leaves the best one only if the\nratio between descriptor distances is greater than the threshold match_conf\n\n@sa detail::FeaturesMatcher\n */\nclass CV_EXPORTS BestOf2NearestMatcher : public FeaturesMatcher\n{\npublic:\n    /** @brief Constructs a \"best of 2 nearest\" matcher.\n\n    @param try_use_gpu Should try to use GPU or not\n    @param match_conf Match distances ration threshold\n    @param num_matches_thresh1 Minimum number of matches required for the 2D projective transform\n    estimation used in the inliers classification step\n    @param num_matches_thresh2 Minimum number of matches required for the 2D projective transform\n    re-estimation on inliers\n     */\n    BestOf2NearestMatcher(bool try_use_gpu = false, float match_conf = 0.3f, int num_matches_thresh1 = 6,\n                          int num_matches_thresh2 = 6);\n\n    void collectGarbage();\n\nprotected:\n    void match(const ImageFeatures &features1, const ImageFeatures &features2, MatchesInfo &matches_info);\n\n    int num_matches_thresh1_;\n    int num_matches_thresh2_;\n    Ptr<FeaturesMatcher> impl_;\n};\n\nclass CV_EXPORTS BestOf2NearestRangeMatcher : public BestOf2NearestMatcher\n{\npublic:\n    BestOf2NearestRangeMatcher(int range_width = 5, bool try_use_gpu = false, float match_conf = 0.3f,\n                            int num_matches_thresh1 = 6, int num_matches_thresh2 = 6);\n\n    void operator ()(const std::vector<ImageFeatures> &features, std::vector<MatchesInfo> &pairwise_matches,\n                     const cv::UMat &mask = cv::UMat());\n\n\nprotected:\n    int range_width_;\n};\n\n//! @} stitching_match\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_MATCHERS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/motion_estimators.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_MOTION_ESTIMATORS_HPP__\n#define __OPENCV_STITCHING_MOTION_ESTIMATORS_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"matchers.hpp\"\n#include \"util.hpp\"\n#include \"camera.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching_rotation\n//! @{\n\n/** @brief Rotation estimator base class.\n\nIt takes features of all images, pairwise matches between all images and estimates rotations of all\ncameras.\n\n@note The coordinate system origin is implementation-dependent, but you can always normalize the\nrotations in respect to the first camera, for instance. :\n */\nclass CV_EXPORTS Estimator\n{\npublic:\n    virtual ~Estimator() {}\n\n    /** @brief Estimates camera parameters.\n\n    @param features Features of images\n    @param pairwise_matches Pairwise matches of images\n    @param cameras Estimated camera parameters\n    @return True in case of success, false otherwise\n     */\n    bool operator ()(const std::vector<ImageFeatures> &features,\n                     const std::vector<MatchesInfo> &pairwise_matches,\n                     std::vector<CameraParams> &cameras)\n        { return estimate(features, pairwise_matches, cameras); }\n\nprotected:\n    /** @brief This method must implement camera parameters estimation logic in order to make the wrapper\n    detail::Estimator::operator()_ work.\n\n    @param features Features of images\n    @param pairwise_matches Pairwise matches of images\n    @param cameras Estimated camera parameters\n    @return True in case of success, false otherwise\n     */\n    virtual bool estimate(const std::vector<ImageFeatures> &features,\n                          const std::vector<MatchesInfo> &pairwise_matches,\n                          std::vector<CameraParams> &cameras) = 0;\n};\n\n/** @brief Homography based rotation estimator.\n */\nclass CV_EXPORTS HomographyBasedEstimator : public Estimator\n{\npublic:\n    HomographyBasedEstimator(bool is_focals_estimated = false)\n        : is_focals_estimated_(is_focals_estimated) {}\n\nprivate:\n    virtual bool estimate(const std::vector<ImageFeatures> &features,\n                          const std::vector<MatchesInfo> &pairwise_matches,\n                          std::vector<CameraParams> &cameras);\n\n    bool is_focals_estimated_;\n};\n\n/** @brief Base class for all camera parameters refinement methods.\n */\nclass CV_EXPORTS BundleAdjusterBase : public Estimator\n{\npublic:\n    const Mat refinementMask() const { return refinement_mask_.clone(); }\n    void setRefinementMask(const Mat &mask)\n    {\n        CV_Assert(mask.type() == CV_8U && mask.size() == Size(3, 3));\n        refinement_mask_ = mask.clone();\n    }\n\n    double confThresh() const { return conf_thresh_; }\n    void setConfThresh(double conf_thresh) { conf_thresh_ = conf_thresh; }\n\n    TermCriteria termCriteria() { return term_criteria_; }\n    void setTermCriteria(const TermCriteria& term_criteria) { term_criteria_ = term_criteria; }\n\nprotected:\n    /** @brief Construct a bundle adjuster base instance.\n\n    @param num_params_per_cam Number of parameters per camera\n    @param num_errs_per_measurement Number of error terms (components) per match\n     */\n    BundleAdjusterBase(int num_params_per_cam, int num_errs_per_measurement)\n        : num_params_per_cam_(num_params_per_cam),\n          num_errs_per_measurement_(num_errs_per_measurement)\n    {\n        setRefinementMask(Mat::ones(3, 3, CV_8U));\n        setConfThresh(1.);\n        setTermCriteria(TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 1000, DBL_EPSILON));\n    }\n\n    // Runs bundle adjustment\n    virtual bool estimate(const std::vector<ImageFeatures> &features,\n                          const std::vector<MatchesInfo> &pairwise_matches,\n                          std::vector<CameraParams> &cameras);\n\n    /** @brief Sets initial camera parameter to refine.\n\n    @param cameras Camera parameters\n     */\n    virtual void setUpInitialCameraParams(const std::vector<CameraParams> &cameras) = 0;\n    /** @brief Gets the refined camera parameters.\n\n    @param cameras Refined camera parameters\n     */\n    virtual void obtainRefinedCameraParams(std::vector<CameraParams> &cameras) const = 0;\n    /** @brief Calculates error vector.\n\n    @param err Error column-vector of length total_num_matches \\* num_errs_per_measurement\n     */\n    virtual void calcError(Mat &err) = 0;\n    /** @brief Calculates the cost function jacobian.\n\n    @param jac Jacobian matrix of dimensions\n    (total_num_matches \\* num_errs_per_measurement) x (num_images \\* num_params_per_cam)\n     */\n    virtual void calcJacobian(Mat &jac) = 0;\n\n    // 3x3 8U mask, where 0 means don't refine respective parameter, != 0 means refine\n    Mat refinement_mask_;\n\n    int num_images_;\n    int total_num_matches_;\n\n    int num_params_per_cam_;\n    int num_errs_per_measurement_;\n\n    const ImageFeatures *features_;\n    const MatchesInfo *pairwise_matches_;\n\n    // Threshold to filter out poorly matched image pairs\n    double conf_thresh_;\n\n    //Levenberg–Marquardt algorithm termination criteria\n    TermCriteria term_criteria_;\n\n    // Camera parameters matrix (CV_64F)\n    Mat cam_params_;\n\n    // Connected images pairs\n    std::vector<std::pair<int,int> > edges_;\n};\n\n\n/** @brief Implementation of the camera parameters refinement algorithm which minimizes sum of the reprojection\nerror squares\n\nIt can estimate focal length, aspect ratio, principal point.\nYou can affect only on them via the refinement mask.\n */\nclass CV_EXPORTS BundleAdjusterReproj : public BundleAdjusterBase\n{\npublic:\n    BundleAdjusterReproj() : BundleAdjusterBase(7, 2) {}\n\nprivate:\n    void setUpInitialCameraParams(const std::vector<CameraParams> &cameras);\n    void obtainRefinedCameraParams(std::vector<CameraParams> &cameras) const;\n    void calcError(Mat &err);\n    void calcJacobian(Mat &jac);\n\n    Mat err1_, err2_;\n};\n\n\n/** @brief Implementation of the camera parameters refinement algorithm which minimizes sum of the distances\nbetween the rays passing through the camera center and a feature. :\n\nIt can estimate focal length. It ignores the refinement mask for now.\n */\nclass CV_EXPORTS BundleAdjusterRay : public BundleAdjusterBase\n{\npublic:\n    BundleAdjusterRay() : BundleAdjusterBase(4, 3) {}\n\nprivate:\n    void setUpInitialCameraParams(const std::vector<CameraParams> &cameras);\n    void obtainRefinedCameraParams(std::vector<CameraParams> &cameras) const;\n    void calcError(Mat &err);\n    void calcJacobian(Mat &jac);\n\n    Mat err1_, err2_;\n};\n\n\nenum WaveCorrectKind\n{\n    WAVE_CORRECT_HORIZ,\n    WAVE_CORRECT_VERT\n};\n\n/** @brief Tries to make panorama more horizontal (or vertical).\n\n@param rmats Camera rotation matrices.\n@param kind Correction kind, see detail::WaveCorrectKind.\n */\nvoid CV_EXPORTS waveCorrect(std::vector<Mat> &rmats, WaveCorrectKind kind);\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Auxiliary functions\n\n// Returns matches graph representation in DOT language\nString CV_EXPORTS matchesGraphAsString(std::vector<String> &pathes, std::vector<MatchesInfo> &pairwise_matches,\n                                            float conf_threshold);\n\nstd::vector<int> CV_EXPORTS leaveBiggestComponent(\n        std::vector<ImageFeatures> &features,\n        std::vector<MatchesInfo> &pairwise_matches,\n        float conf_threshold);\n\nvoid CV_EXPORTS findMaxSpanningTree(\n        int num_images, const std::vector<MatchesInfo> &pairwise_matches,\n        Graph &span_tree, std::vector<int> &centers);\n\n//! @} stitching_rotation\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_MOTION_ESTIMATORS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/seam_finders.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_SEAM_FINDERS_HPP__\n#define __OPENCV_STITCHING_SEAM_FINDERS_HPP__\n\n#include <set>\n#include \"opencv2/core.hpp\"\n#include \"opencv2/opencv_modules.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching_seam\n//! @{\n\n/** @brief Base class for a seam estimator.\n */\nclass CV_EXPORTS SeamFinder\n{\npublic:\n    virtual ~SeamFinder() {}\n    /** @brief Estimates seams.\n\n    @param src Source images\n    @param corners Source image top-left corners\n    @param masks Source image masks to update\n     */\n    virtual void find(const std::vector<UMat> &src, const std::vector<Point> &corners,\n                      std::vector<UMat> &masks) = 0;\n};\n\n/** @brief Stub seam estimator which does nothing.\n */\nclass CV_EXPORTS NoSeamFinder : public SeamFinder\n{\npublic:\n    void find(const std::vector<UMat>&, const std::vector<Point>&, std::vector<UMat>&) {}\n};\n\n/** @brief Base class for all pairwise seam estimators.\n */\nclass CV_EXPORTS PairwiseSeamFinder : public SeamFinder\n{\npublic:\n    virtual void find(const std::vector<UMat> &src, const std::vector<Point> &corners,\n                      std::vector<UMat> &masks);\n\nprotected:\n    void run();\n    /** @brief Resolves masks intersection of two specified images in the given ROI.\n\n    @param first First image index\n    @param second Second image index\n    @param roi Region of interest\n     */\n    virtual void findInPair(size_t first, size_t second, Rect roi) = 0;\n\n    std::vector<UMat> images_;\n    std::vector<Size> sizes_;\n    std::vector<Point> corners_;\n    std::vector<UMat> masks_;\n};\n\n/** @brief Voronoi diagram-based seam estimator.\n */\nclass CV_EXPORTS VoronoiSeamFinder : public PairwiseSeamFinder\n{\npublic:\n    virtual void find(const std::vector<UMat> &src, const std::vector<Point> &corners,\n                      std::vector<UMat> &masks);\n    virtual void find(const std::vector<Size> &size, const std::vector<Point> &corners,\n                      std::vector<UMat> &masks);\nprivate:\n    void findInPair(size_t first, size_t second, Rect roi);\n};\n\n\nclass CV_EXPORTS DpSeamFinder : public SeamFinder\n{\npublic:\n    enum CostFunction { COLOR, COLOR_GRAD };\n\n    DpSeamFinder(CostFunction costFunc = COLOR);\n\n    CostFunction costFunction() const { return costFunc_; }\n    void setCostFunction(CostFunction val) { costFunc_ = val; }\n\n    virtual void find(const std::vector<UMat> &src, const std::vector<Point> &corners,\n                      std::vector<UMat> &masks);\n\nprivate:\n    enum ComponentState\n    {\n        FIRST = 1, SECOND = 2, INTERS = 4,\n        INTERS_FIRST = INTERS | FIRST,\n        INTERS_SECOND = INTERS | SECOND\n    };\n\n    class ImagePairLess\n    {\n    public:\n        ImagePairLess(const std::vector<Mat> &images, const std::vector<Point> &corners)\n            : src_(&images[0]), corners_(&corners[0]) {}\n\n        bool operator() (const std::pair<size_t, size_t> &l, const std::pair<size_t, size_t> &r) const\n        {\n            Point c1 = corners_[l.first] + Point(src_[l.first].cols / 2, src_[l.first].rows / 2);\n            Point c2 = corners_[l.second] + Point(src_[l.second].cols / 2, src_[l.second].rows / 2);\n            int d1 = (c1 - c2).dot(c1 - c2);\n\n            c1 = corners_[r.first] + Point(src_[r.first].cols / 2, src_[r.first].rows / 2);\n            c2 = corners_[r.second] + Point(src_[r.second].cols / 2, src_[r.second].rows / 2);\n            int d2 = (c1 - c2).dot(c1 - c2);\n\n            return d1 < d2;\n        }\n\n    private:\n        const Mat *src_;\n        const Point *corners_;\n    };\n\n    class ClosePoints\n    {\n    public:\n        ClosePoints(int minDist) : minDist_(minDist) {}\n\n        bool operator() (const Point &p1, const Point &p2) const\n        {\n            int dist2 = (p1.x-p2.x) * (p1.x-p2.x) + (p1.y-p2.y) * (p1.y-p2.y);\n            return dist2 < minDist_ * minDist_;\n        }\n\n    private:\n        int minDist_;\n    };\n\n    void process(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2,  Mat &mask1, Mat &mask2);\n\n    void findComponents();\n\n    void findEdges();\n\n    void resolveConflicts(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2, Mat &mask1, Mat &mask2);\n\n    void computeGradients(const Mat &image1, const Mat &image2);\n\n    bool hasOnlyOneNeighbor(int comp);\n\n    bool closeToContour(int y, int x, const Mat_<uchar> &contourMask);\n\n    bool getSeamTips(int comp1, int comp2, Point &p1, Point &p2);\n\n    void computeCosts(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2,\n            int comp, Mat_<float> &costV, Mat_<float> &costH);\n\n    bool estimateSeam(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2, int comp,\n            Point p1, Point p2, std::vector<Point> &seam, bool &isHorizontal);\n\n    void updateLabelsUsingSeam(\n            int comp1, int comp2, const std::vector<Point> &seam, bool isHorizontalSeam);\n\n    CostFunction costFunc_;\n\n    // processing images pair data\n    Point unionTl_, unionBr_;\n    Size unionSize_;\n    Mat_<uchar> mask1_, mask2_;\n    Mat_<uchar> contour1mask_, contour2mask_;\n    Mat_<float> gradx1_, grady1_;\n    Mat_<float> gradx2_, grady2_;\n\n    // components data\n    int ncomps_;\n    Mat_<int> labels_;\n    std::vector<ComponentState> states_;\n    std::vector<Point> tls_, brs_;\n    std::vector<std::vector<Point> > contours_;\n    std::set<std::pair<int, int> > edges_;\n};\n\n/** @brief Base class for all minimum graph-cut-based seam estimators.\n */\nclass CV_EXPORTS GraphCutSeamFinderBase\n{\npublic:\n    enum CostType { COST_COLOR, COST_COLOR_GRAD };\n};\n\n/** @brief Minimum graph cut-based seam estimator. See details in @cite V03 .\n */\nclass CV_EXPORTS GraphCutSeamFinder : public GraphCutSeamFinderBase, public SeamFinder\n{\npublic:\n    GraphCutSeamFinder(int cost_type = COST_COLOR_GRAD, float terminal_cost = 10000.f,\n                       float bad_region_penalty = 1000.f);\n\n    ~GraphCutSeamFinder();\n\n    void find(const std::vector<UMat> &src, const std::vector<Point> &corners,\n              std::vector<UMat> &masks);\n\nprivate:\n    // To avoid GCGraph dependency\n    class Impl;\n    Ptr<PairwiseSeamFinder> impl_;\n};\n\n\n#ifdef HAVE_OPENCV_CUDALEGACY\nclass CV_EXPORTS GraphCutSeamFinderGpu : public GraphCutSeamFinderBase, public PairwiseSeamFinder\n{\npublic:\n    GraphCutSeamFinderGpu(int cost_type = COST_COLOR_GRAD, float terminal_cost = 10000.f,\n                          float bad_region_penalty = 1000.f)\n                          : cost_type_(cost_type), terminal_cost_(terminal_cost),\n                            bad_region_penalty_(bad_region_penalty) {}\n\n    void find(const std::vector<cv::UMat> &src, const std::vector<cv::Point> &corners,\n              std::vector<cv::UMat> &masks);\n    void findInPair(size_t first, size_t second, Rect roi);\n\nprivate:\n    void setGraphWeightsColor(const cv::Mat &img1, const cv::Mat &img2, const cv::Mat &mask1, const cv::Mat &mask2,\n                              cv::Mat &terminals, cv::Mat &leftT, cv::Mat &rightT, cv::Mat &top, cv::Mat &bottom);\n    void setGraphWeightsColorGrad(const cv::Mat &img1, const cv::Mat &img2, const cv::Mat &dx1, const cv::Mat &dx2,\n                                  const cv::Mat &dy1, const cv::Mat &dy2, const cv::Mat &mask1, const cv::Mat &mask2,\n                                  cv::Mat &terminals, cv::Mat &leftT, cv::Mat &rightT, cv::Mat &top, cv::Mat &bottom);\n    std::vector<Mat> dx_, dy_;\n    int cost_type_;\n    float terminal_cost_;\n    float bad_region_penalty_;\n};\n#endif\n\n//! @}\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_SEAM_FINDERS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/timelapsers.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n\n#ifndef __OPENCV_STITCHING_TIMELAPSERS_HPP__\n#define __OPENCV_STITCHING_TIMELAPSERS_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching\n//! @{\n\n//  Base Timelapser class, takes a sequence of images, applies appropriate shift, stores result in dst_.\n\nclass CV_EXPORTS Timelapser\n{\npublic:\n\n    enum {AS_IS, CROP};\n\n    virtual ~Timelapser() {}\n\n    static Ptr<Timelapser> createDefault(int type);\n\n    virtual void initialize(const std::vector<Point> &corners, const std::vector<Size> &sizes);\n    virtual void process(InputArray img, InputArray mask, Point tl);\n    virtual const UMat& getDst() {return dst_;}\n\nprotected:\n\n    virtual bool test_point(Point pt);\n\n    UMat dst_;\n    Rect dst_roi_;\n};\n\n\nclass CV_EXPORTS TimelapserCrop : public Timelapser\n{\npublic:\n    virtual void initialize(const std::vector<Point> &corners, const std::vector<Size> &sizes);\n};\n\n//! @}\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_TIMELAPSERS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/util.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_UTIL_HPP__\n#define __OPENCV_STITCHING_UTIL_HPP__\n\n#include <list>\n#include \"opencv2/core.hpp\"\n\n#ifndef ENABLE_LOG\n#define ENABLE_LOG 0\n#endif\n\n// TODO remove LOG macros, add logging class\n#if ENABLE_LOG\n#ifdef ANDROID\n  #include <iostream>\n  #include <sstream>\n  #include <android/log.h>\n  #define LOG_STITCHING_MSG(msg) \\\n    do { \\\n        Stringstream _os; \\\n        _os << msg; \\\n       __android_log_print(ANDROID_LOG_DEBUG, \"STITCHING\", \"%s\", _os.str().c_str()); \\\n    } while(0);\n#else\n  #include <iostream>\n  #define LOG_STITCHING_MSG(msg) for(;;) { std::cout << msg; std::cout.flush(); break; }\n#endif\n#else\n  #define LOG_STITCHING_MSG(msg)\n#endif\n\n#define LOG_(_level, _msg)                     \\\n    for(;;)                                    \\\n    {                                          \\\n        using namespace std;                   \\\n        if ((_level) >= ::cv::detail::stitchingLogLevel()) \\\n        {                                      \\\n            LOG_STITCHING_MSG(_msg);           \\\n        }                                      \\\n    break;                                 \\\n    }\n\n\n#define LOG(msg) LOG_(1, msg)\n#define LOG_CHAT(msg) LOG_(0, msg)\n\n#define LOGLN(msg) LOG(msg << std::endl)\n#define LOGLN_CHAT(msg) LOG_CHAT(msg << std::endl)\n\n//#if DEBUG_LOG_CHAT\n//  #define LOG_CHAT(msg) LOG(msg)\n//  #define LOGLN_CHAT(msg) LOGLN(msg)\n//#else\n//  #define LOG_CHAT(msg) do{}while(0)\n//  #define LOGLN_CHAT(msg) do{}while(0)\n//#endif\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching\n//! @{\n\nclass CV_EXPORTS DisjointSets\n{\npublic:\n    DisjointSets(int elem_count = 0) { createOneElemSets(elem_count); }\n\n    void createOneElemSets(int elem_count);\n    int findSetByElem(int elem);\n    int mergeSets(int set1, int set2);\n\n    std::vector<int> parent;\n    std::vector<int> size;\n\nprivate:\n    std::vector<int> rank_;\n};\n\n\nstruct CV_EXPORTS GraphEdge\n{\n    GraphEdge(int from, int to, float weight);\n    bool operator <(const GraphEdge& other) const { return weight < other.weight; }\n    bool operator >(const GraphEdge& other) const { return weight > other.weight; }\n\n    int from, to;\n    float weight;\n};\n\ninline GraphEdge::GraphEdge(int _from, int _to, float _weight) : from(_from), to(_to), weight(_weight) {}\n\n\nclass CV_EXPORTS Graph\n{\npublic:\n    Graph(int num_vertices = 0) { create(num_vertices); }\n    void create(int num_vertices) { edges_.assign(num_vertices, std::list<GraphEdge>()); }\n    int numVertices() const { return static_cast<int>(edges_.size()); }\n    void addEdge(int from, int to, float weight);\n    template <typename B> B forEach(B body) const;\n    template <typename B> B walkBreadthFirst(int from, B body) const;\n\nprivate:\n    std::vector< std::list<GraphEdge> > edges_;\n};\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Auxiliary functions\n\nCV_EXPORTS bool overlapRoi(Point tl1, Point tl2, Size sz1, Size sz2, Rect &roi);\nCV_EXPORTS Rect resultRoi(const std::vector<Point> &corners, const std::vector<UMat> &images);\nCV_EXPORTS Rect resultRoi(const std::vector<Point> &corners, const std::vector<Size> &sizes);\nCV_EXPORTS Rect resultRoiIntersection(const std::vector<Point> &corners, const std::vector<Size> &sizes);\nCV_EXPORTS Point resultTl(const std::vector<Point> &corners);\n\n// Returns random 'count' element subset of the {0,1,...,size-1} set\nCV_EXPORTS void selectRandomSubset(int count, int size, std::vector<int> &subset);\n\nCV_EXPORTS int& stitchingLogLevel();\n\n//! @}\n\n} // namespace detail\n} // namespace cv\n\n#include \"util_inl.hpp\"\n\n#endif // __OPENCV_STITCHING_UTIL_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/util_inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_UTIL_INL_HPP__\n#define __OPENCV_STITCHING_UTIL_INL_HPP__\n\n#include <queue>\n#include \"opencv2/core.hpp\"\n#include \"util.hpp\" // Make your IDE see declarations\n\n//! @cond IGNORED\n\nnamespace cv {\nnamespace detail {\n\ntemplate <typename B>\nB Graph::forEach(B body) const\n{\n    for (int i = 0; i < numVertices(); ++i)\n    {\n        std::list<GraphEdge>::const_iterator edge = edges_[i].begin();\n        for (; edge != edges_[i].end(); ++edge)\n            body(*edge);\n    }\n    return body;\n}\n\n\ntemplate <typename B>\nB Graph::walkBreadthFirst(int from, B body) const\n{\n    std::vector<bool> was(numVertices(), false);\n    std::queue<int> vertices;\n\n    was[from] = true;\n    vertices.push(from);\n\n    while (!vertices.empty())\n    {\n        int vertex = vertices.front();\n        vertices.pop();\n\n        std::list<GraphEdge>::const_iterator edge = edges_[vertex].begin();\n        for (; edge != edges_[vertex].end(); ++edge)\n        {\n            if (!was[edge->to])\n            {\n                body(*edge);\n                was[edge->to] = true;\n                vertices.push(edge->to);\n            }\n        }\n    }\n\n    return body;\n}\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Some auxiliary math functions\n\nstatic inline\nfloat normL2(const Point3f& a)\n{\n    return a.x * a.x + a.y * a.y + a.z * a.z;\n}\n\n\nstatic inline\nfloat normL2(const Point3f& a, const Point3f& b)\n{\n    return normL2(a - b);\n}\n\n\nstatic inline\ndouble normL2sq(const Mat &r)\n{\n    return r.dot(r);\n}\n\n\nstatic inline int sqr(int x) { return x * x; }\nstatic inline float sqr(float x) { return x * x; }\nstatic inline double sqr(double x) { return x * x; }\n\n} // namespace detail\n} // namespace cv\n\n//! @endcond\n\n#endif // __OPENCV_STITCHING_UTIL_INL_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/warpers.hpp",
    "content": " /*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_WARPERS_HPP__\n#define __OPENCV_STITCHING_WARPERS_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/core/cuda.hpp\"\n#include \"opencv2/imgproc.hpp\"\n#include \"opencv2/opencv_modules.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n//! @addtogroup stitching_warp\n//! @{\n\n/** @brief Rotation-only model image warper interface.\n */\nclass CV_EXPORTS RotationWarper\n{\npublic:\n    virtual ~RotationWarper() {}\n\n    /** @brief Projects the image point.\n\n    @param pt Source point\n    @param K Camera intrinsic parameters\n    @param R Camera rotation matrix\n    @return Projected point\n     */\n    virtual Point2f warpPoint(const Point2f &pt, InputArray K, InputArray R) = 0;\n\n    /** @brief Builds the projection maps according to the given camera data.\n\n    @param src_size Source image size\n    @param K Camera intrinsic parameters\n    @param R Camera rotation matrix\n    @param xmap Projection map for the x axis\n    @param ymap Projection map for the y axis\n    @return Projected image minimum bounding box\n     */\n    virtual Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap) = 0;\n\n    /** @brief Projects the image.\n\n    @param src Source image\n    @param K Camera intrinsic parameters\n    @param R Camera rotation matrix\n    @param interp_mode Interpolation mode\n    @param border_mode Border extrapolation mode\n    @param dst Projected image\n    @return Project image top-left corner\n     */\n    virtual Point warp(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,\n                       OutputArray dst) = 0;\n\n    /** @brief Projects the image backward.\n\n    @param src Projected image\n    @param K Camera intrinsic parameters\n    @param R Camera rotation matrix\n    @param interp_mode Interpolation mode\n    @param border_mode Border extrapolation mode\n    @param dst_size Backward-projected image size\n    @param dst Backward-projected image\n     */\n    virtual void warpBackward(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,\n                              Size dst_size, OutputArray dst) = 0;\n\n    /**\n    @param src_size Source image bounding box\n    @param K Camera intrinsic parameters\n    @param R Camera rotation matrix\n    @return Projected image minimum bounding box\n     */\n    virtual Rect warpRoi(Size src_size, InputArray K, InputArray R) = 0;\n\n    virtual float getScale() const { return 1.f; }\n    virtual void setScale(float) {}\n};\n\n/** @brief Base class for warping logic implementation.\n */\nstruct CV_EXPORTS ProjectorBase\n{\n    void setCameraParams(InputArray K = Mat::eye(3, 3, CV_32F),\n                         InputArray R = Mat::eye(3, 3, CV_32F),\n                         InputArray T = Mat::zeros(3, 1, CV_32F));\n\n    float scale;\n    float k[9];\n    float rinv[9];\n    float r_kinv[9];\n    float k_rinv[9];\n    float t[3];\n};\n\n/** @brief Base class for rotation-based warper using a detail::ProjectorBase_ derived class.\n */\ntemplate <class P>\nclass CV_EXPORTS RotationWarperBase : public RotationWarper\n{\npublic:\n    Point2f warpPoint(const Point2f &pt, InputArray K, InputArray R);\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap);\n\n    Point warp(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,\n               OutputArray dst);\n\n    void warpBackward(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,\n                      Size dst_size, OutputArray dst);\n\n    Rect warpRoi(Size src_size, InputArray K, InputArray R);\n\n    float getScale() const { return projector_.scale; }\n    void setScale(float val) { projector_.scale = val; }\n\nprotected:\n\n    // Detects ROI of the destination image. It's correct for any projection.\n    virtual void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n\n    // Detects ROI of the destination image by walking over image border.\n    // Correctness for any projection isn't guaranteed.\n    void detectResultRoiByBorder(Size src_size, Point &dst_tl, Point &dst_br);\n\n    P projector_;\n};\n\n\nstruct CV_EXPORTS PlaneProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n/** @brief Warper that maps an image onto the z = 1 plane.\n */\nclass CV_EXPORTS PlaneWarper : public RotationWarperBase<PlaneProjector>\n{\npublic:\n    /** @brief Construct an instance of the plane warper class.\n\n    @param scale Projected image scale multiplier\n     */\n    PlaneWarper(float scale = 1.f) { projector_.scale = scale; }\n\n    Point2f warpPoint(const Point2f &pt, InputArray K, InputArray R);\n    Point2f warpPoint(const Point2f &pt, InputArray K, InputArray R, InputArray T);\n\n    virtual Rect buildMaps(Size src_size, InputArray K, InputArray R, InputArray T, OutputArray xmap, OutputArray ymap);\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap);\n\n    Point warp(InputArray src, InputArray K, InputArray R,\n               int interp_mode, int border_mode, OutputArray dst);\n    virtual Point warp(InputArray src, InputArray K, InputArray R, InputArray T, int interp_mode, int border_mode,\n               OutputArray dst);\n\n    Rect warpRoi(Size src_size, InputArray K, InputArray R);\n    Rect warpRoi(Size src_size, InputArray K, InputArray R, InputArray T);\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n};\n\n\nstruct CV_EXPORTS SphericalProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\n/** @brief Warper that maps an image onto the unit sphere located at the origin.\n\n Projects image onto unit sphere with origin at (0, 0, 0).\n Poles are located at (0, -1, 0) and (0, 1, 0) points.\n*/\nclass CV_EXPORTS SphericalWarper : public RotationWarperBase<SphericalProjector>\n{\npublic:\n    /** @brief Construct an instance of the spherical warper class.\n\n    @param scale Projected image scale multiplier\n     */\n    SphericalWarper(float scale) { projector_.scale = scale; }\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap);\n    Point warp(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode, OutputArray dst);\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n};\n\n\nstruct CV_EXPORTS CylindricalProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\n/** @brief Warper that maps an image onto the x\\*x + z\\*z = 1 cylinder.\n */\nclass CV_EXPORTS CylindricalWarper : public RotationWarperBase<CylindricalProjector>\n{\npublic:\n    /** @brief Construct an instance of the cylindrical warper class.\n\n    @param scale Projected image scale multiplier\n     */\n    CylindricalWarper(float scale) { projector_.scale = scale; }\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap);\n    Point warp(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode, OutputArray dst);\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n    {\n        RotationWarperBase<CylindricalProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);\n    }\n};\n\n\nstruct CV_EXPORTS FisheyeProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS FisheyeWarper : public RotationWarperBase<FisheyeProjector>\n{\npublic:\n    FisheyeWarper(float scale) { projector_.scale = scale; }\n};\n\n\nstruct CV_EXPORTS StereographicProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS StereographicWarper : public RotationWarperBase<StereographicProjector>\n{\npublic:\n    StereographicWarper(float scale) { projector_.scale = scale; }\n};\n\n\nstruct CV_EXPORTS CompressedRectilinearProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS CompressedRectilinearWarper : public RotationWarperBase<CompressedRectilinearProjector>\n{\npublic:\n    CompressedRectilinearWarper(float scale, float A = 1, float B = 1)\n    {\n        projector_.a = A;\n        projector_.b = B;\n        projector_.scale = scale;\n    }\n};\n\n\nstruct CV_EXPORTS CompressedRectilinearPortraitProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS CompressedRectilinearPortraitWarper : public RotationWarperBase<CompressedRectilinearPortraitProjector>\n{\npublic:\n   CompressedRectilinearPortraitWarper(float scale, float A = 1, float B = 1)\n   {\n       projector_.a = A;\n       projector_.b = B;\n       projector_.scale = scale;\n   }\n};\n\n\nstruct CV_EXPORTS PaniniProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PaniniWarper : public RotationWarperBase<PaniniProjector>\n{\npublic:\n   PaniniWarper(float scale, float A = 1, float B = 1)\n   {\n       projector_.a = A;\n       projector_.b = B;\n       projector_.scale = scale;\n   }\n};\n\n\nstruct CV_EXPORTS PaniniPortraitProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PaniniPortraitWarper : public RotationWarperBase<PaniniPortraitProjector>\n{\npublic:\n   PaniniPortraitWarper(float scale, float A = 1, float B = 1)\n   {\n       projector_.a = A;\n       projector_.b = B;\n       projector_.scale = scale;\n   }\n\n};\n\n\nstruct CV_EXPORTS MercatorProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS MercatorWarper : public RotationWarperBase<MercatorProjector>\n{\npublic:\n    MercatorWarper(float scale) { projector_.scale = scale; }\n};\n\n\nstruct CV_EXPORTS TransverseMercatorProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS TransverseMercatorWarper : public RotationWarperBase<TransverseMercatorProjector>\n{\npublic:\n    TransverseMercatorWarper(float scale) { projector_.scale = scale; }\n};\n\n\nclass CV_EXPORTS PlaneWarperGpu : public PlaneWarper\n{\npublic:\n    PlaneWarperGpu(float scale = 1.f) : PlaneWarper(scale) {}\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, InputArray T, OutputArray xmap, OutputArray ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, T, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Point warp(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,\n               OutputArray dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Point warp(InputArray src, InputArray K, InputArray R, InputArray T, int interp_mode, int border_mode,\n               OutputArray dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, T, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, cuda::GpuMat & xmap, cuda::GpuMat & ymap);\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, InputArray T, cuda::GpuMat & xmap, cuda::GpuMat & ymap);\n\n    Point warp(const cuda::GpuMat & src, InputArray K, InputArray R, int interp_mode, int border_mode,\n               cuda::GpuMat & dst);\n\n    Point warp(const cuda::GpuMat & src, InputArray K, InputArray R, InputArray T, int interp_mode, int border_mode,\n               cuda::GpuMat & dst);\n\nprivate:\n    cuda::GpuMat d_xmap_, d_ymap_, d_src_, d_dst_;\n};\n\n\nclass CV_EXPORTS SphericalWarperGpu : public SphericalWarper\n{\npublic:\n    SphericalWarperGpu(float scale) : SphericalWarper(scale) {}\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Point warp(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,\n               OutputArray dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, cuda::GpuMat & xmap, cuda::GpuMat & ymap);\n\n    Point warp(const cuda::GpuMat & src, InputArray K, InputArray R, int interp_mode, int border_mode,\n               cuda::GpuMat & dst);\n\nprivate:\n    cuda::GpuMat d_xmap_, d_ymap_, d_src_, d_dst_;\n};\n\n\nclass CV_EXPORTS CylindricalWarperGpu : public CylindricalWarper\n{\npublic:\n    CylindricalWarperGpu(float scale) : CylindricalWarper(scale) {}\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Point warp(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,\n               OutputArray dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, InputArray K, InputArray R, cuda::GpuMat & xmap, cuda::GpuMat & ymap);\n\n    Point warp(const cuda::GpuMat & src, InputArray K, InputArray R, int interp_mode, int border_mode,\n               cuda::GpuMat & dst);\n\nprivate:\n    cuda::GpuMat d_xmap_, d_ymap_, d_src_, d_dst_;\n};\n\n\nstruct SphericalPortraitProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\n// Projects image onto unit sphere with origin at (0, 0, 0).\n// Poles are located NOT at (0, -1, 0) and (0, 1, 0) points, BUT at (1, 0, 0) and (-1, 0, 0) points.\nclass CV_EXPORTS SphericalPortraitWarper : public RotationWarperBase<SphericalPortraitProjector>\n{\npublic:\n    SphericalPortraitWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n};\n\nstruct CylindricalPortraitProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS CylindricalPortraitWarper : public RotationWarperBase<CylindricalPortraitProjector>\n{\npublic:\n    CylindricalPortraitWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n    {\n        RotationWarperBase<CylindricalPortraitProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);\n    }\n};\n\nstruct PlanePortraitProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PlanePortraitWarper : public RotationWarperBase<PlanePortraitProjector>\n{\npublic:\n    PlanePortraitWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n    {\n        RotationWarperBase<PlanePortraitProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);\n    }\n};\n\n//! @} stitching_warp\n\n} // namespace detail\n} // namespace cv\n\n#include \"warpers_inl.hpp\"\n\n#endif // __OPENCV_STITCHING_WARPERS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/detail/warpers_inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_WARPERS_INL_HPP__\n#define __OPENCV_STITCHING_WARPERS_INL_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"warpers.hpp\" // Make your IDE see declarations\n#include <limits>\n\n//! @cond IGNORED\n\nnamespace cv {\nnamespace detail {\n\ntemplate <class P>\nPoint2f RotationWarperBase<P>::warpPoint(const Point2f &pt, InputArray K, InputArray R)\n{\n    projector_.setCameraParams(K, R);\n    Point2f uv;\n    projector_.mapForward(pt.x, pt.y, uv.x, uv.y);\n    return uv;\n}\n\n\ntemplate <class P>\nRect RotationWarperBase<P>::buildMaps(Size src_size, InputArray K, InputArray R, OutputArray _xmap, OutputArray _ymap)\n{\n    projector_.setCameraParams(K, R);\n\n    Point dst_tl, dst_br;\n    detectResultRoi(src_size, dst_tl, dst_br);\n\n    _xmap.create(dst_br.y - dst_tl.y + 1, dst_br.x - dst_tl.x + 1, CV_32F);\n    _ymap.create(dst_br.y - dst_tl.y + 1, dst_br.x - dst_tl.x + 1, CV_32F);\n\n    Mat xmap = _xmap.getMat(), ymap = _ymap.getMat();\n\n    float x, y;\n    for (int v = dst_tl.y; v <= dst_br.y; ++v)\n    {\n        for (int u = dst_tl.x; u <= dst_br.x; ++u)\n        {\n            projector_.mapBackward(static_cast<float>(u), static_cast<float>(v), x, y);\n            xmap.at<float>(v - dst_tl.y, u - dst_tl.x) = x;\n            ymap.at<float>(v - dst_tl.y, u - dst_tl.x) = y;\n        }\n    }\n\n    return Rect(dst_tl, dst_br);\n}\n\n\ntemplate <class P>\nPoint RotationWarperBase<P>::warp(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,\n                                  OutputArray dst)\n{\n    UMat xmap, ymap;\n    Rect dst_roi = buildMaps(src.size(), K, R, xmap, ymap);\n\n    dst.create(dst_roi.height + 1, dst_roi.width + 1, src.type());\n    remap(src, dst, xmap, ymap, interp_mode, border_mode);\n\n    return dst_roi.tl();\n}\n\n\ntemplate <class P>\nvoid RotationWarperBase<P>::warpBackward(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,\n                                         Size dst_size, OutputArray dst)\n{\n    projector_.setCameraParams(K, R);\n\n    Point src_tl, src_br;\n    detectResultRoi(dst_size, src_tl, src_br);\n\n    Size size = src.size();\n    CV_Assert(src_br.x - src_tl.x + 1 == size.width && src_br.y - src_tl.y + 1 == size.height);\n\n    Mat xmap(dst_size, CV_32F);\n    Mat ymap(dst_size, CV_32F);\n\n    float u, v;\n    for (int y = 0; y < dst_size.height; ++y)\n    {\n        for (int x = 0; x < dst_size.width; ++x)\n        {\n            projector_.mapForward(static_cast<float>(x), static_cast<float>(y), u, v);\n            xmap.at<float>(y, x) = u - src_tl.x;\n            ymap.at<float>(y, x) = v - src_tl.y;\n        }\n    }\n\n    dst.create(dst_size, src.type());\n    remap(src, dst, xmap, ymap, interp_mode, border_mode);\n}\n\n\ntemplate <class P>\nRect RotationWarperBase<P>::warpRoi(Size src_size, InputArray K, InputArray R)\n{\n    projector_.setCameraParams(K, R);\n\n    Point dst_tl, dst_br;\n    detectResultRoi(src_size, dst_tl, dst_br);\n\n    return Rect(dst_tl, Point(dst_br.x + 1, dst_br.y + 1));\n}\n\n\ntemplate <class P>\nvoid RotationWarperBase<P>::detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n{\n    float tl_uf = std::numeric_limits<float>::max();\n    float tl_vf = std::numeric_limits<float>::max();\n    float br_uf = -std::numeric_limits<float>::max();\n    float br_vf = -std::numeric_limits<float>::max();\n\n    float u, v;\n    for (int y = 0; y < src_size.height; ++y)\n    {\n        for (int x = 0; x < src_size.width; ++x)\n        {\n            projector_.mapForward(static_cast<float>(x), static_cast<float>(y), u, v);\n            tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n            br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n        }\n    }\n\n    dst_tl.x = static_cast<int>(tl_uf);\n    dst_tl.y = static_cast<int>(tl_vf);\n    dst_br.x = static_cast<int>(br_uf);\n    dst_br.y = static_cast<int>(br_vf);\n}\n\n\ntemplate <class P>\nvoid RotationWarperBase<P>::detectResultRoiByBorder(Size src_size, Point &dst_tl, Point &dst_br)\n{\n    float tl_uf = std::numeric_limits<float>::max();\n    float tl_vf = std::numeric_limits<float>::max();\n    float br_uf = -std::numeric_limits<float>::max();\n    float br_vf = -std::numeric_limits<float>::max();\n\n    float u, v;\n    for (float x = 0; x < src_size.width; ++x)\n    {\n        projector_.mapForward(static_cast<float>(x), 0, u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n\n        projector_.mapForward(static_cast<float>(x), static_cast<float>(src_size.height - 1), u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n    }\n    for (int y = 0; y < src_size.height; ++y)\n    {\n        projector_.mapForward(0, static_cast<float>(y), u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n\n        projector_.mapForward(static_cast<float>(src_size.width - 1), static_cast<float>(y), u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n    }\n\n    dst_tl.x = static_cast<int>(tl_uf);\n    dst_tl.y = static_cast<int>(tl_vf);\n    dst_br.x = static_cast<int>(br_uf);\n    dst_br.y = static_cast<int>(br_vf);\n}\n\n\ninline\nvoid PlaneProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    x_ = t[0] + x_ / z_ * (1 - t[2]);\n    y_ = t[1] + y_ / z_ * (1 - t[2]);\n\n    u = scale * x_;\n    v = scale * y_;\n}\n\n\ninline\nvoid PlaneProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u = u / scale - t[0];\n    v = v / scale - t[1];\n\n    float z;\n    x = k_rinv[0] * u + k_rinv[1] * v + k_rinv[2] * (1 - t[2]);\n    y = k_rinv[3] * u + k_rinv[4] * v + k_rinv[5] * (1 - t[2]);\n    z = k_rinv[6] * u + k_rinv[7] * v + k_rinv[8] * (1 - t[2]);\n\n    x /= z;\n    y /= z;\n}\n\n\ninline\nvoid SphericalProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    u = scale * atan2f(x_, z_);\n    float w = y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_);\n    v = scale * (static_cast<float>(CV_PI) - acosf(w == w ? w : 0));\n}\n\n\ninline\nvoid SphericalProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float sinv = sinf(static_cast<float>(CV_PI) - v);\n    float x_ = sinv * sinf(u);\n    float y_ = cosf(static_cast<float>(CV_PI) - v);\n    float z_ = sinv * cosf(u);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\n\ninline\nvoid CylindricalProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    u = scale * atan2f(x_, z_);\n    v = scale * y_ / sqrtf(x_ * x_ + z_ * z_);\n}\n\n\ninline\nvoid CylindricalProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float x_ = sinf(u);\n    float y_ = v;\n    float z_ = cosf(u);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid FisheyeProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = (float)CV_PI - acosf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = scale * v_ * cosf(u_);\n    v = scale * v_ * sinf(u_);\n}\n\ninline\nvoid FisheyeProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float u_ = atan2f(v, u);\n    float v_ = sqrtf(u*u + v*v);\n\n    float sinv = sinf((float)CV_PI - v_);\n    float x_ = sinv * sinf(u_);\n    float y_ = cosf((float)CV_PI - v_);\n    float z_ = sinv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid StereographicProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = (float)CV_PI - acosf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float r = sinf(v_) / (1 - cosf(v_));\n\n    u = scale * r * cos(u_);\n    v = scale * r * sin(u_);\n}\n\ninline\nvoid StereographicProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float u_ = atan2f(v, u);\n    float r = sqrtf(u*u + v*v);\n    float v_ = 2 * atanf(1.f / r);\n\n    float sinv = sinf((float)CV_PI - v_);\n    float x_ = sinv * sinf(u_);\n    float y_ = cosf((float)CV_PI - v_);\n    float z_ = sinv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid CompressedRectilinearProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = scale * a * tanf(u_ / a);\n    v = scale * b * tanf(v_) / cosf(u_);\n}\n\ninline\nvoid CompressedRectilinearProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float aatg = a * atanf(u / a);\n    float u_ = aatg;\n    float v_ = atanf(v * cosf(aatg) / b);\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid CompressedRectilinearPortraitProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float y_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float x_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = - scale * a * tanf(u_ / a);\n    v = scale * b * tanf(v_) / cosf(u_);\n}\n\ninline\nvoid CompressedRectilinearPortraitProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= - scale;\n    v /= scale;\n\n    float aatg = a * atanf(u / a);\n    float u_ = aatg;\n    float v_ = atanf(v * cosf( aatg ) / b);\n\n    float cosv = cosf(v_);\n    float y_ = cosv * sinf(u_);\n    float x_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid PaniniProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float tg = a * tanf(u_ / a);\n    u = scale * tg;\n\n    float sinu = sinf(u_);\n    if ( fabs(sinu) < 1E-7 )\n        v = scale * b * tanf(v_);\n    else\n        v = scale * b * tg * tanf(v_) / sinu;\n}\n\ninline\nvoid PaniniProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float lamda = a * atanf(u / a);\n    float u_ = lamda;\n\n    float v_;\n    if ( fabs(lamda) > 1E-7)\n        v_ = atanf(v * sinf(lamda) / (b * a * tanf(lamda / a)));\n    else\n        v_ = atanf(v / b);\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid PaniniPortraitProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float y_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float x_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float tg = a * tanf(u_ / a);\n    u = - scale * tg;\n\n    float sinu = sinf( u_ );\n    if ( fabs(sinu) < 1E-7 )\n        v = scale * b * tanf(v_);\n    else\n        v = scale * b * tg * tanf(v_) / sinu;\n}\n\ninline\nvoid PaniniPortraitProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= - scale;\n    v /= scale;\n\n    float lamda = a * atanf(u / a);\n    float u_ = lamda;\n\n    float v_;\n    if ( fabs(lamda) > 1E-7)\n        v_ = atanf(v * sinf(lamda) / (b * a * tanf(lamda/a)));\n    else\n        v_ = atanf(v / b);\n\n    float cosv = cosf(v_);\n    float y_ = cosv * sinf(u_);\n    float x_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid MercatorProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = scale * u_;\n    v = scale * logf( tanf( (float)(CV_PI/4) + v_/2 ) );\n}\n\ninline\nvoid MercatorProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float v_ = atanf( sinhf(v) );\n    float u_ = u;\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid TransverseMercatorProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float B = cosf(v_) * sinf(u_);\n\n    u = scale / 2 * logf( (1+B) / (1-B) );\n    v = scale * atan2f(tanf(v_), cosf(u_));\n}\n\ninline\nvoid TransverseMercatorProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float v_ = asinf( sinf(v) / coshf(u) );\n    float u_ = atan2f( sinhf(u), cos(v) );\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid SphericalPortraitProjector::mapForward(float x, float y, float &u0, float &v0)\n{\n    float x0_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y0_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float x_ = y0_;\n    float y_ = x0_;\n    float u, v;\n\n    u = scale * atan2f(x_, z_);\n    v = scale * (static_cast<float>(CV_PI) - acosf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_)));\n\n    u0 = -u;//v;\n    v0 = v;//u;\n}\n\n\ninline\nvoid SphericalPortraitProjector::mapBackward(float u0, float v0, float &x, float &y)\n{\n    float u, v;\n    u = -u0;//v0;\n    v = v0;//u0;\n\n    u /= scale;\n    v /= scale;\n\n    float sinv = sinf(static_cast<float>(CV_PI) - v);\n    float x0_ = sinv * sinf(u);\n    float y0_ = cosf(static_cast<float>(CV_PI) - v);\n    float z_ = sinv * cosf(u);\n\n    float x_ = y0_;\n    float y_ = x0_;\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid CylindricalPortraitProjector::mapForward(float x, float y, float &u0, float &v0)\n{\n    float x0_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y0_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_  = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float x_ = y0_;\n    float y_ = x0_;\n    float u, v;\n\n    u = scale * atan2f(x_, z_);\n    v = scale * y_ / sqrtf(x_ * x_ + z_ * z_);\n\n    u0 = -u;//v;\n    v0 = v;//u;\n}\n\n\ninline\nvoid CylindricalPortraitProjector::mapBackward(float u0, float v0, float &x, float &y)\n{\n    float u, v;\n    u = -u0;//v0;\n    v = v0;//u0;\n\n    u /= scale;\n    v /= scale;\n\n    float x0_ = sinf(u);\n    float y0_ = v;\n    float z_  = cosf(u);\n\n    float x_ = y0_;\n    float y_ = x0_;\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid PlanePortraitProjector::mapForward(float x, float y, float &u0, float &v0)\n{\n    float x0_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y0_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_  = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float x_ = y0_;\n    float y_ = x0_;\n\n    x_ = t[0] + x_ / z_ * (1 - t[2]);\n    y_ = t[1] + y_ / z_ * (1 - t[2]);\n\n    float u,v;\n    u = scale * x_;\n    v = scale * y_;\n\n    u0 = -u;\n    v0 = v;\n}\n\n\ninline\nvoid PlanePortraitProjector::mapBackward(float u0, float v0, float &x, float &y)\n{\n    float u, v;\n    u = -u0;\n    v = v0;\n\n    u = u / scale - t[0];\n    v = v / scale - t[1];\n\n    float z;\n    x = k_rinv[0] * v + k_rinv[1] * u + k_rinv[2] * (1 - t[2]);\n    y = k_rinv[3] * v + k_rinv[4] * u + k_rinv[5] * (1 - t[2]);\n    z = k_rinv[6] * v + k_rinv[7] * u + k_rinv[8] * (1 - t[2]);\n\n    x /= z;\n    y /= z;\n}\n\n\n} // namespace detail\n} // namespace cv\n\n//! @endcond\n\n#endif // __OPENCV_STITCHING_WARPERS_INL_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching/warpers.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_WARPER_CREATORS_HPP__\n#define __OPENCV_STITCHING_WARPER_CREATORS_HPP__\n\n#include \"opencv2/stitching/detail/warpers.hpp\"\n\nnamespace cv {\n\n//! @addtogroup stitching_warp\n//! @{\n\n/** @brief Image warper factories base class.\n */\nclass WarperCreator\n{\npublic:\n    virtual ~WarperCreator() {}\n    virtual Ptr<detail::RotationWarper> create(float scale) const = 0;\n};\n\n/** @brief Plane warper factory class.\n  @sa detail::PlaneWarper\n */\nclass PlaneWarper : public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::PlaneWarper>(scale); }\n};\n\n/** @brief Cylindrical warper factory class.\n@sa detail::CylindricalWarper\n*/\nclass CylindricalWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::CylindricalWarper>(scale); }\n};\n\n/** @brief Spherical warper factory class */\nclass SphericalWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::SphericalWarper>(scale); }\n};\n\nclass FisheyeWarper : public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::FisheyeWarper>(scale); }\n};\n\nclass StereographicWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::StereographicWarper>(scale); }\n};\n\nclass CompressedRectilinearWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    CompressedRectilinearWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::CompressedRectilinearWarper>(scale, a, b); }\n};\n\nclass CompressedRectilinearPortraitWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    CompressedRectilinearPortraitWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::CompressedRectilinearPortraitWarper>(scale, a, b); }\n};\n\nclass PaniniWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    PaniniWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::PaniniWarper>(scale, a, b); }\n};\n\nclass PaniniPortraitWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    PaniniPortraitWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::PaniniPortraitWarper>(scale, a, b); }\n};\n\nclass MercatorWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::MercatorWarper>(scale); }\n};\n\nclass TransverseMercatorWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::TransverseMercatorWarper>(scale); }\n};\n\n\n\n#ifdef HAVE_OPENCV_CUDAWARPING\nclass PlaneWarperGpu: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::PlaneWarperGpu>(scale); }\n};\n\n\nclass CylindricalWarperGpu: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::CylindricalWarperGpu>(scale); }\n};\n\n\nclass SphericalWarperGpu: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return makePtr<detail::SphericalWarperGpu>(scale); }\n};\n#endif\n\n//! @} stitching_warp\n\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_WARPER_CREATORS_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/stitching.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_STITCHER_HPP__\n#define __OPENCV_STITCHING_STITCHER_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/features2d.hpp\"\n#include \"opencv2/stitching/warpers.hpp\"\n#include \"opencv2/stitching/detail/matchers.hpp\"\n#include \"opencv2/stitching/detail/motion_estimators.hpp\"\n#include \"opencv2/stitching/detail/exposure_compensate.hpp\"\n#include \"opencv2/stitching/detail/seam_finders.hpp\"\n#include \"opencv2/stitching/detail/blenders.hpp\"\n#include \"opencv2/stitching/detail/camera.hpp\"\n\n/**\n@defgroup stitching Images stitching\n\nThis figure illustrates the stitching module pipeline implemented in the Stitcher class. Using that\nclass it's possible to configure/remove some steps, i.e. adjust the stitching pipeline according to\nthe particular needs. All building blocks from the pipeline are available in the detail namespace,\none can combine and use them separately.\n\nThe implemented stitching pipeline is very similar to the one proposed in @cite BL07 .\n\n![image](StitchingPipeline.jpg)\n\n@{\n    @defgroup stitching_match Features Finding and Images Matching\n    @defgroup stitching_rotation Rotation Estimation\n    @defgroup stitching_autocalib Autocalibration\n    @defgroup stitching_warp Images Warping\n    @defgroup stitching_seam Seam Estimation\n    @defgroup stitching_exposure Exposure Compensation\n    @defgroup stitching_blend Image Blenders\n@}\n  */\n\nnamespace cv {\n\n//! @addtogroup stitching\n//! @{\n\n/** @brief High level image stitcher.\n\nIt's possible to use this class without being aware of the entire stitching pipeline. However, to\nbe able to achieve higher stitching stability and quality of the final images at least being\nfamiliar with the theory is recommended.\n\n@note\n   -   A basic example on image stitching can be found at\n        opencv_source_code/samples/cpp/stitching.cpp\n    -   A detailed example on image stitching can be found at\n        opencv_source_code/samples/cpp/stitching_detailed.cpp\n */\nclass CV_EXPORTS_W Stitcher\n{\npublic:\n    enum { ORIG_RESOL = -1 };\n    enum Status\n    {\n        OK = 0,\n        ERR_NEED_MORE_IMGS = 1,\n        ERR_HOMOGRAPHY_EST_FAIL = 2,\n        ERR_CAMERA_PARAMS_ADJUST_FAIL = 3\n    };\n\n   // Stitcher() {}\n    /** @brief Creates a stitcher with the default parameters.\n\n    @param try_use_gpu Flag indicating whether GPU should be used whenever it's possible.\n    @return Stitcher class instance.\n     */\n    static Stitcher createDefault(bool try_use_gpu = false);\n\n    CV_WRAP double registrationResol() const { return registr_resol_; }\n    CV_WRAP void setRegistrationResol(double resol_mpx) { registr_resol_ = resol_mpx; }\n\n    CV_WRAP double seamEstimationResol() const { return seam_est_resol_; }\n    CV_WRAP void setSeamEstimationResol(double resol_mpx) { seam_est_resol_ = resol_mpx; }\n\n    CV_WRAP double compositingResol() const { return compose_resol_; }\n    CV_WRAP void setCompositingResol(double resol_mpx) { compose_resol_ = resol_mpx; }\n\n    CV_WRAP double panoConfidenceThresh() const { return conf_thresh_; }\n    CV_WRAP void setPanoConfidenceThresh(double conf_thresh) { conf_thresh_ = conf_thresh; }\n\n    CV_WRAP bool waveCorrection() const { return do_wave_correct_; }\n    CV_WRAP void setWaveCorrection(bool flag) { do_wave_correct_ = flag; }\n\n    detail::WaveCorrectKind waveCorrectKind() const { return wave_correct_kind_; }\n    void setWaveCorrectKind(detail::WaveCorrectKind kind) { wave_correct_kind_ = kind; }\n\n    Ptr<detail::FeaturesFinder> featuresFinder() { return features_finder_; }\n    const Ptr<detail::FeaturesFinder> featuresFinder() const { return features_finder_; }\n    void setFeaturesFinder(Ptr<detail::FeaturesFinder> features_finder)\n        { features_finder_ = features_finder; }\n\n    Ptr<detail::FeaturesMatcher> featuresMatcher() { return features_matcher_; }\n    const Ptr<detail::FeaturesMatcher> featuresMatcher() const { return features_matcher_; }\n    void setFeaturesMatcher(Ptr<detail::FeaturesMatcher> features_matcher)\n        { features_matcher_ = features_matcher; }\n\n    const cv::UMat& matchingMask() const { return matching_mask_; }\n    void setMatchingMask(const cv::UMat &mask)\n    {\n        CV_Assert(mask.type() == CV_8U && mask.cols == mask.rows);\n        matching_mask_ = mask.clone();\n    }\n\n    Ptr<detail::BundleAdjusterBase> bundleAdjuster() { return bundle_adjuster_; }\n    const Ptr<detail::BundleAdjusterBase> bundleAdjuster() const { return bundle_adjuster_; }\n    void setBundleAdjuster(Ptr<detail::BundleAdjusterBase> bundle_adjuster)\n        { bundle_adjuster_ = bundle_adjuster; }\n\n    Ptr<WarperCreator> warper() { return warper_; }\n    const Ptr<WarperCreator> warper() const { return warper_; }\n    void setWarper(Ptr<WarperCreator> creator) { warper_ = creator; }\n\n    Ptr<detail::ExposureCompensator> exposureCompensator() { return exposure_comp_; }\n    const Ptr<detail::ExposureCompensator> exposureCompensator() const { return exposure_comp_; }\n    void setExposureCompensator(Ptr<detail::ExposureCompensator> exposure_comp)\n        { exposure_comp_ = exposure_comp; }\n\n    Ptr<detail::SeamFinder> seamFinder() { return seam_finder_; }\n    const Ptr<detail::SeamFinder> seamFinder() const { return seam_finder_; }\n    void setSeamFinder(Ptr<detail::SeamFinder> seam_finder) { seam_finder_ = seam_finder; }\n\n    Ptr<detail::Blender> blender() { return blender_; }\n    const Ptr<detail::Blender> blender() const { return blender_; }\n    void setBlender(Ptr<detail::Blender> b) { blender_ = b; }\n\n    /** @overload */\n    CV_WRAP Status estimateTransform(InputArrayOfArrays images);\n    /** @brief These functions try to match the given images and to estimate rotations of each camera.\n\n    @note Use the functions only if you're aware of the stitching pipeline, otherwise use\n    Stitcher::stitch.\n\n    @param images Input images.\n    @param rois Region of interest rectangles.\n    @return Status code.\n     */\n    Status estimateTransform(InputArrayOfArrays images, const std::vector<std::vector<Rect> > &rois);\n\n    /** @overload */\n    CV_WRAP Status composePanorama(OutputArray pano);\n    /** @brief These functions try to compose the given images (or images stored internally from the other function\n    calls) into the final pano under the assumption that the image transformations were estimated\n    before.\n\n    @note Use the functions only if you're aware of the stitching pipeline, otherwise use\n    Stitcher::stitch.\n\n    @param images Input images.\n    @param pano Final pano.\n    @return Status code.\n     */\n    Status composePanorama(InputArrayOfArrays images, OutputArray pano);\n\n    /** @overload */\n    CV_WRAP Status stitch(InputArrayOfArrays images, OutputArray pano);\n    /** @brief These functions try to stitch the given images.\n\n    @param images Input images.\n    @param rois Region of interest rectangles.\n    @param pano Final pano.\n    @return Status code.\n     */\n    Status stitch(InputArrayOfArrays images, const std::vector<std::vector<Rect> > &rois, OutputArray pano);\n\n    std::vector<int> component() const { return indices_; }\n    std::vector<detail::CameraParams> cameras() const { return cameras_; }\n    CV_WRAP double workScale() const { return work_scale_; }\n\nprivate:\n    //Stitcher() {}\n\n    Status matchImages();\n    Status estimateCameraParams();\n\n    double registr_resol_;\n    double seam_est_resol_;\n    double compose_resol_;\n    double conf_thresh_;\n    Ptr<detail::FeaturesFinder> features_finder_;\n    Ptr<detail::FeaturesMatcher> features_matcher_;\n    cv::UMat matching_mask_;\n    Ptr<detail::BundleAdjusterBase> bundle_adjuster_;\n    bool do_wave_correct_;\n    detail::WaveCorrectKind wave_correct_kind_;\n    Ptr<WarperCreator> warper_;\n    Ptr<detail::ExposureCompensator> exposure_comp_;\n    Ptr<detail::SeamFinder> seam_finder_;\n    Ptr<detail::Blender> blender_;\n\n    std::vector<cv::UMat> imgs_;\n    std::vector<std::vector<cv::Rect> > rois_;\n    std::vector<cv::Size> full_img_sizes_;\n    std::vector<detail::ImageFeatures> features_;\n    std::vector<detail::MatchesInfo> pairwise_matches_;\n    std::vector<cv::UMat> seam_est_imgs_;\n    std::vector<int> indices_;\n    std::vector<detail::CameraParams> cameras_;\n    double work_scale_;\n    double seam_scale_;\n    double seam_work_aspect_;\n    double warped_image_scale_;\n};\n\nCV_EXPORTS_W Ptr<Stitcher> createStitcher(bool try_use_gpu = false);\n\n//! @} stitching\n\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_STITCHER_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/superres/optical_flow.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_SUPERRES_OPTICAL_FLOW_HPP__\n#define __OPENCV_SUPERRES_OPTICAL_FLOW_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\n    namespace superres\n    {\n\n//! @addtogroup superres\n//! @{\n\n        class CV_EXPORTS DenseOpticalFlowExt : public cv::Algorithm\n        {\n        public:\n            virtual void calc(InputArray frame0, InputArray frame1, OutputArray flow1, OutputArray flow2 = noArray()) = 0;\n            virtual void collectGarbage() = 0;\n        };\n\n\n        class CV_EXPORTS FarnebackOpticalFlow : public virtual DenseOpticalFlowExt\n        {\n        public:\n            /** @see setPyrScale */\n            virtual double getPyrScale() const = 0;\n            /** @copybrief getPyrScale @see getPyrScale */\n            virtual void setPyrScale(double val) = 0;\n            /** @see setLevelsNumber */\n            virtual int getLevelsNumber() const = 0;\n            /** @copybrief getLevelsNumber @see getLevelsNumber */\n            virtual void setLevelsNumber(int val) = 0;\n            /** @see setWindowSize */\n            virtual int getWindowSize() const = 0;\n            /** @copybrief getWindowSize @see getWindowSize */\n            virtual void setWindowSize(int val) = 0;\n            /** @see setIterations */\n            virtual int getIterations() const = 0;\n            /** @copybrief getIterations @see getIterations */\n            virtual void setIterations(int val) = 0;\n            /** @see setPolyN */\n            virtual int getPolyN() const = 0;\n            /** @copybrief getPolyN @see getPolyN */\n            virtual void setPolyN(int val) = 0;\n            /** @see setPolySigma */\n            virtual double getPolySigma() const = 0;\n            /** @copybrief getPolySigma @see getPolySigma */\n            virtual void setPolySigma(double val) = 0;\n            /** @see setFlags */\n            virtual int getFlags() const = 0;\n            /** @copybrief getFlags @see getFlags */\n            virtual void setFlags(int val) = 0;\n        };\n        CV_EXPORTS Ptr<FarnebackOpticalFlow> createOptFlow_Farneback();\n        CV_EXPORTS Ptr<FarnebackOpticalFlow> createOptFlow_Farneback_CUDA();\n\n\n//        CV_EXPORTS Ptr<DenseOpticalFlowExt> createOptFlow_Simple();\n\n\n        class CV_EXPORTS DualTVL1OpticalFlow : public virtual DenseOpticalFlowExt\n        {\n        public:\n            /** @see setTau */\n            virtual double getTau() const = 0;\n            /** @copybrief getTau @see getTau */\n            virtual void setTau(double val) = 0;\n            /** @see setLambda */\n            virtual double getLambda() const = 0;\n            /** @copybrief getLambda @see getLambda */\n            virtual void setLambda(double val) = 0;\n            /** @see setTheta */\n            virtual double getTheta() const = 0;\n            /** @copybrief getTheta @see getTheta */\n            virtual void setTheta(double val) = 0;\n            /** @see setScalesNumber */\n            virtual int getScalesNumber() const = 0;\n            /** @copybrief getScalesNumber @see getScalesNumber */\n            virtual void setScalesNumber(int val) = 0;\n            /** @see setWarpingsNumber */\n            virtual int getWarpingsNumber() const = 0;\n            /** @copybrief getWarpingsNumber @see getWarpingsNumber */\n            virtual void setWarpingsNumber(int val) = 0;\n            /** @see setEpsilon */\n            virtual double getEpsilon() const = 0;\n            /** @copybrief getEpsilon @see getEpsilon */\n            virtual void setEpsilon(double val) = 0;\n            /** @see setIterations */\n            virtual int getIterations() const = 0;\n            /** @copybrief getIterations @see getIterations */\n            virtual void setIterations(int val) = 0;\n            /** @see setUseInitialFlow */\n            virtual bool getUseInitialFlow() const = 0;\n            /** @copybrief getUseInitialFlow @see getUseInitialFlow */\n            virtual void setUseInitialFlow(bool val) = 0;\n        };\n        CV_EXPORTS Ptr<DualTVL1OpticalFlow> createOptFlow_DualTVL1();\n        CV_EXPORTS Ptr<DualTVL1OpticalFlow> createOptFlow_DualTVL1_CUDA();\n\n\n        class CV_EXPORTS BroxOpticalFlow : public virtual DenseOpticalFlowExt\n        {\n        public:\n            //! @brief Flow smoothness\n            /** @see setAlpha */\n            virtual double getAlpha() const = 0;\n            /** @copybrief getAlpha @see getAlpha */\n            virtual void setAlpha(double val) = 0;\n            //! @brief Gradient constancy importance\n            /** @see setGamma */\n            virtual double getGamma() const = 0;\n            /** @copybrief getGamma @see getGamma */\n            virtual void setGamma(double val) = 0;\n            //! @brief Pyramid scale factor\n            /** @see setScaleFactor */\n            virtual double getScaleFactor() const = 0;\n            /** @copybrief getScaleFactor @see getScaleFactor */\n            virtual void setScaleFactor(double val) = 0;\n            //! @brief Number of lagged non-linearity iterations (inner loop)\n            /** @see setInnerIterations */\n            virtual int getInnerIterations() const = 0;\n            /** @copybrief getInnerIterations @see getInnerIterations */\n            virtual void setInnerIterations(int val) = 0;\n            //! @brief Number of warping iterations (number of pyramid levels)\n            /** @see setOuterIterations */\n            virtual int getOuterIterations() const = 0;\n            /** @copybrief getOuterIterations @see getOuterIterations */\n            virtual void setOuterIterations(int val) = 0;\n            //! @brief Number of linear system solver iterations\n            /** @see setSolverIterations */\n            virtual int getSolverIterations() const = 0;\n            /** @copybrief getSolverIterations @see getSolverIterations */\n            virtual void setSolverIterations(int val) = 0;\n        };\n        CV_EXPORTS Ptr<BroxOpticalFlow> createOptFlow_Brox_CUDA();\n\n\n        class PyrLKOpticalFlow : public virtual DenseOpticalFlowExt\n        {\n        public:\n            /** @see setWindowSize */\n            virtual int getWindowSize() const = 0;\n            /** @copybrief getWindowSize @see getWindowSize */\n            virtual void setWindowSize(int val) = 0;\n            /** @see setMaxLevel */\n            virtual int getMaxLevel() const = 0;\n            /** @copybrief getMaxLevel @see getMaxLevel */\n            virtual void setMaxLevel(int val) = 0;\n            /** @see setIterations */\n            virtual int getIterations() const = 0;\n            /** @copybrief getIterations @see getIterations */\n            virtual void setIterations(int val) = 0;\n        };\n        CV_EXPORTS Ptr<PyrLKOpticalFlow> createOptFlow_PyrLK_CUDA();\n\n//! @}\n\n    }\n}\n\n#endif // __OPENCV_SUPERRES_OPTICAL_FLOW_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/superres.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_SUPERRES_HPP__\n#define __OPENCV_SUPERRES_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/superres/optical_flow.hpp\"\n\n/**\n  @defgroup superres Super Resolution\n\nThe Super Resolution module contains a set of functions and classes that can be used to solve the\nproblem of resolution enhancement. There are a few methods implemented, most of them are descibed in\nthe papers @cite Farsiu03 and @cite Mitzel09 .\n\n */\n\nnamespace cv\n{\n    namespace superres\n    {\n\n//! @addtogroup superres\n//! @{\n\n        class CV_EXPORTS FrameSource\n        {\n        public:\n            virtual ~FrameSource();\n\n            virtual void nextFrame(OutputArray frame) = 0;\n            virtual void reset() = 0;\n        };\n\n        CV_EXPORTS Ptr<FrameSource> createFrameSource_Empty();\n\n        CV_EXPORTS Ptr<FrameSource> createFrameSource_Video(const String& fileName);\n        CV_EXPORTS Ptr<FrameSource> createFrameSource_Video_CUDA(const String& fileName);\n\n        CV_EXPORTS Ptr<FrameSource> createFrameSource_Camera(int deviceId = 0);\n\n        /** @brief Base class for Super Resolution algorithms.\n\n        The class is only used to define the common interface for the whole family of Super Resolution\n        algorithms.\n         */\n        class CV_EXPORTS SuperResolution : public cv::Algorithm, public FrameSource\n        {\n        public:\n            /** @brief Set input frame source for Super Resolution algorithm.\n\n            @param frameSource Input frame source\n             */\n            void setInput(const Ptr<FrameSource>& frameSource);\n\n            /** @brief Process next frame from input and return output result.\n\n            @param frame Output result\n             */\n            void nextFrame(OutputArray frame);\n            void reset();\n\n            /** @brief Clear all inner buffers.\n            */\n            virtual void collectGarbage();\n\n            //! @brief Scale factor\n            /** @see setScale */\n            virtual int getScale() const = 0;\n            /** @copybrief getScale @see getScale */\n            virtual void setScale(int val) = 0;\n\n            //! @brief Iterations count\n            /** @see setIterations */\n            virtual int getIterations() const = 0;\n            /** @copybrief getIterations @see getIterations */\n            virtual void setIterations(int val) = 0;\n\n            //! @brief Asymptotic value of steepest descent method\n            /** @see setTau */\n            virtual double getTau() const = 0;\n            /** @copybrief getTau @see getTau */\n            virtual void setTau(double val) = 0;\n\n            //! @brief Weight parameter to balance data term and smoothness term\n            /** @see setLabmda */\n            virtual double getLabmda() const = 0;\n            /** @copybrief getLabmda @see getLabmda */\n            virtual void setLabmda(double val) = 0;\n\n            //! @brief Parameter of spacial distribution in Bilateral-TV\n            /** @see setAlpha */\n            virtual double getAlpha() const = 0;\n            /** @copybrief getAlpha @see getAlpha */\n            virtual void setAlpha(double val) = 0;\n\n            //! @brief Kernel size of Bilateral-TV filter\n            /** @see setKernelSize */\n            virtual int getKernelSize() const = 0;\n            /** @copybrief getKernelSize @see getKernelSize */\n            virtual void setKernelSize(int val) = 0;\n\n            //! @brief Gaussian blur kernel size\n            /** @see setBlurKernelSize */\n            virtual int getBlurKernelSize() const = 0;\n            /** @copybrief getBlurKernelSize @see getBlurKernelSize */\n            virtual void setBlurKernelSize(int val) = 0;\n\n            //! @brief Gaussian blur sigma\n            /** @see setBlurSigma */\n            virtual double getBlurSigma() const = 0;\n            /** @copybrief getBlurSigma @see getBlurSigma */\n            virtual void setBlurSigma(double val) = 0;\n\n            //! @brief Radius of the temporal search area\n            /** @see setTemporalAreaRadius */\n            virtual int getTemporalAreaRadius() const = 0;\n            /** @copybrief getTemporalAreaRadius @see getTemporalAreaRadius */\n            virtual void setTemporalAreaRadius(int val) = 0;\n\n            //! @brief Dense optical flow algorithm\n            /** @see setOpticalFlow */\n            virtual Ptr<cv::superres::DenseOpticalFlowExt> getOpticalFlow() const = 0;\n            /** @copybrief getOpticalFlow @see getOpticalFlow */\n            virtual void setOpticalFlow(const Ptr<cv::superres::DenseOpticalFlowExt> &val) = 0;\n\n        protected:\n            SuperResolution();\n\n            virtual void initImpl(Ptr<FrameSource>& frameSource) = 0;\n            virtual void processImpl(Ptr<FrameSource>& frameSource, OutputArray output) = 0;\n\n            bool isUmat_;\n\n        private:\n            Ptr<FrameSource> frameSource_;\n            bool firstCall_;\n        };\n\n        /** @brief Create Bilateral TV-L1 Super Resolution.\n\n        This class implements Super Resolution algorithm described in the papers @cite Farsiu03 and\n        @cite Mitzel09 .\n\n        Here are important members of the class that control the algorithm, which you can set after\n        constructing the class instance:\n\n        -   **int scale** Scale factor.\n        -   **int iterations** Iteration count.\n        -   **double tau** Asymptotic value of steepest descent method.\n        -   **double lambda** Weight parameter to balance data term and smoothness term.\n        -   **double alpha** Parameter of spacial distribution in Bilateral-TV.\n        -   **int btvKernelSize** Kernel size of Bilateral-TV filter.\n        -   **int blurKernelSize** Gaussian blur kernel size.\n        -   **double blurSigma** Gaussian blur sigma.\n        -   **int temporalAreaRadius** Radius of the temporal search area.\n        -   **Ptr\\<DenseOpticalFlowExt\\> opticalFlow** Dense optical flow algorithm.\n         */\n        CV_EXPORTS Ptr<SuperResolution> createSuperResolution_BTVL1();\n        CV_EXPORTS Ptr<SuperResolution> createSuperResolution_BTVL1_CUDA();\n\n//! @} superres\n\n    }\n}\n\n#endif // __OPENCV_SUPERRES_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/video/background_segm.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_BACKGROUND_SEGM_HPP__\n#define __OPENCV_BACKGROUND_SEGM_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup video_motion\n//! @{\n\n/** @brief Base class for background/foreground segmentation. :\n\nThe class is only used to define the common interface for the whole family of background/foreground\nsegmentation algorithms.\n */\nclass CV_EXPORTS_W BackgroundSubtractor : public Algorithm\n{\npublic:\n    /** @brief Computes a foreground mask.\n\n    @param image Next video frame.\n    @param fgmask The output foreground mask as an 8-bit binary image.\n    @param learningRate The value between 0 and 1 that indicates how fast the background model is\n    learnt. Negative parameter value makes the algorithm to use some automatically chosen learning\n    rate. 0 means that the background model is not updated at all, 1 means that the background model\n    is completely reinitialized from the last frame.\n     */\n    CV_WRAP virtual void apply(InputArray image, OutputArray fgmask, double learningRate=-1) = 0;\n\n    /** @brief Computes a background image.\n\n    @param backgroundImage The output background image.\n\n    @note Sometimes the background image can be very blurry, as it contain the average background\n    statistics.\n     */\n    CV_WRAP virtual void getBackgroundImage(OutputArray backgroundImage) const = 0;\n};\n\n\n/** @brief Gaussian Mixture-based Background/Foreground Segmentation Algorithm.\n\nThe class implements the Gaussian mixture model background subtraction described in @cite Zivkovic2004\nand @cite Zivkovic2006 .\n */\nclass CV_EXPORTS_W BackgroundSubtractorMOG2 : public BackgroundSubtractor\n{\npublic:\n    /** @brief Returns the number of last frames that affect the background model\n    */\n    CV_WRAP virtual int getHistory() const = 0;\n    /** @brief Sets the number of last frames that affect the background model\n    */\n    CV_WRAP virtual void setHistory(int history) = 0;\n\n    /** @brief Returns the number of gaussian components in the background model\n    */\n    CV_WRAP virtual int getNMixtures() const = 0;\n    /** @brief Sets the number of gaussian components in the background model.\n\n    The model needs to be reinitalized to reserve memory.\n    */\n    CV_WRAP virtual void setNMixtures(int nmixtures) = 0;//needs reinitialization!\n\n    /** @brief Returns the \"background ratio\" parameter of the algorithm\n\n    If a foreground pixel keeps semi-constant value for about backgroundRatio\\*history frames, it's\n    considered background and added to the model as a center of a new component. It corresponds to TB\n    parameter in the paper.\n     */\n    CV_WRAP virtual double getBackgroundRatio() const = 0;\n    /** @brief Sets the \"background ratio\" parameter of the algorithm\n    */\n    CV_WRAP virtual void setBackgroundRatio(double ratio) = 0;\n\n    /** @brief Returns the variance threshold for the pixel-model match\n\n    The main threshold on the squared Mahalanobis distance to decide if the sample is well described by\n    the background model or not. Related to Cthr from the paper.\n     */\n    CV_WRAP virtual double getVarThreshold() const = 0;\n    /** @brief Sets the variance threshold for the pixel-model match\n    */\n    CV_WRAP virtual void setVarThreshold(double varThreshold) = 0;\n\n    /** @brief Returns the variance threshold for the pixel-model match used for new mixture component generation\n\n    Threshold for the squared Mahalanobis distance that helps decide when a sample is close to the\n    existing components (corresponds to Tg in the paper). If a pixel is not close to any component, it\n    is considered foreground or added as a new component. 3 sigma =\\> Tg=3\\*3=9 is default. A smaller Tg\n    value generates more components. A higher Tg value may result in a small number of components but\n    they can grow too large.\n     */\n    CV_WRAP virtual double getVarThresholdGen() const = 0;\n    /** @brief Sets the variance threshold for the pixel-model match used for new mixture component generation\n    */\n    CV_WRAP virtual void setVarThresholdGen(double varThresholdGen) = 0;\n\n    /** @brief Returns the initial variance of each gaussian component\n    */\n    CV_WRAP virtual double getVarInit() const = 0;\n    /** @brief Sets the initial variance of each gaussian component\n    */\n    CV_WRAP virtual void setVarInit(double varInit) = 0;\n\n    CV_WRAP virtual double getVarMin() const = 0;\n    CV_WRAP virtual void setVarMin(double varMin) = 0;\n\n    CV_WRAP virtual double getVarMax() const = 0;\n    CV_WRAP virtual void setVarMax(double varMax) = 0;\n\n    /** @brief Returns the complexity reduction threshold\n\n    This parameter defines the number of samples needed to accept to prove the component exists. CT=0.05\n    is a default value for all the samples. By setting CT=0 you get an algorithm very similar to the\n    standard Stauffer&Grimson algorithm.\n     */\n    CV_WRAP virtual double getComplexityReductionThreshold() const = 0;\n    /** @brief Sets the complexity reduction threshold\n    */\n    CV_WRAP virtual void setComplexityReductionThreshold(double ct) = 0;\n\n    /** @brief Returns the shadow detection flag\n\n    If true, the algorithm detects shadows and marks them. See createBackgroundSubtractorMOG2 for\n    details.\n     */\n    CV_WRAP virtual bool getDetectShadows() const = 0;\n    /** @brief Enables or disables shadow detection\n    */\n    CV_WRAP virtual void setDetectShadows(bool detectShadows) = 0;\n\n    /** @brief Returns the shadow value\n\n    Shadow value is the value used to mark shadows in the foreground mask. Default value is 127. Value 0\n    in the mask always means background, 255 means foreground.\n     */\n    CV_WRAP virtual int getShadowValue() const = 0;\n    /** @brief Sets the shadow value\n    */\n    CV_WRAP virtual void setShadowValue(int value) = 0;\n\n    /** @brief Returns the shadow threshold\n\n    A shadow is detected if pixel is a darker version of the background. The shadow threshold (Tau in\n    the paper) is a threshold defining how much darker the shadow can be. Tau= 0.5 means that if a pixel\n    is more than twice darker then it is not shadow. See Prati, Mikic, Trivedi and Cucchiarra,\n    *Detecting Moving Shadows...*, IEEE PAMI,2003.\n     */\n    CV_WRAP virtual double getShadowThreshold() const = 0;\n    /** @brief Sets the shadow threshold\n    */\n    CV_WRAP virtual void setShadowThreshold(double threshold) = 0;\n};\n\n/** @brief Creates MOG2 Background Subtractor\n\n@param history Length of the history.\n@param varThreshold Threshold on the squared Mahalanobis distance between the pixel and the model\nto decide whether a pixel is well described by the background model. This parameter does not\naffect the background update.\n@param detectShadows If true, the algorithm will detect shadows and mark them. It decreases the\nspeed a bit, so if you do not need this feature, set the parameter to false.\n */\nCV_EXPORTS_W Ptr<BackgroundSubtractorMOG2>\n    createBackgroundSubtractorMOG2(int history=500, double varThreshold=16,\n                                   bool detectShadows=true);\n\n/** @brief K-nearest neigbours - based Background/Foreground Segmentation Algorithm.\n\nThe class implements the K-nearest neigbours background subtraction described in @cite Zivkovic2006 .\nVery efficient if number of foreground pixels is low.\n */\nclass CV_EXPORTS_W BackgroundSubtractorKNN : public BackgroundSubtractor\n{\npublic:\n    /** @brief Returns the number of last frames that affect the background model\n    */\n    CV_WRAP virtual int getHistory() const = 0;\n    /** @brief Sets the number of last frames that affect the background model\n    */\n    CV_WRAP virtual void setHistory(int history) = 0;\n\n    /** @brief Returns the number of data samples in the background model\n    */\n    CV_WRAP virtual int getNSamples() const = 0;\n    /** @brief Sets the number of data samples in the background model.\n\n    The model needs to be reinitalized to reserve memory.\n    */\n    CV_WRAP virtual void setNSamples(int _nN) = 0;//needs reinitialization!\n\n    /** @brief Returns the threshold on the squared distance between the pixel and the sample\n\n    The threshold on the squared distance between the pixel and the sample to decide whether a pixel is\n    close to a data sample.\n     */\n    CV_WRAP virtual double getDist2Threshold() const = 0;\n    /** @brief Sets the threshold on the squared distance\n    */\n    CV_WRAP virtual void setDist2Threshold(double _dist2Threshold) = 0;\n\n    /** @brief Returns the number of neighbours, the k in the kNN.\n\n    K is the number of samples that need to be within dist2Threshold in order to decide that that\n    pixel is matching the kNN background model.\n     */\n    CV_WRAP virtual int getkNNSamples() const = 0;\n    /** @brief Sets the k in the kNN. How many nearest neigbours need to match.\n    */\n    CV_WRAP virtual void setkNNSamples(int _nkNN) = 0;\n\n    /** @brief Returns the shadow detection flag\n\n    If true, the algorithm detects shadows and marks them. See createBackgroundSubtractorKNN for\n    details.\n     */\n    CV_WRAP virtual bool getDetectShadows() const = 0;\n    /** @brief Enables or disables shadow detection\n    */\n    CV_WRAP virtual void setDetectShadows(bool detectShadows) = 0;\n\n    /** @brief Returns the shadow value\n\n    Shadow value is the value used to mark shadows in the foreground mask. Default value is 127. Value 0\n    in the mask always means background, 255 means foreground.\n     */\n    CV_WRAP virtual int getShadowValue() const = 0;\n    /** @brief Sets the shadow value\n    */\n    CV_WRAP virtual void setShadowValue(int value) = 0;\n\n    /** @brief Returns the shadow threshold\n\n    A shadow is detected if pixel is a darker version of the background. The shadow threshold (Tau in\n    the paper) is a threshold defining how much darker the shadow can be. Tau= 0.5 means that if a pixel\n    is more than twice darker then it is not shadow. See Prati, Mikic, Trivedi and Cucchiarra,\n    *Detecting Moving Shadows...*, IEEE PAMI,2003.\n     */\n    CV_WRAP virtual double getShadowThreshold() const = 0;\n    /** @brief Sets the shadow threshold\n     */\n    CV_WRAP virtual void setShadowThreshold(double threshold) = 0;\n};\n\n/** @brief Creates KNN Background Subtractor\n\n@param history Length of the history.\n@param dist2Threshold Threshold on the squared distance between the pixel and the sample to decide\nwhether a pixel is close to that sample. This parameter does not affect the background update.\n@param detectShadows If true, the algorithm will detect shadows and mark them. It decreases the\nspeed a bit, so if you do not need this feature, set the parameter to false.\n */\nCV_EXPORTS_W Ptr<BackgroundSubtractorKNN>\n    createBackgroundSubtractorKNN(int history=500, double dist2Threshold=400.0,\n                                   bool detectShadows=true);\n\n//! @} video_motion\n\n} // cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/video/tracking.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_TRACKING_HPP__\n#define __OPENCV_TRACKING_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/imgproc.hpp\"\n\nnamespace cv\n{\n\n//! @addtogroup video_track\n//! @{\n\nenum { OPTFLOW_USE_INITIAL_FLOW     = 4,\n       OPTFLOW_LK_GET_MIN_EIGENVALS = 8,\n       OPTFLOW_FARNEBACK_GAUSSIAN   = 256\n     };\n\n/** @brief Finds an object center, size, and orientation.\n\n@param probImage Back projection of the object histogram. See calcBackProject.\n@param window Initial search window.\n@param criteria Stop criteria for the underlying meanShift.\nreturns\n(in old interfaces) Number of iterations CAMSHIFT took to converge\nThe function implements the CAMSHIFT object tracking algorithm @cite Bradski98 . First, it finds an\nobject center using meanShift and then adjusts the window size and finds the optimal rotation. The\nfunction returns the rotated rectangle structure that includes the object position, size, and\norientation. The next position of the search window can be obtained with RotatedRect::boundingRect()\n\nSee the OpenCV sample camshiftdemo.c that tracks colored objects.\n\n@note\n-   (Python) A sample explaining the camshift tracking algorithm can be found at\n    opencv_source_code/samples/python/camshift.py\n */\nCV_EXPORTS_W RotatedRect CamShift( InputArray probImage, CV_IN_OUT Rect& window,\n                                   TermCriteria criteria );\n\n/** @brief Finds an object on a back projection image.\n\n@param probImage Back projection of the object histogram. See calcBackProject for details.\n@param window Initial search window.\n@param criteria Stop criteria for the iterative search algorithm.\nreturns\n:   Number of iterations CAMSHIFT took to converge.\nThe function implements the iterative object search algorithm. It takes the input back projection of\nan object and the initial position. The mass center in window of the back projection image is\ncomputed and the search window center shifts to the mass center. The procedure is repeated until the\nspecified number of iterations criteria.maxCount is done or until the window center shifts by less\nthan criteria.epsilon. The algorithm is used inside CamShift and, unlike CamShift , the search\nwindow size or orientation do not change during the search. You can simply pass the output of\ncalcBackProject to this function. But better results can be obtained if you pre-filter the back\nprojection and remove the noise. For example, you can do this by retrieving connected components\nwith findContours , throwing away contours with small area ( contourArea ), and rendering the\nremaining contours with drawContours.\n\n@note\n-   A mean-shift tracking sample can be found at opencv_source_code/samples/cpp/camshiftdemo.cpp\n */\nCV_EXPORTS_W int meanShift( InputArray probImage, CV_IN_OUT Rect& window, TermCriteria criteria );\n\n/** @brief Constructs the image pyramid which can be passed to calcOpticalFlowPyrLK.\n\n@param img 8-bit input image.\n@param pyramid output pyramid.\n@param winSize window size of optical flow algorithm. Must be not less than winSize argument of\ncalcOpticalFlowPyrLK. It is needed to calculate required padding for pyramid levels.\n@param maxLevel 0-based maximal pyramid level number.\n@param withDerivatives set to precompute gradients for the every pyramid level. If pyramid is\nconstructed without the gradients then calcOpticalFlowPyrLK will calculate them internally.\n@param pyrBorder the border mode for pyramid layers.\n@param derivBorder the border mode for gradients.\n@param tryReuseInputImage put ROI of input image into the pyramid if possible. You can pass false\nto force data copying.\n@return number of levels in constructed pyramid. Can be less than maxLevel.\n */\nCV_EXPORTS_W int buildOpticalFlowPyramid( InputArray img, OutputArrayOfArrays pyramid,\n                                          Size winSize, int maxLevel, bool withDerivatives = true,\n                                          int pyrBorder = BORDER_REFLECT_101,\n                                          int derivBorder = BORDER_CONSTANT,\n                                          bool tryReuseInputImage = true );\n\n/** @brief Calculates an optical flow for a sparse feature set using the iterative Lucas-Kanade method with\npyramids.\n\n@param prevImg first 8-bit input image or pyramid constructed by buildOpticalFlowPyramid.\n@param nextImg second input image or pyramid of the same size and the same type as prevImg.\n@param prevPts vector of 2D points for which the flow needs to be found; point coordinates must be\nsingle-precision floating-point numbers.\n@param nextPts output vector of 2D points (with single-precision floating-point coordinates)\ncontaining the calculated new positions of input features in the second image; when\nOPTFLOW_USE_INITIAL_FLOW flag is passed, the vector must have the same size as in the input.\n@param status output status vector (of unsigned chars); each element of the vector is set to 1 if\nthe flow for the corresponding features has been found, otherwise, it is set to 0.\n@param err output vector of errors; each element of the vector is set to an error for the\ncorresponding feature, type of the error measure can be set in flags parameter; if the flow wasn't\nfound then the error is not defined (use the status parameter to find such cases).\n@param winSize size of the search window at each pyramid level.\n@param maxLevel 0-based maximal pyramid level number; if set to 0, pyramids are not used (single\nlevel), if set to 1, two levels are used, and so on; if pyramids are passed to input then\nalgorithm will use as many levels as pyramids have but no more than maxLevel.\n@param criteria parameter, specifying the termination criteria of the iterative search algorithm\n(after the specified maximum number of iterations criteria.maxCount or when the search window\nmoves by less than criteria.epsilon.\n@param flags operation flags:\n -   **OPTFLOW_USE_INITIAL_FLOW** uses initial estimations, stored in nextPts; if the flag is\n     not set, then prevPts is copied to nextPts and is considered the initial estimate.\n -   **OPTFLOW_LK_GET_MIN_EIGENVALS** use minimum eigen values as an error measure (see\n     minEigThreshold description); if the flag is not set, then L1 distance between patches\n     around the original and a moved point, divided by number of pixels in a window, is used as a\n     error measure.\n@param minEigThreshold the algorithm calculates the minimum eigen value of a 2x2 normal matrix of\noptical flow equations (this matrix is called a spatial gradient matrix in @cite Bouguet00), divided\nby number of pixels in a window; if this value is less than minEigThreshold, then a corresponding\nfeature is filtered out and its flow is not processed, so it allows to remove bad points and get a\nperformance boost.\n\nThe function implements a sparse iterative version of the Lucas-Kanade optical flow in pyramids. See\n@cite Bouguet00 . The function is parallelized with the TBB library.\n\n@note\n\n-   An example using the Lucas-Kanade optical flow algorithm can be found at\n    opencv_source_code/samples/cpp/lkdemo.cpp\n-   (Python) An example using the Lucas-Kanade optical flow algorithm can be found at\n    opencv_source_code/samples/python/lk_track.py\n-   (Python) An example using the Lucas-Kanade tracker for homography matching can be found at\n    opencv_source_code/samples/python/lk_homography.py\n */\nCV_EXPORTS_W void calcOpticalFlowPyrLK( InputArray prevImg, InputArray nextImg,\n                                        InputArray prevPts, InputOutputArray nextPts,\n                                        OutputArray status, OutputArray err,\n                                        Size winSize = Size(21,21), int maxLevel = 3,\n                                        TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01),\n                                        int flags = 0, double minEigThreshold = 1e-4 );\n\n/** @brief Computes a dense optical flow using the Gunnar Farneback's algorithm.\n\n@param prev first 8-bit single-channel input image.\n@param next second input image of the same size and the same type as prev.\n@param flow computed flow image that has the same size as prev and type CV_32FC2.\n@param pyr_scale parameter, specifying the image scale (\\<1) to build pyramids for each image;\npyr_scale=0.5 means a classical pyramid, where each next layer is twice smaller than the previous\none.\n@param levels number of pyramid layers including the initial image; levels=1 means that no extra\nlayers are created and only the original images are used.\n@param winsize averaging window size; larger values increase the algorithm robustness to image\nnoise and give more chances for fast motion detection, but yield more blurred motion field.\n@param iterations number of iterations the algorithm does at each pyramid level.\n@param poly_n size of the pixel neighborhood used to find polynomial expansion in each pixel;\nlarger values mean that the image will be approximated with smoother surfaces, yielding more\nrobust algorithm and more blurred motion field, typically poly_n =5 or 7.\n@param poly_sigma standard deviation of the Gaussian that is used to smooth derivatives used as a\nbasis for the polynomial expansion; for poly_n=5, you can set poly_sigma=1.1, for poly_n=7, a\ngood value would be poly_sigma=1.5.\n@param flags operation flags that can be a combination of the following:\n -   **OPTFLOW_USE_INITIAL_FLOW** uses the input flow as an initial flow approximation.\n -   **OPTFLOW_FARNEBACK_GAUSSIAN** uses the Gaussian \\f$\\texttt{winsize}\\times\\texttt{winsize}\\f$\n     filter instead of a box filter of the same size for optical flow estimation; usually, this\n     option gives z more accurate flow than with a box filter, at the cost of lower speed;\n     normally, winsize for a Gaussian window should be set to a larger value to achieve the same\n     level of robustness.\n\nThe function finds an optical flow for each prev pixel using the @cite Farneback2003 algorithm so that\n\n\\f[\\texttt{prev} (y,x)  \\sim \\texttt{next} ( y + \\texttt{flow} (y,x)[1],  x + \\texttt{flow} (y,x)[0])\\f]\n\n@note\n\n-   An example using the optical flow algorithm described by Gunnar Farneback can be found at\n    opencv_source_code/samples/cpp/fback.cpp\n-   (Python) An example using the optical flow algorithm described by Gunnar Farneback can be\n    found at opencv_source_code/samples/python/opt_flow.py\n */\nCV_EXPORTS_W void calcOpticalFlowFarneback( InputArray prev, InputArray next, InputOutputArray flow,\n                                            double pyr_scale, int levels, int winsize,\n                                            int iterations, int poly_n, double poly_sigma,\n                                            int flags );\n\n/** @brief Computes an optimal affine transformation between two 2D point sets.\n\n@param src First input 2D point set stored in std::vector or Mat, or an image stored in Mat.\n@param dst Second input 2D point set of the same size and the same type as A, or another image.\n@param fullAffine If true, the function finds an optimal affine transformation with no additional\nrestrictions (6 degrees of freedom). Otherwise, the class of transformations to choose from is\nlimited to combinations of translation, rotation, and uniform scaling (5 degrees of freedom).\n\nThe function finds an optimal affine transform *[A|b]* (a 2 x 3 floating-point matrix) that\napproximates best the affine transformation between:\n\n*   Two point sets\n*   Two raster images. In this case, the function first finds some features in the src image and\n    finds the corresponding features in dst image. After that, the problem is reduced to the first\n    case.\nIn case of point sets, the problem is formulated as follows: you need to find a 2x2 matrix *A* and\n2x1 vector *b* so that:\n\n\\f[[A^*|b^*] = arg  \\min _{[A|b]}  \\sum _i  \\| \\texttt{dst}[i] - A { \\texttt{src}[i]}^T - b  \\| ^2\\f]\nwhere src[i] and dst[i] are the i-th points in src and dst, respectively\n\\f$[A|b]\\f$ can be either arbitrary (when fullAffine=true ) or have a form of\n\\f[\\begin{bmatrix} a_{11} & a_{12} & b_1  \\\\ -a_{12} & a_{11} & b_2  \\end{bmatrix}\\f]\nwhen fullAffine=false.\n\n@sa\ngetAffineTransform, getPerspectiveTransform, findHomography\n */\nCV_EXPORTS_W Mat estimateRigidTransform( InputArray src, InputArray dst, bool fullAffine );\n\n\nenum\n{\n    MOTION_TRANSLATION = 0,\n    MOTION_EUCLIDEAN   = 1,\n    MOTION_AFFINE      = 2,\n    MOTION_HOMOGRAPHY  = 3\n};\n\n/** @brief Finds the geometric transform (warp) between two images in terms of the ECC criterion @cite EP08 .\n\n@param templateImage single-channel template image; CV_8U or CV_32F array.\n@param inputImage single-channel input image which should be warped with the final warpMatrix in\norder to provide an image similar to templateImage, same type as temlateImage.\n@param warpMatrix floating-point \\f$2\\times 3\\f$ or \\f$3\\times 3\\f$ mapping matrix (warp).\n@param motionType parameter, specifying the type of motion:\n -   **MOTION_TRANSLATION** sets a translational motion model; warpMatrix is \\f$2\\times 3\\f$ with\n     the first \\f$2\\times 2\\f$ part being the unity matrix and the rest two parameters being\n     estimated.\n -   **MOTION_EUCLIDEAN** sets a Euclidean (rigid) transformation as motion model; three\n     parameters are estimated; warpMatrix is \\f$2\\times 3\\f$.\n -   **MOTION_AFFINE** sets an affine motion model (DEFAULT); six parameters are estimated;\n     warpMatrix is \\f$2\\times 3\\f$.\n -   **MOTION_HOMOGRAPHY** sets a homography as a motion model; eight parameters are\n     estimated;\\`warpMatrix\\` is \\f$3\\times 3\\f$.\n@param criteria parameter, specifying the termination criteria of the ECC algorithm;\ncriteria.epsilon defines the threshold of the increment in the correlation coefficient between two\niterations (a negative criteria.epsilon makes criteria.maxcount the only termination criterion).\nDefault values are shown in the declaration above.\n@param inputMask An optional mask to indicate valid values of inputImage.\n\nThe function estimates the optimum transformation (warpMatrix) with respect to ECC criterion\n(@cite EP08), that is\n\n\\f[\\texttt{warpMatrix} = \\texttt{warpMatrix} = \\arg\\max_{W} \\texttt{ECC}(\\texttt{templateImage}(x,y),\\texttt{inputImage}(x',y'))\\f]\n\nwhere\n\n\\f[\\begin{bmatrix} x' \\\\ y' \\end{bmatrix} = W \\cdot \\begin{bmatrix} x \\\\ y \\\\ 1 \\end{bmatrix}\\f]\n\n(the equation holds with homogeneous coordinates for homography). It returns the final enhanced\ncorrelation coefficient, that is the correlation coefficient between the template image and the\nfinal warped input image. When a \\f$3\\times 3\\f$ matrix is given with motionType =0, 1 or 2, the third\nrow is ignored.\n\nUnlike findHomography and estimateRigidTransform, the function findTransformECC implements an\narea-based alignment that builds on intensity similarities. In essence, the function updates the\ninitial transformation that roughly aligns the images. If this information is missing, the identity\nwarp (unity matrix) should be given as input. Note that if images undergo strong\ndisplacements/rotations, an initial transformation that roughly aligns the images is necessary\n(e.g., a simple euclidean/similarity transform that allows for the images showing the same image\ncontent approximately). Use inverse warping in the second image to take an image close to the first\none, i.e. use the flag WARP_INVERSE_MAP with warpAffine or warpPerspective. See also the OpenCV\nsample image_alignment.cpp that demonstrates the use of the function. Note that the function throws\nan exception if algorithm does not converges.\n\n@sa\nestimateRigidTransform, findHomography\n */\nCV_EXPORTS_W double findTransformECC( InputArray templateImage, InputArray inputImage,\n                                      InputOutputArray warpMatrix, int motionType = MOTION_AFFINE,\n                                      TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 50, 0.001),\n                                      InputArray inputMask = noArray());\n\n/** @brief Kalman filter class.\n\nThe class implements a standard Kalman filter <http://en.wikipedia.org/wiki/Kalman_filter>,\n@cite Welch95 . However, you can modify transitionMatrix, controlMatrix, and measurementMatrix to get\nan extended Kalman filter functionality. See the OpenCV sample kalman.cpp.\n\n@note\n\n-   An example using the standard Kalman filter can be found at\n    opencv_source_code/samples/cpp/kalman.cpp\n */\nclass CV_EXPORTS_W KalmanFilter\n{\npublic:\n    /** @brief The constructors.\n\n    @note In C API when CvKalman\\* kalmanFilter structure is not needed anymore, it should be released\n    with cvReleaseKalman(&kalmanFilter)\n     */\n    CV_WRAP KalmanFilter();\n    /** @overload\n    @param dynamParams Dimensionality of the state.\n    @param measureParams Dimensionality of the measurement.\n    @param controlParams Dimensionality of the control vector.\n    @param type Type of the created matrices that should be CV_32F or CV_64F.\n    */\n    CV_WRAP KalmanFilter( int dynamParams, int measureParams, int controlParams = 0, int type = CV_32F );\n\n    /** @brief Re-initializes Kalman filter. The previous content is destroyed.\n\n    @param dynamParams Dimensionality of the state.\n    @param measureParams Dimensionality of the measurement.\n    @param controlParams Dimensionality of the control vector.\n    @param type Type of the created matrices that should be CV_32F or CV_64F.\n     */\n    void init( int dynamParams, int measureParams, int controlParams = 0, int type = CV_32F );\n\n    /** @brief Computes a predicted state.\n\n    @param control The optional input control\n     */\n    CV_WRAP const Mat& predict( const Mat& control = Mat() );\n\n    /** @brief Updates the predicted state from the measurement.\n\n    @param measurement The measured system parameters\n     */\n    CV_WRAP const Mat& correct( const Mat& measurement );\n\n    CV_PROP_RW Mat statePre;           //!< predicted state (x'(k)): x(k)=A*x(k-1)+B*u(k)\n    CV_PROP_RW Mat statePost;          //!< corrected state (x(k)): x(k)=x'(k)+K(k)*(z(k)-H*x'(k))\n    CV_PROP_RW Mat transitionMatrix;   //!< state transition matrix (A)\n    CV_PROP_RW Mat controlMatrix;      //!< control matrix (B) (not used if there is no control)\n    CV_PROP_RW Mat measurementMatrix;  //!< measurement matrix (H)\n    CV_PROP_RW Mat processNoiseCov;    //!< process noise covariance matrix (Q)\n    CV_PROP_RW Mat measurementNoiseCov;//!< measurement noise covariance matrix (R)\n    CV_PROP_RW Mat errorCovPre;        //!< priori error estimate covariance matrix (P'(k)): P'(k)=A*P(k-1)*At + Q)*/\n    CV_PROP_RW Mat gain;               //!< Kalman gain matrix (K(k)): K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)\n    CV_PROP_RW Mat errorCovPost;       //!< posteriori error estimate covariance matrix (P(k)): P(k)=(I-K(k)*H)*P'(k)\n\n    // temporary matrices\n    Mat temp1;\n    Mat temp2;\n    Mat temp3;\n    Mat temp4;\n    Mat temp5;\n};\n\n\nclass CV_EXPORTS_W DenseOpticalFlow : public Algorithm\n{\npublic:\n    /** @brief Calculates an optical flow.\n\n    @param I0 first 8-bit single-channel input image.\n    @param I1 second input image of the same size and the same type as prev.\n    @param flow computed flow image that has the same size as prev and type CV_32FC2.\n     */\n    CV_WRAP virtual void calc( InputArray I0, InputArray I1, InputOutputArray flow ) = 0;\n    /** @brief Releases all inner buffers.\n    */\n    CV_WRAP virtual void collectGarbage() = 0;\n};\n\n/** @brief \"Dual TV L1\" Optical Flow Algorithm.\n\nThe class implements the \"Dual TV L1\" optical flow algorithm described in @cite Zach2007 and\n@cite Javier2012 .\nHere are important members of the class that control the algorithm, which you can set after\nconstructing the class instance:\n\n-   member double tau\n    Time step of the numerical scheme.\n\n-   member double lambda\n    Weight parameter for the data term, attachment parameter. This is the most relevant\n    parameter, which determines the smoothness of the output. The smaller this parameter is,\n    the smoother the solutions we obtain. It depends on the range of motions of the images, so\n    its value should be adapted to each image sequence.\n\n-   member double theta\n    Weight parameter for (u - v)\\^2, tightness parameter. It serves as a link between the\n    attachment and the regularization terms. In theory, it should have a small value in order\n    to maintain both parts in correspondence. The method is stable for a large range of values\n    of this parameter.\n\n-   member int nscales\n    Number of scales used to create the pyramid of images.\n\n-   member int warps\n    Number of warpings per scale. Represents the number of times that I1(x+u0) and grad(\n    I1(x+u0) ) are computed per scale. This is a parameter that assures the stability of the\n    method. It also affects the running time, so it is a compromise between speed and\n    accuracy.\n\n-   member double epsilon\n    Stopping criterion threshold used in the numerical scheme, which is a trade-off between\n    precision and running time. A small value will yield more accurate solutions at the\n    expense of a slower convergence.\n\n-   member int iterations\n    Stopping criterion iterations number used in the numerical scheme.\n\nC. Zach, T. Pock and H. Bischof, \"A Duality Based Approach for Realtime TV-L1 Optical Flow\".\nJavier Sanchez, Enric Meinhardt-Llopis and Gabriele Facciolo. \"TV-L1 Optical Flow Estimation\".\n*/\nclass CV_EXPORTS_W DualTVL1OpticalFlow : public DenseOpticalFlow\n{\npublic:\n    //! @brief Time step of the numerical scheme\n    /** @see setTau */\n    virtual double getTau() const = 0;\n    /** @copybrief getTau @see getTau */\n    virtual void setTau(double val) = 0;\n    //! @brief Weight parameter for the data term, attachment parameter\n    /** @see setLambda */\n    virtual double getLambda() const = 0;\n    /** @copybrief getLambda @see getLambda */\n    virtual void setLambda(double val) = 0;\n    //! @brief Weight parameter for (u - v)^2, tightness parameter\n    /** @see setTheta */\n    virtual double getTheta() const = 0;\n    /** @copybrief getTheta @see getTheta */\n    virtual void setTheta(double val) = 0;\n    //! @brief coefficient for additional illumination variation term\n    /** @see setGamma */\n    virtual double getGamma() const = 0;\n    /** @copybrief getGamma @see getGamma */\n    virtual void setGamma(double val) = 0;\n    //! @brief Number of scales used to create the pyramid of images\n    /** @see setScalesNumber */\n    virtual int getScalesNumber() const = 0;\n    /** @copybrief getScalesNumber @see getScalesNumber */\n    virtual void setScalesNumber(int val) = 0;\n    //! @brief Number of warpings per scale\n    /** @see setWarpingsNumber */\n    virtual int getWarpingsNumber() const = 0;\n    /** @copybrief getWarpingsNumber @see getWarpingsNumber */\n    virtual void setWarpingsNumber(int val) = 0;\n    //! @brief Stopping criterion threshold used in the numerical scheme, which is a trade-off between precision and running time\n    /** @see setEpsilon */\n    virtual double getEpsilon() const = 0;\n    /** @copybrief getEpsilon @see getEpsilon */\n    virtual void setEpsilon(double val) = 0;\n    //! @brief Inner iterations (between outlier filtering) used in the numerical scheme\n    /** @see setInnerIterations */\n    virtual int getInnerIterations() const = 0;\n    /** @copybrief getInnerIterations @see getInnerIterations */\n    virtual void setInnerIterations(int val) = 0;\n    //! @brief Outer iterations (number of inner loops) used in the numerical scheme\n    /** @see setOuterIterations */\n    virtual int getOuterIterations() const = 0;\n    /** @copybrief getOuterIterations @see getOuterIterations */\n    virtual void setOuterIterations(int val) = 0;\n    //! @brief Use initial flow\n    /** @see setUseInitialFlow */\n    virtual bool getUseInitialFlow() const = 0;\n    /** @copybrief getUseInitialFlow @see getUseInitialFlow */\n    virtual void setUseInitialFlow(bool val) = 0;\n    //! @brief Step between scales (<1)\n    /** @see setScaleStep */\n    virtual double getScaleStep() const = 0;\n    /** @copybrief getScaleStep @see getScaleStep */\n    virtual void setScaleStep(double val) = 0;\n    //! @brief Median filter kernel size (1 = no filter) (3 or 5)\n    /** @see setMedianFiltering */\n    virtual int getMedianFiltering() const = 0;\n    /** @copybrief getMedianFiltering @see getMedianFiltering */\n    virtual void setMedianFiltering(int val) = 0;\n};\n\n/** @brief Creates instance of cv::DenseOpticalFlow\n*/\nCV_EXPORTS_W Ptr<DualTVL1OpticalFlow> createOptFlow_DualTVL1();\n\n//! @} video_track\n\n} // cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/video/tracking_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_TRACKING_C_H__\n#define __OPENCV_TRACKING_C_H__\n\n#include \"opencv2/imgproc/types_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @addtogroup video_c\n  @{\n*/\n\n/****************************************************************************************\\\n*                                  Motion Analysis                                       *\n\\****************************************************************************************/\n\n/************************************ optical flow ***************************************/\n\n#define CV_LKFLOW_PYR_A_READY       1\n#define CV_LKFLOW_PYR_B_READY       2\n#define CV_LKFLOW_INITIAL_GUESSES   4\n#define CV_LKFLOW_GET_MIN_EIGENVALS 8\n\n/* It is Lucas & Kanade method, modified to use pyramids.\n   Also it does several iterations to get optical flow for\n   every point at every pyramid level.\n   Calculates optical flow between two images for certain set of points (i.e.\n   it is a \"sparse\" optical flow, which is opposite to the previous 3 methods) */\nCVAPI(void)  cvCalcOpticalFlowPyrLK( const CvArr*  prev, const CvArr*  curr,\n                                     CvArr*  prev_pyr, CvArr*  curr_pyr,\n                                     const CvPoint2D32f* prev_features,\n                                     CvPoint2D32f* curr_features,\n                                     int       count,\n                                     CvSize    win_size,\n                                     int       level,\n                                     char*     status,\n                                     float*    track_error,\n                                     CvTermCriteria criteria,\n                                     int       flags );\n\n\n/* Modification of a previous sparse optical flow algorithm to calculate\n   affine flow */\nCVAPI(void)  cvCalcAffineFlowPyrLK( const CvArr*  prev, const CvArr*  curr,\n                                    CvArr*  prev_pyr, CvArr*  curr_pyr,\n                                    const CvPoint2D32f* prev_features,\n                                    CvPoint2D32f* curr_features,\n                                    float* matrices, int  count,\n                                    CvSize win_size, int  level,\n                                    char* status, float* track_error,\n                                    CvTermCriteria criteria, int flags );\n\n/* Estimate rigid transformation between 2 images or 2 point sets */\nCVAPI(int)  cvEstimateRigidTransform( const CvArr* A, const CvArr* B,\n                                      CvMat* M, int full_affine );\n\n/* Estimate optical flow for each pixel using the two-frame G. Farneback algorithm */\nCVAPI(void) cvCalcOpticalFlowFarneback( const CvArr* prev, const CvArr* next,\n                                        CvArr* flow, double pyr_scale, int levels,\n                                        int winsize, int iterations, int poly_n,\n                                        double poly_sigma, int flags );\n\n/********************************* motion templates *************************************/\n\n/****************************************************************************************\\\n*        All the motion template functions work only with single channel images.         *\n*        Silhouette image must have depth IPL_DEPTH_8U or IPL_DEPTH_8S                   *\n*        Motion history image must have depth IPL_DEPTH_32F,                             *\n*        Gradient mask - IPL_DEPTH_8U or IPL_DEPTH_8S,                                   *\n*        Motion orientation image - IPL_DEPTH_32F                                        *\n*        Segmentation mask - IPL_DEPTH_32F                                               *\n*        All the angles are in degrees, all the times are in milliseconds                *\n\\****************************************************************************************/\n\n/* Updates motion history image given motion silhouette */\nCVAPI(void)    cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi,\n                                      double timestamp, double duration );\n\n/* Calculates gradient of the motion history image and fills\n   a mask indicating where the gradient is valid */\nCVAPI(void)    cvCalcMotionGradient( const CvArr* mhi, CvArr* mask, CvArr* orientation,\n                                     double delta1, double delta2,\n                                     int aperture_size CV_DEFAULT(3));\n\n/* Calculates average motion direction within a selected motion region\n   (region can be selected by setting ROIs and/or by composing a valid gradient mask\n   with the region mask) */\nCVAPI(double)  cvCalcGlobalOrientation( const CvArr* orientation, const CvArr* mask,\n                                        const CvArr* mhi, double timestamp,\n                                        double duration );\n\n/* Splits a motion history image into a few parts corresponding to separate independent motions\n   (e.g. left hand, right hand) */\nCVAPI(CvSeq*)  cvSegmentMotion( const CvArr* mhi, CvArr* seg_mask,\n                                CvMemStorage* storage,\n                                double timestamp, double seg_thresh );\n\n/****************************************************************************************\\\n*                                       Tracking                                         *\n\\****************************************************************************************/\n\n/* Implements CAMSHIFT algorithm - determines object position, size and orientation\n   from the object histogram back project (extension of meanshift) */\nCVAPI(int)  cvCamShift( const CvArr* prob_image, CvRect  window,\n                        CvTermCriteria criteria, CvConnectedComp* comp,\n                        CvBox2D* box CV_DEFAULT(NULL) );\n\n/* Implements MeanShift algorithm - determines object position\n   from the object histogram back project */\nCVAPI(int)  cvMeanShift( const CvArr* prob_image, CvRect  window,\n                         CvTermCriteria criteria, CvConnectedComp* comp );\n\n/*\nstandard Kalman filter (in G. Welch' and G. Bishop's notation):\n\n  x(k)=A*x(k-1)+B*u(k)+w(k)  p(w)~N(0,Q)\n  z(k)=H*x(k)+v(k),   p(v)~N(0,R)\n*/\ntypedef struct CvKalman\n{\n    int MP;                     /* number of measurement vector dimensions */\n    int DP;                     /* number of state vector dimensions */\n    int CP;                     /* number of control vector dimensions */\n\n    /* backward compatibility fields */\n#if 1\n    float* PosterState;         /* =state_pre->data.fl */\n    float* PriorState;          /* =state_post->data.fl */\n    float* DynamMatr;           /* =transition_matrix->data.fl */\n    float* MeasurementMatr;     /* =measurement_matrix->data.fl */\n    float* MNCovariance;        /* =measurement_noise_cov->data.fl */\n    float* PNCovariance;        /* =process_noise_cov->data.fl */\n    float* KalmGainMatr;        /* =gain->data.fl */\n    float* PriorErrorCovariance;/* =error_cov_pre->data.fl */\n    float* PosterErrorCovariance;/* =error_cov_post->data.fl */\n    float* Temp1;               /* temp1->data.fl */\n    float* Temp2;               /* temp2->data.fl */\n#endif\n\n    CvMat* state_pre;           /* predicted state (x'(k)):\n                                    x(k)=A*x(k-1)+B*u(k) */\n    CvMat* state_post;          /* corrected state (x(k)):\n                                    x(k)=x'(k)+K(k)*(z(k)-H*x'(k)) */\n    CvMat* transition_matrix;   /* state transition matrix (A) */\n    CvMat* control_matrix;      /* control matrix (B)\n                                   (it is not used if there is no control)*/\n    CvMat* measurement_matrix;  /* measurement matrix (H) */\n    CvMat* process_noise_cov;   /* process noise covariance matrix (Q) */\n    CvMat* measurement_noise_cov; /* measurement noise covariance matrix (R) */\n    CvMat* error_cov_pre;       /* priori error estimate covariance matrix (P'(k)):\n                                    P'(k)=A*P(k-1)*At + Q)*/\n    CvMat* gain;                /* Kalman gain matrix (K(k)):\n                                    K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)*/\n    CvMat* error_cov_post;      /* posteriori error estimate covariance matrix (P(k)):\n                                    P(k)=(I-K(k)*H)*P'(k) */\n    CvMat* temp1;               /* temporary matrices */\n    CvMat* temp2;\n    CvMat* temp3;\n    CvMat* temp4;\n    CvMat* temp5;\n} CvKalman;\n\n/* Creates Kalman filter and sets A, B, Q, R and state to some initial values */\nCVAPI(CvKalman*) cvCreateKalman( int dynam_params, int measure_params,\n                                 int control_params CV_DEFAULT(0));\n\n/* Releases Kalman filter state */\nCVAPI(void)  cvReleaseKalman( CvKalman** kalman);\n\n/* Updates Kalman filter by time (predicts future state of the system) */\nCVAPI(const CvMat*)  cvKalmanPredict( CvKalman* kalman,\n                                      const CvMat* control CV_DEFAULT(NULL));\n\n/* Updates Kalman filter by measurement\n   (corrects state of the system and internal matrices) */\nCVAPI(const CvMat*)  cvKalmanCorrect( CvKalman* kalman, const CvMat* measurement );\n\n#define cvKalmanUpdateByTime  cvKalmanPredict\n#define cvKalmanUpdateByMeasurement cvKalmanCorrect\n\n/** @} video_c */\n\n#ifdef __cplusplus\n} // extern \"C\"\n#endif\n\n\n#endif // __OPENCV_TRACKING_C_H__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/video/video.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/video.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/video.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEO_HPP__\n#define __OPENCV_VIDEO_HPP__\n\n/**\n  @defgroup video Video Analysis\n  @{\n    @defgroup video_motion Motion Analysis\n    @defgroup video_track Object Tracking\n    @defgroup video_c C API\n  @}\n*/\n\n#include \"opencv2/video/tracking.hpp\"\n#include \"opencv2/video/background_segm.hpp\"\n\n#ifndef DISABLE_OPENCV_24_COMPATIBILITY\n#include \"opencv2/video/tracking_c.h\"\n#endif\n\n#endif //__OPENCV_VIDEO_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videoio/cap_ios.h",
    "content": "/*  For iOS video I/O\n *  by Eduard Feicho on 29/07/12\n *  Copyright 2012. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n *    this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n */\n\n#import <UIKit/UIKit.h>\n#import <Accelerate/Accelerate.h>\n#import <AVFoundation/AVFoundation.h>\n#import <ImageIO/ImageIO.h>\n#include \"opencv2/core.hpp\"\n\n//! @addtogroup videoio_ios\n//! @{\n\n/////////////////////////////////////// CvAbstractCamera /////////////////////////////////////\n\n@class CvAbstractCamera;\n\n@interface CvAbstractCamera : NSObject\n{\n    AVCaptureSession* captureSession;\n    AVCaptureConnection* videoCaptureConnection;\n    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer;\n\n    UIDeviceOrientation currentDeviceOrientation;\n\n    BOOL cameraAvailable;\n    BOOL captureSessionLoaded;\n    BOOL running;\n    BOOL useAVCaptureVideoPreviewLayer;\n\n    AVCaptureDevicePosition defaultAVCaptureDevicePosition;\n    AVCaptureVideoOrientation defaultAVCaptureVideoOrientation;\n    NSString *const defaultAVCaptureSessionPreset;\n\n    int defaultFPS;\n\n    UIView* parentView;\n\n    int imageWidth;\n    int imageHeight;\n}\n\n@property (nonatomic, retain) AVCaptureSession* captureSession;\n@property (nonatomic, retain) AVCaptureConnection* videoCaptureConnection;\n\n@property (nonatomic, readonly) BOOL running;\n@property (nonatomic, readonly) BOOL captureSessionLoaded;\n\n@property (nonatomic, assign) int defaultFPS;\n@property (nonatomic, readonly) AVCaptureVideoPreviewLayer *captureVideoPreviewLayer;\n@property (nonatomic, assign) AVCaptureDevicePosition defaultAVCaptureDevicePosition;\n@property (nonatomic, assign) AVCaptureVideoOrientation defaultAVCaptureVideoOrientation;\n@property (nonatomic, assign) BOOL useAVCaptureVideoPreviewLayer;\n@property (nonatomic, strong) NSString *const defaultAVCaptureSessionPreset;\n\n@property (nonatomic, assign) int imageWidth;\n@property (nonatomic, assign) int imageHeight;\n\n@property (nonatomic, retain) UIView* parentView;\n\n- (void)start;\n- (void)stop;\n- (void)switchCameras;\n\n- (id)initWithParentView:(UIView*)parent;\n\n- (void)createCaptureOutput;\n- (void)createVideoPreviewLayer;\n- (void)updateOrientation;\n\n- (void)lockFocus;\n- (void)unlockFocus;\n- (void)lockExposure;\n- (void)unlockExposure;\n- (void)lockBalance;\n- (void)unlockBalance;\n\n@end\n\n///////////////////////////////// CvVideoCamera ///////////////////////////////////////////\n\n@class CvVideoCamera;\n\n@protocol CvVideoCameraDelegate <NSObject>\n\n#ifdef __cplusplus\n// delegate method for processing image frames\n- (void)processImage:(cv::Mat&)image;\n#endif\n\n@end\n\n@interface CvVideoCamera : CvAbstractCamera<AVCaptureVideoDataOutputSampleBufferDelegate>\n{\n    AVCaptureVideoDataOutput *videoDataOutput;\n\n    dispatch_queue_t videoDataOutputQueue;\n    CALayer *customPreviewLayer;\n\n    BOOL grayscaleMode;\n\n    BOOL recordVideo;\n    BOOL rotateVideo;\n    AVAssetWriterInput* recordAssetWriterInput;\n    AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor;\n    AVAssetWriter* recordAssetWriter;\n\n    CMTime lastSampleTime;\n\n}\n\n@property (nonatomic, assign) id<CvVideoCameraDelegate> delegate;\n@property (nonatomic, assign) BOOL grayscaleMode;\n\n@property (nonatomic, assign) BOOL recordVideo;\n@property (nonatomic, assign) BOOL rotateVideo;\n@property (nonatomic, retain) AVAssetWriterInput* recordAssetWriterInput;\n@property (nonatomic, retain) AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor;\n@property (nonatomic, retain) AVAssetWriter* recordAssetWriter;\n\n- (void)adjustLayoutToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;\n- (void)layoutPreviewLayer;\n- (void)saveVideo;\n- (NSURL *)videoFileURL;\n- (NSString *)videoFileString;\n\n\n@end\n\n///////////////////////////////// CvPhotoCamera ///////////////////////////////////////////\n\n@class CvPhotoCamera;\n\n@protocol CvPhotoCameraDelegate <NSObject>\n\n- (void)photoCamera:(CvPhotoCamera*)photoCamera capturedImage:(UIImage *)image;\n- (void)photoCameraCancel:(CvPhotoCamera*)photoCamera;\n\n@end\n\n@interface CvPhotoCamera : CvAbstractCamera\n{\n    AVCaptureStillImageOutput *stillImageOutput;\n}\n\n@property (nonatomic, assign) id<CvPhotoCameraDelegate> delegate;\n\n- (void)takePicture;\n\n@end\n\n//! @} videoio_ios\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videoio/videoio.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifdef __OPENCV_BUILD\n#error this is a compatibility header which should not be used inside the OpenCV library\n#endif\n\n#include \"opencv2/videoio.hpp\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videoio/videoio_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOIO_H__\n#define __OPENCV_VIDEOIO_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/**\n  @addtogroup videoio_c\n  @{\n*/\n\n/****************************************************************************************\\\n*                         Working with Video Files and Cameras                           *\n\\****************************************************************************************/\n\n/* \"black box\" capture structure */\ntypedef struct CvCapture CvCapture;\n\n/* start capturing frames from video file */\nCVAPI(CvCapture*) cvCreateFileCapture( const char* filename );\n\n/* start capturing frames from video file. allows specifying a preferred API to use */\nCVAPI(CvCapture*) cvCreateFileCaptureWithPreference( const char* filename , int apiPreference);\n\nenum\n{\n    CV_CAP_ANY      =0,     // autodetect\n\n    CV_CAP_MIL      =100,   // MIL proprietary drivers\n\n    CV_CAP_VFW      =200,   // platform native\n    CV_CAP_V4L      =200,\n    CV_CAP_V4L2     =200,\n\n    CV_CAP_FIREWARE =300,   // IEEE 1394 drivers\n    CV_CAP_FIREWIRE =300,\n    CV_CAP_IEEE1394 =300,\n    CV_CAP_DC1394   =300,\n    CV_CAP_CMU1394  =300,\n\n    CV_CAP_STEREO   =400,   // TYZX proprietary drivers\n    CV_CAP_TYZX     =400,\n    CV_TYZX_LEFT    =400,\n    CV_TYZX_RIGHT   =401,\n    CV_TYZX_COLOR   =402,\n    CV_TYZX_Z       =403,\n\n    CV_CAP_QT       =500,   // QuickTime\n\n    CV_CAP_UNICAP   =600,   // Unicap drivers\n\n    CV_CAP_DSHOW    =700,   // DirectShow (via videoInput)\n    CV_CAP_MSMF     =1400,  // Microsoft Media Foundation (via videoInput)\n\n    CV_CAP_PVAPI    =800,   // PvAPI, Prosilica GigE SDK\n\n    CV_CAP_OPENNI   =900,   // OpenNI (for Kinect)\n    CV_CAP_OPENNI_ASUS =910,   // OpenNI (for Asus Xtion)\n\n    CV_CAP_ANDROID  =1000,  // Android - not used\n    CV_CAP_ANDROID_BACK =CV_CAP_ANDROID+99, // Android back camera - not used\n    CV_CAP_ANDROID_FRONT =CV_CAP_ANDROID+98, // Android front camera - not used\n\n    CV_CAP_XIAPI    =1100,   // XIMEA Camera API\n\n    CV_CAP_AVFOUNDATION = 1200,  // AVFoundation framework for iOS (OS X Lion will have the same API)\n\n    CV_CAP_GIGANETIX = 1300,  // Smartek Giganetix GigEVisionSDK\n\n    CV_CAP_INTELPERC = 1500, // Intel Perceptual Computing\n\n    CV_CAP_OPENNI2 = 1600,   // OpenNI2 (for Kinect)\n    CV_CAP_GPHOTO2 = 1700,\n    CV_CAP_GSTREAMER = 1800, // GStreamer\n    CV_CAP_FFMPEG = 1900,    // FFMPEG\n    CV_CAP_IMAGES = 2000     // OpenCV Image Sequence (e.g. img_%02d.jpg)\n};\n\n/* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */\nCVAPI(CvCapture*) cvCreateCameraCapture( int index );\n\n/* grab a frame, return 1 on success, 0 on fail.\n  this function is thought to be fast               */\nCVAPI(int) cvGrabFrame( CvCapture* capture );\n\n/* get the frame grabbed with cvGrabFrame(..)\n  This function may apply some frame processing like\n  frame decompression, flipping etc.\n  !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */\nCVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture, int streamIdx CV_DEFAULT(0) );\n\n/* Just a combination of cvGrabFrame and cvRetrieveFrame\n   !!!DO NOT RELEASE or MODIFY the retrieved frame!!!      */\nCVAPI(IplImage*) cvQueryFrame( CvCapture* capture );\n\n/* stop capturing/reading and free resources */\nCVAPI(void) cvReleaseCapture( CvCapture** capture );\n\nenum\n{\n    // modes of the controlling registers (can be: auto, manual, auto single push, absolute Latter allowed with any other mode)\n    // every feature can have only one mode turned on at a time\n    CV_CAP_PROP_DC1394_OFF         = -4,  //turn the feature off (not controlled manually nor automatically)\n    CV_CAP_PROP_DC1394_MODE_MANUAL = -3, //set automatically when a value of the feature is set by the user\n    CV_CAP_PROP_DC1394_MODE_AUTO = -2,\n    CV_CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO = -1,\n    CV_CAP_PROP_POS_MSEC       =0,\n    CV_CAP_PROP_POS_FRAMES     =1,\n    CV_CAP_PROP_POS_AVI_RATIO  =2,\n    CV_CAP_PROP_FRAME_WIDTH    =3,\n    CV_CAP_PROP_FRAME_HEIGHT   =4,\n    CV_CAP_PROP_FPS            =5,\n    CV_CAP_PROP_FOURCC         =6,\n    CV_CAP_PROP_FRAME_COUNT    =7,\n    CV_CAP_PROP_FORMAT         =8,\n    CV_CAP_PROP_MODE           =9,\n    CV_CAP_PROP_BRIGHTNESS    =10,\n    CV_CAP_PROP_CONTRAST      =11,\n    CV_CAP_PROP_SATURATION    =12,\n    CV_CAP_PROP_HUE           =13,\n    CV_CAP_PROP_GAIN          =14,\n    CV_CAP_PROP_EXPOSURE      =15,\n    CV_CAP_PROP_CONVERT_RGB   =16,\n    CV_CAP_PROP_WHITE_BALANCE_BLUE_U =17,\n    CV_CAP_PROP_RECTIFICATION =18,\n    CV_CAP_PROP_MONOCHROME    =19,\n    CV_CAP_PROP_SHARPNESS     =20,\n    CV_CAP_PROP_AUTO_EXPOSURE =21, // exposure control done by camera,\n                                   // user can adjust refernce level\n                                   // using this feature\n    CV_CAP_PROP_GAMMA         =22,\n    CV_CAP_PROP_TEMPERATURE   =23,\n    CV_CAP_PROP_TRIGGER       =24,\n    CV_CAP_PROP_TRIGGER_DELAY =25,\n    CV_CAP_PROP_WHITE_BALANCE_RED_V =26,\n    CV_CAP_PROP_ZOOM          =27,\n    CV_CAP_PROP_FOCUS         =28,\n    CV_CAP_PROP_GUID          =29,\n    CV_CAP_PROP_ISO_SPEED     =30,\n    CV_CAP_PROP_MAX_DC1394    =31,\n    CV_CAP_PROP_BACKLIGHT     =32,\n    CV_CAP_PROP_PAN           =33,\n    CV_CAP_PROP_TILT          =34,\n    CV_CAP_PROP_ROLL          =35,\n    CV_CAP_PROP_IRIS          =36,\n    CV_CAP_PROP_SETTINGS      =37,\n    CV_CAP_PROP_BUFFERSIZE    =38,\n    CV_CAP_PROP_AUTOFOCUS     =39,\n    CV_CAP_PROP_SAR_NUM       =40,\n    CV_CAP_PROP_SAR_DEN       =41,\n\n    CV_CAP_PROP_AUTOGRAB      =1024, // property for videoio class CvCapture_Android only\n    CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING=1025, // readonly, tricky property, returns cpnst char* indeed\n    CV_CAP_PROP_PREVIEW_FORMAT=1026, // readonly, tricky property, returns cpnst char* indeed\n\n    // OpenNI map generators\n    CV_CAP_OPENNI_DEPTH_GENERATOR = 1 << 31,\n    CV_CAP_OPENNI_IMAGE_GENERATOR = 1 << 30,\n    CV_CAP_OPENNI_GENERATORS_MASK = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_OPENNI_IMAGE_GENERATOR,\n\n    // Properties of cameras available through OpenNI interfaces\n    CV_CAP_PROP_OPENNI_OUTPUT_MODE     = 100,\n    CV_CAP_PROP_OPENNI_FRAME_MAX_DEPTH = 101, // in mm\n    CV_CAP_PROP_OPENNI_BASELINE        = 102, // in mm\n    CV_CAP_PROP_OPENNI_FOCAL_LENGTH    = 103, // in pixels\n    CV_CAP_PROP_OPENNI_REGISTRATION    = 104, // flag\n    CV_CAP_PROP_OPENNI_REGISTRATION_ON = CV_CAP_PROP_OPENNI_REGISTRATION, // flag that synchronizes the remapping depth map to image map\n                                                                          // by changing depth generator's view point (if the flag is \"on\") or\n                                                                          // sets this view point to its normal one (if the flag is \"off\").\n    CV_CAP_PROP_OPENNI_APPROX_FRAME_SYNC = 105,\n    CV_CAP_PROP_OPENNI_MAX_BUFFER_SIZE   = 106,\n    CV_CAP_PROP_OPENNI_CIRCLE_BUFFER     = 107,\n    CV_CAP_PROP_OPENNI_MAX_TIME_DURATION = 108,\n\n    CV_CAP_PROP_OPENNI_GENERATOR_PRESENT = 109,\n    CV_CAP_PROP_OPENNI2_SYNC = 110,\n    CV_CAP_PROP_OPENNI2_MIRROR = 111,\n\n    CV_CAP_OPENNI_IMAGE_GENERATOR_PRESENT         = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_GENERATOR_PRESENT,\n    CV_CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE     = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_OUTPUT_MODE,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_BASELINE        = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_BASELINE,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH    = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_FOCAL_LENGTH,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION    = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_REGISTRATION,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION,\n\n    // Properties of cameras available through GStreamer interface\n    CV_CAP_GSTREAMER_QUEUE_LENGTH           = 200, // default is 1\n\n    // PVAPI\n    CV_CAP_PROP_PVAPI_MULTICASTIP           = 300, // ip for anable multicast master mode. 0 for disable multicast\n    CV_CAP_PROP_PVAPI_FRAMESTARTTRIGGERMODE = 301, // FrameStartTriggerMode: Determines how a frame is initiated\n    CV_CAP_PROP_PVAPI_DECIMATIONHORIZONTAL  = 302, // Horizontal sub-sampling of the image\n    CV_CAP_PROP_PVAPI_DECIMATIONVERTICAL    = 303, // Vertical sub-sampling of the image\n    CV_CAP_PROP_PVAPI_BINNINGX              = 304, // Horizontal binning factor\n    CV_CAP_PROP_PVAPI_BINNINGY              = 305, // Vertical binning factor\n    CV_CAP_PROP_PVAPI_PIXELFORMAT           = 306, // Pixel format\n\n    // Properties of cameras available through XIMEA SDK interface\n    CV_CAP_PROP_XI_DOWNSAMPLING                                 = 400, // Change image resolution by binning or skipping.\n    CV_CAP_PROP_XI_DATA_FORMAT                                  = 401, // Output data format.\n    CV_CAP_PROP_XI_OFFSET_X                                     = 402, // Horizontal offset from the origin to the area of interest (in pixels).\n    CV_CAP_PROP_XI_OFFSET_Y                                     = 403, // Vertical offset from the origin to the area of interest (in pixels).\n    CV_CAP_PROP_XI_TRG_SOURCE                                   = 404, // Defines source of trigger.\n    CV_CAP_PROP_XI_TRG_SOFTWARE                                 = 405, // Generates an internal trigger. PRM_TRG_SOURCE must be set to TRG_SOFTWARE.\n    CV_CAP_PROP_XI_GPI_SELECTOR                                 = 406, // Selects general purpose input\n    CV_CAP_PROP_XI_GPI_MODE                                     = 407, // Set general purpose input mode\n    CV_CAP_PROP_XI_GPI_LEVEL                                    = 408, // Get general purpose level\n    CV_CAP_PROP_XI_GPO_SELECTOR                                 = 409, // Selects general purpose output\n    CV_CAP_PROP_XI_GPO_MODE                                     = 410, // Set general purpose output mode\n    CV_CAP_PROP_XI_LED_SELECTOR                                 = 411, // Selects camera signalling LED\n    CV_CAP_PROP_XI_LED_MODE                                     = 412, // Define camera signalling LED functionality\n    CV_CAP_PROP_XI_MANUAL_WB                                    = 413, // Calculates White Balance(must be called during acquisition)\n    CV_CAP_PROP_XI_AUTO_WB                                      = 414, // Automatic white balance\n    CV_CAP_PROP_XI_AEAG                                         = 415, // Automatic exposure/gain\n    CV_CAP_PROP_XI_EXP_PRIORITY                                 = 416, // Exposure priority (0.5 - exposure 50%, gain 50%).\n    CV_CAP_PROP_XI_AE_MAX_LIMIT                                 = 417, // Maximum limit of exposure in AEAG procedure\n    CV_CAP_PROP_XI_AG_MAX_LIMIT                                 = 418,  // Maximum limit of gain in AEAG procedure\n    CV_CAP_PROP_XI_AEAG_LEVEL                                   = 419, // Average intensity of output signal AEAG should achieve(in %)\n    CV_CAP_PROP_XI_TIMEOUT                                      = 420, // Image capture timeout in milliseconds\n    CV_CAP_PROP_XI_EXPOSURE                                     = 421, // Exposure time in microseconds\n    CV_CAP_PROP_XI_EXPOSURE_BURST_COUNT                         = 422, // Sets the number of times of exposure in one frame.\n    CV_CAP_PROP_XI_GAIN_SELECTOR                                = 423, // Gain selector for parameter Gain allows to select different type of gains.\n    CV_CAP_PROP_XI_GAIN                                         = 424, // Gain in dB\n    CV_CAP_PROP_XI_DOWNSAMPLING_TYPE                            = 426, // Change image downsampling type.\n    CV_CAP_PROP_XI_BINNING_SELECTOR                             = 427, // Binning engine selector.\n    CV_CAP_PROP_XI_BINNING_VERTICAL                             = 428, // Vertical Binning - number of vertical photo-sensitive cells to combine together.\n    CV_CAP_PROP_XI_BINNING_HORIZONTAL                           = 429, // Horizontal Binning - number of horizontal photo-sensitive cells to combine together.\n    CV_CAP_PROP_XI_BINNING_PATTERN                              = 430, // Binning pattern type.\n    CV_CAP_PROP_XI_DECIMATION_SELECTOR                          = 431, // Decimation engine selector.\n    CV_CAP_PROP_XI_DECIMATION_VERTICAL                          = 432, // Vertical Decimation - vertical sub-sampling of the image - reduces the vertical resolution of the image by the specified vertical decimation factor.\n    CV_CAP_PROP_XI_DECIMATION_HORIZONTAL                        = 433, // Horizontal Decimation - horizontal sub-sampling of the image - reduces the horizontal resolution of the image by the specified vertical decimation factor.\n    CV_CAP_PROP_XI_DECIMATION_PATTERN                           = 434, // Decimation pattern type.\n    CV_CAP_PROP_XI_IMAGE_DATA_FORMAT                            = 435, // Output data format.\n    CV_CAP_PROP_XI_SHUTTER_TYPE                                 = 436, // Change sensor shutter type(CMOS sensor).\n    CV_CAP_PROP_XI_SENSOR_TAPS                                  = 437, // Number of taps\n    CV_CAP_PROP_XI_AEAG_ROI_OFFSET_X                            = 439, // Automatic exposure/gain ROI offset X\n    CV_CAP_PROP_XI_AEAG_ROI_OFFSET_Y                            = 440, // Automatic exposure/gain ROI offset Y\n    CV_CAP_PROP_XI_AEAG_ROI_WIDTH                               = 441, // Automatic exposure/gain ROI Width\n    CV_CAP_PROP_XI_AEAG_ROI_HEIGHT                              = 442, // Automatic exposure/gain ROI Height\n    CV_CAP_PROP_XI_BPC                                          = 445, // Correction of bad pixels\n    CV_CAP_PROP_XI_WB_KR                                        = 448, // White balance red coefficient\n    CV_CAP_PROP_XI_WB_KG                                        = 449, // White balance green coefficient\n    CV_CAP_PROP_XI_WB_KB                                        = 450, // White balance blue coefficient\n    CV_CAP_PROP_XI_WIDTH                                        = 451, // Width of the Image provided by the device (in pixels).\n    CV_CAP_PROP_XI_HEIGHT                                       = 452, // Height of the Image provided by the device (in pixels).\n    CV_CAP_PROP_XI_LIMIT_BANDWIDTH                              = 459, // Set/get bandwidth(datarate)(in Megabits)\n    CV_CAP_PROP_XI_SENSOR_DATA_BIT_DEPTH                        = 460, // Sensor output data bit depth.\n    CV_CAP_PROP_XI_OUTPUT_DATA_BIT_DEPTH                        = 461, // Device output data bit depth.\n    CV_CAP_PROP_XI_IMAGE_DATA_BIT_DEPTH                         = 462, // bitdepth of data returned by function xiGetImage\n    CV_CAP_PROP_XI_OUTPUT_DATA_PACKING                          = 463, // Device output data packing (or grouping) enabled. Packing could be enabled if output_data_bit_depth > 8 and packing capability is available.\n    CV_CAP_PROP_XI_OUTPUT_DATA_PACKING_TYPE                     = 464, // Data packing type. Some cameras supports only specific packing type.\n    CV_CAP_PROP_XI_IS_COOLED                                    = 465, // Returns 1 for cameras that support cooling.\n    CV_CAP_PROP_XI_COOLING                                      = 466, // Start camera cooling.\n    CV_CAP_PROP_XI_TARGET_TEMP                                  = 467, // Set sensor target temperature for cooling.\n    CV_CAP_PROP_XI_CHIP_TEMP                                    = 468, // Camera sensor temperature\n    CV_CAP_PROP_XI_HOUS_TEMP                                    = 469, // Camera housing tepmerature\n    CV_CAP_PROP_XI_CMS                                          = 470, // Mode of color management system.\n    CV_CAP_PROP_XI_APPLY_CMS                                    = 471, // Enable applying of CMS profiles to xiGetImage (see XI_PRM_INPUT_CMS_PROFILE, XI_PRM_OUTPUT_CMS_PROFILE).\n    CV_CAP_PROP_XI_IMAGE_IS_COLOR                               = 474, // Returns 1 for color cameras.\n    CV_CAP_PROP_XI_COLOR_FILTER_ARRAY                           = 475, // Returns color filter array type of RAW data.\n    CV_CAP_PROP_XI_GAMMAY                                       = 476, // Luminosity gamma\n    CV_CAP_PROP_XI_GAMMAC                                       = 477, // Chromaticity gamma\n    CV_CAP_PROP_XI_SHARPNESS                                    = 478, // Sharpness Strenght\n    CV_CAP_PROP_XI_CC_MATRIX_00                                 = 479, // Color Correction Matrix element [0][0]\n    CV_CAP_PROP_XI_CC_MATRIX_01                                 = 480, // Color Correction Matrix element [0][1]\n    CV_CAP_PROP_XI_CC_MATRIX_02                                 = 481, // Color Correction Matrix element [0][2]\n    CV_CAP_PROP_XI_CC_MATRIX_03                                 = 482, // Color Correction Matrix element [0][3]\n    CV_CAP_PROP_XI_CC_MATRIX_10                                 = 483, // Color Correction Matrix element [1][0]\n    CV_CAP_PROP_XI_CC_MATRIX_11                                 = 484, // Color Correction Matrix element [1][1]\n    CV_CAP_PROP_XI_CC_MATRIX_12                                 = 485, // Color Correction Matrix element [1][2]\n    CV_CAP_PROP_XI_CC_MATRIX_13                                 = 486, // Color Correction Matrix element [1][3]\n    CV_CAP_PROP_XI_CC_MATRIX_20                                 = 487, // Color Correction Matrix element [2][0]\n    CV_CAP_PROP_XI_CC_MATRIX_21                                 = 488, // Color Correction Matrix element [2][1]\n    CV_CAP_PROP_XI_CC_MATRIX_22                                 = 489, // Color Correction Matrix element [2][2]\n    CV_CAP_PROP_XI_CC_MATRIX_23                                 = 490, // Color Correction Matrix element [2][3]\n    CV_CAP_PROP_XI_CC_MATRIX_30                                 = 491, // Color Correction Matrix element [3][0]\n    CV_CAP_PROP_XI_CC_MATRIX_31                                 = 492, // Color Correction Matrix element [3][1]\n    CV_CAP_PROP_XI_CC_MATRIX_32                                 = 493, // Color Correction Matrix element [3][2]\n    CV_CAP_PROP_XI_CC_MATRIX_33                                 = 494, // Color Correction Matrix element [3][3]\n    CV_CAP_PROP_XI_DEFAULT_CC_MATRIX                            = 495, // Set default Color Correction Matrix\n    CV_CAP_PROP_XI_TRG_SELECTOR                                 = 498, // Selects the type of trigger.\n    CV_CAP_PROP_XI_ACQ_FRAME_BURST_COUNT                        = 499, // Sets number of frames acquired by burst. This burst is used only if trigger is set to FrameBurstStart\n    CV_CAP_PROP_XI_DEBOUNCE_EN                                  = 507, // Enable/Disable debounce to selected GPI\n    CV_CAP_PROP_XI_DEBOUNCE_T0                                  = 508, // Debounce time (x * 10us)\n    CV_CAP_PROP_XI_DEBOUNCE_T1                                  = 509, // Debounce time (x * 10us)\n    CV_CAP_PROP_XI_DEBOUNCE_POL                                 = 510, // Debounce polarity (pol = 1 t0 - falling edge, t1 - rising edge)\n    CV_CAP_PROP_XI_LENS_MODE                                    = 511, // Status of lens control interface. This shall be set to XI_ON before any Lens operations.\n    CV_CAP_PROP_XI_LENS_APERTURE_VALUE                          = 512, // Current lens aperture value in stops. Examples: 2.8, 4, 5.6, 8, 11\n    CV_CAP_PROP_XI_LENS_FOCUS_MOVEMENT_VALUE                    = 513, // Lens current focus movement value to be used by XI_PRM_LENS_FOCUS_MOVE in motor steps.\n    CV_CAP_PROP_XI_LENS_FOCUS_MOVE                              = 514, // Moves lens focus motor by steps set in XI_PRM_LENS_FOCUS_MOVEMENT_VALUE.\n    CV_CAP_PROP_XI_LENS_FOCUS_DISTANCE                          = 515, // Lens focus distance in cm.\n    CV_CAP_PROP_XI_LENS_FOCAL_LENGTH                            = 516, // Lens focal distance in mm.\n    CV_CAP_PROP_XI_LENS_FEATURE_SELECTOR                        = 517, // Selects the current feature which is accessible by XI_PRM_LENS_FEATURE.\n    CV_CAP_PROP_XI_LENS_FEATURE                                 = 518, // Allows access to lens feature value currently selected by XI_PRM_LENS_FEATURE_SELECTOR.\n    CV_CAP_PROP_XI_DEVICE_MODEL_ID                              = 521, // Return device model id\n    CV_CAP_PROP_XI_DEVICE_SN                                    = 522, // Return device serial number\n    CV_CAP_PROP_XI_IMAGE_DATA_FORMAT_RGB32_ALPHA                = 529, // The alpha channel of RGB32 output image format.\n    CV_CAP_PROP_XI_IMAGE_PAYLOAD_SIZE                           = 530, // Buffer size in bytes sufficient for output image returned by xiGetImage\n    CV_CAP_PROP_XI_TRANSPORT_PIXEL_FORMAT                       = 531, // Current format of pixels on transport layer.\n    CV_CAP_PROP_XI_SENSOR_CLOCK_FREQ_HZ                         = 532, // Sensor clock frequency in Hz.\n    CV_CAP_PROP_XI_SENSOR_CLOCK_FREQ_INDEX                      = 533, // Sensor clock frequency index. Sensor with selected frequencies have possibility to set the frequency only by this index.\n    CV_CAP_PROP_XI_SENSOR_OUTPUT_CHANNEL_COUNT                  = 534, // Number of output channels from sensor used for data transfer.\n    CV_CAP_PROP_XI_FRAMERATE                                    = 535, // Define framerate in Hz\n    CV_CAP_PROP_XI_COUNTER_SELECTOR                             = 536, // Select counter\n    CV_CAP_PROP_XI_COUNTER_VALUE                                = 537, // Counter status\n    CV_CAP_PROP_XI_ACQ_TIMING_MODE                              = 538, // Type of sensor frames timing.\n    CV_CAP_PROP_XI_AVAILABLE_BANDWIDTH                          = 539, // Calculate and return available interface bandwidth(int Megabits)\n    CV_CAP_PROP_XI_BUFFER_POLICY                                = 540, // Data move policy\n    CV_CAP_PROP_XI_LUT_EN                                       = 541, // Activates LUT.\n    CV_CAP_PROP_XI_LUT_INDEX                                    = 542, // Control the index (offset) of the coefficient to access in the LUT.\n    CV_CAP_PROP_XI_LUT_VALUE                                    = 543, // Value at entry LUTIndex of the LUT\n    CV_CAP_PROP_XI_TRG_DELAY                                    = 544, // Specifies the delay in microseconds (us) to apply after the trigger reception before activating it.\n    CV_CAP_PROP_XI_TS_RST_MODE                                  = 545, // Defines how time stamp reset engine will be armed\n    CV_CAP_PROP_XI_TS_RST_SOURCE                                = 546, // Defines which source will be used for timestamp reset. Writing this parameter will trigger settings of engine (arming)\n    CV_CAP_PROP_XI_IS_DEVICE_EXIST                              = 547, // Returns 1 if camera connected and works properly.\n    CV_CAP_PROP_XI_ACQ_BUFFER_SIZE                              = 548, // Acquisition buffer size in buffer_size_unit. Default bytes.\n    CV_CAP_PROP_XI_ACQ_BUFFER_SIZE_UNIT                         = 549, // Acquisition buffer size unit in bytes. Default 1. E.g. Value 1024 means that buffer_size is in KiBytes\n    CV_CAP_PROP_XI_ACQ_TRANSPORT_BUFFER_SIZE                    = 550, // Acquisition transport buffer size in bytes\n    CV_CAP_PROP_XI_BUFFERS_QUEUE_SIZE                           = 551, // Queue of field/frame buffers\n    CV_CAP_PROP_XI_ACQ_TRANSPORT_BUFFER_COMMIT                  = 552, // Number of buffers to commit to low level\n    CV_CAP_PROP_XI_RECENT_FRAME                                 = 553, // GetImage returns most recent frame\n    CV_CAP_PROP_XI_DEVICE_RESET                                 = 554, // Resets the camera to default state.\n    CV_CAP_PROP_XI_COLUMN_FPN_CORRECTION                        = 555, // Correction of column FPN\n    CV_CAP_PROP_XI_SENSOR_MODE                                  = 558, // Current sensor mode. Allows to select sensor mode by one integer. Setting of this parameter affects: image dimensions and downsampling.\n    CV_CAP_PROP_XI_HDR                                          = 559, // Enable High Dynamic Range feature.\n    CV_CAP_PROP_XI_HDR_KNEEPOINT_COUNT                          = 560, // The number of kneepoints in the PWLR.\n    CV_CAP_PROP_XI_HDR_T1                                       = 561, // position of first kneepoint(in % of XI_PRM_EXPOSURE)\n    CV_CAP_PROP_XI_HDR_T2                                       = 562, // position of second kneepoint (in % of XI_PRM_EXPOSURE)\n    CV_CAP_PROP_XI_KNEEPOINT1                                   = 563, // value of first kneepoint (% of sensor saturation)\n    CV_CAP_PROP_XI_KNEEPOINT2                                   = 564, // value of second kneepoint (% of sensor saturation)\n    CV_CAP_PROP_XI_IMAGE_BLACK_LEVEL                            = 565, // Last image black level counts. Can be used for Offline processing to recall it.\n    CV_CAP_PROP_XI_HW_REVISION                                  = 571, // Returns hardware revision number.\n    CV_CAP_PROP_XI_DEBUG_LEVEL                                  = 572, // Set debug level\n    CV_CAP_PROP_XI_AUTO_BANDWIDTH_CALCULATION                   = 573, // Automatic bandwidth calculation,\n    CV_CAP_PROP_XI_FREE_FFS_SIZE                                = 581, // Size of free camera FFS.\n    CV_CAP_PROP_XI_USED_FFS_SIZE                                = 582, // Size of used camera FFS.\n    CV_CAP_PROP_XI_FFS_ACCESS_KEY                               = 583, // Setting of key enables file operations on some cameras.\n    CV_CAP_PROP_XI_SENSOR_FEATURE_SELECTOR                      = 585, // Selects the current feature which is accessible by XI_PRM_SENSOR_FEATURE_VALUE.\n    CV_CAP_PROP_XI_SENSOR_FEATURE_VALUE                         = 586, // Allows access to sensor feature value currently selected by XI_PRM_SENSOR_FEATURE_SELECTOR.\n\n    // Properties for Android cameras\n    CV_CAP_PROP_ANDROID_FLASH_MODE = 8001,\n    CV_CAP_PROP_ANDROID_FOCUS_MODE = 8002,\n    CV_CAP_PROP_ANDROID_WHITE_BALANCE = 8003,\n    CV_CAP_PROP_ANDROID_ANTIBANDING = 8004,\n    CV_CAP_PROP_ANDROID_FOCAL_LENGTH = 8005,\n    CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_NEAR = 8006,\n    CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_OPTIMAL = 8007,\n    CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_FAR = 8008,\n    CV_CAP_PROP_ANDROID_EXPOSE_LOCK = 8009,\n    CV_CAP_PROP_ANDROID_WHITEBALANCE_LOCK = 8010,\n\n    // Properties of cameras available through AVFOUNDATION interface\n    CV_CAP_PROP_IOS_DEVICE_FOCUS = 9001,\n    CV_CAP_PROP_IOS_DEVICE_EXPOSURE = 9002,\n    CV_CAP_PROP_IOS_DEVICE_FLASH = 9003,\n    CV_CAP_PROP_IOS_DEVICE_WHITEBALANCE = 9004,\n    CV_CAP_PROP_IOS_DEVICE_TORCH = 9005,\n\n    // Properties of cameras available through Smartek Giganetix Ethernet Vision interface\n    /* --- Vladimir Litvinenko (litvinenko.vladimir@gmail.com) --- */\n    CV_CAP_PROP_GIGA_FRAME_OFFSET_X = 10001,\n    CV_CAP_PROP_GIGA_FRAME_OFFSET_Y = 10002,\n    CV_CAP_PROP_GIGA_FRAME_WIDTH_MAX = 10003,\n    CV_CAP_PROP_GIGA_FRAME_HEIGH_MAX = 10004,\n    CV_CAP_PROP_GIGA_FRAME_SENS_WIDTH = 10005,\n    CV_CAP_PROP_GIGA_FRAME_SENS_HEIGH = 10006,\n\n    CV_CAP_PROP_INTELPERC_PROFILE_COUNT               = 11001,\n    CV_CAP_PROP_INTELPERC_PROFILE_IDX                 = 11002,\n    CV_CAP_PROP_INTELPERC_DEPTH_LOW_CONFIDENCE_VALUE  = 11003,\n    CV_CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE      = 11004,\n    CV_CAP_PROP_INTELPERC_DEPTH_CONFIDENCE_THRESHOLD  = 11005,\n    CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_HORZ     = 11006,\n    CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_VERT     = 11007,\n\n    // Intel PerC streams\n    CV_CAP_INTELPERC_DEPTH_GENERATOR = 1 << 29,\n    CV_CAP_INTELPERC_IMAGE_GENERATOR = 1 << 28,\n    CV_CAP_INTELPERC_GENERATORS_MASK = CV_CAP_INTELPERC_DEPTH_GENERATOR + CV_CAP_INTELPERC_IMAGE_GENERATOR\n};\n\n// Generic camera output modes.\n// Currently, these are supported through the libv4l interface only.\nenum\n{\n    CV_CAP_MODE_BGR  = 0, // BGR24 (default)\n    CV_CAP_MODE_RGB  = 1, // RGB24\n    CV_CAP_MODE_GRAY = 2, // Y8\n    CV_CAP_MODE_YUYV = 3  // YUYV\n};\n\nenum\n{\n    // Data given from depth generator.\n    CV_CAP_OPENNI_DEPTH_MAP                 = 0, // Depth values in mm (CV_16UC1)\n    CV_CAP_OPENNI_POINT_CLOUD_MAP           = 1, // XYZ in meters (CV_32FC3)\n    CV_CAP_OPENNI_DISPARITY_MAP             = 2, // Disparity in pixels (CV_8UC1)\n    CV_CAP_OPENNI_DISPARITY_MAP_32F         = 3, // Disparity in pixels (CV_32FC1)\n    CV_CAP_OPENNI_VALID_DEPTH_MASK          = 4, // CV_8UC1\n\n    // Data given from RGB image generator.\n    CV_CAP_OPENNI_BGR_IMAGE                 = 5,\n    CV_CAP_OPENNI_GRAY_IMAGE                = 6\n};\n\n// Supported output modes of OpenNI image generator\nenum\n{\n    CV_CAP_OPENNI_VGA_30HZ     = 0,\n    CV_CAP_OPENNI_SXGA_15HZ    = 1,\n    CV_CAP_OPENNI_SXGA_30HZ    = 2,\n    CV_CAP_OPENNI_QVGA_30HZ    = 3,\n    CV_CAP_OPENNI_QVGA_60HZ    = 4\n};\n\nenum\n{\n    CV_CAP_INTELPERC_DEPTH_MAP              = 0, // Each pixel is a 16-bit integer. The value indicates the distance from an object to the camera's XY plane or the Cartesian depth.\n    CV_CAP_INTELPERC_UVDEPTH_MAP            = 1, // Each pixel contains two 32-bit floating point values in the range of 0-1, representing the mapping of depth coordinates to the color coordinates.\n    CV_CAP_INTELPERC_IR_MAP                 = 2, // Each pixel is a 16-bit integer. The value indicates the intensity of the reflected laser beam.\n    CV_CAP_INTELPERC_IMAGE                  = 3\n};\n\n// gPhoto2 properties, if propertyId is less than 0 then work on widget with that __additive inversed__ camera setting ID\n// Get IDs by using CAP_PROP_GPHOTO2_WIDGET_ENUMERATE.\n// @see CvCaptureCAM_GPHOTO2 for more info\nenum\n{\n    CV_CAP_PROP_GPHOTO2_PREVIEW           = 17001, // Capture only preview from liveview mode.\n    CV_CAP_PROP_GPHOTO2_WIDGET_ENUMERATE  = 17002, // Readonly, returns (const char *).\n    CV_CAP_PROP_GPHOTO2_RELOAD_CONFIG     = 17003, // Trigger, only by set. Reload camera settings.\n    CV_CAP_PROP_GPHOTO2_RELOAD_ON_CHANGE  = 17004, // Reload all settings on set.\n    CV_CAP_PROP_GPHOTO2_COLLECT_MSGS      = 17005, // Collect messages with details.\n    CV_CAP_PROP_GPHOTO2_FLUSH_MSGS        = 17006, // Readonly, returns (const char *).\n    CV_CAP_PROP_SPEED                     = 17007, // Exposure speed. Can be readonly, depends on camera program.\n    CV_CAP_PROP_APERTURE                  = 17008, // Aperture. Can be readonly, depends on camera program.\n    CV_CAP_PROP_EXPOSUREPROGRAM           = 17009, // Camera exposure program.\n    CV_CAP_PROP_VIEWFINDER                = 17010  // Enter liveview mode.\n};\n\n/* retrieve or set capture properties */\nCVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id );\nCVAPI(int)    cvSetCaptureProperty( CvCapture* capture, int property_id, double value );\n\n// Return the type of the capturer (eg, CV_CAP_V4W, CV_CAP_UNICAP), which is unknown if created with CV_CAP_ANY\nCVAPI(int)    cvGetCaptureDomain( CvCapture* capture);\n\n/* \"black box\" video file writer structure */\ntypedef struct CvVideoWriter CvVideoWriter;\n\n#define CV_FOURCC_MACRO(c1, c2, c3, c4) (((c1) & 255) + (((c2) & 255) << 8) + (((c3) & 255) << 16) + (((c4) & 255) << 24))\n\nCV_INLINE int CV_FOURCC(char c1, char c2, char c3, char c4)\n{\n    return CV_FOURCC_MACRO(c1, c2, c3, c4);\n}\n\n#define CV_FOURCC_PROMPT -1  /* Open Codec Selection Dialog (Windows only) */\n#define CV_FOURCC_DEFAULT CV_FOURCC('I', 'Y', 'U', 'V') /* Use default codec for specified filename (Linux only) */\n\n/* initialize video file writer */\nCVAPI(CvVideoWriter*) cvCreateVideoWriter( const char* filename, int fourcc,\n                                           double fps, CvSize frame_size,\n                                           int is_color CV_DEFAULT(1));\n\n/* write frame to video file */\nCVAPI(int) cvWriteFrame( CvVideoWriter* writer, const IplImage* image );\n\n/* close video file writer */\nCVAPI(void) cvReleaseVideoWriter( CvVideoWriter** writer );\n\n/****************************************************************************************\\\n*                              Obsolete functions/synonyms                               *\n\\****************************************************************************************/\n\n#define cvCaptureFromFile cvCreateFileCapture\n#define cvCaptureFromCAM cvCreateCameraCapture\n#define cvCaptureFromAVI cvCaptureFromFile\n#define cvCreateAVIWriter cvCreateVideoWriter\n#define cvWriteToAVI cvWriteFrame\n\n/** @} videoio_c */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif //__OPENCV_VIDEOIO_H__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videoio.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOIO_HPP__\n#define __OPENCV_VIDEOIO_HPP__\n\n#include \"opencv2/core.hpp\"\n\n/**\n  @defgroup videoio Media I/O\n  @{\n    @defgroup videoio_c C API\n    @defgroup videoio_ios iOS glue\n    @defgroup videoio_winrt WinRT glue\n  @}\n*/\n\n////////////////////////////////// video io /////////////////////////////////\n\ntypedef struct CvCapture CvCapture;\ntypedef struct CvVideoWriter CvVideoWriter;\n\nnamespace cv\n{\n\n//! @addtogroup videoio\n//! @{\n\n// Camera API\nenum { CAP_ANY          = 0,     // autodetect\n       CAP_VFW          = 200,   // platform native\n       CAP_V4L          = 200,\n       CAP_V4L2         = CAP_V4L,\n       CAP_FIREWARE     = 300,   // IEEE 1394 drivers\n       CAP_FIREWIRE     = CAP_FIREWARE,\n       CAP_IEEE1394     = CAP_FIREWARE,\n       CAP_DC1394       = CAP_FIREWARE,\n       CAP_CMU1394      = CAP_FIREWARE,\n       CAP_QT           = 500,   // QuickTime\n       CAP_UNICAP       = 600,   // Unicap drivers\n       CAP_DSHOW        = 700,   // DirectShow (via videoInput)\n       CAP_PVAPI        = 800,   // PvAPI, Prosilica GigE SDK\n       CAP_OPENNI       = 900,   // OpenNI (for Kinect)\n       CAP_OPENNI_ASUS  = 910,   // OpenNI (for Asus Xtion)\n       CAP_ANDROID      = 1000,  // Android - not used\n       CAP_XIAPI        = 1100,  // XIMEA Camera API\n       CAP_AVFOUNDATION = 1200,  // AVFoundation framework for iOS (OS X Lion will have the same API)\n       CAP_GIGANETIX    = 1300,  // Smartek Giganetix GigEVisionSDK\n       CAP_MSMF         = 1400,  // Microsoft Media Foundation (via videoInput)\n       CAP_WINRT        = 1410,  // Microsoft Windows Runtime using Media Foundation\n       CAP_INTELPERC    = 1500,  // Intel Perceptual Computing SDK\n       CAP_OPENNI2      = 1600,  // OpenNI2 (for Kinect)\n       CAP_OPENNI2_ASUS = 1610,  // OpenNI2 (for Asus Xtion and Occipital Structure sensors)\n       CAP_GPHOTO2      = 1700,  // gPhoto2 connection\n       CAP_GSTREAMER    = 1800,  // GStreamer\n       CAP_FFMPEG       = 1900,  // FFMPEG\n       CAP_IMAGES       = 2000   // OpenCV Image Sequence (e.g. img_%02d.jpg)\n     };\n\n// generic properties (based on DC1394 properties)\nenum { CAP_PROP_POS_MSEC       =0,\n       CAP_PROP_POS_FRAMES     =1,\n       CAP_PROP_POS_AVI_RATIO  =2,\n       CAP_PROP_FRAME_WIDTH    =3,\n       CAP_PROP_FRAME_HEIGHT   =4,\n       CAP_PROP_FPS            =5,\n       CAP_PROP_FOURCC         =6,\n       CAP_PROP_FRAME_COUNT    =7,\n       CAP_PROP_FORMAT         =8,\n       CAP_PROP_MODE           =9,\n       CAP_PROP_BRIGHTNESS    =10,\n       CAP_PROP_CONTRAST      =11,\n       CAP_PROP_SATURATION    =12,\n       CAP_PROP_HUE           =13,\n       CAP_PROP_GAIN          =14,\n       CAP_PROP_EXPOSURE      =15,\n       CAP_PROP_CONVERT_RGB   =16,\n       CAP_PROP_WHITE_BALANCE_BLUE_U =17,\n       CAP_PROP_RECTIFICATION =18,\n       CAP_PROP_MONOCHROME    =19,\n       CAP_PROP_SHARPNESS     =20,\n       CAP_PROP_AUTO_EXPOSURE =21, // DC1394: exposure control done by camera, user can adjust refernce level using this feature\n       CAP_PROP_GAMMA         =22,\n       CAP_PROP_TEMPERATURE   =23,\n       CAP_PROP_TRIGGER       =24,\n       CAP_PROP_TRIGGER_DELAY =25,\n       CAP_PROP_WHITE_BALANCE_RED_V =26,\n       CAP_PROP_ZOOM          =27,\n       CAP_PROP_FOCUS         =28,\n       CAP_PROP_GUID          =29,\n       CAP_PROP_ISO_SPEED     =30,\n       CAP_PROP_BACKLIGHT     =32,\n       CAP_PROP_PAN           =33,\n       CAP_PROP_TILT          =34,\n       CAP_PROP_ROLL          =35,\n       CAP_PROP_IRIS          =36,\n       CAP_PROP_SETTINGS      =37,\n       CAP_PROP_BUFFERSIZE    =38,\n       CAP_PROP_AUTOFOCUS     =39\n     };\n\n\n// Generic camera output modes.\n// Currently, these are supported through the libv4l interface only.\nenum { CAP_MODE_BGR  = 0, // BGR24 (default)\n       CAP_MODE_RGB  = 1, // RGB24\n       CAP_MODE_GRAY = 2, // Y8\n       CAP_MODE_YUYV = 3  // YUYV\n     };\n\n\n// DC1394 only\n// modes of the controlling registers (can be: auto, manual, auto single push, absolute Latter allowed with any other mode)\n// every feature can have only one mode turned on at a time\nenum { CAP_PROP_DC1394_OFF                = -4, //turn the feature off (not controlled manually nor automatically)\n       CAP_PROP_DC1394_MODE_MANUAL        = -3, //set automatically when a value of the feature is set by the user\n       CAP_PROP_DC1394_MODE_AUTO          = -2,\n       CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO = -1,\n       CAP_PROP_DC1394_MAX                = 31\n     };\n\n\n// OpenNI map generators\nenum { CAP_OPENNI_DEPTH_GENERATOR = 1 << 31,\n       CAP_OPENNI_IMAGE_GENERATOR = 1 << 30,\n       CAP_OPENNI_GENERATORS_MASK = CAP_OPENNI_DEPTH_GENERATOR + CAP_OPENNI_IMAGE_GENERATOR\n     };\n\n// Properties of cameras available through OpenNI interfaces\nenum { CAP_PROP_OPENNI_OUTPUT_MODE       = 100,\n       CAP_PROP_OPENNI_FRAME_MAX_DEPTH   = 101, // in mm\n       CAP_PROP_OPENNI_BASELINE          = 102, // in mm\n       CAP_PROP_OPENNI_FOCAL_LENGTH      = 103, // in pixels\n       CAP_PROP_OPENNI_REGISTRATION      = 104, // flag that synchronizes the remapping depth map to image map\n                                                // by changing depth generator's view point (if the flag is \"on\") or\n                                                // sets this view point to its normal one (if the flag is \"off\").\n       CAP_PROP_OPENNI_REGISTRATION_ON   = CAP_PROP_OPENNI_REGISTRATION,\n       CAP_PROP_OPENNI_APPROX_FRAME_SYNC = 105,\n       CAP_PROP_OPENNI_MAX_BUFFER_SIZE   = 106,\n       CAP_PROP_OPENNI_CIRCLE_BUFFER     = 107,\n       CAP_PROP_OPENNI_MAX_TIME_DURATION = 108,\n       CAP_PROP_OPENNI_GENERATOR_PRESENT = 109,\n       CAP_PROP_OPENNI2_SYNC             = 110,\n       CAP_PROP_OPENNI2_MIRROR           = 111\n     };\n\n// OpenNI shortcats\nenum { CAP_OPENNI_IMAGE_GENERATOR_PRESENT         = CAP_OPENNI_IMAGE_GENERATOR + CAP_PROP_OPENNI_GENERATOR_PRESENT,\n       CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE     = CAP_OPENNI_IMAGE_GENERATOR + CAP_PROP_OPENNI_OUTPUT_MODE,\n       CAP_OPENNI_DEPTH_GENERATOR_BASELINE        = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_BASELINE,\n       CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH    = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_FOCAL_LENGTH,\n       CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION    = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_REGISTRATION,\n       CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION\n     };\n\n// OpenNI data given from depth generator\nenum { CAP_OPENNI_DEPTH_MAP         = 0, // Depth values in mm (CV_16UC1)\n       CAP_OPENNI_POINT_CLOUD_MAP   = 1, // XYZ in meters (CV_32FC3)\n       CAP_OPENNI_DISPARITY_MAP     = 2, // Disparity in pixels (CV_8UC1)\n       CAP_OPENNI_DISPARITY_MAP_32F = 3, // Disparity in pixels (CV_32FC1)\n       CAP_OPENNI_VALID_DEPTH_MASK  = 4, // CV_8UC1\n\n       // Data given from RGB image generator\n       CAP_OPENNI_BGR_IMAGE         = 5,\n       CAP_OPENNI_GRAY_IMAGE        = 6\n     };\n\n// Supported output modes of OpenNI image generator\nenum { CAP_OPENNI_VGA_30HZ  = 0,\n       CAP_OPENNI_SXGA_15HZ = 1,\n       CAP_OPENNI_SXGA_30HZ = 2,\n       CAP_OPENNI_QVGA_30HZ = 3,\n       CAP_OPENNI_QVGA_60HZ = 4\n     };\n\n\n// GStreamer\nenum { CAP_PROP_GSTREAMER_QUEUE_LENGTH = 200 // default is 1\n     };\n\n\n// PVAPI\nenum { CAP_PROP_PVAPI_MULTICASTIP           = 300, // ip for anable multicast master mode. 0 for disable multicast\n       CAP_PROP_PVAPI_FRAMESTARTTRIGGERMODE = 301, // FrameStartTriggerMode: Determines how a frame is initiated\n       CAP_PROP_PVAPI_DECIMATIONHORIZONTAL  = 302, // Horizontal sub-sampling of the image\n       CAP_PROP_PVAPI_DECIMATIONVERTICAL    = 303, // Vertical sub-sampling of the image\n       CAP_PROP_PVAPI_BINNINGX              = 304, // Horizontal binning factor\n       CAP_PROP_PVAPI_BINNINGY              = 305, // Vertical binning factor\n       CAP_PROP_PVAPI_PIXELFORMAT           = 306  // Pixel format\n     };\n\n// PVAPI: FrameStartTriggerMode\nenum { CAP_PVAPI_FSTRIGMODE_FREERUN     = 0,    // Freerun\n       CAP_PVAPI_FSTRIGMODE_SYNCIN1     = 1,    // SyncIn1\n       CAP_PVAPI_FSTRIGMODE_SYNCIN2     = 2,    // SyncIn2\n       CAP_PVAPI_FSTRIGMODE_FIXEDRATE   = 3,    // FixedRate\n       CAP_PVAPI_FSTRIGMODE_SOFTWARE    = 4     // Software\n     };\n\n// PVAPI: DecimationHorizontal, DecimationVertical\nenum { CAP_PVAPI_DECIMATION_OFF       = 1,    // Off\n       CAP_PVAPI_DECIMATION_2OUTOF4   = 2,    // 2 out of 4 decimation\n       CAP_PVAPI_DECIMATION_2OUTOF8   = 4,    // 2 out of 8 decimation\n       CAP_PVAPI_DECIMATION_2OUTOF16  = 8     // 2 out of 16 decimation\n     };\n\n// PVAPI: PixelFormat\nenum { CAP_PVAPI_PIXELFORMAT_MONO8    = 1,    // Mono8\n       CAP_PVAPI_PIXELFORMAT_MONO16   = 2,    // Mono16\n       CAP_PVAPI_PIXELFORMAT_BAYER8   = 3,    // Bayer8\n       CAP_PVAPI_PIXELFORMAT_BAYER16  = 4,    // Bayer16\n       CAP_PVAPI_PIXELFORMAT_RGB24    = 5,    // Rgb24\n       CAP_PVAPI_PIXELFORMAT_BGR24    = 6,    // Bgr24\n       CAP_PVAPI_PIXELFORMAT_RGBA32   = 7,    // Rgba32\n       CAP_PVAPI_PIXELFORMAT_BGRA32   = 8,    // Bgra32\n     };\n\n// Properties of cameras available through XIMEA SDK interface\nenum { CAP_PROP_XI_DOWNSAMPLING  = 400, // Change image resolution by binning or skipping.\n       CAP_PROP_XI_DATA_FORMAT   = 401, // Output data format.\n       CAP_PROP_XI_OFFSET_X      = 402, // Horizontal offset from the origin to the area of interest (in pixels).\n       CAP_PROP_XI_OFFSET_Y      = 403, // Vertical offset from the origin to the area of interest (in pixels).\n       CAP_PROP_XI_TRG_SOURCE    = 404, // Defines source of trigger.\n       CAP_PROP_XI_TRG_SOFTWARE  = 405, // Generates an internal trigger. PRM_TRG_SOURCE must be set to TRG_SOFTWARE.\n       CAP_PROP_XI_GPI_SELECTOR  = 406, // Selects general purpose input\n       CAP_PROP_XI_GPI_MODE      = 407, // Set general purpose input mode\n       CAP_PROP_XI_GPI_LEVEL     = 408, // Get general purpose level\n       CAP_PROP_XI_GPO_SELECTOR  = 409, // Selects general purpose output\n       CAP_PROP_XI_GPO_MODE      = 410, // Set general purpose output mode\n       CAP_PROP_XI_LED_SELECTOR  = 411, // Selects camera signalling LED\n       CAP_PROP_XI_LED_MODE      = 412, // Define camera signalling LED functionality\n       CAP_PROP_XI_MANUAL_WB     = 413, // Calculates White Balance(must be called during acquisition)\n       CAP_PROP_XI_AUTO_WB       = 414, // Automatic white balance\n       CAP_PROP_XI_AEAG          = 415, // Automatic exposure/gain\n       CAP_PROP_XI_EXP_PRIORITY  = 416, // Exposure priority (0.5 - exposure 50%, gain 50%).\n       CAP_PROP_XI_AE_MAX_LIMIT  = 417, // Maximum limit of exposure in AEAG procedure\n       CAP_PROP_XI_AG_MAX_LIMIT  = 418, // Maximum limit of gain in AEAG procedure\n       CAP_PROP_XI_AEAG_LEVEL    = 419, // Average intensity of output signal AEAG should achieve(in %)\n       CAP_PROP_XI_TIMEOUT       = 420  // Image capture timeout in milliseconds\n     };\n\n// Properties of cameras available through AVFOUNDATION interface\nenum { CAP_PROP_IOS_DEVICE_FOCUS        = 9001,\n       CAP_PROP_IOS_DEVICE_EXPOSURE     = 9002,\n       CAP_PROP_IOS_DEVICE_FLASH        = 9003,\n       CAP_PROP_IOS_DEVICE_WHITEBALANCE = 9004,\n       CAP_PROP_IOS_DEVICE_TORCH        = 9005\n     };\n\n\n// Properties of cameras available through Smartek Giganetix Ethernet Vision interface\n/* --- Vladimir Litvinenko (litvinenko.vladimir@gmail.com) --- */\nenum { CAP_PROP_GIGA_FRAME_OFFSET_X   = 10001,\n       CAP_PROP_GIGA_FRAME_OFFSET_Y   = 10002,\n       CAP_PROP_GIGA_FRAME_WIDTH_MAX  = 10003,\n       CAP_PROP_GIGA_FRAME_HEIGH_MAX  = 10004,\n       CAP_PROP_GIGA_FRAME_SENS_WIDTH = 10005,\n       CAP_PROP_GIGA_FRAME_SENS_HEIGH = 10006\n     };\n\nenum { CAP_PROP_INTELPERC_PROFILE_COUNT               = 11001,\n       CAP_PROP_INTELPERC_PROFILE_IDX                 = 11002,\n       CAP_PROP_INTELPERC_DEPTH_LOW_CONFIDENCE_VALUE  = 11003,\n       CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE      = 11004,\n       CAP_PROP_INTELPERC_DEPTH_CONFIDENCE_THRESHOLD  = 11005,\n       CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_HORZ     = 11006,\n       CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_VERT     = 11007\n     };\n\n// Intel PerC streams\nenum { CAP_INTELPERC_DEPTH_GENERATOR = 1 << 29,\n       CAP_INTELPERC_IMAGE_GENERATOR = 1 << 28,\n       CAP_INTELPERC_GENERATORS_MASK = CAP_INTELPERC_DEPTH_GENERATOR + CAP_INTELPERC_IMAGE_GENERATOR\n     };\n\nenum { CAP_INTELPERC_DEPTH_MAP              = 0, // Each pixel is a 16-bit integer. The value indicates the distance from an object to the camera's XY plane or the Cartesian depth.\n       CAP_INTELPERC_UVDEPTH_MAP            = 1, // Each pixel contains two 32-bit floating point values in the range of 0-1, representing the mapping of depth coordinates to the color coordinates.\n       CAP_INTELPERC_IR_MAP                 = 2, // Each pixel is a 16-bit integer. The value indicates the intensity of the reflected laser beam.\n       CAP_INTELPERC_IMAGE                  = 3\n     };\n\nenum { VIDEOWRITER_PROP_QUALITY = 1,    // Quality (0..100%) of the videostream encoded\n       VIDEOWRITER_PROP_FRAMEBYTES = 2, // (Read-only): Size of just encoded video frame\n       VIDEOWRITER_PROP_NSTRIPES = 3    // Number of stripes for parallel encoding. -1 for auto detection\n     };\n\n// gPhoto2 properties, if propertyId is less than 0 then work on widget with that __additive inversed__ camera setting ID\n// Get IDs by using CAP_PROP_GPHOTO2_WIDGET_ENUMERATE.\n// @see CvCaptureCAM_GPHOTO2 for more info\nenum { CAP_PROP_GPHOTO2_PREVIEW           = 17001, // Capture only preview from liveview mode.\n       CAP_PROP_GPHOTO2_WIDGET_ENUMERATE  = 17002, // Readonly, returns (const char *).\n       CAP_PROP_GPHOTO2_RELOAD_CONFIG     = 17003, // Trigger, only by set. Reload camera settings.\n       CAP_PROP_GPHOTO2_RELOAD_ON_CHANGE  = 17004, // Reload all settings on set.\n       CAP_PROP_GPHOTO2_COLLECT_MSGS      = 17005, // Collect messages with details.\n       CAP_PROP_GPHOTO2_FLUSH_MSGS        = 17006, // Readonly, returns (const char *).\n       CAP_PROP_SPEED                     = 17007, // Exposure speed. Can be readonly, depends on camera program.\n       CAP_PROP_APERTURE                  = 17008, // Aperture. Can be readonly, depends on camera program.\n       CAP_PROP_EXPOSUREPROGRAM           = 17009, // Camera exposure program.\n       CAP_PROP_VIEWFINDER                = 17010  // Enter liveview mode.\n     };\n\n//enum {\n\nclass IVideoCapture;\n\n/** @brief Class for video capturing from video files, image sequences or cameras. The class provides C++ API\nfor capturing video from cameras or for reading video files and image sequences. Here is how the\nclass can be used: :\n@code\n    #include \"opencv2/opencv.hpp\"\n\n    using namespace cv;\n\n    int main(int, char**)\n    {\n        VideoCapture cap(0); // open the default camera\n        if(!cap.isOpened())  // check if we succeeded\n            return -1;\n\n        Mat edges;\n        namedWindow(\"edges\",1);\n        for(;;)\n        {\n            Mat frame;\n            cap >> frame; // get a new frame from camera\n            cvtColor(frame, edges, COLOR_BGR2GRAY);\n            GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);\n            Canny(edges, edges, 0, 30, 3);\n            imshow(\"edges\", edges);\n            if(waitKey(30) >= 0) break;\n        }\n        // the camera will be deinitialized automatically in VideoCapture destructor\n        return 0;\n    }\n@endcode\n@note In C API the black-box structure CvCapture is used instead of VideoCapture.\n\n@note\n-   A basic sample on using the VideoCapture interface can be found at\n    opencv_source_code/samples/cpp/starter_video.cpp\n-   Another basic video processing sample can be found at\n    opencv_source_code/samples/cpp/video_dmtx.cpp\n-   (Python) A basic sample on using the VideoCapture interface can be found at\n    opencv_source_code/samples/python/video.py\n-   (Python) Another basic video processing sample can be found at\n    opencv_source_code/samples/python/video_dmtx.py\n-   (Python) A multi threaded video processing sample can be found at\n    opencv_source_code/samples/python/video_threaded.py\n */\nclass CV_EXPORTS_W VideoCapture\n{\npublic:\n    /** @brief\n    @note In C API, when you finished working with video, release CvCapture structure with\n    cvReleaseCapture(), or use Ptr\\<CvCapture\\> that calls cvReleaseCapture() automatically in the\n    destructor.\n     */\n    CV_WRAP VideoCapture();\n\n    /** @overload\n    @param filename name of the opened video file (eg. video.avi) or image sequence (eg.\n    img_%02d.jpg, which will read samples like img_00.jpg, img_01.jpg, img_02.jpg, ...)\n    */\n    CV_WRAP VideoCapture(const String& filename);\n\n    /** @overload\n    @param filename name of the opened video file (eg. video.avi) or image sequence (eg.\n    img_%02d.jpg, which will read samples like img_00.jpg, img_01.jpg, img_02.jpg, ...)\n\n    @param apiPreference preferred Capture API to use. Can be used to enforce a specific reader\n    implementation if multiple are available: e.g. CAP_FFMPEG or CAP_IMAGES\n    */\n    CV_WRAP VideoCapture(const String& filename, int apiPreference);\n\n    /** @overload\n    @param index = camera_id + domain_offset (CAP_*). id of the video capturing device to open. If there is a single\n    camera connected, just pass 0. Advanced Usage: to open Camera 1 using the MS Media Foundation API: index = 1 + CAP_MSMF\n    */\n    CV_WRAP VideoCapture(int index);\n\n    virtual ~VideoCapture();\n\n    /** @brief Open video file or a capturing device for video capturing\n\n    @param filename name of the opened video file (eg. video.avi) or image sequence (eg.\n    img_%02d.jpg, which will read samples like img_00.jpg, img_01.jpg, img_02.jpg, ...)\n\n    The methods first call VideoCapture::release to close the already opened file or camera.\n     */\n    CV_WRAP virtual bool open(const String& filename);\n\n    /** @overload\n    @param index = camera_id + domain_offset (CAP_*). id of the video capturing device to open. If there is a single\n    camera connected, just pass 0. Advanced Usage: to open Camera 1 using the MS Media Foundation API: index = 1 + CAP_MSMF\n    */\n    CV_WRAP virtual bool open(int index);\n\n    /** @brief Returns true if video capturing has been initialized already.\n\n    If the previous call to VideoCapture constructor or VideoCapture::open succeeded, the method returns\n    true.\n     */\n    CV_WRAP virtual bool isOpened() const;\n\n    /** @brief Closes video file or capturing device.\n\n    The methods are automatically called by subsequent VideoCapture::open and by VideoCapture\n    destructor.\n\n    The C function also deallocates memory and clears \\*capture pointer.\n     */\n    CV_WRAP virtual void release();\n\n    /** @brief Grabs the next frame from video file or capturing device.\n\n    The methods/functions grab the next frame from video file or camera and return true (non-zero) in\n    the case of success.\n\n    The primary use of the function is in multi-camera environments, especially when the cameras do not\n    have hardware synchronization. That is, you call VideoCapture::grab() for each camera and after that\n    call the slower method VideoCapture::retrieve() to decode and get frame from each camera. This way\n    the overhead on demosaicing or motion jpeg decompression etc. is eliminated and the retrieved frames\n    from different cameras will be closer in time.\n\n    Also, when a connected camera is multi-head (for example, a stereo camera or a Kinect device), the\n    correct way of retrieving data from it is to call VideoCapture::grab first and then call\n    VideoCapture::retrieve one or more times with different values of the channel parameter. See\n    <https://github.com/Itseez/opencv/tree/master/samples/cpp/openni_capture.cpp>\n     */\n    CV_WRAP virtual bool grab();\n\n    /** @brief Decodes and returns the grabbed video frame.\n\n    The methods/functions decode and return the just grabbed frame. If no frames has been grabbed\n    (camera has been disconnected, or there are no more frames in video file), the methods return false\n    and the functions return NULL pointer.\n\n    @note OpenCV 1.x functions cvRetrieveFrame and cv.RetrieveFrame return image stored inside the video\n    capturing structure. It is not allowed to modify or release the image! You can copy the frame using\n    :ocvcvCloneImage and then do whatever you want with the copy.\n     */\n    CV_WRAP virtual bool retrieve(OutputArray image, int flag = 0);\n    virtual VideoCapture& operator >> (CV_OUT Mat& image);\n    virtual VideoCapture& operator >> (CV_OUT UMat& image);\n\n    /** @brief Grabs, decodes and returns the next video frame.\n\n    The methods/functions combine VideoCapture::grab and VideoCapture::retrieve in one call. This is the\n    most convenient method for reading video files or capturing data from decode and return the just\n    grabbed frame. If no frames has been grabbed (camera has been disconnected, or there are no more\n    frames in video file), the methods return false and the functions return NULL pointer.\n\n    @note OpenCV 1.x functions cvRetrieveFrame and cv.RetrieveFrame return image stored inside the video\n    capturing structure. It is not allowed to modify or release the image! You can copy the frame using\n    :ocvcvCloneImage and then do whatever you want with the copy.\n     */\n    CV_WRAP virtual bool read(OutputArray image);\n\n    /** @brief Sets a property in the VideoCapture.\n\n    @param propId Property identifier. It can be one of the following:\n     -   **CAP_PROP_POS_MSEC** Current position of the video file in milliseconds.\n     -   **CAP_PROP_POS_FRAMES** 0-based index of the frame to be decoded/captured next.\n     -   **CAP_PROP_POS_AVI_RATIO** Relative position of the video file: 0 - start of the\n         film, 1 - end of the film.\n     -   **CAP_PROP_FRAME_WIDTH** Width of the frames in the video stream.\n     -   **CAP_PROP_FRAME_HEIGHT** Height of the frames in the video stream.\n     -   **CAP_PROP_FPS** Frame rate.\n     -   **CAP_PROP_FOURCC** 4-character code of codec.\n     -   **CAP_PROP_FRAME_COUNT** Number of frames in the video file.\n     -   **CAP_PROP_FORMAT** Format of the Mat objects returned by retrieve() .\n     -   **CAP_PROP_MODE** Backend-specific value indicating the current capture mode.\n     -   **CAP_PROP_BRIGHTNESS** Brightness of the image (only for cameras).\n     -   **CAP_PROP_CONTRAST** Contrast of the image (only for cameras).\n     -   **CAP_PROP_SATURATION** Saturation of the image (only for cameras).\n     -   **CAP_PROP_HUE** Hue of the image (only for cameras).\n     -   **CAP_PROP_GAIN** Gain of the image (only for cameras).\n     -   **CAP_PROP_EXPOSURE** Exposure (only for cameras).\n     -   **CAP_PROP_CONVERT_RGB** Boolean flags indicating whether images should be converted\n         to RGB.\n     -   **CAP_PROP_WHITE_BALANCE** Currently unsupported\n     -   **CAP_PROP_RECTIFICATION** Rectification flag for stereo cameras (note: only supported\n         by DC1394 v 2.x backend currently)\n    @param value Value of the property.\n     */\n    CV_WRAP virtual bool set(int propId, double value);\n\n    /** @brief Returns the specified VideoCapture property\n\n    @param propId Property identifier. It can be one of the following:\n     -   **CAP_PROP_POS_MSEC** Current position of the video file in milliseconds or video\n         capture timestamp.\n     -   **CAP_PROP_POS_FRAMES** 0-based index of the frame to be decoded/captured next.\n     -   **CAP_PROP_POS_AVI_RATIO** Relative position of the video file: 0 - start of the\n         film, 1 - end of the film.\n     -   **CAP_PROP_FRAME_WIDTH** Width of the frames in the video stream.\n     -   **CAP_PROP_FRAME_HEIGHT** Height of the frames in the video stream.\n     -   **CAP_PROP_FPS** Frame rate.\n     -   **CAP_PROP_FOURCC** 4-character code of codec.\n     -   **CAP_PROP_FRAME_COUNT** Number of frames in the video file.\n     -   **CAP_PROP_FORMAT** Format of the Mat objects returned by retrieve() .\n     -   **CAP_PROP_MODE** Backend-specific value indicating the current capture mode.\n     -   **CAP_PROP_BRIGHTNESS** Brightness of the image (only for cameras).\n     -   **CAP_PROP_CONTRAST** Contrast of the image (only for cameras).\n     -   **CAP_PROP_SATURATION** Saturation of the image (only for cameras).\n     -   **CAP_PROP_HUE** Hue of the image (only for cameras).\n     -   **CAP_PROP_GAIN** Gain of the image (only for cameras).\n     -   **CAP_PROP_EXPOSURE** Exposure (only for cameras).\n     -   **CAP_PROP_CONVERT_RGB** Boolean flags indicating whether images should be converted\n         to RGB.\n     -   **CAP_PROP_WHITE_BALANCE** Currently not supported\n     -   **CAP_PROP_RECTIFICATION** Rectification flag for stereo cameras (note: only supported\n         by DC1394 v 2.x backend currently)\n\n    @note When querying a property that is not supported by the backend used by the VideoCapture\n    class, value 0 is returned.\n     */\n    CV_WRAP virtual double get(int propId) const;\n\n    /** @overload\n\n    @param filename name of the opened video file (eg. video.avi) or image sequence (eg.\n    img_%02d.jpg, which will read samples like img_00.jpg, img_01.jpg, img_02.jpg, ...)\n\n    @param apiPreference preferred Capture API to use. Can be used to enforce a specific reader\n    implementation if multiple are available: e.g. CAP_FFMPEG or CAP_IMAGES\n\n    The methods first call VideoCapture::release to close the already opened file or camera.\n     */\n    CV_WRAP virtual bool open(const String& filename, int apiPreference);\n\nprotected:\n    Ptr<CvCapture> cap;\n    Ptr<IVideoCapture> icap;\n};\n\nclass IVideoWriter;\n\n/** @brief Video writer class.\n */\nclass CV_EXPORTS_W VideoWriter\n{\npublic:\n    /** @brief VideoWriter constructors\n\n    The constructors/functions initialize video writers. On Linux FFMPEG is used to write videos; on\n    Windows FFMPEG or VFW is used; on MacOSX QTKit is used.\n     */\n    CV_WRAP VideoWriter();\n\n    /** @overload\n    @param filename Name of the output video file.\n    @param fourcc 4-character code of codec used to compress the frames. For example,\n    VideoWriter::fourcc('P','I','M','1') is a MPEG-1 codec, VideoWriter::fourcc('M','J','P','G') is a\n    motion-jpeg codec etc. List of codes can be obtained at [Video Codecs by\n    FOURCC](http://www.fourcc.org/codecs.php) page. FFMPEG backend with MP4 container natively uses\n    other values as fourcc code: see [ObjectType](http://www.mp4ra.org/codecs.html),\n    so you may receive a warning message from OpenCV about fourcc code conversion.\n    @param fps Framerate of the created video stream.\n    @param frameSize Size of the video frames.\n    @param isColor If it is not zero, the encoder will expect and encode color frames, otherwise it\n    will work with grayscale frames (the flag is currently supported on Windows only).\n    */\n    CV_WRAP VideoWriter(const String& filename, int fourcc, double fps,\n                Size frameSize, bool isColor = true);\n\n    virtual ~VideoWriter();\n\n    /** @brief Initializes or reinitializes video writer.\n\n    The method opens video writer. Parameters are the same as in the constructor\n    VideoWriter::VideoWriter.\n     */\n    CV_WRAP virtual bool open(const String& filename, int fourcc, double fps,\n                      Size frameSize, bool isColor = true);\n\n    /** @brief Returns true if video writer has been successfully initialized.\n    */\n    CV_WRAP virtual bool isOpened() const;\n\n    /** @brief Closes the video writer.\n\n    The methods are automatically called by subsequent VideoWriter::open and by the VideoWriter\n    destructor.\n     */\n    CV_WRAP virtual void release();\n    virtual VideoWriter& operator << (const Mat& image);\n\n    /** @brief Writes the next video frame\n\n    @param image The written frame\n\n    The functions/methods write the specified image to video file. It must have the same size as has\n    been specified when opening the video writer.\n     */\n    CV_WRAP virtual void write(const Mat& image);\n\n    /** @brief Sets a property in the VideoWriter.\n\n     @param propId Property identifier. It can be one of the following:\n     -   **VIDEOWRITER_PROP_QUALITY** Quality (0..100%) of the videostream encoded. Can be adjusted dynamically in some codecs.\n     -   **VIDEOWRITER_PROP_NSTRIPES** Number of stripes for parallel encoding\n     @param value Value of the property.\n     */\n    CV_WRAP virtual bool set(int propId, double value);\n\n    /** @brief Returns the specified VideoWriter property\n\n     @param propId Property identifier. It can be one of the following:\n     -   **VIDEOWRITER_PROP_QUALITY** Current quality of the encoded videostream.\n     -   **VIDEOWRITER_PROP_FRAMEBYTES** (Read-only) Size of just encoded video frame; note that the encoding order may be different from representation order.\n     -   **VIDEOWRITER_PROP_NSTRIPES** Number of stripes for parallel encoding\n\n     @note When querying a property that is not supported by the backend used by the VideoWriter\n     class, value 0 is returned.\n     */\n    CV_WRAP virtual double get(int propId) const;\n\n    /** @brief Concatenates 4 chars to a fourcc code\n\n    This static method constructs the fourcc code of the codec to be used in the constructor\n    VideoWriter::VideoWriter or VideoWriter::open.\n     */\n    CV_WRAP static int fourcc(char c1, char c2, char c3, char c4);\n\nprotected:\n    Ptr<CvVideoWriter> writer;\n    Ptr<IVideoWriter> iwriter;\n\n    static Ptr<IVideoWriter> create(const String& filename, int fourcc, double fps,\n                                    Size frameSize, bool isColor = true);\n};\n\ntemplate<> CV_EXPORTS void DefaultDeleter<CvCapture>::operator ()(CvCapture* obj) const;\ntemplate<> CV_EXPORTS void DefaultDeleter<CvVideoWriter>::operator ()(CvVideoWriter* obj) const;\n\n//! @} videoio\n\n} // cv\n\n#endif //__OPENCV_VIDEOIO_HPP__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/deblurring.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_DEBLURRING_HPP__\n#define __OPENCV_VIDEOSTAB_DEBLURRING_HPP__\n\n#include <vector>\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab\n//! @{\n\nCV_EXPORTS float calcBlurriness(const Mat &frame);\n\nclass CV_EXPORTS DeblurerBase\n{\npublic:\n    DeblurerBase() : radius_(0), frames_(0), motions_(0), blurrinessRates_(0) {}\n\n    virtual ~DeblurerBase() {}\n\n    virtual void setRadius(int val) { radius_ = val; }\n    virtual int radius() const { return radius_; }\n\n    virtual void deblur(int idx, Mat &frame) = 0;\n\n\n    // data from stabilizer\n\n    virtual void setFrames(const std::vector<Mat> &val) { frames_ = &val; }\n    virtual const std::vector<Mat>& frames() const { return *frames_; }\n\n    virtual void setMotions(const std::vector<Mat> &val) { motions_ = &val; }\n    virtual const std::vector<Mat>& motions() const { return *motions_; }\n\n    virtual void setBlurrinessRates(const std::vector<float> &val) { blurrinessRates_ = &val; }\n    virtual const std::vector<float>& blurrinessRates() const { return *blurrinessRates_; }\n\nprotected:\n    int radius_;\n    const std::vector<Mat> *frames_;\n    const std::vector<Mat> *motions_;\n    const std::vector<float> *blurrinessRates_;\n};\n\nclass CV_EXPORTS NullDeblurer : public DeblurerBase\n{\npublic:\n    virtual void deblur(int /*idx*/, Mat &/*frame*/) {}\n};\n\nclass CV_EXPORTS WeightingDeblurer : public DeblurerBase\n{\npublic:\n    WeightingDeblurer();\n\n    void setSensitivity(float val) { sensitivity_ = val; }\n    float sensitivity() const { return sensitivity_; }\n\n    virtual void deblur(int idx, Mat &frame);\n\nprivate:\n    float sensitivity_;\n    Mat_<float> bSum_, gSum_, rSum_, wSum_;\n};\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/fast_marching.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_FAST_MARCHING_HPP__\n#define __OPENCV_VIDEOSTAB_FAST_MARCHING_HPP__\n\n#include <cmath>\n#include <queue>\n#include <algorithm>\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab_marching\n//! @{\n\n/** @brief Describes the Fast Marching Method implementation.\n\n  See http://iwi.eldoc.ub.rug.nl/FILES/root/2004/JGraphToolsTelea/2004JGraphToolsTelea.pdf\n */\nclass CV_EXPORTS FastMarchingMethod\n{\npublic:\n    FastMarchingMethod() : inf_(1e6f) {}\n\n    /** @brief Template method that runs the Fast Marching Method.\n\n    @param mask Image mask. 0 value indicates that the pixel value must be inpainted, 255 indicates\n    that the pixel value is known, other values aren't acceptable.\n    @param inpaint Inpainting functor that overloads void operator ()(int x, int y).\n    @return Inpainting functor.\n     */\n    template <typename Inpaint>\n    Inpaint run(const Mat &mask, Inpaint inpaint);\n\n    /**\n    @return Distance map that's created during working of the method.\n    */\n    Mat distanceMap() const { return dist_; }\n\nprivate:\n    enum { INSIDE = 0, BAND = 1, KNOWN = 255 };\n\n    struct DXY\n    {\n        float dist;\n        int x, y;\n\n        DXY() : dist(0), x(0), y(0) {}\n        DXY(float _dist, int _x, int _y) : dist(_dist), x(_x), y(_y) {}\n        bool operator <(const DXY &dxy) const { return dist < dxy.dist; }\n    };\n\n    float solve(int x1, int y1, int x2, int y2) const;\n    int& indexOf(const DXY &dxy) { return index_(dxy.y, dxy.x); }\n\n    void heapUp(int idx);\n    void heapDown(int idx);\n    void heapAdd(const DXY &dxy);\n    void heapRemoveMin();\n\n    float inf_;\n\n    cv::Mat_<uchar> flag_; // flag map\n    cv::Mat_<float> dist_; // distance map\n\n    cv::Mat_<int> index_; // index of point in the narrow band\n    std::vector<DXY> narrowBand_; // narrow band heap\n    int size_; // narrow band size\n};\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#include \"fast_marching_inl.hpp\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/fast_marching_inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_FAST_MARCHING_INL_HPP__\n#define __OPENCV_VIDEOSTAB_FAST_MARCHING_INL_HPP__\n\n#include \"opencv2/videostab/fast_marching.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\ntemplate <typename Inpaint>\nInpaint FastMarchingMethod::run(const cv::Mat &mask, Inpaint inpaint)\n{\n    using namespace cv;\n\n    CV_Assert(mask.type() == CV_8U);\n\n    static const int lut[4][2] = {{-1,0}, {0,-1}, {1,0}, {0,1}};\n\n    mask.copyTo(flag_);\n    flag_.create(mask.size());\n    dist_.create(mask.size());\n    index_.create(mask.size());\n    narrowBand_.clear();\n    size_ = 0;\n\n    // init\n    for (int y = 0; y < flag_.rows; ++y)\n    {\n        for (int x = 0; x < flag_.cols; ++x)\n        {\n            if (flag_(y,x) == KNOWN)\n                dist_(y,x) = 0.f;\n            else\n            {\n                int n = 0;\n                int nunknown = 0;\n\n                for (int i = 0; i < 4; ++i)\n                {\n                    int xn = x + lut[i][0];\n                    int yn = y + lut[i][1];\n\n                    if (xn >= 0 && xn < flag_.cols && yn >= 0 && yn < flag_.rows)\n                    {\n                        n++;\n                        if (flag_(yn,xn) != KNOWN)\n                            nunknown++;\n                    }\n                }\n\n                if (n>0 && nunknown == n)\n                {\n                    dist_(y,x) = inf_;\n                    flag_(y,x) = INSIDE;\n                }\n                else\n                {\n                    dist_(y,x) = 0.f;\n                    flag_(y,x) = BAND;\n                    inpaint(x, y);\n\n                    narrowBand_.push_back(DXY(0.f,x,y));\n                    index_(y,x) = size_++;\n                }\n            }\n        }\n    }\n\n    // make heap\n    for (int i = size_/2-1; i >= 0; --i)\n        heapDown(i);\n\n    // main cycle\n    while (size_ > 0)\n    {\n        int x = narrowBand_[0].x;\n        int y = narrowBand_[0].y;\n        heapRemoveMin();\n\n        flag_(y,x) = KNOWN;\n        for (int n = 0; n < 4; ++n)\n        {\n            int xn = x + lut[n][0];\n            int yn = y + lut[n][1];\n\n            if (xn >= 0 && xn < flag_.cols && yn >= 0 && yn < flag_.rows && flag_(yn,xn) != KNOWN)\n            {\n                dist_(yn,xn) = std::min(std::min(solve(xn-1, yn, xn, yn-1), solve(xn+1, yn, xn, yn-1)),\n                                        std::min(solve(xn-1, yn, xn, yn+1), solve(xn+1, yn, xn, yn+1)));\n\n                if (flag_(yn,xn) == INSIDE)\n                {\n                    flag_(yn,xn) = BAND;\n                    inpaint(xn, yn);\n                    heapAdd(DXY(dist_(yn,xn),xn,yn));\n                }\n                else\n                {\n                    int i = index_(yn,xn);\n                    if (dist_(yn,xn) < narrowBand_[i].dist)\n                    {\n                        narrowBand_[i].dist = dist_(yn,xn);\n                        heapUp(i);\n                    }\n                    // works better if it's commented out\n                    /*else if (dist(yn,xn) > narrowBand[i].dist)\n                    {\n                        narrowBand[i].dist = dist(yn,xn);\n                        heapDown(i);\n                    }*/\n                }\n            }\n        }\n    }\n\n    return inpaint;\n}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/frame_source.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_FRAME_SOURCE_HPP__\n#define __OPENCV_VIDEOSTAB_FRAME_SOURCE_HPP__\n\n#include <vector>\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab\n//! @{\n\nclass CV_EXPORTS IFrameSource\n{\npublic:\n    virtual ~IFrameSource() {}\n    virtual void reset() = 0;\n    virtual Mat nextFrame() = 0;\n};\n\nclass CV_EXPORTS NullFrameSource : public IFrameSource\n{\npublic:\n    virtual void reset() {}\n    virtual Mat nextFrame() { return Mat(); }\n};\n\nclass CV_EXPORTS VideoFileSource : public IFrameSource\n{\npublic:\n    VideoFileSource(const String &path, bool volatileFrame = false);\n\n    virtual void reset();\n    virtual Mat nextFrame();\n\n    int width();\n    int height();\n    int count();\n    double fps();\n\nprivate:\n    Ptr<IFrameSource> impl;\n};\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/global_motion.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_GLOBAL_MOTION_HPP__\n#define __OPENCV_VIDEOSTAB_GLOBAL_MOTION_HPP__\n\n#include <vector>\n#include <fstream>\n#include \"opencv2/core.hpp\"\n#include \"opencv2/features2d.hpp\"\n#include \"opencv2/opencv_modules.hpp\"\n#include \"opencv2/videostab/optical_flow.hpp\"\n#include \"opencv2/videostab/motion_core.hpp\"\n#include \"opencv2/videostab/outlier_rejection.hpp\"\n\n#ifdef HAVE_OPENCV_CUDAIMGPROC\n#  include \"opencv2/cudaimgproc.hpp\"\n#endif\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab_motion\n//! @{\n\n/** @brief Estimates best global motion between two 2D point clouds in the least-squares sense.\n\n@note Works in-place and changes input point arrays.\n\n@param points0 Source set of 2D points (32F).\n@param points1 Destination set of 2D points (32F).\n@param model Motion model (up to MM_AFFINE).\n@param rmse Final root-mean-square error.\n@return 3x3 2D transformation matrix (32F).\n */\nCV_EXPORTS Mat estimateGlobalMotionLeastSquares(\n        InputOutputArray points0, InputOutputArray points1, int model = MM_AFFINE,\n        float *rmse = 0);\n\n/** @brief Estimates best global motion between two 2D point clouds robustly (using RANSAC method).\n\n@param points0 Source set of 2D points (32F).\n@param points1 Destination set of 2D points (32F).\n@param model Motion model. See cv::videostab::MotionModel.\n@param params RANSAC method parameters. See videostab::RansacParams.\n@param rmse Final root-mean-square error.\n@param ninliers Final number of inliers.\n */\nCV_EXPORTS Mat estimateGlobalMotionRansac(\n        InputArray points0, InputArray points1, int model = MM_AFFINE,\n        const RansacParams &params = RansacParams::default2dMotion(MM_AFFINE),\n        float *rmse = 0, int *ninliers = 0);\n\n/** @brief Base class for all global motion estimation methods.\n */\nclass CV_EXPORTS MotionEstimatorBase\n{\npublic:\n    virtual ~MotionEstimatorBase() {}\n\n    /** @brief Sets motion model.\n\n    @param val Motion model. See cv::videostab::MotionModel.\n     */\n    virtual void setMotionModel(MotionModel val) { motionModel_ = val; }\n\n    /**\n    @return Motion model. See cv::videostab::MotionModel.\n    */\n    virtual MotionModel motionModel() const { return motionModel_; }\n\n    /** @brief Estimates global motion between two 2D point clouds.\n\n    @param points0 Source set of 2D points (32F).\n    @param points1 Destination set of 2D points (32F).\n    @param ok Indicates whether motion was estimated successfully.\n    @return 3x3 2D transformation matrix (32F).\n     */\n    virtual Mat estimate(InputArray points0, InputArray points1, bool *ok = 0) = 0;\n\nprotected:\n    MotionEstimatorBase(MotionModel model) { setMotionModel(model); }\n\nprivate:\n    MotionModel motionModel_;\n};\n\n/** @brief Describes a robust RANSAC-based global 2D motion estimation method which minimizes L2 error.\n */\nclass CV_EXPORTS MotionEstimatorRansacL2 : public MotionEstimatorBase\n{\npublic:\n    MotionEstimatorRansacL2(MotionModel model = MM_AFFINE);\n\n    void setRansacParams(const RansacParams &val) { ransacParams_ = val; }\n    RansacParams ransacParams() const { return ransacParams_; }\n\n    void setMinInlierRatio(float val) { minInlierRatio_ = val; }\n    float minInlierRatio() const { return minInlierRatio_; }\n\n    virtual Mat estimate(InputArray points0, InputArray points1, bool *ok = 0);\n\nprivate:\n    RansacParams ransacParams_;\n    float minInlierRatio_;\n};\n\n/** @brief Describes a global 2D motion estimation method which minimizes L1 error.\n\n@note To be able to use this method you must build OpenCV with CLP library support. :\n */\nclass CV_EXPORTS MotionEstimatorL1 : public MotionEstimatorBase\n{\npublic:\n    MotionEstimatorL1(MotionModel model = MM_AFFINE);\n\n    virtual Mat estimate(InputArray points0, InputArray points1, bool *ok = 0);\n\nprivate:\n    std::vector<double> obj_, collb_, colub_;\n    std::vector<double> elems_, rowlb_, rowub_;\n    std::vector<int> rows_, cols_;\n\n    void set(int row, int col, double coef)\n    {\n        rows_.push_back(row);\n        cols_.push_back(col);\n        elems_.push_back(coef);\n    }\n};\n\n/** @brief Base class for global 2D motion estimation methods which take frames as input.\n */\nclass CV_EXPORTS ImageMotionEstimatorBase\n{\npublic:\n    virtual ~ImageMotionEstimatorBase() {}\n\n    virtual void setMotionModel(MotionModel val) { motionModel_ = val; }\n    virtual MotionModel motionModel() const { return motionModel_; }\n\n    virtual Mat estimate(const Mat &frame0, const Mat &frame1, bool *ok = 0) = 0;\n\nprotected:\n    ImageMotionEstimatorBase(MotionModel model) { setMotionModel(model); }\n\nprivate:\n    MotionModel motionModel_;\n};\n\nclass CV_EXPORTS FromFileMotionReader : public ImageMotionEstimatorBase\n{\npublic:\n    FromFileMotionReader(const String &path);\n\n    virtual Mat estimate(const Mat &frame0, const Mat &frame1, bool *ok = 0);\n\nprivate:\n    std::ifstream file_;\n};\n\nclass CV_EXPORTS ToFileMotionWriter : public ImageMotionEstimatorBase\n{\npublic:\n    ToFileMotionWriter(const String &path, Ptr<ImageMotionEstimatorBase> estimator);\n\n    virtual void setMotionModel(MotionModel val) { motionEstimator_->setMotionModel(val); }\n    virtual MotionModel motionModel() const { return motionEstimator_->motionModel(); }\n\n    virtual Mat estimate(const Mat &frame0, const Mat &frame1, bool *ok = 0);\n\nprivate:\n    std::ofstream file_;\n    Ptr<ImageMotionEstimatorBase> motionEstimator_;\n};\n\n/** @brief Describes a global 2D motion estimation method which uses keypoints detection and optical flow for\nmatching.\n */\nclass CV_EXPORTS KeypointBasedMotionEstimator : public ImageMotionEstimatorBase\n{\npublic:\n    KeypointBasedMotionEstimator(Ptr<MotionEstimatorBase> estimator);\n\n    virtual void setMotionModel(MotionModel val) { motionEstimator_->setMotionModel(val); }\n    virtual MotionModel motionModel() const { return motionEstimator_->motionModel(); }\n\n    void setDetector(Ptr<FeatureDetector> val) { detector_ = val; }\n    Ptr<FeatureDetector> detector() const { return detector_; }\n\n    void setOpticalFlowEstimator(Ptr<ISparseOptFlowEstimator> val) { optFlowEstimator_ = val; }\n    Ptr<ISparseOptFlowEstimator> opticalFlowEstimator() const { return optFlowEstimator_; }\n\n    void setOutlierRejector(Ptr<IOutlierRejector> val) { outlierRejector_ = val; }\n    Ptr<IOutlierRejector> outlierRejector() const { return outlierRejector_; }\n\n    virtual Mat estimate(const Mat &frame0, const Mat &frame1, bool *ok = 0);\n\nprivate:\n    Ptr<MotionEstimatorBase> motionEstimator_;\n    Ptr<FeatureDetector> detector_;\n    Ptr<ISparseOptFlowEstimator> optFlowEstimator_;\n    Ptr<IOutlierRejector> outlierRejector_;\n\n    std::vector<uchar> status_;\n    std::vector<KeyPoint> keypointsPrev_;\n    std::vector<Point2f> pointsPrev_, points_;\n    std::vector<Point2f> pointsPrevGood_, pointsGood_;\n};\n\n#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDAOPTFLOW)\n\nclass CV_EXPORTS KeypointBasedMotionEstimatorGpu : public ImageMotionEstimatorBase\n{\npublic:\n    KeypointBasedMotionEstimatorGpu(Ptr<MotionEstimatorBase> estimator);\n\n    virtual void setMotionModel(MotionModel val) { motionEstimator_->setMotionModel(val); }\n    virtual MotionModel motionModel() const { return motionEstimator_->motionModel(); }\n\n    void setOutlierRejector(Ptr<IOutlierRejector> val) { outlierRejector_ = val; }\n    Ptr<IOutlierRejector> outlierRejector() const { return outlierRejector_; }\n\n    virtual Mat estimate(const Mat &frame0, const Mat &frame1, bool *ok = 0);\n    Mat estimate(const cuda::GpuMat &frame0, const cuda::GpuMat &frame1, bool *ok = 0);\n\nprivate:\n    Ptr<MotionEstimatorBase> motionEstimator_;\n    Ptr<cuda::CornersDetector> detector_;\n    SparsePyrLkOptFlowEstimatorGpu optFlowEstimator_;\n    Ptr<IOutlierRejector> outlierRejector_;\n\n    cuda::GpuMat frame0_, grayFrame0_, frame1_;\n    cuda::GpuMat pointsPrev_, points_;\n    cuda::GpuMat status_;\n\n    Mat hostPointsPrev_, hostPoints_;\n    std::vector<Point2f> hostPointsPrevTmp_, hostPointsTmp_;\n    std::vector<uchar> rejectionStatus_;\n};\n\n#endif // defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDAOPTFLOW)\n\n/** @brief Computes motion between two frames assuming that all the intermediate motions are known.\n\n@param from Source frame index.\n@param to Destination frame index.\n@param motions Pair-wise motions. motions[i] denotes motion from the frame i to the frame i+1\n@return Motion from the frame from to the frame to.\n */\nCV_EXPORTS Mat getMotion(int from, int to, const std::vector<Mat> &motions);\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/inpainting.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_INPAINTINT_HPP__\n#define __OPENCV_VIDEOSTAB_INPAINTINT_HPP__\n\n#include <vector>\n#include \"opencv2/core.hpp\"\n#include \"opencv2/videostab/optical_flow.hpp\"\n#include \"opencv2/videostab/fast_marching.hpp\"\n#include \"opencv2/videostab/global_motion.hpp\"\n#include \"opencv2/photo.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab\n//! @{\n\nclass CV_EXPORTS InpainterBase\n{\npublic:\n    InpainterBase()\n        : radius_(0), motionModel_(MM_UNKNOWN), frames_(0), motions_(0),\n          stabilizedFrames_(0), stabilizationMotions_(0) {}\n\n    virtual ~InpainterBase() {}\n\n    virtual void setRadius(int val) { radius_ = val; }\n    virtual int radius() const { return radius_; }\n\n    virtual void setMotionModel(MotionModel val) { motionModel_ = val; }\n    virtual MotionModel motionModel() const { return motionModel_; }\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask) = 0;\n\n\n    // data from stabilizer\n\n    virtual void setFrames(const std::vector<Mat> &val) { frames_ = &val; }\n    virtual const std::vector<Mat>& frames() const { return *frames_; }\n\n    virtual void setMotions(const std::vector<Mat> &val) { motions_ = &val; }\n    virtual const std::vector<Mat>& motions() const { return *motions_; }\n\n    virtual void setStabilizedFrames(const std::vector<Mat> &val) { stabilizedFrames_ = &val; }\n    virtual const std::vector<Mat>& stabilizedFrames() const { return *stabilizedFrames_; }\n\n    virtual void setStabilizationMotions(const std::vector<Mat> &val) { stabilizationMotions_ = &val; }\n    virtual const std::vector<Mat>& stabilizationMotions() const { return *stabilizationMotions_; }\n\nprotected:\n    int radius_;\n    MotionModel motionModel_;\n    const std::vector<Mat> *frames_;\n    const std::vector<Mat> *motions_;\n    const std::vector<Mat> *stabilizedFrames_;\n    const std::vector<Mat> *stabilizationMotions_;\n};\n\nclass CV_EXPORTS NullInpainter : public InpainterBase\n{\npublic:\n    virtual void inpaint(int /*idx*/, Mat &/*frame*/, Mat &/*mask*/) {}\n};\n\nclass CV_EXPORTS InpaintingPipeline : public InpainterBase\n{\npublic:\n    void pushBack(Ptr<InpainterBase> inpainter) { inpainters_.push_back(inpainter); }\n    bool empty() const { return inpainters_.empty(); }\n\n    virtual void setRadius(int val);\n    virtual void setMotionModel(MotionModel val);\n    virtual void setFrames(const std::vector<Mat> &val);\n    virtual void setMotions(const std::vector<Mat> &val);\n    virtual void setStabilizedFrames(const std::vector<Mat> &val);\n    virtual void setStabilizationMotions(const std::vector<Mat> &val);\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    std::vector<Ptr<InpainterBase> > inpainters_;\n};\n\nclass CV_EXPORTS ConsistentMosaicInpainter : public InpainterBase\n{\npublic:\n    ConsistentMosaicInpainter();\n\n    void setStdevThresh(float val) { stdevThresh_ = val; }\n    float stdevThresh() const { return stdevThresh_; }\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    float stdevThresh_;\n};\n\nclass CV_EXPORTS MotionInpainter : public InpainterBase\n{\npublic:\n    MotionInpainter();\n\n    void setOptFlowEstimator(Ptr<IDenseOptFlowEstimator> val) { optFlowEstimator_ = val; }\n    Ptr<IDenseOptFlowEstimator> optFlowEstimator() const { return optFlowEstimator_; }\n\n    void setFlowErrorThreshold(float val) { flowErrorThreshold_ = val; }\n    float flowErrorThreshold() const { return flowErrorThreshold_; }\n\n    void setDistThreshold(float val) { distThresh_ = val; }\n    float distThresh() const { return distThresh_; }\n\n    void setBorderMode(int val) { borderMode_ = val; }\n    int borderMode() const { return borderMode_; }\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    FastMarchingMethod fmm_;\n    Ptr<IDenseOptFlowEstimator> optFlowEstimator_;\n    float flowErrorThreshold_;\n    float distThresh_;\n    int borderMode_;\n\n    Mat frame1_, transformedFrame1_;\n    Mat_<uchar> grayFrame_, transformedGrayFrame1_;\n    Mat_<uchar> mask1_, transformedMask1_;\n    Mat_<float> flowX_, flowY_, flowErrors_;\n    Mat_<uchar> flowMask_;\n};\n\nclass CV_EXPORTS ColorAverageInpainter : public InpainterBase\n{\npublic:\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    FastMarchingMethod fmm_;\n};\n\nclass CV_EXPORTS ColorInpainter : public InpainterBase\n{\npublic:\n    ColorInpainter(int method = INPAINT_TELEA, double radius = 2.);\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    int method_;\n    double radius_;\n    Mat invMask_;\n};\n\ninline ColorInpainter::ColorInpainter(int _method, double _radius)\n        : method_(_method), radius_(_radius) {}\n\nCV_EXPORTS void calcFlowMask(\n        const Mat &flowX, const Mat &flowY, const Mat &errors, float maxError,\n        const Mat &mask0, const Mat &mask1, Mat &flowMask);\n\nCV_EXPORTS void completeFrameAccordingToFlow(\n        const Mat &flowMask, const Mat &flowX, const Mat &flowY, const Mat &frame1, const Mat &mask1,\n        float distThresh, Mat& frame0, Mat &mask0);\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/log.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_LOG_HPP__\n#define __OPENCV_VIDEOSTAB_LOG_HPP__\n\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab\n//! @{\n\nclass CV_EXPORTS ILog\n{\npublic:\n    virtual ~ILog() {}\n    virtual void print(const char *format, ...) = 0;\n};\n\nclass CV_EXPORTS NullLog : public ILog\n{\npublic:\n    virtual void print(const char * /*format*/, ...) {}\n};\n\nclass CV_EXPORTS LogToStdout : public ILog\n{\npublic:\n    virtual void print(const char *format, ...);\n};\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/motion_core.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_MOTION_CORE_HPP__\n#define __OPENCV_VIDEOSTAB_MOTION_CORE_HPP__\n\n#include <cmath>\n#include \"opencv2/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab_motion\n//! @{\n\n/** @brief Describes motion model between two point clouds.\n */\nenum MotionModel\n{\n    MM_TRANSLATION = 0,\n    MM_TRANSLATION_AND_SCALE = 1,\n    MM_ROTATION = 2,\n    MM_RIGID = 3,\n    MM_SIMILARITY = 4,\n    MM_AFFINE = 5,\n    MM_HOMOGRAPHY = 6,\n    MM_UNKNOWN = 7\n};\n\n/** @brief Describes RANSAC method parameters.\n */\nstruct CV_EXPORTS RansacParams\n{\n    int size; //!< subset size\n    float thresh; //!< max error to classify as inlier\n    float eps; //!< max outliers ratio\n    float prob; //!< probability of success\n\n    RansacParams() : size(0), thresh(0), eps(0), prob(0) {}\n    /** @brief Constructor\n    @param size Subset size.\n    @param thresh Maximum re-projection error value to classify as inlier.\n    @param eps Maximum ratio of incorrect correspondences.\n    @param prob Required success probability.\n     */\n    RansacParams(int size, float thresh, float eps, float prob);\n\n    /**\n    @return Number of iterations that'll be performed by RANSAC method.\n    */\n    int niters() const\n    {\n        return static_cast<int>(\n                std::ceil(std::log(1 - prob) / std::log(1 - std::pow(1 - eps, size))));\n    }\n\n    /**\n    @param model Motion model. See cv::videostab::MotionModel.\n    @return Default RANSAC method parameters for the given motion model.\n    */\n    static RansacParams default2dMotion(MotionModel model)\n    {\n        CV_Assert(model < MM_UNKNOWN);\n        if (model == MM_TRANSLATION)\n            return RansacParams(1, 0.5f, 0.5f, 0.99f);\n        if (model == MM_TRANSLATION_AND_SCALE)\n            return RansacParams(2, 0.5f, 0.5f, 0.99f);\n        if (model == MM_ROTATION)\n            return RansacParams(1, 0.5f, 0.5f, 0.99f);\n        if (model == MM_RIGID)\n            return RansacParams(2, 0.5f, 0.5f, 0.99f);\n        if (model == MM_SIMILARITY)\n            return RansacParams(2, 0.5f, 0.5f, 0.99f);\n        if (model == MM_AFFINE)\n            return RansacParams(3, 0.5f, 0.5f, 0.99f);\n        return RansacParams(4, 0.5f, 0.5f, 0.99f);\n    }\n};\n\ninline RansacParams::RansacParams(int _size, float _thresh, float _eps, float _prob)\n    : size(_size), thresh(_thresh), eps(_eps), prob(_prob) {}\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/motion_stabilizing.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_MOTION_STABILIZING_HPP__\n#define __OPENCV_VIDEOSTAB_MOTION_STABILIZING_HPP__\n\n#include <vector>\n#include <utility>\n#include \"opencv2/core.hpp\"\n#include \"opencv2/videostab/global_motion.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab_motion\n//! @{\n\nclass CV_EXPORTS IMotionStabilizer\n{\npublic:\n    virtual ~IMotionStabilizer() {}\n\n    //! assumes that [0, size-1) is in or equals to [range.first, range.second)\n    virtual void stabilize(\n            int size, const std::vector<Mat> &motions, std::pair<int,int> range,\n            Mat *stabilizationMotions) = 0;\n};\n\nclass CV_EXPORTS MotionStabilizationPipeline : public IMotionStabilizer\n{\npublic:\n    void pushBack(Ptr<IMotionStabilizer> stabilizer) { stabilizers_.push_back(stabilizer); }\n    bool empty() const { return stabilizers_.empty(); }\n\n    virtual void stabilize(\n            int size, const std::vector<Mat> &motions, std::pair<int,int> range,\n            Mat *stabilizationMotions);\n\nprivate:\n    std::vector<Ptr<IMotionStabilizer> > stabilizers_;\n};\n\nclass CV_EXPORTS MotionFilterBase : public IMotionStabilizer\n{\npublic:\n    virtual ~MotionFilterBase() {}\n\n    virtual Mat stabilize(\n            int idx, const std::vector<Mat> &motions, std::pair<int,int> range) = 0;\n\n    virtual void stabilize(\n            int size, const std::vector<Mat> &motions, std::pair<int,int> range,\n            Mat *stabilizationMotions);\n};\n\nclass CV_EXPORTS GaussianMotionFilter : public MotionFilterBase\n{\npublic:\n    GaussianMotionFilter(int radius = 15, float stdev = -1.f);\n\n    void setParams(int radius, float stdev = -1.f);\n    int radius() const { return radius_; }\n    float stdev() const { return stdev_; }\n\n    virtual Mat stabilize(\n            int idx, const std::vector<Mat> &motions, std::pair<int,int> range);\n\nprivate:\n    int radius_;\n    float stdev_;\n    std::vector<float> weight_;\n};\n\ninline GaussianMotionFilter::GaussianMotionFilter(int _radius, float _stdev) { setParams(_radius, _stdev); }\n\nclass CV_EXPORTS LpMotionStabilizer : public IMotionStabilizer\n{\npublic:\n    LpMotionStabilizer(MotionModel model = MM_SIMILARITY);\n\n    void setMotionModel(MotionModel val) { model_ = val; }\n    MotionModel motionModel() const { return model_; }\n\n    void setFrameSize(Size val) { frameSize_ = val; }\n    Size frameSize() const { return frameSize_; }\n\n    void setTrimRatio(float val) { trimRatio_ = val; }\n    float trimRatio() const { return trimRatio_; }\n\n    void setWeight1(float val) { w1_ = val; }\n    float weight1() const { return w1_; }\n\n    void setWeight2(float val) { w2_ = val; }\n    float weight2() const { return w2_; }\n\n    void setWeight3(float val) { w3_ = val; }\n    float weight3() const { return w3_; }\n\n    void setWeight4(float val) { w4_ = val; }\n    float weight4() const { return w4_; }\n\n    virtual void stabilize(\n            int size, const std::vector<Mat> &motions, std::pair<int,int> range,\n            Mat *stabilizationMotions);\n\nprivate:\n    MotionModel model_;\n    Size frameSize_;\n    float trimRatio_;\n    float w1_, w2_, w3_, w4_;\n\n    std::vector<double> obj_, collb_, colub_;\n    std::vector<int> rows_, cols_;\n    std::vector<double> elems_, rowlb_, rowub_;\n\n    void set(int row, int col, double coef)\n    {\n        rows_.push_back(row);\n        cols_.push_back(col);\n        elems_.push_back(coef);\n    }\n};\n\nCV_EXPORTS Mat ensureInclusionConstraint(const Mat &M, Size size, float trimRatio);\n\nCV_EXPORTS float estimateOptimalTrimRatio(const Mat &M, Size size);\n\n//! @}\n\n} // namespace videostab\n} // namespace\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/optical_flow.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__\n#define __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__\n\n#include \"opencv2/core.hpp\"\n#include \"opencv2/opencv_modules.hpp\"\n\n#ifdef HAVE_OPENCV_CUDAOPTFLOW\n  #include \"opencv2/cudaoptflow.hpp\"\n#endif\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab\n//! @{\n\nclass CV_EXPORTS ISparseOptFlowEstimator\n{\npublic:\n    virtual ~ISparseOptFlowEstimator() {}\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,\n            OutputArray status, OutputArray errors) = 0;\n};\n\nclass CV_EXPORTS IDenseOptFlowEstimator\n{\npublic:\n    virtual ~IDenseOptFlowEstimator() {}\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,\n            OutputArray errors) = 0;\n};\n\nclass CV_EXPORTS PyrLkOptFlowEstimatorBase\n{\npublic:\n    PyrLkOptFlowEstimatorBase() { setWinSize(Size(21, 21)); setMaxLevel(3); }\n\n    virtual void setWinSize(Size val) { winSize_ = val; }\n    virtual Size winSize() const { return winSize_; }\n\n    virtual void setMaxLevel(int val) { maxLevel_ = val; }\n    virtual int maxLevel() const { return maxLevel_; }\n    virtual ~PyrLkOptFlowEstimatorBase() {}\n\nprotected:\n    Size winSize_;\n    int maxLevel_;\n};\n\nclass CV_EXPORTS SparsePyrLkOptFlowEstimator\n        : public PyrLkOptFlowEstimatorBase, public ISparseOptFlowEstimator\n{\npublic:\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,\n            OutputArray status, OutputArray errors);\n};\n\n#ifdef HAVE_OPENCV_CUDAOPTFLOW\n\nclass CV_EXPORTS SparsePyrLkOptFlowEstimatorGpu\n        : public PyrLkOptFlowEstimatorBase, public ISparseOptFlowEstimator\n{\npublic:\n    SparsePyrLkOptFlowEstimatorGpu();\n\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,\n            OutputArray status, OutputArray errors);\n\n    void run(const cuda::GpuMat &frame0, const cuda::GpuMat &frame1, const cuda::GpuMat &points0, cuda::GpuMat &points1,\n             cuda::GpuMat &status, cuda::GpuMat &errors);\n\n    void run(const cuda::GpuMat &frame0, const cuda::GpuMat &frame1, const cuda::GpuMat &points0, cuda::GpuMat &points1,\n             cuda::GpuMat &status);\n\nprivate:\n    Ptr<cuda::SparsePyrLKOpticalFlow> optFlowEstimator_;\n    cuda::GpuMat frame0_, frame1_, points0_, points1_, status_, errors_;\n};\n\nclass CV_EXPORTS DensePyrLkOptFlowEstimatorGpu\n        : public PyrLkOptFlowEstimatorBase, public IDenseOptFlowEstimator\n{\npublic:\n    DensePyrLkOptFlowEstimatorGpu();\n\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,\n            OutputArray errors);\n\nprivate:\n    Ptr<cuda::DensePyrLKOpticalFlow> optFlowEstimator_;\n    cuda::GpuMat frame0_, frame1_, flowX_, flowY_, errors_;\n};\n\n#endif\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/outlier_rejection.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_OUTLIER_REJECTION_HPP__\n#define __OPENCV_VIDEOSTAB_OUTLIER_REJECTION_HPP__\n\n#include <vector>\n#include \"opencv2/core.hpp\"\n#include \"opencv2/videostab/motion_core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab\n//! @{\n\nclass CV_EXPORTS IOutlierRejector\n{\npublic:\n    virtual ~IOutlierRejector() {}\n\n    virtual void process(\n            Size frameSize, InputArray points0, InputArray points1, OutputArray mask) = 0;\n};\n\nclass CV_EXPORTS NullOutlierRejector : public IOutlierRejector\n{\npublic:\n    virtual void process(\n            Size frameSize, InputArray points0, InputArray points1, OutputArray mask);\n};\n\nclass CV_EXPORTS TranslationBasedLocalOutlierRejector : public IOutlierRejector\n{\npublic:\n    TranslationBasedLocalOutlierRejector();\n\n    void setCellSize(Size val) { cellSize_ = val; }\n    Size cellSize() const { return cellSize_; }\n\n    void setRansacParams(RansacParams val) { ransacParams_ = val; }\n    RansacParams ransacParams() const { return ransacParams_; }\n\n    virtual void process(\n            Size frameSize, InputArray points0, InputArray points1, OutputArray mask);\n\nprivate:\n    Size cellSize_;\n    RansacParams ransacParams_;\n\n    typedef std::vector<int> Cell;\n    std::vector<Cell> grid_;\n};\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/ring_buffer.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_RING_BUFFER_HPP__\n#define __OPENCV_VIDEOSTAB_RING_BUFFER_HPP__\n\n#include <vector>\n#include \"opencv2/imgproc.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab\n//! @{\n\ntemplate <typename T> inline T& at(int idx, std::vector<T> &items)\n{\n    return items[cv::borderInterpolate(idx, static_cast<int>(items.size()), cv::BORDER_WRAP)];\n}\n\ntemplate <typename T> inline const T& at(int idx, const std::vector<T> &items)\n{\n    return items[cv::borderInterpolate(idx, static_cast<int>(items.size()), cv::BORDER_WRAP)];\n}\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/stabilizer.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_STABILIZER_HPP__\n#define __OPENCV_VIDEOSTAB_STABILIZER_HPP__\n\n#include <vector>\n#include <ctime>\n#include \"opencv2/core.hpp\"\n#include \"opencv2/imgproc.hpp\"\n#include \"opencv2/videostab/global_motion.hpp\"\n#include \"opencv2/videostab/motion_stabilizing.hpp\"\n#include \"opencv2/videostab/frame_source.hpp\"\n#include \"opencv2/videostab/log.hpp\"\n#include \"opencv2/videostab/inpainting.hpp\"\n#include \"opencv2/videostab/deblurring.hpp\"\n#include \"opencv2/videostab/wobble_suppression.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab\n//! @{\n\nclass CV_EXPORTS StabilizerBase\n{\npublic:\n    virtual ~StabilizerBase() {}\n\n    void setLog(Ptr<ILog> ilog) { log_ = ilog; }\n    Ptr<ILog> log() const { return log_; }\n\n    void setRadius(int val) { radius_ = val; }\n    int radius() const { return radius_; }\n\n    void setFrameSource(Ptr<IFrameSource> val) { frameSource_ = val; }\n    Ptr<IFrameSource> frameSource() const { return frameSource_; }\n\n    void setMotionEstimator(Ptr<ImageMotionEstimatorBase> val) { motionEstimator_ = val; }\n    Ptr<ImageMotionEstimatorBase> motionEstimator() const { return motionEstimator_; }\n\n    void setDeblurer(Ptr<DeblurerBase> val) { deblurer_ = val; }\n    Ptr<DeblurerBase> deblurrer() const { return deblurer_; }\n\n    void setTrimRatio(float val) { trimRatio_ = val; }\n    float trimRatio() const { return trimRatio_; }\n\n    void setCorrectionForInclusion(bool val) { doCorrectionForInclusion_ = val; }\n    bool doCorrectionForInclusion() const { return doCorrectionForInclusion_; }\n\n    void setBorderMode(int val) { borderMode_ = val; }\n    int borderMode() const { return borderMode_; }\n\n    void setInpainter(Ptr<InpainterBase> val) { inpainter_ = val; }\n    Ptr<InpainterBase> inpainter() const { return inpainter_; }\n\nprotected:\n    StabilizerBase();\n\n    void reset();\n    Mat nextStabilizedFrame();\n    bool doOneIteration();\n    virtual void setUp(const Mat &firstFrame);\n    virtual Mat estimateMotion() = 0;\n    virtual Mat estimateStabilizationMotion() = 0;\n    void stabilizeFrame();\n    virtual Mat postProcessFrame(const Mat &frame);\n    void logProcessingTime();\n\n    Ptr<ILog> log_;\n    Ptr<IFrameSource> frameSource_;\n    Ptr<ImageMotionEstimatorBase> motionEstimator_;\n    Ptr<DeblurerBase> deblurer_;\n    Ptr<InpainterBase> inpainter_;\n    int radius_;\n    float trimRatio_;\n    bool doCorrectionForInclusion_;\n    int borderMode_;\n\n    Size frameSize_;\n    Mat frameMask_;\n    int curPos_;\n    int curStabilizedPos_;\n    bool doDeblurring_;\n    Mat preProcessedFrame_;\n    bool doInpainting_;\n    Mat inpaintingMask_;\n    Mat finalFrame_;\n    std::vector<Mat> frames_;\n    std::vector<Mat> motions_; // motions_[i] is the motion from i-th to i+1-th frame\n    std::vector<float> blurrinessRates_;\n    std::vector<Mat> stabilizedFrames_;\n    std::vector<Mat> stabilizedMasks_;\n    std::vector<Mat> stabilizationMotions_;\n    clock_t processingStartTime_;\n};\n\nclass CV_EXPORTS OnePassStabilizer : public StabilizerBase, public IFrameSource\n{\npublic:\n    OnePassStabilizer();\n\n    void setMotionFilter(Ptr<MotionFilterBase> val) { motionFilter_ = val; }\n    Ptr<MotionFilterBase> motionFilter() const { return motionFilter_; }\n\n    virtual void reset();\n    virtual Mat nextFrame() { return nextStabilizedFrame(); }\n\nprotected:\n    virtual void setUp(const Mat &firstFrame);\n    virtual Mat estimateMotion();\n    virtual Mat estimateStabilizationMotion();\n    virtual Mat postProcessFrame(const Mat &frame);\n\n    Ptr<MotionFilterBase> motionFilter_;\n};\n\nclass CV_EXPORTS TwoPassStabilizer : public StabilizerBase, public IFrameSource\n{\npublic:\n    TwoPassStabilizer();\n\n    void setMotionStabilizer(Ptr<IMotionStabilizer> val) { motionStabilizer_ = val; }\n    Ptr<IMotionStabilizer> motionStabilizer() const { return motionStabilizer_; }\n\n    void setWobbleSuppressor(Ptr<WobbleSuppressorBase> val) { wobbleSuppressor_ = val; }\n    Ptr<WobbleSuppressorBase> wobbleSuppressor() const { return wobbleSuppressor_; }\n\n    void setEstimateTrimRatio(bool val) { mustEstTrimRatio_ = val; }\n    bool mustEstimateTrimaRatio() const { return mustEstTrimRatio_; }\n\n    virtual void reset();\n    virtual Mat nextFrame();\n\nprotected:\n    void runPrePassIfNecessary();\n\n    virtual void setUp(const Mat &firstFrame);\n    virtual Mat estimateMotion();\n    virtual Mat estimateStabilizationMotion();\n    virtual Mat postProcessFrame(const Mat &frame);\n\n    Ptr<IMotionStabilizer> motionStabilizer_;\n    Ptr<WobbleSuppressorBase> wobbleSuppressor_;\n    bool mustEstTrimRatio_;\n\n    int frameCount_;\n    bool isPrePassDone_;\n    bool doWobbleSuppression_;\n    std::vector<Mat> motions2_;\n    Mat suppressedFrame_;\n};\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab/wobble_suppression.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_WOBBLE_SUPPRESSION_HPP__\n#define __OPENCV_VIDEOSTAB_WOBBLE_SUPPRESSION_HPP__\n\n#include <vector>\n#include \"opencv2/core.hpp\"\n#include \"opencv2/core/cuda.hpp\"\n#include \"opencv2/videostab/global_motion.hpp\"\n#include \"opencv2/videostab/log.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n//! @addtogroup videostab\n//! @{\n\nclass CV_EXPORTS WobbleSuppressorBase\n{\npublic:\n    WobbleSuppressorBase();\n\n    virtual ~WobbleSuppressorBase() {}\n\n    void setMotionEstimator(Ptr<ImageMotionEstimatorBase> val) { motionEstimator_ = val; }\n    Ptr<ImageMotionEstimatorBase> motionEstimator() const { return motionEstimator_; }\n\n    virtual void suppress(int idx, const Mat &frame, Mat &result) = 0;\n\n\n    // data from stabilizer\n\n    virtual void setFrameCount(int val) { frameCount_ = val; }\n    virtual int frameCount() const { return frameCount_; }\n\n    virtual void setMotions(const std::vector<Mat> &val) { motions_ = &val; }\n    virtual const std::vector<Mat>& motions() const { return *motions_; }\n\n    virtual void setMotions2(const std::vector<Mat> &val) { motions2_ = &val; }\n    virtual const std::vector<Mat>& motions2() const { return *motions2_; }\n\n    virtual void setStabilizationMotions(const std::vector<Mat> &val) { stabilizationMotions_ = &val; }\n    virtual const std::vector<Mat>& stabilizationMotions() const { return *stabilizationMotions_; }\n\nprotected:\n    Ptr<ImageMotionEstimatorBase> motionEstimator_;\n    int frameCount_;\n    const std::vector<Mat> *motions_;\n    const std::vector<Mat> *motions2_;\n    const std::vector<Mat> *stabilizationMotions_;\n};\n\nclass CV_EXPORTS NullWobbleSuppressor : public WobbleSuppressorBase\n{\npublic:\n    virtual void suppress(int idx, const Mat &frame, Mat &result);\n};\n\nclass CV_EXPORTS MoreAccurateMotionWobbleSuppressorBase : public WobbleSuppressorBase\n{\npublic:\n    virtual void setPeriod(int val) { period_ = val; }\n    virtual int period() const { return period_; }\n\nprotected:\n    MoreAccurateMotionWobbleSuppressorBase() { setPeriod(30); }\n\n    int period_;\n};\n\nclass CV_EXPORTS MoreAccurateMotionWobbleSuppressor : public MoreAccurateMotionWobbleSuppressorBase\n{\npublic:\n    virtual void suppress(int idx, const Mat &frame, Mat &result);\n\nprivate:\n    Mat_<float> mapx_, mapy_;\n};\n\n#if defined(HAVE_OPENCV_CUDAWARPING)\nclass CV_EXPORTS MoreAccurateMotionWobbleSuppressorGpu : public MoreAccurateMotionWobbleSuppressorBase\n{\npublic:\n    void suppress(int idx, const cuda::GpuMat &frame, cuda::GpuMat &result);\n    virtual void suppress(int idx, const Mat &frame, Mat &result);\n\nprivate:\n    cuda::GpuMat frameDevice_, resultDevice_;\n    cuda::GpuMat mapx_, mapy_;\n};\n#endif\n\n//! @}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/videostab.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_HPP__\n#define __OPENCV_VIDEOSTAB_HPP__\n\n/**\n  @defgroup videostab Video Stabilization\n\nThe video stabilization module contains a set of functions and classes that can be used to solve the\nproblem of video stabilization. There are a few methods implemented, most of them are descibed in\nthe papers @cite OF06 and @cite G11 . However, there are some extensions and deviations from the orginal\npaper methods.\n\n### References\n\n 1. \"Full-Frame Video Stabilization with Motion Inpainting\"\n     Yasuyuki Matsushita, Eyal Ofek, Weina Ge, Xiaoou Tang, Senior Member, and Heung-Yeung Shum\n 2. \"Auto-Directed Video Stabilization with Robust L1 Optimal Camera Paths\"\n     Matthias Grundmann, Vivek Kwatra, Irfan Essa\n\n     @{\n         @defgroup videostab_motion Global Motion Estimation\n\nThe video stabilization module contains a set of functions and classes for global motion estimation\nbetween point clouds or between images. In the last case features are extracted and matched\ninternally. For the sake of convenience the motion estimation functions are wrapped into classes.\nBoth the functions and the classes are available.\n\n         @defgroup videostab_marching Fast Marching Method\n\nThe Fast Marching Method @cite Telea04 is used in of the video stabilization routines to do motion and\ncolor inpainting. The method is implemented is a flexible way and it's made public for other users.\n\n     @}\n\n*/\n\n#include \"opencv2/videostab/stabilizer.hpp\"\n#include \"opencv2/videostab/ring_buffer.hpp\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/include/opencv2/world.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\n//\n// Redistribution and use in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders may not be used to endorse or promote products\n//     derived from this software without specific prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\" and\n// any express or implied warranties, including, but not limited to, the implied\n// warranties of merchantability and fitness for a particular purpose are disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// indirect, incidental, special, exemplary, or consequential damages\n// (including, but not limited to, procurement of substitute goods or services;\n// loss of use, data, or profits; or business interruption) however caused\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_WORLD_HPP__\n#define __OPENCV_WORLD_HPP__\n\n#include \"opencv2/core.hpp\"\n\n#ifdef __cplusplus\nnamespace cv\n{\n\nCV_EXPORTS_W bool initAll();\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/OpenCV3.1/openCV3.1.props",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup />\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)lib\\3rdParty\\OpenCV3.1\\include\\opencv;$(SolutionDir)lib\\3rdParty\\OpenCV3.1\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(SolutionDir)lib\\3rdParty\\OpenCV3.1\\$(PlatformTarget)\\$(PlatformToolset)\\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>opencv_world310.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <PostBuildEvent>\n      <Command>xcopy /I /E /Y /D /C \"$(SolutionDir)lib\\3rdParty\\OpenCV3.1\\$(PlatformTarget)\\$(PlatformToolset)\\bin\\opencv_world310.dll\" \"$(OutDir)\"\nxcopy /I /E /Y /D /C \"$(SolutionDir)lib\\3rdParty\\OpenCV3.1\\bin\\opencv_ffmpeg310.dll\" \"$(OutDir)\"\nxcopy /I /E /Y /D /C \"$(SolutionDir)lib\\3rdParty\\OpenCV3.1\\bin\\opencv_ffmpeg310_64.dll\" \"$(OutDir)\"\nxcopy /I /E /Y /D /C \"$(SolutionDir)lib\\3rdParty\\OpenCV3.1\\classifiers\" \"$(OutDir)classifiers\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup />\n</Project>"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/LICENSE_1_0.txt",
    "content": "Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/algorithm.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2014.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n Revision history:\n    2 Dec 2014 mtc First version; power\n   \n*/\n\n/// \\file algorithm.hpp\n/// \\brief Misc Algorithms\n/// \\author Marshall Clow\n///\n\n#ifndef BOOST_ALGORITHM_HPP\n#define BOOST_ALGORITHM_HPP\n\n#include <boost/utility/enable_if.hpp> // for boost::disable_if\n#include <boost/type_traits/is_integral.hpp>\n\nnamespace boost { namespace algorithm {\n\ntemplate <typename T>\nT identity_operation ( std::multiplies<T> ) { return T(1); }\n\ntemplate <typename T>\nT identity_operation ( std::plus<T> ) { return T(0); }\n\n\n/// \\fn power ( T x, Integer n )\n/// \\return the value \"x\" raised to the power \"n\"\n/// \n/// \\param x     The value to be exponentiated\n/// \\param n     The exponent (must be >= 0)\n///\n//  \\remark Taken from Knuth, The Art of Computer Programming, Volume 2:\n//  Seminumerical Algorithms, Section 4.6.3\ntemplate <typename T, typename Integer>\ntypename boost::enable_if<boost::is_integral<Integer>, T>::type\npower (T x, Integer n) {\n    T y = 1; // Should be \"T y{1};\" \n    if (n == 0) return y;\n    while (true) {\n        if (n % 2 == 1) {\n            y = x * y;\n            if (n == 1)\n                return y;\n            }\n        n = n / 2;\n        x = x * x;\n        }\n    return y;\n    }\n\n/// \\fn power ( T x, Integer n, Operation op )\n/// \\return the value \"x\" raised to the power \"n\"\n/// using the operaton \"op\".\n/// \n/// \\param x     The value to be exponentiated\n/// \\param n     The exponent (must be >= 0)\n/// \\param op    The operation used\n///\n//  \\remark Taken from Knuth, The Art of Computer Programming, Volume 2:\n//  Seminumerical Algorithms, Section 4.6.3\ntemplate <typename T, typename Integer, typename Operation>\ntypename boost::enable_if<boost::is_integral<Integer>, T>::type\npower (T x, Integer n, Operation op) {\n    T y = identity_operation(op);\n    if (n == 0) return y;\n    while (true) {\n        if (n % 2 == 1) {\n            y = op(x, y);\n            if (n == 1)\n                return y;\n            }\n        n = n / 2;\n        x = op(x, x);\n        }\n    return y;\n    }\n\n}}\n\n#endif // BOOST_ALGORITHM_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/clamp.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2008-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n Revision history:\n   27 June 2009 mtc First version\n   23 Oct  2010 mtc Added predicate version\n   \n*/\n\n/// \\file clamp.hpp\n/// \\brief Clamp algorithm\n/// \\author Marshall Clow\n///\n/// Suggested by olafvdspek in https://svn.boost.org/trac/boost/ticket/3215\n\n#ifndef BOOST_ALGORITHM_CLAMP_HPP\n#define BOOST_ALGORITHM_CLAMP_HPP\n\n#include <functional>       //  For std::less\n#include <iterator>         //  For std::iterator_traits\n#include <cassert>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/mpl/identity.hpp>      // for identity\n#include <boost/utility/enable_if.hpp> // for boost::disable_if\n\nnamespace boost { namespace algorithm {\n\n/// \\fn clamp ( T const& val, \n///               typename boost::mpl::identity<T>::type const & lo, \n///               typename boost::mpl::identity<T>::type const & hi, Pred p )\n/// \\return the value \"val\" brought into the range [ lo, hi ]\n///     using the comparison predicate p.\n///     If p ( val, lo ) return lo.\n///     If p ( hi, val ) return hi.\n///     Otherwise, return the original value.\n/// \n/// \\param val   The value to be clamped\n/// \\param lo    The lower bound of the range to be clamped to\n/// \\param hi    The upper bound of the range to be clamped to\n/// \\param p     A predicate to use to compare the values.\n///                 p ( a, b ) returns a boolean.\n///\n  template<typename T, typename Pred> \n  T const & clamp ( T const& val, \n    typename boost::mpl::identity<T>::type const & lo, \n    typename boost::mpl::identity<T>::type const & hi, Pred p )\n  {\n//    assert ( !p ( hi, lo ));    // Can't assert p ( lo, hi ) b/c they might be equal\n    return p ( val, lo ) ? lo : p ( hi, val ) ? hi : val;\n  } \n\n\n/// \\fn clamp ( T const& val, \n///               typename boost::mpl::identity<T>::type const & lo, \n///               typename boost::mpl::identity<T>::type const & hi )\n/// \\return the value \"val\" brought into the range [ lo, hi ].\n///     If the value is less than lo, return lo.\n///     If the value is greater than \"hi\", return hi.\n///     Otherwise, return the original value.\n///\n/// \\param val   The value to be clamped\n/// \\param lo    The lower bound of the range to be clamped to\n/// \\param hi    The upper bound of the range to be clamped to\n///\n  template<typename T> \n  T const& clamp ( const T& val, \n    typename boost::mpl::identity<T>::type const & lo, \n    typename boost::mpl::identity<T>::type const & hi )\n  {\n    return (clamp) ( val, lo, hi, std::less<T>());\n  } \n\n/// \\fn clamp_range ( InputIterator first, InputIterator last, OutputIterator out, \n///       std::iterator_traits<InputIterator>::value_type const & lo, \n///       std::iterator_traits<InputIterator>::value_type const & hi )\n/// \\return clamp the sequence of values [first, last) into [ lo, hi ]\n/// \n/// \\param first The start of the range of values\n/// \\param last  One past the end of the range of input values\n/// \\param out   An output iterator to write the clamped values into\n/// \\param lo    The lower bound of the range to be clamped to\n/// \\param hi    The upper bound of the range to be clamped to\n///\n  template<typename InputIterator, typename OutputIterator> \n  OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out,\n    typename std::iterator_traits<InputIterator>::value_type const & lo, \n    typename std::iterator_traits<InputIterator>::value_type const & hi )\n  {\n  // this could also be written with bind and std::transform\n    while ( first != last )\n        *out++ = clamp ( *first++, lo, hi );\n    return out;\n  } \n\n/// \\fn clamp_range ( const Range &r, OutputIterator out, \n///       typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & lo,\n///       typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & hi )\n/// \\return clamp the sequence of values [first, last) into [ lo, hi ]\n/// \n/// \\param r     The range of values to be clamped\n/// \\param out   An output iterator to write the clamped values into\n/// \\param lo    The lower bound of the range to be clamped to\n/// \\param hi    The upper bound of the range to be clamped to\n///\n  template<typename Range, typename OutputIterator> \n  typename boost::disable_if_c<boost::is_same<Range, OutputIterator>::value, OutputIterator>::type\n  clamp_range ( const Range &r, OutputIterator out,\n    typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & lo, \n    typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & hi )\n  {\n    return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi );\n  } \n\n\n/// \\fn clamp_range ( InputIterator first, InputIterator last, OutputIterator out, \n///       std::iterator_traits<InputIterator>::value_type const & lo, \n///       std::iterator_traits<InputIterator>::value_type const & hi, Pred p )\n/// \\return clamp the sequence of values [first, last) into [ lo, hi ]\n///     using the comparison predicate p.\n/// \n/// \\param first The start of the range of values\n/// \\param last  One past the end of the range of input values\n/// \\param out   An output iterator to write the clamped values into\n/// \\param lo    The lower bound of the range to be clamped to\n/// \\param hi    The upper bound of the range to be clamped to\n/// \\param p     A predicate to use to compare the values.\n///                 p ( a, b ) returns a boolean.\n\n///\n  template<typename InputIterator, typename OutputIterator, typename Pred> \n  OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out,\n    typename std::iterator_traits<InputIterator>::value_type const & lo, \n    typename std::iterator_traits<InputIterator>::value_type const & hi, Pred p )\n  {\n  // this could also be written with bind and std::transform\n    while ( first != last )\n        *out++ = clamp ( *first++, lo, hi, p );\n    return out;\n  } \n\n/// \\fn clamp_range ( const Range &r, OutputIterator out, \n///       typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & lo,\n///       typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & hi,\n///       Pred p )\n/// \\return clamp the sequence of values [first, last) into [ lo, hi ]\n///     using the comparison predicate p.\n/// \n/// \\param r     The range of values to be clamped\n/// \\param out   An output iterator to write the clamped values into\n/// \\param lo    The lower bound of the range to be clamped to\n/// \\param hi    The upper bound of the range to be clamped to\n/// \\param p     A predicate to use to compare the values.\n///                 p ( a, b ) returns a boolean.\n//\n//  Disable this template if the first two parameters are the same type;\n//  In that case, the user will get the two iterator version.\n  template<typename Range, typename OutputIterator, typename Pred> \n  typename boost::disable_if_c<boost::is_same<Range, OutputIterator>::value, OutputIterator>::type\n  clamp_range ( const Range &r, OutputIterator out,\n    typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & lo, \n    typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type const & hi,\n    Pred p )\n  {\n    return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi, p );\n  } \n\n\n}}\n\n#endif // BOOST_ALGORITHM_CLAMP_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/all_of.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2008-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  all_of.hpp\n/// \\brief Test ranges to see if all elements match a value or predicate.\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_ALL_OF_HPP\n#define BOOST_ALGORITHM_ALL_OF_HPP\n\n#include <algorithm>    // for std::all_of, if available\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn all_of ( InputIterator first, InputIterator last, Predicate p )\n/// \\return true if all elements in [first, last) satisfy the predicate 'p'\n/// \\note returns true on an empty range\n/// \n/// \\param first The start of the input sequence\n/// \\param last  One past the end of the input sequence\n/// \\param p     A predicate for testing the elements of the sequence\n///\n/// \\note           This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available, \n///  otherwise we have our own implementation.\ntemplate<typename InputIterator, typename Predicate> \nbool all_of ( InputIterator first, InputIterator last, Predicate p )\n{\n    for ( ; first != last; ++first )\n        if ( !p(*first)) \n            return false;\n    return true; \n} \n\n/// \\fn all_of ( const Range &r, Predicate p )\n/// \\return true if all elements in the range satisfy the predicate 'p'\n/// \\note returns true on an empty range\n/// \n/// \\param r    The input range\n/// \\param p    A predicate for testing the elements of the range\n///\ntemplate<typename Range, typename Predicate> \nbool all_of ( const Range &r, Predicate p )\n{\n    return boost::algorithm::all_of ( boost::begin (r), boost::end (r), p );\n} \n\n/// \\fn all_of_equal ( InputIterator first, InputIterator last, const T &val )\n/// \\return true if all elements in [first, last) are equal to 'val'\n/// \\note returns true on an empty range\n/// \n/// \\param first The start of the input sequence\n/// \\param last  One past the end of the input sequence\n/// \\param val   A value to compare against\n///\ntemplate<typename InputIterator, typename T> \nbool all_of_equal ( InputIterator first, InputIterator last, const T &val )\n{\n    for ( ; first != last; ++first )\n    if ( val != *first ) \n        return false;\n    return true; \n} \n\n/// \\fn all_of_equal ( const Range &r, const T &val )\n/// \\return true if all elements in the range are equal to 'val'\n/// \\note returns true on an empty range\n/// \n/// \\param r    The input range\n/// \\param val  A value to compare against\n///\ntemplate<typename Range, typename T> \nbool all_of_equal ( const Range &r, const T &val ) \n{\n    return boost::algorithm::all_of_equal ( boost::begin (r), boost::end (r), val );\n} \n\n}} // namespace boost and algorithm\n\n#endif // BOOST_ALGORITHM_ALL_OF_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/any_of.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2008-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n    For more information, see http://www.boost.org\n*/\n\n/// \\file\n/// \\brief Test ranges to see if any elements match a value or predicate.\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_ANY_OF_HPP\n#define BOOST_ALGORITHM_ANY_OF_HPP\n\n#include <algorithm>    // for std::any_of, if available\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn any_of ( InputIterator first, InputIterator last, Predicate p )\n/// \\return true if any of the elements in [first, last) satisfy the predicate\n/// \\note returns false on an empty range\n/// \n/// \\param first The start of the input sequence\n/// \\param last  One past the end of the input sequence\n/// \\param p     A predicate for testing the elements of the sequence\n///\ntemplate<typename InputIterator, typename Predicate> \nbool any_of ( InputIterator first, InputIterator last, Predicate p ) \n{\n    for ( ; first != last; ++first )\n        if ( p(*first)) \n            return true;\n    return false; \n} \n\n/// \\fn any_of ( const Range &r, Predicate p )\n/// \\return true if any elements in the range satisfy the predicate 'p'\n/// \\note returns false on an empty range\n/// \n/// \\param r    The input range\n/// \\param p    A predicate for testing the elements of the range\n///\ntemplate<typename Range, typename Predicate> \nbool any_of ( const Range &r, Predicate p )\n{\n    return boost::algorithm::any_of (boost::begin (r), boost::end (r), p);\n} \n\n/// \\fn any_of_equal ( InputIterator first, InputIterator last, const V &val )\n/// \\return true if any of the elements in [first, last) are equal to 'val'\n/// \\note returns false on an empty range\n/// \n/// \\param first The start of the input sequence\n/// \\param last  One past the end of the input sequence\n/// \\param val   A value to compare against\n///\ntemplate<typename InputIterator, typename V> \nbool any_of_equal ( InputIterator first, InputIterator last, const V &val ) \n{\n    for ( ; first != last; ++first )\n        if ( val == *first )\n            return true;\n    return false; \n} \n\n/// \\fn any_of_equal ( const Range &r, const V &val )\n/// \\return true if any of the elements in the range are equal to 'val'\n/// \\note returns false on an empty range\n/// \n/// \\param r     The input range\n/// \\param val   A value to compare against\n///\ntemplate<typename Range, typename V> \nbool any_of_equal ( const Range &r, const V &val ) \n{\n    return boost::algorithm::any_of_equal (boost::begin (r), boost::end (r), val);\n}\n\n}} // namespace boost and algorithm\n\n#endif // BOOST_ALGORITHM_ANY_OF_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/copy_if.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2008-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  copy_if.hpp\n/// \\brief Copy a subset of a sequence to a new sequence\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_COPY_IF_HPP\n#define BOOST_ALGORITHM_COPY_IF_HPP\n\n#include <algorithm>    // for std::copy_if, if available\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )\n/// \\brief Copies all the elements from the input range that satisfy the\n/// predicate to the output range.\n/// \\return The updated output iterator\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param result   An output iterator to write the results into\n/// \\param p        A predicate for testing the elements of the range\n/// \\note           This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available, \n///  otherwise we have our own implementation.\ntemplate<typename InputIterator, typename OutputIterator, typename Predicate> \nOutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )\n{\n    for ( ; first != last; ++first )\n        if (p(*first))\n            *result++ = *first;\n    return result;\n}\n\n/// \\fn copy_if ( const Range &r, OutputIterator result, Predicate p )\n/// \\brief Copies all the elements from the input range that satisfy the\n/// predicate to the output range.\n/// \\return The updated output iterator\n/// \n/// \\param r        The input range\n/// \\param result   An output iterator to write the results into\n/// \\param p        A predicate for testing the elements of the range\n///\ntemplate<typename Range, typename OutputIterator, typename Predicate>\nOutputIterator copy_if ( const Range &r, OutputIterator result, Predicate p )\n{\n    return boost::algorithm::copy_if (boost::begin (r), boost::end(r), result, p);\n}\n\n\n/// \\fn copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )\n/// \\brief Copies all the elements at the start of the input range that\n///     satisfy the predicate to the output range.\n/// \\return The updated input and output iterators\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param result   An output iterator to write the results into\n/// \\param p        A predicate for testing the elements of the range\n///\ntemplate<typename InputIterator, typename OutputIterator, typename Predicate> \nstd::pair<InputIterator, OutputIterator>\ncopy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )\n{\n    for ( ; first != last && p(*first); ++first )\n        *result++ = *first;\n    return std::make_pair(first, result);\n}\n\n/// \\fn copy_while ( const Range &r, OutputIterator result, Predicate p )\n/// \\brief Copies all the elements at the start of the input range that\n///     satisfy the predicate to the output range.\n/// \\return The updated input and output iterators\n/// \n/// \\param r        The input range\n/// \\param result   An output iterator to write the results into\n/// \\param p        A predicate for testing the elements of the range\n///\ntemplate<typename Range, typename OutputIterator, typename Predicate>\nstd::pair<typename boost::range_iterator<const Range>::type, OutputIterator> \ncopy_while ( const Range &r, OutputIterator result, Predicate p )\n{\n    return boost::algorithm::copy_while (boost::begin (r), boost::end(r), result, p);\n}\n\n\n/// \\fn copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )\n/// \\brief Copies all the elements at the start of the input range that do not\n///     satisfy the predicate to the output range.\n/// \\return The updated output iterator\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param result   An output iterator to write the results into\n/// \\param p        A predicate for testing the elements of the range\n///\ntemplate<typename InputIterator, typename OutputIterator, typename Predicate> \nstd::pair<InputIterator, OutputIterator>\ncopy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )\n{\n    for ( ; first != last && !p(*first); ++first )\n        *result++ = *first;\n    return std::make_pair(first, result);\n}\n\n/// \\fn copy_until ( const Range &r, OutputIterator result, Predicate p )\n/// \\brief Copies all the elements at the start of the input range that do not\n///     satisfy the predicate to the output range.\n/// \\return The updated output iterator\n/// \n/// \\param r        The input range\n/// \\param result   An output iterator to write the results into\n/// \\param p        A predicate for testing the elements of the range\n///\ntemplate<typename Range, typename OutputIterator, typename Predicate>\nstd::pair<typename boost::range_iterator<const Range>::type, OutputIterator> \ncopy_until ( const Range &r, OutputIterator result, Predicate p )\n{\n    return boost::algorithm::copy_until (boost::begin (r), boost::end(r), result, p);\n}\n\n}} // namespace boost and algorithm\n\n#endif  // BOOST_ALGORITHM_COPY_IF_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/copy_n.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2011-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  copy_n.hpp\n/// \\brief Copy n items from one sequence to another\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_COPY_N_HPP\n#define BOOST_ALGORITHM_COPY_N_HPP\n\n#include <algorithm>    // for std::copy_n, if available\n\nnamespace boost { namespace algorithm {\n\n/// \\fn copy_n ( InputIterator first, Size n, OutputIterator result )\n/// \\brief Copies exactly n (n > 0) elements from the range starting at first to\n///     the range starting at result.\n/// \\return         The updated output iterator\n/// \n/// \\param first    The start of the input sequence\n/// \\param n        The number of elements to copy\n/// \\param result   An output iterator to write the results into\n/// \\note           This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available, \n///     otherwise we have our own implementation.\ntemplate <typename InputIterator, typename Size, typename OutputIterator>\nOutputIterator copy_n ( InputIterator first, Size n, OutputIterator result )\n{\n    for ( ; n > 0; --n, ++first, ++result )\n        *result = *first;\n    return result;\n}\n}} // namespace boost and algorithm\n\n#endif  // BOOST_ALGORITHM_COPY_IF_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/find_if_not.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2011-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  find_if_not.hpp\n/// \\brief Find the first element in a sequence that does not satisfy a predicate.\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_FIND_IF_NOT_HPP\n#define BOOST_ALGORITHM_FIND_IF_NOT_HPP\n\n#include <algorithm>    // for std::find_if_not, if it exists\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn find_if_not(InputIterator first, InputIterator last, Predicate p)\n/// \\brief Finds the first element in the sequence that does not satisfy the predicate.\n/// \\return         The iterator pointing to the desired element.\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param p        A predicate for testing the elements of the range\n/// \\note           This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available, \n///  otherwise we have our own implementation.\ntemplate<typename InputIterator, typename Predicate> \nInputIterator find_if_not ( InputIterator first, InputIterator last, Predicate p )\n{\n    for ( ; first != last; ++first )\n        if ( !p(*first))\n            break;\n    return first;\n}\n\n/// \\fn find_if_not ( const Range &r, Predicate p )\n/// \\brief Finds the first element in the sequence that does not satisfy the predicate.\n/// \\return         The iterator pointing to the desired element.\n/// \n/// \\param r        The input range\n/// \\param p        A predicate for testing the elements of the range\n///\ntemplate<typename Range, typename Predicate>\ntypename boost::range_iterator<const Range>::type find_if_not ( const Range &r, Predicate p )\n{\n    return boost::algorithm::find_if_not (boost::begin (r), boost::end(r), p);\n}\n\n}}\n#endif  // BOOST_ALGORITHM_FIND_IF_NOT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/iota.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2008-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  iota.hpp\n/// \\brief Generate an increasing series\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_IOTA_HPP\n#define BOOST_ALGORITHM_IOTA_HPP\n\n#include <numeric>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn iota ( ForwardIterator first, ForwardIterator last, T value )\n/// \\brief Generates an increasing sequence of values, and stores them in [first, last)\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param value    The initial value of the sequence to be generated\n/// \\note           This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available, \n///  otherwise we have our own implementation.\ntemplate <typename ForwardIterator, typename T>\nvoid iota ( ForwardIterator first, ForwardIterator last, T value )\n{\n    for ( ; first != last; ++first, ++value )\n        *first = value;\n}\n\n/// \\fn iota ( Range &r, T value )\n/// \\brief Generates an increasing sequence of values, and stores them in the input Range.\n/// \n/// \\param r        The input range\n/// \\param value    The initial value of the sequence to be generated\n///\ntemplate <typename Range, typename T>\nvoid iota ( Range &r, T value )\n{\n    boost::algorithm::iota (boost::begin(r), boost::end(r), value);\n}\n\n\n/// \\fn iota_n ( OutputIterator out, T value, std::size_t n )\n/// \\brief Generates an increasing sequence of values, and stores them in the input Range.\n/// \n/// \\param out      An output iterator to write the results into\n/// \\param value    The initial value of the sequence to be generated\n/// \\param n        The number of items to write\n///\ntemplate <typename OutputIterator, typename T>\nOutputIterator iota_n ( OutputIterator out, T value, std::size_t n )\n{\n    for ( ; n > 0; --n, ++value )\n        *out++ = value;\n\n    return out;\n}\n\n}}\n\n#endif  // BOOST_ALGORITHM_IOTA_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/is_partitioned.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2011-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  is_partitioned.hpp\n/// \\brief Tell if a sequence is partitioned\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_IS_PARTITIONED_HPP\n#define BOOST_ALGORITHM_IS_PARTITIONED_HPP\n\n#include <algorithm>    // for std::is_partitioned, if available\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p )\n/// \\brief Tests to see if a sequence is partitioned according to a predicate\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param p        The predicate to test the values with\n/// \\note           This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available, \n///  otherwise we have our own implementation.\ntemplate <typename InputIterator, typename UnaryPredicate>\nbool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p )\n{\n//  Run through the part that satisfy the predicate\n    for ( ; first != last; ++first )\n        if ( !p (*first))\n            break;\n//  Now the part that does not satisfy the predicate\n    for ( ; first != last; ++first )\n        if ( p (*first))\n            return false;\n    return true;\n}\n\n/// \\fn is_partitioned ( const Range &r, UnaryPredicate p )\n/// \\brief Generates an increasing sequence of values, and stores them in the input Range.\n/// \n/// \\param r        The input range\n/// \\param p        The predicate to test the values with\n///\ntemplate <typename Range, typename UnaryPredicate>\nbool is_partitioned ( const Range &r, UnaryPredicate p )\n{\n    return boost::algorithm::is_partitioned (boost::begin(r), boost::end(r), p);\n}\n\n\n}}\n\n#endif  // BOOST_ALGORITHM_IS_PARTITIONED_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/is_permutation.hpp",
    "content": "/*\n   Copyright (c) Marshall Clow 2011-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  is_permutation.hpp\n/// \\brief Is a sequence a permutation of another sequence\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_IS_PERMUTATION11_HPP\n#define BOOST_ALGORITHM_IS_PERMUTATION11_HPP\n\n#include <algorithm>    // for std::less, tie, mismatch and is_permutation (if available)\n#include <utility>      // for std::make_pair\n#include <functional>   // for std::equal_to\n#include <iterator>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\cond DOXYGEN_HIDE\nnamespace detail {\n    template <typename Predicate, typename Iterator>\n    struct value_predicate {\n        value_predicate ( Predicate p, Iterator it ) : p_ ( p ), it_ ( it ) {}\n\n        template <typename T1>\n        bool operator () ( const T1 &t1 ) const { return p_ ( *it_, t1 ); }\n    private:\n        Predicate p_;\n        Iterator it_;\n        };\n        \n//  Preconditions:\n//  1. The sequences are the same length\n//  2. Any common elements on the front have been removed (not necessary for correctness, just for performance)\n    template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >\n    bool is_permutation_inner ( ForwardIterator1 first1, ForwardIterator1 last1,\n                                ForwardIterator2 first2, ForwardIterator2 last2,\n                                BinaryPredicate p ) {\n        //  for each unique value in the sequence [first1,last1), count how many times\n        //  it occurs, and make sure it occurs the same number of times in [first2, last2)\n            for ( ForwardIterator1 iter = first1; iter != last1; ++iter ) {\n                value_predicate<BinaryPredicate, ForwardIterator1> pred ( p, iter );\n\n            /*  For each value we haven't seen yet... */\n                if ( std::find_if ( first1, iter, pred ) == iter ) {\n                    std::size_t dest_count = std::count_if ( first2, last2, pred );\n                    if ( dest_count == 0 || dest_count != (std::size_t) std::count_if ( iter, last1, pred ))\n                        return false;\n                    }\n                }\n\n        return true;\n        }                      \n\n    template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>\n    bool is_permutation_tag ( ForwardIterator1 first1, ForwardIterator1 last1, \n                          ForwardIterator2 first2, ForwardIterator2 last2, \n                          BinaryPredicate p,\n                          std::forward_iterator_tag, std::forward_iterator_tag ) {\n\n    //  Skip the common prefix (if any)\n        while ( first1 != last1 && first2 != last2 && p ( *first1, *first2 )) {\n            ++first1;\n            ++first2;\n            }\n        if ( first1 != last1 && first2 != last2 )\n            return boost::algorithm::detail::is_permutation_inner ( first1, last1, first2, last2,\n                std::equal_to<typename std::iterator_traits<ForwardIterator1>::value_type> ());\n        return first1 == last1 && first2 == last2;\n        }\n\n    template <class RandomAccessIterator1, class RandomAccessIterator2, class BinaryPredicate>\n    bool is_permutation_tag ( RandomAccessIterator1 first1, RandomAccessIterator1 last1, \n                          RandomAccessIterator2 first2, RandomAccessIterator2 last2, \n                          BinaryPredicate p,\n                          std::random_access_iterator_tag, std::random_access_iterator_tag ) {\n    //  Cheap check\n        if ( std::distance ( first1, last1 ) != std::distance ( first2, last2 ))\n            return false;\n    //  Skip the common prefix (if any)\n        while ( first1 != last1 && first2 != last2 && p ( *first1, *first2 )) {\n            ++first1;\n            ++first2;\n            }\n\n        if ( first1 != last1 && first2 != last2 )\n            return is_permutation_inner (first1, last1, first2, last2, p);\n        return first1 == last1 && first2 == last2;\n        }\n\n}\n/// \\endcond\n\n/// \\fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 first2, BinaryPredicate p )\n/// \\brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2\n///\n/// \\param first1   The start of the input sequence\n/// \\param last1    One past the end of the input sequence\n/// \\param first2   The start of the second sequence\n/// \\param p        The predicate to compare elements with\n///\n/// \\note           This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available,\n///     otherwise we have our own implementation.\ntemplate< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >\nbool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,\n                      ForwardIterator2 first2, BinaryPredicate p )\n{\n//  Skip the common prefix (if any)\n    std::pair<ForwardIterator1, ForwardIterator2> eq = std::mismatch (first1, last1, first2, p);\n    first1 = eq.first;\n    first2 = eq.second;\n    if ( first1 != last1 ) {\n    //  Create last2\n        ForwardIterator2 last2 = first2;\n        std::advance ( last2, std::distance (first1, last1));\n        return boost::algorithm::detail::is_permutation_inner ( first1, last1, first2, last2, p );\n        }\n\n    return true;\n}\n\n/// \\fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 first2 )\n/// \\brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2\n///\n/// \\param first1   The start of the input sequence\n/// \\param last2    One past the end of the input sequence\n/// \\param first2   The start of the second sequence\n/// \\note           This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available,\n///     otherwise we have our own implementation.\ntemplate< class ForwardIterator1, class ForwardIterator2 >\nbool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2 )\n{\n//  How should I deal with the idea that ForwardIterator1::value_type\n//  and ForwardIterator2::value_type could be different? Define my own comparison predicate?\n//  Skip the common prefix (if any)\n    std::pair<ForwardIterator1, ForwardIterator2> eq = std::mismatch (first1, last1, first2 );\n    first1 = eq.first;\n    first2 = eq.second;\n    if ( first1 != last1 ) {\n    //  Create last2\n        ForwardIterator2 last2 = first2;\n        std::advance ( last2, std::distance (first1, last1));\n        return boost::algorithm::detail::is_permutation_inner ( first1, last1, first2, last2,\n            std::equal_to<typename std::iterator_traits<ForwardIterator1>::value_type> ());\n        }\n    return true;\n}\n\n\n/// \\fn is_permutation ( const Range &r, ForwardIterator first2 )\n/// \\brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2\n///\n/// \\param r        The input range\n/// \\param first2   The start of the second sequence\ntemplate <typename Range, typename ForwardIterator>\nbool is_permutation ( const Range &r, ForwardIterator first2 )\n{\n    return boost::algorithm::is_permutation (boost::begin (r), boost::end (r), first2 );\n}\n\n/// \\fn is_permutation ( const Range &r, ForwardIterator first2, BinaryPredicate pred )\n/// \\brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2\n///\n/// \\param r        The input range\n/// \\param first2   The start of the second sequence\n/// \\param pred     The predicate to compare elements with\n///\n//  Disable this template when the first two parameters are the same type\n//  That way the non-range version will be chosen.\ntemplate <typename Range, typename ForwardIterator, typename BinaryPredicate>\ntypename boost::disable_if_c<boost::is_same<Range, ForwardIterator>::value, bool>::type\nis_permutation ( const Range &r, ForwardIterator first2, BinaryPredicate pred )\n{\n    return boost::algorithm::is_permutation (boost::begin (r), boost::end (r), first2, pred );\n}\n\n}}\n\n#endif  // BOOST_ALGORITHM_IS_PERMUTATION11_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/is_sorted.hpp",
    "content": "//  Copyright (c) 2010 Nuovation System Designs, LLC\n//    Grant Erickson <gerickson@nuovations.com>\n//\n//  Reworked somewhat by Marshall Clow; August 2010\n//  \n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/ for latest version.\n//\n\n#ifndef BOOST_ALGORITHM_ORDERED_HPP\n#define BOOST_ALGORITHM_ORDERED_HPP\n\n#include <algorithm>\n#include <functional>\n#include <iterator>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/mpl/identity.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn is_sorted_until ( ForwardIterator first, ForwardIterator last, Pred p )\n/// \\return the point in the sequence [first, last) where the elements are unordered\n///     (according to the comparison predicate 'p').\n/// \n/// \\param first The start of the sequence to be tested.\n/// \\param last  One past the end of the sequence\n/// \\param p     A binary predicate that returns true if two elements are ordered.\n///\n    template <typename ForwardIterator, typename Pred>\n    ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last, Pred p )\n    {\n        if ( first == last ) return last;  // the empty sequence is ordered\n        ForwardIterator next = first;\n        while ( ++next != last )\n        {\n            if ( p ( *next, *first ))\n                return next;\n            first = next;\n        }\n        return last;    \n    }\n\n/// \\fn is_sorted_until ( ForwardIterator first, ForwardIterator last )\n/// \\return the point in the sequence [first, last) where the elements are unordered\n/// \n/// \\param first The start of the sequence to be tested.\n/// \\param last  One past the end of the sequence\n///\n    template <typename ForwardIterator>\n    ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last )\n    {\n        typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;\n        return boost::algorithm::is_sorted_until ( first, last, std::less<value_type>());\n    }\n\n\n/// \\fn is_sorted ( ForwardIterator first, ForwardIterator last, Pred p )\n/// \\return whether or not the entire sequence is sorted\n/// \n/// \\param first The start of the sequence to be tested.\n/// \\param last  One past the end of the sequence\n/// \\param p     A binary predicate that returns true if two elements are ordered.\n///\n    template <typename ForwardIterator, typename Pred>\n    bool is_sorted ( ForwardIterator first, ForwardIterator last, Pred p )\n    {\n        return boost::algorithm::is_sorted_until (first, last, p) == last;\n    }\n\n/// \\fn is_sorted ( ForwardIterator first, ForwardIterator last )\n/// \\return whether or not the entire sequence is sorted\n/// \n/// \\param first The start of the sequence to be tested.\n/// \\param last  One past the end of the sequence\n///\n    template <typename ForwardIterator>\n    bool is_sorted ( ForwardIterator first, ForwardIterator last )\n    {\n        return boost::algorithm::is_sorted_until (first, last) == last;\n    }\n\n///\n/// -- Range based versions of the C++11 functions\n///\n\n/// \\fn is_sorted_until ( const R &range, Pred p )\n/// \\return the point in the range R where the elements are unordered\n///     (according to the comparison predicate 'p').\n/// \n/// \\param range The range to be tested.\n/// \\param p     A binary predicate that returns true if two elements are ordered.\n///\n    template <typename R, typename Pred>\n    typename boost::lazy_disable_if_c<\n        boost::is_same<R, Pred>::value, \n        typename boost::range_iterator<const R> \n    >::type is_sorted_until ( const R &range, Pred p )\n    {\n        return boost::algorithm::is_sorted_until ( boost::begin ( range ), boost::end ( range ), p );\n    }\n\n\n/// \\fn is_sorted_until ( const R &range )\n/// \\return the point in the range R where the elements are unordered\n/// \n/// \\param range The range to be tested.\n///\n    template <typename R>\n    typename boost::range_iterator<const R>::type is_sorted_until ( const R &range )\n    {\n        return boost::algorithm::is_sorted_until ( boost::begin ( range ), boost::end ( range ));\n    }\n\n/// \\fn is_sorted ( const R &range, Pred p )\n/// \\return whether or not the entire range R is sorted\n///     (according to the comparison predicate 'p').\n/// \n/// \\param range The range to be tested.\n/// \\param p     A binary predicate that returns true if two elements are ordered.\n///\n    template <typename R, typename Pred>\n    typename boost::lazy_disable_if_c< boost::is_same<R, Pred>::value, boost::mpl::identity<bool> >::type\n    is_sorted ( const R &range, Pred p )\n    {\n        return boost::algorithm::is_sorted ( boost::begin ( range ), boost::end ( range ), p );\n    }\n\n\n/// \\fn is_sorted ( const R &range )\n/// \\return whether or not the entire range R is sorted\n/// \n/// \\param range The range to be tested.\n///\n    template <typename R>\n    bool is_sorted ( const R &range )\n    {\n        return boost::algorithm::is_sorted ( boost::begin ( range ), boost::end ( range ));\n    }\n\n\n///\n/// -- Range based versions of the C++11 functions\n///\n\n/// \\fn is_increasing ( ForwardIterator first, ForwardIterator last )\n/// \\return true if the entire sequence is increasing; i.e, each item is greater than or  \n///     equal to the previous one.\n/// \n/// \\param first The start of the sequence to be tested.\n/// \\param last  One past the end of the sequence\n///\n/// \\note This function will return true for sequences that contain items that compare\n///     equal. If that is not what you intended, you should use is_strictly_increasing instead.\n    template <typename ForwardIterator>\n    bool is_increasing ( ForwardIterator first, ForwardIterator last )\n    {\n        typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;\n        return boost::algorithm::is_sorted (first, last, std::less<value_type>());\n    }\n\n\n/// \\fn is_increasing ( const R &range )\n/// \\return true if the entire sequence is increasing; i.e, each item is greater than or  \n///     equal to the previous one.\n/// \n/// \\param range The range to be tested.\n///\n/// \\note This function will return true for sequences that contain items that compare\n///     equal. If that is not what you intended, you should use is_strictly_increasing instead.\n    template <typename R>\n    bool is_increasing ( const R &range )\n    {\n        return is_increasing ( boost::begin ( range ), boost::end ( range ));\n    }\n\n\n\n/// \\fn is_decreasing ( ForwardIterator first, ForwardIterator last )\n/// \\return true if the entire sequence is decreasing; i.e, each item is less than \n///     or equal to the previous one.\n/// \n/// \\param first The start of the sequence to be tested.\n/// \\param last  One past the end of the sequence\n///\n/// \\note This function will return true for sequences that contain items that compare\n///     equal. If that is not what you intended, you should use is_strictly_decreasing instead.\n    template <typename ForwardIterator>\n    bool is_decreasing ( ForwardIterator first, ForwardIterator last )\n    {\n        typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;\n        return boost::algorithm::is_sorted (first, last, std::greater<value_type>());\n    }\n\n/// \\fn is_decreasing ( const R &range )\n/// \\return true if the entire sequence is decreasing; i.e, each item is less than \n///     or equal to the previous one.\n/// \n/// \\param range The range to be tested.\n///\n/// \\note This function will return true for sequences that contain items that compare\n///     equal. If that is not what you intended, you should use is_strictly_decreasing instead.\n    template <typename R>\n    bool is_decreasing ( const R &range )\n    {\n        return is_decreasing ( boost::begin ( range ), boost::end ( range ));\n    }\n\n\n\n/// \\fn is_strictly_increasing ( ForwardIterator first, ForwardIterator last )\n/// \\return true if the entire sequence is strictly increasing; i.e, each item is greater\n///     than the previous one\n/// \n/// \\param first The start of the sequence to be tested.\n/// \\param last  One past the end of the sequence\n///\n/// \\note This function will return false for sequences that contain items that compare\n///     equal. If that is not what you intended, you should use is_increasing instead.\n    template <typename ForwardIterator>\n    bool is_strictly_increasing ( ForwardIterator first, ForwardIterator last )\n    {\n        typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;\n        return boost::algorithm::is_sorted (first, last, std::less_equal<value_type>());\n    }\n\n/// \\fn is_strictly_increasing ( const R &range )\n/// \\return true if the entire sequence is strictly increasing; i.e, each item is greater\n///     than the previous one\n/// \n/// \\param range The range to be tested.\n///\n/// \\note This function will return false for sequences that contain items that compare\n///     equal. If that is not what you intended, you should use is_increasing instead.\n    template <typename R>\n    bool is_strictly_increasing ( const R &range )\n    {\n        return is_strictly_increasing ( boost::begin ( range ), boost::end ( range ));\n    }\n\n\n/// \\fn is_strictly_decreasing ( ForwardIterator first, ForwardIterator last )\n/// \\return true if the entire sequence is strictly decreasing; i.e, each item is less than\n///     the previous one\n/// \n/// \\param first The start of the sequence to be tested.\n/// \\param last  One past the end of the sequence\n///\n/// \\note This function will return false for sequences that contain items that compare\n///     equal. If that is not what you intended, you should use is_decreasing instead.\n    template <typename ForwardIterator>\n    bool is_strictly_decreasing ( ForwardIterator first, ForwardIterator last )\n    {\n        typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;\n        return boost::algorithm::is_sorted (first, last, std::greater_equal<value_type>());\n    }\n\n/// \\fn is_strictly_decreasing ( const R &range )\n/// \\return true if the entire sequence is strictly decreasing; i.e, each item is less than\n///     the previous one\n/// \n/// \\param range The range to be tested.\n///\n/// \\note This function will return false for sequences that contain items that compare\n///     equal. If that is not what you intended, you should use is_decreasing instead.\n    template <typename R>\n    bool is_strictly_decreasing ( const R &range )\n    {\n        return is_strictly_decreasing ( boost::begin ( range ), boost::end ( range ));\n    }\n\n}} // namespace boost\n\n#endif  // BOOST_ALGORITHM_ORDERED_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/none_of.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2008-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  none_of.hpp\n/// \\brief Test ranges to see if no elements match a value or predicate.\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_NONE_OF_HPP\n#define BOOST_ALGORITHM_NONE_OF_HPP\n\n#include <algorithm>    // for std::none_of, if available\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn none_of ( InputIterator first, InputIterator last, Predicate p )\n/// \\return true if none of the elements in [first, last) satisfy the predicate 'p'\n/// \\note returns true on an empty range\n/// \n/// \\param first The start of the input sequence\n/// \\param last  One past the end of the input sequence\n/// \\param p     A predicate for testing the elements of the sequence\n///\ntemplate<typename InputIterator, typename Predicate> \nbool none_of ( InputIterator first, InputIterator last, Predicate p )\n{\nfor ( ; first != last; ++first )\n    if ( p(*first)) \n        return false;\n    return true;\n} \n\n/// \\fn none_of ( const Range &r, Predicate p )\n/// \\return true if none of the elements in the range satisfy the predicate 'p'\n/// \\note returns true on an empty range\n/// \n/// \\param r     The input range\n/// \\param p     A predicate for testing the elements of the range\n///\ntemplate<typename Range, typename Predicate> \nbool none_of ( const Range &r, Predicate p )\n{\n    return boost::algorithm::none_of (boost::begin (r), boost::end (r), p );\n} \n\n/// \\fn none_of_equal ( InputIterator first, InputIterator last, const V &val )\n/// \\return true if none of the elements in [first, last) are equal to 'val'\n/// \\note returns true on an empty range\n/// \n/// \\param first The start of the input sequence\n/// \\param last  One past the end of the input sequence\n/// \\param val   A value to compare against\n///\ntemplate<typename InputIterator, typename V> \nbool none_of_equal ( InputIterator first, InputIterator last, const V &val ) \n{\n    for ( ; first != last; ++first )\n        if ( val == *first )\n            return false;\n    return true; \n} \n\n/// \\fn none_of_equal ( const Range &r, const V &val )\n/// \\return true if none of the elements in the range are equal to 'val'\n/// \\note returns true on an empty range\n/// \n/// \\param r     The input range\n/// \\param val   A value to compare against\n///\ntemplate<typename Range, typename V> \nbool none_of_equal ( const Range &r, const V & val ) \n{\n    return boost::algorithm::none_of_equal (boost::begin (r), boost::end (r), val);\n} \n\n}} // namespace boost and algorithm\n\n#endif // BOOST_ALGORITHM_NONE_OF_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/one_of.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2008-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file one_of.hpp\n/// \\brief Test ranges to see if only one element matches a value or predicate.\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_ONE_OF_HPP\n#define BOOST_ALGORITHM_ONE_OF_HPP\n\n#include <algorithm>            // for std::find and std::find_if\n#include <boost/algorithm/cxx11/none_of.hpp>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn one_of ( InputIterator first, InputIterator last, Predicate p )\n/// \\return true if the predicate 'p' is true for exactly one item in [first, last).\n/// \n/// \\param first The start of the input sequence\n/// \\param last  One past the end of the input sequence\n/// \\param p     A predicate for testing the elements of the sequence\n///\ntemplate<typename InputIterator, typename Predicate> \nbool one_of ( InputIterator first, InputIterator last, Predicate p )\n{\n    InputIterator i = std::find_if (first, last, p);\n    if (i == last)\n        return false;    // Didn't occur at all\n    return boost::algorithm::none_of (++i, last, p);\n}\n\n/// \\fn one_of ( const Range &r, Predicate p )\n/// \\return true if the predicate 'p' is true for exactly one item in the range.\n/// \n/// \\param r    The input range\n/// \\param p    A predicate for testing the elements of the range\n///\ntemplate<typename Range, typename Predicate> \nbool one_of ( const Range &r, Predicate p ) \n{\n    return boost::algorithm::one_of ( boost::begin (r), boost::end (r), p );\n}\n\n\n/// \\fn one_of_equal ( InputIterator first, InputIterator last, const V &val )\n/// \\return true if the value 'val' exists only once in [first, last).\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param val      A value to compare against\n///\ntemplate<typename InputIterator, typename V> \nbool one_of_equal ( InputIterator first, InputIterator last, const V &val )\n{\n    InputIterator i = std::find (first, last, val); // find first occurrence of 'val'\n    if (i == last)\n        return false;                    // Didn't occur at all\n    return boost::algorithm::none_of_equal (++i, last, val);\n}\n\n/// \\fn one_of_equal ( const Range &r, const V &val )\n/// \\return true if the value 'val' exists only once in the range.\n/// \n/// \\param r    The input range\n/// \\param val  A value to compare against\n///\ntemplate<typename Range, typename V> \nbool one_of_equal ( const Range &r, const V &val )\n{\n    return boost::algorithm::one_of_equal ( boost::begin (r), boost::end (r), val );\n} \n\n}} // namespace boost and algorithm\n\n#endif // BOOST_ALGORITHM_ALL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/partition_copy.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2011-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  partition_copy.hpp\n/// \\brief Copy a subset of a sequence to a new sequence\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_PARTITION_COPY_HPP\n#define BOOST_ALGORITHM_PARTITION_COPY_HPP\n\n#include <algorithm>    // for std::partition_copy, if available\n#include <utility>  // for make_pair\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn partition_copy ( InputIterator first, InputIterator last,\n///     OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p )\n/// \\brief Copies the elements that satisfy the predicate p from the range [first, last) \n///     to the range beginning at d_first_true, and\n///     copies the elements that do not satisfy p to the range beginning at d_first_false.\n///\n/// \n/// \\param first     The start of the input sequence\n/// \\param last      One past the end of the input sequence\n/// \\param out_true  An output iterator to write the elements that satisfy the predicate into\n/// \\param out_false An output iterator to write the elements that do not satisfy the predicate into\n/// \\param p         A predicate for dividing the elements of the input sequence.\n///\n/// \\note            This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available, \n///  otherwise we have our own implementation.\ntemplate <typename InputIterator, \n        typename OutputIterator1, typename OutputIterator2, typename UnaryPredicate>\nstd::pair<OutputIterator1, OutputIterator2>\npartition_copy ( InputIterator first, InputIterator last,\n        OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p )\n{\n    for ( ; first != last; ++first )\n        if ( p (*first))\n            *out_true++ = *first;\n        else\n            *out_false++ = *first;\n    return std::pair<OutputIterator1, OutputIterator2> ( out_true, out_false );\n}\n\n/// \\fn partition_copy ( const Range &r, \n///     OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p )\n/// \n/// \\param r         The input range\n/// \\param out_true  An output iterator to write the elements that satisfy the predicate into\n/// \\param out_false An output iterator to write the elements that do not satisfy the predicate into\n/// \\param p         A predicate for dividing the elements of the input sequence.\n///\ntemplate <typename Range, typename OutputIterator1, typename OutputIterator2, \n            typename UnaryPredicate>\nstd::pair<OutputIterator1, OutputIterator2>\npartition_copy ( const Range &r, OutputIterator1 out_true, OutputIterator2 out_false, \n                                UnaryPredicate p )\n{\n    return boost::algorithm::partition_copy \n                      (boost::begin(r), boost::end(r), out_true, out_false, p );\n}\n\n}} // namespace boost and algorithm\n\n#endif  // BOOST_ALGORITHM_PARTITION_COPY_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx11/partition_point.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2011-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  partition_point.hpp\n/// \\brief Find the partition point in a sequence\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_PARTITION_POINT_HPP\n#define BOOST_ALGORITHM_PARTITION_POINT_HPP\n\n#include <algorithm>    // for std::partition_point, if available\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn partition_point ( ForwardIterator first, ForwardIterator last, Predicate p )\n/// \\brief Given a partitioned range, returns the partition point, i.e, the first element \n///     that does not satisfy p\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param p        The predicate to test the values with\n/// \\note           This function is part of the C++2011 standard library.\n///  We will use the standard one if it is available, \n///  otherwise we have our own implementation.\ntemplate <typename ForwardIterator, typename Predicate>\nForwardIterator partition_point ( ForwardIterator first, ForwardIterator last, Predicate p )\n{\n    std::size_t dist = std::distance ( first, last );\n    while ( first != last ) {\n        std::size_t d2 = dist / 2;\n        ForwardIterator ret_val = first;\n        std::advance (ret_val, d2);\n        if (p (*ret_val)) {\n            first = ++ret_val;\n            dist -= d2 + 1;\n            }\n        else {\n            last = ret_val;\n            dist = d2;\n            }\n        }\n    return first;\n}\n\n/// \\fn partition_point ( Range &r, Predicate p )\n/// \\brief Given a partitioned range, returns the partition point\n/// \n/// \\param r        The input range\n/// \\param p        The predicate to test the values with\n///\ntemplate <typename Range, typename Predicate>\ntypename boost::range_iterator<Range>::type partition_point ( Range &r, Predicate p )\n{\n    return boost::algorithm::partition_point (boost::begin(r), boost::end(r), p);\n}\n\n\n}}\n\n#endif  // BOOST_ALGORITHM_PARTITION_POINT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx14/equal.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2008-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  equal.hpp\n/// \\brief Test ranges to if they are equal\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_EQUAL_HPP\n#define BOOST_ALGORITHM_EQUAL_HPP\n\n#include <algorithm>    // for std::equal\n#include <functional>   // for std::equal_to\n\nnamespace boost { namespace algorithm {\n\nnamespace detail {\n\n    template <class T1, class T2>\n    struct eq : public std::binary_function<T1, T2, bool> {\n        bool operator () ( const T1& v1, const T2& v2 ) const { return v1 == v2 ;}\n        };\n    \n    template <class RandomAccessIterator1, class RandomAccessIterator2, class BinaryPredicate>\n    bool equal ( RandomAccessIterator1 first1, RandomAccessIterator1 last1, \n                 RandomAccessIterator2 first2, RandomAccessIterator2 last2, BinaryPredicate pred,\n                 std::random_access_iterator_tag, std::random_access_iterator_tag )\n    {\n    //  Random-access iterators let is check the sizes in constant time\n        if ( std::distance ( first1, last1 ) != std::distance ( first2, last2 ))\n            return false;\n    // If we know that the sequences are the same size, the original version is fine\n        return std::equal ( first1, last1, first2, pred );\n    }\n\n    template <class InputIterator1, class InputIterator2, class BinaryPredicate>\n    bool equal ( InputIterator1 first1, InputIterator1 last1, \n                 InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred,\n                 std::input_iterator_tag, std::input_iterator_tag )\n    {\n    for (; first1 != last1 && first2 != last2; ++first1, ++first2 )\n        if ( !pred(*first1, *first2 ))\n            return false;\n\n    return first1 == last1 && first2 == last2;\n    }\n}\n\n/// \\fn equal ( InputIterator1 first1, InputIterator1 last1, \n///             InputIterator2 first2, InputIterator2 last2,\n///             BinaryPredicate pred )\n/// \\return true if all elements in the two ranges are equal\n/// \n/// \\param first1    The start of the first range.\n/// \\param last1     One past the end of the first range.\n/// \\param first2    The start of the second range.\n/// \\param last2     One past the end of the second range.\n/// \\param pred      A predicate for comparing the elements of the ranges\ntemplate <class InputIterator1, class InputIterator2, class BinaryPredicate>\nbool equal ( InputIterator1 first1, InputIterator1 last1, \n             InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred )\n{\n    return boost::algorithm::detail::equal ( \n        first1, last1, first2, last2, pred,\n        typename std::iterator_traits<InputIterator1>::iterator_category (),\n        typename std::iterator_traits<InputIterator2>::iterator_category ());\n}\n\n/// \\fn equal ( InputIterator1 first1, InputIterator1 last1, \n///             InputIterator2 first2, InputIterator2 last2 )\n/// \\return true if all elements in the two ranges are equal\n/// \n/// \\param first1    The start of the first range.\n/// \\param last1     One past the end of the first range.\n/// \\param first2    The start of the second range.\n/// \\param last2     One past the end of the second range.\ntemplate <class InputIterator1, class InputIterator2>\nbool equal ( InputIterator1 first1, InputIterator1 last1, \n             InputIterator2 first2, InputIterator2 last2 )\n{\n    return boost::algorithm::detail::equal (\n        first1, last1, first2, last2,\n        boost::algorithm::detail::eq<\n            typename std::iterator_traits<InputIterator1>::value_type,\n            typename std::iterator_traits<InputIterator2>::value_type> (),\n        typename std::iterator_traits<InputIterator1>::iterator_category (),\n        typename std::iterator_traits<InputIterator2>::iterator_category ());\n}\n\n//  There are already range-based versions of these.\n\n}} // namespace boost and algorithm\n\n#endif // BOOST_ALGORITHM_EQUAL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx14/is_permutation.hpp",
    "content": "/*\n   Copyright (c) Marshall Clow 2014.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n*/\n\n/// \\file  is_permutation.hpp\n/// \\brief Is a sequence a permutation of another sequence (four iterator versions)\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_IS_PERMUTATION14_HPP\n#define BOOST_ALGORITHM_IS_PERMUTATION14_HPP\n\n#include <algorithm>    // for std::less, tie, mismatch and is_permutation (if available)\n#include <utility>      // for std::make_pair\n#include <functional>   // for std::equal_to\n#include <iterator>\n\n#include <boost/algorithm/cxx11/is_permutation.hpp>\n#include <boost/algorithm/cxx14/mismatch.hpp>\n\nnamespace boost { namespace algorithm {\n\n/// \\fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last, \n///                      ForwardIterator2 first2, ForwardIterator2 last2 )\n/// \\brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2\n///\n/// \\param first1   The start of the input sequence\n/// \\param last2    One past the end of the input sequence\n/// \\param first2   The start of the second sequence\n/// \\param last1    One past the end of the second sequence\n/// \\note           This function is part of the C++2014 standard library.\n///  We will use the standard one if it is available,\n///     otherwise we have our own implementation.\ntemplate< class ForwardIterator1, class ForwardIterator2 >\nbool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, \n                      ForwardIterator2 first2, ForwardIterator2 last2 )\n{\n//  How should I deal with the idea that ForwardIterator1::value_type\n//  and ForwardIterator2::value_type could be different? Define my own comparison predicate?\n    std::pair<ForwardIterator1, ForwardIterator2> eq = boost::algorithm::mismatch\n        ( first1, last1, first2, last2 );\n    if ( eq.first == last1 && eq.second == last2)\n        return true;\n    return boost::algorithm::detail::is_permutation_tag (\n        eq.first, last1, eq.second, last2, \n        std::equal_to<typename std::iterator_traits<ForwardIterator1>::value_type> (),\n        typename std::iterator_traits<ForwardIterator1>::iterator_category (),\n        typename std::iterator_traits<ForwardIterator2>::iterator_category ());\n}\n\n/// \\fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last, \n///                      ForwardIterator2 first2, ForwardIterator2 last2, \n///                      BinaryPredicate p )\n/// \\brief Tests to see if the sequence [first,last) is a permutation of the sequence starting at first2\n///\n/// \\param first1   The start of the input sequence\n/// \\param last1    One past the end of the input sequence\n/// \\param first2   The start of the second sequence\n/// \\param last2    One past the end of the second sequence\n/// \\param pred     The predicate to compare elements with\n///\n/// \\note           This function is part of the C++2014 standard library.\n///  We will use the standard one if it is available,\n///     otherwise we have our own implementation.\ntemplate< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >\nbool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,\n                      ForwardIterator2 first2, ForwardIterator2 last2, \n                      BinaryPredicate pred )\n{\n    std::pair<ForwardIterator1, ForwardIterator2> eq = boost::algorithm::mismatch\n        ( first1, last1, first2, last2, pred );\n    if ( eq.first == last1 && eq.second == last2)\n        return true;\n    return boost::algorithm::detail::is_permutation_tag (\n        first1, last1, first2, last2, pred, \n        typename std::iterator_traits<ForwardIterator1>::iterator_category (),\n        typename std::iterator_traits<ForwardIterator2>::iterator_category ());\n}\n\n}}\n\n#endif  // BOOST_ALGORITHM_IS_PERMUTATION14_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/cxx14/mismatch.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2008-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE10.txt or copy at http://www.boost.org/LICENSE10.txt)\n*/\n\n/// \\file  mismatch.hpp\n/// \\brief Find the first mismatched element in a sequence\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_MISMATCH_HPP\n#define BOOST_ALGORITHM_MISMATCH_HPP\n\n#include <algorithm>    // for std::mismatch\n#include <utility>      // for std::pair\n\nnamespace boost { namespace algorithm {\n\n/// \\fn mismatch ( InputIterator1 first1, InputIterator1 last1, \n///                InputIterator2 first2, InputIterator2 last2,\n///                BinaryPredicate pred )\n/// \\return a pair of iterators pointing to the first elements in the sequence that do not match\n/// \n/// \\param first1    The start of the first range.\n/// \\param last1     One past the end of the first range.\n/// \\param first2    The start of the second range.\n/// \\param last2     One past the end of the second range.\n/// \\param pred      A predicate for comparing the elements of the ranges\ntemplate <class InputIterator1, class InputIterator2, class BinaryPredicate>\nstd::pair<InputIterator1, InputIterator2> mismatch (\n                    InputIterator1 first1, InputIterator1 last1,\n                    InputIterator2 first2, InputIterator2 last2,\n                    BinaryPredicate pred )\n{\n    for (; first1 != last1 && first2 != last2; ++first1, ++first2)\n        if ( !pred ( *first1, *first2 ))\n            break;\n    return std::pair<InputIterator1, InputIterator2>(first1, first2);\n}\n\n/// \\fn mismatch ( InputIterator1 first1, InputIterator1 last1, \n///                InputIterator2 first2, InputIterator2 last2 )\n/// \\return a pair of iterators pointing to the first elements in the sequence that do not match\n/// \n/// \\param first1    The start of the first range.\n/// \\param last1     One past the end of the first range.\n/// \\param first2    The start of the second range.\n/// \\param last2     One past the end of the second range.\ntemplate <class InputIterator1, class InputIterator2>\nstd::pair<InputIterator1, InputIterator2> mismatch (\n                    InputIterator1 first1, InputIterator1 last1,\n                    InputIterator2 first2, InputIterator2 last2 )\n{\n    for (; first1 != last1 && first2 != last2; ++first1, ++first2)\n        if ( *first1 != *first2 )\n            break;\n    return std::pair<InputIterator1, InputIterator2>(first1, first2);\n}\n\n//  There are already range-based versions of these.\n\n}} // namespace boost and algorithm\n\n#endif // BOOST_ALGORITHM_MISMATCH_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/gather.hpp",
    "content": "/* \n    Copyright 2008 Adobe Systems Incorporated\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n Revision history:\n   January 2008 mtc Version for Adobe Source Library\n   January 2013 mtc Version for Boost.Algorithm\n\n*/\n\n/**************************************************************************************************/\n\n/*!\n\\author Marshall Clow\n\\date    January 2008\n*/\n\n#ifndef BOOST_ALGORITHM_GATHER_HPP\n#define BOOST_ALGORITHM_GATHER_HPP\n\n#include <algorithm>                // for std::stable_partition\n#include <functional>\n\n#include <boost/bind.hpp>           // for boost::bind\n#include <boost/range/begin.hpp>    // for boost::begin(range)\n#include <boost/range/end.hpp>      // for boost::end(range)\n\n\n/**************************************************************************************************/\n/*!\n    \\defgroup gather gather\n    \\ingroup mutating_algorithm\n\n    \\c gather() takes a collection of elements defined by a pair of iterators and moves\n    the ones satisfying a predicate to them to a position (called the pivot) within\n    the sequence. The algorithm is stable. The result is a pair of iterators that\n    contains the items that satisfy the predicate.\n\n    Given an sequence containing:\n    <pre>\n    0 1 2 3 4 5 6 7 8 9\n    </pre>\n\n    a call to gather ( arr, arr + 10, arr + 4, IsEven ()) will result in:\n\n    <pre>\n    1 3 0 2 4 6 8 5 7 9\n        |---|-----|\n      first |  second\n          pivot\n    </pre>\n\n\n    The problem is broken down into two basic steps, namely, moving the items before the pivot\n    and then moving the items from the pivot to the end. These \"moves\" are done with calls to\n    stable_partition.\n\n    \\par Storage Requirements:\n\n    The algorithm uses stable_partition, which will attempt to allocate temporary memory,\n    but will work in-situ if there is none available.\n\n    \\par Time Complexity:\n\n    If there is sufficient memory available, the run time is linear in <code>N</code>.\n    If there is not any memory available, then the run time is <code>O(N log N)</code>.\n*/\n\n/**************************************************************************************************/\n\nnamespace boost { namespace algorithm {\n\n/**************************************************************************************************/\n\n/*!\n    \\ingroup gather\n    \\brief iterator-based gather implementation\n*/\n\ntemplate <\n    typename BidirectionalIterator,  // Iter models BidirectionalIterator\n    typename Pred>                   // Pred models UnaryPredicate\nstd::pair<BidirectionalIterator, BidirectionalIterator> gather \n        ( BidirectionalIterator first, BidirectionalIterator last, BidirectionalIterator pivot, Pred pred )\n{\n//  The first call partitions everything up to (but not including) the pivot element,\n//  while the second call partitions the rest of the sequence.\n    return std::make_pair (\n        std::stable_partition ( first, pivot, !boost::bind<bool> ( pred, _1 )),\n        std::stable_partition ( pivot, last,   boost::bind<bool> ( pred, _1 )));\n}\n\n/**************************************************************************************************/\n\n/*!\n    \\ingroup gather\n    \\brief range-based gather implementation\n*/\n\ntemplate <\n    typename BidirectionalRange,    //\n    typename Pred>                  // Pred models UnaryPredicate\nstd::pair<\n    typename boost::range_iterator<const BidirectionalRange>::type,\n    typename boost::range_iterator<const BidirectionalRange>::type>\ngather (\n    const BidirectionalRange &range,\n    typename boost::range_iterator<const BidirectionalRange>::type pivot,\n    Pred pred )\n{\n    return boost::algorithm::gather ( boost::begin ( range ), boost::end ( range ), pivot, pred );\n}\n\n/**************************************************************************************************/\n\n}}  // namespace\n\n/**************************************************************************************************/\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/hex.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2011-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n   \n   Thanks to Nevin for his comments/help.\n*/\n\n/*\n    General problem - turn a sequence of integral types into a sequence of hexadecimal characters.\n    - and back.\n*/\n\n/// \\file  hex.hpp\n/// \\brief Convert sequence of integral types into a sequence of hexadecimal \n///     characters and back. Based on the MySQL functions HEX and UNHEX\n/// \\author Marshall Clow\n\n#ifndef BOOST_ALGORITHM_HEXHPP\n#define BOOST_ALGORITHM_HEXHPP\n\n#include <iterator>     // for std::iterator_traits\n#include <stdexcept>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/exception/all.hpp>\n\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/is_integral.hpp>\n\n\nnamespace boost { namespace algorithm {\n\n/*! \n    \\struct hex_decode_error \n    \\brief  Base exception class for all hex decoding errors \n*/ /*!\n    \\struct non_hex_input    \n    \\brief  Thrown when a non-hex value (0-9, A-F) encountered when decoding.\n                Contains the offending character\n*/ /*!    \n    \\struct not_enough_input \n    \\brief  Thrown when the input sequence unexpectedly ends\n    \n*/\nstruct hex_decode_error : virtual boost::exception, virtual std::exception {};\nstruct not_enough_input : virtual hex_decode_error {};\nstruct non_hex_input    : virtual hex_decode_error {};\ntypedef boost::error_info<struct bad_char_,char> bad_char;\n\nnamespace detail {\n/// \\cond DOXYGEN_HIDE\n\n    template <typename T, typename OutputIterator>\n    OutputIterator encode_one ( T val, OutputIterator out ) {\n        const std::size_t num_hex_digits =  2 * sizeof ( T );\n        char res [ num_hex_digits ];\n        char  *p = res + num_hex_digits;\n        for ( std::size_t i = 0; i < num_hex_digits; ++i, val >>= 4 )\n            *--p = \"0123456789ABCDEF\" [ val & 0x0F ];\n        return std::copy ( res, res + num_hex_digits, out );\n        }\n\n    template <typename T>\n    unsigned char hex_char_to_int ( T val ) {\n        char c = static_cast<char> ( val );\n        unsigned retval = 0;\n        if      ( c >= '0' && c <= '9' ) retval = c - '0';\n        else if ( c >= 'A' && c <= 'F' ) retval = c - 'A' + 10;\n        else if ( c >= 'a' && c <= 'f' ) retval = c - 'a' + 10;\n        else BOOST_THROW_EXCEPTION (non_hex_input() << bad_char (c));\n        return retval;\n        }\n\n//  My own iterator_traits class.\n//  It is here so that I can \"reach inside\" some kinds of output iterators\n//      and get the type to write.\n    template <typename Iterator>\n    struct hex_iterator_traits {\n        typedef typename std::iterator_traits<Iterator>::value_type value_type;\n    };\n\n    template<typename Container>\n    struct hex_iterator_traits< std::back_insert_iterator<Container> > {\n        typedef typename Container::value_type value_type;\n    };\n\n    template<typename Container>\n    struct hex_iterator_traits< std::front_insert_iterator<Container> > {\n        typedef typename Container::value_type value_type;\n    };\n\n    template<typename Container>\n    struct hex_iterator_traits< std::insert_iterator<Container> > {\n        typedef typename Container::value_type value_type;\n    };\n\n//  ostream_iterators have three template parameters.\n//  The first one is the output type, the second one is the character type of\n//  the underlying stream, the third is the character traits.\n//      We only care about the first one.\n    template<typename T, typename charType, typename traits>\n    struct hex_iterator_traits< std::ostream_iterator<T, charType, traits> > {\n        typedef T value_type;\n    };\n\n    template <typename Iterator> \n    bool iter_end ( Iterator current, Iterator last ) { return current == last; }\n  \n    template <typename T>\n    bool ptr_end ( const T* ptr, const T* /*end*/ ) { return *ptr == '\\0'; }\n  \n//  What can we assume here about the inputs?\n//      is std::iterator_traits<InputIterator>::value_type always 'char' ?\n//  Could it be wchar_t, say? Does it matter?\n//      We are assuming ASCII for the values - but what about the storage?\n    template <typename InputIterator, typename OutputIterator, typename EndPred>\n    typename boost::enable_if<boost::is_integral<typename hex_iterator_traits<OutputIterator>::value_type>, OutputIterator>::type\n    decode_one ( InputIterator &first, InputIterator last, OutputIterator out, EndPred pred ) {\n        typedef typename hex_iterator_traits<OutputIterator>::value_type T;\n        T res (0);\n\n    //  Need to make sure that we get can read that many chars here.\n        for ( std::size_t i = 0; i < 2 * sizeof ( T ); ++i, ++first ) {\n            if ( pred ( first, last )) \n                BOOST_THROW_EXCEPTION (not_enough_input ());\n            res = ( 16 * res ) + hex_char_to_int (*first);\n            }\n        \n        *out = res;\n        return ++out;\n        }\n/// \\endcond\n    }\n\n\n/// \\fn hex ( InputIterator first, InputIterator last, OutputIterator out )\n/// \\brief   Converts a sequence of integral types into a hexadecimal sequence of characters.\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param out      An output iterator to the results into\n/// \\return         The updated output iterator\n/// \\note           Based on the MySQL function of the same name\ntemplate <typename InputIterator, typename OutputIterator>\ntypename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<InputIterator>::value_type>, OutputIterator>::type\nhex ( InputIterator first, InputIterator last, OutputIterator out ) {\n    for ( ; first != last; ++first )\n        out = detail::encode_one ( *first, out );\n    return out;\n    }\n    \n\n/// \\fn hex ( const T *ptr, OutputIterator out )\n/// \\brief   Converts a sequence of integral types into a hexadecimal sequence of characters.\n/// \n/// \\param ptr      A pointer to a 0-terminated sequence of data.\n/// \\param out      An output iterator to the results into\n/// \\return         The updated output iterator\n/// \\note           Based on the MySQL function of the same name\ntemplate <typename T, typename OutputIterator>\ntypename boost::enable_if<boost::is_integral<T>, OutputIterator>::type\nhex ( const T *ptr, OutputIterator out ) {\n    while ( *ptr )\n        out = detail::encode_one ( *ptr++, out );\n    return out;\n    }\n\n/// \\fn hex ( const Range &r, OutputIterator out )\n/// \\brief   Converts a sequence of integral types into a hexadecimal sequence of characters.\n/// \n/// \\param r        The input range\n/// \\param out      An output iterator to the results into\n/// \\return         The updated output iterator\n/// \\note           Based on the MySQL function of the same name\ntemplate <typename Range, typename OutputIterator>\ntypename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<typename Range::iterator>::value_type>, OutputIterator>::type\nhex ( const Range &r, OutputIterator out ) {\n    return hex (boost::begin(r), boost::end(r), out);\n}\n\n\n/// \\fn unhex ( InputIterator first, InputIterator last, OutputIterator out )\n/// \\brief   Converts a sequence of hexadecimal characters into a sequence of integers.\n/// \n/// \\param first    The start of the input sequence\n/// \\param last     One past the end of the input sequence\n/// \\param out      An output iterator to the results into\n/// \\return         The updated output iterator\n/// \\note           Based on the MySQL function of the same name\ntemplate <typename InputIterator, typename OutputIterator>\nOutputIterator unhex ( InputIterator first, InputIterator last, OutputIterator out ) {\n    while ( first != last )\n        out = detail::decode_one ( first, last, out, detail::iter_end<InputIterator> );\n    return out;\n    }\n\n\n/// \\fn unhex ( const T *ptr, OutputIterator out )\n/// \\brief   Converts a sequence of hexadecimal characters into a sequence of integers.\n/// \n/// \\param ptr      A pointer to a null-terminated input sequence.\n/// \\param out      An output iterator to the results into\n/// \\return         The updated output iterator\n/// \\note           Based on the MySQL function of the same name\ntemplate <typename T, typename OutputIterator>\nOutputIterator unhex ( const T *ptr, OutputIterator out ) {\n//  If we run into the terminator while decoding, we will throw a\n//      malformed input exception. It would be nicer to throw a 'Not enough input'\n//      exception - but how much extra work would that require?\n    while ( *ptr )\n        out = detail::decode_one ( ptr, (const T *) NULL, out, detail::ptr_end<T> );\n    return out;\n    }\n\n\n/// \\fn OutputIterator unhex ( const Range &r, OutputIterator out )\n/// \\brief   Converts a sequence of hexadecimal characters into a sequence of integers.\n/// \n/// \\param r        The input range\n/// \\param out      An output iterator to the results into\n/// \\return         The updated output iterator\n/// \\note           Based on the MySQL function of the same name\ntemplate <typename Range, typename OutputIterator>\nOutputIterator unhex ( const Range &r, OutputIterator out ) {\n    return unhex (boost::begin(r), boost::end(r), out);\n    }\n\n\n/// \\fn String hex ( const String &input )\n/// \\brief   Converts a sequence of integral types into a hexadecimal sequence of characters.\n/// \n/// \\param input    A container to be converted\n/// \\return         A container with the encoded text\ntemplate<typename String>\nString hex ( const String &input ) {\n    String output;\n    output.reserve (input.size () * (2 * sizeof (typename String::value_type)));\n    (void) hex (input, std::back_inserter (output));\n    return output;\n    }\n\n/// \\fn String unhex ( const String &input )\n/// \\brief   Converts a sequence of hexadecimal characters into a sequence of characters.\n/// \n/// \\param input    A container to be converted\n/// \\return         A container with the decoded text\ntemplate<typename String>\nString unhex ( const String &input ) {\n    String output;\n    output.reserve (input.size () / (2 * sizeof (typename String::value_type)));\n    (void) unhex (input, std::back_inserter (output));\n    return output;\n    }\n\n}}\n\n#endif // BOOST_ALGORITHM_HEXHPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/minmax.hpp",
    "content": "//  (C) Copyright Herve Bronnimann 2004.\n//\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n/*\n Revision history:\n   1 July 2004\n      Split the code into two headers to lessen dependence on\n      Boost.tuple. (Herve)\n   26 June 2004\n      Added the code for the boost minmax library. (Herve)\n*/\n\n#ifndef BOOST_ALGORITHM_MINMAX_HPP\n#define BOOST_ALGORITHM_MINMAX_HPP\n\n/* PROPOSED STANDARD EXTENSIONS:\n *\n * minmax(a, b)\n * Effect: (b<a) ? std::make_pair(b,a) : std::make_pair(a,b);\n *\n * minmax(a, b, comp)\n * Effect: comp(b,a) ? std::make_pair(b,a) : std::make_pair(a,b);\n *\n */\n\n#include <boost/tuple/tuple.hpp> // for using pairs with boost::cref\n#include <boost/ref.hpp>\n\nnamespace boost {\n\n  template <typename T>\n  tuple< T const&, T const& >\n  minmax(T const& a, T const& b) {\n    return (b<a) ? make_tuple(cref(b),cref(a)) : make_tuple(cref(a),cref(b));\n  }\n\n  template <typename T, class BinaryPredicate>\n  tuple< T const&, T const& >\n  minmax(T const& a, T const& b, BinaryPredicate comp) {\n    return comp(b,a) ? make_tuple(cref(b),cref(a)) : make_tuple(cref(a),cref(b));\n  }\n\n} // namespace boost\n\n#endif // BOOST_ALGORITHM_MINMAX_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/minmax_element.hpp",
    "content": "//  (C) Copyright Herve Bronnimann 2004.\n//\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n/*\n Revision history:\n   1 July 2004\n      Split the code into two headers to lessen dependence on\n      Boost.tuple. (Herve)\n   26 June 2004\n      Added the code for the boost minmax library. (Herve)\n*/\n\n#ifndef BOOST_ALGORITHM_MINMAX_ELEMENT_HPP\n#define BOOST_ALGORITHM_MINMAX_ELEMENT_HPP\n\n/* PROPOSED STANDARD EXTENSIONS:\n *\n * minmax_element(first, last)\n * Effect: std::make_pair( std::min_element(first, last),\n *                         std::max_element(first, last) );\n *\n * minmax_element(first, last, comp)\n * Effect: std::make_pair( std::min_element(first, last, comp),\n *                         std::max_element(first, last, comp) );\n */\n\n#include <utility> // for std::pair and std::make_pair\n\nnamespace boost {\n\n  namespace detail {  // for obtaining a uniform version of minmax_element\n    // that compiles with VC++ 6.0 -- avoid the iterator_traits by\n    // having comparison object over iterator, not over dereferenced value\n\n    template <typename Iterator>\n    struct less_over_iter {\n      bool operator()(Iterator const& it1,\n                      Iterator const& it2) const { return *it1 < *it2; }\n    };\n\n    template <typename Iterator, class BinaryPredicate>\n    struct binary_pred_over_iter {\n      explicit binary_pred_over_iter(BinaryPredicate const& p ) : m_p( p ) {}\n      bool operator()(Iterator const& it1,\n                      Iterator const& it2) const { return m_p(*it1, *it2); }\n    private:\n      BinaryPredicate m_p;\n    };\n\n    // common base for the two minmax_element overloads\n\n    template <typename ForwardIter, class Compare >\n    std::pair<ForwardIter,ForwardIter>\n    basic_minmax_element(ForwardIter first, ForwardIter last, Compare comp)\n    {\n      if (first == last)\n        return std::make_pair(last,last);\n\n      ForwardIter min_result = first;\n      ForwardIter max_result = first;\n\n      // if only one element\n      ForwardIter second = first; ++second;\n      if (second == last)\n        return std::make_pair(min_result, max_result);\n\n      // treat first pair separately (only one comparison for first two elements)\n      ForwardIter potential_min_result = last;\n      if (comp(first, second))\n        max_result = second;\n      else {\n        min_result = second;\n        potential_min_result = first;\n      }\n\n      // then each element by pairs, with at most 3 comparisons per pair\n      first = ++second; if (first != last) ++second;\n      while (second != last) {\n        if (comp(first, second)) {\n          if (comp(first, min_result)) {\n            min_result = first;\n            potential_min_result = last;\n          }\n          if (comp(max_result, second))\n            max_result = second;\n        } else {\n          if (comp(second, min_result)) {\n            min_result = second;\n            potential_min_result = first;\n          }\n          if (comp(max_result, first))\n            max_result = first;\n        }\n        first = ++second;\n        if (first != last) ++second;\n      }\n\n      // if odd number of elements, treat last element\n      if (first != last) { // odd number of elements\n        if (comp(first, min_result)) {\n          min_result = first;\n          potential_min_result = last;\n          }\n        else if (comp(max_result, first))\n          max_result = first;\n      }\n\n      // resolve min_result being incorrect with one extra comparison\n      // (in which case potential_min_result is necessarily the correct result)\n      if (potential_min_result != last\n        && !comp(min_result, potential_min_result))\n        min_result = potential_min_result;\n\n      return std::make_pair(min_result,max_result);\n    }\n\n  } // namespace detail\n\n  template <typename ForwardIter>\n  std::pair<ForwardIter,ForwardIter>\n  minmax_element(ForwardIter first, ForwardIter last)\n  {\n    return detail::basic_minmax_element(first, last,\n             detail::less_over_iter<ForwardIter>() );\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  std::pair<ForwardIter,ForwardIter>\n  minmax_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)\n  {\n    return detail::basic_minmax_element(first, last,\n             detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );\n  }\n\n}\n\n/* PROPOSED BOOST EXTENSIONS\n * In the description below, [rfirst,rlast) denotes the reversed range\n * of [first,last). Even though the iterator type of first and last may\n * be only a Forward Iterator, it is possible to explain the semantics\n * by assuming that it is a Bidirectional Iterator. In the sequel,\n * reverse(ForwardIterator&) returns the reverse_iterator adaptor.\n * This is not how the functions would be implemented!\n *\n * first_min_element(first, last)\n * Effect: std::min_element(first, last);\n *\n * first_min_element(first, last, comp)\n * Effect: std::min_element(first, last, comp);\n *\n * last_min_element(first, last)\n * Effect: reverse( std::min_element(reverse(last), reverse(first)) );\n *\n * last_min_element(first, last, comp)\n * Effect: reverse( std::min_element(reverse(last), reverse(first), comp) );\n *\n * first_max_element(first, last)\n * Effect: std::max_element(first, last);\n *\n * first_max_element(first, last, comp)\n * Effect: max_element(first, last);\n *\n * last_max_element(first, last)\n * Effect: reverse( std::max_element(reverse(last), reverse(first)) );\n *\n * last_max_element(first, last, comp)\n * Effect: reverse( std::max_element(reverse(last), reverse(first), comp) );\n *\n * first_min_first_max_element(first, last)\n * Effect: std::make_pair( first_min_element(first, last),\n *                         first_max_element(first, last) );\n *\n * first_min_first_max_element(first, last, comp)\n * Effect: std::make_pair( first_min_element(first, last, comp),\n *                         first_max_element(first, last, comp) );\n *\n * first_min_last_max_element(first, last)\n * Effect: std::make_pair( first_min_element(first, last),\n *                         last_max_element(first, last) );\n *\n * first_min_last_max_element(first, last, comp)\n * Effect: std::make_pair( first_min_element(first, last, comp),\n *                         last_max_element(first, last, comp) );\n *\n * last_min_first_max_element(first, last)\n * Effect: std::make_pair( last_min_element(first, last),\n *                         first_max_element(first, last) );\n *\n * last_min_first_max_element(first, last, comp)\n * Effect: std::make_pair( last_min_element(first, last, comp),\n *                         first_max_element(first, last, comp) );\n *\n * last_min_last_max_element(first, last)\n * Effect: std::make_pair( last_min_element(first, last),\n *                         last_max_element(first, last) );\n *\n * last_min_last_max_element(first, last, comp)\n * Effect: std::make_pair( last_min_element(first, last, comp),\n *                         last_max_element(first, last, comp) );\n */\n\nnamespace boost {\n\n  // Min_element and max_element variants\n\n  namespace detail {  // common base for the overloads\n\n  template <typename ForwardIter, class BinaryPredicate>\n  ForwardIter\n  basic_first_min_element(ForwardIter first, ForwardIter last,\n                          BinaryPredicate comp)\n  {\n    if (first == last) return last;\n    ForwardIter min_result = first;\n    while (++first != last)\n      if (comp(first, min_result))\n        min_result = first;\n    return min_result;\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  ForwardIter\n  basic_last_min_element(ForwardIter first, ForwardIter last,\n                         BinaryPredicate comp)\n  {\n    if (first == last) return last;\n    ForwardIter min_result = first;\n    while (++first != last)\n      if (!comp(min_result, first))\n        min_result = first;\n    return min_result;\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  ForwardIter\n  basic_first_max_element(ForwardIter first, ForwardIter last,\n                          BinaryPredicate comp)\n  {\n    if (first == last) return last;\n    ForwardIter max_result = first;\n    while (++first != last)\n      if (comp(max_result, first))\n        max_result = first;\n    return max_result;\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  ForwardIter\n  basic_last_max_element(ForwardIter first, ForwardIter last,\n                         BinaryPredicate comp)\n  {\n    if (first == last) return last;\n    ForwardIter max_result = first;\n    while (++first != last)\n      if (!comp(first, max_result))\n        max_result = first;\n    return max_result;\n  }\n\n  } // namespace detail\n\n  template <typename ForwardIter>\n  ForwardIter\n  first_min_element(ForwardIter first, ForwardIter last)\n  {\n    return detail::basic_first_min_element(first, last,\n             detail::less_over_iter<ForwardIter>() );\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  ForwardIter\n  first_min_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)\n  {\n    return detail::basic_first_min_element(first, last,\n             detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );\n  }\n\n  template <typename ForwardIter>\n  ForwardIter\n  last_min_element(ForwardIter first, ForwardIter last)\n  {\n    return detail::basic_last_min_element(first, last,\n             detail::less_over_iter<ForwardIter>() );\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  ForwardIter\n  last_min_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)\n  {\n    return detail::basic_last_min_element(first, last,\n             detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );\n  }\n\n  template <typename ForwardIter>\n  ForwardIter\n  first_max_element(ForwardIter first, ForwardIter last)\n  {\n    return detail::basic_first_max_element(first, last,\n             detail::less_over_iter<ForwardIter>() );\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  ForwardIter\n  first_max_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)\n  {\n    return detail::basic_first_max_element(first, last,\n             detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );\n  }\n\n  template <typename ForwardIter>\n  ForwardIter\n  last_max_element(ForwardIter first, ForwardIter last)\n  {\n    return detail::basic_last_max_element(first, last,\n             detail::less_over_iter<ForwardIter>() );\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  ForwardIter\n  last_max_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)\n  {\n    return detail::basic_last_max_element(first, last,\n             detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );\n  }\n\n\n  // Minmax_element variants -- comments removed\n\n  namespace detail {\n\n  template <typename ForwardIter, class BinaryPredicate>\n  std::pair<ForwardIter,ForwardIter>\n  basic_first_min_last_max_element(ForwardIter first, ForwardIter last,\n                                   BinaryPredicate comp)\n  {\n    if (first == last)\n      return std::make_pair(last,last);\n\n    ForwardIter min_result = first;\n    ForwardIter max_result = first;\n\n    ForwardIter second = ++first;\n    if (second == last)\n      return std::make_pair(min_result, max_result);\n\n    if (comp(second, min_result))\n      min_result = second;\n    else\n      max_result = second;\n\n    first = ++second; if (first != last) ++second;\n    while (second != last) {\n      if (!comp(second, first)) {\n        if (comp(first, min_result))\n                 min_result = first;\n        if (!comp(second, max_result))\n          max_result = second;\n      } else {\n        if (comp(second, min_result))\n          min_result = second;\n        if (!comp(first, max_result))\n              max_result = first;\n      }\n      first = ++second; if (first != last) ++second;\n    }\n\n    if (first != last) {\n      if (comp(first, min_result))\n         min_result = first;\n      else if (!comp(first, max_result))\n               max_result = first;\n    }\n\n    return std::make_pair(min_result, max_result);\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  std::pair<ForwardIter,ForwardIter>\n  basic_last_min_first_max_element(ForwardIter first, ForwardIter last,\n                                   BinaryPredicate comp)\n  {\n    if (first == last) return std::make_pair(last,last);\n\n    ForwardIter min_result = first;\n    ForwardIter max_result = first;\n\n    ForwardIter second = ++first;\n    if (second == last)\n      return std::make_pair(min_result, max_result);\n\n    if (comp(max_result, second))\n      max_result = second;\n    else\n      min_result = second;\n\n    first = ++second; if (first != last) ++second;\n    while (second != last)  {\n      if (comp(first, second)) {\n        if (!comp(min_result, first))\n          min_result = first;\n        if (comp(max_result, second))\n          max_result = second;\n      } else {\n        if (!comp(min_result, second))\n          min_result = second;\n        if (comp(max_result, first))\n          max_result = first;\n      }\n      first = ++second; if (first != last) ++second;\n    }\n\n    if (first != last) {\n      if (!comp(min_result, first))\n        min_result = first;\n      else if (comp(max_result, first))\n        max_result = first;\n    }\n\n    return std::make_pair(min_result, max_result);\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  std::pair<ForwardIter,ForwardIter>\n  basic_last_min_last_max_element(ForwardIter first, ForwardIter last,\n                                  BinaryPredicate comp)\n  {\n    if (first == last) return std::make_pair(last,last);\n\n    ForwardIter min_result = first;\n    ForwardIter max_result = first;\n\n    ForwardIter second = first; ++second;\n    if (second == last)\n      return std::make_pair(min_result,max_result);\n\n    ForwardIter potential_max_result = last;\n    if (comp(first, second))\n      max_result = second;\n    else {\n      min_result = second;\n      potential_max_result = second;\n    }\n\n    first = ++second; if (first != last) ++second;\n    while (second != last) {\n      if (comp(first, second)) {\n        if (!comp(min_result, first))\n          min_result = first;\n        if (!comp(second, max_result)) {\n          max_result = second;\n          potential_max_result = last;\n        }\n      } else {\n        if (!comp(min_result, second))\n          min_result = second;\n        if (!comp(first, max_result)) {\n          max_result = first;\n          potential_max_result = second;\n        }\n      }\n      first = ++second;\n      if (first != last) ++second;\n    }\n\n    if (first != last) {\n      if (!comp(min_result, first))\n        min_result = first;\n      if (!comp(first, max_result)) {\n        max_result = first;\n               potential_max_result = last;\n      }\n    }\n\n    if (potential_max_result != last\n        && !comp(potential_max_result, max_result))\n      max_result = potential_max_result;\n\n    return std::make_pair(min_result,max_result);\n  }\n\n  } // namespace detail\n\n  template <typename ForwardIter>\n  inline std::pair<ForwardIter,ForwardIter>\n  first_min_first_max_element(ForwardIter first, ForwardIter last)\n  {\n    return minmax_element(first, last);\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  inline std::pair<ForwardIter,ForwardIter>\n  first_min_first_max_element(ForwardIter first, ForwardIter last,\n                              BinaryPredicate comp)\n  {\n    return minmax_element(first, last, comp);\n  }\n\n  template <typename ForwardIter>\n  std::pair<ForwardIter,ForwardIter>\n  first_min_last_max_element(ForwardIter first, ForwardIter last)\n  {\n    return detail::basic_first_min_last_max_element(first, last,\n             detail::less_over_iter<ForwardIter>() );\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  inline std::pair<ForwardIter,ForwardIter>\n  first_min_last_max_element(ForwardIter first, ForwardIter last,\n                              BinaryPredicate comp)\n  {\n    return detail::basic_first_min_last_max_element(first, last,\n             detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );\n  }\n\n  template <typename ForwardIter>\n  std::pair<ForwardIter,ForwardIter>\n  last_min_first_max_element(ForwardIter first, ForwardIter last)\n  {\n    return detail::basic_last_min_first_max_element(first, last,\n             detail::less_over_iter<ForwardIter>() );\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  inline std::pair<ForwardIter,ForwardIter>\n  last_min_first_max_element(ForwardIter first, ForwardIter last,\n                              BinaryPredicate comp)\n  {\n    return detail::basic_last_min_first_max_element(first, last,\n             detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );\n  }\n\n  template <typename ForwardIter>\n  std::pair<ForwardIter,ForwardIter>\n  last_min_last_max_element(ForwardIter first, ForwardIter last)\n  {\n    return detail::basic_last_min_last_max_element(first, last,\n             detail::less_over_iter<ForwardIter>() );\n  }\n\n  template <typename ForwardIter, class BinaryPredicate>\n  inline std::pair<ForwardIter,ForwardIter>\n  last_min_last_max_element(ForwardIter first, ForwardIter last,\n                              BinaryPredicate comp)\n  {\n    return detail::basic_last_min_last_max_element(first, last,\n             detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );\n  }\n\n} // namespace boost\n\n#endif // BOOST_ALGORITHM_MINMAX_ELEMENT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2010-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n    For more information, see http://www.boost.org\n*/\n\n#ifndef BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP\n#define BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP\n\n#include <iterator>     // for std::iterator_traits\n\n#include <boost/assert.hpp>\n#include <boost/static_assert.hpp>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/is_same.hpp>\n\n#include <boost/algorithm/searching/detail/bm_traits.hpp>\n#include <boost/algorithm/searching/detail/debugging.hpp>\n\nnamespace boost { namespace algorithm {\n\n/*\n    A templated version of the boyer-moore searching algorithm.\n    \nReferences:\n    http://www.cs.utexas.edu/users/moore/best-ideas/string-searching/\n    http://www.cs.utexas.edu/~moore/publications/fstrpos.pdf\n    \nExplanations:\n    http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm\n    http://www.movsd.com/bm.htm\n    http://www.cs.ucdavis.edu/~gusfield/cs224f09/bnotes.pdf\n\nThe Boyer-Moore search algorithm uses two tables, a \"bad character\" table\nto tell how far to skip ahead when it hits a character that is not in the pattern,\nand a \"good character\" table to tell how far to skip ahead when it hits a\nmismatch on a character that _is_ in the pattern.\n\nRequirements:\n        * Random access iterators\n        * The two iterator types (patIter and corpusIter) must \n            \"point to\" the same underlying type and be comparable.\n        * Additional requirements may be imposed but the skip table, such as:\n        ** Numeric type (array-based skip table)\n        ** Hashable type (map-based skip table)\n*/\n\n    template <typename patIter, typename traits = detail::BM_traits<patIter> >\n    class boyer_moore {\n        typedef typename std::iterator_traits<patIter>::difference_type difference_type;\n    public:\n        boyer_moore ( patIter first, patIter last ) \n                : pat_first ( first ), pat_last ( last ),\n                  k_pattern_length ( std::distance ( pat_first, pat_last )),\n                  skip_ ( k_pattern_length, -1 ),\n                  suffix_ ( k_pattern_length + 1 )\n            {\n            this->build_skip_table   ( first, last );\n            this->build_suffix_table ( first, last );\n            }\n            \n        ~boyer_moore () {}\n        \n        /// \\fn operator ( corpusIter corpus_first, corpusIter corpus_last )\n        /// \\brief Searches the corpus for the pattern that was passed into the constructor\n        /// \n        /// \\param corpus_first The start of the data to search (Random Access Iterator)\n        /// \\param corpus_last  One past the end of the data to search\n        ///\n        template <typename corpusIter>\n        corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {\n            BOOST_STATIC_ASSERT (( boost::is_same<\n                                    typename std::iterator_traits<patIter>::value_type, \n                                    typename std::iterator_traits<corpusIter>::value_type>::value ));\n\n            if ( corpus_first == corpus_last ) return corpus_last;  // if nothing to search, we didn't find it!\n            if (    pat_first ==    pat_last ) return corpus_first; // empty pattern matches at start\n\n            const difference_type k_corpus_length  = std::distance ( corpus_first, corpus_last );\n        //  If the pattern is larger than the corpus, we can't find it!\n            if ( k_corpus_length < k_pattern_length ) \n                return corpus_last;\n\n        //  Do the search \n            return this->do_search   ( corpus_first, corpus_last );\n            }\n            \n        template <typename Range>\n        typename boost::range_iterator<Range>::type operator () ( Range &r ) const {\n            return (*this) (boost::begin(r), boost::end(r));\n            }\n\n    private:\n/// \\cond DOXYGEN_HIDE\n        patIter pat_first, pat_last;\n        const difference_type k_pattern_length;\n        typename traits::skip_table_t skip_;\n        std::vector <difference_type> suffix_;\n\n        /// \\fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p )\n        /// \\brief Searches the corpus for the pattern that was passed into the constructor\n        /// \n        /// \\param corpus_first The start of the data to search (Random Access Iterator)\n        /// \\param corpus_last  One past the end of the data to search\n        /// \\param p            A predicate used for the search comparisons.\n        ///\n        template <typename corpusIter>\n        corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const {\n        /*  ---- Do the matching ---- */\n            corpusIter curPos = corpus_first;\n            const corpusIter lastPos = corpus_last - k_pattern_length;\n            difference_type j, k, m;\n\n            while ( curPos <= lastPos ) {\n        /*  while ( std::distance ( curPos, corpus_last ) >= k_pattern_length ) { */\n            //  Do we match right where we are?\n                j = k_pattern_length;\n                while ( pat_first [j-1] == curPos [j-1] ) {\n                    j--;\n                //  We matched - we're done!\n                    if ( j == 0 )\n                        return curPos;\n                    }\n                \n            //  Since we didn't match, figure out how far to skip forward\n                k = skip_ [ curPos [ j - 1 ]];\n                m = j - k - 1;\n                if ( k < j && m > suffix_ [ j ] )\n                    curPos += m;\n                else\n                    curPos += suffix_ [ j ];\n                }\n        \n            return corpus_last;     // We didn't find anything\n            }\n\n\n        void build_skip_table ( patIter first, patIter last ) {\n            for ( std::size_t i = 0; first != last; ++first, ++i )\n                skip_.insert ( *first, i );\n            }\n        \n\n        template<typename Iter, typename Container>\n        void compute_bm_prefix ( Iter pat_first, Iter pat_last, Container &prefix ) {\n            const std::size_t count = std::distance ( pat_first, pat_last );\n            BOOST_ASSERT ( count > 0 );\n            BOOST_ASSERT ( prefix.size () == count );\n                            \n            prefix[0] = 0;\n            std::size_t k = 0;\n            for ( std::size_t i = 1; i < count; ++i ) {\n                BOOST_ASSERT ( k < count );\n                while ( k > 0 && ( pat_first[k] != pat_first[i] )) {\n                    BOOST_ASSERT ( k < count );\n                    k = prefix [ k - 1 ];\n                    }\n                    \n                if ( pat_first[k] == pat_first[i] )\n                    k++;\n                prefix [ i ] = k;\n                }\n            }\n\n        void build_suffix_table ( patIter pat_first, patIter pat_last ) {\n            const std::size_t count = (std::size_t) std::distance ( pat_first, pat_last );\n            \n            if ( count > 0 ) {  // empty pattern\n                std::vector<typename std::iterator_traits<patIter>::value_type> reversed(count);\n                (void) std::reverse_copy ( pat_first, pat_last, reversed.begin ());\n                \n                std::vector<difference_type> prefix (count);\n                compute_bm_prefix ( pat_first, pat_last, prefix );\n        \n                std::vector<difference_type> prefix_reversed (count);\n                compute_bm_prefix ( reversed.begin (), reversed.end (), prefix_reversed );\n                \n                for ( std::size_t i = 0; i <= count; i++ )\n                    suffix_[i] = count - prefix [count-1];\n         \n                for ( std::size_t i = 0; i < count; i++ ) {\n                    const std::size_t     j = count - prefix_reversed[i];\n                    const difference_type k = i -     prefix_reversed[i] + 1;\n         \n                    if (suffix_[j] > k)\n                        suffix_[j] = k;\n                    }\n                }\n            }\n/// \\endcond\n        };\n\n\n/*  Two ranges as inputs gives us four possibilities; with 2,3,3,4 parameters\n    Use a bit of TMP to disambiguate the 3-argument templates */\n\n/// \\fn boyer_moore_search ( corpusIter corpus_first, corpusIter corpus_last, \n///       patIter pat_first, patIter pat_last )\n/// \\brief Searches the corpus for the pattern.\n/// \n/// \\param corpus_first The start of the data to search (Random Access Iterator)\n/// \\param corpus_last  One past the end of the data to search\n/// \\param pat_first    The start of the pattern to search for (Random Access Iterator)\n/// \\param pat_last     One past the end of the data to search for\n///\n    template <typename patIter, typename corpusIter>\n    corpusIter boyer_moore_search ( \n                  corpusIter corpus_first, corpusIter corpus_last, \n                  patIter pat_first, patIter pat_last )\n    {\n        boyer_moore<patIter> bm ( pat_first, pat_last );\n        return bm ( corpus_first, corpus_last );\n    }\n\n    template <typename PatternRange, typename corpusIter>\n    corpusIter boyer_moore_search ( \n        corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )\n    {\n        typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;\n        boyer_moore<pattern_iterator> bm ( boost::begin(pattern), boost::end (pattern));\n        return bm ( corpus_first, corpus_last );\n    }\n    \n    template <typename patIter, typename CorpusRange>\n    typename boost::lazy_disable_if_c<\n        boost::is_same<CorpusRange, patIter>::value, typename boost::range_iterator<CorpusRange> >\n    ::type\n    boyer_moore_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )\n    {\n        boyer_moore<patIter> bm ( pat_first, pat_last );\n        return bm (boost::begin (corpus), boost::end (corpus));\n    }\n    \n    template <typename PatternRange, typename CorpusRange>\n    typename boost::range_iterator<CorpusRange>::type\n    boyer_moore_search ( CorpusRange &corpus, const PatternRange &pattern )\n    {\n        typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;\n        boyer_moore<pattern_iterator> bm ( boost::begin(pattern), boost::end (pattern));\n        return bm (boost::begin (corpus), boost::end (corpus));\n    }\n\n\n    //  Creator functions -- take a pattern range, return an object\n    template <typename Range>\n    boost::algorithm::boyer_moore<typename boost::range_iterator<const Range>::type>\n    make_boyer_moore ( const Range &r ) {\n        return boost::algorithm::boyer_moore\n            <typename boost::range_iterator<const Range>::type> (boost::begin(r), boost::end(r));\n        }\n    \n    template <typename Range>\n    boost::algorithm::boyer_moore<typename boost::range_iterator<Range>::type>\n    make_boyer_moore ( Range &r ) {\n        return boost::algorithm::boyer_moore\n            <typename boost::range_iterator<Range>::type> (boost::begin(r), boost::end(r));\n        }\n\n}}\n\n#endif  //  BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore_horspool.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2010-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n    For more information, see http://www.boost.org\n*/\n\n#ifndef BOOST_ALGORITHM_BOYER_MOORE_HORSPOOOL_SEARCH_HPP\n#define BOOST_ALGORITHM_BOYER_MOORE_HORSPOOOL_SEARCH_HPP\n\n#include <iterator>     // for std::iterator_traits\n\n#include <boost/assert.hpp>\n#include <boost/static_assert.hpp>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/is_same.hpp>\n\n#include <boost/algorithm/searching/detail/bm_traits.hpp>\n#include <boost/algorithm/searching/detail/debugging.hpp>\n\n// #define  BOOST_ALGORITHM_BOYER_MOORE_HORSPOOL_DEBUG_HPP\n\nnamespace boost { namespace algorithm {\n\n/*\n    A templated version of the boyer-moore-horspool searching algorithm.\n    \n    Requirements:\n        * Random access iterators\n        * The two iterator types (patIter and corpusIter) must \n            \"point to\" the same underlying type.\n        * Additional requirements may be imposed buy the skip table, such as:\n        ** Numeric type (array-based skip table)\n        ** Hashable type (map-based skip table)\n\nhttp://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html\n\n*/\n\n    template <typename patIter, typename traits = detail::BM_traits<patIter> >\n    class boyer_moore_horspool {\n        typedef typename std::iterator_traits<patIter>::difference_type difference_type;\n    public:\n        boyer_moore_horspool ( patIter first, patIter last ) \n                : pat_first ( first ), pat_last ( last ),\n                  k_pattern_length ( std::distance ( pat_first, pat_last )),\n                  skip_ ( k_pattern_length, k_pattern_length ) {\n                  \n        //  Build the skip table\n            std::size_t i = 0;\n            if ( first != last )    // empty pattern?\n                for ( patIter iter = first; iter != last-1; ++iter, ++i )\n                    skip_.insert ( *iter, k_pattern_length - 1 - i );\n#ifdef BOOST_ALGORITHM_BOYER_MOORE_HORSPOOL_DEBUG_HPP\n            skip_.PrintSkipTable ();\n#endif\n            }\n            \n        ~boyer_moore_horspool () {}\n        \n        /// \\fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p )\n        /// \\brief Searches the corpus for the pattern that was passed into the constructor\n        /// \n        /// \\param corpus_first The start of the data to search (Random Access Iterator)\n        /// \\param corpus_last  One past the end of the data to search\n        /// \\param p            A predicate used for the search comparisons.\n        ///\n        template <typename corpusIter>\n        corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {\n            BOOST_STATIC_ASSERT (( boost::is_same<\n                typename std::iterator_traits<patIter>::value_type, \n                typename std::iterator_traits<corpusIter>::value_type>::value ));\n\n            if ( corpus_first == corpus_last ) return corpus_last;  // if nothing to search, we didn't find it!\n            if (    pat_first ==    pat_last ) return corpus_first; // empty pattern matches at start\n\n            const difference_type k_corpus_length  = std::distance ( corpus_first, corpus_last );\n        //  If the pattern is larger than the corpus, we can't find it!\n            if ( k_corpus_length < k_pattern_length )\n                return corpus_last;\n    \n        //  Do the search \n            return this->do_search ( corpus_first, corpus_last );\n            }\n            \n        template <typename Range>\n        typename boost::range_iterator<Range>::type operator () ( Range &r ) const {\n            return (*this) (boost::begin(r), boost::end(r));\n            }\n\n    private:\n/// \\cond DOXYGEN_HIDE\n        patIter pat_first, pat_last;\n        const difference_type k_pattern_length;\n        typename traits::skip_table_t skip_;\n\n        /// \\fn do_search ( corpusIter corpus_first, corpusIter corpus_last )\n        /// \\brief Searches the corpus for the pattern that was passed into the constructor\n        /// \n        /// \\param corpus_first The start of the data to search (Random Access Iterator)\n        /// \\param corpus_last  One past the end of the data to search\n        /// \\param k_corpus_length The length of the corpus to search\n        ///\n        template <typename corpusIter>\n        corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const {\n            corpusIter curPos = corpus_first;\n            const corpusIter lastPos = corpus_last - k_pattern_length;\n            while ( curPos <= lastPos ) {\n            //  Do we match right where we are?\n                std::size_t j = k_pattern_length - 1;\n                while ( pat_first [j] == curPos [j] ) {\n                //  We matched - we're done!\n                    if ( j == 0 )\n                        return curPos;\n                    j--;\n                    }\n        \n                curPos += skip_ [ curPos [ k_pattern_length - 1 ]];\n                }\n            \n            return corpus_last;\n            }\n// \\endcond\n        };\n\n/*  Two ranges as inputs gives us four possibilities; with 2,3,3,4 parameters\n    Use a bit of TMP to disambiguate the 3-argument templates */\n\n/// \\fn boyer_moore_horspool_search ( corpusIter corpus_first, corpusIter corpus_last, \n///       patIter pat_first, patIter pat_last )\n/// \\brief Searches the corpus for the pattern.\n/// \n/// \\param corpus_first The start of the data to search (Random Access Iterator)\n/// \\param corpus_last  One past the end of the data to search\n/// \\param pat_first    The start of the pattern to search for (Random Access Iterator)\n/// \\param pat_last     One past the end of the data to search for\n///\n    template <typename patIter, typename corpusIter>\n    corpusIter boyer_moore_horspool_search ( \n                  corpusIter corpus_first, corpusIter corpus_last, \n                  patIter pat_first, patIter pat_last )\n    {\n        boyer_moore_horspool<patIter> bmh ( pat_first, pat_last );\n        return bmh ( corpus_first, corpus_last );\n    }\n\n    template <typename PatternRange, typename corpusIter>\n    corpusIter boyer_moore_horspool_search ( \n        corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )\n    {\n        typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;\n        boyer_moore_horspool<pattern_iterator> bmh ( boost::begin(pattern), boost::end (pattern));\n        return bmh ( corpus_first, corpus_last );\n    }\n    \n    template <typename patIter, typename CorpusRange>\n    typename boost::lazy_disable_if_c<\n        boost::is_same<CorpusRange, patIter>::value, typename boost::range_iterator<CorpusRange> >\n    ::type\n    boyer_moore_horspool_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )\n    {\n        boyer_moore_horspool<patIter> bmh ( pat_first, pat_last );\n        return bm (boost::begin (corpus), boost::end (corpus));\n    }\n    \n    template <typename PatternRange, typename CorpusRange>\n    typename boost::range_iterator<CorpusRange>::type\n    boyer_moore_horspool_search ( CorpusRange &corpus, const PatternRange &pattern )\n    {\n        typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;\n        boyer_moore_horspool<pattern_iterator> bmh ( boost::begin(pattern), boost::end (pattern));\n        return bmh (boost::begin (corpus), boost::end (corpus));\n    }\n\n\n    //  Creator functions -- take a pattern range, return an object\n    template <typename Range>\n    boost::algorithm::boyer_moore_horspool<typename boost::range_iterator<const Range>::type>\n    make_boyer_moore_horspool ( const Range &r ) {\n        return boost::algorithm::boyer_moore_horspool\n            <typename boost::range_iterator<const Range>::type> (boost::begin(r), boost::end(r));\n        }\n    \n    template <typename Range>\n    boost::algorithm::boyer_moore_horspool<typename boost::range_iterator<Range>::type>\n    make_boyer_moore_horspool ( Range &r ) {\n        return boost::algorithm::boyer_moore_horspool\n            <typename boost::range_iterator<Range>::type> (boost::begin(r), boost::end(r));\n        }\n\n}}\n\n#endif  //  BOOST_ALGORITHM_BOYER_MOORE_HORSPOOOL_SEARCH_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/searching/detail/bm_traits.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2010-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n    For more information, see http://www.boost.org\n*/\n\n#ifndef BOOST_ALGORITHM_SEARCH_DETAIL_BM_TRAITS_HPP\n#define BOOST_ALGORITHM_SEARCH_DETAIL_BM_TRAITS_HPP\n\n#include <climits>      // for CHAR_BIT\n#include <vector>\n#include <iterator>     // for std::iterator_traits\n\n#include <boost/type_traits/make_unsigned.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/type_traits/remove_const.hpp>\n\n#include <boost/array.hpp>\n#ifdef BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#include <boost/unordered_map.hpp>\n#else\n#include <unordered_map>\n#endif\n\n#include <boost/algorithm/searching/detail/debugging.hpp>\n\nnamespace boost { namespace algorithm { namespace detail {\n\n//\n//  Default implementations of the skip tables for B-M and B-M-H\n//\n    template<typename key_type, typename value_type, bool /*useArray*/> class skip_table;\n\n//  General case for data searching other than bytes; use a map\n    template<typename key_type, typename value_type>\n    class skip_table<key_type, value_type, false> {\n    private:\n#ifdef BOOST_NO_CXX11_HDR_UNORDERED_MAP\n        typedef boost::unordered_map<key_type, value_type> skip_map;\n#else\n        typedef std::unordered_map<key_type, value_type> skip_map;\n#endif\n        const value_type k_default_value;\n        skip_map skip_;\n        \n    public:\n        skip_table ( std::size_t patSize, value_type default_value ) \n            : k_default_value ( default_value ), skip_ ( patSize ) {}\n        \n        void insert ( key_type key, value_type val ) {\n            skip_ [ key ] = val;    // Would skip_.insert (val) be better here?\n            }\n\n        value_type operator [] ( key_type key ) const {\n            typename skip_map::const_iterator it = skip_.find ( key );\n            return it == skip_.end () ? k_default_value : it->second;\n            }\n            \n        void PrintSkipTable () const {\n            std::cout << \"BM(H) Skip Table <unordered_map>:\" << std::endl;\n            for ( typename skip_map::const_iterator it = skip_.begin (); it != skip_.end (); ++it )\n                if ( it->second != k_default_value )\n                    std::cout << \"  \" << it->first << \": \" << it->second << std::endl;\n            std::cout << std::endl;\n            }\n        };\n        \n    \n//  Special case small numeric values; use an array\n    template<typename key_type, typename value_type>\n    class skip_table<key_type, value_type, true> {\n    private:\n        typedef typename boost::make_unsigned<key_type>::type unsigned_key_type;\n        typedef boost::array<value_type, 1U << (CHAR_BIT * sizeof(key_type))> skip_map;\n        skip_map skip_;\n        const value_type k_default_value;\n    public:\n        skip_table ( std::size_t patSize, value_type default_value ) : k_default_value ( default_value ) {\n            std::fill_n ( skip_.begin(), skip_.size(), default_value );\n            }\n        \n        void insert ( key_type key, value_type val ) {\n            skip_ [ static_cast<unsigned_key_type> ( key ) ] = val;\n            }\n\n        value_type operator [] ( key_type key ) const {\n            return skip_ [ static_cast<unsigned_key_type> ( key ) ];\n            }\n\n        void PrintSkipTable () const {\n            std::cout << \"BM(H) Skip Table <boost:array>:\" << std::endl;\n            for ( typename skip_map::const_iterator it = skip_.begin (); it != skip_.end (); ++it )\n                if ( *it != k_default_value )\n                    std::cout << \"  \" << std::distance (skip_.begin (), it) << \": \" << *it << std::endl;\n            std::cout << std::endl;\n            }\n        };\n\n    template<typename Iterator>\n    struct BM_traits {\n        typedef typename std::iterator_traits<Iterator>::difference_type value_type;\n        typedef typename std::iterator_traits<Iterator>::value_type key_type;\n        typedef boost::algorithm::detail::skip_table<key_type, value_type, \n                boost::is_integral<key_type>::value && (sizeof(key_type)==1)> skip_table_t;\n        };\n\n}}} // namespaces\n\n#endif  //  BOOST_ALGORITHM_SEARCH_DETAIL_BM_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/searching/detail/debugging.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2010-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n    For more information, see http://www.boost.org\n*/\n\n#ifndef BOOST_ALGORITHM_SEARCH_DETAIL_DEBUG_HPP\n#define BOOST_ALGORITHM_SEARCH_DETAIL_DEBUG_HPP\n\n#include <iostream>\n/// \\cond DOXYGEN_HIDE\n\nnamespace boost { namespace algorithm { namespace detail {\n\n//  Debugging support\n    template <typename Iter>\n    void PrintTable ( Iter first, Iter last ) {\n        std::cout << std::distance ( first, last ) << \": { \";\n        for ( Iter iter = first; iter != last; ++iter )\n            std::cout << *iter << \" \";\n        std::cout << \"}\" << std::endl;\n        }\n    \n}}}\n/// \\endcond\n\n#endif  //  BOOST_ALGORITHM_SEARCH_DETAIL_DEBUG_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/searching/knuth_morris_pratt.hpp",
    "content": "/* \n   Copyright (c) Marshall Clow 2010-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n    For more information, see http://www.boost.org\n*/\n\n#ifndef BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_SEARCH_HPP\n#define BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_SEARCH_HPP\n\n#include <vector>\n#include <iterator>     // for std::iterator_traits\n\n#include <boost/assert.hpp>\n#include <boost/static_assert.hpp>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/is_same.hpp>\n\n#include <boost/algorithm/searching/detail/debugging.hpp>\n\n// #define  BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_DEBUG\n\nnamespace boost { namespace algorithm {\n\n// #define  NEW_KMP\n\n/*\n    A templated version of the Knuth-Morris-Pratt searching algorithm.\n    \n    Requirements:\n        * Random-access iterators\n        * The two iterator types (I1 and I2) must \"point to\" the same underlying type.\n\n    http://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm\n    http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/kmpen.htm\n*/\n\n    template <typename patIter>\n    class knuth_morris_pratt {\n        typedef typename std::iterator_traits<patIter>::difference_type difference_type;\n    public:\n        knuth_morris_pratt ( patIter first, patIter last ) \n                : pat_first ( first ), pat_last ( last ), \n                  k_pattern_length ( std::distance ( pat_first, pat_last )),\n                  skip_ ( k_pattern_length + 1 ) {\n#ifdef NEW_KMP\n            preKmp ( pat_first, pat_last );\n#else\n            init_skip_table ( pat_first, pat_last );\n#endif\n#ifdef BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_DEBUG\n            detail::PrintTable ( skip_.begin (), skip_.end ());\n#endif\n            }\n            \n        ~knuth_morris_pratt () {}\n        \n        /// \\fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p )\n        /// \\brief Searches the corpus for the pattern that was passed into the constructor\n        /// \n        /// \\param corpus_first The start of the data to search (Random Access Iterator)\n        /// \\param corpus_last  One past the end of the data to search\n        /// \\param p            A predicate used for the search comparisons.\n        ///\n        template <typename corpusIter>\n        corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {\n            BOOST_STATIC_ASSERT (( boost::is_same<\n                typename std::iterator_traits<patIter>::value_type, \n                typename std::iterator_traits<corpusIter>::value_type>::value ));\n            if ( corpus_first == corpus_last ) return corpus_last;  // if nothing to search, we didn't find it!\n            if ( pat_first == pat_last )       return corpus_first; // empty pattern matches at start\n\n            const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );\n        //  If the pattern is larger than the corpus, we can't find it!\n            if ( k_corpus_length < k_pattern_length ) \n                return corpus_last;\n\n            return do_search   ( corpus_first, corpus_last, k_corpus_length );\n            }\n    \n        template <typename Range>\n        typename boost::range_iterator<Range>::type operator () ( Range &r ) const {\n            return (*this) (boost::begin(r), boost::end(r));\n            }\n\n    private:\n/// \\cond DOXYGEN_HIDE\n        patIter pat_first, pat_last;\n        const difference_type k_pattern_length;\n        std::vector <difference_type> skip_;\n\n        /// \\fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p )\n        /// \\brief Searches the corpus for the pattern that was passed into the constructor\n        /// \n        /// \\param corpus_first The start of the data to search (Random Access Iterator)\n        /// \\param corpus_last  One past the end of the data to search\n        /// \\param p            A predicate used for the search comparisons.\n        ///\n        template <typename corpusIter>\n        corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last, \n                                                difference_type k_corpus_length ) const {\n            difference_type match_start = 0;  // position in the corpus that we're matching\n            \n#ifdef NEW_KMP\n            int patternIdx = 0;\n            while ( match_start < k_corpus_length ) {\n                while ( patternIdx > -1 && pat_first[patternIdx] != corpus_first [match_start] )\n                    patternIdx = skip_ [patternIdx]; //<--- Shifting the pattern on mismatch\n\n                patternIdx++;\n                match_start++; //<--- corpus is always increased by 1\n\n                if ( patternIdx >= (int) k_pattern_length )\n                    return corpus_first + match_start - patternIdx;\n                }\n            \n#else\n//  At this point, we know:\n//          k_pattern_length <= k_corpus_length\n//          for all elements of skip, it holds -1 .. k_pattern_length\n//      \n//          In the loop, we have the following invariants\n//              idx is in the range 0 .. k_pattern_length\n//              match_start is in the range 0 .. k_corpus_length - k_pattern_length + 1\n\n            const difference_type last_match = k_corpus_length - k_pattern_length;\n            difference_type idx = 0;          // position in the pattern we're comparing\n\n            while ( match_start <= last_match ) {\n                while ( pat_first [ idx ] == corpus_first [ match_start + idx ] ) {\n                    if ( ++idx == k_pattern_length )\n                        return corpus_first + match_start;\n                    }\n            //  Figure out where to start searching again\n           //   assert ( idx - skip_ [ idx ] > 0 ); // we're always moving forward\n                match_start += idx - skip_ [ idx ];\n                idx = skip_ [ idx ] >= 0 ? skip_ [ idx ] : 0;\n           //   assert ( idx >= 0 && idx < k_pattern_length );\n                }\n#endif\n                \n        //  We didn't find anything\n            return corpus_last;\n            }\n    \n\n        void preKmp ( patIter first, patIter last ) {\n           const /*std::size_t*/ int count = std::distance ( first, last );\n        \n           int i, j;\n        \n           i = 0;\n           j = skip_[0] = -1;\n           while (i < count) {\n              while (j > -1 && first[i] != first[j])\n                 j = skip_[j];\n              i++;\n              j++;\n              if (first[i] == first[j])\n                 skip_[i] = skip_[j];\n              else\n                 skip_[i] = j;\n           }\n        }\n\n\n        void init_skip_table ( patIter first, patIter last ) {\n            const difference_type count = std::distance ( first, last );\n    \n            int j;\n            skip_ [ 0 ] = -1;\n            for ( int i = 1; i <= count; ++i ) {\n                j = skip_ [ i - 1 ];\n                while ( j >= 0 ) {\n                    if ( first [ j ] == first [ i - 1 ] )\n                        break;\n                    j = skip_ [ j ];\n                    }\n                skip_ [ i ] = j + 1;\n                }\n            }\n// \\endcond\n        };\n\n\n/*  Two ranges as inputs gives us four possibilities; with 2,3,3,4 parameters\n    Use a bit of TMP to disambiguate the 3-argument templates */\n\n/// \\fn knuth_morris_pratt_search ( corpusIter corpus_first, corpusIter corpus_last, \n///       patIter pat_first, patIter pat_last )\n/// \\brief Searches the corpus for the pattern.\n/// \n/// \\param corpus_first The start of the data to search (Random Access Iterator)\n/// \\param corpus_last  One past the end of the data to search\n/// \\param pat_first    The start of the pattern to search for (Random Access Iterator)\n/// \\param pat_last     One past the end of the data to search for\n///\n    template <typename patIter, typename corpusIter>\n    corpusIter knuth_morris_pratt_search ( \n                  corpusIter corpus_first, corpusIter corpus_last, \n                  patIter pat_first, patIter pat_last )\n    {\n        knuth_morris_pratt<patIter> kmp ( pat_first, pat_last );\n        return kmp ( corpus_first, corpus_last );\n    }\n\n    template <typename PatternRange, typename corpusIter>\n    corpusIter knuth_morris_pratt_search ( \n        corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )\n    {\n        typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;\n        knuth_morris_pratt<pattern_iterator> kmp ( boost::begin(pattern), boost::end (pattern));\n        return kmp ( corpus_first, corpus_last );\n    }\n    \n    template <typename patIter, typename CorpusRange>\n    typename boost::lazy_disable_if_c<\n        boost::is_same<CorpusRange, patIter>::value, typename boost::range_iterator<CorpusRange> >\n    ::type\n    knuth_morris_pratt_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )\n    {\n        knuth_morris_pratt<patIter> kmp ( pat_first, pat_last );\n        return kmp (boost::begin (corpus), boost::end (corpus));\n    }\n    \n    template <typename PatternRange, typename CorpusRange>\n    typename boost::range_iterator<CorpusRange>::type\n    knuth_morris_pratt_search ( CorpusRange &corpus, const PatternRange &pattern )\n    {\n        typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;\n        knuth_morris_pratt<pattern_iterator> kmp ( boost::begin(pattern), boost::end (pattern));\n        return kmp (boost::begin (corpus), boost::end (corpus));\n    }\n\n\n    //  Creator functions -- take a pattern range, return an object\n    template <typename Range>\n    boost::algorithm::knuth_morris_pratt<typename boost::range_iterator<const Range>::type>\n    make_knuth_morris_pratt ( const Range &r ) {\n        return boost::algorithm::knuth_morris_pratt\n            <typename boost::range_iterator<const Range>::type> (boost::begin(r), boost::end(r));\n        }\n    \n    template <typename Range>\n    boost::algorithm::knuth_morris_pratt<typename boost::range_iterator<Range>::type>\n    make_knuth_morris_pratt ( Range &r ) {\n        return boost::algorithm::knuth_morris_pratt\n            <typename boost::range_iterator<Range>::type> (boost::begin(r), boost::end(r));\n        }\n}}\n\n#endif  // BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_SEARCH_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/case_conv.hpp",
    "content": "//  Boost string_algo library case_conv.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CASE_CONV_HPP\n#define BOOST_STRING_CASE_CONV_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <algorithm>\n#include <locale>\n#include <boost/iterator/transform_iterator.hpp>\n\n#include <boost/range/as_literal.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/value_type.hpp>\n\n#include <boost/algorithm/string/detail/case_conv.hpp>\n\n/*! \\file\n    Defines sequence case-conversion algorithms.\n    Algorithms convert each element in the input sequence to the\n    desired case using provided locales.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  to_lower  -----------------------------------------------//\n\n        //! Convert to lower case\n        /*!\n            Each element of the input sequence is converted to lower\n            case. The result is a copy of the input converted to lower case.\n            It is returned as a sequence or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input range\n            \\param Loc A locale used for conversion\n            \\return \n                An output iterator pointing just after the last inserted character or\n                a copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n                \n        */\n        template<typename OutputIteratorT, typename RangeT>\n        inline OutputIteratorT \n        to_lower_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::detail::transform_range_copy( \n               Output,\n               ::boost::as_literal(Input),\n               ::boost::algorithm::detail::to_lowerF<\n                    typename range_value<RangeT>::type >(Loc));\n        }\n\n        //! Convert to lower case\n        /*!\n            \\overload\n        */\n        template<typename SequenceT>\n        inline SequenceT to_lower_copy( \n            const SequenceT& Input, \n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::detail::transform_range_copy<SequenceT>(\n                Input,\n                ::boost::algorithm::detail::to_lowerF<\n                    typename range_value<SequenceT>::type >(Loc));\n        }\n\n        //! Convert to lower case\n        /*!\n            Each element of the input sequence is converted to lower\n            case. The input sequence is modified in-place.\n\n            \\param Input A range\n            \\param Loc a locale used for conversion\n        */\n        template<typename WritableRangeT>\n        inline void to_lower( \n            WritableRangeT& Input, \n            const std::locale& Loc=std::locale())\n        {\n            ::boost::algorithm::detail::transform_range(\n                ::boost::as_literal(Input),\n                ::boost::algorithm::detail::to_lowerF<\n                    typename range_value<WritableRangeT>::type >(Loc));\n        }\n        \n//  to_upper  -----------------------------------------------//\n\n        //! Convert to upper case\n        /*!\n            Each element of the input sequence is converted to upper\n            case. The result is a copy of the input converted to upper case.\n            It is returned as a sequence or copied to the output iterator\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input range\n            \\param Loc A locale used for conversion\n            \\return \n                An output iterator pointing just after the last inserted character or\n                a copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<typename OutputIteratorT, typename RangeT>\n        inline OutputIteratorT \n        to_upper_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::detail::transform_range_copy( \n               Output,\n               ::boost::as_literal(Input),\n               ::boost::algorithm::detail::to_upperF<\n                    typename range_value<RangeT>::type >(Loc));\n        }\n\n        //! Convert to upper case\n        /*!\n            \\overload\n        */\n        template<typename SequenceT>\n        inline SequenceT to_upper_copy( \n            const SequenceT& Input, \n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::detail::transform_range_copy<SequenceT>(\n                Input,\n                ::boost::algorithm::detail::to_upperF<\n                    typename range_value<SequenceT>::type >(Loc));\n        }\n\n        //! Convert to upper case\n        /*!\n            Each element of the input sequence is converted to upper\n            case. The input sequence is modified in-place.\n\n            \\param Input An input range\n            \\param Loc a locale used for conversion\n        */\n        template<typename WritableRangeT>\n        inline void to_upper( \n            WritableRangeT& Input, \n            const std::locale& Loc=std::locale())\n        {\n            ::boost::algorithm::detail::transform_range(\n                ::boost::as_literal(Input),\n                ::boost::algorithm::detail::to_upperF<\n                    typename range_value<WritableRangeT>::type >(Loc));\n        }\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::to_lower;\n    using algorithm::to_lower_copy;\n    using algorithm::to_upper;\n    using algorithm::to_upper_copy;\n\n} // namespace boost\n\n#endif  // BOOST_STRING_CASE_CONV_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/classification.hpp",
    "content": "//  Boost string_algo library classification.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CLASSIFICATION_HPP\n#define BOOST_STRING_CLASSIFICATION_HPP\n\n#include <algorithm>\n#include <locale>\n#include <boost/range/value_type.hpp>\n#include <boost/range/as_literal.hpp>\n#include <boost/algorithm/string/detail/classification.hpp>\n#include <boost/algorithm/string/predicate_facade.hpp>\n\n\n/*! \\file\n    Classification predicates are included in the library to give \n    some more convenience when using algorithms like \\c trim() and \\c all(). \n    They wrap functionality of STL classification functions ( e.g. \\c std::isspace() )\n    into generic functors. \n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  classification functor generator -------------------------------------//\n\n        //! is_classified predicate\n        /*!\n            Construct the \\c is_classified predicate. This predicate holds if the input is\n            of specified \\c std::ctype category.\n\n            \\param Type A \\c std::ctype category\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF\n        is_classified(std::ctype_base::mask Type, const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(Type, Loc);\n        }\n\n        //! is_space predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::space category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate\n        */\n        inline detail::is_classifiedF \n        is_space(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::space, Loc);\n        }\n\n        //! is_alnum predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::alnum category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF \n        is_alnum(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::alnum, Loc);\n        }\n\n        //! is_alpha predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::alpha category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF \n        is_alpha(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::alpha, Loc);\n        }\n\n        //! is_cntrl predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::cntrl category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF \n        is_cntrl(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::cntrl, Loc);\n        }\n\n        //! is_digit predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::digit category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF \n        is_digit(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::digit, Loc);\n        }\n\n        //! is_graph predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::graph category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF\n        is_graph(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::graph, Loc);\n        }\n\n        //! is_lower predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::lower category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of \\c is_classified predicate \n        */\n        inline detail::is_classifiedF \n        is_lower(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::lower, Loc);\n        }\n\n        //! is_print predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::print category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF \n        is_print(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::print, Loc);\n        }\n\n        //! is_punct predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::punct category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF \n        is_punct(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::punct, Loc);\n        }\n\n        //! is_upper predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::upper category.   \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF \n        is_upper(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::upper, Loc);\n        }\n\n        //! is_xdigit predicate\n        /*!\n            Construct the \\c is_classified predicate for the \\c ctype_base::xdigit category.  \n\n            \\param Loc A locale used for classification\n            \\return An instance of the \\c is_classified predicate \n        */\n        inline detail::is_classifiedF \n        is_xdigit(const std::locale& Loc=std::locale())\n        {\n            return detail::is_classifiedF(std::ctype_base::xdigit, Loc);\n        }\n\n        //! is_any_of predicate\n        /*!\n            Construct the \\c is_any_of predicate. The predicate holds if the input\n            is included in the specified set of characters.\n\n            \\param Set A set of characters to be recognized\n            \\return An instance of the \\c is_any_of predicate \n        */\n        template<typename RangeT>\n        inline detail::is_any_ofF<\n            BOOST_STRING_TYPENAME range_value<RangeT>::type> \n        is_any_of( const RangeT& Set )\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_set(boost::as_literal(Set));\n            return detail::is_any_ofF<BOOST_STRING_TYPENAME range_value<RangeT>::type>(lit_set); \n        }\n\n        //! is_from_range predicate\n        /*!\n            Construct the \\c is_from_range predicate. The predicate holds if the input\n            is included in the specified range. (i.e. From <= Ch <= To )\n\n            \\param From The start of the range\n            \\param To The end of the range\n            \\return An instance of the \\c is_from_range predicate \n        */\n        template<typename CharT>\n        inline detail::is_from_rangeF<CharT> is_from_range(CharT From, CharT To)\n        {\n            return detail::is_from_rangeF<CharT>(From,To); \n        }\n        \n        // predicate combinators ---------------------------------------------------//\n\n        //! predicate 'and' composition predicate\n        /*!\n            Construct the \\c class_and predicate. This predicate can be used\n            to logically combine two classification predicates. \\c class_and holds,\n            if both predicates return true.\n\n            \\param Pred1 The first predicate\n            \\param Pred2 The second predicate\n            \\return An instance of the \\c class_and predicate     \n        */\n        template<typename Pred1T, typename Pred2T>\n        inline detail::pred_andF<Pred1T, Pred2T>\n        operator&&( \n            const predicate_facade<Pred1T>& Pred1, \n            const predicate_facade<Pred2T>& Pred2 )\n        {    \n            // Doing the static_cast with the pointer instead of the reference\n            // is a workaround for some compilers which have problems with\n            // static_cast's of template references, i.e. CW8. /grafik/\n            return detail::pred_andF<Pred1T,Pred2T>(\n                *static_cast<const Pred1T*>(&Pred1), \n                *static_cast<const Pred2T*>(&Pred2) );\n        }\n\n        //! predicate 'or' composition predicate\n        /*!\n            Construct the \\c class_or predicate. This predicate can be used\n            to logically combine two classification predicates. \\c class_or holds,\n            if one of the predicates return true.\n\n            \\param Pred1 The first predicate\n            \\param Pred2 The second predicate\n            \\return An instance of the \\c class_or predicate     \n        */\n        template<typename Pred1T, typename Pred2T>\n        inline detail::pred_orF<Pred1T, Pred2T>\n        operator||( \n            const predicate_facade<Pred1T>& Pred1, \n            const predicate_facade<Pred2T>& Pred2 )\n        {    \n            // Doing the static_cast with the pointer instead of the reference\n            // is a workaround for some compilers which have problems with\n            // static_cast's of template references, i.e. CW8. /grafik/\n            return detail::pred_orF<Pred1T,Pred2T>(\n                *static_cast<const Pred1T*>(&Pred1), \n                *static_cast<const Pred2T*>(&Pred2));\n        }\n\n        //! predicate negation operator\n        /*!\n            Construct the \\c class_not predicate. This predicate represents a negation. \n            \\c class_or holds if of the predicates return false.\n\n            \\param Pred The predicate to be negated\n            \\return An instance of the \\c class_not predicate     \n        */\n        template<typename PredT>\n        inline detail::pred_notF<PredT>\n        operator!( const predicate_facade<PredT>& Pred )\n        {\n            // Doing the static_cast with the pointer instead of the reference\n            // is a workaround for some compilers which have problems with\n            // static_cast's of template references, i.e. CW8. /grafik/\n            return detail::pred_notF<PredT>(*static_cast<const PredT*>(&Pred)); \n        }\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::is_classified;\n    using algorithm::is_space;\n    using algorithm::is_alnum;\n    using algorithm::is_alpha;\n    using algorithm::is_cntrl;\n    using algorithm::is_digit;\n    using algorithm::is_graph;\n    using algorithm::is_lower;\n    using algorithm::is_upper;\n    using algorithm::is_print;\n    using algorithm::is_punct;\n    using algorithm::is_xdigit;\n    using algorithm::is_any_of;\n    using algorithm::is_from_range;\n\n} // namespace boost\n\n#endif  // BOOST_STRING_PREDICATE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/compare.hpp",
    "content": "//  Boost string_algo library compare.hpp header file  -------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_COMPARE_HPP\n#define BOOST_STRING_COMPARE_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <locale>\n\n/*! \\file\n    Defines element comparison predicates. Many algorithms in this library can\n    take an additional argument with a predicate used to compare elements.\n    This makes it possible, for instance, to have case insensitive versions\n    of the algorithms.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n        //  is_equal functor  -----------------------------------------------//\n\n        //! is_equal functor\n        /*!\n            Standard STL equal_to only handle comparison between arguments\n            of the same type. This is a less restrictive version which wraps operator ==.\n        */\n        struct is_equal\n        {\n            //! Function operator\n            /*!\n                Compare two operands for equality\n            */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                return Arg1==Arg2;\n            }\n        };\n\n        //! case insensitive version of is_equal\n        /*!\n            Case insensitive comparison predicate. Comparison is done using\n            specified locales.\n        */\n        struct is_iequal\n        {\n            //! Constructor\n            /*!\n                \\param Loc locales used for comparison\n            */\n            is_iequal( const std::locale& Loc=std::locale() ) :\n                m_Loc( Loc ) {}\n\n            //! Function operator\n            /*!\n                Compare two operands. Case is ignored.\n            */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)\n                    return std::toupper(Arg1)==std::toupper(Arg2);\n                #else\n                    return std::toupper<T1>(Arg1,m_Loc)==std::toupper<T2>(Arg2,m_Loc);\n                #endif\n            }\n\n        private:\n            std::locale m_Loc;\n        };\n\n        //  is_less functor  -----------------------------------------------//\n\n        //! is_less functor\n        /*!\n            Convenient version of standard std::less. Operation is templated, therefore it is \n            not required to specify the exact types upon the construction\n         */\n        struct is_less\n        {\n            //! Functor operation\n            /*!\n                Compare two operands using > operator\n             */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                return Arg1<Arg2;\n            }\n        };\n\n\n        //! case insensitive version of is_less\n        /*!\n            Case insensitive comparison predicate. Comparison is done using\n            specified locales.\n        */\n        struct is_iless\n        {\n            //! Constructor\n            /*!\n                \\param Loc locales used for comparison\n            */\n            is_iless( const std::locale& Loc=std::locale() ) :\n                m_Loc( Loc ) {}\n\n            //! Function operator\n            /*!\n                Compare two operands. Case is ignored.\n            */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)\n                    return std::toupper(Arg1)<std::toupper(Arg2);\n                #else\n                    return std::toupper<T1>(Arg1,m_Loc)<std::toupper<T2>(Arg2,m_Loc);\n                #endif\n            }\n\n        private:\n            std::locale m_Loc;\n        };\n\n        //  is_not_greater functor  -----------------------------------------------//\n\n        //! is_not_greater functor\n        /*!\n            Convenient version of standard std::not_greater_to. Operation is templated, therefore it is \n            not required to specify the exact types upon the construction\n         */\n        struct is_not_greater\n        {\n            //! Functor operation\n            /*!\n                Compare two operands using > operator\n             */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                return Arg1<=Arg2;\n            }\n        };\n\n\n        //! case insensitive version of is_not_greater\n        /*!\n            Case insensitive comparison predicate. Comparison is done using\n            specified locales.\n        */\n        struct is_not_igreater\n        {\n            //! Constructor\n            /*!\n                \\param Loc locales used for comparison\n            */\n            is_not_igreater( const std::locale& Loc=std::locale() ) :\n                m_Loc( Loc ) {}\n\n            //! Function operator\n            /*!\n                Compare two operands. Case is ignored.\n            */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)\n                    return std::toupper(Arg1)<=std::toupper(Arg2);\n                #else\n                    return std::toupper<T1>(Arg1,m_Loc)<=std::toupper<T2>(Arg2,m_Loc);\n                #endif\n            }\n\n        private:\n            std::locale m_Loc;\n        };\n\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::is_equal;\n    using algorithm::is_iequal;\n    using algorithm::is_less;\n    using algorithm::is_iless;\n    using algorithm::is_not_greater;\n    using algorithm::is_not_igreater;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_COMPARE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/concept.hpp",
    "content": "//  Boost string_algo library concept.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CONCEPT_HPP\n#define BOOST_STRING_CONCEPT_HPP\n\n#include <boost/concept_check.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\n/*! \\file \n    Defines concepts used in string_algo library\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n        //! Finder concept\n        /*!\n            Defines the Finder concept. Finder is a functor which selects\n            an arbitrary part of a string. Search is performed on\n            the range specified by starting and ending iterators.\n\n            Result of the find operation must be convertible to iterator_range.\n        */\n        template<typename FinderT, typename IteratorT>\n        struct FinderConcept\n        {\n        private:\n            typedef iterator_range<IteratorT> range;\n        public:\n            void constraints()\n            {\n                // Operation\n                r=(*pF)(i,i);\n            }\n        private:\n            range r;\n            IteratorT i;\n            FinderT* pF;    \n        }; // Finder_concept\n\n        \n        //! Formatter concept\n        /*!\n            Defines the Formatter concept. Formatter is a functor, which\n            takes a result from a finder operation and transforms it\n            in a specific way.\n\n            Result must be a container supported by container_traits, \n            or a reference to it.\n        */\n        template<typename FormatterT, typename FinderT, typename IteratorT>\n        struct FormatterConcept\n        {\n        public:\n            void constraints()\n            {\n                // Operation\n                ::boost::begin((*pFo)( (*pF)(i,i) ));\n                ::boost::end((*pFo)( (*pF)(i,i) ));\n            }\n        private:\n            IteratorT i;\n            FinderT* pF;\n            FormatterT *pFo;\n        }; // FormatterConcept;\n\n    } // namespace algorithm\n} // namespace boost\n\n\n\n\n#endif  // BOOST_STRING_CONCEPT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/config.hpp",
    "content": "//  Boost string_algo library config.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CONFIG_HPP\n#define BOOST_STRING_CONFIG_HPP\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifdef BOOST_STRING_DEDUCED_TYPENAME\n#   error \"macro already defined!\"\n#endif\n\n#define BOOST_STRING_TYPENAME BOOST_DEDUCED_TYPENAME\n\n// Metrowerks workaround\n#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x\n#pragma parse_func_templ off\n#endif\n\n#endif  // BOOST_STRING_CONFIG_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/constants.hpp",
    "content": "//  Boost string_algo library constants.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CONSTANTS_HPP\n#define BOOST_STRING_CONSTANTS_HPP\n\nnamespace boost {\n    namespace algorithm {\n\n    //! Token compression mode \n    /*!\n        Specifies token compression mode for the token_finder.\n    */\n    enum token_compress_mode_type\n    {\n        token_compress_on,    //!< Compress adjacent tokens\n        token_compress_off  //!< Do not compress adjacent tokens\n    };\n    \n    } // namespace algorithm\n\n    // pull the names to the boost namespace\n    using algorithm::token_compress_on;\n    using algorithm::token_compress_off;\n\n} // namespace boost\n\n#endif  // BOOST_STRING_CONSTANTS_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/case_conv.hpp",
    "content": "//  Boost string_algo library string_funct.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CASE_CONV_DETAIL_HPP\n#define BOOST_STRING_CASE_CONV_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <locale>\n#include <functional>\n\n#include <boost/type_traits/make_unsigned.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  case conversion functors -----------------------------------------------//\n\n#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)\n#pragma warning(push)\n#pragma warning(disable:4512) //assignment operator could not be generated\n#endif\n\n            // a tolower functor\n            template<typename CharT>\n            struct to_lowerF : public std::unary_function<CharT, CharT>\n            {\n                // Constructor\n                to_lowerF( const std::locale& Loc ) : m_Loc( &Loc ) {}\n\n                // Operation\n                CharT operator ()( CharT Ch ) const\n                {\n                    #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)\n                        return std::tolower( static_cast<typename boost::make_unsigned <CharT>::type> ( Ch ));\n                    #else\n                        return std::tolower<CharT>( Ch, *m_Loc );\n                    #endif\n                }\n            private:\n                const std::locale* m_Loc;\n            };\n\n            // a toupper functor\n            template<typename CharT>\n            struct to_upperF : public std::unary_function<CharT, CharT>\n            {\n                // Constructor\n                to_upperF( const std::locale& Loc ) : m_Loc( &Loc ) {}\n\n                // Operation\n                CharT operator ()( CharT Ch ) const\n                {\n                    #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)\n                        return std::toupper( static_cast<typename boost::make_unsigned <CharT>::type> ( Ch ));\n                    #else\n                        return std::toupper<CharT>( Ch, *m_Loc );\n                    #endif\n                }\n            private:\n                const std::locale* m_Loc;\n            };\n\n#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)\n#pragma warning(pop)\n#endif\n\n// algorithm implementation -------------------------------------------------------------------------\n\n            // Transform a range\n            template<typename OutputIteratorT, typename RangeT, typename FunctorT>\n            OutputIteratorT transform_range_copy(\n                OutputIteratorT Output,\n                const RangeT& Input,\n                FunctorT Functor)\n            {\n                return std::transform( \n                    ::boost::begin(Input), \n                    ::boost::end(Input), \n                    Output,\n                    Functor);\n            }\n\n            // Transform a range (in-place)\n            template<typename RangeT, typename FunctorT>\n            void transform_range(\n                const RangeT& Input,\n                FunctorT Functor)\n            {\n                std::transform( \n                    ::boost::begin(Input), \n                    ::boost::end(Input), \n                    ::boost::begin(Input),\n                    Functor);\n            }\n\n            template<typename SequenceT, typename RangeT, typename FunctorT>\n            inline SequenceT transform_range_copy( \n                const RangeT& Input, \n                FunctorT Functor)\n            {\n                return SequenceT(\n                    ::boost::make_transform_iterator(\n                        ::boost::begin(Input),\n                        Functor),\n                    ::boost::make_transform_iterator(\n                        ::boost::end(Input), \n                        Functor));\n            }\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_CASE_CONV_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/classification.hpp",
    "content": "//  Boost string_algo library classification.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n// \n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CLASSIFICATION_DETAIL_HPP\n#define BOOST_STRING_CLASSIFICATION_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <algorithm>\n#include <functional>\n#include <locale>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\n#include <boost/algorithm/string/predicate_facade.hpp>\n#include <boost/type_traits/remove_const.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  classification functors -----------------------------------------------//\n\n   // is_classified functor\n            struct is_classifiedF :\n                public predicate_facade<is_classifiedF>\n            {\n                // Boost.ResultOf support\n                typedef bool result_type;\n\n                // Constructor from a locale\n                is_classifiedF(std::ctype_base::mask Type, std::locale const & Loc = std::locale()) :\n                    m_Type(Type), m_Locale(Loc) {}\n                // Operation\n                template<typename CharT>\n                bool operator()( CharT Ch ) const\n                {\n                    return std::use_facet< std::ctype<CharT> >(m_Locale).is( m_Type, Ch );\n                }\n\n                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x582) && !defined(_USE_OLD_RW_STL)\n                    template<>\n                    bool operator()( char const Ch ) const\n                    {\n                        return std::use_facet< std::ctype<char> >(m_Locale).is( m_Type, Ch );\n                    }\n                #endif\n\n            private:\n                std::ctype_base::mask m_Type;\n                std::locale m_Locale;\n            };\n\n\n            // is_any_of functor\n            /*\n                returns true if the value is from the specified set\n            */\n            template<typename CharT>\n            struct is_any_ofF :\n                public predicate_facade<is_any_ofF<CharT> >\n            {\n            private:\n                // set cannot operate on const value-type\n                typedef typename ::boost::remove_const<CharT>::type set_value_type;\n\n            public:     \n                // Boost.ResultOf support\n                typedef bool result_type;\n\n                // Constructor\n                template<typename RangeT>\n                is_any_ofF( const RangeT& Range ) : m_Size(0)\n                {\n                    // Prepare storage\n                    m_Storage.m_dynSet=0;\n\n                    std::size_t Size=::boost::distance(Range);\n                    m_Size=Size;\n                    set_value_type* Storage=0;\n\n                    if(use_fixed_storage(m_Size))\n                    {\n                        // Use fixed storage\n                        Storage=&m_Storage.m_fixSet[0];\n                    }\n                    else\n                    {\n                        // Use dynamic storage\n                        m_Storage.m_dynSet=new set_value_type[m_Size];\n                        Storage=m_Storage.m_dynSet;\n                    }\n\n                    // Use fixed storage\n                    ::std::copy(::boost::begin(Range), ::boost::end(Range), Storage);\n                    ::std::sort(Storage, Storage+m_Size);\n                }\n\n                // Copy constructor\n                is_any_ofF(const is_any_ofF& Other) : m_Size(Other.m_Size)\n                {\n                    // Prepare storage\n                    m_Storage.m_dynSet=0;               \n                    const set_value_type* SrcStorage=0;\n                    set_value_type* DestStorage=0;\n\n                    if(use_fixed_storage(m_Size))\n                    {\n                        // Use fixed storage\n                        DestStorage=&m_Storage.m_fixSet[0];\n                        SrcStorage=&Other.m_Storage.m_fixSet[0];\n                    }\n                    else\n                    {\n                        // Use dynamic storage\n                        m_Storage.m_dynSet=new set_value_type[m_Size];\n                        DestStorage=m_Storage.m_dynSet;\n                        SrcStorage=Other.m_Storage.m_dynSet;\n                    }\n\n                    // Use fixed storage\n                    ::std::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);\n                }\n\n                // Destructor\n                ~is_any_ofF()\n                {\n                    if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)\n                    {\n                        delete [] m_Storage.m_dynSet;\n                    }\n                }\n\n                // Assignment\n                is_any_ofF& operator=(const is_any_ofF& Other)\n                {\n                    // Handle self assignment\n                    if(this==&Other) return *this;\n\n                    // Prepare storage             \n                    const set_value_type* SrcStorage;\n                    set_value_type* DestStorage;\n\n                    if(use_fixed_storage(Other.m_Size))\n                    {\n                        // Use fixed storage\n                        DestStorage=&m_Storage.m_fixSet[0];\n                        SrcStorage=&Other.m_Storage.m_fixSet[0];\n\n                        // Delete old storage if was present\n                        if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)\n                        {\n                            delete [] m_Storage.m_dynSet;\n                        }\n\n                        // Set new size\n                        m_Size=Other.m_Size;\n                    }\n                    else\n                    {\n                        // Other uses dynamic storage\n                        SrcStorage=Other.m_Storage.m_dynSet;\n\n                        // Check what kind of storage are we using right now\n                        if(use_fixed_storage(m_Size))\n                        {\n                            // Using fixed storage, allocate new\n                            set_value_type* pTemp=new set_value_type[Other.m_Size];\n                            DestStorage=pTemp;\n                            m_Storage.m_dynSet=pTemp;\n                            m_Size=Other.m_Size;\n                        }\n                        else\n                        {\n                            // Using dynamic storage, check if can reuse\n                            if(m_Storage.m_dynSet!=0 && m_Size>=Other.m_Size && m_Size<Other.m_Size*2)\n                            {\n                                // Reuse the current storage\n                                DestStorage=m_Storage.m_dynSet;\n                                m_Size=Other.m_Size;\n                            }\n                            else\n                            {\n                                // Allocate the new one\n                                set_value_type* pTemp=new set_value_type[Other.m_Size];\n                                DestStorage=pTemp;\n                        \n                                // Delete old storage if necessary\n                                if(m_Storage.m_dynSet!=0)\n                                {\n                                    delete [] m_Storage.m_dynSet;\n                                }\n                                // Store the new storage\n                                m_Storage.m_dynSet=pTemp;\n                                // Set new size\n                                m_Size=Other.m_Size;\n                            }\n                        }\n                    }\n\n                    // Copy the data\n                    ::std::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);\n\n                    return *this;\n                }\n\n                // Operation\n                template<typename Char2T>\n                bool operator()( Char2T Ch ) const\n                {\n                    const set_value_type* Storage=\n                        (use_fixed_storage(m_Size))\n                        ? &m_Storage.m_fixSet[0]\n                        : m_Storage.m_dynSet;\n\n                    return ::std::binary_search(Storage, Storage+m_Size, Ch);\n                }\n            private:\n                // check if the size is eligible for fixed storage\n                static bool use_fixed_storage(std::size_t size)\n                {\n                    return size<=sizeof(set_value_type*)*2;\n                }\n\n\n            private:\n                // storage\n                // The actual used storage is selected on the type\n                union\n                {\n                    set_value_type* m_dynSet;\n                    set_value_type m_fixSet[sizeof(set_value_type*)*2];\n                } \n                m_Storage;\n        \n                // storage size\n                ::std::size_t m_Size;\n            };\n\n            // is_from_range functor\n            /*\n                returns true if the value is from the specified range.\n                (i.e. x>=From && x>=To)\n            */\n            template<typename CharT>\n            struct is_from_rangeF :\n                public predicate_facade< is_from_rangeF<CharT> >\n            {\n                // Boost.ResultOf support\n                typedef bool result_type;\n\n                // Constructor\n                is_from_rangeF( CharT From, CharT To ) : m_From(From), m_To(To) {}\n\n                // Operation\n                template<typename Char2T>\n                bool operator()( Char2T Ch ) const\n                {\n                    return ( m_From <= Ch ) && ( Ch <= m_To );\n                }\n\n            private:\n                CharT m_From;\n                CharT m_To;\n            };\n\n            // class_and composition predicate\n            template<typename Pred1T, typename Pred2T>\n            struct pred_andF :\n                public predicate_facade< pred_andF<Pred1T,Pred2T> >\n            {\n            public:\n\n                // Boost.ResultOf support\n                typedef bool result_type;\n\n                // Constructor\n                pred_andF( Pred1T Pred1, Pred2T Pred2 ) :\n                    m_Pred1(Pred1), m_Pred2(Pred2) {}\n\n                // Operation\n                template<typename CharT>\n                bool operator()( CharT Ch ) const\n                {\n                    return m_Pred1(Ch) && m_Pred2(Ch);\n                }\n\n            private:\n                Pred1T m_Pred1;\n                Pred2T m_Pred2;\n            };\n\n            // class_or composition predicate\n            template<typename Pred1T, typename Pred2T>\n            struct pred_orF :\n                public predicate_facade< pred_orF<Pred1T,Pred2T> >\n            {\n            public:\n                // Boost.ResultOf support\n                typedef bool result_type;\n\n                // Constructor\n                pred_orF( Pred1T Pred1, Pred2T Pred2 ) :\n                    m_Pred1(Pred1), m_Pred2(Pred2) {}\n\n                // Operation\n                template<typename CharT>\n                bool operator()( CharT Ch ) const\n                {\n                    return m_Pred1(Ch) || m_Pred2(Ch);\n                }\n\n            private:\n                Pred1T m_Pred1;\n                Pred2T m_Pred2;\n            };\n\n            // class_not composition predicate\n            template< typename PredT >\n            struct pred_notF :\n                public predicate_facade< pred_notF<PredT> >\n            {\n            public:\n                // Boost.ResultOf support\n                typedef bool result_type;\n\n                // Constructor\n                pred_notF( PredT Pred ) : m_Pred(Pred) {}\n\n                // Operation\n                template<typename CharT>\n                bool operator()( CharT Ch ) const\n                {\n                    return !m_Pred(Ch);\n                }\n\n            private:\n                PredT m_Pred;\n            };\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_CLASSIFICATION_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/find_format.hpp",
    "content": "//  Boost string_algo library find_format.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n// \n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_FORMAT_DETAIL_HPP\n#define BOOST_STRING_FIND_FORMAT_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/algorithm/string/detail/find_format_store.hpp>\n#include <boost/algorithm/string/detail/replace_storage.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n// find_format_copy (iterator variant) implementation -------------------------------//\n\n           template< \n                typename OutputIteratorT,\n                typename InputT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline OutputIteratorT find_format_copy_impl2(\n                OutputIteratorT Output,\n                const InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult )\n            {       \n                typedef find_format_store<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<InputT>::type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                if ( !M )\n                {\n                    // Match not found - return original sequence\n                    Output = std::copy( ::boost::begin(Input), ::boost::end(Input), Output );\n                    return Output;\n                }\n\n                // Copy the beginning of the sequence\n                Output = std::copy( ::boost::begin(Input), ::boost::begin(M), Output );\n                // Format find result\n                // Copy formatted result\n                Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );\n                // Copy the rest of the sequence\n                Output = std::copy( M.end(), ::boost::end(Input), Output );\n\n                return Output;\n            }\n\n            template< \n                typename OutputIteratorT,\n                typename InputT,\n                typename FormatterT,\n                typename FindResultT >\n            inline OutputIteratorT find_format_copy_impl(\n                OutputIteratorT Output,\n                const InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult )\n            {   \n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    return ::boost::algorithm::detail::find_format_copy_impl2( \n                        Output,\n                        Input,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                } else {\n                    return std::copy( ::boost::begin(Input), ::boost::end(Input), Output );\n                }\n            }\n\n \n// find_format_copy implementation --------------------------------------------------//\n\n           template< \n                typename InputT, \n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline InputT find_format_copy_impl2(\n                const InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult)\n            {\n                typedef find_format_store<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<InputT>::type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                if ( !M )\n                {\n                    // Match not found - return original sequence\n                    return InputT( Input );\n                }\n\n                InputT Output;\n                // Copy the beginning of the sequence\n                boost::algorithm::detail::insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() );\n                // Copy formatted result\n                boost::algorithm::detail::insert( Output, ::boost::end(Output), M.format_result() );\n                // Copy the rest of the sequence\n                boost::algorithm::detail::insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) );\n\n                return Output;\n            }\n\n            template< \n                typename InputT, \n                typename FormatterT,\n                typename FindResultT >\n            inline InputT find_format_copy_impl(\n                const InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult)\n            {\n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    return ::boost::algorithm::detail::find_format_copy_impl2(\n                        Input,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                } else {\n                    return Input;\n                }\n            }\n\n // replace implementation ----------------------------------------------------//\n        \n            template<\n                typename InputT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline void find_format_impl2( \n                InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult)\n            {\n                typedef find_format_store<\n                    BOOST_STRING_TYPENAME \n                        range_iterator<InputT>::type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                if ( !M )\n                {\n                    // Search not found - return original sequence\n                    return;\n                }\n\n                // Replace match\n                ::boost::algorithm::detail::replace( Input, M.begin(), M.end(), M.format_result() );\n            }\n\n            template<\n                typename InputT,\n                typename FormatterT,\n                typename FindResultT >\n            inline void find_format_impl( \n                InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult)\n            {\n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    ::boost::algorithm::detail::find_format_impl2(\n                        Input,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                }\n            }\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FIND_FORMAT_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/find_format_all.hpp",
    "content": "//  Boost string_algo library find_format_all.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP\n#define BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/algorithm/string/detail/find_format_store.hpp>\n#include <boost/algorithm/string/detail/replace_storage.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n// find_format_all_copy (iterator variant) implementation ---------------------------//\n\n           template< \n                typename OutputIteratorT,\n                typename InputT,\n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline OutputIteratorT find_format_all_copy_impl2(\n                OutputIteratorT Output,\n                const InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult )\n            {       \n                typedef BOOST_STRING_TYPENAME \n                    range_const_iterator<InputT>::type input_iterator_type; \n\n                typedef find_format_store<\n                        input_iterator_type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                // Initialize last match\n                input_iterator_type LastMatch=::boost::begin(Input);\n\n                // Iterate through all matches\n                while( M )\n                {\n                    // Copy the beginning of the sequence\n                    Output = std::copy( LastMatch, M.begin(), Output );\n                    // Copy formatted result\n                    Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );\n\n                    // Proceed to the next match\n                    LastMatch=M.end();\n                    M=Finder( LastMatch, ::boost::end(Input) );\n                }\n\n                // Copy the rest of the sequence\n                Output = std::copy( LastMatch, ::boost::end(Input), Output );\n\n                return Output;\n            }\n\n            template< \n                typename OutputIteratorT,\n                typename InputT,\n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT >\n            inline OutputIteratorT find_format_all_copy_impl(\n                OutputIteratorT Output,\n                const InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                const FindResultT& FindResult )\n            {   \n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    return ::boost::algorithm::detail::find_format_all_copy_impl2( \n                        Output,\n                        Input,\n                        Finder,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                } else {\n                    return std::copy( ::boost::begin(Input), ::boost::end(Input), Output );\n                }\n            }\n\n // find_format_all_copy implementation ----------------------------------------------//\n\n           template< \n                typename InputT, \n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline InputT find_format_all_copy_impl2(\n                const InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult)\n            {\n                typedef BOOST_STRING_TYPENAME \n                    range_const_iterator<InputT>::type input_iterator_type; \n\n                typedef find_format_store<\n                        input_iterator_type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                // Initialize last match\n                input_iterator_type LastMatch=::boost::begin(Input);\n\n                // Output temporary\n                InputT Output;\n\n                // Iterate through all matches\n                while( M )\n                {\n                    // Copy the beginning of the sequence\n                    boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, M.begin() );\n                    // Copy formatted result\n                    boost::algorithm::detail::insert( Output, ::boost::end(Output), M.format_result() );\n\n                    // Proceed to the next match\n                    LastMatch=M.end();\n                    M=Finder( LastMatch, ::boost::end(Input) );\n                }\n\n                // Copy the rest of the sequence\n                ::boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) );\n\n                return Output;\n            }\n\n            template< \n                typename InputT, \n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT >\n            inline InputT find_format_all_copy_impl(\n                const InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                const FindResultT& FindResult)\n            {\n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    return ::boost::algorithm::detail::find_format_all_copy_impl2(\n                        Input,\n                        Finder,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                } else {\n                    return Input;\n                }\n            }\n\n // find_format_all implementation ------------------------------------------------//\n        \n            template<\n                typename InputT,\n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline void find_format_all_impl2( \n                InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                FindResultT FindResult,\n                FormatResultT FormatResult)\n            {\n                typedef BOOST_STRING_TYPENAME \n                    range_iterator<InputT>::type input_iterator_type; \n                typedef find_format_store<\n                        input_iterator_type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n          \n                // Instantiate replacement storage\n                std::deque<\n                    BOOST_STRING_TYPENAME range_value<InputT>::type> Storage;\n\n                // Initialize replacement iterators\n                input_iterator_type InsertIt=::boost::begin(Input);\n                input_iterator_type SearchIt=::boost::begin(Input);\n                \n                while( M )\n                {\n                    // process the segment\n                    InsertIt=process_segment( \n                        Storage,\n                        Input,\n                        InsertIt,\n                        SearchIt,\n                        M.begin() );\n                    \n                    // Adjust search iterator\n                    SearchIt=M.end();\n\n                    // Copy formatted replace to the storage\n                    ::boost::algorithm::detail::copy_to_storage( Storage, M.format_result() );\n\n                    // Find range for a next match\n                    M=Finder( SearchIt, ::boost::end(Input) );\n                }\n\n                // process the last segment\n                InsertIt=::boost::algorithm::detail::process_segment( \n                    Storage,\n                    Input,\n                    InsertIt,\n                    SearchIt,\n                    ::boost::end(Input) );\n                \n                if ( Storage.empty() )\n                {\n                    // Truncate input\n                    ::boost::algorithm::detail::erase( Input, InsertIt, ::boost::end(Input) );\n                }\n                else\n                {\n                    // Copy remaining data to the end of input\n                    ::boost::algorithm::detail::insert( Input, ::boost::end(Input), Storage.begin(), Storage.end() );\n                }\n            }\n\n            template<\n                typename InputT,\n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT >\n            inline void find_format_all_impl( \n                InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                FindResultT FindResult)\n            {\n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    ::boost::algorithm::detail::find_format_all_impl2(\n                        Input,\n                        Finder,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                }\n            }\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/find_format_store.hpp",
    "content": "//  Boost string_algo library find_format_store.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP\n#define BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/range/iterator_range_core.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  temporary format and find result storage --------------------------------//\n\n#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)\n#pragma warning(push)\n#pragma warning(disable:4512) //assignment operator could not be generated\n#endif\n            template< \n                typename ForwardIteratorT,\n                typename FormatterT,\n                typename FormatResultT >\n            class find_format_store : \n                public iterator_range<ForwardIteratorT>\n            {\n            public:\n                // typedefs\n                typedef iterator_range<ForwardIteratorT> base_type;\n                typedef FormatterT  formatter_type;\n                typedef FormatResultT format_result_type;\n                \n            public:\n                // Construction\n                find_format_store( \n                        const base_type& FindResult,\n                        const format_result_type& FormatResult,\n                        const formatter_type& Formatter ) :\n                    base_type(FindResult),\n                    m_FormatResult(FormatResult),\n                    m_Formatter(Formatter) {}\n\n                // Assignment\n                template< typename FindResultT >\n                find_format_store& operator=( FindResultT FindResult )\n                {\n                    iterator_range<ForwardIteratorT>::operator=(FindResult);\n                    if( !this->empty() ) {\n                        m_FormatResult=m_Formatter(FindResult);\n                    }\n                    \n                    return *this;\n                }\n\n                // Retrieve format result\n                const format_result_type& format_result()\n                {   \n                    return m_FormatResult;\n                }\n\n            private:\n                format_result_type m_FormatResult;\n                const formatter_type& m_Formatter;\n            };\n\n            template<typename InputT, typename FindResultT>\n            bool check_find_result(InputT&, FindResultT& FindResult)\n            {\n                typedef BOOST_STRING_TYPENAME \n                    range_const_iterator<InputT>::type input_iterator_type; \n                iterator_range<input_iterator_type> ResultRange(FindResult);\n                return !ResultRange.empty();\n            }\n\n#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)\n#pragma warning(pop)\n#endif\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/find_iterator.hpp",
    "content": "//  Boost string_algo library find_iterator.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_ITERATOR_DETAIL_HPP\n#define BOOST_STRING_FIND_ITERATOR_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/function.hpp>\n\nnamespace boost {\n    namespace algorithm { \n        namespace detail {\n\n//  find_iterator base -----------------------------------------------//\n\n            // Find iterator base\n            template<typename IteratorT>\n            class find_iterator_base\n            {\n            protected:\n                // typedefs\n                typedef IteratorT input_iterator_type;\n                typedef iterator_range<IteratorT> match_type;\n                typedef function2<\n                    match_type, \n                    input_iterator_type, \n                    input_iterator_type> finder_type;\n                \n            protected:\n            // Protected construction/destruction\n\n                // Default constructor\n                find_iterator_base() {};\n                // Copy construction\n                find_iterator_base( const find_iterator_base& Other ) :\n                    m_Finder(Other.m_Finder) {}\n                \n                // Constructor\n                template<typename FinderT>\n                find_iterator_base( FinderT Finder, int ) :\n                    m_Finder(Finder) {}\n\n                // Destructor\n                ~find_iterator_base() {}\n\n                // Find operation\n                match_type do_find( \n                    input_iterator_type Begin,\n                    input_iterator_type End ) const\n                {\n                    if (!m_Finder.empty())\n                    {\n                        return m_Finder(Begin,End);\n                    }\n                    else\n                    {\n                        return match_type(End,End);\n                    }\n                }\n\n                // Check\n                bool is_null() const\n                {\n                    return m_Finder.empty();\n                }\n\n            private:\n                // Finder\n                finder_type m_Finder;\n            };\n\n       } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_FIND_ITERATOR_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/finder.hpp",
    "content": "//  Boost string_algo library finder.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FINDER_DETAIL_HPP\n#define BOOST_STRING_FINDER_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/algorithm/string/constants.hpp>\n#include <boost/detail/iterator.hpp>\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/empty.hpp>\n#include <boost/range/as_literal.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n\n//  find first functor -----------------------------------------------//\n\n            // find a subsequence in the sequence ( functor )\n            /*\n                Returns a pair <begin,end> marking the subsequence in the sequence.\n                If the find fails, functor returns <End,End>\n            */\n            template<typename SearchIteratorT,typename PredicateT>\n            struct first_finderF\n            {\n                typedef SearchIteratorT search_iterator_type;\n\n                // Construction\n                template< typename SearchT >\n                first_finderF( const SearchT& Search, PredicateT Comp ) :\n                    m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}\n                first_finderF(\n                        search_iterator_type SearchBegin,\n                        search_iterator_type SearchEnd,\n                        PredicateT Comp ) :\n                    m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n                    typedef ForwardIteratorT input_iterator_type;\n\n                    // Outer loop\n                    for(input_iterator_type OuterIt=Begin;\n                        OuterIt!=End;\n                        ++OuterIt)\n                    {\n                        // Sanity check\n                        if( boost::empty(m_Search) )\n                            return result_type( End, End );\n\n                        input_iterator_type InnerIt=OuterIt;\n                        search_iterator_type SubstrIt=m_Search.begin();\n                        for(;\n                            InnerIt!=End && SubstrIt!=m_Search.end();\n                            ++InnerIt,++SubstrIt)\n                        {\n                            if( !( m_Comp(*InnerIt,*SubstrIt) ) )\n                                break;\n                        }\n\n                        // Substring matching succeeded\n                        if ( SubstrIt==m_Search.end() )\n                            return result_type( OuterIt, InnerIt );\n                    }\n\n                    return result_type( End, End );\n                }\n\n            private:\n                iterator_range<search_iterator_type> m_Search;\n                PredicateT m_Comp;\n            };\n\n//  find last functor -----------------------------------------------//\n\n            // find the last match a subsequence in the sequence ( functor )\n            /*\n                Returns a pair <begin,end> marking the subsequence in the sequence.\n                If the find fails, returns <End,End>\n            */\n            template<typename SearchIteratorT, typename PredicateT>\n            struct last_finderF\n            {\n                typedef SearchIteratorT search_iterator_type;\n                typedef first_finderF<\n                    search_iterator_type,\n                    PredicateT> first_finder_type;\n\n                // Construction\n                template< typename SearchT >\n                last_finderF( const SearchT& Search, PredicateT Comp ) :\n                    m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}\n                last_finderF(\n                        search_iterator_type SearchBegin,\n                        search_iterator_type SearchEnd,\n                        PredicateT Comp ) :\n                    m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    if( boost::empty(m_Search) )\n                        return result_type( End, End );\n\n                    typedef BOOST_STRING_TYPENAME boost::detail::\n                        iterator_traits<ForwardIteratorT>::iterator_category category;\n\n                    return findit( Begin, End, category() );\n                }\n\n            private:\n                // forward iterator\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                findit(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End,\n                    std::forward_iterator_tag ) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    first_finder_type first_finder(\n                        m_Search.begin(), m_Search.end(), m_Comp );\n\n                    result_type M=first_finder( Begin, End );\n                    result_type Last=M;\n\n                    while( M )\n                    {\n                        Last=M;\n                        M=first_finder( ::boost::end(M), End );\n                    }\n\n                    return Last;\n                }\n\n                // bidirectional iterator\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                findit(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End,\n                    std::bidirectional_iterator_tag ) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n                    typedef ForwardIteratorT input_iterator_type;\n\n                    // Outer loop\n                    for(input_iterator_type OuterIt=End;\n                        OuterIt!=Begin; )\n                    {\n                        input_iterator_type OuterIt2=--OuterIt;\n\n                        input_iterator_type InnerIt=OuterIt2;\n                        search_iterator_type SubstrIt=m_Search.begin();\n                        for(;\n                            InnerIt!=End && SubstrIt!=m_Search.end();\n                            ++InnerIt,++SubstrIt)\n                        {\n                            if( !( m_Comp(*InnerIt,*SubstrIt) ) )\n                                break;\n                        }\n\n                        // Substring matching succeeded\n                        if( SubstrIt==m_Search.end() )\n                            return result_type( OuterIt2, InnerIt );\n                    }\n\n                    return result_type( End, End );\n                }\n\n            private:\n                iterator_range<search_iterator_type> m_Search;\n                PredicateT m_Comp;\n            };\n\n//  find n-th functor -----------------------------------------------//\n\n            // find the n-th match of a subsequence in the sequence ( functor )\n            /*\n                Returns a pair <begin,end> marking the subsequence in the sequence.\n                If the find fails, returns <End,End>\n            */\n            template<typename SearchIteratorT, typename PredicateT>\n            struct nth_finderF\n            {\n                typedef SearchIteratorT search_iterator_type;\n                typedef first_finderF<\n                    search_iterator_type,\n                    PredicateT> first_finder_type;\n                typedef last_finderF<\n                    search_iterator_type,\n                    PredicateT> last_finder_type;\n\n                // Construction\n                template< typename SearchT >\n                nth_finderF(\n                        const SearchT& Search,\n                        int Nth,\n                        PredicateT Comp) :\n                    m_Search(::boost::begin(Search), ::boost::end(Search)),\n                    m_Nth(Nth),\n                    m_Comp(Comp) {}\n                nth_finderF(\n                        search_iterator_type SearchBegin,\n                        search_iterator_type SearchEnd,\n                        int Nth,\n                        PredicateT Comp) :\n                    m_Search(SearchBegin, SearchEnd),\n                    m_Nth(Nth),\n                    m_Comp(Comp) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    if(m_Nth>=0)\n                    {\n                        return find_forward(Begin, End, m_Nth);\n                    }\n                    else\n                    {\n                        return find_backward(Begin, End, -m_Nth);\n                    }\n\n                }\n\n            private:\n                // Implementation helpers\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                find_forward(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End,\n                    unsigned int N) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    // Sanity check\n                    if( boost::empty(m_Search) )\n                        return result_type( End, End );\n\n                    // Instantiate find functor\n                    first_finder_type first_finder(\n                        m_Search.begin(), m_Search.end(), m_Comp );\n\n                    result_type M( Begin, Begin );\n\n                    for( unsigned int n=0; n<=N; ++n )\n                    {\n                        // find next match\n                        M=first_finder( ::boost::end(M), End );\n\n                        if ( !M )\n                        {\n                            // Subsequence not found, return\n                            return M;\n                        }\n                    }\n\n                    return M;\n                }\n\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                find_backward(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End,\n                    unsigned int N) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    // Sanity check\n                    if( boost::empty(m_Search) )\n                        return result_type( End, End );\n\n                    // Instantiate find functor\n                    last_finder_type last_finder(\n                        m_Search.begin(), m_Search.end(), m_Comp );\n\n                    result_type M( End, End );\n\n                    for( unsigned int n=1; n<=N; ++n )\n                    {\n                        // find next match\n                        M=last_finder( Begin, ::boost::begin(M) );\n\n                        if ( !M )\n                        {\n                            // Subsequence not found, return\n                            return M;\n                        }\n                    }\n\n                    return M;\n                }\n\n\n            private:\n                iterator_range<search_iterator_type> m_Search;\n                int m_Nth;\n                PredicateT m_Comp;\n            };\n\n//  find head/tail implementation helpers ---------------------------//\n\n            template<typename ForwardIteratorT>\n                iterator_range<ForwardIteratorT>\n            find_head_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::forward_iterator_tag )\n            {\n                typedef ForwardIteratorT input_iterator_type;\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                input_iterator_type It=Begin;\n                for(\n                    unsigned int Index=0;\n                    Index<N && It!=End; ++Index,++It ) {};\n\n                return result_type( Begin, It );\n            }\n\n            template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n            find_head_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::random_access_iterator_tag )\n            {\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )\n                    return result_type( Begin, End );\n\n                return result_type(Begin,Begin+N);\n            }\n\n            // Find head implementation\n            template<typename ForwardIteratorT>\n                iterator_range<ForwardIteratorT>\n            find_head_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N )\n            {\n                typedef BOOST_STRING_TYPENAME boost::detail::\n                    iterator_traits<ForwardIteratorT>::iterator_category category;\n\n                return ::boost::algorithm::detail::find_head_impl( Begin, End, N, category() );\n            }\n\n            template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n            find_tail_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::forward_iterator_tag )\n            {\n                typedef ForwardIteratorT input_iterator_type;\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                unsigned int Index=0;\n                input_iterator_type It=Begin;\n                input_iterator_type It2=Begin;\n\n                // Advance It2 by N increments\n                for( Index=0; Index<N && It2!=End; ++Index,++It2 ) {};\n\n                // Advance It, It2 to the end\n                for(; It2!=End; ++It,++It2 ) {};\n\n                return result_type( It, It2 );\n            }\n\n            template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n            find_tail_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::bidirectional_iterator_tag )\n            {\n                typedef ForwardIteratorT input_iterator_type;\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                input_iterator_type It=End;\n                for(\n                    unsigned int Index=0;\n                    Index<N && It!=Begin; ++Index,--It ) {};\n\n                return result_type( It, End );\n            }\n\n            template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n            find_tail_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::random_access_iterator_tag )\n            {\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )\n                    return result_type( Begin, End );\n\n                return result_type( End-N, End );\n            }\n\n                        // Operation\n            template< typename ForwardIteratorT >\n            iterator_range<ForwardIteratorT>\n            find_tail_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N )\n            {\n                typedef BOOST_STRING_TYPENAME boost::detail::\n                    iterator_traits<ForwardIteratorT>::iterator_category category;\n\n                return ::boost::algorithm::detail::find_tail_impl( Begin, End, N, category() );\n            }\n\n\n\n//  find head functor -----------------------------------------------//\n\n\n            // find a head in the sequence ( functor )\n            /*\n                This functor find a head of the specified range. For\n                a specified N, the head is a subsequence of N starting\n                elements of the range.\n            */\n            struct head_finderF\n            {\n                // Construction\n                head_finderF( int N ) : m_N(N) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    if(m_N>=0)\n                    {\n                        return ::boost::algorithm::detail::find_head_impl( Begin, End, m_N );\n                    }\n                    else\n                    {\n                        iterator_range<ForwardIteratorT> Res=\n                            ::boost::algorithm::detail::find_tail_impl( Begin, End, -m_N );\n\n                        return ::boost::make_iterator_range(Begin, Res.begin());\n                    }\n                }\n\n            private:\n                int m_N;\n            };\n\n//  find tail functor -----------------------------------------------//\n\n\n            // find a tail in the sequence ( functor )\n            /*\n                This functor find a tail of the specified range. For\n                a specified N, the head is a subsequence of N starting\n                elements of the range.\n            */\n            struct tail_finderF\n            {\n                // Construction\n                tail_finderF( int N ) : m_N(N) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    if(m_N>=0)\n                    {\n                        return ::boost::algorithm::detail::find_tail_impl( Begin, End, m_N );\n                    }\n                    else\n                    {\n                        iterator_range<ForwardIteratorT> Res=\n                            ::boost::algorithm::detail::find_head_impl( Begin, End, -m_N );\n\n                        return ::boost::make_iterator_range(Res.end(), End);\n                    }\n                }\n\n            private:\n                int m_N;\n            };\n\n//  find token functor -----------------------------------------------//\n\n            // find a token in a sequence ( functor )\n            /*\n                This find functor finds a token specified be a predicate\n                in a sequence. It is equivalent of std::find algorithm,\n                with an exception that it return range instead of a single\n                iterator.\n\n                If bCompress is set to true, adjacent matching tokens are\n                concatenated into one match.\n            */\n            template< typename PredicateT >\n            struct token_finderF\n            {\n                // Construction\n                token_finderF(\n                    PredicateT Pred,\n                    token_compress_mode_type eCompress=token_compress_off ) :\n                        m_Pred(Pred), m_eCompress(eCompress) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    ForwardIteratorT It=std::find_if( Begin, End, m_Pred );\n\n                    if( It==End )\n                    {\n                        return result_type( End, End );\n                    }\n                    else\n                    {\n                        ForwardIteratorT It2=It;\n\n                        if( m_eCompress==token_compress_on )\n                        {\n                            // Find first non-matching character\n                            while( It2!=End && m_Pred(*It2) ) ++It2;\n                        }\n                        else\n                        {\n                            // Advance by one position\n                            ++It2;\n                        }\n\n                        return result_type( It, It2 );\n                    }\n                }\n\n            private:\n                PredicateT m_Pred;\n                token_compress_mode_type m_eCompress;\n            };\n\n//  find range functor -----------------------------------------------//\n\n            // find a range in the sequence ( functor )\n            /*\n                This functor actually does not perform any find operation.\n                It always returns given iterator range as a result.\n            */\n            template<typename ForwardIterator1T>\n            struct range_finderF\n            {\n                typedef ForwardIterator1T input_iterator_type;\n                typedef iterator_range<input_iterator_type> result_type;\n\n                // Construction\n                range_finderF(\n                    input_iterator_type Begin,\n                    input_iterator_type End ) : m_Range(Begin, End) {}\n\n                range_finderF(const iterator_range<input_iterator_type>& Range) :\n                    m_Range(Range) {}\n\n                // Operation\n                template< typename ForwardIterator2T >\n                iterator_range<ForwardIterator2T>\n                operator()(\n                    ForwardIterator2T,\n                    ForwardIterator2T ) const\n                {\n#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 ) \n                    return iterator_range<const ForwardIterator2T>(this->m_Range);\n#else\n                    return m_Range;\n#endif\n                }\n\n            private:\n                iterator_range<input_iterator_type> m_Range;\n            };\n\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FINDER_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/finder_regex.hpp",
    "content": "//  Boost string_algo library find_regex.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FINDER_REGEX_DETAIL_HPP\n#define BOOST_STRING_FINDER_REGEX_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/regex.hpp>\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  regex find functor -----------------------------------------------//\n\n            // regex search result\n            template<typename IteratorT>\n            struct regex_search_result : \n                public iterator_range<IteratorT>\n            {\n                typedef regex_search_result<IteratorT> type;\n                typedef iterator_range<IteratorT> base_type;\n                typedef BOOST_STRING_TYPENAME base_type::value_type value_type;\n                typedef BOOST_STRING_TYPENAME base_type::difference_type difference_type;\n                typedef BOOST_STRING_TYPENAME base_type::const_iterator const_iterator;\n                typedef BOOST_STRING_TYPENAME base_type::iterator iterator;\n                typedef boost::match_results<iterator> match_results_type;\n\n                // Construction\n\n                // Construction from the match result\n                regex_search_result( const match_results_type& MatchResults ) :\n                    base_type( MatchResults[0].first, MatchResults[0].second ),\n                    m_MatchResults( MatchResults ) {}\n                \n                // Construction of empty match. End iterator has to be specified\n                regex_search_result( IteratorT End ) :\n                    base_type( End, End ) {}\n\n                regex_search_result( const regex_search_result& Other ) :\n                    base_type( Other.begin(), Other.end() ),\n                    m_MatchResults( Other.m_MatchResults ) {}\n\n                // Assignment\n                regex_search_result& operator=( const regex_search_result& Other )\n                {\n                    base_type::operator=( Other );\n                    m_MatchResults=Other.m_MatchResults;\n                    return *this;\n                }\n\n                // Match result retrieval\n                const match_results_type& match_results() const\n                {\n                    return m_MatchResults;\n                }\n\n            private:\n                // Saved match result\n                match_results_type m_MatchResults;\n            };\n\n            // find_regex\n            /*\n                Regex based search functor\n            */\n            template<typename RegExT>\n            struct find_regexF\n            {\n                typedef RegExT regex_type;\n                typedef const RegExT& regex_reference_type;\n                    \n                // Construction\n                find_regexF( regex_reference_type Rx, match_flag_type MatchFlags = match_default ) : \n                    m_Rx(Rx), m_MatchFlags(MatchFlags) {}   \n\n                // Operation\n                template< typename ForwardIteratorT >\n                regex_search_result<ForwardIteratorT>\n                operator()( \n                    ForwardIteratorT Begin, \n                    ForwardIteratorT End ) const\n                {\n                    typedef ForwardIteratorT input_iterator_type;\n                    typedef regex_search_result<ForwardIteratorT> result_type;\n\n                    // instantiate match result\n                    match_results<input_iterator_type> result;\n                    // search for a match\n                    if ( ::boost::regex_search( Begin, End, result, m_Rx, m_MatchFlags ) )\n                    {\n                        // construct a result\n                        return result_type( result );\n                    }\n                    else\n                    {\n                        // empty result\n                        return result_type( End );\n                    }\n                }\n\n            private:\n                regex_reference_type m_Rx; // Regexp\n                match_flag_type m_MatchFlags;     // match flags\n            };\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FIND_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/formatter.hpp",
    "content": "//  Boost string_algo library formatter.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FORMATTER_DETAIL_HPP\n#define BOOST_STRING_FORMATTER_DETAIL_HPP\n\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/const_iterator.hpp>\n\n#include <boost/algorithm/string/detail/util.hpp>\n\n//  generic replace functors -----------------------------------------------//\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  const format functor ----------------------------------------------------//\n\n            // constant format functor\n            template<typename RangeT>\n            struct const_formatF\n            {\n            private:\n                typedef BOOST_STRING_TYPENAME\n                    range_const_iterator<RangeT>::type format_iterator;\n                typedef iterator_range<format_iterator> result_type;\n            \n            public:\n                // Construction\n                const_formatF(const RangeT& Format) :\n                    m_Format(::boost::begin(Format), ::boost::end(Format)) {}\n\n                // Operation\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n                template<typename Range2T>\n                result_type& operator()(const Range2T&)\n                {\n                    return m_Format;\n                }\n#endif\n\n                template<typename Range2T>\n                const result_type& operator()(const Range2T&) const\n                {\n                    return m_Format;\n                }\n\n            private:\n                result_type m_Format;\n            };\n\n//  identity format functor ----------------------------------------------------//\n\n            // identity format functor\n            template<typename RangeT>\n            struct identity_formatF\n            {\n                // Operation\n                template< typename Range2T >\n                const RangeT& operator()(const Range2T& Replace) const\n                {\n                    return RangeT(::boost::begin(Replace), ::boost::end(Replace));\n                }\n            };\n\n//  empty format functor ( used by erase ) ------------------------------------//\n        \n            // empty format functor\n            template< typename CharT >\n            struct empty_formatF\n            {\n                template< typename ReplaceT >\n                empty_container<CharT> operator()(const ReplaceT&) const\n                {\n                    return empty_container<CharT>();\n                }\n            };\n\n//  dissect format functor ----------------------------------------------------//\n\n            // dissect format functor\n            template<typename FinderT>\n            struct dissect_formatF\n            {\n            public:\n                // Construction\n                dissect_formatF(FinderT Finder) :\n                  m_Finder(Finder) {}\n\n                  // Operation\n                  template<typename RangeT>\n                  inline iterator_range< \n                      BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                  operator()(const RangeT& Replace) const\n                  {\n                      return m_Finder(::boost::begin(Replace), ::boost::end(Replace));\n                  }\n\n            private:\n                FinderT m_Finder;\n            };\n\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FORMATTER_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/formatter_regex.hpp",
    "content": "//  Boost string_algo library formatter_regex.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FORMATTER_REGEX_DETAIL_HPP\n#define BOOST_STRING_FORMATTER_REGEX_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <string>\n#include <boost/regex.hpp>\n#include <boost/algorithm/string/detail/finder_regex.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  regex format functor -----------------------------------------//\n\n            // regex format functor\n            template<typename StringT>\n            struct regex_formatF\n            {\n            private:\n                typedef StringT result_type;\n                typedef BOOST_STRING_TYPENAME StringT::value_type char_type;\n\n            public:\n                // Construction\n                regex_formatF( const StringT& Fmt, match_flag_type Flags=format_default ) :\n                    m_Fmt(Fmt), m_Flags( Flags ) {}\n\n                template<typename InputIteratorT>\n                result_type operator()( \n                    const regex_search_result<InputIteratorT>& Replace ) const\n                {\n                    if ( Replace.empty() )\n                    {\n                        return result_type();\n                    }\n                    else\n                    {\n                        return Replace.match_results().format( m_Fmt, m_Flags );                      \n                    }\n                }\n            private:\n                const StringT& m_Fmt;\n                match_flag_type m_Flags;\n            };\n\n        \n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FORMATTER_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/predicate.hpp",
    "content": "//  Boost string_algo library predicate.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_PREDICATE_DETAIL_HPP\n#define BOOST_STRING_PREDICATE_DETAIL_HPP\n\n#include <iterator>\n#include <boost/algorithm/string/find.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  ends_with predicate implementation ----------------------------------//\n\n            template< \n                typename ForwardIterator1T, \n                typename ForwardIterator2T,\n                typename PredicateT>\n            inline bool ends_with_iter_select( \n                ForwardIterator1T Begin, \n                ForwardIterator1T End, \n                ForwardIterator2T SubBegin,\n                ForwardIterator2T SubEnd,\n                PredicateT Comp,\n                std::bidirectional_iterator_tag)\n            {\n                ForwardIterator1T it=End;\n                ForwardIterator2T pit=SubEnd;\n                for(;it!=Begin && pit!=SubBegin;)\n                {\n                    if( !(Comp(*(--it),*(--pit))) )\n                        return false;\n                }\n\n                return pit==SubBegin;\n            }\n\n            template< \n                typename ForwardIterator1T, \n                typename ForwardIterator2T,\n                typename PredicateT>\n            inline bool ends_with_iter_select( \n                ForwardIterator1T Begin, \n                ForwardIterator1T End, \n                ForwardIterator2T SubBegin,\n                ForwardIterator2T SubEnd,\n                PredicateT Comp,\n                std::forward_iterator_tag)\n            {\n                if ( SubBegin==SubEnd )\n                {\n                    // empty subsequence check\n                    return true;\n                }\n\n                iterator_range<ForwardIterator1T> Result\n                    =last_finder( \n                        ::boost::make_iterator_range(SubBegin, SubEnd),\n                        Comp)(Begin, End);\n\n                return !Result.empty() && Result.end()==End;\n            }\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_PREDICATE_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/replace_storage.hpp",
    "content": "//  Boost string_algo library replace_storage.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP\n#define BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <algorithm>\n#include <boost/mpl/bool.hpp>\n#include <boost/algorithm/string/sequence_traits.hpp>\n#include <boost/algorithm/string/detail/sequence.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  storage handling routines -----------------------------------------------//\n            \n            template< typename StorageT, typename OutputIteratorT >\n            inline OutputIteratorT move_from_storage(\n                StorageT& Storage,\n                OutputIteratorT DestBegin,\n                OutputIteratorT DestEnd )\n            {\n                OutputIteratorT OutputIt=DestBegin;\n                \n                while( !Storage.empty() && OutputIt!=DestEnd )\n                {\n                    *OutputIt=Storage.front();\n                    Storage.pop_front();\n                    ++OutputIt;\n                }\n\n                return OutputIt;\n            }\n\n            template< typename StorageT, typename WhatT >\n            inline void copy_to_storage(\n                StorageT& Storage,\n                const WhatT& What )\n            {\n                Storage.insert( Storage.end(), ::boost::begin(What), ::boost::end(What) );\n            }\n\n\n//  process segment routine -----------------------------------------------//\n\n            template< bool HasStableIterators >\n            struct process_segment_helper\n            {\n                // Optimized version of process_segment for generic sequence\n                template< \n                    typename StorageT,\n                    typename InputT,\n                    typename ForwardIteratorT >\n                ForwardIteratorT operator()(\n                    StorageT& Storage,\n                    InputT& /*Input*/,\n                    ForwardIteratorT InsertIt,\n                    ForwardIteratorT SegmentBegin,\n                    ForwardIteratorT SegmentEnd )\n                {\n                    // Copy data from the storage until the beginning of the segment\n                    ForwardIteratorT It=::boost::algorithm::detail::move_from_storage( Storage, InsertIt, SegmentBegin );\n\n                    // 3 cases are possible :\n                    //   a) Storage is empty, It==SegmentBegin\n                    //   b) Storage is empty, It!=SegmentBegin\n                    //   c) Storage is not empty\n\n                    if( Storage.empty() )\n                    {\n                        if( It==SegmentBegin )\n                        {\n                            // Case a) everything is grand, just return end of segment\n                            return SegmentEnd;\n                        }\n                        else\n                        {\n                            // Case b) move the segment backwards\n                            return std::copy( SegmentBegin, SegmentEnd, It );\n                        }\n                    }\n                    else\n                    {\n                        // Case c) -> shift the segment to the left and keep the overlap in the storage\n                        while( It!=SegmentEnd )\n                        {\n                            // Store value into storage\n                            Storage.push_back( *It );\n                            // Get the top from the storage and put it here\n                            *It=Storage.front();\n                            Storage.pop_front();\n\n                            // Advance\n                            ++It;\n                        }\n\n                        return It;\n                    }\n                }\n            };\n\n            template<>\n            struct process_segment_helper< true >\n            {\n                // Optimized version of process_segment for list-like sequence\n                template< \n                    typename StorageT,\n                    typename InputT,\n                    typename ForwardIteratorT >\n                ForwardIteratorT operator()(\n                    StorageT& Storage,\n                    InputT& Input,\n                    ForwardIteratorT InsertIt,\n                    ForwardIteratorT SegmentBegin,\n                    ForwardIteratorT SegmentEnd )\n\n                {\n                    // Call replace to do the job\n                    ::boost::algorithm::detail::replace( Input, InsertIt, SegmentBegin, Storage );\n                    // Empty the storage\n                    Storage.clear();\n                    // Iterators were not changed, simply return the end of segment\n                    return SegmentEnd;\n                }\n            };\n\n            // Process one segment in the replace_all algorithm\n            template< \n                typename StorageT,\n                typename InputT,\n                typename ForwardIteratorT >\n            inline ForwardIteratorT process_segment(\n                StorageT& Storage,\n                InputT& Input,\n                ForwardIteratorT InsertIt,\n                ForwardIteratorT SegmentBegin,\n                ForwardIteratorT SegmentEnd )\n            {\n                return \n                    process_segment_helper< \n                        has_stable_iterators<InputT>::value>()(\n                                Storage, Input, InsertIt, SegmentBegin, SegmentEnd );\n            }\n            \n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/sequence.hpp",
    "content": "//  Boost string_algo library sequence.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_DETAIL_SEQUENCE_HPP\n#define BOOST_STRING_DETAIL_SEQUENCE_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/logical.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\n#include <boost/algorithm/string/sequence_traits.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  insert helpers  -------------------------------------------------//\n        \n            template< typename InputT, typename ForwardIteratorT >\n            inline void insert(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator At,\n                ForwardIteratorT Begin,\n                ForwardIteratorT End )\n            {\n                Input.insert( At, Begin, End );\n            }\n\n            template< typename InputT, typename InsertT >\n            inline void insert(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator At,\n                const InsertT& Insert )\n            {\n                ::boost::algorithm::detail::insert( Input, At, ::boost::begin(Insert), ::boost::end(Insert) );\n            }\n           \n//  erase helper  ---------------------------------------------------//\n\n            // Erase a range in the sequence\n            /*\n                Returns the iterator pointing just after the erase subrange\n            */\n            template< typename InputT >\n            inline typename InputT::iterator erase(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator From,\n                BOOST_STRING_TYPENAME InputT::iterator To )\n            {\n                return Input.erase( From, To );\n            }\n\n//  replace helper implementation  ----------------------------------//\n\n            // Optimized version of replace for generic sequence containers\n            // Assumption: insert and erase are expensive\n            template< bool HasConstTimeOperations >\n            struct replace_const_time_helper\n            {\n                template< typename InputT, typename ForwardIteratorT >\n                void operator()(\n                    InputT& Input,\n                    BOOST_STRING_TYPENAME InputT::iterator From,\n                    BOOST_STRING_TYPENAME InputT::iterator To,\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End )\n                {\n                    // Copy data to the container ( as much as possible )\n                    ForwardIteratorT InsertIt=Begin;\n                    BOOST_STRING_TYPENAME InputT::iterator InputIt=From;\n                    for(; InsertIt!=End && InputIt!=To; InsertIt++, InputIt++ )\n                    {\n                        *InputIt=*InsertIt;\n                    }\n\n                    if ( InsertIt!=End )\n                    {\n                        // Replace sequence is longer, insert it\n                        Input.insert( InputIt, InsertIt, End );\n                    }\n                    else\n                    {\n                        if ( InputIt!=To )\n                        {\n                            // Replace sequence is shorter, erase the rest\n                            Input.erase( InputIt, To );\n                        }\n                    }\n                }\n            };\n\n            template<>\n            struct replace_const_time_helper< true >\n            {\n                // Const-time erase and insert methods -> use them\n                template< typename InputT, typename ForwardIteratorT >\n                void operator()(\n                    InputT& Input,\n                    BOOST_STRING_TYPENAME InputT::iterator From,\n                    BOOST_STRING_TYPENAME InputT::iterator To,\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) \n                {\n                    BOOST_STRING_TYPENAME InputT::iterator At=Input.erase( From, To );\n                    if ( Begin!=End )\n                    {\n                        if(!Input.empty())\n                        {\n                            Input.insert( At, Begin, End );\n                        }\n                        else\n                        {\n                            Input.insert( Input.begin(), Begin, End );\n                        }\n                    }\n                }\n            };\n\n            // No native replace method\n            template< bool HasNative >\n            struct replace_native_helper\n            {\n                template< typename InputT, typename ForwardIteratorT >\n                void operator()(\n                    InputT& Input,\n                    BOOST_STRING_TYPENAME InputT::iterator From,\n                    BOOST_STRING_TYPENAME InputT::iterator To,\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) \n                {\n                    replace_const_time_helper< \n                        boost::mpl::and_<\n                            has_const_time_insert<InputT>,\n                            has_const_time_erase<InputT> >::value >()(\n                        Input, From, To, Begin, End );\n                }\n            };\n\n            // Container has native replace method\n            template<>\n            struct replace_native_helper< true >\n            {\n                template< typename InputT, typename ForwardIteratorT >\n                void operator()(\n                    InputT& Input,\n                    BOOST_STRING_TYPENAME InputT::iterator From,\n                    BOOST_STRING_TYPENAME InputT::iterator To,\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End )\n                {\n                    Input.replace( From, To, Begin, End );\n                }\n            };\n\n//  replace helper  -------------------------------------------------//\n        \n            template< typename InputT, typename ForwardIteratorT >\n            inline void replace(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator From,\n                BOOST_STRING_TYPENAME InputT::iterator To,\n                ForwardIteratorT Begin,\n                ForwardIteratorT End )\n            {\n                replace_native_helper< has_native_replace<InputT>::value >()(\n                    Input, From, To, Begin, End );\n            }\n\n            template< typename InputT, typename InsertT >\n            inline void replace(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator From,\n                BOOST_STRING_TYPENAME InputT::iterator To,\n                const InsertT& Insert )\n            {\n                if(From!=To)\n                {\n                    ::boost::algorithm::detail::replace( Input, From, To, ::boost::begin(Insert), ::boost::end(Insert) );\n                }\n                else\n                {\n                    ::boost::algorithm::detail::insert( Input, From, ::boost::begin(Insert), ::boost::end(Insert) );\n                }\n            }\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_DETAIL_SEQUENCE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/trim.hpp",
    "content": "//  Boost string_algo library trim.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_TRIM_DETAIL_HPP\n#define BOOST_STRING_TRIM_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/detail/iterator.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  trim iterator helper -----------------------------------------------//\n\n            template< typename ForwardIteratorT, typename PredicateT >\n            inline ForwardIteratorT trim_end_iter_select( \n                ForwardIteratorT InBegin, \n                ForwardIteratorT InEnd, \n                PredicateT IsSpace,\n                std::forward_iterator_tag )\n            {\n                ForwardIteratorT TrimIt=InBegin;\n\n                for( ForwardIteratorT It=InBegin; It!=InEnd; ++It )\n                {\n                    if ( !IsSpace(*It) ) \n                    {\n                        TrimIt=It;\n                        ++TrimIt;\n                    }\n                }\n\n                return TrimIt;\n            }\n\n            template< typename ForwardIteratorT, typename PredicateT >\n            inline ForwardIteratorT trim_end_iter_select( \n                ForwardIteratorT InBegin, \n                ForwardIteratorT InEnd, \n                PredicateT IsSpace,\n                std::bidirectional_iterator_tag )\n            {\n                for( ForwardIteratorT It=InEnd; It!=InBegin;  )\n                {\n                    if ( !IsSpace(*(--It)) )\n                        return ++It;\n                }\n\n                return InBegin;\n            }\n   // Search for first non matching character from the beginning of the sequence\n            template< typename ForwardIteratorT, typename PredicateT >\n            inline ForwardIteratorT trim_begin( \n                ForwardIteratorT InBegin, \n                ForwardIteratorT InEnd, \n                PredicateT IsSpace )\n            {\n                ForwardIteratorT It=InBegin;\n                for(; It!=InEnd; ++It )\n                {\n                    if (!IsSpace(*It))\n                        return It;\n                }\n\n                return It;\n            }\n\n            // Search for first non matching character from the end of the sequence\n            template< typename ForwardIteratorT, typename PredicateT >\n            inline ForwardIteratorT trim_end( \n                ForwardIteratorT InBegin, \n                ForwardIteratorT InEnd, \n                PredicateT IsSpace )\n            {\n                typedef BOOST_STRING_TYPENAME boost::detail::\n                    iterator_traits<ForwardIteratorT>::iterator_category category;\n\n                return ::boost::algorithm::detail::trim_end_iter_select( InBegin, InEnd, IsSpace, category() );\n            }\n\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_TRIM_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/detail/util.hpp",
    "content": "//  Boost string_algo library util.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_UTIL_DETAIL_HPP\n#define BOOST_STRING_UTIL_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <functional>\n#include <boost/range/iterator_range_core.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  empty container  -----------------------------------------------//\n\n            //  empty_container \n            /*\n                This class represents always empty container,\n                containing elements of type CharT.\n\n                It is supposed to be used in a const version only\n            */\n            template< typename CharT >\n            struct empty_container \n            {\n                typedef empty_container<CharT> type;        \n                typedef CharT value_type;\n                typedef std::size_t size_type;\n                typedef std::ptrdiff_t difference_type;\n                typedef const value_type& reference;\n                typedef const value_type& const_reference;\n                typedef const value_type* iterator;\n                typedef const value_type* const_iterator;\n\n                \n                // Operations\n                const_iterator begin() const\n                {\n                    return reinterpret_cast<const_iterator>(0);\n                }\n\n                const_iterator end() const\n                {\n                    return reinterpret_cast<const_iterator>(0);\n                }\n\n                bool empty() const\n                {\n                    return false;\n                }\n\n                size_type size() const\n                {\n                    return 0;\n                }\n            };\n    \n//  bounded copy algorithm  -----------------------------------------------//\n\n            // Bounded version of the std::copy algorithm\n            template<typename InputIteratorT, typename OutputIteratorT>\n            inline OutputIteratorT bounded_copy(\n                InputIteratorT First, \n                InputIteratorT Last, \n                OutputIteratorT DestFirst,\n                OutputIteratorT DestLast )\n            {\n                InputIteratorT InputIt=First;\n                OutputIteratorT OutputIt=DestFirst;\n                for(; InputIt!=Last && OutputIt!=DestLast; InputIt++, OutputIt++ )\n                {\n                    *OutputIt=*InputIt;\n                }\n\n                return OutputIt;\n            }\n\n//  iterator range utilities -----------------------------------------//\n\n            // copy range functor\n            template< \n                typename SeqT, \n                typename IteratorT=BOOST_STRING_TYPENAME SeqT::const_iterator >\n            struct copy_iterator_rangeF : \n                public std::unary_function< iterator_range<IteratorT>, SeqT >\n            {\n                SeqT operator()( const iterator_range<IteratorT>& Range ) const\n                {\n                    return copy_range<SeqT>(Range);\n                }\n            };\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_UTIL_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/erase.hpp",
    "content": "//  Boost string_algo library erase.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_ERASE_HPP\n#define BOOST_STRING_ERASE_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n\n#include <boost/algorithm/string/find_format.hpp>\n#include <boost/algorithm/string/finder.hpp>\n#include <boost/algorithm/string/formatter.hpp>\n\n/*! \\file\n    Defines various erase algorithms. Each algorithm removes\n    part(s) of the input according to a searching criteria.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  erase_range -------------------------------------------------------//\n\n        //! Erase range algorithm\n        /*!\n            Remove the given range from the input. The result is a modified copy of \n            the input. It is returned as a sequence or copied to the output iterator.\n    \n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input sequence\n            \\param SearchRange A range in the input to be removed\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<typename OutputIteratorT, typename RangeT>\n        inline OutputIteratorT erase_range_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            const iterator_range<\n                BOOST_STRING_TYPENAME \n                    range_const_iterator<RangeT>::type>& SearchRange )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::range_finder(SearchRange),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase range algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT>\n        inline SequenceT erase_range_copy( \n            const SequenceT& Input,\n            const iterator_range<\n                BOOST_STRING_TYPENAME \n                    range_const_iterator<SequenceT>::type>& SearchRange )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::range_finder(SearchRange),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase range algorithm\n        /*!\n            Remove the given range from the input.\n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param SearchRange A range in the input to be removed\n        */\n        template<typename SequenceT>\n        inline void erase_range( \n            SequenceT& Input,\n            const iterator_range<\n                BOOST_STRING_TYPENAME \n                    range_iterator<SequenceT>::type>& SearchRange )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::range_finder(SearchRange),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n//  erase_first  --------------------------------------------------------//\n\n        //! Erase first algorithm\n        /*!\n            Remove the first occurrence of the substring from the input.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n            \n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT erase_first_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase first algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT erase_first_copy( \n            const SequenceT& Input,\n            const RangeT& Search )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input, \n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase first algorithm\n        /*!\n            Remove the first occurrence of the substring from the input. \n            The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for. \n        */\n        template<typename SequenceT, typename RangeT>\n        inline void erase_first( \n            SequenceT& Input,\n            const RangeT& Search )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n//  erase_first ( case insensitive ) ------------------------------------//\n\n        //! Erase first algorithm ( case insensitive )\n        /*!\n            Remove the first occurrence of the substring from the input. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT ierase_first_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase first algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT ierase_first_copy( \n            const SequenceT& Input,\n            const RangeT& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input, \n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase first algorithm ( case insensitive )\n        /*!\n            Remove the first occurrence of the substring from the input. \n            The input sequence is modified in-place. Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for\n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void ierase_first( \n            SequenceT& Input,\n            const RangeT& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n//  erase_last  --------------------------------------------------------//\n\n        //! Erase last algorithm\n        /*!\n            Remove the last occurrence of the substring from the input. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for.\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT erase_last_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::last_finder(Search),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase last algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT erase_last_copy( \n            const SequenceT& Input,\n            const RangeT& Search )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input, \n                ::boost::algorithm::last_finder(Search),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase last algorithm\n        /*!\n            Remove the last occurrence of the substring from the input. \n            The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n        */\n        template<typename SequenceT, typename RangeT>\n        inline void erase_last( \n            SequenceT& Input,\n            const RangeT& Search )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::last_finder(Search),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n//  erase_last ( case insensitive ) ------------------------------------//\n\n        //! Erase last algorithm ( case insensitive )\n        /*!\n            Remove the last occurrence of the substring from the input. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT ierase_last_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::last_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase last algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT ierase_last_copy( \n            const SequenceT& Input,\n            const RangeT& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input, \n                ::boost::algorithm::last_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase last algorithm ( case insensitive )\n        /*!\n            Remove the last occurrence of the substring from the input. \n            The input sequence is modified in-place. Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for\n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void ierase_last( \n            SequenceT& Input,\n            const RangeT& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::last_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n//  erase_nth --------------------------------------------------------------------//\n\n        //! Erase nth algorithm\n        /*!\n            Remove the Nth occurrence of the substring in the input.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            \n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for\n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT erase_nth_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            int Nth )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase nth algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT erase_nth_copy( \n            const SequenceT& Input,\n            const RangeT& Search,\n            int Nth )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input, \n                ::boost::algorithm::nth_finder(Search, Nth),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase nth algorithm\n        /*!\n            Remove the Nth occurrence of the substring in the input.\n            The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for. \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void erase_nth( \n            SequenceT& Input,\n            const RangeT& Search,\n            int Nth )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::nth_finder(Search, Nth),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n//  erase_nth ( case insensitive ) ---------------------------------------------//\n\n        //! Erase nth algorithm ( case insensitive )\n        /*!\n            Remove the Nth occurrence of the substring in the input.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator. \n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for.\n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT ierase_nth_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            int Nth,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase nth algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT ierase_nth_copy( \n            const SequenceT& Input,\n            const RangeT& Search,\n            int Nth,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input, \n                ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),\n                empty_formatter(Input) );\n        }\n\n        //! Erase nth algorithm\n        /*!\n            Remove the Nth occurrence of the substring in the input.\n            The input sequence is modified in-place. Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for. \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void ierase_nth( \n            SequenceT& Input,\n            const RangeT& Search,\n            int Nth,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n\n//  erase_all  --------------------------------------------------------//\n\n        //! Erase all algorithm\n        /*!\n            Remove all the occurrences of the string from the input. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n                        \n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input sequence\n            \\param Search A substring to be searched for. \n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT erase_all_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search )\n        {\n            return ::boost::algorithm::find_format_all_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase all algorithm\n        /*!\n            \\overload\n        */  \n        template<typename SequenceT, typename RangeT>\n        inline SequenceT erase_all_copy( \n            const SequenceT& Input,\n            const RangeT& Search )\n        {\n            return ::boost::algorithm::find_format_all_copy( \n                Input, \n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase all algorithm\n        /*!\n            Remove all the occurrences of the string from the input. \n            The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for. \n        */\n        template<typename SequenceT, typename RangeT>\n        inline void erase_all( \n            SequenceT& Input,\n            const RangeT& Search )\n        {\n            ::boost::algorithm::find_format_all( \n                Input, \n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n//  erase_all ( case insensitive ) ------------------------------------//\n\n        //! Erase all algorithm ( case insensitive )\n        /*!\n            Remove all the occurrences of the string from the input. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator. \n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input\n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT ierase_all_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_all_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase all algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT ierase_all_copy( \n            const SequenceT& Input,\n            const RangeT& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_all_copy( \n                Input, \n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n        //! Erase all algorithm ( case insensitive )\n        /*!\n            Remove all the occurrences of the string from the input. \n            The input sequence is modified in-place. Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for. \n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void ierase_all( \n            SequenceT& Input,\n            const RangeT& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format_all( \n                Input, \n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::empty_formatter(Input) );\n        }\n\n//  erase_head --------------------------------------------------------------------//\n\n        //! Erase head algorithm\n        /*!\n            Remove the head from the input. The head is a prefix of a sequence of given size. \n            If the sequence is shorter then required, the whole string is \n            considered to be the head. The result is a modified copy of the input. \n            It is returned as a sequence or copied to the output iterator.\n            \n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param N Length of the head.\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename RangeT>\n        inline OutputIteratorT erase_head_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            int N )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::head_finder(N),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n        //! Erase head algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT>\n        inline SequenceT erase_head_copy( \n            const SequenceT& Input,\n            int N )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::head_finder(N),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n        //! Erase head algorithm\n        /*!\n            Remove the head from the input. The head is a prefix of a sequence of given size. \n            If the sequence is shorter then required, the whole string is \n            considered to be the head. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param N Length of the head\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n        */\n        template<typename SequenceT>\n        inline void erase_head( \n            SequenceT& Input,\n            int N )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::head_finder(N),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n//  erase_tail --------------------------------------------------------------------//\n\n        //! Erase tail algorithm\n        /*!\n            Remove the tail from the input. The tail is a suffix of a sequence of given size. \n            If the sequence is shorter then required, the whole string is \n            considered to be the tail. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param N Length of the tail.                 \n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n            \n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename RangeT>\n        inline OutputIteratorT erase_tail_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            int N )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::tail_finder(N),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n        //! Erase tail algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT>\n        inline SequenceT erase_tail_copy( \n            const SequenceT& Input,\n            int N )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::tail_finder(N),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n        //! Erase tail algorithm\n        /*!\n            Remove the tail from the input. The tail is a suffix of a sequence of given size. \n            If the sequence is shorter then required, the whole string is\n            considered to be the tail. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param N Length of the tail\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n        */\n        template<typename SequenceT>\n        inline void erase_tail( \n            SequenceT& Input,\n            int N )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::tail_finder(N),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n    } // namespace algorithm\n\n    // pull names into the boost namespace\n    using algorithm::erase_range_copy;\n    using algorithm::erase_range;\n    using algorithm::erase_first_copy;\n    using algorithm::erase_first;\n    using algorithm::ierase_first_copy;\n    using algorithm::ierase_first;\n    using algorithm::erase_last_copy;\n    using algorithm::erase_last;\n    using algorithm::ierase_last_copy;\n    using algorithm::ierase_last;\n    using algorithm::erase_nth_copy;\n    using algorithm::erase_nth;\n    using algorithm::ierase_nth_copy;\n    using algorithm::ierase_nth;\n    using algorithm::erase_all_copy;\n    using algorithm::erase_all;\n    using algorithm::ierase_all_copy;\n    using algorithm::ierase_all;\n    using algorithm::erase_head_copy;\n    using algorithm::erase_head;\n    using algorithm::erase_tail_copy;\n    using algorithm::erase_tail;\n\n} // namespace boost\n\n\n#endif  // BOOST_ERASE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/find.hpp",
    "content": "//  Boost string_algo library find.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_HPP\n#define BOOST_STRING_FIND_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/as_literal.hpp>\n\n#include <boost/algorithm/string/finder.hpp>\n#include <boost/algorithm/string/compare.hpp>\n#include <boost/algorithm/string/constants.hpp>\n\n/*! \\file\n    Defines a set of find algorithms. The algorithms are searching\n    for a substring of the input. The result is given as an \\c iterator_range\n    delimiting the substring.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  Generic find -----------------------------------------------//\n\n        //! Generic find algorithm\n        /*!\n            Search the input using the given finder.\n\n            \\param Input A string which will be searched.\n            \\param Finder Finder object used for searching.\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c RangeT::iterator or \n                \\c RangeT::const_iterator, depending on the constness of \n                the input parameter.\n        */\n        template<typename RangeT, typename FinderT>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<RangeT>::type>\n        find( \n            RangeT& Input, \n            const FinderT& Finder)\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));\n\n            return Finder(::boost::begin(lit_input),::boost::end(lit_input));\n        }\n\n//  find_first  -----------------------------------------------//\n\n        //! Find first algorithm\n        /*!\n            Search for the first occurrence of the substring in the input. \n            \n            \\param Input A string which will be searched.\n            \\param Search A substring to be searched for.\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c RangeT::iterator or \n                \\c RangeT::const_iterator, depending on the constness of \n                the input parameter.\n\n              \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<Range1T>::type>\n        find_first( \n            Range1T& Input, \n            const Range2T& Search)\n        {\n            return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search));\n        }\n\n        //! Find first algorithm ( case insensitive )\n        /*!\n            Search for the first occurrence of the substring in the input. \n            Searching is case insensitive.\n            \n            \\param Input A string which will be searched.\n            \\param Search A substring to be searched for.\n            \\param Loc A locale used for case insensitive comparison\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c Range1T::iterator or \n                \\c Range1T::const_iterator, depending on the constness of \n                the input parameter.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<Range1T>::type>\n        ifind_first( \n            Range1T& Input, \n            const Range2T& Search,\n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search,is_iequal(Loc)));\n        }\n\n//  find_last  -----------------------------------------------//\n\n        //! Find last algorithm\n        /*!\n            Search for the last occurrence of the substring in the input. \n            \n            \\param Input A string which will be searched.\n            \\param Search A substring to be searched for.\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c Range1T::iterator or \n                \\c Range1T::const_iterator, depending on the constness of \n                the input parameter.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<Range1T>::type>\n        find_last( \n            Range1T& Input, \n            const Range2T& Search)\n        {\n            return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search));\n        }\n\n        //! Find last algorithm ( case insensitive )\n        /*!\n            Search for the last match a string in the input. \n            Searching is case insensitive.\n            \n            \\param Input A string which will be searched.\n            \\param Search A substring to be searched for.\n            \\param Loc A locale used for case insensitive comparison\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c Range1T::iterator or \n                \\c Range1T::const_iterator, depending on the constness of \n                the input parameter.\n        \n            \\note This function provides the strong exception-safety guarantee    \n        */\n        template<typename Range1T, typename Range2T>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<Range1T>::type>\n        ifind_last( \n            Range1T& Input, \n            const Range2T& Search,\n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search, is_iequal(Loc)));\n        }\n\n//  find_nth ----------------------------------------------------------------------//\n\n        //! Find n-th algorithm \n        /*!\n            Search for the n-th (zero-indexed) occurrence of the substring in the \n            input.         \n            \n            \\param Input A string which will be searched.\n            \\param Search A substring to be searched for.\n            \\param Nth An index (zero-indexed) of the match to be found.\n                For negative N, the matches are counted from the end of string.\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c Range1T::iterator or \n                \\c Range1T::const_iterator, depending on the constness of \n                the input parameter.\n        */\n        template<typename Range1T, typename Range2T>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<Range1T>::type>\n        find_nth( \n            Range1T& Input, \n            const Range2T& Search,\n            int Nth)\n        {\n            return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth));\n        }\n\n        //! Find n-th algorithm ( case insensitive ).\n        /*!\n            Search for the n-th (zero-indexed) occurrence of the substring in the \n            input. Searching is case insensitive.\n            \n            \\param Input A string which will be searched.\n            \\param Search A substring to be searched for.\n            \\param Nth An index (zero-indexed) of the match to be found. \n                For negative N, the matches are counted from the end of string.\n            \\param Loc A locale used for case insensitive comparison\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c Range1T::iterator or \n                \\c Range1T::const_iterator, depending on the constness of \n                the input parameter.\n\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<Range1T>::type>\n        ifind_nth( \n            Range1T& Input, \n            const Range2T& Search,\n            int Nth,\n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth,is_iequal(Loc)));\n        }\n\n//  find_head ----------------------------------------------------------------------//\n\n        //! Find head algorithm\n        /*!\n            Get the head of the input. Head is a prefix of the string of the \n            given size. If the input is shorter then required, whole input is considered \n            to be the head.\n\n            \\param Input An input string\n            \\param N Length of the head\n                For N>=0, at most N characters are extracted.\n                For N<0, at most size(Input)-|N| characters are extracted.\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c Range1T::iterator or \n                \\c Range1T::const_iterator, depending on the constness of \n                the input parameter.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename RangeT>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<RangeT>::type>\n        find_head( \n            RangeT& Input, \n            int N)\n        {\n            return ::boost::algorithm::find(Input, ::boost::algorithm::head_finder(N));\n        }\n\n//  find_tail ----------------------------------------------------------------------//\n\n        //! Find tail algorithm\n        /*!\n            Get the tail of the input. Tail is a suffix of the string of the \n            given size. If the input is shorter then required, whole input is considered \n            to be the tail.\n\n            \\param Input An input string\n            \\param N Length of the tail. \n                For N>=0, at most N characters are extracted.\n                For N<0, at most size(Input)-|N| characters are extracted.\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c RangeT::iterator or \n                \\c RangeT::const_iterator, depending on the constness of \n                the input parameter.\n\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename RangeT>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<RangeT>::type>\n        find_tail( \n            RangeT& Input, \n            int N)\n        {\n            return ::boost::algorithm::find(Input, ::boost::algorithm::tail_finder(N));\n        }\n\n//  find_token --------------------------------------------------------------------//\n\n        //! Find token algorithm\n        /*!\n            Look for a given token in the string. Token is a character that matches the\n            given predicate.\n            If the \"token compress mode\" is enabled, adjacent tokens are considered to be one match.\n            \n            \\param Input A input string.\n            \\param Pred A unary predicate to identify a token\n            \\param eCompress Enable/Disable compressing of adjacent tokens\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c RangeT::iterator or \n                \\c RangeT::const_iterator, depending on the constness of \n                the input parameter.\n        \n            \\note This function provides the strong exception-safety guarantee    \n        */\n        template<typename RangeT, typename PredicateT>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<RangeT>::type>\n        find_token( \n            RangeT& Input,\n            PredicateT Pred,\n            token_compress_mode_type eCompress=token_compress_off)\n        {\n            return ::boost::algorithm::find(Input, ::boost::algorithm::token_finder(Pred, eCompress));\n        }\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::find;\n    using algorithm::find_first;\n    using algorithm::ifind_first;\n    using algorithm::find_last;\n    using algorithm::ifind_last;\n    using algorithm::find_nth;\n    using algorithm::ifind_nth;\n    using algorithm::find_head;\n    using algorithm::find_tail;\n    using algorithm::find_token;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_FIND_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/find_format.hpp",
    "content": "//  Boost string_algo library find_format.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_FORMAT_HPP\n#define BOOST_STRING_FIND_FORMAT_HPP\n\n#include <deque>\n#include <boost/detail/iterator.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/as_literal.hpp>\n\n#include <boost/algorithm/string/concept.hpp>\n#include <boost/algorithm/string/detail/find_format.hpp>\n#include <boost/algorithm/string/detail/find_format_all.hpp>\n\n/*! \\file\n    Defines generic replace algorithms. Each algorithm replaces\n    part(s) of the input. The part to be replaced is looked up using a Finder object.\n    Result of finding is then used by a Formatter object to generate the replacement.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n// generic replace  -----------------------------------------------------------------//\n\n        //! Generic replace algorithm\n        /*!\n            Use the Finder to search for a substring. Use the Formatter to format\n            this substring and replace it in the input.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n    \n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input sequence\n            \\param Finder A Finder object used to search for a match to be replaced\n            \\param Formatter A Formatter object used to format a match\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template< \n            typename OutputIteratorT,\n            typename RangeT,\n            typename FinderT,\n            typename FormatterT>\n        inline OutputIteratorT find_format_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            FinderT Finder,\n            FormatterT Formatter )\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT((\n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                ));\n\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));\n\n            return detail::find_format_copy_impl(\n                Output,\n                lit_input,\n                Formatter,\n                Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) );\n        }\n\n        //! Generic replace algorithm\n        /*!\n            \\overload\n        */\n        template< \n            typename SequenceT, \n            typename FinderT,\n            typename FormatterT>\n        inline SequenceT find_format_copy(\n            const SequenceT& Input,\n            FinderT Finder,\n            FormatterT Formatter )\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT((\n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n\n            return detail::find_format_copy_impl(\n                Input,\n                Formatter,\n                Finder(::boost::begin(Input), ::boost::end(Input)));\n        }\n\n        //! Generic replace algorithm\n        /*!\n            Use the Finder to search for a substring. Use the Formatter to format\n            this substring and replace it in the input. The input is modified in-place.\n\n            \\param Input An input sequence\n            \\param Finder A Finder object used to search for a match to be replaced\n            \\param Formatter A Formatter object used to format a match\n        */\n        template<\n            typename SequenceT,\n            typename FinderT,\n            typename FormatterT>\n        inline void find_format( \n            SequenceT& Input,\n            FinderT Finder,\n            FormatterT Formatter)\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT(( \n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n\n            detail::find_format_impl(\n                Input,\n                Formatter,\n                Finder(::boost::begin(Input), ::boost::end(Input)));\n        }\n\n\n//  find_format_all generic ----------------------------------------------------------------//\n\n        //! Generic replace all algorithm\n        /*!\n            Use the Finder to search for a substring. Use the Formatter to format\n            this substring and replace it in the input. Repeat this for all matching\n            substrings.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input sequence\n            \\param Finder A Finder object used to search for a match to be replaced\n            \\param Formatter A Formatter object used to format a match\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template< \n            typename OutputIteratorT,\n            typename RangeT,\n            typename FinderT,\n            typename FormatterT>\n        inline OutputIteratorT find_format_all_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            FinderT Finder,\n            FormatterT Formatter)\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT(( \n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT(( \n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                ));\n\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));\n\n            return detail::find_format_all_copy_impl(\n                Output,\n                lit_input,\n                Finder,\n                Formatter,\n                Finder(::boost::begin(lit_input), ::boost::end(lit_input)));\n        }\n\n        //! Generic replace all algorithm\n        /*!\n            \\overload\n        */\n        template< \n            typename SequenceT, \n            typename FinderT,\n            typename FormatterT >\n        inline SequenceT find_format_all_copy(\n            const SequenceT& Input,\n            FinderT Finder,\n            FormatterT Formatter )\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT((\n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n\n            return detail::find_format_all_copy_impl(\n                Input,\n                Finder,\n                Formatter,\n                Finder( ::boost::begin(Input), ::boost::end(Input) ) );\n        }\n\n        //! Generic replace all algorithm\n        /*!\n            Use the Finder to search for a substring. Use the Formatter to format\n            this substring and replace it in the input. Repeat this for all matching\n            substrings.The input is modified in-place.\n\n            \\param Input An input sequence\n            \\param Finder A Finder object used to search for a match to be replaced\n            \\param Formatter A Formatter object used to format a match\n        */\n        template<\n            typename SequenceT,\n            typename FinderT,\n            typename FormatterT >\n        inline void find_format_all( \n            SequenceT& Input,\n            FinderT Finder,\n            FormatterT Formatter )\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT((\n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n\n            detail::find_format_all_impl(\n                Input,\n                Finder,\n                Formatter,\n                Finder(::boost::begin(Input), ::boost::end(Input)));\n\n        }\n\n    } // namespace algorithm\n\n    // pull the names to the boost namespace\n    using algorithm::find_format_copy;\n    using algorithm::find_format;\n    using algorithm::find_format_all_copy;\n    using algorithm::find_format_all;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_FIND_FORMAT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/find_iterator.hpp",
    "content": "//  Boost string_algo library find_iterator.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2004.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_ITERATOR_HPP\n#define BOOST_STRING_FIND_ITERATOR_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/as_literal.hpp>\n\n#include <boost/algorithm/string/detail/find_iterator.hpp>\n\n/*! \\file\n    Defines find iterator classes. Find iterator repeatedly applies a Finder\n    to the specified input string to search for matches. Dereferencing\n    the iterator yields the current match or a range between the last and the current\n    match depending on the iterator used.\n*/\n\nnamespace boost {\n    namespace algorithm { \n\n//  find_iterator -----------------------------------------------//\n\n        //! find_iterator\n        /*!    \n            Find iterator encapsulates a Finder and allows\n            for incremental searching in a string.\n            Each increment moves the iterator to the next match.\n\n            Find iterator is a readable forward traversal iterator.\n\n            Dereferencing the iterator yields an iterator_range delimiting\n            the current match.\n        */\n        template<typename IteratorT>\n        class find_iterator : \n            public iterator_facade<\n                find_iterator<IteratorT>,\n                const iterator_range<IteratorT>,\n                forward_traversal_tag >,\n            private detail::find_iterator_base<IteratorT>\n        {\n        private:\n            // facade support\n            friend class ::boost::iterator_core_access;\n\n        private:\n        // typedefs\n\n            typedef detail::find_iterator_base<IteratorT> base_type;\n            typedef BOOST_STRING_TYPENAME \n                base_type::input_iterator_type input_iterator_type;\n            typedef BOOST_STRING_TYPENAME \n                base_type::match_type match_type;\n\n        public:\n            //! Default constructor\n            /*!\n                Construct null iterator. All null iterators are equal.\n\n                \\post eof()==true\n            */\n            find_iterator() {}\n\n            //! Copy constructor\n            /*!\n                Construct a copy of the find_iterator\n            */\n            find_iterator( const find_iterator& Other ) :\n                base_type(Other),\n                m_Match(Other.m_Match),\n                m_End(Other.m_End) {}\n\n            //! Constructor\n            /*!\n                Construct new find_iterator for a given finder\n                and a range.\n            */\n            template<typename FinderT>\n            find_iterator(\n                    IteratorT Begin,\n                    IteratorT End,\n                    FinderT Finder ) :\n                detail::find_iterator_base<IteratorT>(Finder,0),\n                m_Match(Begin,Begin),\n                m_End(End)\n            {\n                increment();\n            }\n\n            //! Constructor\n            /*!\n                Construct new find_iterator for a given finder\n                and a range.\n            */\n            template<typename FinderT, typename RangeT>\n            find_iterator(\n                    RangeT& Col,\n                    FinderT Finder ) :\n                detail::find_iterator_base<IteratorT>(Finder,0)\n            {\n                iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::boost::as_literal(Col));\n                m_Match=::boost::make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));\n                m_End=::boost::end(lit_col);\n\n                increment();\n            }\n\n        private:\n        // iterator operations\n\n            // dereference\n            const match_type& dereference() const\n            {\n                return m_Match;\n            }\n\n            // increment\n            void increment()\n            {\n                m_Match=this->do_find(m_Match.end(),m_End);\n            }\n\n            // comparison\n            bool equal( const find_iterator& Other ) const\n            {\n                bool bEof=eof();\n                bool bOtherEof=Other.eof();\n\n                return bEof || bOtherEof ? bEof==bOtherEof :\n                    (\n                        m_Match==Other.m_Match &&\n                        m_End==Other.m_End \n                    );\n            }\n\n        public:\n        // operations\n\n            //! Eof check\n            /*!\n                Check the eof condition. Eof condition means that\n                there is nothing more to be searched i.e. find_iterator\n                is after the last match.\n            */\n            bool eof() const\n            {\n                return \n                    this->is_null() || \n                    ( \n                        m_Match.begin() == m_End &&\n                        m_Match.end() == m_End\n                    );\n            }\n\n        private:\n        // Attributes\n            match_type m_Match;\n            input_iterator_type m_End;\n        };\n\n        //! find iterator construction helper\n        /*!\n         *    Construct a find iterator to iterate through the specified string\n         */\n        template<typename RangeT, typename FinderT>\n        inline find_iterator< \n            BOOST_STRING_TYPENAME range_iterator<RangeT>::type>\n        make_find_iterator(\n            RangeT& Collection,\n            FinderT Finder)\n        {\n            return find_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(\n                Collection, Finder);\n        }\n\n//  split iterator -----------------------------------------------//\n\n        //! split_iterator\n        /*!    \n            Split iterator encapsulates a Finder and allows\n            for incremental searching in a string.\n            Unlike the find iterator, split iterator iterates\n            through gaps between matches.\n\n            Find iterator is a readable forward traversal iterator.\n\n            Dereferencing the iterator yields an iterator_range delimiting\n            the current match.\n        */\n        template<typename IteratorT>\n        class split_iterator : \n            public iterator_facade<\n                split_iterator<IteratorT>,\n                const iterator_range<IteratorT>,\n                forward_traversal_tag >,\n            private detail::find_iterator_base<IteratorT>\n        {\n        private:\n            // facade support\n            friend class ::boost::iterator_core_access;\n\n        private:\n        // typedefs\n\n            typedef detail::find_iterator_base<IteratorT> base_type;\n            typedef BOOST_STRING_TYPENAME \n                base_type::input_iterator_type input_iterator_type;\n            typedef BOOST_STRING_TYPENAME \n                base_type::match_type match_type;\n\n        public:\n            //! Default constructor\n            /*!\n                Construct null iterator. All null iterators are equal.\n    \n                \\post eof()==true\n            */\n            split_iterator() :\n                m_Next(),\n                m_End(),\n                m_bEof(true)\n            {}\n\n            //! Copy constructor\n            /*!\n                Construct a copy of the split_iterator\n            */\n            split_iterator( const split_iterator& Other ) :\n                base_type(Other),\n                m_Match(Other.m_Match),\n                m_Next(Other.m_Next),\n                m_End(Other.m_End),\n                m_bEof(Other.m_bEof)\n            {}\n\n            //! Constructor\n            /*!\n                Construct new split_iterator for a given finder\n                and a range.\n            */\n            template<typename FinderT>\n            split_iterator(\n                    IteratorT Begin,\n                    IteratorT End,\n                    FinderT Finder ) :\n                detail::find_iterator_base<IteratorT>(Finder,0),\n                m_Match(Begin,Begin),\n                m_Next(Begin),\n                m_End(End),\n                m_bEof(false)\n            {\n                // force the correct behavior for empty sequences and yield at least one token\n                if(Begin!=End)\n                {\n                    increment();\n                }\n            }\n            //! Constructor\n            /*!\n                Construct new split_iterator for a given finder\n                and a collection.\n            */\n            template<typename FinderT, typename RangeT>\n            split_iterator(\n                    RangeT& Col,\n                    FinderT Finder ) :\n                detail::find_iterator_base<IteratorT>(Finder,0),\n                m_bEof(false)\n            {\n                iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::boost::as_literal(Col));\n                m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));\n                m_Next=::boost::begin(lit_col);\n                m_End=::boost::end(lit_col);\n\n                // force the correct behavior for empty sequences and yield at least one token\n                if(m_Next!=m_End)\n                {\n                    increment();\n                }\n            }\n\n\n        private:\n        // iterator operations\n\n            // dereference\n            const match_type& dereference() const\n            {\n                return m_Match;\n            }\n\n            // increment\n            void increment()\n            {\n                match_type FindMatch=this->do_find( m_Next, m_End );\n\n                if(FindMatch.begin()==m_End && FindMatch.end()==m_End)\n                {\n                    if(m_Match.end()==m_End)\n                    {\n                        // Mark iterator as eof\n                        m_bEof=true;\n                    }\n                }\n\n                m_Match=match_type( m_Next, FindMatch.begin() );\n                m_Next=FindMatch.end();\n            }\n\n            // comparison\n            bool equal( const split_iterator& Other ) const\n            {\n                bool bEof=eof();\n                bool bOtherEof=Other.eof();\n\n                return bEof || bOtherEof ? bEof==bOtherEof :\n                    (\n                        m_Match==Other.m_Match &&\n                        m_Next==Other.m_Next &&\n                        m_End==Other.m_End\n                    );\n            }\n\n        public:\n        // operations\n\n            //! Eof check\n            /*!\n                Check the eof condition. Eof condition means that\n                there is nothing more to be searched i.e. find_iterator\n                is after the last match.\n            */\n            bool eof() const\n            {\n                return this->is_null() || m_bEof;\n            }\n\n        private:\n        // Attributes\n            match_type m_Match;\n            input_iterator_type m_Next;\n            input_iterator_type m_End;\n            bool m_bEof;\n        };\n\n        //! split iterator construction helper\n        /*!\n         *    Construct a split iterator to iterate through the specified collection\n         */\n        template<typename RangeT, typename FinderT>\n        inline split_iterator< \n            BOOST_STRING_TYPENAME range_iterator<RangeT>::type>\n        make_split_iterator(\n            RangeT& Collection,\n            FinderT Finder)\n        {\n            return split_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(\n                Collection, Finder);\n        }\n\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::find_iterator;\n    using algorithm::make_find_iterator;\n    using algorithm::split_iterator;\n    using algorithm::make_split_iterator;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_FIND_ITERATOR_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/finder.hpp",
    "content": "//  Boost string_algo library finder.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FINDER_HPP\n#define BOOST_STRING_FINDER_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n\n#include <boost/algorithm/string/constants.hpp>\n#include <boost/algorithm/string/detail/finder.hpp>\n#include <boost/algorithm/string/compare.hpp>\n\n/*! \\file\n    Defines Finder generators. Finder object is a functor which is able to \n    find a substring matching a specific criteria in the input.\n    Finders are used as a pluggable components for replace, find \n    and split facilities. This header contains generator functions \n    for finders provided in this library.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  Finder generators ------------------------------------------//\n        \n        //! \"First\" finder \n        /*!\n            Construct the \\c first_finder. The finder searches for the first\n            occurrence of the string in a given input.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param Search A substring to be searched for.\n            \\param Comp An element comparison predicate\n            \\return An instance of the \\c first_finder object\n        */\n        template<typename RangeT>\n        inline detail::first_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            is_equal>\n        first_finder( const RangeT& Search )\n        {\n            return \n                detail::first_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                        is_equal>( ::boost::as_literal(Search), is_equal() ) ;\n        }\n\n        //! \"First\" finder\n        /*!\n            \\overload\n        */\n        template<typename RangeT,typename PredicateT>\n        inline detail::first_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            PredicateT>\n        first_finder( \n            const RangeT& Search, PredicateT Comp )\n        {\n            return \n                detail::first_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    PredicateT>( ::boost::as_literal(Search), Comp );\n        }\n\n        //! \"Last\" finder\n        /*!\n            Construct the \\c last_finder. The finder searches for the last\n            occurrence of the string in a given input.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param Search A substring to be searched for.\n            \\param Comp An element comparison predicate\n            \\return An instance of the \\c last_finder object\n        */\n        template<typename RangeT>\n        inline detail::last_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            is_equal>\n        last_finder( const RangeT& Search )\n        {\n            return \n                detail::last_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    is_equal>( ::boost::as_literal(Search), is_equal() );\n        }\n        //! \"Last\" finder\n        /*!\n            \\overload\n        */\n        template<typename RangeT, typename PredicateT>\n        inline detail::last_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            PredicateT>\n        last_finder( const RangeT& Search, PredicateT Comp )\n        {\n            return \n                detail::last_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    PredicateT>( ::boost::as_literal(Search), Comp ) ;\n        }\n\n        //! \"Nth\" finder\n        /*!\n            Construct the \\c nth_finder. The finder searches for the n-th (zero-indexed)\n            occurrence of the string in a given input.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param Search A substring to be searched for.\n            \\param Nth An index of the match to be find\n            \\param Comp An element comparison predicate\n            \\return An instance of the \\c nth_finder object\n        */\n        template<typename RangeT>\n        inline detail::nth_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            is_equal>\n        nth_finder( \n            const RangeT& Search, \n            int Nth)\n        {\n            return \n                detail::nth_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    is_equal>( ::boost::as_literal(Search), Nth, is_equal() ) ;\n        }\n        //! \"Nth\" finder\n        /*!\n            \\overload\n        */\n        template<typename RangeT, typename PredicateT>\n        inline detail::nth_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            PredicateT>\n        nth_finder( \n            const RangeT& Search, \n            int Nth, \n            PredicateT Comp )\n        {\n            return \n                detail::nth_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    PredicateT>( ::boost::as_literal(Search), Nth, Comp );\n        }\n\n        //! \"Head\" finder\n        /*!\n            Construct the \\c head_finder. The finder returns a head of a given\n            input. The head is a prefix of a string up to n elements in\n            size. If an input has less then n elements, whole input is \n            considered a head.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param N The size of the head\n            \\return An instance of the \\c head_finder object\n        */\n        inline detail::head_finderF\n        head_finder( int N )\n        {\n            return detail::head_finderF(N);\n        }\n        \n        //! \"Tail\" finder\n        /*!\n            Construct the \\c tail_finder. The finder returns a tail of a given\n            input. The tail is a suffix of a string up to n elements in\n            size. If an input has less then n elements, whole input is \n            considered a head.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param N The size of the head\n            \\return An instance of the \\c tail_finder object\n        */\n        inline detail::tail_finderF\n        tail_finder( int N )\n        {\n            return detail::tail_finderF(N);\n        }\n\n        //! \"Token\" finder\n        /*!\n            Construct the \\c token_finder. The finder searches for a token \n            specified by a predicate. It is similar to std::find_if \n            algorithm, with an exception that it return a range of\n            instead of a single iterator.\n\n            If \"compress token mode\" is enabled, adjacent matching tokens are \n            concatenated into one match. Thus the finder can be used to \n            search for continuous segments of characters satisfying the \n            given predicate.\n\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param Pred An element selection predicate\n            \\param eCompress Compress flag\n            \\return An instance of the \\c token_finder object\n        */\n        template< typename PredicateT >\n        inline detail::token_finderF<PredicateT>\n        token_finder( \n            PredicateT Pred, \n            token_compress_mode_type eCompress=token_compress_off )\n        {\n            return detail::token_finderF<PredicateT>( Pred, eCompress );\n        }\n\n        //! \"Range\" finder\n        /*!\n            Construct the \\c range_finder. The finder does not perform \n            any operation. It simply returns the given range for \n            any input. \n\n            \\param Begin Beginning of the range\n            \\param End End of the range\n            \\param Range The range.\n            \\return An instance of the \\c range_finger object\n        */\n        template< typename ForwardIteratorT >\n        inline detail::range_finderF<ForwardIteratorT>\n        range_finder(\n            ForwardIteratorT Begin,\n            ForwardIteratorT End )\n        {\n            return detail::range_finderF<ForwardIteratorT>( Begin, End );\n        }\n\n        //! \"Range\" finder\n        /*!       \n            \\overload\n        */\n        template< typename ForwardIteratorT >\n        inline detail::range_finderF<ForwardIteratorT>\n        range_finder( iterator_range<ForwardIteratorT> Range )\n        {\n            return detail::range_finderF<ForwardIteratorT>( Range );\n        }\n\n    } // namespace algorithm\n\n    // pull the names to the boost namespace\n    using algorithm::first_finder;\n    using algorithm::last_finder;\n    using algorithm::nth_finder;\n    using algorithm::head_finder;\n    using algorithm::tail_finder;\n    using algorithm::token_finder;\n    using algorithm::range_finder;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_FINDER_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/formatter.hpp",
    "content": "//  Boost string_algo library formatter.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FORMATTER_HPP\n#define BOOST_STRING_FORMATTER_HPP\n\n#include <boost/detail/iterator.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/as_literal.hpp>\n\n#include <boost/algorithm/string/detail/formatter.hpp>\n\n/*! \\file\n    Defines Formatter generators. Formatter is a functor which formats\n    a string according to given parameters. A Formatter works\n    in conjunction with a Finder. A Finder can provide additional information\n    for a specific Formatter. An example of such a cooperation is regex_finder\n    and regex_formatter.\n\n    Formatters are used as pluggable components for replace facilities. \n    This header contains generator functions for the Formatters provided in this library.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n// generic formatters  ---------------------------------------------------------------//\n\n        //! Constant formatter\n        /*!\n            Constructs a \\c const_formatter. Const formatter always returns\n            the same value, regardless of the parameter.\n\n            \\param Format A predefined value used as a result for formatting\n            \\return An instance of the \\c const_formatter object.\n        */\n        template<typename RangeT>\n        inline detail::const_formatF<\n            iterator_range<\n                BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >\n        const_formatter(const RangeT& Format)\n        {\n            return detail::const_formatF<\n                iterator_range<\n                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >(::boost::as_literal(Format));\n        }\n\n        //! Identity formatter\n        /*!\n            Constructs an \\c identity_formatter. Identity formatter always returns\n            the parameter.\n\n            \\return An instance of the \\c identity_formatter object.\n        */\n        template<typename RangeT>\n        inline detail::identity_formatF<\n            iterator_range<\n                BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >\n        identity_formatter()\n        {\n            return detail::identity_formatF<\n                iterator_range<\n                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();\n        }\n\n        //! Empty formatter\n        /*!\n            Constructs an \\c empty_formatter. Empty formatter always returns an empty\n            sequence. \n\n            \\param Input container used to select a correct value_type for the\n                         resulting empty_container<>.\n            \\return An instance of the \\c empty_formatter object.\n        */\n        template<typename RangeT>\n        inline detail::empty_formatF< \n            BOOST_STRING_TYPENAME range_value<RangeT>::type>\n        empty_formatter(const RangeT&)\n        {\n            return detail::empty_formatF<\n                BOOST_STRING_TYPENAME range_value<RangeT>::type>();\n        }\n\n        //! Empty formatter\n        /*!\n            Constructs a \\c dissect_formatter. Dissect formatter uses a specified finder\n            to extract a portion of the formatted sequence. The first finder's match is returned \n            as a result\n\n            \\param Finder a finder used to select a portion of the formatted sequence\n            \\return An instance of the \\c dissect_formatter object.\n        */\n        template<typename FinderT>\n        inline detail::dissect_formatF< FinderT >\n        dissect_formatter(const FinderT& Finder)\n        {\n            return detail::dissect_formatF<FinderT>(Finder);\n        }\n\n\n    } // namespace algorithm\n\n    // pull the names to the boost namespace\n    using algorithm::const_formatter;\n    using algorithm::identity_formatter;\n    using algorithm::empty_formatter;\n    using algorithm::dissect_formatter;\n\n} // namespace boost\n\n\n#endif  // BOOST_FORMATTER_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/iter_find.hpp",
    "content": "//  Boost string_algo library iter_find.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_ITER_FIND_HPP\n#define BOOST_STRING_ITER_FIND_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <algorithm>\n#include <iterator>\n#include <boost/iterator/transform_iterator.hpp>\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/as_literal.hpp>\n\n#include <boost/algorithm/string/concept.hpp>\n#include <boost/algorithm/string/find_iterator.hpp>\n#include <boost/algorithm/string/detail/util.hpp>\n\n/*! \\file\n    Defines generic split algorithms. Split algorithms can be \n    used to divide a sequence into several part according \n    to a given criteria. Result is given as a 'container \n    of containers' where elements are copies or references \n    to extracted parts.\n\n    There are two algorithms provided. One iterates over matching\n    substrings, the other one over the gaps between these matches.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  iterate find ---------------------------------------------------//\n\n        //! Iter find algorithm\n        /*!\n            This algorithm executes a given finder in iteration on the input,\n            until the end of input is reached, or no match is found.\n            Iteration is done using built-in find_iterator, so the real \n            searching is performed only when needed.\n            In each iteration new match is found and added to the result.\n\n            \\param Result A 'container container' to contain the result of search.\n                Both outer and inner container must have constructor taking a pair\n                of iterators as an argument.\n                Typical type of the result is \n                    \\c std::vector<boost::iterator_range<iterator>>\n                (each element of such a vector will container a range delimiting \n                a match).\n            \\param Input A container which will be searched.\n            \\param Finder A Finder object used for searching\n            \\return A reference to the result\n\n            \\note Prior content of the result will be overwritten.\n        */\n        template< \n            typename SequenceSequenceT,\n            typename RangeT,\n            typename FinderT >\n        inline SequenceSequenceT&\n        iter_find(\n            SequenceSequenceT& Result,\n            RangeT& Input,\n            FinderT Finder )\n        {\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_iterator<RangeT>::type>\n                ));\n\n            iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));\n\n            typedef BOOST_STRING_TYPENAME \n                range_iterator<RangeT>::type input_iterator_type;\n            typedef find_iterator<input_iterator_type> find_iterator_type;\n            typedef detail::copy_iterator_rangeF<\n                BOOST_STRING_TYPENAME \n                    range_value<SequenceSequenceT>::type,\n                input_iterator_type> copy_range_type;\n            \n            input_iterator_type InputEnd=::boost::end(lit_input);\n\n            typedef transform_iterator<copy_range_type, find_iterator_type>\n                transform_iter_type;\n    \n            transform_iter_type itBegin=\n                ::boost::make_transform_iterator( \n                    find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),\n                    copy_range_type());\n            \n            transform_iter_type itEnd=\n                ::boost::make_transform_iterator( \n                    find_iterator_type(),\n                    copy_range_type());\n\n            SequenceSequenceT Tmp(itBegin, itEnd);\n                        \n            Result.swap(Tmp);\n            return Result;\n        }\n\n//  iterate split ---------------------------------------------------//\n\n        //! Split find algorithm\n        /*!\n            This algorithm executes a given finder in iteration on the input,\n            until the end of input is reached, or no match is found.\n            Iteration is done using built-in find_iterator, so the real \n            searching is performed only when needed.\n            Each match is used as a separator of segments. These segments are then\n            returned in the result.\n\n            \\param Result A 'container container' to contain the result of search.\n                Both outer and inner container must have constructor taking a pair\n                of iterators as an argument.\n                Typical type of the result is \n                    \\c std::vector<boost::iterator_range<iterator>>\n                (each element of such a vector will container a range delimiting \n                a match).\n            \\param Input A container which will be searched.\n            \\param Finder A finder object used for searching\n            \\return A reference to the result\n\n            \\note Prior content of the result will be overwritten.\n        */\n        template< \n            typename SequenceSequenceT,\n            typename RangeT,\n            typename FinderT >\n        inline SequenceSequenceT&\n        iter_split(\n            SequenceSequenceT& Result,\n            RangeT& Input,\n            FinderT Finder )\n        {\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<FinderT,\n                BOOST_STRING_TYPENAME range_iterator<RangeT>::type>\n                ));\n\n            iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));\n\n            typedef BOOST_STRING_TYPENAME \n                range_iterator<RangeT>::type input_iterator_type;\n            typedef split_iterator<input_iterator_type> find_iterator_type;\n            typedef detail::copy_iterator_rangeF<\n                BOOST_STRING_TYPENAME \n                    range_value<SequenceSequenceT>::type,\n                input_iterator_type> copy_range_type;\n            \n            input_iterator_type InputEnd=::boost::end(lit_input);\n\n            typedef transform_iterator<copy_range_type, find_iterator_type>\n                transform_iter_type;\n    \n            transform_iter_type itBegin=\n                ::boost::make_transform_iterator( \n                    find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),\n                    copy_range_type() );\n\n            transform_iter_type itEnd=\n                ::boost::make_transform_iterator( \n                    find_iterator_type(),\n                    copy_range_type() );\n            \n            SequenceSequenceT Tmp(itBegin, itEnd);\n\n            Result.swap(Tmp);\n            return Result;\n        }\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::iter_find;\n    using algorithm::iter_split;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_ITER_FIND_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/join.hpp",
    "content": "//  Boost string_algo library join.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_JOIN_HPP\n#define BOOST_STRING_JOIN_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/algorithm/string/detail/sequence.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/as_literal.hpp>\n\n/*! \\file\n    Defines join algorithm. \n\n    Join algorithm is a counterpart to split algorithms.\n    It joins strings from a 'list' by adding user defined separator.\n    Additionally there is a version that allows simple filtering\n    by providing a predicate.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  join --------------------------------------------------------------//\n\n        //! Join algorithm\n        /*!\n            This algorithm joins all strings in a 'list' into one long string.\n            Segments are concatenated by given separator.\n\n            \\param Input A container that holds the input strings. It must be a container-of-containers.\n            \\param Separator A string that will separate the joined segments.\n            \\return Concatenated string.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template< typename SequenceSequenceT, typename Range1T>\n        inline typename range_value<SequenceSequenceT>::type \n        join(\n            const SequenceSequenceT& Input,\n            const Range1T& Separator)\n        {\n            // Define working types\n            typedef typename range_value<SequenceSequenceT>::type ResultT;\n            typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;\n\n            // Parse input\n            InputIteratorT itBegin=::boost::begin(Input);\n            InputIteratorT itEnd=::boost::end(Input);\n\n            // Construct container to hold the result\n            ResultT Result;\n            \n            // Append first element\n            if(itBegin!=itEnd)\n            {\n                detail::insert(Result, ::boost::end(Result), *itBegin);\n                ++itBegin;\n            }\n\n            for(;itBegin!=itEnd; ++itBegin)\n            {\n                // Add separator\n                detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));\n                // Add element\n                detail::insert(Result, ::boost::end(Result), *itBegin);\n            }\n\n            return Result;\n        }\n\n// join_if ----------------------------------------------------------//\n\n        //! Conditional join algorithm\n        /*!\n            This algorithm joins all strings in a 'list' into one long string.\n            Segments are concatenated by given separator. Only segments that\n            satisfy the predicate will be added to the result.\n\n            \\param Input A container that holds the input strings. It must be a container-of-containers.\n            \\param Separator A string that will separate the joined segments.\n            \\param Pred A segment selection predicate\n            \\return Concatenated string.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template< typename SequenceSequenceT, typename Range1T, typename PredicateT>\n        inline typename range_value<SequenceSequenceT>::type \n        join_if(\n            const SequenceSequenceT& Input,\n            const Range1T& Separator,\n            PredicateT Pred)\n        {\n            // Define working types\n            typedef typename range_value<SequenceSequenceT>::type ResultT;\n            typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;\n\n            // Parse input\n            InputIteratorT itBegin=::boost::begin(Input);\n            InputIteratorT itEnd=::boost::end(Input);\n\n            // Construct container to hold the result\n            ResultT Result;\n\n            // Roll to the first element that will be added\n            while(itBegin!=itEnd && !Pred(*itBegin)) ++itBegin;\n            // Add this element\n            if(itBegin!=itEnd)\n            {\n                detail::insert(Result, ::boost::end(Result), *itBegin);\n                ++itBegin;\n            }\n\n            for(;itBegin!=itEnd; ++itBegin)\n            {\n                if(Pred(*itBegin))\n                {\n                    // Add separator\n                    detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));\n                    // Add element\n                    detail::insert(Result, ::boost::end(Result), *itBegin);\n                }\n            }\n\n            return Result;\n        }\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::join;\n    using algorithm::join_if;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_JOIN_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/predicate.hpp",
    "content": "//  Boost string_algo library predicate.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_PREDICATE_HPP\n#define BOOST_STRING_PREDICATE_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/as_literal.hpp>\n#include <boost/range/iterator_range_core.hpp>\n\n#include <boost/algorithm/string/compare.hpp>\n#include <boost/algorithm/string/find.hpp>\n#include <boost/algorithm/string/detail/predicate.hpp>\n\n/*! \\file boost/algorithm/string/predicate.hpp\n    Defines string-related predicates. \n    The predicates determine whether a substring is contained in the input string \n    under various conditions: a string starts with the substring, ends with the \n    substring, simply contains the substring or if both strings are equal.\n    Additionaly the algorithm \\c all() checks all elements of a container to satisfy a \n    condition.\n\n    All predicates provide the strong exception guarantee.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  starts_with predicate  -----------------------------------------------//\n\n        //! 'Starts with' predicate\n        /*!\n            This predicate holds when the test string is a prefix of the Input.\n            In other words, if the input starts with the test.\n            When the optional predicate is specified, it is used for character-wise\n            comparison.\n\n            \\param Input An input sequence\n            \\param Test A test sequence\n            \\param Comp An element comparison predicate\n            \\return The result of the test\n\n              \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T, typename PredicateT>\n            inline bool starts_with( \n            const Range1T& Input, \n            const Range2T& Test,\n            PredicateT Comp)\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input));\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test));\n\n            typedef BOOST_STRING_TYPENAME \n                range_const_iterator<Range1T>::type Iterator1T;\n            typedef BOOST_STRING_TYPENAME \n                range_const_iterator<Range2T>::type Iterator2T;\n\n            Iterator1T InputEnd=::boost::end(lit_input);\n            Iterator2T TestEnd=::boost::end(lit_test);\n\n            Iterator1T it=::boost::begin(lit_input);\n            Iterator2T pit=::boost::begin(lit_test);\n            for(;\n                it!=InputEnd && pit!=TestEnd;\n                ++it,++pit)\n            {\n                if( !(Comp(*it,*pit)) )\n                    return false;\n            }\n\n            return pit==TestEnd;\n        }\n\n        //! 'Starts with' predicate\n        /*!\n            \\overload\n        */\n        template<typename Range1T, typename Range2T>\n        inline bool starts_with( \n            const Range1T& Input, \n            const Range2T& Test)\n        {\n            return ::boost::algorithm::starts_with(Input, Test, is_equal());\n        }\n\n        //! 'Starts with' predicate ( case insensitive )\n        /*!\n            This predicate holds when the test string is a prefix of the Input.\n            In other words, if the input starts with the test.\n            Elements are compared case insensitively.\n\n            \\param Input An input sequence\n            \\param Test A test sequence\n            \\param Loc A locale used for case insensitive comparison\n            \\return The result of the test\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T>\n        inline bool istarts_with( \n            const Range1T& Input, \n            const Range2T& Test,\n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::starts_with(Input, Test, is_iequal(Loc));\n        }\n\n\n//  ends_with predicate  -----------------------------------------------//\n\n        //! 'Ends with' predicate\n        /*!\n            This predicate holds when the test string is a suffix of the Input.\n            In other words, if the input ends with the test.\n            When the optional predicate is specified, it is used for character-wise\n            comparison.\n\n\n            \\param Input An input sequence\n            \\param Test A test sequence\n            \\param Comp An element comparison predicate\n            \\return The result of the test\n\n              \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T, typename PredicateT>\n        inline bool ends_with( \n            const Range1T& Input, \n            const Range2T& Test,\n            PredicateT Comp)\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input));\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test));\n\n            typedef BOOST_STRING_TYPENAME \n                range_const_iterator<Range1T>::type Iterator1T;\n            typedef BOOST_STRING_TYPENAME boost::detail::\n                iterator_traits<Iterator1T>::iterator_category category;\n\n            return detail::\n                ends_with_iter_select( \n                    ::boost::begin(lit_input), \n                    ::boost::end(lit_input), \n                    ::boost::begin(lit_test), \n                    ::boost::end(lit_test), \n                    Comp,\n                    category());\n        }\n\n\n        //! 'Ends with' predicate\n        /*!\n            \\overload\n        */\n        template<typename Range1T, typename Range2T>\n        inline bool ends_with( \n            const Range1T& Input, \n            const Range2T& Test)\n        {\n            return ::boost::algorithm::ends_with(Input, Test, is_equal());\n        }\n\n        //! 'Ends with' predicate ( case insensitive )\n        /*!\n            This predicate holds when the test container is a suffix of the Input.\n            In other words, if the input ends with the test.\n            Elements are compared case insensitively.\n\n            \\param Input An input sequence\n            \\param Test A test sequence\n            \\param Loc A locale used for case insensitive comparison\n            \\return The result of the test\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T>\n        inline bool iends_with( \n            const Range1T& Input, \n            const Range2T& Test,\n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::ends_with(Input, Test, is_iequal(Loc));\n        }\n\n//  contains predicate  -----------------------------------------------//\n\n        //! 'Contains' predicate\n        /*!\n            This predicate holds when the test container is contained in the Input.\n            When the optional predicate is specified, it is used for character-wise\n            comparison.\n\n            \\param Input An input sequence\n            \\param Test A test sequence\n            \\param Comp An element comparison predicate\n            \\return The result of the test\n\n               \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T, typename PredicateT>\n        inline bool contains( \n            const Range1T& Input, \n            const Range2T& Test,\n            PredicateT Comp)\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input));\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test));\n\n            if (::boost::empty(lit_test))\n            {\n                // Empty range is contained always\n                return true;\n            }\n            \n            // Use the temporary variable to make VACPP happy\n            bool bResult=(::boost::algorithm::first_finder(lit_test,Comp)(::boost::begin(lit_input), ::boost::end(lit_input)));\n            return bResult;\n        }\n\n        //! 'Contains' predicate\n        /*!\n            \\overload\n        */\n        template<typename Range1T, typename Range2T>\n        inline bool contains( \n            const Range1T& Input, \n            const Range2T& Test)\n        {\n            return ::boost::algorithm::contains(Input, Test, is_equal());\n        }\n\n        //! 'Contains' predicate ( case insensitive )\n        /*!\n            This predicate holds when the test container is contained in the Input.\n            Elements are compared case insensitively.\n\n            \\param Input An input sequence\n            \\param Test A test sequence\n            \\param Loc A locale used for case insensitive comparison\n            \\return The result of the test\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T>\n        inline bool icontains( \n            const Range1T& Input, \n            const Range2T& Test, \n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::contains(Input, Test, is_iequal(Loc));\n        }\n\n//  equals predicate  -----------------------------------------------//\n\n        //! 'Equals' predicate\n        /*!\n            This predicate holds when the test container is equal to the\n            input container i.e. all elements in both containers are same.\n            When the optional predicate is specified, it is used for character-wise\n            comparison.\n\n            \\param Input An input sequence\n            \\param Test A test sequence\n            \\param Comp An element comparison predicate\n            \\return The result of the test\n\n            \\note This is a two-way version of \\c std::equal algorithm\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T, typename PredicateT>\n        inline bool equals( \n            const Range1T& Input, \n            const Range2T& Test,\n            PredicateT Comp)\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(::boost::as_literal(Input));\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(::boost::as_literal(Test));\n\n            typedef BOOST_STRING_TYPENAME \n                range_const_iterator<Range1T>::type Iterator1T;\n            typedef BOOST_STRING_TYPENAME \n                range_const_iterator<Range2T>::type Iterator2T;\n                \n            Iterator1T InputEnd=::boost::end(lit_input);\n            Iterator2T TestEnd=::boost::end(lit_test);\n\n            Iterator1T it=::boost::begin(lit_input);\n            Iterator2T pit=::boost::begin(lit_test);\n            for(;\n                it!=InputEnd && pit!=TestEnd;\n                ++it,++pit)\n            {\n                if( !(Comp(*it,*pit)) )\n                    return false;\n            }\n\n            return  (pit==TestEnd) && (it==InputEnd);\n        }\n\n        //! 'Equals' predicate\n        /*!\n            \\overload\n        */\n        template<typename Range1T, typename Range2T>\n        inline bool equals( \n            const Range1T& Input, \n            const Range2T& Test)\n        {\n            return ::boost::algorithm::equals(Input, Test, is_equal());\n        }\n\n        //! 'Equals' predicate ( case insensitive )\n        /*!\n            This predicate holds when the test container is equal to the\n            input container i.e. all elements in both containers are same.\n            Elements are compared case insensitively.\n\n            \\param Input An input sequence\n            \\param Test A test sequence\n            \\param Loc A locale used for case insensitive comparison\n            \\return The result of the test\n\n            \\note This is a two-way version of \\c std::equal algorithm\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename Range1T, typename Range2T>\n        inline bool iequals( \n            const Range1T& Input, \n            const Range2T& Test,\n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::equals(Input, Test, is_iequal(Loc));\n        }\n\n// lexicographical_compare predicate -----------------------------//\n\n        //! Lexicographical compare predicate\n        /*!\n             This predicate is an overload of std::lexicographical_compare\n             for range arguments\n\n             It check whether the first argument is lexicographically less\n             then the second one.\n\n             If the optional predicate is specified, it is used for character-wise\n             comparison\n\n             \\param Arg1 First argument \n             \\param Arg2 Second argument\n             \\param Pred Comparison predicate\n             \\return The result of the test\n\n             \\note This function provides the strong exception-safety guarantee\n         */\n        template<typename Range1T, typename Range2T, typename PredicateT>\n        inline bool lexicographical_compare(\n            const Range1T& Arg1,\n            const Range2T& Arg2,\n            PredicateT Pred)\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_arg1(::boost::as_literal(Arg1));\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_arg2(::boost::as_literal(Arg2));\n\n            return std::lexicographical_compare(\n                ::boost::begin(lit_arg1),\n                ::boost::end(lit_arg1),\n                ::boost::begin(lit_arg2),\n                ::boost::end(lit_arg2),\n                Pred);\n        }\n\n        //! Lexicographical compare predicate\n        /*!\n            \\overload\n         */\n        template<typename Range1T, typename Range2T>\n            inline bool lexicographical_compare(\n            const Range1T& Arg1,\n            const Range2T& Arg2)\n        {\n            return ::boost::algorithm::lexicographical_compare(Arg1, Arg2, is_less());\n        }\n\n        //! Lexicographical compare predicate (case-insensitive)\n        /*!\n            This predicate is an overload of std::lexicographical_compare\n            for range arguments.\n            It check whether the first argument is lexicographically less\n            then the second one.\n            Elements are compared case insensitively\n\n\n             \\param Arg1 First argument \n             \\param Arg2 Second argument\n             \\param Loc A locale used for case insensitive comparison\n             \\return The result of the test\n\n             \\note This function provides the strong exception-safety guarantee\n         */\n        template<typename Range1T, typename Range2T>\n        inline bool ilexicographical_compare(\n            const Range1T& Arg1,\n            const Range2T& Arg2,\n            const std::locale& Loc=std::locale())\n        {\n            return ::boost::algorithm::lexicographical_compare(Arg1, Arg2, is_iless(Loc));\n        }\n        \n\n//  all predicate  -----------------------------------------------//\n\n        //! 'All' predicate\n        /*!\n            This predicate holds it all its elements satisfy a given \n            condition, represented by the predicate.\n            \n            \\param Input An input sequence\n            \\param Pred A predicate\n            \\return The result of the test\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename RangeT, typename PredicateT>\n        inline bool all( \n            const RangeT& Input, \n            PredicateT Pred)\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));\n\n            typedef BOOST_STRING_TYPENAME \n                range_const_iterator<RangeT>::type Iterator1T;\n\n            Iterator1T InputEnd=::boost::end(lit_input);\n            for( Iterator1T It=::boost::begin(lit_input); It!=InputEnd; ++It)\n            {\n                if (!Pred(*It))\n                    return false;\n            }\n            \n            return true;\n        }\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::starts_with;\n    using algorithm::istarts_with;\n    using algorithm::ends_with;\n    using algorithm::iends_with;\n    using algorithm::contains;\n    using algorithm::icontains;\n    using algorithm::equals;\n    using algorithm::iequals;\n    using algorithm::all;\n    using algorithm::lexicographical_compare;\n    using algorithm::ilexicographical_compare;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_PREDICATE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/predicate_facade.hpp",
    "content": "//  Boost string_algo library predicate_facade.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_PREDICATE_FACADE_HPP\n#define BOOST_STRING_PREDICATE_FACADE_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n/*\n \\file boost/algorith/string/predicate_facade.hpp\n This file contains predicate_facade definition. This template class is used\n to identify classification predicates, so they can be combined using\n composition operators.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  predicate facade ------------------------------------------------------//\n\n        //! Predicate facade\n        /*!\n            This class allows to recognize classification\n            predicates, so that they can be combined using\n            composition operators.\n            Every classification predicate must be derived from this class.\n        */\n        template<typename Derived>\n        struct predicate_facade {};\n\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_CLASSIFICATION_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/regex.hpp",
    "content": "//  Boost string_algo library regex.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_REGEX_HPP\n#define BOOST_STRING_REGEX_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/regex.hpp>\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/as_literal.hpp>\n\n#include <boost/algorithm/string/find_format.hpp>\n#include <boost/algorithm/string/regex_find_format.hpp>\n#include <boost/algorithm/string/formatter.hpp>\n#include <boost/algorithm/string/iter_find.hpp>\n\n/*! \\file\n    Defines regex variants of the algorithms. \n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  find_regex  -----------------------------------------------//\n\n        //! Find regex algorithm\n        /*!\n            Search for a substring matching the given regex in the input.\n            \n            \\param Input A container which will be searched.\n            \\param Rx A regular expression\n            \\param Flags Regex options\n            \\return \n                An \\c iterator_range delimiting the match. \n                Returned iterator is either \\c RangeT::iterator or \n                \\c RangeT::const_iterator, depending on the constness of \n                the input parameter.\n\n              \\note This function provides the strong exception-safety guarantee\n        */\n        template< \n            typename RangeT, \n            typename CharT, \n            typename RegexTraitsT>\n        inline iterator_range< \n            BOOST_STRING_TYPENAME range_iterator<RangeT>::type >\n        find_regex( \n            RangeT& Input, \n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));\n\n            return ::boost::algorithm::regex_finder(Rx,Flags)(\n                ::boost::begin(lit_input), ::boost::end(lit_input) );\n        }\n\n//  replace_regex --------------------------------------------------------------------//\n\n        //! Replace regex algorithm\n        /*!\n            Search for a substring matching given regex and format it with \n            the specified format.             \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Rx A regular expression\n            \\param Format Regex format definition\n            \\param Flags Regex options\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input   \n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template< \n            typename OutputIteratorT,\n            typename RangeT, \n            typename CharT, \n            typename RegexTraitsT,\n            typename FormatStringTraitsT, typename FormatStringAllocatorT >\n        inline OutputIteratorT replace_regex_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,\n            match_flag_type Flags=match_default | format_default )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Output,\n                Input,\n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::regex_formatter( Format, Flags ) );\n        }\n\n        //! Replace regex algorithm\n        /*!\n            \\overload\n        */\n        template< \n            typename SequenceT, \n            typename CharT, \n            typename RegexTraitsT,\n            typename FormatStringTraitsT, typename FormatStringAllocatorT >\n        inline SequenceT replace_regex_copy( \n            const SequenceT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,\n            match_flag_type Flags=match_default | format_default )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::regex_formatter( Format, Flags ) );\n        }\n\n        //! Replace regex algorithm\n        /*!\n            Search for a substring matching given regex and format it with \n            the specified format. The input string is modified in-place.\n\n            \\param Input An input string\n            \\param Rx A regular expression\n            \\param Format Regex format definition\n            \\param Flags Regex options\n        */\n        template< \n            typename SequenceT, \n            typename CharT, \n            typename RegexTraitsT,\n            typename FormatStringTraitsT, typename FormatStringAllocatorT >\n        inline void replace_regex( \n            SequenceT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,\n            match_flag_type Flags=match_default | format_default )\n        {\n            ::boost::algorithm::find_format( \n                Input,\n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::regex_formatter( Format, Flags ) );\n        }\n\n//  replace_all_regex --------------------------------------------------------------------//\n\n        //! Replace all regex algorithm\n        /*!\n            Format all substrings, matching given regex, with the specified format. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Rx A regular expression\n            \\param Format Regex format definition\n            \\param Flags Regex options\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input     \n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template< \n            typename OutputIteratorT,\n            typename RangeT, \n            typename CharT, \n            typename RegexTraitsT,\n            typename FormatStringTraitsT, typename FormatStringAllocatorT >\n        inline OutputIteratorT replace_all_regex_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,\n            match_flag_type Flags=match_default | format_default )\n        {\n            return ::boost::algorithm::find_format_all_copy( \n                Output,\n                Input,\n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::regex_formatter( Format, Flags ) );\n        }\n\n        //! Replace all regex algorithm\n        /*!\n            \\overload\n        */\n        template< \n            typename SequenceT, \n            typename CharT, \n            typename RegexTraitsT,\n            typename FormatStringTraitsT, typename FormatStringAllocatorT >\n        inline SequenceT replace_all_regex_copy( \n            const SequenceT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,\n            match_flag_type Flags=match_default | format_default )\n        {\n            return ::boost::algorithm::find_format_all_copy( \n                Input,\n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::regex_formatter( Format, Flags ) );\n        }\n\n        //! Replace all regex algorithm\n        /*!\n            Format all substrings, matching given regex, with the specified format. \n            The input string is modified in-place.\n\n            \\param Input An input string\n            \\param Rx A regular expression\n            \\param Format Regex format definition\n            \\param Flags Regex options            \n        */\n        template< \n            typename SequenceT, \n            typename CharT, \n            typename RegexTraitsT,\n            typename FormatStringTraitsT, typename FormatStringAllocatorT >\n        inline void replace_all_regex( \n            SequenceT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,\n            match_flag_type Flags=match_default | format_default )\n        {\n            ::boost::algorithm::find_format_all( \n                Input,\n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::regex_formatter( Format, Flags ) );\n        }\n\n//  erase_regex --------------------------------------------------------------------//\n\n        //! Erase regex algorithm\n        /*!\n            Remove a substring matching given regex from the input.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.                        \n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Rx A regular expression\n            \\param Flags Regex options\n            \\return An output iterator pointing just after the last inserted character or\n                       a modified copy of the input    \n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n       */\n        template< \n            typename OutputIteratorT,\n            typename RangeT, \n            typename CharT, \n            typename RegexTraitsT >\n        inline OutputIteratorT erase_regex_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n        //! Erase regex algorithm\n        /*!\n            \\overload\n        */\n        template< \n            typename SequenceT, \n            typename CharT, \n            typename RegexTraitsT >\n        inline SequenceT erase_regex_copy( \n            const SequenceT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input, \n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n        //! Erase regex algorithm\n        /*!\n            Remove a substring matching given regex from the input.\n            The input string is modified in-place.\n\n            \\param Input An input string\n            \\param Rx A regular expression\n            \\param Flags Regex options\n        */\n        template< \n            typename SequenceT, \n            typename CharT, \n            typename RegexTraitsT >\n        inline void erase_regex( \n            SequenceT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n//  erase_all_regex --------------------------------------------------------------------//\n\n        //! Erase all regex algorithm\n        /*!\n            Erase all substrings, matching given regex, from the input.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            \n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Rx A regular expression\n            \\param Flags Regex options\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input                        \n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template< \n            typename OutputIteratorT,\n            typename RangeT, \n            typename CharT, \n            typename RegexTraitsT >\n        inline OutputIteratorT erase_all_regex_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            return ::boost::algorithm::find_format_all_copy(\n                Output,\n                Input,\n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n        //! Erase all regex algorithm\n        /*!\n            \\overload\n        */\n        template< \n            typename SequenceT, \n            typename CharT, \n            typename RegexTraitsT >\n        inline SequenceT erase_all_regex_copy( \n            const SequenceT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            return ::boost::algorithm::find_format_all_copy( \n                Input, \n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n        //! Erase all regex algorithm\n        /*!\n            Erase all substrings, matching given regex, from the input.\n            The input string is modified in-place.\n\n            \\param Input An input string\n            \\param Rx A regular expression\n            \\param Flags Regex options\n        */\n        template< \n            typename SequenceT, \n            typename CharT, \n            typename RegexTraitsT>\n        inline void erase_all_regex( \n            SequenceT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            ::boost::algorithm::find_format_all( \n                Input, \n                ::boost::algorithm::regex_finder( Rx, Flags ),\n                ::boost::algorithm::empty_formatter( Input ) );\n        }\n\n//  find_all_regex ------------------------------------------------------------------//\n\n        //! Find all regex algorithm\n        /*!\n            This algorithm finds all substrings matching the give regex\n            in the input.             \n            \n            Each part is copied and added as a new element to the output container.\n            Thus the result container must be able to hold copies\n            of the matches (in a compatible structure like std::string) or\n            a reference to it (e.g. using the iterator range class).\n            Examples of such a container are \\c std::vector<std::string>\n            or \\c std::list<boost::iterator_range<std::string::iterator>>\n\n            \\param Result A container that can hold copies of references to the substrings.\n            \\param Input A container which will be searched.\n            \\param Rx A regular expression\n            \\param Flags Regex options\n            \\return A reference to the result\n\n            \\note Prior content of the result will be overwritten.\n\n             \\note This function provides the strong exception-safety guarantee\n        */\n        template< \n            typename SequenceSequenceT, \n            typename RangeT,         \n            typename CharT, \n            typename RegexTraitsT >\n        inline SequenceSequenceT& find_all_regex(\n            SequenceSequenceT& Result,\n            const RangeT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            return ::boost::algorithm::iter_find(\n                Result,\n                Input,\n                ::boost::algorithm::regex_finder(Rx,Flags) );         \n        }\n\n//  split_regex ------------------------------------------------------------------//\n\n        //! Split regex algorithm\n        /*! \n            Tokenize expression. This function is equivalent to C strtok. Input\n            sequence is split into tokens, separated  by separators. Separator\n            is an every match of the given regex.\n            Each part is copied and added as a new element to the output container.\n            Thus the result container must be able to hold copies\n            of the matches (in a compatible structure like std::string) or\n            a reference to it (e.g. using the iterator range class).\n            Examples of such a container are \\c std::vector<std::string>\n            or \\c std::list<boost::iterator_range<std::string::iterator>>\n    \n            \\param Result A container that can hold copies of references to the substrings.          \n            \\param Input A container which will be searched.\n            \\param Rx A regular expression\n            \\param Flags Regex options\n            \\return A reference to the result\n\n            \\note Prior content of the result will be overwritten.\n\n               \\note This function provides the strong exception-safety guarantee\n        */\n        template< \n            typename SequenceSequenceT, \n            typename RangeT,         \n            typename CharT, \n            typename RegexTraitsT >\n        inline SequenceSequenceT& split_regex(\n            SequenceSequenceT& Result,\n            const RangeT& Input,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            return ::boost::algorithm::iter_split(\n                Result,\n                Input,\n                ::boost::algorithm::regex_finder(Rx,Flags) );         \n        }\n\n//  join_if ------------------------------------------------------------------//\n\n#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        //! Conditional join algorithm\n        /*!\n            This algorithm joins all strings in a 'list' into one long string.\n            Segments are concatenated by given separator. Only segments that\n            match the given regular expression will be added to the result\n\n            This is a specialization of join_if algorithm.\n\n            \\param Input A container that holds the input strings. It must be a container-of-containers.\n            \\param Separator A string that will separate the joined segments.\n            \\param Rx A regular expression\n            \\param Flags Regex options\n            \\return Concatenated string.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template< \n            typename SequenceSequenceT, \n            typename Range1T,             \n            typename CharT, \n            typename RegexTraitsT >\n        inline typename range_value<SequenceSequenceT>::type \n        join_if(\n            const SequenceSequenceT& Input,\n            const Range1T& Separator,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            // Define working types\n            typedef typename range_value<SequenceSequenceT>::type ResultT;\n            typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;\n\n            // Parse input\n            InputIteratorT itBegin=::boost::begin(Input);\n            InputIteratorT itEnd=::boost::end(Input);\n\n            // Construct container to hold the result\n            ResultT Result;\n\n\n            // Roll to the first element that will be added\n            while(\n                itBegin!=itEnd && \n                !::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;\n\n            // Add this element\n            if(itBegin!=itEnd)\n            {\n                detail::insert(Result, ::boost::end(Result), *itBegin);\n                ++itBegin;\n            }\n\n            for(;itBegin!=itEnd; ++itBegin)\n            {\n                if(::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))\n                {\n                    // Add separator\n                    detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));\n                    // Add element\n                    detail::insert(Result, ::boost::end(Result), *itBegin);\n                }\n            }\n\n            return Result;\n        }\n\n#else  // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n                //! Conditional join algorithm\n        /*!\n            This algorithm joins all strings in a 'list' into one long string.\n            Segments are concatenated by given separator. Only segments that\n            match the given regular expression will be added to the result\n\n            This is a specialization of join_if algorithm.\n\n            \\param Input A container that holds the input strings. It must be a container-of-containers.\n            \\param Separator A string that will separate the joined segments.\n            \\param Rx A regular expression\n            \\param Flags Regex options\n            \\return Concatenated string.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template< \n            typename SequenceSequenceT, \n            typename Range1T,             \n            typename CharT, \n            typename RegexTraitsT >\n        inline typename range_value<SequenceSequenceT>::type \n        join_if_regex(\n            const SequenceSequenceT& Input,\n            const Range1T& Separator,\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type Flags=match_default )\n        {\n            // Define working types\n            typedef typename range_value<SequenceSequenceT>::type ResultT;\n            typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;\n\n            // Parse input\n            InputIteratorT itBegin=::boost::begin(Input);\n            InputIteratorT itEnd=::boost::end(Input);\n\n            // Construct container to hold the result\n            ResultT Result;\n\n\n            // Roll to the first element that will be added\n            while(\n                itBegin!=itEnd && \n                !::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;\n\n            // Add this element\n            if(itBegin!=itEnd)\n            {\n                detail::insert(Result, ::boost::end(Result), *itBegin);\n                ++itBegin;\n            }\n\n            for(;itBegin!=itEnd; ++itBegin)\n            {\n                if(::boost::regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))\n                {\n                    // Add separator\n                    detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator));\n                    // Add element\n                    detail::insert(Result, ::boost::end(Result), *itBegin);\n                }\n            }\n\n            return Result;\n        }\n\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n    } // namespace algorithm\n\n    // pull names into the boost namespace\n    using algorithm::find_regex;\n    using algorithm::replace_regex;\n    using algorithm::replace_regex_copy;\n    using algorithm::replace_all_regex;\n    using algorithm::replace_all_regex_copy;\n    using algorithm::erase_regex;\n    using algorithm::erase_regex_copy;\n    using algorithm::erase_all_regex;\n    using algorithm::erase_all_regex_copy;\n    using algorithm::find_all_regex;\n    using algorithm::split_regex;\n\n#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n    using algorithm::join_if;\n#else  // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n    using algorithm::join_if_regex;\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_REGEX_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/regex_find_format.hpp",
    "content": "//  Boost string_algo library regex_find_format.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_REGEX_FIND_FORMAT_HPP\n#define BOOST_STRING_REGEX_FIND_FORMAT_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/regex.hpp>\n#include <boost/algorithm/string/detail/finder_regex.hpp>\n#include <boost/algorithm/string/detail/formatter_regex.hpp>\n\n/*! \\file\n    Defines the \\c regex_finder and \\c regex_formatter generators. These two functors\n    are designed to work together. \\c regex_formatter uses additional information\n    about a match contained in the regex_finder search result.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  regex_finder  -----------------------------------------------//\n\n        //! \"Regex\" finder \n        /*!\n            Construct the \\c regex_finder. Finder uses the regex engine to search\n            for a match.\n            Result is given in \\c regex_search_result. This is an extension\n            of the iterator_range. In addition it contains match results \n            from the \\c regex_search algorithm.\n\n            \\param Rx A regular expression\n            \\param MatchFlags Regex search options\n            \\return An instance of the \\c regex_finder object\n        */\n        template< \n            typename CharT, \n            typename RegexTraitsT>\n        inline detail::find_regexF< basic_regex<CharT, RegexTraitsT> >\n        regex_finder(\n            const basic_regex<CharT, RegexTraitsT>& Rx,\n            match_flag_type MatchFlags=match_default )\n        {\n            return detail::\n                find_regexF< \n                    basic_regex<CharT, RegexTraitsT> >( Rx, MatchFlags );\n        }\n\n//  regex_formater  ---------------------------------------------//\n\n        //! Regex formatter\n        /*!\n            Construct the \\c regex_formatter. Regex formatter uses the regex engine to\n            format a match found by the \\c regex_finder. \n            This formatted it designed to closely cooperate with \\c regex_finder.\n\n            \\param Format Regex format definition\n            \\param Flags Format flags\n            \\return An instance of the \\c regex_formatter functor\n        */\n       template< \n            typename CharT, \n            typename TraitsT, typename AllocT >\n        inline detail::regex_formatF< std::basic_string< CharT, TraitsT, AllocT > >\n        regex_formatter( \n            const std::basic_string<CharT, TraitsT, AllocT>& Format,\n            match_flag_type Flags=format_default )\n        {\n            return \n                detail::regex_formatF< std::basic_string<CharT, TraitsT, AllocT> >(\n                    Format,\n                    Flags );\n        }\n\n    } // namespace algorithm\n\n    // pull the names to the boost namespace\n    using algorithm::regex_finder;\n    using algorithm::regex_formatter;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_REGEX_FIND_FORMAT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/replace.hpp",
    "content": "//  Boost string_algo library replace.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_REPLACE_HPP\n#define BOOST_STRING_REPLACE_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n\n#include <boost/algorithm/string/find_format.hpp>\n#include <boost/algorithm/string/finder.hpp>\n#include <boost/algorithm/string/formatter.hpp>\n#include <boost/algorithm/string/compare.hpp>\n\n/*! \\file\n    Defines various replace algorithms. Each algorithm replaces\n    part(s) of the input according to set of searching and replace criteria.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  replace_range --------------------------------------------------------------------//\n\n        //! Replace range algorithm\n        /*!\n            Replace the given range in the input string.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            \n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param SearchRange A range in the input to be substituted\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT replace_range_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const iterator_range<\n                BOOST_STRING_TYPENAME \n                    range_const_iterator<Range1T>::type>& SearchRange,\n            const Range2T& Format)\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::range_finder(SearchRange),\n                ::boost::algorithm::const_formatter(Format));\n        }\n\n        //! Replace range algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT replace_range_copy( \n            const SequenceT& Input,\n            const iterator_range<\n                BOOST_STRING_TYPENAME \n                    range_const_iterator<SequenceT>::type>& SearchRange,\n            const RangeT& Format)\n        {\n            return ::boost::algorithm::find_format_copy(\n                Input,\n                ::boost::algorithm::range_finder(SearchRange),\n                ::boost::algorithm::const_formatter(Format));\n        }\n\n        //! Replace range algorithm\n        /*!\n            Replace the given range in the input string. \n            The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param SearchRange A range in the input to be substituted\n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void replace_range( \n            SequenceT& Input,\n            const iterator_range<\n                BOOST_STRING_TYPENAME \n                    range_iterator<SequenceT>::type>& SearchRange,\n            const RangeT& Format)\n        {\n            ::boost::algorithm::find_format(\n                Input,\n                ::boost::algorithm::range_finder(SearchRange),\n                ::boost::algorithm::const_formatter(Format));\n        }\n\n//  replace_first --------------------------------------------------------------------//\n\n        //! Replace first algorithm\n        /*!\n            Replace the first match of the search substring in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            \n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input\n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT replace_first_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format)\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace first algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT replace_first_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace first algorithm\n        /*!\n            replace the first match of the search substring in the input \n            with the format string. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void replace_first( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_first ( case insensitive ) ---------------------------------------------//\n\n        //! Replace first algorithm ( case insensitive )\n        /*!\n            Replace the first match of the search substring in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT ireplace_first_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace first algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range2T, typename Range1T>\n        inline SequenceT ireplace_first_copy( \n            const SequenceT& Input,\n            const Range2T& Search,\n            const Range1T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace first algorithm ( case insensitive )\n        /*!\n            Replace the first match of the search substring in the input \n            with the format string. Input sequence is modified in-place.\n            Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void ireplace_first( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_last --------------------------------------------------------------------//\n\n        //! Replace last algorithm\n        /*!\n            Replace the last match of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input            \n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT replace_last_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::last_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace last algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT replace_last_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::last_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace last algorithm\n        /*!\n            Replace the last match of the search string in the input \n            with the format string. Input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void replace_last( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::last_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_last ( case insensitive ) -----------------------------------------------//\n\n        //! Replace last algorithm ( case insensitive )\n        /*!\n            Replace the last match of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input  \n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT ireplace_last_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::last_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace last algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT ireplace_last_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::last_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace last algorithm ( case insensitive )\n        /*!\n            Replace the last match of the search string in the input \n            with the format string.The input sequence is modified in-place.\n            Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return A reference to the modified input\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void ireplace_last( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::last_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_nth --------------------------------------------------------------------//\n\n        //! Replace nth algorithm\n        /*!\n            Replace an Nth (zero-indexed) match of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT replace_nth_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            int Nth,\n            const Range3T& Format )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace nth algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT replace_nth_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            int Nth,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace nth algorithm\n        /*!\n            Replace an Nth (zero-indexed) match of the search string in the input \n            with the format string. Input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void replace_nth( \n            SequenceT& Input,\n            const Range1T& Search,\n            int Nth,\n            const Range2T& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::nth_finder(Search, Nth),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_nth ( case insensitive ) -----------------------------------------------//\n        \n        //! Replace nth algorithm ( case insensitive )\n        /*!\n            Replace an Nth (zero-indexed) match of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input            \n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n       */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT ireplace_nth_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            int Nth,\n            const Range3T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc) ),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace nth algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT ireplace_nth_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            int Nth,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace nth algorithm ( case insensitive )\n        /*!\n            Replace an Nth (zero-indexed) match of the search string in the input \n            with the format string. Input sequence is modified in-place.\n            Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void ireplace_nth( \n            SequenceT& Input,\n            const Range1T& Search,\n            int Nth,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_all --------------------------------------------------------------------//\n\n        //! Replace all algorithm\n        /*!\n            Replace all occurrences of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input \n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT replace_all_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format )\n        {\n            return ::boost::algorithm::find_format_all_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace all algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT replace_all_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_all_copy( \n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace all algorithm\n        /*!\n            Replace all occurrences of the search string in the input \n            with the format string. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\return A reference to the modified input\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void replace_all( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            ::boost::algorithm::find_format_all( \n                Input, \n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n        \n//  replace_all ( case insensitive ) -----------------------------------------------//\n\n        //! Replace all algorithm ( case insensitive )\n        /*!\n            Replace all occurrences of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input \n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT ireplace_all_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_all_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace all algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT ireplace_all_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_all_copy( \n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace all algorithm ( case insensitive )\n        /*!\n            Replace all occurrences of the search string in the input \n            with the format string.The input sequence is modified in-place.\n            Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void ireplace_all( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format_all( \n                Input, \n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n        \n//  replace_head --------------------------------------------------------------------//\n\n        //! Replace head algorithm\n        /*!\n            Replace the head of the input with the given format string. \n            The head is a prefix of a string of given size. \n            If the sequence is shorter then required, whole string if \n            considered to be the head. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            \n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param N Length of the head.\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input  \n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT replace_head_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            int N,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::head_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace head algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT replace_head_copy( \n            const SequenceT& Input,\n            int N,\n            const RangeT& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::head_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace head algorithm\n        /*!\n            Replace the head of the input with the given format string. \n            The head is a prefix of a string of given size. \n            If the sequence is shorter then required, the whole string is \n            considered to be the head. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param N Length of the head.\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void replace_head( \n            SequenceT& Input,\n            int N,\n            const RangeT& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::head_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_tail --------------------------------------------------------------------//\n\n        //! Replace tail algorithm\n        /*!\n            Replace the tail of the input with the given format string. \n            The tail is a suffix of a string of given size. \n            If the sequence is shorter then required, whole string is \n            considered to be the tail. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param N Length of the tail.\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input   \n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT replace_tail_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            int N,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::tail_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace tail algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT replace_tail_copy( \n            const SequenceT& Input,\n            int N,\n            const RangeT& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::tail_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace tail algorithm\n        /*!\n            Replace the tail of the input with the given format sequence. \n            The tail is a suffix of a string of given size. \n            If the sequence is shorter then required, the whole string is \n            considered to be the tail. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param N Length of the tail.\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void replace_tail( \n            SequenceT& Input,\n            int N,\n            const RangeT& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::tail_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::replace_range_copy;\n    using algorithm::replace_range;\n    using algorithm::replace_first_copy;\n    using algorithm::replace_first;\n    using algorithm::ireplace_first_copy;\n    using algorithm::ireplace_first;\n    using algorithm::replace_last_copy;\n    using algorithm::replace_last;\n    using algorithm::ireplace_last_copy;\n    using algorithm::ireplace_last;\n    using algorithm::replace_nth_copy;\n    using algorithm::replace_nth;\n    using algorithm::ireplace_nth_copy;\n    using algorithm::ireplace_nth;\n    using algorithm::replace_all_copy;\n    using algorithm::replace_all;\n    using algorithm::ireplace_all_copy;\n    using algorithm::ireplace_all;\n    using algorithm::replace_head_copy;\n    using algorithm::replace_head;\n    using algorithm::replace_tail_copy;\n    using algorithm::replace_tail;\n\n} // namespace boost\n\n#endif  // BOOST_REPLACE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/sequence_traits.hpp",
    "content": "//  Boost string_algo library sequence_traits.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_SEQUENCE_TRAITS_HPP\n#define BOOST_STRING_SEQUENCE_TRAITS_HPP\n\n#include <boost/config.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/algorithm/string/yes_no_type.hpp>\n\n/*! \\file\n    Traits defined in this header are used by various algorithms to achieve\n    better performance for specific containers.\n    Traits provide fail-safe defaults. If a container supports some of these\n    features, it is possible to specialize the specific trait for this container.\n    For lacking compilers, it is possible of define an override for a specific tester\n    function.\n\n    Due to a language restriction, it is not currently possible to define specializations for\n    stl containers without including the corresponding header. To decrease the overhead\n    needed by this inclusion, user can selectively include a specialization\n    header for a specific container. They are located in boost/algorithm/string/stl\n    directory. Alternatively she can include boost/algorithm/string/std_collection_traits.hpp\n    header which contains specializations for all stl containers.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  sequence traits  -----------------------------------------------//\n\n\n        //! Native replace trait\n        /*!\n            This trait specifies that the sequence has \\c std::string like replace method\n        */\n        template< typename T >\n        class has_native_replace\n        {\n\n        public:\n#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = false };\n#    else\n            BOOST_STATIC_CONSTANT(bool, value=false);\n#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n\n\n            typedef mpl::bool_<has_native_replace<T>::value> type;\n        };\n\n\n        //! Stable iterators trait\n        /*!\n            This trait specifies that the sequence has stable iterators. It means\n            that operations like insert/erase/replace do not invalidate iterators.\n        */\n        template< typename T >\n        class has_stable_iterators\n        {\n        public:\n#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = false };\n#    else\n            BOOST_STATIC_CONSTANT(bool, value=false);\n#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n\n            typedef mpl::bool_<has_stable_iterators<T>::value> type;\n        };\n\n\n        //! Const time insert trait\n        /*!\n            This trait specifies that the sequence's insert method has\n            constant time complexity.\n        */\n        template< typename T >\n        class has_const_time_insert\n        {\n        public:\n#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = false };\n#    else\n            BOOST_STATIC_CONSTANT(bool, value=false);\n#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n\n            typedef mpl::bool_<has_const_time_insert<T>::value> type;\n        };\n\n\n        //! Const time erase trait\n        /*!\n            This trait specifies that the sequence's erase method has\n            constant time complexity.\n        */\n        template< typename T >\n        class has_const_time_erase\n        {\n        public:\n#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = false };\n#    else\n            BOOST_STATIC_CONSTANT(bool, value=false);\n#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n\n            typedef mpl::bool_<has_const_time_erase<T>::value> type;\n        };\n\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_SEQUENCE_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/split.hpp",
    "content": "//  Boost string_algo library split.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_SPLIT_HPP\n#define BOOST_STRING_SPLIT_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n#include <boost/algorithm/string/iter_find.hpp>\n#include <boost/algorithm/string/finder.hpp>\n#include <boost/algorithm/string/compare.hpp>\n\n/*! \\file\n    Defines basic split algorithms. \n    Split algorithms can be used to divide a string\n    into several parts according to given criteria.\n    \n    Each part is copied and added as a new element to the\n    output container.\n    Thus the result container must be able to hold copies\n    of the matches (in a compatible structure like std::string) or\n    a reference to it (e.g. using the iterator range class).\n    Examples of such a container are \\c std::vector<std::string>\n    or \\c std::list<boost::iterator_range<std::string::iterator>>\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  find_all  ------------------------------------------------------------//\n\n        //! Find all algorithm\n        /*!\n            This algorithm finds all occurrences of the search string\n            in the input.\n            \n            Each part is copied and added as a new element to the\n            output container.\n            Thus the result container must be able to hold copies\n            of the matches (in a compatible structure like std::string) or\n            a reference to it (e.g. using the iterator range class).\n            Examples of such a container are \\c std::vector<std::string>\n            or \\c std::list<boost::iterator_range<std::string::iterator>>\n\n            \\param Result A container that can hold copies of references to the substrings\n            \\param Input A container which will be searched.\n            \\param Search A substring to be searched for.\n            \\return A reference the result\n\n            \\note Prior content of the result will be overwritten.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template< typename SequenceSequenceT, typename Range1T, typename Range2T >\n        inline SequenceSequenceT& find_all(\n            SequenceSequenceT& Result,\n            Range1T& Input,\n            const Range2T& Search)\n        {\n            return ::boost::algorithm::iter_find(\n                Result,\n                Input,\n                ::boost::algorithm::first_finder(Search) );        \n        }\n\n        //! Find all algorithm ( case insensitive ) \n        /*!\n            This algorithm finds all occurrences of the search string\n            in the input. \n            Each part is copied and added as a new element to the\n            output container. Thus the result container must be able to hold copies\n            of the matches (in a compatible structure like std::string) or\n            a reference to it (e.g. using the iterator range class).\n            Examples of such a container are \\c std::vector<std::string>\n            or \\c std::list<boost::iterator_range<std::string::iterator>>\n\n            Searching is case insensitive.\n\n            \\param Result A container that can hold copies of references to the substrings\n            \\param Input A container which will be searched.\n            \\param Search A substring to be searched for.\n            \\param Loc A locale used for case insensitive comparison\n            \\return A reference the result\n\n            \\note Prior content of the result will be overwritten.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template< typename SequenceSequenceT, typename Range1T, typename Range2T >\n        inline SequenceSequenceT& ifind_all(\n            SequenceSequenceT& Result,\n            Range1T& Input,\n            const Range2T& Search,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::iter_find(\n                Result,\n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc) ) );        \n        }\n\n\n//  tokenize  -------------------------------------------------------------//\n\n        //! Split algorithm\n        /*! \n            Tokenize expression. This function is equivalent to C strtok. Input\n            sequence is split into tokens, separated by separators. Separators \n            are given by means of the predicate.\n\n            Each part is copied and added as a new element to the\n            output container.\n            Thus the result container must be able to hold copies\n            of the matches (in a compatible structure like std::string) or\n            a reference to it (e.g. using the iterator range class).\n            Examples of such a container are \\c std::vector<std::string>\n            or \\c std::list<boost::iterator_range<std::string::iterator>>\n    \n            \\param Result A container that can hold copies of references to the substrings          \n            \\param Input A container which will be searched.\n            \\param Pred A predicate to identify separators. This predicate is \n                supposed to return true if a given element is a separator.\n            \\param eCompress If eCompress argument is set to token_compress_on, adjacent \n                separators are merged together. Otherwise, every two separators\n                delimit a token.\n            \\return A reference the result\n\n            \\note Prior content of the result will be overwritten.\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template< typename SequenceSequenceT, typename RangeT, typename PredicateT >\n        inline SequenceSequenceT& split(\n            SequenceSequenceT& Result,\n            RangeT& Input,\n            PredicateT Pred,\n            token_compress_mode_type eCompress=token_compress_off )\n        {\n            return ::boost::algorithm::iter_split(\n                Result,\n                Input,\n                ::boost::algorithm::token_finder( Pred, eCompress ) );         \n        }\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::find_all;\n    using algorithm::ifind_all;\n    using algorithm::split;    \n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_SPLIT_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/std/list_traits.hpp",
    "content": "//  Boost string_algo library list_traits.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_STD_LIST_TRAITS_HPP\n#define BOOST_STRING_STD_LIST_TRAITS_HPP\n\n#include <boost/algorithm/string/yes_no_type.hpp>\n#include <list>\n#include <boost/algorithm/string/sequence_traits.hpp>\n\nnamespace boost {\n    namespace algorithm {\n\n//  std::list<> traits  -----------------------------------------------//\n\n\n        // stable iterators trait\n        template<typename T, typename AllocT>\n        class has_stable_iterators< ::std::list<T,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<has_stable_iterators<T>::value> type;\n        };\n\n        // const time insert trait\n        template<typename T, typename AllocT>\n        class has_const_time_insert< ::std::list<T,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<has_const_time_insert<T>::value> type;\n        };\n\n        // const time erase trait\n        template<typename T, typename AllocT>\n        class has_const_time_erase< ::std::list<T,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<has_const_time_erase<T>::value> type;\n        };\n\n\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_STD_LIST_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/std/rope_traits.hpp",
    "content": "//  Boost string_algo library string_traits.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_STD_ROPE_TRAITS_HPP\n#define BOOST_STRING_STD_ROPE_TRAITS_HPP\n\n#include <boost/algorithm/string/yes_no_type.hpp>\n#include <rope>\n#include <boost/algorithm/string/sequence_traits.hpp>\n\nnamespace boost {\n    namespace algorithm {\n\n//  SGI's std::rope<> traits  -----------------------------------------------//\n\n    \n    // native replace trait\n        template<typename T, typename TraitsT, typename AllocT>\n        class has_native_replace< std::rope<T,TraitsT,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<value> type;     \n        };\n\n    // stable iterators trait\n        template<typename T, typename TraitsT, typename AllocT>\n        class has_stable_iterators< std::rope<T,TraitsT,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<value> type;     \n        };\n\n    // const time insert trait\n        template<typename T, typename TraitsT, typename AllocT>\n        class has_const_time_insert< std::rope<T,TraitsT,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<value> type;     \n        };\n\n    // const time erase trait\n        template<typename T, typename TraitsT, typename AllocT>\n        class has_const_time_erase< std::rope<T,TraitsT,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<value> type;     \n        };\n\n\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_ROPE_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/std/slist_traits.hpp",
    "content": "//  Boost string_algo library slist_traits.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003. \n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_STD_SLIST_TRAITS_HPP\n#define BOOST_STRING_STD_SLIST_TRAITS_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/algorithm/string/yes_no_type.hpp>\n#include BOOST_SLIST_HEADER \n#include <boost/algorithm/string/sequence_traits.hpp>\n\nnamespace boost {\n    namespace algorithm {\n\n//  SGI's std::slist<> traits  -----------------------------------------------//\n\n\n    // stable iterators trait\n        template<typename T, typename AllocT>\n        class has_stable_iterators< BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<has_stable_iterators<T>::value> type;\n        };\n\n    // const time insert trait\n        template<typename T, typename AllocT>\n        class has_const_time_insert< BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<has_const_time_insert<T>::value> type;\n        };\n\n    // const time erase trait\n        template<typename T, typename AllocT>\n        class has_const_time_erase< BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true };\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            typedef mpl::bool_<has_const_time_erase<T>::value> type;\n        };\n\n\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_STD_LIST_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/std/string_traits.hpp",
    "content": "//  Boost string_algo library string_traits.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_STD_STRING_TRAITS_HPP\n#define BOOST_STRING_STD_STRING_TRAITS_HPP\n\n#include <boost/algorithm/string/yes_no_type.hpp>\n#include <string>\n#include <boost/algorithm/string/sequence_traits.hpp>\n\nnamespace boost {\n    namespace algorithm {\n\n//  std::basic_string<> traits  -----------------------------------------------//\n\n\n    // native replace trait\n        template<typename T, typename TraitsT, typename AllocT>\n        class has_native_replace< std::basic_string<T, TraitsT, AllocT> >\n        {\n        public:\n#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = true } ;\n#else\n            BOOST_STATIC_CONSTANT(bool, value=true);\n#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n\n        typedef mpl::bool_<has_native_replace<T>::value> type;\n        };\n\n\n\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_LIST_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/std_containers_traits.hpp",
    "content": "//  Boost string_algo library std_containers_traits.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_STD_CONTAINERS_TRAITS_HPP\n#define BOOST_STRING_STD_CONTAINERS_TRAITS_HPP\n\n/*!\\file \n    This file includes sequence traits for stl containers.\n*/\n\n#include <boost/config.hpp>\n#include <boost/algorithm/string/std/string_traits.hpp>\n#include <boost/algorithm/string/std/list_traits.hpp>\n\n#ifdef BOOST_HAS_SLIST\n#   include <boost/algorithm/string/std/slist_traits.hpp>\n#endif\n\n#endif  // BOOST_STRING_STD_CONTAINERS_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/trim.hpp",
    "content": "//  Boost string_algo library trim.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_TRIM_HPP\n#define BOOST_STRING_TRIM_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/as_literal.hpp>\n#include <boost/range/iterator_range_core.hpp>\n\n#include <boost/algorithm/string/detail/trim.hpp>\n#include <boost/algorithm/string/classification.hpp>\n#include <locale>\n\n/*! \\file\n    Defines trim algorithms.\n    Trim algorithms are used to remove trailing and leading spaces from a \n    sequence (string). Space is recognized using given locales.\n\n    Parametric (\\c _if) variants use a predicate (functor) to select which characters\n    are to be trimmed.. \n    Functions take a selection predicate as a parameter, which is used to determine \n    whether a character is a space. Common predicates are provided in classification.hpp header.\n\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n    //  left trim  -----------------------------------------------//\n\n\n        //! Left trim - parametric\n        /*!\n            Remove all leading spaces from the input. \n            The supplied predicate is used to determine which characters are considered spaces.\n            The result is a trimmed copy of the input. It is returned as a sequence \n            or copied to the output iterator\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input range\n            \\param IsSpace A unary predicate identifying spaces\n            \\return \n                An output iterator pointing just after the last inserted character or\n                a copy of the input\n\n               \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<typename OutputIteratorT, typename RangeT, typename PredicateT>\n        inline OutputIteratorT trim_left_copy_if( \n            OutputIteratorT Output,\n            const RangeT& Input,\n            PredicateT IsSpace)\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(::boost::as_literal(Input));\n\n            std::copy( \n                ::boost::algorithm::detail::trim_begin( \n                    ::boost::begin(lit_range), \n                    ::boost::end(lit_range), \n                    IsSpace ),\n                ::boost::end(lit_range),\n                Output);\n\n            return Output;\n        }\n\n        //! Left trim - parametric\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename PredicateT>\n        inline SequenceT trim_left_copy_if(const SequenceT& Input, PredicateT IsSpace)\n        {\n            return SequenceT( \n                ::boost::algorithm::detail::trim_begin( \n                    ::boost::begin(Input), \n                    ::boost::end(Input), \n                    IsSpace ),\n                ::boost::end(Input));\n        }\n\n        //! Left trim - parametric\n        /*!\n            Remove all leading spaces from the input. \n            The result is a trimmed copy of the input.\n\n            \\param Input An input sequence\n            \\param Loc a locale used for 'space' classification\n            \\return A trimmed copy of the input\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename SequenceT>\n        inline SequenceT trim_left_copy(const SequenceT& Input, const std::locale& Loc=std::locale())\n        {\n            return            \n                ::boost::algorithm::trim_left_copy_if(\n                    Input, \n                    is_space(Loc));\n        }\n\n        //! Left trim\n        /*!\n            Remove all leading spaces from the input. The supplied predicate is \n            used to determine which characters are considered spaces.\n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param IsSpace A unary predicate identifying spaces\n        */\n        template<typename SequenceT, typename PredicateT>\n        inline void trim_left_if(SequenceT& Input, PredicateT IsSpace)\n        {\n            Input.erase( \n                ::boost::begin(Input),\n                ::boost::algorithm::detail::trim_begin( \n                    ::boost::begin(Input), \n                    ::boost::end(Input), \n                    IsSpace));\n        }\n\n        //! Left trim\n        /*!\n            Remove all leading spaces from the input.\n            The Input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param Loc A locale used for 'space' classification\n        */\n        template<typename SequenceT>\n        inline void trim_left(SequenceT& Input, const std::locale& Loc=std::locale())\n        {\n            ::boost::algorithm::trim_left_if( \n                Input, \n                is_space(Loc));\n        }\n\n    //  right trim  -----------------------------------------------//\n\n        //! Right trim - parametric\n        /*!\n            Remove all trailing spaces from the input.             \n            The supplied predicate is used to determine which characters are considered spaces.\n            The result is a trimmed copy of the input. It is returned as a sequence \n            or copied to the output iterator\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input range\n            \\param IsSpace A unary predicate identifying spaces\n            \\return \n                An output iterator pointing just after the last inserted character or\n                a copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<typename OutputIteratorT, typename RangeT, typename PredicateT>\n        inline OutputIteratorT trim_right_copy_if( \n            OutputIteratorT Output,\n            const RangeT& Input,\n            PredicateT IsSpace )\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(::boost::as_literal(Input));\n         \n            std::copy( \n                ::boost::begin(lit_range),\n                ::boost::algorithm::detail::trim_end( \n                    ::boost::begin(lit_range), \n                    ::boost::end(lit_range), \n                    IsSpace ),\n                Output );\n\n            return Output;\n        }\n\n        //! Right trim - parametric\n        /*!\n            \\overload\n         */\n        template<typename SequenceT, typename PredicateT>\n        inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace)\n        {\n            return SequenceT( \n                ::boost::begin(Input),\n                ::boost::algorithm::detail::trim_end( \n                    ::boost::begin(Input), \n                    ::boost::end(Input), \n                    IsSpace)\n                );\n        }\n\n        //! Right trim\n        /*!\n            Remove all trailing spaces from the input. \n            The result is a trimmed copy of the input\n\n            \\param Input An input sequence\n            \\param Loc A locale used for 'space' classification\n            \\return A trimmed copy of the input\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename SequenceT>\n        inline SequenceT trim_right_copy(const SequenceT& Input, const std::locale& Loc=std::locale())\n        {\n            return \n                ::boost::algorithm::trim_right_copy_if( \n                    Input, \n                    is_space(Loc));\n        }\n\n            \n        //! Right trim - parametric\n        /*!\n            Remove all trailing spaces from the input.\n            The supplied predicate is used to determine which characters are considered spaces.\n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param IsSpace A unary predicate identifying spaces\n        */\n        template<typename SequenceT, typename PredicateT>\n        inline void trim_right_if(SequenceT& Input, PredicateT IsSpace)\n        {\n            Input.erase(\n                ::boost::algorithm::detail::trim_end( \n                    ::boost::begin(Input), \n                    ::boost::end(Input), \n                    IsSpace ),\n                ::boost::end(Input)\n                );\n        }\n\n\n        //! Right trim\n        /*!\n            Remove all trailing spaces from the input. \n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param Loc A locale used for 'space' classification\n        */\n        template<typename SequenceT>\n        inline void trim_right(SequenceT& Input, const std::locale& Loc=std::locale())\n        {\n            ::boost::algorithm::trim_right_if(\n                Input, \n                is_space(Loc) );\n        }\n\n    //  both side trim  -----------------------------------------------//\n\n        //! Trim - parametric\n        /*!\n            Remove all trailing and leading spaces from the input. \n            The supplied predicate is used to determine which characters are considered spaces.\n            The result is a trimmed copy of the input. It is returned as a sequence \n            or copied to the output iterator\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input range\n            \\param IsSpace A unary predicate identifying spaces\n            \\return \n                An output iterator pointing just after the last inserted character or\n                a copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<typename OutputIteratorT, typename RangeT, typename PredicateT>\n        inline OutputIteratorT trim_copy_if( \n            OutputIteratorT Output,\n            const RangeT& Input,\n            PredicateT IsSpace)\n        {\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(::boost::as_literal(Input));\n\n            BOOST_STRING_TYPENAME \n                range_const_iterator<RangeT>::type TrimEnd=\n                ::boost::algorithm::detail::trim_end( \n                    ::boost::begin(lit_range), \n                    ::boost::end(lit_range), \n                    IsSpace);\n\n            std::copy( \n                detail::trim_begin( \n                    ::boost::begin(lit_range), TrimEnd, IsSpace),\n                TrimEnd,\n                Output\n                );\n\n            return Output;\n        }\n\n        //! Trim - parametric\n        /*!\n            \\overload\n         */\n        template<typename SequenceT, typename PredicateT>\n        inline SequenceT trim_copy_if(const SequenceT& Input, PredicateT IsSpace)\n        {\n            BOOST_STRING_TYPENAME \n                range_const_iterator<SequenceT>::type TrimEnd=\n                    ::boost::algorithm::detail::trim_end( \n                        ::boost::begin(Input), \n                        ::boost::end(Input), \n                        IsSpace);\n\n            return SequenceT( \n                detail::trim_begin( \n                    ::boost::begin(Input), \n                    TrimEnd, \n                    IsSpace),\n                TrimEnd\n                );\n        }\n\n        //! Trim\n        /*!\n            Remove all leading and trailing spaces from the input. \n            The result is a trimmed copy of the input\n\n            \\param Input An input sequence\n            \\param Loc A locale used for 'space' classification\n            \\return A trimmed copy of the input\n\n            \\note This function provides the strong exception-safety guarantee\n        */\n        template<typename SequenceT>\n        inline SequenceT trim_copy( const SequenceT& Input, const std::locale& Loc=std::locale() )\n        {\n            return\n                ::boost::algorithm::trim_copy_if(\n                    Input, \n                    is_space(Loc) );\n        }\n     \n        //! Trim\n        /*!\n            Remove all leading and trailing spaces from the input. \n            The supplied predicate is used to determine which characters are considered spaces.\n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param IsSpace A unary predicate identifying spaces\n        */\n        template<typename SequenceT, typename PredicateT>\n        inline void trim_if(SequenceT& Input, PredicateT IsSpace)\n        {\n            ::boost::algorithm::trim_right_if( Input, IsSpace );\n            ::boost::algorithm::trim_left_if( Input, IsSpace );\n        }\n\n        //! Trim\n        /*!\n            Remove all leading and trailing spaces from the input. \n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param Loc A locale used for 'space' classification\n        */\n        template<typename SequenceT>\n        inline void trim(SequenceT& Input, const std::locale& Loc=std::locale())\n        {\n            ::boost::algorithm::trim_if(\n                Input, \n                is_space( Loc ) );\n        }\n\n    } // namespace algorithm \n\n    // pull names to the boost namespace\n    using algorithm::trim_left;\n    using algorithm::trim_left_if;\n    using algorithm::trim_left_copy;\n    using algorithm::trim_left_copy_if;\n    using algorithm::trim_right;\n    using algorithm::trim_right_if;\n    using algorithm::trim_right_copy;\n    using algorithm::trim_right_copy_if;\n    using algorithm::trim;\n    using algorithm::trim_if;\n    using algorithm::trim_copy;\n    using algorithm::trim_copy_if;\n\n} // namespace boost\n\n#endif  // BOOST_STRING_TRIM_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/trim_all.hpp",
    "content": "//  Boost string_algo library trim.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_TRIM_ALL_HPP\n#define BOOST_STRING_TRIM_ALL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n#include <boost/algorithm/string/trim.hpp>\n#include <boost/algorithm/string/classification.hpp>\n#include <boost/algorithm/string/find_format.hpp>\n#include <boost/algorithm/string/formatter.hpp>\n#include <boost/algorithm/string/finder.hpp>\n#include <locale>\n\n/*! \\file\n    Defines trim_all algorithms.\n    \n    Just like \\c trim, \\c trim_all removes all trailing and leading spaces from a \n    sequence (string). In addition, spaces in the middle of the sequence are truncated\n    to just one character. Space is recognized using given locales.\n\n    \\c trim_fill acts as trim_all, but the spaces in the middle are replaces with \n    a user-define sequence of character.\n\n    Parametric (\\c _if) variants use a predicate (functor) to select which characters\n    are to be trimmed.. \n    Functions take a selection predicate as a parameter, which is used to determine \n    whether a character is a space. Common predicates are provided in classification.hpp header.\n\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n        // multi line trim  ----------------------------------------------- //\n\n        //! Trim All - parametric\n        /*!\n            Remove all leading and trailing spaces from the input and\n            compress all other spaces to a single character.\n            The result is a trimmed copy of the input\n\n            \\param Input An input sequence\n             \\param IsSpace A unary predicate identifying spaces\n            \\return A trimmed copy of the input\n        */\n        template<typename SequenceT, typename PredicateT>\n        inline SequenceT trim_all_copy_if(const SequenceT& Input, PredicateT IsSpace)\n        {\n            return \n                ::boost::find_format_all_copy(      \n                    ::boost::trim_copy_if(Input, IsSpace),\n                    ::boost::token_finder(IsSpace, ::boost::token_compress_on),\n                    ::boost::dissect_formatter(::boost::head_finder(1)));\n        }\n\n\n        //! Trim All\n        /*!\n            Remove all leading and trailing spaces from the input and\n            compress all other spaces to a single character.\n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param IsSpace A unary predicate identifying spaces\n        */\n        template<typename SequenceT, typename PredicateT>\n        inline void trim_all_if(SequenceT& Input, PredicateT IsSpace)\n        {\n            ::boost::trim_if(Input, IsSpace);\n            ::boost::find_format_all(       \n                Input,          \n                ::boost::token_finder(IsSpace, ::boost::token_compress_on),\n                ::boost::dissect_formatter(::boost::head_finder(1)));\n        }\n\n\n        //! Trim All\n        /*!\n            Remove all leading and trailing spaces from the input and\n            compress all other spaces to a single character.\n            The result is a trimmed copy of the input\n\n            \\param Input An input sequence\n            \\param Loc A locale used for 'space' classification\n            \\return A trimmed copy of the input\n        */\n        template<typename SequenceT>\n        inline SequenceT trim_all_copy(const SequenceT& Input, const std::locale& Loc =std::locale())\n        {\n            return trim_all_copy_if(Input, ::boost::is_space(Loc));\n        }\n\n\n        //! Trim All\n        /*!\n            Remove all leading and trailing spaces from the input and\n            compress all other spaces to a single character.\n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param Loc A locale used for 'space' classification\n            \\return A trimmed copy of the input\n        */\n        template<typename SequenceT>\n        inline void trim_all(SequenceT& Input, const std::locale& Loc =std::locale())\n        {\n            trim_all_if(Input, ::boost::is_space(Loc));\n        }\n\n\n        //! Trim Fill - parametric\n        /*!\n            Remove all leading and trailing spaces from the input and\n            replace all every block of consecutive spaces with a fill string\n            defined by user.\n            The result is a trimmed copy of the input\n\n            \\param Input An input sequence\n            \\param Fill A string used to fill the inner spaces\n            \\param IsSpace A unary predicate identifying spaces\n            \\return A trimmed copy of the input\n        */\n        template<typename SequenceT, typename RangeT, typename PredicateT>\n        inline SequenceT trim_fill_copy_if(const SequenceT& Input, const RangeT& Fill, PredicateT IsSpace)\n        {\n            return \n                ::boost::find_format_all_copy(      \n                    ::boost::trim_copy_if(Input, IsSpace),\n                    ::boost::token_finder(IsSpace, ::boost::token_compress_on),\n                    ::boost::const_formatter(::boost::as_literal(Fill)));\n        }\n\n\n        //! Trim Fill\n        /*!\n            Remove all leading and trailing spaces from the input and\n            replace all every block of consecutive spaces with a fill string\n            defined by user.\n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param Fill A string used to fill the inner spaces\n            \\param IsSpace A unary predicate identifying spaces\n        */\n        template<typename SequenceT, typename RangeT, typename PredicateT>\n        inline void trim_fill_if(SequenceT& Input, const RangeT& Fill, PredicateT IsSpace)\n        {\n            ::boost::trim_if(Input, IsSpace);\n            ::boost::find_format_all(       \n                Input,          \n                ::boost::token_finder(IsSpace, ::boost::token_compress_on),\n                ::boost::const_formatter(::boost::as_literal(Fill)));\n        }\n\n\n        //! Trim Fill\n        /*!\n            Remove all leading and trailing spaces from the input and\n            replace all every block of consecutive spaces with a fill string\n            defined by user.\n            The result is a trimmed copy of the input\n\n            \\param Input An input sequence\n            \\param Fill A string used to fill the inner spaces\n            \\param Loc A locale used for 'space' classification\n            \\return A trimmed copy of the input\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT trim_fill_copy(const SequenceT& Input, const RangeT& Fill, const std::locale& Loc =std::locale())\n        {\n            return trim_fill_copy_if(Input, Fill, ::boost::is_space(Loc));\n        }\n\n\n        //! Trim Fill\n        /*!\n            Remove all leading and trailing spaces from the input and\n            replace all every block of consecutive spaces with a fill string\n            defined by user.\n            The input sequence is modified in-place.\n\n            \\param Input An input sequence\n            \\param Fill A string used to fill the inner spaces\n            \\param Loc A locale used for 'space' classification\n            \\return A trimmed copy of the input\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void trim_fill(SequenceT& Input, const RangeT& Fill, const std::locale& Loc =std::locale())\n        {\n            trim_fill_if(Input, Fill, ::boost::is_space(Loc));\n        }\n\n\n    } // namespace algorithm    \n\n    // pull names to the boost namespace\n    using algorithm::trim_all;\n    using algorithm::trim_all_if;\n    using algorithm::trim_all_copy;\n    using algorithm::trim_all_copy_if;\n    using algorithm::trim_fill;\n    using algorithm::trim_fill_if;\n    using algorithm::trim_fill_copy;\n    using algorithm::trim_fill_copy_if;\n\n} // namespace boost\n\n#endif  // BOOST_STRING_TRIM_ALL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string/yes_no_type.hpp",
    "content": "//  Boost string_algo library yes_no_type.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_YES_NO_TYPE_DETAIL_HPP\n#define BOOST_STRING_YES_NO_TYPE_DETAIL_HPP\n\nnamespace boost {\n    namespace algorithm {\n\n        // taken from boost mailing-list\n        // when yes_no_type will become officially\n        // a part of boost distribution, this header\n        // will be deprecated\n        template<int I> struct size_descriptor \n        {\n            typedef char (& type)[I];\n        }; \n\n        typedef size_descriptor<1>::type yes_type;\n        typedef size_descriptor<2>::type no_type;\n\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_YES_NO_TYPE_DETAIL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string.hpp",
    "content": "//  Boost string_algo library string_algo.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2004.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_ALGO_HPP\n#define BOOST_STRING_ALGO_HPP\n\n/*! \\file\n    Cumulative include for string_algo library\n*/\n\n#include <boost/algorithm/string/std_containers_traits.hpp>\n#include <boost/algorithm/string/trim.hpp>\n#include <boost/algorithm/string/case_conv.hpp>\n#include <boost/algorithm/string/predicate.hpp>\n#include <boost/algorithm/string/find.hpp>\n#include <boost/algorithm/string/split.hpp>\n#include <boost/algorithm/string/join.hpp>\n#include <boost/algorithm/string/replace.hpp>\n#include <boost/algorithm/string/erase.hpp>\n#include <boost/algorithm/string/classification.hpp>\n#include <boost/algorithm/string/find_iterator.hpp>\n\n\n#endif  // BOOST_STRING_ALGO_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/algorithm/string_regex.hpp",
    "content": "//  Boost string_algo library string_regex.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2004.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_ALGO_REGEX_HPP\n#define BOOST_STRING_ALGO_REGEX_HPP\n\n/*! \\file\n    Cumulative include for string_algo library.\n    In addition to string.hpp contains also regex-related stuff.\n*/\n\n#include <boost/regex.hpp>\n#include <boost/algorithm/string.hpp>\n#include <boost/algorithm/string/regex.hpp>\n\n#endif  // BOOST_STRING_ALGO_REGEX_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/assert.hpp",
    "content": "//\n//  boost/assert.hpp - BOOST_ASSERT(expr)\n//                     BOOST_ASSERT_MSG(expr, msg)\n//                     BOOST_VERIFY(expr)\n//                     BOOST_VERIFY_MSG(expr, msg)\n//                     BOOST_ASSERT_IS_VOID\n//\n//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2007, 2014 Peter Dimov\n//  Copyright (c) Beman Dawes 2011\n//  Copyright (c) 2015 Ion Gaztanaga\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  Note: There are no include guards. This is intentional.\n//\n//  See http://www.boost.org/libs/assert/assert.html for documentation.\n//\n\n//\n// Stop inspect complaining about use of 'assert':\n//\n// boostinspect:naassert_macro\n//\n\n//\n// BOOST_ASSERT, BOOST_ASSERT_MSG, BOOST_ASSERT_IS_VOID\n//\n\n#undef BOOST_ASSERT\n#undef BOOST_ASSERT_MSG\n#undef BOOST_ASSERT_IS_VOID\n\n#if defined(BOOST_DISABLE_ASSERTS) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && defined(NDEBUG) )\n\n# define BOOST_ASSERT(expr) ((void)0)\n# define BOOST_ASSERT_MSG(expr, msg) ((void)0)\n# define BOOST_ASSERT_IS_VOID\n\n#elif defined(BOOST_ENABLE_ASSERT_HANDLER) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && !defined(NDEBUG) )\n\n#include <boost/config.hpp> // for BOOST_LIKELY\n#include <boost/current_function.hpp>\n\nnamespace boost\n{\n    void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined\n    void assertion_failed_msg(char const * expr, char const * msg, char const * function, char const * file, long line); // user defined\n} // namespace boost\n\n#define BOOST_ASSERT(expr) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))\n#define BOOST_ASSERT_MSG(expr, msg) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))\n\n#else\n\n# include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same\n\n# define BOOST_ASSERT(expr) assert(expr)\n# define BOOST_ASSERT_MSG(expr, msg) assert((expr)&&(msg))\n#if defined(NDEBUG)\n# define BOOST_ASSERT_IS_VOID\n#endif\n\n#endif\n\n//\n// BOOST_VERIFY, BOOST_VERIFY_MSG\n//\n\n#undef BOOST_VERIFY\n#undef BOOST_VERIFY_MSG\n\n#if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) )\n\n# define BOOST_VERIFY(expr) ((void)(expr))\n# define BOOST_VERIFY_MSG(expr, msg) ((void)(expr))\n\n#else\n\n# define BOOST_VERIFY(expr) BOOST_ASSERT(expr)\n# define BOOST_VERIFY_MSG(expr, msg) BOOST_ASSERT_MSG(expr,msg)\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/apply.hpp",
    "content": "#ifndef BOOST_BIND_APPLY_HPP_INCLUDED\n#define BOOST_BIND_APPLY_HPP_INCLUDED\n\n//\n//  apply.hpp\n//\n//  Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\nnamespace boost\n{\n\ntemplate<class R> struct apply\n{\n    typedef R result_type;\n\n    template<class F> result_type operator()(F & f) const\n    {\n        return f();\n    }\n\n    template<class F, class A1> result_type operator()(F & f, A1 & a1) const\n    {\n        return f(a1);\n    }\n\n    template<class F, class A1, class A2> result_type operator()(F & f, A1 & a1, A2 & a2) const\n    {\n        return f(a1, a2);\n    }\n\n    template<class F, class A1, class A2, class A3> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3) const\n    {\n        return f(a1, a2, a3);\n    }\n\n    template<class F, class A1, class A2, class A3, class A4> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4) const\n    {\n        return f(a1, a2, a3, a4);\n    }\n\n    template<class F, class A1, class A2, class A3, class A4, class A5> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const\n    {\n        return f(a1, a2, a3, a4, a5);\n    }\n\n    template<class F, class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const\n    {\n        return f(a1, a2, a3, a4, a5, a6);\n    }\n\n    template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const\n    {\n        return f(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const\n    {\n        return f(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const\n    {\n        return f(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n    }\n};\n\n} // namespace boost\n\n#endif // #ifndef BOOST_BIND_APPLY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/arg.hpp",
    "content": "#ifndef BOOST_BIND_ARG_HPP_INCLUDED\n#define BOOST_BIND_ARG_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  bind/arg.hpp\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n#include <boost/config.hpp>\n#include <boost/is_placeholder.hpp>\n#include <boost/static_assert.hpp>\n\nnamespace boost\n{\n\ntemplate< int I > struct arg\n{\n    BOOST_CONSTEXPR arg()\n    {\n    }\n\n    template< class T > BOOST_CONSTEXPR arg( T const & /* t */ )\n    {\n        BOOST_STATIC_ASSERT( I == is_placeholder<T>::value );\n    }\n};\n\ntemplate< int I > BOOST_CONSTEXPR bool operator==( arg<I> const &, arg<I> const & )\n{\n    return true;\n}\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< int I > struct is_placeholder< arg<I> >\n{\n    enum _vt { value = I };\n};\n\ntemplate< int I > struct is_placeholder< arg<I> (*) () >\n{\n    enum _vt { value = I };\n};\n\n#endif\n\n} // namespace boost\n\n#endif // #ifndef BOOST_BIND_ARG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/bind.hpp",
    "content": "#ifndef BOOST_BIND_BIND_HPP_INCLUDED\n#define BOOST_BIND_BIND_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  bind.hpp - binds function objects to arguments\n//\n//  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2001 David Abrahams\n//  Copyright (c) 2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n#include <boost/config.hpp>\n#include <boost/ref.hpp>\n#include <boost/mem_fn.hpp>\n#include <boost/type.hpp>\n#include <boost/is_placeholder.hpp>\n#include <boost/bind/arg.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/visit_each.hpp>\n#include <boost/core/enable_if.hpp>\n#include <boost/core/is_same.hpp>\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n#include <utility> // std::forward\n#endif\n\n// Borland-specific bug, visit_each() silently fails to produce code\n\n#if defined(__BORLANDC__)\n#  define BOOST_BIND_VISIT_EACH boost::visit_each\n#else\n#  define BOOST_BIND_VISIT_EACH visit_each\n#endif\n\n#include <boost/bind/storage.hpp>\n\n#ifdef BOOST_MSVC\n# pragma warning(push)\n# pragma warning(disable: 4512) // assignment operator could not be generated\n#endif\n\nnamespace boost\n{\n\ntemplate<class T> class weak_ptr;\n\nnamespace _bi // implementation details\n{\n\n// result_traits\n\ntemplate<class R, class F> struct result_traits\n{\n    typedef R type;\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n\nstruct unspecified {};\n\ntemplate<class F> struct result_traits<unspecified, F>\n{\n    typedef typename F::result_type type;\n};\n\ntemplate<class F> struct result_traits< unspecified, reference_wrapper<F> >\n{\n    typedef typename F::result_type type;\n};\n\n#endif\n\n// ref_compare\n\ntemplate<class T> bool ref_compare( T const & a, T const & b, long )\n{\n    return a == b;\n}\n\ntemplate<int I> bool ref_compare( arg<I> const &, arg<I> const &, int )\n{\n    return true;\n}\n\ntemplate<int I> bool ref_compare( arg<I> (*) (), arg<I> (*) (), int )\n{\n    return true;\n}\n\ntemplate<class T> bool ref_compare( reference_wrapper<T> const & a, reference_wrapper<T> const & b, int )\n{\n    return a.get_pointer() == b.get_pointer();\n}\n\n// bind_t forward declaration for listN\n\ntemplate<class R, class F, class L> class bind_t;\n\ntemplate<class R, class F, class L> bool ref_compare( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )\n{\n    return a.compare( b );\n}\n\n// value\n\ntemplate<class T> class value\n{\npublic:\n\n    value(T const & t): t_(t) {}\n\n    T & get() { return t_; }\n    T const & get() const { return t_; }\n\n    bool operator==(value const & rhs) const\n    {\n        return t_ == rhs.t_;\n    }\n\nprivate:\n\n    T t_;\n};\n\n// ref_compare for weak_ptr\n\ntemplate<class T> bool ref_compare( value< weak_ptr<T> > const & a, value< weak_ptr<T> > const & b, int )\n{\n    return !(a.get() < b.get()) && !(b.get() < a.get());\n}\n\n// type\n\ntemplate<class T> class type {};\n\n// unwrap\n\ntemplate<class F> struct unwrapper\n{\n    static inline F & unwrap( F & f, long )\n    {\n        return f;\n    }\n\n    template<class F2> static inline F2 & unwrap( reference_wrapper<F2> rf, int )\n    {\n        return rf.get();\n    }\n\n    template<class R, class T> static inline _mfi::dm<R, T> unwrap( R T::* pm, int )\n    {\n        return _mfi::dm<R, T>( pm );\n    }\n};\n\n// listN\n\nclass list0\n{\npublic:\n\n    list0() {}\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A &, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)();\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A &, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)();\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A &, int)\n    {\n        unwrapper<F>::unwrap(f, 0)();\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A &, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)();\n    }\n\n    template<class V> void accept(V &) const\n    {\n    }\n\n    bool operator==(list0 const &) const\n    {\n        return true;\n    }\n};\n\n#ifdef BOOST_MSVC\n// MSVC is bright enough to realise that the parameter rhs \n// in operator==may be unused for some template argument types:\n#pragma warning(push)\n#pragma warning(disable:4100)\n#endif\n\ntemplate< class A1 > class list1: private storage1< A1 >\n{\nprivate:\n\n    typedef storage1< A1 > base_type;\n\npublic:\n\n    explicit list1( A1 a1 ): base_type( a1 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list1 const & rhs) const\n    {\n        return ref_compare(base_type::a1_, rhs.a1_, 0);\n    }\n};\n\nstruct logical_and;\nstruct logical_or;\n\ntemplate< class A1, class A2 > class list2: private storage2< A1, A2 >\n{\nprivate:\n\n    typedef storage2< A1, A2 > base_type;\n\npublic:\n\n    list2( A1 a1, A2 a2 ): base_type( a1, a2 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);\n    }\n\n    template<class A> bool operator()( type<bool>, logical_and & /*f*/, A & a, int )\n    {\n        return a[ base_type::a1_ ] && a[ base_type::a2_ ];\n    }\n\n    template<class A> bool operator()( type<bool>, logical_and const & /*f*/, A & a, int ) const\n    {\n        return a[ base_type::a1_ ] && a[ base_type::a2_ ];\n    }\n\n    template<class A> bool operator()( type<bool>, logical_or & /*f*/, A & a, int )\n    {\n        return a[ base_type::a1_ ] || a[ base_type::a2_ ];\n    }\n\n    template<class A> bool operator()( type<bool>, logical_or const & /*f*/, A & a, int ) const\n    {\n        return a[ base_type::a1_ ] || a[ base_type::a2_ ];\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list2 const & rhs) const\n    {\n        return ref_compare(base_type::a1_, rhs.a1_, 0) && ref_compare(base_type::a2_, rhs.a2_, 0);\n    }\n};\n\ntemplate< class A1, class A2, class A3 > class list3: private storage3< A1, A2, A3 >\n{\nprivate:\n\n    typedef storage3< A1, A2, A3 > base_type;\n\npublic:\n\n    list3( A1 a1, A2 a2, A3 a3 ): base_type( a1, a2, a3 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list3 const & rhs) const\n    {\n        return\n            \n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 );\n    }\n};\n\ntemplate< class A1, class A2, class A3, class A4 > class list4: private storage4< A1, A2, A3, A4 >\n{\nprivate:\n\n    typedef storage4< A1, A2, A3, A4 > base_type;\n\npublic:\n\n    list4( A1 a1, A2 a2, A3 a3, A4 a4 ): base_type( a1, a2, a3, a4 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list4 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 );\n    }\n};\n\ntemplate< class A1, class A2, class A3, class A4, class A5 > class list5: private storage5< A1, A2, A3, A4, A5 >\n{\nprivate:\n\n    typedef storage5< A1, A2, A3, A4, A5 > base_type;\n\npublic:\n\n    list5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): base_type( a1, a2, a3, a4, a5 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list5 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 );\n    }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6> class list6: private storage6< A1, A2, A3, A4, A5, A6 >\n{\nprivate:\n\n    typedef storage6< A1, A2, A3, A4, A5, A6 > base_type;\n\npublic:\n\n    list6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): base_type( a1, a2, a3, a4, a5, a6 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list6 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&\n            ref_compare( base_type::a6_, rhs.a6_, 0 );\n    }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7> class list7: private storage7< A1, A2, A3, A4, A5, A6, A7 >\n{\nprivate:\n\n    typedef storage7< A1, A2, A3, A4, A5, A6, A7 > base_type;\n\npublic:\n\n    list7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): base_type( a1, a2, a3, a4, a5, a6, a7 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7>) const { return base_type::a7_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list7 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&\n            ref_compare( base_type::a6_, rhs.a6_, 0 ) &&\n            ref_compare( base_type::a7_, rhs.a7_, 0 );\n    }\n};\n\ntemplate< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class list8: private storage8< A1, A2, A3, A4, A5, A6, A7, A8 >\n{\nprivate:\n\n    typedef storage8< A1, A2, A3, A4, A5, A6, A7, A8 > base_type;\n\npublic:\n\n    list8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7>) const { return base_type::a7_; }\n    A8 operator[] (boost::arg<8>) const { return base_type::a8_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }\n    A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list8 const & rhs) const\n    {\n        return\n            \n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&\n            ref_compare( base_type::a6_, rhs.a6_, 0 ) &&\n            ref_compare( base_type::a7_, rhs.a7_, 0 ) &&\n            ref_compare( base_type::a8_, rhs.a8_, 0 );\n    }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> class list9: private storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 >\n{\nprivate:\n\n    typedef storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > base_type;\n\npublic:\n\n    list9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7>) const { return base_type::a7_; }\n    A8 operator[] (boost::arg<8>) const { return base_type::a8_; }\n    A9 operator[] (boost::arg<9>) const { return base_type::a9_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }\n    A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }\n    A9 operator[] (boost::arg<9> (*) ()) const { return base_type::a9_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list9 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&\n            ref_compare( base_type::a6_, rhs.a6_, 0 ) &&\n            ref_compare( base_type::a7_, rhs.a7_, 0 ) &&\n            ref_compare( base_type::a8_, rhs.a8_, 0 ) &&\n            ref_compare( base_type::a9_, rhs.a9_, 0 );\n    }\n};\n\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\n// bind_t\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\ntemplate< class A1 > class rrlist1\n{\nprivate:\n\n    A1 & a1_; // not A1&& because of msvc-10.0\n\npublic:\n\n    explicit rrlist1( A1 & a1 ): a1_( a1 ) {}\n\n    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } // not static_cast because of g++ 4.9\n\n    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n};\n\ntemplate< class A1, class A2 > class rrlist2\n{\nprivate:\n\n    A1 & a1_;\n    A2 & a2_;\n\npublic:\n\n    rrlist2( A1 & a1, A2 & a2 ): a1_( a1 ), a2_( a2 ) {}\n\n    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }\n\n    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n};\n\ntemplate< class A1, class A2, class A3 > class rrlist3\n{\nprivate:\n\n    A1 & a1_;\n    A2 & a2_;\n    A3 & a3_;\n\npublic:\n\n    rrlist3( A1 & a1, A2 & a2, A3 & a3 ): a1_( a1 ), a2_( a2 ), a3_( a3 ) {}\n\n    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }\n\n    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n};\n\ntemplate< class A1, class A2, class A3, class A4 > class rrlist4\n{\nprivate:\n\n    A1 & a1_;\n    A2 & a2_;\n    A3 & a3_;\n    A4 & a4_;\n\npublic:\n\n    rrlist4( A1 & a1, A2 & a2, A3 & a3, A4 & a4 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ) {}\n\n    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }\n\n    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n};\n\ntemplate< class A1, class A2, class A3, class A4, class A5 > class rrlist5\n{\nprivate:\n\n    A1 & a1_;\n    A2 & a2_;\n    A3 & a3_;\n    A4 & a4_;\n    A5 & a5_;\n\npublic:\n\n    rrlist5( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ) {}\n\n    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }\n\n    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n};\n\ntemplate< class A1, class A2, class A3, class A4, class A5, class A6 > class rrlist6\n{\nprivate:\n\n    A1 & a1_;\n    A2 & a2_;\n    A3 & a3_;\n    A4 & a4_;\n    A5 & a5_;\n    A6 & a6_;\n\npublic:\n\n    rrlist6( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ) {}\n\n    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }\n    A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); }\n\n    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }\n    A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n};\n\ntemplate< class A1, class A2, class A3, class A4, class A5, class A6, class A7 > class rrlist7\n{\nprivate:\n\n    A1 & a1_;\n    A2 & a2_;\n    A3 & a3_;\n    A4 & a4_;\n    A5 & a5_;\n    A6 & a6_;\n    A7 & a7_;\n\npublic:\n\n    rrlist7( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ) {}\n\n    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }\n    A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); }\n    A7 && operator[] (boost::arg<7>) const { return std::forward<A7>( a7_ ); }\n\n    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }\n    A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }\n    A7 && operator[] (boost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n};\n\ntemplate< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class rrlist8\n{\nprivate:\n\n    A1 & a1_;\n    A2 & a2_;\n    A3 & a3_;\n    A4 & a4_;\n    A5 & a5_;\n    A6 & a6_;\n    A7 & a7_;\n    A8 & a8_;\n\npublic:\n\n    rrlist8( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ), a8_( a8 ) {}\n\n    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }\n    A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); }\n    A7 && operator[] (boost::arg<7>) const { return std::forward<A7>( a7_ ); }\n    A8 && operator[] (boost::arg<8>) const { return std::forward<A8>( a8_ ); }\n\n    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }\n    A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }\n    A7 && operator[] (boost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); }\n    A8 && operator[] (boost::arg<8> (*) ()) const { return std::forward<A8>( a8_ ); }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n};\n\ntemplate< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > class rrlist9\n{\nprivate:\n\n    A1 & a1_;\n    A2 & a2_;\n    A3 & a3_;\n    A4 & a4_;\n    A5 & a5_;\n    A6 & a6_;\n    A7 & a7_;\n    A8 & a8_;\n    A9 & a9_;\n\npublic:\n\n    rrlist9( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ), a8_( a8 ), a9_( a9 ) {}\n\n    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }\n    A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); }\n    A7 && operator[] (boost::arg<7>) const { return std::forward<A7>( a7_ ); }\n    A8 && operator[] (boost::arg<8>) const { return std::forward<A8>( a8_ ); }\n    A9 && operator[] (boost::arg<9>) const { return std::forward<A9>( a9_ ); }\n\n    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }\n    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }\n    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }\n    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }\n    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }\n    A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }\n    A7 && operator[] (boost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); }\n    A8 && operator[] (boost::arg<8> (*) ()) const { return std::forward<A8>( a8_ ); }\n    A9 && operator[] (boost::arg<9> (*) ()) const { return std::forward<A9>( a9_ ); }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n};\n\ntemplate<class R, class F, class L> class bind_t\n{\nprivate:\n\n    F f_;\n    L l_;\n\npublic:\n\n    typedef typename result_traits<R, F>::type result_type;\n    typedef bind_t this_type;\n\n    bind_t( F f, L const & l ): f_( f ), l_( l ) {}\n\n    //\n\n    result_type operator()()\n    {\n        list0 a;\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    result_type operator()() const\n    {\n        list0 a;\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1> result_type operator()( A1 && a1 )\n    {\n        rrlist1< A1 > a( a1 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1> result_type operator()( A1 && a1 ) const\n    {\n        rrlist1< A1 > a( a1 );\n        return l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 )\n    {\n        rrlist2< A1, A2 > a( a1, a2 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 ) const\n    {\n        rrlist2< A1, A2 > a( a1, a2 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 )\n    {\n        rrlist3< A1, A2, A3 > a( a1, a2, a3 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 ) const\n    {\n        rrlist3< A1, A2, A3 > a( a1, a2, a3 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )\n    {\n        rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) const\n    {\n        rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )\n    {\n        rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) const\n    {\n        rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )\n    {\n        rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) const\n    {\n        rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )\n    {\n        rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) const\n    {\n        rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )\n    {\n        rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) const\n    {\n        rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )\n    {\n        rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) const\n    {\n        rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    //\n\n    template<class A> result_type eval( A & a )\n    {\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class A> result_type eval( A & a ) const\n    {\n        return l_( type<result_type>(), f_, a, 0 );\n    }\n\n    template<class V> void accept( V & v ) const\n    {\n#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ )\n        using boost::visit_each;\n#endif\n\n        BOOST_BIND_VISIT_EACH( v, f_, 0 );\n        l_.accept( v );\n    }\n\n    bool compare( this_type const & rhs ) const\n    {\n        return ref_compare( f_, rhs.f_, 0 ) && l_ == rhs.l_;\n    }\n};\n\n#elif !defined( BOOST_NO_VOID_RETURNS )\n\ntemplate<class R, class F, class L> class bind_t\n{\npublic:\n\n    typedef bind_t this_type;\n\n    bind_t(F f, L const & l): f_(f), l_(l) {}\n\n#define BOOST_BIND_RETURN return\n#include <boost/bind/bind_template.hpp>\n#undef BOOST_BIND_RETURN\n\n};\n\n#else // no void returns\n\ntemplate<class R> struct bind_t_generator\n{\n\ntemplate<class F, class L> class implementation\n{\npublic:\n\n    typedef implementation this_type;\n\n    implementation(F f, L const & l): f_(f), l_(l) {}\n\n#define BOOST_BIND_RETURN return\n#include <boost/bind/bind_template.hpp>\n#undef BOOST_BIND_RETURN\n\n};\n\n};\n\ntemplate<> struct bind_t_generator<void>\n{\n\ntemplate<class F, class L> class implementation\n{\nprivate:\n\n    typedef void R;\n\npublic:\n\n    typedef implementation this_type;\n\n    implementation(F f, L const & l): f_(f), l_(l) {}\n\n#define BOOST_BIND_RETURN\n#include <boost/bind/bind_template.hpp>\n#undef BOOST_BIND_RETURN\n\n};\n\n};\n\ntemplate<class R2, class F, class L> class bind_t: public bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>\n{\npublic:\n\n    bind_t(F f, L const & l): bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>(f, l) {}\n\n};\n\n#endif\n\n// function_equal\n\n#ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n\n// put overloads in _bi, rely on ADL\n\n# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate<class R, class F, class L> bool function_equal( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b )\n{\n    return a.compare(b);\n}\n\n# else\n\ntemplate<class R, class F, class L> bool function_equal_impl( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )\n{\n    return a.compare(b);\n}\n\n# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n#else // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n\n// put overloads in boost\n\n} // namespace _bi\n\n# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate<class R, class F, class L> bool function_equal( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b )\n{\n    return a.compare(b);\n}\n\n# else\n\ntemplate<class R, class F, class L> bool function_equal_impl( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b, int )\n{\n    return a.compare(b);\n}\n\n# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\nnamespace _bi\n{\n\n#endif // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n\n// add_value\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (__SUNPRO_CC >= 0x530)\n\n#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x582) )\n\ntemplate<class T> struct add_value\n{\n    typedef _bi::value<T> type;\n};\n\n#else\n\ntemplate< class T, int I > struct add_value_2\n{\n    typedef boost::arg<I> type;\n};\n\ntemplate< class T > struct add_value_2< T, 0 >\n{\n    typedef _bi::value< T > type;\n};\n\ntemplate<class T> struct add_value\n{\n    typedef typename add_value_2< T, boost::is_placeholder< T >::value >::type type;\n};\n\n#endif\n\ntemplate<class T> struct add_value< value<T> >\n{\n    typedef _bi::value<T> type;\n};\n\ntemplate<class T> struct add_value< reference_wrapper<T> >\n{\n    typedef reference_wrapper<T> type;\n};\n\ntemplate<int I> struct add_value< arg<I> >\n{\n    typedef boost::arg<I> type;\n};\n\ntemplate<int I> struct add_value< arg<I> (*) () >\n{\n    typedef boost::arg<I> (*type) ();\n};\n\ntemplate<class R, class F, class L> struct add_value< bind_t<R, F, L> >\n{\n    typedef bind_t<R, F, L> type;\n};\n\n#else\n\ntemplate<int I> struct _avt_0;\n\ntemplate<> struct _avt_0<1>\n{\n    template<class T> struct inner\n    {\n        typedef T type;\n    };\n};\n\ntemplate<> struct _avt_0<2>\n{\n    template<class T> struct inner\n    {\n        typedef value<T> type;\n    };\n};\n\ntypedef char (&_avt_r1) [1];\ntypedef char (&_avt_r2) [2];\n\ntemplate<class T> _avt_r1 _avt_f(value<T>);\ntemplate<class T> _avt_r1 _avt_f(reference_wrapper<T>);\ntemplate<int I> _avt_r1 _avt_f(arg<I>);\ntemplate<int I> _avt_r1 _avt_f(arg<I> (*) ());\ntemplate<class R, class F, class L> _avt_r1 _avt_f(bind_t<R, F, L>);\n\n_avt_r2 _avt_f(...);\n\ntemplate<class T> struct add_value\n{\n    static T t();\n    typedef typename _avt_0<sizeof(_avt_f(t()))>::template inner<T>::type type;\n};\n\n#endif\n\n// list_av_N\n\ntemplate<class A1> struct list_av_1\n{\n    typedef typename add_value<A1>::type B1;\n    typedef list1<B1> type;\n};\n\ntemplate<class A1, class A2> struct list_av_2\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef list2<B1, B2> type;\n};\n\ntemplate<class A1, class A2, class A3> struct list_av_3\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef list3<B1, B2, B3> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4> struct list_av_4\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef list4<B1, B2, B3, B4> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5> struct list_av_5\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef list5<B1, B2, B3, B4, B5> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6> struct list_av_6\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef typename add_value<A6>::type B6;\n    typedef list6<B1, B2, B3, B4, B5, B6> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct list_av_7\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef typename add_value<A6>::type B6;\n    typedef typename add_value<A7>::type B7;\n    typedef list7<B1, B2, B3, B4, B5, B6, B7> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct list_av_8\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef typename add_value<A6>::type B6;\n    typedef typename add_value<A7>::type B7;\n    typedef typename add_value<A8>::type B8;\n    typedef list8<B1, B2, B3, B4, B5, B6, B7, B8> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct list_av_9\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef typename add_value<A6>::type B6;\n    typedef typename add_value<A7>::type B7;\n    typedef typename add_value<A8>::type B8;\n    typedef typename add_value<A9>::type B9;\n    typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type;\n};\n\n// operator!\n\nstruct logical_not\n{\n    template<class V> bool operator()(V const & v) const { return !v; }\n};\n\ntemplate<class R, class F, class L>\n    bind_t< bool, logical_not, list1< bind_t<R, F, L> > >\n    operator! (bind_t<R, F, L> const & f)\n{\n    typedef list1< bind_t<R, F, L> > list_type;\n    return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );\n}\n\n// relational operators\n\n#define BOOST_BIND_OPERATOR( op, name ) \\\n\\\nstruct name \\\n{ \\\n    template<class V, class W> bool operator()(V const & v, W const & w) const { return v op w; } \\\n}; \\\n \\\ntemplate<class R, class F, class L, class A2> \\\n    bind_t< bool, name, list2< bind_t<R, F, L>, typename add_value<A2>::type > > \\\n    operator op (bind_t<R, F, L> const & f, A2 a2) \\\n{ \\\n    typedef typename add_value<A2>::type B2; \\\n    typedef list2< bind_t<R, F, L>, B2> list_type; \\\n    return bind_t<bool, name, list_type> ( name(), list_type(f, a2) ); \\\n}\n\nBOOST_BIND_OPERATOR( ==, equal )\nBOOST_BIND_OPERATOR( !=, not_equal )\n\nBOOST_BIND_OPERATOR( <, less )\nBOOST_BIND_OPERATOR( <=, less_equal )\n\nBOOST_BIND_OPERATOR( >, greater )\nBOOST_BIND_OPERATOR( >=, greater_equal )\n\nBOOST_BIND_OPERATOR( &&, logical_and )\nBOOST_BIND_OPERATOR( ||, logical_or )\n\n#undef BOOST_BIND_OPERATOR\n\n#if defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3)\n\n// resolve ambiguity with rel_ops\n\n#define BOOST_BIND_OPERATOR( op, name ) \\\n\\\ntemplate<class R, class F, class L> \\\n    bind_t< bool, name, list2< bind_t<R, F, L>, bind_t<R, F, L> > > \\\n    operator op (bind_t<R, F, L> const & f, bind_t<R, F, L> const & g) \\\n{ \\\n    typedef list2< bind_t<R, F, L>, bind_t<R, F, L> > list_type; \\\n    return bind_t<bool, name, list_type> ( name(), list_type(f, g) ); \\\n}\n\nBOOST_BIND_OPERATOR( !=, not_equal )\nBOOST_BIND_OPERATOR( <=, less_equal )\nBOOST_BIND_OPERATOR( >, greater )\nBOOST_BIND_OPERATOR( >=, greater_equal )\n\n#endif\n\n// visit_each, ADL\n\n#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ ) \\\n   && !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)\n\ntemplate<class V, class T> void visit_each( V & v, value<T> const & t, int )\n{\n    using boost::visit_each;\n    BOOST_BIND_VISIT_EACH( v, t.get(), 0 );\n}\n\ntemplate<class V, class R, class F, class L> void visit_each( V & v, bind_t<R, F, L> const & t, int )\n{\n    t.accept( v );\n}\n\n#endif\n\n} // namespace _bi\n\n// visit_each, no ADL\n\n#if defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) || defined( __BORLANDC__ ) \\\n  || (defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)\n\ntemplate<class V, class T> void visit_each( V & v, _bi::value<T> const & t, int )\n{\n    BOOST_BIND_VISIT_EACH( v, t.get(), 0 );\n}\n\ntemplate<class V, class R, class F, class L> void visit_each( V & v, _bi::bind_t<R, F, L> const & t, int )\n{\n    t.accept( v );\n}\n\n#endif\n\n// is_bind_expression\n\ntemplate< class T > struct is_bind_expression\n{\n    enum _vt { value = 0 };\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class R, class F, class L > struct is_bind_expression< _bi::bind_t< R, F, L > >\n{\n    enum _vt { value = 1 };\n};\n\n#endif\n\n// bind\n\n#ifndef BOOST_BIND\n#define BOOST_BIND bind\n#endif\n\n// generic function objects\n\ntemplate<class R, class F>\n    _bi::bind_t<R, F, _bi::list0>\n    BOOST_BIND(F f)\n{\n    typedef _bi::list0 list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type());\n}\n\ntemplate<class R, class F, class A1>\n    _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(F f, A1 a1)\n{\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1));\n}\n\ntemplate<class R, class F, class A1, class A2>\n    _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2)\n{\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3>\n    _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)\n{\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\n// generic function objects, alternative syntax\n\ntemplate<class R, class F>\n    _bi::bind_t<R, F, _bi::list0>\n    BOOST_BIND(boost::type<R>, F f)\n{\n    typedef _bi::list0 list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type());\n}\n\ntemplate<class R, class F, class A1>\n    _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1)\n{\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1));\n}\n\ntemplate<class R, class F, class A1, class A2>\n    _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2)\n{\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3>\n    _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3)\n{\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n\n// adaptable function objects\n\ntemplate<class F>\n    _bi::bind_t<_bi::unspecified, F, _bi::list0>\n    BOOST_BIND(F f)\n{\n    typedef _bi::list0 list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type());\n}\n\ntemplate<class F, class A1>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(F f, A1 a1)\n{\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1));\n}\n\ntemplate<class F, class A1, class A2>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2)\n{\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2));\n}\n\ntemplate<class F, class A1, class A2, class A3>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)\n{\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\n#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n\n// function pointers\n\n#define BOOST_BIND_CC\n#define BOOST_BIND_ST\n\n#include <boost/bind/bind_cc.hpp>\n\n#undef BOOST_BIND_CC\n#undef BOOST_BIND_ST\n\n#ifdef BOOST_BIND_ENABLE_STDCALL\n\n#define BOOST_BIND_CC __stdcall\n#define BOOST_BIND_ST\n\n#include <boost/bind/bind_cc.hpp>\n\n#undef BOOST_BIND_CC\n#undef BOOST_BIND_ST\n\n#endif\n\n#ifdef BOOST_BIND_ENABLE_FASTCALL\n\n#define BOOST_BIND_CC __fastcall\n#define BOOST_BIND_ST\n\n#include <boost/bind/bind_cc.hpp>\n\n#undef BOOST_BIND_CC\n#undef BOOST_BIND_ST\n\n#endif\n\n#ifdef BOOST_BIND_ENABLE_PASCAL\n\n#define BOOST_BIND_ST pascal\n#define BOOST_BIND_CC\n\n#include <boost/bind/bind_cc.hpp>\n\n#undef BOOST_BIND_ST\n#undef BOOST_BIND_CC\n\n#endif\n\n// member function pointers\n\n#define BOOST_BIND_MF_NAME(X) X\n#define BOOST_BIND_MF_CC\n\n#include <boost/bind/bind_mf_cc.hpp>\n#include <boost/bind/bind_mf2_cc.hpp>\n\n#undef BOOST_BIND_MF_NAME\n#undef BOOST_BIND_MF_CC\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_BIND_MF_NAME(X) X##_cdecl\n#define BOOST_BIND_MF_CC __cdecl\n\n#include <boost/bind/bind_mf_cc.hpp>\n#include <boost/bind/bind_mf2_cc.hpp>\n\n#undef BOOST_BIND_MF_NAME\n#undef BOOST_BIND_MF_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_BIND_MF_NAME(X) X##_stdcall\n#define BOOST_BIND_MF_CC __stdcall\n\n#include <boost/bind/bind_mf_cc.hpp>\n#include <boost/bind/bind_mf2_cc.hpp>\n\n#undef BOOST_BIND_MF_NAME\n#undef BOOST_BIND_MF_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_BIND_MF_NAME(X) X##_fastcall\n#define BOOST_BIND_MF_CC __fastcall\n\n#include <boost/bind/bind_mf_cc.hpp>\n#include <boost/bind/bind_mf2_cc.hpp>\n\n#undef BOOST_BIND_MF_NAME\n#undef BOOST_BIND_MF_CC\n\n#endif\n\n// data member pointers\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n    || ( defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x620 ) ) )\n\ntemplate<class R, class T, class A1>\n_bi::bind_t< R, _mfi::dm<R, T>, typename _bi::list_av_1<A1>::type >\n    BOOST_BIND(R T::*f, A1 a1)\n{\n    typedef _mfi::dm<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type>( F(f), list_type(a1) );\n}\n\n#else\n\nnamespace _bi\n{\n\ntemplate< class Pm, int I > struct add_cref;\n\ntemplate< class M, class T > struct add_cref< M T::*, 0 >\n{\n    typedef M type;\n};\n\ntemplate< class M, class T > struct add_cref< M T::*, 1 >\n{\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4180)\n#endif\n    typedef M const & type;\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n};\n\ntemplate< class R, class T > struct add_cref< R (T::*) (), 1 >\n{\n    typedef void type;\n};\n\n#if !defined(__IBMCPP__) || __IBMCPP_FUNC_CV_TMPL_ARG_DEDUCTION\n\ntemplate< class R, class T > struct add_cref< R (T::*) () const, 1 >\n{\n    typedef void type;\n};\n\n#endif // __IBMCPP__\n\ntemplate<class R> struct isref\n{\n    enum value_type { value = 0 };\n};\n\ntemplate<class R> struct isref< R& >\n{\n    enum value_type { value = 1 };\n};\n\ntemplate<class R> struct isref< R* >\n{\n    enum value_type { value = 1 };\n};\n\ntemplate<class Pm, class A1> struct dm_result\n{\n    typedef typename add_cref< Pm, 1 >::type type;\n};\n\ntemplate<class Pm, class R, class F, class L> struct dm_result< Pm, bind_t<R, F, L> >\n{\n    typedef typename bind_t<R, F, L>::result_type result_type;\n    typedef typename add_cref< Pm, isref< result_type >::value >::type type;\n};\n\n} // namespace _bi\n\ntemplate< class A1, class M, class T >\n\n_bi::bind_t<\n    typename _bi::dm_result< M T::*, A1 >::type,\n    _mfi::dm<M, T>,\n    typename _bi::list_av_1<A1>::type\n>\n\nBOOST_BIND( M T::*f, A1 a1 )\n{\n    typedef typename _bi::dm_result< M T::*, A1 >::type result_type;\n    typedef _mfi::dm<M, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t< result_type, F, list_type >( F( f ), list_type( a1 ) );\n}\n\n#endif\n\n} // namespace boost\n\n#ifndef BOOST_BIND_NO_PLACEHOLDERS\n\n# include <boost/bind/placeholders.hpp>\n\n#endif\n\n#ifdef BOOST_MSVC\n# pragma warning(default: 4512) // assignment operator could not be generated\n# pragma warning(pop)\n#endif\n\n#endif // #ifndef BOOST_BIND_BIND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/bind_cc.hpp",
    "content": "//\n//  bind/bind_cc.hpp - support for different calling conventions\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\ntemplate<class R>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (), _bi::list0>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) ())\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) ();\n    typedef _bi::list0 list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type());\n}\n\ntemplate<class R, class B1, class A1>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1), typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1), A1 a1)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1);\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1));\n}\n\ntemplate<class R, class B1, class B2, class A1, class A2>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2), typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2), A1 a1, A2 a2)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2);\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3), typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3), A1 a1, A2 a2, A3 a3)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3);\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4), typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4);\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5), typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5);\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6), typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6);\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7), typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7);\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8), typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8);\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, class B9,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8, B9), typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9);\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/bind_mf2_cc.hpp",
    "content": "//\n//  bind/bind_mf2_cc.hpp - member functions, type<> syntax\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n// 0\n\ntemplate<class Rt2, class R, class T,\n    class A1>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (), A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));\n}\n\ntemplate<class Rt2, class R, class T,\n    class A1>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));\n}\n\n// 1\n\ntemplate<class Rt2, class R, class T,\n    class B1,\n    class A1, class A2>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1,\n    class A1, class A2>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));\n}\n\n// 2\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\n// 3\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\n// 4\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\n// 5\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\n// 6\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\n// 7\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\n// 8\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/bind_mf_cc.hpp",
    "content": "//\n//  bind/bind_mf_cc.hpp - support for different calling conventions\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n// 0\n\ntemplate<class R, class T,\n    class A1>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));\n}\n\ntemplate<class R, class T,\n    class A1>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));\n}\n\ntemplate<class Rt2, class R, class T,\n    class A1>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));\n}\n\ntemplate<class Rt2, class R, class T,\n    class A1>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));\n}\n\n// 1\n\ntemplate<class R, class T,\n    class B1,\n    class A1, class A2>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));\n}\n\ntemplate<class R, class T,\n    class B1,\n    class A1, class A2>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1,\n    class A1, class A2>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1,\n    class A1, class A2>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));\n}\n\n// 2\n\ntemplate<class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\ntemplate<class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\n// 3\n\ntemplate<class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\n// 4\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\n// 5\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\n// 6\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\n// 7\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\n// 8\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    typename boost::enable_if_c<!boost::core::is_same<Rt2, R>::value,\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/bind_template.hpp",
    "content": "//\n//  bind/bind_template.hpp\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n    typedef typename result_traits<R, F>::type result_type;\n\n    result_type operator()()\n    {\n        list0 a;\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    result_type operator()() const\n    {\n        list0 a;\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1> result_type operator()(A1 & a1)\n    {\n        list1<A1 &> a(a1);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1> result_type operator()(A1 & a1) const\n    {\n        list1<A1 &> a(a1);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1> result_type operator()(A1 const & a1)\n    {\n        list1<A1 const &> a(a1);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1> result_type operator()(A1 const & a1) const\n    {\n        list1<A1 const &> a(a1);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)\n    {\n        list2<A1 &, A2 &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const\n    {\n        list2<A1 &, A2 &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2)\n    {\n        list2<A1 const &, A2 &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) const\n    {\n        list2<A1 const &, A2 &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2)\n    {\n        list2<A1 &, A2 const &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) const\n    {\n        list2<A1 &, A2 const &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2)\n    {\n        list2<A1 const &, A2 const &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) const\n    {\n        list2<A1 const &, A2 const &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)\n    {\n        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const\n    {\n        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3)\n    {\n        list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) const\n    {\n        list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)\n    {\n        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const\n    {\n        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4)\n    {\n        list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) const\n    {\n        list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)\n    {\n        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const\n    {\n        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5)\n    {\n        list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) const\n    {\n        list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)\n    {\n        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const\n    {\n        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6)\n    {\n        list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) const\n    {\n        list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)\n    {\n        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const\n    {\n        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7)\n    {\n        list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7) const\n    {\n        list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)\n    {\n        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const\n    {\n        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8)\n    {\n        list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8) const\n    {\n        list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)\n    {\n        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const\n    {\n        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9)\n    {\n        list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9) const\n    {\n        list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A> result_type eval(A & a)\n    {\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A> result_type eval(A & a) const\n    {\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ )\n\n        using boost::visit_each;\n\n#endif\n        BOOST_BIND_VISIT_EACH(v, f_, 0);\n        l_.accept(v);\n    }\n\n    bool compare(this_type const & rhs) const\n    {\n        return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_;\n    }\n\nprivate:\n\n    F f_;\n    L l_;\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/make_adaptable.hpp",
    "content": "#ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED\n#define BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED\n\n//\n//  make_adaptable.hpp\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\nnamespace boost\n{\n\nnamespace _bi\n{\n\ntemplate<class R, class F> class af0\n{\npublic:\n\n    typedef R result_type;\n\n    explicit af0(F f): f_(f)\n    {\n    }\n\n    result_type operator()()\n    {\n        return f_();\n    }\n\n    result_type operator()() const\n    {\n        return f_();\n    }\n\nprivate:\n\n    F f_;\n};\n\ntemplate<class R, class A1, class F> class af1\n{\npublic:\n\n    typedef R result_type;\n    typedef A1 argument_type;\n    typedef A1 arg1_type;\n\n    explicit af1(F f): f_(f)\n    {\n    }\n\n    result_type operator()(A1 a1)\n    {\n        return f_(a1);\n    }\n\n    result_type operator()(A1 a1) const\n    {\n        return f_(a1);\n    }\n\nprivate:\n\n    F f_;\n};\n\ntemplate<class R, class A1, class A2, class F> class af2\n{\npublic:\n\n    typedef R result_type;\n    typedef A1 first_argument_type;\n    typedef A2 second_argument_type;\n    typedef A1 arg1_type;\n    typedef A2 arg2_type;\n\n    explicit af2(F f): f_(f)\n    {\n    }\n\n    result_type operator()(A1 a1, A2 a2)\n    {\n        return f_(a1, a2);\n    }\n\n    result_type operator()(A1 a1, A2 a2) const\n    {\n        return f_(a1, a2);\n    }\n\nprivate:\n\n    F f_;\n};\n\ntemplate<class R, class A1, class A2, class A3, class F> class af3\n{\npublic:\n\n    typedef R result_type;\n    typedef A1 arg1_type;\n    typedef A2 arg2_type;\n    typedef A3 arg3_type;\n\n    explicit af3(F f): f_(f)\n    {\n    }\n\n    result_type operator()(A1 a1, A2 a2, A3 a3)\n    {\n        return f_(a1, a2, a3);\n    }\n\n    result_type operator()(A1 a1, A2 a2, A3 a3) const\n    {\n        return f_(a1, a2, a3);\n    }\n\nprivate:\n\n    F f_;\n};\n\ntemplate<class R, class A1, class A2, class A3, class A4, class F> class af4\n{\npublic:\n\n    typedef R result_type;\n    typedef A1 arg1_type;\n    typedef A2 arg2_type;\n    typedef A3 arg3_type;\n    typedef A4 arg4_type;\n\n    explicit af4(F f): f_(f)\n    {\n    }\n\n    result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4)\n    {\n        return f_(a1, a2, a3, a4);\n    }\n\n    result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        return f_(a1, a2, a3, a4);\n    }\n\nprivate:\n\n    F f_;\n};\n\n} // namespace _bi\n\ntemplate<class R, class F> _bi::af0<R, F> make_adaptable(F f)\n{\n    return _bi::af0<R, F>(f);\n}\n\ntemplate<class R, class A1, class F> _bi::af1<R, A1, F> make_adaptable(F f)\n{\n    return _bi::af1<R, A1, F>(f);\n}\n\ntemplate<class R, class A1, class A2, class F> _bi::af2<R, A1, A2, F> make_adaptable(F f)\n{\n    return _bi::af2<R, A1, A2, F>(f);\n}\n\ntemplate<class R, class A1, class A2, class A3, class F> _bi::af3<R, A1, A2, A3, F> make_adaptable(F f)\n{\n    return _bi::af3<R, A1, A2, A3, F>(f);\n}\n\ntemplate<class R, class A1, class A2, class A3, class A4, class F> _bi::af4<R, A1, A2, A3, A4, F> make_adaptable(F f)\n{\n    return _bi::af4<R, A1, A2, A3, A4, F>(f);\n}\n\n} // namespace boost\n\n#endif // #ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/mem_fn.hpp",
    "content": "#ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED\n#define BOOST_BIND_MEM_FN_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  mem_fn.hpp - a generalization of std::mem_fun[_ref]\n//\n//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2001 David Abrahams\n//  Copyright (c) 2003-2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.\n//\n\n#include <boost/config.hpp>\n#include <boost/get_pointer.hpp>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost\n{\n\n#if defined(BOOST_NO_VOID_RETURNS)\n\n#define BOOST_MEM_FN_CLASS_F , class F\n#define BOOST_MEM_FN_TYPEDEF(X)\n\nnamespace _mfi // mem_fun_impl\n{\n\ntemplate<class V> struct mf\n{\n\n#define BOOST_MEM_FN_RETURN return\n\n#define BOOST_MEM_FN_NAME(X) inner_##X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#undef BOOST_MEM_FN_RETURN\n\n}; // struct mf<V>\n\ntemplate<> struct mf<void>\n{\n\n#define BOOST_MEM_FN_RETURN\n\n#define BOOST_MEM_FN_NAME(X) inner_##X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#undef BOOST_MEM_FN_RETURN\n\n}; // struct mf<void>\n\n#undef BOOST_MEM_FN_CLASS_F\n#undef BOOST_MEM_FN_TYPEDEF_F\n\n#define BOOST_MEM_FN_NAME(X) X\n#define BOOST_MEM_FN_NAME2(X) inner_##X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_vw.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_NAME2\n#undef BOOST_MEM_FN_CC\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) X##_cdecl\n#define BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_vw.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_NAME2\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_stdcall\n#define BOOST_MEM_FN_NAME2(X) inner_##X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_vw.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_NAME2\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_fastcall\n#define BOOST_MEM_FN_NAME2(X) inner_##X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_vw.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_NAME2\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n} // namespace _mfi\n\n#else // #ifdef BOOST_NO_VOID_RETURNS\n\n#define BOOST_MEM_FN_CLASS_F\n#define BOOST_MEM_FN_TYPEDEF(X) typedef X;\n\nnamespace _mfi\n{\n\n#define BOOST_MEM_FN_RETURN return\n\n#define BOOST_MEM_FN_NAME(X) X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#undef BOOST_MEM_FN_RETURN\n\n} // namespace _mfi\n\n#undef BOOST_MEM_FN_CLASS_F\n#undef BOOST_MEM_FN_TYPEDEF\n\n#endif // #ifdef BOOST_NO_VOID_RETURNS\n\n#define BOOST_MEM_FN_NAME(X) X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_cc.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_CC\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_cc.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_cc.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_cc.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n// data member support\n\nnamespace _mfi\n{\n\ntemplate<class R, class T> class dm\n{\npublic:\n\n    typedef R const & result_type;\n    typedef T const * argument_type;\n\nprivate:\n    \n    typedef R (T::*F);\n    F f_;\n\n    template<class U> R const & call(U & u, T const *) const\n    {\n        return (u.*f_);\n    }\n\n    template<class U> R const & call(U & u, void const *) const\n    {\n        return (get_pointer(u)->*f_);\n    }\n\npublic:\n    \n    explicit dm(F f): f_(f) {}\n\n    R & operator()(T * p) const\n    {\n        return (p->*f_);\n    }\n\n    R const & operator()(T const * p) const\n    {\n        return (p->*f_);\n    }\n\n    template<class U> R const & operator()(U const & u) const\n    {\n        return call(u, &u);\n    }\n\n#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200)\n\n    R & operator()(T & t) const\n    {\n        return (t.*f_);\n    }\n\n    R const & operator()(T const & t) const\n    {\n        return (t.*f_);\n    }\n\n#endif\n\n    bool operator==(dm const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(dm const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n} // namespace _mfi\n\ntemplate<class R, class T> _mfi::dm<R, T> mem_fn(R T::*f)\n{\n    return _mfi::dm<R, T>(f);\n}\n\n} // namespace boost\n\n#endif // #ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/mem_fn_cc.hpp",
    "content": "//\n//  bind/mem_fn_cc.hpp - support for different calling conventions\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.\n//\n\ntemplate<class R, class T> _mfi::BOOST_MEM_FN_NAME(mf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) ())\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf0)<R, T>(f);\n}\n\ntemplate<class R, class T> _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) () const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T>(f);\n}\n\ntemplate<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1>(f);\n}\n\ntemplate<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1>(f);\n}\n\ntemplate<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2>(f);\n}\n\ntemplate<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f);\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/mem_fn_template.hpp",
    "content": "//\n//  bind/mem_fn_template.hpp\n//\n//  Do not include this header directly\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.\n//\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n# define BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n#endif\n\n// mf0\n\ntemplate<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0)\n{\npublic:\n\n    typedef R result_type;\n    typedef T * argument_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ())\n    F f_;\n\n    template<class U> R call(U & u, T const *) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)();\n    }\n\n    template<class U> R call(U & u, void const *) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {}\n\n    R operator()(T * p) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)();\n    }\n\n    template<class U> R operator()(U & u) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p);\n    }\n\n#endif\n\n    R operator()(T & t) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)();\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf0) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf0) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf0\n\ntemplate<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0)\n{\npublic:\n\n    typedef R result_type;\n    typedef T const * argument_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const)\n    F f_;\n\n    template<class U> R call(U & u, T const *) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)();\n    }\n\n    template<class U> R call(U & u, void const *) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p);\n    }\n\n    R operator()(T const & t) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)();\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf0) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf0) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf1\n\ntemplate<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)\n{\npublic:\n\n    typedef R result_type;\n    typedef T * first_argument_type;\n    typedef A1 second_argument_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1))\n    F f_;\n\n    template<class U, class B1> R call(U & u, T const *, B1 & b1) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1);\n    }\n\n    template<class U, class B1> R call(U & u, void const *, B1 & b1) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1);\n    }\n\n    template<class U> R operator()(U & u, A1 a1) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf1) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf1) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf1\n\ntemplate<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1)\n{\npublic:\n\n    typedef R result_type;\n    typedef T const * first_argument_type;\n    typedef A1 second_argument_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const)\n    F f_;\n\n    template<class U, class B1> R call(U & u, T const *, B1 & b1) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1);\n    }\n\n    template<class U, class B1> R call(U & u, void const *, B1 & b1) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1);\n    }\n\n    R operator()(T const & t, A1 a1) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf1) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf1) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf2\n\ntemplate<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2))\n    F f_;\n\n    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);\n    }\n\n    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf2) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf2) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf2\n\ntemplate<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const)\n    F f_;\n\n    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);\n    }\n\n    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf2) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf2) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf3\n\ntemplate<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3))\n    F f_;\n\n    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);\n    }\n\n    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf3) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf3) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf3\n\ntemplate<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n\n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);\n    }\n\n    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);\n    }\n\npublic:\n\n    explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf3) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf3) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf4\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf4) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf4) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf4\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf4) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf4) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf5\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf5)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf5) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf5) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf5\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf5)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf5) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf5) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf6\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf6)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n\n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);\n    }\n\npublic:\n\n    explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf6) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf6) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf6\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf6)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf6) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf6) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf7\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf7)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf7) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf7) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf7\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf7)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf7) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf7) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf8\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf8)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf8) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf8) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf8\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf8)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {}\n\n    R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf8) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf8) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n#undef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/mem_fn_vw.hpp",
    "content": "//\n//  bind/mem_fn_vw.hpp - void return helper wrappers\n//\n//  Do not include this header directly\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.\n//\n\ntemplate<class R, class T> struct BOOST_MEM_FN_NAME(mf0): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0)<R, T, R (BOOST_MEM_FN_CC T::*) ()>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) ();\n    explicit BOOST_MEM_FN_NAME(mf0)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0)<R, T, F>(f) {}\n};\n\ntemplate<class R, class T> struct BOOST_MEM_FN_NAME(cmf0): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0)<R, T, R (BOOST_MEM_FN_CC T::*) () const>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) () const;\n    explicit BOOST_MEM_FN_NAME(cmf0)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0)<R, T, F>(f) {}\n};\n\n\ntemplate<class R, class T, class A1> struct BOOST_MEM_FN_NAME(mf1): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1)<R, T, A1, R (BOOST_MEM_FN_CC T::*) (A1)>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1);\n    explicit BOOST_MEM_FN_NAME(mf1)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1)<R, T, A1, F>(f) {}\n};\n\ntemplate<class R, class T, class A1> struct BOOST_MEM_FN_NAME(cmf1): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1)<R, T, A1, R (BOOST_MEM_FN_CC T::*) (A1) const>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1) const;\n    explicit BOOST_MEM_FN_NAME(cmf1)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1)<R, T, A1, F>(f) {}\n};\n\n\ntemplate<class R, class T, class A1, class A2> struct BOOST_MEM_FN_NAME(mf2): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2)<R, T, A1, A2, R (BOOST_MEM_FN_CC T::*) (A1, A2)>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2);\n    explicit BOOST_MEM_FN_NAME(mf2)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2)<R, T, A1, A2, F>(f) {}\n};\n\ntemplate<class R, class T, class A1, class A2> struct BOOST_MEM_FN_NAME(cmf2): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2)<R, T, A1, A2, R (BOOST_MEM_FN_CC T::*) (A1, A2) const>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2) const;\n    explicit BOOST_MEM_FN_NAME(cmf2)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2)<R, T, A1, A2, F>(f) {}\n};\n\n\ntemplate<class R, class T, class A1, class A2, class A3> struct BOOST_MEM_FN_NAME(mf3): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3)<R, T, A1, A2, A3, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3)>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3);\n    explicit BOOST_MEM_FN_NAME(mf3)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3)<R, T, A1, A2, A3, F>(f) {}\n};\n\ntemplate<class R, class T, class A1, class A2, class A3> struct BOOST_MEM_FN_NAME(cmf3): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3)<R, T, A1, A2, A3, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3) const>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const;\n    explicit BOOST_MEM_FN_NAME(cmf3)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3)<R, T, A1, A2, A3, F>(f) {}\n};\n\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4> struct BOOST_MEM_FN_NAME(mf4): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4)<R, T, A1, A2, A3, A4, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4)>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4);\n    explicit BOOST_MEM_FN_NAME(mf4)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4)<R, T, A1, A2, A3, A4, F>(f) {}\n};\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4> struct BOOST_MEM_FN_NAME(cmf4): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4)<R, T, A1, A2, A3, A4, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4) const>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const;\n    explicit BOOST_MEM_FN_NAME(cmf4)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4)<R, T, A1, A2, A3, A4, F>(f) {}\n};\n\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5> struct BOOST_MEM_FN_NAME(mf5): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5)<R, T, A1, A2, A3, A4, A5, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5)>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5);\n    explicit BOOST_MEM_FN_NAME(mf5)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5)<R, T, A1, A2, A3, A4, A5, F>(f) {}\n};\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5> struct BOOST_MEM_FN_NAME(cmf5): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5)<R, T, A1, A2, A3, A4, A5, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5) const>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const;\n    explicit BOOST_MEM_FN_NAME(cmf5)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5)<R, T, A1, A2, A3, A4, A5, F>(f) {}\n};\n\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> struct BOOST_MEM_FN_NAME(mf6): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6)<R, T, A1, A2, A3, A4, A5, A6, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6)>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6);\n    explicit BOOST_MEM_FN_NAME(mf6)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6)<R, T, A1, A2, A3, A4, A5, A6, F>(f) {}\n};\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> struct BOOST_MEM_FN_NAME(cmf6): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6)<R, T, A1, A2, A3, A4, A5, A6, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6) const>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const;\n    explicit BOOST_MEM_FN_NAME(cmf6)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6)<R, T, A1, A2, A3, A4, A5, A6, F>(f) {}\n};\n\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct BOOST_MEM_FN_NAME(mf7): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7)>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7);\n    explicit BOOST_MEM_FN_NAME(mf7)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7, F>(f) {}\n};\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct BOOST_MEM_FN_NAME(cmf7): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7) const>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const;\n    explicit BOOST_MEM_FN_NAME(cmf7)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7, F>(f) {}\n};\n\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct BOOST_MEM_FN_NAME(mf8): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7, A8)>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8);\n    explicit BOOST_MEM_FN_NAME(mf8)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, F>(f) {}\n};\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct BOOST_MEM_FN_NAME(cmf8): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7, A8) const>\n{\n    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const;\n    explicit BOOST_MEM_FN_NAME(cmf8)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, F>(f) {}\n};\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/placeholders.hpp",
    "content": "#ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED\n#define BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  bind/placeholders.hpp - _N definitions\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n#include <boost/bind/arg.hpp>\n#include <boost/config.hpp>\n\nnamespace boost\n{\n\nnamespace placeholders\n{\n\n#if defined(__BORLANDC__) || defined(__GNUC__) && (__GNUC__ < 4)\n\ninline boost::arg<1> _1() { return boost::arg<1>(); }\ninline boost::arg<2> _2() { return boost::arg<2>(); }\ninline boost::arg<3> _3() { return boost::arg<3>(); }\ninline boost::arg<4> _4() { return boost::arg<4>(); }\ninline boost::arg<5> _5() { return boost::arg<5>(); }\ninline boost::arg<6> _6() { return boost::arg<6>(); }\ninline boost::arg<7> _7() { return boost::arg<7>(); }\ninline boost::arg<8> _8() { return boost::arg<8>(); }\ninline boost::arg<9> _9() { return boost::arg<9>(); }\n\n#else\n\nBOOST_STATIC_CONSTEXPR boost::arg<1> _1;\nBOOST_STATIC_CONSTEXPR boost::arg<2> _2;\nBOOST_STATIC_CONSTEXPR boost::arg<3> _3;\nBOOST_STATIC_CONSTEXPR boost::arg<4> _4;\nBOOST_STATIC_CONSTEXPR boost::arg<5> _5;\nBOOST_STATIC_CONSTEXPR boost::arg<6> _6;\nBOOST_STATIC_CONSTEXPR boost::arg<7> _7;\nBOOST_STATIC_CONSTEXPR boost::arg<8> _8;\nBOOST_STATIC_CONSTEXPR boost::arg<9> _9;\n\n#endif\n\n} // namespace placeholders\n\n} // namespace boost\n\n#endif // #ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/protect.hpp",
    "content": "#ifndef BOOST_BIND_PROTECT_HPP_INCLUDED\n#define BOOST_BIND_PROTECT_HPP_INCLUDED\n\n//\n//  protect.hpp\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2009 Steven Watanabe\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost\n{\n\nnamespace _bi\n{\n\ntemplate<class F> class protected_bind_t\n{\npublic:\n\n    typedef typename F::result_type result_type;\n\n    explicit protected_bind_t(F f): f_(f)\n    {\n    }\n\n    result_type operator()()\n    {\n        return f_();\n    }\n\n    result_type operator()() const\n    {\n        return f_();\n    }\n\n    template<class A1> result_type operator()(A1 & a1)\n    {\n        return f_(a1);\n    }\n\n    template<class A1> result_type operator()(A1 & a1) const\n    {\n        return f_(a1);\n    }\n\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1> result_type operator()(const A1 & a1)\n    {\n        return f_(a1);\n    }\n\n    template<class A1> result_type operator()(const A1 & a1) const\n    {\n        return f_(a1);\n    }\n\n#endif\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)\n    {\n        return f_(a1, a2);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const\n    {\n        return f_(a1, a2);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2)\n    {\n        return f_(a1, a2);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) const\n    {\n        return f_(a1, a2);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2)\n    {\n        return f_(a1, a2);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) const\n    {\n        return f_(a1, a2);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2)\n    {\n        return f_(a1, a2);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) const\n    {\n        return f_(a1, a2);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)\n    {\n        return f_(a1, a2, a3);\n    }\n\n    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const\n    {\n        return f_(a1, a2, a3);\n    }\n    \n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3)\n    {\n        return f_(a1, a2, a3);\n    }\n\n    template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) const\n    {\n        return f_(a1, a2, a3);\n    }\n    \n#endif\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)\n    {\n        return f_(a1, a2, a3, a4);\n    }\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const\n    {\n        return f_(a1, a2, a3, a4);\n    }\n    \n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4)\n    {\n        return f_(a1, a2, a3, a4);\n    }\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) const\n    {\n        return f_(a1, a2, a3, a4);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)\n    {\n        return f_(a1, a2, a3, a4, a5);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const\n    {\n        return f_(a1, a2, a3, a4, a5);\n    }\n    \n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5)\n    {\n        return f_(a1, a2, a3, a4, a5);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) const\n    {\n        return f_(a1, a2, a3, a4, a5);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)\n    {\n        return f_(a1, a2, a3, a4, a5, a6);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const\n    {\n        return f_(a1, a2, a3, a4, a5, a6);\n    }\n    \n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6)\n    {\n        return f_(a1, a2, a3, a4, a5, a6);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) const\n    {\n        return f_(a1, a2, a3, a4, a5, a6);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7);\n    }\n    \n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7)\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7) const\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n    \n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8)\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8) const\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n    }\n    \n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9)\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9) const\n    {\n        return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n    }\n\n#endif\n\nprivate:\n\n    F f_;\n};\n\n} // namespace _bi\n\ntemplate<class F> _bi::protected_bind_t<F> protect(F f)\n{\n    return _bi::protected_bind_t<F>(f);\n}\n\n} // namespace boost\n\n#endif // #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/bind/storage.hpp",
    "content": "#ifndef BOOST_BIND_STORAGE_HPP_INCLUDED\n#define BOOST_BIND_STORAGE_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  bind/storage.hpp\n//\n//  boost/bind.hpp support header, optimized storage\n//\n//  Copyright (c) 2006 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n#include <boost/config.hpp>\n#include <boost/bind/arg.hpp>\n\n#ifdef BOOST_MSVC\n# pragma warning(push)\n# pragma warning(disable: 4512) // assignment operator could not be generated\n#endif\n\nnamespace boost\n{\n\nnamespace _bi\n{\n\n// 1\n\ntemplate<class A1> struct storage1\n{\n    explicit storage1( A1 a1 ): a1_( a1 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        BOOST_BIND_VISIT_EACH(v, a1_, 0);\n    }\n\n    A1 a1_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( __BORLANDC__ )\n\ntemplate<int I> struct storage1< boost::arg<I> >\n{\n    explicit storage1( boost::arg<I> ) {}\n\n    template<class V> void accept(V &) const { }\n\n    static boost::arg<I> a1_() { return boost::arg<I>(); }\n};\n\ntemplate<int I> struct storage1< boost::arg<I> (*) () >\n{\n    explicit storage1( boost::arg<I> (*) () ) {}\n\n    template<class V> void accept(V &) const { }\n\n    static boost::arg<I> a1_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 2\n\ntemplate<class A1, class A2> struct storage2: public storage1<A1>\n{\n    typedef storage1<A1> inherited;\n\n    storage2( A1 a1, A2 a2 ): storage1<A1>( a1 ), a2_( a2 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a2_, 0);\n    }\n\n    A2 a2_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, int I> struct storage2< A1, boost::arg<I> >: public storage1<A1>\n{\n    typedef storage1<A1> inherited;\n\n    storage2( A1 a1, boost::arg<I> ): storage1<A1>( a1 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a2_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, int I> struct storage2< A1, boost::arg<I> (*) () >: public storage1<A1>\n{\n    typedef storage1<A1> inherited;\n\n    storage2( A1 a1, boost::arg<I> (*) () ): storage1<A1>( a1 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a2_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 3\n\ntemplate<class A1, class A2, class A3> struct storage3: public storage2< A1, A2 >\n{\n    typedef storage2<A1, A2> inherited;\n\n    storage3( A1 a1, A2 a2, A3 a3 ): storage2<A1, A2>( a1, a2 ), a3_( a3 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a3_, 0);\n    }\n\n    A3 a3_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, int I> struct storage3< A1, A2, boost::arg<I> >: public storage2< A1, A2 >\n{\n    typedef storage2<A1, A2> inherited;\n\n    storage3( A1 a1, A2 a2, boost::arg<I> ): storage2<A1, A2>( a1, a2 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a3_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, int I> struct storage3< A1, A2, boost::arg<I> (*) () >: public storage2< A1, A2 >\n{\n    typedef storage2<A1, A2> inherited;\n\n    storage3( A1 a1, A2 a2, boost::arg<I> (*) () ): storage2<A1, A2>( a1, a2 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a3_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 4\n\ntemplate<class A1, class A2, class A3, class A4> struct storage4: public storage3< A1, A2, A3 >\n{\n    typedef storage3<A1, A2, A3> inherited;\n\n    storage4( A1 a1, A2 a2, A3 a3, A4 a4 ): storage3<A1, A2, A3>( a1, a2, a3 ), a4_( a4 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a4_, 0);\n    }\n\n    A4 a4_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, boost::arg<I> >: public storage3< A1, A2, A3 >\n{\n    typedef storage3<A1, A2, A3> inherited;\n\n    storage4( A1 a1, A2 a2, A3 a3, boost::arg<I> ): storage3<A1, A2, A3>( a1, a2, a3 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a4_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, boost::arg<I> (*) () >: public storage3< A1, A2, A3 >\n{\n    typedef storage3<A1, A2, A3> inherited;\n\n    storage4( A1 a1, A2 a2, A3 a3, boost::arg<I> (*) () ): storage3<A1, A2, A3>( a1, a2, a3 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a4_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 5\n\ntemplate<class A1, class A2, class A3, class A4, class A5> struct storage5: public storage4< A1, A2, A3, A4 >\n{\n    typedef storage4<A1, A2, A3, A4> inherited;\n\n    storage5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ), a5_( a5 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a5_, 0);\n    }\n\n    A5 a5_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, boost::arg<I> >: public storage4< A1, A2, A3, A4 >\n{\n    typedef storage4<A1, A2, A3, A4> inherited;\n\n    storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg<I> ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a5_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, boost::arg<I> (*) () >: public storage4< A1, A2, A3, A4 >\n{\n    typedef storage4<A1, A2, A3, A4> inherited;\n\n    storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg<I> (*) () ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a5_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 6\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6> struct storage6: public storage5< A1, A2, A3, A4, A5 >\n{\n    typedef storage5<A1, A2, A3, A4, A5> inherited;\n\n    storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ), a6_( a6 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a6_, 0);\n    }\n\n    A6 a6_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, boost::arg<I> >: public storage5< A1, A2, A3, A4, A5 >\n{\n    typedef storage5<A1, A2, A3, A4, A5> inherited;\n\n    storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg<I> ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a6_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, boost::arg<I> (*) () >: public storage5< A1, A2, A3, A4, A5 >\n{\n    typedef storage5<A1, A2, A3, A4, A5> inherited;\n\n    storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg<I> (*) () ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a6_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 7\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct storage7: public storage6< A1, A2, A3, A4, A5, A6 >\n{\n    typedef storage6<A1, A2, A3, A4, A5, A6> inherited;\n\n    storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ), a7_( a7 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a7_, 0);\n    }\n\n    A7 a7_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, boost::arg<I> >: public storage6< A1, A2, A3, A4, A5, A6 >\n{\n    typedef storage6<A1, A2, A3, A4, A5, A6> inherited;\n\n    storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg<I> ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a7_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, boost::arg<I> (*) () >: public storage6< A1, A2, A3, A4, A5, A6 >\n{\n    typedef storage6<A1, A2, A3, A4, A5, A6> inherited;\n\n    storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg<I> (*) () ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a7_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 8\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct storage8: public storage7< A1, A2, A3, A4, A5, A6, A7 >\n{\n    typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;\n\n    storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ), a8_( a8 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a8_, 0);\n    }\n\n    A8 a8_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg<I> >: public storage7< A1, A2, A3, A4, A5, A6, A7 >\n{\n    typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;\n\n    storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg<I> ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a8_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg<I> (*) () >: public storage7< A1, A2, A3, A4, A5, A6, A7 >\n{\n    typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;\n\n    storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg<I> (*) () ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a8_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 9\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct storage9: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >\n{\n    typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;\n\n    storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ), a9_( a9 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a9_, 0);\n    }\n\n    A9 a9_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg<I> >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >\n{\n    typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;\n\n    storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg<I> ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a9_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg<I> (*) () >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >\n{\n    typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;\n\n    storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg<I> (*) () ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a9_() { return boost::arg<I>(); }\n};\n\n#endif\n\n} // namespace _bi\n\n} // namespace boost\n\n#ifdef BOOST_MSVC\n# pragma warning(default: 4512) // assignment operator could not be generated\n# pragma warning(pop)\n#endif\n\n#endif // #ifndef BOOST_BIND_STORAGE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/cerrno.hpp",
    "content": "//  Boost cerrno.hpp header  -------------------------------------------------//\n\n//  Copyright Beman Dawes 2005.\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/system\n\n#ifndef BOOST_CERRNO_HPP\n#define BOOST_CERRNO_HPP\n\n#include <cerrno>\n\n//  supply errno values likely to be missing, particularly on Windows\n\n#ifndef EAFNOSUPPORT\n#define EAFNOSUPPORT 9901\n#endif\n\n#ifndef EADDRINUSE\n#define EADDRINUSE 9902\n#endif\n\n#ifndef EADDRNOTAVAIL\n#define EADDRNOTAVAIL 9903\n#endif\n\n#ifndef EISCONN\n#define EISCONN 9904\n#endif\n\n#ifndef EBADMSG\n#define EBADMSG 9905\n#endif\n\n#ifndef ECONNABORTED\n#define ECONNABORTED 9906\n#endif\n\n#ifndef EALREADY\n#define EALREADY 9907\n#endif\n\n#ifndef ECONNREFUSED\n#define ECONNREFUSED 9908\n#endif\n\n#ifndef ECONNRESET\n#define ECONNRESET 9909\n#endif\n\n#ifndef EDESTADDRREQ\n#define EDESTADDRREQ 9910\n#endif\n\n#ifndef EHOSTUNREACH\n#define EHOSTUNREACH 9911\n#endif\n\n#ifndef EIDRM\n#define EIDRM 9912\n#endif\n\n#ifndef EMSGSIZE\n#define EMSGSIZE 9913\n#endif\n\n#ifndef ENETDOWN\n#define ENETDOWN 9914\n#endif\n\n#ifndef ENETRESET\n#define ENETRESET 9915\n#endif\n\n#ifndef ENETUNREACH\n#define ENETUNREACH 9916\n#endif\n\n#ifndef ENOBUFS\n#define ENOBUFS 9917\n#endif\n\n#ifndef ENOLINK\n#define ENOLINK 9918\n#endif\n\n#ifndef ENODATA\n#define ENODATA 9919\n#endif\n\n#ifndef ENOMSG\n#define ENOMSG 9920\n#endif\n\n#ifndef ENOPROTOOPT\n#define ENOPROTOOPT 9921\n#endif\n\n#ifndef ENOSR\n#define ENOSR 9922\n#endif\n\n#ifndef ENOTSOCK\n#define ENOTSOCK 9923\n#endif\n\n#ifndef ENOSTR\n#define ENOSTR 9924\n#endif\n\n#ifndef ENOTCONN\n#define ENOTCONN 9925\n#endif\n\n#ifndef ENOTSUP\n#define ENOTSUP 9926\n#endif\n\n#ifndef ECANCELED\n#define ECANCELED 9927\n#endif\n\n#ifndef EINPROGRESS\n#define EINPROGRESS 9928\n#endif\n\n#ifndef EOPNOTSUPP\n#define EOPNOTSUPP 9929\n#endif\n\n#ifndef EWOULDBLOCK\n#define EWOULDBLOCK 9930\n#endif\n\n#ifndef EOWNERDEAD\n#define EOWNERDEAD  9931\n#endif\n\n#ifndef EPROTO\n#define EPROTO 9932\n#endif\n\n#ifndef EPROTONOSUPPORT\n#define EPROTONOSUPPORT 9933\n#endif\n\n#ifndef ENOTRECOVERABLE\n#define ENOTRECOVERABLE 9934\n#endif\n\n#ifndef ETIME\n#define ETIME 9935\n#endif\n\n#ifndef ETXTBSY\n#define ETXTBSY 9936\n#endif\n\n#ifndef ETIMEDOUT\n#define ETIMEDOUT 9938\n#endif\n\n#ifndef ELOOP\n#define ELOOP 9939\n#endif\n\n#ifndef EOVERFLOW\n#define EOVERFLOW 9940\n#endif\n\n#ifndef EPROTOTYPE\n#define EPROTOTYPE 9941\n#endif\n\n#ifndef ENOSYS\n#define ENOSYS 9942\n#endif\n\n#ifndef EINVAL\n#define EINVAL 9943\n#endif\n\n#ifndef ERANGE\n#define ERANGE 9944\n#endif\n\n#ifndef EILSEQ\n#define EILSEQ 9945\n#endif\n\n//  Windows Mobile doesn't appear to define these:\n\n#ifndef E2BIG\n#define E2BIG 9946\n#endif\n\n#ifndef EDOM\n#define EDOM 9947\n#endif\n\n#ifndef EFAULT\n#define EFAULT 9948\n#endif\n\n#ifndef EBADF\n#define EBADF 9949\n#endif\n\n#ifndef EPIPE\n#define EPIPE 9950\n#endif\n\n#ifndef EXDEV\n#define EXDEV 9951\n#endif\n\n#ifndef EBUSY\n#define EBUSY 9952\n#endif\n\n#ifndef ENOTEMPTY\n#define ENOTEMPTY 9953\n#endif\n\n#ifndef ENOEXEC\n#define ENOEXEC 9954\n#endif\n\n#ifndef EEXIST\n#define EEXIST 9955\n#endif\n\n#ifndef EFBIG\n#define EFBIG 9956\n#endif\n\n#ifndef ENAMETOOLONG\n#define ENAMETOOLONG 9957\n#endif\n\n#ifndef ENOTTY\n#define ENOTTY 9958\n#endif\n\n#ifndef EINTR\n#define EINTR 9959\n#endif\n\n#ifndef ESPIPE\n#define ESPIPE 9960\n#endif\n\n#ifndef EIO\n#define EIO 9961\n#endif\n\n#ifndef EISDIR\n#define EISDIR 9962\n#endif\n\n#ifndef ECHILD\n#define ECHILD 9963\n#endif\n\n#ifndef ENOLCK\n#define ENOLCK 9964\n#endif\n\n#ifndef ENOSPC\n#define ENOSPC 9965\n#endif\n\n#ifndef ENXIO\n#define ENXIO 9966\n#endif\n\n#ifndef ENODEV\n#define ENODEV 9967\n#endif\n\n#ifndef ENOENT\n#define ENOENT 9968\n#endif\n\n#ifndef ESRCH\n#define ESRCH 9969\n#endif\n\n#ifndef ENOTDIR\n#define ENOTDIR 9970\n#endif\n\n#ifndef ENOMEM\n#define ENOMEM 9971\n#endif\n\n#ifndef EPERM\n#define EPERM 9972\n#endif\n\n#ifndef EACCES\n#define EACCES 9973\n#endif\n\n#ifndef EROFS\n#define EROFS 9974\n#endif\n\n#ifndef EDEADLK\n#define EDEADLK 9975\n#endif\n\n#ifndef EAGAIN\n#define EAGAIN 9976\n#endif\n\n#ifndef ENFILE\n#define ENFILE 9977\n#endif\n\n#ifndef EMFILE\n#define EMFILE 9978\n#endif\n\n#ifndef EMLINK\n#define EMLINK 9979\n#endif\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/checked_delete.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Fernandes\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_CHECKED_DELETE_HPP\n#define BOOST_CHECKED_DELETE_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/checked_delete.hpp instead.\n\n#include <boost/core/checked_delete.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/assert.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_ASSERT_DWA2006430_HPP\n# define BOOST_CONCEPT_ASSERT_DWA2006430_HPP\n\n# include <boost/config.hpp>\n# include <boost/detail/workaround.hpp>\n\n// The old protocol used a constraints() member function in concept\n// checking classes.  If the compiler supports SFINAE, we can detect\n// that function and seamlessly support the old concept checking\n// classes.  In this release, backward compatibility with the old\n// concept checking classes is enabled by default, where available.\n// The old protocol is deprecated, though, and backward compatibility\n// will no longer be the default in the next release.\n\n# if !defined(BOOST_NO_OLD_CONCEPT_SUPPORT)                                         \\\n    && !defined(BOOST_NO_SFINAE)                                                    \\\n                                                                                    \\\n    && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4))\n\n// Note: gcc-2.96 through 3.3.x have some SFINAE, but no ability to\n// check for the presence of particularmember functions.\n\n#  define BOOST_OLD_CONCEPT_SUPPORT\n\n# endif\n\n# ifdef BOOST_MSVC\n#  include <boost/concept/detail/msvc.hpp>\n# elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n#  include <boost/concept/detail/borland.hpp>\n# else \n#  include <boost/concept/detail/general.hpp>\n# endif\n\n  // Usage, in class or function context:\n  //\n  //     BOOST_CONCEPT_ASSERT((UnaryFunctionConcept<F,bool,int>));\n  //\n# define BOOST_CONCEPT_ASSERT(ModelInParens) \\\n    BOOST_CONCEPT_ASSERT_FN(void(*)ModelInParens)\n\n#endif // BOOST_CONCEPT_ASSERT_DWA2006430_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/detail/backward_compatibility.hpp",
    "content": "// Copyright David Abrahams 2009. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP\n# define BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP\n\nnamespace boost\n{\n  namespace concepts {}\n\n# if defined(BOOST_HAS_CONCEPTS) && !defined(BOOST_CONCEPT_NO_BACKWARD_KEYWORD)\n  namespace concept = concepts;\n# endif \n} // namespace boost::concept\n\n#endif // BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/detail/borland.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_DETAIL_BORLAND_DWA2006429_HPP\n# define BOOST_CONCEPT_DETAIL_BORLAND_DWA2006429_HPP\n\n# include <boost/preprocessor/cat.hpp>\n# include <boost/concept/detail/backward_compatibility.hpp>\n\nnamespace boost { namespace concepts {\n\ntemplate <class ModelFnPtr>\nstruct require;\n\ntemplate <class Model>\nstruct require<void(*)(Model)>\n{\n    enum { instantiate = sizeof((((Model*)0)->~Model()), 3) };\n};\n\n#  define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )         \\\n  enum                                                  \\\n  {                                                     \\\n      BOOST_PP_CAT(boost_concept_check,__LINE__) =      \\\n      boost::concepts::require<ModelFnPtr>::instantiate  \\\n  }\n\n}} // namespace boost::concept\n\n#endif // BOOST_CONCEPT_DETAIL_BORLAND_DWA2006429_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/detail/concept_def.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP\n# define BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP\n# include <boost/preprocessor/seq/for_each_i.hpp>\n# include <boost/preprocessor/seq/enum.hpp>\n# include <boost/preprocessor/comma_if.hpp>\n# include <boost/preprocessor/cat.hpp>\n#endif // BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP\n\n// BOOST_concept(SomeName, (p1)(p2)...(pN))\n//\n// Expands to \"template <class p1, class p2, ...class pN> struct SomeName\"\n//\n// Also defines an equivalent SomeNameConcept for backward compatibility.\n// Maybe in the next release we can kill off the \"Concept\" suffix for good.\n# define BOOST_concept(name, params)                                            \\\n    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \\\n    struct name; /* forward declaration */                                      \\\n                                                                                \\\n    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \\\n    struct BOOST_PP_CAT(name,Concept)                                           \\\n      : name< BOOST_PP_SEQ_ENUM(params) >                                       \\\n    {                                                                           \\\n    };                                                                          \\\n                                                                                \\\n    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \\\n    struct name                                                                \n    \n// Helper for BOOST_concept, above.\n# define BOOST_CONCEPT_typename(r, ignored, index, t) \\\n    BOOST_PP_COMMA_IF(index) typename t\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/detail/concept_undef.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n# undef BOOST_concept_typename\n# undef BOOST_concept\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/detail/general.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP\n# define BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP\n\n# include <boost/config.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/concept/detail/backward_compatibility.hpp>\n\n# ifdef BOOST_OLD_CONCEPT_SUPPORT\n#  include <boost/concept/detail/has_constraints.hpp>\n#  include <boost/mpl/if.hpp>\n# endif\n\n// This implementation works on Comeau and GCC, all the way back to\n// 2.95\nnamespace boost { namespace concepts {\n\ntemplate <class ModelFn>\nstruct requirement_;\n\nnamespace detail\n{\n  template <void(*)()> struct instantiate {};\n}\n\ntemplate <class Model>\nstruct requirement\n{\n    static void failed() { ((Model*)0)->~Model(); }\n};\n\nstruct failed {};\n\ntemplate <class Model>\nstruct requirement<failed ************ Model::************>\n{\n    static void failed() { ((Model*)0)->~Model(); }\n};\n\n# ifdef BOOST_OLD_CONCEPT_SUPPORT\n\ntemplate <class Model>\nstruct constraint\n{\n    static void failed() { ((Model*)0)->constraints(); }\n};\n  \ntemplate <class Model>\nstruct requirement_<void(*)(Model)>\n  : mpl::if_<\n        concepts::not_satisfied<Model>\n      , constraint<Model>\n      , requirement<failed ************ Model::************>\n    >::type\n{};\n  \n# else\n\n// For GCC-2.x, these can't have exactly the same name\ntemplate <class Model>\nstruct requirement_<void(*)(Model)>\n    : requirement<failed ************ Model::************>\n{};\n  \n# endif\n\n#  define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )             \\\n    typedef ::boost::concepts::detail::instantiate<          \\\n    &::boost::concepts::requirement_<ModelFnPtr>::failed>    \\\n      BOOST_PP_CAT(boost_concept_check,__LINE__)             \\\n      BOOST_ATTRIBUTE_UNUSED\n\n}}\n\n#endif // BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/detail/has_constraints.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP\n# define BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP\n\n# include <boost/mpl/bool.hpp>\n# include <boost/detail/workaround.hpp>\n# include <boost/concept/detail/backward_compatibility.hpp>\n\nnamespace boost { namespace concepts {\n\nnamespace detail\n{ \n\n// Here we implement the metafunction that detects whether a\n// constraints metafunction exists\n  typedef char yes;\n  typedef char (&no)[2];\n\n  template <class Model, void (Model::*)()>\n  struct wrap_constraints {};\n    \n#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580) || defined(__CUDACC__)\n  // Work around the following bogus error in Sun Studio 11, by\n  // turning off the has_constraints function entirely:\n  //    Error: complex expression not allowed in dependent template\n  //    argument expression\n  inline no has_constraints_(...);\n#else\n  template <class Model>\n  inline yes has_constraints_(Model*, wrap_constraints<Model,&Model::constraints>* = 0);\n  inline no has_constraints_(...);\n#endif\n}\n\n// This would be called \"detail::has_constraints,\" but it has a strong\n// tendency to show up in error messages.\ntemplate <class Model>\nstruct not_satisfied\n{\n    BOOST_STATIC_CONSTANT(\n        bool\n      , value = sizeof( detail::has_constraints_((Model*)0) ) == sizeof(detail::yes) );\n    typedef mpl::bool_<value> type;\n};\n\n}} // namespace boost::concepts::detail\n\n#endif // BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/detail/msvc.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP\n# define BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP\n\n# include <boost/preprocessor/cat.hpp>\n# include <boost/concept/detail/backward_compatibility.hpp>\n# include <boost/config.hpp>\n\n# ifdef BOOST_OLD_CONCEPT_SUPPORT\n#  include <boost/concept/detail/has_constraints.hpp>\n#  include <boost/mpl/if.hpp>\n# endif\n\n# ifdef BOOST_MSVC\n#  pragma warning(push)\n#  pragma warning(disable:4100)\n# endif\n\nnamespace boost { namespace concepts {\n\n\ntemplate <class Model>\nstruct check\n{\n    virtual void failed(Model* x)\n    {\n        x->~Model();\n    }\n};\n\n# ifndef BOOST_NO_PARTIAL_SPECIALIZATION\nstruct failed {};\ntemplate <class Model>\nstruct check<failed ************ Model::************>\n{\n    virtual void failed(Model* x)\n    {\n        x->~Model();\n    }\n};\n# endif\n\n# ifdef BOOST_OLD_CONCEPT_SUPPORT\n  \nnamespace detail\n{\n  // No need for a virtual function here, since evaluating\n  // not_satisfied below will have already instantiated the\n  // constraints() member.\n  struct constraint {};\n}\n\ntemplate <class Model>\nstruct require\n  : mpl::if_c<\n        not_satisfied<Model>::value\n      , detail::constraint\n# ifndef BOOST_NO_PARTIAL_SPECIALIZATION\n      , check<Model>\n# else\n      , check<failed ************ Model::************>\n# endif \n        >::type\n{};\n      \n# else\n  \ntemplate <class Model>\nstruct require\n# ifndef BOOST_NO_PARTIAL_SPECIALIZATION\n    : check<Model>\n# else\n    : check<failed ************ Model::************>\n# endif \n{};\n  \n# endif\n    \n# if BOOST_WORKAROUND(BOOST_MSVC, == 1310)\n\n//\n// The iterator library sees some really strange errors unless we\n// do things this way.\n//\ntemplate <class Model>\nstruct require<void(*)(Model)>\n{\n    virtual void failed(Model*)\n    {\n        require<Model>();\n    }\n};\n\n# define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )      \\\nenum                                                \\\n{                                                   \\\n    BOOST_PP_CAT(boost_concept_check,__LINE__) =    \\\n    sizeof(::boost::concepts::require<ModelFnPtr>)    \\\n}\n  \n# else // Not vc-7.1\n  \ntemplate <class Model>\nrequire<Model>\nrequire_(void(*)(Model));\n  \n# define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )          \\\nenum                                                    \\\n{                                                       \\\n    BOOST_PP_CAT(boost_concept_check,__LINE__) =        \\\n      sizeof(::boost::concepts::require_((ModelFnPtr)0)) \\\n}\n  \n# endif\n}}\n\n# ifdef BOOST_MSVC\n#  pragma warning(pop)\n# endif\n\n#endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/requires.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_REQUIRES_DWA2006430_HPP\n# define BOOST_CONCEPT_REQUIRES_DWA2006430_HPP\n\n# include <boost/config.hpp>\n# include <boost/concept/assert.hpp>\n# include <boost/preprocessor/seq/for_each.hpp>\n\nnamespace boost { \n\n// unaryfunptr_arg_type from parameter/aux_/parenthesized_type.hpp\n\nnamespace ccheck_aux {\n\n// A metafunction that transforms void(*)(T) -> T\ntemplate <class UnaryFunctionPointer>\nstruct unaryfunptr_arg_type;\n\ntemplate <class Arg>\nstruct unaryfunptr_arg_type<void(*)(Arg)>\n{\n    typedef Arg type;\n};\n\ntemplate <>\nstruct unaryfunptr_arg_type<void(*)(void)>\n{\n    typedef void type;\n};\n\n} // namespace ccheck_aux\n\n// Template for use in handwritten assertions\ntemplate <class Model, class More>\nstruct requires_ : More\n{\n    BOOST_CONCEPT_ASSERT((Model));\n};\n\n// Template for use by macros, where models must be wrapped in parens.\n// This isn't in namespace detail to keep extra cruft out of resulting\n// error messages.\ntemplate <class ModelFn>\nstruct _requires_\n{\n    enum { value = 0 };\n    BOOST_CONCEPT_ASSERT_FN(ModelFn);\n};\n\ntemplate <int check, class Result>\nstruct Requires_ : ::boost::ccheck_aux::unaryfunptr_arg_type<Result>\n{\n};\n\n# if BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(1010))\n#  define BOOST_CONCEPT_REQUIRES_(r,data,t) | (::boost::_requires_<void(*)t>::value)\n# else \n#  define BOOST_CONCEPT_REQUIRES_(r,data,t) + (::boost::_requires_<void(*)t>::value)\n# endif\n\n#if defined(NDEBUG)\n\n# define BOOST_CONCEPT_REQUIRES(models, result)                                    \\\n    typename ::boost::ccheck_aux::unaryfunptr_arg_type<void(*)result>::type\n\n#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n\n// Same thing as below without the initial typename\n# define BOOST_CONCEPT_REQUIRES(models, result)                                \\\n    ::boost::Requires_<                                                        \\\n      (0 BOOST_PP_SEQ_FOR_EACH(BOOST_CONCEPT_REQUIRES_, ~, models)),           \\\n      ::boost::ccheck_aux::unaryfunptr_arg_type<void(*)result>          \\\n                     >::type\n\n#else\n\n// This just ICEs on MSVC6 :(\n# define BOOST_CONCEPT_REQUIRES(models, result)                                        \\\n    typename ::boost::Requires_<                                                       \\\n      (0 BOOST_PP_SEQ_FOR_EACH(BOOST_CONCEPT_REQUIRES_, ~, models)),                   \\\n      void(*)result                                                                 \\\n    >::type\n\n#endif \n\n// C++0x proposed syntax changed.  This supports an older usage\n#define BOOST_CONCEPT_WHERE(models,result) BOOST_CONCEPT_REQUIRES(models,result)\n\n} // namespace boost::concept_check\n\n#endif // BOOST_CONCEPT_REQUIRES_DWA2006430_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept/usage.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_USAGE_DWA2006919_HPP\n# define BOOST_CONCEPT_USAGE_DWA2006919_HPP\n\n# include <boost/concept/assert.hpp>\n# include <boost/detail/workaround.hpp>\n# include <boost/concept/detail/backward_compatibility.hpp>\n\nnamespace boost { namespace concepts { \n\ntemplate <class Model>\nstruct usage_requirements\n{\n    ~usage_requirements() { ((Model*)0)->~Model(); }\n};\n\n#  if BOOST_WORKAROUND(__GNUC__, <= 3)\n\n#   define BOOST_CONCEPT_USAGE(model)                                    \\\n      model(); /* at least 2.96 and 3.4.3 both need this :( */           \\\n      BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements<model>)); \\\n      ~model()\n\n#  else\n\n#   define BOOST_CONCEPT_USAGE(model)                                    \\\n      BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements<model>)); \\\n      ~model()\n\n#  endif\n\n}} // namespace boost::concepts\n\n#endif // BOOST_CONCEPT_USAGE_DWA2006919_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/concept_check.hpp",
    "content": "//\n// (C) Copyright Jeremy Siek 2000.\n// Copyright 2002 The Trustees of Indiana University.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// Revision History:\n//   05 May   2001: Workarounds for HP aCC from Thomas Matelich. (Jeremy Siek)\n//   02 April 2001: Removed limits header altogether. (Jeremy Siek)\n//   01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)\n//\n\n// See http://www.boost.org/libs/concept_check for documentation.\n\n#ifndef BOOST_CONCEPT_CHECKS_HPP\n# define BOOST_CONCEPT_CHECKS_HPP\n\n# include <boost/concept/assert.hpp>\n\n# include <iterator>\n# include <boost/type_traits/conversion_traits.hpp>\n# include <utility>\n# include <boost/type_traits/is_same.hpp>\n# include <boost/type_traits/is_void.hpp>\n# include <boost/mpl/assert.hpp>\n# include <boost/mpl/bool.hpp>\n# include <boost/detail/workaround.hpp>\n\n# include <boost/concept/usage.hpp>\n# include <boost/concept/detail/concept_def.hpp>\n\n#if (defined _MSC_VER)\n# pragma warning( push )\n# pragma warning( disable : 4510 ) // default constructor could not be generated\n# pragma warning( disable : 4610 ) // object 'class' can never be instantiated - user-defined constructor required\n#endif\n\nnamespace boost\n{\n\n  //\n  // Backward compatibility\n  //\n\n  template <class Model>\n  inline void function_requires(Model* = 0)\n  {\n      BOOST_CONCEPT_ASSERT((Model));\n  }\n  template <class T> inline void ignore_unused_variable_warning(T const&) {}\n\n#  define BOOST_CLASS_REQUIRE(type_var, ns, concept)    \\\n    BOOST_CONCEPT_ASSERT((ns::concept<type_var>))\n\n#  define BOOST_CLASS_REQUIRE2(type_var1, type_var2, ns, concept)   \\\n    BOOST_CONCEPT_ASSERT((ns::concept<type_var1,type_var2>))\n\n#  define BOOST_CLASS_REQUIRE3(tv1, tv2, tv3, ns, concept)  \\\n    BOOST_CONCEPT_ASSERT((ns::concept<tv1,tv2,tv3>))\n\n#  define BOOST_CLASS_REQUIRE4(tv1, tv2, tv3, tv4, ns, concept) \\\n    BOOST_CONCEPT_ASSERT((ns::concept<tv1,tv2,tv3,tv4>))\n\n\n  //\n  // Begin concept definitions\n  //\n  BOOST_concept(Integer, (T))\n  {\n      BOOST_CONCEPT_USAGE(Integer)\n        {\n            x.error_type_must_be_an_integer_type();\n        }\n   private:\n      T x;\n  };\n\n  template <> struct Integer<char> {};\n  template <> struct Integer<signed char> {};\n  template <> struct Integer<unsigned char> {};\n  template <> struct Integer<short> {};\n  template <> struct Integer<unsigned short> {};\n  template <> struct Integer<int> {};\n  template <> struct Integer<unsigned int> {};\n  template <> struct Integer<long> {};\n  template <> struct Integer<unsigned long> {};\n# if defined(BOOST_HAS_LONG_LONG)\n  template <> struct Integer< ::boost::long_long_type> {};\n  template <> struct Integer< ::boost::ulong_long_type> {};\n# elif defined(BOOST_HAS_MS_INT64)\n  template <> struct Integer<__int64> {};\n  template <> struct Integer<unsigned __int64> {};\n# endif\n\n  BOOST_concept(SignedInteger,(T)) {\n    BOOST_CONCEPT_USAGE(SignedInteger) {\n      x.error_type_must_be_a_signed_integer_type();\n    }\n   private:\n    T x;\n  };\n  template <> struct SignedInteger<signed char> { };\n  template <> struct SignedInteger<short> {};\n  template <> struct SignedInteger<int> {};\n  template <> struct SignedInteger<long> {};\n# if defined(BOOST_HAS_LONG_LONG)\n  template <> struct SignedInteger< ::boost::long_long_type> {};\n# elif defined(BOOST_HAS_MS_INT64)\n  template <> struct SignedInteger<__int64> {};\n# endif\n\n  BOOST_concept(UnsignedInteger,(T)) {\n    BOOST_CONCEPT_USAGE(UnsignedInteger) {\n      x.error_type_must_be_an_unsigned_integer_type();\n    }\n   private:\n    T x;\n  };\n\n  template <> struct UnsignedInteger<unsigned char> {};\n  template <> struct UnsignedInteger<unsigned short> {};\n  template <> struct UnsignedInteger<unsigned int> {};\n  template <> struct UnsignedInteger<unsigned long> {};\n# if defined(BOOST_HAS_LONG_LONG)\n  template <> struct UnsignedInteger< ::boost::ulong_long_type> {};\n# elif defined(BOOST_HAS_MS_INT64)\n  template <> struct UnsignedInteger<unsigned __int64> {};\n# endif\n\n  //===========================================================================\n  // Basic Concepts\n\n  BOOST_concept(DefaultConstructible,(TT))\n  {\n    BOOST_CONCEPT_USAGE(DefaultConstructible) {\n      TT a;               // require default constructor\n      ignore_unused_variable_warning(a);\n    }\n  };\n\n  BOOST_concept(Assignable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(Assignable) {\n#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL\n      a = b;             // require assignment operator\n#endif\n      const_constraints(b);\n    }\n   private:\n    void const_constraints(const TT& x) {\n#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL\n      a = x;              // const required for argument to assignment\n#else\n      ignore_unused_variable_warning(x);\n#endif\n    }\n   private:\n    TT a;\n    TT b;\n  };\n\n\n  BOOST_concept(CopyConstructible,(TT))\n  {\n    BOOST_CONCEPT_USAGE(CopyConstructible) {\n      TT a(b);            // require copy constructor\n      TT* ptr = &a;       // require address of operator\n      const_constraints(a);\n      ignore_unused_variable_warning(ptr);\n    }\n   private:\n    void const_constraints(const TT& a) {\n      TT c(a);            // require const copy constructor\n      const TT* ptr = &a; // require const address of operator\n      ignore_unused_variable_warning(c);\n      ignore_unused_variable_warning(ptr);\n    }\n    TT b;\n  };\n\n  // The SGI STL version of Assignable requires copy constructor and operator=\n  BOOST_concept(SGIAssignable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(SGIAssignable) {\n      TT c(a);\n#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL\n      a = b;              // require assignment operator\n#endif\n      const_constraints(b);\n      ignore_unused_variable_warning(c);\n    }\n   private:\n    void const_constraints(const TT& x) {\n      TT c(x);\n#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL\n      a = x;              // const required for argument to assignment\n#endif\n      ignore_unused_variable_warning(c);\n    }\n    TT a;\n    TT b;\n  };\n\n  BOOST_concept(Convertible,(X)(Y))\n  {\n    BOOST_CONCEPT_USAGE(Convertible) {\n      Y y = x;\n      ignore_unused_variable_warning(y);\n    }\n   private:\n    X x;\n  };\n\n  // The C++ standard requirements for many concepts talk about return\n  // types that must be \"convertible to bool\".  The problem with this\n  // requirement is that it leaves the door open for evil proxies that\n  // define things like operator|| with strange return types.  Two\n  // possible solutions are:\n  // 1) require the return type to be exactly bool\n  // 2) stay with convertible to bool, and also\n  //    specify stuff about all the logical operators.\n  // For now we just test for convertible to bool.\n  template <class TT>\n  void require_boolean_expr(const TT& t) {\n    bool x = t;\n    ignore_unused_variable_warning(x);\n  }\n\n  BOOST_concept(EqualityComparable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(EqualityComparable) {\n      require_boolean_expr(a == b);\n      require_boolean_expr(a != b);\n    }\n   private:\n    TT a, b;\n  };\n\n  BOOST_concept(LessThanComparable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(LessThanComparable) {\n      require_boolean_expr(a < b);\n    }\n   private:\n    TT a, b;\n  };\n\n  // This is equivalent to SGI STL's LessThanComparable.\n  BOOST_concept(Comparable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(Comparable) {\n      require_boolean_expr(a < b);\n      require_boolean_expr(a > b);\n      require_boolean_expr(a <= b);\n      require_boolean_expr(a >= b);\n    }\n   private:\n    TT a, b;\n  };\n\n#define BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(OP,NAME)    \\\n  BOOST_concept(NAME, (First)(Second))                          \\\n  {                                                             \\\n      BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); }                         \\\n     private:                                                   \\\n        bool constraints_() { return a OP b; }                  \\\n        First a;                                                \\\n        Second b;                                               \\\n  }\n\n#define BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(OP,NAME)    \\\n  BOOST_concept(NAME, (Ret)(First)(Second))                 \\\n  {                                                         \\\n      BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); }                     \\\n  private:                                                  \\\n      Ret constraints_() { return a OP b; }                 \\\n      First a;                                              \\\n      Second b;                                             \\\n  }\n\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, EqualOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, NotEqualOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, LessThanOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, LessEqualOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, GreaterThanOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, GreaterEqualOp);\n\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, PlusOp);\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, TimesOp);\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, DivideOp);\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, SubtractOp);\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, ModOp);\n\n  //===========================================================================\n  // Function Object Concepts\n\n  BOOST_concept(Generator,(Func)(Return))\n  {\n      BOOST_CONCEPT_USAGE(Generator) { test(is_void<Return>()); }\n\n   private:\n      void test(boost::mpl::false_)\n      {\n          // Do we really want a reference here?\n          const Return& r = f();\n          ignore_unused_variable_warning(r);\n      }\n\n      void test(boost::mpl::true_)\n      {\n          f();\n      }\n\n      Func f;\n  };\n\n  BOOST_concept(UnaryFunction,(Func)(Return)(Arg))\n  {\n      BOOST_CONCEPT_USAGE(UnaryFunction) { test(is_void<Return>()); }\n\n   private:\n      void test(boost::mpl::false_)\n      {\n          f(arg);               // \"priming the pump\" this way keeps msvc6 happy (ICE)\n          Return r = f(arg);\n          ignore_unused_variable_warning(r);\n      }\n\n      void test(boost::mpl::true_)\n      {\n          f(arg);\n      }\n\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy construktor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::UnaryFunction<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      UnaryFunction();\n#endif\n\n      Func f;\n      Arg arg;\n  };\n\n  BOOST_concept(BinaryFunction,(Func)(Return)(First)(Second))\n  {\n      BOOST_CONCEPT_USAGE(BinaryFunction) { test(is_void<Return>()); }\n   private:\n      void test(boost::mpl::false_)\n      {\n          f(first,second);\n          Return r = f(first, second); // require operator()\n          (void)r;\n      }\n\n      void test(boost::mpl::true_)\n      {\n          f(first,second);\n      }\n\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy constructor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::BinaryFunction<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      BinaryFunction();\n#endif\n\n      Func f;\n      First first;\n      Second second;\n  };\n\n  BOOST_concept(UnaryPredicate,(Func)(Arg))\n  {\n    BOOST_CONCEPT_USAGE(UnaryPredicate) {\n      require_boolean_expr(f(arg)); // require operator() returning bool\n    }\n   private:\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy constructor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::UnaryPredicate<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      UnaryPredicate();\n#endif\n\n    Func f;\n    Arg arg;\n  };\n\n  BOOST_concept(BinaryPredicate,(Func)(First)(Second))\n  {\n    BOOST_CONCEPT_USAGE(BinaryPredicate) {\n      require_boolean_expr(f(a, b)); // require operator() returning bool\n    }\n   private:\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy constructor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::BinaryPredicate<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      BinaryPredicate();\n#endif\n    Func f;\n    First a;\n    Second b;\n  };\n\n  // use this when functor is used inside a container class like std::set\n  BOOST_concept(Const_BinaryPredicate,(Func)(First)(Second))\n    : BinaryPredicate<Func, First, Second>\n  {\n    BOOST_CONCEPT_USAGE(Const_BinaryPredicate) {\n      const_constraints(f);\n    }\n   private:\n    void const_constraints(const Func& fun) {\n      // operator() must be a const member function\n      require_boolean_expr(fun(a, b));\n    }\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy constructor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::Const_BinaryPredicate<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      Const_BinaryPredicate();\n#endif\n\n    Func f;\n    First a;\n    Second b;\n  };\n\n  BOOST_concept(AdaptableGenerator,(Func)(Return))\n    : Generator<Func, typename Func::result_type>\n  {\n      typedef typename Func::result_type result_type;\n\n      BOOST_CONCEPT_USAGE(AdaptableGenerator)\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));\n      }\n  };\n\n  BOOST_concept(AdaptableUnaryFunction,(Func)(Return)(Arg))\n    : UnaryFunction<Func, typename Func::result_type, typename Func::argument_type>\n  {\n      typedef typename Func::argument_type argument_type;\n      typedef typename Func::result_type result_type;\n\n      ~AdaptableUnaryFunction()\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));\n          BOOST_CONCEPT_ASSERT((Convertible<Arg, argument_type>));\n      }\n  };\n\n  BOOST_concept(AdaptableBinaryFunction,(Func)(Return)(First)(Second))\n    : BinaryFunction<\n          Func\n        , typename Func::result_type\n        , typename Func::first_argument_type\n        , typename Func::second_argument_type\n      >\n  {\n      typedef typename Func::first_argument_type first_argument_type;\n      typedef typename Func::second_argument_type second_argument_type;\n      typedef typename Func::result_type result_type;\n\n      ~AdaptableBinaryFunction()\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));\n          BOOST_CONCEPT_ASSERT((Convertible<First, first_argument_type>));\n          BOOST_CONCEPT_ASSERT((Convertible<Second, second_argument_type>));\n      }\n  };\n\n  BOOST_concept(AdaptablePredicate,(Func)(Arg))\n    : UnaryPredicate<Func, Arg>\n    , AdaptableUnaryFunction<Func, bool, Arg>\n  {\n  };\n\n  BOOST_concept(AdaptableBinaryPredicate,(Func)(First)(Second))\n    : BinaryPredicate<Func, First, Second>\n    , AdaptableBinaryFunction<Func, bool, First, Second>\n  {\n  };\n\n  //===========================================================================\n  // Iterator Concepts\n\n  BOOST_concept(InputIterator,(TT))\n    : Assignable<TT>\n    , EqualityComparable<TT>\n  {\n      typedef typename std::iterator_traits<TT>::value_type value_type;\n      typedef typename std::iterator_traits<TT>::difference_type difference_type;\n      typedef typename std::iterator_traits<TT>::reference reference;\n      typedef typename std::iterator_traits<TT>::pointer pointer;\n      typedef typename std::iterator_traits<TT>::iterator_category iterator_category;\n\n      BOOST_CONCEPT_USAGE(InputIterator)\n      {\n        BOOST_CONCEPT_ASSERT((SignedInteger<difference_type>));\n        BOOST_CONCEPT_ASSERT((Convertible<iterator_category, std::input_iterator_tag>));\n\n        TT j(i);\n        (void)*i;           // require dereference operator\n        ++j;                // require preincrement operator\n        i++;                // require postincrement operator\n      }\n   private:\n    TT i;\n  };\n\n  BOOST_concept(OutputIterator,(TT)(ValueT))\n    : Assignable<TT>\n  {\n    BOOST_CONCEPT_USAGE(OutputIterator) {\n\n      ++i;                // require preincrement operator\n      i++;                // require postincrement operator\n      *i++ = t;           // require postincrement and assignment\n    }\n   private:\n    TT i, j;\n    ValueT t;\n  };\n\n  BOOST_concept(ForwardIterator,(TT))\n    : InputIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(ForwardIterator)\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<\n              BOOST_DEDUCED_TYPENAME ForwardIterator::iterator_category\n            , std::forward_iterator_tag\n          >));\n\n          typename InputIterator<TT>::reference r = *i;\n          ignore_unused_variable_warning(r);\n      }\n\n   private:\n      TT i;\n  };\n\n  BOOST_concept(Mutable_ForwardIterator,(TT))\n    : ForwardIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(Mutable_ForwardIterator) {\n        *i++ = *j;         // require postincrement and assignment\n      }\n   private:\n      TT i, j;\n  };\n\n  BOOST_concept(BidirectionalIterator,(TT))\n    : ForwardIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(BidirectionalIterator)\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<\n              BOOST_DEDUCED_TYPENAME BidirectionalIterator::iterator_category\n            , std::bidirectional_iterator_tag\n          >));\n\n          --i;                // require predecrement operator\n          i--;                // require postdecrement operator\n      }\n   private:\n      TT i;\n  };\n\n  BOOST_concept(Mutable_BidirectionalIterator,(TT))\n    : BidirectionalIterator<TT>\n    , Mutable_ForwardIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(Mutable_BidirectionalIterator)\n      {\n          *i-- = *j;                  // require postdecrement and assignment\n      }\n   private:\n      TT i, j;\n  };\n\n  BOOST_concept(RandomAccessIterator,(TT))\n    : BidirectionalIterator<TT>\n    , Comparable<TT>\n  {\n      BOOST_CONCEPT_USAGE(RandomAccessIterator)\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<\n              BOOST_DEDUCED_TYPENAME BidirectionalIterator<TT>::iterator_category\n            , std::random_access_iterator_tag\n          >));\n\n          i += n;             // require assignment addition operator\n          i = i + n; i = n + i; // require addition with difference type\n          i -= n;             // require assignment subtraction operator\n          i = i - n;                  // require subtraction with difference type\n          n = i - j;                  // require difference operator\n          (void)i[n];                 // require element access operator\n      }\n\n   private:\n    TT a, b;\n    TT i, j;\n      typename std::iterator_traits<TT>::difference_type n;\n  };\n\n  BOOST_concept(Mutable_RandomAccessIterator,(TT))\n    : RandomAccessIterator<TT>\n    , Mutable_BidirectionalIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(Mutable_RandomAccessIterator)\n      {\n          i[n] = *i;                  // require element access and assignment\n      }\n   private:\n    TT i;\n    typename std::iterator_traits<TT>::difference_type n;\n  };\n\n  //===========================================================================\n  // Container s\n\n  BOOST_concept(Container,(C))\n    : Assignable<C>\n  {\n    typedef typename C::value_type value_type;\n    typedef typename C::difference_type difference_type;\n    typedef typename C::size_type size_type;\n    typedef typename C::const_reference const_reference;\n    typedef typename C::const_pointer const_pointer;\n    typedef typename C::const_iterator const_iterator;\n\n      BOOST_CONCEPT_USAGE(Container)\n      {\n          BOOST_CONCEPT_ASSERT((InputIterator<const_iterator>));\n          const_constraints(c);\n      }\n\n   private:\n      void const_constraints(const C& cc) {\n          i = cc.begin();\n          i = cc.end();\n          n = cc.size();\n          n = cc.max_size();\n          b = cc.empty();\n      }\n      C c;\n      bool b;\n      const_iterator i;\n      size_type n;\n  };\n\n  BOOST_concept(Mutable_Container,(C))\n    : Container<C>\n  {\n      typedef typename C::reference reference;\n      typedef typename C::iterator iterator;\n      typedef typename C::pointer pointer;\n\n      BOOST_CONCEPT_USAGE(Mutable_Container)\n      {\n          BOOST_CONCEPT_ASSERT((\n               Assignable<typename Mutable_Container::value_type>));\n\n          BOOST_CONCEPT_ASSERT((InputIterator<iterator>));\n\n          i = c.begin();\n          i = c.end();\n          c.swap(c2);\n      }\n\n   private:\n      iterator i;\n      C c, c2;\n  };\n\n  BOOST_concept(ForwardContainer,(C))\n    : Container<C>\n  {\n      BOOST_CONCEPT_USAGE(ForwardContainer)\n      {\n          BOOST_CONCEPT_ASSERT((\n               ForwardIterator<\n                    typename ForwardContainer::const_iterator\n               >));\n      }\n  };\n\n  BOOST_concept(Mutable_ForwardContainer,(C))\n    : ForwardContainer<C>\n    , Mutable_Container<C>\n  {\n      BOOST_CONCEPT_USAGE(Mutable_ForwardContainer)\n      {\n          BOOST_CONCEPT_ASSERT((\n               Mutable_ForwardIterator<\n                   typename Mutable_ForwardContainer::iterator\n               >));\n      }\n  };\n\n  BOOST_concept(ReversibleContainer,(C))\n    : ForwardContainer<C>\n  {\n      typedef typename\n        C::const_reverse_iterator\n      const_reverse_iterator;\n\n      BOOST_CONCEPT_USAGE(ReversibleContainer)\n      {\n          BOOST_CONCEPT_ASSERT((\n              BidirectionalIterator<\n                  typename ReversibleContainer::const_iterator>));\n\n          BOOST_CONCEPT_ASSERT((BidirectionalIterator<const_reverse_iterator>));\n\n          const_constraints(c);\n      }\n   private:\n      void const_constraints(const C& cc)\n      {\n          const_reverse_iterator i = cc.rbegin();\n          i = cc.rend();\n      }\n      C c;\n  };\n\n  BOOST_concept(Mutable_ReversibleContainer,(C))\n    : Mutable_ForwardContainer<C>\n    , ReversibleContainer<C>\n  {\n      typedef typename C::reverse_iterator reverse_iterator;\n\n      BOOST_CONCEPT_USAGE(Mutable_ReversibleContainer)\n      {\n          typedef typename Mutable_ForwardContainer<C>::iterator iterator;\n          BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<iterator>));\n          BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<reverse_iterator>));\n\n          reverse_iterator i = c.rbegin();\n          i = c.rend();\n      }\n   private:\n      C c;\n  };\n\n  BOOST_concept(RandomAccessContainer,(C))\n    : ReversibleContainer<C>\n  {\n      typedef typename C::size_type size_type;\n      typedef typename C::const_reference const_reference;\n\n      BOOST_CONCEPT_USAGE(RandomAccessContainer)\n      {\n          BOOST_CONCEPT_ASSERT((\n              RandomAccessIterator<\n                  typename RandomAccessContainer::const_iterator\n              >));\n\n          const_constraints(c);\n      }\n   private:\n      void const_constraints(const C& cc)\n      {\n          const_reference r = cc[n];\n          ignore_unused_variable_warning(r);\n      }\n\n      C c;\n      size_type n;\n  };\n\n  BOOST_concept(Mutable_RandomAccessContainer,(C))\n    : Mutable_ReversibleContainer<C>\n    , RandomAccessContainer<C>\n  {\n   private:\n      typedef Mutable_RandomAccessContainer self;\n   public:\n      BOOST_CONCEPT_USAGE(Mutable_RandomAccessContainer)\n      {\n          BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::iterator>));\n          BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::reverse_iterator>));\n\n          typename self::reference r = c[i];\n          ignore_unused_variable_warning(r);\n      }\n\n   private:\n      typename Mutable_ReversibleContainer<C>::size_type i;\n      C c;\n  };\n\n  // A Sequence is inherently mutable\n  BOOST_concept(Sequence,(S))\n    : Mutable_ForwardContainer<S>\n      // Matt Austern's book puts DefaultConstructible here, the C++\n      // standard places it in Container --JGS\n      // ... so why aren't we following the standard?  --DWA\n    , DefaultConstructible<S>\n  {\n      BOOST_CONCEPT_USAGE(Sequence)\n      {\n          S\n              c(n, t),\n              c2(first, last);\n\n          c.insert(p, t);\n          c.insert(p, n, t);\n          c.insert(p, first, last);\n\n          c.erase(p);\n          c.erase(p, q);\n\n          typename Sequence::reference r = c.front();\n\n          ignore_unused_variable_warning(c);\n          ignore_unused_variable_warning(c2);\n          ignore_unused_variable_warning(r);\n          const_constraints(c);\n      }\n   private:\n      void const_constraints(const S& c) {\n          typename Sequence::const_reference r = c.front();\n          ignore_unused_variable_warning(r);\n      }\n\n      typename S::value_type t;\n      typename S::size_type n;\n      typename S::value_type* first, *last;\n      typename S::iterator p, q;\n  };\n\n  BOOST_concept(FrontInsertionSequence,(S))\n    : Sequence<S>\n  {\n      BOOST_CONCEPT_USAGE(FrontInsertionSequence)\n      {\n          c.push_front(t);\n          c.pop_front();\n      }\n   private:\n      S c;\n      typename S::value_type t;\n  };\n\n  BOOST_concept(BackInsertionSequence,(S))\n    : Sequence<S>\n  {\n      BOOST_CONCEPT_USAGE(BackInsertionSequence)\n      {\n          c.push_back(t);\n          c.pop_back();\n          typename BackInsertionSequence::reference r = c.back();\n          ignore_unused_variable_warning(r);\n          const_constraints(c);\n      }\n   private:\n      void const_constraints(const S& cc) {\n          typename BackInsertionSequence::const_reference\n              r = cc.back();\n          ignore_unused_variable_warning(r);\n      }\n      S c;\n      typename S::value_type t;\n  };\n\n  BOOST_concept(AssociativeContainer,(C))\n    : ForwardContainer<C>\n    , DefaultConstructible<C>\n  {\n      typedef typename C::key_type key_type;\n      typedef typename C::key_compare key_compare;\n      typedef typename C::value_compare value_compare;\n      typedef typename C::iterator iterator;\n\n      BOOST_CONCEPT_USAGE(AssociativeContainer)\n      {\n          i = c.find(k);\n          r = c.equal_range(k);\n          c.erase(k);\n          c.erase(i);\n          c.erase(r.first, r.second);\n          const_constraints(c);\n          BOOST_CONCEPT_ASSERT((BinaryPredicate<key_compare,key_type,key_type>));\n\n          typedef typename AssociativeContainer::value_type value_type_;\n          BOOST_CONCEPT_ASSERT((BinaryPredicate<value_compare,value_type_,value_type_>));\n      }\n\n      // Redundant with the base concept, but it helps below.\n      typedef typename C::const_iterator const_iterator;\n   private:\n      void const_constraints(const C& cc)\n      {\n          ci = cc.find(k);\n          n = cc.count(k);\n          cr = cc.equal_range(k);\n      }\n\n      C c;\n      iterator i;\n      std::pair<iterator,iterator> r;\n      const_iterator ci;\n      std::pair<const_iterator,const_iterator> cr;\n      typename C::key_type k;\n      typename C::size_type n;\n  };\n\n  BOOST_concept(UniqueAssociativeContainer,(C))\n    : AssociativeContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(UniqueAssociativeContainer)\n      {\n          C c(first, last);\n\n          pos_flag = c.insert(t);\n          c.insert(first, last);\n\n          ignore_unused_variable_warning(c);\n      }\n   private:\n      std::pair<typename C::iterator, bool> pos_flag;\n      typename C::value_type t;\n      typename C::value_type* first, *last;\n  };\n\n  BOOST_concept(MultipleAssociativeContainer,(C))\n    : AssociativeContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(MultipleAssociativeContainer)\n      {\n          C c(first, last);\n\n          pos = c.insert(t);\n          c.insert(first, last);\n\n          ignore_unused_variable_warning(c);\n          ignore_unused_variable_warning(pos);\n      }\n   private:\n      typename C::iterator pos;\n      typename C::value_type t;\n      typename C::value_type* first, *last;\n  };\n\n  BOOST_concept(SimpleAssociativeContainer,(C))\n    : AssociativeContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(SimpleAssociativeContainer)\n      {\n          typedef typename C::key_type key_type;\n          typedef typename C::value_type value_type;\n          BOOST_MPL_ASSERT((boost::is_same<key_type,value_type>));\n      }\n  };\n\n  BOOST_concept(PairAssociativeContainer,(C))\n    : AssociativeContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(PairAssociativeContainer)\n      {\n          typedef typename C::key_type key_type;\n          typedef typename C::value_type value_type;\n          typedef typename C::mapped_type mapped_type;\n          typedef std::pair<const key_type, mapped_type> required_value_type;\n          BOOST_MPL_ASSERT((boost::is_same<value_type,required_value_type>));\n      }\n  };\n\n  BOOST_concept(SortedAssociativeContainer,(C))\n    : AssociativeContainer<C>\n    , ReversibleContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(SortedAssociativeContainer)\n      {\n          C\n              c(kc),\n              c2(first, last),\n              c3(first, last, kc);\n\n          p = c.upper_bound(k);\n          p = c.lower_bound(k);\n          r = c.equal_range(k);\n\n          c.insert(p, t);\n\n          ignore_unused_variable_warning(c);\n          ignore_unused_variable_warning(c2);\n          ignore_unused_variable_warning(c3);\n          const_constraints(c);\n      }\n\n      void const_constraints(const C& c)\n      {\n          kc = c.key_comp();\n          vc = c.value_comp();\n\n          cp = c.upper_bound(k);\n          cp = c.lower_bound(k);\n          cr = c.equal_range(k);\n      }\n\n   private:\n      typename C::key_compare kc;\n      typename C::value_compare vc;\n      typename C::value_type t;\n      typename C::key_type k;\n      typedef typename C::iterator iterator;\n      typedef typename C::const_iterator const_iterator;\n\n      typedef SortedAssociativeContainer self;\n      iterator p;\n      const_iterator cp;\n      std::pair<typename self::iterator,typename self::iterator> r;\n      std::pair<typename self::const_iterator,typename self::const_iterator> cr;\n      typename C::value_type* first, *last;\n  };\n\n  // HashedAssociativeContainer\n\n  BOOST_concept(Collection,(C))\n  {\n      BOOST_CONCEPT_USAGE(Collection)\n      {\n        boost::function_requires<boost::InputIteratorConcept<iterator> >();\n        boost::function_requires<boost::InputIteratorConcept<const_iterator> >();\n        boost::function_requires<boost::CopyConstructibleConcept<value_type> >();\n        const_constraints(c);\n        i = c.begin();\n        i = c.end();\n        c.swap(c);\n      }\n\n      void const_constraints(const C& cc) {\n        ci = cc.begin();\n        ci = cc.end();\n        n = cc.size();\n        b = cc.empty();\n      }\n\n    private:\n      typedef typename C::value_type value_type;\n      typedef typename C::iterator iterator;\n      typedef typename C::const_iterator const_iterator;\n      typedef typename C::reference reference;\n      typedef typename C::const_reference const_reference;\n      // typedef typename C::pointer pointer;\n      typedef typename C::difference_type difference_type;\n      typedef typename C::size_type size_type;\n\n      C c;\n      bool b;\n      iterator i;\n      const_iterator ci;\n      size_type n;\n  };\n} // namespace boost\n\n#if (defined _MSC_VER)\n# pragma warning( pop )\n#endif\n\n# include <boost/concept/detail/concept_undef.hpp>\n\n#endif // BOOST_CONCEPT_CHECKS_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/abi/borland_prefix.hpp",
    "content": "//  (C) Copyright John Maddock 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  for C++ Builder the following options effect the ABI:\n//\n//  -b (on or off - effect emum sizes)\n//  -Vx  (on or off - empty members)\n//  -Ve (on or off - empty base classes)\n//  -aX (alignment - 5 options).\n//  -pX (Calling convention - 4 options)\n//  -VmX (member pointer size and layout - 5 options)\n//  -VC (on or off, changes name mangling)\n//  -Vl (on or off, changes struct layout).\n\n//  In addition the following warnings are sufficiently annoying (and\n//  unfixable) to have them turned off by default:\n//\n//  8027 - functions containing [for|while] loops are not expanded inline\n//  8026 - functions taking class by value arguments are not expanded inline\n\n#pragma nopushoptwarn\n#  pragma option push -a8 -Vx- -Ve- -b- -pc -Vmv -VC- -Vl- -w-8027 -w-8026\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/abi/borland_suffix.hpp",
    "content": "//  (C) Copyright John Maddock 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#  pragma option pop\n#pragma nopushoptwarn\n\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/abi/msvc_prefix.hpp",
    "content": "//  (C) Copyright John Maddock 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//\n// Boost binaries are built with the compiler's default ABI settings,\n// if the user changes their default alignment in the VS IDE then their\n// code will no longer be binary compatible with the bjam built binaries\n// unless this header is included to force Boost code into a consistent ABI.\n//\n// Note that inclusion of this header is only necessary for libraries with \n// separate source, header only libraries DO NOT need this as long as all\n// translation units are built with the same options.\n//\n#if defined(_M_X64)\n#  pragma pack(push,16)\n#else\n#  pragma pack(push,8)\n#endif\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/abi/msvc_suffix.hpp",
    "content": "//  (C) Copyright John Maddock 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#pragma pack(pop)\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/abi_prefix.hpp",
    "content": "//  abi_prefix header  -------------------------------------------------------//\n\n// (c) Copyright John Maddock 2003\n   \n// Use, modification and distribution are subject to the Boost Software License,\n// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt).\n\n#ifndef BOOST_CONFIG_ABI_PREFIX_HPP\n# define BOOST_CONFIG_ABI_PREFIX_HPP\n#else\n# error double inclusion of header boost/config/abi_prefix.hpp is an error\n#endif\n\n#include <boost/config.hpp>\n\n// this must occur after all other includes and before any code appears:\n#ifdef BOOST_HAS_ABI_HEADERS\n#  include BOOST_ABI_PREFIX\n#endif\n\n#if defined( __BORLANDC__ )\n#pragma nopushoptwarn\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/abi_suffix.hpp",
    "content": "//  abi_sufffix header  -------------------------------------------------------//\n\n// (c) Copyright John Maddock 2003\n   \n// Use, modification and distribution are subject to the Boost Software License,\n// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt).\n\n// This header should be #included AFTER code that was preceded by a #include\n// <boost/config/abi_prefix.hpp>.\n\n#ifndef BOOST_CONFIG_ABI_PREFIX_HPP\n# error Header boost/config/abi_suffix.hpp must only be used after boost/config/abi_prefix.hpp\n#else\n# undef BOOST_CONFIG_ABI_PREFIX_HPP\n#endif\n\n// the suffix header occurs after all of our code:\n#ifdef BOOST_HAS_ABI_HEADERS\n#  include BOOST_ABI_SUFFIX\n#endif\n\n#if defined( __BORLANDC__ )\n#pragma nopushoptwarn\n#endif\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/auto_link.hpp",
    "content": "//  (C) Copyright John Maddock 2003.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n /*\n  *   LOCATION:    see http://www.boost.org for most recent version.\n  *   FILE         auto_link.hpp\n  *   VERSION      see <boost/version.hpp>\n  *   DESCRIPTION: Automatic library inclusion for Borland/Microsoft compilers.\n  */\n\n/*************************************************************************\n\nUSAGE:\n~~~~~~\n\nBefore including this header you must define one or more of define the following macros:\n\nBOOST_LIB_NAME:           Required: A string containing the basename of the library,\n                          for example boost_regex.\nBOOST_LIB_TOOLSET:        Optional: the base name of the toolset.\nBOOST_DYN_LINK:           Optional: when set link to dll rather than static library.\nBOOST_LIB_DIAGNOSTIC:     Optional: when set the header will print out the name\n                          of the library selected (useful for debugging).\nBOOST_AUTO_LINK_NOMANGLE: Specifies that we should link to BOOST_LIB_NAME.lib,\n                          rather than a mangled-name version.\nBOOST_AUTO_LINK_TAGGED:   Specifies that we link to libraries built with the --layout=tagged option.\n                          This is essentially the same as the default name-mangled version, but without\n                          the compiler name and version, or the Boost version.  Just the build options.\n\nThese macros will be undef'ed at the end of the header, further this header\nhas no include guards - so be sure to include it only once from your library!\n\nAlgorithm:\n~~~~~~~~~~\n\nLibraries for Borland and Microsoft compilers are automatically\nselected here, the name of the lib is selected according to the following\nformula:\n\nBOOST_LIB_PREFIX\n   + BOOST_LIB_NAME\n   + \"_\"\n   + BOOST_LIB_TOOLSET\n   + BOOST_LIB_THREAD_OPT\n   + BOOST_LIB_RT_OPT\n   \"-\"\n   + BOOST_LIB_VERSION\n\nThese are defined as:\n\nBOOST_LIB_PREFIX:     \"lib\" for static libraries otherwise \"\".\n\nBOOST_LIB_NAME:       The base name of the lib ( for example boost_regex).\n\nBOOST_LIB_TOOLSET:    The compiler toolset name (vc6, vc7, bcb5 etc).\n\nBOOST_LIB_THREAD_OPT: \"-mt\" for multithread builds, otherwise nothing.\n\nBOOST_LIB_RT_OPT:     A suffix that indicates the runtime library used,\n                      contains one or more of the following letters after\n                      a hyphen:\n\n                      s      static runtime (dynamic if not present).\n                      g      debug/diagnostic runtime (release if not present).\n                      y      Python debug/diagnostic runtime (release if not present).\n                      d      debug build (release if not present).\n                      p      STLport build.\n                      n      STLport build without its IOStreams.\n\nBOOST_LIB_VERSION:    The Boost version, in the form x_y, for Boost version x.y.\n\n\n***************************************************************************/\n\n#ifdef __cplusplus\n#  ifndef BOOST_CONFIG_HPP\n#     include <boost/config.hpp>\n#  endif\n#elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__)\n//\n// C language compatability (no, honestly)\n//\n#  define BOOST_MSVC _MSC_VER\n#  define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)\n#  define BOOST_DO_STRINGIZE(X) #X\n#endif\n//\n// Only include what follows for known and supported compilers:\n//\n#if defined(BOOST_MSVC) \\\n    || defined(__BORLANDC__) \\\n    || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \\\n    || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200))\n\n#ifndef BOOST_VERSION_HPP\n#  include <boost/version.hpp>\n#endif\n\n#ifndef BOOST_LIB_NAME\n#  error \"Macro BOOST_LIB_NAME not set (internal error)\"\n#endif\n\n//\n// error check:\n//\n#if defined(__MSVC_RUNTIME_CHECKS) && !defined(_DEBUG)\n#  pragma message(\"Using the /RTC option without specifying a debug runtime will lead to linker errors\")\n#  pragma message(\"Hint: go to the code generation options and switch to one of the debugging runtimes\")\n#  error \"Incompatible build options\"\n#endif\n//\n// select toolset if not defined already:\n//\n#ifndef BOOST_LIB_TOOLSET\n#  if defined(BOOST_MSVC) && (BOOST_MSVC < 1200)\n    // Note: no compilers before 1200 are supported\n#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1300)\n\n#    ifdef UNDER_CE\n       // eVC4:\n#      define BOOST_LIB_TOOLSET \"evc4\"\n#    else\n       // vc6:\n#      define BOOST_LIB_TOOLSET \"vc6\"\n#    endif\n\n#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1310)\n\n     // vc7:\n#    define BOOST_LIB_TOOLSET \"vc7\"\n\n#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1400)\n\n     // vc71:\n#    define BOOST_LIB_TOOLSET \"vc71\"\n\n#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1500)\n\n     // vc80:\n#    define BOOST_LIB_TOOLSET \"vc80\"\n\n#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1600)\n\n     // vc90:\n#    define BOOST_LIB_TOOLSET \"vc90\"\n\n#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1700)\n\n     // vc10:\n#    define BOOST_LIB_TOOLSET \"vc100\"\n\n#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1800)\n\n     // vc11:\n#    define BOOST_LIB_TOOLSET \"vc110\"\n\n#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1900)\n\n     // vc12:\n#    define BOOST_LIB_TOOLSET \"vc120\"\n\n# elif defined(BOOST_MSVC)\n\n   // vc14:\n#  define BOOST_LIB_TOOLSET \"vc140\"\n\n#  elif defined(__BORLANDC__)\n\n     // CBuilder 6:\n#    define BOOST_LIB_TOOLSET \"bcb\"\n\n#  elif defined(__ICL)\n\n     // Intel C++, no version number:\n#    define BOOST_LIB_TOOLSET \"iw\"\n\n#  elif defined(__MWERKS__) && (__MWERKS__ <= 0x31FF )\n\n     // Metrowerks CodeWarrior 8.x\n#    define BOOST_LIB_TOOLSET \"cw8\"\n\n#  elif defined(__MWERKS__) && (__MWERKS__ <= 0x32FF )\n\n     // Metrowerks CodeWarrior 9.x\n#    define BOOST_LIB_TOOLSET \"cw9\"\n\n#  endif\n#endif // BOOST_LIB_TOOLSET\n\n//\n// select thread opt:\n//\n#if defined(_MT) || defined(__MT__)\n#  define BOOST_LIB_THREAD_OPT \"-mt\"\n#else\n#  define BOOST_LIB_THREAD_OPT\n#endif\n\n#if defined(_MSC_VER) || defined(__MWERKS__)\n\n#  ifdef _DLL\n\n#     if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS))\n\n#        if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#            define BOOST_LIB_RT_OPT \"-gydp\"\n#        elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\n#            define BOOST_LIB_RT_OPT \"-gdp\"\n#        elif defined(_DEBUG)\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#            define BOOST_LIB_RT_OPT \"-gydp\"\n#            pragma message(\"warning: STLport debug versions are built with /D_STLP_DEBUG=1\")\n#            error \"Build options aren't compatible with pre-built libraries\"\n#        elif defined(_DEBUG)\n#            define BOOST_LIB_RT_OPT \"-gdp\"\n#            pragma message(\"warning: STLport debug versions are built with /D_STLP_DEBUG=1\")\n#            error \"Build options aren't compatible with pre-built libraries\"\n#        else\n#            define BOOST_LIB_RT_OPT \"-p\"\n#        endif\n\n#     elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)\n\n#        if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#            define BOOST_LIB_RT_OPT \"-gydpn\"\n#        elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\n#            define BOOST_LIB_RT_OPT \"-gdpn\"\n#        elif defined(_DEBUG)\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#            define BOOST_LIB_RT_OPT \"-gydpn\"\n#            pragma message(\"warning: STLport debug versions are built with /D_STLP_DEBUG=1\")\n#            error \"Build options aren't compatible with pre-built libraries\"\n#        elif defined(_DEBUG)\n#            define BOOST_LIB_RT_OPT \"-gdpn\"\n#            pragma message(\"warning: STLport debug versions are built with /D_STLP_DEBUG=1\")\n#            error \"Build options aren't compatible with pre-built libraries\"\n#        else\n#            define BOOST_LIB_RT_OPT \"-pn\"\n#        endif\n\n#     else\n\n#        if defined(_DEBUG) && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#            define BOOST_LIB_RT_OPT \"-gyd\"\n#        elif defined(_DEBUG)\n#            define BOOST_LIB_RT_OPT \"-gd\"\n#        else\n#            define BOOST_LIB_RT_OPT\n#        endif\n\n#     endif\n\n#  else\n\n#     if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS))\n\n#        if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#            define BOOST_LIB_RT_OPT \"-sgydp\"\n#        elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\n#            define BOOST_LIB_RT_OPT \"-sgdp\"\n#        elif defined(_DEBUG)\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#             define BOOST_LIB_RT_OPT \"-sgydp\"\n#            pragma message(\"warning: STLport debug versions are built with /D_STLP_DEBUG=1\")\n#            error \"Build options aren't compatible with pre-built libraries\"\n#        elif defined(_DEBUG)\n#             define BOOST_LIB_RT_OPT \"-sgdp\"\n#            pragma message(\"warning: STLport debug versions are built with /D_STLP_DEBUG=1\")\n#            error \"Build options aren't compatible with pre-built libraries\"\n#        else\n#            define BOOST_LIB_RT_OPT \"-sp\"\n#        endif\n\n#     elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)\n\n#        if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#            define BOOST_LIB_RT_OPT \"-sgydpn\"\n#        elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\n#            define BOOST_LIB_RT_OPT \"-sgdpn\"\n#        elif defined(_DEBUG)\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#             define BOOST_LIB_RT_OPT \"-sgydpn\"\n#            pragma message(\"warning: STLport debug versions are built with /D_STLP_DEBUG=1\")\n#            error \"Build options aren't compatible with pre-built libraries\"\n#        elif defined(_DEBUG)\n#             define BOOST_LIB_RT_OPT \"-sgdpn\"\n#            pragma message(\"warning: STLport debug versions are built with /D_STLP_DEBUG=1\")\n#            error \"Build options aren't compatible with pre-built libraries\"\n#        else\n#            define BOOST_LIB_RT_OPT \"-spn\"\n#        endif\n\n#     else\n\n#        if defined(_DEBUG)\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#             define BOOST_LIB_RT_OPT \"-sgyd\"\n#        elif defined(_DEBUG)\n#             define BOOST_LIB_RT_OPT \"-sgd\"\n#        else\n#            define BOOST_LIB_RT_OPT \"-s\"\n#        endif\n\n#     endif\n\n#  endif\n\n#elif defined(__BORLANDC__)\n\n//\n// figure out whether we want the debug builds or not:\n//\n#if __BORLANDC__ > 0x561\n#pragma defineonoption BOOST_BORLAND_DEBUG -v\n#endif\n//\n// sanity check:\n//\n#if defined(__STL_DEBUG) || defined(_STLP_DEBUG)\n#error \"Pre-built versions of the Boost libraries are not provided in STLport-debug form\"\n#endif\n\n#  ifdef _RTLDLL\n\n#     if defined(BOOST_BORLAND_DEBUG)\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#         define BOOST_LIB_RT_OPT \"-yd\"\n#     elif defined(BOOST_BORLAND_DEBUG)\n#         define BOOST_LIB_RT_OPT \"-d\"\n#     elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#         define BOOST_LIB_RT_OPT -y\n#     else\n#         define BOOST_LIB_RT_OPT\n#     endif\n\n#  else\n\n#     if defined(BOOST_BORLAND_DEBUG)\\\n               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#         define BOOST_LIB_RT_OPT \"-syd\"\n#     elif defined(BOOST_BORLAND_DEBUG)\n#         define BOOST_LIB_RT_OPT \"-sd\"\n#     elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)\n#         define BOOST_LIB_RT_OPT \"-sy\"\n#     else\n#         define BOOST_LIB_RT_OPT \"-s\"\n#     endif\n\n#  endif\n\n#endif\n\n//\n// select linkage opt:\n//\n#if (defined(_DLL) || defined(_RTLDLL)) && defined(BOOST_DYN_LINK)\n#  define BOOST_LIB_PREFIX\n#elif defined(BOOST_DYN_LINK)\n#  error \"Mixing a dll boost library with a static runtime is a really bad idea...\"\n#else\n#  define BOOST_LIB_PREFIX \"lib\"\n#endif\n\n//\n// now include the lib:\n//\n#if defined(BOOST_LIB_NAME) \\\n      && defined(BOOST_LIB_PREFIX) \\\n      && defined(BOOST_LIB_TOOLSET) \\\n      && defined(BOOST_LIB_THREAD_OPT) \\\n      && defined(BOOST_LIB_RT_OPT) \\\n      && defined(BOOST_LIB_VERSION)\n\n#ifdef BOOST_AUTO_LINK_TAGGED\n#  pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT \".lib\")\n#  ifdef BOOST_LIB_DIAGNOSTIC\n#     pragma message (\"Linking to lib file: \" BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT \".lib\")\n#  endif\n#elif defined(BOOST_AUTO_LINK_NOMANGLE)\n#  pragma comment(lib, BOOST_STRINGIZE(BOOST_LIB_NAME) \".lib\")\n#  ifdef BOOST_LIB_DIAGNOSTIC\n#     pragma message (\"Linking to lib file: \" BOOST_STRINGIZE(BOOST_LIB_NAME) \".lib\")\n#  endif\n#elif defined(BOOST_LIB_BUILDID)\n#  pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) \"-\" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT \"-\" BOOST_LIB_VERSION \"-\" BOOST_STRINGIZE(BOOST_LIB_BUILDID) \".lib\")\n#  ifdef BOOST_LIB_DIAGNOSTIC\n#     pragma message (\"Linking to lib file: \" BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) \"-\" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT \"-\" BOOST_LIB_VERSION \"-\" BOOST_STRINGIZE(BOOST_LIB_BUILDID) \".lib\")\n#  endif\n#else\n#  pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) \"-\" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT \"-\" BOOST_LIB_VERSION \".lib\")\n#  ifdef BOOST_LIB_DIAGNOSTIC\n#     pragma message (\"Linking to lib file: \" BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) \"-\" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT \"-\" BOOST_LIB_VERSION \".lib\")\n#  endif\n#endif\n\n#else\n#  error \"some required macros where not defined (internal logic error).\"\n#endif\n\n\n#endif // _MSC_VER || __BORLANDC__\n\n//\n// finally undef any macros we may have set:\n//\n#ifdef BOOST_LIB_PREFIX\n#  undef BOOST_LIB_PREFIX\n#endif\n#if defined(BOOST_LIB_NAME)\n#  undef BOOST_LIB_NAME\n#endif\n// Don't undef this one: it can be set by the user and should be the \n// same for all libraries:\n//#if defined(BOOST_LIB_TOOLSET)\n//#  undef BOOST_LIB_TOOLSET\n//#endif\n#if defined(BOOST_LIB_THREAD_OPT)\n#  undef BOOST_LIB_THREAD_OPT\n#endif\n#if defined(BOOST_LIB_RT_OPT)\n#  undef BOOST_LIB_RT_OPT\n#endif\n#if defined(BOOST_LIB_LINK_OPT)\n#  undef BOOST_LIB_LINK_OPT\n#endif\n#if defined(BOOST_LIB_DEBUG_OPT)\n#  undef BOOST_LIB_DEBUG_OPT\n#endif\n#if defined(BOOST_DYN_LINK)\n#  undef BOOST_DYN_LINK\n#endif\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/borland.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003.\n//  (C) Copyright David Abrahams 2002 - 2003.\n//  (C) Copyright Aleksey Gurtovoy 2002.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Borland C++ compiler setup:\n\n//\n// versions check:\n// we don't support Borland prior to version 5.4:\n#if __BORLANDC__ < 0x540\n#  error \"Compiler not supported or configured - please reconfigure\"\n#endif\n\n// last known compiler version:\n#if (__BORLANDC__ > 0x613)\n//#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n//#  else\n//#     pragma message( \"Unknown compiler version - please run the configure tests and report the results\")\n//#  endif\n#elif (__BORLANDC__ == 0x600)\n#  error \"CBuilderX preview compiler is no longer supported\"\n#endif\n\n//\n// Support macros to help with standard library detection\n#if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL)\n#  define BOOST_BCB_WITH_ROGUE_WAVE\n#elif __BORLANDC__ < 0x570\n#  define BOOST_BCB_WITH_STLPORT\n#else\n#  define BOOST_BCB_WITH_DINKUMWARE\n#endif\n\n//\n// Version 5.0 and below:\n#   if __BORLANDC__ <= 0x0550\n// Borland C++Builder 4 and 5:\n#     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n#     if __BORLANDC__ == 0x0550\n// Borland C++Builder 5, command-line compiler 5.5:\n#       define BOOST_NO_OPERATORS_IN_NAMESPACE\n#     endif\n// Variadic macros do not exist for C++ Builder versions 5 and below\n#define BOOST_NO_CXX11_VARIADIC_MACROS\n#   endif\n\n// Version 5.51 and below:\n#if (__BORLANDC__ <= 0x551)\n#  define BOOST_NO_CV_SPECIALIZATIONS\n#  define BOOST_NO_CV_VOID_SPECIALIZATIONS\n#  define BOOST_NO_DEDUCED_TYPENAME\n// workaround for missing WCHAR_MAX/WCHAR_MIN:\n#ifdef __cplusplus\n#include <climits>\n#include <cwchar>\n#else\n#include <limits.h>\n#include <wchar.h>\n#endif // __cplusplus\n#ifndef WCHAR_MAX\n#  define WCHAR_MAX 0xffff\n#endif\n#ifndef WCHAR_MIN\n#  define WCHAR_MIN 0\n#endif\n#endif\n\n// Borland C++ Builder 6 and below:\n#if (__BORLANDC__ <= 0x564)\n\n#  if defined(NDEBUG) && defined(__cplusplus)\n      // fix broken <cstring> so that Boost.test works:\n#     include <cstring>\n#     undef strcmp\n#  endif\n   // fix broken errno declaration:\n#  include <errno.h>\n#  ifndef errno\n#     define errno errno\n#  endif\n\n#endif\n\n//\n// new bug in 5.61:\n#if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580)\n   // this seems to be needed by the command line compiler, but not the IDE:\n#  define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS\n#endif\n\n// Borland C++ Builder 2006 Update 2 and below:\n#if (__BORLANDC__ <= 0x582)\n#  define BOOST_NO_SFINAE\n#  define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG\n#  define BOOST_NO_TEMPLATE_TEMPLATES\n\n#  define BOOST_NO_PRIVATE_IN_AGGREGATE\n\n#  ifdef _WIN32\n#     define BOOST_NO_SWPRINTF\n#  elif defined(linux) || defined(__linux__) || defined(__linux)\n      // we should really be able to do without this\n      // but the wcs* functions aren't imported into std::\n#     define BOOST_NO_STDC_NAMESPACE\n      // _CPPUNWIND doesn't get automatically set for some reason:\n#     pragma defineonoption BOOST_CPPUNWIND -x\n#  endif\n#endif\n\n#if (__BORLANDC__ <= 0x613)  // Beman has asked Alisdair for more info\n   // we shouldn't really need this - but too many things choke\n   // without it, this needs more investigation:\n#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n#  define BOOST_NO_IS_ABSTRACT\n#  define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS\n#  define BOOST_NO_USING_TEMPLATE\n#  define BOOST_SP_NO_SP_CONVERTIBLE\n\n// Temporary workaround\n#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif\n\n// Borland C++ Builder 2008 and below:\n#  define BOOST_NO_INTEGRAL_INT64_T\n#  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#  define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS\n#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#  define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE\n#  define BOOST_NO_NESTED_FRIENDSHIP\n#  define BOOST_NO_TYPENAME_WITH_CTOR\n#if (__BORLANDC__ < 0x600)\n#  define BOOST_ILLEGAL_CV_REFERENCES\n#endif\n\n//\n//  Positive Feature detection\n//\n// Borland C++ Builder 2008 and below:\n#if (__BORLANDC__ >= 0x599)\n#  pragma defineonoption BOOST_CODEGEAR_0X_SUPPORT -Ax\n#endif\n//\n// C++0x Macros:\n//\n#if !defined( BOOST_CODEGEAR_0X_SUPPORT ) || (__BORLANDC__ < 0x610)\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_CHAR32_T\n#  define BOOST_NO_CXX11_DECLTYPE\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#  define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n#else\n#  define BOOST_HAS_ALIGNOF\n#  define BOOST_HAS_CHAR16_T\n#  define BOOST_HAS_CHAR32_T\n#  define BOOST_HAS_DECLTYPE\n#  define BOOST_HAS_EXPLICIT_CONVERSION_OPS\n#  define BOOST_HAS_REF_QUALIFIER\n#  define BOOST_HAS_RVALUE_REFS\n#  define BOOST_HAS_STATIC_ASSERT\n#endif\n\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_RVALUE_REFERENCES\n#define BOOST_NO_CXX11_SCOPED_ENUMS\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS    // UTF-8 still not supported\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n#if __BORLANDC__ >= 0x590\n#  define BOOST_HAS_TR1_HASH\n\n#  define BOOST_HAS_MACRO_USE_FACET\n#endif\n\n//\n// Post 0x561 we have long long and stdint.h:\n#if __BORLANDC__ >= 0x561\n#  ifndef __NO_LONG_LONG\n#     define BOOST_HAS_LONG_LONG\n#  else\n#     define BOOST_NO_LONG_LONG\n#  endif\n   // On non-Win32 platforms let the platform config figure this out:\n#  ifdef _WIN32\n#      define BOOST_HAS_STDINT_H\n#  endif\n#endif\n\n// Borland C++Builder 6 defaults to using STLPort.  If _USE_OLD_RW_STL is\n// defined, then we have 0x560 or greater with the Rogue Wave implementation\n// which presumably has the std::DBL_MAX bug.\n#if defined( BOOST_BCB_WITH_ROGUE_WAVE )\n// <climits> is partly broken, some macros define symbols that are really in\n// namespace std, so you end up having to use illegal constructs like\n// std::DBL_MAX, as a fix we'll just include float.h and have done with:\n#include <float.h>\n#endif\n//\n// __int64:\n//\n#if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)\n#  define BOOST_HAS_MS_INT64\n#endif\n//\n// check for exception handling support:\n//\n#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)\n#  define BOOST_NO_EXCEPTIONS\n#endif\n//\n// all versions have a <dirent.h>:\n//\n#ifndef __STRICT_ANSI__\n#  define BOOST_HAS_DIRENT_H\n#endif\n//\n// all versions support __declspec:\n//\n#if defined(__STRICT_ANSI__)\n// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined\n#  define BOOST_SYMBOL_EXPORT\n#endif\n//\n// ABI fixing headers:\n//\n#if __BORLANDC__ != 0x600 // not implemented for version 6 compiler yet\n#ifndef BOOST_ABI_PREFIX\n#  define BOOST_ABI_PREFIX \"boost/config/abi/borland_prefix.hpp\"\n#endif\n#ifndef BOOST_ABI_SUFFIX\n#  define BOOST_ABI_SUFFIX \"boost/config/abi/borland_suffix.hpp\"\n#endif\n#endif\n//\n// Disable Win32 support in ANSI mode:\n//\n#if __BORLANDC__ < 0x600\n#  pragma defineonoption BOOST_DISABLE_WIN32 -A\n#elif defined(__STRICT_ANSI__)\n#  define BOOST_DISABLE_WIN32\n#endif\n//\n// MSVC compatibility mode does some nasty things:\n// TODO: look up if this doesn't apply to the whole 12xx range\n//\n#if defined(_MSC_VER) && (_MSC_VER <= 1200)\n#  define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n#  define BOOST_NO_VOID_RETURNS\n#endif\n\n// Borland did not implement value-initialization completely, as I reported\n// in 2007, Borland Report 51854, \"Value-initialization: POD struct should be\n// zero-initialized\", http://qc.embarcadero.com/wc/qcmain.aspx?d=51854\n// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues\n// (Niels Dekker, LKEB, April 2010)\n#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n\n#define BOOST_COMPILER \"Borland C++ version \" BOOST_STRINGIZE(__BORLANDC__)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/clang.hpp",
    "content": "// (C) Copyright Douglas Gregor 2010\n//\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n// Clang compiler setup.\n\n#define BOOST_HAS_PRAGMA_ONCE\n\n// Detecting `-fms-extension` compiler flag assuming that _MSC_VER defined when that flag is used.\n#if defined (_MSC_VER) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4))\n#   define BOOST_HAS_PRAGMA_DETECT_MISMATCH\n#endif\n\n// When compiling with clang before __has_extension was defined,\n// even if one writes 'defined(__has_extension) && __has_extension(xxx)',\n// clang reports a compiler error. So the only workaround found is:\n\n#ifndef __has_extension\n#define __has_extension __has_feature\n#endif\n\n#ifndef __has_attribute\n#define __has_attribute(x) 0\n#endif\n\n#if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS)\n#  define BOOST_NO_EXCEPTIONS\n#endif\n\n#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_RTTI)\n#  define BOOST_NO_RTTI\n#endif\n\n#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_TYPEID)\n#  define BOOST_NO_TYPEID\n#endif\n\n#if defined(__int64) && !defined(__GNUC__)\n#  define BOOST_HAS_MS_INT64\n#endif\n\n#define BOOST_HAS_NRVO\n\n// Branch prediction hints\n#if defined(__has_builtin)\n#if __has_builtin(__builtin_expect)\n#define BOOST_LIKELY(x) __builtin_expect(x, 1)\n#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)\n#endif\n#endif\n\n// Clang supports \"long long\" in all compilation modes.\n#define BOOST_HAS_LONG_LONG\n\n//\n// We disable this if the compiler is really nvcc as it\n// doesn't actually support __int128 as of CUDA_VERSION=5000\n// even though it defines __SIZEOF_INT128__.\n// See https://svn.boost.org/trac/boost/ticket/10418\n// Only re-enable this for nvcc if you're absolutely sure\n// of the circumstances under which it's supported.\n// Similarly __SIZEOF_INT128__ is defined when targetting msvc\n// compatibility even though the required support functions are absent.\n//\n#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__) && !defined(_MSC_VER)\n#  define BOOST_HAS_INT128\n#endif\n\n\n//\n// Dynamic shared object (DSO) and dynamic-link library (DLL) support\n//\n#if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32)\n#  define BOOST_SYMBOL_EXPORT __attribute__((__visibility__(\"default\")))\n#  define BOOST_SYMBOL_IMPORT\n#  define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__(\"default\")))\n#endif\n\n//\n// The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through\n// between switch labels.\n//\n#if __cplusplus >= 201103L && defined(__has_warning)\n#  if __has_feature(cxx_attributes) && __has_warning(\"-Wimplicit-fallthrough\")\n#    define BOOST_FALLTHROUGH [[clang::fallthrough]]\n#  endif\n#endif\n\n#if !__has_feature(cxx_auto_type)\n#  define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#endif\n\n//\n// Currently clang on Windows using VC++ RTL does not support C++11's char16_t or char32_t\n//\n#if defined(_MSC_VER) || !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_CHAR32_T\n#endif\n\n#if !__has_feature(cxx_constexpr)\n#  define BOOST_NO_CXX11_CONSTEXPR\n#endif\n\n#if !__has_feature(cxx_decltype)\n#  define BOOST_NO_CXX11_DECLTYPE\n#endif\n\n#if !__has_feature(cxx_decltype_incomplete_return_types)\n#  define BOOST_NO_CXX11_DECLTYPE_N3276\n#endif\n\n#if !__has_feature(cxx_defaulted_functions)\n#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#endif\n\n#if !__has_feature(cxx_deleted_functions)\n#  define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#endif\n\n#if !__has_feature(cxx_explicit_conversions)\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#endif\n\n#if !__has_feature(cxx_default_function_template_args)\n#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#endif\n\n#if !__has_feature(cxx_generalized_initializers)\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#endif\n\n#if !__has_feature(cxx_lambdas)\n#  define BOOST_NO_CXX11_LAMBDAS\n#endif\n\n#if !__has_feature(cxx_local_type_template_args)\n#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#endif\n\n#if !__has_feature(cxx_noexcept)\n#  define BOOST_NO_CXX11_NOEXCEPT\n#endif\n\n#if !__has_feature(cxx_nullptr)\n#  define BOOST_NO_CXX11_NULLPTR\n#endif\n\n#if !__has_feature(cxx_range_for)\n#  define BOOST_NO_CXX11_RANGE_BASED_FOR\n#endif\n\n#if !__has_feature(cxx_raw_string_literals)\n#  define BOOST_NO_CXX11_RAW_LITERALS\n#endif\n\n#if !__has_feature(cxx_reference_qualified_functions)\n#  define BOOST_NO_CXX11_REF_QUALIFIERS\n#endif\n\n#if !__has_feature(cxx_generalized_initializers)\n#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#endif\n\n#if !__has_feature(cxx_rvalue_references)\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#endif\n\n#if !__has_feature(cxx_strong_enums)\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#endif\n\n#if !__has_feature(cxx_static_assert)\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n#endif\n\n#if !__has_feature(cxx_alias_templates)\n#  define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#endif\n\n#if !__has_feature(cxx_unicode_literals)\n#  define BOOST_NO_CXX11_UNICODE_LITERALS\n#endif\n\n#if !__has_feature(cxx_variadic_templates)\n#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#endif\n\n#if !__has_feature(cxx_user_literals)\n#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#endif\n\n#if !__has_feature(cxx_alignas)\n#  define BOOST_NO_CXX11_ALIGNAS\n#endif\n\n#if !__has_feature(cxx_trailing_return)\n#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#endif\n\n#if !__has_feature(cxx_inline_namespaces)\n#  define BOOST_NO_CXX11_INLINE_NAMESPACES\n#endif\n\n#if !__has_feature(cxx_override_control)\n#  define BOOST_NO_CXX11_FINAL\n#endif\n\n#if !(__has_feature(__cxx_binary_literals__) || __has_extension(__cxx_binary_literals__))\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n\n#if !__has_feature(__cxx_decltype_auto__)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n\n#if !__has_feature(__cxx_aggregate_nsdmi__)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n\n#if !__has_feature(__cxx_init_captures__)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n\n#if !__has_feature(__cxx_generic_lambdas__)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n\n// clang < 3.5 has a defect with dependent type, like following.\n//\n//  template <class T>\n//  constexpr typename enable_if<pred<T> >::type foo(T &)\n//  { } // error: no return statement in constexpr function\n//\n// This issue also affects C++11 mode, but C++11 constexpr requires return stmt.\n// Therefore we don't care such case.\n//\n// Note that we can't check Clang version directly as the numbering system changes depending who's\n// creating the Clang release (see https://github.com/boostorg/config/pull/39#issuecomment-59927873)\n// so instead verify that we have a feature that was introduced at the same time as working C++14\n// constexpr (generic lambda's in this case):\n//\n#if !__has_feature(__cxx_generic_lambdas__) || !__has_feature(__cxx_relaxed_constexpr__)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n\n#if !__has_feature(__cxx_return_type_deduction__)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n\n#if !__has_feature(__cxx_variable_templates__)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n#if __cplusplus < 201400\n// All versions with __cplusplus above this value seem to support this:\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n//\n// __builtin_unreachable:\n#if defined(__has_builtin) && __has_builtin(__builtin_unreachable)\n#define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable();\n#endif\n\n// Clang has supported the 'unused' attribute since the first release.\n#define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__))\n\n#ifndef BOOST_COMPILER\n#  define BOOST_COMPILER \"Clang version \" __clang_version__\n#endif\n\n// Macro used to identify the Clang compiler.\n#define BOOST_CLANG 1\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/codegear.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003.\n//  (C) Copyright David Abrahams 2002 - 2003.\n//  (C) Copyright Aleksey Gurtovoy 2002.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  CodeGear C++ compiler setup:\n\n#if !defined( BOOST_WITH_CODEGEAR_WARNINGS )\n// these warnings occur frequently in optimized template code\n# pragma warn -8004 // var assigned value, but never used\n# pragma warn -8008 // condition always true/false\n# pragma warn -8066 // dead code can never execute\n# pragma warn -8104 // static members with ctors not threadsafe\n# pragma warn -8105 // reference member in class without ctors\n#endif\n//\n// versions check:\n// last known and checked version is 0x621\n#if (__CODEGEARC__ > 0x621)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  else\n#     pragma message( \"Unknown compiler version - please run the configure tests and report the results\")\n#  endif\n#endif\n\n// CodeGear C++ Builder 2009\n#if (__CODEGEARC__ <= 0x613)\n#  define BOOST_NO_INTEGRAL_INT64_T\n#  define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS\n#  define BOOST_NO_PRIVATE_IN_AGGREGATE\n#  define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE\n   // we shouldn't really need this - but too many things choke\n   // without it, this needs more investigation:\n#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n#  define BOOST_SP_NO_SP_CONVERTIBLE\n#endif\n\n// CodeGear C++ Builder 2010\n#if (__CODEGEARC__ <= 0x621)\n#  define BOOST_NO_TYPENAME_WITH_CTOR    // Cannot use typename keyword when making temporaries of a dependant type\n#  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n#  define BOOST_NO_NESTED_FRIENDSHIP     // TC1 gives nested classes access rights as any other member\n#  define BOOST_NO_USING_TEMPLATE\n#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n// Temporary hack, until specific MPL preprocessed headers are generated\n#  define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n// CodeGear has not yet completely implemented value-initialization, for\n// example for array types, as I reported in 2010: Embarcadero Report 83751,\n// \"Value-initialization: arrays should have each element value-initialized\",\n// http://qc.embarcadero.com/wc/qcmain.aspx?d=83751\n// Last checked version: Embarcadero C++ 6.21\n// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues\n// (Niels Dekker, LKEB, April 2010)\n#  define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n\n#  if defined(NDEBUG) && defined(__cplusplus)\n      // fix broken <cstring> so that Boost.test works:\n#     include <cstring>\n#     undef strcmp\n#  endif\n   // fix broken errno declaration:\n#  include <errno.h>\n#  ifndef errno\n#     define errno errno\n#  endif\n\n#endif\n\n// Reportedly, #pragma once is supported since C++ Builder 2010\n#if (__CODEGEARC__ >= 0x620)\n#  define BOOST_HAS_PRAGMA_ONCE\n#endif\n\n//\n// C++0x macros:\n//\n#if (__CODEGEARC__ <= 0x620)\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#else\n#define BOOST_HAS_STATIC_ASSERT\n#endif\n#define BOOST_HAS_CHAR16_T\n#define BOOST_HAS_CHAR32_T\n#define BOOST_HAS_LONG_LONG\n// #define BOOST_HAS_ALIGNOF\n#define BOOST_HAS_DECLTYPE\n#define BOOST_HAS_EXPLICIT_CONVERSION_OPS\n// #define BOOST_HAS_RVALUE_REFS\n#define BOOST_HAS_SCOPED_ENUM\n// #define BOOST_HAS_STATIC_ASSERT\n#define BOOST_HAS_STD_TYPE_TRAITS\n\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_RVALUE_REFERENCES\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n//\n// TR1 macros:\n//\n#define BOOST_HAS_TR1_HASH\n#define BOOST_HAS_TR1_TYPE_TRAITS\n#define BOOST_HAS_TR1_UNORDERED_MAP\n#define BOOST_HAS_TR1_UNORDERED_SET\n\n#define BOOST_HAS_MACRO_USE_FACET\n\n#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n\n// On non-Win32 platforms let the platform config figure this out:\n#ifdef _WIN32\n#  define BOOST_HAS_STDINT_H\n#endif\n\n//\n// __int64:\n//\n#if !defined(__STRICT_ANSI__)\n#  define BOOST_HAS_MS_INT64\n#endif\n//\n// check for exception handling support:\n//\n#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)\n#  define BOOST_NO_EXCEPTIONS\n#endif\n//\n// all versions have a <dirent.h>:\n//\n#if !defined(__STRICT_ANSI__)\n#  define BOOST_HAS_DIRENT_H\n#endif\n//\n// all versions support __declspec:\n//\n#if defined(__STRICT_ANSI__)\n// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined\n#  define BOOST_SYMBOL_EXPORT\n#endif\n//\n// ABI fixing headers:\n//\n#ifndef BOOST_ABI_PREFIX\n#  define BOOST_ABI_PREFIX \"boost/config/abi/borland_prefix.hpp\"\n#endif\n#ifndef BOOST_ABI_SUFFIX\n#  define BOOST_ABI_SUFFIX \"boost/config/abi/borland_suffix.hpp\"\n#endif\n//\n// Disable Win32 support in ANSI mode:\n//\n#  pragma defineonoption BOOST_DISABLE_WIN32 -A\n//\n// MSVC compatibility mode does some nasty things:\n// TODO: look up if this doesn't apply to the whole 12xx range\n//\n#if defined(_MSC_VER) && (_MSC_VER <= 1200)\n#  define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n#  define BOOST_NO_VOID_RETURNS\n#endif\n\n#define BOOST_COMPILER \"CodeGear C++ version \" BOOST_STRINGIZE(__CODEGEARC__)\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/comeau.hpp",
    "content": "//  (C) Copyright John Maddock 2001. \n//  (C) Copyright Douglas Gregor 2001. \n//  (C) Copyright Peter Dimov 2001. \n//  (C) Copyright Aleksey Gurtovoy 2003. \n//  (C) Copyright Beman Dawes 2003. \n//  (C) Copyright Jens Maurer 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Comeau C++ compiler setup:\n\n#include \"boost/config/compiler/common_edg.hpp\"\n\n#if (__COMO_VERSION__ <= 4245)\n\n#  if defined(_MSC_VER) && _MSC_VER <= 1300\n#     if _MSC_VER > 100\n         // only set this in non-strict mode:\n#        define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n#     endif\n#  endif\n\n// Void returns don't work when emulating VC 6 (Peter Dimov)\n// TODO: look up if this doesn't apply to the whole 12xx range\n#  if defined(_MSC_VER) && (_MSC_VER < 1300)\n#     define BOOST_NO_VOID_RETURNS\n#  endif\n\n#endif  // version 4245\n\n//\n// enable __int64 support in VC emulation mode\n//\n#  if defined(_MSC_VER) && (_MSC_VER >= 1200)\n#     define BOOST_HAS_MS_INT64\n#  endif\n\n#define BOOST_COMPILER \"Comeau compiler version \" BOOST_STRINGIZE(__COMO_VERSION__)\n\n//\n// versions check:\n// we don't know Comeau prior to version 4245:\n#if __COMO_VERSION__ < 4245\n#  error \"Compiler not configured - please reconfigure\"\n#endif\n//\n// last known and checked version is 4245:\n#if (__COMO_VERSION__ > 4245)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/common_edg.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2002.\n//  (C) Copyright Jens Maurer 2001.\n//  (C) Copyright David Abrahams 2002.\n//  (C) Copyright Aleksey Gurtovoy 2002.\n//  (C) Copyright Markus Schoepflin 2005.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//\n// Options common to all edg based compilers.\n//\n// This is included from within the individual compiler mini-configs.\n\n#ifndef  __EDG_VERSION__\n#  error This file requires that __EDG_VERSION__ be defined.\n#endif\n\n#if (__EDG_VERSION__ <= 238)\n#   define BOOST_NO_INTEGRAL_INT64_T\n#   define BOOST_NO_SFINAE\n#endif\n\n#if (__EDG_VERSION__ <= 240)\n#   define BOOST_NO_VOID_RETURNS\n#endif\n\n#if (__EDG_VERSION__ <= 241) && !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)\n#   define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n#endif\n\n#if (__EDG_VERSION__ <= 244) && !defined(BOOST_NO_TEMPLATE_TEMPLATES)\n#   define BOOST_NO_TEMPLATE_TEMPLATES\n#endif\n\n#if (__EDG_VERSION__ < 300) && !defined(BOOST_NO_IS_ABSTRACT)\n#   define BOOST_NO_IS_ABSTRACT\n#endif\n\n#if (__EDG_VERSION__ <= 303) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)\n#   define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#endif\n\n// See also kai.hpp which checks a Kai-specific symbol for EH\n# if !defined(__KCC) && !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)\n#     define BOOST_NO_EXCEPTIONS\n# endif\n\n# if !defined(__NO_LONG_LONG)\n#     define BOOST_HAS_LONG_LONG\n# else\n#     define BOOST_NO_LONG_LONG\n# endif\n\n// Not sure what version was the first to support #pragma once, but\n// different EDG-based compilers (e.g. Intel) supported it for ages.\n// Add a proper version check if it causes problems.\n#define BOOST_HAS_PRAGMA_ONCE\n\n//\n// C++0x features\n//\n//   See above for BOOST_NO_LONG_LONG\n//\n#if (__EDG_VERSION__ < 310)\n#  define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#endif\n#if (__EDG_VERSION__ <= 310)\n// No support for initializer lists\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#endif\n#if (__EDG_VERSION__ < 400)\n#  define BOOST_NO_CXX11_VARIADIC_MACROS\n#endif\n\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_CHAR16_T\n#define BOOST_NO_CXX11_CHAR32_T\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_DECLTYPE\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_RVALUE_REFERENCES\n#define BOOST_NO_CXX11_SCOPED_ENUMS\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n#ifdef c_plusplus\n// EDG has \"long long\" in non-strict mode\n// However, some libraries have insufficient \"long long\" support\n// #define BOOST_HAS_LONG_LONG\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/compaq_cxx.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Tru64 C++ compiler setup (now HP):\n\n#define BOOST_COMPILER \"HP Tru64 C++ \" BOOST_STRINGIZE(__DECCXX_VER)\n\n#include \"boost/config/compiler/common_edg.hpp\"\n\n//\n// versions check:\n// Nothing to do here?\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/cray.hpp",
    "content": "//  (C) Copyright John Maddock 2011.\n//  (C) Copyright Cray, Inc. 2013\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Greenhills C compiler setup:\n\n#define BOOST_COMPILER \"Cray C version \" BOOST_STRINGIZE(_RELEASE)\n\n#if _RELEASE < 8\n#  error \"Boost is not configured for Cray compilers prior to version 8, please try the configure script.\"\n#endif\n\n//\n// Check this is a recent EDG based compiler, otherwise we don't support it here:\n//\n#ifndef __EDG_VERSION__\n#  error \"Unsupported Cray compiler, please try running the configure script.\"\n#endif\n\n#include \"boost/config/compiler/common_edg.hpp\"\n\n\n//\n//\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_HAS_NRVO\n#define BOOST_NO_CXX11_VARIADIC_MACROS\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#define BOOST_HAS_NRVO\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_SCOPED_ENUMS\n#define BOOST_NO_CXX11_RVALUE_REFERENCES\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_DECLTYPE\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n#define BOOST_NO_CXX11_CHAR32_T\n#define BOOST_NO_CXX11_CHAR16_T\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n\n//#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG\n#define BOOST_MATH_DISABLE_STD_FPCLASSIFY\n//#define BOOST_HAS_FPCLASSIFY\n\n#define BOOST_SP_USE_PTHREADS \n#define BOOST_AC_USE_PTHREADS \n\n/* everything that follows is working around what are thought to be\n * compiler shortcomings.  Revist all of these regularly.\n */\n\n//#define BOOST_USE_ENUM_STATIC_ASSERT\n//#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS //(this may be implied by the previous #define\n\n// These constants should be provided by the \n// compiler, at least when -hgnu is asserted on the command line.\n\n#ifndef __ATOMIC_RELAXED\n#define __ATOMIC_RELAXED 0\n#define __ATOMIC_CONSUME 1\n#define __ATOMIC_ACQUIRE 2\n#define __ATOMIC_RELEASE 3\n#define __ATOMIC_ACQ_REL 4\n#define __ATOMIC_SEQ_CST 5\n#endif\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/digitalmars.hpp",
    "content": "//  Copyright (C) Christof Meerwald 2003\n//  Copyright (C) Dan Watkins 2003\n//\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  Digital Mars C++ compiler setup:\n#define BOOST_COMPILER __DMC_VERSION_STRING__\n\n#define BOOST_HAS_LONG_LONG\n#define BOOST_HAS_PRAGMA_ONCE\n\n#if !defined(BOOST_STRICT_CONFIG)\n#define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n#define BOOST_NO_OPERATORS_IN_NAMESPACE\n#define BOOST_NO_UNREACHABLE_RETURN_DETECTION\n#define BOOST_NO_SFINAE\n#define BOOST_NO_USING_TEMPLATE\n#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#endif\n\n//\n// has macros:\n#define BOOST_HAS_DIRENT_H\n#define BOOST_HAS_STDINT_H\n#define BOOST_HAS_WINTHREADS\n\n#if (__DMC__ >= 0x847)\n#define BOOST_HAS_EXPM1\n#define BOOST_HAS_LOG1P\n#endif\n\n//\n// Is this really the best way to detect whether the std lib is in namespace std?\n//\n#ifdef __cplusplus\n#include <cstddef>\n#endif\n#if !defined(__STL_IMPORT_VENDOR_CSTD) && !defined(_STLP_IMPORT_VENDOR_CSTD)\n#  define BOOST_NO_STDC_NAMESPACE\n#endif\n\n\n// check for exception handling support:\n#if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS)\n#  define BOOST_NO_EXCEPTIONS\n#endif\n\n//\n// C++0x features\n//\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_CHAR16_T\n#define BOOST_NO_CXX11_CHAR32_T\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_DECLTYPE\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_RVALUE_REFERENCES\n#define BOOST_NO_CXX11_SCOPED_ENUMS\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n#if (__DMC__ <= 0x840)\n#error \"Compiler not supported or configured - please reconfigure\"\n#endif\n//\n// last known and checked version is ...:\n#if (__DMC__ > 0x848)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/gcc.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003.\n//  (C) Copyright Darin Adler 2001 - 2002.\n//  (C) Copyright Jens Maurer 2001 - 2002.\n//  (C) Copyright Beman Dawes 2001 - 2003.\n//  (C) Copyright Douglas Gregor 2002.\n//  (C) Copyright David Abrahams 2002 - 2003.\n//  (C) Copyright Synge Todo 2003.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  GNU C++ compiler setup.\n\n//\n// Define BOOST_GCC so we know this is \"real\" GCC and not some pretender:\n//\n#define BOOST_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)\n#if !defined(__CUDACC__)\n#define BOOST_GCC BOOST_GCC_VERSION\n#endif\n\n#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)\n#  define BOOST_GCC_CXX11\n#endif\n\n#if __GNUC__ == 3\n#  if defined (__PATHSCALE__)\n#     define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#     define BOOST_NO_IS_ABSTRACT\n#  endif\n\n#  if __GNUC_MINOR__ < 4\n#     define BOOST_NO_IS_ABSTRACT\n#  endif\n#  define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#endif\n#if __GNUC__ < 4\n//\n// All problems to gcc-3.x and earlier here:\n//\n#define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#  ifdef __OPEN64__\n#     define BOOST_NO_IS_ABSTRACT\n#  endif\n#endif\n\n// GCC prior to 3.4 had #pragma once too but it didn't work well with filesystem links\n#if BOOST_GCC_VERSION >= 30400\n#define BOOST_HAS_PRAGMA_ONCE\n#endif\n\n#if BOOST_GCC_VERSION < 40400\n// Previous versions of GCC did not completely implement value-initialization:\n// GCC Bug 30111, \"Value-initialization of POD base class doesn't initialize\n// members\", reported by Jonathan Wakely in 2006,\n// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111 (fixed for GCC 4.4)\n// GCC Bug 33916, \"Default constructor fails to initialize array members\",\n// reported by Michael Elizabeth Chastain in 2007,\n// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916 (fixed for GCC 4.2.4)\n// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues\n#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n#endif\n\n#if !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)\n# define BOOST_NO_EXCEPTIONS\n#endif\n\n\n//\n// Threading support: Turn this on unconditionally here (except for\n// those platforms where we can know for sure). It will get turned off again\n// later if no threading API is detected.\n//\n#if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__)\n# define BOOST_HAS_THREADS\n#endif\n\n//\n// gcc has \"long long\"\n// Except on Darwin with standard compliance enabled (-pedantic)\n// Apple gcc helpfully defines this macro we can query\n//\n#if !defined(__DARWIN_NO_LONG_LONG)\n# define BOOST_HAS_LONG_LONG\n#endif\n\n//\n// gcc implements the named return value optimization since version 3.1\n//\n#define BOOST_HAS_NRVO\n\n// Branch prediction hints\n#define BOOST_LIKELY(x) __builtin_expect(x, 1)\n#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)\n\n//\n// Dynamic shared object (DSO) and dynamic-link library (DLL) support\n//\n#if __GNUC__ >= 4\n#  if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && !defined(__CYGWIN__)\n     // All Win32 development environments, including 64-bit Windows and MinGW, define\n     // _WIN32 or one of its variant spellings. Note that Cygwin is a POSIX environment,\n     // so does not define _WIN32 or its variants.\n#    define BOOST_HAS_DECLSPEC\n#    define BOOST_SYMBOL_EXPORT __attribute__((__dllexport__))\n#    define BOOST_SYMBOL_IMPORT __attribute__((__dllimport__))\n#  else\n#    define BOOST_SYMBOL_EXPORT __attribute__((__visibility__(\"default\")))\n#    define BOOST_SYMBOL_IMPORT\n#  endif\n#  define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__(\"default\")))\n#else\n// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined\n#  define BOOST_SYMBOL_EXPORT\n#endif\n\n//\n// RTTI and typeinfo detection is possible post gcc-4.3:\n//\n#if BOOST_GCC_VERSION > 40300\n#  ifndef __GXX_RTTI\n#     ifndef BOOST_NO_TYPEID\n#        define BOOST_NO_TYPEID\n#     endif\n#     ifndef BOOST_NO_RTTI\n#        define BOOST_NO_RTTI\n#     endif\n#  endif\n#endif\n\n//\n// Recent GCC versions have __int128 when in 64-bit mode.\n//\n// We disable this if the compiler is really nvcc as it\n// doesn't actually support __int128 as of CUDA_VERSION=5000\n// even though it defines __SIZEOF_INT128__.\n// See https://svn.boost.org/trac/boost/ticket/8048\n// Only re-enable this for nvcc if you're absolutely sure\n// of the circumstances under which it's supported:\n//\n#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__)\n#  define BOOST_HAS_INT128\n#endif\n//\n// Recent GCC versions have a __float128 native type, we need to\n// include a std lib header to detect this - not ideal, but we'll\n// be including <cstddef> later anyway when we select the std lib.\n//\n#ifdef __cplusplus\n#include <cstddef>\n#else\n#include <stddef.h>\n#endif\n#if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__)\n# define BOOST_HAS_FLOAT128\n#endif\n\n// C++0x features in 4.3.n and later\n//\n#if (BOOST_GCC_VERSION >= 40300) && defined(BOOST_GCC_CXX11)\n// C++0x features are only enabled when -std=c++0x or -std=gnu++0x are\n// passed on the command line, which in turn defines\n// __GXX_EXPERIMENTAL_CXX0X__.\n#  define BOOST_HAS_DECLTYPE\n#  define BOOST_HAS_RVALUE_REFS\n#  define BOOST_HAS_STATIC_ASSERT\n#  define BOOST_HAS_VARIADIC_TMPL\n#else\n#  define BOOST_NO_CXX11_DECLTYPE\n#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n#endif\n\n// C++0x features in 4.4.n and later\n//\n#if (BOOST_GCC_VERSION < 40400) || !defined(BOOST_GCC_CXX11)\n#  define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_CHAR32_T\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#  define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#  define BOOST_NO_CXX11_INLINE_NAMESPACES\n#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#endif\n\n#if BOOST_GCC_VERSION < 40500\n#  define BOOST_NO_SFINAE_EXPR\n#endif\n\n// GCC 4.5 forbids declaration of defaulted functions in private or protected sections\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ == 5) || !defined(BOOST_GCC_CXX11)\n#  define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS\n#endif\n\n// C++0x features in 4.5.0 and later\n//\n#if (BOOST_GCC_VERSION < 40500) || !defined(BOOST_GCC_CXX11)\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#  define BOOST_NO_CXX11_LAMBDAS\n#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#  define BOOST_NO_CXX11_RAW_LITERALS\n#  define BOOST_NO_CXX11_UNICODE_LITERALS\n#endif\n\n// C++0x features in 4.5.1 and later\n//\n#if (BOOST_GCC_VERSION < 40501) || !defined(BOOST_GCC_CXX11)\n// scoped enums have a serious bug in 4.4.0, so define BOOST_NO_CXX11_SCOPED_ENUMS before 4.5.1\n// See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#endif\n\n// C++0x features in 4.6.n and later\n//\n#if (BOOST_GCC_VERSION < 40600) || !defined(BOOST_GCC_CXX11)\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#endif\n\n// C++0x features in 4.7.n and later\n//\n#if (BOOST_GCC_VERSION < 40700) || !defined(BOOST_GCC_CXX11)\n#  define BOOST_NO_CXX11_FINAL\n#  define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#  define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS\n#endif\n\n// C++0x features in 4.8.n and later\n//\n#if (BOOST_GCC_VERSION < 40800) || !defined(BOOST_GCC_CXX11)\n#  define BOOST_NO_CXX11_ALIGNAS\n#endif\n\n// C++0x features in 4.8.1 and later\n//\n#if (BOOST_GCC_VERSION < 40801) || !defined(BOOST_GCC_CXX11)\n#  define BOOST_NO_CXX11_DECLTYPE_N3276\n#  define BOOST_NO_CXX11_REF_QUALIFIERS\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n\n// C++14 features in 4.9.0 and later\n//\n#if (BOOST_GCC_VERSION < 40900) || (__cplusplus < 201300)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#  if !((BOOST_GCC_VERSION >= 40801) && (BOOST_GCC_VERSION < 40900) && defined(BOOST_GCC_CXX11))\n#     define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#  endif\n#endif\n\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n//\n// Unused attribute:\n#if __GNUC__ >= 4\n#  define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__))\n#endif\n//\n// __builtin_unreachable:\n#if BOOST_GCC_VERSION >= 40800\n#define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable();\n#endif\n\n#ifndef BOOST_COMPILER\n#  define BOOST_COMPILER \"GNU C++ version \" __VERSION__\n#endif\n\n// ConceptGCC compiler:\n//   http://www.generic-programming.org/software/ConceptGCC/\n#ifdef __GXX_CONCEPTS__\n#  define BOOST_HAS_CONCEPTS\n#  define BOOST_COMPILER \"ConceptGCC version \" __VERSION__\n#endif\n\n// versions check:\n// we don't know gcc prior to version 3.30:\n#if (BOOST_GCC_VERSION< 30300)\n#  error \"Compiler not configured - please reconfigure\"\n#endif\n//\n// last known and checked version is 4.9:\n#if (BOOST_GCC_VERSION > 40900)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  else\n// we don't emit warnings here anymore since there are no defect macros defined for\n// gcc post 3.4, so any failures are gcc regressions...\n//#     warning \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/gcc_xml.hpp",
    "content": "//  (C) Copyright John Maddock 2006.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  GCC-XML C++ compiler setup:\n\n#  if !defined(__GCCXML_GNUC__) || ((__GCCXML_GNUC__ <= 3) && (__GCCXML_GNUC_MINOR__ <= 3))\n#     define BOOST_NO_IS_ABSTRACT\n#  endif\n\n//\n// Threading support: Turn this on unconditionally here (except for\n// those platforms where we can know for sure). It will get turned off again\n// later if no threading API is detected.\n//\n#if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(linux) && !defined(__linux) && !defined(__linux__)\n# define BOOST_HAS_THREADS\n#endif\n\n//\n// gcc has \"long long\"\n//\n#define BOOST_HAS_LONG_LONG\n\n// C++0x features:\n//\n#  define BOOST_NO_CXX11_CONSTEXPR\n#  define BOOST_NO_CXX11_NULLPTR\n#  define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#  define BOOST_NO_CXX11_DECLTYPE\n#  define BOOST_NO_CXX11_DECLTYPE_N3276\n#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#  define BOOST_NO_CXX11_VARIADIC_MACROS\n#  define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_CHAR32_T\n#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#  define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#  define BOOST_NO_SFINAE_EXPR\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#  define BOOST_NO_CXX11_LAMBDAS\n#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#  define BOOST_NO_CXX11_RANGE_BASED_FOR\n#  define BOOST_NO_CXX11_RAW_LITERALS\n#  define BOOST_NO_CXX11_UNICODE_LITERALS\n#  define BOOST_NO_CXX11_NOEXCEPT\n#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#  define BOOST_NO_CXX11_ALIGNAS\n#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#  define BOOST_NO_CXX11_INLINE_NAMESPACES\n#  define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n#define BOOST_COMPILER \"GCC-XML C++ version \" __GCCXML__\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/greenhills.hpp",
    "content": "//  (C) Copyright John Maddock 2001. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Greenhills C++ compiler setup:\n\n#define BOOST_COMPILER \"Greenhills C++ version \" BOOST_STRINGIZE(__ghs)\n\n#include \"boost/config/compiler/common_edg.hpp\"\n\n//\n// versions check:\n// we don't support Greenhills prior to version 0:\n#if __ghs < 0\n#  error \"Compiler not supported or configured - please reconfigure\"\n#endif\n//\n// last known and checked version is 0:\n#if (__ghs > 0)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/hp_acc.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003.\n//  (C) Copyright Jens Maurer 2001 - 2003.\n//  (C) Copyright Aleksey Gurtovoy 2002.\n//  (C) Copyright David Abrahams 2002 - 2003.\n//  (C) Copyright Toon Knapen 2003.\n//  (C) Copyright Boris Gubenko 2006 - 2007.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  HP aCC C++ compiler setup:\n\n#if defined(__EDG__)\n#include \"boost/config/compiler/common_edg.hpp\"\n#endif\n\n#if (__HP_aCC <= 33100)\n#    define BOOST_NO_INTEGRAL_INT64_T\n#    define BOOST_NO_OPERATORS_IN_NAMESPACE\n#  if !defined(_NAMESPACE_STD)\n#     define BOOST_NO_STD_LOCALE\n#     define BOOST_NO_STRINGSTREAM\n#  endif\n#endif\n\n#if (__HP_aCC <= 33300)\n// member templates are sufficiently broken that we disable them for now\n#    define BOOST_NO_MEMBER_TEMPLATES\n#    define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS\n#    define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE\n#endif\n\n#if (__HP_aCC <= 38000)\n#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#endif\n\n#if (__HP_aCC > 50000) && (__HP_aCC < 60000)\n#    define BOOST_NO_UNREACHABLE_RETURN_DETECTION\n#    define BOOST_NO_TEMPLATE_TEMPLATES\n#    define BOOST_NO_SWPRINTF\n#    define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS\n#    define BOOST_NO_IS_ABSTRACT\n#    define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n#endif\n\n// optional features rather than defects:\n#if (__HP_aCC >= 33900)\n#    define BOOST_HAS_LONG_LONG\n#    define BOOST_HAS_PARTIAL_STD_ALLOCATOR\n#endif\n\n#if (__HP_aCC >= 50000 ) && (__HP_aCC <= 53800 ) || (__HP_aCC < 31300 )\n#    define BOOST_NO_MEMBER_TEMPLATE_KEYWORD\n#endif\n\n// This macro should not be defined when compiling in strict ansi\n// mode, but, currently, we don't have the ability to determine\n// what standard mode we are compiling with. Some future version\n// of aCC6 compiler will provide predefined macros reflecting the\n// compilation options, including the standard mode.\n#if (__HP_aCC >= 60000) || ((__HP_aCC > 38000) && defined(__hpxstd98))\n#    define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#endif\n\n#define BOOST_COMPILER \"HP aCC version \" BOOST_STRINGIZE(__HP_aCC)\n\n//\n// versions check:\n// we don't support HP aCC prior to version 33000:\n#if __HP_aCC < 33000\n#  error \"Compiler not supported or configured - please reconfigure\"\n#endif\n\n//\n// Extended checks for supporting aCC on PA-RISC\n#if __HP_aCC > 30000 && __HP_aCC < 50000\n#  if __HP_aCC < 38000\n      // versions prior to version A.03.80 not supported\n#     error \"Compiler version not supported - version A.03.80 or higher is required\"\n#  elif !defined(__hpxstd98)\n      // must compile using the option +hpxstd98 with version A.03.80 and above\n#     error \"Compiler option '+hpxstd98' is required for proper support\"\n#  endif //PA-RISC\n#endif\n\n//\n// C++0x features\n//\n//   See boost\\config\\suffix.hpp for BOOST_NO_LONG_LONG\n//\n#if !defined(__EDG__)\n\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_CHAR16_T\n#define BOOST_NO_CXX11_CHAR32_T\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_DECLTYPE\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_RVALUE_REFERENCES\n#define BOOST_NO_CXX11_SCOPED_ENUMS\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n\n/*\n  See https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443331 and\n      https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443436\n*/\n\n#if (__HP_aCC < 62500) || !defined(HP_CXX0x_SOURCE)\n  #define BOOST_NO_CXX11_VARIADIC_MACROS\n#endif\n\n#endif\n\n//\n// last known and checked version for HP-UX/ia64 is 61300\n// last known and checked version for PA-RISC is 38000\n#if ((__HP_aCC > 61300) || ((__HP_aCC > 38000) && defined(__hpxstd98)))\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/intel.hpp",
    "content": "//  (C) Copyright John Maddock 2001-8.\n//  (C) Copyright Peter Dimov 2001.\n//  (C) Copyright Jens Maurer 2001.\n//  (C) Copyright David Abrahams 2002 - 2003.\n//  (C) Copyright Aleksey Gurtovoy 2002 - 2003.\n//  (C) Copyright Guillaume Melquiond 2002 - 2003.\n//  (C) Copyright Beman Dawes 2003.\n//  (C) Copyright Martin Wille 2003.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Intel compiler setup:\n\n#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1500) && (defined(_MSC_VER) || defined(__GNUC__))\n\n#ifdef _MSC_VER\n\n#include <boost/config/compiler/visualc.hpp>\n\n#undef BOOST_MSVC\n#undef BOOST_MSVC_FULL_VER\n\n#if (__INTEL_COMPILER >= 1500) && (_MSC_VER >= 1900)\n//\n// These appear to be supported, even though VC++ may not support them:\n//\n#define BOOST_HAS_EXPM1\n#define BOOST_HAS_LOG1P\n#undef BOOST_NO_CXX14_BINARY_LITERALS\n// This one may be a little risky to enable??\n#undef BOOST_NO_SFINAE_EXPR\n\n#endif\n\n#else\n\n#include <boost/config/compiler/gcc.hpp>\n\n#undef BOOST_GCC_VERSION\n#undef BOOST_GCC_CXX11\n\n#endif\n\n#undef BOOST_COMPILER\n\n#if defined(__INTEL_COMPILER)\n#if __INTEL_COMPILER == 9999\n#  define BOOST_INTEL_CXX_VERSION 1200 // Intel bug in 12.1.\n#else\n#  define BOOST_INTEL_CXX_VERSION __INTEL_COMPILER\n#endif\n#elif defined(__ICL)\n#  define BOOST_INTEL_CXX_VERSION __ICL\n#elif defined(__ICC)\n#  define BOOST_INTEL_CXX_VERSION __ICC\n#elif defined(__ECC)\n#  define BOOST_INTEL_CXX_VERSION __ECC\n#endif\n\n// Flags determined by comparing output of 'icpc -dM -E' with and without '-std=c++0x'\n#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && (__STDC_HOSTED__ && (BOOST_INTEL_CXX_VERSION <= 1200))) || defined(__GXX_EXPERIMENTAL_CPP0X__) || defined(__GXX_EXPERIMENTAL_CXX0X__)\n#  define BOOST_INTEL_STDCXX0X\n#endif\n#if defined(_MSC_VER) && (_MSC_VER >= 1600)\n#  define BOOST_INTEL_STDCXX0X\n#endif\n\n#ifdef __GNUC__\n#  define BOOST_INTEL_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)\n#endif\n\n#if !defined(BOOST_COMPILER)\n#  if defined(BOOST_INTEL_STDCXX0X)\n#    define BOOST_COMPILER \"Intel C++ C++0x mode version \" BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION)\n#  else\n#    define BOOST_COMPILER \"Intel C++ version \" BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION)\n#  endif\n#endif\n\n#define BOOST_INTEL BOOST_INTEL_CXX_VERSION\n\n#if defined(_WIN32) || defined(_WIN64)\n#  define BOOST_INTEL_WIN BOOST_INTEL\n#else\n#  define BOOST_INTEL_LINUX BOOST_INTEL\n#endif\n\n#else\n\n#include \"boost/config/compiler/common_edg.hpp\"\n\n#if defined(__INTEL_COMPILER)\n#if __INTEL_COMPILER == 9999\n#  define BOOST_INTEL_CXX_VERSION 1200 // Intel bug in 12.1.\n#else\n#  define BOOST_INTEL_CXX_VERSION __INTEL_COMPILER\n#endif\n#elif defined(__ICL)\n#  define BOOST_INTEL_CXX_VERSION __ICL\n#elif defined(__ICC)\n#  define BOOST_INTEL_CXX_VERSION __ICC\n#elif defined(__ECC)\n#  define BOOST_INTEL_CXX_VERSION __ECC\n#endif\n\n// Flags determined by comparing output of 'icpc -dM -E' with and without '-std=c++0x'\n#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && (__STDC_HOSTED__ && (BOOST_INTEL_CXX_VERSION <= 1200))) || defined(__GXX_EXPERIMENTAL_CPP0X__) || defined(__GXX_EXPERIMENTAL_CXX0X__)\n#  define BOOST_INTEL_STDCXX0X\n#endif\n#if defined(_MSC_VER) && (_MSC_VER >= 1600)\n#  define BOOST_INTEL_STDCXX0X\n#endif\n\n#ifdef __GNUC__\n#  define BOOST_INTEL_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)\n#endif\n\n#if !defined(BOOST_COMPILER)\n#  if defined(BOOST_INTEL_STDCXX0X)\n#    define BOOST_COMPILER \"Intel C++ C++0x mode version \" BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION)\n#  else\n#    define BOOST_COMPILER \"Intel C++ version \" BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION)\n#  endif\n#endif\n\n#define BOOST_INTEL BOOST_INTEL_CXX_VERSION\n\n#if defined(_WIN32) || defined(_WIN64)\n#  define BOOST_INTEL_WIN BOOST_INTEL\n#else\n#  define BOOST_INTEL_LINUX BOOST_INTEL\n#endif\n\n#if (BOOST_INTEL_CXX_VERSION <= 600)\n\n#  if defined(_MSC_VER) && (_MSC_VER <= 1300) // added check for <= VC 7 (Peter Dimov)\n\n// Boost libraries assume strong standard conformance unless otherwise\n// indicated by a config macro. As configured by Intel, the EDG front-end\n// requires certain compiler options be set to achieve that strong conformance.\n// Particularly /Qoption,c,--arg_dep_lookup (reported by Kirk Klobe & Thomas Witt)\n// and /Zc:wchar_t,forScope. See boost-root/tools/build/intel-win32-tools.jam for\n// details as they apply to particular versions of the compiler. When the\n// compiler does not predefine a macro indicating if an option has been set,\n// this config file simply assumes the option has been set.\n// Thus BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP will not be defined, even if\n// the compiler option is not enabled.\n\n#     define BOOST_NO_SWPRINTF\n#  endif\n\n// Void returns, 64 bit integrals don't work when emulating VC 6 (Peter Dimov)\n\n#  if defined(_MSC_VER) && (_MSC_VER <= 1200)\n#     define BOOST_NO_VOID_RETURNS\n#     define BOOST_NO_INTEGRAL_INT64_T\n#  endif\n\n#endif\n\n#if (BOOST_INTEL_CXX_VERSION <= 710) && defined(_WIN32)\n#  define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS\n#endif\n\n// See http://aspn.activestate.com/ASPN/Mail/Message/boost/1614864\n#if BOOST_INTEL_CXX_VERSION < 600\n#  define BOOST_NO_INTRINSIC_WCHAR_T\n#else\n// We should test the macro _WCHAR_T_DEFINED to check if the compiler\n// supports wchar_t natively. *BUT* there is a problem here: the standard\n// headers define this macro if they typedef wchar_t. Anyway, we're lucky\n// because they define it without a value, while Intel C++ defines it\n// to 1. So we can check its value to see if the macro was defined natively\n// or not.\n// Under UNIX, the situation is exactly the same, but the macro _WCHAR_T\n// is used instead.\n#  if ((_WCHAR_T_DEFINED + 0) == 0) && ((_WCHAR_T + 0) == 0)\n#    define BOOST_NO_INTRINSIC_WCHAR_T\n#  endif\n#endif\n\n#if defined(__GNUC__) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)\n//\n// Figure out when Intel is emulating this gcc bug\n// (All Intel versions prior to 9.0.26, and versions\n// later than that if they are set up to emulate gcc 3.2\n// or earlier):\n//\n#  if ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 2)) || (BOOST_INTEL < 900) || (__INTEL_COMPILER_BUILD_DATE < 20050912)\n#     define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#  endif\n#endif\n#if (defined(__GNUC__) && (__GNUC__ < 4)) || (defined(_WIN32) && (BOOST_INTEL_CXX_VERSION <= 1200)) || (BOOST_INTEL_CXX_VERSION <= 1200)\n// GCC or VC emulation:\n#define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#endif\n//\n// Verify that we have actually got BOOST_NO_INTRINSIC_WCHAR_T\n// set correctly, if we don't do this now, we will get errors later\n// in type_traits code among other things, getting this correct\n// for the Intel compiler is actually remarkably fragile and tricky:\n//\n#ifdef __cplusplus\n#if defined(BOOST_NO_INTRINSIC_WCHAR_T)\n#include <cwchar>\ntemplate< typename T > struct assert_no_intrinsic_wchar_t;\ntemplate<> struct assert_no_intrinsic_wchar_t<wchar_t> { typedef void type; };\n// if you see an error here then you need to unset BOOST_NO_INTRINSIC_WCHAR_T\n// where it is defined above:\ntypedef assert_no_intrinsic_wchar_t<unsigned short>::type assert_no_intrinsic_wchar_t_;\n#else\ntemplate< typename T > struct assert_intrinsic_wchar_t;\ntemplate<> struct assert_intrinsic_wchar_t<wchar_t> {};\n// if you see an error here then define BOOST_NO_INTRINSIC_WCHAR_T on the command line:\ntemplate<> struct assert_intrinsic_wchar_t<unsigned short> {};\n#endif\n#endif\n\n#if defined(_MSC_VER) && (_MSC_VER+0 >= 1000)\n#  if _MSC_VER >= 1200\n#     define BOOST_HAS_MS_INT64\n#  endif\n#  define BOOST_NO_SWPRINTF\n#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#elif defined(_WIN32)\n#  define BOOST_DISABLE_WIN32\n#endif\n\n// I checked version 6.0 build 020312Z, it implements the NRVO.\n// Correct this as you find out which version of the compiler\n// implemented the NRVO first.  (Daniel Frey)\n#if (BOOST_INTEL_CXX_VERSION >= 600)\n#  define BOOST_HAS_NRVO\n#endif\n\n// Branch prediction hints\n// I'm not sure 8.0 was the first version to support these builtins,\n// update the condition if the version is not accurate. (Andrey Semashev)\n#if defined(__GNUC__) && BOOST_INTEL_CXX_VERSION >= 800\n#define BOOST_LIKELY(x) __builtin_expect(x, 1)\n#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)\n#endif\n\n// RTTI\n// __RTTI is the EDG macro\n// __INTEL_RTTI__ is the Intel macro\n// __GXX_RTTI is the g++ macro\n// _CPPRTTI is the MSVC++ macro\n#if !defined(__RTTI) && !defined(__INTEL_RTTI__) && !defined(__GXX_RTTI) && !defined(_CPPRTTI)\n\n#if !defined(BOOST_NO_RTTI)\n# define BOOST_NO_RTTI\n#endif\n\n// in MS mode, static typeid works even when RTTI is off\n#if !defined(_MSC_VER) && !defined(BOOST_NO_TYPEID)\n# define BOOST_NO_TYPEID\n#endif\n\n#endif\n\n//\n// versions check:\n// we don't support Intel prior to version 6.0:\n#if BOOST_INTEL_CXX_VERSION < 600\n#  error \"Compiler not supported or configured - please reconfigure\"\n#endif\n\n// Intel on MacOS requires\n#if defined(__APPLE__) && defined(__INTEL_COMPILER)\n#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#endif\n\n// Intel on Altix Itanium\n#if defined(__itanium__) && defined(__INTEL_COMPILER)\n#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#endif\n\n//\n// An attempt to value-initialize a pointer-to-member may trigger an\n// internal error on Intel <= 11.1 (last checked version), as was\n// reported by John Maddock, Intel support issue 589832, May 2010.\n// Moreover, according to test results from Huang-Vista-x86_32_intel,\n// intel-vc9-win-11.1 may leave a non-POD array uninitialized, in some\n// cases when it should be value-initialized.\n// (Niels Dekker, LKEB, May 2010)\n// Apparently Intel 12.1 (compiler version number 9999 !!) has the same issue (compiler regression).\n#if defined(__INTEL_COMPILER)\n#  if (__INTEL_COMPILER <= 1110) || (__INTEL_COMPILER == 9999) || (defined(_WIN32) && (__INTEL_COMPILER < 1600))\n#    define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n#  endif\n#endif\n\n//\n// Dynamic shared object (DSO) and dynamic-link library (DLL) support\n//\n#if defined(__GNUC__) && (__GNUC__ >= 4)\n#  define BOOST_SYMBOL_EXPORT __attribute__((visibility(\"default\")))\n#  define BOOST_SYMBOL_IMPORT\n#  define BOOST_SYMBOL_VISIBLE __attribute__((visibility(\"default\")))\n#endif\n//\n// C++0x features\n// For each feature we need to check both the Intel compiler version, \n// and the version of MSVC or GCC that we are emulating.\n// See http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler/\n// for a list of which features were implemented in which Intel releases.\n//\n#if defined(BOOST_INTEL_STDCXX0X)\n// BOOST_NO_CXX11_CONSTEXPR:\n#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && !defined(_MSC_VER)\n// Available in earlier Intel versions, but fail our tests:\n#  undef BOOST_NO_CXX11_CONSTEXPR\n#endif\n// BOOST_NO_CXX11_NULLPTR:\n#if (BOOST_INTEL_CXX_VERSION >= 1210) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))\n#  undef BOOST_NO_CXX11_NULLPTR\n#endif\n// BOOST_NO_CXX11_TEMPLATE_ALIASES\n#if (BOOST_INTEL_CXX_VERSION >= 1210) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40700)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))\n#  undef BOOST_NO_CXX11_TEMPLATE_ALIASES\n#endif\n\n// BOOST_NO_CXX11_DECLTYPE\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40300)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))\n#  undef BOOST_NO_CXX11_DECLTYPE\n#endif\n\n// BOOST_NO_CXX11_DECLTYPE_N3276\n#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40800)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))\n#  undef BOOST_NO_CXX11_DECLTYPE_N3276\n#endif\n\n// BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40300)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))\n#  undef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#endif\n\n// BOOST_NO_CXX11_RVALUE_REFERENCES\n#if (BOOST_INTEL_CXX_VERSION >= 1300) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40300)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))\n// This is available from earlier Intel versions, but breaks Filesystem and other libraries:\n#  undef BOOST_NO_CXX11_RVALUE_REFERENCES\n#endif\n\n// BOOST_NO_CXX11_STATIC_ASSERT\n#if (BOOST_INTEL_CXX_VERSION >= 1110) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40300)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))\n#  undef BOOST_NO_CXX11_STATIC_ASSERT\n#endif\n\n// BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))\n#  undef BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#endif\n\n// BOOST_NO_CXX11_VARIADIC_MACROS\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40200)) && (!defined(_MSC_VER) || (_MSC_VER >= 1400))\n#  undef BOOST_NO_CXX11_VARIADIC_MACROS\n#endif\n\n// BOOST_NO_CXX11_AUTO_DECLARATIONS\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))\n#  undef BOOST_NO_CXX11_AUTO_DECLARATIONS\n#endif\n\n// BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))\n#  undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#endif\n\n// BOOST_NO_CXX11_CHAR16_T\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))\n#  undef BOOST_NO_CXX11_CHAR16_T\n#endif\n\n// BOOST_NO_CXX11_CHAR32_T\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))\n#  undef BOOST_NO_CXX11_CHAR32_T\n#endif\n\n// BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))\n#  undef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#endif\n\n// BOOST_NO_CXX11_DELETED_FUNCTIONS\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))\n#  undef BOOST_NO_CXX11_DELETED_FUNCTIONS\n#endif\n\n// BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 1700))\n#  undef BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#endif\n\n// BOOST_NO_CXX11_SCOPED_ENUMS\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40501)) && (!defined(_MSC_VER) || (_MSC_VER >= 1700))\n// This is available but broken in earlier Intel releases.\n#  undef BOOST_NO_CXX11_SCOPED_ENUMS\n#endif\n\n// BOOST_NO_SFINAE_EXPR\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))\n#  undef BOOST_NO_SFINAE_EXPR\n#endif\n\n// BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))\n// This is available in earlier Intel releases, but breaks Multiprecision:\n#  undef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#endif\n\n// BOOST_NO_CXX11_LAMBDAS\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))\n#  undef BOOST_NO_CXX11_LAMBDAS\n#endif\n\n// BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500))\n#  undef BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#endif\n\n// BOOST_NO_CXX11_RANGE_BASED_FOR\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && (!defined(_MSC_VER) || (_MSC_VER >= 1700))\n#  undef BOOST_NO_CXX11_RANGE_BASED_FOR\n#endif\n\n// BOOST_NO_CXX11_RAW_LITERALS\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))\n#  undef BOOST_NO_CXX11_RAW_LITERALS\n#endif\n\n// BOOST_NO_CXX11_UNICODE_LITERALS\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))\n#  undef BOOST_NO_CXX11_UNICODE_LITERALS\n#endif\n\n// BOOST_NO_CXX11_NOEXCEPT\n#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))\n// Available in earlier Intel release, but generates errors when used with \n// conditional exception specifications, for example in multiprecision:\n#  undef BOOST_NO_CXX11_NOEXCEPT\n#endif\n\n// BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))\n#  undef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#endif\n\n// BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40700)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 190021730))\n#  undef BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#endif\n\n// BOOST_NO_CXX11_ALIGNAS\n#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40800)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 190021730))\n#  undef BOOST_NO_CXX11_ALIGNAS\n#endif\n\n// BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))\n#  undef BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#endif\n\n// BOOST_NO_CXX11_INLINE_NAMESPACES\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 190021730))\n#  undef BOOST_NO_CXX11_INLINE_NAMESPACES\n#endif\n\n// BOOST_NO_CXX11_REF_QUALIFIERS\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40800)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 190021730))\n#  undef BOOST_NO_CXX11_REF_QUALIFIERS\n#endif\n\n// BOOST_NO_CXX11_FINAL\n#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40700)) && (!defined(_MSC_VER) || (_MSC_VER >= 1700))\n#  undef BOOST_NO_CXX11_FINAL\n#endif\n\n#endif\n\n//\n// Broken in all versions up to 15:\n#define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS\n\n#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION <= 1310)\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#endif\n\n#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION == 1400)\n// A regression in Intel's compiler means that <tuple> seems to be broken in this release as well as <future> :\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#endif\n\n#if (BOOST_INTEL_CXX_VERSION < 1200)\n//\n// fenv.h appears not to work with Intel prior to 12.0:\n//\n#  define BOOST_NO_FENV_H\n#endif\n\n// Intel 13.10 fails to access defaulted functions of a base class declared in private or protected sections,\n// producing the following errors:\n// error #453: protected function \"...\" (declared at ...\") is not accessible through a \"...\" pointer or object\n#if (BOOST_INTEL_CXX_VERSION <= 1310)\n#  define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS\n#endif\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1600)\n#  define BOOST_HAS_STDINT_H\n#endif\n\n#if defined(__LP64__) && defined(__GNUC__) && (BOOST_INTEL_CXX_VERSION >= 1310) && !defined(__CUDACC__)\n#  define BOOST_HAS_INT128\n#endif\n\n#endif\n//\n// last known and checked version:\n#if (BOOST_INTEL_CXX_VERSION > 1500)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  elif defined(_MSC_VER)\n//\n//      We don't emit this warning any more, since we have so few\n//      defect macros set anyway (just the one).\n//\n//#     pragma message(\"Unknown compiler version - please run the configure tests and report the results\")\n#  endif\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/kai.hpp",
    "content": "//  (C) Copyright John Maddock 2001. \n//  (C) Copyright David Abrahams 2002. \n//  (C) Copyright Aleksey Gurtovoy 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Kai C++ compiler setup:\n\n#include \"boost/config/compiler/common_edg.hpp\"\n\n#   if (__KCC_VERSION <= 4001) || !defined(BOOST_STRICT_CONFIG)\n      // at least on Sun, the contents of <cwchar> is not in namespace std\n#     define BOOST_NO_STDC_NAMESPACE\n#   endif\n\n// see also common_edg.hpp which needs a special check for __KCC\n# if !defined(_EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)\n#     define BOOST_NO_EXCEPTIONS\n# endif\n\n//\n// last known and checked version is 4001:\n#if (__KCC_VERSION > 4001)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/metrowerks.hpp",
    "content": "//  (C) Copyright John Maddock 2001.\n//  (C) Copyright Darin Adler 2001.\n//  (C) Copyright Peter Dimov 2001.\n//  (C) Copyright David Abrahams 2001 - 2002.\n//  (C) Copyright Beman Dawes 2001 - 2003.\n//  (C) Copyright Stefan Slapeta 2004.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Metrowerks C++ compiler setup:\n\n// locale support is disabled when linking with the dynamic runtime\n#   ifdef _MSL_NO_LOCALE\n#     define BOOST_NO_STD_LOCALE\n#   endif\n\n#   if __MWERKS__ <= 0x2301  // 5.3\n#     define BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#     define BOOST_NO_POINTER_TO_MEMBER_CONST\n#     define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS\n#     define BOOST_NO_MEMBER_TEMPLATE_KEYWORD\n#   endif\n\n#   if __MWERKS__ <= 0x2401  // 6.2\n//#     define BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#   endif\n\n#   if(__MWERKS__ <= 0x2407)  // 7.x\n#     define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS\n#     define BOOST_NO_UNREACHABLE_RETURN_DETECTION\n#   endif\n\n#   if(__MWERKS__ <= 0x3003)  // 8.x\n#     define BOOST_NO_SFINAE\n#    endif\n\n// the \"|| !defined(BOOST_STRICT_CONFIG)\" part should apply to the last\n// tested version *only*:\n#   if(__MWERKS__ <= 0x3207) || !defined(BOOST_STRICT_CONFIG) // 9.6\n#     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n#     define BOOST_NO_IS_ABSTRACT\n#    endif\n\n#if !__option(wchar_type)\n#   define BOOST_NO_INTRINSIC_WCHAR_T\n#endif\n\n#if !__option(exceptions) && !defined(BOOST_NO_EXCEPTIONS)\n#   define BOOST_NO_EXCEPTIONS\n#endif\n\n#if (__INTEL__ && _WIN32) || (__POWERPC__ && macintosh)\n#   if __MWERKS__ == 0x3000\n#     define BOOST_COMPILER_VERSION 8.0\n#   elif __MWERKS__ == 0x3001\n#     define BOOST_COMPILER_VERSION 8.1\n#   elif __MWERKS__ == 0x3002\n#     define BOOST_COMPILER_VERSION 8.2\n#   elif __MWERKS__ == 0x3003\n#     define BOOST_COMPILER_VERSION 8.3\n#   elif __MWERKS__ == 0x3200\n#     define BOOST_COMPILER_VERSION 9.0\n#   elif __MWERKS__ == 0x3201\n#     define BOOST_COMPILER_VERSION 9.1\n#   elif __MWERKS__ == 0x3202\n#     define BOOST_COMPILER_VERSION 9.2\n#   elif __MWERKS__ == 0x3204\n#     define BOOST_COMPILER_VERSION 9.3\n#   elif __MWERKS__ == 0x3205\n#     define BOOST_COMPILER_VERSION 9.4\n#   elif __MWERKS__ == 0x3206\n#     define BOOST_COMPILER_VERSION 9.5\n#   elif __MWERKS__ == 0x3207\n#     define BOOST_COMPILER_VERSION 9.6\n#   else\n#     define BOOST_COMPILER_VERSION __MWERKS__\n#   endif\n#else\n#  define BOOST_COMPILER_VERSION __MWERKS__\n#endif\n\n//\n// C++0x features\n//\n//   See boost\\config\\suffix.hpp for BOOST_NO_LONG_LONG\n//\n#if __MWERKS__ > 0x3206 && __option(rvalue_refs)\n#  define BOOST_HAS_RVALUE_REFS\n#else\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#endif\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_CHAR16_T\n#define BOOST_NO_CXX11_CHAR32_T\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_DECLTYPE\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_SCOPED_ENUMS\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_VARIADIC_MACROS\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n#define BOOST_COMPILER \"Metrowerks CodeWarrior C++ version \" BOOST_STRINGIZE(BOOST_COMPILER_VERSION)\n\n//\n// versions check:\n// we don't support Metrowerks prior to version 5.3:\n#if __MWERKS__ < 0x2301\n#  error \"Compiler not supported or configured - please reconfigure\"\n#endif\n//\n// last known and checked version:\n#if (__MWERKS__ > 0x3205)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n\n\n\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/mpw.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2002.\n//  (C) Copyright Aleksey Gurtovoy 2002.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  MPW C++ compilers setup:\n\n#   if    defined(__SC__)\n#     define BOOST_COMPILER \"MPW SCpp version \" BOOST_STRINGIZE(__SC__)\n#   elif defined(__MRC__)\n#     define BOOST_COMPILER \"MPW MrCpp version \" BOOST_STRINGIZE(__MRC__)\n#   else\n#     error \"Using MPW compiler configuration by mistake.  Please update.\"\n#   endif\n\n//\n// MPW 8.90:\n//\n#if (MPW_CPLUS <= 0x890) || !defined(BOOST_STRICT_CONFIG)\n#  define BOOST_NO_CV_SPECIALIZATIONS\n#  define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS\n#  define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS\n#  define BOOST_NO_INCLASS_MEMBER_INITIALIZATION\n#  define BOOST_NO_INTRINSIC_WCHAR_T\n#  define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#  define BOOST_NO_USING_TEMPLATE\n\n#  define BOOST_NO_CWCHAR\n#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n\n#  define BOOST_NO_STD_ALLOCATOR /* actually a bug with const reference overloading */\n\n#endif\n\n//\n// C++0x features\n//\n//   See boost\\config\\suffix.hpp for BOOST_NO_LONG_LONG\n//\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_CHAR16_T\n#define BOOST_NO_CXX11_CHAR32_T\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_DECLTYPE\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_RVALUE_REFERENCES\n#define BOOST_NO_CXX11_SCOPED_ENUMS\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_VARIADIC_MACROS\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n//\n// versions check:\n// we don't support MPW prior to version 8.9:\n#if MPW_CPLUS < 0x890\n#  error \"Compiler not supported or configured - please reconfigure\"\n#endif\n//\n// last known and checked version is 0x890:\n#if (MPW_CPLUS > 0x890)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/nvcc.hpp",
    "content": "//  (C) Copyright Eric Jourdanneau, Joel Falcou 2010\n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  NVIDIA CUDA C++ compiler setup\n\n#ifndef BOOST_COMPILER\n#  define BOOST_COMPILER \"NVIDIA CUDA C++ Compiler\"\n#endif\n\n// NVIDIA Specific support\n// BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device\n#define BOOST_GPU_ENABLED __host__ __device__\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/pathscale.hpp",
    "content": "//  (C) Copyright Bryce Lelbach 2011\n\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n// PathScale EKOPath C++ Compiler\n\n#ifndef BOOST_COMPILER\n#  define BOOST_COMPILER \"PathScale EKOPath C++ Compiler version \" __PATHSCALE__\n#endif\n\n#if __PATHCC__ >= 4\n#  define BOOST_MSVC6_MEMBER_TEMPLATES\n#  define BOOST_HAS_UNISTD_H\n#  define BOOST_HAS_STDINT_H\n#  define BOOST_HAS_SIGACTION\n#  define BOOST_HAS_SCHED_YIELD\n#  define BOOST_HAS_THREADS\n#  define BOOST_HAS_PTHREADS\n#  define BOOST_HAS_PTHREAD_YIELD\n#  define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#  define BOOST_HAS_PARTIAL_STD_ALLOCATOR\n#  define BOOST_HAS_NRVO\n#  define BOOST_HAS_NL_TYPES_H\n#  define BOOST_HAS_NANOSLEEP\n#  define BOOST_HAS_LONG_LONG\n#  define BOOST_HAS_LOG1P\n#  define BOOST_HAS_GETTIMEOFDAY\n#  define BOOST_HAS_EXPM1\n#  define BOOST_HAS_DIRENT_H\n#  define BOOST_HAS_CLOCK_GETTIME\n#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#  define BOOST_NO_CXX11_UNICODE_LITERALS\n#  define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n#  define BOOST_NO_SFINAE_EXPR\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#  define BOOST_NO_CXX11_RANGE_BASED_FOR\n#  define BOOST_NO_CXX11_RAW_LITERALS\n#  define BOOST_NO_CXX11_NULLPTR\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_NOEXCEPT\n#  define BOOST_NO_CXX11_LAMBDAS\n#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#  define BOOST_NO_MS_INT64_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#  define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#  define BOOST_NO_CXX11_DECLTYPE\n#  define BOOST_NO_CXX11_DECLTYPE_N3276\n#  define BOOST_NO_CXX11_CONSTEXPR\n#  define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n#  define BOOST_NO_CXX11_CHAR32_T\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#  define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#  define BOOST_NO_CXX11_ALIGNAS\n#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#  define BOOST_NO_CXX11_INLINE_NAMESPACES\n#  define BOOST_NO_CXX11_REF_QUALIFIERS\n#  define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/pgi.hpp",
    "content": "//  (C) Copyright Noel Belcourt 2007.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  PGI C++ compiler setup:\n\n#define BOOST_COMPILER_VERSION __PGIC__##__PGIC_MINOR__\n#define BOOST_COMPILER \"PGI compiler version \" BOOST_STRINGIZE(BOOST_COMPILER_VERSION)\n\n//\n// Threading support:\n// Turn this on unconditionally here, it will get turned off again later\n// if no threading API is detected.\n//\n\n#if __PGIC__ >= 11\n\n// options requested by configure --enable-test\n#define BOOST_HAS_PTHREADS\n#define BOOST_HAS_THREADS\n#define BOOST_HAS_PTHREAD_YIELD\n#define BOOST_HAS_NRVO\n#define BOOST_HAS_LONG_LONG\n\n// options --enable-test wants undefined\n#undef BOOST_NO_STDC_NAMESPACE\n#undef BOOST_NO_EXCEPTION_STD_NAMESPACE\n#undef BOOST_DEDUCED_TYPENAME\n\n#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n\n#elif __PGIC__ >= 10\n\n// options requested by configure --enable-test\n#define BOOST_HAS_THREADS\n#define BOOST_HAS_NRVO\n#define BOOST_HAS_LONG_LONG\n#if defined(linux) || defined(__linux) || defined(__linux__)\n#  define BOOST_HAS_STDINT_H\n#endif\n\n// options --enable-test wants undefined\n#undef BOOST_NO_STDC_NAMESPACE\n#undef BOOST_NO_EXCEPTION_STD_NAMESPACE\n#undef BOOST_DEDUCED_TYPENAME\n\n#elif __PGIC__ >= 7\n\n#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#define BOOST_NO_SWPRINTF\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n\n#else\n\n#  error \"Pgi compiler not configured - please reconfigure\"\n\n#endif\n//\n// C++0x features\n//\n//   See boost\\config\\suffix.hpp for BOOST_NO_LONG_LONG\n//\n#define BOOST_NO_CXX11_CHAR16_T\n#define BOOST_NO_CXX11_CHAR32_T\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_DECLTYPE\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_NUMERIC_LIMITS\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_RVALUE_REFERENCES\n#define BOOST_NO_CXX11_SCOPED_ENUMS\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_SWPRINTF\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_VARIADIC_MACROS\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n\n#define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#define BOOST_NO_CXX11_HDR_TYPEINDEX\n#define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#define BOOST_NO_CXX11_HDR_TUPLE\n#define BOOST_NO_CXX11_HDR_THREAD\n#define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#define BOOST_NO_CXX11_HDR_REGEX\n#define BOOST_NO_CXX11_HDR_RATIO\n#define BOOST_NO_CXX11_HDR_RANDOM\n#define BOOST_NO_CXX11_HDR_MUTEX\n#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#define BOOST_NO_CXX11_HDR_FUTURE\n#define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#define BOOST_NO_CXX11_HDR_CODECVT\n#define BOOST_NO_CXX11_HDR_CHRONO\n#define BOOST_NO_CXX11_HDR_ARRAY\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n//\n// version check:\n// probably nothing to do here?\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/sgi_mipspro.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  SGI C++ compiler setup:\n\n#define BOOST_COMPILER \"SGI Irix compiler version \" BOOST_STRINGIZE(_COMPILER_VERSION)\n\n#include \"boost/config/compiler/common_edg.hpp\"\n\n//\n// Threading support:\n// Turn this on unconditionally here, it will get turned off again later\n// if no threading API is detected.\n//\n#define BOOST_HAS_THREADS\n#define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n\n#undef BOOST_NO_SWPRINTF\n#undef BOOST_DEDUCED_TYPENAME\n\n//\n// version check:\n// probably nothing to do here?\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/sunpro_cc.hpp",
    "content": "//  (C) Copyright John Maddock 2001.\n//  (C) Copyright Jens Maurer 2001 - 2003.\n//  (C) Copyright Peter Dimov 2002.\n//  (C) Copyright Aleksey Gurtovoy 2002 - 2003.\n//  (C) Copyright David Abrahams 2002.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Sun C++ compiler setup:\n\n#    if __SUNPRO_CC <= 0x500\n#      define BOOST_NO_MEMBER_TEMPLATES\n#      define BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#    endif\n\n#    if (__SUNPRO_CC <= 0x520)\n       //\n       // Sunpro 5.2 and earler:\n       //\n       // although sunpro 5.2 supports the syntax for\n       // inline initialization it often gets the value\n       // wrong, especially where the value is computed\n       // from other constants (J Maddock 6th May 2001)\n#      define BOOST_NO_INCLASS_MEMBER_INITIALIZATION\n\n       // Although sunpro 5.2 supports the syntax for\n       // partial specialization, it often seems to\n       // bind to the wrong specialization.  Better\n       // to disable it until suppport becomes more stable\n       // (J Maddock 6th May 2001).\n#      define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#    endif\n\n#    if (__SUNPRO_CC <= 0x530)\n       // Requesting debug info (-g) with Boost.Python results\n       // in an internal compiler error for \"static const\"\n       // initialized in-class.\n       //    >> Assertion:   (../links/dbg_cstabs.cc, line 611)\n       //         while processing ../test.cpp at line 0.\n       // (Jens Maurer according to Gottfried Ganssauge 04 Mar 2002)\n#      define BOOST_NO_INCLASS_MEMBER_INITIALIZATION\n\n       // SunPro 5.3 has better support for partial specialization,\n       // but breaks when compiling std::less<shared_ptr<T> >\n       // (Jens Maurer 4 Nov 2001).\n\n       // std::less specialization fixed as reported by George\n       // Heintzelman; partial specialization re-enabled\n       // (Peter Dimov 17 Jan 2002)\n\n//#      define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n       // integral constant expressions with 64 bit numbers fail\n#      define BOOST_NO_INTEGRAL_INT64_T\n#    endif\n\n#    if (__SUNPRO_CC < 0x570)\n#      define BOOST_NO_TEMPLATE_TEMPLATES\n       // see http://lists.boost.org/MailArchives/boost/msg47184.php\n       // and http://lists.boost.org/MailArchives/boost/msg47220.php\n#      define BOOST_NO_INCLASS_MEMBER_INITIALIZATION\n#      define BOOST_NO_SFINAE\n#      define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS\n#    endif\n#    if (__SUNPRO_CC <= 0x580)\n#      define BOOST_NO_IS_ABSTRACT\n#    endif\n\n#    if (__SUNPRO_CC <= 0x5100)\n       // Sun 5.10 may not correctly value-initialize objects of\n       // some user defined types, as was reported in April 2010\n       // (CR 6947016), and confirmed by Steve Clamage.\n       // (Niels Dekker, LKEB, May 2010).\n#      define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n#    endif\n\n//\n// Dynamic shared object (DSO) and dynamic-link library (DLL) support\n//\n#if __SUNPRO_CC > 0x500\n#  define BOOST_SYMBOL_EXPORT __global\n#  define BOOST_SYMBOL_IMPORT __global\n#  define BOOST_SYMBOL_VISIBLE __global\n#endif\n\n#if (__SUNPRO_CC < 0x5130)\n// C++03 features in 12.4:\n#define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_ADL_BARRIER\n#define BOOST_NO_CXX11_VARIADIC_MACROS\n#endif\n\n#if (__SUNPRO_CC < 0x5130) || (__cplusplus < 201100)\n// C++11 only featuires in 12.4:\n#define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#define BOOST_NO_CXX11_CHAR16_T\n#define BOOST_NO_CXX11_CHAR32_T\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_DECLTYPE\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_RVALUE_REFERENCES\n#define BOOST_NO_CXX11_SCOPED_ENUMS\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_FINAL\n#endif\n\n#if (__SUNPRO_CC < 0x5140) || (__cplusplus < 201103)\n#define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#endif\n\n#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n//\n// C++0x features\n//\n#  define BOOST_HAS_LONG_LONG\n\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n//\n// Version\n//\n\n#define BOOST_COMPILER \"Sun compiler version \" BOOST_STRINGIZE(__SUNPRO_CC)\n\n//\n// versions check:\n// we don't support sunpro prior to version 4:\n#if __SUNPRO_CC < 0x400\n#error \"Compiler not supported or configured - please reconfigure\"\n#endif\n//\n// last known and checked version is 0x590:\n#if (__SUNPRO_CC > 0x590)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/vacpp.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003.\n//  (C) Copyright Toon Knapen 2001 - 2003.\n//  (C) Copyright Lie-Quan Lee 2001.\n//  (C) Copyright Markus Schoepflin 2002 - 2003.\n//  (C) Copyright Beman Dawes 2002 - 2003.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Visual Age (IBM) C++ compiler setup:\n\n#if __IBMCPP__ <= 501\n#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n#  define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS\n#endif\n\n#if (__IBMCPP__ <= 502)\n// Actually the compiler supports inclass member initialization but it\n// requires a definition for the class member and it doesn't recognize\n// it as an integral constant expression when used as a template argument.\n#  define BOOST_NO_INCLASS_MEMBER_INITIALIZATION\n#  define BOOST_NO_INTEGRAL_INT64_T\n#  define BOOST_NO_MEMBER_TEMPLATE_KEYWORD\n#endif\n\n#if (__IBMCPP__ <= 600) || !defined(BOOST_STRICT_CONFIG)\n#  define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS\n#endif\n\n#if (__IBMCPP__ <= 1110)\n// XL C++ V11.1 and earlier versions may not always value-initialize\n// a temporary object T(), when T is a non-POD aggregate class type.\n// Michael Wong (IBM Canada Ltd) has confirmed this issue and gave it\n// high priority. -- Niels Dekker (LKEB), May 2010.\n#  define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n#endif\n\n//\n// On AIX thread support seems to be indicated by _THREAD_SAFE:\n//\n#ifdef _THREAD_SAFE\n#  define BOOST_HAS_THREADS\n#endif\n\n#define BOOST_COMPILER \"IBM Visual Age version \" BOOST_STRINGIZE(__IBMCPP__)\n\n//\n// versions check:\n// we don't support Visual age prior to version 5:\n#if __IBMCPP__ < 500\n#error \"Compiler not supported or configured - please reconfigure\"\n#endif\n//\n// last known and checked version is 1210:\n#if (__IBMCPP__ > 1210)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n\n// Some versions of the compiler have issues with default arguments on partial specializations\n#if __IBMCPP__ <= 1010\n#define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS\n#endif\n\n//\n// C++0x features\n//\n//   See boost\\config\\suffix.hpp for BOOST_NO_LONG_LONG\n//\n#if ! __IBMCPP_AUTO_TYPEDEDUCTION\n#  define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#endif\n#if ! __IBMCPP_UTF_LITERAL__\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_CHAR32_T\n#endif\n#if ! __IBMCPP_CONSTEXPR\n#  define BOOST_NO_CXX11_CONSTEXPR\n#endif\n#if ! __IBMCPP_DECLTYPE\n#  define BOOST_NO_CXX11_DECLTYPE\n#else\n#  define BOOST_HAS_DECLTYPE\n#endif\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#if ! __IBMCPP_EXPLICIT_CONVERSION_OPERATORS\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#endif\n#if ! __IBMCPP_EXTERN_TEMPLATE\n#  define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#endif\n#if ! __IBMCPP_VARIADIC_TEMPLATES\n// not enabled separately at this time\n#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#endif\n#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#define BOOST_NO_CXX11_LAMBDAS\n#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_RAW_LITERALS\n#define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#if ! __IBMCPP_RVALUE_REFERENCES\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#endif\n#if ! __IBMCPP_SCOPED_ENUM\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#endif\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#if ! __IBMCPP_STATIC_ASSERT\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n#endif\n#define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#define BOOST_NO_CXX11_UNICODE_LITERALS\n#if ! __IBMCPP_VARIADIC_TEMPLATES\n#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#endif\n#if ! __C99_MACRO_WITH_VA_ARGS\n#  define BOOST_NO_CXX11_VARIADIC_MACROS\n#endif\n#define BOOST_NO_CXX11_ALIGNAS\n#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#define BOOST_NO_CXX11_INLINE_NAMESPACES\n#define BOOST_NO_CXX11_REF_QUALIFIERS\n#define BOOST_NO_CXX11_FINAL\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n#if (__cplusplus < 201304) // There's no SD6 check for this....\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/visualc.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003.\n//  (C) Copyright Darin Adler 2001 - 2002.\n//  (C) Copyright Peter Dimov 2001.\n//  (C) Copyright Aleksey Gurtovoy 2002.\n//  (C) Copyright David Abrahams 2002 - 2003.\n//  (C) Copyright Beman Dawes 2002 - 2003.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n//\n//  Microsoft Visual C++ compiler setup:\n//\n//  We need to be careful with the checks in this file, as contrary\n//  to popular belief there are versions with _MSC_VER with the final\n//  digit non-zero (mainly the MIPS cross compiler).\n//\n//  So we either test _MSC_VER >= XXXX or else _MSC_VER < XXXX.\n//  No other comparisons (==, >, or <=) are safe.\n//\n\n#define BOOST_MSVC _MSC_VER\n\n//\n// Helper macro BOOST_MSVC_FULL_VER for use in Boost code:\n//\n#if _MSC_FULL_VER > 100000000\n#  define BOOST_MSVC_FULL_VER _MSC_FULL_VER\n#else\n#  define BOOST_MSVC_FULL_VER (_MSC_FULL_VER * 10)\n#endif\n\n// Attempt to suppress VC6 warnings about the length of decorated names (obsolete):\n#pragma warning( disable : 4503 ) // warning: decorated name length exceeded\n\n#define BOOST_HAS_PRAGMA_ONCE\n\n//\n// versions check:\n// we don't support Visual C++ prior to version 7.1:\n#if _MSC_VER < 1310\n#  error \"Compiler not supported or configured - please reconfigure\"\n#endif\n\n#if _MSC_FULL_VER < 180020827\n#  define BOOST_NO_FENV_H\n#endif\n\n#if _MSC_VER < 1400\n// although a conforming signature for swprint exists in VC7.1\n// it appears not to actually work:\n#  define BOOST_NO_SWPRINTF\n// Our extern template tests also fail for this compiler:\n#  define BOOST_NO_CXX11_EXTERN_TEMPLATE\n// Variadic macros do not exist for VC7.1 and lower\n#  define BOOST_NO_CXX11_VARIADIC_MACROS\n#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#endif\n\n#if _MSC_VER < 1500  // 140X == VC++ 8.0\n#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n#endif\n\n#if _MSC_VER < 1600  // 150X == VC++ 9.0\n   // A bug in VC9:\n#  define BOOST_NO_ADL_BARRIER\n#endif\n\n\n#ifndef _NATIVE_WCHAR_T_DEFINED\n#  define BOOST_NO_INTRINSIC_WCHAR_T\n#endif\n\n//\n// check for exception handling support:\n#if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS)\n#  define BOOST_NO_EXCEPTIONS\n#endif\n\n//\n// __int64 support:\n//\n#define BOOST_HAS_MS_INT64\n#if defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1400)\n#   define BOOST_HAS_LONG_LONG\n#else\n#   define BOOST_NO_LONG_LONG\n#endif\n#if (_MSC_VER >= 1400) && !defined(_DEBUG)\n#   define BOOST_HAS_NRVO\n#endif\n#if _MSC_VER >= 1600  // 160X == VC++ 10.0\n#  define BOOST_HAS_PRAGMA_DETECT_MISMATCH\n#endif\n//\n// disable Win32 API's if compiler extensions are\n// turned off:\n//\n#if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32)\n#  define BOOST_DISABLE_WIN32\n#endif\n#if !defined(_CPPRTTI) && !defined(BOOST_NO_RTTI)\n#  define BOOST_NO_RTTI\n#endif\n\n//\n// TR1 features:\n//\n#if _MSC_VER >= 1700\n// # define BOOST_HAS_TR1_HASH\t\t\t// don't know if this is true yet.\n// # define BOOST_HAS_TR1_TYPE_TRAITS\t// don't know if this is true yet.\n# define BOOST_HAS_TR1_UNORDERED_MAP\n# define BOOST_HAS_TR1_UNORDERED_SET\n#endif\n\n//\n// C++0x features\n//\n//   See above for BOOST_NO_LONG_LONG\n\n// C++ features supported by VC++ 10 (aka 2010)\n//\n#if _MSC_VER < 1600\n#  define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#  define BOOST_NO_CXX11_LAMBDAS\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n#  define BOOST_NO_CXX11_NULLPTR\n#  define BOOST_NO_CXX11_DECLTYPE\n#endif // _MSC_VER < 1600\n\n#if _MSC_VER >= 1600\n#  define BOOST_HAS_STDINT_H\n#endif\n\n// C++11 features supported by VC++ 11 (aka 2012)\n//\n#if _MSC_VER < 1700\n#  define BOOST_NO_CXX11_FINAL\n#  define BOOST_NO_CXX11_RANGE_BASED_FOR\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#endif // _MSC_VER < 1700\n\n// C++11 features supported by VC++ 12 (aka 2013).\n//\n#if _MSC_FULL_VER < 180020827\n#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#  define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#  define BOOST_NO_CXX11_RAW_LITERALS\n#  define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#  define BOOST_NO_CXX11_DECLTYPE_N3276\n#endif\n\n// C++11 features supported by VC++ 14 (aka 2015)\n//\n#if (_MSC_FULL_VER < 190023026)\n#  define BOOST_NO_CXX11_NOEXCEPT\n#  define BOOST_NO_CXX11_REF_QUALIFIERS\n#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#  define BOOST_NO_CXX11_ALIGNAS\n#  define BOOST_NO_CXX11_INLINE_NAMESPACES\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_CHAR32_T\n#  define BOOST_NO_CXX11_UNICODE_LITERALS\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n\n// MSVC including version 14 has not yet completely\n// implemented value-initialization, as is reported:\n// \"VC++ does not value-initialize members of derived classes without\n// user-declared constructor\", reported in 2009 by Sylvester Hesp:\n// https://connect.microsoft.com/VisualStudio/feedback/details/484295\n// \"Presence of copy constructor breaks member class initialization\",\n// reported in 2009 by Alex Vakulenko:\n// https://connect.microsoft.com/VisualStudio/feedback/details/499606\n// \"Value-initialization in new-expression\", reported in 2005 by\n// Pavel Kuznetsov (MetaCommunications Engineering):\n// https://connect.microsoft.com/VisualStudio/feedback/details/100744\n// Reported again by John Maddock in 2015 for VC14:\n// https://connect.microsoft.com/VisualStudio/feedback/details/1582233/c-subobjects-still-not-value-initialized-correctly\n// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues\n// (Niels Dekker, LKEB, May 2010)\n#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n// C++11 features not supported by any versions\n#define BOOST_NO_SFINAE_EXPR\n#define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n//\n// This is somewhat supported in VC14, but we may need to wait for\n// a service release before enabling:\n//\n#define BOOST_NO_CXX11_CONSTEXPR\n\n// C++ 14:\n#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n//\n// prefix and suffix headers:\n//\n#ifndef BOOST_ABI_PREFIX\n#  define BOOST_ABI_PREFIX \"boost/config/abi/msvc_prefix.hpp\"\n#endif\n#ifndef BOOST_ABI_SUFFIX\n#  define BOOST_ABI_SUFFIX \"boost/config/abi/msvc_suffix.hpp\"\n#endif\n\n#ifndef BOOST_COMPILER\n// TODO:\n// these things are mostly bogus. 1200 means version 12.0 of the compiler. The\n// artificial versions assigned to them only refer to the versions of some IDE\n// these compilers have been shipped with, and even that is not all of it. Some\n// were shipped with freely downloadable SDKs, others as crosscompilers in eVC.\n// IOW, you can't use these 'versions' in any sensible way. Sorry.\n# if defined(UNDER_CE)\n#   if _MSC_VER < 1400\n      // Note: I'm not aware of any CE compiler with version 13xx\n#      if defined(BOOST_ASSERT_CONFIG)\n#         error \"Unknown EVC++ compiler version - please run the configure tests and report the results\"\n#      else\n#         pragma message(\"Unknown EVC++ compiler version - please run the configure tests and report the results\")\n#      endif\n#   elif _MSC_VER < 1500\n#     define BOOST_COMPILER_VERSION evc8\n#   elif _MSC_VER < 1600\n#     define BOOST_COMPILER_VERSION evc9\n#   elif _MSC_VER < 1700\n#     define BOOST_COMPILER_VERSION evc10\n#   elif _MSC_VER < 1800 \n#     define BOOST_COMPILER_VERSION evc11 \n#   elif _MSC_VER < 1900 \n#     define BOOST_COMPILER_VERSION evc12\n#   elif _MSC_VER < 2000  \n#     define BOOST_COMPILER_VERSION evc14\n#   else\n#      if defined(BOOST_ASSERT_CONFIG)\n#         error \"Unknown EVC++ compiler version - please run the configure tests and report the results\"\n#      else\n#         pragma message(\"Unknown EVC++ compiler version - please run the configure tests and report the results\")\n#      endif\n#   endif\n# else\n#   if _MSC_VER < 1310\n      // Note: Versions up to 7.0 aren't supported.\n#     define BOOST_COMPILER_VERSION 5.0\n#   elif _MSC_VER < 1300\n#     define BOOST_COMPILER_VERSION 6.0\n#   elif _MSC_VER < 1310\n#     define BOOST_COMPILER_VERSION 7.0\n#   elif _MSC_VER < 1400\n#     define BOOST_COMPILER_VERSION 7.1\n#   elif _MSC_VER < 1500\n#     define BOOST_COMPILER_VERSION 8.0\n#   elif _MSC_VER < 1600\n#     define BOOST_COMPILER_VERSION 9.0\n#   elif _MSC_VER < 1700\n#     define BOOST_COMPILER_VERSION 10.0\n#   elif _MSC_VER < 1800 \n#     define BOOST_COMPILER_VERSION 11.0\n#   elif _MSC_VER < 1900\n#     define BOOST_COMPILER_VERSION 12.0\n#   elif _MSC_VER < 2000\n#     define BOOST_COMPILER_VERSION 14.0\n#   else\n#     define BOOST_COMPILER_VERSION _MSC_VER\n#   endif\n# endif\n\n#  define BOOST_COMPILER \"Microsoft Visual C++ version \" BOOST_STRINGIZE(BOOST_COMPILER_VERSION)\n#endif\n\n//\n// last known and checked version is 19.00.23026 (VC++ 2015 RTM):\n#if (_MSC_VER > 1900)\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  else\n#     pragma message(\"Unknown compiler version - please run the configure tests and report the results\")\n#  endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/compiler/xlcpp.hpp",
    "content": "// (C) Copyright Douglas Gregor 2010\n//\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  compiler setup for IBM XL C/C++ for Linux (Little Endian) based on clang.\n\n#define BOOST_HAS_PRAGMA_ONCE\n\n// Detecting `-fms-extension` compiler flag assuming that _MSC_VER defined when that flag is used.\n#if defined (_MSC_VER) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4))\n#   define BOOST_HAS_PRAGMA_DETECT_MISMATCH\n#endif\n\n// When compiling with clang before __has_extension was defined,\n// even if one writes 'defined(__has_extension) && __has_extension(xxx)',\n// clang reports a compiler error. So the only workaround found is:\n\n#ifndef __has_extension\n#define __has_extension __has_feature\n#endif\n\n#if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS)\n#  define BOOST_NO_EXCEPTIONS\n#endif\n\n#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_RTTI)\n#  define BOOST_NO_RTTI\n#endif\n\n#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_TYPEID)\n#  define BOOST_NO_TYPEID\n#endif\n\n#if defined(__int64) && !defined(__GNUC__)\n#  define BOOST_HAS_MS_INT64\n#endif\n\n#define BOOST_HAS_NRVO\n\n// Branch prediction hints\n#if defined(__has_builtin)\n#if __has_builtin(__builtin_expect)\n#define BOOST_LIKELY(x) __builtin_expect(x, 1)\n#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)\n#endif\n#endif\n\n// Clang supports \"long long\" in all compilation modes.\n#define BOOST_HAS_LONG_LONG\n\n//\n// Dynamic shared object (DSO) and dynamic-link library (DLL) support\n//\n#if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32)\n#  define BOOST_SYMBOL_EXPORT __attribute__((__visibility__(\"default\")))\n#  define BOOST_SYMBOL_IMPORT\n#  define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__(\"default\")))\n#endif\n\n//\n// The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through\n// between switch labels.\n//\n#if __cplusplus >= 201103L && defined(__has_warning)\n#  if __has_feature(cxx_attributes) && __has_warning(\"-Wimplicit-fallthrough\")\n#    define BOOST_FALLTHROUGH [[clang::fallthrough]]\n#  endif\n#endif\n\n#if !__has_feature(cxx_auto_type)\n#  define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#endif\n\n//\n// Currently clang on Windows using VC++ RTL does not support C++11's char16_t or char32_t\n//\n#if defined(_MSC_VER) || !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_CHAR32_T\n#endif\n\n#if !__has_feature(cxx_constexpr)\n#  define BOOST_NO_CXX11_CONSTEXPR\n#endif\n\n#if !__has_feature(cxx_decltype)\n#  define BOOST_NO_CXX11_DECLTYPE\n#endif\n\n#if !__has_feature(cxx_decltype_incomplete_return_types)\n#  define BOOST_NO_CXX11_DECLTYPE_N3276\n#endif\n\n#if !__has_feature(cxx_defaulted_functions)\n#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#endif\n\n#if !__has_feature(cxx_deleted_functions)\n#  define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#endif\n\n#if !__has_feature(cxx_explicit_conversions)\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#endif\n\n#if !__has_feature(cxx_default_function_template_args)\n#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#endif\n\n#if !__has_feature(cxx_generalized_initializers)\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#endif\n\n#if !__has_feature(cxx_lambdas)\n#  define BOOST_NO_CXX11_LAMBDAS\n#endif\n\n#if !__has_feature(cxx_local_type_template_args)\n#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#endif\n\n#if !__has_feature(cxx_noexcept)\n#  define BOOST_NO_CXX11_NOEXCEPT\n#endif\n\n#if !__has_feature(cxx_nullptr)\n#  define BOOST_NO_CXX11_NULLPTR\n#endif\n\n#if !__has_feature(cxx_range_for)\n#  define BOOST_NO_CXX11_RANGE_BASED_FOR\n#endif\n\n#if !__has_feature(cxx_raw_string_literals)\n#  define BOOST_NO_CXX11_RAW_LITERALS\n#endif\n\n#if !__has_feature(cxx_reference_qualified_functions)\n#  define BOOST_NO_CXX11_REF_QUALIFIERS\n#endif\n\n#if !__has_feature(cxx_generalized_initializers)\n#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#endif\n\n#if !__has_feature(cxx_rvalue_references)\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#endif\n\n#if !__has_feature(cxx_strong_enums)\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#endif\n\n#if !__has_feature(cxx_static_assert)\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n#endif\n\n#if !__has_feature(cxx_alias_templates)\n#  define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#endif\n\n#if !__has_feature(cxx_unicode_literals)\n#  define BOOST_NO_CXX11_UNICODE_LITERALS\n#endif\n\n#if !__has_feature(cxx_variadic_templates)\n#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#endif\n\n#if !__has_feature(cxx_user_literals)\n#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS\n#endif\n\n#if !__has_feature(cxx_alignas)\n#  define BOOST_NO_CXX11_ALIGNAS\n#endif\n\n#if !__has_feature(cxx_trailing_return)\n#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES\n#endif\n\n#if !__has_feature(cxx_inline_namespaces)\n#  define BOOST_NO_CXX11_INLINE_NAMESPACES\n#endif\n\n#if !__has_feature(cxx_override_control)\n#  define BOOST_NO_CXX11_FINAL\n#endif\n\n#if !(__has_feature(__cxx_binary_literals__) || __has_extension(__cxx_binary_literals__))\n#  define BOOST_NO_CXX14_BINARY_LITERALS\n#endif\n\n#if !__has_feature(__cxx_decltype_auto__)\n#  define BOOST_NO_CXX14_DECLTYPE_AUTO\n#endif\n\n#if !__has_feature(__cxx_aggregate_nsdmi__)\n#  define BOOST_NO_CXX14_AGGREGATE_NSDMI\n#endif\n\n#if !__has_feature(__cxx_init_captures__)\n#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES\n#endif\n\n#if !__has_feature(__cxx_generic_lambdas__)\n#  define BOOST_NO_CXX14_GENERIC_LAMBDAS\n#endif\n\n// clang < 3.5 has a defect with dependent type, like following.\n//\n//  template <class T>\n//  constexpr typename enable_if<pred<T> >::type foo(T &)\n//  { } // error: no return statement in constexpr function\n//\n// This issue also affects C++11 mode, but C++11 constexpr requires return stmt.\n// Therefore we don't care such case.\n//\n// Note that we can't check Clang version directly as the numbering system changes depending who's\n// creating the Clang release (see https://github.com/boostorg/config/pull/39#issuecomment-59927873)\n// so instead verify that we have a feature that was introduced at the same time as working C++14\n// constexpr (generic lambda's in this case):\n//\n#if !__has_feature(__cxx_generic_lambdas__) || !__has_feature(__cxx_relaxed_constexpr__)\n#  define BOOST_NO_CXX14_CONSTEXPR\n#endif\n\n#if !__has_feature(__cxx_return_type_deduction__)\n#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION\n#endif\n\n#if !__has_feature(__cxx_variable_templates__)\n#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES\n#endif\n\n#if __cplusplus < 201400\n// All versions with __cplusplus above this value seem to support this:\n#  define BOOST_NO_CXX14_DIGIT_SEPARATORS\n#endif\n\n\n// Unused attribute:\n#if defined(__GNUC__) && (__GNUC__ >= 4)\n#  define BOOST_ATTRIBUTE_UNUSED __attribute__((unused))\n#endif\n\n#ifndef BOOST_COMPILER\n#  define BOOST_COMPILER \"Clang version \" __clang_version__\n#endif\n\n// Macro used to identify the Clang compiler.\n#define BOOST_CLANG 1\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/no_tr1/cmath.hpp",
    "content": "//  (C) Copyright John Maddock 2008.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// The aim of this header is just to include <cmath> but to do\n// so in a way that does not result in recursive inclusion of\n// the Boost TR1 components if boost/tr1/tr1/cmath is in the\n// include search path.  We have to do this to avoid circular\n// dependencies:\n//\n\n#ifndef BOOST_CONFIG_CMATH\n#  define BOOST_CONFIG_CMATH\n\n#  ifndef BOOST_TR1_NO_RECURSION\n#     define BOOST_TR1_NO_RECURSION\n#     define BOOST_CONFIG_NO_CMATH_RECURSION\n#  endif\n\n#  include <cmath>\n\n#  ifdef BOOST_CONFIG_NO_CMATH_RECURSION\n#     undef BOOST_TR1_NO_RECURSION\n#     undef BOOST_CONFIG_NO_CMATH_RECURSION\n#  endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/no_tr1/complex.hpp",
    "content": "//  (C) Copyright John Maddock 2005.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// The aim of this header is just to include <complex> but to do\n// so in a way that does not result in recursive inclusion of\n// the Boost TR1 components if boost/tr1/tr1/complex is in the\n// include search path.  We have to do this to avoid circular\n// dependencies:\n//\n\n#ifndef BOOST_CONFIG_COMPLEX\n#  define BOOST_CONFIG_COMPLEX\n\n#  ifndef BOOST_TR1_NO_RECURSION\n#     define BOOST_TR1_NO_RECURSION\n#     define BOOST_CONFIG_NO_COMPLEX_RECURSION\n#  endif\n\n#  include <complex>\n\n#  ifdef BOOST_CONFIG_NO_COMPLEX_RECURSION\n#     undef BOOST_TR1_NO_RECURSION\n#     undef BOOST_CONFIG_NO_COMPLEX_RECURSION\n#  endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/no_tr1/functional.hpp",
    "content": "//  (C) Copyright John Maddock 2005.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// The aim of this header is just to include <functional> but to do\n// so in a way that does not result in recursive inclusion of\n// the Boost TR1 components if boost/tr1/tr1/functional is in the\n// include search path.  We have to do this to avoid circular\n// dependencies:\n//\n\n#ifndef BOOST_CONFIG_FUNCTIONAL\n#  define BOOST_CONFIG_FUNCTIONAL\n\n#  ifndef BOOST_TR1_NO_RECURSION\n#     define BOOST_TR1_NO_RECURSION\n#     define BOOST_CONFIG_NO_FUNCTIONAL_RECURSION\n#  endif\n\n#  include <functional>\n\n#  ifdef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION\n#     undef BOOST_TR1_NO_RECURSION\n#     undef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION\n#  endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/no_tr1/memory.hpp",
    "content": "//  (C) Copyright John Maddock 2005.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// The aim of this header is just to include <memory> but to do\n// so in a way that does not result in recursive inclusion of\n// the Boost TR1 components if boost/tr1/tr1/memory is in the\n// include search path.  We have to do this to avoid circular\n// dependencies:\n//\n\n#ifndef BOOST_CONFIG_MEMORY\n#  define BOOST_CONFIG_MEMORY\n\n#  ifndef BOOST_TR1_NO_RECURSION\n#     define BOOST_TR1_NO_RECURSION\n#     define BOOST_CONFIG_NO_MEMORY_RECURSION\n#  endif\n\n#  include <memory>\n\n#  ifdef BOOST_CONFIG_NO_MEMORY_RECURSION\n#     undef BOOST_TR1_NO_RECURSION\n#     undef BOOST_CONFIG_NO_MEMORY_RECURSION\n#  endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/no_tr1/utility.hpp",
    "content": "//  (C) Copyright John Maddock 2005.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// The aim of this header is just to include <utility> but to do\n// so in a way that does not result in recursive inclusion of\n// the Boost TR1 components if boost/tr1/tr1/utility is in the\n// include search path.  We have to do this to avoid circular\n// dependencies:\n//\n\n#ifndef BOOST_CONFIG_UTILITY\n#  define BOOST_CONFIG_UTILITY\n\n#  ifndef BOOST_TR1_NO_RECURSION\n#     define BOOST_TR1_NO_RECURSION\n#     define BOOST_CONFIG_NO_UTILITY_RECURSION\n#  endif\n\n#  include <utility>\n\n#  ifdef BOOST_CONFIG_NO_UTILITY_RECURSION\n#     undef BOOST_TR1_NO_RECURSION\n#     undef BOOST_CONFIG_NO_UTILITY_RECURSION\n#  endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/aix.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  IBM/Aix specific config options:\n\n#define BOOST_PLATFORM \"IBM Aix\"\n\n#define BOOST_HAS_UNISTD_H\n#define BOOST_HAS_NL_TYPES_H\n#define BOOST_HAS_NANOSLEEP\n#define BOOST_HAS_CLOCK_GETTIME\n\n// This needs support in \"boost/cstdint.hpp\" exactly like FreeBSD.\n// This platform has header named <inttypes.h> which includes all\n// the things needed.\n#define BOOST_HAS_STDINT_H\n\n// Threading API's:\n#define BOOST_HAS_PTHREADS\n#define BOOST_HAS_PTHREAD_DELAY_NP\n#define BOOST_HAS_SCHED_YIELD\n//#define BOOST_HAS_PTHREAD_YIELD\n\n// boilerplate code:\n#include <boost/config/posix_features.hpp>\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/amigaos.hpp",
    "content": "//  (C) Copyright John Maddock 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n#define BOOST_PLATFORM \"AmigaOS\"\n\n#define BOOST_DISABLE_THREADS\n#define BOOST_NO_CWCHAR\n#define BOOST_NO_STD_WSTRING\n#define BOOST_NO_INTRINSIC_WCHAR_T\n \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/beos.hpp",
    "content": "//  (C) Copyright John Maddock 2001. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  BeOS specific config options:\n\n#define BOOST_PLATFORM \"BeOS\"\n\n#define BOOST_NO_CWCHAR\n#define BOOST_NO_CWCTYPE\n#define BOOST_HAS_UNISTD_H\n\n#define BOOST_HAS_BETHREADS\n\n#ifndef BOOST_DISABLE_THREADS\n#  define BOOST_HAS_THREADS\n#endif\n\n// boilerplate code:\n#include <boost/config/posix_features.hpp>\n \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/bsd.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Darin Adler 2001. \n//  (C) Copyright Douglas Gregor 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  generic BSD config options:\n\n#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__)\n#error \"This platform is not BSD\"\n#endif\n\n#ifdef __FreeBSD__\n#define BOOST_PLATFORM \"FreeBSD \" BOOST_STRINGIZE(__FreeBSD__)\n#elif defined(__NetBSD__)\n#define BOOST_PLATFORM \"NetBSD \" BOOST_STRINGIZE(__NetBSD__)\n#elif defined(__OpenBSD__)\n#define BOOST_PLATFORM \"OpenBSD \" BOOST_STRINGIZE(__OpenBSD__)\n#elif defined(__DragonFly__)\n#define BOOST_PLATFORM \"DragonFly \" BOOST_STRINGIZE(__DragonFly__)\n#endif\n\n//\n// is this the correct version check?\n// FreeBSD has <nl_types.h> but does not\n// advertise the fact in <unistd.h>:\n//\n#if (defined(__FreeBSD__) && (__FreeBSD__ >= 3)) || defined(__DragonFly__)\n#  define BOOST_HAS_NL_TYPES_H\n#endif\n\n//\n// FreeBSD 3.x has pthreads support, but defines _POSIX_THREADS in <pthread.h>\n// and not in <unistd.h>\n//\n#if (defined(__FreeBSD__) && (__FreeBSD__ <= 3))\\\n   || defined(__OpenBSD__) || defined(__DragonFly__) \n#  define BOOST_HAS_PTHREADS\n#endif\n\n//\n// No wide character support in the BSD header files:\n//\n#if defined(__NetBSD__)\n#define __NetBSD_GCC__ (__GNUC__         * 1000000 \\\n                       + __GNUC_MINOR__ *    1000 \\\n                       + __GNUC_PATCHLEVEL__)\n// XXX - the following is required until c++config.h\n//       defines _GLIBCXX_HAVE_SWPRINTF and friends\n//       or the preprocessor conditionals are removed\n//       from the cwchar header.\n#define _GLIBCXX_HAVE_SWPRINTF 1\n#endif\n\n#if !((defined(__FreeBSD__) && (__FreeBSD__ >= 5)) \\\n      || (defined(__NetBSD_GCC__) && (__NetBSD_GCC__ >= 2095003)) || defined(__DragonFly__))\n#  define BOOST_NO_CWCHAR\n#endif\n//\n// The BSD <ctype.h> has macros only, no functions:\n//\n#if !defined(__OpenBSD__) || defined(__DragonFly__)\n#  define BOOST_NO_CTYPE_FUNCTIONS\n#endif\n\n//\n// thread API's not auto detected:\n//\n#define BOOST_HAS_SCHED_YIELD\n#define BOOST_HAS_NANOSLEEP\n#define BOOST_HAS_GETTIMEOFDAY\n#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#define BOOST_HAS_SIGACTION\n\n// boilerplate code:\n#define BOOST_HAS_UNISTD_H\n#include <boost/config/posix_features.hpp>\n\n\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/cloudabi.hpp",
    "content": "//       Copyright Nuxi, https://nuxi.nl/ 2015.\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n#define BOOST_PLATFORM \"CloudABI\"\n\n#define BOOST_HAS_DIRENT_H\n#define BOOST_HAS_STDINT_H\n#define BOOST_HAS_UNISTD_H\n\n#define BOOST_HAS_CLOCK_GETTIME\n#define BOOST_HAS_EXPM1\n#define BOOST_HAS_GETTIMEOFDAY\n#define BOOST_HAS_LOG1P\n#define BOOST_HAS_NANOSLEEP\n#define BOOST_HAS_PTHREADS\n#define BOOST_HAS_SCHED_YIELD\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/cray.hpp",
    "content": "//  (C) Copyright John Maddock 2011.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n\n//  See http://www.boost.org for most recent version.\n\n//  SGI Irix specific config options:\n\n#define BOOST_PLATFORM \"Cray\"\n\n// boilerplate code:\n#define BOOST_HAS_UNISTD_H\n#include <boost/config/posix_features.hpp>\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/cygwin.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  cygwin specific config options:\n\n#define BOOST_PLATFORM \"Cygwin\"\n#define BOOST_HAS_DIRENT_H\n#define BOOST_HAS_LOG1P\n#define BOOST_HAS_EXPM1\n\n//\n// Threading API:\n// See if we have POSIX threads, if we do use them, otherwise\n// revert to native Win threads.\n#define BOOST_HAS_UNISTD_H\n#include <unistd.h>\n#if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS)\n#  define BOOST_HAS_PTHREADS\n#  define BOOST_HAS_SCHED_YIELD\n#  define BOOST_HAS_GETTIMEOFDAY\n#  define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#  define BOOST_HAS_SIGACTION\n#else\n#  if !defined(BOOST_HAS_WINTHREADS)\n#     define BOOST_HAS_WINTHREADS\n#  endif\n#  define BOOST_HAS_FTIME\n#endif\n\n//\n// find out if we have a stdint.h, there should be a better way to do this:\n//\n#include <sys/types.h>\n#ifdef _STDINT_H\n#define BOOST_HAS_STDINT_H\n#endif\n\n/// Cygwin has no fenv.h\n#define BOOST_NO_FENV_H\n\n// boilerplate code:\n#include <boost/config/posix_features.hpp>\n\n//\n// Cygwin lies about XSI conformance, there is no nl_types.h:\n//\n#ifdef BOOST_HAS_NL_TYPES_H\n#  undef BOOST_HAS_NL_TYPES_H\n#endif\n \n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/haiku.hpp",
    "content": "//  (C) Copyright Jessica Hamilton 2014.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Haiku specific config options:\n\n#define BOOST_PLATFORM \"Haiku\"\n\n#define BOOST_HAS_UNISTD_H\n#define BOOST_HAS_STDINT_H\n\n#ifndef BOOST_DISABLE_THREADS\n#  define BOOST_HAS_THREADS\n#endif\n\n#define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#define BOOST_NO_CXX11_STATIC_ASSERT\n#define BOOST_NO_CXX11_VARIADIC_MACROS\n\n//\n// thread API's not auto detected:\n//\n#define BOOST_HAS_SCHED_YIELD\n#define BOOST_HAS_GETTIMEOFDAY\n\n// boilerplate code:\n#include <boost/config/posix_features.hpp>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/hpux.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Jens Maurer 2001 - 2003. \n//  (C) Copyright David Abrahams 2002. \n//  (C) Copyright Toon Knapen 2003. \n//  (C) Copyright Boris Gubenko 2006 - 2007.\n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  hpux specific config options:\n\n#define BOOST_PLATFORM \"HP-UX\"\n\n// In principle, HP-UX has a nice <stdint.h> under the name <inttypes.h>\n// However, it has the following problem:\n// Use of UINT32_C(0) results in \"0u l\" for the preprocessed source\n// (verifyable with gcc 2.95.3)\n#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__HP_aCC)\n#  define BOOST_HAS_STDINT_H\n#endif\n\n#if !(defined(__HP_aCC) || !defined(_INCLUDE__STDC_A1_SOURCE))\n#  define BOOST_NO_SWPRINTF\n#endif\n#if defined(__HP_aCC) && !defined(_INCLUDE__STDC_A1_SOURCE)\n#  define BOOST_NO_CWCTYPE\n#endif\n\n#if defined(__GNUC__)\n#  if (__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ < 3))\n      // GNU C on HP-UX does not support threads (checked up to gcc 3.3)\n#     define BOOST_DISABLE_THREADS\n#  elif !defined(BOOST_DISABLE_THREADS)\n      // threads supported from gcc-3.3 onwards:\n#     define BOOST_HAS_THREADS\n#     define BOOST_HAS_PTHREADS\n#  endif\n#elif defined(__HP_aCC) && !defined(BOOST_DISABLE_THREADS)\n#  define BOOST_HAS_PTHREADS\n#endif\n\n// boilerplate code:\n#define BOOST_HAS_UNISTD_H\n#include <boost/config/posix_features.hpp>\n\n// the following are always available:\n#ifndef BOOST_HAS_GETTIMEOFDAY\n#  define BOOST_HAS_GETTIMEOFDAY\n#endif\n#ifndef BOOST_HAS_SCHED_YIELD\n#    define BOOST_HAS_SCHED_YIELD\n#endif\n#ifndef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#    define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#endif\n#ifndef BOOST_HAS_NL_TYPES_H\n#    define BOOST_HAS_NL_TYPES_H\n#endif\n#ifndef BOOST_HAS_NANOSLEEP\n#    define BOOST_HAS_NANOSLEEP\n#endif\n#ifndef BOOST_HAS_GETTIMEOFDAY\n#    define BOOST_HAS_GETTIMEOFDAY\n#endif\n#ifndef BOOST_HAS_DIRENT_H\n#    define BOOST_HAS_DIRENT_H\n#endif\n#ifndef BOOST_HAS_CLOCK_GETTIME\n#    define BOOST_HAS_CLOCK_GETTIME\n#endif\n#ifndef BOOST_HAS_SIGACTION\n#  define BOOST_HAS_SIGACTION\n#endif\n#ifndef BOOST_HAS_NRVO \n#  ifndef __parisc\n#    define BOOST_HAS_NRVO\n#  endif\n#endif\n#ifndef BOOST_HAS_LOG1P \n#  define BOOST_HAS_LOG1P\n#endif\n#ifndef BOOST_HAS_EXPM1\n#  define BOOST_HAS_EXPM1\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/irix.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Jens Maurer 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n\n//  See http://www.boost.org for most recent version.\n\n//  SGI Irix specific config options:\n\n#define BOOST_PLATFORM \"SGI Irix\"\n\n#define BOOST_NO_SWPRINTF \n//\n// these are not auto detected by POSIX feature tests:\n//\n#define BOOST_HAS_GETTIMEOFDAY\n#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n\n#ifdef __GNUC__\n   // GNU C on IRIX does not support threads (checked up to gcc 3.3)\n#  define BOOST_DISABLE_THREADS\n#endif\n\n// boilerplate code:\n#define BOOST_HAS_UNISTD_H\n#include <boost/config/posix_features.hpp>\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/linux.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Jens Maurer 2001 - 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  linux specific config options:\n\n#define BOOST_PLATFORM \"linux\"\n\n// make sure we have __GLIBC_PREREQ if available at all\n#ifdef __cplusplus\n#include <cstdlib>\n#else\n#include <stdlib.h>\n#endif\n\n//\n// <stdint.h> added to glibc 2.1.1\n// We can only test for 2.1 though:\n//\n#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))\n   // <stdint.h> defines int64_t unconditionally, but <sys/types.h> defines\n   // int64_t only if __GNUC__.  Thus, assume a fully usable <stdint.h>\n   // only when using GCC.\n#  if defined __GNUC__\n#    define BOOST_HAS_STDINT_H\n#  endif\n#endif\n\n#if defined(__LIBCOMO__)\n   //\n   // como on linux doesn't have std:: c functions:\n   // NOTE: versions of libcomo prior to beta28 have octal version numbering,\n   // e.g. version 25 is 21 (dec)\n   //\n#  if __LIBCOMO_VERSION__ <= 20\n#    define BOOST_NO_STDC_NAMESPACE\n#  endif\n\n#  if __LIBCOMO_VERSION__ <= 21\n#    define BOOST_NO_SWPRINTF\n#  endif\n\n#endif\n\n//\n// If glibc is past version 2 then we definitely have\n// gettimeofday, earlier versions may or may not have it:\n//\n#if defined(__GLIBC__) && (__GLIBC__ >= 2)\n#  define BOOST_HAS_GETTIMEOFDAY\n#endif\n\n#ifdef __USE_POSIX199309\n#  define BOOST_HAS_NANOSLEEP\n#endif\n\n#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)\n// __GLIBC_PREREQ is available since 2.1.2\n\n   // swprintf is available since glibc 2.2.0\n#  if !__GLIBC_PREREQ(2,2) || (!defined(__USE_ISOC99) && !defined(__USE_UNIX98))\n#    define BOOST_NO_SWPRINTF\n#  endif\n#else\n#  define BOOST_NO_SWPRINTF\n#endif\n\n// boilerplate code:\n#define BOOST_HAS_UNISTD_H\n#include <boost/config/posix_features.hpp>\n#ifdef __USE_GNU\n#define BOOST_HAS_PTHREAD_YIELD\n#endif\n\n#ifndef __GNUC__\n//\n// if the compiler is not gcc we still need to be able to parse\n// the GNU system headers, some of which (mainly <stdint.h>)\n// use GNU specific extensions:\n//\n#  ifndef __extension__\n#     define __extension__\n#  endif\n#  ifndef __const__\n#     define __const__ const\n#  endif\n#  ifndef __volatile__\n#     define __volatile__ volatile\n#  endif\n#  ifndef __signed__\n#     define __signed__ signed\n#  endif\n#  ifndef __typeof__\n#     define __typeof__ typeof\n#  endif\n#  ifndef __inline__\n#     define __inline__ inline\n#  endif\n#endif\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/macos.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Darin Adler 2001 - 2002. \n//  (C) Copyright Bill Kempf 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Mac OS specific config options:\n\n#define BOOST_PLATFORM \"Mac OS\"\n\n#if __MACH__ && !defined(_MSL_USING_MSL_C)\n\n// Using the Mac OS X system BSD-style C library.\n\n#  ifndef BOOST_HAS_UNISTD_H\n#    define BOOST_HAS_UNISTD_H\n#  endif\n//\n// Begin by including our boilerplate code for POSIX\n// feature detection, this is safe even when using\n// the MSL as Metrowerks supply their own <unistd.h>\n// to replace the platform-native BSD one. G++ users\n// should also always be able to do this on MaxOS X.\n//\n#  include <boost/config/posix_features.hpp>\n#  ifndef BOOST_HAS_STDINT_H\n#     define BOOST_HAS_STDINT_H\n#  endif\n\n//\n// BSD runtime has pthreads, sigaction, sched_yield and gettimeofday,\n// of these only pthreads are advertised in <unistd.h>, so set the \n// other options explicitly:\n//\n#  define BOOST_HAS_SCHED_YIELD\n#  define BOOST_HAS_GETTIMEOFDAY\n#  define BOOST_HAS_SIGACTION\n\n#  if (__GNUC__ < 3) && !defined( __APPLE_CC__)\n\n// GCC strange \"ignore std\" mode works better if you pretend everything\n// is in the std namespace, for the most part.\n\n#    define BOOST_NO_STDC_NAMESPACE\n#  endif\n\n#  if (__GNUC__ >= 4)\n\n// Both gcc and intel require these.  \n#    define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#    define BOOST_HAS_NANOSLEEP\n\n#  endif\n\n#else\n\n// Using the MSL C library.\n\n// We will eventually support threads in non-Carbon builds, but we do\n// not support this yet.\n#  if ( defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON ) || ( defined(TARGET_CARBON) && TARGET_CARBON )\n\n#  if !defined(BOOST_HAS_PTHREADS)\n// MPTasks support is deprecated/removed from Boost:\n//#    define BOOST_HAS_MPTASKS\n#  elif ( __dest_os == __mac_os_x )\n// We are doing a Carbon/Mach-O/MSL build which has pthreads, but only the\n// gettimeofday and no posix.\n#  define BOOST_HAS_GETTIMEOFDAY\n#  endif\n\n#ifdef BOOST_HAS_PTHREADS\n#  define BOOST_HAS_THREADS\n#endif\n\n// The remote call manager depends on this.\n#    define BOOST_BIND_ENABLE_PASCAL\n\n#  endif\n\n#endif\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/qnxnto.hpp",
    "content": "//  (C) Copyright Jim Douglas 2005. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  QNX specific config options:\n\n#define BOOST_PLATFORM \"QNX\"\n\n#define BOOST_HAS_UNISTD_H\n#include <boost/config/posix_features.hpp>\n\n// QNX claims XOpen version 5 compatibility, but doesn't have an nl_types.h\n// or log1p and expm1:\n#undef  BOOST_HAS_NL_TYPES_H\n#undef  BOOST_HAS_LOG1P\n#undef  BOOST_HAS_EXPM1\n\n#define BOOST_HAS_PTHREADS\n#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n\n#define BOOST_HAS_GETTIMEOFDAY\n#define BOOST_HAS_CLOCK_GETTIME\n#define BOOST_HAS_NANOSLEEP\n\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/solaris.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Jens Maurer 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  sun specific config options:\n\n#define BOOST_PLATFORM \"Sun Solaris\"\n\n#define BOOST_HAS_GETTIMEOFDAY\n\n// boilerplate code:\n#define BOOST_HAS_UNISTD_H\n#include <boost/config/posix_features.hpp>\n\n//\n// pthreads don't actually work with gcc unless _PTHREADS is defined:\n//\n#if defined(__GNUC__) && defined(_POSIX_THREADS) && !defined(_PTHREADS)\n# undef BOOST_HAS_PTHREADS\n#endif\n\n#define BOOST_HAS_STDINT_H \n#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE \n#define BOOST_HAS_LOG1P \n#define BOOST_HAS_EXPM1\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/symbian.hpp",
    "content": "//  (C) Copyright Yuriy Krasnoschek 2009. \n//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Jens Maurer 2001 - 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  symbian specific config options:\n\n\n#define BOOST_PLATFORM \"Symbian\"\n#define BOOST_SYMBIAN 1\n\n\n#if defined(__S60_3X__)\n// Open C / C++ plugin was introdused in this SDK, earlier versions don't have CRT / STL\n#  define BOOST_S60_3rd_EDITION_FP2_OR_LATER_SDK\n// make sure we have __GLIBC_PREREQ if available at all\n#ifdef __cplusplus\n#include <cstdlib>\n#else\n#include <stdlib.h>\n#endif// boilerplate code:\n#  define BOOST_HAS_UNISTD_H\n#  include <boost/config/posix_features.hpp>\n// S60 SDK defines _POSIX_VERSION as POSIX.1\n#  ifndef BOOST_HAS_STDINT_H\n#    define BOOST_HAS_STDINT_H\n#  endif\n#  ifndef BOOST_HAS_GETTIMEOFDAY\n#    define BOOST_HAS_GETTIMEOFDAY\n#  endif\n#  ifndef BOOST_HAS_DIRENT_H\n#    define BOOST_HAS_DIRENT_H\n#  endif\n#  ifndef BOOST_HAS_SIGACTION\n#    define BOOST_HAS_SIGACTION\n#  endif\n#  ifndef BOOST_HAS_PTHREADS\n#    define BOOST_HAS_PTHREADS\n#  endif\n#  ifndef BOOST_HAS_NANOSLEEP\n#    define BOOST_HAS_NANOSLEEP\n#  endif\n#  ifndef BOOST_HAS_SCHED_YIELD\n#    define BOOST_HAS_SCHED_YIELD\n#  endif\n#  ifndef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#    define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#  endif\n#  ifndef BOOST_HAS_LOG1P\n#    define BOOST_HAS_LOG1P\n#  endif\n#  ifndef BOOST_HAS_EXPM1\n#    define BOOST_HAS_EXPM1\n#  endif\n#  ifndef BOOST_POSIX_API\n#    define BOOST_POSIX_API\n#  endif\n// endianess support\n#  include <sys/endian.h>\n// Symbian SDK provides _BYTE_ORDER instead of __BYTE_ORDER\n#  ifndef __LITTLE_ENDIAN\n#    ifdef _LITTLE_ENDIAN\n#      define __LITTLE_ENDIAN _LITTLE_ENDIAN\n#    else\n#      define __LITTLE_ENDIAN 1234\n#    endif\n#  endif\n#  ifndef __BIG_ENDIAN\n#    ifdef _BIG_ENDIAN\n#      define __BIG_ENDIAN _BIG_ENDIAN\n#    else\n#      define __BIG_ENDIAN 4321\n#    endif\n#  endif\n#  ifndef __BYTE_ORDER\n#    define __BYTE_ORDER __LITTLE_ENDIAN // Symbian is LE\n#  endif\n// Known limitations\n#  define BOOST_ASIO_DISABLE_SERIAL_PORT\n#  define BOOST_DATE_TIME_NO_LOCALE\n#  define BOOST_NO_STD_WSTRING\n#  define BOOST_EXCEPTION_DISABLE\n#  define BOOST_NO_EXCEPTIONS\n\n#else // TODO: More platform support e.g. UIQ\n#  error \"Unsuppoted Symbian SDK\"\n#endif\n\n#if defined(__WINSCW__) && !defined(BOOST_DISABLE_WIN32)\n#  define BOOST_DISABLE_WIN32 // winscw defines WIN32 macro\n#endif\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/vms.hpp",
    "content": "//  (C) Copyright Artyom Beilis 2010.  \n//  Use, modification and distribution are subject to the  \n//  Boost Software License, Version 1.0. (See accompanying file  \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) \n\n#ifndef BOOST_CONFIG_PLATFORM_VMS_HPP \n#define BOOST_CONFIG_PLATFORM_VMS_HPP \n\n#define BOOST_PLATFORM \"OpenVMS\" \n\n#undef  BOOST_HAS_STDINT_H \n#define BOOST_HAS_UNISTD_H \n#define BOOST_HAS_NL_TYPES_H \n#define BOOST_HAS_GETTIMEOFDAY \n#define BOOST_HAS_DIRENT_H \n#define BOOST_HAS_PTHREADS \n#define BOOST_HAS_NANOSLEEP \n#define BOOST_HAS_CLOCK_GETTIME \n#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE \n#define BOOST_HAS_LOG1P \n#define BOOST_HAS_EXPM1 \n#define BOOST_HAS_THREADS \n#undef  BOOST_HAS_SCHED_YIELD \n\n#endif \n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/vxworks.hpp",
    "content": "//  (C) Copyright Dustin Spicuzza 2009.\n//      Adapted to vxWorks 6.9 by Peter Brockamp 2012.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Since WRS does not yet properly support boost under vxWorks\n//  and this file was badly outdated, but I was keen on using it,\n//  I patched boost myself to make things work. This has been tested\n//  and adapted by me for vxWorks 6.9 *only*, as I'm lacking access\n//  to earlier 6.X versions! The only thing I know for sure is that\n//  very old versions of vxWorks (namely everything below 6.x) are\n//  absolutely unable to use boost. This is mainly due to the completely\n//  outdated libraries and ancient compiler (GCC 2.96 or worse). Do\n//  not even think of getting this to work, a miserable failure will\n//  be guaranteed!\n//  Equally, this file has been tested for RTPs (Real Time Processes)\n//  only, not for DKMs (Downloadable Kernel Modules). These two types\n//  of executables differ largely in the available functionality of\n//  the C-library, STL, and so on. A DKM uses a library similar to those\n//  of vxWorks 5.X - with all its limitations and incompatibilities\n//  with respect to ANSI C++ and STL. So probably there might be problems\n//  with the usage of boost from DKMs. WRS or any voluteers are free to\n//  prove the opposite!\n\n// ====================================================================\n//\n// Some important information regarding the usage of POSIX semaphores:\n// -------------------------------------------------------------------\n//\n// VxWorks as a real time operating system handles threads somewhat\n// different from what \"normal\" OSes do, regarding their scheduling!\n// This could lead to a scenario called \"priority inversion\" when using\n// semaphores, see http://en.wikipedia.org/wiki/Priority_inversion.\n//\n// Now, VxWorks POSIX-semaphores for DKM's default to the usage of\n// priority inverting semaphores, which is fine. On the other hand,\n// for RTP's it defaults to using non priority inverting semaphores,\n// which could easily pose a serious problem for a real time process,\n// i.e. deadlocks! To overcome this two possibilities do exist:\n//\n// a) Patch every piece of boost that uses semaphores to instanciate\n//    the proper type of semaphores. This is non-intrusive with respect\n//    to the OS and could relatively easy been done by giving all\n//    semaphores attributes deviating from the default (for in-depth\n//    information see the POSIX functions pthread_mutexattr_init()\n//    and pthread_mutexattr_setprotocol()). However this breaks all\n//    too easily, as with every new version some boost library could\n//    all in a sudden start using semaphores, resurrecting the very\n//    same, hard to locate problem over and over again!\n//\n// b) We could change the default properties for POSIX-semaphores\n//    that VxWorks uses for RTP's and this is being suggested here,\n//    as it will more or less seamlessly integrate with boost. I got\n//    the following information from WRS how to do this, compare\n//    Wind River TSR# 1209768:\n//\n// Instructions for changing the default properties of POSIX-\n// semaphores for RTP's in VxWorks 6.9:\n// - Edit the file /vxworks-6.9/target/usr/src/posix/pthreadLib.c\n//   in the root of your Workbench-installation.\n// - Around line 917 there should be the definition of the default\n//   mutex attributes:\n//\n//   LOCAL pthread_mutexattr_t defaultMutexAttr =\n//       {\n//       PTHREAD_INITIALIZED_OBJ, PTHREAD_PRIO_NONE, 0,\n//       PTHREAD_MUTEX_DEFAULT\n//       };\n//\n//   Here, replace PTHREAD_PRIO_NONE by PTHREAD_PRIO_INHERIT.\n// - Around line 1236 there should be a definition for the function\n//   pthread_mutexattr_init(). A couple of lines below you should\n//   find a block of code like this:\n//\n//   pAttr->mutexAttrStatus      = PTHREAD_INITIALIZED_OBJ;\n//   pAttr->mutexAttrProtocol    = PTHREAD_PRIO_NONE;\n//   pAttr->mutexAttrPrioceiling = 0;\n//   pAttr->mutexAttrType        = PTHREAD_MUTEX_DEFAULT;\n//\n//   Here again, replace PTHREAD_PRIO_NONE by PTHREAD_PRIO_INHERIT.\n// - Finally, rebuild your VSB. This will create a new VxWorks kernel\n//   with the changed properties. That's it! Now, using boost should\n//   no longer cause any problems with task deadlocks!\n//\n// And here's another useful piece of information concerning VxWorks'\n// POSIX-functionality in general:\n// VxWorks is not a genuine POSIX-OS in itself, rather it is using a\n// kind of compatibility layer (sort of a wrapper) to emulate the\n// POSIX-functionality by using its own resources and functions.\n// At the time a task (thread) calls it's first POSIX-function during\n// runtime it is being transformed by the OS into a POSIX-thread.\n// This transformation does include a call to malloc() to allocate the\n// memory required for the housekeeping of POSIX-threads. In a high\n// priority RTP this malloc() call may be highly undesirable, as its\n// timing is more or less unpredictable (depending on what your actual\n// heap looks like). You can circumvent this problem by calling the\n// function thread_self() at a well defined point in the code of the\n// task, e.g. shortly after the task spawns up. Thereby you are able\n// to define the time when the task-transformation will take place and\n// you could shift it to an uncritical point where a malloc() call is\n// tolerable. So, if this could pose a problem for your code, remember\n// to call thread_self() from the affected task at an early stage.\n//\n// ====================================================================\n\n// Block out all versions before vxWorks 6.x, as these don't work:\n// Include header with the vxWorks version information and query them\n#include <version.h>\n#if !defined(_WRS_VXWORKS_MAJOR) || (_WRS_VXWORKS_MAJOR < 6)\n#  error \"The vxWorks version you're using is so badly outdated,\\\n          it doesn't work at all with boost, sorry, no chance!\"\n#endif\n\n// Handle versions above 5.X but below 6.9\n#if (_WRS_VXWORKS_MAJOR == 6) && (_WRS_VXWORKS_MINOR < 9)\n// TODO: Starting from what version does vxWorks work with boost?\n// We can't reasonably insert a #warning \"\" as a user hint here,\n// as this will show up with every file including some boost header,\n// badly bugging the user... So for the time being we just leave it.\n#endif\n\n// vxWorks specific config options:\n// --------------------------------\n#define BOOST_PLATFORM \"vxWorks\"\n\n// Special behaviour for DKMs:\n#ifdef _WRS_KERNEL\n  // DKMs do not have the <cwchar>-header,\n  // but apparently they do have an intrinsic wchar_t meanwhile!\n#  define BOOST_NO_CWCHAR\n\n  // Lots of wide-functions and -headers are unavailable for DKMs as well:\n#  define BOOST_NO_CWCTYPE\n#  define BOOST_NO_SWPRINTF\n#  define BOOST_NO_STD_WSTRING\n#  define BOOST_NO_STD_WSTREAMBUF\n#endif\n\n// Generally available headers:\n#define BOOST_HAS_UNISTD_H\n#define BOOST_HAS_STDINT_H\n#define BOOST_HAS_DIRENT_H\n#define BOOST_HAS_SLIST\n\n// vxWorks does not have installed an iconv-library by default,\n// so unfortunately no Unicode support from scratch is available!\n// Thus, instead it is suggested to switch to ICU, as this seems\n// to be the most complete and portable option...\n#define BOOST_LOCALE_WITH_ICU\n\n// Generally available functionality:\n#define BOOST_HAS_THREADS\n#define BOOST_HAS_NANOSLEEP\n#define BOOST_HAS_GETTIMEOFDAY\n#define BOOST_HAS_CLOCK_GETTIME\n#define BOOST_HAS_MACRO_USE_FACET\n\n// Generally unavailable functionality, delivered by boost's test function:\n//#define BOOST_NO_DEDUCED_TYPENAME // Commented this out, boost's test gives an errorneous result!\n#define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#define BOOST_NO_CXX11_VARIADIC_MACROS\n\n// Generally available threading API's:\n#define BOOST_HAS_PTHREADS\n#define BOOST_HAS_SCHED_YIELD\n#define BOOST_HAS_SIGACTION\n\n// Functionality available for RTPs only:\n#ifdef __RTP__\n#  define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#  define BOOST_HAS_LOG1P\n#  define BOOST_HAS_EXPM1\n#endif\n\n// Functionality available for DKMs only:\n#ifdef _WRS_KERNEL\n  // Luckily, at the moment there seems to be none!\n#endif\n\n// These #defines allow posix_features to work, since vxWorks doesn't\n// #define them itself for DKMs (for RTPs on the contrary it does):\n#ifdef _WRS_KERNEL\n#  ifndef _POSIX_TIMERS\n#    define _POSIX_TIMERS  1\n#  endif\n#  ifndef _POSIX_THREADS\n#    define _POSIX_THREADS 1\n#  endif\n#endif\n\n// vxWorks doesn't work with asio serial ports:\n#define BOOST_ASIO_DISABLE_SERIAL_PORT\n// TODO: The problem here seems to bee that vxWorks uses its own, very specific\n//       ways to handle serial ports, incompatible with POSIX or anything...\n//       Maybe a specific implementation would be possible, but until the\n//       straight need arises... This implementation would presumably consist\n//       of some vxWorks specific ioctl-calls, etc. Any voluteers?\n\n// vxWorks-around: <time.h> #defines CLOCKS_PER_SEC as sysClkRateGet() but\n//                 miserably fails to #include the required <sysLib.h> to make\n//                 sysClkRateGet() available! So we manually include it here.\n#ifdef __RTP__\n#  include <time.h>\n#  include <sysLib.h>\n#endif\n\n// vxWorks-around: In <stdint.h> the macros INT32_C(), UINT32_C(), INT64_C() and\n//                 UINT64_C() are defined errorneously, yielding not a signed/\n//                 unsigned long/long long type, but a signed/unsigned int/long\n//                 type. Eventually this leads to compile errors in ratio_fwd.hpp,\n//                 when trying to define several constants which do not fit into a\n//                 long type! We correct them here by redefining.\n#include <cstdint>\n\n// Some macro-magic to do the job\n#define VX_JOIN(X, Y)     VX_DO_JOIN(X, Y)\n#define VX_DO_JOIN(X, Y)  VX_DO_JOIN2(X, Y)\n#define VX_DO_JOIN2(X, Y) X##Y\n\n// Correctly setup the macros\n#undef  INT32_C\n#undef  UINT32_C\n#undef  INT64_C\n#undef  UINT64_C\n#define INT32_C(x)  VX_JOIN(x, L)\n#define UINT32_C(x) VX_JOIN(x, UL)\n#define INT64_C(x)  VX_JOIN(x, LL)\n#define UINT64_C(x) VX_JOIN(x, ULL)\n\n// #include Libraries required for the following function adaption\n#include <ioLib.h>\n#include <tickLib.h>\n#include <sys/time.h>\n\n// Use C-linkage for the following helper functions\nextern \"C\" {\n\n// vxWorks-around: The required functions getrlimit() and getrlimit() are missing.\n//                 But we have the similar functions getprlimit() and setprlimit(),\n//                 which may serve the purpose.\n//                 Problem: The vxWorks-documentation regarding these functions\n//                 doesn't deserve its name! It isn't documented what the first two\n//                 parameters idtype and id mean, so we must fall back to an educated\n//                 guess - null, argh... :-/\n\n// TODO: getprlimit() and setprlimit() do exist for RTPs only, for whatever reason.\n//       Thus for DKMs there would have to be another implementation.\n#ifdef __RTP__\n  inline int getrlimit(int resource, struct rlimit *rlp){\n    return getprlimit(0, 0, resource, rlp);\n  }\n\n  inline int setrlimit(int resource, const struct rlimit *rlp){\n    return setprlimit(0, 0, resource, const_cast<struct rlimit*>(rlp));\n  }\n#endif\n\n// vxWorks has ftruncate() only, so we do simulate truncate():\ninline int truncate(const char *p, off_t l){\n  int fd = open(p, O_WRONLY);\n  if (fd == -1){\n    errno = EACCES;\n    return -1;\n  }\n  if (ftruncate(fd, l) == -1){\n    close(fd);\n    errno = EACCES;\n    return -1;\n  }\n  return close(fd);\n}\n\n// Fake symlink handling by dummy functions:\ninline int symlink(const char*, const char*){\n  // vxWorks has no symlinks -> always return an error!\n  errno = EACCES;\n  return -1;\n}\n\ninline ssize_t readlink(const char*, char*, size_t){\n  // vxWorks has no symlinks -> always return an error!\n  errno = EACCES;\n  return -1;\n}\n\n// vxWorks claims to implement gettimeofday in sys/time.h\n// but nevertheless does not provide it! See\n// https://support.windriver.com/olsPortal/faces/maintenance/techtipDetail_noHeader.jspx?docId=16442&contentId=WR_TECHTIP_006256\n// We implement a surrogate version here via clock_gettime:\ninline int gettimeofday(struct timeval *tv, void * /*tzv*/) {\n  struct timespec ts;\n  clock_gettime(CLOCK_MONOTONIC, &ts);\n  tv->tv_sec  = ts.tv_sec;\n  tv->tv_usec = ts.tv_nsec / 1000;\n  return 0;\n}\n\n// vxWorks does provide neither struct tms nor function times()!\n// We implement an empty dummy-function, simply setting the user\n// and system time to the half of thew actual system ticks-value\n// and the child user and system time to 0.\n// Rather ugly but at least it suppresses compiler errors...\n// Unfortunately, this of course *does* have an severe impact on\n// dependant libraries, actually this is chrono only! Here it will\n// not be possible to correctly use user and system times! But\n// as vxWorks is lacking the ability to calculate user and system\n// process times there seems to be no other possible solution.\nstruct tms{\n  clock_t tms_utime;  // User CPU time\n  clock_t tms_stime;  // System CPU time\n  clock_t tms_cutime; // User CPU time of terminated child processes\n  clock_t tms_cstime; // System CPU time of terminated child processes\n};\n\ninline clock_t times(struct tms *t){\n  struct timespec ts;\n  clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);\n  clock_t ticks(static_cast<clock_t>(static_cast<double>(ts.tv_sec)  * CLOCKS_PER_SEC +\n                                     static_cast<double>(ts.tv_nsec) * CLOCKS_PER_SEC / 1000000.0));\n  t->tms_utime  = ticks/2U;\n  t->tms_stime  = ticks/2U;\n  t->tms_cutime = 0; // vxWorks is lacking the concept of a child process!\n  t->tms_cstime = 0; // -> Set the wait times for childs to 0\n  return ticks;\n}\n\n} // extern \"C\"\n\n// Put the selfmade functions into the std-namespace, just in case\nnamespace std {\n# ifdef __RTP__\n    using ::getrlimit;\n    using ::setrlimit;\n# endif\n  using ::truncate;\n  using ::symlink;\n  using ::readlink;\n  using ::times;\n  using ::gettimeofday;\n}\n\n// Some more macro-magic:\n// vxWorks-around: Some functions are not present or broken in vxWorks\n//                 but may be patched to life via helper macros...\n\n// Include signal.h which might contain a typo to be corrected here\n#include <signal.h>\n\n#define getpagesize()    sysconf(_SC_PAGESIZE)         // getpagesize is deprecated anyway!\n#ifndef S_ISSOCK\n#  define S_ISSOCK(mode) ((mode & S_IFMT) == S_IFSOCK) // Is file a socket?\n#endif\n#define lstat(p, b)      stat(p, b)                    // lstat() == stat(), as vxWorks has no symlinks!\n#ifndef FPE_FLTINV\n#  define FPE_FLTINV     (FPE_FLTSUB+1)                // vxWorks has no FPE_FLTINV, so define one as a dummy\n#endif\n#if !defined(BUS_ADRALN) && defined(BUS_ADRALNR)\n#  define BUS_ADRALN     BUS_ADRALNR                   // Correct a supposed typo in vxWorks' <signal.h>\n#endif\n//typedef int              locale_t;                     // locale_t is a POSIX-extension, currently unpresent in vxWorks!\n\n// #include boilerplate code:\n#include <boost/config/posix_features.hpp>\n\n// vxWorks lies about XSI conformance, there is no nl_types.h:\n#undef BOOST_HAS_NL_TYPES_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/platform/win32.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Bill Kempf 2001. \n//  (C) Copyright Aleksey Gurtovoy 2003. \n//  (C) Copyright Rene Rivera 2005.\n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Win32 specific config options:\n\n#define BOOST_PLATFORM \"Win32\"\n\n//  Get the information about the MinGW runtime, i.e. __MINGW32_*VERSION.\n#if defined(__MINGW32__)\n#  include <_mingw.h>\n#endif\n\n#if defined(__GNUC__) && !defined(BOOST_NO_SWPRINTF)\n#  define BOOST_NO_SWPRINTF\n#endif\n\n//  Default defines for BOOST_SYMBOL_EXPORT and BOOST_SYMBOL_IMPORT\n//  If a compiler doesn't support __declspec(dllexport)/__declspec(dllimport),\n//  its boost/config/compiler/ file must define BOOST_SYMBOL_EXPORT and\n//  BOOST_SYMBOL_IMPORT\n#ifndef BOOST_SYMBOL_EXPORT\n#  define BOOST_HAS_DECLSPEC\n#  define BOOST_SYMBOL_EXPORT __declspec(dllexport)\n#  define BOOST_SYMBOL_IMPORT __declspec(dllimport)\n#endif\n\n#if defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 2) || ((__MINGW32_MAJOR_VERSION == 2) && (__MINGW32_MINOR_VERSION >= 0)))\n#  define BOOST_HAS_STDINT_H\n#  ifndef __STDC_LIMIT_MACROS\n#     define __STDC_LIMIT_MACROS\n#  endif\n#  define BOOST_HAS_DIRENT_H\n#  define BOOST_HAS_UNISTD_H\n#endif\n\n#if defined(__MINGW32__) && (__GNUC__ >= 4)\n// Mingw has these functions but there are persistent problems\n// with calls to these crashing, so disable for now:\n//#  define BOOST_HAS_EXPM1\n//#  define BOOST_HAS_LOG1P\n#  define BOOST_HAS_GETTIMEOFDAY\n#endif\n//\n// Win32 will normally be using native Win32 threads,\n// but there is a pthread library avaliable as an option,\n// we used to disable this when BOOST_DISABLE_WIN32 was \n// defined but no longer - this should allow some\n// files to be compiled in strict mode - while maintaining\n// a consistent setting of BOOST_HAS_THREADS across\n// all translation units (needed for shared_ptr etc).\n//\n\n#ifndef BOOST_HAS_PTHREADS\n#  define BOOST_HAS_WINTHREADS\n#endif\n\n//\n// WinCE configuration:\n//\n#if defined(_WIN32_WCE) || defined(UNDER_CE)\n#  define BOOST_NO_ANSI_APIS\n// Windows CE does not have a conforming signature for swprintf\n#  define BOOST_NO_SWPRINTF\n#else\n#  define BOOST_HAS_GETSYSTEMTIMEASFILETIME\n#  define BOOST_HAS_THREADEX\n#  define BOOST_HAS_GETSYSTEMTIMEASFILETIME\n#endif\n\n//\n// Windows Runtime\n//\n#if defined(WINAPI_FAMILY) && \\\n  (WINAPI_FAMILY == WINAPI_FAMILY_APP || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)\n#  define BOOST_NO_ANSI_APIS\n#endif\n\n#ifndef BOOST_DISABLE_WIN32\n// WEK: Added\n#define BOOST_HAS_FTIME\n#define BOOST_WINDOWS 1\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/posix_features.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n\n//  See http://www.boost.org for most recent version.\n\n// All POSIX feature tests go in this file,\n// Note that we test _POSIX_C_SOURCE and _XOPEN_SOURCE as well\n// _POSIX_VERSION and _XOPEN_VERSION: on some systems POSIX API's\n// may be present but none-functional unless _POSIX_C_SOURCE and\n// _XOPEN_SOURCE have been defined to the right value (it's up\n// to the user to do this *before* including any header, although\n// in most cases the compiler will do this for you).\n\n#  if defined(BOOST_HAS_UNISTD_H)\n#     include <unistd.h>\n\n      // XOpen has <nl_types.h>, but is this the correct version check?\n#     if defined(_XOPEN_VERSION) && (_XOPEN_VERSION >= 3)\n#        define BOOST_HAS_NL_TYPES_H\n#     endif\n\n      // POSIX version 6 requires <stdint.h>\n#     if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100)\n#        define BOOST_HAS_STDINT_H\n#     endif\n\n      // POSIX version 2 requires <dirent.h>\n#     if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L)\n#        define BOOST_HAS_DIRENT_H\n#     endif\n\n      // POSIX version 3 requires <signal.h> to have sigaction:\n#     if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199506L)\n#        define BOOST_HAS_SIGACTION\n#     endif\n      // POSIX defines _POSIX_THREADS > 0 for pthread support,\n      // however some platforms define _POSIX_THREADS without\n      // a value, hence the (_POSIX_THREADS+0 >= 0) check.\n      // Strictly speaking this may catch platforms with a\n      // non-functioning stub <pthreads.h>, but such occurrences should\n      // occur very rarely if at all.\n#     if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_MPTASKS)\n#        define BOOST_HAS_PTHREADS\n#     endif\n\n      // BOOST_HAS_NANOSLEEP:\n      // This is predicated on _POSIX_TIMERS or _XOPEN_REALTIME:\n#     if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) \\\n             || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0))\n#        define BOOST_HAS_NANOSLEEP\n#     endif\n\n      // BOOST_HAS_CLOCK_GETTIME:\n      // This is predicated on _POSIX_TIMERS (also on _XOPEN_REALTIME\n      // but at least one platform - linux - defines that flag without\n      // defining clock_gettime):\n#     if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0))\n#        define BOOST_HAS_CLOCK_GETTIME\n#     endif\n\n      // BOOST_HAS_SCHED_YIELD:\n      // This is predicated on _POSIX_PRIORITY_SCHEDULING or\n      // on _POSIX_THREAD_PRIORITY_SCHEDULING or on _XOPEN_REALTIME.\n#     if defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING+0 > 0)\\\n            || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\\\n            || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0))\n#        define BOOST_HAS_SCHED_YIELD\n#     endif\n\n      // BOOST_HAS_GETTIMEOFDAY:\n      // BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE:\n      // These are predicated on _XOPEN_VERSION, and appears to be first released\n      // in issue 4, version 2 (_XOPEN_VERSION > 500).\n      // Likewise for the functions log1p and expm1.\n#     if defined(_XOPEN_VERSION) && (_XOPEN_VERSION+0 >= 500)\n#        define BOOST_HAS_GETTIMEOFDAY\n#        if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE+0 >= 500)\n#           define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#        endif\n#        ifndef BOOST_HAS_LOG1P\n#           define BOOST_HAS_LOG1P\n#        endif\n#        ifndef BOOST_HAS_EXPM1\n#           define BOOST_HAS_EXPM1\n#        endif\n#     endif\n\n#  endif\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/requires_threads.hpp",
    "content": "//  (C) Copyright John Maddock 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n\n#ifndef BOOST_CONFIG_REQUIRES_THREADS_HPP\n#define BOOST_CONFIG_REQUIRES_THREADS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n\n#if defined(BOOST_DISABLE_THREADS)\n\n//\n// special case to handle versions of gcc which don't currently support threads:\n//\n#if defined(__GNUC__) && ((__GNUC__ < 3) || (__GNUC_MINOR__ <= 3) || !defined(BOOST_STRICT_CONFIG))\n//\n// this is checked up to gcc 3.3:\n//\n#if defined(__sgi) || defined(__hpux)\n#  error \"Multi-threaded programs are not supported by gcc on HPUX or Irix (last checked with gcc 3.3)\"\n#endif\n\n#endif\n\n#  error \"Threading support unavaliable: it has been explicitly disabled with BOOST_DISABLE_THREADS\"\n\n#elif !defined(BOOST_HAS_THREADS)\n\n# if defined __COMO__\n//  Comeau C++\n#   error \"Compiler threading support is not turned on. Please set the correct command line options for threading: -D_MT (Windows) or -D_REENTRANT (Unix)\"\n\n#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)\n//  Intel\n#ifdef _WIN32\n#  error \"Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd\"\n#else\n#   error \"Compiler threading support is not turned on. Please set the correct command line options for threading: -openmp\"\n#endif\n\n# elif defined __GNUC__\n//  GNU C++:\n#   error \"Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)\"\n\n#elif defined __sgi\n//  SGI MIPSpro C++\n#   error \"Compiler threading support is not turned on. Please set the correct command line options for threading: -D_SGI_MP_SOURCE\"\n\n#elif defined __DECCXX\n//  Compaq Tru64 Unix cxx\n#   error \"Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread\"\n\n#elif defined __BORLANDC__\n//  Borland\n#   error \"Compiler threading support is not turned on. Please set the correct command line options for threading: -tWM\"\n\n#elif defined  __MWERKS__\n//  Metrowerks CodeWarrior\n#   error \"Compiler threading support is not turned on. Please set the correct command line options for threading: either -runtime sm, -runtime smd, -runtime dm, or -runtime dmd\"\n\n#elif defined  __SUNPRO_CC\n//  Sun Workshop Compiler C++\n#   error \"Compiler threading support is not turned on. Please set the correct command line options for threading: -mt\"\n\n#elif defined __HP_aCC\n//  HP aCC\n#   error \"Compiler threading support is not turned on. Please set the correct command line options for threading: -mt\"\n\n#elif defined(__IBMCPP__)\n//  IBM Visual Age\n#   error \"Compiler threading support is not turned on. Please compile the code with the xlC_r compiler\"\n\n#elif defined _MSC_VER\n//  Microsoft Visual C++\n//\n//  Must remain the last #elif since some other vendors (Metrowerks, for\n//  example) also #define _MSC_VER\n#  error \"Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd\"\n\n#else\n\n#  error \"Compiler threading support is not turned on.  Please consult your compiler's documentation for the appropriate options to use\"\n\n#endif // compilers\n\n#endif // BOOST_HAS_THREADS\n\n#endif // BOOST_CONFIG_REQUIRES_THREADS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/select_compiler_config.hpp",
    "content": "//  Boost compiler configuration selection header file\n\n//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Martin Wille 2003.\n//  (C) Copyright Guillaume Melquiond 2003.\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//   http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for most recent version.\n\n// locate which compiler we are using and define\n// BOOST_COMPILER_CONFIG as needed: \n\n#if defined __CUDACC__\n//  NVIDIA CUDA C++ compiler for GPU\n#   include \"boost/config/compiler/nvcc.hpp\"\n\n#endif\n\n#if defined(__GCCXML__)\n// GCC-XML emulates other compilers, it has to appear first here!\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/gcc_xml.hpp\"\n\n#elif defined(_CRAYC)\n// EDG based Cray compiler:\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/cray.hpp\"\n\n#elif defined __COMO__\n//  Comeau C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/comeau.hpp\"\n\n#elif defined(__PATHSCALE__) && (__PATHCC__ >= 4)\n// PathScale EKOPath compiler (has to come before clang and gcc)\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/pathscale.hpp\"\n\n#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)\n//  Intel\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/intel.hpp\"\n\n#elif defined __clang__ && !defined(__CUDACC__) && !defined(__ibmxl__)\n// when using clang and cuda at same time, you want to appear as gcc\n//  Clang C++ emulates GCC, so it has to appear early.\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/clang.hpp\"\n\n#elif defined __DMC__\n//  Digital Mars C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/digitalmars.hpp\"\n\n# elif defined(__GNUC__) && !defined(__ibmxl__)\n//  GNU C++:\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/gcc.hpp\"\n\n#elif defined __KCC\n//  Kai C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/kai.hpp\"\n\n#elif defined __sgi\n//  SGI MIPSpro C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/sgi_mipspro.hpp\"\n\n#elif defined __DECCXX\n//  Compaq Tru64 Unix cxx\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/compaq_cxx.hpp\"\n\n#elif defined __ghs\n//  Greenhills C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/greenhills.hpp\"\n\n#elif defined __CODEGEARC__\n//  CodeGear - must be checked for before Borland\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/codegear.hpp\"\n\n#elif defined __BORLANDC__\n//  Borland\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/borland.hpp\"\n\n#elif defined  __MWERKS__\n//  Metrowerks CodeWarrior\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/metrowerks.hpp\"\n\n#elif defined  __SUNPRO_CC\n//  Sun Workshop Compiler C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/sunpro_cc.hpp\"\n\n#elif defined __HP_aCC\n//  HP aCC\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/hp_acc.hpp\"\n\n#elif defined(__MRC__) || defined(__SC__)\n//  MPW MrCpp or SCpp\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/mpw.hpp\"\n\n#elif defined(__ibmxl__)\n// IBM XL C/C++ for Linux (Little Endian)\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/xlcpp.hpp\"\n\n#elif defined(__IBMCPP__)\n//  IBM Visual Age or IBM XL C/C++ for Linux (Big Endian)\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/vacpp.hpp\"\n\n#elif defined(__PGI)\n//  Portland Group Inc.\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/pgi.hpp\"\n\n#elif defined _MSC_VER\n//  Microsoft Visual C++\n//\n//  Must remain the last #elif since some other vendors (Metrowerks, for\n//  example) also #define _MSC_VER\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/visualc.hpp\"\n\n#elif defined (BOOST_ASSERT_CONFIG)\n// this must come last - generate an error if we don't\n// recognise the compiler:\n#  error \"Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)\"\n\n#endif\n\n#if 0\n//\n// This section allows dependency scanners to find all the headers we *might* include:\n//\n#include \"boost/config/compiler/gcc_xml.hpp\"\n#include \"boost/config/compiler/cray.hpp\"\n#include \"boost/config/compiler/comeau.hpp\"\n#include \"boost/config/compiler/pathscale.hpp\"\n#include \"boost/config/compiler/intel.hpp\"\n#include \"boost/config/compiler/clang.hpp\"\n#include \"boost/config/compiler/digitalmars.hpp\"\n#include \"boost/config/compiler/gcc.hpp\"\n#include \"boost/config/compiler/kai.hpp\"\n#include \"boost/config/compiler/sgi_mipspro.hpp\"\n#include \"boost/config/compiler/compaq_cxx.hpp\"\n#include \"boost/config/compiler/greenhills.hpp\"\n#include \"boost/config/compiler/codegear.hpp\"\n#include \"boost/config/compiler/borland.hpp\"\n#include \"boost/config/compiler/metrowerks.hpp\"\n#include \"boost/config/compiler/sunpro_cc.hpp\"\n#include \"boost/config/compiler/hp_acc.hpp\"\n#include \"boost/config/compiler/mpw.hpp\"\n#include \"boost/config/compiler/vacpp.hpp\"\n#include \"boost/config/compiler/pgi.hpp\"\n#include \"boost/config/compiler/visualc.hpp\"\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/select_platform_config.hpp",
    "content": "//  Boost compiler configuration selection header file\n\n//  (C) Copyright John Maddock 2001 - 2002. \n//  (C) Copyright Jens Maurer 2001. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n// locate which platform we are on and define BOOST_PLATFORM_CONFIG as needed.\n// Note that we define the headers to include using \"header_name\" not\n// <header_name> in order to prevent macro expansion within the header\n// name (for example \"linux\" is a macro on linux systems).\n\n#if (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) && !defined(_CRAYC)\n// linux, also other platforms (Hurd etc) that use GLIBC, should these really have their own config headers though?\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/linux.hpp\"\n\n#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)\n// BSD:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/bsd.hpp\"\n\n#elif defined(sun) || defined(__sun)\n// solaris:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/solaris.hpp\"\n\n#elif defined(__sgi)\n// SGI Irix:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/irix.hpp\"\n\n#elif defined(__hpux)\n// hp unix:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/hpux.hpp\"\n\n#elif defined(__CYGWIN__)\n// cygwin is not win32:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/cygwin.hpp\"\n\n#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)\n// win32:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/win32.hpp\"\n\n#elif defined(__HAIKU__)\n// Haiku\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/haiku.hpp\"\n\n#elif defined(__BEOS__)\n// BeOS\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/beos.hpp\"\n\n#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)\n// MacOS\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/macos.hpp\"\n\n#elif defined(__IBMCPP__) || defined(_AIX)\n// IBM\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/aix.hpp\"\n\n#elif defined(__amigaos__)\n// AmigaOS\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/amigaos.hpp\"\n\n#elif defined(__QNXNTO__)\n// QNX:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/qnxnto.hpp\"\n\n#elif defined(__VXWORKS__)\n// vxWorks:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/vxworks.hpp\"\n\n#elif defined(__SYMBIAN32__) \n// Symbian: \n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/symbian.hpp\" \n\n#elif defined(_CRAYC)\n// Cray:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/cray.hpp\" \n\n#elif defined(__VMS) \n// VMS:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/vms.hpp\" \n\n#elif defined(__CloudABI__)\n// Nuxi CloudABI:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/cloudabi.hpp\"\n#else\n\n#  if defined(unix) \\\n      || defined(__unix) \\\n      || defined(_XOPEN_SOURCE) \\\n      || defined(_POSIX_SOURCE)\n\n   // generic unix platform:\n\n#  ifndef BOOST_HAS_UNISTD_H\n#     define BOOST_HAS_UNISTD_H\n#  endif\n\n#  include <boost/config/posix_features.hpp>\n\n#  endif\n\n#  if defined (BOOST_ASSERT_CONFIG)\n      // this must come last - generate an error if we don't\n      // recognise the platform:\n#     error \"Unknown platform - please configure and report the results to boost.org\"\n#  endif\n\n#endif\n\n#if 0\n//\n// This section allows dependency scanners to find all the files we *might* include:\n//\n#  include \"boost/config/platform/linux.hpp\"\n#  include \"boost/config/platform/bsd.hpp\"\n#  include \"boost/config/platform/solaris.hpp\"\n#  include \"boost/config/platform/irix.hpp\"\n#  include \"boost/config/platform/hpux.hpp\"\n#  include \"boost/config/platform/cygwin.hpp\"\n#  include \"boost/config/platform/win32.hpp\"\n#  include \"boost/config/platform/beos.hpp\"\n#  include \"boost/config/platform/macos.hpp\"\n#  include \"boost/config/platform/aix.hpp\"\n#  include \"boost/config/platform/amigaos.hpp\"\n#  include \"boost/config/platform/qnxnto.hpp\"\n#  include \"boost/config/platform/vxworks.hpp\"\n#  include \"boost/config/platform/symbian.hpp\" \n#  include \"boost/config/platform/cray.hpp\" \n#  include \"boost/config/platform/vms.hpp\" \n#  include <boost/config/posix_features.hpp>\n\n\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/select_stdlib_config.hpp",
    "content": "//  Boost compiler configuration selection header file\n\n//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Jens Maurer 2001 - 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n\n//  See http://www.boost.org for most recent version.\n\n// locate which std lib we are using and define BOOST_STDLIB_CONFIG as needed:\n\n// First include <cstddef> to determine if some version of STLport is in use as the std lib\n// (do not rely on this header being included since users can short-circuit this header \n//  if they know whose std lib they are using.)\n#ifdef __cplusplus\n#  include <cstddef>\n#else\n#  include <stddef.h>\n#endif\n\n#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)\n// STLPort library; this _must_ come first, otherwise since\n// STLport typically sits on top of some other library, we\n// can end up detecting that first rather than STLport:\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/stlport.hpp\"\n\n#else\n\n// If our std lib was not some version of STLport, and has not otherwise\n// been detected, then include <utility> as it is about \n// the smallest of the std lib headers that includes real C++ stuff.\n// Some std libs do not include their C++-related macros in <cstddef> \n// so this additional include makes sure we get those definitions.\n// Note: do not rely on this header being included since users can short-circuit this \n// #include if they know whose std lib they are using.\n#if !defined(__LIBCOMO__) && !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER)\\\n   && !defined(_LIBCPP_VERSION) && !defined(__GLIBCPP__) && !defined(__GLIBCXX__)\\\n   && !defined(__STL_CONFIG_H) && !defined(__MSL_CPP__) && !defined(__IBMCPP__)\\\n   && !defined(MSIPL_COMPILE_H) && !defined(_YVALS) && !defined(_CPPLIB_VER)\n#include <utility>\n#endif\n\n#if defined(__LIBCOMO__)\n// Comeau STL:\n#define BOOST_STDLIB_CONFIG \"boost/config/stdlib/libcomo.hpp\"\n\n#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)\n// Rogue Wave library:\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/roguewave.hpp\"\n\n#elif defined(_LIBCPP_VERSION)\n// libc++\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/libcpp.hpp\"\n\n#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)\n// GNU libstdc++ 3\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/libstdcpp3.hpp\"\n\n#elif defined(__STL_CONFIG_H)\n// generic SGI STL\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/sgi.hpp\"\n\n#elif defined(__MSL_CPP__)\n// MSL standard lib:\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/msl.hpp\"\n\n#elif defined(__IBMCPP__)\n// take the default VACPP std lib\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/vacpp.hpp\"\n\n#elif defined(MSIPL_COMPILE_H)\n// Modena C++ standard library\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/modena.hpp\"\n\n#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)\n// Dinkumware Library (this has to appear after any possible replacement libraries):\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/dinkumware.hpp\"\n\n#elif defined (BOOST_ASSERT_CONFIG)\n// this must come last - generate an error if we don't\n// recognise the library:\n#  error \"Unknown standard library - please configure and report the results to boost.org\"\n\n#endif\n\n#endif\n\n#if 0\n//\n// This section allows dependency scanners to find all the files we *might* include:\n//\n#  include \"boost/config/stdlib/stlport.hpp\"\n#  include \"boost/config/stdlib/libcomo.hpp\"\n#  include \"boost/config/stdlib/roguewave.hpp\"\n#  include \"boost/config/stdlib/libcpp.hpp\"\n#  include \"boost/config/stdlib/libstdcpp3.hpp\"\n#  include \"boost/config/stdlib/sgi.hpp\"\n#  include \"boost/config/stdlib/msl.hpp\"\n#  include \"boost/config/stdlib/vacpp.hpp\"\n#  include \"boost/config/stdlib/modena.hpp\"\n#  include \"boost/config/stdlib/dinkumware.hpp\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/dinkumware.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003.\n//  (C) Copyright Jens Maurer 2001.\n//  (C) Copyright Peter Dimov 2001.\n//  (C) Copyright David Abrahams 2002.\n//  (C) Copyright Guillaume Melquiond 2003.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Dinkumware standard library config:\n\n#if !defined(_YVALS) && !defined(_CPPLIB_VER)\n#include <boost/config/no_tr1/utility.hpp>\n#if !defined(_YVALS) && !defined(_CPPLIB_VER)\n#error This is not the Dinkumware lib!\n#endif\n#endif\n\n\n#if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306)\n   // full dinkumware 3.06 and above\n   // fully conforming provided the compiler supports it:\n#  if !(defined(_GLOBAL_USING) && (_GLOBAL_USING+0 > 0)) && !defined(__BORLANDC__) && !defined(_STD) && !(defined(__ICC) && (__ICC >= 700))   // can be defined in yvals.h\n#     define BOOST_NO_STDC_NAMESPACE\n#  endif\n#  if !(defined(_HAS_MEMBER_TEMPLATES_REBIND) && (_HAS_MEMBER_TEMPLATES_REBIND+0 > 0)) && !(defined(_MSC_VER) && (_MSC_VER > 1300)) && defined(BOOST_MSVC)\n#     define BOOST_NO_STD_ALLOCATOR\n#  endif\n#  define BOOST_HAS_PARTIAL_STD_ALLOCATOR\n#  if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)\n      // if this lib version is set up for vc6 then there is no std::use_facet:\n#     define BOOST_NO_STD_USE_FACET\n#     define BOOST_HAS_TWO_ARG_USE_FACET\n      // C lib functions aren't in namespace std either:\n#     define BOOST_NO_STDC_NAMESPACE\n      // and nor is <exception>\n#     define BOOST_NO_EXCEPTION_STD_NAMESPACE\n#  endif\n// There's no numeric_limits<long long> support unless _LONGLONG is defined:\n#  if !defined(_LONGLONG) && (_CPPLIB_VER <= 310)\n#     define BOOST_NO_MS_INT64_NUMERIC_LIMITS\n#  endif\n// 3.06 appears to have (non-sgi versions of) <hash_set> & <hash_map>,\n// and no <slist> at all\n#else\n#  define BOOST_MSVC_STD_ITERATOR 1\n#  define BOOST_NO_STD_ITERATOR\n#  define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS\n#  define BOOST_NO_STD_ALLOCATOR\n#  define BOOST_NO_STDC_NAMESPACE\n#  define BOOST_NO_STD_USE_FACET\n#  define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN\n#  define BOOST_HAS_MACRO_USE_FACET\n#  ifndef _CPPLIB_VER\n      // Updated Dinkum library defines this, and provides\n      // its own min and max definitions, as does MTA version.\n#     ifndef __MTA__ \n#        define BOOST_NO_STD_MIN_MAX\n#     endif\n#     define BOOST_NO_MS_INT64_NUMERIC_LIMITS\n#  endif\n#endif\n\n//\n// std extension namespace is stdext for vc7.1 and later, \n// the same applies to other compilers that sit on top\n// of vc7.1 (Intel and Comeau):\n//\n#if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(__BORLANDC__)\n#  define BOOST_STD_EXTENSION_NAMESPACE stdext\n#endif\n\n\n#if (defined(_MSC_VER) && (_MSC_VER <= 1300) && !defined(__BORLANDC__)) || !defined(_CPPLIB_VER) || (_CPPLIB_VER < 306)\n   // if we're using a dinkum lib that's\n   // been configured for VC6/7 then there is\n   // no iterator traits (true even for icl)\n#  define BOOST_NO_STD_ITERATOR_TRAITS\n#endif\n\n#if defined(__ICL) && (__ICL < 800) && defined(_CPPLIB_VER) && (_CPPLIB_VER <= 310)\n// Intel C++ chokes over any non-trivial use of <locale>\n// this may be an overly restrictive define, but regex fails without it:\n#  define BOOST_NO_STD_LOCALE\n#endif\n\n// Fix for VC++ 8.0 on up ( I do not have a previous version to test )\n// or clang-cl. If exceptions are off you must manually include the \n// <exception> header before including the <typeinfo> header. Admittedly \n// trying to use Boost libraries or the standard C++ libraries without \n// exception support is not suggested but currently clang-cl ( v 3.4 ) \n// does not support exceptions and must be compiled with exceptions off.\n#if !_HAS_EXCEPTIONS && ((defined(BOOST_MSVC) && BOOST_MSVC >= 1400) || (defined(__clang__) && defined(_MSC_VER)))\n#include <exception>\n#endif\n#include <typeinfo>\n#if ( (!_HAS_EXCEPTIONS && !defined(__ghs__)) || (!_HAS_NAMESPACE && defined(__ghs__)) ) && !defined(__TI_COMPILER_VERSION__) && !defined(__VISUALDSPVERSION__)\n#  define BOOST_NO_STD_TYPEINFO\n#endif  \n\n//  C++0x headers implemented in 520 (as shipped by Microsoft)\n//\n#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 520\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_SMART_PTR\n#endif\n\n#if ((!defined(_HAS_TR1_IMPORTS) || (_HAS_TR1_IMPORTS+0 == 0)) && !defined(BOOST_NO_CXX11_HDR_TUPLE)) \\\n  && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 610)\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#endif\n\n//  C++0x headers implemented in 540 (as shipped by Microsoft)\n//\n#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 540\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#endif\n\n//  C++0x headers implemented in 610 (as shipped by Microsoft)\n//\n#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 610\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#  define BOOST_NO_CXX11_ALLOCATOR\n// 540 has std::align but it is not a conforming implementation\n#  define BOOST_NO_CXX11_STD_ALIGN\n#endif\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus < 201402\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#elif !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n\n#if defined(BOOST_INTEL) && (BOOST_INTEL <= 1400)\n// Intel's compiler can't handle this header yet:\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#endif\n\n\n//  520..610 have std::addressof, but it doesn't support functions\n//\n#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 650\n#  define BOOST_NO_CXX11_ADDRESSOF\n#endif\n\n// Bug specific to VC14, \n// See https://connect.microsoft.com/VisualStudio/feedback/details/1348277/link-error-when-using-std-codecvt-utf8-utf16-char16-t\n// and discussion here: http://blogs.msdn.com/b/vcblog/archive/2014/11/12/visual-studio-2015-preview-now-available.aspx?PageIndex=2\n#if defined(_CPPLIB_VER) && (_CPPLIB_VER == 650)\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#endif\n\n#if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 650)\n// If _HAS_AUTO_PTR_ETC is defined to 0, std::auto_ptr is not available.\n// See https://www.visualstudio.com/en-us/news/vs2015-vs.aspx#C++\n// and http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx\n#  if defined(_HAS_AUTO_PTR_ETC) && (_HAS_AUTO_PTR_ETC == 0)\n#    define BOOST_NO_AUTO_PTR\n#  endif\n#endif\n\n#ifdef _CPPLIB_VER\n#  define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER\n#else\n#  define BOOST_DINKUMWARE_STDLIB 1\n#endif\n\n#ifdef _CPPLIB_VER\n#  define BOOST_STDLIB \"Dinkumware standard library version \" BOOST_STRINGIZE(_CPPLIB_VER)\n#else\n#  define BOOST_STDLIB \"Dinkumware standard library version 1.x\"\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/libcomo.hpp",
    "content": "//  (C) Copyright John Maddock 2002 - 2003. \n//  (C) Copyright Jens Maurer 2002 - 2003. \n//  (C) Copyright Beman Dawes 2002 - 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Comeau STL:\n\n#if !defined(__LIBCOMO__)\n#  include <boost/config/no_tr1/utility.hpp>\n#  if !defined(__LIBCOMO__)\n#      error \"This is not the Comeau STL!\"\n#  endif\n#endif\n\n//\n// std::streambuf<wchar_t> is non-standard\n// NOTE: versions of libcomo prior to beta28 have octal version numbering,\n// e.g. version 25 is 21 (dec)\n#if __LIBCOMO_VERSION__ <= 22\n#  define BOOST_NO_STD_WSTREAMBUF\n#endif\n\n#if (__LIBCOMO_VERSION__ <= 31) && defined(_WIN32)\n#define BOOST_NO_SWPRINTF\n#endif\n\n#if __LIBCOMO_VERSION__ >= 31\n#  define BOOST_HAS_HASH\n#  define BOOST_HAS_SLIST\n#endif\n\n//  C++0x headers not yet implemented\n//\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_ALLOCATOR\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#  define BOOST_NO_CXX11_SMART_PTR\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#  define BOOST_NO_CXX11_STD_ALIGN\n#  define BOOST_NO_CXX11_ADDRESSOF\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus < 201402\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#else\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n\n//\n// Intrinsic type_traits support.\n// The SGI STL has it's own __type_traits class, which\n// has intrinsic compiler support with SGI's compilers.\n// Whatever map SGI style type traits to boost equivalents:\n//\n#define BOOST_HAS_SGI_TYPE_TRAITS\n\n#define BOOST_STDLIB \"Comeau standard library \" BOOST_STRINGIZE(__LIBCOMO_VERSION__)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/libcpp.hpp",
    "content": "//  (C) Copyright Christopher Jefferson 2011.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  config for libc++\n//  Might need more in here later.\n\n#if !defined(_LIBCPP_VERSION)\n#  include <ciso646>\n#  if !defined(_LIBCPP_VERSION)\n#      error \"This is not libc++!\"\n#  endif\n#endif\n\n#define BOOST_STDLIB \"libc++ version \" BOOST_STRINGIZE(_LIBCPP_VERSION)\n\n#define BOOST_HAS_THREADS\n\n#ifdef _LIBCPP_HAS_NO_VARIADICS\n#    define BOOST_NO_CXX11_HDR_TUPLE\n#endif\n\n// BOOST_NO_CXX11_ALLOCATOR should imply no support for the C++11\n// allocator model. The C++11 allocator model requires a conforming\n// std::allocator_traits which is only possible with C++11 template\n// aliases since members rebind_alloc and rebind_traits require it.\n#if defined(_LIBCPP_HAS_NO_TEMPLATE_ALIASES)\n#    define BOOST_NO_CXX11_ALLOCATOR\n#endif\n\n#if __cplusplus < 201103\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_ALLOCATOR\n#  define BOOST_NO_CXX11_SMART_PTR\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#  define BOOST_NO_CXX11_STD_ALIGN\n#  define BOOST_NO_CXX11_ADDRESSOF\n#endif\n\n//\n// These appear to be unusable/incomplete so far:\n//\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n\n// libc++ uses a non-standard messages_base\n#define BOOST_NO_STD_MESSAGES\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus <= 201103\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#elif __cplusplus < 201402\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n\n//  --- end ---\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/libstdcpp3.hpp",
    "content": "//  (C) Copyright John Maddock 2001.\n//  (C) Copyright Jens Maurer 2001.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  config for libstdc++ v3\n//  not much to go in here:\n\n#define BOOST_GNU_STDLIB 1\n\n#ifdef __GLIBCXX__\n#define BOOST_STDLIB \"GNU libstdc++ version \" BOOST_STRINGIZE(__GLIBCXX__)\n#else\n#define BOOST_STDLIB \"GNU libstdc++ version \" BOOST_STRINGIZE(__GLIBCPP__)\n#endif\n\n#if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T)\n#  define BOOST_NO_CWCHAR\n#  define BOOST_NO_CWCTYPE\n#  define BOOST_NO_STD_WSTRING\n#  define BOOST_NO_STD_WSTREAMBUF\n#endif\n\n#if defined(__osf__) && !defined(_REENTRANT) \\\n  && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) )\n// GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header\n// file is included, therefore for consistency we define it here as well.\n#  define _REENTRANT\n#endif\n\n#ifdef __GLIBCXX__ // gcc 3.4 and greater:\n#  if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \\\n        || defined(_GLIBCXX__PTHREADS) \\\n        || defined(_GLIBCXX_HAS_GTHREADS) \\\n        || defined(_WIN32) \\\n        || defined(_AIX) \\\n        || defined(__HAIKU__)\n      //\n      // If the std lib has thread support turned on, then turn it on in Boost\n      // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT\n      // while others do not...\n      //\n#     define BOOST_HAS_THREADS\n#  else\n#     define BOOST_DISABLE_THREADS\n#  endif\n#elif defined(__GLIBCPP__) \\\n        && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \\\n        && !defined(_GLIBCPP__PTHREADS)\n   // disable thread support if the std lib was built single threaded:\n#  define BOOST_DISABLE_THREADS\n#endif\n\n#if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT)\n// linux on arm apparently doesn't define _REENTRANT\n// so just turn on threading support whenever the std lib is thread safe:\n#  define BOOST_HAS_THREADS\n#endif\n\n#if !defined(_GLIBCPP_USE_LONG_LONG) \\\n    && !defined(_GLIBCXX_USE_LONG_LONG)\\\n    && defined(BOOST_HAS_LONG_LONG)\n// May have been set by compiler/*.hpp, but \"long long\" without library\n// support is useless.\n#  undef BOOST_HAS_LONG_LONG\n#endif\n\n// Apple doesn't seem to reliably defined a *unix* macro\n#if !defined(CYGWIN) && (  defined(__unix__)  \\\n                        || defined(__unix)    \\\n                        || defined(unix)      \\\n                        || defined(__APPLE__) \\\n                        || defined(__APPLE)   \\\n                        || defined(APPLE))\n#  include <unistd.h>\n#endif\n\n#if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0\n#  define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx\n#  define BOOST_HAS_SLIST\n#  define BOOST_HAS_HASH\n#  define BOOST_SLIST_HEADER <ext/slist>\n# if !defined(__GNUC__) || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)\n#   define BOOST_HASH_SET_HEADER <ext/hash_set>\n#   define BOOST_HASH_MAP_HEADER <ext/hash_map>\n# else\n#   define BOOST_HASH_SET_HEADER <backward/hash_set>\n#   define BOOST_HASH_MAP_HEADER <backward/hash_map>\n# endif\n#endif\n\n//\n// Decide whether we have C++11 support turned on:\n//\n#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103)\n#  define BOOST_LIBSTDCXX11\n#endif\n//\n//  Decide which version of libstdc++ we have, normally\n//  stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly\n//  __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the stdlibc++\n//  developers. He also commented:\n//\n//       \"I'm not sure how useful __GLIBCXX__ is for your purposes, for instance in\n//       GCC 4.2.4 it is set to 20080519 but in GCC 4.3.0 it is set to 20080305.\n//       Although 4.3.0 was released earlier than 4.2.4, it has better C++0x support\n//       than any release in the 4.2 series.\"\n//\n//  Another resource for understanding stdlibc++ features is:\n//  http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.standard.200x\n//\n//  However, using the GCC version number fails when the compiler is clang since this\n//  only ever claims to emulate GCC-4.2, see https://svn.boost.org/trac/boost/ticket/7473\n//  for a long discussion on this issue.  What we can do though is use clang's __has_include\n//  to detect the presence of a C++11 header that was introduced with a specific GCC release.\n//  We still have to be careful though as many such headers were buggy and/or incomplete when\n//  first introduced, so we only check for headers that were fully featured from day 1, and then\n//  use that to infer the underlying GCC version:\n//\n#ifdef __clang__\n\n#if __has_include(<experimental/any>)\n#  define BOOST_LIBSTDCXX_VERSION 50100\n#elif __has_include(<shared_mutex>)\n#  define BOOST_LIBSTDCXX_VERSION 40900\n#elif __has_include(<ext/cmath>)\n#  define BOOST_LIBSTDCXX_VERSION 40800\n#elif __has_include(<scoped_allocator>)\n#  define BOOST_LIBSTDCXX_VERSION 40700\n#elif __has_include(<typeindex>)\n#  define BOOST_LIBSTDCXX_VERSION 40600\n#elif __has_include(<future>)\n#  define BOOST_LIBSTDCXX_VERSION 40500\n#elif  __has_include(<ratio>)\n#  define BOOST_LIBSTDCXX_VERSION 40400\n#elif __has_include(<array>)\n#  define BOOST_LIBSTDCXX_VERSION 40300\n#endif\n//\n//  GCC 4.8 and 9 add working versions of <atomic> and <regex> respectively.\n//  However, we have no test for these as the headers were present but broken\n//  in early GCC versions.\n//\n#endif\n\n#if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130) && (__cplusplus >= 201103L)\n//\n// Oracle Solaris compiler uses it's own verison of libstdc++ but doesn't \n// set __GNUC__\n//\n#define BOOST_LIBSTDCXX_VERSION 40800\n#endif\n\n#if !defined(BOOST_LIBSTDCXX_VERSION)\n#  define BOOST_LIBSTDCXX_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)\n#endif\n\n//  C++0x headers in GCC 4.3.0 and later\n//\n#if (BOOST_LIBSTDCXX_VERSION < 40300) || !defined(BOOST_LIBSTDCXX11)\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#endif\n\n//  C++0x headers in GCC 4.4.0 and later\n//\n#if (BOOST_LIBSTDCXX_VERSION < 40400) || !defined(BOOST_LIBSTDCXX11)\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_SMART_PTR\n#else\n#  define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG \n#  define BOOST_HAS_TR1_COMPLEX_OVERLOADS \n#endif\n\n//  C++0x features in GCC 4.5.0 and later\n//\n#if (BOOST_LIBSTDCXX_VERSION < 40500) || !defined(BOOST_LIBSTDCXX11)\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#endif\n\n//  C++0x features in GCC 4.6.0 and later\n//\n#if (BOOST_LIBSTDCXX_VERSION < 40600) || !defined(BOOST_LIBSTDCXX11)\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_ADDRESSOF\n#endif\n\n//  C++0x features in GCC 4.7.0 and later\n//\n#if (BOOST_LIBSTDCXX_VERSION < 40700) || !defined(BOOST_LIBSTDCXX11)\n// Note that although <chrono> existed prior to 4.7, \"steady_clock\" is spelled \"monotonic_clock\"\n// so 4.7.0 is the first truely conforming one.\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_ALLOCATOR\n#endif\n//  C++0x features in GCC 4.8.0 and later\n//\n#if (BOOST_LIBSTDCXX_VERSION < 40800) || !defined(BOOST_LIBSTDCXX11)\n// Note that although <atomic> existed prior to gcc 4.8 it was largely unimplemented for many types:\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#  define BOOST_NO_CXX11_HDR_THREAD\n#endif\n//  C++0x features in GCC 4.9.0 and later\n//\n#if (BOOST_LIBSTDCXX_VERSION < 40900) || !defined(BOOST_LIBSTDCXX11)\n// Although <regex> is present and compilable against, the actual implementation is not functional\n// even for the simplest patterns such as \"\\d\" or \"[0-9]\". This is the case at least in gcc up to 4.8, inclusively.\n#  define BOOST_NO_CXX11_HDR_REGEX\n#endif\n\n#if defined(__clang_major__) && ((__clang_major__ < 3) || ((__clang_major__ == 3) && (__clang_minor__ < 7)))\n// As of clang-3.6, libstdc++ header <atomic> throws up errors with clang:\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#endif\n//\n//  C++0x features in GCC 5.1 and later\n//\n#if (BOOST_LIBSTDCXX_VERSION < 50100) || !defined(BOOST_LIBSTDCXX11)\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#  define BOOST_NO_CXX11_STD_ALIGN\n#endif\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus <= 201103\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#elif __cplusplus < 201402 || (BOOST_LIBSTDCXX_VERSION < 40900) || !defined(BOOST_LIBSTDCXX11)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n\n//\n// Headers not present on Solaris with the Oracle compiler:\n#if defined(__SUNPRO_CC)\n#define BOOST_NO_CXX11_HDR_FUTURE\n#define BOOST_NO_CXX11_HDR_FORWARD_LIST \n#define BOOST_NO_CXX11_HDR_ATOMIC\n// shared_ptr is present, but is not convertible to bool\n// which causes all kinds of problems especially in Boost.Thread\n// but probably elsewhere as well.\n#define BOOST_NO_CXX11_SMART_PTR\n#endif\n\n#if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1))\n   // Headers not always available:\n#  ifndef BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#     define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  endif\n#  ifndef BOOST_NO_CXX11_HDR_MUTEX\n#     define BOOST_NO_CXX11_HDR_MUTEX\n#  endif\n#  ifndef BOOST_NO_CXX11_HDR_THREAD\n#     define BOOST_NO_CXX11_HDR_THREAD\n#  endif\n#  ifndef BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#     define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#  endif\n#endif\n\n#if (!defined(_GTHREAD_USE_MUTEX_TIMEDLOCK) || (_GTHREAD_USE_MUTEX_TIMEDLOCK == 0)) && !defined(BOOST_NO_CXX11_HDR_MUTEX)\n// Timed mutexes are not always available:\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#endif\n\n//  --- end ---\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/modena.hpp",
    "content": "//  (C) Copyright Jens Maurer 2001. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Modena C++ standard library (comes with KAI C++)\n\n#if !defined(MSIPL_COMPILE_H)\n#  include <boost/config/no_tr1/utility.hpp>\n#  if !defined(__MSIPL_COMPILE_H)\n#      error \"This is not the Modena C++ library!\"\n#  endif\n#endif\n\n#ifndef MSIPL_NL_TYPES\n#define BOOST_NO_STD_MESSAGES\n#endif\n\n#ifndef MSIPL_WCHART\n#define BOOST_NO_STD_WSTRING\n#endif\n\n//  C++0x headers not yet implemented\n//\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_ALLOCATOR\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#  define BOOST_NO_CXX11_SMART_PTR\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#  define BOOST_NO_CXX11_STD_ALIGN\n#  define BOOST_NO_CXX11_ADDRESSOF\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus < 201402\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#else\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n\n#define BOOST_STDLIB \"Modena C++ standard library\"\n\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/msl.hpp",
    "content": "//  (C) Copyright John Maddock 2001. \n//  (C) Copyright Darin Adler 2001. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Metrowerks standard library:\n\n#ifndef __MSL_CPP__\n#  include <boost/config/no_tr1/utility.hpp>\n#  ifndef __MSL_CPP__\n#     error This is not the MSL standard library!\n#  endif\n#endif\n\n#if __MSL_CPP__ >= 0x6000  // Pro 6\n#  define BOOST_HAS_HASH\n#  define BOOST_STD_EXTENSION_NAMESPACE Metrowerks\n#endif\n#define BOOST_HAS_SLIST\n\n#if __MSL_CPP__ < 0x6209\n#  define BOOST_NO_STD_MESSAGES\n#endif\n\n// check C lib version for <stdint.h>\n#include <cstddef>\n\n#if defined(__MSL__) && (__MSL__ >= 0x5000)\n#  define BOOST_HAS_STDINT_H\n#  if !defined(__PALMOS_TRAPS__)\n#    define BOOST_HAS_UNISTD_H\n#  endif\n   // boilerplate code:\n#  include <boost/config/posix_features.hpp>\n#endif\n\n#if defined(_MWMT) || _MSL_THREADSAFE\n#  define BOOST_HAS_THREADS\n#endif\n\n#ifdef _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG\n#  define BOOST_NO_STD_USE_FACET\n#  define BOOST_HAS_TWO_ARG_USE_FACET\n#endif\n\n//  C++0x headers not yet implemented\n//\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_ALLOCATOR\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#  define BOOST_NO_CXX11_SMART_PTR\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#  define BOOST_NO_CXX11_STD_ALIGN\n#  define BOOST_NO_CXX11_ADDRESSOF\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus < 201402\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#else\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n\n#define BOOST_STDLIB \"Metrowerks Standard Library version \" BOOST_STRINGIZE(__MSL_CPP__)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/roguewave.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Jens Maurer 2001. \n//  (C) Copyright David Abrahams 2003. \n//  (C) Copyright Boris Gubenko 2007. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  Rogue Wave std lib:\n\n#define BOOST_RW_STDLIB 1 \n\n#if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER)\n#  include <boost/config/no_tr1/utility.hpp>\n#  if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER)\n#     error This is not the Rogue Wave standard library\n#  endif\n#endif\n//\n// figure out a consistent version number:\n//\n#ifndef _RWSTD_VER\n#  define BOOST_RWSTD_VER 0x010000\n#elif _RWSTD_VER < 0x010000\n#  define BOOST_RWSTD_VER (_RWSTD_VER << 8)\n#else\n#  define BOOST_RWSTD_VER _RWSTD_VER\n#endif\n\n#ifndef _RWSTD_VER\n#  define BOOST_STDLIB \"Rogue Wave standard library version (Unknown version)\"\n#elif _RWSTD_VER < 0x04010200\n #  define BOOST_STDLIB \"Rogue Wave standard library version \" BOOST_STRINGIZE(_RWSTD_VER)\n#else\n#  ifdef _RWSTD_VER_STR\n#    define BOOST_STDLIB \"Apache STDCXX standard library version \" _RWSTD_VER_STR\n#  else\n#    define BOOST_STDLIB \"Apache STDCXX standard library version \" BOOST_STRINGIZE(_RWSTD_VER)\n#  endif\n#endif\n\n//\n// Prior to version 2.2.0 the primary template for std::numeric_limits\n// does not have compile time constants, even though specializations of that\n// template do:\n//\n#if BOOST_RWSTD_VER < 0x020200\n#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n#endif\n\n// Sun CC 5.5 patch 113817-07 adds long long specialization, but does not change the\n// library version number (http://sunsolve6.sun.com/search/document.do?assetkey=1-21-113817):\n#if BOOST_RWSTD_VER <= 0x020101 && (!defined(__SUNPRO_CC) || (__SUNPRO_CC < 0x550))\n#  define BOOST_NO_LONG_LONG_NUMERIC_LIMITS\n# endif\n\n//\n// Borland version of numeric_limits lacks __int64 specialisation:\n//\n#ifdef __BORLANDC__\n#  define BOOST_NO_MS_INT64_NUMERIC_LIMITS\n#endif\n\n//\n// No std::iterator if it can't figure out default template args:\n//\n#if defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || defined(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || (BOOST_RWSTD_VER < 0x020000)\n#  define BOOST_NO_STD_ITERATOR\n#endif\n\n//\n// No iterator traits without partial specialization:\n//\n#if defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) || defined(RWSTD_NO_CLASS_PARTIAL_SPEC)\n#  define BOOST_NO_STD_ITERATOR_TRAITS\n#endif\n\n//\n// Prior to version 2.0, std::auto_ptr was buggy, and there were no\n// new-style iostreams, and no conformant std::allocator:\n//\n#if (BOOST_RWSTD_VER < 0x020000)\n#  define BOOST_NO_AUTO_PTR\n#  define BOOST_NO_STRINGSTREAM\n#  define BOOST_NO_STD_ALLOCATOR\n#  define BOOST_NO_STD_LOCALE\n#endif\n\n//\n// No template iterator constructors without member template support:\n//\n#if defined(RWSTD_NO_MEMBER_TEMPLATES) || defined(_RWSTD_NO_MEMBER_TEMPLATES)\n#  define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS\n#endif\n\n//\n// RW defines _RWSTD_ALLOCATOR if the allocator is conformant and in use\n// (the or _HPACC_ part is a hack - the library seems to define _RWSTD_ALLOCATOR\n// on HP aCC systems even though the allocator is in fact broken):\n//\n#if !defined(_RWSTD_ALLOCATOR) || (defined(__HP_aCC) && __HP_aCC <= 33100)\n#  define BOOST_NO_STD_ALLOCATOR\n#endif\n\n//\n// If we have a std::locale, we still may not have std::use_facet:\n//\n#if defined(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE) && !defined(BOOST_NO_STD_LOCALE)\n#  define BOOST_NO_STD_USE_FACET\n#  define BOOST_HAS_TWO_ARG_USE_FACET\n#endif\n\n//\n// There's no std::distance prior to version 2, or without\n// partial specialization support:\n//\n#if (BOOST_RWSTD_VER < 0x020000) || defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)\n    #define BOOST_NO_STD_DISTANCE\n#endif\n\n//\n// Some versions of the rogue wave library don't have assignable\n// OutputIterators:\n//\n#if BOOST_RWSTD_VER < 0x020100\n#  define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN\n#endif\n\n//\n// Disable BOOST_HAS_LONG_LONG when the library has no support for it.\n//\n#if !defined(_RWSTD_LONG_LONG) && defined(BOOST_HAS_LONG_LONG)\n#  undef BOOST_HAS_LONG_LONG\n#endif\n\n//\n// check that on HP-UX, the proper RW library is used\n//\n#if defined(__HP_aCC) && !defined(_HP_NAMESPACE_STD)\n#  error \"Boost requires Standard RW library. Please compile and link with -AA\"\n#endif\n\n//\n// Define macros specific to RW V2.2 on HP-UX\n//\n#if defined(__HP_aCC) && (BOOST_RWSTD_VER == 0x02020100)\n#  ifndef __HP_TC1_MAKE_PAIR\n#    define __HP_TC1_MAKE_PAIR\n#  endif\n#  ifndef _HP_INSTANTIATE_STD2_VL\n#    define _HP_INSTANTIATE_STD2_VL\n#  endif\n#endif\n\n#if _RWSTD_VER < 0x05000000\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#endif\n// type_traits header is incomplete:\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n//\n//  C++0x headers not yet implemented\n//\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_ALLOCATOR\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#  define BOOST_NO_CXX11_SMART_PTR\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#  define BOOST_NO_CXX11_STD_ALIGN\n#  define BOOST_NO_CXX11_ADDRESSOF\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus < 201402\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#else\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/sgi.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Darin Adler 2001. \n//  (C) Copyright Jens Maurer 2001 - 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  generic SGI STL:\n\n#if !defined(__STL_CONFIG_H)\n#  include <boost/config/no_tr1/utility.hpp>\n#  if !defined(__STL_CONFIG_H)\n#      error \"This is not the SGI STL!\"\n#  endif\n#endif\n\n//\n// No std::iterator traits without partial specialisation:\n//\n#if !defined(__STL_CLASS_PARTIAL_SPECIALIZATION)\n#  define BOOST_NO_STD_ITERATOR_TRAITS\n#endif\n\n//\n// No std::stringstream with gcc < 3\n//\n#if defined(__GNUC__) && (__GNUC__ < 3) && \\\n     ((__GNUC_MINOR__ < 95) || (__GNUC_MINOR__ == 96)) && \\\n     !defined(__STL_USE_NEW_IOSTREAMS) || \\\n   defined(__APPLE_CC__)\n   // Note that we only set this for GNU C++ prior to 2.95 since the\n   // latest patches for that release do contain a minimal <sstream>\n   // If you are running a 2.95 release prior to 2.95.3 then this will need\n   // setting, but there is no way to detect that automatically (other\n   // than by running the configure script).\n   // Also, the unofficial GNU C++ 2.96 included in RedHat 7.1 doesn't\n   // have <sstream>.\n#  define BOOST_NO_STRINGSTREAM\n#endif\n\n// Apple doesn't seem to reliably defined a *unix* macro\n#if !defined(CYGWIN) && (  defined(__unix__)  \\\n                        || defined(__unix)    \\\n                        || defined(unix)      \\\n                        || defined(__APPLE__) \\\n                        || defined(__APPLE)   \\\n                        || defined(APPLE))\n#  include <unistd.h>\n#endif\n\n\n//\n// Assume no std::locale without own iostreams (this may be an\n// incorrect assumption in some cases):\n//\n#if !defined(__SGI_STL_OWN_IOSTREAMS) && !defined(__STL_USE_NEW_IOSTREAMS)\n#  define BOOST_NO_STD_LOCALE\n#endif\n\n//\n// Original native SGI streams have non-standard std::messages facet:\n//\n#if defined(__sgi) && (_COMPILER_VERSION <= 650) && !defined(__SGI_STL_OWN_IOSTREAMS)\n#  define BOOST_NO_STD_LOCALE\n#endif\n\n//\n// SGI's new iostreams have missing \"const\" in messages<>::open\n//\n#if defined(__sgi) && (_COMPILER_VERSION <= 740) && defined(__STL_USE_NEW_IOSTREAMS)\n#  define BOOST_NO_STD_MESSAGES\n#endif\n\n//\n// No template iterator constructors, or std::allocator\n// without member templates:\n//\n#if !defined(__STL_MEMBER_TEMPLATES)\n#  define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS\n#  define BOOST_NO_STD_ALLOCATOR\n#endif\n\n//\n// We always have SGI style hash_set, hash_map, and slist:\n//\n#define BOOST_HAS_HASH\n#define BOOST_HAS_SLIST\n\n//\n// If this is GNU libstdc++2, then no <limits> and no std::wstring:\n//\n#if (defined(__GNUC__) && (__GNUC__ < 3))\n#  include <string>\n#  if defined(__BASTRING__)\n#     define BOOST_NO_LIMITS\n// Note: <boost/limits.hpp> will provide compile-time constants\n#     undef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n#     define BOOST_NO_STD_WSTRING\n#  endif\n#endif\n\n//\n// There is no standard iterator unless we have namespace support:\n//\n#if !defined(__STL_USE_NAMESPACES)\n#  define BOOST_NO_STD_ITERATOR\n#endif\n\n//\n// Intrinsic type_traits support.\n// The SGI STL has it's own __type_traits class, which\n// has intrinsic compiler support with SGI's compilers.\n// Whatever map SGI style type traits to boost equivalents:\n//\n#define BOOST_HAS_SGI_TYPE_TRAITS\n\n//  C++0x headers not yet implemented\n//\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_ALLOCATOR\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#  define BOOST_NO_CXX11_SMART_PTR\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#  define BOOST_NO_CXX11_STD_ALIGN\n#  define BOOST_NO_CXX11_ADDRESSOF\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus < 201402\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#else\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n\n#define BOOST_STDLIB \"SGI standard library\""
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/stlport.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2002. \n//  (C) Copyright Darin Adler 2001. \n//  (C) Copyright Jens Maurer 2001. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  STLPort standard library config:\n\n#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\n#  include <cstddef>\n#  if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\n#      error \"This is not STLPort!\"\n#  endif\n#endif\n\n// Apple doesn't seem to reliably defined a *unix* macro\n#if !defined(CYGWIN) && (  defined(__unix__)  \\\n                        || defined(__unix)    \\\n                        || defined(unix)      \\\n                        || defined(__APPLE__) \\\n                        || defined(__APPLE)   \\\n                        || defined(APPLE))\n#  include <unistd.h>\n#endif\n\n//\n// __STL_STATIC_CONST_INIT_BUG implies BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n// for versions prior to 4.1(beta)\n//\n#if (defined(__STL_STATIC_CONST_INIT_BUG) || defined(_STLP_STATIC_CONST_INIT_BUG)) && (__SGI_STL_PORT <= 0x400)\n#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n#endif\n\n//\n// If STLport thinks that there is no partial specialisation, then there is no\n// std::iterator traits:\n//\n#if !(defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || defined(__STL_CLASS_PARTIAL_SPECIALIZATION))\n#  define BOOST_NO_STD_ITERATOR_TRAITS\n#endif\n\n//\n// No new style iostreams on GCC without STLport's iostreams enabled:\n//\n#if (defined(__GNUC__) && (__GNUC__ < 3)) && !(defined(__SGI_STL_OWN_IOSTREAMS) || defined(_STLP_OWN_IOSTREAMS))\n#  define BOOST_NO_STRINGSTREAM\n#endif\n\n//\n// No new iostreams implies no std::locale, and no std::stringstream:\n//\n#if defined(__STL_NO_IOSTREAMS) || defined(__STL_NO_NEW_IOSTREAMS) || defined(_STLP_NO_IOSTREAMS) || defined(_STLP_NO_NEW_IOSTREAMS)\n#  define BOOST_NO_STD_LOCALE\n#  define BOOST_NO_STRINGSTREAM\n#endif\n\n//\n// If the streams are not native, and we have a \"using ::x\" compiler bug\n// then the io stream facets are not available in namespace std::\n//\n#ifdef _STLPORT_VERSION\n#  if !(_STLPORT_VERSION >= 0x500) && !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__)\n#     define BOOST_NO_STD_LOCALE\n#  endif\n#else\n#  if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__)\n#     define BOOST_NO_STD_LOCALE\n#  endif\n#endif\n\n#if defined(_STLPORT_VERSION) && (_STLPORT_VERSION >= 0x520)\n#  define BOOST_HAS_TR1_UNORDERED_SET\n#  define BOOST_HAS_TR1_UNORDERED_MAP\n#endif\n//\n// Without member template support enabled, their are no template\n// iterate constructors, and no std::allocator:\n//\n#if !(defined(__STL_MEMBER_TEMPLATES) || defined(_STLP_MEMBER_TEMPLATES))\n#  define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS\n#  define BOOST_NO_STD_ALLOCATOR\n#endif\n//\n// however we always have at least a partial allocator:\n//\n#define BOOST_HAS_PARTIAL_STD_ALLOCATOR\n\n#if !defined(_STLP_MEMBER_TEMPLATE_CLASSES) || defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE)\n#  define BOOST_NO_STD_ALLOCATOR\n#endif\n\n#if defined(_STLP_NO_MEMBER_TEMPLATE_KEYWORD) && defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)\n#  define BOOST_NO_STD_ALLOCATOR\n#endif\n\n//\n// If STLport thinks there is no wchar_t at all, then we have to disable\n// the support for the relevant specilazations of std:: templates.\n//\n#if !defined(_STLP_HAS_WCHAR_T) && !defined(_STLP_WCHAR_T_IS_USHORT)\n#  ifndef  BOOST_NO_STD_WSTRING\n#     define BOOST_NO_STD_WSTRING\n#  endif\n#  ifndef  BOOST_NO_STD_WSTREAMBUF\n#     define BOOST_NO_STD_WSTREAMBUF\n#  endif\n#endif\n\n//\n// We always have SGI style hash_set, hash_map, and slist:\n//\n#ifndef _STLP_NO_EXTENSIONS\n#define BOOST_HAS_HASH\n#define BOOST_HAS_SLIST\n#endif\n\n//\n// STLport does a good job of importing names into namespace std::,\n// but doesn't always get them all, define BOOST_NO_STDC_NAMESPACE, since our\n// workaround does not conflict with STLports:\n//\n//\n// Harold Howe says:\n// Borland switched to STLport in BCB6. Defining BOOST_NO_STDC_NAMESPACE with\n// BCB6 does cause problems. If we detect C++ Builder, then don't define \n// BOOST_NO_STDC_NAMESPACE\n//\n#if !defined(__BORLANDC__) && !defined(__DMC__)\n//\n// If STLport is using it's own namespace, and the real names are in\n// the global namespace, then we duplicate STLport's using declarations\n// (by defining BOOST_NO_STDC_NAMESPACE), we do this because STLport doesn't\n// necessarily import all the names we need into namespace std::\n// \n#  if (defined(__STL_IMPORT_VENDOR_CSTD) \\\n         || defined(__STL_USE_OWN_NAMESPACE) \\\n         || defined(_STLP_IMPORT_VENDOR_CSTD) \\\n         || defined(_STLP_USE_OWN_NAMESPACE)) \\\n      && (defined(__STL_VENDOR_GLOBAL_CSTD) || defined (_STLP_VENDOR_GLOBAL_CSTD))\n#     define BOOST_NO_STDC_NAMESPACE\n#     define BOOST_NO_EXCEPTION_STD_NAMESPACE\n#  endif\n#elif defined(__BORLANDC__) && __BORLANDC__ < 0x560\n// STLport doesn't import std::abs correctly:\n#include <stdlib.h>\nnamespace std { using ::abs; }\n// and strcmp/strcpy don't get imported either ('cos they are macros)\n#include <string.h>\n#ifdef strcpy\n#  undef strcpy\n#endif\n#ifdef strcmp\n#  undef strcmp\n#endif\n#ifdef _STLP_VENDOR_CSTD\nnamespace std{ using _STLP_VENDOR_CSTD::strcmp; using _STLP_VENDOR_CSTD::strcpy; }\n#endif\n#endif\n\n//\n// std::use_facet may be non-standard, uses a class instead:\n//\n#if defined(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS) || defined(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS)\n#  define BOOST_NO_STD_USE_FACET\n#  define BOOST_HAS_STLP_USE_FACET\n#endif\n\n//\n// If STLport thinks there are no wide functions, <cwchar> etc. is not working; but\n// only if BOOST_NO_STDC_NAMESPACE is not defined (if it is then we do the import \n// into std:: ourselves).\n//\n#if defined(_STLP_NO_NATIVE_WIDE_FUNCTIONS) && !defined(BOOST_NO_STDC_NAMESPACE)\n#  define BOOST_NO_CWCHAR\n#  define BOOST_NO_CWCTYPE\n#endif\n\n//\n// If STLport for some reason was configured so that it thinks that wchar_t\n// is not an intrinsic type, then we have to disable the support for it as\n// well (we would be missing required specializations otherwise).\n//\n#if !defined( _STLP_HAS_WCHAR_T) || defined(_STLP_WCHAR_T_IS_USHORT)\n#  undef  BOOST_NO_INTRINSIC_WCHAR_T\n#  define BOOST_NO_INTRINSIC_WCHAR_T\n#endif\n\n//\n// Borland ships a version of STLport with C++ Builder 6 that lacks\n// hashtables and the like:\n//\n#if defined(__BORLANDC__) && (__BORLANDC__ == 0x560)\n#  undef BOOST_HAS_HASH\n#endif\n\n//\n// gcc-2.95.3/STLPort does not like the using declarations we use to get ADL with std::min/max\n//\n#if defined(__GNUC__) && (__GNUC__ < 3)\n#  include <algorithm> // for std::min and std::max\n#  define BOOST_USING_STD_MIN() ((void)0)\n#  define BOOST_USING_STD_MAX() ((void)0)\nnamespace boost { using std::min; using std::max; }\n#endif\n\n//  C++0x headers not yet implemented\n//\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_ALLOCATOR\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#  define BOOST_NO_CXX11_SMART_PTR\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#  define BOOST_NO_CXX11_STD_ALIGN\n#  define BOOST_NO_CXX11_ADDRESSOF\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus < 201402\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#else\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n\n#define BOOST_STDLIB \"STLPort standard library version \" BOOST_STRINGIZE(__SGI_STL_PORT)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/stdlib/vacpp.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n#if __IBMCPP__ <= 501\n#  define BOOST_NO_STD_ALLOCATOR\n#endif\n\n#define BOOST_HAS_MACRO_USE_FACET\n#define BOOST_NO_STD_MESSAGES\n\n// Apple doesn't seem to reliably defined a *unix* macro\n#if !defined(CYGWIN) && (  defined(__unix__)  \\\n                        || defined(__unix)    \\\n                        || defined(unix)      \\\n                        || defined(__APPLE__) \\\n                        || defined(__APPLE)   \\\n                        || defined(APPLE))\n#  include <unistd.h>\n#endif\n\n//  C++0x headers not yet implemented\n//\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_ALLOCATOR\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n#  define BOOST_NO_CXX11_SMART_PTR\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#  define BOOST_NO_CXX11_HDR_ATOMIC\n#  define BOOST_NO_CXX11_STD_ALIGN\n#  define BOOST_NO_CXX11_ADDRESSOF\n\n#if defined(__has_include)\n#if !__has_include(<shared_mutex>)\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#elif __cplusplus < 201402\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n#else\n#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX\n#endif\n\n#define BOOST_STDLIB \"Visual Age default standard library\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/suffix.hpp",
    "content": "//  Boost config.hpp configuration header file  ------------------------------//\n//  boostinspect:ndprecated_macros -- tell the inspect tool to ignore this file\n\n//  Copyright (c) 2001-2003 John Maddock\n//  Copyright (c) 2001 Darin Adler\n//  Copyright (c) 2001 Peter Dimov\n//  Copyright (c) 2002 Bill Kempf\n//  Copyright (c) 2002 Jens Maurer\n//  Copyright (c) 2002-2003 David Abrahams\n//  Copyright (c) 2003 Gennaro Prota\n//  Copyright (c) 2003 Eric Friedman\n//  Copyright (c) 2010 Eric Jourdanneau, Joel Falcou\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for most recent version.\n\n//  Boost config.hpp policy and rationale documentation has been moved to\n//  http://www.boost.org/libs/config/\n//\n//  This file is intended to be stable, and relatively unchanging.\n//  It should contain boilerplate code only - no compiler specific\n//  code unless it is unavoidable - no changes unless unavoidable.\n\n#ifndef BOOST_CONFIG_SUFFIX_HPP\n#define BOOST_CONFIG_SUFFIX_HPP\n\n#if defined(__GNUC__) && (__GNUC__ >= 4)\n//\n// Some GCC-4.x versions issue warnings even when __extension__ is used,\n// so use this as a workaround:\n//\n#pragma GCC system_header\n#endif\n\n//\n// ensure that visibility macros are always defined, thus symplifying use\n//\n#ifndef BOOST_SYMBOL_EXPORT\n# define BOOST_SYMBOL_EXPORT\n#endif\n#ifndef BOOST_SYMBOL_IMPORT\n# define BOOST_SYMBOL_IMPORT\n#endif\n#ifndef BOOST_SYMBOL_VISIBLE\n# define BOOST_SYMBOL_VISIBLE\n#endif\n\n//\n// look for long long by looking for the appropriate macros in <limits.h>.\n// Note that we use limits.h rather than climits for maximal portability,\n// remember that since these just declare a bunch of macros, there should be\n// no namespace issues from this.\n//\n#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG)                                              \\\n   && !defined(BOOST_MSVC) && !defined(__BORLANDC__)\n# include <limits.h>\n# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))\n#   define BOOST_HAS_LONG_LONG\n# else\n#   define BOOST_NO_LONG_LONG\n# endif\n#endif\n\n// GCC 3.x will clean up all of those nasty macro definitions that\n// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine\n// it under GCC 3.x.\n#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS)\n#  undef BOOST_NO_CTYPE_FUNCTIONS\n#endif\n\n//\n// Assume any extensions are in namespace std:: unless stated otherwise:\n//\n#  ifndef BOOST_STD_EXTENSION_NAMESPACE\n#    define BOOST_STD_EXTENSION_NAMESPACE std\n#  endif\n\n//\n// If cv-qualified specializations are not allowed, then neither are cv-void ones:\n//\n#  if defined(BOOST_NO_CV_SPECIALIZATIONS) \\\n      && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)\n#     define BOOST_NO_CV_VOID_SPECIALIZATIONS\n#  endif\n\n//\n// If there is no numeric_limits template, then it can't have any compile time\n// constants either!\n//\n#  if defined(BOOST_NO_LIMITS) \\\n      && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)\n#     define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n#     define BOOST_NO_MS_INT64_NUMERIC_LIMITS\n#     define BOOST_NO_LONG_LONG_NUMERIC_LIMITS\n#  endif\n\n//\n// if there is no long long then there is no specialisation\n// for numeric_limits<long long> either:\n//\n#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)\n#  define BOOST_NO_LONG_LONG_NUMERIC_LIMITS\n#endif\n\n//\n// if there is no __int64 then there is no specialisation\n// for numeric_limits<__int64> either:\n//\n#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)\n#  define BOOST_NO_MS_INT64_NUMERIC_LIMITS\n#endif\n\n//\n// if member templates are supported then so is the\n// VC6 subset of member templates:\n//\n#  if !defined(BOOST_NO_MEMBER_TEMPLATES) \\\n       && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)\n#     define BOOST_MSVC6_MEMBER_TEMPLATES\n#  endif\n\n//\n// Without partial specialization, can't test for partial specialisation bugs:\n//\n#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n      && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)\n#     define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG\n#  endif\n\n//\n// Without partial specialization, we can't have array-type partial specialisations:\n//\n#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n      && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\n#     define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS\n#  endif\n\n//\n// Without partial specialization, std::iterator_traits can't work:\n//\n#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n      && !defined(BOOST_NO_STD_ITERATOR_TRAITS)\n#     define BOOST_NO_STD_ITERATOR_TRAITS\n#  endif\n\n//\n// Without partial specialization, partial\n// specialization with default args won't work either:\n//\n#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n      && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)\n#     define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS\n#  endif\n\n//\n// Without member template support, we can't have template constructors\n// in the standard library either:\n//\n#  if defined(BOOST_NO_MEMBER_TEMPLATES) \\\n      && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \\\n      && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\n#     define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS\n#  endif\n\n//\n// Without member template support, we can't have a conforming\n// std::allocator template either:\n//\n#  if defined(BOOST_NO_MEMBER_TEMPLATES) \\\n      && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \\\n      && !defined(BOOST_NO_STD_ALLOCATOR)\n#     define BOOST_NO_STD_ALLOCATOR\n#  endif\n\n//\n// without ADL support then using declarations will break ADL as well:\n//\n#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)\n#  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#endif\n\n//\n// Without typeid support we have no dynamic RTTI either:\n//\n#if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI)\n#  define BOOST_NO_RTTI\n#endif\n\n//\n// If we have a standard allocator, then we have a partial one as well:\n//\n#if !defined(BOOST_NO_STD_ALLOCATOR)\n#  define BOOST_HAS_PARTIAL_STD_ALLOCATOR\n#endif\n\n//\n// We can't have a working std::use_facet if there is no std::locale:\n//\n#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET)\n#     define BOOST_NO_STD_USE_FACET\n#  endif\n\n//\n// We can't have a std::messages facet if there is no std::locale:\n//\n#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES)\n#     define BOOST_NO_STD_MESSAGES\n#  endif\n\n//\n// We can't have a working std::wstreambuf if there is no std::locale:\n//\n#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF)\n#     define BOOST_NO_STD_WSTREAMBUF\n#  endif\n\n//\n// We can't have a <cwctype> if there is no <cwchar>:\n//\n#  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE)\n#     define BOOST_NO_CWCTYPE\n#  endif\n\n//\n// We can't have a swprintf if there is no <cwchar>:\n//\n#  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF)\n#     define BOOST_NO_SWPRINTF\n#  endif\n\n//\n// If Win32 support is turned off, then we must turn off\n// threading support also, unless there is some other\n// thread API enabled:\n//\n#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \\\n   && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)\n#  define BOOST_DISABLE_THREADS\n#endif\n\n//\n// Turn on threading support if the compiler thinks that it's in\n// multithreaded mode.  We put this here because there are only a\n// limited number of macros that identify this (if there's any missing\n// from here then add to the appropriate compiler section):\n//\n#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \\\n    || defined(_PTHREADS) || defined(__APPLE__) || defined(__DragonFly__)) \\\n    && !defined(BOOST_HAS_THREADS)\n#  define BOOST_HAS_THREADS\n#endif\n\n//\n// Turn threading support off if BOOST_DISABLE_THREADS is defined:\n//\n#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS)\n#  undef BOOST_HAS_THREADS\n#endif\n\n//\n// Turn threading support off if we don't recognise the threading API:\n//\n#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\\\n      && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\\\n      && !defined(BOOST_HAS_MPTASKS)\n#  undef BOOST_HAS_THREADS\n#endif\n\n//\n// Turn threading detail macros off if we don't (want to) use threading\n//\n#ifndef BOOST_HAS_THREADS\n#  undef BOOST_HAS_PTHREADS\n#  undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#  undef BOOST_HAS_PTHREAD_YIELD\n#  undef BOOST_HAS_PTHREAD_DELAY_NP\n#  undef BOOST_HAS_WINTHREADS\n#  undef BOOST_HAS_BETHREADS\n#  undef BOOST_HAS_MPTASKS\n#endif\n\n//\n// If the compiler claims to be C99 conformant, then it had better\n// have a <stdint.h>:\n//\n#  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)\n#     define BOOST_HAS_STDINT_H\n#     ifndef BOOST_HAS_LOG1P\n#        define BOOST_HAS_LOG1P\n#     endif\n#     ifndef BOOST_HAS_EXPM1\n#        define BOOST_HAS_EXPM1\n#     endif\n#  endif\n\n//\n// Define BOOST_NO_SLIST and BOOST_NO_HASH if required.\n// Note that this is for backwards compatibility only.\n//\n#  if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST)\n#     define BOOST_NO_SLIST\n#  endif\n\n#  if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_HASH)\n#     define BOOST_NO_HASH\n#  endif\n\n//\n// Set BOOST_SLIST_HEADER if not set already:\n//\n#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER)\n#  define BOOST_SLIST_HEADER <slist>\n#endif\n\n//\n// Set BOOST_HASH_SET_HEADER if not set already:\n//\n#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER)\n#  define BOOST_HASH_SET_HEADER <hash_set>\n#endif\n\n//\n// Set BOOST_HASH_MAP_HEADER if not set already:\n//\n#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER)\n#  define BOOST_HASH_MAP_HEADER <hash_map>\n#endif\n\n//  BOOST_HAS_ABI_HEADERS\n//  This macro gets set if we have headers that fix the ABI,\n//  and prevent ODR violations when linking to external libraries:\n#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS)\n#  define BOOST_HAS_ABI_HEADERS\n#endif\n\n#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS)\n#  undef BOOST_HAS_ABI_HEADERS\n#endif\n\n//  BOOST_NO_STDC_NAMESPACE workaround  --------------------------------------//\n//  Because std::size_t usage is so common, even in boost headers which do not\n//  otherwise use the C library, the <cstddef> workaround is included here so\n//  that ugly workaround code need not appear in many other boost headers.\n//  NOTE WELL: This is a workaround for non-conforming compilers; <cstddef>\n//  must still be #included in the usual places so that <cstddef> inclusion\n//  works as expected with standard conforming compilers.  The resulting\n//  double inclusion of <cstddef> is harmless.\n\n# if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus)\n#   include <cstddef>\n    namespace std { using ::ptrdiff_t; using ::size_t; }\n# endif\n\n//  Workaround for the unfortunate min/max macros defined by some platform headers\n\n#define BOOST_PREVENT_MACRO_SUBSTITUTION\n\n#ifndef BOOST_USING_STD_MIN\n#  define BOOST_USING_STD_MIN() using std::min\n#endif\n\n#ifndef BOOST_USING_STD_MAX\n#  define BOOST_USING_STD_MAX() using std::max\n#endif\n\n//  BOOST_NO_STD_MIN_MAX workaround  -----------------------------------------//\n\n#  if defined(BOOST_NO_STD_MIN_MAX) && defined(__cplusplus)\n\nnamespace std {\n  template <class _Tp>\n  inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {\n    return __b < __a ? __b : __a;\n  }\n  template <class _Tp>\n  inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {\n    return  __a < __b ? __b : __a;\n  }\n}\n\n#  endif\n\n// BOOST_STATIC_CONSTANT workaround --------------------------------------- //\n// On compilers which don't allow in-class initialization of static integral\n// constant members, we must use enums as a workaround if we want the constants\n// to be available at compile-time. This macro gives us a convenient way to\n// declare such constants.\n\n#  ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION\n#       define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }\n#  else\n#     define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment\n#  endif\n\n// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------//\n// When the standard library does not have a conforming std::use_facet there\n// are various workarounds available, but they differ from library to library.\n// The same problem occurs with has_facet.\n// These macros provide a consistent way to access a locale's facets.\n// Usage:\n//    replace\n//       std::use_facet<Type>(loc);\n//    with\n//       BOOST_USE_FACET(Type, loc);\n//    Note do not add a std:: prefix to the front of BOOST_USE_FACET!\n//  Use for BOOST_HAS_FACET is analogous.\n\n#if defined(BOOST_NO_STD_USE_FACET)\n#  ifdef BOOST_HAS_TWO_ARG_USE_FACET\n#     define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))\n#     define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0))\n#  elif defined(BOOST_HAS_MACRO_USE_FACET)\n#     define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type)\n#     define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type)\n#  elif defined(BOOST_HAS_STLP_USE_FACET)\n#     define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))\n#     define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)\n#  endif\n#else\n#  define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc)\n#  define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)\n#endif\n\n// BOOST_NESTED_TEMPLATE workaround ------------------------------------------//\n// Member templates are supported by some compilers even though they can't use\n// the A::template member<U> syntax, as a workaround replace:\n//\n// typedef typename A::template rebind<U> binder;\n//\n// with:\n//\n// typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder;\n\n#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD\n#  define BOOST_NESTED_TEMPLATE template\n#else\n#  define BOOST_NESTED_TEMPLATE\n#endif\n\n// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------//\n// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION\n// is defined, in which case it evaluates to return x; Use when you have a return\n// statement that can never be reached.\n\n#ifndef BOOST_UNREACHABLE_RETURN\n#  ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION\n#     define BOOST_UNREACHABLE_RETURN(x) return x;\n#  else\n#     define BOOST_UNREACHABLE_RETURN(x)\n#  endif\n#endif\n\n// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------//\n//\n// Some compilers don't support the use of `typename' for dependent\n// types in deduced contexts, e.g.\n//\n//     template <class T> void f(T, typename T::type);\n//                                  ^^^^^^^^\n// Replace these declarations with:\n//\n//     template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type);\n\n#ifndef BOOST_NO_DEDUCED_TYPENAME\n#  define BOOST_DEDUCED_TYPENAME typename\n#else\n#  define BOOST_DEDUCED_TYPENAME\n#endif\n\n#ifndef BOOST_NO_TYPENAME_WITH_CTOR\n#  define BOOST_CTOR_TYPENAME typename\n#else\n#  define BOOST_CTOR_TYPENAME\n#endif\n\n// long long workaround ------------------------------------------//\n// On gcc (and maybe other compilers?) long long is alway supported\n// but it's use may generate either warnings (with -ansi), or errors\n// (with -pedantic -ansi) unless it's use is prefixed by __extension__\n//\n#if defined(BOOST_HAS_LONG_LONG) && defined(__cplusplus)\nnamespace boost{\n#  ifdef __GNUC__\n   __extension__ typedef long long long_long_type;\n   __extension__ typedef unsigned long long ulong_long_type;\n#  else\n   typedef long long long_long_type;\n   typedef unsigned long long ulong_long_type;\n#  endif\n}\n#endif\n// same again for __int128:\n#if defined(BOOST_HAS_INT128) && defined(__cplusplus)\nnamespace boost{\n#  ifdef __GNUC__\n   __extension__ typedef __int128 int128_type;\n   __extension__ typedef unsigned __int128 uint128_type;\n#  else\n   typedef __int128 int128_type;\n   typedef unsigned __int128 uint128_type;\n#  endif\n}\n#endif\n// same again for __float128:\n#if defined(BOOST_HAS_FLOAT128) && defined(__cplusplus)\nnamespace boost {\n#  ifdef __GNUC__\n   __extension__ typedef __float128 float128_type;\n#  else\n   typedef __float128 float128_type;\n#  endif\n}\n#endif\n\n// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//\n\n// These macros are obsolete. Port away and remove.\n\n#  define BOOST_EXPLICIT_TEMPLATE_TYPE(t)\n#  define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)\n#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)\n#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)\n\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)\n\n// When BOOST_NO_STD_TYPEINFO is defined, we can just import\n// the global definition into std namespace:\n#if defined(BOOST_NO_STD_TYPEINFO) && defined(__cplusplus)\n#include <typeinfo>\nnamespace std{ using ::type_info; }\n#endif\n\n// ---------------------------------------------------------------------------//\n\n//\n// Helper macro BOOST_STRINGIZE:\n// Converts the parameter X to a string after macro replacement\n// on X has been performed.\n//\n#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)\n#define BOOST_DO_STRINGIZE(X) #X\n\n//\n// Helper macro BOOST_JOIN:\n// The following piece of macro magic joins the two\n// arguments together, even when one of the arguments is\n// itself a macro (see 16.3.1 in C++ standard).  The key\n// is that macro expansion of macro arguments does not\n// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN.\n//\n#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )\n#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)\n#define BOOST_DO_JOIN2( X, Y ) X##Y\n\n//\n// Set some default values for compiler/library/platform names.\n// These are for debugging config setup only:\n//\n#  ifndef BOOST_COMPILER\n#     define BOOST_COMPILER \"Unknown ISO C++ Compiler\"\n#  endif\n#  ifndef BOOST_STDLIB\n#     define BOOST_STDLIB \"Unknown ISO standard library\"\n#  endif\n#  ifndef BOOST_PLATFORM\n#     if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \\\n         || defined(_POSIX_SOURCE)\n#        define BOOST_PLATFORM \"Generic Unix\"\n#     else\n#        define BOOST_PLATFORM \"Unknown\"\n#     endif\n#  endif\n\n//\n// Set some default values GPU support\n//\n#  ifndef BOOST_GPU_ENABLED\n#  define BOOST_GPU_ENABLED\n#  endif\n\n// BOOST_FORCEINLINE ---------------------------------------------//\n// Macro to use in place of 'inline' to force a function to be inline\n#if !defined(BOOST_FORCEINLINE)\n#  if defined(_MSC_VER)\n#    define BOOST_FORCEINLINE __forceinline\n#  elif defined(__GNUC__) && __GNUC__ > 3\n     // Clang also defines __GNUC__ (as 4)\n#    define BOOST_FORCEINLINE inline __attribute__ ((__always_inline__))\n#  else\n#    define BOOST_FORCEINLINE inline\n#  endif\n#endif\n\n// BOOST_NOINLINE ---------------------------------------------//\n// Macro to use in place of 'inline' to prevent a function to be inlined\n#if !defined(BOOST_NOINLINE)\n#  if defined(_MSC_VER)\n#    define BOOST_NOINLINE __declspec(noinline)\n#  elif defined(__GNUC__) && __GNUC__ > 3\n     // Clang also defines __GNUC__ (as 4)\n#    if defined(__CUDACC__)\n       // nvcc doesn't always parse __noinline__, \n       // see: https://svn.boost.org/trac/boost/ticket/9392\n#      define BOOST_NOINLINE __attribute__ ((noinline))\n#    else\n#      define BOOST_NOINLINE __attribute__ ((__noinline__))\n#    endif\n#  else\n#    define BOOST_NOINLINE\n#  endif\n#endif\n\n// BOOST_NORETURN ---------------------------------------------//\n// Macro to use before a function declaration/definition to designate\n// the function as not returning normally (i.e. with a return statement\n// or by leaving the function scope, if the function return type is void).\n#if !defined(BOOST_NORETURN)\n#  if defined(_MSC_VER)\n#    define BOOST_NORETURN __declspec(noreturn)\n#  elif defined(__GNUC__)\n#    define BOOST_NORETURN __attribute__ ((__noreturn__))\n#  else\n#    define BOOST_NO_NORETURN\n#    define BOOST_NORETURN\n#  endif\n#endif\n\n// Branch prediction hints\n// These macros are intended to wrap conditional expressions that yield true or false\n//\n//  if (BOOST_LIKELY(var == 10))\n//  {\n//     // the most probable code here\n//  }\n//\n#if !defined(BOOST_LIKELY)\n#  define BOOST_LIKELY(x) x\n#endif\n#if !defined(BOOST_UNLIKELY)\n#  define BOOST_UNLIKELY(x) x\n#endif\n\n// Type and data alignment specification\n//\n#if !defined(BOOST_NO_CXX11_ALIGNAS)\n#  define BOOST_ALIGNMENT(x) alignas(x)\n#elif defined(_MSC_VER)\n#  define BOOST_ALIGNMENT(x) __declspec(align(x))\n#elif defined(__GNUC__)\n#  define BOOST_ALIGNMENT(x) __attribute__ ((__aligned__(x)))\n#else\n#  define BOOST_NO_ALIGNMENT\n#  define BOOST_ALIGNMENT(x)\n#endif\n\n// Lack of non-public defaulted functions is implied by the lack of any defaulted functions\n#if !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS) && defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)\n#  define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS\n#endif\n\n// Defaulted and deleted function declaration helpers\n// These macros are intended to be inside a class definition.\n// BOOST_DEFAULTED_FUNCTION accepts the function declaration and its\n// body, which will be used if the compiler doesn't support defaulted functions.\n// BOOST_DELETED_FUNCTION only accepts the function declaration. It\n// will expand to a private function declaration, if the compiler doesn't support\n// deleted functions. Because of this it is recommended to use BOOST_DELETED_FUNCTION\n// in the end of the class definition.\n//\n//  class my_class\n//  {\n//  public:\n//      // Default-constructible\n//      BOOST_DEFAULTED_FUNCTION(my_class(), {})\n//      // Copying prohibited\n//      BOOST_DELETED_FUNCTION(my_class(my_class const&))\n//      BOOST_DELETED_FUNCTION(my_class& operator= (my_class const&))\n//  };\n//\n#if !(defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS))\n#   define BOOST_DEFAULTED_FUNCTION(fun, body) fun = default;\n#else\n#   define BOOST_DEFAULTED_FUNCTION(fun, body) fun body\n#endif\n\n#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)\n#   define BOOST_DELETED_FUNCTION(fun) fun = delete;\n#else\n#   define BOOST_DELETED_FUNCTION(fun) private: fun;\n#endif\n\n//\n// Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined\n//\n#if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_DECLTYPE_N3276)\n#define BOOST_NO_CXX11_DECLTYPE_N3276 BOOST_NO_CXX11_DECLTYPE\n#endif\n\n//  -------------------- Deprecated macros for 1.50 ---------------------------\n//  These will go away in a future release\n\n//  Use BOOST_NO_CXX11_HDR_UNORDERED_SET or BOOST_NO_CXX11_HDR_UNORDERED_MAP\n//           instead of BOOST_NO_STD_UNORDERED\n#if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) || defined (BOOST_NO_CXX11_HDR_UNORDERED_SET)\n# ifndef BOOST_NO_CXX11_STD_UNORDERED\n#  define BOOST_NO_CXX11_STD_UNORDERED\n# endif\n#endif\n\n//  Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST instead of BOOST_NO_INITIALIZER_LISTS\n#if defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS)\n#  define BOOST_NO_INITIALIZER_LISTS\n#endif\n\n//  Use BOOST_NO_CXX11_HDR_ARRAY instead of BOOST_NO_0X_HDR_ARRAY\n#if defined(BOOST_NO_CXX11_HDR_ARRAY) && !defined(BOOST_NO_0X_HDR_ARRAY)\n#  define BOOST_NO_0X_HDR_ARRAY\n#endif\n//  Use BOOST_NO_CXX11_HDR_CHRONO instead of BOOST_NO_0X_HDR_CHRONO\n#if defined(BOOST_NO_CXX11_HDR_CHRONO) && !defined(BOOST_NO_0X_HDR_CHRONO)\n#  define BOOST_NO_0X_HDR_CHRONO\n#endif\n//  Use BOOST_NO_CXX11_HDR_CODECVT instead of BOOST_NO_0X_HDR_CODECVT\n#if defined(BOOST_NO_CXX11_HDR_CODECVT) && !defined(BOOST_NO_0X_HDR_CODECVT)\n#  define BOOST_NO_0X_HDR_CODECVT\n#endif\n//  Use BOOST_NO_CXX11_HDR_CONDITION_VARIABLE instead of BOOST_NO_0X_HDR_CONDITION_VARIABLE\n#if defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) && !defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE)\n#  define BOOST_NO_0X_HDR_CONDITION_VARIABLE\n#endif\n//  Use BOOST_NO_CXX11_HDR_FORWARD_LIST instead of BOOST_NO_0X_HDR_FORWARD_LIST\n#if defined(BOOST_NO_CXX11_HDR_FORWARD_LIST) && !defined(BOOST_NO_0X_HDR_FORWARD_LIST)\n#  define BOOST_NO_0X_HDR_FORWARD_LIST\n#endif\n//  Use BOOST_NO_CXX11_HDR_FUTURE instead of BOOST_NO_0X_HDR_FUTURE\n#if defined(BOOST_NO_CXX11_HDR_FUTURE) && !defined(BOOST_NO_0X_HDR_FUTURE)\n#  define BOOST_NO_0X_HDR_FUTURE\n#endif\n\n//  Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n//  instead of BOOST_NO_0X_HDR_INITIALIZER_LIST or BOOST_NO_INITIALIZER_LISTS\n#ifdef BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n# ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST\n#  define BOOST_NO_0X_HDR_INITIALIZER_LIST\n# endif\n# ifndef BOOST_NO_INITIALIZER_LISTS\n#  define BOOST_NO_INITIALIZER_LISTS\n# endif\n#endif\n\n//  Use BOOST_NO_CXX11_HDR_MUTEX instead of BOOST_NO_0X_HDR_MUTEX\n#if defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX)\n#  define BOOST_NO_0X_HDR_MUTEX\n#endif\n//  Use BOOST_NO_CXX11_HDR_RANDOM instead of BOOST_NO_0X_HDR_RANDOM\n#if defined(BOOST_NO_CXX11_HDR_RANDOM) && !defined(BOOST_NO_0X_HDR_RANDOM)\n#  define BOOST_NO_0X_HDR_RANDOM\n#endif\n//  Use BOOST_NO_CXX11_HDR_RATIO instead of BOOST_NO_0X_HDR_RATIO\n#if defined(BOOST_NO_CXX11_HDR_RATIO) && !defined(BOOST_NO_0X_HDR_RATIO)\n#  define BOOST_NO_0X_HDR_RATIO\n#endif\n//  Use BOOST_NO_CXX11_HDR_REGEX instead of BOOST_NO_0X_HDR_REGEX\n#if defined(BOOST_NO_CXX11_HDR_REGEX) && !defined(BOOST_NO_0X_HDR_REGEX)\n#  define BOOST_NO_0X_HDR_REGEX\n#endif\n//  Use BOOST_NO_CXX11_HDR_SYSTEM_ERROR instead of BOOST_NO_0X_HDR_SYSTEM_ERROR\n#if defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) && !defined(BOOST_NO_0X_HDR_SYSTEM_ERROR)\n#  define BOOST_NO_0X_HDR_SYSTEM_ERROR\n#endif\n//  Use BOOST_NO_CXX11_HDR_THREAD instead of BOOST_NO_0X_HDR_THREAD\n#if defined(BOOST_NO_CXX11_HDR_THREAD) && !defined(BOOST_NO_0X_HDR_THREAD)\n#  define BOOST_NO_0X_HDR_THREAD\n#endif\n//  Use BOOST_NO_CXX11_HDR_TUPLE instead of BOOST_NO_0X_HDR_TUPLE\n#if defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_0X_HDR_TUPLE)\n#  define BOOST_NO_0X_HDR_TUPLE\n#endif\n//  Use BOOST_NO_CXX11_HDR_TYPE_TRAITS instead of BOOST_NO_0X_HDR_TYPE_TRAITS\n#if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) && !defined(BOOST_NO_0X_HDR_TYPE_TRAITS)\n#  define BOOST_NO_0X_HDR_TYPE_TRAITS\n#endif\n//  Use BOOST_NO_CXX11_HDR_TYPEINDEX instead of BOOST_NO_0X_HDR_TYPEINDEX\n#if defined(BOOST_NO_CXX11_HDR_TYPEINDEX) && !defined(BOOST_NO_0X_HDR_TYPEINDEX)\n#  define BOOST_NO_0X_HDR_TYPEINDEX\n#endif\n//  Use BOOST_NO_CXX11_HDR_UNORDERED_MAP instead of BOOST_NO_0X_HDR_UNORDERED_MAP\n#if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) && !defined(BOOST_NO_0X_HDR_UNORDERED_MAP)\n#  define BOOST_NO_0X_HDR_UNORDERED_MAP\n#endif\n//  Use BOOST_NO_CXX11_HDR_UNORDERED_SET instead of BOOST_NO_0X_HDR_UNORDERED_SET\n#if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET) && !defined(BOOST_NO_0X_HDR_UNORDERED_SET)\n#  define BOOST_NO_0X_HDR_UNORDERED_SET\n#endif\n\n//  ------------------ End of deprecated macros for 1.50 ---------------------------\n\n//  -------------------- Deprecated macros for 1.51 ---------------------------\n//  These will go away in a future release\n\n//  Use     BOOST_NO_CXX11_AUTO_DECLARATIONS instead of   BOOST_NO_AUTO_DECLARATIONS\n#if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_AUTO_DECLARATIONS)\n#  define BOOST_NO_AUTO_DECLARATIONS\n#endif\n//  Use     BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS instead of   BOOST_NO_AUTO_MULTIDECLARATIONS\n#if defined(BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS) && !defined(BOOST_NO_AUTO_MULTIDECLARATIONS)\n#  define BOOST_NO_AUTO_MULTIDECLARATIONS\n#endif\n//  Use     BOOST_NO_CXX11_CHAR16_T instead of   BOOST_NO_CHAR16_T\n#if defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CHAR16_T)\n#  define BOOST_NO_CHAR16_T\n#endif\n//  Use     BOOST_NO_CXX11_CHAR32_T instead of   BOOST_NO_CHAR32_T\n#if defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CHAR32_T)\n#  define BOOST_NO_CHAR32_T\n#endif\n//  Use     BOOST_NO_CXX11_TEMPLATE_ALIASES instead of   BOOST_NO_TEMPLATE_ALIASES\n#if defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_TEMPLATE_ALIASES)\n#  define BOOST_NO_TEMPLATE_ALIASES\n#endif\n//  Use     BOOST_NO_CXX11_CONSTEXPR instead of   BOOST_NO_CONSTEXPR\n#if defined(BOOST_NO_CXX11_CONSTEXPR) && !defined(BOOST_NO_CONSTEXPR)\n#  define BOOST_NO_CONSTEXPR\n#endif\n//  Use     BOOST_NO_CXX11_DECLTYPE_N3276 instead of   BOOST_NO_DECLTYPE_N3276\n#if defined(BOOST_NO_CXX11_DECLTYPE_N3276) && !defined(BOOST_NO_DECLTYPE_N3276)\n#  define BOOST_NO_DECLTYPE_N3276\n#endif\n//  Use     BOOST_NO_CXX11_DECLTYPE instead of   BOOST_NO_DECLTYPE\n#if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_DECLTYPE)\n#  define BOOST_NO_DECLTYPE\n#endif\n//  Use     BOOST_NO_CXX11_DEFAULTED_FUNCTIONS instead of   BOOST_NO_DEFAULTED_FUNCTIONS\n#if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_DEFAULTED_FUNCTIONS)\n#  define BOOST_NO_DEFAULTED_FUNCTIONS\n#endif\n//  Use     BOOST_NO_CXX11_DELETED_FUNCTIONS instead of   BOOST_NO_DELETED_FUNCTIONS\n#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_DELETED_FUNCTIONS)\n#  define BOOST_NO_DELETED_FUNCTIONS\n#endif\n//  Use     BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS instead of   BOOST_NO_EXPLICIT_CONVERSION_OPERATORS\n#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) && !defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)\n#  define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS\n#endif\n//  Use     BOOST_NO_CXX11_EXTERN_TEMPLATE instead of   BOOST_NO_EXTERN_TEMPLATE\n#if defined(BOOST_NO_CXX11_EXTERN_TEMPLATE) && !defined(BOOST_NO_EXTERN_TEMPLATE)\n#  define BOOST_NO_EXTERN_TEMPLATE\n#endif\n//  Use     BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS instead of   BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#if defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS)\n#  define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#endif\n//  Use     BOOST_NO_CXX11_LAMBDAS instead of   BOOST_NO_LAMBDAS\n#if defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS)\n#  define BOOST_NO_LAMBDAS\n#endif\n//  Use     BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS instead of   BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#if defined(BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS) && !defined(BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS)\n#  define BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#endif\n//  Use     BOOST_NO_CXX11_NOEXCEPT instead of   BOOST_NO_NOEXCEPT\n#if defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_NOEXCEPT)\n#  define BOOST_NO_NOEXCEPT\n#endif\n//  Use     BOOST_NO_CXX11_NULLPTR instead of   BOOST_NO_NULLPTR\n#if defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR)\n#  define BOOST_NO_NULLPTR\n#endif\n//  Use     BOOST_NO_CXX11_RAW_LITERALS instead of   BOOST_NO_RAW_LITERALS\n#if defined(BOOST_NO_CXX11_RAW_LITERALS) && !defined(BOOST_NO_RAW_LITERALS)\n#  define BOOST_NO_RAW_LITERALS\n#endif\n//  Use     BOOST_NO_CXX11_RVALUE_REFERENCES instead of   BOOST_NO_RVALUE_REFERENCES\n#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES)\n#  define BOOST_NO_RVALUE_REFERENCES\n#endif\n//  Use     BOOST_NO_CXX11_SCOPED_ENUMS instead of   BOOST_NO_SCOPED_ENUMS\n#if defined(BOOST_NO_CXX11_SCOPED_ENUMS) && !defined(BOOST_NO_SCOPED_ENUMS)\n#  define BOOST_NO_SCOPED_ENUMS\n#endif\n//  Use     BOOST_NO_CXX11_STATIC_ASSERT instead of   BOOST_NO_STATIC_ASSERT\n#if defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_NO_STATIC_ASSERT)\n#  define BOOST_NO_STATIC_ASSERT\n#endif\n//  Use     BOOST_NO_CXX11_STD_UNORDERED instead of   BOOST_NO_STD_UNORDERED\n#if defined(BOOST_NO_CXX11_STD_UNORDERED) && !defined(BOOST_NO_STD_UNORDERED)\n#  define BOOST_NO_STD_UNORDERED\n#endif\n//  Use     BOOST_NO_CXX11_UNICODE_LITERALS instead of   BOOST_NO_UNICODE_LITERALS\n#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) && !defined(BOOST_NO_UNICODE_LITERALS)\n#  define BOOST_NO_UNICODE_LITERALS\n#endif\n//  Use     BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX instead of   BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX\n#if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) && !defined(BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX)\n#  define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX\n#endif\n//  Use     BOOST_NO_CXX11_VARIADIC_TEMPLATES instead of   BOOST_NO_VARIADIC_TEMPLATES\n#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)\n#  define BOOST_NO_VARIADIC_TEMPLATES\n#endif\n//  Use     BOOST_NO_CXX11_VARIADIC_MACROS instead of   BOOST_NO_VARIADIC_MACROS\n#if defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS)\n#  define BOOST_NO_VARIADIC_MACROS\n#endif\n//  Use     BOOST_NO_CXX11_NUMERIC_LIMITS instead of   BOOST_NO_NUMERIC_LIMITS_LOWEST\n#if defined(BOOST_NO_CXX11_NUMERIC_LIMITS) && !defined(BOOST_NO_NUMERIC_LIMITS_LOWEST)\n#  define BOOST_NO_NUMERIC_LIMITS_LOWEST\n#endif\n//  ------------------ End of deprecated macros for 1.51 ---------------------------\n\n\n\n//\n// Helper macros BOOST_NOEXCEPT, BOOST_NOEXCEPT_IF, BOOST_NOEXCEPT_EXPR\n// These aid the transition to C++11 while still supporting C++03 compilers\n//\n#ifdef BOOST_NO_CXX11_NOEXCEPT\n#  define BOOST_NOEXCEPT\n#  define BOOST_NOEXCEPT_OR_NOTHROW throw()\n#  define BOOST_NOEXCEPT_IF(Predicate)\n#  define BOOST_NOEXCEPT_EXPR(Expression) false\n#else\n#  define BOOST_NOEXCEPT noexcept\n#  define BOOST_NOEXCEPT_OR_NOTHROW noexcept\n#  define BOOST_NOEXCEPT_IF(Predicate) noexcept((Predicate))\n#  define BOOST_NOEXCEPT_EXPR(Expression) noexcept((Expression))\n#endif\n//\n// Helper macro BOOST_FALLTHROUGH\n// Fallback definition of BOOST_FALLTHROUGH macro used to mark intended\n// fall-through between case labels in a switch statement. We use a definition\n// that requires a semicolon after it to avoid at least one type of misuse even\n// on unsupported compilers.\n//\n#ifndef BOOST_FALLTHROUGH\n#  define BOOST_FALLTHROUGH ((void)0)\n#endif\n\n//\n// constexpr workarounds\n//\n#if defined(BOOST_NO_CXX11_CONSTEXPR)\n#define BOOST_CONSTEXPR\n#define BOOST_CONSTEXPR_OR_CONST const\n#else\n#define BOOST_CONSTEXPR constexpr\n#define BOOST_CONSTEXPR_OR_CONST constexpr\n#endif\n#if defined(BOOST_NO_CXX14_CONSTEXPR)\n#define BOOST_CXX14_CONSTEXPR\n#else\n#define BOOST_CXX14_CONSTEXPR constexpr\n#endif\n\n//\n// Unused variable/typedef workarounds:\n//\n#ifndef BOOST_ATTRIBUTE_UNUSED\n#  define BOOST_ATTRIBUTE_UNUSED\n#endif\n\n#define BOOST_STATIC_CONSTEXPR  static BOOST_CONSTEXPR_OR_CONST\n\n//\n// Set BOOST_HAS_STATIC_ASSERT when BOOST_NO_CXX11_STATIC_ASSERT is not defined\n//\n#if !defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_HAS_STATIC_ASSERT)\n#  define BOOST_HAS_STATIC_ASSERT\n#endif\n\n//\n// Set BOOST_HAS_RVALUE_REFS when BOOST_NO_CXX11_RVALUE_REFERENCES is not defined\n//\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS)\n#define BOOST_HAS_RVALUE_REFS\n#endif\n\n//\n// Set BOOST_HAS_VARIADIC_TMPL when BOOST_NO_CXX11_VARIADIC_TEMPLATES is not defined\n//\n#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_HAS_VARIADIC_TMPL)\n#define BOOST_HAS_VARIADIC_TMPL\n#endif\n//\n// Set BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS when\n// BOOST_NO_CXX11_VARIADIC_TEMPLATES is set:\n//\n#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS)\n#  define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS\n#endif\n\n//\n// Finish off with checks for macros that are depricated / no longer supported,\n// if any of these are set then it's very likely that much of Boost will no\n// longer work.  So stop with a #error for now, but give the user a chance\n// to continue at their own risk if they really want to:\n//\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_CONFIG_ALLOW_DEPRECATED)\n#  error \"You are using a compiler which lacks features which are now a minimum requirement in order to use Boost, define BOOST_CONFIG_ALLOW_DEPRECATED if you want to continue at your own risk!!!\"\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/user.hpp",
    "content": "//  boost/config/user.hpp  ---------------------------------------------------//\n\n//  (C) Copyright John Maddock 2001. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  Do not check in modified versions of this file,\n//  This file may be customized by the end user, but not by boost.\n\n//\n//  Use this file to define a site and compiler specific\n//  configuration policy:\n//\n\n// define this to locate a compiler config file:\n// #define BOOST_COMPILER_CONFIG <myheader>\n\n// define this to locate a stdlib config file:\n// #define BOOST_STDLIB_CONFIG   <myheader>\n\n// define this to locate a platform config file:\n// #define BOOST_PLATFORM_CONFIG <myheader>\n\n// define this to disable compiler config,\n// use if your compiler config has nothing to set:\n// #define BOOST_NO_COMPILER_CONFIG\n\n// define this to disable stdlib config,\n// use if your stdlib config has nothing to set:\n// #define BOOST_NO_STDLIB_CONFIG\n\n// define this to disable platform config,\n// use if your platform config has nothing to set:\n// #define BOOST_NO_PLATFORM_CONFIG\n\n// define this to disable all config options,\n// excluding the user config.  Use if your\n// setup is fully ISO compliant, and has no\n// useful extensions, or for autoconf generated\n// setups:\n// #define BOOST_NO_CONFIG\n\n// define this to make the config \"optimistic\"\n// about unknown compiler versions.  Normally\n// unknown compiler versions are assumed to have\n// all the defects of the last known version, however\n// setting this flag, causes the config to assume\n// that unknown compiler versions are fully conformant\n// with the standard:\n// #define BOOST_STRICT_CONFIG\n\n// define this to cause the config to halt compilation\n// with an #error if it encounters anything unknown --\n// either an unknown compiler version or an unknown\n// compiler/platform/library:\n// #define BOOST_ASSERT_CONFIG\n\n\n// define if you want to disable threading support, even\n// when available:\n// #define BOOST_DISABLE_THREADS\n\n// define when you want to disable Win32 specific features\n// even when available:\n// #define BOOST_DISABLE_WIN32\n\n// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any \n// prefix/suffix headers that normally control things like struct \n// packing and alignment. \n// #define BOOST_DISABLE_ABI_HEADERS\n\n// BOOST_ABI_PREFIX: A prefix header to include in place of whatever\n// boost.config would normally select, any replacement should set up \n// struct packing and alignment options as required. \n// #define BOOST_ABI_PREFIX my-header-name\n\n// BOOST_ABI_SUFFIX: A suffix header to include in place of whatever \n// boost.config would normally select, any replacement should undo \n// the effects of the prefix header. \n// #define BOOST_ABI_SUFFIX my-header-name\n\n// BOOST_ALL_DYN_LINK: Forces all libraries that have separate source, \n// to be linked as dll's rather than static libraries on Microsoft Windows \n// (this macro is used to turn on __declspec(dllimport) modifiers, so that \n// the compiler knows which symbols to look for in a dll rather than in a \n// static library).  Note that there may be some libraries that can only \n// be linked in one way (statically or dynamically), in these cases this \n// macro has no effect.\n// #define BOOST_ALL_DYN_LINK\n \n// BOOST_WHATEVER_DYN_LINK: Forces library \"whatever\" to be linked as a dll \n// rather than a static library on Microsoft Windows: replace the WHATEVER \n// part of the macro name with the name of the library that you want to \n// dynamically link to, for example use BOOST_DATE_TIME_DYN_LINK or \n// BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport) \n// modifiers, so that the compiler knows which symbols to look for in a dll \n// rather than in a static library).  \n// Note that there may be some libraries that can only \n// be linked in one way (statically or dynamically), \n// in these cases this macro is unsupported.\n// #define BOOST_WHATEVER_DYN_LINK\n \n// BOOST_ALL_NO_LIB: Tells the config system not to automatically select \n// which libraries to link against.  \n// Normally if a compiler supports #pragma lib, then the correct library \n// build variant will be automatically selected and linked against, \n// simply by the act of including one of that library's headers.  \n// This macro turns that feature off.\n// #define BOOST_ALL_NO_LIB\n \n// BOOST_WHATEVER_NO_LIB: Tells the config system not to automatically \n// select which library to link against for library \"whatever\", \n// replace WHATEVER in the macro name with the name of the library; \n// for example BOOST_DATE_TIME_NO_LIB or BOOST_REGEX_NO_LIB.  \n// Normally if a compiler supports #pragma lib, then the correct library \n// build variant will be automatically selected and linked against, simply \n// by the act of including one of that library's headers.  This macro turns \n// that feature off.\n// #define BOOST_WHATEVER_NO_LIB\n \n// BOOST_LIB_BUILDID: Set to the same value as the value passed to Boost.Build's\n// --buildid command line option.  For example if you built using:\n//\n// bjam address-model=64 --buildid=amd64\n//\n// then compile your code with:\n//\n// -DBOOST_LIB_BUILDID = amd64\n//\n// to ensure the correct libraries are selected at link time.\n// #define BOOST_LIB_BUILDID amd64\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config/warning_disable.hpp",
    "content": "//  Copyright John Maddock 2008\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  This file exists to turn off some overly-pedantic warning emitted\n//  by certain compilers.  You should include this header only in:\n//\n//  * A test case, before any other headers, or,\n//  * A library source file before any other headers.\n//\n//  IT SHOULD NOT BE INCLUDED BY ANY BOOST HEADER.\n//\n//  YOU SHOULD NOT INCLUDE IT IF YOU CAN REASONABLY FIX THE WARNING.\n//\n//  The only warnings disabled here are those that are:\n//\n//  * Quite unreasonably pedantic.\n//  * Generally only emitted by a single compiler.\n//  * Can't easily be fixed: for example if the vendors own std lib \n//    code emits these warnings!\n//\n//  Note that THIS HEADER MUST NOT INCLUDE ANY OTHER HEADERS:\n//  not even std library ones!  Doing so may turn the warning\n//  off too late to be of any use.  For example the VC++ C4996\n//  warning can be emitted from <iosfwd> if that header is included\n//  before or by this one :-(\n//\n\n#ifndef BOOST_CONFIG_WARNING_DISABLE_HPP\n#define BOOST_CONFIG_WARNING_DISABLE_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1400) \n   // Error 'function': was declared deprecated\n   // http://msdn2.microsoft.com/en-us/library/ttcz0bys(VS.80).aspx\n   // This error is emitted when you use some perfectly conforming\n   // std lib functions in a perfectly correct way, and also by\n   // some of Microsoft's own std lib code !\n#  pragma warning(disable:4996)\n#endif\n#if defined(__INTEL_COMPILER) || defined(__ICL)\n   // As above: gives warning when a \"deprecated\"\n   // std library function is encountered.\n#  pragma warning(disable:1786)\n#endif\n\n#endif // BOOST_CONFIG_WARNING_DISABLE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/config.hpp",
    "content": "//  Boost config.hpp configuration header file  ------------------------------//\n\n//  (C) Copyright John Maddock 2002.\n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/config for most recent version.\n\n//  Boost config.hpp policy and rationale documentation has been moved to\n//  http://www.boost.org/libs/config\n//\n//  CAUTION: This file is intended to be completely stable -\n//           DO NOT MODIFY THIS FILE!\n//\n\n#ifndef BOOST_CONFIG_HPP\n#define BOOST_CONFIG_HPP\n\n// if we don't have a user config, then use the default location:\n#if !defined(BOOST_USER_CONFIG) && !defined(BOOST_NO_USER_CONFIG)\n#  define BOOST_USER_CONFIG <boost/config/user.hpp>\n#if 0\n// For dependency trackers:\n#  include <boost/config/user.hpp>\n#endif\n#endif\n// include it first:\n#ifdef BOOST_USER_CONFIG\n#  include BOOST_USER_CONFIG\n#endif\n\n// if we don't have a compiler config set, try and find one:\n#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG)\n#  include <boost/config/select_compiler_config.hpp>\n#endif\n// if we have a compiler config, include it now:\n#ifdef BOOST_COMPILER_CONFIG\n#  include BOOST_COMPILER_CONFIG\n#endif\n\n// if we don't have a std library config set, try and find one:\n#if !defined(BOOST_STDLIB_CONFIG) && !defined(BOOST_NO_STDLIB_CONFIG) && !defined(BOOST_NO_CONFIG) && defined(__cplusplus)\n#  include <boost/config/select_stdlib_config.hpp>\n#endif\n// if we have a std library config, include it now:\n#ifdef BOOST_STDLIB_CONFIG\n#  include BOOST_STDLIB_CONFIG\n#endif\n\n// if we don't have a platform config set, try and find one:\n#if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG) && !defined(BOOST_NO_CONFIG)\n#  include <boost/config/select_platform_config.hpp>\n#endif\n// if we have a platform config, include it now:\n#ifdef BOOST_PLATFORM_CONFIG\n#  include BOOST_PLATFORM_CONFIG\n#endif\n\n// get config suffix code:\n#include <boost/config/suffix.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#endif  // BOOST_CONFIG_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/addressof.hpp",
    "content": "// Copyright (C) 2002 Brad King (brad.king@kitware.com)\n//                    Douglas Gregor (gregod@cs.rpi.edu)\n//\n// Copyright (C) 2002, 2008, 2013 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#ifndef BOOST_CORE_ADDRESSOF_HPP\n#define BOOST_CORE_ADDRESSOF_HPP\n\n# include <boost/config.hpp>\n# include <boost/detail/workaround.hpp>\n# include <cstddef>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntemplate<class T> struct addr_impl_ref\n{\n    T & v_;\n\n    BOOST_FORCEINLINE addr_impl_ref( T & v ): v_( v ) {}\n    BOOST_FORCEINLINE operator T& () const { return v_; }\n\nprivate:\n    addr_impl_ref & operator=(const addr_impl_ref &);\n};\n\ntemplate<class T> struct addressof_impl\n{\n    static BOOST_FORCEINLINE T * f( T & v, long )\n    {\n        return reinterpret_cast<T*>(\n            &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));\n    }\n\n    static BOOST_FORCEINLINE T * f( T * v, int )\n    {\n        return v;\n    }\n};\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\n#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )\n\n    typedef decltype(nullptr) addr_nullptr_t;\n\n#else\n\n    typedef std::nullptr_t addr_nullptr_t;\n\n#endif\n\ntemplate<> struct addressof_impl< addr_nullptr_t >\n{\n    typedef addr_nullptr_t T;\n\n    static BOOST_FORCEINLINE T * f( T & v, int )\n    {\n        return &v;\n    }\n};\n\ntemplate<> struct addressof_impl< addr_nullptr_t const >\n{\n    typedef addr_nullptr_t const T;\n\n    static BOOST_FORCEINLINE T * f( T & v, int )\n    {\n        return &v;\n    }\n};\n\ntemplate<> struct addressof_impl< addr_nullptr_t volatile >\n{\n    typedef addr_nullptr_t volatile T;\n\n    static BOOST_FORCEINLINE T * f( T & v, int )\n    {\n        return &v;\n    }\n};\n\ntemplate<> struct addressof_impl< addr_nullptr_t const volatile >\n{\n    typedef addr_nullptr_t const volatile T;\n\n    static BOOST_FORCEINLINE T * f( T & v, int )\n    {\n        return &v;\n    }\n};\n\n#endif\n\n} // namespace detail\n\ntemplate<class T>\nBOOST_FORCEINLINE\nT * addressof( T & v )\n{\n#if (defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x610 ) ) ) || (defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x5120))\n\n    return boost::detail::addressof_impl<T>::f( v, 0 );\n\n#else\n\n    return boost::detail::addressof_impl<T>::f( boost::detail::addr_impl_ref<T>( v ), 0 );\n\n#endif\n}\n\n#if defined( __SUNPRO_CC ) && BOOST_WORKAROUND( __SUNPRO_CC, BOOST_TESTED_AT( 0x590 ) )\n\nnamespace detail\n{\n\ntemplate<class T> struct addressof_addp\n{\n    typedef T * type;\n};\n\n} // namespace detail\n\ntemplate< class T, std::size_t N >\nBOOST_FORCEINLINE\ntypename detail::addressof_addp< T[N] >::type addressof( T (&t)[N] )\n{\n    return &t;\n}\n\n#endif\n\n// Borland doesn't like casting an array reference to a char reference\n// but these overloads work around the problem.\n#if defined( __BORLANDC__ ) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\ntemplate<typename T,std::size_t N>\nBOOST_FORCEINLINE\nT (*addressof(T (&t)[N]))[N]\n{\n   return reinterpret_cast<T(*)[N]>(&t);\n}\n\ntemplate<typename T,std::size_t N>\nBOOST_FORCEINLINE\nconst T (*addressof(const T (&t)[N]))[N]\n{\n   return reinterpret_cast<const T(*)[N]>(&t);\n}\n#endif\n\n} // namespace boost\n\n#endif // BOOST_CORE_ADDRESSOF_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/checked_delete.hpp",
    "content": "#ifndef BOOST_CORE_CHECKED_DELETE_HPP\n#define BOOST_CORE_CHECKED_DELETE_HPP\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/checked_delete.hpp\n//\n//  Copyright (c) 2002, 2003 Peter Dimov\n//  Copyright (c) 2003 Daniel Frey\n//  Copyright (c) 2003 Howard Hinnant\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/core/doc/html/core/checked_delete.html for documentation.\n//\n\nnamespace boost\n{\n\n// verify that types are complete for increased safety\n\ntemplate<class T> inline void checked_delete(T * x)\n{\n    // intentionally complex - simplification causes regressions\n    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];\n    (void) sizeof(type_must_be_complete);\n    delete x;\n}\n\ntemplate<class T> inline void checked_array_delete(T * x)\n{\n    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];\n    (void) sizeof(type_must_be_complete);\n    delete [] x;\n}\n\ntemplate<class T> struct checked_deleter\n{\n    typedef void result_type;\n    typedef T * argument_type;\n\n    void operator()(T * x) const\n    {\n        // boost:: disables ADL\n        boost::checked_delete(x);\n    }\n};\n\ntemplate<class T> struct checked_array_deleter\n{\n    typedef void result_type;\n    typedef T * argument_type;\n\n    void operator()(T * x) const\n    {\n        boost::checked_array_delete(x);\n    }\n};\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_CORE_CHECKED_DELETE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/demangle.hpp",
    "content": "#ifndef BOOST_CORE_DEMANGLE_HPP_INCLUDED\n#define BOOST_CORE_DEMANGLE_HPP_INCLUDED\n\n// core::demangle\n//\n// Copyright 2014 Peter Dimov\n// Copyright 2014 Andrey Semashev\n//\n// Distributed under the Boost Software License, Version 1.0.\n// See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/config.hpp>\n#include <string>\n\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n# pragma once\n#endif\n\n#if defined( __clang__ ) && defined( __has_include )\n# if __has_include(<cxxabi.h>)\n#  define BOOST_CORE_HAS_CXXABI_H\n# endif\n#elif defined( __GLIBCXX__ ) || defined( __GLIBCPP__ )\n# define BOOST_CORE_HAS_CXXABI_H\n#endif\n\n#if defined( BOOST_CORE_HAS_CXXABI_H )\n# include <cxxabi.h>\n// For some archtectures (mips, mips64, x86, x86_64) cxxabi.h in Android NDK is implemented by gabi++ library\n// (https://android.googlesource.com/platform/ndk/+/master/sources/cxx-stl/gabi++/), which does not implement\n// abi::__cxa_demangle(). We detect this implementation by checking the include guard here.\n# if defined( __GABIXX_CXXABI_H__ )\n#  undef BOOST_CORE_HAS_CXXABI_H\n# else\n#  include <cstdlib>\n#  include <cstddef>\n# endif\n#endif\n\nnamespace boost\n{\n\nnamespace core\n{\n\ninline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT;\ninline void demangle_free( char const * name ) BOOST_NOEXCEPT;\n\nclass scoped_demangled_name\n{\nprivate:\n    char const * m_p;\n\npublic:\n    explicit scoped_demangled_name( char const * name ) BOOST_NOEXCEPT :\n        m_p( demangle_alloc( name ) )\n    {\n    }\n\n    ~scoped_demangled_name() BOOST_NOEXCEPT\n    {\n        demangle_free( m_p );\n    }\n\n    char const * get() const BOOST_NOEXCEPT\n    {\n        return m_p;\n    }\n\n    BOOST_DELETED_FUNCTION(scoped_demangled_name( scoped_demangled_name const& ))\n    BOOST_DELETED_FUNCTION(scoped_demangled_name& operator= ( scoped_demangled_name const& ))\n};\n\n\n#if defined( BOOST_CORE_HAS_CXXABI_H )\n\ninline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT\n{\n    int status = 0;\n    std::size_t size = 0;\n    return abi::__cxa_demangle( name, NULL, &size, &status );\n}\n\ninline void demangle_free( char const * name ) BOOST_NOEXCEPT\n{\n    std::free( const_cast< char* >( name ) );\n}\n\ninline std::string demangle( char const * name )\n{\n    scoped_demangled_name demangled_name( name );\n    char const * const p = demangled_name.get();\n    if( p )\n    {\n        return p;\n    }\n    else\n    {\n        return name;\n    }\n}\n\n#else\n\ninline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT\n{\n    return name;\n}\n\ninline void demangle_free( char const * ) BOOST_NOEXCEPT\n{\n}\n\ninline std::string demangle( char const * name )\n{\n    return name;\n}\n\n#endif\n\n} // namespace core\n\n} // namespace boost\n\n#undef BOOST_CORE_HAS_CXXABI_H\n\n#endif // #ifndef BOOST_CORE_DEMANGLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/enable_if.hpp",
    "content": "// Boost enable_if library\n\n// Copyright 2003 (c) The Trustees of Indiana University.\n\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n//    Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)\n//             Jeremiah Willcock (jewillco at osl.iu.edu)\n//             Andrew Lumsdaine (lums at osl.iu.edu)\n\n\n#ifndef BOOST_CORE_ENABLE_IF_HPP\n#define BOOST_CORE_ENABLE_IF_HPP\n\n#include \"boost/config.hpp\"\n\n// Even the definition of enable_if causes problems on some compilers,\n// so it's macroed out for all compilers that do not support SFINAE\n\n#ifndef BOOST_NO_SFINAE\n\nnamespace boost\n{\n  template<typename T, typename R=void>\n  struct enable_if_has_type\n  {\n    typedef R type;\n  };\n \n  template <bool B, class T = void>\n  struct enable_if_c {\n    typedef T type;\n  };\n\n  template <class T>\n  struct enable_if_c<false, T> {};\n\n  template <class Cond, class T = void> \n  struct enable_if : public enable_if_c<Cond::value, T> {};\n\n  template <bool B, class T>\n  struct lazy_enable_if_c {\n    typedef typename T::type type;\n  };\n\n  template <class T>\n  struct lazy_enable_if_c<false, T> {};\n\n  template <class Cond, class T> \n  struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};\n\n\n  template <bool B, class T = void>\n  struct disable_if_c {\n    typedef T type;\n  };\n\n  template <class T>\n  struct disable_if_c<true, T> {};\n\n  template <class Cond, class T = void> \n  struct disable_if : public disable_if_c<Cond::value, T> {};\n\n  template <bool B, class T>\n  struct lazy_disable_if_c {\n    typedef typename T::type type;\n  };\n\n  template <class T>\n  struct lazy_disable_if_c<true, T> {};\n\n  template <class Cond, class T> \n  struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};\n\n} // namespace boost\n\n#else\n\nnamespace boost {\n\n  namespace detail { typedef void enable_if_default_T; }\n\n  template <typename T>\n  struct enable_if_does_not_work_on_this_compiler;\n\n  template<typename T, typename R=void>\n  struct enable_if_has_type : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T>\n  struct enable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T> \n  struct disable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T> \n  struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T> \n  struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct enable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct disable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct lazy_enable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct lazy_disable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n} // namespace boost\n\n#endif // BOOST_NO_SFINAE\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/explicit_operator_bool.hpp",
    "content": "/*\n *          Copyright Andrey Semashev 2007 - 2013.\n * Distributed under the Boost Software License, Version 1.0.\n *    (See accompanying file LICENSE_1_0.txt or copy at\n *          http://www.boost.org/LICENSE_1_0.txt)\n */\n\n/*!\n * \\file   explicit_operator_bool.hpp\n * \\author Andrey Semashev\n * \\date   08.03.2009\n *\n * This header defines a compatibility macro that implements an unspecified\n * \\c bool operator idiom, which is superseded with explicit conversion operators in\n * C++11.\n */\n\n#ifndef BOOST_CORE_EXPLICIT_OPERATOR_BOOL_HPP\n#define BOOST_CORE_EXPLICIT_OPERATOR_BOOL_HPP\n\n#include <boost/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)\n\n/*!\n * \\brief The macro defines an explicit operator of conversion to \\c bool\n *\n * The macro should be used inside the definition of a class that has to\n * support the conversion. The class should also implement <tt>operator!</tt>,\n * in terms of which the conversion operator will be implemented.\n */\n#define BOOST_EXPLICIT_OPERATOR_BOOL()\\\n    BOOST_FORCEINLINE explicit operator bool () const\\\n    {\\\n        return !this->operator! ();\\\n    }\n\n/*!\n * \\brief The macro defines a noexcept explicit operator of conversion to \\c bool\n *\n * The macro should be used inside the definition of a class that has to\n * support the conversion. The class should also implement <tt>operator!</tt>,\n * in terms of which the conversion operator will be implemented.\n */\n#define BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()\\\n    BOOST_FORCEINLINE explicit operator bool () const BOOST_NOEXCEPT\\\n    {\\\n        return !this->operator! ();\\\n    }\n\n/*!\n * \\brief The macro defines a constexpr explicit operator of conversion to \\c bool\n *\n * The macro should be used inside the definition of a class that has to\n * support the conversion. The class should also implement <tt>operator!</tt>,\n * in terms of which the conversion operator will be implemented.\n */\n#define BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()\\\n    BOOST_FORCEINLINE BOOST_CONSTEXPR explicit operator bool () const BOOST_NOEXCEPT\\\n    {\\\n        return !this->operator! ();\\\n    }\n\n#else // !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)\n\n#if (defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) && !defined(BOOST_NO_COMPILER_CONFIG)\n// Sun C++ 5.3 can't handle the safe_bool idiom, so don't use it\n#define BOOST_NO_UNSPECIFIED_BOOL\n#endif // (defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) && !defined(BOOST_NO_COMPILER_CONFIG)\n\n#if !defined(BOOST_NO_UNSPECIFIED_BOOL)\n\nnamespace boost {\n\nnamespace detail {\n\n#if !defined(_MSC_VER) && !defined(__IBMCPP__)\n\n    struct unspecified_bool\n    {\n        // NOTE TO THE USER: If you see this in error messages then you tried\n        // to apply an unsupported operator on the object that supports\n        // explicit conversion to bool.\n        struct OPERATORS_NOT_ALLOWED;\n        static void true_value(OPERATORS_NOT_ALLOWED*) {}\n    };\n    typedef void (*unspecified_bool_type)(unspecified_bool::OPERATORS_NOT_ALLOWED*);\n\n#else\n\n    // MSVC and VACPP are too eager to convert pointer to function to void* even though they shouldn't\n    struct unspecified_bool\n    {\n        // NOTE TO THE USER: If you see this in error messages then you tried\n        // to apply an unsupported operator on the object that supports\n        // explicit conversion to bool.\n        struct OPERATORS_NOT_ALLOWED;\n        void true_value(OPERATORS_NOT_ALLOWED*) {}\n    };\n    typedef void (unspecified_bool::*unspecified_bool_type)(unspecified_bool::OPERATORS_NOT_ALLOWED*);\n\n#endif\n\n} // namespace detail\n\n} // namespace boost\n\n#define BOOST_EXPLICIT_OPERATOR_BOOL()\\\n    BOOST_FORCEINLINE operator boost::detail::unspecified_bool_type () const\\\n    {\\\n        return (!this->operator! () ? &boost::detail::unspecified_bool::true_value : (boost::detail::unspecified_bool_type)0);\\\n    }\n\n#define BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()\\\n    BOOST_FORCEINLINE operator boost::detail::unspecified_bool_type () const BOOST_NOEXCEPT\\\n    {\\\n        return (!this->operator! () ? &boost::detail::unspecified_bool::true_value : (boost::detail::unspecified_bool_type)0);\\\n    }\n\n#define BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()\\\n    BOOST_FORCEINLINE BOOST_CONSTEXPR operator boost::detail::unspecified_bool_type () const BOOST_NOEXCEPT\\\n    {\\\n        return (!this->operator! () ? &boost::detail::unspecified_bool::true_value : (boost::detail::unspecified_bool_type)0);\\\n    }\n\n#else // !defined(BOOST_NO_UNSPECIFIED_BOOL)\n\n#define BOOST_EXPLICIT_OPERATOR_BOOL()\\\n    BOOST_FORCEINLINE operator bool () const\\\n    {\\\n        return !this->operator! ();\\\n    }\n\n#define BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()\\\n    BOOST_FORCEINLINE operator bool () const BOOST_NOEXCEPT\\\n    {\\\n        return !this->operator! ();\\\n    }\n\n#define BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()\\\n    BOOST_FORCEINLINE BOOST_CONSTEXPR operator bool () const BOOST_NOEXCEPT\\\n    {\\\n        return !this->operator! ();\\\n    }\n\n#endif // !defined(BOOST_NO_UNSPECIFIED_BOOL)\n\n#endif // !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)\n\n#endif // BOOST_CORE_EXPLICIT_OPERATOR_BOOL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/ignore_unused.hpp",
    "content": "// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.\n//\n// Use, modification and distribution is subject to the Boost Software License,\n// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_CORE_IGNORE_UNUSED_HPP\n#define BOOST_CORE_IGNORE_UNUSED_HPP\n\n#include <boost/config.hpp>\n\nnamespace boost {\n\n#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES\n\ntemplate <typename... Ts>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(Ts const& ...)\n{}\n\ntemplate <typename... Ts>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()\n{}\n\n#else\n\ntemplate <typename T1>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&)\n{}\n\ntemplate <typename T1, typename T2>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&, T2 const&)\n{}\n\ntemplate <typename T1, typename T2, typename T3>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&, T2 const&, T3 const&)\n{}\n\ntemplate <typename T1, typename T2, typename T3, typename T4>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&, T2 const&, T3 const&, T4 const&)\n{}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&, T2 const&, T3 const&, T4 const&, T5 const&)\n{}\n\ntemplate <typename T1>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()\n{}\n\ntemplate <typename T1, typename T2>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()\n{}\n\ntemplate <typename T1, typename T2, typename T3>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()\n{}\n\ntemplate <typename T1, typename T2, typename T3, typename T4>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()\n{}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nBOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()\n{}\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_CORE_IGNORE_UNUSED_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/is_same.hpp",
    "content": "#ifndef BOOST_CORE_IS_SAME_HPP_INCLUDED\n#define BOOST_CORE_IS_SAME_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n// is_same<T1,T2>::value is true when T1 == T2\n//\n// Copyright 2014 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0.\n// See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/config.hpp>\n\nnamespace boost\n{\n\nnamespace core\n{\n\ntemplate< class T1, class T2 > struct is_same\n{\n    BOOST_STATIC_CONSTANT( bool, value = false );\n};\n\ntemplate< class T > struct is_same< T, T >\n{\n    BOOST_STATIC_CONSTANT( bool, value = true );\n};\n\n} // namespace core\n\n} // namespace boost\n\n#endif // #ifndef BOOST_CORE_IS_SAME_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/lightweight_test.hpp",
    "content": "#ifndef BOOST_CORE_LIGHTWEIGHT_TEST_HPP\n#define BOOST_CORE_LIGHTWEIGHT_TEST_HPP\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n//\n//  boost/core/lightweight_test.hpp - lightweight test library\n//\n//  Copyright (c) 2002, 2009, 2014 Peter Dimov\n//  Copyright (2) Beman Dawes 2010, 2011\n//  Copyright (3) Ion Gaztanaga 2013\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/assert.hpp>\n#include <boost/current_function.hpp>\n#include <boost/core/no_exceptions_support.hpp>\n#include <iostream>\n\n//  IDE's like Visual Studio perform better if output goes to std::cout or\n//  some other stream, so allow user to configure output stream:\n#ifndef BOOST_LIGHTWEIGHT_TEST_OSTREAM\n# define BOOST_LIGHTWEIGHT_TEST_OSTREAM std::cerr\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nstruct report_errors_reminder\n{\n    bool called_report_errors_function;\n\n    report_errors_reminder() : called_report_errors_function(false) {}\n\n    ~report_errors_reminder()\n    {\n        BOOST_ASSERT(called_report_errors_function);  // verify report_errors() was called  \n    }\n};\n\ninline report_errors_reminder& report_errors_remind()\n{\n    static report_errors_reminder r;\n    return r;\n}\n\ninline int & test_errors()\n{\n    static int x = 0;\n    report_errors_remind();\n    return x;\n}\n\ninline void test_failed_impl(char const * expr, char const * file, int line, char const * function)\n{\n    BOOST_LIGHTWEIGHT_TEST_OSTREAM\n      << file << \"(\" << line << \"): test '\" << expr << \"' failed in function '\"\n      << function << \"'\" << std::endl;\n    ++test_errors();\n}\n\ninline void error_impl(char const * msg, char const * file, int line, char const * function)\n{\n    BOOST_LIGHTWEIGHT_TEST_OSTREAM\n      << file << \"(\" << line << \"): \" << msg << \" in function '\"\n      << function << \"'\" << std::endl;\n    ++test_errors();\n}\n\ninline void throw_failed_impl(char const * excep, char const * file, int line, char const * function)\n{\n   BOOST_LIGHTWEIGHT_TEST_OSTREAM\n    << file << \"(\" << line << \"): Exception '\" << excep << \"' not thrown in function '\"\n    << function << \"'\" << std::endl;\n   ++test_errors();\n}\n\ntemplate<class T, class U> inline void test_eq_impl( char const * expr1, char const * expr2,\n  char const * file, int line, char const * function, T const & t, U const & u )\n{\n    if( t == u )\n    {\n        report_errors_remind();\n    }\n    else\n    {\n        BOOST_LIGHTWEIGHT_TEST_OSTREAM\n            << file << \"(\" << line << \"): test '\" << expr1 << \" == \" << expr2\n            << \"' failed in function '\" << function << \"': \"\n            << \"'\" << t << \"' != '\" << u << \"'\" << std::endl;\n        ++test_errors();\n    }\n}\n\ntemplate<class T, class U> inline void test_ne_impl( char const * expr1, char const * expr2,\n  char const * file, int line, char const * function, T const & t, U const & u )\n{\n    if( t != u )\n    {\n        report_errors_remind();\n    }\n    else\n    {\n        BOOST_LIGHTWEIGHT_TEST_OSTREAM\n            << file << \"(\" << line << \"): test '\" << expr1 << \" != \" << expr2\n            << \"' failed in function '\" << function << \"': \"\n            << \"'\" << t << \"' == '\" << u << \"'\" << std::endl;\n        ++test_errors();\n    }\n}\n\n} // namespace detail\n\ninline int report_errors()\n{\n    boost::detail::report_errors_remind().called_report_errors_function = true;\n\n    int errors = boost::detail::test_errors();\n\n    if( errors == 0 )\n    {\n        BOOST_LIGHTWEIGHT_TEST_OSTREAM\n          << \"No errors detected.\" << std::endl;\n        return 0;\n    }\n    else\n    {\n        BOOST_LIGHTWEIGHT_TEST_OSTREAM\n          << errors << \" error\" << (errors == 1? \"\": \"s\") << \" detected.\" << std::endl;\n        return 1;\n    }\n}\n\n} // namespace boost\n\n#define BOOST_TEST(expr) ((expr)? (void)0: ::boost::detail::test_failed_impl(#expr, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))\n\n#define BOOST_ERROR(msg) ( ::boost::detail::error_impl(msg, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )\n\n#define BOOST_TEST_EQ(expr1,expr2) ( ::boost::detail::test_eq_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )\n#define BOOST_TEST_NE(expr1,expr2) ( ::boost::detail::test_ne_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )\n\n#ifndef BOOST_NO_EXCEPTIONS\n   #define BOOST_TEST_THROWS( EXPR, EXCEP )                    \\\n      try {                                                    \\\n         EXPR;                                                 \\\n         ::boost::detail::throw_failed_impl                    \\\n         (#EXCEP, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); \\\n      }                                                        \\\n      catch(EXCEP const&) {                                    \\\n      }                                                        \\\n      catch(...) {                                             \\\n         ::boost::detail::throw_failed_impl                    \\\n         (#EXCEP, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); \\\n      }                                                        \\\n   //\n#else\n   #define BOOST_TEST_THROWS( EXPR, EXCEP )\n#endif\n\n#endif // #ifndef BOOST_CORE_LIGHTWEIGHT_TEST_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/lightweight_test_trait.hpp",
    "content": "#ifndef BOOST_CORE_LIGHTWEIGHT_TEST_TRAIT_HPP\n#define BOOST_CORE_LIGHTWEIGHT_TEST_TRAIT_HPP\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n// boost/core/lightweight_test_trait.hpp\n//\n// BOOST_TEST_TRAIT_TRUE, BOOST_TEST_TRAIT_FALSE\n//\n// Copyright 2014 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0.\n// See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/core/lightweight_test.hpp>\n#include <boost/core/typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntemplate< class T > inline void test_trait_impl( char const * trait, void (*)( T ),\n  bool expected, char const * file, int line, char const * function )\n{\n    if( T::value == expected )\n    {\n        report_errors_remind();\n    }\n    else\n    {\n        BOOST_LIGHTWEIGHT_TEST_OSTREAM\n            << file << \"(\" << line << \"): predicate '\" << trait << \"' [\"\n            << boost::core::demangled_name( BOOST_CORE_TYPEID(T) ) << \"]\"\n            << \" test failed in function '\" << function\n            << \"' (should have been \" << ( expected? \"true\": \"false\" ) << \")\"\n            << std::endl;\n\n        ++test_errors();\n    }\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#define BOOST_TEST_TRAIT_TRUE(type) ( ::boost::detail::test_trait_impl(#type, (void(*)type)0, true, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )\n#define BOOST_TEST_TRAIT_FALSE(type) ( ::boost::detail::test_trait_impl(#type, (void(*)type)0, false, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )\n\n#endif // #ifndef BOOST_CORE_LIGHTWEIGHT_TEST_TRAIT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/no_exceptions_support.hpp",
    "content": "#ifndef BOOST_CORE_NO_EXCEPTIONS_SUPPORT_HPP\n#define BOOST_CORE_NO_EXCEPTIONS_SUPPORT_HPP\n\n#if defined(_MSC_VER)\n#  pragma once\n#endif\n\n//----------------------------------------------------------------------\n// (C) Copyright 2004 Pavel Vozenilek.\n// Use, modification and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt\n// or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// This file contains helper macros used when exception support may be\n// disabled (as indicated by macro BOOST_NO_EXCEPTIONS).\n//\n// Before picking up these macros you may consider using RAII techniques\n// to deal with exceptions - their syntax can be always the same with \n// or without exception support enabled.\n//----------------------------------------------------------------------\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if !(defined BOOST_NO_EXCEPTIONS)\n#    define BOOST_TRY { try\n#    define BOOST_CATCH(x) catch(x)\n#    define BOOST_RETHROW throw;\n#    define BOOST_CATCH_END }\n#else\n#    if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n#        define BOOST_TRY { if (\"\")\n#        define BOOST_CATCH(x) else if (!\"\")\n#    else\n#        define BOOST_TRY { if (true)\n#        define BOOST_CATCH(x) else if (false)\n#    endif\n#    define BOOST_RETHROW\n#    define BOOST_CATCH_END }\n#endif\n\n\n#endif \n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/noncopyable.hpp",
    "content": "//  Boost noncopyable.hpp header file  --------------------------------------//\n\n//  (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/utility for documentation.\n\n#ifndef BOOST_CORE_NONCOPYABLE_HPP\n#define BOOST_CORE_NONCOPYABLE_HPP\n\n#include <boost/config.hpp>\n\nnamespace boost {\n\n//  Private copy constructor and copy assignment ensure classes derived from\n//  class noncopyable cannot be copied.\n\n//  Contributed by Dave Abrahams\n\nnamespace noncopyable_  // protection from unintended ADL\n{\n  class noncopyable\n  {\n  protected:\n#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS)\n      BOOST_CONSTEXPR noncopyable() = default;\n      ~noncopyable() = default;\n#else\n      noncopyable() {}\n      ~noncopyable() {}\n#endif\n#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)\n      noncopyable( const noncopyable& ) = delete;\n      noncopyable& operator=( const noncopyable& ) = delete;\n#else\n  private:  // emphasize the following members are private\n      noncopyable( const noncopyable& );\n      noncopyable& operator=( const noncopyable& );\n#endif\n  };\n}\n\ntypedef noncopyable_::noncopyable noncopyable;\n\n} // namespace boost\n\n#endif  // BOOST_CORE_NONCOPYABLE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/null_deleter.hpp",
    "content": "/*\n *          Copyright Andrey Semashev 2007 - 2014.\n * Distributed under the Boost Software License, Version 1.0.\n *    (See accompanying file LICENSE_1_0.txt or copy at\n *          http://www.boost.org/LICENSE_1_0.txt)\n */\n/*!\n * \\file   null_deleter.hpp\n * \\author Andrey Semashev\n * \\date   22.04.2007\n *\n * This header contains a \\c null_deleter implementation. This is an empty\n * function object that receives a pointer and does nothing with it.\n * Such empty deletion strategy may be convenient, for example, when\n * constructing <tt>shared_ptr</tt>s that point to some object that should not be\n * deleted (i.e. a variable on the stack or some global singleton, like <tt>std::cout</tt>).\n */\n\n#ifndef BOOST_CORE_NULL_DELETER_HPP\n#define BOOST_CORE_NULL_DELETER_HPP\n\n#include <boost/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\nnamespace boost {\n\n//! A function object that does nothing and can be used as an empty deleter for \\c shared_ptr\nstruct null_deleter\n{\n    //! Function object result type\n    typedef void result_type;\n    /*!\n     * Does nothing\n     */\n    template< typename T >\n    void operator() (T*) const BOOST_NOEXCEPT {}\n};\n\n} // namespace boost\n\n#endif // BOOST_CORE_NULL_DELETER_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/ref.hpp",
    "content": "#ifndef BOOST_CORE_REF_HPP\n#define BOOST_CORE_REF_HPP\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n#include <boost/config.hpp>\n#include <boost/utility/addressof.hpp>\n#include <boost/detail/workaround.hpp>\n\n//\n//  ref.hpp - ref/cref, useful helper functions\n//\n//  Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)\n//  Copyright (C) 2001, 2002 Peter Dimov\n//  Copyright (C) 2002 David Abrahams\n//\n//  Copyright (C) 2014 Glen Joseph Fernandes\n//  glenfe at live dot com\n//  Copyright (C) 2014 Agustin Berge\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/core/doc/html/core/ref.html for documentation.\n//\n\n/**\n @file\n*/\n\n/**\n Boost namespace.\n*/\nnamespace boost\n{\n\n#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1600 )\n\n    struct ref_workaround_tag {};\n\n#endif\n\n// reference_wrapper\n\n/**\n @brief Contains a reference to an object of type `T`.\n\n `reference_wrapper` is primarily used to \"feed\" references to\n function templates (algorithms) that take their parameter by\n value. It provides an implicit conversion to `T&`, which\n usually allows the function templates to work on references\n unmodified.\n*/\ntemplate<class T> class reference_wrapper\n{\npublic:\n    /**\n     Type `T`.\n    */\n    typedef T type;\n\n    /**\n     Constructs a `reference_wrapper` object that stores a\n     reference to `t`.\n\n     @remark Does not throw.\n    */\n    BOOST_FORCEINLINE explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}\n\n#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1600 )\n\n    BOOST_FORCEINLINE explicit reference_wrapper( T & t, ref_workaround_tag ): t_( boost::addressof( t ) ) {}\n\n#endif\n\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n    /**\n     @remark Construction from a temporary object is disabled.\n    */\n    BOOST_DELETED_FUNCTION(reference_wrapper(T&& t))\npublic:\n#endif\n\n    /**\n     @return The stored reference.\n     @remark Does not throw.\n    */\n    BOOST_FORCEINLINE operator T& () const { return *t_; }\n\n    /**\n     @return The stored reference.\n     @remark Does not throw.\n    */\n    BOOST_FORCEINLINE T& get() const { return *t_; }\n\n    /**\n     @return A pointer to the object referenced by the stored\n       reference.\n     @remark Does not throw.\n    */\n    BOOST_FORCEINLINE T* get_pointer() const { return t_; }\n\nprivate:\n\n    T* t_;\n};\n\n// ref\n\n/**\n @cond\n*/\n#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )\n#  define BOOST_REF_CONST\n#else\n#  define BOOST_REF_CONST const\n#endif\n/**\n @endcond\n*/\n\n/**\n @return `reference_wrapper<T>(t)`\n @remark Does not throw.\n*/\ntemplate<class T> BOOST_FORCEINLINE reference_wrapper<T> BOOST_REF_CONST ref( T & t )\n{\n#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1600 )\n\n    return reference_wrapper<T>( t, ref_workaround_tag() );\n\n#else\n\n    return reference_wrapper<T>( t );\n\n#endif\n}\n\n// cref\n\n/**\n @return `reference_wrapper<T const>(t)`\n @remark Does not throw.\n*/\ntemplate<class T> BOOST_FORCEINLINE reference_wrapper<T const> BOOST_REF_CONST cref( T const & t )\n{\n    return reference_wrapper<T const>(t);\n}\n\n#undef BOOST_REF_CONST\n\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n\n/**\n @cond\n*/\n#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)\n#  define BOOST_REF_DELETE\n#else\n#  define BOOST_REF_DELETE = delete\n#endif\n/**\n @endcond\n*/\n\n/**\n @remark Construction from a temporary object is disabled.\n*/\ntemplate<class T> void ref(T const&&) BOOST_REF_DELETE;\n\n/**\n @remark Construction from a temporary object is disabled.\n*/\ntemplate<class T> void cref(T const&&) BOOST_REF_DELETE;\n\n#undef BOOST_REF_DELETE\n\n#endif\n\n// is_reference_wrapper\n\n/**\n @brief Determine if a type `T` is an instantiation of\n `reference_wrapper`.\n\n The value static constant will be true if the type `T` is a\n specialization of `reference_wrapper`.\n*/\ntemplate<typename T> struct is_reference_wrapper\n{\n    BOOST_STATIC_CONSTANT( bool, value = false );\n};\n\n/**\n @cond\n*/\ntemplate<typename T> struct is_reference_wrapper< reference_wrapper<T> >\n{\n    BOOST_STATIC_CONSTANT( bool, value = true );\n};\n\n#if !defined(BOOST_NO_CV_SPECIALIZATIONS)\n\ntemplate<typename T> struct is_reference_wrapper< reference_wrapper<T> const >\n{\n    BOOST_STATIC_CONSTANT( bool, value = true );\n};\n\ntemplate<typename T> struct is_reference_wrapper< reference_wrapper<T> volatile >\n{\n    BOOST_STATIC_CONSTANT( bool, value = true );\n};\n\ntemplate<typename T> struct is_reference_wrapper< reference_wrapper<T> const volatile >\n{\n    BOOST_STATIC_CONSTANT( bool, value = true );\n};\n\n#endif // !defined(BOOST_NO_CV_SPECIALIZATIONS)\n\n/**\n @endcond\n*/\n\n\n// unwrap_reference\n\n/**\n @brief Find the type in a `reference_wrapper`.\n\n The `typedef` type is `T::type` if `T` is a\n `reference_wrapper`, `T` otherwise.\n*/\ntemplate<typename T> struct unwrap_reference\n{\n    typedef T type;\n};\n\n/**\n @cond\n*/\ntemplate<typename T> struct unwrap_reference< reference_wrapper<T> >\n{\n    typedef T type;\n};\n\n#if !defined(BOOST_NO_CV_SPECIALIZATIONS)\n\ntemplate<typename T> struct unwrap_reference< reference_wrapper<T> const >\n{\n    typedef T type;\n};\n\ntemplate<typename T> struct unwrap_reference< reference_wrapper<T> volatile >\n{\n    typedef T type;\n};\n\ntemplate<typename T> struct unwrap_reference< reference_wrapper<T> const volatile >\n{\n    typedef T type;\n};\n\n#endif // !defined(BOOST_NO_CV_SPECIALIZATIONS)\n\n/**\n @endcond\n*/\n\n// unwrap_ref\n\n/**\n @return `unwrap_reference<T>::type&(t)`\n @remark Does not throw.\n*/\ntemplate<class T> BOOST_FORCEINLINE typename unwrap_reference<T>::type& unwrap_ref( T & t )\n{\n    return t;\n}\n\n// get_pointer\n\n/**\n @cond\n*/\ntemplate<class T> BOOST_FORCEINLINE T* get_pointer( reference_wrapper<T> const & r )\n{\n    return r.get_pointer();\n}\n/**\n @endcond\n*/\n\n} // namespace boost\n\n#endif // #ifndef BOOST_CORE_REF_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/scoped_enum.hpp",
    "content": "//  scoped_enum.hpp  ---------------------------------------------------------//\n\n//  Copyright Beman Dawes, 2009\n//  Copyright (C) 2011-2012 Vicente J. Botet Escriba\n//  Copyright (C) 2012 Anthony Williams\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n#ifndef BOOST_CORE_SCOPED_ENUM_HPP\n#define BOOST_CORE_SCOPED_ENUM_HPP\n\n#include <boost/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\nnamespace boost\n{\n\n#ifdef BOOST_NO_CXX11_SCOPED_ENUMS\n\n  /**\n   * Meta-function to get the native enum type associated to an enum class or its emulation.\n   */\n  template <typename EnumType>\n  struct native_type\n  {\n    /**\n     * The member typedef type names the native enum type associated to the scoped enum,\n     * which is it self if the compiler supports scoped enums or EnumType::enum_type if it is an emulated scoped enum.\n     */\n    typedef typename EnumType::enum_type type;\n  };\n\n  /**\n   * Casts a scoped enum to its underlying type.\n   *\n   * This function is useful when working with scoped enum classes, which doens't implicitly convert to the underlying type.\n   * @param v A scoped enum.\n   * @returns The underlying type.\n   * @throws No-throws.\n   */\n  template <typename UnderlyingType, typename EnumType>\n  UnderlyingType underlying_cast(EnumType v)\n  {\n    return v.get_underlying_value_();\n  }\n\n  /**\n   * Casts a scoped enum to its native enum type.\n   *\n   * This function is useful to make programs portable when the scoped enum emulation can not be use where native enums can.\n   *\n   * EnumType the scoped enum type\n   *\n   * @param v A scoped enum.\n   * @returns The native enum value.\n   * @throws No-throws.\n   */\n  template <typename EnumType>\n  inline\n  typename EnumType::enum_type native_value(EnumType e)\n  {\n    return e.get_native_value_();\n  }\n\n#else  // BOOST_NO_CXX11_SCOPED_ENUMS\n\n  template <typename EnumType>\n  struct native_type\n  {\n    typedef EnumType type;\n  };\n\n  template <typename UnderlyingType, typename EnumType>\n  UnderlyingType underlying_cast(EnumType v)\n  {\n    return static_cast<UnderlyingType>(v);\n  }\n\n  template <typename EnumType>\n  inline\n  EnumType native_value(EnumType e)\n  {\n    return e;\n  }\n\n#endif // BOOST_NO_CXX11_SCOPED_ENUMS\n}\n\n\n#ifdef BOOST_NO_CXX11_SCOPED_ENUMS\n\n#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n\n#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \\\n     explicit operator underlying_type() const BOOST_NOEXCEPT { return get_underlying_value_(); }\n\n#else\n\n#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR\n\n#endif\n\n/**\n * Start a declaration of a scoped enum.\n *\n * @param EnumType The new scoped enum.\n * @param UnderlyingType The underlying type.\n */\n#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType, UnderlyingType)    \\\n    struct EnumType {                                                   \\\n        typedef void is_boost_scoped_enum_tag;                          \\\n        typedef UnderlyingType underlying_type;                         \\\n        EnumType() BOOST_NOEXCEPT {}                                    \\\n        explicit EnumType(underlying_type v) BOOST_NOEXCEPT : v_(v) {}                 \\\n        underlying_type get_underlying_value_() const BOOST_NOEXCEPT { return v_; }    \\\n        BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR                \\\n    private:                                                            \\\n        underlying_type v_;                                             \\\n        typedef EnumType self_type;                                     \\\n    public:                                                             \\\n        enum enum_type\n\n#define BOOST_SCOPED_ENUM_DECLARE_END2() \\\n        enum_type get_native_value_() const BOOST_NOEXCEPT { return enum_type(v_); } \\\n        friend bool operator ==(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==enum_type(rhs.v_); } \\\n        friend bool operator ==(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==rhs; } \\\n        friend bool operator ==(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs==enum_type(rhs.v_); } \\\n        friend bool operator !=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=enum_type(rhs.v_); } \\\n        friend bool operator !=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=rhs; } \\\n        friend bool operator !=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs!=enum_type(rhs.v_); } \\\n        friend bool operator <(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<enum_type(rhs.v_); } \\\n        friend bool operator <(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<rhs; } \\\n        friend bool operator <(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<enum_type(rhs.v_); } \\\n        friend bool operator <=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=enum_type(rhs.v_); } \\\n        friend bool operator <=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=rhs; } \\\n        friend bool operator <=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<=enum_type(rhs.v_); } \\\n        friend bool operator >(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>enum_type(rhs.v_); } \\\n        friend bool operator >(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>rhs; } \\\n        friend bool operator >(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>enum_type(rhs.v_); } \\\n        friend bool operator >=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=enum_type(rhs.v_); } \\\n        friend bool operator >=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=rhs; } \\\n        friend bool operator >=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>=enum_type(rhs.v_); } \\\n    };\n\n#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) \\\n    ; \\\n    EnumType(enum_type v) BOOST_NOEXCEPT : v_(v) {}                 \\\n    BOOST_SCOPED_ENUM_DECLARE_END2()\n\n/**\n * Starts a declaration of a scoped enum with the default int underlying type.\n *\n * @param EnumType The new scoped enum.\n */\n#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) \\\n  BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,int)\n\n/**\n * Name of the native enum type.\n *\n * @param EnumType The new scoped enum.\n */\n#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType::enum_type\n/**\n * Forward declares an scoped enum.\n *\n * @param EnumType The scoped enum.\n */\n#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) struct EnumType\n\n#else  // BOOST_NO_CXX11_SCOPED_ENUMS\n\n#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,UnderlyingType) enum class EnumType : UnderlyingType\n#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) enum class EnumType\n#define BOOST_SCOPED_ENUM_DECLARE_END2()\n#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) ;\n\n#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType\n#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) enum class EnumType\n\n#endif  // BOOST_NO_CXX11_SCOPED_ENUMS\n\n// Deprecated macros\n#define BOOST_SCOPED_ENUM_START(name) BOOST_SCOPED_ENUM_DECLARE_BEGIN(name)\n#define BOOST_SCOPED_ENUM_END BOOST_SCOPED_ENUM_DECLARE_END2()\n#define BOOST_SCOPED_ENUM(name) BOOST_SCOPED_ENUM_NATIVE(name)\n\n#endif  // BOOST_CORE_SCOPED_ENUM_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/swap.hpp",
    "content": "// Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n// For more information, see http://www.boost.org\n\n\n#ifndef BOOST_CORE_SWAP_HPP\n#define BOOST_CORE_SWAP_HPP\n\n// Note: the implementation of this utility contains various workarounds:\n// - swap_impl is put outside the boost namespace, to avoid infinite\n// recursion (causing stack overflow) when swapping objects of a primitive\n// type.\n// - swap_impl has a using-directive, rather than a using-declaration,\n// because some compilers (including MSVC 7.1, Borland 5.9.3, and\n// Intel 8.1) don't do argument-dependent lookup when it has a\n// using-declaration instead.\n// - boost::swap has two template arguments, instead of one, to\n// avoid ambiguity when swapping objects of a Boost type that does\n// not have its own boost::swap overload.\n\n#include <utility> //for std::swap (C++11)\n#include <algorithm> //for std::swap (C++98)\n#include <cstddef> //for std::size_t\n#include <boost/config.hpp>\n\nnamespace boost_swap_impl\n{\n  template<class T>\n  BOOST_GPU_ENABLED\n  void swap_impl(T& left, T& right)\n  {\n    using namespace std;//use std::swap if argument dependent lookup fails\n    swap(left,right);\n  }\n\n  template<class T, std::size_t N>\n  BOOST_GPU_ENABLED\n  void swap_impl(T (& left)[N], T (& right)[N])\n  {\n    for (std::size_t i = 0; i < N; ++i)\n    {\n      ::boost_swap_impl::swap_impl(left[i], right[i]);\n    }\n  }\n}\n\nnamespace boost\n{\n  template<class T1, class T2>\n  BOOST_GPU_ENABLED\n  void swap(T1& left, T2& right)\n  {\n    ::boost_swap_impl::swap_impl(left, right);\n  }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/typeinfo.hpp",
    "content": "#ifndef BOOST_CORE_TYPEINFO_HPP_INCLUDED\n#define BOOST_CORE_TYPEINFO_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  core::typeinfo, BOOST_CORE_TYPEID\n//\n//  Copyright 2007, 2014 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n#include <boost/config.hpp>\n\n#if defined( BOOST_NO_TYPEID )\n\n#include <boost/current_function.hpp>\n#include <functional>\n\nnamespace boost\n{\n\nnamespace core\n{\n\nclass typeinfo\n{\nprivate:\n\n    typeinfo( typeinfo const& );\n    typeinfo& operator=( typeinfo const& );\n\n    char const * name_;\n\npublic:\n\n    explicit typeinfo( char const * name ): name_( name )\n    {\n    }\n\n    bool operator==( typeinfo const& rhs ) const\n    {\n        return this == &rhs;\n    }\n\n    bool operator!=( typeinfo const& rhs ) const\n    {\n        return this != &rhs;\n    }\n\n    bool before( typeinfo const& rhs ) const\n    {\n        return std::less< typeinfo const* >()( this, &rhs );\n    }\n\n    char const* name() const\n    {\n        return name_;\n    }\n};\n\ninline char const * demangled_name( core::typeinfo const & ti )\n{\n    return ti.name();\n}\n\n} // namespace core\n\nnamespace detail\n{\n\ntemplate<class T> struct core_typeid_\n{\n    static boost::core::typeinfo ti_;\n\n    static char const * name()\n    {\n        return BOOST_CURRENT_FUNCTION;\n    }\n};\n\n#if defined(__SUNPRO_CC)\n// see #4199, the Sun Studio compiler gets confused about static initialization \n// constructor arguments. But an assignment works just fine. \ntemplate<class T> boost::core::typeinfo core_typeid_< T >::ti_ = core_typeid_< T >::name();\n#else\ntemplate<class T> boost::core::typeinfo core_typeid_< T >::ti_(core_typeid_< T >::name());\n#endif\n\ntemplate<class T> struct core_typeid_< T & >: core_typeid_< T >\n{\n};\n\ntemplate<class T> struct core_typeid_< T const >: core_typeid_< T >\n{\n};\n\ntemplate<class T> struct core_typeid_< T volatile >: core_typeid_< T >\n{\n};\n\ntemplate<class T> struct core_typeid_< T const volatile >: core_typeid_< T >\n{\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#define BOOST_CORE_TYPEID(T) (boost::detail::core_typeid_<T>::ti_)\n\n#else\n\n#include <boost/core/demangle.hpp>\n#include <typeinfo>\n\nnamespace boost\n{\n\nnamespace core\n{\n\n#if defined( BOOST_NO_STD_TYPEINFO )\n\ntypedef ::type_info typeinfo;\n\n#else\n\ntypedef std::type_info typeinfo;\n\n#endif\n\ninline std::string demangled_name( core::typeinfo const & ti )\n{\n    return core::demangle( ti.name() );\n}\n\n} // namespace core\n\n} // namespace boost\n\n#define BOOST_CORE_TYPEID(T) typeid(T)\n\n#endif\n\n#endif  // #ifndef BOOST_CORE_TYPEINFO_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/core/underlying_type.hpp",
    "content": "//  underlying_type.hpp  ---------------------------------------------------------//\n\n//  Copyright Beman Dawes, 2009\n//  Copyright (C) 2011-2012 Vicente J. Botet Escriba\n//  Copyright (C) 2012 Anthony Williams\n//  Copyright (C) 2014 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n#ifndef BOOST_CORE_UNDERLYING_TYPE_HPP\n#define BOOST_CORE_UNDERLYING_TYPE_HPP\n\n#include <boost/config.hpp>\n\n// GCC 4.7 and later seem to provide std::underlying_type\n#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) || (defined(BOOST_GCC) && BOOST_GCC >= 40700 && defined(__GXX_EXPERIMENTAL_CXX0X__))\n#include <type_traits>\n#define BOOST_DETAIL_HAS_STD_UNDERLYING_TYPE\n#endif\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\nnamespace boost {\n\nnamespace detail {\n\ntemplate< typename EnumType, typename Void = void >\nstruct underlying_type_impl;\n\n#if defined(BOOST_NO_CXX11_SCOPED_ENUMS)\n\n// Support for boost/core/scoped_enum.hpp\ntemplate< typename EnumType >\nstruct underlying_type_impl< EnumType, typename EnumType::is_boost_scoped_enum_tag >\n{\n    /**\n     * The member typedef type names the underlying type of EnumType. It is EnumType::underlying_type when the EnumType is an emulated scoped enum,\n     */\n    typedef typename EnumType::underlying_type type;\n};\n\n#endif\n\n#if defined(BOOST_DETAIL_HAS_STD_UNDERLYING_TYPE)\n\ntemplate< typename EnumType, typename Void >\nstruct underlying_type_impl\n{\n    typedef typename std::underlying_type< EnumType >::type type;\n};\n\n#endif\n\n} // namespace detail\n\n#if !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && !defined(BOOST_DETAIL_HAS_STD_UNDERLYING_TYPE)\n#define BOOST_NO_UNDERLYING_TYPE\n#endif\n\n/**\n * Meta-function to get the underlying type of a scoped enum.\n *\n * Requires EnumType must be an enum type or the emulation of a scoped enum.\n * If BOOST_NO_UNDERLYING_TYPE is defined, the implementation will not be able\n * to deduce the underlying type of enums. The user is expected to specialize\n * this trait in this case.\n */\ntemplate< typename EnumType >\nstruct underlying_type :\n    public detail::underlying_type_impl< EnumType >\n{\n};\n\n} // namespace boost\n\n#endif  // BOOST_CORE_UNDERLYING_TYPE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/cstdint.hpp",
    "content": "//  boost cstdint.hpp header file  ------------------------------------------//\n\n//  (C) Copyright Beman Dawes 1999.\n//  (C) Copyright Jens Mauer 2001\n//  (C) Copyright John Maddock 2001\n//  Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/integer for documentation.\n\n//  Revision History\n//   31 Oct 01  use BOOST_HAS_LONG_LONG to check for \"long long\" (Jens M.)\n//   16 Apr 01  check LONGLONG_MAX when looking for \"long long\" (Jens Maurer)\n//   23 Jan 01  prefer \"long\" over \"int\" for int32_t and intmax_t (Jens Maurer)\n//   12 Nov 00  Merged <boost/stdint.h> (Jens Maurer)\n//   23 Sep 00  Added INTXX_C macro support (John Maddock).\n//   22 Sep 00  Better 64-bit support (John Maddock)\n//   29 Jun 00  Reimplement to avoid including stdint.h within namespace boost\n//    8 Aug 99  Initial version (Beman Dawes)\n\n\n#ifndef BOOST_CSTDINT_HPP\n#define BOOST_CSTDINT_HPP\n\n//\n// Since we always define the INT#_C macros as per C++0x,\n// define __STDC_CONSTANT_MACROS so that <stdint.h> does the right\n// thing if possible, and so that the user knows that the macros\n// are actually defined as per C99.\n//\n#ifndef __STDC_CONSTANT_MACROS\n#  define __STDC_CONSTANT_MACROS\n#endif\n\n#include <boost/config.hpp>\n\n//\n// Note that GLIBC is a bit inconsistent about whether int64_t is defined or not\n// depending upon what headers happen to have been included first...\n// so we disable use of stdint.h when GLIBC does not define __GLIBC_HAVE_LONG_LONG.\n// See https://svn.boost.org/trac/boost/ticket/3548 and http://sources.redhat.com/bugzilla/show_bug.cgi?id=10990\n//\n#if defined(BOOST_HAS_STDINT_H)\t\t\t\t\t\\\n  && (!defined(__GLIBC__)\t\t\t\t\t\\\n      || defined(__GLIBC_HAVE_LONG_LONG)\t\t\t\\\n      || (defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 17)))))\n\n// The following #include is an implementation artifact; not part of interface.\n# ifdef __hpux\n// HP-UX has a vaguely nice <stdint.h> in a non-standard location\n#   include <inttypes.h>\n#   ifdef __STDC_32_MODE__\n      // this is triggered with GCC, because it defines __cplusplus < 199707L\n#     define BOOST_NO_INT64_T\n#   endif\n# elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX)\n#   include <inttypes.h>\n# else\n#   include <stdint.h>\n\n// There is a bug in Cygwin two _C macros\n#   if defined(__STDC_CONSTANT_MACROS) && defined(__CYGWIN__)\n#     undef INTMAX_C\n#     undef UINTMAX_C\n#     define INTMAX_C(c) c##LL\n#     define UINTMAX_C(c) c##ULL\n#   endif\n\n# endif\n\n#if defined(__QNX__) && defined(__EXT_QNX) \n\n// QNX (Dinkumware stdlib) defines these as non-standard names.\n// Reflect to the standard names.\n\ntypedef ::intleast8_t int_least8_t;\ntypedef ::intfast8_t int_fast8_t;\ntypedef ::uintleast8_t uint_least8_t;\ntypedef ::uintfast8_t uint_fast8_t;\n\ntypedef ::intleast16_t int_least16_t;\ntypedef ::intfast16_t int_fast16_t;\ntypedef ::uintleast16_t uint_least16_t;\ntypedef ::uintfast16_t uint_fast16_t;\n\ntypedef ::intleast32_t int_least32_t;\ntypedef ::intfast32_t int_fast32_t;\ntypedef ::uintleast32_t uint_least32_t;\ntypedef ::uintfast32_t uint_fast32_t;\n\n# ifndef BOOST_NO_INT64_T\n\ntypedef ::intleast64_t int_least64_t;\ntypedef ::intfast64_t int_fast64_t;\ntypedef ::uintleast64_t uint_least64_t;\ntypedef ::uintfast64_t uint_fast64_t;\n\n# endif\n\n#endif\n\nnamespace boost\n{\n\n  using ::int8_t;\n  using ::int_least8_t;\n  using ::int_fast8_t;\n  using ::uint8_t;\n  using ::uint_least8_t;\n  using ::uint_fast8_t;\n\n  using ::int16_t;\n  using ::int_least16_t;\n  using ::int_fast16_t;\n  using ::uint16_t;\n  using ::uint_least16_t;\n  using ::uint_fast16_t;\n\n  using ::int32_t;\n  using ::int_least32_t;\n  using ::int_fast32_t;\n  using ::uint32_t;\n  using ::uint_least32_t;\n  using ::uint_fast32_t;\n\n# ifndef BOOST_NO_INT64_T\n\n  using ::int64_t;\n  using ::int_least64_t;\n  using ::int_fast64_t;\n  using ::uint64_t;\n  using ::uint_least64_t;\n  using ::uint_fast64_t;\n\n# endif\n\n  using ::intmax_t;\n  using ::uintmax_t;\n\n} // namespace boost\n\n#elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__) || defined(__VMS) || defined(__SOLARIS9__) || defined(__NetBSD__)\n// FreeBSD and Tru64 have an <inttypes.h> that contains much of what we need.\n# include <inttypes.h>\n\nnamespace boost {\n\n  using ::int8_t;\n  typedef int8_t int_least8_t;\n  typedef int8_t int_fast8_t;\n  using ::uint8_t;\n  typedef uint8_t uint_least8_t;\n  typedef uint8_t uint_fast8_t;\n\n  using ::int16_t;\n  typedef int16_t int_least16_t;\n  typedef int16_t int_fast16_t;\n  using ::uint16_t;\n  typedef uint16_t uint_least16_t;\n  typedef uint16_t uint_fast16_t;\n\n  using ::int32_t;\n  typedef int32_t int_least32_t;\n  typedef int32_t int_fast32_t;\n  using ::uint32_t;\n  typedef uint32_t uint_least32_t;\n  typedef uint32_t uint_fast32_t;\n\n# ifndef BOOST_NO_INT64_T\n\n  using ::int64_t;\n  typedef int64_t int_least64_t;\n  typedef int64_t int_fast64_t;\n  using ::uint64_t;\n  typedef uint64_t uint_least64_t;\n  typedef uint64_t uint_fast64_t;\n\n  typedef int64_t intmax_t;\n  typedef uint64_t uintmax_t;\n\n# else\n\n  typedef int32_t intmax_t;\n  typedef uint32_t uintmax_t;\n\n# endif\n\n} // namespace boost\n\n#else  // BOOST_HAS_STDINT_H\n\n# include <boost/limits.hpp> // implementation artifact; not part of interface\n# include <limits.h>         // needed for limits macros\n\n\nnamespace boost\n{\n\n//  These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit\n//  platforms.  For other systems, they will have to be hand tailored.\n//\n//  Because the fast types are assumed to be the same as the undecorated types,\n//  it may be possible to hand tailor a more efficient implementation.  Such\n//  an optimization may be illusionary; on the Intel x86-family 386 on, for\n//  example, byte arithmetic and load/stores are as fast as \"int\" sized ones.\n\n//  8-bit types  ------------------------------------------------------------//\n\n# if UCHAR_MAX == 0xff\n     typedef signed char     int8_t;\n     typedef signed char     int_least8_t;\n     typedef signed char     int_fast8_t;\n     typedef unsigned char   uint8_t;\n     typedef unsigned char   uint_least8_t;\n     typedef unsigned char   uint_fast8_t;\n# else\n#    error defaults not correct; you must hand modify boost/cstdint.hpp\n# endif\n\n//  16-bit types  -----------------------------------------------------------//\n\n# if USHRT_MAX == 0xffff\n#  if defined(__crayx1)\n     // The Cray X1 has a 16-bit short, however it is not recommend\n     // for use in performance critical code.\n     typedef short           int16_t;\n     typedef short           int_least16_t;\n     typedef int             int_fast16_t;\n     typedef unsigned short  uint16_t;\n     typedef unsigned short  uint_least16_t;\n     typedef unsigned int    uint_fast16_t;\n#  else\n     typedef short           int16_t;\n     typedef short           int_least16_t;\n     typedef short           int_fast16_t;\n     typedef unsigned short  uint16_t;\n     typedef unsigned short  uint_least16_t;\n     typedef unsigned short  uint_fast16_t;\n#  endif\n# elif (USHRT_MAX == 0xffffffff) && defined(__MTA__)\n      // On MTA / XMT short is 32 bits unless the -short16 compiler flag is specified\n      // MTA / XMT does support the following non-standard integer types\n      typedef __short16           int16_t;\n      typedef __short16           int_least16_t;\n      typedef __short16           int_fast16_t;\n      typedef unsigned __short16  uint16_t;\n      typedef unsigned __short16  uint_least16_t;\n      typedef unsigned __short16  uint_fast16_t;\n# elif (USHRT_MAX == 0xffffffff) && defined(CRAY)\n     // no 16-bit types on Cray:\n     typedef short           int_least16_t;\n     typedef short           int_fast16_t;\n     typedef unsigned short  uint_least16_t;\n     typedef unsigned short  uint_fast16_t;\n# else\n#    error defaults not correct; you must hand modify boost/cstdint.hpp\n# endif\n\n//  32-bit types  -----------------------------------------------------------//\n\n# if UINT_MAX == 0xffffffff\n     typedef int             int32_t;\n     typedef int             int_least32_t;\n     typedef int             int_fast32_t;\n     typedef unsigned int    uint32_t;\n     typedef unsigned int    uint_least32_t;\n     typedef unsigned int    uint_fast32_t;\n# elif (USHRT_MAX == 0xffffffff)\n     typedef short             int32_t;\n     typedef short             int_least32_t;\n     typedef short             int_fast32_t;\n     typedef unsigned short    uint32_t;\n     typedef unsigned short    uint_least32_t;\n     typedef unsigned short    uint_fast32_t;\n# elif ULONG_MAX == 0xffffffff\n     typedef long            int32_t;\n     typedef long            int_least32_t;\n     typedef long            int_fast32_t;\n     typedef unsigned long   uint32_t;\n     typedef unsigned long   uint_least32_t;\n     typedef unsigned long   uint_fast32_t;\n# elif (UINT_MAX == 0xffffffffffffffff) && defined(__MTA__)\n      // Integers are 64 bits on the MTA / XMT\n      typedef __int32           int32_t;\n      typedef __int32           int_least32_t;\n      typedef __int32           int_fast32_t;\n      typedef unsigned __int32  uint32_t;\n      typedef unsigned __int32  uint_least32_t;\n      typedef unsigned __int32  uint_fast32_t;\n# else\n#    error defaults not correct; you must hand modify boost/cstdint.hpp\n# endif\n\n//  64-bit types + intmax_t and uintmax_t  ----------------------------------//\n\n# if defined(BOOST_HAS_LONG_LONG) && \\\n   !defined(BOOST_MSVC) && !defined(__BORLANDC__) && \\\n   (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG)) && \\\n   (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))\n#    if defined(__hpux)\n     // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions\n#    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL)\n                                                                 // 2**64 - 1\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n\n     typedef  ::boost::long_long_type            intmax_t;\n     typedef  ::boost::ulong_long_type   uintmax_t;\n     typedef  ::boost::long_long_type            int64_t;\n     typedef  ::boost::long_long_type            int_least64_t;\n     typedef  ::boost::long_long_type            int_fast64_t;\n     typedef  ::boost::ulong_long_type   uint64_t;\n     typedef  ::boost::ulong_long_type   uint_least64_t;\n     typedef  ::boost::ulong_long_type   uint_fast64_t;\n\n# elif ULONG_MAX != 0xffffffff\n\n#    if ULONG_MAX == 18446744073709551615 // 2**64 - 1\n     typedef long                 intmax_t;\n     typedef unsigned long        uintmax_t;\n     typedef long                 int64_t;\n     typedef long                 int_least64_t;\n     typedef long                 int_fast64_t;\n     typedef unsigned long        uint64_t;\n     typedef unsigned long        uint_least64_t;\n     typedef unsigned long        uint_fast64_t;\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n# elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG)\n     __extension__ typedef long long            intmax_t;\n     __extension__ typedef unsigned long long   uintmax_t;\n     __extension__ typedef long long            int64_t;\n     __extension__ typedef long long            int_least64_t;\n     __extension__ typedef long long            int_fast64_t;\n     __extension__ typedef unsigned long long   uint64_t;\n     __extension__ typedef unsigned long long   uint_least64_t;\n     __extension__ typedef unsigned long long   uint_fast64_t;\n# elif defined(BOOST_HAS_MS_INT64)\n     //\n     // we have Borland/Intel/Microsoft __int64:\n     //\n     typedef __int64             intmax_t;\n     typedef unsigned __int64    uintmax_t;\n     typedef __int64             int64_t;\n     typedef __int64             int_least64_t;\n     typedef __int64             int_fast64_t;\n     typedef unsigned __int64    uint64_t;\n     typedef unsigned __int64    uint_least64_t;\n     typedef unsigned __int64    uint_fast64_t;\n# else // assume no 64-bit integers\n#  define BOOST_NO_INT64_T\n     typedef int32_t              intmax_t;\n     typedef uint32_t             uintmax_t;\n# endif\n\n} // namespace boost\n\n\n#endif // BOOST_HAS_STDINT_H\n\n// intptr_t/uintptr_t are defined separately because they are optional and not universally available\n#if defined(BOOST_WINDOWS) && !defined(_WIN32_WCE) && !defined(BOOST_HAS_STDINT_H)\n// Older MSVC don't have stdint.h and have intptr_t/uintptr_t defined in stddef.h\n#include <stddef.h>\n#endif\n\n// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.\n#if !defined(__PGIC__)\n\n#if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \\\n    || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \\\n    || defined(__CYGWIN__) \\\n    || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \\\n    || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(sun)\n\nnamespace boost {\n    using ::intptr_t;\n    using ::uintptr_t;\n}\n#define BOOST_HAS_INTPTR_T\n\n// Clang pretends to be GCC, so it'll match this condition\n#elif defined(__GNUC__) && defined(__INTPTR_TYPE__) && defined(__UINTPTR_TYPE__)\n\nnamespace boost {\n    typedef __INTPTR_TYPE__ intptr_t;\n    typedef __UINTPTR_TYPE__ uintptr_t;\n}\n#define BOOST_HAS_INTPTR_T\n\n#endif\n\n#endif // !defined(__PGIC__)\n\n#endif // BOOST_CSTDINT_HPP\n\n\n/****************************************************\n\nMacro definition section:\n\nAdded 23rd September 2000 (John Maddock).\nModified 11th September 2001 to be excluded when\nBOOST_HAS_STDINT_H is defined (John Maddock).\nModified 11th Dec 2009 to always define the\nINT#_C macros if they're not already defined (John Maddock).\n\n******************************************************/\n\n#if !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && \\\n   (!defined(INT8_C) || !defined(INT16_C) || !defined(INT32_C) || !defined(INT64_C))\n//\n// For the following code we get several warnings along the lines of:\n//\n// boost/cstdint.hpp:428:35: error: use of C99 long long integer constant\n//\n// So we declare this a system header to suppress these warnings.\n//\n#if defined(__GNUC__) && (__GNUC__ >= 4)\n#pragma GCC system_header\n#endif\n\n#include <limits.h>\n# define BOOST__STDC_CONSTANT_MACROS_DEFINED\n# if defined(BOOST_HAS_MS_INT64)\n//\n// Borland/Intel/Microsoft compilers have width specific suffixes:\n//\n#ifndef INT8_C\n#  define INT8_C(value)     value##i8\n#endif\n#ifndef INT16_C\n#  define INT16_C(value)    value##i16\n#endif\n#ifndef INT32_C\n#  define INT32_C(value)    value##i32\n#endif\n#ifndef INT64_C\n#  define INT64_C(value)    value##i64\n#endif\n#  ifdef __BORLANDC__\n    // Borland bug: appending ui8 makes the type a signed char\n#   define UINT8_C(value)    static_cast<unsigned char>(value##u)\n#  else\n#   define UINT8_C(value)    value##ui8\n#  endif\n#ifndef UINT16_C\n#  define UINT16_C(value)   value##ui16\n#endif\n#ifndef UINT32_C\n#  define UINT32_C(value)   value##ui32\n#endif\n#ifndef UINT64_C\n#  define UINT64_C(value)   value##ui64\n#endif\n#ifndef INTMAX_C\n#  define INTMAX_C(value)   value##i64\n#  define UINTMAX_C(value)  value##ui64\n#endif\n\n# else\n//  do it the old fashioned way:\n\n//  8-bit types  ------------------------------------------------------------//\n\n#  if (UCHAR_MAX == 0xff) && !defined(INT8_C)\n#   define INT8_C(value) static_cast<boost::int8_t>(value)\n#   define UINT8_C(value) static_cast<boost::uint8_t>(value##u)\n#  endif\n\n//  16-bit types  -----------------------------------------------------------//\n\n#  if (USHRT_MAX == 0xffff) && !defined(INT16_C)\n#   define INT16_C(value) static_cast<boost::int16_t>(value)\n#   define UINT16_C(value) static_cast<boost::uint16_t>(value##u)\n#  endif\n\n//  32-bit types  -----------------------------------------------------------//\n#ifndef INT32_C\n#  if (UINT_MAX == 0xffffffff)\n#   define INT32_C(value) value\n#   define UINT32_C(value) value##u\n#  elif ULONG_MAX == 0xffffffff\n#   define INT32_C(value) value##L\n#   define UINT32_C(value) value##uL\n#  endif\n#endif\n\n//  64-bit types + intmax_t and uintmax_t  ----------------------------------//\n#ifndef INT64_C\n#  if defined(BOOST_HAS_LONG_LONG) && \\\n    (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX) || defined(_ULLONG_MAX) || defined(_LLONG_MAX))\n\n#    if defined(__hpux)\n        // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions\n#       define INT64_C(value) value##LL\n#       define UINT64_C(value) value##uLL\n#    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) ||  \\\n        (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) ||  \\\n        (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL) || \\\n        (defined(_ULLONG_MAX) && _ULLONG_MAX == 18446744073709551615ULL) || \\\n        (defined(_LLONG_MAX) && _LLONG_MAX == 9223372036854775807LL)\n\n#       define INT64_C(value) value##LL\n#       define UINT64_C(value) value##uLL\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n#  elif ULONG_MAX != 0xffffffff\n\n#    if ULONG_MAX == 18446744073709551615U // 2**64 - 1\n#       define INT64_C(value) value##L\n#       define UINT64_C(value) value##uL\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n#  elif defined(BOOST_HAS_LONG_LONG)\n     // Usual macros not defined, work things out for ourselves:\n#    if(~0uLL == 18446744073709551615ULL)\n#       define INT64_C(value) value##LL\n#       define UINT64_C(value) value##uLL\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n#  else\n#    error defaults not correct; you must hand modify boost/cstdint.hpp\n#  endif\n\n#  ifdef BOOST_NO_INT64_T\n#   define INTMAX_C(value) INT32_C(value)\n#   define UINTMAX_C(value) UINT32_C(value)\n#  else\n#   define INTMAX_C(value) INT64_C(value)\n#   define UINTMAX_C(value) UINT64_C(value)\n#  endif\n#endif\n# endif // Borland/Microsoft specific width suffixes\n\n#endif // INT#_C macros.\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/current_function.hpp",
    "content": "#ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED\n#define BOOST_CURRENT_FUNCTION_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/current_function.hpp - BOOST_CURRENT_FUNCTION\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  http://www.boost.org/libs/assert/current_function.html\n//\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void current_function_helper()\n{\n\n#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__)\n\n# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__\n\n#elif defined(__DMC__) && (__DMC__ >= 0x810)\n\n# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__\n\n#elif defined(__FUNCSIG__)\n\n# define BOOST_CURRENT_FUNCTION __FUNCSIG__\n\n#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500))\n\n# define BOOST_CURRENT_FUNCTION __FUNCTION__\n\n#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)\n\n# define BOOST_CURRENT_FUNCTION __FUNC__\n\n#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)\n\n# define BOOST_CURRENT_FUNCTION __func__\n\n#elif defined(__cplusplus) && (__cplusplus >= 201103)\n\n# define BOOST_CURRENT_FUNCTION __func__\n\n#else\n\n# define BOOST_CURRENT_FUNCTION \"(unknown)\"\n\n#endif\n\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/algorithm.hpp",
    "content": "// (C) Copyright Jeremy Siek 2001.\n// Distributed under the Boost Software License, Version 1.0. (See accompany-\n// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n/*\n *\n * Copyright (c) 1994\n * Hewlett-Packard Company\n *\n * Permission to use, copy, modify, distribute and sell this software\n * and its documentation for any purpose is hereby granted without fee,\n * provided that the above copyright notice appear in all copies and\n * that both that copyright notice and this permission notice appear\n * in supporting documentation.  Hewlett-Packard Company makes no\n * representations about the suitability of this software for any\n * purpose.  It is provided \"as is\" without express or implied warranty.\n *\n *\n * Copyright (c) 1996\n * Silicon Graphics Computer Systems, Inc.\n *\n * Permission to use, copy, modify, distribute and sell this software\n * and its documentation for any purpose is hereby granted without fee,\n * provided that the above copyright notice appear in all copies and\n * that both that copyright notice and this permission notice appear\n * in supporting documentation.  Silicon Graphics makes no\n * representations about the suitability of this software for any\n * purpose.  It is provided \"as is\" without express or implied warranty.\n */\n\n#ifndef BOOST_ALGORITHM_HPP\n# define BOOST_ALGORITHM_HPP\n# include <boost/detail/iterator.hpp>\n// Algorithms on sequences\n//\n// The functions in this file have not yet gone through formal\n// review, and are subject to change. This is a work in progress.\n// They have been checked into the detail directory because\n// there are some graph algorithms that use these functions.\n\n#include <algorithm>\n#include <vector>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/algorithm/copy.hpp>\n#include <boost/range/algorithm/equal.hpp>\n#include <boost/range/algorithm/sort.hpp>\n#include <boost/range/algorithm/stable_sort.hpp>\n#include <boost/range/algorithm/find_if.hpp>\n#include <boost/range/algorithm/count.hpp>\n#include <boost/range/algorithm/count_if.hpp>\n#include <boost/range/algorithm_ext/is_sorted.hpp>\n#include <boost/range/algorithm_ext/iota.hpp>\n\nnamespace boost {\n\n  template <typename InputIterator, typename Predicate>\n  bool any_if(InputIterator first, InputIterator last, Predicate p)\n  {\n    return std::find_if(first, last, p) != last;\n  }\n\n  template <typename Container, typename Predicate>\n  bool any_if(const Container& c, Predicate p)\n  {\n    return any_if(boost::begin(c), boost::end(c), p);\n  }\n\n  template <typename InputIterator, typename T>\n  bool container_contains(InputIterator first, InputIterator last, T value)\n  {\n    return std::find(first, last, value) != last;\n  }\n  template <typename Container, typename T>\n  bool container_contains(const Container& c, const T& value)\n  {\n    return container_contains(boost::begin(c), boost::end(c), value);\n  }\n\n} // namespace boost\n\n#endif // BOOST_ALGORITHM_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/allocator_utilities.hpp",
    "content": "/* Copyright 2003-2013 Joaquin M Lopez Munoz.\n * Distributed under the Boost Software License, Version 1.0.\n * (See accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n *\n * See Boost website at http://www.boost.org/\n */\n\n#ifndef BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP\n#define BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP\n\n#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */\n#include <boost/detail/workaround.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <cstddef>\n#include <memory>\n#include <new>\n\nnamespace boost{\n\nnamespace detail{\n\n/* Allocator adaption layer. Some stdlibs provide allocators without rebind\n * and template ctors. These facilities are simulated with the external\n * template class rebind_to and the aid of partial_std_allocator_wrapper.\n */\n\nnamespace allocator{\n\n/* partial_std_allocator_wrapper inherits the functionality of a std\n * allocator while providing a templatized ctor and other bits missing\n * in some stdlib implementation or another.\n */\n\ntemplate<typename Type>\nclass partial_std_allocator_wrapper:public std::allocator<Type>\n{\npublic:\n  /* Oddly enough, STLport does not define std::allocator<void>::value_type\n   * when configured to work without partial template specialization.\n   * No harm in supplying the definition here unconditionally.\n   */\n\n  typedef Type value_type;\n\n  partial_std_allocator_wrapper(){};\n\n  template<typename Other>\n  partial_std_allocator_wrapper(const partial_std_allocator_wrapper<Other>&){}\n\n  partial_std_allocator_wrapper(const std::allocator<Type>& x):\n    std::allocator<Type>(x)\n  {\n  };\n\n#if defined(BOOST_DINKUMWARE_STDLIB)\n  /* Dinkumware guys didn't provide a means to call allocate() without\n   * supplying a hint, in disagreement with the standard.\n   */\n\n  Type* allocate(std::size_t n,const void* hint=0)\n  {\n    std::allocator<Type>& a=*this;\n    return a.allocate(n,hint);\n  }\n#endif\n\n};\n\n/* Detects whether a given allocator belongs to a defective stdlib not\n * having the required member templates.\n * Note that it does not suffice to check the Boost.Config stdlib\n * macros, as the user might have passed a custom, compliant allocator.\n * The checks also considers partial_std_allocator_wrapper to be\n * a standard defective allocator.\n */\n\n#if defined(BOOST_NO_STD_ALLOCATOR)&&\\\n  (defined(BOOST_HAS_PARTIAL_STD_ALLOCATOR)||defined(BOOST_DINKUMWARE_STDLIB))\n\ntemplate<typename Allocator>\nstruct is_partial_std_allocator\n{\n  BOOST_STATIC_CONSTANT(bool,\n    value=\n      (is_same<\n        std::allocator<BOOST_DEDUCED_TYPENAME Allocator::value_type>,\n        Allocator\n      >::value)||\n      (is_same<\n        partial_std_allocator_wrapper<\n          BOOST_DEDUCED_TYPENAME Allocator::value_type>,\n        Allocator\n      >::value));\n};\n\n#else\n\ntemplate<typename Allocator>\nstruct is_partial_std_allocator\n{\n  BOOST_STATIC_CONSTANT(bool,value=false);\n};\n\n#endif\n\n/* rebind operations for defective std allocators */\n\ntemplate<typename Allocator,typename Type>\nstruct partial_std_allocator_rebind_to\n{\n  typedef partial_std_allocator_wrapper<Type> type;\n};\n\n/* rebind operation in all other cases */\n\ntemplate<typename Allocator>\nstruct rebinder\n{\n  template<typename Type>\n  struct result\n  {\n      typedef typename Allocator::BOOST_NESTED_TEMPLATE \n          rebind<Type>::other other;\n  };\n};\n\ntemplate<typename Allocator,typename Type>\nstruct compliant_allocator_rebind_to\n{\n  typedef typename rebinder<Allocator>::\n      BOOST_NESTED_TEMPLATE result<Type>::other type;\n};\n\n/* rebind front-end */\n\ntemplate<typename Allocator,typename Type>\nstruct rebind_to:\n  mpl::eval_if_c<\n    is_partial_std_allocator<Allocator>::value,\n    partial_std_allocator_rebind_to<Allocator,Type>,\n    compliant_allocator_rebind_to<Allocator,Type>\n  >\n{\n};\n\n/* allocator-independent versions of construct and destroy */\n\ntemplate<typename Type>\nvoid construct(void* p,const Type& t)\n{\n  new (p) Type(t);\n}\n\n#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500))\n/* MSVC++ issues spurious warnings about unreferencend formal parameters\n * in destroy<Type> when Type is a class with trivial dtor.\n */\n\n#pragma warning(push)\n#pragma warning(disable:4100)  \n#endif\n\ntemplate<typename Type>\nvoid destroy(const Type* p)\n{\n\n#if BOOST_WORKAROUND(__SUNPRO_CC,BOOST_TESTED_AT(0x590))\n  const_cast<Type*>(p)->~Type();\n#else\n  p->~Type();\n#endif\n\n}\n\n#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500))\n#pragma warning(pop)\n#endif\n\n} /* namespace boost::detail::allocator */\n\n} /* namespace boost::detail */\n\n} /* namespace boost */\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/atomic_count.hpp",
    "content": "#ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED\n#define BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/atomic_count.hpp - thread/SMP safe reference counter\n//\n//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/smart_ptr/detail/atomic_count.hpp>\n\n#endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/atomic_redef_macros.hpp",
    "content": "// Copyright (C) 2013 Vicente J. Botet Escriba\n//\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n\n#if defined(BOOST_INTEL)\n\n#pragma pop_macro(\"atomic_compare_exchange\")\n#pragma pop_macro(\"atomic_compare_exchange_explicit\")\n#pragma pop_macro(\"atomic_exchange\")\n#pragma pop_macro(\"atomic_exchange_explicit\")\n#pragma pop_macro(\"atomic_is_lock_free\")\n#pragma pop_macro(\"atomic_load\")\n#pragma pop_macro(\"atomic_load_explicit\")\n#pragma pop_macro(\"atomic_store\")\n#pragma pop_macro(\"atomic_store_explicit\")\n\n#endif // #if defined(BOOST_INTEL)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/atomic_undef_macros.hpp",
    "content": "// Copyright (C) 2013 Vicente J. Botet Escriba\n//\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n\n#if defined(BOOST_INTEL)\n\n#pragma push_macro(\"atomic_compare_exchange\")\n#undef atomic_compare_exchange\n\n#pragma push_macro(\"atomic_compare_exchange_explicit\")\n#undef atomic_compare_exchange_explicit\n\n#pragma push_macro(\"atomic_exchange\")\n#undef atomic_exchange\n\n#pragma push_macro(\"atomic_exchange_explicit\")\n#undef atomic_exchange_explicit\n\n#pragma push_macro(\"atomic_is_lock_free\")\n#undef atomic_is_lock_free\n\n#pragma push_macro(\"atomic_load\")\n#undef atomic_load\n\n#pragma push_macro(\"atomic_load_explicit\")\n#undef atomic_load_explicit\n\n#pragma push_macro(\"atomic_store\")\n#undef atomic_store\n\n#pragma push_macro(\"atomic_store_explicit\")\n#undef atomic_store_explicit\n\n\n#endif // #if defined(BOOST_INTEL)\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/basic_pointerbuf.hpp",
    "content": "//-----------------------------------------------------------------------------\n// boost detail/templated_streams.hpp header file\n// See http://www.boost.org for updates, documentation, and revision history.\n//-----------------------------------------------------------------------------\n//\n// Copyright (c) 2013 John Maddock, Antony Polukhin\n// \n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_DETAIL_BASIC_POINTERBUF_HPP\n#define BOOST_DETAIL_BASIC_POINTERBUF_HPP\n\n// MS compatible compilers support #pragma once\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include \"boost/config.hpp\"\n#include <streambuf>\n\nnamespace boost { namespace detail {\n\n//\n// class basic_pointerbuf:\n// acts as a stream buffer which wraps around a pair of pointers:\n//\ntemplate <class charT, class BufferT >\nclass basic_pointerbuf : public BufferT {\nprotected:\n   typedef BufferT base_type;\n   typedef basic_pointerbuf<charT, BufferT> this_type;\n   typedef typename base_type::int_type int_type;\n   typedef typename base_type::char_type char_type;\n   typedef typename base_type::pos_type pos_type;\n   typedef ::std::streamsize streamsize;\n   typedef typename base_type::off_type off_type;\n\npublic:\n   basic_pointerbuf() : base_type() { setbuf(0, 0); }\n   const charT* getnext() { return this->gptr(); }\n\n#ifndef BOOST_NO_USING_TEMPLATE\n    using base_type::pptr;\n    using base_type::pbase;\n#else\n    charT* pptr() const { return base_type::pptr(); }\n    charT* pbase() const { return base_type::pbase(); }\n#endif\n\nprotected:\n   // VC mistakenly assumes that `setbuf` and other functions are not referenced.\n   // Marking those functions with `inline` suppresses the warnings.\n   // There must be no harm from marking virtual functions as inline: inline virtual\n   // call can be inlined ONLY when the compiler knows the \"exact class\".\n   inline base_type* setbuf(char_type* s, streamsize n);\n   inline typename this_type::pos_type seekpos(pos_type sp, ::std::ios_base::openmode which);\n   inline typename this_type::pos_type seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which);\n\nprivate:\n   basic_pointerbuf& operator=(const basic_pointerbuf&);\n   basic_pointerbuf(const basic_pointerbuf&);\n};\n\ntemplate<class charT, class BufferT>\nBufferT*\nbasic_pointerbuf<charT, BufferT>::setbuf(char_type* s, streamsize n)\n{\n   this->setg(s, s, s + n);\n   return this;\n}\n\ntemplate<class charT, class BufferT>\ntypename basic_pointerbuf<charT, BufferT>::pos_type\nbasic_pointerbuf<charT, BufferT>::seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which)\n{\n   typedef typename boost::int_t<sizeof(way) * CHAR_BIT>::least cast_type;\n\n   if(which & ::std::ios_base::out)\n      return pos_type(off_type(-1));\n   std::ptrdiff_t size = this->egptr() - this->eback();\n   std::ptrdiff_t pos = this->gptr() - this->eback();\n   charT* g = this->eback();\n   switch(static_cast<cast_type>(way))\n   {\n   case ::std::ios_base::beg:\n      if((off < 0) || (off > size))\n         return pos_type(off_type(-1));\n      else\n         this->setg(g, g + off, g + size);\n      break;\n   case ::std::ios_base::end:\n      if((off < 0) || (off > size))\n         return pos_type(off_type(-1));\n      else\n         this->setg(g, g + size - off, g + size);\n      break;\n   case ::std::ios_base::cur:\n   {\n      std::ptrdiff_t newpos = static_cast<std::ptrdiff_t>(pos + off);\n      if((newpos < 0) || (newpos > size))\n         return pos_type(off_type(-1));\n      else\n         this->setg(g, g + newpos, g + size);\n      break;\n   }\n   default: ;\n   }\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4244)\n#endif\n   return static_cast<pos_type>(this->gptr() - this->eback());\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n}\n\ntemplate<class charT, class BufferT>\ntypename basic_pointerbuf<charT, BufferT>::pos_type\nbasic_pointerbuf<charT, BufferT>::seekpos(pos_type sp, ::std::ios_base::openmode which)\n{\n   if(which & ::std::ios_base::out)\n      return pos_type(off_type(-1));\n   off_type size = static_cast<off_type>(this->egptr() - this->eback());\n   charT* g = this->eback();\n   if(off_type(sp) <= size)\n   {\n      this->setg(g, g + off_type(sp), g + size);\n   }\n   return pos_type(off_type(-1));\n}\n\n}} // namespace boost::detail\n\n#endif // BOOST_DETAIL_BASIC_POINTERBUF_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/binary_search.hpp",
    "content": "// Copyright (c)  2000 David Abrahams. \n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n// \n// Copyright (c) 1994\n// Hewlett-Packard Company\n// \n// Permission to use, copy, modify, distribute and sell this software\n// and its documentation for any purpose is hereby granted without fee,\n// provided that the above copyright notice appear in all copies and\n// that both that copyright notice and this permission notice appear\n// in supporting documentation.  Hewlett-Packard Company makes no\n// representations about the suitability of this software for any\n// purpose.  It is provided \"as is\" without express or implied warranty.\n// \n// Copyright (c) 1996\n// Silicon Graphics Computer Systems, Inc.\n// \n// Permission to use, copy, modify, distribute and sell this software\n// and its documentation for any purpose is hereby granted without fee,\n// provided that the above copyright notice appear in all copies and\n// that both that copyright notice and this permission notice appear\n// in supporting documentation.  Silicon Graphics makes no\n// representations about the suitability of this software for any\n// purpose.  It is provided \"as is\" without express or implied warranty.\n// \n#ifndef BINARY_SEARCH_DWA_122600_H_\n# define BINARY_SEARCH_DWA_122600_H_\n\n# include <boost/detail/iterator.hpp>\n# include <utility>\n\nnamespace boost { namespace detail {\n\ntemplate <class ForwardIter, class Tp>\nForwardIter lower_bound(ForwardIter first, ForwardIter last,\n                             const Tp& val) \n{\n    typedef detail::iterator_traits<ForwardIter> traits;\n    \n    typename traits::difference_type len = boost::detail::distance(first, last);\n    typename traits::difference_type half;\n    ForwardIter middle;\n\n    while (len > 0) {\n      half = len >> 1;\n      middle = first;\n      std::advance(middle, half);\n      if (*middle < val) {\n        first = middle;\n        ++first;\n        len = len - half - 1;\n      }\n      else\n        len = half;\n    }\n    return first;\n}\n\ntemplate <class ForwardIter, class Tp, class Compare>\nForwardIter lower_bound(ForwardIter first, ForwardIter last,\n                              const Tp& val, Compare comp)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (comp(*middle, val)) {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n    else\n      len = half;\n  }\n  return first;\n}\n\ntemplate <class ForwardIter, class Tp>\nForwardIter upper_bound(ForwardIter first, ForwardIter last,\n                           const Tp& val)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (val < *middle)\n      len = half;\n    else {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n  }\n  return first;\n}\n\ntemplate <class ForwardIter, class Tp, class Compare>\nForwardIter upper_bound(ForwardIter first, ForwardIter last,\n                           const Tp& val, Compare comp)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (comp(val, *middle))\n      len = half;\n    else {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n  }\n  return first;\n}\n\ntemplate <class ForwardIter, class Tp>\nstd::pair<ForwardIter, ForwardIter>\nequal_range(ForwardIter first, ForwardIter last, const Tp& val)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle, left, right;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (*middle < val) {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n    else if (val < *middle)\n      len = half;\n    else {\n      left = boost::detail::lower_bound(first, middle, val);\n      std::advance(first, len);\n      right = boost::detail::upper_bound(++middle, first, val);\n      return std::pair<ForwardIter, ForwardIter>(left, right);\n    }\n  }\n  return std::pair<ForwardIter, ForwardIter>(first, first);\n}\n\ntemplate <class ForwardIter, class Tp, class Compare>\nstd::pair<ForwardIter, ForwardIter>\nequal_range(ForwardIter first, ForwardIter last, const Tp& val,\n              Compare comp)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle, left, right;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (comp(*middle, val)) {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n    else if (comp(val, *middle))\n      len = half;\n    else {\n      left = boost::detail::lower_bound(first, middle, val, comp);\n      std::advance(first, len);\n      right = boost::detail::upper_bound(++middle, first, val, comp);\n      return std::pair<ForwardIter, ForwardIter>(left, right);\n    }\n  }\n  return std::pair<ForwardIter, ForwardIter>(first, first);\n}           \n\ntemplate <class ForwardIter, class Tp>\nbool binary_search(ForwardIter first, ForwardIter last,\n                   const Tp& val) {\n  ForwardIter i = boost::detail::lower_bound(first, last, val);\n  return i != last && !(val < *i);\n}\n\ntemplate <class ForwardIter, class Tp, class Compare>\nbool binary_search(ForwardIter first, ForwardIter last,\n                   const Tp& val,\n                   Compare comp) {\n  ForwardIter i = boost::detail::lower_bound(first, last, val, comp);\n  return i != last && !comp(val, *i);\n}\n\n}} // namespace boost::detail\n\n#endif // BINARY_SEARCH_DWA_122600_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/bitmask.hpp",
    "content": "//  boost/detail/bitmask.hpp  ------------------------------------------------//\n\n//  Copyright Beman Dawes 2006\n\n//  Distributed under the Boost Software License, Version 1.0\n//  http://www.boost.org/LICENSE_1_0.txt\n\n//  Usage:  enum foo { a=1, b=2, c=4 };\n//          BOOST_BITMASK( foo );\n//\n//          void f( foo arg );\n//          ...\n//          f( a | c );\n\n#ifndef BOOST_BITMASK_HPP\n#define BOOST_BITMASK_HPP\n\n#include <boost/cstdint.hpp>\n\n#define BOOST_BITMASK(Bitmask)                                            \\\n                                                                          \\\n  inline Bitmask operator| (Bitmask x , Bitmask y )                       \\\n  { return static_cast<Bitmask>( static_cast<boost::int_least32_t>(x)     \\\n      | static_cast<boost::int_least32_t>(y)); }                          \\\n                                                                          \\\n  inline Bitmask operator& (Bitmask x , Bitmask y )                       \\\n  { return static_cast<Bitmask>( static_cast<boost::int_least32_t>(x)     \\\n      & static_cast<boost::int_least32_t>(y)); }                          \\\n                                                                          \\\n  inline Bitmask operator^ (Bitmask x , Bitmask y )                       \\\n  { return static_cast<Bitmask>( static_cast<boost::int_least32_t>(x)     \\\n      ^ static_cast<boost::int_least32_t>(y)); }                          \\\n                                                                          \\\n  inline Bitmask operator~ (Bitmask x )                                   \\\n  { return static_cast<Bitmask>(~static_cast<boost::int_least32_t>(x)); } \\\n                                                                          \\\n  inline Bitmask & operator&=(Bitmask & x , Bitmask y)                    \\\n  { x = x & y ; return x ; }                                              \\\n                                                                          \\\n  inline Bitmask & operator|=(Bitmask & x , Bitmask y)                    \\\n  { x = x | y ; return x ; }                                              \\\n                                                                          \\\n  inline Bitmask & operator^=(Bitmask & x , Bitmask y)                    \\\n  { x = x ^ y ; return x ; }                                              \n\n#endif // BOOST_BITMASK_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/call_traits.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/utility for most recent version including documentation.\n\n// call_traits: defines typedefs for function usage\n// (see libs/utility/call_traits.htm)\n\n/* Release notes:\n   23rd July 2000:\n      Fixed array specialization. (JM)\n      Added Borland specific fixes for reference types\n      (issue raised by Steve Cleary).\n*/\n\n#ifndef BOOST_DETAIL_CALL_TRAITS_HPP\n#define BOOST_DETAIL_CALL_TRAITS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#include <boost/config.hpp>\n#endif\n#include <cstddef>\n\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost{\n\nnamespace detail{\n\ntemplate <typename T, bool small_>\nstruct ct_imp2\n{\n   typedef const T& param_type;\n};\n\ntemplate <typename T>\nstruct ct_imp2<T, true>\n{\n   typedef const T param_type;\n};\n\ntemplate <typename T, bool isp, bool b1, bool b2>\nstruct ct_imp\n{\n   typedef const T& param_type;\n};\n\ntemplate <typename T, bool isp, bool b2>\nstruct ct_imp<T, isp, true, b2>\n{\n   typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;\n};\n\ntemplate <typename T, bool isp, bool b1>\nstruct ct_imp<T, isp, b1, true>\n{\n   typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;\n};\n\ntemplate <typename T, bool b1, bool b2>\nstruct ct_imp<T, true, b1, b2>\n{\n   typedef const T param_type;\n};\n\n}\n\ntemplate <typename T>\nstruct call_traits\n{\npublic:\n   typedef T value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   //\n   // C++ Builder workaround: we should be able to define a compile time\n   // constant and pass that as a single template parameter to ct_imp<T,bool>,\n   // however compiler bugs prevent this - instead pass three bool's to\n   // ct_imp<T,bool,bool,bool> and add an extra partial specialisation\n   // of ct_imp to handle the logic. (JM)\n   typedef typename boost::detail::ct_imp<\n      T,\n      ::boost::is_pointer<T>::value,\n      ::boost::is_arithmetic<T>::value,\n      ::boost::is_enum<T>::value\n   >::param_type param_type;\n};\n\ntemplate <typename T>\nstruct call_traits<T&>\n{\n   typedef T& value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   typedef T& param_type;  // hh removed const\n};\n\n#if BOOST_WORKAROUND( __BORLANDC__,  < 0x5A0 )\n// these are illegal specialisations; cv-qualifies applied to\n// references have no effect according to [8.3.2p1],\n// C++ Builder requires them though as it treats cv-qualified\n// references as distinct types...\ntemplate <typename T>\nstruct call_traits<T&const>\n{\n   typedef T& value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   typedef T& param_type;  // hh removed const\n};\ntemplate <typename T>\nstruct call_traits<T&volatile>\n{\n   typedef T& value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   typedef T& param_type;  // hh removed const\n};\ntemplate <typename T>\nstruct call_traits<T&const volatile>\n{\n   typedef T& value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   typedef T& param_type;  // hh removed const\n};\n\ntemplate <typename T>\nstruct call_traits< T * >\n{\n   typedef T * value_type;\n   typedef T * & reference;\n   typedef T * const & const_reference;\n   typedef T * const param_type;  // hh removed const\n};\n#endif\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\ntemplate <typename T, std::size_t N>\nstruct call_traits<T [N]>\n{\nprivate:\n   typedef T array_type[N];\npublic:\n   // degrades array to pointer:\n   typedef const T* value_type;\n   typedef array_type& reference;\n   typedef const array_type& const_reference;\n   typedef const T* const param_type;\n};\n\ntemplate <typename T, std::size_t N>\nstruct call_traits<const T [N]>\n{\nprivate:\n   typedef const T array_type[N];\npublic:\n   // degrades array to pointer:\n   typedef const T* value_type;\n   typedef array_type& reference;\n   typedef const array_type& const_reference;\n   typedef const T* const param_type;\n};\n#endif\n\n}\n\n#endif // BOOST_DETAIL_CALL_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/catch_exceptions.hpp",
    "content": "//  boost/catch_exceptions.hpp -----------------------------------------------//\n\n//  Copyright Beman Dawes 1995-2001.  Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for documentation.\n\n//  Revision History\n//   13 Jun 01 report_exception() made inline. (John Maddock, Jesse Jones)\n//   26 Feb 01 Numerous changes suggested during formal review. (Beman)\n//   25 Jan 01 catch_exceptions.hpp code factored out of cpp_main.cpp.\n//   22 Jan 01 Remove test_tools dependencies to reduce coupling.\n//    5 Nov 00 Initial boost version (Beman Dawes)\n\n#ifndef BOOST_CATCH_EXCEPTIONS_HPP\n#define BOOST_CATCH_EXCEPTIONS_HPP\n\n//  header dependencies are deliberately restricted to the standard library\n//  to reduce coupling to other boost libraries.\n#include <string>             // for string\n#include <new>                // for bad_alloc\n#include <typeinfo>           // for bad_cast, bad_typeid\n#include <exception>          // for exception, bad_exception\n#include <stdexcept>          // for std exception hierarchy\n#include <boost/cstdlib.hpp>  // for exit codes\n#include <ostream>         // for ostream\n\n# if defined(__BORLANDC__) && (__BORLANDC__ <= 0x0551)\n#   define BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT \n# endif\n\n#if defined(MPW_CPLUS) && (MPW_CPLUS <= 0x890)\n#   define BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT \n    namespace std { class bad_typeid { }; }\n# endif\n\nnamespace boost\n{\n\n  namespace detail\n  {\n    //  A separate reporting function was requested during formal review.\n    inline void report_exception( std::ostream & os, \n                                  const char * name, const char * info )\n      { os << \"\\n** uncaught exception: \" << name << \" \" << info << std::endl; }\n  }\n\n  //  catch_exceptions  ------------------------------------------------------//\n\n  template< class Generator >  // Generator is function object returning int\n  int catch_exceptions( Generator function_object,\n                        std::ostream & out, std::ostream & err )\n  {\n    int result = 0;               // quiet compiler warnings\n    bool exception_thrown = true; // avoid setting result for each excptn type\n\n#ifndef BOOST_NO_EXCEPTIONS\n    try\n    {\n#endif\n      result = function_object();\n      exception_thrown = false;\n#ifndef BOOST_NO_EXCEPTIONS\n    }\n\n    //  As a result of hard experience with strangely interleaved output\n    //  under some compilers, there is a lot of use of endl in the code below\n    //  where a simple '\\n' might appear to do.\n\n    //  The rules for catch & arguments are a bit different from function \n    //  arguments (ISO 15.3 paragraphs 18 & 19). Apparently const isn't\n    //  required, but it doesn't hurt and some programmers ask for it.\n\n    catch ( const char * ex )\n      { detail::report_exception( out, \"\", ex ); }\n    catch ( const std::string & ex )\n      { detail::report_exception( out, \"\", ex.c_str() ); }\n\n    //  std:: exceptions\n    catch ( const std::bad_alloc & ex )\n      { detail::report_exception( out, \"std::bad_alloc:\", ex.what() ); }\n\n# ifndef BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT\n    catch ( const std::bad_cast & ex )\n      { detail::report_exception( out, \"std::bad_cast:\", ex.what() ); }\n    catch ( const std::bad_typeid & ex )\n      { detail::report_exception( out, \"std::bad_typeid:\", ex.what() ); }\n# else\n    catch ( const std::bad_cast & )\n      { detail::report_exception( out, \"std::bad_cast\", \"\" ); }\n    catch ( const std::bad_typeid & )\n      { detail::report_exception( out, \"std::bad_typeid\", \"\" ); }\n# endif\n\n    catch ( const std::bad_exception & ex )\n      { detail::report_exception( out, \"std::bad_exception:\", ex.what() ); }\n    catch ( const std::domain_error & ex )\n      { detail::report_exception( out, \"std::domain_error:\", ex.what() ); }\n    catch ( const std::invalid_argument & ex )\n      { detail::report_exception( out, \"std::invalid_argument:\", ex.what() ); }\n    catch ( const std::length_error & ex )\n      { detail::report_exception( out, \"std::length_error:\", ex.what() ); }\n    catch ( const std::out_of_range & ex )\n      { detail::report_exception( out, \"std::out_of_range:\", ex.what() ); }\n    catch ( const std::range_error & ex )\n      { detail::report_exception( out, \"std::range_error:\", ex.what() ); }\n    catch ( const std::overflow_error & ex )\n      { detail::report_exception( out, \"std::overflow_error:\", ex.what() ); }\n    catch ( const std::underflow_error & ex )\n      { detail::report_exception( out, \"std::underflow_error:\", ex.what() ); }\n    catch ( const std::logic_error & ex )\n      { detail::report_exception( out, \"std::logic_error:\", ex.what() ); }\n    catch ( const std::runtime_error & ex )\n      { detail::report_exception( out, \"std::runtime_error:\", ex.what() ); }\n    catch ( const std::exception & ex )\n      { detail::report_exception( out, \"std::exception:\", ex.what() ); }\n\n    catch ( ... )\n      { detail::report_exception( out, \"unknown exception\", \"\" ); }\n#endif // BOOST_NO_EXCEPTIONS\n\n    if ( exception_thrown ) result = boost::exit_exception_failure;\n\n    if ( result != 0 && result != exit_success )\n    {\n      out << std::endl << \"**** returning with error code \"\n                << result << std::endl;\n      err\n        << \"**********  errors detected; see stdout for details  ***********\"\n        << std::endl;\n    }\n#if !defined(BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE)\n    else { out << std::flush << \"no errors detected\" << std::endl; }\n#endif\n    return result;\n  } // catch_exceptions\n\n} // boost\n\n#endif  // BOOST_CATCH_EXCEPTIONS_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/compressed_pair.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/utility for most recent version including documentation.\n\n// compressed_pair: pair that \"compresses\" empty members\n// (see libs/utility/doc/html/compressed_pair.html)\n//\n// JM changes 25 Jan 2004:\n// For the case where T1 == T2 and both are empty, then first() and second()\n// should return different objects.\n// JM changes 25 Jan 2000:\n// Removed default arguments from compressed_pair_switch to get\n// C++ Builder 4 to accept them\n// rewriten swap to get gcc and C++ builder to compile.\n// added partial specialisations for case T1 == T2 to avoid duplicate constructor defs.\n\n#ifndef BOOST_DETAIL_COMPRESSED_PAIR_HPP\n#define BOOST_DETAIL_COMPRESSED_PAIR_HPP\n\n#include <algorithm>\n\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_empty.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/call_traits.hpp>\n\n#ifdef BOOST_MSVC\n# pragma warning(push)\n# pragma warning(disable:4512)\n#endif \nnamespace boost\n{\n\ntemplate <class T1, class T2>\nclass compressed_pair;\n\n\n// compressed_pair\n\nnamespace details\n{\n   // JM altered 26 Jan 2000:\n   template <class T1, class T2, bool IsSame, bool FirstEmpty, bool SecondEmpty>\n   struct compressed_pair_switch;\n\n   template <class T1, class T2>\n   struct compressed_pair_switch<T1, T2, false, false, false>\n      {static const int value = 0;};\n\n   template <class T1, class T2>\n   struct compressed_pair_switch<T1, T2, false, true, true>\n      {static const int value = 3;};\n\n   template <class T1, class T2>\n   struct compressed_pair_switch<T1, T2, false, true, false>\n      {static const int value = 1;};\n\n   template <class T1, class T2>\n   struct compressed_pair_switch<T1, T2, false, false, true>\n      {static const int value = 2;};\n\n   template <class T1, class T2>\n   struct compressed_pair_switch<T1, T2, true, true, true>\n      {static const int value = 4;};\n\n   template <class T1, class T2>\n   struct compressed_pair_switch<T1, T2, true, false, false>\n      {static const int value = 5;};\n\n   template <class T1, class T2, int Version> class compressed_pair_imp;\n\n#ifdef __GNUC__\n   // workaround for GCC (JM):\n   using std::swap;\n#endif\n   //\n   // can't call unqualified swap from within classname::swap\n   // as Koenig lookup rules will find only the classname::swap\n   // member function not the global declaration, so use cp_swap\n   // as a forwarding function (JM):\n   template <typename T>\n   inline void cp_swap(T& t1, T& t2)\n   {\n#ifndef __GNUC__\n      using std::swap;\n#endif\n      swap(t1, t2);\n   }\n\n   // 0    derive from neither\n\n   template <class T1, class T2>\n   class compressed_pair_imp<T1, T2, 0>\n   {\n   public:\n      typedef T1                                                 first_type;\n      typedef T2                                                 second_type;\n      typedef typename call_traits<first_type>::param_type       first_param_type;\n      typedef typename call_traits<second_type>::param_type      second_param_type;\n      typedef typename call_traits<first_type>::reference        first_reference;\n      typedef typename call_traits<second_type>::reference       second_reference;\n      typedef typename call_traits<first_type>::const_reference  first_const_reference;\n      typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n      compressed_pair_imp() {} \n\n      compressed_pair_imp(first_param_type x, second_param_type y)\n         : first_(x), second_(y) {}\n\n      compressed_pair_imp(first_param_type x)\n         : first_(x) {}\n\n      compressed_pair_imp(second_param_type y)\n         : second_(y) {}\n\n      first_reference       first()       {return first_;}\n      first_const_reference first() const {return first_;}\n\n      second_reference       second()       {return second_;}\n      second_const_reference second() const {return second_;}\n\n      void swap(::boost::compressed_pair<T1, T2>& y)\n      {\n         cp_swap(first_, y.first());\n         cp_swap(second_, y.second());\n      }\n   private:\n      first_type first_;\n      second_type second_;\n   };\n\n   // 1    derive from T1\n\n   template <class T1, class T2>\n   class compressed_pair_imp<T1, T2, 1>\n      : protected ::boost::remove_cv<T1>::type\n   {\n   public:\n      typedef T1                                                 first_type;\n      typedef T2                                                 second_type;\n      typedef typename call_traits<first_type>::param_type       first_param_type;\n      typedef typename call_traits<second_type>::param_type      second_param_type;\n      typedef typename call_traits<first_type>::reference        first_reference;\n      typedef typename call_traits<second_type>::reference       second_reference;\n      typedef typename call_traits<first_type>::const_reference  first_const_reference;\n      typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n      compressed_pair_imp() {}\n\n      compressed_pair_imp(first_param_type x, second_param_type y)\n         : first_type(x), second_(y) {}\n\n      compressed_pair_imp(first_param_type x)\n         : first_type(x) {}\n\n      compressed_pair_imp(second_param_type y)\n         : second_(y) {}\n\n      first_reference       first()       {return *this;}\n      first_const_reference first() const {return *this;}\n\n      second_reference       second()       {return second_;}\n      second_const_reference second() const {return second_;}\n\n      void swap(::boost::compressed_pair<T1,T2>& y)\n      {\n         // no need to swap empty base class:\n         cp_swap(second_, y.second());\n      }\n   private:\n      second_type second_;\n   };\n\n   // 2    derive from T2\n\n   template <class T1, class T2>\n   class compressed_pair_imp<T1, T2, 2>\n      : protected ::boost::remove_cv<T2>::type\n   {\n   public:\n      typedef T1                                                 first_type;\n      typedef T2                                                 second_type;\n      typedef typename call_traits<first_type>::param_type       first_param_type;\n      typedef typename call_traits<second_type>::param_type      second_param_type;\n      typedef typename call_traits<first_type>::reference        first_reference;\n      typedef typename call_traits<second_type>::reference       second_reference;\n      typedef typename call_traits<first_type>::const_reference  first_const_reference;\n      typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n      compressed_pair_imp() {}\n\n      compressed_pair_imp(first_param_type x, second_param_type y)\n         : second_type(y), first_(x) {}\n\n      compressed_pair_imp(first_param_type x)\n         : first_(x) {}\n\n      compressed_pair_imp(second_param_type y)\n         : second_type(y) {}\n\n      first_reference       first()       {return first_;}\n      first_const_reference first() const {return first_;}\n\n      second_reference       second()       {return *this;}\n      second_const_reference second() const {return *this;}\n\n      void swap(::boost::compressed_pair<T1,T2>& y)\n      {\n         // no need to swap empty base class:\n         cp_swap(first_, y.first());\n      }\n\n   private:\n      first_type first_;\n   };\n\n   // 3    derive from T1 and T2\n\n   template <class T1, class T2>\n   class compressed_pair_imp<T1, T2, 3>\n      : protected ::boost::remove_cv<T1>::type,\n        protected ::boost::remove_cv<T2>::type\n   {\n   public:\n      typedef T1                                                 first_type;\n      typedef T2                                                 second_type;\n      typedef typename call_traits<first_type>::param_type       first_param_type;\n      typedef typename call_traits<second_type>::param_type      second_param_type;\n      typedef typename call_traits<first_type>::reference        first_reference;\n      typedef typename call_traits<second_type>::reference       second_reference;\n      typedef typename call_traits<first_type>::const_reference  first_const_reference;\n      typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n      compressed_pair_imp() {}\n\n      compressed_pair_imp(first_param_type x, second_param_type y)\n         : first_type(x), second_type(y) {}\n\n      compressed_pair_imp(first_param_type x)\n         : first_type(x) {}\n\n      compressed_pair_imp(second_param_type y)\n         : second_type(y) {}\n\n      first_reference       first()       {return *this;}\n      first_const_reference first() const {return *this;}\n\n      second_reference       second()       {return *this;}\n      second_const_reference second() const {return *this;}\n      //\n      // no need to swap empty bases:\n      void swap(::boost::compressed_pair<T1,T2>&) {}\n   };\n\n   // JM\n   // 4    T1 == T2, T1 and T2 both empty\n   //      Originally this did not store an instance of T2 at all\n   //      but that led to problems beause it meant &x.first() == &x.second()\n   //      which is not true for any other kind of pair, so now we store an instance\n   //      of T2 just in case the user is relying on first() and second() returning\n   //      different objects (albeit both empty).\n   template <class T1, class T2>\n   class compressed_pair_imp<T1, T2, 4>\n      : protected ::boost::remove_cv<T1>::type\n   {\n   public:\n      typedef T1                                                 first_type;\n      typedef T2                                                 second_type;\n      typedef typename call_traits<first_type>::param_type       first_param_type;\n      typedef typename call_traits<second_type>::param_type      second_param_type;\n      typedef typename call_traits<first_type>::reference        first_reference;\n      typedef typename call_traits<second_type>::reference       second_reference;\n      typedef typename call_traits<first_type>::const_reference  first_const_reference;\n      typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n      compressed_pair_imp() {}\n\n      compressed_pair_imp(first_param_type x, second_param_type y)\n         : first_type(x), m_second(y) {}\n\n      compressed_pair_imp(first_param_type x)\n         : first_type(x), m_second(x) {}\n\n      first_reference       first()       {return *this;}\n      first_const_reference first() const {return *this;}\n\n      second_reference       second()       {return m_second;}\n      second_const_reference second() const {return m_second;}\n\n      void swap(::boost::compressed_pair<T1,T2>&) {}\n   private:\n      T2 m_second;\n   };\n\n   // 5    T1 == T2 and are not empty:   //JM\n\n   template <class T1, class T2>\n   class compressed_pair_imp<T1, T2, 5>\n   {\n   public:\n      typedef T1                                                 first_type;\n      typedef T2                                                 second_type;\n      typedef typename call_traits<first_type>::param_type       first_param_type;\n      typedef typename call_traits<second_type>::param_type      second_param_type;\n      typedef typename call_traits<first_type>::reference        first_reference;\n      typedef typename call_traits<second_type>::reference       second_reference;\n      typedef typename call_traits<first_type>::const_reference  first_const_reference;\n      typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n      compressed_pair_imp() {}\n\n      compressed_pair_imp(first_param_type x, second_param_type y)\n         : first_(x), second_(y) {}\n\n      compressed_pair_imp(first_param_type x)\n         : first_(x), second_(x) {}\n\n      first_reference       first()       {return first_;}\n      first_const_reference first() const {return first_;}\n\n      second_reference       second()       {return second_;}\n      second_const_reference second() const {return second_;}\n\n      void swap(::boost::compressed_pair<T1, T2>& y)\n      {\n         cp_swap(first_, y.first());\n         cp_swap(second_, y.second());\n      }\n   private:\n      first_type first_;\n      second_type second_;\n   };\n\n}  // details\n\ntemplate <class T1, class T2>\nclass compressed_pair\n   : private ::boost::details::compressed_pair_imp<T1, T2,\n             ::boost::details::compressed_pair_switch<\n                    T1,\n                    T2,\n                    ::boost::is_same<typename remove_cv<T1>::type, typename remove_cv<T2>::type>::value,\n                    ::boost::is_empty<T1>::value,\n                    ::boost::is_empty<T2>::value>::value>\n{\nprivate:\n   typedef details::compressed_pair_imp<T1, T2,\n             ::boost::details::compressed_pair_switch<\n                    T1,\n                    T2,\n                    ::boost::is_same<typename remove_cv<T1>::type, typename remove_cv<T2>::type>::value,\n                    ::boost::is_empty<T1>::value,\n                    ::boost::is_empty<T2>::value>::value> base;\npublic:\n   typedef T1                                                 first_type;\n   typedef T2                                                 second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair() : base() {}\n            compressed_pair(first_param_type x, second_param_type y) : base(x, y) {}\n   explicit compressed_pair(first_param_type x) : base(x) {}\n   explicit compressed_pair(second_param_type y) : base(y) {}\n\n   first_reference       first()       {return base::first();}\n   first_const_reference first() const {return base::first();}\n\n   second_reference       second()       {return base::second();}\n   second_const_reference second() const {return base::second();}\n\n   void swap(compressed_pair& y) { base::swap(y); }\n};\n\n// JM\n// Partial specialisation for case where T1 == T2:\n//\ntemplate <class T>\nclass compressed_pair<T, T>\n   : private details::compressed_pair_imp<T, T,\n             ::boost::details::compressed_pair_switch<\n                    T,\n                    T,\n                    ::boost::is_same<typename remove_cv<T>::type, typename remove_cv<T>::type>::value,\n                    ::boost::is_empty<T>::value,\n                    ::boost::is_empty<T>::value>::value>\n{\nprivate:\n   typedef details::compressed_pair_imp<T, T,\n             ::boost::details::compressed_pair_switch<\n                    T,\n                    T,\n                    ::boost::is_same<typename remove_cv<T>::type, typename remove_cv<T>::type>::value,\n                    ::boost::is_empty<T>::value,\n                    ::boost::is_empty<T>::value>::value> base;\npublic:\n   typedef T                                                  first_type;\n   typedef T                                                  second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair() : base() {}\n            compressed_pair(first_param_type x, second_param_type y) : base(x, y) {}\n#if !(defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530))\n   explicit \n#endif\n      compressed_pair(first_param_type x) : base(x) {}\n\n   first_reference       first()       {return base::first();}\n   first_const_reference first() const {return base::first();}\n\n   second_reference       second()       {return base::second();}\n   second_const_reference second() const {return base::second();}\n\n   void swap(::boost::compressed_pair<T,T>& y) { base::swap(y); }\n};\n\ntemplate <class T1, class T2>\ninline\nvoid\nswap(compressed_pair<T1, T2>& x, compressed_pair<T1, T2>& y)\n{\n   x.swap(y);\n}\n\n} // boost\n\n#ifdef BOOST_MSVC\n# pragma warning(pop)\n#endif \n\n#endif // BOOST_DETAIL_COMPRESSED_PAIR_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/container_fwd.hpp",
    "content": "\n// Copyright 2005-2011 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n// Note: if you change this include guard, you also need to change\n// container_fwd_compile_fail.cpp\n#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP)\n#define BOOST_DETAIL_CONTAINER_FWD_HPP\n\n#if defined(_MSC_VER) && \\\n    !defined(BOOST_DETAIL_TEST_CONFIG_ONLY)\n# pragma once\n#endif\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n////////////////////////////////////////////////////////////////////////////////\n//                                                                            //\n// Define BOOST_DETAIL_NO_CONTAINER_FWD if you don't want this header to      //\n// forward declare standard containers.                                       //\n//                                                                            //\n// BOOST_DETAIL_CONTAINER_FWD to make it foward declare containers even if it //\n// normally doesn't.                                                          //\n//                                                                            //\n// BOOST_DETAIL_NO_CONTAINER_FWD overrides BOOST_DETAIL_CONTAINER_FWD.        //\n//                                                                            //\n////////////////////////////////////////////////////////////////////////////////\n\n#if !defined(BOOST_DETAIL_NO_CONTAINER_FWD)\n#  if defined(BOOST_DETAIL_CONTAINER_FWD)\n     // Force forward declarations.\n#  elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)\n     // STLport\n#    define BOOST_DETAIL_NO_CONTAINER_FWD\n#  elif defined(__LIBCOMO__)\n     // Comeau STL:\n#    define BOOST_DETAIL_NO_CONTAINER_FWD\n#  elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)\n     // Rogue Wave library:\n#    define BOOST_DETAIL_NO_CONTAINER_FWD\n#  elif defined(_LIBCPP_VERSION)\n     // libc++\n#    define BOOST_DETAIL_NO_CONTAINER_FWD\n#  elif defined(__GLIBCPP__) || defined(__GLIBCXX__)\n     // GNU libstdc++ 3\n     //\n     // Disable forwarding for all recent versions, as the library has a\n     // versioned namespace mode, and I don't know how to detect it.\n#    if __GLIBCXX__ >= 20070513 \\\n        || defined(_GLIBCXX_DEBUG) \\\n        || defined(_GLIBCXX_PARALLEL) \\\n        || defined(_GLIBCXX_PROFILE)\n#      define BOOST_DETAIL_NO_CONTAINER_FWD\n#    else\n#      if defined(__GLIBCXX__) && __GLIBCXX__ >= 20040530\n#        define BOOST_CONTAINER_FWD_COMPLEX_STRUCT\n#      endif\n#    endif\n#  elif defined(__STL_CONFIG_H)\n     // generic SGI STL\n     //\n     // Forward declaration seems to be okay, but it has a couple of odd\n     // implementations.\n#    define BOOST_CONTAINER_FWD_BAD_BITSET\n#    if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG)\n#      define BOOST_CONTAINER_FWD_BAD_DEQUE\n#     endif\n#  elif defined(__MSL_CPP__)\n     // MSL standard lib:\n#    define BOOST_DETAIL_NO_CONTAINER_FWD\n#  elif defined(__IBMCPP__)\n     // The default VACPP std lib, forward declaration seems to be fine.\n#  elif defined(MSIPL_COMPILE_H)\n     // Modena C++ standard library\n#    define BOOST_DETAIL_NO_CONTAINER_FWD\n#  elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)\n     // Dinkumware Library (this has to appear after any possible replacement\n     // libraries)\n#  else\n#    define BOOST_DETAIL_NO_CONTAINER_FWD\n#  endif\n#endif\n\n#if !defined(BOOST_DETAIL_TEST_CONFIG_ONLY)\n\n#if defined(BOOST_DETAIL_NO_CONTAINER_FWD) && \\\n    !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD)\n\n#include <deque>\n#include <list>\n#include <vector>\n#include <map>\n#include <set>\n#include <bitset>\n#include <string>\n#include <complex>\n\n#else\n\n#include <cstddef>\n\n#if defined(BOOST_CONTAINER_FWD_BAD_DEQUE)\n#include <deque>\n#endif\n\n#if defined(BOOST_CONTAINER_FWD_BAD_BITSET)\n#include <bitset>\n#endif\n\n#if defined(BOOST_MSVC)\n#pragma warning(push)\n#pragma warning(disable:4099) // struct/class mismatch in fwd declarations\n#endif\n\nnamespace std\n{\n    template <class T> class allocator;\n    template <class charT, class traits, class Allocator> class basic_string;\n\n    template <class charT> struct char_traits;\n\n#if defined(BOOST_CONTAINER_FWD_COMPLEX_STRUCT)\n    template <class T> struct complex;\n#else\n    template <class T> class complex;\n#endif\n\n#if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE)\n    template <class T, class Allocator> class deque;\n#endif\n\n    template <class T, class Allocator> class list;\n    template <class T, class Allocator> class vector;\n    template <class Key, class T, class Compare, class Allocator> class map;\n    template <class Key, class T, class Compare, class Allocator>\n    class multimap;\n    template <class Key, class Compare, class Allocator> class set;\n    template <class Key, class Compare, class Allocator> class multiset;\n\n#if !defined(BOOST_CONTAINER_FWD_BAD_BITSET)\n    template <size_t N> class bitset;\n#endif\n    template <class T1, class T2> struct pair;\n}\n\n#if defined(BOOST_MSVC)\n#pragma warning(pop)\n#endif\n\n#endif // BOOST_DETAIL_NO_CONTAINER_FWD &&\n       // !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD)\n\n#endif // BOOST_DETAIL_TEST_CONFIG_ONLY\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/dynamic_bitset.hpp",
    "content": "// -----------------------------------------------------------\n//\n//   Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek\n//        Copyright (c) 2003-2006, 2008 Gennaro Prota\n//\n// Copyright (c) 2014 Glen Joseph Fernandes\n// glenfe at live dot com\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n//\n// -----------------------------------------------------------\n\n#ifndef BOOST_DETAIL_DYNAMIC_BITSET_HPP\n#define BOOST_DETAIL_DYNAMIC_BITSET_HPP\n\n#include <memory>\n#include <cstddef>\n#include \"boost/config.hpp\"\n#include \"boost/detail/workaround.hpp\"\n\n\nnamespace boost {\n\n  namespace detail {\n  namespace dynamic_bitset_impl {\n\n    // Gives (read-)access to the object representation\n    // of an object of type T (3.9p4). CANNOT be used\n    // on a base sub-object\n    //\n    template <typename T>\n    inline const unsigned char * object_representation (T* p)\n    {\n        return static_cast<const unsigned char *>(static_cast<const void *>(p));\n    }\n\n    template<typename T, int amount, int width /* = default */>\n    struct shifter\n    {\n        static void left_shift(T & v) {\n            amount >= width ? (v = 0)\n                : (v >>= BOOST_DYNAMIC_BITSET_WRAP_CONSTANT(amount));\n        }\n    };\n\n    // ------- count function implementation --------------\n\n    typedef unsigned char byte_type;\n\n    // These two entities\n    //\n    //     enum mode { access_by_bytes, access_by_blocks };\n    //     template <mode> struct mode_to_type {};\n    //\n    // were removed, since the regression logs (as of 24 Aug 2008)\n    // showed that several compilers had troubles with recognizing\n    //\n    //   const mode m = access_by_bytes\n    //\n    // as a constant expression\n    //\n    // * So, we'll use bool, instead of enum *.\n    //\n    template <bool value>\n    struct value_to_type\n    {\n        value_to_type() {}\n    };\n    const bool access_by_bytes = true;\n    const bool access_by_blocks = false;\n\n\n    // the table: wrapped in a class template, so\n    // that it is only instantiated if/when needed\n    //\n    template <bool dummy_name = true>\n    struct count_table { static const byte_type table[]; };\n\n    template <>\n    struct count_table<false> { /* no table */ };\n\n\n     const unsigned int table_width = 8;\n     template <bool b>\n     const byte_type count_table<b>::table[] =\n     {\n       // Automatically generated by GPTableGen.exe v.1.0\n       //\n     0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n     1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n     1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n     2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n     1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n     2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n     2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n     3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8\n     };\n\n\n     // overload for access by bytes\n     //\n\n     template <typename Iterator>\n     inline std::size_t do_count(Iterator first, std::size_t length,\n                                 int /*dummy param*/,\n                                 value_to_type<access_by_bytes>* )\n     {\n         std::size_t num = 0;\n         if (length)\n         {\n             const byte_type * p = object_representation(&*first);\n             length *= sizeof(*first);\n\n              do {\n                 num += count_table<>::table[*p];\n                 ++p;\n                 --length;\n\n             } while (length);\n         }\n\n         return num;\n     }\n\n\n     // overload for access by blocks\n     //\n     template <typename Iterator, typename ValueType>\n     inline std::size_t do_count(Iterator first, std::size_t length, ValueType,\n                                 value_to_type<access_by_blocks>*)\n     {\n         std::size_t num = 0;\n         while (length){\n\n             ValueType value = *first;\n             while (value) {\n                 num += count_table<>::table[value & ((1u<<table_width) - 1)];\n                 value >>= table_width;\n             }\n\n             ++first;\n             --length;\n         }\n\n         return num;\n     }\n\n    // -------------------------------------------------------\n\n\n    // Some library implementations simply return a dummy\n    // value such as\n    //\n    //   size_type(-1) / sizeof(T)\n    //\n    // from vector<>::max_size. This tries to get more\n    // meaningful info.\n    //\n    template <typename T>\n    inline typename T::size_type vector_max_size_workaround(const T & v)\n        BOOST_NOEXCEPT\n    {\n        typedef typename T::allocator_type allocator_type;\n\n        const allocator_type& alloc = v.get_allocator();\n\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n        typedef std::allocator_traits<allocator_type> allocator_traits;\n\n        const typename allocator_traits::size_type alloc_max =\n            allocator_traits::max_size(alloc);\n#else\n        const typename allocator_type::size_type alloc_max = alloc.max_size();\n#endif\n\n        const typename T::size_type container_max = v.max_size();\n\n        return alloc_max < container_max ? alloc_max : container_max;\n    }\n\n    // for static_asserts\n    template <typename T>\n    struct allowed_block_type {\n        enum { value = T(-1) > 0 }; // ensure T has no sign\n    };\n\n    template <>\n    struct allowed_block_type<bool> {\n        enum { value = false };\n    };\n\n\n    template <typename T>\n    struct is_numeric {\n        enum { value = false };\n    };\n\n#   define BOOST_dynamic_bitset_is_numeric(x)       \\\n                template<>                          \\\n                struct is_numeric< x > {            \\\n                    enum { value = true };          \\\n                }                                /**/\n\n    BOOST_dynamic_bitset_is_numeric(bool);\n    BOOST_dynamic_bitset_is_numeric(char);\n\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)\n    BOOST_dynamic_bitset_is_numeric(wchar_t);\n#endif\n\n    BOOST_dynamic_bitset_is_numeric(signed char);\n    BOOST_dynamic_bitset_is_numeric(short int);\n    BOOST_dynamic_bitset_is_numeric(int);\n    BOOST_dynamic_bitset_is_numeric(long int);\n\n    BOOST_dynamic_bitset_is_numeric(unsigned char);\n    BOOST_dynamic_bitset_is_numeric(unsigned short);\n    BOOST_dynamic_bitset_is_numeric(unsigned int);\n    BOOST_dynamic_bitset_is_numeric(unsigned long);\n\n#if defined(BOOST_HAS_LONG_LONG)\n    BOOST_dynamic_bitset_is_numeric(::boost::long_long_type);\n    BOOST_dynamic_bitset_is_numeric(::boost::ulong_long_type);\n#endif\n\n    // intentionally omitted\n    //BOOST_dynamic_bitset_is_numeric(float);\n    //BOOST_dynamic_bitset_is_numeric(double);\n    //BOOST_dynamic_bitset_is_numeric(long double);\n\n#undef BOOST_dynamic_bitset_is_numeric\n\n  } // dynamic_bitset_impl\n  } // namespace detail\n\n} // namespace boost\n\n#endif // include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/endian.hpp",
    "content": "// Copyright 2013 Rene Rivera\n// Distributed under the Boost Software License, Version 1.0. (See accompany-\n// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_DETAIL_ENDIAN_HPP\n#define BOOST_DETAIL_ENDIAN_HPP\n\n// Use the Predef library for the detection of endianess.\n#include <boost/predef/detail/endian_compat.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/fenv.hpp",
    "content": "/*=============================================================================\n    Copyright (c) 2010      Bryce Lelbach\n\n    Distributed under the Boost Software License, Version 1.0. (See accompanying\n    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n=============================================================================*/\n\n#include <boost/config.hpp>\n\n#if defined(BOOST_NO_FENV_H)\n  #error This platform does not have a floating point environment\n#endif\n\n#if !defined(BOOST_DETAIL_FENV_HPP)\n#define BOOST_DETAIL_FENV_HPP\n\n/* If we're using clang + glibc, we have to get hacky.\n * See http://llvm.org/bugs/show_bug.cgi?id=6907 */\n#if defined(__clang__)       &&  (__clang_major__ < 3) &&    \\\n    defined(__GNU_LIBRARY__) && /* up to version 5 */ \\\n    defined(__GLIBC__) &&         /* version 6 + */ \\\n    !defined(_FENV_H)\n  #define _FENV_H\n\n  #include <features.h>\n  #include <bits/fenv.h>\n\n  extern \"C\" {\n    extern int fegetexceptflag (fexcept_t*, int) __THROW;\n    extern int fesetexceptflag (__const fexcept_t*, int) __THROW;\n    extern int feclearexcept (int) __THROW;\n    extern int feraiseexcept (int) __THROW;\n    extern int fetestexcept (int) __THROW;\n    extern int fegetround (void) __THROW;\n    extern int fesetround (int) __THROW;\n    extern int fegetenv (fenv_t*) __THROW;\n    extern int fesetenv (__const fenv_t*) __THROW;\n    extern int feupdateenv (__const fenv_t*) __THROW;\n    extern int feholdexcept (fenv_t*) __THROW;\n\n    #ifdef __USE_GNU\n      extern int feenableexcept (int) __THROW;\n      extern int fedisableexcept (int) __THROW;\n      extern int fegetexcept (void) __THROW;\n    #endif\n  }\n\n  namespace std { namespace tr1 {\n    using ::fenv_t;\n    using ::fexcept_t;\n    using ::fegetexceptflag;\n    using ::fesetexceptflag;\n    using ::feclearexcept;\n    using ::feraiseexcept;\n    using ::fetestexcept;\n    using ::fegetround;\n    using ::fesetround;\n    using ::fegetenv;\n    using ::fesetenv;\n    using ::feupdateenv;\n    using ::feholdexcept;\n  } }\n\n#elif defined(__MINGW32__) && defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408\n\n  // MinGW (32-bit) has a bug in mingw32/bits/c++config.h, it does not define _GLIBCXX_HAVE_FENV_H,\n  // which prevents the C fenv.h header contents to be included in the C++ wrapper header fenv.h. This is at least\n  // the case with gcc 4.8.1 packages tested so far, up to 4.8.1-4. Note that there is no issue with\n  // MinGW-w64.\n  // To work around the bug we avoid including the C++ wrapper header and include the C header directly\n  // and import all relevant symbols into std:: ourselves.\n\n  #include <../include/fenv.h>\n\n  namespace std {\n    using ::fenv_t;\n    using ::fexcept_t;\n    using ::fegetexceptflag;\n    using ::fesetexceptflag;\n    using ::feclearexcept;\n    using ::feraiseexcept;\n    using ::fetestexcept;\n    using ::fegetround;\n    using ::fesetround;\n    using ::fegetenv;\n    using ::fesetenv;\n    using ::feupdateenv;\n    using ::feholdexcept;\n  }\n\n#else /* if we're not using GNU's C stdlib, fenv.h should work with clang */\n\n  #if defined(__SUNPRO_CC) /* lol suncc */\n    #include <stdio.h>\n  #endif\n\n  #include <fenv.h>\n\n#endif\n\n#endif /* BOOST_DETAIL_FENV_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/has_default_constructor.hpp",
    "content": "\n//  (C) Copyright Matthias Troyerk 2006.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_DETAIL_HAS_DEFAULT_CONSTRUCTOR_HPP_INCLUDED\n#define BOOST_DETAIL_HAS_DEFAULT_CONSTRUCTOR_HPP_INCLUDED\n\n#include <boost/type_traits/has_trivial_constructor.hpp>\n\nnamespace boost { namespace detail {\n\n/// type trait to check for a default constructor\n///\n/// The default implementation just checks for a trivial constructor.\n/// Using some compiler magic it might be possible to provide a better default\n\ntemplate <class T>\nstruct has_default_constructor\n : public has_trivial_constructor<T>\n{};\n\n} } // namespace boost::detail\n\n\n#endif // BOOST_DETAIL_HAS_DEFAULT_CONSTRUCTOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/identifier.hpp",
    "content": "//  boost/identifier.hpp  ----------------------------------------------------//\n\n//  Copyright Beman Dawes 2006\n\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See documentation at http://www.boost.org/libs/utility\n\n#ifndef BOOST_IDENTIFIER_HPP\n#define BOOST_IDENTIFIER_HPP\n\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/is_base_of.hpp>\n#include <iosfwd>\n\nnamespace boost\n{\n  namespace detail\n  {\n    //  class template identifier  ---------------------------------------------//\n\n    //  Always used as a base class so that different instantiations result in\n    //  different class types even if instantiated with the same value type T.\n\n    //  Expected usage is that T is often an integer type, best passed by\n    //  value. There is no reason why T can't be a possibly larger class such as\n    //  std::string, best passed by const reference.\n\n    //  This implementation uses pass by value, based on expected common uses.\n\n    template <typename T, typename D>\n    class identifier\n    {\n    public:\n      typedef T value_type;\n\n      const value_type value() const           { return m_value; }\n      void  assign( value_type v )             { m_value = v; }\n\n      bool operator==( const D & rhs ) const   { return m_value == rhs.m_value; }\n      bool operator!=( const D & rhs ) const   { return m_value != rhs.m_value; }\n      bool operator< ( const D & rhs ) const   { return m_value <  rhs.m_value; }\n      bool operator<=( const D & rhs ) const   { return m_value <= rhs.m_value; }\n      bool operator> ( const D & rhs ) const   { return m_value >  rhs.m_value; }\n      bool operator>=( const D & rhs ) const   { return m_value >= rhs.m_value; }\n\n      typedef void (*unspecified_bool_type)(D); // without the D, unspecified_bool_type \n      static void unspecified_bool_true(D){}    // conversion allows relational operators\n                                                // between different identifier types\n\n      operator unspecified_bool_type() const   { return m_value == value_type() ? 0 : unspecified_bool_true; }\n      bool operator!() const                   { return m_value == value_type(); }\n\n    // constructors are protected so that class can only be used as a base class\n    protected:\n      identifier()                             {}\n      explicit identifier( value_type v )      : m_value(v) {}\n\n    private:\n      T m_value;\n    };\n\n  //#ifndef BOOST_NO_SFINAE\n\n  //  template <class Ostream, class Id>\n  //    typename enable_if< is_base_of< identifier< typename Id::value_type, Id >, Id >, \n  //      Ostream & >::type operator<<( Ostream & os, const Id & id )\n  //  {\n  //    return os << id.value();\n  //  }\n\n  //  template <class Istream, class Id>\n  //    typename enable_if< is_base_of< identifier< typename Id::value_type, Id >, Id >, \n  //      Istream & >::type operator>>( Istream & is, Id & id )\n  //  {\n  //    typename Id::value_type v;\n  //    is >> v;\n  //    id.value( v );\n  //    return is;\n  //  }\n  //#endif\n\n  } // namespace detail\n} // namespace boost\n\n#endif // BOOST_IDENTIFIER_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/indirect_traits.hpp",
    "content": "// Copyright David Abrahams 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef INDIRECT_TRAITS_DWA2002131_HPP\n# define INDIRECT_TRAITS_DWA2002131_HPP\n# include <boost/type_traits/is_function.hpp>\n# include <boost/type_traits/is_reference.hpp>\n# include <boost/type_traits/is_pointer.hpp>\n# include <boost/type_traits/is_class.hpp>\n# include <boost/type_traits/is_const.hpp>\n# include <boost/type_traits/is_volatile.hpp>\n# include <boost/type_traits/is_member_function_pointer.hpp>\n# include <boost/type_traits/is_member_pointer.hpp>\n# include <boost/type_traits/remove_cv.hpp>\n# include <boost/type_traits/remove_reference.hpp>\n# include <boost/type_traits/remove_pointer.hpp>\n\n# include <boost/detail/workaround.hpp>\n\n# include <boost/mpl/eval_if.hpp>\n# include <boost/mpl/if.hpp>\n# include <boost/mpl/bool.hpp>\n# include <boost/mpl/and.hpp>\n# include <boost/mpl/not.hpp>\n# include <boost/mpl/aux_/lambda_support.hpp>\n\n\nnamespace boost { namespace detail {\n\nnamespace indirect_traits {\n\ntemplate <class T>\nstruct is_reference_to_const : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_const<T const&> : mpl::true_\n{\n};\n\n#   if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround\ntemplate<class T>\nstruct is_reference_to_const<T const volatile&> : mpl::true_\n{\n};\n#   endif \n\ntemplate <class T>\nstruct is_reference_to_function : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_function<T&> : is_function<T>\n{\n};\n\ntemplate <class T>\nstruct is_pointer_to_function : mpl::false_\n{\n};\n\n// There's no such thing as a pointer-to-cv-function, so we don't need\n// specializations for those\ntemplate <class T>\nstruct is_pointer_to_function<T*> : is_function<T>\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_member_function_pointer_impl : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_member_function_pointer_impl<T&>\n    : is_member_function_pointer<typename remove_cv<T>::type>\n{\n};\n\n\ntemplate <class T>\nstruct is_reference_to_member_function_pointer\n    : is_reference_to_member_function_pointer_impl<T>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T))\n};\n\ntemplate <class T>\nstruct is_reference_to_function_pointer_aux\n    : mpl::and_<\n          is_reference<T>\n        , is_pointer_to_function<\n              typename remove_cv<\n                  typename remove_reference<T>::type\n              >::type\n          >\n      >\n{\n    // There's no such thing as a pointer-to-cv-function, so we don't need specializations for those\n};\n\ntemplate <class T>\nstruct is_reference_to_function_pointer\n    : mpl::if_<\n          is_reference_to_function<T>\n        , mpl::false_\n        , is_reference_to_function_pointer_aux<T>\n     >::type\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_non_const\n    : mpl::and_<\n          is_reference<T>\n        , mpl::not_<\n             is_reference_to_const<T>\n          >\n      >\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_volatile : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_volatile<T volatile&> : mpl::true_\n{\n};\n\n#   if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround\ntemplate <class T>\nstruct is_reference_to_volatile<T const volatile&> : mpl::true_\n{\n};\n#   endif \n\n\ntemplate <class T>\nstruct is_reference_to_pointer : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_pointer<T*&> : mpl::true_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_pointer<T* const&> : mpl::true_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_pointer<T* volatile&> : mpl::true_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_pointer<T* const volatile&> : mpl::true_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_class\n    : mpl::and_<\n          is_reference<T>\n        , is_class<\n              typename remove_cv<\n                  typename remove_reference<T>::type\n              >::type\n          >\n      >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T))\n};\n\ntemplate <class T>\nstruct is_pointer_to_class\n    : mpl::and_<\n          is_pointer<T>\n        , is_class<\n              typename remove_cv<\n                  typename remove_pointer<T>::type\n              >::type\n          >\n      >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T))\n};\n\n\n}\n\nusing namespace indirect_traits;\n\n}} // namespace boost::python::detail\n\n#endif // INDIRECT_TRAITS_DWA2002131_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/interlocked.hpp",
    "content": "#ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED\n#define BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED\n\n//\n//  boost/detail/interlocked.hpp\n//\n//  Copyright 2005 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/config.hpp>\n\n// MS compatible compilers support #pragma once\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if defined( BOOST_USE_WINDOWS_H )\n\n# include <windows.h>\n\n# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement\n# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement\n# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange\n# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange\n# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd\n# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER InterlockedCompareExchangePointer\n# define BOOST_INTERLOCKED_EXCHANGE_POINTER InterlockedExchangePointer\n\n#elif defined( BOOST_USE_INTRIN_H )\n\n#include <intrin.h>\n\n# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement\n# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement\n# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange\n# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange\n# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd\n\n# if defined(_M_IA64) || defined(_M_AMD64) || defined(__x86_64__) || defined(__x86_64)\n\n#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer\n#  define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer\n\n# else\n\n#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \\\n    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))\n#  define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \\\n    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))\n\n# endif\n\n#elif defined(_WIN32_WCE)\n\n#if _WIN32_WCE >= 0x600\n\nextern \"C\" long __cdecl _InterlockedIncrement( long volatile * );\nextern \"C\" long __cdecl _InterlockedDecrement( long volatile * );\nextern \"C\" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );\nextern \"C\" long __cdecl _InterlockedExchange( long volatile *, long );\nextern \"C\" long __cdecl _InterlockedExchangeAdd( long volatile *, long );\n\n# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement\n# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement\n# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange\n# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange\n# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd\n\n#else\n// under Windows CE we still have old-style Interlocked* functions\n\nextern \"C\" long __cdecl InterlockedIncrement( long* );\nextern \"C\" long __cdecl InterlockedDecrement( long* );\nextern \"C\" long __cdecl InterlockedCompareExchange( long*, long, long );\nextern \"C\" long __cdecl InterlockedExchange( long*, long );\nextern \"C\" long __cdecl InterlockedExchangeAdd( long*, long );\n\n# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement\n# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement\n# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange\n# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange\n# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd\n\n#endif\n\n# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \\\n    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long*)(dest),(long)(exchange),(long)(compare)))\n# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \\\n    ((void*)BOOST_INTERLOCKED_EXCHANGE((long*)(dest),(long)(exchange)))\n\n#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )\n\n#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1400\n\n#include <intrin.h>\n\n#else\n\n# if defined( __CLRCALL_PURE_OR_CDECL )\n#  define BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL __CLRCALL_PURE_OR_CDECL\n# else\n#  define BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL __cdecl\n# endif\n\nextern \"C\" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedIncrement( long volatile * );\nextern \"C\" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedDecrement( long volatile * );\nextern \"C\" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedCompareExchange( long volatile *, long, long );\nextern \"C\" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedExchange( long volatile *, long );\nextern \"C\" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedExchangeAdd( long volatile *, long );\n\n# undef BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL\n\n# if defined( BOOST_MSVC ) && BOOST_MSVC >= 1310\n#  pragma intrinsic( _InterlockedIncrement )\n#  pragma intrinsic( _InterlockedDecrement )\n#  pragma intrinsic( _InterlockedCompareExchange )\n#  pragma intrinsic( _InterlockedExchange )\n#  pragma intrinsic( _InterlockedExchangeAdd )\n# endif\n\n#endif\n\n# if defined(_M_IA64) || defined(_M_AMD64)\n\nextern \"C\" void* __cdecl _InterlockedCompareExchangePointer( void* volatile *, void*, void* );\nextern \"C\" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* );\n\n#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer\n#  define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer\n\n# else\n\n#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \\\n    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))\n#  define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \\\n    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))\n\n# endif\n\n# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement\n# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement\n# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange\n# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange\n# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd\n\n// Unlike __MINGW64__, __MINGW64_VERSION_MAJOR is defined by MinGW-w64 for both 32 and 64-bit targets.\n#elif defined(__MINGW64_VERSION_MAJOR)\n\n// MinGW-w64 provides intrin.h for both 32 and 64-bit targets.\n#include <intrin.h>\n\n# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement\n# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement\n# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange\n# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange\n# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd\n# if defined(__x86_64__) || defined(__x86_64)\n#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer\n#  define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer\n# else\n#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \\\n    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))\n#  define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \\\n    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))\n# endif\n\n#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )\n\n#define BOOST_INTERLOCKED_IMPORT __declspec(dllimport)\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nextern \"C\" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedIncrement( long volatile * );\nextern \"C\" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedDecrement( long volatile * );\nextern \"C\" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedCompareExchange( long volatile *, long, long );\nextern \"C\" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchange( long volatile *, long );\nextern \"C\" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchangeAdd( long volatile *, long );\n\n# if defined(_M_IA64) || defined(_M_AMD64)\nextern \"C\" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedCompareExchangePointer( void* volatile *, void*, void* );\nextern \"C\" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedExchangePointer( void* volatile *, void* );\n# endif\n\n} // namespace detail\n\n} // namespace boost\n\n# define BOOST_INTERLOCKED_INCREMENT ::boost::detail::InterlockedIncrement\n# define BOOST_INTERLOCKED_DECREMENT ::boost::detail::InterlockedDecrement\n# define BOOST_INTERLOCKED_COMPARE_EXCHANGE ::boost::detail::InterlockedCompareExchange\n# define BOOST_INTERLOCKED_EXCHANGE ::boost::detail::InterlockedExchange\n# define BOOST_INTERLOCKED_EXCHANGE_ADD ::boost::detail::InterlockedExchangeAdd\n\n# if defined(_M_IA64) || defined(_M_AMD64)\n#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER ::boost::detail::InterlockedCompareExchangePointer\n#  define BOOST_INTERLOCKED_EXCHANGE_POINTER ::boost::detail::InterlockedExchangePointer\n# else\n#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \\\n    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))\n#  define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \\\n    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))\n# endif\n\n#else\n\n# error \"Interlocked intrinsics not available\"\n\n#endif\n\n#endif // #ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/is_incrementable.hpp",
    "content": "// Copyright David Abrahams 2004. Use, modification and distribution is\n// subject to the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef IS_INCREMENTABLE_DWA200415_HPP\n# define IS_INCREMENTABLE_DWA200415_HPP\n\n# include <boost/type_traits/integral_constant.hpp>\n# include <boost/type_traits/remove_cv.hpp>\n# include <boost/mpl/aux_/lambda_support.hpp>\n# include <boost/mpl/bool.hpp>\n# include <boost/detail/workaround.hpp>\n\nnamespace boost { namespace detail {\n\n// is_incrementable<T> metafunction\n//\n// Requires: Given x of type T&, if the expression ++x is well-formed\n// it must have complete type; otherwise, it must neither be ambiguous\n// nor violate access.\n\n// This namespace ensures that ADL doesn't mess things up.\nnamespace is_incrementable_\n{\n  // a type returned from operator++ when no increment is found in the\n  // type's own namespace\n  struct tag {};\n\n  // any soaks up implicit conversions and makes the following\n  // operator++ less-preferred than any other such operator that\n  // might be found via ADL.\n  struct any { template <class T> any(T const&); };\n\n  // This is a last-resort operator++ for when none other is found\n# if BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2\n\n}\n\nnamespace is_incrementable_2\n{\n  is_incrementable_::tag operator++(is_incrementable_::any const&);\n  is_incrementable_::tag operator++(is_incrementable_::any const&,int);\n}\nusing namespace is_incrementable_2;\n\nnamespace is_incrementable_\n{\n\n# else\n\n  tag operator++(any const&);\n  tag operator++(any const&,int);\n\n# endif\n\n# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \n#  define BOOST_comma(a,b) (a)\n# else\n  // In case an operator++ is found that returns void, we'll use ++x,0\n  tag operator,(tag,int);\n#  define BOOST_comma(a,b) (a,b)\n# endif\n\n# if defined(BOOST_MSVC)\n#  pragma warning(push)\n#  pragma warning(disable:4913) // Warning about operator,\n# endif\n\n  // two check overloads help us identify which operator++ was picked\n  char (& check_(tag) )[2];\n\n  template <class T>\n  char check_(T const&);\n\n\n  template <class T>\n  struct impl\n  {\n      static typename boost::remove_cv<T>::type& x;\n\n      BOOST_STATIC_CONSTANT(\n          bool\n        , value = sizeof(is_incrementable_::check_(BOOST_comma(++x,0))) == 1\n      );\n  };\n\n  template <class T>\n  struct postfix_impl\n  {\n      static typename boost::remove_cv<T>::type& x;\n\n      BOOST_STATIC_CONSTANT(\n          bool\n        , value = sizeof(is_incrementable_::check_(BOOST_comma(x++,0))) == 1\n      );\n  };\n\n# if defined(BOOST_MSVC)\n#  pragma warning(pop)\n# endif\n\n}\n\n# undef BOOST_comma\n\ntemplate<typename T>\nstruct is_incrementable :\n    public boost::integral_constant<bool, boost::detail::is_incrementable_::impl<T>::value>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_incrementable,(T))\n};\n\ntemplate<typename T>\nstruct is_postfix_incrementable :\n    public boost::integral_constant<bool, boost::detail::is_incrementable_::postfix_impl<T>::value>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_postfix_incrementable,(T))\n};\n\n} // namespace detail\n\n} // namespace boost\n\n# include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // IS_INCREMENTABLE_DWA200415_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/is_sorted.hpp",
    "content": "/*==============================================================================\n    Copyright (c) 2010-2011 Bryce Lelbach\n\n    Distributed under the Boost Software License, Version 1.0. (See accompanying\n    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n==============================================================================*/\n\n#ifndef BOOST_DETAIL_SORTED_HPP\n#define BOOST_DETAIL_SORTED_HPP\n\n#include <boost/detail/iterator.hpp>\n\n#include <functional>\n\nnamespace boost {\nnamespace detail {\n\ntemplate<class Iterator, class Comp>\ninline Iterator is_sorted_until (Iterator first, Iterator last, Comp c) {\n  if (first == last)\n    return last;\n\n  Iterator it = first; ++it;\n\n  for (; it != last; first = it, ++it)\n    if (c(*it, *first))\n      return it;\n\n  return it;\n}\n\ntemplate<class Iterator>\ninline Iterator is_sorted_until (Iterator first, Iterator last) {\n  typedef typename boost::detail::iterator_traits<Iterator>::value_type\n    value_type;\n\n  typedef std::less<value_type> c; \n\n  return ::boost::detail::is_sorted_until(first, last, c()); \n}\n\ntemplate<class Iterator, class Comp>\ninline bool is_sorted (Iterator first, Iterator last, Comp c) {\n  return ::boost::detail::is_sorted_until(first, last, c) == last;\n} \n\ntemplate<class Iterator>\ninline bool is_sorted (Iterator first, Iterator last) {\n  return ::boost::detail::is_sorted_until(first, last) == last;\n} \n\n} // detail\n} // boost\n\n#endif // BOOST_DETAIL_SORTED_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/is_xxx.hpp",
    "content": "// Copyright David Abrahams 2005. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_DETAIL_IS_XXX_DWA20051011_HPP\n# define BOOST_DETAIL_IS_XXX_DWA20051011_HPP\n\n# include <boost/config.hpp>\n# include <boost/mpl/bool.hpp>\n# include <boost/preprocessor/enum_params.hpp>\n\n\n#  define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs)  \\\ntemplate <class T>                                              \\\nstruct is_##name : mpl::false_                                  \\\n{                                                               \\\n};                                                              \\\n                                                                \\\ntemplate < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class T) >          \\\nstruct is_##name<                                               \\\n   qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, T) >        \\\n>                                                               \\\n   : mpl::true_                                                 \\\n{                                                               \\\n};\n\n\n#endif // BOOST_DETAIL_IS_XXX_DWA20051011_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/iterator.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef ITERATOR_DWA122600_HPP_\n#define ITERATOR_DWA122600_HPP_\n\n// This header is obsolete and will be deprecated.\n\n#include <iterator>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nusing std::iterator_traits;\nusing std::distance;\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // ITERATOR_DWA122600_HPP_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/lcast_precision.hpp",
    "content": "// Copyright Alexander Nasonov & Paul A. Bristow 2006.\n\n// Use, modification and distribution are subject to the\n// Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt\n// or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED\n#define BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED\n\n#include <climits>\n#include <ios>\n#include <limits>\n\n#include <boost/config.hpp>\n#include <boost/integer_traits.hpp>\n\n#ifndef BOOST_NO_IS_ABSTRACT\n// Fix for SF:1358600 - lexical_cast & pure virtual functions & VC 8 STL\n#include <boost/mpl/if.hpp>\n#include <boost/type_traits/is_abstract.hpp>\n#endif\n\n#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || \\\n  (defined(BOOST_MSVC) && (BOOST_MSVC<1310))\n\n#define BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n#endif\n\n#ifdef BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n#include <boost/assert.hpp>\n#else\n#include <boost/static_assert.hpp>\n#endif\n\nnamespace boost { namespace detail {\n\nclass lcast_abstract_stub {};\n\n#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n// Calculate an argument to pass to std::ios_base::precision from\n// lexical_cast. See alternative implementation for broken standard\n// libraries in lcast_get_precision below. Keep them in sync, please.\ntemplate<class T>\nstruct lcast_precision\n{\n#ifdef BOOST_NO_IS_ABSTRACT\n    typedef std::numeric_limits<T> limits; // No fix for SF:1358600.\n#else\n    typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<\n        boost::is_abstract<T>\n      , std::numeric_limits<lcast_abstract_stub>\n      , std::numeric_limits<T>\n      >::type limits;\n#endif\n\n    BOOST_STATIC_CONSTANT(bool, use_default_precision =\n            !limits::is_specialized || limits::is_exact\n        );\n\n    BOOST_STATIC_CONSTANT(bool, is_specialized_bin =\n            !use_default_precision &&\n            limits::radix == 2 && limits::digits > 0\n        );\n\n    BOOST_STATIC_CONSTANT(bool, is_specialized_dec =\n            !use_default_precision &&\n            limits::radix == 10 && limits::digits10 > 0\n        );\n\n    BOOST_STATIC_CONSTANT(std::streamsize, streamsize_max =\n            boost::integer_traits<std::streamsize>::const_max\n        );\n\n    BOOST_STATIC_CONSTANT(unsigned int, precision_dec = limits::digits10 + 1U);\n\n    BOOST_STATIC_ASSERT(!is_specialized_dec ||\n            precision_dec <= streamsize_max + 0UL\n        );\n\n    BOOST_STATIC_CONSTANT(unsigned long, precision_bin =\n            2UL + limits::digits * 30103UL / 100000UL\n        );\n\n    BOOST_STATIC_ASSERT(!is_specialized_bin ||\n            (limits::digits + 0UL < ULONG_MAX / 30103UL &&\n            precision_bin > limits::digits10 + 0UL &&\n            precision_bin <= streamsize_max + 0UL)\n        );\n\n    BOOST_STATIC_CONSTANT(std::streamsize, value =\n            is_specialized_bin ? precision_bin\n                               : is_specialized_dec ? precision_dec : 6\n        );\n};\n#endif\n\ntemplate<class T>\ninline std::streamsize lcast_get_precision(T* = 0)\n{\n#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n    return lcast_precision<T>::value;\n#else // Follow lcast_precision algorithm at run-time:\n\n#ifdef BOOST_NO_IS_ABSTRACT\n    typedef std::numeric_limits<T> limits; // No fix for SF:1358600.\n#else\n    typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<\n        boost::is_abstract<T>\n      , std::numeric_limits<lcast_abstract_stub>\n      , std::numeric_limits<T>\n      >::type limits;\n#endif\n\n    bool const use_default_precision =\n        !limits::is_specialized || limits::is_exact;\n\n    if(!use_default_precision)\n    { // Includes all built-in floating-point types, float, double ...\n      // and UDT types for which digits (significand bits) is defined (not zero)\n\n        bool const is_specialized_bin =\n            limits::radix == 2 && limits::digits > 0;\n        bool const is_specialized_dec =\n            limits::radix == 10 && limits::digits10 > 0;\n        std::streamsize const streamsize_max =\n            (boost::integer_traits<std::streamsize>::max)();\n\n        if(is_specialized_bin)\n        { // Floating-point types with\n          // limits::digits defined by the specialization.\n\n            unsigned long const digits = limits::digits;\n            unsigned long const precision = 2UL + digits * 30103UL / 100000UL;\n            // unsigned long is selected because it is at least 32-bits\n            // and thus ULONG_MAX / 30103UL is big enough for all types.\n            BOOST_ASSERT(\n                    digits < ULONG_MAX / 30103UL &&\n                    precision > limits::digits10 + 0UL &&\n                    precision <= streamsize_max + 0UL\n                );\n            return precision;\n        }\n        else if(is_specialized_dec)\n        {   // Decimal Floating-point type, most likely a User Defined Type\n            // rather than a real floating-point hardware type.\n            unsigned int const precision = limits::digits10 + 1U;\n            BOOST_ASSERT(precision <= streamsize_max + 0UL);\n            return precision;\n        }\n    }\n\n    // Integral type (for which precision has no effect)\n    // or type T for which limits is NOT specialized,\n    // so assume stream precision remains the default 6 decimal digits.\n    // Warning: if your User-defined Floating-point type T is NOT specialized,\n    // then you may lose accuracy by only using 6 decimal digits.\n    // To avoid this, you need to specialize T with either\n    // radix == 2 and digits == the number of significand bits,\n    // OR\n    // radix = 10 and digits10 == the number of decimal digits.\n\n    return 6;\n#endif\n}\n\ntemplate<class T>\ninline void lcast_set_precision(std::ios_base& stream, T*)\n{\n    stream.precision(lcast_get_precision<T>());\n}\n\ntemplate<class Source, class Target>\ninline void lcast_set_precision(std::ios_base& stream, Source*, Target*)\n{\n    std::streamsize const s = lcast_get_precision(static_cast<Source*>(0));\n    std::streamsize const t = lcast_get_precision(static_cast<Target*>(0));\n    stream.precision(s > t ? s : t);\n}\n\n}}\n\n#endif //  BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/lightweight_main.hpp",
    "content": "//  boost/detail/lightweight_main.hpp  -------------------------------------------------//\n\n//  Copyright Beman Dawes 2010\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n#include <iostream>\n#include <exception>\n\n//--------------------------------------------------------------------------------------//\n//                                                                                      //\n//                exception reporting main() that calls cpp_main()                      //\n//                                                                                      //\n//--------------------------------------------------------------------------------------//\n\nint cpp_main(int argc, char* argv[]);\n\nint main(int argc, char* argv[])\n{\n  try\n  {\n    return cpp_main(argc, argv);\n  }\n\n  catch (const std::exception& ex)\n  {\n    std::cout\n    << \"\\nERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR\\n\"\n    << \"\\n****************************** std::exception *****************************\\n\"\n    << ex.what()\n    << \"\\n***************************************************************************\\n\"\n    << std::endl;\n  }\n  return 1;\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/lightweight_mutex.hpp",
    "content": "#ifndef BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED\n#define BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/lightweight_mutex.hpp - lightweight mutex\n//\n//  Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/smart_ptr/detail/lightweight_mutex.hpp>\n\n#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/lightweight_test.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Fernandes\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP\n#define BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/lightweight_test.hpp instead.\n\n#include <boost/core/lightweight_test.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/lightweight_test_report.hpp",
    "content": "//  boost/detail/lightweight_test_reporter.hpp  ----------------------------------------//\n\n//  Copyright Beman Dawes 2014\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//--------------------------------------------------------------------------------------//\n//                                                                                      //\n//                         Configuration reporting cpp_main()                           //\n//                                                                                      //\n//  Displays configuration information, then returns test_main(argc, argv), which       //\n//  must be supplied by the user.                                                       //\n//                                                                                      //\n//  Note: cpp_main(argc, argv) is called from a try block in main(), which is           //\n//  supplied by <boost/detail/lightweight_main.hpp> as is a catch block that reports    //\n//  std::exception what().                                                              //\n//                                                                                      //\n//--------------------------------------------------------------------------------------//\n\n#include <boost/config.hpp>\n#include <boost/version.hpp>\n#include <boost/detail/lightweight_test.hpp>\n#include <boost/detail/lightweight_main.hpp>\n#include <iostream>\n\nint test_main(int argc, char* argv[]);\n\nint cpp_main(int argc, char* argv[])\n{\n  std::cout << BOOST_COMPILER\n#ifdef __GNUC__\n            << \", __GXX_EXPERIMENTAL_CXX0X__ \"\n# ifdef __GXX_EXPERIMENTAL_CXX0X__\n              \"defined\"\n# else\n              \"not defined\"\n# endif\n#endif\n            << \"\\n\"\n            << BOOST_STDLIB << \"\\n\"\n            << BOOST_PLATFORM << \"\\n\"\n            << \"Boost version \" << BOOST_VERSION / 100000 << '.'\n            << BOOST_VERSION / 100 % 1000 << '.' << BOOST_VERSION % 100 << \"\\n\";\n\n  std::cout << \"Command line: \";\n  for (int a = 0; a < argc; ++a)\n  {\n    std::cout << argv[a];\n    if (a != argc - 1)\n      std::cout << ' ';\n  }\n  std::cout << std::endl;\n\n  return test_main(argc, argv);\n}"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/lightweight_thread.hpp",
    "content": "#ifndef BOOST_DETAIL_LIGHTWEIGHT_THREAD_HPP_INCLUDED\n#define BOOST_DETAIL_LIGHTWEIGHT_THREAD_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  boost/detail/lightweight_thread.hpp\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/config.hpp>\n#include <memory>\n#include <cerrno>\n\n// pthread_create, pthread_join\n\n#if defined( BOOST_HAS_PTHREADS )\n\n#include <pthread.h>\n\n#else\n\n#include <windows.h>\n#include <process.h>\n\ntypedef HANDLE pthread_t;\n\nint pthread_create( pthread_t * thread, void const *, unsigned (__stdcall * start_routine) (void*), void* arg )\n{\n    HANDLE h = (HANDLE)_beginthreadex( 0, 0, start_routine, arg, 0, 0 );\n\n    if( h != 0 )\n    {\n        *thread = h;\n        return 0;\n    }\n    else\n    {\n        return EAGAIN;\n    }\n}\n\nint pthread_join( pthread_t thread, void ** /*value_ptr*/ )\n{\n    ::WaitForSingleObject( thread, INFINITE );\n    ::CloseHandle( thread );\n    return 0;\n}\n\n#endif\n\n// template<class F> int lw_thread_create( pthread_t & pt, F f );\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass lw_abstract_thread\n{\npublic:\n\n    virtual ~lw_abstract_thread() {}\n    virtual void run() = 0;\n};\n\n#if defined( BOOST_HAS_PTHREADS )\n\nextern \"C\" void * lw_thread_routine( void * pv )\n{\n    std::auto_ptr<lw_abstract_thread> pt( static_cast<lw_abstract_thread *>( pv ) );\n\n    pt->run();\n\n    return 0;\n}\n\n#else\n\nunsigned __stdcall lw_thread_routine( void * pv )\n{\n    std::auto_ptr<lw_abstract_thread> pt( static_cast<lw_abstract_thread *>( pv ) );\n\n    pt->run();\n\n    return 0;\n}\n\n#endif\n\ntemplate<class F> class lw_thread_impl: public lw_abstract_thread\n{\npublic:\n\n    explicit lw_thread_impl( F f ): f_( f )\n    {\n    }\n\n    void run()\n    {\n        f_();\n    }\n\nprivate:\n\n    F f_;\n};\n\ntemplate<class F> int lw_thread_create( pthread_t & pt, F f )\n{\n    std::auto_ptr<lw_abstract_thread> p( new lw_thread_impl<F>( f ) );\n\n    int r = pthread_create( &pt, 0, lw_thread_routine, p.get() );\n\n    if( r == 0 )\n    {\n        p.release();\n    }\n\n    return r;\n}\n\n} // namespace detail\n} // namespace boost\n\n#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_THREAD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/named_template_params.hpp",
    "content": "// (C) Copyright Jeremy Siek 2001.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// Revision History:\n\n// 04 Oct 2001   David Abrahams\n//      Changed name of \"bind\" to \"select\" to avoid problems with MSVC.\n\n#ifndef BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP\n#define BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP\n\n#include <boost/type_traits/conversion_traits.hpp>\n#include <boost/type_traits/composite_traits.hpp> // for is_reference\n#if defined(__BORLANDC__)\n#include <boost/type_traits/ice.hpp>\n#endif\n\nnamespace boost {\n  namespace detail {\n    \n    struct default_argument { };\n\n    struct dummy_default_gen {\n      template <class Base, class Traits>\n      struct select {\n        typedef default_argument type;\n      };\n    };\n\n   // This class template is a workaround for MSVC.\n   template <class Gen> struct default_generator {\n     typedef detail::dummy_default_gen type;\n   };\n\n    template <class T> struct is_default { \n      enum { value = false };  \n      typedef type_traits::no_type type;\n    };\n    template <> struct is_default<default_argument> { \n      enum { value = true }; \n      typedef type_traits::yes_type type;\n    };\n\n    struct choose_default {\n      template <class Arg, class DefaultGen, class Base, class Traits>\n      struct select {\n        typedef typename default_generator<DefaultGen>::type Gen;\n        typedef typename Gen::template select<Base,Traits>::type type;\n      };\n    };\n    struct choose_arg {\n      template <class Arg, class DefaultGen, class Base, class Traits>\n      struct select {\n        typedef Arg type;\n      };\n    };\n\n#if defined(__BORLANDC__)\n    template <class UseDefault>\n    struct choose_arg_or_default { typedef choose_arg type; };\n    template <>\n    struct choose_arg_or_default<type_traits::yes_type> {\n      typedef choose_default type;\n    };\n#else\n    template <bool UseDefault>\n    struct choose_arg_or_default { typedef choose_arg type; };\n    template <>\n    struct choose_arg_or_default<true> {\n      typedef choose_default type;\n    };\n#endif\n    \n    template <class Arg, class DefaultGen, class Base, class Traits>\n    class resolve_default {\n#if defined(__BORLANDC__)\n      typedef typename choose_arg_or_default<typename is_default<Arg>::type>::type Selector;\n#else\n      // This usually works for Borland, but I'm seeing weird errors in\n      // iterator_adaptor_test.cpp when using this method.\n      enum { is_def = is_default<Arg>::value };\n      typedef typename choose_arg_or_default<is_def>::type Selector;\n#endif\n    public:\n      typedef typename Selector\n        ::template select<Arg, DefaultGen, Base, Traits>::type type;\n    };\n\n    // To differentiate an unnamed parameter from a traits generator\n    // we use is_convertible<X, iter_traits_gen_base>.\n    struct named_template_param_base { };\n\n    template <class X>\n    struct is_named_param_list {\n      enum { value  = is_convertible<X, named_template_param_base>::value };\n    };\n    \n    struct choose_named_params {\n      template <class Prev> struct select { typedef Prev type; };\n    };\n    struct choose_default_arg {\n      template <class Prev> struct select { \n        typedef detail::default_argument type;\n      };\n    };\n\n    template <bool Named> struct choose_default_dispatch_;\n    template <> struct choose_default_dispatch_<true> {\n      typedef choose_named_params type;\n    };\n    template <> struct choose_default_dispatch_<false> {\n      typedef choose_default_arg type;\n    };\n    // The use of inheritance here is a Solaris Forte 6 workaround.\n    template <bool Named> struct choose_default_dispatch\n      : public choose_default_dispatch_<Named> { };\n\n    template <class PreviousArg>\n    struct choose_default_argument {\n      enum { is_named = is_named_param_list<PreviousArg>::value };\n      typedef typename choose_default_dispatch<is_named>::type Selector;\n      typedef typename Selector::template select<PreviousArg>::type type;\n    };\n\n    // This macro assumes that there is a class named default_##TYPE\n    // defined before the application of the macro.  This class should\n    // have a single member class template named \"select\" with two\n    // template parameters: the type of the class being created (e.g.,\n    // the iterator_adaptor type when creating iterator adaptors) and\n    // a traits class. The select class should have a single typedef\n    // named \"type\" that produces the default for TYPE.  See\n    // boost/iterator_adaptors.hpp for an example usage.  Also,\n    // applications of this macro must be placed in namespace\n    // boost::detail.\n\n#define BOOST_NAMED_TEMPLATE_PARAM(TYPE) \\\n    struct get_##TYPE##_from_named { \\\n      template <class Base, class NamedParams, class Traits> \\\n      struct select { \\\n          typedef typename NamedParams::traits NamedTraits; \\\n          typedef typename NamedTraits::TYPE TYPE; \\\n          typedef typename resolve_default<TYPE, \\\n            default_##TYPE, Base, NamedTraits>::type type; \\\n      }; \\\n    }; \\\n    struct pass_thru_##TYPE { \\\n      template <class Base, class Arg, class Traits> struct select { \\\n          typedef typename resolve_default<Arg, \\\n            default_##TYPE, Base, Traits>::type type; \\\n      };\\\n    }; \\\n    template <int NamedParam> \\\n    struct get_##TYPE##_dispatch { }; \\\n    template <> struct get_##TYPE##_dispatch<1> { \\\n      typedef get_##TYPE##_from_named type; \\\n    }; \\\n    template <> struct get_##TYPE##_dispatch<0> { \\\n      typedef pass_thru_##TYPE type; \\\n    }; \\\n    template <class Base, class X, class Traits>  \\\n    class get_##TYPE { \\\n      enum { is_named = is_named_param_list<X>::value }; \\\n      typedef typename get_##TYPE##_dispatch<is_named>::type Selector; \\\n    public: \\\n      typedef typename Selector::template select<Base, X, Traits>::type type; \\\n    }; \\\n    template <> struct default_generator<default_##TYPE> { \\\n      typedef default_##TYPE type; \\\n    }\n\n    \n  } // namespace detail\n} // namespace boost\n\n#endif // BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/no_exceptions_support.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Fernandes\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP\n#define BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/no_exceptions_support.hpp instead.\n\n#include <boost/core/no_exceptions_support.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/numeric_traits.hpp",
    "content": "// (C) Copyright David Abrahams 2001, Howard Hinnant 2001.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// Template class numeric_traits<Number> --\n//\n//    Supplies:\n//\n//      typedef difference_type -- a type used to represent the difference\n//      between any two values of Number.\n//\n//    Support:\n//      1. Not all specializations are supplied\n//\n//      2. Use of specializations that are not supplied will cause a\n//      compile-time error\n//\n//      3. Users are free to specialize numeric_traits for any type.\n//\n//      4. Right now, specializations are only supplied for integer types.\n//\n//      5. On implementations which do not supply compile-time constants in\n//      std::numeric_limits<>, only specializations for built-in integer types\n//      are supplied.\n//\n//      6. Handling of numbers whose range of representation is at least as\n//      great as boost::intmax_t can cause some differences to be\n//      unrepresentable in difference_type:\n//\n//        Number    difference_type\n//        ------    ---------------\n//        signed    Number\n//        unsigned  intmax_t\n//\n// template <class Number> typename numeric_traits<Number>::difference_type\n// numeric_distance(Number x, Number y)\n//    computes (y - x), attempting to avoid overflows.\n//\n\n// See http://www.boost.org for most recent version including documentation.\n\n// Revision History\n// 11 Feb 2001 - Use BOOST_STATIC_CONSTANT (David Abrahams)\n// 11 Feb 2001 - Rolled back ineffective Borland-specific code\n//               (David Abrahams)\n// 10 Feb 2001 - Rolled in supposed Borland fixes from John Maddock, but\n//               not seeing any improvement yet (David Abrahams)\n// 06 Feb 2001 - Factored if_true out into boost/detail/select_type.hpp\n//               (David Abrahams)\n// 23 Jan 2001 - Fixed logic of difference_type selection, which was\n//               completely wack. In the process, added digit_traits<>\n//               to compute the number of digits in intmax_t even when\n//               not supplied by numeric_limits<>. (David Abrahams)\n// 21 Jan 2001 - Created (David Abrahams)\n\n#ifndef BOOST_NUMERIC_TRAITS_HPP_DWA20001901\n# define BOOST_NUMERIC_TRAITS_HPP_DWA20001901\n\n# include <boost/config.hpp>\n# include <boost/cstdint.hpp>\n# include <boost/static_assert.hpp>\n# include <boost/type_traits.hpp>\n# include <boost/detail/select_type.hpp>\n# include <boost/limits.hpp>\n\nnamespace boost { namespace detail {\n\n  // Template class is_signed -- determine whether a numeric type is signed\n  // Requires that T is constructable from the literals -1 and 0.  Compile-time\n  // error results if that requirement is not met (and thus signedness is not\n  // likely to have meaning for that type).\n  template <class Number>\n  struct is_signed\n  {\n#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)\n    BOOST_STATIC_CONSTANT(bool, value = (Number(-1) < Number(0)));\n#else\n    BOOST_STATIC_CONSTANT(bool, value = std::numeric_limits<Number>::is_signed);\n#endif\n  };\n\n# ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n  // digit_traits - compute the number of digits in a built-in integer\n  // type. Needed for implementations on which numeric_limits is not specialized\n  // for intmax_t (e.g. VC6).\n  template <bool is_specialized> struct digit_traits_select;\n\n  // numeric_limits is specialized; just select that version of digits\n  template <> struct digit_traits_select<true>\n  {\n      template <class T> struct traits\n      {\n          BOOST_STATIC_CONSTANT(int, digits = std::numeric_limits<T>::digits);\n      };\n  };\n\n  // numeric_limits is not specialized; compute digits from sizeof(T)\n  template <> struct digit_traits_select<false>\n  {\n      template <class T> struct traits\n      {\n          BOOST_STATIC_CONSTANT(int, digits = (\n              sizeof(T) * std::numeric_limits<unsigned char>::digits\n              - (is_signed<T>::value ? 1 : 0))\n              );\n      };\n  };\n\n  // here's the \"usable\" template\n  template <class T> struct digit_traits\n  {\n      typedef digit_traits_select<\n                ::std::numeric_limits<T>::is_specialized> selector;\n      typedef typename selector::template traits<T> traits;\n      BOOST_STATIC_CONSTANT(int, digits = traits::digits);\n  };\n#endif\n\n  // Template class integer_traits<Integer> -- traits of various integer types\n  // This should probably be rolled into boost::integer_traits one day, but I\n  // need it to work without <limits>\n  template <class Integer>\n  struct integer_traits\n  {\n# ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n   private:\n      typedef Integer integer_type;\n      typedef std::numeric_limits<integer_type> x;\n   public:\n      typedef typename\n      if_true<(int(x::is_signed)\n              && (!int(x::is_bounded)\n                 // digits is the number of no-sign bits\n                  || (int(x::digits) + 1 >= digit_traits<boost::intmax_t>::digits)))>::template then<\n        Integer,\n          \n      typename if_true<(int(x::digits) + 1 < digit_traits<signed int>::digits)>::template then<\n        signed int,\n\n      typename if_true<(int(x::digits) + 1 < digit_traits<signed long>::digits)>::template then<\n        signed long,\n\n   // else\n        intmax_t\n      >::type>::type>::type difference_type;\n#else\n      BOOST_STATIC_ASSERT(boost::is_integral<Integer>::value);\n\n      typedef typename\n      if_true<(sizeof(Integer) >= sizeof(intmax_t))>::template then<\n               \n        typename if_true<(is_signed<Integer>::value)>::template then<\n          Integer,\n          intmax_t\n        >::type,\n\n        typename if_true<(sizeof(Integer) < sizeof(std::ptrdiff_t))>::template then<\n          std::ptrdiff_t,\n          intmax_t\n        >::type\n      >::type difference_type;\n# endif\n  };\n\n  // Right now, only supports integers, but should be expanded.\n  template <class Number>\n  struct numeric_traits\n  {\n      typedef typename integer_traits<Number>::difference_type difference_type;\n  };\n\n  template <class Number>\n  typename numeric_traits<Number>::difference_type numeric_distance(Number x, Number y)\n  {\n      typedef typename numeric_traits<Number>::difference_type difference_type;\n      return difference_type(y) - difference_type(x);\n  }\n}}\n\n#endif // BOOST_NUMERIC_TRAITS_HPP_DWA20001901\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/ob_compressed_pair.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/utility for most recent version including documentation.\n//  see libs/utility/compressed_pair.hpp\n//\n/* Release notes:\n   20 Jan 2001:\n        Fixed obvious bugs (David Abrahams)\n   07 Oct 2000:\n      Added better single argument constructor support.\n   03 Oct 2000:\n      Added VC6 support (JM).\n   23rd July 2000:\n      Additional comments added. (JM)\n   Jan 2000:\n      Original version: this version crippled for use with crippled compilers\n      - John Maddock Jan 2000.\n*/\n\n\n#ifndef BOOST_OB_COMPRESSED_PAIR_HPP\n#define BOOST_OB_COMPRESSED_PAIR_HPP\n\n#include <algorithm>\n#ifndef BOOST_OBJECT_TYPE_TRAITS_HPP\n#include <boost/type_traits/object_traits.hpp>\n#endif\n#ifndef BOOST_SAME_TRAITS_HPP\n#include <boost/type_traits/same_traits.hpp>\n#endif\n#ifndef BOOST_CALL_TRAITS_HPP\n#include <boost/call_traits.hpp>\n#endif\n\nnamespace boost\n{\n#ifdef BOOST_MSVC6_MEMBER_TEMPLATES\n//\n// use member templates to emulate\n// partial specialisation.  Note that due to\n// problems with overload resolution with VC6\n// each of the compressed_pair versions that follow\n// have one template single-argument constructor\n// in place of two specific constructors:\n//\n\ntemplate <class T1, class T2>\nclass compressed_pair;\n\nnamespace detail{\n\ntemplate <class A, class T1, class T2>\nstruct best_conversion_traits\n{\n   typedef char one;\n   typedef char (&two)[2];\n   static A a;\n   static one test(T1);\n   static two test(T2);\n\n   enum { value = sizeof(test(a)) };\n};\n\ntemplate <int>\nstruct init_one;\n\ntemplate <>\nstruct init_one<1>\n{\n   template <class A, class T1, class T2>\n   static void init(const A& a, T1* p1, T2*)\n   {\n      *p1 = a;\n   }\n};\n\ntemplate <>\nstruct init_one<2>\n{\n   template <class A, class T1, class T2>\n   static void init(const A& a, T1*, T2* p2)\n   {\n      *p2 = a;\n   }\n};\n\n\n// T1 != T2, both non-empty\ntemplate <class T1, class T2>\nclass compressed_pair_0\n{\nprivate:\n   T1 _first;\n   T2 _second;\npublic:\n   typedef T1                                                 first_type;\n   typedef T2                                                 second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair_0() : _first(), _second() {}\n            compressed_pair_0(first_param_type x, second_param_type y) : _first(x), _second(y) {}\n   template <class A>\n   explicit compressed_pair_0(const A& val)\n   {\n      init_one<best_conversion_traits<A, T1, T2>::value>::init(val, &_first, &_second);\n   }\n   compressed_pair_0(const ::boost::compressed_pair<T1,T2>& x)\n      : _first(x.first()), _second(x.second()) {}\n\n#if 0\n  compressed_pair_0& operator=(const compressed_pair_0& x) {\n    cout << \"assigning compressed pair 0\" << endl;\n    _first = x._first;\n    _second = x._second;\n    cout << \"finished assigning compressed pair 0\" << endl;\n    return *this;\n  }\n#endif\n\n   first_reference       first()       { return _first; }\n   first_const_reference first() const { return _first; }\n\n   second_reference       second()       { return _second; }\n   second_const_reference second() const { return _second; }\n\n   void swap(compressed_pair_0& y)\n   {\n      using std::swap;\n      swap(_first, y._first);\n      swap(_second, y._second);\n   }\n};\n\n// T1 != T2, T2 empty\ntemplate <class T1, class T2>\nclass compressed_pair_1 : T2\n{\nprivate:\n   T1 _first;\npublic:\n   typedef T1                                                 first_type;\n   typedef T2                                                 second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair_1() : T2(), _first() {}\n            compressed_pair_1(first_param_type x, second_param_type y) : T2(y), _first(x) {}\n\n   template <class A>\n   explicit compressed_pair_1(const A& val)\n   {\n      init_one<best_conversion_traits<A, T1, T2>::value>::init(val, &_first, static_cast<T2*>(this));\n   }\n\n   compressed_pair_1(const ::boost::compressed_pair<T1,T2>& x)\n      : T2(x.second()), _first(x.first()) {}\n\n   first_reference       first()       { return _first; }\n   first_const_reference first() const { return _first; }\n\n   second_reference       second()       { return *this; }\n   second_const_reference second() const { return *this; }\n\n   void swap(compressed_pair_1& y)\n   {\n      // no need to swap empty base class:\n      using std::swap;\n      swap(_first, y._first);\n   }\n};\n\n// T1 != T2, T1 empty\ntemplate <class T1, class T2>\nclass compressed_pair_2 : T1\n{\nprivate:\n   T2 _second;\npublic:\n   typedef T1                                                 first_type;\n   typedef T2                                                 second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair_2() : T1(), _second() {}\n            compressed_pair_2(first_param_type x, second_param_type y) : T1(x), _second(y) {}\n   template <class A>\n   explicit compressed_pair_2(const A& val)\n   {\n      init_one<best_conversion_traits<A, T1, T2>::value>::init(val, static_cast<T1*>(this), &_second);\n   }\n   compressed_pair_2(const ::boost::compressed_pair<T1,T2>& x)\n      : T1(x.first()), _second(x.second()) {}\n\n#if 0\n  compressed_pair_2& operator=(const compressed_pair_2& x) {\n    cout << \"assigning compressed pair 2\" << endl;\n    T1::operator=(x);\n    _second = x._second;\n    cout << \"finished assigning compressed pair 2\" << endl;\n    return *this;\n  }\n#endif\n   first_reference       first()       { return *this; }\n   first_const_reference first() const { return *this; }\n\n   second_reference       second()       { return _second; }\n   second_const_reference second() const { return _second; }\n\n   void swap(compressed_pair_2& y)\n   {\n      // no need to swap empty base class:\n      using std::swap;\n      swap(_second, y._second);\n   }\n};\n\n// T1 != T2, both empty\ntemplate <class T1, class T2>\nclass compressed_pair_3 : T1, T2\n{\npublic:\n   typedef T1                                                 first_type;\n   typedef T2                                                 second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair_3() : T1(), T2() {}\n            compressed_pair_3(first_param_type x, second_param_type y) : T1(x), T2(y) {}\n   template <class A>\n   explicit compressed_pair_3(const A& val)\n   {\n      init_one<best_conversion_traits<A, T1, T2>::value>::init(val, static_cast<T1*>(this), static_cast<T2*>(this));\n   }\n   compressed_pair_3(const ::boost::compressed_pair<T1,T2>& x)\n      : T1(x.first()), T2(x.second()) {}\n\n   first_reference       first()       { return *this; }\n   first_const_reference first() const { return *this; }\n\n   second_reference       second()       { return *this; }\n   second_const_reference second() const { return *this; }\n\n   void swap(compressed_pair_3& y)\n   {\n      // no need to swap empty base classes:\n   }\n};\n\n// T1 == T2, and empty\ntemplate <class T1, class T2>\nclass compressed_pair_4 : T1\n{\npublic:\n   typedef T1                                                 first_type;\n   typedef T2                                                 second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair_4() : T1() {}\n            compressed_pair_4(first_param_type x, second_param_type y) : T1(x), m_second(y) {}\n   // only one single argument constructor since T1 == T2\n   explicit compressed_pair_4(first_param_type x) : T1(x), m_second(x) {}\n   compressed_pair_4(const ::boost::compressed_pair<T1,T2>& x)\n      : T1(x.first()), m_second(x.second()) {}\n\n   first_reference       first()       { return *this; }\n   first_const_reference first() const { return *this; }\n\n   second_reference       second()       { return m_second; }\n   second_const_reference second() const { return m_second; }\n\n   void swap(compressed_pair_4& y)\n   {\n      // no need to swap empty base classes:\n   }\nprivate:\n   T2 m_second;\n};\n\n// T1 == T2, not empty\ntemplate <class T1, class T2>\nclass compressed_pair_5\n{\nprivate:\n   T1 _first;\n   T2 _second;\npublic:\n   typedef T1                                                 first_type;\n   typedef T2                                                 second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair_5() : _first(), _second() {}\n            compressed_pair_5(first_param_type x, second_param_type y) : _first(x), _second(y) {}\n   // only one single argument constructor since T1 == T2\n   explicit compressed_pair_5(first_param_type x) : _first(x), _second(x) {}\n   compressed_pair_5(const ::boost::compressed_pair<T1,T2>& c) \n      : _first(c.first()), _second(c.second()) {}\n\n   first_reference       first()       { return _first; }\n   first_const_reference first() const { return _first; }\n\n   second_reference       second()       { return _second; }\n   second_const_reference second() const { return _second; }\n\n   void swap(compressed_pair_5& y)\n   {\n      using std::swap;\n      swap(_first, y._first);\n      swap(_second, y._second);\n   }\n};\n\ntemplate <bool e1, bool e2, bool same>\nstruct compressed_pair_chooser\n{\n   template <class T1, class T2>\n   struct rebind\n   {\n      typedef compressed_pair_0<T1, T2> type;\n   };\n};\n\ntemplate <>\nstruct compressed_pair_chooser<false, true, false>\n{\n   template <class T1, class T2>\n   struct rebind\n   {\n      typedef compressed_pair_1<T1, T2> type;\n   };\n};\n\ntemplate <>\nstruct compressed_pair_chooser<true, false, false>\n{\n   template <class T1, class T2>\n   struct rebind\n   {\n      typedef compressed_pair_2<T1, T2> type;\n   };\n};\n\ntemplate <>\nstruct compressed_pair_chooser<true, true, false>\n{\n   template <class T1, class T2>\n   struct rebind\n   {\n      typedef compressed_pair_3<T1, T2> type;\n   };\n};\n\ntemplate <>\nstruct compressed_pair_chooser<true, true, true>\n{\n   template <class T1, class T2>\n   struct rebind\n   {\n      typedef compressed_pair_4<T1, T2> type;\n   };\n};\n\ntemplate <>\nstruct compressed_pair_chooser<false, false, true>\n{\n   template <class T1, class T2>\n   struct rebind\n   {\n      typedef compressed_pair_5<T1, T2> type;\n   };\n};\n\ntemplate <class T1, class T2>\nstruct compressed_pair_traits\n{\nprivate:\n   typedef compressed_pair_chooser<is_empty<T1>::value, is_empty<T2>::value, is_same<T1,T2>::value> chooser;\n   typedef typename chooser::template rebind<T1, T2> bound_type;\npublic:\n   typedef typename bound_type::type type;\n};\n\n} // namespace detail\n\ntemplate <class T1, class T2>\nclass compressed_pair : public detail::compressed_pair_traits<T1, T2>::type\n{\nprivate:\n   typedef typename detail::compressed_pair_traits<T1, T2>::type base_type;\npublic:\n   typedef T1                                                 first_type;\n   typedef T2                                                 second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair() : base_type() {}\n            compressed_pair(first_param_type x, second_param_type y) : base_type(x, y) {}\n   template <class A>\n   explicit compressed_pair(const A& x) : base_type(x){}\n\n   first_reference       first()       { return base_type::first(); }\n   first_const_reference first() const { return base_type::first(); }\n\n   second_reference       second()       { return base_type::second(); }\n   second_const_reference second() const { return base_type::second(); }\n};\n\ntemplate <class T1, class T2>\ninline void swap(compressed_pair<T1, T2>& x, compressed_pair<T1, T2>& y)\n{\n   x.swap(y);\n}\n\n#else\n// no partial specialisation, no member templates:\n\ntemplate <class T1, class T2>\nclass compressed_pair\n{\nprivate:\n   T1 _first;\n   T2 _second;\npublic:\n   typedef T1                                                 first_type;\n   typedef T2                                                 second_type;\n   typedef typename call_traits<first_type>::param_type       first_param_type;\n   typedef typename call_traits<second_type>::param_type      second_param_type;\n   typedef typename call_traits<first_type>::reference        first_reference;\n   typedef typename call_traits<second_type>::reference       second_reference;\n   typedef typename call_traits<first_type>::const_reference  first_const_reference;\n   typedef typename call_traits<second_type>::const_reference second_const_reference;\n\n            compressed_pair() : _first(), _second() {}\n            compressed_pair(first_param_type x, second_param_type y) : _first(x), _second(y) {}\n   explicit compressed_pair(first_param_type x) : _first(x), _second() {}\n   // can't define this in case T1 == T2:\n   // explicit compressed_pair(second_param_type y) : _first(), _second(y) {}\n\n   first_reference       first()       { return _first; }\n   first_const_reference first() const { return _first; }\n\n   second_reference       second()       { return _second; }\n   second_const_reference second() const { return _second; }\n\n   void swap(compressed_pair& y)\n   {\n      using std::swap;\n      swap(_first, y._first);\n      swap(_second, y._second);\n   }\n};\n\ntemplate <class T1, class T2>\ninline void swap(compressed_pair<T1, T2>& x, compressed_pair<T1, T2>& y)\n{\n   x.swap(y);\n}\n\n#endif\n\n} // boost\n\n#endif // BOOST_OB_COMPRESSED_PAIR_HPP\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/quick_allocator.hpp",
    "content": "#ifndef BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED\n#define BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/quick_allocator.hpp\n//\n//  Copyright (c) 2003 David Abrahams\n//  Copyright (c) 2003 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/smart_ptr/detail/quick_allocator.hpp>\n\n#endif  // #ifndef BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/reference_content.hpp",
    "content": "//-----------------------------------------------------------------------------\n// boost detail/reference_content.hpp header file\n// See http://www.boost.org for updates, documentation, and revision history.\n//-----------------------------------------------------------------------------\n//\n// Copyright (c) 2003\n// Eric Friedman\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_DETAIL_REFERENCE_CONTENT_HPP\n#define BOOST_DETAIL_REFERENCE_CONTENT_HPP\n\n#include \"boost/config.hpp\"\n\n#   include \"boost/mpl/bool.hpp\"\n#   include \"boost/type_traits/has_nothrow_copy.hpp\"\n\n#include \"boost/mpl/void.hpp\"\n\nnamespace boost {\n\nnamespace detail {\n\n///////////////////////////////////////////////////////////////////////////////\n// (detail) class template reference_content\n//\n// Non-Assignable wrapper for references.\n//\ntemplate <typename RefT>\nclass reference_content\n{\nprivate: // representation\n\n    RefT content_;\n\npublic: // structors\n\n    ~reference_content()\n    {\n    }\n\n    reference_content(RefT r)\n        : content_( r )\n    {\n    }\n\n    reference_content(const reference_content& operand)\n        : content_( operand.content_ )\n    {\n    }\n\nprivate: // non-Assignable\n\n    reference_content& operator=(const reference_content&);\n\npublic: // queries\n\n    RefT get() const\n    {\n        return content_;\n    }\n\n};\n\n///////////////////////////////////////////////////////////////////////////////\n// (detail) metafunction make_reference_content\n//\n// Wraps with reference_content if specified type is reference.\n//\n\ntemplate <typename T = mpl::void_> struct make_reference_content;\n\n\ntemplate <typename T>\nstruct make_reference_content\n{\n    typedef T type;\n};\n\ntemplate <typename T>\nstruct make_reference_content< T& >\n{\n    typedef reference_content<T&> type;\n};\n\n\ntemplate <>\nstruct make_reference_content< mpl::void_ >\n{\n    template <typename T>\n    struct apply\n        : make_reference_content<T>\n    {\n    };\n\n    typedef mpl::void_ type;\n};\n\n} // namespace detail\n\n///////////////////////////////////////////////////////////////////////////////\n// reference_content<T&> type traits specializations\n//\n\n\ntemplate <typename T>\nstruct has_nothrow_copy<\n      ::boost::detail::reference_content< T& >\n    >\n    : mpl::true_\n{\n};\n\n\n} // namespace boost\n\n#endif // BOOST_DETAIL_REFERENCE_CONTENT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/scoped_enum_emulation.hpp",
    "content": "/*\n * Copyright (c) 2014 Andrey Semashev\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_DETAIL_SCOPED_ENUM_EMULATION_HPP\n#define BOOST_DETAIL_SCOPED_ENUM_EMULATION_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/scoped_enum.hpp instead.\n\n#include <boost/core/scoped_enum.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/select_type.hpp",
    "content": "// (C) Copyright David Abrahams 2001.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org for most recent version including documentation.\n\n// Revision History\n// 09 Feb 01  Applied John Maddock's Borland patch Moving <true>\n//            specialization to unspecialized template (David Abrahams)\n// 06 Feb 01  Created (David Abrahams)\n\n#ifndef SELECT_TYPE_DWA20010206_HPP\n# define SELECT_TYPE_DWA20010206_HPP\n\nnamespace boost { namespace detail {\n\n  // Template class if_true -- select among 2 types based on a bool constant expression\n  // Usage:\n  //   typename if_true<(bool_const_expression)>::template then<true_type, false_type>::type\n\n  // HP aCC cannot deal with missing names for template value parameters\n  template <bool b> struct if_true\n  {\n      template <class T, class F>\n      struct then { typedef T type; };\n  };\n\n  template <>\n  struct if_true<false>\n  {\n      template <class T, class F>\n      struct then { typedef F type; };\n  };\n}}\n#endif // SELECT_TYPE_DWA20010206_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/sp_typeinfo.hpp",
    "content": "#ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED\n#define BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_typeinfo.hpp\n//\n//  Deprecated, please use boost/core/typeinfo.hpp\n//\n//  Copyright 2007 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n#include <boost/core/typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntypedef boost::core::typeinfo sp_typeinfo;\n\n} // namespace detail\n\n} // namespace boost\n\n#define BOOST_SP_TYPEID(T) BOOST_CORE_TYPEID(T)\n\n#endif  // #ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/templated_streams.hpp",
    "content": "//-----------------------------------------------------------------------------\n// boost detail/templated_streams.hpp header file\n// See http://www.boost.org for updates, documentation, and revision history.\n//-----------------------------------------------------------------------------\n//\n// Copyright (c) 2003\n// Eric Friedman\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_DETAIL_TEMPLATED_STREAMS_HPP\n#define BOOST_DETAIL_TEMPLATED_STREAMS_HPP\n\n#include \"boost/config.hpp\"\n\n///////////////////////////////////////////////////////////////////////////////\n// (detail) BOOST_TEMPLATED_STREAM_* macros\n//\n// Provides workaround platforms without stream class templates.\n//\n\n#if !defined(BOOST_NO_STD_LOCALE)\n\n#define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) \\\n    template < typename E , typename T >\n\n#define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) \\\n    template < typename E , typename T , typename A >\n\n#define BOOST_TEMPLATED_STREAM_ARGS(E,T) \\\n    typename E , typename T \n\n#define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) \\\n    typename E , typename T , typename A \n\n#define BOOST_TEMPLATED_STREAM_COMMA        ,\n\n#define BOOST_TEMPLATED_STREAM_ELEM(E)      E\n#define BOOST_TEMPLATED_STREAM_TRAITS(T)    T\n#define BOOST_TEMPLATED_STREAM_ALLOC(A)     A\n\n#define BOOST_TEMPLATED_STREAM(X,E,T) \\\n    BOOST_JOIN(std::basic_,X)< E , T >\n\n#define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \\\n    BOOST_JOIN(std::basic_,X)< E , T , A >\n\n#else // defined(BOOST_NO_STD_LOCALE)\n\n#define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) /**/\n\n#define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) /**/\n\n#define BOOST_TEMPLATED_STREAM_ARGS(E,T) /**/\n\n#define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) /**/\n\n#define BOOST_TEMPLATED_STREAM_COMMA        /**/\n\n#define BOOST_TEMPLATED_STREAM_ELEM(E)      char\n#define BOOST_TEMPLATED_STREAM_TRAITS(T)    std::char_traits<char>\n#define BOOST_TEMPLATED_STREAM_ALLOC(A)     std::allocator<char>\n\n#define BOOST_TEMPLATED_STREAM(X,E,T) \\\n    std::X\n\n#define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \\\n    std::X\n\n#endif // BOOST_NO_STD_LOCALE\n\n#endif // BOOST_DETAIL_TEMPLATED_STREAMS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.hpp",
    "content": "// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu)\n// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu).\n// Distributed under the Boost Software License, Version 1.0. (See accompany-\n// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_UTF8_CODECVT_FACET_HPP\n#define BOOST_UTF8_CODECVT_FACET_HPP\n\n// MS compatible compilers support #pragma once\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8\n// utf8_codecvt_facet.hpp\n\n// This header defines class utf8_codecvt_facet, derived from \n// std::codecvt<wchar_t, char>, which can be used to convert utf8 data in\n// files into wchar_t strings in the application.\n//\n// The header is NOT STANDALONE, and is not to be included by the USER.\n// There are at least two libraries which want to use this functionality, and\n// we want to avoid code duplication. It would be possible to create utf8\n// library, but:\n// - this requires review process first\n// - in the case, when linking the a library which uses utf8 \n//   (say 'program_options'), user should also link to the utf8 library.\n//   This seems inconvenient, and asking a user to link to an unrevieved \n//   library is strange. \n// Until the above points are fixed, a library which wants to use utf8 must:\n// - include this header in one of it's headers or sources\n// - include the corresponding boost/detail/utf8_codecvt_facet.ipp file in one\n//   of its sources\n// - before including either file, the library must define\n//   - BOOST_UTF8_BEGIN_NAMESPACE to the namespace declaration that must be used\n//   - BOOST_UTF8_END_NAMESPACE to the code to close the previous namespace\n//     declaration.\n//   - BOOST_UTF8_DECL -- to the code which must be used for all 'exportable'\n//     symbols.\n//\n// For example, program_options library might contain:\n//    #define BOOST_UTF8_BEGIN_NAMESPACE <backslash character> \n//             namespace boost { namespace program_options {\n//    #define BOOST_UTF8_END_NAMESPACE }}\n//    #define BOOST_UTF8_DECL BOOST_PROGRAM_OPTIONS_DECL\n//    #include <boost/detail/utf8_codecvt_facet.ipp>\n//\n// Essentially, each library will have its own copy of utf8 code, in\n// different namespaces. \n\n// Note:(Robert Ramey).  I have made the following alterations in the original\n// code.\n// a) Rendered utf8_codecvt<wchar_t, char>  with using templates\n// b) Move longer functions outside class definition to prevent inlining\n// and make code smaller\n// c) added on a derived class to permit translation to/from current\n// locale to utf8\n\n//  See http://www.boost.org for updates, documentation, and revision history.\n\n// archives stored as text - note these ar templated on the basic\n// stream templates to accommodate wide (and other?) kind of characters\n//\n// note the fact that on libraries without wide characters, ostream is\n// is not a specialization of basic_ostream which in fact is not defined\n// in such cases.   So we can't use basic_ostream<OStream::char_type> but rather\n// use two template parameters\n//\n// utf8_codecvt_facet\n//   This is an implementation of a std::codecvt facet for translating \n//   from UTF-8 externally to UCS-4.  Note that this is not tied to\n//   any specific types in order to allow customization on platforms\n//   where wchar_t is not big enough.\n//\n// NOTES:  The current implementation jumps through some unpleasant hoops in\n// order to deal with signed character types.  As a std::codecvt_base::result,\n// it is necessary  for the ExternType to be convertible to unsigned  char.\n// I chose not to tie the extern_type explicitly to char. But if any combination\n// of types other than <wchar_t,char_t> is used, then std::codecvt must be\n// specialized on those types for this to work.\n\n#include <locale>\n#include <cwchar>   // for mbstate_t\n#include <cstddef>  // for std::size_t\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if defined(BOOST_NO_STDC_NAMESPACE)\nnamespace std {\n    using ::mbstate_t;\n    using ::size_t;\n}\n#endif\n\n// maximum lenght of a multibyte string\n#define MB_LENGTH_MAX 8\n\nBOOST_UTF8_BEGIN_NAMESPACE\n\n//----------------------------------------------------------------------------//\n//                                                                            //\n//                          utf8_codecvt_facet                                //\n//                                                                            //\n//            See utf8_codecvt_facet.ipp for the implementation.              //\n//----------------------------------------------------------------------------//\n\n\nstruct BOOST_UTF8_DECL utf8_codecvt_facet :\n    public std::codecvt<wchar_t, char, std::mbstate_t>  \n{\npublic:\n    explicit utf8_codecvt_facet(std::size_t no_locale_manage=0)\n        : std::codecvt<wchar_t, char, std::mbstate_t>(no_locale_manage) \n    {}\nprotected:\n    virtual std::codecvt_base::result do_in(\n        std::mbstate_t& state, \n        const char * from,\n        const char * from_end, \n        const char * & from_next,\n        wchar_t * to, \n        wchar_t * to_end, \n        wchar_t*& to_next\n    ) const;\n\n    virtual std::codecvt_base::result do_out(\n        std::mbstate_t & state,\n        const wchar_t * from,\n        const wchar_t * from_end,\n        const wchar_t*  & from_next,\n        char * to,\n        char * to_end,\n        char * & to_next\n    ) const;\n\n    bool invalid_continuing_octet(unsigned char octet_1) const {\n        return (octet_1 < 0x80|| 0xbf< octet_1);\n    }\n\n    bool invalid_leading_octet(unsigned char octet_1)   const {\n        return (0x7f < octet_1 && octet_1 < 0xc0) ||\n            (octet_1 > 0xfd);\n    }\n\n    // continuing octets = octets except for the leading octet\n    static unsigned int get_cont_octet_count(unsigned char lead_octet) {\n        return get_octet_count(lead_octet) - 1;\n    }\n\n    static unsigned int get_octet_count(unsigned char lead_octet);\n\n    // How many \"continuing octets\" will be needed for this word\n    // ==   total octets - 1.\n    int get_cont_octet_out_count(wchar_t word) const ;\n\n    virtual bool do_always_noconv() const BOOST_NOEXCEPT_OR_NOTHROW {\n        return false;\n    }\n\n    // UTF-8 isn't really stateful since we rewind on partial conversions\n    virtual std::codecvt_base::result do_unshift(\n        std::mbstate_t&,\n        char * from,\n        char * /*to*/,\n        char * & next\n    ) const {\n        next = from;\n        return ok;\n    }\n\n    virtual int do_encoding() const BOOST_NOEXCEPT_OR_NOTHROW {\n        const int variable_byte_external_encoding=0;\n        return variable_byte_external_encoding;\n    }\n\n    // How many char objects can I process to get <= max_limit\n    // wchar_t objects?\n    virtual int do_length(\n        const std::mbstate_t &,\n        const char * from,\n        const char * from_end, \n        std::size_t max_limit\n    ) const\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n    throw()\n#endif\n    ;\n    virtual int do_length(\n        std::mbstate_t & s,\n        const char * from,\n        const char * from_end, \n        std::size_t max_limit\n    ) const\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n    throw()\n#endif\n    {\n        return do_length(\n            const_cast<const std::mbstate_t &>(s),\n            from,\n            from_end,\n            max_limit\n        );\n    }\n    // Largest possible value do_length(state,from,from_end,1) could return.\n    virtual int do_max_length() const BOOST_NOEXCEPT_OR_NOTHROW {\n        return 6; // largest UTF-8 encoding of a UCS-4 character\n    }\n};\n\nBOOST_UTF8_END_NAMESPACE\n\n#endif // BOOST_UTF8_CODECVT_FACET_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.ipp",
    "content": "/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8\n// utf8_codecvt_facet.ipp\n\n// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu)\n// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). \n// Use, modification and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// Please see the comments in <boost/detail/utf8_codecvt_facet.hpp> to\n// learn how this file should be used.\n\n#include <boost/detail/utf8_codecvt_facet.hpp>\n\n#include <cstdlib> // for multi-byte converson routines\n#include <cassert>\n\n#include <boost/limits.hpp>\n#include <boost/config.hpp>\n\n// If we don't have wstring, then Unicode support \n// is not available anyway, so we don't need to even\n// compiler this file. This also fixes the problem\n// with mingw, which can compile this file, but will\n// generate link error when building DLL.\n#ifndef BOOST_NO_STD_WSTRING\n\nBOOST_UTF8_BEGIN_NAMESPACE\n\n/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8\n// implementation for wchar_t\n\n// Translate incoming UTF-8 into UCS-4\nstd::codecvt_base::result utf8_codecvt_facet::do_in(\n    std::mbstate_t& /*state*/, \n    const char * from,\n    const char * from_end, \n    const char * & from_next,\n    wchar_t * to, \n    wchar_t * to_end, \n    wchar_t * & to_next\n) const {\n    // Basic algorithm:  The first octet determines how many\n    // octets total make up the UCS-4 character.  The remaining\n    // \"continuing octets\" all begin with \"10\". To convert, subtract\n    // the amount that specifies the number of octets from the first\n    // octet.  Subtract 0x80 (1000 0000) from each continuing octet,\n    // then mash the whole lot together.  Note that each continuing\n    // octet only uses 6 bits as unique values, so only shift by\n    // multiples of 6 to combine.\n    while (from != from_end && to != to_end) {\n\n        // Error checking   on the first octet\n        if (invalid_leading_octet(*from)){\n            from_next = from;\n            to_next = to;\n            return std::codecvt_base::error;\n        }\n\n        // The first octet is   adjusted by a value dependent upon \n        // the number   of \"continuing octets\" encoding the character\n        const   int cont_octet_count = get_cont_octet_count(*from);\n        const   wchar_t octet1_modifier_table[] =   {\n            0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc\n        };\n\n        // The unsigned char conversion is necessary in case char is\n        // signed   (I learned this the hard way)\n        wchar_t ucs_result = \n            (unsigned char)(*from++) - octet1_modifier_table[cont_octet_count];\n\n        // Invariants   : \n        //   1) At the start of the loop,   'i' continuing characters have been\n        //    processed \n        //   2) *from   points to the next continuing character to be processed.\n        int i   = 0;\n        while(i != cont_octet_count && from != from_end) {\n\n            // Error checking on continuing characters\n            if (invalid_continuing_octet(*from)) {\n                from_next   = from;\n                to_next =   to;\n                return std::codecvt_base::error;\n            }\n\n            ucs_result *= (1 << 6); \n\n            // each continuing character has an extra (10xxxxxx)b attached to \n            // it that must be removed.\n            ucs_result += (unsigned char)(*from++) - 0x80;\n            ++i;\n        }\n\n        // If   the buffer ends with an incomplete unicode character...\n        if (from == from_end && i   != cont_octet_count) {\n            // rewind \"from\" to before the current character translation\n            from_next = from - (i+1); \n            to_next = to;\n            return std::codecvt_base::partial;\n        }\n        *to++   = ucs_result;\n    }\n    from_next = from;\n    to_next = to;\n\n    // Were we done converting or did we run out of destination space?\n    if(from == from_end) return std::codecvt_base::ok;\n    else return std::codecvt_base::partial;\n}\n\nstd::codecvt_base::result utf8_codecvt_facet::do_out(\n    std::mbstate_t& /*state*/, \n    const wchar_t *   from,\n    const wchar_t * from_end, \n    const wchar_t * & from_next,\n    char * to, \n    char * to_end, \n    char * & to_next\n) const\n{\n    // RG - consider merging this table with the other one\n    const wchar_t octet1_modifier_table[] = {\n        0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc\n    };\n\n    wchar_t max_wchar = (std::numeric_limits<wchar_t>::max)();\n    while (from != from_end && to != to_end) {\n\n        // Check for invalid UCS-4 character\n        if (*from  > max_wchar) {\n            from_next = from;\n            to_next = to;\n            return std::codecvt_base::error;\n        }\n\n        int cont_octet_count = get_cont_octet_out_count(*from);\n\n        // RG  - comment this formula better\n        int shift_exponent = (cont_octet_count) *   6;\n\n        // Process the first character\n        *to++ = static_cast<char>(octet1_modifier_table[cont_octet_count] +\n            (unsigned char)(*from / (1 << shift_exponent)));\n\n        // Process the continuation characters \n        // Invariants: At   the start of the loop:\n        //   1) 'i' continuing octets   have been generated\n        //   2) '*to'   points to the next location to place an octet\n        //   3) shift_exponent is   6 more than needed for the next octet\n        int i   = 0;\n        while   (i != cont_octet_count && to != to_end) {\n            shift_exponent -= 6;\n            *to++ = static_cast<char>(0x80 + ((*from / (1 << shift_exponent)) % (1 << 6)));\n            ++i;\n        }\n        // If   we filled up the out buffer before encoding the character\n        if(to   == to_end && i != cont_octet_count) {\n            from_next = from;\n            to_next = to - (i+1);\n            return std::codecvt_base::partial;\n        }\n        ++from;\n    }\n    from_next = from;\n    to_next = to;\n    // Were we done or did we run out of destination space\n    if(from == from_end) return std::codecvt_base::ok;\n    else return std::codecvt_base::partial;\n}\n\n// How many char objects can I process to get <= max_limit\n// wchar_t objects?\nint utf8_codecvt_facet::do_length(\n    const std::mbstate_t &,\n    const char * from,\n    const char * from_end, \n    std::size_t max_limit\n) const\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n        throw()\n#endif\n{ \n    // RG - this code is confusing!  I need a better way to express it.\n    // and test cases.\n\n    // Invariants:\n    // 1) last_octet_count has the size of the last measured character\n    // 2) char_count holds the number of characters shown to fit\n    // within the bounds so far (no greater than max_limit)\n    // 3) from_next points to the octet 'last_octet_count' before the\n    // last measured character.  \n    int last_octet_count=0;\n    std::size_t char_count = 0;\n    const char* from_next = from;\n    // Use \"<\" because the buffer may represent incomplete characters\n    while (from_next+last_octet_count <= from_end && char_count <= max_limit) {\n        from_next += last_octet_count;\n        last_octet_count = (get_octet_count(*from_next));\n        ++char_count;\n    }\n    return static_cast<int>(from_next-from_end);\n}\n\nunsigned int utf8_codecvt_facet::get_octet_count(\n    unsigned char   lead_octet\n){\n    // if the 0-bit (MSB) is 0, then 1 character\n    if (lead_octet <= 0x7f) return 1;\n\n    // Otherwise the count number of consecutive 1 bits starting at MSB\n//    assert(0xc0 <= lead_octet && lead_octet <= 0xfd);\n\n    if (0xc0 <= lead_octet && lead_octet <= 0xdf) return 2;\n    else if (0xe0 <= lead_octet && lead_octet <= 0xef) return 3;\n    else if (0xf0 <= lead_octet && lead_octet <= 0xf7) return 4;\n    else if (0xf8 <= lead_octet && lead_octet <= 0xfb) return 5;\n    else return 6;\n}\n\nnamespace detail {\n\ntemplate<std::size_t s>\nint get_cont_octet_out_count_impl(wchar_t word){\n    if (word < 0x80) {\n        return 0;\n    }\n    if (word < 0x800) {\n        return 1;\n    }\n    return 2;\n}\n\ntemplate<>\nint get_cont_octet_out_count_impl<4>(wchar_t word){\n    if (word < 0x80) {\n        return 0;\n    }\n    if (word < 0x800) {\n        return 1;\n    }\n\n    // Note that the following code will generate warnings on some platforms\n    // where wchar_t is defined as UCS2.  The warnings are superfluous as the\n    // specialization is never instantitiated with such compilers, but this\n    // can cause problems if warnings are being treated as errors, so we guard\n    // against that.  Including <boost/detail/utf8_codecvt_facet.hpp> as we do\n    // should be enough to get WCHAR_MAX defined.\n#if !defined(WCHAR_MAX)\n#   error WCHAR_MAX not defined!\n#endif\n    // cope with VC++ 7.1 or earlier having invalid WCHAR_MAX\n#if defined(_MSC_VER) && _MSC_VER <= 1310 // 7.1 or earlier\n    return 2;\n#elif WCHAR_MAX > 0x10000\n    \n   if (word < 0x10000) {\n        return 2;\n    }\n    if (word < 0x200000) {\n        return 3;\n    }\n    if (word < 0x4000000) {\n        return 4;\n    }\n    return 5;\n    \n#else\n    return 2;\n#endif\n}\n\n} // namespace detail\n\n// How many \"continuing octets\" will be needed for this word\n// ==   total octets - 1.\nint utf8_codecvt_facet::get_cont_octet_out_count(\n    wchar_t word\n) const {\n    return detail::get_cont_octet_out_count_impl<sizeof(wchar_t)>(word);\n}\nBOOST_UTF8_END_NAMESPACE\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/GetCurrentProcess.hpp",
    "content": "//  GetCurrentProcess.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP\n#define BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n// Windows CE define GetCurrentProcess as an inline function in kfuncs.h\n#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE )\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI GetCurrentProcess(BOOST_DETAIL_WINAPI_VOID);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\nusing ::GetCurrentProcess;\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/GetCurrentThread.hpp",
    "content": "//  GetCurrentThread.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP\n#define BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n// Windows CE define GetCurrentThread as an inline function in kfuncs.h\n#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE )\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI GetCurrentThread(BOOST_DETAIL_WINAPI_VOID);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\nusing ::GetCurrentThread;\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/GetLastError.hpp",
    "content": "//  GetLastError.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_GETLASTERROR_HPP\n#define BOOST_DETAIL_WINAPI_GETLASTERROR_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetLastError(BOOST_DETAIL_WINAPI_VOID);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\nusing ::GetLastError;\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_GETLASTERROR_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/GetProcessTimes.hpp",
    "content": "//  GetProcessTimes.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP\n#define BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP\n\n#include <boost/detail/winapi/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n// Windows CE does not define GetProcessTimes\n#if !defined( UNDER_CE )\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/detail/winapi/time.hpp>\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nGetProcessTimes(\n    boost::detail::winapi::HANDLE_ hProcess,\n    ::_FILETIME* lpCreationTime,\n    ::_FILETIME* lpExitTime,\n    ::_FILETIME* lpKernelTime,\n    ::_FILETIME* lpUserTime);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\nBOOST_FORCEINLINE BOOL_ GetProcessTimes(\n    HANDLE_ hProcess,\n    LPFILETIME_ lpCreationTime,\n    LPFILETIME_ lpExitTime,\n    LPFILETIME_ lpKernelTime,\n    LPFILETIME_ lpUserTime)\n{\n    return ::GetProcessTimes(\n        hProcess,\n        reinterpret_cast< ::_FILETIME* >(lpCreationTime),\n        reinterpret_cast< ::_FILETIME* >(lpExitTime),\n        reinterpret_cast< ::_FILETIME* >(lpKernelTime),\n        reinterpret_cast< ::_FILETIME* >(lpUserTime));\n}\n\n}\n}\n}\n\n#endif // !defined( UNDER_CE )\n#endif // BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/GetThreadTimes.hpp",
    "content": "//  GetThreadTimes.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP\n#define BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/detail/winapi/time.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nGetThreadTimes(\n    boost::detail::winapi::HANDLE_ hThread,\n    ::_FILETIME* lpCreationTime,\n    ::_FILETIME* lpExitTime,\n    ::_FILETIME* lpKernelTime,\n    ::_FILETIME* lpUserTime);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\nBOOST_FORCEINLINE BOOL_ GetThreadTimes(\n    HANDLE_ hThread,\n    LPFILETIME_ lpCreationTime,\n    LPFILETIME_ lpExitTime,\n    LPFILETIME_ lpKernelTime,\n    LPFILETIME_ lpUserTime)\n{\n    return ::GetThreadTimes(\n        hThread,\n        reinterpret_cast< ::_FILETIME* >(lpCreationTime),\n        reinterpret_cast< ::_FILETIME* >(lpExitTime),\n        reinterpret_cast< ::_FILETIME* >(lpKernelTime),\n        reinterpret_cast< ::_FILETIME* >(lpUserTime));\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/apc.hpp",
    "content": "//  apc.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_APC_HPP\n#define BOOST_DETAIL_WINAPI_APC_HPP\n\n#include <boost/detail/winapi/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\ntypedef boost::detail::winapi::VOID_\n(NTAPI *PAPCFUNC)(boost::detail::winapi::ULONG_PTR_ Parameter);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nQueueUserAPC(\n    PAPCFUNC pfnAPC,\n    boost::detail::winapi::HANDLE_ hThread,\n    boost::detail::winapi::ULONG_PTR_ dwData);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\ntypedef ::PAPCFUNC PAPCFUNC_;\nusing ::QueueUserAPC;\n}\n}\n}\n\n#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4\n\n#endif // BOOST_DETAIL_WINAPI_APC_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/basic_types.hpp",
    "content": "//  basic_types.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n#ifndef BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP\n#define BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP\n\n#include <cstdarg>\n#include <boost/cstdint.hpp>\n#include <boost/detail/winapi/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if defined( BOOST_USE_WINDOWS_H )\n# include <windows.h>\n#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) ||  defined(__CYGWIN__)\n# include <winerror.h>\n# ifdef UNDER_CE\n#  ifndef WINAPI\n#   ifndef _WIN32_WCE_EMULATION\n#    define WINAPI  __cdecl     // Note this doesn't match the desktop definition\n#   else\n#    define WINAPI  __stdcall\n#   endif\n#  endif\n// Windows CE defines a few functions as inline functions in kfuncs.h\ntypedef int BOOL;\ntypedef unsigned long DWORD;\ntypedef void* HANDLE;\n#  include <kfuncs.h>\n# else\n#  ifndef WINAPI\n#   define WINAPI  __stdcall\n#  endif\n# endif\n# ifndef NTAPI\n#  define NTAPI __stdcall\n# endif\n#else\n# error \"Win32 functions not available\"\n#endif\n\n#ifndef NO_STRICT\n#ifndef STRICT\n#define STRICT 1\n#endif\n#endif\n\n#if defined(STRICT)\n#define BOOST_DETAIL_WINAPI_DECLARE_HANDLE(x) struct x##__; typedef struct x##__ *x\n#else\n#define BOOST_DETAIL_WINAPI_DECLARE_HANDLE(x) typedef void* x\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nunion _LARGE_INTEGER;\nstruct _SECURITY_ATTRIBUTES;\nBOOST_DETAIL_WINAPI_DECLARE_HANDLE(HINSTANCE);\ntypedef HINSTANCE HMODULE;\n}\n#endif\n\n#if defined(__GNUC__)\n#define BOOST_DETAIL_WINAPI_MAY_ALIAS __attribute__ ((__may_alias__))\n#else\n#define BOOST_DETAIL_WINAPI_MAY_ALIAS\n#endif\n\n// MinGW64 gcc 4.8.2 fails to compile function declarations with boost::detail::winapi::VOID_ arguments even though\n// the typedef expands to void. In Windows SDK, VOID is a macro which unfolds to void. We use our own macro in such cases.\n#define BOOST_DETAIL_WINAPI_VOID void\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n#if defined( BOOST_USE_WINDOWS_H )\n\ntypedef ::BOOL BOOL_;\ntypedef ::PBOOL PBOOL_;\ntypedef ::LPBOOL LPBOOL_;\ntypedef ::BOOLEAN BOOLEAN_;\ntypedef ::PBOOLEAN PBOOLEAN_;\ntypedef ::BYTE BYTE_;\ntypedef ::PBYTE PBYTE_;\ntypedef ::LPBYTE LPBYTE_;\ntypedef ::WORD WORD_;\ntypedef ::PWORD PWORD_;\ntypedef ::LPWORD LPWORD_;\ntypedef ::DWORD DWORD_;\ntypedef ::PDWORD PDWORD_;\ntypedef ::LPDWORD LPDWORD_;\ntypedef ::HANDLE HANDLE_;\ntypedef ::PHANDLE PHANDLE_;\ntypedef ::INT INT_;\ntypedef ::PINT PINT_;\ntypedef ::LPINT LPINT_;\ntypedef ::UINT UINT_;\ntypedef ::PUINT PUINT_;\ntypedef ::LONG LONG_;\ntypedef ::PLONG PLONG_;\ntypedef ::LPLONG LPLONG_;\ntypedef ::ULONG ULONG_;\ntypedef ::PULONG PULONG_;\ntypedef ::LONGLONG LONGLONG_;\ntypedef ::ULONGLONG ULONGLONG_;\ntypedef ::INT_PTR INT_PTR_;\ntypedef ::UINT_PTR UINT_PTR_;\ntypedef ::LONG_PTR LONG_PTR_;\ntypedef ::ULONG_PTR ULONG_PTR_;\ntypedef ::DWORD_PTR DWORD_PTR_;\ntypedef ::PDWORD_PTR PDWORD_PTR_;\ntypedef ::SIZE_T SIZE_T_;\ntypedef ::PSIZE_T PSIZE_T_;\ntypedef ::SSIZE_T SSIZE_T_;\ntypedef ::PSSIZE_T PSSIZE_T_;\ntypedef VOID VOID_; // VOID is a macro\ntypedef ::PVOID PVOID_;\ntypedef ::LPVOID LPVOID_;\ntypedef ::LPCVOID LPCVOID_;\ntypedef ::CHAR CHAR_;\ntypedef ::LPSTR LPSTR_;\ntypedef ::LPCSTR LPCSTR_;\ntypedef ::WCHAR WCHAR_;\ntypedef ::LPWSTR LPWSTR_;\ntypedef ::LPCWSTR LPCWSTR_;\n\n#else // defined( BOOST_USE_WINDOWS_H )\n\ntypedef int BOOL_;\ntypedef BOOL_* PBOOL_;\ntypedef BOOL_* LPBOOL_;\ntypedef unsigned char BYTE_;\ntypedef BYTE_* PBYTE_;\ntypedef BYTE_* LPBYTE_;\ntypedef BYTE_ BOOLEAN_;\ntypedef BOOLEAN_* PBOOLEAN_;\ntypedef unsigned short WORD_;\ntypedef WORD_* PWORD_;\ntypedef WORD_* LPWORD_;\ntypedef unsigned long DWORD_;\ntypedef DWORD_* PDWORD_;\ntypedef DWORD_* LPDWORD_;\ntypedef void* HANDLE_;\ntypedef void** PHANDLE_;\n\ntypedef int INT_;\ntypedef INT_* PINT_;\ntypedef INT_* LPINT_;\ntypedef unsigned int UINT_;\ntypedef UINT_* PUINT_;\ntypedef long LONG_;\ntypedef LONG_* PLONG_;\ntypedef LONG_* LPLONG_;\ntypedef unsigned long ULONG_;\ntypedef ULONG_* PULONG_;\n\ntypedef boost::int64_t LONGLONG_;\ntypedef boost::uint64_t ULONGLONG_;\n\n# ifdef _WIN64\n#  if defined(__CYGWIN__)\ntypedef long INT_PTR_;\ntypedef unsigned long UINT_PTR_;\ntypedef long LONG_PTR_;\ntypedef unsigned long ULONG_PTR_;\n#  else\ntypedef __int64 INT_PTR_;\ntypedef unsigned __int64 UINT_PTR_;\ntypedef __int64 LONG_PTR_;\ntypedef unsigned __int64 ULONG_PTR_;\n#  endif\n# else\ntypedef int INT_PTR_;\ntypedef unsigned int UINT_PTR_;\ntypedef long LONG_PTR_;\ntypedef unsigned long ULONG_PTR_;\n# endif\n\ntypedef ULONG_PTR_ DWORD_PTR_, *PDWORD_PTR_;\ntypedef ULONG_PTR_ SIZE_T_, *PSIZE_T_;\ntypedef LONG_PTR_ SSIZE_T_, *PSSIZE_T_;\n\ntypedef void VOID_;\ntypedef void *PVOID_;\ntypedef void *LPVOID_;\ntypedef const void *LPCVOID_;\n\ntypedef char CHAR_;\ntypedef CHAR_ *LPSTR_;\ntypedef const CHAR_ *LPCSTR_;\n\ntypedef wchar_t WCHAR_;\ntypedef WCHAR_ *LPWSTR_;\ntypedef const WCHAR_ *LPCWSTR_;\n\n#endif // defined( BOOST_USE_WINDOWS_H )\n\ntypedef ::HMODULE HMODULE_;\n\ntypedef union BOOST_DETAIL_WINAPI_MAY_ALIAS _LARGE_INTEGER {\n    struct {\n        DWORD_ LowPart;\n        LONG_ HighPart;\n    } u;\n    LONGLONG_ QuadPart;\n} LARGE_INTEGER_, *PLARGE_INTEGER_;\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _SECURITY_ATTRIBUTES {\n    DWORD_  nLength;\n    LPVOID_ lpSecurityDescriptor;\n    BOOL_   bInheritHandle;\n} SECURITY_ATTRIBUTES_, *PSECURITY_ATTRIBUTES_, *LPSECURITY_ATTRIBUTES_;\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/condition_variable.hpp",
    "content": "//  condition_variable.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_CONDITION_VARIABLE_HPP\n#define BOOST_DETAIL_WINAPI_CONDITION_VARIABLE_HPP\n\n#include <boost/detail/winapi/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nstruct _RTL_CONDITION_VARIABLE;\nstruct _RTL_CRITICAL_SECTION;\nstruct _RTL_SRWLOCK;\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nInitializeConditionVariable(::_RTL_CONDITION_VARIABLE* ConditionVariable);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nWakeConditionVariable(::_RTL_CONDITION_VARIABLE* ConditionVariable);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nWakeAllConditionVariable(::_RTL_CONDITION_VARIABLE* ConditionVariable);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nSleepConditionVariableCS(\n    ::_RTL_CONDITION_VARIABLE* ConditionVariable,\n    ::_RTL_CRITICAL_SECTION* CriticalSection,\n    boost::detail::winapi::DWORD_ dwMilliseconds);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nSleepConditionVariableSRW(\n    ::_RTL_CONDITION_VARIABLE* ConditionVariable,\n    ::_RTL_SRWLOCK* SRWLock,\n    boost::detail::winapi::DWORD_ dwMilliseconds,\n    boost::detail::winapi::ULONG_ Flags);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _RTL_CONDITION_VARIABLE {\n    PVOID_ Ptr;\n} CONDITION_VARIABLE_, *PCONDITION_VARIABLE_;\nstruct _RTL_CRITICAL_SECTION;\nstruct _RTL_SRWLOCK;\n\nBOOST_FORCEINLINE VOID_ InitializeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable)\n{\n    ::InitializeConditionVariable(reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable));\n}\n\nBOOST_FORCEINLINE VOID_ WakeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable)\n{\n    ::WakeConditionVariable(reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable));\n}\n\nBOOST_FORCEINLINE VOID_ WakeAllConditionVariable(PCONDITION_VARIABLE_ ConditionVariable)\n{\n    ::WakeAllConditionVariable(reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable));\n}\n\nBOOST_FORCEINLINE BOOL_ SleepConditionVariableCS(\n    PCONDITION_VARIABLE_ ConditionVariable,\n    _RTL_CRITICAL_SECTION* CriticalSection,\n    DWORD_ dwMilliseconds)\n{\n    return ::SleepConditionVariableCS(\n        reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable),\n        reinterpret_cast< ::_RTL_CRITICAL_SECTION* >(CriticalSection),\n        dwMilliseconds);\n}\n\nBOOST_FORCEINLINE BOOL_ SleepConditionVariableSRW(\n    PCONDITION_VARIABLE_ ConditionVariable,\n    _RTL_SRWLOCK* SRWLock,\n    DWORD_ dwMilliseconds,\n    ULONG_ Flags)\n{\n    return ::SleepConditionVariableSRW(\n        reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable),\n        reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock),\n        dwMilliseconds,\n        Flags);\n}\n\n#if defined( BOOST_USE_WINDOWS_H )\nconst ULONG_ CONDITION_VARIABLE_LOCKMODE_SHARED_ = CONDITION_VARIABLE_LOCKMODE_SHARED;\n#else // defined( BOOST_USE_WINDOWS_H )\nconst ULONG_ CONDITION_VARIABLE_LOCKMODE_SHARED_ = 0x00000001;\n#endif // defined( BOOST_USE_WINDOWS_H )\n\nconst ULONG_ condition_variable_lockmode_shared = CONDITION_VARIABLE_LOCKMODE_SHARED_;\n\n}\n}\n}\n\n#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n\n#endif // BOOST_DETAIL_WINAPI_CONDITION_VARIABLE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/config.hpp",
    "content": "//  config.hpp  --------------------------------------------------------------//\n\n//  Copyright 2013 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_\n#define BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_\n\n#include <boost/config.hpp>\n#if defined __MINGW32__\n#include <_mingw.h>\n#endif\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n// BOOST_WINAPI_IS_MINGW indicates that the target Windows SDK is provided by MinGW (http://mingw.org/).\n// BOOST_WINAPI_IS_MINGW_W64 indicates that the target Windows SDK is provided by MinGW-w64 (http://mingw-w64.org).\n#if defined __MINGW32__\n#if defined __MINGW64_VERSION_MAJOR\n#define BOOST_WINAPI_IS_MINGW_W64\n#else\n#define BOOST_WINAPI_IS_MINGW\n#endif\n#endif\n\n// These constants reflect _WIN32_WINNT_* macros from sdkddkver.h\n// See also: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745%28v=vs.85%29.aspx#setting_winver_or__win32_winnt\n#define BOOST_WINAPI_VERSION_NT4 0x0400\n#define BOOST_WINAPI_VERSION_WIN2K 0x0500\n#define BOOST_WINAPI_VERSION_WINXP 0x0501\n#define BOOST_WINAPI_VERSION_WS03 0x0502\n#define BOOST_WINAPI_VERSION_WIN6 0x0600\n#define BOOST_WINAPI_VERSION_VISTA 0x0600\n#define BOOST_WINAPI_VERSION_WS08 0x0600\n#define BOOST_WINAPI_VERSION_LONGHORN 0x0600\n#define BOOST_WINAPI_VERSION_WIN7 0x0601\n#define BOOST_WINAPI_VERSION_WIN8 0x0602\n#define BOOST_WINAPI_VERSION_WINBLUE 0x0603\n#define BOOST_WINAPI_VERSION_WINTHRESHOLD 0x0A00\n#define BOOST_WINAPI_VERSION_WIN10 0x0A00\n\n#if !defined(BOOST_USE_WINAPI_VERSION)\n#if defined(_WIN32_WINNT)\n#define BOOST_USE_WINAPI_VERSION _WIN32_WINNT\n#elif defined(WINVER)\n#define BOOST_USE_WINAPI_VERSION WINVER\n#else\n// By default use Windows Vista API on compilers that support it and XP on the others\n#if (defined(_MSC_VER) && _MSC_VER <= 1400) || defined(BOOST_WINAPI_IS_MINGW)\n#define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WINXP\n#else\n#define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WIN6\n#endif\n#endif\n#endif\n\n#if defined(BOOST_USE_WINDOWS_H)\n// We have to define the version macros so that windows.h provides the necessary symbols\n#if !defined(_WIN32_WINNT)\n#define _WIN32_WINNT BOOST_USE_WINAPI_VERSION\n#endif\n#if !defined(WINVER)\n#define WINVER BOOST_USE_WINAPI_VERSION\n#endif\n#endif\n\n#endif // BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/critical_section.hpp",
    "content": "//  critical_section.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_CRITICAL_SECTION_HPP\n#define BOOST_DETAIL_WINAPI_CRITICAL_SECTION_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/detail/winapi/detail/cast_ptr.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\n\nextern \"C\" {\n#if !defined( BOOST_WINAPI_IS_MINGW )\nstruct _RTL_CRITICAL_SECTION;\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nInitializeCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nEnterCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nLeaveCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);\n\n#if BOOST_USE_WINAPI_VERSION >= 0x0403\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nInitializeCriticalSectionAndSpinCount(\n    ::_RTL_CRITICAL_SECTION* lpCriticalSection,\n    boost::detail::winapi::DWORD_ dwSpinCount);\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nInitializeCriticalSectionEx(\n    ::_RTL_CRITICAL_SECTION* lpCriticalSection,\n    boost::detail::winapi::DWORD_ dwSpinCount,\n    boost::detail::winapi::DWORD_ Flags);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nSetCriticalSectionSpinCount(\n    ::_RTL_CRITICAL_SECTION* lpCriticalSection,\n    boost::detail::winapi::DWORD_ dwSpinCount);\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nTryEnterCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nDeleteCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);\n\n#else // defined( BOOST_WINAPI_IS_MINGW )\n\n// MinGW uses a different name for the structure\nstruct _CRITICAL_SECTION;\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nInitializeCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nEnterCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nLeaveCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);\n\n#if BOOST_USE_WINAPI_VERSION >= 0x0403\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nInitializeCriticalSectionAndSpinCount(\n    ::_CRITICAL_SECTION* lpCriticalSection,\n    boost::detail::winapi::DWORD_ dwSpinCount);\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nInitializeCriticalSectionEx(\n    ::_CRITICAL_SECTION* lpCriticalSection,\n    boost::detail::winapi::DWORD_ dwSpinCount,\n    boost::detail::winapi::DWORD_ Flags);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nSetCriticalSectionSpinCount(\n    ::_CRITICAL_SECTION* lpCriticalSection,\n    boost::detail::winapi::DWORD_ dwSpinCount);\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nTryEnterCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nDeleteCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);\n\n#endif // defined( BOOST_WINAPI_IS_MINGW )\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\nstruct _RTL_CRITICAL_SECTION_DEBUG;\n\n#pragma pack(push, 8)\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _RTL_CRITICAL_SECTION {\n    _RTL_CRITICAL_SECTION_DEBUG* DebugInfo;\n    LONG_ LockCount;\n    LONG_ RecursionCount;\n    HANDLE_ OwningThread;\n    HANDLE_ LockSemaphore;\n    ULONG_PTR_ SpinCount;\n} CRITICAL_SECTION_, *PCRITICAL_SECTION_;\n\n#pragma pack(pop)\n\nBOOST_FORCEINLINE VOID_ InitializeCriticalSection(CRITICAL_SECTION_* lpCriticalSection)\n{\n    ::InitializeCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));\n}\n\nBOOST_FORCEINLINE VOID_ EnterCriticalSection(CRITICAL_SECTION_* lpCriticalSection)\n{\n    ::EnterCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));\n}\n\nBOOST_FORCEINLINE VOID_ LeaveCriticalSection(CRITICAL_SECTION_* lpCriticalSection)\n{\n    ::LeaveCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));\n}\n\n#if BOOST_USE_WINAPI_VERSION >= 0x0403\nBOOST_FORCEINLINE BOOL_ InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION_* lpCriticalSection, DWORD_ dwSpinCount)\n{\n    return ::InitializeCriticalSectionAndSpinCount(winapi::detail::cast_ptr(lpCriticalSection), dwSpinCount);\n}\n\n// CRITICAL_SECTION_NO_DEBUG_INFO is defined for WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)\nconst DWORD_ CRITICAL_SECTION_NO_DEBUG_INFO_ = 0x01000000;\nconst DWORD_ CRITICAL_SECTION_FLAG_NO_DEBUG_INFO_ = CRITICAL_SECTION_NO_DEBUG_INFO_;\nconst DWORD_ CRITICAL_SECTION_FLAG_DYNAMIC_SPIN_ = 0x02000000; // undocumented\nconst DWORD_ CRITICAL_SECTION_FLAG_STATIC_INIT_ = 0x04000000; // undocumented\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_FORCEINLINE BOOL_ InitializeCriticalSectionEx(CRITICAL_SECTION_* lpCriticalSection, DWORD_ dwSpinCount, DWORD_ Flags)\n{\n    return ::InitializeCriticalSectionEx(winapi::detail::cast_ptr(lpCriticalSection), dwSpinCount, Flags);\n}\n#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n\nBOOST_FORCEINLINE DWORD_ SetCriticalSectionSpinCount(CRITICAL_SECTION_* lpCriticalSection, DWORD_ dwSpinCount)\n{\n    return ::SetCriticalSectionSpinCount(winapi::detail::cast_ptr(lpCriticalSection), dwSpinCount);\n}\n#endif // BOOST_USE_WINAPI_VERSION >= 0x0403\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4\nBOOST_FORCEINLINE BOOL_ TryEnterCriticalSection(CRITICAL_SECTION_* lpCriticalSection)\n{\n    return ::TryEnterCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));\n}\n#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4\n\nBOOST_FORCEINLINE VOID_ DeleteCriticalSection(CRITICAL_SECTION_* lpCriticalSection)\n{\n    ::DeleteCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_CRITICAL_SECTION_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/crypt.hpp",
    "content": "//  crypt.hpp  --------------------------------------------------------------//\n\n//  Copyright 2014 Antony Polukhin\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_CRYPT_HPP\n#define BOOST_DETAIL_WINAPI_CRYPT_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/detail/winapi/detail/cast_ptr.hpp>\n#if defined( BOOST_USE_WINDOWS_H ) && defined( BOOST_WINAPI_IS_MINGW )\n// MinGW does not include this header as part of windows.h\n#include <wincrypt.h>\n#endif\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nnamespace boost { namespace detail { namespace winapi {\ntypedef ULONG_PTR_ HCRYPTPROV_;\n}}}\n\n// Some versions of MinGW (including the latest ones) contain buggy declarations of CryptEnumProvidersA and CryptEnumProvidersW.\n// We cannot detect those broken versions, and we can't include the system header because it's incomplete.\n// So below we duplicate the broken declarations here and work around the problem with cast_ptr. These declarations\n// will have to be removed when MinGW is fixed.\n\nextern \"C\" {\n#if !defined( BOOST_NO_ANSI_APIS )\n#if !defined( BOOST_WINAPI_IS_MINGW ) || !defined( UNICODE )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCryptEnumProvidersA(\n    boost::detail::winapi::DWORD_ dwIndex,\n    boost::detail::winapi::DWORD_ *pdwReserved,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ *pdwProvType,\n    boost::detail::winapi::LPSTR_ szProvName,\n    boost::detail::winapi::DWORD_ *pcbProvName);\n#else\n// Broken declaration in MinGW\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCryptEnumProvidersA(\n    boost::detail::winapi::DWORD_ dwIndex,\n    boost::detail::winapi::DWORD_ *pdwReserved,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ *pdwProvType,\n    boost::detail::winapi::LPWSTR_ szProvName,\n    boost::detail::winapi::DWORD_ *pcbProvName);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCryptAcquireContextA(\n    boost::detail::winapi::HCRYPTPROV_ *phProv,\n    boost::detail::winapi::LPCSTR_ pszContainer,\n    boost::detail::winapi::LPCSTR_ pszProvider,\n    boost::detail::winapi::DWORD_ dwProvType,\n    boost::detail::winapi::DWORD_ dwFlags);\n#endif // !defined( BOOST_NO_ANSI_APIS )\n\n#if !defined( BOOST_WINAPI_IS_MINGW ) || defined( UNICODE )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCryptEnumProvidersW(\n    boost::detail::winapi::DWORD_ dwIndex,\n    boost::detail::winapi::DWORD_ *pdwReserved,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ *pdwProvType,\n    boost::detail::winapi::LPWSTR_ szProvName,\n    boost::detail::winapi::DWORD_ *pcbProvName);\n#else\n// Broken declaration in MinGW\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCryptEnumProvidersW(\n    boost::detail::winapi::DWORD_ dwIndex,\n    boost::detail::winapi::DWORD_ *pdwReserved,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ *pdwProvType,\n    boost::detail::winapi::LPSTR_ szProvName,\n    boost::detail::winapi::DWORD_ *pcbProvName);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCryptAcquireContextW(\n    boost::detail::winapi::HCRYPTPROV_ *phProv,\n    boost::detail::winapi::LPCWSTR_ szContainer,\n    boost::detail::winapi::LPCWSTR_ szProvider,\n    boost::detail::winapi::DWORD_ dwProvType,\n    boost::detail::winapi::DWORD_ dwFlags);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCryptGenRandom(\n    boost::detail::winapi::HCRYPTPROV_ hProv,\n    boost::detail::winapi::DWORD_ dwLen,\n    boost::detail::winapi::BYTE_ *pbBuffer);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCryptReleaseContext(\n    boost::detail::winapi::HCRYPTPROV_ hProv,\n    boost::detail::winapi::DWORD_ dwFlags);\n}\n#endif // !defined( BOOST_USE_WINDOWS_H )\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\n#if defined( BOOST_USE_WINDOWS_H )\n\ntypedef ::HCRYPTPROV HCRYPTPROV_;\n\nconst DWORD_ PROV_RSA_FULL_         = PROV_RSA_FULL;\n\nconst DWORD_ CRYPT_VERIFYCONTEXT_   = CRYPT_VERIFYCONTEXT;\nconst DWORD_ CRYPT_NEWKEYSET_       = CRYPT_NEWKEYSET;\nconst DWORD_ CRYPT_DELETEKEYSET_    = CRYPT_DELETEKEYSET;\nconst DWORD_ CRYPT_MACHINE_KEYSET_  = CRYPT_MACHINE_KEYSET;\nconst DWORD_ CRYPT_SILENT_          = CRYPT_SILENT;\n\n#else\n\nconst DWORD_ PROV_RSA_FULL_         = 1;\n\nconst DWORD_ CRYPT_VERIFYCONTEXT_   = 0xF0000000;\nconst DWORD_ CRYPT_NEWKEYSET_       = 8;\nconst DWORD_ CRYPT_DELETEKEYSET_    = 16;\nconst DWORD_ CRYPT_MACHINE_KEYSET_  = 32;\nconst DWORD_ CRYPT_SILENT_          = 64;\n\n#endif\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::CryptEnumProvidersA;\nusing ::CryptAcquireContextA;\n#endif\nusing ::CryptEnumProvidersW;\nusing ::CryptAcquireContextW;\nusing ::CryptGenRandom;\nusing ::CryptReleaseContext;\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE BOOL_ crypt_enum_providers(\n    DWORD_ dwIndex,\n    DWORD_ *pdwReserved,\n    DWORD_ dwFlags,\n    DWORD_ *pdwProvType,\n    LPSTR_ szProvName,\n    DWORD_ *pcbProvName)\n{\n    return ::CryptEnumProvidersA(dwIndex, pdwReserved, dwFlags, pdwProvType, winapi::detail::cast_ptr(szProvName), pcbProvName);\n}\n\nBOOST_FORCEINLINE BOOL_ crypt_acquire_context(\n    HCRYPTPROV_ *phProv,\n    LPCSTR_ pszContainer,\n    LPCSTR_ pszProvider,\n    DWORD_ dwProvType,\n    DWORD_ dwFlags)\n{\n    return ::CryptAcquireContextA(phProv, pszContainer, pszProvider, dwProvType, dwFlags);\n}\n#endif\n\nBOOST_FORCEINLINE BOOL_ crypt_enum_providers(\n    DWORD_ dwIndex,\n    DWORD_ *pdwReserved,\n    DWORD_ dwFlags,\n    DWORD_ *pdwProvType,\n    LPWSTR_ szProvName,\n    DWORD_ *pcbProvName)\n{\n    return ::CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, winapi::detail::cast_ptr(szProvName), pcbProvName);\n}\n\nBOOST_FORCEINLINE BOOL_ crypt_acquire_context(\n    HCRYPTPROV_ *phProv,\n    LPCWSTR_ szContainer,\n    LPCWSTR_ szProvider,\n    DWORD_ dwProvType,\n    DWORD_ dwFlags)\n{\n    return ::CryptAcquireContextW(phProv, szContainer, szProvider, dwProvType, dwFlags);\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_CRYPT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/detail/cast_ptr.hpp",
    "content": "//  cast_ptr.hpp  --------------------------------------------------------------//\n\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_DETAIL_CAST_PTR_HPP\n#define BOOST_DETAIL_WINAPI_DETAIL_CAST_PTR_HPP\n\n#include <boost/detail/winapi/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\nnamespace detail {\n\n//! This class is used to automatically cast pointers to the type used in the current Windows SDK function declarations\nclass cast_ptr\n{\nprivate:\n    const void* m_p;\n\npublic:\n    explicit BOOST_FORCEINLINE cast_ptr(const void* p) BOOST_NOEXCEPT : m_p(p) {}\n    template< typename T >\n    BOOST_FORCEINLINE operator T* () const BOOST_NOEXCEPT { return (T*)m_p; }\n};\n\n}\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_DETAIL_CAST_PTR_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/directory_management.hpp",
    "content": "//  directory_management.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_DIRECTORY_MANAGEMENT_HPP\n#define BOOST_DETAIL_WINAPI_DIRECTORY_MANAGEMENT_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\n    CreateDirectoryA(boost::detail::winapi::LPCSTR_, ::_SECURITY_ATTRIBUTES*);\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\n    GetTempPathA(boost::detail::winapi::DWORD_ length, boost::detail::winapi::LPSTR_ buffer);\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\n    RemoveDirectoryA(boost::detail::winapi::LPCSTR_);\n#endif\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\n    CreateDirectoryW(boost::detail::winapi::LPCWSTR_, ::_SECURITY_ATTRIBUTES*);\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\n    GetTempPathW(boost::detail::winapi::DWORD_ length, boost::detail::winapi::LPWSTR_ buffer);\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\n    RemoveDirectoryW(boost::detail::winapi::LPCWSTR_);\n}    \n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::GetTempPathA;\nusing ::RemoveDirectoryA;\n#endif\nusing ::GetTempPathW;\nusing ::RemoveDirectoryW;\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE BOOL_ CreateDirectoryA(LPCSTR_ pPathName, PSECURITY_ATTRIBUTES_ pSecurityAttributes)\n{\n    return ::CreateDirectoryA(pPathName, reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(pSecurityAttributes));\n}\n#endif\n\nBOOST_FORCEINLINE BOOL_ CreateDirectoryW(LPCWSTR_ pPathName, PSECURITY_ATTRIBUTES_ pSecurityAttributes)\n{\n    return ::CreateDirectoryW(pPathName, reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(pSecurityAttributes));\n}\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE BOOL_ create_directory(LPCSTR_ pPathName, PSECURITY_ATTRIBUTES_ pSecurityAttributes)\n{\n    return ::CreateDirectoryA(pPathName, reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(pSecurityAttributes));\n}\nBOOST_FORCEINLINE DWORD_ get_temp_path(DWORD_ length, LPSTR_ buffer)\n{\n    return ::GetTempPathA(length, buffer);\n}\nBOOST_FORCEINLINE BOOL_ remove_directory(LPCSTR_ pPathName)\n{\n    return ::RemoveDirectoryA(pPathName);\n}\n#endif\n\nBOOST_FORCEINLINE BOOL_ create_directory(LPCWSTR_ pPathName, PSECURITY_ATTRIBUTES_ pSecurityAttributes)\n{\n    return ::CreateDirectoryW(pPathName, reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(pSecurityAttributes));\n}\nBOOST_FORCEINLINE DWORD_ get_temp_path(DWORD_ length, LPWSTR_ buffer)\n{\n    return ::GetTempPathW(length, buffer);\n}\nBOOST_FORCEINLINE BOOL_ remove_directory(LPCWSTR_ pPathName)\n{\n    return ::RemoveDirectoryW(pPathName);\n}\n\n} // namespace winapi\n} // namespace detail\n} // namespace boost\n\n#endif // BOOST_DETAIL_WINAPI_DIRECTORY_MANAGEMENT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/dll.hpp",
    "content": "//  dll.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2014 Renato Tegon Forti, Antony Polukhin\n//  Copyright 2015 Andrey Semashev\n//  Copyright 2015 Antony Polukhin\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_DLL_HPP\n#define BOOST_DETAIL_WINAPI_DLL_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nnamespace boost { namespace detail { namespace winapi {\n#ifdef _WIN64\ntypedef INT_PTR_ (WINAPI *FARPROC_)();\ntypedef INT_PTR_ (WINAPI *NEARPROC_)();\ntypedef INT_PTR_ (WINAPI *PROC_)();\n#else\ntypedef int (WINAPI *FARPROC_)();\ntypedef int (WINAPI *NEARPROC_)();\ntypedef int (WINAPI *PROC_)();\n#endif // _WIN64\n}}} // namespace boost::detail::winapi\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI\nLoadLibraryA(boost::detail::winapi::LPCSTR_ lpFileName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI\nLoadLibraryExA(\n    boost::detail::winapi::LPCSTR_ lpFileName,\n    boost::detail::winapi::HANDLE_ hFile,\n    boost::detail::winapi::DWORD_ dwFlags\n);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI\nGetModuleHandleA(boost::detail::winapi::LPCSTR_ lpFileName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nGetModuleFileNameA(\n    boost::detail::winapi::HMODULE_ hModule,\n    boost::detail::winapi::LPSTR_ lpFilename,\n    boost::detail::winapi::DWORD_ nSize\n);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI\nLoadLibraryW(boost::detail::winapi::LPCWSTR_ lpFileName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI\nLoadLibraryExW(\n    boost::detail::winapi::LPCWSTR_ lpFileName,\n    boost::detail::winapi::HANDLE_ hFile,\n    boost::detail::winapi::DWORD_ dwFlags\n);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI\nGetModuleHandleW(boost::detail::winapi::LPCWSTR_ lpFileName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nGetModuleFileNameW(\n    boost::detail::winapi::HMODULE_ hModule,\n    boost::detail::winapi::LPWSTR_ lpFilename,\n    boost::detail::winapi::DWORD_ nSize\n);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nFreeLibrary(boost::detail::winapi::HMODULE_ hModule);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::FARPROC_ WINAPI\nGetProcAddress(boost::detail::winapi::HMODULE_ hModule, boost::detail::winapi::LPCSTR_ lpProcName);\n\nstruct _MEMORY_BASIC_INFORMATION;\n\n#if !defined( BOOST_WINAPI_IS_MINGW )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::SIZE_T_ WINAPI\nVirtualQuery(\n    boost::detail::winapi::LPCVOID_ lpAddress,\n    ::_MEMORY_BASIC_INFORMATION* lpBuffer,\n    boost::detail::winapi::ULONG_PTR_ dwLength\n);\n#else // !defined( BOOST_WINAPI_IS_MINGW )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nVirtualQuery(\n    boost::detail::winapi::LPCVOID_ lpAddress,\n    ::_MEMORY_BASIC_INFORMATION* lpBuffer,\n    boost::detail::winapi::DWORD_ dwLength\n);\n#endif // !defined( BOOST_WINAPI_IS_MINGW )\n} // extern \"C\"\n#endif // #if !defined( BOOST_USE_WINDOWS_H )\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS MEMORY_BASIC_INFORMATION_ {\n    PVOID_  BaseAddress;\n    PVOID_  AllocationBase;\n    DWORD_  AllocationProtect;\n    SIZE_T_ RegionSize;\n    DWORD_  State;\n    DWORD_  Protect;\n    DWORD_  Type;\n} *PMEMORY_BASIC_INFORMATION_;\n\n#if defined( BOOST_USE_WINDOWS_H )\ntypedef ::FARPROC FARPROC_;\ntypedef ::NEARPROC NEARPROC_;\ntypedef ::PROC PROC_;\n\nconst DWORD_ DONT_RESOLVE_DLL_REFERENCES_           = DONT_RESOLVE_DLL_REFERENCES;\nconst DWORD_ LOAD_WITH_ALTERED_SEARCH_PATH_         = LOAD_WITH_ALTERED_SEARCH_PATH;\n#else // defined( BOOST_USE_WINDOWS_H )\nconst DWORD_ DONT_RESOLVE_DLL_REFERENCES_           = 0x00000001;\nconst DWORD_ LOAD_WITH_ALTERED_SEARCH_PATH_         = 0x00000008;\n#endif // defined( BOOST_USE_WINDOWS_H )\n\n// This one is not defined by MinGW\nconst DWORD_ LOAD_IGNORE_CODE_AUTHZ_LEVEL_          = 0x00000010;\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::LoadLibraryA;\nusing ::LoadLibraryExA;\nusing ::GetModuleHandleA;\nusing ::GetModuleFileNameA;\n#endif // !defined( BOOST_NO_ANSI_APIS )\nusing ::LoadLibraryW;\nusing ::LoadLibraryExW;\nusing ::GetModuleHandleW;\nusing ::GetModuleFileNameW;\nusing ::FreeLibrary;\nusing ::GetProcAddress;\n\nBOOST_FORCEINLINE SIZE_T_ VirtualQuery(LPCVOID_ lpAddress, MEMORY_BASIC_INFORMATION_* lpBuffer, ULONG_PTR_ dwLength)\n{\n    return ::VirtualQuery(lpAddress, reinterpret_cast< ::_MEMORY_BASIC_INFORMATION* >(lpBuffer), dwLength);\n}\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HMODULE_ load_library(LPCSTR_ lpFileName)\n{\n    return ::LoadLibraryA(lpFileName);\n}\n\nBOOST_FORCEINLINE HMODULE_ load_library_ex(LPCSTR_ lpFileName, HANDLE_ hFile, DWORD_ dwFlags)\n{\n    return ::LoadLibraryExA(lpFileName, hFile, dwFlags);\n}\n\nBOOST_FORCEINLINE HMODULE_ get_module_handle(LPCSTR_ lpFileName)\n{\n    return ::GetModuleHandleA(lpFileName);\n}\n\nBOOST_FORCEINLINE DWORD_ get_module_file_name(HMODULE_ hModule, LPSTR_ lpFilename, DWORD_ nSize)\n{\n    return ::GetModuleFileNameA(hModule, lpFilename, nSize);\n}\n#endif // #if !defined( BOOST_NO_ANSI_APIS )\n\nBOOST_FORCEINLINE HMODULE_ load_library(LPCWSTR_ lpFileName)\n{\n    return ::LoadLibraryW(lpFileName);\n}\n\nBOOST_FORCEINLINE HMODULE_ load_library_ex(LPCWSTR_ lpFileName, HANDLE_ hFile, DWORD_ dwFlags)\n{\n    return ::LoadLibraryExW(lpFileName, hFile, dwFlags);\n}\n\nBOOST_FORCEINLINE HMODULE_ get_module_handle(LPCWSTR_ lpFileName)\n{\n    return ::GetModuleHandleW(lpFileName);\n}\n\nBOOST_FORCEINLINE DWORD_ get_module_file_name(HMODULE_ hModule, LPWSTR_ lpFilename, DWORD_ nSize)\n{\n    return ::GetModuleFileNameW(hModule, lpFilename, nSize);\n}\n\n} // namespace winapi\n} // namespace detail\n} // namespace boost\n\n#endif // BOOST_DETAIL_WINAPI_DLL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/error_handling.hpp",
    "content": "//  error_handling.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_ERROR_HANDLING_HPP\n#define BOOST_DETAIL_WINAPI_ERROR_HANDLING_HPP\n\n#include <stdarg.h>\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/detail/winapi/GetLastError.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nFormatMessageA(\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::LPCVOID_ lpSource,\n    boost::detail::winapi::DWORD_ dwMessageId,\n    boost::detail::winapi::DWORD_ dwLanguageId,\n    boost::detail::winapi::LPSTR_ lpBuffer,\n    boost::detail::winapi::DWORD_ nSize,\n    va_list *Arguments);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nFormatMessageW(\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::LPCVOID_ lpSource,\n    boost::detail::winapi::DWORD_ dwMessageId,\n    boost::detail::winapi::DWORD_ dwLanguageId,\n    boost::detail::winapi::LPWSTR_ lpBuffer,\n    boost::detail::winapi::DWORD_ nSize,\n    va_list *Arguments);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\n#if defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ FORMAT_MESSAGE_ALLOCATE_BUFFER_= FORMAT_MESSAGE_ALLOCATE_BUFFER;\nconst DWORD_ FORMAT_MESSAGE_IGNORE_INSERTS_=  FORMAT_MESSAGE_IGNORE_INSERTS;\nconst DWORD_ FORMAT_MESSAGE_FROM_STRING_=     FORMAT_MESSAGE_FROM_STRING;\nconst DWORD_ FORMAT_MESSAGE_FROM_HMODULE_=    FORMAT_MESSAGE_FROM_HMODULE;\nconst DWORD_ FORMAT_MESSAGE_FROM_SYSTEM_=     FORMAT_MESSAGE_FROM_SYSTEM;\nconst DWORD_ FORMAT_MESSAGE_ARGUMENT_ARRAY_=  FORMAT_MESSAGE_ARGUMENT_ARRAY;\nconst DWORD_ FORMAT_MESSAGE_MAX_WIDTH_MASK_=  FORMAT_MESSAGE_MAX_WIDTH_MASK;\n\nconst WORD_ LANG_NEUTRAL_=                  LANG_NEUTRAL;\nconst WORD_ LANG_INVARIANT_=                LANG_INVARIANT;\n\nconst WORD_ SUBLANG_DEFAULT_=               SUBLANG_DEFAULT;    // user default\n\nBOOST_FORCEINLINE WORD_ MAKELANGID_(WORD_ p, WORD_ s)\n{\n    return MAKELANGID(p,s);\n}\n\n#else\n\nconst DWORD_ FORMAT_MESSAGE_ALLOCATE_BUFFER_= 0x00000100;\nconst DWORD_ FORMAT_MESSAGE_IGNORE_INSERTS_=  0x00000200;\nconst DWORD_ FORMAT_MESSAGE_FROM_STRING_=     0x00000400;\nconst DWORD_ FORMAT_MESSAGE_FROM_HMODULE_=    0x00000800;\nconst DWORD_ FORMAT_MESSAGE_FROM_SYSTEM_=     0x00001000;\nconst DWORD_ FORMAT_MESSAGE_ARGUMENT_ARRAY_=  0x00002000;\nconst DWORD_ FORMAT_MESSAGE_MAX_WIDTH_MASK_=  0x000000FF;\n\nconst WORD_ LANG_NEUTRAL_=                  0x00;\nconst WORD_ LANG_INVARIANT_=                0x7f;\n\nconst WORD_ SUBLANG_DEFAULT_=               0x01;    // user default\n\nBOOST_FORCEINLINE WORD_ MAKELANGID_(WORD_ p, WORD_ s)\n{\n    return ((((WORD_)(s)) << 10) | (WORD_)(p));\n}\n\n#endif\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::FormatMessageA;\n#endif\nusing ::FormatMessageW;\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE DWORD_ format_message(\n    DWORD_ dwFlags,\n    LPCVOID_ lpSource,\n    DWORD_ dwMessageId,\n    DWORD_ dwLanguageId,\n    LPSTR_ lpBuffer,\n    DWORD_ nSize,\n    va_list *Arguments)\n{\n    return ::FormatMessageA(dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments);\n}\n#endif\n\nBOOST_FORCEINLINE DWORD_ format_message(\n    DWORD_ dwFlags,\n    LPCVOID_ lpSource,\n    DWORD_ dwMessageId,\n    DWORD_ dwLanguageId,\n    LPWSTR_ lpBuffer,\n    DWORD_ nSize,\n    va_list *Arguments)\n{\n    return ::FormatMessageW(dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments);\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_ERROR_HANDLING_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/event.hpp",
    "content": "//  event.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_EVENT_HPP\n#define BOOST_DETAIL_WINAPI_EVENT_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/predef/platform.h>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\n#if !defined( BOOST_NO_ANSI_APIS )\n#if !defined( BOOST_PLAT_WINDOWS_RUNTIME_AVALIABLE )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateEventA(\n    ::_SECURITY_ATTRIBUTES* lpEventAttributes,\n    boost::detail::winapi::BOOL_ bManualReset,\n    boost::detail::winapi::BOOL_ bInitialState,\n    boost::detail::winapi::LPCSTR_ lpName);\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateEventExA(\n    ::_SECURITY_ATTRIBUTES *lpEventAttributes,\n    boost::detail::winapi::LPCSTR_ lpName,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ dwDesiredAccess);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenEventA(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCSTR_ lpName);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateEventW(\n    ::_SECURITY_ATTRIBUTES* lpEventAttributes,\n    boost::detail::winapi::BOOL_ bManualReset,\n    boost::detail::winapi::BOOL_ bInitialState,\n    boost::detail::winapi::LPCWSTR_ lpName);\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateEventExW(\n    ::_SECURITY_ATTRIBUTES *lpEventAttributes,\n    boost::detail::winapi::LPCWSTR_ lpName,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ dwDesiredAccess);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenEventW(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCWSTR_ lpName);\n\n// Windows CE define SetEvent/ResetEvent as inline functions in kfuncs.h\n#if !defined( UNDER_CE )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nSetEvent(boost::detail::winapi::HANDLE_ hEvent);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nResetEvent(boost::detail::winapi::HANDLE_ hEvent);\n#endif\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::OpenEventA;\n#endif\nusing ::OpenEventW;\nusing ::SetEvent;\nusing ::ResetEvent;\n\n#if defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ EVENT_ALL_ACCESS_ = EVENT_ALL_ACCESS;\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nconst DWORD_ CREATE_EVENT_INITIAL_SET_ = CREATE_EVENT_INITIAL_SET;\nconst DWORD_ CREATE_EVENT_MANUAL_RESET_ = CREATE_EVENT_MANUAL_RESET;\n#endif\n\n#else // defined( BOOST_USE_WINDOWS_H )\n    \nconst DWORD_ EVENT_ALL_ACCESS_ = 0x1F0003;\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nconst DWORD_ CREATE_EVENT_INITIAL_SET_ = 0x00000002;\nconst DWORD_ CREATE_EVENT_MANUAL_RESET_ = 0x00000001;\n#endif\n\n#endif // defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ event_all_access = EVENT_ALL_ACCESS_;\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nconst DWORD_ create_event_initial_set = CREATE_EVENT_INITIAL_SET_;\nconst DWORD_ create_event_manual_reset = CREATE_EVENT_MANUAL_RESET_;\n#endif\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ CreateEventA(SECURITY_ATTRIBUTES_* lpEventAttributes, BOOL_ bManualReset, BOOL_ bInitialState, LPCSTR_ lpName)\n{\n#if BOOST_PLAT_WINDOWS_RUNTIME && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n    const DWORD_ flags = (bManualReset ? create_event_manual_reset : 0u) | (bInitialState ? create_event_initial_set : 0u);\n    return ::CreateEventExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), lpName, flags, event_all_access); \n#else\n    return ::CreateEventA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), bManualReset, bInitialState, lpName);\n#endif\n}\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_FORCEINLINE HANDLE_ CreateEventExA(SECURITY_ATTRIBUTES_* lpEventAttributes, LPCSTR_ lpName, DWORD_ dwFlags, DWORD_ dwDesiredAccess)\n{\n    return ::CreateEventExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), lpName, dwFlags, dwDesiredAccess);\n}\n#endif\n#endif\n\nBOOST_FORCEINLINE HANDLE_ CreateEventW(SECURITY_ATTRIBUTES_* lpEventAttributes, BOOL_ bManualReset, BOOL_ bInitialState, LPCWSTR_ lpName)\n{\n#if BOOST_PLAT_WINDOWS_RUNTIME && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n    const DWORD_ flags = (bManualReset ? create_event_manual_reset : 0u) | (bInitialState ? create_event_initial_set : 0u);\n    return ::CreateEventExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), lpName, flags, event_all_access); \n#else\n    return ::CreateEventW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), bManualReset, bInitialState, lpName);\n#endif\n}\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_FORCEINLINE HANDLE_ CreateEventExW(SECURITY_ATTRIBUTES_* lpEventAttributes, LPCWSTR_ lpName, DWORD_ dwFlags, DWORD_ dwDesiredAccess)\n{\n    return ::CreateEventExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), lpName, dwFlags, dwDesiredAccess);\n}\n#endif\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ create_event(SECURITY_ATTRIBUTES_* lpEventAttributes, BOOL_ bManualReset, BOOL_ bInitialState, LPCSTR_ lpName)\n{\n    return winapi::CreateEventA(lpEventAttributes, bManualReset, bInitialState, lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ open_event(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName)\n{\n    return ::OpenEventA(dwDesiredAccess, bInheritHandle, lpName);\n}\n#endif\n\nBOOST_FORCEINLINE HANDLE_ create_event(SECURITY_ATTRIBUTES_* lpEventAttributes, BOOL_ bManualReset, BOOL_ bInitialState, LPCWSTR_ lpName)\n{\n    return winapi::CreateEventW(lpEventAttributes, bManualReset, bInitialState, lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ open_event(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName)\n{\n    return ::OpenEventW(dwDesiredAccess, bInheritHandle, lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ create_anonymous_event(SECURITY_ATTRIBUTES_* lpEventAttributes, BOOL_ bManualReset, BOOL_ bInitialState)\n{\n    return winapi::CreateEventW(lpEventAttributes, bManualReset, bInitialState, 0);\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_EVENT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/file_management.hpp",
    "content": "//  file_management.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_FILE_MANAGEMENT_HPP\n#define BOOST_DETAIL_WINAPI_FILE_MANAGEMENT_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/detail/winapi/time.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nstruct _OVERLAPPED;\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateFileA(\n    boost::detail::winapi::LPCSTR_ lpFileName,\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::DWORD_ dwShareMode,\n    ::_SECURITY_ATTRIBUTES* lpSecurityAttributes,\n    boost::detail::winapi::DWORD_ dwCreationDisposition,\n    boost::detail::winapi::DWORD_ dwFlagsAndAttributes,\n    boost::detail::winapi::HANDLE_ hTemplateFile);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nDeleteFileA(boost::detail::winapi::LPCSTR_ lpFileName);\n\nstruct _WIN32_FIND_DATAA;\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nFindFirstFileA(boost::detail::winapi::LPCSTR_ lpFileName, ::_WIN32_FIND_DATAA* lpFindFileData);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nFindNextFileA(boost::detail::winapi::HANDLE_ hFindFile, ::_WIN32_FIND_DATAA* lpFindFileData);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nMoveFileExA(\n    boost::detail::winapi::LPCSTR_ lpExistingFileName,\n    boost::detail::winapi::LPCSTR_ lpNewFileName,\n    boost::detail::winapi::DWORD_ dwFlags);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateFileW(\n    boost::detail::winapi::LPCWSTR_ lpFileName,\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::DWORD_ dwShareMode,\n    ::_SECURITY_ATTRIBUTES* lpSecurityAttributes,\n    boost::detail::winapi::DWORD_ dwCreationDisposition,\n    boost::detail::winapi::DWORD_ dwFlagsAndAttributes,\n    boost::detail::winapi::HANDLE_ hTemplateFile);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nDeleteFileW(boost::detail::winapi::LPCWSTR_ lpFileName);\n\nstruct _WIN32_FIND_DATAW;\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nFindFirstFileW(boost::detail::winapi::LPCWSTR_ lpFileName, ::_WIN32_FIND_DATAW* lpFindFileData);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nFindNextFileW(boost::detail::winapi::HANDLE_ hFindFile, ::_WIN32_FIND_DATAW* lpFindFileData);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nMoveFileExW(\n    boost::detail::winapi::LPCWSTR_ lpExistingFileName,\n    boost::detail::winapi::LPCWSTR_ lpNewFileName,\n    boost::detail::winapi::DWORD_ dwFlags);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nFindClose(boost::detail::winapi::HANDLE_ hFindFile);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nGetFileSizeEx(boost::detail::winapi::HANDLE_ hFile, ::_LARGE_INTEGER* lpFileSize);\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nSetFileValidData(boost::detail::winapi::HANDLE_ hFile, boost::detail::winapi::LONGLONG_ ValidDataLength);\n\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nSetEndOfFile(boost::detail::winapi::HANDLE_ hFile);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nLockFile(\n    boost::detail::winapi::HANDLE_ hFile,\n    boost::detail::winapi::DWORD_ dwFileOffsetLow,\n    boost::detail::winapi::DWORD_ dwFileOffsetHigh,\n    boost::detail::winapi::DWORD_ nNumberOfBytesToLockLow,\n    boost::detail::winapi::DWORD_ nNumberOfBytesToLockHigh);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nUnlockFile(\n    boost::detail::winapi::HANDLE_ hFile,\n    boost::detail::winapi::DWORD_ dwFileOffsetLow,\n    boost::detail::winapi::DWORD_ dwFileOffsetHigh,\n    boost::detail::winapi::DWORD_ nNumberOfBytesToUnlockLow,\n    boost::detail::winapi::DWORD_ nNumberOfBytesToUnlockHigh);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nLockFileEx(\n    boost::detail::winapi::HANDLE_ hFile,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ dwReserved,\n    boost::detail::winapi::DWORD_ nNumberOfBytesToLockLow,\n    boost::detail::winapi::DWORD_ nNumberOfBytesToLockHigh,\n    ::_OVERLAPPED* lpOverlapped);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nUnlockFileEx(\n    boost::detail::winapi::HANDLE_ hFile,\n    boost::detail::winapi::DWORD_ dwReserved,\n    boost::detail::winapi::DWORD_ nNumberOfBytesToUnlockLow,\n    boost::detail::winapi::DWORD_ nNumberOfBytesToUnlockHigh,\n    ::_OVERLAPPED* lpOverlapped);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nWriteFile(\n    boost::detail::winapi::HANDLE_ hFile,\n    boost::detail::winapi::LPCVOID_ lpBuffer,\n    boost::detail::winapi::DWORD_ nNumberOfBytesToWrite,\n    boost::detail::winapi::LPDWORD_ lpNumberOfBytesWritten,\n    ::_OVERLAPPED* lpOverlapped);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::DeleteFileA;\nusing ::MoveFileExA;\n#endif\n\nusing ::DeleteFileW;\nusing ::MoveFileExW;\n\nusing ::FindClose;\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP\n\nusing ::SetFileValidData;\n\n#endif\n\nusing ::SetEndOfFile;\nusing ::LockFile;\nusing ::UnlockFile;\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _OVERLAPPED {\n    ULONG_PTR_ Internal;\n    ULONG_PTR_ InternalHigh;\n    union {\n        struct {\n            DWORD_ Offset;\n            DWORD_ OffsetHigh;\n        };\n        PVOID_  Pointer;\n    };\n    HANDLE_    hEvent;\n} OVERLAPPED_, *LPOVERLAPPED_;\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ CreateFileA(\n    LPCSTR_ lpFileName,\n    DWORD_ dwDesiredAccess,\n    DWORD_ dwShareMode,\n    SECURITY_ATTRIBUTES_* lpSecurityAttributes,\n    DWORD_ dwCreationDisposition,\n    DWORD_ dwFlagsAndAttributes,\n    HANDLE_ hTemplateFile)\n{\n    return ::CreateFileA(\n        lpFileName,\n        dwDesiredAccess,\n        dwShareMode,\n        reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),\n        dwCreationDisposition,\n        dwFlagsAndAttributes,\n        hTemplateFile);\n}\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _WIN32_FIND_DATAA {\n    DWORD_ dwFileAttributes;\n    FILETIME_ ftCreationTime;\n    FILETIME_ ftLastAccessTime;\n    FILETIME_ ftLastWriteTime;\n    DWORD_ nFileSizeHigh;\n    DWORD_ nFileSizeLow;\n    DWORD_ dwReserved0;\n    DWORD_ dwReserved1;\n    CHAR_   cFileName[ 260 ]; // MAX_PATH\n    CHAR_   cAlternateFileName[ 14 ];\n#ifdef _MAC\n    DWORD_ dwFileType;\n    DWORD_ dwCreatorType;\n    WORD_  wFinderFlags;\n#endif\n} WIN32_FIND_DATAA_, *PWIN32_FIND_DATAA_, *LPWIN32_FIND_DATAA_;\n\nBOOST_FORCEINLINE HANDLE_ FindFirstFileA(LPCSTR_ lpFileName, WIN32_FIND_DATAA_* lpFindFileData)\n{\n    return ::FindFirstFileA(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));\n}\n\nBOOST_FORCEINLINE BOOL_ FindNextFileA(HANDLE_ hFindFile, WIN32_FIND_DATAA_* lpFindFileData)\n{\n    return ::FindNextFileA(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));\n}\n#endif\n\nBOOST_FORCEINLINE HANDLE_ CreateFileW(\n    LPCWSTR_ lpFileName,\n    DWORD_ dwDesiredAccess,\n    DWORD_ dwShareMode,\n    SECURITY_ATTRIBUTES_* lpSecurityAttributes,\n    DWORD_ dwCreationDisposition,\n    DWORD_ dwFlagsAndAttributes,\n    HANDLE_ hTemplateFile)\n{\n    return ::CreateFileW(\n        lpFileName,\n        dwDesiredAccess,\n        dwShareMode,\n        reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),\n        dwCreationDisposition,\n        dwFlagsAndAttributes,\n        hTemplateFile);\n}\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _WIN32_FIND_DATAW {\n    DWORD_ dwFileAttributes;\n    FILETIME_ ftCreationTime;\n    FILETIME_ ftLastAccessTime;\n    FILETIME_ ftLastWriteTime;\n    DWORD_ nFileSizeHigh;\n    DWORD_ nFileSizeLow;\n    DWORD_ dwReserved0;\n    DWORD_ dwReserved1;\n    WCHAR_  cFileName[ 260 ]; // MAX_PATH\n    WCHAR_  cAlternateFileName[ 14 ];\n#ifdef _MAC\n    DWORD_ dwFileType;\n    DWORD_ dwCreatorType;\n    WORD_  wFinderFlags;\n#endif\n} WIN32_FIND_DATAW_, *PWIN32_FIND_DATAW_, *LPWIN32_FIND_DATAW_;\n\nBOOST_FORCEINLINE HANDLE_ FindFirstFileW(LPCWSTR_ lpFileName, WIN32_FIND_DATAW_* lpFindFileData)\n{\n    return ::FindFirstFileW(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));\n}\n\nBOOST_FORCEINLINE BOOL_ FindNextFileW(HANDLE_ hFindFile, WIN32_FIND_DATAW_* lpFindFileData)\n{\n    return ::FindNextFileW(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));\n}\n\nBOOST_FORCEINLINE BOOL_ GetFileSizeEx(HANDLE_ hFile, LARGE_INTEGER_* lpFileSize)\n{\n    return ::GetFileSizeEx(hFile, reinterpret_cast< ::_LARGE_INTEGER* >(lpFileSize));\n}\n\nBOOST_FORCEINLINE BOOL_ LockFileEx(\n    HANDLE_ hFile,\n    DWORD_ dwFlags,\n    DWORD_ dwReserved,\n    DWORD_ nNumberOfBytesToLockLow,\n    DWORD_ nNumberOfBytesToLockHigh,\n    OVERLAPPED_* lpOverlapped)\n{\n    return ::LockFileEx(hFile, dwFlags, dwReserved, nNumberOfBytesToLockLow, nNumberOfBytesToLockHigh, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));\n}\n\nBOOST_FORCEINLINE BOOL_ UnlockFileEx(\n    HANDLE_ hFile,\n    DWORD_ dwReserved,\n    DWORD_ nNumberOfBytesToUnlockLow,\n    DWORD_ nNumberOfBytesToUnlockHigh,\n    OVERLAPPED_* lpOverlapped)\n{\n    return ::UnlockFileEx(hFile, dwReserved, nNumberOfBytesToUnlockLow, nNumberOfBytesToUnlockHigh, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));\n}\n\nBOOST_FORCEINLINE BOOL_ WriteFile(\n    HANDLE_ hFile,\n    LPCVOID_ lpBuffer,\n    DWORD_ nNumberOfBytesToWrite,\n    LPDWORD_ lpNumberOfBytesWritten,\n    OVERLAPPED_* lpOverlapped)\n{\n    return ::WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));\n};\n\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ create_file(\n    LPCSTR_ lpFileName,\n    DWORD_ dwDesiredAccess,\n    DWORD_ dwShareMode,\n    SECURITY_ATTRIBUTES_* lpSecurityAttributes,\n    DWORD_ dwCreationDisposition,\n    DWORD_ dwFlagsAndAttributes,\n    HANDLE_ hTemplateFile)\n{\n    return ::CreateFileA(\n        lpFileName,\n        dwDesiredAccess,\n        dwShareMode,\n        reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),\n        dwCreationDisposition,\n        dwFlagsAndAttributes,\n        hTemplateFile);\n}\n\nBOOST_FORCEINLINE BOOL_ delete_file(LPCSTR_ lpFileName)\n{\n    return ::DeleteFileA(lpFileName);\n}\n\nBOOST_FORCEINLINE HANDLE_ find_first_file(LPCSTR_ lpFileName, WIN32_FIND_DATAA_* lpFindFileData)\n{\n    return ::FindFirstFileA(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));\n}\n\nBOOST_FORCEINLINE BOOL_ find_next_file(HANDLE_ hFindFile, WIN32_FIND_DATAA_* lpFindFileData)\n{\n    return ::FindNextFileA(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));\n}\n\nBOOST_FORCEINLINE BOOL_ move_file(LPCSTR_ lpExistingFileName, LPCSTR_ lpNewFileName, DWORD_ dwFlags)\n{\n    return ::MoveFileExA(lpExistingFileName, lpNewFileName, dwFlags);\n}\n#endif\n\nBOOST_FORCEINLINE HANDLE_ create_file(\n    LPCWSTR_ lpFileName,\n    DWORD_ dwDesiredAccess,\n    DWORD_ dwShareMode,\n    SECURITY_ATTRIBUTES_* lpSecurityAttributes,\n    DWORD_ dwCreationDisposition,\n    DWORD_ dwFlagsAndAttributes,\n    HANDLE_ hTemplateFile)\n{\n    return ::CreateFileW(\n        lpFileName,\n        dwDesiredAccess,\n        dwShareMode,\n        reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),\n        dwCreationDisposition,\n        dwFlagsAndAttributes,\n        hTemplateFile);\n}\n\nBOOST_FORCEINLINE BOOL_ delete_file(LPCWSTR_ lpFileName)\n{\n    return ::DeleteFileW(lpFileName);\n}\n\nBOOST_FORCEINLINE HANDLE_ find_first_file(LPCWSTR_ lpFileName, WIN32_FIND_DATAW_* lpFindFileData)\n{\n    return ::FindFirstFileW(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));\n}\n\nBOOST_FORCEINLINE BOOL_ find_next_file(HANDLE_ hFindFile, WIN32_FIND_DATAW_* lpFindFileData)\n{\n    return ::FindNextFileW(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));\n}\n\nBOOST_FORCEINLINE BOOL_ move_file(LPCWSTR_ lpExistingFileName, LPCWSTR_ lpNewFileName, DWORD_ dwFlags)\n{\n    return ::MoveFileExW(lpExistingFileName, lpNewFileName, dwFlags);\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_FILE_MANAGEMENT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/file_mapping.hpp",
    "content": "//  file_mapping.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_FILE_MAPPING_HPP\n#define BOOST_DETAIL_WINAPI_FILE_MAPPING_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateFileMappingA(\n    boost::detail::winapi::HANDLE_ hFile,\n    ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes,\n    boost::detail::winapi::DWORD_ flProtect,\n    boost::detail::winapi::DWORD_ dwMaximumSizeHigh,\n    boost::detail::winapi::DWORD_ dwMaximumSizeLow,\n    boost::detail::winapi::LPCSTR_ lpName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenFileMappingA(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCSTR_ lpName);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateFileMappingW(\n    boost::detail::winapi::HANDLE_ hFile,\n    ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes,\n    boost::detail::winapi::DWORD_ flProtect,\n    boost::detail::winapi::DWORD_ dwMaximumSizeHigh,\n    boost::detail::winapi::DWORD_ dwMaximumSizeLow,\n    boost::detail::winapi::LPCWSTR_ lpName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenFileMappingW(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCWSTR_ lpName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::LPVOID_ WINAPI\nMapViewOfFileEx(\n    boost::detail::winapi::HANDLE_ hFileMappingObject,\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::DWORD_ dwFileOffsetHigh,\n    boost::detail::winapi::DWORD_ dwFileOffsetLow,\n    boost::detail::winapi::SIZE_T_ dwNumberOfBytesToMap,\n    boost::detail::winapi::LPVOID_ lpBaseAddress);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nFlushViewOfFile(\n    boost::detail::winapi::LPCVOID_ lpBaseAddress,\n    boost::detail::winapi::SIZE_T_ dwNumberOfBytesToFlush);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nUnmapViewOfFile(boost::detail::winapi::LPCVOID_ lpBaseAddress);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::OpenFileMappingA;\n#endif\nusing ::OpenFileMappingW;\nusing ::MapViewOfFileEx;\nusing ::FlushViewOfFile;\nusing ::UnmapViewOfFile;\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ CreateFileMappingA(\n    HANDLE_ hFile,\n    SECURITY_ATTRIBUTES_* lpFileMappingAttributes,\n    DWORD_ flProtect,\n    DWORD_ dwMaximumSizeHigh,\n    DWORD_ dwMaximumSizeLow,\n    LPCSTR_ lpName)\n{\n    return ::CreateFileMappingA(\n        hFile,\n        reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),\n        flProtect,\n        dwMaximumSizeHigh,\n        dwMaximumSizeLow,\n        lpName);\n}\n#endif\n\nBOOST_FORCEINLINE HANDLE_ CreateFileMappingW(\n    HANDLE_ hFile,\n    ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes,\n    DWORD_ flProtect,\n    DWORD_ dwMaximumSizeHigh,\n    DWORD_ dwMaximumSizeLow,\n    LPCWSTR_ lpName)\n{\n    return ::CreateFileMappingW(\n        hFile,\n        reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),\n        flProtect,\n        dwMaximumSizeHigh,\n        dwMaximumSizeLow,\n        lpName);\n}\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ create_file_mapping(\n    HANDLE_ hFile,\n    SECURITY_ATTRIBUTES_* lpFileMappingAttributes,\n    DWORD_ flProtect,\n    DWORD_ dwMaximumSizeHigh,\n    DWORD_ dwMaximumSizeLow,\n    LPCSTR_ lpName)\n{\n    return ::CreateFileMappingA(\n        hFile,\n        reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),\n        flProtect,\n        dwMaximumSizeHigh,\n        dwMaximumSizeLow,\n        lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ open_file_mapping(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName)\n{\n    return ::OpenFileMappingA(dwDesiredAccess, bInheritHandle, lpName);\n}\n#endif\n\nBOOST_FORCEINLINE HANDLE_ create_file_mapping(\n    HANDLE_ hFile,\n    ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes,\n    DWORD_ flProtect,\n    DWORD_ dwMaximumSizeHigh,\n    DWORD_ dwMaximumSizeLow,\n    LPCWSTR_ lpName)\n{\n    return ::CreateFileMappingW(\n        hFile,\n        reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),\n        flProtect,\n        dwMaximumSizeHigh,\n        dwMaximumSizeLow,\n        lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ open_file_mapping(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName)\n{\n    return ::OpenFileMappingW(dwDesiredAccess, bInheritHandle, lpName);\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_FILE_MAPPING_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/handles.hpp",
    "content": "//  handles.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_HANDLES_HPP\n#define BOOST_DETAIL_WINAPI_HANDLES_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCloseHandle(boost::detail::winapi::HANDLE_ handle);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nDuplicateHandle(\n    boost::detail::winapi::HANDLE_ hSourceProcessHandle,\n    boost::detail::winapi::HANDLE_ hSourceHandle,\n    boost::detail::winapi::HANDLE_ hTargetProcessHandle,\n    boost::detail::winapi::HANDLE_* lpTargetHandle,\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::DWORD_ dwOptions);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\nusing ::CloseHandle;\nusing ::DuplicateHandle;\n\n#if defined( BOOST_USE_WINDOWS_H )\nconst DWORD_ DUPLICATE_CLOSE_SOURCE_ = DUPLICATE_CLOSE_SOURCE;\nconst DWORD_ DUPLICATE_SAME_ACCESS_ = DUPLICATE_SAME_ACCESS;\nconst HANDLE_ INVALID_HANDLE_VALUE_ = INVALID_HANDLE_VALUE;\n#else\nconst DWORD_ DUPLICATE_CLOSE_SOURCE_ = 1;\nconst DWORD_ DUPLICATE_SAME_ACCESS_ = 2;\nconst HANDLE_ INVALID_HANDLE_VALUE_ = (HANDLE_)(-1);\n#endif\n\nconst DWORD_ duplicate_close_source = DUPLICATE_CLOSE_SOURCE_;\nconst DWORD_ duplicate_same_access = DUPLICATE_SAME_ACCESS_;\nconst HANDLE_ invalid_handle_value = INVALID_HANDLE_VALUE_;\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_HANDLES_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/heap_memory.hpp",
    "content": "//  heap_memory.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_HEAP_MEMORY_HPP\n#define BOOST_DETAIL_WINAPI_HEAP_MEMORY_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\n#undef HeapAlloc\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nGetProcessHeap(BOOST_DETAIL_WINAPI_VOID);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nGetProcessHeaps(boost::detail::winapi::DWORD_ NumberOfHeaps, boost::detail::winapi::PHANDLE_ ProcessHeaps);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nHeapCreate(\n    boost::detail::winapi::DWORD_ flOptions,\n    boost::detail::winapi::SIZE_T_ dwInitialSize,\n    boost::detail::winapi::SIZE_T_ dwMaximumSize);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nHeapDestroy(boost::detail::winapi::HANDLE_ hHeap);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::LPVOID_ WINAPI\nHeapAlloc(\n    boost::detail::winapi::HANDLE_ hHeap,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::SIZE_T_ dwBytes);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::LPVOID_ WINAPI\nHeapReAlloc(\n    boost::detail::winapi::HANDLE_ hHeap,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::LPVOID_ lpMem,\n    boost::detail::winapi::SIZE_T_ dwBytes);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nHeapFree(\n    boost::detail::winapi::HANDLE_ hHeap,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::LPVOID_ lpMem);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\nusing ::GetProcessHeap;\nusing ::GetProcessHeaps;\nusing ::HeapCreate;\nusing ::HeapDestroy;\nusing ::HeapAlloc;\nusing ::HeapReAlloc;\nusing ::HeapFree;\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_HEAP_MEMORY_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/init_once.hpp",
    "content": "//  init_once.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_INIT_ONCE_HPP\n#define BOOST_DETAIL_WINAPI_INIT_ONCE_HPP\n\n#include <boost/detail/winapi/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\n#if defined( BOOST_WINAPI_IS_MINGW_W64 )\nstruct _RTL_RUN_ONCE;\n#else\nunion _RTL_RUN_ONCE;\n#endif\n\ntypedef boost::detail::winapi::BOOL_\n(WINAPI *PINIT_ONCE_FN) (\n    ::_RTL_RUN_ONCE* InitOnce,\n    boost::detail::winapi::PVOID_ Parameter,\n    boost::detail::winapi::PVOID_ *Context);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nInitOnceInitialize(::_RTL_RUN_ONCE* InitOnce);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nInitOnceExecuteOnce(\n    ::_RTL_RUN_ONCE* InitOnce,\n    ::PINIT_ONCE_FN InitFn,\n    boost::detail::winapi::PVOID_ Parameter,\n    boost::detail::winapi::LPVOID_ *Context);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nInitOnceBeginInitialize(\n    ::_RTL_RUN_ONCE* lpInitOnce,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::PBOOL_ fPending,\n    boost::detail::winapi::LPVOID_ *lpContext);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nInitOnceComplete(\n    ::_RTL_RUN_ONCE* lpInitOnce,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::LPVOID_ lpContext);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\ntypedef union BOOST_DETAIL_WINAPI_MAY_ALIAS _RTL_RUN_ONCE {\n    PVOID_ Ptr;\n} INIT_ONCE_, *PINIT_ONCE_, *LPINIT_ONCE_;\n\nextern \"C\" {\ntypedef BOOL_ (WINAPI *PINIT_ONCE_FN_) (PINIT_ONCE_ lpInitOnce, PVOID_ Parameter, PVOID_ *Context);\n}\n\nBOOST_FORCEINLINE VOID_ InitOnceInitialize(PINIT_ONCE_ lpInitOnce)\n{\n    ::InitOnceInitialize(reinterpret_cast< ::_RTL_RUN_ONCE* >(lpInitOnce));\n}\n\nBOOST_FORCEINLINE BOOL_ InitOnceExecuteOnce(PINIT_ONCE_ lpInitOnce, PINIT_ONCE_FN_ InitFn, PVOID_ Parameter, LPVOID_ *Context)\n{\n    return ::InitOnceExecuteOnce(reinterpret_cast< ::_RTL_RUN_ONCE* >(lpInitOnce), reinterpret_cast< ::PINIT_ONCE_FN >(InitFn), Parameter, Context);\n}\n\nBOOST_FORCEINLINE BOOL_ InitOnceBeginInitialize(PINIT_ONCE_ lpInitOnce, DWORD_ dwFlags, PBOOL_ fPending, LPVOID_ *lpContext)\n{\n    return ::InitOnceBeginInitialize(reinterpret_cast< ::_RTL_RUN_ONCE* >(lpInitOnce), dwFlags, fPending, lpContext);\n}\n\nBOOST_FORCEINLINE BOOL_ InitOnceComplete(PINIT_ONCE_ lpInitOnce, DWORD_ dwFlags, LPVOID_ lpContext)\n{\n    return ::InitOnceComplete(reinterpret_cast< ::_RTL_RUN_ONCE* >(lpInitOnce), dwFlags, lpContext);\n}\n\n#if defined( BOOST_USE_WINDOWS_H )\n\n#define BOOST_DETAIL_WINAPI_INIT_ONCE_STATIC_INIT INIT_ONCE_STATIC_INIT\nconst DWORD_ INIT_ONCE_ASYNC_ = INIT_ONCE_ASYNC;\nconst DWORD_ INIT_ONCE_CHECK_ONLY_ = INIT_ONCE_CHECK_ONLY;\nconst DWORD_ INIT_ONCE_INIT_FAILED_ = INIT_ONCE_INIT_FAILED;\nconst DWORD_ INIT_ONCE_CTX_RESERVED_BITS_ = INIT_ONCE_CTX_RESERVED_BITS;\n\n#else // defined( BOOST_USE_WINDOWS_H )\n\n#define BOOST_DETAIL_WINAPI_INIT_ONCE_STATIC_INIT {0}\nconst DWORD_ INIT_ONCE_ASYNC_ = 0x00000002UL;\nconst DWORD_ INIT_ONCE_CHECK_ONLY_ = 0x00000001UL;\nconst DWORD_ INIT_ONCE_INIT_FAILED_ = 0x00000004UL;\nconst DWORD_ INIT_ONCE_CTX_RESERVED_BITS_ = 2;\n\n#endif // defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ init_once_async = INIT_ONCE_ASYNC_;\nconst DWORD_ init_once_check_only = INIT_ONCE_CHECK_ONLY_;\nconst DWORD_ init_once_init_failed = INIT_ONCE_INIT_FAILED_;\nconst DWORD_ init_once_ctx_reserved_bits = INIT_ONCE_CTX_RESERVED_BITS_;\n\n}\n}\n}\n\n#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n\n#endif // BOOST_DETAIL_WINAPI_INIT_ONCE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/local_memory.hpp",
    "content": "//  local_memory.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_LOCAL_MEMORY_HPP\n#define BOOST_DETAIL_WINAPI_LOCAL_MEMORY_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nnamespace boost { namespace detail { namespace winapi {\ntypedef HANDLE_ HLOCAL_;\n}}}\n\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HLOCAL_ WINAPI\nLocalAlloc(\n    boost::detail::winapi::UINT_ uFlags,\n    boost::detail::winapi::SIZE_T_ uBytes);\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HLOCAL_ WINAPI\nLocalReAlloc(\n    boost::detail::winapi::HLOCAL_ hMem,\n    boost::detail::winapi::SIZE_T_ uBytes,\n    boost::detail::winapi::UINT_ uFlags);\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HLOCAL_ WINAPI LocalFree(boost::detail::winapi::HLOCAL_ hMem);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n#if defined( BOOST_USE_WINDOWS_H )\ntypedef ::HLOCAL HLOCAL_;\n#endif\nusing ::LocalAlloc;\nusing ::LocalReAlloc;\nusing ::LocalFree;\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_LOCAL_MEMORY_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/memory.hpp",
    "content": "//  memory.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_MEMORY_HPP\n#define BOOST_DETAIL_WINAPI_MEMORY_HPP\n\n#include <boost/detail/winapi/heap_memory.hpp>\n#include <boost/detail/winapi/local_memory.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#endif // BOOST_DETAIL_WINAPI_MEMORY_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/mutex.hpp",
    "content": "//  mutex.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_MUTEX_HPP\n#define BOOST_DETAIL_WINAPI_MUTEX_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/predef/platform.h>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\n#if !defined( BOOST_NO_ANSI_APIS )\n#if !defined( BOOST_PLAT_WINDOWS_RUNTIME_AVALIABLE )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateMutexA(\n    ::_SECURITY_ATTRIBUTES* lpMutexAttributes,\n    boost::detail::winapi::BOOL_ bInitialOwner,\n    boost::detail::winapi::LPCSTR_ lpName);\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateMutexExA(\n    ::_SECURITY_ATTRIBUTES* lpMutexAttributes,\n    boost::detail::winapi::LPCSTR_ lpName,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ dwDesiredAccess);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenMutexA(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCSTR_ lpName);\n#endif\n\n#if !defined( BOOST_PLAT_WINDOWS_RUNTIME_AVALIABLE )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateMutexW(\n    ::_SECURITY_ATTRIBUTES* lpMutexAttributes,\n    boost::detail::winapi::BOOL_ bInitialOwner,\n    boost::detail::winapi::LPCWSTR_ lpName);\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateMutexExW(\n    ::_SECURITY_ATTRIBUTES* lpMutexAttributes,\n    boost::detail::winapi::LPCWSTR_ lpName,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ dwDesiredAccess);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenMutexW(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCWSTR_ lpName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nReleaseMutex(boost::detail::winapi::HANDLE_ hMutex);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::OpenMutexA;\n#endif\nusing ::OpenMutexW;\nusing ::ReleaseMutex;\n\n#if defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ MUTEX_ALL_ACCESS_ = MUTEX_ALL_ACCESS;\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nconst DWORD_ CREATE_MUTEX_INITIAL_OWNER_ = CREATE_MUTEX_INITIAL_OWNER;\n#endif\n\n#else // defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ MUTEX_ALL_ACCESS_ = 0x1F0001;\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nconst DWORD_ CREATE_MUTEX_INITIAL_OWNER_ = 0x00000001;\n#endif\n\n#endif // defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ mutex_all_access = MUTEX_ALL_ACCESS_;\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nconst DWORD_ create_mutex_initial_owner = CREATE_MUTEX_INITIAL_OWNER_;\n#endif\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ CreateMutexA(SECURITY_ATTRIBUTES_* lpMutexAttributes, BOOL_ bInitialOwner, LPCSTR_ lpName)\n{\n#if BOOST_PLAT_WINDOWS_RUNTIME && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n    const DWORD_ flags = bInitialOwner ? create_mutex_initial_owner : 0u;\n    return ::CreateMutexExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), lpName, flags, mutex_all_access);\n#else\n    return ::CreateMutexA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), bInitialOwner, lpName);\n#endif\n}\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_FORCEINLINE HANDLE_ CreateMutexExA(\n    SECURITY_ATTRIBUTES_* lpMutexAttributes,\n    LPCSTR_ lpName,\n    DWORD_ dwFlags,\n    DWORD_ dwDesiredAccess)\n{\n    return ::CreateMutexExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), lpName, dwFlags, dwDesiredAccess);\n}\n#endif\n#endif\n\nBOOST_FORCEINLINE HANDLE_ CreateMutexW(SECURITY_ATTRIBUTES_* lpMutexAttributes, BOOL_ bInitialOwner, LPCWSTR_ lpName)\n{\n#if BOOST_PLAT_WINDOWS_RUNTIME && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n    const DWORD_ flags = bInitialOwner ? create_mutex_initial_owner : 0u;\n    return ::CreateMutexExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), lpName, flags, mutex_all_access);\n#else\n    return ::CreateMutexW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), bInitialOwner, lpName);\n#endif\n}\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_FORCEINLINE HANDLE_ CreateMutexExW(\n    SECURITY_ATTRIBUTES_* lpMutexAttributes,\n    LPCWSTR_ lpName,\n    DWORD_ dwFlags,\n    DWORD_ dwDesiredAccess)\n{\n    return ::CreateMutexExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), lpName, dwFlags, dwDesiredAccess);\n}\n#endif\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ create_mutex(SECURITY_ATTRIBUTES_* lpAttributes, BOOL_ bInitialOwner, LPCSTR_ lpName)\n{\n    return winapi::CreateMutexA(lpAttributes, bInitialOwner, lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ open_mutex(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName)\n{\n    return ::OpenMutexA(dwDesiredAccess, bInheritHandle, lpName);\n}\n#endif\n\nBOOST_FORCEINLINE HANDLE_ create_mutex(SECURITY_ATTRIBUTES_* lpAttributes, BOOL_ bInitialOwner, LPCWSTR_ lpName)\n{\n    return winapi::CreateMutexW(lpAttributes, bInitialOwner, lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ open_mutex(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName)\n{\n    return ::OpenMutexW(dwDesiredAccess, bInheritHandle, lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ create_anonymous_mutex(SECURITY_ATTRIBUTES_* lpAttributes, BOOL_ bInitialOwner)\n{\n    return winapi::CreateMutexW(lpAttributes, bInitialOwner, 0);\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_MUTEX_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/process.hpp",
    "content": "//  process.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_PROCESS_HPP\n#define BOOST_DETAIL_WINAPI_PROCESS_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/detail/winapi/GetCurrentProcess.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n// Windows CE define GetCurrentProcessId as an inline function in kfuncs.h\n#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE )\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetCurrentProcessId(BOOST_DETAIL_WINAPI_VOID);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\nusing ::GetCurrentProcessId;\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_PROCESS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/security.hpp",
    "content": "//  security.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_SECURITY_HPP\n#define BOOST_DETAIL_WINAPI_SECURITY_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nstruct _ACL;\nstruct _SECURITY_DESCRIPTOR;\n#if defined( BOOST_WINAPI_IS_MINGW )\ntypedef _SECURITY_DESCRIPTOR *PSECURITY_DESCRIPTOR;\n#else\ntypedef boost::detail::winapi::PVOID_ PSECURITY_DESCRIPTOR;\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nInitializeSecurityDescriptor(\n    PSECURITY_DESCRIPTOR pSecurityDescriptor,\n    boost::detail::winapi::DWORD_ dwRevision);\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nSetSecurityDescriptorDacl(\n    PSECURITY_DESCRIPTOR pSecurityDescriptor,\n    boost::detail::winapi::BOOL_ bDaclPresent,\n    ::_ACL* pDacl,\n    boost::detail::winapi::BOOL_ bDaclDefaulted);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\ntypedef PVOID_ PSID_;\ntypedef WORD_ SECURITY_DESCRIPTOR_CONTROL_, *PSECURITY_DESCRIPTOR_CONTROL_;\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _ACL {\n    BYTE_ AclRevision;\n    BYTE_ Sbz1;\n    WORD_ AclSize;\n    WORD_ AceCount;\n    WORD_ Sbz2;\n} ACL_, *PACL_;\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _SECURITY_DESCRIPTOR {\n    BYTE_ Revision;\n    BYTE_ Sbz1;\n    SECURITY_DESCRIPTOR_CONTROL_ Control;\n    PSID_ Owner;\n    PSID_ Group;\n    PACL_ Sacl;\n    PACL_ Dacl;\n} SECURITY_DESCRIPTOR_, *PISECURITY_DESCRIPTOR_;\n\ntypedef ::PSECURITY_DESCRIPTOR PSECURITY_DESCRIPTOR_;\n\nusing ::InitializeSecurityDescriptor;\n\nBOOST_FORCEINLINE BOOL_ SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR_ pSecurityDescriptor, BOOL_ bDaclPresent, PACL_ pDacl, BOOL_ bDaclDefaulted)\n{\n    return ::SetSecurityDescriptorDacl(pSecurityDescriptor, bDaclPresent, reinterpret_cast< ::_ACL* >(pDacl), bDaclDefaulted);\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_SECURITY_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/semaphore.hpp",
    "content": "//  semaphore.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_SEMAPHORE_HPP\n#define BOOST_DETAIL_WINAPI_SEMAPHORE_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/predef/platform.h>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\n#if !defined( BOOST_NO_ANSI_APIS )\n#if !defined( BOOST_PLAT_WINDOWS_RUNTIME_AVALIABLE )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateSemaphoreA(\n    ::_SECURITY_ATTRIBUTES* lpSemaphoreAttributes,\n    boost::detail::winapi::LONG_ lInitialCount,\n    boost::detail::winapi::LONG_ lMaximumCount,\n    boost::detail::winapi::LPCSTR_ lpName);\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateSemaphoreExA(\n    ::_SECURITY_ATTRIBUTES* lpSemaphoreAttributes,\n    boost::detail::winapi::LONG_ lInitialCount,\n    boost::detail::winapi::LONG_ lMaximumCount,\n    boost::detail::winapi::LPCSTR_ lpName,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ dwDesiredAccess);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenSemaphoreA(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCSTR_ lpName);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateSemaphoreW(\n    ::_SECURITY_ATTRIBUTES* lpSemaphoreAttributes,\n    boost::detail::winapi::LONG_ lInitialCount,\n    boost::detail::winapi::LONG_ lMaximumCount,\n    boost::detail::winapi::LPCWSTR_ lpName);\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateSemaphoreExW(\n    ::_SECURITY_ATTRIBUTES* lpSemaphoreAttributes,\n    boost::detail::winapi::LONG_ lInitialCount,\n    boost::detail::winapi::LONG_ lMaximumCount,\n    boost::detail::winapi::LPCWSTR_ lpName,\n    boost::detail::winapi::DWORD_ dwFlags,\n    boost::detail::winapi::DWORD_ dwDesiredAccess);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenSemaphoreW(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCWSTR_ lpName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nReleaseSemaphore(\n    boost::detail::winapi::HANDLE_ hSemaphore,\n    boost::detail::winapi::LONG_ lReleaseCount,\n    boost::detail::winapi::LPLONG_ lpPreviousCount);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::OpenSemaphoreA;\n#endif\nusing ::OpenSemaphoreW;\nusing ::ReleaseSemaphore;\n\n#if defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ SEMAPHORE_ALL_ACCESS_ = SEMAPHORE_ALL_ACCESS;\n\n#else // defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ SEMAPHORE_ALL_ACCESS_ = 0x1F0003;\n\n#endif // defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ semaphore_all_access = SEMAPHORE_ALL_ACCESS_;\n\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ CreateSemaphoreA(SECURITY_ATTRIBUTES_* lpSemaphoreAttributes, LONG_ lInitialCount, LONG_ lMaximumCount, LPCSTR_ lpName)\n{\n#if BOOST_PLAT_WINDOWS_RUNTIME && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n    return ::CreateSemaphoreExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSemaphoreAttributes), lInitialCount, lMaximumCount, lpName, 0, semaphore_all_access);\n#else\n    return ::CreateSemaphoreA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSemaphoreAttributes), lInitialCount, lMaximumCount, lpName);\n#endif\n}\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_FORCEINLINE HANDLE_ CreateSemaphoreExA(SECURITY_ATTRIBUTES_* lpSemaphoreAttributes, LONG_ lInitialCount, LONG_ lMaximumCount, LPCSTR_ lpName, DWORD_ dwFlags, DWORD_ dwDesiredAccess)\n{\n    return ::CreateSemaphoreExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSemaphoreAttributes), lInitialCount, lMaximumCount, lpName, dwFlags, dwDesiredAccess);\n}\n#endif\n#endif\n\nBOOST_FORCEINLINE HANDLE_ CreateSemaphoreW(SECURITY_ATTRIBUTES_* lpSemaphoreAttributes, LONG_ lInitialCount, LONG_ lMaximumCount, LPCWSTR_ lpName)\n{\n#if BOOST_PLAT_WINDOWS_RUNTIME && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n    return ::CreateSemaphoreExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSemaphoreAttributes), lInitialCount, lMaximumCount, lpName, 0, semaphore_all_access);\n#else\n    return ::CreateSemaphoreW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSemaphoreAttributes), lInitialCount, lMaximumCount, lpName);\n#endif\n}\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_FORCEINLINE HANDLE_ CreateSemaphoreExW(SECURITY_ATTRIBUTES_* lpSemaphoreAttributes, LONG_ lInitialCount, LONG_ lMaximumCount, LPCWSTR_ lpName, DWORD_ dwFlags, DWORD_ dwDesiredAccess)\n{\n    return ::CreateSemaphoreExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSemaphoreAttributes), lInitialCount, lMaximumCount, lpName, dwFlags, dwDesiredAccess);\n}\n#endif\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ create_semaphore(SECURITY_ATTRIBUTES_* lpSemaphoreAttributes, LONG_ lInitialCount, LONG_ lMaximumCount, LPCSTR_ lpName)\n{\n    return winapi::CreateSemaphoreA(lpSemaphoreAttributes, lInitialCount, lMaximumCount, lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ open_semaphore(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName)\n{\n    return ::OpenSemaphoreA(dwDesiredAccess, bInheritHandle, lpName);\n}\n#endif\n\nBOOST_FORCEINLINE HANDLE_ create_semaphore(SECURITY_ATTRIBUTES_* lpSemaphoreAttributes, LONG_ lInitialCount, LONG_ lMaximumCount, LPCWSTR_ lpName)\n{\n    return winapi::CreateSemaphoreW(lpSemaphoreAttributes, lInitialCount, lMaximumCount, lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ open_semaphore(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName)\n{\n    return ::OpenSemaphoreW(dwDesiredAccess, bInheritHandle, lpName);\n}\n\nBOOST_FORCEINLINE HANDLE_ create_anonymous_semaphore(SECURITY_ATTRIBUTES_* lpSemaphoreAttributes, LONG_ lInitialCount, LONG_ lMaximumCount)\n{\n    return winapi::CreateSemaphoreW(lpSemaphoreAttributes, lInitialCount, lMaximumCount, 0);\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_SEMAPHORE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/srw_lock.hpp",
    "content": "//  srw_lock.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_SRW_LOCK_HPP\n#define BOOST_DETAIL_WINAPI_SRW_LOCK_HPP\n\n#include <boost/detail/winapi/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nstruct _RTL_SRWLOCK;\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nInitializeSRWLock(::_RTL_SRWLOCK* SRWLock);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nReleaseSRWLockExclusive(::_RTL_SRWLOCK* SRWLock);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nReleaseSRWLockShared(::_RTL_SRWLOCK* SRWLock);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nAcquireSRWLockExclusive(::_RTL_SRWLOCK* SRWLock);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nAcquireSRWLockShared(::_RTL_SRWLOCK* SRWLock);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOLEAN_ WINAPI\nTryAcquireSRWLockExclusive(::_RTL_SRWLOCK* SRWLock);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOLEAN_ WINAPI\nTryAcquireSRWLockShared(::_RTL_SRWLOCK* SRWLock);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _RTL_SRWLOCK {\n    PVOID_ Ptr;\n} SRWLOCK_, *PSRWLOCK_;\n\n#if defined( BOOST_USE_WINDOWS_H )\n#define BOOST_DETAIL_WINAPI_SRWLOCK_INIT SRWLOCK_INIT\n#else\n#define BOOST_DETAIL_WINAPI_SRWLOCK_INIT {0}\n#endif\n\nBOOST_FORCEINLINE VOID_ InitializeSRWLock(PSRWLOCK_ SRWLock)\n{\n    ::InitializeSRWLock(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock));\n}\n\nBOOST_FORCEINLINE VOID_ ReleaseSRWLockExclusive(PSRWLOCK_ SRWLock)\n{\n    ::ReleaseSRWLockExclusive(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock));\n}\n\nBOOST_FORCEINLINE VOID_ ReleaseSRWLockShared(PSRWLOCK_ SRWLock)\n{\n    ::ReleaseSRWLockShared(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock));\n}\n\nBOOST_FORCEINLINE VOID_ AcquireSRWLockExclusive(PSRWLOCK_ SRWLock)\n{\n    ::AcquireSRWLockExclusive(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock));\n}\n\nBOOST_FORCEINLINE VOID_ AcquireSRWLockShared(PSRWLOCK_ SRWLock)\n{\n    ::AcquireSRWLockShared(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock));\n}\n\nBOOST_FORCEINLINE BOOLEAN_ TryAcquireSRWLockExclusive(PSRWLOCK_ SRWLock)\n{\n    return ::TryAcquireSRWLockExclusive(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock));\n}\n\nBOOST_FORCEINLINE BOOLEAN_ TryAcquireSRWLockShared(PSRWLOCK_ SRWLock)\n{\n    return ::TryAcquireSRWLockShared(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock));\n}\n\n}\n}\n}\n\n#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\n\n#endif // BOOST_DETAIL_WINAPI_SRW_LOCK_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/synchronization.hpp",
    "content": "//  synchronizaion.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_SYNCHRONIZATION_HPP\n#define BOOST_DETAIL_WINAPI_SYNCHRONIZATION_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/detail/winapi/critical_section.hpp>\n#include <boost/detail/winapi/wait.hpp>\n#include <boost/detail/winapi/event.hpp>\n#include <boost/detail/winapi/mutex.hpp>\n#include <boost/detail/winapi/semaphore.hpp>\n#include <boost/detail/winapi/init_once.hpp>\n#include <boost/detail/winapi/srw_lock.hpp>\n#include <boost/detail/winapi/condition_variable.hpp>\n#include <boost/detail/winapi/apc.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#endif // BOOST_DETAIL_WINAPI_SYNCHRONIZATION_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/system.hpp",
    "content": "//  system.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright (c) Microsoft Corporation 2014\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_SYSTEM_HPP\n#define BOOST_DETAIL_WINAPI_SYSTEM_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nstruct _SYSTEM_INFO;\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nGetSystemInfo(::_SYSTEM_INFO* lpSystemInfo);\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nGetNativeSystemInfo(::_SYSTEM_INFO* lpSystemInfo);\n#endif\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _SYSTEM_INFO {\n    union {\n        DWORD_ dwOemId;\n        struct {\n            WORD_ wProcessorArchitecture;\n            WORD_ wReserved;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    DWORD_ dwPageSize;\n    LPVOID_ lpMinimumApplicationAddress;\n    LPVOID_ lpMaximumApplicationAddress;\n    DWORD_PTR_ dwActiveProcessorMask;\n    DWORD_ dwNumberOfProcessors;\n    DWORD_ dwProcessorType;\n    DWORD_ dwAllocationGranularity;\n    WORD_ wProcessorLevel;\n    WORD_ wProcessorRevision;\n} SYSTEM_INFO_, *LPSYSTEM_INFO_;\n\nBOOST_FORCEINLINE VOID_ GetSystemInfo(LPSYSTEM_INFO_ lpSystemInfo)\n{\n    ::GetSystemInfo(reinterpret_cast< ::_SYSTEM_INFO* >(lpSystemInfo));\n}\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP\nBOOST_FORCEINLINE VOID_ GetNativeSystemInfo(LPSYSTEM_INFO_ lpSystemInfo)\n{\n    ::GetNativeSystemInfo(reinterpret_cast< ::_SYSTEM_INFO* >(lpSystemInfo));\n}\n#endif\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_SYSTEM_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/thread.hpp",
    "content": "//  thread.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_THREAD_HPP\n#define BOOST_DETAIL_WINAPI_THREAD_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/detail/winapi/GetCurrentThread.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\n// Windows CE define GetCurrentThreadId as an inline function in kfuncs.h\n#if !defined( UNDER_CE )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetCurrentThreadId(BOOST_DETAIL_WINAPI_VOID);\n#endif\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nSleepEx(\n    boost::detail::winapi::DWORD_ dwMilliseconds,\n    boost::detail::winapi::BOOL_ bAlertable);\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI Sleep(boost::detail::winapi::DWORD_ dwMilliseconds);\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI SwitchToThread(BOOST_DETAIL_WINAPI_VOID);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\nusing ::GetCurrentThreadId;\nusing ::SleepEx;\nusing ::Sleep;\nusing ::SwitchToThread;\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_THREAD_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/thread_pool.hpp",
    "content": "//  thread_pool.hpp  --------------------------------------------------------------//\n\n//  Copyright 2013 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_THREAD_POOL_HPP\n#define BOOST_DETAIL_WINAPI_THREAD_POOL_HPP\n\n#include <boost/detail/winapi/config.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\ntypedef boost::detail::winapi::VOID_ (NTAPI *WAITORTIMERCALLBACKFUNC)\n(boost::detail::winapi::PVOID_, boost::detail::winapi::BOOLEAN_);\ntypedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK;\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nRegisterWaitForSingleObject(\n    boost::detail::winapi::PHANDLE_ phNewWaitObject,\n    boost::detail::winapi::HANDLE_ hObject,\n    WAITORTIMERCALLBACK Callback,\n    boost::detail::winapi::PVOID_ Context,\n    boost::detail::winapi::ULONG_ dwMilliseconds,\n    boost::detail::winapi::ULONG_ dwFlags);\n}\n#endif\n\n// MinGW is buggy - it is missing these function declarations for Win2000\n#if !defined( BOOST_USE_WINDOWS_H ) || (defined(BOOST_WINAPI_IS_MINGW) && BOOST_USE_WINAPI_VERSION < BOOST_WINAPI_VERSION_WINXP)\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nUnregisterWait(boost::detail::winapi::HANDLE_ WaitHandle);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nUnregisterWaitEx(\n    boost::detail::winapi::HANDLE_ WaitHandle,\n    boost::detail::winapi::HANDLE_ CompletionEvent);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\ntypedef ::WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACKFUNC_;\ntypedef ::WAITORTIMERCALLBACK WAITORTIMERCALLBACK_;\n\nusing ::RegisterWaitForSingleObject;\nusing ::UnregisterWait;\nusing ::UnregisterWaitEx;\n\n#if defined( BOOST_USE_WINDOWS_H )\n\nconst ULONG_ WT_EXECUTEDEFAULT_ = WT_EXECUTEDEFAULT;\nconst ULONG_ WT_EXECUTEINIOTHREAD_ = WT_EXECUTEINIOTHREAD;\n#if defined( BOOST_WINAPI_IS_MINGW )\nconst ULONG_ WT_EXECUTEINUITHREAD_ = 0x00000002;\n#else\nconst ULONG_ WT_EXECUTEINUITHREAD_ = WT_EXECUTEINUITHREAD;\n#endif\nconst ULONG_ WT_EXECUTEINWAITTHREAD_ = WT_EXECUTEINWAITTHREAD;\nconst ULONG_ WT_EXECUTEONLYONCE_ = WT_EXECUTEONLYONCE;\nconst ULONG_ WT_EXECUTEINTIMERTHREAD_ = WT_EXECUTEINTIMERTHREAD;\nconst ULONG_ WT_EXECUTELONGFUNCTION_ = WT_EXECUTELONGFUNCTION;\n#if defined( BOOST_WINAPI_IS_MINGW )\nconst ULONG_ WT_EXECUTEINPERSISTENTIOTHREAD_ = 0x00000040;\n#else\nconst ULONG_ WT_EXECUTEINPERSISTENTIOTHREAD_ = WT_EXECUTEINPERSISTENTIOTHREAD;\n#endif\nconst ULONG_ WT_EXECUTEINPERSISTENTTHREAD_ = WT_EXECUTEINPERSISTENTTHREAD;\nconst ULONG_ WT_TRANSFER_IMPERSONATION_ = WT_TRANSFER_IMPERSONATION;\n\ninline ULONG_ wt_set_max_threadpool_threads(ULONG_ flags, ULONG_ limit)\n{\n    return WT_SET_MAX_THREADPOOL_THREADS(flags, limit);\n}\n\n#else // defined( BOOST_USE_WINDOWS_H )\n\nconst ULONG_ WT_EXECUTEDEFAULT_ = 0x00000000;\nconst ULONG_ WT_EXECUTEINIOTHREAD_ = 0x00000001;\nconst ULONG_ WT_EXECUTEINUITHREAD_ = 0x00000002;\nconst ULONG_ WT_EXECUTEINWAITTHREAD_ = 0x00000004;\nconst ULONG_ WT_EXECUTEONLYONCE_ = 0x00000008;\nconst ULONG_ WT_EXECUTEINTIMERTHREAD_ = 0x00000020;\nconst ULONG_ WT_EXECUTELONGFUNCTION_ = 0x00000010;\nconst ULONG_ WT_EXECUTEINPERSISTENTIOTHREAD_ = 0x00000040;\nconst ULONG_ WT_EXECUTEINPERSISTENTTHREAD_ = 0x00000080;\nconst ULONG_ WT_TRANSFER_IMPERSONATION_ = 0x00000100;\n\ninline ULONG_ wt_set_max_threadpool_threads(ULONG_ flags, ULONG_ limit)\n{\n    return flags | (limit << 16);\n}\n\n#endif // defined( BOOST_USE_WINDOWS_H )\n\nconst ULONG_ wt_execute_default = WT_EXECUTEDEFAULT_;\nconst ULONG_ wt_execute_in_io_thread = WT_EXECUTEINIOTHREAD_;\nconst ULONG_ wt_execute_in_ui_thread = WT_EXECUTEINUITHREAD_;\nconst ULONG_ wt_execute_in_wait_thread = WT_EXECUTEINWAITTHREAD_;\nconst ULONG_ wt_execute_only_once = WT_EXECUTEONLYONCE_;\nconst ULONG_ wt_execute_in_timer_thread = WT_EXECUTEINTIMERTHREAD_;\nconst ULONG_ wt_execute_long_function = WT_EXECUTELONGFUNCTION_;\nconst ULONG_ wt_execute_in_persistent_io_thread = WT_EXECUTEINPERSISTENTIOTHREAD_;\nconst ULONG_ wt_execute_in_persistent_thread = WT_EXECUTEINPERSISTENTTHREAD_;\nconst ULONG_ wt_transfer_impersonation = WT_TRANSFER_IMPERSONATION_;\n\n}\n}\n}\n\n#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K\n\n#endif // BOOST_DETAIL_WINAPI_THREAD_POOL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/time.hpp",
    "content": "//  time.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright (c) Microsoft Corporation 2014\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_TIME_HPP\n#define BOOST_DETAIL_WINAPI_TIME_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n#include <boost/predef/platform.h>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nstruct _FILETIME;\nstruct _SYSTEMTIME;\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nGetSystemTime(::_SYSTEMTIME* lpSystemTime);\n\n#ifdef BOOST_HAS_GETSYSTEMTIMEASFILETIME  // Windows CE does not define GetSystemTimeAsFileTime\nBOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI\nGetSystemTimeAsFileTime(::_FILETIME* lpSystemTimeAsFileTime);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nSystemTimeToFileTime(\n    const ::_SYSTEMTIME* lpSystemTime,\n    ::_FILETIME* lpFileTime);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nFileTimeToSystemTime(\n    const ::_FILETIME* lpFileTime,\n    ::_SYSTEMTIME* lpSystemTime);\n\n#if BOOST_PLAT_WINDOWS_DESKTOP\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nFileTimeToLocalFileTime(\n    const ::_FILETIME* lpFileTime,\n    ::_FILETIME* lpLocalFileTime);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nLocalFileTimeToFileTime(\n    const ::_FILETIME* lpLocalFileTime,\n    ::_FILETIME* lpFileTime);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nGetTickCount(BOOST_DETAIL_WINAPI_VOID);\n#endif\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nBOOST_SYMBOL_IMPORT boost::detail::winapi::ULONGLONG_ WINAPI\nGetTickCount64(BOOST_DETAIL_WINAPI_VOID);\n#endif\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _FILETIME {\n    DWORD_ dwLowDateTime;\n    DWORD_ dwHighDateTime;\n} FILETIME_, *PFILETIME_, *LPFILETIME_;\n\ntypedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _SYSTEMTIME {\n    WORD_ wYear;\n    WORD_ wMonth;\n    WORD_ wDayOfWeek;\n    WORD_ wDay;\n    WORD_ wHour;\n    WORD_ wMinute;\n    WORD_ wSecond;\n    WORD_ wMilliseconds;\n} SYSTEMTIME_, *PSYSTEMTIME_, *LPSYSTEMTIME_;\n\n#if BOOST_PLAT_WINDOWS_DESKTOP\nusing ::GetTickCount;\n#endif\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6\nusing ::GetTickCount64;\n#endif\n\nBOOST_FORCEINLINE VOID_ GetSystemTime(LPSYSTEMTIME_ lpSystemTime)\n{\n    ::GetSystemTime(reinterpret_cast< ::_SYSTEMTIME* >(lpSystemTime));\n}\n\n#if defined( BOOST_HAS_GETSYSTEMTIMEASFILETIME )\nBOOST_FORCEINLINE VOID_ GetSystemTimeAsFileTime(LPFILETIME_ lpSystemTimeAsFileTime)\n{\n    ::GetSystemTimeAsFileTime(reinterpret_cast< ::_FILETIME* >(lpSystemTimeAsFileTime));\n}\n#else\n// Windows CE does not define GetSystemTimeAsFileTime\nBOOST_FORCEINLINE VOID_ GetSystemTimeAsFileTime(FILETIME_* lpFileTime)\n{\n    boost::detail::winapi::SYSTEMTIME_ st;\n    boost::detail::winapi::GetSystemTime(&st);\n    boost::detail::winapi::SystemTimeToFileTime(&st, lpFileTime);\n}\n#endif\n\nBOOST_FORCEINLINE BOOL_ SystemTimeToFileTime(const SYSTEMTIME_* lpSystemTime, FILETIME_* lpFileTime)\n{\n    return ::SystemTimeToFileTime(reinterpret_cast< const ::_SYSTEMTIME* >(lpSystemTime), reinterpret_cast< ::_FILETIME* >(lpFileTime));\n}\n\nBOOST_FORCEINLINE BOOL_ FileTimeToSystemTime(const FILETIME_* lpFileTime, SYSTEMTIME_* lpSystemTime)\n{\n    return ::FileTimeToSystemTime(reinterpret_cast< const ::_FILETIME* >(lpFileTime), reinterpret_cast< ::_SYSTEMTIME* >(lpSystemTime));\n}\n\n#if BOOST_PLAT_WINDOWS_DESKTOP\nBOOST_FORCEINLINE BOOL_ FileTimeToLocalFileTime(const FILETIME_* lpFileTime, FILETIME_* lpLocalFileTime)\n{\n    return ::FileTimeToLocalFileTime(reinterpret_cast< const ::_FILETIME* >(lpFileTime), reinterpret_cast< ::_FILETIME* >(lpLocalFileTime));\n}\n\nBOOST_FORCEINLINE BOOL_ LocalFileTimeToFileTime(const FILETIME_* lpLocalFileTime, FILETIME_* lpFileTime)\n{\n    return ::LocalFileTimeToFileTime(reinterpret_cast< const ::_FILETIME* >(lpLocalFileTime), reinterpret_cast< ::_FILETIME* >(lpFileTime));\n}\n#endif\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_TIME_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/timers.hpp",
    "content": "//  timers.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_TIMERS_HPP\n#define BOOST_DETAIL_WINAPI_TIMERS_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nQueryPerformanceCounter(::_LARGE_INTEGER* lpPerformanceCount);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nQueryPerformanceFrequency(::_LARGE_INTEGER* lpFrequency);\n}\n#endif\n\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\nBOOST_FORCEINLINE BOOL_ QueryPerformanceCounter(LARGE_INTEGER_* lpPerformanceCount)\n{\n    return ::QueryPerformanceCounter(reinterpret_cast< ::_LARGE_INTEGER* >(lpPerformanceCount));\n}\n\nBOOST_FORCEINLINE BOOL_ QueryPerformanceFrequency(LARGE_INTEGER_* lpFrequency)\n{\n    return ::QueryPerformanceFrequency(reinterpret_cast< ::_LARGE_INTEGER* >(lpFrequency));\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_TIMERS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/tls.hpp",
    "content": "//  tls.hpp  --------------------------------------------------------------//\n\n//  Copyright 2013 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_TLS_HPP\n#define BOOST_DETAIL_WINAPI_TLS_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\n#if !defined( UNDER_CE )\n// Windows CE define TlsAlloc and TlsFree as inline functions in kfuncs.h\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nTlsAlloc(BOOST_DETAIL_WINAPI_VOID);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nTlsFree(boost::detail::winapi::DWORD_ dwTlsIndex);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::LPVOID_ WINAPI\nTlsGetValue(boost::detail::winapi::DWORD_ dwTlsIndex);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nTlsSetValue(\n    boost::detail::winapi::DWORD_ dwTlsIndex,\n    boost::detail::winapi::LPVOID_ lpTlsValue);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\nusing ::TlsAlloc;\nusing ::TlsFree;\nusing ::TlsGetValue;\nusing ::TlsSetValue;\n\n#if defined( BOOST_USE_WINDOWS_H )\nconst DWORD_ TLS_OUT_OF_INDEXES_ = TLS_OUT_OF_INDEXES;\n#else\nconst DWORD_ TLS_OUT_OF_INDEXES_ = 0xFFFFFFFF;\n#endif\n\nconst DWORD_ tls_out_of_indexes = TLS_OUT_OF_INDEXES_;\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_TLS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/wait.hpp",
    "content": "//  wait.hpp  --------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n//  Copyright 2015 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_WAIT_HPP\n#define BOOST_DETAIL_WINAPI_WAIT_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nWaitForSingleObject(\n    boost::detail::winapi::HANDLE_ hHandle,\n    boost::detail::winapi::DWORD_ dwMilliseconds);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nWaitForMultipleObjects(\n    boost::detail::winapi::DWORD_ nCount,\n    boost::detail::winapi::HANDLE_ const* lpHandles,\n    boost::detail::winapi::BOOL_ bWaitAll,\n    boost::detail::winapi::DWORD_ dwMilliseconds);\n\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4\nBOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI\nSignalObjectAndWait(\n    boost::detail::winapi::HANDLE_ hObjectToSignal,\n    boost::detail::winapi::HANDLE_ hObjectToWaitOn,\n    boost::detail::winapi::DWORD_ dwMilliseconds,\n    boost::detail::winapi::BOOL_ bAlertable);\n#endif\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\nusing ::WaitForMultipleObjects;\nusing ::WaitForSingleObject;\n#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4\nusing ::SignalObjectAndWait;\n#endif\n\n#if defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ INFINITE_ = INFINITE;\nconst DWORD_ WAIT_ABANDONED_ = WAIT_ABANDONED;\nconst DWORD_ WAIT_OBJECT_0_ = WAIT_OBJECT_0;\nconst DWORD_ WAIT_TIMEOUT_ = WAIT_TIMEOUT;\nconst DWORD_ WAIT_FAILED_ = WAIT_FAILED;\n\n#else // defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ INFINITE_ = (DWORD_)0xFFFFFFFF;\nconst DWORD_ WAIT_ABANDONED_ = 0x00000080L;\nconst DWORD_ WAIT_OBJECT_0_ = 0x00000000L;\nconst DWORD_ WAIT_TIMEOUT_ = 0x00000102L;\nconst DWORD_ WAIT_FAILED_ = (DWORD_)0xFFFFFFFF;\n\n#endif // defined( BOOST_USE_WINDOWS_H )\n\nconst DWORD_ infinite = INFINITE_;\nconst DWORD_ wait_abandoned = WAIT_ABANDONED_;\nconst DWORD_ wait_object_0 = WAIT_OBJECT_0_;\nconst DWORD_ wait_timeout = WAIT_TIMEOUT_;\nconst DWORD_ wait_failed = WAIT_FAILED_;\n\nconst DWORD_ max_non_infinite_wait = (DWORD_)0xFFFFFFFE;\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_WAIT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/winapi/waitable_timer.hpp",
    "content": "//  waitable_timer.hpp  --------------------------------------------------------------//\n\n//  Copyright 2013 Andrey Semashev\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n\n#ifndef BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP\n#define BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP\n\n#include <boost/detail/winapi/basic_types.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if !defined( BOOST_USE_WINDOWS_H )\nextern \"C\" {\ntypedef boost::detail::winapi::VOID_\n(WINAPI *PTIMERAPCROUTINE)(\n    boost::detail::winapi::LPVOID_ lpArgToCompletionRoutine,\n    boost::detail::winapi::DWORD_ dwTimerLowValue,\n    boost::detail::winapi::DWORD_ dwTimerHighValue);\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateWaitableTimerA(\n    ::_SECURITY_ATTRIBUTES* lpTimerAttributes,\n    boost::detail::winapi::BOOL_ bManualReset,\n    boost::detail::winapi::LPCSTR_ lpTimerName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenWaitableTimerA(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCSTR_ lpTimerName);\n#endif\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nCreateWaitableTimerW(\n    ::_SECURITY_ATTRIBUTES* lpTimerAttributes,\n    boost::detail::winapi::BOOL_ bManualReset,\n    boost::detail::winapi::LPCWSTR_ lpTimerName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI\nOpenWaitableTimerW(\n    boost::detail::winapi::DWORD_ dwDesiredAccess,\n    boost::detail::winapi::BOOL_ bInheritHandle,\n    boost::detail::winapi::LPCWSTR_ lpTimerName);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nSetWaitableTimer(\n    boost::detail::winapi::HANDLE_ hTimer,\n    const ::_LARGE_INTEGER* lpDueTime,\n    boost::detail::winapi::LONG_ lPeriod,\n    PTIMERAPCROUTINE pfnCompletionRoutine,\n    boost::detail::winapi::LPVOID_ lpArgToCompletionRoutine,\n    boost::detail::winapi::BOOL_ fResume);\n\nBOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI\nCancelWaitableTimer(boost::detail::winapi::HANDLE_ hTimer);\n}\n#endif\n\nnamespace boost {\nnamespace detail {\nnamespace winapi {\n\ntypedef ::PTIMERAPCROUTINE PTIMERAPCROUTINE_;\n\n#if !defined( BOOST_NO_ANSI_APIS )\nusing ::OpenWaitableTimerA;\n#endif\nusing ::OpenWaitableTimerW;\nusing ::CancelWaitableTimer;\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ CreateWaitableTimerA(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset, LPCSTR_ lpTimerName)\n{\n    return ::CreateWaitableTimerA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, lpTimerName);\n}\n#endif\n\nBOOST_FORCEINLINE HANDLE_ CreateWaitableTimerW(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset, LPCWSTR_ lpTimerName)\n{\n    return ::CreateWaitableTimerW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, lpTimerName);\n}\n\nBOOST_FORCEINLINE BOOL_ SetWaitableTimer(\n    HANDLE_ hTimer,\n    const LARGE_INTEGER_* lpDueTime,\n    LONG_ lPeriod,\n    PTIMERAPCROUTINE_ pfnCompletionRoutine,\n    LPVOID_ lpArgToCompletionRoutine,\n    BOOL_ fResume)\n{\n    return ::SetWaitableTimer(hTimer, reinterpret_cast< const ::_LARGE_INTEGER* >(lpDueTime), lPeriod, pfnCompletionRoutine, lpArgToCompletionRoutine, fResume);\n}\n\n#if !defined( BOOST_NO_ANSI_APIS )\nBOOST_FORCEINLINE HANDLE_ create_waitable_timer(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset, LPCSTR_ lpTimerName)\n{\n    return ::CreateWaitableTimerA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, lpTimerName);\n}\n#endif\n\nBOOST_FORCEINLINE HANDLE_ create_waitable_timer(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset, LPCWSTR_ lpTimerName)\n{\n    return ::CreateWaitableTimerW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, lpTimerName);\n}\n\nBOOST_FORCEINLINE HANDLE_ create_anonymous_waitable_timer(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset)\n{\n#ifdef BOOST_NO_ANSI_APIS\n    return ::CreateWaitableTimerW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, 0);\n#else\n    return ::CreateWaitableTimerA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, 0);\n#endif\n}\n\n}\n}\n}\n\n#endif // BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/detail/workaround.hpp",
    "content": "// Copyright David Abrahams 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef WORKAROUND_DWA2002126_HPP\n# define WORKAROUND_DWA2002126_HPP\n\n// Compiler/library version workaround macro\n//\n// Usage:\n//\n//     #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n//        // workaround for eVC4 and VC6\n//        ... // workaround code here\n//     #endif\n//\n// When BOOST_STRICT_CONFIG is defined, expands to 0. Otherwise, the\n// first argument must be undefined or expand to a numeric\n// value. The above expands to:\n//\n//     (BOOST_MSVC) != 0 && (BOOST_MSVC) < 1300\n//\n// When used for workarounds that apply to the latest known version \n// and all earlier versions of a compiler, the following convention \n// should be observed:\n//\n//     #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1301))\n//\n// The version number in this case corresponds to the last version in\n// which the workaround was known to have been required. When\n// BOOST_DETECT_OUTDATED_WORKAROUNDS is not the defined, the macro\n// BOOST_TESTED_AT(x) expands to \"!= 0\", which effectively activates\n// the workaround for any version of the compiler. When\n// BOOST_DETECT_OUTDATED_WORKAROUNDS is defined, a compiler warning or\n// error will be issued if the compiler version exceeds the argument\n// to BOOST_TESTED_AT().  This can be used to locate workarounds which\n// may be obsoleted by newer versions.\n\n# ifndef BOOST_STRICT_CONFIG\n\n#include <boost/config.hpp>\n\n#ifndef __BORLANDC__\n#define __BORLANDC___WORKAROUND_GUARD 1\n#else\n#define __BORLANDC___WORKAROUND_GUARD 0\n#endif\n#ifndef __CODEGEARC__\n#define __CODEGEARC___WORKAROUND_GUARD 1\n#else\n#define __CODEGEARC___WORKAROUND_GUARD 0\n#endif\n#ifndef _MSC_VER\n#define _MSC_VER_WORKAROUND_GUARD 1\n#else\n#define _MSC_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef _MSC_FULL_VER\n#define _MSC_FULL_VER_WORKAROUND_GUARD 1\n#else\n#define _MSC_FULL_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_MSVC\n#define BOOST_MSVC_WORKAROUND_GUARD 1\n#else\n#define BOOST_MSVC_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_MSVC_FULL_VER\n#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 1\n#else\n#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef __GNUC__\n#define __GNUC___WORKAROUND_GUARD 1\n#else\n#define __GNUC___WORKAROUND_GUARD 0\n#endif\n#ifndef __GNUC_MINOR__\n#define __GNUC_MINOR___WORKAROUND_GUARD 1\n#else\n#define __GNUC_MINOR___WORKAROUND_GUARD 0\n#endif\n#ifndef __GNUC_PATCHLEVEL__\n#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 1\n#else\n#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 0\n#endif\n#ifndef __IBMCPP__\n#define __IBMCPP___WORKAROUND_GUARD 1\n#else\n#define __IBMCPP___WORKAROUND_GUARD 0\n#endif\n#ifndef __SUNPRO_CC\n#define __SUNPRO_CC_WORKAROUND_GUARD 1\n#else\n#define __SUNPRO_CC_WORKAROUND_GUARD 0\n#endif\n#ifndef __DECCXX_VER\n#define __DECCXX_VER_WORKAROUND_GUARD 1\n#else\n#define __DECCXX_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef __MWERKS__\n#define __MWERKS___WORKAROUND_GUARD 1\n#else\n#define __MWERKS___WORKAROUND_GUARD 0\n#endif\n#ifndef __EDG__\n#define __EDG___WORKAROUND_GUARD 1\n#else\n#define __EDG___WORKAROUND_GUARD 0\n#endif\n#ifndef __EDG_VERSION__\n#define __EDG_VERSION___WORKAROUND_GUARD 1\n#else\n#define __EDG_VERSION___WORKAROUND_GUARD 0\n#endif\n#ifndef __HP_aCC\n#define __HP_aCC_WORKAROUND_GUARD 1\n#else\n#define __HP_aCC_WORKAROUND_GUARD 0\n#endif\n#ifndef __hpxstd98\n#define __hpxstd98_WORKAROUND_GUARD 1\n#else\n#define __hpxstd98_WORKAROUND_GUARD 0\n#endif\n#ifndef _CRAYC\n#define _CRAYC_WORKAROUND_GUARD 1\n#else\n#define _CRAYC_WORKAROUND_GUARD 0\n#endif\n#ifndef __DMC__\n#define __DMC___WORKAROUND_GUARD 1\n#else\n#define __DMC___WORKAROUND_GUARD 0\n#endif\n#ifndef MPW_CPLUS\n#define MPW_CPLUS_WORKAROUND_GUARD 1\n#else\n#define MPW_CPLUS_WORKAROUND_GUARD 0\n#endif\n#ifndef __COMO__\n#define __COMO___WORKAROUND_GUARD 1\n#else\n#define __COMO___WORKAROUND_GUARD 0\n#endif\n#ifndef __COMO_VERSION__\n#define __COMO_VERSION___WORKAROUND_GUARD 1\n#else\n#define __COMO_VERSION___WORKAROUND_GUARD 0\n#endif\n#ifndef __INTEL_COMPILER\n#define __INTEL_COMPILER_WORKAROUND_GUARD 1\n#else\n#define __INTEL_COMPILER_WORKAROUND_GUARD 0\n#endif\n#ifndef __ICL\n#define __ICL_WORKAROUND_GUARD 1\n#else\n#define __ICL_WORKAROUND_GUARD 0\n#endif\n#ifndef _COMPILER_VERSION\n#define _COMPILER_VERSION_WORKAROUND_GUARD 1\n#else\n#define _COMPILER_VERSION_WORKAROUND_GUARD 0\n#endif\n\n#ifndef _RWSTD_VER\n#define _RWSTD_VER_WORKAROUND_GUARD 1\n#else\n#define _RWSTD_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_RWSTD_VER\n#define BOOST_RWSTD_VER_WORKAROUND_GUARD 1\n#else\n#define BOOST_RWSTD_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef __GLIBCPP__\n#define __GLIBCPP___WORKAROUND_GUARD 1\n#else\n#define __GLIBCPP___WORKAROUND_GUARD 0\n#endif\n#ifndef _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC\n#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 1\n#else\n#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 0\n#endif\n#ifndef __SGI_STL_PORT\n#define __SGI_STL_PORT_WORKAROUND_GUARD 1\n#else\n#define __SGI_STL_PORT_WORKAROUND_GUARD 0\n#endif\n#ifndef _STLPORT_VERSION\n#define _STLPORT_VERSION_WORKAROUND_GUARD 1\n#else\n#define _STLPORT_VERSION_WORKAROUND_GUARD 0\n#endif\n#ifndef __LIBCOMO_VERSION__\n#define __LIBCOMO_VERSION___WORKAROUND_GUARD 1\n#else\n#define __LIBCOMO_VERSION___WORKAROUND_GUARD 0\n#endif\n#ifndef _CPPLIB_VER\n#define _CPPLIB_VER_WORKAROUND_GUARD 1\n#else\n#define _CPPLIB_VER_WORKAROUND_GUARD 0\n#endif\n\n#ifndef BOOST_INTEL_CXX_VERSION\n#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 1\n#else\n#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_INTEL_WIN\n#define BOOST_INTEL_WIN_WORKAROUND_GUARD 1\n#else\n#define BOOST_INTEL_WIN_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_DINKUMWARE_STDLIB\n#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 1\n#else\n#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_INTEL\n#define BOOST_INTEL_WORKAROUND_GUARD 1\n#else\n#define BOOST_INTEL_WORKAROUND_GUARD 0\n#endif\n// Always define to zero, if it's used it'll be defined my MPL:\n#define BOOST_MPL_CFG_GCC_WORKAROUND_GUARD 0\n\n#  define BOOST_WORKAROUND(symbol, test)                \\\n         ((symbol ## _WORKAROUND_GUARD + 0 == 0) &&     \\\n         (symbol != 0) && (1 % (( (symbol test) ) + 1)))\n//                              ^ ^           ^ ^\n// The extra level of parenthesis nesting above, along with the\n// BOOST_OPEN_PAREN indirection below, is required to satisfy the\n// broken preprocessor in MWCW 8.3 and earlier.\n//\n// The basic mechanism works as follows:\n//      (symbol test) + 1        =>   if (symbol test) then 2 else 1\n//      1 % ((symbol test) + 1)  =>   if (symbol test) then 1 else 0\n//\n// The complication with % is for cooperation with BOOST_TESTED_AT().\n// When \"test\" is BOOST_TESTED_AT(x) and\n// BOOST_DETECT_OUTDATED_WORKAROUNDS is #defined,\n//\n//      symbol test              =>   if (symbol <= x) then 1 else -1\n//      (symbol test) + 1        =>   if (symbol <= x) then 2 else 0\n//      1 % ((symbol test) + 1)  =>   if (symbol <= x) then 1 else divide-by-zero\n//\n\n#  ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS\n#   define BOOST_OPEN_PAREN (\n#   define BOOST_TESTED_AT(value)  > value) ?(-1): BOOST_OPEN_PAREN 1\n#  else\n#   define BOOST_TESTED_AT(value) != ((value)-(value))\n#  endif\n\n# else\n\n#  define BOOST_WORKAROUND(symbol, test) 0\n\n# endif \n\n#endif // WORKAROUND_DWA2002126_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/N3757.hpp",
    "content": "//Copyright (c) 2006-2013 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_9011016A11A711E3B46CD9FA6088709B\n#define UUID_9011016A11A711E3B46CD9FA6088709B\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/exception/info.hpp>\n#include <boost/exception/get_error_info.hpp>\n\nnamespace\nboost\n    {\n    //Here we're using the boost::error_info machinery to store the info in the exception\n    //object. Within the context of N3757, this is strictly an implementation detail.\n\n    template <class Tag>\n    inline\n    void\n    exception::\n    set( typename Tag::type const & v )\n        {\n        exception_detail::set_info(*this,error_info<Tag,typename Tag::type>(v));\n        }\n\n    template <class Tag>\n    inline\n    typename Tag::type const *\n    exception::\n    get() const\n        {\n        return get_error_info<error_info<Tag,typename Tag::type> >(*this);\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/all.hpp",
    "content": "//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_316FDA946C0D11DEA9CBAE5255D89593\n#define UUID_316FDA946C0D11DEA9CBAE5255D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/exception/diagnostic_information.hpp>\n#include <boost/exception/error_info.hpp>\n#include <boost/exception/exception.hpp>\n#include <boost/exception/get_error_info.hpp>\n#include <boost/exception/info.hpp>\n#include <boost/exception/info_tuple.hpp>\n#include <boost/exception/errinfo_api_function.hpp>\n#include <boost/exception/errinfo_at_line.hpp>\n#include <boost/exception/errinfo_errno.hpp>\n#include <boost/exception/errinfo_file_handle.hpp>\n#include <boost/exception/errinfo_file_name.hpp>\n#include <boost/exception/errinfo_file_open_mode.hpp>\n#include <boost/exception/errinfo_type_info_name.hpp>\n#ifndef BOOST_NO_EXCEPTIONS\n#include <boost/exception/errinfo_nested_exception.hpp>\n#include <boost/exception_ptr.hpp>\n#endif\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/current_exception_cast.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_7E83C166200811DE885E826156D89593\n#define UUID_7E83C166200811DE885E826156D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\nnamespace\nboost\n    {\n    template <class E>\n    inline\n    E *\n    current_exception_cast()\n        {\n        try\n            {\n            throw;\n            }\n        catch(\n        E & e )\n            {\n            return &e;\n            }\n        catch(\n        ...)\n            {\n            return 0;\n            }\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/detail/clone_current_exception.hpp",
    "content": "//Copyright (c) 2006-2013 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_81522C0EB56511DFAB613DB0DFD72085\n#define UUID_81522C0EB56511DFAB613DB0DFD72085\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#ifdef BOOST_NO_EXCEPTIONS\n#    error This header requires exception handling to be enabled.\n#endif\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        class clone_base;\n\n#ifdef BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR\n        int clone_current_exception_non_intrusive( clone_base const * & cloned );\n#endif\n\n        namespace\n        clone_current_exception_result\n            {\n            int const success=0;\n            int const bad_alloc=1;\n            int const bad_exception=2;\n            int const not_supported=3;\n            }\n\n        inline\n        int\n        clone_current_exception( clone_base const * & cloned )\n            {\n#ifdef BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR\n            return clone_current_exception_non_intrusive(cloned);\n#else\n            return clone_current_exception_result::not_supported;\n#endif\n            }\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/detail/error_info_impl.hpp",
    "content": "//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_CE6983AC753411DDA764247956D89593\n#define UUID_CE6983AC753411DDA764247956D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <string>\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        class\n        error_info_base\n            {\n            public:\n\n            virtual std::string name_value_string() const = 0;\n\n            protected:\n\n            virtual\n            ~error_info_base() throw()\n                {\n                }\n            };\n        }\n\n    template <class Tag,class T>\n    class\n    error_info:\n        public exception_detail::error_info_base\n        {\n        public:\n\n        typedef T value_type;\n\n        error_info( value_type const & value );\n        ~error_info() throw();\n\n        value_type const &\n        value() const\n            {\n            return value_;\n            }\n\n        value_type &\n        value()\n            {\n            return value_;\n            }\n\n        private:\n\n        std::string name_value_string() const;\n\n        value_type value_;\n        };\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/detail/exception_ptr.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_618474C2DE1511DEB74A388C56D89593\n#define UUID_618474C2DE1511DEB74A388C56D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/config.hpp>\n#ifdef BOOST_NO_EXCEPTIONS\n#error This header requires exception handling to be enabled.\n#endif\n#include <boost/exception/exception.hpp>\n#include <boost/exception/info.hpp>\n#include <boost/exception/diagnostic_information.hpp>\n#include <boost/exception/detail/type_info.hpp>\n#include <boost/exception/detail/clone_current_exception.hpp>\n#ifndef BOOST_NO_RTTI\n#include <boost/core/demangle.hpp>\n#endif\n#include <boost/shared_ptr.hpp>\n#include <stdexcept>\n#include <new>\n#include <ios>\n#include <stdlib.h>\n\nnamespace\nboost\n    {\n    class exception_ptr;\n    BOOST_NORETURN void rethrow_exception( exception_ptr const & );\n    exception_ptr current_exception();\n\n    class\n    exception_ptr\n        {\n        typedef boost::shared_ptr<exception_detail::clone_base const> impl;\n        impl ptr_;\n        friend void rethrow_exception( exception_ptr const & );\n        typedef exception_detail::clone_base const * (impl::*unspecified_bool_type)() const;\n        public:\n        exception_ptr()\n            {\n            }\n        explicit\n        exception_ptr( impl const & ptr ):\n            ptr_(ptr)\n            {\n            }\n        bool\n        operator==( exception_ptr const & other ) const\n            {\n            return ptr_==other.ptr_;\n            }\n        bool\n        operator!=( exception_ptr const & other ) const\n            {\n            return ptr_!=other.ptr_;\n            }\n        operator unspecified_bool_type() const\n            {\n            return ptr_?&impl::get:0;\n            }\n        };\n\n    template <class T>\n    inline\n    exception_ptr\n    copy_exception( T const & e )\n        {\n        try\n            {\n            throw enable_current_exception(e);\n            }\n        catch(\n        ... )\n            {\n            return current_exception();\n            }\n        }\n\n#ifndef BOOST_NO_RTTI\n    typedef error_info<struct tag_original_exception_type,std::type_info const *> original_exception_type;\n\n    inline\n    std::string\n    to_string( original_exception_type const & x )\n        {\n        return core::demangle(x.value()->name());\n        }\n#endif\n\n    namespace\n    exception_detail\n        {\n        struct\n        bad_alloc_:\n            boost::exception,\n            std::bad_alloc\n                {\n                ~bad_alloc_() throw() { }\n                };\n\n        struct\n        bad_exception_:\n            boost::exception,\n            std::bad_exception\n                {\n                ~bad_exception_() throw() { }\n                };\n\n        template <class Exception>\n        exception_ptr\n        get_static_exception_object()\n            {\n            Exception ba;\n            exception_detail::clone_impl<Exception> c(ba);\n#ifndef BOOST_EXCEPTION_DISABLE\n            c <<\n                throw_function(BOOST_CURRENT_FUNCTION) <<\n                throw_file(__FILE__) <<\n                throw_line(__LINE__);\n#endif\n            static exception_ptr ep(shared_ptr<exception_detail::clone_base const>(new exception_detail::clone_impl<Exception>(c)));\n            return ep;\n            }\n\n        template <class Exception>\n        struct\n        exception_ptr_static_exception_object\n            {\n            static exception_ptr const e;\n            };\n\n        template <class Exception>\n        exception_ptr const\n        exception_ptr_static_exception_object<Exception>::\n        e = get_static_exception_object<Exception>();\n        }\n\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n    class\n    unknown_exception:\n        public boost::exception,\n        public std::exception\n        {\n        public:\n\n        unknown_exception()\n            {\n            }\n\n        explicit\n        unknown_exception( std::exception const & e )\n            {\n            add_original_type(e);\n            }\n\n        explicit\n        unknown_exception( boost::exception const & e ):\n            boost::exception(e)\n            {\n            add_original_type(e);\n            }\n\n        ~unknown_exception() throw()\n            {\n            }\n\n        private:\n\n        template <class E>\n        void\n        add_original_type( E const & e )\n            {\n#ifndef BOOST_NO_RTTI\n            (*this) << original_exception_type(&typeid(e));\n#endif\n            }\n        };\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n    namespace\n    exception_detail\n        {\n        template <class T>\n        class\n        current_exception_std_exception_wrapper:\n            public T,\n            public boost::exception\n            {\n            public:\n\n            explicit\n            current_exception_std_exception_wrapper( T const & e1 ):\n                T(e1)\n                {\n                add_original_type(e1);\n                }\n\n            current_exception_std_exception_wrapper( T const & e1, boost::exception const & e2 ):\n                T(e1),\n                boost::exception(e2)\n                {\n                add_original_type(e1);\n                }\n\n            ~current_exception_std_exception_wrapper() throw()\n                {\n                }\n\n            private:\n\n            template <class E>\n            void\n            add_original_type( E const & e )\n                {\n#ifndef BOOST_NO_RTTI\n                (*this) << original_exception_type(&typeid(e));\n#endif\n                }\n            };\n\n#ifdef BOOST_NO_RTTI\n        template <class T>\n        boost::exception const *\n        get_boost_exception( T const * )\n            {\n            try\n                {\n                throw;\n                }\n            catch(\n            boost::exception & x )\n                {\n                return &x;\n                }\n            catch(...)\n                {\n                return 0;\n                }\n            }\n#else\n        template <class T>\n        boost::exception const *\n        get_boost_exception( T const * x )\n            {\n            return dynamic_cast<boost::exception const *>(x);\n            }\n#endif\n\n        template <class T>\n        inline\n        exception_ptr\n        current_exception_std_exception( T const & e1 )\n            {\n            if( boost::exception const * e2 = get_boost_exception(&e1) )\n                return boost::copy_exception(current_exception_std_exception_wrapper<T>(e1,*e2));\n            else\n                return boost::copy_exception(current_exception_std_exception_wrapper<T>(e1));\n            }\n\n        inline\n        exception_ptr\n        current_exception_unknown_exception()\n            {\n            return boost::copy_exception(unknown_exception());\n            }\n\n        inline\n        exception_ptr\n        current_exception_unknown_boost_exception( boost::exception const & e )\n            {\n            return boost::copy_exception(unknown_exception(e));\n            }\n\n        inline\n        exception_ptr\n        current_exception_unknown_std_exception( std::exception const & e )\n            {\n            if( boost::exception const * be = get_boost_exception(&e) )\n                return current_exception_unknown_boost_exception(*be);\n            else\n                return boost::copy_exception(unknown_exception(e));\n            }\n\n        inline\n        exception_ptr\n        current_exception_impl()\n            {\n            exception_detail::clone_base const * e=0;\n            switch(\n            exception_detail::clone_current_exception(e) )\n                {\n                case exception_detail::clone_current_exception_result::\n                success:\n                    {\n                    BOOST_ASSERT(e!=0);\n                    return exception_ptr(shared_ptr<exception_detail::clone_base const>(e));\n                    }\n                case exception_detail::clone_current_exception_result::\n                bad_alloc:\n                    {\n                    BOOST_ASSERT(!e);\n                    return exception_detail::exception_ptr_static_exception_object<bad_alloc_>::e;\n                    }\n                case exception_detail::clone_current_exception_result::\n                bad_exception:\n                    {\n                    BOOST_ASSERT(!e);\n                    return exception_detail::exception_ptr_static_exception_object<bad_exception_>::e;\n                    }\n                default:\n                    BOOST_ASSERT(0);\n                case exception_detail::clone_current_exception_result::\n                not_supported:\n                    {\n                    BOOST_ASSERT(!e);\n                    try\n                        {\n                        throw;\n                        }\n                    catch(\n                    exception_detail::clone_base & e )\n                        {\n                        return exception_ptr(shared_ptr<exception_detail::clone_base const>(e.clone()));\n                        }\n                    catch(\n                    std::domain_error & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::invalid_argument & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::length_error & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::out_of_range & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::logic_error & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::range_error & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::overflow_error & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::underflow_error & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::ios_base::failure & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::runtime_error & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::bad_alloc & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n#ifndef BOOST_NO_TYPEID\n                    catch(\n                    std::bad_cast & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::bad_typeid & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n#endif\n                    catch(\n                    std::bad_exception & e )\n                        {\n                        return exception_detail::current_exception_std_exception(e);\n                        }\n                    catch(\n                    std::exception & e )\n                        {\n                        return exception_detail::current_exception_unknown_std_exception(e);\n                        }\n                    catch(\n                    boost::exception & e )\n                        {\n                        return exception_detail::current_exception_unknown_boost_exception(e);\n                        }\n                    catch(\n                    ... )\n                        {\n                        return exception_detail::current_exception_unknown_exception();\n                        }\n                    }\n                }\n            }\n        }\n\n    inline\n    exception_ptr\n    current_exception()\n        {\n        exception_ptr ret;\n        try\n            {\n            ret=exception_detail::current_exception_impl();\n            }\n        catch(\n        std::bad_alloc & )\n            {\n            ret=exception_detail::exception_ptr_static_exception_object<exception_detail::bad_alloc_>::e;\n            }\n        catch(\n        ... )\n            {\n            ret=exception_detail::exception_ptr_static_exception_object<exception_detail::bad_exception_>::e;\n            }\n        BOOST_ASSERT(ret);\n        return ret;\n        }\n\n    BOOST_NORETURN\n    inline\n    void\n    rethrow_exception( exception_ptr const & p )\n        {\n        BOOST_ASSERT(p);\n        p.ptr_->rethrow();\n        BOOST_ASSERT(0);\n        #if defined(UNDER_CE)\n            // some CE platforms don't define ::abort()\n            exit(-1);\n        #else\n            abort();\n        #endif\n        }\n\n    inline\n    std::string\n    diagnostic_information( exception_ptr const & p, bool verbose=true )\n        {\n        if( p )\n            try\n                {\n                rethrow_exception(p);\n                }\n            catch(\n            ... )\n                {\n                return current_exception_diagnostic_information(verbose);\n                }\n        return \"<empty>\";\n        }\n\n    inline\n    std::string\n    to_string( exception_ptr const & p )\n        {\n        std::string s='\\n'+diagnostic_information(p);\n        std::string padding(\"  \");\n        std::string r;\n        bool f=false;\n        for( std::string::const_iterator i=s.begin(),e=s.end(); i!=e; ++i )\n            {\n            if( f )\n                r+=padding;\n            char c=*i;\n            r+=c;\n            f=(c=='\\n');\n            }\n        return r;\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/detail/is_output_streamable.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_898984B4076411DD973EDFA055D89593\n#define UUID_898984B4076411DD973EDFA055D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <ostream>\n\nnamespace\nboost\n    {\n    namespace\n    to_string_detail\n        {\n        struct\n        partial_ordering_helper1\n            {\n            template <class CharT,class Traits>\n            partial_ordering_helper1( std::basic_ostream<CharT,Traits> & );\n            };\n\n        struct\n        partial_ordering_helper2\n            {\n            template <class T>\n            partial_ordering_helper2( T const & );\n            };\n\n        char operator<<( partial_ordering_helper1, partial_ordering_helper2 );\n\n        template <class T,class CharT,class Traits>\n        struct\n        is_output_streamable_impl\n            {\n            static std::basic_ostream<CharT,Traits> & f();\n            static T const & g();\n            enum e { value=1!=(sizeof(f()<<g())) };\n            };\n        }\n\n    template <class T, class CharT=char, class Traits=std::char_traits<CharT> >\n    struct\n    is_output_streamable\n        {\n        enum e { value=to_string_detail::is_output_streamable_impl<T,CharT,Traits>::value };\n        };\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/detail/object_hex_dump.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_6F463AC838DF11DDA3E6909F56D89593\n#define UUID_6F463AC838DF11DDA3E6909F56D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/exception/detail/type_info.hpp>\n#include <iomanip>\n#include <ios>\n#include <string>\n#include <sstream>\n#include <cstdlib>\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        template <class T>\n        inline\n        std::string\n        object_hex_dump( T const & x, std::size_t max_size=16 )\n            {\n            std::ostringstream s;\n            s << \"type: \" << type_name<T>() << \", size: \" << sizeof(T) << \", dump: \";\n            std::size_t n=sizeof(T)>max_size?max_size:sizeof(T);\n            s.fill('0');\n            s.width(2);\n            unsigned char const * b=reinterpret_cast<unsigned char const *>(&x);\n            s << std::setw(2) << std::hex << (unsigned int)*b;\n            for( unsigned char const * e=b+n; ++b!=e; )\n                s << \" \" << std::setw(2) << std::hex << (unsigned int)*b;\n            return s.str();\n            }\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/detail/type_info.hpp",
    "content": "//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_C3E1741C754311DDB2834CCA55D89593\n#define UUID_C3E1741C754311DDB2834CCA55D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/core/typeinfo.hpp>\n#include <boost/core/demangle.hpp>\n#include <boost/current_function.hpp>\n#include <boost/config.hpp>\n#include <string>\n\nnamespace\nboost\n    {\n    template <class T>\n    inline\n    std::string\n    tag_type_name()\n        {\n#ifdef BOOST_NO_TYPEID\n        return BOOST_CURRENT_FUNCTION;\n#else\n        return core::demangle(typeid(T*).name());\n#endif\n        }\n\n    template <class T>\n    inline\n    std::string\n    type_name()\n        {\n#ifdef BOOST_NO_TYPEID\n        return BOOST_CURRENT_FUNCTION;\n#else\n        return core::demangle(typeid(T).name());\n#endif\n        }\n\n    namespace\n    exception_detail\n        {\n        struct\n        type_info_\n            {\n            core::typeinfo const * type_;\n\n            explicit\n            type_info_( core::typeinfo const & type ):\n                type_(&type)\n                {\n                }\n\n            friend\n            bool\n            operator<( type_info_ const & a, type_info_ const & b )\n                {\n                return 0!=(a.type_->before(*b.type_));\n                }\n            };\n        }\n    }\n\n#define BOOST_EXCEPTION_STATIC_TYPEID(T) ::boost::exception_detail::type_info_(BOOST_CORE_TYPEID(T))\n\n#ifndef BOOST_NO_RTTI\n#define BOOST_EXCEPTION_DYNAMIC_TYPEID(x) ::boost::exception_detail::type_info_(typeid(x))\n#endif\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/diagnostic_information.hpp",
    "content": "//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_0552D49838DD11DD90146B8956D89593\n#define UUID_0552D49838DD11DD90146B8956D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/config.hpp>\n#include <boost/exception/get_error_info.hpp>\n#include <boost/exception/info.hpp>\n#include <boost/utility/enable_if.hpp>\n#ifndef BOOST_NO_RTTI\n#include <boost/core/demangle.hpp>\n#endif\n#include <exception>\n#include <sstream>\n#include <string>\n\n#ifndef BOOST_NO_EXCEPTIONS\n#include <boost/exception/current_exception_cast.hpp>\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        std::string diagnostic_information_impl( boost::exception const *, std::exception const *, bool, bool );\n        }\n\n    inline\n    std::string\n    current_exception_diagnostic_information( bool verbose=true)\n        {\n        boost::exception const * be=current_exception_cast<boost::exception const>();\n        std::exception const * se=current_exception_cast<std::exception const>();\n        if( be || se )\n            return exception_detail::diagnostic_information_impl(be,se,true,verbose);\n        else\n            return \"No diagnostic information available.\";\n        }\n    }\n#endif\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        inline\n        exception const *\n        get_boost_exception( exception const * e )\n            {\n            return e;\n            }\n\n        inline\n        exception const *\n        get_boost_exception( ... )\n            {\n            return 0;\n            }\n\n        inline\n        std::exception const *\n        get_std_exception( std::exception const * e )\n            {\n            return e;\n            }\n\n        inline\n        std::exception const *\n        get_std_exception( ... )\n            {\n            return 0;\n            }\n\n        inline\n        char const *\n        get_diagnostic_information( exception const & x, char const * header )\n            {\n#ifndef BOOST_NO_EXCEPTIONS\n            try\n                {\n#endif\n                error_info_container * c=x.data_.get();\n                if( !c )\n                    x.data_.adopt(c=new exception_detail::error_info_container_impl);\n                char const * di=c->diagnostic_information(header);\n                BOOST_ASSERT(di!=0);\n                return di;\n#ifndef BOOST_NO_EXCEPTIONS\n                }\n            catch(...)\n                {\n                return 0;\n                }\n#endif\n            }\n\n        inline\n        std::string\n        diagnostic_information_impl( boost::exception const * be, std::exception const * se, bool with_what, bool verbose )\n            {\n            if( !be && !se )\n                return \"Unknown exception.\";\n#ifndef BOOST_NO_RTTI\n            if( !be )\n                be=dynamic_cast<boost::exception const *>(se);\n            if( !se )\n                se=dynamic_cast<std::exception const *>(be);\n#endif\n            char const * wh=0;\n            if( with_what && se )\n                {\n                wh=se->what();\n                if( be && exception_detail::get_diagnostic_information(*be,0)==wh )\n                    return wh;\n                }\n            std::ostringstream tmp;\n            if( be && verbose )\n                {\n                char const * const * f=get_error_info<throw_file>(*be);\n                int const * l=get_error_info<throw_line>(*be);\n                char const * const * fn=get_error_info<throw_function>(*be);\n                if( !f && !l && !fn )\n                    tmp << \"Throw location unknown (consider using BOOST_THROW_EXCEPTION)\\n\";\n                else\n                    {\n                    if( f )\n                        {\n                        tmp << *f;\n                        if( int const * l=get_error_info<throw_line>(*be) )\n                            tmp << '(' << *l << \"): \";\n                        }\n                    tmp << \"Throw in function \";\n                    if( char const * const * fn=get_error_info<throw_function>(*be) )\n                        tmp << *fn;\n                    else\n                        tmp << \"(unknown)\";\n                    tmp << '\\n';\n                    }\n                }\n#ifndef BOOST_NO_RTTI\n            if ( verbose )\n                tmp << std::string(\"Dynamic exception type: \") <<\n                    core::demangle((be?(BOOST_EXCEPTION_DYNAMIC_TYPEID(*be)):(BOOST_EXCEPTION_DYNAMIC_TYPEID(*se))).type_->name()) << '\\n';\n#endif\n            if( with_what && se && verbose )\n                tmp << \"std::exception::what: \" << wh << '\\n';\n            if( be )\n                if( char const * s=exception_detail::get_diagnostic_information(*be,tmp.str().c_str()) )\n                    if( *s )\n                        return std::string(s);\n            return tmp.str();\n            }\n        }\n\n    template <class T>\n    std::string\n    diagnostic_information( T const & e, bool verbose=true )\n        {\n        return exception_detail::diagnostic_information_impl(exception_detail::get_boost_exception(&e),exception_detail::get_std_exception(&e),true,verbose);\n        }\n\n    inline\n    char const *\n    diagnostic_information_what( exception const & e, bool verbose=true ) throw()\n        {\n        char const * w=0;\n#ifndef BOOST_NO_EXCEPTIONS\n        try\n            {\n#endif\n            (void) exception_detail::diagnostic_information_impl(&e,0,false,verbose);\n            if( char const * di=exception_detail::get_diagnostic_information(e,0) )\n                return di;\n            else\n                return \"Failed to produce boost::diagnostic_information_what()\";\n#ifndef BOOST_NO_EXCEPTIONS\n            }\n        catch(\n        ... )\n            {\n            }\n#endif\n        return w;\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/enable_current_exception.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#include <boost/exception/exception.hpp>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/enable_error_info.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#include <boost/exception/exception.hpp>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/errinfo_api_function.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_DDFBB4546C1211DEA4659E9055D89593\n#define UUID_DDFBB4546C1211DEA4659E9055D89593\n\n#include \"boost/exception/error_info.hpp\"\n\nnamespace\nboost\n    {\n    //Usage hint:\n    //if( api_function(....)!=0 )\n    //    BOOST_THROW_EXCEPTION(\n    //        failure() <<\n    //        errinfo_api_function(\"api_function\") );\n    typedef error_info<struct errinfo_api_function_,char const *> errinfo_api_function;\n    }\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/errinfo_at_line.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_E7255CE26C1211DE85800C9155D89593\n#define UUID_E7255CE26C1211DE85800C9155D89593\n\nnamespace\nboost\n    {\n    template <class Tag,class T> class error_info;\n\n    //Use with parsing errors exceptions, for example in a XML file parser.\n    typedef error_info<struct errinfo_at_line_,int> errinfo_at_line;\n    }\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/errinfo_errno.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_F0EE17BE6C1211DE87FF459155D89593\n#define UUID_F0EE17BE6C1211DE87FF459155D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include \"boost/exception/info.hpp\"\n#include <errno.h>\n#include <string.h>\n\nnamespace\nboost\n    {\n    typedef error_info<struct errinfo_errno_,int> errinfo_errno;\n\n    //Usage hint:\n    //if( c_function(....)!=0 )\n    //    BOOST_THROW_EXCEPTION(\n    //        failure() <<\n    //        errinfo_errno(errno) <<\n    //        errinfo_api_function(\"c_function\") );\n    inline\n    std::string\n    to_string( errinfo_errno const & e )\n        {\n        std::ostringstream tmp;\n        int v=e.value();\n        tmp << v << \", \\\"\" << strerror(v) << \"\\\"\";\n        return tmp.str();\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/errinfo_file_handle.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_F79E6EE26C1211DEB26E929155D89593\n#define UUID_F79E6EE26C1211DEB26E929155D89593\n\n#include <stdio.h>\n\nnamespace\nboost\n    {\n    template <class> class weak_ptr;\n    template <class Tag,class T> class error_info;\n\n    typedef error_info<struct errinfo_file_handle_,weak_ptr<FILE> > errinfo_file_handle;\n    }\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/errinfo_file_name.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_FEE5120A6C1211DE94E8BC9155D89593\n#define UUID_FEE5120A6C1211DE94E8BC9155D89593\n\n#include <string>\n\nnamespace\nboost\n    {\n    template <class Tag,class T> class error_info;\n\n    //Usage hint:\n    //FILE * f=fopen(name,mode);\n    //if( !f )\n    //    BOOST_THROW_EXCEPTION(\n    //        file_open_error() <<\n    //        errinfo_file_name(name) <<\n    //        errinfo_file_open_mode(mode) );\n    typedef error_info<struct errinfo_file_name_,std::string> errinfo_file_name;\n    }\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/errinfo_file_open_mode.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_056F1F266C1311DE8E74299255D89593\n#define UUID_056F1F266C1311DE8E74299255D89593\n\n#include <string>\n\nnamespace\nboost\n    {\n    template <class Tag,class T> class error_info;\n\n    //Usage hint:\n    //FILE * f=fopen(name,mode);\n    //if( !f )\n    //    BOOST_THROW_EXCEPTION(\n    //        file_open_error() <<\n    //        errinfo_file_name(name) <<\n    //        errinfo_file_open_mode(mode) );\n    typedef error_info<struct errinfo_file_open_mode_,std::string> errinfo_file_open_mode;\n    }\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/errinfo_nested_exception.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_45CC9A82B77511DEB330FC4956D89593\n#define UUID_45CC9A82B77511DEB330FC4956D89593\n\nnamespace\nboost\n    {\n    namespace exception_detail { class clone_base; }\n    template <class Tag,class T> class error_info;\n    class exception_ptr;\n    typedef error_info<struct errinfo_nested_exception_,exception_ptr> errinfo_nested_exception;\n    }\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/errinfo_type_info_name.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_0E11109E6C1311DEB7EA649255D89593\n#define UUID_0E11109E6C1311DEB7EA649255D89593\n\n#include <string>\n\nnamespace\nboost\n    {\n    template <class Tag,class T> class error_info;\n\n    //Usage hint:\n    //BOOST_THROW_EXCEPTION(\n    //    bad_type() <<\n    //    errinfo_type_info_name(typeid(x).name()) );\n    typedef error_info<struct errinfo_type_info_name_,std::string> errinfo_type_info_name;\n    }\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/error_info.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_EE7ECCA0433B11E1923E37064924019B\n#define UUID_EE7ECCA0433B11E1923E37064924019B\nnamespace boost { template <class Tag,class T> class error_info; }\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/exception.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_274DA366004E11DCB1DDFE2E56D89593\n#define UUID_274DA366004E11DCB1DDFE2E56D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        template <class T>\n        class\n        refcount_ptr\n            {\n            public:\n\n            refcount_ptr():\n                px_(0)\n                {\n                }\n\n            ~refcount_ptr()\n                {\n                release();\n                }\n\n            refcount_ptr( refcount_ptr const & x ):\n                px_(x.px_)\n                {\n                add_ref();\n                }\n\n            refcount_ptr &\n            operator=( refcount_ptr const & x )\n                {\n                adopt(x.px_);\n                return *this;\n                }\n\n            void\n            adopt( T * px )\n                {\n                release();\n                px_=px;\n                add_ref();\n                }\n\n            T *\n            get() const\n                {\n                return px_;\n                }\n\n            private:\n\n            T * px_;\n\n            void\n            add_ref()\n                {\n                if( px_ )\n                    px_->add_ref();\n                }\n\n            void\n            release()\n                {\n                if( px_ && px_->release() )\n                    px_=0;\n                }\n            };\n        }\n\n    ////////////////////////////////////////////////////////////////////////\n\n    template <class Tag,class T>\n    class error_info;\n\n    typedef error_info<struct throw_function_,char const *> throw_function;\n    typedef error_info<struct throw_file_,char const *> throw_file;\n    typedef error_info<struct throw_line_,int> throw_line;\n\n    template <>\n    class\n    error_info<throw_function_,char const *>\n        {\n        public:\n        typedef char const * value_type;\n        value_type v_;\n        explicit\n        error_info( value_type v ):\n            v_(v)\n            {\n            }\n        };\n\n    template <>\n    class\n    error_info<throw_file_,char const *>\n        {\n        public:\n        typedef char const * value_type;\n        value_type v_;\n        explicit\n        error_info( value_type v ):\n            v_(v)\n            {\n            }\n        };\n\n    template <>\n    class\n    error_info<throw_line_,int>\n        {\n        public:\n        typedef int value_type;\n        value_type v_;\n        explicit\n        error_info( value_type v ):\n            v_(v)\n            {\n            }\n        };\n\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n    class exception;\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n    template <class T>\n    class shared_ptr;\n\n    namespace\n    exception_detail\n        {\n        class error_info_base;\n        struct type_info_;\n\n        struct\n        error_info_container\n            {\n            virtual char const * diagnostic_information( char const * ) const = 0;\n            virtual shared_ptr<error_info_base> get( type_info_ const & ) const = 0;\n            virtual void set( shared_ptr<error_info_base> const &, type_info_ const & ) = 0;\n            virtual void add_ref() const = 0;\n            virtual bool release() const = 0;\n            virtual refcount_ptr<exception_detail::error_info_container> clone() const = 0;\n\n            protected:\n\n            ~error_info_container() throw()\n                {\n                }\n            };\n\n        template <class>\n        struct get_info;\n\n        template <>\n        struct get_info<throw_function>;\n\n        template <>\n        struct get_info<throw_file>;\n\n        template <>\n        struct get_info<throw_line>;\n\n        char const * get_diagnostic_information( exception const &, char const * );\n\n        void copy_boost_exception( exception *, exception const * );\n\n        template <class E,class Tag,class T>\n        E const & set_info( E const &, error_info<Tag,T> const & );\n\n        template <class E>\n        E const & set_info( E const &, throw_function const & );\n\n        template <class E>\n        E const & set_info( E const &, throw_file const & );\n\n        template <class E>\n        E const & set_info( E const &, throw_line const & );\n        }\n\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n    class\n    exception\n        {\n        //<N3757>\n        public:\n        template <class Tag> void set( typename Tag::type const & );\n        template <class Tag> typename Tag::type const * get() const;\n        //</N3757>\n\n        protected:\n\n        exception():\n            throw_function_(0),\n            throw_file_(0),\n            throw_line_(-1)\n            {\n            }\n\n#ifdef __HP_aCC\n        //On HP aCC, this protected copy constructor prevents throwing boost::exception.\n        //On all other platforms, the same effect is achieved by the pure virtual destructor.\n        exception( exception const & x ) throw():\n            data_(x.data_),\n            throw_function_(x.throw_function_),\n            throw_file_(x.throw_file_),\n            throw_line_(x.throw_line_)\n            {\n            }\n#endif\n\n        virtual ~exception() throw()\n#ifndef __HP_aCC\n            = 0 //Workaround for HP aCC, =0 incorrectly leads to link errors.\n#endif\n            ;\n\n#if (defined(__MWERKS__) && __MWERKS__<=0x3207) || (defined(_MSC_VER) && _MSC_VER<=1310)\n        public:\n#else\n        private:\n\n        template <class E>\n        friend E const & exception_detail::set_info( E const &, throw_function const & );\n\n        template <class E>\n        friend E const & exception_detail::set_info( E const &, throw_file const & );\n\n        template <class E>\n        friend E const & exception_detail::set_info( E const &, throw_line const & );\n\n        template <class E,class Tag,class T>\n        friend E const & exception_detail::set_info( E const &, error_info<Tag,T> const & );\n\n        friend char const * exception_detail::get_diagnostic_information( exception const &, char const * );\n\n        template <class>\n        friend struct exception_detail::get_info;\n        friend struct exception_detail::get_info<throw_function>;\n        friend struct exception_detail::get_info<throw_file>;\n        friend struct exception_detail::get_info<throw_line>;\n        friend void exception_detail::copy_boost_exception( exception *, exception const * );\n#endif\n        mutable exception_detail::refcount_ptr<exception_detail::error_info_container> data_;\n        mutable char const * throw_function_;\n        mutable char const * throw_file_;\n        mutable int throw_line_;\n        };\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n    inline\n    exception::\n    ~exception() throw()\n        {\n        }\n\n    namespace\n    exception_detail\n        {\n        template <class E>\n        E const &\n        set_info( E const & x, throw_function const & y )\n            {\n            x.throw_function_=y.v_;\n            return x;\n            }\n\n        template <class E>\n        E const &\n        set_info( E const & x, throw_file const & y )\n            {\n            x.throw_file_=y.v_;\n            return x;\n            }\n\n        template <class E>\n        E const &\n        set_info( E const & x, throw_line const & y )\n            {\n            x.throw_line_=y.v_;\n            return x;\n            }\n        }\n\n    ////////////////////////////////////////////////////////////////////////\n\n    namespace\n    exception_detail\n        {\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n        template <class T>\n        struct\n        error_info_injector:\n            public T,\n            public exception\n            {\n            explicit\n            error_info_injector( T const & x ):\n                T(x)\n                {\n                }\n\n            ~error_info_injector() throw()\n                {\n                }\n            };\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n        struct large_size { char c[256]; };\n        large_size dispatch_boost_exception( exception const * );\n\n        struct small_size { };\n        small_size dispatch_boost_exception( void const * );\n\n        template <class,int>\n        struct enable_error_info_helper;\n\n        template <class T>\n        struct\n        enable_error_info_helper<T,sizeof(large_size)>\n            {\n            typedef T type;\n            };\n\n        template <class T>\n        struct\n        enable_error_info_helper<T,sizeof(small_size)>\n            {\n            typedef error_info_injector<T> type;\n            };\n\n        template <class T>\n        struct\n        enable_error_info_return_type\n            {\n            typedef typename enable_error_info_helper<T,sizeof(exception_detail::dispatch_boost_exception(static_cast<T *>(0)))>::type type;\n            };\n        }\n\n    template <class T>\n    inline\n    typename\n    exception_detail::enable_error_info_return_type<T>::type\n    enable_error_info( T const & x )\n        {\n        typedef typename exception_detail::enable_error_info_return_type<T>::type rt;\n        return rt(x);\n        }\n\n    ////////////////////////////////////////////////////////////////////////\n\n    namespace\n    exception_detail\n        {\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n        class\n        clone_base\n            {\n            public:\n\n            virtual clone_base const * clone() const = 0;\n            virtual void rethrow() const = 0;\n\n            virtual\n            ~clone_base() throw()\n                {\n                }\n            };\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n        inline\n        void\n        copy_boost_exception( exception * a, exception const * b )\n            {\n            refcount_ptr<error_info_container> data;\n            if( error_info_container * d=b->data_.get() )\n                data = d->clone();\n            a->throw_file_ = b->throw_file_;\n            a->throw_line_ = b->throw_line_;\n            a->throw_function_ = b->throw_function_;\n            a->data_ = data;\n            }\n\n        inline\n        void\n        copy_boost_exception( void *, void const * )\n            {\n            }\n\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n        template <class T>\n        class\n        clone_impl:\n            public T,\n            public virtual clone_base\n            {\n            struct clone_tag { };\n            clone_impl( clone_impl const & x, clone_tag ):\n                T(x)\n                {\n                copy_boost_exception(this,&x);\n                }\n\n            public:\n\n            explicit\n            clone_impl( T const & x ):\n                T(x)\n                {\n                copy_boost_exception(this,&x);\n                }\n\n            ~clone_impl() throw()\n                {\n                }\n\n            private:\n\n            clone_base const *\n            clone() const\n                {\n                return new clone_impl(*this,clone_tag());\n                }\n\n            void\n            rethrow() const\n                {\n                throw*this;\n                }\n            };\n        }\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n    template <class T>\n    inline\n    exception_detail::clone_impl<T>\n    enable_current_exception( T const & x )\n        {\n        return exception_detail::clone_impl<T>(x);\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/get_error_info.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_1A590226753311DD9E4CCF6156D89593\n#define UUID_1A590226753311DD9E4CCF6156D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/exception/exception.hpp>\n#include <boost/exception/detail/error_info_impl.hpp>\n#include <boost/exception/detail/type_info.hpp>\n#include <boost/shared_ptr.hpp>\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        template <class ErrorInfo>\n        struct\n        get_info\n            {\n            static\n            typename ErrorInfo::value_type *\n            get( exception const & x )\n                {\n                if( exception_detail::error_info_container * c=x.data_.get() )\n                    if( shared_ptr<exception_detail::error_info_base> eib = c->get(BOOST_EXCEPTION_STATIC_TYPEID(ErrorInfo)) )\n                        {\n#ifndef BOOST_NO_RTTI\n                        BOOST_ASSERT( 0!=dynamic_cast<ErrorInfo *>(eib.get()) );\n#endif\n                        ErrorInfo * w = static_cast<ErrorInfo *>(eib.get());\n                        return &w->value();\n                        }\n                return 0;\n                }\n            };\n\n        template <>\n        struct\n        get_info<throw_function>\n            {\n            static\n            char const * *\n            get( exception const & x )\n                {\n                return x.throw_function_ ? &x.throw_function_ : 0;\n                }\n            };\n\n        template <>\n        struct\n        get_info<throw_file>\n            {\n            static\n            char const * *\n            get( exception const & x )\n                {\n                return x.throw_file_ ? &x.throw_file_ : 0;\n                }\n            };\n\n        template <>\n        struct\n        get_info<throw_line>\n            {\n            static\n            int *\n            get( exception const & x )\n                {\n                return x.throw_line_!=-1 ? &x.throw_line_ : 0;\n                }\n            };\n\n        template <class T,class R>\n        struct\n        get_error_info_return_type\n            {\n            typedef R * type;\n            };\n\n        template <class T,class R>\n        struct\n        get_error_info_return_type<T const,R>\n            {\n            typedef R const * type;\n            };\n        }\n\n#ifdef BOOST_NO_RTTI\n    template <class ErrorInfo>\n    inline\n    typename ErrorInfo::value_type const *\n    get_error_info( boost::exception const & x )\n        {\n        return exception_detail::get_info<ErrorInfo>::get(x);\n        }\n    template <class ErrorInfo>\n    inline\n    typename ErrorInfo::value_type *\n    get_error_info( boost::exception & x )\n        {\n        return exception_detail::get_info<ErrorInfo>::get(x);\n        }\n#else\n    template <class ErrorInfo,class E>\n    inline\n    typename exception_detail::get_error_info_return_type<E,typename ErrorInfo::value_type>::type\n    get_error_info( E & some_exception )\n        {\n        if( exception const * x = dynamic_cast<exception const *>(&some_exception) )\n            return exception_detail::get_info<ErrorInfo>::get(*x);\n        else\n            return 0;\n        }\n#endif\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/info.hpp",
    "content": "//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_8D22C4CA9CC811DCAA9133D256D89593\n#define UUID_8D22C4CA9CC811DCAA9133D256D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/exception/exception.hpp>\n#include <boost/exception/to_string_stub.hpp>\n#include <boost/exception/detail/error_info_impl.hpp>\n#include <boost/shared_ptr.hpp>\n#include <boost/config.hpp>\n#include <map>\n\nnamespace\nboost\n    {\n    template <class Tag,class T>\n    inline\n    std::string\n    error_info_name( error_info<Tag,T> const & x )\n        {\n        return tag_type_name<Tag>();\n        }\n\n    template <class Tag,class T>\n    inline\n    std::string\n    to_string( error_info<Tag,T> const & x )\n        {\n        return '[' + error_info_name(x) + \"] = \" + to_string_stub(x.value()) + '\\n';\n        }\n\n    template <class Tag,class T>\n    inline\n    error_info<Tag,T>::\n    error_info( value_type const & value ):\n        value_(value)\n        {\n        }\n\n    template <class Tag,class T>\n    inline\n    error_info<Tag,T>::\n    ~error_info() throw()\n        {\n        }\n\n    template <class Tag,class T>\n    inline\n    std::string\n    error_info<Tag,T>::\n    name_value_string() const\n        {\n        return to_string_stub(*this);\n        }\n\n    namespace\n    exception_detail\n        {\n        class\n        error_info_container_impl:\n            public error_info_container\n            {\n            public:\n\n            error_info_container_impl():\n                count_(0)\n                {\n                }\n\n            ~error_info_container_impl() throw()\n                {\n                }\n\n            void\n            set( shared_ptr<error_info_base> const & x, type_info_ const & typeid_ )\n                {\n                BOOST_ASSERT(x);\n                info_[typeid_] = x;\n                diagnostic_info_str_.clear();\n                }\n\n            shared_ptr<error_info_base>\n            get( type_info_ const & ti ) const\n                {\n                error_info_map::const_iterator i=info_.find(ti);\n                if( info_.end()!=i )\n                    {\n                    shared_ptr<error_info_base> const & p = i->second;\n#ifndef BOOST_NO_RTTI\n                    BOOST_ASSERT( *BOOST_EXCEPTION_DYNAMIC_TYPEID(*p).type_==*ti.type_ );\n#endif\n                    return p;\n                    }\n                return shared_ptr<error_info_base>();\n                }\n\n            char const *\n            diagnostic_information( char const * header ) const\n                {\n                if( header )\n                    {\n                    std::ostringstream tmp;\n                    tmp << header;\n                    for( error_info_map::const_iterator i=info_.begin(),end=info_.end(); i!=end; ++i )\n                        {\n                        error_info_base const & x = *i->second;\n                        tmp << x.name_value_string();\n                        }\n                    tmp.str().swap(diagnostic_info_str_);\n                    }\n                return diagnostic_info_str_.c_str();\n                }\n\n            private:\n\n            friend class boost::exception;\n\n            typedef std::map< type_info_, shared_ptr<error_info_base> > error_info_map;\n            error_info_map info_;\n            mutable std::string diagnostic_info_str_;\n            mutable int count_;\n\n            error_info_container_impl( error_info_container_impl const & );\n            error_info_container_impl & operator=( error_info_container const & );\n\n            void\n            add_ref() const\n                {\n                ++count_;\n                }\n\n            bool\n            release() const\n                {\n                if( --count_ )\n                    return false;\n                else\n                    {\n                    delete this;\n                    return true;\n                    }\n                }\n\n            refcount_ptr<error_info_container>\n            clone() const\n                {\n                refcount_ptr<error_info_container> p;\n                error_info_container_impl * c=new error_info_container_impl;\n                p.adopt(c);\n                c->info_ = info_;\n                return p;\n                }\n            };\n\n        template <class E,class Tag,class T>\n        inline\n        E const &\n        set_info( E const & x, error_info<Tag,T> const & v )\n            {\n            typedef error_info<Tag,T> error_info_tag_t;\n            shared_ptr<error_info_tag_t> p( new error_info_tag_t(v) );\n            exception_detail::error_info_container * c=x.data_.get();\n            if( !c )\n                x.data_.adopt(c=new exception_detail::error_info_container_impl);\n            c->set(p,BOOST_EXCEPTION_STATIC_TYPEID(error_info_tag_t));\n            return x;\n            }\n\n        template <class T>\n        struct\n        derives_boost_exception\n            {\n            enum e { value = (sizeof(dispatch_boost_exception((T*)0))==sizeof(large_size)) };\n            };\n        }\n\n    template <class E,class Tag,class T>\n    inline\n    typename enable_if<exception_detail::derives_boost_exception<E>,E const &>::type\n    operator<<( E const & x, error_info<Tag,T> const & v )\n        {\n        return exception_detail::set_info(x,v);\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/info_tuple.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_63EE924290FB11DC87BB856555D89593\n#define UUID_63EE924290FB11DC87BB856555D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/exception/info.hpp>\n#include <boost/tuple/tuple.hpp>\n\nnamespace\nboost\n    {\n    template <\n        class E >\n    inline\n    E const &\n    operator<<(\n        E const & x,\n        tuple< > const & v )\n        {\n        return x;\n        }\n\n    template <\n        class E,\n        class Tag1,class T1 >\n    inline\n    E const &\n    operator<<(\n        E const & x,\n        tuple<\n            error_info<Tag1,T1> > const & v )\n        {\n        return x << v.template get<0>();\n        }\n\n    template <\n        class E,\n        class Tag1,class T1,\n        class Tag2,class T2 >\n    inline\n    E const &\n    operator<<(\n        E const & x,\n        tuple<\n            error_info<Tag1,T1>,\n            error_info<Tag2,T2> > const & v )\n        {\n        return x << v.template get<0>() << v.template get<1>();\n        }\n\n    template <\n        class E,\n        class Tag1,class T1,\n        class Tag2,class T2,\n        class Tag3,class T3 >\n    inline\n    E const &\n    operator<<(\n        E const & x,\n        tuple<\n            error_info<Tag1,T1>,\n            error_info<Tag2,T2>,\n            error_info<Tag3,T3> > const & v )\n        {\n        return x << v.template get<0>() << v.template get<1>() << v.template get<2>();\n        }\n\n    template <\n        class E,\n        class Tag1,class T1,\n        class Tag2,class T2,\n        class Tag3,class T3,\n        class Tag4,class T4 >\n    inline\n    E const &\n    operator<<(\n        E const & x,\n        tuple<\n            error_info<Tag1,T1>,\n            error_info<Tag2,T2>,\n            error_info<Tag3,T3>,\n            error_info<Tag4,T4> > const & v )\n        {\n        return x << v.template get<0>() << v.template get<1>() << v.template get<2>() << v.template get<3>();\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/to_string.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_7E48761AD92811DC9011477D56D89593\n#define UUID_7E48761AD92811DC9011477D56D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/utility/enable_if.hpp>\n#include <boost/exception/detail/is_output_streamable.hpp>\n#include <sstream>\n\nnamespace\nboost\n    {\n    template <class T,class U>\n    std::string to_string( std::pair<T,U> const & );\n    std::string to_string( std::exception const & );\n\n    namespace\n    to_string_detail\n        {\n        template <class T>\n        typename disable_if<is_output_streamable<T>,char>::type to_string( T const & );\n        using boost::to_string;\n\n        template <class,bool IsOutputStreamable>\n        struct has_to_string_impl;\n\n        template <class T>\n        struct\n        has_to_string_impl<T,true>\n            {\n            enum e { value=1 };\n            };\n\n        template <class T>\n        struct\n        has_to_string_impl<T,false>\n            {\n            static T const & f();\n            enum e { value=1!=sizeof(to_string(f())) };\n            };\n        }\n\n    template <class T>\n    inline\n    typename enable_if<is_output_streamable<T>,std::string>::type\n    to_string( T const & x )\n        {\n        std::ostringstream out;\n        out << x;\n        return out.str();\n        }\n\n    template <class T>\n    struct\n    has_to_string\n        {\n        enum e { value=to_string_detail::has_to_string_impl<T,is_output_streamable<T>::value>::value };\n        };\n\n    template <class T,class U>\n    inline\n    std::string\n    to_string( std::pair<T,U> const & x )\n        {\n        return std::string(\"(\") + to_string(x.first) + ',' + to_string(x.second) + ')';\n        }\n\n    inline\n    std::string\n    to_string( std::exception const & x )\n        {\n        return x.what();\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/exception/to_string_stub.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_E788439ED9F011DCB181F25B55D89593\n#define UUID_E788439ED9F011DCB181F25B55D89593\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/exception/to_string.hpp>\n#include <boost/exception/detail/object_hex_dump.hpp>\n#include <boost/assert.hpp>\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        template <bool ToStringAvailable>\n        struct\n        to_string_dispatcher\n            {\n            template <class T,class Stub>\n            static\n            std::string\n            convert( T const & x, Stub )\n                {\n                return to_string(x);\n                }\n            };\n\n        template <>\n        struct\n        to_string_dispatcher<false>\n            {\n            template <class T,class Stub>\n            static\n            std::string\n            convert( T const & x, Stub s )\n                {\n                return s(x);\n                }\n\n            template <class T>\n            static\n            std::string\n            convert( T const & x, std::string s )\n                {\n                return s;\n                }\n\n            template <class T>\n            static\n            std::string\n            convert( T const & x, char const * s )\n                {\n                BOOST_ASSERT(s!=0);\n                return s;\n                }\n            };\n\n        namespace\n        to_string_dispatch\n            {\n            template <class T,class Stub>\n            inline\n            std::string\n            dispatch( T const & x, Stub s )\n                {\n                return to_string_dispatcher<has_to_string<T>::value>::convert(x,s);\n                }\n            }\n\n        template <class T>\n        inline\n        std::string\n        string_stub_dump( T const & x )\n            {\n            return \"[ \" + exception_detail::object_hex_dump(x) + \" ]\";\n            }\n        }\n\n    template <class T>\n    inline\n    std::string\n    to_string_stub( T const & x )\n        {\n        return exception_detail::to_string_dispatch::dispatch(x,&exception_detail::string_stub_dump<T>);\n        }\n\n    template <class T,class Stub>\n    inline\n    std::string\n    to_string_stub( T const & x, Stub s )\n        {\n        return exception_detail::to_string_dispatch::dispatch(x,s);\n        }\n\n    template <class T,class U,class Stub>\n    inline\n    std::string\n    to_string_stub( std::pair<T,U> const & x, Stub s )\n        {\n        return std::string(\"(\") + to_string_stub(x.first,s) + ',' + to_string_stub(x.second,s) + ')';\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem/config.hpp",
    "content": "//  boost/filesystem/v3/config.hpp  ----------------------------------------------------//\n\n//  Copyright Beman Dawes 2003\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  Library home page: http://www.boost.org/libs/filesystem\n\n//--------------------------------------------------------------------------------------// \n\n#ifndef BOOST_FILESYSTEM3_CONFIG_HPP\n#define BOOST_FILESYSTEM3_CONFIG_HPP\n\n# if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION != 3\n#   error Compiling Filesystem version 3 file with BOOST_FILESYSTEM_VERSION defined != 3\n# endif\n\n# if !defined(BOOST_FILESYSTEM_VERSION)\n#   define BOOST_FILESYSTEM_VERSION 3\n# endif\n\n#define BOOST_FILESYSTEM_I18N  // aid users wishing to compile several versions\n\n// This header implements separate compilation features as described in\n// http://www.boost.org/more/separate_compilation.html\n\n#include <boost/config.hpp>\n#include <boost/system/api_config.hpp>  // for BOOST_POSIX_API or BOOST_WINDOWS_API\n#include <boost/detail/workaround.hpp>\n\n//  BOOST_FILESYSTEM_DEPRECATED needed for source compiles -----------------------------//\n\n# ifdef BOOST_FILESYSTEM_SOURCE\n#   define BOOST_FILESYSTEM_DEPRECATED\n#   undef BOOST_FILESYSTEM_NO_DEPRECATED   // fixes #9454, src bld fails if NO_DEP defined\n# endif\n\n//  throw an exception  ----------------------------------------------------------------//\n//\n//  Exceptions were originally thrown via boost::throw_exception().\n//  As throw_exception() became more complex, it caused user error reporting\n//  to be harder to interpret, since the exception reported became much more complex.\n//  The immediate fix was to throw directly, wrapped in a macro to make any later change\n//  easier.\n\n#define BOOST_FILESYSTEM_THROW(EX) throw EX\n\n# if defined( BOOST_NO_STD_WSTRING )\n#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support\n# endif\n\n//  This header implements separate compilation features as described in\n//  http://www.boost.org/more/separate_compilation.html\n\n//  normalize macros  ------------------------------------------------------------------//\n\n#if !defined(BOOST_FILESYSTEM_DYN_LINK) && !defined(BOOST_FILESYSTEM_STATIC_LINK) \\\n  && !defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_ALL_STATIC_LINK)\n# define BOOST_FILESYSTEM_STATIC_LINK\n#endif\n\n#if defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_FILESYSTEM_DYN_LINK)\n# define BOOST_FILESYSTEM_DYN_LINK \n#elif defined(BOOST_ALL_STATIC_LINK) && !defined(BOOST_FILESYSTEM_STATIC_LINK)\n# define BOOST_FILESYSTEM_STATIC_LINK \n#endif\n\n#if defined(BOOST_FILESYSTEM_DYN_LINK) && defined(BOOST_FILESYSTEM_STATIC_LINK)\n# error Must not define both BOOST_FILESYSTEM_DYN_LINK and BOOST_FILESYSTEM_STATIC_LINK\n#endif\n\n#if defined(BOOST_ALL_NO_LIB) && !defined(BOOST_FILESYSTEM_NO_LIB)\n# define BOOST_FILESYSTEM_NO_LIB \n#endif\n\n//  enable dynamic linking  ------------------------------------------------------------//\n\n#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK)\n# if defined(BOOST_FILESYSTEM_SOURCE)\n#   define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_EXPORT\n# else \n#   define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_IMPORT\n# endif\n#else\n# define BOOST_FILESYSTEM_DECL\n#endif\n\n//  enable automatic library variant selection  ----------------------------------------// \n\n#if !defined(BOOST_FILESYSTEM_SOURCE) && !defined(BOOST_ALL_NO_LIB) \\\n  && !defined(BOOST_FILESYSTEM_NO_LIB)\n//\n// Set the name of our library, this will get undef'ed by auto_link.hpp\n// once it's done with it:\n//\n#define BOOST_LIB_NAME boost_filesystem\n//\n// If we're importing code from a dll, then tell auto_link.hpp about it:\n//\n#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK)\n#  define BOOST_DYN_LINK\n#endif\n//\n// And include the header that does the work:\n//\n#include <boost/config/auto_link.hpp>\n#endif  // auto-linking disabled\n\n#endif // BOOST_FILESYSTEM3_CONFIG_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem/convenience.hpp",
    "content": "//  boost/filesystem/convenience.hpp  ----------------------------------------//\n\n//  Copyright Beman Dawes, 2002-2005\n//  Copyright Vladimir Prus, 2002\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/filesystem\n\n//----------------------------------------------------------------------------// \n\n#ifndef BOOST_FILESYSTEM3_CONVENIENCE_HPP\n#define BOOST_FILESYSTEM3_CONVENIENCE_HPP\n\n#include <boost/config.hpp>\n\n# if defined( BOOST_NO_STD_WSTRING )\n#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support\n# endif\n\n#include <boost/filesystem/operations.hpp>\n#include <boost/system/error_code.hpp>\n\n#include <boost/config/abi_prefix.hpp> // must be the last #include\n\nnamespace boost\n{\n  namespace filesystem\n  {\n\n# ifndef BOOST_FILESYSTEM_NO_DEPRECATED\n\n    inline std::string extension(const path & p)\n    {\n      return p.extension().string();\n    }\n\n    inline std::string basename(const path & p)\n    {\n      return p.stem().string();\n    }\n\n    inline path change_extension( const path & p, const path & new_extension )\n    { \n      path new_p( p );\n      new_p.replace_extension( new_extension );\n      return new_p;\n    }\n\n# endif\n\n\n  } // namespace filesystem\n} // namespace boost\n\n#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas\n#endif // BOOST_FILESYSTEM3_CONVENIENCE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem/detail/utf8_codecvt_facet.hpp",
    "content": "// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu)\n// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu).\n\n// Distributed under the Boost Software License, Version 1.0.\n// (See http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP\n#define BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP\n\n#include <boost/filesystem/config.hpp>\n\n#define BOOST_UTF8_BEGIN_NAMESPACE \\\n     namespace boost { namespace filesystem { namespace detail {\n\n#define BOOST_UTF8_END_NAMESPACE }}}\n#define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL\n\n#include <boost/detail/utf8_codecvt_facet.hpp>\n\n#undef BOOST_UTF8_BEGIN_NAMESPACE\n#undef BOOST_UTF8_END_NAMESPACE\n#undef BOOST_UTF8_DECL\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem/exception.hpp",
    "content": "//  boost/filesystem/exception.hpp  -----------------------------------------------------//\n\n//  Copyright Beman Dawes 2003\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  This header is no longer used. The contents have been moved to path.hpp.\n//  It is provided so that user code #includes do not have to be changed.\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem/fstream.hpp",
    "content": "//  boost/filesystem/fstream.hpp  ------------------------------------------------------//\n\n//  Copyright Beman Dawes 2002\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  Library home page: http://www.boost.org/libs/filesystem\n\n//--------------------------------------------------------------------------------------// \n\n#ifndef BOOST_FILESYSTEM3_FSTREAM_HPP\n#define BOOST_FILESYSTEM3_FSTREAM_HPP\n\n#include <boost/config.hpp>\n\n# if defined( BOOST_NO_STD_WSTRING )\n#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support\n# endif\n\n#include <boost/filesystem/path.hpp>\n#include <iosfwd>\n#include <fstream>\n\n#include <boost/config/abi_prefix.hpp> // must be the last #include\n\n//  on Windows, except for standard libaries known to have wchar_t overloads for\n//  file stream I/O, use path::string() to get a narrow character c_str()\n#if defined(BOOST_WINDOWS_API) \\\n  && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405 || defined(_STLPORT_VERSION))\n  // !Dinkumware || early Dinkumware || STLPort masquerading as Dinkumware\n# define BOOST_FILESYSTEM_C_STR string().c_str()  // use narrow, since wide not available\n#else  // use the native c_str, which will be narrow on POSIX, wide on Windows\n# define BOOST_FILESYSTEM_C_STR c_str()\n#endif\n\nnamespace boost\n{\nnamespace filesystem\n{\n\n//--------------------------------------------------------------------------------------//\n//                                  basic_filebuf                                       //\n//--------------------------------------------------------------------------------------//\n\n  template < class charT, class traits = std::char_traits<charT> >\n  class basic_filebuf : public std::basic_filebuf<charT,traits>\n  {\n  private: // disallow copying\n    basic_filebuf(const basic_filebuf&);\n    const basic_filebuf& operator=(const basic_filebuf&);\n\n  public:\n    basic_filebuf() {}\n    virtual ~basic_filebuf() {}\n\n    basic_filebuf<charT,traits>*\n      open(const path& p, std::ios_base::openmode mode) \n    {\n      return std::basic_filebuf<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode)\n        ? this : 0;\n    }\n  };\n\n//--------------------------------------------------------------------------------------//\n//                                 basic_ifstream                                       //\n//--------------------------------------------------------------------------------------//\n\n  template < class charT, class traits = std::char_traits<charT> >\n  class basic_ifstream : public std::basic_ifstream<charT,traits>\n  {\n  private: // disallow copying\n    basic_ifstream(const basic_ifstream&);\n    const basic_ifstream& operator=(const basic_ifstream&);\n\n  public:\n    basic_ifstream() {}\n\n    // use two signatures, rather than one signature with default second\n    // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)\n\n    explicit basic_ifstream(const path& p)\n      : std::basic_ifstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in) {}\n\n    basic_ifstream(const path& p, std::ios_base::openmode mode)\n      : std::basic_ifstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, mode) {}\n\n    void open(const path& p)\n      { std::basic_ifstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in); }\n\n    void open(const path& p, std::ios_base::openmode mode)\n      { std::basic_ifstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode); }\n\n    virtual ~basic_ifstream() {}\n  };\n\n//--------------------------------------------------------------------------------------//\n//                                 basic_ofstream                                       //\n//--------------------------------------------------------------------------------------//\n\n  template < class charT, class traits = std::char_traits<charT> >\n  class basic_ofstream : public std::basic_ofstream<charT,traits>\n  {\n  private: // disallow copying\n    basic_ofstream(const basic_ofstream&);\n    const basic_ofstream& operator=(const basic_ofstream&);\n\n  public:\n    basic_ofstream() {}\n\n    // use two signatures, rather than one signature with default second\n    // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)\n\n    explicit basic_ofstream(const path& p)\n      : std::basic_ofstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out) {}\n\n    basic_ofstream(const path& p, std::ios_base::openmode mode)\n      : std::basic_ofstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, mode) {}\n\n    void open(const path& p)\n      { std::basic_ofstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out); }\n\n    void open(const path& p, std::ios_base::openmode mode)\n      { std::basic_ofstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode); }\n\n    virtual ~basic_ofstream() {}\n  };\n\n//--------------------------------------------------------------------------------------//\n//                                  basic_fstream                                       //\n//--------------------------------------------------------------------------------------//\n\n  template < class charT, class traits = std::char_traits<charT> >\n  class basic_fstream : public std::basic_fstream<charT,traits>\n  {\n  private: // disallow copying\n    basic_fstream(const basic_fstream&);\n    const basic_fstream & operator=(const basic_fstream&);\n\n  public:\n    basic_fstream() {}\n\n    // use two signatures, rather than one signature with default second\n    // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)\n\n    explicit basic_fstream(const path& p)\n      : std::basic_fstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR,\n          std::ios_base::in | std::ios_base::out) {}\n\n    basic_fstream(const path& p, std::ios_base::openmode mode)\n      : std::basic_fstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, mode) {}\n\n    void open(const path& p)\n      { std::basic_fstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR,\n          std::ios_base::in | std::ios_base::out); }\n\n    void open(const path& p, std::ios_base::openmode mode)\n      { std::basic_fstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode); }\n\n    virtual ~basic_fstream() {}\n\n  };\n\n//--------------------------------------------------------------------------------------//\n//                                    typedefs                                          //\n//--------------------------------------------------------------------------------------//\n\n  typedef basic_filebuf<char> filebuf;\n  typedef basic_ifstream<char> ifstream;\n  typedef basic_ofstream<char> ofstream;\n  typedef basic_fstream<char> fstream;\n\n  typedef basic_filebuf<wchar_t> wfilebuf;\n  typedef basic_ifstream<wchar_t> wifstream;\n  typedef basic_ofstream<wchar_t> wofstream;\n  typedef basic_fstream<wchar_t> wfstream;\n  \n} // namespace filesystem\n} // namespace boost\n\n#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas\n#endif  // BOOST_FILESYSTEM3_FSTREAM_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem/operations.hpp",
    "content": "//  boost/filesystem/operations.hpp  ---------------------------------------------------//\n\n//  Copyright Beman Dawes 2002-2009\n//  Copyright Jan Langer 2002\n//  Copyright Dietmar Kuehl 2001                                        \n//  Copyright Vladimir Prus 2002\n   \n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  Library home page: http://www.boost.org/libs/filesystem\n\n//--------------------------------------------------------------------------------------//\n\n#ifndef BOOST_FILESYSTEM3_OPERATIONS_HPP\n#define BOOST_FILESYSTEM3_OPERATIONS_HPP\n\n#include <boost/config.hpp>\n\n# if defined( BOOST_NO_STD_WSTRING )\n#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support\n# endif\n\n#include <boost/filesystem/config.hpp>\n#include <boost/filesystem/path.hpp>\n\n#include <boost/detail/scoped_enum_emulation.hpp>\n#include <boost/detail/bitmask.hpp>\n#include <boost/system/error_code.hpp>\n#include <boost/system/system_error.hpp>\n#include <boost/shared_ptr.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/cstdint.hpp>\n#include <boost/range/mutable_iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/assert.hpp>\n#include <string>\n#include <utility> // for pair\n#include <ctime>\n#include <vector>\n#include <stack>\n\n#ifdef BOOST_WINDOWS_API\n#  include <fstream>\n#endif\n\n#include <boost/config/abi_prefix.hpp> // must be the last #include\n\n//--------------------------------------------------------------------------------------//\n\nnamespace boost\n{\n  namespace filesystem\n  {\n\n    //--------------------------------------------------------------------------------------//\n    //                                                                                      //\n    //                            class filesystem_error                                    //\n    //                                                                                      //\n    //--------------------------------------------------------------------------------------//\n\n    class BOOST_SYMBOL_VISIBLE filesystem_error : public system::system_error\n    {\n      // see http://www.boost.org/more/error_handling.html for design rationale\n\n      // all functions are inline to avoid issues with crossing dll boundaries\n\n      // functions previously throw() are now BOOST_NOEXCEPT_OR_NOTHROW\n      // functions previously without throw() are now BOOST_NOEXCEPT\n\n    public:\n      // compiler generates copy constructor and copy assignment\n\n      filesystem_error(\n        const std::string & what_arg, system::error_code ec) BOOST_NOEXCEPT\n        : system::system_error(ec, what_arg)\n      {\n        try\n        {\n          m_imp_ptr.reset(new m_imp);\n        }\n        catch (...) { m_imp_ptr.reset(); }\n      }\n\n      filesystem_error(\n        const std::string & what_arg, const path& path1_arg,\n        system::error_code ec) BOOST_NOEXCEPT\n        : system::system_error(ec, what_arg)\n      {\n        try\n        {\n          m_imp_ptr.reset(new m_imp);\n          m_imp_ptr->m_path1 = path1_arg;\n        }\n        catch (...) { m_imp_ptr.reset(); }\n      }\n\n      filesystem_error(\n        const std::string & what_arg, const path& path1_arg,\n        const path& path2_arg, system::error_code ec) BOOST_NOEXCEPT\n        : system::system_error(ec, what_arg)\n      {\n        try\n        {\n          m_imp_ptr.reset(new m_imp);\n          m_imp_ptr->m_path1 = path1_arg;\n          m_imp_ptr->m_path2 = path2_arg;\n        }\n        catch (...) { m_imp_ptr.reset(); }\n      }\n\n      ~filesystem_error() BOOST_NOEXCEPT_OR_NOTHROW{}\n\n        const path& path1() const BOOST_NOEXCEPT\n      {\n        static const path empty_path;\n        return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path;\n      }\n        const path& path2() const  BOOST_NOEXCEPT\n      {\n        static const path empty_path;\n        return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path;\n      }\n\n        const char* what() const BOOST_NOEXCEPT_OR_NOTHROW\n      {\n        if (!m_imp_ptr.get())\n        return system::system_error::what();\n\n        try\n        {\n          if (m_imp_ptr->m_what.empty())\n          {\n            m_imp_ptr->m_what = system::system_error::what();\n            if (!m_imp_ptr->m_path1.empty())\n            {\n              m_imp_ptr->m_what += \": \\\"\";\n              m_imp_ptr->m_what += m_imp_ptr->m_path1.string();\n              m_imp_ptr->m_what += \"\\\"\";\n            }\n            if (!m_imp_ptr->m_path2.empty())\n            {\n              m_imp_ptr->m_what += \", \\\"\";\n              m_imp_ptr->m_what += m_imp_ptr->m_path2.string();\n              m_imp_ptr->m_what += \"\\\"\";\n            }\n          }\n          return m_imp_ptr->m_what.c_str();\n        }\n        catch (...)\n        {\n          return system::system_error::what();\n        }\n      }\n\n    private:\n      struct m_imp\n      {\n        path         m_path1; // may be empty()\n        path         m_path2; // may be empty()\n        std::string  m_what;  // not built until needed\n      };\n      boost::shared_ptr<m_imp> m_imp_ptr;\n    };\n\n//--------------------------------------------------------------------------------------//\n//                                     file_type                                        //\n//--------------------------------------------------------------------------------------//\n\n  enum file_type\n  { \n    status_error,\n#   ifndef BOOST_FILESYSTEM_NO_DEPRECATED\n    status_unknown = status_error,\n#   endif\n    file_not_found,\n    regular_file,\n    directory_file,\n    // the following may not apply to some operating systems or file systems\n    symlink_file,\n    block_file,\n    character_file,\n    fifo_file,\n    socket_file,\n    reparse_file,  // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink\n    type_unknown,  // file does exist, but isn't one of the above types or\n                   // we don't have strong enough permission to find its type\n\n    _detail_directory_symlink  // internal use only; never exposed to users\n  };\n\n//--------------------------------------------------------------------------------------//\n//                                       perms                                          //\n//--------------------------------------------------------------------------------------//\n\n  enum perms\n  {\n    no_perms = 0,       // file_not_found is no_perms rather than perms_not_known\n\n    // POSIX equivalent macros given in comments.\n    // Values are from POSIX and are given in octal per the POSIX standard.\n\n    // permission bits\n    \n    owner_read = 0400,  // S_IRUSR, Read permission, owner\n    owner_write = 0200, // S_IWUSR, Write permission, owner\n    owner_exe = 0100,   // S_IXUSR, Execute/search permission, owner\n    owner_all = 0700,   // S_IRWXU, Read, write, execute/search by owner\n\n    group_read = 040,   // S_IRGRP, Read permission, group\n    group_write = 020,  // S_IWGRP, Write permission, group\n    group_exe = 010,    // S_IXGRP, Execute/search permission, group\n    group_all = 070,    // S_IRWXG, Read, write, execute/search by group\n\n    others_read = 04,   // S_IROTH, Read permission, others\n    others_write = 02,  // S_IWOTH, Write permission, others\n    others_exe = 01,    // S_IXOTH, Execute/search permission, others\n    others_all = 07,    // S_IRWXO, Read, write, execute/search by others\n\n    all_all = 0777,     // owner_all|group_all|others_all\n\n    // other POSIX bits\n\n    set_uid_on_exe = 04000, // S_ISUID, Set-user-ID on execution\n    set_gid_on_exe = 02000, // S_ISGID, Set-group-ID on execution\n    sticky_bit     = 01000, // S_ISVTX,\n                            // (POSIX XSI) On directories, restricted deletion flag \n                            // (V7) 'sticky bit': save swapped text even after use \n                            // (SunOS) On non-directories: don't cache this file\n                            // (SVID-v4.2) On directories: restricted deletion flag\n                            // Also see http://en.wikipedia.org/wiki/Sticky_bit\n\n    perms_mask = 07777,     // all_all|set_uid_on_exe|set_gid_on_exe|sticky_bit\n\n    perms_not_known = 0xFFFF, // present when directory_entry cache not loaded\n\n    // options for permissions() function\n\n    add_perms = 0x1000,     // adds the given permission bits to the current bits\n    remove_perms = 0x2000,  // removes the given permission bits from the current bits;\n                            // choose add_perms or remove_perms, not both; if neither add_perms\n                            // nor remove_perms is given, replace the current bits with\n                            // the given bits.\n\n    symlink_perms = 0x4000  // on POSIX, don't resolve symlinks; implied on Windows\n  };\n\n  BOOST_BITMASK(perms)\n\n//--------------------------------------------------------------------------------------//\n//                                    file_status                                       //\n//--------------------------------------------------------------------------------------//\n\n  class BOOST_FILESYSTEM_DECL file_status\n  {\n  public:\n             file_status() BOOST_NOEXCEPT\n               : m_value(status_error), m_perms(perms_not_known) {}\n    explicit file_status(file_type v) BOOST_NOEXCEPT\n               : m_value(v), m_perms(perms_not_known)  {}\n             file_status(file_type v, perms prms) BOOST_NOEXCEPT\n               : m_value(v), m_perms(prms) {}\n\n  //  As of October 2015 the interaction between noexcept and =default is so troublesome\n  //  for VC++, GCC, and probably other compilers, that =default is not used with noexcept\n  //  functions. GCC is not even consistent for the same release on different platforms.\n\n    file_status(const file_status& rhs) BOOST_NOEXCEPT\n      : m_value(rhs.m_value), m_perms(rhs.m_perms) {}\n    file_status& operator=(const file_status& rhs) BOOST_NOEXCEPT\n    {\n      m_value = rhs.m_value;\n      m_perms = rhs.m_perms;\n      return *this;\n    }\n\n# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n    file_status(file_status&& rhs) BOOST_NOEXCEPT\n    {\n      m_value = std::move(rhs.m_value);\n      m_perms = std::move(rhs.m_perms);\n    }\n    file_status& operator=(file_status&& rhs) BOOST_NOEXCEPT\n    { \n      m_value = std::move(rhs.m_value);\n      m_perms = std::move(rhs.m_perms);\n      return *this;\n    }\n# endif\n\n\n    // observers\n    file_type  type() const BOOST_NOEXCEPT            { return m_value; }\n    perms      permissions() const BOOST_NOEXCEPT     { return m_perms; } \n\n    // modifiers\n    void       type(file_type v) BOOST_NOEXCEPT       { m_value = v; }\n    void       permissions(perms prms) BOOST_NOEXCEPT { m_perms = prms; }\n\n    bool operator==(const file_status& rhs) const BOOST_NOEXCEPT\n      { return type() == rhs.type() && \n        permissions() == rhs.permissions(); }\n    bool operator!=(const file_status& rhs) const BOOST_NOEXCEPT\n      { return !(*this == rhs); }\n\n  private:\n    file_type   m_value;\n    enum perms  m_perms;\n  };\n\n  inline bool type_present(file_status f) BOOST_NOEXCEPT\n                                          { return f.type() != status_error; }\n  inline bool permissions_present(file_status f) BOOST_NOEXCEPT\n                                          {return f.permissions() != perms_not_known;}\n  inline bool status_known(file_status f) BOOST_NOEXCEPT\n                                          { return type_present(f) && permissions_present(f); }\n  inline bool exists(file_status f) BOOST_NOEXCEPT\n                                          { return f.type() != status_error\n                                                && f.type() != file_not_found; }\n  inline bool is_regular_file(file_status f) BOOST_NOEXCEPT\n                                          { return f.type() == regular_file; }\n  inline bool is_directory(file_status f) BOOST_NOEXCEPT\n                                          { return f.type() == directory_file; }\n  inline bool is_symlink(file_status f) BOOST_NOEXCEPT\n                                          { return f.type() == symlink_file; }\n  inline bool is_other(file_status f) BOOST_NOEXCEPT\n                                          { return exists(f) && !is_regular_file(f)\n                                                && !is_directory(f) && !is_symlink(f); }\n\n# ifndef BOOST_FILESYSTEM_NO_DEPRECATED\n  inline bool is_regular(file_status f) BOOST_NOEXCEPT { return f.type() == regular_file; }\n# endif\n\n  struct space_info\n  {\n    // all values are byte counts\n    boost::uintmax_t capacity;\n    boost::uintmax_t free;      // <= capacity\n    boost::uintmax_t available; // <= free\n  };\n\n  BOOST_SCOPED_ENUM_START(copy_option)\n    {none=0, fail_if_exists = none, overwrite_if_exists};\n  BOOST_SCOPED_ENUM_END\n\n//--------------------------------------------------------------------------------------//\n//                             implementation details                                   //\n//--------------------------------------------------------------------------------------//\n\n  namespace detail\n  {\n    //  We cannot pass a BOOST_SCOPED_ENUM to a compled function because it will result\n    //  in an undefined reference if the library is compled with -std=c++0x but the use\n    //  is compiled in C++03 mode, or visa versa. See tickets 6124, 6779, 10038.\n    enum copy_option {none=0, fail_if_exists = none, overwrite_if_exists};\n\n    BOOST_FILESYSTEM_DECL\n    file_status status(const path&p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    file_status symlink_status(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    bool is_empty(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    path initial_path(system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    path canonical(const path& p, const path& base, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void copy(const path& from, const path& to, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void copy_directory(const path& from, const path& to, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void copy_file(const path& from, const path& to,  // See ticket #2925\n                    detail::copy_option option, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    bool create_directories(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    bool create_directory(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void create_directory_symlink(const path& to, const path& from,\n                                  system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void create_hard_link(const path& to, const path& from, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void create_symlink(const path& to, const path& from, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    path current_path(system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void current_path(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    bool equivalent(const path& p1, const path& p2, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    boost::uintmax_t file_size(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    boost::uintmax_t hard_link_count(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    std::time_t last_write_time(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void last_write_time(const path& p, const std::time_t new_time,\n                         system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void permissions(const path& p, perms prms, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    path read_symlink(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    path relative(const path& p, const path& base, system::error_code* ec = 0);\n    BOOST_FILESYSTEM_DECL\n    bool remove(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    boost::uintmax_t remove_all(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void rename(const path& old_p, const path& new_p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    void resize_file(const path& p, uintmax_t size, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    space_info space(const path& p, system::error_code* ec=0); \n    BOOST_FILESYSTEM_DECL\n    path system_complete(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    path temp_directory_path(system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    path unique_path(const path& p, system::error_code* ec=0);\n    BOOST_FILESYSTEM_DECL\n    path weakly_canonical(const path& p, system::error_code* ec = 0);\n  }  // namespace detail             \n\n//--------------------------------------------------------------------------------------//\n//                                                                                      //\n//                             status query functions                                   //\n//                                                                                      //\n//--------------------------------------------------------------------------------------//\n\n  inline\n  file_status status(const path& p)    {return detail::status(p);}\n  inline \n  file_status status(const path& p, system::error_code& ec)\n                                       {return detail::status(p, &ec);}\n  inline \n  file_status symlink_status(const path& p) {return detail::symlink_status(p);}\n  inline\n  file_status symlink_status(const path& p, system::error_code& ec)\n                                       {return detail::symlink_status(p, &ec);}\n  inline \n  bool exists(const path& p)           {return exists(detail::status(p));}\n  inline \n  bool exists(const path& p, system::error_code& ec)\n                                       {return exists(detail::status(p, &ec));}\n  inline \n  bool is_directory(const path& p)     {return is_directory(detail::status(p));}\n  inline \n  bool is_directory(const path& p, system::error_code& ec)\n                                       {return is_directory(detail::status(p, &ec));}\n  inline \n  bool is_regular_file(const path& p)  {return is_regular_file(detail::status(p));}\n  inline \n  bool is_regular_file(const path& p, system::error_code& ec)\n                                       {return is_regular_file(detail::status(p, &ec));}\n  inline \n  bool is_other(const path& p)         {return is_other(detail::status(p));}\n  inline \n  bool is_other(const path& p, system::error_code& ec)\n                                       {return is_other(detail::status(p, &ec));}\n  inline\n  bool is_symlink(const path& p)       {return is_symlink(detail::symlink_status(p));}\n  inline \n  bool is_symlink(const path& p, system::error_code& ec)\n                                       {return is_symlink(detail::symlink_status(p, &ec));}\n# ifndef BOOST_FILESYSTEM_NO_DEPRECATED\n  inline\n  bool is_regular(const path& p)       {return is_regular(detail::status(p));}\n  inline\n  bool is_regular(const path& p, system::error_code& ec)\n                                       {return is_regular(detail::status(p, &ec));}\n# endif\n\n  inline\n  bool is_empty(const path& p)         {return detail::is_empty(p);}\n  inline\n  bool is_empty(const path& p, system::error_code& ec)\n                                       {return detail::is_empty(p, &ec);}\n\n//--------------------------------------------------------------------------------------//\n//                                                                                      //\n//                             operational functions                                    //\n//                  in alphabetical order, unless otherwise noted                       //\n//                                                                                      //\n//--------------------------------------------------------------------------------------//\n \n  //  forward declarations\n  path current_path();  // fwd declaration\n  path initial_path();\n\n  BOOST_FILESYSTEM_DECL\n  path absolute(const path& p, const path& base=current_path());\n  //  If base.is_absolute(), throws nothing. Thus no need for ec argument\n\n  inline\n  path canonical(const path& p, const path& base=current_path())\n                                       {return detail::canonical(p, base);}\n  inline\n  path canonical(const path& p, system::error_code& ec)\n                                       {return detail::canonical(p, current_path(), &ec);}\n  inline\n  path canonical(const path& p, const path& base, system::error_code& ec)\n                                       {return detail::canonical(p, base, &ec);}\n\n# ifndef BOOST_FILESYSTEM_NO_DEPRECATED\n  inline\n  path complete(const path& p)\n  {\n    return absolute(p, initial_path());\n  }\n\n  inline\n  path complete(const path& p, const path& base)\n  {\n    return absolute(p, base);\n  }\n# endif\n\n  inline\n  void copy(const path& from, const path& to) {detail::copy(from, to);}\n\n  inline\n  void copy(const path& from, const path& to, system::error_code& ec) BOOST_NOEXCEPT \n                                       {detail::copy(from, to, &ec);}\n  inline\n  void copy_directory(const path& from, const path& to)\n                                       {detail::copy_directory(from, to);}\n  inline\n  void copy_directory(const path& from, const path& to, system::error_code& ec) BOOST_NOEXCEPT\n                                       {detail::copy_directory(from, to, &ec);}\n  inline\n  void copy_file(const path& from, const path& to,   // See ticket #2925\n                 BOOST_SCOPED_ENUM(copy_option) option)\n  {\n    detail::copy_file(from, to, static_cast<detail::copy_option>(option));\n  }\n  inline\n  void copy_file(const path& from, const path& to)\n  {\n    detail::copy_file(from, to, detail::fail_if_exists);\n  }\n  inline\n  void copy_file(const path& from, const path& to,   // See ticket #2925\n                 BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec) BOOST_NOEXCEPT\n  {\n    detail::copy_file(from, to, static_cast<detail::copy_option>(option), &ec);\n  }\n  inline\n  void copy_file(const path& from, const path& to, system::error_code& ec) BOOST_NOEXCEPT\n  {\n    detail::copy_file(from, to, detail::fail_if_exists, &ec);\n  }\n  inline\n  void copy_symlink(const path& existing_symlink,\n                    const path& new_symlink) {detail::copy_symlink(existing_symlink, new_symlink);}\n\n  inline\n  void copy_symlink(const path& existing_symlink, const path& new_symlink,\n                    system::error_code& ec) BOOST_NOEXCEPT\n                                       {detail::copy_symlink(existing_symlink, new_symlink, &ec);}\n  inline\n  bool create_directories(const path& p) {return detail::create_directories(p);}\n\n  inline\n  bool create_directories(const path& p, system::error_code& ec) BOOST_NOEXCEPT\n                                       {return detail::create_directories(p, &ec);}\n  inline\n  bool create_directory(const path& p) {return detail::create_directory(p);}\n\n  inline\n  bool create_directory(const path& p, system::error_code& ec) BOOST_NOEXCEPT\n                                       {return detail::create_directory(p, &ec);}\n  inline\n  void create_directory_symlink(const path& to, const path& from)\n                                       {detail::create_directory_symlink(to, from);}\n  inline\n  void create_directory_symlink(const path& to, const path& from, system::error_code& ec) BOOST_NOEXCEPT\n                                       {detail::create_directory_symlink(to, from, &ec);}\n  inline\n  void create_hard_link(const path& to, const path& new_hard_link) {detail::create_hard_link(to, new_hard_link);}\n\n  inline\n  void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec) BOOST_NOEXCEPT\n                                       {detail::create_hard_link(to, new_hard_link, &ec);}\n  inline\n  void create_symlink(const path& to, const path& new_symlink) {detail::create_symlink(to, new_symlink);}\n\n  inline\n  void create_symlink(const path& to, const path& new_symlink, system::error_code& ec) BOOST_NOEXCEPT\n                                       {detail::create_symlink(to, new_symlink, &ec);}\n  inline\n  path current_path()                  {return detail::current_path();}\n\n  inline\n  path current_path(system::error_code& ec) BOOST_NOEXCEPT {return detail::current_path(&ec);}\n\n  inline\n  void current_path(const path& p)     {detail::current_path(p);}\n\n  inline\n  void current_path(const path& p, system::error_code& ec) BOOST_NOEXCEPT {detail::current_path(p, &ec);}\n\n  inline\n  bool equivalent(const path& p1, const path& p2) {return detail::equivalent(p1, p2);}\n\n  inline\n  bool equivalent(const path& p1, const path& p2, system::error_code& ec) BOOST_NOEXCEPT\n                                       {return detail::equivalent(p1, p2, &ec);}\n  inline\n  boost::uintmax_t file_size(const path& p) {return detail::file_size(p);}\n\n  inline\n  boost::uintmax_t file_size(const path& p, system::error_code& ec) BOOST_NOEXCEPT\n                                       {return detail::file_size(p, &ec);}\n  inline\n  boost::uintmax_t hard_link_count(const path& p) {return detail::hard_link_count(p);}\n\n  inline\n  boost::uintmax_t hard_link_count(const path& p, system::error_code& ec) BOOST_NOEXCEPT\n                                       {return detail::hard_link_count(p, &ec);}\n  inline\n  path initial_path()                  {return detail::initial_path();}\n\n  inline\n  path initial_path(system::error_code& ec) {return detail::initial_path(&ec);}\n\n  template <class Path>\n  path initial_path() {return initial_path();}\n  template <class Path>\n  path initial_path(system::error_code& ec) {return detail::initial_path(&ec);}\n\n  inline\n  std::time_t last_write_time(const path& p) {return detail::last_write_time(p);}\n\n  inline\n  std::time_t last_write_time(const path& p, system::error_code& ec) BOOST_NOEXCEPT\n                                       {return detail::last_write_time(p, &ec);}\n  inline\n  void last_write_time(const path& p, const std::time_t new_time)\n                                       {detail::last_write_time(p, new_time);}\n  inline\n  void last_write_time(const path& p, const std::time_t new_time,\n                       system::error_code& ec) BOOST_NOEXCEPT\n                                       {detail::last_write_time(p, new_time, &ec);}\n  inline\n  void permissions(const path& p, perms prms)\n                                       {detail::permissions(p, prms);}\n  inline\n  void permissions(const path& p, perms prms, system::error_code& ec) BOOST_NOEXCEPT\n                                       {detail::permissions(p, prms, &ec);}\n\n  inline\n  path read_symlink(const path& p)     {return detail::read_symlink(p);}\n\n  inline\n  path read_symlink(const path& p, system::error_code& ec)\n                                       {return detail::read_symlink(p, &ec);}\n  inline\n    // For standardization, if the committee doesn't like \"remove\", consider \"eliminate\"\n  bool remove(const path& p)           {return detail::remove(p);}\n\n  inline\n  bool remove(const path& p, system::error_code& ec) BOOST_NOEXCEPT\n                                       {return detail::remove(p, &ec);}\n\n  inline\n  boost::uintmax_t remove_all(const path& p) {return detail::remove_all(p);}\n    \n  inline\n  boost::uintmax_t remove_all(const path& p, system::error_code& ec) BOOST_NOEXCEPT\n                                       {return detail::remove_all(p, &ec);}\n  inline\n  void rename(const path& old_p, const path& new_p) {detail::rename(old_p, new_p);}\n\n  inline\n  void rename(const path& old_p, const path& new_p, system::error_code& ec) BOOST_NOEXCEPT\n                                       {detail::rename(old_p, new_p, &ec);}\n  inline  // name suggested by Scott McMurray\n  void resize_file(const path& p, uintmax_t size) {detail::resize_file(p, size);}\n\n  inline\n  void resize_file(const path& p, uintmax_t size, system::error_code& ec) BOOST_NOEXCEPT\n                                       {detail::resize_file(p, size, &ec);}\n  inline\n  path relative(const path& p, const path& base=current_path())\n                                       {return detail::relative(p, base);}\n  inline\n  path relative(const path& p, system::error_code& ec)\n                                       {return detail::relative(p, current_path(), &ec);}\n  inline\n  path relative(const path& p, const path& base, system::error_code& ec)\n                                       {return detail::relative(p, base, &ec);}\n  inline\n  space_info space(const path& p)      {return detail::space(p);} \n\n  inline\n  space_info space(const path& p, system::error_code& ec) BOOST_NOEXCEPT\n                                       {return detail::space(p, &ec);} \n\n# ifndef BOOST_FILESYSTEM_NO_DEPRECATED\n  inline bool symbolic_link_exists(const path& p)\n                                       { return is_symlink(symlink_status(p)); }\n# endif\n\n  inline\n  path system_complete(const path& p)  {return detail::system_complete(p);}\n\n  inline\n  path system_complete(const path& p, system::error_code& ec)\n                                       {return detail::system_complete(p, &ec);}\n  inline\n  path temp_directory_path()           {return detail::temp_directory_path();}\n\n  inline\n  path temp_directory_path(system::error_code& ec) \n                                       {return detail::temp_directory_path(&ec);}\n  inline\n  path unique_path(const path& p=\"%%%%-%%%%-%%%%-%%%%\")\n                                       {return detail::unique_path(p);}\n  inline\n  path unique_path(const path& p, system::error_code& ec)\n                                       {return detail::unique_path(p, &ec);}\n  inline\n  path weakly_canonical(const path& p)   {return detail::weakly_canonical(p);}\n \n  inline\n  path weakly_canonical(const path& p, system::error_code& ec)\n                                       {return detail::weakly_canonical(p, &ec);}\n\n//--------------------------------------------------------------------------------------//\n//                                                                                      //\n//                                 directory_entry                                      //\n//                                                                                      //\n//--------------------------------------------------------------------------------------//\n\n//  GCC has a problem with a member function named path within a namespace or \n//  sub-namespace that also has a class named path. The workaround is to always\n//  fully qualify the name path when it refers to the class name.\n\nclass BOOST_FILESYSTEM_DECL directory_entry\n{\npublic:\n  typedef boost::filesystem::path::value_type value_type;   // enables class path ctor taking directory_entry\n\n  directory_entry() BOOST_NOEXCEPT {}\n  explicit directory_entry(const boost::filesystem::path& p)\n    : m_path(p), m_status(file_status()), m_symlink_status(file_status())\n    {}\n  directory_entry(const boost::filesystem::path& p,\n    file_status st, file_status symlink_st = file_status())\n    : m_path(p), m_status(st), m_symlink_status(symlink_st) {}\n\n  directory_entry(const directory_entry& rhs)\n    : m_path(rhs.m_path), m_status(rhs.m_status), m_symlink_status(rhs.m_symlink_status){}\n\n  directory_entry& operator=(const directory_entry& rhs)\n  {\n    m_path = rhs.m_path;\n    m_status = rhs.m_status;\n    m_symlink_status = rhs.m_symlink_status;\n    return *this;\n  }\n\n  //  As of October 2015 the interaction between noexcept and =default is so troublesome\n  //  for VC++, GCC, and probably other compilers, that =default is not used with noexcept\n  //  functions. GCC is not even consistent for the same release on different platforms.\n\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n  directory_entry(directory_entry&& rhs) BOOST_NOEXCEPT\n  {\n    m_path = std::move(rhs.m_path);\n    m_status = std::move(rhs.m_status);\n    m_symlink_status = std::move(rhs.m_symlink_status);\n  }\n  directory_entry& operator=(directory_entry&& rhs) BOOST_NOEXCEPT\n  { \n    m_path = std::move(rhs.m_path);\n    m_status = std::move(rhs.m_status);\n    m_symlink_status = std::move(rhs.m_symlink_status);\n    return *this;\n  }\n#endif\n\n  void assign(const boost::filesystem::path& p,\n    file_status st = file_status(), file_status symlink_st = file_status())\n    { m_path = p; m_status = st; m_symlink_status = symlink_st; }\n\n  void replace_filename(const boost::filesystem::path& p,\n    file_status st = file_status(), file_status symlink_st = file_status())\n  {\n    m_path.remove_filename();\n    m_path /= p;\n    m_status = st;\n    m_symlink_status = symlink_st;\n  }\n\n# ifndef BOOST_FILESYSTEM_NO_DEPRECATED\n  void replace_leaf(const boost::filesystem::path& p,\n    file_status st, file_status symlink_st)\n      { replace_filename(p, st, symlink_st); }\n# endif\n\n  const boost::filesystem::path&  path() const BOOST_NOEXCEPT {return m_path;}\n  operator const boost::filesystem::path&() const BOOST_NOEXCEPT\n                                                              {return m_path;}\n  file_status   status() const                                {return m_get_status();}\n  file_status   status(system::error_code& ec) const BOOST_NOEXCEPT\n                                                              {return m_get_status(&ec); }\n  file_status   symlink_status() const                        {return m_get_symlink_status();}\n  file_status   symlink_status(system::error_code& ec) const BOOST_NOEXCEPT\n                                                              {return m_get_symlink_status(&ec); }\n\n  bool operator==(const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path == rhs.m_path; }\n  bool operator!=(const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path != rhs.m_path;} \n  bool operator< (const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path < rhs.m_path;} \n  bool operator<=(const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path <= rhs.m_path;} \n  bool operator> (const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path > rhs.m_path;} \n  bool operator>=(const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path >= rhs.m_path;} \n\nprivate:\n  boost::filesystem::path   m_path;\n  mutable file_status       m_status;           // stat()-like\n  mutable file_status       m_symlink_status;   // lstat()-like\n\n  file_status m_get_status(system::error_code* ec=0) const;\n  file_status m_get_symlink_status(system::error_code* ec=0) const;\n}; // directory_entry\n\n//--------------------------------------------------------------------------------------//\n//                                                                                      //\n//                            directory_iterator helpers                                //\n//                                                                                      //\n//--------------------------------------------------------------------------------------//\n\nclass directory_iterator;\n\nnamespace detail\n{\n  BOOST_FILESYSTEM_DECL\n    system::error_code dir_itr_close(// never throws()\n    void *& handle\n#   if     defined(BOOST_POSIX_API)\n    , void *& buffer\n#   endif\n  ); \n\n  struct dir_itr_imp\n  {\n    directory_entry  dir_entry;\n    void*            handle;\n\n#   ifdef BOOST_POSIX_API\n    void*            buffer;  // see dir_itr_increment implementation\n#   endif\n\n    dir_itr_imp() : handle(0)\n#   ifdef BOOST_POSIX_API\n      , buffer(0)\n#   endif\n    {}\n\n    ~dir_itr_imp() // never throws\n    {\n      dir_itr_close(handle\n#       if defined(BOOST_POSIX_API)\n         , buffer\n#       endif\n    );\n    }\n  };\n\n  // see path::iterator: comment below\n  BOOST_FILESYSTEM_DECL void directory_iterator_construct(directory_iterator& it,\n    const path& p, system::error_code* ec);\n  BOOST_FILESYSTEM_DECL void directory_iterator_increment(directory_iterator& it,\n    system::error_code* ec);\n\n}  // namespace detail\n\n//--------------------------------------------------------------------------------------//\n//                                                                                      //\n//                                directory_iterator                                    //\n//                                                                                      //\n//--------------------------------------------------------------------------------------//\n\n  class directory_iterator\n    : public boost::iterator_facade< directory_iterator,\n                                     directory_entry,\n                                     boost::single_pass_traversal_tag >\n  {\n  public:\n\n    directory_iterator() BOOST_NOEXCEPT {}  // creates the \"end\" iterator\n\n    // iterator_facade derived classes don't seem to like implementations in\n    // separate translation unit dll's, so forward to detail functions\n    explicit directory_iterator(const path& p)\n        : m_imp(new detail::dir_itr_imp)\n          { detail::directory_iterator_construct(*this, p, 0); }\n\n    directory_iterator(const path& p, system::error_code& ec) BOOST_NOEXCEPT\n        : m_imp(new detail::dir_itr_imp)\n          { detail::directory_iterator_construct(*this, p, &ec); }\n\n   ~directory_iterator() {}\n\n    directory_iterator& increment(system::error_code& ec) BOOST_NOEXCEPT\n    { \n      detail::directory_iterator_increment(*this, &ec);\n      return *this;\n    }\n\n  private:\n    friend struct detail::dir_itr_imp;\n    friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_construct(directory_iterator& it,\n      const path& p, system::error_code* ec);\n    friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_increment(directory_iterator& it,\n      system::error_code* ec);\n\n    // shared_ptr provides shallow-copy semantics required for InputIterators.\n    // m_imp.get()==0 indicates the end iterator.\n    boost::shared_ptr< detail::dir_itr_imp >  m_imp;\n\n    friend class boost::iterator_core_access;\n\n    boost::iterator_facade<\n      directory_iterator,\n      directory_entry,\n      boost::single_pass_traversal_tag >::reference dereference() const \n    {\n      BOOST_ASSERT_MSG(m_imp.get(), \"attempt to dereference end iterator\");\n      return m_imp->dir_entry;\n    }\n\n    void increment() { detail::directory_iterator_increment(*this, 0); }\n\n    bool equal(const directory_iterator& rhs) const\n      { return m_imp == rhs.m_imp; }\n\n  };  // directory_iterator\n\n  //  enable directory_iterator C++11 range-base for statement use  --------------------//\n\n  //  begin() and end() are only used by a range-based for statement in the context of\n  //  auto - thus the top-level const is stripped - so returning const is harmless and\n  //  emphasizes begin() is just a pass through.\n  inline\n  const directory_iterator& begin(const directory_iterator& iter) BOOST_NOEXCEPT\n    {return iter;}\n  inline\n  directory_iterator end(const directory_iterator&) BOOST_NOEXCEPT\n    {return directory_iterator();}\n\n  //  enable directory_iterator BOOST_FOREACH  -----------------------------------------//\n\n  inline\n  directory_iterator& range_begin(directory_iterator& iter) BOOST_NOEXCEPT\n    {return iter;}\n  inline\n  directory_iterator range_begin(const directory_iterator& iter) BOOST_NOEXCEPT\n    {return iter;}\n  inline\n  directory_iterator range_end(const directory_iterator&) BOOST_NOEXCEPT\n    {return directory_iterator();}\n  }  // namespace filesystem\n\n  //  namespace boost template specializations\n  template<>\n  struct range_mutable_iterator<boost::filesystem::directory_iterator>\n    { typedef boost::filesystem::directory_iterator type; };\n  template<>\n  struct range_const_iterator <boost::filesystem::directory_iterator>\n    { typedef boost::filesystem::directory_iterator type; };\n\nnamespace filesystem\n{\n\n//--------------------------------------------------------------------------------------//\n//                                                                                      //\n//                      recursive_directory_iterator helpers                            //\n//                                                                                      //\n//--------------------------------------------------------------------------------------//\n\n  BOOST_SCOPED_ENUM_START(symlink_option)\n  {\n    none,\n    no_recurse = none,         // don't follow directory symlinks (default behavior)\n    recurse,                   // follow directory symlinks\n    _detail_no_push = recurse << 1  // internal use only\n  };\n  BOOST_SCOPED_ENUM_END\n\n  BOOST_BITMASK(BOOST_SCOPED_ENUM(symlink_option))\n\n  namespace detail\n  {\n    struct recur_dir_itr_imp\n    {\n      typedef directory_iterator element_type;\n      std::stack< element_type, std::vector< element_type > > m_stack;\n      int  m_level;\n      BOOST_SCOPED_ENUM(symlink_option) m_options;\n\n      recur_dir_itr_imp() : m_level(0), m_options(symlink_option::none) {}\n\n      void increment(system::error_code* ec);  // ec == 0 means throw on error\n\n      bool push_directory(system::error_code& ec) BOOST_NOEXCEPT;\n\n      void pop();\n\n    };\n\n    //  Implementation is inline to avoid dynamic linking difficulties with m_stack:\n    //  Microsoft warning C4251, m_stack needs to have dll-interface to be used by\n    //  clients of struct 'boost::filesystem::detail::recur_dir_itr_imp'\n\n    inline\n    bool recur_dir_itr_imp::push_directory(system::error_code& ec) BOOST_NOEXCEPT\n    // Returns: true if push occurs, otherwise false. Always returns false on error.\n    {\n      ec.clear();\n\n      //  Discover if the iterator is for a directory that needs to be recursed into,\n      //  taking symlinks and options into account.\n\n      if ((m_options & symlink_option::_detail_no_push) == symlink_option::_detail_no_push)\n        m_options &= ~symlink_option::_detail_no_push;\n\n      else\n      {\n        // Logic for following predicate was contributed by Daniel Aarno to handle cyclic\n        // symlinks correctly and efficiently, fixing ticket #5652.\n        //   if (((m_options & symlink_option::recurse) == symlink_option::recurse\n        //         || !is_symlink(m_stack.top()->symlink_status()))\n        //       && is_directory(m_stack.top()->status())) ...\n        // The predicate code has since been rewritten to pass error_code arguments,\n        // per ticket #5653.\n\n        file_status symlink_stat;\n\n        if ((m_options & symlink_option::recurse) != symlink_option::recurse)\n        {\n          symlink_stat = m_stack.top()->symlink_status(ec);\n          if (ec)\n            return false;\n        }\n\n        if ((m_options & symlink_option::recurse) == symlink_option::recurse\n          || !is_symlink(symlink_stat))\n        {\n          file_status stat = m_stack.top()->status(ec);\n          if (ec || !is_directory(stat))\n            return false;\n\n          directory_iterator next(m_stack.top()->path(), ec);\n          if (!ec && next != directory_iterator())\n          {\n            m_stack.push(next);\n            ++m_level;\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    inline\n    void recur_dir_itr_imp::increment(system::error_code* ec)\n    // ec == 0 means throw on error\n    // \n    // Invariant: On return, the top of the iterator stack is the next valid (possibly\n    // end) iterator, regardless of whether or not an error is reported, and regardless of\n    // whether any error is reported by exception or error code. In other words, progress\n    // is always made so a loop on the iterator will always eventually terminate\n    // regardless of errors.\n    {\n      system::error_code ec_push_directory;\n\n      //  if various conditions are met, push a directory_iterator into the iterator stack\n      if (push_directory(ec_push_directory))\n      {\n        if (ec)\n          ec->clear();\n        return;\n      }\n\n      //  Do the actual increment operation on the top iterator in the iterator\n      //  stack, popping the stack if necessary, until either the stack is empty or a\n      //  non-end iterator is reached.\n      while (!m_stack.empty() && ++m_stack.top() == directory_iterator())\n      {\n        m_stack.pop();\n        --m_level;\n      }\n\n      // report errors if any\n      if (ec_push_directory)\n      {\n        if (ec)\n          *ec = ec_push_directory;\n        else\n        {\n          BOOST_FILESYSTEM_THROW(filesystem_error(\n            \"filesystem::recursive_directory_iterator directory error\",\n            ec_push_directory));\n        }\n      }\n      else if (ec)\n        ec->clear();\n    }\n\n    inline\n    void recur_dir_itr_imp::pop()\n    {\n      BOOST_ASSERT_MSG(m_level > 0,\n        \"pop() on recursive_directory_iterator with level < 1\");\n\n      do\n      {\n        m_stack.pop();\n        --m_level;\n      }\n      while (!m_stack.empty() && ++m_stack.top() == directory_iterator());\n    }\n  } // namespace detail\n\n//--------------------------------------------------------------------------------------//\n//                                                                                      //\n//                           recursive_directory_iterator                               //\n//                                                                                      //\n//--------------------------------------------------------------------------------------//\n\n  class recursive_directory_iterator\n    : public boost::iterator_facade<\n        recursive_directory_iterator,\n        directory_entry,\n        boost::single_pass_traversal_tag >\n  {\n  public:\n\n    recursive_directory_iterator() BOOST_NOEXCEPT {}  // creates the \"end\" iterator\n\n    explicit recursive_directory_iterator(const path& dir_path)  // throws if !exists()\n      : m_imp(new detail::recur_dir_itr_imp)\n    {\n      m_imp->m_options = symlink_option::none;\n      m_imp->m_stack.push(directory_iterator(dir_path));\n      if (m_imp->m_stack.top() == directory_iterator())\n        { m_imp.reset(); }\n    }\n\n    recursive_directory_iterator(const path& dir_path,\n      BOOST_SCOPED_ENUM(symlink_option) opt)  // throws if !exists()\n      : m_imp(new detail::recur_dir_itr_imp)\n    {\n      m_imp->m_options = opt;\n      m_imp->m_stack.push(directory_iterator(dir_path));\n      if (m_imp->m_stack.top() == directory_iterator())\n        { m_imp.reset (); }\n    }\n\n    recursive_directory_iterator(const path& dir_path,\n      BOOST_SCOPED_ENUM(symlink_option) opt,\n      system::error_code & ec) BOOST_NOEXCEPT\n    : m_imp(new detail::recur_dir_itr_imp)\n    {\n      m_imp->m_options = opt;\n      m_imp->m_stack.push(directory_iterator(dir_path, ec));\n      if (m_imp->m_stack.top() == directory_iterator())\n        { m_imp.reset (); }\n    }\n\n    recursive_directory_iterator(const path& dir_path,\n      system::error_code & ec) BOOST_NOEXCEPT\n    : m_imp(new detail::recur_dir_itr_imp)\n    {\n      m_imp->m_options = symlink_option::none;\n      m_imp->m_stack.push(directory_iterator(dir_path, ec));\n      if (m_imp->m_stack.top() == directory_iterator())\n        { m_imp.reset (); }\n    }\n\n    recursive_directory_iterator& increment(system::error_code& ec) BOOST_NOEXCEPT\n    {\n      BOOST_ASSERT_MSG(m_imp.get(),\n        \"increment() on end recursive_directory_iterator\");\n      m_imp->increment(&ec);\n      if (m_imp->m_stack.empty())\n        m_imp.reset(); // done, so make end iterator\n      return *this;\n    }\n\n    int depth() const BOOST_NOEXCEPT\n    { \n      BOOST_ASSERT_MSG(m_imp.get(),\n        \"depth() on end recursive_directory_iterator\");\n      return m_imp->m_level;\n    }\n  \n    int level() const BOOST_NOEXCEPT { return depth(); }\n\n    bool recursion_pending() const BOOST_NOEXCEPT\n    {\n      BOOST_ASSERT_MSG(m_imp.get(),\n        \"is_no_push_requested() on end recursive_directory_iterator\");\n      return (m_imp->m_options & symlink_option::_detail_no_push)\n        == symlink_option::_detail_no_push;\n    }\n  \n    bool no_push_pending() const BOOST_NOEXCEPT { return recursion_pending(); }\n\n#   ifndef BOOST_FILESYSTEM_NO_DEPRECATED\n    bool no_push_request() const BOOST_NOEXCEPT { return no_push_pending(); }\n#   endif\n\n    void pop()\n    { \n      BOOST_ASSERT_MSG(m_imp.get(),\n        \"pop() on end recursive_directory_iterator\");\n      m_imp->pop();\n      if (m_imp->m_stack.empty()) m_imp.reset(); // done, so make end iterator\n    }\n\n    void disable_recursion_pending(bool value=true) BOOST_NOEXCEPT\n    {\n      BOOST_ASSERT_MSG(m_imp.get(),\n        \"no_push() on end recursive_directory_iterator\");\n      if (value)\n        m_imp->m_options |= symlink_option::_detail_no_push;\n      else\n        m_imp->m_options &= ~symlink_option::_detail_no_push;\n    }\n  \n    void no_push(bool value=true) BOOST_NOEXCEPT { disable_recursion_pending(value); }\n\n    file_status status() const\n    {\n      BOOST_ASSERT_MSG(m_imp.get(),\n        \"status() on end recursive_directory_iterator\");\n      return m_imp->m_stack.top()->status();\n    }\n\n    file_status symlink_status() const\n    {\n      BOOST_ASSERT_MSG(m_imp.get(),\n        \"symlink_status() on end recursive_directory_iterator\");\n      return m_imp->m_stack.top()->symlink_status();\n    }\n\n  private:\n\n    // shared_ptr provides shallow-copy semantics required for InputIterators.\n    // m_imp.get()==0 indicates the end iterator.\n    boost::shared_ptr< detail::recur_dir_itr_imp >  m_imp;\n\n    friend class boost::iterator_core_access;\n\n    boost::iterator_facade< \n      recursive_directory_iterator,\n      directory_entry,\n      boost::single_pass_traversal_tag >::reference\n    dereference() const \n    {\n      BOOST_ASSERT_MSG(m_imp.get(),\n        \"dereference of end recursive_directory_iterator\");\n      return *m_imp->m_stack.top();\n    }\n\n    void increment()\n    { \n      BOOST_ASSERT_MSG(m_imp.get(),\n        \"increment of end recursive_directory_iterator\");\n      m_imp->increment(0);\n      if (m_imp->m_stack.empty())\n        m_imp.reset(); // done, so make end iterator\n    }\n\n    bool equal(const recursive_directory_iterator& rhs) const\n      { return m_imp == rhs.m_imp; }\n\n  };  // recursive directory iterator\n\n  //  enable recursive directory iterator C++11 range-base for statement use  ----------//\n\n  //  begin() and end() are only used by a range-based for statement in the context of\n  //  auto - thus the top-level const is stripped - so returning const is harmless and\n  //  emphasizes begin() is just a pass through.\n  inline\n  const recursive_directory_iterator&\n    begin(const recursive_directory_iterator& iter) BOOST_NOEXCEPT\n                                                  {return iter;}\n  inline\n  recursive_directory_iterator end(const recursive_directory_iterator&) BOOST_NOEXCEPT\n                                                  {return recursive_directory_iterator();}\n\n  //  enable recursive directory iterator BOOST_FOREACH  -------------------------------//\n\n  inline\n  recursive_directory_iterator& \n    range_begin(recursive_directory_iterator& iter) BOOST_NOEXCEPT\n                                                   {return iter;}\n  inline\n  recursive_directory_iterator\n    range_begin(const recursive_directory_iterator& iter) BOOST_NOEXCEPT\n                                                   {return iter;}\n  inline\n  recursive_directory_iterator range_end(const recursive_directory_iterator&) BOOST_NOEXCEPT\n                                                  {return recursive_directory_iterator();}\n  }  // namespace filesystem\n\n  //  namespace boost template specializations\n  template<>\n  struct range_mutable_iterator<boost::filesystem::recursive_directory_iterator>\n                        { typedef boost::filesystem::recursive_directory_iterator type; };\n  template<>\n  struct range_const_iterator <boost::filesystem::recursive_directory_iterator>\n                        { typedef boost::filesystem::recursive_directory_iterator type; };\n\nnamespace filesystem\n{\n\n# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED)\n  typedef recursive_directory_iterator wrecursive_directory_iterator;\n# endif\n\n//  test helper  -----------------------------------------------------------------------//\n\n//  Not part of the documented interface since false positives are possible;\n//  there is no law that says that an OS that has large stat.st_size\n//  actually supports large file sizes.\n\n  namespace detail\n  {\n    BOOST_FILESYSTEM_DECL bool possible_large_file_size_support();\n  }\n\n  } // namespace filesystem\n} // namespace boost\n\n#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas\n#endif // BOOST_FILESYSTEM3_OPERATIONS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem/path.hpp",
    "content": "//  filesystem path.hpp  ---------------------------------------------------------------//\n\n//  Copyright Beman Dawes 2002-2005, 2009\n//  Copyright Vladimir Prus 2002\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  Library home page: http://www.boost.org/libs/filesystem\n\n//  path::stem(), extension(), and replace_extension() are based on\n//  basename(), extension(), and change_extension() from the original\n//  filesystem/convenience.hpp header by Vladimir Prus.\n\n#ifndef BOOST_FILESYSTEM_PATH_HPP\n#define BOOST_FILESYSTEM_PATH_HPP\n\n#include <boost/config.hpp>\n\n# if defined( BOOST_NO_STD_WSTRING )\n#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support\n# endif\n\n#include <boost/filesystem/config.hpp>\n#include <boost/filesystem/path_traits.hpp>  // includes <cwchar>\n#include <boost/system/error_code.hpp>\n#include <boost/system/system_error.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/shared_ptr.hpp>\n#include <boost/io/detail/quoted_manip.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/functional/hash_fwd.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <string>\n#include <iterator>\n#include <cstring>\n#include <iosfwd>\n#include <stdexcept>\n#include <cassert>\n#include <locale>\n#include <algorithm>\n\n#include <boost/config/abi_prefix.hpp> // must be the last #include\n\nnamespace boost\n{\nnamespace filesystem\n{\n\n  //------------------------------------------------------------------------------------//\n  //                                                                                    //\n  //                                    class path                                      //\n  //                                                                                    //\n  //------------------------------------------------------------------------------------//\n\n  class BOOST_FILESYSTEM_DECL path\n  {\n  public:\n\n    //  value_type is the character type used by the operating system API to\n    //  represent paths.\n\n# ifdef BOOST_WINDOWS_API\n    typedef wchar_t                        value_type;\n    BOOST_STATIC_CONSTEXPR value_type      preferred_separator = L'\\\\';\n# else \n    typedef char                           value_type;\n    BOOST_STATIC_CONSTEXPR value_type      preferred_separator = '/';\n# endif\n    typedef std::basic_string<value_type>  string_type;  \n    typedef std::codecvt<wchar_t, char,\n                         std::mbstate_t>   codecvt_type;\n\n\n    //  ----- character encoding conversions -----\n\n    //  Following the principle of least astonishment, path input arguments\n    //  passed to or obtained from the operating system via objects of\n    //  class path behave as if they were directly passed to or\n    //  obtained from the O/S API, unless conversion is explicitly requested.\n    //\n    //  POSIX specfies that path strings are passed unchanged to and from the\n    //  API. Note that this is different from the POSIX command line utilities,\n    //  which convert according to a locale.\n    //\n    //  Thus for POSIX, char strings do not undergo conversion.  wchar_t strings\n    //  are converted to/from char using the path locale or, if a conversion\n    //  argument is given, using a conversion object modeled on\n    //  std::wstring_convert.\n    //\n    //  The path locale, which is global to the thread, can be changed by the\n    //  imbue() function. It is initialized to an implementation defined locale.\n    //  \n    //  For Windows, wchar_t strings do not undergo conversion. char strings\n    //  are converted using the \"ANSI\" or \"OEM\" code pages, as determined by\n    //  the AreFileApisANSI() function, or, if a conversion argument is given,\n    //  using a conversion object modeled on std::wstring_convert.\n    //\n    //  See m_pathname comments for further important rationale.\n\n    //  TODO: rules needed for operating systems that use / or .\n    //  differently, or format directory paths differently from file paths. \n    //\n    //  **********************************************************************************\n    //\n    //  More work needed: How to handle an operating system that may have\n    //  slash characters or dot characters in valid filenames, either because\n    //  it doesn't follow the POSIX standard, or because it allows MBCS\n    //  filename encodings that may contain slash or dot characters. For\n    //  example, ISO/IEC 2022 (JIS) encoding which allows switching to\n    //  JIS x0208-1983 encoding. A valid filename in this set of encodings is\n    //  0x1B 0x24 0x42 [switch to X0208-1983] 0x24 0x2F [U+304F Kiragana letter KU]\n    //                                             ^^^^\n    //  Note that 0x2F is the ASCII slash character\n    //\n    //  **********************************************************************************\n\n    //  Supported source arguments: half-open iterator range, container, c-array,\n    //  and single pointer to null terminated string.\n\n    //  All source arguments except pointers to null terminated byte strings support\n    //  multi-byte character strings which may have embedded nulls. Embedded null\n    //  support is required for some Asian languages on Windows.\n\n    //  \"const codecvt_type& cvt=codecvt()\" default arguments are not used because this\n    //  limits the impact of locale(\"\") initialization failures on POSIX systems to programs\n    //  that actually depend on locale(\"\"). It further ensures that exceptions thrown\n    //  as a result of such failues occur after main() has started, so can be caught. \n\n    //  -----  constructors  -----\n\n    path() BOOST_NOEXCEPT {}                                          \n    path(const path& p) : m_pathname(p.m_pathname) {}\n\n    template <class Source>\n    path(Source const& source,\n      typename boost::enable_if<path_traits::is_pathable<\n        typename boost::decay<Source>::type> >::type* =0)\n    {\n      path_traits::dispatch(source, m_pathname);\n    }\n\n    path(const value_type* s) : m_pathname(s) {}\n    path(value_type* s) : m_pathname(s) {}\n    path(const string_type& s) : m_pathname(s) {}\n    path(string_type& s) : m_pathname(s) {}\n\n  //  As of October 2015 the interaction between noexcept and =default is so troublesome\n  //  for VC++, GCC, and probably other compilers, that =default is not used with noexcept\n  //  functions. GCC is not even consistent for the same release on different platforms.\n\n# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n    path(path&& p) BOOST_NOEXCEPT { m_pathname = std::move(p.m_pathname); }\n    path& operator=(path&& p) BOOST_NOEXCEPT\n      { m_pathname = std::move(p.m_pathname); return *this; }\n# endif\n\n    template <class Source>\n    path(Source const& source, const codecvt_type& cvt)\n    {\n      path_traits::dispatch(source, m_pathname, cvt);\n    }\n\n    template <class InputIterator>\n    path(InputIterator begin, InputIterator end)\n    { \n      if (begin != end)\n      {\n        // convert requires contiguous string, so copy\n        std::basic_string<typename std::iterator_traits<InputIterator>::value_type>\n          seq(begin, end);\n        path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname);\n      }\n    }\n\n    template <class InputIterator>\n    path(InputIterator begin, InputIterator end, const codecvt_type& cvt)\n    { \n      if (begin != end)\n      {\n        // convert requires contiguous string, so copy\n        std::basic_string<typename std::iterator_traits<InputIterator>::value_type>\n          seq(begin, end);\n        path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname, cvt);\n      }\n    }\n\n    //  -----  assignments  -----\n\n    path& operator=(const path& p)\n    {\n      m_pathname = p.m_pathname;\n      return *this;\n    }\n\n    template <class Source>\n      typename boost::enable_if<path_traits::is_pathable<\n        typename boost::decay<Source>::type>, path&>::type\n    operator=(Source const& source)\n    {\n      m_pathname.clear();\n      path_traits::dispatch(source, m_pathname);\n      return *this;\n    }\n\n    //  value_type overloads\n\n    path& operator=(const value_type* ptr)  // required in case ptr overlaps *this\n                                          {m_pathname = ptr; return *this;}\n    path& operator=(value_type* ptr)  // required in case ptr overlaps *this\n                                          {m_pathname = ptr; return *this;}\n    path& operator=(const string_type& s) {m_pathname = s; return *this;}\n    path& operator=(string_type& s)       {m_pathname = s; return *this;}\n\n    path& assign(const value_type* ptr, const codecvt_type&)  // required in case ptr overlaps *this\n                                          {m_pathname = ptr; return *this;}\n    template <class Source>\n    path& assign(Source const& source, const codecvt_type& cvt)\n    {\n      m_pathname.clear();\n      path_traits::dispatch(source, m_pathname, cvt);\n      return *this;\n    }\n\n    template <class InputIterator>\n    path& assign(InputIterator begin, InputIterator end)\n    {\n      m_pathname.clear();\n      if (begin != end)\n      {\n        std::basic_string<typename std::iterator_traits<InputIterator>::value_type>\n          seq(begin, end);\n        path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname);\n      }\n      return *this;\n    }\n\n    template <class InputIterator>\n    path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt)\n    { \n      m_pathname.clear();\n      if (begin != end)\n      {\n        std::basic_string<typename std::iterator_traits<InputIterator>::value_type>\n          seq(begin, end);\n        path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname, cvt);\n      }\n      return *this;\n    }\n\n    //  -----  concatenation  -----\n\n    template <class Source>\n      typename boost::enable_if<path_traits::is_pathable<\n        typename boost::decay<Source>::type>, path&>::type\n    operator+=(Source const& source)\n    {\n      return concat(source);\n    }\n\n    //  value_type overloads. Same rationale as for constructors above\n    path& operator+=(const path& p)         { m_pathname += p.m_pathname; return *this; }\n    path& operator+=(const value_type* ptr) { m_pathname += ptr; return *this; }\n    path& operator+=(value_type* ptr)       { m_pathname += ptr; return *this; }\n    path& operator+=(const string_type& s)  { m_pathname += s; return *this; }\n    path& operator+=(string_type& s)        { m_pathname += s; return *this; }\n    path& operator+=(value_type c)          { m_pathname += c; return *this; }\n\n    template <class CharT>\n      typename boost::enable_if<is_integral<CharT>, path&>::type\n    operator+=(CharT c)\n    {\n      CharT tmp[2];\n      tmp[0] = c;\n      tmp[1] = 0;\n      return concat(tmp);\n    }\n\n    template <class Source>\n    path& concat(Source const& source)\n    {\n      path_traits::dispatch(source, m_pathname);\n      return *this;\n    }\n\n    template <class Source>\n    path& concat(Source const& source, const codecvt_type& cvt)\n    {\n      path_traits::dispatch(source, m_pathname, cvt);\n      return *this;\n    }\n\n    template <class InputIterator>\n    path& concat(InputIterator begin, InputIterator end)\n    { \n      if (begin == end)\n        return *this;\n      std::basic_string<typename std::iterator_traits<InputIterator>::value_type>\n        seq(begin, end);\n      path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname);\n      return *this;\n    }\n\n    template <class InputIterator>\n    path& concat(InputIterator begin, InputIterator end, const codecvt_type& cvt)\n    { \n      if (begin == end)\n        return *this;\n      std::basic_string<typename std::iterator_traits<InputIterator>::value_type>\n        seq(begin, end);\n      path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname, cvt);\n      return *this;\n    }\n\n    //  -----  appends  -----\n\n    //  if a separator is added, it is the preferred separator for the platform;\n    //  slash for POSIX, backslash for Windows\n\n    path& operator/=(const path& p);\n\n    template <class Source>\n      typename boost::enable_if<path_traits::is_pathable<\n        typename boost::decay<Source>::type>, path&>::type\n    operator/=(Source const& source)\n    {\n      return append(source);\n    }\n\n    path& operator/=(const value_type* ptr);\n    path& operator/=(value_type* ptr)\n    {\n      return this->operator/=(const_cast<const value_type*>(ptr));\n    }\n    path& operator/=(const string_type& s) { return this->operator/=(path(s)); }\n    path& operator/=(string_type& s)       { return this->operator/=(path(s)); }\n\n    path& append(const value_type* ptr)  // required in case ptr overlaps *this\n    {\n      this->operator/=(ptr);\n      return *this;\n    }\n\n    path& append(const value_type* ptr, const codecvt_type&)  // required in case ptr overlaps *this\n    {\n      this->operator/=(ptr);\n      return *this;\n    }\n\n    template <class Source>\n    path& append(Source const& source);\n\n    template <class Source>\n    path& append(Source const& source, const codecvt_type& cvt);\n\n    template <class InputIterator>\n    path& append(InputIterator begin, InputIterator end);\n\n    template <class InputIterator>\n    path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt);\n\n    //  -----  modifiers  -----\n\n    void   clear() BOOST_NOEXCEPT             { m_pathname.clear(); }\n    path&  make_preferred()\n#   ifdef BOOST_POSIX_API\n      { return *this; }  // POSIX no effect\n#   else // BOOST_WINDOWS_API\n      ;  // change slashes to backslashes\n#   endif\n    path&  remove_filename();\n    path&  remove_trailing_separator();\n    path&  replace_extension(const path& new_extension = path());\n    void   swap(path& rhs) BOOST_NOEXCEPT     { m_pathname.swap(rhs.m_pathname); }\n\n    //  -----  observers  -----\n  \n    //  For operating systems that format file paths differently than directory\n    //  paths, return values from observers are formatted as file names unless there\n    //  is a trailing separator, in which case returns are formatted as directory\n    //  paths. POSIX and Windows make no such distinction.\n\n    //  Implementations are permitted to return const values or const references.\n\n    //  The string or path returned by an observer are specified as being formatted\n    //  as \"native\" or \"generic\".\n    //\n    //  For POSIX, these are all the same format; slashes and backslashes are as input and\n    //  are not modified.\n    //\n    //  For Windows,   native:    as input; slashes and backslashes are not modified;\n    //                            this is the format of the internally stored string.\n    //                 generic:   backslashes are converted to slashes\n\n    //  -----  native format observers  -----\n\n    const string_type&  native() const BOOST_NOEXCEPT  { return m_pathname; }\n    const value_type*   c_str() const BOOST_NOEXCEPT   { return m_pathname.c_str(); }\n    string_type::size_type size() const BOOST_NOEXCEPT { return m_pathname.size(); }\n\n    template <class String>\n    String string() const;\n\n    template <class String>\n    String string(const codecvt_type& cvt) const;\n\n#   ifdef BOOST_WINDOWS_API\n    const std::string string() const\n    {\n      std::string tmp;\n      if (!m_pathname.empty())\n        path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(),\n        tmp);\n      return tmp;\n    }\n    const std::string string(const codecvt_type& cvt) const\n    { \n      std::string tmp;\n      if (!m_pathname.empty())\n        path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(),\n          tmp, cvt);\n      return tmp;\n    }\n    \n    //  string_type is std::wstring, so there is no conversion\n    const std::wstring&  wstring() const { return m_pathname; }\n    const std::wstring&  wstring(const codecvt_type&) const { return m_pathname; }\n\n#   else   // BOOST_POSIX_API\n    //  string_type is std::string, so there is no conversion\n    const std::string&  string() const { return m_pathname; }\n    const std::string&  string(const codecvt_type&) const { return m_pathname; }\n\n    const std::wstring  wstring() const\n    {\n      std::wstring tmp;\n      if (!m_pathname.empty())\n        path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(),\n          tmp);\n      return tmp;\n    }\n    const std::wstring  wstring(const codecvt_type& cvt) const\n    { \n      std::wstring tmp;\n      if (!m_pathname.empty())\n        path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(),\n          tmp, cvt);\n      return tmp;\n    }\n\n#   endif\n\n    //  -----  generic format observers  -----\n\n    //  Experimental generic function returning generic formatted path (i.e. separators\n    //  are forward slashes). Motivation: simpler than a family of generic_*string\n    //  functions.\n    path generic() const\n    {\n#   ifdef BOOST_WINDOWS_API\n      path tmp;\n      std::replace_copy(m_pathname.begin(), m_pathname.end(),\n        std::back_inserter(tmp.m_pathname), L'\\\\', L'/');\n      return tmp;\n#   else\n      return path(*this);\n#   endif\n    }\n\n    template <class String>\n    String generic_string() const;\n\n    template <class String>\n    String generic_string(const codecvt_type& cvt) const;\n\n#   ifdef BOOST_WINDOWS_API\n    const std::string   generic_string() const; \n    const std::string   generic_string(const codecvt_type& cvt) const; \n    const std::wstring  generic_wstring() const;\n    const std::wstring  generic_wstring(const codecvt_type&) const { return generic_wstring(); };\n\n#   else // BOOST_POSIX_API\n    //  On POSIX-like systems, the generic format is the same as the native format\n    const std::string&  generic_string() const  { return m_pathname; }\n    const std::string&  generic_string(const codecvt_type&) const  { return m_pathname; }\n    const std::wstring  generic_wstring() const { return wstring(); }\n    const std::wstring  generic_wstring(const codecvt_type& cvt) const { return wstring(cvt); }\n\n#   endif\n\n    //  -----  compare  -----\n\n    int compare(const path& p) const BOOST_NOEXCEPT;  // generic, lexicographical\n    int compare(const std::string& s) const { return compare(path(s)); }\n    int compare(const value_type* s) const  { return compare(path(s)); }\n\n    //  -----  decomposition  -----\n\n    path  root_path() const; \n    path  root_name() const;         // returns 0 or 1 element path\n                                     // even on POSIX, root_name() is non-empty() for network paths\n    path  root_directory() const;    // returns 0 or 1 element path\n    path  relative_path() const;\n    path  parent_path() const;\n    path  filename() const;          // returns 0 or 1 element path\n    path  stem() const;              // returns 0 or 1 element path\n    path  extension() const;         // returns 0 or 1 element path\n\n    //  -----  query  -----\n\n    bool empty() const BOOST_NOEXCEPT{ return m_pathname.empty(); }\n    bool has_root_path() const       { return has_root_directory() || has_root_name(); }\n    bool has_root_name() const       { return !root_name().empty(); }\n    bool has_root_directory() const  { return !root_directory().empty(); }\n    bool has_relative_path() const   { return !relative_path().empty(); }\n    bool has_parent_path() const     { return !parent_path().empty(); }\n    bool has_filename() const        { return !m_pathname.empty(); }\n    bool has_stem() const            { return !stem().empty(); }\n    bool has_extension() const       { return !extension().empty(); }\n    bool is_relative() const         { return !is_absolute(); } \n    bool is_absolute() const\n    {\n#     ifdef BOOST_WINDOWS_API\n      return has_root_name() && has_root_directory();\n#     else\n      return has_root_directory();\n#     endif\n    }\n\n    //  -----  lexical operations  -----\n\n    path  lexically_normal() const;\n    path  lexically_relative(const path& base) const;\n    path  lexically_proximate(const path& base) const\n    {\n      path tmp(lexically_relative(base));\n      return tmp.empty() ? *this : tmp;\n    }\n\n    //  -----  iterators  -----\n\n    class iterator;\n    typedef iterator const_iterator;\n    class reverse_iterator;\n    typedef reverse_iterator const_reverse_iterator;\n\n    iterator begin() const;\n    iterator end() const;\n    reverse_iterator rbegin() const;\n    reverse_iterator rend() const;\n\n    //  -----  static member functions  -----\n\n    static std::locale          imbue(const std::locale& loc);\n    static const codecvt_type&  codecvt();\n\n    //  -----  deprecated functions  -----\n\n# if defined(BOOST_FILESYSTEM_DEPRECATED) && defined(BOOST_FILESYSTEM_NO_DEPRECATED)\n#   error both BOOST_FILESYSTEM_DEPRECATED and BOOST_FILESYSTEM_NO_DEPRECATED are defined\n# endif\n\n# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED)\n    //  recently deprecated functions supplied by default\n    path&  normalize()              { \n                                      path tmp(lexically_normal());\n                                      m_pathname.swap(tmp.m_pathname);\n                                      return *this;\n                                    }\n    path&  remove_leaf()            { return remove_filename(); }\n    path   leaf() const             { return filename(); }\n    path   branch_path() const      { return parent_path(); }\n    bool   has_leaf() const         { return !m_pathname.empty(); }\n    bool   has_branch_path() const  { return !parent_path().empty(); }\n    bool   is_complete() const      { return is_absolute(); }\n# endif\n\n# if defined(BOOST_FILESYSTEM_DEPRECATED)\n    //  deprecated functions with enough signature or semantic changes that they are\n    //  not supplied by default \n    const std::string file_string() const               { return string(); }\n    const std::string directory_string() const          { return string(); }\n    const std::string native_file_string() const        { return string(); }\n    const std::string native_directory_string() const   { return string(); }\n    const string_type external_file_string() const      { return native(); }\n    const string_type external_directory_string() const { return native(); }\n\n    //  older functions no longer supported\n    //typedef bool (*name_check)(const std::string & name);\n    //basic_path(const string_type& str, name_check) { operator/=(str); }\n    //basic_path(const typename string_type::value_type* s, name_check)\n    //  { operator/=(s);}\n    //static bool default_name_check_writable() { return false; } \n    //static void default_name_check(name_check) {}\n    //static name_check default_name_check() { return 0; }\n    //basic_path& canonize();\n# endif\n\n//--------------------------------------------------------------------------------------//\n//                            class path private members                                //\n//--------------------------------------------------------------------------------------//\n\n  private:\n\n#   if defined(_MSC_VER)\n#     pragma warning(push) // Save warning settings\n#     pragma warning(disable : 4251) // disable warning: class 'std::basic_string<_Elem,_Traits,_Ax>'\n#   endif                            // needs to have dll-interface...\n/*\n      m_pathname has the type, encoding, and format required by the native\n      operating system. Thus for POSIX and Windows there is no conversion for\n      passing m_pathname.c_str() to the O/S API or when obtaining a path from the\n      O/S API. POSIX encoding is unspecified other than for dot and slash\n      characters; POSIX just treats paths as a sequence of bytes. Windows\n      encoding is UCS-2 or UTF-16 depending on the version.\n*/\n    string_type  m_pathname;  // Windows: as input; backslashes NOT converted to slashes,\n                              // slashes NOT converted to backslashes\n#   if defined(_MSC_VER)\n#     pragma warning(pop) // restore warning settings.\n#   endif \n\n    string_type::size_type m_append_separator_if_needed();\n    //  Returns: If separator is to be appended, m_pathname.size() before append. Otherwise 0.\n    //  Note: An append is never performed if size()==0, so a returned 0 is unambiguous.\n\n    void m_erase_redundant_separator(string_type::size_type sep_pos);\n    string_type::size_type m_parent_path_end() const;\n\n    path& m_normalize();\n\n    // Was qualified; como433beta8 reports:\n    //    warning #427-D: qualified name is not allowed in member declaration \n    friend class iterator;\n    friend bool operator<(const path& lhs, const path& rhs);\n\n    // see path::iterator::increment/decrement comment below\n    static void m_path_iterator_increment(path::iterator & it);\n    static void m_path_iterator_decrement(path::iterator & it);\n\n  };  // class path\n\n  namespace detail\n  {\n    BOOST_FILESYSTEM_DECL\n      int lex_compare(path::iterator first1, path::iterator last1,\n        path::iterator first2, path::iterator last2);\n    BOOST_FILESYSTEM_DECL\n      const path&  dot_path();\n    BOOST_FILESYSTEM_DECL\n      const path&  dot_dot_path();\n  }\n\n# ifndef BOOST_FILESYSTEM_NO_DEPRECATED\n  typedef path wpath;\n# endif\n\n  //------------------------------------------------------------------------------------//\n  //                             class path::iterator                                   //\n  //------------------------------------------------------------------------------------//\n \n  class path::iterator\n    : public boost::iterator_facade<\n      path::iterator,\n      path const,\n      boost::bidirectional_traversal_tag >\n  {\n  private:\n    friend class boost::iterator_core_access;\n    friend class boost::filesystem::path;\n    friend class boost::filesystem::path::reverse_iterator;\n    friend void m_path_iterator_increment(path::iterator & it);\n    friend void m_path_iterator_decrement(path::iterator & it);\n\n    const path& dereference() const { return m_element; }\n\n    bool equal(const iterator & rhs) const\n    {\n      return m_path_ptr == rhs.m_path_ptr && m_pos == rhs.m_pos;\n    }\n\n    // iterator_facade derived classes don't seem to like implementations in\n    // separate translation unit dll's, so forward to class path static members\n    void increment() { m_path_iterator_increment(*this); }\n    void decrement() { m_path_iterator_decrement(*this); }\n\n    path                    m_element;   // current element\n    const path*             m_path_ptr;  // path being iterated over\n    string_type::size_type  m_pos;       // position of m_element in\n                                         // m_path_ptr->m_pathname.\n                                         // if m_element is implicit dot, m_pos is the\n                                         // position of the last separator in the path.\n                                         // end() iterator is indicated by \n                                         // m_pos == m_path_ptr->m_pathname.size()\n  }; // path::iterator\n\n  //------------------------------------------------------------------------------------//\n  //                         class path::reverse_iterator                               //\n  //------------------------------------------------------------------------------------//\n \n  class path::reverse_iterator\n    : public boost::iterator_facade<\n      path::reverse_iterator,\n      path const,\n      boost::bidirectional_traversal_tag >\n  {\n  public:\n\n    explicit reverse_iterator(iterator itr) : m_itr(itr)\n    {\n      if (itr != itr.m_path_ptr->begin())\n        m_element = *--itr;\n    }\n  private:\n    friend class boost::iterator_core_access;\n    friend class boost::filesystem::path;\n\n    const path& dereference() const { return m_element; }\n    bool equal(const reverse_iterator& rhs) const { return m_itr == rhs.m_itr; }\n    void increment()\n    { \n      --m_itr;\n      if (m_itr != m_itr.m_path_ptr->begin())\n      {\n        iterator tmp = m_itr;\n        m_element = *--tmp;\n      }\n    }\n    void decrement()\n    {\n      m_element = *m_itr;\n      ++m_itr;\n    }\n\n    iterator m_itr;\n    path     m_element;\n\n  }; // path::reverse_iterator\n\n  inline path::reverse_iterator path::rbegin() const { return reverse_iterator(end()); }\n  inline path::reverse_iterator path::rend() const   { return reverse_iterator(begin()); }\n\n\n  //------------------------------------------------------------------------------------//\n  //                                                                                    //\n  //                              non-member functions                                  //\n  //                                                                                    //\n  //------------------------------------------------------------------------------------//\n\n  //  std::lexicographical_compare would infinately recurse because path iterators\n  //  yield paths, so provide a path aware version\n  inline bool lexicographical_compare(path::iterator first1, path::iterator last1,\n    path::iterator first2, path::iterator last2)\n    { return detail::lex_compare(first1, last1, first2, last2) < 0; }\n  \n  inline bool operator==(const path& lhs, const path& rhs)              {return lhs.compare(rhs) == 0;}\n  inline bool operator==(const path& lhs, const path::string_type& rhs) {return lhs.compare(rhs) == 0;} \n  inline bool operator==(const path::string_type& lhs, const path& rhs) {return rhs.compare(lhs) == 0;}\n  inline bool operator==(const path& lhs, const path::value_type* rhs)  {return lhs.compare(rhs) == 0;}\n  inline bool operator==(const path::value_type* lhs, const path& rhs)  {return rhs.compare(lhs) == 0;}\n  \n  inline bool operator!=(const path& lhs, const path& rhs)              {return lhs.compare(rhs) != 0;}\n  inline bool operator!=(const path& lhs, const path::string_type& rhs) {return lhs.compare(rhs) != 0;} \n  inline bool operator!=(const path::string_type& lhs, const path& rhs) {return rhs.compare(lhs) != 0;}\n  inline bool operator!=(const path& lhs, const path::value_type* rhs)  {return lhs.compare(rhs) != 0;}\n  inline bool operator!=(const path::value_type* lhs, const path& rhs)  {return rhs.compare(lhs) != 0;}\n\n  // TODO: why do == and != have additional overloads, but the others don't?\n\n  inline bool operator<(const path& lhs, const path& rhs)  {return lhs.compare(rhs) < 0;}\n  inline bool operator<=(const path& lhs, const path& rhs) {return !(rhs < lhs);}\n  inline bool operator> (const path& lhs, const path& rhs) {return rhs < lhs;}\n  inline bool operator>=(const path& lhs, const path& rhs) {return !(lhs < rhs);}\n\n  inline std::size_t hash_value(const path& x)\n  {\n# ifdef BOOST_WINDOWS_API\n    std::size_t seed = 0;\n    for(const path::value_type* it = x.c_str(); *it; ++it)\n      hash_combine(seed, *it == '/' ? L'\\\\' : *it);\n    return seed;\n# else   // BOOST_POSIX_API\n    return hash_range(x.native().begin(), x.native().end());\n# endif\n  }\n\n  inline void swap(path& lhs, path& rhs)                   { lhs.swap(rhs); }\n\n  inline path operator/(const path& lhs, const path& rhs)  { return path(lhs) /= rhs; }\n\n  //  inserters and extractors\n  //    use boost::io::quoted() to handle spaces in paths\n  //    use '&' as escape character to ease use for Windows paths\n\n  template <class Char, class Traits>\n  inline std::basic_ostream<Char, Traits>&\n  operator<<(std::basic_ostream<Char, Traits>& os, const path& p)\n  {\n    return os\n      << boost::io::quoted(p.template string<std::basic_string<Char> >(), static_cast<Char>('&'));\n  }\n  \n  template <class Char, class Traits>\n  inline std::basic_istream<Char, Traits>&\n  operator>>(std::basic_istream<Char, Traits>& is, path& p)\n  {\n    std::basic_string<Char> str;\n    is >> boost::io::quoted(str, static_cast<Char>('&'));\n    p = str;\n    return is;\n  }\n  \n  //  name_checks\n\n  //  These functions are holdovers from version 1. It isn't clear they have much\n  //  usefulness, or how to generalize them for later versions.\n\n  BOOST_FILESYSTEM_DECL bool portable_posix_name(const std::string & name);\n  BOOST_FILESYSTEM_DECL bool windows_name(const std::string & name);\n  BOOST_FILESYSTEM_DECL bool portable_name(const std::string & name);\n  BOOST_FILESYSTEM_DECL bool portable_directory_name(const std::string & name);\n  BOOST_FILESYSTEM_DECL bool portable_file_name(const std::string & name);\n  BOOST_FILESYSTEM_DECL bool native(const std::string & name);\n \n//--------------------------------------------------------------------------------------//\n//                     class path member template implementation                        //\n//--------------------------------------------------------------------------------------//\n\n  template <class InputIterator>\n  path& path::append(InputIterator begin, InputIterator end)\n  {\n    if (begin == end)\n      return *this;\n    string_type::size_type sep_pos(m_append_separator_if_needed());\n    std::basic_string<typename std::iterator_traits<InputIterator>::value_type>\n      seq(begin, end);\n    path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname);\n    if (sep_pos)\n      m_erase_redundant_separator(sep_pos);\n    return *this;\n  }\n\n  template <class InputIterator>\n  path& path::append(InputIterator begin, InputIterator end, const codecvt_type& cvt)\n  {\n    if (begin == end)\n      return *this;\n    string_type::size_type sep_pos(m_append_separator_if_needed());\n    std::basic_string<typename std::iterator_traits<InputIterator>::value_type>\n      seq(begin, end);\n    path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname, cvt);\n    if (sep_pos)\n      m_erase_redundant_separator(sep_pos);\n    return *this;\n  }\n\n  template <class Source>\n  path& path::append(Source const& source)\n  {\n    if (path_traits::empty(source))\n      return *this;\n    string_type::size_type sep_pos(m_append_separator_if_needed());\n    path_traits::dispatch(source, m_pathname);\n    if (sep_pos)\n      m_erase_redundant_separator(sep_pos);\n    return *this;\n  }\n\n  template <class Source>\n  path& path::append(Source const& source, const codecvt_type& cvt)\n  {\n    if (path_traits::empty(source))\n      return *this;\n    string_type::size_type sep_pos(m_append_separator_if_needed());\n    path_traits::dispatch(source, m_pathname, cvt);\n    if (sep_pos)\n      m_erase_redundant_separator(sep_pos);\n    return *this;\n  }\n\n//--------------------------------------------------------------------------------------//\n//                     class path member template specializations                       //\n//--------------------------------------------------------------------------------------//\n\n  template <> inline\n  std::string path::string<std::string>() const\n    { return string(); }\n\n  template <> inline\n  std::wstring path::string<std::wstring>() const\n    { return wstring(); }\n\n  template <> inline\n  std::string path::string<std::string>(const codecvt_type& cvt) const\n    { return string(cvt); }\n\n  template <> inline\n  std::wstring path::string<std::wstring>(const codecvt_type& cvt) const\n    { return wstring(cvt); }\n\n  template <> inline\n  std::string path::generic_string<std::string>() const\n    { return generic_string(); }\n\n  template <> inline\n  std::wstring path::generic_string<std::wstring>() const\n    { return generic_wstring(); }\n\n  template <> inline\n  std::string path::generic_string<std::string>(const codecvt_type& cvt) const\n    { return generic_string(cvt); }\n\n  template <> inline\n  std::wstring path::generic_string<std::wstring>(const codecvt_type& cvt) const\n    { return generic_wstring(cvt); }\n\n  //--------------------------------------------------------------------------------------//\n  //                     path_traits convert function implementations                     //\n  //                        requiring path::codecvt() be visable                          //\n  //--------------------------------------------------------------------------------------//\n\nnamespace path_traits\n{  //  without codecvt\n\n  inline\n    void convert(const char* from,\n    const char* from_end,    // 0 for null terminated MBCS\n    std::wstring & to)\n  {\n    convert(from, from_end, to, path::codecvt());\n  }\n\n  inline\n    void convert(const wchar_t* from,\n    const wchar_t* from_end,  // 0 for null terminated MBCS\n    std::string & to)\n  {\n    convert(from, from_end, to, path::codecvt());\n  }\n\n  inline\n    void convert(const char* from,\n    std::wstring & to)\n  {\n    BOOST_ASSERT(from);\n    convert(from, 0, to, path::codecvt());\n  }\n\n  inline\n    void convert(const wchar_t* from,\n    std::string & to)\n  {\n    BOOST_ASSERT(from);\n    convert(from, 0, to, path::codecvt());\n  }\n}  // namespace path_traits\n}  // namespace filesystem\n}  // namespace boost\n\n//----------------------------------------------------------------------------//\n\n#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas\n\n#endif  // BOOST_FILESYSTEM_PATH_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem/path_traits.hpp",
    "content": "//  filesystem path_traits.hpp  --------------------------------------------------------//\n\n//  Copyright Beman Dawes 2009\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  Library home page: http://www.boost.org/libs/filesystem\n\n#ifndef BOOST_FILESYSTEM_PATH_TRAITS_HPP\n#define BOOST_FILESYSTEM_PATH_TRAITS_HPP\n\n#include <boost/config.hpp>\n\n# if defined( BOOST_NO_STD_WSTRING )\n#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support\n# endif\n\n#include <boost/filesystem/config.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/decay.hpp>\n#include <boost/system/error_code.hpp>\n#include <cwchar>  // for mbstate_t\n#include <string>\n#include <vector>\n#include <list>\n#include <iterator>\n#include <locale>\n#include <boost/assert.hpp>\n// #include <iostream>   //**** comment me out ****\n\n#include <boost/config/abi_prefix.hpp> // must be the last #include\n\nnamespace boost { namespace filesystem {\n\n  BOOST_FILESYSTEM_DECL const system::error_category& codecvt_error_category();\n  //  uses std::codecvt_base::result used for error codes:\n  //\n  //    ok:       Conversion successful.\n  //    partial:  Not all source characters converted; one or more additional source\n  //              characters are needed to produce the final target character, or the\n  //              size of the target intermediate buffer was too small to hold the result.\n  //    error:    A character in the source could not be converted to the target encoding.\n  //    noconv:   The source and target characters have the same type and encoding, so no\n  //              conversion was necessary.\n\n  class directory_entry;\n  \nnamespace path_traits {\n \n  typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_type;\n\n  //  is_pathable type trait; allows disabling over-agressive class path member templates\n\n  template <class T>\n  struct is_pathable { static const bool value = false; };\n\n  template<> struct is_pathable<char*>                  { static const bool value = true; };\n  template<> struct is_pathable<const char*>            { static const bool value = true; };\n  template<> struct is_pathable<wchar_t*>               { static const bool value = true; };\n  template<> struct is_pathable<const wchar_t*>         { static const bool value = true; };\n  template<> struct is_pathable<std::string>            { static const bool value = true; };\n  template<> struct is_pathable<std::wstring>           { static const bool value = true; };\n  template<> struct is_pathable<std::vector<char> >     { static const bool value = true; };\n  template<> struct is_pathable<std::vector<wchar_t> >  { static const bool value = true; };\n  template<> struct is_pathable<std::list<char> >       { static const bool value = true; };\n  template<> struct is_pathable<std::list<wchar_t> >    { static const bool value = true; };\n  template<> struct is_pathable<directory_entry>        { static const bool value = true; };\n\n  //  Pathable empty\n\n  template <class Container> inline\n    // disable_if aids broken compilers (IBM, old GCC, etc.) and is harmless for\n    // conforming compilers. Replace by plain \"bool\" at some future date (2012?) \n    typename boost::disable_if<boost::is_array<Container>, bool>::type\n      empty(const Container & c)\n        { return c.begin() == c.end(); }\n\n  template <class T> inline\n    bool empty(T * const & c_str)\n  {\n    BOOST_ASSERT(c_str);\n    return !*c_str;\n  }\n\n  template <typename T, size_t N> inline\n     bool empty(T (&x)[N])\n       { return !x[0]; }\n\n  // value types differ  ---------------------------------------------------------------//\n  //\n  //   A from_end argument of 0 is less efficient than a known end, so use only if needed\n\n  //  with codecvt\n\n  BOOST_FILESYSTEM_DECL\n    void convert(const char* from,\n    const char* from_end,    // 0 for null terminated MBCS\n    std::wstring & to,\n    const codecvt_type& cvt);\n\n  BOOST_FILESYSTEM_DECL\n    void convert(const wchar_t* from,\n    const wchar_t* from_end,  // 0 for null terminated MBCS\n    std::string & to,\n    const codecvt_type& cvt);\n\n  inline\n    void convert(const char* from,\n    std::wstring & to,\n    const codecvt_type& cvt)\n  {\n    BOOST_ASSERT(from);\n    convert(from, 0, to, cvt);\n  }\n\n  inline\n    void convert(const wchar_t* from,\n    std::string & to,\n    const codecvt_type& cvt)\n  {\n    BOOST_ASSERT(from);\n    convert(from, 0, to, cvt);\n  }\n\n  //  without codecvt\n\n  inline\n    void convert(const char* from,\n    const char* from_end,    // 0 for null terminated MBCS\n    std::wstring & to);\n\n  inline\n    void convert(const wchar_t* from,\n    const wchar_t* from_end,  // 0 for null terminated MBCS\n    std::string & to);\n\n  inline\n    void convert(const char* from,\n    std::wstring & to);\n\n  inline\n    void convert(const wchar_t* from,\n    std::string & to);\n\n  // value types same  -----------------------------------------------------------------//\n\n  // char with codecvt\n\n  inline\n    void convert(const char* from, const char* from_end, std::string & to,\n    const codecvt_type&)\n  {\n    BOOST_ASSERT(from);\n    BOOST_ASSERT(from_end);\n    to.append(from, from_end);\n  }\n\n  inline\n    void convert(const char* from,\n    std::string & to,\n    const codecvt_type&)\n  {\n    BOOST_ASSERT(from);\n    to += from;\n  }\n\n  // wchar_t with codecvt\n\n  inline\n    void convert(const wchar_t* from, const wchar_t* from_end, std::wstring & to,\n    const codecvt_type&)\n  {\n    BOOST_ASSERT(from);\n    BOOST_ASSERT(from_end);\n    to.append(from, from_end);\n  }\n\n  inline\n    void convert(const wchar_t* from,\n    std::wstring & to,\n    const codecvt_type&)\n  {\n    BOOST_ASSERT(from);\n    to += from;\n  }\n\n  // char without codecvt\n\n  inline\n    void convert(const char* from, const char* from_end, std::string & to)\n  {\n    BOOST_ASSERT(from);\n    BOOST_ASSERT(from_end);\n    to.append(from, from_end);\n  }\n\n  inline\n    void convert(const char* from, std::string & to)\n  {\n    BOOST_ASSERT(from);\n    to += from;\n  }\n\n  // wchar_t without codecvt\n\n  inline\n    void convert(const wchar_t* from, const wchar_t* from_end, std::wstring & to)\n  {\n    BOOST_ASSERT(from);\n    BOOST_ASSERT(from_end);\n    to.append(from, from_end);\n  }\n\n  inline\n    void convert(const wchar_t* from, std::wstring & to)\n  {\n    BOOST_ASSERT(from);\n    to += from;\n  }\n\n  //  Source dispatch  -----------------------------------------------------------------//\n\n  //  contiguous containers with codecvt\n  template <class U> inline\n    void dispatch(const std::string& c, U& to, const codecvt_type& cvt)\n  {\n    if (c.size())\n      convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);\n  }\n  template <class U> inline\n    void dispatch(const std::wstring& c, U& to, const codecvt_type& cvt)\n  {\n    if (c.size())\n      convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);\n  }\n  template <class U> inline\n    void dispatch(const std::vector<char>& c, U& to, const codecvt_type& cvt)\n  {\n    if (c.size())\n      convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);\n  }\n  template <class U> inline\n    void dispatch(const std::vector<wchar_t>& c, U& to, const codecvt_type& cvt)\n  {\n    if (c.size())\n      convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);\n  }\n\n  //  contiguous containers without codecvt\n  template <class U> inline\n    void dispatch(const std::string& c, U& to)\n  {\n    if (c.size())\n      convert(&*c.begin(), &*c.begin() + c.size(), to);\n  }\n  template <class U> inline\n    void dispatch(const std::wstring& c, U& to)\n  {\n    if (c.size())\n      convert(&*c.begin(), &*c.begin() + c.size(), to);\n  }\n  template <class U> inline\n    void dispatch(const std::vector<char>& c, U& to)\n  {\n    if (c.size())\n      convert(&*c.begin(), &*c.begin() + c.size(), to);\n  }\n  template <class U> inline\n    void dispatch(const std::vector<wchar_t>& c, U& to)\n  {\n    if (c.size())\n      convert(&*c.begin(), &*c.begin() + c.size(), to);\n  }\n\n  //  non-contiguous containers with codecvt\n  template <class Container, class U> inline\n    // disable_if aids broken compilers (IBM, old GCC, etc.) and is harmless for\n    // conforming compilers. Replace by plain \"void\" at some future date (2012?) \n    typename boost::disable_if<boost::is_array<Container>, void>::type\n    dispatch(const Container & c, U& to, const codecvt_type& cvt)\n  {\n    if (c.size())\n    {\n      std::basic_string<typename Container::value_type> s(c.begin(), c.end());\n      convert(s.c_str(), s.c_str()+s.size(), to, cvt);\n    }\n  }\n\n  //  c_str\n  template <class T, class U> inline\n    void dispatch(T * const & c_str, U& to, const codecvt_type& cvt)\n  {\n    //    std::cout << \"dispatch() const T *\\n\";\n    BOOST_ASSERT(c_str);\n    convert(c_str, to, cvt);\n  }\n\n  //  Note: there is no dispatch on C-style arrays because the array may\n  //  contain a string smaller than the array size. \n\n  BOOST_FILESYSTEM_DECL\n    void dispatch(const directory_entry & de,\n#                ifdef BOOST_WINDOWS_API\n    std::wstring & to,\n#                else   \n    std::string & to,\n#                endif\n    const codecvt_type&);\n\n  //  non-contiguous containers without codecvt\n  template <class Container, class U> inline\n    // disable_if aids broken compilers (IBM, old GCC, etc.) and is harmless for\n    // conforming compilers. Replace by plain \"void\" at some future date (2012?) \n    typename boost::disable_if<boost::is_array<Container>, void>::type\n    dispatch(const Container & c, U& to)\n  {\n    if (c.size())\n    {\n      std::basic_string<typename Container::value_type> seq(c.begin(), c.end());\n      convert(seq.c_str(), seq.c_str()+seq.size(), to);\n    }\n  }\n\n  //  c_str\n  template <class T, class U> inline\n    void dispatch(T * const & c_str, U& to)\n  {\n    //    std::cout << \"dispatch() const T *\\n\";\n    BOOST_ASSERT(c_str);\n    convert(c_str, to);\n  }\n\n  //  Note: there is no dispatch on C-style arrays because the array may\n  //  contain a string smaller than the array size. \n\n  BOOST_FILESYSTEM_DECL\n    void dispatch(const directory_entry & de,\n#                ifdef BOOST_WINDOWS_API\n    std::wstring & to\n#                else   \n    std::string & to\n#                endif\n    );\n\n\n}}} // namespace boost::filesystem::path_traits\n\n#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas\n\n#endif  // BOOST_FILESYSTEM_PATH_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem/string_file.hpp",
    "content": "//  filesystem/string_file.hpp  --------------------------------------------------------//\n\n//  Copyright Beman Dawes 2015\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  Library home page: http://www.boost.org/libs/filesystem\n\n#ifndef BOOST_FILESYSTEM_STRING_FILE_HPP\n#define BOOST_FILESYSTEM_STRING_FILE_HPP\n\n#include <string>\n#include <boost/filesystem/fstream.hpp>\n#include <boost/filesystem/operations.hpp>\n\nnamespace boost\n{\nnamespace filesystem\n{\ninline\nvoid save_string_file(const path& p, const std::string& str)\n{\n  ofstream file;\n  file.exceptions(std::ofstream::failbit | std::ofstream::badbit);\n  file.open(p, std::ios_base::binary);\n  file.write(str.c_str(), str.size());\n}\n\ninline\nvoid load_string_file(const path& p, std::string& str)\n{\n  ifstream file;\n  file.exceptions(std::ifstream::failbit | std::ifstream::badbit);\n  file.open(p, std::ios_base::binary);\n  std::size_t sz = static_cast<std::size_t>(file_size(p));\n  str.resize(sz, '\\0');\n  file.read(&str[0], sz);\n}\n}  // namespace filesystem\n}  // namespace boost\n\n#endif  // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/filesystem.hpp",
    "content": "//  boost/filesystem.hpp  --------------------------------------------------------------//\n\n//  Copyright Beman Dawes 2010\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  Library home page: http://www.boost.org/libs/filesystem\n\n//--------------------------------------------------------------------------------------// \n\n#ifndef BOOST_FILESYSTEM_FILESYSTEM_HPP\n#define BOOST_FILESYSTEM_FILESYSTEM_HPP\n\n#  include <boost/filesystem/config.hpp>\n#  include <boost/filesystem/path.hpp>\n#  include <boost/filesystem/operations.hpp>\n#  include <boost/filesystem/convenience.hpp>\n#  include <boost/filesystem/string_file.hpp>\n\n#endif  // BOOST_FILESYSTEM_FILESYSTEM_HPP \n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/detail/function_iterate.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n#if !defined(BOOST_PP_IS_ITERATING)\n# error Boost.Function - do not include this file!\n#endif\n\n#define BOOST_FUNCTION_NUM_ARGS BOOST_PP_ITERATION()\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/detail/gen_maybe_include.pl",
    "content": "#!/usr/bin/perl -w\n#\n# Boost.Function library\n#\n# Copyright (C) 2001-2003 Douglas Gregor (gregod@cs.rpi.edu)\n#\n# Permission to copy, use, sell and distribute this software is granted\n# provided this copyright notice appears in all copies.\n# Permission to modify the code and to distribute modified code is granted\n# provided this copyright notice appears in all copies, and a notice\n# that the code was modified is included with the copyright notice.\n#\n# This software is provided \"as is\" without express or implied warranty,\n# and with no claim as to its suitability for any purpose.\n#\n# For more information, see http://www.boost.org\nuse English;\n\n$max_args = $ARGV[0];\n\nopen (OUT, \">maybe_include.hpp\") or die(\"Cannot write to maybe_include.hpp\");\nfor($on_arg = 0; $on_arg <= $max_args; ++$on_arg) {\n    if ($on_arg == 0) {\n\tprint OUT \"#if\";\n    }\n    else {\n\tprint OUT \"#elif\";\n    }\n    print OUT \" BOOST_FUNCTION_NUM_ARGS == $on_arg\\n\";\n    print OUT \"#  ifndef BOOST_FUNCTION_$on_arg\\n\";\n    print OUT \"#    define BOOST_FUNCTION_$on_arg\\n\";\n    print OUT \"#    include <boost/function/function_template.hpp>\\n\";\n    print OUT \"#  endif\\n\";\n}\nprint OUT \"#else\\n\";\nprint OUT \"#  error Cannot handle Boost.Function objects that accept more than $max_args arguments!\\n\";\nprint OUT \"#endif\\n\";\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/detail/maybe_include.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#if BOOST_FUNCTION_NUM_ARGS == 0\n#  ifndef BOOST_FUNCTION_0\n#    define BOOST_FUNCTION_0\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 1\n#  ifndef BOOST_FUNCTION_1\n#    define BOOST_FUNCTION_1\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 2\n#  ifndef BOOST_FUNCTION_2\n#    define BOOST_FUNCTION_2\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 3\n#  ifndef BOOST_FUNCTION_3\n#    define BOOST_FUNCTION_3\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 4\n#  ifndef BOOST_FUNCTION_4\n#    define BOOST_FUNCTION_4\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 5\n#  ifndef BOOST_FUNCTION_5\n#    define BOOST_FUNCTION_5\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 6\n#  ifndef BOOST_FUNCTION_6\n#    define BOOST_FUNCTION_6\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 7\n#  ifndef BOOST_FUNCTION_7\n#    define BOOST_FUNCTION_7\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 8\n#  ifndef BOOST_FUNCTION_8\n#    define BOOST_FUNCTION_8\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 9\n#  ifndef BOOST_FUNCTION_9\n#    define BOOST_FUNCTION_9\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 10\n#  ifndef BOOST_FUNCTION_10\n#    define BOOST_FUNCTION_10\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 11\n#  ifndef BOOST_FUNCTION_11\n#    define BOOST_FUNCTION_11\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 12\n#  ifndef BOOST_FUNCTION_12\n#    define BOOST_FUNCTION_12\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 13\n#  ifndef BOOST_FUNCTION_13\n#    define BOOST_FUNCTION_13\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 14\n#  ifndef BOOST_FUNCTION_14\n#    define BOOST_FUNCTION_14\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 15\n#  ifndef BOOST_FUNCTION_15\n#    define BOOST_FUNCTION_15\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 16\n#  ifndef BOOST_FUNCTION_16\n#    define BOOST_FUNCTION_16\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 17\n#  ifndef BOOST_FUNCTION_17\n#    define BOOST_FUNCTION_17\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 18\n#  ifndef BOOST_FUNCTION_18\n#    define BOOST_FUNCTION_18\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 19\n#  ifndef BOOST_FUNCTION_19\n#    define BOOST_FUNCTION_19\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 20\n#  ifndef BOOST_FUNCTION_20\n#    define BOOST_FUNCTION_20\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 21\n#  ifndef BOOST_FUNCTION_21\n#    define BOOST_FUNCTION_21\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 22\n#  ifndef BOOST_FUNCTION_22\n#    define BOOST_FUNCTION_22\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 23\n#  ifndef BOOST_FUNCTION_23\n#    define BOOST_FUNCTION_23\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 24\n#  ifndef BOOST_FUNCTION_24\n#    define BOOST_FUNCTION_24\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 25\n#  ifndef BOOST_FUNCTION_25\n#    define BOOST_FUNCTION_25\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 26\n#  ifndef BOOST_FUNCTION_26\n#    define BOOST_FUNCTION_26\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 27\n#  ifndef BOOST_FUNCTION_27\n#    define BOOST_FUNCTION_27\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 28\n#  ifndef BOOST_FUNCTION_28\n#    define BOOST_FUNCTION_28\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 29\n#  ifndef BOOST_FUNCTION_29\n#    define BOOST_FUNCTION_29\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 30\n#  ifndef BOOST_FUNCTION_30\n#    define BOOST_FUNCTION_30\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 31\n#  ifndef BOOST_FUNCTION_31\n#    define BOOST_FUNCTION_31\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 32\n#  ifndef BOOST_FUNCTION_32\n#    define BOOST_FUNCTION_32\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 33\n#  ifndef BOOST_FUNCTION_33\n#    define BOOST_FUNCTION_33\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 34\n#  ifndef BOOST_FUNCTION_34\n#    define BOOST_FUNCTION_34\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 35\n#  ifndef BOOST_FUNCTION_35\n#    define BOOST_FUNCTION_35\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 36\n#  ifndef BOOST_FUNCTION_36\n#    define BOOST_FUNCTION_36\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 37\n#  ifndef BOOST_FUNCTION_37\n#    define BOOST_FUNCTION_37\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 38\n#  ifndef BOOST_FUNCTION_38\n#    define BOOST_FUNCTION_38\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 39\n#  ifndef BOOST_FUNCTION_39\n#    define BOOST_FUNCTION_39\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 40\n#  ifndef BOOST_FUNCTION_40\n#    define BOOST_FUNCTION_40\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 41\n#  ifndef BOOST_FUNCTION_41\n#    define BOOST_FUNCTION_41\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 42\n#  ifndef BOOST_FUNCTION_42\n#    define BOOST_FUNCTION_42\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 43\n#  ifndef BOOST_FUNCTION_43\n#    define BOOST_FUNCTION_43\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 44\n#  ifndef BOOST_FUNCTION_44\n#    define BOOST_FUNCTION_44\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 45\n#  ifndef BOOST_FUNCTION_45\n#    define BOOST_FUNCTION_45\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 46\n#  ifndef BOOST_FUNCTION_46\n#    define BOOST_FUNCTION_46\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 47\n#  ifndef BOOST_FUNCTION_47\n#    define BOOST_FUNCTION_47\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 48\n#  ifndef BOOST_FUNCTION_48\n#    define BOOST_FUNCTION_48\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 49\n#  ifndef BOOST_FUNCTION_49\n#    define BOOST_FUNCTION_49\n#    include <boost/function/function_template.hpp>\n#  endif\n#elif BOOST_FUNCTION_NUM_ARGS == 50\n#  ifndef BOOST_FUNCTION_50\n#    define BOOST_FUNCTION_50\n#    include <boost/function/function_template.hpp>\n#  endif\n#else\n#  error Cannot handle Boost.Function objects that accept more than 50 arguments!\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/detail/prologue.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#ifndef BOOST_FUNCTION_PROLOGUE_HPP\n#define BOOST_FUNCTION_PROLOGUE_HPP\n#  include <cassert>\n#  include <algorithm>\n#  include <boost/config/no_tr1/functional.hpp> // unary_function, binary_function\n#  include <boost/throw_exception.hpp>\n#  include <boost/config.hpp>\n#  include <boost/function/function_base.hpp>\n#  include <boost/mem_fn.hpp>\n#  include <boost/type_traits/is_integral.hpp>\n#  include <boost/preprocessor/enum.hpp>\n#  include <boost/preprocessor/enum_params.hpp>\n#  include <boost/preprocessor/cat.hpp>\n#  include <boost/preprocessor/repeat.hpp>\n#  include <boost/preprocessor/inc.hpp>\n#  include <boost/type_traits/is_void.hpp>\n#endif // BOOST_FUNCTION_PROLOGUE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function0.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 0\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function1.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 1\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function10.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 10\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function2.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 2\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function3.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 3\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function4.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 4\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function5.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 5\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function6.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 6\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function7.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 7\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function8.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 8\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function9.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#define BOOST_FUNCTION_NUM_ARGS 9\n#include <boost/function/detail/maybe_include.hpp>\n#undef BOOST_FUNCTION_NUM_ARGS\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function_base.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2001-2006\n//  Copyright Emil Dotchevski 2007\n//  Use, modification and distribution is subject to the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#ifndef BOOST_FUNCTION_BASE_HEADER\n#define BOOST_FUNCTION_BASE_HEADER\n\n#include <stdexcept>\n#include <string>\n#include <memory>\n#include <new>\n#include <boost/config.hpp>\n#include <boost/detail/sp_typeinfo.hpp>\n#include <boost/assert.hpp>\n#include <boost/integer.hpp>\n#include <boost/type_traits/has_trivial_copy.hpp>\n#include <boost/type_traits/has_trivial_destructor.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/composite_traits.hpp>\n#include <boost/ref.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/type_traits/alignment_of.hpp>\n#ifndef BOOST_NO_SFINAE\n#  include \"boost/utility/enable_if.hpp\"\n#else\n#  include \"boost/mpl/bool.hpp\"\n#endif\n#include <boost/function_equal.hpp>\n#include <boost/function/function_fwd.hpp>\n\n#if defined(BOOST_MSVC)\n#   pragma warning( push )\n#   pragma warning( disable : 4793 ) // complaint about native code generation\n#   pragma warning( disable : 4127 ) // \"conditional expression is constant\"\n#endif       \n\n// Define BOOST_FUNCTION_STD_NS to the namespace that contains type_info.\n#ifdef BOOST_NO_STD_TYPEINFO\n// Embedded VC++ does not have type_info in namespace std\n#  define BOOST_FUNCTION_STD_NS\n#else\n#  define BOOST_FUNCTION_STD_NS std\n#endif\n\n// Borrowed from Boost.Python library: determines the cases where we\n// need to use std::type_info::name to compare instead of operator==.\n#if defined( BOOST_NO_TYPEID )\n#  define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y))\n#elif defined(__GNUC__) \\\n || defined(_AIX) \\\n || (   defined(__sgi) && defined(__host_mips))\n#  include <cstring>\n#  define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) \\\n     (std::strcmp((X).name(),(Y).name()) == 0)\n# else\n#  define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y))\n#endif\n\n#if defined(__ICL) && __ICL <= 600 || defined(__MWERKS__) && __MWERKS__ < 0x2406 && !defined(BOOST_STRICT_CONFIG)\n#  define BOOST_FUNCTION_TARGET_FIX(x) x\n#else\n#  define BOOST_FUNCTION_TARGET_FIX(x)\n#endif // __ICL etc\n\n#  define BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor,Type)              \\\n      typename ::boost::enable_if_c<          \\\n                           !(::boost::is_integral<Functor>::value), \\\n                           Type>::type\n\nnamespace boost {\n  namespace detail {\n    namespace function {\n      class X;\n\n      /**\n       * A buffer used to store small function objects in\n       * boost::function. It is a union containing function pointers,\n       * object pointers, and a structure that resembles a bound\n       * member function pointer.\n       */\n      union function_buffer\n      {\n        // For pointers to function objects\n        mutable void* obj_ptr;\n\n        // For pointers to std::type_info objects\n        struct type_t {\n          // (get_functor_type_tag, check_functor_type_tag).\n          const detail::sp_typeinfo* type;\n\n          // Whether the type is const-qualified.\n          bool const_qualified;\n          // Whether the type is volatile-qualified.\n          bool volatile_qualified;\n        } type;\n\n        // For function pointers of all kinds\n        mutable void (*func_ptr)();\n\n        // For bound member pointers\n        struct bound_memfunc_ptr_t {\n          void (X::*memfunc_ptr)(int);\n          void* obj_ptr;\n        } bound_memfunc_ptr;\n\n        // For references to function objects. We explicitly keep\n        // track of the cv-qualifiers on the object referenced.\n        struct obj_ref_t {\n          mutable void* obj_ptr;\n          bool is_const_qualified;\n          bool is_volatile_qualified;\n        } obj_ref;\n\n        // To relax aliasing constraints\n        mutable char data;\n      };\n\n      /**\n       * The unusable class is a placeholder for unused function arguments\n       * It is also completely unusable except that it constructable from\n       * anything. This helps compilers without partial specialization to\n       * handle Boost.Function objects returning void.\n       */\n      struct unusable\n      {\n        unusable() {}\n        template<typename T> unusable(const T&) {}\n      };\n\n      /* Determine the return type. This supports compilers that do not support\n       * void returns or partial specialization by silently changing the return\n       * type to \"unusable\".\n       */\n      template<typename T> struct function_return_type { typedef T type; };\n\n      template<>\n      struct function_return_type<void>\n      {\n        typedef unusable type;\n      };\n\n      // The operation type to perform on the given functor/function pointer\n      enum functor_manager_operation_type {\n        clone_functor_tag,\n        move_functor_tag,\n        destroy_functor_tag,\n        check_functor_type_tag,\n        get_functor_type_tag\n      };\n\n      // Tags used to decide between different types of functions\n      struct function_ptr_tag {};\n      struct function_obj_tag {};\n      struct member_ptr_tag {};\n      struct function_obj_ref_tag {};\n\n      template<typename F>\n      class get_function_tag\n      {\n        typedef typename mpl::if_c<(is_pointer<F>::value),\n                                   function_ptr_tag,\n                                   function_obj_tag>::type ptr_or_obj_tag;\n\n        typedef typename mpl::if_c<(is_member_pointer<F>::value),\n                                   member_ptr_tag,\n                                   ptr_or_obj_tag>::type ptr_or_obj_or_mem_tag;\n\n        typedef typename mpl::if_c<(is_reference_wrapper<F>::value),\n                                   function_obj_ref_tag,\n                                   ptr_or_obj_or_mem_tag>::type or_ref_tag;\n\n      public:\n        typedef or_ref_tag type;\n      };\n\n      // The trivial manager does nothing but return the same pointer (if we\n      // are cloning) or return the null pointer (if we are deleting).\n      template<typename F>\n      struct reference_manager\n      {\n        static inline void\n        manage(const function_buffer& in_buffer, function_buffer& out_buffer, \n               functor_manager_operation_type op)\n        {\n          switch (op) {\n          case clone_functor_tag: \n            out_buffer.obj_ref = in_buffer.obj_ref;\n            return;\n\n          case move_functor_tag:\n            out_buffer.obj_ref = in_buffer.obj_ref;\n            in_buffer.obj_ref.obj_ptr = 0;\n            return;\n\n          case destroy_functor_tag:\n            out_buffer.obj_ref.obj_ptr = 0;\n            return;\n\n          case check_functor_type_tag:\n            {\n              const detail::sp_typeinfo& check_type \n                = *out_buffer.type.type;\n\n              // Check whether we have the same type. We can add\n              // cv-qualifiers, but we can't take them away.\n              if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(F))\n                  && (!in_buffer.obj_ref.is_const_qualified \n                      || out_buffer.type.const_qualified)\n                  && (!in_buffer.obj_ref.is_volatile_qualified\n                      || out_buffer.type.volatile_qualified))\n                out_buffer.obj_ptr = in_buffer.obj_ref.obj_ptr;\n              else\n                out_buffer.obj_ptr = 0;\n            }\n            return;\n\n          case get_functor_type_tag:\n            out_buffer.type.type = &BOOST_SP_TYPEID(F);\n            out_buffer.type.const_qualified = in_buffer.obj_ref.is_const_qualified;\n            out_buffer.type.volatile_qualified = in_buffer.obj_ref.is_volatile_qualified;\n            return;\n          }\n        }\n      };\n\n      /**\n       * Determine if boost::function can use the small-object\n       * optimization with the function object type F.\n       */\n      template<typename F>\n      struct function_allows_small_object_optimization\n      {\n        BOOST_STATIC_CONSTANT\n          (bool, \n           value = ((sizeof(F) <= sizeof(function_buffer) &&\n                     (alignment_of<function_buffer>::value \n                      % alignment_of<F>::value == 0))));\n      };\n\n      template <typename F,typename A>\n      struct functor_wrapper: public F, public A\n      {\n        functor_wrapper( F f, A a ):\n          F(f),\n          A(a)\n        {\n        }\n        \n        functor_wrapper(const functor_wrapper& f) :\n          F(static_cast<const F&>(f)),\n          A(static_cast<const A&>(f))\n        {\n        }\n      };\n\n      /**\n       * The functor_manager class contains a static function \"manage\" which\n       * can clone or destroy the given function/function object pointer.\n       */\n      template<typename Functor>\n      struct functor_manager_common\n      {\n        typedef Functor functor_type;\n\n        // Function pointers\n        static inline void\n        manage_ptr(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op)\n        {\n          if (op == clone_functor_tag)\n            out_buffer.func_ptr = in_buffer.func_ptr;\n          else if (op == move_functor_tag) {\n            out_buffer.func_ptr = in_buffer.func_ptr;\n            in_buffer.func_ptr = 0;\n          } else if (op == destroy_functor_tag)\n            out_buffer.func_ptr = 0;\n          else if (op == check_functor_type_tag) {\n            const boost::detail::sp_typeinfo& check_type\n              = *out_buffer.type.type;\n            if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor)))\n              out_buffer.obj_ptr = &in_buffer.func_ptr;\n            else\n              out_buffer.obj_ptr = 0;\n          } else /* op == get_functor_type_tag */ {\n            out_buffer.type.type = &BOOST_SP_TYPEID(Functor);\n            out_buffer.type.const_qualified = false;\n            out_buffer.type.volatile_qualified = false;\n          }\n        }\n\n        // Function objects that fit in the small-object buffer.\n        static inline void\n        manage_small(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op)\n        {\n          if (op == clone_functor_tag || op == move_functor_tag) {\n            const functor_type* in_functor = \n              reinterpret_cast<const functor_type*>(&in_buffer.data);\n            new (reinterpret_cast<void*>(&out_buffer.data)) functor_type(*in_functor);\n\n            if (op == move_functor_tag) {\n              functor_type* f = reinterpret_cast<functor_type*>(&in_buffer.data);\n              (void)f; // suppress warning about the value of f not being used (MSVC)\n              f->~Functor();\n            }\n          } else if (op == destroy_functor_tag) {\n            // Some compilers (Borland, vc6, ...) are unhappy with ~functor_type.\n             functor_type* f = reinterpret_cast<functor_type*>(&out_buffer.data);\n             (void)f; // suppress warning about the value of f not being used (MSVC)\n             f->~Functor();\n          } else if (op == check_functor_type_tag) {\n            const detail::sp_typeinfo& check_type \n              = *out_buffer.type.type;\n            if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor)))\n              out_buffer.obj_ptr = &in_buffer.data;\n            else\n              out_buffer.obj_ptr = 0;\n          } else /* op == get_functor_type_tag */ {\n            out_buffer.type.type = &BOOST_SP_TYPEID(Functor);\n            out_buffer.type.const_qualified = false;\n            out_buffer.type.volatile_qualified = false;            \n          }\n        }\n      };\n\n      template<typename Functor>\n      struct functor_manager\n      {\n      private:\n        typedef Functor functor_type;\n\n        // Function pointers\n        static inline void\n        manager(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op, function_ptr_tag)\n        {\n          functor_manager_common<Functor>::manage_ptr(in_buffer,out_buffer,op);\n        }\n\n        // Function objects that fit in the small-object buffer.\n        static inline void\n        manager(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op, mpl::true_)\n        {\n          functor_manager_common<Functor>::manage_small(in_buffer,out_buffer,op);\n        }\n        \n        // Function objects that require heap allocation\n        static inline void\n        manager(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op, mpl::false_)\n        {\n          if (op == clone_functor_tag) {\n            // Clone the functor\n            // GCC 2.95.3 gets the CV qualifiers wrong here, so we\n            // can't do the static_cast that we should do.\n            // jewillco: Changing this to static_cast because GCC 2.95.3 is\n            // obsolete.\n            const functor_type* f =\n              static_cast<const functor_type*>(in_buffer.obj_ptr);\n            functor_type* new_f = new functor_type(*f);\n            out_buffer.obj_ptr = new_f;\n          } else if (op == move_functor_tag) {\n            out_buffer.obj_ptr = in_buffer.obj_ptr;\n            in_buffer.obj_ptr = 0;\n          } else if (op == destroy_functor_tag) {\n            /* Cast from the void pointer to the functor pointer type */\n            functor_type* f =\n              static_cast<functor_type*>(out_buffer.obj_ptr);\n            delete f;\n            out_buffer.obj_ptr = 0;\n          } else if (op == check_functor_type_tag) {\n            const detail::sp_typeinfo& check_type\n              = *out_buffer.type.type;\n            if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor)))\n              out_buffer.obj_ptr = in_buffer.obj_ptr;\n            else\n              out_buffer.obj_ptr = 0;\n          } else /* op == get_functor_type_tag */ {\n            out_buffer.type.type = &BOOST_SP_TYPEID(Functor);\n            out_buffer.type.const_qualified = false;\n            out_buffer.type.volatile_qualified = false;\n          }\n        }\n\n        // For function objects, we determine whether the function\n        // object can use the small-object optimization buffer or\n        // whether we need to allocate it on the heap.\n        static inline void\n        manager(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op, function_obj_tag)\n        {\n          manager(in_buffer, out_buffer, op,\n                  mpl::bool_<(function_allows_small_object_optimization<functor_type>::value)>());\n        }\n\n        // For member pointers, we use the small-object optimization buffer.\n        static inline void\n        manager(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op, member_ptr_tag)\n        {\n          manager(in_buffer, out_buffer, op, mpl::true_());\n        }\n\n      public:\n        /* Dispatch to an appropriate manager based on whether we have a\n           function pointer or a function object pointer. */\n        static inline void\n        manage(const function_buffer& in_buffer, function_buffer& out_buffer, \n               functor_manager_operation_type op)\n        {\n          typedef typename get_function_tag<functor_type>::type tag_type;\n          switch (op) {\n          case get_functor_type_tag:\n            out_buffer.type.type = &BOOST_SP_TYPEID(functor_type);\n            out_buffer.type.const_qualified = false;\n            out_buffer.type.volatile_qualified = false;\n            return;\n\n          default:\n            manager(in_buffer, out_buffer, op, tag_type());\n            return;\n          }\n        }\n      };\n\n      template<typename Functor, typename Allocator>\n      struct functor_manager_a\n      {\n      private:\n        typedef Functor functor_type;\n\n        // Function pointers\n        static inline void\n        manager(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op, function_ptr_tag)\n        {\n          functor_manager_common<Functor>::manage_ptr(in_buffer,out_buffer,op);\n        }\n\n        // Function objects that fit in the small-object buffer.\n        static inline void\n        manager(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op, mpl::true_)\n        {\n          functor_manager_common<Functor>::manage_small(in_buffer,out_buffer,op);\n        }\n        \n        // Function objects that require heap allocation\n        static inline void\n        manager(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op, mpl::false_)\n        {\n          typedef functor_wrapper<Functor,Allocator> functor_wrapper_type;\n          typedef typename Allocator::template rebind<functor_wrapper_type>::other\n            wrapper_allocator_type;\n          typedef typename wrapper_allocator_type::pointer wrapper_allocator_pointer_type;\n\n          if (op == clone_functor_tag) {\n            // Clone the functor\n            // GCC 2.95.3 gets the CV qualifiers wrong here, so we\n            // can't do the static_cast that we should do.\n            const functor_wrapper_type* f =\n              static_cast<const functor_wrapper_type*>(in_buffer.obj_ptr);\n            wrapper_allocator_type wrapper_allocator(static_cast<Allocator const &>(*f));\n            wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1);\n            wrapper_allocator.construct(copy, *f);\n\n            // Get back to the original pointer type\n            functor_wrapper_type* new_f = static_cast<functor_wrapper_type*>(copy);\n            out_buffer.obj_ptr = new_f;\n          } else if (op == move_functor_tag) {\n            out_buffer.obj_ptr = in_buffer.obj_ptr;\n            in_buffer.obj_ptr = 0;\n          } else if (op == destroy_functor_tag) {\n            /* Cast from the void pointer to the functor_wrapper_type */\n            functor_wrapper_type* victim =\n              static_cast<functor_wrapper_type*>(in_buffer.obj_ptr);\n            wrapper_allocator_type wrapper_allocator(static_cast<Allocator const &>(*victim));\n            wrapper_allocator.destroy(victim);\n            wrapper_allocator.deallocate(victim,1);\n            out_buffer.obj_ptr = 0;\n          } else if (op == check_functor_type_tag) {\n            const detail::sp_typeinfo& check_type \n              = *out_buffer.type.type;\n            if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor)))\n              out_buffer.obj_ptr = in_buffer.obj_ptr;\n            else\n              out_buffer.obj_ptr = 0;\n          } else /* op == get_functor_type_tag */ {\n            out_buffer.type.type = &BOOST_SP_TYPEID(Functor);\n            out_buffer.type.const_qualified = false;\n            out_buffer.type.volatile_qualified = false;\n          }\n        }\n\n        // For function objects, we determine whether the function\n        // object can use the small-object optimization buffer or\n        // whether we need to allocate it on the heap.\n        static inline void\n        manager(const function_buffer& in_buffer, function_buffer& out_buffer, \n                functor_manager_operation_type op, function_obj_tag)\n        {\n          manager(in_buffer, out_buffer, op,\n                  mpl::bool_<(function_allows_small_object_optimization<functor_type>::value)>());\n        }\n\n      public:\n        /* Dispatch to an appropriate manager based on whether we have a\n           function pointer or a function object pointer. */\n        static inline void\n        manage(const function_buffer& in_buffer, function_buffer& out_buffer, \n               functor_manager_operation_type op)\n        {\n          typedef typename get_function_tag<functor_type>::type tag_type;\n          switch (op) {\n          case get_functor_type_tag:\n            out_buffer.type.type = &BOOST_SP_TYPEID(functor_type);\n            out_buffer.type.const_qualified = false;\n            out_buffer.type.volatile_qualified = false;\n            return;\n\n          default:\n            manager(in_buffer, out_buffer, op, tag_type());\n            return;\n          }\n        }\n      };\n\n      // A type that is only used for comparisons against zero\n      struct useless_clear_type {};\n\n#ifdef BOOST_NO_SFINAE\n      // These routines perform comparisons between a Boost.Function\n      // object and an arbitrary function object (when the last\n      // parameter is mpl::bool_<false>) or against zero (when the\n      // last parameter is mpl::bool_<true>). They are only necessary\n      // for compilers that don't support SFINAE.\n      template<typename Function, typename Functor>\n        bool\n        compare_equal(const Function& f, const Functor&, int, mpl::bool_<true>)\n        { return f.empty(); }\n\n      template<typename Function, typename Functor>\n        bool\n        compare_not_equal(const Function& f, const Functor&, int,\n                          mpl::bool_<true>)\n        { return !f.empty(); }\n\n      template<typename Function, typename Functor>\n        bool\n        compare_equal(const Function& f, const Functor& g, long,\n                      mpl::bool_<false>)\n        {\n          if (const Functor* fp = f.template target<Functor>())\n            return function_equal(*fp, g);\n          else return false;\n        }\n\n      template<typename Function, typename Functor>\n        bool\n        compare_equal(const Function& f, const reference_wrapper<Functor>& g,\n                      int, mpl::bool_<false>)\n        {\n          if (const Functor* fp = f.template target<Functor>())\n            return fp == g.get_pointer();\n          else return false;\n        }\n\n      template<typename Function, typename Functor>\n        bool\n        compare_not_equal(const Function& f, const Functor& g, long,\n                          mpl::bool_<false>)\n        {\n          if (const Functor* fp = f.template target<Functor>())\n            return !function_equal(*fp, g);\n          else return true;\n        }\n\n      template<typename Function, typename Functor>\n        bool\n        compare_not_equal(const Function& f,\n                          const reference_wrapper<Functor>& g, int,\n                          mpl::bool_<false>)\n        {\n          if (const Functor* fp = f.template target<Functor>())\n            return fp != g.get_pointer();\n          else return true;\n        }\n#endif // BOOST_NO_SFINAE\n\n      /**\n       * Stores the \"manager\" portion of the vtable for a\n       * boost::function object.\n       */\n      struct vtable_base\n      {\n        void (*manager)(const function_buffer& in_buffer, \n                        function_buffer& out_buffer, \n                        functor_manager_operation_type op);\n      };\n    } // end namespace function\n  } // end namespace detail\n\n/**\n * The function_base class contains the basic elements needed for the\n * function1, function2, function3, etc. classes. It is common to all\n * functions (and as such can be used to tell if we have one of the\n * functionN objects).\n */\nclass function_base\n{\npublic:\n  function_base() : vtable(0) { }\n\n  /** Determine if the function is empty (i.e., has no target). */\n  bool empty() const { return !vtable; }\n\n  /** Retrieve the type of the stored function object, or BOOST_SP_TYPEID(void)\n      if this is empty. */\n  const detail::sp_typeinfo& target_type() const\n  {\n    if (!vtable) return BOOST_SP_TYPEID(void);\n\n    detail::function::function_buffer type;\n    get_vtable()->manager(functor, type, detail::function::get_functor_type_tag);\n    return *type.type.type;\n  }\n\n  template<typename Functor>\n    Functor* target()\n    {\n      if (!vtable) return 0;\n\n      detail::function::function_buffer type_result;\n      type_result.type.type = &BOOST_SP_TYPEID(Functor);\n      type_result.type.const_qualified = is_const<Functor>::value;\n      type_result.type.volatile_qualified = is_volatile<Functor>::value;\n      get_vtable()->manager(functor, type_result, \n                      detail::function::check_functor_type_tag);\n      return static_cast<Functor*>(type_result.obj_ptr);\n    }\n\n  template<typename Functor>\n    const Functor* target() const\n    {\n      if (!vtable) return 0;\n\n      detail::function::function_buffer type_result;\n      type_result.type.type = &BOOST_SP_TYPEID(Functor);\n      type_result.type.const_qualified = true;\n      type_result.type.volatile_qualified = is_volatile<Functor>::value;\n      get_vtable()->manager(functor, type_result, \n                      detail::function::check_functor_type_tag);\n      // GCC 2.95.3 gets the CV qualifiers wrong here, so we\n      // can't do the static_cast that we should do.\n      return static_cast<const Functor*>(type_result.obj_ptr);\n    }\n\n  template<typename F>\n    bool contains(const F& f) const\n    {\n      if (const F* fp = this->template target<F>())\n      {\n        return function_equal(*fp, f);\n      } else {\n        return false;\n      }\n    }\n\n#if defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3\n  // GCC 3.3 and newer cannot copy with the global operator==, due to\n  // problems with instantiation of function return types before it\n  // has been verified that the argument types match up.\n  template<typename Functor>\n    BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n    operator==(Functor g) const\n    {\n      if (const Functor* fp = target<Functor>())\n        return function_equal(*fp, g);\n      else return false;\n    }\n\n  template<typename Functor>\n    BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n    operator!=(Functor g) const\n    {\n      if (const Functor* fp = target<Functor>())\n        return !function_equal(*fp, g);\n      else return true;\n    }\n#endif\n\npublic: // should be protected, but GCC 2.95.3 will fail to allow access\n  detail::function::vtable_base* get_vtable() const {\n    return reinterpret_cast<detail::function::vtable_base*>(\n             reinterpret_cast<std::size_t>(vtable) & ~static_cast<std::size_t>(0x01));\n  }\n\n  bool has_trivial_copy_and_destroy() const {\n    return reinterpret_cast<std::size_t>(vtable) & 0x01;\n  }\n\n  detail::function::vtable_base* vtable;\n  mutable detail::function::function_buffer functor;\n};\n\n/**\n * The bad_function_call exception class is thrown when a boost::function\n * object is invoked\n */\nclass bad_function_call : public std::runtime_error\n{\npublic:\n  bad_function_call() : std::runtime_error(\"call to empty boost::function\") {}\n};\n\n#ifndef BOOST_NO_SFINAE\ninline bool operator==(const function_base& f,\n                       detail::function::useless_clear_type*)\n{\n  return f.empty();\n}\n\ninline bool operator!=(const function_base& f,\n                       detail::function::useless_clear_type*)\n{\n  return !f.empty();\n}\n\ninline bool operator==(detail::function::useless_clear_type*,\n                       const function_base& f)\n{\n  return f.empty();\n}\n\ninline bool operator!=(detail::function::useless_clear_type*,\n                       const function_base& f)\n{\n  return !f.empty();\n}\n#endif\n\n#ifdef BOOST_NO_SFINAE\n// Comparisons between boost::function objects and arbitrary function objects\ntemplate<typename Functor>\n  inline bool operator==(const function_base& f, Functor g)\n  {\n    typedef mpl::bool_<(is_integral<Functor>::value)> integral;\n    return detail::function::compare_equal(f, g, 0, integral());\n  }\n\ntemplate<typename Functor>\n  inline bool operator==(Functor g, const function_base& f)\n  {\n    typedef mpl::bool_<(is_integral<Functor>::value)> integral;\n    return detail::function::compare_equal(f, g, 0, integral());\n  }\n\ntemplate<typename Functor>\n  inline bool operator!=(const function_base& f, Functor g)\n  {\n    typedef mpl::bool_<(is_integral<Functor>::value)> integral;\n    return detail::function::compare_not_equal(f, g, 0, integral());\n  }\n\ntemplate<typename Functor>\n  inline bool operator!=(Functor g, const function_base& f)\n  {\n    typedef mpl::bool_<(is_integral<Functor>::value)> integral;\n    return detail::function::compare_not_equal(f, g, 0, integral());\n  }\n#else\n\n#  if !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)\n// Comparisons between boost::function objects and arbitrary function\n// objects. GCC 3.3 and before has an obnoxious bug that prevents this\n// from working.\ntemplate<typename Functor>\n  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n  operator==(const function_base& f, Functor g)\n  {\n    if (const Functor* fp = f.template target<Functor>())\n      return function_equal(*fp, g);\n    else return false;\n  }\n\ntemplate<typename Functor>\n  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n  operator==(Functor g, const function_base& f)\n  {\n    if (const Functor* fp = f.template target<Functor>())\n      return function_equal(g, *fp);\n    else return false;\n  }\n\ntemplate<typename Functor>\n  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n  operator!=(const function_base& f, Functor g)\n  {\n    if (const Functor* fp = f.template target<Functor>())\n      return !function_equal(*fp, g);\n    else return true;\n  }\n\ntemplate<typename Functor>\n  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n  operator!=(Functor g, const function_base& f)\n  {\n    if (const Functor* fp = f.template target<Functor>())\n      return !function_equal(g, *fp);\n    else return true;\n  }\n#  endif\n\ntemplate<typename Functor>\n  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n  operator==(const function_base& f, reference_wrapper<Functor> g)\n  {\n    if (const Functor* fp = f.template target<Functor>())\n      return fp == g.get_pointer();\n    else return false;\n  }\n\ntemplate<typename Functor>\n  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n  operator==(reference_wrapper<Functor> g, const function_base& f)\n  {\n    if (const Functor* fp = f.template target<Functor>())\n      return g.get_pointer() == fp;\n    else return false;\n  }\n\ntemplate<typename Functor>\n  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n  operator!=(const function_base& f, reference_wrapper<Functor> g)\n  {\n    if (const Functor* fp = f.template target<Functor>())\n      return fp != g.get_pointer();\n    else return true;\n  }\n\ntemplate<typename Functor>\n  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)\n  operator!=(reference_wrapper<Functor> g, const function_base& f)\n  {\n    if (const Functor* fp = f.template target<Functor>())\n      return g.get_pointer() != fp;\n    else return true;\n  }\n\n#endif // Compiler supporting SFINAE\n\nnamespace detail {\n  namespace function {\n    inline bool has_empty_target(const function_base* f)\n    {\n      return f->empty();\n    }\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)\n    inline bool has_empty_target(const void*)\n    {\n      return false;\n    }\n#else\n    inline bool has_empty_target(...)\n    {\n      return false;\n    }\n#endif\n  } // end namespace function\n} // end namespace detail\n} // end namespace boost\n\n#undef BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL\n#undef BOOST_FUNCTION_COMPARE_TYPE_ID\n\n#if defined(BOOST_MSVC)\n#   pragma warning( pop )\n#endif       \n\n#endif // BOOST_FUNCTION_BASE_HEADER\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function_fwd.hpp",
    "content": "// Boost.Function library\n//  Copyright (C) Douglas Gregor 2008\n//\n//  Use, modification and distribution is subject to the Boost\n//  Software License, Version 1.0.  (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org\n#ifndef BOOST_FUNCTION_FWD_HPP\n#define BOOST_FUNCTION_FWD_HPP\n#include <boost/config.hpp>\n\n#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG)\n// Work around a compiler bug.\n// boost::python::objects::function has to be seen by the compiler before the\n// boost::function class template.\nnamespace boost { namespace python { namespace objects {\n  class function;\n}}}\n#endif\n\n#if defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)                         \\\n || !(defined(BOOST_STRICT_CONFIG) || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540)\n#  define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX\n#endif\n\nnamespace boost {\n  class bad_function_call;\n\n#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)\n  // Preferred syntax\n  template<typename Signature> class function;\n\n  template<typename Signature>\n  inline void swap(function<Signature>& f1, function<Signature>& f2)\n  {\n    f1.swap(f2);\n  }\n#endif // have partial specialization\n\n  // Portable syntax\n  template<typename R> class function0;\n  template<typename R, typename T1> class function1;\n  template<typename R, typename T1, typename T2> class function2;\n  template<typename R, typename T1, typename T2, typename T3> class function3;\n  template<typename R, typename T1, typename T2, typename T3, typename T4> \n    class function4;\n  template<typename R, typename T1, typename T2, typename T3, typename T4,\n           typename T5> \n    class function5;\n  template<typename R, typename T1, typename T2, typename T3, typename T4,\n           typename T5, typename T6> \n    class function6;\n  template<typename R, typename T1, typename T2, typename T3, typename T4,\n           typename T5, typename T6, typename T7> \n    class function7;\n  template<typename R, typename T1, typename T2, typename T3, typename T4,\n           typename T5, typename T6, typename T7, typename T8> \n    class function8;\n  template<typename R, typename T1, typename T2, typename T3, typename T4,\n           typename T5, typename T6, typename T7, typename T8, typename T9> \n    class function9;\n  template<typename R, typename T1, typename T2, typename T3, typename T4,\n           typename T5, typename T6, typename T7, typename T8, typename T9,\n           typename T10> \n    class function10;\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function_template.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2001-2006\n//  Copyright Emil Dotchevski 2007\n//  Use, modification and distribution is subject to the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n// Note: this header is a header template and must NOT have multiple-inclusion\n// protection.\n#include <boost/function/detail/prologue.hpp>\n#include <boost/detail/no_exceptions_support.hpp>\n\n#if defined(BOOST_MSVC)\n#   pragma warning( push )\n#   pragma warning( disable : 4127 ) // \"conditional expression is constant\"\n#endif       \n\n#define BOOST_FUNCTION_TEMPLATE_PARMS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, typename T)\n\n#define BOOST_FUNCTION_TEMPLATE_ARGS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, T)\n\n#define BOOST_FUNCTION_PARM(J,I,D) BOOST_PP_CAT(T,I) BOOST_PP_CAT(a,I)\n\n#define BOOST_FUNCTION_PARMS BOOST_PP_ENUM(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_PARM,BOOST_PP_EMPTY)\n\n#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES\n#   define BOOST_FUNCTION_ARGS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, a)\n#else\n#   include <boost/move/utility_core.hpp>\n#   define BOOST_FUNCTION_ARG(J,I,D) ::boost::forward< BOOST_PP_CAT(T,I) >(BOOST_PP_CAT(a,I))\n#   define BOOST_FUNCTION_ARGS BOOST_PP_ENUM(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_ARG,BOOST_PP_EMPTY)\n#endif\n\n#define BOOST_FUNCTION_ARG_TYPE(J,I,D) \\\n  typedef BOOST_PP_CAT(T,I) BOOST_PP_CAT(BOOST_PP_CAT(arg, BOOST_PP_INC(I)),_type);\n\n#define BOOST_FUNCTION_ARG_TYPES BOOST_PP_REPEAT(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_ARG_TYPE,BOOST_PP_EMPTY)\n\n// Comma if nonzero number of arguments\n#if BOOST_FUNCTION_NUM_ARGS == 0\n#  define BOOST_FUNCTION_COMMA\n#else\n#  define BOOST_FUNCTION_COMMA ,\n#endif // BOOST_FUNCTION_NUM_ARGS > 0\n\n// Class names used in this version of the code\n#define BOOST_FUNCTION_FUNCTION BOOST_JOIN(function,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_FUNCTION_INVOKER \\\n  BOOST_JOIN(function_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER \\\n  BOOST_JOIN(void_function_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER \\\n  BOOST_JOIN(function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER \\\n  BOOST_JOIN(void_function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_FUNCTION_REF_INVOKER \\\n  BOOST_JOIN(function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER \\\n  BOOST_JOIN(void_function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_MEMBER_INVOKER \\\n  BOOST_JOIN(function_mem_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_VOID_MEMBER_INVOKER \\\n  BOOST_JOIN(function_void_mem_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_GET_FUNCTION_INVOKER \\\n  BOOST_JOIN(get_function_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER \\\n  BOOST_JOIN(get_function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER \\\n  BOOST_JOIN(get_function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_GET_MEMBER_INVOKER \\\n  BOOST_JOIN(get_member_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_GET_INVOKER \\\n  BOOST_JOIN(get_invoker,BOOST_FUNCTION_NUM_ARGS)\n#define BOOST_FUNCTION_VTABLE BOOST_JOIN(basic_vtable,BOOST_FUNCTION_NUM_ARGS)\n\n#ifndef BOOST_NO_VOID_RETURNS\n#  define BOOST_FUNCTION_VOID_RETURN_TYPE void\n#  define BOOST_FUNCTION_RETURN(X) X\n#else\n#  define BOOST_FUNCTION_VOID_RETURN_TYPE boost::detail::function::unusable\n#  define BOOST_FUNCTION_RETURN(X) X; return BOOST_FUNCTION_VOID_RETURN_TYPE ()\n#endif\n\nnamespace boost {\n  namespace detail {\n    namespace function {\n      template<\n        typename FunctionPtr,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n        >\n      struct BOOST_FUNCTION_FUNCTION_INVOKER\n      {\n        static R invoke(function_buffer& function_ptr BOOST_FUNCTION_COMMA\n                        BOOST_FUNCTION_PARMS)\n        {\n          FunctionPtr f = reinterpret_cast<FunctionPtr>(function_ptr.func_ptr);\n          return f(BOOST_FUNCTION_ARGS);\n        }\n      };\n\n      template<\n        typename FunctionPtr,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n        >\n      struct BOOST_FUNCTION_VOID_FUNCTION_INVOKER\n      {\n        static BOOST_FUNCTION_VOID_RETURN_TYPE\n        invoke(function_buffer& function_ptr BOOST_FUNCTION_COMMA\n               BOOST_FUNCTION_PARMS)\n\n        {\n          FunctionPtr f = reinterpret_cast<FunctionPtr>(function_ptr.func_ptr);\n          BOOST_FUNCTION_RETURN(f(BOOST_FUNCTION_ARGS));\n        }\n      };\n\n      template<\n        typename FunctionObj,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n      >\n      struct BOOST_FUNCTION_FUNCTION_OBJ_INVOKER\n      {\n        static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA\n                        BOOST_FUNCTION_PARMS)\n\n        {\n          FunctionObj* f;\n          if (function_allows_small_object_optimization<FunctionObj>::value)\n            f = reinterpret_cast<FunctionObj*>(&function_obj_ptr.data);\n          else\n            f = reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);\n          return (*f)(BOOST_FUNCTION_ARGS);\n        }\n      };\n\n      template<\n        typename FunctionObj,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n      >\n      struct BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER\n      {\n        static BOOST_FUNCTION_VOID_RETURN_TYPE\n        invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA\n               BOOST_FUNCTION_PARMS)\n\n        {\n          FunctionObj* f;\n          if (function_allows_small_object_optimization<FunctionObj>::value)\n            f = reinterpret_cast<FunctionObj*>(&function_obj_ptr.data);\n          else\n            f = reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);\n          BOOST_FUNCTION_RETURN((*f)(BOOST_FUNCTION_ARGS));\n        }\n      };\n\n      template<\n        typename FunctionObj,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n      >\n      struct BOOST_FUNCTION_FUNCTION_REF_INVOKER\n      {\n        static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA\n                        BOOST_FUNCTION_PARMS)\n\n        {\n          FunctionObj* f = \n            reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);\n          return (*f)(BOOST_FUNCTION_ARGS);\n        }\n      };\n\n      template<\n        typename FunctionObj,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n      >\n      struct BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER\n      {\n        static BOOST_FUNCTION_VOID_RETURN_TYPE\n        invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA\n               BOOST_FUNCTION_PARMS)\n\n        {\n          FunctionObj* f = \n            reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);\n          BOOST_FUNCTION_RETURN((*f)(BOOST_FUNCTION_ARGS));\n        }\n      };\n\n#if BOOST_FUNCTION_NUM_ARGS > 0\n      /* Handle invocation of member pointers. */\n      template<\n        typename MemberPtr,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n      >\n      struct BOOST_FUNCTION_MEMBER_INVOKER\n      {\n        static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA\n                        BOOST_FUNCTION_PARMS)\n\n        {\n          MemberPtr* f = \n            reinterpret_cast<MemberPtr*>(&function_obj_ptr.data);\n          return boost::mem_fn(*f)(BOOST_FUNCTION_ARGS);\n        }\n      };\n\n      template<\n        typename MemberPtr,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n      >\n      struct BOOST_FUNCTION_VOID_MEMBER_INVOKER\n      {\n        static BOOST_FUNCTION_VOID_RETURN_TYPE\n        invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA\n               BOOST_FUNCTION_PARMS)\n\n        {\n          MemberPtr* f = \n            reinterpret_cast<MemberPtr*>(&function_obj_ptr.data);\n          BOOST_FUNCTION_RETURN(boost::mem_fn(*f)(BOOST_FUNCTION_ARGS));\n        }\n      };\n#endif\n\n      template<\n        typename FunctionPtr,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n      >\n      struct BOOST_FUNCTION_GET_FUNCTION_INVOKER\n      {\n        typedef typename mpl::if_c<(is_void<R>::value),\n                            BOOST_FUNCTION_VOID_FUNCTION_INVOKER<\n                            FunctionPtr,\n                            R BOOST_FUNCTION_COMMA\n                            BOOST_FUNCTION_TEMPLATE_ARGS\n                          >,\n                          BOOST_FUNCTION_FUNCTION_INVOKER<\n                            FunctionPtr,\n                            R BOOST_FUNCTION_COMMA\n                            BOOST_FUNCTION_TEMPLATE_ARGS\n                          >\n                       >::type type;\n      };\n\n      template<\n        typename FunctionObj,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n       >\n      struct BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER\n      {\n        typedef typename mpl::if_c<(is_void<R>::value),\n                            BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER<\n                            FunctionObj,\n                            R BOOST_FUNCTION_COMMA\n                            BOOST_FUNCTION_TEMPLATE_ARGS\n                          >,\n                          BOOST_FUNCTION_FUNCTION_OBJ_INVOKER<\n                            FunctionObj,\n                            R BOOST_FUNCTION_COMMA\n                            BOOST_FUNCTION_TEMPLATE_ARGS\n                          >\n                       >::type type;\n      };\n\n      template<\n        typename FunctionObj,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n       >\n      struct BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER\n      {\n        typedef typename mpl::if_c<(is_void<R>::value),\n                            BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER<\n                            FunctionObj,\n                            R BOOST_FUNCTION_COMMA\n                            BOOST_FUNCTION_TEMPLATE_ARGS\n                          >,\n                          BOOST_FUNCTION_FUNCTION_REF_INVOKER<\n                            FunctionObj,\n                            R BOOST_FUNCTION_COMMA\n                            BOOST_FUNCTION_TEMPLATE_ARGS\n                          >\n                       >::type type;\n      };\n\n#if BOOST_FUNCTION_NUM_ARGS > 0\n      /* Retrieve the appropriate invoker for a member pointer.  */\n      template<\n        typename MemberPtr,\n        typename R BOOST_FUNCTION_COMMA\n        BOOST_FUNCTION_TEMPLATE_PARMS\n       >\n      struct BOOST_FUNCTION_GET_MEMBER_INVOKER\n      {\n        typedef typename mpl::if_c<(is_void<R>::value),\n                            BOOST_FUNCTION_VOID_MEMBER_INVOKER<\n                            MemberPtr,\n                            R BOOST_FUNCTION_COMMA\n                            BOOST_FUNCTION_TEMPLATE_ARGS\n                          >,\n                          BOOST_FUNCTION_MEMBER_INVOKER<\n                            MemberPtr,\n                            R BOOST_FUNCTION_COMMA\n                            BOOST_FUNCTION_TEMPLATE_ARGS\n                          >\n                       >::type type;\n      };\n#endif\n\n      /* Given the tag returned by get_function_tag, retrieve the\n         actual invoker that will be used for the given function\n         object. \n\n         Each specialization contains an \"apply\" nested class template\n         that accepts the function object, return type, function\n         argument types, and allocator. The resulting \"apply\" class\n         contains two typedefs, \"invoker_type\" and \"manager_type\",\n         which correspond to the invoker and manager types. */\n      template<typename Tag>\n      struct BOOST_FUNCTION_GET_INVOKER { };\n\n      /* Retrieve the invoker for a function pointer. */\n      template<>\n      struct BOOST_FUNCTION_GET_INVOKER<function_ptr_tag>\n      {\n        template<typename FunctionPtr,\n                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>\n        struct apply\n        {\n          typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<\n                             FunctionPtr,\n                             R BOOST_FUNCTION_COMMA\n                             BOOST_FUNCTION_TEMPLATE_ARGS\n                           >::type\n            invoker_type;\n\n          typedef functor_manager<FunctionPtr> manager_type;\n        };\n\n        template<typename FunctionPtr,\n                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,\n                 typename Allocator>\n        struct apply_a\n        {\n          typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<\n                             FunctionPtr,\n                             R BOOST_FUNCTION_COMMA\n                             BOOST_FUNCTION_TEMPLATE_ARGS\n                           >::type\n            invoker_type;\n\n          typedef functor_manager<FunctionPtr> manager_type;\n        };\n      };\n\n#if BOOST_FUNCTION_NUM_ARGS > 0\n      /* Retrieve the invoker for a member pointer. */\n      template<>\n      struct BOOST_FUNCTION_GET_INVOKER<member_ptr_tag>\n      {\n        template<typename MemberPtr,\n                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>\n        struct apply\n        {\n          typedef typename BOOST_FUNCTION_GET_MEMBER_INVOKER<\n                             MemberPtr,\n                             R BOOST_FUNCTION_COMMA\n                             BOOST_FUNCTION_TEMPLATE_ARGS\n                           >::type\n            invoker_type;\n\n          typedef functor_manager<MemberPtr> manager_type;\n        };\n\n        template<typename MemberPtr,\n                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,\n                 typename Allocator>\n        struct apply_a\n        {\n          typedef typename BOOST_FUNCTION_GET_MEMBER_INVOKER<\n                             MemberPtr,\n                             R BOOST_FUNCTION_COMMA\n                             BOOST_FUNCTION_TEMPLATE_ARGS\n                           >::type\n            invoker_type;\n\n          typedef functor_manager<MemberPtr> manager_type;\n        };\n      };\n#endif\n\n      /* Retrieve the invoker for a function object. */\n      template<>\n      struct BOOST_FUNCTION_GET_INVOKER<function_obj_tag>\n      {\n        template<typename FunctionObj,\n                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>\n        struct apply\n        {\n          typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<\n                             FunctionObj,\n                             R BOOST_FUNCTION_COMMA\n                             BOOST_FUNCTION_TEMPLATE_ARGS\n                           >::type\n            invoker_type;\n\n          typedef functor_manager<FunctionObj> manager_type;\n        };\n\n        template<typename FunctionObj,\n                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,\n                 typename Allocator>\n        struct apply_a\n        {\n          typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<\n                             FunctionObj,\n                             R BOOST_FUNCTION_COMMA\n                             BOOST_FUNCTION_TEMPLATE_ARGS\n                           >::type\n            invoker_type;\n\n          typedef functor_manager_a<FunctionObj, Allocator> manager_type;\n        };\n      };\n\n      /* Retrieve the invoker for a reference to a function object. */\n      template<>\n      struct BOOST_FUNCTION_GET_INVOKER<function_obj_ref_tag>\n      {\n        template<typename RefWrapper,\n                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>\n        struct apply\n        {\n          typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER<\n                             typename RefWrapper::type,\n                             R BOOST_FUNCTION_COMMA\n                             BOOST_FUNCTION_TEMPLATE_ARGS\n                           >::type\n            invoker_type;\n\n          typedef reference_manager<typename RefWrapper::type> manager_type;\n        };\n\n        template<typename RefWrapper,\n                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,\n                 typename Allocator>\n        struct apply_a\n        {\n          typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER<\n                             typename RefWrapper::type,\n                             R BOOST_FUNCTION_COMMA\n                             BOOST_FUNCTION_TEMPLATE_ARGS\n                           >::type\n            invoker_type;\n\n          typedef reference_manager<typename RefWrapper::type> manager_type;\n        };\n      };\n\n\n      /**\n       * vtable for a specific boost::function instance. This\n       * structure must be an aggregate so that we can use static\n       * initialization in boost::function's assign_to and assign_to_a\n       * members. It therefore cannot have any constructors,\n       * destructors, base classes, etc.\n       */\n      template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>\n      struct BOOST_FUNCTION_VTABLE\n      {\n#ifndef BOOST_NO_VOID_RETURNS\n        typedef R         result_type;\n#else\n        typedef typename function_return_type<R>::type result_type;\n#endif // BOOST_NO_VOID_RETURNS\n\n        typedef result_type (*invoker_type)(function_buffer&\n                                            BOOST_FUNCTION_COMMA\n                                            BOOST_FUNCTION_TEMPLATE_ARGS);\n\n        template<typename F>\n        bool assign_to(F f, function_buffer& functor) const\n        {\n          typedef typename get_function_tag<F>::type tag;\n          return assign_to(f, functor, tag());\n        }\n        template<typename F,typename Allocator>\n        bool assign_to_a(F f, function_buffer& functor, Allocator a) const\n        {\n          typedef typename get_function_tag<F>::type tag;\n          return assign_to_a(f, functor, a, tag());\n        }\n\n        void clear(function_buffer& functor) const\n        {\n          if (base.manager)\n            base.manager(functor, functor, destroy_functor_tag);\n        }\n\n      private:\n        // Function pointers\n        template<typename FunctionPtr>\n        bool \n        assign_to(FunctionPtr f, function_buffer& functor, function_ptr_tag) const\n        {\n          this->clear(functor);\n          if (f) {\n            // should be a reinterpret cast, but some compilers insist\n            // on giving cv-qualifiers to free functions\n            functor.func_ptr = reinterpret_cast<void (*)()>(f);\n            return true;\n          } else {\n            return false;\n          }\n        }\n        template<typename FunctionPtr,typename Allocator>\n        bool \n        assign_to_a(FunctionPtr f, function_buffer& functor, Allocator, function_ptr_tag) const\n        {\n          return assign_to(f,functor,function_ptr_tag());\n        }\n\n        // Member pointers\n#if BOOST_FUNCTION_NUM_ARGS > 0\n        template<typename MemberPtr>\n        bool assign_to(MemberPtr f, function_buffer& functor, member_ptr_tag) const\n        {\n          // DPG TBD: Add explicit support for member function\n          // objects, so we invoke through mem_fn() but we retain the\n          // right target_type() values.\n          if (f) {\n            this->assign_to(boost::mem_fn(f), functor);\n            return true;\n          } else {\n            return false;\n          }\n        }\n        template<typename MemberPtr,typename Allocator>\n        bool assign_to_a(MemberPtr f, function_buffer& functor, Allocator a, member_ptr_tag) const\n        {\n          // DPG TBD: Add explicit support for member function\n          // objects, so we invoke through mem_fn() but we retain the\n          // right target_type() values.\n          if (f) {\n            this->assign_to_a(boost::mem_fn(f), functor, a);\n            return true;\n          } else {\n            return false;\n          }\n        }\n#endif // BOOST_FUNCTION_NUM_ARGS > 0\n\n        // Function objects\n        // Assign to a function object using the small object optimization\n        template<typename FunctionObj>\n        void \n        assign_functor(FunctionObj f, function_buffer& functor, mpl::true_) const\n        {\n          new (reinterpret_cast<void*>(&functor.data)) FunctionObj(f);\n        }\n        template<typename FunctionObj,typename Allocator>\n        void \n        assign_functor_a(FunctionObj f, function_buffer& functor, Allocator, mpl::true_) const\n        {\n          assign_functor(f,functor,mpl::true_());\n        }\n\n        // Assign to a function object allocated on the heap.\n        template<typename FunctionObj>\n        void \n        assign_functor(FunctionObj f, function_buffer& functor, mpl::false_) const\n        {\n          functor.obj_ptr = new FunctionObj(f);\n        }\n        template<typename FunctionObj,typename Allocator>\n        void \n        assign_functor_a(FunctionObj f, function_buffer& functor, Allocator a, mpl::false_) const\n        {\n          typedef functor_wrapper<FunctionObj,Allocator> functor_wrapper_type;\n          typedef typename Allocator::template rebind<functor_wrapper_type>::other\n            wrapper_allocator_type;\n          typedef typename wrapper_allocator_type::pointer wrapper_allocator_pointer_type;\n          wrapper_allocator_type wrapper_allocator(a);\n          wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1);\n          wrapper_allocator.construct(copy, functor_wrapper_type(f,a));\n          functor_wrapper_type* new_f = static_cast<functor_wrapper_type*>(copy);\n          functor.obj_ptr = new_f;\n        }\n\n        template<typename FunctionObj>\n        bool \n        assign_to(FunctionObj f, function_buffer& functor, function_obj_tag) const\n        {\n          if (!boost::detail::function::has_empty_target(boost::addressof(f))) {\n            assign_functor(f, functor, \n                           mpl::bool_<(function_allows_small_object_optimization<FunctionObj>::value)>());\n            return true;\n          } else {\n            return false;\n          }\n        }\n        template<typename FunctionObj,typename Allocator>\n        bool \n        assign_to_a(FunctionObj f, function_buffer& functor, Allocator a, function_obj_tag) const\n        {\n          if (!boost::detail::function::has_empty_target(boost::addressof(f))) {\n            assign_functor_a(f, functor, a,\n                           mpl::bool_<(function_allows_small_object_optimization<FunctionObj>::value)>());\n            return true;\n          } else {\n            return false;\n          }\n        }\n\n        // Reference to a function object\n        template<typename FunctionObj>\n        bool \n        assign_to(const reference_wrapper<FunctionObj>& f, \n                  function_buffer& functor, function_obj_ref_tag) const\n        {\n          functor.obj_ref.obj_ptr = (void *)(f.get_pointer());\n          functor.obj_ref.is_const_qualified = is_const<FunctionObj>::value;\n          functor.obj_ref.is_volatile_qualified = is_volatile<FunctionObj>::value;\n          return true;\n        }\n        template<typename FunctionObj,typename Allocator>\n        bool \n        assign_to_a(const reference_wrapper<FunctionObj>& f, \n                  function_buffer& functor, Allocator, function_obj_ref_tag) const\n        {\n          return assign_to(f,functor,function_obj_ref_tag());\n        }\n\n      public:\n        vtable_base base;\n        invoker_type invoker;\n      };\n    } // end namespace function\n  } // end namespace detail\n\n  template<\n    typename R BOOST_FUNCTION_COMMA\n    BOOST_FUNCTION_TEMPLATE_PARMS\n  >\n  class BOOST_FUNCTION_FUNCTION : public function_base\n\n#if BOOST_FUNCTION_NUM_ARGS == 1\n\n    , public std::unary_function<T0,R>\n\n#elif BOOST_FUNCTION_NUM_ARGS == 2\n\n    , public std::binary_function<T0,T1,R>\n\n#endif\n\n  {\n  public:\n#ifndef BOOST_NO_VOID_RETURNS\n    typedef R         result_type;\n#else\n    typedef  typename boost::detail::function::function_return_type<R>::type\n      result_type;\n#endif // BOOST_NO_VOID_RETURNS\n\n  private:\n    typedef boost::detail::function::BOOST_FUNCTION_VTABLE<\n              R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS>\n      vtable_type;\n\n    vtable_type* get_vtable() const {\n      return reinterpret_cast<vtable_type*>(\n               reinterpret_cast<std::size_t>(vtable) & ~static_cast<std::size_t>(0x01));\n    }\n\n    struct clear_type {};\n\n  public:\n    BOOST_STATIC_CONSTANT(int, args = BOOST_FUNCTION_NUM_ARGS);\n\n    // add signature for boost::lambda\n    template<typename Args>\n    struct sig\n    {\n      typedef result_type type;\n    };\n\n#if BOOST_FUNCTION_NUM_ARGS == 1\n    typedef T0 argument_type;\n#elif BOOST_FUNCTION_NUM_ARGS == 2\n    typedef T0 first_argument_type;\n    typedef T1 second_argument_type;\n#endif\n\n    BOOST_STATIC_CONSTANT(int, arity = BOOST_FUNCTION_NUM_ARGS);\n    BOOST_FUNCTION_ARG_TYPES\n\n    typedef BOOST_FUNCTION_FUNCTION self_type;\n\n    BOOST_FUNCTION_FUNCTION() : function_base() { }\n\n    // MSVC chokes if the following two constructors are collapsed into\n    // one with a default parameter.\n    template<typename Functor>\n    BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f\n#ifndef BOOST_NO_SFINAE\n                            ,typename boost::enable_if_c<\n                             !(is_integral<Functor>::value),\n                                        int>::type = 0\n#endif // BOOST_NO_SFINAE\n                            ) :\n      function_base()\n    {\n      this->assign_to(f);\n    }\n    template<typename Functor,typename Allocator>\n    BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a\n#ifndef BOOST_NO_SFINAE\n                            ,typename boost::enable_if_c<\n                              !(is_integral<Functor>::value),\n                                        int>::type = 0\n#endif // BOOST_NO_SFINAE\n                            ) :\n      function_base()\n    {\n      this->assign_to_a(f,a);\n    }\n\n#ifndef BOOST_NO_SFINAE\n    BOOST_FUNCTION_FUNCTION(clear_type*) : function_base() { }\n#else\n    BOOST_FUNCTION_FUNCTION(int zero) : function_base()\n    {\n      BOOST_ASSERT(zero == 0);\n    }\n#endif\n\n    BOOST_FUNCTION_FUNCTION(const BOOST_FUNCTION_FUNCTION& f) : function_base()\n    {\n      this->assign_to_own(f);\n    }\n    \n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n    BOOST_FUNCTION_FUNCTION(BOOST_FUNCTION_FUNCTION&& f) : function_base()\n    {\n      this->move_assign(f);\n    }\n#endif\n    \n    ~BOOST_FUNCTION_FUNCTION() { clear(); }\n\n    result_type operator()(BOOST_FUNCTION_PARMS) const\n    {\n      if (this->empty())\n        boost::throw_exception(bad_function_call());\n\n      return get_vtable()->invoker\n               (this->functor BOOST_FUNCTION_COMMA BOOST_FUNCTION_ARGS);\n    }\n\n    // The distinction between when to use BOOST_FUNCTION_FUNCTION and\n    // when to use self_type is obnoxious. MSVC cannot handle self_type as\n    // the return type of these assignment operators, but Borland C++ cannot\n    // handle BOOST_FUNCTION_FUNCTION as the type of the temporary to\n    // construct.\n    template<typename Functor>\n#ifndef BOOST_NO_SFINAE\n    typename boost::enable_if_c<\n                  !(is_integral<Functor>::value),\n               BOOST_FUNCTION_FUNCTION&>::type\n#else\n    BOOST_FUNCTION_FUNCTION&\n#endif\n    operator=(Functor BOOST_FUNCTION_TARGET_FIX(const &) f)\n    {\n      this->clear();\n      BOOST_TRY  {\n        this->assign_to(f);\n      } BOOST_CATCH (...) {\n        vtable = 0;\n        BOOST_RETHROW;\n      }\n      BOOST_CATCH_END\n      return *this;\n    }\n    template<typename Functor,typename Allocator>\n    void assign(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a)\n    {\n      this->clear();\n      BOOST_TRY{\n        this->assign_to_a(f,a);\n      } BOOST_CATCH (...) {\n        vtable = 0;\n        BOOST_RETHROW;\n      }\n      BOOST_CATCH_END\n    }\n\n#ifndef BOOST_NO_SFINAE\n    BOOST_FUNCTION_FUNCTION& operator=(clear_type*)\n    {\n      this->clear();\n      return *this;\n    }\n#else\n    BOOST_FUNCTION_FUNCTION& operator=(int zero)\n    {\n      BOOST_ASSERT(zero == 0);\n      this->clear();\n      return *this;\n    }\n#endif\n\n    // Assignment from another BOOST_FUNCTION_FUNCTION\n    BOOST_FUNCTION_FUNCTION& operator=(const BOOST_FUNCTION_FUNCTION& f)\n    {\n      if (&f == this)\n        return *this;\n\n      this->clear();\n      BOOST_TRY {\n        this->assign_to_own(f);\n      } BOOST_CATCH (...) {\n        vtable = 0;\n        BOOST_RETHROW;\n      }\n      BOOST_CATCH_END\n      return *this;\n    }\n    \n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n    // Move assignment from another BOOST_FUNCTION_FUNCTION\n    BOOST_FUNCTION_FUNCTION& operator=(BOOST_FUNCTION_FUNCTION&& f)\n    {\n      \n      if (&f == this)\n        return *this;\n\n      this->clear();\n      BOOST_TRY {\n        this->move_assign(f);\n      } BOOST_CATCH (...) {\n        vtable = 0;\n        BOOST_RETHROW;\n      }\n      BOOST_CATCH_END\n      return *this;\n    }\n#endif\n\n    void swap(BOOST_FUNCTION_FUNCTION& other)\n    {\n      if (&other == this)\n        return;\n\n      BOOST_FUNCTION_FUNCTION tmp;\n      tmp.move_assign(*this);\n      this->move_assign(other);\n      other.move_assign(tmp);\n    }\n\n    // Clear out a target, if there is one\n    void clear()\n    {\n      if (vtable) {\n        if (!this->has_trivial_copy_and_destroy())\n          get_vtable()->clear(this->functor);\n        vtable = 0;\n      }\n    }\n\n#if (defined __SUNPRO_CC) && (__SUNPRO_CC <= 0x530) && !(defined BOOST_NO_COMPILER_CONFIG)\n    // Sun C++ 5.3 can't handle the safe_bool idiom, so don't use it\n    operator bool () const { return !this->empty(); }\n#else\n  private:\n    struct dummy {\n      void nonnull() {}\n    };\n\n    typedef void (dummy::*safe_bool)();\n\n  public:\n    operator safe_bool () const\n      { return (this->empty())? 0 : &dummy::nonnull; }\n\n    bool operator!() const\n      { return this->empty(); }\n#endif\n\n  private:\n    void assign_to_own(const BOOST_FUNCTION_FUNCTION& f)\n    {\n      if (!f.empty()) {\n        this->vtable = f.vtable;\n        if (this->has_trivial_copy_and_destroy())\n          this->functor = f.functor;\n        else\n          get_vtable()->base.manager(f.functor, this->functor,\n                                     boost::detail::function::clone_functor_tag);\n      }\n    }\n\n    template<typename Functor>\n    void assign_to(Functor f)\n    {\n      using boost::detail::function::vtable_base;\n\n      typedef typename boost::detail::function::get_function_tag<Functor>::type tag;\n      typedef boost::detail::function::BOOST_FUNCTION_GET_INVOKER<tag> get_invoker;\n      typedef typename get_invoker::\n                         template apply<Functor, R BOOST_FUNCTION_COMMA \n                        BOOST_FUNCTION_TEMPLATE_ARGS>\n        handler_type;\n      \n      typedef typename handler_type::invoker_type invoker_type;\n      typedef typename handler_type::manager_type manager_type;\n\n      // Note: it is extremely important that this initialization use\n      // static initialization. Otherwise, we will have a race\n      // condition here in multi-threaded code. See\n      // http://thread.gmane.org/gmane.comp.lib.boost.devel/164902/.\n      static const vtable_type stored_vtable = \n        { { &manager_type::manage }, &invoker_type::invoke };\n\n      if (stored_vtable.assign_to(f, functor)) {\n        std::size_t value = reinterpret_cast<std::size_t>(&stored_vtable.base);\n        // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).\n        if (boost::has_trivial_copy_constructor<Functor>::value &&\n            boost::has_trivial_destructor<Functor>::value &&\n            boost::detail::function::function_allows_small_object_optimization<Functor>::value)\n          value |= static_cast<std::size_t>(0x01);\n        vtable = reinterpret_cast<boost::detail::function::vtable_base *>(value);\n      } else \n        vtable = 0;\n    }\n\n    template<typename Functor,typename Allocator>\n    void assign_to_a(Functor f,Allocator a)\n    {\n      using boost::detail::function::vtable_base;\n\n      typedef typename boost::detail::function::get_function_tag<Functor>::type tag;\n      typedef boost::detail::function::BOOST_FUNCTION_GET_INVOKER<tag> get_invoker;\n      typedef typename get_invoker::\n                         template apply_a<Functor, R BOOST_FUNCTION_COMMA \n                         BOOST_FUNCTION_TEMPLATE_ARGS,\n                         Allocator>\n        handler_type;\n      \n      typedef typename handler_type::invoker_type invoker_type;\n      typedef typename handler_type::manager_type manager_type;\n\n      // Note: it is extremely important that this initialization use\n      // static initialization. Otherwise, we will have a race\n      // condition here in multi-threaded code. See\n      // http://thread.gmane.org/gmane.comp.lib.boost.devel/164902/.\n      static const vtable_type stored_vtable =\n        { { &manager_type::manage }, &invoker_type::invoke };\n\n      if (stored_vtable.assign_to_a(f, functor, a)) { \n        std::size_t value = reinterpret_cast<std::size_t>(&stored_vtable.base);\n        // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).\n        if (boost::has_trivial_copy_constructor<Functor>::value &&\n            boost::has_trivial_destructor<Functor>::value &&\n            boost::detail::function::function_allows_small_object_optimization<Functor>::value)\n          value |= static_cast<std::size_t>(0x01);\n        vtable = reinterpret_cast<boost::detail::function::vtable_base *>(value);\n      } else \n        vtable = 0;\n    }\n\n    // Moves the value from the specified argument to *this. If the argument \n    // has its function object allocated on the heap, move_assign will pass \n    // its buffer to *this, and set the argument's buffer pointer to NULL. \n    void move_assign(BOOST_FUNCTION_FUNCTION& f) \n    { \n      if (&f == this)\n        return;\n\n      BOOST_TRY {\n        if (!f.empty()) {\n          this->vtable = f.vtable;\n          if (this->has_trivial_copy_and_destroy())\n            this->functor = f.functor;\n          else\n            get_vtable()->base.manager(f.functor, this->functor,\n                                     boost::detail::function::move_functor_tag);\n          f.vtable = 0;\n        } else {\n          clear();\n        }\n      } BOOST_CATCH (...) {\n        vtable = 0;\n        BOOST_RETHROW;\n      }\n      BOOST_CATCH_END\n    }\n  };\n\n  template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>\n  inline void swap(BOOST_FUNCTION_FUNCTION<\n                     R BOOST_FUNCTION_COMMA\n                     BOOST_FUNCTION_TEMPLATE_ARGS\n                   >& f1,\n                   BOOST_FUNCTION_FUNCTION<\n                     R BOOST_FUNCTION_COMMA\n                     BOOST_FUNCTION_TEMPLATE_ARGS\n                   >& f2)\n  {\n    f1.swap(f2);\n  }\n\n// Poison comparisons between boost::function objects of the same type.\ntemplate<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>\n  void operator==(const BOOST_FUNCTION_FUNCTION<\n                          R BOOST_FUNCTION_COMMA\n                          BOOST_FUNCTION_TEMPLATE_ARGS>&,\n                  const BOOST_FUNCTION_FUNCTION<\n                          R BOOST_FUNCTION_COMMA\n                          BOOST_FUNCTION_TEMPLATE_ARGS>&);\ntemplate<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>\n  void operator!=(const BOOST_FUNCTION_FUNCTION<\n                          R BOOST_FUNCTION_COMMA\n                          BOOST_FUNCTION_TEMPLATE_ARGS>&,\n                  const BOOST_FUNCTION_FUNCTION<\n                          R BOOST_FUNCTION_COMMA\n                          BOOST_FUNCTION_TEMPLATE_ARGS>& );\n\n#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)\n\n#if BOOST_FUNCTION_NUM_ARGS == 0\n#define BOOST_FUNCTION_PARTIAL_SPEC R (void)\n#else\n#define BOOST_FUNCTION_PARTIAL_SPEC R (BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS,T))\n#endif\n\ntemplate<typename R BOOST_FUNCTION_COMMA\n         BOOST_FUNCTION_TEMPLATE_PARMS>\nclass function<BOOST_FUNCTION_PARTIAL_SPEC>\n  : public BOOST_FUNCTION_FUNCTION<R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS>\n{\n  typedef BOOST_FUNCTION_FUNCTION<R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS> base_type;\n  typedef function self_type;\n\n  struct clear_type {};\n\npublic:\n\n  function() : base_type() {}\n\n  template<typename Functor>\n  function(Functor f\n#ifndef BOOST_NO_SFINAE\n           ,typename boost::enable_if_c<\n                          !(is_integral<Functor>::value),\n                       int>::type = 0\n#endif\n           ) :\n    base_type(f)\n  {\n  }\n  template<typename Functor,typename Allocator>\n  function(Functor f, Allocator a\n#ifndef BOOST_NO_SFINAE\n           ,typename boost::enable_if_c<\n                           !(is_integral<Functor>::value),\n                       int>::type = 0\n#endif\n           ) :\n    base_type(f,a)\n  {\n  }\n\n#ifndef BOOST_NO_SFINAE\n  function(clear_type*) : base_type() {}\n#endif\n\n  function(const self_type& f) : base_type(static_cast<const base_type&>(f)){}\n\n  function(const base_type& f) : base_type(static_cast<const base_type&>(f)){}\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n  // Move constructors\n  function(self_type&& f): base_type(static_cast<base_type&&>(f)){}\n  function(base_type&& f): base_type(static_cast<base_type&&>(f)){}\n#endif\n  \n  self_type& operator=(const self_type& f)\n  {\n    self_type(f).swap(*this);\n    return *this;\n  }\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n  self_type& operator=(self_type&& f)\n  {\n    self_type(static_cast<self_type&&>(f)).swap(*this);\n    return *this;\n  }\n#endif  \n\n  template<typename Functor>\n#ifndef BOOST_NO_SFINAE\n  typename boost::enable_if_c<\n                         !(is_integral<Functor>::value),\n                      self_type&>::type\n#else\n  self_type&\n#endif\n  operator=(Functor f)\n  {\n    self_type(f).swap(*this);\n    return *this;\n  }\n\n#ifndef BOOST_NO_SFINAE\n  self_type& operator=(clear_type*)\n  {\n    this->clear();\n    return *this;\n  }\n#endif\n\n  self_type& operator=(const base_type& f)\n  {\n    self_type(f).swap(*this);\n    return *this;\n  }\n  \n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n  self_type& operator=(base_type&& f)\n  {\n    self_type(static_cast<base_type&&>(f)).swap(*this);\n    return *this;\n  }\n#endif \n};\n\n#undef BOOST_FUNCTION_PARTIAL_SPEC\n#endif // have partial specialization\n\n} // end namespace boost\n\n// Cleanup after ourselves...\n#undef BOOST_FUNCTION_VTABLE\n#undef BOOST_FUNCTION_COMMA\n#undef BOOST_FUNCTION_FUNCTION\n#undef BOOST_FUNCTION_FUNCTION_INVOKER\n#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER\n#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER\n#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER\n#undef BOOST_FUNCTION_FUNCTION_REF_INVOKER\n#undef BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER\n#undef BOOST_FUNCTION_MEMBER_INVOKER\n#undef BOOST_FUNCTION_VOID_MEMBER_INVOKER\n#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER\n#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER\n#undef BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER\n#undef BOOST_FUNCTION_GET_MEM_FUNCTION_INVOKER\n#undef BOOST_FUNCTION_GET_INVOKER\n#undef BOOST_FUNCTION_TEMPLATE_PARMS\n#undef BOOST_FUNCTION_TEMPLATE_ARGS\n#undef BOOST_FUNCTION_PARMS\n#undef BOOST_FUNCTION_PARM\n#ifdef BOOST_FUNCTION_ARG\n#   undef BOOST_FUNCTION_ARG\n#endif\n#undef BOOST_FUNCTION_ARGS\n#undef BOOST_FUNCTION_ARG_TYPE\n#undef BOOST_FUNCTION_ARG_TYPES\n#undef BOOST_FUNCTION_VOID_RETURN_TYPE\n#undef BOOST_FUNCTION_RETURN\n\n#if defined(BOOST_MSVC)\n#   pragma warning( pop )\n#endif       \n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/function_typeof.hpp",
    "content": "// Boost.Function library - Typeof support\n//  Copyright (C) Douglas Gregor 2008\n//\n//  Use, modification and distribution is subject to the Boost\n//  Software License, Version 1.0.  (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org\n#ifndef BOOST_FUNCTION_TYPEOF_HPP\n#define BOOST_FUNCTION_TYPEOF_HPP\n#include <boost/function/function_fwd.hpp>\n#include <boost/typeof/typeof.hpp>\n\n#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()\n\nBOOST_TYPEOF_REGISTER_TYPE(boost::bad_function_call)\n\n#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function, (typename))\n#endif\n\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function0, (typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function1, (typename)(typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function2, (typename)(typename)(typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function3, \n  (typename)(typename)(typename)(typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function4, \n  (typename)(typename)(typename)(typename)(typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function5, \n  (typename)(typename)(typename)(typename)(typename)(typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function6, \n  (typename)(typename)(typename)(typename)(typename)(typename)(typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function7, \n  (typename)(typename)(typename)(typename)(typename)(typename)(typename)\n  (typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function8, \n  (typename)(typename)(typename)(typename)(typename)(typename)(typename)\n  (typename)(typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function9, \n  (typename)(typename)(typename)(typename)(typename)(typename)(typename)\n  (typename)(typename)(typename))\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::function10, \n  (typename)(typename)(typename)(typename)(typename)(typename)(typename)\n  (typename)(typename)(typename)(typename))\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function/gen_function_N.pl",
    "content": "#!/usr/bin/perl -w\n#\n# Boost.Function library\n#\n# Copyright Douglas Gregor 2001-2003. Use, modification and\n# distribution is subject to the Boost Software License, Version\n# 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n# http://www.boost.org/LICENSE_1_0.txt)\n#\n# For more information, see http://www.boost.org\nuse English;\n\nif ($#ARGV < 0) {\n  print \"Usage: perl gen_function_N <number of arguments>\\n\";\n  exit;\n}\n\n\n$totalNumArgs = $ARGV[0];\nfor ($numArgs = 0; $numArgs <= $totalNumArgs; ++$numArgs) {\n  open OUT, \">function$numArgs.hpp\";\n  print OUT \"#define BOOST_FUNCTION_NUM_ARGS $numArgs\\n\";\n  print OUT \"#include <boost/function/detail/maybe_include.hpp>\\n\";\n  print OUT \"#undef BOOST_FUNCTION_NUM_ARGS\\n\";\n  close OUT;\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function.hpp",
    "content": "// Boost.Function library\n\n//  Copyright Douglas Gregor 2001-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org/libs/function\n\n// William Kempf, Jesse Jones and Karl Nelson were all very helpful in the\n// design of this library.\n\n#include <functional> // unary_function, binary_function\n\n#include <boost/preprocessor/iterate.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifndef BOOST_FUNCTION_MAX_ARGS\n#  define BOOST_FUNCTION_MAX_ARGS 10\n#endif // BOOST_FUNCTION_MAX_ARGS\n\n// Include the prologue here so that the use of file-level iteration\n// in anything that may be included by function_template.hpp doesn't break\n#include <boost/function/detail/prologue.hpp>\n\n// Older Visual Age C++ version do not handle the file iteration well\n#if BOOST_WORKAROUND(__IBMCPP__, >= 500) && BOOST_WORKAROUND(__IBMCPP__, < 800)\n#  if BOOST_FUNCTION_MAX_ARGS >= 0\n#    include <boost/function/function0.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 1\n#    include <boost/function/function1.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 2\n#    include <boost/function/function2.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 3\n#    include <boost/function/function3.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 4\n#    include <boost/function/function4.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 5\n#    include <boost/function/function5.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 6\n#    include <boost/function/function6.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 7\n#    include <boost/function/function7.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 8\n#    include <boost/function/function8.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 9\n#    include <boost/function/function9.hpp>\n#  endif\n#  if BOOST_FUNCTION_MAX_ARGS >= 10\n#    include <boost/function/function10.hpp>\n#  endif\n#else\n// What is the '3' for?\n#  define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_FUNCTION_MAX_ARGS,<boost/function/detail/function_iterate.hpp>))\n#  include BOOST_PP_ITERATE()\n#  undef BOOST_PP_ITERATION_PARAMS_1\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/function_equal.hpp",
    "content": "//  Copyright Douglas Gregor 2004.\n//  Copyright 2005 Peter Dimov\n\n//  Use, modification and distribution is subject to\n//  the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n#ifndef BOOST_FUNCTION_EQUAL_HPP\n#define BOOST_FUNCTION_EQUAL_HPP\n\nnamespace boost {\n\ntemplate<typename F, typename G>\n  bool function_equal_impl(const F& f, const G& g, long)\n  { return f == g; }\n\n// function_equal_impl needs to be unqualified to pick\n// user overloads on two-phase compilers\n\ntemplate<typename F, typename G>\n  bool function_equal(const F& f, const G& g)\n  { return function_equal_impl(f, g, 0); }\n\n} // end namespace boost\n\n#endif // BOOST_FUNCTION_EQUAL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/factory.hpp",
    "content": "/*=============================================================================\n    Copyright (c) 2007 Tobias Schwinger\n  \n    Use modification and distribution are subject to the Boost Software \n    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n    http://www.boost.org/LICENSE_1_0.txt).\n==============================================================================*/\n\n#ifndef BOOST_FUNCTIONAL_FACTORY_HPP_INCLUDED\n#   ifndef BOOST_PP_IS_ITERATING\n\n#     include <boost/preprocessor/iteration/iterate.hpp>\n#     include <boost/preprocessor/repetition/enum_params.hpp>\n#     include <boost/preprocessor/repetition/enum_binary_params.hpp>\n\n#     include <new>\n#     include <boost/pointee.hpp>\n#     include <boost/get_pointer.hpp>\n#     include <boost/non_type.hpp>\n#     include <boost/type_traits/remove_cv.hpp>\n\n#     if defined(BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T)\n#       include <boost/none_t.hpp>\n#     endif\n\n#     ifndef BOOST_FUNCTIONAL_FACTORY_MAX_ARITY\n#       define BOOST_FUNCTIONAL_FACTORY_MAX_ARITY 10\n#     elif BOOST_FUNCTIONAL_FACTORY_MAX_ARITY < 3\n#       undef  BOOST_FUNCTIONAL_FACTORY_MAX_ARITY\n#       define BOOST_FUNCTIONAL_FACTORY_MAX_ARITY 3\n#     endif\n\nnamespace boost\n{\n    enum factory_alloc_propagation\n    {\n        factory_alloc_for_pointee_and_deleter,\n        factory_passes_alloc_to_smart_pointer\n    };\n\n#if defined(BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T)\n    template< typename Pointer, class Allocator = boost::none_t,\n        factory_alloc_propagation AP = factory_alloc_for_pointee_and_deleter >\n    class factory;\n#else\n    template< typename Pointer, class Allocator = void,\n        factory_alloc_propagation AP = factory_alloc_for_pointee_and_deleter >\n    class factory;\n#endif\n\n    //----- ---- --- -- - -  -   -\n\n    template< typename Pointer, factory_alloc_propagation AP >\n    class factory<Pointer, void, AP>\n    {\n      public:\n        typedef typename boost::remove_cv<Pointer>::type result_type;\n        typedef typename boost::pointee<result_type>::type value_type;\n\n        factory()\n        { }\n\n#     define BOOST_PP_FILENAME_1 <boost/functional/factory.hpp>\n#     define BOOST_PP_ITERATION_LIMITS (0,BOOST_FUNCTIONAL_FACTORY_MAX_ARITY)\n#     include BOOST_PP_ITERATE()\n    };\n\n#if defined(BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T)\n    template< typename Pointer, factory_alloc_propagation AP >\n    class factory<Pointer, boost::none_t, AP>\n        : public factory<Pointer, void, AP>\n    {};\n#endif\n\n    template< class Pointer, class Allocator, factory_alloc_propagation AP >\n    class factory\n        : private Allocator::template rebind< typename boost::pointee<\n            typename boost::remove_cv<Pointer>::type >::type >::other\n    {\n      public:\n        typedef typename boost::remove_cv<Pointer>::type result_type;\n        typedef typename boost::pointee<result_type>::type value_type;\n\n        typedef typename Allocator::template rebind<value_type>::other\n            allocator_type;\n\n        explicit factory(allocator_type const & a = allocator_type())\n          : allocator_type(a)\n        { }\n\n      private:\n\n        struct deleter\n            : allocator_type\n        {\n            inline deleter(allocator_type const& that) \n              : allocator_type(that)\n            { }\n\n            allocator_type& get_allocator() const\n            {\n                return *const_cast<allocator_type*>(\n                    static_cast<allocator_type const*>(this));\n            }\n\n            void operator()(value_type* ptr) const\n            {\n                if (!! ptr) ptr->~value_type();\n                const_cast<allocator_type*>(static_cast<allocator_type const*>(\n                    this))->deallocate(ptr,1);\n            }\n        };\n\n        inline allocator_type& get_allocator() const\n        {\n            return *const_cast<allocator_type*>(\n                static_cast<allocator_type const*>(this));\n        }\n\n        inline result_type make_pointer(value_type* ptr, boost::non_type<\n            factory_alloc_propagation,factory_passes_alloc_to_smart_pointer>)\n        const\n        {\n            return result_type(ptr,deleter(this->get_allocator()));\n        }\n        inline result_type make_pointer(value_type* ptr, boost::non_type<\n            factory_alloc_propagation,factory_alloc_for_pointee_and_deleter>)\n        const\n        {\n            return result_type(ptr,deleter(this->get_allocator()),\n                this->get_allocator());\n        }\n\n      public:\n\n#     define BOOST_TMP_MACRO\n#     define BOOST_PP_FILENAME_1 <boost/functional/factory.hpp>\n#     define BOOST_PP_ITERATION_LIMITS (0,BOOST_FUNCTIONAL_FACTORY_MAX_ARITY)\n#     include BOOST_PP_ITERATE()\n#     undef BOOST_TMP_MACRO\n    };\n\n    template< typename Pointer, class Allocator, factory_alloc_propagation AP > \n    class factory<Pointer&, Allocator, AP>;\n    // forbidden, would create a dangling reference\n}\n\n#     define BOOST_FUNCTIONAL_FACTORY_HPP_INCLUDED\n#   else // defined(BOOST_PP_IS_ITERATING)\n#     define N BOOST_PP_ITERATION()\n#     if !defined(BOOST_TMP_MACRO)\n#       if N > 0\n    template< BOOST_PP_ENUM_PARAMS(N, typename T) >\n#       endif\n    inline result_type operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,& a)) const\n    {\n        return result_type( new value_type(BOOST_PP_ENUM_PARAMS(N,a)) );\n    }\n#     else // defined(BOOST_TMP_MACRO)\n#       if N > 0\n    template< BOOST_PP_ENUM_PARAMS(N, typename T) >\n#       endif\n    inline result_type operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,& a)) const\n    {\n        value_type* memory = this->get_allocator().allocate(1);\n        try\n        { \n            return make_pointer(\n                new(memory) value_type(BOOST_PP_ENUM_PARAMS(N,a)),\n                boost::non_type<factory_alloc_propagation,AP>() );\n        }\n        catch (...) { this->get_allocator().deallocate(memory,1); throw; }\n    }\n#     endif\n#     undef N\n#   endif // defined(BOOST_PP_IS_ITERATING)\n\n#endif // include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/forward_adapter.hpp",
    "content": "/*=============================================================================\n    Copyright (c) 2007-2008 Tobias Schwinger\n  \n    Use modification and distribution are subject to the Boost Software \n    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n    http://www.boost.org/LICENSE_1_0.txt).  \n==============================================================================*/\n\n#ifndef BOOST_FUNCTIONAL_FORWARD_ADAPTER_HPP_INCLUDED\n#   ifndef BOOST_PP_IS_ITERATING\n\n#   include <boost/config.hpp>\n#   include <boost/detail/workaround.hpp>\n\n#   include <boost/preprocessor/iteration/iterate.hpp>\n#   include <boost/preprocessor/repetition/enum_params.hpp>\n#   include <boost/preprocessor/repetition/enum_binary_params.hpp>\n#   include <boost/preprocessor/facilities/intercept.hpp>\n#   include <boost/preprocessor/arithmetic/dec.hpp>\n\n#   include <boost/utility/result_of.hpp>\n\n#   ifndef BOOST_FUNCTIONAL_FORWARD_ADAPTER_MAX_ARITY\n#     define BOOST_FUNCTIONAL_FORWARD_ADAPTER_MAX_ARITY 6\n#   elif BOOST_FUNCTIONAL_FORWARD_ADAPTER_MAX_ARITY < 3\n#     undef  BOOST_FUNCTIONAL_FORWARD_ADAPTER_MAX_ARITY\n#     define BOOST_FUNCTIONAL_FORWARD_ADAPTER_MAX_ARITY 3\n#   endif\n\n\nnamespace boost \n{\n    template< typename Function, int Arity_Or_MinArity = -1, int MaxArity = -1 >\n    class forward_adapter;\n\n    //----- ---- --- -- - -  -   -\n\n    namespace detail\n    {\n        template< class MostDerived, typename Function, typename FunctionConst, \n            int Arity, int MinArity >\n        struct forward_adapter_impl;\n\n        struct forward_adapter_result\n        {\n            template< typename Sig > struct apply;\n\n            // Utility metafunction for qualification adjustment on arguments\n            template< typename T > struct q          { typedef T const t; };\n            template< typename T > struct q<T const> { typedef T const t; };\n            template< typename T > struct q<T &>     { typedef T       t; };\n\n            // Utility metafunction to choose target function qualification\n            template< typename T > struct c\n            { typedef typename T::target_function_t t; };\n            template< typename T > struct c<T&      >\n            { typedef typename T::target_function_t t; };\n            template< typename T > struct c<T const >\n            { typedef typename T::target_function_const_t t; };\n            template< typename T > struct c<T const&>\n            { typedef typename T::target_function_const_t t; };\n        };\n    }\n\n#   define BOOST_TMP_MACRO(f,fn,fc) \\\n        boost::detail::forward_adapter_impl< \\\n            forward_adapter<f,Arity_Or_MinArity,MaxArity>, fn, fc, \\\n            (MaxArity!=-1? MaxArity :Arity_Or_MinArity!=-1? Arity_Or_MinArity \\\n                :BOOST_FUNCTIONAL_FORWARD_ADAPTER_MAX_ARITY), \\\n            (Arity_Or_MinArity!=-1? Arity_Or_MinArity : 0) >\n\n    template< typename Function, int Arity_Or_MinArity, int MaxArity >\n    class forward_adapter\n        : public BOOST_TMP_MACRO(Function,Function,Function const)\n        , private Function\n    {\n      public:\n        forward_adapter(Function const& f = Function()) \n          : Function(f) \n        { }\n\n        typedef Function        target_function_t;\n        typedef Function const  target_function_const_t;\n\n        Function       & target_function()       { return *this; }\n        Function const & target_function() const { return *this; }\n\n        template< typename Sig > struct result\n            : detail::forward_adapter_result::template apply<Sig>\n        { };\n\n        using BOOST_TMP_MACRO(Function,Function, Function const)::operator();\n    };\n    template< typename Function, int Arity_Or_MinArity, int MaxArity >\n    class forward_adapter< Function const, Arity_Or_MinArity, MaxArity >\n        : public BOOST_TMP_MACRO(Function const, Function const, Function const)\n        , private Function\n    {\n      public:\n        forward_adapter(Function const& f = Function())\n          : Function(f) \n        { }\n\n        typedef Function const target_function_t;\n        typedef Function const target_function_const_t;\n\n        Function const & target_function() const { return *this; }\n\n        template< typename Sig > struct result\n            : detail::forward_adapter_result::template apply<Sig>\n        { };\n\n        using BOOST_TMP_MACRO(Function const,Function const, Function const)\n            ::operator();\n    };\n    template< typename Function, int Arity_Or_MinArity, int MaxArity >\n    class forward_adapter< Function &, Arity_Or_MinArity, MaxArity >\n        : public BOOST_TMP_MACRO(Function&, Function, Function)\n    {\n        Function& ref_function;\n      public:\n        forward_adapter(Function& f)\n          : ref_function(f) \n        { }\n\n        typedef Function target_function_t;\n        typedef Function target_function_const_t;\n\n        Function & target_function() const { return this->ref_function; }\n\n        template< typename Sig > struct result\n            : detail::forward_adapter_result::template apply<Sig>\n        { };\n\n        using BOOST_TMP_MACRO(Function&, Function, Function)::operator();\n    }; \n\n    #undef BOOST_TMP_MACRO\n\n    namespace detail\n    {\n        template< class Self >\n        struct forward_adapter_result::apply< Self() >\n            : boost::result_of< BOOST_DEDUCED_TYPENAME c<Self>::t() >\n        { };\n\n        template< class MD, class F, class FC >\n        struct forward_adapter_impl<MD,F,FC,0,0>\n        {\n            inline typename boost::result_of< FC() >::type\n            operator()() const\n            {\n                return static_cast<MD const*>(this)->target_function()();\n            }\n\n            inline typename boost::result_of< F() >::type\n            operator()()\n            {\n                return static_cast<MD*>(this)->target_function()();\n            }\n\n        // closing brace gets generated by preprocessing code, below\n\n#       define BOOST_TMP_MACRO(tpl_params,arg_types,params,args)              \\\n            template< tpl_params >                                             \\\n            inline typename boost::result_of< FC(arg_types) >::type            \\\n            operator()(params) const                                           \\\n            {                                                                  \\\n                return static_cast<MD const*>(this)->target_function()(args);  \\\n            }                                                                  \\\n            template< tpl_params >                                             \\\n            inline typename boost::result_of< F(arg_types)>::type              \\\n            operator()(params)                                                 \\\n            {                                                                  \\\n                return static_cast<MD*>(this)->target_function()(args);        \\\n            }\n\n#       // This is the total number of iterations we need\n#       define count ((1 << BOOST_FUNCTIONAL_FORWARD_ADAPTER_MAX_ARITY+1)-2)\n\n#       // Chain file iteration to virtually one loop\n#       if BOOST_FUNCTIONAL_FORWARD_ADAPTER_MAX_ARITY <= 7\n#         define limit1 count\n#         define limit2 0\n#         define limit3 0\n#       else\n#         if BOOST_FUNCTIONAL_FORWARD_ADAPTER_MAX_ARITY <= 15\n#           define limit1 (count >> 8)\n#           define limit2 255\n#           define limit3 0\n#         else\n#           define limit1 (count >> 16)\n#           define limit2 255\n#           define limit3 255\n#         endif\n#       endif\n\n#       define N 0\n\n#       define  BOOST_PP_FILENAME_1 <boost/functional/forward_adapter.hpp>\n#       define  BOOST_PP_ITERATION_LIMITS (0,limit1)\n#       include BOOST_PP_ITERATE()\n\n#       undef N\n#       undef limit3\n#       undef limit2\n#       undef limit1\n#       undef count\n#       undef BOOST_TMP_MACRO\n\n        };\n\n    } // namespace detail\n\n    template<class F, int A0, int A1>\n    struct result_of<boost::forward_adapter<F,A0,A1> const ()>\n        : boost::detail::forward_adapter_result::template apply<\n            boost::forward_adapter<F,A0,A1> const () >\n    { };\n    template<class F, int A0, int A1>\n    struct result_of<boost::forward_adapter<F,A0,A1>()>\n        : boost::detail::forward_adapter_result::template apply<\n            boost::forward_adapter<F,A0,A1>() >\n    { };\n    template<class F, int A0, int A1>\n    struct result_of<boost::forward_adapter<F,A0,A1> const& ()>\n        : boost::detail::forward_adapter_result::template apply<\n            boost::forward_adapter<F,A0,A1> const () >\n    { };\n    template<class F, int A0, int A1>\n    struct result_of<boost::forward_adapter<F,A0,A1>& ()>\n        : boost::detail::forward_adapter_result::template apply<\n            boost::forward_adapter<F,A0,A1>() >\n    { };\n}\n\n#       define BOOST_FUNCTIONAL_FORWARD_ADAPTER_HPP_INCLUDED\n\n#   elif BOOST_PP_ITERATION_DEPTH() == 1 && limit2\n#     define  BOOST_PP_FILENAME_2 <boost/functional/forward_adapter.hpp>\n#     define  BOOST_PP_ITERATION_LIMITS (0,limit2)\n#     include BOOST_PP_ITERATE()\n#   elif BOOST_PP_ITERATION_DEPTH() == 2 && limit3\n#     define  BOOST_PP_FILENAME_3 <boost/functional/forward_adapter.hpp>\n#     define  BOOST_PP_ITERATION_LIMITS (0,limit3)\n#     include BOOST_PP_ITERATE()\n\n#   else\n\n#     // I is the loop counter\n#     if limit2 && limit3\n#       define I (BOOST_PP_ITERATION_1 << 16 | BOOST_PP_ITERATION_2 << 8 | \\\n            BOOST_PP_ITERATION_3)\n#     elif limit2\n#       define I (BOOST_PP_ITERATION_1 << 8 | BOOST_PP_ITERATION_2)\n#     else\n#       define I BOOST_PP_ITERATION_1\n#     endif\n\n#     if I < count\n\n#       // Done for this arity? Increment N\n#       if (I+2 >> N+1) \n#         if N == 0\n#           undef N\n#           define N 1\n#         elif N == 1\n#           undef N\n#           define N 2\n#         elif N == 2\n#           undef N\n#           define N 3\n#         elif N == 3\n#           undef N\n#           define N 4\n#         elif N == 4\n#           undef N\n#           define N 5\n#         elif N == 5\n#           undef N\n#           define N 6\n#         elif N == 6\n#           undef N\n#           define N 7\n#         elif N == 7\n#           undef N\n#           define N 8\n#         elif N == 8\n#           undef N\n#           define N 9\n#         elif N == 9\n#           undef N\n#           define N 10\n#         elif N == 10\n#           undef N\n#           define N 11\n#         elif N == 11\n#           undef N\n#           define N 12\n#         elif N == 12\n#           undef N\n#           define N 13\n#         elif N == 13\n#           undef N\n#           define N 14\n#         elif N == 14\n#           undef N\n#           define N 15\n#         elif N == 15\n#           undef N\n#           define N 16\n#         endif\n\n        };\n\n        template< class Self, BOOST_PP_ENUM_PARAMS(N,typename T) >\n        struct forward_adapter_result::apply< Self(BOOST_PP_ENUM_PARAMS(N,T)) >\n            : boost::result_of< \n                BOOST_DEDUCED_TYPENAME c<Self>::t(BOOST_PP_ENUM_BINARY_PARAMS(N, \n                      typename q<T,>::t& BOOST_PP_INTERCEPT)) >\n        { };\n\n        template< class MD, class F, class FC >\n        struct forward_adapter_impl<MD,F,FC,BOOST_PP_DEC(N),N>\n        {\n            template< BOOST_PP_ENUM_PARAMS(N,typename T) >\n            inline typename boost::result_of< F(\n                BOOST_PP_ENUM_BINARY_PARAMS(N,T,& BOOST_PP_INTERCEPT)) >::type\n            operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,& BOOST_PP_INTERCEPT));\n        };\n\n        template< class MD, class F, class FC, int MinArity >\n        struct forward_adapter_impl<MD,F,FC,N,MinArity>\n            : forward_adapter_impl<MD,F,FC,BOOST_PP_DEC(N),MinArity>\n        {\n            using forward_adapter_impl<MD,F,FC,BOOST_PP_DEC(N),MinArity>::operator();\n\n#       endif\n\n#       // Zero based count for each arity would be I-(1<<N)+2, but we don't\n#       // need it, unless we need a nicer order.\n\n#       // Macros for the parameter's type modifiers.\n#       if I & 0x000001\n#         define PT0 T0 &\n#       else\n#         define PT0 T0 const &\n#       endif\n#       if I & 0x000002\n#         define PT1 T1 &\n#       else\n#         define PT1 T1 const &\n#       endif\n#       if I & 0x000004\n#         define PT2 T2 &\n#       else\n#         define PT2 T2 const &\n#       endif\n#       if I & 0x000008\n#         define PT3 T3 &\n#       else\n#         define PT3 T3 const &\n#       endif\n#       if I & 0x000010\n#         define PT4 T4 &\n#       else\n#         define PT4 T4 const &\n#       endif\n#       if I & 0x000020\n#         define PT5 T5 &\n#       else\n#         define PT5 T5 const &\n#       endif\n#       if I & 0x000040\n#         define PT6 T6 &\n#       else\n#         define PT6 T6 const &\n#       endif\n#       if I & 0x000080\n#         define PT7 T7 &\n#       else\n#         define PT7 T7 const &\n#       endif\n#       if I & 0x000100\n#         define PT8 T8 &\n#       else\n#         define PT8 T8 const &\n#       endif\n#       if I & 0x000200\n#         define PT9 T9 &\n#       else\n#         define PT9 T9 const &\n#       endif\n#       if I & 0x000400\n#         define PT10 T10 &\n#       else\n#         define PT10 T10 const &\n#       endif\n#       if I & 0x000800\n#         define PT11 T11 &\n#       else\n#         define PT11 T11 const &\n#       endif\n#       if I & 0x001000\n#         define PT12 T12 &\n#       else\n#         define PT12 T12 const &\n#       endif\n#       if I & 0x002000\n#         define PT13 T13 &\n#       else\n#         define PT13 T13 const &\n#       endif\n#       if I & 0x004000\n#         define PT14 T14 &\n#       else\n#         define PT14 T14 const &\n#       endif\n#       if I & 0x008000\n#         define PT15 T15 &\n#       else\n#         define PT15 T15 const &\n#       endif\n\n#       if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1400)) \n            template< BOOST_PP_ENUM_PARAMS(N,typename T) >\n            inline typename boost::result_of<  FC(BOOST_PP_ENUM_PARAMS(N,PT)) \n                >::type\n            operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,PT,a)) const\n            {\n                return static_cast<MD const* const>(this)\n                    ->target_function()(BOOST_PP_ENUM_PARAMS(N,a));\n            }\n            template< BOOST_PP_ENUM_PARAMS(N,typename T) >\n            inline typename boost::result_of<  F(BOOST_PP_ENUM_PARAMS(N,PT))\n                >::type\n            operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,PT,a))\n            {\n                return static_cast<MD* const>(this)\n                    ->target_function()(BOOST_PP_ENUM_PARAMS(N,a));\n            }\n#       else\n        BOOST_TMP_MACRO(BOOST_PP_ENUM_PARAMS(N,typename T),\n            BOOST_PP_ENUM_PARAMS(N,PT), BOOST_PP_ENUM_BINARY_PARAMS(N,PT,a),\n            BOOST_PP_ENUM_PARAMS(N,a) )\n        // ...generates uglier code but is faster - it caches ENUM_*\n#       endif\n\n#       undef PT0\n#       undef PT1\n#       undef PT2\n#       undef PT3\n#       undef PT4\n#       undef PT5\n#       undef PT6\n#       undef PT7\n#       undef PT8\n#       undef PT9\n#       undef PT10\n#       undef PT11\n#       undef PT12\n#       undef PT13\n#       undef PT14\n#       undef PT15\n\n#     endif // I < count\n\n#     undef I\n#   endif // defined(BOOST_PP_IS_ITERATING)\n\n#endif // include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/hash/detail/float_functions.hpp",
    "content": "\n// Copyright 2005-2009 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP)\n#define BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP\n\n#include <boost/config.hpp>\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#pragma once\n#endif\n\n#include <boost/config/no_tr1/cmath.hpp>\n\n// Set BOOST_HASH_CONFORMANT_FLOATS to 1 for libraries known to have\n// sufficiently good floating point support to not require any\n// workarounds.\n//\n// When set to 0, the library tries to automatically\n// use the best available implementation. This normally works well, but\n// breaks when ambiguities are created by odd namespacing of the functions.\n//\n// Note that if this is set to 0, the library should still take full\n// advantage of the platform's floating point support.\n\n#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)\n#   define BOOST_HASH_CONFORMANT_FLOATS 0\n#elif defined(__LIBCOMO__)\n#   define BOOST_HASH_CONFORMANT_FLOATS 0\n#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)\n// Rogue Wave library:\n#   define BOOST_HASH_CONFORMANT_FLOATS 0\n#elif defined(_LIBCPP_VERSION)\n// libc++\n#   define BOOST_HASH_CONFORMANT_FLOATS 1\n#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)\n// GNU libstdc++ 3\n#   if defined(__GNUC__) && __GNUC__ >= 4\n#       define BOOST_HASH_CONFORMANT_FLOATS 1\n#   else\n#       define BOOST_HASH_CONFORMANT_FLOATS 0\n#   endif\n#elif defined(__STL_CONFIG_H)\n// generic SGI STL\n#   define BOOST_HASH_CONFORMANT_FLOATS 0\n#elif defined(__MSL_CPP__)\n// MSL standard lib:\n#   define BOOST_HASH_CONFORMANT_FLOATS 0\n#elif defined(__IBMCPP__)\n// VACPP std lib (probably conformant for much earlier version).\n#   if __IBMCPP__ >= 1210\n#       define BOOST_HASH_CONFORMANT_FLOATS 1\n#   else\n#       define BOOST_HASH_CONFORMANT_FLOATS 0\n#   endif\n#elif defined(MSIPL_COMPILE_H)\n// Modena C++ standard library\n#   define BOOST_HASH_CONFORMANT_FLOATS 0\n#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)\n// Dinkumware Library (this has to appear after any possible replacement libraries):\n#   if _CPPLIB_VER >= 405\n#       define BOOST_HASH_CONFORMANT_FLOATS 1\n#   else\n#       define BOOST_HASH_CONFORMANT_FLOATS 0\n#   endif\n#else\n#   define BOOST_HASH_CONFORMANT_FLOATS 0\n#endif\n\n#if BOOST_HASH_CONFORMANT_FLOATS\n\n// The standard library is known to be compliant, so don't use the\n// configuration mechanism.\n\nnamespace boost {\n    namespace hash_detail {\n        template <typename Float>\n        struct call_ldexp {\n            typedef Float float_type;\n            inline Float operator()(Float x, int y) const {\n                return std::ldexp(x, y);\n            }\n        };\n\n        template <typename Float>\n        struct call_frexp {\n            typedef Float float_type;\n            inline Float operator()(Float x, int* y) const {\n                return std::frexp(x, y);\n            }\n        };\n\n        template <typename Float>\n        struct select_hash_type\n        {\n            typedef Float type;\n        };\n    }\n}\n\n#else // BOOST_HASH_CONFORMANT_FLOATS == 0\n\n// The C++ standard requires that the C float functions are overloarded\n// for float, double and long double in the std namespace, but some of the older\n// library implementations don't support this. On some that don't, the C99\n// float functions (frexpf, frexpl, etc.) are available.\n//\n// The following tries to automatically detect which are available.\n\nnamespace boost {\n    namespace hash_detail {\n\n        // Returned by dummy versions of the float functions.\n    \n        struct not_found {\n            // Implicitly convertible to float and long double in order to avoid\n            // a compile error when the dummy float functions are used.\n\n            inline operator float() const { return 0; }\n            inline operator long double() const { return 0; }\n        };\n          \n        // A type for detecting the return type of functions.\n\n        template <typename T> struct is;\n        template <> struct is<float> { char x[10]; };\n        template <> struct is<double> { char x[20]; };\n        template <> struct is<long double> { char x[30]; };\n        template <> struct is<boost::hash_detail::not_found> { char x[40]; };\n            \n        // Used to convert the return type of a function to a type for sizeof.\n\n        template <typename T> is<T> float_type(T);\n\n        // call_ldexp\n        //\n        // This will get specialized for float and long double\n        \n        template <typename Float> struct call_ldexp\n        {\n            typedef double float_type;\n            \n            inline double operator()(double a, int b) const\n            {\n                using namespace std;\n                return ldexp(a, b);\n            }\n        };\n\n        // call_frexp\n        //\n        // This will get specialized for float and long double\n\n        template <typename Float> struct call_frexp\n        {\n            typedef double float_type;\n            \n            inline double operator()(double a, int* b) const\n            {\n                using namespace std;\n                return frexp(a, b);\n            }\n        };\n    }\n}\n            \n// A namespace for dummy functions to detect when the actual function we want\n// isn't available. ldexpl, ldexpf etc. might be added tby the macros below.\n//\n// AFAICT these have to be outside of the boost namespace, as if they're in\n// the boost namespace they'll always be preferable to any other function\n// (since the arguments are built in types, ADL can't be used).\n\nnamespace boost_hash_detect_float_functions {\n    template <class Float> boost::hash_detail::not_found ldexp(Float, int);\n    template <class Float> boost::hash_detail::not_found frexp(Float, int*);    \n}\n\n// Macros for generating specializations of call_ldexp and call_frexp.\n//\n// check_cpp and check_c99 check if the C++ or C99 functions are available.\n//\n// Then the call_* functions select an appropriate implementation.\n//\n// I used c99_func in a few places just to get a unique name.\n//\n// Important: when using 'using namespace' at namespace level, include as\n// little as possible in that namespace, as Visual C++ has an odd bug which\n// can cause the namespace to be imported at the global level. This seems to\n// happen mainly when there's a template in the same namesapce.\n\n#define BOOST_HASH_CALL_FLOAT_FUNC(cpp_func, c99_func, type1, type2)    \\\nnamespace boost_hash_detect_float_functions {                           \\\n    template <class Float>                                              \\\n    boost::hash_detail::not_found c99_func(Float, type2);               \\\n}                                                                       \\\n                                                                        \\\nnamespace boost {                                                       \\\n    namespace hash_detail {                                             \\\n        namespace c99_func##_detect {                                   \\\n            using namespace std;                                        \\\n            using namespace boost_hash_detect_float_functions;          \\\n                                                                        \\\n            struct check {                                              \\\n                static type1 x;                                         \\\n                static type2 y;                                         \\\n                BOOST_STATIC_CONSTANT(bool, cpp =                       \\\n                    sizeof(float_type(cpp_func(x,y)))                   \\\n                        == sizeof(is<type1>));                          \\\n                BOOST_STATIC_CONSTANT(bool, c99 =                       \\\n                    sizeof(float_type(c99_func(x,y)))                   \\\n                        == sizeof(is<type1>));                          \\\n            };                                                          \\\n        }                                                               \\\n                                                                        \\\n        template <bool x>                                               \\\n        struct call_c99_##c99_func :                                    \\\n            boost::hash_detail::call_##cpp_func<double> {};             \\\n                                                                        \\\n        template <>                                                     \\\n        struct call_c99_##c99_func<true> {                              \\\n            typedef type1 float_type;                                   \\\n                                                                        \\\n            template <typename T>                                       \\\n            inline type1 operator()(type1 a, T b)  const                \\\n            {                                                           \\\n                using namespace std;                                    \\\n                return c99_func(a, b);                                  \\\n            }                                                           \\\n        };                                                              \\\n                                                                        \\\n        template <bool x>                                               \\\n        struct call_cpp_##c99_func :                                    \\\n            call_c99_##c99_func<                                        \\\n                ::boost::hash_detail::c99_func##_detect::check::c99     \\\n            > {};                                                       \\\n                                                                        \\\n        template <>                                                     \\\n        struct call_cpp_##c99_func<true> {                              \\\n            typedef type1 float_type;                                   \\\n                                                                        \\\n            template <typename T>                                       \\\n            inline type1 operator()(type1 a, T b)  const                \\\n            {                                                           \\\n                using namespace std;                                    \\\n                return cpp_func(a, b);                                  \\\n            }                                                           \\\n        };                                                              \\\n                                                                        \\\n        template <>                                                     \\\n        struct call_##cpp_func<type1> :                                 \\\n            call_cpp_##c99_func<                                        \\\n                ::boost::hash_detail::c99_func##_detect::check::cpp     \\\n            > {};                                                       \\\n    }                                                                   \\\n}\n\n#define BOOST_HASH_CALL_FLOAT_MACRO(cpp_func, c99_func, type1, type2)   \\\nnamespace boost {                                                       \\\n    namespace hash_detail {                                             \\\n                                                                        \\\n        template <>                                                     \\\n        struct call_##cpp_func<type1> {                                 \\\n            typedef type1 float_type;                                   \\\n            inline type1 operator()(type1 x, type2 y) const {           \\\n                return c99_func(x, y);                                  \\\n            }                                                           \\\n        };                                                              \\\n    }                                                                   \\\n}\n\n#if defined(ldexpf)\nBOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpf, float, int)\n#else\nBOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpf, float, int)\n#endif\n\n#if defined(ldexpl)\nBOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpl, long double, int)\n#else\nBOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpl, long double, int)\n#endif\n\n#if defined(frexpf)\nBOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpf, float, int*)\n#else\nBOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpf, float, int*)\n#endif\n\n#if defined(frexpl)\nBOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpl, long double, int*)\n#else\nBOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpl, long double, int*)\n#endif\n\n#undef BOOST_HASH_CALL_FLOAT_MACRO\n#undef BOOST_HASH_CALL_FLOAT_FUNC\n\n\nnamespace boost\n{\n    namespace hash_detail\n    {\n        template <typename Float1, typename Float2>\n        struct select_hash_type_impl {\n            typedef double type;\n        };\n\n        template <>\n        struct select_hash_type_impl<float, float> {\n            typedef float type;\n        };\n\n        template <>\n        struct select_hash_type_impl<long double, long double> {\n            typedef long double type;\n        };\n\n\n        // select_hash_type\n        //\n        // If there is support for a particular floating point type, use that\n        // otherwise use double (there's always support for double).\n             \n        template <typename Float>\n        struct select_hash_type : select_hash_type_impl<\n                BOOST_DEDUCED_TYPENAME call_ldexp<Float>::float_type,\n                BOOST_DEDUCED_TYPENAME call_frexp<Float>::float_type\n            > {};            \n    }\n}\n\n#endif // BOOST_HASH_CONFORMANT_FLOATS\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/hash/detail/hash_float.hpp",
    "content": "\n// Copyright 2005-2012 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER)\n#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER\n\n#include <boost/config.hpp>\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#pragma once\n#endif\n\n#include <boost/functional/hash/detail/float_functions.hpp>\n#include <boost/functional/hash/detail/limits.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/integer/static_log2.hpp>\n#include <boost/cstdint.hpp>\n#include <boost/assert.hpp>\n#include <boost/limits.hpp>\n#include <cstring>\n\n#if defined(BOOST_MSVC)\n#pragma warning(push)\n#if BOOST_MSVC >= 1400\n#pragma warning(disable:6294) // Ill-defined for-loop: initial condition does\n                              // not satisfy test. Loop body not executed\n#endif\n#endif\n\n// Can we use fpclassify?\n\n// STLport\n#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)\n#define BOOST_HASH_USE_FPCLASSIFY 0\n\n// GNU libstdc++ 3\n#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)\n#  if (defined(__USE_ISOC99) || defined(_GLIBCXX_USE_C99_MATH)) && \\\n      !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))\n#    define BOOST_HASH_USE_FPCLASSIFY 1\n#  else\n#    define BOOST_HASH_USE_FPCLASSIFY 0\n#  endif\n\n// Everything else\n#else\n#  define BOOST_HASH_USE_FPCLASSIFY 0\n#endif\n\nnamespace boost\n{\n    namespace hash_detail\n    {\n        inline void hash_float_combine(std::size_t& seed, std::size_t value)\n        {\n            seed ^= value + (seed<<6) + (seed>>2);\n        }\n\n        ////////////////////////////////////////////////////////////////////////\n        // Binary hash function\n        //\n        // Only used for floats with known iec559 floats, and certain values in\n        // numeric_limits\n\n        inline std::size_t hash_binary(char* ptr, std::size_t length)\n        {\n            std::size_t seed = 0;\n\n            if (length >= sizeof(std::size_t)) {\n                std::memcpy(&seed, ptr, sizeof(std::size_t));\n                length -= sizeof(std::size_t);\n                ptr += sizeof(std::size_t);\n\n                while(length >= sizeof(std::size_t)) {\n                    std::size_t buffer = 0;\n                    std::memcpy(&buffer, ptr, sizeof(std::size_t));\n                    hash_float_combine(seed, buffer);\n                    length -= sizeof(std::size_t);\n                    ptr += sizeof(std::size_t);\n                }\n            }\n\n            if (length > 0) {\n                std::size_t buffer = 0;\n                std::memcpy(&buffer, ptr, length);\n                hash_float_combine(seed, buffer);\n            }\n\n            return seed;\n        }\n\n        template <typename Float, unsigned digits, unsigned max_exponent>\n        struct enable_binary_hash\n        {\n            BOOST_STATIC_CONSTANT(bool, value =\n                std::numeric_limits<Float>::is_iec559 &&\n                std::numeric_limits<Float>::digits == digits &&\n                std::numeric_limits<Float>::radix == 2 &&\n                std::numeric_limits<Float>::max_exponent == max_exponent);\n        };\n\n        template <typename Float>\n        inline std::size_t float_hash_impl(Float v,\n            BOOST_DEDUCED_TYPENAME boost::enable_if_c<\n                enable_binary_hash<Float, 24, 128>::value,\n                std::size_t>::type)\n        {\n            return hash_binary((char*) &v, 4);\n        }\n\n\n        template <typename Float>\n        inline std::size_t float_hash_impl(Float v,\n            BOOST_DEDUCED_TYPENAME boost::enable_if_c<\n                enable_binary_hash<Float, 53, 1024>::value,\n                std::size_t>::type)\n        {\n            return hash_binary((char*) &v, 8);\n        }\n\n        template <typename Float>\n        inline std::size_t float_hash_impl(Float v,\n            BOOST_DEDUCED_TYPENAME boost::enable_if_c<\n                enable_binary_hash<Float, 64, 16384>::value,\n                std::size_t>::type)\n        {\n            return hash_binary((char*) &v, 10);\n        }\n\n        template <typename Float>\n        inline std::size_t float_hash_impl(Float v,\n            BOOST_DEDUCED_TYPENAME boost::enable_if_c<\n                enable_binary_hash<Float, 113, 16384>::value,\n                std::size_t>::type)\n        {\n            return hash_binary((char*) &v, 16);\n        }\n\n        ////////////////////////////////////////////////////////////////////////\n        // Portable hash function\n        //\n        // Used as a fallback when the binary hash function isn't supported.\n\n        template <class T>\n        inline std::size_t float_hash_impl2(T v)\n        {\n            boost::hash_detail::call_frexp<T> frexp;\n            boost::hash_detail::call_ldexp<T> ldexp;\n\n            int exp = 0;\n\n            v = frexp(v, &exp);\n\n            // A postive value is easier to hash, so combine the\n            // sign with the exponent and use the absolute value.\n            if(v < 0) {\n                v = -v;\n                exp += limits<T>::max_exponent -\n                    limits<T>::min_exponent;\n            }\n\n            v = ldexp(v, limits<std::size_t>::digits);\n            std::size_t seed = static_cast<std::size_t>(v);\n            v -= static_cast<T>(seed);\n\n            // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1;\n            std::size_t const length\n                = (limits<T>::digits *\n                        boost::static_log2<limits<T>::radix>::value\n                        + limits<std::size_t>::digits - 1)\n                / limits<std::size_t>::digits;\n\n            for(std::size_t i = 0; i != length; ++i)\n            {\n                v = ldexp(v, limits<std::size_t>::digits);\n                std::size_t part = static_cast<std::size_t>(v);\n                v -= static_cast<T>(part);\n                hash_float_combine(seed, part);\n            }\n\n            hash_float_combine(seed, exp);\n\n            return seed;\n        }\n\n#if !defined(BOOST_HASH_DETAIL_TEST_WITHOUT_GENERIC)\n        template <class T>\n        inline std::size_t float_hash_impl(T v, ...)\n        {\n            typedef BOOST_DEDUCED_TYPENAME select_hash_type<T>::type type;\n            return float_hash_impl2(static_cast<type>(v));\n        }\n#endif\n    }\n}\n\n#if BOOST_HASH_USE_FPCLASSIFY\n\n#include <boost/config/no_tr1/cmath.hpp>\n\nnamespace boost\n{\n    namespace hash_detail\n    {\n        template <class T>\n        inline std::size_t float_hash_value(T v)\n        {\n#if defined(fpclassify)\n            switch (fpclassify(v))\n#elif BOOST_HASH_CONFORMANT_FLOATS\n            switch (std::fpclassify(v))\n#else\n            using namespace std;\n            switch (fpclassify(v))\n#endif\n            {\n            case FP_ZERO:\n                return 0;\n            case FP_INFINITE:\n                return (std::size_t)(v > 0 ? -1 : -2);\n            case FP_NAN:\n                return (std::size_t)(-3);\n            case FP_NORMAL:\n            case FP_SUBNORMAL:\n                return float_hash_impl(v, 0);\n            default:\n                BOOST_ASSERT(0);\n                return 0;\n            }\n        }\n    }\n}\n\n#else // !BOOST_HASH_USE_FPCLASSIFY\n\nnamespace boost\n{\n    namespace hash_detail\n    {\n        template <class T>\n        inline bool is_zero(T v)\n        {\n#if !defined(__GNUC__)\n            return v == 0;\n#else\n            // GCC's '-Wfloat-equal' will complain about comparing\n            // v to 0, but because it disables warnings for system\n            // headers it won't complain if you use std::equal_to to\n            // compare with 0. Resulting in this silliness:\n            return std::equal_to<T>()(v, 0);\n#endif\n        }\n\n        template <class T>\n        inline std::size_t float_hash_value(T v)\n        {\n            return boost::hash_detail::is_zero(v) ? 0 : float_hash_impl(v, 0);\n        }\n    }\n}\n\n#endif // BOOST_HASH_USE_FPCLASSIFY\n\n#undef BOOST_HASH_USE_FPCLASSIFY\n\n#if defined(BOOST_MSVC)\n#pragma warning(pop)\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/hash/detail/limits.hpp",
    "content": "\n// Copyright 2005-2009 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// On some platforms std::limits gives incorrect values for long double.\n// This tries to work around them.\n\n#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER)\n#define BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER\n\n#include <boost/config.hpp>\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#pragma once\n#endif\n\n#include <boost/limits.hpp>\n\n// On OpenBSD, numeric_limits is not reliable for long doubles, but\n// the macros defined in <float.h> are and support long double when STLport\n// doesn't.\n\n#if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE)\n#include <float.h>\n#endif\n\nnamespace boost\n{\n    namespace hash_detail\n    {\n        template <class T>\n        struct limits : std::numeric_limits<T> {};\n\n#if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE)\n        template <>\n        struct limits<long double>\n             : std::numeric_limits<long double>\n        {\n            static long double epsilon() {\n                return LDBL_EPSILON;\n            }\n\n            static long double (max)() {\n                return LDBL_MAX;\n            }\n\n            static long double (min)() {\n                return LDBL_MIN;\n            }\n\n            BOOST_STATIC_CONSTANT(int, digits = LDBL_MANT_DIG);\n            BOOST_STATIC_CONSTANT(int, max_exponent = LDBL_MAX_EXP);\n            BOOST_STATIC_CONSTANT(int, min_exponent = LDBL_MIN_EXP);\n#if defined(_STLP_NO_LONG_DOUBLE)\n            BOOST_STATIC_CONSTANT(int, radix = FLT_RADIX);\n#endif\n        };\n#endif // __OpenBSD__\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/hash/extensions.hpp",
    "content": "\n// Copyright 2005-2009 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  Based on Peter Dimov's proposal\n//  http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf\n//  issue 6.18. \n\n// This implements the extensions to the standard.\n// It's undocumented, so you shouldn't use it....\n\n#if !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)\n#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP\n\n#include <boost/config.hpp>\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#pragma once\n#endif\n\n#include <boost/functional/hash/hash.hpp>\n#include <boost/detail/container_fwd.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/preprocessor/repetition/repeat_from_to.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n\n#if !defined(BOOST_NO_CXX11_HDR_ARRAY)\n#   include <array>\n#endif\n\n#if !defined(BOOST_NO_CXX11_HDR_TUPLE)\n#   include <tuple>\n#endif\n\n#if !defined(BOOST_NO_CXX11_HDR_MEMORY)\n#   include <memory>\n#endif\n\n#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n#include <boost/type_traits/is_array.hpp>\n#endif\n\nnamespace boost\n{\n    template <class A, class B>\n    std::size_t hash_value(std::pair<A, B> const&);\n    template <class T, class A>\n    std::size_t hash_value(std::vector<T, A> const&);\n    template <class T, class A>\n    std::size_t hash_value(std::list<T, A> const& v);\n    template <class T, class A>\n    std::size_t hash_value(std::deque<T, A> const& v);\n    template <class K, class C, class A>\n    std::size_t hash_value(std::set<K, C, A> const& v);\n    template <class K, class C, class A>\n    std::size_t hash_value(std::multiset<K, C, A> const& v);\n    template <class K, class T, class C, class A>\n    std::size_t hash_value(std::map<K, T, C, A> const& v);\n    template <class K, class T, class C, class A>\n    std::size_t hash_value(std::multimap<K, T, C, A> const& v);\n\n    template <class T>\n    std::size_t hash_value(std::complex<T> const&);\n\n    template <class A, class B>\n    std::size_t hash_value(std::pair<A, B> const& v)\n    {\n        std::size_t seed = 0;\n        boost::hash_combine(seed, v.first);\n        boost::hash_combine(seed, v.second);\n        return seed;\n    }\n\n    template <class T, class A>\n    std::size_t hash_value(std::vector<T, A> const& v)\n    {\n        return boost::hash_range(v.begin(), v.end());\n    }\n\n    template <class T, class A>\n    std::size_t hash_value(std::list<T, A> const& v)\n    {\n        return boost::hash_range(v.begin(), v.end());\n    }\n\n    template <class T, class A>\n    std::size_t hash_value(std::deque<T, A> const& v)\n    {\n        return boost::hash_range(v.begin(), v.end());\n    }\n\n    template <class K, class C, class A>\n    std::size_t hash_value(std::set<K, C, A> const& v)\n    {\n        return boost::hash_range(v.begin(), v.end());\n    }\n\n    template <class K, class C, class A>\n    std::size_t hash_value(std::multiset<K, C, A> const& v)\n    {\n        return boost::hash_range(v.begin(), v.end());\n    }\n\n    template <class K, class T, class C, class A>\n    std::size_t hash_value(std::map<K, T, C, A> const& v)\n    {\n        return boost::hash_range(v.begin(), v.end());\n    }\n\n    template <class K, class T, class C, class A>\n    std::size_t hash_value(std::multimap<K, T, C, A> const& v)\n    {\n        return boost::hash_range(v.begin(), v.end());\n    }\n\n    template <class T>\n    std::size_t hash_value(std::complex<T> const& v)\n    {\n        boost::hash<T> hasher;\n        std::size_t seed = hasher(v.imag());\n        seed ^= hasher(v.real()) + (seed<<6) + (seed>>2);\n        return seed;\n    }\n\n#if !defined(BOOST_NO_CXX11_HDR_ARRAY)\n    template <class T, std::size_t N>\n    std::size_t hash_value(std::array<T, N> const& v)\n    {\n        return boost::hash_range(v.begin(), v.end());\n    }\n#endif\n\n#if !defined(BOOST_NO_CXX11_HDR_TUPLE)\n    namespace hash_detail {\n        template <std::size_t I, typename T>\n        inline typename boost::enable_if_c<(I == std::tuple_size<T>::value),\n                void>::type\n            hash_combine_tuple(std::size_t&, T const&)\n        {\n        }\n\n        template <std::size_t I, typename T>\n        inline typename boost::enable_if_c<(I < std::tuple_size<T>::value),\n                void>::type\n            hash_combine_tuple(std::size_t& seed, T const& v)\n        {\n            boost::hash_combine(seed, std::get<I>(v));\n            boost::hash_detail::hash_combine_tuple<I + 1>(seed, v);\n        }\n\n        template <typename T>\n        inline std::size_t hash_tuple(T const& v)\n        {\n            std::size_t seed = 0;\n            boost::hash_detail::hash_combine_tuple<0>(seed, v);\n            return seed;\n        }\n    }\n\n#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\n    template <typename... T>\n    inline std::size_t hash_value(std::tuple<T...> const& v)\n    {\n        return boost::hash_detail::hash_tuple(v);\n    }\n#else\n\n    inline std::size_t hash_value(std::tuple<> const& v)\n    {\n        return boost::hash_detail::hash_tuple(v);\n    }\n\n#   define BOOST_HASH_TUPLE_F(z, n, _)                                      \\\n    template<                                                               \\\n        BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)                            \\\n    >                                                                       \\\n    inline std::size_t hash_value(std::tuple<                               \\\n        BOOST_PP_ENUM_PARAMS_Z(z, n, A)                                     \\\n    > const& v)                                                             \\\n    {                                                                       \\\n        return boost::hash_detail::hash_tuple(v);                           \\\n    }\n\n    BOOST_PP_REPEAT_FROM_TO(1, 11, BOOST_HASH_TUPLE_F, _)\n#   undef BOOST_HASH_TUPLE_F\n#endif\n\n#endif\n\n#if !defined(BOOST_NO_CXX11_SMART_PTR)\n    template <typename T>\n    inline std::size_t hash_value(std::shared_ptr<T> const& x) {\n        return boost::hash_value(x.get());\n    }\n\n    template <typename T, typename Deleter>\n    inline std::size_t hash_value(std::unique_ptr<T, Deleter> const& x) {\n        return boost::hash_value(x.get());\n    }\n#endif\n\n    //\n    // call_hash_impl\n    //\n\n    // On compilers without function template ordering, this deals with arrays.\n\n#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n    namespace hash_detail\n    {\n        template <bool IsArray>\n        struct call_hash_impl\n        {\n            template <class T>\n            struct inner\n            {\n                static std::size_t call(T const& v)\n                {\n                    using namespace boost;\n                    return hash_value(v);\n                }\n            };\n        };\n\n        template <>\n        struct call_hash_impl<true>\n        {\n            template <class Array>\n            struct inner\n            {\n                static std::size_t call(Array const& v)\n                {\n                    const int size = sizeof(v) / sizeof(*v);\n                    return boost::hash_range(v, v + size);\n                }\n            };\n        };\n\n        template <class T>\n        struct call_hash\n            : public call_hash_impl<boost::is_array<T>::value>\n                ::BOOST_NESTED_TEMPLATE inner<T>\n        {\n        };\n    }\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n    //\n    // boost::hash\n    //\n\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n    template <class T> struct hash\n        : std::unary_function<T, std::size_t>\n    {\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n        std::size_t operator()(T const& val) const\n        {\n            return hash_value(val);\n        }\n#else\n        std::size_t operator()(T const& val) const\n        {\n            return hash_detail::call_hash<T>::call(val);\n        }\n#endif\n    };\n\n#if BOOST_WORKAROUND(__DMC__, <= 0x848)\n    template <class T, unsigned int n> struct hash<T[n]>\n        : std::unary_function<T[n], std::size_t>\n    {\n        std::size_t operator()(const T* val) const\n        {\n            return boost::hash_range(val, val+n);\n        }\n    };\n#endif\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n    // On compilers without partial specialization, boost::hash<T>\n    // has already been declared to deal with pointers, so just\n    // need to supply the non-pointer version of hash_impl.\n\n    namespace hash_detail\n    {\n        template <bool IsPointer>\n        struct hash_impl;\n\n        template <>\n        struct hash_impl<false>\n        {\n            template <class T>\n            struct inner\n                : std::unary_function<T, std::size_t>\n            {\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n                std::size_t operator()(T const& val) const\n                {\n                    return hash_value(val);\n                }\n#else\n                std::size_t operator()(T const& val) const\n                {\n                    return hash_detail::call_hash<T>::call(val);\n                }\n#endif\n            };\n        };\n    }\n#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/hash/hash.hpp",
    "content": "\n// Copyright 2005-2014 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  Based on Peter Dimov's proposal\n//  http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf\n//  issue 6.18. \n//\n//  This also contains public domain code from MurmurHash. From the\n//  MurmurHash header:\n\n// MurmurHash3 was written by Austin Appleby, and is placed in the public\n// domain. The author hereby disclaims copyright to this source code.\n\n#if !defined(BOOST_FUNCTIONAL_HASH_HASH_HPP)\n#define BOOST_FUNCTIONAL_HASH_HASH_HPP\n\n#include <boost/functional/hash/hash_fwd.hpp>\n#include <functional>\n#include <boost/functional/hash/detail/hash_float.hpp>\n#include <string>\n#include <boost/limits.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/cstdint.hpp>\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#include <boost/type_traits/is_pointer.hpp>\n#endif\n\n#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX)\n#include <typeindex>\n#endif\n\n#if defined(BOOST_MSVC)\n#pragma warning(push)\n\n#if BOOST_MSVC >= 1400\n#pragma warning(disable:6295) // Ill-defined for-loop : 'unsigned int' values\n                              // are always of range '0' to '4294967295'.\n                              // Loop executes infinitely.\n#endif\n\n#endif\n\n#if BOOST_WORKAROUND(__GNUC__, < 3) \\\n    && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\n#define BOOST_HASH_CHAR_TRAITS string_char_traits\n#else\n#define BOOST_HASH_CHAR_TRAITS char_traits\n#endif\n\n#if defined(_MSC_VER)\n#   define BOOST_FUNCTIONAL_HASH_ROTL32(x, r) _rotl(x,r)\n#else\n#   define BOOST_FUNCTIONAL_HASH_ROTL32(x, r) (x << r) | (x >> (32 - r))\n#endif\n\nnamespace boost\n{\n    namespace hash_detail\n    {\n        struct enable_hash_value { typedef std::size_t type; };\n\n        template <typename T> struct basic_numbers {};\n        template <typename T> struct long_numbers;\n        template <typename T> struct ulong_numbers;\n        template <typename T> struct float_numbers {};\n\n        template <> struct basic_numbers<bool> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct basic_numbers<char> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct basic_numbers<unsigned char> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct basic_numbers<signed char> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct basic_numbers<short> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct basic_numbers<unsigned short> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct basic_numbers<int> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct basic_numbers<unsigned int> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct basic_numbers<long> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct basic_numbers<unsigned long> :\n            boost::hash_detail::enable_hash_value {};\n\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)\n        template <> struct basic_numbers<wchar_t> :\n            boost::hash_detail::enable_hash_value {};\n#endif\n\n        // long_numbers is defined like this to allow for separate\n        // specialization for long_long and int128_type, in case\n        // they conflict.\n        template <typename T> struct long_numbers2 {};\n        template <typename T> struct ulong_numbers2 {};\n        template <typename T> struct long_numbers : long_numbers2<T> {};\n        template <typename T> struct ulong_numbers : ulong_numbers2<T> {};\n\n#if !defined(BOOST_NO_LONG_LONG)\n        template <> struct long_numbers<boost::long_long_type> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct ulong_numbers<boost::ulong_long_type> :\n            boost::hash_detail::enable_hash_value {};\n#endif\n\n#if defined(BOOST_HAS_INT128)\n        template <> struct long_numbers2<boost::int128_type> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct ulong_numbers2<boost::uint128_type> :\n            boost::hash_detail::enable_hash_value {};\n#endif\n\n        template <> struct float_numbers<float> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct float_numbers<double> :\n            boost::hash_detail::enable_hash_value {};\n        template <> struct float_numbers<long double> :\n            boost::hash_detail::enable_hash_value {};\n    }\n\n    template <typename T>\n    typename boost::hash_detail::basic_numbers<T>::type hash_value(T);\n    template <typename T>\n    typename boost::hash_detail::long_numbers<T>::type hash_value(T);\n    template <typename T>\n    typename boost::hash_detail::ulong_numbers<T>::type hash_value(T);\n\n    template <typename T>\n    typename boost::enable_if<boost::is_enum<T>, std::size_t>::type\n        hash_value(T);\n\n#if !BOOST_WORKAROUND(__DMC__, <= 0x848)\n    template <class T> std::size_t hash_value(T* const&);\n#else\n    template <class T> std::size_t hash_value(T*);\n#endif\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n    template< class T, unsigned N >\n    std::size_t hash_value(const T (&x)[N]);\n\n    template< class T, unsigned N >\n    std::size_t hash_value(T (&x)[N]);\n#endif\n\n    template <class Ch, class A>\n    std::size_t hash_value(\n        std::basic_string<Ch, std::BOOST_HASH_CHAR_TRAITS<Ch>, A> const&);\n\n    template <typename T>\n    typename boost::hash_detail::float_numbers<T>::type hash_value(T);\n\n#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX)\n    std::size_t hash_value(std::type_index);\n#endif\n\n    // Implementation\n\n    namespace hash_detail\n    {\n        template <class T>\n        inline std::size_t hash_value_signed(T val)\n        {\n             const int size_t_bits = std::numeric_limits<std::size_t>::digits;\n             // ceiling(std::numeric_limits<T>::digits / size_t_bits) - 1\n             const int length = (std::numeric_limits<T>::digits - 1)\n                 / size_t_bits;\n\n             std::size_t seed = 0;\n             T positive = val < 0 ? -1 - val : val;\n\n             // Hopefully, this loop can be unrolled.\n             for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits)\n             {\n                 seed ^= (std::size_t) (positive >> i) + (seed<<6) + (seed>>2);\n             }\n             seed ^= (std::size_t) val + (seed<<6) + (seed>>2);\n\n             return seed;\n        }\n\n        template <class T>\n        inline std::size_t hash_value_unsigned(T val)\n        {\n             const int size_t_bits = std::numeric_limits<std::size_t>::digits;\n             // ceiling(std::numeric_limits<T>::digits / size_t_bits) - 1\n             const int length = (std::numeric_limits<T>::digits - 1)\n                 / size_t_bits;\n\n             std::size_t seed = 0;\n\n             // Hopefully, this loop can be unrolled.\n             for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits)\n             {\n                 seed ^= (std::size_t) (val >> i) + (seed<<6) + (seed>>2);\n             }\n             seed ^= (std::size_t) val + (seed<<6) + (seed>>2);\n\n             return seed;\n        }\n\n        template <typename SizeT>\n        inline void hash_combine_impl(SizeT& seed, SizeT value)\n        {\n            seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2);\n        }\n\n        template <typename SizeT>\n        inline void hash_combine_impl(boost::uint32_t& h1,\n                boost::uint32_t k1)\n        {\n            const uint32_t c1 = 0xcc9e2d51;\n            const uint32_t c2 = 0x1b873593;\n\n            k1 *= c1;\n            k1 = BOOST_FUNCTIONAL_HASH_ROTL32(k1,15);\n            k1 *= c2;\n\n            h1 ^= k1;\n            h1 = BOOST_FUNCTIONAL_HASH_ROTL32(h1,13);\n            h1 = h1*5+0xe6546b64;\n        }\n\n\n// Don't define 64-bit hash combine on platforms with 64 bit integers,\n// and also not for 32-bit gcc as it warns about the 64-bit constant.\n#if !defined(BOOST_NO_INT64_T) && \\\n        !(defined(__GNUC__) && ULONG_MAX == 0xffffffff)\n\n        template <typename SizeT>\n        inline void hash_combine_impl(boost::uint64_t& h,\n                boost::uint64_t k)\n        {\n            const uint64_t m = UINT64_C(0xc6a4a7935bd1e995);\n            const int r = 47;\n\n            k *= m;\n            k ^= k >> r;\n            k *= m;\n\n            h ^= k;\n            h *= m;\n        }\n\n#endif // BOOST_NO_INT64_T\n    }\n\n    template <typename T>\n    typename boost::hash_detail::basic_numbers<T>::type hash_value(T v)\n    {\n        return static_cast<std::size_t>(v);\n    }\n\n    template <typename T>\n    typename boost::hash_detail::long_numbers<T>::type hash_value(T v)\n    {\n        return hash_detail::hash_value_signed(v);\n    }\n\n    template <typename T>\n    typename boost::hash_detail::ulong_numbers<T>::type hash_value(T v)\n    {\n        return hash_detail::hash_value_unsigned(v);\n    }\n\n    template <typename T>\n    typename boost::enable_if<boost::is_enum<T>, std::size_t>::type\n        hash_value(T v)\n    {\n        return static_cast<std::size_t>(v);\n    }\n\n    // Implementation by Alberto Barbati and Dave Harris.\n#if !BOOST_WORKAROUND(__DMC__, <= 0x848)\n    template <class T> std::size_t hash_value(T* const& v)\n#else\n    template <class T> std::size_t hash_value(T* v)\n#endif\n    {\n#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64\n    // for some reason ptrdiff_t on OpenVMS compiler with\n    // 64 bit is not 64 bit !!!\n        std::size_t x = static_cast<std::size_t>(\n           reinterpret_cast<long long int>(v));\n#else\n        std::size_t x = static_cast<std::size_t>(\n           reinterpret_cast<std::ptrdiff_t>(v));\n#endif\n        return x + (x >> 3);\n    }\n\n#if defined(BOOST_MSVC)\n#pragma warning(push)\n#if BOOST_MSVC <= 1400\n#pragma warning(disable:4267) // 'argument' : conversion from 'size_t' to\n                              // 'unsigned int', possible loss of data\n                              // A misguided attempt to detect 64-bit\n                              // incompatability.\n#endif\n#endif\n\n    template <class T>\n    inline void hash_combine(std::size_t& seed, T const& v)\n    {\n        boost::hash<T> hasher;\n        return boost::hash_detail::hash_combine_impl(seed, hasher(v));\n    }\n\n#if defined(BOOST_MSVC)\n#pragma warning(pop)\n#endif\n\n    template <class It>\n    inline std::size_t hash_range(It first, It last)\n    {\n        std::size_t seed = 0;\n\n        for(; first != last; ++first)\n        {\n            hash_combine(seed, *first);\n        }\n\n        return seed;\n    }\n\n    template <class It>\n    inline void hash_range(std::size_t& seed, It first, It last)\n    {\n        for(; first != last; ++first)\n        {\n            hash_combine(seed, *first);\n        }\n    }\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\n    template <class T>\n    inline std::size_t hash_range(T* first, T* last)\n    {\n        std::size_t seed = 0;\n\n        for(; first != last; ++first)\n        {\n            boost::hash<T> hasher;\n            seed ^= hasher(*first) + 0x9e3779b9 + (seed<<6) + (seed>>2);\n        }\n\n        return seed;\n    }\n\n    template <class T>\n    inline void hash_range(std::size_t& seed, T* first, T* last)\n    {\n        for(; first != last; ++first)\n        {\n            boost::hash<T> hasher;\n            seed ^= hasher(*first) + 0x9e3779b9 + (seed<<6) + (seed>>2);\n        }\n    }\n#endif\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n    template< class T, unsigned N >\n    inline std::size_t hash_value(const T (&x)[N])\n    {\n        return hash_range(x, x + N);\n    }\n\n    template< class T, unsigned N >\n    inline std::size_t hash_value(T (&x)[N])\n    {\n        return hash_range(x, x + N);\n    }\n#endif\n\n    template <class Ch, class A>\n    inline std::size_t hash_value(\n        std::basic_string<Ch, std::BOOST_HASH_CHAR_TRAITS<Ch>, A> const& v)\n    {\n        return hash_range(v.begin(), v.end());\n    }\n\n    template <typename T>\n    typename boost::hash_detail::float_numbers<T>::type hash_value(T v)\n    {\n        return boost::hash_detail::float_hash_value(v);\n    }\n\n#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX)\n    inline std::size_t hash_value(std::type_index v)\n    {\n        return v.hash_code();\n    }\n#endif\n\n    //\n    // boost::hash\n    //\n    \n    // Define the specializations required by the standard. The general purpose\n    // boost::hash is defined later in extensions.hpp if\n    // BOOST_HASH_NO_EXTENSIONS is not defined.\n    \n    // BOOST_HASH_SPECIALIZE - define a specialization for a type which is\n    // passed by copy.\n    //\n    // BOOST_HASH_SPECIALIZE_REF - define a specialization for a type which is\n    // passed by const reference.\n    //\n    // These are undefined later.\n\n#define BOOST_HASH_SPECIALIZE(type) \\\n    template <> struct hash<type> \\\n         : public std::unary_function<type, std::size_t> \\\n    { \\\n        std::size_t operator()(type v) const \\\n        { \\\n            return boost::hash_value(v); \\\n        } \\\n    };\n\n#define BOOST_HASH_SPECIALIZE_REF(type) \\\n    template <> struct hash<type> \\\n         : public std::unary_function<type, std::size_t> \\\n    { \\\n        std::size_t operator()(type const& v) const \\\n        { \\\n            return boost::hash_value(v); \\\n        } \\\n    };\n\n    BOOST_HASH_SPECIALIZE(bool)\n    BOOST_HASH_SPECIALIZE(char)\n    BOOST_HASH_SPECIALIZE(signed char)\n    BOOST_HASH_SPECIALIZE(unsigned char)\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)\n    BOOST_HASH_SPECIALIZE(wchar_t)\n#endif\n    BOOST_HASH_SPECIALIZE(short)\n    BOOST_HASH_SPECIALIZE(unsigned short)\n    BOOST_HASH_SPECIALIZE(int)\n    BOOST_HASH_SPECIALIZE(unsigned int)\n    BOOST_HASH_SPECIALIZE(long)\n    BOOST_HASH_SPECIALIZE(unsigned long)\n\n    BOOST_HASH_SPECIALIZE(float)\n    BOOST_HASH_SPECIALIZE(double)\n    BOOST_HASH_SPECIALIZE(long double)\n\n    BOOST_HASH_SPECIALIZE_REF(std::string)\n#if !defined(BOOST_NO_STD_WSTRING)\n    BOOST_HASH_SPECIALIZE_REF(std::wstring)\n#endif\n\n#if !defined(BOOST_NO_LONG_LONG)\n    BOOST_HASH_SPECIALIZE(boost::long_long_type)\n    BOOST_HASH_SPECIALIZE(boost::ulong_long_type)\n#endif\n\n#if defined(BOOST_HAS_INT128)\n    BOOST_HASH_SPECIALIZE(boost::int128_type)\n    BOOST_HASH_SPECIALIZE(boost::uint128_type)\n#endif\n\n#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX)\n    BOOST_HASH_SPECIALIZE(std::type_index)\n#endif\n\n#undef BOOST_HASH_SPECIALIZE\n#undef BOOST_HASH_SPECIALIZE_REF\n\n// Specializing boost::hash for pointers.\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n    template <class T>\n    struct hash<T*>\n        : public std::unary_function<T*, std::size_t>\n    {\n        std::size_t operator()(T* v) const\n        {\n#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590)\n            return boost::hash_value(v);\n#else\n            std::size_t x = static_cast<std::size_t>(\n                reinterpret_cast<std::ptrdiff_t>(v));\n\n            return x + (x >> 3);\n#endif\n        }\n    };\n\n#else\n\n    // For compilers without partial specialization, we define a\n    // boost::hash for all remaining types. But hash_impl is only defined\n    // for pointers in 'extensions.hpp' - so when BOOST_HASH_NO_EXTENSIONS\n    // is defined there will still be a compile error for types not supported\n    // in the standard.\n\n    namespace hash_detail\n    {\n        template <bool IsPointer>\n        struct hash_impl;\n\n        template <>\n        struct hash_impl<true>\n        {\n            template <class T>\n            struct inner\n                : public std::unary_function<T, std::size_t>\n            {\n                std::size_t operator()(T val) const\n                {\n#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 590)\n                    return boost::hash_value(val);\n#else\n                    std::size_t x = static_cast<std::size_t>(\n                        reinterpret_cast<std::ptrdiff_t>(val));\n\n                    return x + (x >> 3);\n#endif\n                }\n            };\n        };\n    }\n\n    template <class T> struct hash\n        : public boost::hash_detail::hash_impl<boost::is_pointer<T>::value>\n            ::BOOST_NESTED_TEMPLATE inner<T>\n    {\n    };\n\n#endif\n}\n\n#undef BOOST_HASH_CHAR_TRAITS\n#undef BOOST_FUNCTIONAL_HASH_ROTL32\n\n#if defined(BOOST_MSVC)\n#pragma warning(pop)\n#endif\n\n#endif // BOOST_FUNCTIONAL_HASH_HASH_HPP\n\n// Include this outside of the include guards in case the file is included\n// twice - once with BOOST_HASH_NO_EXTENSIONS defined, and then with it\n// undefined.\n\n#if !defined(BOOST_HASH_NO_EXTENSIONS) \\\n    && !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)\n#include <boost/functional/hash/extensions.hpp>\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/hash/hash_fwd.hpp",
    "content": "\n// Copyright 2005-2009 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  Based on Peter Dimov's proposal\n//  http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf\n//  issue 6.18. \n\n#if !defined(BOOST_FUNCTIONAL_HASH_FWD_HPP)\n#define BOOST_FUNCTIONAL_HASH_FWD_HPP\n\n#include <boost/config.hpp>\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#pragma once\n#endif\n\n#include <cstddef>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost\n{\n    template <class T> struct hash;\n\n    template <class T> void hash_combine(std::size_t& seed, T const& v);\n\n    template <class It> std::size_t hash_range(It, It);\n    template <class It> void hash_range(std::size_t&, It, It);\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\n    template <class T> inline std::size_t hash_range(T*, T*);\n    template <class T> inline void hash_range(std::size_t&, T*, T*);\n#endif\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/hash.hpp",
    "content": "\n// Copyright 2005-2009 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#include <boost/functional/hash/hash.hpp>\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/hash_fwd.hpp",
    "content": "\n// Copyright 2005-2009 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#include <boost/config.hpp>\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#pragma once\n#endif\n\n#include <boost/functional/hash/hash_fwd.hpp>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/lightweight_forward_adapter.hpp",
    "content": "/*=============================================================================\n    Copyright (c) 2007 Tobias Schwinger\n  \n    Use modification and distribution are subject to the Boost Software \n    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n    http://www.boost.org/LICENSE_1_0.txt).\n==============================================================================*/\n\n#ifndef BOOST_FUNCTIONAL_LIGHTWEIGHT_FORWARD_ADAPTER_HPP_INCLUDED\n#   ifndef BOOST_PP_IS_ITERATING\n\n#   include <boost/config.hpp>\n#   include <boost/detail/workaround.hpp>\n\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/iteration/iterate.hpp>\n#   include <boost/preprocessor/repetition/enum.hpp>\n#   include <boost/preprocessor/repetition/enum_params.hpp>\n#   include <boost/preprocessor/repetition/enum_binary_params.hpp>\n#   include <boost/preprocessor/facilities/intercept.hpp>\n\n#   include <boost/utility/result_of.hpp>\n#   include <boost/ref.hpp>\n\n#   ifndef BOOST_FUNCTIONAL_LIGHTWEIGHT_FORWARD_ADAPTER_MAX_ARITY\n#     define BOOST_FUNCTIONAL_LIGHTWEIGHT_FORWARD_ADAPTER_MAX_ARITY 10\n#   elif BOOST_FUNCTIONAL_FORDWARD_ADAPTER_MAX_ARITY < 3\n#     undef  BOOST_FUNCTIONAL_LIGHTWEIGHT_FORWARD_ADAPTER_MAX_ARITY\n#     define BOOST_FUNCTIONAL_LIGHTWEIGHT_FORWARD_ADAPTER_MAX_ARITY 3\n#   endif\n\nnamespace boost \n{\n    template< typename Function, int Arity_Or_MinArity = -1, int MaxArity = -1 >\n    class lightweight_forward_adapter;\n\n    //----- ---- --- -- - -  -   -\n\n    namespace detail\n    {\n        template< class MostDerived, typename Function, typename FunctionConst, \n            int Arity, int MinArity >\n        struct lightweight_forward_adapter_impl;\n\n        struct lightweight_forward_adapter_result\n        {\n            template< typename Sig > struct apply;\n\n            // Utility metafunction for argument transform\n            template< typename T > struct x  { typedef T const& t; };\n            template< typename T > struct x< boost::reference_wrapper<T> >\n            { typedef T& t; };\n            template< typename T > struct x<T&>       : x<T> { };\n            template< typename T > struct x<T const&> : x<T> { };\n            template< typename T > struct x<T const>  : x<T> { };\n\n            // Utility metafunction to choose target function qualification\n            template< typename T > struct c\n            { typedef typename T::target_function_t t; };\n            template< typename T > struct c<T&      >\n            { typedef typename T::target_function_t t; };\n            template< typename T > struct c<T const >\n            { typedef typename T::target_function_const_t t; };\n            template< typename T > struct c<T const&>\n            { typedef typename T::target_function_const_t t; };\n        };\n    }\n\n#   define BOOST_TMP_MACRO(f,fn,fc) \\\n        boost::detail::lightweight_forward_adapter_impl< \\\n            lightweight_forward_adapter<f,Arity_Or_MinArity,MaxArity>, fn, fc, \\\n            (MaxArity!=-1? MaxArity :Arity_Or_MinArity!=-1? Arity_Or_MinArity \\\n                :BOOST_FUNCTIONAL_LIGHTWEIGHT_FORWARD_ADAPTER_MAX_ARITY), \\\n            (Arity_Or_MinArity!=-1? Arity_Or_MinArity : 0) >\n\n    template< typename Function, int Arity_Or_MinArity, int MaxArity >\n    class lightweight_forward_adapter\n        : public BOOST_TMP_MACRO(Function,Function,Function const)\n        , private Function\n    {\n      public:\n        lightweight_forward_adapter(Function const& f = Function()) \n          : Function(f) \n        { }\n\n        typedef Function        target_function_t;\n        typedef Function const  target_function_const_t;\n\n        Function       & target_function()       { return *this; }\n        Function const & target_function() const { return *this; }\n\n        template< typename Sig > struct result\n            : detail::lightweight_forward_adapter_result::template apply<Sig>\n        { };\n\n        using BOOST_TMP_MACRO(Function,Function, Function const)::operator();\n    };\n    template< typename Function, int Arity_Or_MinArity, int MaxArity >\n    class lightweight_forward_adapter< Function const, Arity_Or_MinArity, \n        MaxArity >\n        : public BOOST_TMP_MACRO(Function const, Function const, Function const)\n        , private Function\n    {\n      public:\n        lightweight_forward_adapter(Function const& f = Function())\n          : Function(f) \n        { }\n\n        typedef Function const target_function_t;\n        typedef Function const target_function_const_t;\n\n        Function const & target_function() const { return *this; }\n\n        template< typename Sig > struct result\n            : detail::lightweight_forward_adapter_result::template apply<Sig>\n        { };\n\n        using BOOST_TMP_MACRO(Function const,Function const, Function const)\n            ::operator();\n    };\n    template< typename Function, int Arity_Or_MinArity, int MaxArity >\n    class lightweight_forward_adapter< Function &, Arity_Or_MinArity, MaxArity >\n        : public BOOST_TMP_MACRO(Function&, Function, Function)\n    {\n        Function& ref_function;\n      public:\n        lightweight_forward_adapter(Function& f)\n          : ref_function(f) \n        { }\n\n        typedef Function target_function_t;\n        typedef Function target_function_const_t;\n\n        Function & target_function() const { return this->ref_function; }\n\n        template< typename Sig > struct result\n            : detail::lightweight_forward_adapter_result::template apply<Sig>\n        { };\n\n        using BOOST_TMP_MACRO(Function&, Function, Function)::operator();\n    }; \n\n    #undef BOOST_TMP_MACRO\n\n    namespace detail\n    {\n        template< class Self >\n        struct lightweight_forward_adapter_result::apply< Self() >\n            : boost::result_of< BOOST_DEDUCED_TYPENAME c<Self>::t() >\n        { };\n\n        template< class MD, class F, class FC >\n        struct lightweight_forward_adapter_impl<MD,F,FC,0,0>\n            : lightweight_forward_adapter_result\n        {\n            inline typename boost::result_of< FC() >::type\n            operator()() const\n            {\n                return static_cast<MD const*>(this)->target_function()();\n            }\n\n            inline typename boost::result_of< F() >::type\n            operator()()\n            {\n                return static_cast<MD*>(this)->target_function()();\n            }\n        };\n\n#       define  BOOST_PP_FILENAME_1 \\\n            <boost/functional/lightweight_forward_adapter.hpp>\n#       define  BOOST_PP_ITERATION_LIMITS                                     \\\n            (1,BOOST_FUNCTIONAL_LIGHTWEIGHT_FORWARD_ADAPTER_MAX_ARITY) \n#       include BOOST_PP_ITERATE()\n\n    } // namespace detail\n\n    template<class F, int A0, int A1>\n    struct result_of<boost::lightweight_forward_adapter<F,A0,A1> const ()>\n        : boost::detail::lightweight_forward_adapter_result::template apply<\n            boost::lightweight_forward_adapter<F,A0,A1> const () >\n    { };\n    template<class F, int A0, int A1>\n    struct result_of<boost::lightweight_forward_adapter<F,A0,A1>()>\n        : boost::detail::lightweight_forward_adapter_result::template apply<\n            boost::lightweight_forward_adapter<F,A0,A1>() >\n    { };\n    template<class F, int A0, int A1>\n    struct result_of<boost::lightweight_forward_adapter<F,A0,A1> const& ()>\n        : boost::detail::lightweight_forward_adapter_result::template apply<\n            boost::lightweight_forward_adapter<F,A0,A1> const () >\n    { };\n    template<class F, int A0, int A1>\n    struct result_of<boost::lightweight_forward_adapter<F,A0,A1>& ()>\n        : boost::detail::lightweight_forward_adapter_result::template apply<\n            boost::lightweight_forward_adapter<F,A0,A1>() >\n    { };\n}\n\n#     define BOOST_FUNCTIONAL_LIGHTWEIGHT_FORWARD_ADAPTER_HPP_INCLUDED\n\n#   else // defined(BOOST_PP_IS_ITERATING)\n#     define N BOOST_PP_ITERATION() \n\n        template< class Self, BOOST_PP_ENUM_PARAMS(N,typename T) >\n        struct lightweight_forward_adapter_result::apply<\n            Self (BOOST_PP_ENUM_PARAMS(N,T)) >\n            : boost::result_of<\n                BOOST_DEDUCED_TYPENAME c<Self>::t (BOOST_PP_ENUM_BINARY_PARAMS(N,\n                    typename x<T,>::t BOOST_PP_INTERCEPT)) >\n        { };\n\n        template< class MD, class F, class FC >\n        struct lightweight_forward_adapter_impl<MD,F,FC,BOOST_PP_DEC(N),N>\n            : lightweight_forward_adapter_result\n        {\n            template< BOOST_PP_ENUM_PARAMS(N,typename T) >\n            inline typename boost::result_of< F(BOOST_PP_ENUM_BINARY_PARAMS(N,\n                T,const& BOOST_PP_INTERCEPT)) >::type\n            operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,& BOOST_PP_INTERCEPT));\n        };\n\n        template< class MD, class F, class FC, int MinArity >\n        struct lightweight_forward_adapter_impl<MD,F,FC,N,MinArity>\n            : lightweight_forward_adapter_impl<MD,F,FC,BOOST_PP_DEC(N),MinArity>\n        {\n            using lightweight_forward_adapter_impl<MD,F,FC,BOOST_PP_DEC(N),\n                MinArity>::operator();\n\n#     define M(z,i,d) \\\n          static_cast<typename d::template x<T##i>::t>(a##i)\n\n            template< BOOST_PP_ENUM_PARAMS(N,typename T) >\n            inline typename lightweight_forward_adapter_result::template apply<\n                MD const (BOOST_PP_ENUM_BINARY_PARAMS(N,\n                    T,const& BOOST_PP_INTERCEPT)) >::type\n            operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,const& a)) const\n            {\n                typedef lightweight_forward_adapter_result _;\n                return static_cast<MD const*>(this)->target_function()(\n                    BOOST_PP_ENUM(N,M,_));\n            }\n            template< BOOST_PP_ENUM_PARAMS(N,typename T) >\n            inline typename lightweight_forward_adapter_result::template apply<\n                MD (BOOST_PP_ENUM_BINARY_PARAMS(N,\n                    T,const& BOOST_PP_INTERCEPT)) >::type\n            operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,const& a))\n            {\n                typedef lightweight_forward_adapter_result _;\n                return static_cast<MD*>(this)->target_function()(\n                    BOOST_PP_ENUM(N,M,_));\n            }\n#     undef M\n      };\n\n#     undef N\n#   endif // defined(BOOST_PP_IS_ITERATING)\n\n#endif // include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/overloaded_function/config.hpp",
    "content": "\n// Copyright (C) 2009-2012 Lorenzo Caminiti\n// Distributed under the Boost Software License, Version 1.0\n// (see accompanying file LICENSE_1_0.txt or a copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n// Home at http://www.boost.org/libs/functional/overloaded_function\n\n#ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_HPP_\n#define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_HPP_\n\n/** @file\n@brief Change the compile-time configuration of this library.\n*/\n\n/**\n@brief Specify the maximum number of arguments of the functions being\noverloaded.\n\nIf this macro is left undefined by the user, it has a default value of 5\n(increasing this number might increase compilation time).\nWhen specified by the user, this macro must be a non-negative integer number.\n\n@See @RefSect{getting_started, Getting Started},\n@RefClass{boost::overloaded_function}.\n*/\n#ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX \n#   define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX 5\n#endif\n\n/**\n@brief Specify the maximum number of functions that can be overloaded.\n\nIf this macro is left undefined by the user, it has a default value of 5\n(increasing this number might increase compilation time).\nWhen defined by the user, this macro must be an integer number greater or\nequal than 2 (because at least two distinct functions need to be specified in\norder to define an overload).\n\n@See @RefSect{getting_started, Getting Started},\n@RefClass{boost::overloaded_function}.\n*/\n#ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX\n#   define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX 5\n#endif\n#if BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX < 2\n#   error \"maximum overload macro cannot be less than 2\"\n#endif\n\n#endif // #include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/overloaded_function/detail/base.hpp",
    "content": "\n// Copyright (C) 2009-2012 Lorenzo Caminiti\n// Distributed under the Boost Software License, Version 1.0\n// (see accompanying file LICENSE_1_0.txt or a copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n// Home at http://www.boost.org/libs/functional/overloaded_function\n\n#if !BOOST_PP_IS_ITERATING\n#   ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_DETAIL_BASE_HPP_\n#       define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_DETAIL_BASE_HPP_\n\n#       include <boost/functional/overloaded_function/config.hpp>\n#       include <boost/function.hpp>\n#       include <boost/preprocessor/iteration/iterate.hpp>\n#       include <boost/preprocessor/repetition/enum.hpp>\n#       include <boost/preprocessor/cat.hpp>\n#       include <boost/preprocessor/comma_if.hpp>\n\n#define BOOST_FUNCTIONAL_DETAIL_arg_type(z, n, unused) \\\n    BOOST_PP_CAT(A, n)\n\n#define BOOST_FUNCTIONAL_DETAIL_arg_name(z, n, unused) \\\n    BOOST_PP_CAT(a, n)\n\n#define BOOST_FUNCTIONAL_DETAIL_arg_tparam(z, n, unused) \\\n    typename BOOST_FUNCTIONAL_DETAIL_arg_type(z, n, unused)\n\n#define BOOST_FUNCTIONAL_DETAIL_arg(z, n, unused) \\\n    BOOST_FUNCTIONAL_DETAIL_arg_type(z, n, unused) \\\n    BOOST_FUNCTIONAL_DETAIL_arg_name(z, n, unused)\n\n#define BOOST_FUNCTIONAL_DETAIL_f \\\n    R (BOOST_PP_ENUM(BOOST_FUNCTIONAL_DETAIL_arity, \\\n            BOOST_FUNCTIONAL_DETAIL_arg_type, ~))\n\n// Do not use namespace ::detail because overloaded_function is already a class.\nnamespace boost { namespace overloaded_function_detail {\n\ntemplate<typename F>\nclass base {}; // Empty template cannot be used directly (only its spec).\n\n#       define BOOST_PP_ITERATION_PARAMS_1 \\\n                (3, (0, BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX, \\\n                \"boost/functional/overloaded_function/detail/base.hpp\"))\n#       include BOOST_PP_ITERATE() // Iterate over funciton arity.\n\n} } // namespace\n\n#undef BOOST_FUNCTIONAL_DETAIL_arg_type\n#undef BOOST_FUNCTIONAL_DETAIL_arg_name\n#undef BOOST_FUNCTIONAL_DETAIL_arg_tparam\n#undef BOOST_FUNCTIONAL_DETAIL_arg\n#undef BOOST_FUNCTIONAL_DETAIL_f\n\n#   endif // #include guard\n\n#elif BOOST_PP_ITERATION_DEPTH() == 1\n#   define BOOST_FUNCTIONAL_DETAIL_arity BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n    typename R\n    BOOST_PP_COMMA_IF(BOOST_FUNCTIONAL_DETAIL_arity)\n    BOOST_PP_ENUM(BOOST_FUNCTIONAL_DETAIL_arity,\n            BOOST_FUNCTIONAL_DETAIL_arg_tparam, ~)\n>\nclass base< BOOST_FUNCTIONAL_DETAIL_f > {\npublic:\n    /* implicit */ inline base(\n            // This requires specified type to be implicitly convertible to\n            // a boost::function<> functor.\n            boost::function< BOOST_FUNCTIONAL_DETAIL_f > const& f): f_(f)\n    {}\n\n    inline R operator()(BOOST_PP_ENUM(BOOST_FUNCTIONAL_DETAIL_arity,\n            BOOST_FUNCTIONAL_DETAIL_arg, ~)) const {\n        return f_(BOOST_PP_ENUM(BOOST_FUNCTIONAL_DETAIL_arity,\n                BOOST_FUNCTIONAL_DETAIL_arg_name, ~));\n    }\n\nprivate:\n    boost::function< BOOST_FUNCTIONAL_DETAIL_f > const f_;\n};\n\n#   undef BOOST_FUNCTIONAL_DETAIL_arity\n#endif // iteration\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/overloaded_function/detail/function_type.hpp",
    "content": "\n// Copyright (C) 2009-2012 Lorenzo Caminiti\n// Distributed under the Boost Software License, Version 1.0\n// (see accompanying file LICENSE_1_0.txt or a copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n// Home at http://www.boost.org/libs/functional/overloaded_function\n\n#ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_DETAIL_FUNCTION_TYPE_HPP_\n#define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_DETAIL_FUNCTION_TYPE_HPP_\n\n#include <boost/function_types/is_function.hpp>\n#include <boost/function_types/is_function_pointer.hpp>\n#include <boost/function_types/is_function_reference.hpp>\n#include <boost/function_types/function_type.hpp>\n#include <boost/function_types/parameter_types.hpp>\n#include <boost/function_types/result_type.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/function.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/pop_front.hpp>\n#include <boost/mpl/push_front.hpp>\n#include <boost/typeof/typeof.hpp>\n\n// Do not use namespace ::detail because overloaded_function is already a class.\nnamespace boost { namespace overloaded_function_detail {\n\n// Requires: F is a monomorphic functor (i.e., has non-template `operator()`).\n// Returns: F's function type `result_type (arg1_type, arg2_type, ...)`.\n// It does not assume F typedef result_type, arg1_type, ... but needs typeof.\ntemplate<typename F>\nclass functor_type {\n    // NOTE: clang does not accept extra parenthesis `&(...)`.\n    typedef BOOST_TYPEOF_TPL(&F::operator()) call_ptr;\npublic:\n    typedef\n        typename boost::function_types::function_type<\n            typename boost::mpl::push_front<\n                  typename boost::mpl::pop_front< // Remove functor type (1st).\n                    typename boost::function_types::parameter_types<\n                            call_ptr>::type\n                  >::type\n                , typename boost::function_types::result_type<call_ptr>::type\n            >::type\n        >::type\n    type;\n};\n\n// NOTE: When using boost::function in Boost.Typeof emulation mode, the user\n// has to register boost::functionN instead of boost::function in oder to\n// do TYPEOF(F::operator()). That is confusing, so boost::function is handled\n// separately so it does not require any Boost.Typeof registration at all.\ntemplate<typename F>\nstruct functor_type< boost::function<F> > {\n    typedef F type;\n};\n\n// Requires: F is a function type, pointer, reference, or monomorphic functor.\n// Returns: F's function type `result_type (arg1_type, arg2_type, ...)`.\ntemplate<typename F>\nstruct function_type {\n    typedef\n        typename boost::mpl::if_<boost::function_types::is_function<F>,\n            boost::mpl::identity<F>\n        ,\n            typename boost::mpl::if_<boost::function_types::\n                    is_function_pointer<F>,\n                boost::remove_pointer<F>\n            ,\n                typename boost::mpl::if_<boost::function_types::\n                        is_function_reference<F>,\n                    boost::remove_reference<F>\n                , // Else, requires that F is a functor.\n                    functor_type<F>\n                >::type\n            >::type\n        >::type\n    ::type type;\n};\n\n} } // namespace\n\n#endif // #include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/overloaded_function.hpp",
    "content": "\n// Copyright (C) 2009-2012 Lorenzo Caminiti\n// Distributed under the Boost Software License, Version 1.0\n// (see accompanying file LICENSE_1_0.txt or a copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n// Home at http://www.boost.org/libs/functional/overloaded_function\n\n#ifndef DOXYGEN // Doxygen documentation only.\n\n#if !BOOST_PP_IS_ITERATING\n#   ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_HPP_\n#       define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_HPP_\n\n#       include <boost/functional/overloaded_function/detail/base.hpp>\n#       include <boost/functional/overloaded_function/detail/function_type.hpp>\n#       include <boost/functional/overloaded_function/config.hpp>\n#       include <boost/typeof/typeof.hpp>\n#       include <boost/preprocessor/iteration/iterate.hpp>\n#       include <boost/preprocessor/repetition/enum.hpp>\n#       include <boost/preprocessor/repetition/repeat.hpp>\n#       include <boost/preprocessor/control/expr_iif.hpp>\n#       include <boost/preprocessor/control/expr_if.hpp>\n#       include <boost/preprocessor/comparison/greater.hpp>\n#       include <boost/preprocessor/comparison/less.hpp>\n#       include <boost/preprocessor/cat.hpp>\n#       include <boost/preprocessor/arithmetic/add.hpp>\n#       include <boost/preprocessor/arithmetic/sub.hpp>\n#       include <boost/preprocessor/tuple/eat.hpp>\n#       include <boost/preprocessor/logical/and.hpp>\n#       include <boost/preprocessor/logical/not.hpp>\n#       include <boost/preprocessor/facilities/expand.hpp>\n\n#define BOOST_FUNCTIONAL_f_type(z, n, unused) \\\n    BOOST_PP_CAT(F, n)\n\n#define BOOST_FUNCTIONAL_f_arg(z, n, unused) \\\n    BOOST_PP_CAT(f, n)\n\n#define BOOST_FUNCTIONAL_f_tparam(z, n, unused) \\\n    typename BOOST_FUNCTIONAL_f_type(z, n, ~) \\\n\n#define BOOST_FUNCTIONAL_f_tparam_dflt(z, n, is_tspec) \\\n    BOOST_FUNCTIONAL_f_tparam(z, n, ~) \\\n    /* overload requires at least 2 functors so F0 and F1 not optional */ \\\n    BOOST_PP_EXPR_IIF(BOOST_PP_AND(BOOST_PP_NOT(is_tspec), \\\n            BOOST_PP_GREATER(n, 1)), \\\n        = void \\\n    )\n\n#define BOOST_FUNCTIONAL_f_arg_decl(z, n, unused) \\\n    BOOST_FUNCTIONAL_f_type(z, n, ~) /* no qualifier to deduce tparam */ \\\n    BOOST_FUNCTIONAL_f_arg(z, n, ~)\n\n#define BOOST_FUNCTIONAL_g_type(z, n, unused) \\\n    BOOST_PP_CAT(G, n)\n\n#define BOOST_FUNCTIONAL_g_arg(z, n, unused) \\\n    BOOST_PP_CAT(g, n)\n\n#define BOOST_FUNCTIONAL_g_tparam(z, n, unused) \\\n    typename BOOST_FUNCTIONAL_g_type(z, n, ~)\n\n#define BOOST_FUNCTIONAL_g_arg_decl(z, n, unused) \\\n    BOOST_FUNCTIONAL_g_type(z, n, ~) /* no qualifier to deduce tparam */ \\\n    BOOST_FUNCTIONAL_g_arg(z, n, ~)\n\n#define BOOST_FUNCTIONAL_base(z, n, unused) \\\n    ::boost::overloaded_function_detail::base< \\\n        BOOST_FUNCTIONAL_f_type(z, n, ~) \\\n    >\n\n#define BOOST_FUNCTIONAL_inherit(z, n, unused) \\\n    public BOOST_FUNCTIONAL_base(z, n, ~)\n\n#define BOOST_FUNCTIONAL_base_init(z, n, unused) \\\n    BOOST_FUNCTIONAL_base(z, n, ~)(BOOST_FUNCTIONAL_g_arg(z, n, ~))\n\n#define BOOST_FUNCTIONAL_using_operator_call(z, n, unused) \\\n    using BOOST_FUNCTIONAL_base(z, n, ~)::operator();\n\n#define BOOST_FUNCTIONAL_function_type(z, n, unused) \\\n    typename ::boost::overloaded_function_detail::function_type< \\\n        BOOST_FUNCTIONAL_f_type(z, n, ~) \\\n    >::type\n\n#       define BOOST_PP_ITERATION_PARAMS_1 \\\n            /* at least 2 func to overload so start from 2 to MAX */ \\\n            /* (cannot iterate [0, MAX-2) because error on Sun) */ \\\n            (3, (2, BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX, \\\n            \"boost/functional/overloaded_function.hpp\"))\n#       include BOOST_PP_ITERATE() // Iterate over function arity.\n\n#undef BOOST_FUNCTIONAL_f_type\n#undef BOOST_FUNCTIONAL_f_arg\n#undef BOOST_FUNCTIONAL_f_tparam\n#undef BOOST_FUNCTIONAL_f_arg_decl\n#undef BOOST_FUNCTIONAL_f_tparam_dflt\n#undef BOOST_FUNCTIONAL_g_type\n#undef BOOST_FUNCTIONAL_g_arg\n#undef BOOST_FUNCTIONAL_g_tparam\n#undef BOOST_FUNCTIONAL_g_arg_decl\n#undef BOOST_FUNCTIONAL_base\n#undef BOOST_FUNCTIONAL_inherit\n#undef BOOST_FUNCTIONAL_base_init\n#undef BOOST_FUNCTIONAL_using_operator_call\n#undef BOOST_FUNCTIONAL_function_type\n\n#   endif // #include guard\n\n#elif BOOST_PP_ITERATION_DEPTH() == 1\n#   define BOOST_FUNCTIONAL_overloads \\\n        /* iterate as OVERLOADS, OVERLOADS-1, OVERLOADS-2, ... */ \\\n        /* (add 2 because iteration started from 2 to MAX) */ \\\n        BOOST_PP_ADD(2, BOOST_PP_SUB( \\\n                BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX, \\\n                BOOST_PP_FRAME_ITERATION(1)))\n#   define BOOST_FUNCTIONAL_is_tspec \\\n        /* if template specialization */ \\\n        BOOST_PP_LESS(BOOST_FUNCTIONAL_overloads, \\\n                BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX)\n\n// For type-of emulation: This must be included at this pp iteration level.\n#   include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()\n\nnamespace boost {\n\ntemplate<\n    BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_tparam_dflt,\n            BOOST_FUNCTIONAL_is_tspec)\n>\nclass overloaded_function\n    // Template specialization.\n    BOOST_PP_EXPR_IIF(BOOST_PP_EXPAND(BOOST_FUNCTIONAL_is_tspec), <)\n    BOOST_PP_IIF(BOOST_FUNCTIONAL_is_tspec,\n        BOOST_PP_ENUM\n    ,\n        BOOST_PP_TUPLE_EAT(3)\n    )(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_type, ~)\n    BOOST_PP_EXPR_IIF(BOOST_PP_EXPAND(BOOST_FUNCTIONAL_is_tspec), >)\n    // Bases (overloads >= 2 so always at least 2 bases).\n    : BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads,\n            BOOST_FUNCTIONAL_inherit, ~)\n{\npublic:\n    template<\n        BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_g_tparam, ~)\n    > /* implicit */ inline overloaded_function(\n            BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads,\n                    BOOST_FUNCTIONAL_g_arg_decl, ~))\n            // Overloads >= 2 so always at least 2 bases to initialize.\n            : BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads,\n                    BOOST_FUNCTIONAL_base_init, ~)\n    {}\n\n    BOOST_PP_REPEAT(BOOST_FUNCTIONAL_overloads, \n            BOOST_FUNCTIONAL_using_operator_call, ~)\n};\n\ntemplate<\n    BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_tparam, ~)\n>\noverloaded_function<\n    BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_function_type, ~)\n> make_overloaded_function(\n    BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_arg_decl, ~)\n) {\n    return overloaded_function<\n        BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads,\n                BOOST_FUNCTIONAL_function_type, ~)\n    >(BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_arg, ~));\n}\n\n} // namespace\n\n// For type-of emulation: Register overloaded function type (for _AUTO, etc).\nBOOST_TYPEOF_REGISTER_TEMPLATE(boost::overloaded_function,\n    BOOST_FUNCTIONAL_overloads)\n\n#   undef BOOST_FUNCTIONAL_overloads\n#   undef BOOST_FUNCTIONAL_is_tspec\n#endif // iteration\n\n// DOCUMENTATION //\n\n#else // DOXYGEN\n\n/** @file\n@brief Overload distinct function pointers, function references, and\nmonomorphic function objects into a single function object.\n*/\n\nnamespace boost {\n\n/**\n@brief Function object to overload functions with distinct signatures.\n\nThis function object aggregates together calls to functions of all the\nspecified function types <c>F1</c>, <c>F2</c>, etc which must have distinct\nfunction signatures from one another.\n\n@Params\n@Param{F<em>i</em>,\nEach function type must be specified using the following syntax (which is\nBoost.Function's preferred syntax):\n@code\n    result_type (argument1_type\\, argumgnet2_type\\, ...)\n@endcode\n}\n@EndParams\n\nIn some cases, the @RefFunc{make_overloaded_function} function template can be\nuseful to construct an overloaded function object without explicitly\nspecifying the function types.\n\nAt least two distinct function types must be specified (because there is\nnothing to overload between one or zero functions).\nThe maximum number of functions to overload is given by the\n@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX}\nconfiguration macro.\nThe maximum number of function parameters for each of the specified function\ntypes is given by the\n@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX}\nconfiguration macro.\n\n@See @RefSect{tutorial, Tutorial} section, @RefFunc{make_overloaded_function},\n@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX},\n@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX},\nBoost.Function.\n*/\ntemplate<typename F1, typename F2, ...>\nclass overloaded_function {\npublic:\n    /**\n    @brief Construct the overloaded function object.\n\n    Any function pointer, function reference, and monomorphic function object\n    that can be converted to a <c>boost::function</c> function object can be\n    specified as parameter.\n\n    @Note Unfortunately, it is not possible to support polymorphic function\n    objects (as explained <a\n    href=\"http://lists.boost.org/Archives/boost/2012/03/191744.php\">here</a>).\n    */\n    overloaded_function(const boost::function<F1>&,\n            const boost::function<F2>&, ...);\n\n    /**\n    @brief Call operator matching the signature of the function type specified\n    as 1st template parameter.\n\n    This will in turn invoke the call operator of the 1st function passed to\n    the constructor.\n    */\n    typename boost::function_traits<F1>::result_type operator()(\n            typename boost::function_traits<F1>::arg1_type,\n            typename boost::function_traits<F1>::arg2_type,\n            ...) const;\n\n    /**\n    @brief Call operator matching the signature of the function type specified\n    as 2nd template parameter.\n\n    This will in turn invoke the call operator of the 2nd function passed to\n    the constructor.\n\n    @Note Similar call operators are present for all specified function types\n    <c>F1</c>, <c>F2</c>, etc (even if not exhaustively listed by this\n    documentation).\n    */\n    typename boost::function_traits<F2>::result_type operator()(\n            typename boost::function_traits<F2>::arg1_type,\n            typename boost::function_traits<F2>::arg2_type,\n            ...) const;\n};\n\n/**\n@brief Make an overloaded function object without explicitly specifying the\nfunction types.\n\nThis function template creates and returns an @RefClass{overloaded_function}\nobject that overloads all the specified functions <c>f1</c>, <c>f2</c>, etc.\n\nThe function types are internally determined from the template parameter types\nso they do not need to be explicitly specified.\nTherefore, this function template usually has a more concise syntax when\ncompared with @RefClass{overloaded_function}.\nThis is especially useful when the explicit type of the returned\n@RefClass{overloaded_function} object does not need to be known (e.g., when\nused with Boost.Typeof's <c>BOOST_AUTO</c>, C++11 <c>auto</c>, or when the\noverloaded function object is handled using a function template parameter, see\nthe @RefSect{tutorial, Tutorial} section).\n\nThe maximum number of functions to overload is given by the\n@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX}\nconfiguration macro.\n\n@Note In this documentation, <c>__function_type__</c> is a placeholder for a\nsymbol that is specific to the implementation of this library.\n\n@See @RefSect{tutorial, Tutorial} section, @RefClass{overloaded_function},\n@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX}.\n*/\ntemplate<typename F1, typename F2, ...>\noverloaded_function<\n    __function_type__<F1>, __function_type__<F2>, ...\n> make_overloaded_function(F1 f1, F2 f2, ...);\n\n} // namespace\n\n#endif // DOXYGEN\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/functional/value_factory.hpp",
    "content": "/*=============================================================================\n    Copyright (c) 2007 Tobias Schwinger\n  \n    Use modification and distribution are subject to the Boost Software \n    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n    http://www.boost.org/LICENSE_1_0.txt).\n==============================================================================*/\n\n#ifndef BOOST_FUNCTIONAL_VALUE_FACTORY_HPP_INCLUDED\n#   ifndef BOOST_PP_IS_ITERATING\n\n#     include <boost/preprocessor/iteration/iterate.hpp>\n#     include <boost/preprocessor/repetition/enum_params.hpp>\n#     include <boost/preprocessor/repetition/enum_binary_params.hpp>\n\n#     include <new>\n#     include <boost/pointee.hpp>\n#     include <boost/get_pointer.hpp>\n#     include <boost/non_type.hpp>\n#     include <boost/type_traits/remove_cv.hpp>\n\n#     ifndef BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY\n#       define BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY 10\n#     elif BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY < 3\n#       undef  BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY\n#       define BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY 3\n#     endif\n\nnamespace boost\n{\n    template< typename T >\n    class value_factory;\n\n    //----- ---- --- -- - -  -   -\n\n    template< typename T >\n    class value_factory\n    {\n      public:\n        typedef T result_type;\n\n        value_factory()\n        { }\n\n#     define BOOST_PP_FILENAME_1 <boost/functional/value_factory.hpp>\n#     define BOOST_PP_ITERATION_LIMITS (0,BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY)\n#     include BOOST_PP_ITERATE()\n    };\n\n    template< typename T > class value_factory<T&>;\n    // forbidden, would create a dangling reference\n}\n#     define BOOST_FUNCTIONAL_VALUE_FACTORY_HPP_INCLUDED\n#   else // defined(BOOST_PP_IS_ITERATING)\n\n#     define N BOOST_PP_ITERATION()\n#     if N > 0\n    template< BOOST_PP_ENUM_PARAMS(N, typename T) >\n#     endif\n    inline result_type operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,& a)) const\n    {\n        return result_type(BOOST_PP_ENUM_PARAMS(N,a));\n    }\n#     undef N\n\n#   endif // defined(BOOST_PP_IS_ITERATING)\n\n#endif // include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/get_pointer.hpp",
    "content": "// Copyright Peter Dimov and David Abrahams 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef GET_POINTER_DWA20021219_HPP\n#define GET_POINTER_DWA20021219_HPP\n\n#include <boost/config.hpp>\n\n// In order to avoid circular dependencies with Boost.TR1\n// we make sure that our include of <memory> doesn't try to\n// pull in the TR1 headers: that's why we use this header \n// rather than including <memory> directly:\n#include <boost/config/no_tr1/memory.hpp>  // std::auto_ptr\n\nnamespace boost { \n\n// get_pointer(p) extracts a ->* capable pointer from p\n\ntemplate<class T> T * get_pointer(T * p)\n{\n    return p;\n}\n\n// get_pointer(shared_ptr<T> const & p) has been moved to shared_ptr.hpp\n\n#if !defined( BOOST_NO_AUTO_PTR )\n\n#if defined( __GNUC__ ) && (defined( __GXX_EXPERIMENTAL_CXX0X__ ) || (__cplusplus >= 201103L))\n#if defined( BOOST_GCC )\n#if BOOST_GCC >= 40600\n#define BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS\n#endif // BOOST_GCC >= 40600\n#elif defined( __clang__ ) && defined( __has_warning )\n#if __has_warning(\"-Wdeprecated-declarations\")\n#define BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS\n#endif // __has_warning(\"-Wdeprecated-declarations\")\n#endif\n#endif // defined( __GNUC__ ) && (defined( __GXX_EXPERIMENTAL_CXX0X__ ) || (__cplusplus >= 201103L))\n\n#if defined( BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS )\n// Disable libstdc++ warnings about std::auto_ptr being deprecated in C++11 mode\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n#define BOOST_CORE_DETAIL_DISABLED_DEPRECATED_WARNINGS\n#endif\n\ntemplate<class T> T * get_pointer(std::auto_ptr<T> const& p)\n{\n    return p.get();\n}\n\n#if defined( BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS )\n#pragma GCC diagnostic pop\n#undef BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS\n#endif\n\n#endif // !defined( BOOST_NO_AUTO_PTR )\n\n#if !defined( BOOST_NO_CXX11_SMART_PTR )\n\ntemplate<class T> T * get_pointer( std::unique_ptr<T> const& p )\n{\n    return p.get();\n}\n\ntemplate<class T> T * get_pointer( std::shared_ptr<T> const& p )\n{\n    return p.get();\n}\n\n#endif\n\n} // namespace boost\n\n#endif // GET_POINTER_DWA20021219_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/integer.hpp",
    "content": "//  boost integer.hpp header file  -------------------------------------------//\n\n//  Copyright Beman Dawes and Daryle Walker 1999.  Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/integer for documentation.\n\n//  Revision History\n//   22 Sep 01  Added value-based integer templates. (Daryle Walker)\n//   01 Apr 01  Modified to use new <boost/limits.hpp> header. (John Maddock)\n//   30 Jul 00  Add typename syntax fix (Jens Maurer)\n//   28 Aug 99  Initial version\n\n#ifndef BOOST_INTEGER_HPP\n#define BOOST_INTEGER_HPP\n\n#include <boost/integer_fwd.hpp>  // self include\n\n#include <boost/integer_traits.hpp>  // for boost::::boost::integer_traits\n#include <boost/limits.hpp>          // for ::std::numeric_limits\n#include <boost/cstdint.hpp>         // for boost::int64_t and BOOST_NO_INTEGRAL_INT64_T\n#include <boost/static_assert.hpp>\n\n//\n// We simply cannot include this header on gcc without getting copious warnings of the kind:\n//\n// boost/integer.hpp:77:30: warning: use of C99 long long integer constant\n//\n// And yet there is no other reasonable implementation, so we declare this a system header\n// to suppress these warnings.\n//\n#if defined(__GNUC__) && (__GNUC__ >= 4)\n#pragma GCC system_header\n#endif\n\nnamespace boost\n{\n\n  //  Helper templates  ------------------------------------------------------//\n\n  //  fast integers from least integers\n  //  int_fast_t<> works correctly for unsigned too, in spite of the name.\n  template< typename LeastInt >\n  struct int_fast_t\n  {\n     typedef LeastInt fast;\n     typedef fast     type;\n  }; // imps may specialize\n\n  namespace detail{\n\n  //  convert category to type\n  template< int Category > struct int_least_helper {}; // default is empty\n  template< int Category > struct uint_least_helper {}; // default is empty\n\n  //  specializatons: 1=long, 2=int, 3=short, 4=signed char,\n  //     6=unsigned long, 7=unsigned int, 8=unsigned short, 9=unsigned char\n  //  no specializations for 0 and 5: requests for a type > long are in error\n#ifdef BOOST_HAS_LONG_LONG\n  template<> struct int_least_helper<1> { typedef boost::long_long_type least; };\n#elif defined(BOOST_HAS_MS_INT64)\n  template<> struct int_least_helper<1> { typedef __int64 least; };\n#endif\n  template<> struct int_least_helper<2> { typedef long least; };\n  template<> struct int_least_helper<3> { typedef int least; };\n  template<> struct int_least_helper<4> { typedef short least; };\n  template<> struct int_least_helper<5> { typedef signed char least; };\n#ifdef BOOST_HAS_LONG_LONG\n  template<> struct uint_least_helper<1> { typedef boost::ulong_long_type least; };\n#elif defined(BOOST_HAS_MS_INT64)\n  template<> struct uint_least_helper<1> { typedef unsigned __int64 least; };\n#endif\n  template<> struct uint_least_helper<2> { typedef unsigned long least; };\n  template<> struct uint_least_helper<3> { typedef unsigned int least; };\n  template<> struct uint_least_helper<4> { typedef unsigned short least; };\n  template<> struct uint_least_helper<5> { typedef unsigned char least; };\n\n  template <int Bits>\n  struct exact_signed_base_helper{};\n  template <int Bits>\n  struct exact_unsigned_base_helper{};\n\n  template <> struct exact_signed_base_helper<sizeof(signed char)* CHAR_BIT> { typedef signed char exact; };\n  template <> struct exact_unsigned_base_helper<sizeof(unsigned char)* CHAR_BIT> { typedef unsigned char exact; };\n#if USHRT_MAX != UCHAR_MAX\n  template <> struct exact_signed_base_helper<sizeof(short)* CHAR_BIT> { typedef short exact; };\n  template <> struct exact_unsigned_base_helper<sizeof(unsigned short)* CHAR_BIT> { typedef unsigned short exact; };\n#endif\n#if UINT_MAX != USHRT_MAX\n  template <> struct exact_signed_base_helper<sizeof(int)* CHAR_BIT> { typedef int exact; };\n  template <> struct exact_unsigned_base_helper<sizeof(unsigned int)* CHAR_BIT> { typedef unsigned int exact; };\n#endif\n#if ULONG_MAX != UINT_MAX && ( !defined __TI_COMPILER_VERSION__ || \\\n    ( __TI_COMPILER_VERSION__ >= 7000000 && !defined __TI_40BIT_LONG__ ) )\n  template <> struct exact_signed_base_helper<sizeof(long)* CHAR_BIT> { typedef long exact; };\n  template <> struct exact_unsigned_base_helper<sizeof(unsigned long)* CHAR_BIT> { typedef unsigned long exact; };\n#endif\n#if defined(BOOST_HAS_LONG_LONG) &&\\\n   ((defined(ULLONG_MAX) && (ULLONG_MAX != ULONG_MAX)) ||\\\n    (defined(ULONG_LONG_MAX) && (ULONG_LONG_MAX != ULONG_MAX)) ||\\\n    (defined(ULONGLONG_MAX) && (ULONGLONG_MAX != ULONG_MAX)) ||\\\n    (defined(_ULLONG_MAX) && (_ULLONG_MAX != ULONG_MAX)))\n  template <> struct exact_signed_base_helper<sizeof(boost::long_long_type)* CHAR_BIT> { typedef boost::long_long_type exact; };\n  template <> struct exact_unsigned_base_helper<sizeof(boost::ulong_long_type)* CHAR_BIT> { typedef boost::ulong_long_type exact; };\n#endif\n\n\n  } // namespace detail\n\n  //  integer templates specifying number of bits  ---------------------------//\n\n  //  signed\n  template< int Bits >   // bits (including sign) required\n  struct int_t : public boost::detail::exact_signed_base_helper<Bits>\n  {\n      BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(boost::intmax_t) * CHAR_BIT),\n         \"No suitable signed integer type with the requested number of bits is available.\");\n      typedef typename boost::detail::int_least_helper\n        <\n#ifdef BOOST_HAS_LONG_LONG\n          (Bits <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +\n#else\n           1 +\n#endif\n          (Bits-1 <= ::std::numeric_limits<long>::digits) +\n          (Bits-1 <= ::std::numeric_limits<int>::digits) +\n          (Bits-1 <= ::std::numeric_limits<short>::digits) +\n          (Bits-1 <= ::std::numeric_limits<signed char>::digits)\n        >::least  least;\n      typedef typename int_fast_t<least>::type  fast;\n  };\n\n  //  unsigned\n  template< int Bits >   // bits required\n  struct uint_t : public boost::detail::exact_unsigned_base_helper<Bits>\n  {\n     BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(boost::uintmax_t) * CHAR_BIT),\n         \"No suitable unsigned integer type with the requested number of bits is available.\");\n#if (defined(__BORLANDC__) || defined(__CODEGEAR__)) && defined(BOOST_NO_INTEGRAL_INT64_T)\n     // It's really not clear why this workaround should be needed... shrug I guess!  JM\n     BOOST_STATIC_CONSTANT(int, s =\n           6 +\n          (Bits <= ::std::numeric_limits<unsigned long>::digits) +\n          (Bits <= ::std::numeric_limits<unsigned int>::digits) +\n          (Bits <= ::std::numeric_limits<unsigned short>::digits) +\n          (Bits <= ::std::numeric_limits<unsigned char>::digits));\n     typedef typename detail::int_least_helper< ::boost::uint_t<Bits>::s>::least least;\n#else\n      typedef typename boost::detail::uint_least_helper\n        <\n#ifdef BOOST_HAS_LONG_LONG\n          (Bits <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +\n#else\n           1 +\n#endif\n          (Bits <= ::std::numeric_limits<unsigned long>::digits) +\n          (Bits <= ::std::numeric_limits<unsigned int>::digits) +\n          (Bits <= ::std::numeric_limits<unsigned short>::digits) +\n          (Bits <= ::std::numeric_limits<unsigned char>::digits)\n        >::least  least;\n#endif\n      typedef typename int_fast_t<least>::type  fast;\n      // int_fast_t<> works correctly for unsigned too, in spite of the name.\n  };\n\n  //  integer templates specifying extreme value  ----------------------------//\n\n  //  signed\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)\n  template< boost::long_long_type MaxValue >   // maximum value to require support\n#else\n  template< long MaxValue >   // maximum value to require support\n#endif\n  struct int_max_value_t\n  {\n      typedef typename boost::detail::int_least_helper\n        <\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)\n          (MaxValue <= ::boost::integer_traits<boost::long_long_type>::const_max) +\n#else\n           1 +\n#endif\n          (MaxValue <= ::boost::integer_traits<long>::const_max) +\n          (MaxValue <= ::boost::integer_traits<int>::const_max) +\n          (MaxValue <= ::boost::integer_traits<short>::const_max) +\n          (MaxValue <= ::boost::integer_traits<signed char>::const_max)\n        >::least  least;\n      typedef typename int_fast_t<least>::type  fast;\n  };\n\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)\n  template< boost::long_long_type MinValue >   // minimum value to require support\n#else\n  template< long MinValue >   // minimum value to require support\n#endif\n  struct int_min_value_t\n  {\n      typedef typename boost::detail::int_least_helper\n        <\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)\n          (MinValue >= ::boost::integer_traits<boost::long_long_type>::const_min) +\n#else\n           1 +\n#endif\n          (MinValue >= ::boost::integer_traits<long>::const_min) +\n          (MinValue >= ::boost::integer_traits<int>::const_min) +\n          (MinValue >= ::boost::integer_traits<short>::const_min) +\n          (MinValue >= ::boost::integer_traits<signed char>::const_min)\n        >::least  least;\n      typedef typename int_fast_t<least>::type  fast;\n  };\n\n  //  unsigned\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)\n  template< boost::ulong_long_type MaxValue >   // minimum value to require support\n#else\n  template< unsigned long MaxValue >   // minimum value to require support\n#endif\n  struct uint_value_t\n  {\n#if (defined(__BORLANDC__) || defined(__CODEGEAR__))\n     // It's really not clear why this workaround should be needed... shrug I guess!  JM\n#if defined(BOOST_NO_INTEGRAL_INT64_T)\n      BOOST_STATIC_CONSTANT(unsigned, which =\n           1 +\n          (MaxValue <= ::boost::integer_traits<unsigned long>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned int>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned short>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned char>::const_max));\n      typedef typename detail::int_least_helper< ::boost::uint_value_t<MaxValue>::which>::least least;\n#else // BOOST_NO_INTEGRAL_INT64_T\n      BOOST_STATIC_CONSTANT(unsigned, which =\n           1 +\n          (MaxValue <= ::boost::integer_traits<boost::ulong_long_type>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned long>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned int>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned short>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned char>::const_max));\n      typedef typename detail::uint_least_helper< ::boost::uint_value_t<MaxValue>::which>::least least;\n#endif // BOOST_NO_INTEGRAL_INT64_T\n#else\n      typedef typename boost::detail::uint_least_helper\n        <\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)\n          (MaxValue <= ::boost::integer_traits<boost::ulong_long_type>::const_max) +\n#else\n           1 +\n#endif\n          (MaxValue <= ::boost::integer_traits<unsigned long>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned int>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned short>::const_max) +\n          (MaxValue <= ::boost::integer_traits<unsigned char>::const_max)\n        >::least  least;\n#endif\n      typedef typename int_fast_t<least>::type  fast;\n  };\n\n\n} // namespace boost\n\n#endif  // BOOST_INTEGER_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/integer_fwd.hpp",
    "content": "//  Boost integer_fwd.hpp header file  ---------------------------------------//\n\n//  (C) Copyright Dave Abrahams and Daryle Walker 2001. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/integer for documentation.\n\n#ifndef BOOST_INTEGER_FWD_HPP\n#define BOOST_INTEGER_FWD_HPP\n\n#include <climits>  // for UCHAR_MAX, etc.\n#include <cstddef>  // for std::size_t\n\n#include <boost/config.hpp>  // for BOOST_NO_INTRINSIC_WCHAR_T\n#include <boost/limits.hpp>  // for std::numeric_limits\n#include <boost/cstdint.hpp>  // For intmax_t\n\n\nnamespace boost\n{\n\n#ifdef BOOST_NO_INTEGRAL_INT64_T\n     typedef unsigned long static_log2_argument_type;\n     typedef          int  static_log2_result_type;\n     typedef long          static_min_max_signed_type;\n     typedef unsigned long static_min_max_unsigned_type;\n#else\n     typedef boost::uintmax_t static_min_max_unsigned_type;\n     typedef boost::intmax_t  static_min_max_signed_type;\n     typedef boost::uintmax_t static_log2_argument_type;\n     typedef int              static_log2_result_type;\n#endif\n\n//  From <boost/cstdint.hpp>  ------------------------------------------------//\n\n// Only has typedefs or using statements, with #conditionals\n\n\n//  From <boost/integer_traits.hpp>  -----------------------------------------//\n\ntemplate < class T >\n    class integer_traits;\n\ntemplate <  >\n    class integer_traits< bool >;\n\ntemplate <  >\n    class integer_traits< char >;\n\ntemplate <  >\n    class integer_traits< signed char >;\n\ntemplate <  >\n    class integer_traits< unsigned char >;\n\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\ntemplate <  >\n    class integer_traits< wchar_t >;\n#endif\n\ntemplate <  >\n    class integer_traits< short >;\n\ntemplate <  >\n    class integer_traits< unsigned short >;\n\ntemplate <  >\n    class integer_traits< int >;\n\ntemplate <  >\n    class integer_traits< unsigned int >;\n\ntemplate <  >\n    class integer_traits< long >;\n\ntemplate <  >\n    class integer_traits< unsigned long >;\n\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)\ntemplate <  >\nclass integer_traits<  ::boost::long_long_type>;\n\ntemplate <  >\nclass integer_traits<  ::boost::ulong_long_type >;\n#elif !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_MS_INT64)\ntemplate <  >\nclass integer_traits<__int64>;\n\ntemplate <  >\nclass integer_traits<unsigned __int64>;\n#endif\n\n\n//  From <boost/integer.hpp>  ------------------------------------------------//\n\ntemplate < typename LeastInt >\n    struct int_fast_t;\n\ntemplate< int Bits >\n    struct int_t;\n\ntemplate< int Bits >\n    struct uint_t;\n\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)\n    template< boost::long_long_type MaxValue >   // maximum value to require support\n#else\n  template< long MaxValue >   // maximum value to require support\n#endif\n    struct int_max_value_t;\n\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)\n  template< boost::long_long_type MinValue >   // minimum value to require support\n#else\n  template< long MinValue >   // minimum value to require support\n#endif\n    struct int_min_value_t;\n\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)\n  template< boost::ulong_long_type MaxValue >   // maximum value to require support\n#else\n  template< unsigned long MaxValue >   // maximum value to require support\n#endif\n    struct uint_value_t;\n\n\n//  From <boost/integer/integer_mask.hpp>  -----------------------------------//\n\ntemplate < std::size_t Bit >\n    struct high_bit_mask_t;\n\ntemplate < std::size_t Bits >\n    struct low_bits_mask_t;\n\ntemplate <  >\n    struct low_bits_mask_t< ::std::numeric_limits<unsigned char>::digits >;\n\n//  From <boost/integer/static_log2.hpp>  ------------------------------------//\n\ntemplate <static_log2_argument_type Value >\n    struct static_log2;\n\ntemplate <> struct static_log2<0u>;\n\n\n//  From <boost/integer/static_min_max.hpp>  ---------------------------------//\n\ntemplate <static_min_max_signed_type Value1, static_min_max_signed_type Value2>\n    struct static_signed_min;\n\ntemplate <static_min_max_signed_type Value1, static_min_max_signed_type Value2>\n    struct static_signed_max;\n\ntemplate <static_min_max_unsigned_type Value1, static_min_max_unsigned_type Value2>\n    struct static_unsigned_min;\n\ntemplate <static_min_max_unsigned_type Value1, static_min_max_unsigned_type Value2>\n    struct static_unsigned_max;\n\n\n//  From <boost/integer/common_factor_ct.hpp>\n\n#ifdef BOOST_NO_INTEGRAL_INT64_T\n     typedef unsigned long static_gcd_type;\n#else\n     typedef boost::uintmax_t static_gcd_type;\n#endif\n\ntemplate < static_gcd_type Value1, static_gcd_type Value2 >\n    struct static_gcd;\ntemplate < static_gcd_type Value1, static_gcd_type Value2 >\n    struct static_lcm;\n\n\n//  From <boost/integer/common_factor_rt.hpp>\n\ntemplate < typename IntegerType >\n    class gcd_evaluator;\ntemplate < typename IntegerType >\n    class lcm_evaluator;\n\n\n}  // namespace boost\n\n\n#endif  // BOOST_INTEGER_FWD_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/integer_traits.hpp",
    "content": "/* boost integer_traits.hpp header file\n *\n * Copyright Jens Maurer 2000\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n *\n * $Id$\n *\n * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers\n */\n\n//  See http://www.boost.org/libs/integer for documentation.\n\n\n#ifndef BOOST_INTEGER_TRAITS_HPP\n#define BOOST_INTEGER_TRAITS_HPP\n\n#include <boost/config.hpp>\n#include <boost/limits.hpp>\n\n// These are an implementation detail and not part of the interface\n#include <limits.h>\n// we need wchar.h for WCHAR_MAX/MIN but not all platforms provide it,\n// and some may have <wchar.h> but not <cwchar> ...\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && (!defined(BOOST_NO_CWCHAR) || defined(sun) || defined(__sun) || defined(__QNX__))\n#include <wchar.h>\n#endif\n\n//\n// We simply cannot include this header on gcc without getting copious warnings of the kind:\n//\n// ../../../boost/integer_traits.hpp:164:66: warning: use of C99 long long integer constant\n//\n// And yet there is no other reasonable implementation, so we declare this a system header\n// to suppress these warnings.\n//\n#if defined(__GNUC__) && (__GNUC__ >= 4)\n#pragma GCC system_header\n#endif\n\nnamespace boost {\ntemplate<class T>\nclass integer_traits : public std::numeric_limits<T>\n{\npublic:\n  BOOST_STATIC_CONSTANT(bool, is_integral = false);\n};\n\nnamespace detail {\ntemplate<class T, T min_val, T max_val>\nclass integer_traits_base\n{\npublic:\n  BOOST_STATIC_CONSTANT(bool, is_integral = true);\n  BOOST_STATIC_CONSTANT(T, const_min = min_val);\n  BOOST_STATIC_CONSTANT(T, const_max = max_val);\n};\n\n#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION\n//  A definition is required even for integral static constants\ntemplate<class T, T min_val, T max_val>\nconst bool integer_traits_base<T, min_val, max_val>::is_integral;\n\ntemplate<class T, T min_val, T max_val>\nconst T integer_traits_base<T, min_val, max_val>::const_min;\n\ntemplate<class T, T min_val, T max_val>\nconst T integer_traits_base<T, min_val, max_val>::const_max;\n#endif\n\n} // namespace detail\n\ntemplate<>\nclass integer_traits<bool>\n  : public std::numeric_limits<bool>,\n    public detail::integer_traits_base<bool, false, true>\n{ };\n\ntemplate<>\nclass integer_traits<char>\n  : public std::numeric_limits<char>,\n    public detail::integer_traits_base<char, CHAR_MIN, CHAR_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<signed char>\n  : public std::numeric_limits<signed char>,\n    public detail::integer_traits_base<signed char, SCHAR_MIN, SCHAR_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<unsigned char>\n  : public std::numeric_limits<unsigned char>,\n    public detail::integer_traits_base<unsigned char, 0, UCHAR_MAX>\n{ };\n\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\ntemplate<>\nclass integer_traits<wchar_t>\n  : public std::numeric_limits<wchar_t>,\n    // Don't trust WCHAR_MIN and WCHAR_MAX with Mac OS X's native\n    // library: they are wrong!\n#if defined(WCHAR_MIN) && defined(WCHAR_MAX) && !defined(__APPLE__)\n    public detail::integer_traits_base<wchar_t, WCHAR_MIN, WCHAR_MAX>\n#elif defined(__BORLANDC__) || defined(__CYGWIN__) || defined(__MINGW32__) || (defined(__BEOS__) && defined(__GNUC__))\n    // No WCHAR_MIN and WCHAR_MAX, whar_t is short and unsigned:\n    public detail::integer_traits_base<wchar_t, 0, 0xffff>\n#elif (defined(__sgi) && (!defined(__SGI_STL_PORT) || __SGI_STL_PORT < 0x400))\\\n    || (defined __APPLE__)\\\n    || (defined(__OpenBSD__) && defined(__GNUC__))\\\n    || (defined(__NetBSD__) && defined(__GNUC__))\\\n    || (defined(__FreeBSD__) && defined(__GNUC__))\\\n    || (defined(__DragonFly__) && defined(__GNUC__))\\\n    || (defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 3) && !defined(__SGI_STL_PORT))\n    // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as int.\n    //  - SGI MIPSpro with native library\n    //  - gcc 3.x on HP-UX\n    //  - Mac OS X with native library\n    //  - gcc on FreeBSD, OpenBSD and NetBSD\n    public detail::integer_traits_base<wchar_t, INT_MIN, INT_MAX>\n#else\n#error No WCHAR_MIN and WCHAR_MAX present, please adjust integer_traits<> for your compiler.\n#endif\n{ };\n#endif // BOOST_NO_INTRINSIC_WCHAR_T\n\ntemplate<>\nclass integer_traits<short>\n  : public std::numeric_limits<short>,\n    public detail::integer_traits_base<short, SHRT_MIN, SHRT_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<unsigned short>\n  : public std::numeric_limits<unsigned short>,\n    public detail::integer_traits_base<unsigned short, 0, USHRT_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<int>\n  : public std::numeric_limits<int>,\n    public detail::integer_traits_base<int, INT_MIN, INT_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<unsigned int>\n  : public std::numeric_limits<unsigned int>,\n    public detail::integer_traits_base<unsigned int, 0, UINT_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<long>\n  : public std::numeric_limits<long>,\n    public detail::integer_traits_base<long, LONG_MIN, LONG_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<unsigned long>\n  : public std::numeric_limits<unsigned long>,\n    public detail::integer_traits_base<unsigned long, 0, ULONG_MAX>\n{ };\n\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T)\n#if defined(ULLONG_MAX) && defined(BOOST_HAS_LONG_LONG)\n\ntemplate<>\nclass integer_traits< ::boost::long_long_type>\n  : public std::numeric_limits< ::boost::long_long_type>,\n    public detail::integer_traits_base< ::boost::long_long_type, LLONG_MIN, LLONG_MAX>\n{ };\n\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULLONG_MAX>\n{ };\n\n#elif defined(ULONG_LONG_MAX) && defined(BOOST_HAS_LONG_LONG)\n\ntemplate<>\nclass integer_traits< ::boost::long_long_type>  : public std::numeric_limits< ::boost::long_long_type>,    public detail::integer_traits_base< ::boost::long_long_type, LONG_LONG_MIN, LONG_LONG_MAX>{ };\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONG_LONG_MAX>\n{ };\n\n#elif defined(ULONGLONG_MAX) && defined(BOOST_HAS_LONG_LONG)\n\ntemplate<>\nclass integer_traits< ::boost::long_long_type>\n  : public std::numeric_limits< ::boost::long_long_type>,\n    public detail::integer_traits_base< ::boost::long_long_type, LONGLONG_MIN, LONGLONG_MAX>\n{ };\n\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONGLONG_MAX>\n{ };\n\n#elif defined(_LLONG_MAX) && defined(_C2) && defined(BOOST_HAS_LONG_LONG)\n\ntemplate<>\nclass integer_traits< ::boost::long_long_type>\n  : public std::numeric_limits< ::boost::long_long_type>,\n    public detail::integer_traits_base< ::boost::long_long_type, -_LLONG_MAX - _C2, _LLONG_MAX>\n{ };\n\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, _ULLONG_MAX>\n{ };\n\n#elif defined(BOOST_HAS_LONG_LONG)\n//\n// we have long long but no constants, this happens for example with gcc in -ansi mode,\n// we'll just have to work out the values for ourselves (assumes 2's compliment representation):\n//\ntemplate<>\nclass integer_traits< ::boost::long_long_type>\n  : public std::numeric_limits< ::boost::long_long_type>,\n    public detail::integer_traits_base< ::boost::long_long_type, (1LL << (sizeof(::boost::long_long_type) * CHAR_BIT - 1)), ~(1LL << (sizeof(::boost::long_long_type) * CHAR_BIT - 1))>\n{ };\n\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, ~0uLL>\n{ };\n\n#elif defined(BOOST_HAS_MS_INT64)\n\ntemplate<>\nclass integer_traits< __int64>\n  : public std::numeric_limits< __int64>,\n    public detail::integer_traits_base< __int64, _I64_MIN, _I64_MAX>\n{ };\n\ntemplate<>\nclass integer_traits< unsigned __int64>\n  : public std::numeric_limits< unsigned __int64>,\n    public detail::integer_traits_base< unsigned __int64, 0, _UI64_MAX>\n{ };\n\n#endif\n#endif\n\n} // namespace boost\n\n#endif /* BOOST_INTEGER_TRAITS_HPP */\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/io/detail/quoted_manip.hpp",
    "content": "//  boost/io/quoted_manip.hpp  ---------------------------------------------------------//\n\n//  Copyright Beman Dawes 2010\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  Library home page http://www.boost.org/libs/io\n\n//--------------------------------------------------------------------------------------// \n\n#ifndef BOOST_IO_QUOTED_MANIP\n#define BOOST_IO_QUOTED_MANIP\n\n#include <iosfwd>\n#include <ios>\n#include <string>\n#include <iterator>\n#include <boost/io/ios_state.hpp>\n\nnamespace boost\n{\n  namespace io\n  {\n    namespace detail { template <class String, class Char> struct quoted_proxy; }\n\n    //  ------------  public interface  ------------------------------------------------//\n\n    //  manipulator for const std::basic_string&\n    template <class Char, class Traits, class Alloc>\n      detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> const &, Char>\n        quoted(const std::basic_string<Char, Traits, Alloc>& s,\n               Char escape='\\\\', Char delim='\\\"');\n\n    //  manipulator for non-const std::basic_string&\n    template <class Char, class Traits, class Alloc>\n      detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> &, Char>\n        quoted(std::basic_string<Char, Traits, Alloc>& s,\n               Char escape='\\\\', Char delim='\\\"');\n\n    //  manipulator for const C-string*\n    template <class Char>\n      detail::quoted_proxy<const Char*, Char>\n        quoted(const Char* s, Char escape='\\\\', Char delim='\\\"');\n\n    //  -----------  implementation details  -------------------------------------------//\n\n    namespace detail\n    {\n      //  proxy used as an argument pack \n      template <class String, class Char>\n      struct quoted_proxy\n      {\n        String  string;\n        Char    escape;\n        Char    delim;\n\n        quoted_proxy(String s_, Char escape_, Char delim_)\n          : string(s_), escape(escape_), delim(delim_) {}\n      private:\n        // String may be a const type, so disable the assignment operator\n        quoted_proxy& operator=(const quoted_proxy&);  // = deleted\n      };\n\n      //  abstract away difference between proxies with const or non-const basic_strings\n      template <class Char, class Traits, class Alloc>\n      std::basic_ostream<Char, Traits>&\n      basic_string_inserter_imp(std::basic_ostream<Char, Traits>& os,\n        std::basic_string<Char, Traits, Alloc> const & string, Char escape, Char delim)\n      {\n        os << delim;\n        typename std::basic_string<Char, Traits, Alloc>::const_iterator\n          end_it = string.end();\n        for (typename std::basic_string<Char, Traits, Alloc>::const_iterator\n          it = string.begin();\n          it != end_it;\n          ++it )\n        {\n          if (*it == delim || *it == escape)\n            os << escape;\n          os << *it;\n        }\n        os << delim;\n        return os;\n      }\n\n      //  inserter for const std::basic_string& proxies\n      template <class Char, class Traits, class Alloc>\n      inline\n      std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os, \n        const quoted_proxy<std::basic_string<Char, Traits, Alloc> const &, Char>& proxy)\n      {\n        return basic_string_inserter_imp(os, proxy.string, proxy.escape, proxy.delim);\n      }\n\n      //  inserter for non-const std::basic_string& proxies\n      template <class Char, class Traits, class Alloc>\n      inline\n      std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os, \n        const quoted_proxy<std::basic_string<Char, Traits, Alloc>&, Char>& proxy)\n      {\n        return basic_string_inserter_imp(os, proxy.string, proxy.escape, proxy.delim);\n      }\n \n      //  inserter for const C-string* proxies\n      template <class Char, class Traits>\n      std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os, \n        const quoted_proxy<const Char*, Char>& proxy)\n      {\n        os << proxy.delim;\n        for (const Char* it = proxy.string;\n          *it;\n          ++it )\n        {\n          if (*it == proxy.delim || *it == proxy.escape)\n            os << proxy.escape;\n          os << *it;\n        }\n        os << proxy.delim;\n        return os;\n      }\n\n      //  extractor for non-const std::basic_string& proxies\n      template <class Char, class Traits, class Alloc>\n      std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& is, \n        const quoted_proxy<std::basic_string<Char, Traits, Alloc>&, Char>& proxy)\n      {\n        proxy.string.clear();\n        Char c;\n        is >> c;\n        if (c != proxy.delim)\n        {\n          is.unget();\n          is >> proxy.string;\n          return is;\n        }\n        {\n          boost::io::ios_flags_saver ifs(is);\n          is >> std::noskipws;\n          for (;;)  \n          {\n            is >> c;\n            if (!is.good())  // cope with I/O errors or end-of-file\n              break;\n            if (c == proxy.escape)\n            {\n              is >> c;\n              if (!is.good())  // cope with I/O errors or end-of-file\n                break;\n            }\n            else if (c == proxy.delim)\n              break;\n            proxy.string += c;\n          }\n        }\n        return is;\n      }\n\n    }  // namespace detail\n\n    //  manipulator implementation for const std::basic_string&\n    template <class Char, class Traits, class Alloc>\n    inline detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> const &, Char>\n    quoted(const std::basic_string<Char, Traits, Alloc>& s, Char escape, Char delim)\n    {\n      return detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> const &, Char>\n        (s, escape, delim);\n    }\n\n    //  manipulator implementation for non-const std::basic_string&\n    template <class Char, class Traits, class Alloc>\n    inline detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> &, Char>\n    quoted(std::basic_string<Char, Traits, Alloc>& s, Char escape, Char delim)\n    {\n      return detail::quoted_proxy<std::basic_string<Char, Traits, Alloc>&, Char>\n        (s, escape, delim);\n    }\n\n    //  manipulator implementation for const C-string*\n    template <class Char>\n    inline detail::quoted_proxy<const Char*, Char>\n    quoted(const Char* s, Char escape, Char delim)\n    {\n      return detail::quoted_proxy<const Char*, Char> (s, escape, delim);\n    }\n\n  }  // namespace io\n}  // namespace boost\n\n#endif // BOOST_IO_QUOTED_MANIP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/io/ios_state.hpp",
    "content": "//  Boost io/ios_state.hpp header file  --------------------------------------//\n\n//  Copyright 2002, 2005 Daryle Walker.  Use, modification, and distribution\n//  are subject to the Boost Software License, Version 1.0.  (See accompanying\n//  file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)\n\n//  See <http://www.boost.org/libs/io/> for the library's home page.\n\n#ifndef BOOST_IO_IOS_STATE_HPP\n#define BOOST_IO_IOS_STATE_HPP\n\n#include <boost/io_fwd.hpp>  // self include\n#include <boost/detail/workaround.hpp>\n\n#include <ios>        // for std::ios_base, std::basic_ios, etc.\n#ifndef BOOST_NO_STD_LOCALE\n#include <locale>     // for std::locale\n#endif\n#include <ostream>    // for std::basic_ostream\n#include <streambuf>  // for std::basic_streambuf\n#include <string>     // for std::char_traits\n\n\nnamespace boost\n{\nnamespace io\n{\n\n\n//  Basic stream state saver class declarations  -----------------------------//\n\nclass ios_flags_saver\n{\npublic:\n    typedef ::std::ios_base            state_type;\n    typedef ::std::ios_base::fmtflags  aspect_type;\n\n    explicit  ios_flags_saver( state_type &s )\n        : s_save_( s ), a_save_( s.flags() )\n        {}\n    ios_flags_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.flags(a) )\n        {}\n    ~ios_flags_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.flags( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n\n    ios_flags_saver& operator=(const ios_flags_saver&);\n};\n\nclass ios_precision_saver\n{\npublic:\n    typedef ::std::ios_base    state_type;\n    typedef ::std::streamsize  aspect_type;\n\n    explicit  ios_precision_saver( state_type &s )\n        : s_save_( s ), a_save_( s.precision() )\n        {}\n    ios_precision_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.precision(a) )\n        {}\n    ~ios_precision_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.precision( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n\n    ios_precision_saver& operator=(const ios_precision_saver&);\n};\n\nclass ios_width_saver\n{\npublic:\n    typedef ::std::ios_base    state_type;\n    typedef ::std::streamsize  aspect_type;\n\n    explicit  ios_width_saver( state_type &s )\n        : s_save_( s ), a_save_( s.width() )\n        {}\n    ios_width_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.width(a) )\n        {}\n    ~ios_width_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.width( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    ios_width_saver& operator=(const ios_width_saver&);\n};\n\n\n//  Advanced stream state saver class template declarations  -----------------//\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_iostate_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>  state_type;\n    typedef ::std::ios_base::iostate  aspect_type;\n\n    explicit  basic_ios_iostate_saver( state_type &s )\n        : s_save_( s ), a_save_( s.rdstate() )\n        {}\n    basic_ios_iostate_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.rdstate() )\n        { s.clear(a); }\n    ~basic_ios_iostate_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.clear( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_iostate_saver& operator=(const basic_ios_iostate_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_exception_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>  state_type;\n    typedef ::std::ios_base::iostate  aspect_type;\n\n    explicit  basic_ios_exception_saver( state_type &s )\n        : s_save_( s ), a_save_( s.exceptions() )\n        {}\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))\n    basic_ios_exception_saver( state_type &s, aspect_type a )\n#else\n    basic_ios_exception_saver( state_type &s, aspect_type const &a )\n#endif\n        : s_save_( s ), a_save_( s.exceptions() )\n        { s.exceptions(a); }\n    ~basic_ios_exception_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.exceptions( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_exception_saver& operator=(const basic_ios_exception_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_tie_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>        state_type;\n    typedef ::std::basic_ostream<Ch, Tr> *  aspect_type;\n\n    explicit  basic_ios_tie_saver( state_type &s )\n        : s_save_( s ), a_save_( s.tie() )\n        {}\n    basic_ios_tie_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.tie(a) )\n        {}\n    ~basic_ios_tie_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.tie( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_tie_saver& operator=(const basic_ios_tie_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_rdbuf_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>          state_type;\n    typedef ::std::basic_streambuf<Ch, Tr> *  aspect_type;\n\n    explicit  basic_ios_rdbuf_saver( state_type &s )\n        : s_save_( s ), a_save_( s.rdbuf() )\n        {}\n    basic_ios_rdbuf_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.rdbuf(a) )\n        {}\n    ~basic_ios_rdbuf_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.rdbuf( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_rdbuf_saver& operator=(const basic_ios_rdbuf_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_fill_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>        state_type;\n    typedef typename state_type::char_type  aspect_type;\n\n    explicit  basic_ios_fill_saver( state_type &s )\n        : s_save_( s ), a_save_( s.fill() )\n        {}\n    basic_ios_fill_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.fill(a) )\n        {}\n    ~basic_ios_fill_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.fill( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_fill_saver& operator=(const basic_ios_fill_saver&);\n};\n\n#ifndef BOOST_NO_STD_LOCALE\ntemplate < typename Ch, class Tr >\nclass basic_ios_locale_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr> state_type;\n    typedef ::std::locale aspect_type;\n\n    explicit basic_ios_locale_saver( state_type &s )\n        : s_save_( s ), a_save_( s.getloc() )\n        {}\n    basic_ios_locale_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.imbue(a) )\n        {}\n    ~basic_ios_locale_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.imbue( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_locale_saver& operator=(const basic_ios_locale_saver&);\n};\n#endif\n\n\n//  User-defined stream state saver class declarations  ----------------------//\n\nclass ios_iword_saver\n{\npublic:\n    typedef ::std::ios_base  state_type;\n    typedef int              index_type;\n    typedef long             aspect_type;\n\n    explicit ios_iword_saver( state_type &s, index_type i )\n        : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )\n        {}\n    ios_iword_saver( state_type &s, index_type i, aspect_type const &a )\n        : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )\n        { s.iword(i) = a; }\n    ~ios_iword_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.iword( i_save_ ) = a_save_; }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    index_type const   i_save_;\n\n    ios_iword_saver& operator=(const ios_iword_saver&);\n};\n\nclass ios_pword_saver\n{\npublic:\n    typedef ::std::ios_base  state_type;\n    typedef int              index_type;\n    typedef void *           aspect_type;\n\n    explicit  ios_pword_saver( state_type &s, index_type i )\n        : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )\n        {}\n    ios_pword_saver( state_type &s, index_type i, aspect_type const &a )\n        : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )\n        { s.pword(i) = a; }\n    ~ios_pword_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.pword( i_save_ ) = a_save_; }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    index_type const   i_save_;\n\n    ios_pword_saver operator=(const ios_pword_saver&);\n};\n\n\n//  Combined stream state saver class (template) declarations  ---------------//\n\nclass ios_base_all_saver\n{\npublic:\n    typedef ::std::ios_base  state_type;\n\n    explicit  ios_base_all_saver( state_type &s )\n        : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )\n        , a3_save_( s.width() )\n        {}\n\n    ~ios_base_all_saver()\n        { this->restore(); }\n\n    void  restore()\n    {\n        s_save_.width( a3_save_ );\n        s_save_.precision( a2_save_ );\n        s_save_.flags( a1_save_ );\n    }\n\nprivate:\n    state_type &                s_save_;\n    state_type::fmtflags const  a1_save_;\n    ::std::streamsize const     a2_save_;\n    ::std::streamsize const     a3_save_;\n\n    ios_base_all_saver& operator=(const ios_base_all_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_all_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>  state_type;\n\n    explicit  basic_ios_all_saver( state_type &s )\n        : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )\n        , a3_save_( s.width() ), a4_save_( s.rdstate() )\n        , a5_save_( s.exceptions() ), a6_save_( s.tie() )\n        , a7_save_( s.rdbuf() ), a8_save_( s.fill() )\n        #ifndef BOOST_NO_STD_LOCALE\n        , a9_save_( s.getloc() )\n        #endif\n        {}\n\n    ~basic_ios_all_saver()\n        { this->restore(); }\n\n    void  restore()\n    {\n        #ifndef BOOST_NO_STD_LOCALE\n        s_save_.imbue( a9_save_ );\n        #endif\n        s_save_.fill( a8_save_ );\n        s_save_.rdbuf( a7_save_ );\n        s_save_.tie( a6_save_ );\n        s_save_.exceptions( a5_save_ );\n        s_save_.clear( a4_save_ );\n        s_save_.width( a3_save_ );\n        s_save_.precision( a2_save_ );\n        s_save_.flags( a1_save_ );\n    }\n\nprivate:\n    state_type &                            s_save_;\n    typename state_type::fmtflags const     a1_save_;\n    ::std::streamsize const                 a2_save_;\n    ::std::streamsize const                 a3_save_;\n    typename state_type::iostate const      a4_save_;\n    typename state_type::iostate const      a5_save_;\n    ::std::basic_ostream<Ch, Tr> * const    a6_save_;\n    ::std::basic_streambuf<Ch, Tr> * const  a7_save_;\n    typename state_type::char_type const    a8_save_;\n    #ifndef BOOST_NO_STD_LOCALE\n    ::std::locale const                     a9_save_;\n    #endif\n\n    basic_ios_all_saver& operator=(const basic_ios_all_saver&);\n};\n\nclass ios_all_word_saver\n{\npublic:\n    typedef ::std::ios_base  state_type;\n    typedef int              index_type;\n\n    ios_all_word_saver( state_type &s, index_type i )\n        : s_save_( s ), i_save_( i ), a1_save_( s.iword(i) )\n        , a2_save_( s.pword(i) )\n        {}\n\n    ~ios_all_word_saver()\n        { this->restore(); }\n\n    void  restore()\n    {\n        s_save_.pword( i_save_ ) = a2_save_;\n        s_save_.iword( i_save_ ) = a1_save_;\n    }\n\nprivate:\n    state_type &      s_save_;\n    index_type const  i_save_;\n    long const        a1_save_;\n    void * const      a2_save_;\n\n    ios_all_word_saver& operator=(const ios_all_word_saver&);\n};\n\n\n}  // namespace io\n}  // namespace boost\n\n\n#endif  // BOOST_IO_IOS_STATE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/io_fwd.hpp",
    "content": "//  Boost io_fwd.hpp header file  --------------------------------------------//\n\n//  Copyright 2002 Daryle Walker.  Use, modification, and distribution are subject\n//  to the Boost Software License, Version 1.0.  (See accompanying file\n//  LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)\n\n//  See <http://www.boost.org/libs/io/> for the library's home page.\n\n#ifndef BOOST_IO_FWD_HPP\n#define BOOST_IO_FWD_HPP\n\n#include <iosfwd>  // for std::char_traits (declaration)\n\n\nnamespace boost\n{\nnamespace io\n{\n\n\n//  From <boost/io/ios_state.hpp>  -------------------------------------------//\n\nclass ios_flags_saver;\nclass ios_precision_saver;\nclass ios_width_saver;\nclass ios_base_all_saver;\n\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_iostate_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_exception_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_tie_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_rdbuf_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_fill_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_locale_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_all_saver;\n\ntypedef basic_ios_iostate_saver<char>        ios_iostate_saver;\ntypedef basic_ios_iostate_saver<wchar_t>    wios_iostate_saver;\ntypedef basic_ios_exception_saver<char>      ios_exception_saver;\ntypedef basic_ios_exception_saver<wchar_t>  wios_exception_saver;\ntypedef basic_ios_tie_saver<char>            ios_tie_saver;\ntypedef basic_ios_tie_saver<wchar_t>        wios_tie_saver;\ntypedef basic_ios_rdbuf_saver<char>          ios_rdbuf_saver;\ntypedef basic_ios_rdbuf_saver<wchar_t>      wios_rdbuf_saver;\ntypedef basic_ios_fill_saver<char>           ios_fill_saver;\ntypedef basic_ios_fill_saver<wchar_t>       wios_fill_saver;\ntypedef basic_ios_locale_saver<char>         ios_locale_saver;\ntypedef basic_ios_locale_saver<wchar_t>     wios_locale_saver;\ntypedef basic_ios_all_saver<char>            ios_all_saver;\ntypedef basic_ios_all_saver<wchar_t>        wios_all_saver;\n\nclass ios_iword_saver;\nclass ios_pword_saver;\nclass ios_all_word_saver;\n\n\n}  // namespace io\n}  // namespace boost\n\n\n#endif  // BOOST_IO_FWD_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/counting_iterator.hpp",
    "content": "// Copyright David Abrahams 2003.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef COUNTING_ITERATOR_DWA200348_HPP\n# define COUNTING_ITERATOR_DWA200348_HPP\n\n# include <boost/iterator/iterator_adaptor.hpp>\n# include <boost/detail/numeric_traits.hpp>\n# include <boost/mpl/bool.hpp>\n# include <boost/mpl/if.hpp>\n# include <boost/mpl/identity.hpp>\n# include <boost/mpl/eval_if.hpp>\n\nnamespace boost {\nnamespace iterators {\n\ntemplate <\n    class Incrementable\n  , class CategoryOrTraversal\n  , class Difference\n>\nclass counting_iterator;\n\nnamespace detail\n{\n  // Try to detect numeric types at compile time in ways compatible\n  // with the limitations of the compiler and library.\n  template <class T>\n  struct is_numeric_impl\n  {\n      // For a while, this wasn't true, but we rely on it below. This is a regression assert.\n      BOOST_STATIC_ASSERT(::boost::is_integral<char>::value);\n\n# ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n\n      BOOST_STATIC_CONSTANT(bool, value = std::numeric_limits<T>::is_specialized);\n\n# else\n\n#  if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\n      BOOST_STATIC_CONSTANT(\n          bool, value = (\n              boost::is_convertible<int,T>::value\n           && boost::is_convertible<T,int>::value\n      ));\n#  else\n    BOOST_STATIC_CONSTANT(bool, value = ::boost::is_arithmetic<T>::value);\n#  endif\n\n# endif\n  };\n\n  template <class T>\n  struct is_numeric\n    : mpl::bool_<(::boost::iterators::detail::is_numeric_impl<T>::value)>\n  {};\n\n#  if defined(BOOST_HAS_LONG_LONG)\n  template <>\n  struct is_numeric< ::boost::long_long_type>\n    : mpl::true_ {};\n\n  template <>\n  struct is_numeric< ::boost::ulong_long_type>\n    : mpl::true_ {};\n#  endif\n\n  // Some compilers fail to have a numeric_limits specialization\n  template <>\n  struct is_numeric<wchar_t>\n    : mpl::true_ {};\n\n  template <class T>\n  struct numeric_difference\n  {\n      typedef typename boost::detail::numeric_traits<T>::difference_type type;\n  };\n\n  BOOST_STATIC_ASSERT(is_numeric<int>::value);\n\n  template <class Incrementable, class CategoryOrTraversal, class Difference>\n  struct counting_iterator_base\n  {\n      typedef typename detail::ia_dflt_help<\n          CategoryOrTraversal\n        , mpl::eval_if<\n              is_numeric<Incrementable>\n            , mpl::identity<random_access_traversal_tag>\n            , iterator_traversal<Incrementable>\n          >\n      >::type traversal;\n\n      typedef typename detail::ia_dflt_help<\n          Difference\n        , mpl::eval_if<\n              is_numeric<Incrementable>\n            , numeric_difference<Incrementable>\n            , iterator_difference<Incrementable>\n          >\n      >::type difference;\n\n      typedef iterator_adaptor<\n          counting_iterator<Incrementable, CategoryOrTraversal, Difference> // self\n        , Incrementable                                           // Base\n        , Incrementable                                           // Value\n# ifndef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY\n          const  // MSVC won't strip this.  Instead we enable Thomas'\n                 // criterion (see boost/iterator/detail/facade_iterator_category.hpp)\n# endif\n        , traversal\n        , Incrementable const&                                    // reference\n        , difference\n      > type;\n  };\n\n  // Template class distance_policy_select -- choose a policy for computing the\n  // distance between counting_iterators at compile-time based on whether or not\n  // the iterator wraps an integer or an iterator, using \"poor man's partial\n  // specialization\".\n\n  template <bool is_integer> struct distance_policy_select;\n\n  // A policy for wrapped iterators\n  template <class Difference, class Incrementable1, class Incrementable2>\n  struct iterator_distance\n  {\n      static Difference distance(Incrementable1 x, Incrementable2 y)\n      {\n          return y - x;\n      }\n  };\n\n  // A policy for wrapped numbers\n  template <class Difference, class Incrementable1, class Incrementable2>\n  struct number_distance\n  {\n      static Difference distance(Incrementable1 x, Incrementable2 y)\n      {\n          return boost::detail::numeric_distance(x, y);\n      }\n  };\n}\n\ntemplate <\n    class Incrementable\n  , class CategoryOrTraversal = use_default\n  , class Difference = use_default\n>\nclass counting_iterator\n  : public detail::counting_iterator_base<\n        Incrementable, CategoryOrTraversal, Difference\n    >::type\n{\n    typedef typename detail::counting_iterator_base<\n        Incrementable, CategoryOrTraversal, Difference\n    >::type super_t;\n\n    friend class iterator_core_access;\n\n public:\n    typedef typename super_t::difference_type difference_type;\n\n    counting_iterator() { }\n\n    counting_iterator(counting_iterator const& rhs) : super_t(rhs.base()) {}\n\n    counting_iterator(Incrementable x)\n      : super_t(x)\n    {\n    }\n\n# if 0\n    template<class OtherIncrementable>\n    counting_iterator(\n        counting_iterator<OtherIncrementable, CategoryOrTraversal, Difference> const& t\n      , typename enable_if_convertible<OtherIncrementable, Incrementable>::type* = 0\n    )\n      : super_t(t.base())\n    {}\n# endif\n\n private:\n\n    typename super_t::reference dereference() const\n    {\n        return this->base_reference();\n    }\n\n    template <class OtherIncrementable>\n    difference_type\n    distance_to(counting_iterator<OtherIncrementable, CategoryOrTraversal, Difference> const& y) const\n    {\n      typedef typename mpl::if_<\n          detail::is_numeric<Incrementable>\n        , detail::number_distance<difference_type, Incrementable, OtherIncrementable>\n        , detail::iterator_distance<difference_type, Incrementable, OtherIncrementable>\n      >::type d;\n\n      return d::distance(this->base(), y.base());\n    }\n};\n\n// Manufacture a counting iterator for an arbitrary incrementable type\ntemplate <class Incrementable>\ninline counting_iterator<Incrementable>\nmake_counting_iterator(Incrementable x)\n{\n  typedef counting_iterator<Incrementable> result_t;\n  return result_t(x);\n}\n\n} // namespace iterators\n\nusing iterators::counting_iterator;\nusing iterators::make_counting_iterator;\n\n} // namespace boost\n\n#endif // COUNTING_ITERATOR_DWA200348_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/detail/any_conversion_eater.hpp",
    "content": "// Copyright David Abrahams 2003. Use, modification and distribution is\n// subject to the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef ANY_CONVERSION_EATER_DWA20031117_HPP\n# define ANY_CONVERSION_EATER_DWA20031117_HPP\n\nnamespace boost {\nnamespace iterators {\nnamespace detail {\n\n// This type can be used in traits to \"eat\" up the one user-defined\n// implicit conversion allowed.\nstruct any_conversion_eater\n{\n    template <class T>\n    any_conversion_eater(T const&);\n};\n\n}}} // namespace boost::iterators::detail\n\n#endif // ANY_CONVERSION_EATER_DWA20031117_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/detail/config_def.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// no include guard multiple inclusion intended\n\n//\n// This is a temporary workaround until the bulk of this is\n// available in boost config.\n// 23/02/03 thw\n//\n\n#include <boost/config.hpp> // for prior\n#include <boost/detail/workaround.hpp>\n\n#ifdef BOOST_ITERATOR_CONFIG_DEF\n# error you have nested config_def #inclusion.\n#else \n# define BOOST_ITERATOR_CONFIG_DEF\n#endif \n\n// We enable this always now.  Otherwise, the simple case in\n// libs/iterator/test/constant_iterator_arrow.cpp fails to compile\n// because the operator-> return is improperly deduced as a non-const\n// pointer.\n#if 1 || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)           \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x531))\n\n// Recall that in general, compilers without partial specialization\n// can't strip constness.  Consider counting_iterator, which normally\n// passes a const Value to iterator_facade.  As a result, any code\n// which makes a std::vector of the iterator's value_type will fail\n// when its allocator declares functions overloaded on reference and\n// const_reference (the same type).\n//\n// Furthermore, Borland 5.5.1 drops constness in enough ways that we\n// end up using a proxy for operator[] when we otherwise shouldn't.\n// Using reference constness gives it an extra hint that it can\n// return the value_type from operator[] directly, but is not\n// strictly necessary.  Not sure how best to resolve this one.\n\n# define BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY 1\n\n#endif\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x5A0))                      \\\n    || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \\\n    || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))                \\\n    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))\n    \n# define BOOST_NO_LVALUE_RETURN_DETECTION\n\n# if 0 // test code\n  struct v  {};\n\n  typedef  char (&no)[3];\n\n  template <class T>\n  no foo(T const&, ...);\n\n  template <class T>\n  char foo(T&, int);\n\n\n  struct value_iterator\n  {\n      v operator*() const;\n  };\n\n  template <class T>\n  struct lvalue_deref_helper\n  {\n      static T& x;\n      enum { value = (sizeof(foo(*x,0)) == 1) };\n  };\n\n  int z2[(lvalue_deref_helper<v*>::value == 1) ? 1 : -1];\n  int z[(lvalue_deref_helper<value_iterator>::value) == 1 ? -1 : 1 ];\n# endif \n\n#endif\n\n#if BOOST_WORKAROUND(__MWERKS__, <=0x2407)\n#  define BOOST_NO_IS_CONVERTIBLE // \"is_convertible doesn't work for simple types\"\n#endif\n\n#if BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4) && !defined(__EDG_VERSION__)   \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\n#  define BOOST_NO_IS_CONVERTIBLE_TEMPLATE // The following program fails to compile:\n\n#  if 0 // test code\n    #include <boost/type_traits/is_convertible.hpp>\n    template <class T>\n    struct foo\n    {\n        foo(T);\n\n        template <class U>\n        foo(foo<U> const& other) : p(other.p) { }\n\n        T p;\n    };\n\n    bool x = boost::is_convertible<foo<int const*>, foo<int*> >::value;\n#  endif\n\n#endif\n\n\n#if !defined(BOOST_MSVC) && (defined(BOOST_NO_SFINAE) || defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_IS_CONVERTIBLE_TEMPLATE))\n# define BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY\n#endif \n\n# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n\n// GCC-2.95 (obsolete) eagerly instantiates templated constructors and conversion\n// operators in convertibility checks, causing premature errors.\n//\n// Borland's problems are harder to diagnose due to lack of an\n// instantiation stack backtrace.  They may be due in part to the fact\n// that it drops cv-qualification willy-nilly in templates.\n#  define BOOST_NO_ONE_WAY_ITERATOR_INTEROP\n# endif \n\n// no include guard; multiple inclusion intended\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/detail/config_undef.hpp",
    "content": "// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// no include guard multiple inclusion intended\n\n//\n// This is a temporary workaround until the bulk of this is\n// available in boost config.\n// 23/02/03 thw\n//\n\n#undef BOOST_NO_IS_CONVERTIBLE\n#undef BOOST_NO_IS_CONVERTIBLE_TEMPLATE\n#undef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY\n#undef BOOST_NO_LVALUE_RETURN_DETECTION\n#undef BOOST_NO_ONE_WAY_ITERATOR_INTEROP\n\n#ifdef BOOST_ITERATOR_CONFIG_DEF\n# undef BOOST_ITERATOR_CONFIG_DEF\n#else\n# error missing or nested #include config_def\n#endif \n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/detail/enable_if.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_ENABLE_IF_23022003THW_HPP\n#define BOOST_ENABLE_IF_23022003THW_HPP\n\n#include <boost/detail/workaround.hpp>\n#include <boost/mpl/identity.hpp>\n\n#include <boost/iterator/detail/config_def.hpp>\n\n//\n// Boost iterators uses its own enable_if cause we need\n// special semantics for deficient compilers.\n// 23/02/03 thw\n//\n\nnamespace boost\n{\n\n  namespace iterators\n  {\n    //\n    // Base machinery for all kinds of enable if\n    //\n    template<bool>\n    struct enabled\n    {\n      template<typename T>\n      struct base\n      {\n        typedef T type;\n      };\n    };\n\n    //\n    // For compilers that don't support \"Substitution Failure Is Not An Error\"\n    // enable_if falls back to always enabled. See comments\n    // on operator implementation for consequences.\n    //\n    template<>\n    struct enabled<false>\n    {\n      template<typename T>\n      struct base\n      {\n#ifdef BOOST_NO_SFINAE\n\n        typedef T type;\n\n        // This way to do it would give a nice error message containing\n        // invalid overload, but has the big disadvantage that\n        // there is no reference to user code in the error message.\n        //\n        // struct invalid_overload;\n        // typedef invalid_overload type;\n        //\n#endif\n      };\n    };\n\n\n    template <class Cond,\n              class Return>\n    struct enable_if\n# if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE)\n      : enabled<(Cond::value)>::template base<Return>\n# else\n      : mpl::identity<Return>\n# endif\n    {\n    };\n\n  } // namespace iterators\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_ENABLE_IF_23022003THW_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/detail/facade_iterator_category.hpp",
    "content": "// Copyright David Abrahams 2003. Use, modification and distribution is\n// subject to the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef FACADE_ITERATOR_CATEGORY_DWA20031118_HPP\n# define FACADE_ITERATOR_CATEGORY_DWA20031118_HPP\n\n# include <boost/iterator/iterator_categories.hpp>\n\n# include <boost/mpl/or.hpp>  // used in iterator_tag inheritance logic\n# include <boost/mpl/and.hpp>\n# include <boost/mpl/if.hpp>\n# include <boost/mpl/eval_if.hpp>\n# include <boost/mpl/identity.hpp>\n# include <boost/mpl/assert.hpp>\n\n# include <boost/type_traits/is_same.hpp>\n# include <boost/type_traits/is_const.hpp>\n# include <boost/type_traits/is_reference.hpp>\n# include <boost/type_traits/is_convertible.hpp>\n\n# include <boost/type_traits/is_same.hpp>\n\n# include <boost/iterator/detail/config_def.hpp> // try to keep this last\n\n# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY\n#  include <boost/detail/indirect_traits.hpp>\n# endif\n\n//\n// iterator_category deduction for iterator_facade\n//\n\nnamespace boost {\nnamespace iterators {\n\n// forward declaration\nstruct use_default;\n\nnamespace detail {\n\nstruct input_output_iterator_tag\n  : std::input_iterator_tag\n{\n    // Using inheritance for only input_iterator_tag helps to avoid\n    // ambiguities when a stdlib implementation dispatches on a\n    // function which is overloaded on both input_iterator_tag and\n    // output_iterator_tag, as STLPort does, in its __valid_range\n    // function.  I claim it's better to avoid the ambiguity in these\n    // cases.\n    operator std::output_iterator_tag() const\n    {\n        return std::output_iterator_tag();\n    }\n};\n\n//\n// True iff the user has explicitly disabled writability of this\n// iterator.  Pass the iterator_facade's Value parameter and its\n// nested ::reference type.\n//\ntemplate <class ValueParam, class Reference>\nstruct iterator_writability_disabled\n# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY // Adding Thomas' logic?\n  : mpl::or_<\n        is_const<Reference>\n      , boost::detail::indirect_traits::is_reference_to_const<Reference>\n      , is_const<ValueParam>\n    >\n# else\n  : is_const<ValueParam>\n# endif\n{};\n\n\n//\n// Convert an iterator_facade's traversal category, Value parameter,\n// and ::reference type to an appropriate old-style category.\n//\n// Due to changeset 21683, this now never results in a category convertible\n// to output_iterator_tag.\n//\n// Change at: https://svn.boost.org/trac/boost/changeset/21683\ntemplate <class Traversal, class ValueParam, class Reference>\nstruct iterator_facade_default_category\n  : mpl::eval_if<\n        mpl::and_<\n            is_reference<Reference>\n          , is_convertible<Traversal,forward_traversal_tag>\n        >\n      , mpl::eval_if<\n            is_convertible<Traversal,random_access_traversal_tag>\n          , mpl::identity<std::random_access_iterator_tag>\n          , mpl::if_<\n                is_convertible<Traversal,bidirectional_traversal_tag>\n              , std::bidirectional_iterator_tag\n              , std::forward_iterator_tag\n            >\n        >\n      , typename mpl::eval_if<\n            mpl::and_<\n                is_convertible<Traversal, single_pass_traversal_tag>\n\n                // check for readability\n              , is_convertible<Reference, ValueParam>\n            >\n          , mpl::identity<std::input_iterator_tag>\n          , mpl::identity<Traversal>\n        >\n    >\n{\n};\n\n// True iff T is convertible to an old-style iterator category.\ntemplate <class T>\nstruct is_iterator_category\n  : mpl::or_<\n        is_convertible<T,std::input_iterator_tag>\n      , is_convertible<T,std::output_iterator_tag>\n    >\n{\n};\n\ntemplate <class T>\nstruct is_iterator_traversal\n  : is_convertible<T,incrementable_traversal_tag>\n{};\n\n//\n// A composite iterator_category tag convertible to Category (a pure\n// old-style category) and Traversal (a pure traversal tag).\n// Traversal must be a strict increase of the traversal power given by\n// Category.\n//\ntemplate <class Category, class Traversal>\nstruct iterator_category_with_traversal\n  : Category, Traversal\n{\n    // Make sure this isn't used to build any categories where\n    // convertibility to Traversal is redundant.  Should just use the\n    // Category element in that case.\n    BOOST_MPL_ASSERT_NOT((\n        is_convertible<\n              typename iterator_category_to_traversal<Category>::type\n            , Traversal\n          >));\n\n    BOOST_MPL_ASSERT((is_iterator_category<Category>));\n    BOOST_MPL_ASSERT_NOT((is_iterator_category<Traversal>));\n    BOOST_MPL_ASSERT_NOT((is_iterator_traversal<Category>));\n#  if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))\n    BOOST_MPL_ASSERT((is_iterator_traversal<Traversal>));\n#  endif\n};\n\n// Computes an iterator_category tag whose traversal is Traversal and\n// which is appropriate for an iterator\ntemplate <class Traversal, class ValueParam, class Reference>\nstruct facade_iterator_category_impl\n{\n    BOOST_MPL_ASSERT_NOT((is_iterator_category<Traversal>));\n\n    typedef typename iterator_facade_default_category<\n        Traversal,ValueParam,Reference\n    >::type category;\n\n    typedef typename mpl::if_<\n        is_same<\n            Traversal\n          , typename iterator_category_to_traversal<category>::type\n        >\n      , category\n      , iterator_category_with_traversal<category,Traversal>\n    >::type type;\n};\n\n//\n// Compute an iterator_category for iterator_facade\n//\ntemplate <class CategoryOrTraversal, class ValueParam, class Reference>\nstruct facade_iterator_category\n  : mpl::eval_if<\n        is_iterator_category<CategoryOrTraversal>\n      , mpl::identity<CategoryOrTraversal> // old-style categories are fine as-is\n      , facade_iterator_category_impl<CategoryOrTraversal,ValueParam,Reference>\n    >\n{\n};\n\n}}} // namespace boost::iterators::detail\n\n# include <boost/iterator/detail/config_undef.hpp>\n\n#endif // FACADE_ITERATOR_CATEGORY_DWA20031118_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/detail/minimum_category.hpp",
    "content": "// Copyright David Abrahams 2003. Use, modification and distribution is\n// subject to the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef MINIMUM_CATEGORY_DWA20031119_HPP\n# define MINIMUM_CATEGORY_DWA20031119_HPP\n\n# include <boost/iterator/minimum_category.hpp>\n\nnamespace boost {\n\n// This import below (as well as the whole header) is for backward compatibility\n// with boost/token_iterator.hpp. It should be removed as soon as that header is fixed.\nnamespace detail {\nusing iterators::minimum_category;\n} // namespace detail\n\n} // namespace boost\n\n#endif // MINIMUM_CATEGORY_DWA20031119_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/filter_iterator.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_FILTER_ITERATOR_23022003THW_HPP\n#define BOOST_FILTER_ITERATOR_23022003THW_HPP\n\n#include <boost/iterator.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n\n#include <boost/type_traits/is_class.hpp>\n#include <boost/static_assert.hpp>\n\nnamespace boost {\nnamespace iterators {\n\n  template <class Predicate, class Iterator>\n  class filter_iterator;\n\n  namespace detail\n  {\n    template <class Predicate, class Iterator>\n    struct filter_iterator_base\n    {\n        typedef iterator_adaptor<\n            filter_iterator<Predicate, Iterator>\n          , Iterator\n          , use_default\n          , typename mpl::if_<\n                is_convertible<\n                    typename iterator_traversal<Iterator>::type\n                  , random_access_traversal_tag\n                >\n              , bidirectional_traversal_tag\n              , use_default\n            >::type\n        > type;\n    };\n  }\n\n  template <class Predicate, class Iterator>\n  class filter_iterator\n    : public detail::filter_iterator_base<Predicate, Iterator>::type\n  {\n      typedef typename detail::filter_iterator_base<\n          Predicate, Iterator\n      >::type super_t;\n\n      friend class iterator_core_access;\n\n   public:\n      filter_iterator() { }\n\n      filter_iterator(Predicate f, Iterator x, Iterator end_ = Iterator())\n          : super_t(x), m_predicate(f), m_end(end_)\n      {\n          satisfy_predicate();\n      }\n\n      filter_iterator(Iterator x, Iterator end_ = Iterator())\n        : super_t(x), m_predicate(), m_end(end_)\n      {\n        // Pro8 is a little too aggressive about instantiating the\n        // body of this function.\n#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))\n          // Don't allow use of this constructor if Predicate is a\n          // function pointer type, since it will be 0.\n          BOOST_STATIC_ASSERT(is_class<Predicate>::value);\n#endif\n          satisfy_predicate();\n      }\n\n      template<class OtherIterator>\n      filter_iterator(\n          filter_iterator<Predicate, OtherIterator> const& t\n          , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0\n          )\n          : super_t(t.base()), m_predicate(t.predicate()), m_end(t.end()) {}\n\n      Predicate predicate() const { return m_predicate; }\n\n      Iterator end() const { return m_end; }\n\n   private:\n      void increment()\n      {\n          ++(this->base_reference());\n          satisfy_predicate();\n      }\n\n      void decrement()\n      {\n        while(!this->m_predicate(*--(this->base_reference()))){};\n      }\n\n      void satisfy_predicate()\n      {\n          while (this->base() != this->m_end && !this->m_predicate(*this->base()))\n              ++(this->base_reference());\n      }\n\n      // Probably should be the initial base class so it can be\n      // optimized away via EBO if it is an empty class.\n      Predicate m_predicate;\n      Iterator m_end;\n  };\n\n  template <class Predicate, class Iterator>\n  inline filter_iterator<Predicate,Iterator>\n  make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator())\n  {\n      return filter_iterator<Predicate,Iterator>(f,x,end);\n  }\n\n  template <class Predicate, class Iterator>\n  inline filter_iterator<Predicate,Iterator>\n  make_filter_iterator(\n      typename iterators::enable_if<\n          is_class<Predicate>\n        , Iterator\n      >::type x\n    , Iterator end = Iterator())\n  {\n      return filter_iterator<Predicate,Iterator>(x,end);\n  }\n\n} // namespace iterators\n\nusing iterators::filter_iterator;\nusing iterators::make_filter_iterator;\n\n} // namespace boost\n\n#endif // BOOST_FILTER_ITERATOR_23022003THW_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/function_input_iterator.hpp",
    "content": "// Copyright 2009 (C) Dean Michael Berris <me@deanberris.com>\n// Copyright 2012 (C) Google, Inc.\n// Copyright 2012 (C) Jeffrey Lee Hellrung, Jr.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#ifndef BOOST_FUNCTION_INPUT_ITERATOR\n#define BOOST_FUNCTION_INPUT_ITERATOR\n\n#include <boost/assert.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/function_types/is_function_pointer.hpp>\n#include <boost/function_types/is_function_reference.hpp>\n#include <boost/function_types/result_type.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/none.hpp>\n#include <boost/optional/optional.hpp>\n\nnamespace boost {\n\nnamespace iterators {\n\n    namespace impl {\n\n        template <class Function, class Input>\n        class function_input_iterator\n            : public iterator_facade<\n            function_input_iterator<Function, Input>,\n            typename Function::result_type,\n            single_pass_traversal_tag,\n            typename Function::result_type const &\n            >\n        {\n        public:\n            function_input_iterator() {}\n            function_input_iterator(Function & f_, Input state_ = Input())\n                : f(&f_), state(state_) {}\n\n            void increment() {\n                if(value)\n                    value = none;\n                else\n                    (*f)();\n                ++state;\n            }\n\n            typename Function::result_type const &\n                dereference() const {\n                    return (value ? value : value = (*f)()).get();\n            }\n\n            bool equal(function_input_iterator const & other) const {\n                return f == other.f && state == other.state;\n            }\n\n        private:\n            Function * f;\n            Input state;\n            mutable optional<typename Function::result_type> value;\n        };\n\n        template <class Function, class Input>\n        class function_pointer_input_iterator\n            : public iterator_facade<\n            function_pointer_input_iterator<Function, Input>,\n            typename function_types::result_type<Function>::type,\n            single_pass_traversal_tag,\n            typename function_types::result_type<Function>::type const &\n            >\n        {\n        public:\n            function_pointer_input_iterator() {}\n            function_pointer_input_iterator(Function &f_, Input state_ = Input())\n                : f(f_), state(state_) {}\n\n            void increment() {\n                if(value)\n                    value = none;\n                else\n                    (*f)();\n                ++state;\n            }\n\n            typename function_types::result_type<Function>::type const &\n                dereference() const {\n                    return (value ? value : value = (*f)()).get();\n            }\n\n            bool equal(function_pointer_input_iterator const & other) const {\n                return f == other.f && state == other.state;\n            }\n\n        private:\n            Function f;\n            Input state;\n            mutable optional<typename function_types::result_type<Function>::type> value;\n        };\n\n        template <class Function, class Input>\n        class function_reference_input_iterator\n            : public function_pointer_input_iterator<Function*,Input>\n        {\n        public:\n            function_reference_input_iterator(Function & f_, Input state_ = Input())\n                : function_pointer_input_iterator<Function*,Input>(&f_, state_)\n            {}\n        };\n\n    } // namespace impl\n\n    template <class Function, class Input>\n    class function_input_iterator\n        : public mpl::if_<\n            function_types::is_function_pointer<Function>,\n            impl::function_pointer_input_iterator<Function,Input>,\n            typename mpl::if_<\n                function_types::is_function_reference<Function>,\n                impl::function_reference_input_iterator<Function,Input>,\n                impl::function_input_iterator<Function,Input>\n            >::type\n        >::type\n    {\n        typedef typename mpl::if_<\n            function_types::is_function_pointer<Function>,\n            impl::function_pointer_input_iterator<Function,Input>,\n            typename mpl::if_<\n                function_types::is_function_reference<Function>,\n                impl::function_reference_input_iterator<Function,Input>,\n                impl::function_input_iterator<Function,Input>\n            >::type\n        >::type base_type;\n    public:\n        function_input_iterator(Function & f, Input i)\n            : base_type(f, i) {}\n    };\n\n    template <class Function, class Input>\n    inline function_input_iterator<Function, Input>\n        make_function_input_iterator(Function & f, Input state) {\n            typedef function_input_iterator<Function, Input> result_t;\n            return result_t(f, state);\n    }\n\n    template <class Function, class Input>\n    inline function_input_iterator<Function*, Input>\n        make_function_input_iterator(Function * f, Input state) {\n            typedef function_input_iterator<Function*, Input> result_t;\n            return result_t(f, state);\n    }\n\n    struct infinite {\n        infinite & operator++() { return *this; }\n        infinite & operator++(int) { return *this; }\n        bool operator==(infinite &) const { return false; };\n        bool operator==(infinite const &) const { return false; };\n    };\n\n} // namespace iterators\n\nusing iterators::function_input_iterator;\nusing iterators::make_function_input_iterator;\nusing iterators::infinite;\n\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/indirect_iterator.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_INDIRECT_ITERATOR_23022003THW_HPP\n#define BOOST_INDIRECT_ITERATOR_23022003THW_HPP\n\n#include <boost/iterator.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n\n#include <boost/pointee.hpp>\n#include <boost/indirect_reference.hpp>\n#include <boost/detail/iterator.hpp>\n\n#include <boost/detail/indirect_traits.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/add_reference.hpp>\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/has_xxx.hpp>\n\n#ifdef BOOST_MPL_CFG_NO_HAS_XXX\n# include <boost/shared_ptr.hpp>\n# include <boost/scoped_ptr.hpp>\n# include <boost/mpl/bool.hpp>\n# include <memory>\n#endif\n\n#include <boost/iterator/detail/config_def.hpp> // must be last #include\n\nnamespace boost {\nnamespace iterators {\n\n  template <class Iter, class Value, class Category, class Reference, class Difference>\n  class indirect_iterator;\n\n  namespace detail\n  {\n    template <class Iter, class Value, class Category, class Reference, class Difference>\n    struct indirect_base\n    {\n        typedef typename boost::detail::iterator_traits<Iter>::value_type dereferenceable;\n\n        typedef iterator_adaptor<\n            indirect_iterator<Iter, Value, Category, Reference, Difference>\n          , Iter\n          , typename ia_dflt_help<\n                Value, pointee<dereferenceable>\n            >::type\n          , Category\n          , typename ia_dflt_help<\n                Reference\n              , mpl::eval_if<\n                    is_same<Value,use_default>\n                  , indirect_reference<dereferenceable>\n                  , add_reference<Value>\n                >\n            >::type\n          , Difference\n        > type;\n    };\n\n    template <>\n    struct indirect_base<int, int, int, int, int> {};\n  } // namespace detail\n\n\n  template <\n      class Iterator\n    , class Value = use_default\n    , class Category = use_default\n    , class Reference = use_default\n    , class Difference = use_default\n  >\n  class indirect_iterator\n    : public detail::indirect_base<\n        Iterator, Value, Category, Reference, Difference\n      >::type\n  {\n      typedef typename detail::indirect_base<\n          Iterator, Value, Category, Reference, Difference\n      >::type super_t;\n\n      friend class iterator_core_access;\n\n   public:\n      indirect_iterator() {}\n\n      indirect_iterator(Iterator iter)\n        : super_t(iter) {}\n\n      template <\n          class Iterator2, class Value2, class Category2\n        , class Reference2, class Difference2\n      >\n      indirect_iterator(\n          indirect_iterator<\n               Iterator2, Value2, Category2, Reference2, Difference2\n          > const& y\n        , typename enable_if_convertible<Iterator2, Iterator>::type* = 0\n      )\n        : super_t(y.base())\n      {}\n\n  private:\n      typename super_t::reference dereference() const\n      {\n# if BOOST_WORKAROUND(__BORLANDC__, < 0x5A0 )\n          return const_cast<super_t::reference>(**this->base());\n# else\n          return **this->base();\n# endif\n      }\n  };\n\n  template <class Iter>\n  inline\n  indirect_iterator<Iter> make_indirect_iterator(Iter x)\n  {\n    return indirect_iterator<Iter>(x);\n  }\n\n  template <class Traits, class Iter>\n  inline\n  indirect_iterator<Iter,Traits> make_indirect_iterator(Iter x, Traits* = 0)\n  {\n    return indirect_iterator<Iter, Traits>(x);\n  }\n\n} // namespace iterators\n\nusing iterators::indirect_iterator;\nusing iterators::make_indirect_iterator;\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_INDIRECT_ITERATOR_23022003THW_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/interoperable.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_INTEROPERABLE_23022003THW_HPP\n# define BOOST_INTEROPERABLE_23022003THW_HPP\n\n# include <boost/mpl/bool.hpp>\n# include <boost/mpl/or.hpp>\n\n# include <boost/type_traits/is_convertible.hpp>\n\n# include <boost/iterator/detail/config_def.hpp> // must appear last\n\nnamespace boost {\nnamespace iterators {\n\n  //\n  // Meta function that determines whether two\n  // iterator types are considered interoperable.\n  //\n  // Two iterator types A,B are considered interoperable if either\n  // A is convertible to B or vice versa.\n  // This interoperability definition is in sync with the\n  // standards requirements on constant/mutable container\n  // iterators (23.1 [lib.container.requirements]).\n  //\n  // For compilers that don't support is_convertible\n  // is_interoperable gives false positives. See comments\n  // on operator implementation for consequences.\n  //\n  template <typename A, typename B>\n  struct is_interoperable\n# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY\n    : mpl::true_\n# else\n    : mpl::or_<\n          is_convertible< A, B >\n        , is_convertible< B, A > >\n# endif\n  {\n  };\n\n} // namespace iterators\n\nusing iterators::is_interoperable;\n\n} // namespace boost\n\n# include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_INTEROPERABLE_23022003THW_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/is_lvalue_iterator.hpp",
    "content": "// Copyright David Abrahams 2003. Use, modification and distribution is\n// subject to the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef IS_LVALUE_ITERATOR_DWA2003112_HPP\n# define IS_LVALUE_ITERATOR_DWA2003112_HPP\n\n#include <boost/iterator.hpp>\n\n#include <boost/detail/workaround.hpp>\n#include <boost/detail/iterator.hpp>\n\n#include <boost/type_traits/add_lvalue_reference.hpp>\n#include <boost/iterator/detail/any_conversion_eater.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\n// should be the last #includes\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/iterator/detail/config_def.hpp>\n\n#ifndef BOOST_NO_IS_CONVERTIBLE\n\nnamespace boost {\n\nnamespace iterators {\n\nnamespace detail\n{\n#ifndef BOOST_NO_LVALUE_RETURN_DETECTION\n  // Calling lvalue_preserver( <expression>, 0 ) returns a reference\n  // to the expression's result if <expression> is an lvalue, or\n  // not_an_lvalue() otherwise.\n  struct not_an_lvalue {};\n\n  template <class T>\n  T& lvalue_preserver(T&, int);\n\n  template <class U>\n  not_an_lvalue lvalue_preserver(U const&, ...);\n\n# define BOOST_LVALUE_PRESERVER(expr) detail::lvalue_preserver(expr,0)\n\n#else\n\n# define BOOST_LVALUE_PRESERVER(expr) expr\n\n#endif\n\n  // Guts of is_lvalue_iterator.  Value is the iterator's value_type\n  // and the result is computed in the nested rebind template.\n  template <class Value>\n  struct is_lvalue_iterator_impl\n  {\n      // Eat implicit conversions so we don't report true for things\n      // convertible to Value const&\n      struct conversion_eater\n      {\n          conversion_eater(typename add_lvalue_reference<Value>::type);\n      };\n\n      static char tester(conversion_eater, int);\n      static char (& tester(any_conversion_eater, ...) )[2];\n\n      template <class It>\n      struct rebind\n      {\n          static It& x;\n\n          BOOST_STATIC_CONSTANT(\n              bool\n            , value = (\n                sizeof(\n                    is_lvalue_iterator_impl<Value>::tester(\n                        BOOST_LVALUE_PRESERVER(*x), 0\n                    )\n                ) == 1\n            )\n          );\n      };\n  };\n\n#undef BOOST_LVALUE_PRESERVER\n\n  //\n  // void specializations to handle std input and output iterators\n  //\n  template <>\n  struct is_lvalue_iterator_impl<void>\n  {\n      template <class It>\n      struct rebind : boost::mpl::false_\n      {};\n  };\n\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\n  template <>\n  struct is_lvalue_iterator_impl<const void>\n  {\n      template <class It>\n      struct rebind : boost::mpl::false_\n      {};\n  };\n\n  template <>\n  struct is_lvalue_iterator_impl<volatile void>\n  {\n      template <class It>\n      struct rebind : boost::mpl::false_\n      {};\n  };\n\n  template <>\n  struct is_lvalue_iterator_impl<const volatile void>\n  {\n      template <class It>\n      struct rebind : boost::mpl::false_\n      {};\n  };\n#endif\n\n  //\n  // This level of dispatching is required for Borland.  We might save\n  // an instantiation by removing it for others.\n  //\n  template <class It>\n  struct is_readable_lvalue_iterator_impl\n    : is_lvalue_iterator_impl<\n          BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<It>::value_type const\n      >::template rebind<It>\n  {};\n\n  template <class It>\n  struct is_non_const_lvalue_iterator_impl\n    : is_lvalue_iterator_impl<\n          BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<It>::value_type\n      >::template rebind<It>\n  {};\n} // namespace detail\n\ntemplate< typename T > struct is_lvalue_iterator\n: public ::boost::integral_constant<bool,::boost::iterators::detail::is_readable_lvalue_iterator_impl<T>::value>\n{\npublic:\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_lvalue_iterator,(T))\n};\n\ntemplate< typename T > struct is_non_const_lvalue_iterator\n: public ::boost::integral_constant<bool,::boost::iterators::detail::is_non_const_lvalue_iterator_impl<T>::value>\n{\npublic:\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_non_const_lvalue_iterator,(T))\n};\n\n} // namespace iterators\n\nusing iterators::is_lvalue_iterator;\nusing iterators::is_non_const_lvalue_iterator;\n\n} // namespace boost\n\n#endif\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // IS_LVALUE_ITERATOR_DWA2003112_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/is_readable_iterator.hpp",
    "content": "// Copyright David Abrahams 2003. Use, modification and distribution is\n// subject to the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef IS_READABLE_ITERATOR_DWA2003112_HPP\n# define IS_READABLE_ITERATOR_DWA2003112_HPP\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/detail/iterator.hpp>\n#include <boost/type_traits/add_lvalue_reference.hpp>\n\n#include <boost/iterator/detail/any_conversion_eater.hpp>\n\n// should be the last #include\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/iterator/detail/config_def.hpp>\n\n#ifndef BOOST_NO_IS_CONVERTIBLE\n\nnamespace boost {\n\nnamespace iterators {\n\nnamespace detail\n{\n  // Guts of is_readable_iterator.  Value is the iterator's value_type\n  // and the result is computed in the nested rebind template.\n  template <class Value>\n  struct is_readable_iterator_impl\n  {\n      static char tester(typename add_lvalue_reference<Value>::type, int);\n      static char (& tester(any_conversion_eater, ...) )[2];\n\n      template <class It>\n      struct rebind\n      {\n          static It& x;\n\n          BOOST_STATIC_CONSTANT(\n              bool\n            , value = (\n                sizeof(\n                    is_readable_iterator_impl<Value>::tester(*x, 1)\n                ) == 1\n            )\n          );\n      };\n  };\n\n#undef BOOST_READABLE_PRESERVER\n\n  //\n  // void specializations to handle std input and output iterators\n  //\n  template <>\n  struct is_readable_iterator_impl<void>\n  {\n      template <class It>\n      struct rebind : boost::mpl::false_\n      {};\n  };\n\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\n  template <>\n  struct is_readable_iterator_impl<const void>\n  {\n      template <class It>\n      struct rebind : boost::mpl::false_\n      {};\n  };\n\n  template <>\n  struct is_readable_iterator_impl<volatile void>\n  {\n      template <class It>\n      struct rebind : boost::mpl::false_\n      {};\n  };\n\n  template <>\n  struct is_readable_iterator_impl<const volatile void>\n  {\n      template <class It>\n      struct rebind : boost::mpl::false_\n      {};\n  };\n#endif\n\n  //\n  // This level of dispatching is required for Borland.  We might save\n  // an instantiation by removing it for others.\n  //\n  template <class It>\n  struct is_readable_iterator_impl2\n    : is_readable_iterator_impl<\n          BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<It>::value_type const\n      >::template rebind<It>\n  {};\n} // namespace detail\n\ntemplate< typename T > struct is_readable_iterator\n: public ::boost::integral_constant<bool,::boost::iterators::detail::is_readable_iterator_impl2<T>::value>\n{\npublic:\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_readable_iterator,(T))\n};\n\n} // namespace iterators\n\nusing iterators::is_readable_iterator;\n\n} // namespace boost\n\n#endif\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // IS_READABLE_ITERATOR_DWA2003112_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/iterator_adaptor.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_ITERATOR_ADAPTOR_23022003THW_HPP\n#define BOOST_ITERATOR_ADAPTOR_23022003THW_HPP\n\n#include <boost/static_assert.hpp>\n#include <boost/iterator.hpp>\n#include <boost/detail/iterator.hpp>\n\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/iterator/detail/enable_if.hpp>\n\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/or.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n\n#ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY\n# include <boost/type_traits/remove_reference.hpp>\n#endif\n\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/iterator/detail/config_def.hpp>\n\n#include <boost/iterator/iterator_traits.hpp>\n\nnamespace boost {\nnamespace iterators {\n\n  // Used as a default template argument internally, merely to\n  // indicate \"use the default\", this can also be passed by users\n  // explicitly in order to specify that the default should be used.\n  struct use_default;\n\n} // namespace iterators\n\nusing iterators::use_default;\n\n// the incompleteness of use_default causes massive problems for\n// is_convertible (naturally).  This workaround is fortunately not\n// needed for vc6/vc7.\ntemplate<class To>\nstruct is_convertible<use_default,To>\n  : mpl::false_ {};\n\nnamespace iterators {\n\n  namespace detail\n  {\n\n    //\n    // Result type used in enable_if_convertible meta function.\n    // This can be an incomplete type, as only pointers to\n    // enable_if_convertible< ... >::type are used.\n    // We could have used void for this, but conversion to\n    // void* is just to easy.\n    //\n    struct enable_type;\n  }\n\n\n  //\n  // enable_if for use in adapted iterators constructors.\n  //\n  // In order to provide interoperability between adapted constant and\n  // mutable iterators, adapted iterators will usually provide templated\n  // conversion constructors of the following form\n  //\n  // template <class BaseIterator>\n  // class adapted_iterator :\n  //   public iterator_adaptor< adapted_iterator<Iterator>, Iterator >\n  // {\n  // public:\n  //\n  //   ...\n  //\n  //   template <class OtherIterator>\n  //   adapted_iterator(\n  //       OtherIterator const& it\n  //     , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0);\n  //\n  //   ...\n  // };\n  //\n  // enable_if_convertible is used to remove those overloads from the overload\n  // set that cannot be instantiated. For all practical purposes only overloads\n  // for constant/mutable interaction will remain. This has the advantage that\n  // meta functions like boost::is_convertible do not return false positives,\n  // as they can only look at the signature of the conversion constructor\n  // and not at the actual instantiation.\n  //\n  // enable_if_interoperable can be safely used in user code. It falls back to\n  // always enabled for compilers that don't support enable_if or is_convertible.\n  // There is no need for compiler specific workarounds in user code.\n  //\n  // The operators implementation relies on boost::is_convertible not returning\n  // false positives for user/library defined iterator types. See comments\n  // on operator implementation for consequences.\n  //\n#  if defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_SFINAE)\n\n  template <class From, class To>\n  struct enable_if_convertible\n  {\n      typedef boost::iterators::detail::enable_type type;\n  };\n\n#  elif BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292))\n\n  // For some reason vc7.1 needs us to \"cut off\" instantiation\n  // of is_convertible in a few cases.\n  template<typename From, typename To>\n  struct enable_if_convertible\n    : iterators::enable_if<\n        mpl::or_<\n            is_same<From,To>\n          , is_convertible<From, To>\n        >\n      , boost::iterators::detail::enable_type\n    >\n  {};\n\n#  else\n\n  template<typename From, typename To>\n  struct enable_if_convertible\n    : iterators::enable_if<\n          is_convertible<From, To>\n        , boost::iterators::detail::enable_type\n      >\n  {};\n\n# endif\n\n  //\n  // Default template argument handling for iterator_adaptor\n  //\n  namespace detail\n  {\n    // If T is use_default, return the result of invoking\n    // DefaultNullaryFn, otherwise return T.\n    template <class T, class DefaultNullaryFn>\n    struct ia_dflt_help\n      : mpl::eval_if<\n            is_same<T, use_default>\n          , DefaultNullaryFn\n          , mpl::identity<T>\n        >\n    {\n    };\n\n    // A metafunction which computes an iterator_adaptor's base class,\n    // a specialization of iterator_facade.\n    template <\n        class Derived\n      , class Base\n      , class Value\n      , class Traversal\n      , class Reference\n      , class Difference\n    >\n    struct iterator_adaptor_base\n    {\n        typedef iterator_facade<\n            Derived\n\n# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY\n          , typename boost::iterators::detail::ia_dflt_help<\n                Value\n              , mpl::eval_if<\n                    is_same<Reference,use_default>\n                  , iterator_value<Base>\n                  , remove_reference<Reference>\n                >\n            >::type\n# else\n          , typename boost::iterators::detail::ia_dflt_help<\n                Value, iterator_value<Base>\n            >::type\n# endif\n\n          , typename boost::iterators::detail::ia_dflt_help<\n                Traversal\n              , iterator_traversal<Base>\n            >::type\n\n          , typename boost::iterators::detail::ia_dflt_help<\n                Reference\n              , mpl::eval_if<\n                    is_same<Value,use_default>\n                  , iterator_reference<Base>\n                  , add_reference<Value>\n                >\n            >::type\n\n          , typename boost::iterators::detail::ia_dflt_help<\n                Difference, iterator_difference<Base>\n            >::type\n        >\n        type;\n    };\n\n    // workaround for aC++ CR JAGaf33512\n    template <class Tr1, class Tr2>\n    inline void iterator_adaptor_assert_traversal ()\n    {\n      BOOST_STATIC_ASSERT((is_convertible<Tr1, Tr2>::value));\n    }\n  }\n\n  //\n  // Iterator Adaptor\n  //\n  // The parameter ordering changed slightly with respect to former\n  // versions of iterator_adaptor The idea is that when the user needs\n  // to fiddle with the reference type it is highly likely that the\n  // iterator category has to be adjusted as well.  Any of the\n  // following four template arguments may be ommitted or explicitly\n  // replaced by use_default.\n  //\n  //   Value - if supplied, the value_type of the resulting iterator, unless\n  //      const. If const, a conforming compiler strips constness for the\n  //      value_type. If not supplied, iterator_traits<Base>::value_type is used\n  //\n  //   Category - the traversal category of the resulting iterator. If not\n  //      supplied, iterator_traversal<Base>::type is used.\n  //\n  //   Reference - the reference type of the resulting iterator, and in\n  //      particular, the result type of operator*(). If not supplied but\n  //      Value is supplied, Value& is used. Otherwise\n  //      iterator_traits<Base>::reference is used.\n  //\n  //   Difference - the difference_type of the resulting iterator. If not\n  //      supplied, iterator_traits<Base>::difference_type is used.\n  //\n  template <\n      class Derived\n    , class Base\n    , class Value        = use_default\n    , class Traversal    = use_default\n    , class Reference    = use_default\n    , class Difference   = use_default\n  >\n  class iterator_adaptor\n    : public boost::iterators::detail::iterator_adaptor_base<\n        Derived, Base, Value, Traversal, Reference, Difference\n      >::type\n  {\n      friend class iterator_core_access;\n\n   protected:\n      typedef typename boost::iterators::detail::iterator_adaptor_base<\n          Derived, Base, Value, Traversal, Reference, Difference\n      >::type super_t;\n   public:\n      iterator_adaptor() {}\n\n      explicit iterator_adaptor(Base const &iter)\n          : m_iterator(iter)\n      {\n      }\n\n      typedef Base base_type;\n\n      Base const& base() const\n        { return m_iterator; }\n\n   protected:\n      // for convenience in derived classes\n      typedef iterator_adaptor<Derived,Base,Value,Traversal,Reference,Difference> iterator_adaptor_;\n\n      //\n      // lvalue access to the Base object for Derived\n      //\n      Base const& base_reference() const\n        { return m_iterator; }\n\n      Base& base_reference()\n        { return m_iterator; }\n\n   private:\n      //\n      // Core iterator interface for iterator_facade.  This is private\n      // to prevent temptation for Derived classes to use it, which\n      // will often result in an error.  Derived classes should use\n      // base_reference(), above, to get direct access to m_iterator.\n      //\n      typename super_t::reference dereference() const\n        { return *m_iterator; }\n\n      template <\n      class OtherDerived, class OtherIterator, class V, class C, class R, class D\n      >\n      bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const\n      {\n        // Maybe readd with same_distance\n        //           BOOST_STATIC_ASSERT(\n        //               (detail::same_category_and_difference<Derived,OtherDerived>::value)\n        //               );\n          return m_iterator == x.base();\n      }\n\n      typedef typename iterator_category_to_traversal<\n          typename super_t::iterator_category\n      >::type my_traversal;\n\n# define BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(cat) \\\n      boost::iterators::detail::iterator_adaptor_assert_traversal<my_traversal, cat>();\n\n      void advance(typename super_t::difference_type n)\n      {\n          BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag)\n          m_iterator += n;\n      }\n\n      void increment() { ++m_iterator; }\n\n      void decrement()\n      {\n          BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(bidirectional_traversal_tag)\n           --m_iterator;\n      }\n\n      template <\n          class OtherDerived, class OtherIterator, class V, class C, class R, class D\n      >\n      typename super_t::difference_type distance_to(\n          iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const\n      {\n          BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag)\n          // Maybe readd with same_distance\n          //           BOOST_STATIC_ASSERT(\n          //               (detail::same_category_and_difference<Derived,OtherDerived>::value)\n          //               );\n          return y.base() - m_iterator;\n      }\n\n# undef BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL\n\n   private: // data members\n      Base m_iterator;\n  };\n\n} // namespace iterators\n\nusing iterators::iterator_adaptor;\nusing iterators::enable_if_convertible;\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_ITERATOR_ADAPTOR_23022003THW_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/iterator_archetypes.hpp",
    "content": "// (C) Copyright Jeremy Siek 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_ITERATOR_ARCHETYPES_HPP\n#define BOOST_ITERATOR_ARCHETYPES_HPP\n\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/operators.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/iterator.hpp>\n\n#include <boost/iterator/detail/facade_iterator_category.hpp>\n\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n\n#include <boost/concept_archetype.hpp>\n\n#include <boost/mpl/bitand.hpp>\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/equal_to.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/identity.hpp>\n\n#include <cstddef>\n\nnamespace boost {\nnamespace iterators {\n\ntemplate <class Value, class AccessCategory>\nstruct access_archetype;\n\ntemplate <class Derived, class Value, class AccessCategory, class TraversalCategory>\nstruct traversal_archetype;\n\nnamespace archetypes\n{\n  enum {\n      readable_iterator_bit = 1\n    , writable_iterator_bit = 2\n    , swappable_iterator_bit = 4\n    , lvalue_iterator_bit = 8\n  };\n\n  // Not quite tags, since dispatching wouldn't work.\n  typedef mpl::int_<readable_iterator_bit>::type readable_iterator_t;\n  typedef mpl::int_<writable_iterator_bit>::type writable_iterator_t;\n\n  typedef mpl::int_<\n      (readable_iterator_bit|writable_iterator_bit)\n          >::type readable_writable_iterator_t;\n\n  typedef mpl::int_<\n      (readable_iterator_bit|lvalue_iterator_bit)\n          >::type readable_lvalue_iterator_t;\n\n  typedef mpl::int_<\n      (lvalue_iterator_bit|writable_iterator_bit)\n          >::type writable_lvalue_iterator_t;\n\n  typedef mpl::int_<swappable_iterator_bit>::type swappable_iterator_t;\n  typedef mpl::int_<lvalue_iterator_bit>::type lvalue_iterator_t;\n\n  template <class Derived, class Base>\n  struct has_access\n    : mpl::equal_to<\n          mpl::bitand_<Derived,Base>\n        , Base\n      >\n  {};\n}\n\nnamespace detail\n{\n  template <class T>\n  struct assign_proxy\n  {\n      assign_proxy& operator=(T) { return *this; }\n  };\n\n  template <class T>\n  struct read_proxy\n  {\n      operator T() { return static_object<T>::get(); }\n  };\n\n  template <class T>\n  struct read_write_proxy\n    : read_proxy<T> // Use to inherit from assign_proxy, but that doesn't work. -JGS\n  {\n      read_write_proxy& operator=(T) { return *this; }\n  };\n\n  template <class T>\n  struct arrow_proxy\n  {\n      T const* operator->() const { return 0; }\n  };\n\n  struct no_operator_brackets {};\n\n  template <class ValueType>\n  struct readable_operator_brackets\n  {\n      read_proxy<ValueType> operator[](std::ptrdiff_t n) const { return read_proxy<ValueType>(); }\n  };\n\n  template <class ValueType>\n  struct writable_operator_brackets\n  {\n      read_write_proxy<ValueType> operator[](std::ptrdiff_t n) const { return read_write_proxy<ValueType>(); }\n  };\n\n  template <class Value, class AccessCategory, class TraversalCategory>\n  struct operator_brackets\n    : mpl::eval_if<\n          is_convertible<TraversalCategory, random_access_traversal_tag>\n        , mpl::eval_if<\n              archetypes::has_access<\n                  AccessCategory\n                , archetypes::writable_iterator_t\n              >\n            , mpl::identity<writable_operator_brackets<Value> >\n            , mpl::if_<\n                  archetypes::has_access<\n                      AccessCategory\n                    , archetypes::readable_iterator_t\n                  >\n                , readable_operator_brackets<Value>\n                , no_operator_brackets\n              >\n          >\n        , mpl::identity<no_operator_brackets>\n      >::type\n  {};\n\n  template <class TraversalCategory>\n  struct traversal_archetype_impl\n  {\n      template <class Derived,class Value> struct archetype;\n  };\n\n  // Constructor argument for those iterators that\n  // are not default constructible\n  struct ctor_arg {};\n\n  template <class Derived, class Value, class TraversalCategory>\n  struct traversal_archetype_\n    : traversal_archetype_impl<TraversalCategory>::template archetype<Derived,Value>\n  {\n      typedef typename\n        traversal_archetype_impl<TraversalCategory>::template archetype<Derived,Value>\n      base;\n\n      traversal_archetype_() {}\n\n      traversal_archetype_(ctor_arg arg)\n        : base(arg)\n      {}\n  };\n\n  template <>\n  struct traversal_archetype_impl<incrementable_traversal_tag>\n  {\n      template<class Derived, class Value>\n      struct archetype\n      {\n          explicit archetype(ctor_arg) {}\n\n          struct bogus { }; // This use to be void, but that causes trouble for iterator_facade. Need more research. -JGS\n          typedef bogus difference_type;\n\n          Derived& operator++() { return (Derived&)static_object<Derived>::get(); }\n          Derived  operator++(int) const { return (Derived&)static_object<Derived>::get(); }\n      };\n  };\n\n  template <>\n  struct traversal_archetype_impl<single_pass_traversal_tag>\n  {\n      template<class Derived, class Value>\n      struct archetype\n        : public equality_comparable< traversal_archetype_<Derived, Value, single_pass_traversal_tag> >,\n          public traversal_archetype_<Derived, Value, incrementable_traversal_tag>\n      {\n          explicit archetype(ctor_arg arg)\n            : traversal_archetype_<Derived, Value, incrementable_traversal_tag>(arg)\n          {}\n\n          typedef std::ptrdiff_t difference_type;\n      };\n  };\n\n  template <class Derived, class Value>\n  bool operator==(traversal_archetype_<Derived, Value, single_pass_traversal_tag> const&,\n                  traversal_archetype_<Derived, Value, single_pass_traversal_tag> const&) { return true; }\n\n  template <>\n  struct traversal_archetype_impl<forward_traversal_tag>\n  {\n      template<class Derived, class Value>\n      struct archetype\n        : public traversal_archetype_<Derived, Value, single_pass_traversal_tag>\n      {\n          archetype()\n            : traversal_archetype_<Derived, Value, single_pass_traversal_tag>(ctor_arg())\n          {}\n      };\n  };\n\n  template <>\n  struct traversal_archetype_impl<bidirectional_traversal_tag>\n  {\n      template<class Derived, class Value>\n      struct archetype\n        : public traversal_archetype_<Derived, Value, forward_traversal_tag>\n      {\n          Derived& operator--() { return static_object<Derived>::get(); }\n          Derived  operator--(int) const { return static_object<Derived>::get(); }\n      };\n  };\n\n  template <>\n  struct traversal_archetype_impl<random_access_traversal_tag>\n  {\n      template<class Derived, class Value>\n      struct archetype\n        : public traversal_archetype_<Derived, Value, bidirectional_traversal_tag>\n      {\n          Derived& operator+=(std::ptrdiff_t) { return static_object<Derived>::get(); }\n          Derived& operator-=(std::ptrdiff_t) { return static_object<Derived>::get(); }\n      };\n  };\n\n  template <class Derived, class Value>\n  Derived& operator+(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,\n                     std::ptrdiff_t) { return static_object<Derived>::get(); }\n\n  template <class Derived, class Value>\n  Derived& operator+(std::ptrdiff_t,\n                     traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)\n      { return static_object<Derived>::get(); }\n\n  template <class Derived, class Value>\n  Derived& operator-(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,\n                     std::ptrdiff_t)\n      { return static_object<Derived>::get(); }\n\n  template <class Derived, class Value>\n  std::ptrdiff_t operator-(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,\n                           traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)\n      { return 0; }\n\n  template <class Derived, class Value>\n  bool operator<(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,\n                 traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)\n      { return true; }\n\n  template <class Derived, class Value>\n  bool operator>(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,\n                 traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)\n      { return true; }\n\n  template <class Derived, class Value>\n  bool operator<=(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,\n                 traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)\n      { return true; }\n\n  template <class Derived, class Value>\n  bool operator>=(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,\n                 traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)\n      { return true; }\n\n  struct bogus_type;\n\n  template <class Value>\n  struct convertible_type\n    : mpl::if_< is_const<Value>,\n                typename remove_const<Value>::type,\n                bogus_type >\n  {};\n\n} // namespace detail\n\n\ntemplate <class> struct undefined;\n\ntemplate <class AccessCategory>\nstruct iterator_access_archetype_impl\n{\n    template <class Value> struct archetype;\n};\n\ntemplate <class Value, class AccessCategory>\nstruct iterator_access_archetype\n  : iterator_access_archetype_impl<\n        AccessCategory\n    >::template archetype<Value>\n{\n};\n\ntemplate <>\nstruct iterator_access_archetype_impl<\n    archetypes::readable_iterator_t\n>\n{\n    template <class Value>\n    struct archetype\n    {\n        typedef typename remove_cv<Value>::type value_type;\n        typedef Value                           reference;\n        typedef Value*                          pointer;\n\n        value_type operator*() const { return static_object<value_type>::get(); }\n\n        detail::arrow_proxy<Value> operator->() const { return detail::arrow_proxy<Value>(); }\n    };\n};\n\ntemplate <>\nstruct iterator_access_archetype_impl<\n    archetypes::writable_iterator_t\n>\n{\n    template <class Value>\n    struct archetype\n    {\n        BOOST_STATIC_ASSERT(!is_const<Value>::value);\n        typedef void value_type;\n        typedef void reference;\n        typedef void pointer;\n\n        detail::assign_proxy<Value> operator*() const { return detail::assign_proxy<Value>(); }\n    };\n};\n\ntemplate <>\nstruct iterator_access_archetype_impl<\n    archetypes::readable_writable_iterator_t\n>\n{\n    template <class Value>\n    struct archetype\n      : public virtual iterator_access_archetype<\n            Value, archetypes::readable_iterator_t\n        >\n    {\n        typedef detail::read_write_proxy<Value>    reference;\n\n        detail::read_write_proxy<Value> operator*() const { return detail::read_write_proxy<Value>(); }\n    };\n};\n\ntemplate <>\nstruct iterator_access_archetype_impl<archetypes::readable_lvalue_iterator_t>\n{\n    template <class Value>\n    struct archetype\n      : public virtual iterator_access_archetype<\n            Value, archetypes::readable_iterator_t\n        >\n    {\n        typedef Value&    reference;\n\n        Value& operator*() const { return static_object<Value>::get(); }\n        Value* operator->() const { return 0; }\n    };\n};\n\ntemplate <>\nstruct iterator_access_archetype_impl<archetypes::writable_lvalue_iterator_t>\n{\n    template <class Value>\n    struct archetype\n      : public virtual iterator_access_archetype<\n            Value, archetypes::readable_lvalue_iterator_t\n        >\n    {\n        BOOST_STATIC_ASSERT((!is_const<Value>::value));\n    };\n};\n\n\ntemplate <class Value, class AccessCategory, class TraversalCategory>\nstruct iterator_archetype;\n\ntemplate <class Value, class AccessCategory, class TraversalCategory>\nstruct traversal_archetype_base\n  : detail::operator_brackets<\n        typename remove_cv<Value>::type\n      , AccessCategory\n      , TraversalCategory\n    >\n  , detail::traversal_archetype_<\n        iterator_archetype<Value, AccessCategory, TraversalCategory>\n      , Value\n      , TraversalCategory\n    >\n{\n};\n\nnamespace detail\n{\n  template <class Value, class AccessCategory, class TraversalCategory>\n  struct iterator_archetype_base\n    : iterator_access_archetype<Value, AccessCategory>\n    , traversal_archetype_base<Value, AccessCategory, TraversalCategory>\n  {\n      typedef iterator_access_archetype<Value, AccessCategory> access;\n\n      typedef typename detail::facade_iterator_category<\n          TraversalCategory\n        , typename mpl::eval_if<\n              archetypes::has_access<\n                  AccessCategory, archetypes::writable_iterator_t\n              >\n            , remove_const<Value>\n            , add_const<Value>\n          >::type\n        , typename access::reference\n      >::type iterator_category;\n\n      // Needed for some broken libraries (see below)\n      typedef boost::iterator<\n          iterator_category\n        , Value\n        , typename traversal_archetype_base<\n              Value, AccessCategory, TraversalCategory\n          >::difference_type\n        , typename access::pointer\n        , typename access::reference\n      > workaround_iterator_base;\n  };\n}\n\ntemplate <class Value, class AccessCategory, class TraversalCategory>\nstruct iterator_archetype\n  : public detail::iterator_archetype_base<Value, AccessCategory, TraversalCategory>\n\n    // These broken libraries require derivation from std::iterator\n    // (or related magic) in order to handle iter_swap and other\n    // iterator operations\n# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, < 310)           \\\n    || BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(0x20101))\n  , public detail::iterator_archetype_base<\n        Value, AccessCategory, TraversalCategory\n    >::workaround_iterator_base\n# endif\n{\n    // Derivation from std::iterator above caused references to nested\n    // types to be ambiguous, so now we have to redeclare them all\n    // here.\n# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, < 310)           \\\n    || BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(0x20101))\n\n    typedef detail::iterator_archetype_base<\n        Value,AccessCategory,TraversalCategory\n    > base;\n\n    typedef typename base::value_type value_type;\n    typedef typename base::reference reference;\n    typedef typename base::pointer pointer;\n    typedef typename base::difference_type difference_type;\n    typedef typename base::iterator_category iterator_category;\n# endif\n\n    iterator_archetype() { }\n    iterator_archetype(iterator_archetype const& x)\n      : detail::iterator_archetype_base<\n            Value\n          , AccessCategory\n          , TraversalCategory\n        >(x)\n    {}\n\n    iterator_archetype& operator=(iterator_archetype const&)\n        { return *this; }\n\n# if 0\n    // Optional conversion from mutable\n    iterator_archetype(\n        iterator_archetype<\n        typename detail::convertible_type<Value>::type\n      , AccessCategory\n      , TraversalCategory> const&\n    );\n# endif\n};\n\n} // namespace iterators\n\n// Backward compatibility names\nnamespace iterator_archetypes = iterators::archetypes;\nusing iterators::access_archetype;\nusing iterators::traversal_archetype;\nusing iterators::iterator_archetype;\nusing iterators::undefined;\nusing iterators::iterator_access_archetype_impl;\nusing iterators::traversal_archetype_base;\n\n} // namespace boost\n\n#endif // BOOST_ITERATOR_ARCHETYPES_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/iterator_categories.hpp",
    "content": "// (C) Copyright Jeremy Siek 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_ITERATOR_CATEGORIES_HPP\n# define BOOST_ITERATOR_CATEGORIES_HPP\n\n# include <boost/config.hpp>\n# include <boost/detail/iterator.hpp>\n# include <boost/iterator/detail/config_def.hpp>\n\n# include <boost/detail/workaround.hpp>\n\n# include <boost/mpl/eval_if.hpp>\n# include <boost/mpl/identity.hpp>\n# include <boost/mpl/placeholders.hpp>\n# include <boost/mpl/aux_/lambda_support.hpp>\n\n# include <boost/type_traits/is_convertible.hpp>\n\n# include <boost/static_assert.hpp>\n\nnamespace boost {\nnamespace iterators {\n\n//\n// Traversal Categories\n//\n\nstruct no_traversal_tag {};\n\nstruct incrementable_traversal_tag\n  : no_traversal_tag\n{\n//     incrementable_traversal_tag() {}\n//     incrementable_traversal_tag(std::output_iterator_tag const&) {};\n};\n\nstruct single_pass_traversal_tag\n  : incrementable_traversal_tag\n{\n//     single_pass_traversal_tag() {}\n//     single_pass_traversal_tag(std::input_iterator_tag const&) {};\n};\n\nstruct forward_traversal_tag\n  : single_pass_traversal_tag\n{\n//     forward_traversal_tag() {}\n//     forward_traversal_tag(std::forward_iterator_tag const&) {};\n};\n\nstruct bidirectional_traversal_tag\n  : forward_traversal_tag\n{\n//     bidirectional_traversal_tag() {};\n//     bidirectional_traversal_tag(std::bidirectional_iterator_tag const&) {};\n};\n\nstruct random_access_traversal_tag\n  : bidirectional_traversal_tag\n{\n//     random_access_traversal_tag() {};\n//     random_access_traversal_tag(std::random_access_iterator_tag const&) {};\n};\n\nnamespace detail\n{\n  //\n  // Convert a \"strictly old-style\" iterator category to a traversal\n  // tag.  This is broken out into a separate metafunction to reduce\n  // the cost of instantiating iterator_category_to_traversal, below,\n  // for new-style types.\n  //\n  template <class Cat>\n  struct old_category_to_traversal\n    : mpl::eval_if<\n          is_convertible<Cat,std::random_access_iterator_tag>\n        , mpl::identity<random_access_traversal_tag>\n        , mpl::eval_if<\n              is_convertible<Cat,std::bidirectional_iterator_tag>\n            , mpl::identity<bidirectional_traversal_tag>\n            , mpl::eval_if<\n                  is_convertible<Cat,std::forward_iterator_tag>\n                , mpl::identity<forward_traversal_tag>\n                , mpl::eval_if<\n                      is_convertible<Cat,std::input_iterator_tag>\n                    , mpl::identity<single_pass_traversal_tag>\n                    , mpl::eval_if<\n                          is_convertible<Cat,std::output_iterator_tag>\n                        , mpl::identity<incrementable_traversal_tag>\n                        , void\n                      >\n                  >\n              >\n          >\n      >\n  {};\n\n} // namespace detail\n\n//\n// Convert an iterator category into a traversal tag\n//\ntemplate <class Cat>\nstruct iterator_category_to_traversal\n  : mpl::eval_if< // if already convertible to a traversal tag, we're done.\n        is_convertible<Cat,incrementable_traversal_tag>\n      , mpl::identity<Cat>\n      , boost::iterators::detail::old_category_to_traversal<Cat>\n    >\n{};\n\n// Trait to get an iterator's traversal category\ntemplate <class Iterator = mpl::_1>\nstruct iterator_traversal\n  : iterator_category_to_traversal<\n        typename boost::detail::iterator_traits<Iterator>::iterator_category\n    >\n{};\n\n# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n// Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work\n// out well.  Instantiating the nested apply template also\n// requires instantiating iterator_traits on the\n// placeholder. Instead we just specialize it as a metafunction\n// class.\ntemplate <>\nstruct iterator_traversal<mpl::_1>\n{\n    template <class T>\n    struct apply : iterator_traversal<T>\n    {};\n};\ntemplate <>\nstruct iterator_traversal<mpl::_>\n  : iterator_traversal<mpl::_1>\n{};\n# endif\n\n//\n// Convert an iterator traversal to one of the traversal tags.\n//\ntemplate <class Traversal>\nstruct pure_traversal_tag\n  : mpl::eval_if<\n        is_convertible<Traversal,random_access_traversal_tag>\n      , mpl::identity<random_access_traversal_tag>\n      , mpl::eval_if<\n            is_convertible<Traversal,bidirectional_traversal_tag>\n          , mpl::identity<bidirectional_traversal_tag>\n          , mpl::eval_if<\n                is_convertible<Traversal,forward_traversal_tag>\n              , mpl::identity<forward_traversal_tag>\n              , mpl::eval_if<\n                    is_convertible<Traversal,single_pass_traversal_tag>\n                  , mpl::identity<single_pass_traversal_tag>\n                  , mpl::eval_if<\n                        is_convertible<Traversal,incrementable_traversal_tag>\n                      , mpl::identity<incrementable_traversal_tag>\n                      , void\n                    >\n                >\n            >\n        >\n    >\n{\n};\n\n//\n// Trait to retrieve one of the iterator traversal tags from the iterator category or traversal.\n//\ntemplate <class Iterator = mpl::_1>\nstruct pure_iterator_traversal\n  : pure_traversal_tag<typename iterator_traversal<Iterator>::type>\n{};\n\n# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\ntemplate <>\nstruct pure_iterator_traversal<mpl::_1>\n{\n    template <class T>\n    struct apply : pure_iterator_traversal<T>\n    {};\n};\ntemplate <>\nstruct pure_iterator_traversal<mpl::_>\n  : pure_iterator_traversal<mpl::_1>\n{};\n# endif\n\n} // namespace iterators\n\nusing iterators::no_traversal_tag;\nusing iterators::incrementable_traversal_tag;\nusing iterators::single_pass_traversal_tag;\nusing iterators::forward_traversal_tag;\nusing iterators::bidirectional_traversal_tag;\nusing iterators::random_access_traversal_tag;\nusing iterators::iterator_category_to_traversal;\nusing iterators::iterator_traversal;\n\n// This import is needed for backward compatibility with Boost.Range:\n// boost/range/detail/demote_iterator_traversal_tag.hpp\n// It should be removed when that header is fixed.\nnamespace detail {\nusing iterators::pure_traversal_tag;\n} // namespace detail\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_ITERATOR_CATEGORIES_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/iterator_concepts.hpp",
    "content": "// (C) Copyright Jeremy Siek 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_ITERATOR_CONCEPTS_HPP\n#define BOOST_ITERATOR_CONCEPTS_HPP\n\n#include <boost/concept_check.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n\n// Use boost::detail::iterator_traits to work around some MSVC/Dinkumware problems.\n#include <boost/detail/iterator.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_integral.hpp>\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/or.hpp>\n\n#include <boost/static_assert.hpp>\n\n// Use boost/limits to work around missing limits headers on some compilers\n#include <boost/limits.hpp>\n#include <boost/config.hpp>\n\n#include <algorithm>\n\n#include <boost/concept/detail/concept_def.hpp>\n\nnamespace boost_concepts\n{\n  // Used a different namespace here (instead of \"boost\") so that the\n  // concept descriptions do not take for granted the names in\n  // namespace boost.\n\n  //===========================================================================\n  // Iterator Access Concepts\n\n  BOOST_concept(ReadableIterator,(Iterator))\n    : boost::Assignable<Iterator>\n    , boost::CopyConstructible<Iterator>\n\n  {\n      typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type value_type;\n      typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference reference;\n\n      BOOST_CONCEPT_USAGE(ReadableIterator)\n      {\n\n          value_type v = *i;\n          boost::ignore_unused_variable_warning(v);\n      }\n  private:\n      Iterator i;\n  };\n\n  template <\n      typename Iterator\n    , typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type\n  >\n  struct WritableIterator\n    : boost::CopyConstructible<Iterator>\n  {\n      BOOST_CONCEPT_USAGE(WritableIterator)\n      {\n          *i = v;\n      }\n  private:\n      ValueType v;\n      Iterator i;\n  };\n\n  template <\n      typename Iterator\n    , typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type\n  >\n  struct WritableIteratorConcept : WritableIterator<Iterator,ValueType> {};\n\n  BOOST_concept(SwappableIterator,(Iterator))\n  {\n      BOOST_CONCEPT_USAGE(SwappableIterator)\n      {\n          std::iter_swap(i1, i2);\n      }\n  private:\n      Iterator i1;\n      Iterator i2;\n  };\n\n  BOOST_concept(LvalueIterator,(Iterator))\n  {\n      typedef typename boost::detail::iterator_traits<Iterator>::value_type value_type;\n\n      BOOST_CONCEPT_USAGE(LvalueIterator)\n      {\n        value_type& r = const_cast<value_type&>(*i);\n        boost::ignore_unused_variable_warning(r);\n      }\n  private:\n      Iterator i;\n  };\n\n\n  //===========================================================================\n  // Iterator Traversal Concepts\n\n  BOOST_concept(IncrementableIterator,(Iterator))\n    : boost::Assignable<Iterator>\n    , boost::CopyConstructible<Iterator>\n  {\n      typedef typename boost::iterator_traversal<Iterator>::type traversal_category;\n\n      BOOST_CONCEPT_ASSERT((\n        boost::Convertible<\n            traversal_category\n          , boost::incrementable_traversal_tag\n        >));\n\n      BOOST_CONCEPT_USAGE(IncrementableIterator)\n      {\n          ++i;\n          (void)i++;\n      }\n  private:\n      Iterator i;\n  };\n\n  BOOST_concept(SinglePassIterator,(Iterator))\n    : IncrementableIterator<Iterator>\n    , boost::EqualityComparable<Iterator>\n\n  {\n      BOOST_CONCEPT_ASSERT((\n          boost::Convertible<\n             BOOST_DEDUCED_TYPENAME SinglePassIterator::traversal_category\n           , boost::single_pass_traversal_tag\n          > ));\n  };\n\n  BOOST_concept(ForwardTraversal,(Iterator))\n    : SinglePassIterator<Iterator>\n    , boost::DefaultConstructible<Iterator>\n  {\n      typedef typename boost::detail::iterator_traits<Iterator>::difference_type difference_type;\n\n      BOOST_MPL_ASSERT((boost::is_integral<difference_type>));\n      BOOST_MPL_ASSERT_RELATION(std::numeric_limits<difference_type>::is_signed, ==, true);\n\n      BOOST_CONCEPT_ASSERT((\n          boost::Convertible<\n             BOOST_DEDUCED_TYPENAME ForwardTraversal::traversal_category\n           , boost::forward_traversal_tag\n          > ));\n  };\n\n  BOOST_concept(BidirectionalTraversal,(Iterator))\n    : ForwardTraversal<Iterator>\n  {\n      BOOST_CONCEPT_ASSERT((\n          boost::Convertible<\n             BOOST_DEDUCED_TYPENAME BidirectionalTraversal::traversal_category\n           , boost::bidirectional_traversal_tag\n          > ));\n\n      BOOST_CONCEPT_USAGE(BidirectionalTraversal)\n      {\n          --i;\n          (void)i--;\n      }\n   private:\n      Iterator i;\n  };\n\n  BOOST_concept(RandomAccessTraversal,(Iterator))\n    : BidirectionalTraversal<Iterator>\n  {\n      BOOST_CONCEPT_ASSERT((\n          boost::Convertible<\n             BOOST_DEDUCED_TYPENAME RandomAccessTraversal::traversal_category\n           , boost::random_access_traversal_tag\n          > ));\n\n      BOOST_CONCEPT_USAGE(RandomAccessTraversal)\n      {\n          i += n;\n          i = i + n;\n          i = n + i;\n          i -= n;\n          i = i - n;\n          n = i - j;\n      }\n\n   private:\n      typename BidirectionalTraversal<Iterator>::difference_type n;\n      Iterator i, j;\n  };\n\n  //===========================================================================\n  // Iterator Interoperability\n\n  namespace detail\n  {\n    template <typename Iterator1, typename Iterator2>\n    void interop_single_pass_constraints(Iterator1 const& i1, Iterator2 const& i2)\n    {\n        bool b;\n        b = i1 == i2;\n        b = i1 != i2;\n\n        b = i2 == i1;\n        b = i2 != i1;\n        boost::ignore_unused_variable_warning(b);\n    }\n\n    template <typename Iterator1, typename Iterator2>\n    void interop_rand_access_constraints(\n        Iterator1 const& i1, Iterator2 const& i2,\n        boost::random_access_traversal_tag, boost::random_access_traversal_tag)\n    {\n        bool b;\n        typename boost::detail::iterator_traits<Iterator2>::difference_type n;\n        b = i1 <  i2;\n        b = i1 <= i2;\n        b = i1 >  i2;\n        b = i1 >= i2;\n        n = i1 -  i2;\n\n        b = i2 <  i1;\n        b = i2 <= i1;\n        b = i2 >  i1;\n        b = i2 >= i1;\n        n = i2 -  i1;\n        boost::ignore_unused_variable_warning(b);\n        boost::ignore_unused_variable_warning(n);\n    }\n\n    template <typename Iterator1, typename Iterator2>\n    void interop_rand_access_constraints(\n        Iterator1 const&, Iterator2 const&,\n        boost::single_pass_traversal_tag, boost::single_pass_traversal_tag)\n    { }\n\n  } // namespace detail\n\n  BOOST_concept(InteroperableIterator,(Iterator)(ConstIterator))\n  {\n   private:\n      typedef typename boost::iterators::pure_iterator_traversal<Iterator>::type traversal_category;\n      typedef typename boost::iterators::pure_iterator_traversal<ConstIterator>::type const_traversal_category;\n\n   public:\n      BOOST_CONCEPT_ASSERT((SinglePassIterator<Iterator>));\n      BOOST_CONCEPT_ASSERT((SinglePassIterator<ConstIterator>));\n\n      BOOST_CONCEPT_USAGE(InteroperableIterator)\n      {\n          detail::interop_single_pass_constraints(i, ci);\n          detail::interop_rand_access_constraints(i, ci, traversal_category(), const_traversal_category());\n\n          ci = i;\n      }\n\n   private:\n      Iterator      i;\n      ConstIterator ci;\n  };\n\n} // namespace boost_concepts\n\n#include <boost/concept/detail/concept_undef.hpp>\n\n#endif // BOOST_ITERATOR_CONCEPTS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/iterator_facade.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_ITERATOR_FACADE_23022003THW_HPP\n#define BOOST_ITERATOR_FACADE_23022003THW_HPP\n\n#include <boost/config.hpp>\n#include <boost/iterator.hpp>\n#include <boost/iterator/interoperable.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n\n#include <boost/iterator/detail/facade_iterator_category.hpp>\n#include <boost/iterator/detail/enable_if.hpp>\n\n#include <boost/static_assert.hpp>\n#include <boost/utility/addressof.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_pointer.hpp>\n#include <boost/type_traits/add_lvalue_reference.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/is_pod.hpp>\n\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/or.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/always.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/identity.hpp>\n\n#include <boost/iterator/detail/config_def.hpp> // this goes last\n\nnamespace boost {\nnamespace iterators {\n\n  // This forward declaration is required for the friend declaration\n  // in iterator_core_access\n  template <class I, class V, class TC, class R, class D> class iterator_facade;\n\n  namespace detail\n  {\n    // A binary metafunction class that always returns bool.  VC6\n    // ICEs on mpl::always<bool>, probably because of the default\n    // parameters.\n    struct always_bool2\n    {\n        template <class T, class U>\n        struct apply\n        {\n            typedef bool type;\n        };\n    };\n\n    // The type trait checks if the category or traversal is at least as advanced as the specified required traversal\n    template< typename CategoryOrTraversal, typename Required >\n    struct is_traversal_at_least :\n        public boost::is_convertible< typename iterator_category_to_traversal< CategoryOrTraversal >::type, Required >\n    {};\n\n    //\n    // enable if for use in operator implementation.\n    //\n    template <\n        class Facade1\n      , class Facade2\n      , class Return\n    >\n    struct enable_if_interoperable :\n        public boost::iterators::enable_if<\n            is_interoperable< Facade1, Facade2 >\n          , Return\n        >\n    {};\n\n    //\n    // enable if for use in implementation of operators specific for random access traversal.\n    //\n    template <\n        class Facade1\n      , class Facade2\n      , class Return\n    >\n    struct enable_if_interoperable_and_random_access_traversal :\n        public boost::iterators::enable_if<\n            mpl::and_<\n                is_interoperable< Facade1, Facade2 >\n              , is_traversal_at_least< typename iterator_category< Facade1 >::type, random_access_traversal_tag >\n              , is_traversal_at_least< typename iterator_category< Facade2 >::type, random_access_traversal_tag >\n            >\n          , Return\n        >\n    {};\n\n    //\n    // Generates associated types for an iterator_facade with the\n    // given parameters.\n    //\n    template <\n        class ValueParam\n      , class CategoryOrTraversal\n      , class Reference\n      , class Difference\n    >\n    struct iterator_facade_types\n    {\n        typedef typename facade_iterator_category<\n            CategoryOrTraversal, ValueParam, Reference\n        >::type iterator_category;\n\n        typedef typename remove_const<ValueParam>::type value_type;\n\n        // Not the real associated pointer type\n        typedef typename mpl::eval_if<\n            boost::iterators::detail::iterator_writability_disabled<ValueParam,Reference>\n          , add_pointer<const value_type>\n          , add_pointer<value_type>\n        >::type pointer;\n\n# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)                          \\\n    && (BOOST_WORKAROUND(_STLPORT_VERSION, BOOST_TESTED_AT(0x452))              \\\n        || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, BOOST_TESTED_AT(310)))     \\\n    || BOOST_WORKAROUND(BOOST_RWSTD_VER, BOOST_TESTED_AT(0x20101))              \\\n    || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 310)\n\n        // To interoperate with some broken library/compiler\n        // combinations, user-defined iterators must be derived from\n        // std::iterator.  It is possible to implement a standard\n        // library for broken compilers without this limitation.\n#  define BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE 1\n\n        typedef\n           iterator<iterator_category, value_type, Difference, pointer, Reference>\n        base;\n# endif\n    };\n\n    // iterators whose dereference operators reference the same value\n    // for all iterators into the same sequence (like many input\n    // iterators) need help with their postfix ++: the referenced\n    // value must be read and stored away before the increment occurs\n    // so that *a++ yields the originally referenced element and not\n    // the next one.\n    template <class Iterator>\n    class postfix_increment_proxy\n    {\n        typedef typename iterator_value<Iterator>::type value_type;\n     public:\n        explicit postfix_increment_proxy(Iterator const& x)\n          : stored_value(*x)\n        {}\n\n        // Returning a mutable reference allows nonsense like\n        // (*r++).mutate(), but it imposes fewer assumptions about the\n        // behavior of the value_type.  In particular, recall that\n        // (*r).mutate() is legal if operator* returns by value.\n        value_type&\n        operator*() const\n        {\n            return this->stored_value;\n        }\n     private:\n        mutable value_type stored_value;\n    };\n\n    //\n    // In general, we can't determine that such an iterator isn't\n    // writable -- we also need to store a copy of the old iterator so\n    // that it can be written into.\n    template <class Iterator>\n    class writable_postfix_increment_proxy\n    {\n        typedef typename iterator_value<Iterator>::type value_type;\n     public:\n        explicit writable_postfix_increment_proxy(Iterator const& x)\n          : stored_value(*x)\n          , stored_iterator(x)\n        {}\n\n        // Dereferencing must return a proxy so that both *r++ = o and\n        // value_type(*r++) can work.  In this case, *r is the same as\n        // *r++, and the conversion operator below is used to ensure\n        // readability.\n        writable_postfix_increment_proxy const&\n        operator*() const\n        {\n            return *this;\n        }\n\n        // Provides readability of *r++\n        operator value_type&() const\n        {\n            return stored_value;\n        }\n\n        // Provides writability of *r++\n        template <class T>\n        T const& operator=(T const& x) const\n        {\n            *this->stored_iterator = x;\n            return x;\n        }\n\n        // This overload just in case only non-const objects are writable\n        template <class T>\n        T& operator=(T& x) const\n        {\n            *this->stored_iterator = x;\n            return x;\n        }\n\n        // Provides X(r++)\n        operator Iterator const&() const\n        {\n            return stored_iterator;\n        }\n\n     private:\n        mutable value_type stored_value;\n        Iterator stored_iterator;\n    };\n\n# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n    template <class Reference, class Value>\n    struct is_non_proxy_reference_impl\n    {\n        static Reference r;\n\n        template <class R>\n        static typename mpl::if_<\n            is_convertible<\n                R const volatile*\n              , Value const volatile*\n            >\n          , char[1]\n          , char[2]\n        >::type& helper(R const&);\n\n        BOOST_STATIC_CONSTANT(bool, value = sizeof(helper(r)) == 1);\n    };\n\n    template <class Reference, class Value>\n    struct is_non_proxy_reference\n      : mpl::bool_<\n            is_non_proxy_reference_impl<Reference, Value>::value\n        >\n    {};\n# else\n    template <class Reference, class Value>\n    struct is_non_proxy_reference\n      : is_convertible<\n            typename remove_reference<Reference>::type\n            const volatile*\n          , Value const volatile*\n        >\n    {};\n# endif\n\n    // A metafunction to choose the result type of postfix ++\n    //\n    // Because the C++98 input iterator requirements say that *r++ has\n    // type T (value_type), implementations of some standard\n    // algorithms like lexicographical_compare may use constructions\n    // like:\n    //\n    //          *r++ < *s++\n    //\n    // If *r++ returns a proxy (as required if r is writable but not\n    // multipass), this sort of expression will fail unless the proxy\n    // supports the operator<.  Since there are any number of such\n    // operations, we're not going to try to support them.  Therefore,\n    // even if r++ returns a proxy, *r++ will only return a proxy if\n    // *r also returns a proxy.\n    template <class Iterator, class Value, class Reference, class CategoryOrTraversal>\n    struct postfix_increment_result\n      : mpl::eval_if<\n            mpl::and_<\n                // A proxy is only needed for readable iterators\n                is_convertible<\n                    Reference\n                    // Use add_lvalue_reference to form `reference to Value` due to\n                    // some (strict) C++03 compilers (e.g. `gcc -std=c++03`) reject\n                    // 'reference-to-reference' in the template which described in CWG\n                    // DR106.\n                    // http://www.open-std.org/Jtc1/sc22/wg21/docs/cwg_defects.html#106\n                  , typename add_lvalue_reference<Value const>::type\n                >\n\n                // No multipass iterator can have values that disappear\n                // before positions can be re-visited\n              , mpl::not_<\n                    is_convertible<\n                        typename iterator_category_to_traversal<CategoryOrTraversal>::type\n                      , forward_traversal_tag\n                    >\n                >\n            >\n          , mpl::if_<\n                is_non_proxy_reference<Reference,Value>\n              , postfix_increment_proxy<Iterator>\n              , writable_postfix_increment_proxy<Iterator>\n            >\n          , mpl::identity<Iterator>\n        >\n    {};\n\n    // operator->() needs special support for input iterators to strictly meet the\n    // standard's requirements. If *i is not a reference type, we must still\n    // produce an lvalue to which a pointer can be formed.  We do that by\n    // returning a proxy object containing an instance of the reference object.\n    template <class Reference, class Pointer>\n    struct operator_arrow_dispatch // proxy references\n    {\n        struct proxy\n        {\n            explicit proxy(Reference const & x) : m_ref(x) {}\n            Reference* operator->() { return boost::addressof(m_ref); }\n            // This function is needed for MWCW and BCC, which won't call\n            // operator-> again automatically per 13.3.1.2 para 8\n            operator Reference*() { return boost::addressof(m_ref); }\n            Reference m_ref;\n        };\n        typedef proxy result_type;\n        static result_type apply(Reference const & x)\n        {\n            return result_type(x);\n        }\n    };\n\n    template <class T, class Pointer>\n    struct operator_arrow_dispatch<T&, Pointer> // \"real\" references\n    {\n        typedef Pointer result_type;\n        static result_type apply(T& x)\n        {\n            return boost::addressof(x);\n        }\n    };\n\n    // A proxy return type for operator[], needed to deal with\n    // iterators that may invalidate referents upon destruction.\n    // Consider the temporary iterator in *(a + n)\n    template <class Iterator>\n    class operator_brackets_proxy\n    {\n        // Iterator is actually an iterator_facade, so we do not have to\n        // go through iterator_traits to access the traits.\n        typedef typename Iterator::reference  reference;\n        typedef typename Iterator::value_type value_type;\n\n     public:\n        operator_brackets_proxy(Iterator const& iter)\n          : m_iter(iter)\n        {}\n\n        operator reference() const\n        {\n            return *m_iter;\n        }\n\n        operator_brackets_proxy& operator=(value_type const& val)\n        {\n            *m_iter = val;\n            return *this;\n        }\n\n     private:\n        Iterator m_iter;\n    };\n\n    // A metafunction that determines whether operator[] must return a\n    // proxy, or whether it can simply return a copy of the value_type.\n    template <class ValueType, class Reference>\n    struct use_operator_brackets_proxy\n      : mpl::not_<\n            mpl::and_<\n                // Really we want an is_copy_constructible trait here,\n                // but is_POD will have to suffice in the meantime.\n                boost::is_POD<ValueType>\n              , iterator_writability_disabled<ValueType,Reference>\n            >\n        >\n    {};\n\n    template <class Iterator, class Value, class Reference>\n    struct operator_brackets_result\n    {\n        typedef typename mpl::if_<\n            use_operator_brackets_proxy<Value,Reference>\n          , operator_brackets_proxy<Iterator>\n          , Value\n        >::type type;\n    };\n\n    template <class Iterator>\n    operator_brackets_proxy<Iterator> make_operator_brackets_result(Iterator const& iter, mpl::true_)\n    {\n        return operator_brackets_proxy<Iterator>(iter);\n    }\n\n    template <class Iterator>\n    typename Iterator::value_type make_operator_brackets_result(Iterator const& iter, mpl::false_)\n    {\n      return *iter;\n    }\n\n    struct choose_difference_type\n    {\n        template <class I1, class I2>\n        struct apply\n          :\n# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP\n          iterator_difference<I1>\n# else\n          mpl::eval_if<\n              is_convertible<I2,I1>\n            , iterator_difference<I1>\n            , iterator_difference<I2>\n          >\n# endif\n        {};\n\n    };\n\n    template <\n        class Derived\n      , class Value\n      , class CategoryOrTraversal\n      , class Reference\n      , class Difference\n      , bool IsBidirectionalTraversal\n      , bool IsRandomAccessTraversal\n    >\n    class iterator_facade_base;\n\n  } // namespace detail\n\n\n  // Macros which describe the declarations of binary operators\n# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY\n#  define BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, enabler)       \\\n    template <                                                              \\\n        class Derived1, class V1, class TC1, class Reference1, class Difference1 \\\n      , class Derived2, class V2, class TC2, class Reference2, class Difference2 \\\n    >                                                                       \\\n    prefix typename mpl::apply2<result_type,Derived1,Derived2>::type \\\n    operator op(                                                            \\\n        iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs   \\\n      , iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)\n# else\n#  define BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, enabler)   \\\n    template <                                                          \\\n        class Derived1, class V1, class TC1, class Reference1, class Difference1 \\\n      , class Derived2, class V2, class TC2, class Reference2, class Difference2 \\\n    >                                                                   \\\n    prefix typename enabler<                                            \\\n        Derived1, Derived2                                              \\\n      , typename mpl::apply2<result_type,Derived1,Derived2>::type       \\\n    >::type                                                             \\\n    operator op(                                                        \\\n        iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs   \\\n      , iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)\n# endif\n\n#  define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type)       \\\n    BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, boost::iterators::detail::enable_if_interoperable)\n\n#  define BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(prefix, op, result_type)       \\\n    BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, boost::iterators::detail::enable_if_interoperable_and_random_access_traversal)\n\n#  define BOOST_ITERATOR_FACADE_PLUS_HEAD(prefix,args)              \\\n    template <class Derived, class V, class TC, class R, class D>   \\\n    prefix typename boost::iterators::enable_if<                    \\\n        boost::iterators::detail::is_traversal_at_least< TC, boost::iterators::random_access_traversal_tag >,  \\\n        Derived                                                     \\\n    >::type operator+ args\n\n  //\n  // Helper class for granting access to the iterator core interface.\n  //\n  // The simple core interface is used by iterator_facade. The core\n  // interface of a user/library defined iterator type should not be made public\n  // so that it does not clutter the public interface. Instead iterator_core_access\n  // should be made friend so that iterator_facade can access the core\n  // interface through iterator_core_access.\n  //\n  class iterator_core_access\n  {\n# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)\n      // Tasteless as this may seem, making all members public allows member templates\n      // to work in the absence of member template friends.\n   public:\n# else\n\n      template <class I, class V, class TC, class R, class D> friend class iterator_facade;\n      template <class I, class V, class TC, class R, class D, bool IsBidirectionalTraversal, bool IsRandomAccessTraversal>\n      friend class detail::iterator_facade_base;\n\n#  define BOOST_ITERATOR_FACADE_RELATION(op)                                \\\n      BOOST_ITERATOR_FACADE_INTEROP_HEAD(friend,op, boost::iterators::detail::always_bool2);\n\n      BOOST_ITERATOR_FACADE_RELATION(==)\n      BOOST_ITERATOR_FACADE_RELATION(!=)\n\n#  undef BOOST_ITERATOR_FACADE_RELATION\n\n#  define BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(op)                                \\\n      BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(friend,op, boost::iterators::detail::always_bool2);\n\n      BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(<)\n      BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(>)\n      BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(<=)\n      BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(>=)\n\n#  undef BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION\n\n      BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(\n          friend, -, boost::iterators::detail::choose_difference_type)\n      ;\n\n      BOOST_ITERATOR_FACADE_PLUS_HEAD(\n          friend inline\n        , (iterator_facade<Derived, V, TC, R, D> const&\n        , typename Derived::difference_type)\n      )\n      ;\n\n      BOOST_ITERATOR_FACADE_PLUS_HEAD(\n          friend inline\n        , (typename Derived::difference_type\n        , iterator_facade<Derived, V, TC, R, D> const&)\n      )\n      ;\n\n# endif\n\n      template <class Facade>\n      static typename Facade::reference dereference(Facade const& f)\n      {\n          return f.dereference();\n      }\n\n      template <class Facade>\n      static void increment(Facade& f)\n      {\n          f.increment();\n      }\n\n      template <class Facade>\n      static void decrement(Facade& f)\n      {\n          f.decrement();\n      }\n\n      template <class Facade1, class Facade2>\n      static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::true_)\n      {\n          return f1.equal(f2);\n      }\n\n      template <class Facade1, class Facade2>\n      static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::false_)\n      {\n          return f2.equal(f1);\n      }\n\n      template <class Facade>\n      static void advance(Facade& f, typename Facade::difference_type n)\n      {\n          f.advance(n);\n      }\n\n      template <class Facade1, class Facade2>\n      static typename Facade1::difference_type distance_from(\n          Facade1 const& f1, Facade2 const& f2, mpl::true_)\n      {\n          return -f1.distance_to(f2);\n      }\n\n      template <class Facade1, class Facade2>\n      static typename Facade2::difference_type distance_from(\n          Facade1 const& f1, Facade2 const& f2, mpl::false_)\n      {\n          return f2.distance_to(f1);\n      }\n\n      //\n      // Curiously Recurring Template interface.\n      //\n      template <class I, class V, class TC, class R, class D>\n      static I& derived(iterator_facade<I,V,TC,R,D>& facade)\n      {\n          return *static_cast<I*>(&facade);\n      }\n\n      template <class I, class V, class TC, class R, class D>\n      static I const& derived(iterator_facade<I,V,TC,R,D> const& facade)\n      {\n          return *static_cast<I const*>(&facade);\n      }\n\n      // objects of this class are useless\n      BOOST_DELETED_FUNCTION(iterator_core_access())\n  };\n\n  namespace detail {\n\n    // Implementation for forward traversal iterators\n    template <\n        class Derived\n      , class Value\n      , class CategoryOrTraversal\n      , class Reference\n      , class Difference\n    >\n    class iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, false, false >\n# ifdef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE\n        : public boost::iterators::detail::iterator_facade_types<\n             Value, CategoryOrTraversal, Reference, Difference\n          >::base\n#  undef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE\n# endif\n    {\n    private:\n        typedef boost::iterators::detail::iterator_facade_types<\n            Value, CategoryOrTraversal, Reference, Difference\n        > associated_types;\n\n        typedef boost::iterators::detail::operator_arrow_dispatch<\n            Reference\n          , typename associated_types::pointer\n        > operator_arrow_dispatch_;\n\n    public:\n        typedef typename associated_types::value_type value_type;\n        typedef Reference reference;\n        typedef Difference difference_type;\n\n        typedef typename operator_arrow_dispatch_::result_type pointer;\n\n        typedef typename associated_types::iterator_category iterator_category;\n\n    public:\n        reference operator*() const\n        {\n            return iterator_core_access::dereference(this->derived());\n        }\n\n        pointer operator->() const\n        {\n            return operator_arrow_dispatch_::apply(*this->derived());\n        }\n\n        Derived& operator++()\n        {\n            iterator_core_access::increment(this->derived());\n            return this->derived();\n        }\n\n    protected:\n        //\n        // Curiously Recurring Template interface.\n        //\n        Derived& derived()\n        {\n            return *static_cast<Derived*>(this);\n        }\n\n        Derived const& derived() const\n        {\n            return *static_cast<Derived const*>(this);\n        }\n    };\n\n    // Implementation for bidirectional traversal iterators\n    template <\n        class Derived\n      , class Value\n      , class CategoryOrTraversal\n      , class Reference\n      , class Difference\n    >\n    class iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, false > :\n        public iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, false, false >\n    {\n    public:\n        Derived& operator--()\n        {\n            iterator_core_access::decrement(this->derived());\n            return this->derived();\n        }\n\n        Derived operator--(int)\n        {\n            Derived tmp(this->derived());\n            --*this;\n            return tmp;\n        }\n    };\n\n    // Implementation for random access traversal iterators\n    template <\n        class Derived\n      , class Value\n      , class CategoryOrTraversal\n      , class Reference\n      , class Difference\n    >\n    class iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, true > :\n        public iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, false >\n    {\n    private:\n        typedef iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, false > base_type;\n\n    public:\n        typedef typename base_type::reference reference;\n        typedef typename base_type::difference_type difference_type;\n\n    public:\n        typename boost::iterators::detail::operator_brackets_result<Derived, Value, reference>::type\n        operator[](difference_type n) const\n        {\n            typedef boost::iterators::detail::use_operator_brackets_proxy<Value, Reference> use_proxy;\n\n            return boost::iterators::detail::make_operator_brackets_result<Derived>(\n                this->derived() + n\n              , use_proxy()\n            );\n        }\n\n        Derived& operator+=(difference_type n)\n        {\n            iterator_core_access::advance(this->derived(), n);\n            return this->derived();\n        }\n\n        Derived& operator-=(difference_type n)\n        {\n            iterator_core_access::advance(this->derived(), -n);\n            return this->derived();\n        }\n\n        Derived operator-(difference_type x) const\n        {\n            Derived result(this->derived());\n            return result -= x;\n        }\n    };\n\n  } // namespace detail\n\n  //\n  // iterator_facade - use as a public base class for defining new\n  // standard-conforming iterators.\n  //\n  template <\n      class Derived             // The derived iterator type being constructed\n    , class Value\n    , class CategoryOrTraversal\n    , class Reference   = Value&\n    , class Difference  = std::ptrdiff_t\n  >\n  class iterator_facade :\n      public detail::iterator_facade_base<\n          Derived,\n          Value,\n          CategoryOrTraversal,\n          Reference,\n          Difference,\n          detail::is_traversal_at_least< CategoryOrTraversal, bidirectional_traversal_tag >::value,\n          detail::is_traversal_at_least< CategoryOrTraversal, random_access_traversal_tag >::value\n      >\n  {\n  protected:\n      // For use by derived classes\n      typedef iterator_facade<Derived,Value,CategoryOrTraversal,Reference,Difference> iterator_facade_;\n  };\n\n  template <class I, class V, class TC, class R, class D>\n  inline typename boost::iterators::detail::postfix_increment_result<I,V,R,TC>::type\n  operator++(\n      iterator_facade<I,V,TC,R,D>& i\n    , int\n  )\n  {\n      typename boost::iterators::detail::postfix_increment_result<I,V,R,TC>::type\n          tmp(*static_cast<I*>(&i));\n\n      ++i;\n\n      return tmp;\n  }\n\n\n  //\n  // Comparison operator implementation. The library supplied operators\n  // enables the user to provide fully interoperable constant/mutable\n  // iterator types. I.e. the library provides all operators\n  // for all mutable/constant iterator combinations.\n  //\n  // Note though that this kind of interoperability for constant/mutable\n  // iterators is not required by the standard for container iterators.\n  // All the standard asks for is a conversion mutable -> constant.\n  // Most standard library implementations nowadays provide fully interoperable\n  // iterator implementations, but there are still heavily used implementations\n  // that do not provide them. (Actually it's even worse, they do not provide\n  // them for only a few iterators.)\n  //\n  // ?? Maybe a BOOST_ITERATOR_NO_FULL_INTEROPERABILITY macro should\n  //    enable the user to turn off mixed type operators\n  //\n  // The library takes care to provide only the right operator overloads.\n  // I.e.\n  //\n  // bool operator==(Iterator,      Iterator);\n  // bool operator==(ConstIterator, Iterator);\n  // bool operator==(Iterator,      ConstIterator);\n  // bool operator==(ConstIterator, ConstIterator);\n  //\n  //   ...\n  //\n  // In order to do so it uses c++ idioms that are not yet widely supported\n  // by current compiler releases. The library is designed to degrade gracefully\n  // in the face of compiler deficiencies. In general compiler\n  // deficiencies result in less strict error checking and more obscure\n  // error messages, functionality is not affected.\n  //\n  // For full operation compiler support for \"Substitution Failure Is Not An Error\"\n  // (aka. enable_if) and boost::is_convertible is required.\n  //\n  // The following problems occur if support is lacking.\n  //\n  // Pseudo code\n  //\n  // ---------------\n  // AdaptorA<Iterator1> a1;\n  // AdaptorA<Iterator2> a2;\n  //\n  // // This will result in a no such overload error in full operation\n  // // If enable_if or is_convertible is not supported\n  // // The instantiation will fail with an error hopefully indicating that\n  // // there is no operator== for Iterator1, Iterator2\n  // // The same will happen if no enable_if is used to remove\n  // // false overloads from the templated conversion constructor\n  // // of AdaptorA.\n  //\n  // a1 == a2;\n  // ----------------\n  //\n  // AdaptorA<Iterator> a;\n  // AdaptorB<Iterator> b;\n  //\n  // // This will result in a no such overload error in full operation\n  // // If enable_if is not supported the static assert used\n  // // in the operator implementation will fail.\n  // // This will accidently work if is_convertible is not supported.\n  //\n  // a == b;\n  // ----------------\n  //\n\n# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP\n#  define BOOST_ITERATOR_CONVERTIBLE(a,b) mpl::true_()\n# else\n#  define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible<a,b>()\n# endif\n\n# define BOOST_ITERATOR_FACADE_INTEROP(op, result_type, return_prefix, base_op) \\\n  BOOST_ITERATOR_FACADE_INTEROP_HEAD(inline, op, result_type)                   \\\n  {                                                                             \\\n      /* For those compilers that do not support enable_if */                   \\\n      BOOST_STATIC_ASSERT((                                                     \\\n          is_interoperable< Derived1, Derived2 >::value                         \\\n      ));                                                                       \\\n      return_prefix iterator_core_access::base_op(                              \\\n          *static_cast<Derived1 const*>(&lhs)                                   \\\n        , *static_cast<Derived2 const*>(&rhs)                                   \\\n        , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1)                         \\\n      );                                                                        \\\n  }\n\n# define BOOST_ITERATOR_FACADE_RELATION(op, return_prefix, base_op) \\\n  BOOST_ITERATOR_FACADE_INTEROP(                                    \\\n      op                                                            \\\n    , boost::iterators::detail::always_bool2                                   \\\n    , return_prefix                                                 \\\n    , base_op                                                       \\\n  )\n\n  BOOST_ITERATOR_FACADE_RELATION(==, return, equal)\n  BOOST_ITERATOR_FACADE_RELATION(!=, return !, equal)\n\n# undef BOOST_ITERATOR_FACADE_RELATION\n\n\n# define BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS(op, result_type, return_prefix, base_op) \\\n  BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(inline, op, result_type)                   \\\n  {                                                                             \\\n      /* For those compilers that do not support enable_if */                   \\\n      BOOST_STATIC_ASSERT((                                                     \\\n          is_interoperable< Derived1, Derived2 >::value &&                      \\\n          boost::iterators::detail::is_traversal_at_least< typename iterator_category< Derived1 >::type, random_access_traversal_tag >::value && \\\n          boost::iterators::detail::is_traversal_at_least< typename iterator_category< Derived2 >::type, random_access_traversal_tag >::value \\\n      ));                                                                       \\\n      return_prefix iterator_core_access::base_op(                              \\\n          *static_cast<Derived1 const*>(&lhs)                                   \\\n        , *static_cast<Derived2 const*>(&rhs)                                   \\\n        , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1)                         \\\n      );                                                                        \\\n  }\n\n# define BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(op, return_prefix, base_op) \\\n  BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS(                                    \\\n      op                                                            \\\n    , boost::iterators::detail::always_bool2                                   \\\n    , return_prefix                                                 \\\n    , base_op                                                       \\\n  )\n\n  BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(<, return 0 >, distance_from)\n  BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(>, return 0 <, distance_from)\n  BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(<=, return 0 >=, distance_from)\n  BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(>=, return 0 <=, distance_from)\n\n# undef BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION\n\n  // operator- requires an additional part in the static assertion\n  BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS(\n      -\n    , boost::iterators::detail::choose_difference_type\n    , return\n    , distance_from\n  )\n\n# undef BOOST_ITERATOR_FACADE_INTEROP\n# undef BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS\n\n# define BOOST_ITERATOR_FACADE_PLUS(args)           \\\n  BOOST_ITERATOR_FACADE_PLUS_HEAD(inline, args)     \\\n  {                                                 \\\n      Derived tmp(static_cast<Derived const&>(i));  \\\n      return tmp += n;                              \\\n  }\n\n  BOOST_ITERATOR_FACADE_PLUS((\n      iterator_facade<Derived, V, TC, R, D> const& i\n    , typename Derived::difference_type n\n  ))\n\n  BOOST_ITERATOR_FACADE_PLUS((\n      typename Derived::difference_type n\n    , iterator_facade<Derived, V, TC, R, D> const& i\n  ))\n\n# undef BOOST_ITERATOR_FACADE_PLUS\n# undef BOOST_ITERATOR_FACADE_PLUS_HEAD\n\n# undef BOOST_ITERATOR_FACADE_INTEROP_HEAD\n# undef BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD\n# undef BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL\n\n} // namespace iterators\n\nusing iterators::iterator_core_access;\nusing iterators::iterator_facade;\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_ITERATOR_FACADE_23022003THW_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/iterator_traits.hpp",
    "content": "// Copyright David Abrahams 2003.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef ITERATOR_TRAITS_DWA200347_HPP\n# define ITERATOR_TRAITS_DWA200347_HPP\n\n# include <boost/detail/iterator.hpp>\n# include <boost/detail/workaround.hpp>\n\nnamespace boost {\nnamespace iterators {\n\n// Macro for supporting old compilers, no longer needed but kept\n// for backwards compatibility (it was documented).\n#define BOOST_ITERATOR_CATEGORY iterator_category\n\n\ntemplate <class Iterator>\nstruct iterator_value\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::value_type type;\n};\n\ntemplate <class Iterator>\nstruct iterator_reference\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::reference type;\n};\n\n\ntemplate <class Iterator>\nstruct iterator_pointer\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::pointer type;\n};\n\ntemplate <class Iterator>\nstruct iterator_difference\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::difference_type type;\n};\n\ntemplate <class Iterator>\nstruct iterator_category\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::iterator_category type;\n};\n\n} // namespace iterators\n\nusing iterators::iterator_value;\nusing iterators::iterator_reference;\nusing iterators::iterator_pointer;\nusing iterators::iterator_difference;\nusing iterators::iterator_category;\n\n} // namespace boost\n\n#endif // ITERATOR_TRAITS_DWA200347_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/minimum_category.hpp",
    "content": "// Copyright David Abrahams 2003. Use, modification and distribution is\n// subject to the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_ITERATOR_MINIMUM_CATEGORY_HPP_INCLUDED_\n# define BOOST_ITERATOR_MINIMUM_CATEGORY_HPP_INCLUDED_\n\n# include <boost/static_assert.hpp>\n# include <boost/type_traits/is_convertible.hpp>\n# include <boost/type_traits/is_same.hpp>\n\n# include <boost/mpl/placeholders.hpp>\n# include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost {\nnamespace iterators {\nnamespace detail {\n\ntemplate <bool GreaterEqual, bool LessEqual>\nstruct minimum_category_impl;\n\ntemplate <class T1, class T2>\nstruct error_not_related_by_convertibility;\n\ntemplate <>\nstruct minimum_category_impl<true,false>\n{\n    template <class T1, class T2> struct apply\n    {\n        typedef T2 type;\n    };\n};\n\ntemplate <>\nstruct minimum_category_impl<false,true>\n{\n    template <class T1, class T2> struct apply\n    {\n        typedef T1 type;\n    };\n};\n\ntemplate <>\nstruct minimum_category_impl<true,true>\n{\n    template <class T1, class T2> struct apply\n    {\n        BOOST_STATIC_ASSERT((is_same<T1,T2>::value));\n        typedef T1 type;\n    };\n};\n\ntemplate <>\nstruct minimum_category_impl<false,false>\n{\n    template <class T1, class T2> struct apply\n      : error_not_related_by_convertibility<T1,T2>\n    {\n    };\n};\n\n} // namespace detail\n\n//\n// Returns the minimum category type or fails to compile\n// if T1 and T2 are unrelated.\n//\ntemplate <class T1 = mpl::_1, class T2 = mpl::_2>\nstruct minimum_category\n{\n    typedef boost::iterators::detail::minimum_category_impl<\n        ::boost::is_convertible<T1,T2>::value\n      , ::boost::is_convertible<T2,T1>::value\n    > outer;\n\n    typedef typename outer::template apply<T1,T2> inner;\n    typedef typename inner::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,minimum_category,(T1,T2))\n};\n\ntemplate <>\nstruct minimum_category<mpl::_1,mpl::_2>\n{\n    template <class T1, class T2>\n    struct apply : minimum_category<T1,T2>\n    {};\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,minimum_category,(mpl::_1,mpl::_2))\n};\n\n} // namespace iterators\n\n} // namespace boost\n\n#endif // BOOST_ITERATOR_MINIMUM_CATEGORY_HPP_INCLUDED_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/new_iterator_tests.hpp",
    "content": "#ifndef BOOST_NEW_ITERATOR_TESTS_HPP\n# define BOOST_NEW_ITERATOR_TESTS_HPP\n\n//\n// Copyright (c) David Abrahams 2001.\n// Copyright (c) Jeremy Siek 2001-2003.\n// Copyright (c) Thomas Witt 2002.\n//\n// Use, modification and distribution is subject to the\n// Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// This is meant to be the beginnings of a comprehensive, generic\n// test suite for STL concepts such as iterators and containers.\n//\n// Revision History:\n// 28 Oct 2002  Started update for new iterator categories\n//              (Jeremy Siek)\n// 28 Apr 2002  Fixed input iterator requirements.\n//              For a == b a++ == b++ is no longer required.\n//              See 24.1.1/3 for details.\n//              (Thomas Witt)\n// 08 Feb 2001  Fixed bidirectional iterator test so that\n//              --i is no longer a precondition.\n//              (Jeremy Siek)\n// 04 Feb 2001  Added lvalue test, corrected preconditions\n//              (David Abrahams)\n\n# include <iterator>\n# include <boost/type_traits.hpp>\n# include <boost/static_assert.hpp>\n# include <boost/concept_archetype.hpp> // for detail::dummy_constructor\n# include <boost/detail/iterator.hpp>\n# include <boost/pending/iterator_tests.hpp>\n# include <boost/iterator/is_readable_iterator.hpp>\n# include <boost/iterator/is_lvalue_iterator.hpp>\n\n# include <boost/iterator/detail/config_def.hpp>\n# include <boost/detail/is_incrementable.hpp>\n# include <boost/detail/lightweight_test.hpp>\n\nnamespace boost {\n\n\n// Do separate tests for *i++ so we can treat, e.g., smart pointers,\n// as readable and/or writable iterators.\ntemplate <class Iterator, class T>\nvoid readable_iterator_traversal_test(Iterator i1, T v, mpl::true_)\n{\n    T v2(*i1++);\n    BOOST_TEST(v == v2);\n}\n\ntemplate <class Iterator, class T>\nvoid readable_iterator_traversal_test(const Iterator i1, T v, mpl::false_)\n{}\n\ntemplate <class Iterator, class T>\nvoid writable_iterator_traversal_test(Iterator i1, T v, mpl::true_)\n{\n    ++i1;  // we just wrote into that position\n    *i1++ = v;\n    Iterator x(i1++);\n    (void)x;\n}\n\ntemplate <class Iterator, class T>\nvoid writable_iterator_traversal_test(const Iterator i1, T v, mpl::false_)\n{}\n\n\n// Preconditions: *i == v\ntemplate <class Iterator, class T>\nvoid readable_iterator_test(const Iterator i1, T v)\n{\n  Iterator i2(i1); // Copy Constructible\n  typedef typename detail::iterator_traits<Iterator>::reference ref_t;\n  ref_t r1 = *i1;\n  ref_t r2 = *i2;\n  T v1 = r1;\n  T v2 = r2;\n  BOOST_TEST(v1 == v);\n  BOOST_TEST(v2 == v);\n\n# if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407)\n  readable_iterator_traversal_test(i1, v, detail::is_postfix_incrementable<Iterator>());\n      \n  // I think we don't really need this as it checks the same things as\n  // the above code.\n  BOOST_STATIC_ASSERT(is_readable_iterator<Iterator>::value);\n# endif \n}\n\ntemplate <class Iterator, class T>\nvoid writable_iterator_test(Iterator i, T v, T v2)\n{\n  Iterator i2(i); // Copy Constructible\n  *i2 = v;\n\n# if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407)\n  writable_iterator_traversal_test(\n      i, v2, mpl::and_<\n          detail::is_incrementable<Iterator>\n        , detail::is_postfix_incrementable<Iterator>\n      >());\n# endif \n}\n\ntemplate <class Iterator>\nvoid swappable_iterator_test(Iterator i, Iterator j)\n{\n  Iterator i2(i), j2(j);\n  typename detail::iterator_traits<Iterator>::value_type bi = *i, bj = *j;\n  iter_swap(i2, j2);\n  typename detail::iterator_traits<Iterator>::value_type ai = *i, aj = *j;\n  BOOST_TEST(bi == aj && bj == ai);\n}\n\ntemplate <class Iterator, class T>\nvoid constant_lvalue_iterator_test(Iterator i, T v1)\n{\n  Iterator i2(i);\n  typedef typename detail::iterator_traits<Iterator>::value_type value_type;\n  typedef typename detail::iterator_traits<Iterator>::reference reference;\n  BOOST_STATIC_ASSERT((is_same<const value_type&, reference>::value));\n  const T& v2 = *i2;\n  BOOST_TEST(v1 == v2);\n# ifndef BOOST_NO_LVALUE_RETURN_DETECTION\n  BOOST_STATIC_ASSERT(is_lvalue_iterator<Iterator>::value);\n  BOOST_STATIC_ASSERT(!is_non_const_lvalue_iterator<Iterator>::value);\n# endif \n}\n\ntemplate <class Iterator, class T>\nvoid non_const_lvalue_iterator_test(Iterator i, T v1, T v2)\n{\n  Iterator i2(i);\n  typedef typename detail::iterator_traits<Iterator>::value_type value_type;\n  typedef typename detail::iterator_traits<Iterator>::reference reference;\n  BOOST_STATIC_ASSERT((is_same<value_type&, reference>::value));\n  T& v3 = *i2;\n  BOOST_TEST(v1 == v3);\n  \n  // A non-const lvalue iterator is not neccessarily writable, but we\n  // are assuming the value_type is assignable here\n  *i = v2;\n  \n  T& v4 = *i2;\n  BOOST_TEST(v2 == v4);\n# ifndef BOOST_NO_LVALUE_RETURN_DETECTION\n  BOOST_STATIC_ASSERT(is_lvalue_iterator<Iterator>::value);\n  BOOST_STATIC_ASSERT(is_non_const_lvalue_iterator<Iterator>::value);\n# endif \n}\n\ntemplate <class Iterator, class T>\nvoid forward_readable_iterator_test(Iterator i, Iterator j, T val1, T val2)\n{\n  Iterator i2;\n  Iterator i3(i);\n  i2 = i;\n  BOOST_TEST(i2 == i3);\n  BOOST_TEST(i != j);\n  BOOST_TEST(i2 != j);\n  readable_iterator_test(i, val1);\n  readable_iterator_test(i2, val1);\n  readable_iterator_test(i3, val1);\n\n  BOOST_TEST(i == i2++);\n  BOOST_TEST(i != ++i3);\n\n  readable_iterator_test(i2, val2);\n  readable_iterator_test(i3, val2);\n\n  readable_iterator_test(i, val1);\n}\n\ntemplate <class Iterator, class T>\nvoid forward_swappable_iterator_test(Iterator i, Iterator j, T val1, T val2)\n{\n  forward_readable_iterator_test(i, j, val1, val2);\n  Iterator i2 = i;\n  ++i2;\n  swappable_iterator_test(i, i2);\n}\n\n// bidirectional\n// Preconditions: *i == v1, *++i == v2\ntemplate <class Iterator, class T>\nvoid bidirectional_readable_iterator_test(Iterator i, T v1, T v2)\n{\n  Iterator j(i);\n  ++j;\n  forward_readable_iterator_test(i, j, v1, v2);\n  ++i;\n\n  Iterator i1 = i, i2 = i;\n\n  BOOST_TEST(i == i1--);\n  BOOST_TEST(i != --i2);\n\n  readable_iterator_test(i, v2);\n  readable_iterator_test(i1, v1);\n  readable_iterator_test(i2, v1);\n\n  --i;\n  BOOST_TEST(i == i1);\n  BOOST_TEST(i == i2);\n  ++i1;\n  ++i2;\n\n  readable_iterator_test(i, v1);\n  readable_iterator_test(i1, v2);\n  readable_iterator_test(i2, v2);\n}\n\n// random access\n// Preconditions: [i,i+N) is a valid range\ntemplate <class Iterator, class TrueVals>\nvoid random_access_readable_iterator_test(Iterator i, int N, TrueVals vals)\n{\n  bidirectional_readable_iterator_test(i, vals[0], vals[1]);\n  const Iterator j = i;\n  int c;\n\n  for (c = 0; c < N-1; ++c)\n  {\n    BOOST_TEST(i == j + c);\n    BOOST_TEST(*i == vals[c]);\n    typename detail::iterator_traits<Iterator>::value_type x = j[c];\n    BOOST_TEST(*i == x);\n    BOOST_TEST(*i == *(j + c));\n    BOOST_TEST(*i == *(c + j));\n    ++i;\n    BOOST_TEST(i > j);\n    BOOST_TEST(i >= j);\n    BOOST_TEST(j <= i);\n    BOOST_TEST(j < i);\n  }\n\n  Iterator k = j + N - 1;\n  for (c = 0; c < N-1; ++c)\n  {\n    BOOST_TEST(i == k - c);\n    BOOST_TEST(*i == vals[N - 1 - c]);\n    typename detail::iterator_traits<Iterator>::value_type x = j[N - 1 - c];\n    BOOST_TEST(*i == x);\n    Iterator q = k - c; \n    BOOST_TEST(*i == *q);\n    BOOST_TEST(i > j);\n    BOOST_TEST(i >= j);\n    BOOST_TEST(j <= i);\n    BOOST_TEST(j < i);\n    --i;\n  }\n}\n\n} // namespace boost\n\n# include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_NEW_ITERATOR_TESTS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/permutation_iterator.hpp",
    "content": "// (C) Copyright Toon Knapen    2001.\n// (C) Copyright David Abrahams 2003.\n// (C) Copyright Roland Richter 2003.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_PERMUTATION_ITERATOR_HPP\n#define BOOST_PERMUTATION_ITERATOR_HPP\n\n#include <iterator>\n\n#include <boost/iterator/iterator_adaptor.hpp>\n\n\nnamespace boost {\nnamespace iterators {\n\ntemplate< class ElementIterator\n        , class IndexIterator>\nclass permutation_iterator\n  : public iterator_adaptor<\n             permutation_iterator<ElementIterator, IndexIterator>\n           , IndexIterator, typename boost::detail::iterator_traits<ElementIterator>::value_type\n           , use_default, typename boost::detail::iterator_traits<ElementIterator>::reference>\n{\n  typedef iterator_adaptor<\n            permutation_iterator<ElementIterator, IndexIterator>\n          , IndexIterator, typename boost::detail::iterator_traits<ElementIterator>::value_type\n          , use_default, typename boost::detail::iterator_traits<ElementIterator>::reference> super_t;\n\n  friend class iterator_core_access;\n\npublic:\n  permutation_iterator() : m_elt_iter() {}\n\n  explicit permutation_iterator(ElementIterator x, IndexIterator y)\n      : super_t(y), m_elt_iter(x) {}\n\n  template<class OtherElementIterator, class OtherIndexIterator>\n  permutation_iterator(\n      permutation_iterator<OtherElementIterator, OtherIndexIterator> const& r\n      , typename enable_if_convertible<OtherElementIterator, ElementIterator>::type* = 0\n      , typename enable_if_convertible<OtherIndexIterator, IndexIterator>::type* = 0\n      )\n    : super_t(r.base()), m_elt_iter(r.m_elt_iter)\n  {}\n\nprivate:\n    typename super_t::reference dereference() const\n        { return *(m_elt_iter + *this->base()); }\n\n#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n    template <class,class> friend class permutation_iterator;\n#else\n public:\n#endif\n    ElementIterator m_elt_iter;\n};\n\n\ntemplate <class ElementIterator, class IndexIterator>\ninline permutation_iterator<ElementIterator, IndexIterator>\nmake_permutation_iterator( ElementIterator e, IndexIterator i )\n{\n    return permutation_iterator<ElementIterator, IndexIterator>( e, i );\n}\n\n} // namespace iterators\n\nusing iterators::permutation_iterator;\nusing iterators::make_permutation_iterator;\n\n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/reverse_iterator.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP\n#define BOOST_REVERSE_ITERATOR_23022003THW_HPP\n\n#include <boost/next_prior.hpp>\n#include <boost/iterator.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n\nnamespace boost {\nnamespace iterators {\n\n  //\n  //\n  //\n  template <class Iterator>\n  class reverse_iterator\n      : public iterator_adaptor< reverse_iterator<Iterator>, Iterator >\n  {\n      typedef iterator_adaptor< reverse_iterator<Iterator>, Iterator > super_t;\n\n      friend class iterator_core_access;\n\n   public:\n      reverse_iterator() {}\n\n      explicit reverse_iterator(Iterator x)\n          : super_t(x) {}\n\n      template<class OtherIterator>\n      reverse_iterator(\n          reverse_iterator<OtherIterator> const& r\n          , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0\n          )\n          : super_t(r.base())\n      {}\n\n   private:\n      typename super_t::reference dereference() const { return *boost::prior(this->base()); }\n\n      void increment() { --this->base_reference(); }\n      void decrement() { ++this->base_reference(); }\n\n      void advance(typename super_t::difference_type n)\n      {\n          this->base_reference() += -n;\n      }\n\n      template <class OtherIterator>\n      typename super_t::difference_type\n      distance_to(reverse_iterator<OtherIterator> const& y) const\n      {\n          return this->base_reference() - y.base();\n      }\n  };\n\n  template <class BidirectionalIterator>\n  inline reverse_iterator<BidirectionalIterator> make_reverse_iterator(BidirectionalIterator x)\n  {\n      return reverse_iterator<BidirectionalIterator>(x);\n  }\n\n} // namespace iterators\n\nusing iterators::reverse_iterator;\nusing iterators::make_reverse_iterator;\n\n} // namespace boost\n\n#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/transform_iterator.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_TRANSFORM_ITERATOR_23022003THW_HPP\n#define BOOST_TRANSFORM_ITERATOR_23022003THW_HPP\n\n#include <boost/iterator.hpp>\n#include <boost/iterator/detail/enable_if.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/type_traits/function_traits.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_class.hpp>\n#include <boost/type_traits/is_function.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/utility/result_of.hpp>\n\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))\n# include <boost/type_traits/is_base_and_derived.hpp>\n\n#endif\n#include <boost/iterator/detail/config_def.hpp>\n\n\nnamespace boost {\nnamespace iterators {\n\n  template <class UnaryFunction, class Iterator, class Reference = use_default, class Value = use_default>\n  class transform_iterator;\n\n  namespace detail\n  {\n    // Compute the iterator_adaptor instantiation to be used for transform_iterator\n    template <class UnaryFunc, class Iterator, class Reference, class Value>\n    struct transform_iterator_base\n    {\n     private:\n        // By default, dereferencing the iterator yields the same as\n        // the function.\n        typedef typename ia_dflt_help<\n            Reference\n          , result_of<const UnaryFunc(typename std::iterator_traits<Iterator>::reference)>\n        >::type reference;\n\n        // To get the default for Value: remove any reference on the\n        // result type, but retain any constness to signal\n        // non-writability.  Note that if we adopt Thomas' suggestion\n        // to key non-writability *only* on the Reference argument,\n        // we'd need to strip constness here as well.\n        typedef typename ia_dflt_help<\n            Value\n          , remove_reference<reference>\n        >::type cv_value_type;\n\n     public:\n        typedef iterator_adaptor<\n            transform_iterator<UnaryFunc, Iterator, Reference, Value>\n          , Iterator\n          , cv_value_type\n          , use_default    // Leave the traversal category alone\n          , reference\n        > type;\n    };\n  }\n\n  template <class UnaryFunc, class Iterator, class Reference, class Value>\n  class transform_iterator\n    : public boost::iterators::detail::transform_iterator_base<UnaryFunc, Iterator, Reference, Value>::type\n  {\n    typedef typename\n    boost::iterators::detail::transform_iterator_base<UnaryFunc, Iterator, Reference, Value>::type\n    super_t;\n\n    friend class iterator_core_access;\n\n  public:\n    transform_iterator() { }\n\n    transform_iterator(Iterator const& x, UnaryFunc f)\n      : super_t(x), m_f(f) { }\n\n    explicit transform_iterator(Iterator const& x)\n      : super_t(x)\n    {\n        // Pro8 is a little too aggressive about instantiating the\n        // body of this function.\n#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))\n        // don't provide this constructor if UnaryFunc is a\n        // function pointer type, since it will be 0.  Too dangerous.\n        BOOST_STATIC_ASSERT(is_class<UnaryFunc>::value);\n#endif\n    }\n\n    template <\n        class OtherUnaryFunction\n      , class OtherIterator\n      , class OtherReference\n      , class OtherValue>\n    transform_iterator(\n         transform_iterator<OtherUnaryFunction, OtherIterator, OtherReference, OtherValue> const& t\n       , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0\n#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)\n       , typename enable_if_convertible<OtherUnaryFunction, UnaryFunc>::type* = 0\n#endif\n    )\n      : super_t(t.base()), m_f(t.functor())\n   {}\n\n    UnaryFunc functor() const\n      { return m_f; }\n\n  private:\n    typename super_t::reference dereference() const\n    { return m_f(*this->base()); }\n\n    // Probably should be the initial base class so it can be\n    // optimized away via EBO if it is an empty class.\n    UnaryFunc m_f;\n  };\n\n  template <class UnaryFunc, class Iterator>\n  inline transform_iterator<UnaryFunc, Iterator>\n  make_transform_iterator(Iterator it, UnaryFunc fun)\n  {\n      return transform_iterator<UnaryFunc, Iterator>(it, fun);\n  }\n\n  // Version which allows explicit specification of the UnaryFunc\n  // type.\n  //\n  // This generator is not provided if UnaryFunc is a function\n  // pointer type, because it's too dangerous: the default-constructed\n  // function pointer in the iterator be 0, leading to a runtime\n  // crash.\n  template <class UnaryFunc, class Iterator>\n  inline typename iterators::enable_if<\n      is_class<UnaryFunc>   // We should probably find a cheaper test than is_class<>\n    , transform_iterator<UnaryFunc, Iterator>\n  >::type\n  make_transform_iterator(Iterator it)\n  {\n      return transform_iterator<UnaryFunc, Iterator>(it, UnaryFunc());\n  }\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n  template <class Return, class Argument, class Iterator>\n  inline transform_iterator< Return (*)(Argument), Iterator, Return>\n  make_transform_iterator(Iterator it, Return (*fun)(Argument))\n  {\n    return transform_iterator<Return (*)(Argument), Iterator, Return>(it, fun);\n  }\n#endif\n\n} // namespace iterators\n\nusing iterators::transform_iterator;\nusing iterators::make_transform_iterator;\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_TRANSFORM_ITERATOR_23022003THW_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator/zip_iterator.hpp",
    "content": "// Copyright David Abrahams and Thomas Becker 2000-2006.\n// Copyright Kohei Takahashi 2012-2014.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_ZIP_ITERATOR_TMB_07_13_2003_HPP_\n# define BOOST_ZIP_ITERATOR_TMB_07_13_2003_HPP_\n\n#include <stddef.h>\n#include <boost/iterator.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/iterator/iterator_adaptor.hpp> // for enable_if_convertible\n#include <boost/iterator/iterator_categories.hpp>\n\n#include <boost/iterator/minimum_category.hpp>\n\n#include <utility> // for std::pair\n#include <boost/fusion/adapted/boost_tuple.hpp> // for backward compatibility\n\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n\n#include <boost/mpl/at.hpp>\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/transform.hpp>\n#include <boost/mpl/placeholders.hpp>\n\n#include <boost/fusion/algorithm/iteration/for_each.hpp>\n#include <boost/fusion/algorithm/transformation/transform.hpp>\n#include <boost/fusion/sequence/convert.hpp>\n#include <boost/fusion/sequence/intrinsic/at_c.hpp>\n#include <boost/fusion/sequence/comparison/equal_to.hpp>\n#include <boost/fusion/support/tag_of_fwd.hpp>\n\nnamespace boost {\nnamespace iterators {\n\n  // Zip iterator forward declaration for zip_iterator_base\n  template<typename IteratorTuple>\n  class zip_iterator;\n\n  namespace detail\n  {\n\n    // Functors to be used with tuple algorithms\n    //\n    template<typename DiffType>\n    class advance_iterator\n    {\n    public:\n      advance_iterator(DiffType step) : m_step(step) {}\n\n      template<typename Iterator>\n      void operator()(Iterator& it) const\n      { it += m_step; }\n\n    private:\n      DiffType m_step;\n    };\n    //\n    struct increment_iterator\n    {\n      template<typename Iterator>\n      void operator()(Iterator& it) const\n      { ++it; }\n    };\n    //\n    struct decrement_iterator\n    {\n      template<typename Iterator>\n      void operator()(Iterator& it) const\n      { --it; }\n    };\n    //\n    struct dereference_iterator\n    {\n      template<typename>\n      struct result;\n\n      template<typename This, typename Iterator>\n      struct result<This(Iterator)>\n      {\n        typedef typename\n          remove_reference<typename remove_cv<Iterator>::type>::type\n        iterator;\n\n        typedef typename iterator_reference<iterator>::type type;\n      };\n\n      template<typename Iterator>\n        typename result<dereference_iterator(Iterator)>::type\n        operator()(Iterator const& it) const\n      { return *it; }\n    };\n\n    // Metafunction to obtain the type of the tuple whose element types\n    // are the reference types of an iterator tuple.\n    //\n    template<typename IteratorTuple>\n    struct tuple_of_references\n      : mpl::transform<\n            IteratorTuple,\n            iterator_reference<mpl::_1>\n          >\n    {\n    };\n\n    // Specialization for std::pair\n    template<typename Iterator1, typename Iterator2>\n    struct tuple_of_references<std::pair<Iterator1, Iterator2> >\n    {\n        typedef std::pair<\n            typename iterator_reference<Iterator1>::type\n          , typename iterator_reference<Iterator2>::type\n        > type;\n    };\n\n    // Metafunction to obtain the minimal traversal tag in a tuple\n    // of iterators.\n    //\n    template<typename IteratorTuple>\n    struct minimum_traversal_category_in_iterator_tuple\n    {\n      typedef typename mpl::transform<\n          IteratorTuple\n        , pure_traversal_tag<iterator_traversal<> >\n      >::type tuple_of_traversal_tags;\n\n      typedef typename mpl::fold<\n          tuple_of_traversal_tags\n        , random_access_traversal_tag\n        , minimum_category<>\n      >::type type;\n    };\n\n    template<typename Iterator1, typename Iterator2>\n    struct minimum_traversal_category_in_iterator_tuple<std::pair<Iterator1, Iterator2> >\n    {\n        typedef typename pure_traversal_tag<\n            typename iterator_traversal<Iterator1>::type\n        >::type iterator1_traversal;\n        typedef typename pure_traversal_tag<\n            typename iterator_traversal<Iterator2>::type\n        >::type iterator2_traversal;\n\n        typedef typename minimum_category<\n            iterator1_traversal\n          , typename minimum_category<\n                iterator2_traversal\n              , random_access_traversal_tag\n            >::type\n        >::type type;\n    };\n\n    ///////////////////////////////////////////////////////////////////\n    //\n    // Class zip_iterator_base\n    //\n    // Builds and exposes the iterator facade type from which the zip\n    // iterator will be derived.\n    //\n    template<typename IteratorTuple>\n    struct zip_iterator_base\n    {\n     private:\n        // Reference type is the type of the tuple obtained from the\n        // iterators' reference types.\n        typedef typename\n        detail::tuple_of_references<IteratorTuple>::type reference;\n\n        // Value type is the same as reference type.\n        typedef reference value_type;\n\n        // Difference type is the first iterator's difference type\n        typedef typename iterator_difference<\n            typename mpl::at_c<IteratorTuple, 0>::type\n        >::type difference_type;\n\n        // Traversal catetgory is the minimum traversal category in the\n        // iterator tuple.\n        typedef typename\n        detail::minimum_traversal_category_in_iterator_tuple<\n            IteratorTuple\n        >::type traversal_category;\n     public:\n\n        // The iterator facade type from which the zip iterator will\n        // be derived.\n        typedef iterator_facade<\n            zip_iterator<IteratorTuple>,\n            value_type,\n            traversal_category,\n            reference,\n            difference_type\n        > type;\n    };\n\n    template <>\n    struct zip_iterator_base<int>\n    {\n        typedef int type;\n    };\n\n    template <typename reference>\n    struct converter\n    {\n        template <typename Seq>\n        static reference call(Seq seq)\n        {\n            typedef typename fusion::traits::tag_of<reference>::type tag;\n            return fusion::convert<tag>(seq);\n        }\n    };\n\n    template <typename Reference1, typename Reference2>\n    struct converter<std::pair<Reference1, Reference2> >\n    {\n        typedef std::pair<Reference1, Reference2> reference;\n        template <typename Seq>\n        static reference call(Seq seq)\n        {\n            return reference(\n                fusion::at_c<0>(seq)\n              , fusion::at_c<1>(seq));\n        }\n    };\n  }\n\n  /////////////////////////////////////////////////////////////////////\n  //\n  // zip_iterator class definition\n  //\n  template<typename IteratorTuple>\n  class zip_iterator :\n    public detail::zip_iterator_base<IteratorTuple>::type\n  {\n\n   // Typedef super_t as our base class.\n   typedef typename\n     detail::zip_iterator_base<IteratorTuple>::type super_t;\n\n   // iterator_core_access is the iterator's best friend.\n   friend class iterator_core_access;\n\n  public:\n\n    // Construction\n    // ============\n\n    // Default constructor\n    zip_iterator() { }\n\n    // Constructor from iterator tuple\n    zip_iterator(IteratorTuple iterator_tuple)\n      : m_iterator_tuple(iterator_tuple)\n    { }\n\n    // Copy constructor\n    template<typename OtherIteratorTuple>\n    zip_iterator(\n       const zip_iterator<OtherIteratorTuple>& other,\n       typename enable_if_convertible<\n         OtherIteratorTuple,\n         IteratorTuple\n         >::type* = 0\n    ) : m_iterator_tuple(other.get_iterator_tuple())\n    {}\n\n    // Get method for the iterator tuple.\n    const IteratorTuple& get_iterator_tuple() const\n    { return m_iterator_tuple; }\n\n  private:\n\n    // Implementation of Iterator Operations\n    // =====================================\n\n    // Dereferencing returns a tuple built from the dereferenced\n    // iterators in the iterator tuple.\n    typename super_t::reference dereference() const\n    {\n        typedef typename super_t::reference reference;\n        typedef detail::converter<reference> gen;\n        return gen::call(fusion::transform(\n          get_iterator_tuple(),\n          detail::dereference_iterator()));\n    }\n\n    // Two zip iterators are equal if all iterators in the iterator\n    // tuple are equal. NOTE: It should be possible to implement this\n    // as\n    //\n    // return get_iterator_tuple() == other.get_iterator_tuple();\n    //\n    // but equality of tuples currently (7/2003) does not compile\n    // under several compilers. No point in bringing in a bunch\n    // of #ifdefs here.\n    //\n    template<typename OtherIteratorTuple>\n    bool equal(const zip_iterator<OtherIteratorTuple>& other) const\n    {\n        return fusion::equal_to(\n          get_iterator_tuple(),\n          other.get_iterator_tuple());\n    }\n\n    // Advancing a zip iterator means to advance all iterators in the\n    // iterator tuple.\n    void advance(typename super_t::difference_type n)\n    {\n        fusion::for_each(\n          m_iterator_tuple,\n          detail::advance_iterator<BOOST_DEDUCED_TYPENAME super_t::difference_type>(n));\n    }\n    // Incrementing a zip iterator means to increment all iterators in\n    // the iterator tuple.\n    void increment()\n    {\n        fusion::for_each(\n          m_iterator_tuple,\n          detail::increment_iterator());\n    }\n\n    // Decrementing a zip iterator means to decrement all iterators in\n    // the iterator tuple.\n    void decrement()\n    {\n        fusion::for_each(\n          m_iterator_tuple,\n          detail::decrement_iterator());\n    }\n\n    // Distance is calculated using the first iterator in the tuple.\n    template<typename OtherIteratorTuple>\n      typename super_t::difference_type distance_to(\n        const zip_iterator<OtherIteratorTuple>& other\n        ) const\n    {\n        return fusion::at_c<0>(other.get_iterator_tuple()) -\n            fusion::at_c<0>(this->get_iterator_tuple());\n    }\n\n    // Data Members\n    // ============\n\n    // The iterator tuple.\n    IteratorTuple m_iterator_tuple;\n\n  };\n\n  // Make function for zip iterator\n  //\n  template<typename IteratorTuple>\n  inline zip_iterator<IteratorTuple>\n  make_zip_iterator(IteratorTuple t)\n  { return zip_iterator<IteratorTuple>(t); }\n\n} // namespace iterators\n\nusing iterators::zip_iterator;\nusing iterators::make_zip_iterator;\n\n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/iterator.hpp",
    "content": "//  (C) Copyright Beman Dawes 2000. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_ITERATOR_HPP\n#define BOOST_ITERATOR_HPP\n\n// This header is obsolete and will be deprecated.\n\n#include <iterator>\n#include <cstddef>           // std::ptrdiff_t\n\nnamespace boost\n{\n\nusing std::iterator;\n\n} // namespace boost\n\n#endif // BOOST_ITERATOR_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/limits.hpp",
    "content": "\n//  (C) Copyright John maddock 1999. \n//  (C) David Abrahams 2002.  Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// use this header as a workaround for missing <limits>\n\n//  See http://www.boost.org/libs/compatibility/index.html for documentation.\n\n#ifndef BOOST_LIMITS\n#define BOOST_LIMITS\n\n#include <boost/config.hpp>\n\n#ifdef BOOST_NO_LIMITS\n#  error \"There is no std::numeric_limits suppport available.\"\n#else\n# include <limits>\n#endif\n\n#if (defined(BOOST_HAS_LONG_LONG) && defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)) \\\n      || (defined(BOOST_HAS_MS_INT64) && defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS))\n// Add missing specializations for numeric_limits:\n#ifdef BOOST_HAS_MS_INT64\n#  define BOOST_LLT __int64\n#  define BOOST_ULLT unsigned __int64\n#else\n#  define BOOST_LLT  ::boost::long_long_type\n#  define BOOST_ULLT  ::boost::ulong_long_type\n#endif\n\n#include <climits>  // for CHAR_BIT\n\nnamespace std\n{\n  template<>\n  class numeric_limits<BOOST_LLT> \n  {\n   public:\n\n      BOOST_STATIC_CONSTANT(bool, is_specialized = true);\n#ifdef BOOST_HAS_MS_INT64\n      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x8000000000000000i64; }\n      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x7FFFFFFFFFFFFFFFi64; }\n#elif defined(LLONG_MAX)\n      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MIN; }\n      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MAX; }\n#elif defined(LONGLONG_MAX)\n      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MIN; }\n      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MAX; }\n#else\n      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 1LL << (sizeof(BOOST_LLT) * CHAR_BIT - 1); }\n      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~(min)(); }\n#endif\n      BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT -1);\n      BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT) - 1) * 301L / 1000);\n      BOOST_STATIC_CONSTANT(bool, is_signed = true);\n      BOOST_STATIC_CONSTANT(bool, is_integer = true);\n      BOOST_STATIC_CONSTANT(bool, is_exact = true);\n      BOOST_STATIC_CONSTANT(int, radix = 2);\n      static BOOST_LLT epsilon() throw() { return 0; };\n      static BOOST_LLT round_error() throw() { return 0; };\n\n      BOOST_STATIC_CONSTANT(int, min_exponent = 0);\n      BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);\n      BOOST_STATIC_CONSTANT(int, max_exponent = 0);\n      BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);\n\n      BOOST_STATIC_CONSTANT(bool, has_infinity = false);\n      BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);\n      BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);\n      BOOST_STATIC_CONSTANT(bool, has_denorm = false);\n      BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);\n      static BOOST_LLT infinity() throw() { return 0; };\n      static BOOST_LLT quiet_NaN() throw() { return 0; };\n      static BOOST_LLT signaling_NaN() throw() { return 0; };\n      static BOOST_LLT denorm_min() throw() { return 0; };\n\n      BOOST_STATIC_CONSTANT(bool, is_iec559 = false);\n      BOOST_STATIC_CONSTANT(bool, is_bounded = true);\n      BOOST_STATIC_CONSTANT(bool, is_modulo = true);\n\n      BOOST_STATIC_CONSTANT(bool, traps = false);\n      BOOST_STATIC_CONSTANT(bool, tinyness_before = false);\n      BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);\n      \n  };\n\n  template<>\n  class numeric_limits<BOOST_ULLT> \n  {\n   public:\n\n      BOOST_STATIC_CONSTANT(bool, is_specialized = true);\n#ifdef BOOST_HAS_MS_INT64\n      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0ui64; }\n      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0xFFFFFFFFFFFFFFFFui64; }\n#elif defined(ULLONG_MAX) && defined(ULLONG_MIN)\n      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MIN; }\n      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MAX; }\n#elif defined(ULONGLONG_MAX) && defined(ULONGLONG_MIN)\n      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MIN; }\n      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MAX; }\n#else\n      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0uLL; }\n      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~0uLL; }\n#endif\n      BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT);\n      BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT)) * 301L / 1000);\n      BOOST_STATIC_CONSTANT(bool, is_signed = false);\n      BOOST_STATIC_CONSTANT(bool, is_integer = true);\n      BOOST_STATIC_CONSTANT(bool, is_exact = true);\n      BOOST_STATIC_CONSTANT(int, radix = 2);\n      static BOOST_ULLT epsilon() throw() { return 0; };\n      static BOOST_ULLT round_error() throw() { return 0; };\n\n      BOOST_STATIC_CONSTANT(int, min_exponent = 0);\n      BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);\n      BOOST_STATIC_CONSTANT(int, max_exponent = 0);\n      BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);\n\n      BOOST_STATIC_CONSTANT(bool, has_infinity = false);\n      BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);\n      BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);\n      BOOST_STATIC_CONSTANT(bool, has_denorm = false);\n      BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);\n      static BOOST_ULLT infinity() throw() { return 0; };\n      static BOOST_ULLT quiet_NaN() throw() { return 0; };\n      static BOOST_ULLT signaling_NaN() throw() { return 0; };\n      static BOOST_ULLT denorm_min() throw() { return 0; };\n\n      BOOST_STATIC_CONSTANT(bool, is_iec559 = false);\n      BOOST_STATIC_CONSTANT(bool, is_bounded = true);\n      BOOST_STATIC_CONSTANT(bool, is_modulo = true);\n\n      BOOST_STATIC_CONSTANT(bool, traps = false);\n      BOOST_STATIC_CONSTANT(bool, tinyness_before = false);\n      BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);\n      \n  };\n}\n#endif \n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mem_fn.hpp",
    "content": "#ifndef BOOST_MEM_FN_HPP_INCLUDED\n#define BOOST_MEM_FN_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  mem_fn.hpp - a generalization of std::mem_fun[_ref]\n//\n//  Copyright (c) 2009 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.\n//\n\n#include <boost/bind/mem_fn.hpp>\n\n#endif // #ifndef BOOST_MEM_FN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/memory_order.hpp",
    "content": "#ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED\n#define BOOST_MEMORY_ORDER_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  boost/memory_order.hpp\n//\n//  Defines enum boost::memory_order per the C++0x working draft\n//\n//  Copyright (c) 2008, 2009 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n\nnamespace boost\n{\n\n//\n// Enum values are chosen so that code that needs to insert\n// a trailing fence for acquire semantics can use a single\n// test such as:\n//\n// if( mo & memory_order_acquire ) { ...fence... }\n//\n// For leading fences one can use:\n//\n// if( mo & memory_order_release ) { ...fence... }\n//\n// Architectures such as Alpha that need a fence on consume\n// can use:\n//\n// if( mo & ( memory_order_acquire | memory_order_consume ) ) { ...fence... }\n//\n// The values are also in the order of increasing \"strength\"\n// of the fences so that success/failure orders can be checked\n// efficiently in compare_exchange methods.\n//\n\nenum memory_order\n{\n    memory_order_relaxed = 0,\n    memory_order_consume = 1,\n    memory_order_acquire = 2,\n    memory_order_release = 4,\n    memory_order_acq_rel = 6, // acquire | release\n    memory_order_seq_cst = 14 // acq_rel | 8\n};\n\n} // namespace boost\n\n#endif // #ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/adl_move_swap.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker\n// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/container for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef BOOST_MOVE_ADL_MOVE_SWAP_HPP\n#define BOOST_MOVE_ADL_MOVE_SWAP_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n//Based on Boost.Core's swap.\n//Many thanks to Steven Watanabe, Joseph Gauterin and Niels Dekker.\n\n#include <boost/config.hpp>\n#include <cstddef> //for std::size_t\n\n//Try to avoid including <algorithm>, as it's quite big\n#if defined(_MSC_VER) && defined(BOOST_DINKUMWARE_STDLIB)\n   #include <utility>   //Dinkum libraries define std::swap in utility which is lighter than algorithm\n#elif defined(BOOST_GNU_STDLIB)\n   //For non-GCC compilers, where GNUC version is not very reliable, or old GCC versions\n   //use the good old stl_algobase header, which is quite lightweight\n   #if !defined(BOOST_GCC) || ((__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ < 3)))\n      #include <bits/stl_algobase.h>\n   #elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)\n      //In GCC 4.3 a tiny stl_move.h was created with swap and move utilities\n      #include <bits/stl_move.h>\n   #else\n      //In GCC 4.4 stl_move.h was renamed to move.h\n      #include <bits/move.h>\n   #endif\n#elif defined(_LIBCPP_VERSION)\n   #include <type_traits>  //The initial import of libc++ defines std::swap and still there\n#elif __cplusplus >= 201103L\n   #include <utility>    //Fallback for C++ >= 2011\n#else\n   #include <algorithm>  //Fallback for C++98/03\n#endif\n\n#include <boost/move/utility_core.hpp> //for boost::move\n\n#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\nnamespace boost_move_member_swap {\n\nstruct dont_care\n{\n   dont_care(...);\n};\n\nstruct private_type\n{\n   static private_type p;\n   private_type const &operator,(int) const;\n};\n\ntypedef char yes_type;            \nstruct no_type{ char dummy[2]; }; \n\ntemplate<typename T>\nno_type is_private_type(T const &);\n\nyes_type is_private_type(private_type const &);\n\ntemplate <typename Type>\nclass has_member_function_named_swap\n{\n   struct BaseMixin\n   {\n      void swap();\n   };\n\n   struct Base : public Type, public BaseMixin { Base(); };\n   template <typename T, T t> class Helper{};\n\n   template <typename U>\n   static no_type deduce(U*, Helper<void (BaseMixin::*)(), &U::swap>* = 0);\n   static yes_type deduce(...);\n\n   public:\n   static const bool value = sizeof(yes_type) == sizeof(deduce((Base*)(0)));\n};\n\ntemplate<typename Fun, bool HasFunc>\nstruct has_member_swap_impl\n{\n   static const bool value = false;\n};\n\ntemplate<typename Fun>\nstruct has_member_swap_impl<Fun, true>\n{\n   struct FunWrap : Fun\n   {\n      FunWrap();\n\n      using Fun::swap;\n      private_type swap(dont_care) const;\n   };\n\n   static Fun &declval_fun();\n   static FunWrap declval_wrap();\n\n   static bool const value =\n      sizeof(no_type) == sizeof(is_private_type( (declval_wrap().swap(declval_fun()), 0)) );\n};\n\ntemplate<typename Fun>\nstruct has_member_swap : public has_member_swap_impl\n      <Fun, has_member_function_named_swap<Fun>::value>\n{};\n\n}  //namespace boost_move_member_swap\n\nnamespace boost_move_adl_swap{\n\ntemplate<class P1, class P2, bool = P1::value>\nstruct and_op_impl\n{  static const bool value = false; };\n\ntemplate<class P1, class P2>\nstruct and_op_impl<P1, P2, true>\n{  static const bool value = P2::value;   };\n\ntemplate<class P1, class P2>\nstruct and_op\n   : and_op_impl<P1, P2>\n{};\n\n//////\n\ntemplate<class P1, class P2, bool = P1::value>\nstruct and_op_not_impl\n{  static const bool value = false; };\n\ntemplate<class P1, class P2>\nstruct and_op_not_impl<P1, P2, true>\n{  static const bool value = !P2::value;   };\n\ntemplate<class P1, class P2>\nstruct and_op_not\n   : and_op_not_impl<P1, P2>\n{};\n\ntemplate<class T>\nvoid swap_proxy(T& x, T& y, typename boost::move_detail::enable_if_c<!boost::move_detail::has_move_emulation_enabled_impl<T>::value>::type* = 0)\n{\n   //use std::swap if argument dependent lookup fails\n   //Use using directive (\"using namespace xxx;\") instead as some older compilers\n   //don't do ADL with using declarations (\"using ns::func;\").\n   using namespace std;\n   swap(x, y);\n}\n\ntemplate<class T>\nvoid swap_proxy(T& x, T& y\n               , typename boost::move_detail::enable_if< and_op_not_impl<boost::move_detail::has_move_emulation_enabled_impl<T>\n                                                                        , boost_move_member_swap::has_member_swap<T> >\n                                                       >::type* = 0)\n{  T t(::boost::move(x)); x = ::boost::move(y); y = ::boost::move(t);  }\n\ntemplate<class T>\nvoid swap_proxy(T& x, T& y\n               , typename boost::move_detail::enable_if< and_op_impl< boost::move_detail::has_move_emulation_enabled_impl<T>\n                                                                    , boost_move_member_swap::has_member_swap<T> >\n                                                       >::type* = 0)\n{  x.swap(y);  }\n\n}  //namespace boost_move_adl_swap{\n\n#else\n\nnamespace boost_move_adl_swap{\n\ntemplate<class T>\nvoid swap_proxy(T& x, T& y)\n{\n   using std::swap;\n   swap(x, y);\n}\n\n}  //namespace boost_move_adl_swap{\n\n#endif   //#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n\nnamespace boost_move_adl_swap{\n\ntemplate<class T, std::size_t N>\nvoid swap_proxy(T (& x)[N], T (& y)[N])\n{\n   for (std::size_t i = 0; i < N; ++i){\n      ::boost_move_adl_swap::swap_proxy(x[i], y[i]);\n   }\n}\n\n}  //namespace boost_move_adl_swap {\n\n#endif   //!defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\nnamespace boost{\n\n//! Exchanges the values of a and b, using Argument Dependent Lookup (ADL) to select a\n//! specialized swap function if available. If no specialized swap function is available,\n//! std::swap is used.\n//!\n//! <b>Exception</b>: If T uses Boost.Move's move emulation and the compiler has\n//! no rvalue references then:\n//!\n//!   -  If T has a <code>T::swap(T&)</code> member, that member is called.\n//!   -  Otherwise a move-based swap is called, equivalent to: \n//!      <code>T t(::boost::move(x)); x = ::boost::move(y); y = ::boost::move(t);</code>.\ntemplate<class T>\nvoid adl_move_swap(T& x, T& y)\n{\n   ::boost_move_adl_swap::swap_proxy(x, y);\n}\n\n}  //namespace boost{\n\n#endif   //#ifndef BOOST_MOVE_ADL_MOVE_SWAP_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/algorithm.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2012-2012.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n\n#ifndef BOOST_MOVE_ALGORITHM_HPP\n#define BOOST_MOVE_ALGORITHM_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n\n#include <boost/move/utility_core.hpp>\n#include <boost/move/iterator.hpp>\n#include <boost/detail/no_exceptions_support.hpp>\n\n#include <algorithm> //copy, copy_backward\n#include <memory>    //uninitialized_copy\n\nnamespace boost {\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                               move\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#if !defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)\n\n   //! <b>Effects</b>: Moves elements in the range [first,last) into the range [result,result + (last -\n   //!   first)) starting from first and proceeding to last. For each non-negative integer n < (last-first),\n   //!   performs *(result + n) = ::boost::move (*(first + n)).\n   //!\n   //! <b>Effects</b>: result + (last - first).\n   //!\n   //! <b>Requires</b>: result shall not be in the range [first,last).\n   //!\n   //! <b>Complexity</b>: Exactly last - first move assignments.\n   template <typename I, // I models InputIterator\n            typename O> // O models OutputIterator\n   O move(I f, I l, O result)\n   {\n      while (f != l) {\n         *result = ::boost::move(*f);\n         ++f; ++result;\n      }\n      return result;\n   }\n\n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                               move_backward\n   //\n   //////////////////////////////////////////////////////////////////////////////\n\n   //! <b>Effects</b>: Moves elements in the range [first,last) into the range\n   //!   [result - (last-first),result) starting from last - 1 and proceeding to\n   //!   first. For each positive integer n <= (last - first),\n   //!   performs *(result - n) = ::boost::move(*(last - n)).\n   //!\n   //! <b>Requires</b>: result shall not be in the range [first,last).\n   //!\n   //! <b>Returns</b>: result - (last - first).\n   //!\n   //! <b>Complexity</b>: Exactly last - first assignments.\n   template <typename I, // I models BidirectionalIterator\n   typename O> // O models BidirectionalIterator\n   O move_backward(I f, I l, O result)\n   {\n      while (f != l) {\n         --l; --result;\n         *result = ::boost::move(*l);\n      }\n      return result;\n   }\n\n#else\n\n   using ::std::move_backward;\n\n#endif   //!defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                               uninitialized_move\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! <b>Effects</b>:\n//!   \\code\n//!   for (; first != last; ++result, ++first)\n//!      new (static_cast<void*>(&*result))\n//!         typename iterator_traits<ForwardIterator>::value_type(boost::move(*first));\n//!   \\endcode\n//!\n//! <b>Returns</b>: result\ntemplate\n   <typename I, // I models InputIterator\n    typename F> // F models ForwardIterator\nF uninitialized_move(I f, I l, F r\n   /// @cond\n//   ,typename ::boost::move_detail::enable_if<has_move_emulation_enabled<typename std::iterator_traits<I>::value_type> >::type* = 0\n   /// @endcond\n   )\n{\n   typedef typename std::iterator_traits<I>::value_type input_value_type;\n\n   F back = r;\n   BOOST_TRY{\n      while (f != l) {\n         void * const addr = static_cast<void*>(::boost::move_detail::addressof(*r));\n         ::new(addr) input_value_type(::boost::move(*f));\n         ++f; ++r;\n      }\n   }\n   BOOST_CATCH(...){\n\t   for (; back != r; ++back){\n         back->~input_value_type();\n      }\n\t   BOOST_RETHROW;\n   }\n   BOOST_CATCH_END\n   return r;\n}\n\n/// @cond\n/*\ntemplate\n   <typename I,   // I models InputIterator\n    typename F>   // F models ForwardIterator\nF uninitialized_move(I f, I l, F r,\n   typename ::boost::move_detail::disable_if<has_move_emulation_enabled<typename std::iterator_traits<I>::value_type> >::type* = 0)\n{\n   return std::uninitialized_copy(f, l, r);\n}\n*/\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                            uninitialized_copy_or_move\n//\n//////////////////////////////////////////////////////////////////////////////\n\nnamespace move_detail {\n\ntemplate\n<typename I,   // I models InputIterator\ntypename F>   // F models ForwardIterator\ninline F uninitialized_move_move_iterator(I f, I l, F r\n//                             ,typename ::boost::move_detail::enable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0\n)\n{\n   return ::boost::uninitialized_move(f, l, r);\n}\n/*\ntemplate\n<typename I,   // I models InputIterator\ntypename F>   // F models ForwardIterator\nF uninitialized_move_move_iterator(I f, I l, F r,\n                                   typename ::boost::move_detail::disable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0)\n{\n   return std::uninitialized_copy(f.base(), l.base(), r);\n}\n*/\n}  //namespace move_detail {\n\ntemplate\n<typename I,   // I models InputIterator\ntypename F>   // F models ForwardIterator\ninline F uninitialized_copy_or_move(I f, I l, F r,\n                             typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)\n{\n   return ::boost::move_detail::uninitialized_move_move_iterator(f, l, r);\n}\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                            copy_or_move\n//\n//////////////////////////////////////////////////////////////////////////////\n\nnamespace move_detail {\n\ntemplate\n<typename I,   // I models InputIterator\ntypename F>   // F models ForwardIterator\ninline F move_move_iterator(I f, I l, F r\n//                             ,typename ::boost::move_detail::enable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0\n)\n{\n   return ::boost::move(f, l, r);\n}\n/*\ntemplate\n<typename I,   // I models InputIterator\ntypename F>   // F models ForwardIterator\nF move_move_iterator(I f, I l, F r,\n                                   typename ::boost::move_detail::disable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0)\n{\n   return std::copy(f.base(), l.base(), r);\n}\n*/\n\n}  //namespace move_detail {\n\ntemplate\n<typename I,   // I models InputIterator\ntypename F>   // F models ForwardIterator\ninline F copy_or_move(I f, I l, F r,\n                             typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)\n{\n   return ::boost::move_detail::move_move_iterator(f, l, r);\n}\n\n/// @endcond\n\n//! <b>Effects</b>:\n//!   \\code\n//!   for (; first != last; ++result, ++first)\n//!      new (static_cast<void*>(&*result))\n//!         typename iterator_traits<ForwardIterator>::value_type(*first);\n//!   \\endcode\n//!\n//! <b>Returns</b>: result\n//!\n//! <b>Note</b>: This function is provided because\n//!   <i>std::uninitialized_copy</i> from some STL implementations\n//!    is not compatible with <i>move_iterator</i>\ntemplate\n<typename I,   // I models InputIterator\ntypename F>   // F models ForwardIterator\ninline F uninitialized_copy_or_move(I f, I l, F r\n   /// @cond\n   ,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0\n   /// @endcond\n   )\n{\n   return std::uninitialized_copy(f, l, r);\n}\n\n//! <b>Effects</b>:\n//!   \\code\n//!   for (; first != last; ++result, ++first)\n//!      *result = *first;\n//!   \\endcode\n//!\n//! <b>Returns</b>: result\n//!\n//! <b>Note</b>: This function is provided because\n//!   <i>std::uninitialized_copy</i> from some STL implementations\n//!    is not compatible with <i>move_iterator</i>\ntemplate\n<typename I,   // I models InputIterator\ntypename F>   // F models ForwardIterator\ninline F copy_or_move(I f, I l, F r\n   /// @cond\n   ,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0\n   /// @endcond\n   )\n{\n   return std::copy(f, l, r);\n}\n\n}  //namespace boost {\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif //#ifndef BOOST_MOVE_ALGORITHM_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/core.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2012-2012.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n//! This header implements macros to define movable classes and\n//! move-aware functions\n\n#ifndef BOOST_MOVE_CORE_HPP\n#define BOOST_MOVE_CORE_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n#include <boost/move/detail/workaround.hpp>\n\n// @cond\n\n//boost_move_no_copy_constructor_or_assign typedef\n//used to detect noncopyable types for other Boost libraries.\n#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n   #define BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE) \\\n      private:\\\n      TYPE(TYPE &);\\\n      TYPE& operator=(TYPE &);\\\n      public:\\\n      typedef int boost_move_no_copy_constructor_or_assign; \\\n      private:\\\n   //\n#else\n   #define BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE) \\\n      public:\\\n      TYPE(TYPE const &) = delete;\\\n      TYPE& operator=(TYPE const &) = delete;\\\n      public:\\\n      typedef int boost_move_no_copy_constructor_or_assign; \\\n      private:\\\n   //\n#endif   //BOOST_NO_CXX11_DELETED_FUNCTIONS\n\n// @endcond\n\n#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n   #include <boost/move/detail/type_traits.hpp>\n\n   #if defined(BOOST_MOVE_ADDRESS_SANITIZER_ON)\n      #define BOOST_MOVE_TO_RV_CAST(RV_TYPE, ARG) reinterpret_cast<RV_TYPE>(ARG)\n   #else\n      #define BOOST_MOVE_TO_RV_CAST(RV_TYPE, ARG) static_cast<RV_TYPE>(ARG)\n   #endif\n\n   //Move emulation rv breaks standard aliasing rules so add workarounds for some compilers\n   #if defined(__GNUC__) && (__GNUC__ >= 4) && \\\n      (\\\n         defined(BOOST_GCC) ||   \\\n         (defined(BOOST_INTEL) && (BOOST_INTEL_CXX_VERSION >= 1300)) \\\n      )\n      #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__))\n   #else\n      #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS\n   #endif\n\n   namespace boost {\n\n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                            struct rv\n   //\n   //////////////////////////////////////////////////////////////////////////////\n   template <class T>\n   class rv\n      : public ::boost::move_detail::if_c\n         < ::boost::move_detail::is_class<T>::value\n         , T\n         , ::boost::move_detail::nat\n         >::type\n   {\n      rv();\n      ~rv() throw();\n      rv(rv const&);\n      void operator=(rv const&);\n   } BOOST_MOVE_ATTRIBUTE_MAY_ALIAS;\n\n\n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                            is_rv\n   //\n   //////////////////////////////////////////////////////////////////////////////\n\n   namespace move_detail {\n\n   template <class T>\n   struct is_rv\n        //Derive from integral constant because some Boost code assummes it has\n        //a \"type\" internal typedef\n      : integral_constant<bool, ::boost::move_detail::is_rv_impl<T>::value >\n   {};\n\n   template <class T>\n   struct is_not_rv\n   {\n      static const bool value = !is_rv<T>::value;\n   };\n\n   }  //namespace move_detail {\n\n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                               has_move_emulation_enabled\n   //\n   //////////////////////////////////////////////////////////////////////////////\n   template<class T>\n   struct has_move_emulation_enabled\n      : ::boost::move_detail::has_move_emulation_enabled_impl<T>\n   {};\n\n   template<class T>\n   struct has_move_emulation_disabled\n   {\n      static const bool value = !::boost::move_detail::has_move_emulation_enabled_impl<T>::value;\n   };\n\n   }  //namespace boost {\n\n   #define BOOST_RV_REF(TYPE)\\\n      ::boost::rv< TYPE >& \\\n   //\n\n   #define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\\\n      ::boost::rv< TYPE<ARG1, ARG2> >& \\\n   //\n\n   #define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\\\n      ::boost::rv< TYPE<ARG1, ARG2, ARG3> >& \\\n   //\n\n   #define BOOST_RV_REF_BEG\\\n      ::boost::rv<   \\\n   //\n\n   #define BOOST_RV_REF_END\\\n      >& \\\n   //\n\n   #define BOOST_RV_REF_BEG_IF_CXX11 \\\n      \\\n   //\n\n   #define BOOST_RV_REF_END_IF_CXX11 \\\n      \\\n   //\n\n   #define BOOST_FWD_REF(TYPE)\\\n      const TYPE & \\\n   //\n\n   #define BOOST_COPY_ASSIGN_REF(TYPE)\\\n      const ::boost::rv< TYPE >& \\\n   //\n\n   #define BOOST_COPY_ASSIGN_REF_BEG \\\n      const ::boost::rv<  \\\n   //\n\n   #define BOOST_COPY_ASSIGN_REF_END \\\n      >& \\\n   //\n\n   #define BOOST_COPY_ASSIGN_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\\\n      const ::boost::rv< TYPE<ARG1, ARG2> >& \\\n   //\n\n   #define BOOST_COPY_ASSIGN_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\\\n      const ::boost::rv< TYPE<ARG1, ARG2, ARG3> >& \\\n   //\n\n   #define BOOST_CATCH_CONST_RLVALUE(TYPE)\\\n      const ::boost::rv< TYPE >& \\\n   //\n\n   namespace boost {\n   namespace move_detail {\n\n   template <class Ret, class T>\n   inline typename ::boost::move_detail::enable_if_c\n      <  ::boost::move_detail::is_lvalue_reference<Ret>::value ||\n        !::boost::has_move_emulation_enabled<T>::value\n      , T&>::type\n         move_return(T& x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   template <class Ret, class T>\n   inline typename ::boost::move_detail::enable_if_c\n      < !::boost::move_detail::is_lvalue_reference<Ret>::value &&\n         ::boost::has_move_emulation_enabled<T>::value\n      , ::boost::rv<T>&>::type\n         move_return(T& x) BOOST_NOEXCEPT\n   {\n      return *BOOST_MOVE_TO_RV_CAST(::boost::rv<T>*, ::boost::move_detail::addressof(x));\n   }\n\n   template <class Ret, class T>\n   inline typename ::boost::move_detail::enable_if_c\n      < !::boost::move_detail::is_lvalue_reference<Ret>::value &&\n         ::boost::has_move_emulation_enabled<T>::value\n      , ::boost::rv<T>&>::type\n         move_return(::boost::rv<T>& x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   }  //namespace move_detail {\n   }  //namespace boost {\n\n   #define BOOST_MOVE_RET(RET_TYPE, REF)\\\n      boost::move_detail::move_return< RET_TYPE >(REF)\n   //\n\n   #define BOOST_MOVE_BASE(BASE_TYPE, ARG) \\\n      ::boost::move((BASE_TYPE&)(ARG))\n   //\n\n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                         BOOST_MOVABLE_BUT_NOT_COPYABLE\n   //\n   //////////////////////////////////////////////////////////////////////////////\n   #define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\\\n      BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE)\\\n      public:\\\n      operator ::boost::rv<TYPE>&() \\\n      {  return *BOOST_MOVE_TO_RV_CAST(::boost::rv<TYPE>*, this);  }\\\n      operator const ::boost::rv<TYPE>&() const \\\n      {  return *BOOST_MOVE_TO_RV_CAST(const ::boost::rv<TYPE>*, this);  }\\\n      private:\\\n   //\n\n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                         BOOST_COPYABLE_AND_MOVABLE\n   //\n   //////////////////////////////////////////////////////////////////////////////\n\n   #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\\\n      public:\\\n      TYPE& operator=(TYPE &t)\\\n      {  this->operator=(const_cast<const TYPE &>(t)); return *this;}\\\n      public:\\\n      operator ::boost::rv<TYPE>&() \\\n      {  return *BOOST_MOVE_TO_RV_CAST(::boost::rv<TYPE>*, this);  }\\\n      operator const ::boost::rv<TYPE>&() const \\\n      {  return *BOOST_MOVE_TO_RV_CAST(const ::boost::rv<TYPE>*, this);  }\\\n      private:\\\n   //\n\n   #define BOOST_COPYABLE_AND_MOVABLE_ALT(TYPE)\\\n      public:\\\n      operator ::boost::rv<TYPE>&() \\\n      {  return *BOOST_MOVE_TO_RV_CAST(::boost::rv<TYPE>*, this);  }\\\n      operator const ::boost::rv<TYPE>&() const \\\n      {  return *BOOST_MOVE_TO_RV_CAST(const ::boost::rv<TYPE>*, this);  }\\\n      private:\\\n   //\n\n   namespace boost{\n   namespace move_detail{\n\n   template< class T>\n   struct forward_type\n   { typedef const T &type; };\n\n   template< class T>\n   struct forward_type< boost::rv<T> >\n   { typedef T type; };\n\n   }}\n\n#else    //BOOST_NO_CXX11_RVALUE_REFERENCES\n\n   //! This macro marks a type as movable but not copyable, disabling copy construction\n   //! and assignment. The user will need to write a move constructor/assignment as explained\n   //! in the documentation to fully write a movable but not copyable class.\n   #define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\\\n      BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE)\\\n      public:\\\n      typedef int boost_move_emulation_t;\\\n   //\n\n   //! This macro marks a type as copyable and movable.\n   //! The user will need to write a move constructor/assignment and a copy assignment\n   //! as explained in the documentation to fully write a copyable and movable class.\n   #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\\\n   //\n\n   #if !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n   #define BOOST_COPYABLE_AND_MOVABLE_ALT(TYPE)\\\n   //\n   #endif   //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n   namespace boost {\n\n   //!This trait yields to a compile-time true boolean if T was marked as\n   //!BOOST_MOVABLE_BUT_NOT_COPYABLE or BOOST_COPYABLE_AND_MOVABLE and\n   //!rvalue references are not available on the platform. False otherwise.\n   template<class T>\n   struct has_move_emulation_enabled\n   {\n      static const bool value = false;\n   };\n\n   template<class T>\n   struct has_move_emulation_disabled\n   {\n      static const bool value = true;\n   };\n\n   }  //namespace boost{\n\n   //!This macro is used to achieve portable syntax in move\n   //!constructors and assignments for classes marked as\n   //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE\n   #define BOOST_RV_REF(TYPE)\\\n      TYPE && \\\n   //\n\n   //!This macro is used to achieve portable syntax in move\n   //!constructors and assignments for template classes marked as\n   //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE.\n   //!As macros have problems with comma-separated template arguments,\n   //!the template argument must be preceded with BOOST_RV_REF_BEG\n   //!and ended with BOOST_RV_REF_END\n   #define BOOST_RV_REF_BEG\\\n         \\\n   //\n\n   //!This macro is used to achieve portable syntax in move\n   //!constructors and assignments for template classes marked as\n   //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE.\n   //!As macros have problems with comma-separated template arguments,\n   //!the template argument must be preceded with BOOST_RV_REF_BEG\n   //!and ended with BOOST_RV_REF_END\n   #define BOOST_RV_REF_END\\\n      && \\\n   //\n\n   //!This macro expands to BOOST_RV_REF_BEG if BOOST_NO_CXX11_RVALUE_REFERENCES\n   //!is not defined, empty otherwise\n   #define BOOST_RV_REF_BEG_IF_CXX11 \\\n      BOOST_RV_REF_BEG \\\n   //\n\n   //!This macro expands to BOOST_RV_REF_END if BOOST_NO_CXX11_RVALUE_REFERENCES\n   //!is not defined, empty otherwise\n   #define BOOST_RV_REF_END_IF_CXX11 \\\n      BOOST_RV_REF_END \\\n   //\n\n   //!This macro is used to achieve portable syntax in copy\n   //!assignment for classes marked as BOOST_COPYABLE_AND_MOVABLE.\n   #define BOOST_COPY_ASSIGN_REF(TYPE)\\\n      const TYPE & \\\n   //\n\n   //! This macro is used to implement portable perfect forwarding\n   //! as explained in the documentation.\n   #define BOOST_FWD_REF(TYPE)\\\n      TYPE && \\\n   //\n\n   #if !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n   #define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\\\n      TYPE<ARG1, ARG2> && \\\n   //\n\n   #define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\\\n      TYPE<ARG1, ARG2, ARG3> && \\\n   //\n\n   #define BOOST_COPY_ASSIGN_REF_BEG \\\n      const \\\n   //\n\n   #define BOOST_COPY_ASSIGN_REF_END \\\n      & \\\n   //\n\n   #define BOOST_COPY_ASSIGN_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\\\n      const TYPE<ARG1, ARG2> & \\\n   //\n\n   #define BOOST_COPY_ASSIGN_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\\\n      const TYPE<ARG1, ARG2, ARG3>& \\\n   //\n\n   #define BOOST_CATCH_CONST_RLVALUE(TYPE)\\\n      const TYPE & \\\n   //\n\n   #endif   //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n   #if !defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n      //!This macro is used to achieve portable move return semantics.\n      //!The C++11 Standard allows implicit move returns when the object to be returned\n      //!is designated by a lvalue and:\n      //!   - The criteria for elision of a copy operation are met OR\n      //!   - The criteria would be met save for the fact that the source object is a function parameter\n      //!\n      //!For C++11 conforming compilers this macros only yields to REF:\n      //! <code>return BOOST_MOVE_RET(RET_TYPE, REF);</code> -> <code>return REF;</code>\n      //!\n      //!For compilers without rvalue references\n      //!this macro does an explicit move if the move emulation is activated\n      //!and the return type (RET_TYPE) is not a reference.\n      //!\n      //!For non-conforming compilers with rvalue references like Visual 2010 & 2012,\n      //!an explicit move is performed if RET_TYPE is not a reference.\n      //!\n      //! <b>Caution</b>: When using this macro in non-conforming or C++03\n      //!compilers, a move will be performed even if the C++11 standard does not allow it\n      //!(e.g. returning a static variable). The user is responsible for using this macro\n      //!only to return local objects that met C++11 criteria.\n      #define BOOST_MOVE_RET(RET_TYPE, REF)\\\n         REF\n      //\n\n   #else //!defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n      #include <boost/move/detail/meta_utils.hpp>\n\n      namespace boost {\n      namespace move_detail {\n\n      template <class Ret, class T>\n      inline typename ::boost::move_detail::enable_if_c\n         <  ::boost::move_detail::is_lvalue_reference<Ret>::value\n         , T&>::type\n            move_return(T& x) BOOST_NOEXCEPT\n      {\n         return x;\n      }\n\n      template <class Ret, class T>\n      inline typename ::boost::move_detail::enable_if_c\n         < !::boost::move_detail::is_lvalue_reference<Ret>::value\n         , Ret && >::type\n            move_return(T&& t) BOOST_NOEXCEPT\n      {\n         return static_cast< Ret&& >(t);\n      }\n\n      }  //namespace move_detail {\n      }  //namespace boost {\n\n      #define BOOST_MOVE_RET(RET_TYPE, REF)\\\n         boost::move_detail::move_return< RET_TYPE >(REF)\n      //\n\n   #endif   //!defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n   //!This macro is used to achieve portable optimal move constructors.\n   //!\n   //!When implementing the move constructor, in C++03 compilers the moved-from argument must be\n   //!cast to the base type before calling `::boost::move()` due to rvalue reference limitations.\n   //!\n   //!In C++11 compilers the cast from a rvalue reference of a derived type to a rvalue reference of\n   //!a base type is implicit.\n   #define BOOST_MOVE_BASE(BASE_TYPE, ARG) \\\n      ::boost::move((BASE_TYPE&)(ARG))\n   //\n\n   namespace boost {\n   namespace move_detail {\n\n   template< class T> struct forward_type { typedef T type; };\n\n   }}\n\n#endif   //BOOST_NO_CXX11_RVALUE_REFERENCES\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif //#ifndef BOOST_MOVE_CORE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/default_delete.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef BOOST_MOVE_DEFAULT_DELETE_HPP_INCLUDED\n#define BOOST_MOVE_DEFAULT_DELETE_HPP_INCLUDED\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n#include <boost/move/detail/workaround.hpp>\n#include <boost/move/detail/unique_ptr_meta_utils.hpp>\n#include <boost/move/utility_core.hpp>\n#include <boost/static_assert.hpp>\n\n#include <cstddef>   //For std::size_t,std::nullptr_t\n\n//!\\file\n//! Describes the default deleter (destruction policy) of <tt>unique_ptr</tt>: <tt>default_delete</tt>.\n\nnamespace boost{\n// @cond\nnamespace move_upd {\n\nnamespace bmupmu = ::boost::move_upmu;\n\n////////////////////////////////////////\n////        enable_def_del\n////////////////////////////////////////\n\n//compatible with a pointer type T*:\n//When either Y* is convertible to T*\n//Y is U[N] and T is U cv []\ntemplate<class U, class T>\nstruct def_del_compatible_cond\n   : bmupmu::is_convertible<U*, T*>\n{};\n\ntemplate<class U, class T, std::size_t N>\nstruct def_del_compatible_cond<U[N], T[]>\n   : def_del_compatible_cond<U[], T[]>\n{};\n\ntemplate<class U, class T, class Type = bmupmu::nat>\nstruct enable_def_del\n   : bmupmu::enable_if_c<def_del_compatible_cond<U, T>::value, Type>\n{};\n\n////////////////////////////////////////\n////        enable_defdel_call\n////////////////////////////////////////\n\n//When 2nd is T[N], 1st(*)[N] shall be convertible to T(*)[N]; \n//When 2nd is T[],  1st(*)[] shall be convertible to T(*)[]; \n//Otherwise, 1st* shall be convertible to 2nd*.\n\ntemplate<class U, class T, class Type = bmupmu::nat>\nstruct enable_defdel_call\n   : public enable_def_del<U, T, Type>\n{};\n\ntemplate<class U, class T, class Type>\nstruct enable_defdel_call<U, T[], Type>\n   : public enable_def_del<U[], T[], Type>\n{};\n\ntemplate<class U, class T, class Type, std::size_t N>\nstruct enable_defdel_call<U, T[N], Type>\n   : public enable_def_del<U[N], T[N], Type>\n{};\n\n////////////////////////////////////////\n////     Some bool literal zero conversion utilities\n////////////////////////////////////////\n\nstruct bool_conversion {int for_bool; int for_arg(); };\ntypedef int bool_conversion::* explicit_bool_arg;\n\n#if !defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_CXX11_DECLTYPE)\n   typedef decltype(nullptr) nullptr_type;\n#elif !defined(BOOST_NO_CXX11_NULLPTR)\n   typedef std::nullptr_t nullptr_type;\n#else\n   typedef int (bool_conversion::*nullptr_type)();\n#endif\n\n}  //namespace move_upd {\n// @endcond\n\nnamespace movelib {\n\nnamespace bmupd = boost::move_upd;\nnamespace bmupmu = ::boost::move_upmu;\n\n//!The class template <tt>default_delete</tt> serves as the default deleter\n//!(destruction policy) for the class template <tt>unique_ptr</tt>.\n//!\n//! \\tparam T The type to be deleted. It may be an incomplete type\ntemplate <class T>\nstruct default_delete\n{\n   //! Default constructor.\n   //!\n   BOOST_CONSTEXPR default_delete()\n   //Avoid \"defaulted on its first declaration must not have an exception-specification\" error for GCC 4.6\n   #if !defined(BOOST_GCC) || (BOOST_GCC < 40600 && BOOST_GCC >= 40700) || defined(BOOST_MOVE_DOXYGEN_INVOKED)\n   BOOST_NOEXCEPT\n   #endif\n   #if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_MOVE_DOXYGEN_INVOKED)\n   = default;\n   #else\n   {};\n   #endif\n\n   #if defined(BOOST_MOVE_DOXYGEN_INVOKED)\n   //! Trivial copy constructor\n   //!\n   default_delete(const default_delete&) BOOST_NOEXCEPT = default;\n   //! Trivial assignment\n   //!\n   default_delete &operator=(const default_delete&) BOOST_NOEXCEPT = default;\n   #else\n   typedef typename bmupmu::remove_extent<T>::type element_type;\n   #endif\n\n   //! <b>Effects</b>: Constructs a default_delete object from another <tt>default_delete<U></tt> object.\n   //!\n   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:\n   //!   - If T is not an array type and U* is implicitly convertible to T*.\n   //!   - If T is an array type and U* is a more CV qualified pointer to remove_extent<T>::type.\n   template <class U>\n   default_delete(const default_delete<U>&\n      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_def_del<U BOOST_MOVE_I T>::type* =0)\n      ) BOOST_NOEXCEPT\n   {\n      //If T is not an array type, U derives from T\n      //and T has no virtual destructor, then you have a problem\n      BOOST_STATIC_ASSERT(( !::boost::move_upmu::missing_virtual_destructor<default_delete, U>::value ));\n   }\n\n   //! <b>Effects</b>: Constructs a default_delete object from another <tt>default_delete<U></tt> object.\n   //!\n   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:\n   //!   - If T is not an array type and U* is implicitly convertible to T*.\n   //!   - If T is an array type and U* is a more CV qualified pointer to remove_extent<T>::type.\n   template <class U>\n   BOOST_MOVE_DOC1ST(default_delete&, \n      typename bmupd::enable_def_del<U BOOST_MOVE_I T BOOST_MOVE_I default_delete &>::type)\n      operator=(const default_delete<U>&) BOOST_NOEXCEPT\n   {\n      //If T is not an array type, U derives from T\n      //and T has no virtual destructor, then you have a problem\n      BOOST_STATIC_ASSERT(( !::boost::move_upmu::missing_virtual_destructor<default_delete, U>::value ));\n      return *this;\n   }\n\n   //! <b>Effects</b>: if T is not an array type, calls <tt>delete</tt> on static_cast<T*>(ptr),\n   //!   otherwise calls <tt>delete[]</tt> on static_cast<remove_extent<T>::type*>(ptr).\n   //!\n   //! <b>Remarks</b>: If U is an incomplete type, the program is ill-formed.\n   //!   This operator shall not participate in overload resolution unless:\n   //!      - T is not an array type and U* is convertible to T*, OR\n   //!      - T is an array type, and remove_cv<U>::type is the same type as\n   //!         remove_cv<remove_extent<T>::type>::type and U* is convertible to remove_extent<T>::type*.\n   template <class U>\n   BOOST_MOVE_DOC1ST(void, typename bmupd::enable_defdel_call<U BOOST_MOVE_I T BOOST_MOVE_I void>::type)\n      operator()(U* ptr) const BOOST_NOEXCEPT\n   {\n      //U must be a complete type\n      BOOST_STATIC_ASSERT(sizeof(U) > 0);\n      //If T is not an array type, U derives from T\n      //and T has no virtual destructor, then you have a problem\n      BOOST_STATIC_ASSERT(( !::boost::move_upmu::missing_virtual_destructor<default_delete, U>::value ));\n      element_type * const p = static_cast<element_type*>(ptr);\n      bmupmu::is_array<T>::value ? delete [] p : delete p;\n   }\n\n   //! <b>Effects</b>: Same as <tt>(*this)(static_cast<element_type*>(nullptr))</tt>.\n   //!\n   void operator()(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) const BOOST_NOEXCEPT\n   {  BOOST_STATIC_ASSERT(sizeof(element_type) > 0);  }\n};\n\n}  //namespace movelib {\n}  //namespace boost{\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif   //#ifndef BOOST_MOVE_DEFAULT_DELETE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/config_begin.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n#ifndef BOOST_CONFIG_HPP\n#include <boost/config.hpp>\n#endif\n\n#ifdef BOOST_MSVC\n#  pragma warning (push)\n#  pragma warning (disable : 4324) // structure was padded due to __declspec(align())\n#  pragma warning (disable : 4675) // \"function\":  resolved overload was found by argument-dependent lookup\n#  pragma warning (disable : 4996) // \"function\": was declared deprecated (_CRT_SECURE_NO_DEPRECATE/_SCL_SECURE_NO_WARNINGS)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/config_end.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n#if defined BOOST_MSVC\n#  pragma warning (pop)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/fwd_macros.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/container for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef BOOST_MOVE_DETAIL_FWD_MACROS_HPP\n#define BOOST_MOVE_DETAIL_FWD_MACROS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/workaround.hpp>\n\nnamespace boost {\nnamespace move_detail {\n\ntemplate <typename T> struct unvoid { typedef T type; };\ntemplate <> struct unvoid<void> { struct type { }; };\ntemplate <> struct unvoid<const void> { struct type { }; };\n\n}  //namespace move_detail {\n}  //namespace boost {\n\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n\n#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG)\n\nnamespace boost {\nnamespace move_detail {\n\n   template<class T>\n   struct mref;\n\n   template<class T>\n   struct mref<T &>\n   {\n      explicit mref(T &t) : t_(t){}\n      T &t_;\n      T & get() {  return t_;   }\n   };\n\n   template<class T>\n   struct mref\n   {\n      explicit mref(T &&t) : t_(t) {}\n      T &t_;\n      T &&get() {  return ::boost::move(t_);   }\n   };\n\n}  //namespace move_detail {\n}  //namespace boost {\n\n#endif   //BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG\n#endif   //!defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n\n//BOOST_MOVE_REPEATN(MACRO)\n#define BOOST_MOVE_REPEAT0(MACRO)\n#define BOOST_MOVE_REPEAT1(MACRO)                            MACRO\n#define BOOST_MOVE_REPEAT2(MACRO) BOOST_MOVE_REPEAT1(MACRO), MACRO\n#define BOOST_MOVE_REPEAT3(MACRO) BOOST_MOVE_REPEAT2(MACRO), MACRO\n#define BOOST_MOVE_REPEAT4(MACRO) BOOST_MOVE_REPEAT3(MACRO), MACRO\n#define BOOST_MOVE_REPEAT5(MACRO) BOOST_MOVE_REPEAT4(MACRO), MACRO\n#define BOOST_MOVE_REPEAT6(MACRO) BOOST_MOVE_REPEAT5(MACRO), MACRO\n#define BOOST_MOVE_REPEAT7(MACRO) BOOST_MOVE_REPEAT6(MACRO), MACRO\n#define BOOST_MOVE_REPEAT8(MACRO) BOOST_MOVE_REPEAT7(MACRO), MACRO\n#define BOOST_MOVE_REPEAT9(MACRO) BOOST_MOVE_REPEAT8(MACRO), MACRO\n\n//BOOST_MOVE_FWDN\n#define BOOST_MOVE_FWD0\n#define BOOST_MOVE_FWD1                  ::boost::forward<P0>(p0)\n#define BOOST_MOVE_FWD2 BOOST_MOVE_FWD1, ::boost::forward<P1>(p1)\n#define BOOST_MOVE_FWD3 BOOST_MOVE_FWD2, ::boost::forward<P2>(p2)\n#define BOOST_MOVE_FWD4 BOOST_MOVE_FWD3, ::boost::forward<P3>(p3)\n#define BOOST_MOVE_FWD5 BOOST_MOVE_FWD4, ::boost::forward<P4>(p4)\n#define BOOST_MOVE_FWD6 BOOST_MOVE_FWD5, ::boost::forward<P5>(p5)\n#define BOOST_MOVE_FWD7 BOOST_MOVE_FWD6, ::boost::forward<P6>(p6)\n#define BOOST_MOVE_FWD8 BOOST_MOVE_FWD7, ::boost::forward<P7>(p7)\n#define BOOST_MOVE_FWD9 BOOST_MOVE_FWD8, ::boost::forward<P8>(p8)\n\n//BOOST_MOVE_FWDQN\n#define BOOST_MOVE_FWDQ0\n#define BOOST_MOVE_FWDQ1                   ::boost::forward<Q0>(q0)\n#define BOOST_MOVE_FWDQ2 BOOST_MOVE_FWDQ1, ::boost::forward<Q1>(q1)\n#define BOOST_MOVE_FWDQ3 BOOST_MOVE_FWDQ2, ::boost::forward<Q2>(q2)\n#define BOOST_MOVE_FWDQ4 BOOST_MOVE_FWDQ3, ::boost::forward<Q3>(q3)\n#define BOOST_MOVE_FWDQ5 BOOST_MOVE_FWDQ4, ::boost::forward<Q4>(q4)\n#define BOOST_MOVE_FWDQ6 BOOST_MOVE_FWDQ5, ::boost::forward<Q5>(q5)\n#define BOOST_MOVE_FWDQ7 BOOST_MOVE_FWDQ6, ::boost::forward<Q6>(q6)\n#define BOOST_MOVE_FWDQ8 BOOST_MOVE_FWDQ7, ::boost::forward<Q7>(q7)\n#define BOOST_MOVE_FWDQ9 BOOST_MOVE_FWDQ8, ::boost::forward<Q8>(q8)\n\n//BOOST_MOVE_ARGN\n#define BOOST_MOVE_ARG0\n#define BOOST_MOVE_ARG1                  p0\n#define BOOST_MOVE_ARG2 BOOST_MOVE_ARG1, p1\n#define BOOST_MOVE_ARG3 BOOST_MOVE_ARG2, p2\n#define BOOST_MOVE_ARG4 BOOST_MOVE_ARG3, p3\n#define BOOST_MOVE_ARG5 BOOST_MOVE_ARG4, p4\n#define BOOST_MOVE_ARG6 BOOST_MOVE_ARG5, p5\n#define BOOST_MOVE_ARG7 BOOST_MOVE_ARG6, p6\n#define BOOST_MOVE_ARG8 BOOST_MOVE_ARG7, p7\n#define BOOST_MOVE_ARG9 BOOST_MOVE_ARG8, p8\n\n//BOOST_MOVE_ARGQN\n#define BOOST_MOVE_ARGQ0\n#define BOOST_MOVE_ARGQ1                   q0\n#define BOOST_MOVE_ARGQ2 BOOST_MOVE_ARGQ1, q1\n#define BOOST_MOVE_ARGQ3 BOOST_MOVE_ARGQ2, q2\n#define BOOST_MOVE_ARGQ4 BOOST_MOVE_ARGQ3, q3\n#define BOOST_MOVE_ARGQ5 BOOST_MOVE_ARGQ4, q4\n#define BOOST_MOVE_ARGQ6 BOOST_MOVE_ARGQ5, q5\n#define BOOST_MOVE_ARGQ7 BOOST_MOVE_ARGQ6, q6\n#define BOOST_MOVE_ARGQ8 BOOST_MOVE_ARGQ7, q7\n#define BOOST_MOVE_ARGQ9 BOOST_MOVE_ARGQ8, q8\n\n//BOOST_MOVE_DECLVALN\n#define BOOST_MOVE_DECLVAL0\n#define BOOST_MOVE_DECLVAL1                      ::boost::move_detail::declval<P0>()\n#define BOOST_MOVE_DECLVAL2 BOOST_MOVE_DECLVAL1, ::boost::move_detail::declval<P1>()\n#define BOOST_MOVE_DECLVAL3 BOOST_MOVE_DECLVAL2, ::boost::move_detail::declval<P2>()\n#define BOOST_MOVE_DECLVAL4 BOOST_MOVE_DECLVAL3, ::boost::move_detail::declval<P3>()\n#define BOOST_MOVE_DECLVAL5 BOOST_MOVE_DECLVAL4, ::boost::move_detail::declval<P4>()\n#define BOOST_MOVE_DECLVAL6 BOOST_MOVE_DECLVAL5, ::boost::move_detail::declval<P5>()\n#define BOOST_MOVE_DECLVAL7 BOOST_MOVE_DECLVAL6, ::boost::move_detail::declval<P6>()\n#define BOOST_MOVE_DECLVAL8 BOOST_MOVE_DECLVAL7, ::boost::move_detail::declval<P7>()\n#define BOOST_MOVE_DECLVAL9 BOOST_MOVE_DECLVAL8, ::boost::move_detail::declval<P8>()\n\n//BOOST_MOVE_DECLVALQN\n#define BOOST_MOVE_DECLVALQ0\n#define BOOST_MOVE_DECLVALQ1                       ::boost::move_detail::declval<Q0>()\n#define BOOST_MOVE_DECLVALQ2 BOOST_MOVE_DECLVALQ1, ::boost::move_detail::declval<Q1>()\n#define BOOST_MOVE_DECLVALQ3 BOOST_MOVE_DECLVALQ2, ::boost::move_detail::declval<Q2>()\n#define BOOST_MOVE_DECLVALQ4 BOOST_MOVE_DECLVALQ3, ::boost::move_detail::declval<Q3>()\n#define BOOST_MOVE_DECLVALQ5 BOOST_MOVE_DECLVALQ4, ::boost::move_detail::declval<Q4>()\n#define BOOST_MOVE_DECLVALQ6 BOOST_MOVE_DECLVALQ5, ::boost::move_detail::declval<Q5>()\n#define BOOST_MOVE_DECLVALQ7 BOOST_MOVE_DECLVALQ6, ::boost::move_detail::declval<Q6>()\n#define BOOST_MOVE_DECLVALQ8 BOOST_MOVE_DECLVALQ7, ::boost::move_detail::declval<Q7>()\n#define BOOST_MOVE_DECLVALQ9 BOOST_MOVE_DECLVALQ8, ::boost::move_detail::declval<Q8>()\n\n#ifdef BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG\n   #define BOOST_MOVE_MREF(T)    ::boost::move_detail::mref<T>\n   #define BOOST_MOVE_MFWD(N)    ::boost::forward<P##N>(this->m_p##N.get())\n   #define BOOST_MOVE_MFWDQ(N)   ::boost::forward<Q##N>(this->m_q##N.get())\n#else\n   #define BOOST_MOVE_MREF(T)    BOOST_FWD_REF(T)\n   #define BOOST_MOVE_MFWD(N)    ::boost::forward<P##N>(this->m_p##N)\n   #define BOOST_MOVE_MFWDQ(N)   ::boost::forward<Q##N>(this->m_q##N)\n#endif\n#define BOOST_MOVE_MITFWD(N)  *this->m_p##N\n#define BOOST_MOVE_MINC(N)    ++this->m_p##N\n#define BOOST_MOVE_MITFWDQ(N) *this->m_q##N\n#define BOOST_MOVE_MINCQ(N)   ++this->m_q##N\n\n\n//BOOST_MOVE_MFWDN\n#define BOOST_MOVE_MFWD0\n#define BOOST_MOVE_MFWD1                   BOOST_MOVE_MFWD(0)\n#define BOOST_MOVE_MFWD2 BOOST_MOVE_MFWD1, BOOST_MOVE_MFWD(1)\n#define BOOST_MOVE_MFWD3 BOOST_MOVE_MFWD2, BOOST_MOVE_MFWD(2)\n#define BOOST_MOVE_MFWD4 BOOST_MOVE_MFWD3, BOOST_MOVE_MFWD(3)\n#define BOOST_MOVE_MFWD5 BOOST_MOVE_MFWD4, BOOST_MOVE_MFWD(4)\n#define BOOST_MOVE_MFWD6 BOOST_MOVE_MFWD5, BOOST_MOVE_MFWD(5)\n#define BOOST_MOVE_MFWD7 BOOST_MOVE_MFWD6, BOOST_MOVE_MFWD(6)\n#define BOOST_MOVE_MFWD8 BOOST_MOVE_MFWD7, BOOST_MOVE_MFWD(7)\n#define BOOST_MOVE_MFWD9 BOOST_MOVE_MFWD8, BOOST_MOVE_MFWD(8)\n\n//BOOST_MOVE_MFWDN\n#define BOOST_MOVE_MFWDQ0\n#define BOOST_MOVE_MFWDQ1                    BOOST_MOVE_MFWDQ(0)\n#define BOOST_MOVE_MFWDQ2 BOOST_MOVE_MFWDQ1, BOOST_MOVE_MFWDQ(1)\n#define BOOST_MOVE_MFWDQ3 BOOST_MOVE_MFWDQ2, BOOST_MOVE_MFWDQ(2)\n#define BOOST_MOVE_MFWDQ4 BOOST_MOVE_MFWDQ3, BOOST_MOVE_MFWDQ(3)\n#define BOOST_MOVE_MFWDQ5 BOOST_MOVE_MFWDQ4, BOOST_MOVE_MFWDQ(4)\n#define BOOST_MOVE_MFWDQ6 BOOST_MOVE_MFWDQ5, BOOST_MOVE_MFWDQ(5)\n#define BOOST_MOVE_MFWDQ7 BOOST_MOVE_MFWDQ6, BOOST_MOVE_MFWDQ(6)\n#define BOOST_MOVE_MFWDQ8 BOOST_MOVE_MFWDQ7, BOOST_MOVE_MFWDQ(7)\n#define BOOST_MOVE_MFWDQ9 BOOST_MOVE_MFWDQ8, BOOST_MOVE_MFWDQ(8)\n\n//BOOST_MOVE_MINCN\n#define BOOST_MOVE_MINC0\n#define BOOST_MOVE_MINC1                   BOOST_MOVE_MINC(0)\n#define BOOST_MOVE_MINC2 BOOST_MOVE_MINC1, BOOST_MOVE_MINC(1)\n#define BOOST_MOVE_MINC3 BOOST_MOVE_MINC2, BOOST_MOVE_MINC(2)\n#define BOOST_MOVE_MINC4 BOOST_MOVE_MINC3, BOOST_MOVE_MINC(3)\n#define BOOST_MOVE_MINC5 BOOST_MOVE_MINC4, BOOST_MOVE_MINC(4)\n#define BOOST_MOVE_MINC6 BOOST_MOVE_MINC5, BOOST_MOVE_MINC(5)\n#define BOOST_MOVE_MINC7 BOOST_MOVE_MINC6, BOOST_MOVE_MINC(6)\n#define BOOST_MOVE_MINC8 BOOST_MOVE_MINC7, BOOST_MOVE_MINC(7)\n#define BOOST_MOVE_MINC9 BOOST_MOVE_MINC8, BOOST_MOVE_MINC(8)\n\n//BOOST_MOVE_MINCQN\n#define BOOST_MOVE_MINCQ0\n#define BOOST_MOVE_MINCQ1                    BOOST_MOVE_MINCQ(0)\n#define BOOST_MOVE_MINCQ2 BOOST_MOVE_MINCQ1, BOOST_MOVE_MINCQ(1)\n#define BOOST_MOVE_MINCQ3 BOOST_MOVE_MINCQ2, BOOST_MOVE_MINCQ(2)\n#define BOOST_MOVE_MINCQ4 BOOST_MOVE_MINCQ3, BOOST_MOVE_MINCQ(3)\n#define BOOST_MOVE_MINCQ5 BOOST_MOVE_MINCQ4, BOOST_MOVE_MINCQ(4)\n#define BOOST_MOVE_MINCQ6 BOOST_MOVE_MINCQ5, BOOST_MOVE_MINCQ(5)\n#define BOOST_MOVE_MINCQ7 BOOST_MOVE_MINCQ6, BOOST_MOVE_MINCQ(6)\n#define BOOST_MOVE_MINCQ8 BOOST_MOVE_MINCQ7, BOOST_MOVE_MINCQ(7)\n#define BOOST_MOVE_MINCQ9 BOOST_MOVE_MINCQ8, BOOST_MOVE_MINCQ(8)\n\n//BOOST_MOVE_MITFWDN\n#define BOOST_MOVE_MITFWD0\n#define BOOST_MOVE_MITFWD1                     BOOST_MOVE_MITFWD(0)\n#define BOOST_MOVE_MITFWD2 BOOST_MOVE_MITFWD1, BOOST_MOVE_MITFWD(1)\n#define BOOST_MOVE_MITFWD3 BOOST_MOVE_MITFWD2, BOOST_MOVE_MITFWD(2)\n#define BOOST_MOVE_MITFWD4 BOOST_MOVE_MITFWD3, BOOST_MOVE_MITFWD(3)\n#define BOOST_MOVE_MITFWD5 BOOST_MOVE_MITFWD4, BOOST_MOVE_MITFWD(4)\n#define BOOST_MOVE_MITFWD6 BOOST_MOVE_MITFWD5, BOOST_MOVE_MITFWD(5)\n#define BOOST_MOVE_MITFWD7 BOOST_MOVE_MITFWD6, BOOST_MOVE_MITFWD(6)\n#define BOOST_MOVE_MITFWD8 BOOST_MOVE_MITFWD7, BOOST_MOVE_MITFWD(7)\n#define BOOST_MOVE_MITFWD9 BOOST_MOVE_MITFWD8, BOOST_MOVE_MITFWD(8)\n\n//BOOST_MOVE_MITFWDQN\n#define BOOST_MOVE_MITFWDQ0\n#define BOOST_MOVE_MITFWDQ1                      BOOST_MOVE_MITFWDQ(0)\n#define BOOST_MOVE_MITFWDQ2 BOOST_MOVE_MITFWDQ1, BOOST_MOVE_MITFWDQ(1)\n#define BOOST_MOVE_MITFWDQ3 BOOST_MOVE_MITFWDQ2, BOOST_MOVE_MITFWDQ(2)\n#define BOOST_MOVE_MITFWDQ4 BOOST_MOVE_MITFWDQ3, BOOST_MOVE_MITFWDQ(3)\n#define BOOST_MOVE_MITFWDQ5 BOOST_MOVE_MITFWDQ4, BOOST_MOVE_MITFWDQ(4)\n#define BOOST_MOVE_MITFWDQ6 BOOST_MOVE_MITFWDQ5, BOOST_MOVE_MITFWDQ(5)\n#define BOOST_MOVE_MITFWDQ7 BOOST_MOVE_MITFWDQ6, BOOST_MOVE_MITFWDQ(6)\n#define BOOST_MOVE_MITFWDQ8 BOOST_MOVE_MITFWDQ7, BOOST_MOVE_MITFWDQ(7)\n#define BOOST_MOVE_MITFWDQ9 BOOST_MOVE_MITFWDQ8, BOOST_MOVE_MITFWDQ(8)\n\n//BOOST_MOVE_FWD_INITN\n#define BOOST_MOVE_FWD_INIT0\n#define BOOST_MOVE_FWD_INIT1                       m_p0(::boost::forward<P0>(p0))\n#define BOOST_MOVE_FWD_INIT2 BOOST_MOVE_FWD_INIT1, m_p1(::boost::forward<P1>(p1))\n#define BOOST_MOVE_FWD_INIT3 BOOST_MOVE_FWD_INIT2, m_p2(::boost::forward<P2>(p2))\n#define BOOST_MOVE_FWD_INIT4 BOOST_MOVE_FWD_INIT3, m_p3(::boost::forward<P3>(p3))\n#define BOOST_MOVE_FWD_INIT5 BOOST_MOVE_FWD_INIT4, m_p4(::boost::forward<P4>(p4))\n#define BOOST_MOVE_FWD_INIT6 BOOST_MOVE_FWD_INIT5, m_p5(::boost::forward<P5>(p5))\n#define BOOST_MOVE_FWD_INIT7 BOOST_MOVE_FWD_INIT6, m_p6(::boost::forward<P6>(p6))\n#define BOOST_MOVE_FWD_INIT8 BOOST_MOVE_FWD_INIT7, m_p7(::boost::forward<P7>(p7))\n#define BOOST_MOVE_FWD_INIT9 BOOST_MOVE_FWD_INIT8, m_p8(::boost::forward<P8>(p8))\n\n//BOOST_MOVE_FWD_INITQN\n#define BOOST_MOVE_FWD_INITQ0\n#define BOOST_MOVE_FWD_INITQ1                        m_q0(::boost::forward<Q0>(q0))\n#define BOOST_MOVE_FWD_INITQ2 BOOST_MOVE_FWD_INITQ1, m_q1(::boost::forward<Q1>(q1))\n#define BOOST_MOVE_FWD_INITQ3 BOOST_MOVE_FWD_INITQ2, m_q2(::boost::forward<Q2>(q2))\n#define BOOST_MOVE_FWD_INITQ4 BOOST_MOVE_FWD_INITQ3, m_q3(::boost::forward<Q3>(q3))\n#define BOOST_MOVE_FWD_INITQ5 BOOST_MOVE_FWD_INITQ4, m_q4(::boost::forward<Q4>(q4))\n#define BOOST_MOVE_FWD_INITQ6 BOOST_MOVE_FWD_INITQ5, m_q5(::boost::forward<Q5>(q5))\n#define BOOST_MOVE_FWD_INITQ7 BOOST_MOVE_FWD_INITQ6, m_q6(::boost::forward<Q6>(q6))\n#define BOOST_MOVE_FWD_INITQ8 BOOST_MOVE_FWD_INITQ7, m_q7(::boost::forward<Q7>(q7))\n#define BOOST_MOVE_FWD_INITQ9 BOOST_MOVE_FWD_INITQ8, m_q8(::boost::forward<Q8>(q8))\n\n//BOOST_MOVE_VAL_INITN\n#define BOOST_MOVE_VAL_INIT0\n#define BOOST_MOVE_VAL_INIT1                       m_p0(p0)\n#define BOOST_MOVE_VAL_INIT2 BOOST_MOVE_VAL_INIT1, m_p1(p1)\n#define BOOST_MOVE_VAL_INIT3 BOOST_MOVE_VAL_INIT2, m_p2(p2)\n#define BOOST_MOVE_VAL_INIT4 BOOST_MOVE_VAL_INIT3, m_p3(p3)\n#define BOOST_MOVE_VAL_INIT5 BOOST_MOVE_VAL_INIT4, m_p4(p4)\n#define BOOST_MOVE_VAL_INIT6 BOOST_MOVE_VAL_INIT5, m_p5(p5)\n#define BOOST_MOVE_VAL_INIT7 BOOST_MOVE_VAL_INIT6, m_p6(p6)\n#define BOOST_MOVE_VAL_INIT8 BOOST_MOVE_VAL_INIT7, m_p7(p7)\n#define BOOST_MOVE_VAL_INIT9 BOOST_MOVE_VAL_INIT8, m_p8(p8)\n\n//BOOST_MOVE_VAL_INITQN\n#define BOOST_MOVE_VAL_INITQ0\n#define BOOST_MOVE_VAL_INITQ1                        m_q0(q0)\n#define BOOST_MOVE_VAL_INITQ2 BOOST_MOVE_VAL_INITQ1, m_q1(q1)\n#define BOOST_MOVE_VAL_INITQ3 BOOST_MOVE_VAL_INITQ2, m_q2(q2)\n#define BOOST_MOVE_VAL_INITQ4 BOOST_MOVE_VAL_INITQ3, m_q3(q3)\n#define BOOST_MOVE_VAL_INITQ5 BOOST_MOVE_VAL_INITQ4, m_q4(q4)\n#define BOOST_MOVE_VAL_INITQ6 BOOST_MOVE_VAL_INITQ5, m_q5(q5)\n#define BOOST_MOVE_VAL_INITQ7 BOOST_MOVE_VAL_INITQ6, m_q6(q6)\n#define BOOST_MOVE_VAL_INITQ8 BOOST_MOVE_VAL_INITQ7, m_q7(q7)\n#define BOOST_MOVE_VAL_INITQ9 BOOST_MOVE_VAL_INITQ8, m_q8(q8)\n\n//BOOST_MOVE_UREFN\n#define BOOST_MOVE_UREF0\n#define BOOST_MOVE_UREF1                   BOOST_FWD_REF(P0) p0\n#define BOOST_MOVE_UREF2 BOOST_MOVE_UREF1, BOOST_FWD_REF(P1) p1\n#define BOOST_MOVE_UREF3 BOOST_MOVE_UREF2, BOOST_FWD_REF(P2) p2\n#define BOOST_MOVE_UREF4 BOOST_MOVE_UREF3, BOOST_FWD_REF(P3) p3\n#define BOOST_MOVE_UREF5 BOOST_MOVE_UREF4, BOOST_FWD_REF(P4) p4\n#define BOOST_MOVE_UREF6 BOOST_MOVE_UREF5, BOOST_FWD_REF(P5) p5\n#define BOOST_MOVE_UREF7 BOOST_MOVE_UREF6, BOOST_FWD_REF(P6) p6\n#define BOOST_MOVE_UREF8 BOOST_MOVE_UREF7, BOOST_FWD_REF(P7) p7\n#define BOOST_MOVE_UREF9 BOOST_MOVE_UREF8, BOOST_FWD_REF(P8) p8\n\n//BOOST_MOVE_UREFQN\n#define BOOST_MOVE_UREFQ0\n#define BOOST_MOVE_UREFQ1                    BOOST_FWD_REF(Q0) q0\n#define BOOST_MOVE_UREFQ2 BOOST_MOVE_UREFQ1, BOOST_FWD_REF(Q1) q1\n#define BOOST_MOVE_UREFQ3 BOOST_MOVE_UREFQ2, BOOST_FWD_REF(Q2) q2\n#define BOOST_MOVE_UREFQ4 BOOST_MOVE_UREFQ3, BOOST_FWD_REF(Q3) q3\n#define BOOST_MOVE_UREFQ5 BOOST_MOVE_UREFQ4, BOOST_FWD_REF(Q4) q4\n#define BOOST_MOVE_UREFQ6 BOOST_MOVE_UREFQ5, BOOST_FWD_REF(Q5) q5\n#define BOOST_MOVE_UREFQ7 BOOST_MOVE_UREFQ6, BOOST_FWD_REF(Q6) q6\n#define BOOST_MOVE_UREFQ8 BOOST_MOVE_UREFQ7, BOOST_FWD_REF(Q7) q7\n#define BOOST_MOVE_UREFQ9 BOOST_MOVE_UREFQ8, BOOST_FWD_REF(Q8) q8\n\n//BOOST_MOVE_VALN\n#define BOOST_MOVE_VAL0\n#define BOOST_MOVE_VAL1                  BOOST_FWD_REF(P0) p0\n#define BOOST_MOVE_VAL2 BOOST_MOVE_VAL1, BOOST_FWD_REF(P1) p1\n#define BOOST_MOVE_VAL3 BOOST_MOVE_VAL2, BOOST_FWD_REF(P2) p2\n#define BOOST_MOVE_VAL4 BOOST_MOVE_VAL3, BOOST_FWD_REF(P3) p3\n#define BOOST_MOVE_VAL5 BOOST_MOVE_VAL4, BOOST_FWD_REF(P4) p4\n#define BOOST_MOVE_VAL6 BOOST_MOVE_VAL5, BOOST_FWD_REF(P5) p5\n#define BOOST_MOVE_VAL7 BOOST_MOVE_VAL6, BOOST_FWD_REF(P6) p6\n#define BOOST_MOVE_VAL8 BOOST_MOVE_VAL7, BOOST_FWD_REF(P7) p7\n#define BOOST_MOVE_VAL9 BOOST_MOVE_VAL8, BOOST_FWD_REF(P8) p8\n\n//BOOST_MOVE_VALQN\n#define BOOST_MOVE_VALQ0\n#define BOOST_MOVE_VALQ1                   BOOST_FWD_REF(Q0) q0\n#define BOOST_MOVE_VALQ2 BOOST_MOVE_VALQ1, BOOST_FWD_REF(Q1) q1\n#define BOOST_MOVE_VALQ3 BOOST_MOVE_VALQ2, BOOST_FWD_REF(Q2) q2\n#define BOOST_MOVE_VALQ4 BOOST_MOVE_VALQ3, BOOST_FWD_REF(Q3) q3\n#define BOOST_MOVE_VALQ5 BOOST_MOVE_VALQ4, BOOST_FWD_REF(Q4) q4\n#define BOOST_MOVE_VALQ6 BOOST_MOVE_VALQ5, BOOST_FWD_REF(Q5) q5\n#define BOOST_MOVE_VALQ7 BOOST_MOVE_VALQ6, BOOST_FWD_REF(Q6) q6\n#define BOOST_MOVE_VALQ8 BOOST_MOVE_VALQ7, BOOST_FWD_REF(Q7) q7\n#define BOOST_MOVE_VALQ9 BOOST_MOVE_VALQ8, BOOST_FWD_REF(Q8) q8\n\n\n#define BOOST_MOVE_UNVOIDCREF(T) const typename boost::move_detail::unvoid<T>::type&\n//BOOST_MOVE_CREFN\n#define BOOST_MOVE_CREF0\n#define BOOST_MOVE_CREF1                   BOOST_MOVE_UNVOIDCREF(P0) p0\n#define BOOST_MOVE_CREF2 BOOST_MOVE_CREF1, BOOST_MOVE_UNVOIDCREF(P1) p1\n#define BOOST_MOVE_CREF3 BOOST_MOVE_CREF2, BOOST_MOVE_UNVOIDCREF(P2) p2\n#define BOOST_MOVE_CREF4 BOOST_MOVE_CREF3, BOOST_MOVE_UNVOIDCREF(P3) p3\n#define BOOST_MOVE_CREF5 BOOST_MOVE_CREF4, BOOST_MOVE_UNVOIDCREF(P4) p4\n#define BOOST_MOVE_CREF6 BOOST_MOVE_CREF5, BOOST_MOVE_UNVOIDCREF(P5) p5\n#define BOOST_MOVE_CREF7 BOOST_MOVE_CREF6, BOOST_MOVE_UNVOIDCREF(P6) p6\n#define BOOST_MOVE_CREF8 BOOST_MOVE_CREF7, BOOST_MOVE_UNVOIDCREF(P7) p7\n#define BOOST_MOVE_CREF9 BOOST_MOVE_CREF8, BOOST_MOVE_UNVOIDCREF(P8) p8\n\n//BOOST_MOVE_CREFQN\n#define BOOST_MOVE_CREFQ0\n#define BOOST_MOVE_CREFQ1                    BOOST_MOVE_UNVOIDCREF(Q0) q0\n#define BOOST_MOVE_CREFQ2 BOOST_MOVE_CREFQ1, BOOST_MOVE_UNVOIDCREF(Q1) q1\n#define BOOST_MOVE_CREFQ3 BOOST_MOVE_CREFQ2, BOOST_MOVE_UNVOIDCREF(Q2) q2\n#define BOOST_MOVE_CREFQ4 BOOST_MOVE_CREFQ3, BOOST_MOVE_UNVOIDCREF(Q3) q3\n#define BOOST_MOVE_CREFQ5 BOOST_MOVE_CREFQ4, BOOST_MOVE_UNVOIDCREF(Q4) q4\n#define BOOST_MOVE_CREFQ6 BOOST_MOVE_CREFQ5, BOOST_MOVE_UNVOIDCREF(Q5) q5\n#define BOOST_MOVE_CREFQ7 BOOST_MOVE_CREFQ6, BOOST_MOVE_UNVOIDCREF(Q6) q6\n#define BOOST_MOVE_CREFQ8 BOOST_MOVE_CREFQ7, BOOST_MOVE_UNVOIDCREF(Q7) q7\n#define BOOST_MOVE_CREFQ9 BOOST_MOVE_CREFQ8, BOOST_MOVE_UNVOIDCREF(Q8) q8\n\n//BOOST_MOVE_CLASSN\n#define BOOST_MOVE_CLASS0\n#define BOOST_MOVE_CLASS1                    class P0\n#define BOOST_MOVE_CLASS2 BOOST_MOVE_CLASS1, class P1\n#define BOOST_MOVE_CLASS3 BOOST_MOVE_CLASS2, class P2\n#define BOOST_MOVE_CLASS4 BOOST_MOVE_CLASS3, class P3\n#define BOOST_MOVE_CLASS5 BOOST_MOVE_CLASS4, class P4\n#define BOOST_MOVE_CLASS6 BOOST_MOVE_CLASS5, class P5\n#define BOOST_MOVE_CLASS7 BOOST_MOVE_CLASS6, class P6\n#define BOOST_MOVE_CLASS8 BOOST_MOVE_CLASS7, class P7\n#define BOOST_MOVE_CLASS9 BOOST_MOVE_CLASS8, class P8\n\n//BOOST_MOVE_CLASSQN\n#define BOOST_MOVE_CLASSQ0\n#define BOOST_MOVE_CLASSQ1                     class Q0\n#define BOOST_MOVE_CLASSQ2 BOOST_MOVE_CLASSQ1, class Q1\n#define BOOST_MOVE_CLASSQ3 BOOST_MOVE_CLASSQ2, class Q2\n#define BOOST_MOVE_CLASSQ4 BOOST_MOVE_CLASSQ3, class Q3\n#define BOOST_MOVE_CLASSQ5 BOOST_MOVE_CLASSQ4, class Q4\n#define BOOST_MOVE_CLASSQ6 BOOST_MOVE_CLASSQ5, class Q5\n#define BOOST_MOVE_CLASSQ7 BOOST_MOVE_CLASSQ6, class Q6\n#define BOOST_MOVE_CLASSQ8 BOOST_MOVE_CLASSQ7, class Q7\n#define BOOST_MOVE_CLASSQ9 BOOST_MOVE_CLASSQ8, class Q8\n\n//BOOST_MOVE_CLASSDFLTN\n#define BOOST_MOVE_CLASSDFLT0\n#define BOOST_MOVE_CLASSDFLT1                        class P0 = void\n#define BOOST_MOVE_CLASSDFLT2 BOOST_MOVE_CLASSDFLT1, class P1 = void\n#define BOOST_MOVE_CLASSDFLT3 BOOST_MOVE_CLASSDFLT2, class P2 = void\n#define BOOST_MOVE_CLASSDFLT4 BOOST_MOVE_CLASSDFLT3, class P3 = void\n#define BOOST_MOVE_CLASSDFLT5 BOOST_MOVE_CLASSDFLT4, class P4 = void\n#define BOOST_MOVE_CLASSDFLT6 BOOST_MOVE_CLASSDFLT5, class P5 = void\n#define BOOST_MOVE_CLASSDFLT7 BOOST_MOVE_CLASSDFLT6, class P6 = void\n#define BOOST_MOVE_CLASSDFLT8 BOOST_MOVE_CLASSDFLT7, class P7 = void\n#define BOOST_MOVE_CLASSDFLT9 BOOST_MOVE_CLASSDFLT8, class P8 = void\n\n//BOOST_MOVE_CLASSDFLTQN\n#define BOOST_MOVE_CLASSDFLTQ0\n#define BOOST_MOVE_CLASSDFLTQ1                         class Q0 = void\n#define BOOST_MOVE_CLASSDFLTQ2 BOOST_MOVE_CLASSDFLTQ1, class Q1 = void\n#define BOOST_MOVE_CLASSDFLTQ3 BOOST_MOVE_CLASSDFLTQ2, class Q2 = void\n#define BOOST_MOVE_CLASSDFLTQ4 BOOST_MOVE_CLASSDFLTQ3, class Q3 = void\n#define BOOST_MOVE_CLASSDFLTQ5 BOOST_MOVE_CLASSDFLTQ4, class Q4 = void\n#define BOOST_MOVE_CLASSDFLTQ6 BOOST_MOVE_CLASSDFLTQ5, class Q5 = void\n#define BOOST_MOVE_CLASSDFLTQ7 BOOST_MOVE_CLASSDFLTQ6, class Q6 = void\n#define BOOST_MOVE_CLASSDFLTQ8 BOOST_MOVE_CLASSDFLTQ7, class Q7 = void\n#define BOOST_MOVE_CLASSDFLTQ9 BOOST_MOVE_CLASSDFLTQ8, class Q8 = void\n\n//BOOST_MOVE_TARGN\n#define BOOST_MOVE_TARG0\n#define BOOST_MOVE_TARG1                   P0\n#define BOOST_MOVE_TARG2 BOOST_MOVE_TARG1, P1\n#define BOOST_MOVE_TARG3 BOOST_MOVE_TARG2, P2\n#define BOOST_MOVE_TARG4 BOOST_MOVE_TARG3, P3\n#define BOOST_MOVE_TARG5 BOOST_MOVE_TARG4, P4\n#define BOOST_MOVE_TARG6 BOOST_MOVE_TARG5, P5\n#define BOOST_MOVE_TARG7 BOOST_MOVE_TARG6, P6\n#define BOOST_MOVE_TARG8 BOOST_MOVE_TARG7, P7\n#define BOOST_MOVE_TARG9 BOOST_MOVE_TARG8, P8\n\n//BOOST_MOVE_TARGQN\n#define BOOST_MOVE_TARGQ0\n#define BOOST_MOVE_TARGQ1                    Q0\n#define BOOST_MOVE_TARGQ2 BOOST_MOVE_TARGQ1, Q1\n#define BOOST_MOVE_TARGQ3 BOOST_MOVE_TARGQ2, Q2\n#define BOOST_MOVE_TARGQ4 BOOST_MOVE_TARGQ3, Q3\n#define BOOST_MOVE_TARGQ5 BOOST_MOVE_TARGQ4, Q4\n#define BOOST_MOVE_TARGQ6 BOOST_MOVE_TARGQ5, Q5\n#define BOOST_MOVE_TARGQ7 BOOST_MOVE_TARGQ6, Q6\n#define BOOST_MOVE_TARGQ8 BOOST_MOVE_TARGQ7, Q7\n#define BOOST_MOVE_TARGQ9 BOOST_MOVE_TARGQ8, Q8\n\n//BOOST_MOVE_FWD_TN\n#define BOOST_MOVE_FWD_T0\n#define BOOST_MOVE_FWD_T1                    typename ::boost::move_detail::forward_type<P0>::type\n#define BOOST_MOVE_FWD_T2 BOOST_MOVE_FWD_T1, typename ::boost::move_detail::forward_type<P1>::type\n#define BOOST_MOVE_FWD_T3 BOOST_MOVE_FWD_T2, typename ::boost::move_detail::forward_type<P2>::type\n#define BOOST_MOVE_FWD_T4 BOOST_MOVE_FWD_T3, typename ::boost::move_detail::forward_type<P3>::type\n#define BOOST_MOVE_FWD_T5 BOOST_MOVE_FWD_T4, typename ::boost::move_detail::forward_type<P4>::type\n#define BOOST_MOVE_FWD_T6 BOOST_MOVE_FWD_T5, typename ::boost::move_detail::forward_type<P5>::type\n#define BOOST_MOVE_FWD_T7 BOOST_MOVE_FWD_T6, typename ::boost::move_detail::forward_type<P6>::type\n#define BOOST_MOVE_FWD_T8 BOOST_MOVE_FWD_T7, typename ::boost::move_detail::forward_type<P7>::type\n#define BOOST_MOVE_FWD_T9 BOOST_MOVE_FWD_T8, typename ::boost::move_detail::forward_type<P8>::type\n\n//BOOST_MOVE_FWD_TQN\n#define BOOST_MOVE_FWD_TQ0\n#define BOOST_MOVE_FWD_TQ1                     typename ::boost::move_detail::forward_type<Q0>::type\n#define BOOST_MOVE_FWD_TQ2 BOOST_MOVE_FWD_TQ1, typename ::boost::move_detail::forward_type<Q1>::type\n#define BOOST_MOVE_FWD_TQ3 BOOST_MOVE_FWD_TQ2, typename ::boost::move_detail::forward_type<Q2>::type\n#define BOOST_MOVE_FWD_TQ4 BOOST_MOVE_FWD_TQ3, typename ::boost::move_detail::forward_type<Q3>::type\n#define BOOST_MOVE_FWD_TQ5 BOOST_MOVE_FWD_TQ4, typename ::boost::move_detail::forward_type<Q4>::type\n#define BOOST_MOVE_FWD_TQ6 BOOST_MOVE_FWD_TQ5, typename ::boost::move_detail::forward_type<Q5>::type\n#define BOOST_MOVE_FWD_TQ7 BOOST_MOVE_FWD_TQ6, typename ::boost::move_detail::forward_type<Q6>::type\n#define BOOST_MOVE_FWD_TQ8 BOOST_MOVE_FWD_TQ7, typename ::boost::move_detail::forward_type<Q7>::type\n#define BOOST_MOVE_FWD_TQ9 BOOST_MOVE_FWD_TQ8, typename ::boost::move_detail::forward_type<Q8>::type\n\n//BOOST_MOVE_MREFX\n#define BOOST_MOVE_MREF0\n#define BOOST_MOVE_MREF1                  BOOST_MOVE_MREF(P0) m_p0;\n#define BOOST_MOVE_MREF2 BOOST_MOVE_MREF1 BOOST_MOVE_MREF(P1) m_p1;\n#define BOOST_MOVE_MREF3 BOOST_MOVE_MREF2 BOOST_MOVE_MREF(P2) m_p2;\n#define BOOST_MOVE_MREF4 BOOST_MOVE_MREF3 BOOST_MOVE_MREF(P3) m_p3;\n#define BOOST_MOVE_MREF5 BOOST_MOVE_MREF4 BOOST_MOVE_MREF(P4) m_p4;\n#define BOOST_MOVE_MREF6 BOOST_MOVE_MREF5 BOOST_MOVE_MREF(P5) m_p5;\n#define BOOST_MOVE_MREF7 BOOST_MOVE_MREF6 BOOST_MOVE_MREF(P6) m_p6;\n#define BOOST_MOVE_MREF8 BOOST_MOVE_MREF7 BOOST_MOVE_MREF(P7) m_p7;\n#define BOOST_MOVE_MREF9 BOOST_MOVE_MREF8 BOOST_MOVE_MREF(P8) m_p8;\n\n//BOOST_MOVE_MREFQX\n#define BOOST_MOVE_MREFQ0\n#define BOOST_MOVE_MREFQ1                   BOOST_MOVE_MREFQ(Q0) m_q0;\n#define BOOST_MOVE_MREFQ2 BOOST_MOVE_MREFQ1 BOOST_MOVE_MREFQ(Q1) m_q1;\n#define BOOST_MOVE_MREFQ3 BOOST_MOVE_MREFQ2 BOOST_MOVE_MREFQ(Q2) m_q2;\n#define BOOST_MOVE_MREFQ4 BOOST_MOVE_MREFQ3 BOOST_MOVE_MREFQ(Q3) m_q3;\n#define BOOST_MOVE_MREFQ5 BOOST_MOVE_MREFQ4 BOOST_MOVE_MREFQ(Q4) m_q4;\n#define BOOST_MOVE_MREFQ6 BOOST_MOVE_MREFQ5 BOOST_MOVE_MREFQ(Q5) m_q5;\n#define BOOST_MOVE_MREFQ7 BOOST_MOVE_MREFQ6 BOOST_MOVE_MREFQ(Q6) m_q6;\n#define BOOST_MOVE_MREFQ8 BOOST_MOVE_MREFQ7 BOOST_MOVE_MREFQ(Q7) m_q7;\n#define BOOST_MOVE_MREFQ9 BOOST_MOVE_MREFQ8 BOOST_MOVE_MREFQ(Q8) m_q8;\n\n//BOOST_MOVE_MEMBX\n#define BOOST_MOVE_MEMB0\n#define BOOST_MOVE_MEMB1                  P0 m_p0;\n#define BOOST_MOVE_MEMB2 BOOST_MOVE_MEMB1 P1 m_p1;\n#define BOOST_MOVE_MEMB3 BOOST_MOVE_MEMB2 P2 m_p2;\n#define BOOST_MOVE_MEMB4 BOOST_MOVE_MEMB3 P3 m_p3;\n#define BOOST_MOVE_MEMB5 BOOST_MOVE_MEMB4 P4 m_p4;\n#define BOOST_MOVE_MEMB6 BOOST_MOVE_MEMB5 P5 m_p5;\n#define BOOST_MOVE_MEMB7 BOOST_MOVE_MEMB6 P6 m_p6;\n#define BOOST_MOVE_MEMB8 BOOST_MOVE_MEMB7 P7 m_p7;\n#define BOOST_MOVE_MEMB9 BOOST_MOVE_MEMB8 P8 m_p8;\n\n//BOOST_MOVE_MEMBQX\n#define BOOST_MOVE_MEMBQ0\n#define BOOST_MOVE_MEMBQ1                   Q0 m_q0;\n#define BOOST_MOVE_MEMBQ2 BOOST_MOVE_MEMBQ1 Q1 m_q1;\n#define BOOST_MOVE_MEMBQ3 BOOST_MOVE_MEMBQ2 Q2 m_q2;\n#define BOOST_MOVE_MEMBQ4 BOOST_MOVE_MEMBQ3 Q3 m_q3;\n#define BOOST_MOVE_MEMBQ5 BOOST_MOVE_MEMBQ4 Q4 m_q4;\n#define BOOST_MOVE_MEMBQ6 BOOST_MOVE_MEMBQ5 Q5 m_q5;\n#define BOOST_MOVE_MEMBQ7 BOOST_MOVE_MEMBQ6 Q6 m_q6;\n#define BOOST_MOVE_MEMBQ8 BOOST_MOVE_MEMBQ7 Q7 m_q7;\n#define BOOST_MOVE_MEMBQ9 BOOST_MOVE_MEMBQ8 Q8 m_q8;\n\n//BOOST_MOVE_TMPL_LTN\n#define BOOST_MOVE_TMPL_LT0\n#define BOOST_MOVE_TMPL_LT1 template<\n#define BOOST_MOVE_TMPL_LT2 BOOST_MOVE_TMPL_LT1\n#define BOOST_MOVE_TMPL_LT3 BOOST_MOVE_TMPL_LT1\n#define BOOST_MOVE_TMPL_LT4 BOOST_MOVE_TMPL_LT1\n#define BOOST_MOVE_TMPL_LT5 BOOST_MOVE_TMPL_LT1\n#define BOOST_MOVE_TMPL_LT6 BOOST_MOVE_TMPL_LT1\n#define BOOST_MOVE_TMPL_LT7 BOOST_MOVE_TMPL_LT1\n#define BOOST_MOVE_TMPL_LT8 BOOST_MOVE_TMPL_LT1\n#define BOOST_MOVE_TMPL_LT9 BOOST_MOVE_TMPL_LT1\n\n//BOOST_MOVE_LTN\n#define BOOST_MOVE_LT0\n#define BOOST_MOVE_LT1 <\n#define BOOST_MOVE_LT2 BOOST_MOVE_LT1\n#define BOOST_MOVE_LT3 BOOST_MOVE_LT1\n#define BOOST_MOVE_LT4 BOOST_MOVE_LT1\n#define BOOST_MOVE_LT5 BOOST_MOVE_LT1\n#define BOOST_MOVE_LT6 BOOST_MOVE_LT1\n#define BOOST_MOVE_LT7 BOOST_MOVE_LT1\n#define BOOST_MOVE_LT8 BOOST_MOVE_LT1\n#define BOOST_MOVE_LT9 BOOST_MOVE_LT1\n\n//BOOST_MOVE_GTN\n#define BOOST_MOVE_GT0\n#define BOOST_MOVE_GT1 >\n#define BOOST_MOVE_GT2 BOOST_MOVE_GT1\n#define BOOST_MOVE_GT3 BOOST_MOVE_GT1\n#define BOOST_MOVE_GT4 BOOST_MOVE_GT1\n#define BOOST_MOVE_GT5 BOOST_MOVE_GT1\n#define BOOST_MOVE_GT6 BOOST_MOVE_GT1\n#define BOOST_MOVE_GT7 BOOST_MOVE_GT1\n#define BOOST_MOVE_GT8 BOOST_MOVE_GT1\n#define BOOST_MOVE_GT9 BOOST_MOVE_GT1\n\n//BOOST_MOVE_LPN\n#define BOOST_MOVE_LP0\n#define BOOST_MOVE_LP1 (\n#define BOOST_MOVE_LP2 BOOST_MOVE_LP1\n#define BOOST_MOVE_LP3 BOOST_MOVE_LP1\n#define BOOST_MOVE_LP4 BOOST_MOVE_LP1\n#define BOOST_MOVE_LP5 BOOST_MOVE_LP1\n#define BOOST_MOVE_LP6 BOOST_MOVE_LP1\n#define BOOST_MOVE_LP7 BOOST_MOVE_LP1\n#define BOOST_MOVE_LP8 BOOST_MOVE_LP1\n#define BOOST_MOVE_LP9 BOOST_MOVE_LP1\n\n//BOOST_MOVE_RPN\n#define BOOST_MOVE_RP0\n#define BOOST_MOVE_RP1 )\n#define BOOST_MOVE_RP2 BOOST_MOVE_RP1\n#define BOOST_MOVE_RP3 BOOST_MOVE_RP1\n#define BOOST_MOVE_RP4 BOOST_MOVE_RP1\n#define BOOST_MOVE_RP5 BOOST_MOVE_RP1\n#define BOOST_MOVE_RP6 BOOST_MOVE_RP1\n#define BOOST_MOVE_RP7 BOOST_MOVE_RP1\n#define BOOST_MOVE_RP8 BOOST_MOVE_RP1\n#define BOOST_MOVE_RP9 BOOST_MOVE_RP1\n\n//BOOST_MOVE_IN\n#define BOOST_MOVE_I0\n#define BOOST_MOVE_I1 ,\n#define BOOST_MOVE_I2 BOOST_MOVE_I1\n#define BOOST_MOVE_I3 BOOST_MOVE_I1\n#define BOOST_MOVE_I4 BOOST_MOVE_I1\n#define BOOST_MOVE_I5 BOOST_MOVE_I1\n#define BOOST_MOVE_I6 BOOST_MOVE_I1\n#define BOOST_MOVE_I7 BOOST_MOVE_I1\n#define BOOST_MOVE_I8 BOOST_MOVE_I1\n#define BOOST_MOVE_I9 BOOST_MOVE_I1\n\n//BOOST_MOVE_COLON\n#define BOOST_MOVE_COLON0\n#define BOOST_MOVE_COLON1 :\n#define BOOST_MOVE_COLON2 BOOST_MOVE_COLON1\n#define BOOST_MOVE_COLON3 BOOST_MOVE_COLON1\n#define BOOST_MOVE_COLON4 BOOST_MOVE_COLON1\n#define BOOST_MOVE_COLON5 BOOST_MOVE_COLON1\n#define BOOST_MOVE_COLON6 BOOST_MOVE_COLON1\n#define BOOST_MOVE_COLON7 BOOST_MOVE_COLON1\n#define BOOST_MOVE_COLON8 BOOST_MOVE_COLON1\n#define BOOST_MOVE_COLON9 BOOST_MOVE_COLON1\n\n//BOOST_MOVE_ITERATE_2TON\n#define BOOST_MOVE_ITERATE_2TO2(MACROFUNC)                                       MACROFUNC(2)\n#define BOOST_MOVE_ITERATE_2TO3(MACROFUNC)   BOOST_MOVE_ITERATE_2TO2(MACROFUNC)  MACROFUNC(3)\n#define BOOST_MOVE_ITERATE_2TO4(MACROFUNC)   BOOST_MOVE_ITERATE_2TO3(MACROFUNC)  MACROFUNC(4)\n#define BOOST_MOVE_ITERATE_2TO5(MACROFUNC)   BOOST_MOVE_ITERATE_2TO4(MACROFUNC)  MACROFUNC(5)\n#define BOOST_MOVE_ITERATE_2TO6(MACROFUNC)   BOOST_MOVE_ITERATE_2TO5(MACROFUNC)  MACROFUNC(6)\n#define BOOST_MOVE_ITERATE_2TO7(MACROFUNC)   BOOST_MOVE_ITERATE_2TO6(MACROFUNC)  MACROFUNC(7)\n#define BOOST_MOVE_ITERATE_2TO8(MACROFUNC)   BOOST_MOVE_ITERATE_2TO7(MACROFUNC)  MACROFUNC(8)\n#define BOOST_MOVE_ITERATE_2TO9(MACROFUNC)   BOOST_MOVE_ITERATE_2TO8(MACROFUNC)  MACROFUNC(9)\n\n//BOOST_MOVE_ITERATE_1TON\n#define BOOST_MOVE_ITERATE_1TO1(MACROFUNC)                                       MACROFUNC(1)\n#define BOOST_MOVE_ITERATE_1TO2(MACROFUNC)   BOOST_MOVE_ITERATE_1TO1(MACROFUNC)  MACROFUNC(2)\n#define BOOST_MOVE_ITERATE_1TO3(MACROFUNC)   BOOST_MOVE_ITERATE_1TO2(MACROFUNC)  MACROFUNC(3)\n#define BOOST_MOVE_ITERATE_1TO4(MACROFUNC)   BOOST_MOVE_ITERATE_1TO3(MACROFUNC)  MACROFUNC(4)\n#define BOOST_MOVE_ITERATE_1TO5(MACROFUNC)   BOOST_MOVE_ITERATE_1TO4(MACROFUNC)  MACROFUNC(5)\n#define BOOST_MOVE_ITERATE_1TO6(MACROFUNC)   BOOST_MOVE_ITERATE_1TO5(MACROFUNC)  MACROFUNC(6)\n#define BOOST_MOVE_ITERATE_1TO7(MACROFUNC)   BOOST_MOVE_ITERATE_1TO6(MACROFUNC)  MACROFUNC(7)\n#define BOOST_MOVE_ITERATE_1TO8(MACROFUNC)   BOOST_MOVE_ITERATE_1TO7(MACROFUNC)  MACROFUNC(8)\n#define BOOST_MOVE_ITERATE_1TO9(MACROFUNC)   BOOST_MOVE_ITERATE_1TO8(MACROFUNC)  MACROFUNC(9)\n\n//BOOST_MOVE_ITERATE_0TON\n#define BOOST_MOVE_ITERATE_0TO0(MACROFUNC)                                       MACROFUNC(0)\n#define BOOST_MOVE_ITERATE_0TO1(MACROFUNC)   BOOST_MOVE_ITERATE_0TO0(MACROFUNC)  MACROFUNC(1)\n#define BOOST_MOVE_ITERATE_0TO2(MACROFUNC)   BOOST_MOVE_ITERATE_0TO1(MACROFUNC)  MACROFUNC(2)\n#define BOOST_MOVE_ITERATE_0TO3(MACROFUNC)   BOOST_MOVE_ITERATE_0TO2(MACROFUNC)  MACROFUNC(3)\n#define BOOST_MOVE_ITERATE_0TO4(MACROFUNC)   BOOST_MOVE_ITERATE_0TO3(MACROFUNC)  MACROFUNC(4)\n#define BOOST_MOVE_ITERATE_0TO5(MACROFUNC)   BOOST_MOVE_ITERATE_0TO4(MACROFUNC)  MACROFUNC(5)\n#define BOOST_MOVE_ITERATE_0TO6(MACROFUNC)   BOOST_MOVE_ITERATE_0TO5(MACROFUNC)  MACROFUNC(6)\n#define BOOST_MOVE_ITERATE_0TO7(MACROFUNC)   BOOST_MOVE_ITERATE_0TO6(MACROFUNC)  MACROFUNC(7)\n#define BOOST_MOVE_ITERATE_0TO8(MACROFUNC)   BOOST_MOVE_ITERATE_0TO7(MACROFUNC)  MACROFUNC(8)\n#define BOOST_MOVE_ITERATE_0TO9(MACROFUNC)   BOOST_MOVE_ITERATE_0TO8(MACROFUNC)  MACROFUNC(9)\n\n//BOOST_MOVE_ITERATE_NTON\n#define BOOST_MOVE_ITERATE_0TO0(MACROFUNC)   MACROFUNC(0)\n#define BOOST_MOVE_ITERATE_1TO1(MACROFUNC)   MACROFUNC(1)\n#define BOOST_MOVE_ITERATE_2TO2(MACROFUNC)   MACROFUNC(2)\n#define BOOST_MOVE_ITERATE_3TO3(MACROFUNC)   MACROFUNC(3)\n#define BOOST_MOVE_ITERATE_4TO4(MACROFUNC)   MACROFUNC(4)\n#define BOOST_MOVE_ITERATE_5TO5(MACROFUNC)   MACROFUNC(5)\n#define BOOST_MOVE_ITERATE_6TO6(MACROFUNC)   MACROFUNC(6)\n#define BOOST_MOVE_ITERATE_7TO7(MACROFUNC)   MACROFUNC(7)\n#define BOOST_MOVE_ITERATE_8TO8(MACROFUNC)   MACROFUNC(8)\n#define BOOST_MOVE_ITERATE_9TO9(MACROFUNC)   MACROFUNC(9)\n\n//BOOST_MOVE_ITER2D_0TO9\n#define BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M)                                            MACROFUNC2D(M, 0)\n#define BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M) MACROFUNC2D(M, 1)\n#define BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M) MACROFUNC2D(M, 2)\n#define BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M) MACROFUNC2D(M, 3)\n#define BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M) MACROFUNC2D(M, 4)\n#define BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M) MACROFUNC2D(M, 5)\n#define BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M) MACROFUNC2D(M, 6)\n#define BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M) MACROFUNC2D(M, 7)\n#define BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M) MACROFUNC2D(M, 8)\n#define BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M) MACROFUNC2D(M, 9)\n//\n#define BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D)                                        BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 0)\n#define BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 1)\n#define BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 2)\n#define BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 3)\n#define BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 4)\n#define BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 5)\n#define BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 6)\n#define BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 7)\n#define BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 8)\n#define BOOST_MOVE_ITER2D_0TO9(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 9)\n\n//BOOST_MOVE_CAT\n#define BOOST_MOVE_CAT(a, b) BOOST_MOVE_CAT_I(a, b)\n#define BOOST_MOVE_CAT_I(a, b) a ## b\n//#    define BOOST_MOVE_CAT_I(a, b) BOOST_MOVE_CAT_II(~, a ## b)\n//#    define BOOST_MOVE_CAT_II(p, res) res\n\n#endif //#ifndef BOOST_MOVE_DETAIL_FWD_MACROS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/iterator_traits.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2014-2014.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n\n#ifndef BOOST_MOVE_DETAIL_ITERATOR_TRAITS_HPP\n#define BOOST_MOVE_DETAIL_ITERATOR_TRAITS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <cstddef>\n\n#include <boost/move/detail/std_ns_begin.hpp>\nBOOST_MOVE_STD_NS_BEG\n\nstruct input_iterator_tag;\nstruct forward_iterator_tag;\nstruct bidirectional_iterator_tag;\nstruct random_access_iterator_tag;\nstruct output_iterator_tag;\n\nBOOST_MOVE_STD_NS_END\n#include <boost/move/detail/std_ns_end.hpp>\n\nnamespace boost{  namespace movelib{\n\ntemplate<class Iterator>\nstruct iterator_traits\n{\n   typedef typename Iterator::difference_type   difference_type;\n   typedef typename Iterator::value_type        value_type;\n   typedef typename Iterator::pointer           pointer;\n   typedef typename Iterator::reference         reference;\n   typedef typename Iterator::iterator_category iterator_category;\n};\n\ntemplate<class T>\nstruct iterator_traits<T*>\n{\n   typedef std::ptrdiff_t                    difference_type;\n   typedef T                                 value_type;\n   typedef T*                                pointer;\n   typedef T&                                reference;\n   typedef std::random_access_iterator_tag   iterator_category;\n};\n\ntemplate<class T>\nstruct iterator_traits<const T*>\n{\n   typedef std::ptrdiff_t                    difference_type;\n   typedef T                                 value_type;\n   typedef const T*                          pointer;\n   typedef const T&                          reference;\n   typedef std::random_access_iterator_tag   iterator_category;\n};\n\n}} //namespace boost {  namespace movelib{\n\n#endif //#ifndef BOOST_MOVE_DETAIL_ITERATOR_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/meta_utils.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2012-2015.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n\n#ifndef BOOST_MOVE_DETAIL_META_UTILS_HPP\n#define BOOST_MOVE_DETAIL_META_UTILS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n#include <boost/move/detail/meta_utils_core.hpp>\n#include <cstddef>   //for std::size_t\n\n//Small meta-typetraits to support move\n\nnamespace boost {\n\n//Forward declare boost::rv\ntemplate <class T> class rv;\n\nnamespace move_detail {\n\n//////////////////////////////////////\n//          is_different\n//////////////////////////////////////\ntemplate<class T, class U>\nstruct is_different\n{\n   static const bool value = !is_same<T, U>::value;\n};\n\n//////////////////////////////////////\n//             apply\n//////////////////////////////////////\ntemplate<class F, class Param>\nstruct apply\n{\n   typedef typename F::template apply<Param>::type type;\n};\n\n//////////////////////////////////////\n//             bool_\n//////////////////////////////////////\n\ntemplate< bool C_ >\nstruct bool_ : integral_constant<bool, C_>\n{\n     operator bool() const { return C_; }\n   bool operator()() const { return C_; }\n};\n\ntypedef bool_<true>        true_;\ntypedef bool_<false>       false_;\n\n//////////////////////////////////////\n//              nat\n//////////////////////////////////////\nstruct nat{};\n\n//////////////////////////////////////\n//          yes_type/no_type\n//////////////////////////////////////\ntypedef char yes_type;\n\nstruct no_type\n{\n   char _[2];\n};\n\n//////////////////////////////////////\n//            natify\n//////////////////////////////////////\ntemplate <class T> struct natify{};\n\n//////////////////////////////////////\n//          remove_reference\n//////////////////////////////////////\ntemplate<class T>\nstruct remove_reference\n{\n   typedef T type;\n};\n\ntemplate<class T>\nstruct remove_reference<T&>\n{\n   typedef T type;\n};\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\ntemplate<class T>\nstruct remove_reference<T&&>\n{\n   typedef T type;\n};\n\n#else\n\ntemplate<class T>\nstruct remove_reference< rv<T> >\n{\n   typedef T type;\n};\n\ntemplate<class T>\nstruct remove_reference< rv<T> &>\n{\n   typedef T type;\n};\n\ntemplate<class T>\nstruct remove_reference< const rv<T> &>\n{\n   typedef T type;\n};\n\n#endif\n\n//////////////////////////////////////\n//             remove_pointer\n//////////////////////////////////////\n\ntemplate< class T > struct remove_pointer                    { typedef T type;   };\ntemplate< class T > struct remove_pointer<T*>                { typedef T type;   };\ntemplate< class T > struct remove_pointer<T* const>          { typedef T type;   };\ntemplate< class T > struct remove_pointer<T* volatile>       { typedef T type;   };\ntemplate< class T > struct remove_pointer<T* const volatile> { typedef T type;   };\n\n//////////////////////////////////////\n//             add_pointer\n//////////////////////////////////////\ntemplate< class T >\nstruct add_pointer\n{\n   typedef typename remove_reference<T>::type* type;\n};\n\n//////////////////////////////////////\n//             add_const\n//////////////////////////////////////\ntemplate<class T>\nstruct add_const\n{\n   typedef const T type;\n};\n\ntemplate<class T>\nstruct add_const<T&>\n{\n   typedef const T& type;\n};\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\ntemplate<class T>\nstruct add_const<T&&>\n{\n   typedef T&& type;\n};\n\n#endif\n\n//////////////////////////////////////\n//      add_lvalue_reference\n//////////////////////////////////////\ntemplate<class T>\nstruct add_lvalue_reference\n{  typedef T& type;  };\n\ntemplate<class T> struct add_lvalue_reference<T&>                 {  typedef T& type;  };\ntemplate<>        struct add_lvalue_reference<void>               {  typedef void type;   };\ntemplate<>        struct add_lvalue_reference<const void>         {  typedef const void type;  };\ntemplate<>        struct add_lvalue_reference<volatile void>      {  typedef volatile void type;   };\ntemplate<>        struct add_lvalue_reference<const volatile void>{  typedef const volatile void type;   };\n\ntemplate<class T>\nstruct add_const_lvalue_reference\n{\n   typedef typename remove_reference<T>::type         t_unreferenced;\n   typedef typename add_const<t_unreferenced>::type   t_unreferenced_const;\n   typedef typename add_lvalue_reference\n      <t_unreferenced_const>::type                    type;\n};\n\n//////////////////////////////////////\n//             is_lvalue_reference\n//////////////////////////////////////\ntemplate<class T>\nstruct is_lvalue_reference\n{\n    static const bool value = false;\n};\n\ntemplate<class T>\nstruct is_lvalue_reference<T&>\n{\n    static const bool value = true;\n};\n\n\n//////////////////////////////////////\n//             identity\n//////////////////////////////////////\ntemplate <class T>\nstruct identity\n{\n   typedef T type;\n   typedef typename add_const_lvalue_reference<T>::type reference;\n   reference operator()(reference t)\n   {  return t;   }\n};\n\n//////////////////////////////////////\n//          is_class_or_union\n//////////////////////////////////////\ntemplate<class T>\nstruct is_class_or_union\n{\n   struct twochar { char dummy[2]; };\n   template <class U>\n   static char is_class_or_union_tester(void(U::*)(void));\n   template <class U>\n   static twochar is_class_or_union_tester(...);\n   static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);\n};\n\n//////////////////////////////////////\n//             addressof\n//////////////////////////////////////\ntemplate<class T>\nstruct addr_impl_ref\n{\n   T & v_;\n   inline addr_impl_ref( T & v ): v_( v ) {}\n   inline operator T& () const { return v_; }\n\n   private:\n   addr_impl_ref & operator=(const addr_impl_ref &);\n};\n\ntemplate<class T>\nstruct addressof_impl\n{\n   static inline T * f( T & v, long )\n   {\n      return reinterpret_cast<T*>(\n         &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));\n   }\n\n   static inline T * f( T * v, int )\n   {  return v;  }\n};\n\ntemplate<class T>\ninline T * addressof( T & v )\n{\n   return ::boost::move_detail::addressof_impl<T>::f\n      ( ::boost::move_detail::addr_impl_ref<T>( v ), 0 );\n}\n\n//////////////////////////////////////\n//          has_pointer_type\n//////////////////////////////////////\ntemplate <class T>\nstruct has_pointer_type\n{\n   struct two { char c[2]; };\n   template <class U> static two test(...);\n   template <class U> static char test(typename U::pointer* = 0);\n   static const bool value = sizeof(test<T>(0)) == 1;\n};\n\n//////////////////////////////////////\n//           is_convertible\n//////////////////////////////////////\n#if defined(_MSC_VER) && (_MSC_VER >= 1400)\n\n//use intrinsic since in MSVC\n//overaligned types can't go through ellipsis\ntemplate <class T, class U>\nstruct is_convertible\n{\n   static const bool value = __is_convertible_to(T, U);\n};\n\n#else\n\ntemplate <class T, class U>\nclass is_convertible\n{\n   typedef typename add_lvalue_reference<T>::type t_reference;\n   typedef char true_t;\n   class false_t { char dummy[2]; };\n   static false_t dispatch(...);\n   static true_t  dispatch(U);\n   static t_reference       trigger();\n   public:\n   static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);\n};\n\n#endif\n\ntemplate<\n      bool C\n    , typename F1\n    , typename F2\n    >\nstruct eval_if_c\n    : if_c<C,F1,F2>::type\n{};\n\ntemplate<\n      typename C\n    , typename T1\n    , typename T2\n    >\nstruct eval_if\n    : if_<C,T1,T2>::type\n{};\n\n\n#if defined(BOOST_GCC) && (BOOST_GCC <= 40000)\n#define BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN\n#endif\n\ntemplate<class T, class U, class R = void>\nstruct enable_if_convertible\n   : enable_if< is_convertible<T, U>, R>\n{};\n\ntemplate<class T, class U, class R = void>\nstruct disable_if_convertible\n   : disable_if< is_convertible<T, U>, R>\n{};\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                         and_\n//\n//////////////////////////////////////////////////////////////////////////////\ntemplate<bool, class B = true_, class C = true_, class D = true_>\nstruct and_impl\n   : and_impl<B::value, C, D>\n{};\n\ntemplate<>\nstruct and_impl<true, true_, true_, true_>\n{\n   static const bool value = true;\n};\n\ntemplate<class B, class C, class D>\nstruct and_impl<false, B, C, D>\n{\n   static const bool value = false;\n};\n\ntemplate<class A, class B, class C = true_, class D = true_>\nstruct and_\n   : and_impl<A::value, B, C, D>\n{};\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                            or_\n//\n//////////////////////////////////////////////////////////////////////////////\ntemplate<bool, class B = false_, class C = false_, class D = false_>\nstruct or_impl\n   : or_impl<B::value, C, D>\n{};\n\ntemplate<>\nstruct or_impl<false, false_, false_, false_>\n{\n   static const bool value = false;\n};\n\ntemplate<class B, class C, class D>\nstruct or_impl<true, B, C, D>\n{\n   static const bool value = true;\n};\n\ntemplate<class A, class B, class C = false_, class D = false_>\nstruct or_\n   : or_impl<A::value, B, C, D>\n{};\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                         not_\n//\n//////////////////////////////////////////////////////////////////////////////\ntemplate<class T>\nstruct not_\n{\n   static const bool value = !T::value;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n//\n// enable_if_and / disable_if_and / enable_if_or / disable_if_or\n//\n//////////////////////////////////////////////////////////////////////////////\n\ntemplate<class R, class A, class B, class C = true_, class D = true_>\nstruct enable_if_and\n   : enable_if_c< and_<A, B, C, D>::value, R>\n{};\n\ntemplate<class R, class A, class B, class C = true_, class D = true_>\nstruct disable_if_and\n   : disable_if_c< and_<A, B, C, D>::value, R>\n{};\n\ntemplate<class R, class A, class B, class C = false_, class D = false_>\nstruct enable_if_or\n   : enable_if_c< or_<A, B, C, D>::value, R>\n{};\n\ntemplate<class R, class A, class B, class C = false_, class D = false_>\nstruct disable_if_or\n   : disable_if_c< or_<A, B, C, D>::value, R>\n{};\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                      has_move_emulation_enabled_impl\n//\n//////////////////////////////////////////////////////////////////////////////\ntemplate<class T>\nstruct has_move_emulation_enabled_impl\n   : is_convertible< T, ::boost::rv<T>& >\n{};\n\ntemplate<class T>\nstruct has_move_emulation_enabled_impl<T&>\n{  static const bool value = false;  };\n\ntemplate<class T>\nstruct has_move_emulation_enabled_impl< ::boost::rv<T> >\n{  static const bool value = false;  };\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                            is_rv_impl\n//\n//////////////////////////////////////////////////////////////////////////////\n\ntemplate <class T>\nstruct is_rv_impl\n{  static const bool value = false;  };\n\ntemplate <class T>\nstruct is_rv_impl< rv<T> >\n{  static const bool value = true;  };\n\ntemplate <class T>\nstruct is_rv_impl< const rv<T> >\n{  static const bool value = true;  };\n\n// Code from Jeffrey Lee Hellrung, many thanks\n\ntemplate< class T >\nstruct is_rvalue_reference\n{  static const bool value = false;  };\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\ntemplate< class T >\nstruct is_rvalue_reference< T&& >\n{  static const bool value = true;  };\n\n#else // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\ntemplate< class T >\nstruct is_rvalue_reference< boost::rv<T>& >\n{  static const bool value = true;  };\n\ntemplate< class T >\nstruct is_rvalue_reference< const boost::rv<T>& >\n{  static const bool value = true;  };\n\n#endif // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\ntemplate< class T >\nstruct add_rvalue_reference\n{ typedef T&& type; };\n\n#else // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\nnamespace detail_add_rvalue_reference\n{\n   template< class T\n            , bool emulation = has_move_emulation_enabled_impl<T>::value\n            , bool rv        = is_rv_impl<T>::value  >\n   struct add_rvalue_reference_impl { typedef T type; };\n\n   template< class T, bool emulation>\n   struct add_rvalue_reference_impl< T, emulation, true > { typedef T & type; };\n\n   template< class T, bool rv >\n   struct add_rvalue_reference_impl< T, true, rv > { typedef ::boost::rv<T>& type; };\n} // namespace detail_add_rvalue_reference\n\ntemplate< class T >\nstruct add_rvalue_reference\n   : detail_add_rvalue_reference::add_rvalue_reference_impl<T>\n{ };\n\ntemplate< class T >\nstruct add_rvalue_reference<T &>\n{  typedef T & type; };\n\n#endif // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\ntemplate< class T > struct remove_rvalue_reference { typedef T type; };\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n   template< class T > struct remove_rvalue_reference< T&& >                  { typedef T type; };\n#else // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n   template< class T > struct remove_rvalue_reference< rv<T> >                { typedef T type; };\n   template< class T > struct remove_rvalue_reference< const rv<T> >          { typedef T type; };\n   template< class T > struct remove_rvalue_reference< volatile rv<T> >       { typedef T type; };\n   template< class T > struct remove_rvalue_reference< const volatile rv<T> > { typedef T type; };\n   template< class T > struct remove_rvalue_reference< rv<T>& >               { typedef T type; };\n   template< class T > struct remove_rvalue_reference< const rv<T>& >         { typedef T type; };\n   template< class T > struct remove_rvalue_reference< volatile rv<T>& >      { typedef T type; };\n   template< class T > struct remove_rvalue_reference< const volatile rv<T>& >{ typedef T type; };\n#endif // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\n// Ideas from Boost.Move review, Jeffrey Lee Hellrung:\n//\n//- TypeTraits metafunctions is_lvalue_reference, add_lvalue_reference, and remove_lvalue_reference ?\n//  Perhaps add_reference and remove_reference can be modified so that they behave wrt emulated rvalue\n//  references the same as wrt real rvalue references, i.e., add_reference< rv<T>& > -> T& rather than\n//  rv<T>& (since T&& & -> T&).\n//\n//- Add'l TypeTraits has_[trivial_]move_{constructor,assign}...?\n//\n//- An as_lvalue(T& x) function, which amounts to an identity operation in C++0x, but strips emulated\n//  rvalue references in C++03.  This may be necessary to prevent \"accidental moves\".\n\n}  //namespace move_detail {\n}  //namespace boost {\n\n#endif //#ifndef BOOST_MOVE_DETAIL_META_UTILS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/meta_utils_core.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2015-2015.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n\n#ifndef BOOST_MOVE_DETAIL_META_UTILS_CORE_HPP\n#define BOOST_MOVE_DETAIL_META_UTILS_CORE_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n//Small meta-typetraits to support move\n\nnamespace boost {\nnamespace move_detail {\n\n//////////////////////////////////////\n//             if_c\n//////////////////////////////////////\ntemplate<bool C, typename T1, typename T2>\nstruct if_c\n{\n   typedef T1 type;\n};\n\ntemplate<typename T1, typename T2>\nstruct if_c<false,T1,T2>\n{\n   typedef T2 type;\n};\n\n//////////////////////////////////////\n//             if_\n//////////////////////////////////////\ntemplate<typename T1, typename T2, typename T3>\nstruct if_ : if_c<0 != T1::value, T2, T3>\n{};\n\n//////////////////////////////////////\n//          enable_if_c\n//////////////////////////////////////\ntemplate <bool B, class T = void>\nstruct enable_if_c\n{\n   typedef T type;\n};\n\ntemplate <class T>\nstruct enable_if_c<false, T> {};\n\n//////////////////////////////////////\n//           enable_if\n//////////////////////////////////////\ntemplate <class Cond, class T = void>\nstruct enable_if : enable_if_c<Cond::value, T> {};\n\n//////////////////////////////////////\n//          disable_if_c\n//////////////////////////////////////\ntemplate <bool B, class T = void>\nstruct disable_if_c\n   : enable_if_c<!B, T>\n{};\n\n//////////////////////////////////////\n//          disable_if\n//////////////////////////////////////\ntemplate <class Cond, class T = void>\nstruct disable_if : enable_if_c<!Cond::value, T> {};\n\n//////////////////////////////////////\n//          integral_constant\n//////////////////////////////////////\ntemplate<class T, T v>\nstruct integral_constant\n{\n   static const T value = v;\n   typedef T value_type;\n   typedef integral_constant<T, v> type;\n\n     operator T() const { return value; }\n   T operator()() const { return value; }\n};\n\ntypedef integral_constant<bool, true >  true_type;\ntypedef integral_constant<bool, false > false_type;\n\n\n//////////////////////////////////////\n//             is_same\n//////////////////////////////////////\ntemplate<class T, class U>\nstruct is_same\n{\n   static const bool value = false;\n};\n \ntemplate<class T>\nstruct is_same<T, T>\n{\n   static const bool value = true;\n};\n\n}  //namespace move_detail {\n}  //namespace boost {\n\n#endif //#ifndef BOOST_MOVE_DETAIL_META_UTILS_CORE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/move_helpers.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2010-2012.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef BOOST_MOVE_MOVE_HELPERS_HPP\n#define BOOST_MOVE_MOVE_HELPERS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/utility_core.hpp>\n#include <boost/move/detail/meta_utils.hpp>\n\n#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n\n#define BOOST_MOVE_CATCH_CONST(U)  \\\n   typename ::boost::move_detail::if_< ::boost::move_detail::is_class<U>, BOOST_CATCH_CONST_RLVALUE(U), const U &>::type\n#define BOOST_MOVE_CATCH_RVALUE(U)\\\n   typename ::boost::move_detail::if_< ::boost::move_detail::is_class<U>, BOOST_RV_REF(U), ::boost::move_detail::nat>::type\n#define BOOST_MOVE_CATCH_FWD(U) BOOST_FWD_REF(U)\n#else\n#define BOOST_MOVE_CATCH_CONST(U)  const U &\n#define BOOST_MOVE_CATCH_RVALUE(U) U &&\n#define BOOST_MOVE_CATCH_FWD(U)    U &&\n#endif\n\n////////////////////////////////////////\n//\n// BOOST_MOVE_CONVERSION_AWARE_CATCH\n//\n////////////////////////////////////////\n\n#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES\n   #define BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\\\n      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\\\n      {  return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\\\n      \\\n      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \\\n      {  return FWD_FUNCTION(::boost::move(x));  }\\\n      \\\n      RETURN_VALUE PUB_FUNCTION(TYPE &x)\\\n      {  return FWD_FUNCTION(const_cast<const TYPE &>(x)); }\\\n   //\n   #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN)\n      #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\\\n         BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\\\n         \\\n         template<class BOOST_MOVE_TEMPL_PARAM>\\\n         RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\\\n            typename ::boost::move_detail::enable_if_and\\\n                                 < ::boost::move_detail::nat \\\n                                 , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\\\n                                 , ::boost::move_detail::is_class<TYPE>\\\n                                 , ::boost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\\\n                                 >::type* = 0)\\\n         { return FWD_FUNCTION(u); }\\\n         \\\n         template<class BOOST_MOVE_TEMPL_PARAM>\\\n         RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\\\n            typename ::boost::move_detail::disable_if_or\\\n                              < ::boost::move_detail::nat \\\n                              , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \\\n                              , ::boost::move_detail::and_ \\\n                                 < ::boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM> \\\n                                 , ::boost::move_detail::is_class<BOOST_MOVE_TEMPL_PARAM> \\\n                                 > \\\n                              >::type* = 0)\\\n         {\\\n            TYPE t(u);\\\n            return FWD_FUNCTION(::boost::move(t));\\\n         }\\\n      //\n   #else\n      #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\\\n         BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\\\n         \\\n         template<class BOOST_MOVE_TEMPL_PARAM>\\\n         typename ::boost::move_detail::enable_if_and\\\n                                       < RETURN_VALUE \\\n                                       , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\\\n                                       , ::boost::move_detail::is_class<TYPE>\\\n                                       , ::boost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\\\n                                       >::type\\\n            PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\\\n         { return FWD_FUNCTION(u); }\\\n         \\\n         template<class BOOST_MOVE_TEMPL_PARAM>\\\n         typename ::boost::move_detail::disable_if_or\\\n                           < RETURN_VALUE \\\n                           , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \\\n                           , ::boost::move_detail::and_ \\\n                              < ::boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM> \\\n                              , ::boost::move_detail::is_class<BOOST_MOVE_TEMPL_PARAM> \\\n                              > \\\n                           >::type\\\n            PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\\\n         {\\\n            TYPE t(u);\\\n            return FWD_FUNCTION(::boost::move(t));\\\n         }\\\n      //\n   #endif\n#elif (defined(_MSC_VER) && (_MSC_VER == 1600))\n\n   #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\\\n      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\\\n      {  return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\\\n      \\\n      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \\\n      {  return FWD_FUNCTION(::boost::move(x));  }\\\n      \\\n      template<class BOOST_MOVE_TEMPL_PARAM>\\\n      typename ::boost::move_detail::enable_if_c\\\n                        < !::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>::value\\\n                        , RETURN_VALUE >::type\\\n      PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\\\n      {\\\n         TYPE t(u);\\\n         return FWD_FUNCTION(::boost::move(t));\\\n      }\\\n   //\n\n#else    //BOOST_NO_CXX11_RVALUE_REFERENCES\n\n   #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\\\n      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\\\n      {  return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\\\n      \\\n      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \\\n      {  return FWD_FUNCTION(::boost::move(x));  }\\\n   //\n\n#endif   //BOOST_NO_CXX11_RVALUE_REFERENCES\n\n////////////////////////////////////////\n//\n// BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG\n//\n////////////////////////////////////////\n\n#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES\n   #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\\\n      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\\\n      {  return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\\\n      \\\n      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \\\n      {  return FWD_FUNCTION(arg1, ::boost::move(x));  }\\\n      \\\n      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, TYPE &x)\\\n      {  return FWD_FUNCTION(arg1, const_cast<const TYPE &>(x)); }\\\n   //\n   #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN)\n      #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\\\n         BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\\\n         \\\n         template<class BOOST_MOVE_TEMPL_PARAM>\\\n         RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\\\n            typename ::boost::move_detail::enable_if_and\\\n                              < ::boost::move_detail::nat \\\n                              , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\\\n                              , ::boost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\\\n                              >::type* = 0)\\\n         { return FWD_FUNCTION(arg1, u); }\\\n         \\\n         template<class BOOST_MOVE_TEMPL_PARAM>\\\n         RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\\\n            typename ::boost::move_detail::disable_if_or\\\n                              < void \\\n                              , ::boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM>\\\n                              , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\\\n                              , ::boost::move_detail::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO>\\\n                              >::type* = 0)\\\n         {\\\n            TYPE t(u);\\\n            return FWD_FUNCTION(arg1, ::boost::move(t));\\\n         }\\\n      //\n   #else\n      #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\\\n         BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\\\n         \\\n         template<class BOOST_MOVE_TEMPL_PARAM>\\\n         typename ::boost::move_detail::enable_if_and\\\n                           < RETURN_VALUE \\\n                           , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\\\n                           , ::boost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\\\n                           >::type\\\n            PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\\\n         { return FWD_FUNCTION(arg1, u); }\\\n         \\\n         template<class BOOST_MOVE_TEMPL_PARAM>\\\n         typename ::boost::move_detail::disable_if_or\\\n                           < RETURN_VALUE \\\n                           , ::boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM>\\\n                           , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\\\n                           , ::boost::move_detail::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO>\\\n                           >::type\\\n            PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\\\n         {\\\n            TYPE t(u);\\\n            return FWD_FUNCTION(arg1, ::boost::move(t));\\\n         }\\\n      //\n   #endif\n\n#elif (defined(_MSC_VER) && (_MSC_VER == 1600))\n\n   #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\\\n      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\\\n      {  return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\\\n      \\\n      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \\\n      {  return FWD_FUNCTION(arg1, ::boost::move(x));  }\\\n      \\\n      template<class BOOST_MOVE_TEMPL_PARAM>\\\n      typename ::boost::move_detail::disable_if_or\\\n                        < RETURN_VALUE \\\n                        , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \\\n                        , ::boost::move_detail::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO> \\\n                        >::type\\\n      PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\\\n      {\\\n         TYPE t(u);\\\n         return FWD_FUNCTION(arg1, ::boost::move(t));\\\n      }\\\n   //\n\n#else\n\n   #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\\\n      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\\\n      {  return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\\\n      \\\n      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \\\n      {  return FWD_FUNCTION(arg1, ::boost::move(x));  }\\\n   //\n\n#endif\n\n#endif //#ifndef BOOST_MOVE_MOVE_HELPERS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/std_ns_begin.hpp",
    "content": "#//////////////////////////////////////////////////////////////////////////////\n#//\n#// (C) Copyright Ion Gaztanaga 2015-2015.\n#// Distributed under the Boost Software License, Version 1.0.\n#// (See accompanying file LICENSE_1_0.txt or copy at\n#// http://www.boost.org/LICENSE_1_0.txt)\n#//\n#// See http://www.boost.org/libs/move for documentation.\n#//\n#//////////////////////////////////////////////////////////////////////////////\n#\n#if defined(_LIBCPP_VERSION)\n   #if defined(__clang__)\n      #define BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH\n      #pragma GCC diagnostic push\n      #pragma GCC diagnostic ignored \"-Wc++11-extensions\"\n   #endif\n   #define BOOST_MOVE_STD_NS_BEG _LIBCPP_BEGIN_NAMESPACE_STD\n   #define BOOST_MOVE_STD_NS_END _LIBCPP_END_NAMESPACE_STD\n#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE_VERSION)  //GCC >= 4.6\n   #define BOOST_MOVE_STD_NS_BEG namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION\n   #define BOOST_MOVE_STD_NS_END _GLIBCXX_END_NAMESPACE_VERSION  } // namespace\n#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE)  //GCC >= 4.2\n   #define BOOST_MOVE_STD_NS_BEG _GLIBCXX_BEGIN_NAMESPACE(std)\n   #define BOOST_MOVE_STD_NS_END _GLIBCXX_END_NAMESPACE\n#else\n   #define BOOST_MOVE_STD_NS_BEG namespace std{\n   #define BOOST_MOVE_STD_NS_END }\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/std_ns_end.hpp",
    "content": "#//////////////////////////////////////////////////////////////////////////////\n#//\n#// (C) Copyright Ion Gaztanaga 2015-2015.\n#// Distributed under the Boost Software License, Version 1.0.\n#// (See accompanying file LICENSE_1_0.txt or copy at\n#// http://www.boost.org/LICENSE_1_0.txt)\n#//\n#// See http://www.boost.org/libs/move for documentation.\n#//\n#//////////////////////////////////////////////////////////////////////////////\n#ifdef BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH\n   #pragma GCC diagnostic pop\n   #undef BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH\n#endif   //BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/type_traits.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n// (C) Copyright John Maddock 2000.\n// (C) Copyright Ion Gaztanaga 2005-2015.\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n// The alignment and Type traits implementation comes from\n// John Maddock's TypeTraits library.\n//\n// Some other tricks come from Howard Hinnant's papers and StackOverflow replies\n//////////////////////////////////////////////////////////////////////////////\n#ifndef BOOST_MOVE_DETAIL_TYPE_TRAITS_HPP\n#define BOOST_MOVE_DETAIL_TYPE_TRAITS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n#include <boost/move/detail/workaround.hpp>\n\n// move/detail\n#include <boost/move/detail/meta_utils.hpp>\n// other\n#include <boost/assert.hpp>\n#include <boost/static_assert.hpp>\n// std\n#include <cstddef>\n\n//Use of Boost.TypeTraits leads to long preprocessed source code due to\n//MPL dependencies. We'll use intrinsics directly and make or own\n//simplified version of TypeTraits.\n//If someday Boost.TypeTraits dependencies are minimized, we should\n//revisit this file redirecting code to Boost.TypeTraits traits.\n\n//These traits don't care about volatile, reference or other checks\n//made by Boost.TypeTraits because no volatile or reference types\n//can be hold in Boost.Containers. This helps to avoid any Boost.TypeTraits\n//dependency.\n\n// Helper macros for builtin compiler support.\n// If your compiler has builtin support for any of the following\n// traits concepts, then redefine the appropriate macros to pick\n// up on the compiler support:\n//\n// (these should largely ignore cv-qualifiers)\n// BOOST_MOVE_IS_POD(T) should evaluate to true if T is a POD type\n// BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) should evaluate to true if \"T x;\" has no effect\n// BOOST_MOVE_HAS_TRIVIAL_COPY(T) should evaluate to true if T(t) <==> memcpy\n// BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) should evaluate to true if T(boost::move(t)) <==> memcpy\n// BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) should evaluate to true if t = u <==> memcpy\n// BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN(T) should evaluate to true if t = boost::move(u) <==> memcpy\n// BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) should evaluate to true if ~T() has no effect\n// BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) should evaluate to true if \"T x;\" can not throw\n// BOOST_MOVE_HAS_NOTHROW_COPY(T) should evaluate to true if T(t) can not throw\n// BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) should evaluate to true if t = u can not throw\n// BOOST_MOVE_IS_ENUM(T) should evaluate to true it t is a union type.\n//\n// The following can also be defined: when detected our implementation is greatly simplified.\n//\n// BOOST_ALIGNMENT_OF(T) should evaluate to the alignment requirements of type T.\n\n#if defined(__MSL_CPP__) && (__MSL_CPP__ >= 0x8000)\n    // Metrowerks compiler is acquiring intrinsic type traits support\n    // post version 8.  We hook into the published interface to pick up\n    // user defined specializations as well as compiler intrinsics as\n    // and when they become available:\n#   include <msl_utility>\n#   define BOOST_MOVE_IS_UNION(T) BOOST_STD_EXTENSION_NAMESPACE::is_union<T>::value\n#   define BOOST_MOVE_IS_POD(T) BOOST_STD_EXTENSION_NAMESPACE::is_POD<T>::value\n#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_default_ctor<T>::value\n#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_copy_ctor<T>::value\n#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_assignment<T>::value\n#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_dtor<T>::value\n#endif\n\n#if (defined(BOOST_MSVC) && defined(BOOST_MSVC_FULL_VER) && (BOOST_MSVC_FULL_VER >=140050215))\\\n         || (defined(BOOST_INTEL) && defined(_MSC_VER) && (_MSC_VER >= 1500))\n#   define BOOST_MOVE_IS_UNION(T) __is_union(T)\n#   define BOOST_MOVE_IS_POD(T)                    (__is_pod(T) && __has_trivial_constructor(T))\n#   define BOOST_MOVE_IS_EMPTY(T)                  __is_empty(T)\n#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T)   __has_trivial_constructor(T)\n#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T)          (__has_trivial_copy(T)|| ::boost::move_detail::is_pod<T>::value)\n#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T)        (__has_trivial_assign(T) || ::boost::move_detail::is_pod<T>::value)\n#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T)    (__has_trivial_destructor(T) || ::boost::move_detail::is_pod<T>::value)\n#   define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T)   (__has_nothrow_constructor(T) || ::boost::move_detail::is_trivially_default_constructible<T>::value)\n#   define BOOST_MOVE_HAS_NOTHROW_COPY(T)          (__has_nothrow_copy(T) || ::boost::move_detail::is_trivially_copy_constructible<T>::value)\n#   define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T)        (__has_nothrow_assign(T) || ::boost::move_detail::is_trivially_copy_assignable<T>::value)\n\n#   define BOOST_MOVE_IS_ENUM(T) __is_enum(T)\n#   if defined(_MSC_VER) && (_MSC_VER >= 1700)\n#       define BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T)   (__has_trivial_move_constructor(T) || ::boost::move_detail::is_pod<T>::value)\n#       define BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN(T)        (__has_trivial_move_assign(T) || ::boost::move_detail::is_pod<T>::value)\n#   endif\n#endif\n\n#if defined(BOOST_CLANG) && defined(__has_feature)\n\n#   if __has_feature(is_union)\n#     define BOOST_MOVE_IS_UNION(T) __is_union(T)\n#   endif\n#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_pod)\n#     define BOOST_MOVE_IS_POD(T) __is_pod(T)\n#   endif\n#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_empty)\n#     define BOOST_MOVE_IS_EMPTY(T) __is_empty(T)\n#   endif\n#   if __has_feature(has_trivial_constructor)\n#     define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)\n#   endif\n#   if __has_feature(has_trivial_copy)\n#     //There are problems with deleted copy constructors detected as trivially copyable.\n#     //http://stackoverflow.com/questions/12754886/has-trivial-copy-behaves-differently-in-clang-and-gcc-whos-right\n#     define BOOST_MOVE_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && ::boost::move_detail::is_copy_constructible<T>::value)\n#   endif\n#   if __has_feature(has_trivial_assign)\n#     define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) )\n#   endif\n#   if __has_feature(has_trivial_destructor)\n#     define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)\n#   endif\n#   if __has_feature(has_nothrow_constructor)\n#     define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)\n#   endif\n#   if __has_feature(has_nothrow_copy)\n#     define BOOST_MOVE_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T))\n#   endif\n#   if __has_feature(is_nothrow_copy_assignable)\n#     define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T))\n#   endif\n#   if __has_feature(is_enum)\n#     define BOOST_MOVE_IS_ENUM(T) __is_enum(T)\n#   endif\n#   if __has_feature(has_trivial_move_constructor)\n#     define BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) __has_trivial_move_constructor(T)\n#   endif\n#   if __has_feature(has_trivial_move_assign)\n#     define BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN(T) __has_trivial_move_assign(T)\n#   endif\n#   define BOOST_MOVE_ALIGNMENT_OF(T) __alignof(T)\n#endif\n\n#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) && !defined(BOOST_CLANG)\n\n#ifdef BOOST_INTEL\n#  define BOOST_MOVE_INTEL_TT_OPTS || ::boost::move_detail::is_pod<T>::value\n#else\n#  define BOOST_MOVE_INTEL_TT_OPTS\n#endif\n\n#   define BOOST_MOVE_IS_UNION(T) __is_union(T)\n#   define BOOST_MOVE_IS_POD(T) __is_pod(T)\n#   define BOOST_MOVE_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) ((__has_trivial_constructor(T) BOOST_MOVE_INTEL_TT_OPTS))\n#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T) ((__has_trivial_copy(T) BOOST_MOVE_INTEL_TT_OPTS))\n#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_MOVE_INTEL_TT_OPTS) )\n#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_MOVE_INTEL_TT_OPTS)\n#   define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) BOOST_MOVE_INTEL_TT_OPTS)\n#   define BOOST_MOVE_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_MOVE_INTEL_TT_OPTS))\n#   define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_MOVE_INTEL_TT_OPTS))\n\n#   define BOOST_MOVE_IS_ENUM(T) __is_enum(T)\n#   if (!defined(unix) && !defined(__unix__)) || defined(__LP64__)\n      // GCC sometimes lies about alignment requirements\n      // of type double on 32-bit unix platforms, use the\n      // old implementation instead in that case:\n#     define BOOST_MOVE_ALIGNMENT_OF(T) __alignof__(T)\n#   endif\n#endif\n\n#if defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600)\n\n#   define BOOST_MOVE_IS_UNION(T) __is_union(T)\n#   define BOOST_MOVE_IS_POD(T) __is_pod(T)\n#   define BOOST_MOVE_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)\n#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T))\n#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T))\n#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)\n#   define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)\n#   define BOOST_MOVE_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T))\n#   define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T))\n\n#   define BOOST_MOVE_IS_ENUM(T) __is_enum(T)\n#   define BOOST_MOVE_ALIGNMENT_OF(T) __alignof__(T)\n#endif\n\n# if defined(__CODEGEARC__)\n#   define BOOST_MOVE_IS_UNION(T) __is_union(T)\n#   define BOOST_MOVE_IS_POD(T) __is_pod(T)\n#   define BOOST_MOVE_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T))\n#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T))\n#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T))\n#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T))\n#   define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T))\n#   define BOOST_MOVE_HAS_NOTHROW_COPY(T) (__has_nothrow_copy_constructor(T))\n#   define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T))\n\n#   define BOOST_MOVE_IS_ENUM(T) __is_enum(T)\n#   define BOOST_MOVE_ALIGNMENT_OF(T) alignof(T)\n\n#endif\n\n//Fallback definitions\n\n#ifdef BOOST_MOVE_IS_UNION\n   #define BOOST_MOVE_IS_UNION_IMPL(T) BOOST_MOVE_IS_UNION(T)\n#else\n   #define BOOST_MOVE_IS_UNION_IMPL(T) false\n#endif\n\n#ifdef BOOST_MOVE_IS_POD\n   //in some compilers the intrinsic is limited to class types so add scalar and void\n   #define BOOST_MOVE_IS_POD_IMPL(T) (::boost::move_detail::is_scalar<T>::value ||\\\n                                      ::boost::move_detail::is_void<T>::value   ||\\\n                                       BOOST_MOVE_IS_POD(T))\n#else\n   #define BOOST_MOVE_IS_POD_IMPL(T) \\\n      (::boost::move_detail::is_scalar<T>::value || ::boost::move_detail::is_void<T>::value)\n#endif\n\n#ifdef BOOST_MOVE_IS_EMPTY\n   #define BOOST_MOVE_IS_EMPTY_IMPL(T) BOOST_MOVE_IS_EMPTY(T)\n#else\n   #define BOOST_MOVE_IS_EMPTY_IMPL(T)    ::boost::move_detail::is_empty_nonintrinsic<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_TRIVIAL_COPY\n   #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_TRIVIAL_COPY(T)\n#else\n   #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)   ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR\n   #define BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T)  BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T)\n#else\n   #define BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T)  ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_TRIVIAL_COPY\n   #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_TRIVIAL_COPY(T)\n#else\n   #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)   ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR\n   #define BOOST_MOVE_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T)\n#else\n   #define BOOST_MOVE_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE(T)   ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_TRIVIAL_ASSIGN\n   #define BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T)\n#else\n   #define BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN\n   #define BOOST_MOVE_IS_TRIVIALLY_MOVE_ASSIGNABLE(T)  BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN(T)\n#else\n   #define BOOST_MOVE_IS_TRIVIALLY_MOVE_ASSIGNABLE(T)  ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR\n   #define BOOST_MOVE_IS_TRIVIALLY_DESTRUCTIBLE(T)   BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T)\n#else\n   #define BOOST_MOVE_IS_TRIVIALLY_DESTRUCTIBLE(T)   ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR\n   #define BOOST_MOVE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE(T)  BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T)\n#else\n   #define BOOST_MOVE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE(T)  ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_NOTHROW_COPY\n   #define BOOST_MOVE_IS_NOTHROW_COPY_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_NOTHROW_COPY(T)\n#else\n   #define BOOST_MOVE_IS_NOTHROW_COPY_CONSTRUCTIBLE(T)   ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_NOTHROW_MOVE\n   #define BOOST_MOVE_IS_NOTHROW_MOVE_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_NOTHROW_MOVE(T)\n#else\n   #define BOOST_MOVE_IS_NOTHROW_MOVE_CONSTRUCTIBLE(T)   ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_NOTHROW_ASSIGN\n   #define BOOST_MOVE_IS_NOTHROW_COPY_ASSIGNABLE(T) BOOST_MOVE_HAS_NOTHROW_ASSIGN(T)\n#else\n   #define BOOST_MOVE_IS_NOTHROW_COPY_ASSIGNABLE(T) ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_HAS_NOTHROW_MOVE_ASSIGN\n   #define BOOST_MOVE_IS_NOTHROW_MOVE_ASSIGNABLE(T) BOOST_MOVE_HAS_NOTHROW_MOVE_ASSIGN(T)\n#else\n   #define BOOST_MOVE_IS_NOTHROW_MOVE_ASSIGNABLE(T) ::boost::move_detail::is_pod<T>::value\n#endif\n\n#ifdef BOOST_MOVE_IS_ENUM\n   #define BOOST_MOVE_IS_ENUM_IMPL(T)   BOOST_MOVE_IS_ENUM(T)\n#else\n   #define BOOST_MOVE_IS_ENUM_IMPL(T)   ::boost::move_detail::is_enum_nonintrinsic<T>::value\n#endif\n\nnamespace boost {\nnamespace move_detail {\n\n//////////////////////////\n//    is_reference\n//////////////////////////\ntemplate<class T>\nstruct is_reference\n{  static const bool value = false; };\n\ntemplate<class T>\nstruct is_reference<T&>\n{  static const bool value = true; };\n\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\ntemplate<class T>\nstruct is_reference<T&&>\n{  static const bool value = true; };\n#endif\n\n//////////////////////////\n//    is_pointer\n//////////////////////////\ntemplate<class T>\nstruct is_pointer\n{  static const bool value = false; };\n\ntemplate<class T>\nstruct is_pointer<T*>\n{  static const bool value = true; };\n\n//////////////////////////\n//       is_const\n//////////////////////////\ntemplate<class T>\nstruct is_const\n{  static const bool value = false; };\n\ntemplate<class T>\nstruct is_const<const T>\n{  static const bool value = true; };\n\n//////////////////////////\n//       unvoid_ref\n//////////////////////////\ntemplate <typename T> struct unvoid_ref : add_lvalue_reference<T>{};\ntemplate <> struct unvoid_ref<void>                { typedef unvoid_ref & type; };\ntemplate <> struct unvoid_ref<const void>          { typedef unvoid_ref & type; };\ntemplate <> struct unvoid_ref<volatile void>       { typedef unvoid_ref & type; };\ntemplate <> struct unvoid_ref<const volatile void> { typedef unvoid_ref & type; };\n\ntemplate <typename T>\nstruct add_reference : add_lvalue_reference<T>\n{};\n\n//////////////////////////\n//    add_const_reference\n//////////////////////////\ntemplate <class T>\nstruct add_const_reference\n{  typedef const T &type;   };\n\ntemplate <class T>\nstruct add_const_reference<T&>\n{  typedef T& type;   };\n\n//////////////////////////\n//    add_const_if_c\n//////////////////////////\ntemplate<class T, bool Add>\nstruct add_const_if_c\n   : if_c<Add, typename add_const<T>::type, T>\n{};\n\n//////////////////////////\n//    remove_const\n//////////////////////////\ntemplate<class T>\nstruct remove_const\n{  typedef T type;   };\n\ntemplate<class T>\nstruct remove_const< const T>\n{  typedef T type;   };\n\n//////////////////////////\n//    remove_cv\n//////////////////////////\ntemplate<typename T> struct remove_cv                    {  typedef T type;   };\ntemplate<typename T> struct remove_cv<const T>           {  typedef T type;   };\ntemplate<typename T> struct remove_cv<const volatile T>  {  typedef T type;   };\ntemplate<typename T> struct remove_cv<volatile T>        {  typedef T type;   };\n\n//////////////////////////\n//    make_unsigned\n//////////////////////////\ntemplate <class T>\nstruct make_unsigned_impl                                         {  typedef T type;   };\ntemplate <> struct make_unsigned_impl<signed char>                {  typedef unsigned char  type; };\ntemplate <> struct make_unsigned_impl<signed short>               {  typedef unsigned short type; };\ntemplate <> struct make_unsigned_impl<signed int>                 {  typedef unsigned int   type; };\ntemplate <> struct make_unsigned_impl<signed long>                {  typedef unsigned long  type; };\n#ifdef BOOST_HAS_LONG_LONG\ntemplate <> struct make_unsigned_impl< ::boost::long_long_type >  {  typedef ::boost::ulong_long_type type; };\n#endif\n\ntemplate <class T>\nstruct make_unsigned\n   : make_unsigned_impl<typename remove_cv<T>::type>\n{};\n\n//////////////////////////\n//    is_floating_point\n//////////////////////////\ntemplate<class T> struct is_floating_point_cv               {  static const bool value = false; };\ntemplate<>        struct is_floating_point_cv<float>        {  static const bool value = true; };\ntemplate<>        struct is_floating_point_cv<double>       {  static const bool value = true; };\ntemplate<>        struct is_floating_point_cv<long double>  {  static const bool value = true; };\n\ntemplate<class T>\nstruct is_floating_point\n   : is_floating_point_cv<typename remove_cv<T>::type>\n{};\n\n//////////////////////////\n//    is_integral\n//////////////////////////\ntemplate<class T> struct is_integral_cv                    {  static const bool value = false; };\ntemplate<> struct is_integral_cv<                     bool>{  static const bool value = true; };\ntemplate<> struct is_integral_cv<                     char>{  static const bool value = true; };\ntemplate<> struct is_integral_cv<            unsigned char>{  static const bool value = true; };\ntemplate<> struct is_integral_cv<              signed char>{  static const bool value = true; };\n#ifndef BOOST_NO_CXX11_CHAR16_T\ntemplate<> struct is_integral_cv<                 char16_t>{  static const bool value = true; };\n#endif\n#ifndef BOOST_NO_CXX11_CHAR32_T\ntemplate<> struct is_integral_cv<                 char32_t>{  static const bool value = true; };\n#endif\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\ntemplate<> struct is_integral_cv<                  wchar_t>{  static const bool value = true; };\n#endif\ntemplate<> struct is_integral_cv<                    short>{  static const bool value = true; };\ntemplate<> struct is_integral_cv<           unsigned short>{  static const bool value = true; };\ntemplate<> struct is_integral_cv<                      int>{  static const bool value = true; };\ntemplate<> struct is_integral_cv<             unsigned int>{  static const bool value = true; };\ntemplate<> struct is_integral_cv<                     long>{  static const bool value = true; };\ntemplate<> struct is_integral_cv<            unsigned long>{  static const bool value = true; };\n#ifdef BOOST_HAS_LONG_LONG\ntemplate<> struct is_integral_cv< ::boost:: long_long_type>{  static const bool value = true; };\ntemplate<> struct is_integral_cv< ::boost::ulong_long_type>{  static const bool value = true; };\n#endif\n\ntemplate<class T>\nstruct is_integral\n   : public is_integral_cv<typename remove_cv<T>::type>\n{};\n\n//////////////////////////////////////\n//          remove_all_extents\n//////////////////////////////////////\ntemplate <class T>\nstruct remove_all_extents\n{  typedef T type;};\n\ntemplate <class T>\nstruct remove_all_extents<T[]>\n{  typedef typename remove_all_extents<T>::type type; };\n\ntemplate <class T, std::size_t N>\nstruct remove_all_extents<T[N]>\n{  typedef typename remove_all_extents<T>::type type;};\n\n//////////////////////////\n//    is_scalar\n//////////////////////////\ntemplate<class T>\nstruct is_scalar\n{  static const bool value = is_integral<T>::value || is_floating_point<T>::value; };\n\n//////////////////////////\n//       is_void\n//////////////////////////\ntemplate<class T>\nstruct is_void_cv\n{  static const bool value = false; };\n\ntemplate<>\nstruct is_void_cv<void>\n{  static const bool value = true; };\n\ntemplate<class T>\nstruct is_void\n   : is_void_cv<typename remove_cv<T>::type>\n{};\n\n//////////////////////////////////////\n//          is_array\n//////////////////////////////////////\ntemplate<class T>\nstruct is_array\n{  static const bool value = false; };\n\ntemplate<class T>\nstruct is_array<T[]>\n{  static const bool value = true;  };\n\ntemplate<class T, std::size_t N>\nstruct is_array<T[N]>\n{  static const bool value = true;  };\n\n//////////////////////////////////////\n//           is_member_pointer\n//////////////////////////////////////\ntemplate <class T>         struct is_member_pointer_cv         {  static const bool value = false; };\ntemplate <class T, class U>struct is_member_pointer_cv<T U::*> {  static const bool value = true; };\n\ntemplate <class T>\nstruct is_member_pointer\n    : is_member_pointer_cv<typename remove_cv<T>::type>\n{};\n\n//////////////////////////////////////\n//          is_nullptr_t\n//////////////////////////////////////\ntemplate <class T>\nstruct is_nullptr_t_cv\n{  static const bool value = false; };\n\n#if !defined(BOOST_NO_CXX11_NULLPTR)\ntemplate <>\nstruct is_nullptr_t_cv\n   #if !defined(BOOST_NO_CXX11_DECLTYPE)\n   <decltype(nullptr)>\n   #else\n   <std::nullptr_t>\n   #endif\n{  static const bool value = true; };\n#endif\n\ntemplate <class T>\nstruct is_nullptr_t\n   : is_nullptr_t_cv<typename remove_cv<T>::type>\n{};\n\n//////////////////////////////////////\n//          is_function\n//////////////////////////////////////\n//Inspired by libc++, thanks to Howard Hinnant\n//For a function to pointer an lvalue of function type T can be implicitly converted to a prvalue\n//pointer to that function. This does not apply to non-static member functions because lvalues\n//that refer to non-static member functions do not exist.\ntemplate <class T>\nstruct is_reference_convertible_to_pointer\n{\n   struct twochar { char dummy[2]; };\n   template <class U> static char    test(U*);\n   template <class U> static twochar test(...);\n   static T& source();\n   static const bool value = sizeof(char) == sizeof(test<T>(source()));\n};\n//Filter out:\n// - class types that might have implicit conversions\n// - void (to avoid forming a reference to void later)\n// - references (e.g.: filtering reference to functions)\n// - nullptr_t (convertible to pointer)\ntemplate < class T\n         , bool Filter = is_class_or_union<T>::value  ||\n                         is_void<T>::value            ||\n                         is_reference<T>::value       ||\n                         is_nullptr_t<T>::value       >\nstruct is_function_impl\n{  static const bool value = is_reference_convertible_to_pointer<T>::value; };\n\ntemplate <class T>\nstruct is_function_impl<T, true>\n{  static const bool value = false; };\n\ntemplate <class T>\nstruct is_function\n   : is_function_impl<T>\n{};\n\n//////////////////////////////////////\n//       is_union\n//////////////////////////////////////\ntemplate<class T>\nstruct is_union_noextents_cv\n{  static const bool value = BOOST_MOVE_IS_UNION_IMPL(T); };\n\ntemplate<class T>\nstruct is_union\n   : is_union_noextents_cv<typename remove_cv<typename remove_all_extents<T>::type>::type>\n{};\n\n//////////////////////////////////////\n//             is_class\n//////////////////////////////////////\ntemplate <class T>\nstruct is_class\n{\n   static const bool value = is_class_or_union<T>::value && ! is_union<T>::value;\n};\n\n\n//////////////////////////////////////\n//             is_arithmetic\n//////////////////////////////////////\ntemplate <class T>\nstruct is_arithmetic\n{\n   static const bool value = is_floating_point<T>::value ||\n                             is_integral<T>::value;\n};\n\n//////////////////////////////////////\n//    is_member_function_pointer\n//////////////////////////////////////\ntemplate <class T>\nstruct is_member_function_pointer_cv\n{\n   static const bool value = false;\n};\n\ntemplate <class T, class C>\nstruct is_member_function_pointer_cv<T C::*>\n   : is_function<T>\n{};\n\ntemplate <class T>\nstruct is_member_function_pointer\n    : is_member_function_pointer_cv<typename remove_cv<T>::type>\n{};\n\n//////////////////////////////////////\n//             is_enum\n//////////////////////////////////////\n#if !defined(BOOST_MOVE_IS_ENUM)\n//Based on (http://howardhinnant.github.io/TypeHiearchy.pdf)\ntemplate <class T>\nstruct is_enum_nonintrinsic\n{\n   static const bool value =  !is_arithmetic<T>::value     &&\n                              !is_reference<T>::value      &&\n                              !is_class_or_union<T>::value &&\n                              !is_array<T>::value          &&\n                              !is_void<T>::value           &&\n                              !is_nullptr_t<T>::value      &&\n                              !is_member_pointer<T>::value &&\n                              !is_pointer<T>::value        &&\n                              !is_function<T>::value;\n};\n#endif\n\ntemplate <class T>\nstruct is_enum\n{  static const bool value = BOOST_MOVE_IS_ENUM_IMPL(T);  };\n\n//////////////////////////////////////\n//       is_pod\n//////////////////////////////////////\ntemplate<class T>\nstruct is_pod_noextents_cv  //for non-c++11 compilers, a safe fallback\n{  static const bool value = BOOST_MOVE_IS_POD_IMPL(T); };\n\ntemplate<class T>\nstruct is_pod\n   : is_pod_noextents_cv<typename remove_cv<typename remove_all_extents<T>::type>::type>\n{};\n\n//////////////////////////////////////\n//             is_empty\n//////////////////////////////////////\n#if !defined(BOOST_MOVE_IS_EMPTY)\n\ntemplate <typename T>\nstruct empty_helper_t1 : public T\n{\n   empty_helper_t1();  // hh compiler bug workaround\n   int i[256];\n   private:\n\n   empty_helper_t1(const empty_helper_t1&);\n   empty_helper_t1& operator=(const empty_helper_t1&);\n};\n\nstruct empty_helper_t2 { int i[256]; };\n\ntemplate <typename T, bool IsClass = is_class<T>::value >\nstruct is_empty_nonintrinsic\n{\n   static const bool value = false;\n};\n\ntemplate <typename T>\nstruct is_empty_nonintrinsic<T, true>\n{\n   static const bool value = sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2);\n};\n#endif\n\ntemplate <class T>\nstruct is_empty\n{  static const bool value = BOOST_MOVE_IS_EMPTY_IMPL(T);  };\n\n\ntemplate<class T>\nstruct has_boost_move_no_copy_constructor_or_assign_type\n{\n   template <class U>\n   static yes_type test(typename U::boost_move_no_copy_constructor_or_assign*);\n\n   template <class U>\n   static no_type test(...);\n\n   static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);\n};\n\n//////////////////////////////////////\n//       is_copy_constructible\n//////////////////////////////////////\n#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_CXX11_DECLTYPE) \\\n   && !defined(BOOST_INTEL_CXX_VERSION) && \\\n      !(defined(BOOST_MSVC) && _MSC_VER == 1800)\n#define BOOST_MOVE_TT_CXX11_IS_COPY_CONSTRUCTIBLE\n#endif\n\ntemplate<class T>\nstruct is_copy_constructible\n{\n   // Intel compiler has problems with SFINAE for copy constructors and deleted functions:\n   //\n   // error: function *function_name* cannot be referenced -- it is a deleted function\n   // static yes_type test(U&, decltype(U(boost::declval<U&>()))* = 0);\n   //                                                        ^ \n   // MSVC 12.0 (Visual 2013) has problems when the copy constructor has been deleted. See:\n   // https://connect.microsoft.com/VisualStudio/feedback/details/800328/std-is-copy-constructible-is-broken\n   #if defined(BOOST_MOVE_TT_CXX11_IS_COPY_CONSTRUCTIBLE)\n      template<class U> static typename add_reference<U>::type source();\n      static no_type test(...);\n      #ifdef BOOST_NO_CXX11_DECLTYPE\n         template <class U>\n         static yes_type test(U&, bool_<sizeof(U(source<U>()))>* = 0);\n      #else\n         template <class U>\n         static yes_type test(U&, decltype(U(source<U>()))* = 0);\n      #endif\n      static const bool value = sizeof(test(source<T>())) == sizeof(yes_type);\n   #else\n   static const bool value = !has_boost_move_no_copy_constructor_or_assign_type<T>::value;\n   #endif\n};\n\n\n//////////////////////////////////////\n//       is_copy_assignable\n//////////////////////////////////////\n#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_CXX11_DECLTYPE) \\\n   && !defined(BOOST_INTEL_CXX_VERSION) && \\\n      !(defined(BOOST_MSVC) && _MSC_VER == 1800)\n#define BOOST_MOVE_TT_CXX11_IS_COPY_ASSIGNABLE\n#endif\n\ntemplate <class T>\nstruct is_copy_assignable\n{\n// Intel compiler has problems with SFINAE for copy constructors and deleted functions:\n//\n// error: function *function_name* cannot be referenced -- it is a deleted function\n// static boost::type_traits::yes_type test(T1&, decltype(T1(boost::declval<T1&>()))* = 0);\n//                                                        ^ \n//\n// MSVC 12.0 (Visual 2013) has problems when the copy constructor has been deleted. See:\n// https://connect.microsoft.com/VisualStudio/feedback/details/800328/std-is-copy-constructible-is-broken\n#if defined(BOOST_MOVE_TT_CXX11_IS_COPY_ASSIGNABLE)\n   typedef char yes_type;\n   struct no_type { char dummy[2]; };\n   \n   template <class U>   static typename add_reference<U>::type source();\n   template <class U>   static decltype(source<U&>() = source<const U&>(), yes_type() ) test(int);\n   template <class>     static no_type test(...);\n\n   static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);\n#else\n   static const bool value = !has_boost_move_no_copy_constructor_or_assign_type<T>::value;\n#endif\n};\n\n//////////////////////////////////////\n//       is_trivially_destructible\n//////////////////////////////////////\ntemplate<class T>\nstruct is_trivially_destructible\n{  static const bool value = BOOST_MOVE_IS_TRIVIALLY_DESTRUCTIBLE(T); };\n\n//////////////////////////////////////\n//       is_trivially_default_constructible\n//////////////////////////////////////\ntemplate<class T>\nstruct is_trivially_default_constructible\n{  static const bool value = BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T); };\n\n//////////////////////////////////////\n//       is_trivially_copy_constructible\n//////////////////////////////////////\ntemplate<class T>\nstruct is_trivially_copy_constructible\n{\n   //In several compilers BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE return true even with\n   //deleted copy constructors so make sure the type is copy constructible.\n   static const bool value = ::boost::move_detail::is_pod<T>::value ||\n                             ( ::boost::move_detail::is_copy_constructible<T>::value &&\n                               BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) );\n};\n\n//////////////////////////////////////\n//       is_trivially_move_constructible\n//////////////////////////////////////\ntemplate<class T>\nstruct is_trivially_move_constructible\n{  static const bool value = BOOST_MOVE_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE(T); };\n\n//////////////////////////////////////\n//       is_trivially_copy_assignable\n//////////////////////////////////////\ntemplate<class T>\nstruct is_trivially_copy_assignable\n{\n   //In several compilers BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE return true even with\n   //deleted copy constructors so make sure the type is copy constructible.\n   static const bool value = ::boost::move_detail::is_pod<T>::value ||\n                             ( ::boost::move_detail::is_copy_assignable<T>::value &&\n                               BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) );\n};                             \n\n//////////////////////////////////////\n//       is_trivially_move_assignable\n//////////////////////////////////////\ntemplate<class T>\nstruct is_trivially_move_assignable\n{  static const bool value = BOOST_MOVE_IS_TRIVIALLY_MOVE_ASSIGNABLE(T);  };\n\n//////////////////////////////////////\n//       is_nothrow_default_constructible\n//////////////////////////////////////\ntemplate<class T>\nstruct is_nothrow_default_constructible\n   : is_pod<T>\n{  static const bool value = BOOST_MOVE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE(T);  };\n\n//////////////////////////////////////\n//    is_nothrow_copy_constructible\n//////////////////////////////////////\ntemplate<class T>\nstruct is_nothrow_copy_constructible\n{  static const bool value = BOOST_MOVE_IS_NOTHROW_COPY_CONSTRUCTIBLE(T);  };\n\n//////////////////////////////////////\n//    is_nothrow_move_constructible\n//////////////////////////////////////\ntemplate<class T>\nstruct is_nothrow_move_constructible\n{  static const bool value = BOOST_MOVE_IS_NOTHROW_MOVE_CONSTRUCTIBLE(T);  };\n\n//////////////////////////////////////\n//       is_nothrow_copy_assignable\n//////////////////////////////////////\ntemplate<class T>\nstruct is_nothrow_copy_assignable\n{  static const bool value = BOOST_MOVE_IS_NOTHROW_COPY_ASSIGNABLE(T);  };\n\n//////////////////////////////////////\n//    is_nothrow_move_assignable\n//////////////////////////////////////\ntemplate<class T>\nstruct is_nothrow_move_assignable\n{  static const bool value = BOOST_MOVE_IS_NOTHROW_MOVE_ASSIGNABLE(T);  };\n\n//////////////////////////////////////\n//    is_nothrow_swappable\n//////////////////////////////////////\ntemplate<class T>\nstruct is_nothrow_swappable\n{\n   static const bool value = is_empty<T>::value || is_pod<T>::value;\n};\n\n//////////////////////////////////////\n//       alignment_of\n//////////////////////////////////////\ntemplate <typename T>\nstruct alignment_of_hack\n{\n   T t1;\n   char c;\n   T t2;\n   alignment_of_hack();\n};\n\ntemplate <unsigned A, unsigned S>\nstruct alignment_logic\n{  static const std::size_t value = A < S ? A : S; };\n\ntemplate< typename T >\nstruct alignment_of_impl\n#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)\n    // With MSVC both the native __alignof operator\n    // and our own logic gets things wrong from time to time :-(\n    // Using a combination of the two seems to make the most of a bad job:\n   : alignment_logic< sizeof(alignment_of_hack<T>) - 2*sizeof(T), __alignof(T)>\n{};\n#elif !defined(BOOST_MOVE_ALIGNMENT_OF)\n   : alignment_logic< sizeof(alignment_of_hack<T>) - 2*sizeof(T), sizeof(T)>\n{};\n#else\n{  static const std::size_t value = BOOST_MOVE_ALIGNMENT_OF(T);  };\n#endif\n\ntemplate< typename T >\nstruct alignment_of\n   : alignment_of_impl<T>\n{};\n\nclass alignment_dummy;\ntypedef void (*function_ptr)();\ntypedef int (alignment_dummy::*member_ptr);\ntypedef int (alignment_dummy::*member_function_ptr)();\nstruct alignment_struct\n{  long double dummy[4];  };\n\n/////////////////////////////\n//    max_align_t\n/////////////////////////////\n//This is not standard, but should work with all compilers\nunion max_align\n{\n   char        char_;\n   short       short_;\n   int         int_;\n   long        long_;\n   #ifdef BOOST_HAS_LONG_LONG\n   ::boost::long_long_type   long_long_;\n   #endif\n   float       float_;\n   double      double_;\n   void *      void_ptr_;\n   long double long_double_[4];\n   alignment_dummy *unknown_class_ptr_;\n   function_ptr function_ptr_;\n   member_function_ptr member_function_ptr_;\n   alignment_struct alignment_struct_;\n};\n\ntypedef union max_align max_align_t;\n\n/////////////////////////////\n//    aligned_storage\n/////////////////////////////\n\n#if !defined(BOOST_NO_ALIGNMENT)\n\ntemplate<std::size_t Len, std::size_t Align>\nstruct aligned_storage_impl;\n\n#define BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(A)\\\ntemplate<std::size_t Len>\\\nstruct BOOST_ALIGNMENT(A) aligned_storage_impl<Len, A>\\\n{\\\n   char dummy[Len];\\\n   typedef aligned_storage_impl<Len, A> type;\\\n};\\\n//\n\n//Up to 4K alignment (typical page size)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x1)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x2)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x4)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x8)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x10)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x20)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x40)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x80)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x100)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x200)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x400)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x800)\nBOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x1000)\n\n#undef BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT\n\n#else //BOOST_NO_ALIGNMENT\n\ntemplate<class T, std::size_t Len>\nunion aligned_union\n{\t\n   T aligner;\n   char dummy[Len];\n};\n\ntemplate<std::size_t Len, std::size_t Align, class T, bool Ok>\nstruct aligned_next;\n\ntemplate<std::size_t Len, std::size_t Align, class T>\nstruct aligned_next<Len, Align, T, true>\n{\n   BOOST_STATIC_ASSERT((alignment_of<T>::value == Align));\n   typedef aligned_union<T, Len> type;\n};\n\n//End of search defaults to max_align_t\ntemplate<std::size_t Len, std::size_t Align>\nstruct aligned_next<Len, Align, max_align_t, false>\n{\ttypedef aligned_union<max_align_t, Len> type;   };\n\n//Now define a search list through types\n#define BOOST_MOVE_ALIGNED_NEXT_STEP(TYPE, NEXT_TYPE)\\\n   template<std::size_t Len, std::size_t Align>\\\n   struct aligned_next<Len, Align, TYPE, false>\\\n      : aligned_next<Len, Align, NEXT_TYPE, Align == alignment_of<NEXT_TYPE>::value>\\\n   {};\\\n   //\n   BOOST_MOVE_ALIGNED_NEXT_STEP(long double, max_align_t)\n   BOOST_MOVE_ALIGNED_NEXT_STEP(double, long double)\n   #ifdef BOOST_HAS_LONG_LONG\n      BOOST_MOVE_ALIGNED_NEXT_STEP(::boost::long_long_type, double)\n      BOOST_MOVE_ALIGNED_NEXT_STEP(long, ::boost::long_long_type)\n   #else\n      BOOST_MOVE_ALIGNED_NEXT_STEP(long, double)\n   #endif\n   BOOST_MOVE_ALIGNED_NEXT_STEP(int, long)\n   BOOST_MOVE_ALIGNED_NEXT_STEP(short, int)\n   BOOST_MOVE_ALIGNED_NEXT_STEP(char, short)\n#undef BOOST_MOVE_ALIGNED_NEXT_STEP\n\ntemplate<std::size_t Len, std::size_t Align>\nstruct aligned_storage_impl\n   : aligned_next<Len, Align, char, Align == alignment_of<char>::value>\n{};\n\n#endif\n\ntemplate<std::size_t Len, std::size_t Align = alignment_of<max_align_t>::value>\nstruct aligned_storage\n{\n   //Sanity checks for input parameters\n   BOOST_STATIC_ASSERT(Align > 0);\n\n   //Sanity checks for output type\n   typedef typename aligned_storage_impl<Len ? Len : 1, Align>::type type;\n   static const std::size_t value = alignment_of<type>::value;\n   BOOST_STATIC_ASSERT(value >= Align);\n   BOOST_STATIC_ASSERT((value % Align) == 0);\n\n   //Just in case someone instantiates aligned_storage\n   //instead of aligned_storage::type (typical error).\n   private:\n   aligned_storage();\n};\n\n}  //namespace move_detail {\n}  //namespace boost {\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif   //#ifndef BOOST_MOVE_DETAIL_TYPE_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/unique_ptr_meta_utils.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2012-2012.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n\n#ifndef BOOST_MOVE_UNIQUE_PTR_DETAIL_META_UTILS_HPP\n#define BOOST_MOVE_UNIQUE_PTR_DETAIL_META_UTILS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <cstddef>   //for std::size_t\n\n//Small meta-typetraits to support move\n\nnamespace boost {\n\nnamespace movelib {\n\ntemplate <class T>\nstruct default_delete;\n\n}  //namespace movelib {\n\n#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES\n//Forward declare boost::rv\ntemplate <class T> class rv;\n#endif\n\nnamespace move_upmu {\n\n//////////////////////////////////////\n//              nat\n//////////////////////////////////////\nstruct nat{};\n\n//////////////////////////////////////\n//            natify\n//////////////////////////////////////\ntemplate <class T> struct natify{};\n\n//////////////////////////////////////\n//             if_c\n//////////////////////////////////////\ntemplate<bool C, typename T1, typename T2>\nstruct if_c\n{\n   typedef T1 type;\n};\n\ntemplate<typename T1, typename T2>\nstruct if_c<false,T1,T2>\n{\n   typedef T2 type;\n};\n\n//////////////////////////////////////\n//             if_\n//////////////////////////////////////\ntemplate<typename T1, typename T2, typename T3>\nstruct if_ : if_c<0 != T1::value, T2, T3>\n{};\n\n//enable_if_\ntemplate <bool B, class T = nat>\nstruct enable_if_c\n{\n   typedef T type;\n};\n\n//////////////////////////////////////\n//          enable_if_c\n//////////////////////////////////////\ntemplate <class T>\nstruct enable_if_c<false, T> {};\n\n//////////////////////////////////////\n//           enable_if\n//////////////////////////////////////\ntemplate <class Cond, class T = nat>\nstruct enable_if : public enable_if_c<Cond::value, T> {};\n\n//////////////////////////////////////\n//          remove_reference\n//////////////////////////////////////\ntemplate<class T>\nstruct remove_reference\n{\n   typedef T type;\n};\n\ntemplate<class T>\nstruct remove_reference<T&>\n{\n   typedef T type;\n};\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\ntemplate<class T>\nstruct remove_reference<T&&>\n{\n   typedef T type;\n};\n\n#else\n\ntemplate<class T>\nstruct remove_reference< rv<T> >\n{\n   typedef T type;\n};\n\ntemplate<class T>\nstruct remove_reference< rv<T> &>\n{\n   typedef T type;\n};\n\ntemplate<class T>\nstruct remove_reference< const rv<T> &>\n{\n   typedef T type;\n};\n\n\n#endif\n\n//////////////////////////////////////\n//             remove_const\n//////////////////////////////////////\ntemplate< class T >\nstruct remove_const\n{\n   typedef T type;\n};\n\ntemplate< class T >\nstruct remove_const<const T>\n{\n   typedef T type;\n};\n\n//////////////////////////////////////\n//             remove_volatile\n//////////////////////////////////////\ntemplate< class T >\nstruct remove_volatile\n{\n   typedef T type;\n};\n\ntemplate< class T >\nstruct remove_volatile<volatile T>\n{\n   typedef T type;\n};\n\n//////////////////////////////////////\n//             remove_cv\n//////////////////////////////////////\ntemplate< class T >\nstruct remove_cv\n{\n    typedef typename remove_volatile\n      <typename remove_const<T>::type>::type type;\n};\n\n//////////////////////////////////////\n//          remove_extent\n//////////////////////////////////////\ntemplate<class T>\nstruct remove_extent\n{\n   typedef T type;\n};\n \ntemplate<class T>\nstruct remove_extent<T[]>\n{\n   typedef T type;\n};\n \ntemplate<class T, std::size_t N>\nstruct remove_extent<T[N]>\n{\n   typedef T type;\n};\n\n//////////////////////////////////////\n//             extent\n//////////////////////////////////////\n\ntemplate<class T, unsigned N = 0>\nstruct extent\n{\n   static const std::size_t value = 0;\n};\n \ntemplate<class T>\nstruct extent<T[], 0> \n{\n   static const std::size_t value = 0;\n};\n\ntemplate<class T, unsigned N>\nstruct extent<T[], N>\n{\n   static const std::size_t value = extent<T, N-1>::value;\n};\n\ntemplate<class T, std::size_t N>\nstruct extent<T[N], 0> \n{\n   static const std::size_t value = N;\n};\n \ntemplate<class T, std::size_t I, unsigned N>\nstruct extent<T[I], N>\n{\n   static const std::size_t value = extent<T, N-1>::value;\n};\n\n//////////////////////////////////////\n//      add_lvalue_reference\n//////////////////////////////////////\ntemplate<class T>\nstruct add_lvalue_reference\n{\n   typedef T& type;\n};\n\ntemplate<class T>\nstruct add_lvalue_reference<T&>\n{\n   typedef T& type;\n};\n\ntemplate<>\nstruct add_lvalue_reference<void>\n{\n   typedef void type;\n};\n\ntemplate<>\nstruct add_lvalue_reference<const void>\n{\n   typedef const void type;\n};\n\ntemplate<>\nstruct add_lvalue_reference<volatile void>\n{\n   typedef volatile void type;\n};\n\ntemplate<>\nstruct add_lvalue_reference<const volatile void>\n{\n   typedef const volatile void type;\n};\n\ntemplate<class T>\nstruct add_const_lvalue_reference\n{\n   typedef typename remove_reference<T>::type   t_unreferenced;\n   typedef const t_unreferenced                 t_unreferenced_const;\n   typedef typename add_lvalue_reference\n      <t_unreferenced_const>::type              type;\n};\n\n//////////////////////////////////////\n//             is_same\n//////////////////////////////////////\ntemplate<class T, class U>\nstruct is_same\n{\n   static const bool value = false;\n};\n \ntemplate<class T>\nstruct is_same<T, T>\n{\n   static const bool value = true;\n};\n\n//////////////////////////////////////\n//             is_pointer\n//////////////////////////////////////\ntemplate< class T >\nstruct is_pointer\n{\n    static const bool value = false;\n};\n\ntemplate< class T >\nstruct is_pointer<T*>\n{\n    static const bool value = true;\n};\n\n//////////////////////////////////////\n//             is_reference\n//////////////////////////////////////\ntemplate< class T >\nstruct is_reference\n{\n    static const bool value = false;\n};\n\ntemplate< class T >\nstruct is_reference<T&>\n{\n    static const bool value = true;\n};\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n\ntemplate< class T >\nstruct is_reference<T&&>\n{\n    static const bool value = true;\n};\n\n#endif\n\n//////////////////////////////////////\n//             is_lvalue_reference\n//////////////////////////////////////\ntemplate<class T>\nstruct is_lvalue_reference\n{\n    static const bool value = false;\n};\n\ntemplate<class T>\nstruct is_lvalue_reference<T&>\n{\n    static const bool value = true;\n};\n\n//////////////////////////////////////\n//          is_array\n//////////////////////////////////////\ntemplate<class T>\nstruct is_array\n{\n   static const bool value = false;\n};\n \ntemplate<class T>\nstruct is_array<T[]>\n{\n   static const bool value = true;\n};\n \ntemplate<class T, std::size_t N>\nstruct is_array<T[N]>\n{\n   static const bool value = true;\n};\n\n//////////////////////////////////////\n//          has_pointer_type\n//////////////////////////////////////\ntemplate <class T>\nstruct has_pointer_type\n{\n   struct two { char c[2]; };\n   template <class U> static two test(...);\n   template <class U> static char test(typename U::pointer* = 0);\n   static const bool value = sizeof(test<T>(0)) == 1;\n};\n\n//////////////////////////////////////\n//             pointer_type\n//////////////////////////////////////\ntemplate <class T, class D, bool = has_pointer_type<D>::value>\nstruct pointer_type_imp\n{\n    typedef typename D::pointer type;\n};\n\ntemplate <class T, class D>\nstruct pointer_type_imp<T, D, false>\n{\n    typedef typename remove_extent<T>::type* type;\n};\n\ntemplate <class T, class D>\nstruct pointer_type\n{\n    typedef typename pointer_type_imp\n      <typename remove_extent<T>::type, typename remove_reference<D>::type>::type type;\n};\n\n//////////////////////////////////////\n//           is_convertible\n//////////////////////////////////////\n#if defined(_MSC_VER) && (_MSC_VER >= 1400)\n\n//use intrinsic since in MSVC\n//overaligned types can't go through ellipsis\ntemplate <class T, class U>\nstruct is_convertible\n{\n   static const bool value = __is_convertible_to(T, U);\n};\n\n#else\n\ntemplate <class T, class U>\nclass is_convertible\n{\n   typedef typename add_lvalue_reference<T>::type t_reference;\n   typedef char true_t;\n   class false_t { char dummy[2]; };\n   static false_t dispatch(...);\n   static true_t  dispatch(U);\n   static t_reference       trigger();\n   public:\n   static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);\n};\n\n#endif\n\n//////////////////////////////////////\n//       is_unary_function\n//////////////////////////////////////\n#if defined(BOOST_MSVC) || defined(__BORLANDC_)\n#define BOOST_MOVE_TT_DECL __cdecl\n#else\n#define BOOST_MOVE_TT_DECL\n#endif\n\n#if defined(_MSC_EXTENSIONS) && !defined(__BORLAND__) && !defined(_WIN64) && !defined(_M_ARM) && !defined(UNDER_CE)\n#define BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS\n#endif\n\ntemplate <typename T>\nstruct is_unary_function_impl\n{  static const bool value = false; };\n\n// avoid duplicate definitions of is_unary_function_impl\n#ifndef BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS\n\ntemplate <typename R>\nstruct is_unary_function_impl<R (*)()>\n{  static const bool value = true;  };\n\ntemplate <typename R>\nstruct is_unary_function_impl<R (*)(...)>\n{  static const bool value = true;  };\n\n#else // BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS\n\ntemplate <typename R>\nstruct is_unary_function_impl<R (__stdcall*)()>\n{  static const bool value = true;  };\n\n#ifndef _MANAGED\n\ntemplate <typename R>\nstruct is_unary_function_impl<R (__fastcall*)()>\n{  static const bool value = true;  };\n\n#endif\n\ntemplate <typename R>\nstruct is_unary_function_impl<R (__cdecl*)()>\n{  static const bool value = true;  };\n\ntemplate <typename R>\nstruct is_unary_function_impl<R (__cdecl*)(...)>\n{  static const bool value = true;  };\n\n#endif\n\n// avoid duplicate definitions of is_unary_function_impl\n#ifndef BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS\n\ntemplate <typename R, class T0>\nstruct is_unary_function_impl<R (*)(T0)>\n{  static const bool value = true;  };\n\ntemplate <typename R, class T0>\nstruct is_unary_function_impl<R (*)(T0...)>\n{  static const bool value = true;  };\n\n#else // BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS\n\ntemplate <typename R, class T0>\nstruct is_unary_function_impl<R (__stdcall*)(T0)>\n{  static const bool value = true;  };\n\n#ifndef _MANAGED\n\ntemplate <typename R, class T0>\nstruct is_unary_function_impl<R (__fastcall*)(T0)>\n{  static const bool value = true;  };\n\n#endif\n\ntemplate <typename R, class T0>\nstruct is_unary_function_impl<R (__cdecl*)(T0)>\n{  static const bool value = true;  };\n\ntemplate <typename R, class T0>\nstruct is_unary_function_impl<R (__cdecl*)(T0...)>\n{  static const bool value = true;  };\n\n#endif\n\ntemplate <typename T>\nstruct is_unary_function_impl<T&>\n{  static const bool value = false; };\n\ntemplate<typename T>\nstruct is_unary_function\n{  static const bool value = is_unary_function_impl<T>::value;   };\n\n//////////////////////////////////////\n//       has_virtual_destructor\n//////////////////////////////////////\n#if (defined(BOOST_MSVC) && defined(BOOST_MSVC_FULL_VER) && (BOOST_MSVC_FULL_VER >=140050215))\\\n         || (defined(BOOST_INTEL) && defined(_MSC_VER) && (_MSC_VER >= 1500))\n#  define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n#elif defined(BOOST_CLANG) && defined(__has_feature)\n#  if __has_feature(has_virtual_destructor)\n#     define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n#  endif\n#elif defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) && !defined(BOOST_CLANG)\n#  define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n#elif defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600)\n#  define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n#elif defined(__CODEGEARC__)\n#  define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n#endif\n\n#ifdef BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR\n   template<class T>\n   struct has_virtual_destructor{   static const bool value = BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T);  };\n#else\n   //If no intrinsic is available you trust the programmer knows what is doing\n   template<class T>\n   struct has_virtual_destructor{   static const bool value = true;  };\n#endif\n\n//////////////////////////////////////\n//       missing_virtual_destructor\n//////////////////////////////////////\n\ntemplate< class T, class U\n        , bool enable =  is_convertible< U*, T*>::value &&\n                        !is_array<T>::value &&\n                        !is_same<typename remove_cv<T>::type, void>::value &&\n                        !is_same<typename remove_cv<U>::type, typename remove_cv<T>::type>::value\n        >\nstruct missing_virtual_destructor_default_delete\n{  static const bool value = !has_virtual_destructor<T>::value;  };\n\ntemplate<class T, class U>\nstruct missing_virtual_destructor_default_delete<T, U, false>\n{  static const bool value = false;  };\n\ntemplate<class Deleter, class U>\nstruct missing_virtual_destructor\n{  static const bool value = false;  };\n\ntemplate<class T, class U>\nstruct missing_virtual_destructor< ::boost::movelib::default_delete<T>, U >\n   : missing_virtual_destructor_default_delete<T, U>\n{};\n\n}  //namespace move_upmu {\n}  //namespace boost {\n\n#endif //#ifndef BOOST_MOVE_UNIQUE_PTR_DETAIL_META_UTILS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/detail/workaround.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/interprocess for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP\n#define BOOST_MOVE_DETAIL_WORKAROUND_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#if    !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\n   #define BOOST_MOVE_PERFECT_FORWARDING\n#endif\n\n#if defined(__has_feature)\n   #define BOOST_MOVE_HAS_FEATURE __has_feature\n#else\n   #define BOOST_MOVE_HAS_FEATURE(x) 0\n#endif\n\n#if BOOST_MOVE_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__)\n   #define BOOST_MOVE_ADDRESS_SANITIZER_ON\n#endif\n\n//Macros for documentation purposes. For code, expands to the argument\n#define BOOST_MOVE_IMPDEF(TYPE) TYPE\n#define BOOST_MOVE_SEEDOC(TYPE) TYPE\n#define BOOST_MOVE_DOC0PTR(TYPE) TYPE\n#define BOOST_MOVE_DOC1ST(TYPE1, TYPE2) TYPE2\n#define BOOST_MOVE_I ,\n#define BOOST_MOVE_DOCIGN(T1) T1\n\n#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 5) && !defined(__clang__)\n   //Pre-standard rvalue binding rules\n   #define BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES\n#elif defined(_MSC_VER) && (_MSC_VER == 1600)\n   //Standard rvalue binding rules but with some bugs\n   #define BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG\n   #define BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG\n#elif defined(_MSC_VER) && (_MSC_VER == 1700)\n   #define BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG\n#endif\n\n#endif   //#ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/iterator.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2012-2012.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n\n#ifndef BOOST_MOVE_ITERATOR_HPP\n#define BOOST_MOVE_ITERATOR_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n#include <boost/move/detail/iterator_traits.hpp>\n#include <boost/move/utility_core.hpp>\n\nnamespace boost {\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                            move_iterator\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! Class template move_iterator is an iterator adaptor with the same behavior\n//! as the underlying iterator except that its dereference operator implicitly\n//! converts the value returned by the underlying iterator's dereference operator\n//! to an rvalue reference. Some generic algorithms can be called with move\n//! iterators to replace copying with moving.\ntemplate <class It>\nclass move_iterator\n{\n   public:\n   typedef It                                                              iterator_type;\n   typedef typename boost::movelib::iterator_traits<iterator_type>::value_type        value_type;\n   #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_DOXYGEN_INVOKED)\n   typedef value_type &&                                                   reference;\n   #else\n   typedef typename ::boost::move_detail::if_\n      < ::boost::has_move_emulation_enabled<value_type>\n      , ::boost::rv<value_type>&\n      , value_type & >::type                                               reference;\n   #endif\n   typedef It                                                              pointer;\n   typedef typename boost::movelib::iterator_traits<iterator_type>::difference_type   difference_type;\n   typedef typename boost::movelib::iterator_traits<iterator_type>::iterator_category iterator_category;\n\n   move_iterator()\n   {}\n\n   explicit move_iterator(It i)\n      :  m_it(i)\n   {}\n\n   template <class U>\n   move_iterator(const move_iterator<U>& u)\n      :  m_it(u.base())\n   {}\n\n   iterator_type base() const\n   {  return m_it;   }\n\n   reference operator*() const\n   {\n      #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)\n      return *m_it;\n      #else\n      return ::boost::move(*m_it);\n      #endif\n   }\n\n   pointer   operator->() const\n   {  return m_it;   }\n\n   move_iterator& operator++()\n   {  ++m_it; return *this;   }\n\n   move_iterator<iterator_type>  operator++(int)\n   {  move_iterator<iterator_type> tmp(*this); ++(*this); return tmp;   }\n\n   move_iterator& operator--()\n   {  --m_it; return *this;   }\n\n   move_iterator<iterator_type>  operator--(int)\n   {  move_iterator<iterator_type> tmp(*this); --(*this); return tmp;   }\n\n   move_iterator<iterator_type>  operator+ (difference_type n) const\n   {  return move_iterator<iterator_type>(m_it + n);  }\n\n   move_iterator& operator+=(difference_type n)\n   {  m_it += n; return *this;   }\n\n   move_iterator<iterator_type>  operator- (difference_type n) const\n   {  return move_iterator<iterator_type>(m_it - n);  }\n\n   move_iterator& operator-=(difference_type n)\n   {  m_it -= n; return *this;   }\n\n   reference operator[](difference_type n) const\n   {\n      #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)\n      return m_it[n];\n      #else\n      return ::boost::move(m_it[n]);\n      #endif\n   }\n\n   friend bool operator==(const move_iterator& x, const move_iterator& y)\n   {  return x.base() == y.base();  }\n\n   friend bool operator!=(const move_iterator& x, const move_iterator& y)\n   {  return x.base() != y.base();  }\n\n   friend bool operator< (const move_iterator& x, const move_iterator& y)\n   {  return x.base() < y.base();   }\n\n   friend bool operator<=(const move_iterator& x, const move_iterator& y)\n   {  return x.base() <= y.base();  }\n\n   friend bool operator> (const move_iterator& x, const move_iterator& y)\n   {  return x.base() > y.base();  }\n\n   friend bool operator>=(const move_iterator& x, const move_iterator& y)\n   {  return x.base() >= y.base();  }\n\n   friend difference_type operator-(const move_iterator& x, const move_iterator& y)\n   {  return x.base() - y.base();   }\n\n   friend move_iterator operator+(difference_type n, const move_iterator& x)\n   {  return move_iterator(x.base() + n);   }\n\n   private:\n   It m_it;\n};\n\n//is_move_iterator\nnamespace move_detail {\n\ntemplate <class I>\nstruct is_move_iterator\n{\n   static const bool value = false;\n};\n\ntemplate <class I>\nstruct is_move_iterator< ::boost::move_iterator<I> >\n{\n   static const bool value = true;\n};\n\n}  //namespace move_detail {\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                            move_iterator\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//!\n//! <b>Returns</b>: move_iterator<It>(i).\ntemplate<class It>\ninline move_iterator<It> make_move_iterator(const It &it)\n{  return move_iterator<It>(it); }\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                         back_move_insert_iterator\n//\n//////////////////////////////////////////////////////////////////////////////\n\n\n//! A move insert iterator that move constructs elements at the\n//! back of a container\ntemplate <typename C> // C models Container\nclass back_move_insert_iterator\n{\n   C* container_m;\n\n   public:\n   typedef C                           container_type;\n   typedef typename C::value_type      value_type;\n   typedef typename C::reference       reference;\n   typedef typename C::pointer         pointer;\n   typedef typename C::difference_type difference_type;\n   typedef std::output_iterator_tag    iterator_category;\n\n   explicit back_move_insert_iterator(C& x) : container_m(&x) { }\n\n   back_move_insert_iterator& operator=(reference x)\n   { container_m->push_back(boost::move(x)); return *this; }\n\n   back_move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)\n   {  reference rx = x; return this->operator=(rx);  }\n\n   back_move_insert_iterator& operator*()     { return *this; }\n   back_move_insert_iterator& operator++()    { return *this; }\n   back_move_insert_iterator& operator++(int) { return *this; }\n};\n\n//!\n//! <b>Returns</b>: back_move_insert_iterator<C>(x).\ntemplate <typename C> // C models Container\ninline back_move_insert_iterator<C> back_move_inserter(C& x)\n{\n   return back_move_insert_iterator<C>(x);\n}\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                         front_move_insert_iterator\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! A move insert iterator that move constructs elements int the\n//! front of a container\ntemplate <typename C> // C models Container\nclass front_move_insert_iterator\n{\n   C* container_m;\n\npublic:\n   typedef C                           container_type;\n   typedef typename C::value_type      value_type;\n   typedef typename C::reference       reference;\n   typedef typename C::pointer         pointer;\n   typedef typename C::difference_type difference_type;\n   typedef std::output_iterator_tag    iterator_category;\n\n   explicit front_move_insert_iterator(C& x) : container_m(&x) { }\n\n   front_move_insert_iterator& operator=(reference x)\n   { container_m->push_front(boost::move(x)); return *this; }\n\n   front_move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)\n   {  reference rx = x; return this->operator=(rx);  }\n\n   front_move_insert_iterator& operator*()     { return *this; }\n   front_move_insert_iterator& operator++()    { return *this; }\n   front_move_insert_iterator& operator++(int) { return *this; }\n};\n\n//!\n//! <b>Returns</b>: front_move_insert_iterator<C>(x).\ntemplate <typename C> // C models Container\ninline front_move_insert_iterator<C> front_move_inserter(C& x)\n{\n   return front_move_insert_iterator<C>(x);\n}\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//                         insert_move_iterator\n//\n//////////////////////////////////////////////////////////////////////////////\ntemplate <typename C> // C models Container\nclass move_insert_iterator\n{\n   C* container_m;\n   typename C::iterator pos_;\n\n   public:\n   typedef C                           container_type;\n   typedef typename C::value_type      value_type;\n   typedef typename C::reference       reference;\n   typedef typename C::pointer         pointer;\n   typedef typename C::difference_type difference_type;\n   typedef std::output_iterator_tag    iterator_category;\n\n   explicit move_insert_iterator(C& x, typename C::iterator pos)\n      : container_m(&x), pos_(pos)\n   {}\n\n   move_insert_iterator& operator=(reference x)\n   {\n      pos_ = container_m->insert(pos_, ::boost::move(x));\n      ++pos_;\n      return *this;\n   }\n\n   move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)\n   {  reference rx = x; return this->operator=(rx);  }\n\n   move_insert_iterator& operator*()     { return *this; }\n   move_insert_iterator& operator++()    { return *this; }\n   move_insert_iterator& operator++(int) { return *this; }\n};\n\n//!\n//! <b>Returns</b>: move_insert_iterator<C>(x, it).\ntemplate <typename C> // C models Container\ninline move_insert_iterator<C> move_inserter(C& x, typename C::iterator it)\n{\n   return move_insert_iterator<C>(x, it);\n}\n\n}  //namespace boost {\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif //#ifndef BOOST_MOVE_ITERATOR_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/make_unique.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2006-2014. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef BOOST_MOVE_MAKE_UNIQUE_HPP_INCLUDED\n#define BOOST_MOVE_MAKE_UNIQUE_HPP_INCLUDED\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n#include <boost/move/detail/workaround.hpp>\n#include <boost/move/utility_core.hpp>\n#include <boost/move/unique_ptr.hpp>\n#include <cstddef>   //for std::size_t\n#include <boost/move/detail/unique_ptr_meta_utils.hpp>\n#ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#  include <boost/move/detail/fwd_macros.hpp>\n#endif\n\n//!\\file\n//! Defines \"make_unique\" functions, which are factories to create instances\n//! of unique_ptr depending on the passed arguments.\n//!\n//! This header can be a bit heavyweight in C++03 compilers due to the use of the\n//! preprocessor library, that's why it's a a separate header from <tt>unique_ptr.hpp</tt>\n \n#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\nnamespace std {   //no namespace versioning in clang+libc++\n\nstruct nothrow_t;\n\n}  //namespace std {\n\nnamespace boost{\nnamespace move_upmu {\n\n//Compile time switch between\n//single element, unknown bound array\n//and known bound array\ntemplate<class T>\nstruct unique_ptr_if\n{\n   typedef ::boost::movelib::unique_ptr<T> t_is_not_array;\n};\n\ntemplate<class T>\nstruct unique_ptr_if<T[]>\n{\n   typedef ::boost::movelib::unique_ptr<T[]> t_is_array_of_unknown_bound;\n};\n\ntemplate<class T, std::size_t N>\nstruct unique_ptr_if<T[N]>\n{\n   typedef void t_is_array_of_known_bound;\n};\n\ntemplate <int Dummy = 0>\nstruct nothrow_holder\n{\n   static std::nothrow_t *pnothrow;   \n};\n\ntemplate <int Dummy>\nstd::nothrow_t *nothrow_holder<Dummy>::pnothrow;\n\n}  //namespace move_upmu {\n}  //namespace boost{\n\n#endif   //!defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\nnamespace boost{\nnamespace movelib {\n\n#if defined(BOOST_MOVE_DOXYGEN_INVOKED) || !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is not an array.\n//!\n//! <b>Returns</b>: <tt>unique_ptr<T>(new T(std::forward<Args>(args)...))</tt>.\ntemplate<class T, class... Args>\ninline BOOST_MOVE_DOC1ST(unique_ptr<T>, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_not_array)\n      make_unique(BOOST_FWD_REF(Args)... args)\n{  return unique_ptr<T>(new T(::boost::forward<Args>(args)...));  }\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is not an array.\n//!\n//! <b>Returns</b>: <tt>unique_ptr<T>(new T(std::nothrow)(std::forward<Args>(args)...))</tt>.\ntemplate<class T, class... Args>\ninline BOOST_MOVE_DOC1ST(unique_ptr<T>, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_not_array)\n      make_unique_nothrow(BOOST_FWD_REF(Args)... args)\n{  return unique_ptr<T>(new (*boost::move_upmu::nothrow_holder<>::pnothrow)T(::boost::forward<Args>(args)...));  }\n\n#else\n   #define BOOST_MOVE_MAKE_UNIQUE_CODE(N)\\\n      template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N>\\\n      typename ::boost::move_upmu::unique_ptr_if<T>::t_is_not_array\\\n         make_unique( BOOST_MOVE_UREF##N)\\\n      {  return unique_ptr<T>( new T( BOOST_MOVE_FWD##N ) );  }\\\n      \\\n      template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N>\\\n      typename ::boost::move_upmu::unique_ptr_if<T>::t_is_not_array\\\n         make_unique_nothrow( BOOST_MOVE_UREF##N)\\\n      {  return unique_ptr<T>( new (*boost::move_upmu::nothrow_holder<>::pnothrow)T ( BOOST_MOVE_FWD##N ) );  }\\\n      //\n   BOOST_MOVE_ITERATE_0TO9(BOOST_MOVE_MAKE_UNIQUE_CODE)\n   #undef BOOST_MOVE_MAKE_UNIQUE_CODE\n\n#endif\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is not an array.\n//!\n//! <b>Returns</b>: <tt>unique_ptr<T>(new T)</tt> (default initialization)\ntemplate<class T>\ninline BOOST_MOVE_DOC1ST(unique_ptr<T>, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_not_array)\n      make_unique_definit()\n{\n    return unique_ptr<T>(new T);\n}\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is not an array.\n//!\n//! <b>Returns</b>: <tt>unique_ptr<T>(new T(std::nothrow)</tt> (default initialization)\ntemplate<class T>\ninline BOOST_MOVE_DOC1ST(unique_ptr<T>, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_not_array)\n      make_unique_nothrow_definit()\n{\n    return unique_ptr<T>(new (*boost::move_upmu::nothrow_holder<>::pnothrow)T);\n}\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is an array of \n//!   unknown bound.\n//!\n//! <b>Returns</b>: <tt>unique_ptr<T>(new remove_extent_t<T>[n]())</tt> (value initialization)\ntemplate<class T>\ninline BOOST_MOVE_DOC1ST(unique_ptr<T>, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_array_of_unknown_bound)\n      make_unique(std::size_t n)\n{\n    typedef typename ::boost::move_upmu::remove_extent<T>::type U;\n    return unique_ptr<T>(new U[n]());\n}\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is an array of \n//!   unknown bound.\n//!\n//! <b>Returns</b>: <tt>unique_ptr<T>(new (std::nothrow)remove_extent_t<T>[n]())</tt> (value initialization)\ntemplate<class T>\ninline BOOST_MOVE_DOC1ST(unique_ptr<T>, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_array_of_unknown_bound)\n      make_unique_nothrow(std::size_t n)\n{\n    typedef typename ::boost::move_upmu::remove_extent<T>::type U;\n    return unique_ptr<T>(new (*boost::move_upmu::nothrow_holder<>::pnothrow)U[n]());\n}\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is an array of \n//!   unknown bound.\n//!\n//! <b>Returns</b>: <tt>unique_ptr<T>(new remove_extent_t<T>[n])</tt> (default initialization)\ntemplate<class T>\ninline BOOST_MOVE_DOC1ST(unique_ptr<T>, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_array_of_unknown_bound)\n      make_unique_definit(std::size_t n)\n{\n    typedef typename ::boost::move_upmu::remove_extent<T>::type U;\n    return unique_ptr<T>(new U[n]);\n}\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is an array of \n//!   unknown bound.\n//!\n//! <b>Returns</b>: <tt>unique_ptr<T>(new (std::nothrow)remove_extent_t<T>[n])</tt> (default initialization)\ntemplate<class T>\ninline BOOST_MOVE_DOC1ST(unique_ptr<T>, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_array_of_unknown_bound)\n      make_unique_nothrow_definit(std::size_t n)\n{\n    typedef typename ::boost::move_upmu::remove_extent<T>::type U;\n    return unique_ptr<T>(new (*boost::move_upmu::nothrow_holder<>::pnothrow) U[n]);\n}\n\n#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is\n//!   an array of known bound.\ntemplate<class T, class... Args>\ninline BOOST_MOVE_DOC1ST(unspecified, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_array_of_known_bound)\n      make_unique(BOOST_FWD_REF(Args) ...) = delete;\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is\n//!   an array of known bound.\ntemplate<class T, class... Args>\ninline BOOST_MOVE_DOC1ST(unspecified, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_array_of_known_bound)\n      make_unique_definit(BOOST_FWD_REF(Args) ...) = delete;\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is\n//!   an array of known bound.\ntemplate<class T, class... Args>\ninline BOOST_MOVE_DOC1ST(unspecified, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_array_of_known_bound)\n      make_unique_nothrow(BOOST_FWD_REF(Args) ...) = delete;\n\n//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is\n//!   an array of known bound.\ntemplate<class T, class... Args>\ninline BOOST_MOVE_DOC1ST(unspecified, \n   typename ::boost::move_upmu::unique_ptr_if<T>::t_is_array_of_known_bound)\n      make_unique_nothrow_definit(BOOST_FWD_REF(Args) ...) = delete;\n\n#endif\n\n}  //namespace movelib {\n\n}  //namespace boost{\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif   //#ifndef BOOST_MOVE_MAKE_UNIQUE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/move.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright David Abrahams, Vicente Botet 2009.\n// (C) Copyright Ion Gaztanaga 2009-2012.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n//! A general library header that includes\n//! the rest of top-level headers.\n\n#ifndef BOOST_MOVE_MOVE_HPP\n#define BOOST_MOVE_MOVE_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n#include <boost/move/utility.hpp>\n#include <boost/move/iterator.hpp>\n#include <boost/move/traits.hpp>\n#include <boost/move/algorithm.hpp>\n#include <boost/move/detail/config_end.hpp>\n\n#endif //#ifndef BOOST_MOVE_MOVE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/traits.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2009-2012.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n\n#ifndef BOOST_MOVE_TRAITS_HPP\n#define BOOST_MOVE_TRAITS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n#include <boost/move/core.hpp>\n#endif\n#include <boost/move/detail/meta_utils.hpp>\n#include <boost/move/detail/type_traits.hpp>\n\nnamespace boost {\n\n//! If this trait yields to true\n//! (<i>has_trivial_destructor_after_move &lt;T&gt;::value == true</i>)\n//! means that if T is used as argument of a move construction/assignment,\n//! there is no need to call T's destructor.\n//! This optimization tipically is used to improve containers' performance.\n//!\n//! By default this trait is true if the type has trivial destructor,\n//! every class should specialize this trait if it wants to improve performance\n//! when inserted in containers.\ntemplate <class T>\nstruct has_trivial_destructor_after_move\n   : ::boost::move_detail::is_trivially_destructible<T>\n{};\n\n//! By default this traits returns\n//! <pre>boost::is_nothrow_move_constructible<T>::value && boost::is_nothrow_move_assignable<T>::value </pre>.\n//! Classes with non-throwing move constructor\n//! and assignment can specialize this trait to obtain some performance improvements.\ntemplate <class T>\nstruct has_nothrow_move\n{\n   static const bool value = boost::move_detail::is_nothrow_move_constructible<T>::value &&\n                             boost::move_detail::is_nothrow_move_assignable<T>::value;\n};\n\nnamespace move_detail {\n\ntemplate <class T>\nstruct is_nothrow_move_constructible_or_uncopyable\n{\n   //The standard requires is_nothrow_move_constructible for move_if_noexcept\n   //but a user (usually in C++03) might specialize has_nothrow_move which includes it\n   static const bool value = is_nothrow_move_constructible<T>::value ||\n                             has_nothrow_move<T>::value ||\n                            !is_copy_constructible<T>::value;\n};\n\n}  //move_detail {\n}  //namespace boost {\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif //#ifndef BOOST_MOVE_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/unique_ptr.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef BOOST_MOVE_UNIQUE_PTR_HPP_INCLUDED\n#define BOOST_MOVE_UNIQUE_PTR_HPP_INCLUDED\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n#include <boost/move/detail/workaround.hpp>\n#include <boost/move/detail/unique_ptr_meta_utils.hpp>\n#include <boost/move/default_delete.hpp>\n#include <boost/move/utility_core.hpp>\n#include <boost/move/adl_move_swap.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/assert.hpp>\n\n#include <cstddef>   //For std::nullptr_t and std::size_t\n\n//!\\file\n//! Describes the smart pointer unique_ptr, a drop-in replacement for std::unique_ptr,\n//! usable also from C++03 compilers.\n//!\n//! Main differences from std::unique_ptr to avoid heavy dependencies,\n//! specially in C++03 compilers:\n//!   - <tt>operator < </tt> uses pointer <tt>operator < </tt>instead of <tt>std::less<common_type></tt>. \n//!      This avoids dependencies on <tt>std::common_type</tt> and <tt>std::less</tt>\n//!      (<tt><type_traits>/<functional></tt> headers). In C++03 this avoid pulling Boost.Typeof and other\n//!      cascading dependencies. As in all Boost platforms <tt>operator <</tt> on raw pointers and\n//!      other smart pointers provides strict weak ordering in practice this should not be a problem for users.\n//!   - assignable from literal 0 for compilers without nullptr\n//!   - <tt>unique_ptr<T[]></tt> is constructible and assignable from <tt>unique_ptr<U[]></tt> if\n//!      cv-less T and cv-less U are the same type and T is more CV qualified than U.\n\nnamespace boost{\n// @cond\nnamespace move_upd {\n\n////////////////////////////////////////////\n//          deleter types\n////////////////////////////////////////////\n#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\ntemplate <class T>\nclass is_noncopyable\n{\n   typedef char true_t;\n   class false_t { char dummy[2]; };\n   template<class U> static false_t dispatch(...);\n   template<class U> static true_t  dispatch(typename U::boost_move_no_copy_constructor_or_assign*);\n   public:\n   static const bool value = sizeof(dispatch<T>(0)) == sizeof(true_t);\n};\n#endif   //defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n\ntemplate <class D>\nstruct deleter_types\n{\n   typedef typename bmupmu::add_lvalue_reference<D>::type            del_ref;\n   typedef typename bmupmu::add_const_lvalue_reference<D>::type      del_cref;\n   #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n   typedef typename bmupmu::if_c\n      < bmupmu::is_lvalue_reference<D>::value, D, del_cref >::type   deleter_arg_type1;\n   typedef typename bmupmu::remove_reference<D>::type &&             deleter_arg_type2;\n   #else\n   typedef typename bmupmu::if_c\n      < is_noncopyable<D>::value, bmupmu::nat, del_cref>::type       non_ref_deleter_arg1;\n   typedef typename bmupmu::if_c< bmupmu::is_lvalue_reference<D>::value\n                       , D, non_ref_deleter_arg1 >::type          deleter_arg_type1;\n   typedef ::boost::rv<D> &                                       deleter_arg_type2;\n   #endif\n};\n\n////////////////////////////////////////////\n//          unique_ptr_data\n////////////////////////////////////////////\ntemplate <class P, class D, bool = bmupmu::is_unary_function<D>::value || bmupmu::is_reference<D>::value >\nstruct unique_ptr_data\n{\n   typedef typename deleter_types<D>::deleter_arg_type1  deleter_arg_type1;\n   typedef typename deleter_types<D>::del_ref            del_ref;\n   typedef typename deleter_types<D>::del_cref           del_cref;\n\n   unique_ptr_data() BOOST_NOEXCEPT\n      : m_p(), d()\n   {}\n\n   explicit unique_ptr_data(P p) BOOST_NOEXCEPT\n      : m_p(p), d()\n   {}\n\n   unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT\n      : m_p(p), d(d1)\n   {}\n\n   template <class U>\n   unique_ptr_data(P p, BOOST_FWD_REF(U) d1) BOOST_NOEXCEPT\n      : m_p(p), d(::boost::forward<U>(d1))\n   {}\n\n   del_ref deleter()       { return d; }\n   del_cref deleter() const{ return d; }\n\n   P m_p;\n   D d;\n\n   private:\n   unique_ptr_data& operator=(const unique_ptr_data&);\n   unique_ptr_data(const unique_ptr_data&);\n};\n\ntemplate <class P, class D>\nstruct unique_ptr_data<P, D, false>\n   : private D\n{\n   typedef typename deleter_types<D>::deleter_arg_type1  deleter_arg_type1;\n   typedef typename deleter_types<D>::del_ref            del_ref;\n   typedef typename deleter_types<D>::del_cref           del_cref;\n\n   unique_ptr_data() BOOST_NOEXCEPT\n      : D(), m_p()\n   {}\n\n   explicit unique_ptr_data(P p) BOOST_NOEXCEPT\n      : D(), m_p(p)\n   {}\n\n   unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT\n      : D(d1), m_p(p)\n   {}\n\n   template <class U>\n   unique_ptr_data(P p, BOOST_FWD_REF(U) d) BOOST_NOEXCEPT\n      : D(::boost::forward<U>(d)), m_p(p)\n   {}\n\n   del_ref deleter()        BOOST_NOEXCEPT   {  return static_cast<del_ref>(*this);   }\n   del_cref deleter() const BOOST_NOEXCEPT   {  return static_cast<del_cref>(*this);  }\n\n   P m_p;\n\n   private:\n   unique_ptr_data& operator=(const unique_ptr_data&);\n   unique_ptr_data(const unique_ptr_data&);\n};\n\n////////////////////////////////////////////\n//          is_unique_ptr_convertible\n////////////////////////////////////////////\n\n//Although non-standard, we avoid using pointer_traits\n//to avoid heavy dependencies\ntemplate <typename T>\nstruct get_element_type\n{\n   struct DefaultWrap { typedef bmupmu::natify<T> element_type; };\n   template <typename X>   static char test(int, typename X::element_type*);\n   template <typename X>   static int test(...);\n   static const bool value = (1 == sizeof(test<T>(0, 0)));\n   typedef typename bmupmu::if_c<value, T, DefaultWrap>::type::element_type type;\n};\n\ntemplate<class T>\nstruct get_element_type<T*>\n{\n   typedef T type;\n};\n\ntemplate<class T>\nstruct get_cvelement\n   : bmupmu::remove_cv<typename get_element_type<T>::type>\n{};\n\ntemplate <class P1, class P2>\nstruct is_same_cvelement_and_convertible\n{\n   typedef typename bmupmu::remove_reference<P1>::type arg1;\n   typedef typename bmupmu::remove_reference<P2>::type arg2;\n   static const bool same_cvless =\n      bmupmu::is_same<typename get_cvelement<arg1>::type,typename get_cvelement<arg2>::type>::value;\n   static const bool value = same_cvless && bmupmu::is_convertible<arg1, arg2>::value;\n};\n\ntemplate<bool IsArray, class FromPointer, class ThisPointer>\nstruct is_unique_ptr_convertible\n   : is_same_cvelement_and_convertible<FromPointer, ThisPointer>\n{};\n\ntemplate<class FromPointer, class ThisPointer>\nstruct is_unique_ptr_convertible<false, FromPointer, ThisPointer>\n   : bmupmu::is_convertible<FromPointer, ThisPointer>\n{};\n\n////////////////////////////////////////\n////     enable_up_moveconv_assign\n////////////////////////////////////////\n\ntemplate<class T, class FromPointer, class ThisPointer, class Type = bmupmu::nat>\nstruct enable_up_ptr\n   : bmupmu::enable_if_c< is_unique_ptr_convertible\n      < bmupmu::is_array<T>::value, FromPointer, ThisPointer>::value, Type>\n{};\n\n////////////////////////////////////////\n////     enable_up_moveconv_assign\n////////////////////////////////////////\n\ntemplate<class T, class D, class U, class E>\nstruct unique_moveconvert_assignable\n{\n   static const bool t_is_array = bmupmu::is_array<T>::value;\n   static const bool value =\n      t_is_array == bmupmu::is_array<U>::value &&\n      bmupmu::extent<T>::value == bmupmu::extent<U>::value &&\n      is_unique_ptr_convertible\n         < t_is_array\n         , typename bmupmu::pointer_type<U, E>::type, typename bmupmu::pointer_type<T, D>::type\n         >::value;\n};\n\ntemplate<class T, class D, class U, class E, std::size_t N>\nstruct unique_moveconvert_assignable<T[], D, U[N], E>\n   : unique_moveconvert_assignable<T[], D, U[], E>\n{};\n\ntemplate<class T, class D, class U, class E, class Type = bmupmu::nat>\nstruct enable_up_moveconv_assign\n   : bmupmu::enable_if_c<unique_moveconvert_assignable<T, D, U, E>::value, Type>\n{};\n\n////////////////////////////////////////\n////     enable_up_moveconv_constr\n////////////////////////////////////////\n\ntemplate<class D, class E, bool IsReference = bmupmu::is_reference<D>::value>\nstruct unique_deleter_is_initializable\n   : bmupmu::is_same<D, E>\n{};\n\ntemplate <class T, class U>\nclass is_rvalue_convertible\n{\n   #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n   typedef typename bmupmu::remove_reference<T>::type&& t_from;\n   #else\n   typedef typename bmupmu::if_c\n      < ::boost::has_move_emulation_enabled<T>::value && !bmupmu::is_reference<T>::value\n      , ::boost::rv<T>&\n      , typename bmupmu::add_lvalue_reference<T>::type\n      >::type t_from;\n   #endif\n\n   typedef char true_t;\n   class false_t { char dummy[2]; };\n   static false_t dispatch(...);\n   static true_t  dispatch(U);\n   static t_from trigger();\n   public:\n   static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);\n};\n\ntemplate<class D, class E>\nstruct unique_deleter_is_initializable<D, E, false>\n{\n   #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n   //Clang has some problems with is_rvalue_convertible with non-copyable types\n   //so use intrinsic if available\n   #if defined(BOOST_CLANG)\n      #if __has_feature(is_convertible_to)\n      static const bool value = __is_convertible_to(E, D);\n      #else\n      static const bool value = is_rvalue_convertible<E, D>::value;\n      #endif\n   #else\n   static const bool value = is_rvalue_convertible<E, D>::value;\n   #endif\n\n   #else //!defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n   //No hope for compilers with move emulation for now. In several compilers is_convertible\n   // leads to errors, so just move the Deleter and see if the conversion works\n   static const bool value = true;  /*is_rvalue_convertible<E, D>::value*/\n   #endif\n};\n\ntemplate<class T, class D, class U, class E, class Type = bmupmu::nat>\nstruct enable_up_moveconv_constr\n   : bmupmu::enable_if_c\n      < unique_moveconvert_assignable<T, D, U, E>::value && unique_deleter_is_initializable<D, E>::value\n      , Type>\n{};\n\n}  //namespace move_upd {\n// @endcond\n\nnamespace movelib {\n\n//! A unique pointer is an object that owns another object and\n//! manages that other object through a pointer.\n//! \n//! More precisely, a unique pointer is an object u that stores a pointer to a second object p and will dispose\n//! of p when u is itself destroyed (e.g., when leaving block scope). In this context, u is said to own p.\n//! \n//! The mechanism by which u disposes of p is known as p's associated deleter, a function object whose correct\n//! invocation results in p's appropriate disposition (typically its deletion).\n//! \n//! Let the notation u.p denote the pointer stored by u, and let u.d denote the associated deleter. Upon request,\n//! u can reset (replace) u.p and u.d with another pointer and deleter, but must properly dispose of its owned\n//! object via the associated deleter before such replacement is considered completed.\n//! \n//! Additionally, u can, upon request, transfer ownership to another unique pointer u2. Upon completion of\n//! such a transfer, the following postconditions hold:\n//!   - u2.p is equal to the pre-transfer u.p,\n//!   - u.p is equal to nullptr, and\n//!   - if the pre-transfer u.d maintained state, such state has been transferred to u2.d.\n//! \n//! As in the case of a reset, u2 must properly dispose of its pre-transfer owned object via the pre-transfer\n//! associated deleter before the ownership transfer is considered complete.\n//! \n//! Each object of a type U instantiated from the unique_ptr template specified in this subclause has the strict\n//! ownership semantics, specified above, of a unique pointer. In partial satisfaction of these semantics, each\n//! such U is MoveConstructible and MoveAssignable, but is not CopyConstructible nor CopyAssignable.\n//! The template parameter T of unique_ptr may be an incomplete type.\n//! \n//! The uses of unique_ptr include providing exception safety for dynamically allocated memory, passing\n//! ownership of dynamically allocated memory to a function, and returning dynamically allocated memory from\n//! a function.\n//!\n//! If T is an array type (e.g. unique_ptr<MyType[]>) the interface is slightly altered:\n//!   - Pointers to types derived from T are rejected by the constructors, and by reset.\n//!   - The observers <tt>operator*</tt> and <tt>operator-></tt> are not provided.\n//!   - The indexing observer <tt>operator[]</tt> is provided.\n//!\n//! \\tparam T Provides the type of the stored pointer.\n//! \\tparam D The deleter type:\n//!   -  The default type for the template parameter D is default_delete. A client-supplied template argument\n//!      D shall be a function object type, lvalue-reference to function, or lvalue-reference to function object type\n//!      for which, given a value d of type D and a value ptr of type unique_ptr<T, D>::pointer, the expression\n//!      d(ptr) is valid and has the effect of disposing of the pointer as appropriate for that deleter.\n//!   -  If the deleter's type D is not a reference type, D shall satisfy the requirements of Destructible.\n//!   -  If the type <tt>remove_reference<D>::type::pointer</tt> exists, it shall satisfy the requirements of NullablePointer.\ntemplate <class T, class D = default_delete<T> >\nclass unique_ptr\n{\n   #if defined(BOOST_MOVE_DOXYGEN_INVOKED)\n   public:\n   unique_ptr(const unique_ptr&) = delete;\n   unique_ptr& operator=(const unique_ptr&) = delete;\n   private:\n   #else\n   BOOST_MOVABLE_BUT_NOT_COPYABLE(unique_ptr)\n\n   typedef bmupmu::pointer_type<T, D >                            pointer_type_obtainer;\n   typedef bmupd::unique_ptr_data\n      <typename pointer_type_obtainer::type, D>                data_type;\n   typedef typename bmupd::deleter_types<D>::deleter_arg_type1 deleter_arg_type1;\n   typedef typename bmupd::deleter_types<D>::deleter_arg_type2 deleter_arg_type2;\n   data_type m_data;\n   #endif\n\n   public:\n   //! If the type <tt>remove_reference<D>::type::pointer</tt> exists, then it shall be a\n   //! synonym for <tt>remove_reference<D>::type::pointer</tt>. Otherwise it shall be a\n   //! synonym for T*.\n   typedef typename BOOST_MOVE_SEEDOC(pointer_type_obtainer::type) pointer;\n   //! If T is an array type, then element_type is equal to T. Otherwise, if T is a type\n   //! in the form U[], element_type is equal to U.\n   typedef typename BOOST_MOVE_SEEDOC(bmupmu::remove_extent<T>::type) element_type;\n   typedef D deleter_type;\n\n   //! <b>Requires</b>: D shall satisfy the requirements of DefaultConstructible, and\n   //!   that construction shall not throw an exception.\n   //!\n   //! <b>Effects</b>: Constructs a unique_ptr object that owns nothing, value-initializing the\n   //!   stored pointer and the stored deleter.\n   //!\n   //! <b>Postconditions</b>: <tt>get() == nullptr</tt>. <tt>get_deleter()</tt> returns a reference to the stored deleter.\n   //!\n   //! <b>Remarks</b>: If this constructor is instantiated with a pointer type or reference type\n   //!   for the template argument D, the program is ill-formed.   \n   BOOST_CONSTEXPR unique_ptr() BOOST_NOEXCEPT\n      : m_data()\n   {\n      //If this constructor is instantiated with a pointer type or reference type\n      //for the template argument D, the program is ill-formed.\n      BOOST_STATIC_ASSERT(!bmupmu::is_pointer<D>::value);\n      BOOST_STATIC_ASSERT(!bmupmu::is_reference<D>::value);\n   }\n\n   //! <b>Effects</b>: Same as <tt>unique_ptr()</tt> (default constructor).\n   //! \n   BOOST_CONSTEXPR unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT\n      : m_data()\n   {\n      //If this constructor is instantiated with a pointer type or reference type\n      //for the template argument D, the program is ill-formed.\n      BOOST_STATIC_ASSERT(!bmupmu::is_pointer<D>::value);\n      BOOST_STATIC_ASSERT(!bmupmu::is_reference<D>::value);\n   }\n\n   //! <b>Requires</b>: D shall satisfy the requirements of DefaultConstructible, and\n   //!   that construction shall not throw an exception.\n   //!\n   //! <b>Effects</b>: Constructs a unique_ptr which owns p, initializing the stored pointer \n   //!   with p and value initializing the stored deleter.\n   //!\n   //! <b>Postconditions</b>: <tt>get() == p</tt>. <tt>get_deleter()</tt> returns a reference to the stored deleter.\n   //!\n   //! <b>Remarks</b>: If this constructor is instantiated with a pointer type or reference type\n   //!   for the template argument D, the program is ill-formed.\n   //!   This constructor shall not participate in overload resolution unless:\n   //!      - If T is not an array type and Pointer is implicitly convertible to pointer.\n   //!      - If T is an array type and Pointer is a more CV qualified pointer to element_type.\n   template<class Pointer>\n   explicit unique_ptr(Pointer p\n      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer>::type* =0)\n                 ) BOOST_NOEXCEPT\n      : m_data(p)\n   {\n      //If T is not an array type, element_type_t<Pointer> derives from T\n      //it uses the default deleter and T has no virtual destructor, then you have a problem\n      BOOST_STATIC_ASSERT(( !::boost::move_upmu::missing_virtual_destructor\n                            <D, typename bmupd::get_element_type<Pointer>::type>::value ));\n      //If this constructor is instantiated with a pointer type or reference type\n      //for the template argument D, the program is ill-formed.\n      BOOST_STATIC_ASSERT(!bmupmu::is_pointer<D>::value);\n      BOOST_STATIC_ASSERT(!bmupmu::is_reference<D>::value);\n   }\n\n   //!The signature of this constructor depends upon whether D is a reference type.\n   //!   - If D is non-reference type A, then the signature is <tt>unique_ptr(pointer p, const A& d)</tt>.\n   //!   - If D is an lvalue-reference type A&, then the signature is <tt>unique_ptr(pointer p, A& d)</tt>.\n   //!   - If D is an lvalue-reference type const A&, then the signature is <tt>unique_ptr(pointer p, const A& d)</tt>.\n   //!\n   //!\n   //! <b>Requires</b>: Either\n   //!   - D is not an lvalue-reference type and d is an lvalue or const rvalue. \n   //!         D shall satisfy the requirements of CopyConstructible, and the copy constructor of D\n   //!         shall not throw an exception. This unique_ptr will hold a copy of d.\n   //!   - D is an lvalue-reference type and d is an lvalue. the type which D references need not be CopyConstructible nor\n   //!      MoveConstructible. This unique_ptr will hold a D which refers to the lvalue d.\n   //!\n   //! <b>Effects</b>: Constructs a unique_ptr object which owns p, initializing the stored pointer with p and\n   //!   initializing the deleter as described above.\n   //! \n   //! <b>Postconditions</b>: <tt>get() == p</tt>. <tt>get_deleter()</tt> returns a reference to the stored deleter. If D is a\n   //!   reference type then <tt>get_deleter()</tt> returns a reference to the lvalue d.\n   //!\n   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:\n   //!      - If T is not an array type and Pointer is implicitly convertible to pointer.\n   //!      - If T is an array type and Pointer is a more CV qualified pointer to element_type.\n   template<class Pointer>\n   unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type1) d1\n      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer>::type* =0)\n              ) BOOST_NOEXCEPT\n      : m_data(p, d1)\n   {\n      //If T is not an array type, element_type_t<Pointer> derives from T\n      //it uses the default deleter and T has no virtual destructor, then you have a problem\n      BOOST_STATIC_ASSERT(( !::boost::move_upmu::missing_virtual_destructor\n                            <D, typename bmupd::get_element_type<Pointer>::type>::value ));\n   }\n\n   //! <b>Effects</b>: Same effects as <tt>template<class Pointer> unique_ptr(Pointer p, deleter_arg_type1 d1)</tt>\n   //!   and additionally <tt>get() == nullptr</tt>\n   unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type1) d1) BOOST_NOEXCEPT\n      : m_data(pointer(), d1)\n   {}\n\n   //! The signature of this constructor depends upon whether D is a reference type.\n   //!   - If D is non-reference type A, then the signature is <tt>unique_ptr(pointer p, A&& d)</tt>.\n   //!   - If D is an lvalue-reference type A&, then the signature is <tt>unique_ptr(pointer p, A&& d)</tt>.\n   //!   - If D is an lvalue-reference type const A&, then the signature is <tt>unique_ptr(pointer p, const A&& d)</tt>.\n   //!\n   //! <b>Requires</b>: Either\n   //!   - D is not an lvalue-reference type and d is a non-const rvalue. D\n   //!      shall satisfy the requirements of MoveConstructible, and the move constructor\n   //!      of D shall not throw an exception. This unique_ptr will hold a value move constructed from d.\n   //!   - D is an lvalue-reference type and d is an rvalue, the program is ill-formed.\n   //!\n   //! <b>Effects</b>: Constructs a unique_ptr object which owns p, initializing the stored pointer with p and\n   //!   initializing the deleter as described above.\n   //! \n   //! <b>Postconditions</b>: <tt>get() == p</tt>. <tt>get_deleter()</tt> returns a reference to the stored deleter. If D is a\n   //!   reference type then <tt>get_deleter()</tt> returns a reference to the lvalue d.\n   //!\n   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:\n   //!      - If T is not an array type and Pointer is implicitly convertible to pointer.\n   //!      - If T is an array type and Pointer is a more CV qualified pointer to element_type.\n   template<class Pointer>\n   unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type2) d2\n      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer>::type* =0)\n             ) BOOST_NOEXCEPT\n      : m_data(p, ::boost::move(d2))\n   {\n      //If T is not an array type, element_type_t<Pointer> derives from T\n      //it uses the default deleter and T has no virtual destructor, then you have a problem\n      BOOST_STATIC_ASSERT(( !::boost::move_upmu::missing_virtual_destructor\n                            <D, typename bmupd::get_element_type<Pointer>::type>::value ));\n   }\n\n   //! <b>Effects</b>: Same effects as <tt>template<class Pointer> unique_ptr(Pointer p, deleter_arg_type2 d2)</tt>\n   //!   and additionally <tt>get() == nullptr</tt>\n   unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type2) d2) BOOST_NOEXCEPT\n      : m_data(pointer(), ::boost::move(d2))\n   {}\n\n   //! <b>Requires</b>: If D is not a reference type, D shall satisfy the requirements of MoveConstructible.\n   //! Construction of the deleter from an rvalue of type D shall not throw an exception.\n   //! \n   //! <b>Effects</b>: Constructs a unique_ptr by transferring ownership from u to *this. If D is a reference type,\n   //! this deleter is copy constructed from u's deleter; otherwise, this deleter is move constructed from u's\n   //! deleter.\n   //! \n   //! <b>Postconditions</b>: <tt>get()</tt> yields the value u.get() yielded before the construction. <tt>get_deleter()</tt>\n   //! returns a reference to the stored deleter that was constructed from u.get_deleter(). If D is a\n   //! reference type then <tt>get_deleter()</tt> and <tt>u.get_deleter()</tt> both reference the same lvalue deleter.\n   unique_ptr(BOOST_RV_REF(unique_ptr) u) BOOST_NOEXCEPT\n      : m_data(u.release(), ::boost::move_if_not_lvalue_reference<D>(u.get_deleter()))\n   {}\n\n   //! <b>Requires</b>: If E is not a reference type, construction of the deleter from an rvalue of type E shall be\n   //!   well formed and shall not throw an exception. Otherwise, E is a reference type and construction of the\n   //!   deleter from an lvalue of type E shall be well formed and shall not throw an exception.\n   //!\n   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:\n   //!   - <tt>unique_ptr<U, E>::pointer</tt> is implicitly convertible to pointer,\n   //!   - U is not an array type, and\n   //!   - either D is a reference type and E is the same type as D, or D is not a reference type and E is\n   //!      implicitly convertible to D.\n   //!\n   //! <b>Effects</b>: Constructs a unique_ptr by transferring ownership from u to *this. If E is a reference type,\n   //!   this deleter is copy constructed from u's deleter; otherwise, this deleter is move constructed from u's deleter.\n   //!\n   //! <b>Postconditions</b>: <tt>get()</tt> yields the value <tt>u.get()</tt> yielded before the construction. <tt>get_deleter()</tt>\n   //!   returns a reference to the stored deleter that was constructed from <tt>u.get_deleter()</tt>.\n   template <class U, class E>\n   unique_ptr( BOOST_RV_REF_BEG_IF_CXX11 unique_ptr<U, E> BOOST_RV_REF_END_IF_CXX11 u\n      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_moveconv_constr<T BOOST_MOVE_I D BOOST_MOVE_I U BOOST_MOVE_I E>::type* =0)\n      ) BOOST_NOEXCEPT\n      : m_data(u.release(), ::boost::move_if_not_lvalue_reference<E>(u.get_deleter()))\n   {\n      //If T is not an array type, U derives from T\n      //it uses the default deleter and T has no virtual destructor, then you have a problem\n      BOOST_STATIC_ASSERT(( !::boost::move_upmu::missing_virtual_destructor\n                            <D, typename unique_ptr<U, E>::pointer>::value ));\n   }\n\n   //! <b>Requires</b>: The expression <tt>get_deleter()(get())</tt> shall be well formed, shall have well-defined behavior,\n   //!   and shall not throw exceptions.\n   //!\n   //! <b>Effects</b>: If <tt>get() == nullpt1r</tt> there are no effects. Otherwise <tt>get_deleter()(get())</tt>.\n   //!\n   //! <b>Note</b>: The use of default_delete requires T to be a complete type\n   ~unique_ptr()\n   {  if(m_data.m_p) m_data.deleter()(m_data.m_p);   }\n\n   //! <b>Requires</b>: If D is not a reference type, D shall satisfy the requirements of MoveAssignable\n   //!   and assignment of the deleter from an rvalue of type D shall not throw an exception. Otherwise, D\n   //!   is a reference type; <tt>remove_reference<D>::type</tt> shall satisfy the CopyAssignable requirements and\n   //!   assignment of the deleter from an lvalue of type D shall not throw an exception.\n   //!\n   //! <b>Effects</b>: Transfers ownership from u to *this as if by calling <tt>reset(u.release())</tt> followed\n   //!   by <tt>get_deleter() = std::forward<D>(u.get_deleter())</tt>.\n   //!\n   //! <b>Returns</b>: *this.\n   unique_ptr& operator=(BOOST_RV_REF(unique_ptr) u) BOOST_NOEXCEPT\n   {\n      this->reset(u.release());\n      m_data.deleter() = ::boost::move_if_not_lvalue_reference<D>(u.get_deleter());\n      return *this;\n   }\n\n   //! <b>Requires</b>: If E is not a reference type, assignment of the deleter from an rvalue of type E shall be\n   //!   well-formed and shall not throw an exception. Otherwise, E is a reference type and assignment of the\n   //!   deleter from an lvalue of type E shall be well-formed and shall not throw an exception.\n   //!\n   //! <b>Remarks</b>: This operator shall not participate in overload resolution unless:\n   //!   - <tt>unique_ptr<U, E>::pointer</tt> is implicitly convertible to pointer and\n   //!   - U is not an array type.\n   //!\n   //! <b>Effects</b>: Transfers ownership from u to *this as if by calling <tt>reset(u.release())</tt> followed by\n   //!   <tt>get_deleter() = std::forward<E>(u.get_deleter())</tt>.\n   //!\n   //! <b>Returns</b>: *this.\n   template <class U, class E>\n   BOOST_MOVE_DOC1ST(unique_ptr&, typename bmupd::enable_up_moveconv_assign\n         <T BOOST_MOVE_I D BOOST_MOVE_I U BOOST_MOVE_I E BOOST_MOVE_I unique_ptr &>::type)\n      operator=(BOOST_RV_REF_BEG unique_ptr<U, E> BOOST_RV_REF_END u) BOOST_NOEXCEPT\n   {\n      this->reset(u.release());\n      m_data.deleter() = ::boost::move_if_not_lvalue_reference<E>(u.get_deleter());\n      return *this;\n   }\n\n   //! <b>Effects</b>: <tt>reset()</tt>.\n   //!\n   //! <b>Postcondition</b>: <tt>get() == nullptr</tt>\n   //!\n   //! <b>Returns</b>: *this.\n   unique_ptr& operator=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT\n   {  this->reset(); return *this;  }\n\n   //! <b>Requires</b>: <tt>get() != nullptr</tt>.\n   //!\n   //! <b>Returns</b>: <tt>*get()</tt>.\n   //!\n   //! <b>Remarks</b: If T is an array type, the program is ill-formed.\n   BOOST_MOVE_DOC1ST(element_type&, typename bmupmu::add_lvalue_reference<element_type>::type)\n      operator*() const BOOST_NOEXCEPT\n   {\n      BOOST_STATIC_ASSERT((!bmupmu::is_array<T>::value));\n      return *m_data.m_p;\n   }\n\n   //! <b>Requires</b>: i < the number of elements in the array to which the stored pointer points.\n   //!\n   //! <b>Returns</b>: <tt>get()[i]</tt>.\n   //!\n   //! <b>Remarks</b: If T is not an array type, the program is ill-formed.\n   BOOST_MOVE_DOC1ST(element_type&, typename bmupmu::add_lvalue_reference<element_type>::type)\n      operator[](std::size_t i) const BOOST_NOEXCEPT\n   {\n      BOOST_ASSERT( bmupmu::extent<T>::value == 0 || i < bmupmu::extent<T>::value );\n      BOOST_ASSERT(m_data.m_p);\n      return m_data.m_p[i];\n   }\n\n   //! <b>Requires</b>: <tt>get() != nullptr</tt>.\n   //!\n   //! <b>Returns</b>: <tt>get()</tt>.\n   //!\n   //! <b>Note</b>: use typically requires that T be a complete type.\n   //!\n   //! <b>Remarks</b: If T is an array type, the program is ill-formed.\n   pointer operator->() const BOOST_NOEXCEPT\n   {\n      BOOST_STATIC_ASSERT((!bmupmu::is_array<T>::value));\n      BOOST_ASSERT(m_data.m_p);\n      return m_data.m_p;\n   }\n\n   //! <b>Returns</b>: The stored pointer.\n   //!\n   pointer get() const BOOST_NOEXCEPT\n   {  return m_data.m_p;  }\n\n   //! <b>Returns</b>: A reference to the stored deleter.\n   //!\n   BOOST_MOVE_DOC1ST(D&, typename bmupmu::add_lvalue_reference<D>::type)\n      get_deleter() BOOST_NOEXCEPT\n   {  return m_data.deleter();  }   \n\n   //! <b>Returns</b>: A reference to the stored deleter.\n   //!\n   BOOST_MOVE_DOC1ST(const D&, typename bmupmu::add_const_lvalue_reference<D>::type)\n      get_deleter() const BOOST_NOEXCEPT\n   {  return m_data.deleter();  }\n\n   #ifdef BOOST_MOVE_DOXYGEN_INVOKED\n   //! <b>Returns</b>: Returns: get() != nullptr.\n   //!\n   explicit operator bool\n   #else\n   operator bmupd::explicit_bool_arg\n   #endif\n      ()const BOOST_NOEXCEPT\n   {\n      return m_data.m_p\n         ? &bmupd::bool_conversion::for_bool\n         : bmupd::explicit_bool_arg(0);\n   }\n\n   //! <b>Postcondition</b>: <tt>get() == nullptr</tt>.\n   //!\n   //! <b>Returns</b>: The value <tt>get()</tt> had at the start of the call to release.   \n   pointer release() BOOST_NOEXCEPT\n   {\n      const pointer tmp = m_data.m_p;\n      m_data.m_p = pointer();\n      return tmp;\n   }\n\n   //! <b>Requires</b>: The expression <tt>get_deleter()(get())</tt> shall be well formed, shall have well-defined behavior,\n   //!   and shall not throw exceptions.\n   //!\n   //! <b>Effects</b>: assigns p to the stored pointer, and then if the old value of the stored pointer, old_p, was not\n   //!   equal to nullptr, calls <tt>get_deleter()(old_p)</tt>. Note: The order of these operations is significant\n   //!   because the call to <tt>get_deleter()</tt> may destroy *this.\n   //!\n   //! <b>Postconditions</b>: <tt>get() == p</tt>. Note: The postcondition does not hold if the call to <tt>get_deleter()</tt>\n   //!   destroys *this since <tt>this->get()</tt> is no longer a valid expression.\n   //!\n   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:\n   //!      - If T is not an array type and Pointer is implicitly convertible to pointer.\n   //!      - If T is an array type and Pointer is a more CV qualified pointer to element_type.\n   template<class Pointer>\n   BOOST_MOVE_DOC1ST(void, typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer BOOST_MOVE_I void>::type)\n      reset(Pointer p) BOOST_NOEXCEPT\n   {\n      //If T is not an array type, element_type_t<Pointer> derives from T\n      //it uses the default deleter and T has no virtual destructor, then you have a problem\n      BOOST_STATIC_ASSERT(( !::boost::move_upmu::missing_virtual_destructor\n                            <D, typename bmupd::get_element_type<Pointer>::type>::value ));\n      pointer tmp = m_data.m_p;\n      m_data.m_p = p;\n      if(tmp) m_data.deleter()(tmp);\n   }\n\n   //! <b>Requires</b>: The expression <tt>get_deleter()(get())</tt> shall be well formed, shall have well-defined behavior,\n   //!   and shall not throw exceptions.\n   //!\n   //! <b>Effects</b>: assigns nullptr to the stored pointer, and then if the old value of the stored pointer, old_p, was not\n   //!   equal to nullptr, calls <tt>get_deleter()(old_p)</tt>. Note: The order of these operations is significant\n   //!   because the call to <tt>get_deleter()</tt> may destroy *this.\n   //!\n   //! <b>Postconditions</b>: <tt>get() == p</tt>. Note: The postcondition does not hold if the call to <tt>get_deleter()</tt>\n   //!   destroys *this since <tt>this->get()</tt> is no longer a valid expression.\n   void reset() BOOST_NOEXCEPT\n   {  this->reset(pointer());  }\n\n   //! <b>Effects</b>: Same as <tt>reset()</tt>\n   //! \n   void reset(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT\n   {  this->reset(); }\n\n   //! <b>Requires</b>: <tt>get_deleter()</tt> shall be swappable and shall not throw an exception under swap.\n   //!\n   //! <b>Effects</b>: Invokes swap on the stored pointers and on the stored deleters of *this and u.\n   void swap(unique_ptr& u) BOOST_NOEXCEPT\n   {\n      ::boost::adl_move_swap(m_data.m_p, u.m_data.m_p);\n      ::boost::adl_move_swap(m_data.deleter(), u.m_data.deleter());\n   }\n};\n\n//! <b>Effects</b>: Calls <tt>x.swap(y)</tt>.\n//!\ntemplate <class T, class D>\ninline void swap(unique_ptr<T, D> &x, unique_ptr<T, D> &y) BOOST_NOEXCEPT\n{  x.swap(y); }\n\n//! <b>Returns</b>: <tt>x.get() == y.get()</tt>.\n//!\ntemplate <class T1, class D1, class T2, class D2>\ninline bool operator==(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)\n{  return x.get() == y.get(); }\n\n//! <b>Returns</b>: <tt>x.get() != y.get()</tt>.\n//!\ntemplate <class T1, class D1, class T2, class D2>\ninline bool operator!=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)\n{  return x.get() != y.get(); }\n\n//! <b>Returns</b>: x.get() < y.get().\n//!\n//! <b>Remarks</b>: This comparison shall induce a\n//!   strict weak ordering betwen pointers.\ntemplate <class T1, class D1, class T2, class D2>\ninline bool operator<(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)\n{  return x.get() < y.get();  }\n\n//! <b>Returns</b>: !(y < x).\n//!\ntemplate <class T1, class D1, class T2, class D2>\ninline bool operator<=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)\n{  return !(y < x);  }\n\n//! <b>Returns</b>: y < x.\n//!\ntemplate <class T1, class D1, class T2, class D2>\ninline bool operator>(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)\n{  return y < x;  }\n\n//! <b>Returns</b>:!(x < y).\n//!\ntemplate <class T1, class D1, class T2, class D2>\ninline bool operator>=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)\n{  return !(x < y);  }\n\n//! <b>Returns</b>:!x.\n//!\ntemplate <class T, class D>\ninline bool operator==(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT\n{  return !x;  }\n\n//! <b>Returns</b>:!x.\n//!\ntemplate <class T, class D>\ninline bool operator==(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) BOOST_NOEXCEPT\n{  return !x;  }\n\n//! <b>Returns</b>: (bool)x.\n//!\ntemplate <class T, class D>\ninline bool operator!=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT\n{  return !!x;  }\n\n//! <b>Returns</b>: (bool)x.\n//!\ntemplate <class T, class D>\ninline bool operator!=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) BOOST_NOEXCEPT\n{  return !!x;  }\n\n//! <b>Requires</b>: <tt>operator </tt> shall induce a strict weak ordering on unique_ptr<T, D>::pointer values.\n//!\n//! <b>Returns</b>: Returns <tt>x.get() < pointer()</tt>.\ntemplate <class T, class D>\ninline bool operator<(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type))\n{  return x.get() < typename unique_ptr<T, D>::pointer();  }\n\n//! <b>Requires</b>: <tt>operator </tt> shall induce a strict weak ordering on unique_ptr<T, D>::pointer values.\n//!\n//! <b>Returns</b>: Returns <tt>pointer() < x.get()</tt>.\ntemplate <class T, class D>\ninline bool operator<(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x)\n{  return typename unique_ptr<T, D>::pointer() < x.get();  }\n\n//! <b>Returns</b>: <tt>nullptr < x</tt>.\n//!\ntemplate <class T, class D>\ninline bool operator>(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type))\n{  return x.get() > typename unique_ptr<T, D>::pointer();  }\n\n//! <b>Returns</b>: <tt>x < nullptr</tt>.\n//!\ntemplate <class T, class D>\ninline bool operator>(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x)\n{  return typename unique_ptr<T, D>::pointer() > x.get();  }\n\n//! <b>Returns</b>: <tt>!(nullptr < x)</tt>.\n//!\ntemplate <class T, class D>\ninline bool operator<=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type))\n{  return !(bmupd::nullptr_type() < x);  }\n\n//! <b>Returns</b>: <tt>!(x < nullptr)</tt>.\n//!\ntemplate <class T, class D>\ninline bool operator<=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x)\n{  return !(x < bmupd::nullptr_type());  }\n\n//! <b>Returns</b>: <tt>!(x < nullptr)</tt>.\n//!\ntemplate <class T, class D>\ninline bool operator>=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type))\n{  return !(x < bmupd::nullptr_type());  }\n\n//! <b>Returns</b>: <tt>!(nullptr < x)</tt>.\n//!\ntemplate <class T, class D>\ninline bool operator>=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x)\n{  return !(bmupd::nullptr_type() < x);  }\n\n}  //namespace movelib {\n}  //namespace boost{\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif   //#ifndef BOOST_MOVE_UNIQUE_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/utility.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2012-2012.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n//! This header includes core utilities from <tt><boost/move/utility_core.hpp></tt> and defines\n//! some more advanced utilities such as:\n\n#ifndef BOOST_MOVE_MOVE_UTILITY_HPP\n#define BOOST_MOVE_MOVE_UTILITY_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n#include <boost/move/utility_core.hpp>\n#include <boost/move/traits.hpp>\n\n#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n   namespace boost {\n\n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                            move_if_noexcept()\n   //\n   //////////////////////////////////////////////////////////////////////////////\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_c\n      < enable_move_utility_emulation<T>::value && !has_move_emulation_enabled<T>::value\n      , typename ::boost::move_detail::add_const<T>::type &\n      >::type\n         move_if_noexcept(T& x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_c\n      < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value\n            && ::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value, rv<T>&>::type\n         move_if_noexcept(T& x) BOOST_NOEXCEPT\n   {\n      return *static_cast<rv<T>* >(::boost::move_detail::addressof(x));\n   }\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_c\n      < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value\n            && ::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value\n      , rv<T>&\n      >::type\n         move_if_noexcept(rv<T>& x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_c\n      < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value\n            && !::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value\n      , typename ::boost::move_detail::add_const<T>::type &\n      >::type\n         move_if_noexcept(T& x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_c\n      < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value\n            && !::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value\n      , typename ::boost::move_detail::add_const<T>::type &\n      >::type\n         move_if_noexcept(rv<T>& x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   }  //namespace boost\n\n#else    //#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n   #if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)\n      #include <utility>\n\n      namespace boost{\n\n      using ::std::move_if_noexcept;\n\n      }  //namespace boost\n\n   #else //!BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE\n\n      namespace boost {\n\n      //////////////////////////////////////////////////////////////////////////////\n      //\n      //                            move_if_noexcept()\n      //\n      //////////////////////////////////////////////////////////////////////////////\n      #if defined(BOOST_MOVE_DOXYGEN_INVOKED)\n         //! This function provides a way to convert a reference into a rvalue reference\n         //! in compilers with rvalue references. For other compilers converts T & into\n         //! <i>::boost::rv<T> &</i> so that move emulation is activated. Reference\n         //! would be converted to rvalue reference only if input type is nothrow move\n         //! constructible or if it has no copy constructor. In all other cases const\n         //! reference would be returned\n         template <class T>\n         rvalue_reference_or_const_lvalue_reference move_if_noexcept(input_reference) noexcept;\n\n      #else //BOOST_MOVE_DOXYGEN_INVOKED\n\n         template <class T>\n         typename ::boost::move_detail::enable_if_c\n            < ::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value, T&&>::type\n               move_if_noexcept(T& x) BOOST_NOEXCEPT\n         {  return ::boost::move(x);   }\n\n         template <class T>\n         typename ::boost::move_detail::enable_if_c\n            < !::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value, const T&>::type\n               move_if_noexcept(T& x) BOOST_NOEXCEPT\n         {  return x;  }\n\n      #endif //BOOST_MOVE_DOXYGEN_INVOKED\n\n      }  //namespace boost {\n\n   #endif   //#if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)\n\n#endif   //BOOST_NO_CXX11_RVALUE_REFERENCES\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif //#ifndef BOOST_MOVE_MOVE_UTILITY_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/move/utility_core.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2012-2012.\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/move for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n//! \\file\n//! This header defines core utilities to ease the development\n//! of move-aware functions. This header minimizes dependencies\n//! from other libraries.\n\n#ifndef BOOST_MOVE_MOVE_UTILITY_CORE_HPP\n#define BOOST_MOVE_MOVE_UTILITY_CORE_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#  include <boost/config.hpp>\n#endif\n#\n#if defined(BOOST_HAS_PRAGMA_ONCE)\n#  pragma once\n#endif\n\n#include <boost/move/detail/config_begin.hpp>\n#include <boost/move/core.hpp>\n#include <boost/move/detail/meta_utils.hpp>\n#include <boost/static_assert.hpp>\n\n#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n   namespace boost {\n\n   template<class T>\n   struct enable_move_utility_emulation\n   {\n      static const bool value = true;\n   };\n    \n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                            move()\n   //\n   //////////////////////////////////////////////////////////////////////////////\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_and\n      < T &\n      , enable_move_utility_emulation<T>\n      , has_move_emulation_disabled<T>\n      >::type\n         move(T& x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_and\n      < rv<T>&\n      , enable_move_utility_emulation<T>\n      , has_move_emulation_enabled<T>\n      >::type\n         move(T& x) BOOST_NOEXCEPT\n   {\n      return *BOOST_MOVE_TO_RV_CAST(::boost::rv<T>*, ::boost::move_detail::addressof(x) );\n   }\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_and\n      < rv<T>&\n      , enable_move_utility_emulation<T>\n      , has_move_emulation_enabled<T>\n      >::type\n         move(rv<T>& x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                            forward()\n   //\n   //////////////////////////////////////////////////////////////////////////////\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_and\n      < T &\n      , enable_move_utility_emulation<T>\n      , ::boost::move_detail::is_rv<T>\n      >::type\n         forward(const typename ::boost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT\n   {\n      return const_cast<T&>(x);\n   }\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_and\n      < const T &\n      , enable_move_utility_emulation<T>\n      , ::boost::move_detail::is_not_rv<T>\n      >::type\n         forward(const typename ::boost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   //////////////////////////////////////////////////////////////////////////////\n   //\n   //                        move_if_not_lvalue_reference()\n   //\n   //////////////////////////////////////////////////////////////////////////////\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_and\n      < T &\n      , enable_move_utility_emulation<T>\n      , ::boost::move_detail::is_rv<T>\n      >::type\n         move_if_not_lvalue_reference(const typename ::boost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT\n   {\n      return const_cast<T&>(x);\n   }\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_and\n      < typename ::boost::move_detail::add_lvalue_reference<T>::type\n      , enable_move_utility_emulation<T>\n      , ::boost::move_detail::is_not_rv<T>\n      , ::boost::move_detail::or_\n         < ::boost::move_detail::is_lvalue_reference<T>\n         , has_move_emulation_disabled<T>\n         >\n      >::type\n         move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type &x) BOOST_NOEXCEPT\n   {\n      return x;\n   }\n\n   template <class T>\n   inline typename ::boost::move_detail::enable_if_and\n      < rv<T>&\n      , enable_move_utility_emulation<T>\n      , ::boost::move_detail::is_not_rv<T>\n      , ::boost::move_detail::and_\n         < ::boost::move_detail::not_< ::boost::move_detail::is_lvalue_reference<T> >\n         , has_move_emulation_enabled<T>\n         >\n      >::type\n         move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type &x) BOOST_NOEXCEPT\n   {\n      return move(x);\n   }\n\n   }  //namespace boost\n\n#else    //#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n   #if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)\n      #include <utility>\n\n      namespace boost{\n\n      using ::std::move;\n      using ::std::forward;\n\n      }  //namespace boost\n\n   #else //!BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE\n\n      namespace boost {\n\n      //! This trait's internal boolean `value` is false in compilers with rvalue references\n      //! and true in compilers without rvalue references.\n      //!\n      //! A user can specialize this trait for a type T to false to SFINAE out `move` and `forward`\n      //! so that the user can define a different move emulation for that type in namespace boost\n      //! (e.g. another Boost library for its types) and avoid any overload ambiguity.\n      template<class T>\n      struct enable_move_utility_emulation\n      {\n         static const bool value = false;\n      };\n\n      //////////////////////////////////////////////////////////////////////////////\n      //\n      //                                  move\n      //\n      //////////////////////////////////////////////////////////////////////////////\n\n      #if defined(BOOST_MOVE_DOXYGEN_INVOKED)\n         //! This function provides a way to convert a reference into a rvalue reference\n         //! in compilers with rvalue references. For other compilers if `T` is Boost.Move\n         //! enabled type then it converts `T&` into <tt>::boost::rv<T> &</tt> so that\n         //! move emulation is activated, else it returns `T &`.\n         template <class T>\n         rvalue_reference move(input_reference) noexcept;\n\n      #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)\n\n         //Old move approach, lvalues could bind to rvalue references\n         template <class T>\n         inline typename ::boost::move_detail::remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT\n         {  return t;   }\n\n      #else //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES\n\n         template <class T>\n         inline typename ::boost::move_detail::remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT\n         { return static_cast<typename ::boost::move_detail::remove_reference<T>::type &&>(t); }\n\n      #endif   //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES\n\n      //////////////////////////////////////////////////////////////////////////////\n      //\n      //                                  forward\n      //\n      //////////////////////////////////////////////////////////////////////////////\n\n\n      #if defined(BOOST_MOVE_DOXYGEN_INVOKED)\n         //! This function provides limited form of forwarding that is usually enough for\n         //! in-place construction and avoids the exponential overloading for\n         //! achieve the limited forwarding in C++03.\n         //!\n         //! For compilers with rvalue references this function provides perfect forwarding.\n         //!\n         //! Otherwise:\n         //! * If input_reference binds to const ::boost::rv<T> & then it output_reference is\n         //!   ::boost::rv<T> &\n         //!\n         //! * Else, output_reference is equal to input_reference.\n         template <class T> output_reference forward(input_reference) noexcept;\n      #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)\n\n         //Old move approach, lvalues could bind to rvalue references\n\n         template <class T>\n         inline T&& forward(typename ::boost::move_detail::identity<T>::type&& t) BOOST_NOEXCEPT\n         {  return t;   }\n\n      #else //Old move\n\n         template <class T>\n         inline T&& forward(typename ::boost::move_detail::remove_reference<T>::type& t) BOOST_NOEXCEPT\n         {  return static_cast<T&&>(t);   }\n\n         template <class T>\n         inline T&& forward(typename ::boost::move_detail::remove_reference<T>::type&& t) BOOST_NOEXCEPT\n         {\n            //\"boost::forward<T> error: 'T' is a lvalue reference, can't forward as rvalue.\";\n            BOOST_STATIC_ASSERT(!boost::move_detail::is_lvalue_reference<T>::value);\n            return static_cast<T&&>(t);\n         }\n\n      #endif   //BOOST_MOVE_DOXYGEN_INVOKED\n\n      //////////////////////////////////////////////////////////////////////////////\n      //\n      //                         move_if_not_lvalue_reference\n      //\n      //////////////////////////////////////////////////////////////////////////////\n\n\n      #if defined(BOOST_MOVE_DOXYGEN_INVOKED)\n         //! <b>Effects</b>: Calls `boost::move` if `input_reference` is not a lvalue reference.\n         //!   Otherwise returns the reference\n         template <class T> output_reference move_if_not_lvalue_reference(input_reference) noexcept;\n      #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)\n\n         //Old move approach, lvalues could bind to rvalue references\n\n         template <class T>\n         inline T&& move_if_not_lvalue_reference(typename ::boost::move_detail::identity<T>::type&& t) BOOST_NOEXCEPT\n         {  return t;   }\n\n      #else //Old move\n\n         template <class T>\n         inline T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type& t) BOOST_NOEXCEPT\n         {  return static_cast<T&&>(t);   }\n\n         template <class T>\n         inline T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type&& t) BOOST_NOEXCEPT\n         {\n            //\"boost::forward<T> error: 'T' is a lvalue reference, can't forward as rvalue.\";\n            BOOST_STATIC_ASSERT(!boost::move_detail::is_lvalue_reference<T>::value);\n            return static_cast<T&&>(t);\n         }\n\n      #endif   //BOOST_MOVE_DOXYGEN_INVOKED\n\n      }  //namespace boost {\n\n   #endif   //#if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)\n\n#endif   //BOOST_NO_CXX11_RVALUE_REFERENCES\n\n#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\nnamespace boost{\nnamespace move_detail{\n\ntemplate <typename T>\ntypename boost::move_detail::add_rvalue_reference<T>::type declval();\n\n}  //namespace move_detail{\n}  //namespace boost{\n\n#endif   //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)\n\n\n#include <boost/move/detail/config_end.hpp>\n\n#endif //#ifndef BOOST_MOVE_MOVE_UTILITY_CORE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/O1_size.hpp",
    "content": "\n#ifndef BOOST_MPL_O1_SIZE_HPP_INCLUDED\n#define BOOST_MPL_O1_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/O1_size_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/O1_size_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\n// returns sequence size if it's an O(1) operation; otherwise returns -1\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct O1_size\n    : O1_size_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, O1_size, (Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, O1_size)\n\n}}\n\n#endif // BOOST_MPL_O1_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/O1_size_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED\n#define BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct O1_size_impl;\ntemplate< typename Sequence > struct O1_size;\n\n}}\n\n#endif // BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/accumulate.hpp",
    "content": "\n#ifndef BOOST_MPL_ACCUMULATE_HPP_INCLUDED\n#define BOOST_MPL_ACCUMULATE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)\n    >\nstruct accumulate\n    : fold<Sequence,State,ForwardOp>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,accumulate,(Sequence,State,ForwardOp))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, accumulate)\n\n}}\n\n#endif // BOOST_MPL_ACCUMULATE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/advance.hpp",
    "content": "\n#ifndef BOOST_MPL_ADVANCE_HPP_INCLUDED\n#define BOOST_MPL_ADVANCE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/advance_fwd.hpp>\n#include <boost/mpl/less.hpp>\n#include <boost/mpl/negate.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/tag.hpp>\n#include <boost/mpl/apply_wrap.hpp>\n#include <boost/mpl/aux_/advance_forward.hpp>\n#include <boost/mpl/aux_/advance_backward.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation for forward/bidirectional iterators\ntemplate< typename Tag >\nstruct advance_impl\n{\n    template< typename Iterator, typename N > struct apply\n    {\n        typedef typename less< N,long_<0> >::type backward_;\n        typedef typename if_< backward_, negate<N>, N >::type offset_;\n\n        typedef typename if_<\n              backward_\n            , aux::advance_backward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >\n            , aux::advance_forward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >\n            >::type f_;\n\n        typedef typename apply_wrap1<f_,Iterator>::type type;\n    };\n};\n\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Iterator)\n    , typename BOOST_MPL_AUX_NA_PARAM(N)\n    >\nstruct advance\n    : advance_impl< typename tag<Iterator>::type >\n        ::template apply<Iterator,N>\n{\n};\n\ntemplate<\n      typename Iterator\n    , BOOST_MPL_AUX_NTTP_DECL(long, N)\n    >\nstruct advance_c\n    : advance_impl< typename tag<Iterator>::type >\n        ::template apply<Iterator,long_<N> >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, advance)\n\n}}\n\n#endif // BOOST_MPL_ADVANCE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/advance_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED\n#define BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(advance)\n\ntemplate< typename Tag > struct advance_impl;\ntemplate< typename Iterator, typename N > struct advance;\n\n}}\n\n#endif // BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/alias.hpp",
    "content": "\n#ifndef BOOST_MPL_ALIAS_HPP_INCLUDED\n#define BOOST_MPL_ALIAS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace {\nnamespace mpl = boost::mpl;\n}\n\n#endif // BOOST_MPL_ALIAS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/always.hpp",
    "content": "\n#ifndef BOOST_MPL_ALWAYS_HPP_INCLUDED\n#define BOOST_MPL_ALWAYS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/arity_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Value > struct always\n{\n    template<\n        BOOST_MPL_PP_DEFAULT_PARAMS(BOOST_MPL_LIMIT_METAFUNCTION_ARITY, typename T, na)\n        >\n    struct apply\n    {\n        typedef Value type;\n    };\n};\n\nBOOST_MPL_AUX_ARITY_SPEC(0, always)\n\n}}\n\n#endif // BOOST_MPL_ALWAYS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/and.hpp",
    "content": "\n#ifndef BOOST_MPL_AND_HPP_INCLUDED\n#define BOOST_MPL_AND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/nested_type_wknd.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n\n// agurt, 19/may/04: workaround a conflict with <iso646.h> header's \n// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)'\n// has to be checked in a separate condition, otherwise GCC complains \n// about 'and' being an alternative token\n#if defined(_MSC_VER) && !defined(__clang__)\n#ifndef __GCCXML__\n#if defined(and) \n#   pragma push_macro(\"and\")\n#   undef and\n#   define and(x)\n#endif\n#endif\n#endif\n\n#   define BOOST_MPL_PREPROCESSED_HEADER and.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#if defined(_MSC_VER) && !defined(__clang__)\n#ifndef __GCCXML__\n#if defined(and) \n#   pragma pop_macro(\"and\")\n#endif\n#endif\n#endif\n\n#else\n\n#   define AUX778076_OP_NAME and_\n#   define AUX778076_OP_VALUE1 false\n#   define AUX778076_OP_VALUE2 true\n#   include <boost/mpl/aux_/logical_op.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/apply.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_APPLY_HPP_INCLUDED\n#define BOOST_MPL_APPLY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/apply_fwd.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#   include <boost/mpl/placeholders.hpp>\n#   include <boost/mpl/lambda.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER apply.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/config/lambda.hpp>\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n#   define AUX778076_APPLY_PARAMS(param) \\\n    BOOST_MPL_PP_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        ) \\\n    /**/\n\n#   define AUX778076_APPLY_DEF_PARAMS(param, value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    /**/\n\n#   define AUX778076_APPLY_N_PARAMS(n, param) \\\n    BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   define AUX778076_APPLY_N_COMMA_PARAMS(n, param) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   define AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(n, param, def) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \\\n    /**/\n    \n#   define AUX778076_APPLY_N_SPEC_PARAMS(n, param) \\\n    BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \\\n    /**/\n\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply.hpp>))\n#include BOOST_PP_ITERATE()\n\n#   if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)\n// real C++ version is already taken care of\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\nnamespace aux {\n// apply_count_args\n#define AUX778076_COUNT_ARGS_PREFIX apply\n#define AUX778076_COUNT_ARGS_DEFAULT na\n#define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n#include <boost/mpl/aux_/count_args.hpp>\n}\n\n\ntemplate<\n      typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na)\n    >\nstruct apply\n    : aux::apply_chooser< \n          aux::apply_count_args< AUX778076_APPLY_PARAMS(T) >::value\n        >::template result_< F, AUX778076_APPLY_PARAMS(T) >::type\n{\n};\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE\n\n#   undef AUX778076_APPLY_N_SPEC_PARAMS\n#   undef AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS\n#   undef AUX778076_APPLY_N_COMMA_PARAMS\n#   undef AUX778076_APPLY_N_PARAMS\n#   undef AUX778076_APPLY_DEF_PARAMS\n#   undef AUX778076_APPLY_PARAMS\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_APPLY_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n\n#   define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply,i_)\n#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    : BOOST_PP_CAT(apply_wrap,i_)< \n          typename lambda<F>::type\n        AUX778076_APPLY_N_COMMA_PARAMS(i_, T)\n        >\n{\n#else\n{\n    typedef typename BOOST_PP_CAT(apply_wrap,i_)< \n          typename lambda<F>::type\n        AUX778076_APPLY_N_COMMA_PARAMS(i_, T)\n        >::type type;\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          BOOST_PP_INC(i_)\n        , BOOST_PP_CAT(apply,i_)\n        , (F AUX778076_APPLY_N_COMMA_PARAMS(i_,T))\n        )\n};\n\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n/// workaround for ETI bug\ntemplate<>\nstruct BOOST_PP_CAT(apply,i_)<AUX778076_APPLY_N_SPEC_PARAMS(i_, int)>\n{\n    typedef int type;\n};\n#endif\n\n#   if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n#if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n/// primary template (not a specialization!)\ntemplate<\n      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)\n    >\nstruct apply\n    : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >\n{\n};\n#else\ntemplate<\n      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)\n    >\nstruct apply< F AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(i_, T, na) >\n    : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >\n{\n};\n#endif\n\n#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)\nnamespace aux {\n\ntemplate<>\nstruct apply_chooser<i_>\n{\n    template<\n          typename F, AUX778076_APPLY_PARAMS(typename T)\n        >\n    struct result_\n    {\n        typedef BOOST_PP_CAT(apply,i_)<\n              F AUX778076_APPLY_N_COMMA_PARAMS(i_, T)\n            > type;\n    };\n};\n\n} // namespace aux\n#endif\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE\n\n#   undef i_\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/apply_fwd.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_APPLY_FWD_HPP_INCLUDED\n#define BOOST_MPL_APPLY_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/aux_/na.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER apply_fwd.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n// agurt, 15/jan/02: top-level 'apply' template gives an ICE on MSVC\n// (for known reasons)\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n#   define BOOST_MPL_CFG_NO_APPLY_TEMPLATE\n#endif\n\nnamespace boost { namespace mpl {\n\n// local macro, #undef-ined at the end of the header\n#   define AUX778076_APPLY_DEF_PARAMS(param, value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    /**/\n\n#   define AUX778076_APPLY_N_COMMA_PARAMS(n, param) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n// forward declaration\ntemplate<\n      typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na)\n    >\nstruct apply;\n#else\nnamespace aux {\ntemplate< BOOST_AUX_NTTP_DECL(int, arity_) > struct apply_chooser;\n}\n#endif\n\n#   endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply_fwd.hpp>))\n#include BOOST_PP_ITERATE()\n\n\n#   undef AUX778076_APPLY_N_COMMA_PARAMS\n#   undef AUX778076_APPLY_DEF_PARAMS\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_APPLY_FWD_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply,i_);\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/apply_wrap.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_APPLY_WRAP_HPP_INCLUDED\n#define BOOST_MPL_APPLY_WRAP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/aux_/arity.hpp>\n#   include <boost/mpl/aux_/has_apply.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/msvc_never_true.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER apply_wrap.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/preprocessor/add.hpp>\n#   include <boost/mpl/aux_/config/bcc.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/logical/and.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n#   define AUX778076_APPLY_WRAP_PARAMS(n, param) \\\n    BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   define AUX778076_APPLY_WRAP_SPEC_PARAMS(n, param) \\\n    BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \\\n    /**/\n\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply_wrap.hpp>))\n#include BOOST_PP_ITERATE()\n\n\n#   undef AUX778076_APPLY_WRAP_SPEC_PARAMS\n#   undef AUX778076_APPLY_WRAP_PARAMS\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_APPLY_WRAP_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n\n#   define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#   if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n// MSVC version\n\n#define AUX778076_MSVC_DTW_NAME BOOST_PP_CAT(msvc_apply,i_)\n#define AUX778076_MSVC_DTW_ORIGINAL_NAME apply\n#define AUX778076_MSVC_DTW_ARITY i_\n#include <boost/mpl/aux_/msvc_dtw.hpp>\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap,i_)\n{\n    // Metafunction forwarding confuses vc6\n    typedef typename BOOST_PP_CAT(msvc_apply,i_)<F>::template result_<\n          AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >::type type;\n};\n\n#   elif defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n// MWCW/Borland version\n\ntemplate<\n      int N, typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap_impl,i_);\n\n#define BOOST_PP_ITERATION_PARAMS_2 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY - i_, <boost/mpl/apply_wrap.hpp>))\n#include BOOST_PP_ITERATE()\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap,i_)\n    : BOOST_PP_CAT(apply_wrap_impl,i_)<\n          ::boost::mpl::aux::arity<F,i_>::value\n        , F\n        BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >::type\n{\n};\n\n#   else\n// ISO98 C++, with minor concession to vc7\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n#if i_ == 0\n    , typename has_apply_ = typename aux::has_apply<F>::type\n#endif\n    >\nstruct BOOST_PP_CAT(apply_wrap,i_)\n// metafunction forwarding confuses MSVC 7.0\n#if !BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n    : F::template apply< AUX778076_APPLY_WRAP_PARAMS(i_, T) >\n{\n#else\n{    \n    typedef typename F::template apply<\n         AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >::type type;\n#endif\n};\n\n#if i_ == 0 && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\ntemplate< typename F >\nstruct BOOST_PP_CAT(apply_wrap,i_)<F,true_>\n    : F::apply\n{\n};\n#endif\n\n#   endif // workarounds\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n/// workaround for ETI bug\ntemplate<>\nstruct BOOST_PP_CAT(apply_wrap,i_)<AUX778076_APPLY_WRAP_SPEC_PARAMS(i_, int)>\n{\n    typedef int type;\n};\n#endif\n\n#   undef i_\n\n///// iteration, depth == 2\n\n#elif BOOST_PP_ITERATION_DEPTH() == 2\n\n#   define j_ BOOST_PP_FRAME_ITERATION(2)\n\n#if i_ == 0 && j_ == 0 \\\n    && defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) \\\n    && !defined(BOOST_MPL_CFG_NO_HAS_APPLY)\n\ntemplate< typename F, bool F_has_apply >\nstruct apply_wrap_impl0_bcb {\n    typedef typename F::template apply< na > type;\n};\n\ntemplate< typename F >\nstruct apply_wrap_impl0_bcb< F, true > {\n    typedef typename F::apply type;\n};\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap_impl,i_)<\n          BOOST_MPL_PP_ADD(i_, j_)\n        , F\n        BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >\n{\n    typedef apply_wrap_impl0_bcb< F, aux::has_apply< F >::value >::type type;\n};\n#else\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap_impl,i_)<\n          BOOST_MPL_PP_ADD(i_, j_)\n        , F\n        BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >\n{\n    typedef typename F::template apply<\n          AUX778076_APPLY_WRAP_PARAMS(i_, T)\n#if i_ == 0 && j_ == 0\n/// since the defaults are \"lost\", we have to pass *something* even for nullary\n/// metafunction classes\n        na\n#else\n        BOOST_PP_COMMA_IF(BOOST_PP_AND(i_, j_)) BOOST_MPL_PP_ENUM(j_, na)\n#endif\n        > type;\n};\n\n#endif\n\n#   undef j_\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/arg.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_ARG_HPP_INCLUDED\n#define BOOST_MPL_ARG_HPP_INCLUDED\n\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/arg_fwd.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/na_assert.hpp>\n#   include <boost/mpl/aux_/arity_spec.hpp>\n#   include <boost/mpl/aux_/arg_typedef.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER arg.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/config/lambda.hpp>\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\n// local macro, #undef-ined at the end of the header\n#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    /**/\n#else\n#   define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \\\n    BOOST_MPL_PP_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        ) \\\n    /**/\n#endif\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/arg.hpp>))\n#include BOOST_PP_ITERATE()\n\n\n#   undef AUX778076_ARG_N_DEFAULT_PARAMS\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int,arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_ARG_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#if i_ > 0\n\ntemplate<> struct arg<i_>\n{\n    BOOST_STATIC_CONSTANT(int, value = i_);\n    typedef arg<BOOST_PP_INC(i_)> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na)\n        >\n    struct apply\n    {\n        typedef BOOST_PP_CAT(U,i_) type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\n#else\n\ntemplate<> struct arg<-1>\n{\n    BOOST_STATIC_CONSTANT(int, value = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na)\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\n#endif // i_ > 0\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/arg_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_ARG_FWD_HPP_INCLUDED\n#define BOOST_MPL_ARG_FWD_HPP_INCLUDED\n\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct arg;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(arg)\n\n#endif // BOOST_MPL_ARG_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/arithmetic.hpp",
    "content": "\n#ifndef BOOST_MPL_ARITHMETIC_HPP_INCLUDED\n#define BOOST_MPL_ARITHMETIC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/plus.hpp>\n#include <boost/mpl/minus.hpp>\n#include <boost/mpl/times.hpp>\n#include <boost/mpl/divides.hpp>\n#include <boost/mpl/modulus.hpp>\n#include <boost/mpl/negate.hpp>\n#include <boost/mpl/multiplies.hpp> // deprecated\n\n#endif // BOOST_MPL_ARITHMETIC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/as_sequence.hpp",
    "content": "\n#ifndef BOOST_MPL_AS_SEQUENCE_HPP_INCLUDED\n#define BOOST_MPL_AS_SEQUENCE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/is_sequence.hpp>\n#include <boost/mpl/single_view.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct as_sequence\n    : if_< is_sequence<T>, T, single_view<T> >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,as_sequence,(T))\n};\n\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(1, as_sequence)\n\n}}\n\n#endif // BOOST_MPL_AS_SEQUENCE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/assert.hpp",
    "content": "\n#ifndef BOOST_MPL_ASSERT_HPP_INCLUDED\n#define BOOST_MPL_ASSERT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/nested_type_wknd.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\n#include <boost/mpl/aux_/config/nttp.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/gpu.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/pp_counter.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n\n#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'\n#include <cstddef>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)\n#include <boost/mpl/if.hpp>\n#endif\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n    || (BOOST_MPL_CFG_GCC != 0) \\\n    || BOOST_WORKAROUND(__IBMCPP__, <= 600)\n#   define BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES\n#endif\n\n#if BOOST_WORKAROUND(__MWERKS__, < 0x3202) \\\n    || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n#   define BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER\n#endif\n\n// agurt, 10/nov/06: use enums for Borland (which cannot cope with static constants) \n// and GCC (which issues \"unused variable\" warnings when static constants are used \n// at a function scope)\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n    || (BOOST_MPL_CFG_GCC != 0) || (BOOST_MPL_CFG_GPU != 0)\n#   define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr }\n#else\n#   define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr)\n#endif\n\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\nstruct failed {};\n\n// agurt, 24/aug/04: MSVC 7.1 workaround here and below: return/accept \n// 'assert<false>' by reference; can't apply it unconditionally -- apparently it\n// degrades the quality of GCC diagnostics\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)\n#   define AUX778076_ASSERT_ARG(x) x&\n#else\n#   define AUX778076_ASSERT_ARG(x) x\n#endif\n\ntemplate< bool C >  struct assert        { typedef void* type; };\ntemplate<>          struct assert<false> { typedef AUX778076_ASSERT_ARG(assert) type; };\n\ntemplate< bool C >\nint assertion_failed( typename assert<C>::type );\n\ntemplate< bool C >\nstruct assertion\n{\n    static int failed( assert<false> );\n};\n\ntemplate<>\nstruct assertion<true>\n{\n    static int failed( void* );\n};\n\nstruct assert_\n{\n#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n    template< typename T1, typename T2 = na, typename T3 = na, typename T4 = na > struct types {};\n#endif\n    static assert_ const arg;\n    enum relations { equal = 1, not_equal, greater, greater_equal, less, less_equal };\n};\n\n\n#if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)\n\nbool operator==( failed, failed );\nbool operator!=( failed, failed );\nbool operator>( failed, failed );\nbool operator>=( failed, failed );\nbool operator<( failed, failed );\nbool operator<=( failed, failed );\n\n#if defined(__EDG_VERSION__)\ntemplate< bool (*)(failed, failed), long x, long y > struct assert_relation {};\n#   define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<r,x,y>\n#else\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, x), BOOST_MPL_AUX_NTTP_DECL(long, y), bool (*)(failed, failed) > \nstruct assert_relation {};\n#   define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<x,y,r>\n#endif\n\n#else // BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES\n\nboost::mpl::aux::weighted_tag<1>::type operator==( assert_, assert_ );\nboost::mpl::aux::weighted_tag<2>::type operator!=( assert_, assert_ );\nboost::mpl::aux::weighted_tag<3>::type operator>(  assert_, assert_ );\nboost::mpl::aux::weighted_tag<4>::type operator>=( assert_, assert_ );\nboost::mpl::aux::weighted_tag<5>::type operator<( assert_, assert_ );\nboost::mpl::aux::weighted_tag<6>::type operator<=( assert_, assert_ );\n\ntemplate< assert_::relations r, long x, long y > struct assert_relation {};\n\n#endif \n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)\n\ntemplate<class Pred>\nstruct extract_assert_pred;\n\ntemplate<class Pred>\nstruct extract_assert_pred<void(Pred)> { typedef Pred type; };\n\ntemplate<class Pred>\nstruct eval_assert {\n    typedef typename extract_assert_pred<Pred>::type P;\n    typedef typename P::type p_type;\n    typedef typename ::boost::mpl::if_c<p_type::value,\n        AUX778076_ASSERT_ARG(assert<false>),\n        failed ************ P::************\n    >::type type;\n};\n\ntemplate<class Pred>\nstruct eval_assert_not {\n    typedef typename extract_assert_pred<Pred>::type P;\n    typedef typename P::type p_type;\n    typedef typename ::boost::mpl::if_c<!p_type::value,\n        AUX778076_ASSERT_ARG(assert<false>),\n        failed ************ ::boost::mpl::not_<P>::************\n    >::type type;\n};\n\ntemplate< typename T >\nT make_assert_arg();\n\n#elif !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)\n\ntemplate< bool > struct assert_arg_pred_impl { typedef int type; };\ntemplate<> struct assert_arg_pred_impl<true> { typedef void* type; };\n\ntemplate< typename P > struct assert_arg_pred\n{\n    typedef typename P::type p_type;\n    typedef typename assert_arg_pred_impl< p_type::value >::type type;\n};\n\ntemplate< typename P > struct assert_arg_pred_not\n{\n    typedef typename P::type p_type;\n    BOOST_MPL_AUX_ASSERT_CONSTANT( bool, p = !p_type::value );\n    typedef typename assert_arg_pred_impl<p>::type type;\n};\n\ntemplate< typename Pred >\nfailed ************ (Pred::************ \n      assert_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type )\n    );\n\ntemplate< typename Pred >\nfailed ************ (boost::mpl::not_<Pred>::************ \n      assert_not_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type )\n    );\n\ntemplate< typename Pred >\nAUX778076_ASSERT_ARG(assert<false>)\nassert_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type );\n\ntemplate< typename Pred >\nAUX778076_ASSERT_ARG(assert<false>)\nassert_not_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type );\n\n\n#else // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER\n        \ntemplate< bool c, typename Pred > struct assert_arg_type_impl\n{\n    typedef failed      ************ Pred::* mwcw83_wknd;\n    typedef mwcw83_wknd ************* type;\n};\n\ntemplate< typename Pred > struct assert_arg_type_impl<true,Pred>\n{\n    typedef AUX778076_ASSERT_ARG(assert<false>) type;\n};\n\ntemplate< typename Pred > struct assert_arg_type\n    : assert_arg_type_impl< BOOST_MPL_AUX_VALUE_WKND(BOOST_MPL_AUX_NESTED_TYPE_WKND(Pred))::value, Pred >\n{\n};\n\ntemplate< typename Pred >\ntypename assert_arg_type<Pred>::type \nassert_arg(void (*)(Pred), int);\n\ntemplate< typename Pred >\ntypename assert_arg_type< boost::mpl::not_<Pred> >::type \nassert_not_arg(void (*)(Pred), int);\n\n#   if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)\ntemplate< long x, long y, bool (*r)(failed, failed) >\ntypename assert_arg_type_impl< false,BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) >::type\nassert_rel_arg( BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) );\n#   else\ntemplate< assert_::relations r, long x, long y >\ntypename assert_arg_type_impl< false,assert_relation<r,x,y> >::type\nassert_rel_arg( assert_relation<r,x,y> );\n#   endif\n\n#endif // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER\n\n#undef AUX778076_ASSERT_ARG\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)\n\n// BOOST_MPL_ASSERT((pred<x,...>))\n\n#define BOOST_MPL_ASSERT(pred) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n          boost::mpl::assertion_failed<false>( \\\n              boost::mpl::make_assert_arg< \\\n                  typename boost::mpl::eval_assert<void pred>::type \\\n                >() \\\n            ) \\\n        ) \\\n    ) \\\n/**/\n\n// BOOST_MPL_ASSERT_NOT((pred<x,...>))\n\n#define BOOST_MPL_ASSERT_NOT(pred) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n          boost::mpl::assertion_failed<false>( \\\n              boost::mpl::make_assert_arg< \\\n                  typename boost::mpl::eval_assert_not<void pred>::type \\\n                >() \\\n            ) \\\n        ) \\\n    ) \\\n/**/\n\n#else\n\n// BOOST_MPL_ASSERT((pred<x,...>))\n\n#define BOOST_MPL_ASSERT(pred) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n          boost::mpl::assertion_failed<false>( \\\n              boost::mpl::assert_arg( (void (*) pred)0, 1 ) \\\n            ) \\\n        ) \\\n    ) \\\n/**/\n\n// BOOST_MPL_ASSERT_NOT((pred<x,...>))\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n#   define BOOST_MPL_ASSERT_NOT(pred) \\\nenum { \\\n      BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n          boost::mpl::assertion<false>::failed( \\\n              boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \\\n            ) \\\n        ) \\\n}\\\n/**/\n#else\n#   define BOOST_MPL_ASSERT_NOT(pred) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n          boost::mpl::assertion_failed<false>( \\\n              boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \\\n            ) \\\n        ) \\\n   ) \\\n/**/\n#endif\n\n#endif\n\n// BOOST_MPL_ASSERT_RELATION(x, ==|!=|<=|<|>=|>, y)\n\n#if defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)\n\n#   if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)\n// agurt, 9/nov/06: 'enum' below is a workaround for gcc 4.0.4/4.1.1 bugs #29522 and #29518\n#   define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y)      \\\nenum { BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) }; \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \\\n        boost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,counter)>( \\\n            (boost::mpl::failed ************ ( boost::mpl::assert_relation< \\\n                  boost::mpl::assert_::relations( sizeof( \\\n                      boost::mpl::assert_::arg rel boost::mpl::assert_::arg \\\n                    ) ) \\\n                , x \\\n                , y \\\n                >::************)) 0 ) \\\n        ) \\\n    ) \\\n/**/\n#   else\n#   define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y)    \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assert_rel,counter) = sizeof( \\\n          boost::mpl::assert_::arg rel boost::mpl::assert_::arg \\\n        ) \\\n    ); \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( bool, BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) ); \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \\\n        boost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,counter)>( \\\n              boost::mpl::assert_rel_arg( boost::mpl::assert_relation< \\\n                  boost::mpl::assert_::relations(BOOST_PP_CAT(mpl_assert_rel,counter)) \\\n                , x \\\n                , y \\\n                >() ) \\\n            ) \\\n        ) \\\n    ) \\\n/**/\n#   endif\n\n#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \\\nBOOST_MPL_ASSERT_RELATION_IMPL(BOOST_MPL_AUX_PP_COUNTER(), x, rel, y) \\\n/**/\n\n#else // !BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES\n\n#   if defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)\n#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n        boost::mpl::assertion_failed<(x rel y)>( boost::mpl::assert_rel_arg( \\\n              boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))() \\\n            ) ) \\\n        ) \\\n    ) \\\n/**/\n#   else\n#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n        boost::mpl::assertion_failed<(x rel y)>( (boost::mpl::failed ************ ( \\\n            boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))::************))0 ) \\\n        ) \\\n    ) \\\n/**/\n#   endif\n\n#endif\n\n\n// BOOST_MPL_ASSERT_MSG( (pred<x,...>::value), USER_PROVIDED_MESSAGE, (types<x,...>) ) \n\n#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202))\n#   define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ ) \\\nstruct msg; \\\ntypedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \\\n{ \\\n    using boost::mpl::assert_::types; \\\n    static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \\\n    { return 0; } \\\n} BOOST_PP_CAT(mpl_assert_arg,counter); \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \\\n        boost::mpl::assertion<(c)>::failed( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \\\n        ) \\\n    ) \\\n/**/\n#else\n#   define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ )  \\\nstruct msg; \\\ntypedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \\\n{ \\\n    static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \\\n    { return 0; } \\\n} BOOST_PP_CAT(mpl_assert_arg,counter); \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \\\n        boost::mpl::assertion_failed<(c)>( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \\\n        ) \\\n    ) \\\n/**/\n#endif\n\n#define BOOST_MPL_ASSERT_MSG( c, msg, types_ ) \\\nBOOST_MPL_ASSERT_MSG_IMPL( BOOST_MPL_AUX_PP_COUNTER(), c, msg, types_ ) \\\n/**/\n\n#endif // BOOST_MPL_ASSERT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/at.hpp",
    "content": "\n#ifndef BOOST_MPL_AT_HPP_INCLUDED\n#define BOOST_MPL_AT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/at_fwd.hpp>\n#include <boost/mpl/aux_/at_impl.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(N)\n    >\nstruct at\n    : at_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,N >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,at,(Sequence,N))\n};\n\ntemplate<\n      typename Sequence\n    , BOOST_MPL_AUX_NTTP_DECL(long, N)\n    >\nstruct at_c\n    : at_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,mpl::long_<N> >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, at)\n\n}}\n\n#endif // BOOST_MPL_AT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/at_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_AT_FWD_HPP_INCLUDED\n#define BOOST_MPL_AT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct at_impl;\ntemplate< typename Sequence, typename N > struct at;\n\n}}\n\n#endif // BOOST_MPL_AT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/O1_size_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/O1_size_fwd.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/aux_/has_size.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation - returns 'Sequence::size' if sequence has a 'size'\n// member, and -1 otherwise; conrete sequences might override it by \n// specializing either the 'O1_size_impl' or the primary 'O1_size' template\n\n#   if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) \\\n    && !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))\n\nnamespace aux {\ntemplate< typename Sequence > struct O1_size_impl\n    : Sequence::size\n{\n};\n}\n\ntemplate< typename Tag >\nstruct O1_size_impl\n{\n    template< typename Sequence > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : if_<\n              aux::has_size<Sequence>\n            , aux::O1_size_impl<Sequence>\n            , long_<-1>\n            >::type\n    {\n#else\n    {\n        typedef typename if_<\n              aux::has_size<Sequence>\n            , aux::O1_size_impl<Sequence>\n            , long_<-1>\n            >::type type;\n\n        BOOST_STATIC_CONSTANT(long, value =\n              (if_<\n                  aux::has_size<Sequence>\n                , aux::O1_size_impl<Sequence>\n                , long_<-1>\n                >::type::value)\n            );\n#endif\n    };\n};\n\n#   else // BOOST_MSVC\n\ntemplate< typename Tag >\nstruct O1_size_impl\n{\n    template< typename Sequence > struct apply\n        : long_<-1>\n        {\n        };\n};\n\n#   endif\n\n}}\n\n#endif // BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/adl_barrier.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED\n#define BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/adl.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE)\n\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE mpl_\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace mpl_ {\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }\n#   define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) \\\n    namespace boost { namespace mpl { \\\n    using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \\\n    } } \\\n/**/\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\nnamespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE { namespace aux {} }\nnamespace boost { namespace mpl { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE; \nnamespace aux { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux; }\n}}\n#endif\n\n#else // BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE\n\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE boost::mpl\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace boost { namespace mpl {\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }}\n#   define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/advance_backward.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED\n#define BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/prior.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER advance_backward.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/unrolling.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n// forward declaration\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_backward;\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_backward.hpp>))\n#   include BOOST_PP_ITERATE()\n\n// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<BOOST_MPL_LIMIT_UNROLLING>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - BOOST_MPL_LIMIT_UNROLLING) < 0\n                    ? 0\n                    : N - BOOST_MPL_LIMIT_UNROLLING\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<>\nstruct advance_backward< BOOST_PP_FRAME_ITERATION(1) >\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n\n#if i_ > 0\n#   define BOOST_PP_ITERATION_PARAMS_2 \\\n    (3,(1, BOOST_PP_FRAME_ITERATION(1), <boost/mpl/aux_/advance_backward.hpp>))\n#   include BOOST_PP_ITERATE()\n#endif\n\n        typedef BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(1)) type;\n    };\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n#endif\n};\n\n#undef i_\n\n///// iteration, depth == 2\n\n#elif BOOST_PP_ITERATION_DEPTH() == 2\n\n#   define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))\n#   define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))\n\n        typedef typename prior<AUX778076_ITER_0>::type AUX778076_ITER_1;\n        \n#   undef AUX778076_ITER_1\n#   undef AUX778076_ITER_0\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/advance_forward.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED\n#define BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/next.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER advance_forward.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/unrolling.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n// forward declaration\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_forward;\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_forward.hpp>))\n#   include BOOST_PP_ITERATE()\n\n// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > \nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<BOOST_MPL_LIMIT_UNROLLING>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - BOOST_MPL_LIMIT_UNROLLING) < 0\n                    ? 0\n                    : N - BOOST_MPL_LIMIT_UNROLLING\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<>\nstruct advance_forward< BOOST_PP_FRAME_ITERATION(1) >\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n\n#if i_ > 0\n#   define BOOST_PP_ITERATION_PARAMS_2 \\\n    (3,(1, i_, <boost/mpl/aux_/advance_forward.hpp>))\n#   include BOOST_PP_ITERATE()\n#endif\n        typedef BOOST_PP_CAT(iter,i_) type;\n    };\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n#endif\n};\n\n#undef i_\n\n///// iteration, depth == 2\n\n#elif BOOST_PP_ITERATION_DEPTH() == 2\n\n#   define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))\n#   define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))\n\n        typedef typename next<AUX778076_ITER_0>::type AUX778076_ITER_1;\n        \n#   undef AUX778076_ITER_1\n#   undef AUX778076_ITER_0\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/apply_1st.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_APPLY_1ST_HPP_INCLUDED\n#define BOOST_MPL_AUX_APPLY_1ST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/apply.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct apply_1st\n{\n    template< typename Pair, typename T > struct apply\n        : apply2<\n              typename Pair::first\n            , typename Pair::second\n            , T\n            >\n    {\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_APPLY_1ST_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/arg_typedef.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED\n#define BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/lambda.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \\\n    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n    \n#   define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) typedef T name;\n\n#else\n\n#   define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/arithmetic_op.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/integral_c.hpp>\n#   include <boost/mpl/aux_/largest_int.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#endif\n\n#if !defined(AUX778076_OP_PREFIX)\n#   define AUX778076_OP_PREFIX AUX778076_OP_NAME\n#endif\n\n#include <boost/mpl/aux_/numeric_op.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/workaround.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)\n{\n    BOOST_STATIC_CONSTANT(T, value = (n1 AUX778076_OP_TOKEN n2));\n    typedef integral_c<T,value> type;\n};\n}\n#endif\n\ntemplate<>\nstruct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>\n{\n    template< typename N1, typename N2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n#else\n        : aux::BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n#endif\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#undef AUX778076_OP_TAG_NAME\n#undef AUX778076_OP_IMPL_NAME\n#undef AUX778076_OP_ARITY\n#undef AUX778076_OP_PREFIX\n#undef AUX778076_OP_NAME\n#undef AUX778076_OP_TOKEN\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/arity.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ARITY_HPP_INCLUDED\n#define BOOST_MPL_AUX_ARITY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/dtp.hpp>\n\n#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n// agurt, 15/mar/02: it's possible to implement the template so that it will \n// \"just work\" and do not require any specialization, but not on the compilers\n// that require the arity workaround in the first place\ntemplate< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) >\nstruct arity\n{\n    BOOST_STATIC_CONSTANT(int, value = N);\n};\n\n}}}\n\n#endif // BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES\n\n#endif // BOOST_MPL_AUX_ARITY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/arity_spec.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED\n#define BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/limits/arity.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/arity.hpp>\n#include <boost/mpl/aux_/template_arity_fwd.hpp>\n#include <boost/mpl/aux_/config/ttp.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) \\\nnamespace aux { \\\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N), BOOST_MPL_PP_PARAMS(i,type T) > \\\nstruct arity< \\\n      name< BOOST_MPL_PP_PARAMS(i,T) > \\\n    , N \\\n    > \\\n{ \\\n    BOOST_STATIC_CONSTANT(int \\\n        , value = BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        ); \\\n}; \\\n} \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) /**/\n#endif\n\n#   define BOOST_MPL_AUX_ARITY_SPEC(i,name) \\\n    BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,typename,name) \\\n/**/\n\n\n#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \\\n    && !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) \\\nnamespace aux { \\\ntemplate< BOOST_MPL_PP_PARAMS(i,typename T) > \\\nstruct template_arity< name<BOOST_MPL_PP_PARAMS(i,T)> > \\\n    : int_<i> \\\n{ \\\n}; \\\n} \\\n/**/\n#else\n#   define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/\n#endif\n\n\n#endif // BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/at_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/advance.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'at_impl' or the primary 'at' template\n\ntemplate< typename Tag >\nstruct at_impl\n{\n    template< typename Sequence, typename N > struct apply\n    {\n        typedef typename advance<\n              typename begin<Sequence>::type\n            , N\n            >::type iter_;\n\n        typedef typename deref<iter_>::type type;\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, at_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/back_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_BACK_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_BACK_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation, requires at least bi-directional iterators;\n// conrete sequences might override it by specializing either the \n// 'back_impl' or the primary 'back' template\n\ntemplate< typename Tag >\nstruct back_impl\n{\n    template< typename Sequence > struct apply\n    {\n        typedef typename end<Sequence>::type end_;\n        typedef typename prior<end_>::type last_;\n        typedef typename deref<last_>::type type;\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, back_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_BACK_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/basic_bind.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_BASIC_BIND_HPP_INCLUDED\n#define BOOST_MPL_AUX_BASIC_BIND_HPP_INCLUDED\n\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\n#include <boost/mpl/bind.hpp>\n\n#endif // BOOST_MPL_AUX_BASIC_BIND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/begin_end_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end_fwd.hpp>\n#include <boost/mpl/sequence_tag_fwd.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/aux_/has_begin.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\n\nnamespace aux { \n\ntemplate< typename Sequence > \nstruct begin_type \n{ \n    typedef typename Sequence::begin type; \n};\ntemplate< typename Sequence > \nstruct end_type\n{ \n    typedef typename Sequence::end type; \n};\n\n}\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'begin_impl/end_impl' or the primary \n// 'begin/end' templates\n\ntemplate< typename Tag >\nstruct begin_impl\n{\n    template< typename Sequence > struct apply\n    {\n        typedef typename eval_if<aux::has_begin<Sequence, true_>,\n                                 aux::begin_type<Sequence>, void_>::type type;\n    };\n};\n\ntemplate< typename Tag >\nstruct end_impl\n{\n    template< typename Sequence > struct apply\n    {\n        typedef typename eval_if<aux::has_begin<Sequence, true_>,\n                                 aux::end_type<Sequence>, void_>::type type;\n    };\n};\n\n// specialize 'begin_trait/end_trait' for two pre-defined tags\n\n#   define AUX778076_IMPL_SPEC(name, tag, result) \\\ntemplate<> \\\nstruct name##_impl<tag> \\\n{ \\\n    template< typename Sequence > struct apply \\\n    { \\\n        typedef result type; \\\n    }; \\\n}; \\\n/**/\n\n// a sequence with nested 'begin/end' typedefs; just query them\nAUX778076_IMPL_SPEC(begin, nested_begin_end_tag, typename Sequence::begin)\nAUX778076_IMPL_SPEC(end, nested_begin_end_tag, typename Sequence::end)\n\n// if a type 'T' does not contain 'begin/end' or 'tag' members \n// and doesn't specialize either 'begin/end' or 'begin_impl/end_impl' \n// templates, then we end up here\nAUX778076_IMPL_SPEC(begin, non_sequence_tag, void_)\nAUX778076_IMPL_SPEC(end, non_sequence_tag, void_)\nAUX778076_IMPL_SPEC(begin, na, void_)\nAUX778076_IMPL_SPEC(end, na, void_)\n\n#   undef AUX778076_IMPL_SPEC\n\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(1,begin_impl)\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(1,end_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/clear_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\n// no default implementation; the definition is needed to make MSVC happy\n\ntemplate< typename Tag >\nstruct clear_impl\n{\n    template< typename Sequence > struct apply;\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, clear_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/common_name_wknd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED\n#define BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(__BORLANDC__, < 0x561)\n// agurt, 12/nov/02: to suppress the bogus \"Cannot have both a template class \n// and function named 'xxx'\" diagnostic\n#   define BOOST_MPL_AUX_COMMON_NAME_WKND(name) \\\nnamespace name_##wknd { \\\ntemplate< typename > void name(); \\\n} \\\n/**/\n\n#else\n\n#   define BOOST_MPL_AUX_COMMON_NAME_WKND(name) /**/\n\n#endif // __BORLANDC__\n\n#endif // BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/comparison_op.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#endif\n\n#if !defined(AUX778076_OP_PREFIX)\n#   define AUX778076_OP_PREFIX AUX778076_OP_NAME\n#endif\n\n#define AUX778076_OP_ARITY 2\n\n#include <boost/mpl/aux_/numeric_op.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/integral.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n// MSVC workaround: implement less in terms of greater\n#if 0 AUX778076_OP_TOKEN 1 && !(1 AUX778076_OP_TOKEN 0) && !(0 AUX778076_OP_TOKEN 0)\n#   define AUX778076_OP(N1, N2) \\\n    ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) \\\n/**/\n#else\n#   define AUX778076_OP(N1, N2) \\\n    ( BOOST_MPL_AUX_VALUE_WKND(N1)::value \\\n          AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(N2)::value \\\n        ) \\\n/**/\n#endif\n\ntemplate<>\nstruct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>\n{\n    template< typename N1, typename N2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\n        : bool_< AUX778076_OP(N1, N2) >\n    {\n#else\n    {\n        BOOST_STATIC_CONSTANT(bool, value = AUX778076_OP(N1, N2));\n        typedef bool_<value> type;\n#endif\n    };\n};\n\n#undef AUX778076_OP\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#undef AUX778076_OP_TAG_NAME\n#undef AUX778076_OP_IMPL_NAME\n#undef AUX778076_OP_ARITY\n#undef AUX778076_OP_PREFIX\n#undef AUX778076_OP_NAME\n#undef AUX778076_OP_TOKEN\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/adl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/intel.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// agurt, 25/apr/04: technically, the ADL workaround is only needed for GCC,\n// but putting everything expect public, user-specializable metafunctions into\n// a separate global namespace has a nice side effect of reducing the length \n// of template instantiation symbols, so we apply the workaround on all \n// platforms that can handle it\n\n#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE) \\\n    && (   BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \\\n        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \\\n        || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \\\n        || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/arrays.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && ( BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/bcc.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date: 2004-09-02 10:41:37 -0500 (Thu, 02 Sep 2004) $\n// $Revision: 24874 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, >= 0x590) \\\n    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n\n#   define BOOST_MPL_CFG_BCC590_WORKAROUNDS\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/bind.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED\n\n// Copyright David Abrahams 2002\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_BIND_TEMPLATE\n\n#endif\n\n//#define BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\n\n#endif // BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/compiler.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_CFG_COMPILER_DIR)\n\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/config/ttp.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/gcc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n#       define BOOST_MPL_CFG_COMPILER_DIR msvc60\n\n#   elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n#       define BOOST_MPL_CFG_COMPILER_DIR msvc70\n\n#   elif BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))\n#       define BOOST_MPL_CFG_COMPILER_DIR gcc\n\n#   elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n#       if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#           define BOOST_MPL_CFG_COMPILER_DIR bcc551\n#       elif BOOST_WORKAROUND(__BORLANDC__, >= 0x590)\n#           define BOOST_MPL_CFG_COMPILER_DIR bcc\n#       else\n#           define BOOST_MPL_CFG_COMPILER_DIR bcc_pre590\n#       endif\n\n#   elif BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n#       define BOOST_MPL_CFG_COMPILER_DIR dmc\n\n#   elif defined(__MWERKS__)\n#       if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#           define BOOST_MPL_CFG_COMPILER_DIR mwcw\n#       else\n#           define BOOST_MPL_CFG_COMPILER_DIR plain\n#       endif\n\n#   elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#       define BOOST_MPL_CFG_COMPILER_DIR no_ctps\n\n#   elif defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)\n#       define BOOST_MPL_CFG_COMPILER_DIR no_ttp\n\n#   else\n#       define BOOST_MPL_CFG_COMPILER_DIR plain\n#   endif\n\n#endif // BOOST_MPL_CFG_COMPILER_DIR\n\n#endif // BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/ctps.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/config.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, < 0x582)\n\n#   define BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC\n\n#endif\n\n// BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION is defined in <boost/config.hpp>\n\n#endif // BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/dependent_nttp.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_DEPENDENT_NTTP_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_DEPENDENT_NTTP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// GCC and EDG-based compilers incorrectly reject the following code:\n//   template< typename T, T n > struct a;\n//   template< typename T > struct b;\n//   template< typename T, T n > struct b< a<T,n> > {};\n\n#if    !defined(BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   BOOST_WORKAROUND(__EDG_VERSION__, BOOST_TESTED_AT(300)) \\\n        || BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_DEPENDENT_NTTP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_DMC_AMBIGUOUS_CTPS_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_DMC_AMBIGUOUS_CTPS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n\n#   define BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_DMC_AMBIGUOUS_CTPS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/dtp.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// MWCW 7.x-8.0 \"losts\" default template parameters of nested class \n// templates when their owner classes are passed as arguments to other \n// templates; Borland 5.5.1 \"forgets\" them from the very beginning (if \n// the owner class is a class template), and Borland 5.6 isn't even\n// able to compile a definition of nested class template with DTP\n\n#if    !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, >= 0x560) \\\n    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n\n#   define BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES\n\n#endif\n\n\n#if    !defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   BOOST_WORKAROUND(__MWERKS__, <= 0x3001) \\\n        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        || defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \\\n        )\n        \n#   define BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/eti.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// flags for MSVC 6.5's so-called \"early template instantiation bug\"\n#if    !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n\n#   define BOOST_MPL_CFG_MSVC_60_ETI_BUG\n\n#endif\n\n#if    !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n\n#   define BOOST_MPL_CFG_MSVC_70_ETI_BUG\n\n#endif\n\n#if    !defined(BOOST_MPL_CFG_MSVC_ETI_BUG) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && ( defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \\\n        || defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \\\n        )\n\n#   define BOOST_MPL_CFG_MSVC_ETI_BUG\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/forwarding.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n\n#   define BOOST_MPL_CFG_NO_NESTED_FORWARDING\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/gcc.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if defined(__GNUC__) && !defined(__EDG_VERSION__)\n#   define BOOST_MPL_CFG_GCC ((__GNUC__ << 8) | __GNUC_MINOR__)\n#else\n#   define BOOST_MPL_CFG_GCC 0\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/gpu.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED\n\n// Copyright Eric Niebler 2014\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/config.hpp>\n\n#if !defined(BOOST_MPL_CFG_GPU_ENABLED) \\\n\n#   define BOOST_MPL_CFG_GPU_ENABLED BOOST_GPU_ENABLED\n\n#endif\n\n#if defined __CUDACC__\n\n#    define BOOST_MPL_CFG_GPU 1\n\n#else\n\n#    define BOOST_MPL_CFG_GPU 0\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/has_apply.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/has_xxx.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_HAS_APPLY) \\\n    && (   defined(BOOST_MPL_CFG_NO_HAS_XXX) \\\n        || BOOST_WORKAROUND(__EDG_VERSION__, < 300) \\\n        || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n        || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_HAS_APPLY\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/has_xxx.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n// Copyright David Abrahams 2002-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/overload_resolution.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// agurt, 11/jan/03: signals a stub-only 'has_xxx' implementation\n\n#if !defined(BOOST_MPL_CFG_NO_HAS_XXX) \\\n    && (   defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \\\n        || BOOST_WORKAROUND(__GNUC__, <= 2) \\\n        || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_HAS_XXX\n#   define BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/integral.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n\n#   define BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS\n\n#endif\n\n#if    !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n        || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/intel.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n\n// BOOST_INTEL_CXX_VERSION is defined here:\n#include <boost/config.hpp>\n\n#endif // BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/lambda.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/ttp.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\n// agurt, 15/jan/02: full-fledged implementation requires both \n// template template parameters _and_ partial specialization\n\n#if    !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \\\n    && (   defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \\\n        || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/msvc.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n\n// BOOST_MSVC is defined here:\n#include <boost/config.hpp>\n\n#endif // BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/msvc_typename.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n#   define BOOST_MSVC_TYPENAME\n#else\n#   define BOOST_MSVC_TYPENAME typename\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/nttp.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// MSVC 6.5 ICE-s on the code as simple as this (see \"aux_/nttp_decl.hpp\"\n// for a workaround):\n//\n//    namespace std {\n//    template< typename Char > struct string;\n//    }\n//\n//    void foo(std::string<char>);\n//\n//    namespace boost { namespace mpl {\n//    template< int > struct arg;\n//    }}\n\n#if    !defined(BOOST_MPL_CFG_NTTP_BUG) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n\n#   define BOOST_MPL_CFG_NTTP_BUG\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/operators.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING) \\\n    && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        || BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \\\n        || BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, <= 0x0295) \\\n        || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \\\n        || BOOST_WORKAROUND(__NVCC__, BOOST_TESTED_AT(1)) \\\n        )\n\n#   define BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/overload_resolution.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   BOOST_WORKAROUND(__BORLANDC__, < 0x590) \\\n        || BOOST_WORKAROUND(__MWERKS__, < 0x3001) \\\n        )\n\n#   define BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/pp_counter.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_AUX_PP_COUNTER)\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   if BOOST_WORKAROUND(BOOST_MSVC, >= 1300)\n#       define BOOST_MPL_AUX_PP_COUNTER() __COUNTER__\n#   else\n#       define BOOST_MPL_AUX_PP_COUNTER() __LINE__\n#   endif\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/preprocessor.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION) \\\n    && (   BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \\\n        || BOOST_WORKAROUND(__BORLANDC__, < 0x582) \\\n        || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \\\n        )\n\n#   define BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION\n\n#endif\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n#   define BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES\n#endif\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING) \\\n    && BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n#   define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING\n#endif\n\n\n#endif // BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/static_constant.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n// BOOST_STATIC_CONSTANT is defined here:\n#   include <boost/config.hpp>\n#else\n// undef the macro for the preprocessing mode\n#   undef BOOST_STATIC_CONSTANT\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/ttp.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \\\n    && ( defined(BOOST_NO_TEMPLATE_TEMPLATES) \\\n      || BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x590) ) \\\n       )\n\n#   define BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS\n\n#endif\n\n\n#if    !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \\\n        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        )\n\n#   define BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/typeof.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/gcc.hpp>\n\n#if !defined(BOOST_MPL_CFG_HAS_TYPEOF) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   defined(BOOST_MPL_CFG_GCC) && BOOST_MPL_CFG_GCC >= 0x0302 \\\n        || defined(__MWERKS__) && __MWERKS__ >= 0x3000 \\\n        )\n\n#   define BOOST_MPL_CFG_HAS_TYPEOF\n\n#endif\n\n\n#if !defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && defined(BOOST_MPL_CFG_HAS_TYPEOF)\n\n#   define BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/use_preprocessed.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n// #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/config/workaround.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/detail/workaround.hpp>\n\n#endif // BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/contains_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/contains_fwd.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/find.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag >\nstruct contains_impl\n{\n    template< typename Sequence, typename T > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : not_< is_same<\n              typename find<Sequence,T>::type\n            , typename end<Sequence>::type\n            > >\n    {\n#else\n    {\n        typedef not_< is_same<\n              typename find<Sequence,T>::type\n            , typename end<Sequence>::type\n            > > type;\n\n        BOOST_STATIC_CONSTANT(bool, value = \n              (not_< is_same<\n                  typename find<Sequence,T>::type\n                , typename end<Sequence>::type\n                > >::value)\n            );\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,contains_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/count_args.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/preprocessor/expr_if.hpp>\n#include <boost/preprocessor/inc.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n#if !defined(AUX778076_COUNT_ARGS_PARAM_NAME)\n#   define AUX778076_COUNT_ARGS_PARAM_NAME T\n#endif\n\n#if !defined(AUX778076_COUNT_ARGS_TEMPLATE_PARAM)\n#   define AUX778076_COUNT_ARGS_TEMPLATE_PARAM typename AUX778076_COUNT_ARGS_PARAM_NAME\n#endif\n\n// local macros, #undef-ined at the end of the header\n\n#if !defined(AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES)\n\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n\n#   define AUX778076_COUNT_ARGS_REPEAT BOOST_MPL_PP_REPEAT\n#   define AUX778076_COUNT_ARGS_PARAMS(param) \\\n    BOOST_MPL_PP_PARAMS( \\\n          AUX778076_COUNT_ARGS_ARITY \\\n        , param \\\n        ) \\\n    /**/\n\n#else\n\n#   include <boost/preprocessor/enum_shifted_params.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n\n#   define AUX778076_COUNT_ARGS_REPEAT BOOST_PP_REPEAT\n#   define AUX778076_COUNT_ARGS_PARAMS(param) \\\n    BOOST_PP_ENUM_SHIFTED_PARAMS( \\\n          BOOST_PP_INC(AUX778076_COUNT_ARGS_ARITY) \\\n        , param \\\n        ) \\\n    /**/\n\n#endif // AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES\n\n\n#define AUX778076_IS_ARG_TEMPLATE_NAME \\\n    BOOST_PP_CAT(is_,BOOST_PP_CAT(AUX778076_COUNT_ARGS_PREFIX,_arg)) \\\n/**/\n\n#define AUX778076_COUNT_ARGS_FUNC(unused, i, param) \\\n    BOOST_PP_EXPR_IF(i, +) \\\n    AUX778076_IS_ARG_TEMPLATE_NAME<BOOST_PP_CAT(param,BOOST_PP_INC(i))>::value \\\n/**/\n\n// is_<xxx>_arg\ntemplate< AUX778076_COUNT_ARGS_TEMPLATE_PARAM >\nstruct AUX778076_IS_ARG_TEMPLATE_NAME\n{\n    BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate<>\nstruct AUX778076_IS_ARG_TEMPLATE_NAME<AUX778076_COUNT_ARGS_DEFAULT>\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n// <xxx>_count_args\ntemplate<\n      AUX778076_COUNT_ARGS_PARAMS(AUX778076_COUNT_ARGS_TEMPLATE_PARAM)\n    >\nstruct BOOST_PP_CAT(AUX778076_COUNT_ARGS_PREFIX,_count_args)\n{\n    BOOST_STATIC_CONSTANT(int, value = AUX778076_COUNT_ARGS_REPEAT(\n          AUX778076_COUNT_ARGS_ARITY\n        , AUX778076_COUNT_ARGS_FUNC\n        , AUX778076_COUNT_ARGS_PARAM_NAME\n        ));\n};\n\n#undef AUX778076_COUNT_ARGS_FUNC\n#undef AUX778076_IS_ARG_TEMPLATE_NAME\n#undef AUX778076_COUNT_ARGS_PARAMS\n#undef AUX778076_COUNT_ARGS_REPEAT\n\n#undef AUX778076_COUNT_ARGS_ARITY\n#undef AUX778076_COUNT_ARGS_DEFAULT\n#undef AUX778076_COUNT_ARGS_PREFIX\n#undef AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES\n#undef AUX778076_COUNT_ARGS_TEMPLATE_PARAM\n#undef AUX778076_COUNT_ARGS_PARAM_NAME\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/count_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_COUNT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_COUNT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/count_fwd.hpp>\n#include <boost/mpl/count_if.hpp>\n#include <boost/mpl/same_as.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct count_impl\n{\n    template< typename Sequence, typename T > struct apply\n#if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x561))\n    {\n        typedef typename count_if< Sequence,same_as<T> >::type type;\n        BOOST_STATIC_CONSTANT(int, value = BOOST_MPL_AUX_VALUE_WKND(type)::value);\n#else\n        : count_if< Sequence,same_as<T> >\n    {\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,count_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_COUNT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/empty_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/empty_fwd.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'empty_impl' or the primary 'empty' template\n\ntemplate< typename Tag >\nstruct empty_impl\n{\n    template< typename Sequence > struct apply\n        : is_same<\n              typename begin<Sequence>::type\n            , typename end<Sequence>::type\n            >\n    {\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1,empty_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/erase_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ERASE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_ERASE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/clear.hpp>\n#include <boost/mpl/push_front.hpp>\n#include <boost/mpl/reverse_fold.hpp>\n#include <boost/mpl/iterator_range.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/aux_/na.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'erase_impl' or the primary 'erase' template\n\ntemplate< typename Tag >\nstruct erase_impl\n{\n    template<\n          typename Sequence\n        , typename First\n        , typename Last\n        >\n    struct apply\n    {\n        typedef typename if_na< Last,typename next<First>::type >::type last_;\n        \n        // 1st half: [begin, first)\n        typedef iterator_range<\n              typename begin<Sequence>::type\n            , First\n            > first_half_;\n\n        // 2nd half: [last, end) ... that is, [last + 1, end)\n        typedef iterator_range<\n              last_\n            , typename end<Sequence>::type\n            > second_half_;\n\n        typedef typename reverse_fold<\n              second_half_\n            , typename clear<Sequence>::type\n            , push_front<_,_>\n            >::type half_sequence_;\n\n        typedef typename reverse_fold<\n              first_half_\n            , half_sequence_\n            , push_front<_,_>\n            >::type type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_AUX_ERASE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/erase_key_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ERASE_KEY_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_ERASE_KEY_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/erase_key_fwd.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag >\nstruct erase_key_impl\n{\n    template< typename Sequence, typename Key > struct apply;\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, erase_key_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_ERASE_KEY_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/filter_iter.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_FILTER_ITER_HPP_INCLUDED\n#define BOOST_MPL_AUX_FILTER_ITER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/find_if.hpp>\n#include <boost/mpl/iterator_range.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/aux_/lambda_spec.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename Iterator\n    , typename LastIterator\n    , typename Predicate\n    > \nstruct filter_iter;\n\ntemplate<\n      typename Iterator\n    , typename LastIterator\n    , typename Predicate\n    >\nstruct next_filter_iter\n{\n    typedef typename find_if<\n          iterator_range<Iterator,LastIterator>\n        , Predicate\n        >::type base_iter_;\n \n    typedef filter_iter<base_iter_,LastIterator,Predicate> type;\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename Iterator\n    , typename LastIterator\n    , typename Predicate\n    >\nstruct filter_iter\n{\n    typedef Iterator base;\n    typedef forward_iterator_tag category;\n    typedef typename aux::next_filter_iter<\n          typename mpl::next<base>::type\n        , LastIterator\n        , Predicate\n        >::type next;\n    \n    typedef typename deref<base>::type type;\n};\n\ntemplate<\n      typename LastIterator\n    , typename Predicate\n    >\nstruct filter_iter< LastIterator,LastIterator,Predicate >\n{\n    typedef LastIterator base;\n    typedef forward_iterator_tag category;\n};\n\n#else\n\ntemplate< bool >\nstruct filter_iter_impl\n{\n    template<\n          typename Iterator\n        , typename LastIterator\n        , typename Predicate\n        >\n    struct result_\n    {\n        typedef Iterator base;\n        typedef forward_iterator_tag category;\n        typedef typename next_filter_iter<\n              typename mpl::next<Iterator>::type\n            , LastIterator\n            , Predicate\n            >::type next;\n        \n        typedef typename deref<base>::type type;\n    };\n};\n\ntemplate<>\nstruct filter_iter_impl< true >\n{\n    template<\n          typename Iterator\n        , typename LastIterator\n        , typename Predicate\n        >\n    struct result_\n    {\n        typedef Iterator base;\n        typedef forward_iterator_tag category;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename LastIterator\n    , typename Predicate\n    >\nstruct filter_iter\n    : filter_iter_impl<\n          ::boost::is_same<Iterator,LastIterator>::value\n        >::template result_< Iterator,LastIterator,Predicate >\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace aux\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::filter_iter)\n\n}}\n\n#endif // BOOST_MPL_AUX_FILTER_ITER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/find_if_pred.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED\n#define BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Eric Friedman 2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n#include <boost/mpl/aux_/iter_apply.hpp>\n#include <boost/mpl/not.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Predicate >\nstruct find_if_pred\n{\n    template< typename Iterator >\n    struct apply\n    {\n        typedef not_< aux::iter_apply1<Predicate,Iterator> > type;\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/fold_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/next_prior.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/deref.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#       include <boost/mpl/if.hpp>\n#       include <boost/type_traits/is_same.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER fold_impl.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type\n#   define AUX778076_FOLD_IMPL_NAME_PREFIX fold\n#   include <boost/mpl/aux_/fold_impl_body.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/fold_impl_body.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#   include <boost/mpl/limits/unrolling.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/dec.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n// local macros, #undef-ined at the end of the header\n\n#   define AUX778076_ITER_FOLD_STEP(unused, i, unused2) \\\n    typedef typename apply2< \\\n          ForwardOp \\\n        , BOOST_PP_CAT(state,i) \\\n        , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,i)) \\\n        >::type BOOST_PP_CAT(state,BOOST_PP_INC(i)); \\\n    typedef typename mpl::next<BOOST_PP_CAT(iter,i)>::type \\\n        BOOST_PP_CAT(iter,BOOST_PP_INC(i)); \\\n    /**/\n\n#   define AUX778076_FOLD_IMPL_NAME \\\n    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_impl) \\\n    /**/\n\n#   define AUX778076_FOLD_CHUNK_NAME \\\n    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_chunk) \\\n    /**/\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(int, N)\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME;\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n#   if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))\n#   include BOOST_PP_ITERATE()\n\n// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(int, N)\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME\n{\n    typedef AUX778076_FOLD_IMPL_NAME<\n          BOOST_MPL_LIMIT_UNROLLING\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef AUX778076_FOLD_IMPL_NAME<\n          ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n        \n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\n// fallback implementation for sequences of unknown size\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME<-1,First,Last,State,ForwardOp>\n    : AUX778076_FOLD_IMPL_NAME<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME<-1,Last,Last,State,ForwardOp>\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n#   else // BOOST_WORKAROUND(__BORLANDC__, < 0x600)\n\n// Borland have some serious problems with the unrolled version, so\n// we always use a basic implementation\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(int, N)\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME\n{\n    typedef AUX778076_FOLD_IMPL_NAME<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n    typedef state type;\n};\n\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(int, N)\n     , typename Last\n    , typename State\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME<N,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n    typedef state type;\n};\n\n#   endif // BOOST_WORKAROUND(__BORLANDC__, < 0x600)\n \n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) >\nstruct AUX778076_FOLD_CHUNK_NAME;\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))\n#   include BOOST_PP_ITERATE()\n\n// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > \nstruct AUX778076_FOLD_CHUNK_NAME\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        > \n    struct result_\n    {\n        typedef AUX778076_FOLD_IMPL_NAME<\n              BOOST_MPL_LIMIT_UNROLLING\n            , First\n            , Last\n            , State\n            , ForwardOp\n            > chunk_;\n\n        typedef AUX778076_FOLD_IMPL_NAME<\n              ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )\n            , typename chunk_::iterator\n            , Last\n            , typename chunk_::state\n            , ForwardOp\n            > res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\n// fallback implementation for sequences of unknown size\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    > \nstruct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step);\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<> \nstruct AUX778076_FOLD_CHUNK_NAME<-1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        > \n    struct result_\n    {\n        typedef typename if_<\n              typename is_same<First,Last>::type\n            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)<Last,State>\n            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)<First,Last,State,ForwardOp>\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n    /// ETI workaround\n    template<> struct result_<int,int,int,int>\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n#endif\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    > \nstruct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)\n{\n    // can't inherit here - it breaks MSVC 7.0\n    typedef AUX778076_FOLD_CHUNK_NAME<-1>::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type\n        , ForwardOp\n        > chunk_;\n\n    typedef typename chunk_::state state;\n    typedef typename chunk_::iterator iterator;\n};\n\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(int, N)\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME\n    : AUX778076_FOLD_CHUNK_NAME<N>\n        ::template result_<First,Last,State,ForwardOp>\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n}}}\n\n#   undef AUX778076_FOLD_IMPL_NAME\n#   undef AUX778076_FOLD_CHUNK_NAME\n#   undef AUX778076_ITER_FOLD_STEP\n\n#undef AUX778076_FOLD_IMPL_OP\n#undef AUX778076_FOLD_IMPL_NAME_PREFIX\n\n///// iteration\n\n#else\n\n#   define n_ BOOST_PP_FRAME_ITERATION(1)\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct AUX778076_FOLD_IMPL_NAME<n_,First,Last,State,ForwardOp>\n{\n    typedef First iter0;\n    typedef State state0;\n\n    BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)\n\n    typedef BOOST_PP_CAT(state,n_) state;\n    typedef BOOST_PP_CAT(iter,n_) iterator;\n};\n\n#else\n\ntemplate<> struct AUX778076_FOLD_CHUNK_NAME<n_>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n\n        BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)\n\n        typedef BOOST_PP_CAT(state,n_) state;\n        typedef BOOST_PP_CAT(iter,n_) iterator;\n    };\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n    /// ETI workaround\n    template<> struct result_<int,int,int,int>\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n#endif\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#   undef n_\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/fold_op.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_FOLD_OP_HPP_INCLUDED\n#define BOOST_MPL_AUX_FOLD_OP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/apply.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n// hand-written version is more efficient than bind/lambda expression\ntemplate< typename Op >\nstruct fold_op\n{\n    template< typename T1, typename T2 > struct apply\n    {\n        typedef typename apply2<\n              Op\n            , T1\n            , typename T2::type\n            >::type type;\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_FOLD_OP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/fold_pred.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_FOLD_PRED_HPP_INCLUDED\n#define BOOST_MPL_AUX_FOLD_PRED_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/same_as.hpp>\n#include <boost/mpl/apply.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Last >\nstruct fold_pred\n{\n    template<\n          typename State\n        , typename Iterator\n        >\n    struct apply\n        : not_same_as<Last>::template apply<Iterator>\n    {\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_FOLD_PRED_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/front_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_FRONT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_FRONT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/front_fwd.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'front_impl' or the primary 'front' template\n\ntemplate< typename Tag >\nstruct front_impl\n{\n    template< typename Sequence > struct apply\n    {\n        typedef typename begin<Sequence>::type iter_;\n        typedef typename deref<iter_>::type type;\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1,front_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_FRONT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/full_lambda.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED\n#define BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/lambda_fwd.hpp>\n#   include <boost/mpl/bind_fwd.hpp>\n#   include <boost/mpl/protect.hpp>\n#   include <boost/mpl/quote.hpp>\n#   include <boost/mpl/arg.hpp>\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/int_fwd.hpp>\n#   include <boost/mpl/aux_/template_arity.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/config/ttp.hpp>\n#   if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n#       include <boost/mpl/if.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/lambda_arity_param.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER full_lambda.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n#   define AUX778076_LAMBDA_PARAMS(i_, param) \\\n    BOOST_MPL_PP_PARAMS(i_, param) \\\n    /**/\n\n#   define AUX778076_BIND_PARAMS(param) \\\n    BOOST_MPL_PP_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        ) \\\n    /**/\n\n#   define AUX778076_BIND_N_PARAMS(i_, param) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    BOOST_MPL_PP_PARAMS(i_, param) \\\n    /**/\n\n#   define AUX778076_ARITY_PARAM(param) \\\n    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) \\\n    /**/\n\n\n#define n_ BOOST_MPL_LIMIT_METAFUNCTION_ARITY\nnamespace aux {\n\ntemplate<\n      BOOST_MPL_PP_DEFAULT_PARAMS(n_,bool C,false)\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< BOOST_MPL_PP_ENUM(n_,false) >\n    : false_\n{\n};\n\n} // namespace aux\n#undef n_\n\ntemplate<\n      typename T\n    , typename Tag\n    AUX778076_ARITY_PARAM(typename Arity)\n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>,Tag AUX778076_ARITY_PARAM(int_<-1>) >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type; \n};\n\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/aux_/full_lambda.hpp>))\n#include BOOST_PP_ITERATE()\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>,Tag AUX778076_ARITY_PARAM(int_<1>) >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\ntemplate<\n      typename F, AUX778076_BIND_PARAMS(typename T)\n    , typename Tag\n    >\nstruct lambda<\n          bind<F,AUX778076_BIND_PARAMS(T)>\n        , Tag\n        AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)>)\n        >\n{\n    typedef false_ is_le;\n    typedef bind<F, AUX778076_BIND_PARAMS(T)> result_;\n    typedef result_ type;\n};\n\n\n#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    , typename Arity\n    >\nstruct lambda<\n          lambda<F,Tag1,Arity>\n        , Tag2\n        , int_<3>\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n\n    typedef typename l1::is_le is_le;\n    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;\n    typedef lambda< typename if_<is_le,arity_,Arity>::type,Tag2 > l3;\n    \n    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\n#elif !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\n\n/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars\ntemplate<\n      typename F, typename Tag1, typename Tag2\n    >\nstruct lambda<\n          lambda< F,Tag1 >\n        , Tag2\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    \n    typedef typename l1::is_le is_le;\n    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\n#endif\n\n#   undef AUX778076_ARITY_PARAM\n#   undef AUX778076_BIND_N_PARAMS\n#   undef AUX778076_BIND_PARAMS\n#   undef AUX778076_LAMBDA_PARAMS\n\n#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\nBOOST_MPL_AUX_NA_SPEC(2, lambda)\n#else\nBOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)\n#endif\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#if i_ > 0\n\nnamespace aux {\n\n#   define AUX778076_RESULT(unused, i_, T) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::result_ \\\n    /**/\n\n#   define AUX778076_TYPE(unused, i_, T) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::type \\\n    /**/\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F\n    , AUX778076_LAMBDA_PARAMS(i_, typename L)\n    >\nstruct BOOST_PP_CAT(le_result,i_)\n{\n    typedef F<\n          BOOST_MPL_PP_REPEAT(i_, AUX778076_TYPE, L)\n        > result_;\n    \n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F\n    , AUX778076_LAMBDA_PARAMS(i_, typename L)\n    >\nstruct BOOST_PP_CAT(le_result,i_)< true_,Tag,F,AUX778076_LAMBDA_PARAMS(i_, L) >\n{\n    typedef BOOST_PP_CAT(bind,i_)<\n          BOOST_PP_CAT(quote,i_)<F,Tag>\n        , BOOST_MPL_PP_REPEAT(i_, AUX778076_RESULT, L)\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n#   undef AUX778076_TYPE\n#   undef AUX778076_RESULT\n\n} // namespace aux\n\n\n#   define AUX778076_LAMBDA_TYPEDEF(unused, i_, T) \\\n    typedef lambda< BOOST_PP_CAT(T, BOOST_PP_INC(i_)), Tag > \\\n        BOOST_PP_CAT(l,BOOST_PP_INC(i_)); \\\n/**/\n\n#   define AUX778076_IS_LE_TYPEDEF(unused, i_, unused2) \\\n    typedef typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::is_le \\\n        BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)); \\\n/**/\n\n#   define AUX778076_IS_LAMBDA_EXPR(unused, i_, unused2) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    BOOST_PP_CAT(is_le,BOOST_PP_INC(i_))::value \\\n/**/\n\ntemplate<\n      template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F\n    , AUX778076_LAMBDA_PARAMS(i_, typename T)\n    , typename Tag\n    >\nstruct lambda< \n          F<AUX778076_LAMBDA_PARAMS(i_, T)>\n        , Tag\n        AUX778076_ARITY_PARAM(int_<i_>)\n        >\n{\n    BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_TYPEDEF, T)\n    BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LE_TYPEDEF, unused)\n\n    typedef typename aux::lambda_or<\n          BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LAMBDA_EXPR, unused)\n        >::type is_le;\n\n    typedef aux::BOOST_PP_CAT(le_result,i_)<\n          is_le, Tag, F, AUX778076_LAMBDA_PARAMS(i_, l)\n        > le_result_;\n    \n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\n\n#   undef AUX778076_IS_LAMBDA_EXPR\n#   undef AUX778076_IS_LE_TYPEDEF\n#   undef AUX778076_LAMBDA_TYPEDEF\n\n#endif // i_ > 0\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T)\n    , typename Tag\n    >\nstruct lambda<\n          BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_, T)>\n        , Tag\n        AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(i_)>)\n        >\n{\n    typedef false_ is_le;\n    typedef BOOST_PP_CAT(bind,i_)<\n          F\n        AUX778076_BIND_N_PARAMS(i_, T)\n        > result_;\n        \n    typedef result_ type;\n};\n\n#undef i_\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/has_apply.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/has_xxx.hpp>\n#include <boost/mpl/aux_/config/has_apply.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n#if !defined(BOOST_MPL_CFG_NO_HAS_APPLY)\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_apply, apply, false)\n#else\ntemplate< typename T, typename fallback_ = false_ >\nstruct has_apply\n    : fallback_\n{\n};\n#endif\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/has_begin.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/has_xxx.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_begin, begin, true)\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/has_key_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n// Copyright David Abrahams 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/has_key_fwd.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n\nnamespace boost { namespace mpl {\n\n// no default implementation; the definition is needed to make MSVC happy \n\ntemplate< typename Tag > struct has_key_impl\n{\n    template< typename AssociativeSequence, typename Key > struct apply;\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,has_key_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/has_rebind.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/intel.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)\n#   include <boost/mpl/has_xxx.hpp>\n#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n#   include <boost/mpl/has_xxx.hpp>\n#   include <boost/mpl/if.hpp>\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/msvc_is_class.hpp>\n#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n#   include <boost/mpl/if.hpp>\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/yes_no.hpp>\n#   include <boost/mpl/aux_/config/static_constant.hpp>\n#   include <boost/type_traits/is_class.hpp>\n#else\n#   include <boost/mpl/aux_/type_wrapper.hpp>\n#   include <boost/mpl/aux_/yes_no.hpp>\n#   include <boost/mpl/aux_/config/static_constant.hpp>\n#endif\n\nnamespace boost { namespace mpl { namespace aux {\n\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)\n\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind, rebind, false)\n\n#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind_impl, rebind, false)\n\ntemplate< typename T >\nstruct has_rebind\n    : if_< \n          msvc_is_class<T>\n        , has_rebind_impl<T>\n        , bool_<false>\n        >::type\n{\n};\n\n#else // the rest\n\ntemplate< typename T > struct has_rebind_tag {};\nno_tag operator|(has_rebind_tag<int>, void const volatile*);\n\n#   if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\ntemplate< typename T >\nstruct has_rebind\n{\n    static has_rebind_tag<T>* get();\n    BOOST_STATIC_CONSTANT(bool, value = \n          sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag)\n        );\n};\n#   else // __BORLANDC__\ntemplate< typename T >\nstruct has_rebind_impl\n{\n    static T* get();\n    BOOST_STATIC_CONSTANT(bool, value = \n          sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag)\n        );\n};\n\ntemplate< typename T >\nstruct has_rebind\n    : if_< \n          is_class<T>\n        , has_rebind_impl<T>\n        , bool_<false>\n        >::type\n{\n};\n#   endif // __BORLANDC__\n\n#endif\n\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/has_size.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/has_xxx.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\nBOOST_MPL_HAS_XXX_TRAIT_DEF(size)\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/has_tag.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/has_xxx.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_tag, tag, false)\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/has_type.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/has_xxx.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_type, type, true)\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/include_preprocessed.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/compiler.hpp>\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_PREPROCESSED_HEADER \\\n    BOOST_MPL_CFG_COMPILER_DIR/BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#else\n#   define AUX778076_PREPROCESSED_HEADER \\\n    BOOST_PP_CAT(BOOST_MPL_CFG_COMPILER_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#endif\n\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))\n#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER)\n#   include AUX778076_INCLUDE_STRING\n#   undef AUX778076_INCLUDE_STRING\n#else\n#   include BOOST_PP_STRINGIZE(boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER)\n#endif\n\n#   undef AUX778076_PREPROCESSED_HEADER\n\n#undef BOOST_MPL_PREPROCESSED_HEADER\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/insert_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_INSERT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_INSERT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/reverse_fold.hpp>\n#include <boost/mpl/iterator_range.hpp>\n#include <boost/mpl/clear.hpp>\n#include <boost/mpl/push_front.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'insert_impl' or the primary 'insert' template\n\ntemplate< typename Tag >\nstruct insert_impl\n{\n    template<\n          typename Sequence\n        , typename Pos\n        , typename T\n        >\n    struct apply\n    {\n        typedef iterator_range<\n              typename begin<Sequence>::type\n            , Pos\n            > first_half_;\n\n        typedef iterator_range<\n              Pos\n            , typename end<Sequence>::type\n            > second_half_;\n\n        typedef typename reverse_fold<\n              second_half_\n            , typename clear<Sequence>::type\n            , push_front<_,_>\n            >::type half_sequence_;\n\n        typedef typename reverse_fold<\n              first_half_\n            , typename push_front<half_sequence_,T>::type\n            , push_front<_,_>\n            >::type type;\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(3,insert_impl)\n\n}}\n\n#endif // BOOST_MPL_INSERT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/insert_range_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/placeholders.hpp>\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/insert.hpp>\n#include <boost/mpl/clear.hpp>\n#include <boost/mpl/joint_view.hpp>\n#include <boost/mpl/iterator_range.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/iter_push_front.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n\n#include <boost/type_traits/same_traits.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'insert_range_impl' or the primary \n// 'insert_range' template\n\n\ntemplate< typename Tag >\nstruct insert_range_impl\n{\n    template<\n          typename Sequence\n        , typename Pos\n        , typename Range\n        >\n    struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : reverse_fold<\n              joint_view<\n                  iterator_range<typename begin<Sequence>::type,Pos>\n                , joint_view<\n                      Range\n                    , iterator_range<Pos,typename end<Sequence>::type>\n                    >\n                >\n            , typename clear<Sequence>::type\n            , insert<_1, begin<_1>, _2>\n            >\n    {\n#else\n    {\n        typedef typename reverse_fold<\n                joint_view<\n                    iterator_range<typename begin<Sequence>::type,Pos>\n                  , joint_view<\n                        Range\n                      , iterator_range<Pos,typename end<Sequence>::type>\n                      >\n                  >\n              , typename clear<Sequence>::type\n              , insert<_1, begin<_1>, _2>\n              >::type type;\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(3,insert_range_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/inserter_algorithm.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED\n#define BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/back_inserter.hpp>\n#include <boost/mpl/front_inserter.hpp>\n#include <boost/mpl/push_back.hpp>\n#include <boost/mpl/push_front.hpp>\n#include <boost/mpl/back_inserter.hpp>\n#include <boost/mpl/front_inserter.hpp>\n#include <boost/mpl/clear.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\n#include <boost/preprocessor/arithmetic/dec.hpp>\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \\\nBOOST_MPL_AUX_COMMON_NAME_WKND(name) \\\ntemplate< \\\n      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \\\n    > \\\nstruct name \\\n    : aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \\\n{ \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \\\n    > \\\nstruct name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \\\n    : if_< has_push_back< typename clear<P1>::type> \\\n        , aux::name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , back_inserter< typename clear<P1>::type > \\\n            > \\\n        , aux::reverse_##name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , front_inserter< typename clear<P1>::type > \\\n            > \\\n        >::type \\\n{ \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \\\n    > \\\nstruct reverse_##name \\\n    : aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \\\n{ \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \\\n    > \\\nstruct reverse_##name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \\\n    : if_< has_push_back<P1> \\\n        , aux::reverse_##name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , back_inserter< typename clear<P1>::type > \\\n            > \\\n        , aux::name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , front_inserter< typename clear<P1>::type > \\\n            > \\\n        >::type \\\n{ \\\n}; \\\nBOOST_MPL_AUX_NA_SPEC(arity, name) \\\nBOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \\\n/**/\n\n#else\n\n#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \\\nBOOST_MPL_AUX_COMMON_NAME_WKND(name) \\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \\\n    > \\\nstruct def_##name##_impl \\\n    : if_< has_push_back<P1> \\\n        , aux::name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , back_inserter< typename clear<P1>::type > \\\n            > \\\n        , aux::reverse_##name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , front_inserter< typename clear<P1>::type > \\\n            > \\\n        >::type \\\n{ \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \\\n    > \\\nstruct name \\\n{ \\\n    typedef typename eval_if< \\\n          is_na<BOOST_PP_CAT(P, arity)> \\\n        , def_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \\\n        , aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \\\n        >::type type; \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \\\n    > \\\nstruct def_reverse_##name##_impl \\\n    : if_< has_push_back<P1> \\\n        , aux::reverse_##name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , back_inserter< typename clear<P1>::type > \\\n            > \\\n        , aux::name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , front_inserter< typename clear<P1>::type > \\\n            > \\\n        >::type \\\n{ \\\n}; \\\ntemplate< \\\n      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \\\n    > \\\nstruct reverse_##name \\\n{ \\\n    typedef typename eval_if< \\\n          is_na<BOOST_PP_CAT(P, arity)> \\\n        , def_reverse_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \\\n        , aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \\\n        >::type type; \\\n}; \\\nBOOST_MPL_AUX_NA_SPEC(arity, name) \\\nBOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \\\n/**/\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/integral_wrapper.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n#include <boost/mpl/integral_c_tag.hpp>\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n\n#if !defined(AUX_WRAPPER_NAME)\n#   define AUX_WRAPPER_NAME BOOST_PP_CAT(AUX_WRAPPER_VALUE_TYPE,_)\n#endif\n\n#if !defined(AUX_WRAPPER_PARAMS)\n#   define AUX_WRAPPER_PARAMS(N) BOOST_MPL_AUX_NTTP_DECL(AUX_WRAPPER_VALUE_TYPE, N)\n#endif\n\n#if !defined(AUX_WRAPPER_INST)\n#   if BOOST_WORKAROUND(__MWERKS__, <= 0x2407)\n#       define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< value >\n#   else \n#       define AUX_WRAPPER_INST(value) BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::AUX_WRAPPER_NAME< value >\n#   endif\n#endif\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< AUX_WRAPPER_PARAMS(N) >\nstruct AUX_WRAPPER_NAME\n{\n    BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, value = N);\n// agurt, 08/mar/03: SGI MIPSpro C++ workaround, have to #ifdef because some \n// other compilers (e.g. MSVC) are not particulary happy about it\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n    typedef struct AUX_WRAPPER_NAME type;\n#else\n    typedef AUX_WRAPPER_NAME type;\n#endif\n    typedef AUX_WRAPPER_VALUE_TYPE value_type;\n    typedef integral_c_tag tag;\n\n// have to #ifdef here: some compilers don't like the 'N + 1' form (MSVC),\n// while some other don't like 'value + 1' (Borland), and some don't like\n// either\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243)\n private:\n    BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)));\n    BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)));\n public:\n    typedef AUX_WRAPPER_INST(next_value) next;\n    typedef AUX_WRAPPER_INST(prior_value) prior;\n#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \\\n    || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \\\n    || (BOOST_WORKAROUND(__HP_aCC, <= 53800) && (BOOST_WORKAROUND(__hpxstd98, != 1)))\n    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)) ) next;\n    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)) ) prior;\n#else\n    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value + 1)) ) next;\n    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;\n#endif\n\n    // enables uniform function call syntax for families of overloaded \n    // functions that return objects of both arithmetic ('int', 'long',\n    // 'double', etc.) and wrapped integral types (for an example, see \n    // \"mpl/example/power.cpp\")\n    BOOST_CONSTEXPR operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast<AUX_WRAPPER_VALUE_TYPE>(this->value); } \n};\n\n#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\ntemplate< AUX_WRAPPER_PARAMS(N) >\nAUX_WRAPPER_VALUE_TYPE const AUX_WRAPPER_INST(N)::value;\n#endif\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\n#undef AUX_WRAPPER_NAME\n#undef AUX_WRAPPER_PARAMS\n#undef AUX_WRAPPER_INST\n#undef AUX_WRAPPER_VALUE_TYPE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED\n#define BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n\ntemplate< typename T >\nstruct is_msvc_eti_arg\n{ \n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n#else // BOOST_MPL_CFG_MSVC_60_ETI_BUG\n\nstruct eti_int_convertible\n{\n    eti_int_convertible(int);\n};\n\ntemplate< typename T >\nstruct is_msvc_eti_arg\n{ \n    static no_tag test(...);\n    static yes_tag test(eti_int_convertible);\n    static T& get();\n\n    BOOST_STATIC_CONSTANT(bool, value = \n          sizeof(test(get())) == sizeof(yes_tag)\n        );\n};\n\n#endif\n\ntemplate<>\nstruct is_msvc_eti_arg<int>\n{ \n    BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\n#endif // BOOST_MPL_CFG_MSVC_ETI_BUG\n\n}}}\n\n#endif // BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/iter_apply.hpp",
    "content": "\n#ifndef BOOST_MPL_ITER_APPLY_HPP_INCLUDED\n#define BOOST_MPL_ITER_APPLY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/deref.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate<\n      typename F\n    , typename Iterator\n    >\nstruct iter_apply1\n    : apply1< F,typename deref<Iterator>::type >\n{\n};\n\ntemplate<\n      typename F\n    , typename Iterator1\n    , typename Iterator2\n    >\nstruct iter_apply2\n    : apply2<\n          F\n        , typename deref<Iterator1>::type\n        , typename deref<Iterator2>::type\n        >\n{\n};\n\n}}}\n\n#endif // BOOST_MPL_ITER_APPLY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/iter_fold_if_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/identity.hpp>\n#   include <boost/mpl/next.hpp>\n#   include <boost/mpl/if.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER iter_fold_if_impl.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/unrolling.hpp>\n#   include <boost/preprocessor/arithmetic/sub.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/dec.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2<StateOp,State,Iterator>::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\n// agurt, 25/jun/02: MSVC 6.5 workaround, had to get rid of inheritance \n// here and in 'iter_fold_if_backward_step', because sometimes it interfered \n// with the \"early template instantiation bug\" in _really_ ugly ways\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2<Predicate,State,Iterator>::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp,mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2<Predicate,State,Iterator>::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp,identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\n\n// local macros, #undef-ined at the end of the header\n\n#   define AUX_ITER_FOLD_FORWARD_STEP(unused, i, unused2) \\\n    typedef iter_fold_if_forward_step< \\\n          typename BOOST_PP_CAT(forward_step,i)::iterator \\\n        , typename BOOST_PP_CAT(forward_step,i)::state \\\n        , ForwardOp \\\n        , ForwardPredicate \\\n        > BOOST_PP_CAT(forward_step, BOOST_PP_INC(i)); \\\n    /**/\n\n#   define AUX_ITER_FOLD_BACKWARD_STEP_FUNC(i) \\\n    typedef iter_fold_if_backward_step< \\\n          typename BOOST_PP_CAT(forward_step,BOOST_PP_DEC(i))::iterator \\\n        , typename BOOST_PP_CAT(backward_step,i)::state \\\n        , BackwardOp \\\n        , BackwardPredicate \\\n        > BOOST_PP_CAT(backward_step,BOOST_PP_DEC(i)); \\\n    /**/\n\n#   define AUX_ITER_FOLD_BACKWARD_STEP(unused, i, unused2) \\\n    AUX_ITER_FOLD_BACKWARD_STEP_FUNC( \\\n        BOOST_PP_SUB_D(1,BOOST_MPL_LIMIT_UNROLLING,i) \\\n        ) \\\n    /**/\n\n#   define AUX_LAST_FORWARD_STEP \\\n    BOOST_PP_CAT(forward_step, BOOST_MPL_LIMIT_UNROLLING) \\\n    /**/\n\n#   define AUX_LAST_BACKWARD_STEP \\\n    BOOST_PP_CAT(backward_step, BOOST_MPL_LIMIT_UNROLLING) \\\n    /**/\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step<Iterator,State> forward_step0;\n    BOOST_PP_REPEAT(\n          BOOST_MPL_LIMIT_UNROLLING\n        , AUX_ITER_FOLD_FORWARD_STEP\n        , unused\n        )\n    \n    typedef typename if_<\n          typename AUX_LAST_FORWARD_STEP::not_last\n        , iter_fold_if_impl<\n              typename AUX_LAST_FORWARD_STEP::iterator\n            , typename AUX_LAST_FORWARD_STEP::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename AUX_LAST_FORWARD_STEP::iterator\n            , typename AUX_LAST_FORWARD_STEP::state\n            >\n        >::type AUX_LAST_BACKWARD_STEP;\n\n    BOOST_PP_REPEAT(\n          BOOST_MPL_LIMIT_UNROLLING\n        , AUX_ITER_FOLD_BACKWARD_STEP\n        , unused\n        )\n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename AUX_LAST_BACKWARD_STEP::iterator iterator;\n};\n\n#   undef AUX_LAST_BACKWARD_STEP\n#   undef AUX_LAST_FORWARD_STEP\n#   undef AUX_ITER_FOLD_BACKWARD_STEP\n#   undef AUX_ITER_FOLD_BACKWARD_STEP_FUNC\n#   undef AUX_ITER_FOLD_FORWARD_STEP\n\n}}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/iter_fold_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/next_prior.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#       include <boost/mpl/if.hpp>\n#       include <boost/type_traits/is_same.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER iter_fold_impl.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   define AUX778076_FOLD_IMPL_OP(iter) iter\n#   define AUX778076_FOLD_IMPL_NAME_PREFIX iter_fold\n#   include <boost/mpl/aux_/fold_impl_body.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/iter_push_front.hpp",
    "content": "\n#ifndef BOOST_MPL_ITER_PUSH_FRONT_HPP_INCLUDED\n#define BOOST_MPL_ITER_PUSH_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_front.hpp>\n#include <boost/mpl/deref.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate<\n      typename Sequence\n    , typename Iterator\n    >\nstruct iter_push_front\n{\n    typedef typename push_front<\n          Sequence\n        , typename deref<Iterator>::type\n        >::type type;\n};\n\n}}}\n\n#endif // BOOST_MPL_ITER_PUSH_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/joint_iter.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_JOINT_ITER_HPP_INCLUDED\n#define BOOST_MPL_AUX_JOINT_ITER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/aux_/lambda_spec.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#   include <boost/type_traits/is_same.hpp>\n#endif\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename Iterator1\n    , typename LastIterator1\n    , typename Iterator2\n    >\nstruct joint_iter\n{\n    typedef Iterator1 base;\n    typedef forward_iterator_tag category;\n};\n\ntemplate<\n      typename LastIterator1\n    , typename Iterator2\n    >\nstruct joint_iter<LastIterator1,LastIterator1,Iterator2>\n{\n    typedef Iterator2 base;\n    typedef forward_iterator_tag category;\n};\n\n\ntemplate< typename I1, typename L1, typename I2 >\nstruct deref< joint_iter<I1,L1,I2> >\n{\n    typedef typename joint_iter<I1,L1,I2>::base base_;\n    typedef typename deref<base_>::type type;\n};\n\ntemplate< typename I1, typename L1, typename I2 >\nstruct next< joint_iter<I1,L1,I2> >\n{\n    typedef joint_iter< typename mpl::next<I1>::type,L1,I2 > type;\n};\n\ntemplate< typename L1, typename I2 >\nstruct next< joint_iter<L1,L1,I2> >\n{\n    typedef joint_iter< L1,L1,typename mpl::next<I2>::type > type;\n};\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate<\n      typename Iterator1\n    , typename LastIterator1\n    , typename Iterator2\n    >\nstruct joint_iter;\n\ntemplate< bool > struct joint_iter_impl\n{\n    template< typename I1, typename L1, typename I2 > struct result_\n    {\n        typedef I1 base;\n        typedef forward_iterator_tag category;\n        typedef joint_iter< typename mpl::next<I1>::type,L1,I2 > next;\n        typedef typename deref<I1>::type type;\n    };\n};\n\ntemplate<> struct joint_iter_impl<true>\n{\n    template< typename I1, typename L1, typename I2 > struct result_\n    {\n        typedef I2 base;\n        typedef forward_iterator_tag category;\n        typedef joint_iter< L1,L1,typename mpl::next<I2>::type > next;\n        typedef typename deref<I2>::type type;\n    };\n};\n\ntemplate<\n      typename Iterator1\n    , typename LastIterator1\n    , typename Iterator2\n    >\nstruct joint_iter\n    : joint_iter_impl< is_same<Iterator1,LastIterator1>::value >\n        ::template result_<Iterator1,LastIterator1,Iterator2>\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, joint_iter)\n\n}}\n\n#endif // BOOST_MPL_AUX_JOINT_ITER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/lambda_arity_param.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED\n#define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/ttp.hpp>\n\n#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n#   define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param)    \n#else\n#   define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) , param\n#endif\n\n#endif // BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/lambda_no_ctps.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED\n#define BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/lambda_fwd.hpp>\n#   include <boost/mpl/bind_fwd.hpp>\n#   include <boost/mpl/protect.hpp>\n#   include <boost/mpl/is_placeholder.hpp>\n#   include <boost/mpl/if.hpp>\n#   include <boost/mpl/identity.hpp>\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#   include <boost/mpl/aux_/template_arity.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER lambda_no_ctps.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define AUX778076_LAMBDA_PARAMS(i_, param) \\\n    BOOST_MPL_PP_PARAMS(i_, param) \\\n    /**/\n\nnamespace aux {\n\n#define n_ BOOST_MPL_LIMIT_METAFUNCTION_ARITY\ntemplate<\n      BOOST_MPL_PP_DEFAULT_PARAMS(n_,bool C,false)\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< BOOST_MPL_PP_ENUM(n_,false) >\n    : false_\n{\n};\n#undef n_\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/aux_/lambda_no_ctps.hpp>))\n#include BOOST_PP_ITERATE()\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    \n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n#   undef AUX778076_LAMBDA_PARAMS\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n#else\n\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#   define AUX778076_LAMBDA_TYPEDEF(unused, i_, F) \\\n    typedef lambda< \\\n          typename F::BOOST_PP_CAT(arg,BOOST_PP_INC(i_)) \\\n        , Tag \\\n        , false_ \\\n        > BOOST_PP_CAT(l,BOOST_PP_INC(i_)); \\\n    /**/\n\n#   define AUX778076_IS_LE_TYPEDEF(unused, i_, unused2) \\\n    typedef typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::is_le \\\n        BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)); \\\n    /**/\n\n#   define AUX778076_IS_LAMBDA_EXPR(unused, i_, unused2) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    BOOST_MPL_AUX_MSVC_VALUE_WKND(BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)))::value \\\n    /**/\n\n#   define AUX778076_LAMBDA_RESULT(unused, i_, unused2) \\\n    , typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::type \\\n    /**/\n\ntemplate<> struct lambda_impl< int_<i_> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_TYPEDEF, F)\n        BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LE_TYPEDEF, unused)\n\n        typedef aux::lambda_or<\n              BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LAMBDA_EXPR, unused)\n            > is_le;\n\n        typedef BOOST_PP_CAT(bind,i_)<\n              typename F::rebind\n            BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_RESULT, unused)\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n    \n        typedef typename type_::type type;\n    };\n};\n\n#   undef AUX778076_LAMBDA_RESULT\n#   undef AUX778076_IS_LAMBDA_EXPR\n#   undef AUX778076_IS_LE_TYPEDEF\n#   undef AUX778076_LAMBDA_TYPEDEF\n\n#undef i_\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/lambda_spec.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED\n#define BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2007\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/lambda_fwd.hpp>\n#include <boost/mpl/int_fwd.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/lambda_arity_param.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n\n#   define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) \\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(i, typename T) \\\n    , typename Tag \\\n    > \\\nstruct lambda< \\\n      name< BOOST_MPL_PP_PARAMS(i, T) > \\\n    , Tag \\\n    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<i>) \\\n    > \\\n{ \\\n    typedef false_ is_le; \\\n    typedef name< BOOST_MPL_PP_PARAMS(i, T) > result_; \\\n    typedef result_ type; \\\n}; \\\n/**/\n\n#else\n\n#   define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/lambda_support.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED\n#define BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) /**/\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i,name,params) /**/\n\n#else\n\n#   include <boost/mpl/int_fwd.hpp>\n#   include <boost/mpl/aux_/yes_no.hpp>\n#   include <boost/mpl/aux_/na_fwd.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/tuple/to_list.hpp>\n#   include <boost/preprocessor/list/for_each_i.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC(R,typedef_,i,param) \\\n    typedef_ param BOOST_PP_CAT(arg,BOOST_PP_INC(i)); \\\n    /**/\n\n// agurt, 07/mar/03: restore an old revision for the sake of SGI MIPSpro C++\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \\\n    BOOST_PP_LIST_FOR_EACH_I_R( \\\n          1 \\\n        , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \\\n        , typedef \\\n        , BOOST_PP_TUPLE_TO_LIST(i,params) \\\n        ) \\\n    struct rebind \\\n    { \\\n        template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \\\n            : name< BOOST_MPL_PP_PARAMS(i,U) > \\\n        { \\\n        }; \\\n    }; \\\n    /**/\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    /**/\n\n#elif BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)\n// agurt, 18/jan/03: old EDG-based compilers actually enforce 11.4 para 9\n// (in strict mode), so we have to provide an alternative to the \n// MSVC-optimized implementation\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n    typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \\\n    BOOST_PP_LIST_FOR_EACH_I_R( \\\n          1 \\\n        , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \\\n        , typedef \\\n        , BOOST_PP_TUPLE_TO_LIST(i,params) \\\n        ) \\\n    struct rebind; \\\n/**/\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n}; \\\ntemplate< BOOST_MPL_PP_PARAMS(i,typename T) > \\\nstruct name<BOOST_MPL_PP_PARAMS(i,T)>::rebind \\\n{ \\\n    template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \\\n        : name< BOOST_MPL_PP_PARAMS(i,U) > \\\n    { \\\n    }; \\\n/**/\n\n#else // __EDG_VERSION__\n\nnamespace boost { namespace mpl { namespace aux {\ntemplate< typename T > struct has_rebind_tag;\n}}}\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n    typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \\\n    BOOST_PP_LIST_FOR_EACH_I_R( \\\n          1 \\\n        , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \\\n        , typedef \\\n        , BOOST_PP_TUPLE_TO_LIST(i,params) \\\n        ) \\\n    friend class BOOST_PP_CAT(name,_rebind); \\\n    typedef BOOST_PP_CAT(name,_rebind) rebind; \\\n/**/\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \\\ntemplate< BOOST_MPL_PP_PARAMS(i,typename T) > \\\n::boost::mpl::aux::yes_tag operator|( \\\n      ::boost::mpl::aux::has_rebind_tag<int> \\\n    , name<BOOST_MPL_PP_PARAMS(i,T)>* \\\n    ); \\\n::boost::mpl::aux::no_tag operator|( \\\n      ::boost::mpl::aux::has_rebind_tag<int> \\\n    , name< BOOST_MPL_PP_ENUM(i,::boost::mpl::na) >* \\\n    ); \\\n/**/\n#elif !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \\\ntemplate< BOOST_MPL_PP_PARAMS(i,typename T) > \\\n::boost::mpl::aux::yes_tag operator|( \\\n      ::boost::mpl::aux::has_rebind_tag<int> \\\n    , ::boost::mpl::aux::has_rebind_tag< name<BOOST_MPL_PP_PARAMS(i,T)> >* \\\n    ); \\\n/**/\n#else\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) /**/\n#endif\n\n#   if !defined(__BORLANDC__)\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n}; \\\nBOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \\\nclass BOOST_PP_CAT(name,_rebind) \\\n{ \\\n public: \\\n    template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \\\n        : name< BOOST_MPL_PP_PARAMS(i,U) > \\\n    { \\\n    }; \\\n/**/\n#   else\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n}; \\\nBOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \\\nclass BOOST_PP_CAT(name,_rebind) \\\n{ \\\n public: \\\n    template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \\\n    { \\\n        typedef typename name< BOOST_MPL_PP_PARAMS(i,U) >::type type; \\\n    }; \\\n/**/\n#   endif // __BORLANDC__\n\n#endif // __EDG_VERSION__\n\n#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#endif // BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/largest_int.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED\n#define BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/aux_/config/integral.hpp>\n#include <boost/config.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T > struct integral_rank;\n\ntemplate<> struct integral_rank<bool>           : int_<1> {};\ntemplate<> struct integral_rank<signed char>    : int_<2> {};\ntemplate<> struct integral_rank<char>           : int_<3> {};\ntemplate<> struct integral_rank<unsigned char>  : int_<4> {};\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)\ntemplate<> struct integral_rank<wchar_t>        : int_<5> {};\n#endif\ntemplate<> struct integral_rank<short>          : int_<6> {};\ntemplate<> struct integral_rank<unsigned short> : int_<7> {};\ntemplate<> struct integral_rank<int>            : int_<8> {};\ntemplate<> struct integral_rank<unsigned int>   : int_<9> {};\ntemplate<> struct integral_rank<long>           : int_<10> {};\ntemplate<> struct integral_rank<unsigned long>  : int_<11> {};\n\n#if defined(BOOST_HAS_LONG_LONG)\ntemplate<> struct integral_rank<long_long_type> : int_<12> {};\ntemplate<> struct integral_rank<ulong_long_type>: int_<13> {};\n#endif\n\ntemplate< typename T1, typename T2 > struct largest_int\n#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\n    : if_c< \n          ( integral_rank<T1>::value >= integral_rank<T2>::value )\n        , T1\n        , T2\n        >\n{\n#else\n{\n    enum { rank1 = integral_rank<T1>::value };\n    enum { rank2 = integral_rank<T2>::value };\n    typedef typename if_c< (rank1 >= rank2),T1,T2 >::type type;\n#endif\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/logical_op.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/nested_type_wknd.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#endif\n\n#include <boost/mpl/limits/arity.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/preprocessor/ext_params.hpp>\n#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>\n#include <boost/mpl/aux_/preprocessor/enum.hpp>\n#include <boost/mpl/aux_/preprocessor/sub.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/dec.hpp>\n#include <boost/preprocessor/inc.hpp>\n#include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define AUX778076_PARAMS(param, sub) \\\n    BOOST_MPL_PP_PARAMS( \\\n          BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY, sub) \\\n        , param \\\n        ) \\\n    /**/\n\n#   define AUX778076_SHIFTED_PARAMS(param, sub) \\\n    BOOST_MPL_PP_EXT_PARAMS( \\\n          2, BOOST_MPL_PP_SUB(BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY), sub) \\\n        , param \\\n        ) \\\n    /**/\n\n#   define AUX778076_SPEC_PARAMS(param) \\\n    BOOST_MPL_PP_ENUM( \\\n          BOOST_PP_DEC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \\\n        , param \\\n        ) \\\n    /**/\n\nnamespace aux {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< bool C_, AUX778076_PARAMS(typename T, 1) >\nstruct BOOST_PP_CAT(AUX778076_OP_NAME,impl)\n    : BOOST_PP_CAT(AUX778076_OP_VALUE1,_)\n{\n};\n\ntemplate< AUX778076_PARAMS(typename T, 1) >\nstruct BOOST_PP_CAT(AUX778076_OP_NAME,impl)< AUX778076_OP_VALUE2,AUX778076_PARAMS(T, 1) >\n    : BOOST_PP_CAT(AUX778076_OP_NAME,impl)<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , AUX778076_SHIFTED_PARAMS(T, 1)\n        , BOOST_PP_CAT(AUX778076_OP_VALUE2,_)\n        >\n{\n};\n\ntemplate<>\nstruct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<\n          AUX778076_OP_VALUE2\n        , AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_))\n        >\n    : BOOST_PP_CAT(AUX778076_OP_VALUE2,_)\n{\n};\n\n#else\n\ntemplate< bool C_ > struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)\n{\n    template< AUX778076_PARAMS(typename T, 1) > struct result_\n        : BOOST_PP_CAT(AUX778076_OP_VALUE1,_)\n    {\n    };\n};\n\ntemplate<> struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<AUX778076_OP_VALUE2>\n{\n    template< AUX778076_PARAMS(typename T, 1) > struct result_\n        : BOOST_PP_CAT(AUX778076_OP_NAME,impl)< \n              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n            >::template result_< AUX778076_SHIFTED_PARAMS(T,1),BOOST_PP_CAT(AUX778076_OP_VALUE2,_) >\n    {\n    };\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n    template<> struct result_<AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_))>\n        : BOOST_PP_CAT(AUX778076_OP_VALUE2,_)\n    {\n    };\n};\n#else\n};\n\ntemplate<>\nstruct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<AUX778076_OP_VALUE2>\n    ::result_< AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_)) >\n        : BOOST_PP_CAT(AUX778076_OP_VALUE2,_)\n{\n};\n#endif // BOOST_MSVC == 1300\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename T, BOOST_PP_CAT(AUX778076_OP_VALUE2,_))\n    >\nstruct AUX778076_OP_NAME\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    : aux::BOOST_PP_CAT(AUX778076_OP_NAME,impl)<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , AUX778076_SHIFTED_PARAMS(T,0)\n        >\n#else\n    : aux::BOOST_PP_CAT(AUX778076_OP_NAME,impl)< \n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        >::template result_< AUX778076_SHIFTED_PARAMS(T,0) >\n#endif\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n        , AUX778076_OP_NAME\n        , (AUX778076_PARAMS(T, 0))\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n    , AUX778076_OP_NAME\n    )\n\n}}\n\n#undef AUX778076_SPEC_PARAMS\n#undef AUX778076_SHIFTED_PARAMS\n#undef AUX778076_PARAMS\n#undef AUX778076_OP_NAME\n#undef AUX778076_OP_VALUE1\n#undef AUX778076_OP_VALUE2\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/msvc_dtw.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n\n// local macros, #undef-ined at the end of the header\n#define AUX778076_DTW_PARAMS(param) \\\n    BOOST_MPL_PP_PARAMS(AUX778076_MSVC_DTW_ARITY, param) \\\n/**/\n\n#define AUX778076_DTW_ORIGINAL_NAME \\\n    AUX778076_MSVC_DTW_ORIGINAL_NAME \\\n/**/\n\n// warning: not a well-formed C++\n// workaround for MSVC 6.5's \"dependent template typedef bug\"\n\ntemplate< typename F>\nstruct AUX778076_MSVC_DTW_NAME\n{\n    template< bool > struct f_ : F {};\n    template<> struct f_<true>\n    {\n#if AUX778076_MSVC_DTW_ARITY > 0\n        template< AUX778076_DTW_PARAMS(typename P) > struct AUX778076_DTW_ORIGINAL_NAME\n        {\n            typedef int type;\n        };\n    };\n\n    template< AUX778076_DTW_PARAMS(typename T) > struct result_\n        : f_< aux::msvc_never_true<F>::value >\n            ::template AUX778076_DTW_ORIGINAL_NAME< AUX778076_DTW_PARAMS(T) >\n    {\n    };\n#else\n        template< typename P = int > struct AUX778076_DTW_ORIGINAL_NAME\n        {\n            typedef int type;\n        };\n    };\n\n    template< typename T = int > struct result_\n        : f_< aux::msvc_never_true<F>::value >\n            ::template AUX778076_DTW_ORIGINAL_NAME<>\n    {\n    };\n#endif\n};\n\n#undef AUX778076_DTW_ORIGINAL_NAME\n#undef AUX778076_DTW_PARAMS\n\n#undef AUX778076_MSVC_DTW_NAME\n#undef AUX778076_MSVC_DTW_ORIGINAL_NAME\n#undef AUX778076_MSVC_DTW_ARITY\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/msvc_eti_base.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED\n#define BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n#if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n\ntemplate< bool > struct msvc_eti_base_impl\n{\n    template< typename T > struct result_\n        : T\n    {\n        typedef T type;\n    };\n};\n\ntemplate<> struct msvc_eti_base_impl<true>\n{\n    template< typename T > struct result_\n    {\n        typedef result_ type;\n        typedef result_ first;\n        typedef result_ second;\n        typedef result_ tag;\n        enum { value = 0 };\n    };\n};\n\ntemplate< typename T > struct msvc_eti_base\n    : msvc_eti_base_impl< is_msvc_eti_arg<T>::value >\n        ::template result_<T>\n{\n};\n\n#else // !BOOST_MPL_CFG_MSVC_70_ETI_BUG\n\ntemplate< typename T > struct msvc_eti_base\n    : T\n{\n#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))\n    msvc_eti_base();\n#endif\n    typedef T type;\n};\n\n#endif \n\ntemplate<> struct msvc_eti_base<int>\n{\n    typedef msvc_eti_base type;\n    typedef msvc_eti_base first;\n    typedef msvc_eti_base second;\n    typedef msvc_eti_base tag;\n    enum { value = 0 };\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/msvc_is_class.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_MSVC_IS_CLASS_HPP_INCLUDED\n#define BOOST_MPL_AUX_MSVC_IS_CLASS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n\n#include <boost/type_traits/is_reference.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T > struct is_class_helper\n{\n    typedef int (T::* type)();\n};\n\n// MSVC 6.x-specific lightweight 'is_class' implementation; \n// Distinguishing feature: does not instantiate the type being tested.\ntemplate< typename T >\nstruct msvc_is_class_impl\n{\n    template< typename U>\n    static yes_tag  test(type_wrapper<U>*, /*typename*/ is_class_helper<U>::type = 0);\n    static no_tag   test(void const volatile*, ...);\n\n    enum { value = sizeof(test((type_wrapper<T>*)0)) == sizeof(yes_tag) };\n    typedef bool_<value> type;\n};\n\n// agurt, 17/sep/04: have to check for 'is_reference' upfront to avoid ICEs in\n// complex metaprograms\ntemplate< typename T >\nstruct msvc_is_class\n    : if_<\n          is_reference<T>\n        , false_\n        , msvc_is_class_impl<T>\n        >::type\n{\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_MSVC_IS_CLASS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/msvc_never_true.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED\n#define BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T >\nstruct msvc_never_true\n{\n    enum { value = false };\n};\n\n}}}\n\n#endif // BOOST_MSVC\n\n#endif // BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/msvc_type.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED\n#define BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n#if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n\ntemplate< bool > struct msvc_type_impl\n{\n    template< typename T > struct result_\n    {\n        typedef typename T::type type;\n    };\n};\n\ntemplate<> struct msvc_type_impl<true>\n{\n    template< typename T > struct result_\n    {\n        typedef result_ type;\n    };\n};\n\ntemplate< typename T > struct msvc_type\n    : msvc_type_impl< is_msvc_eti_arg<T>::value >\n        ::template result_<T>\n{\n};\n\n#else // BOOST_MPL_CFG_MSVC_70_ETI_BUG\n\ntemplate< typename T > struct msvc_type \n{\n    typedef typename T::type type;\n};\n\ntemplate<> struct msvc_type<int>\n{\n    typedef int type;\n};\n\n#endif\n\n}}}\n\n#endif // BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/na.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NA_HPP_INCLUDED\n#define BOOST_MPL_AUX_NA_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/na_fwd.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T >\nstruct is_na\n    : false_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using false_::value;\n#endif\n};\n\ntemplate<>\nstruct is_na<na>\n    : true_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using true_::value;\n#endif\n};\n\ntemplate< typename T >\nstruct is_not_na\n    : true_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using true_::value;\n#endif\n};\n\ntemplate<>\nstruct is_not_na<na>\n    : false_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using false_::value;\n#endif\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\ntemplate< typename T, typename U > struct if_na\n{\n    typedef T type;\n};\n\ntemplate< typename U > struct if_na<na,U>\n{\n    typedef U type;\n};\n#else\ntemplate< typename T > struct if_na_impl\n{\n    template< typename U > struct apply\n    {\n        typedef T type;\n    };\n};\n\ntemplate<> struct if_na_impl<na>\n{\n    template< typename U > struct apply\n    {\n        typedef U type;\n    };\n};\n\ntemplate< typename T, typename U > struct if_na\n    : if_na_impl<T>::template apply<U>\n{\n};\n#endif\n\n}}\n\n#endif // BOOST_MPL_AUX_NA_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/na_assert.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED\n#define BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !BOOST_WORKAROUND(_MSC_FULL_VER, <= 140050601)    \\\n    && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243)\n#   include <boost/mpl/assert.hpp>\n#   define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \\\n    BOOST_MPL_ASSERT_NOT((boost::mpl::is_na<type>)) \\\n/**/\n#else\n#   include <boost/static_assert.hpp>\n#   define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \\\n    BOOST_STATIC_ASSERT(!boost::mpl::is_na<x>::value) \\\n/**/\n#endif\n\n#endif // BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/na_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED\n#define BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\n// n.a. == not available\nstruct na\n{\n    typedef na type;\n    enum { value = 0 };\n};\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(na)\n\n#endif // BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/na_spec.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED\n#define BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/lambda_fwd.hpp>\n#   include <boost/mpl/int.hpp>\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/arity.hpp>\n#   include <boost/mpl/aux_/template_arity_fwd.hpp>\n#endif\n\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/preprocessor/enum.hpp>\n#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>\n#include <boost/mpl/aux_/lambda_arity_param.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/ttp.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n#include <boost/mpl/aux_/config/overload_resolution.hpp>\n\n\n#define BOOST_MPL_AUX_NA_PARAMS(i) \\\n    BOOST_MPL_PP_ENUM(i, na) \\\n/**/\n\n#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \\\nnamespace aux { \\\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > \\\nstruct arity< \\\n          name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n        , N \\\n        > \\\n    : int_< BOOST_MPL_LIMIT_METAFUNCTION_ARITY > \\\n{ \\\n}; \\\n} \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) /**/\n#endif\n\n#define BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \\\ntemplate<> \\\nstruct name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n{ \\\n    template< \\\n          BOOST_MPL_PP_PARAMS(i, typename T) \\\n        BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \\\n        > \\\n    struct apply \\\n        : name< BOOST_MPL_PP_PARAMS(i, T) > \\\n    { \\\n    }; \\\n}; \\\n/**/\n\n#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \\\ntemplate<> \\\nstruct lambda< \\\n      name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n    , void_ \\\n    , true_ \\\n    > \\\n{ \\\n    typedef false_ is_le; \\\n    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \\\n}; \\\ntemplate<> \\\nstruct lambda< \\\n      name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n    , void_ \\\n    , false_ \\\n    > \\\n{ \\\n    typedef false_ is_le; \\\n    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \\\n}; \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \\\ntemplate< typename Tag > \\\nstruct lambda< \\\n      name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n    , Tag \\\n    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<-1>) \\\n    > \\\n{ \\\n    typedef false_ is_le; \\\n    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > result_; \\\n    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \\\n}; \\\n/**/\n#endif\n\n#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \\\n    || defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \\\n        && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION)\n#   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \\\nnamespace aux { \\\ntemplate< BOOST_MPL_PP_PARAMS(j, typename T) > \\\nstruct template_arity< \\\n          name< BOOST_MPL_PP_PARAMS(j, T) > \\\n        > \\\n    : int_<j> \\\n{ \\\n}; \\\n\\\ntemplate<> \\\nstruct template_arity< \\\n          name< BOOST_MPL_PP_ENUM(i, na) > \\\n        > \\\n    : int_<-1> \\\n{ \\\n}; \\\n} \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) /**/\n#endif\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n#   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \\\ntemplate<> \\\nstruct name< BOOST_MPL_PP_ENUM(i, int) > \\\n{ \\\n    typedef int type; \\\n    enum { value = 0 }; \\\n}; \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) /**/\n#endif\n\n#define BOOST_MPL_AUX_NA_PARAM(param) param = na\n\n#define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, i, name) \\\n/**/\n\n#define BOOST_MPL_AUX_NA_SPEC(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_ETI(i, name) \\\n/**/\n\n#define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \\\nBOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_ETI(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \\\n/**/\n\n\n#endif // BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/nested_type_wknd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED\n#define BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \\\n    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530)) \\\n    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n\nnamespace boost { namespace mpl { namespace aux {\ntemplate< typename T > struct nested_type_wknd\n    : T::type\n{\n};\n}}}\n\n#if BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n#   define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \\\n    aux::nested_type_wknd<T> \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \\\n    ::boost::mpl::aux::nested_type_wknd<T> \\\n/**/\n#endif\n\n#else // !BOOST_MPL_CFG_GCC et al.\n\n#   define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) T::type\n\n#endif \n\n#endif // BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/nttp_decl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED\n#define BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/nttp.hpp>\n\n#if defined(BOOST_MPL_CFG_NTTP_BUG)\n\ntypedef bool        _mpl_nttp_bool;\ntypedef int         _mpl_nttp_int;\ntypedef unsigned    _mpl_nttp_unsigned;\ntypedef long        _mpl_nttp_long;\n\n#   include <boost/preprocessor/cat.hpp>\n#   define BOOST_MPL_AUX_NTTP_DECL(T, x) BOOST_PP_CAT(_mpl_nttp_,T) x /**/\n\n#else\n\n#   define BOOST_MPL_AUX_NTTP_DECL(T, x) T x /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/numeric_cast_utils.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED\n#define BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/numeric_cast.hpp>\n#include <boost/mpl/apply_wrap.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    >\nstruct cast1st_impl\n{\n    template< typename N1, typename N2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : apply_wrap2< \n              F\n            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type\n            , N2\n            >\n    {\n#else\n    {\n    typedef typename apply_wrap2< \n              F\n            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type\n            , N2\n            >::type type;\n#endif\n    };\n};\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    >\nstruct cast2nd_impl\n{\n    template< typename N1, typename N2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : apply_wrap2< \n              F\n            , N1\n            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type\n            >\n    {\n#else\n    {\n        typedef typename apply_wrap2< \n              F\n            , N1\n            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type\n            >::type type;\n#endif\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/numeric_op.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/numeric_cast.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#   include <boost/mpl/if.hpp>\n#   include <boost/mpl/tag.hpp>\n#   include <boost/mpl/aux_/numeric_cast_utils.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#   include <boost/mpl/aux_/msvc_eti_base.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#if defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    || defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/preprocessor/ext_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/preprocessor/add.hpp>\n#   include <boost/mpl/aux_/preprocessor/sub.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/dec.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n\n#if !defined(AUX778076_OP_ARITY)\n#   define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n#endif\n\n#if !defined(AUX778076_OP_IMPL_NAME)\n#   define AUX778076_OP_IMPL_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_impl)\n#endif\n\n#if !defined(AUX778076_OP_TAG_NAME)\n#   define AUX778076_OP_TAG_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_tag)\n#endif\n\nnamespace boost { namespace mpl {\n\ntemplate< \n      typename Tag1\n    , typename Tag2\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value \n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value \n    >\nstruct AUX778076_OP_IMPL_NAME\n    : if_c<\n          ( tag1_ > tag2_ )\n#else\n    >\nstruct AUX778076_OP_IMPL_NAME\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n#endif\n        , aux::cast2nd_impl< AUX778076_OP_IMPL_NAME<Tag1,Tag1>,Tag1,Tag2 >\n        , aux::cast1st_impl< AUX778076_OP_IMPL_NAME<Tag2,Tag2>,Tag1,Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct AUX778076_OP_IMPL_NAME<na,na>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\ntemplate< typename Tag > struct AUX778076_OP_IMPL_NAME<na,Tag>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n\ntemplate< typename Tag > struct AUX778076_OP_IMPL_NAME<Tag,na>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n#else\ntemplate<> struct AUX778076_OP_IMPL_NAME<na,integral_c_tag>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n\ntemplate<> struct AUX778076_OP_IMPL_NAME<integral_c_tag,na>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n#endif\n\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && BOOST_WORKAROUND(BOOST_MSVC, >= 1300)\ntemplate< typename T > struct AUX778076_OP_TAG_NAME\n    : tag<T,na>\n{\n};\n#else\ntemplate< typename T > struct AUX778076_OP_TAG_NAME\n{\n    typedef typename T::tag type;\n};\n#endif\n\n\n#if AUX778076_OP_ARITY != 2\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n#   define AUX778076_OP_RIGHT_OPERAND(unused, i, N) , BOOST_PP_CAT(N, BOOST_MPL_PP_ADD(i, 2))>\n#   define AUX778076_OP_N_CALLS(i, N) \\\n    BOOST_MPL_PP_REPEAT( BOOST_PP_DEC(i), BOOST_MPL_PP_REPEAT_IDENTITY_FUNC, AUX778076_OP_NAME< ) \\\n    N1 BOOST_MPL_PP_REPEAT( BOOST_MPL_PP_SUB(i, 1), AUX778076_OP_RIGHT_OPERAND, N ) \\\n/**/\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)\n    >\nstruct AUX778076_OP_NAME\n    : AUX778076_OP_N_CALLS(AUX778076_OP_ARITY, N)\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          AUX778076_OP_ARITY\n        , AUX778076_OP_NAME\n        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )\n        )\n};\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,( BOOST_PP_DEC(AUX778076_OP_ARITY), 2, <boost/mpl/aux_/numeric_op.hpp> ))\n#include BOOST_PP_ITERATE()\n\n#   undef AUX778076_OP_N_CALLS\n#   undef AUX778076_OP_RIGHT_OPERAND\n\n#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n/// forward declaration\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct BOOST_PP_CAT(AUX778076_OP_NAME,2);\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)\n    >\nstruct AUX778076_OP_NAME\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n    : aux::msvc_eti_base< typename if_<\n#else\n    : if_<\n#endif\n          is_na<N3>\n        , BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>\n        , AUX778076_OP_NAME<\n              BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>\n            , BOOST_MPL_PP_EXT_PARAMS(3, BOOST_PP_INC(AUX778076_OP_ARITY), N)\n            >\n        >::type\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n    >\n#endif\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          AUX778076_OP_ARITY\n        , AUX778076_OP_NAME\n        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )\n        )\n};\n\ntemplate< \n      typename N1\n    , typename N2\n    >\nstruct BOOST_PP_CAT(AUX778076_OP_NAME,2)\n\n#endif\n\n#else // AUX778076_OP_ARITY == 2\n\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct AUX778076_OP_NAME\n\n#endif\n\n#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n    : AUX778076_OP_IMPL_NAME<\n          typename AUX778076_OP_TAG_NAME<N1>::type\n        , typename AUX778076_OP_TAG_NAME<N2>::type\n        >::template apply<N1,N2>::type\n#else\n    : aux::msvc_eti_base< typename apply_wrap2<\n          AUX778076_OP_IMPL_NAME<\n              typename AUX778076_OP_TAG_NAME<N1>::type\n            , typename AUX778076_OP_TAG_NAME<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n#endif\n{\n#if AUX778076_OP_ARITY != 2\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          AUX778076_OP_ARITY\n        , AUX778076_OP_NAME\n        , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(2, N, na) )\n        )\n#   else\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, BOOST_PP_CAT(AUX778076_OP_NAME,2), (N1, N2))\n#   endif\n\n#else\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, AUX778076_OP_NAME, (N1, N2))\n#endif\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, AUX778076_OP_ARITY, AUX778076_OP_NAME)\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n\n#   define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      BOOST_MPL_PP_PARAMS(i_, typename N)\n    >\nstruct AUX778076_OP_NAME<BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na)>\n#if i_ != 2\n    : AUX778076_OP_N_CALLS(i_, N)\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          AUX778076_OP_ARITY\n        , AUX778076_OP_NAME\n        , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na) )\n        )\n};\n#endif\n\n#   undef i_\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/order_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ORDER_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_ORDER_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/order_fwd.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/has_key.hpp>\n#include <boost/mpl/aux_/overload_names.hpp>\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; requires 'Seq' to provide corresponding overloads \n// of BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY\n\ntemplate< typename Seq, typename Key > struct x_order_impl\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \\\n    || BOOST_WORKAROUND(__EDG_VERSION__, <= 245)\n{\n    BOOST_STATIC_CONSTANT(long, value = \n          sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(\n              Seq\n            , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*, 0)\n            ) )\n        );\n\n    typedef long_<value> type;\n\n#else // ISO98 C++\n    : long_< \n          sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(\n              Seq\n            , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*, 0)\n            ) )\n        >\n{\n#endif\n};\n\ntemplate< typename Tag >\nstruct order_impl\n{\n    template< typename Seq, typename Key > struct apply\n        : if_<\n              typename has_key_impl<Tag>::template apply<Seq,Key>\n            , x_order_impl<Seq,Key>\n            , void_\n            >::type\n    {\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,order_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_ORDER_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/overload_names.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED\n#define BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/ptr_to_ref.hpp>\n#include <boost/mpl/aux_/config/operators.hpp>\n\n#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)\n\n#   include <boost/mpl/aux_/static_cast.hpp>\n\n#   define BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY  operator/\n#   define BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER operator|\n#   define BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY  operator||\n#   define BOOST_MPL_AUX_OVERLOAD_IS_MASKED     operator%\n\n#   define BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(T, x)   BOOST_MPL_AUX_PTR_TO_REF(T) / x\n#   define BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(T, x)  BOOST_MPL_AUX_PTR_TO_REF(T) | x\n#   define BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(T, x)   BOOST_MPL_AUX_PTR_TO_REF(T) || x\n#   define BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(T, x)      BOOST_MPL_AUX_PTR_TO_REF(T) % x\n\n#else\n\n#   define BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY  value_by_key_\n#   define BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER item_by_order_\n#   define BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY  order_by_key_\n#   define BOOST_MPL_AUX_OVERLOAD_IS_MASKED     is_masked_\n\n#   define BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(T, x)   T::BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY( BOOST_MPL_AUX_PTR_TO_REF(T), x )\n#   define BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(T, x)  T::BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER( BOOST_MPL_AUX_PTR_TO_REF(T), x )\n#   define BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(T, x)   T::BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY( BOOST_MPL_AUX_PTR_TO_REF(T), x )\n#   define BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(T, x)      T::BOOST_MPL_AUX_OVERLOAD_IS_MASKED( BOOST_MPL_AUX_PTR_TO_REF(T), x )\n\n#endif\n\n#endif // BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/partition_op.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED\n#define BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED\n\n// Copyright Eric Friedman 2003\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/pair.hpp>\n#include <boost/mpl/aux_/lambda_spec.hpp>\n\nnamespace boost { namespace mpl { \n\nnamespace aux {\n\ntemplate< typename Pred, typename In1Op, typename In2Op >\nstruct partition_op\n{\n    template< typename State, typename T >\n    struct apply\n    {\n        typedef typename State::first first_;\n        typedef typename State::second second_;\n        typedef typename apply1< Pred,T >::type pred_;\n\n        typedef typename eval_if<\n              pred_\n            , apply2<In1Op,first_,T>\n            , apply2<In2Op,second_,T>\n            >::type result_;\n\n        typedef typename if_<\n              pred_\n            , pair< result_,second_ >\n            , pair< first_,result_ >\n            >::type type;\n    };\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::partition_op)\n\n}}\n\n#endif // BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/pop_back_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_POP_BACK_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_POP_BACK_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/pop_back_fwd.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n\nnamespace boost { namespace mpl {\n\n// no default implementation; the definition is needed to make MSVC happy\n\ntemplate< typename Tag >\nstruct pop_back_impl\n{\n    template< typename Sequence > struct apply;\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, pop_back_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_POP_BACK_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/pop_front_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_POP_FRONT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_POP_FRONT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/pop_front_fwd.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n\nnamespace boost { namespace mpl {\n\n// no default implementation; the definition is needed to make MSVC happy\n\ntemplate< typename Tag >\nstruct pop_front_impl\n{\n    template< typename Sequence > struct apply\n    // conservatively placed, but maybe should go outside surrounding\n    // braces.\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \n    {\n        typedef int type;\n    }\n#endif\n    ;\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, pop_front_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_POP_FRONT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl\n    : false_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl< true,T1,T2,T3,T4 >\n    : and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , true_\n        >\n{\n};\n\ntemplate<>\nstruct and_impl<\n          true\n        , true_, true_, true_, true_\n        >\n    : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\ntemplate<\n      typename F\n    >\nstruct apply< F,na,na,na,na,na >\n    : apply0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply< F,T1,na,na,na,na >\n    : apply1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply< F,T1,T2,na,na,na >\n    : apply2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply< F,T1,T2,T3,na,na >\n    : apply3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply< F,T1,T2,T3,T4,na >\n    : apply4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply\n    : apply5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply;\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      int N, typename F\n    >\nstruct apply_wrap_impl0;\n\ntemplate< typename F, bool F_has_apply >\nstruct apply_wrap_impl0_bcb {\n    typedef typename F::template apply<na> type;\n};\n\ntemplate< typename F >\nstruct apply_wrap_impl0_bcb< F,true > {\n    typedef typename F::apply type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          0\n        , F\n       \n        >\n{\n    typedef apply_wrap_impl0_bcb< F, aux::has_apply<F>::value >::type type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          1\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          2\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          3\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          4\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          5\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap0\n    : apply_wrap_impl0<\n          ::boost::mpl::aux::arity< F,0 >::value\n        , F\n       \n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1\n    >\nstruct apply_wrap_impl1;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          1\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          2\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          3\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          4\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          5\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap1\n    : apply_wrap_impl1<\n          ::boost::mpl::aux::arity< F,1 >::value\n        , F\n        , T1\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          2\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          3\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          4\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          5\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap2\n    : apply_wrap_impl2<\n          ::boost::mpl::aux::arity< F,2 >::value\n        , F\n        , T1, T2\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          3\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          4\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          5\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap3\n    : apply_wrap_impl3<\n          ::boost::mpl::aux::arity< F,3 >::value\n        , F\n        , T1, T2, T3\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4<\n          4\n        , F\n        , T1, T2, T3, T4\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4<\n          5\n        , F\n        , T1, T2, T3, T4\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap4\n    : apply_wrap_impl4<\n          ::boost::mpl::aux::arity< F,4 >::value\n        , F\n        , T1, T2, T3, T4\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap_impl5;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap_impl5<\n          5\n        , F\n        , T1, T2, T3, T4, T5\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4, T5\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap5\n    : apply_wrap_impl5<\n          ::boost::mpl::aux::arity< F,5 >::value\n        , F\n        , T1, T2, T3, T4, T5\n        >::type\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg< -1 >, Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitand_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitand_< N1,N2,N3,N4,na >\n\n    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitand_< N1,N2,N3,na,na >\n\n    : bitand_< bitand_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitand_< N1,N2,na,na,na >\n    : bitand_impl<\n          typename bitand_tag<N1>::type\n        , typename bitand_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitor_< N1,N2,N3,N4,na >\n\n    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitor_< N1,N2,N3,na,na >\n\n    : bitor_< bitor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitor_< N1,N2,na,na,na >\n    : bitor_impl<\n          typename bitor_tag<N1>::type\n        , typename bitor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitxor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitxor_< N1,N2,N3,N4,na >\n\n    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitxor_< N1,N2,N3,na,na >\n\n    : bitxor_< bitxor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitxor_< N1,N2,na,na,na >\n    : bitxor_impl<\n          typename bitxor_tag<N1>::type\n        , typename bitxor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque;\n\ntemplate<\n     \n    >\nstruct deque<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct deque<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct deque<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct deque<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct deque<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct divides_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct divides< N1,N2,N3,N4,na >\n\n    : divides< divides< divides< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct divides< N1,N2,N3,na,na >\n\n    : divides< divides< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct divides< N1,N2,na,na,na >\n    : divides_impl<\n          typename divides_tag<N1>::type\n        , typename divides_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n{\n    typedef fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,First,Last,State,ForwardOp >\n    : fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Arity\n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>,Tag, int_< -1 > >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>,Tag, int_<1> >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    , typename Arity\n    >\nstruct lambda<\n          lambda< F,Tag1,Arity >\n        , Tag2\n        , int_<3>\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;\n    typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;\n    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : T1, T2\n{\n    typedef inherit2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\ntemplate< typename T1 >\nstruct inherit2< T1,empty_base >\n{\n    typedef T1 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))\n};\n\ntemplate< typename T2 >\nstruct inherit2< empty_base,T2 >\n{\n    typedef T2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))\n};\n\ntemplate<>\nstruct inherit2< empty_base,empty_base >\n{\n    typedef empty_base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1, typename T2, typename T3, typename T4, typename T5\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n{\n    typedef iter_fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,First,Last,State,ForwardOp >\n    : iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list;\n\ntemplate<\n     \n    >\nstruct list<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list0<  >\n{\n    typedef list0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct list<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list1<T0>\n{\n    typedef typename list1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list2< T0,T1 >\n{\n    typedef typename list2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list3< T0,T1,T2 >\n{\n    typedef typename list3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list4< T0,T1,T2,T3 >\n{\n    typedef typename list4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list5< T0,T1,T2,T3,T4 >\n{\n    typedef typename list5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : list15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : list16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : list17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : list18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : list19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list\n    : list20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c;\n\ntemplate<\n      typename T\n    >\nstruct list_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list0_c<T>\n{\n    typedef typename list0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct list_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list1_c< T,C0 >\n{\n    typedef typename list1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct list_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list2_c< T,C0,C1 >\n{\n    typedef typename list2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct list_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list3_c< T,C0,C1,C2 >\n{\n    typedef typename list3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : list18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : list19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c\n    : list20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map;\n\ntemplate<\n     \n    >\nstruct map<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map0<  >\n{\n    typedef map0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct map<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map1<T0>\n{\n    typedef typename map1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct map<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map2< T0,T1 >\n{\n    typedef typename map2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct map<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map3< T0,T1,T2 >\n{\n    typedef typename map3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct map<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map4< T0,T1,T2,T3 >\n{\n    typedef typename map4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct map<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map5< T0,T1,T2,T3,T4 >\n{\n    typedef typename map5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : map15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : map16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : map17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : map18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : map19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map\n    : map20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct minus< N1,N2,N3,N4,na >\n\n    : minus< minus< minus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct minus< N1,N2,N3,na,na >\n\n    : minus< minus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct minus< N1,N2,na,na,na >\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct modulus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n\n    : modulus_impl<\n          typename modulus_tag<N1>::type\n        , typename modulus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl\n    : true_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl< false,T1,T2,T3,T4 >\n    : or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , false_\n        >\n{\n};\n\ntemplate<>\nstruct or_impl<\n          false\n        , false_, false_, false_, false_\n        >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct plus< N1,N2,N3,N4,na >\n\n    : plus< plus< plus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct plus< N1,N2,N3,na,na >\n\n    : plus< plus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct plus< N1,N2,na,na,na >\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"quote.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T, bool has_type_ >\nstruct quote_impl\n\n{\n    typedef typename T::type type;\n};\n\ntemplate< typename T >\nstruct quote_impl< T,false >\n{\n    typedef T type;\n};\n\ntemplate<\n      template< typename P1 > class F\n    , typename Tag = void_\n    >\nstruct quote1\n{\n    template< typename U1 > struct apply\n\n    {\n        typedef typename quote_impl<\n              F<U1>\n            , aux::has_type< F<U1> >::value\n            >::type type;\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename Tag = void_\n    >\nstruct quote2\n{\n    template< typename U1, typename U2 > struct apply\n\n    {\n        typedef typename quote_impl<\n              F< U1,U2 >\n            , aux::has_type< F< U1,U2 > >::value\n            >::type type;\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename Tag = void_\n    >\nstruct quote3\n{\n    template< typename U1, typename U2, typename U3 > struct apply\n\n    {\n        typedef typename quote_impl<\n              F< U1,U2,U3 >\n            , aux::has_type< F< U1,U2,U3 > >::value\n            >::type type;\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename Tag = void_\n    >\nstruct quote4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        >\n    struct apply\n\n    {\n        typedef typename quote_impl<\n              F< U1,U2,U3,U4 >\n            , aux::has_type< F< U1,U2,U3,U4 > >::value\n            >::type type;\n    };\n};\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename Tag = void_\n    >\nstruct quote5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        , typename U5\n        >\n    struct apply\n\n    {\n        typedef typename quote_impl<\n              F< U1,U2,U3,U4,U5 >\n            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value\n            >::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate< long N >\nstruct reverse_fold_chunk;\n\ntemplate<> struct reverse_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_fold_null_step< Last,State >\n            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step\n{\n    typedef reverse_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n    : reverse_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk;\n\ntemplate<> struct reverse_iter_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_iter_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_iter_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_iter_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_iter_fold_null_step< Last,State >\n            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step\n{\n    typedef reverse_iter_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n    : reverse_iter_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set;\n\ntemplate<\n     \n    >\nstruct set<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set0<  >\n{\n    typedef set0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct set<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set1<T0>\n{\n    typedef typename set1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct set<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set2< T0,T1 >\n{\n    typedef typename set2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct set<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set3< T0,T1,T2 >\n{\n    typedef typename set3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct set<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set4< T0,T1,T2,T3 >\n{\n    typedef typename set4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct set<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set5< T0,T1,T2,T3,T4 >\n{\n    typedef typename set5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : set15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : set16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : set17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : set18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : set19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set\n    : set20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c;\n\ntemplate<\n      typename T\n    >\nstruct set_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set0_c<T>\n{\n    typedef typename set0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct set_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set1_c< T,C0 >\n{\n    typedef typename set1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct set_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set2_c< T,C0,C1 >\n{\n    typedef typename set2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct set_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set3_c< T,C0,C1,C2 >\n{\n    typedef typename set3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : set18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : set19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c\n    : set20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_left_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n\n    : shift_left_impl<\n          typename shift_left_tag<N1>::type\n        , typename shift_left_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  << BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_right_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n\n    : shift_right_impl<\n          typename shift_right_tag<N1>::type\n        , typename shift_right_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< bool >\nstruct template_arity_impl\n{\n    template< typename F > struct result_\n        : mpl::int_< -1 >\n    {\n    };\n};\n\ntemplate<>\nstruct template_arity_impl<true>\n{\n    template< typename F > struct result_\n        : F::arity\n    {\n    };\n};\n\ntemplate< typename F >\nstruct template_arity\n    : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >\n        ::template result_<F>\n{\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n    : times< times< times< times< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct times< N1,N2,N3,N4,na >\n\n    : times< times< times< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct times< N1,N2,N3,na,na >\n\n    : times< times< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct times< N1,N2,na,na,na >\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< int size, typename F, typename Args >\nstruct unpack_args_impl;\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 0,F,Args >\n    : apply0<\n          F\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 1,F,Args >\n    : apply1<\n          F\n        , typename at_c< Args,0 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 2,F,Args >\n    : apply2<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 3,F,Args >\n    : apply3<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 4,F,Args >\n    : apply4<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 5,F,Args >\n    : apply5<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        , typename at_c< Args,4 >::type\n        >\n{\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n    {\n        typedef typename aux::unpack_args_impl<\n              size<Args>::value\n            , F\n            , Args\n            >::type type;\n\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector;\n\ntemplate<\n     \n    >\nstruct vector<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c;\n\ntemplate<\n      typename T\n    >\nstruct vector_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector0_c<T>\n{\n    typedef typename vector0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct vector_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector1_c< T, T(C0) >\n{\n    typedef typename vector1_c< T, T(C0) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct vector_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector2_c< T, T(C0), T(C1) >\n{\n    typedef typename vector2_c< T, T(C0), T(C1) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct vector_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector3_c< T, T(C0), T(C1), T(C2) >\n{\n    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >\n{\n    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >\n{\n    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >\n{\n    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >\n{\n    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >\n{\n    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >\n{\n    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >\n{\n    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >\n{\n    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >\n{\n    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >\n{\n    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >\n{\n    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >\n{\n    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >\n{\n    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >\n{\n    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >\n{\n    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >\n{\n    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c\n    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >\n{\n    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl\n    : false_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl< true,T1,T2,T3,T4 >\n    : and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , true_\n        >\n{\n};\n\ntemplate<>\nstruct and_impl<\n          true\n        , true_, true_, true_, true_\n        >\n    : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\ntemplate<\n      typename F\n    >\nstruct apply< F,na,na,na,na,na >\n    : apply0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply< F,T1,na,na,na,na >\n    : apply1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply< F,T1,T2,na,na,na >\n    : apply2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply< F,T1,T2,T3,na,na >\n    : apply3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply< F,T1,T2,T3,T4,na >\n    : apply4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply\n    : apply5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply;\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      int N, typename F\n    >\nstruct apply_wrap_impl0;\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          0\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n/// since the defaults are \"lost\", we have to pass *something* even for nullary\n/// metafunction classes\n        na\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          1\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          2\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          3\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          4\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          5\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap0\n    : apply_wrap_impl0<\n          ::boost::mpl::aux::arity< F,0 >::value\n        , F\n       \n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1\n    >\nstruct apply_wrap_impl1;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          1\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          2\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          3\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          4\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          5\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap1\n    : apply_wrap_impl1<\n          ::boost::mpl::aux::arity< F,1 >::value\n        , F\n        , T1\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          2\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          3\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          4\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          5\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap2\n    : apply_wrap_impl2<\n          ::boost::mpl::aux::arity< F,2 >::value\n        , F\n        , T1, T2\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          3\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          4\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          5\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap3\n    : apply_wrap_impl3<\n          ::boost::mpl::aux::arity< F,3 >::value\n        , F\n        , T1, T2, T3\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4<\n          4\n        , F\n        , T1, T2, T3, T4\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4<\n          5\n        , F\n        , T1, T2, T3, T4\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap4\n    : apply_wrap_impl4<\n          ::boost::mpl::aux::arity< F,4 >::value\n        , F\n        , T1, T2, T3, T4\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap_impl5;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap_impl5<\n          5\n        , F\n        , T1, T2, T3, T4, T5\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4, T5\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap5\n    : apply_wrap_impl5<\n          ::boost::mpl::aux::arity< F,5 >::value\n        , F\n        , T1, T2, T3, T4, T5\n        >::type\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg< -1 >, Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitand_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitand_< N1,N2,N3,N4,na >\n\n    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitand_< N1,N2,N3,na,na >\n\n    : bitand_< bitand_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitand_< N1,N2,na,na,na >\n    : bitand_impl<\n          typename bitand_tag<N1>::type\n        , typename bitand_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitor_< N1,N2,N3,N4,na >\n\n    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitor_< N1,N2,N3,na,na >\n\n    : bitor_< bitor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitor_< N1,N2,na,na,na >\n    : bitor_impl<\n          typename bitor_tag<N1>::type\n        , typename bitor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitxor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitxor_< N1,N2,N3,N4,na >\n\n    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitxor_< N1,N2,N3,na,na >\n\n    : bitxor_< bitxor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitxor_< N1,N2,na,na,na >\n    : bitxor_impl<\n          typename bitxor_tag<N1>::type\n        , typename bitxor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque;\n\ntemplate<\n     \n    >\nstruct deque<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct deque<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct deque<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct deque<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct deque<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct divides_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct divides< N1,N2,N3,N4,na >\n\n    : divides< divides< divides< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct divides< N1,N2,N3,na,na >\n\n    : divides< divides< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct divides< N1,N2,na,na,na >\n    : divides_impl<\n          typename divides_tag<N1>::type\n        , typename divides_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n{\n    typedef fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,First,Last,State,ForwardOp >\n    : fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Arity\n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>,Tag, int_< -1 > >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>,Tag, int_<1> >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    , typename Arity\n    >\nstruct lambda<\n          lambda< F,Tag1,Arity >\n        , Tag2\n        , int_<3>\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;\n    typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;\n    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : T1, T2\n{\n    typedef inherit2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\ntemplate< typename T1 >\nstruct inherit2< T1,empty_base >\n{\n    typedef T1 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))\n};\n\ntemplate< typename T2 >\nstruct inherit2< empty_base,T2 >\n{\n    typedef T2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))\n};\n\ntemplate<>\nstruct inherit2< empty_base,empty_base >\n{\n    typedef empty_base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1 = empty_base, typename T2 = empty_base\n        , typename T3 = empty_base, typename T4 = empty_base\n        , typename T5 = empty_base\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n{\n    typedef iter_fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,First,Last,State,ForwardOp >\n    : iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list;\n\ntemplate<\n     \n    >\nstruct list<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list0<  >\n{\n    typedef list0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct list<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list1<T0>\n{\n    typedef typename list1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list2< T0,T1 >\n{\n    typedef typename list2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list3< T0,T1,T2 >\n{\n    typedef typename list3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list4< T0,T1,T2,T3 >\n{\n    typedef typename list4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list5< T0,T1,T2,T3,T4 >\n{\n    typedef typename list5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : list15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : list16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : list17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : list18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : list19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list\n    : list20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c;\n\ntemplate<\n      typename T\n    >\nstruct list_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list0_c<T>\n{\n    typedef typename list0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct list_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list1_c< T,C0 >\n{\n    typedef typename list1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct list_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list2_c< T,C0,C1 >\n{\n    typedef typename list2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct list_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list3_c< T,C0,C1,C2 >\n{\n    typedef typename list3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : list18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : list19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c\n    : list20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map;\n\ntemplate<\n     \n    >\nstruct map<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map0<  >\n{\n    typedef map0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct map<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map1<T0>\n{\n    typedef typename map1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct map<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map2< T0,T1 >\n{\n    typedef typename map2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct map<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map3< T0,T1,T2 >\n{\n    typedef typename map3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct map<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map4< T0,T1,T2,T3 >\n{\n    typedef typename map4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct map<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map5< T0,T1,T2,T3,T4 >\n{\n    typedef typename map5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : map15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : map16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : map17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : map18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : map19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map\n    : map20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct minus< N1,N2,N3,N4,na >\n\n    : minus< minus< minus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct minus< N1,N2,N3,na,na >\n\n    : minus< minus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct minus< N1,N2,na,na,na >\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct modulus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n\n    : modulus_impl<\n          typename modulus_tag<N1>::type\n        , typename modulus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl\n    : true_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl< false,T1,T2,T3,T4 >\n    : or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , false_\n        >\n{\n};\n\ntemplate<>\nstruct or_impl<\n          false\n        , false_, false_, false_, false_\n        >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct plus< N1,N2,N3,N4,na >\n\n    : plus< plus< plus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct plus< N1,N2,N3,na,na >\n\n    : plus< plus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct plus< N1,N2,na,na,na >\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate< long N >\nstruct reverse_fold_chunk;\n\ntemplate<> struct reverse_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_fold_null_step< Last,State >\n            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step\n{\n    typedef reverse_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n    : reverse_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk;\n\ntemplate<> struct reverse_iter_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_iter_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_iter_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_iter_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_iter_fold_null_step< Last,State >\n            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step\n{\n    typedef reverse_iter_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n    : reverse_iter_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set;\n\ntemplate<\n     \n    >\nstruct set<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set0<  >\n{\n    typedef set0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct set<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set1<T0>\n{\n    typedef typename set1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct set<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set2< T0,T1 >\n{\n    typedef typename set2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct set<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set3< T0,T1,T2 >\n{\n    typedef typename set3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct set<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set4< T0,T1,T2,T3 >\n{\n    typedef typename set4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct set<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set5< T0,T1,T2,T3,T4 >\n{\n    typedef typename set5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : set15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : set16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : set17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : set18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : set19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set\n    : set20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c;\n\ntemplate<\n      typename T\n    >\nstruct set_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set0_c<T>\n{\n    typedef typename set0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct set_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set1_c< T,C0 >\n{\n    typedef typename set1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct set_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set2_c< T,C0,C1 >\n{\n    typedef typename set2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct set_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set3_c< T,C0,C1,C2 >\n{\n    typedef typename set3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : set18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : set19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c\n    : set20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_left_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n\n    : shift_left_impl<\n          typename shift_left_tag<N1>::type\n        , typename shift_left_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  << BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_right_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n\n    : shift_right_impl<\n          typename shift_right_tag<N1>::type\n        , typename shift_right_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< bool >\nstruct template_arity_impl\n{\n    template< typename F > struct result_\n        : mpl::int_< -1 >\n    {\n    };\n};\n\ntemplate<>\nstruct template_arity_impl<true>\n{\n    template< typename F > struct result_\n        : F::arity\n    {\n    };\n};\n\ntemplate< typename F >\nstruct template_arity\n    : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >\n        ::template result_<F>\n{\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n    : times< times< times< times< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct times< N1,N2,N3,N4,na >\n\n    : times< times< times< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct times< N1,N2,N3,na,na >\n\n    : times< times< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct times< N1,N2,na,na,na >\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< int size, typename F, typename Args >\nstruct unpack_args_impl;\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 0,F,Args >\n    : apply0<\n          F\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 1,F,Args >\n    : apply1<\n          F\n        , typename at_c< Args,0 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 2,F,Args >\n    : apply2<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 3,F,Args >\n    : apply3<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 4,F,Args >\n    : apply4<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 5,F,Args >\n    : apply5<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        , typename at_c< Args,4 >::type\n        >\n{\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n    {\n        typedef typename aux::unpack_args_impl<\n              size<Args>::value\n            , F\n            , Args\n            >::type type;\n\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector;\n\ntemplate<\n     \n    >\nstruct vector<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c;\n\ntemplate<\n      typename T\n    >\nstruct vector_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector0_c<T>\n{\n    typedef typename vector0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct vector_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector1_c< T, T(C0) >\n{\n    typedef typename vector1_c< T, T(C0) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct vector_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector2_c< T, T(C0), T(C1) >\n{\n    typedef typename vector2_c< T, T(C0), T(C1) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct vector_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector3_c< T, T(C0), T(C1), T(C2) >\n{\n    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >\n{\n    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >\n{\n    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >\n{\n    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >\n{\n    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >\n{\n    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >\n{\n    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >\n{\n    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >\n{\n    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >\n{\n    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >\n{\n    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >\n{\n    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >\n{\n    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >\n{\n    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >\n{\n    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >\n{\n    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >\n{\n    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c\n    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >\n{\n    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl\n    : false_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl< true,T1,T2,T3,T4 >\n    : and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , true_\n        >\n{\n};\n\ntemplate<>\nstruct and_impl<\n          true\n        , true_, true_, true_, true_\n        >\n    : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\ntemplate<\n      typename F\n    >\nstruct apply< F,na,na,na,na,na >\n    : apply0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply< F,T1,na,na,na,na >\n    : apply1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply< F,T1,T2,na,na,na >\n    : apply2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply< F,T1,T2,T3,na,na >\n    : apply3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply< F,T1,T2,T3,T4,na >\n    : apply4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply\n    : apply5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply;\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      int N, typename F\n    >\nstruct apply_wrap_impl0;\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          0\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n/// since the defaults are \"lost\", we have to pass *something* even for nullary\n/// metafunction classes\n        na\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          1\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          2\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          3\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          4\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          5\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap0\n    : apply_wrap_impl0<\n          ::boost::mpl::aux::arity< F,0 >::value\n        , F\n       \n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1\n    >\nstruct apply_wrap_impl1;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          1\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          2\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          3\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          4\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          5\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap1\n    : apply_wrap_impl1<\n          ::boost::mpl::aux::arity< F,1 >::value\n        , F\n        , T1\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          2\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          3\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          4\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          5\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap2\n    : apply_wrap_impl2<\n          ::boost::mpl::aux::arity< F,2 >::value\n        , F\n        , T1, T2\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          3\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          4\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          5\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap3\n    : apply_wrap_impl3<\n          ::boost::mpl::aux::arity< F,3 >::value\n        , F\n        , T1, T2, T3\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4<\n          4\n        , F\n        , T1, T2, T3, T4\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4<\n          5\n        , F\n        , T1, T2, T3, T4\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap4\n    : apply_wrap_impl4<\n          ::boost::mpl::aux::arity< F,4 >::value\n        , F\n        , T1, T2, T3, T4\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap_impl5;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap_impl5<\n          5\n        , F\n        , T1, T2, T3, T4, T5\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4, T5\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap5\n    : apply_wrap_impl5<\n          ::boost::mpl::aux::arity< F,5 >::value\n        , F\n        , T1, T2, T3, T4, T5\n        >::type\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg< -1 >, Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4, typename U5\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitand_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitand_< N1,N2,N3,N4,na >\n\n    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitand_< N1,N2,N3,na,na >\n\n    : bitand_< bitand_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitand_< N1,N2,na,na,na >\n    : bitand_impl<\n          typename bitand_tag<N1>::type\n        , typename bitand_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitor_< N1,N2,N3,N4,na >\n\n    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitor_< N1,N2,N3,na,na >\n\n    : bitor_< bitor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitor_< N1,N2,na,na,na >\n    : bitor_impl<\n          typename bitor_tag<N1>::type\n        , typename bitor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitxor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitxor_< N1,N2,N3,N4,na >\n\n    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitxor_< N1,N2,N3,na,na >\n\n    : bitxor_< bitxor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitxor_< N1,N2,na,na,na >\n    : bitxor_impl<\n          typename bitxor_tag<N1>::type\n        , typename bitxor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque;\n\ntemplate<\n     \n    >\nstruct deque<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct deque<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct deque<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct deque<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct deque<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct divides_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct divides< N1,N2,N3,N4,na >\n\n    : divides< divides< divides< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct divides< N1,N2,N3,na,na >\n\n    : divides< divides< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct divides< N1,N2,na,na,na >\n    : divides_impl<\n          typename divides_tag<N1>::type\n        , typename divides_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n{\n    typedef fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,First,Last,State,ForwardOp >\n    : fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Arity\n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>,Tag, int_< -1 > >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>,Tag, int_<1> >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    , typename Arity\n    >\nstruct lambda<\n          lambda< F,Tag1,Arity >\n        , Tag2\n        , int_<3>\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;\n    typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;\n    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : T1, T2\n{\n    typedef inherit2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\ntemplate< typename T1 >\nstruct inherit2< T1,empty_base >\n{\n    typedef T1 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))\n};\n\ntemplate< typename T2 >\nstruct inherit2< empty_base,T2 >\n{\n    typedef T2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))\n};\n\ntemplate<>\nstruct inherit2< empty_base,empty_base >\n{\n    typedef empty_base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1, typename T2, typename T3, typename T4, typename T5\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n{\n    typedef iter_fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,First,Last,State,ForwardOp >\n    : iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list;\n\ntemplate<\n     \n    >\nstruct list<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list0<  >\n{\n    typedef list0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct list<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list1<T0>\n{\n    typedef typename list1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list2< T0,T1 >\n{\n    typedef typename list2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list3< T0,T1,T2 >\n{\n    typedef typename list3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list4< T0,T1,T2,T3 >\n{\n    typedef typename list4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list5< T0,T1,T2,T3,T4 >\n{\n    typedef typename list5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : list15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : list16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : list17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : list18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : list19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list\n    : list20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c;\n\ntemplate<\n      typename T\n    >\nstruct list_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list0_c<T>\n{\n    typedef typename list0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct list_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list1_c< T,C0 >\n{\n    typedef typename list1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct list_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list2_c< T,C0,C1 >\n{\n    typedef typename list2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct list_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list3_c< T,C0,C1,C2 >\n{\n    typedef typename list3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : list18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : list19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c\n    : list20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map;\n\ntemplate<\n     \n    >\nstruct map<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map0<  >\n{\n    typedef map0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct map<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map1<T0>\n{\n    typedef typename map1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct map<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map2< T0,T1 >\n{\n    typedef typename map2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct map<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map3< T0,T1,T2 >\n{\n    typedef typename map3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct map<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map4< T0,T1,T2,T3 >\n{\n    typedef typename map4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct map<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map5< T0,T1,T2,T3,T4 >\n{\n    typedef typename map5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : map15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : map16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : map17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : map18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : map19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map\n    : map20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct minus< N1,N2,N3,N4,na >\n\n    : minus< minus< minus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct minus< N1,N2,N3,na,na >\n\n    : minus< minus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct minus< N1,N2,na,na,na >\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct modulus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n\n    : modulus_impl<\n          typename modulus_tag<N1>::type\n        , typename modulus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl\n    : true_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl< false,T1,T2,T3,T4 >\n    : or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , false_\n        >\n{\n};\n\ntemplate<>\nstruct or_impl<\n          false\n        , false_, false_, false_, false_\n        >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct plus< N1,N2,N3,N4,na >\n\n    : plus< plus< plus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct plus< N1,N2,N3,na,na >\n\n    : plus< plus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct plus< N1,N2,na,na,na >\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"quote.hpp\" header\n// -- DO NOT modify by hand!\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate< long N >\nstruct reverse_fold_chunk;\n\ntemplate<> struct reverse_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_fold_null_step< Last,State >\n            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step\n{\n    typedef reverse_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n    : reverse_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk;\n\ntemplate<> struct reverse_iter_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_iter_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_iter_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_iter_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_iter_fold_null_step< Last,State >\n            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step\n{\n    typedef reverse_iter_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n    : reverse_iter_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set;\n\ntemplate<\n     \n    >\nstruct set<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set0<  >\n{\n    typedef set0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct set<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set1<T0>\n{\n    typedef typename set1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct set<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set2< T0,T1 >\n{\n    typedef typename set2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct set<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set3< T0,T1,T2 >\n{\n    typedef typename set3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct set<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set4< T0,T1,T2,T3 >\n{\n    typedef typename set4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct set<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set5< T0,T1,T2,T3,T4 >\n{\n    typedef typename set5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : set15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : set16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : set17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : set18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : set19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set\n    : set20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c;\n\ntemplate<\n      typename T\n    >\nstruct set_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set0_c<T>\n{\n    typedef typename set0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct set_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set1_c< T,C0 >\n{\n    typedef typename set1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct set_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set2_c< T,C0,C1 >\n{\n    typedef typename set2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct set_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set3_c< T,C0,C1,C2 >\n{\n    typedef typename set3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : set18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : set19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c\n    : set20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_left_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n\n    : shift_left_impl<\n          typename shift_left_tag<N1>::type\n        , typename shift_left_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  << BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_right_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n\n    : shift_right_impl<\n          typename shift_right_tag<N1>::type\n        , typename shift_right_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< bool >\nstruct template_arity_impl\n{\n    template< typename F > struct result_\n        : mpl::int_< -1 >\n    {\n    };\n};\n\ntemplate<>\nstruct template_arity_impl<true>\n{\n    template< typename F > struct result_\n        : F::arity\n    {\n    };\n};\n\ntemplate< typename F >\nstruct template_arity\n    : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >\n        ::template result_<F>\n{\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n    : times< times< times< times< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct times< N1,N2,N3,N4,na >\n\n    : times< times< times< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct times< N1,N2,N3,na,na >\n\n    : times< times< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct times< N1,N2,na,na,na >\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< int size, typename F, typename Args >\nstruct unpack_args_impl;\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 0,F,Args >\n    : apply0<\n          F\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 1,F,Args >\n    : apply1<\n          F\n        , typename at_c< Args,0 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 2,F,Args >\n    : apply2<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 3,F,Args >\n    : apply3<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 4,F,Args >\n    : apply4<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 5,F,Args >\n    : apply5<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        , typename at_c< Args,4 >::type\n        >\n{\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n    {\n        typedef typename aux::unpack_args_impl<\n              size<Args>::value\n            , F\n            , Args\n            >::type type;\n\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector;\n\ntemplate<\n     \n    >\nstruct vector<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c;\n\ntemplate<\n      typename T\n    >\nstruct vector_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector0_c<T>\n{\n    typedef typename vector0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct vector_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector1_c< T, T(C0) >\n{\n    typedef typename vector1_c< T, T(C0) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct vector_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector2_c< T, T(C0), T(C1) >\n{\n    typedef typename vector2_c< T, T(C0), T(C1) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct vector_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector3_c< T, T(C0), T(C1), T(C2) >\n{\n    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >\n{\n    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >\n{\n    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >\n{\n    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >\n{\n    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >\n{\n    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >\n{\n    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >\n{\n    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >\n{\n    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >\n{\n    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >\n{\n    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >\n{\n    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >\n{\n    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >\n{\n    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >\n{\n    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >\n{\n    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >\n{\n    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c\n    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >\n{\n    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl\n    : false_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl< true,T1,T2,T3,T4 >\n    : and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , true_\n        >\n{\n};\n\ntemplate<>\nstruct and_impl<\n          true\n        , true_, true_, true_, true_\n        >\n    : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\ntemplate<\n      typename F\n    >\nstruct apply< F,na,na,na,na,na >\n    : apply0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply< F,T1,na,na,na,na >\n    : apply1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply< F,T1,T2,na,na,na >\n    : apply2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply< F,T1,T2,T3,na,na >\n    : apply3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply< F,T1,T2,T3,T4,na >\n    : apply4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply\n    : apply5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply;\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n\n    , typename has_apply_ = typename aux::has_apply<F>::type\n\n    >\nstruct apply_wrap0\n\n    : F::template apply<  >\n{\n};\n\ntemplate< typename F >\nstruct apply_wrap0< F,true_ >\n    : F::apply\n{\n};\n\ntemplate<\n      typename F, typename T1\n\n    >\nstruct apply_wrap1\n\n    : F::template apply<T1>\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n\n    >\nstruct apply_wrap2\n\n    : F::template apply< T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n\n    >\nstruct apply_wrap3\n\n    : F::template apply< T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n\n    >\nstruct apply_wrap4\n\n    : F::template apply< T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n\n    >\nstruct apply_wrap5\n\n    : F::template apply< T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, int dummy_\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, int dummy_\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1, int dummy_\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, int dummy_\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, int dummy_\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, int dummy_\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, int dummy_\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, int dummy_\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , int dummy_\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , int dummy_\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, int dummy_\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, int dummy_\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n/// if_/eval_if specializations\ntemplate< template< typename T1, typename T2, typename T3 > class F, typename Tag >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct if_;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< if_,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef typename if_<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg< -1 >, Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, int dummy_\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, int dummy_\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1, int dummy_\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, int dummy_\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, int dummy_\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, int dummy_\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, int dummy_\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, int dummy_\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , int dummy_\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , int dummy_\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, int dummy_\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, int dummy_\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n/// if_/eval_if specializations\ntemplate< template< typename T1, typename T2, typename T3 > class F, typename Tag >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct if_;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< if_,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef typename if_<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, int dummy_ = 0\n    >\nstruct bind;\n\ntemplate<\n      typename F, int dummy_ = 0\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1, int dummy_ = 0\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2, int dummy_ = 0\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, int dummy_ = 0\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , int dummy_ = 0\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, int dummy_ = 0\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitand_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitand_< N1,N2,N3,N4,na >\n\n    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitand_< N1,N2,N3,na,na >\n\n    : bitand_< bitand_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitand_< N1,N2,na,na,na >\n    : bitand_impl<\n          typename bitand_tag<N1>::type\n        , typename bitand_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitor_< N1,N2,N3,N4,na >\n\n    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitor_< N1,N2,N3,na,na >\n\n    : bitor_< bitor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitor_< N1,N2,na,na,na >\n    : bitor_impl<\n          typename bitor_tag<N1>::type\n        , typename bitor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitxor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitxor_< N1,N2,N3,N4,na >\n\n    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitxor_< N1,N2,N3,na,na >\n\n    : bitxor_< bitxor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitxor_< N1,N2,na,na,na >\n    : bitxor_impl<\n          typename bitxor_tag<N1>::type\n        , typename bitxor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque;\n\ntemplate<\n     \n    >\nstruct deque<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct deque<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct deque<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct deque<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct deque<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct divides_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct divides< N1,N2,N3,N4,na >\n\n    : divides< divides< divides< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct divides< N1,N2,N3,na,na >\n\n    : divides< divides< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct divides< N1,N2,na,na,na >\n    : divides_impl<\n          typename divides_tag<N1>::type\n        , typename divides_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n{\n    typedef fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,First,Last,State,ForwardOp >\n    : fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n   \n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>, Tag >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>, Tag >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : T1, T2\n{\n    typedef inherit2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\ntemplate< typename T1 >\nstruct inherit2< T1,empty_base >\n{\n    typedef T1 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))\n};\n\ntemplate< typename T2 >\nstruct inherit2< empty_base,T2 >\n{\n    typedef T2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))\n};\n\ntemplate<>\nstruct inherit2< empty_base,empty_base >\n{\n    typedef empty_base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1 = empty_base, typename T2 = empty_base\n        , typename T3 = empty_base, typename T4 = empty_base\n        , typename T5 = empty_base\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n{\n    typedef iter_fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,First,Last,State,ForwardOp >\n    : iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list;\n\ntemplate<\n     \n    >\nstruct list<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list0<  >\n{\n    typedef list0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct list<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list1<T0>\n{\n    typedef typename list1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list2< T0,T1 >\n{\n    typedef typename list2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list3< T0,T1,T2 >\n{\n    typedef typename list3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list4< T0,T1,T2,T3 >\n{\n    typedef typename list4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list5< T0,T1,T2,T3,T4 >\n{\n    typedef typename list5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : list15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : list16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : list17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : list18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : list19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list\n    : list20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c;\n\ntemplate<\n      typename T\n    >\nstruct list_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list0_c<T>\n{\n    typedef typename list0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct list_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list1_c< T,C0 >\n{\n    typedef typename list1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct list_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list2_c< T,C0,C1 >\n{\n    typedef typename list2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct list_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list3_c< T,C0,C1,C2 >\n{\n    typedef typename list3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : list18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : list19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c\n    : list20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map;\n\ntemplate<\n     \n    >\nstruct map<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map0<  >\n{\n    typedef map0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct map<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map1<T0>\n{\n    typedef typename map1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct map<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map2< T0,T1 >\n{\n    typedef typename map2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct map<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map3< T0,T1,T2 >\n{\n    typedef typename map3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct map<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map4< T0,T1,T2,T3 >\n{\n    typedef typename map4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct map<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map5< T0,T1,T2,T3,T4 >\n{\n    typedef typename map5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : map15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : map16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : map17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : map18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : map19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map\n    : map20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct minus< N1,N2,N3,N4,na >\n\n    : minus< minus< minus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct minus< N1,N2,N3,na,na >\n\n    : minus< minus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct minus< N1,N2,na,na,na >\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct modulus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n\n    : modulus_impl<\n          typename modulus_tag<N1>::type\n        , typename modulus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl\n    : true_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl< false,T1,T2,T3,T4 >\n    : or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , false_\n        >\n{\n};\n\ntemplate<>\nstruct or_impl<\n          false\n        , false_, false_, false_, false_\n        >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct plus< N1,N2,N3,N4,na >\n\n    : plus< plus< plus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct plus< N1,N2,N3,na,na >\n\n    : plus< plus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct plus< N1,N2,na,na,na >\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T, bool has_type_ >\nstruct quote_impl\n    : T\n{\n};\n\ntemplate< typename T >\nstruct quote_impl< T,false >\n{\n    typedef T type;\n};\n\ntemplate<\n      template< typename P1 > class F\n    , typename Tag = void_\n    >\nstruct quote1\n{\n    template< typename U1 > struct apply\n\n        : quote_impl<\n              F<U1>\n            , aux::has_type< F<U1> >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename Tag = void_\n    >\nstruct quote2\n{\n    template< typename U1, typename U2 > struct apply\n\n        : quote_impl<\n              F< U1,U2 >\n            , aux::has_type< F< U1,U2 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename Tag = void_\n    >\nstruct quote3\n{\n    template< typename U1, typename U2, typename U3 > struct apply\n\n        : quote_impl<\n              F< U1,U2,U3 >\n            , aux::has_type< F< U1,U2,U3 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename Tag = void_\n    >\nstruct quote4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4 >\n            , aux::has_type< F< U1,U2,U3,U4 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename Tag = void_\n    >\nstruct quote5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        , typename U5\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4,U5 >\n            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value\n            >\n\n    {\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set;\n\ntemplate<\n     \n    >\nstruct set<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set0<  >\n{\n    typedef set0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct set<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set1<T0>\n{\n    typedef typename set1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct set<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set2< T0,T1 >\n{\n    typedef typename set2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct set<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set3< T0,T1,T2 >\n{\n    typedef typename set3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct set<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set4< T0,T1,T2,T3 >\n{\n    typedef typename set4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct set<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set5< T0,T1,T2,T3,T4 >\n{\n    typedef typename set5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : set15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : set16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : set17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : set18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : set19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set\n    : set20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c;\n\ntemplate<\n      typename T\n    >\nstruct set_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set0_c<T>\n{\n    typedef typename set0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct set_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set1_c< T,C0 >\n{\n    typedef typename set1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct set_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set2_c< T,C0,C1 >\n{\n    typedef typename set2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct set_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set3_c< T,C0,C1,C2 >\n{\n    typedef typename set3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : set18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : set19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c\n    : set20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_left_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n\n    : shift_left_impl<\n          typename shift_left_tag<N1>::type\n        , typename shift_left_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  << BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_right_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n\n    : shift_right_impl<\n          typename shift_right_tag<N1>::type\n        , typename shift_right_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n    : times< times< times< times< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct times< N1,N2,N3,N4,na >\n\n    : times< times< times< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct times< N1,N2,N3,na,na >\n\n    : times< times< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct times< N1,N2,na,na,na >\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< int size, typename F, typename Args >\nstruct unpack_args_impl;\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 0,F,Args >\n    : apply0<\n          F\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 1,F,Args >\n    : apply1<\n          F\n        , typename at_c< Args,0 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 2,F,Args >\n    : apply2<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 3,F,Args >\n    : apply3<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 4,F,Args >\n    : apply4<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 5,F,Args >\n    : apply5<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        , typename at_c< Args,4 >::type\n        >\n{\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n\n        : aux::unpack_args_impl< size<Args>::value,F, Args >\n\n    {\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector;\n\ntemplate<\n     \n    >\nstruct vector<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c;\n\ntemplate<\n      typename T\n    >\nstruct vector_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector0_c<T>\n{\n    typedef typename vector0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct vector_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector1_c< T, T(C0) >\n{\n    typedef typename vector1_c< T, T(C0) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct vector_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector2_c< T, T(C0), T(C1) >\n{\n    typedef typename vector2_c< T, T(C0), T(C1) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct vector_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector3_c< T, T(C0), T(C1), T(C2) >\n{\n    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >\n{\n    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >\n{\n    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >\n{\n    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >\n{\n    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >\n{\n    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >\n{\n    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >\n{\n    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >\n{\n    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >\n{\n    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >\n{\n    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >\n{\n    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >\n{\n    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >\n{\n    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >\n{\n    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >\n{\n    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >\n{\n    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c\n    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >\n{\n    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl\n    : false_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl< true,T1,T2,T3,T4 >\n    : and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , true_\n        >\n{\n};\n\ntemplate<>\nstruct and_impl<\n          true\n        , true_, true_, true_, true_\n        >\n    : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\ntemplate<\n      typename F\n    >\nstruct apply< F,na,na,na,na,na >\n    : apply0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply< F,T1,na,na,na,na >\n    : apply1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply< F,T1,T2,na,na,na >\n    : apply2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply< F,T1,T2,T3,na,na >\n    : apply3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply< F,T1,T2,T3,T4,na >\n    : apply4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply\n    : apply5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply;\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n\n    , typename has_apply_ = typename aux::has_apply<F>::type\n\n    >\nstruct apply_wrap0\n\n    : F::template apply<  >\n{\n};\n\ntemplate< typename F >\nstruct apply_wrap0< F,true_ >\n    : F::apply\n{\n};\n\ntemplate<\n      typename F, typename T1\n\n    >\nstruct apply_wrap1\n\n    : F::template apply<T1>\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n\n    >\nstruct apply_wrap2\n\n    : F::template apply< T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n\n    >\nstruct apply_wrap3\n\n    : F::template apply< T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n\n    >\nstruct apply_wrap4\n\n    : F::template apply< T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n\n    >\nstruct apply_wrap5\n\n    : F::template apply< T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n/// if_/eval_if specializations\ntemplate< template< typename T1, typename T2, typename T3 > class F, typename Tag >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct if_;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< if_,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef typename if_<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\ntemplate<\n      template< typename T1, typename T2, typename T3 > class F, typename Tag\n    >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct eval_if;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< eval_if,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef typename eval_if<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg< -1 >, Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n/// if_/eval_if specializations\ntemplate< template< typename T1, typename T2, typename T3 > class F, typename Tag >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct if_;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< if_,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef typename if_<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\ntemplate<\n      template< typename T1, typename T2, typename T3 > class F, typename Tag\n    >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct eval_if;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< eval_if,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef typename eval_if<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct bind;\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitand_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitand_< N1,N2,N3,N4,na >\n\n    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitand_< N1,N2,N3,na,na >\n\n    : bitand_< bitand_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitand_< N1,N2,na,na,na >\n    : bitand_impl<\n          typename bitand_tag<N1>::type\n        , typename bitand_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitor_< N1,N2,N3,N4,na >\n\n    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitor_< N1,N2,N3,na,na >\n\n    : bitor_< bitor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitor_< N1,N2,na,na,na >\n    : bitor_impl<\n          typename bitor_tag<N1>::type\n        , typename bitor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitxor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitxor_< N1,N2,N3,N4,na >\n\n    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitxor_< N1,N2,N3,na,na >\n\n    : bitxor_< bitxor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitxor_< N1,N2,na,na,na >\n    : bitxor_impl<\n          typename bitxor_tag<N1>::type\n        , typename bitxor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque;\n\ntemplate<\n     \n    >\nstruct deque<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct deque<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct deque<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct deque<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct deque<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct divides_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct divides< N1,N2,N3,N4,na >\n\n    : divides< divides< divides< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct divides< N1,N2,N3,na,na >\n\n    : divides< divides< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct divides< N1,N2,na,na,na >\n    : divides_impl<\n          typename divides_tag<N1>::type\n        , typename divides_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n{\n    typedef fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,First,Last,State,ForwardOp >\n    : fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Arity\n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>,Tag, int_< -1 > >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>,Tag, int_<1> >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    , typename Arity\n    >\nstruct lambda<\n          lambda< F,Tag1,Arity >\n        , Tag2\n        , int_<3>\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;\n    typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;\n    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : T1, T2\n{\n    typedef inherit2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\ntemplate< typename T1 >\nstruct inherit2< T1,empty_base >\n{\n    typedef T1 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))\n};\n\ntemplate< typename T2 >\nstruct inherit2< empty_base,T2 >\n{\n    typedef T2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))\n};\n\ntemplate<>\nstruct inherit2< empty_base,empty_base >\n{\n    typedef empty_base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1 = empty_base, typename T2 = empty_base\n        , typename T3 = empty_base, typename T4 = empty_base\n        , typename T5 = empty_base\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n{\n    typedef iter_fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,First,Last,State,ForwardOp >\n    : iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list;\n\ntemplate<\n     \n    >\nstruct list<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list0<  >\n{\n    typedef list0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct list<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list1<T0>\n{\n    typedef typename list1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list2< T0,T1 >\n{\n    typedef typename list2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list3< T0,T1,T2 >\n{\n    typedef typename list3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list4< T0,T1,T2,T3 >\n{\n    typedef typename list4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list5< T0,T1,T2,T3,T4 >\n{\n    typedef typename list5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : list15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : list16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : list17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : list18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : list19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list\n    : list20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c;\n\ntemplate<\n      typename T\n    >\nstruct list_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list0_c<T>\n{\n    typedef typename list0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct list_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list1_c< T,C0 >\n{\n    typedef typename list1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct list_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list2_c< T,C0,C1 >\n{\n    typedef typename list2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct list_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list3_c< T,C0,C1,C2 >\n{\n    typedef typename list3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : list18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : list19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c\n    : list20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map;\n\ntemplate<\n     \n    >\nstruct map<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map0<  >\n{\n    typedef map0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct map<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map1<T0>\n{\n    typedef typename map1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct map<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map2< T0,T1 >\n{\n    typedef typename map2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct map<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map3< T0,T1,T2 >\n{\n    typedef typename map3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct map<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map4< T0,T1,T2,T3 >\n{\n    typedef typename map4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct map<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map5< T0,T1,T2,T3,T4 >\n{\n    typedef typename map5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : map15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : map16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : map17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : map18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : map19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map\n    : map20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct minus< N1,N2,N3,N4,na >\n\n    : minus< minus< minus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct minus< N1,N2,N3,na,na >\n\n    : minus< minus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct minus< N1,N2,na,na,na >\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct modulus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n\n    : modulus_impl<\n          typename modulus_tag<N1>::type\n        , typename modulus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl\n    : true_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl< false,T1,T2,T3,T4 >\n    : or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , false_\n        >\n{\n};\n\ntemplate<>\nstruct or_impl<\n          false\n        , false_, false_, false_, false_\n        >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct plus< N1,N2,N3,N4,na >\n\n    : plus< plus< plus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct plus< N1,N2,N3,na,na >\n\n    : plus< plus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct plus< N1,N2,na,na,na >\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T, bool has_type_ >\nstruct quote_impl\n{\n    typedef typename T::type type;\n};\n\ntemplate< typename T >\nstruct quote_impl< T,false >\n{\n    typedef T type;\n};\n\ntemplate<\n      template< typename P1 > class F\n    , typename Tag = void_\n    >\nstruct quote1\n{\n    template< typename U1 > struct apply\n\n        : quote_impl<\n              F<U1>\n            , aux::has_type< F<U1> >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename Tag = void_\n    >\nstruct quote2\n{\n    template< typename U1, typename U2 > struct apply\n\n        : quote_impl<\n              F< U1,U2 >\n            , aux::has_type< F< U1,U2 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename Tag = void_\n    >\nstruct quote3\n{\n    template< typename U1, typename U2, typename U3 > struct apply\n\n        : quote_impl<\n              F< U1,U2,U3 >\n            , aux::has_type< F< U1,U2,U3 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename Tag = void_\n    >\nstruct quote4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4 >\n            , aux::has_type< F< U1,U2,U3,U4 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename Tag = void_\n    >\nstruct quote5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        , typename U5\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4,U5 >\n            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value\n            >\n\n    {\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set;\n\ntemplate<\n     \n    >\nstruct set<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set0<  >\n{\n    typedef set0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct set<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set1<T0>\n{\n    typedef typename set1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct set<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set2< T0,T1 >\n{\n    typedef typename set2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct set<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set3< T0,T1,T2 >\n{\n    typedef typename set3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct set<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set4< T0,T1,T2,T3 >\n{\n    typedef typename set4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct set<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set5< T0,T1,T2,T3,T4 >\n{\n    typedef typename set5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : set15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : set16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : set17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : set18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : set19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set\n    : set20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c;\n\ntemplate<\n      typename T\n    >\nstruct set_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set0_c<T>\n{\n    typedef typename set0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct set_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set1_c< T,C0 >\n{\n    typedef typename set1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct set_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set2_c< T,C0,C1 >\n{\n    typedef typename set2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct set_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set3_c< T,C0,C1,C2 >\n{\n    typedef typename set3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : set18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : set19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c\n    : set20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_left_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n\n    : shift_left_impl<\n          typename shift_left_tag<N1>::type\n        , typename shift_left_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  << BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_right_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n\n    : shift_right_impl<\n          typename shift_right_tag<N1>::type\n        , typename shift_right_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\ntemplate< int N > struct arity_tag\n{\n    typedef char (&type)[N + 1];\n};\n\ntemplate<\n      int C1, int C2, int C3, int C4, int C5, int C6\n    >\nstruct max_arity\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          ( C6 > 0 ? C6 : ( C5 > 0 ? C5 : ( C4 > 0 ? C4 : ( C3 > 0 ? C3 : ( C2 > 0 ? C2 : ( C1 > 0 ? C1 : -1 ) ) ) ) ) )\n        );\n};\n\narity_tag<0>::type arity_helper(...);\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    >\ntypename arity_tag<1>::type\narity_helper(type_wrapper< F<T1> >, arity_tag<1>);\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    >\ntypename arity_tag<2>::type\narity_helper(type_wrapper< F< T1,T2 > >, arity_tag<2>);\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    >\ntypename arity_tag<3>::type\narity_helper(type_wrapper< F< T1,T2,T3 > >, arity_tag<3>);\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    >\ntypename arity_tag<4>::type\narity_helper(type_wrapper< F< T1,T2,T3,T4 > >, arity_tag<4>);\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    >\ntypename arity_tag<5>::type\narity_helper(type_wrapper< F< T1,T2,T3,T4,T5 > >, arity_tag<5>);\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5, typename P6\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6\n    >\ntypename arity_tag<6>::type\narity_helper(type_wrapper< F< T1,T2,T3,T4,T5,T6 > >, arity_tag<6>);\ntemplate< typename F, int N >\nstruct template_arity_impl\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          sizeof(::boost::mpl::aux::arity_helper(type_wrapper<F>(), arity_tag<N>())) - 1\n        );\n};\n\ntemplate< typename F >\nstruct template_arity\n{\n    BOOST_STATIC_CONSTANT(int, value  = (\n          max_arity< template_arity_impl< F,1 >::value, template_arity_impl< F,2 >::value, template_arity_impl< F,3 >::value, template_arity_impl< F,4 >::value, template_arity_impl< F,5 >::value, template_arity_impl< F,6 >::value >::value\n        ));\n    typedef mpl::int_<value> type;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n    : times< times< times< times< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct times< N1,N2,N3,N4,na >\n\n    : times< times< times< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct times< N1,N2,N3,na,na >\n\n    : times< times< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct times< N1,N2,na,na,na >\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< int size, typename F, typename Args >\nstruct unpack_args_impl;\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 0,F,Args >\n    : apply0<\n          F\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 1,F,Args >\n    : apply1<\n          F\n        , typename at_c< Args,0 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 2,F,Args >\n    : apply2<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 3,F,Args >\n    : apply3<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 4,F,Args >\n    : apply4<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 5,F,Args >\n    : apply5<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        , typename at_c< Args,4 >::type\n        >\n{\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n\n        : aux::unpack_args_impl< size<Args>::value,F, Args >\n\n    {\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector;\n\ntemplate<\n     \n    >\nstruct vector<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c;\n\ntemplate<\n      typename T\n    >\nstruct vector_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector0_c<T>\n{\n    typedef typename vector0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct vector_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector1_c< T, T(C0) >\n{\n    typedef typename vector1_c< T, T(C0) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct vector_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector2_c< T, T(C0), T(C1) >\n{\n    typedef typename vector2_c< T, T(C0), T(C1) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct vector_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector3_c< T, T(C0), T(C1), T(C2) >\n{\n    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >\n{\n    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >\n{\n    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >\n{\n    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >\n{\n    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >\n{\n    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >\n{\n    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >\n{\n    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >\n{\n    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >\n{\n    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >\n{\n    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >\n{\n    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >\n{\n    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >\n{\n    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >\n{\n    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >\n{\n    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >\n{\n    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c\n    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >\n{\n    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool C_ > struct and_impl\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : false_\n    {\n    };\n};\n\ntemplate<> struct and_impl<true>\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : and_impl<\n              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n            >::template result_< T2,T3,T4,true_ >\n    {\n    };\n};\n\ntemplate<>\nstruct and_impl<true>\n    ::result_< true_,true_,true_,true_ >\n        : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        >::template result_< T2,T3,T4,T5 >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n{\n    typedef typename apply_wrap0<\n          typename lambda<F>::type\n       \n        >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply0<int>\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n{\n    typedef typename apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply1< int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n{\n    typedef typename apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply2< int,int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n{\n    typedef typename apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply3< int,int,int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n{\n    typedef typename apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply4< int,int,int,int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n{\n    typedef typename apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply5< int,int,int,int,int,int >\n{\n    typedef int type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename F>\nstruct msvc_apply0\n{\n    template< bool > struct f_ : F {};\n    template<> struct f_<true>\n    {\n        template< typename P  = int > struct apply\n        {\n            typedef int type;\n        };\n    };\n\n    template< typename T  = int > struct result_\n        : f_< aux::msvc_never_true<F>::value >\n            ::template apply<>\n    {\n    };\n\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap0\n{\n    typedef typename msvc_apply0<F>::template result_<\n         \n        >::type type;\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap0<int>\n{\n    typedef int type;\n};\n\ntemplate< typename F>\nstruct msvc_apply1\n{\n    template< bool > struct f_ : F {};\n    template<> struct f_<true>\n    {\n        template< typename P1 > struct apply\n        {\n            typedef int type;\n        };\n    };\n\n    template< typename T1 > struct result_\n        : f_< aux::msvc_never_true<F>::value >\n            ::template apply<T1>\n    {\n    };\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap1\n{\n    typedef typename msvc_apply1<F>::template result_<\n          T1\n        >::type type;\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap1< int,int >\n{\n    typedef int type;\n};\n\ntemplate< typename F>\nstruct msvc_apply2\n{\n    template< bool > struct f_ : F {};\n    template<> struct f_<true>\n    {\n        template< typename P1, typename P2 > struct apply\n        {\n            typedef int type;\n        };\n    };\n\n    template< typename T1, typename T2 > struct result_\n        : f_< aux::msvc_never_true<F>::value >\n            ::template apply< T1,T2 >\n    {\n    };\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap2\n{\n    typedef typename msvc_apply2<F>::template result_<\n          T1, T2\n        >::type type;\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap2< int,int,int >\n{\n    typedef int type;\n};\n\ntemplate< typename F>\nstruct msvc_apply3\n{\n    template< bool > struct f_ : F {};\n    template<> struct f_<true>\n    {\n        template< typename P1, typename P2, typename P3 > struct apply\n        {\n            typedef int type;\n        };\n    };\n\n    template< typename T1, typename T2, typename T3 > struct result_\n        : f_< aux::msvc_never_true<F>::value >\n            ::template apply< T1,T2,T3 >\n    {\n    };\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap3\n{\n    typedef typename msvc_apply3<F>::template result_<\n          T1, T2, T3\n        >::type type;\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap3< int,int,int,int >\n{\n    typedef int type;\n};\n\ntemplate< typename F>\nstruct msvc_apply4\n{\n    template< bool > struct f_ : F {};\n    template<> struct f_<true>\n    {\n        template<\n              typename P1, typename P2, typename P3, typename P4\n            >\n        struct apply\n        {\n            typedef int type;\n        };\n    };\n\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : f_< aux::msvc_never_true<F>::value >\n            ::template apply< T1,T2,T3,T4 >\n    {\n    };\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap4\n{\n    typedef typename msvc_apply4<F>::template result_<\n          T1, T2, T3, T4\n        >::type type;\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap4< int,int,int,int,int >\n{\n    typedef int type;\n};\n\ntemplate< typename F>\nstruct msvc_apply5\n{\n    template< bool > struct f_ : F {};\n    template<> struct f_<true>\n    {\n        template<\n              typename P1, typename P2, typename P3, typename P4\n            , typename P5\n            >\n        struct apply\n        {\n            typedef int type;\n        };\n    };\n\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n        : f_< aux::msvc_never_true<F>::value >\n            ::template apply< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap5\n{\n    typedef typename msvc_apply5<F>::template result_<\n          T1, T2, T3, T4, T5\n        >::type type;\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap5< int,int,int,int,int,int >\n{\n    typedef int type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool >\nstruct resolve_arg_impl\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<>\nstruct resolve_arg_impl<true>\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef typename apply_wrap5<\n              T\n            , U1, U2, U3, U4, U5\n            >::type type;\n    };\n};\n\ntemplate< typename T > struct is_bind_template;\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n    : resolve_arg_impl< is_bind_template<T>::value >\n            ::template result_< T,U1,U2,U3,U4,U5 >\n{\n};\n\ntemplate< int arity_ > struct bind_chooser;\n\naux::no_tag is_bind_helper(...);\ntemplate< typename T > aux::no_tag is_bind_helper(protect<T>*);\n\ntemplate< int N >\naux::yes_tag is_bind_helper(arg<N>*);\n\ntemplate< bool is_ref_  = true >\nstruct is_bind_template_impl\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value  = false);\n    };\n};\n\ntemplate<>\nstruct is_bind_template_impl<false>\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n              sizeof(aux::is_bind_helper(static_cast<T*>(0)))\n                == sizeof(aux::yes_tag)\n            );\n    };\n};\n\ntemplate< typename T > struct is_bind_template\n    : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\n        ::template result_<T>\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F\n    >\naux::yes_tag\nis_bind_helper(bind0<F>*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1\n    >\naux::yes_tag\nis_bind_helper(bind1< F,T1 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\naux::yes_tag\nis_bind_helper(bind2< F,T1,T2 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\naux::yes_tag\nis_bind_helper(bind3< F,T1,T2,T3 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\naux::yes_tag\nis_bind_helper(bind4< F,T1,T2,T3,T4 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\naux::yes_tag\nis_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool >\nstruct resolve_arg_impl\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<>\nstruct resolve_arg_impl<true>\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef typename apply_wrap5<\n              T\n            , U1, U2, U3, U4, U5\n            >::type type;\n    };\n};\n\ntemplate< typename T > struct is_bind_template;\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n    : resolve_arg_impl< is_bind_template<T>::value >\n            ::template result_< T,U1,U2,U3,U4,U5 >\n{\n};\n\ntemplate< typename T >\nstruct replace_unnamed_arg_impl\n{\n    template< typename Arg > struct result_\n    {\n        typedef Arg next;\n        typedef T type;\n    };\n};\n\ntemplate<>\nstruct replace_unnamed_arg_impl< arg< -1 > >\n{\n    template< typename Arg > struct result_\n    {\n        typedef typename next<Arg>::type next;\n        typedef Arg type;\n    };\n};\n\ntemplate< typename T, typename Arg >\nstruct replace_unnamed_arg\n    : replace_unnamed_arg_impl<T>::template result_<Arg>\n{\n};\n\ntemplate< int arity_ > struct bind_chooser;\n\naux::no_tag is_bind_helper(...);\ntemplate< typename T > aux::no_tag is_bind_helper(protect<T>*);\n\ntemplate< int N >\naux::yes_tag is_bind_helper(arg<N>*);\n\ntemplate< bool is_ref_  = true >\nstruct is_bind_template_impl\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value  = false);\n    };\n};\n\ntemplate<>\nstruct is_bind_template_impl<false>\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n              sizeof(aux::is_bind_helper(static_cast<T*>(0)))\n                == sizeof(aux::yes_tag)\n            );\n    };\n};\n\ntemplate< typename T > struct is_bind_template\n    : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\n        ::template result_<T>\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F\n    >\naux::yes_tag\nis_bind_helper(bind0<F>*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1\n    >\naux::yes_tag\nis_bind_helper(bind1< F,T1 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\naux::yes_tag\nis_bind_helper(bind2< F,T1,T2 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\naux::yes_tag\nis_bind_helper(bind3< F,T1,T2,T3 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\naux::yes_tag\nis_bind_helper(bind4< F,T1,T2,T3,T4 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\naux::yes_tag\nis_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct bitand_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitand_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitand_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct bitand_2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n\n    : if_<\n\n          is_na<N3>\n        , bitand_2< N1,N2 >\n        , bitand_<\n              bitand_2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct bitand_2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          bitand_impl<\n              typename bitand_tag<N1>::type\n            , typename bitand_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct bitand_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 & n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::bitand_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct bitor_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitor_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitor_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct bitor_2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n\n    : if_<\n\n          is_na<N3>\n        , bitor_2< N1,N2 >\n        , bitor_<\n              bitor_2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct bitor_2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          bitor_impl<\n              typename bitor_tag<N1>::type\n            , typename bitor_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct bitor_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 | n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::bitor_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct bitxor_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitxor_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitxor_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct bitxor_2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n\n    : if_<\n\n          is_na<N3>\n        , bitxor_2< N1,N2 >\n        , bitxor_<\n              bitxor_2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct bitxor_2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          bitxor_impl<\n              typename bitxor_tag<N1>::type\n            , typename bitxor_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct bitxor_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 ^ n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::bitxor_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct deque_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef vector0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_deque_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_deque_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct deque_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_deque_arg<T1>::value + is_deque_arg<T2>::value \n        + is_deque_arg<T3>::value + is_deque_arg<T4>::value \n        + is_deque_arg<T5>::value + is_deque_arg<T6>::value \n        + is_deque_arg<T7>::value + is_deque_arg<T8>::value \n        + is_deque_arg<T9>::value + is_deque_arg<T10>::value \n        + is_deque_arg<T11>::value + is_deque_arg<T12>::value \n        + is_deque_arg<T13>::value + is_deque_arg<T14>::value \n        + is_deque_arg<T15>::value + is_deque_arg<T16>::value \n        + is_deque_arg<T17>::value + is_deque_arg<T18>::value \n        + is_deque_arg<T19>::value + is_deque_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque_impl\n{\n    typedef aux::deque_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::deque_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque\n    : aux::deque_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::deque_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct divides_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct divides_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct divides_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct divides2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n\n    : if_<\n\n          is_na<N3>\n        , divides2< N1,N2 >\n        , divides<\n              divides2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct divides2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          divides_impl<\n              typename divides_tag<N1>::type\n            , typename divides_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct divides_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 / n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::divides_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct equal_to_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct equal_to_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct equal_to_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n    : aux::msvc_eti_base< typename apply_wrap2<\n          equal_to_impl<\n              typename equal_to_tag<N1>::type\n            , typename equal_to_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value ==\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate< int N >\nstruct fold_chunk;\n\ntemplate<> struct fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef state0 state;\n        typedef iter0 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef state1 state;\n        typedef iter1 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef state2 state;\n        typedef iter2 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef state3 state;\n        typedef iter3 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef state4 state;\n        typedef iter4 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate< int N >\nstruct fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef fold_impl<\n              4\n            , First\n            , Last\n            , State\n            , ForwardOp\n            > chunk_;\n\n        typedef fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , typename chunk_::iterator\n            , Last\n            , typename chunk_::state\n            , ForwardOp\n            > res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , fold_null_step< Last,State >\n            , fold_step< First,Last,State,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_step\n{\n    typedef fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        > chunk_;\n\n    typedef typename chunk_::state state;\n    typedef typename chunk_::iterator iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n    : fold_chunk<N>\n        ::template result_< First,Last,State,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n   \n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>, Tag >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>, Tag >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\n/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars\n\ntemplate<\n      typename F, typename Tag1, typename Tag2\n    >\nstruct lambda<\n          lambda< F,Tag1 >\n        , Tag2\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct greater_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n    : aux::msvc_eti_base< typename apply_wrap2<\n          greater_impl<\n              typename greater_tag<N1>::type\n            , typename greater_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_equal_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_equal_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n    : aux::msvc_eti_base< typename apply_wrap2<\n          greater_equal_impl<\n              typename greater_equal_tag<N1>::type\n            , typename greater_equal_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >=\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C1, bool C2 >\nstruct inherit2_impl\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T1, T2\n    {\n        typedef Derived type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl< false,true >\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T1\n    {\n        typedef T1 type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl< true,false >\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T2\n    {\n        typedef T2 type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl< true,true >\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n    {\n        typedef T1 type_;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : aux::inherit2_impl<\n          is_empty_base<T1>::value\n        , is_empty_base<T2>::value\n        >::template result_< inherit2< T1,T2 >,T1, T2 >\n{\n    typedef typename inherit2::type_ type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1 = empty_base, typename T2 = empty_base\n        , typename T3 = empty_base, typename T4 = empty_base\n        , typename T5 = empty_base\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate< int N >\nstruct iter_fold_chunk;\n\ntemplate<> struct iter_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef state0 state;\n        typedef iter0 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct iter_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef state1 state;\n        typedef iter1 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct iter_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef state2 state;\n        typedef iter2 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct iter_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef state3 state;\n        typedef iter3 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct iter_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef state4 state;\n        typedef iter4 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate< int N >\nstruct iter_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef iter_fold_impl<\n              4\n            , First\n            , Last\n            , State\n            , ForwardOp\n            > chunk_;\n\n        typedef iter_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , typename chunk_::iterator\n            , Last\n            , typename chunk_::state\n            , ForwardOp\n            > res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct iter_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct iter_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , iter_fold_null_step< Last,State >\n            , iter_fold_step< First,Last,State,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_step\n{\n    typedef iter_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        > chunk_;\n\n    typedef typename chunk_::state state;\n    typedef typename chunk_::iterator iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n    : iter_fold_chunk<N>\n        ::template result_< First,Last,State,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct less_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n    : aux::msvc_eti_base< typename apply_wrap2<\n          less_impl<\n              typename less_tag<N1>::type\n            , typename less_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N2)::value >\n             BOOST_MPL_AUX_VALUE_WKND(N1)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct less_equal_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_equal_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_equal_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n    : aux::msvc_eti_base< typename apply_wrap2<\n          less_equal_impl<\n              typename less_equal_tag<N1>::type\n            , typename less_equal_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <=\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct list_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef list0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_list_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_list_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct list_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_list_arg<T1>::value + is_list_arg<T2>::value \n        + is_list_arg<T3>::value + is_list_arg<T4>::value \n        + is_list_arg<T5>::value + is_list_arg<T6>::value \n        + is_list_arg<T7>::value + is_list_arg<T8>::value \n        + is_list_arg<T9>::value + is_list_arg<T10>::value \n        + is_list_arg<T11>::value + is_list_arg<T12>::value \n        + is_list_arg<T13>::value + is_list_arg<T14>::value \n        + is_list_arg<T15>::value + is_list_arg<T16>::value \n        + is_list_arg<T17>::value + is_list_arg<T18>::value \n        + is_list_arg<T19>::value + is_list_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list_impl\n{\n    typedef aux::list_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::list_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list\n    : aux::list_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::list_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct list_c_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<0>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list0_c<\n              T\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<1>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list1_c<\n              T, C0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<2>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list2_c<\n              T, C0, C1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<3>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list3_c<\n              T, C0, C1, C2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<4>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list4_c<\n              T, C0, C1, C2, C3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<5>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list5_c<\n              T, C0, C1, C2, C3, C4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<6>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list6_c<\n              T, C0, C1, C2, C3, C4, C5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<7>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list7_c<\n              T, C0, C1, C2, C3, C4, C5, C6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<8>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list8_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<9>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list9_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<10>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list10_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<11>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list11_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<12>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list12_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<13>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list13_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<14>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list14_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<15>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list15_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<16>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list16_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<17>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list17_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<18>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list18_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<19>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list19_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<20>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list20_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< long C >\nstruct is_list_c_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_list_c_arg<LONG_MAX>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8\n    , long C9, long C10, long C11, long C12, long C13, long C14, long C15\n    , long C16, long C17, long C18, long C19, long C20\n    >\nstruct list_c_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_list_c_arg<C1>::value + is_list_c_arg<C2>::value \n        + is_list_c_arg<C3>::value + is_list_c_arg<C4>::value \n        + is_list_c_arg<C5>::value + is_list_c_arg<C6>::value \n        + is_list_c_arg<C7>::value + is_list_c_arg<C8>::value \n        + is_list_c_arg<C9>::value + is_list_c_arg<C10>::value \n        + is_list_c_arg<C11>::value + is_list_c_arg<C12>::value \n        + is_list_c_arg<C13>::value + is_list_c_arg<C14>::value \n        + is_list_c_arg<C15>::value + is_list_c_arg<C16>::value \n        + is_list_c_arg<C17>::value + is_list_c_arg<C18>::value \n        + is_list_c_arg<C19>::value + is_list_c_arg<C20>::value\n        );\n\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c_impl\n{\n    typedef aux::list_c_count_args<\n          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        > arg_num_;\n\n    typedef typename aux::list_c_chooser< arg_num_::value >\n        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c\n    : aux::list_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type\n{\n    typedef typename aux::list_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct map_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef map0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_map_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_map_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct map_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_map_arg<T1>::value + is_map_arg<T2>::value \n        + is_map_arg<T3>::value + is_map_arg<T4>::value \n        + is_map_arg<T5>::value + is_map_arg<T6>::value \n        + is_map_arg<T7>::value + is_map_arg<T8>::value \n        + is_map_arg<T9>::value + is_map_arg<T10>::value \n        + is_map_arg<T11>::value + is_map_arg<T12>::value \n        + is_map_arg<T13>::value + is_map_arg<T14>::value \n        + is_map_arg<T15>::value + is_map_arg<T16>::value \n        + is_map_arg<T17>::value + is_map_arg<T18>::value \n        + is_map_arg<T19>::value + is_map_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map_impl\n{\n    typedef aux::map_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::map_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map\n    : aux::map_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::map_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct minus_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct minus_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct minus_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct minus2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n\n    : if_<\n\n          is_na<N3>\n        , minus2< N1,N2 >\n        , minus<\n              minus2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct minus2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          minus_impl<\n              typename minus_tag<N1>::type\n            , typename minus_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct minus_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 - n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::minus_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct modulus_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct modulus_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct modulus_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n    : aux::msvc_eti_base< typename apply_wrap2<\n          modulus_impl<\n              typename modulus_tag<N1>::type\n            , typename modulus_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct modulus_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 % n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::modulus_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct not_equal_to_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct not_equal_to_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n    : aux::msvc_eti_base< typename apply_wrap2<\n          not_equal_to_impl<\n              typename not_equal_to_tag<N1>::type\n            , typename not_equal_to_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value !=\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool C_ > struct or_impl\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : true_\n    {\n    };\n};\n\ntemplate<> struct or_impl<false>\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : or_impl<\n              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n            >::template result_< T2,T3,T4,false_ >\n    {\n    };\n};\n\ntemplate<>\nstruct or_impl<false>\n    ::result_< false_,false_,false_,false_ >\n        : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        >::template result_< T2,T3,T4,T5 >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct plus_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct plus_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct plus_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct plus2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n\n    : if_<\n\n          is_na<N3>\n        , plus2< N1,N2 >\n        , plus<\n              plus2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct plus2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          plus_impl<\n              typename plus_tag<N1>::type\n            , typename plus_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct plus_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 + n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::plus_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate< long N >\nstruct reverse_fold_chunk;\n\ntemplate<> struct reverse_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct reverse_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct reverse_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct reverse_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct reverse_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate< long N >\nstruct reverse_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_fold_null_step< Last,State >\n            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step\n{\n    typedef reverse_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n    : reverse_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk;\n\ntemplate<> struct reverse_iter_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct reverse_iter_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct reverse_iter_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct reverse_iter_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<> struct reverse_iter_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_iter_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_iter_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_iter_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_iter_fold_null_step< Last,State >\n            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n\n    /// ETI workaround\n    template<> struct result_< int,int,int,int,int >\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step\n{\n    typedef reverse_iter_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n    : reverse_iter_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct set_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef set0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_set_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_set_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct set_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_set_arg<T1>::value + is_set_arg<T2>::value \n        + is_set_arg<T3>::value + is_set_arg<T4>::value \n        + is_set_arg<T5>::value + is_set_arg<T6>::value \n        + is_set_arg<T7>::value + is_set_arg<T8>::value \n        + is_set_arg<T9>::value + is_set_arg<T10>::value \n        + is_set_arg<T11>::value + is_set_arg<T12>::value \n        + is_set_arg<T13>::value + is_set_arg<T14>::value \n        + is_set_arg<T15>::value + is_set_arg<T16>::value \n        + is_set_arg<T17>::value + is_set_arg<T18>::value \n        + is_set_arg<T19>::value + is_set_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set_impl\n{\n    typedef aux::set_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::set_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set\n    : aux::set_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::set_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct set_c_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<0>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set0_c<\n              T\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<1>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set1_c<\n              T, C0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<2>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set2_c<\n              T, C0, C1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<3>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set3_c<\n              T, C0, C1, C2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<4>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set4_c<\n              T, C0, C1, C2, C3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<5>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set5_c<\n              T, C0, C1, C2, C3, C4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<6>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set6_c<\n              T, C0, C1, C2, C3, C4, C5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<7>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set7_c<\n              T, C0, C1, C2, C3, C4, C5, C6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<8>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set8_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<9>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set9_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<10>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set10_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<11>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set11_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<12>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set12_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<13>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set13_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<14>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set14_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<15>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set15_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<16>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set16_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<17>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set17_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<18>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set18_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<19>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set19_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<20>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set20_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< long C >\nstruct is_set_c_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_set_c_arg<LONG_MAX>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8\n    , long C9, long C10, long C11, long C12, long C13, long C14, long C15\n    , long C16, long C17, long C18, long C19, long C20\n    >\nstruct set_c_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_set_c_arg<C1>::value + is_set_c_arg<C2>::value \n        + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value \n        + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value \n        + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value \n        + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value \n        + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value \n        + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value \n        + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value \n        + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value \n        + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value\n        );\n\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c_impl\n{\n    typedef aux::set_c_count_args<\n          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        > arg_num_;\n\n    typedef typename aux::set_c_chooser< arg_num_::value >\n        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c\n    : aux::set_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type\n{\n    typedef typename aux::set_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct shift_left_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_left_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_left_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n    : aux::msvc_eti_base< typename apply_wrap2<\n          shift_left_impl<\n              typename shift_left_tag<N1>::type\n            , typename shift_left_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, typename Shift, T n, Shift s >\nstruct shift_left_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n << s));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n        : aux::shift_left_wknd<\n              typename N::value_type\n            , typename S::value_type\n            , N::value\n            , S::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct shift_right_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_right_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_right_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n    : aux::msvc_eti_base< typename apply_wrap2<\n          shift_right_impl<\n              typename shift_right_tag<N1>::type\n            , typename shift_right_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, typename Shift, T n, Shift s >\nstruct shift_right_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n >> s));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n        : aux::shift_right_wknd<\n              typename N::value_type\n            , typename S::value_type\n            , N::value\n            , S::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< bool >\nstruct template_arity_impl\n{\n    template< typename F > struct result_\n        : mpl::int_< -1 >\n    {\n    };\n};\n\ntemplate<>\nstruct template_arity_impl<true>\n{\n    template< typename F > struct result_\n        : F::arity\n    {\n    };\n};\n\ntemplate< typename F >\nstruct template_arity\n    : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >\n        ::template result_<F>\n{\n};\n\ntemplate<>\nstruct template_arity<int>\n    : mpl::int_< -1 >\n{\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct times_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct times_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct times_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct times2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n\n    : if_<\n\n          is_na<N3>\n        , times2< N1,N2 >\n        , times<\n              times2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct times2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          times_impl<\n              typename times_tag<N1>::type\n            , typename times_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct times_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 * n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::times_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl\n{\n    template< typename F, typename Args > struct apply;\n};\n\ntemplate<> struct unpack_args_impl<0>\n{\n    template< typename F, typename Args > struct apply\n        : apply0<\n              F\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<1>\n{\n    template< typename F, typename Args > struct apply\n        : apply1<\n              F\n            , typename at_c< Args,0 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<2>\n{\n    template< typename F, typename Args > struct apply\n        : apply2<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<3>\n{\n    template< typename F, typename Args > struct apply\n        : apply3<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            , typename at_c< Args,2 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<4>\n{\n    template< typename F, typename Args > struct apply\n        : apply4<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<5>\n{\n    template< typename F, typename Args > struct apply\n        : apply5<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n            , typename at_c< Args,4 >::type\n            >\n    {\n    };\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n\n        : aux::unpack_args_impl< size<Args>::value >\n            ::template apply< F,Args >\n\n    {\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct vector_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef vector0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_vector_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_vector_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct vector_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_vector_arg<T1>::value + is_vector_arg<T2>::value \n        + is_vector_arg<T3>::value + is_vector_arg<T4>::value \n        + is_vector_arg<T5>::value + is_vector_arg<T6>::value \n        + is_vector_arg<T7>::value + is_vector_arg<T8>::value \n        + is_vector_arg<T9>::value + is_vector_arg<T10>::value \n        + is_vector_arg<T11>::value + is_vector_arg<T12>::value \n        + is_vector_arg<T13>::value + is_vector_arg<T14>::value \n        + is_vector_arg<T15>::value + is_vector_arg<T16>::value \n        + is_vector_arg<T17>::value + is_vector_arg<T18>::value \n        + is_vector_arg<T19>::value + is_vector_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector_impl\n{\n    typedef aux::vector_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::vector_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector\n    : aux::vector_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::vector_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct vector_c_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<0>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector0_c<\n              T\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<1>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector1_c<\n              T, T(C0)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<2>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector2_c<\n              T, T(C0), T(C1)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<3>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector3_c<\n              T, T(C0), T(C1), T(C2)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<4>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector4_c<\n              T, T(C0), T(C1), T(C2), T(C3)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<5>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector5_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<6>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector6_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<7>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector7_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<8>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector8_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<9>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector9_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<10>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector10_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<11>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector11_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<12>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector12_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<13>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector13_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<14>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector14_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<15>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector15_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<16>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector16_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<17>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector17_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<18>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector18_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<19>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector19_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<20>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector20_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< long C >\nstruct is_vector_c_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_vector_c_arg<LONG_MAX>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8\n    , long C9, long C10, long C11, long C12, long C13, long C14, long C15\n    , long C16, long C17, long C18, long C19, long C20\n    >\nstruct vector_c_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_vector_c_arg<C1>::value + is_vector_c_arg<C2>::value \n        + is_vector_c_arg<C3>::value + is_vector_c_arg<C4>::value \n        + is_vector_c_arg<C5>::value + is_vector_c_arg<C6>::value \n        + is_vector_c_arg<C7>::value + is_vector_c_arg<C8>::value \n        + is_vector_c_arg<C9>::value + is_vector_c_arg<C10>::value \n        + is_vector_c_arg<C11>::value + is_vector_c_arg<C12>::value \n        + is_vector_c_arg<C13>::value + is_vector_c_arg<C14>::value \n        + is_vector_c_arg<C15>::value + is_vector_c_arg<C16>::value \n        + is_vector_c_arg<C17>::value + is_vector_c_arg<C18>::value \n        + is_vector_c_arg<C19>::value + is_vector_c_arg<C20>::value\n        );\n\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c_impl\n{\n    typedef aux::vector_c_count_args<\n          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        > arg_num_;\n\n    typedef typename aux::vector_c_chooser< arg_num_::value >\n        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c\n    : aux::vector_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type\n{\n    typedef typename aux::vector_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool C_ > struct and_impl\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : false_\n    {\n    };\n};\n\ntemplate<> struct and_impl<true>\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : and_impl<\n              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n            >::template result_< T2,T3,T4,true_ >\n    {\n    };\n\n    template<> struct result_< true_,true_,true_,true_ >\n        : true_\n    {\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        >::template result_< T2,T3,T4,T5 >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply0<int>\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply1< int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply2< int,int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply3< int,int,int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply4< int,int,int,int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply5< int,int,int,int,int,int >\n{\n    typedef int type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n\n    , typename has_apply_ = typename aux::has_apply<F>::type\n\n    >\nstruct apply_wrap0\n\n{\n    typedef typename F::template apply<\n        \n        >::type type;\n\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap0<int>\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1\n\n    >\nstruct apply_wrap1\n\n{\n    typedef typename F::template apply<\n         T1\n        >::type type;\n\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap1< int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n\n    >\nstruct apply_wrap2\n\n{\n    typedef typename F::template apply<\n         T1, T2\n        >::type type;\n\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap2< int,int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n\n    >\nstruct apply_wrap3\n\n{\n    typedef typename F::template apply<\n         T1, T2, T3\n        >::type type;\n\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap3< int,int,int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n\n    >\nstruct apply_wrap4\n\n{\n    typedef typename F::template apply<\n         T1, T2, T3, T4\n        >::type type;\n\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap4< int,int,int,int,int >\n{\n    typedef int type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n\n    >\nstruct apply_wrap5\n\n{\n    typedef typename F::template apply<\n         T1, T2, T3, T4, T5\n        >::type type;\n\n};\n\n/// workaround for ETI bug\ntemplate<>\nstruct apply_wrap5< int,int,int,int,int,int >\n{\n    typedef int type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool >\nstruct resolve_arg_impl\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<>\nstruct resolve_arg_impl<true>\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef typename apply_wrap5<\n              T\n            , U1, U2, U3, U4, U5\n            >::type type;\n    };\n};\n\ntemplate< typename T > struct is_bind_template;\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n    : resolve_arg_impl< is_bind_template<T>::value >\n            ::template result_< T,U1,U2,U3,U4,U5 >\n{\n};\n\ntemplate< int arity_ > struct bind_chooser;\n\naux::no_tag is_bind_helper(...);\ntemplate< typename T > aux::no_tag is_bind_helper(protect<T>*);\n\ntemplate< int N >\naux::yes_tag is_bind_helper(arg<N>*);\n\ntemplate< bool is_ref_  = true >\nstruct is_bind_template_impl\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value  = false);\n    };\n};\n\ntemplate<>\nstruct is_bind_template_impl<false>\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n              sizeof(aux::is_bind_helper(static_cast<T*>(0)))\n                == sizeof(aux::yes_tag)\n            );\n    };\n};\n\ntemplate< typename T > struct is_bind_template\n    : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\n        ::template result_<T>\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F\n    >\naux::yes_tag\nis_bind_helper(bind0<F>*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1\n    >\naux::yes_tag\nis_bind_helper(bind1< F,T1 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\naux::yes_tag\nis_bind_helper(bind2< F,T1,T2 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\naux::yes_tag\nis_bind_helper(bind3< F,T1,T2,T3 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\naux::yes_tag\nis_bind_helper(bind4< F,T1,T2,T3,T4 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\naux::yes_tag\nis_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool >\nstruct resolve_arg_impl\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<>\nstruct resolve_arg_impl<true>\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef typename apply_wrap5<\n              T\n            , U1, U2, U3, U4, U5\n            >::type type;\n    };\n};\n\ntemplate< typename T > struct is_bind_template;\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n    : resolve_arg_impl< is_bind_template<T>::value >\n            ::template result_< T,U1,U2,U3,U4,U5 >\n{\n};\n\ntemplate< typename T >\nstruct replace_unnamed_arg_impl\n{\n    template< typename Arg > struct result_\n    {\n        typedef Arg next;\n        typedef T type;\n    };\n};\n\ntemplate<>\nstruct replace_unnamed_arg_impl< arg< -1 > >\n{\n    template< typename Arg > struct result_\n    {\n        typedef typename next<Arg>::type next;\n        typedef Arg type;\n    };\n};\n\ntemplate< typename T, typename Arg >\nstruct replace_unnamed_arg\n    : replace_unnamed_arg_impl<T>::template result_<Arg>\n{\n};\n\ntemplate< int arity_ > struct bind_chooser;\n\naux::no_tag is_bind_helper(...);\ntemplate< typename T > aux::no_tag is_bind_helper(protect<T>*);\n\ntemplate< int N >\naux::yes_tag is_bind_helper(arg<N>*);\n\ntemplate< bool is_ref_  = true >\nstruct is_bind_template_impl\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value  = false);\n    };\n};\n\ntemplate<>\nstruct is_bind_template_impl<false>\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n              sizeof(aux::is_bind_helper(static_cast<T*>(0)))\n                == sizeof(aux::yes_tag)\n            );\n    };\n};\n\ntemplate< typename T > struct is_bind_template\n    : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\n        ::template result_<T>\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F\n    >\naux::yes_tag\nis_bind_helper(bind0<F>*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1\n    >\naux::yes_tag\nis_bind_helper(bind1< F,T1 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\naux::yes_tag\nis_bind_helper(bind2< F,T1,T2 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\naux::yes_tag\nis_bind_helper(bind3< F,T1,T2,T3 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\naux::yes_tag\nis_bind_helper(bind4< F,T1,T2,T3,T4 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\naux::yes_tag\nis_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct bitand_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitand_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitand_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n    : tag< T,na >\n{\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct bitand_2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n\n    : aux::msvc_eti_base< typename if_<\n\n          is_na<N3>\n        , bitand_2< N1,N2 >\n        , bitand_<\n              bitand_2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n    >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct bitand_2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          bitand_impl<\n              typename bitand_tag<N1>::type\n            , typename bitand_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct bitand_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 & n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::bitand_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct bitor_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitor_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitor_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n    : tag< T,na >\n{\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct bitor_2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n\n    : aux::msvc_eti_base< typename if_<\n\n          is_na<N3>\n        , bitor_2< N1,N2 >\n        , bitor_<\n              bitor_2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n    >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct bitor_2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          bitor_impl<\n              typename bitor_tag<N1>::type\n            , typename bitor_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct bitor_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 | n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::bitor_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct bitxor_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitxor_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitxor_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n    : tag< T,na >\n{\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct bitxor_2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n\n    : aux::msvc_eti_base< typename if_<\n\n          is_na<N3>\n        , bitxor_2< N1,N2 >\n        , bitxor_<\n              bitxor_2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n    >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct bitxor_2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          bitxor_impl<\n              typename bitxor_tag<N1>::type\n            , typename bitxor_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct bitxor_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 ^ n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::bitxor_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct deque_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef vector0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_deque_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_deque_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct deque_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_deque_arg<T1>::value + is_deque_arg<T2>::value \n        + is_deque_arg<T3>::value + is_deque_arg<T4>::value \n        + is_deque_arg<T5>::value + is_deque_arg<T6>::value \n        + is_deque_arg<T7>::value + is_deque_arg<T8>::value \n        + is_deque_arg<T9>::value + is_deque_arg<T10>::value \n        + is_deque_arg<T11>::value + is_deque_arg<T12>::value \n        + is_deque_arg<T13>::value + is_deque_arg<T14>::value \n        + is_deque_arg<T15>::value + is_deque_arg<T16>::value \n        + is_deque_arg<T17>::value + is_deque_arg<T18>::value \n        + is_deque_arg<T19>::value + is_deque_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque_impl\n{\n    typedef aux::deque_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::deque_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque\n    : aux::deque_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::deque_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct divides_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct divides_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct divides_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n    : tag< T,na >\n{\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct divides2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n\n    : aux::msvc_eti_base< typename if_<\n\n          is_na<N3>\n        , divides2< N1,N2 >\n        , divides<\n              divides2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n    >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct divides2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          divides_impl<\n              typename divides_tag<N1>::type\n            , typename divides_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct divides_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 / n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::divides_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct equal_to_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct equal_to_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct equal_to_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n    : tag< T,na >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n    : aux::msvc_eti_base< typename apply_wrap2<\n          equal_to_impl<\n              typename equal_to_tag<N1>::type\n            , typename equal_to_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value ==\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate< int N >\nstruct fold_chunk;\n\ntemplate<> struct fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef state1 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef state2 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef state3 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef state4 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< int N >\nstruct fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef fold_impl<\n              4\n            , First\n            , Last\n            , State\n            , ForwardOp\n            > chunk_;\n\n        typedef fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , typename chunk_::iterator\n            , Last\n            , typename chunk_::state\n            , ForwardOp\n            > res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , fold_null_step< Last,State >\n            , fold_step< First,Last,State,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_step\n{\n    typedef fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        > chunk_;\n\n    typedef typename chunk_::state state;\n    typedef typename chunk_::iterator iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n    : fold_chunk<N>\n        ::template result_< First,Last,State,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n   \n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>, Tag >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>, Tag >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\n/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars\n\ntemplate<\n      typename F, typename Tag1, typename Tag2\n    >\nstruct lambda<\n          lambda< F,Tag1 >\n        , Tag2\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct greater_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n    : tag< T,na >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n    : aux::msvc_eti_base< typename apply_wrap2<\n          greater_impl<\n              typename greater_tag<N1>::type\n            , typename greater_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_equal_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_equal_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n    : tag< T,na >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n    : aux::msvc_eti_base< typename apply_wrap2<\n          greater_equal_impl<\n              typename greater_equal_tag<N1>::type\n            , typename greater_equal_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >=\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C1, bool C2 >\nstruct inherit2_impl\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T1, T2\n    {\n        typedef Derived type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl< false,true >\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T1\n    {\n        typedef T1 type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl< true,false >\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T2\n    {\n        typedef T2 type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl< true,true >\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n    {\n        typedef T1 type_;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : aux::inherit2_impl<\n          is_empty_base<T1>::value\n        , is_empty_base<T2>::value\n        >::template result_< inherit2< T1,T2 >,T1, T2 >\n{\n    typedef typename inherit2::type_ type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1 = empty_base, typename T2 = empty_base\n        , typename T3 = empty_base, typename T4 = empty_base\n        , typename T5 = empty_base\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate< int N >\nstruct iter_fold_chunk;\n\ntemplate<> struct iter_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct iter_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef state1 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct iter_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef state2 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct iter_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef state3 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct iter_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef state4 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< int N >\nstruct iter_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef iter_fold_impl<\n              4\n            , First\n            , Last\n            , State\n            , ForwardOp\n            > chunk_;\n\n        typedef iter_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , typename chunk_::iterator\n            , Last\n            , typename chunk_::state\n            , ForwardOp\n            > res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct iter_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct iter_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , iter_fold_null_step< Last,State >\n            , iter_fold_step< First,Last,State,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_step\n{\n    typedef iter_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        > chunk_;\n\n    typedef typename chunk_::state state;\n    typedef typename chunk_::iterator iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n    : iter_fold_chunk<N>\n        ::template result_< First,Last,State,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct less_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n    : tag< T,na >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n    : aux::msvc_eti_base< typename apply_wrap2<\n          less_impl<\n              typename less_tag<N1>::type\n            , typename less_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N2)::value >\n             BOOST_MPL_AUX_VALUE_WKND(N1)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct less_equal_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_equal_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_equal_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n    : tag< T,na >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n    : aux::msvc_eti_base< typename apply_wrap2<\n          less_equal_impl<\n              typename less_equal_tag<N1>::type\n            , typename less_equal_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <=\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct list_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef list0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_list_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_list_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct list_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_list_arg<T1>::value + is_list_arg<T2>::value \n        + is_list_arg<T3>::value + is_list_arg<T4>::value \n        + is_list_arg<T5>::value + is_list_arg<T6>::value \n        + is_list_arg<T7>::value + is_list_arg<T8>::value \n        + is_list_arg<T9>::value + is_list_arg<T10>::value \n        + is_list_arg<T11>::value + is_list_arg<T12>::value \n        + is_list_arg<T13>::value + is_list_arg<T14>::value \n        + is_list_arg<T15>::value + is_list_arg<T16>::value \n        + is_list_arg<T17>::value + is_list_arg<T18>::value \n        + is_list_arg<T19>::value + is_list_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list_impl\n{\n    typedef aux::list_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::list_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list\n    : aux::list_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::list_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct list_c_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<0>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list0_c<\n              T\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<1>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list1_c<\n              T, C0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<2>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list2_c<\n              T, C0, C1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<3>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list3_c<\n              T, C0, C1, C2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<4>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list4_c<\n              T, C0, C1, C2, C3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<5>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list5_c<\n              T, C0, C1, C2, C3, C4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<6>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list6_c<\n              T, C0, C1, C2, C3, C4, C5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<7>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list7_c<\n              T, C0, C1, C2, C3, C4, C5, C6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<8>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list8_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<9>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list9_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<10>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list10_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<11>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list11_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<12>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list12_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<13>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list13_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<14>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list14_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<15>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list15_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<16>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list16_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<17>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list17_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<18>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list18_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<19>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list19_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<20>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list20_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< long C >\nstruct is_list_c_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_list_c_arg<LONG_MAX>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8\n    , long C9, long C10, long C11, long C12, long C13, long C14, long C15\n    , long C16, long C17, long C18, long C19, long C20\n    >\nstruct list_c_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_list_c_arg<C1>::value + is_list_c_arg<C2>::value \n        + is_list_c_arg<C3>::value + is_list_c_arg<C4>::value \n        + is_list_c_arg<C5>::value + is_list_c_arg<C6>::value \n        + is_list_c_arg<C7>::value + is_list_c_arg<C8>::value \n        + is_list_c_arg<C9>::value + is_list_c_arg<C10>::value \n        + is_list_c_arg<C11>::value + is_list_c_arg<C12>::value \n        + is_list_c_arg<C13>::value + is_list_c_arg<C14>::value \n        + is_list_c_arg<C15>::value + is_list_c_arg<C16>::value \n        + is_list_c_arg<C17>::value + is_list_c_arg<C18>::value \n        + is_list_c_arg<C19>::value + is_list_c_arg<C20>::value\n        );\n\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c_impl\n{\n    typedef aux::list_c_count_args<\n          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        > arg_num_;\n\n    typedef typename aux::list_c_chooser< arg_num_::value >\n        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c\n    : aux::list_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type\n{\n    typedef typename aux::list_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct map_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef map0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_map_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_map_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct map_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_map_arg<T1>::value + is_map_arg<T2>::value \n        + is_map_arg<T3>::value + is_map_arg<T4>::value \n        + is_map_arg<T5>::value + is_map_arg<T6>::value \n        + is_map_arg<T7>::value + is_map_arg<T8>::value \n        + is_map_arg<T9>::value + is_map_arg<T10>::value \n        + is_map_arg<T11>::value + is_map_arg<T12>::value \n        + is_map_arg<T13>::value + is_map_arg<T14>::value \n        + is_map_arg<T15>::value + is_map_arg<T16>::value \n        + is_map_arg<T17>::value + is_map_arg<T18>::value \n        + is_map_arg<T19>::value + is_map_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map_impl\n{\n    typedef aux::map_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::map_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map\n    : aux::map_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::map_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct minus_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct minus_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct minus_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n    : tag< T,na >\n{\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct minus2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n\n    : aux::msvc_eti_base< typename if_<\n\n          is_na<N3>\n        , minus2< N1,N2 >\n        , minus<\n              minus2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n    >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct minus2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          minus_impl<\n              typename minus_tag<N1>::type\n            , typename minus_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct minus_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 - n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::minus_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct modulus_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct modulus_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct modulus_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n    : tag< T,na >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n    : aux::msvc_eti_base< typename apply_wrap2<\n          modulus_impl<\n              typename modulus_tag<N1>::type\n            , typename modulus_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct modulus_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 % n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::modulus_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct not_equal_to_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct not_equal_to_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n    : tag< T,na >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n    : aux::msvc_eti_base< typename apply_wrap2<\n          not_equal_to_impl<\n              typename not_equal_to_tag<N1>::type\n            , typename not_equal_to_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value !=\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool C_ > struct or_impl\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : true_\n    {\n    };\n};\n\ntemplate<> struct or_impl<false>\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : or_impl<\n              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n            >::template result_< T2,T3,T4,false_ >\n    {\n    };\n\n    template<> struct result_< false_,false_,false_,false_ >\n        : false_\n    {\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        >::template result_< T2,T3,T4,T5 >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct plus_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct plus_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct plus_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n    : tag< T,na >\n{\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct plus2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n\n    : aux::msvc_eti_base< typename if_<\n\n          is_na<N3>\n        , plus2< N1,N2 >\n        , plus<\n              plus2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n    >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct plus2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          plus_impl<\n              typename plus_tag<N1>::type\n            , typename plus_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct plus_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 + n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::plus_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\ntemplate< bool > struct quote_impl\n{\n    template< typename T > struct result_\n        : T\n    {\n    };\n};\n\ntemplate<> struct quote_impl<false>\n{\n    template< typename T > struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<\n      template< typename P1 > class F\n    , typename Tag = void_\n    >\nstruct quote1\n{\n    template< typename U1 > struct apply\n\n        : quote_impl< aux::has_type< F<U1> >::value >\n            ::template result_< F<U1> >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename Tag = void_\n    >\nstruct quote2\n{\n    template< typename U1, typename U2 > struct apply\n\n        : quote_impl< aux::has_type< F< U1,U2 > >::value >\n            ::template result_< F< U1,U2 > >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename Tag = void_\n    >\nstruct quote3\n{\n    template< typename U1, typename U2, typename U3 > struct apply\n\n        : quote_impl< aux::has_type< F< U1,U2,U3 > >::value >\n            ::template result_< F< U1,U2,U3 > >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename Tag = void_\n    >\nstruct quote4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        >\n    struct apply\n\n        : quote_impl< aux::has_type< F< U1,U2,U3,U4 > >::value >\n            ::template result_< F< U1,U2,U3,U4 > >\n\n    {\n    };\n};\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename Tag = void_\n    >\nstruct quote5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        , typename U5\n        >\n    struct apply\n\n        : quote_impl< aux::has_type< F< U1,U2,U3,U4,U5 > >::value >\n            ::template result_< F< U1,U2,U3,U4,U5 > >\n\n    {\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate< long N >\nstruct reverse_fold_chunk;\n\ntemplate<> struct reverse_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_fold_null_step< Last,State >\n            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step\n{\n    typedef reverse_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n    : reverse_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk;\n\ntemplate<> struct reverse_iter_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_iter_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_iter_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_iter_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_iter_fold_null_step< Last,State >\n            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step\n{\n    typedef reverse_iter_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n    : reverse_iter_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct set_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef set0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_set_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_set_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct set_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_set_arg<T1>::value + is_set_arg<T2>::value \n        + is_set_arg<T3>::value + is_set_arg<T4>::value \n        + is_set_arg<T5>::value + is_set_arg<T6>::value \n        + is_set_arg<T7>::value + is_set_arg<T8>::value \n        + is_set_arg<T9>::value + is_set_arg<T10>::value \n        + is_set_arg<T11>::value + is_set_arg<T12>::value \n        + is_set_arg<T13>::value + is_set_arg<T14>::value \n        + is_set_arg<T15>::value + is_set_arg<T16>::value \n        + is_set_arg<T17>::value + is_set_arg<T18>::value \n        + is_set_arg<T19>::value + is_set_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set_impl\n{\n    typedef aux::set_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::set_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set\n    : aux::set_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::set_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct set_c_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<0>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set0_c<\n              T\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<1>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set1_c<\n              T, C0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<2>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set2_c<\n              T, C0, C1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<3>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set3_c<\n              T, C0, C1, C2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<4>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set4_c<\n              T, C0, C1, C2, C3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<5>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set5_c<\n              T, C0, C1, C2, C3, C4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<6>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set6_c<\n              T, C0, C1, C2, C3, C4, C5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<7>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set7_c<\n              T, C0, C1, C2, C3, C4, C5, C6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<8>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set8_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<9>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set9_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<10>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set10_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<11>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set11_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<12>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set12_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<13>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set13_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<14>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set14_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<15>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set15_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<16>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set16_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<17>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set17_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<18>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set18_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<19>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set19_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<20>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set20_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< long C >\nstruct is_set_c_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_set_c_arg<LONG_MAX>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8\n    , long C9, long C10, long C11, long C12, long C13, long C14, long C15\n    , long C16, long C17, long C18, long C19, long C20\n    >\nstruct set_c_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_set_c_arg<C1>::value + is_set_c_arg<C2>::value \n        + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value \n        + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value \n        + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value \n        + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value \n        + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value \n        + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value \n        + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value \n        + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value \n        + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value\n        );\n\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c_impl\n{\n    typedef aux::set_c_count_args<\n          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        > arg_num_;\n\n    typedef typename aux::set_c_chooser< arg_num_::value >\n        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c\n    : aux::set_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type\n{\n    typedef typename aux::set_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct shift_left_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_left_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_left_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n    : tag< T,na >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n    : aux::msvc_eti_base< typename apply_wrap2<\n          shift_left_impl<\n              typename shift_left_tag<N1>::type\n            , typename shift_left_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, typename Shift, T n, Shift s >\nstruct shift_left_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n << s));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n        : aux::shift_left_wknd<\n              typename N::value_type\n            , typename S::value_type\n            , N::value\n            , S::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct shift_right_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_right_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_right_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n    : tag< T,na >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n    : aux::msvc_eti_base< typename apply_wrap2<\n          shift_right_impl<\n              typename shift_right_tag<N1>::type\n            , typename shift_right_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, typename Shift, T n, Shift s >\nstruct shift_right_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n >> s));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n        : aux::shift_right_wknd<\n              typename N::value_type\n            , typename S::value_type\n            , N::value\n            , S::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< bool >\nstruct template_arity_impl\n{\n    template< typename F > struct result_\n        : mpl::int_< -1 >\n    {\n    };\n};\n\ntemplate<>\nstruct template_arity_impl<true>\n{\n    template< typename F > struct result_\n        : F::arity\n    {\n    };\n};\n\ntemplate< typename F >\nstruct template_arity\n    : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >\n        ::template result_<F>\n{\n};\n\ntemplate<>\nstruct template_arity<int>\n    : mpl::int_< -1 >\n{\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\n    >\nstruct times_impl\n    : if_c<\n          ( tag1_ > tag2_ )\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct times_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct times_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n    : tag< T,na >\n{\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct times2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n\n    : aux::msvc_eti_base< typename if_<\n\n          is_na<N3>\n        , times2< N1,N2 >\n        , times<\n              times2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n    >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct times2\n    : aux::msvc_eti_base< typename apply_wrap2<\n          times_impl<\n              typename times_tag<N1>::type\n            , typename times_tag<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct times_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 * n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::times_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl\n{\n    template< typename F, typename Args > struct apply;\n};\n\ntemplate<> struct unpack_args_impl<0>\n{\n    template< typename F, typename Args > struct apply\n        : apply0<\n              F\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<1>\n{\n    template< typename F, typename Args > struct apply\n        : apply1<\n              F\n            , typename at_c< Args,0 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<2>\n{\n    template< typename F, typename Args > struct apply\n        : apply2<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<3>\n{\n    template< typename F, typename Args > struct apply\n        : apply3<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            , typename at_c< Args,2 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<4>\n{\n    template< typename F, typename Args > struct apply\n        : apply4<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<5>\n{\n    template< typename F, typename Args > struct apply\n        : apply5<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n            , typename at_c< Args,4 >::type\n            >\n    {\n    };\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n\n        : aux::unpack_args_impl< size<Args>::value >\n            ::template apply< F,Args >\n\n    {\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct vector_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef vector0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_vector_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_vector_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct vector_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_vector_arg<T1>::value + is_vector_arg<T2>::value \n        + is_vector_arg<T3>::value + is_vector_arg<T4>::value \n        + is_vector_arg<T5>::value + is_vector_arg<T6>::value \n        + is_vector_arg<T7>::value + is_vector_arg<T8>::value \n        + is_vector_arg<T9>::value + is_vector_arg<T10>::value \n        + is_vector_arg<T11>::value + is_vector_arg<T12>::value \n        + is_vector_arg<T13>::value + is_vector_arg<T14>::value \n        + is_vector_arg<T15>::value + is_vector_arg<T16>::value \n        + is_vector_arg<T17>::value + is_vector_arg<T18>::value \n        + is_vector_arg<T19>::value + is_vector_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector_impl\n{\n    typedef aux::vector_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::vector_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector\n    : aux::vector_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::vector_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct vector_c_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<0>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector0_c<\n              T\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<1>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector1_c<\n              T, T(C0)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<2>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector2_c<\n              T, T(C0), T(C1)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<3>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector3_c<\n              T, T(C0), T(C1), T(C2)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<4>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector4_c<\n              T, T(C0), T(C1), T(C2), T(C3)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<5>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector5_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<6>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector6_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<7>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector7_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<8>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector8_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<9>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector9_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<10>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector10_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<11>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector11_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<12>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector12_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<13>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector13_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<14>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector14_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<15>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector15_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<16>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector16_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<17>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector17_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<18>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector18_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<19>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector19_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<20>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector20_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< long C >\nstruct is_vector_c_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_vector_c_arg<LONG_MAX>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8\n    , long C9, long C10, long C11, long C12, long C13, long C14, long C15\n    , long C16, long C17, long C18, long C19, long C20\n    >\nstruct vector_c_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_vector_c_arg<C1>::value + is_vector_c_arg<C2>::value \n        + is_vector_c_arg<C3>::value + is_vector_c_arg<C4>::value \n        + is_vector_c_arg<C5>::value + is_vector_c_arg<C6>::value \n        + is_vector_c_arg<C7>::value + is_vector_c_arg<C8>::value \n        + is_vector_c_arg<C9>::value + is_vector_c_arg<C10>::value \n        + is_vector_c_arg<C11>::value + is_vector_c_arg<C12>::value \n        + is_vector_c_arg<C13>::value + is_vector_c_arg<C14>::value \n        + is_vector_c_arg<C15>::value + is_vector_c_arg<C16>::value \n        + is_vector_c_arg<C17>::value + is_vector_c_arg<C18>::value \n        + is_vector_c_arg<C19>::value + is_vector_c_arg<C20>::value\n        );\n\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c_impl\n{\n    typedef aux::vector_c_count_args<\n          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        > arg_num_;\n\n    typedef typename aux::vector_c_chooser< arg_num_::value >\n        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c\n    : aux::vector_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type\n{\n    typedef typename aux::vector_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl\n    : false_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl< true,T1,T2,T3,T4 >\n    : and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , true_\n        >\n{\n};\n\ntemplate<>\nstruct and_impl<\n          true\n        , true_, true_, true_, true_\n        >\n    : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\ntemplate<\n      typename F\n    >\nstruct apply< F,na,na,na,na,na >\n    : apply0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply< F,T1,na,na,na,na >\n    : apply1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply< F,T1,T2,na,na,na >\n    : apply2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply< F,T1,T2,T3,na,na >\n    : apply3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply< F,T1,T2,T3,T4,na >\n    : apply4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply\n    : apply5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply;\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      int N, typename F\n    >\nstruct apply_wrap_impl0;\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          0\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n/// since the defaults are \"lost\", we have to pass *something* even for nullary\n/// metafunction classes\n        na\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          1\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          2\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          3\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          4\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap_impl0<\n          5\n        , F\n       \n        >\n{\n    typedef typename F::template apply<\n         \n        na, na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F\n    >\nstruct apply_wrap0\n    : apply_wrap_impl0<\n          ::boost::mpl::aux::arity< F,0 >::value\n        , F\n       \n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1\n    >\nstruct apply_wrap_impl1;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          1\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          2\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          3\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          4\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap_impl1<\n          5\n        , F\n        , T1\n        >\n{\n    typedef typename F::template apply<\n          T1\n        , na, na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply_wrap1\n    : apply_wrap_impl1<\n          ::boost::mpl::aux::arity< F,1 >::value\n        , F\n        , T1\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          2\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          3\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          4\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap_impl2<\n          5\n        , F\n        , T1, T2\n        >\n{\n    typedef typename F::template apply<\n          T1, T2\n\n        , na, na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply_wrap2\n    : apply_wrap_impl2<\n          ::boost::mpl::aux::arity< F,2 >::value\n        , F\n        , T1, T2\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          3\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          4\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap_impl3<\n          5\n        , F\n        , T1, T2, T3\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3\n\n        , na, na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply_wrap3\n    : apply_wrap_impl3<\n          ::boost::mpl::aux::arity< F,3 >::value\n        , F\n        , T1, T2, T3\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4<\n          4\n        , F\n        , T1, T2, T3, T4\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap_impl4<\n          5\n        , F\n        , T1, T2, T3, T4\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4\n\n        , na\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply_wrap4\n    : apply_wrap_impl4<\n          ::boost::mpl::aux::arity< F,4 >::value\n        , F\n        , T1, T2, T3, T4\n        >::type\n{\n};\n\ntemplate<\n      int N, typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap_impl5;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap_impl5<\n          5\n        , F\n        , T1, T2, T3, T4, T5\n        >\n{\n    typedef typename F::template apply<\n          T1, T2, T3, T4, T5\n\n        > type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply_wrap5\n    : apply_wrap_impl5<\n          ::boost::mpl::aux::arity< F,5 >::value\n        , F\n        , T1, T2, T3, T4, T5\n        >::type\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n/// if_/eval_if specializations\ntemplate< template< typename T1, typename T2, typename T3 > class F, typename Tag >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct if_;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< if_,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef typename if_<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\ntemplate<\n      template< typename T1, typename T2, typename T3 > class F, typename Tag\n    >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct eval_if;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< eval_if,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef typename eval_if<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg< -1 >, Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n/// if_/eval_if specializations\ntemplate< template< typename T1, typename T2, typename T3 > class F, typename Tag >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct if_;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< if_,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef typename if_<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\ntemplate<\n      template< typename T1, typename T2, typename T3 > class F, typename Tag\n    >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct eval_if;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< eval_if,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef typename eval_if<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct bind;\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitand_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitand_< N1,N2,N3,N4,na >\n\n    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitand_< N1,N2,N3,na,na >\n\n    : bitand_< bitand_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitand_< N1,N2,na,na,na >\n    : bitand_impl<\n          typename bitand_tag<N1>::type\n        , typename bitand_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitor_< N1,N2,N3,N4,na >\n\n    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitor_< N1,N2,N3,na,na >\n\n    : bitor_< bitor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitor_< N1,N2,na,na,na >\n    : bitor_impl<\n          typename bitor_tag<N1>::type\n        , typename bitor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitxor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitxor_< N1,N2,N3,N4,na >\n\n    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitxor_< N1,N2,N3,na,na >\n\n    : bitxor_< bitxor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitxor_< N1,N2,na,na,na >\n    : bitxor_impl<\n          typename bitxor_tag<N1>::type\n        , typename bitxor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque;\n\ntemplate<\n     \n    >\nstruct deque<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct deque<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct deque<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct deque<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct deque<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct divides_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct divides< N1,N2,N3,N4,na >\n\n    : divides< divides< divides< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct divides< N1,N2,N3,na,na >\n\n    : divides< divides< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct divides< N1,N2,na,na,na >\n    : divides_impl<\n          typename divides_tag<N1>::type\n        , typename divides_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n{\n    typedef fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,First,Last,State,ForwardOp >\n    : fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n   \n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>, Tag >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>, Tag >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\n/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars\n\ntemplate<\n      typename F, typename Tag1, typename Tag2\n    >\nstruct lambda<\n          lambda< F,Tag1 >\n        , Tag2\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : T1, T2\n{\n    typedef inherit2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\ntemplate< typename T1 >\nstruct inherit2< T1,empty_base >\n{\n    typedef T1 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))\n};\n\ntemplate< typename T2 >\nstruct inherit2< empty_base,T2 >\n{\n    typedef T2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))\n};\n\ntemplate<>\nstruct inherit2< empty_base,empty_base >\n{\n    typedef empty_base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1 = empty_base, typename T2 = empty_base\n        , typename T3 = empty_base, typename T4 = empty_base\n        , typename T5 = empty_base\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n{\n    typedef iter_fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,First,Last,State,ForwardOp >\n    : iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list;\n\ntemplate<\n     \n    >\nstruct list<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list0<  >\n{\n    typedef list0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct list<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list1<T0>\n{\n    typedef typename list1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list2< T0,T1 >\n{\n    typedef typename list2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list3< T0,T1,T2 >\n{\n    typedef typename list3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list4< T0,T1,T2,T3 >\n{\n    typedef typename list4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list5< T0,T1,T2,T3,T4 >\n{\n    typedef typename list5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : list15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : list16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : list17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : list18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : list19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list\n    : list20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c;\n\ntemplate<\n      typename T\n    >\nstruct list_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list0_c<T>\n{\n    typedef typename list0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct list_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list1_c< T,C0 >\n{\n    typedef typename list1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct list_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list2_c< T,C0,C1 >\n{\n    typedef typename list2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct list_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list3_c< T,C0,C1,C2 >\n{\n    typedef typename list3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : list18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : list19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c\n    : list20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map;\n\ntemplate<\n     \n    >\nstruct map<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map0<  >\n{\n    typedef map0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct map<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map1<T0>\n{\n    typedef typename map1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct map<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map2< T0,T1 >\n{\n    typedef typename map2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct map<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map3< T0,T1,T2 >\n{\n    typedef typename map3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct map<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map4< T0,T1,T2,T3 >\n{\n    typedef typename map4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct map<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map5< T0,T1,T2,T3,T4 >\n{\n    typedef typename map5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : map15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : map16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : map17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : map18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : map19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map\n    : map20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct minus< N1,N2,N3,N4,na >\n\n    : minus< minus< minus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct minus< N1,N2,N3,na,na >\n\n    : minus< minus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct minus< N1,N2,na,na,na >\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct modulus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n\n    : modulus_impl<\n          typename modulus_tag<N1>::type\n        , typename modulus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl\n    : true_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl< false,T1,T2,T3,T4 >\n    : or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , false_\n        >\n{\n};\n\ntemplate<>\nstruct or_impl<\n          false\n        , false_, false_, false_, false_\n        >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct plus< N1,N2,N3,N4,na >\n\n    : plus< plus< plus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct plus< N1,N2,N3,na,na >\n\n    : plus< plus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct plus< N1,N2,na,na,na >\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T, bool has_type_ >\nstruct quote_impl\n    : T\n{\n};\n\ntemplate< typename T >\nstruct quote_impl< T,false >\n{\n    typedef T type;\n};\n\ntemplate<\n      template< typename P1 > class F\n    , typename Tag = void_\n    >\nstruct quote1\n{\n    template< typename U1 > struct apply\n\n        : quote_impl<\n              F<U1>\n            , aux::has_type< F<U1> >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename Tag = void_\n    >\nstruct quote2\n{\n    template< typename U1, typename U2 > struct apply\n\n        : quote_impl<\n              F< U1,U2 >\n            , aux::has_type< F< U1,U2 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename Tag = void_\n    >\nstruct quote3\n{\n    template< typename U1, typename U2, typename U3 > struct apply\n\n        : quote_impl<\n              F< U1,U2,U3 >\n            , aux::has_type< F< U1,U2,U3 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename Tag = void_\n    >\nstruct quote4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4 >\n            , aux::has_type< F< U1,U2,U3,U4 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename Tag = void_\n    >\nstruct quote5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        , typename U5\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4,U5 >\n            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value\n            >\n\n    {\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set;\n\ntemplate<\n     \n    >\nstruct set<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set0<  >\n{\n    typedef set0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct set<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set1<T0>\n{\n    typedef typename set1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct set<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set2< T0,T1 >\n{\n    typedef typename set2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct set<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set3< T0,T1,T2 >\n{\n    typedef typename set3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct set<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set4< T0,T1,T2,T3 >\n{\n    typedef typename set4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct set<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set5< T0,T1,T2,T3,T4 >\n{\n    typedef typename set5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : set15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : set16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : set17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : set18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : set19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set\n    : set20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c;\n\ntemplate<\n      typename T\n    >\nstruct set_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set0_c<T>\n{\n    typedef typename set0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct set_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set1_c< T,C0 >\n{\n    typedef typename set1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct set_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set2_c< T,C0,C1 >\n{\n    typedef typename set2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct set_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set3_c< T,C0,C1,C2 >\n{\n    typedef typename set3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : set18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : set19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c\n    : set20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_left_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n\n    : shift_left_impl<\n          typename shift_left_tag<N1>::type\n        , typename shift_left_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  << BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_right_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n\n    : shift_right_impl<\n          typename shift_right_tag<N1>::type\n        , typename shift_right_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n    : times< times< times< times< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct times< N1,N2,N3,N4,na >\n\n    : times< times< times< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct times< N1,N2,N3,na,na >\n\n    : times< times< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct times< N1,N2,na,na,na >\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< int size, typename F, typename Args >\nstruct unpack_args_impl;\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 0,F,Args >\n    : apply0<\n          F\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 1,F,Args >\n    : apply1<\n          F\n        , typename at_c< Args,0 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 2,F,Args >\n    : apply2<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 3,F,Args >\n    : apply3<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 4,F,Args >\n    : apply4<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 5,F,Args >\n    : apply5<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        , typename at_c< Args,4 >::type\n        >\n{\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n\n        : aux::unpack_args_impl< size<Args>::value,F, Args >\n\n    {\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector;\n\ntemplate<\n     \n    >\nstruct vector<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c;\n\ntemplate<\n      typename T\n    >\nstruct vector_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector0_c<T>\n{\n    typedef typename vector0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct vector_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector1_c< T, T(C0) >\n{\n    typedef typename vector1_c< T, T(C0) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct vector_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector2_c< T, T(C0), T(C1) >\n{\n    typedef typename vector2_c< T, T(C0), T(C1) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct vector_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector3_c< T, T(C0), T(C1), T(C2) >\n{\n    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >\n{\n    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >\n{\n    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >\n{\n    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >\n{\n    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >\n{\n    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >\n{\n    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >\n{\n    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >\n{\n    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >\n{\n    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >\n{\n    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >\n{\n    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >\n{\n    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >\n{\n    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >\n{\n    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >\n{\n    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >\n{\n    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c\n    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >\n{\n    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool C_ > struct and_impl\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : false_\n    {\n    };\n};\n\ntemplate<> struct and_impl<true>\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : and_impl<\n              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n            >::template result_< T2,T3,T4,true_ >\n    {\n    };\n};\n\ntemplate<>\nstruct and_impl<true>\n    ::result_< true_,true_,true_,true_ >\n        : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        >::template result_< T2,T3,T4,T5 >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\nnamespace aux {\n\ntemplate<>\nstruct apply_chooser<0>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef apply0<\n              F\n            > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\nnamespace aux {\n\ntemplate<>\nstruct apply_chooser<1>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef apply1<\n              F, T1\n            > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\nnamespace aux {\n\ntemplate<>\nstruct apply_chooser<2>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef apply2<\n              F, T1, T2\n            > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\nnamespace aux {\n\ntemplate<>\nstruct apply_chooser<3>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef apply3<\n              F, T1, T2, T3\n            > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\nnamespace aux {\n\ntemplate<>\nstruct apply_chooser<4>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef apply4<\n              F, T1, T2, T3, T4\n            > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\nnamespace aux {\n\ntemplate<>\nstruct apply_chooser<5>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef apply5<\n              F, T1, T2, T3, T4, T5\n            > type;\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_apply_arg\n{\n    static bool const value  = true;\n};\n\ntemplate<>\nstruct is_apply_arg<na>\n{\n    static bool const value  = false;\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    >\nstruct apply_count_args\n{\n    static int const value  = is_apply_arg<T1>::value + is_apply_arg<T2>::value + is_apply_arg<T3>::value + is_apply_arg<T4>::value + is_apply_arg<T5>::value;\n\n};\n\n}\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply\n    : aux::apply_chooser<\n          aux::apply_count_args< T1,T2,T3,T4,T5 >::value\n        >::template result_< F,T1,T2,T3,T4,T5 >::type\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< BOOST_AUX_NTTP_DECL(int, arity_) > struct apply_chooser;\n}\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n\n    , typename has_apply_ = typename aux::has_apply<F>::type\n\n    >\nstruct apply_wrap0\n\n    : F::template apply<  >\n{\n};\n\ntemplate<\n      typename F, typename T1\n\n    >\nstruct apply_wrap1\n\n    : F::template apply<T1>\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n\n    >\nstruct apply_wrap2\n\n    : F::template apply< T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n\n    >\nstruct apply_wrap3\n\n    : F::template apply< T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n\n    >\nstruct apply_wrap4\n\n    : F::template apply< T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n\n    >\nstruct apply_wrap5\n\n    : F::template apply< T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool >\nstruct resolve_arg_impl\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<>\nstruct resolve_arg_impl<true>\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef typename apply_wrap5<\n              T\n            , U1, U2, U3, U4, U5\n            >::type type;\n    };\n};\n\ntemplate< typename T > struct is_bind_template;\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n    : resolve_arg_impl< is_bind_template<T>::value >\n            ::template result_< T,U1,U2,U3,U4,U5 >\n{\n};\n\ntemplate< int arity_ > struct bind_chooser;\n\naux::no_tag is_bind_helper(...);\ntemplate< typename T > aux::no_tag is_bind_helper(protect<T>*);\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\naux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);\n\ntemplate< int N >\naux::yes_tag is_bind_helper(arg<N>*);\n\ntemplate< bool is_ref_  = true >\nstruct is_bind_template_impl\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value  = false);\n    };\n};\n\ntemplate<>\nstruct is_bind_template_impl<false>\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n              sizeof(aux::is_bind_helper(static_cast<T*>(0)))\n                == sizeof(aux::yes_tag)\n            );\n    };\n};\n\ntemplate< typename T > struct is_bind_template\n    : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\n        ::template result_<T>\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F\n    >\naux::yes_tag\nis_bind_helper(bind0<F>*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<0>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind0<F> type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1\n    >\naux::yes_tag\nis_bind_helper(bind1< F,T1 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<1>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind1< F,T1 > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\naux::yes_tag\nis_bind_helper(bind2< F,T1,T2 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<2>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind2< F,T1,T2 > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\naux::yes_tag\nis_bind_helper(bind3< F,T1,T2,T3 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<3>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind3< F,T1,T2,T3 > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\naux::yes_tag\nis_bind_helper(bind4< F,T1,T2,T3,T4 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<4>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind4< F,T1,T2,T3,T4 > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\naux::yes_tag\nis_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<5>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind5< F,T1,T2,T3,T4,T5 > type;\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_bind_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_bind_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    >\nstruct bind_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_bind_arg<T1>::value + is_bind_arg<T2>::value \n        + is_bind_arg<T3>::value + is_bind_arg<T4>::value \n        + is_bind_arg<T5>::value\n        );\n\n};\n\n}\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : aux::bind_chooser<\n          aux::bind_count_args< T1,T2,T3,T4,T5 >::value\n        >::template result_< F,T1,T2,T3,T4,T5 >::type\n{\n};\n\nBOOST_MPL_AUX_ARITY_SPEC(\n      6\n    , bind\n    )\n\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(\n      6\n    , bind\n    )\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool >\nstruct resolve_arg_impl\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<>\nstruct resolve_arg_impl<true>\n{\n    template<\n          typename T, typename U1, typename U2, typename U3\n        , typename U4, typename U5\n        >\n    struct result_\n    {\n        typedef typename apply_wrap5<\n              T\n            , U1, U2, U3, U4, U5\n            >::type type;\n    };\n};\n\ntemplate< typename T > struct is_bind_template;\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n    : resolve_arg_impl< is_bind_template<T>::value >\n            ::template result_< T,U1,U2,U3,U4,U5 >\n{\n};\n\ntemplate< typename T >\nstruct replace_unnamed_arg_impl\n{\n    template< typename Arg > struct result_\n    {\n        typedef Arg next;\n        typedef T type;\n    };\n};\n\ntemplate<>\nstruct replace_unnamed_arg_impl< arg< -1 > >\n{\n    template< typename Arg > struct result_\n    {\n        typedef typename next<Arg>::type next;\n        typedef Arg type;\n    };\n};\n\ntemplate< typename T, typename Arg >\nstruct replace_unnamed_arg\n    : replace_unnamed_arg_impl<T>::template result_<Arg>\n{\n};\n\ntemplate< int arity_ > struct bind_chooser;\n\naux::no_tag is_bind_helper(...);\ntemplate< typename T > aux::no_tag is_bind_helper(protect<T>*);\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\naux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);\n\ntemplate< int N >\naux::yes_tag is_bind_helper(arg<N>*);\n\ntemplate< bool is_ref_  = true >\nstruct is_bind_template_impl\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value  = false);\n    };\n};\n\ntemplate<>\nstruct is_bind_template_impl<false>\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n              sizeof(aux::is_bind_helper(static_cast<T*>(0)))\n                == sizeof(aux::yes_tag)\n            );\n    };\n};\n\ntemplate< typename T > struct is_bind_template\n    : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\n        ::template result_<T>\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F\n    >\naux::yes_tag\nis_bind_helper(bind0<F>*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<0>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind0<F> type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1\n    >\naux::yes_tag\nis_bind_helper(bind1< F,T1 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<1>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind1< F,T1 > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\naux::yes_tag\nis_bind_helper(bind2< F,T1,T2 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<2>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind2< F,T1,T2 > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\naux::yes_tag\nis_bind_helper(bind3< F,T1,T2,T3 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<3>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind3< F,T1,T2,T3 > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\naux::yes_tag\nis_bind_helper(bind4< F,T1,T2,T3,T4 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<4>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind4< F,T1,T2,T3,T4 > type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\naux::yes_tag\nis_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<5>\n{\n    template<\n          typename F, typename T1, typename T2, typename T3, typename T4\n        , typename T5\n        >\n    struct result_\n    {\n        typedef bind5< F,T1,T2,T3,T4,T5 > type;\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_bind_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_bind_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    >\nstruct bind_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_bind_arg<T1>::value + is_bind_arg<T2>::value \n        + is_bind_arg<T3>::value + is_bind_arg<T4>::value \n        + is_bind_arg<T5>::value\n        );\n\n};\n\n}\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : aux::bind_chooser<\n          aux::bind_count_args< T1,T2,T3,T4,T5 >::value\n        >::template result_< F,T1,T2,T3,T4,T5 >::type\n{\n};\n\nBOOST_MPL_AUX_ARITY_SPEC(\n      6\n    , bind\n    )\n\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(\n      6\n    , bind\n    )\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct bind;\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitand_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitand_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitand_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct bitand_2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n\n    : if_<\n\n          is_na<N3>\n        , bitand_2< N1,N2 >\n        , bitand_<\n              bitand_2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct bitand_2\n    : bitand_impl<\n          typename bitand_tag<N1>::type\n        , typename bitand_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitor_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitor_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct bitor_2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n\n    : if_<\n\n          is_na<N3>\n        , bitor_2< N1,N2 >\n        , bitor_<\n              bitor_2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct bitor_2\n    : bitor_impl<\n          typename bitor_tag<N1>::type\n        , typename bitor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitxor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitxor_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct bitxor_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct bitxor_2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n\n    : if_<\n\n          is_na<N3>\n        , bitxor_2< N1,N2 >\n        , bitxor_<\n              bitxor_2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct bitxor_2\n    : bitxor_impl<\n          typename bitxor_tag<N1>::type\n        , typename bitxor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct deque_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef vector0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct deque_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_deque_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_deque_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct deque_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_deque_arg<T1>::value + is_deque_arg<T2>::value \n        + is_deque_arg<T3>::value + is_deque_arg<T4>::value \n        + is_deque_arg<T5>::value + is_deque_arg<T6>::value \n        + is_deque_arg<T7>::value + is_deque_arg<T8>::value \n        + is_deque_arg<T9>::value + is_deque_arg<T10>::value \n        + is_deque_arg<T11>::value + is_deque_arg<T12>::value \n        + is_deque_arg<T13>::value + is_deque_arg<T14>::value \n        + is_deque_arg<T15>::value + is_deque_arg<T16>::value \n        + is_deque_arg<T17>::value + is_deque_arg<T18>::value \n        + is_deque_arg<T19>::value + is_deque_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque_impl\n{\n    typedef aux::deque_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::deque_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque\n    : aux::deque_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::deque_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct divides_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct divides_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct divides_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct divides2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n\n    : if_<\n\n          is_na<N3>\n        , divides2< N1,N2 >\n        , divides<\n              divides2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct divides2\n    : divides_impl<\n          typename divides_tag<N1>::type\n        , typename divides_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct equal_to_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct equal_to_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate< int N >\nstruct fold_chunk;\n\ntemplate<> struct fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef state1 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef state2 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef state3 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef state4 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< int N >\nstruct fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef fold_impl<\n              4\n            , First\n            , Last\n            , State\n            , ForwardOp\n            > chunk_;\n\n        typedef fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , typename chunk_::iterator\n            , Last\n            , typename chunk_::state\n            , ForwardOp\n            > res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , fold_null_step< Last,State >\n            , fold_step< First,Last,State,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_step\n{\n    typedef fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        > chunk_;\n\n    typedef typename chunk_::state state;\n    typedef typename chunk_::iterator iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n    : fold_chunk<N>\n        ::template result_< First,Last,State,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n   \n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>, Tag >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>, Tag >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\n/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars\n\ntemplate<\n      typename F, typename Tag1, typename Tag2\n    >\nstruct lambda<\n          lambda< F,Tag1 >\n        , Tag2\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_equal_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct greater_equal_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C1, bool C2 >\nstruct inherit2_impl\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T1, T2\n    {\n        typedef Derived type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl< false,true >\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T1\n    {\n        typedef T1 type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl< true,false >\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T2\n    {\n        typedef T2 type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl< true,true >\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n    {\n        typedef T1 type_;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : aux::inherit2_impl<\n          is_empty_base<T1>::value\n        , is_empty_base<T2>::value\n        >::template result_< inherit2< T1,T2 >,T1, T2 >\n{\n    typedef typename inherit2::type_ type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1 = empty_base, typename T2 = empty_base\n        , typename T3 = empty_base, typename T4 = empty_base\n        , typename T5 = empty_base\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate< int N >\nstruct iter_fold_chunk;\n\ntemplate<> struct iter_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct iter_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef state1 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct iter_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef state2 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct iter_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef state3 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct iter_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State state0;\n        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef state4 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< int N >\nstruct iter_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef iter_fold_impl<\n              4\n            , First\n            , Last\n            , State\n            , ForwardOp\n            > chunk_;\n\n        typedef iter_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , typename chunk_::iterator\n            , Last\n            , typename chunk_::state\n            , ForwardOp\n            > res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct iter_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct iter_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , iter_fold_null_step< Last,State >\n            , iter_fold_step< First,Last,State,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_step\n{\n    typedef iter_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        > chunk_;\n\n    typedef typename chunk_::state state;\n    typedef typename chunk_::iterator iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n    : iter_fold_chunk<N>\n        ::template result_< First,Last,State,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_equal_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct less_equal_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct list_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef list0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename list20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_list_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_list_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct list_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_list_arg<T1>::value + is_list_arg<T2>::value \n        + is_list_arg<T3>::value + is_list_arg<T4>::value \n        + is_list_arg<T5>::value + is_list_arg<T6>::value \n        + is_list_arg<T7>::value + is_list_arg<T8>::value \n        + is_list_arg<T9>::value + is_list_arg<T10>::value \n        + is_list_arg<T11>::value + is_list_arg<T12>::value \n        + is_list_arg<T13>::value + is_list_arg<T14>::value \n        + is_list_arg<T15>::value + is_list_arg<T16>::value \n        + is_list_arg<T17>::value + is_list_arg<T18>::value \n        + is_list_arg<T19>::value + is_list_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list_impl\n{\n    typedef aux::list_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::list_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list\n    : aux::list_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::list_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct list_c_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<0>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list0_c<\n              T\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<1>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list1_c<\n              T, C0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<2>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list2_c<\n              T, C0, C1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<3>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list3_c<\n              T, C0, C1, C2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<4>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list4_c<\n              T, C0, C1, C2, C3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<5>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list5_c<\n              T, C0, C1, C2, C3, C4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<6>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list6_c<\n              T, C0, C1, C2, C3, C4, C5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<7>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list7_c<\n              T, C0, C1, C2, C3, C4, C5, C6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<8>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list8_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<9>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list9_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<10>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list10_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<11>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list11_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<12>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list12_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<13>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list13_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<14>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list14_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<15>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list15_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<16>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list16_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<17>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list17_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<18>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list18_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<19>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list19_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct list_c_chooser<20>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename list20_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< long C >\nstruct is_list_c_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_list_c_arg<LONG_MAX>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8\n    , long C9, long C10, long C11, long C12, long C13, long C14, long C15\n    , long C16, long C17, long C18, long C19, long C20\n    >\nstruct list_c_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_list_c_arg<C1>::value + is_list_c_arg<C2>::value \n        + is_list_c_arg<C3>::value + is_list_c_arg<C4>::value \n        + is_list_c_arg<C5>::value + is_list_c_arg<C6>::value \n        + is_list_c_arg<C7>::value + is_list_c_arg<C8>::value \n        + is_list_c_arg<C9>::value + is_list_c_arg<C10>::value \n        + is_list_c_arg<C11>::value + is_list_c_arg<C12>::value \n        + is_list_c_arg<C13>::value + is_list_c_arg<C14>::value \n        + is_list_c_arg<C15>::value + is_list_c_arg<C16>::value \n        + is_list_c_arg<C17>::value + is_list_c_arg<C18>::value \n        + is_list_c_arg<C19>::value + is_list_c_arg<C20>::value\n        );\n\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c_impl\n{\n    typedef aux::list_c_count_args<\n          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        > arg_num_;\n\n    typedef typename aux::list_c_chooser< arg_num_::value >\n        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c\n    : aux::list_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type\n{\n    typedef typename aux::list_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct map_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef map0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct map_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename map20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_map_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_map_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct map_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_map_arg<T1>::value + is_map_arg<T2>::value \n        + is_map_arg<T3>::value + is_map_arg<T4>::value \n        + is_map_arg<T5>::value + is_map_arg<T6>::value \n        + is_map_arg<T7>::value + is_map_arg<T8>::value \n        + is_map_arg<T9>::value + is_map_arg<T10>::value \n        + is_map_arg<T11>::value + is_map_arg<T12>::value \n        + is_map_arg<T13>::value + is_map_arg<T14>::value \n        + is_map_arg<T15>::value + is_map_arg<T16>::value \n        + is_map_arg<T17>::value + is_map_arg<T18>::value \n        + is_map_arg<T19>::value + is_map_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map_impl\n{\n    typedef aux::map_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::map_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map\n    : aux::map_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::map_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct minus_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct minus_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct minus2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n\n    : if_<\n\n          is_na<N3>\n        , minus2< N1,N2 >\n        , minus<\n              minus2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct minus2\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct modulus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct modulus_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct modulus_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n\n    : modulus_impl<\n          typename modulus_tag<N1>::type\n        , typename modulus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct not_equal_to_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct not_equal_to_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< bool C_ > struct or_impl\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : true_\n    {\n    };\n};\n\ntemplate<> struct or_impl<false>\n{\n    template<\n          typename T1, typename T2, typename T3, typename T4\n        >\n    struct result_\n        : or_impl<\n              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n            >::template result_< T2,T3,T4,false_ >\n    {\n    };\n};\n\ntemplate<>\nstruct or_impl<false>\n    ::result_< false_,false_,false_,false_ >\n        : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        >::template result_< T2,T3,T4,T5 >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct plus_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct plus_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct plus2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n\n    : if_<\n\n          is_na<N3>\n        , plus2< N1,N2 >\n        , plus<\n              plus2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct plus2\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\ntemplate< bool > struct quote_impl\n{\n    template< typename T > struct result_\n        : T\n    {\n    };\n};\n\ntemplate<> struct quote_impl<false>\n{\n    template< typename T > struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<\n      template< typename P1 > class F\n    , typename Tag = void_\n    >\nstruct quote1\n{\n    template< typename U1 > struct apply\n\n        : quote_impl< aux::has_type< F<U1> >::value >\n            ::template result_< F<U1> >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename Tag = void_\n    >\nstruct quote2\n{\n    template< typename U1, typename U2 > struct apply\n\n        : quote_impl< aux::has_type< F< U1,U2 > >::value >\n            ::template result_< F< U1,U2 > >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename Tag = void_\n    >\nstruct quote3\n{\n    template< typename U1, typename U2, typename U3 > struct apply\n\n        : quote_impl< aux::has_type< F< U1,U2,U3 > >::value >\n            ::template result_< F< U1,U2,U3 > >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename Tag = void_\n    >\nstruct quote4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        >\n    struct apply\n\n        : quote_impl< aux::has_type< F< U1,U2,U3,U4 > >::value >\n            ::template result_< F< U1,U2,U3,U4 > >\n\n    {\n    };\n};\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename Tag = void_\n    >\nstruct quote5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        , typename U5\n        >\n    struct apply\n\n        : quote_impl< aux::has_type< F< U1,U2,U3,U4,U5 > >::value >\n            ::template result_< F< U1,U2,U3,U4,U5 > >\n\n    {\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate< long N >\nstruct reverse_fold_chunk;\n\ntemplate<> struct reverse_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_fold_null_step< Last,State >\n            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_step\n{\n    typedef reverse_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n    : reverse_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk;\n\ntemplate<> struct reverse_iter_fold_chunk<0>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef fwd_state0 bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter0 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        \n\n        typedef fwd_state1 bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        typedef bkwd_state0 state;\n        typedef iter1 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<2>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        \n\n        typedef fwd_state2 bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter2 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<3>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        \n\n        typedef fwd_state3 bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter3 iterator;\n    };\n};\n\ntemplate<> struct reverse_iter_fold_chunk<4>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef fwd_state4 bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef iter4 iterator;\n    };\n};\n\ntemplate< long N >\nstruct reverse_iter_fold_chunk\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n        typedef typename mpl::next<iter0>::type iter1;\n        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n        typedef typename mpl::next<iter1>::type iter2;\n        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n        typedef typename mpl::next<iter2>::type iter3;\n        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n        typedef typename mpl::next<iter3>::type iter4;\n        \n\n        typedef reverse_iter_fold_impl<\n              ( (N - 4) < 0 ? 0 : N - 4 )\n            , iter4\n            , Last\n            , fwd_state4\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n\n        typedef typename nested_chunk::state bkwd_state4;\n        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n        \n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step;\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct reverse_iter_fold_null_step\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<>\nstruct reverse_iter_fold_chunk< -1 >\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef typename if_<\n              typename is_same< First,Last >::type\n            , reverse_iter_fold_null_step< Last,State >\n            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_step\n{\n    typedef reverse_iter_fold_chunk< -1 >::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n    : reverse_iter_fold_chunk<N>\n        ::template result_< First,Last,State,BackwardOp,ForwardOp >\n{\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct set_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef set0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename set20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_set_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_set_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct set_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_set_arg<T1>::value + is_set_arg<T2>::value \n        + is_set_arg<T3>::value + is_set_arg<T4>::value \n        + is_set_arg<T5>::value + is_set_arg<T6>::value \n        + is_set_arg<T7>::value + is_set_arg<T8>::value \n        + is_set_arg<T9>::value + is_set_arg<T10>::value \n        + is_set_arg<T11>::value + is_set_arg<T12>::value \n        + is_set_arg<T13>::value + is_set_arg<T14>::value \n        + is_set_arg<T15>::value + is_set_arg<T16>::value \n        + is_set_arg<T17>::value + is_set_arg<T18>::value \n        + is_set_arg<T19>::value + is_set_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set_impl\n{\n    typedef aux::set_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::set_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set\n    : aux::set_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::set_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct set_c_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<0>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set0_c<\n              T\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<1>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set1_c<\n              T, C0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<2>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set2_c<\n              T, C0, C1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<3>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set3_c<\n              T, C0, C1, C2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<4>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set4_c<\n              T, C0, C1, C2, C3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<5>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set5_c<\n              T, C0, C1, C2, C3, C4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<6>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set6_c<\n              T, C0, C1, C2, C3, C4, C5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<7>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set7_c<\n              T, C0, C1, C2, C3, C4, C5, C6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<8>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set8_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<9>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set9_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<10>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set10_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<11>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set11_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<12>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set12_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<13>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set13_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<14>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set14_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<15>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set15_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<16>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set16_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<17>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set17_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<18>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set18_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<19>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set19_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct set_c_chooser<20>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename set20_c<\n              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< long C >\nstruct is_set_c_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_set_c_arg<LONG_MAX>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8\n    , long C9, long C10, long C11, long C12, long C13, long C14, long C15\n    , long C16, long C17, long C18, long C19, long C20\n    >\nstruct set_c_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_set_c_arg<C1>::value + is_set_c_arg<C2>::value \n        + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value \n        + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value \n        + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value \n        + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value \n        + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value \n        + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value \n        + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value \n        + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value \n        + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value\n        );\n\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c_impl\n{\n    typedef aux::set_c_count_args<\n          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        > arg_num_;\n\n    typedef typename aux::set_c_chooser< arg_num_::value >\n        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c\n    : aux::set_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type\n{\n    typedef typename aux::set_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_left_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_left_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_left_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n\n    : shift_left_impl<\n          typename shift_left_tag<N1>::type\n        , typename shift_left_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  << BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_right_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_right_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct shift_right_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n\n    : shift_right_impl<\n          typename shift_right_tag<N1>::type\n        , typename shift_right_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< bool >\nstruct template_arity_impl\n{\n    template< typename F > struct result_\n        : mpl::int_< -1 >\n    {\n    };\n};\n\ntemplate<>\nstruct template_arity_impl<true>\n{\n    template< typename F > struct result_\n        : F::arity\n    {\n    };\n};\n\ntemplate< typename F >\nstruct template_arity\n    : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >\n        ::template result_<F>\n{\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct times_impl< na,integral_c_tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate<> struct times_impl< integral_c_tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\n/// forward declaration\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct times2;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n\n    : if_<\n\n          is_na<N3>\n        , times2< N1,N2 >\n        , times<\n              times2< N1,N2 >\n            , N3, N4, N5\n            >\n        >::type\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1\n    , typename N2\n    >\nstruct times2\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl\n{\n    template< typename F, typename Args > struct apply;\n};\n\ntemplate<> struct unpack_args_impl<0>\n{\n    template< typename F, typename Args > struct apply\n        : apply0<\n              F\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<1>\n{\n    template< typename F, typename Args > struct apply\n        : apply1<\n              F\n            , typename at_c< Args,0 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<2>\n{\n    template< typename F, typename Args > struct apply\n        : apply2<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<3>\n{\n    template< typename F, typename Args > struct apply\n        : apply3<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            , typename at_c< Args,2 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<4>\n{\n    template< typename F, typename Args > struct apply\n        : apply4<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n            >\n    {\n    };\n};\n\ntemplate<> struct unpack_args_impl<5>\n{\n    template< typename F, typename Args > struct apply\n        : apply5<\n              F\n            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n            , typename at_c< Args,4 >::type\n            >\n    {\n    };\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n\n        : aux::unpack_args_impl< size<Args>::value >\n            ::template apply< F,Args >\n\n    {\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct vector_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<0>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef vector0<\n             \n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<1>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector1<\n              T0\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<2>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector2<\n              T0, T1\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<3>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector3<\n              T0, T1, T2\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<4>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector4<\n              T0, T1, T2, T3\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<5>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector5<\n              T0, T1, T2, T3, T4\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<6>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector6<\n              T0, T1, T2, T3, T4, T5\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<7>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector7<\n              T0, T1, T2, T3, T4, T5, T6\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<8>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector8<\n              T0, T1, T2, T3, T4, T5, T6, T7\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<9>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector9<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<10>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector10<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<11>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector11<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<12>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector12<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<13>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector13<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<14>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector14<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<15>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector15<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<16>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector16<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<17>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector17<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<18>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector18<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<19>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector19<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_chooser<20>\n{\n    template<\n          typename T0, typename T1, typename T2, typename T3, typename T4\n        , typename T5, typename T6, typename T7, typename T8, typename T9\n        , typename T10, typename T11, typename T12, typename T13, typename T14\n        , typename T15, typename T16, typename T17, typename T18, typename T19\n        >\n    struct result_\n    {\n        typedef typename vector20<\n              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< typename T >\nstruct is_vector_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_vector_arg<na>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6, typename T7, typename T8, typename T9, typename T10\n    , typename T11, typename T12, typename T13, typename T14, typename T15\n    , typename T16, typename T17, typename T18, typename T19, typename T20\n    >\nstruct vector_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_vector_arg<T1>::value + is_vector_arg<T2>::value \n        + is_vector_arg<T3>::value + is_vector_arg<T4>::value \n        + is_vector_arg<T5>::value + is_vector_arg<T6>::value \n        + is_vector_arg<T7>::value + is_vector_arg<T8>::value \n        + is_vector_arg<T9>::value + is_vector_arg<T10>::value \n        + is_vector_arg<T11>::value + is_vector_arg<T12>::value \n        + is_vector_arg<T13>::value + is_vector_arg<T14>::value \n        + is_vector_arg<T15>::value + is_vector_arg<T16>::value \n        + is_vector_arg<T17>::value + is_vector_arg<T18>::value \n        + is_vector_arg<T19>::value + is_vector_arg<T20>::value\n        );\n\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector_impl\n{\n    typedef aux::vector_count_args<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        > arg_num_;\n\n    typedef typename aux::vector_chooser< arg_num_::value >\n        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector\n    : aux::vector_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type\n{\n    typedef typename aux::vector_impl<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< int N >\nstruct vector_c_chooser;\n\n}\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<0>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector0_c<\n              T\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<1>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector1_c<\n              T, T(C0)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<2>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector2_c<\n              T, T(C0), T(C1)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<3>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector3_c<\n              T, T(C0), T(C1), T(C2)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<4>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector4_c<\n              T, T(C0), T(C1), T(C2), T(C3)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<5>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector5_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<6>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector6_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<7>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector7_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<8>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector8_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<9>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector9_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<10>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector10_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<11>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector11_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<12>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector12_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<13>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector13_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<14>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector14_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<15>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector15_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<16>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector16_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<17>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector17_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<18>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector18_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<19>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector19_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate<>\nstruct vector_c_chooser<20>\n{\n    template<\n          typename T, long C0, long C1, long C2, long C3, long C4, long C5\n        , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n        , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n        >\n    struct result_\n    {\n        typedef typename vector20_c<\n              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19)\n            >::type type;\n\n    };\n};\n\n} // namespace aux\n\nnamespace aux {\n\ntemplate< long C >\nstruct is_vector_c_arg\n{\n    BOOST_STATIC_CONSTANT(bool, value  = true);\n};\n\ntemplate<>\nstruct is_vector_c_arg<LONG_MAX>\n{\n    BOOST_STATIC_CONSTANT(bool, value  = false);\n};\n\ntemplate<\n      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8\n    , long C9, long C10, long C11, long C12, long C13, long C14, long C15\n    , long C16, long C17, long C18, long C19, long C20\n    >\nstruct vector_c_count_args\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          is_vector_c_arg<C1>::value + is_vector_c_arg<C2>::value \n        + is_vector_c_arg<C3>::value + is_vector_c_arg<C4>::value \n        + is_vector_c_arg<C5>::value + is_vector_c_arg<C6>::value \n        + is_vector_c_arg<C7>::value + is_vector_c_arg<C8>::value \n        + is_vector_c_arg<C9>::value + is_vector_c_arg<C10>::value \n        + is_vector_c_arg<C11>::value + is_vector_c_arg<C12>::value \n        + is_vector_c_arg<C13>::value + is_vector_c_arg<C14>::value \n        + is_vector_c_arg<C15>::value + is_vector_c_arg<C16>::value \n        + is_vector_c_arg<C17>::value + is_vector_c_arg<C18>::value \n        + is_vector_c_arg<C19>::value + is_vector_c_arg<C20>::value\n        );\n\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c_impl\n{\n    typedef aux::vector_c_count_args<\n          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        > arg_num_;\n\n    typedef typename aux::vector_c_chooser< arg_num_::value >\n        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c\n    : aux::vector_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type\n{\n    typedef typename aux::vector_c_impl<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19\n        >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl\n    : false_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl< true,T1,T2,T3,T4 >\n    : and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , true_\n        >\n{\n};\n\ntemplate<>\nstruct and_impl<\n          true\n        , true_, true_, true_, true_\n        >\n    : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\ntemplate<\n      typename F\n    >\nstruct apply< F,na,na,na,na,na >\n    : apply0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply< F,T1,na,na,na,na >\n    : apply1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply< F,T1,T2,na,na,na >\n    : apply2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply< F,T1,T2,T3,na,na >\n    : apply3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply< F,T1,T2,T3,T4,na >\n    : apply4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply\n    : apply5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply;\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n\n    , typename has_apply_ = typename aux::has_apply<F>::type\n\n    >\nstruct apply_wrap0\n\n    : F::template apply<  >\n{\n};\n\ntemplate< typename F >\nstruct apply_wrap0< F,true_ >\n    : F::apply\n{\n};\n\ntemplate<\n      typename F, typename T1\n\n    >\nstruct apply_wrap1\n\n    : F::template apply<T1>\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n\n    >\nstruct apply_wrap2\n\n    : F::template apply< T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n\n    >\nstruct apply_wrap3\n\n    : F::template apply< T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n\n    >\nstruct apply_wrap4\n\n    : F::template apply< T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n\n    >\nstruct apply_wrap5\n\n    : F::template apply< T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg< -1 >, Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct bind;\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitand_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitand_< N1,N2,N3,N4,na >\n\n    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitand_< N1,N2,N3,na,na >\n\n    : bitand_< bitand_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitand_< N1,N2,na,na,na >\n    : bitand_impl<\n          typename bitand_tag<N1>::type\n        , typename bitand_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct bitand_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 & n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::bitand_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitor_< N1,N2,N3,N4,na >\n\n    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitor_< N1,N2,N3,na,na >\n\n    : bitor_< bitor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitor_< N1,N2,na,na,na >\n    : bitor_impl<\n          typename bitor_tag<N1>::type\n        , typename bitor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct bitor_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 | n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::bitor_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitxor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitxor_< N1,N2,N3,N4,na >\n\n    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitxor_< N1,N2,N3,na,na >\n\n    : bitxor_< bitxor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitxor_< N1,N2,na,na,na >\n    : bitxor_impl<\n          typename bitxor_tag<N1>::type\n        , typename bitxor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct bitxor_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 ^ n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::bitxor_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque;\n\ntemplate<\n     \n    >\nstruct deque<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct deque<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct deque<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct deque<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct deque<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct divides_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , divides\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct divides< N1,N2,N3,N4,na >\n\n    : divides< divides< divides< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct divides< N1,N2,N3,na,na >\n\n    : divides< divides< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct divides< N1,N2,na,na,na >\n    : divides_impl<\n          typename divides_tag<N1>::type\n        , typename divides_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct divides_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 / n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::divides_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value ==\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n{\n    typedef fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,First,Last,State,ForwardOp >\n    : fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n   \n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>, Tag >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>, Tag >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\n/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars\n\ntemplate<\n      typename F, typename Tag1, typename Tag2\n    >\nstruct lambda<\n          lambda< F,Tag1 >\n        , Tag2\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >=\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : T1, T2\n{\n    typedef inherit2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))\n};\n\ntemplate< typename T1 >\nstruct inherit2< T1,empty_base >\n{\n    typedef T1 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))\n};\n\ntemplate< typename T2 >\nstruct inherit2< empty_base,T2 >\n{\n    typedef T2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))\n};\n\ntemplate<>\nstruct inherit2< empty_base,empty_base >\n{\n    typedef empty_base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , inherit3\n        , ( T1, T2, T3)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , inherit4\n        , ( T1, T2, T3, T4)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , inherit5\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1 = empty_base, typename T2 = empty_base\n        , typename T3 = empty_base, typename T4 = empty_base\n        , typename T5 = empty_base\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n{\n    typedef iter_fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,First,Last,State,ForwardOp >\n    : iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N2)::value >\n             BOOST_MPL_AUX_VALUE_WKND(N1)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <=\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list;\n\ntemplate<\n     \n    >\nstruct list<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list0<  >\n{\n    typedef list0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct list<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list1<T0>\n{\n    typedef typename list1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list2< T0,T1 >\n{\n    typedef typename list2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list3< T0,T1,T2 >\n{\n    typedef typename list3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list4< T0,T1,T2,T3 >\n{\n    typedef typename list4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list5< T0,T1,T2,T3,T4 >\n{\n    typedef typename list5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : list15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : list16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : list17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : list18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : list19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list\n    : list20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c;\n\ntemplate<\n      typename T\n    >\nstruct list_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list0_c<T>\n{\n    typedef typename list0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct list_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list1_c< T,C0 >\n{\n    typedef typename list1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct list_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list2_c< T,C0,C1 >\n{\n    typedef typename list2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct list_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list3_c< T,C0,C1,C2 >\n{\n    typedef typename list3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : list18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : list19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c\n    : list20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map;\n\ntemplate<\n     \n    >\nstruct map<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map0<  >\n{\n    typedef map0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct map<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map1<T0>\n{\n    typedef typename map1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct map<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map2< T0,T1 >\n{\n    typedef typename map2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct map<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map3< T0,T1,T2 >\n{\n    typedef typename map3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct map<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map4< T0,T1,T2,T3 >\n{\n    typedef typename map4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct map<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map5< T0,T1,T2,T3,T4 >\n{\n    typedef typename map5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : map15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : map16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : map17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : map18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : map19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map\n    : map20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct minus< N1,N2,N3,N4,na >\n\n    : minus< minus< minus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct minus< N1,N2,N3,na,na >\n\n    : minus< minus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct minus< N1,N2,na,na,na >\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct minus_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 - n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::minus_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct modulus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n\n    : modulus_impl<\n          typename modulus_tag<N1>::type\n        , typename modulus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct modulus_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 % n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::modulus_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n    {\n        BOOST_STATIC_CONSTANT(bool, value =\n             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value !=\n             BOOST_MPL_AUX_VALUE_WKND(N2)::value )\n            );\n        typedef bool_<value> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl\n    : true_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl< false,T1,T2,T3,T4 >\n    : or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , false_\n        >\n{\n};\n\ntemplate<>\nstruct or_impl<\n          false\n        , false_, false_, false_, false_\n        >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct plus< N1,N2,N3,N4,na >\n\n    : plus< plus< plus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct plus< N1,N2,N3,na,na >\n\n    : plus< plus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct plus< N1,N2,na,na,na >\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct plus_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 + n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::plus_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set;\n\ntemplate<\n     \n    >\nstruct set<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set0<  >\n{\n    typedef set0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct set<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set1<T0>\n{\n    typedef typename set1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct set<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set2< T0,T1 >\n{\n    typedef typename set2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct set<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set3< T0,T1,T2 >\n{\n    typedef typename set3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct set<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set4< T0,T1,T2,T3 >\n{\n    typedef typename set4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct set<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set5< T0,T1,T2,T3,T4 >\n{\n    typedef typename set5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : set15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : set16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : set17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : set18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : set19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set\n    : set20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c;\n\ntemplate<\n      typename T\n    >\nstruct set_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set0_c<T>\n{\n    typedef typename set0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct set_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set1_c< T,C0 >\n{\n    typedef typename set1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct set_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set2_c< T,C0,C1 >\n{\n    typedef typename set2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct set_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set3_c< T,C0,C1,C2 >\n{\n    typedef typename set3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : set18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : set19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c\n    : set20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_left_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n\n    : shift_left_impl<\n          typename shift_left_tag<N1>::type\n        , typename shift_left_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, typename Shift, T n, Shift s >\nstruct shift_left_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n << s));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n        : aux::shift_left_wknd<\n              typename N::value_type\n            , typename S::value_type\n            , N::value\n            , S::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_right_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n\n    : shift_right_impl<\n          typename shift_right_tag<N1>::type\n        , typename shift_right_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, typename Shift, T n, Shift s >\nstruct shift_right_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n >> s));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n        : aux::shift_right_wknd<\n              typename N::value_type\n            , typename S::value_type\n            , N::value\n            , S::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< bool >\nstruct template_arity_impl\n{\n    template< typename F > struct result_\n        : mpl::int_< -1 >\n    {\n    };\n};\n\ntemplate<>\nstruct template_arity_impl<true>\n{\n    template< typename F > struct result_\n        : F::arity\n    {\n    };\n};\n\ntemplate< typename F >\nstruct template_arity\n    : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >\n        ::template result_<F>\n{\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n    : times< times< times< times< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct times< N1,N2,N3,N4,na >\n\n    : times< times< times< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct times< N1,N2,N3,na,na >\n\n    : times< times< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct times< N1,N2,na,na,na >\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct times_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value  = (n1 * n2));\n    typedef integral_c< T,value > type;\n};\n\n}\n\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n        : aux::times_wknd<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< int size, typename F, typename Args >\nstruct unpack_args_impl;\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 0,F,Args >\n    : apply0<\n          F\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 1,F,Args >\n    : apply1<\n          F\n        , typename at_c< Args,0 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 2,F,Args >\n    : apply2<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 3,F,Args >\n    : apply3<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 4,F,Args >\n    : apply4<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 5,F,Args >\n    : apply5<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        , typename at_c< Args,4 >::type\n        >\n{\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n\n        : aux::unpack_args_impl< size<Args>::value,F, Args >\n\n    {\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector;\n\ntemplate<\n     \n    >\nstruct vector<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c;\n\ntemplate<\n      typename T\n    >\nstruct vector_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector0_c<T>\n{\n    typedef typename vector0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct vector_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector1_c< T, T(C0) >\n{\n    typedef typename vector1_c< T, T(C0) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct vector_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector2_c< T, T(C0), T(C1) >\n{\n    typedef typename vector2_c< T, T(C0), T(C1) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct vector_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector3_c< T, T(C0), T(C1), T(C2) >\n{\n    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >\n{\n    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >\n{\n    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >\n{\n    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >\n{\n    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >\n{\n    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >\n{\n    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >\n{\n    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >\n{\n    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >\n{\n    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >\n{\n    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >\n{\n    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >\n{\n    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >\n{\n    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >\n{\n    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >\n{\n    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >\n{\n    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c\n    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >\n{\n    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl\n    : false_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl< true,T1,T2,T3,T4 >\n    : and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , true_\n        >\n{\n};\n\ntemplate<>\nstruct and_impl<\n          true\n        , true_, true_, true_, true_\n        >\n    : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n};\n\ntemplate<\n      typename F\n    >\nstruct apply< F,na,na,na,na,na >\n    : apply0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply< F,T1,na,na,na,na >\n    : apply1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply< F,T1,T2,na,na,na >\n    : apply2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply< F,T1,T2,T3,na,na >\n    : apply3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply< F,T1,T2,T3,T4,na >\n    : apply4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply\n    : apply5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply;\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n\n    , typename has_apply_ = typename aux::has_apply<F>::type\n\n    >\nstruct apply_wrap0\n\n    : F::template apply<  >\n{\n};\n\ntemplate< typename F >\nstruct apply_wrap0< F,true_ >\n    : F::apply\n{\n};\n\ntemplate<\n      typename F, typename T1\n\n    >\nstruct apply_wrap1\n\n    : F::template apply<T1>\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n\n    >\nstruct apply_wrap2\n\n    : F::template apply< T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n\n    >\nstruct apply_wrap3\n\n    : F::template apply< T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n\n    >\nstruct apply_wrap4\n\n    : F::template apply< T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n\n    >\nstruct apply_wrap5\n\n    : F::template apply< T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/basic_bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\n        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\n\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n/// if_/eval_if specializations\ntemplate< template< typename T1, typename T2, typename T3 > class F, typename Tag >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct if_;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< if_,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef typename if_<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\ntemplate<\n      template< typename T1, typename T2, typename T3 > class F, typename Tag\n    >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct eval_if;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< eval_if,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\n        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\n        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\n        typedef typename eval_if<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg< -1 >, Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n/// if_/eval_if specializations\ntemplate< template< typename T1, typename T2, typename T3 > class F, typename Tag >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct if_;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< if_,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef typename if_<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\ntemplate<\n      template< typename T1, typename T2, typename T3 > class F, typename Tag\n    >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct eval_if;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< eval_if,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef typename eval_if<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct bind;\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/bitand.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitand.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitand_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitand_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitand_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitand_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitand_\n    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>\n{\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitand_< N1,N2,N3,N4,na >\n\n    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitand_< N1,N2,N3,na,na >\n\n    : bitand_< bitand_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitand_< N1,N2,na,na,na >\n    : bitand_impl<\n          typename bitand_tag<N1>::type\n        , typename bitand_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitand_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitand_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/bitor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitor_\n    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>\n{\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitor_< N1,N2,N3,N4,na >\n\n    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitor_< N1,N2,N3,na,na >\n\n    : bitor_< bitor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitor_< N1,N2,na,na,na >\n    : bitor_impl<\n          typename bitor_tag<N1>::type\n        , typename bitor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/bitxor.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bitxor.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct bitxor_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct bitxor_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct bitxor_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct bitxor_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct bitxor_\n    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>\n{\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct bitxor_< N1,N2,N3,N4,na >\n\n    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct bitxor_< N1,N2,N3,na,na >\n\n    : bitxor_< bitxor_< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct bitxor_< N1,N2,na,na,na >\n    : bitxor_impl<\n          typename bitxor_tag<N1>::type\n        , typename bitxor_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , bitxor_\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct bitxor_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/deque.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/deque.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct deque;\n\ntemplate<\n     \n    >\nstruct deque<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct deque<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct deque<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct deque<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct deque<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct deque<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct deque\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/divides.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/divides.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct divides_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct divides_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct divides_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct divides_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct divides\n    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>\n{\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct divides< N1,N2,N3,N4,na >\n\n    : divides< divides< divides< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct divides< N1,N2,N3,na,na >\n\n    : divides< divides< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct divides< N1,N2,na,na,na >\n    : divides_impl<\n          typename divides_tag<N1>::type\n        , typename divides_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , divides\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, divides)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct divides_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n{\n    typedef fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,First,Last,State,ForwardOp >\n    : fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n   \n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>, Tag >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>, Tag >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n       \n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\n/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars\n\ntemplate<\n      typename F, typename Tag1, typename Tag2\n    >\nstruct lambda<\n          lambda< F,Tag1 >\n        , Tag2\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, lambda)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/inherit.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/inherit.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct inherit2\n    : T1, T2\n{\n    typedef inherit2 type;\n};\n\ntemplate< typename T1 >\nstruct inherit2< T1,empty_base >\n{\n    typedef T1 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))\n};\n\ntemplate< typename T2 >\nstruct inherit2< empty_base,T2 >\n{\n    typedef T2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))\n};\n\ntemplate<>\nstruct inherit2< empty_base,empty_base >\n{\n    typedef empty_base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na\n    >\nstruct inherit3\n    : inherit2<\n          typename inherit2<\n              T1, T2\n            >::type\n        , T3\n        >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, inherit3)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    >\nstruct inherit4\n    : inherit2<\n          typename inherit3<\n              T1, T2, T3\n            >::type\n        , T4\n        >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(4, inherit4)\n\ntemplate<\n      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na\n    , typename T5 = na\n    >\nstruct inherit5\n    : inherit2<\n          typename inherit4<\n              T1, T2, T3, T4\n            >::type\n        , T5\n        >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(5, inherit5)\n\n/// primary template\n\ntemplate<\n      typename T1 = empty_base, typename T2 = empty_base\n    , typename T3 = empty_base, typename T4 = empty_base\n    , typename T5 = empty_base\n    >\nstruct inherit\n    : inherit5< T1,T2,T3,T4,T5 >\n{\n};\n\ntemplate<>\nstruct inherit< na,na,na,na,na >\n{\n    template<\n\n          typename T1 = empty_base, typename T2 = empty_base\n        , typename T3 = empty_base, typename T4 = empty_base\n        , typename T5 = empty_base\n\n        >\n    struct apply\n        : inherit< T1,T2,T3,T4,T5 >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n{\n    typedef iter_fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,First,Last,State,ForwardOp >\n    : iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/lambda_no_ctps.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\ntemplate< typename Arity > struct lambda_impl\n{\n    template< typename T, typename Tag, typename Protect > struct result_\n    {\n        typedef T type;\n        typedef is_placeholder<T> is_le;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<1> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef typename l1::is_le is_le1;\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value\n            > is_le;\n\n        typedef bind1<\n              typename F::rebind\n            , typename l1::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<2> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value\n            > is_le;\n\n        typedef bind2<\n              typename F::rebind\n            , typename l1::type, typename l2::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<3> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value\n            > is_le;\n\n        typedef bind3<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<4> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value\n            > is_le;\n\n        typedef bind4<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\ntemplate<> struct lambda_impl< int_<5> >\n{\n    template< typename F, typename Tag, typename Protect > struct result_\n    {\n        typedef lambda< typename F::arg1, Tag, false_ > l1;\n        typedef lambda< typename F::arg2, Tag, false_ > l2;\n        typedef lambda< typename F::arg3, Tag, false_ > l3;\n        typedef lambda< typename F::arg4, Tag, false_ > l4;\n        typedef lambda< typename F::arg5, Tag, false_ > l5;\n        \n        typedef typename l1::is_le is_le1;\n        typedef typename l2::is_le is_le2;\n        typedef typename l3::is_le is_le3;\n        typedef typename l4::is_le is_le4;\n        typedef typename l5::is_le is_le5;\n        \n\n        typedef aux::lambda_or<\n              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value\n            > is_le;\n\n        typedef bind5<\n              typename F::rebind\n            , typename l1::type, typename l2::type, typename l3::type\n            , typename l4::type, typename l5::type\n            > bind_;\n\n        typedef typename if_<\n              is_le\n            , if_< Protect, mpl::protect<bind_>, bind_ >\n            , identity<F>\n            >::type type_;\n\n        typedef typename type_::type type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Protect\n    >\nstruct lambda\n{\n    /// Metafunction forwarding confuses MSVC 6.x\n    typedef typename aux::template_arity<T>::type arity_;\n    typedef typename aux::lambda_impl<arity_>\n        ::template result_< T,Tag,Protect > l_;\n\n    typedef typename l_::type type;\n    typedef typename l_::is_le is_le;\n};\n\nBOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list;\n\ntemplate<\n     \n    >\nstruct list<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list0<  >\n{\n    typedef list0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct list<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list1<T0>\n{\n    typedef typename list1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list2< T0,T1 >\n{\n    typedef typename list2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list3< T0,T1,T2 >\n{\n    typedef typename list3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list4< T0,T1,T2,T3 >\n{\n    typedef typename list4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list5< T0,T1,T2,T3,T4 >\n{\n    typedef typename list5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : list15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : list16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : list17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : list18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : list19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list\n    : list20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/list_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct list_c;\n\ntemplate<\n      typename T\n    >\nstruct list_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list0_c<T>\n{\n    typedef typename list0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct list_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list1_c< T,C0 >\n{\n    typedef typename list1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct list_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list2_c< T,C0,C1 >\n{\n    typedef typename list2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct list_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list3_c< T,C0,C1,C2 >\n{\n    typedef typename list3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : list17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : list18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct list_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : list19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct list_c\n    : list20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/map.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct map;\n\ntemplate<\n     \n    >\nstruct map<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map0<  >\n{\n    typedef map0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct map<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map1<T0>\n{\n    typedef typename map1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct map<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map2< T0,T1 >\n{\n    typedef typename map2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct map<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map3< T0,T1,T2 >\n{\n    typedef typename map3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct map<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map4< T0,T1,T2,T3 >\n{\n    typedef typename map4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct map<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map5< T0,T1,T2,T3,T4 >\n{\n    typedef typename map5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : map15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : map16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : map17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : map18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct map<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : map19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct map\n    : map20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>\n{\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct minus< N1,N2,N3,N4,na >\n\n    : minus< minus< minus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct minus< N1,N2,N3,na,na >\n\n    : minus< minus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct minus< N1,N2,na,na,na >\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/modulus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/modulus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct modulus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct modulus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct modulus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct modulus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct modulus\n\n    : modulus_impl<\n          typename modulus_tag<N1>::type\n        , typename modulus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct modulus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl\n    : true_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl< false,T1,T2,T3,T4 >\n    : or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , false_\n        >\n{\n};\n\ntemplate<>\nstruct or_impl<\n          false\n        , false_, false_, false_, false_\n        >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>\n{\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct plus< N1,N2,N3,N4,na >\n\n    : plus< plus< plus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct plus< N1,N2,N3,na,na >\n\n    : plus< plus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct plus< N1,N2,na,na,na >\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T, bool has_type_ >\nstruct quote_impl\n    : T\n{\n};\n\ntemplate< typename T >\nstruct quote_impl< T,false >\n{\n    typedef T type;\n};\n\ntemplate<\n      template< typename P1 > class F\n    , typename Tag = void_\n    >\nstruct quote1\n{\n    template< typename U1 > struct apply\n\n        : quote_impl<\n              F<U1>\n            , aux::has_type< F<U1> >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename Tag = void_\n    >\nstruct quote2\n{\n    template< typename U1, typename U2 > struct apply\n\n        : quote_impl<\n              F< U1,U2 >\n            , aux::has_type< F< U1,U2 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename Tag = void_\n    >\nstruct quote3\n{\n    template< typename U1, typename U2, typename U3 > struct apply\n\n        : quote_impl<\n              F< U1,U2,U3 >\n            , aux::has_type< F< U1,U2,U3 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename Tag = void_\n    >\nstruct quote4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4 >\n            , aux::has_type< F< U1,U2,U3,U4 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename Tag = void_\n    >\nstruct quote5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        , typename U5\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4,U5 >\n            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value\n            >\n\n    {\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;\n    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;\n    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;\n    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , First\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/set.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct set;\n\ntemplate<\n     \n    >\nstruct set<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set0<  >\n{\n    typedef set0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct set<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set1<T0>\n{\n    typedef typename set1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct set<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set2< T0,T1 >\n{\n    typedef typename set2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct set<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set3< T0,T1,T2 >\n{\n    typedef typename set3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct set<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set4< T0,T1,T2,T3 >\n{\n    typedef typename set4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct set<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set5< T0,T1,T2,T3,T4 >\n{\n    typedef typename set5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : set15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : set16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : set17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : set18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct set<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : set19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set\n    : set20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/set_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct set_c;\n\ntemplate<\n      typename T\n    >\nstruct set_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set0_c<T>\n{\n    typedef typename set0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct set_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set1_c< T,C0 >\n{\n    typedef typename set1_c< T,C0 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct set_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set2_c< T,C0,C1 >\n{\n    typedef typename set2_c< T,C0,C1 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct set_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set3_c< T,C0,C1,C2 >\n{\n    typedef typename set3_c< T,C0,C1,C2 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set4_c< T,C0,C1,C2,C3 >\n{\n    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set5_c< T,C0,C1,C2,C3,C4 >\n{\n    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set6_c< T,C0,C1,C2,C3,C4,C5 >\n{\n    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n{\n    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n{\n    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n{\n    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n{\n    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n{\n    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n{\n    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n{\n    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set14_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        >\n{\n    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set15_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        >\n{\n    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set16_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15\n        >\n{\n    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : set17_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16\n        >\n{\n    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : set18_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17\n        >\n{\n    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct set_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : set19_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18\n        >\n{\n    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct set_c\n    : set20_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, C19\n        >\n{\n    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/shift_left.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_left.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_left_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_left_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_left_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_left_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_left\n\n    : shift_left_impl<\n          typename shift_left_tag<N1>::type\n        , typename shift_left_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_left_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  << BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/shift_right.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/shift_right.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct shift_right_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct shift_right_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct shift_right_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct shift_right_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct shift_right\n\n    : shift_right_impl<\n          typename shift_right_tag<N1>::type\n        , typename shift_right_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct shift_right_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N, typename S > struct apply\n\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n    : times< times< times< times< N1,N2 >, N3>, N4>, N5>\n{\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct times< N1,N2,N3,N4,na >\n\n    : times< times< times< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct times< N1,N2,N3,na,na >\n\n    : times< times< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct times< N1,N2,na,na,na >\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/unpack_args.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< int size, typename F, typename Args >\nstruct unpack_args_impl;\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 0,F,Args >\n    : apply0<\n          F\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 1,F,Args >\n    : apply1<\n          F\n        , typename at_c< Args,0 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 2,F,Args >\n    : apply2<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 3,F,Args >\n    : apply3<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 4,F,Args >\n    : apply4<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        >\n{\n};\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl< 5,F,Args >\n    : apply5<\n          F\n        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type\n        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type\n        , typename at_c< Args,4 >::type\n        >\n{\n};\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n\n        : aux::unpack_args_impl< size<Args>::value,F, Args >\n\n    {\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector;\n\ntemplate<\n     \n    >\nstruct vector<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessed/plain/vector_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX\n    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX\n    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX\n    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX\n    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX\n    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX\n    , long C18 = LONG_MAX, long C19 = LONG_MAX\n    >\nstruct vector_c;\n\ntemplate<\n      typename T\n    >\nstruct vector_c<\n          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector0_c<T>\n{\n    typedef typename vector0_c<T>::type type;\n};\n\ntemplate<\n      typename T, long C0\n    >\nstruct vector_c<\n          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector1_c< T, T(C0) >\n{\n    typedef typename vector1_c< T, T(C0) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1\n    >\nstruct vector_c<\n          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector2_c< T, T(C0), T(C1) >\n{\n    typedef typename vector2_c< T, T(C0), T(C1) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2\n    >\nstruct vector_c<\n          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector3_c< T, T(C0), T(C1), T(C2) >\n{\n    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >\n{\n    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >\n{\n    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >\n{\n    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >\n{\n    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX\n        >\n    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >\n{\n    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >\n{\n    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        , LONG_MAX\n        >\n    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >\n{\n    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >\n{\n    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >\n{\n    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >\n{\n    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >\n{\n    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >\n{\n    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >\n{\n    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX\n        >\n    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >\n{\n    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, LONG_MAX, LONG_MAX\n        >\n    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >\n{\n    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;\n};\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18\n    >\nstruct vector_c<\n          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14\n        , C15, C16, C17, C18, LONG_MAX\n        >\n    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >\n{\n    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T, long C0, long C1, long C2, long C3, long C4, long C5\n    , long C6, long C7, long C8, long C9, long C10, long C11, long C12\n    , long C13, long C14, long C15, long C16, long C17, long C18, long C19\n    >\nstruct vector_c\n    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >\n{\n    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/add.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_ADD_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_ADD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/mpl/aux_/preprocessor/tuple.hpp>\n\n#if defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION)\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_ADD(i,j) \\\n    BOOST_MPL_PP_ADD_DELAY(i,j) \\\n    /**/\n\n#   define BOOST_MPL_PP_ADD_DELAY(i,j) \\\n    BOOST_PP_CAT(BOOST_MPL_PP_TUPLE_11_ELEM_##i,BOOST_MPL_PP_ADD_##j) \\\n    /**/\n#else\n#   define BOOST_MPL_PP_ADD(i,j) \\\n    BOOST_MPL_PP_ADD_DELAY(i,j) \\\n    /**/\n\n#   define BOOST_MPL_PP_ADD_DELAY(i,j) \\\n    BOOST_MPL_PP_TUPLE_11_ELEM_##i BOOST_MPL_PP_ADD_##j \\\n    /**/\n#endif\n\n#   define BOOST_MPL_PP_ADD_0 (0,1,2,3,4,5,6,7,8,9,10)\n#   define BOOST_MPL_PP_ADD_1 (1,2,3,4,5,6,7,8,9,10,0)\n#   define BOOST_MPL_PP_ADD_2 (2,3,4,5,6,7,8,9,10,0,0)\n#   define BOOST_MPL_PP_ADD_3 (3,4,5,6,7,8,9,10,0,0,0)\n#   define BOOST_MPL_PP_ADD_4 (4,5,6,7,8,9,10,0,0,0,0)\n#   define BOOST_MPL_PP_ADD_5 (5,6,7,8,9,10,0,0,0,0,0)\n#   define BOOST_MPL_PP_ADD_6 (6,7,8,9,10,0,0,0,0,0,0)\n#   define BOOST_MPL_PP_ADD_7 (7,8,9,10,0,0,0,0,0,0,0)\n#   define BOOST_MPL_PP_ADD_8 (8,9,10,0,0,0,0,0,0,0,0)\n#   define BOOST_MPL_PP_ADD_9 (9,10,0,0,0,0,0,0,0,0,0)\n#   define BOOST_MPL_PP_ADD_10 (10,0,0,0,0,0,0,0,0,0,0)\n\n#else\n\n#   include <boost/preprocessor/arithmetic/add.hpp>\n\n#   define BOOST_MPL_PP_ADD(i,j) \\\n    BOOST_PP_ADD(i,j) \\\n    /**/\n    \n#endif \n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_ADD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/limits/arity.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#include <boost/preprocessor/comma_if.hpp>\n#include <boost/preprocessor/logical/and.hpp>\n#include <boost/preprocessor/identity.hpp>\n#include <boost/preprocessor/empty.hpp>\n\n// BOOST_MPL_PP_DEF_PARAMS_TAIL(1,T,value): , T1 = value, .., Tn = value\n// BOOST_MPL_PP_DEF_PARAMS_TAIL(2,T,value): , T2 = value, .., Tn = value\n// BOOST_MPL_PP_DEF_PARAMS_TAIL(n,T,value): <nothing>\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/mpl/aux_/preprocessor/filter_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/sub.hpp>\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1( \\\n          i \\\n        , BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,i) \\\n        , param \\\n        , value_func \\\n        ) \\\n    /**/\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1(i, n, param, value_func) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i,n,param,value_func) \\\n    /**/\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i, n, param, value_func) \\\n    BOOST_PP_COMMA_IF(BOOST_PP_AND(i,n)) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_##i(n,param,value_func) \\\n    /**/\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_0(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1 v(),p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v())\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_1(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_2(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_3(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_4(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_5(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_6(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_7(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6,p7)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_8(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##9 v(),p1,p2,p3,p4,p5,p6,p7,p8)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_9(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p1,p2,p3,p4,p5,p6,p7,p8,p9)\n\n#else\n\n#   include <boost/preprocessor/arithmetic/add.hpp>\n#   include <boost/preprocessor/arithmetic/sub.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/tuple/elem.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC(unused, i, op) \\\n    , BOOST_PP_CAT( \\\n          BOOST_PP_TUPLE_ELEM(3, 1, op) \\\n        , BOOST_PP_ADD_D(1, i, BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(3, 0, op))) \\\n        ) BOOST_PP_TUPLE_ELEM(3, 2, op)() \\\n    /**/\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \\\n    BOOST_PP_REPEAT( \\\n          BOOST_PP_SUB_D(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, i) \\\n        , BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC \\\n        , (i, param, value_func) \\\n        ) \\\n    /**/\n\n\n#endif // BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES\n\n#define BOOST_MPL_PP_DEF_PARAMS_TAIL(i, param, value) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \\\n    /**/\n\n#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \\\n    /**/\n#else\n#   define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_EMPTY) \\\n    /**/\n#endif\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/default_params.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n// BOOST_MPL_PP_DEFAULT_PARAMS(0,T,int): <nothing>\n// BOOST_MPL_PP_DEFAULT_PARAMS(1,T,int): T1 = int\n// BOOST_MPL_PP_DEFAULT_PARAMS(2,T,int): T1 = int, T2 = int\n// BOOST_MPL_PP_DEFAULT_PARAMS(n,T,int): T1 = int, T2 = int, .., Tn = int\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_DEFAULT_PARAMS(n,p,v) \\\n    BOOST_PP_CAT(BOOST_MPL_PP_DEFAULT_PARAMS_,n)(p,v) \\\n    /**/\n    \n#   define BOOST_MPL_PP_DEFAULT_PARAMS_0(p,v)\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_1(p,v) p##1=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_2(p,v) p##1=v,p##2=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_3(p,v) p##1=v,p##2=v,p##3=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_4(p,v) p##1=v,p##2=v,p##3=v,p##4=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_5(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_6(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_7(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_8(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_9(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v,p##9=v\n\n#else\n\n#   include <boost/preprocessor/tuple/elem.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC(unused, i, pv) \\\n    BOOST_PP_COMMA_IF(i) \\\n    BOOST_PP_CAT( BOOST_PP_TUPLE_ELEM(2,0,pv), BOOST_PP_INC(i) ) \\\n        = BOOST_PP_TUPLE_ELEM(2,1,pv) \\\n    /**/\n\n#   define BOOST_MPL_PP_DEFAULT_PARAMS(n, param, value) \\\n    BOOST_PP_REPEAT( \\\n          n \\\n        , BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC \\\n        , (param,value) \\\n        ) \\\n    /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/enum.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n// BOOST_MPL_PP_ENUM(0,int): <nothing>\n// BOOST_MPL_PP_ENUM(1,int): int\n// BOOST_MPL_PP_ENUM(2,int): int, int\n// BOOST_MPL_PP_ENUM(n,int): int, int, .., int\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_ENUM(n, param) \\\n    BOOST_PP_CAT(BOOST_MPL_PP_ENUM_,n)(param) \\\n    /**/\n    \n#   define BOOST_MPL_PP_ENUM_0(p)\n#   define BOOST_MPL_PP_ENUM_1(p) p\n#   define BOOST_MPL_PP_ENUM_2(p) p,p\n#   define BOOST_MPL_PP_ENUM_3(p) p,p,p\n#   define BOOST_MPL_PP_ENUM_4(p) p,p,p,p\n#   define BOOST_MPL_PP_ENUM_5(p) p,p,p,p,p\n#   define BOOST_MPL_PP_ENUM_6(p) p,p,p,p,p,p\n#   define BOOST_MPL_PP_ENUM_7(p) p,p,p,p,p,p,p\n#   define BOOST_MPL_PP_ENUM_8(p) p,p,p,p,p,p,p,p\n#   define BOOST_MPL_PP_ENUM_9(p) p,p,p,p,p,p,p,p,p\n\n#else\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n\n#   define BOOST_MPL_PP_AUX_ENUM_FUNC(unused, i, param) \\\n    BOOST_PP_COMMA_IF(i) param \\\n    /**/\n\n#   define BOOST_MPL_PP_ENUM(n, param) \\\n    BOOST_PP_REPEAT( \\\n          n \\\n        , BOOST_MPL_PP_AUX_ENUM_FUNC \\\n        , param \\\n        ) \\\n    /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/ext_params.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n// BOOST_MPL_PP_EXT_PARAMS(2,2,T): <nothing>\n// BOOST_MPL_PP_EXT_PARAMS(2,3,T): T2\n// BOOST_MPL_PP_EXT_PARAMS(2,4,T): T2, T3\n// BOOST_MPL_PP_EXT_PARAMS(2,n,T): T2, T3, .., Tn-1\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/mpl/aux_/preprocessor/filter_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/sub.hpp>\n\n#   define BOOST_MPL_PP_EXT_PARAMS(i,j,p) \\\n    BOOST_MPL_PP_EXT_PARAMS_DELAY_1(i,BOOST_MPL_PP_SUB(j,i),p) \\\n    /**/\n\n#   define BOOST_MPL_PP_EXT_PARAMS_DELAY_1(i,n,p) \\\n    BOOST_MPL_PP_EXT_PARAMS_DELAY_2(i,n,p) \\\n    /**/\n\n#   define BOOST_MPL_PP_EXT_PARAMS_DELAY_2(i,n,p) \\\n    BOOST_MPL_PP_EXT_PARAMS_##i(n,p) \\\n    /**/\n\n#   define BOOST_MPL_PP_EXT_PARAMS_1(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9)\n#   define BOOST_MPL_PP_EXT_PARAMS_2(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9,p1)\n#   define BOOST_MPL_PP_EXT_PARAMS_3(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##3,p##4,p##5,p##6,p##7,p##8,p##9,p1,p2)\n#   define BOOST_MPL_PP_EXT_PARAMS_4(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##4,p##5,p##6,p##7,p##8,p##9,p1,p2,p3)\n#   define BOOST_MPL_PP_EXT_PARAMS_5(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##5,p##6,p##7,p##8,p##9,p1,p2,p3,p4)\n#   define BOOST_MPL_PP_EXT_PARAMS_6(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##6,p##7,p##8,p##9,p1,p2,p3,p4,p5)\n#   define BOOST_MPL_PP_EXT_PARAMS_7(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##7,p##8,p##9,p1,p2,p3,p4,p5,p6)\n#   define BOOST_MPL_PP_EXT_PARAMS_8(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##8,p##9,p1,p2,p3,p4,p5,p6,p7)\n#   define BOOST_MPL_PP_EXT_PARAMS_9(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##9,p1,p2,p3,p4,p5,p6,p7,p8)\n\n#else\n\n#   include <boost/preprocessor/arithmetic/add.hpp>\n#   include <boost/preprocessor/arithmetic/sub.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/tuple/elem.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_AUX_EXT_PARAM_FUNC(unused, i, op) \\\n    BOOST_PP_COMMA_IF(i) \\\n    BOOST_PP_CAT( \\\n          BOOST_PP_TUPLE_ELEM(2,1,op) \\\n        , BOOST_PP_ADD_D(1, i, BOOST_PP_TUPLE_ELEM(2,0,op)) \\\n        ) \\\n    /**/\n\n#   define BOOST_MPL_PP_EXT_PARAMS(i, j, param) \\\n    BOOST_PP_REPEAT( \\\n          BOOST_PP_SUB_D(1,j,i) \\\n        , BOOST_MPL_PP_AUX_EXT_PARAM_FUNC \\\n        , (i,param) \\\n        ) \\\n    /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/filter_params.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define BOOST_MPL_PP_FILTER_PARAMS_0(p1,p2,p3,p4,p5,p6,p7,p8,p9) \n#define BOOST_MPL_PP_FILTER_PARAMS_1(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1\n#define BOOST_MPL_PP_FILTER_PARAMS_2(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2\n#define BOOST_MPL_PP_FILTER_PARAMS_3(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3\n#define BOOST_MPL_PP_FILTER_PARAMS_4(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4\n#define BOOST_MPL_PP_FILTER_PARAMS_5(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5\n#define BOOST_MPL_PP_FILTER_PARAMS_6(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6\n#define BOOST_MPL_PP_FILTER_PARAMS_7(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7\n#define BOOST_MPL_PP_FILTER_PARAMS_8(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7,p8\n#define BOOST_MPL_PP_FILTER_PARAMS_9(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7,p8,p9\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/is_seq.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_IS_SEQ_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_IS_SEQ_HPP_INCLUDED\n\n// Copyright Paul Mensonides 2003\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/preprocessor/seq/size.hpp>\n#include <boost/preprocessor/arithmetic/dec.hpp>\n#include <boost/preprocessor/punctuation/paren.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/config/config.hpp>\n\n// returns 1 if 'seq' is a PP-sequence, 0 otherwise:\n//\n//   BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_IS_SEQ( int ) ) )\n//   BOOST_PP_ASSERT( BOOST_MPL_PP_IS_SEQ( (int) ) )\n//   BOOST_PP_ASSERT( BOOST_MPL_PP_IS_SEQ( (1)(2) ) )\n\n#if (BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()) || defined(_MSC_VER) && defined(__INTEL_COMPILER) && __INTEL_COMPILER == 1010\n\n#   define BOOST_MPL_PP_IS_SEQ(seq) BOOST_PP_DEC( BOOST_PP_SEQ_SIZE( BOOST_MPL_PP_IS_SEQ_(seq) ) )\n#   define BOOST_MPL_PP_IS_SEQ_(seq) BOOST_MPL_PP_IS_SEQ_SEQ_( BOOST_MPL_PP_IS_SEQ_SPLIT_ seq )\n#   define BOOST_MPL_PP_IS_SEQ_SEQ_(x) (x)\n#   define BOOST_MPL_PP_IS_SEQ_SPLIT_(unused) unused)((unused)\n\n#else\n\n#   if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#       define BOOST_MPL_PP_IS_SEQ(seq) BOOST_MPL_PP_IS_SEQ_MWCC_((seq))\n#       define BOOST_MPL_PP_IS_SEQ_MWCC_(args) BOOST_MPL_PP_IS_SEQ_ ## args\n#   else\n#       define BOOST_MPL_PP_IS_SEQ(seq) BOOST_MPL_PP_IS_SEQ_(seq)\n#   endif\n\n#   define BOOST_MPL_PP_IS_SEQ_(seq) BOOST_PP_CAT(BOOST_MPL_PP_IS_SEQ_, BOOST_MPL_PP_IS_SEQ_0 seq BOOST_PP_RPAREN())\n#   define BOOST_MPL_PP_IS_SEQ_0(x) BOOST_MPL_PP_IS_SEQ_1(x\n#   define BOOST_MPL_PP_IS_SEQ_ALWAYS_0(unused) 0\n#   define BOOST_MPL_PP_IS_SEQ_BOOST_MPL_PP_IS_SEQ_0 BOOST_MPL_PP_IS_SEQ_ALWAYS_0(\n#   define BOOST_MPL_PP_IS_SEQ_BOOST_MPL_PP_IS_SEQ_1(unused) 1\n\n#endif\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_IS_SEQ_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/params.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n// BOOST_MPL_PP_PARAMS(0,T): <nothing>\n// BOOST_MPL_PP_PARAMS(1,T): T1\n// BOOST_MPL_PP_PARAMS(2,T): T1, T2\n// BOOST_MPL_PP_PARAMS(n,T): T1, T2, .., Tn\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_PARAMS(n,p) \\\n    BOOST_PP_CAT(BOOST_MPL_PP_PARAMS_,n)(p) \\\n    /**/\n\n#   define BOOST_MPL_PP_PARAMS_0(p)\n#   define BOOST_MPL_PP_PARAMS_1(p) p##1\n#   define BOOST_MPL_PP_PARAMS_2(p) p##1,p##2\n#   define BOOST_MPL_PP_PARAMS_3(p) p##1,p##2,p##3\n#   define BOOST_MPL_PP_PARAMS_4(p) p##1,p##2,p##3,p##4\n#   define BOOST_MPL_PP_PARAMS_5(p) p##1,p##2,p##3,p##4,p##5\n#   define BOOST_MPL_PP_PARAMS_6(p) p##1,p##2,p##3,p##4,p##5,p##6\n#   define BOOST_MPL_PP_PARAMS_7(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7\n#   define BOOST_MPL_PP_PARAMS_8(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8\n#   define BOOST_MPL_PP_PARAMS_9(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9\n\n#else\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_AUX_PARAM_FUNC(unused, i, param) \\\n    BOOST_PP_COMMA_IF(i) \\\n    BOOST_PP_CAT(param, BOOST_PP_INC(i)) \\\n    /**/\n\n#   define BOOST_MPL_PP_PARAMS(n, param) \\\n    BOOST_PP_REPEAT( \\\n          n \\\n        , BOOST_MPL_PP_AUX_PARAM_FUNC \\\n        , param \\\n        ) \\\n    /**/\n\n#endif \n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_PARTIAL_SPEC_PARAMS_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_PARTIAL_SPEC_PARAMS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/limits/arity.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/preprocessor/enum.hpp>\n#include <boost/mpl/aux_/preprocessor/sub.hpp>\n#include <boost/preprocessor/comma_if.hpp>\n\n#define BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \\\nBOOST_MPL_PP_PARAMS(n, param) \\\nBOOST_PP_COMMA_IF(BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,n)) \\\nBOOST_MPL_PP_ENUM( \\\n      BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,n) \\\n    , def \\\n    ) \\\n/**/\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_PARTIAL_SPEC_PARAMS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/range.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_RANGE_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_RANGE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/preprocessor/seq/subseq.hpp>\n#include <boost/preprocessor/repetition/repeat.hpp>\n#include <boost/preprocessor/arithmetic/add.hpp>\n\n#define BOOST_MPL_PP_RANGE_ITEM(z,n,_) (n)\n\n#define BOOST_MPL_PP_RANGE(first, length) \\\n    BOOST_PP_SEQ_SUBSEQ( \\\n        BOOST_PP_REPEAT(BOOST_PP_ADD(first,length), BOOST_MPL_PP_RANGE_ITEM, _), \\\n        first, length \\\n    ) \\\n/**/\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_RANGE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/repeat.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_REPEAT_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_REPEAT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_REPEAT(n,f,param) \\\n    BOOST_PP_CAT(BOOST_MPL_PP_REPEAT_,n)(f,param) \\\n    /**/\n    \n#   define BOOST_MPL_PP_REPEAT_0(f,p)\n#   define BOOST_MPL_PP_REPEAT_1(f,p) f(0,0,p)\n#   define BOOST_MPL_PP_REPEAT_2(f,p) f(0,0,p) f(0,1,p)\n#   define BOOST_MPL_PP_REPEAT_3(f,p) f(0,0,p) f(0,1,p) f(0,2,p)\n#   define BOOST_MPL_PP_REPEAT_4(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p)\n#   define BOOST_MPL_PP_REPEAT_5(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p)\n#   define BOOST_MPL_PP_REPEAT_6(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p)\n#   define BOOST_MPL_PP_REPEAT_7(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p)\n#   define BOOST_MPL_PP_REPEAT_8(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p) f(0,7,p)\n#   define BOOST_MPL_PP_REPEAT_9(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p) f(0,7,p) f(0,8,p)\n#   define BOOST_MPL_PP_REPEAT_10(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p) f(0,7,p) f(0,8,p) f(0,9,p)\n\n#else \n\n#   include <boost/preprocessor/repeat.hpp>\n\n#   define BOOST_MPL_PP_REPEAT(n,f,param) \\\n    BOOST_PP_REPEAT(n,f,param) \\\n    /**/\n\n#endif \n\n#define BOOST_MPL_PP_REPEAT_IDENTITY_FUNC(unused1, unused2, x) x\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_REPEAT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/sub.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/mpl/aux_/preprocessor/tuple.hpp>\n\n#if defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION)\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_SUB(i,j) \\\n    BOOST_MPL_PP_SUB_DELAY(i,j) \\\n    /**/\n\n#   define BOOST_MPL_PP_SUB_DELAY(i,j) \\\n    BOOST_PP_CAT(BOOST_MPL_PP_TUPLE_11_ELEM_##i,BOOST_MPL_PP_SUB_##j) \\\n    /**/\n#else\n#   define BOOST_MPL_PP_SUB(i,j) \\\n    BOOST_MPL_PP_SUB_DELAY(i,j) \\\n    /**/\n\n#   define BOOST_MPL_PP_SUB_DELAY(i,j) \\\n    BOOST_MPL_PP_TUPLE_11_ELEM_##i BOOST_MPL_PP_SUB_##j \\\n    /**/\n#endif\n\n#   define BOOST_MPL_PP_SUB_0 (0,1,2,3,4,5,6,7,8,9,10)\n#   define BOOST_MPL_PP_SUB_1 (0,0,1,2,3,4,5,6,7,8,9)\n#   define BOOST_MPL_PP_SUB_2 (0,0,0,1,2,3,4,5,6,7,8)\n#   define BOOST_MPL_PP_SUB_3 (0,0,0,0,1,2,3,4,5,6,7)\n#   define BOOST_MPL_PP_SUB_4 (0,0,0,0,0,1,2,3,4,5,6)\n#   define BOOST_MPL_PP_SUB_5 (0,0,0,0,0,0,1,2,3,4,5)\n#   define BOOST_MPL_PP_SUB_6 (0,0,0,0,0,0,0,1,2,3,4)\n#   define BOOST_MPL_PP_SUB_7 (0,0,0,0,0,0,0,0,1,2,3)\n#   define BOOST_MPL_PP_SUB_8 (0,0,0,0,0,0,0,0,0,1,2)\n#   define BOOST_MPL_PP_SUB_9 (0,0,0,0,0,0,0,0,0,0,1)\n#   define BOOST_MPL_PP_SUB_10 (0,0,0,0,0,0,0,0,0,0,0)\n\n#else\n\n#   include <boost/preprocessor/arithmetic/sub.hpp>\n\n#   define BOOST_MPL_PP_SUB(i,j) \\\n    BOOST_PP_SUB(i,j) \\\n    /**/\n    \n#endif\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/token_equal.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_TOKEN_EQUAL_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_TOKEN_EQUAL_HPP_INCLUDED\n\n// Copyright Paul Mensonides 2003\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/preprocessor/is_seq.hpp>\n\n#include <boost/preprocessor/if.hpp>\n#include <boost/preprocessor/logical/bitand.hpp>\n#include <boost/preprocessor/logical/compl.hpp>\n#include <boost/preprocessor/tuple/eat.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n// compares tokens 'a' and 'b' for equality:\n//\n//   #define BOOST_MPL_PP_TOKEN_EQUAL_apple(x) x\n//   #define BOOST_MPL_PP_TOKEN_EQUAL_orange(x) x\n//\n//   BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_TOKEN_EQUAL(apple, abc) ) )\n//   BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_TOKEN_EQUAL(abc, apple) ) )\n//   BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_TOKEN_EQUAL(apple, orange) ) )\n//   BOOST_PP_ASSERT( BOOST_MPL_PP_TOKEN_EQUAL(apple, apple) )\n//   BOOST_PP_ASSERT( BOOST_MPL_PP_TOKEN_EQUAL(orange, orange) )\n\n#define BOOST_MPL_PP_TOKEN_EQUAL(a, b) \\\n    BOOST_PP_IIF( \\\n        BOOST_PP_BITAND( \\\n              BOOST_MPL_PP_IS_SEQ( BOOST_PP_CAT(BOOST_MPL_PP_TOKEN_EQUAL_, a)((unused)) ) \\\n            , BOOST_MPL_PP_IS_SEQ( BOOST_PP_CAT(BOOST_MPL_PP_TOKEN_EQUAL_, b)((unused)) ) \\\n            ) \\\n        , BOOST_MPL_PP_TOKEN_EQUAL_I \\\n        , 0 BOOST_PP_TUPLE_EAT(2) \\\n        )(a, b) \\\n/**/\n\n#define BOOST_MPL_PP_TOKEN_EQUAL_I(a, b) \\\n    BOOST_PP_COMPL(BOOST_MPL_PP_IS_SEQ( \\\n        BOOST_MPL_PP_TOKEN_EQUAL_ ## a( \\\n            BOOST_MPL_PP_TOKEN_EQUAL_ ## b \\\n            )((unused)) \\\n        )) \\\n/**/\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_TOKEN_EQUAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/preprocessor/tuple.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define BOOST_MPL_PP_TUPLE_11_ELEM_0(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e0\n#define BOOST_MPL_PP_TUPLE_11_ELEM_1(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e1\n#define BOOST_MPL_PP_TUPLE_11_ELEM_2(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e2\n#define BOOST_MPL_PP_TUPLE_11_ELEM_3(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e3\n#define BOOST_MPL_PP_TUPLE_11_ELEM_4(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e4\n#define BOOST_MPL_PP_TUPLE_11_ELEM_5(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e5\n#define BOOST_MPL_PP_TUPLE_11_ELEM_6(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e6\n#define BOOST_MPL_PP_TUPLE_11_ELEM_7(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e7\n#define BOOST_MPL_PP_TUPLE_11_ELEM_8(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e8\n#define BOOST_MPL_PP_TUPLE_11_ELEM_9(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e9\n#define BOOST_MPL_PP_TUPLE_11_ELEM_10(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e10\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/ptr_to_ref.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED\n#define BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \\\n    ||  ( BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \\\n        && !(defined(__STD_STRICT_ANSI) \\\n            || defined(__STD_STRICT_ANSI_ERRORS)) )\n\n#   define BOOST_MPL_AUX_PTR_TO_REF(X) \\\n    *BOOST_MPL_AUX_STATIC_CAST(X*, 0) \\\n/**/\n\n#else\n\n#   define BOOST_MPL_AUX_PTR_TO_REF(X) \\\n    aux::ptr_to_ref(BOOST_MPL_AUX_STATIC_CAST(X*, 0)) \\\n/**/\n\n#endif\n\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T > static T const& ptr_to_ref(T*);\n\n}}}\n\n#endif // BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/push_back_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_back_fwd.hpp>\n#include <boost/mpl/assert.hpp>\n#include <boost/mpl/aux_/has_type.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\nstruct has_push_back_arg {};\n\n// agurt 05/feb/04: no default implementation; the stub definition is needed \n// to enable the default 'has_push_back' implementation below\ntemplate< typename Tag >\nstruct push_back_impl\n{\n    template< typename Sequence, typename T > struct apply\n    {\n        // should be instantiated only in the context of 'has_push_back_impl';\n        // if you've got an assert here, you are requesting a 'push_back' \n        // specialization that doesn't exist.\n        BOOST_MPL_ASSERT_MSG(\n              ( boost::is_same< T, has_push_back_arg >::value )\n            , REQUESTED_PUSH_BACK_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST\n            , ( Sequence )\n            );\n    };\n};\n\ntemplate< typename Tag >\nstruct has_push_back_impl\n{\n    template< typename Seq > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : aux::has_type< push_back< Seq, has_push_back_arg > >\n    {\n#else\n    {\n        typedef aux::has_type< push_back< Seq, has_push_back_arg > > type;\n        BOOST_STATIC_CONSTANT(bool, value = \n              (aux::has_type< push_back< Seq, has_push_back_arg > >::value)\n            );\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_back_impl)\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_back_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/push_front_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_front_fwd.hpp>\n#include <boost/mpl/assert.hpp>\n#include <boost/mpl/aux_/has_type.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\nstruct has_push_front_arg {};\n\n// agurt 05/feb/04: no default implementation; the stub definition is needed \n// to enable the default 'has_push_front' implementation below\n\ntemplate< typename Tag >\nstruct push_front_impl\n{\n    template< typename Sequence, typename T > struct apply\n    {\n        // should be instantiated only in the context of 'has_push_front_impl';\n        // if you've got an assert here, you are requesting a 'push_front' \n        // specialization that doesn't exist.\n        BOOST_MPL_ASSERT_MSG(\n              ( boost::is_same< T, has_push_front_arg >::value )\n            , REQUESTED_PUSH_FRONT_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST\n            , ( Sequence )\n            );\n    };\n};\n\ntemplate< typename Tag >\nstruct has_push_front_impl\n{\n    template< typename Seq > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : aux::has_type< push_front< Seq, has_push_front_arg > >\n    {\n#else\n    {\n        typedef aux::has_type< push_front< Seq, has_push_front_arg > > type;\n        BOOST_STATIC_CONSTANT(bool, value = \n              (aux::has_type< push_front< Seq, has_push_front_arg > >::value)\n            );\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_front_impl)\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_front_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/range_c/O1_size.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_RANGE_C_O1_SIZE_HPP_INCLUDED\n#define BOOST_MPL_AUX_RANGE_C_O1_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/O1_size_fwd.hpp>\n#include <boost/mpl/aux_/range_c/size.hpp>\n#include <boost/mpl/aux_/range_c/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct O1_size_impl< aux::half_open_range_tag >\n    : size_impl< aux::half_open_range_tag >\n{\n};\n\n}}\n\n#endif // BOOST_MPL_AUX_RANGE_C_O1_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/range_c/back.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_RANGE_C_BACK_HPP_INCLUDED\n#define BOOST_MPL_AUX_RANGE_C_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/back_fwd.hpp>\n#include <boost/mpl/prior.hpp>\n#include <boost/mpl/aux_/range_c/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct back_impl< aux::half_open_range_tag >\n{\n    template< typename Range > struct apply\n    {\n        typedef typename prior< typename Range::finish >::type type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_AUX_RANGE_C_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/range_c/empty.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_RANGE_C_EMPTY_HPP_INCLUDED\n#define BOOST_MPL_AUX_RANGE_C_EMPTY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/empty_fwd.hpp>\n#include <boost/mpl/equal_to.hpp>\n#include <boost/mpl/aux_/range_c/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct empty_impl< aux::half_open_range_tag >\n{\n    template< typename Range > struct apply\n        : equal_to<\n              typename Range::start\n            , typename Range::finish\n            >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_AUX_RANGE_C_EMPTY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/range_c/front.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_RANGE_C_FRONT_HPP_INCLUDED\n#define BOOST_MPL_AUX_RANGE_C_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/front_fwd.hpp>\n#include <boost/mpl/aux_/range_c/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct front_impl< aux::half_open_range_tag >\n{\n    template< typename Range > struct apply\n    {\n        typedef typename Range::start type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_AUX_RANGE_C_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/range_c/iterator.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_RANGE_C_ITERATOR_HPP_INCLUDED\n#define BOOST_MPL_AUX_RANGE_C_ITERATOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/advance_fwd.hpp>\n#include <boost/mpl/distance_fwd.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/plus.hpp>\n#include <boost/mpl/minus.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n// theoretically will work on any discrete numeric type\ntemplate< typename N > struct r_iter\n{\n    typedef aux::r_iter_tag tag;\n    typedef random_access_iterator_tag category;\n    typedef N type;\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    typedef r_iter< typename mpl::next<N>::type > next;\n    typedef r_iter< typename mpl::prior<N>::type > prior;\n#endif\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename N\n    >\nstruct next< r_iter<N> >\n{\n    typedef r_iter< typename mpl::next<N>::type > type;\n};\n\ntemplate<\n      typename N\n    >\nstruct prior< r_iter<N> >\n{\n    typedef r_iter< typename mpl::prior<N>::type > type;\n};\n\n#endif\n\n\ntemplate<> struct advance_impl<aux::r_iter_tag>\n{\n    template< typename Iter, typename Dist > struct apply\n    {\n        typedef typename deref<Iter>::type n_;\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n        typedef typename plus_impl<integral_c_tag,integral_c_tag>\n            ::template apply<n_,Dist>::type m_;\n#else\n        typedef typename plus<n_,Dist>::type m_;\n#endif\n        // agurt, 10/nov/04: to be generic, the code have to do something along\n        // the lines below...\n        //\n        // typedef typename apply_wrap1<\n        //       numeric_cast< typename m_::tag, typename n_::tag >\n        //     , m_\n        //     >::type result_;\n        //\n        // ... meanwhile:\n        \n        typedef integral_c< \n              typename aux::value_type_wknd<n_>::type\n            , BOOST_MPL_AUX_VALUE_WKND(m_)::value \n            > result_;\n        \n        typedef r_iter<result_> type;\n    };\n};\n\ntemplate<> struct distance_impl<aux::r_iter_tag>\n{\n    template< typename Iter1, typename Iter2 > struct apply\n        : minus<\n              typename Iter2::type\n            , typename Iter1::type\n            >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_AUX_RANGE_C_ITERATOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/range_c/size.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_RANGE_C_SIZE_HPP_INCLUDED\n#define BOOST_MPL_AUX_RANGE_C_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/minus.hpp>\n#include <boost/mpl/aux_/range_c/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct size_impl< aux::half_open_range_tag >\n{\n    template< typename Range > struct apply\n        : minus<\n              typename Range::finish\n            , typename Range::start\n            >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_AUX_RANGE_C_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/range_c/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_RANGE_C_TAG_HPP_INCLUDED\n#define BOOST_MPL_AUX_RANGE_C_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct half_open_range_tag;\nstruct r_iter_tag;\n\n}}}\n\n#endif // BOOST_MPL_AUX_RANGE_C_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/reverse_fold_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/next_prior.hpp>\n#   include <boost/mpl/deref.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n#       include <boost/mpl/if.hpp>\n#       include <boost/type_traits/is_same.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER reverse_fold_impl.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type\n#   define AUX778076_FOLD_IMPL_NAME_PREFIX reverse_fold\n#   include <boost/mpl/aux_/reverse_fold_impl_body.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/reverse_fold_impl_body.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#   include <boost/mpl/limits/unrolling.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/arithmetic/sub.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/dec.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n// local macros, #undef-ined at the end of the header\n\n#   define AUX778076_ITER_FOLD_FORWARD_STEP(unused, n_, unused2) \\\n    typedef typename apply2< \\\n          ForwardOp \\\n        , BOOST_PP_CAT(fwd_state,n_) \\\n        , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,n_)) \\\n        >::type BOOST_PP_CAT(fwd_state,BOOST_PP_INC(n_)); \\\n    typedef typename mpl::next<BOOST_PP_CAT(iter,n_)>::type \\\n        BOOST_PP_CAT(iter,BOOST_PP_INC(n_)); \\\n    /**/\n\n#   define AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC(n_) \\\n    typedef typename apply2< \\\n          BackwardOp \\\n        , BOOST_PP_CAT(bkwd_state,n_) \\\n        , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,BOOST_PP_DEC(n_))) \\\n        >::type BOOST_PP_CAT(bkwd_state,BOOST_PP_DEC(n_)); \\\n    /**/\n\n#   define AUX778076_ITER_FOLD_BACKWARD_STEP(unused, n_, j) \\\n    AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC( \\\n          BOOST_PP_SUB_D(1,j,n_) \\\n        ) \\\n    /**/\n\n#   define AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(n_) \\\n    typedef typename nested_chunk::state BOOST_PP_CAT(bkwd_state,n_);\n    /**/\n\n#   define AUX778076_FOLD_IMPL_NAME \\\n    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_impl) \\\n    /**/\n\n#   define AUX778076_FOLD_CHUNK_NAME \\\n    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_chunk) \\\n    /**/\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(long, N)\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME;\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/reverse_fold_impl_body.hpp>))\n#   include BOOST_PP_ITERATE()\n\n// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(long, N)\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n\n    BOOST_MPL_PP_REPEAT(\n          BOOST_MPL_LIMIT_UNROLLING\n        , AUX778076_ITER_FOLD_FORWARD_STEP\n        , unused\n        )\n\n    typedef AUX778076_FOLD_IMPL_NAME<\n          ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )\n        , BOOST_PP_CAT(iter,BOOST_MPL_LIMIT_UNROLLING)\n        , Last\n        , BOOST_PP_CAT(fwd_state,BOOST_MPL_LIMIT_UNROLLING)\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n        \n    AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(BOOST_MPL_LIMIT_UNROLLING)\n\n    BOOST_MPL_PP_REPEAT(\n          BOOST_MPL_LIMIT_UNROLLING\n        , AUX778076_ITER_FOLD_BACKWARD_STEP\n        , BOOST_MPL_LIMIT_UNROLLING\n        )\n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\n// fallback implementation for sequences of unknown size\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME<-1,First,Last,State,BackwardOp,ForwardOp>\n{\n    typedef AUX778076_FOLD_IMPL_NAME<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , AUX778076_FOLD_IMPL_OP(First)\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME<-1,Last,Last,State,BackwardOp,ForwardOp>\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) >\nstruct AUX778076_FOLD_CHUNK_NAME;\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/reverse_fold_impl_body.hpp>))\n#   include BOOST_PP_ITERATE()\n\n// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > \nstruct AUX778076_FOLD_CHUNK_NAME\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        > \n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n\n        BOOST_MPL_PP_REPEAT(\n              BOOST_MPL_LIMIT_UNROLLING\n            , AUX778076_ITER_FOLD_FORWARD_STEP\n            , unused\n            )\n\n        typedef AUX778076_FOLD_IMPL_NAME<\n              ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )\n            , BOOST_PP_CAT(iter,BOOST_MPL_LIMIT_UNROLLING)\n            , Last\n            , BOOST_PP_CAT(fwd_state,BOOST_MPL_LIMIT_UNROLLING)\n            , BackwardOp\n            , ForwardOp\n            > nested_chunk;\n            \n        AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(BOOST_MPL_LIMIT_UNROLLING)\n\n        BOOST_MPL_PP_REPEAT(\n              BOOST_MPL_LIMIT_UNROLLING\n            , AUX778076_ITER_FOLD_BACKWARD_STEP\n            , BOOST_MPL_LIMIT_UNROLLING\n            )\n\n        typedef bkwd_state0 state;\n        typedef typename nested_chunk::iterator iterator;\n    };\n};\n\n// fallback implementation for sequences of unknown size\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    > \nstruct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step);\n\ntemplate<\n      typename Last\n    , typename State\n    >\nstruct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)\n{\n    typedef Last iterator;\n    typedef State state;\n};\n\ntemplate<> \nstruct AUX778076_FOLD_CHUNK_NAME<-1>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        > \n    struct result_\n    {\n        typedef typename if_<\n              typename is_same<First,Last>::type\n            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)<Last,State>\n            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)<First,Last,State,BackwardOp,ForwardOp>\n            >::type res_;\n\n        typedef typename res_::state state;\n        typedef typename res_::iterator iterator;\n    };\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n    /// ETI workaround\n    template<> struct result_<int,int,int,int,int>\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n#endif\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    > \nstruct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)\n{\n    typedef AUX778076_FOLD_CHUNK_NAME<-1>::template result_<\n          typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , AUX778076_FOLD_IMPL_OP(First)\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(long, N)\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    > \nstruct AUX778076_FOLD_IMPL_NAME\n    : AUX778076_FOLD_CHUNK_NAME<N>\n        ::template result_<First,Last,State,BackwardOp,ForwardOp>\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n}}}\n\n#   undef AUX778076_FIRST_BACKWARD_STATE_TYPEDEF\n#   undef AUX778076_ITER_FOLD_BACKWARD_STEP\n#   undef AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC\n#   undef AUX778076_ITER_FOLD_FORWARD_STEP\n\n#undef AUX778076_FOLD_IMPL_OP\n#undef AUX778076_FOLD_IMPL_NAME_PREFIX\n\n///// iteration\n\n#else\n\n#   define n_ BOOST_PP_FRAME_ITERATION(1)\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct AUX778076_FOLD_IMPL_NAME<n_,First,Last,State,BackwardOp,ForwardOp>\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n\n    BOOST_MPL_PP_REPEAT(\n          n_\n        , AUX778076_ITER_FOLD_FORWARD_STEP\n        , unused\n        )\n\n    typedef BOOST_PP_CAT(fwd_state,n_) BOOST_PP_CAT(bkwd_state,n_);\n\n    BOOST_MPL_PP_REPEAT(\n          n_\n        , AUX778076_ITER_FOLD_BACKWARD_STEP\n        , n_\n        )\n\n    typedef bkwd_state0 state;\n    typedef BOOST_PP_CAT(iter,n_) iterator;\n};\n\n#else\n\ntemplate<> struct AUX778076_FOLD_CHUNK_NAME<n_>\n{\n    template<\n          typename First\n        , typename Last\n        , typename State\n        , typename BackwardOp\n        , typename ForwardOp\n        >\n    struct result_\n    {\n        typedef First iter0;\n        typedef State fwd_state0;\n\n        BOOST_MPL_PP_REPEAT(\n              n_\n            , AUX778076_ITER_FOLD_FORWARD_STEP\n            , unused\n            )\n\n        typedef BOOST_PP_CAT(fwd_state,n_) BOOST_PP_CAT(bkwd_state,n_);\n\n        BOOST_MPL_PP_REPEAT(\n              n_\n            , AUX778076_ITER_FOLD_BACKWARD_STEP\n            , n_\n            )\n\n        typedef bkwd_state0 state;\n        typedef BOOST_PP_CAT(iter,n_) iterator;\n    };\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n    /// ETI workaround\n    template<> struct result_<int,int,int,int,int>\n    {\n        typedef int state;\n        typedef int iterator;\n    };\n#endif\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#   undef n_\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ITER_FOLD_BACKWARD_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_ITER_FOLD_BACKWARD_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/next_prior.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n#       include <boost/mpl/if.hpp>\n#       include <boost/type_traits/is_same.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER reverse_iter_fold_impl.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   define AUX778076_FOLD_IMPL_OP(iter) iter\n#   define AUX778076_FOLD_IMPL_NAME_PREFIX reverse_iter_fold\n#   include <boost/mpl/aux_/reverse_fold_impl_body.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_ITER_FOLD_BACKWARD_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/sequence_wrapper.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/static_constant.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/arithmetic/sub.hpp>\n#   include <boost/preprocessor/tuple/elem.hpp>\n#   include <boost/preprocessor/enum_params_with_a_default.hpp>\n#   include <boost/preprocessor/enum_params.hpp>\n#   include <boost/preprocessor/enum.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\n#if defined(BOOST_MPL_PREPROCESSING_MODE)\n#   undef LONG_MAX\n#endif\n\nnamespace boost { namespace mpl {\n\n#if !defined(AUX778076_SEQUENCE_BASE_NAME)\n#   define AUX778076_SEQUENCE_BASE_NAME AUX778076_SEQUENCE_NAME\n#endif\n\n#if !defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)\n\n#   define AUX778076_SEQUENCE_PARAM_NAME T\n#   define AUX778076_SEQUENCE_TEMPLATE_PARAM typename T\n#   define AUX778076_SEQUENCE_DEFAULT na\n\n#   define AUX778076_SEQUENCE_NAME_N(n) \\\n    BOOST_PP_CAT(AUX778076_SEQUENCE_BASE_NAME,n) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_PARAMS() \\\n    BOOST_PP_ENUM_PARAMS( \\\n          AUX778076_SEQUENCE_LIMIT \\\n        , AUX778076_SEQUENCE_TEMPLATE_PARAM \\\n        ) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_ARGS() \\\n    BOOST_PP_ENUM_PARAMS( \\\n          AUX778076_SEQUENCE_LIMIT \\\n        , T \\\n        ) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_DEFAULT_PARAMS() \\\n     BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \\\n          AUX778076_SEQUENCE_LIMIT \\\n        , AUX778076_SEQUENCE_TEMPLATE_PARAM \\\n        , AUX778076_SEQUENCE_DEFAULT \\\n        ) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_N_PARAMS(n) \\\n    BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_N_ARGS(n) \\\n    BOOST_PP_ENUM_PARAMS(n, T) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \\\n    BOOST_PP_ENUM_PARAMS(n, T) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_PP_ENUM( \\\n          BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \\\n        , BOOST_PP_TUPLE_ELEM_3_2 \\\n        , AUX778076_SEQUENCE_DEFAULT \\\n        ) \\\n    /**/\n\n#else // AUX778076_SEQUENCE_INTEGRAL_WRAPPER\n\n#   define AUX778076_SEQUENCE_PARAM_NAME C\n#   define AUX778076_SEQUENCE_TEMPLATE_PARAM BOOST_MPL_AUX_NTTP_DECL(long, C)\n#   define AUX778076_SEQUENCE_DEFAULT LONG_MAX\n\n#   define AUX778076_SEQUENCE_PARAMS() \\\n    typename T, BOOST_PP_ENUM_PARAMS( \\\n          AUX778076_SEQUENCE_LIMIT \\\n        , AUX778076_SEQUENCE_TEMPLATE_PARAM \\\n        ) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_ARGS() \\\n    T, BOOST_PP_ENUM_PARAMS( \\\n          AUX778076_SEQUENCE_LIMIT \\\n        , C \\\n        ) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_DEFAULT_PARAMS() \\\n    typename T, \\\n    BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \\\n          AUX778076_SEQUENCE_LIMIT \\\n        , AUX778076_SEQUENCE_TEMPLATE_PARAM \\\n        , AUX778076_SEQUENCE_DEFAULT \\\n        ) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_N_PARAMS(n) \\\n    typename T BOOST_PP_COMMA_IF(n) \\\n    BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \\\n    /**/\n\n#   if !defined(AUX778076_SEQUENCE_CONVERT_CN_TO)\n#       define AUX778076_SEQUENCE_CONVERT_CN_TO(z,n,TARGET) BOOST_PP_CAT(C,n)\n#   endif\n\n#   define AUX778076_SEQUENCE_N_ARGS(n) \\\n    T BOOST_PP_COMMA_IF(n) \\\n    BOOST_PP_ENUM(n,AUX778076_SEQUENCE_CONVERT_CN_TO,T) \\\n    /**/\n\n#   define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \\\n    T, BOOST_PP_ENUM_PARAMS(n, C) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_PP_ENUM( \\\n          BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \\\n        , BOOST_PP_TUPLE_ELEM_3_2 \\\n        , AUX778076_SEQUENCE_DEFAULT \\\n        ) \\\n    /**/\n\n#endif // AUX778076_SEQUENCE_INTEGRAL_WRAPPER\n\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n// forward declaration\ntemplate<\n      AUX778076_SEQUENCE_DEFAULT_PARAMS()\n    >\nstruct AUX778076_SEQUENCE_NAME;\n#else\nnamespace aux {\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > \nstruct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser);\n}\n#endif\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, AUX778076_SEQUENCE_LIMIT, <boost/mpl/aux_/sequence_wrapper.hpp>))\n#include BOOST_PP_ITERATE()\n\n// real C++ version is already taken care of\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\nnamespace aux {\n// ???_count_args\n#define AUX778076_COUNT_ARGS_PREFIX         AUX778076_SEQUENCE_NAME\n#define AUX778076_COUNT_ARGS_DEFAULT        AUX778076_SEQUENCE_DEFAULT\n#define AUX778076_COUNT_ARGS_PARAM_NAME     AUX778076_SEQUENCE_PARAM_NAME\n#define AUX778076_COUNT_ARGS_TEMPLATE_PARAM AUX778076_SEQUENCE_TEMPLATE_PARAM\n#define AUX778076_COUNT_ARGS_ARITY          AUX778076_SEQUENCE_LIMIT\n#define AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES\n#include <boost/mpl/aux_/count_args.hpp>\n\ntemplate<\n      AUX778076_SEQUENCE_PARAMS()\n    >\nstruct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)\n{\n    typedef aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_count_args)<\n          BOOST_PP_ENUM_PARAMS(AUX778076_SEQUENCE_LIMIT, AUX778076_SEQUENCE_PARAM_NAME)\n        > arg_num_;\n    \n    typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)< arg_num_::value >\n        ::template result_< AUX778076_SEQUENCE_ARGS() >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      AUX778076_SEQUENCE_DEFAULT_PARAMS()\n    >\nstruct AUX778076_SEQUENCE_NAME\n    : aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<\n          AUX778076_SEQUENCE_ARGS()\n        >::type\n{\n    typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<\n          AUX778076_SEQUENCE_ARGS()\n        >::type type;\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#   undef AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS\n#   undef AUX778076_SEQUENCE_N_ARGS\n#   undef AUX778076_SEQUENCE_CONVERT_CN_TO\n#   undef AUX778076_SEQUENCE_N_PARAMS\n#   undef AUX778076_SEQUENCE_DEFAULT_PARAMS\n#   undef AUX778076_SEQUENCE_ARGS\n#   undef AUX778076_SEQUENCE_PARAMS\n#   undef AUX778076_SEQUENCE_NAME_N\n#   undef AUX778076_SEQUENCE_DEFAULT\n#   undef AUX778076_SEQUENCE_TEMPLATE_PARAM\n#   undef AUX778076_SEQUENCE_PARAM_NAME\n#   undef AUX778076_SEQUENCE_LIMIT\n#   undef AUX778076_SEQUENCE_BASE_NAME\n#   undef AUX778076_SEQUENCE_NAME\n#   undef AUX778076_SEQUENCE_INTEGRAL_WRAPPER\n\n}}\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n#if i_ == AUX778076_SEQUENCE_LIMIT\n\n/// primary template (not a specialization!)\ntemplate<\n      AUX778076_SEQUENCE_N_PARAMS(i_)\n    >\nstruct AUX778076_SEQUENCE_NAME\n    : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >\n{\n    typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;\n};\n\n#else\n\ntemplate<\n      AUX778076_SEQUENCE_N_PARAMS(i_)\n    >\nstruct AUX778076_SEQUENCE_NAME< AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(i_) >\n    : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >\n{\n#if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)\n    typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;\n#else\n    typedef AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;\n#endif\n};\n\n#endif // i_ == AUX778076_SEQUENCE_LIMIT\n\n#   else\n\nnamespace aux {\n\ntemplate<>\nstruct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)<i_>\n{\n    template<\n          AUX778076_SEQUENCE_PARAMS()\n        >\n    struct result_\n    {\n#if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)\n        typedef typename AUX778076_SEQUENCE_NAME_N(i_)<\n              AUX778076_SEQUENCE_N_ARGS(i_)\n            >::type type;\n#else\n        typedef AUX778076_SEQUENCE_NAME_N(i_)<\n              AUX778076_SEQUENCE_N_ARGS(i_)\n            >::type type;\n#endif\n    };\n};\n\n} // namespace aux\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/shift_op.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/integral_c.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#endif\n\n#if !defined(AUX778076_OP_PREFIX)\n#   define AUX778076_OP_PREFIX AUX778076_OP_NAME\n#endif\n\n#define AUX778076_OP_ARITY 2\n\n#include <boost/mpl/aux_/numeric_op.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/integral.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\nnamespace aux {\ntemplate< typename T, typename Shift, T n, Shift s >\nstruct BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)\n{\n    BOOST_STATIC_CONSTANT(T, value = (n AUX778076_OP_TOKEN s));\n    typedef integral_c<T,value> type;\n};\n}\n#endif\n\ntemplate<>\nstruct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>\n{\n    template< typename N, typename S > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\n        : integral_c<\n              typename N::value_type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value\n                  AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(S)::value\n                )\n            >\n#else\n        : aux::BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)<\n              typename N::value_type\n            , typename S::value_type\n            , N::value\n            , S::value\n            >::type\n#endif\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#undef AUX778076_OP_TAG_NAME\n#undef AUX778076_OP_IMPL_NAME\n#undef AUX778076_OP_ARITY\n#undef AUX778076_OP_PREFIX\n#undef AUX778076_OP_NAME\n#undef AUX778076_OP_TOKEN\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/single_element_iter.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_HPP_INCLUDED\n#define BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/advance_fwd.hpp>\n#include <boost/mpl/distance_fwd.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl { \n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\nnamespace aux {\n\ntemplate< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_) >\nstruct sel_iter;\n\ntemplate< typename T >\nstruct sel_iter<T,0>\n{\n    typedef random_access_iterator_tag category;\n    typedef sel_iter<T,1> next;\n    typedef T type;\n};\n\ntemplate< typename T >\nstruct sel_iter<T,1>\n{\n    typedef random_access_iterator_tag category;\n    typedef sel_iter<T,0> prior;\n};\n\n} // namespace aux\n\ntemplate< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_), typename Distance >\nstruct advance< aux::sel_iter<T,is_last_>,Distance>\n{\n    typedef aux::sel_iter<\n          T\n        , ( is_last_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Distance) )\n        > type;\n};\n\ntemplate< \n      typename T\n    , BOOST_MPL_AUX_NTTP_DECL(int, l1)\n    , BOOST_MPL_AUX_NTTP_DECL(int, l2) \n    >\nstruct distance< aux::sel_iter<T,l1>, aux::sel_iter<T,l2> >\n    : int_<( l2 - l1 )>\n{\n};\n\n#else\n\nnamespace aux {\n\nstruct sel_iter_tag;\n\ntemplate< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_) >\nstruct sel_iter\n{\n    enum { pos_ = is_last_ };\n    typedef aux::sel_iter_tag tag;\n    typedef random_access_iterator_tag category;\n\n    typedef sel_iter<T,(is_last_ + 1)> next;\n    typedef sel_iter<T,(is_last_ - 1)> prior;\n    typedef T type;\n};\n\n} // namespace aux\n\ntemplate<> struct advance_impl<aux::sel_iter_tag>\n{\n    template< typename Iterator, typename N > struct apply\n    {\n        enum { pos_ = Iterator::pos_, n_ = N::value };\n        typedef aux::sel_iter<\n              typename Iterator::type\n            , (pos_ + n_)\n            > type;\n    };\n};\n\ntemplate<> struct distance_impl<aux::sel_iter_tag>\n{\n    template< typename Iter1, typename Iter2 > struct apply\n    {\n        enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };\n        typedef int_<( pos2_ - pos1_ )> type;\n        BOOST_STATIC_CONSTANT(int, value = ( pos2_ - pos1_ ));\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n}}\n\n#endif // BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/size_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/distance.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'size_impl' or the primary 'size' template\n\ntemplate< typename Tag >\nstruct size_impl\n{\n    template< typename Sequence > struct apply\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561))\n        : distance<\n              typename begin<Sequence>::type\n            , typename end<Sequence>::type\n            >\n    {\n#else\n    {\n        typedef typename distance<\n              typename begin<Sequence>::type\n            , typename end<Sequence>::type\n            >::type type;\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, size_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/sort_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/partition.hpp>\n#include <boost/mpl/copy.hpp>\n#include <boost/mpl/vector.hpp>\n#include <boost/mpl/back_inserter.hpp>\n#include <boost/mpl/front_inserter.hpp>\n#include <boost/mpl/iterator_range.hpp>\n#include <boost/mpl/joint_view.hpp>\n#include <boost/mpl/single_view.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/empty.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/less.hpp>\n#include <boost/mpl/aux_/na.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Seq, typename Pred >\nstruct quick_sort;\n\n// agurt, 10/nov/04: for the sake of deficeint compilers \ntemplate< typename Pred, typename Pivot >\nstruct quick_sort_pred\n{\n    template< typename T > struct apply\n    {\n        typedef typename apply2<Pred,T,Pivot>::type type;\n    };\n};\n\ntemplate< \n      typename Seq\n    , typename Pred\n    >\nstruct quick_sort_impl\n{\n    typedef typename begin<Seq>::type pivot;\n    typedef typename partition<\n          iterator_range< \n              typename next<pivot>::type\n            , typename end<Seq>::type\n            >\n        , protect< aux::quick_sort_pred< Pred, typename deref<pivot>::type > >\n        , back_inserter< vector<> >\n        , back_inserter< vector<> >\n        >::type partitioned;\n\n    typedef typename quick_sort< typename partitioned::first, Pred >::type part1;\n    typedef typename quick_sort< typename partitioned::second, Pred >::type part2;\n\n    typedef joint_view< \n              joint_view< part1, single_view< typename deref<pivot>::type > >\n            , part2\n            > type;\n};\n\ntemplate< \n      typename Seq\n    , typename Pred\n    >\nstruct quick_sort\n    : eval_if<\n          empty<Seq>\n        , identity<Seq>\n        , quick_sort_impl<Seq,Pred>\n        >\n{\n};\n\n\ntemplate <\n      typename Sequence\n    , typename Pred\n    , typename In\n    >\nstruct sort_impl\n{\n    typedef typename quick_sort< \n          Sequence\n        , typename if_na<Pred,less<> >::type\n        >::type result_;\n        \n    typedef typename copy<result_,In>::type type;\n};\n\ntemplate <\n      typename Sequence\n    , typename Pred\n    , typename In\n    >\nstruct reverse_sort_impl\n{\n    typedef typename quick_sort< \n          Sequence\n        , typename if_na<Pred,less<> >::type\n        >::type result_;\n        \n    typedef typename reverse_copy<result_,In>::type type;\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/static_cast.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED\n#define BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \\\n || BOOST_WORKAROUND(__GNUC__, < 3) \\\n || BOOST_WORKAROUND(__MWERKS__, <= 0x3001)\n#   define BOOST_MPL_AUX_STATIC_CAST(T, expr) (T)(expr)\n#else\n#   define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)\n#endif\n\n#endif // BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/template_arity.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED\n#define BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/ttp.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/aux_/template_arity_fwd.hpp>\n#   include <boost/mpl/int.hpp>\n#   if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n#       include <boost/mpl/aux_/type_wrapper.hpp>\n#   endif\n#   else\n#       include <boost/mpl/aux_/has_rebind.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER template_arity.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/range.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/seq/fold_left.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define AUX778076_ARITY BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct arity_tag\n{\n    typedef char (&type)[N + 1];\n};\n\n#   define AUX778076_MAX_ARITY_OP(unused, state, i_) \\\n    ( BOOST_PP_CAT(C,i_) > 0 ? BOOST_PP_CAT(C,i_) : state ) \\\n/**/\n\ntemplate<\n      BOOST_MPL_PP_PARAMS(AUX778076_ARITY, BOOST_MPL_AUX_NTTP_DECL(int, C))\n    >\nstruct max_arity\n{\n    BOOST_STATIC_CONSTANT(int, value = \n          BOOST_PP_SEQ_FOLD_LEFT(\n              AUX778076_MAX_ARITY_OP\n            , -1\n            , BOOST_MPL_PP_RANGE(1, AUX778076_ARITY)\n            )\n        );\n};\n\n#   undef AUX778076_MAX_ARITY_OP\n\narity_tag<0>::type arity_helper(...);\n\n#   define BOOST_PP_ITERATION_LIMITS (1, AUX778076_ARITY)\n#   define BOOST_PP_FILENAME_1 <boost/mpl/aux_/template_arity.hpp>\n#   include BOOST_PP_ITERATE()\n\ntemplate< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) >\nstruct template_arity_impl\n{\n    BOOST_STATIC_CONSTANT(int, value = \n          sizeof(::boost::mpl::aux::arity_helper(type_wrapper<F>(),arity_tag<N>())) - 1\n        );\n};\n\n#   define AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION(unused, i_, F) \\\n    BOOST_PP_COMMA_IF(i_) template_arity_impl<F,BOOST_PP_INC(i_)>::value \\\n/**/\n\ntemplate< typename F >\nstruct template_arity\n{\n    BOOST_STATIC_CONSTANT(int, value = (\n          max_arity< BOOST_MPL_PP_REPEAT(\n              AUX778076_ARITY\n            , AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION\n            , F\n            ) >::value\n        ));\n        \n    typedef mpl::int_<value> type;\n};\n\n#   undef AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION\n\n#   undef AUX778076_ARITY\n\n}}}\n\n#   endif // BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING\n#   else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#   include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< bool >\nstruct template_arity_impl\n{\n    template< typename F > struct result_\n        : mpl::int_<-1>\n    {\n    };\n};\n\ntemplate<>\nstruct template_arity_impl<true>\n{\n    template< typename F > struct result_\n        : F::arity\n    {\n    };\n};\n\ntemplate< typename F >\nstruct template_arity\n    : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >\n        ::template result_<F>\n{\n};\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\ntemplate<>\nstruct template_arity<int>\n    : mpl::int_<-1>\n{\n};\n#endif\n\n}}}\n\n#   endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      template< BOOST_MPL_PP_PARAMS(i_, typename P) > class F\n    , BOOST_MPL_PP_PARAMS(i_, typename T)\n    >\ntypename arity_tag<i_>::type\narity_helper(type_wrapper< F<BOOST_MPL_PP_PARAMS(i_, T)> >, arity_tag<i_>);\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/template_arity_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED\n#define BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename F > struct template_arity;\n\n}}}\n\n#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/test/assert.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TEST_ASSERT_HPP_INCLUDED\n#define BOOST_MPL_AUX_TEST_ASSERT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/assert.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n#define MPL_ASSERT(pred)                BOOST_MPL_ASSERT(pred)\n#define MPL_ASSERT_NOT(pred)            BOOST_MPL_ASSERT_NOT(pred)\n#define MPL_ASSERT_MSG(c, msg, types)   BOOST_MPL_ASSERT_MSG(c, msg, types)\n#define MPL_ASSERT_RELATION(x, rel, y)  BOOST_MPL_ASSERT_RELATION(x, rel, y)\n\n#define MPL_ASSERT_INSTANTIATION(x) \\\n    enum { BOOST_PP_CAT(instantiation_test, __LINE__) = sizeof( x ) } \\\n/**/\n\n#endif // BOOST_MPL_AUX_TEST_ASSERT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/test/data.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TEST_DATA_HPP_INCLUDED\n#define BOOST_MPL_AUX_TEST_DATA_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/noncopyable.hpp>\n\nenum enum_ {};\nstruct UDT {};\nstruct incomplete;\nclass abstract { public: virtual ~abstract() = 0; };\nusing boost::noncopyable;\n\n#endif // BOOST_MPL_AUX_TEST_DATA_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/test/test_case.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TEST_TEST_CASE_HPP_INCLUDED\n#define BOOST_MPL_AUX_TEST_TEST_CASE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/preprocessor/cat.hpp>\n\n#define MPL_TEST_CASE() void BOOST_PP_CAT(test,__LINE__)()\n\n#endif // BOOST_MPL_AUX_TEST_TEST_CASE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/test.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TEST_HPP_INCLUDED\n#define BOOST_MPL_AUX_TEST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/test/test_case.hpp>\n#include <boost/mpl/aux_/test/data.hpp>\n#include <boost/mpl/aux_/test/assert.hpp>\n#include <boost/detail/lightweight_test.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nint main()\n{\n    return boost::report_errors();\n}\n\nusing namespace boost;\nusing namespace mpl;\n\n#endif // BOOST_MPL_AUX_TEST_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/traits_lambda_spec.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED\n#define BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/sequence_tag_fwd.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n\n#   define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) /**/\n\n#elif !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n\n#   define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \\\ntemplate<> struct trait<void_> \\\n{ \\\n    template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \\\n    { \\\n    }; \\\n}; \\\n/**/\n\n#else\n\n#   define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \\\ntemplate<> struct trait<void_> \\\n{ \\\n    template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \\\n    { \\\n    }; \\\n}; \\\ntemplate<> struct trait<int> \\\n{ \\\n    template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \\\n    { \\\n        typedef int type; \\\n    }; \\\n}; \\\n/**/\n\n#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n\n#define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(i, trait) \\\n    BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \\\n    template<> struct trait<non_sequence_tag> {}; \\\n/**/\n\n#endif // BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/transform_iter.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TRANSFORM_ITER_HPP_INCLUDED\n#define BOOST_MPL_AUX_TRANSFORM_ITER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/aux_/lambda_spec.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl { \n\nnamespace aux {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename Iterator\n    , typename LastIterator\n    , typename F\n    >\nstruct transform_iter\n{\n    typedef Iterator base;\n    typedef forward_iterator_tag category;\n    typedef transform_iter< typename mpl::next<base>::type,LastIterator,F > next;\n    \n    typedef typename apply1<\n          F\n        , typename deref<base>::type\n        >::type type;\n};\n\ntemplate<\n      typename LastIterator\n    , typename F\n    >\nstruct transform_iter< LastIterator,LastIterator,F >\n{\n    typedef LastIterator base;\n    typedef forward_iterator_tag category;\n};\n\n#else\n\ntemplate<\n      typename Iterator\n    , typename LastIterator\n    , typename F\n    >\nstruct transform_iter;\n\ntemplate< bool >\nstruct transform_iter_impl \n{\n    template<\n          typename Iterator\n        , typename LastIterator\n        , typename F\n        >\n    struct result_\n    {\n        typedef Iterator base;\n        typedef forward_iterator_tag category;\n        typedef transform_iter< typename mpl::next<Iterator>::type,LastIterator,F > next;\n        \n        typedef typename apply1<\n              F\n            , typename deref<Iterator>::type\n            >::type type;\n    };\n};\n\ntemplate<>\nstruct transform_iter_impl<true>\n{\n    template<\n          typename Iterator\n        , typename LastIterator\n        , typename F\n        >\n    struct result_\n    {\n        typedef Iterator base;\n        typedef forward_iterator_tag category;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename LastIterator\n    , typename F\n    >\nstruct transform_iter\n    : transform_iter_impl<\n          ::boost::is_same<Iterator,LastIterator>::value\n        >::template result_< Iterator,LastIterator,F >\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace aux\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::transform_iter)\n\n}}\n\n#endif // BOOST_MPL_AUX_TRANSFORM_ITER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/type_wrapper.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED\n#define BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Peter Dimov 2000-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T > struct type_wrapper\n{\n    typedef T type;\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n// agurt 08/may/03: a complicated way to extract the wrapped type; need it \n// mostly for the sake of GCC (3.2.x), which ICEs if you try to extract the \n// nested 'type' from 'type_wrapper<T>' when the latter was the result of a\n// 'typeof' expression\ntemplate< typename T > struct wrapped_type;\n\ntemplate< typename T > struct wrapped_type< type_wrapper<T> >\n{\n    typedef T type;\n};\n#else\ntemplate< typename W > struct wrapped_type\n{\n    typedef typename W::type type;\n};\n#endif\n\n}}}\n\n#endif // BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/unwrap.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED\n#define BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED\n\n// Copyright Peter Dimov and Multi Media Ltd 2001, 2002\n// Copyright David Abrahams 2001\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/ref.hpp>\n#include <boost/mpl/aux_/config/gpu.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename F >\nBOOST_MPL_CFG_GPU_ENABLED\ninline\nF& unwrap(F& f, long)\n{\n    return f;\n}\n\ntemplate< typename F >\nBOOST_MPL_CFG_GPU_ENABLED\ninline\nF&\nunwrap(reference_wrapper<F>& f, int)\n{\n    return f;\n}\n\ntemplate< typename F >\nBOOST_MPL_CFG_GPU_ENABLED\ninline\nF&\nunwrap(reference_wrapper<F> const& f, int)\n{\n    return f;\n}\n\n}}}\n\n#endif // BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/value_wknd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED\n#define BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/config/integral.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \\\n    || defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n\n#   include <boost/mpl/int.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\ntemplate< typename C_ > struct value_wknd\n    : C_\n{\n};\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\ntemplate<> struct value_wknd<int>\n    : int_<1>\n{\n    using int_<1>::value;\n};\n#endif\n}}}\n\n\n#if !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n#   define BOOST_MPL_AUX_VALUE_WKND(C) \\\n    ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux::value_wknd< C > \\\n/**/\n#    define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) BOOST_MPL_AUX_VALUE_WKND(C)\n#else\n#   define BOOST_MPL_AUX_VALUE_WKND(C) C\n#   define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) \\\n    ::boost::mpl::aux::value_wknd< C > \\\n/**/\n#endif\n\n#else // BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS\n\n#   define BOOST_MPL_AUX_VALUE_WKND(C) C\n#   define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) C\n\n#endif\n\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n#   define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \\\n    BOOST_MPL_AUX_STATIC_CAST(T, C::value) \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \\\n    BOOST_MPL_AUX_VALUE_WKND(C)::value \\\n/**/\n#endif\n\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T > struct value_type_wknd\n{\n    typedef typename T::value_type type;\n};\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\ntemplate<> struct value_type_wknd<int>\n{\n    typedef int type;\n};\n#endif\n\n}}}\n\n#endif // BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/aux_/yes_no.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_YES_NO_HPP_INCLUDED\n#define BOOST_MPL_AUX_YES_NO_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/arrays.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n\nnamespace boost { namespace mpl { namespace aux {\n\ntypedef char (&no_tag)[1];\ntypedef char (&yes_tag)[2];\n\ntemplate< bool C_ > struct yes_no_tag\n{\n    typedef no_tag type;\n};\n\ntemplate<> struct yes_no_tag<true>\n{\n    typedef yes_tag type;\n};\n\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, n) > struct weighted_tag\n{\n#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    typedef char (&type)[n];\n#else\n    char buf[n];\n    typedef weighted_tag type;\n#endif\n};\n\n#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)\ntemplate<> struct weighted_tag<0>\n{\n    typedef char (&type)[1];\n};\n#endif\n\n}}}\n\n#endif // BOOST_MPL_AUX_YES_NO_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/back.hpp",
    "content": "\n#ifndef BOOST_MPL_BACK_HPP_INCLUDED\n#define BOOST_MPL_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/back_fwd.hpp>\n#include <boost/mpl/aux_/back_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct back\n    : back_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,back,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, back)\n\n}}\n\n#endif // BOOST_MPL_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/back_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_BACK_FWD_HPP_INCLUDED\n#define BOOST_MPL_BACK_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct back_impl;\ntemplate< typename Sequence > struct back;\n\n}}\n\n#endif // BOOST_MPL_BACK_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/back_inserter.hpp",
    "content": "\n#ifndef BOOST_MPL_BACK_INSERTER_HPP_INCLUDED\n#define BOOST_MPL_BACK_INSERTER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_back.hpp>\n#include <boost/mpl/inserter.hpp>\n\nnamespace boost {\nnamespace mpl {\n\ntemplate<\n      typename Sequence\n    >\nstruct back_inserter\n    : inserter< Sequence,push_back<> >\n{\n};\n\n}}\n\n#endif // BOOST_MPL_BACK_INSERTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/base.hpp",
    "content": "\n#ifndef BOOST_MPL_BASE_HPP_INCLUDED\n#define BOOST_MPL_BASE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct base\n{\n    typedef typename T::base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,base,(T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, base)\n\n}}\n\n#endif // BOOST_MPL_BASE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/begin.hpp",
    "content": "\n#ifndef BOOST_MPL_BEGIN_HPP_INCLUDED\n#define BOOST_MPL_BEGIN_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n\n#endif // BOOST_MPL_BEGIN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/begin_end.hpp",
    "content": "\n#ifndef BOOST_MPL_BEGIN_END_HPP_INCLUDED\n#define BOOST_MPL_BEGIN_END_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end_fwd.hpp>\n#include <boost/mpl/aux_/begin_end_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\n// agurt, 13/sep/02: switched from inheritance to typedef; MSVC is more\n// happy this way (less ETI-related errors), and it doesn't affect \n// anything else\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct begin\n{\n    typedef typename sequence_tag<Sequence>::type tag_;\n    typedef typename begin_impl< tag_ >\n        ::template apply< Sequence >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,begin,(Sequence))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct end\n{\n    typedef typename sequence_tag<Sequence>::type tag_;\n    typedef typename end_impl< tag_ >\n        ::template apply< Sequence >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,end,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, begin)\nBOOST_MPL_AUX_NA_SPEC(1, end)\n\n}}\n\n#endif // BOOST_MPL_BEGIN_END_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/begin_end_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED\n#define BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct begin_impl;\ntemplate< typename Tag > struct end_impl;\n\ntemplate< typename Sequence > struct begin;\ntemplate< typename Sequence > struct end;\n\n}}\n\n#endif // BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/bind.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_BIND_HPP_INCLUDED\n#define BOOST_MPL_BIND_HPP_INCLUDED\n\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/bind_fwd.hpp>\n#   include <boost/mpl/placeholders.hpp>\n#   include <boost/mpl/next.hpp>\n#   include <boost/mpl/protect.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/arity_spec.hpp>\n#   include <boost/mpl/aux_/type_wrapper.hpp>\n#   include <boost/mpl/aux_/yes_no.hpp>\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#       include <boost/type_traits/is_reference.hpp>\n#   endif \n#endif\n\n#include <boost/mpl/aux_/config/bind.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   if defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n#       define BOOST_MPL_PREPROCESSED_HEADER basic_bind.hpp\n#   else\n#       define BOOST_MPL_PREPROCESSED_HEADER bind.hpp\n#   endif\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>\n#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/ext_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/preprocessor/add.hpp>\n#   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/ttp.hpp>\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n#   define AUX778076_APPLY \\\n    BOOST_PP_CAT(apply_wrap,BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \\\n    /**/\n\n#   if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\n#       define AUX778076_DMC_PARAM() , int dummy_\n#   else\n#       define AUX778076_DMC_PARAM()\n#   endif\n\n#   define AUX778076_BIND_PARAMS(param) \\\n    BOOST_MPL_PP_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        ) \\\n    /**/\n\n#   define AUX778076_BIND_DEFAULT_PARAMS(param, value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    /**/\n\n#   define AUX778076_BIND_N_PARAMS(n, param) \\\n    BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   define AUX778076_BIND_N_SPEC_PARAMS(n, param, def) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \\\n    /**/\n\n#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \\\n    AUX778076_BIND_DEFAULT_PARAMS(param, value) \\\n    /**/\n#else\n#   define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \\\n    AUX778076_BIND_PARAMS(param) \\\n    /**/\n#endif\n\nnamespace aux {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename T, AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\n#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg<-1>,Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\n#   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\n\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(int, N), AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg< arg<N>,AUX778076_BIND_PARAMS(U) >\n{\n    typedef typename AUX778076_APPLY<mpl::arg<N>, AUX778076_BIND_PARAMS(U)>::type type;\n};\n\n#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\ntemplate<\n      typename F, AUX778076_BIND_PARAMS(typename T), AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg< bind<F,AUX778076_BIND_PARAMS(T)>,AUX778076_BIND_PARAMS(U) >\n{\n    typedef bind<F,AUX778076_BIND_PARAMS(T)> f_;\n    typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;\n};\n#endif\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n// agurt, 15/jan/02: it's not a intended to be used as a function class, and \n// MSVC6.5 has problems with 'apply' name here (the code compiles, but doesn't\n// work), so I went with the 'result_' here, and in all other similar cases\ntemplate< bool >\nstruct resolve_arg_impl\n{\n    template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<> \nstruct resolve_arg_impl<true>\n{\n    template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_\n    {\n        typedef typename AUX778076_APPLY<\n              T\n            , AUX778076_BIND_PARAMS(U)\n            >::type type;\n    };\n};\n\n// for 'resolve_bind_arg'\ntemplate< typename T > struct is_bind_template;\n\ntemplate< \n      typename T, AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg\n    : resolve_arg_impl< is_bind_template<T>::value >\n            ::template result_< T,AUX778076_BIND_PARAMS(U) >\n{\n};\n\n#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n\ntemplate< typename T > \nstruct replace_unnamed_arg_impl\n{\n    template< typename Arg > struct result_\n    {\n        typedef Arg next;\n        typedef T type;\n    };\n};\n\ntemplate<> \nstruct replace_unnamed_arg_impl< arg<-1> >\n{\n    template< typename Arg > struct result_\n    {\n        typedef typename next<Arg>::type next;\n        typedef Arg type;\n    };\n};\n\ntemplate< typename T, typename Arg > \nstruct replace_unnamed_arg\n    : replace_unnamed_arg_impl<T>::template result_<Arg>\n{\n};\n\n#   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\n\n// agurt, 10/mar/02: the forward declaration has to appear before any of\n// 'is_bind_helper' overloads, otherwise MSVC6.5 issues an ICE on it\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, arity_) > struct bind_chooser;\n\naux::no_tag is_bind_helper(...);\ntemplate< typename T > aux::no_tag is_bind_helper(protect<T>*);\n\n// overload for \"main\" form\n// agurt, 15/mar/02: MSVC 6.5 fails to properly resolve the overload \n// in case if we use 'aux::type_wrapper< bind<...> >' here, and all \n// 'bind' instantiations form a complete type anyway\n#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\ntemplate<\n      typename F, AUX778076_BIND_PARAMS(typename T)\n    >\naux::yes_tag is_bind_helper(bind<F,AUX778076_BIND_PARAMS(T)>*);\n#endif\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) >\naux::yes_tag is_bind_helper(arg<N>*);\n\ntemplate< bool is_ref_ = true >\nstruct is_bind_template_impl\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value = false);\n    };\n};\n\ntemplate<>\nstruct is_bind_template_impl<false>\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value = \n              sizeof(aux::is_bind_helper(static_cast<T*>(0))) \n                == sizeof(aux::yes_tag)\n            );\n    };\n};\n\ntemplate< typename T > struct is_bind_template\n    : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\n        ::template result_<T>\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace aux\n\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind.hpp>))\n#include BOOST_PP_ITERATE()\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)\n/// if_/eval_if specializations\n#   define AUX778076_SPEC_NAME if_\n#   define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))\n#   include BOOST_PP_ITERATE()\n\n#if !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\n#   define AUX778076_SPEC_NAME eval_if\n#   define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))\n#   include BOOST_PP_ITERATE()\n#endif\n#endif\n\n// real C++ version is already taken care of\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\n\nnamespace aux {\n// apply_count_args\n#define AUX778076_COUNT_ARGS_PREFIX bind\n#define AUX778076_COUNT_ARGS_DEFAULT na\n#define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n#include <boost/mpl/aux_/count_args.hpp>\n}\n\n// bind\ntemplate<\n      typename F, AUX778076_BIND_PARAMS(typename T) AUX778076_DMC_PARAM()\n    >\nstruct bind\n    : aux::bind_chooser<\n          aux::bind_count_args<AUX778076_BIND_PARAMS(T)>::value\n        >::template result_< F,AUX778076_BIND_PARAMS(T) >::type\n{\n};\n\nBOOST_MPL_AUX_ARITY_SPEC(\n      BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\n    , bind\n    )\n\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(\n      BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\n    , bind\n    )\n\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#   undef AUX778076_BIND_NESTED_DEFAULT_PARAMS\n#   undef AUX778076_BIND_N_SPEC_PARAMS\n#   undef AUX778076_BIND_N_PARAMS\n#   undef AUX778076_BIND_DEFAULT_PARAMS\n#   undef AUX778076_BIND_PARAMS\n#   undef AUX778076_DMC_PARAM\n#   undef AUX778076_APPLY\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_BIND_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n\n#   define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#if defined(AUX778076_SPEC_NAME)\n\n// lazy metafunction specialization\ntemplate< template< BOOST_MPL_PP_PARAMS(i_, typename T) > class F, typename Tag >\nstruct BOOST_PP_CAT(quote,i_);\n\ntemplate< BOOST_MPL_PP_PARAMS(i_, typename T) > struct AUX778076_SPEC_NAME;\n\ntemplate<\n      typename Tag AUX778076_BIND_N_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(bind,i_)< \n      BOOST_PP_CAT(quote,i_)<AUX778076_SPEC_NAME,Tag>\n    AUX778076_BIND_N_PARAMS(i_,T)\n    >\n{\n    template<\n          AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n#       define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))\n#       include BOOST_PP_ITERATE()\n\n        typedef typename AUX778076_SPEC_NAME<\n              typename t1::type\n            , BOOST_MPL_PP_EXT_PARAMS(2, BOOST_PP_INC(i_), t)\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n#undef AUX778076_SPEC_NAME\n\n#else // AUX778076_SPEC_NAME\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()\n    >\nstruct BOOST_PP_CAT(bind,i_)\n{\n    template<\n          AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)\n        >\n    struct apply\n    {\n     private:\n#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n\n        typedef aux::replace_unnamed_arg< F,mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg<a0,AUX778076_BIND_PARAMS(U)>::type f_;\n        ///\n#   else\n        typedef typename aux::resolve_bind_arg<F,AUX778076_BIND_PARAMS(U)>::type f_;\n\n#   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\n\n#   if i_ > 0\n#       define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))\n#       include BOOST_PP_ITERATE()\n#   endif\n\n     public:\n\n#   define AUX778076_ARG(unused, i_, t) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    typename BOOST_PP_CAT(t,BOOST_PP_INC(i_))::type \\\n/**/\n\n        typedef typename BOOST_PP_CAT(apply_wrap,i_)<\n              f_ \n            BOOST_PP_COMMA_IF(i_) BOOST_MPL_PP_REPEAT(i_, AUX778076_ARG, t)\n            >::type type;\n\n#   undef AUX778076_ARG\n    };\n};\n\nnamespace aux {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T), AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg<\n      BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>,AUX778076_BIND_PARAMS(U)\n    >\n{\n    typedef BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)> f_;\n    typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;\n};\n\n#else\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T)\n    >\naux::yes_tag\nis_bind_helper(BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>*);\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))\n\n#   if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    \n#if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n/// primary template (not a specialization!)\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()\n    >\nstruct bind\n    : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >\n{\n};\n#else\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()\n    >\nstruct bind< F AUX778076_BIND_N_SPEC_PARAMS(i_, T, na) >\n    : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >\n{\n};\n#endif\n\n#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<i_>\n{\n    template<\n          typename F, AUX778076_BIND_PARAMS(typename T)\n        >\n    struct result_\n    {\n        typedef BOOST_PP_CAT(bind,i_)< F AUX778076_BIND_N_PARAMS(i_,T) > type;\n    };\n};\n\n} // namespace aux\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   endif // BOOST_MPL_CFG_NO_BIND_TEMPLATE\n\n#endif // AUX778076_SPEC_NAME\n\n#   undef i_\n\n///// iteration, depth == 2\n\n#elif BOOST_PP_ITERATION_DEPTH() == 2\n\n#   define j_ BOOST_PP_FRAME_ITERATION(2)\n#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n\n        typedef aux::replace_unnamed_arg< BOOST_PP_CAT(T,j_),BOOST_PP_CAT(n,j_) > BOOST_PP_CAT(r,j_);\n        typedef typename BOOST_PP_CAT(r,j_)::type BOOST_PP_CAT(a,j_);\n        typedef typename BOOST_PP_CAT(r,j_)::next BOOST_PP_CAT(n,BOOST_PP_INC(j_));\n        typedef aux::resolve_bind_arg<BOOST_PP_CAT(a,j_), AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);\n        ///\n#   else\n        typedef aux::resolve_bind_arg< BOOST_PP_CAT(T,j_),AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);\n\n#   endif\n#   undef j_\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/bind_fwd.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_BIND_FWD_HPP_INCLUDED\n#define BOOST_MPL_BIND_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/aux_/na.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/bind.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER bind_fwd.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n\n#   if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\n#       define AUX778076_DMC_PARAM() , int dummy_ = 0\n#   else\n#       define AUX778076_DMC_PARAM()\n#   endif\n\n#   define AUX778076_BIND_DEFAULT_PARAMS(param, value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    AUX778076_DMC_PARAM() \\\n    /**/\n\n#   define AUX778076_BIND_N_PARAMS(n, param) \\\n    BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \\\n    AUX778076_DMC_PARAM() \\\n    /**/\n\n#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\ntemplate<\n      typename F, AUX778076_BIND_DEFAULT_PARAMS(typename T, na)\n    >\nstruct bind;\n#endif\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind_fwd.hpp>))\n#include BOOST_PP_ITERATE()\n\n#   undef AUX778076_BIND_N_PARAMS\n#   undef AUX778076_BIND_DEFAULT_PARAMS\n#   undef AUX778076_DMC_PARAM\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_BIND_FWD_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(bind,i_);\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/bitand.hpp",
    "content": "\n#ifndef BOOST_MPL_BITAND_HPP_INCLUDED\n#define BOOST_MPL_BITAND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2009\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n// agurt, 23/jan/10: workaround a conflict with <iso646.h> header's \n// macros, see http://tinyurl.com/ycwdxco; 'defined(bitand)'\n// has to be checked in a separate condition, otherwise GCC complains \n// about 'bitand' being an alternative token\n#if defined(_MSC_VER) && !defined(__clang__)\n#ifndef __GCCXML__\n#if defined(bitand)\n#   pragma push_macro(\"bitand\")\n#   undef bitand\n#   define bitand(x)\n#endif\n#endif\n#endif\n\n#define AUX778076_OP_NAME   bitand_\n#define AUX778076_OP_PREFIX bitand\n#define AUX778076_OP_TOKEN  &\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#if defined(_MSC_VER) && !defined(__clang__)\n#ifndef __GCCXML__\n#if defined(bitand)\n#   pragma pop_macro(\"bitand\")\n#endif\n#endif\n#endif\n\n#endif // BOOST_MPL_BITAND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/bitor.hpp",
    "content": "\n#ifndef BOOST_MPL_BITOR_HPP_INCLUDED\n#define BOOST_MPL_BITOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2009\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n// agurt, 23/jan/10: workaround a conflict with <iso646.h> header's \n// macros, see http://tinyurl.com/ycwdxco; 'defined(bitor)'\n// has to be checked in a separate condition, otherwise GCC complains \n// about 'bitor' being an alternative token\n#if defined(_MSC_VER) && !defined(__clang__)\n#ifndef __GCCXML__\n#if defined(bitor)\n#   pragma push_macro(\"bitor\")\n#   undef bitor\n#   define bitor(x)\n#endif\n#endif\n#endif\n\n#define AUX778076_OP_NAME   bitor_\n#define AUX778076_OP_PREFIX bitor\n#define AUX778076_OP_TOKEN  |\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#if defined(_MSC_VER) && !defined(__clang__)\n#ifndef __GCCXML__\n#if defined(bitor)\n#   pragma pop_macro(\"bitor\")\n#endif\n#endif\n#endif\n\n#endif // BOOST_MPL_BITOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/bitwise.hpp",
    "content": "\n#ifndef BOOST_MPL_BITWISE_HPP_INCLUDED\n#define BOOST_MPL_BITWISE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/bitand.hpp>\n#include <boost/mpl/bitor.hpp>\n#include <boost/mpl/bitxor.hpp>\n#include <boost/mpl/shift_left.hpp>\n#include <boost/mpl/shift_right.hpp>\n\n#endif // BOOST_MPL_BITWISE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/bitxor.hpp",
    "content": "\n#ifndef BOOST_MPL_BITXOR_HPP_INCLUDED\n#define BOOST_MPL_BITXOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME   bitxor_\n#define AUX778076_OP_PREFIX bitxor\n#define AUX778076_OP_TOKEN  ^\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#endif // BOOST_MPL_BITXOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/bool.hpp",
    "content": "\n#ifndef BOOST_MPL_BOOL_HPP_INCLUDED\n#define BOOST_MPL_BOOL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/bool_fwd.hpp>\n#include <boost/mpl/integral_c_tag.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< bool C_ > struct bool_\n{\n    BOOST_STATIC_CONSTANT(bool, value = C_);\n    typedef integral_c_tag tag;\n    typedef bool_ type;\n    typedef bool value_type;\n    BOOST_CONSTEXPR operator bool() const { return this->value; }\n};\n\n#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\ntemplate< bool C_ >\nbool const bool_<C_>::value;\n#endif\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\n#endif // BOOST_MPL_BOOL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/bool_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_BOOL_FWD_HPP_INCLUDED\n#define BOOST_MPL_BOOL_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< bool C_ > struct bool_;\n\n// shorcuts\ntypedef bool_<true> true_;\ntypedef bool_<false> false_;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\nBOOST_MPL_AUX_ADL_BARRIER_DECL(bool_)\nBOOST_MPL_AUX_ADL_BARRIER_DECL(true_)\nBOOST_MPL_AUX_ADL_BARRIER_DECL(false_)\n\n#endif // BOOST_MPL_BOOL_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/char.hpp",
    "content": "\n#ifndef BOOST_MPL_CHAR_HPP_INCLUDED\n#define BOOST_MPL_CHAR_HPP_INCLUDED\n\n// Copyright Eric Niebler 2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Source$\n// $Date: 2008-06-14 08:41:37 -0700 (Sat, 16 Jun 2008) $\n// $Revision: 24874 $\n\n#include <boost/mpl/char_fwd.hpp>\n\n#define AUX_WRAPPER_VALUE_TYPE char\n#include <boost/mpl/aux_/integral_wrapper.hpp>\n\n#endif // BOOST_MPL_CHAR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/char_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_CHAR_FWD_HPP_INCLUDED\n#define BOOST_MPL_CHAR_FWD_HPP_INCLUDED\n\n// Copyright Eric Niebler 2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Source$\n// $Date: 2008-06-14 08:41:37 -0700 (Sat, 16 Jun 2008) $\n// $Revision: 24874 $\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(char, N) > struct char_;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(char_)\n\n#endif // BOOST_MPL_CHAR_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/clear.hpp",
    "content": "\n#ifndef BOOST_MPL_CLEAR_HPP_INCLUDED\n#define BOOST_MPL_CLEAR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/aux_/clear_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct clear\n    : clear_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,clear,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, clear)\n\n}}\n\n#endif // BOOST_MPL_CLEAR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/clear_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_CLEAR_FWD_HPP_INCLUDED\n#define BOOST_MPL_CLEAR_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct clear_impl;\ntemplate< typename Sequence > struct clear;\n\n}}\n\n#endif // BOOST_MPL_CLEAR_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/comparison.hpp",
    "content": "\n#ifndef BOOST_MPL_COMPARISON_HPP_INCLUDED\n#define BOOST_MPL_COMPARISON_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/equal_to.hpp>\n#include <boost/mpl/not_equal_to.hpp>\n#include <boost/mpl/less.hpp>\n#include <boost/mpl/greater.hpp>\n#include <boost/mpl/less_equal.hpp>\n#include <boost/mpl/greater_equal.hpp>\n\n#endif // BOOST_MPL_COMPARISON_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/contains.hpp",
    "content": "\n#ifndef BOOST_MPL_CONTAINS_HPP_INCLUDED\n#define BOOST_MPL_CONTAINS_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/contains_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/contains_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct contains\n    : contains_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,T >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,contains,(Sequence,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, contains)\n\n}}\n\n#endif // BOOST_MPL_CONTAINS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/contains_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED\n#define BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct contains_impl;\ntemplate< typename Sequence, typename T > struct contains;\n\n}}\n\n#endif // BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/copy.hpp",
    "content": "\n#ifndef BOOST_MPL_COPY_HPP_INCLUDED\n#define BOOST_MPL_COPY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/reverse_fold.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename Sequence\n    , typename Inserter\n    >\nstruct copy_impl\n    : fold< \n          Sequence\n        , typename Inserter::state\n        , typename Inserter::operation\n        >\n{\n};\n\ntemplate<\n      typename Sequence\n    , typename Inserter\n    >\nstruct reverse_copy_impl\n    : reverse_fold<\n          Sequence\n        , typename Inserter::state\n        , typename Inserter::operation\n        >\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(2, copy)\n\n}}\n\n#endif // BOOST_MPL_COPY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/copy_if.hpp",
    "content": "\n#ifndef BOOST_MPL_COPY_IF_HPP_INCLUDED\n#define BOOST_MPL_COPY_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/reverse_fold.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/protect.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename Operation\n    , typename Predicate\n    >\nstruct copy_if_op\n{\n    template< typename Sequence, typename T > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : eval_if<\n              typename apply1<Predicate,T>::type\n            , apply2<Operation,Sequence,T>\n            , identity<Sequence>\n            >\n    {\n#else\n    {\n        typedef typename eval_if<\n              typename apply1<Predicate,T>::type\n            , apply2<Operation,Sequence,T>\n            , identity<Sequence>\n            >::type type;\n#endif\n    };\n};\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename Inserter\n    >\nstruct copy_if_impl\n    : fold<\n          Sequence\n        , typename Inserter::state\n        , protect< aux::copy_if_op<\n              typename Inserter::operation\n            , Predicate\n            > >\n        >\n{\n};\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename Inserter\n    >\nstruct reverse_copy_if_impl\n    : reverse_fold<\n          Sequence\n        , typename Inserter::state\n        , protect< aux::copy_if_op<\n              typename Inserter::operation\n            , Predicate\n            > >\n        >\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, copy_if)\n\n}}\n\n#endif // BOOST_MPL_COPY_IF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/count.hpp",
    "content": "\n#ifndef BOOST_MPL_COUNT_HPP_INCLUDED\n#define BOOST_MPL_COUNT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/count_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/count_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct count\n    : count_impl< typename sequence_tag<Sequence>::type >\n        ::template apply<Sequence,T>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,count,(Sequence,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, count)\n\n}}\n\n#endif // BOOST_MPL_COUNT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/count_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_COUNT_FWD_HPP_INCLUDED\n#define BOOST_MPL_COUNT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct count_impl;\ntemplate< typename Sequence, typename T > struct count;\n\n}}\n\n#endif // BOOST_MPL_COUNT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/count_if.hpp",
    "content": "\n#ifndef BOOST_MPL_COUNT_IF_HPP_INCLUDED\n#define BOOST_MPL_COUNT_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/integral_c.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< typename Predicate >\nstruct next_if\n{\n    template<\n          typename N\n        , typename T\n        >\n    struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : eval_if<\n              typename apply1<Predicate,T>::type\n            , next<N>\n            , identity<N>\n            >\n    {\n#else\n    {\n        typedef typename eval_if<\n              typename apply1<Predicate,T>::type\n            , next<N>\n            , identity<N>\n            >::type type;\n#endif\n    };\n};\n\n} // namespace aux\n\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Predicate)\n    >\nstruct count_if\n    : aux::msvc_eti_base< typename fold<\n          Sequence\n        , integral_c<unsigned long,0>\n        , protect< aux::next_if<Predicate> >\n        >::type >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,count_if,(Sequence,Predicate))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, count_if)\n\n}}\n\n#endif // BOOST_MPL_COUNT_IF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/deque.hpp",
    "content": "\n#ifndef BOOST_MPL_DEQUE_HPP_INCLUDED\n#define BOOST_MPL_DEQUE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/vector.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_DEQUE_HEADER \\\n    BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE).hpp \\\n    /**/\n#else\n#   define AUX778076_DEQUE_HEADER \\\n    BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_DEQUE_HEADER)\n#   undef AUX778076_DEQUE_HEADER\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER deque.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/vector.hpp>\n\n#   define AUX778076_SEQUENCE_NAME deque\n#   define AUX778076_SEQUENCE_BASE_NAME vector\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_DEQUE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/deref.hpp",
    "content": "\n#ifndef BOOST_MPL_DEREF_HPP_INCLUDED\n#define BOOST_MPL_DEREF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/msvc_type.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Iterator)\n    >\nstruct deref\n{\n#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n    typedef typename Iterator::type type;\n#else\n    typedef typename aux::msvc_type<Iterator>::type type;\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,deref,(Iterator))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, deref)\n\n}}\n\n#endif // BOOST_MPL_DEREF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/distance.hpp",
    "content": "\n#ifndef BOOST_MPL_DISTANCE_HPP_INCLUDED\n#define BOOST_MPL_DISTANCE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/distance_fwd.hpp>\n#include <boost/mpl/iter_fold.hpp>\n#include <boost/mpl/iterator_range.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/tag.hpp>\n#include <boost/mpl/apply_wrap.hpp>\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n\nnamespace boost { namespace mpl {\n\n// default implementation for forward/bidirectional iterators\ntemplate< typename Tag > struct distance_impl\n{\n    template< typename First, typename Last > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : aux::msvc_eti_base< typename iter_fold<\n              iterator_range<First,Last>\n            , mpl::long_<0>\n            , next<>\n            >::type >\n    {\n#else\n    {\n        typedef typename iter_fold<\n              iterator_range<First,Last>\n            , mpl::long_<0>\n            , next<>\n            >::type type;\n        \n        BOOST_STATIC_CONSTANT(long, value =\n              (iter_fold<\n                  iterator_range<First,Last>\n                , mpl::long_<0>\n                , next<>\n                >::type::value)\n            );\n#endif\n    };\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(First)\n    , typename BOOST_MPL_AUX_NA_PARAM(Last)\n    >\nstruct distance\n    : distance_impl< typename tag<First>::type >\n        ::template apply<First, Last>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, distance, (First, Last))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, distance)\n\n}}\n\n#endif // BOOST_MPL_DISTANCE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/distance_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED\n#define BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(distance)\n\ntemplate< typename Tag > struct distance_impl;\ntemplate< typename First, typename Last > struct distance;\n\n}}\n\n#endif // BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/divides.hpp",
    "content": "\n#ifndef BOOST_MPL_DIVIDES_HPP_INCLUDED\n#define BOOST_MPL_DIVIDES_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME divides\n#define AUX778076_OP_TOKEN /\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#endif // BOOST_MPL_DIVIDES_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/empty.hpp",
    "content": "\n#ifndef BOOST_MPL_EMPTY_HPP_INCLUDED\n#define BOOST_MPL_EMPTY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/empty_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/empty_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct empty\n    : empty_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,empty,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, empty)\n\n}}\n\n#endif // BOOST_MPL_EMPTY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/empty_base.hpp",
    "content": "\n#ifndef BOOST_MPL_EMPTY_BASE_HPP_INCLUDED\n#define BOOST_MPL_EMPTY_BASE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/type_traits/is_empty.hpp>\n\nnamespace boost { namespace mpl {\n\n// empty base class, guaranteed to have no members; inheritance from\n// 'empty_base' through the 'inherit' metafunction is a no-op - see \n// \"mpl/inherit.hpp> header for the details\nstruct empty_base {};\n\ntemplate< typename T >\nstruct is_empty_base\n    : false_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using false_::value;\n#endif\n};\n\ntemplate<>\nstruct is_empty_base<empty_base>\n    : true_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using true_::value;\n#endif\n};\n\n}}\n\nnamespace boost {\n\ntemplate<> struct is_empty< mpl::empty_base >\n    : public ::boost::integral_constant<bool,true>\n{\npublic:\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,is_empty,(mpl::empty_base))\n};\n\n}\n\n#endif // BOOST_MPL_EMPTY_BASE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/empty_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_EMPTY_FWD_HPP_INCLUDED\n#define BOOST_MPL_EMPTY_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct empty_impl;\ntemplate< typename Sequence > struct empty;\n\n}}\n\n#endif // BOOST_MPL_EMPTY_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/empty_sequence.hpp",
    "content": "\n#ifndef BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED\n#define BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n// Copyright Alexander Nasonov 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n\nnamespace boost { namespace mpl {\n\nstruct empty_sequence\n{\n    struct tag;\n    typedef empty_sequence type;\n    struct begin { typedef random_access_iterator_tag category; };    \n    typedef begin end;\n};\n\ntemplate<>\nstruct size_impl<empty_sequence::tag>\n{\n    template< typename Sequence > struct apply\n        : int_<0>\n    {\n    };\n};\n\n}}\n\n#endif // #ifndef BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/end.hpp",
    "content": "\n#ifndef BOOST_MPL_END_HPP_INCLUDED\n#define BOOST_MPL_END_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n\n#endif // BOOST_MPL_END_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/equal.hpp",
    "content": "\n#ifndef BOOST_MPL_EQUAL_HPP_INCLUDED\n#define BOOST_MPL_EQUAL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/iter_fold_if_impl.hpp>\n#include <boost/mpl/aux_/iter_apply.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/always.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/bind.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename Predicate\n    , typename LastIterator1\n    , typename LastIterator2\n    >\nstruct equal_pred\n{\n    template<\n          typename Iterator2\n        , typename Iterator1\n        >\n    struct apply\n    {\n        typedef typename and_< \n              not_< is_same<Iterator1,LastIterator1> >\n            , not_< is_same<Iterator2,LastIterator2> >\n            , aux::iter_apply2<Predicate,Iterator1,Iterator2>\n            >::type type;\n    };\n};\n\ntemplate<\n      typename Sequence1\n    , typename Sequence2\n    , typename Predicate\n    >\nstruct equal_impl\n{\n    typedef typename begin<Sequence1>::type first1_;\n    typedef typename begin<Sequence2>::type first2_;\n    typedef typename end<Sequence1>::type last1_;\n    typedef typename end<Sequence2>::type last2_;\n\n    typedef aux::iter_fold_if_impl<\n          first1_\n        , first2_\n        , next<>\n        , protect< aux::equal_pred<Predicate,last1_,last2_> >\n        , void_\n        , always<false_>\n        > fold_;\n\n    typedef typename fold_::iterator iter1_;\n    typedef typename fold_::state iter2_;\n    typedef and_<\n          is_same<iter1_,last1_>\n        , is_same<iter2_,last2_>\n        > result_;\n\n    typedef typename result_::type type;\n};\n\n\n} // namespace aux\n\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence1)\n    , typename BOOST_MPL_AUX_NA_PARAM(Sequence2)\n    , typename Predicate = is_same<_,_>\n    >\nstruct equal\n    : aux::msvc_eti_base< \n          typename aux::equal_impl<Sequence1,Sequence2,Predicate>::type\n        >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,equal,(Sequence1,Sequence2))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, equal)\n\n}}\n\n#endif // BOOST_MPL_EQUAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/equal_to.hpp",
    "content": "\n#ifndef BOOST_MPL_EQUAL_TO_HPP_INCLUDED\n#define BOOST_MPL_EQUAL_TO_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME equal_to\n#define AUX778076_OP_TOKEN ==\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_EQUAL_TO_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/erase.hpp",
    "content": "\n#ifndef BOOST_MPL_ERASE_HPP_INCLUDED\n#define BOOST_MPL_ERASE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/erase_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/erase_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/msvc_typename.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(First)\n    , typename BOOST_MPL_AUX_NA_PARAM(Last)\n    >\nstruct erase\n    : erase_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,First,Last >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,erase,(Sequence,First,Last))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3,erase)\n\n}}\n\n#endif // BOOST_MPL_ERASE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/erase_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_ERASE_FWD_HPP_INCLUDED\n#define BOOST_MPL_ERASE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct erase_impl;\ntemplate< typename Sequence, typename First, typename Last > struct erase;\n\n}}\n\n#endif // BOOST_MPL_ERASE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/erase_key.hpp",
    "content": "\n#ifndef BOOST_MPL_ERASE_KEY_HPP_INCLUDED\n#define BOOST_MPL_ERASE_KEY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/erase_key_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/erase_key_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/msvc_typename.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Key)\n    >\nstruct erase_key\n    : erase_key_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,Key >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,erase_key,(Sequence,Key))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2,erase_key)\n\n}}\n\n#endif // BOOST_MPL_ERASE_KEY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/erase_key_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED\n#define BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct erase_key_impl;\ntemplate< typename Sequence, typename Key > struct erase_key;\n\n}}\n\n#endif // BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/eval_if.hpp",
    "content": "\n#ifndef BOOST_MPL_EVAL_IF_HPP_INCLUDED\n#define BOOST_MPL_EVAL_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(C)\n    , typename BOOST_MPL_AUX_NA_PARAM(F1)\n    , typename BOOST_MPL_AUX_NA_PARAM(F2)\n    >\nstruct eval_if\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n     || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \\\n        && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \\\n        )\n{\n    typedef typename if_<C,F1,F2>::type f_;\n    typedef typename f_::type type;\n#else\n    : if_<C,F1,F2>::type\n{\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,eval_if,(C,F1,F2))\n};\n\n// (almost) copy & paste in order to save one more\n// recursively nested template instantiation to user\ntemplate<\n      bool C\n    , typename F1\n    , typename F2\n    >\nstruct eval_if_c\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n     || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \\\n        && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \\\n        )\n{\n    typedef typename if_c<C,F1,F2>::type f_;\n    typedef typename f_::type type;\n#else\n    : if_c<C,F1,F2>::type\n{\n#endif\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, eval_if)\n\n}}\n\n#endif // BOOST_MPL_EVAL_IF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/filter_view.hpp",
    "content": "\n#ifndef BOOST_MPL_FILTER_VIEW_HPP_INCLUDED\n#define BOOST_MPL_FILTER_VIEW_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/aux_/filter_iter.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Predicate)\n    >\nstruct filter_view\n{\n private:    \n    typedef typename lambda<Predicate>::type pred_;\n    typedef typename begin<Sequence>::type first_;\n    typedef typename end<Sequence>::type last_;\n\n public:\n    struct tag;\n    typedef filter_view type;\n    typedef typename aux::next_filter_iter< first_,last_,pred_ >::type begin;\n    typedef aux::filter_iter< last_,last_,pred_ > end;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, filter_view)\n\n}}\n\n#endif // BOOST_MPL_FILTER_VIEW_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/find.hpp",
    "content": "\n#ifndef BOOST_MPL_FIND_HPP_INCLUDED\n#define BOOST_MPL_FIND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/find_if.hpp>\n#include <boost/mpl/same_as.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct find\n    : find_if< Sequence,same_as<T> >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,find,(Sequence,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, find)\n\n}}\n\n#endif // BOOST_MPL_FIND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/find_if.hpp",
    "content": "\n#ifndef BOOST_MPL_FIND_IF_HPP_INCLUDED\n#define BOOST_MPL_FIND_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/find_if_pred.hpp>\n#include <boost/mpl/arg.hpp>\n#include <boost/mpl/iter_fold_if.hpp>\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(find_if)\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Predicate)\n    >\nstruct find_if\n{\n    typedef typename iter_fold_if<\n          Sequence\n        , void\n        , mpl::arg<1> // ignore\n        , protect< aux::find_if_pred<Predicate> >\n        >::type result_;\n\n    typedef typename second<result_>::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,find_if,(Sequence,Predicate))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2,find_if)\n\n}}\n\n#endif // BOOST_MPL_FIND_IF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/fold.hpp",
    "content": "\n#ifndef BOOST_MPL_FOLD_HPP_INCLUDED\n#define BOOST_MPL_FOLD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/O1_size.hpp>\n#include <boost/mpl/aux_/fold_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)\n    >\nstruct fold\n{\n    typedef typename aux::fold_impl<\n          ::boost::mpl::O1_size<Sequence>::value\n        , typename begin<Sequence>::type\n        , typename end<Sequence>::type\n        , State\n        , ForwardOp\n        >::state type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,fold,(Sequence,State,ForwardOp))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, fold)\n\n}}\n\n#endif // BOOST_MPL_FOLD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/for_each.hpp",
    "content": "\n#ifndef BOOST_MPL_FOR_EACH_HPP_INCLUDED\n#define BOOST_MPL_FOR_EACH_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/is_sequence.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/assert.hpp>\n#include <boost/mpl/aux_/config/gpu.hpp>\n#include <boost/mpl/aux_/unwrap.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n#include <boost/utility/value_init.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool done = true >\nstruct for_each_impl\n{\n    template<\n          typename Iterator\n        , typename LastIterator\n        , typename TransformFunc\n        , typename F\n        >\n    BOOST_MPL_CFG_GPU_ENABLED\n    static void execute(\n          Iterator*\n        , LastIterator*\n        , TransformFunc*\n        , F\n        )\n    {\n    }\n};\n\ntemplate<>\nstruct for_each_impl<false>\n{\n    template<\n          typename Iterator\n        , typename LastIterator\n        , typename TransformFunc\n        , typename F\n        >\n    BOOST_MPL_CFG_GPU_ENABLED\n    static void execute(\n          Iterator*\n        , LastIterator*\n        , TransformFunc* \n        , F f\n        )\n    {\n        typedef typename deref<Iterator>::type item;\n        typedef typename apply1<TransformFunc,item>::type arg;\n    \n        // dwa 2002/9/10 -- make sure not to invoke undefined behavior\n        // when we pass arg.\n        value_initialized<arg> x;\n        aux::unwrap(f, 0)(boost::get(x));\n        \n        typedef typename mpl::next<Iterator>::type iter;\n        for_each_impl<boost::is_same<iter,LastIterator>::value>\n            ::execute( static_cast<iter*>(0), static_cast<LastIterator*>(0), static_cast<TransformFunc*>(0), f);\n    }\n};\n\n} // namespace aux\n\n// agurt, 17/mar/02: pointer default parameters are necessary to workaround \n// MSVC 6.5 function template signature's mangling bug\ntemplate<\n      typename Sequence\n    , typename TransformOp\n    , typename F\n    >\nBOOST_MPL_CFG_GPU_ENABLED\ninline\nvoid for_each(F f, Sequence* = 0, TransformOp* = 0)\n{\n    BOOST_MPL_ASSERT(( is_sequence<Sequence> ));\n\n    typedef typename begin<Sequence>::type first;\n    typedef typename end<Sequence>::type last;\n\n    aux::for_each_impl< boost::is_same<first,last>::value >\n        ::execute(static_cast<first*>(0), static_cast<last*>(0), static_cast<TransformOp*>(0), f);\n}\n\ntemplate<\n      typename Sequence\n    , typename F\n    >\nBOOST_MPL_CFG_GPU_ENABLED\ninline\nvoid for_each(F f, Sequence* = 0)\n{\n  // jfalcou: fully qualifying this call so it doesnt clash with phoenix::for_each\n  // ons ome compilers -- done on 02/28/2011\n  boost::mpl::for_each<Sequence, identity<> >(f);\n}\n\n}}\n\n#endif // BOOST_MPL_FOR_EACH_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/front.hpp",
    "content": "\n#ifndef BOOST_MPL_FRONT_HPP_INCLUDED\n#define BOOST_MPL_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/front_fwd.hpp>\n#include <boost/mpl/aux_/front_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct front\n    : front_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,front,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, front)\n\n}}\n\n#endif // BOOST_MPL_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/front_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_FRONT_FWD_HPP_INCLUDED\n#define BOOST_MPL_FRONT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct front_impl;\ntemplate< typename Sequence > struct front;\n\n}}\n\n#endif // BOOST_MPL_FRONT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/front_inserter.hpp",
    "content": "\n#ifndef BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED\n#define BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_front.hpp>\n#include <boost/mpl/inserter.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Sequence\n    >\nstruct front_inserter\n    : inserter< Sequence,push_front<> >\n{\n};\n\n}}\n\n#endif // BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/greater.hpp",
    "content": "\n#ifndef BOOST_MPL_GREATER_HPP_INCLUDED\n#define BOOST_MPL_GREATER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME greater\n#define AUX778076_OP_TOKEN >\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_GREATER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/greater_equal.hpp",
    "content": "\n#ifndef BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED\n#define BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME greater_equal\n#define AUX778076_OP_TOKEN >=\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/has_key.hpp",
    "content": "\n#ifndef BOOST_MPL_HAS_KEY_HPP_INCLUDED\n#define BOOST_MPL_HAS_KEY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/has_key_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/has_key_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(AssociativeSequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Key)\n    >\nstruct has_key\n    : has_key_impl< typename sequence_tag<AssociativeSequence>::type >\n        ::template apply<AssociativeSequence,Key>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,has_key,(AssociativeSequence,Key))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, has_key)\n\n}}\n\n#endif // BOOST_MPL_HAS_KEY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/has_key_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED\n#define BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct has_key_impl;\ntemplate< typename AssociativeSequence, typename Key > struct has_key;\n\n}}\n\n#endif // BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/has_xxx.hpp",
    "content": "\n#ifndef BOOST_MPL_HAS_XXX_HPP_INCLUDED\n#define BOOST_MPL_HAS_XXX_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2006\n// Copyright David Abrahams 2002-2003\n// Copyright Daniel Walker 2007\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/has_xxx.hpp>\n#include <boost/mpl/aux_/config/msvc_typename.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/array/elem.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/control/if.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/enum_trailing_params.hpp>\n\n#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) )\n# include <boost/type_traits/is_class.hpp>\n#endif\n\n#if !defined(BOOST_MPL_CFG_NO_HAS_XXX)\n\n#   if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\n// agurt, 11/sep/02: MSVC-specific version (< 7.1), based on a USENET \n// newsgroup's posting by John Madsen (comp.lang.c++.moderated, \n// 1999-11-12 19:17:06 GMT); the code is _not_ standard-conforming, but \n// it works way more reliably than the SFINAE-based implementation\n\n// Modified dwa 8/Oct/02 to handle reference types.\n\n#   include <boost/mpl/if.hpp>\n#   include <boost/mpl/bool.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct has_xxx_tag;\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\ntemplate< typename U > struct msvc_incomplete_array\n{\n    typedef char (&type)[sizeof(U) + 1];\n};\n#endif\n\ntemplate< typename T >\nstruct msvc_is_incomplete\n{\n    // MSVC is capable of some kinds of SFINAE.  If U is an incomplete\n    // type, it won't pick the second overload\n    static char tester(...);\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n    template< typename U >\n    static typename msvc_incomplete_array<U>::type tester(type_wrapper<U>);\n#else\n    template< typename U >\n    static char (& tester(type_wrapper<U>) )[sizeof(U)+1];\n#endif \n    \n    BOOST_STATIC_CONSTANT(bool, value = \n          sizeof(tester(type_wrapper<T>())) == 1\n        );\n};\n\ntemplate<>\nstruct msvc_is_incomplete<int>\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n}}}\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, default_) \\\ntemplate< typename T, typename name = ::boost::mpl::aux::has_xxx_tag > \\\nstruct BOOST_PP_CAT(trait,_impl) : T \\\n{ \\\n    static boost::mpl::aux::no_tag \\\n    test(void(*)(::boost::mpl::aux::has_xxx_tag)); \\\n    \\\n    static boost::mpl::aux::yes_tag test(...); \\\n    \\\n    BOOST_STATIC_CONSTANT(bool, value = \\\n          sizeof(test(static_cast<void(*)(name)>(0))) \\\n            != sizeof(boost::mpl::aux::no_tag) \\\n        ); \\\n    typedef boost::mpl::bool_<value> type; \\\n}; \\\n\\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait \\\n    : boost::mpl::if_c< \\\n          boost::mpl::aux::msvc_is_incomplete<T>::value \\\n        , boost::mpl::bool_<false> \\\n        , BOOST_PP_CAT(trait,_impl)<T> \\\n        >::type \\\n{ \\\n}; \\\n\\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, void) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, bool) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, char) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed char) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned char) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed short) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned short) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed int) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned int) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed long) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned long) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, float) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, double) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, long double) \\\n/**/\n\n#   define BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, T) \\\ntemplate<> struct trait<T> \\\n{ \\\n    BOOST_STATIC_CONSTANT(bool, value = false); \\\n    typedef boost::mpl::bool_<false> type; \\\n}; \\\n/**/\n\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \\\n    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \\\n    BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, wchar_t) \\\n/**/\n#else\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \\\n    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \\\n/**/\n#endif\n\n\n// SFINAE-based implementations below are derived from a USENET newsgroup's \n// posting by Rani Sharoni (comp.lang.c++.moderated, 2002-03-17 07:45:09 PST)\n\n#   elif BOOST_WORKAROUND(BOOST_MSVC, <= 1400) \\\n      || (BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800)) && defined(__CUDACC__)) \\\n      || BOOST_WORKAROUND(__IBMCPP__, <= 700)\n\n// MSVC 7.1 & MSVC 8.0 & VACPP\n\n// agurt, 15/jun/05: replace overload-based SFINAE implementation with SFINAE\n// applied to partial specialization to fix some apparently random failures \n// (thanks to Daniel Wallin for researching this!)\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \\\ntemplate< typename T > \\\nstruct BOOST_PP_CAT(trait, _msvc_sfinae_helper) \\\n{ \\\n    typedef void type; \\\n};\\\n\\\ntemplate< typename T, typename U = void > \\\nstruct BOOST_PP_CAT(trait,_impl_) \\\n{ \\\n    BOOST_STATIC_CONSTANT(bool, value = false); \\\n    typedef boost::mpl::bool_<value> type; \\\n}; \\\n\\\ntemplate< typename T > \\\nstruct BOOST_PP_CAT(trait,_impl_)< \\\n      T \\\n    , typename BOOST_PP_CAT(trait, _msvc_sfinae_helper)< typename T::name >::type \\\n    > \\\n{ \\\n    BOOST_STATIC_CONSTANT(bool, value = true); \\\n    typedef boost::mpl::bool_<value> type; \\\n}; \\\n\\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait \\\n    : BOOST_PP_CAT(trait,_impl_)<T> \\\n{ \\\n}; \\\n/**/\n\n#   elif BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) )\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF(trait, trait_tester, name, default_) \\\ntemplate< typename T, bool IS_CLASS > \\\nstruct trait_tester \\\n{ \\\n    BOOST_STATIC_CONSTANT( bool,  value = false ); \\\n}; \\\ntemplate< typename T > \\\nstruct trait_tester< T, true > \\\n{ \\\n    struct trait_tester_impl \\\n    { \\\n        template < class U > \\\n        static int  resolve( boost::mpl::aux::type_wrapper<U> const volatile * \\\n                           , boost::mpl::aux::type_wrapper<typename U::name >* = 0 ); \\\n        static char resolve( ... ); \\\n    }; \\\n    typedef boost::mpl::aux::type_wrapper<T> t_; \\\n    BOOST_STATIC_CONSTANT( bool, value = ( sizeof( trait_tester_impl::resolve( static_cast< t_ * >(0) ) ) == sizeof(int) ) ); \\\n}; \\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait           \\\n{                      \\\n    BOOST_STATIC_CONSTANT( bool, value = (trait_tester< T, boost::is_class< T >::value >::value) );     \\\n    typedef boost::mpl::bool_< trait< T, fallback_ >::value > type; \\\n};\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \\\n    BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF( trait \\\n                                         , BOOST_PP_CAT(trait,_tester)      \\\n                                         , name       \\\n                                         , default_ ) \\\n/**/\n\n#   else // other SFINAE-capable compilers\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait \\\n{ \\\n    struct gcc_3_2_wknd \\\n    { \\\n        template< typename U > \\\n        static boost::mpl::aux::yes_tag test( \\\n              boost::mpl::aux::type_wrapper<U> const volatile* \\\n            , boost::mpl::aux::type_wrapper<BOOST_MSVC_TYPENAME U::name>* = 0 \\\n            ); \\\n    \\\n        static boost::mpl::aux::no_tag test(...); \\\n    }; \\\n    \\\n    typedef boost::mpl::aux::type_wrapper<T> t_; \\\n    BOOST_STATIC_CONSTANT(bool, value = \\\n          sizeof(gcc_3_2_wknd::test(static_cast<t_*>(0))) \\\n            == sizeof(boost::mpl::aux::yes_tag) \\\n        ); \\\n    typedef boost::mpl::bool_<value> type; \\\n}; \\\n/**/\n\n#   endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\n\n#else // BOOST_MPL_CFG_NO_HAS_XXX\n\n// placeholder implementation\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait \\\n{ \\\n    BOOST_STATIC_CONSTANT(bool, value = fallback_::value); \\\n    typedef fallback_ type; \\\n}; \\\n/**/\n\n#endif\n\n#define BOOST_MPL_HAS_XXX_TRAIT_DEF(name) \\\n    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(BOOST_PP_CAT(has_,name), name, false) \\\n/**/\n\n\n#if !defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE)\n\n// Create a boolean Metafunction to detect a nested template\n// member. This implementation is based on a USENET newsgroup's\n// posting by Aleksey Gurtovoy (comp.lang.c++.moderated, 2002-03-19),\n// Rani Sharoni's USENET posting cited above, the non-template has_xxx\n// implementations above, and discussion on the Boost mailing list.\n\n#   if !defined(BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES)\n#     if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)\n#       define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 1\n#     else\n#       define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 0\n#     endif\n#   endif\n\n#   if !defined(BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION)\n#     if (defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS))\n#       define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 1\n#     else\n#       define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 0\n#     endif\n#   endif\n\n#   if !defined(BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE)\n#     if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)\n#       define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 1\n#     else\n#       define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 0\n#     endif\n#   endif\n\n// NOTE: Many internal implementation macros take a Boost.Preprocessor\n// array argument called args which is of the following form.\n//           ( 4, ( trait, name, max_arity, default_ ) )\n\n#   define BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) \\\n      BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _introspect) \\\n    /**/\n\n#   define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \\\n      BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _substitute), n) \\\n    /**/\n\n#   define BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args) \\\n      BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _test) \\\n    /**/\n\n// Thanks to Guillaume Melquiond for pointing out the need for the\n// \"substitute\" template as an argument to the overloaded test\n// functions to get SFINAE to work for member templates with the\n// correct name but different number of arguments.\n#   define BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE(z, n, args) \\\n      template< \\\n          template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), typename V) > class V \\\n       > \\\n      struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) { \\\n      }; \\\n    /**/\n\n#   define BOOST_MPL_HAS_MEMBER_SUBSTITUTE(args, substitute_macro) \\\n      BOOST_PP_REPEAT( \\\n          BOOST_PP_ARRAY_ELEM(2, args) \\\n        , BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE \\\n        , args \\\n      ) \\\n    /**/\n\n#   if !BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION\n#     define BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \\\n        template< typename V > \\\n        static boost::mpl::aux::no_tag \\\n        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)(...); \\\n      /**/\n#   else\n#     define BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \\\n        static boost::mpl::aux::no_tag \\\n        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)(...); \\\n      /**/\n#   endif\n\n#   if !BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES\n#     define BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT(z, n, args) \\\n        template< typename V > \\\n        static boost::mpl::aux::yes_tag \\\n        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \\\n            boost::mpl::aux::type_wrapper< V > const volatile* \\\n          , BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) < \\\n                V::template BOOST_PP_ARRAY_ELEM(1, args) \\\n            >* = 0 \\\n        ); \\\n      /**/\n#     define BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \\\n        BOOST_PP_REPEAT( \\\n            BOOST_PP_ARRAY_ELEM(2, args) \\\n          , BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT \\\n          , args \\\n        ) \\\n      /**/\n#   else\n#     define BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \\\n        template< typename V > \\\n        static boost::mpl::aux::yes_tag \\\n        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \\\n            V const volatile* \\\n          , member_macro(args, V, T)* = 0 \\\n        ); \\\n      /**/\n#   endif\n\n#   if !BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION\n#     define BOOST_MPL_HAS_MEMBER_TEST(args) \\\n          sizeof(BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< U >(0)) \\\n              == sizeof(boost::mpl::aux::yes_tag) \\\n      /**/\n#   else\n#     if !BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES\n#       define BOOST_MPL_HAS_MEMBER_TEST(args) \\\n          sizeof( \\\n              BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \\\n                  static_cast< boost::mpl::aux::type_wrapper< U >* >(0) \\\n              ) \\\n          ) == sizeof(boost::mpl::aux::yes_tag) \\\n        /**/\n#     else\n#       define BOOST_MPL_HAS_MEMBER_TEST(args) \\\n          sizeof( \\\n              BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \\\n                  static_cast< U* >(0) \\\n              ) \\\n          ) == sizeof(boost::mpl::aux::yes_tag) \\\n        /**/\n#     endif\n#   endif\n\n#   define BOOST_MPL_HAS_MEMBER_INTROSPECT( \\\n               args, substitute_macro, member_macro \\\n           ) \\\n      template< typename U > \\\n      struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) { \\\n          BOOST_MPL_HAS_MEMBER_SUBSTITUTE(args, substitute_macro) \\\n          BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \\\n          BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \\\n          BOOST_STATIC_CONSTANT( \\\n              bool, value = BOOST_MPL_HAS_MEMBER_TEST(args) \\\n          ); \\\n          typedef boost::mpl::bool_< value > type; \\\n      }; \\\n    /**/\n\n#   define BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \\\n               args, introspect_macro, substitute_macro, member_macro \\\n           ) \\\n      template< \\\n          typename T \\\n        , typename fallback_ \\\n              = boost::mpl::bool_< BOOST_PP_ARRAY_ELEM(3, args) > \\\n      > \\\n      class BOOST_PP_ARRAY_ELEM(0, args) { \\\n          introspect_macro(args, substitute_macro, member_macro) \\\n      public: \\\n          static const bool value \\\n              = BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args)< T >::value; \\\n          typedef typename BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args)< \\\n              T \\\n          >::type type; \\\n      }; \\\n    /**/\n\n// BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE expands to the full\n// implementation of the function-based metafunction. Compile with -E\n// to see the preprocessor output for this macro.\n#   define BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE( \\\n               args, substitute_macro, member_macro \\\n           ) \\\n      BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \\\n          args \\\n        , BOOST_MPL_HAS_MEMBER_INTROSPECT \\\n        , substitute_macro \\\n        , member_macro \\\n      ) \\\n    /**/\n\n#   if BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE\n\n#     if !defined(BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE)\n#       if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)\n#         define BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE 1\n#       endif\n#     endif\n\n#     if !BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE\n#       define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                   args, n \\\n               ) \\\n          BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \\\n        /**/\n#     else\n#       define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                   args, n \\\n               ) \\\n          BOOST_PP_CAT( \\\n              boost_mpl_has_xxx_ \\\n            , BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \\\n          ) \\\n        /**/\n#     endif\n\n#     define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME( \\\n                 args \\\n             ) \\\n        BOOST_PP_CAT( \\\n            BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                args, 0 \\\n            ) \\\n          , _tag \\\n        ) \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \\\n                 z, n, args \\\n             ) \\\n        template< \\\n             template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), typename U) > class U \\\n        > \\\n        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                args, n \\\n               ) { \\\n            typedef \\\n                BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args) \\\n                type; \\\n        }; \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \\\n                 args, substitute_macro \\\n             ) \\\n        typedef void \\\n            BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args); \\\n        BOOST_PP_REPEAT( \\\n            BOOST_PP_ARRAY_ELEM(2, args) \\\n          , BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE_WITH_TEMPLATE_SFINAE \\\n          , args \\\n        ) \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_REJECT_WITH_TEMPLATE_SFINAE( \\\n                 args, member_macro \\\n             ) \\\n        template< \\\n            typename U \\\n          , typename V \\\n                = BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args) \\\n        > \\\n        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args) { \\\n            BOOST_STATIC_CONSTANT(bool, value = false); \\\n            typedef boost::mpl::bool_< value > type; \\\n        }; \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT_WITH_TEMPLATE_SFINAE( \\\n                 z, n, args \\\n             ) \\\n        template< typename U > \\\n        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< \\\n            U \\\n          , typename \\\n                BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                    args, n \\\n                )< \\\n                    BOOST_MSVC_TYPENAME U::BOOST_PP_ARRAY_ELEM(1, args)< > \\\n                >::type \\\n        > { \\\n            BOOST_STATIC_CONSTANT(bool, value = true); \\\n            typedef boost::mpl::bool_< value > type; \\\n        }; \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_ACCEPT_WITH_TEMPLATE_SFINAE( \\\n                 args, member_macro \\\n             ) \\\n        BOOST_PP_REPEAT( \\\n            BOOST_PP_ARRAY_ELEM(2, args) \\\n          , BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT_WITH_TEMPLATE_SFINAE \\\n          , args \\\n        ) \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_INTROSPECT_WITH_TEMPLATE_SFINAE( \\\n                 args, substitute_macro, member_macro \\\n             ) \\\n        BOOST_MPL_HAS_MEMBER_REJECT_WITH_TEMPLATE_SFINAE(args, member_macro) \\\n        BOOST_MPL_HAS_MEMBER_ACCEPT_WITH_TEMPLATE_SFINAE(args, member_macro) \\\n        template< typename U > \\\n        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) \\\n            : BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< U > { \\\n        }; \\\n      /**/\n \n// BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE expands to the full\n// implementation of the template-based metafunction. Compile with -E\n// to see the preprocessor output for this macro.\n//\n// Note that if BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE is\n// defined BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE needs\n// to be expanded at namespace level before\n// BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE can be used.\n#     define BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE( \\\n                 args, substitute_macro, member_macro \\\n             ) \\\n        BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \\\n            args, substitute_macro \\\n        ) \\\n        BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \\\n            args \\\n          , BOOST_MPL_HAS_MEMBER_INTROSPECT_WITH_TEMPLATE_SFINAE \\\n          , substitute_macro \\\n          , member_macro \\\n        ) \\\n      /**/\n\n#   endif // BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE\n\n// Note: In the current implementation the parameter and access macros\n// are no longer expanded.\n#   if !BOOST_WORKAROUND(BOOST_MSVC, <= 1400)\n#     define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \\\n        BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE( \\\n            ( 4, ( trait, name, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, default_ ) ) \\\n          , BOOST_MPL_HAS_MEMBER_TEMPLATE_SUBSTITUTE_PARAMETER \\\n          , BOOST_MPL_HAS_MEMBER_TEMPLATE_ACCESS \\\n        ) \\\n      /**/\n#   else\n#     define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \\\n        BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE( \\\n            ( 4, ( trait, name, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, default_ ) ) \\\n          , BOOST_MPL_HAS_MEMBER_TEMPLATE_SUBSTITUTE_PARAMETER \\\n          , BOOST_MPL_HAS_MEMBER_TEMPLATE_ACCESS \\\n        ) \\\n      /**/\n#   endif\n\n#else // BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE\n\n// placeholder implementation\n\n#   define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \\\n      template< typename T \\\n              , typename fallback_ = boost::mpl::bool_< default_ > > \\\n      struct trait { \\\n          BOOST_STATIC_CONSTANT(bool, value = fallback_::value); \\\n          typedef fallback_ type; \\\n      }; \\\n    /**/\n\n#endif // BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE\n\n#   define BOOST_MPL_HAS_XXX_TEMPLATE_DEF(name) \\\n      BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF( \\\n          BOOST_PP_CAT(has_, name), name, false \\\n      ) \\\n    /**/\n\n#endif // BOOST_MPL_HAS_XXX_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/identity.hpp",
    "content": "\n#ifndef BOOST_MPL_IDENTITY_HPP_INCLUDED\n#define BOOST_MPL_IDENTITY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct identity\n{\n    typedef T type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, identity, (T))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct make_identity\n{\n    typedef identity<T> type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, make_identity, (T))\n};\n\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(1, identity)\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(1, make_identity)\n\n}}\n\n#endif // BOOST_MPL_IDENTITY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/if.hpp",
    "content": "\n#ifndef BOOST_MPL_IF_HPP_INCLUDED\n#define BOOST_MPL_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/integral.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      bool C\n    , typename T1\n    , typename T2\n    >\nstruct if_c\n{\n    typedef T1 type;\n};\n\ntemplate<\n      typename T1\n    , typename T2\n    >\nstruct if_c<false,T1,T2>\n{\n    typedef T2 type;\n};\n\n// agurt, 05/sep/04: nondescriptive parameter names for the sake of DigitalMars\n// (and possibly MWCW < 8.0); see http://article.gmane.org/gmane.comp.lib.boost.devel/108959\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename BOOST_MPL_AUX_NA_PARAM(T3)\n    >\nstruct if_\n{\n private:\n    // agurt, 02/jan/03: two-step 'type' definition for the sake of aCC \n    typedef if_c<\n#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS)\n          BOOST_MPL_AUX_VALUE_WKND(T1)::value\n#else\n          BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value)\n#endif\n        , T2\n        , T3\n        > almost_type_;\n \n public:\n    typedef typename almost_type_::type type;\n    \n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3))\n};\n\n#else\n\n// no partial class template specialization\n\nnamespace aux {\n\ntemplate< bool C >\nstruct if_impl\n{\n    template< typename T1, typename T2 > struct result_\n    {\n        typedef T1 type;\n    };\n};\n\ntemplate<>\nstruct if_impl<false>\n{\n    template< typename T1, typename T2 > struct result_\n    { \n        typedef T2 type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      bool C_\n    , typename T1\n    , typename T2\n    >\nstruct if_c\n{\n    typedef typename aux::if_impl< C_ >\n        ::template result_<T1,T2>::type type;\n};\n\n// (almost) copy & paste in order to save one more \n// recursively nested template instantiation to user\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(C_)\n    , typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct if_\n{\n    enum { msvc_wknd_ = BOOST_MPL_AUX_MSVC_VALUE_WKND(C_)::value };\n\n    typedef typename aux::if_impl< BOOST_MPL_AUX_STATIC_CAST(bool, msvc_wknd_) >\n        ::template result_<T1,T2>::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(C_,T1,T2))\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nBOOST_MPL_AUX_NA_SPEC(3, if_)\n\n}}\n\n#endif // BOOST_MPL_IF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/index_if.hpp",
    "content": "\n#ifndef BOOST_MPL_INDEX_IF_HPP_INCLUDED\n#define BOOST_MPL_INDEX_IF_HPP_INCLUDED\n\n// Copyright Eric Friedman 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/find_if_pred.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/iter_fold_if.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Predicate)\n    >\nstruct index_if\n{\n    typedef typename iter_fold_if<\n          Sequence\n        , int_<0>\n        , next<>\n        , aux::find_if_pred<Predicate>\n        >::type result_;\n\n    typedef typename end<Sequence>::type not_found_;\n    typedef typename first<result_>::type result_index_;\n    typedef typename second<result_>::type result_iterator_;\n\n    typedef typename if_<\n          is_same< result_iterator_,not_found_ >\n        , void_\n        , result_index_\n        >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,index_if,(Sequence,Predicate))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, index_if)\n\n}}\n\n#endif // BOOST_MPL_INDEX_IF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/index_of.hpp",
    "content": "\n#ifndef BOOST_MPL_INDEX_OF_HPP_INCLUDED\n#define BOOST_MPL_INDEX_OF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright Eric Friedman 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/index_if.hpp>\n#include <boost/mpl/same_as.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct index_of\n    : index_if< Sequence,same_as<T> >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,index_of,(Sequence,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, index_of)\n\n}}\n\n#endif // BOOST_MPL_INDEX_OF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/inherit.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_INHERIT_HPP_INCLUDED\n#define BOOST_MPL_INHERIT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/empty_base.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER inherit.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/dtp.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/dec.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n// 'inherit<T1,T2,..,Tn>' metafunction; returns an unspecified class type\n// produced by public derivation from all metafunction's parameters \n// (T1,T2,..,Tn), except the parameters of 'empty_base' class type; \n// regardless the position and number of 'empty_base' parameters in the \n// metafunction's argument list, derivation from them is always a no-op;\n// for instance:\n//      inherit<her>::type == her\n//      inherit<her,my>::type == struct unspecified : her, my {};\n//      inherit<empty_base,her>::type == her\n//      inherit<empty_base,her,empty_base,empty_base>::type == her\n//      inherit<her,empty_base,my>::type == struct unspecified : her, my {};\n//      inherit<empty_base,empty_base>::type == empty_base\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    > \nstruct inherit2\n    : T1, T2\n{\n    typedef inherit2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1,T2))\n};\n\ntemplate< typename T1 > \nstruct inherit2<T1,empty_base>\n{\n    typedef T1 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1,empty_base))\n};\n\ntemplate< typename T2 > \nstruct inherit2<empty_base,T2>\n{\n    typedef T2 type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base,T2))\n};\n\n// needed to disambiguate the previous two in case when both \n// T1 and T2 == empty_base\ntemplate<> \nstruct inherit2<empty_base,empty_base>\n{\n    typedef empty_base type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base,empty_base))\n};\n\n#else\n\nnamespace aux {\n\ntemplate< bool C1, bool C2 >\nstruct inherit2_impl\n{\n    template< typename Derived, typename T1, typename T2 > struct result_ \n        : T1, T2\n    {\n        typedef Derived type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl<false,true>\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T1\n    {\n        typedef T1 type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl<true,false>\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n        : T2 \n    {\n        typedef T2 type_;\n    };\n};\n\ntemplate<>\nstruct inherit2_impl<true,true>\n{\n    template< typename Derived, typename T1, typename T2 > struct result_\n    {\n        typedef T1 type_;\n    };\n};\n\n} // namespace aux\n\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    > \nstruct inherit2\n    : aux::inherit2_impl<\n          is_empty_base<T1>::value\n        , is_empty_base<T2>::value\n        >::template result_< inherit2<T1,T2>,T1,T2 >\n{\n    typedef typename inherit2::type_ type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1,T2))\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit2)\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(3, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/inherit.hpp>))\n#include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_INHERIT_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define n_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      BOOST_MPL_PP_DEFAULT_PARAMS(n_, typename T, na)\n    >\nstruct BOOST_PP_CAT(inherit,n_)\n    : inherit2<\n          typename BOOST_PP_CAT(inherit,BOOST_PP_DEC(n_))<\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(n_), T)\n            >::type\n        , BOOST_PP_CAT(T,n_)\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          n_\n        , BOOST_PP_CAT(inherit,n_)\n        , (BOOST_MPL_PP_PARAMS(n_, T))\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(n_, BOOST_PP_CAT(inherit,n_))\n\n#if n_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n/// primary template\ntemplate<\n      BOOST_MPL_PP_DEFAULT_PARAMS(n_, typename T, empty_base)\n    >\nstruct inherit\n    : BOOST_PP_CAT(inherit,n_)<BOOST_MPL_PP_PARAMS(n_, T)>\n{\n};\n\n// 'na' specialization\ntemplate<>\nstruct inherit< BOOST_MPL_PP_ENUM(5, na) >\n{\n    template<\n#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n          BOOST_MPL_PP_DEFAULT_PARAMS(n_, typename T, empty_base)\n#else\n          BOOST_MPL_PP_PARAMS(n_, typename T)\n#endif\n        >\n    struct apply\n        : inherit< BOOST_MPL_PP_PARAMS(n_, T) >\n    {\n    };\n};\n\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(n_, inherit)\nBOOST_MPL_AUX_NA_SPEC_ARITY(n_, inherit)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(n_, n_, inherit)\n#endif\n\n#undef n_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/inherit_linearly.hpp",
    "content": "\n#ifndef BOOST_MPL_INHERIT_FRONT_TO_BACK_HPP_INCLUDED\n#define BOOST_MPL_INHERIT_FRONT_TO_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/empty_base.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Types_)\n    , typename BOOST_MPL_AUX_NA_PARAM(Node_)\n    , typename Root_ = empty_base\n    >\nstruct inherit_linearly\n    : fold<Types_,Root_,Node_>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,inherit_linearly,(Types_,Node_,Root_))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, inherit_linearly)\n\n}}\n\n#endif // BOOST_MPL_INHERIT_FRONT_TO_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/insert.hpp",
    "content": "\n#ifndef BOOST_MPL_INSERT_HPP_INCLUDED\n#define BOOST_MPL_INSERT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/insert_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/insert_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Pos_or_T)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct insert\n    : insert_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,Pos_or_T,T >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,insert,(Sequence,Pos_or_T,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, insert)\n\n}}\n\n#endif // BOOST_MPL_INSERT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/insert_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_INSERT_FWD_HPP_INCLUDED\n#define BOOST_MPL_INSERT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct insert_impl;\ntemplate< typename Sequence, typename Pos_or_T, typename T > struct insert;\n\n}}\n\n#endif // BOOST_MPL_INSERT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/insert_range.hpp",
    "content": "\n#ifndef BOOST_MPL_INSERT_RANGE_HPP_INCLUDED\n#define BOOST_MPL_INSERT_RANGE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/insert_range_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/insert_range_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Pos)\n    , typename BOOST_MPL_AUX_NA_PARAM(Range)\n    >\nstruct insert_range\n    : insert_range_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,Pos,Range >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,insert_range,(Sequence,Pos,Range))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, insert_range)\n\n}}\n\n#endif // BOOST_MPL_INSERT_RANGE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/insert_range_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED\n#define BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct insert_range_impl;\ntemplate< typename Sequence, typename Pos, typename Range > struct insert_range;\n\n}}\n\n#endif // BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/inserter.hpp",
    "content": "\n#ifndef BOOST_MPL_INSERTER_HPP_INCLUDED\n#define BOOST_MPL_INSERTER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Sequence\n    , typename Operation\n    >\nstruct inserter\n{\n    typedef Sequence    state;\n    typedef Operation   operation;\n};\n\n}}\n\n#endif // BOOST_MPL_INSERTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/int.hpp",
    "content": "\n#ifndef BOOST_MPL_INT_HPP_INCLUDED\n#define BOOST_MPL_INT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/int_fwd.hpp>\n\n#define AUX_WRAPPER_VALUE_TYPE int\n#include <boost/mpl/aux_/integral_wrapper.hpp>\n\n#endif // BOOST_MPL_INT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/int_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_INT_FWD_HPP_INCLUDED\n#define BOOST_MPL_INT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct int_;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(int_)\n\n#endif // BOOST_MPL_INT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/integral_c.hpp",
    "content": "\n#ifndef BOOST_MPL_INTEGRAL_C_HPP_INCLUDED\n#define BOOST_MPL_INTEGRAL_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/integral_c_fwd.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(__HP_aCC, <= 53800)\n// the type of non-type template arguments may not depend on template arguments\n#   define AUX_WRAPPER_PARAMS(N) typename T, long N\n#else\n#   define AUX_WRAPPER_PARAMS(N) typename T, T N\n#endif\n\n#define AUX_WRAPPER_NAME integral_c\n#define AUX_WRAPPER_VALUE_TYPE T\n#define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< T, value >\n#include <boost/mpl/aux_/integral_wrapper.hpp>\n\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n && !BOOST_WORKAROUND(__BORLANDC__, <= 0x551)\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n// 'bool' constant doesn't have 'next'/'prior' members\ntemplate< bool C >\nstruct integral_c<bool, C>\n{\n    BOOST_STATIC_CONSTANT(bool, value = C);\n    typedef integral_c_tag tag;\n    typedef integral_c type;\n    typedef bool value_type;\n    operator bool() const { return this->value; }\n};\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n#endif\n\n#endif // BOOST_MPL_INTEGRAL_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/integral_c_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED\n#define BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\n#if BOOST_WORKAROUND(__HP_aCC, <= 53800)\n// the type of non-type template arguments may not depend on template arguments\ntemplate< typename T, long N > struct integral_c;\n#else\ntemplate< typename T, T N > struct integral_c;\n#endif\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c)\n\n#endif // BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/integral_c_tag.hpp",
    "content": "\n#ifndef BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED\n#define BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\nstruct integral_c_tag { BOOST_STATIC_CONSTANT(int, value = 0); };\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c_tag)\n\n#endif // BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/is_placeholder.hpp",
    "content": "\n#ifndef BOOST_MPL_IS_PLACEHOLDER_HPP_INCLUDED\n#define BOOST_MPL_IS_PLACEHOLDER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/arg_fwd.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename T >\nstruct is_placeholder\n    : bool_<false>\n{\n};\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) >\nstruct is_placeholder< arg<N> >\n    : bool_<true>\n{\n};\n\n#else\n\nnamespace aux {\n\naux::no_tag is_placeholder_helper(...);\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) >\naux::yes_tag is_placeholder_helper(aux::type_wrapper< arg<N> >*);\n\n} // namespace aux\n\ntemplate< typename T >\nstruct is_placeholder\n{\n    static aux::type_wrapper<T>* get();\n    BOOST_STATIC_CONSTANT(bool, value = \n          sizeof(aux::is_placeholder_helper(get())) == sizeof(aux::yes_tag)\n        );\n    \n    typedef bool_<value> type;\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n}}\n\n#endif // BOOST_MPL_IS_PLACEHOLDER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/is_sequence.hpp",
    "content": "\n#ifndef BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED\n#define BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/sequence_tag_fwd.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/has_tag.hpp>\n#include <boost/mpl/aux_/has_begin.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n#   include <boost/mpl/aux_/msvc_is_class.hpp>\n#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n#   include <boost/type_traits/is_class.hpp>\n#endif\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\nnamespace aux {\n\n// agurt, 11/jun/03: \n// MSVC 6.5/7.0 fails if 'has_begin' is instantiated on a class type that has a\n// 'begin' member that doesn't name a type; e.g. 'has_begin< std::vector<int> >'\n// would fail; requiring 'T' to have _both_ 'tag' and 'begin' members workarounds\n// the issue for most real-world cases\ntemplate< typename T > struct is_sequence_impl\n    : and_<\n          identity< aux::has_tag<T> >\n        , identity< aux::has_begin<T> >\n        >\n{\n};\n\n} // namespace aux\n        \ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct is_sequence\n    : if_<\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n          aux::msvc_is_class<T> \n#else\n          boost::is_class<T> \n#endif\n        , aux::is_sequence_impl<T>\n        , bool_<false>\n        >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))\n};\n\n#elif defined(BOOST_MPL_CFG_NO_HAS_XXX)\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct is_sequence\n    : bool_<false>\n{\n};\n\n#else\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct is_sequence\n    : not_< is_same< typename begin<T>::type, void_ > >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))\n};\n\n#endif // BOOST_MSVC\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\ntemplate<> struct is_sequence<int>\n    : bool_<false>\n{\n};\n#endif\n\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(1, is_sequence)\n\n}}\n\n#endif // BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/iter_fold.hpp",
    "content": "\n#ifndef BOOST_MPL_ITER_FOLD_HPP_INCLUDED\n#define BOOST_MPL_ITER_FOLD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/O1_size.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/aux_/iter_fold_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)\n    >\nstruct iter_fold\n{\n    typedef typename aux::iter_fold_impl<\n          ::boost::mpl::O1_size<Sequence>::value\n        , typename begin<Sequence>::type\n        , typename end<Sequence>::type\n        , State\n        , typename lambda<ForwardOp>::type\n        >::state type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,iter_fold,(Sequence,State,ForwardOp))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, iter_fold)\n\n}}\n\n#endif // BOOST_MPL_ITER_FOLD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/iter_fold_if.hpp",
    "content": "\n#ifndef BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED\n#define BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright Eric Friedman 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/logical.hpp>\n#include <boost/mpl/always.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/pair.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/aux_/iter_fold_if_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< typename Predicate, typename LastIterator >\nstruct iter_fold_if_pred\n{\n    template< typename State, typename Iterator > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : and_<\n              not_< is_same<Iterator,LastIterator> >\n            , apply1<Predicate,Iterator>\n            >\n    {\n#else\n    {\n        typedef and_<\n              not_< is_same<Iterator,LastIterator> >\n            , apply1<Predicate,Iterator>\n            > type;\n#endif\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)\n    , typename BOOST_MPL_AUX_NA_PARAM(ForwardPredicate)\n    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)\n    , typename BOOST_MPL_AUX_NA_PARAM(BackwardPredicate)\n    >\nstruct iter_fold_if\n{\n\n    typedef typename begin<Sequence>::type first_;\n    typedef typename end<Sequence>::type last_;\n\n    typedef typename eval_if<\n          is_na<BackwardPredicate>\n        , if_< is_na<BackwardOp>, always<false_>, always<true_> >\n        , identity<BackwardPredicate>\n        >::type backward_pred_;\n\n// cwpro8 doesn't like 'cut-off' type here (use typedef instead)\n#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n    struct result_ :\n#else\n    typedef\n#endif\n        aux::iter_fold_if_impl<\n          first_\n        , State\n        , ForwardOp\n        , protect< aux::iter_fold_if_pred< ForwardPredicate,last_ > >\n        , BackwardOp\n        , backward_pred_\n        >\n#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n    { };\n#else\n    result_;\n#endif\n\npublic:\n\n    typedef pair<\n          typename result_::state\n        , typename result_::iterator\n        > type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , iter_fold_if\n        , (Sequence,State,ForwardOp,ForwardPredicate,BackwardOp,BackwardPredicate)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(6, iter_fold_if)\n\n}}\n\n#endif // BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/iterator_category.hpp",
    "content": "\n#ifndef BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED\n#define BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost {  namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Iterator)\n    >\nstruct iterator_category\n{\n    typedef typename Iterator::category type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,iterator_category,(Iterator))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, iterator_category)\n\n}}\n\n#endif // BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/iterator_range.hpp",
    "content": "\n#ifndef BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED\n#define BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\nstruct iterator_range_tag;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(First)\n    , typename BOOST_MPL_AUX_NA_PARAM(Last)\n    >\nstruct iterator_range\n{\n    typedef iterator_range_tag tag;\n    typedef iterator_range type;\n    typedef First begin;\n    typedef Last end;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,iterator_range,(First,Last))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, iterator_range)\n\n}}\n\n#endif // BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/iterator_tags.hpp",
    "content": "\n#ifndef BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED\n#define BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/int.hpp>\n\nnamespace boost { namespace mpl {\n\nstruct forward_iterator_tag       : int_<0> { typedef forward_iterator_tag type; };\nstruct bidirectional_iterator_tag : int_<1> { typedef bidirectional_iterator_tag type; };\nstruct random_access_iterator_tag : int_<2> { typedef random_access_iterator_tag type; };\n\n}}\n\n#endif // BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/joint_view.hpp",
    "content": "\n#ifndef BOOST_MPL_JOINT_VIEW_HPP_INCLUDED\n#define BOOST_MPL_JOINT_VIEW_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/joint_iter.hpp>\n#include <boost/mpl/plus.hpp>\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\nstruct joint_view_tag;\n}\n\ntemplate<>\nstruct size_impl< aux::joint_view_tag >\n{\n    template < typename JointView > struct apply\n      : plus<\n            size<typename JointView::sequence1_>\n          , size<typename JointView::sequence2_>\n          >\n    {};\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence1_)\n    , typename BOOST_MPL_AUX_NA_PARAM(Sequence2_)\n    >\nstruct joint_view\n{\n    typedef typename mpl::begin<Sequence1_>::type   first1_;\n    typedef typename mpl::end<Sequence1_>::type     last1_;\n    typedef typename mpl::begin<Sequence2_>::type   first2_;\n    typedef typename mpl::end<Sequence2_>::type     last2_;\n\n    // agurt, 25/may/03: for the 'size_traits' implementation above\n    typedef Sequence1_ sequence1_;\n    typedef Sequence2_ sequence2_;\n\n    typedef joint_view type;\n    typedef aux::joint_view_tag tag;\n    typedef joint_iter<first1_,last1_,first2_>  begin;\n    typedef joint_iter<last1_,last1_,last2_>    end;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, joint_view)\n\n}}\n\n#endif // BOOST_MPL_JOINT_VIEW_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/key_type.hpp",
    "content": "\n#ifndef BOOST_MPL_KEY_TYPE_HPP_INCLUDED\n#define BOOST_MPL_KEY_TYPE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/key_type_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/apply_wrap.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(AssociativeSequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct key_type\n    : apply_wrap2< \n          key_type_impl< typename sequence_tag<AssociativeSequence>::type >\n        , AssociativeSequence, T>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,key_type,(AssociativeSequence,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, key_type)\n\n}}\n\n#endif // BOOST_MPL_KEY_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/key_type_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED\n#define BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct key_type_impl;\ntemplate< typename AssociativeSequence, typename T > struct key_type;\n\n}}\n\n#endif // BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/lambda.hpp",
    "content": "\n#ifndef BOOST_MPL_LAMBDA_HPP_INCLUDED\n#define BOOST_MPL_LAMBDA_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/lambda_fwd.hpp>\n#include <boost/mpl/bind.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   include <boost/mpl/aux_/full_lambda.hpp>\n#else\n#   include <boost/mpl/aux_/lambda_no_ctps.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#   define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS\n#endif\n\n#endif // BOOST_MPL_LAMBDA_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/lambda_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED\n#define BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/void_fwd.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n\n#   include <boost/mpl/int.hpp>\n#   include <boost/mpl/aux_/lambda_arity_param.hpp>\n#   include <boost/mpl/aux_/template_arity_fwd.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< \n      typename T = na\n    , typename Tag = void_\n    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(\n          typename Arity = int_< aux::template_arity<T>::value >\n        )\n    >\nstruct lambda;\n\n}}\n\n#else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#   include <boost/mpl/bool.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< \n      typename T = na\n    , typename Tag = void_\n    , typename Protect = true_\n    > \nstruct lambda;\n\n}}\n\n#endif\n\n#endif // BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/less.hpp",
    "content": "\n#ifndef BOOST_MPL_LESS_HPP_INCLUDED\n#define BOOST_MPL_LESS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME less\n#define AUX778076_OP_TOKEN <\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_LESS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/less_equal.hpp",
    "content": "\n#ifndef BOOST_MPL_LESS_EQUAL_HPP_INCLUDED\n#define BOOST_MPL_LESS_EQUAL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME less_equal\n#define AUX778076_OP_TOKEN <=\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_LESS_EQUAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/limits/arity.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\n#   define BOOST_MPL_LIMIT_METAFUNCTION_ARITY 5\n#endif\n\n#endif // BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/limits/list.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_LIST_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_LIST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_LIMIT_LIST_SIZE)\n#   define BOOST_MPL_LIMIT_LIST_SIZE 20\n#endif\n\n#endif // BOOST_MPL_LIMITS_LIST_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/limits/map.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_MAP_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_MAP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_LIMIT_MAP_SIZE)\n#   define BOOST_MPL_LIMIT_MAP_SIZE 20\n#endif\n\n#endif // BOOST_MPL_LIMITS_MAP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/limits/set.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_SET_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_SET_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_LIMIT_SET_SIZE)\n#   define BOOST_MPL_LIMIT_SET_SIZE 20\n#endif\n\n#endif // BOOST_MPL_LIMITS_SET_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/limits/string.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_STRING_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_STRING_HPP_INCLUDED\n\n// Copyright Eric Niebler 2009\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: string.hpp 49239 2009-04-01 09:10:26Z eric_niebler $\n// $Date: 2009-04-01 02:10:26 -0700 (Wed, 1 Apr 2009) $\n// $Revision: 49239 $\n\n#if !defined(BOOST_MPL_LIMIT_STRING_SIZE)\n#   define BOOST_MPL_LIMIT_STRING_SIZE 32\n#endif\n\n#endif // BOOST_MPL_LIMITS_STRING_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/limits/unrolling.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_UNROLLING_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_UNROLLING_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_LIMIT_UNROLLING)\n#   define BOOST_MPL_LIMIT_UNROLLING 4\n#endif\n\n#endif // BOOST_MPL_LIMITS_UNROLLING_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/limits/vector.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_LIMIT_VECTOR_SIZE)\n#   define BOOST_MPL_LIMIT_VECTOR_SIZE 20\n#endif\n\n#endif // BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/O1_size.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/O1_size_fwd.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct O1_size_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n        : List::size\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/begin_end.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end_fwd.hpp>\n#include <boost/mpl/list/aux_/iterator.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct begin_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n    {\n        typedef l_iter<typename List::type> type;\n    };\n};\n\ntemplate<>\nstruct end_impl< aux::list_tag >\n{\n    template< typename > struct apply\n    {\n        typedef l_iter<l_end> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/clear.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct clear_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n    {\n        typedef l_end type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/empty.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/empty_fwd.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct empty_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n        : not_<typename List::size>\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/front.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/front_fwd.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct front_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n    {\n        typedef typename List::item type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/include_preprocessed.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/stringize.hpp>\n\n#   define AUX778076_HEADER \\\n    aux_/preprocessed/plain/BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))\n#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)\n#   include AUX778076_INCLUDE_STRING\n#   undef AUX778076_INCLUDE_STRING\n#else\n#   include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)\n#endif\n\n#   undef AUX778076_HEADER\n\n#undef BOOST_MPL_PREPROCESSED_HEADER\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/item.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Size\n    , typename T\n    , typename Next\n    >\nstruct l_item\n{\n// agurt, 17/jul/03: to facilitate the deficient 'is_sequence' implementation \n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    typedef int begin;\n#endif\n    typedef aux::list_tag tag;\n    typedef l_item type;\n\n    typedef Size size;\n    typedef T item;\n    typedef Next next;\n};\n\nstruct l_end\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    typedef int begin;\n#endif\n    typedef aux::list_tag tag;\n    typedef l_end type;\n    typedef long_<0> size;\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/iterator.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/lambda_spec.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename Node >\nstruct l_iter\n{\n    typedef aux::l_iter_tag tag;\n    typedef forward_iterator_tag category;\n};\n\ntemplate< typename Node >\nstruct deref< l_iter<Node> >\n{\n    typedef typename Node::item type;\n};\n\ntemplate< typename Node >\nstruct next< l_iter<Node> >\n{\n    typedef l_iter< typename Node::next > type;\n};\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate< typename Node >\nstruct l_iter\n{\n    typedef aux::l_iter_tag tag;\n    typedef forward_iterator_tag category;\n    typedef typename Node::item type;\n    typedef l_iter< typename mpl::next<Node>::type > next;\n};\n\n#endif\n\n\ntemplate<> struct l_iter<l_end>\n{\n    typedef aux::l_iter_tag tag;\n    typedef forward_iterator_tag category;\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    typedef na type;\n    typedef l_iter next;\n#endif\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, l_iter)\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/numbered.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Peter Dimov 2000-2002\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if defined(BOOST_PP_IS_ITERATING)\n\n#include <boost/preprocessor/enum_params.hpp>\n#include <boost/preprocessor/enum_shifted_params.hpp>\n#include <boost/preprocessor/dec.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n#define i BOOST_PP_FRAME_ITERATION(1)\n\n#if i == 1\n\ntemplate<\n      BOOST_PP_ENUM_PARAMS(i, typename T)\n    >\nstruct list1\n    : l_item<\n          long_<1>\n        , T0\n        , l_end\n        >\n{\n    typedef list1 type;\n};\n\n#else\n\n#   define MPL_AUX_LIST_TAIL(list, i, T) \\\n    BOOST_PP_CAT(list,BOOST_PP_DEC(i))< \\\n      BOOST_PP_ENUM_SHIFTED_PARAMS(i, T) \\\n    > \\\n    /**/\n    \ntemplate<\n      BOOST_PP_ENUM_PARAMS(i, typename T)\n    >\nstruct BOOST_PP_CAT(list,i)\n    : l_item<\n          long_<i>\n        , T0\n        , MPL_AUX_LIST_TAIL(list,i,T)\n        >\n{\n    typedef BOOST_PP_CAT(list,i) type;\n};\n\n#   undef MPL_AUX_LIST_TAIL\n\n#endif // i == 1\n\n#undef i\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/numbered_c.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if defined(BOOST_PP_IS_ITERATING)\n\n#include <boost/preprocessor/enum_params.hpp>\n#include <boost/preprocessor/enum_shifted_params.hpp>\n#include <boost/preprocessor/dec.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n#define i BOOST_PP_FRAME_ITERATION(1)\n\n#if i == 1\n\ntemplate<\n      typename T\n    , BOOST_PP_ENUM_PARAMS(i, T C)\n    >\nstruct list1_c\n    : l_item<\n          long_<1>\n        , integral_c<T,C0>\n        , l_end\n        >\n{\n    typedef list1_c type;\n    typedef T value_type;\n};\n\n#else\n\n#   define MPL_AUX_LIST_C_TAIL(list, i, C) \\\n    BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_PP_DEC(i)),_c)<T, \\\n      BOOST_PP_ENUM_SHIFTED_PARAMS(i, C) \\\n    > \\\n    /**/\n    \ntemplate<\n      typename T\n    , BOOST_PP_ENUM_PARAMS(i, T C)\n    >\nstruct BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c)\n    : l_item<\n          long_<i>\n        , integral_c<T,C0>\n        , MPL_AUX_LIST_C_TAIL(list,i,C)\n        >\n{\n    typedef BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c) type;\n    typedef T value_type;\n};\n\n#   undef MPL_AUX_LIST_C_TAIL\n\n#endif // i == 1\n\n#undef i\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/pop_front.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/pop_front_fwd.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct pop_front_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n    {\n        typedef typename mpl::next<List>::type type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0\n    >\nstruct list1\n    : l_item<\n          long_<1>\n        , T0\n        , l_end\n        >\n{\n    typedef list1 type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list2\n    : l_item<\n          long_<2>\n        , T0\n        , list1<T1>\n        >\n{\n    typedef list2 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list3\n    : l_item<\n          long_<3>\n        , T0\n        , list2< T1,T2 >\n        >\n{\n    typedef list3 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list4\n    : l_item<\n          long_<4>\n        , T0\n        , list3< T1,T2,T3 >\n        >\n{\n    typedef list4 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list5\n    : l_item<\n          long_<5>\n        , T0\n        , list4< T1,T2,T3,T4 >\n        >\n{\n    typedef list5 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list6\n    : l_item<\n          long_<6>\n        , T0\n        , list5< T1,T2,T3,T4,T5 >\n        >\n{\n    typedef list6 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list7\n    : l_item<\n          long_<7>\n        , T0\n        , list6< T1,T2,T3,T4,T5,T6 >\n        >\n{\n    typedef list7 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list8\n    : l_item<\n          long_<8>\n        , T0\n        , list7< T1,T2,T3,T4,T5,T6,T7 >\n        >\n{\n    typedef list8 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list9\n    : l_item<\n          long_<9>\n        , T0\n        , list8< T1,T2,T3,T4,T5,T6,T7,T8 >\n        >\n{\n    typedef list9 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list10\n    : l_item<\n          long_<10>\n        , T0\n        , list9< T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n        >\n{\n    typedef list10 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list10_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0\n    >\nstruct list1_c\n    : l_item<\n          long_<1>\n        , integral_c< T,C0 >\n        , l_end\n        >\n{\n    typedef list1_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1\n    >\nstruct list2_c\n    : l_item<\n          long_<2>\n        , integral_c< T,C0 >\n        , list1_c< T,C1 >\n        >\n{\n    typedef list2_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2\n    >\nstruct list3_c\n    : l_item<\n          long_<3>\n        , integral_c< T,C0 >\n        , list2_c< T,C1,C2 >\n        >\n{\n    typedef list3_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3\n    >\nstruct list4_c\n    : l_item<\n          long_<4>\n        , integral_c< T,C0 >\n        , list3_c< T,C1,C2,C3 >\n        >\n{\n    typedef list4_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4\n    >\nstruct list5_c\n    : l_item<\n          long_<5>\n        , integral_c< T,C0 >\n        , list4_c< T,C1,C2,C3,C4 >\n        >\n{\n    typedef list5_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5\n    >\nstruct list6_c\n    : l_item<\n          long_<6>\n        , integral_c< T,C0 >\n        , list5_c< T,C1,C2,C3,C4,C5 >\n        >\n{\n    typedef list6_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6\n    >\nstruct list7_c\n    : l_item<\n          long_<7>\n        , integral_c< T,C0 >\n        , list6_c< T,C1,C2,C3,C4,C5,C6 >\n        >\n{\n    typedef list7_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7\n    >\nstruct list8_c\n    : l_item<\n          long_<8>\n        , integral_c< T,C0 >\n        , list7_c< T,C1,C2,C3,C4,C5,C6,C7 >\n        >\n{\n    typedef list8_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8\n    >\nstruct list9_c\n    : l_item<\n          long_<9>\n        , integral_c< T,C0 >\n        , list8_c< T,C1,C2,C3,C4,C5,C6,C7,C8 >\n        >\n{\n    typedef list9_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9\n    >\nstruct list10_c\n    : l_item<\n          long_<10>\n        , integral_c< T,C0 >\n        , list9_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n        >\n{\n    typedef list10_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list11\n    : l_item<\n          long_<11>\n        , T0\n        , list10< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n        >\n{\n    typedef list11 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list12\n    : l_item<\n          long_<12>\n        , T0\n        , list11< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n        >\n{\n    typedef list12 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list13\n    : l_item<\n          long_<13>\n        , T0\n        , list12< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n        >\n{\n    typedef list13 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list14\n    : l_item<\n          long_<14>\n        , T0\n        , list13< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n        >\n{\n    typedef list14 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list15\n    : l_item<\n          long_<15>\n        , T0\n        , list14< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >\n        >\n{\n    typedef list15 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list16\n    : l_item<\n          long_<16>\n        , T0\n        , list15< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >\n        >\n{\n    typedef list16 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list17\n    : l_item<\n          long_<17>\n        , T0\n        , list16< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >\n        >\n{\n    typedef list17 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list18\n    : l_item<\n          long_<18>\n        , T0\n        , list17< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >\n        >\n{\n    typedef list18 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list19\n    : l_item<\n          long_<19>\n        , T0\n        , list18< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >\n        >\n{\n    typedef list19 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list20\n    : l_item<\n          long_<20>\n        , T0\n        , list19< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >\n        >\n{\n    typedef list20 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list20_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    >\nstruct list11_c\n    : l_item<\n          long_<11>\n        , integral_c< T,C0 >\n        , list10_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n        >\n{\n    typedef list11_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11\n    >\nstruct list12_c\n    : l_item<\n          long_<12>\n        , integral_c< T,C0 >\n        , list11_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n        >\n{\n    typedef list12_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12\n    >\nstruct list13_c\n    : l_item<\n          long_<13>\n        , integral_c< T,C0 >\n        , list12_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n        >\n{\n    typedef list13_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13\n    >\nstruct list14_c\n    : l_item<\n          long_<14>\n        , integral_c< T,C0 >\n        , list13_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >\n        >\n{\n    typedef list14_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14\n    >\nstruct list15_c\n    : l_item<\n          long_<15>\n        , integral_c< T,C0 >\n        , list14_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >\n        >\n{\n    typedef list15_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15\n    >\nstruct list16_c\n    : l_item<\n          long_<16>\n        , integral_c< T,C0 >\n        , list15_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >\n        >\n{\n    typedef list16_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16\n    >\nstruct list17_c\n    : l_item<\n          long_<17>\n        , integral_c< T,C0 >\n        , list16_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >\n        >\n{\n    typedef list17_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17\n    >\nstruct list18_c\n    : l_item<\n          long_<18>\n        , integral_c< T,C0 >\n        , list17_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >\n        >\n{\n    typedef list18_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18\n    >\nstruct list19_c\n    : l_item<\n          long_<19>\n        , integral_c< T,C0 >\n        , list18_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >\n        >\n{\n    typedef list19_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19\n    >\nstruct list20_c\n    : l_item<\n          long_<20>\n        , integral_c< T,C0 >\n        , list19_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >\n        >\n{\n    typedef list20_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list30.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list30.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20\n    >\nstruct list21\n    : l_item<\n          long_<21>\n        , T0\n        , list20< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20 >\n        >\n{\n    typedef list21 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21\n    >\nstruct list22\n    : l_item<\n          long_<22>\n        , T0\n        , list21< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21 >\n        >\n{\n    typedef list22 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22\n    >\nstruct list23\n    : l_item<\n          long_<23>\n        , T0\n        , list22< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22 >\n        >\n{\n    typedef list23 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23\n    >\nstruct list24\n    : l_item<\n          long_<24>\n        , T0\n        , list23< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23 >\n        >\n{\n    typedef list24 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    >\nstruct list25\n    : l_item<\n          long_<25>\n        , T0\n        , list24< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24 >\n        >\n{\n    typedef list25 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25\n    >\nstruct list26\n    : l_item<\n          long_<26>\n        , T0\n        , list25< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25 >\n        >\n{\n    typedef list26 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26\n    >\nstruct list27\n    : l_item<\n          long_<27>\n        , T0\n        , list26< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26 >\n        >\n{\n    typedef list27 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27\n    >\nstruct list28\n    : l_item<\n          long_<28>\n        , T0\n        , list27< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27 >\n        >\n{\n    typedef list28 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28\n    >\nstruct list29\n    : l_item<\n          long_<29>\n        , T0\n        , list28< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28 >\n        >\n{\n    typedef list29 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    >\nstruct list30\n    : l_item<\n          long_<30>\n        , T0\n        , list29< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29 >\n        >\n{\n    typedef list30 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list30_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    >\nstruct list21_c\n    : l_item<\n          long_<21>\n        , integral_c< T,C0 >\n        , list20_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 >\n        >\n{\n    typedef list21_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21\n    >\nstruct list22_c\n    : l_item<\n          long_<22>\n        , integral_c< T,C0 >\n        , list21_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 >\n        >\n{\n    typedef list22_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22\n    >\nstruct list23_c\n    : l_item<\n          long_<23>\n        , integral_c< T,C0 >\n        , list22_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 >\n        >\n{\n    typedef list23_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23\n    >\nstruct list24_c\n    : l_item<\n          long_<24>\n        , integral_c< T,C0 >\n        , list23_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 >\n        >\n{\n    typedef list24_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24\n    >\nstruct list25_c\n    : l_item<\n          long_<25>\n        , integral_c< T,C0 >\n        , list24_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24 >\n        >\n{\n    typedef list25_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25\n    >\nstruct list26_c\n    : l_item<\n          long_<26>\n        , integral_c< T,C0 >\n        , list25_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25 >\n        >\n{\n    typedef list26_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26\n    >\nstruct list27_c\n    : l_item<\n          long_<27>\n        , integral_c< T,C0 >\n        , list26_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26 >\n        >\n{\n    typedef list27_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27\n    >\nstruct list28_c\n    : l_item<\n          long_<28>\n        , integral_c< T,C0 >\n        , list27_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27 >\n        >\n{\n    typedef list28_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28\n    >\nstruct list29_c\n    : l_item<\n          long_<29>\n        , integral_c< T,C0 >\n        , list28_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28 >\n        >\n{\n    typedef list29_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29\n    >\nstruct list30_c\n    : l_item<\n          long_<30>\n        , integral_c< T,C0 >\n        , list29_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29 >\n        >\n{\n    typedef list30_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list40.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list40.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30\n    >\nstruct list31\n    : l_item<\n          long_<31>\n        , T0\n        , list30< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30 >\n        >\n{\n    typedef list31 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31\n    >\nstruct list32\n    : l_item<\n          long_<32>\n        , T0\n        , list31< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31 >\n        >\n{\n    typedef list32 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32\n    >\nstruct list33\n    : l_item<\n          long_<33>\n        , T0\n        , list32< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32 >\n        >\n{\n    typedef list33 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33\n    >\nstruct list34\n    : l_item<\n          long_<34>\n        , T0\n        , list33< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33 >\n        >\n{\n    typedef list34 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    >\nstruct list35\n    : l_item<\n          long_<35>\n        , T0\n        , list34< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34 >\n        >\n{\n    typedef list35 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35\n    >\nstruct list36\n    : l_item<\n          long_<36>\n        , T0\n        , list35< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35 >\n        >\n{\n    typedef list36 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36\n    >\nstruct list37\n    : l_item<\n          long_<37>\n        , T0\n        , list36< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36 >\n        >\n{\n    typedef list37 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37\n    >\nstruct list38\n    : l_item<\n          long_<38>\n        , T0\n        , list37< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37 >\n        >\n{\n    typedef list38 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38\n    >\nstruct list39\n    : l_item<\n          long_<39>\n        , T0\n        , list38< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38 >\n        >\n{\n    typedef list39 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    >\nstruct list40\n    : l_item<\n          long_<40>\n        , T0\n        , list39< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39 >\n        >\n{\n    typedef list40 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list40_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    >\nstruct list31_c\n    : l_item<\n          long_<31>\n        , integral_c< T,C0 >\n        , list30_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30 >\n        >\n{\n    typedef list31_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31\n    >\nstruct list32_c\n    : l_item<\n          long_<32>\n        , integral_c< T,C0 >\n        , list31_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31 >\n        >\n{\n    typedef list32_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32\n    >\nstruct list33_c\n    : l_item<\n          long_<33>\n        , integral_c< T,C0 >\n        , list32_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32 >\n        >\n{\n    typedef list33_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33\n    >\nstruct list34_c\n    : l_item<\n          long_<34>\n        , integral_c< T,C0 >\n        , list33_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33 >\n        >\n{\n    typedef list34_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34\n    >\nstruct list35_c\n    : l_item<\n          long_<35>\n        , integral_c< T,C0 >\n        , list34_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34 >\n        >\n{\n    typedef list35_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35\n    >\nstruct list36_c\n    : l_item<\n          long_<36>\n        , integral_c< T,C0 >\n        , list35_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35 >\n        >\n{\n    typedef list36_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36\n    >\nstruct list37_c\n    : l_item<\n          long_<37>\n        , integral_c< T,C0 >\n        , list36_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36 >\n        >\n{\n    typedef list37_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37\n    >\nstruct list38_c\n    : l_item<\n          long_<38>\n        , integral_c< T,C0 >\n        , list37_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37 >\n        >\n{\n    typedef list38_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38\n    >\nstruct list39_c\n    : l_item<\n          long_<39>\n        , integral_c< T,C0 >\n        , list38_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38 >\n        >\n{\n    typedef list39_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39\n    >\nstruct list40_c\n    : l_item<\n          long_<40>\n        , integral_c< T,C0 >\n        , list39_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39 >\n        >\n{\n    typedef list40_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list50.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list50.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40\n    >\nstruct list41\n    : l_item<\n          long_<41>\n        , T0\n        , list40< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40 >\n        >\n{\n    typedef list41 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41\n    >\nstruct list42\n    : l_item<\n          long_<42>\n        , T0\n        , list41< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41 >\n        >\n{\n    typedef list42 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42\n    >\nstruct list43\n    : l_item<\n          long_<43>\n        , T0\n        , list42< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42 >\n        >\n{\n    typedef list43 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43\n    >\nstruct list44\n    : l_item<\n          long_<44>\n        , T0\n        , list43< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43 >\n        >\n{\n    typedef list44 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    >\nstruct list45\n    : l_item<\n          long_<45>\n        , T0\n        , list44< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44 >\n        >\n{\n    typedef list45 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45\n    >\nstruct list46\n    : l_item<\n          long_<46>\n        , T0\n        , list45< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45 >\n        >\n{\n    typedef list46 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46\n    >\nstruct list47\n    : l_item<\n          long_<47>\n        , T0\n        , list46< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46 >\n        >\n{\n    typedef list47 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47\n    >\nstruct list48\n    : l_item<\n          long_<48>\n        , T0\n        , list47< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47 >\n        >\n{\n    typedef list48 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48\n    >\nstruct list49\n    : l_item<\n          long_<49>\n        , T0\n        , list48< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48 >\n        >\n{\n    typedef list49 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48, typename T49\n    >\nstruct list50\n    : l_item<\n          long_<50>\n        , T0\n        , list49< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48,T49 >\n        >\n{\n    typedef list50 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list50_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    >\nstruct list41_c\n    : l_item<\n          long_<41>\n        , integral_c< T,C0 >\n        , list40_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40 >\n        >\n{\n    typedef list41_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41\n    >\nstruct list42_c\n    : l_item<\n          long_<42>\n        , integral_c< T,C0 >\n        , list41_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41 >\n        >\n{\n    typedef list42_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42\n    >\nstruct list43_c\n    : l_item<\n          long_<43>\n        , integral_c< T,C0 >\n        , list42_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42 >\n        >\n{\n    typedef list43_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43\n    >\nstruct list44_c\n    : l_item<\n          long_<44>\n        , integral_c< T,C0 >\n        , list43_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43 >\n        >\n{\n    typedef list44_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44\n    >\nstruct list45_c\n    : l_item<\n          long_<45>\n        , integral_c< T,C0 >\n        , list44_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44 >\n        >\n{\n    typedef list45_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45\n    >\nstruct list46_c\n    : l_item<\n          long_<46>\n        , integral_c< T,C0 >\n        , list45_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45 >\n        >\n{\n    typedef list46_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46\n    >\nstruct list47_c\n    : l_item<\n          long_<47>\n        , integral_c< T,C0 >\n        , list46_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46 >\n        >\n{\n    typedef list47_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47\n    >\nstruct list48_c\n    : l_item<\n          long_<48>\n        , integral_c< T,C0 >\n        , list47_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47 >\n        >\n{\n    typedef list48_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48\n    >\nstruct list49_c\n    : l_item<\n          long_<49>\n        , integral_c< T,C0 >\n        , list48_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48 >\n        >\n{\n    typedef list49_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49\n    >\nstruct list50_c\n    : l_item<\n          long_<50>\n        , integral_c< T,C0 >\n        , list49_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48,C49 >\n        >\n{\n    typedef list50_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/push_back.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_back_fwd.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct has_push_back_impl;\n\ntemplate<>\nstruct has_push_back_impl< aux::list_tag >\n{\n    template< typename Seq > struct apply\n        : false_\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/push_front.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_front_fwd.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct push_front_impl< aux::list_tag >\n{\n    template< typename List, typename T > struct apply\n    {\n        typedef l_item<\n              typename next<typename List::size>::type\n            , T\n            , typename List::type\n            > type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/size.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct size_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n        : List::size\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/aux_/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct list_tag;\nstruct l_iter_tag;\n\n}}}\n\n#endif // BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list0.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST0_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/list/aux_/push_front.hpp>\n#include <boost/mpl/list/aux_/pop_front.hpp>\n#include <boost/mpl/list/aux_/push_back.hpp>\n#include <boost/mpl/list/aux_/front.hpp>\n#include <boost/mpl/list/aux_/clear.hpp>\n#include <boost/mpl/list/aux_/O1_size.hpp>\n#include <boost/mpl/list/aux_/size.hpp>\n#include <boost/mpl/list/aux_/empty.hpp>\n#include <boost/mpl/list/aux_/begin_end.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Dummy = na > struct list0;\n\ntemplate<> struct list0<na>\n    : l_end\n{\n    typedef l_end type;\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_LIST0_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list0_c.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/list/list0.hpp>\n#include <boost/mpl/integral_c.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T > struct list0_c\n    : l_end\n{\n    typedef l_end type;\n    typedef T value_type;\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list10.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST10_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST10_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list0.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list10.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, 10, <boost/mpl/list/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST10_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list10_c.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list0_c.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list10_c.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, 10, <boost/mpl/list/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list20.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST20_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST20_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list10.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list20.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(11, 20, <boost/mpl/list/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST20_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list20_c.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list10_c.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list20_c.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(11, 20, <boost/mpl/list/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list30.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST30_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST30_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list20.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list30.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(21, 30, <boost/mpl/list/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST30_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list30_c.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list20_c.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list30_c.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(21, 30, <boost/mpl/list/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list40.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST40_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST40_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list30.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list40.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(31, 40, <boost/mpl/list/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST40_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list40_c.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list30_c.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list40_c.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(31, 40, <boost/mpl/list/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list50.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST50_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST50_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list40.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list50.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(41, 50, <boost/mpl/list/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST50_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list/list50_c.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list40_c.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list50_c.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(41, 50, <boost/mpl/list/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_HPP_INCLUDED\n#define BOOST_MPL_LIST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/list.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_LIST_HEADER \\\n    BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE).hpp \\\n    /**/\n#else\n#   define AUX778076_LIST_HEADER \\\n    BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_HEADER)\n#   undef AUX778076_LIST_HEADER\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/list.hpp>\n\n#   define AUX778076_SEQUENCE_NAME list\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_LIST_SIZE\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_LIST_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/list_c.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_C_HPP_INCLUDED\n#define BOOST_MPL_LIST_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/list.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_LIST_C_HEADER \\\n    BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE),_c).hpp \\\n    /**/\n#else\n#   define AUX778076_LIST_C_HEADER \\\n    BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE),_c)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_C_HEADER)\n#   undef AUX778076_LIST_C_HEADER\n#   include <climits>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list_c.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/list.hpp>\n\n#   define AUX778076_SEQUENCE_NAME list_c\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_LIST_SIZE\n#   define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(list,n),_c)\n#   define AUX778076_SEQUENCE_INTEGRAL_WRAPPER\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_LIST_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/logical.hpp",
    "content": "\n#ifndef BOOST_MPL_LOGICAL_HPP_INCLUDED\n#define BOOST_MPL_LOGICAL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/or.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/not.hpp>\n\n#endif // BOOST_MPL_LOGICAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/long.hpp",
    "content": "\n#ifndef BOOST_MPL_LONG_HPP_INCLUDED\n#define BOOST_MPL_LONG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/long_fwd.hpp>\n\n#define AUX_WRAPPER_VALUE_TYPE long\n#include <boost/mpl/aux_/integral_wrapper.hpp>\n\n#endif // BOOST_MPL_LONG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/long_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_LONG_FWD_HPP_INCLUDED\n#define BOOST_MPL_LONG_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct long_;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(long_)\n\n#endif // BOOST_MPL_LONG_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/lower_bound.hpp",
    "content": "\n#ifndef BOOST_MPL_LOWER_BOUND_HPP_INCLUDED\n#define BOOST_MPL_LOWER_BOUND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/less.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n#   define BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL\n#endif\n\n#if !defined(BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL)\n#   include <boost/mpl/minus.hpp>\n#   include <boost/mpl/divides.hpp>\n#   include <boost/mpl/size.hpp>\n#   include <boost/mpl/advance.hpp>\n#   include <boost/mpl/begin_end.hpp>\n#   include <boost/mpl/long.hpp>\n#   include <boost/mpl/eval_if.hpp>\n#   include <boost/mpl/prior.hpp>\n#   include <boost/mpl/deref.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#else\n#   include <boost/mpl/not.hpp>\n#   include <boost/mpl/find.hpp>\n#   include <boost/mpl/bind.hpp>\n#endif\n\n#include <boost/config.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL)\n\n// agurt 23/oct/02: has a wrong complexity etc., but at least it works\n// feel free to contribute a better implementation!\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    , typename Predicate = less<>\n    , typename pred_ = typename lambda<Predicate>::type\n    >\nstruct lower_bound\n    : find_if< Sequence, bind1< not_<>, bind2<pred_,_,T> > >\n{\n};\n\n#else\n\nnamespace aux {\n\ntemplate<\n      typename Distance\n    , typename Predicate\n    , typename T\n    , typename DeferredIterator\n    >\nstruct lower_bound_step_impl;\n\ntemplate< \n      typename Distance\n    , typename Predicate\n    , typename T\n    , typename DeferredIterator\n    >\nstruct lower_bound_step\n{\n    typedef typename eval_if<\n          Distance\n        , lower_bound_step_impl<Distance,Predicate,T,DeferredIterator>\n        , DeferredIterator\n        >::type type;\n};\n    \ntemplate<\n      typename Distance\n    , typename Predicate\n    , typename T\n    , typename DeferredIterator\n    >\nstruct lower_bound_step_impl\n{\n    typedef typename divides< Distance, long_<2> >::type offset_;\n    typedef typename DeferredIterator::type iter_;\n    typedef typename advance< iter_,offset_ >::type middle_;\n    typedef typename apply2<\n              Predicate\n            , typename deref<middle_>::type\n            , T\n            >::type cond_;\n\n    typedef typename prior< minus< Distance, offset_> >::type step_;\n    typedef lower_bound_step< offset_,Predicate,T,DeferredIterator > step_forward_;\n    typedef lower_bound_step< step_,Predicate,T,next<middle_> > step_backward_;\n    typedef typename eval_if<\n          cond_\n        , step_backward_\n        , step_forward_\n        >::type type;\n};\n\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    , typename Predicate = less<>\n    >\nstruct lower_bound\n{\n private:\n    typedef typename lambda<Predicate>::type pred_;\n    typedef typename size<Sequence>::type size_;\n\n public:\n    typedef typename aux::lower_bound_step<\n        size_,pred_,T,begin<Sequence>\n        >::type type;\n};\n\n#endif // BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL\n\nBOOST_MPL_AUX_NA_SPEC(2, lower_bound)\n\n}}\n\n#endif // BOOST_MPL_LOWER_BOUND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/at_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_AT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_AT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/at_fwd.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n#include <boost/mpl/aux_/order_impl.hpp>\n#include <boost/mpl/aux_/overload_names.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/ptr_to_ref.hpp>\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\n#if !defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n#   include <boost/mpl/eval_if.hpp>\n#   include <boost/mpl/pair.hpp>\n#   include <boost/mpl/void.hpp>\n#   include <boost/mpl/aux_/config/static_constant.hpp>\n#endif\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate< typename Map, typename Key >\nstruct m_at\n{\n    typedef aux::type_wrapper<Key> key_;\n    typedef __typeof__( BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(\n          Map\n        , BOOST_MPL_AUX_STATIC_CAST(key_*, 0)\n        ) ) type;\n};\n\ntemplate<>\nstruct at_impl< aux::map_tag >\n{\n    template< typename Map, typename Key > struct apply\n        : aux::wrapped_type< typename m_at<\n              Map\n            , Key\n            >::type >\n    {\n    };\n};\n\n// agurt 31/jan/04: two-step implementation for the sake of GCC 3.x\ntemplate< typename Map, long order > \nstruct item_by_order_impl\n{\n    typedef __typeof__( BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(\n          Map \n        , BOOST_MPL_AUX_STATIC_CAST(long_<order>*, 0)\n        ) ) type;\n};\n\ntemplate< typename Map, long order >\nstruct item_by_order\n    : aux::wrapped_type<\n          typename item_by_order_impl<Map,order>::type\n        >\n{\n};\n\n#else // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename Map, long n > struct m_at\n{\n    typedef void_ type;\n};\n\n#   else\n\ntemplate< long n > struct m_at_impl\n{\n    template< typename Map > struct result_\n    {\n        typedef void_ type;\n    };\n};\n\ntemplate< typename Map, long n > struct m_at\n{\n    typedef typename m_at_impl<n>::result_<Map>::type type;\n};\n\n#   endif\n\n\ntemplate<>\nstruct at_impl< aux::map_tag >\n{\n    template< typename Map, typename Key > struct apply\n    {\n        typedef typename m_at< Map, (x_order_impl<Map,Key>::value - 2) >::type item_;       \n        typedef typename eval_if<\n              is_void_<item_>\n            , void_\n            , second<item_>\n            >::type type;\n    };\n};\n\ntemplate< typename Map, long order > struct is_item_masked\n{\n    BOOST_STATIC_CONSTANT(bool, value = \n          sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(\n              Map\n            , BOOST_MPL_AUX_STATIC_CAST(long_<order>*, 0)\n            ) ) == sizeof(aux::yes_tag)\n        );\n};\n\ntemplate< typename Map, long order > struct item_by_order\n{    \n    typedef typename eval_if_c< \n          is_item_masked<Map,order>::value\n        , void_\n        , m_at<Map,(order - 2)>\n        >::type type;\n};\n\n#endif\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/begin_end_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end_fwd.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/map/aux_/iterator.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct begin_impl< aux::map_tag >\n{\n    template< typename Map > struct apply\n    {\n        typedef typename next< typename Map::order >::type max_order_;\n        typedef m_iter<\n              Map\n            , next_order<Map,1,max_order_::value>::value\n            , max_order_::value\n            > type;\n    };\n};\n\ntemplate<>\nstruct end_impl< aux::map_tag >\n{\n    template< typename Map > struct apply\n    {\n        typedef typename next< typename Map::order >::type max_order_;\n        typedef m_iter< Map,max_order_::value,max_order_::value > type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/clear_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_CLEAR_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_CLEAR_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/map/aux_/map0.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct clear_impl< aux::map_tag >\n{\n    template< typename Map > struct apply\n    {\n        typedef map0<> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_CLEAR_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/contains_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_CONTAINS_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_CONTAINS_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/contains_fwd.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/map/aux_/at_impl.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct contains_impl< aux::map_tag >\n{\n    template< typename Map, typename Pair > struct apply\n        : is_same< \n              typename at_impl<aux::map_tag>::apply<\n                  Map\n                , typename Pair::first\n                >::type\n            , typename Pair::second\n            >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_CONTAINS_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/empty_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_EMPTY_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_EMPTY_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/empty_fwd.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct empty_impl< aux::map_tag >\n{\n    template< typename Map > struct apply\n        : not_< typename Map::size >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_EMPTY_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/erase_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_ERASE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_ERASE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/erase_fwd.hpp>\n#include <boost/mpl/map/aux_/erase_key_impl.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct erase_impl< aux::map_tag >\n{\n    template< \n          typename Map\n        , typename Pos\n        , typename unused_\n        > \n    struct apply\n        : erase_key_impl<aux::map_tag>\n            ::apply<Map,typename Pos::type::first>\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_ERASE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/erase_key_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_ERASE_KEY_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_ERASE_KEY_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/erase_key_fwd.hpp>\n#include <boost/mpl/map/aux_/has_key_impl.hpp>\n#include <boost/mpl/map/aux_/item.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/base.hpp>\n#include <boost/mpl/eval_if.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct erase_key_impl< aux::map_tag >\n{\n    template< \n          typename Map\n        , typename Key\n        > \n    struct apply\n        : eval_if< \n              has_key_impl<aux::map_tag>::apply<Map,Key>\n            , eval_if< \n                  is_same< Key,typename Map::key_ > \n                , base<Map>\n                , identity< m_mask<Key,Map> >\n                >\n            , identity<Map>\n            >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_ERASE_KEY_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/has_key_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_HAS_KEY_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_HAS_KEY_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/has_key_fwd.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n#include <boost/mpl/map/aux_/at_impl.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct has_key_impl< aux::map_tag >\n{\n    template< typename Map, typename Key > struct apply\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n        : is_not_void_< \n              typename at_impl<aux::map_tag>\n                ::apply<Map,Key>::type\n            >\n#else\n        : bool_< ( x_order_impl<Map,Key>::value > 1 ) >\n#endif\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_HAS_KEY_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/include_preprocessed.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/stringize.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n#   define AUX778076_INCLUDE_DIR typeof_based\n#elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#   define AUX778076_INCLUDE_DIR no_ctps\n#else\n#   define AUX778076_INCLUDE_DIR plain\n#endif\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_HEADER \\\n    AUX778076_INCLUDE_DIR/BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#else\n#   define AUX778076_HEADER \\\n    BOOST_PP_CAT(AUX778076_INCLUDE_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#endif\n\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))\n#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/map/aux_/preprocessed/AUX778076_HEADER)\n#   include AUX778076_INCLUDE_STRING\n#   undef AUX778076_INCLUDE_STRING\n#else\n#   include BOOST_PP_STRINGIZE(boost/mpl/map/aux_/preprocessed/AUX778076_HEADER)\n#endif\n\n#   undef AUX778076_HEADER\n#   undef AUX778076_INCLUDE_DIR\n\n#undef BOOST_MPL_PREPROCESSED_HEADER\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/insert_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/insert_fwd.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/map/aux_/contains_impl.hpp>\n#include <boost/mpl/map/aux_/item.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename Map, typename Pair > \nstruct map_insert_impl\n    : if_< \n          contains_impl<aux::map_tag>::apply<Map,Pair>\n        , Map\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n        , m_item<\n              typename Pair::first\n            , typename Pair::second\n            , Map\n            >\n#else\n        , m_item<\n              Map::order::value\n            , typename Pair::first\n            , typename Pair::second\n            , Map\n            >\n#endif\n        >\n{\n};\n}\n\ntemplate<>\nstruct insert_impl< aux::map_tag >\n{\n    template< \n          typename Map\n        , typename PosOrKey\n        , typename KeyOrNA\n        > \n    struct apply\n        : aux::map_insert_impl<\n              Map\n            , typename if_na<KeyOrNA,PosOrKey>::type\n            >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/insert_range_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED\n\n// Copyright Bruno Dutra 2015\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/insert_range_fwd.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n#include <boost/mpl/placeholders.hpp>\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/insert.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct insert_range_impl< aux::map_tag >\n{\n    template<\n          typename Sequence\n        , typename /*Pos*/\n        , typename Range\n        >\n    struct apply\n        : fold<Range, Sequence, insert<_1, _2> >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/item.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_ITEM_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_ITEM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/pair.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/prior.hpp>\n#include <boost/mpl/map/aux_/map0.hpp>\n#include <boost/mpl/aux_/order_impl.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/config/arrays.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item\n    : Base\n{\n    typedef Key         key_;\n    typedef pair<Key,T> item;\n    typedef Base        base;\n    typedef m_item      type;\n    \n    typedef typename next< typename Base::size >::type  size;\n    typedef typename next< typename Base::order >::type order;\n\n#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)\n    typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;\n#else\n    typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];\n#endif\n\n    BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<T>, VALUE_BY_KEY, m_item, aux::type_wrapper<Key>* );\n    BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<item>, ITEM_BY_ORDER, m_item, order* );\n    BOOST_MPL_AUX_MAP_OVERLOAD( order_tag_, ORDER_BY_KEY, m_item, aux::type_wrapper<Key>* );\n};\n\n\ntemplate< typename Key, typename Base >\nstruct m_mask\n    : Base\n{\n    typedef void_   key_;\n    typedef Base    base;\n    typedef m_mask  type;\n\n    typedef typename prior< typename Base::size >::type  size;\n    typedef typename x_order_impl<Base,Key>::type key_order_;\n    \n    BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<void_>, VALUE_BY_KEY, m_mask, aux::type_wrapper<Key>* );\n    BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<void_>, ITEM_BY_ORDER, m_mask, key_order_* );\n};\n\n#else // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long n, typename Key, typename T, typename Base >\nstruct m_item;\n\n#   else\n\ntemplate< long n >\nstruct m_item_impl\n{\n    template< typename Key, typename T, typename Base >\n    struct result_;\n};\n\ntemplate< long n, typename Key, typename T, typename Base >\nstruct m_item\n    : m_item_impl<n>::result_<Key,T,Base>\n{\n};\n\n\n#   endif\n\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item_\n    : Base\n{\n    typedef Key     key_;\n    typedef Base    base;\n    typedef m_item_ type;\n    \n    typedef typename next< typename Base::size >::type  size;\n    typedef typename next< typename Base::order >::type order;\n\n#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)\n    typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;\n#else\n    typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];\n#endif\n\n    BOOST_MPL_AUX_MAP_OVERLOAD( order_tag_, ORDER_BY_KEY, m_item_, aux::type_wrapper<Key>* );\n};\n\ntemplate< typename Key, typename Base >\nstruct m_mask\n    : Base\n{\n    typedef void_   key_;\n    typedef Base    base;\n    typedef m_mask  type;\n\n    typedef typename prior< typename Base::size >::type  size;\n    typedef typename x_order_impl<Base,Key>::type key_order_;\n    \n    BOOST_MPL_AUX_MAP_OVERLOAD( aux::no_tag, ORDER_BY_KEY, m_mask, aux::type_wrapper<Key>* );\n    BOOST_MPL_AUX_MAP_OVERLOAD( aux::yes_tag, IS_MASKED, m_mask, key_order_* );\n};\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_ITEM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/iterator.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/map/aux_/map0.hpp>\n#include <boost/mpl/map/aux_/at_impl.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< \n      typename Map\n    , long order\n    , long max_order\n    >\nstruct next_order\n    : if_< \n          is_void_< typename item_by_order<Map,order>::type >\n        , next_order<Map,(order+1),max_order>\n        , long_<order>\n        >::type\n{\n};\n\ntemplate< \n      typename Map\n    , long max_order\n    >\nstruct next_order<Map,max_order,max_order>\n    : long_<max_order>\n{\n};\n\n\ntemplate< typename Map, long order, long max_order >\nstruct m_iter\n{\n    typedef forward_iterator_tag category;\n    typedef typename item_by_order<Map,order>::type type;\n};\n\ntemplate< typename Map, long max_order >\nstruct m_iter<Map,max_order,max_order>\n{\n    typedef forward_iterator_tag category;\n};\n\n\ntemplate< typename Map, long order, long max_order > \nstruct next< m_iter<Map,order,max_order> >\n{\n    typedef m_iter<\n          Map\n        , next_order<Map,order+1,max_order>::value\n        , max_order\n        > type;\n};\n\ntemplate< typename Map, long max_order > \nstruct next< m_iter<Map,max_order,max_order> >\n{\n};\n\n#else\n\ntemplate< \n      typename Map\n    , BOOST_MPL_AUX_NTTP_DECL(long, order)\n    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\n    >\nstruct next_order;\n\ntemplate< \n      typename Map\n    , BOOST_MPL_AUX_NTTP_DECL(long, order)\n    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\n    >\nstruct next_order_impl\n    : if_< \n          is_void_< typename item_by_order<Map,order>::type >\n        , next_order<Map,(order+1),max_order>\n        , long_<order>\n        >::type\n    {\n    };\n\ntemplate< \n      typename Map\n    , BOOST_MPL_AUX_NTTP_DECL(long, order)\n    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\n    >\nstruct next_order\n    : if_c<\n          (order != max_order)\n        , next_order_impl<Map,order,max_order>\n        , long_<order>\n        >::type\n{\n};\n\n\ntemplate<\n      typename Map\n    , BOOST_MPL_AUX_NTTP_DECL(long, order)\n    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\n    >\nstruct m_iter;\n\nstruct m_iter_empty_base {};\n\ntemplate< \n      typename Map\n    , BOOST_MPL_AUX_NTTP_DECL(long, order)\n    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\n    >\nstruct m_iter_base\n{\n    typedef typename item_by_order<Map,order>::type type;\n    \n    typedef m_iter<\n          Map\n        , next_order<Map,order+1,max_order>::value\n        , max_order\n        > next;\n};\n\ntemplate<\n      typename Map\n    , BOOST_MPL_AUX_NTTP_DECL(long, order)\n    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\n    >\nstruct m_iter\n  : if_c<\n          (order == max_order)\n        , m_iter_empty_base\n        , m_iter_base<Map,order,max_order>\n        >::type\n{\n    typedef forward_iterator_tag category;\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/key_type_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_KEY_TYPE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_KEY_TYPE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/key_type_fwd.hpp>\n#include <boost/mpl/pair.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n\nnamespace boost {\nnamespace mpl {\n\ntemplate<>\nstruct key_type_impl< aux::map_tag >\n{\n    template< typename Map, typename T > struct apply\n        : first<T>\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_KEY_TYPE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/map0.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_MAP0_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_MAP0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/overload_names.hpp>\n#include <boost/mpl/aux_/config/operators.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)\n\n#   define BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T) \\\n    friend R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \\\n/**/\n\n#   define BOOST_MPL_AUX_MAP_OVERLOAD(R, f, X, T) \\\n    BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T) \\\n/**/\n\n#else\n\n#   define BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T) \\\n    static R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \\\n/**/\n\n#   define BOOST_MPL_AUX_MAP_OVERLOAD(R, f, X, T) \\\n    BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T); \\\n    using Base::BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f) \\\n/**/\n\n#endif\n\n\ntemplate< typename Dummy = na > struct map0\n{\n    typedef map0            type;\n    typedef aux::map_tag    tag;\n    typedef void_           key_;\n    typedef long_<1>        order;\n    typedef long_<0>        size;\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::type_wrapper<void_>, VALUE_BY_KEY, map0<>, void const volatile* );\n    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::type_wrapper<void_>, ITEM_BY_ORDER, map0<>, long_<1>* );\n    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::no_tag, ORDER_BY_KEY, map0<>, void const volatile* );\n#else\n    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::no_tag, ORDER_BY_KEY, map0<>, void const volatile* );\n    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::no_tag, IS_MASKED, map0<>, void const volatile* );\n#endif\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_MAP0_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/numbered.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#else\n\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/preprocessor/enum_params.hpp>\n#include <boost/preprocessor/dec.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#   define AUX778076_MAP_TAIL(map, i_, P) \\\n    BOOST_PP_CAT(map,i_)< \\\n          BOOST_PP_ENUM_PARAMS(i_, P) \\\n        > \\\n    /**/\n\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<\n      BOOST_PP_ENUM_PARAMS(i_, typename P)\n    >\nstruct BOOST_PP_CAT(map,i_)\n    : m_item<\n          typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::first\n        , typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::second\n        , AUX778076_MAP_TAIL(map,BOOST_PP_DEC(i_),P)\n        >\n{\n    typedef BOOST_PP_CAT(map,i_) type;\n};\n\n#else // \"brute force\" implementation\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename Map>\nstruct m_at<Map,BOOST_PP_DEC(i_)>\n{\n    typedef typename Map::BOOST_PP_CAT(item,BOOST_PP_DEC(i_)) type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item<i_,Key,T,Base>\n    : m_item_<Key,T,Base>\n{\n    typedef pair<Key,T> BOOST_PP_CAT(item,BOOST_PP_DEC(i_));\n};\n\n#   else\n\ntemplate<>\nstruct m_at_impl<BOOST_PP_DEC(i_)>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::BOOST_PP_CAT(item,BOOST_PP_DEC(i_)) type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<i_>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_<Key,T,Base>\n    {\n        typedef pair<Key,T> BOOST_PP_CAT(item,BOOST_PP_DEC(i_));\n    };\n};\n\n#   endif\n\ntemplate<\n      BOOST_PP_ENUM_PARAMS(i_, typename P)\n    >\nstruct BOOST_PP_CAT(map,i_)\n    : m_item<\n          i_\n        , typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::first\n        , typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::second\n        , AUX778076_MAP_TAIL(map,BOOST_PP_DEC(i_),P)\n        >\n{\n    typedef BOOST_PP_CAT(map,i_) type;\n};\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#   undef AUX778076_MAP_TAIL\n\n#undef i_\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct m_at_impl<0>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item0 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<1>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item0;\n    };\n};\n\ntemplate<\n      typename P0\n    >\nstruct map1\n    : m_item<\n          1\n        , typename P0::first\n        , typename P0::second\n        , map0<  >\n        >\n{\n    typedef map1 type;\n};\n\ntemplate<>\nstruct m_at_impl<1>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item1 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<2>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item1;\n    };\n};\n\ntemplate<\n      typename P0, typename P1\n    >\nstruct map2\n    : m_item<\n          2\n        , typename P1::first\n        , typename P1::second\n        , map1<P0>\n        >\n{\n    typedef map2 type;\n};\n\ntemplate<>\nstruct m_at_impl<2>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item2 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<3>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item2;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2\n    >\nstruct map3\n    : m_item<\n          3\n        , typename P2::first\n        , typename P2::second\n        , map2< P0,P1 >\n        >\n{\n    typedef map3 type;\n};\n\ntemplate<>\nstruct m_at_impl<3>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item3 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<4>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item3;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3\n    >\nstruct map4\n    : m_item<\n          4\n        , typename P3::first\n        , typename P3::second\n        , map3< P0,P1,P2 >\n        >\n{\n    typedef map4 type;\n};\n\ntemplate<>\nstruct m_at_impl<4>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item4 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<5>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item4;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    >\nstruct map5\n    : m_item<\n          5\n        , typename P4::first\n        , typename P4::second\n        , map4< P0,P1,P2,P3 >\n        >\n{\n    typedef map5 type;\n};\n\ntemplate<>\nstruct m_at_impl<5>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item5 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<6>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item5;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5\n    >\nstruct map6\n    : m_item<\n          6\n        , typename P5::first\n        , typename P5::second\n        , map5< P0,P1,P2,P3,P4 >\n        >\n{\n    typedef map6 type;\n};\n\ntemplate<>\nstruct m_at_impl<6>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item6 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<7>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item6;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6\n    >\nstruct map7\n    : m_item<\n          7\n        , typename P6::first\n        , typename P6::second\n        , map6< P0,P1,P2,P3,P4,P5 >\n        >\n{\n    typedef map7 type;\n};\n\ntemplate<>\nstruct m_at_impl<7>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item7 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<8>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item7;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7\n    >\nstruct map8\n    : m_item<\n          8\n        , typename P7::first\n        , typename P7::second\n        , map7< P0,P1,P2,P3,P4,P5,P6 >\n        >\n{\n    typedef map8 type;\n};\n\ntemplate<>\nstruct m_at_impl<8>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item8 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<9>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item8;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8\n    >\nstruct map9\n    : m_item<\n          9\n        , typename P8::first\n        , typename P8::second\n        , map8< P0,P1,P2,P3,P4,P5,P6,P7 >\n        >\n{\n    typedef map9 type;\n};\n\ntemplate<>\nstruct m_at_impl<9>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item9 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<10>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item9;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    >\nstruct map10\n    : m_item<\n          10\n        , typename P9::first\n        , typename P9::second\n        , map9< P0,P1,P2,P3,P4,P5,P6,P7,P8 >\n        >\n{\n    typedef map10 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct m_at_impl<10>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item10 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<11>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item10;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10\n    >\nstruct map11\n    : m_item<\n          11\n        , typename P10::first\n        , typename P10::second\n        , map10< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 >\n        >\n{\n    typedef map11 type;\n};\n\ntemplate<>\nstruct m_at_impl<11>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item11 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<12>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item11;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11\n    >\nstruct map12\n    : m_item<\n          12\n        , typename P11::first\n        , typename P11::second\n        , map11< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 >\n        >\n{\n    typedef map12 type;\n};\n\ntemplate<>\nstruct m_at_impl<12>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item12 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<13>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item12;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12\n    >\nstruct map13\n    : m_item<\n          13\n        , typename P12::first\n        , typename P12::second\n        , map12< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11 >\n        >\n{\n    typedef map13 type;\n};\n\ntemplate<>\nstruct m_at_impl<13>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item13 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<14>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item13;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13\n    >\nstruct map14\n    : m_item<\n          14\n        , typename P13::first\n        , typename P13::second\n        , map13< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 >\n        >\n{\n    typedef map14 type;\n};\n\ntemplate<>\nstruct m_at_impl<14>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item14 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<15>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item14;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    >\nstruct map15\n    : m_item<\n          15\n        , typename P14::first\n        , typename P14::second\n        , map14< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13 >\n        >\n{\n    typedef map15 type;\n};\n\ntemplate<>\nstruct m_at_impl<15>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item15 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<16>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item15;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15\n    >\nstruct map16\n    : m_item<\n          16\n        , typename P15::first\n        , typename P15::second\n        , map15< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14 >\n        >\n{\n    typedef map16 type;\n};\n\ntemplate<>\nstruct m_at_impl<16>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item16 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<17>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item16;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16\n    >\nstruct map17\n    : m_item<\n          17\n        , typename P16::first\n        , typename P16::second\n        , map16< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15 >\n        >\n{\n    typedef map17 type;\n};\n\ntemplate<>\nstruct m_at_impl<17>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item17 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<18>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item17;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17\n    >\nstruct map18\n    : m_item<\n          18\n        , typename P17::first\n        , typename P17::second\n        , map17< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16 >\n        >\n{\n    typedef map18 type;\n};\n\ntemplate<>\nstruct m_at_impl<18>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item18 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<19>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item18;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18\n    >\nstruct map19\n    : m_item<\n          19\n        , typename P18::first\n        , typename P18::second\n        , map18< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17 >\n        >\n{\n    typedef map19 type;\n};\n\ntemplate<>\nstruct m_at_impl<19>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item19 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<20>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item19;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    >\nstruct map20\n    : m_item<\n          20\n        , typename P19::first\n        , typename P19::second\n        , map19< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18 >\n        >\n{\n    typedef map20 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map30.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct m_at_impl<20>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item20 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<21>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item20;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20\n    >\nstruct map21\n    : m_item<\n          21\n        , typename P20::first\n        , typename P20::second\n        , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >\n        >\n{\n    typedef map21 type;\n};\n\ntemplate<>\nstruct m_at_impl<21>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item21 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<22>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item21;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21\n    >\nstruct map22\n    : m_item<\n          22\n        , typename P21::first\n        , typename P21::second\n        , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >\n        >\n{\n    typedef map22 type;\n};\n\ntemplate<>\nstruct m_at_impl<22>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item22 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<23>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item22;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22\n    >\nstruct map23\n    : m_item<\n          23\n        , typename P22::first\n        , typename P22::second\n        , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >\n        >\n{\n    typedef map23 type;\n};\n\ntemplate<>\nstruct m_at_impl<23>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item23 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<24>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item23;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23\n    >\nstruct map24\n    : m_item<\n          24\n        , typename P23::first\n        , typename P23::second\n        , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >\n        >\n{\n    typedef map24 type;\n};\n\ntemplate<>\nstruct m_at_impl<24>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item24 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<25>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item24;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    >\nstruct map25\n    : m_item<\n          25\n        , typename P24::first\n        , typename P24::second\n        , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >\n        >\n{\n    typedef map25 type;\n};\n\ntemplate<>\nstruct m_at_impl<25>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item25 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<26>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item25;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25\n    >\nstruct map26\n    : m_item<\n          26\n        , typename P25::first\n        , typename P25::second\n        , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >\n        >\n{\n    typedef map26 type;\n};\n\ntemplate<>\nstruct m_at_impl<26>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item26 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<27>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item26;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26\n    >\nstruct map27\n    : m_item<\n          27\n        , typename P26::first\n        , typename P26::second\n        , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >\n        >\n{\n    typedef map27 type;\n};\n\ntemplate<>\nstruct m_at_impl<27>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item27 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<28>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item27;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27\n    >\nstruct map28\n    : m_item<\n          28\n        , typename P27::first\n        , typename P27::second\n        , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >\n        >\n{\n    typedef map28 type;\n};\n\ntemplate<>\nstruct m_at_impl<28>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item28 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<29>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item28;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28\n    >\nstruct map29\n    : m_item<\n          29\n        , typename P28::first\n        , typename P28::second\n        , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >\n        >\n{\n    typedef map29 type;\n};\n\ntemplate<>\nstruct m_at_impl<29>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item29 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<30>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item29;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    >\nstruct map30\n    : m_item<\n          30\n        , typename P29::first\n        , typename P29::second\n        , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >\n        >\n{\n    typedef map30 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map40.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct m_at_impl<30>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item30 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<31>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item30;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30\n    >\nstruct map31\n    : m_item<\n          31\n        , typename P30::first\n        , typename P30::second\n        , map30< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29 >\n        >\n{\n    typedef map31 type;\n};\n\ntemplate<>\nstruct m_at_impl<31>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item31 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<32>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item31;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31\n    >\nstruct map32\n    : m_item<\n          32\n        , typename P31::first\n        , typename P31::second\n        , map31< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30 >\n        >\n{\n    typedef map32 type;\n};\n\ntemplate<>\nstruct m_at_impl<32>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item32 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<33>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item32;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32\n    >\nstruct map33\n    : m_item<\n          33\n        , typename P32::first\n        , typename P32::second\n        , map32< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31 >\n        >\n{\n    typedef map33 type;\n};\n\ntemplate<>\nstruct m_at_impl<33>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item33 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<34>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item33;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33\n    >\nstruct map34\n    : m_item<\n          34\n        , typename P33::first\n        , typename P33::second\n        , map33< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32 >\n        >\n{\n    typedef map34 type;\n};\n\ntemplate<>\nstruct m_at_impl<34>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item34 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<35>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item34;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    >\nstruct map35\n    : m_item<\n          35\n        , typename P34::first\n        , typename P34::second\n        , map34< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33 >\n        >\n{\n    typedef map35 type;\n};\n\ntemplate<>\nstruct m_at_impl<35>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item35 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<36>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item35;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35\n    >\nstruct map36\n    : m_item<\n          36\n        , typename P35::first\n        , typename P35::second\n        , map35< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34 >\n        >\n{\n    typedef map36 type;\n};\n\ntemplate<>\nstruct m_at_impl<36>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item36 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<37>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item36;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36\n    >\nstruct map37\n    : m_item<\n          37\n        , typename P36::first\n        , typename P36::second\n        , map36< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35 >\n        >\n{\n    typedef map37 type;\n};\n\ntemplate<>\nstruct m_at_impl<37>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item37 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<38>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item37;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37\n    >\nstruct map38\n    : m_item<\n          38\n        , typename P37::first\n        , typename P37::second\n        , map37< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36 >\n        >\n{\n    typedef map38 type;\n};\n\ntemplate<>\nstruct m_at_impl<38>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item38 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<39>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item38;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38\n    >\nstruct map39\n    : m_item<\n          39\n        , typename P38::first\n        , typename P38::second\n        , map38< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37 >\n        >\n{\n    typedef map39 type;\n};\n\ntemplate<>\nstruct m_at_impl<39>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item39 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<40>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item39;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    >\nstruct map40\n    : m_item<\n          40\n        , typename P39::first\n        , typename P39::second\n        , map39< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38 >\n        >\n{\n    typedef map40 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map50.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct m_at_impl<40>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item40 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<41>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item40;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40\n    >\nstruct map41\n    : m_item<\n          41\n        , typename P40::first\n        , typename P40::second\n        , map40< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39 >\n        >\n{\n    typedef map41 type;\n};\n\ntemplate<>\nstruct m_at_impl<41>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item41 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<42>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item41;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41\n    >\nstruct map42\n    : m_item<\n          42\n        , typename P41::first\n        , typename P41::second\n        , map41< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40 >\n        >\n{\n    typedef map42 type;\n};\n\ntemplate<>\nstruct m_at_impl<42>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item42 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<43>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item42;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42\n    >\nstruct map43\n    : m_item<\n          43\n        , typename P42::first\n        , typename P42::second\n        , map42< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41 >\n        >\n{\n    typedef map43 type;\n};\n\ntemplate<>\nstruct m_at_impl<43>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item43 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<44>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item43;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43\n    >\nstruct map44\n    : m_item<\n          44\n        , typename P43::first\n        , typename P43::second\n        , map43< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42 >\n        >\n{\n    typedef map44 type;\n};\n\ntemplate<>\nstruct m_at_impl<44>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item44 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<45>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item44;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    >\nstruct map45\n    : m_item<\n          45\n        , typename P44::first\n        , typename P44::second\n        , map44< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43 >\n        >\n{\n    typedef map45 type;\n};\n\ntemplate<>\nstruct m_at_impl<45>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item45 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<46>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item45;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45\n    >\nstruct map46\n    : m_item<\n          46\n        , typename P45::first\n        , typename P45::second\n        , map45< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44 >\n        >\n{\n    typedef map46 type;\n};\n\ntemplate<>\nstruct m_at_impl<46>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item46 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<47>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item46;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46\n    >\nstruct map47\n    : m_item<\n          47\n        , typename P46::first\n        , typename P46::second\n        , map46< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45 >\n        >\n{\n    typedef map47 type;\n};\n\ntemplate<>\nstruct m_at_impl<47>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item47 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<48>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item47;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46, typename P47\n    >\nstruct map48\n    : m_item<\n          48\n        , typename P47::first\n        , typename P47::second\n        , map47< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46 >\n        >\n{\n    typedef map48 type;\n};\n\ntemplate<>\nstruct m_at_impl<48>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item48 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<49>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item48;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46, typename P47, typename P48\n    >\nstruct map49\n    : m_item<\n          49\n        , typename P48::first\n        , typename P48::second\n        , map48< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47 >\n        >\n{\n    typedef map49 type;\n};\n\ntemplate<>\nstruct m_at_impl<49>\n{\n    template< typename Map > struct result_\n    {\n        typedef typename Map::item49 type;\n    };\n};\n\ntemplate<>\nstruct m_item_impl<50>\n{\n    template< typename Key, typename T, typename Base > struct result_\n        : m_item_< Key,T,Base >\n    {\n        typedef pair< Key,T > item49;\n    };\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46, typename P47, typename P48, typename P49\n    >\nstruct map50\n    : m_item<\n          50\n        , typename P49::first\n        , typename P49::second\n        , map49< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47,P48 >\n        >\n{\n    typedef map50 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/plain/map10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Map>\nstruct m_at< Map,0 >\n{\n    typedef typename Map::item0 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 1,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item0;\n};\n\ntemplate<\n      typename P0\n    >\nstruct map1\n    : m_item<\n          1\n        , typename P0::first\n        , typename P0::second\n        , map0<  >\n        >\n{\n    typedef map1 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,1 >\n{\n    typedef typename Map::item1 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 2,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item1;\n};\n\ntemplate<\n      typename P0, typename P1\n    >\nstruct map2\n    : m_item<\n          2\n        , typename P1::first\n        , typename P1::second\n        , map1<P0>\n        >\n{\n    typedef map2 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,2 >\n{\n    typedef typename Map::item2 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 3,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item2;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2\n    >\nstruct map3\n    : m_item<\n          3\n        , typename P2::first\n        , typename P2::second\n        , map2< P0,P1 >\n        >\n{\n    typedef map3 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,3 >\n{\n    typedef typename Map::item3 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 4,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item3;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3\n    >\nstruct map4\n    : m_item<\n          4\n        , typename P3::first\n        , typename P3::second\n        , map3< P0,P1,P2 >\n        >\n{\n    typedef map4 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,4 >\n{\n    typedef typename Map::item4 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 5,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item4;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    >\nstruct map5\n    : m_item<\n          5\n        , typename P4::first\n        , typename P4::second\n        , map4< P0,P1,P2,P3 >\n        >\n{\n    typedef map5 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,5 >\n{\n    typedef typename Map::item5 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 6,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item5;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5\n    >\nstruct map6\n    : m_item<\n          6\n        , typename P5::first\n        , typename P5::second\n        , map5< P0,P1,P2,P3,P4 >\n        >\n{\n    typedef map6 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,6 >\n{\n    typedef typename Map::item6 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 7,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item6;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6\n    >\nstruct map7\n    : m_item<\n          7\n        , typename P6::first\n        , typename P6::second\n        , map6< P0,P1,P2,P3,P4,P5 >\n        >\n{\n    typedef map7 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,7 >\n{\n    typedef typename Map::item7 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 8,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item7;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7\n    >\nstruct map8\n    : m_item<\n          8\n        , typename P7::first\n        , typename P7::second\n        , map7< P0,P1,P2,P3,P4,P5,P6 >\n        >\n{\n    typedef map8 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,8 >\n{\n    typedef typename Map::item8 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 9,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item8;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8\n    >\nstruct map9\n    : m_item<\n          9\n        , typename P8::first\n        , typename P8::second\n        , map8< P0,P1,P2,P3,P4,P5,P6,P7 >\n        >\n{\n    typedef map9 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,9 >\n{\n    typedef typename Map::item9 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 10,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item9;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    >\nstruct map10\n    : m_item<\n          10\n        , typename P9::first\n        , typename P9::second\n        , map9< P0,P1,P2,P3,P4,P5,P6,P7,P8 >\n        >\n{\n    typedef map10 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/plain/map20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Map>\nstruct m_at< Map,10 >\n{\n    typedef typename Map::item10 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 11,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item10;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10\n    >\nstruct map11\n    : m_item<\n          11\n        , typename P10::first\n        , typename P10::second\n        , map10< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 >\n        >\n{\n    typedef map11 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,11 >\n{\n    typedef typename Map::item11 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 12,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item11;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11\n    >\nstruct map12\n    : m_item<\n          12\n        , typename P11::first\n        , typename P11::second\n        , map11< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 >\n        >\n{\n    typedef map12 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,12 >\n{\n    typedef typename Map::item12 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 13,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item12;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12\n    >\nstruct map13\n    : m_item<\n          13\n        , typename P12::first\n        , typename P12::second\n        , map12< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11 >\n        >\n{\n    typedef map13 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,13 >\n{\n    typedef typename Map::item13 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 14,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item13;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13\n    >\nstruct map14\n    : m_item<\n          14\n        , typename P13::first\n        , typename P13::second\n        , map13< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 >\n        >\n{\n    typedef map14 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,14 >\n{\n    typedef typename Map::item14 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 15,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item14;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    >\nstruct map15\n    : m_item<\n          15\n        , typename P14::first\n        , typename P14::second\n        , map14< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13 >\n        >\n{\n    typedef map15 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,15 >\n{\n    typedef typename Map::item15 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 16,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item15;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15\n    >\nstruct map16\n    : m_item<\n          16\n        , typename P15::first\n        , typename P15::second\n        , map15< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14 >\n        >\n{\n    typedef map16 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,16 >\n{\n    typedef typename Map::item16 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 17,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item16;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16\n    >\nstruct map17\n    : m_item<\n          17\n        , typename P16::first\n        , typename P16::second\n        , map16< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15 >\n        >\n{\n    typedef map17 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,17 >\n{\n    typedef typename Map::item17 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 18,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item17;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17\n    >\nstruct map18\n    : m_item<\n          18\n        , typename P17::first\n        , typename P17::second\n        , map17< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16 >\n        >\n{\n    typedef map18 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,18 >\n{\n    typedef typename Map::item18 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 19,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item18;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18\n    >\nstruct map19\n    : m_item<\n          19\n        , typename P18::first\n        , typename P18::second\n        , map18< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17 >\n        >\n{\n    typedef map19 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,19 >\n{\n    typedef typename Map::item19 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 20,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item19;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    >\nstruct map20\n    : m_item<\n          20\n        , typename P19::first\n        , typename P19::second\n        , map19< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18 >\n        >\n{\n    typedef map20 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/plain/map30.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map30.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Map>\nstruct m_at< Map,20 >\n{\n    typedef typename Map::item20 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 21,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item20;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20\n    >\nstruct map21\n    : m_item<\n          21\n        , typename P20::first\n        , typename P20::second\n        , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >\n        >\n{\n    typedef map21 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,21 >\n{\n    typedef typename Map::item21 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 22,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item21;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21\n    >\nstruct map22\n    : m_item<\n          22\n        , typename P21::first\n        , typename P21::second\n        , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >\n        >\n{\n    typedef map22 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,22 >\n{\n    typedef typename Map::item22 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 23,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item22;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22\n    >\nstruct map23\n    : m_item<\n          23\n        , typename P22::first\n        , typename P22::second\n        , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >\n        >\n{\n    typedef map23 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,23 >\n{\n    typedef typename Map::item23 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 24,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item23;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23\n    >\nstruct map24\n    : m_item<\n          24\n        , typename P23::first\n        , typename P23::second\n        , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >\n        >\n{\n    typedef map24 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,24 >\n{\n    typedef typename Map::item24 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 25,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item24;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    >\nstruct map25\n    : m_item<\n          25\n        , typename P24::first\n        , typename P24::second\n        , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >\n        >\n{\n    typedef map25 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,25 >\n{\n    typedef typename Map::item25 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 26,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item25;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25\n    >\nstruct map26\n    : m_item<\n          26\n        , typename P25::first\n        , typename P25::second\n        , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >\n        >\n{\n    typedef map26 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,26 >\n{\n    typedef typename Map::item26 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 27,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item26;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26\n    >\nstruct map27\n    : m_item<\n          27\n        , typename P26::first\n        , typename P26::second\n        , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >\n        >\n{\n    typedef map27 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,27 >\n{\n    typedef typename Map::item27 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 28,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item27;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27\n    >\nstruct map28\n    : m_item<\n          28\n        , typename P27::first\n        , typename P27::second\n        , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >\n        >\n{\n    typedef map28 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,28 >\n{\n    typedef typename Map::item28 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 29,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item28;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28\n    >\nstruct map29\n    : m_item<\n          29\n        , typename P28::first\n        , typename P28::second\n        , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >\n        >\n{\n    typedef map29 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,29 >\n{\n    typedef typename Map::item29 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 30,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item29;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    >\nstruct map30\n    : m_item<\n          30\n        , typename P29::first\n        , typename P29::second\n        , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >\n        >\n{\n    typedef map30 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/plain/map40.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map40.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Map>\nstruct m_at< Map,30 >\n{\n    typedef typename Map::item30 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 31,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item30;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30\n    >\nstruct map31\n    : m_item<\n          31\n        , typename P30::first\n        , typename P30::second\n        , map30< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29 >\n        >\n{\n    typedef map31 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,31 >\n{\n    typedef typename Map::item31 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 32,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item31;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31\n    >\nstruct map32\n    : m_item<\n          32\n        , typename P31::first\n        , typename P31::second\n        , map31< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30 >\n        >\n{\n    typedef map32 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,32 >\n{\n    typedef typename Map::item32 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 33,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item32;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32\n    >\nstruct map33\n    : m_item<\n          33\n        , typename P32::first\n        , typename P32::second\n        , map32< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31 >\n        >\n{\n    typedef map33 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,33 >\n{\n    typedef typename Map::item33 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 34,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item33;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33\n    >\nstruct map34\n    : m_item<\n          34\n        , typename P33::first\n        , typename P33::second\n        , map33< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32 >\n        >\n{\n    typedef map34 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,34 >\n{\n    typedef typename Map::item34 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 35,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item34;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    >\nstruct map35\n    : m_item<\n          35\n        , typename P34::first\n        , typename P34::second\n        , map34< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33 >\n        >\n{\n    typedef map35 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,35 >\n{\n    typedef typename Map::item35 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 36,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item35;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35\n    >\nstruct map36\n    : m_item<\n          36\n        , typename P35::first\n        , typename P35::second\n        , map35< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34 >\n        >\n{\n    typedef map36 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,36 >\n{\n    typedef typename Map::item36 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 37,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item36;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36\n    >\nstruct map37\n    : m_item<\n          37\n        , typename P36::first\n        , typename P36::second\n        , map36< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35 >\n        >\n{\n    typedef map37 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,37 >\n{\n    typedef typename Map::item37 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 38,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item37;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37\n    >\nstruct map38\n    : m_item<\n          38\n        , typename P37::first\n        , typename P37::second\n        , map37< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36 >\n        >\n{\n    typedef map38 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,38 >\n{\n    typedef typename Map::item38 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 39,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item38;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38\n    >\nstruct map39\n    : m_item<\n          39\n        , typename P38::first\n        , typename P38::second\n        , map38< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37 >\n        >\n{\n    typedef map39 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,39 >\n{\n    typedef typename Map::item39 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 40,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item39;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    >\nstruct map40\n    : m_item<\n          40\n        , typename P39::first\n        , typename P39::second\n        , map39< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38 >\n        >\n{\n    typedef map40 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/plain/map50.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map50.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Map>\nstruct m_at< Map,40 >\n{\n    typedef typename Map::item40 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 41,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item40;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40\n    >\nstruct map41\n    : m_item<\n          41\n        , typename P40::first\n        , typename P40::second\n        , map40< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39 >\n        >\n{\n    typedef map41 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,41 >\n{\n    typedef typename Map::item41 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 42,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item41;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41\n    >\nstruct map42\n    : m_item<\n          42\n        , typename P41::first\n        , typename P41::second\n        , map41< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40 >\n        >\n{\n    typedef map42 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,42 >\n{\n    typedef typename Map::item42 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 43,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item42;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42\n    >\nstruct map43\n    : m_item<\n          43\n        , typename P42::first\n        , typename P42::second\n        , map42< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41 >\n        >\n{\n    typedef map43 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,43 >\n{\n    typedef typename Map::item43 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 44,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item43;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43\n    >\nstruct map44\n    : m_item<\n          44\n        , typename P43::first\n        , typename P43::second\n        , map43< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42 >\n        >\n{\n    typedef map44 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,44 >\n{\n    typedef typename Map::item44 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 45,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item44;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    >\nstruct map45\n    : m_item<\n          45\n        , typename P44::first\n        , typename P44::second\n        , map44< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43 >\n        >\n{\n    typedef map45 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,45 >\n{\n    typedef typename Map::item45 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 46,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item45;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45\n    >\nstruct map46\n    : m_item<\n          46\n        , typename P45::first\n        , typename P45::second\n        , map45< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44 >\n        >\n{\n    typedef map46 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,46 >\n{\n    typedef typename Map::item46 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 47,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item46;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46\n    >\nstruct map47\n    : m_item<\n          47\n        , typename P46::first\n        , typename P46::second\n        , map46< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45 >\n        >\n{\n    typedef map47 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,47 >\n{\n    typedef typename Map::item47 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 48,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item47;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46, typename P47\n    >\nstruct map48\n    : m_item<\n          48\n        , typename P47::first\n        , typename P47::second\n        , map47< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46 >\n        >\n{\n    typedef map48 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,48 >\n{\n    typedef typename Map::item48 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 49,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item48;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46, typename P47, typename P48\n    >\nstruct map49\n    : m_item<\n          49\n        , typename P48::first\n        , typename P48::second\n        , map48< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47 >\n        >\n{\n    typedef map49 type;\n};\n\ntemplate< typename Map>\nstruct m_at< Map,49 >\n{\n    typedef typename Map::item49 type;\n};\n\ntemplate< typename Key, typename T, typename Base >\nstruct m_item< 50,Key,T,Base >\n    : m_item_< Key,T,Base >\n{\n    typedef pair< Key,T > item49;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46, typename P47, typename P48, typename P49\n    >\nstruct map50\n    : m_item<\n          50\n        , typename P49::first\n        , typename P49::second\n        , map49< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47,P48 >\n        >\n{\n    typedef map50 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename P0\n    >\nstruct map1\n    : m_item<\n          typename P0::first\n        , typename P0::second\n        , map0<  >\n        >\n{\n    typedef map1 type;\n};\n\ntemplate<\n      typename P0, typename P1\n    >\nstruct map2\n    : m_item<\n          typename P1::first\n        , typename P1::second\n        , map1<P0>\n        >\n{\n    typedef map2 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2\n    >\nstruct map3\n    : m_item<\n          typename P2::first\n        , typename P2::second\n        , map2< P0,P1 >\n        >\n{\n    typedef map3 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3\n    >\nstruct map4\n    : m_item<\n          typename P3::first\n        , typename P3::second\n        , map3< P0,P1,P2 >\n        >\n{\n    typedef map4 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    >\nstruct map5\n    : m_item<\n          typename P4::first\n        , typename P4::second\n        , map4< P0,P1,P2,P3 >\n        >\n{\n    typedef map5 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5\n    >\nstruct map6\n    : m_item<\n          typename P5::first\n        , typename P5::second\n        , map5< P0,P1,P2,P3,P4 >\n        >\n{\n    typedef map6 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6\n    >\nstruct map7\n    : m_item<\n          typename P6::first\n        , typename P6::second\n        , map6< P0,P1,P2,P3,P4,P5 >\n        >\n{\n    typedef map7 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7\n    >\nstruct map8\n    : m_item<\n          typename P7::first\n        , typename P7::second\n        , map7< P0,P1,P2,P3,P4,P5,P6 >\n        >\n{\n    typedef map8 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8\n    >\nstruct map9\n    : m_item<\n          typename P8::first\n        , typename P8::second\n        , map8< P0,P1,P2,P3,P4,P5,P6,P7 >\n        >\n{\n    typedef map9 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    >\nstruct map10\n    : m_item<\n          typename P9::first\n        , typename P9::second\n        , map9< P0,P1,P2,P3,P4,P5,P6,P7,P8 >\n        >\n{\n    typedef map10 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10\n    >\nstruct map11\n    : m_item<\n          typename P10::first\n        , typename P10::second\n        , map10< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 >\n        >\n{\n    typedef map11 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11\n    >\nstruct map12\n    : m_item<\n          typename P11::first\n        , typename P11::second\n        , map11< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 >\n        >\n{\n    typedef map12 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12\n    >\nstruct map13\n    : m_item<\n          typename P12::first\n        , typename P12::second\n        , map12< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11 >\n        >\n{\n    typedef map13 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13\n    >\nstruct map14\n    : m_item<\n          typename P13::first\n        , typename P13::second\n        , map13< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 >\n        >\n{\n    typedef map14 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    >\nstruct map15\n    : m_item<\n          typename P14::first\n        , typename P14::second\n        , map14< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13 >\n        >\n{\n    typedef map15 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15\n    >\nstruct map16\n    : m_item<\n          typename P15::first\n        , typename P15::second\n        , map15< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14 >\n        >\n{\n    typedef map16 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16\n    >\nstruct map17\n    : m_item<\n          typename P16::first\n        , typename P16::second\n        , map16< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15 >\n        >\n{\n    typedef map17 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17\n    >\nstruct map18\n    : m_item<\n          typename P17::first\n        , typename P17::second\n        , map17< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16 >\n        >\n{\n    typedef map18 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18\n    >\nstruct map19\n    : m_item<\n          typename P18::first\n        , typename P18::second\n        , map18< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17 >\n        >\n{\n    typedef map19 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    >\nstruct map20\n    : m_item<\n          typename P19::first\n        , typename P19::second\n        , map19< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18 >\n        >\n{\n    typedef map20 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map30.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20\n    >\nstruct map21\n    : m_item<\n          typename P20::first\n        , typename P20::second\n        , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >\n        >\n{\n    typedef map21 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21\n    >\nstruct map22\n    : m_item<\n          typename P21::first\n        , typename P21::second\n        , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >\n        >\n{\n    typedef map22 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22\n    >\nstruct map23\n    : m_item<\n          typename P22::first\n        , typename P22::second\n        , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >\n        >\n{\n    typedef map23 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23\n    >\nstruct map24\n    : m_item<\n          typename P23::first\n        , typename P23::second\n        , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >\n        >\n{\n    typedef map24 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    >\nstruct map25\n    : m_item<\n          typename P24::first\n        , typename P24::second\n        , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >\n        >\n{\n    typedef map25 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25\n    >\nstruct map26\n    : m_item<\n          typename P25::first\n        , typename P25::second\n        , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >\n        >\n{\n    typedef map26 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26\n    >\nstruct map27\n    : m_item<\n          typename P26::first\n        , typename P26::second\n        , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >\n        >\n{\n    typedef map27 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27\n    >\nstruct map28\n    : m_item<\n          typename P27::first\n        , typename P27::second\n        , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >\n        >\n{\n    typedef map28 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28\n    >\nstruct map29\n    : m_item<\n          typename P28::first\n        , typename P28::second\n        , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >\n        >\n{\n    typedef map29 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    >\nstruct map30\n    : m_item<\n          typename P29::first\n        , typename P29::second\n        , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >\n        >\n{\n    typedef map30 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map40.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30\n    >\nstruct map31\n    : m_item<\n          typename P30::first\n        , typename P30::second\n        , map30< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29 >\n        >\n{\n    typedef map31 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31\n    >\nstruct map32\n    : m_item<\n          typename P31::first\n        , typename P31::second\n        , map31< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30 >\n        >\n{\n    typedef map32 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32\n    >\nstruct map33\n    : m_item<\n          typename P32::first\n        , typename P32::second\n        , map32< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31 >\n        >\n{\n    typedef map33 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33\n    >\nstruct map34\n    : m_item<\n          typename P33::first\n        , typename P33::second\n        , map33< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32 >\n        >\n{\n    typedef map34 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    >\nstruct map35\n    : m_item<\n          typename P34::first\n        , typename P34::second\n        , map34< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33 >\n        >\n{\n    typedef map35 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35\n    >\nstruct map36\n    : m_item<\n          typename P35::first\n        , typename P35::second\n        , map35< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34 >\n        >\n{\n    typedef map36 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36\n    >\nstruct map37\n    : m_item<\n          typename P36::first\n        , typename P36::second\n        , map36< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35 >\n        >\n{\n    typedef map37 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37\n    >\nstruct map38\n    : m_item<\n          typename P37::first\n        , typename P37::second\n        , map37< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36 >\n        >\n{\n    typedef map38 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38\n    >\nstruct map39\n    : m_item<\n          typename P38::first\n        , typename P38::second\n        , map38< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37 >\n        >\n{\n    typedef map39 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    >\nstruct map40\n    : m_item<\n          typename P39::first\n        , typename P39::second\n        , map39< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38 >\n        >\n{\n    typedef map40 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/map/map50.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40\n    >\nstruct map41\n    : m_item<\n          typename P40::first\n        , typename P40::second\n        , map40< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39 >\n        >\n{\n    typedef map41 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41\n    >\nstruct map42\n    : m_item<\n          typename P41::first\n        , typename P41::second\n        , map41< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40 >\n        >\n{\n    typedef map42 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42\n    >\nstruct map43\n    : m_item<\n          typename P42::first\n        , typename P42::second\n        , map42< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41 >\n        >\n{\n    typedef map43 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43\n    >\nstruct map44\n    : m_item<\n          typename P43::first\n        , typename P43::second\n        , map43< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42 >\n        >\n{\n    typedef map44 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    >\nstruct map45\n    : m_item<\n          typename P44::first\n        , typename P44::second\n        , map44< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43 >\n        >\n{\n    typedef map45 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45\n    >\nstruct map46\n    : m_item<\n          typename P45::first\n        , typename P45::second\n        , map45< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44 >\n        >\n{\n    typedef map46 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46\n    >\nstruct map47\n    : m_item<\n          typename P46::first\n        , typename P46::second\n        , map46< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45 >\n        >\n{\n    typedef map47 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46, typename P47\n    >\nstruct map48\n    : m_item<\n          typename P47::first\n        , typename P47::second\n        , map47< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46 >\n        >\n{\n    typedef map48 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46, typename P47, typename P48\n    >\nstruct map49\n    : m_item<\n          typename P48::first\n        , typename P48::second\n        , map48< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47 >\n        >\n{\n    typedef map49 type;\n};\n\ntemplate<\n      typename P0, typename P1, typename P2, typename P3, typename P4\n    , typename P5, typename P6, typename P7, typename P8, typename P9\n    , typename P10, typename P11, typename P12, typename P13, typename P14\n    , typename P15, typename P16, typename P17, typename P18, typename P19\n    , typename P20, typename P21, typename P22, typename P23, typename P24\n    , typename P25, typename P26, typename P27, typename P28, typename P29\n    , typename P30, typename P31, typename P32, typename P33, typename P34\n    , typename P35, typename P36, typename P37, typename P38, typename P39\n    , typename P40, typename P41, typename P42, typename P43, typename P44\n    , typename P45, typename P46, typename P47, typename P48, typename P49\n    >\nstruct map50\n    : m_item<\n          typename P49::first\n        , typename P49::second\n        , map49< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47,P48 >\n        >\n{\n    typedef map50 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/size_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_SIZE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_SIZE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct size_impl< aux::map_tag >\n{\n    template< typename Map > struct apply\n        : Map::size\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_SIZE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct map_tag;\n\n}}}\n\n#endif // BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/aux_/value_type_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MAP_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/value_type_fwd.hpp>\n#include <boost/mpl/pair.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n\nnamespace boost {\nnamespace mpl {\n\ntemplate<>\nstruct value_type_impl< aux::map_tag >\n{\n    template< typename Map, typename T > struct apply\n        : second<T>\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MAP_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/map0.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_MAP0_HPP_INCLUDED\n#define BOOST_MPL_MAP_MAP0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/map/aux_/contains_impl.hpp>\n#include <boost/mpl/map/aux_/at_impl.hpp>\n//#include <boost/mpl/map/aux_/O1_size.hpp>\n#include <boost/mpl/map/aux_/insert_impl.hpp>\n#include <boost/mpl/map/aux_/insert_range_impl.hpp>\n#include <boost/mpl/map/aux_/erase_impl.hpp>\n#include <boost/mpl/map/aux_/erase_key_impl.hpp>\n#include <boost/mpl/map/aux_/has_key_impl.hpp>\n#include <boost/mpl/map/aux_/key_type_impl.hpp>\n#include <boost/mpl/map/aux_/value_type_impl.hpp>\n#include <boost/mpl/map/aux_/clear_impl.hpp>\n#include <boost/mpl/map/aux_/size_impl.hpp>\n#include <boost/mpl/map/aux_/empty_impl.hpp>\n#include <boost/mpl/map/aux_/begin_end_impl.hpp>\n#include <boost/mpl/map/aux_/iterator.hpp>\n#include <boost/mpl/map/aux_/item.hpp>\n#include <boost/mpl/map/aux_/map0.hpp>\n#include <boost/mpl/map/aux_/tag.hpp>\n\n#endif // BOOST_MPL_MAP_MAP0_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/map10.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_MAP10_HPP_INCLUDED\n#define BOOST_MPL_MAP_MAP10_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/map/map0.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER map10.hpp\n#   include <boost/mpl/map/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, 10, <boost/mpl/map/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_MAP_MAP10_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/map20.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_MAP20_HPP_INCLUDED\n#define BOOST_MPL_MAP_MAP20_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/map/map10.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER map20.hpp\n#   include <boost/mpl/map/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(11, 20, <boost/mpl/map/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_MAP_MAP20_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/map30.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_MAP30_HPP_INCLUDED\n#define BOOST_MPL_MAP_MAP30_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/map/map20.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER map30.hpp\n#   include <boost/mpl/map/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(21, 30, <boost/mpl/map/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_MAP_MAP30_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/map40.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_MAP40_HPP_INCLUDED\n#define BOOST_MPL_MAP_MAP40_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/map/map30.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER map40.hpp\n#   include <boost/mpl/map/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(31, 40, <boost/mpl/map/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_MAP_MAP40_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map/map50.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_MAP50_HPP_INCLUDED\n#define BOOST_MPL_MAP_MAP50_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/map/map40.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER map50.hpp\n#   include <boost/mpl/map/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(41, 50, <boost/mpl/map/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_MAP_MAP50_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/map.hpp",
    "content": "\n#ifndef BOOST_MPL_MAP_HPP_INCLUDED\n#define BOOST_MPL_MAP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/map.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_MAP_HEADER \\\n    BOOST_PP_CAT(map, BOOST_MPL_LIMIT_MAP_SIZE).hpp \\\n    /**/\n#else\n#   define AUX778076_MAP_HEADER \\\n    BOOST_PP_CAT(map, BOOST_MPL_LIMIT_MAP_SIZE)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/map/AUX778076_MAP_HEADER)\n#   undef AUX778076_MAP_HEADER\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER map.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/map.hpp>\n\n#   define AUX778076_SEQUENCE_NAME map\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_MAP_SIZE\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_MAP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/math/fixed_c.hpp",
    "content": "\n#ifndef BOOST_MPL_FIXED_C_HPP_INCLUDED\n#define BOOST_MPL_FIXED_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      long IntegerPart\n    , unsigned long FractionPart\n    >\nstruct fixed_c\n{\n    BOOST_STATIC_CONSTANT(long, integer_part = IntegerPart);\n    BOOST_STATIC_CONSTANT(unsigned long, fraction_part = FractionPart);\n    typedef fixed_c<IntegerPart, FractionPart> type;\n    \n    fixed_c() {}\n};\n\n}}\n\n#endif // BOOST_MPL_FIXED_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/math/is_even.hpp",
    "content": "\n#ifndef BOOST_MPL_MATH_IS_EVEN_HPP_INCLUDED\n#define BOOST_MPL_MATH_IS_EVEN_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\nnamespace aux\n{\n  template <class N>\n  struct is_even_base\n  {\n      enum { value = (N::value % 2) == 0 };\n      typedef bool_<value> type;\n  };\n}\n#endif \n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N)\n    >\nstruct is_even\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n  : aux::is_even_base<N>::type\n#else\n  : bool_<((N::value % 2) == 0)>\n#endif \n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_even,(N))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, is_even)\n\n}}\n\n#endif // BOOST_MPL_MATH_IS_EVEN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/math/rational_c.hpp",
    "content": "\n#ifndef BOOST_MPL_RATIONAL_C_HPP_INCLUDED\n#define BOOST_MPL_RATIONAL_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename IntegerType\n    , IntegerType N\n    , IntegerType D = 1\n    >\nstruct rational_c\n{\n    BOOST_STATIC_CONSTANT(IntegerType, numerator = N);\n    BOOST_STATIC_CONSTANT(IntegerType, denominator = D);\n    \n    typedef rational_c<IntegerType,N,D> type;\n    rational_c() {}\n};\n\n}}\n\n#endif // BOOST_MPL_RATIONAL_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/max.hpp",
    "content": "\n#ifndef BOOST_MPL_MAX_HPP_INCLUDED\n#define BOOST_MPL_MAX_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/min_max.hpp>\n\n#endif // BOOST_MPL_MAX_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/max_element.hpp",
    "content": "\n#ifndef BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED\n#define BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/less.hpp>\n#include <boost/mpl/iter_fold.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(max_element)\n\nnamespace aux {\n\ntemplate< typename Predicate >\nstruct select_max\n{\n    template< typename OldIterator, typename Iterator >\n    struct apply\n    {\n        typedef typename apply2<\n              Predicate\n            , typename deref<OldIterator>::type\n            , typename deref<Iterator>::type\n            >::type condition_;\n\n        typedef typename if_<\n              condition_\n            , Iterator\n            , OldIterator\n            >::type type;\n    };\n};\n\n} // namespace aux \n\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename Predicate = less<_,_>\n    >\nstruct max_element\n    : iter_fold<\n          Sequence\n        , typename begin<Sequence>::type\n        , protect< aux::select_max<Predicate> >\n        >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, max_element)\n\n}}\n\n#endif // BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/min.hpp",
    "content": "\n#ifndef BOOST_MPL_MIN_HPP_INCLUDED\n#define BOOST_MPL_MIN_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/min_max.hpp>\n\n#endif // BOOST_MPL_MIN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/min_element.hpp",
    "content": "\n#ifndef BOOST_MPL_MIN_ELEMENT_HPP_INCLUDED\n#define BOOST_MPL_MIN_ELEMENT_HPP_INCLUDED\n\n// Copyright David Abrahams 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/max_element.hpp>\n#include <boost/mpl/not.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(min_element)\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename Predicate = less<_,_>\n    >\nstruct min_element\n    : max_element<\n          Sequence\n        , mpl::not_<Predicate>\n        >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, min_element)\n\n}}\n\n#endif // BOOST_MPL_MIN_ELEMENT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/min_max.hpp",
    "content": "\n#ifndef BOOST_MPL_MIN_MAX_HPP_INCLUDED\n#define BOOST_MPL_MIN_MAX_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/less.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct min\n    : if_< less<N1,N2>,N1,N2 >\n{\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct max\n    : if_< less<N1,N2>,N2,N1 >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, min)\nBOOST_MPL_AUX_NA_SPEC(2, max)\n\n}}\n\n#endif // BOOST_MPL_MIN_MAX_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/minus.hpp",
    "content": "\n#ifndef BOOST_MPL_MINUS_HPP_INCLUDED\n#define BOOST_MPL_MINUS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME minus\n#define AUX778076_OP_TOKEN -\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#endif // BOOST_MPL_MINUS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/modulus.hpp",
    "content": "\n#ifndef BOOST_MPL_MODULUS_HPP_INCLUDED\n#define BOOST_MPL_MODULUS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME modulus\n#define AUX778076_OP_TOKEN %\n#define AUX778076_OP_ARITY 2\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#endif // BOOST_MPL_MODULUS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/multiplies.hpp",
    "content": "\n#ifndef BOOST_MPL_MULTIPLIES_HPP_INCLUDED\n#define BOOST_MPL_MULTIPLIES_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/times.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\n// backward compatibility header, deprecated\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#   define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n#else\n#   define AUX778076_OP_ARITY 2\n#endif\n\ntemplate<\n      BOOST_MPL_PP_DEFAULT_PARAMS(AUX778076_OP_ARITY, typename N, na)\n    >\nstruct multiplies\n    : times< BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          AUX778076_OP_ARITY\n        , multiplies\n        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(AUX778076_OP_ARITY, multiplies)\n\n#undef AUX778076_OP_ARITY\n\n}}\n\n#endif // BOOST_MPL_MULTIPLIES_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/multiset/aux_/count_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/multiset/aux_/tag.hpp>\n#include <boost/mpl/count_fwd.hpp>\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n#   include <boost/mpl/if.hpp>\n#   include <boost/type_traits/is_reference.hpp>\n#endif\n\nnamespace boost { namespace mpl {\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\nnamespace aux {\ntemplate< typename S, typename U >\nstruct multiset_count_impl\n    : int_< sizeof(S::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) - 1 >\n{\n};\n\ntemplate< typename S, typename U >\nstruct multiset_count_ref_impl\n{\n    typedef U (* u_)();\n    typedef int_< sizeof(S::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) - 1 > type_;\n    BOOST_STATIC_CONSTANT(int, value = type_::value);\n    typedef type_ type;\n};\n}\n\ntemplate<>\nstruct count_impl< aux::multiset_tag >\n{\n    template< typename Set, typename Key > struct apply\n        : if_< \n              is_reference<Key>\n            , aux::multiset_count_ref_impl<Set,Key>\n            , aux::multiset_count_impl<Set,Key>\n            >::type\n    {\n    };\n};\n\n#else\n\ntemplate<>\nstruct count_impl< aux::multiset_tag >\n{\n    template< typename Set, typename Key > struct apply\n    {\n        enum { msvc71_wknd_ = sizeof(Set::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*,0))) - 1 };\n        typedef int_< msvc71_wknd_ > type;\n        BOOST_STATIC_CONSTANT(int, value = msvc71_wknd_);\n    };\n};\n\n#endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\n}}\n\n#endif // BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/multiset/aux_/insert_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_MULTISET_AUX_INSERT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_MULTISET_AUX_INSERT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/multiset/aux_/item.hpp>\n#include <boost/mpl/multiset/aux_/tag.hpp>\n#include <boost/mpl/insert_fwd.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct insert_impl< aux::multiset_tag >\n{\n    template< typename Set, typename Key, typename unused_ > struct apply\n    {\n        typedef ms_item<Key,Set> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_MULTISET_AUX_INSERT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/multiset/aux_/item.hpp",
    "content": "\n#ifndef BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED\n#define BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/multiset/aux_/tag.hpp>\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/config/arrays.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n#   include <boost/mpl/eval_if.hpp>\n#   include <boost/mpl/next.hpp>\n#   include <boost/type_traits/is_same.hpp>\n#endif\n\n\nnamespace boost { namespace mpl {\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\ntemplate< typename T, typename Base >\nstruct ms_item\n{\n    typedef aux::multiset_tag tag;\n\n    template< typename U > struct prior_count\n    {\n        enum { msvc70_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) };\n        typedef int_< msvc70_wknd_ > count_;\n        typedef typename eval_if< is_same<T,U>, next<count_>, count_ >::type c_;\n#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)\n        typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value>::type type;\n#else\n        typedef char (&type)[BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value];\n#endif\n    };\n\n    template< typename U > struct prior_ref_count\n    {\n        typedef U (* u_)();\n        enum { msvc70_wknd_ = sizeof(Base::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) }; \n        typedef int_< msvc70_wknd_ > count_;\n        typedef typename eval_if< is_same<T,U>, next<count_>, count_ >::type c_;\n#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)\n        typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value>::type type;\n#else\n        typedef char (&type)[BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value];\n#endif\n    };\n\n    template< typename U >\n    static typename prior_count<U>::type key_count(U*);\n\n    template< typename U >\n    static typename prior_ref_count<U>::type ref_key_count(U (*)());\n};\n\n#else // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\nnamespace aux {\ntemplate< typename U, typename Base >\nstruct prior_key_count\n{\n    enum { msvc71_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<U>*,0))) }; \n    typedef int_< msvc71_wknd_ > count_;\n#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)\n    typedef typename aux::weighted_tag< BOOST_MPL_AUX_VALUE_WKND(count_)::value >::type type;\n#else\n    typedef char (&type)[count_::value];\n#endif\n};\n}\n\ntemplate< typename T, typename Base >\nstruct ms_item\n{\n    typedef aux::multiset_tag tag;\n\n    enum { msvc71_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<T>*,0))) + 1 };\n    typedef int_< msvc71_wknd_ > count_;\n#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)\n    static \n    typename aux::weighted_tag< BOOST_MPL_AUX_VALUE_WKND(count_)::value >::type\n        key_count(aux::type_wrapper<T>*);\n#else\n    static char (& key_count(aux::type_wrapper<T>*) )[count_::value];\n#endif\n\n    template< typename U >\n    static typename aux::prior_key_count<U,Base>::type key_count(aux::type_wrapper<U>*);\n};\n\n#endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\n}}\n\n#endif // BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/multiset/aux_/multiset0.hpp",
    "content": "\n#ifndef BOOST_MPL_MULTISET_AUX_MULTISET0_HPP_INCLUDED\n#define BOOST_MPL_MULTISET_AUX_MULTISET0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/multiset/aux_/tag.hpp>\n#include <boost/mpl/int.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< int dummy_ = 0 >\nstruct multiset0\n{\n    typedef aux::multiset_tag tag;\n\n    typedef int_<1> count_;\n    static char (& key_count(...) )[count_::value];\n    static char (& ref_key_count(...) )[count_::value];\n};\n\n}}\n\n#endif // BOOST_MPL_MULTISET_AUX_MULTISET0_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/multiset/aux_/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_MULTISET_AUX_TAG_HPP_INCLUDED\n#define BOOST_MPL_MULTISET_AUX_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct multiset_tag;\n\n}}}\n\n#endif // BOOST_MPL_MULTISET_AUX_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/multiset/multiset0.hpp",
    "content": "\n#ifndef BOOST_MPL_MULTISET_MULTISET0_HPP_INCLUDED\n#define BOOST_MPL_MULTISET_MULTISET0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n//#include <boost/mpl/multiset/aux_/at.hpp>\n//#include <boost/mpl/multiset/aux_/front.hpp>\n//#include <boost/mpl/multiset/aux_/push_front.hpp>\n//#include <boost/mpl/multiset/aux_/pop_front.hpp>\n//#include <boost/mpl/multiset/aux_/back.hpp>\n//#include <boost/mpl/multiset/aux_/clear.hpp>\n//#include <boost/mpl/multiset/aux_/O1_size.hpp>\n//#include <boost/mpl/multiset/aux_/size.hpp>\n//#include <boost/mpl/multiset/aux_/empty.hpp>\n//#include <boost/mpl/multiset/aux_/empty.hpp>\n#include <boost/mpl/multiset/aux_/insert_impl.hpp>\n#include <boost/mpl/multiset/aux_/count_impl.hpp>\n//#include <boost/mpl/multiset/aux_/has_key_impl.hpp>\n//#include <boost/mpl/multiset/aux_/begin_end_impl.hpp>\n//#include <boost/mpl/multiset/aux_/iterator.hpp>\n#include <boost/mpl/multiset/aux_/item.hpp>\n#include <boost/mpl/multiset/aux_/multiset0.hpp>\n#include <boost/mpl/multiset/aux_/tag.hpp>\n\n#endif // BOOST_MPL_MULTISET_MULTISET0_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/negate.hpp",
    "content": "\n#ifndef BOOST_MPL_NEGATE_HPP_INCLUDED\n#define BOOST_MPL_NEGATE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/integral_c.hpp>\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/integral.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct negate_impl;\n\ntemplate< typename T > struct negate_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N)\n    >\nstruct negate\n#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n    : negate_impl<\n          typename negate_tag<N>::type\n        >::template apply<N>::type\n#else\n    : aux::msvc_eti_base< typename apply_wrap1<\n          negate_impl< typename negate_tag<N>::type >\n        , N\n        >::type >::type\n#endif\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, negate, (N))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, negate)\n\n\n#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\nnamespace aux {\ntemplate< typename T, T n > struct negate_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value = -n);\n    typedef integral_c<T,value> type;\n};\n}\n#endif\n\ntemplate<>\nstruct negate_impl<integral_c_tag>\n{\n#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\n    template< typename N > struct apply\n        : aux::negate_wknd< typename N::value_type, N::value >\n#else\n    template< typename N > struct apply\n        : integral_c< typename N::value_type, (-N::value) >\n#endif    \n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_NEGATE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/next.hpp",
    "content": "\n#ifndef BOOST_MPL_NEXT_HPP_INCLUDED\n#define BOOST_MPL_NEXT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/next_prior.hpp>\n\n#endif // BOOST_MPL_NEXT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/next_prior.hpp",
    "content": "\n#ifndef BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED\n#define BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(next)\nBOOST_MPL_AUX_COMMON_NAME_WKND(prior)\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct next\n{\n    typedef typename T::next type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,next,(T))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct prior\n{\n    typedef typename T::prior type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,prior,(T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, next)\nBOOST_MPL_AUX_NA_SPEC(1, prior)\n\n}}\n\n#endif // BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/not.hpp",
    "content": "\n#ifndef BOOST_MPL_NOT_HPP_INCLUDED\n#define BOOST_MPL_NOT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/nested_type_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, C_) > // 'long' is intentional here\nstruct not_impl\n    : bool_<!C_>\n{\n};\n\n} // namespace aux\n\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct not_\n    : aux::not_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T)::value\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,not_,(T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1,not_)\n\n}}\n\n#endif // BOOST_MPL_NOT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/not_equal_to.hpp",
    "content": "\n#ifndef BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED\n#define BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME not_equal_to\n#define AUX778076_OP_TOKEN !=\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/numeric_cast.hpp",
    "content": "\n#ifndef BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED\n#define BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// agurt 21/sep/04: portability macro for the sake of MSVC 6.x-7.0;\n// resolves conflicts with 'boost::numeric_cast' function template.\n// use it in your own code _only_ if you care about compatibility with\n// these outdated compilers!\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570) )\n#   define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast_\n#else\n#   define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast\n#endif\n\nnamespace boost { namespace mpl {\n\n// no default implementation; the definition is needed to make MSVC happy\n\ntemplate< typename SourceTag, typename TargetTag > struct BOOST_MPL_AUX_NUMERIC_CAST\n{\n    template< typename N > struct apply;\n};\n\n}}\n\n#endif // BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/or.hpp",
    "content": "\n#ifndef BOOST_MPL_OR_HPP_INCLUDED\n#define BOOST_MPL_OR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/nested_type_wknd.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n\n// agurt, 19/may/04: workaround a conflict with <iso646.h> header's \n// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)'\n// has to be checked in a separate condition, otherwise GCC complains \n// about 'or' being an alternative token\n#if defined(_MSC_VER) && !defined(__clang__)\n#ifndef __GCCXML__\n#if defined(or)\n#   pragma push_macro(\"or\")\n#   undef or\n#   define or(x)\n#endif\n#endif\n#endif\n\n#   define BOOST_MPL_PREPROCESSED_HEADER or.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#if defined(_MSC_VER) && !defined(__clang__)\n#ifndef __GCCXML__\n#if defined(or)\n#   pragma pop_macro(\"or\")\n#endif\n#endif\n#endif\n\n#else\n\n#   define AUX778076_OP_NAME or_\n#   define AUX778076_OP_VALUE1 true\n#   define AUX778076_OP_VALUE2 false\n#   include <boost/mpl/aux_/logical_op.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_OR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/order.hpp",
    "content": "\n#ifndef BOOST_MPL_ORDER_HPP_INCLUDED\n#define BOOST_MPL_ORDER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/order_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/order_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(AssociativeSequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Key)\n    >\nstruct order\n    : order_impl< typename sequence_tag<AssociativeSequence>::type >\n        ::template apply<AssociativeSequence,Key>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,order,(AssociativeSequence,Key))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, order)\n\n}}\n\n#endif // BOOST_MPL_ORDER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/order_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_ORDER_FWD_HPP_INCLUDED\n#define BOOST_MPL_ORDER_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct order_impl;\ntemplate< typename AssociativeSequence, typename Key > struct order;\n\n}}\n\n#endif // BOOST_MPL_ORDER_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/pair.hpp",
    "content": "\n#ifndef BOOST_MPL_PAIR_HPP_INCLUDED\n#define BOOST_MPL_PAIR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct pair\n{\n    typedef pair type;\n    typedef T1 first;\n    typedef T2 second;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,pair,(T1,T2))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(P)\n    >\nstruct first\n{\n#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n    typedef typename P::first type;\n#else\n    typedef typename aux::msvc_eti_base<P>::first type;\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,first,(P))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(P)\n    >\nstruct second\n{\n#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n    typedef typename P::second type;\n#else\n    typedef typename aux::msvc_eti_base<P>::second type;\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,second,(P))\n};\n\n\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(2, pair)\nBOOST_MPL_AUX_NA_SPEC(1, first)\nBOOST_MPL_AUX_NA_SPEC(1, second)\n\n}}\n\n#endif // BOOST_MPL_PAIR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/pair_view.hpp",
    "content": "\n#ifndef BOOST_MPL_PAIR_VIEW_HPP_INCLUDED\n#define BOOST_MPL_PAIR_VIEW_HPP_INCLUDED\n\n// Copyright David Abrahams 2003-2004\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/iterator_category.hpp>\n#include <boost/mpl/advance.hpp>\n#include <boost/mpl/distance.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/min_max.hpp>\n#include <boost/mpl/pair.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\nstruct pair_iter_tag;\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename Iter1, typename Iter2, typename Category >\nstruct pair_iter;\n\ntemplate< typename Category > struct prior_pair_iter\n{\n    template< typename Iter1, typename Iter2 > struct apply\n    {\n        typedef typename mpl::prior<Iter1>::type i1_;\n        typedef typename mpl::prior<Iter2>::type i2_;\n        typedef pair_iter<i1_,i2_,Category> type;\n    };\n};\n\ntemplate<> struct prior_pair_iter<forward_iterator_tag>\n{\n    template< typename Iter1, typename Iter2 > struct apply\n    {\n        typedef pair_iter<Iter1,Iter2,forward_iterator_tag> type;\n    };\n};\n\n#endif\n}\n\ntemplate< \n      typename Iter1\n    , typename Iter2\n    , typename Category\n    >\nstruct pair_iter\n{\n    typedef aux::pair_iter_tag tag;\n    typedef Category category;\n    typedef Iter1 first;\n    typedef Iter2 second;\n    \n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    typedef pair< \n          typename deref<Iter1>::type\n        , typename deref<Iter2>::type\n        > type;\n\n    typedef typename mpl::next<Iter1>::type i1_;\n    typedef typename mpl::next<Iter2>::type i2_;\n    typedef pair_iter<i1_,i2_,Category> next;\n    \n    typedef apply_wrap2< aux::prior_pair_iter<Category>,Iter1,Iter2 >::type prior;\n#endif\n};\n\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename Iter1, typename Iter2, typename C >\nstruct deref< pair_iter<Iter1,Iter2,C> >\n{\n    typedef pair< \n          typename deref<Iter1>::type\n        , typename deref<Iter2>::type\n        > type;\n};\n\ntemplate< typename Iter1, typename Iter2, typename C >\nstruct next< pair_iter<Iter1,Iter2,C> >\n{\n    typedef typename mpl::next<Iter1>::type i1_;\n    typedef typename mpl::next<Iter2>::type i2_;\n    typedef pair_iter<i1_,i2_,C> type;\n};\n\ntemplate< typename Iter1, typename Iter2, typename C >\nstruct prior< pair_iter<Iter1,Iter2,C> >\n{\n    typedef typename mpl::prior<Iter1>::type i1_;\n    typedef typename mpl::prior<Iter2>::type i2_;\n    typedef pair_iter<i1_,i2_,C> type;\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n\ntemplate<> struct advance_impl<aux::pair_iter_tag>\n{\n    template< typename Iter, typename D > struct apply\n    {\n        typedef typename mpl::advance< typename Iter::first,D >::type i1_;\n        typedef typename mpl::advance< typename Iter::second,D >::type i2_;\n        typedef pair_iter<i1_,i2_,typename Iter::category> type;\n    };\n};\n\ntemplate<> struct distance_impl<aux::pair_iter_tag>\n{\n    template< typename Iter1, typename Iter2 > struct apply\n    {\n        // agurt, 10/nov/04: MSVC 6.5 ICE-s on forwarding\n        typedef typename mpl::distance<\n              typename first<Iter1>::type\n            , typename first<Iter2>::type\n            >::type type;\n    };\n};\n\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence1)\n    , typename BOOST_MPL_AUX_NA_PARAM(Sequence2)\n    >\nstruct pair_view\n{\n    typedef nested_begin_end_tag tag;\n\n    typedef typename begin<Sequence1>::type iter1_;\n    typedef typename begin<Sequence2>::type iter2_;\n    typedef typename min<\n          typename iterator_category<iter1_>::type\n        , typename iterator_category<iter2_>::type\n        >::type category_;\n    \n    typedef pair_iter<iter1_,iter2_,category_> begin;\n    \n    typedef pair_iter<\n          typename end<Sequence1>::type\n        , typename end<Sequence2>::type\n        , category_\n        > end;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, pair_view)\n\n}}\n\n#endif // BOOST_MPL_PAIR_VIEW_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/partition.hpp",
    "content": "\n#ifndef BOOST_MPL_PARTITION_HPP_INCLUDED\n#define BOOST_MPL_PARTITION_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002-2003\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/stable_partition.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n \ntemplate <\n      typename Sequence\n    , typename Pred\n    , typename In1\n    , typename In2\n    >\nstruct partition_impl\n    : stable_partition_impl<Sequence,Pred,In1,In2>\n{\n};\n\ntemplate <\n      typename Sequence\n    , typename Pred\n    , typename In1\n    , typename In2\n    >\nstruct reverse_partition_impl\n    : reverse_stable_partition_impl<Sequence,Pred,In1,In2>\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, partition)\n\n}}\n\n#endif // BOOST_MPL_PARTITION_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/placeholders.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED\n#define BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/arg.hpp>\n#   include <boost/mpl/aux_/adl_barrier.hpp>\n\n#   if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE)\n#       define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) \\\n        using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \\\n        /**/\n#   else\n#       define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) /**/\n#   endif\n\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER placeholders.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n// watch out for GNU gettext users, who #define _(x)\n#if !defined(_) || defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<-1> _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\nnamespace boost { namespace mpl { \n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n#endif\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY + 1, <boost/mpl/placeholders.hpp>))\n#include BOOST_PP_ITERATE()\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntypedef arg<i_> BOOST_PP_CAT(_,i_);\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\nnamespace boost { namespace mpl { \n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(BOOST_PP_CAT(_,i_))\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::BOOST_PP_CAT(_,i_);\n}\n\n}}\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/plus.hpp",
    "content": "\n#ifndef BOOST_MPL_PLUS_HPP_INCLUDED\n#define BOOST_MPL_PLUS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME plus\n#define AUX778076_OP_TOKEN +\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#endif // BOOST_MPL_PLUS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/pop_back.hpp",
    "content": "\n#ifndef BOOST_MPL_POP_BACK_HPP_INCLUDED\n#define BOOST_MPL_POP_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/pop_back_fwd.hpp>\n#include <boost/mpl/aux_/pop_back_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct pop_back\n    : pop_back_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,pop_back,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, pop_back)\n\n}}\n\n#endif // BOOST_MPL_POP_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/pop_back_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED\n#define BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct pop_back_impl;\ntemplate< typename Sequence > struct pop_back;\n\n}}\n\n#endif // BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/pop_front.hpp",
    "content": "\n#ifndef BOOST_MPL_POP_FRONT_HPP_INCLUDED\n#define BOOST_MPL_POP_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/pop_front_fwd.hpp>\n#include <boost/mpl/aux_/pop_front_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct pop_front\n    : pop_front_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,pop_front,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, pop_front)\n\n}}\n\n#endif // BOOST_MPL_POP_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/pop_front_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED\n#define BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct pop_front_impl;\ntemplate< typename Sequence > struct pop_front;\n\n}}\n\n#endif // BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/print.hpp",
    "content": "\n#ifndef BOOST_MPL_PRINT_HPP_INCLUDED\n#define BOOST_MPL_PRINT_HPP_INCLUDED\n\n// Copyright David Abrahams 2003\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/identity.hpp>\n\nnamespace boost { namespace mpl {\n  \nnamespace aux {\n#if defined(BOOST_MSVC)\n# pragma warning(push, 3)\n// we only want one warning from MSVC, so turn off the other one\n# pragma warning(disable: 4307)\n#elif defined(__MWERKS__)\n# pragma warn_hidevirtual on\n   struct print_base { virtual void f() {} };\n#endif\n\n#if defined(__EDG_VERSION__)\n  template <class T>\n  struct dependent_unsigned\n  {\n      static const unsigned value = 1;\n  };\n#endif\n} // namespace aux\n\ntemplate <class T>\nstruct print\n    : mpl::identity<T>\n#if defined(__MWERKS__)\n    , aux::print_base\n#endif \n{\n#if defined(__clang__)\n    const int m_x = 1 / (sizeof(T) - sizeof(T));\n#elif defined(BOOST_MSVC)\n    enum { n = sizeof(T) + -1 };\n#elif defined(__MWERKS__)\n    void f(int);\n#else \n    enum {\n        n =\n# if defined(__EDG_VERSION__)\n           aux::dependent_unsigned<T>::value > -1\n# else \n           sizeof(T) > -1\n# endif \n        };\n#endif \n};\n\n#if defined(BOOST_MSVC)\n# pragma warning(pop)\n#elif defined(__MWERKS__)\n# pragma warn_hidevirtual reset\n#endif\n\n}}\n\n#endif // BOOST_MPL_PRINT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/prior.hpp",
    "content": "\n#ifndef BOOST_MPL_PRIOR_HPP_INCLUDED\n#define BOOST_MPL_PRIOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/next_prior.hpp>\n\n#endif // BOOST_MPL_PRIOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/protect.hpp",
    "content": "\n#ifndef BOOST_MPL_PROTECT_HPP_INCLUDED\n#define BOOST_MPL_PROTECT_HPP_INCLUDED\n\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/arity.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    , int not_le_ = 0\n    >\nstruct protect : T\n{\n#if BOOST_WORKAROUND(__EDG_VERSION__, == 238)\n    typedef mpl::protect type;\n#else\n    typedef protect type;\n#endif\n};\n\n#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\nnamespace aux { \ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N), typename T >\nstruct arity< protect<T>, N > \n    : arity<T,N>\n{ \n};\n} // namespace aux\n#endif\n\nBOOST_MPL_AUX_NA_SPEC_MAIN(1, protect)\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(1, 1, protect)\n#endif\n\n}}\n\n#endif // BOOST_MPL_PROTECT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/push_back.hpp",
    "content": "\n#ifndef BOOST_MPL_PUSH_BACK_HPP_INCLUDED\n#define BOOST_MPL_PUSH_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_back_fwd.hpp>\n#include <boost/mpl/aux_/push_back_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct push_back\n    : push_back_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,T >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_back,(Sequence,T))\n};\n\n\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct has_push_back\n    : has_push_back_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_back,(Sequence))\n};\n\n\nBOOST_MPL_AUX_NA_SPEC(2, push_back)\nBOOST_MPL_AUX_NA_SPEC(1, has_push_back)\n\n}}\n\n#endif // BOOST_MPL_PUSH_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/push_back_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED\n#define BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct push_back_impl;\ntemplate< typename Sequence, typename T > struct push_back;\n\n}}\n\n#endif // BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/push_front.hpp",
    "content": "\n#ifndef BOOST_MPL_PUSH_FRONT_HPP_INCLUDED\n#define BOOST_MPL_PUSH_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_front_fwd.hpp>\n#include <boost/mpl/aux_/push_front_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct push_front\n    : push_front_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,T >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_front,(Sequence,T))\n};\n\n\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct has_push_front\n    : has_push_front_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_front,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, push_front)\nBOOST_MPL_AUX_NA_SPEC(1, has_push_front)\n\n}}\n\n#endif // BOOST_MPL_PUSH_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/push_front_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED\n#define BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct push_front_impl;\ntemplate< typename Sequence, typename T > struct push_front;\n\n}}\n\n#endif // BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/quote.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_QUOTE_HPP_INCLUDED\n#define BOOST_MPL_QUOTE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/void.hpp>\n#   include <boost/mpl/aux_/has_type.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/bcc.hpp>\n#include <boost/mpl/aux_/config/ttp.hpp>\n\n#if defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \\\n    && !defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS)\n#   define BOOST_MPL_CFG_NO_QUOTE_TEMPLATE\n#endif\n\n#if !defined(BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS) \\\n    && defined(BOOST_MPL_CFG_NO_HAS_XXX)\n#   define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER quote.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_QUOTE_TEMPLATE)\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename T, bool has_type_ >\nstruct quote_impl\n// GCC has a problem with metafunction forwarding when T is a\n// specialization of a template called 'type'.\n# if BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4)) \\\n    && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(0)) \\\n    && BOOST_WORKAROUND(__GNUC_PATCHLEVEL__, BOOST_TESTED_AT(2))\n{\n    typedef typename T::type type;\n};\n# else \n    : T\n{\n};\n# endif \n\ntemplate< typename T >\nstruct quote_impl<T,false>\n{\n    typedef T type;\n};\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate< bool > struct quote_impl\n{\n    template< typename T > struct result_\n        : T\n    {\n    };\n};\n\ntemplate<> struct quote_impl<false>\n{\n    template< typename T > struct result_\n    {\n        typedef T type;\n    };\n};\n\n#endif \n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/quote.hpp>))\n#include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_QUOTE_TEMPLATE\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_QUOTE_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      template< BOOST_MPL_PP_PARAMS(i_, typename P) > class F\n    , typename Tag = void_\n    >\nstruct BOOST_PP_CAT(quote,i_)\n{\n    template< BOOST_MPL_PP_PARAMS(i_, typename U) > struct apply\n#if defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS)\n    {\n        typedef typename quote_impl<\n              F< BOOST_MPL_PP_PARAMS(i_, U) >\n            , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value\n            >::type type;\n    };\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n        : quote_impl<\n              F< BOOST_MPL_PP_PARAMS(i_, U) >\n            , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value\n            >\n    {\n    };\n#else\n        : quote_impl< aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value >\n            ::template result_< F< BOOST_MPL_PP_PARAMS(i_, U) > >\n    {\n    };\n#endif\n};\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/range_c.hpp",
    "content": "\n#ifndef BOOST_MPL_RANGE_C_HPP_INCLUDED\n#define BOOST_MPL_RANGE_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/integral_c.hpp>\n#include <boost/mpl/aux_/range_c/front.hpp>\n#include <boost/mpl/aux_/range_c/back.hpp>\n#include <boost/mpl/aux_/range_c/size.hpp>\n#include <boost/mpl/aux_/range_c/O1_size.hpp>\n#include <boost/mpl/aux_/range_c/empty.hpp>\n#include <boost/mpl/aux_/range_c/iterator.hpp>\n#include <boost/mpl/aux_/range_c/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T Start\n    , T Finish\n    >\nstruct range_c\n{\n    typedef aux::half_open_range_tag tag;\n    typedef T value_type;\n    typedef range_c type;\n\n    typedef integral_c<T,Start> start;\n    typedef integral_c<T,Finish> finish;\n\n    typedef r_iter<start> begin;\n    typedef r_iter<finish> end;\n};\n\n}}\n\n#endif // BOOST_MPL_RANGE_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/remove.hpp",
    "content": "\n#ifndef BOOST_MPL_REMOVE_HPP_INCLUDED\n#define BOOST_MPL_REMOVE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/remove_if.hpp>\n#include <boost/mpl/same_as.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename Sequence\n    , typename T\n    , typename Inserter \n    >\nstruct remove_impl\n    : remove_if_impl< Sequence, same_as<T>, Inserter >\n{\n};\n\ntemplate<\n      typename Sequence\n    , typename T\n    , typename Inserter \n    >\nstruct reverse_remove_impl\n    : reverse_remove_if_impl< Sequence, same_as<T>, Inserter >\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, remove)\n\n}}\n\n#endif // BOOST_MPL_REMOVE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/remove_if.hpp",
    "content": "\n#ifndef BOOST_MPL_REMOVE_IF_HPP_INCLUDED\n#define BOOST_MPL_REMOVE_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/reverse_fold.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/protect.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< typename Pred, typename InsertOp > struct remove_if_helper\n{\n    template< typename Sequence, typename U > struct apply\n    {\n        typedef typename eval_if<\n              typename apply1<Pred,U>::type\n            , identity<Sequence>\n            , apply2<InsertOp,Sequence,U>\n            >::type type;\n    };\n};\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename Inserter\n    >\nstruct remove_if_impl\n    : fold<\n          Sequence\n        , typename Inserter::state\n        , protect< aux::remove_if_helper<\n              typename lambda<Predicate>::type\n            , typename Inserter::operation\n            > >\n        >\n{\n};\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename Inserter\n    >\nstruct reverse_remove_if_impl\n    : reverse_fold<\n          Sequence\n        , typename Inserter::state\n        , protect< aux::remove_if_helper<\n              typename lambda<Predicate>::type\n            , typename Inserter::operation\n            > >\n        >\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, remove_if)\n\n}}\n\n#endif // BOOST_MPL_REMOVE_IF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/replace.hpp",
    "content": "\n#ifndef BOOST_MPL_REPLACE_HPP_INCLUDED\n#define BOOST_MPL_REPLACE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright John R. Bandela 2000-2002\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/replace_if.hpp>\n#include <boost/mpl/same_as.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename Sequence\n    , typename OldType\n    , typename NewType\n    , typename Inserter \n    >\nstruct replace_impl\n    : replace_if_impl< Sequence, same_as<OldType>, NewType, Inserter >\n{\n};\n\ntemplate<\n      typename Sequence\n    , typename OldType\n    , typename NewType\n    , typename Inserter \n    >\nstruct reverse_replace_impl\n    : reverse_replace_if_impl< Sequence, same_as<OldType>, NewType, Inserter >\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, replace)\n\n}}\n\n#endif // BOOST_MPL_REPLACE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/replace_if.hpp",
    "content": "\n#ifndef BOOST_MPL_REPLACE_IF_HPP_INCLUDED\n#define BOOST_MPL_REPLACE_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright John R. Bandela 2000-2002\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/transform.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< typename Predicate, typename T >\nstruct replace_if_op\n{\n    template< typename U > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : if_<\n              typename apply1<Predicate,U>::type\n            , T\n            , U\n            >\n    {\n#else\n    {\n        typedef typename if_<\n              typename apply1<Predicate,U>::type\n            , T\n            , U\n            >::type type;\n#endif\n    };\n};\n\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename T\n    , typename Inserter\n    >\nstruct replace_if_impl\n    : transform1_impl<\n          Sequence\n        , protect< aux::replace_if_op<Predicate,T> >\n        , Inserter\n        >\n{\n};\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename T\n    , typename Inserter\n    >\nstruct reverse_replace_if_impl\n    : reverse_transform1_impl<\n          Sequence\n        , protect< aux::replace_if_op<Predicate,T> >\n        , Inserter\n        >\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, replace_if)\n\n}}\n\n#endif // BOOST_MPL_REPLACE_IF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/reverse.hpp",
    "content": "\n#ifndef BOOST_MPL_REVERSE_HPP_INCLUDED\n#define BOOST_MPL_REVERSE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/copy.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Inserter)\n    >\nstruct reverse\n    : reverse_copy<\n          Sequence\n        , Inserter\n        >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, reverse)\n\n}}\n\n#endif // BOOST_MPL_REVERSE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/reverse_fold.hpp",
    "content": "\n#ifndef BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED\n#define BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/O1_size.hpp>\n#include <boost/mpl/arg.hpp>\n#include <boost/mpl/aux_/reverse_fold_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)\n    , typename ForwardOp = arg<1>\n    >\nstruct reverse_fold\n{\n    typedef typename aux::reverse_fold_impl<\n          ::boost::mpl::O1_size<Sequence>::value\n        , typename begin<Sequence>::type\n        , typename end<Sequence>::type\n        , State\n        , BackwardOp\n        , ForwardOp\n        >::state type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,reverse_fold,(Sequence,State,BackwardOp))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, reverse_fold)\n\n}}\n\n#endif // BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/reverse_iter_fold.hpp",
    "content": "\n#ifndef BOOST_MPL_ITER_FOLD_BACKWARD_HPP_INCLUDED\n#define BOOST_MPL_ITER_FOLD_BACKWARD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Dave Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/O1_size.hpp>\n#include <boost/mpl/arg.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/aux_/reverse_iter_fold_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)\n    , typename ForwardOp = arg<1>\n    >\nstruct reverse_iter_fold\n{\n    typedef typename aux::reverse_iter_fold_impl<\n          ::boost::mpl::O1_size<Sequence>::value\n        , typename begin<Sequence>::type\n        , typename end<Sequence>::type\n        , State\n        , typename lambda<BackwardOp>::type\n        , typename lambda<ForwardOp>::type\n        >::state type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , reverse_iter_fold\n        , (Sequence,State,BackwardOp,ForwardOp)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, reverse_iter_fold)\n\n}}\n\n#endif // BOOST_MPL_ITER_FOLD_BACKWARD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/same_as.hpp",
    "content": "\n#ifndef BOOST_MPL_SAME_AS_HPP_INCLUDED\n#define BOOST_MPL_SAME_AS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/aux_/lambda_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T1 >\nstruct same_as\n{\n    template< typename T2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : is_same<T1,T2>\n    {\n#else\n    {\n        typedef typename is_same<T1,T2>::type type;\n#endif\n    };\n};\n\ntemplate< typename T1 >\nstruct not_same_as\n{\n    template< typename T2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : not_< is_same<T1,T2> >\n    {\n#else\n    {\n        typedef typename not_< is_same<T1,T2> >::type type;\n#endif\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SAME_AS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/sequence_tag.hpp",
    "content": "\n#ifndef BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED\n#define BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/sequence_tag_fwd.hpp>\n#include <boost/mpl/aux_/has_tag.hpp>\n#include <boost/mpl/aux_/has_begin.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n// agurt, 27/nov/02: have to use a simplistic 'sequence_tag' implementation\n// on MSVC to avoid dreadful \"internal structure overflow\" error\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) \\\n    || defined(BOOST_MPL_CFG_NO_HAS_XXX)\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct sequence_tag\n{\n    typedef typename Sequence::tag type;\n};\n\n#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n\n// agurt, 07/feb/03: workaround for what seems to be MSVC 7.0-specific ETI issue\n\nnamespace aux {\n\ntemplate< bool >\nstruct sequence_tag_impl\n{\n    template< typename Sequence > struct result_\n    {\n        typedef typename Sequence::tag type;\n    };\n};\n\ntemplate<>\nstruct sequence_tag_impl<false>\n{\n    template< typename Sequence > struct result_\n    {\n        typedef int type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct sequence_tag\n    : aux::sequence_tag_impl< !aux::is_msvc_eti_arg<Sequence>::value >\n        ::template result_<Sequence>\n{\n};\n\n#else\n\nnamespace aux {\n\ntemplate< bool has_tag_, bool has_begin_ >\nstruct sequence_tag_impl\n{\n    // agurt 24/nov/02: MSVC 6.5 gets confused in 'sequence_tag_impl<true>' \n    // specialization below, if we name it 'result_' here\n    template< typename Sequence > struct result2_;\n};\n\n#   define AUX_CLASS_SEQUENCE_TAG_SPEC(has_tag, has_begin, result_type) \\\ntemplate<> struct sequence_tag_impl<has_tag,has_begin> \\\n{ \\\n    template< typename Sequence > struct result2_ \\\n    { \\\n        typedef result_type type; \\\n    }; \\\n}; \\\n/**/\n\nAUX_CLASS_SEQUENCE_TAG_SPEC(true, true, typename Sequence::tag)\nAUX_CLASS_SEQUENCE_TAG_SPEC(true, false, typename Sequence::tag)\nAUX_CLASS_SEQUENCE_TAG_SPEC(false, true, nested_begin_end_tag)\nAUX_CLASS_SEQUENCE_TAG_SPEC(false, false, non_sequence_tag)\n\n#   undef AUX_CLASS_SEQUENCE_TAG_SPEC\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct sequence_tag\n    : aux::sequence_tag_impl<\n          ::boost::mpl::aux::has_tag<Sequence>::value\n        , ::boost::mpl::aux::has_begin<Sequence>::value\n        >::template result2_<Sequence>\n{\n};\n\n#endif // BOOST_MSVC\n\nBOOST_MPL_AUX_NA_SPEC(1, sequence_tag)\n\n}}\n\n#endif // BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/sequence_tag_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED\n#define BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\nstruct nested_begin_end_tag;\nstruct non_sequence_tag;\n\ntemplate< typename Sequence > struct sequence_tag;\n\n}}\n\n#endif // BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/at_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/at_fwd.hpp>\n#include <boost/mpl/set/aux_/has_key_impl.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/void.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct at_impl< aux::set_tag >\n{\n    template< typename Set, typename T > struct apply\n    {\n        typedef typename if_< \n              has_key_impl<aux::set_tag>::apply<Set,T>\n            , T\n            , void_\n            >::type type;            \n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/begin_end_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2007\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end_fwd.hpp>\n#include <boost/mpl/set/aux_/iterator.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct begin_impl< aux::set_tag >\n{\n    template< typename Set > struct apply\n        : s_iter_get<Set,typename Set::item_>\n    {\n    };\n};\n\ntemplate<>\nstruct end_impl< aux::set_tag >\n{\n    template< typename Set > struct apply\n    {\n        typedef s_iter< Set,set0<> > type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/clear_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_CLEAR_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_CLEAR_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/set/aux_/set0.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct clear_impl< aux::set_tag >\n{\n    template< typename Set > struct apply\n    {\n        typedef set0<> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_CLEAR_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/empty_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_EMPTY_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_EMPTY_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/empty_fwd.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct empty_impl< aux::set_tag >\n{\n    template< typename Set > struct apply\n        : not_< typename Set::size >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_EMPTY_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/erase_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_ERASE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_ERASE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/erase_fwd.hpp>\n#include <boost/mpl/set/aux_/erase_key_impl.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct erase_impl< aux::set_tag >\n{\n    template< \n          typename Set\n        , typename Pos\n        , typename unused_\n        > \n    struct apply\n        : erase_key_impl<aux::set_tag>\n            ::apply<Set,typename Pos::type>\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_ERASE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/erase_key_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_ERASE_KEY_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_ERASE_KEY_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2007\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/erase_key_fwd.hpp>\n#include <boost/mpl/set/aux_/has_key_impl.hpp>\n#include <boost/mpl/set/aux_/item.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/base.hpp>\n#include <boost/mpl/eval_if.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct erase_key_impl< aux::set_tag >\n{\n    template< \n          typename Set\n        , typename T\n        > \n    struct apply\n        : eval_if< \n              has_key_impl<aux::set_tag>::apply<Set,T>\n            , eval_if< \n                  is_same< T,typename Set::item_type_ > \n                , base<Set>\n                , identity< s_mask<T,typename Set::item_> >\n                >\n            , identity<Set>\n            >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_ERASE_KEY_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/has_key_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_HAS_KEY_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_HAS_KEY_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/set/aux_/tag.hpp>\n#include <boost/mpl/has_key_fwd.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/overload_names.hpp>\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct has_key_impl< aux::set_tag >\n{\n    template< typename Set, typename T > struct apply\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \\\n    || BOOST_WORKAROUND(__EDG_VERSION__, <= 245)\n    {\n        BOOST_STATIC_CONSTANT(bool, value = \n              ( sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(\n                    Set\n                  , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<T>*, 0)\n                  ) ) == sizeof(aux::no_tag) )\n            );\n\n        typedef bool_<value> type;\n\n#else // ISO98 C++\n        : bool_< \n              ( sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(\n                    Set\n                  , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<T>*, 0)\n                  ) ) == sizeof(aux::no_tag) )\n            >\n    {\n#endif\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_HAS_KEY_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/include_preprocessed.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2001-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_HEADER \\\n    plain/BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#else\n#   define AUX778076_HEADER \\\n    BOOST_PP_CAT(plain,/)##BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#endif\n\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))\n#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/set/aux_/preprocessed/AUX778076_HEADER)\n#   include AUX778076_INCLUDE_STRING\n#   undef AUX778076_INCLUDE_STRING\n#else\n#   include BOOST_PP_STRINGIZE(boost/mpl/set/aux_/preprocessed/AUX778076_HEADER)\n#endif\n\n#   undef AUX778076_HEADER\n\n#undef BOOST_MPL_PREPROCESSED_HEADER\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/insert_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2007\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/insert_fwd.hpp>\n#include <boost/mpl/set/aux_/has_key_impl.hpp>\n#include <boost/mpl/set/aux_/item.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/base.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/aux_/na.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate<  typename Set, typename T > struct set_insert_impl\n    : eval_if< \n          has_key_impl<aux::set_tag>::apply<Set,T>\n        , identity<Set>\n        , eval_if< \n              is_same< T,typename Set::last_masked_ > \n            , base<Set>\n            , identity< s_item<T,typename Set::item_> >\n            >\n        >\n{\n};\n}\n\ntemplate<>\nstruct insert_impl< aux::set_tag >\n{\n    template< \n          typename Set\n        , typename PosOrKey\n        , typename KeyOrNA\n        > \n    struct apply\n        : aux::set_insert_impl<\n              Set\n            , typename if_na<KeyOrNA,PosOrKey>::type\n            >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/insert_range_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED\n\n// Copyright Bruno Dutra 2015\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/insert_range_fwd.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n#include <boost/mpl/placeholders.hpp>\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/insert.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct insert_range_impl< aux::set_tag >\n{\n    template<\n          typename Sequence\n        , typename /*Pos*/\n        , typename Range\n        >\n    struct apply\n        : fold<Range, Sequence, insert<_1, _2> >\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/item.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2007\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/prior.hpp>\n#include <boost/mpl/set/aux_/set0.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/config/arrays.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T, typename Base >\nstruct s_item\n    : Base\n{\n    typedef s_item<T,Base> item_;\n    typedef void_       last_masked_;\n    typedef T           item_type_;\n    typedef typename Base::item_ base;\n    typedef s_item type;\n    \n    typedef typename next< typename Base::size >::type  size;\n    typedef typename next< typename Base::order >::type order;\n\n#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)\n    typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;\n#else\n    typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];\n#endif\n\n    BOOST_MPL_AUX_SET_OVERLOAD( order_tag_, ORDER_BY_KEY, s_item, aux::type_wrapper<T>* );\n    BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_item, aux::type_wrapper<T>* );\n};\n\n\ntemplate< typename T, typename Base >\nstruct s_mask\n    : Base\n{\n    typedef s_mask<T,Base> item_;\n    typedef T       last_masked_;\n    typedef void_   item_type_;\n    typedef typename Base::item_ base;\n    typedef typename prior< typename Base::size >::type  size;\n    typedef s_mask type;\n\n    BOOST_MPL_AUX_SET_OVERLOAD( aux::yes_tag, IS_MASKED, s_mask, aux::type_wrapper<T>* );\n};\n\n\ntemplate< typename T, typename Base >\nstruct s_unmask\n    : Base\n{\n    typedef s_unmask<T,Base> item_;\n    typedef void_   last_masked_;\n    typedef T       item_type_;\n    typedef typename Base::item_ base;\n    typedef typename next< typename Base::size >::type  size;\n\n    BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_unmask, aux::type_wrapper<T>* );\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/iterator.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_ITERATOR_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_ITERATOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2007\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/set/aux_/set0.hpp>\n#include <boost/mpl/has_key.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n// used by 's_iter_get'\ntemplate< typename Set, typename Tail > struct s_iter;\n\ntemplate< typename Set, typename Tail > struct s_iter_get\n    : eval_if< \n          has_key< Set,typename Tail::item_type_ >\n        , identity< s_iter<Set,Tail> >\n        , next< s_iter<Set,Tail> >\n        >\n{\n};\n\ntemplate< typename Set, typename Tail > struct s_iter_impl\n{\n    typedef Tail                        tail_;\n    typedef forward_iterator_tag        category;\n    typedef typename Tail::item_type_   type;\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    typedef typename s_iter_get< Set,typename Tail::base >::type next;\n#endif\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename Set, typename Tail > \nstruct next< s_iter<Set,Tail> >\n    : s_iter_get< Set,typename Tail::base >\n{\n};\n\ntemplate< typename Set > \nstruct next< s_iter<Set,set0<> > >\n{\n    typedef s_iter<Set,set0<> > type;\n};\n\ntemplate< typename Set, typename Tail > struct s_iter\n    : s_iter_impl<Set,Tail>\n{\n};\n\ntemplate< typename Set > struct s_iter<Set, set0<> >\n{\n    typedef forward_iterator_tag category;\n};\n\n#else\n\ntemplate< typename Set >\nstruct s_end_iter\n{\n    typedef forward_iterator_tag    category;\n    typedef s_iter<Set,set0<> >     next;\n};\n\ntemplate< typename Set, typename Tail > struct s_iter\n    : if_< \n          is_same< Tail,set0<> >\n        , s_end_iter<Set>\n        , s_iter_impl<Set,Tail>\n        >::type\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_ITERATOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/key_type_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_KEY_TYPE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_KEY_TYPE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/key_type_fwd.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct key_type_impl< aux::set_tag >\n{\n    template< typename Set, typename T > struct apply\n    {\n        typedef T type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_KEY_TYPE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/numbered.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n#if defined(BOOST_PP_IS_ITERATING)\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/preprocessor/enum_params.hpp>\n#include <boost/preprocessor/dec.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#   define AUX778076_SET_TAIL(set, i_, T) \\\n    typename BOOST_PP_CAT(set,i_)< \\\n          BOOST_PP_ENUM_PARAMS(i_, T) \\\n        >::item_                           \\\n    /**/\n\n#if i_ > 0\ntemplate<\n      BOOST_PP_ENUM_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(set,i_)\n    : s_item<\n          BOOST_PP_CAT(T,BOOST_PP_DEC(i_))\n        , AUX778076_SET_TAIL(set,BOOST_PP_DEC(i_),T)\n        >\n{\n    typedef BOOST_PP_CAT(set,i_) type;\n};\n#endif\n\n#   undef AUX778076_SET_TAIL\n\n#undef i_\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/numbered_c.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n#if defined(BOOST_PP_IS_ITERATING)\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/enum_trailing_params.hpp>\n#include <boost/preprocessor/dec.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#   define AUX778076_SET_C_TAIL(set, i_, T, C) \\\n    BOOST_PP_CAT(BOOST_PP_CAT(set,i_),_c)< \\\n          T BOOST_PP_ENUM_TRAILING_PARAMS(i_, C) \\\n        > \\\n    /**/\n\ntemplate<\n      typename T\n    , BOOST_PP_ENUM_PARAMS(i_, T C)\n    >\nstruct BOOST_PP_CAT(BOOST_PP_CAT(set,i_),_c)\n    : s_item<\n          integral_c<T,BOOST_PP_CAT(C,BOOST_PP_DEC(i_))>\n        , AUX778076_SET_C_TAIL(set,BOOST_PP_DEC(i_), T, C)\n        >\n{\n    typedef BOOST_PP_CAT(BOOST_PP_CAT(set,i_),_c) type;\n};\n\n#   undef AUX778076_SET_C_TAIL\n\n#undef i_\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0\n    >\nstruct set1\n    : s_item<\n          T0\n        , typename set0<  >::item_\n        >\n{\n    typedef set1 type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct set2\n    : s_item<\n          T1\n        , typename set1<T0>::item_\n        >\n{\n    typedef set2 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct set3\n    : s_item<\n          T2\n        , typename set2< T0,T1 >::item_\n        >\n{\n    typedef set3 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct set4\n    : s_item<\n          T3\n        , typename set3< T0,T1,T2 >::item_\n        >\n{\n    typedef set4 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct set5\n    : s_item<\n          T4\n        , typename set4< T0,T1,T2,T3 >::item_\n        >\n{\n    typedef set5 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct set6\n    : s_item<\n          T5\n        , typename set5< T0,T1,T2,T3,T4 >::item_\n        >\n{\n    typedef set6 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct set7\n    : s_item<\n          T6\n        , typename set6< T0,T1,T2,T3,T4,T5 >::item_\n        >\n{\n    typedef set7 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct set8\n    : s_item<\n          T7\n        , typename set7< T0,T1,T2,T3,T4,T5,T6 >::item_\n        >\n{\n    typedef set8 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct set9\n    : s_item<\n          T8\n        , typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::item_\n        >\n{\n    typedef set9 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct set10\n    : s_item<\n          T9\n        , typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::item_\n        >\n{\n    typedef set10 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set10_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0\n    >\nstruct set1_c\n    : s_item<\n          integral_c< T,C0 >\n        , set0_c<T>\n        >\n{\n    typedef set1_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1\n    >\nstruct set2_c\n    : s_item<\n          integral_c< T,C1 >\n        , set1_c< T,C0 >\n        >\n{\n    typedef set2_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2\n    >\nstruct set3_c\n    : s_item<\n          integral_c< T,C2 >\n        , set2_c< T,C0,C1 >\n        >\n{\n    typedef set3_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3\n    >\nstruct set4_c\n    : s_item<\n          integral_c< T,C3 >\n        , set3_c< T,C0,C1,C2 >\n        >\n{\n    typedef set4_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4\n    >\nstruct set5_c\n    : s_item<\n          integral_c< T,C4 >\n        , set4_c< T,C0,C1,C2,C3 >\n        >\n{\n    typedef set5_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5\n    >\nstruct set6_c\n    : s_item<\n          integral_c< T,C5 >\n        , set5_c< T,C0,C1,C2,C3,C4 >\n        >\n{\n    typedef set6_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6\n    >\nstruct set7_c\n    : s_item<\n          integral_c< T,C6 >\n        , set6_c< T,C0,C1,C2,C3,C4,C5 >\n        >\n{\n    typedef set7_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7\n    >\nstruct set8_c\n    : s_item<\n          integral_c< T,C7 >\n        , set7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n        >\n{\n    typedef set8_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8\n    >\nstruct set9_c\n    : s_item<\n          integral_c< T,C8 >\n        , set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n        >\n{\n    typedef set9_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9\n    >\nstruct set10_c\n    : s_item<\n          integral_c< T,C9 >\n        , set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n        >\n{\n    typedef set10_c type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct set11\n    : s_item<\n          T10\n        , typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::item_\n        >\n{\n    typedef set11 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct set12\n    : s_item<\n          T11\n        , typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::item_\n        >\n{\n    typedef set12 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct set13\n    : s_item<\n          T12\n        , typename set12< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10\n        , T11 >::item_\n        >\n{\n    typedef set13 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct set14\n    : s_item<\n          T13\n        , typename set13< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12 >::item_\n        >\n{\n    typedef set14 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct set15\n    : s_item<\n          T14\n        , typename set14< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13 >::item_\n        >\n{\n    typedef set15 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct set16\n    : s_item<\n          T15\n        , typename set15< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14 >::item_\n        >\n{\n    typedef set16 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct set17\n    : s_item<\n          T16\n        , typename set16< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15 >::item_\n        >\n{\n    typedef set17 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct set18\n    : s_item<\n          T17\n        , typename set17< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16 >::item_\n        >\n{\n    typedef set18 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct set19\n    : s_item<\n          T18\n        , typename set18< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17 >::item_\n        >\n{\n    typedef set19 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct set20\n    : s_item<\n          T19\n        , typename set19< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18 >::item_\n        >\n{\n    typedef set20 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set20_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    >\nstruct set11_c\n    : s_item<\n          integral_c< T,C10 >\n        , set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n        >\n{\n    typedef set11_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11\n    >\nstruct set12_c\n    : s_item<\n          integral_c< T,C11 >\n        , set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n        >\n{\n    typedef set12_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12\n    >\nstruct set13_c\n    : s_item<\n          integral_c< T,C12 >\n        , set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n        >\n{\n    typedef set13_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13\n    >\nstruct set14_c\n    : s_item<\n          integral_c< T,C13 >\n        , set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n        >\n{\n    typedef set14_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14\n    >\nstruct set15_c\n    : s_item<\n          integral_c< T,C14 >\n        , set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >\n        >\n{\n    typedef set15_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15\n    >\nstruct set16_c\n    : s_item<\n          integral_c< T,C15 >\n        , set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >\n        >\n{\n    typedef set16_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16\n    >\nstruct set17_c\n    : s_item<\n          integral_c< T,C16 >\n        , set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >\n        >\n{\n    typedef set17_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17\n    >\nstruct set18_c\n    : s_item<\n          integral_c< T,C17 >\n        , set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >\n        >\n{\n    typedef set18_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18\n    >\nstruct set19_c\n    : s_item<\n          integral_c< T,C18 >\n        , set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >\n        >\n{\n    typedef set19_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19\n    >\nstruct set20_c\n    : s_item<\n          integral_c< T,C19 >\n        , set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >\n        >\n{\n    typedef set20_c type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set30.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set30.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20\n    >\nstruct set21\n    : s_item<\n          T20\n        , typename set20< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19 >::item_\n        >\n{\n    typedef set21 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21\n    >\nstruct set22\n    : s_item<\n          T21\n        , typename set21< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20 >::item_\n        >\n{\n    typedef set22 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22\n    >\nstruct set23\n    : s_item<\n          T22\n        , typename set22< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21 >::item_\n        >\n{\n    typedef set23 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23\n    >\nstruct set24\n    : s_item<\n          T23\n        , typename set23< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22 >::item_\n        >\n{\n    typedef set24 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    >\nstruct set25\n    : s_item<\n          T24\n        , typename set24< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23 >::item_\n        >\n{\n    typedef set25 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25\n    >\nstruct set26\n    : s_item<\n          T25\n        , typename set25< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23\n        , T24 >::item_\n        >\n{\n    typedef set26 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26\n    >\nstruct set27\n    : s_item<\n          T26\n        , typename set26< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24\n        , T25 >::item_\n        >\n{\n    typedef set27 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27\n    >\nstruct set28\n    : s_item<\n          T27\n        , typename set27< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26 >::item_\n        >\n{\n    typedef set28 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28\n    >\nstruct set29\n    : s_item<\n          T28\n        , typename set28< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27 >::item_\n        >\n{\n    typedef set29 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    >\nstruct set30\n    : s_item<\n          T29\n        , typename set29< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28 >::item_\n        >\n{\n    typedef set30 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set30_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    >\nstruct set21_c\n    : s_item<\n          integral_c< T,C20 >\n        , set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >\n        >\n{\n    typedef set21_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21\n    >\nstruct set22_c\n    : s_item<\n          integral_c< T,C21 >\n        , set21_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 >\n        >\n{\n    typedef set22_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22\n    >\nstruct set23_c\n    : s_item<\n          integral_c< T,C22 >\n        , set22_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 >\n        >\n{\n    typedef set23_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23\n    >\nstruct set24_c\n    : s_item<\n          integral_c< T,C23 >\n        , set23_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 >\n        >\n{\n    typedef set24_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24\n    >\nstruct set25_c\n    : s_item<\n          integral_c< T,C24 >\n        , set24_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 >\n        >\n{\n    typedef set25_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25\n    >\nstruct set26_c\n    : s_item<\n          integral_c< T,C25 >\n        , set25_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24 >\n        >\n{\n    typedef set26_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26\n    >\nstruct set27_c\n    : s_item<\n          integral_c< T,C26 >\n        , set26_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25 >\n        >\n{\n    typedef set27_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27\n    >\nstruct set28_c\n    : s_item<\n          integral_c< T,C27 >\n        , set27_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26 >\n        >\n{\n    typedef set28_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28\n    >\nstruct set29_c\n    : s_item<\n          integral_c< T,C28 >\n        , set28_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27 >\n        >\n{\n    typedef set29_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29\n    >\nstruct set30_c\n    : s_item<\n          integral_c< T,C29 >\n        , set29_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28 >\n        >\n{\n    typedef set30_c type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set40.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set40.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30\n    >\nstruct set31\n    : s_item<\n          T30\n        , typename set30< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29 >::item_\n        >\n{\n    typedef set31 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31\n    >\nstruct set32\n    : s_item<\n          T31\n        , typename set31< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30 >::item_\n        >\n{\n    typedef set32 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32\n    >\nstruct set33\n    : s_item<\n          T32\n        , typename set32< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31 >::item_\n        >\n{\n    typedef set33 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33\n    >\nstruct set34\n    : s_item<\n          T33\n        , typename set33< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32 >::item_\n        >\n{\n    typedef set34 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    >\nstruct set35\n    : s_item<\n          T34\n        , typename set34< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33 >::item_\n        >\n{\n    typedef set35 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35\n    >\nstruct set36\n    : s_item<\n          T35\n        , typename set35< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34 >::item_\n        >\n{\n    typedef set36 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36\n    >\nstruct set37\n    : s_item<\n          T36\n        , typename set36< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35 >::item_\n        >\n{\n    typedef set37 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37\n    >\nstruct set38\n    : s_item<\n          T37\n        , typename set37< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36 >::item_\n        >\n{\n    typedef set38 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38\n    >\nstruct set39\n    : s_item<\n          T38\n        , typename set38< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37 >::item_\n        >\n{\n    typedef set39 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    >\nstruct set40\n    : s_item<\n          T39\n        , typename set39< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37\n        , T38 >::item_\n        >\n{\n    typedef set40 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set40_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    >\nstruct set31_c\n    : s_item<\n          integral_c< T,C30 >\n        , set30_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29 >\n        >\n{\n    typedef set31_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31\n    >\nstruct set32_c\n    : s_item<\n          integral_c< T,C31 >\n        , set31_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30 >\n        >\n{\n    typedef set32_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32\n    >\nstruct set33_c\n    : s_item<\n          integral_c< T,C32 >\n        , set32_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31 >\n        >\n{\n    typedef set33_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33\n    >\nstruct set34_c\n    : s_item<\n          integral_c< T,C33 >\n        , set33_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32 >\n        >\n{\n    typedef set34_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34\n    >\nstruct set35_c\n    : s_item<\n          integral_c< T,C34 >\n        , set34_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33 >\n        >\n{\n    typedef set35_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35\n    >\nstruct set36_c\n    : s_item<\n          integral_c< T,C35 >\n        , set35_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34 >\n        >\n{\n    typedef set36_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36\n    >\nstruct set37_c\n    : s_item<\n          integral_c< T,C36 >\n        , set36_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35 >\n        >\n{\n    typedef set37_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37\n    >\nstruct set38_c\n    : s_item<\n          integral_c< T,C37 >\n        , set37_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36 >\n        >\n{\n    typedef set38_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38\n    >\nstruct set39_c\n    : s_item<\n          integral_c< T,C38 >\n        , set38_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37 >\n        >\n{\n    typedef set39_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39\n    >\nstruct set40_c\n    : s_item<\n          integral_c< T,C39 >\n        , set39_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38 >\n        >\n{\n    typedef set40_c type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set50.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set50.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40\n    >\nstruct set41\n    : s_item<\n          T40\n        , typename set40< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38\n        , T39 >::item_\n        >\n{\n    typedef set41 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41\n    >\nstruct set42\n    : s_item<\n          T41\n        , typename set41< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39\n        , T40 >::item_\n        >\n{\n    typedef set42 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42\n    >\nstruct set43\n    : s_item<\n          T42\n        , typename set42< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39\n        , T40, T41 >::item_\n        >\n{\n    typedef set43 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43\n    >\nstruct set44\n    : s_item<\n          T43\n        , typename set43< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39\n        , T40, T41, T42 >::item_\n        >\n{\n    typedef set44 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    >\nstruct set45\n    : s_item<\n          T44\n        , typename set44< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39\n        , T40, T41, T42, T43 >::item_\n        >\n{\n    typedef set45 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45\n    >\nstruct set46\n    : s_item<\n          T45\n        , typename set45< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39\n        , T40, T41, T42, T43, T44 >::item_\n        >\n{\n    typedef set46 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46\n    >\nstruct set47\n    : s_item<\n          T46\n        , typename set46< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39\n        , T40, T41, T42, T43, T44, T45 >::item_\n        >\n{\n    typedef set47 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47\n    >\nstruct set48\n    : s_item<\n          T47\n        , typename set47< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39\n        , T40, T41, T42, T43, T44, T45, T46 >::item_\n        >\n{\n    typedef set48 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48\n    >\nstruct set49\n    : s_item<\n          T48\n        , typename set48< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39\n        , T40, T41, T42, T43, T44, T45, T46, T47 >::item_\n        >\n{\n    typedef set49 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48, typename T49\n    >\nstruct set50\n    : s_item<\n          T49\n        , typename set49< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11\n        , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25\n        , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39\n        , T40, T41, T42, T43, T44, T45, T46, T47, T48 >::item_\n        >\n{\n    typedef set50 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/set/set50_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    >\nstruct set41_c\n    : s_item<\n          integral_c< T,C40 >\n        , set40_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39 >\n        >\n{\n    typedef set41_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41\n    >\nstruct set42_c\n    : s_item<\n          integral_c< T,C41 >\n        , set41_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40 >\n        >\n{\n    typedef set42_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42\n    >\nstruct set43_c\n    : s_item<\n          integral_c< T,C42 >\n        , set42_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41 >\n        >\n{\n    typedef set43_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43\n    >\nstruct set44_c\n    : s_item<\n          integral_c< T,C43 >\n        , set43_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42 >\n        >\n{\n    typedef set44_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44\n    >\nstruct set45_c\n    : s_item<\n          integral_c< T,C44 >\n        , set44_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43 >\n        >\n{\n    typedef set45_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45\n    >\nstruct set46_c\n    : s_item<\n          integral_c< T,C45 >\n        , set45_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44 >\n        >\n{\n    typedef set46_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46\n    >\nstruct set47_c\n    : s_item<\n          integral_c< T,C46 >\n        , set46_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45 >\n        >\n{\n    typedef set47_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47\n    >\nstruct set48_c\n    : s_item<\n          integral_c< T,C47 >\n        , set47_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46 >\n        >\n{\n    typedef set48_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48\n    >\nstruct set49_c\n    : s_item<\n          integral_c< T,C48 >\n        , set48_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47 >\n        >\n{\n    typedef set49_c type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49\n    >\nstruct set50_c\n    : s_item<\n          integral_c< T,C49 >\n        , set49_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48 >\n        >\n{\n    typedef set50_c type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/set0.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_SET0_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_SET0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/overload_names.hpp>\n#include <boost/mpl/aux_/config/operators.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)\n\n#   define BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T) \\\n    friend R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \\\n/**/\n\n#   define BOOST_MPL_AUX_SET_OVERLOAD(R, f, X, T) \\\n    BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T) \\\n/**/\n\n#else\n\n#   define BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T) \\\n    static R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \\\n/**/\n\n#   define BOOST_MPL_AUX_SET_OVERLOAD(R, f, X, T) \\\n    BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T); \\\n    using Base::BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f) \\\n/**/\n\n#endif\n\ntemplate< typename Dummy = na > struct set0\n{\n    typedef set0<>          item_;\n    typedef item_           type;\n    typedef aux::set_tag    tag;\n    typedef void_           last_masked_;\n    typedef void_           item_type_;\n    typedef long_<0>        size;\n    typedef long_<1>        order;\n\n    BOOST_MPL_AUX_SET0_OVERLOAD( aux::no_tag, ORDER_BY_KEY, set0<>, void const volatile* );\n    BOOST_MPL_AUX_SET0_OVERLOAD( aux::yes_tag, IS_MASKED, set0<>, void const volatile* );\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_SET0_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/size_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_SIZE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_SIZE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct size_impl< aux::set_tag >\n{\n    template< typename Set > struct apply\n        : Set::size\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_SIZE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_TAG_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct set_tag;\n\n}}}\n\n#endif // BOOST_MPL_SET_AUX_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/aux_/value_type_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_SET_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/value_type_fwd.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct value_type_impl< aux::set_tag >\n{\n    template< typename Set, typename T > struct apply\n    {\n        typedef T type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SET_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set0.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET0_HPP_INCLUDED\n#define BOOST_MPL_SET_SET0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/set/aux_/at_impl.hpp>\n#include <boost/mpl/set/aux_/clear_impl.hpp>\n//#include <boost/mpl/set/aux_/O1_size.hpp>\n#include <boost/mpl/set/aux_/size_impl.hpp>\n#include <boost/mpl/set/aux_/empty_impl.hpp>\n#include <boost/mpl/set/aux_/insert_impl.hpp>\n#include <boost/mpl/set/aux_/insert_range_impl.hpp>\n#include <boost/mpl/set/aux_/erase_impl.hpp>\n#include <boost/mpl/set/aux_/erase_key_impl.hpp>\n#include <boost/mpl/set/aux_/has_key_impl.hpp>\n#include <boost/mpl/set/aux_/key_type_impl.hpp>\n#include <boost/mpl/set/aux_/value_type_impl.hpp>\n#include <boost/mpl/set/aux_/begin_end_impl.hpp>\n#include <boost/mpl/set/aux_/iterator.hpp>\n#include <boost/mpl/set/aux_/item.hpp>\n#include <boost/mpl/set/aux_/set0.hpp>\n#include <boost/mpl/set/aux_/tag.hpp>\n\n#endif // BOOST_MPL_SET_SET0_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set0_c.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET0_C_HPP_INCLUDED\n#define BOOST_MPL_SET_SET0_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/set/set0.hpp>\n#include <boost/mpl/integral_c.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T > struct set0_c\n    : set0<>\n{\n    typedef set0_c type;\n    typedef T value_type;\n};\n\n}}\n\n#endif // BOOST_MPL_SET_SET0_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set10.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET10_HPP_INCLUDED\n#define BOOST_MPL_SET_SET10_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set0.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set10.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, 10, <boost/mpl/set/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET10_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set10_c.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET10_C_HPP_INCLUDED\n#define BOOST_MPL_SET_SET10_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set0_c.hpp>\n#   include <boost/mpl/set/set10.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set10_c.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, 10, <boost/mpl/set/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET10_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set20.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET20_HPP_INCLUDED\n#define BOOST_MPL_SET_SET20_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set10.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set20.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(11, 20, <boost/mpl/set/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET20_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set20_c.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET20_C_HPP_INCLUDED\n#define BOOST_MPL_SET_SET20_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set10_c.hpp>\n#   include <boost/mpl/set/set20.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set20_c.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(11, 20, <boost/mpl/set/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET20_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set30.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET30_HPP_INCLUDED\n#define BOOST_MPL_SET_SET30_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set20.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set30.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(21, 30, <boost/mpl/set/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET30_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set30_c.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET30_C_HPP_INCLUDED\n#define BOOST_MPL_SET_SET30_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set20_c.hpp>\n#   include <boost/mpl/set/set30.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set30_c.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(21, 30, <boost/mpl/set/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET30_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set40.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET40_HPP_INCLUDED\n#define BOOST_MPL_SET_SET40_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set30.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set40.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(31, 40, <boost/mpl/set/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET40_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set40_c.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET40_C_HPP_INCLUDED\n#define BOOST_MPL_SET_SET40_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set30_c.hpp>\n#   include <boost/mpl/set/set40.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set40_c.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(31, 40, <boost/mpl/set/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET40_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set50.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET50_HPP_INCLUDED\n#define BOOST_MPL_SET_SET50_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set40.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set50.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(41, 50, <boost/mpl/set/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET50_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set/set50_c.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_SET50_C_HPP_INCLUDED\n#define BOOST_MPL_SET_SET50_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/set/set40_c.hpp>\n#   include <boost/mpl/set/set50.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set50_c.hpp\n#   include <boost/mpl/set/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(41, 50, <boost/mpl/set/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_SET_SET50_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_HPP_INCLUDED\n#define BOOST_MPL_SET_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/set.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_SET_HEADER \\\n    BOOST_PP_CAT(set, BOOST_MPL_LIMIT_SET_SIZE).hpp \\\n    /**/\n#else\n#   define AUX778076_SET_HEADER \\\n    BOOST_PP_CAT(set, BOOST_MPL_LIMIT_SET_SIZE)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/set/AUX778076_SET_HEADER)\n#   undef AUX778076_SET_HEADER\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/set.hpp>\n\n#   define AUX778076_SEQUENCE_NAME set\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_SET_SIZE\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_SET_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/set_c.hpp",
    "content": "\n#ifndef BOOST_MPL_SET_C_HPP_INCLUDED\n#define BOOST_MPL_SET_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/set.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_SET_C_HEADER \\\n    BOOST_PP_CAT(BOOST_PP_CAT(set,BOOST_MPL_LIMIT_SET_SIZE),_c).hpp \\\n    /**/\n#else\n#   define AUX778076_SET_C_HEADER \\\n    BOOST_PP_CAT(BOOST_PP_CAT(set,BOOST_MPL_LIMIT_SET_SIZE),_c)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/set/AUX778076_SET_C_HEADER)\n#   undef AUX778076_SET_C_HEADER\n#   include <climits>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER set_c.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/set.hpp>\n\n#   define AUX778076_SEQUENCE_NAME set_c\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_SET_SIZE\n#   define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(set,n),_c)\n#   define AUX778076_SEQUENCE_INTEGRAL_WRAPPER\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_SET_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/shift_left.hpp",
    "content": "\n#ifndef BOOST_MPL_SHIFT_LEFT_HPP_INCLUDED\n#define BOOST_MPL_SHIFT_LEFT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME shift_left\n#define AUX778076_OP_TOKEN <<\n#include <boost/mpl/aux_/shift_op.hpp>\n\n#endif // BOOST_MPL_SHIFT_LEFT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/shift_right.hpp",
    "content": "\n#ifndef BOOST_MPL_SHIFT_RIGHT_HPP_INCLUDED\n#define BOOST_MPL_SHIFT_RIGHT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Jaap Suter 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME shift_right\n#define AUX778076_OP_TOKEN >>\n#include <boost/mpl/aux_/shift_op.hpp>\n\n#endif // BOOST_MPL_SHIFT_RIGHT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/single_view.hpp",
    "content": "\n#ifndef BOOST_MPL_SINGLE_VIEW_HPP_INCLUDED\n#define BOOST_MPL_SINGLE_VIEW_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/single_element_iter.hpp>\n#include <boost/mpl/iterator_range.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct single_view\n    : iterator_range<\n          aux::sel_iter<T,0>\n        , aux::sel_iter<T,1>\n        >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(1, single_view)\n\n}}\n\n#endif // BOOST_MPL_SINGLE_VIEW_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/size.hpp",
    "content": "\n#ifndef BOOST_MPL_SIZE_HPP_INCLUDED\n#define BOOST_MPL_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/size_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct size\n    : aux::msvc_eti_base<\n        typename size_impl< typename sequence_tag<Sequence>::type >\n            ::template apply< Sequence >::type\n      >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, size, (Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, size)\n\n}}\n\n#endif // BOOST_MPL_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/size_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_SIZE_FWD_HPP_INCLUDED\n#define BOOST_MPL_SIZE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct size_impl;\ntemplate< typename Sequence > struct size;\n\n}}\n\n#endif // BOOST_MPL_SIZE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/size_t.hpp",
    "content": "\n#ifndef BOOST_MPL_SIZE_T_HPP_INCLUDED\n#define BOOST_MPL_SIZE_T_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_t_fwd.hpp>\n\n#define AUX_WRAPPER_VALUE_TYPE std::size_t\n#define AUX_WRAPPER_NAME size_t\n#define AUX_WRAPPER_PARAMS(N) std::size_t N\n\n#include <boost/mpl/aux_/integral_wrapper.hpp>\n\n#endif // BOOST_MPL_SIZE_T_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/size_t_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED\n#define BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'\n#include <cstddef>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< std::size_t N > struct size_t;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(size_t)\n\n#endif // BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/sizeof.hpp",
    "content": "\n#ifndef BOOST_MPL_SIZEOF_HPP_INCLUDED\n#define BOOST_MPL_SIZEOF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_t.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct sizeof_\n    : mpl::size_t< sizeof(T) >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,sizeof_,(T))\n};\n\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(1, sizeof_)\n\n}}\n\n#endif // BOOST_MPL_SIZEOF_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/sort.hpp",
    "content": "\n#ifndef BOOST_MPL_SORT_HPP_INCLUDED\n#define BOOST_MPL_SORT_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002-2003\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/sort_impl.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, sort)\n\n}}\n\n#endif // BOOST_MPL_SORT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/stable_partition.hpp",
    "content": "\n#ifndef BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED\n#define BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002-2003\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/reverse_fold.hpp>\n#include <boost/mpl/protect.hpp>\n#include <boost/mpl/aux_/partition_op.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n#include <boost/mpl/aux_/na.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n \ntemplate <\n      typename Sequence\n    , typename Pred\n    , typename In\n    , typename In2\n    , typename In1 = typename if_na<In,In2>::type\n    >\nstruct stable_partition_impl\n    : fold<\n          Sequence\n        , pair< typename In1::state, typename In2::state >\n        , protect< partition_op< \n              Pred\n            , typename In1::operation\n            , typename In2::operation\n            > >\n        >\n{\n};\n\ntemplate <\n      typename Sequence\n    , typename Pred\n    , typename In\n    , typename In2\n    , typename In1 = typename if_na<In,In2>::type\n    >\nstruct reverse_stable_partition_impl\n    : reverse_fold<\n          Sequence\n        , pair< typename In1::state, typename In2::state >\n        , protect< partition_op< \n              Pred\n            , typename In1::operation\n            , typename In2::operation\n            > >\n        >\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, stable_partition)\n\n}}\n\n#endif // BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/string.hpp",
    "content": "\n#ifndef BOOST_MPL_STRING_HPP_INCLUDED\n#define BOOST_MPL_STRING_HPP_INCLUDED\n\n// Copyright Eric Niebler 2009\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: string.hpp 49239 2009-04-01 09:10:26Z eric_niebler $\n// $Date: 2009-04-01 02:10:26 -0700 (Wed, 1 Apr 2009) $\n// $Revision: 49239 $\n//\n// Thanks to:\n//   Dmitry Goncharov for porting this to the Sun compiler\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/predef/other/endian.h>\n#include <boost/mpl/limits/string.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/char.hpp>\n#include <boost/mpl/copy.hpp>\n#include <boost/mpl/size.hpp>\n#include <boost/mpl/empty.hpp>\n#include <boost/mpl/assert.hpp>\n#include <boost/mpl/size_t.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/joint_view.hpp>\n#include <boost/mpl/insert_range.hpp>\n#include <boost/mpl/back_inserter.hpp>\n#include <boost/mpl/front_inserter.hpp>\n#include <boost/mpl/iterator_range.hpp>\n#include <boost/preprocessor/arithmetic/dec.hpp>\n#include <boost/preprocessor/arithmetic/add.hpp>\n#include <boost/preprocessor/arithmetic/div.hpp>\n#include <boost/preprocessor/punctuation/comma_if.hpp>\n#include <boost/preprocessor/repetition/repeat.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/repeat_from_to.hpp>\n#include <boost/preprocessor/repetition/enum_shifted_params.hpp>\n#include <boost/preprocessor/repetition/enum_trailing_params.hpp>\n#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>\n\n#include <iterator> // for bidirectional_iterator_tag\n#include <climits>\n\nnamespace boost { namespace mpl\n{\n    #define BOOST_MPL_STRING_MAX_PARAMS                                                             \\\n      BOOST_PP_DIV(BOOST_PP_ADD(BOOST_MPL_LIMIT_STRING_SIZE, 3), 4)\n\n    // Low-level bit-twiddling is done by macros. Any implementation-defined behavior of\n    // multi-character literals should be localized to these macros.\n\n    #define BOOST_MPL_MULTICHAR_LENGTH(c)                                                           \\\n      (std::size_t)((c<CHAR_MIN) ? 4 : ((c>0xffffff)+(c>0xffff)+(c>0xff)+1))\n\n    #if BOOST_ENDIAN_LITTLE_BYTE && defined(__SUNPRO_CC)\n\n        #define BOOST_MPL_MULTICHAR_AT(c,i)                                                         \\\n          (char)(0xff&((unsigned)(c)>>(8*(std::size_t)(i))))\n\n        #define BOOST_MPL_MULTICHAR_PUSH_BACK(c,i)                                                  \\\n          ((((unsigned char)(i))<<(BOOST_MPL_MULTICHAR_LENGTH(c)*8))|(unsigned)(c))\n\n        #define BOOST_MPL_MULTICHAR_PUSH_FRONT(c,i)                                                 \\\n          (((unsigned)(c)<<8)|(unsigned char)(i))\n\n        #define BOOST_MPL_MULTICHAR_POP_BACK(c)                                                     \\\n          (((1<<((BOOST_MPL_MULTICHAR_LENGTH(c)-1)*8))-1)&(unsigned)(c))\n\n        #define BOOST_MPL_MULTICHAR_POP_FRONT(c)                                                    \\\n          ((unsigned)(c)>>8)\n\n    #else\n\n        #define BOOST_MPL_MULTICHAR_AT(c,i)                                                         \\\n          (char)(0xff&((unsigned)(c)>>(8*(BOOST_MPL_MULTICHAR_LENGTH(c)-(std::size_t)(i)-1))))\n\n        #define BOOST_MPL_MULTICHAR_PUSH_BACK(c,i)                                                  \\\n          (((unsigned)(c)<<8)|(unsigned char)(i))\n\n        #define BOOST_MPL_MULTICHAR_PUSH_FRONT(c,i)                                                 \\\n          ((((unsigned char)(i))<<(BOOST_MPL_MULTICHAR_LENGTH(c)*8))|(unsigned)(c))\n\n        #define BOOST_MPL_MULTICHAR_POP_BACK(c)                                                     \\\n          ((unsigned)(c)>>8)\n\n        #define BOOST_MPL_MULTICHAR_POP_FRONT(c)                                                    \\\n          (((1<<((BOOST_MPL_MULTICHAR_LENGTH(c)-1)*8))-1)&(unsigned)(c))\n\n    #endif\n\n    struct string_tag;\n    struct string_iterator_tag;\n\n    template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_MPL_STRING_MAX_PARAMS, int C, 0)>\n    struct string;\n\n    template<typename Sequence, int I, int J>\n    struct string_iterator;\n\n    template<typename Sequence>\n    struct sequence_tag;\n\n    template<typename Tag>\n    struct size_impl;\n\n    template<>\n    struct size_impl<mpl::string_tag>\n    {\n        template<typename Sequence>\n        struct apply;\n\n        #define M0(z, n, data)                                                                      \\\n        + BOOST_MPL_MULTICHAR_LENGTH(BOOST_PP_CAT(C,n))\n\n        #define M1(z, n, data)                                                                      \\\n        template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C)>                                               \\\n        struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)> >                                 \\\n          : mpl::size_t<(0 BOOST_PP_REPEAT_ ## z(n, M0, ~))>                                        \\\n        {};\n\n        BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_MPL_STRING_MAX_PARAMS), M1, ~)\n        #undef M0\n        #undef M1\n    };\n\n    template<>\n    struct size_impl<mpl::string_tag>::apply<mpl::string<> >\n      : mpl::size_t<0>\n    {};\n\n    template<typename Tag>\n    struct begin_impl;\n\n    template<>\n    struct begin_impl<mpl::string_tag>\n    {\n        template<typename Sequence>\n        struct apply\n        {\n            typedef mpl::string_iterator<Sequence, 0, 0> type;\n        };\n    };\n\n    template<typename Tag>\n    struct end_impl;\n\n    template<>\n    struct end_impl<mpl::string_tag>\n    {\n        template<typename Sequence>\n        struct apply;\n\n        #define M0(z,n,data)                                                                        \\\n        template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C)>                                               \\\n        struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)> >                                 \\\n        {                                                                                           \\\n            typedef mpl::string_iterator<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)>, n, 0> type;  \\\n        };\n\n        BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_MPL_STRING_MAX_PARAMS), M0, ~)\n        #undef M0\n    };\n\n    template<>\n    struct end_impl<mpl::string_tag>::apply<mpl::string<> >\n    {\n        typedef mpl::string_iterator<mpl::string<>, 0, 0> type;\n    };\n\n    template<typename Tag>\n    struct push_back_impl;\n\n    template<>\n    struct push_back_impl<mpl::string_tag>\n    {\n        template<typename Sequence, typename Value, bool B = (4==BOOST_MPL_MULTICHAR_LENGTH(Sequence::back_))>\n        struct apply\n        {\n            BOOST_MPL_ASSERT_MSG(\n                (BOOST_MPL_LIMIT_STRING_SIZE != mpl::size<Sequence>::type::value)\n              , PUSH_BACK_FAILED_MPL_STRING_IS_FULL\n              , (Sequence)\n            );\n            // If the above assertion didn't fire, then the string is sparse.\n            // Repack the string and retry the push_back\n            typedef\n                typename mpl::push_back<\n                    typename mpl::copy<\n                        Sequence\n                      , mpl::back_inserter<mpl::string<> >\n                    >::type\n                  , Value\n                >::type\n            type;\n        };\n\n        template<typename Value>\n        struct apply<mpl::string<>, Value, false>\n        {\n            typedef mpl::string<(char)Value::value> type;\n        };\n\n        #define M0(z,n,data)                                                                        \\\n        template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C), typename Value>                               \\\n        struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)>, Value, false>                    \\\n        {                                                                                           \\\n            typedef                                                                                 \\\n                mpl::string<                                                                        \\\n                    BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), C)                                   \\\n                    BOOST_PP_COMMA_IF(BOOST_PP_DEC(n))                                              \\\n                    ((unsigned)BOOST_PP_CAT(C,BOOST_PP_DEC(n))>0xffffff)                            \\\n                    ?BOOST_PP_CAT(C,BOOST_PP_DEC(n))                                                \\\n                    :BOOST_MPL_MULTICHAR_PUSH_BACK(BOOST_PP_CAT(C,BOOST_PP_DEC(n)), Value::value)   \\\n                  , ((unsigned)BOOST_PP_CAT(C,BOOST_PP_DEC(n))>0xffffff)                            \\\n                    ?(char)Value::value                                                             \\\n                    :0                                                                              \\\n                >                                                                                   \\\n            type;                                                                                   \\\n        };\n\n        BOOST_PP_REPEAT_FROM_TO(1, BOOST_MPL_STRING_MAX_PARAMS, M0, ~)\n        #undef M0\n\n        template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C), typename Value>\n        struct apply<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)>, Value, false>\n        {\n            typedef\n                mpl::string<\n                    BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(BOOST_MPL_STRING_MAX_PARAMS), C)\n                  , BOOST_MPL_MULTICHAR_PUSH_BACK(BOOST_PP_CAT(C,BOOST_PP_DEC(BOOST_MPL_STRING_MAX_PARAMS)), Value::value)\n                >\n            type;\n        };\n    };\n\n    template<typename Tag>\n    struct has_push_back_impl;\n\n    template<>\n    struct has_push_back_impl<mpl::string_tag>\n    {\n        template<typename Sequence>\n        struct apply\n          : mpl::true_\n        {};\n    };\n\n    template<typename Tag>\n    struct pop_back_impl;\n\n    template<>\n    struct pop_back_impl<mpl::string_tag>\n    {\n        template<typename Sequence>\n        struct apply;\n\n        #define M0(z,n,data)                                                                        \\\n        template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C)>                                               \\\n        struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)> >                                 \\\n        {                                                                                           \\\n            BOOST_MPL_ASSERT_MSG((C0 != 0), POP_BACK_FAILED_MPL_STRING_IS_EMPTY, (mpl::string<>));  \\\n            typedef                                                                                 \\\n                mpl::string<                                                                        \\\n                    BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), C)                                   \\\n                    BOOST_PP_COMMA_IF(BOOST_PP_DEC(n))                                              \\\n                    BOOST_MPL_MULTICHAR_POP_BACK(BOOST_PP_CAT(C,BOOST_PP_DEC(n)))                   \\\n                >                                                                                   \\\n            type;                                                                                   \\\n        };\n\n        BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_MPL_STRING_MAX_PARAMS), M0, ~)\n        #undef M0\n    };\n\n    template<typename Tag>\n    struct has_pop_back_impl;\n\n    template<>\n    struct has_pop_back_impl<mpl::string_tag>\n    {\n        template<typename Sequence>\n        struct apply\n          : mpl::true_\n        {};\n    };\n\n    template<typename Tag>\n    struct push_front_impl;\n\n    template<>\n    struct push_front_impl<mpl::string_tag>\n    {\n        template<typename Sequence, typename Value, bool B = (4==BOOST_MPL_MULTICHAR_LENGTH(Sequence::front_))>\n        struct apply\n        {\n            BOOST_MPL_ASSERT_MSG(\n                (BOOST_MPL_LIMIT_STRING_SIZE != mpl::size<Sequence>::type::value)\n              , PUSH_FRONT_FAILED_MPL_STRING_IS_FULL\n              , (Sequence)\n            );\n            // If the above assertion didn't fire, then the string is sparse.\n            // Repack the string and retry the push_front.\n            typedef\n                typename mpl::push_front<\n                    typename mpl::reverse_copy<\n                        Sequence\n                      , mpl::front_inserter<string<> >\n                    >::type\n                  , Value\n                >::type\n            type;\n        };\n\n        #if !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))\n        template<typename Value>\n        struct apply<mpl::string<>, Value, false>\n        {\n            typedef mpl::string<(char)Value::value> type;\n        };\n        #endif\n\n        #define M0(z,n,data)                                                                        \\\n        template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C), typename Value>                               \\\n        struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)>, Value, true>                     \\\n        {                                                                                           \\\n            typedef                                                                                 \\\n                mpl::string<                                                                        \\\n                    (char)Value::value                                                              \\\n                    BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, C)                                        \\\n                >                                                                                   \\\n            type;                                                                                   \\\n        };\n\n        BOOST_PP_REPEAT_FROM_TO(1, BOOST_MPL_STRING_MAX_PARAMS, M0, ~)\n        #undef M0\n\n        template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C), typename Value>\n        struct apply<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)>, Value, false>\n        {\n            typedef\n                mpl::string<\n                    BOOST_MPL_MULTICHAR_PUSH_FRONT(C0, Value::value)\n                  , BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)\n                >\n            type0;\n\n            #if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))\n            typedef\n                typename mpl::if_<\n                    mpl::empty<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)> >\n                  , mpl::string<(char)Value::value>\n                  , type0\n                >::type\n            type;\n            #else\n            typedef type0 type;\n            #endif\n        };\n    };\n\n    template<typename Tag>\n    struct has_push_front_impl;\n\n    template<>\n    struct has_push_front_impl<mpl::string_tag>\n    {\n        template<typename Sequence>\n        struct apply\n          : mpl::true_\n        {};\n    };\n\n    template<typename Tag>\n    struct pop_front_impl;\n\n    template<>\n    struct pop_front_impl<mpl::string_tag>\n    {\n        template<typename Sequence, bool B = (1==BOOST_MPL_MULTICHAR_LENGTH(Sequence::front_))>\n        struct apply;\n\n        #define M0(z,n,data)                                                                        \\\n        template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C)>                                               \\\n        struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)>, true>                            \\\n        {                                                                                           \\\n            BOOST_MPL_ASSERT_MSG((C0 != 0), POP_FRONT_FAILED_MPL_STRING_IS_EMPTY, (mpl::string<>)); \\\n            typedef                                                                                 \\\n                mpl::string<BOOST_PP_ENUM_SHIFTED_PARAMS_Z(z, n, C)>                                \\\n            type;                                                                                   \\\n        };\n\n        BOOST_PP_REPEAT_FROM_TO(1, BOOST_MPL_STRING_MAX_PARAMS, M0, ~)\n        #undef M0\n\n        template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C)>\n        struct apply<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)>, false>\n        {\n            typedef\n                mpl::string<\n                    BOOST_MPL_MULTICHAR_POP_FRONT(C0)\n                  , BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)\n                >\n            type;\n        };\n    };\n\n    template<typename Tag>\n    struct has_pop_front_impl;\n\n    template<>\n    struct has_pop_front_impl<mpl::string_tag>\n    {\n        template<typename Sequence>\n        struct apply\n          : mpl::true_\n        {};\n    };\n\n    template<typename Tag>\n    struct insert_range_impl;\n\n    template<>\n    struct insert_range_impl<mpl::string_tag>\n    {\n        template<typename Sequence, typename Pos, typename Range>\n        struct apply\n          : mpl::copy<\n                mpl::joint_view<\n                    mpl::iterator_range<\n                        mpl::string_iterator<Sequence, 0, 0>\n                      , Pos\n                    >\n                  , mpl::joint_view<\n                        Range\n                      , mpl::iterator_range<\n                            Pos\n                          , typename mpl::end<Sequence>::type\n                        >\n                    >\n                >\n              , mpl::back_inserter<mpl::string<> >\n            >\n        {};\n    };\n\n    template<typename Tag>\n    struct insert_impl;\n\n    template<>\n    struct insert_impl<mpl::string_tag>\n    {\n        template<typename Sequence, typename Pos, typename Value>\n        struct apply\n          : mpl::insert_range<Sequence, Pos, mpl::string<(char)Value::value> >\n        {};\n    };\n\n    template<typename Tag>\n    struct erase_impl;\n\n    template<>\n    struct erase_impl<mpl::string_tag>\n    {\n        template<typename Sequence, typename First, typename Last>\n        struct apply\n          : mpl::copy<\n                mpl::joint_view<\n                    mpl::iterator_range<\n                        mpl::string_iterator<Sequence, 0, 0>\n                      , First\n                    >\n                  , mpl::iterator_range<\n                        typename mpl::if_na<Last, typename mpl::next<First>::type>::type\n                      , typename mpl::end<Sequence>::type\n                    >\n                >\n              , mpl::back_inserter<mpl::string<> >\n            >\n        {};\n    };\n\n    template<typename Tag>\n    struct clear_impl;\n\n    template<>\n    struct clear_impl<mpl::string_tag>\n    {\n        template<typename>\n        struct apply\n        {\n            typedef mpl::string<> type;\n        };\n    };\n\n    #define M0(z, n, data)                                                                            \\\n    template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C), int J>                         \\\n    struct string_iterator<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)>, n, J>   \\\n    {                                                                                                 \\\n        enum { eomc_ = (BOOST_MPL_MULTICHAR_LENGTH(BOOST_PP_CAT(C, n)) == J + 1) };                   \\\n        typedef mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)> string;             \\\n        typedef std::bidirectional_iterator_tag category;                                             \\\n        typedef                                                                                       \\\n            mpl::string_iterator<string, n + eomc_, eomc_ ? 0 : J + 1>                                \\\n        next;                                                                                         \\\n        typedef                                                                                       \\\n            mpl::string_iterator<string, n, J - 1>                                                    \\\n        prior;                                                                                        \\\n        typedef mpl::char_<BOOST_MPL_MULTICHAR_AT(BOOST_PP_CAT(C, n), J)> type;                       \\\n    };                                                                                                \\\n    template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C)>                                \\\n    struct string_iterator<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)>, n, 0>   \\\n    {                                                                                                 \\\n        enum { eomc_ = (BOOST_MPL_MULTICHAR_LENGTH(BOOST_PP_CAT(C, n)) == 1) };                       \\\n        typedef mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)> string;             \\\n        typedef std::bidirectional_iterator_tag category;                                             \\\n        typedef                                                                                       \\\n            mpl::string_iterator<string, n + eomc_, !eomc_>                                           \\\n        next;                                                                                         \\\n        typedef                                                                                       \\\n            mpl::string_iterator<                                                                     \\\n                string                                                                                \\\n              , n - 1                                                                                 \\\n              , BOOST_MPL_MULTICHAR_LENGTH(BOOST_PP_CAT(C, BOOST_PP_DEC(n))) - 1                      \\\n            >                                                                                         \\\n        prior;                                                                                        \\\n        typedef mpl::char_<BOOST_MPL_MULTICHAR_AT(BOOST_PP_CAT(C, n), 0)> type;                       \\\n    };\n\n    BOOST_PP_REPEAT(BOOST_MPL_STRING_MAX_PARAMS, M0, ~)\n    #undef M0\n\n    template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C)>\n    struct string\n    {\n        /// INTERNAL ONLY\n        enum\n        {\n            front_  = C0\n          , back_   = BOOST_PP_CAT(C, BOOST_PP_DEC(BOOST_MPL_STRING_MAX_PARAMS))\n        };\n\n        typedef char        value_type;\n        typedef string      type;\n        typedef string_tag  tag;\n    };\n\n    namespace aux_\n    {\n        template<typename It, typename End>\n        struct next_unless\n          : mpl::next<It>\n        {};\n\n        template<typename End>\n        struct next_unless<End, End>\n        {\n            typedef End type;\n        };\n\n        template<typename It, typename End>\n        struct deref_unless\n          : mpl::deref<It>\n        {};\n\n        template<typename End>\n        struct deref_unless<End, End>\n        {\n            typedef mpl::char_<'\\0'> type;\n        };\n    }\n\n    template<typename Sequence>\n    struct c_str\n    {\n        typedef typename mpl::end<Sequence>::type iend;\n        typedef typename mpl::begin<Sequence>::type i0;\n        #define M0(z, n, data)                                                                      \\\n        typedef                                                                                     \\\n            typename mpl::aux_::next_unless<BOOST_PP_CAT(i, n), iend>::type                         \\\n        BOOST_PP_CAT(i, BOOST_PP_INC(n));\n        BOOST_PP_REPEAT(BOOST_MPL_LIMIT_STRING_SIZE, M0, ~)\n        #undef M0\n\n        typedef c_str type;\n        static typename Sequence::value_type const value[BOOST_MPL_LIMIT_STRING_SIZE+1];\n    };\n\n    template<typename Sequence>\n    typename Sequence::value_type const c_str<Sequence>::value[BOOST_MPL_LIMIT_STRING_SIZE+1] =\n    {\n        #define M0(z, n, data)                                                                      \\\n        mpl::aux_::deref_unless<BOOST_PP_CAT(i, n), iend>::type::value,\n        BOOST_PP_REPEAT(BOOST_MPL_LIMIT_STRING_SIZE, M0, ~)\n        #undef M0\n        '\\0'\n    };\n\n}} // namespace boost\n\n#endif // BOOST_MPL_STRING_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/switch.hpp",
    "content": "\n#ifndef BOOST_MPL_SWITCH_HPP_INCLUDED\n#define BOOST_MPL_SWITCH_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/find_if.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/pair.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(Body)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct switch_\n{\n    typedef typename find_if<\n          Body\n        , apply1< lambda< first<_1> >, T >\n        >::type iter_;\n        \n    typedef typename deref<iter_>::type pair_;\n    typedef typename lambda< typename second<pair_>::type >::type f_;\n    typedef typename apply1<f_,T>::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,switch_,(Body,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, switch_)\n\n}}\n\n#endif // BOOST_MPL_SWITCH_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_TAG_HPP_INCLUDED\n#define BOOST_MPL_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/has_tag.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T > struct tag_impl\n{\n    typedef typename T::tag type;\n};\n}\n\ntemplate< typename T, typename Default = void_ > struct tag\n#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n    : if_< \n          aux::has_tag<T>\n        , aux::tag_impl<T>\n        , Default\n        >::type\n{\n#else\n{\n    typedef typename eval_if< \n          aux::has_tag<T>\n        , aux::tag_impl<T>\n        , Default\n        >::type type;\n\n#endif\n};\n\n}}\n\n#endif // BOOST_MPL_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/times.hpp",
    "content": "\n#ifndef BOOST_MPL_TIMES_HPP_INCLUDED\n#define BOOST_MPL_TIMES_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#define AUX778076_OP_NAME times\n#define AUX778076_OP_TOKEN *\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#endif // BOOST_MPL_TIMES_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/transform.hpp",
    "content": "\n#ifndef BOOST_MPL_TRANSFORM_HPP_INCLUDED\n#define BOOST_MPL_TRANSFORM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/reverse_fold.hpp>\n#include <boost/mpl/pair_view.hpp>\n#include <boost/mpl/is_sequence.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/bind.hpp>\n#include <boost/mpl/or.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux { \n\ntemplate< \n      typename Seq\n    , typename Op\n    , typename In\n    >\nstruct transform1_impl\n    : fold< \n          Seq\n        , typename In::state\n        , bind2< typename lambda< typename In::operation >::type\n            , _1\n            , bind1< typename lambda<Op>::type, _2>\n            > \n        >\n{\n};\n\ntemplate< \n      typename Seq\n    , typename Op\n    , typename In\n    >\nstruct reverse_transform1_impl\n    : reverse_fold< \n          Seq\n        , typename In::state\n        , bind2< typename lambda< typename In::operation >::type\n            , _1\n            , bind1< typename lambda<Op>::type, _2>\n            > \n        >\n{\n};\n\ntemplate< \n      typename Seq1\n    , typename Seq2\n    , typename Op\n    , typename In\n    >\nstruct transform2_impl\n    : fold< \n          pair_view<Seq1,Seq2>\n        , typename In::state\n        , bind2< typename lambda< typename In::operation >::type\n            , _1\n            , bind2<\n                  typename lambda<Op>::type\n                , bind1<first<>,_2>\n                , bind1<second<>,_2>\n                >\n            > \n        >\n{\n};\n\ntemplate< \n      typename Seq1\n    , typename Seq2\n    , typename Op\n    , typename In\n    >\nstruct reverse_transform2_impl\n    : reverse_fold< \n          pair_view<Seq1,Seq2>\n        , typename In::state\n        , bind2< typename lambda< typename In::operation >::type\n            , _1\n            , bind2< typename lambda< Op >::type\n                , bind1<first<>,_2>\n                , bind1<second<>,_2>\n                >\n            > \n        >\n{\n};\n\n} // namespace aux \n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, transform1)                    \nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, transform2)\n    \n#define AUX778076_TRANSFORM_DEF(name)                                   \\\ntemplate<                                                               \\\n      typename BOOST_MPL_AUX_NA_PARAM(Seq1)                             \\\n    , typename BOOST_MPL_AUX_NA_PARAM(Seq2OrOperation)                  \\\n    , typename BOOST_MPL_AUX_NA_PARAM(OperationOrInserter)              \\\n    , typename BOOST_MPL_AUX_NA_PARAM(Inserter)                         \\\n    >                                                                   \\\nstruct name                                                             \\\n{                                                                       \\\n    typedef typename eval_if<                                           \\\n          or_<                                                          \\\n              is_na<OperationOrInserter>                                \\\n            , is_lambda_expression< Seq2OrOperation >                   \\\n            , not_< is_sequence<Seq2OrOperation> >                      \\\n            >                                                           \\\n        , name##1<Seq1,Seq2OrOperation,OperationOrInserter>             \\\n        , name##2<Seq1,Seq2OrOperation,OperationOrInserter,Inserter>    \\\n        >::type type;                                                   \\\n};                                                                      \\\nBOOST_MPL_AUX_NA_SPEC(4, name)                                          \\\n/**/\n\nAUX778076_TRANSFORM_DEF(transform)\nAUX778076_TRANSFORM_DEF(reverse_transform)\n\n#undef AUX778076_TRANSFORM_DEF\n\n}}\n\n#endif // BOOST_MPL_TRANSFORM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/transform_view.hpp",
    "content": "\n#ifndef BOOST_MPL_TRANSFORM_VIEW_HPP_INCLUDED\n#define BOOST_MPL_TRANSFORM_VIEW_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/aux_/transform_iter.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(F)\n    >\nstruct transform_view\n{\n private:\n    typedef typename lambda<F>::type f_;\n    typedef typename begin<Sequence>::type first_;\n    typedef typename end<Sequence>::type last_;\n \n public:\n    struct tag;\n    typedef transform_view type;\n    typedef aux::transform_iter< first_,last_,f_ > begin;\n    typedef aux::transform_iter< last_,last_,f_ > end;\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, transform_view)\n\n}}\n\n#endif // BOOST_MPL_TRANSFORM_VIEW_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/unique.hpp",
    "content": "\n#ifndef BOOST_MPL_UNIQUE_HPP_INCLUDED\n#define BOOST_MPL_UNIQUE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright John R. Bandela 2000-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/reverse_fold.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/pair.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_spec.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< typename Predicate, typename Operation >\nstruct unique_op\n{\n    template< typename Pair, typename T > struct apply\n    {\n        typedef typename Pair::first seq_;\n        typedef typename Pair::second prior_;\n        typedef typename eval_if<\n              and_< is_not_na<prior_>, apply2<Predicate,prior_,T> >\n            , identity<seq_>\n            , apply2<Operation,seq_,T>\n            >::type new_seq_;\n\n        typedef pair<new_seq_,T> type;\n    };\n};\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename Inserter\n    >\nstruct unique_impl\n    : first< typename fold<\n          Sequence\n        , pair< typename Inserter::state,na >\n        , protect< aux::unique_op<Predicate,typename Inserter::operation> >\n        >::type >\n{\n};\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename Inserter\n    >\nstruct reverse_unique_impl\n    : first< typename reverse_fold<\n          Sequence\n        , pair< typename Inserter::state,na >\n        , protect< aux::unique_op<Predicate,typename Inserter::operation> >\n        >::type >\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, unique)\n\n}}\n\n#endif // BOOST_MPL_UNIQUE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/unpack_args.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_UNPACK_ARGS_HPP_INCLUDED\n#define BOOST_MPL_UNPACK_ARGS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/at.hpp>\n#   include <boost/mpl/size.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/lambda_spec.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER unpack_args.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/forwarding.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n\n#   define AUX778076_UNPACK(unused, i, Args) \\\n    , typename at_c<Args,i>::type \\\n    /**/\n\n#   define AUX778076_UNPACKED_ARGS(n, Args) \\\n    BOOST_MPL_PP_REPEAT(n, AUX778076_UNPACK, Args) \\\n    /**/\n\nnamespace aux {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\ntemplate< int size, typename F, typename Args >\nstruct unpack_args_impl;\n#else\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl\n{\n    template< typename F, typename Args > struct apply;\n};\n#endif\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/unpack_args.hpp>))\n#include BOOST_PP_ITERATE()\n\n}\n\ntemplate<\n      typename F\n    >\nstruct unpack_args\n{\n    template< typename Args > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n        : aux::unpack_args_impl< size<Args>::value,F,Args >\n#   else\n        : aux::unpack_args_impl< size<Args>::value >\n            ::template apply< F,Args >\n#   endif\n    {\n#else // BOOST_MPL_CFG_NO_NESTED_FORWARDING\n    {\n        typedef typename aux::unpack_args_impl< \n              size<Args>::value\n            , F\n            , Args\n            >::type type;\n#endif\n    };\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\n\n#   undef AUX778076_UNPACK\n#   undef AUX778076_UNPACKED_ARGS\n\n}}\n\n#endif // BOOST_MPL_CFG_USE_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_UNPACK_ARGS_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n\n#   define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename F, typename Args >\nstruct unpack_args_impl<i_,F,Args>\n    : BOOST_PP_CAT(apply,i_)<\n          F\n        AUX778076_UNPACKED_ARGS(i_, Args)\n        >\n{\n};\n\n#else\n\ntemplate<> struct unpack_args_impl<i_>\n{\n    template< typename F, typename Args > struct apply\n        : BOOST_PP_CAT(apply,i_)<\n              F\n            AUX778076_UNPACKED_ARGS(i_, Args)\n            >\n    {\n    };\n};\n\n#endif\n\n#   undef i_\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/upper_bound.hpp",
    "content": "\n#ifndef BOOST_MPL_UPPER_BOUND_HPP_INCLUDED\n#define BOOST_MPL_UPPER_BOUND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/less.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n#   define BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL\n#endif\n\n#if !defined(BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL)\n#   include <boost/mpl/minus.hpp>\n#   include <boost/mpl/divides.hpp>\n#   include <boost/mpl/size.hpp>\n#   include <boost/mpl/advance.hpp>\n#   include <boost/mpl/begin_end.hpp>\n#   include <boost/mpl/long.hpp>\n#   include <boost/mpl/eval_if.hpp>\n#   include <boost/mpl/prior.hpp>\n#   include <boost/mpl/deref.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#else\n#   include <boost/mpl/find.hpp>\n#   include <boost/mpl/bind.hpp>\n#endif\n\n#include <boost/config.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL)\n\n// agurt 23/oct/02: has a wrong complexity etc., but at least it works;\n// feel free to contribute a better implementation!\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    , typename Predicate = less<>\n    , typename pred_ = typename lambda<Predicate>::type\n    >\nstruct upper_bound\n    : find_if< Sequence, bind2<pred_,T,_> >\n{\n};\n\n#else\n\nnamespace aux {\n\ntemplate<\n      typename Distance\n    , typename Predicate\n    , typename T\n    , typename DeferredIterator\n    >\nstruct upper_bound_step_impl;\n\ntemplate< \n      typename Distance\n    , typename Predicate\n    , typename T\n    , typename DeferredIterator\n    >\nstruct upper_bound_step\n{\n    typedef typename eval_if<\n          Distance\n        , upper_bound_step_impl<Distance,Predicate,T,DeferredIterator>\n        , DeferredIterator\n        >::type type;\n};\n    \ntemplate<\n      typename Distance\n    , typename Predicate\n    , typename T\n    , typename DeferredIterator\n    >\nstruct upper_bound_step_impl\n{\n    typedef typename divides< Distance, long_<2> >::type offset_;\n    typedef typename DeferredIterator::type iter_;\n    typedef typename advance< iter_,offset_ >::type middle_;\n    typedef typename apply2<\n              Predicate\n            , T\n            , typename deref<middle_>::type\n            >::type cond_;\n\n    typedef typename prior< minus< Distance, offset_ > >::type step_;\n    typedef upper_bound_step< offset_,Predicate,T,DeferredIterator > step_forward_;\n    typedef upper_bound_step< step_,Predicate,T,next<middle_> > step_backward_;\n    typedef typename eval_if<\n          cond_\n        , step_forward_\n        , step_backward_\n        >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    , typename Predicate = less<>\n    >\nstruct upper_bound\n{\n private:\n    typedef typename lambda<Predicate>::type pred_;\n    typedef typename size<Sequence>::type size_;\n\n public:\n    typedef typename aux::upper_bound_step<\n        size_,pred_,T,begin<Sequence>\n        >::type type;\n};\n\n#endif // BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL\n\nBOOST_MPL_AUX_NA_SPEC(2, upper_bound)\n\n}}\n\n#endif // BOOST_MPL_UPPER_BOUND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/value_type.hpp",
    "content": "\n#ifndef BOOST_MPL_VALUE_TYPE_HPP_INCLUDED\n#define BOOST_MPL_VALUE_TYPE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/value_type_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/apply_wrap.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(AssociativeSequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct value_type\n    : apply_wrap2<\n          value_type_impl< typename sequence_tag<AssociativeSequence>::type >\n        , AssociativeSequence, T >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,value_type,(AssociativeSequence,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, value_type)\n    \n}}\n\n#endif // BOOST_MPL_VALUE_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/value_type_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED\n#define BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct value_type_impl;\ntemplate< typename AssociativeSequence, typename T > struct value_type;\n\n}}\n\n#endif // BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/O1_size.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/O1_size_fwd.hpp>\n#include <boost/mpl/minus.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n        : Vector::size\n    {\n    };\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long N >\nstruct O1_size_impl< aux::vector_tag<N> >\n{\n    template< typename Vector > struct apply\n        : mpl::long_<N>\n    {\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/at.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/at_fwd.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate< typename Vector, long n_ >\nstruct v_at_impl\n{\n    typedef long_< (Vector::lower_bound_::value + n_) > index_;\n    typedef __typeof__( Vector::item_(index_()) ) type;\n};\n\n\ntemplate< typename Vector, long n_ >\nstruct v_at\n    : aux::wrapped_type< typename v_at_impl<Vector,n_>::type >\n{\n};\n\ntemplate<>\nstruct at_impl< aux::vector_tag >\n{\n    template< typename Vector, typename N > struct apply\n        : v_at<\n              Vector\n            , BOOST_MPL_AUX_VALUE_WKND(N)::value\n            >\n    {\n    };\n};\n\n#else\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n\ntemplate< typename Vector, BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at;\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, n_) >\nstruct at_impl< aux::vector_tag<n_> >\n{\n    template< typename Vector, typename N > struct apply\n#if !defined(__BORLANDC__)\n        : v_at<\n              Vector\n            , BOOST_MPL_AUX_VALUE_WKND(N)::value\n            >\n    {\n#else\n    {\n        typedef typename v_at<\n              Vector\n            , BOOST_MPL_AUX_VALUE_WKND(N)::value\n            >::type type;\n#endif\n    };\n};\n\n#   else\n\nnamespace aux {\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at_impl\n{\n    template< typename V > struct result_;\n};\n\n// to work around ETI, etc.\ntemplate<> struct v_at_impl<-1>\n{\n    template< typename V > struct result_\n    {\n        typedef void_ type;\n    };\n};\n\n} // namespace aux\n\ntemplate< typename T, BOOST_MPL_AUX_NTTP_DECL(long, n_) >\nstruct v_at\n    : aux::v_at_impl<n_>::template result_<T>\n{\n};\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/back.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/back_fwd.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/vector/aux_/at.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct back_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n        : v_at<\n              Vector\n            , prior<typename Vector::size>::type::value\n            >\n    {\n    };\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long n_ >\nstruct back_impl< aux::vector_tag<n_> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/begin_end.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/begin_end_fwd.hpp>\n#   include <boost/mpl/vector/aux_/iterator.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct begin_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef v_iter<Vector,0> type;\n    };\n};\n\ntemplate<>\nstruct end_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef v_iter<Vector,Vector::size::value> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif // BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/clear.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/vector/aux_/vector0.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct clear_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long N >\nstruct clear_impl< aux::vector_tag<N> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/empty.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/empty_fwd.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct empty_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n        : is_same<\n              typename Vector::lower_bound_\n            , typename Vector::upper_bound_\n            >\n    {\n    };\n};\n\n#else\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<0> >\n{\n    template< typename Vector > struct apply\n        : true_\n    {\n    };\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long N >\nstruct empty_impl< aux::vector_tag<N> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/front.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/front_fwd.hpp>\n#include <boost/mpl/vector/aux_/at.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct front_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n        : v_at<Vector,0>\n    {\n    };\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, n_) >\nstruct front_impl< aux::vector_tag<n_> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/include_preprocessed.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/stringize.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n#   define AUX778076_INCLUDE_DIR typeof_based\n#elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n   || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n#   define AUX778076_INCLUDE_DIR no_ctps\n#else\n#   define AUX778076_INCLUDE_DIR plain\n#endif\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_HEADER \\\n    AUX778076_INCLUDE_DIR/BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#else\n#   define AUX778076_HEADER \\\n    BOOST_PP_CAT(AUX778076_INCLUDE_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#endif\n\n\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))\n#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX778076_HEADER)\n#   include AUX778076_INCLUDE_STRING\n#   undef AUX778076_INCLUDE_STRING\n#else\n#   include BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX778076_HEADER)\n#endif\n\n#   undef AUX778076_HEADER\n#   undef AUX778076_INCLUDE_DIR\n\n#undef BOOST_MPL_PREPROCESSED_HEADER\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/item.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate< \n      typename T\n    , typename Base\n    , int at_front = 0\n    >\nstruct v_item\n    : Base\n{\n    typedef typename Base::upper_bound_ index_;\n    typedef typename next<index_>::type upper_bound_;\n    typedef typename next<typename Base::size>::type size;\n    typedef Base base;\n    typedef v_item type;\n\n    // agurt 10/sep/04: MWCW <= 9.3 workaround here and below; the compiler\n    // breaks if using declaration comes _before_ the new overload\n    static aux::type_wrapper<T> item_(index_);\n    using Base::item_;\n};\n\ntemplate<\n      typename T\n    , typename Base\n    >\nstruct v_item<T,Base,1>\n    : Base\n{\n    typedef typename prior<typename Base::lower_bound_>::type index_;\n    typedef index_ lower_bound_;\n    typedef typename next<typename Base::size>::type size;\n    typedef Base base;\n    typedef v_item type;\n\n    static aux::type_wrapper<T> item_(index_);\n    using Base::item_;\n};\n\n// \"erasure\" item\ntemplate< \n      typename Base\n    , int at_front\n    >\nstruct v_mask\n    : Base\n{\n    typedef typename prior<typename Base::upper_bound_>::type index_;\n    typedef index_ upper_bound_;\n    typedef typename prior<typename Base::size>::type size;\n    typedef Base base;\n    typedef v_mask type;\n\n    static aux::type_wrapper<void_> item_(index_);\n    using Base::item_;\n};\n\ntemplate< \n      typename Base\n    >\nstruct v_mask<Base,1>\n    : Base\n{\n    typedef typename Base::lower_bound_ index_;\n    typedef typename next<index_>::type lower_bound_;\n    typedef typename prior<typename Base::size>::type size;\n    typedef Base base;\n    typedef v_mask type;\n\n    static aux::type_wrapper<void_> item_(index_);\n    using Base::item_;\n};\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/iterator.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED\n#define BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/vector/aux_/at.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/plus.hpp>\n#include <boost/mpl/minus.hpp>\n#include <boost/mpl/advance_fwd.hpp>\n#include <boost/mpl/distance_fwd.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/prior.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    >\nstruct v_iter\n{\n    typedef aux::v_iter_tag tag;\n    typedef random_access_iterator_tag category;\n    typedef typename v_at<Vector,n_>::type type;\n\n    typedef Vector vector_;\n    typedef mpl::long_<n_> pos;\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    enum { \n          next_ = n_ + 1\n        , prior_ = n_ - 1\n        , pos_ = n_\n    };\n    \n    typedef v_iter<Vector,next_> next;\n    typedef v_iter<Vector,prior_> prior;\n#endif\n\n};\n\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    >\nstruct next< v_iter<Vector,n_> >\n{\n    typedef v_iter<Vector,(n_ + 1)> type;\n};\n\ntemplate<\n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    >\nstruct prior< v_iter<Vector,n_> >\n{\n    typedef v_iter<Vector,(n_ - 1)> type;\n};\n\ntemplate<\n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    , typename Distance\n    >\nstruct advance< v_iter<Vector,n_>,Distance>\n{\n    typedef v_iter<\n          Vector\n        , (n_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(long, Distance))\n        > type;\n};\n\ntemplate< \n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    , BOOST_MPL_AUX_NTTP_DECL(long, m_)\n    > \nstruct distance< v_iter<Vector,n_>, v_iter<Vector,m_> >\n    : mpl::long_<(m_ - n_)>\n{\n};\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate<> struct advance_impl<aux::v_iter_tag>\n{\n    template< typename Iterator, typename N > struct apply\n    {\n        enum { pos_ = Iterator::pos_, n_ = N::value };\n        typedef v_iter<\n              typename Iterator::vector_\n            , (pos_ + n_)\n            > type;\n    };\n};\n\ntemplate<> struct distance_impl<aux::v_iter_tag>\n{\n    template< typename Iter1, typename Iter2 > struct apply\n    {\n        enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };\n        typedef long_<( pos2_ - pos1_ )> type;\n        BOOST_STATIC_CONSTANT(long, value = ( pos2_ - pos1_ ));\n    };\n};\n\n#endif\n\n}}\n\n#endif // BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/numbered.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n#if defined(BOOST_PP_IS_ITERATING)\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/preprocessor/enum_params.hpp>\n#include <boost/preprocessor/enum_shifted_params.hpp>\n#include <boost/preprocessor/comma_if.hpp>\n#include <boost/preprocessor/repeat.hpp>\n#include <boost/preprocessor/dec.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   define AUX778076_VECTOR_TAIL(vector, i_, T) \\\n    BOOST_PP_CAT(vector,i_)< \\\n          BOOST_PP_ENUM_PARAMS(i_, T) \\\n        > \\\n    /**/\n\n#if i_ > 0\ntemplate<\n      BOOST_PP_ENUM_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(vector,i_)\n    : v_item<\n          BOOST_PP_CAT(T,BOOST_PP_DEC(i_))\n        , AUX778076_VECTOR_TAIL(vector,BOOST_PP_DEC(i_),T)\n        >\n{\n    typedef BOOST_PP_CAT(vector,i_) type;\n};\n#endif\n\n#   undef AUX778076_VECTOR_TAIL\n\n#else // \"brute force\" implementation\n\n#   if i_ > 0\n\ntemplate<\n      BOOST_PP_ENUM_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(vector,i_)\n{\n    typedef aux::vector_tag<i_> tag;\n    typedef BOOST_PP_CAT(vector,i_) type;\n\n#   define AUX778076_VECTOR_ITEM(unused, i_, unused2) \\\n    typedef BOOST_PP_CAT(T,i_) BOOST_PP_CAT(item,i_); \\\n    /**/\n\n    BOOST_PP_REPEAT(i_, AUX778076_VECTOR_ITEM, unused)\n#   undef AUX778076_VECTOR_ITEM\n    typedef void_ BOOST_PP_CAT(item,i_);\n    typedef BOOST_PP_CAT(T,BOOST_PP_DEC(i_)) back;\n\n    // Borland forces us to use 'type' here (instead of the class name)\n    typedef v_iter<type,0> begin;\n    typedef v_iter<type,i_> end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<BOOST_PP_DEC(i_)> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef BOOST_PP_CAT(vector,i_)<\n              T\n              BOOST_PP_COMMA_IF(BOOST_PP_DEC(i_))\n              BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<i_> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef BOOST_PP_CAT(vector,BOOST_PP_DEC(i_))<\n              BOOST_PP_ENUM_SHIFTED_PARAMS(i_, typename Vector::item)\n            > type;\n    };\n};\n\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<BOOST_PP_DEC(i_)> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef BOOST_PP_CAT(vector,i_)<\n              BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)\n              BOOST_PP_COMMA_IF(BOOST_PP_DEC(i_))\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<i_> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef BOOST_PP_CAT(vector,BOOST_PP_DEC(i_))<\n              BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)\n            > type;\n    };\n};\n\n#   endif // i_ > 0\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n\ntemplate< typename V >\nstruct v_at<V,i_>\n{\n    typedef typename V::BOOST_PP_CAT(item,i_) type;\n};\n\n#   else\n\nnamespace aux {\ntemplate<> struct v_at_impl<i_>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::BOOST_PP_CAT(item,i_) type;\n    };\n};\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<i_> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\n#if i_ > 0\ntemplate<>\nstruct front_impl< aux::vector_tag<i_> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<i_> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<i_> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n#endif\n\ntemplate<>\nstruct size_impl< aux::vector_tag<i_> >\n{\n    template< typename Vector > struct apply\n        : long_<i_>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<i_> >\n    : size_impl< aux::vector_tag<i_> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<i_> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#undef i_\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/numbered_c.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n#if defined(BOOST_PP_IS_ITERATING)\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/preprocessor/enum_params.hpp>\n#include <boost/preprocessor/enum_shifted_params.hpp>\n#include <boost/preprocessor/comma_if.hpp>\n#include <boost/preprocessor/repeat.hpp>\n#include <boost/preprocessor/dec.hpp>\n#include <boost/preprocessor/cat.hpp>\n\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   define AUX778076_VECTOR_TAIL(vector, i_, C) \\\n    BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)<T \\\n          BOOST_PP_COMMA_IF(i_) BOOST_PP_ENUM_PARAMS(i_, C) \\\n        > \\\n    /**/\n\n#if i_ > 0\ntemplate<\n      typename T\n    , BOOST_PP_ENUM_PARAMS(i_, T C)\n    >\nstruct BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)\n    : v_item<\n          integral_c<T,BOOST_PP_CAT(C,BOOST_PP_DEC(i_))>\n        , AUX778076_VECTOR_TAIL(vector,BOOST_PP_DEC(i_),C)\n        >\n{\n    typedef BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c) type;\n    typedef T value_type;\n};\n#endif\n\n#   undef AUX778076_VECTOR_TAIL\n\n#else // \"brute force\" implementation\n\n#   define AUX778076_VECTOR_C_PARAM_FUNC(unused, i_, param) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    integral_c<T,BOOST_PP_CAT(param,i_)> \\\n    /**/\n\ntemplate<\n      typename T\n    , BOOST_PP_ENUM_PARAMS(i_, T C)\n    >\nstruct BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)\n    : BOOST_PP_CAT(vector,i_)< BOOST_PP_REPEAT(i_,AUX778076_VECTOR_C_PARAM_FUNC,C) >\n{\n    typedef BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c) type;\n    typedef T value_type;\n};\n\n#   undef AUX778076_VECTOR_C_PARAM_FUNC\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#undef i_\n\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/pop_back.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/pop_back_fwd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/vector/aux_/item.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef v_mask<Vector,0> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif // BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/pop_front.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/pop_front_fwd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/vector/aux_/item.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef v_mask<Vector,1> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif // BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate<> struct v_at_impl<0>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item0 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<0> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<0> >\n{\n    template< typename Vector > struct apply\n        : long_<0>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<0> >\n    : size_impl< aux::vector_tag<0> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<0> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector1\n{\n    typedef aux::vector_tag<1> tag;\n    typedef vector1 type;\n    typedef T0 item0;\n    typedef void_ item1;\n    typedef T0 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,1 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<0> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector1<\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<1> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<\n             \n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<0> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector1<\n             \n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<1> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<\n             \n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<1>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item1 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<1> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<1> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<1> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<1> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<1> >\n{\n    template< typename Vector > struct apply\n        : long_<1>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<1> >\n    : size_impl< aux::vector_tag<1> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<1> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector2\n{\n    typedef aux::vector_tag<2> tag;\n    typedef vector2 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    \n\n    typedef void_ item2;\n    typedef T1 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,2 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<1> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector2<\n              T\n              ,\n              typename Vector::item0\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<2> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector1<\n              typename Vector::item1\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<1> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector2<\n              typename Vector::item0\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<2> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector1<\n              typename Vector::item0\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<2>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item2 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<2> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<2> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<2> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<2> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<2> >\n{\n    template< typename Vector > struct apply\n        : long_<2>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<2> >\n    : size_impl< aux::vector_tag<2> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<2> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector3\n{\n    typedef aux::vector_tag<3> tag;\n    typedef vector3 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    \n\n    typedef void_ item3;\n    typedef T2 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,3 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<2> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector3<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<3> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector2<\n              typename Vector::item1, typename Vector::item2\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<2> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector3<\n              typename Vector::item0, typename Vector::item1\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<3> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector2<\n              typename Vector::item0, typename Vector::item1\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<3>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item3 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<3> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<3> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<3> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<3> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<3> >\n{\n    template< typename Vector > struct apply\n        : long_<3>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<3> >\n    : size_impl< aux::vector_tag<3> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<3> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector4\n{\n    typedef aux::vector_tag<4> tag;\n    typedef vector4 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    \n\n    typedef void_ item4;\n    typedef T3 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,4 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<3> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector4<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<4> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector3<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<3> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector4<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<4> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector3<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<4>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item4 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<4> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<4> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<4> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<4> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<4> >\n{\n    template< typename Vector > struct apply\n        : long_<4>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<4> >\n    : size_impl< aux::vector_tag<4> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<4> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector5\n{\n    typedef aux::vector_tag<5> tag;\n    typedef vector5 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    \n\n    typedef void_ item5;\n    typedef T4 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,5 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<4> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector5<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<5> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector4<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<4> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector5<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<5> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector4<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<5>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item5 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<5> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<5> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<5> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<5> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<5> >\n{\n    template< typename Vector > struct apply\n        : long_<5>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<5> >\n    : size_impl< aux::vector_tag<5> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<5> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector6\n{\n    typedef aux::vector_tag<6> tag;\n    typedef vector6 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    \n\n    typedef void_ item6;\n    typedef T5 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,6 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<5> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector6<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<6> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector5<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<5> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector6<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<6> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector5<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<6>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item6 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<6> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<6> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<6> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<6> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<6> >\n{\n    template< typename Vector > struct apply\n        : long_<6>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<6> >\n    : size_impl< aux::vector_tag<6> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<6> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector7\n{\n    typedef aux::vector_tag<7> tag;\n    typedef vector7 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    \n\n    typedef void_ item7;\n    typedef T6 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,7 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<6> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector7<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<7> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector6<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<6> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector7<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<7> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector6<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<7>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item7 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<7> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<7> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<7> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<7> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<7> >\n{\n    template< typename Vector > struct apply\n        : long_<7>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<7> >\n    : size_impl< aux::vector_tag<7> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<7> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector8\n{\n    typedef aux::vector_tag<8> tag;\n    typedef vector8 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    \n\n    typedef void_ item8;\n    typedef T7 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,8 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<7> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector8<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<8> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector7<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<7> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector8<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<8> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector7<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<8>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item8 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<8> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<8> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<8> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<8> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<8> >\n{\n    template< typename Vector > struct apply\n        : long_<8>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<8> >\n    : size_impl< aux::vector_tag<8> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<8> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector9\n{\n    typedef aux::vector_tag<9> tag;\n    typedef vector9 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    \n\n    typedef void_ item9;\n    typedef T8 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,9 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<8> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector9<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<9> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector8<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<8> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector9<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<9> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector8<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<9>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item9 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<9> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<9> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<9> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<9> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<9> >\n{\n    template< typename Vector > struct apply\n        : long_<9>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<9> >\n    : size_impl< aux::vector_tag<9> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<9> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector10\n{\n    typedef aux::vector_tag<10> tag;\n    typedef vector10 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    \n\n    typedef void_ item10;\n    typedef T9 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,10 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<9> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector10<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<10> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector9<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<9> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector10<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<10> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector9<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<10>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item10 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<10> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<10> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<10> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<10> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<10> >\n{\n    template< typename Vector > struct apply\n        : long_<10>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<10> >\n    : size_impl< aux::vector_tag<10> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<10> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector10_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0\n    >\nstruct vector1_c\n    : vector1< integral_c< T,C0 > >\n{\n    typedef vector1_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1\n    >\nstruct vector2_c\n    : vector2< integral_c< T,C0 >, integral_c< T,C1 > >\n{\n    typedef vector2_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2\n    >\nstruct vector3_c\n    : vector3< integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 > >\n{\n    typedef vector3_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3\n    >\nstruct vector4_c\n    : vector4<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >, integral_c<T\n        , C3> \n >\n{\n    typedef vector4_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4\n    >\nstruct vector5_c\n    : vector5<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 > \n >\n{\n    typedef vector5_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5\n    >\nstruct vector6_c\n    : vector6<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 > \n >\n{\n    typedef vector6_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6\n    >\nstruct vector7_c\n    : vector7<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c<T\n        , C6> \n >\n{\n    typedef vector7_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7\n    >\nstruct vector8_c\n    : vector8<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 > \n >\n{\n    typedef vector8_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8\n    >\nstruct vector9_c\n    : vector9<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 > \n >\n{\n    typedef vector9_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9\n    >\nstruct vector10_c\n    : vector10<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 > \n >\n{\n    typedef vector10_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector11\n{\n    typedef aux::vector_tag<11> tag;\n    typedef vector11 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    \n\n    typedef void_ item11;\n    typedef T10 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,11 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<10> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector11<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<11> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector10<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<10> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector11<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<11> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector10<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<11>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item11 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<11> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<11> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<11> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<11> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<11> >\n{\n    template< typename Vector > struct apply\n        : long_<11>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<11> >\n    : size_impl< aux::vector_tag<11> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<11> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector12\n{\n    typedef aux::vector_tag<12> tag;\n    typedef vector12 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    \n\n    typedef void_ item12;\n    typedef T11 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,12 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<11> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector12<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<12> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector11<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<11> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector12<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<12> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector11<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<12>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item12 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<12> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<12> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<12> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<12> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<12> >\n{\n    template< typename Vector > struct apply\n        : long_<12>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<12> >\n    : size_impl< aux::vector_tag<12> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<12> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector13\n{\n    typedef aux::vector_tag<13> tag;\n    typedef vector13 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    \n\n    typedef void_ item13;\n    typedef T12 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,13 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<12> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector13<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<13> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector12<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<12> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector13<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<13> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector12<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<13>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item13 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<13> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<13> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<13> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<13> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<13> >\n{\n    template< typename Vector > struct apply\n        : long_<13>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<13> >\n    : size_impl< aux::vector_tag<13> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<13> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector14\n{\n    typedef aux::vector_tag<14> tag;\n    typedef vector14 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    \n\n    typedef void_ item14;\n    typedef T13 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,14 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<13> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector14<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<14> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector13<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<13> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector14<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<14> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector13<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<14>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item14 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<14> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<14> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<14> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<14> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<14> >\n{\n    template< typename Vector > struct apply\n        : long_<14>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<14> >\n    : size_impl< aux::vector_tag<14> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<14> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector15\n{\n    typedef aux::vector_tag<15> tag;\n    typedef vector15 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    \n\n    typedef void_ item15;\n    typedef T14 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,15 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<14> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector15<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<15> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector14<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<14> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector15<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<15> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector14<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<15>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item15 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<15> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<15> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<15> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<15> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<15> >\n{\n    template< typename Vector > struct apply\n        : long_<15>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<15> >\n    : size_impl< aux::vector_tag<15> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<15> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector16\n{\n    typedef aux::vector_tag<16> tag;\n    typedef vector16 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    \n\n    typedef void_ item16;\n    typedef T15 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,16 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<15> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector16<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<16> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector15<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<15> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector16<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<16> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector15<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<16>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item16 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<16> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<16> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<16> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<16> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<16> >\n{\n    template< typename Vector > struct apply\n        : long_<16>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<16> >\n    : size_impl< aux::vector_tag<16> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<16> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector17\n{\n    typedef aux::vector_tag<17> tag;\n    typedef vector17 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    \n\n    typedef void_ item17;\n    typedef T16 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,17 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<16> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector17<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<17> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector16<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<16> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector17<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<17> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector16<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<17>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item17 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<17> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<17> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<17> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<17> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<17> >\n{\n    template< typename Vector > struct apply\n        : long_<17>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<17> >\n    : size_impl< aux::vector_tag<17> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<17> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector18\n{\n    typedef aux::vector_tag<18> tag;\n    typedef vector18 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    \n\n    typedef void_ item18;\n    typedef T17 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,18 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<17> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector18<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<18> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector17<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<17> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector18<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<18> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector17<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<18>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item18 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<18> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<18> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<18> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<18> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<18> >\n{\n    template< typename Vector > struct apply\n        : long_<18>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<18> >\n    : size_impl< aux::vector_tag<18> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<18> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector19\n{\n    typedef aux::vector_tag<19> tag;\n    typedef vector19 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    \n\n    typedef void_ item19;\n    typedef T18 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,19 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<18> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector19<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<19> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector18<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<18> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector19<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<19> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector18<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<19>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item19 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<19> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<19> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<19> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<19> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<19> >\n{\n    template< typename Vector > struct apply\n        : long_<19>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<19> >\n    : size_impl< aux::vector_tag<19> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<19> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector20\n{\n    typedef aux::vector_tag<20> tag;\n    typedef vector20 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    \n\n    typedef void_ item20;\n    typedef T19 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,20 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<19> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector20<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<20> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector19<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<19> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector20<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<20> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector19<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<20>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item20 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<20> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<20> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<20> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<20> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<20> >\n{\n    template< typename Vector > struct apply\n        : long_<20>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<20> >\n    : size_impl< aux::vector_tag<20> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<20> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector20_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    >\nstruct vector11_c\n    : vector11<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >, integral_c<T\n        , C10> \n >\n{\n    typedef vector11_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11\n    >\nstruct vector12_c\n    : vector12<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 > \n >\n{\n    typedef vector12_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12\n    >\nstruct vector13_c\n    : vector13<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 > \n >\n{\n    typedef vector13_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13\n    >\nstruct vector14_c\n    : vector14<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >, integral_c<T\n        , C13> \n >\n{\n    typedef vector14_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14\n    >\nstruct vector15_c\n    : vector15<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 > \n >\n{\n    typedef vector15_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15\n    >\nstruct vector16_c\n    : vector16<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 > \n >\n{\n    typedef vector16_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16\n    >\nstruct vector17_c\n    : vector17<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >, integral_c<T\n        , C16> \n >\n{\n    typedef vector17_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17\n    >\nstruct vector18_c\n    : vector18<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 > \n >\n{\n    typedef vector18_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18\n    >\nstruct vector19_c\n    : vector19<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 > \n >\n{\n    typedef vector19_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19\n    >\nstruct vector20_c\n    : vector20<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >, integral_c<T\n        , C19> \n >\n{\n    typedef vector20_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector30.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20\n    >\nstruct vector21\n{\n    typedef aux::vector_tag<21> tag;\n    typedef vector21 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    \n\n    typedef void_ item21;\n    typedef T20 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,21 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<20> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector21<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<21> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector20<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<20> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector21<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<21> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector20<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<21>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item21 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<21> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<21> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<21> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<21> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<21> >\n{\n    template< typename Vector > struct apply\n        : long_<21>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<21> >\n    : size_impl< aux::vector_tag<21> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<21> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21\n    >\nstruct vector22\n{\n    typedef aux::vector_tag<22> tag;\n    typedef vector22 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    \n\n    typedef void_ item22;\n    typedef T21 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,22 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<21> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector22<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<22> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector21<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<21> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector22<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<22> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector21<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<22>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item22 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<22> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<22> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<22> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<22> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<22> >\n{\n    template< typename Vector > struct apply\n        : long_<22>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<22> >\n    : size_impl< aux::vector_tag<22> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<22> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22\n    >\nstruct vector23\n{\n    typedef aux::vector_tag<23> tag;\n    typedef vector23 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    \n\n    typedef void_ item23;\n    typedef T22 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,23 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<22> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector23<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<23> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector22<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<22> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector23<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<23> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector22<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<23>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item23 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<23> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<23> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<23> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<23> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<23> >\n{\n    template< typename Vector > struct apply\n        : long_<23>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<23> >\n    : size_impl< aux::vector_tag<23> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<23> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23\n    >\nstruct vector24\n{\n    typedef aux::vector_tag<24> tag;\n    typedef vector24 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    \n\n    typedef void_ item24;\n    typedef T23 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,24 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<23> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector24<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<24> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector23<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<23> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector24<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<24> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector23<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<24>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item24 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<24> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<24> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<24> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<24> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<24> >\n{\n    template< typename Vector > struct apply\n        : long_<24>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<24> >\n    : size_impl< aux::vector_tag<24> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<24> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    >\nstruct vector25\n{\n    typedef aux::vector_tag<25> tag;\n    typedef vector25 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    \n\n    typedef void_ item25;\n    typedef T24 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,25 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<24> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector25<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<25> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector24<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<24> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector25<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<25> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector24<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<25>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item25 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<25> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<25> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<25> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<25> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<25> >\n{\n    template< typename Vector > struct apply\n        : long_<25>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<25> >\n    : size_impl< aux::vector_tag<25> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<25> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25\n    >\nstruct vector26\n{\n    typedef aux::vector_tag<26> tag;\n    typedef vector26 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    \n\n    typedef void_ item26;\n    typedef T25 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,26 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<25> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector26<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<26> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector25<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<25> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector26<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<26> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector25<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<26>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item26 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<26> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<26> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<26> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<26> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<26> >\n{\n    template< typename Vector > struct apply\n        : long_<26>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<26> >\n    : size_impl< aux::vector_tag<26> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<26> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26\n    >\nstruct vector27\n{\n    typedef aux::vector_tag<27> tag;\n    typedef vector27 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    \n\n    typedef void_ item27;\n    typedef T26 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,27 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<26> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector27<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<27> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector26<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<26> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector27<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<27> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector26<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<27>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item27 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<27> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<27> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<27> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<27> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<27> >\n{\n    template< typename Vector > struct apply\n        : long_<27>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<27> >\n    : size_impl< aux::vector_tag<27> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<27> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27\n    >\nstruct vector28\n{\n    typedef aux::vector_tag<28> tag;\n    typedef vector28 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    \n\n    typedef void_ item28;\n    typedef T27 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,28 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<27> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector28<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<28> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector27<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<27> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector28<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<28> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector27<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<28>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item28 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<28> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<28> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<28> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<28> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<28> >\n{\n    template< typename Vector > struct apply\n        : long_<28>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<28> >\n    : size_impl< aux::vector_tag<28> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<28> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28\n    >\nstruct vector29\n{\n    typedef aux::vector_tag<29> tag;\n    typedef vector29 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    \n\n    typedef void_ item29;\n    typedef T28 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,29 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<28> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector29<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<29> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector28<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<28> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector29<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<29> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector28<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<29>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item29 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<29> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<29> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<29> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<29> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<29> >\n{\n    template< typename Vector > struct apply\n        : long_<29>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<29> >\n    : size_impl< aux::vector_tag<29> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<29> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    >\nstruct vector30\n{\n    typedef aux::vector_tag<30> tag;\n    typedef vector30 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    \n\n    typedef void_ item30;\n    typedef T29 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,30 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<29> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector30<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<30> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector29<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<29> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector30<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<30> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector29<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<30>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item30 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<30> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<30> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<30> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<30> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<30> >\n{\n    template< typename Vector > struct apply\n        : long_<30>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<30> >\n    : size_impl< aux::vector_tag<30> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<30> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector30_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    >\nstruct vector21_c\n    : vector21<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 > \n >\n{\n    typedef vector21_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21\n    >\nstruct vector22_c\n    : vector22<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 > \n >\n{\n    typedef vector22_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22\n    >\nstruct vector23_c\n    : vector23<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >, integral_c<T\n        , C22> \n >\n{\n    typedef vector23_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23\n    >\nstruct vector24_c\n    : vector24<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 > \n >\n{\n    typedef vector24_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24\n    >\nstruct vector25_c\n    : vector25<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 > \n >\n{\n    typedef vector25_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25\n    >\nstruct vector26_c\n    : vector26<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >, integral_c<T\n        , C25> \n >\n{\n    typedef vector26_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26\n    >\nstruct vector27_c\n    : vector27<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 > \n >\n{\n    typedef vector27_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27\n    >\nstruct vector28_c\n    : vector28<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 > \n >\n{\n    typedef vector28_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28\n    >\nstruct vector29_c\n    : vector29<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >, integral_c<T\n        , C28> \n >\n{\n    typedef vector29_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29\n    >\nstruct vector30_c\n    : vector30<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 > \n >\n{\n    typedef vector30_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector40.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30\n    >\nstruct vector31\n{\n    typedef aux::vector_tag<31> tag;\n    typedef vector31 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    \n\n    typedef void_ item31;\n    typedef T30 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,31 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<30> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector31<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<31> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector30<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<30> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector31<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<31> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector30<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<31>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item31 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<31> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<31> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<31> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<31> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<31> >\n{\n    template< typename Vector > struct apply\n        : long_<31>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<31> >\n    : size_impl< aux::vector_tag<31> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<31> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31\n    >\nstruct vector32\n{\n    typedef aux::vector_tag<32> tag;\n    typedef vector32 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    \n\n    typedef void_ item32;\n    typedef T31 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,32 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<31> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector32<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<32> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector31<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<31> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector32<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<32> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector31<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<32>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item32 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<32> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<32> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<32> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<32> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<32> >\n{\n    template< typename Vector > struct apply\n        : long_<32>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<32> >\n    : size_impl< aux::vector_tag<32> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<32> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32\n    >\nstruct vector33\n{\n    typedef aux::vector_tag<33> tag;\n    typedef vector33 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    \n\n    typedef void_ item33;\n    typedef T32 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,33 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<32> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector33<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<33> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector32<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<32> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector33<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<33> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector32<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<33>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item33 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<33> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<33> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<33> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<33> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<33> >\n{\n    template< typename Vector > struct apply\n        : long_<33>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<33> >\n    : size_impl< aux::vector_tag<33> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<33> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33\n    >\nstruct vector34\n{\n    typedef aux::vector_tag<34> tag;\n    typedef vector34 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    \n\n    typedef void_ item34;\n    typedef T33 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,34 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<33> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector34<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<34> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector33<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<33> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector34<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<34> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector33<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<34>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item34 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<34> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<34> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<34> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<34> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<34> >\n{\n    template< typename Vector > struct apply\n        : long_<34>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<34> >\n    : size_impl< aux::vector_tag<34> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<34> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    >\nstruct vector35\n{\n    typedef aux::vector_tag<35> tag;\n    typedef vector35 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    \n\n    typedef void_ item35;\n    typedef T34 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,35 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<34> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector35<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<35> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector34<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<34> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector35<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<35> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector34<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<35>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item35 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<35> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<35> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<35> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<35> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<35> >\n{\n    template< typename Vector > struct apply\n        : long_<35>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<35> >\n    : size_impl< aux::vector_tag<35> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<35> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35\n    >\nstruct vector36\n{\n    typedef aux::vector_tag<36> tag;\n    typedef vector36 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    \n\n    typedef void_ item36;\n    typedef T35 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,36 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<35> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector36<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<36> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector35<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<35> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector36<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<36> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector35<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<36>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item36 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<36> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<36> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<36> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<36> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<36> >\n{\n    template< typename Vector > struct apply\n        : long_<36>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<36> >\n    : size_impl< aux::vector_tag<36> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<36> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36\n    >\nstruct vector37\n{\n    typedef aux::vector_tag<37> tag;\n    typedef vector37 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    \n\n    typedef void_ item37;\n    typedef T36 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,37 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<36> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector37<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<37> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector36<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<36> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector37<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<37> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector36<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<37>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item37 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<37> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<37> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<37> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<37> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<37> >\n{\n    template< typename Vector > struct apply\n        : long_<37>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<37> >\n    : size_impl< aux::vector_tag<37> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<37> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37\n    >\nstruct vector38\n{\n    typedef aux::vector_tag<38> tag;\n    typedef vector38 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    \n\n    typedef void_ item38;\n    typedef T37 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,38 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<37> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector38<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<38> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector37<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<37> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector38<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<38> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector37<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<38>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item38 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<38> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<38> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<38> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<38> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<38> >\n{\n    template< typename Vector > struct apply\n        : long_<38>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<38> >\n    : size_impl< aux::vector_tag<38> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<38> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38\n    >\nstruct vector39\n{\n    typedef aux::vector_tag<39> tag;\n    typedef vector39 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    \n\n    typedef void_ item39;\n    typedef T38 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,39 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<38> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector39<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<39> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector38<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<38> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector39<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<39> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector38<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<39>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item39 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<39> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<39> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<39> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<39> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<39> >\n{\n    template< typename Vector > struct apply\n        : long_<39>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<39> >\n    : size_impl< aux::vector_tag<39> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<39> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    >\nstruct vector40\n{\n    typedef aux::vector_tag<40> tag;\n    typedef vector40 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    \n\n    typedef void_ item40;\n    typedef T39 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,40 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<39> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector40<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<40> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector39<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<39> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector40<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<40> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector39<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<40>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item40 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<40> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<40> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<40> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<40> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<40> >\n{\n    template< typename Vector > struct apply\n        : long_<40>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<40> >\n    : size_impl< aux::vector_tag<40> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<40> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector40_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    >\nstruct vector31_c\n    : vector31<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 > \n >\n{\n    typedef vector31_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31\n    >\nstruct vector32_c\n    : vector32<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >, integral_c<T\n        , C31> \n >\n{\n    typedef vector32_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32\n    >\nstruct vector33_c\n    : vector33<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 > \n >\n{\n    typedef vector33_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33\n    >\nstruct vector34_c\n    : vector34<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 > \n >\n{\n    typedef vector34_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34\n    >\nstruct vector35_c\n    : vector35<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >, integral_c<T\n        , C34> \n >\n{\n    typedef vector35_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35\n    >\nstruct vector36_c\n    : vector36<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 > \n >\n{\n    typedef vector36_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36\n    >\nstruct vector37_c\n    : vector37<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 > \n >\n{\n    typedef vector37_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37\n    >\nstruct vector38_c\n    : vector38<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >, integral_c<T\n        , C37> \n >\n{\n    typedef vector38_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38\n    >\nstruct vector39_c\n    : vector39<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 > \n >\n{\n    typedef vector39_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39\n    >\nstruct vector40_c\n    : vector40<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 > \n >\n{\n    typedef vector40_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector50.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40\n    >\nstruct vector41\n{\n    typedef aux::vector_tag<41> tag;\n    typedef vector41 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    \n\n    typedef void_ item41;\n    typedef T40 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,41 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<40> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector41<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<41> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector40<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<40> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector41<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<41> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector40<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<41>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item41 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<41> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<41> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<41> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<41> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<41> >\n{\n    template< typename Vector > struct apply\n        : long_<41>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<41> >\n    : size_impl< aux::vector_tag<41> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<41> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41\n    >\nstruct vector42\n{\n    typedef aux::vector_tag<42> tag;\n    typedef vector42 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    \n\n    typedef void_ item42;\n    typedef T41 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,42 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<41> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector42<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<42> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector41<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<41> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector42<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<42> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector41<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<42>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item42 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<42> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<42> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<42> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<42> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<42> >\n{\n    template< typename Vector > struct apply\n        : long_<42>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<42> >\n    : size_impl< aux::vector_tag<42> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<42> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42\n    >\nstruct vector43\n{\n    typedef aux::vector_tag<43> tag;\n    typedef vector43 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    \n\n    typedef void_ item43;\n    typedef T42 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,43 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<42> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector43<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<43> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector42<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<42> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector43<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<43> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector42<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<43>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item43 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<43> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<43> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<43> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<43> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<43> >\n{\n    template< typename Vector > struct apply\n        : long_<43>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<43> >\n    : size_impl< aux::vector_tag<43> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<43> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43\n    >\nstruct vector44\n{\n    typedef aux::vector_tag<44> tag;\n    typedef vector44 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    \n\n    typedef void_ item44;\n    typedef T43 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,44 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<43> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector44<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<44> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector43<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<43> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector44<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<44> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector43<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<44>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item44 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<44> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<44> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<44> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<44> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<44> >\n{\n    template< typename Vector > struct apply\n        : long_<44>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<44> >\n    : size_impl< aux::vector_tag<44> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<44> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    >\nstruct vector45\n{\n    typedef aux::vector_tag<45> tag;\n    typedef vector45 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    \n\n    typedef void_ item45;\n    typedef T44 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,45 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<44> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector45<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<45> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector44<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<44> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector45<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<45> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector44<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<45>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item45 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<45> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<45> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<45> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<45> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<45> >\n{\n    template< typename Vector > struct apply\n        : long_<45>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<45> >\n    : size_impl< aux::vector_tag<45> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<45> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45\n    >\nstruct vector46\n{\n    typedef aux::vector_tag<46> tag;\n    typedef vector46 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    \n\n    typedef void_ item46;\n    typedef T45 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,46 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<45> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector46<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<46> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector45<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<45> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector46<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<46> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector45<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<46>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item46 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<46> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<46> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<46> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<46> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<46> >\n{\n    template< typename Vector > struct apply\n        : long_<46>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<46> >\n    : size_impl< aux::vector_tag<46> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<46> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46\n    >\nstruct vector47\n{\n    typedef aux::vector_tag<47> tag;\n    typedef vector47 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    typedef T46 item46;\n    \n\n    typedef void_ item47;\n    typedef T46 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,47 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<46> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector47<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<47> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector46<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45, typename Vector::item46\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<46> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector47<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<47> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector46<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<47>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item47 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<47> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<47> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<47> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<47> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<47> >\n{\n    template< typename Vector > struct apply\n        : long_<47>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<47> >\n    : size_impl< aux::vector_tag<47> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<47> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47\n    >\nstruct vector48\n{\n    typedef aux::vector_tag<48> tag;\n    typedef vector48 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    typedef T46 item46;\n    typedef T47 item47;\n    \n\n    typedef void_ item48;\n    typedef T47 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,48 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<47> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector48<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<48> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector47<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45, typename Vector::item46\n            , typename Vector::item47\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<47> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector48<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<48> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector47<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<48>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item48 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<48> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<48> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<48> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<48> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<48> >\n{\n    template< typename Vector > struct apply\n        : long_<48>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<48> >\n    : size_impl< aux::vector_tag<48> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<48> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48\n    >\nstruct vector49\n{\n    typedef aux::vector_tag<49> tag;\n    typedef vector49 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    typedef T46 item46;\n    typedef T47 item47;\n    typedef T48 item48;\n    \n\n    typedef void_ item49;\n    typedef T48 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,49 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<48> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector49<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<49> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector48<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45, typename Vector::item46\n            , typename Vector::item47, typename Vector::item48\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<48> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector49<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<49> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector48<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<49>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item49 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<49> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<49> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<49> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<49> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<49> >\n{\n    template< typename Vector > struct apply\n        : long_<49>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<49> >\n    : size_impl< aux::vector_tag<49> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<49> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48, typename T49\n    >\nstruct vector50\n{\n    typedef aux::vector_tag<50> tag;\n    typedef vector50 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    typedef T46 item46;\n    typedef T47 item47;\n    typedef T48 item48;\n    typedef T49 item49;\n    \n\n    typedef void_ item50;\n    typedef T49 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,50 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<49> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector50<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            , typename Vector::item48\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<50> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector49<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45, typename Vector::item46\n            , typename Vector::item47, typename Vector::item48\n            , typename Vector::item49\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<49> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector50<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            , typename Vector::item48\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<50> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector49<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            , typename Vector::item48\n            > type;\n    };\n};\n\nnamespace aux {\ntemplate<> struct v_at_impl<50>\n{\n    template< typename V_ > struct result_\n    {\n        typedef typename V_::item50 type;\n    };\n};\n\n}\n\ntemplate<>\nstruct at_impl< aux::vector_tag<50> >\n{\n    template< typename V_, typename N > struct apply\n    {\n        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>\n            ::template result_<V_>::type type;\n    };\n};\n\ntemplate<>\nstruct front_impl< aux::vector_tag<50> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\ntemplate<>\nstruct back_impl< aux::vector_tag<50> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<50> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\ntemplate<>\nstruct size_impl< aux::vector_tag<50> >\n{\n    template< typename Vector > struct apply\n        : long_<50>\n    {\n    };\n};\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag<50> >\n    : size_impl< aux::vector_tag<50> >\n{\n};\n\ntemplate<>\nstruct clear_impl< aux::vector_tag<50> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector50_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    >\nstruct vector41_c\n    : vector41<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >, integral_c<T\n        , C40> \n >\n{\n    typedef vector41_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41\n    >\nstruct vector42_c\n    : vector42<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 > \n >\n{\n    typedef vector42_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42\n    >\nstruct vector43_c\n    : vector43<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 > \n >\n{\n    typedef vector43_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43\n    >\nstruct vector44_c\n    : vector44<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >, integral_c<T\n        , C43> \n >\n{\n    typedef vector44_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44\n    >\nstruct vector45_c\n    : vector45<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 > \n >\n{\n    typedef vector45_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45\n    >\nstruct vector46_c\n    : vector46<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 > \n >\n{\n    typedef vector46_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46\n    >\nstruct vector47_c\n    : vector47<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >, integral_c<T\n        , C46> \n >\n{\n    typedef vector47_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47\n    >\nstruct vector48_c\n    : vector48<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >\n        , integral_c< T,C46 >, integral_c< T,C47 > \n >\n{\n    typedef vector48_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48\n    >\nstruct vector49_c\n    : vector49<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >\n        , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 > \n >\n{\n    typedef vector49_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49\n    >\nstruct vector50_c\n    : vector50<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >\n        , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 >, integral_c<T\n        , C49> \n >\n{\n    typedef vector50_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename V >\nstruct v_at< V,0 >\n{\n    typedef typename V::item0 type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector1\n{\n    typedef aux::vector_tag<1> tag;\n    typedef vector1 type;\n    typedef T0 item0;\n    typedef void_ item1;\n    typedef T0 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,1 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<0> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector1<\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<1> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<\n             \n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<0> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector1<\n             \n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<1> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<\n             \n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,1 >\n{\n    typedef typename V::item1 type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector2\n{\n    typedef aux::vector_tag<2> tag;\n    typedef vector2 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    \n\n    typedef void_ item2;\n    typedef T1 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,2 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<1> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector2<\n              T\n              ,\n              typename Vector::item0\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<2> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector1<\n              typename Vector::item1\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<1> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector2<\n              typename Vector::item0\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<2> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector1<\n              typename Vector::item0\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,2 >\n{\n    typedef typename V::item2 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector3\n{\n    typedef aux::vector_tag<3> tag;\n    typedef vector3 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    \n\n    typedef void_ item3;\n    typedef T2 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,3 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<2> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector3<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<3> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector2<\n              typename Vector::item1, typename Vector::item2\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<2> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector3<\n              typename Vector::item0, typename Vector::item1\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<3> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector2<\n              typename Vector::item0, typename Vector::item1\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,3 >\n{\n    typedef typename V::item3 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector4\n{\n    typedef aux::vector_tag<4> tag;\n    typedef vector4 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    \n\n    typedef void_ item4;\n    typedef T3 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,4 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<3> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector4<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<4> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector3<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<3> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector4<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<4> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector3<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,4 >\n{\n    typedef typename V::item4 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector5\n{\n    typedef aux::vector_tag<5> tag;\n    typedef vector5 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    \n\n    typedef void_ item5;\n    typedef T4 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,5 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<4> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector5<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<5> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector4<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<4> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector5<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<5> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector4<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,5 >\n{\n    typedef typename V::item5 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector6\n{\n    typedef aux::vector_tag<6> tag;\n    typedef vector6 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    \n\n    typedef void_ item6;\n    typedef T5 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,6 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<5> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector6<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<6> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector5<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<5> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector6<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<6> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector5<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,6 >\n{\n    typedef typename V::item6 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector7\n{\n    typedef aux::vector_tag<7> tag;\n    typedef vector7 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    \n\n    typedef void_ item7;\n    typedef T6 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,7 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<6> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector7<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<7> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector6<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<6> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector7<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<7> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector6<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,7 >\n{\n    typedef typename V::item7 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector8\n{\n    typedef aux::vector_tag<8> tag;\n    typedef vector8 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    \n\n    typedef void_ item8;\n    typedef T7 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,8 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<7> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector8<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<8> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector7<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<7> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector8<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<8> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector7<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,8 >\n{\n    typedef typename V::item8 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector9\n{\n    typedef aux::vector_tag<9> tag;\n    typedef vector9 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    \n\n    typedef void_ item9;\n    typedef T8 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,9 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<8> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector9<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<9> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector8<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<8> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector9<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<9> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector8<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,9 >\n{\n    typedef typename V::item9 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector10\n{\n    typedef aux::vector_tag<10> tag;\n    typedef vector10 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    \n\n    typedef void_ item10;\n    typedef T9 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,10 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<9> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector10<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<10> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector9<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<9> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector10<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<10> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector9<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,10 >\n{\n    typedef typename V::item10 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector10_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0\n    >\nstruct vector1_c\n    : vector1< integral_c< T,C0 > >\n{\n    typedef vector1_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1\n    >\nstruct vector2_c\n    : vector2< integral_c< T,C0 >, integral_c< T,C1 > >\n{\n    typedef vector2_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2\n    >\nstruct vector3_c\n    : vector3< integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 > >\n{\n    typedef vector3_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3\n    >\nstruct vector4_c\n    : vector4<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >, integral_c<T\n        , C3> \n >\n{\n    typedef vector4_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4\n    >\nstruct vector5_c\n    : vector5<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 > \n >\n{\n    typedef vector5_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5\n    >\nstruct vector6_c\n    : vector6<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 > \n >\n{\n    typedef vector6_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6\n    >\nstruct vector7_c\n    : vector7<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c<T\n        , C6> \n >\n{\n    typedef vector7_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7\n    >\nstruct vector8_c\n    : vector8<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 > \n >\n{\n    typedef vector8_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8\n    >\nstruct vector9_c\n    : vector9<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 > \n >\n{\n    typedef vector9_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9\n    >\nstruct vector10_c\n    : vector10<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 > \n >\n{\n    typedef vector10_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector11\n{\n    typedef aux::vector_tag<11> tag;\n    typedef vector11 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    \n\n    typedef void_ item11;\n    typedef T10 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,11 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<10> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector11<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<11> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector10<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<10> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector11<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<11> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector10<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,11 >\n{\n    typedef typename V::item11 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector12\n{\n    typedef aux::vector_tag<12> tag;\n    typedef vector12 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    \n\n    typedef void_ item12;\n    typedef T11 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,12 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<11> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector12<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<12> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector11<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<11> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector12<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<12> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector11<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,12 >\n{\n    typedef typename V::item12 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector13\n{\n    typedef aux::vector_tag<13> tag;\n    typedef vector13 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    \n\n    typedef void_ item13;\n    typedef T12 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,13 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<12> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector13<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<13> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector12<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<12> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector13<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<13> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector12<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,13 >\n{\n    typedef typename V::item13 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector14\n{\n    typedef aux::vector_tag<14> tag;\n    typedef vector14 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    \n\n    typedef void_ item14;\n    typedef T13 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,14 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<13> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector14<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<14> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector13<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<13> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector14<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<14> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector13<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,14 >\n{\n    typedef typename V::item14 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector15\n{\n    typedef aux::vector_tag<15> tag;\n    typedef vector15 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    \n\n    typedef void_ item15;\n    typedef T14 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,15 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<14> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector15<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<15> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector14<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<14> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector15<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<15> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector14<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,15 >\n{\n    typedef typename V::item15 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector16\n{\n    typedef aux::vector_tag<16> tag;\n    typedef vector16 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    \n\n    typedef void_ item16;\n    typedef T15 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,16 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<15> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector16<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<16> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector15<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<15> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector16<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<16> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector15<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,16 >\n{\n    typedef typename V::item16 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector17\n{\n    typedef aux::vector_tag<17> tag;\n    typedef vector17 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    \n\n    typedef void_ item17;\n    typedef T16 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,17 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<16> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector17<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<17> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector16<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<16> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector17<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<17> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector16<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,17 >\n{\n    typedef typename V::item17 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector18\n{\n    typedef aux::vector_tag<18> tag;\n    typedef vector18 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    \n\n    typedef void_ item18;\n    typedef T17 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,18 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<17> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector18<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<18> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector17<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<17> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector18<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<18> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector17<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,18 >\n{\n    typedef typename V::item18 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector19\n{\n    typedef aux::vector_tag<19> tag;\n    typedef vector19 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    \n\n    typedef void_ item19;\n    typedef T18 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,19 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<18> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector19<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<19> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector18<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<18> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector19<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<19> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector18<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,19 >\n{\n    typedef typename V::item19 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector20\n{\n    typedef aux::vector_tag<20> tag;\n    typedef vector20 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    \n\n    typedef void_ item20;\n    typedef T19 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,20 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<19> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector20<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<20> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector19<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<19> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector20<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<20> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector19<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,20 >\n{\n    typedef typename V::item20 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector20_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    >\nstruct vector11_c\n    : vector11<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >, integral_c<T\n        , C10> \n >\n{\n    typedef vector11_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11\n    >\nstruct vector12_c\n    : vector12<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 > \n >\n{\n    typedef vector12_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12\n    >\nstruct vector13_c\n    : vector13<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 > \n >\n{\n    typedef vector13_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13\n    >\nstruct vector14_c\n    : vector14<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >, integral_c<T\n        , C13> \n >\n{\n    typedef vector14_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14\n    >\nstruct vector15_c\n    : vector15<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 > \n >\n{\n    typedef vector15_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15\n    >\nstruct vector16_c\n    : vector16<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 > \n >\n{\n    typedef vector16_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16\n    >\nstruct vector17_c\n    : vector17<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >, integral_c<T\n        , C16> \n >\n{\n    typedef vector17_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17\n    >\nstruct vector18_c\n    : vector18<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 > \n >\n{\n    typedef vector18_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18\n    >\nstruct vector19_c\n    : vector19<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 > \n >\n{\n    typedef vector19_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19\n    >\nstruct vector20_c\n    : vector20<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >, integral_c<T\n        , C19> \n >\n{\n    typedef vector20_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector30.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20\n    >\nstruct vector21\n{\n    typedef aux::vector_tag<21> tag;\n    typedef vector21 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    \n\n    typedef void_ item21;\n    typedef T20 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,21 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<20> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector21<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<21> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector20<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<20> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector21<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<21> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector20<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,21 >\n{\n    typedef typename V::item21 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21\n    >\nstruct vector22\n{\n    typedef aux::vector_tag<22> tag;\n    typedef vector22 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    \n\n    typedef void_ item22;\n    typedef T21 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,22 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<21> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector22<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<22> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector21<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<21> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector22<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<22> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector21<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,22 >\n{\n    typedef typename V::item22 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22\n    >\nstruct vector23\n{\n    typedef aux::vector_tag<23> tag;\n    typedef vector23 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    \n\n    typedef void_ item23;\n    typedef T22 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,23 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<22> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector23<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<23> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector22<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<22> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector23<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<23> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector22<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,23 >\n{\n    typedef typename V::item23 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23\n    >\nstruct vector24\n{\n    typedef aux::vector_tag<24> tag;\n    typedef vector24 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    \n\n    typedef void_ item24;\n    typedef T23 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,24 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<23> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector24<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<24> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector23<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<23> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector24<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<24> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector23<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,24 >\n{\n    typedef typename V::item24 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    >\nstruct vector25\n{\n    typedef aux::vector_tag<25> tag;\n    typedef vector25 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    \n\n    typedef void_ item25;\n    typedef T24 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,25 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<24> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector25<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<25> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector24<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<24> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector25<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<25> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector24<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,25 >\n{\n    typedef typename V::item25 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25\n    >\nstruct vector26\n{\n    typedef aux::vector_tag<26> tag;\n    typedef vector26 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    \n\n    typedef void_ item26;\n    typedef T25 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,26 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<25> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector26<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<26> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector25<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<25> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector26<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<26> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector25<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,26 >\n{\n    typedef typename V::item26 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26\n    >\nstruct vector27\n{\n    typedef aux::vector_tag<27> tag;\n    typedef vector27 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    \n\n    typedef void_ item27;\n    typedef T26 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,27 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<26> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector27<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<27> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector26<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<26> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector27<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<27> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector26<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,27 >\n{\n    typedef typename V::item27 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27\n    >\nstruct vector28\n{\n    typedef aux::vector_tag<28> tag;\n    typedef vector28 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    \n\n    typedef void_ item28;\n    typedef T27 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,28 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<27> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector28<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<28> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector27<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<27> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector28<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<28> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector27<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,28 >\n{\n    typedef typename V::item28 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28\n    >\nstruct vector29\n{\n    typedef aux::vector_tag<29> tag;\n    typedef vector29 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    \n\n    typedef void_ item29;\n    typedef T28 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,29 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<28> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector29<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<29> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector28<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<28> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector29<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<29> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector28<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,29 >\n{\n    typedef typename V::item29 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    >\nstruct vector30\n{\n    typedef aux::vector_tag<30> tag;\n    typedef vector30 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    \n\n    typedef void_ item30;\n    typedef T29 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,30 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<29> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector30<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<30> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector29<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<29> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector30<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<30> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector29<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,30 >\n{\n    typedef typename V::item30 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector30_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    >\nstruct vector21_c\n    : vector21<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 > \n >\n{\n    typedef vector21_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21\n    >\nstruct vector22_c\n    : vector22<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 > \n >\n{\n    typedef vector22_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22\n    >\nstruct vector23_c\n    : vector23<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >, integral_c<T\n        , C22> \n >\n{\n    typedef vector23_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23\n    >\nstruct vector24_c\n    : vector24<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 > \n >\n{\n    typedef vector24_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24\n    >\nstruct vector25_c\n    : vector25<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 > \n >\n{\n    typedef vector25_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25\n    >\nstruct vector26_c\n    : vector26<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >, integral_c<T\n        , C25> \n >\n{\n    typedef vector26_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26\n    >\nstruct vector27_c\n    : vector27<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 > \n >\n{\n    typedef vector27_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27\n    >\nstruct vector28_c\n    : vector28<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 > \n >\n{\n    typedef vector28_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28\n    >\nstruct vector29_c\n    : vector29<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >, integral_c<T\n        , C28> \n >\n{\n    typedef vector29_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29\n    >\nstruct vector30_c\n    : vector30<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 > \n >\n{\n    typedef vector30_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector40.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30\n    >\nstruct vector31\n{\n    typedef aux::vector_tag<31> tag;\n    typedef vector31 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    \n\n    typedef void_ item31;\n    typedef T30 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,31 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<30> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector31<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<31> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector30<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<30> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector31<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<31> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector30<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,31 >\n{\n    typedef typename V::item31 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31\n    >\nstruct vector32\n{\n    typedef aux::vector_tag<32> tag;\n    typedef vector32 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    \n\n    typedef void_ item32;\n    typedef T31 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,32 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<31> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector32<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<32> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector31<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<31> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector32<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<32> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector31<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,32 >\n{\n    typedef typename V::item32 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32\n    >\nstruct vector33\n{\n    typedef aux::vector_tag<33> tag;\n    typedef vector33 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    \n\n    typedef void_ item33;\n    typedef T32 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,33 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<32> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector33<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<33> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector32<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<32> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector33<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<33> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector32<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,33 >\n{\n    typedef typename V::item33 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33\n    >\nstruct vector34\n{\n    typedef aux::vector_tag<34> tag;\n    typedef vector34 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    \n\n    typedef void_ item34;\n    typedef T33 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,34 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<33> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector34<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<34> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector33<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<33> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector34<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<34> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector33<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,34 >\n{\n    typedef typename V::item34 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    >\nstruct vector35\n{\n    typedef aux::vector_tag<35> tag;\n    typedef vector35 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    \n\n    typedef void_ item35;\n    typedef T34 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,35 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<34> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector35<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<35> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector34<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<34> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector35<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<35> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector34<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,35 >\n{\n    typedef typename V::item35 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35\n    >\nstruct vector36\n{\n    typedef aux::vector_tag<36> tag;\n    typedef vector36 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    \n\n    typedef void_ item36;\n    typedef T35 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,36 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<35> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector36<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<36> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector35<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<35> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector36<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<36> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector35<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,36 >\n{\n    typedef typename V::item36 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36\n    >\nstruct vector37\n{\n    typedef aux::vector_tag<37> tag;\n    typedef vector37 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    \n\n    typedef void_ item37;\n    typedef T36 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,37 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<36> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector37<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<37> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector36<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<36> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector37<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<37> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector36<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,37 >\n{\n    typedef typename V::item37 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37\n    >\nstruct vector38\n{\n    typedef aux::vector_tag<38> tag;\n    typedef vector38 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    \n\n    typedef void_ item38;\n    typedef T37 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,38 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<37> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector38<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<38> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector37<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<37> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector38<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<38> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector37<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,38 >\n{\n    typedef typename V::item38 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38\n    >\nstruct vector39\n{\n    typedef aux::vector_tag<39> tag;\n    typedef vector39 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    \n\n    typedef void_ item39;\n    typedef T38 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,39 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<38> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector39<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<39> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector38<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<38> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector39<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<39> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector38<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,39 >\n{\n    typedef typename V::item39 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    >\nstruct vector40\n{\n    typedef aux::vector_tag<40> tag;\n    typedef vector40 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    \n\n    typedef void_ item40;\n    typedef T39 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,40 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<39> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector40<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<40> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector39<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<39> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector40<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<40> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector39<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,40 >\n{\n    typedef typename V::item40 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector40_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    >\nstruct vector31_c\n    : vector31<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 > \n >\n{\n    typedef vector31_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31\n    >\nstruct vector32_c\n    : vector32<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >, integral_c<T\n        , C31> \n >\n{\n    typedef vector32_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32\n    >\nstruct vector33_c\n    : vector33<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 > \n >\n{\n    typedef vector33_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33\n    >\nstruct vector34_c\n    : vector34<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 > \n >\n{\n    typedef vector34_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34\n    >\nstruct vector35_c\n    : vector35<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >, integral_c<T\n        , C34> \n >\n{\n    typedef vector35_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35\n    >\nstruct vector36_c\n    : vector36<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 > \n >\n{\n    typedef vector36_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36\n    >\nstruct vector37_c\n    : vector37<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 > \n >\n{\n    typedef vector37_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37\n    >\nstruct vector38_c\n    : vector38<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >, integral_c<T\n        , C37> \n >\n{\n    typedef vector38_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38\n    >\nstruct vector39_c\n    : vector39<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 > \n >\n{\n    typedef vector39_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39\n    >\nstruct vector40_c\n    : vector40<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 > \n >\n{\n    typedef vector40_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector50.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40\n    >\nstruct vector41\n{\n    typedef aux::vector_tag<41> tag;\n    typedef vector41 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    \n\n    typedef void_ item41;\n    typedef T40 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,41 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<40> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector41<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<41> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector40<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<40> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector41<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<41> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector40<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,41 >\n{\n    typedef typename V::item41 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41\n    >\nstruct vector42\n{\n    typedef aux::vector_tag<42> tag;\n    typedef vector42 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    \n\n    typedef void_ item42;\n    typedef T41 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,42 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<41> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector42<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<42> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector41<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<41> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector42<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<42> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector41<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,42 >\n{\n    typedef typename V::item42 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42\n    >\nstruct vector43\n{\n    typedef aux::vector_tag<43> tag;\n    typedef vector43 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    \n\n    typedef void_ item43;\n    typedef T42 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,43 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<42> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector43<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<43> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector42<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<42> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector43<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<43> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector42<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,43 >\n{\n    typedef typename V::item43 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43\n    >\nstruct vector44\n{\n    typedef aux::vector_tag<44> tag;\n    typedef vector44 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    \n\n    typedef void_ item44;\n    typedef T43 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,44 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<43> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector44<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<44> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector43<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<43> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector44<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<44> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector43<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,44 >\n{\n    typedef typename V::item44 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    >\nstruct vector45\n{\n    typedef aux::vector_tag<45> tag;\n    typedef vector45 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    \n\n    typedef void_ item45;\n    typedef T44 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,45 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<44> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector45<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<45> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector44<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<44> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector45<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<45> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector44<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,45 >\n{\n    typedef typename V::item45 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45\n    >\nstruct vector46\n{\n    typedef aux::vector_tag<46> tag;\n    typedef vector46 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    \n\n    typedef void_ item46;\n    typedef T45 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,46 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<45> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector46<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<46> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector45<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<45> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector46<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<46> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector45<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,46 >\n{\n    typedef typename V::item46 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46\n    >\nstruct vector47\n{\n    typedef aux::vector_tag<47> tag;\n    typedef vector47 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    typedef T46 item46;\n    \n\n    typedef void_ item47;\n    typedef T46 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,47 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<46> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector47<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<47> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector46<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45, typename Vector::item46\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<46> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector47<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<47> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector46<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,47 >\n{\n    typedef typename V::item47 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47\n    >\nstruct vector48\n{\n    typedef aux::vector_tag<48> tag;\n    typedef vector48 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    typedef T46 item46;\n    typedef T47 item47;\n    \n\n    typedef void_ item48;\n    typedef T47 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,48 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<47> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector48<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<48> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector47<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45, typename Vector::item46\n            , typename Vector::item47\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<47> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector48<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<48> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector47<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,48 >\n{\n    typedef typename V::item48 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48\n    >\nstruct vector49\n{\n    typedef aux::vector_tag<49> tag;\n    typedef vector49 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    typedef T46 item46;\n    typedef T47 item47;\n    typedef T48 item48;\n    \n\n    typedef void_ item49;\n    typedef T48 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,49 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<48> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector49<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<49> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector48<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45, typename Vector::item46\n            , typename Vector::item47, typename Vector::item48\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<48> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector49<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<49> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector48<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,49 >\n{\n    typedef typename V::item49 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48, typename T49\n    >\nstruct vector50\n{\n    typedef aux::vector_tag<50> tag;\n    typedef vector50 type;\n    typedef T0 item0;\n    typedef T1 item1;\n    typedef T2 item2;\n    typedef T3 item3;\n    typedef T4 item4;\n    typedef T5 item5;\n    typedef T6 item6;\n    typedef T7 item7;\n    typedef T8 item8;\n    typedef T9 item9;\n    typedef T10 item10;\n    typedef T11 item11;\n    typedef T12 item12;\n    typedef T13 item13;\n    typedef T14 item14;\n    typedef T15 item15;\n    typedef T16 item16;\n    typedef T17 item17;\n    typedef T18 item18;\n    typedef T19 item19;\n    typedef T20 item20;\n    typedef T21 item21;\n    typedef T22 item22;\n    typedef T23 item23;\n    typedef T24 item24;\n    typedef T25 item25;\n    typedef T26 item26;\n    typedef T27 item27;\n    typedef T28 item28;\n    typedef T29 item29;\n    typedef T30 item30;\n    typedef T31 item31;\n    typedef T32 item32;\n    typedef T33 item33;\n    typedef T34 item34;\n    typedef T35 item35;\n    typedef T36 item36;\n    typedef T37 item37;\n    typedef T38 item38;\n    typedef T39 item39;\n    typedef T40 item40;\n    typedef T41 item41;\n    typedef T42 item42;\n    typedef T43 item43;\n    typedef T44 item44;\n    typedef T45 item45;\n    typedef T46 item46;\n    typedef T47 item47;\n    typedef T48 item48;\n    typedef T49 item49;\n    \n\n    typedef void_ item50;\n    typedef T49 back;\n    typedef v_iter< type,0 > begin;\n    typedef v_iter< type,50 > end;\n};\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag<49> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector50<\n              T\n              ,\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            , typename Vector::item48\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag<50> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector49<\n              typename Vector::item1, typename Vector::item2\n            , typename Vector::item3, typename Vector::item4\n            , typename Vector::item5, typename Vector::item6\n            , typename Vector::item7, typename Vector::item8\n            , typename Vector::item9, typename Vector::item10\n            , typename Vector::item11, typename Vector::item12\n            , typename Vector::item13, typename Vector::item14\n            , typename Vector::item15, typename Vector::item16\n            , typename Vector::item17, typename Vector::item18\n            , typename Vector::item19, typename Vector::item20\n            , typename Vector::item21, typename Vector::item22\n            , typename Vector::item23, typename Vector::item24\n            , typename Vector::item25, typename Vector::item26\n            , typename Vector::item27, typename Vector::item28\n            , typename Vector::item29, typename Vector::item30\n            , typename Vector::item31, typename Vector::item32\n            , typename Vector::item33, typename Vector::item34\n            , typename Vector::item35, typename Vector::item36\n            , typename Vector::item37, typename Vector::item38\n            , typename Vector::item39, typename Vector::item40\n            , typename Vector::item41, typename Vector::item42\n            , typename Vector::item43, typename Vector::item44\n            , typename Vector::item45, typename Vector::item46\n            , typename Vector::item47, typename Vector::item48\n            , typename Vector::item49\n            > type;\n    };\n};\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag<49> >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef vector50<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            , typename Vector::item48\n              ,\n              T\n            > type;\n    };\n};\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag<50> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector49<\n              typename Vector::item0, typename Vector::item1\n            , typename Vector::item2, typename Vector::item3\n            , typename Vector::item4, typename Vector::item5\n            , typename Vector::item6, typename Vector::item7\n            , typename Vector::item8, typename Vector::item9\n            , typename Vector::item10, typename Vector::item11\n            , typename Vector::item12, typename Vector::item13\n            , typename Vector::item14, typename Vector::item15\n            , typename Vector::item16, typename Vector::item17\n            , typename Vector::item18, typename Vector::item19\n            , typename Vector::item20, typename Vector::item21\n            , typename Vector::item22, typename Vector::item23\n            , typename Vector::item24, typename Vector::item25\n            , typename Vector::item26, typename Vector::item27\n            , typename Vector::item28, typename Vector::item29\n            , typename Vector::item30, typename Vector::item31\n            , typename Vector::item32, typename Vector::item33\n            , typename Vector::item34, typename Vector::item35\n            , typename Vector::item36, typename Vector::item37\n            , typename Vector::item38, typename Vector::item39\n            , typename Vector::item40, typename Vector::item41\n            , typename Vector::item42, typename Vector::item43\n            , typename Vector::item44, typename Vector::item45\n            , typename Vector::item46, typename Vector::item47\n            , typename Vector::item48\n            > type;\n    };\n};\n\ntemplate< typename V >\nstruct v_at< V,50 >\n{\n    typedef typename V::item50 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector50_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    >\nstruct vector41_c\n    : vector41<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >, integral_c<T\n        , C40> \n >\n{\n    typedef vector41_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41\n    >\nstruct vector42_c\n    : vector42<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 > \n >\n{\n    typedef vector42_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42\n    >\nstruct vector43_c\n    : vector43<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 > \n >\n{\n    typedef vector43_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43\n    >\nstruct vector44_c\n    : vector44<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >, integral_c<T\n        , C43> \n >\n{\n    typedef vector44_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44\n    >\nstruct vector45_c\n    : vector45<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 > \n >\n{\n    typedef vector45_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45\n    >\nstruct vector46_c\n    : vector46<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 > \n >\n{\n    typedef vector46_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46\n    >\nstruct vector47_c\n    : vector47<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >, integral_c<T\n        , C46> \n >\n{\n    typedef vector47_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47\n    >\nstruct vector48_c\n    : vector48<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >\n        , integral_c< T,C46 >, integral_c< T,C47 > \n >\n{\n    typedef vector48_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48\n    >\nstruct vector49_c\n    : vector49<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >\n        , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 > \n >\n{\n    typedef vector49_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49\n    >\nstruct vector50_c\n    : vector50<\n          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >\n        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >\n        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >\n        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >\n        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >\n        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >\n        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >\n        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >\n        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >\n        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >\n        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >\n        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >\n        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >\n        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >\n        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >\n        , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 >, integral_c<T\n        , C49> \n >\n{\n    typedef vector50_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0\n    >\nstruct vector1\n    : v_item<\n          T0\n        , vector0<  >\n        >\n{\n    typedef vector1 type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector2\n    : v_item<\n          T1\n        , vector1<T0>\n        >\n{\n    typedef vector2 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector3\n    : v_item<\n          T2\n        , vector2< T0,T1 >\n        >\n{\n    typedef vector3 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector4\n    : v_item<\n          T3\n        , vector3< T0,T1,T2 >\n        >\n{\n    typedef vector4 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector5\n    : v_item<\n          T4\n        , vector4< T0,T1,T2,T3 >\n        >\n{\n    typedef vector5 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector6\n    : v_item<\n          T5\n        , vector5< T0,T1,T2,T3,T4 >\n        >\n{\n    typedef vector6 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector7\n    : v_item<\n          T6\n        , vector6< T0,T1,T2,T3,T4,T5 >\n        >\n{\n    typedef vector7 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector8\n    : v_item<\n          T7\n        , vector7< T0,T1,T2,T3,T4,T5,T6 >\n        >\n{\n    typedef vector8 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector9\n    : v_item<\n          T8\n        , vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n        >\n{\n    typedef vector9 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector10\n    : v_item<\n          T9\n        , vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n        >\n{\n    typedef vector10 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector10_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0\n    >\nstruct vector1_c\n    : v_item<\n          integral_c< T,C0 >\n        , vector0_c<T>\n        >\n{\n    typedef vector1_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1\n    >\nstruct vector2_c\n    : v_item<\n          integral_c< T,C1 >\n        , vector1_c< T,C0 >\n        >\n{\n    typedef vector2_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2\n    >\nstruct vector3_c\n    : v_item<\n          integral_c< T,C2 >\n        , vector2_c< T,C0,C1 >\n        >\n{\n    typedef vector3_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3\n    >\nstruct vector4_c\n    : v_item<\n          integral_c< T,C3 >\n        , vector3_c< T,C0,C1,C2 >\n        >\n{\n    typedef vector4_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4\n    >\nstruct vector5_c\n    : v_item<\n          integral_c< T,C4 >\n        , vector4_c< T,C0,C1,C2,C3 >\n        >\n{\n    typedef vector5_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5\n    >\nstruct vector6_c\n    : v_item<\n          integral_c< T,C5 >\n        , vector5_c< T,C0,C1,C2,C3,C4 >\n        >\n{\n    typedef vector6_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6\n    >\nstruct vector7_c\n    : v_item<\n          integral_c< T,C6 >\n        , vector6_c< T,C0,C1,C2,C3,C4,C5 >\n        >\n{\n    typedef vector7_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7\n    >\nstruct vector8_c\n    : v_item<\n          integral_c< T,C7 >\n        , vector7_c< T,C0,C1,C2,C3,C4,C5,C6 >\n        >\n{\n    typedef vector8_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8\n    >\nstruct vector9_c\n    : v_item<\n          integral_c< T,C8 >\n        , vector8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >\n        >\n{\n    typedef vector9_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9\n    >\nstruct vector10_c\n    : v_item<\n          integral_c< T,C9 >\n        , vector9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >\n        >\n{\n    typedef vector10_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector11\n    : v_item<\n          T10\n        , vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n        >\n{\n    typedef vector11 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector12\n    : v_item<\n          T11\n        , vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n        >\n{\n    typedef vector12 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector13\n    : v_item<\n          T12\n        , vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n        >\n{\n    typedef vector13 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector14\n    : v_item<\n          T13\n        , vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n        >\n{\n    typedef vector14 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector15\n    : v_item<\n          T14\n        , vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n        >\n{\n    typedef vector15 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector16\n    : v_item<\n          T15\n        , vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >\n        >\n{\n    typedef vector16 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector17\n    : v_item<\n          T16\n        , vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >\n        >\n{\n    typedef vector17 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector18\n    : v_item<\n          T17\n        , vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >\n        >\n{\n    typedef vector18 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector19\n    : v_item<\n          T18\n        , vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >\n        >\n{\n    typedef vector19 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector20\n    : v_item<\n          T19\n        , vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >\n        >\n{\n    typedef vector20 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector20_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    >\nstruct vector11_c\n    : v_item<\n          integral_c< T,C10 >\n        , vector10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >\n        >\n{\n    typedef vector11_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11\n    >\nstruct vector12_c\n    : v_item<\n          integral_c< T,C11 >\n        , vector11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >\n        >\n{\n    typedef vector12_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12\n    >\nstruct vector13_c\n    : v_item<\n          integral_c< T,C12 >\n        , vector12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >\n        >\n{\n    typedef vector13_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13\n    >\nstruct vector14_c\n    : v_item<\n          integral_c< T,C13 >\n        , vector13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >\n        >\n{\n    typedef vector14_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14\n    >\nstruct vector15_c\n    : v_item<\n          integral_c< T,C14 >\n        , vector14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >\n        >\n{\n    typedef vector15_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15\n    >\nstruct vector16_c\n    : v_item<\n          integral_c< T,C15 >\n        , vector15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >\n        >\n{\n    typedef vector16_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16\n    >\nstruct vector17_c\n    : v_item<\n          integral_c< T,C16 >\n        , vector16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >\n        >\n{\n    typedef vector17_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17\n    >\nstruct vector18_c\n    : v_item<\n          integral_c< T,C17 >\n        , vector17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >\n        >\n{\n    typedef vector18_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18\n    >\nstruct vector19_c\n    : v_item<\n          integral_c< T,C18 >\n        , vector18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >\n        >\n{\n    typedef vector19_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19\n    >\nstruct vector20_c\n    : v_item<\n          integral_c< T,C19 >\n        , vector19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >\n        >\n{\n    typedef vector20_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector30.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20\n    >\nstruct vector21\n    : v_item<\n          T20\n        , vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >\n        >\n{\n    typedef vector21 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21\n    >\nstruct vector22\n    : v_item<\n          T21\n        , vector21< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20 >\n        >\n{\n    typedef vector22 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22\n    >\nstruct vector23\n    : v_item<\n          T22\n        , vector22< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21 >\n        >\n{\n    typedef vector23 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23\n    >\nstruct vector24\n    : v_item<\n          T23\n        , vector23< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22 >\n        >\n{\n    typedef vector24 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    >\nstruct vector25\n    : v_item<\n          T24\n        , vector24< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23 >\n        >\n{\n    typedef vector25 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25\n    >\nstruct vector26\n    : v_item<\n          T25\n        , vector25< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24 >\n        >\n{\n    typedef vector26 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26\n    >\nstruct vector27\n    : v_item<\n          T26\n        , vector26< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25 >\n        >\n{\n    typedef vector27 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27\n    >\nstruct vector28\n    : v_item<\n          T27\n        , vector27< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26 >\n        >\n{\n    typedef vector28 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28\n    >\nstruct vector29\n    : v_item<\n          T28\n        , vector28< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27 >\n        >\n{\n    typedef vector29 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    >\nstruct vector30\n    : v_item<\n          T29\n        , vector29< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28 >\n        >\n{\n    typedef vector30 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector30_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    >\nstruct vector21_c\n    : v_item<\n          integral_c< T,C20 >\n        , vector20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >\n        >\n{\n    typedef vector21_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21\n    >\nstruct vector22_c\n    : v_item<\n          integral_c< T,C21 >\n        , vector21_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 >\n        >\n{\n    typedef vector22_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22\n    >\nstruct vector23_c\n    : v_item<\n          integral_c< T,C22 >\n        , vector22_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 >\n        >\n{\n    typedef vector23_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23\n    >\nstruct vector24_c\n    : v_item<\n          integral_c< T,C23 >\n        , vector23_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 >\n        >\n{\n    typedef vector24_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24\n    >\nstruct vector25_c\n    : v_item<\n          integral_c< T,C24 >\n        , vector24_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 >\n        >\n{\n    typedef vector25_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25\n    >\nstruct vector26_c\n    : v_item<\n          integral_c< T,C25 >\n        , vector25_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24 >\n        >\n{\n    typedef vector26_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26\n    >\nstruct vector27_c\n    : v_item<\n          integral_c< T,C26 >\n        , vector26_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25 >\n        >\n{\n    typedef vector27_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27\n    >\nstruct vector28_c\n    : v_item<\n          integral_c< T,C27 >\n        , vector27_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26 >\n        >\n{\n    typedef vector28_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28\n    >\nstruct vector29_c\n    : v_item<\n          integral_c< T,C28 >\n        , vector28_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27 >\n        >\n{\n    typedef vector29_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29\n    >\nstruct vector30_c\n    : v_item<\n          integral_c< T,C29 >\n        , vector29_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28 >\n        >\n{\n    typedef vector30_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector40.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30\n    >\nstruct vector31\n    : v_item<\n          T30\n        , vector30< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29 >\n        >\n{\n    typedef vector31 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31\n    >\nstruct vector32\n    : v_item<\n          T31\n        , vector31< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30 >\n        >\n{\n    typedef vector32 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32\n    >\nstruct vector33\n    : v_item<\n          T32\n        , vector32< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31 >\n        >\n{\n    typedef vector33 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33\n    >\nstruct vector34\n    : v_item<\n          T33\n        , vector33< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32 >\n        >\n{\n    typedef vector34 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    >\nstruct vector35\n    : v_item<\n          T34\n        , vector34< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33 >\n        >\n{\n    typedef vector35 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35\n    >\nstruct vector36\n    : v_item<\n          T35\n        , vector35< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34 >\n        >\n{\n    typedef vector36 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36\n    >\nstruct vector37\n    : v_item<\n          T36\n        , vector36< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35 >\n        >\n{\n    typedef vector37 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37\n    >\nstruct vector38\n    : v_item<\n          T37\n        , vector37< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36 >\n        >\n{\n    typedef vector38 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38\n    >\nstruct vector39\n    : v_item<\n          T38\n        , vector38< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37 >\n        >\n{\n    typedef vector39 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    >\nstruct vector40\n    : v_item<\n          T39\n        , vector39< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38 >\n        >\n{\n    typedef vector40 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector40_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    >\nstruct vector31_c\n    : v_item<\n          integral_c< T,C30 >\n        , vector30_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29 >\n        >\n{\n    typedef vector31_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31\n    >\nstruct vector32_c\n    : v_item<\n          integral_c< T,C31 >\n        , vector31_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30 >\n        >\n{\n    typedef vector32_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32\n    >\nstruct vector33_c\n    : v_item<\n          integral_c< T,C32 >\n        , vector32_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31 >\n        >\n{\n    typedef vector33_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33\n    >\nstruct vector34_c\n    : v_item<\n          integral_c< T,C33 >\n        , vector33_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32 >\n        >\n{\n    typedef vector34_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34\n    >\nstruct vector35_c\n    : v_item<\n          integral_c< T,C34 >\n        , vector34_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33 >\n        >\n{\n    typedef vector35_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35\n    >\nstruct vector36_c\n    : v_item<\n          integral_c< T,C35 >\n        , vector35_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34 >\n        >\n{\n    typedef vector36_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36\n    >\nstruct vector37_c\n    : v_item<\n          integral_c< T,C36 >\n        , vector36_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35 >\n        >\n{\n    typedef vector37_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37\n    >\nstruct vector38_c\n    : v_item<\n          integral_c< T,C37 >\n        , vector37_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36 >\n        >\n{\n    typedef vector38_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38\n    >\nstruct vector39_c\n    : v_item<\n          integral_c< T,C38 >\n        , vector38_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37 >\n        >\n{\n    typedef vector39_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39\n    >\nstruct vector40_c\n    : v_item<\n          integral_c< T,C39 >\n        , vector39_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38 >\n        >\n{\n    typedef vector40_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector50.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40\n    >\nstruct vector41\n    : v_item<\n          T40\n        , vector40< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39 >\n        >\n{\n    typedef vector41 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41\n    >\nstruct vector42\n    : v_item<\n          T41\n        , vector41< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40 >\n        >\n{\n    typedef vector42 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42\n    >\nstruct vector43\n    : v_item<\n          T42\n        , vector42< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41 >\n        >\n{\n    typedef vector43 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43\n    >\nstruct vector44\n    : v_item<\n          T43\n        , vector43< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42 >\n        >\n{\n    typedef vector44 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    >\nstruct vector45\n    : v_item<\n          T44\n        , vector44< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43 >\n        >\n{\n    typedef vector45 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45\n    >\nstruct vector46\n    : v_item<\n          T45\n        , vector45< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44 >\n        >\n{\n    typedef vector46 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46\n    >\nstruct vector47\n    : v_item<\n          T46\n        , vector46< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45 >\n        >\n{\n    typedef vector47 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47\n    >\nstruct vector48\n    : v_item<\n          T47\n        , vector47< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46 >\n        >\n{\n    typedef vector48 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48\n    >\nstruct vector49\n    : v_item<\n          T48\n        , vector48< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47 >\n        >\n{\n    typedef vector49 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    , typename T20, typename T21, typename T22, typename T23, typename T24\n    , typename T25, typename T26, typename T27, typename T28, typename T29\n    , typename T30, typename T31, typename T32, typename T33, typename T34\n    , typename T35, typename T36, typename T37, typename T38, typename T39\n    , typename T40, typename T41, typename T42, typename T43, typename T44\n    , typename T45, typename T46, typename T47, typename T48, typename T49\n    >\nstruct vector50\n    : v_item<\n          T49\n        , vector49< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48 >\n        >\n{\n    typedef vector50 type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector50_c.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    >\nstruct vector41_c\n    : v_item<\n          integral_c< T,C40 >\n        , vector40_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39 >\n        >\n{\n    typedef vector41_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41\n    >\nstruct vector42_c\n    : v_item<\n          integral_c< T,C41 >\n        , vector41_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40 >\n        >\n{\n    typedef vector42_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42\n    >\nstruct vector43_c\n    : v_item<\n          integral_c< T,C42 >\n        , vector42_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41 >\n        >\n{\n    typedef vector43_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43\n    >\nstruct vector44_c\n    : v_item<\n          integral_c< T,C43 >\n        , vector43_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42 >\n        >\n{\n    typedef vector44_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44\n    >\nstruct vector45_c\n    : v_item<\n          integral_c< T,C44 >\n        , vector44_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43 >\n        >\n{\n    typedef vector45_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45\n    >\nstruct vector46_c\n    : v_item<\n          integral_c< T,C45 >\n        , vector45_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44 >\n        >\n{\n    typedef vector46_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46\n    >\nstruct vector47_c\n    : v_item<\n          integral_c< T,C46 >\n        , vector46_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45 >\n        >\n{\n    typedef vector47_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47\n    >\nstruct vector48_c\n    : v_item<\n          integral_c< T,C47 >\n        , vector47_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46 >\n        >\n{\n    typedef vector48_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48\n    >\nstruct vector49_c\n    : v_item<\n          integral_c< T,C48 >\n        , vector48_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47 >\n        >\n{\n    typedef vector49_c type;\n    typedef T value_type;\n};\n\ntemplate<\n      typename T\n    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10\n    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20\n    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30\n    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40\n    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49\n    >\nstruct vector50_c\n    : v_item<\n          integral_c< T,C49 >\n        , vector49_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48 >\n        >\n{\n    typedef vector50_c type;\n    typedef T value_type;\n};\n\n}}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/push_back.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_back_fwd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/vector/aux_/item.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef v_item<T,Vector,0> type;\n    };\n};\n\n}}\n\n#endif \n\n#endif // BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/push_front.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/push_front_fwd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/vector/aux_/item.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef v_item<T,Vector,1> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif // BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/size.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/vector/aux_/O1_size.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct size_impl< aux::vector_tag >\n    : O1_size_impl< aux::vector_tag >\n{\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long N >\nstruct size_impl< aux::vector_tag<N> >\n    : O1_size_impl< aux::vector_tag<N> >\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct v_iter_tag;\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\nstruct vector_tag;\n#else\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct vector_tag;\n#endif\n\n}}}\n\n#endif // BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/aux_/vector0.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n\n#include <boost/mpl/vector/aux_/iterator.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Dummy = na > struct vector0;\n\ntemplate<> struct vector0<na>\n{\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n    typedef aux::vector_tag tag;\n    typedef vector0         type;\n    typedef long_<32768>    lower_bound_;\n    typedef lower_bound_    upper_bound_;\n    typedef long_<0>        size;\n\n    static aux::type_wrapper<void_> item_(...);\n#else\n    typedef aux::vector_tag<0> tag;\n    typedef vector0 type;\n    typedef void_ item0;\n    \n    typedef v_iter<vector0<>,0> begin;\n    typedef v_iter<vector0<>,0> end;\n#endif\n};\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector0.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/vector/aux_/at.hpp>\n#include <boost/mpl/vector/aux_/front.hpp>\n#include <boost/mpl/vector/aux_/push_front.hpp>\n#include <boost/mpl/vector/aux_/pop_front.hpp>\n#include <boost/mpl/vector/aux_/push_back.hpp>\n#include <boost/mpl/vector/aux_/pop_back.hpp>\n#include <boost/mpl/vector/aux_/back.hpp>\n#include <boost/mpl/vector/aux_/clear.hpp>\n#include <boost/mpl/vector/aux_/O1_size.hpp>\n#include <boost/mpl/vector/aux_/size.hpp>\n#include <boost/mpl/vector/aux_/empty.hpp>\n#include <boost/mpl/vector/aux_/item.hpp>\n#include <boost/mpl/vector/aux_/iterator.hpp>\n#include <boost/mpl/vector/aux_/vector0.hpp>\n#include <boost/mpl/vector/aux_/begin_end.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n\n#endif // BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector0_c.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/vector/vector0.hpp>\n#include <boost/mpl/integral_c.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T > struct vector0_c\n    : vector0<>\n{\n    typedef vector0_c type;\n    typedef T value_type;\n};\n\n}}\n\n#endif // BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector10.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector0.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector10.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, 10, <boost/mpl/vector/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector10_c.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector0_c.hpp>\n#   include <boost/mpl/vector/vector10.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector10_c.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, 10, <boost/mpl/vector/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector20.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector10.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector20.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(11, 20, <boost/mpl/vector/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector20_c.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector10_c.hpp>\n#   include <boost/mpl/vector/vector20.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector20_c.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(11, 20, <boost/mpl/vector/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector30.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR30_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR30_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector20.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector30.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(21, 30, <boost/mpl/vector/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR30_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector30_c.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector20_c.hpp>\n#   include <boost/mpl/vector/vector30.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector30_c.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/config.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(21, 30, <boost/mpl/vector/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_USE_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector40.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR40_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR40_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector30.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector40.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(31, 40, <boost/mpl/vector/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR40_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector40_c.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector30_c.hpp>\n#   include <boost/mpl/vector/vector40.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector40_c.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(31, 40, <boost/mpl/vector/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector50.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector40.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector50.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(41, 50, <boost/mpl/vector/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector/vector50_c.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector40_c.hpp>\n#   include <boost/mpl/vector/vector50.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector50_c.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(41, 50, <boost/mpl/vector/aux_/numbered_c.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/vector.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_VECTOR_HEADER \\\n    BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE).hpp \\\n    /**/\n#else\n#   define AUX778076_VECTOR_HEADER \\\n    BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_HEADER)\n#   undef AUX778076_VECTOR_HEADER\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/vector.hpp>\n\n#   define AUX778076_SEQUENCE_NAME vector\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_VECTOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/vector_c.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_C_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/vector.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_VECTOR_C_HEADER \\\n    BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_MPL_LIMIT_VECTOR_SIZE),_c).hpp \\\n    /**/\n#else\n#   define AUX778076_VECTOR_C_HEADER \\\n    BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_MPL_LIMIT_VECTOR_SIZE),_c)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_C_HEADER)\n#   undef AUX778076_VECTOR_C_HEADER\n#   include <climits>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector_c.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/vector.hpp>\n\n#   define AUX778076_SEQUENCE_NAME vector_c\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE\n#   define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(vector,n),_c)\n#   define AUX778076_SEQUENCE_CONVERT_CN_TO(z,n,TARGET) TARGET(BOOST_PP_CAT(C,n))\n#   define AUX778076_SEQUENCE_INTEGRAL_WRAPPER\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_VECTOR_C_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/void.hpp",
    "content": "\n#ifndef BOOST_MPL_VOID_HPP_INCLUDED\n#define BOOST_MPL_VOID_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/void_fwd.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\n//  [JDG Feb-4-2003] made void_ a complete type to allow it to be\n//  instantiated so that it can be passed in as an object that can be\n//  used to select an overloaded function. Possible use includes signaling\n//  a zero arity functor evaluation call.\nstruct void_ { typedef void_ type; };\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T >\nstruct is_void_\n    : false_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using false_::value;\n#endif\n};\n\ntemplate<>\nstruct is_void_<void_>\n    : true_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using true_::value;\n#endif\n};\n\ntemplate< typename T >\nstruct is_not_void_\n    : true_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using true_::value;\n#endif\n};\n\ntemplate<>\nstruct is_not_void_<void_>\n    : false_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using false_::value;\n#endif\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, is_void_)\nBOOST_MPL_AUX_NA_SPEC(1, is_not_void_)\n\n}}\n\n#endif // BOOST_MPL_VOID_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/void_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_VOID_FWD_HPP_INCLUDED\n#define BOOST_MPL_VOID_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\nstruct void_;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(void_)\n\n#endif // BOOST_MPL_VOID_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/mpl/zip_view.hpp",
    "content": "\n#ifndef BOOST_MPL_ZIP_VIEW_HPP_INCLUDED\n#define BOOST_MPL_ZIP_VIEW_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2010\n// Copyright David Abrahams 2000-2002\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id$\n// $Date$\n// $Revision$\n\n#include <boost/mpl/transform.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename IteratorSeq >\nstruct zip_iterator\n{\n    typedef forward_iterator_tag category;\n    typedef typename transform1<\n          IteratorSeq\n        , deref<_1>\n        >::type type;\n\n    typedef zip_iterator<\n          typename transform1<\n                IteratorSeq\n              , mpl::next<_1>\n            >::type\n        > next;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequences)\n    >\nstruct zip_view\n{\n private:\n    typedef typename transform1< Sequences, mpl::begin<_1> >::type first_ones_;\n    typedef typename transform1< Sequences, mpl::end<_1> >::type last_ones_;\n    \n public:\n    typedef nested_begin_end_tag tag;\n    typedef zip_view type;\n    typedef zip_iterator<first_ones_> begin;\n    typedef zip_iterator<last_ones_> end;\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, zip_view)\n\n}}\n\n#endif // BOOST_MPL_ZIP_VIEW_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/next_prior.hpp",
    "content": "//  Boost next_prior.hpp header file  ---------------------------------------//\n\n//  (C) Copyright Dave Abrahams and Daniel Walker 1999-2003. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/utility for documentation.\n\n//  Revision History\n//  13 Dec 2003  Added next(x, n) and prior(x, n) (Daniel Walker)\n\n#ifndef BOOST_NEXT_PRIOR_HPP_INCLUDED\n#define BOOST_NEXT_PRIOR_HPP_INCLUDED\n\n#include <iterator>\n#if defined(_MSC_VER) && _MSC_VER <= 1310\n#include <boost/mpl/and.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#endif\n#include <boost/type_traits/is_unsigned.hpp>\n#include <boost/type_traits/integral_promotion.hpp>\n#include <boost/type_traits/make_signed.hpp>\n#include <boost/type_traits/has_plus.hpp>\n#include <boost/type_traits/has_plus_assign.hpp>\n#include <boost/type_traits/has_minus.hpp>\n#include <boost/type_traits/has_minus_assign.hpp>\n\nnamespace boost {\n\n//  Helper functions for classes like bidirectional iterators not supporting\n//  operator+ and operator-\n//\n//  Usage:\n//    const std::list<T>::iterator p = get_some_iterator();\n//    const std::list<T>::iterator prev = boost::prior(p);\n//    const std::list<T>::iterator next = boost::next(prev, 2);\n\n//  Contributed by Dave Abrahams\n\nnamespace next_prior_detail {\n\ntemplate< typename T, typename Distance, bool HasPlus = has_plus< T, Distance >::value >\nstruct next_impl2\n{\n    static T call(T x, Distance n)\n    {\n        std::advance(x, n);\n        return x;\n    }\n};\n\ntemplate< typename T, typename Distance >\nstruct next_impl2< T, Distance, true >\n{\n    static T call(T x, Distance n)\n    {\n        return x + n;\n    }\n};\n\n\ntemplate< typename T, typename Distance, bool HasPlusAssign = has_plus_assign< T, Distance >::value >\nstruct next_impl1 :\n    public next_impl2< T, Distance >\n{\n};\n\ntemplate< typename T, typename Distance >\nstruct next_impl1< T, Distance, true >\n{\n    static T call(T x, Distance n)\n    {\n        x += n;\n        return x;\n    }\n};\n\n\ntemplate<\n    typename T,\n    typename Distance,\n    typename PromotedDistance = typename integral_promotion< Distance >::type,\n#if !defined(_MSC_VER) || _MSC_VER > 1310\n    bool IsUInt = is_unsigned< PromotedDistance >::value\n#else\n    // MSVC 7.1 has problems with applying is_unsigned to non-integral types\n    bool IsUInt = mpl::and_< is_integral< PromotedDistance >, is_unsigned< PromotedDistance > >::value\n#endif\n>\nstruct prior_impl3\n{\n    static T call(T x, Distance n)\n    {\n        std::advance(x, -n);\n        return x;\n    }\n};\n\ntemplate< typename T, typename Distance, typename PromotedDistance >\nstruct prior_impl3< T, Distance, PromotedDistance, true >\n{\n    static T call(T x, Distance n)\n    {\n        typedef typename make_signed< PromotedDistance >::type signed_distance;\n        std::advance(x, -static_cast< signed_distance >(static_cast< PromotedDistance >(n)));\n        return x;\n    }\n};\n\n\ntemplate< typename T, typename Distance, bool HasMinus = has_minus< T, Distance >::value >\nstruct prior_impl2 :\n    public prior_impl3< T, Distance >\n{\n};\n\ntemplate< typename T, typename Distance >\nstruct prior_impl2< T, Distance, true >\n{\n    static T call(T x, Distance n)\n    {\n        return x - n;\n    }\n};\n\n\ntemplate< typename T, typename Distance, bool HasMinusAssign = has_minus_assign< T, Distance >::value >\nstruct prior_impl1 :\n    public prior_impl2< T, Distance >\n{\n};\n\ntemplate< typename T, typename Distance >\nstruct prior_impl1< T, Distance, true >\n{\n    static T call(T x, Distance n)\n    {\n        x -= n;\n        return x;\n    }\n};\n\n} // namespace next_prior_detail\n\ntemplate <class T>\ninline T next(T x) { return ++x; }\n\ntemplate <class T, class Distance>\ninline T next(T x, Distance n)\n{\n    return next_prior_detail::next_impl1< T, Distance >::call(x, n);\n}\n\ntemplate <class T>\ninline T prior(T x) { return --x; }\n\ntemplate <class T, class Distance>\ninline T prior(T x, Distance n)\n{\n    return next_prior_detail::prior_impl1< T, Distance >::call(x, n);\n}\n\n} // namespace boost\n\n#endif  // BOOST_NEXT_PRIOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/noncopyable.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Fernandes\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_NONCOPYABLE_HPP\n#define BOOST_NONCOPYABLE_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/noncopyable.hpp instead.\n\n#include <boost/core/noncopyable.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/operators.hpp",
    "content": "//  Boost operators.hpp header file  ----------------------------------------//\n\n//  (C) Copyright David Abrahams, Jeremy Siek, Daryle Walker 1999-2001.\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/utility/operators.htm for documentation.\n\n//  Revision History\n//  16 Dec 10 Limit warning suppression for 4284 to older versions of VC++\n//            (Matthew Bradbury, fixes #4432)\n//  07 Aug 08 Added \"euclidean\" spelling. (Daniel Frey)\n//  03 Apr 08 Make sure \"convertible to bool\" is sufficient\n//            for T::operator<, etc. (Daniel Frey)\n//  24 May 07 Changed empty_base to depend on T, see\n//            http://svn.boost.org/trac/boost/ticket/979\n//  21 Oct 02 Modified implementation of operators to allow compilers with a\n//            correct named return value optimization (NRVO) to produce optimal\n//            code.  (Daniel Frey)\n//  02 Dec 01 Bug fixed in random_access_iteratable.  (Helmut Zeisel)\n//  28 Sep 01 Factored out iterator operator groups.  (Daryle Walker)\n//  27 Aug 01 'left' form for non commutative operators added;\n//            additional classes for groups of related operators added;\n//            workaround for empty base class optimization\n//            bug of GCC 3.0 (Helmut Zeisel)\n//  25 Jun 01 output_iterator_helper changes: removed default template \n//            parameters, added support for self-proxying, additional \n//            documentation and tests (Aleksey Gurtovoy)\n//  29 May 01 Added operator classes for << and >>.  Added input and output\n//            iterator helper classes.  Added classes to connect equality and\n//            relational operators.  Added classes for groups of related\n//            operators.  Reimplemented example operator and iterator helper\n//            classes in terms of the new groups.  (Daryle Walker, with help\n//            from Alexy Gurtovoy)\n//  11 Feb 01 Fixed bugs in the iterator helpers which prevented explicitly\n//            supplied arguments from actually being used (Dave Abrahams)\n//  04 Jul 00 Fixed NO_OPERATORS_IN_NAMESPACE bugs, major cleanup and\n//            refactoring of compiler workarounds, additional documentation\n//            (Alexy Gurtovoy and Mark Rodgers with some help and prompting from\n//            Dave Abrahams) \n//  28 Jun 00 General cleanup and integration of bugfixes from Mark Rodgers and\n//            Jeremy Siek (Dave Abrahams)\n//  20 Jun 00 Changes to accommodate Borland C++Builder 4 and Borland C++ 5.5\n//            (Mark Rodgers)\n//  20 Jun 00 Minor fixes to the prior revision (Aleksey Gurtovoy)\n//  10 Jun 00 Support for the base class chaining technique was added\n//            (Aleksey Gurtovoy). See documentation and the comments below \n//            for the details. \n//  12 Dec 99 Initial version with iterator operators (Jeremy Siek)\n//  18 Nov 99 Change name \"divideable\" to \"dividable\", remove unnecessary\n//            specializations of dividable, subtractable, modable (Ed Brey) \n//  17 Nov 99 Add comments (Beman Dawes)\n//            Remove unnecessary specialization of operators<> (Ed Brey)\n//  15 Nov 99 Fix less_than_comparable<T,U> second operand type for first two\n//            operators.(Beman Dawes)\n//  12 Nov 99 Add operators templates (Ed Brey)\n//  11 Nov 99 Add single template parameter version for compilers without\n//            partial specialization (Beman Dawes)\n//  10 Nov 99 Initial version\n\n// 10 Jun 00:\n// An additional optional template parameter was added to most of \n// operator templates to support the base class chaining technique (see \n// documentation for the details). Unfortunately, a straightforward\n// implementation of this change would have broken compatibility with the\n// previous version of the library by making it impossible to use the same\n// template name (e.g. 'addable') for both the 1- and 2-argument versions of\n// an operator template. This implementation solves the backward-compatibility\n// issue at the cost of some simplicity.\n//\n// One of the complications is an existence of special auxiliary class template\n// 'is_chained_base<>' (see 'detail' namespace below), which is used\n// to determine whether its template parameter is a library's operator template\n// or not. You have to specialize 'is_chained_base<>' for each new \n// operator template you add to the library.\n//\n// However, most of the non-trivial implementation details are hidden behind \n// several local macros defined below, and as soon as you understand them,\n// you understand the whole library implementation. \n\n#ifndef BOOST_OPERATORS_HPP\n#define BOOST_OPERATORS_HPP\n\n#include <cstddef>\n#include <iterator>\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if defined(__sgi) && !defined(__GNUC__)\n#   pragma set woff 1234\n#endif\n\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1600)\n#   pragma warning( disable : 4284 ) // complaint about return type of \n#endif                               // operator-> not begin a UDT\n\nnamespace boost {\nnamespace detail {\n\ntemplate <typename T> class empty_base {};\n\n} // namespace detail\n} // namespace boost\n\n// In this section we supply the xxxx1 and xxxx2 forms of the operator\n// templates, which are explicitly targeted at the 1-type-argument and\n// 2-type-argument operator forms, respectively. Some compilers get confused\n// when inline friend functions are overloaded in namespaces other than the\n// global namespace. When BOOST_NO_OPERATORS_IN_NAMESPACE is defined, all of\n// these templates must go in the global namespace.\n\n#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE\nnamespace boost\n{\n#endif\n\n//  Basic operator classes (contributed by Dave Abrahams) ------------------//\n\n//  Note that friend functions defined in a class are implicitly inline.\n//  See the C++ std, 11.4 [class.friend] paragraph 5\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct less_than_comparable2 : B\n{\n     friend bool operator<=(const T& x, const U& y) { return !static_cast<bool>(x > y); }\n     friend bool operator>=(const T& x, const U& y) { return !static_cast<bool>(x < y); }\n     friend bool operator>(const U& x, const T& y)  { return y < x; }\n     friend bool operator<(const U& x, const T& y)  { return y > x; }\n     friend bool operator<=(const U& x, const T& y) { return !static_cast<bool>(y < x); }\n     friend bool operator>=(const U& x, const T& y) { return !static_cast<bool>(y > x); }\n};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct less_than_comparable1 : B\n{\n     friend bool operator>(const T& x, const T& y)  { return y < x; }\n     friend bool operator<=(const T& x, const T& y) { return !static_cast<bool>(y < x); }\n     friend bool operator>=(const T& x, const T& y) { return !static_cast<bool>(x < y); }\n};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct equality_comparable2 : B\n{\n     friend bool operator==(const U& y, const T& x) { return x == y; }\n     friend bool operator!=(const U& y, const T& x) { return !static_cast<bool>(x == y); }\n     friend bool operator!=(const T& y, const U& x) { return !static_cast<bool>(y == x); }\n};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct equality_comparable1 : B\n{\n     friend bool operator!=(const T& x, const T& y) { return !static_cast<bool>(x == y); }\n};\n\n// A macro which produces \"name_2left\" from \"name\".\n#define BOOST_OPERATOR2_LEFT(name) name##2##_##left\n\n//  NRVO-friendly implementation (contributed by Daniel Frey) ---------------//\n\n#if defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)\n\n// This is the optimal implementation for ISO/ANSI C++,\n// but it requires the compiler to implement the NRVO.\n// If the compiler has no NRVO, this is the best symmetric\n// implementation available.\n\n#define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP )                         \\\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >        \\\nstruct NAME##2 : B                                                            \\\n{                                                                             \\\n  friend T operator OP( const T& lhs, const U& rhs )                          \\\n    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                              \\\n  friend T operator OP( const U& lhs, const T& rhs )                          \\\n    { T nrv( rhs ); nrv OP##= lhs; return nrv; }                              \\\n};                                                                            \\\n                                                                              \\\ntemplate <class T, class B = ::boost::detail::empty_base<T> >                 \\\nstruct NAME##1 : B                                                            \\\n{                                                                             \\\n  friend T operator OP( const T& lhs, const T& rhs )                          \\\n    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                              \\\n};\n\n#define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP )               \\\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >  \\\nstruct NAME##2 : B                                                      \\\n{                                                                       \\\n  friend T operator OP( const T& lhs, const U& rhs )                    \\\n    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                        \\\n};                                                                      \\\n                                                                        \\\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >  \\\nstruct BOOST_OPERATOR2_LEFT(NAME) : B                                   \\\n{                                                                       \\\n  friend T operator OP( const U& lhs, const T& rhs )                    \\\n    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                        \\\n};                                                                      \\\n                                                                        \\\ntemplate <class T, class B = ::boost::detail::empty_base<T> >           \\\nstruct NAME##1 : B                                                      \\\n{                                                                       \\\n  friend T operator OP( const T& lhs, const T& rhs )                    \\\n    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                        \\\n};\n\n#else // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)\n\n// For compilers without NRVO the following code is optimal, but not\n// symmetric!  Note that the implementation of\n// BOOST_OPERATOR2_LEFT(NAME) only looks cool, but doesn't provide\n// optimization opportunities to the compiler :)\n\n#define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP )                   \\\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >  \\\nstruct NAME##2 : B                                                      \\\n{                                                                       \\\n  friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \\\n  friend T operator OP( const U& lhs, T rhs ) { return rhs OP##= lhs; } \\\n};                                                                      \\\n                                                                        \\\ntemplate <class T, class B = ::boost::detail::empty_base<T> >           \\\nstruct NAME##1 : B                                                      \\\n{                                                                       \\\n  friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \\\n};\n\n#define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP )               \\\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >  \\\nstruct NAME##2 : B                                                      \\\n{                                                                       \\\n  friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \\\n};                                                                      \\\n                                                                        \\\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >  \\\nstruct BOOST_OPERATOR2_LEFT(NAME) : B                                   \\\n{                                                                       \\\n  friend T operator OP( const U& lhs, const T& rhs )                    \\\n    { return T( lhs ) OP##= rhs; }                                      \\\n};                                                                      \\\n                                                                        \\\ntemplate <class T, class B = ::boost::detail::empty_base<T> >           \\\nstruct NAME##1 : B                                                      \\\n{                                                                       \\\n  friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \\\n};\n\n#endif // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)\n\nBOOST_BINARY_OPERATOR_COMMUTATIVE( multipliable, * )\nBOOST_BINARY_OPERATOR_COMMUTATIVE( addable, + )\nBOOST_BINARY_OPERATOR_NON_COMMUTATIVE( subtractable, - )\nBOOST_BINARY_OPERATOR_NON_COMMUTATIVE( dividable, / )\nBOOST_BINARY_OPERATOR_NON_COMMUTATIVE( modable, % )\nBOOST_BINARY_OPERATOR_COMMUTATIVE( xorable, ^ )\nBOOST_BINARY_OPERATOR_COMMUTATIVE( andable, & )\nBOOST_BINARY_OPERATOR_COMMUTATIVE( orable, | )\n\n#undef BOOST_BINARY_OPERATOR_COMMUTATIVE\n#undef BOOST_BINARY_OPERATOR_NON_COMMUTATIVE\n#undef BOOST_OPERATOR2_LEFT\n\n//  incrementable and decrementable contributed by Jeremy Siek\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct incrementable : B\n{\n  friend T operator++(T& x, int)\n  {\n    incrementable_type nrv(x);\n    ++x;\n    return nrv;\n  }\nprivate: // The use of this typedef works around a Borland bug\n  typedef T incrementable_type;\n};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct decrementable : B\n{\n  friend T operator--(T& x, int)\n  {\n    decrementable_type nrv(x);\n    --x;\n    return nrv;\n  }\nprivate: // The use of this typedef works around a Borland bug\n  typedef T decrementable_type;\n};\n\n//  Iterator operator classes (contributed by Jeremy Siek) ------------------//\n\ntemplate <class T, class P, class B = ::boost::detail::empty_base<T> >\nstruct dereferenceable : B\n{\n  P operator->() const\n  { \n    return &*static_cast<const T&>(*this); \n  }\n};\n\ntemplate <class T, class I, class R, class B = ::boost::detail::empty_base<T> >\nstruct indexable : B\n{\n  R operator[](I n) const\n  {\n    return *(static_cast<const T&>(*this) + n);\n  }\n};\n\n//  More operator classes (contributed by Daryle Walker) --------------------//\n//  (NRVO-friendly implementation contributed by Daniel Frey) ---------------//\n\n#if defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)\n\n#define BOOST_BINARY_OPERATOR( NAME, OP )                                     \\\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >        \\\nstruct NAME##2 : B                                                            \\\n{                                                                             \\\n  friend T operator OP( const T& lhs, const U& rhs )                          \\\n    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                              \\\n};                                                                            \\\n                                                                              \\\ntemplate <class T, class B = ::boost::detail::empty_base<T> >                 \\\nstruct NAME##1 : B                                                            \\\n{                                                                             \\\n  friend T operator OP( const T& lhs, const T& rhs )                          \\\n    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                              \\\n};\n\n#else // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)\n\n#define BOOST_BINARY_OPERATOR( NAME, OP )                                     \\\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >        \\\nstruct NAME##2 : B                                                            \\\n{                                                                             \\\n  friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; }       \\\n};                                                                            \\\n                                                                              \\\ntemplate <class T, class B = ::boost::detail::empty_base<T> >                 \\\nstruct NAME##1 : B                                                            \\\n{                                                                             \\\n  friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; }       \\\n};\n\n#endif // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)\n\nBOOST_BINARY_OPERATOR( left_shiftable, << )\nBOOST_BINARY_OPERATOR( right_shiftable, >> )\n\n#undef BOOST_BINARY_OPERATOR\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct equivalent2 : B\n{\n  friend bool operator==(const T& x, const U& y)\n  {\n    return !static_cast<bool>(x < y) && !static_cast<bool>(x > y);\n  }\n};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct equivalent1 : B\n{\n  friend bool operator==(const T&x, const T&y)\n  {\n    return !static_cast<bool>(x < y) && !static_cast<bool>(y < x);\n  }\n};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct partially_ordered2 : B\n{\n  friend bool operator<=(const T& x, const U& y)\n    { return static_cast<bool>(x < y) || static_cast<bool>(x == y); }\n  friend bool operator>=(const T& x, const U& y)\n    { return static_cast<bool>(x > y) || static_cast<bool>(x == y); }\n  friend bool operator>(const U& x, const T& y)\n    { return y < x; }\n  friend bool operator<(const U& x, const T& y)\n    { return y > x; }\n  friend bool operator<=(const U& x, const T& y)\n    { return static_cast<bool>(y > x) || static_cast<bool>(y == x); }\n  friend bool operator>=(const U& x, const T& y)\n    { return static_cast<bool>(y < x) || static_cast<bool>(y == x); }\n};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct partially_ordered1 : B\n{\n  friend bool operator>(const T& x, const T& y)\n    { return y < x; }\n  friend bool operator<=(const T& x, const T& y)\n    { return static_cast<bool>(x < y) || static_cast<bool>(x == y); }\n  friend bool operator>=(const T& x, const T& y)\n    { return static_cast<bool>(y < x) || static_cast<bool>(x == y); }\n};\n\n//  Combined operator classes (contributed by Daryle Walker) ----------------//\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct totally_ordered2\n    : less_than_comparable2<T, U\n    , equality_comparable2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct totally_ordered1\n    : less_than_comparable1<T\n    , equality_comparable1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct additive2\n    : addable2<T, U\n    , subtractable2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct additive1\n    : addable1<T\n    , subtractable1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct multiplicative2\n    : multipliable2<T, U\n    , dividable2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct multiplicative1\n    : multipliable1<T\n    , dividable1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct integer_multiplicative2\n    : multiplicative2<T, U\n    , modable2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct integer_multiplicative1\n    : multiplicative1<T\n    , modable1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct arithmetic2\n    : additive2<T, U\n    , multiplicative2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct arithmetic1\n    : additive1<T\n    , multiplicative1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct integer_arithmetic2\n    : additive2<T, U\n    , integer_multiplicative2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct integer_arithmetic1\n    : additive1<T\n    , integer_multiplicative1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct bitwise2\n    : xorable2<T, U\n    , andable2<T, U\n    , orable2<T, U, B\n      > > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct bitwise1\n    : xorable1<T\n    , andable1<T\n    , orable1<T, B\n      > > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct unit_steppable\n    : incrementable<T\n    , decrementable<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct shiftable2\n    : left_shiftable2<T, U\n    , right_shiftable2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct shiftable1\n    : left_shiftable1<T\n    , right_shiftable1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct ring_operators2\n    : additive2<T, U\n    , subtractable2_left<T, U\n    , multipliable2<T, U, B\n      > > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct ring_operators1\n    : additive1<T\n    , multipliable1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct ordered_ring_operators2\n    : ring_operators2<T, U\n    , totally_ordered2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct ordered_ring_operators1\n    : ring_operators1<T\n    , totally_ordered1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct field_operators2\n    : ring_operators2<T, U\n    , dividable2<T, U\n    , dividable2_left<T, U, B\n      > > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct field_operators1\n    : ring_operators1<T\n    , dividable1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct ordered_field_operators2\n    : field_operators2<T, U\n    , totally_ordered2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct ordered_field_operators1\n    : field_operators1<T\n    , totally_ordered1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct euclidian_ring_operators2\n    : ring_operators2<T, U\n    , dividable2<T, U\n    , dividable2_left<T, U\n    , modable2<T, U\n    , modable2_left<T, U, B\n      > > > > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct euclidian_ring_operators1\n    : ring_operators1<T\n    , dividable1<T\n    , modable1<T, B\n      > > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct ordered_euclidian_ring_operators2\n    : totally_ordered2<T, U\n    , euclidian_ring_operators2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct ordered_euclidian_ring_operators1\n    : totally_ordered1<T\n    , euclidian_ring_operators1<T, B\n      > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct euclidean_ring_operators2\n    : ring_operators2<T, U\n    , dividable2<T, U\n    , dividable2_left<T, U\n    , modable2<T, U\n    , modable2_left<T, U, B\n      > > > > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct euclidean_ring_operators1\n    : ring_operators1<T\n    , dividable1<T\n    , modable1<T, B\n      > > > {};\n\ntemplate <class T, class U, class B = ::boost::detail::empty_base<T> >\nstruct ordered_euclidean_ring_operators2\n    : totally_ordered2<T, U\n    , euclidean_ring_operators2<T, U, B\n      > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct ordered_euclidean_ring_operators1\n    : totally_ordered1<T\n    , euclidean_ring_operators1<T, B\n      > > {};\n\ntemplate <class T, class P, class B = ::boost::detail::empty_base<T> >\nstruct input_iteratable\n    : equality_comparable1<T\n    , incrementable<T\n    , dereferenceable<T, P, B\n      > > > {};\n\ntemplate <class T, class B = ::boost::detail::empty_base<T> >\nstruct output_iteratable\n    : incrementable<T, B\n      > {};\n\ntemplate <class T, class P, class B = ::boost::detail::empty_base<T> >\nstruct forward_iteratable\n    : input_iteratable<T, P, B\n      > {};\n\ntemplate <class T, class P, class B = ::boost::detail::empty_base<T> >\nstruct bidirectional_iteratable\n    : forward_iteratable<T, P\n    , decrementable<T, B\n      > > {};\n\n//  To avoid repeated derivation from equality_comparable,\n//  which is an indirect base class of bidirectional_iterable,\n//  random_access_iteratable must not be derived from totally_ordered1\n//  but from less_than_comparable1 only. (Helmut Zeisel, 02-Dec-2001)\ntemplate <class T, class P, class D, class R, class B = ::boost::detail::empty_base<T> >\nstruct random_access_iteratable\n    : bidirectional_iteratable<T, P\n    , less_than_comparable1<T\n    , additive2<T, D\n    , indexable<T, D, R, B\n      > > > > {};\n\n#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE\n} // namespace boost\n#endif // BOOST_NO_OPERATORS_IN_NAMESPACE\n\n\n// BOOST_IMPORT_TEMPLATE1 .. BOOST_IMPORT_TEMPLATE4 -\n//\n// When BOOST_NO_OPERATORS_IN_NAMESPACE is defined we need a way to import an\n// operator template into the boost namespace. BOOST_IMPORT_TEMPLATE1 is used\n// for one-argument forms of operator templates; BOOST_IMPORT_TEMPLATE2 for\n// two-argument forms. Note that these macros expect to be invoked from within\n// boost.\n\n#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE\n\n  // The template is already in boost so we have nothing to do.\n# define BOOST_IMPORT_TEMPLATE4(template_name)\n# define BOOST_IMPORT_TEMPLATE3(template_name)\n# define BOOST_IMPORT_TEMPLATE2(template_name)\n# define BOOST_IMPORT_TEMPLATE1(template_name)\n\n#else // BOOST_NO_OPERATORS_IN_NAMESPACE\n\n#  ifndef BOOST_NO_USING_TEMPLATE\n\n     // Bring the names in with a using-declaration\n     // to avoid stressing the compiler.\n#    define BOOST_IMPORT_TEMPLATE4(template_name) using ::template_name;\n#    define BOOST_IMPORT_TEMPLATE3(template_name) using ::template_name;\n#    define BOOST_IMPORT_TEMPLATE2(template_name) using ::template_name;\n#    define BOOST_IMPORT_TEMPLATE1(template_name) using ::template_name;\n\n#  else\n\n     // Otherwise, because a Borland C++ 5.5 bug prevents a using declaration\n     // from working, we are forced to use inheritance for that compiler.\n#    define BOOST_IMPORT_TEMPLATE4(template_name)                                             \\\n     template <class T, class U, class V, class W, class B = ::boost::detail::empty_base<T> > \\\n     struct template_name : ::template_name<T, U, V, W, B> {};\n\n#    define BOOST_IMPORT_TEMPLATE3(template_name)                                    \\\n     template <class T, class U, class V, class B = ::boost::detail::empty_base<T> > \\\n     struct template_name : ::template_name<T, U, V, B> {};\n\n#    define BOOST_IMPORT_TEMPLATE2(template_name)                           \\\n     template <class T, class U, class B = ::boost::detail::empty_base<T> > \\\n     struct template_name : ::template_name<T, U, B> {};\n\n#    define BOOST_IMPORT_TEMPLATE1(template_name)                  \\\n     template <class T, class B = ::boost::detail::empty_base<T> > \\\n     struct template_name : ::template_name<T, B> {};\n\n#  endif // BOOST_NO_USING_TEMPLATE\n\n#endif // BOOST_NO_OPERATORS_IN_NAMESPACE\n\n//\n// Here's where we put it all together, defining the xxxx forms of the templates\n// in namespace boost. We also define specializations of is_chained_base<> for\n// the xxxx, xxxx1, and xxxx2 templates, importing them into boost:: as\n// necessary.\n//\n\n// is_chained_base<> - a traits class used to distinguish whether an operator\n// template argument is being used for base class chaining, or is specifying a\n// 2nd argument type.\n\nnamespace boost {\n// A type parameter is used instead of a plain bool because Borland's compiler\n// didn't cope well with the more obvious non-type template parameter.\nnamespace detail {\n  struct true_t {};\n  struct false_t {};\n} // namespace detail\n\n// Unspecialized version assumes that most types are not being used for base\n// class chaining. We specialize for the operator templates defined in this\n// library.\ntemplate<class T> struct is_chained_base {\n  typedef ::boost::detail::false_t value;\n};\n\n} // namespace boost\n\n// Import a 4-type-argument operator template into boost (if necessary) and\n// provide a specialization of 'is_chained_base<>' for it.\n# define BOOST_OPERATOR_TEMPLATE4(template_name4)                     \\\n  BOOST_IMPORT_TEMPLATE4(template_name4)                              \\\n  template<class T, class U, class V, class W, class B>               \\\n  struct is_chained_base< ::boost::template_name4<T, U, V, W, B> > {  \\\n    typedef ::boost::detail::true_t value;                            \\\n  };\n\n// Import a 3-type-argument operator template into boost (if necessary) and\n// provide a specialization of 'is_chained_base<>' for it.\n# define BOOST_OPERATOR_TEMPLATE3(template_name3)                     \\\n  BOOST_IMPORT_TEMPLATE3(template_name3)                              \\\n  template<class T, class U, class V, class B>                        \\\n  struct is_chained_base< ::boost::template_name3<T, U, V, B> > {     \\\n    typedef ::boost::detail::true_t value;                            \\\n  };\n\n// Import a 2-type-argument operator template into boost (if necessary) and\n// provide a specialization of 'is_chained_base<>' for it.\n# define BOOST_OPERATOR_TEMPLATE2(template_name2)                  \\\n  BOOST_IMPORT_TEMPLATE2(template_name2)                           \\\n  template<class T, class U, class B>                              \\\n  struct is_chained_base< ::boost::template_name2<T, U, B> > {     \\\n    typedef ::boost::detail::true_t value;                         \\\n  };\n\n// Import a 1-type-argument operator template into boost (if necessary) and\n// provide a specialization of 'is_chained_base<>' for it.\n# define BOOST_OPERATOR_TEMPLATE1(template_name1)                  \\\n  BOOST_IMPORT_TEMPLATE1(template_name1)                           \\\n  template<class T, class B>                                       \\\n  struct is_chained_base< ::boost::template_name1<T, B> > {        \\\n    typedef ::boost::detail::true_t value;                         \\\n  };\n\n// BOOST_OPERATOR_TEMPLATE(template_name) defines template_name<> such that it\n// can be used for specifying both 1-argument and 2-argument forms. Requires the\n// existence of two previously defined class templates named '<template_name>1'\n// and '<template_name>2' which must implement the corresponding 1- and 2-\n// argument forms.\n//\n// The template type parameter O == is_chained_base<U>::value is used to\n// distinguish whether the 2nd argument to <template_name> is being used for\n// base class chaining from another boost operator template or is describing a\n// 2nd operand type. O == true_t only when U is actually an another operator\n// template from the library. Partial specialization is used to select an\n// implementation in terms of either '<template_name>1' or '<template_name>2'.\n//\n\n# define BOOST_OPERATOR_TEMPLATE(template_name)                    \\\ntemplate <class T                                                  \\\n         ,class U = T                                              \\\n         ,class B = ::boost::detail::empty_base<T>                 \\\n         ,class O = typename is_chained_base<U>::value             \\\n         >                                                         \\\nstruct template_name : template_name##2<T, U, B> {};               \\\n                                                                   \\\ntemplate<class T, class U, class B>                                \\\nstruct template_name<T, U, B, ::boost::detail::true_t>             \\\n  : template_name##1<T, U> {};                                     \\\n                                                                   \\\ntemplate <class T, class B>                                        \\\nstruct template_name<T, T, B, ::boost::detail::false_t>            \\\n  : template_name##1<T, B> {};                                     \\\n                                                                   \\\ntemplate<class T, class U, class B, class O>                       \\\nstruct is_chained_base< ::boost::template_name<T, U, B, O> > {     \\\n  typedef ::boost::detail::true_t value;                           \\\n};                                                                 \\\n                                                                   \\\nBOOST_OPERATOR_TEMPLATE2(template_name##2)                         \\\nBOOST_OPERATOR_TEMPLATE1(template_name##1)\n\n\n\nnamespace boost {\n    \nBOOST_OPERATOR_TEMPLATE(less_than_comparable)\nBOOST_OPERATOR_TEMPLATE(equality_comparable)\nBOOST_OPERATOR_TEMPLATE(multipliable)\nBOOST_OPERATOR_TEMPLATE(addable)\nBOOST_OPERATOR_TEMPLATE(subtractable)\nBOOST_OPERATOR_TEMPLATE2(subtractable2_left)\nBOOST_OPERATOR_TEMPLATE(dividable)\nBOOST_OPERATOR_TEMPLATE2(dividable2_left)\nBOOST_OPERATOR_TEMPLATE(modable)\nBOOST_OPERATOR_TEMPLATE2(modable2_left)\nBOOST_OPERATOR_TEMPLATE(xorable)\nBOOST_OPERATOR_TEMPLATE(andable)\nBOOST_OPERATOR_TEMPLATE(orable)\n\nBOOST_OPERATOR_TEMPLATE1(incrementable)\nBOOST_OPERATOR_TEMPLATE1(decrementable)\n\nBOOST_OPERATOR_TEMPLATE2(dereferenceable)\nBOOST_OPERATOR_TEMPLATE3(indexable)\n\nBOOST_OPERATOR_TEMPLATE(left_shiftable)\nBOOST_OPERATOR_TEMPLATE(right_shiftable)\nBOOST_OPERATOR_TEMPLATE(equivalent)\nBOOST_OPERATOR_TEMPLATE(partially_ordered)\n\nBOOST_OPERATOR_TEMPLATE(totally_ordered)\nBOOST_OPERATOR_TEMPLATE(additive)\nBOOST_OPERATOR_TEMPLATE(multiplicative)\nBOOST_OPERATOR_TEMPLATE(integer_multiplicative)\nBOOST_OPERATOR_TEMPLATE(arithmetic)\nBOOST_OPERATOR_TEMPLATE(integer_arithmetic)\nBOOST_OPERATOR_TEMPLATE(bitwise)\nBOOST_OPERATOR_TEMPLATE1(unit_steppable)\nBOOST_OPERATOR_TEMPLATE(shiftable)\nBOOST_OPERATOR_TEMPLATE(ring_operators)\nBOOST_OPERATOR_TEMPLATE(ordered_ring_operators)\nBOOST_OPERATOR_TEMPLATE(field_operators)\nBOOST_OPERATOR_TEMPLATE(ordered_field_operators)\nBOOST_OPERATOR_TEMPLATE(euclidian_ring_operators)\nBOOST_OPERATOR_TEMPLATE(ordered_euclidian_ring_operators)\nBOOST_OPERATOR_TEMPLATE(euclidean_ring_operators)\nBOOST_OPERATOR_TEMPLATE(ordered_euclidean_ring_operators)\nBOOST_OPERATOR_TEMPLATE2(input_iteratable)\nBOOST_OPERATOR_TEMPLATE1(output_iteratable)\nBOOST_OPERATOR_TEMPLATE2(forward_iteratable)\nBOOST_OPERATOR_TEMPLATE2(bidirectional_iteratable)\nBOOST_OPERATOR_TEMPLATE4(random_access_iteratable)\n\n#undef BOOST_OPERATOR_TEMPLATE\n#undef BOOST_OPERATOR_TEMPLATE4\n#undef BOOST_OPERATOR_TEMPLATE3\n#undef BOOST_OPERATOR_TEMPLATE2\n#undef BOOST_OPERATOR_TEMPLATE1\n#undef BOOST_IMPORT_TEMPLATE1\n#undef BOOST_IMPORT_TEMPLATE2\n#undef BOOST_IMPORT_TEMPLATE3\n#undef BOOST_IMPORT_TEMPLATE4\n\n// The following 'operators' classes can only be used portably if the derived class\n// declares ALL of the required member operators.\ntemplate <class T, class U>\nstruct operators2\n    : totally_ordered2<T,U\n    , integer_arithmetic2<T,U\n    , bitwise2<T,U\n      > > > {};\n\ntemplate <class T, class U = T>\nstruct operators : operators2<T, U> {};\n\ntemplate <class T> struct operators<T, T>\n    : totally_ordered<T\n    , integer_arithmetic<T\n    , bitwise<T\n    , unit_steppable<T\n      > > > > {};\n\n//  Iterator helper classes (contributed by Jeremy Siek) -------------------//\n//  (Input and output iterator helpers contributed by Daryle Walker) -------//\n//  (Changed to use combined operator classes by Daryle Walker) ------------//\ntemplate <class T,\n          class V,\n          class D = std::ptrdiff_t,\n          class P = V const *,\n          class R = V const &>\nstruct input_iterator_helper\n  : input_iteratable<T, P\n  , std::iterator<std::input_iterator_tag, V, D, P, R\n    > > {};\n\ntemplate<class T>\nstruct output_iterator_helper\n  : output_iteratable<T\n  , std::iterator<std::output_iterator_tag, void, void, void, void\n  > >\n{\n  T& operator*()  { return static_cast<T&>(*this); }\n  T& operator++() { return static_cast<T&>(*this); }\n};\n\ntemplate <class T,\n          class V,\n          class D = std::ptrdiff_t,\n          class P = V*,\n          class R = V&>\nstruct forward_iterator_helper\n  : forward_iteratable<T, P\n  , std::iterator<std::forward_iterator_tag, V, D, P, R\n    > > {};\n\ntemplate <class T,\n          class V,\n          class D = std::ptrdiff_t,\n          class P = V*,\n          class R = V&>\nstruct bidirectional_iterator_helper\n  : bidirectional_iteratable<T, P\n  , std::iterator<std::bidirectional_iterator_tag, V, D, P, R\n    > > {};\n\ntemplate <class T,\n          class V, \n          class D = std::ptrdiff_t,\n          class P = V*,\n          class R = V&>\nstruct random_access_iterator_helper\n  : random_access_iteratable<T, P, D, R\n  , std::iterator<std::random_access_iterator_tag, V, D, P, R\n    > >\n{\n  friend D requires_difference_operator(const T& x, const T& y) {\n    return x - y;\n  }\n}; // random_access_iterator_helper\n\n} // namespace boost\n\n#if defined(__sgi) && !defined(__GNUC__)\n#pragma reset woff 1234\n#endif\n\n#endif // BOOST_OPERATORS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/alpha.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_ALPHA_H\n#define BOOST_PREDEF_ARCHITECTURE_ALPHA_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_ALPHA`]\n\n[@http://en.wikipedia.org/wiki/DEC_Alpha DEC Alpha] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n    [[`__alpha__`] [__predef_detection__]]\n    [[`__alpha`] [__predef_detection__]]\n    [[`_M_ALPHA`] [__predef_detection__]]\n\n    [[`__alpha_ev4__`] [4.0.0]]\n    [[`__alpha_ev5__`] [5.0.0]]\n    [[`__alpha_ev6__`] [6.0.0]]\n    ]\n */\n\n#define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__alpha__) || defined(__alpha) || \\\n    defined(_M_ALPHA)\n#   undef BOOST_ARCH_ALPHA\n#   if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev4__)\n#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(4,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev5__)\n#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(5,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev6__)\n#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(6,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_ALPHA)\n#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_ALPHA\n#   define BOOST_ARCH_ALPHA_AVAILABLE\n#endif\n\n#define BOOST_ARCH_ALPHA_NAME \"DEC Alpha\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_ALPHA,BOOST_ARCH_ALPHA_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/arm.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nCopyright Franz Detro 2014\nCopyright (c) Microsoft Corporation 2014\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_ARM_H\n#define BOOST_PREDEF_ARCHITECTURE_ARM_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_ARM`]\n\n[@http://en.wikipedia.org/wiki/ARM_architecture ARM] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__arm__`] [__predef_detection__]]\n    [[`__arm64`] [__predef_detection__]]\n    [[`__thumb__`] [__predef_detection__]]\n    [[`__TARGET_ARCH_ARM`] [__predef_detection__]]\n    [[`__TARGET_ARCH_THUMB`] [__predef_detection__]]\n    [[`_M_ARM`] [__predef_detection__]]\n\n    [[`__arm64`] [8.0.0]]\n    [[`__TARGET_ARCH_ARM`] [V.0.0]]\n    [[`__TARGET_ARCH_THUMB`] [V.0.0]]\n    [[`_M_ARM`] [V.0.0]]\n    ]\n */\n\n#define BOOST_ARCH_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__arm__) || defined(__arm64) || defined(__thumb__) || \\\n    defined(__TARGET_ARCH_ARM) || defined(__TARGET_ARCH_THUMB) || \\\n    defined(_M_ARM)\n#   undef BOOST_ARCH_ARM\n#   if !defined(BOOST_ARCH_ARM) && defined(__arm64)\n#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(8,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_ARM)\n#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_ARM,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_THUMB)\n#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_THUMB,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_ARM) && defined(_M_ARM)\n#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(_M_ARM,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_ARM)\n#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_ARM\n#   define BOOST_ARCH_ARM_AVAILABLE\n#endif\n\n#define BOOST_ARCH_ARM_NAME \"ARM\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_ARM,BOOST_ARCH_ARM_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/blackfin.h",
    "content": "/*\nCopyright Rene Rivera 2013-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_BLACKFIN_H\n#define BOOST_PREDEF_ARCHITECTURE_BLACKFIN_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_BLACKFIN`]\n\nBlackfin Processors from Analog Devices.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__bfin__`] [__predef_detection__]]\n    [[`__BFIN__`] [__predef_detection__]]\n    [[`bfin`] [__predef_detection__]]\n    [[`BFIN`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_ARCH_BLACKFIN BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__bfin__) || defined(__BFIN__) || \\\n    defined(bfin) || defined(BFIN)\n#   undef BOOST_ARCH_BLACKFIN\n#   define BOOST_ARCH_BLACKFIN BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_ARCH_BLACKFIN\n#   define BOOST_ARCH_BLACKFIN_AVAILABLE\n#endif\n\n#define BOOST_ARCH_BLACKFIN_NAME \"Blackfin\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_BLACKFIN,BOOST_ARCH_BLACKFIN_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/convex.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_CONVEX_H\n#define BOOST_PREDEF_ARCHITECTURE_CONVEX_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_CONVEX`]\n\n[@http://en.wikipedia.org/wiki/Convex_Computer Convex Computer] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__convex__`] [__predef_detection__]]\n\n    [[`__convex_c1__`] [1.0.0]]\n    [[`__convex_c2__`] [2.0.0]]\n    [[`__convex_c32__`] [3.2.0]]\n    [[`__convex_c34__`] [3.4.0]]\n    [[`__convex_c38__`] [3.8.0]]\n    ]\n */\n\n#define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__convex__)\n#   undef BOOST_ARCH_CONVEX\n#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c1__)\n#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(1,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c2__)\n#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(2,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c32__)\n#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,2,0)\n#   endif\n#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c34__)\n#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,4,0)\n#   endif\n#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c38__)\n#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,8,0)\n#   endif\n#   if !defined(BOOST_ARCH_CONVEX)\n#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_CONVEX\n#   define BOOST_ARCH_CONVEX_AVAILABLE\n#endif\n\n#define BOOST_ARCH_CONVEX_NAME \"Convex Computer\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_CONVEX,BOOST_ARCH_CONVEX_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/ia64.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_IA64_H\n#define BOOST_PREDEF_ARCHITECTURE_IA64_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_IA64`]\n\n[@http://en.wikipedia.org/wiki/Ia64 Intel Itanium 64] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__ia64__`] [__predef_detection__]]\n    [[`_IA64`] [__predef_detection__]]\n    [[`__IA64__`] [__predef_detection__]]\n    [[`__ia64`] [__predef_detection__]]\n    [[`_M_IA64`] [__predef_detection__]]\n    [[`__itanium__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_ARCH_IA64 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__ia64__) || defined(_IA64) || \\\n    defined(__IA64__) || defined(__ia64) || \\\n    defined(_M_IA64) || defined(__itanium__)\n#   undef BOOST_ARCH_IA64\n#   define BOOST_ARCH_IA64 BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_ARCH_IA64\n#   define BOOST_ARCH_IA64_AVAILABLE\n#endif\n\n#define BOOST_ARCH_IA64_NAME \"Intel Itanium 64\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_IA64,BOOST_ARCH_IA64_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/m68k.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_M68K_H\n#define BOOST_PREDEF_ARCHITECTURE_M68K_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_M68K`]\n\n[@http://en.wikipedia.org/wiki/M68k Motorola 68k] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__m68k__`] [__predef_detection__]]\n    [[`M68000`] [__predef_detection__]]\n\n    [[`__mc68060__`] [6.0.0]]\n    [[`mc68060`] [6.0.0]]\n    [[`__mc68060`] [6.0.0]]\n    [[`__mc68040__`] [4.0.0]]\n    [[`mc68040`] [4.0.0]]\n    [[`__mc68040`] [4.0.0]]\n    [[`__mc68030__`] [3.0.0]]\n    [[`mc68030`] [3.0.0]]\n    [[`__mc68030`] [3.0.0]]\n    [[`__mc68020__`] [2.0.0]]\n    [[`mc68020`] [2.0.0]]\n    [[`__mc68020`] [2.0.0]]\n    [[`__mc68010__`] [1.0.0]]\n    [[`mc68010`] [1.0.0]]\n    [[`__mc68010`] [1.0.0]]\n    [[`__mc68000__`] [0.0.1]]\n    [[`mc68000`] [0.0.1]]\n    [[`__mc68000`] [0.0.1]]\n    ]\n */\n\n#define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__m68k__) || defined(M68000)\n#   undef BOOST_ARCH_M68K\n#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68060__) || defined(mc68060) || defined(__mc68060))\n#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(6,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68040__) || defined(mc68040) || defined(__mc68040))\n#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(4,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68030__) || defined(mc68030) || defined(__mc68030))\n#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(3,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68020__) || defined(mc68020) || defined(__mc68020))\n#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(2,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68010__) || defined(mc68010) || defined(__mc68010))\n#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(1,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68000__) || defined(mc68000) || defined(__mc68000))\n#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#   if !defined(BOOST_ARCH_M68K)\n#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_M68K\n#   define BOOST_ARCH_M68K_AVAILABLE\n#endif\n\n#define BOOST_ARCH_M68K_NAME \"Motorola 68k\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_M68K,BOOST_ARCH_M68K_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/mips.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_MIPS_H\n#define BOOST_PREDEF_ARCHITECTURE_MIPS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_MIPS`]\n\n[@http://en.wikipedia.org/wiki/MIPS_architecture MIPS] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__mips__`] [__predef_detection__]]\n    [[`__mips`] [__predef_detection__]]\n    [[`__MIPS__`] [__predef_detection__]]\n\n    [[`__mips`] [V.0.0]]\n    [[`_MIPS_ISA_MIPS1`] [1.0.0]]\n    [[`_R3000`] [1.0.0]]\n    [[`_MIPS_ISA_MIPS2`] [2.0.0]]\n    [[`__MIPS_ISA2__`] [2.0.0]]\n    [[`_R4000`] [2.0.0]]\n    [[`_MIPS_ISA_MIPS3`] [3.0.0]]\n    [[`__MIPS_ISA3__`] [3.0.0]]\n    [[`_MIPS_ISA_MIPS4`] [4.0.0]]\n    [[`__MIPS_ISA4__`] [4.0.0]]\n    ]\n */\n\n#define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__mips__) || defined(__mips) || \\\n    defined(__MIPS__)\n#   undef BOOST_ARCH_MIPS\n#   if !defined(BOOST_ARCH_MIPS) && (defined(__mips))\n#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(__mips,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS1) || defined(_R3000))\n#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(1,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS2) || defined(__MIPS_ISA2__) || defined(_R4000))\n#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(2,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS3) || defined(__MIPS_ISA3__))\n#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(3,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS4) || defined(__MIPS_ISA4__))\n#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(4,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_MIPS)\n#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_MIPS\n#   define BOOST_ARCH_MIPS_AVAILABLE\n#endif\n\n#define BOOST_ARCH_MIPS_NAME \"MIPS\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_MIPS,BOOST_ARCH_MIPS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/parisc.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_PARISC_H\n#define BOOST_PREDEF_ARCHITECTURE_PARISC_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_PARISK`]\n\n[@http://en.wikipedia.org/wiki/PA-RISC_family HP/PA RISC] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__hppa__`] [__predef_detection__]]\n    [[`__hppa`] [__predef_detection__]]\n    [[`__HPPA__`] [__predef_detection__]]\n\n    [[`_PA_RISC1_0`] [1.0.0]]\n    [[`_PA_RISC1_1`] [1.1.0]]\n    [[`__HPPA11__`] [1.1.0]]\n    [[`__PA7100__`] [1.1.0]]\n    [[`_PA_RISC2_0`] [2.0.0]]\n    [[`__RISC2_0__`] [2.0.0]]\n    [[`__HPPA20__`] [2.0.0]]\n    [[`__PA8000__`] [2.0.0]]\n    ]\n */\n\n#define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__hppa__) || defined(__hppa) || defined(__HPPA__)\n#   undef BOOST_ARCH_PARISC\n#   if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC1_0))\n#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(1,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC1_1) || defined(__HPPA11__) || defined(__PA7100__))\n#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(1,1,0)\n#   endif\n#   if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC2_0) || defined(__RISC2_0__) || defined(__HPPA20__) || defined(__PA8000__))\n#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(2,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_PARISC)\n#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_PARISC\n#   define BOOST_ARCH_PARISC_AVAILABLE\n#endif\n\n#define BOOST_ARCH_PARISC_NAME \"HP/PA RISC\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PARISC,BOOST_ARCH_PARISC_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/ppc.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_PPC_H\n#define BOOST_PREDEF_ARCHITECTURE_PPC_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_PPC`]\n\n[@http://en.wikipedia.org/wiki/PowerPC PowerPC] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__powerpc`] [__predef_detection__]]\n    [[`__powerpc__`] [__predef_detection__]]\n    [[`__POWERPC__`] [__predef_detection__]]\n    [[`__ppc__`] [__predef_detection__]]\n    [[`_M_PPC`] [__predef_detection__]]\n    [[`_ARCH_PPC`] [__predef_detection__]]\n    [[`__PPCGECKO__`] [__predef_detection__]]\n    [[`__PPCBROADWAY__`] [__predef_detection__]]\n    [[`_XENON`] [__predef_detection__]]\n\n    [[`__ppc601__`] [6.1.0]]\n    [[`_ARCH_601`] [6.1.0]]\n    [[`__ppc603__`] [6.3.0]]\n    [[`_ARCH_603`] [6.3.0]]\n    [[`__ppc604__`] [6.4.0]]\n    [[`__ppc604__`] [6.4.0]]\n    ]\n */\n\n#define BOOST_ARCH_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__powerpc) || defined(__powerpc__) || \\\n    defined(__POWERPC__) || defined(__ppc__) || \\\n    defined(_M_PPC) || defined(_ARCH_PPC) || \\\n    defined(__PPCGECKO__) || defined(__PPCBROADWAY__) || \\\n    defined(_XENON)\n#   undef BOOST_ARCH_PPC\n#   if !defined (BOOST_ARCH_PPC) && (defined(__ppc601__) || defined(_ARCH_601))\n#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,1,0)\n#   endif\n#   if !defined (BOOST_ARCH_PPC) && (defined(__ppc603__) || defined(_ARCH_603))\n#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,3,0)\n#   endif\n#   if !defined (BOOST_ARCH_PPC) && (defined(__ppc604__) || defined(__ppc604__))\n#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,4,0)\n#   endif\n#   if !defined (BOOST_ARCH_PPC)\n#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_PPC\n#   define BOOST_ARCH_PPC_AVAILABLE\n#endif\n\n#define BOOST_ARCH_PPC_NAME \"PowerPC\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PPC,BOOST_ARCH_PPC_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/pyramid.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_PYRAMID_H\n#define BOOST_PREDEF_ARCHITECTURE_PYRAMID_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_PYRAMID`]\n\nPyramid 9810 architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`pyr`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_ARCH_PYRAMID BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(pyr)\n#   undef BOOST_ARCH_PYRAMID\n#   define BOOST_ARCH_PYRAMID BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_ARCH_PYRAMID\n#   define BOOST_ARCH_PYRAMID_AVAILABLE\n#endif\n\n#define BOOST_ARCH_PYRAMID_NAME \"Pyramid 9810\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PYRAMID,BOOST_ARCH_PYRAMID_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/rs6k.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_RS6K_H\n#define BOOST_PREDEF_ARCHITECTURE_RS6K_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_RS6000`]\n\n[@http://en.wikipedia.org/wiki/RS/6000 RS/6000] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__THW_RS6000`] [__predef_detection__]]\n    [[`_IBMR2`] [__predef_detection__]]\n    [[`_POWER`] [__predef_detection__]]\n    [[`_ARCH_PWR`] [__predef_detection__]]\n    [[`_ARCH_PWR2`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_ARCH_RS6000 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__THW_RS6000) || defined(_IBMR2) || \\\n    defined(_POWER) || defined(_ARCH_PWR) || \\\n    defined(_ARCH_PWR2)\n#   undef BOOST_ARCH_RS6000\n#   define BOOST_ARCH_RS6000 BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_ARCH_RS6000\n#   define BOOST_ARCH_RS6000_AVAILABLE\n#endif\n\n#define BOOST_ARCH_RS6000_NAME \"RS/6000\"\n\n#define BOOST_ARCH_PWR BOOST_ARCH_RS6000\n\n#if BOOST_ARCH_PWR\n#   define BOOST_ARCH_PWR_AVAILABLE\n#endif\n\n#define BOOST_ARCH_PWR_NAME BOOST_ARCH_RS6000_NAME\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_RS6000,BOOST_ARCH_RS6000_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/sparc.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_SPARC_H\n#define BOOST_PREDEF_ARCHITECTURE_SPARC_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_SPARC`]\n\n[@http://en.wikipedia.org/wiki/SPARC SPARC] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__sparc__`] [__predef_detection__]]\n    [[`__sparc`] [__predef_detection__]]\n\n    [[`__sparcv9`] [9.0.0]]\n    [[`__sparcv8`] [8.0.0]]\n    ]\n */\n\n#define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__sparc__) || defined(__sparc)\n#   undef BOOST_ARCH_SPARC\n#   if !defined(BOOST_ARCH_SPARC) && defined(__sparcv9)\n#       define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER(9,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_SPARC) && defined(__sparcv8)\n#       define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER(8,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_SPARC)\n#       define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_SPARC\n#   define BOOST_ARCH_SPARC_AVAILABLE\n#endif\n\n#define BOOST_ARCH_SPARC_NAME \"SPARC\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SPARC,BOOST_ARCH_SPARC_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/superh.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_SUPERH_H\n#define BOOST_PREDEF_ARCHITECTURE_SUPERH_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_SH`]\n\n[@http://en.wikipedia.org/wiki/SuperH SuperH] architecture:\nIf available versions \\[1-5\\] are specifically detected.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__sh__`] [__predef_detection__]]\n\n    [[`__SH5__`] [5.0.0]]\n    [[`__SH4__`] [4.0.0]]\n    [[`__sh3__`] [3.0.0]]\n    [[`__SH3__`] [3.0.0]]\n    [[`__sh2__`] [2.0.0]]\n    [[`__sh1__`] [1.0.0]]\n    ]\n */\n\n#define BOOST_ARCH_SH BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__sh__)\n#   undef BOOST_ARCH_SH\n#   if !defined(BOOST_ARCH_SH) && (defined(__SH5__))\n#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(5,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_SH) && (defined(__SH4__))\n#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(4,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_SH) && (defined(__sh3__) || defined(__SH3__))\n#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(3,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_SH) && (defined(__sh2__))\n#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(2,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_SH) && (defined(__sh1__))\n#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(1,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_SH)\n#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_SH\n#   define BOOST_ARCH_SH_AVAILABLE\n#endif\n\n#define BOOST_ARCH_SH_NAME \"SuperH\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SH,BOOST_ARCH_SH_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/sys370.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_SYS370_H\n#define BOOST_PREDEF_ARCHITECTURE_SYS370_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_SYS370`]\n\n[@http://en.wikipedia.org/wiki/System/370 System/370] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__370__`] [__predef_detection__]]\n    [[`__THW_370__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_ARCH_SYS370 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__370__) || defined(__THW_370__)\n#   undef BOOST_ARCH_SYS370\n#   define BOOST_ARCH_SYS370 BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_ARCH_SYS370\n#   define BOOST_ARCH_SYS370_AVAILABLE\n#endif\n\n#define BOOST_ARCH_SYS370_NAME \"System/370\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SYS370,BOOST_ARCH_SYS370_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/sys390.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_SYS390_H\n#define BOOST_PREDEF_ARCHITECTURE_SYS390_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_SYS390`]\n\n[@http://en.wikipedia.org/wiki/System/390 System/390] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__s390__`] [__predef_detection__]]\n    [[`__s390x__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_ARCH_SYS390 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__s390__) || defined(__s390x__)\n#   undef BOOST_ARCH_SYS390\n#   define BOOST_ARCH_SYS390 BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_ARCH_SYS390\n#   define BOOST_ARCH_SYS390_AVAILABLE\n#endif\n\n#define BOOST_ARCH_SYS390_NAME \"System/390\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SYS390,BOOST_ARCH_SYS390_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/x86/32.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_X86_32_H\n#define BOOST_PREDEF_ARCHITECTURE_X86_32_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_X86_32`]\n\n[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture:\nIf available versions \\[3-6\\] are specifically detected.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`i386`] [__predef_detection__]]\n    [[`__i386__`] [__predef_detection__]]\n    [[`__i486__`] [__predef_detection__]]\n    [[`__i586__`] [__predef_detection__]]\n    [[`__i686__`] [__predef_detection__]]\n    [[`__i386`] [__predef_detection__]]\n    [[`_M_IX86`] [__predef_detection__]]\n    [[`_X86_`] [__predef_detection__]]\n    [[`__THW_INTEL__`] [__predef_detection__]]\n    [[`__I86__`] [__predef_detection__]]\n    [[`__INTEL__`] [__predef_detection__]]\n\n    [[`__I86__`] [V.0.0]]\n    [[`_M_IX86`] [V.0.0]]\n    [[`__i686__`] [6.0.0]]\n    [[`__i586__`] [5.0.0]]\n    [[`__i486__`] [4.0.0]]\n    [[`__i386__`] [3.0.0]]\n    ]\n */\n\n#define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(i386) || defined(__i386__) || \\\n    defined(__i486__) || defined(__i586__) || \\\n    defined(__i686__) || defined(__i386) || \\\n    defined(_M_IX86) || defined(_X86_) || \\\n    defined(__THW_INTEL__) || defined(__I86__) || \\\n    defined(__INTEL__)\n#   undef BOOST_ARCH_X86_32\n#   if !defined(BOOST_ARCH_X86_32) && defined(__I86__)\n#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(__I86__,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_X86_32) && defined(_M_IX86)\n#       define BOOST_ARCH_X86_32 BOOST_PREDEF_MAKE_10_VV00(_M_IX86)\n#   endif\n#   if !defined(BOOST_ARCH_X86_32) && defined(__i686__)\n#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(6,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_X86_32) && defined(__i586__)\n#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(5,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_X86_32) && defined(__i486__)\n#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(4,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_X86_32) && defined(__i386__)\n#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(3,0,0)\n#   endif\n#   if !defined(BOOST_ARCH_X86_32)\n#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_ARCH_X86_32\n#   define BOOST_ARCH_X86_32_AVAILABLE\n#endif\n\n#define BOOST_ARCH_X86_32_NAME \"Intel x86-32\"\n\n#include <boost/predef/architecture/x86.h>\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86_32,BOOST_ARCH_X86_32_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/x86/64.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_X86_64_H\n#define BOOST_PREDEF_ARCHITECTURE_X86_64_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_X86_64`]\n\n[@http://en.wikipedia.org/wiki/Ia64 Intel IA-64] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__x86_64`] [__predef_detection__]]\n    [[`__x86_64__`] [__predef_detection__]]\n    [[`__amd64__`] [__predef_detection__]]\n    [[`__amd64`] [__predef_detection__]]\n    [[`_M_X64`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_ARCH_X86_64 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__x86_64) || defined(__x86_64__) || \\\n    defined(__amd64__) || defined(__amd64) || \\\n    defined(_M_X64)\n#   undef BOOST_ARCH_X86_64\n#   define BOOST_ARCH_X86_64 BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_ARCH_X86_64\n#   define BOOST_ARCH_X86_64_AVAILABLE\n#endif\n\n#define BOOST_ARCH_X86_64_NAME \"Intel x86-64\"\n\n#include <boost/predef/architecture/x86.h>\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86_64,BOOST_ARCH_X86_64_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/x86.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#include <boost/predef/architecture/x86/32.h>\n#include <boost/predef/architecture/x86/64.h>\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_X86_H\n#define BOOST_PREDEF_ARCHITECTURE_X86_H\n\n/*`\n[heading `BOOST_ARCH_X86`]\n\n[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture. This is\na category to indicate that either `BOOST_ARCH_X86_32` or\n`BOOST_ARCH_X86_64` is detected.\n */\n\n#define BOOST_ARCH_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if BOOST_ARCH_X86_32 || BOOST_ARCH_X86_64\n#   undef BOOST_ARCH_X86\n#   define BOOST_ARCH_X86 BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_ARCH_X86\n#   define BOOST_ARCH_X86_AVAILABLE\n#endif\n\n#define BOOST_ARCH_X86_NAME \"Intel x86\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86,BOOST_ARCH_X86_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture/z.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ARCHITECTURE_Z_H\n#define BOOST_PREDEF_ARCHITECTURE_Z_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_ARCH_Z`]\n\n[@http://en.wikipedia.org/wiki/Z/Architecture z/Architecture] architecture.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__SYSC_ZARCH__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_ARCH_Z BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__SYSC_ZARCH__)\n#   undef BOOST_ARCH_Z\n#   define BOOST_ARCH_Z BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_ARCH_Z\n#   define BOOST_ARCH_Z_AVAILABLE\n#endif\n\n#define BOOST_ARCH_Z_NAME \"z/Architecture\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_Z,BOOST_ARCH_Z_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/architecture.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_ARCHITECTURE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_ARCHITECTURE_H\n#define BOOST_PREDEF_ARCHITECTURE_H\n#endif\n\n#include <boost/predef/architecture/alpha.h>\n#include <boost/predef/architecture/arm.h>\n#include <boost/predef/architecture/blackfin.h>\n#include <boost/predef/architecture/convex.h>\n#include <boost/predef/architecture/ia64.h>\n#include <boost/predef/architecture/m68k.h>\n#include <boost/predef/architecture/mips.h>\n#include <boost/predef/architecture/parisc.h>\n#include <boost/predef/architecture/ppc.h>\n#include <boost/predef/architecture/pyramid.h>\n#include <boost/predef/architecture/rs6k.h>\n#include <boost/predef/architecture/sparc.h>\n#include <boost/predef/architecture/superh.h>\n#include <boost/predef/architecture/sys370.h>\n#include <boost/predef/architecture/sys390.h>\n#include <boost/predef/architecture/x86.h>\n#include <boost/predef/architecture/z.h>\n/*#include <boost/predef/architecture/.h>*/\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/borland.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_BORLAND_H\n#define BOOST_PREDEF_COMPILER_BORLAND_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_BORLAND`]\n\n[@http://en.wikipedia.org/wiki/C_plus_plus_builder Borland C++] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__BORLANDC__`] [__predef_detection__]]\n    [[`__CODEGEARC__`] [__predef_detection__]]\n\n    [[`__BORLANDC__`] [V.R.P]]\n    [[`__CODEGEARC__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_BORLAND BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__BORLANDC__) || defined(__CODEGEARC__)\n#   if !defined(BOOST_COMP_BORLAND_DETECTION) && (defined(__CODEGEARC__))\n#       define BOOST_COMP_BORLAND_DETECTION BOOST_PREDEF_MAKE_0X_VVRP(__CODEGEARC__)\n#   endif\n#   if !defined(BOOST_COMP_BORLAND_DETECTION)\n#       define BOOST_COMP_BORLAND_DETECTION BOOST_PREDEF_MAKE_0X_VVRP(__BORLANDC__)\n#   endif\n#endif\n\n#ifdef BOOST_COMP_BORLAND_DETECTION\n#   define BOOST_COMP_BORLAND_AVAILABLE\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_BORLAND_EMULATED BOOST_COMP_BORLAND_DETECTION\n#   else\n#       undef BOOST_COMP_BORLAND\n#       define BOOST_COMP_BORLAND BOOST_COMP_BORLAND_DETECTION\n#   endif\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_BORLAND_NAME \"Borland C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_BORLAND,BOOST_COMP_BORLAND_NAME)\n\n#ifdef BOOST_COMP_BORLAND_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_BORLAND_EMULATED,BOOST_COMP_BORLAND_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/clang.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_CLANG_H\n#define BOOST_PREDEF_COMPILER_CLANG_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_CLANG`]\n\n[@http://en.wikipedia.org/wiki/Clang Clang] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__clang__`] [__predef_detection__]]\n\n    [[`__clang_major__`, `__clang_minor__`, `__clang_patchlevel__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_CLANG BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__clang__)\n#   define BOOST_COMP_CLANG_DETECTION BOOST_VERSION_NUMBER(__clang_major__,__clang_minor__,__clang_patchlevel__)\n#endif\n\n#ifdef BOOST_COMP_CLANG_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_CLANG_EMULATED BOOST_COMP_CLANG_DETECTION\n#   else\n#       undef BOOST_COMP_CLANG\n#       define BOOST_COMP_CLANG BOOST_COMP_CLANG_DETECTION\n#   endif\n#   define BOOST_COMP_CLANG_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_CLANG_NAME \"Clang\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_CLANG,BOOST_COMP_CLANG_NAME)\n\n#ifdef BOOST_COMP_CLANG_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_CLANG_EMULATED,BOOST_COMP_CLANG_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/comeau.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_COMEAU_H\n#define BOOST_PREDEF_COMPILER_COMEAU_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n#define BOOST_COMP_COMO BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n/*`\n[heading `BOOST_COMP_COMO`]\n\n[@http://en.wikipedia.org/wiki/Comeau_C/C%2B%2B Comeau C++] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__COMO__`] [__predef_detection__]]\n\n    [[`__COMO_VERSION__`] [V.R.P]]\n    ]\n */\n\n#if defined(__COMO__)\n#   if !defined(BOOST_COMP_COMO_DETECTION) && defined(__COMO_VERSION__)\n#       define BOOST_COMP_COMO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__COMO_VERSION__)\n#   endif\n#   if !defined(BOOST_COMP_COMO_DETECTION)\n#       define BOOST_COMP_COMO_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_COMO_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_COMO_EMULATED BOOST_COMP_COMO_DETECTION\n#   else\n#       undef BOOST_COMP_COMO\n#       define BOOST_COMP_COMO BOOST_COMP_COMO_DETECTION\n#   endif\n#   define BOOST_COMP_COMO_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_COMO_NAME \"Comeau C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_COMO,BOOST_COMP_COMO_NAME)\n\n#ifdef BOOST_COMP_COMO_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_COMO_EMULATED,BOOST_COMP_COMO_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/compaq.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_COMPAQ_H\n#define BOOST_PREDEF_COMPILER_COMPAQ_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_DEC`]\n\n[@http://www.openvms.compaq.com/openvms/brochures/deccplus/ Compaq C/C++] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__DECCXX`] [__predef_detection__]]\n    [[`__DECC`] [__predef_detection__]]\n\n    [[`__DECCXX_VER`] [V.R.P]]\n    [[`__DECC_VER`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_DEC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__DECC) || defined(__DECCXX)\n#   if !defined(BOOST_COMP_DEC_DETECTION) && defined(__DECCXX_VER)\n#       define BOOST_COMP_DEC_DETECTION BOOST_PREDEF_MAKE_10_VVRR0PP00(__DECCXX_VER)\n#   endif\n#   if !defined(BOOST_COMP_DEC_DETECTION) && defined(__DECC_VER)\n#       define BOOST_COMP_DEC_DETECTION BOOST_PREDEF_MAKE_10_VVRR0PP00(__DECC_VER)\n#   endif\n#   if !defined(BOOST_COMP_DEC_DETECTION)\n#       define BOOST_COM_DEC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_DEC_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_DEC_EMULATED BOOST_COMP_DEC_DETECTION\n#   else\n#       undef BOOST_COMP_DEC\n#       define BOOST_COMP_DEC BOOST_COMP_DEC_DETECTION\n#   endif\n#   define BOOST_COMP_DEC_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_DEC_NAME \"Compaq C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DEC,BOOST_COMP_DEC_NAME)\n\n#ifdef BOOST_COMP_DEC_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DEC_EMULATED,BOOST_COMP_DEC_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/diab.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_DIAB_H\n#define BOOST_PREDEF_COMPILER_DIAB_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_DIAB`]\n\n[@http://www.windriver.com/products/development_suite/wind_river_compiler/ Diab C/C++] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__DCC__`] [__predef_detection__]]\n\n    [[`__VERSION_NUMBER__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_DIAB BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__DCC__)\n#   define BOOST_COMP_DIAB_DETECTION BOOST_PREDEF_MAKE_10_VRPP(__VERSION_NUMBER__)\n#endif\n\n#ifdef BOOST_COMP_DIAB_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_DIAB_EMULATED BOOST_COMP_DIAB_DETECTION\n#   else\n#       undef BOOST_COMP_DIAB\n#       define BOOST_COMP_DIAB BOOST_COMP_DIAB_DETECTION\n#   endif\n#   define BOOST_COMP_DIAB_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_DIAB_NAME \"Diab C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DIAB,BOOST_COMP_DIAB_NAME)\n\n#ifdef BOOST_COMP_DIAB_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DIAB_EMULATED,BOOST_COMP_DIAB_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/digitalmars.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_DIGITALMARS_H\n#define BOOST_PREDEF_COMPILER_DIGITALMARS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_DMC`]\n\n[@http://en.wikipedia.org/wiki/Digital_Mars Digital Mars] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__DMC__`] [__predef_detection__]]\n\n    [[`__DMC__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_DMC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__DMC__)\n#   define BOOST_COMP_DMC_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__DMC__)\n#endif\n\n#ifdef BOOST_COMP_DMC_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_DMC_EMULATED BOOST_COMP_DMC_DETECTION\n#   else\n#       undef BOOST_COMP_DMC\n#       define BOOST_COMP_DMC BOOST_COMP_DMC_DETECTION\n#   endif\n#   define BOOST_COMP_DMC_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_DMC_NAME \"Digital Mars\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DMC,BOOST_COMP_DMC_NAME)\n\n#ifdef BOOST_COMP_DMC_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DMC_EMULATED,BOOST_COMP_DMC_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/dignus.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_DIGNUS_H\n#define BOOST_PREDEF_COMPILER_DIGNUS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_SYSC`]\n\n[@http://www.dignus.com/dcxx/ Dignus Systems/C++] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__SYSC__`] [__predef_detection__]]\n\n    [[`__SYSC_VER__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_SYSC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__SYSC__)\n#   define BOOST_COMP_SYSC_DETECTION BOOST_PREDEF_MAKE_10_VRRPP(__SYSC_VER__)\n#endif\n\n#ifdef BOOST_COMP_SYSC_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_SYSC_EMULATED BOOST_COMP_SYSC_DETECTION\n#   else\n#       undef BOOST_COMP_SYSC\n#       define BOOST_COMP_SYSC BOOST_COMP_SYSC_DETECTION\n#   endif\n#   define BOOST_COMP_SYSC_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_SYSC_NAME \"Dignus Systems/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SYSC,BOOST_COMP_SYSC_NAME)\n\n#ifdef BOOST_COMP_SYSC_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SYSC_EMULATED,BOOST_COMP_SYSC_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/edg.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_EDG_H\n#define BOOST_PREDEF_COMPILER_EDG_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_EDG`]\n\n[@http://en.wikipedia.org/wiki/Edison_Design_Group EDG C++ Frontend] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__EDG__`] [__predef_detection__]]\n\n    [[`__EDG_VERSION__`] [V.R.0]]\n    ]\n */\n\n#define BOOST_COMP_EDG BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__EDG__)\n#   define BOOST_COMP_EDG_DETECTION BOOST_PREDEF_MAKE_10_VRR(__EDG_VERSION__)\n#endif\n\n#ifdef BOOST_COMP_EDG_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_EDG_EMULATED BOOST_COMP_EDG_DETECTION\n#   else\n#       undef BOOST_COMP_EDG\n#       define BOOST_COMP_EDG BOOST_COMP_EDG_DETECTION\n#   endif\n#   define BOOST_COMP_EDG_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_EDG_NAME \"EDG C++ Frontend\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_EDG,BOOST_COMP_EDG_NAME)\n\n#ifdef BOOST_COMP_EDG_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_EDG_EMULATED,BOOST_COMP_EDG_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/ekopath.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_EKOPATH_H\n#define BOOST_PREDEF_COMPILER_EKOPATH_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_PATH`]\n\n[@http://en.wikipedia.org/wiki/PathScale EKOpath] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__PATHCC__`] [__predef_detection__]]\n\n    [[`__PATHCC__`, `__PATHCC_MINOR__`, `__PATHCC_PATCHLEVEL__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_PATH BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__PATHCC__)\n#   define BOOST_COMP_PATH_DETECTION \\\n        BOOST_VERSION_NUMBER(__PATHCC__,__PATHCC_MINOR__,__PATHCC_PATCHLEVEL__)\n#endif\n\n#ifdef BOOST_COMP_PATH_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_PATH_EMULATED BOOST_COMP_PATH_DETECTION\n#   else\n#       undef BOOST_COMP_PATH\n#       define BOOST_COMP_PATH BOOST_COMP_PATH_DETECTION\n#   endif\n#   define BOOST_COMP_PATH_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_PATH_NAME \"EKOpath\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PATH,BOOST_COMP_PATH_NAME)\n\n#ifdef BOOST_COMP_PATH_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PATH_EMULATED,BOOST_COMP_PATH_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/gcc.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_GCC_H\n#define BOOST_PREDEF_COMPILER_GCC_H\n\n/* Other compilers that emulate this one need to be detected first. */\n\n#include <boost/predef/compiler/clang.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_GNUC`]\n\n[@http://en.wikipedia.org/wiki/GNU_Compiler_Collection Gnu GCC C/C++] compiler.\nVersion number available as major, minor, and patch (if available).\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__GNUC__`] [__predef_detection__]]\n\n    [[`__GNUC__`, `__GNUC_MINOR__`, `__GNUC_PATCHLEVEL__`] [V.R.P]]\n    [[`__GNUC__`, `__GNUC_MINOR__`] [V.R.0]]\n    ]\n */\n\n#define BOOST_COMP_GNUC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__GNUC__)\n#   if !defined(BOOST_COMP_GNUC_DETECTION) && defined(__GNUC_PATCHLEVEL__)\n#       define BOOST_COMP_GNUC_DETECTION \\\n            BOOST_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__)\n#   endif\n#   if !defined(BOOST_COMP_GNUC_DETECTION)\n#       define BOOST_COMP_GNUC_DETECTION \\\n            BOOST_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,0)\n#   endif\n#endif\n\n#ifdef BOOST_COMP_GNUC_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_GNUC_EMULATED BOOST_COMP_GNUC_DETECTION\n#   else\n#       undef BOOST_COMP_GNUC\n#       define BOOST_COMP_GNUC BOOST_COMP_GNUC_DETECTION\n#   endif\n#   define BOOST_COMP_GNUC_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_GNUC_NAME \"Gnu GCC C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GNUC,BOOST_COMP_GNUC_NAME)\n\n#ifdef BOOST_COMP_GNUC_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GNUC_EMULATED,BOOST_COMP_GNUC_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/gcc_xml.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_GCC_XML_H\n#define BOOST_PREDEF_COMPILER_GCC_XML_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_GCCXML`]\n\n[@http://www.gccxml.org/ GCC XML] compiler.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__GCCXML__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_COMP_GCCXML BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__GCCXML__)\n#   define BOOST_COMP_GCCXML_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#ifdef BOOST_COMP_GCCXML_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_GCCXML_EMULATED BOOST_COMP_GCCXML_DETECTION\n#   else\n#       undef BOOST_COMP_GCCXML\n#       define BOOST_COMP_GCCXML BOOST_COMP_GCCXML_DETECTION\n#   endif\n#   define BOOST_COMP_GCCXML_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_GCCXML_NAME \"GCC XML\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GCCXML,BOOST_COMP_GCCXML_NAME)\n\n#ifdef BOOST_COMP_GCCXML_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GCCXML_EMULATED,BOOST_COMP_GCCXML_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/greenhills.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_GREENHILLS_H\n#define BOOST_PREDEF_COMPILER_GREENHILLS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_GHS`]\n\n[@http://en.wikipedia.org/wiki/Green_Hills_Software Green Hills C/C++] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__ghs`] [__predef_detection__]]\n    [[`__ghs__`] [__predef_detection__]]\n\n    [[`__GHS_VERSION_NUMBER__`] [V.R.P]]\n    [[`__ghs`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_GHS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__ghs) || defined(__ghs__)\n#   if !defined(BOOST_COMP_GHS_DETECTION) && defined(__GHS_VERSION_NUMBER__)\n#       define BOOST_COMP_GHS_DETECTION BOOST_PREDEF_MAKE_10_VRP(__GHS_VERSION_NUMBER__)\n#   endif\n#   if !defined(BOOST_COMP_GHS_DETECTION) && defined(__ghs)\n#       define BOOST_COMP_GHS_DETECTION BOOST_PREDEF_MAKE_10_VRP(__ghs)\n#   endif\n#   if !defined(BOOST_COMP_GHS_DETECTION)\n#       define BOOST_COMP_GHS_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_GHS_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_GHS_EMULATED BOOST_COMP_GHS_DETECTION\n#   else\n#       undef BOOST_COMP_GHS\n#       define BOOST_COMP_GHS BOOST_COMP_GHS_DETECTION\n#   endif\n#   define BOOST_COMP_GHS_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_GHS_NAME \"Green Hills C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GHS,BOOST_COMP_GHS_NAME)\n\n#ifdef BOOST_COMP_GHS_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GHS_EMULATED,BOOST_COMP_GHS_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/hp_acc.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_HP_ACC_H\n#define BOOST_PREDEF_COMPILER_HP_ACC_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_HPACC`]\n\nHP aC++ compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__HP_aCC`] [__predef_detection__]]\n\n    [[`__HP_aCC`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_HPACC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__HP_aCC)\n#   if !defined(BOOST_COMP_HPACC_DETECTION) && (__HP_aCC > 1)\n#       define BOOST_COMP_HPACC_DETECTION BOOST_PREDEF_MAKE_10_VVRRPP(__HP_aCC)\n#   endif\n#   if !defined(BOOST_COMP_HPACC_DETECTION)\n#       define BOOST_COMP_HPACC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_HPACC_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_HPACC_EMULATED BOOST_COMP_HPACC_DETECTION\n#   else\n#       undef BOOST_COMP_HPACC\n#       define BOOST_COMP_HPACC BOOST_COMP_HPACC_DETECTION\n#   endif\n#   define BOOST_COMP_HPACC_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_HPACC_NAME \"HP aC++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HPACC,BOOST_COMP_HPACC_NAME)\n\n#ifdef BOOST_COMP_HPACC_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HPACC_EMULATED,BOOST_COMP_HPACC_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/iar.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_IAR_H\n#define BOOST_PREDEF_COMPILER_IAR_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_IAR`]\n\nIAR C/C++ compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__IAR_SYSTEMS_ICC__`] [__predef_detection__]]\n\n    [[`__VER__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_IAR BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__IAR_SYSTEMS_ICC__)\n#   define BOOST_COMP_IAR_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__VER__)\n#endif\n\n#ifdef BOOST_COMP_IAR_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_IAR_EMULATED BOOST_COMP_IAR_DETECTION\n#   else\n#       undef BOOST_COMP_IAR\n#       define BOOST_COMP_IAR BOOST_COMP_IAR_DETECTION\n#   endif\n#   define BOOST_COMP_IAR_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_IAR_NAME \"IAR C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IAR,BOOST_COMP_IAR_NAME)\n\n#ifdef BOOST_COMP_IAR_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IAR_EMULATED,BOOST_COMP_IAR_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/ibm.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_IBM_H\n#define BOOST_PREDEF_COMPILER_IBM_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_IBM`]\n\n[@http://en.wikipedia.org/wiki/VisualAge IBM XL C/C++] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__IBMCPP__`] [__predef_detection__]]\n    [[`__xlC__`] [__predef_detection__]]\n    [[`__xlc__`] [__predef_detection__]]\n\n    [[`__COMPILER_VER__`] [V.R.P]]\n    [[`__xlC__`] [V.R.P]]\n    [[`__xlc__`] [V.R.P]]\n    [[`__IBMCPP__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_IBM BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__IBMCPP__) || defined(__xlC__) || defined(__xlc__)\n#   if !defined(BOOST_COMP_IBM_DETECTION) && defined(__COMPILER_VER__)\n#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VRRPPPP(__COMPILER_VER__)\n#   endif\n#   if !defined(BOOST_COMP_IBM_DETECTION) && defined(__xlC__)\n#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__xlC__)\n#   endif\n#   if !defined(BOOST_COMP_IBM_DETECTION) && defined(__xlc__)\n#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__xlc__)\n#   endif\n#   if !defined(BOOST_COMP_IBM_DETECTION)\n#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_10_VRP(__IBMCPP__)\n#   endif\n#endif\n\n#ifdef BOOST_COMP_IBM_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_IBM_EMULATED BOOST_COMP_IBM_DETECTION\n#   else\n#       undef BOOST_COMP_IBM\n#       define BOOST_COMP_IBM BOOST_COMP_IBM_DETECTION\n#   endif\n#   define BOOST_COMP_IBM_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_IBM_NAME \"IBM XL C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IBM,BOOST_COMP_IBM_NAME)\n\n#ifdef BOOST_COMP_IBM_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IBM_EMULATED,BOOST_COMP_IBM_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/intel.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_INTEL_H\n#define BOOST_PREDEF_COMPILER_INTEL_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_INTEL`]\n\n[@http://en.wikipedia.org/wiki/Intel_C%2B%2B Intel C/C++] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__INTEL_COMPILER`] [__predef_detection__]]\n    [[`__ICL`] [__predef_detection__]]\n    [[`__ICC`] [__predef_detection__]]\n    [[`__ECC`] [__predef_detection__]]\n\n    [[`__INTEL_COMPILER`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_INTEL BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \\\n    defined(__ECC)\n#   if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER)\n#       define BOOST_COMP_INTEL_DETECTION BOOST_PREDEF_MAKE_10_VRP(__INTEL_COMPILER)\n#   endif\n#   if !defined(BOOST_COMP_INTEL_DETECTION)\n#       define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_INTEL_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_INTEL_EMULATED BOOST_COMP_INTEL_DETECTION\n#   else\n#       undef BOOST_COMP_INTEL\n#       define BOOST_COMP_INTEL BOOST_COMP_INTEL_DETECTION\n#   endif\n#   define BOOST_COMP_INTEL_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_INTEL_NAME \"Intel C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_INTEL,BOOST_COMP_INTEL_NAME)\n\n#ifdef BOOST_COMP_INTEL_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_INTEL_EMULATED,BOOST_COMP_INTEL_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/kai.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_KAI_H\n#define BOOST_PREDEF_COMPILER_KAI_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_KCC`]\n\nKai C++ compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__KCC`] [__predef_detection__]]\n\n    [[`__KCC_VERSION`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_KCC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__KCC)\n#   define BOOST_COMP_KCC_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__KCC_VERSION)\n#endif\n\n#ifdef BOOST_COMP_KCC_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_KCC_EMULATED BOOST_COMP_KCC_DETECTION\n#   else\n#       undef BOOST_COMP_KCC\n#       define BOOST_COMP_KCC BOOST_COMP_KCC_DETECTION\n#   endif\n#   define BOOST_COMP_KCC_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_KCC_NAME \"Kai C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_KCC,BOOST_COMP_KCC_NAME)\n\n#ifdef BOOST_COMP_KCC_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_KCC_EMULATED,BOOST_COMP_KCC_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/llvm.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_LLVM_H\n#define BOOST_PREDEF_COMPILER_LLVM_H\n\n/* Other compilers that emulate this one need to be detected first. */\n\n#include <boost/predef/compiler/clang.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_LLVM`]\n\n[@http://en.wikipedia.org/wiki/LLVM LLVM] compiler.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__llvm__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_COMP_LLVM BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__llvm__)\n#   define BOOST_COMP_LLVM_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#ifdef BOOST_COMP_LLVM_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_LLVM_EMULATED BOOST_COMP_LLVM_DETECTION\n#   else\n#       undef BOOST_COMP_LLVM\n#       define BOOST_COMP_LLVM BOOST_COMP_LLVM_DETECTION\n#   endif\n#   define BOOST_COMP_LLVM_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_LLVM_NAME \"LLVM\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_LLVM,BOOST_COMP_LLVM_NAME)\n\n#ifdef BOOST_COMP_LLVM_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_LLVM_EMULATED,BOOST_COMP_LLVM_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/metaware.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_METAWARE_H\n#define BOOST_PREDEF_COMPILER_METAWARE_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_HIGHC`]\n\nMetaWare High C/C++ compiler.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__HIGHC__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_COMP_HIGHC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__HIGHC__)\n#   define BOOST_COMP_HIGHC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#ifdef BOOST_COMP_HIGHC_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_HIGHC_EMULATED BOOST_COMP_HIGHC_DETECTION\n#   else\n#       undef BOOST_COMP_HIGHC\n#       define BOOST_COMP_HIGHC BOOST_COMP_HIGHC_DETECTION\n#   endif\n#   define BOOST_COMP_HIGHC_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_HIGHC_NAME \"MetaWare High C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HIGHC,BOOST_COMP_HIGHC_NAME)\n\n#ifdef BOOST_COMP_HIGHC_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HIGHC_EMULATED,BOOST_COMP_HIGHC_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/metrowerks.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_METROWERKS_H\n#define BOOST_PREDEF_COMPILER_METROWERKS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_MWERKS`]\n\n[@http://en.wikipedia.org/wiki/CodeWarrior Metrowerks CodeWarrior] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__MWERKS__`] [__predef_detection__]]\n    [[`__CWCC__`] [__predef_detection__]]\n\n    [[`__CWCC__`] [V.R.P]]\n    [[`__MWERKS__`] [V.R.P >= 4.2.0]]\n    [[`__MWERKS__`] [9.R.0]]\n    [[`__MWERKS__`] [8.R.0]]\n    ]\n */\n\n#define BOOST_COMP_MWERKS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__MWERKS__) || defined(__CWCC__)\n#   if !defined(BOOST_COMP_MWERKS_DETECTION) && defined(__CWCC__)\n#       define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__CWCC__)\n#   endif\n#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x4200)\n#       define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__MWERKS__)\n#   endif\n#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3204) // note the \"skip\": 04->9.3\n#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100-1,0)\n#   endif\n#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3200)\n#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100,0)\n#   endif\n#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3000)\n#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(8,(__MWERKS__)%100,0)\n#   endif\n#   if !defined(BOOST_COMP_MWERKS_DETECTION)\n#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_MWERKS_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_MWERKS_EMULATED BOOST_COMP_MWERKS_DETECTION\n#   else\n#       undef BOOST_COMP_MWERKS\n#       define BOOST_COMP_MWERKS BOOST_COMP_MWERKS_DETECTION\n#   endif\n#   define BOOST_COMP_MWERKS_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_MWERKS_NAME \"Metrowerks CodeWarrior\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS,BOOST_COMP_MWERKS_NAME)\n\n#ifdef BOOST_COMP_MWERKS_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS_EMULATED,BOOST_COMP_MWERKS_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/microtec.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_MICROTEC_H\n#define BOOST_PREDEF_COMPILER_MICROTEC_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_MRI`]\n\n[@http://www.mentor.com/microtec/ Microtec C/C++] compiler.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`_MRI`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_COMP_MRI BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(_MRI)\n#   define BOOST_COMP_MRI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#ifdef BOOST_COMP_MRI_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_MRI_EMULATED BOOST_COMP_MRI_DETECTION\n#   else\n#       undef BOOST_COMP_MRI\n#       define BOOST_COMP_MRI BOOST_COMP_MRI_DETECTION\n#   endif\n#   define BOOST_COMP_MRI_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_MRI_NAME \"Microtec C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MRI,BOOST_COMP_MRI_NAME)\n\n#ifdef BOOST_COMP_MRI_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MRI_EMULATED,BOOST_COMP_MRI_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/mpw.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_MPW_H\n#define BOOST_PREDEF_COMPILER_MPW_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_MPW`]\n\n[@http://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop MPW C++] compiler.\nVersion number available as major, and minor.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__MRC__`] [__predef_detection__]]\n    [[`MPW_C`] [__predef_detection__]]\n    [[`MPW_CPLUS`] [__predef_detection__]]\n\n    [[`__MRC__`] [V.R.0]]\n    ]\n */\n\n#define BOOST_COMP_MPW BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__MRC__) || defined(MPW_C) || defined(MPW_CPLUS)\n#   if !defined(BOOST_COMP_MPW_DETECTION) && defined(__MRC__)\n#       define BOOST_COMP_MPW_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__MRC__)\n#   endif\n#   if !defined(BOOST_COMP_MPW_DETECTION)\n#       define BOOST_COMP_MPW_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_MPW_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_MPW_EMULATED BOOST_COMP_MPW_DETECTION\n#   else\n#       undef BOOST_COMP_MPW\n#       define BOOST_COMP_MPW BOOST_COMP_MPW_DETECTION\n#   endif\n#   define BOOST_COMP_MPW_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_MPW_NAME \"MPW C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MPW,BOOST_COMP_MPW_NAME)\n\n#ifdef BOOST_COMP_MPW_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MPW_EMULATED,BOOST_COMP_MPW_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/palm.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_PALM_H\n#define BOOST_PREDEF_COMPILER_PALM_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_PALM`]\n\nPalm C/C++ compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`_PACC_VER`] [__predef_detection__]]\n\n    [[`_PACC_VER`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_PALM BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(_PACC_VER)\n#   define BOOST_COMP_PALM_DETECTION BOOST_PREDEF_MAKE_0X_VRRPP000(_PACC_VER)\n#endif\n\n#ifdef BOOST_COMP_PALM_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_PALM_EMULATED BOOST_COMP_PALM_DETECTION\n#   else\n#       undef BOOST_COMP_PALM\n#       define BOOST_COMP_PALM BOOST_COMP_PALM_DETECTION\n#   endif\n#   define BOOST_COMP_PALM_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_PALM_NAME \"Palm C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PALM,BOOST_COMP_PALM_NAME)\n\n#ifdef BOOST_COMP_PALM_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PALM_EMULATED,BOOST_COMP_PALM_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/pgi.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_PGI_H\n#define BOOST_PREDEF_COMPILER_PGI_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_PGI`]\n\n[@http://en.wikipedia.org/wiki/The_Portland_Group Portland Group C/C++] compiler.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__PGI`] [__predef_detection__]]\n\n    [[`__PGIC__`, `__PGIC_MINOR__`, `__PGIC_PATCHLEVEL__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_PGI BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__PGI)\n#   if !defined(BOOST_COMP_PGI_DETECTION) && (defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__))\n#       define BOOST_COMP_PGI_DETECTION BOOST_VERSION_NUMBER(__PGIC__,__PGIC_MINOR__,__PGIC_PATCHLEVEL__)\n#   endif\n#   if !defined(BOOST_COMP_PGI_DETECTION)\n#       define BOOST_COMP_PGI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_PGI_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_PGI_EMULATED BOOST_COMP_PGI_DETECTION\n#   else\n#       undef BOOST_COMP_PGI\n#       define BOOST_COMP_PGI BOOST_COMP_PGI_DETECTION\n#   endif\n#   define BOOST_COMP_PGI_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_PGI_NAME \"Portland Group C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PGI,BOOST_COMP_PGI_NAME)\n\n#ifdef BOOST_COMP_PGI_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PGI_EMULATED,BOOST_COMP_PGI_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/sgi_mipspro.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_SGI_MIPSPRO_H\n#define BOOST_PREDEF_COMPILER_SGI_MIPSPRO_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_SGI`]\n\n[@http://en.wikipedia.org/wiki/MIPSpro SGI MIPSpro] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__sgi`] [__predef_detection__]]\n    [[`sgi`] [__predef_detection__]]\n\n    [[`_SGI_COMPILER_VERSION`] [V.R.P]]\n    [[`_COMPILER_VERSION`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_SGI BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__sgi) || defined(sgi)\n#   if !defined(BOOST_COMP_SGI_DETECTION) && defined(_SGI_COMPILER_VERSION)\n#       define BOOST_COMP_SGI_DETECTION BOOST_PREDEF_MAKE_10_VRP(_SGI_COMPILER_VERSION)\n#   endif\n#   if !defined(BOOST_COMP_SGI_DETECTION) && defined(_COMPILER_VERSION)\n#       define BOOST_COMP_SGI_DETECTION BOOST_PREDEF_MAKE_10_VRP(_COMPILER_VERSION)\n#   endif\n#   if !defined(BOOST_COMP_SGI_DETECTION)\n#       define BOOST_COMP_SGI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_SGI_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_SGI_EMULATED BOOST_COMP_SGI_DETECTION\n#   else\n#       undef BOOST_COMP_SGI\n#       define BOOST_COMP_SGI BOOST_COMP_SGI_DETECTION\n#   endif\n#   define BOOST_COMP_SGI_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_SGI_NAME \"SGI MIPSpro\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SGI,BOOST_COMP_SGI_NAME)\n\n#ifdef BOOST_COMP_SGI_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SGI_EMULATED,BOOST_COMP_SGI_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/sunpro.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_SUNPRO_H\n#define BOOST_PREDEF_COMPILER_SUNPRO_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_SUNPRO`]\n\n[@http://en.wikipedia.org/wiki/Oracle_Solaris_Studio Oracle Solaris Studio] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__SUNPRO_CC`] [__predef_detection__]]\n    [[`__SUNPRO_C`] [__predef_detection__]]\n\n    [[`__SUNPRO_CC`] [V.R.P]]\n    [[`__SUNPRO_C`] [V.R.P]]\n    [[`__SUNPRO_CC`] [VV.RR.P]]\n    [[`__SUNPRO_C`] [VV.RR.P]]\n    ]\n */\n\n#define BOOST_COMP_SUNPRO BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__SUNPRO_CC) || defined(__SUNPRO_C)\n#   if !defined(BOOST_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_CC)\n#       if (__SUNPRO_CC < 0x5100)\n#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__SUNPRO_CC)\n#       else\n#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VVRRP(__SUNPRO_CC)\n#       endif\n#   endif\n#   if !defined(BOOST_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_C)\n#       if (__SUNPRO_C < 0x5100)\n#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__SUNPRO_C)\n#       else\n#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VVRRP(__SUNPRO_C)\n#       endif\n#   endif\n#   if !defined(BOOST_COMP_SUNPRO_DETECTION)\n#       define BOOST_COMP_SUNPRO_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_COMP_SUNPRO_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_SUNPRO_EMULATED BOOST_COMP_SUNPRO_DETECTION\n#   else\n#       undef BOOST_COMP_SUNPRO\n#       define BOOST_COMP_SUNPRO BOOST_COMP_SUNPRO_DETECTION\n#   endif\n#   define BOOST_COMP_SUNPRO_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_SUNPRO_NAME \"Oracle Solaris Studio\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SUNPRO,BOOST_COMP_SUNPRO_NAME)\n\n#ifdef BOOST_COMP_SUNPRO_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SUNPRO_EMULATED,BOOST_COMP_SUNPRO_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/tendra.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_TENDRA_H\n#define BOOST_PREDEF_COMPILER_TENDRA_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_TENDRA`]\n\n[@http://en.wikipedia.org/wiki/TenDRA_Compiler TenDRA C/C++] compiler.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__TenDRA__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_COMP_TENDRA BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__TenDRA__)\n#   define BOOST_COMP_TENDRA_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#ifdef BOOST_COMP_TENDRA_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_TENDRA_EMULATED BOOST_COMP_TENDRA_DETECTION\n#   else\n#       undef BOOST_COMP_TENDRA\n#       define BOOST_COMP_TENDRA BOOST_COMP_TENDRA_DETECTION\n#   endif\n#   define BOOST_COMP_TENDRA_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_TENDRA_NAME \"TenDRA C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_TENDRA,BOOST_COMP_TENDRA_NAME)\n\n#ifdef BOOST_COMP_TENDRA_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_TENDRA_EMULATED,BOOST_COMP_TENDRA_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/visualc.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_VISUALC_H\n#define BOOST_PREDEF_COMPILER_VISUALC_H\n\n/* Other compilers that emulate this one need to be detected first. */\n\n#include <boost/predef/compiler/clang.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_MSVC`]\n\n[@http://en.wikipedia.org/wiki/Visual_studio Microsoft Visual C/C++] compiler.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`_MSC_VER`] [__predef_detection__]]\n\n    [[`_MSC_FULL_VER`] [V.R.P]]\n    [[`_MSC_VER`] [V.R.0]]\n    ]\n */\n\n#define BOOST_COMP_MSVC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(_MSC_VER)\n#   if !defined (_MSC_FULL_VER)\n#       define BOOST_COMP_MSVC_BUILD 0\n#   else\n        /* how many digits does the build number have? */\n#       if _MSC_FULL_VER / 10000 == _MSC_VER\n            /* four digits */\n#           define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 10000)\n#       elif _MSC_FULL_VER / 100000 == _MSC_VER\n            /* five digits */\n#           define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 100000)\n#       else\n#           error \"Cannot determine build number from _MSC_FULL_VER\"\n#       endif\n#   endif\n    /*\n    VS2014 was skipped in the release sequence for MS. Which\n    means that the compiler and VS product versions are no longer\n    in sync. Hence we need to use different formulas for\n    mapping from MSC version to VS product version.\n    */\n#   if (_MSC_VER >= 1900)\n#       define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\\\n            _MSC_VER/100-5,\\\n            _MSC_VER%100,\\\n            BOOST_COMP_MSVC_BUILD)\n#   else\n#       define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\\\n            _MSC_VER/100-6,\\\n            _MSC_VER%100,\\\n            BOOST_COMP_MSVC_BUILD)\n#   endif\n#endif\n\n#ifdef BOOST_COMP_MSVC_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_MSVC_EMULATED BOOST_COMP_MSVC_DETECTION\n#   else\n#       undef BOOST_COMP_MSVC\n#       define BOOST_COMP_MSVC BOOST_COMP_MSVC_DETECTION\n#   endif\n#   define BOOST_COMP_MSVC_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_MSVC_NAME \"Microsoft Visual C/C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC,BOOST_COMP_MSVC_NAME)\n\n#ifdef BOOST_COMP_MSVC_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC_EMULATED,BOOST_COMP_MSVC_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler/watcom.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_WATCOM_H\n#define BOOST_PREDEF_COMPILER_WATCOM_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_COMP_WATCOM`]\n\n[@http://en.wikipedia.org/wiki/Watcom Watcom C++] compiler.\nVersion number available as major, and minor.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__WATCOMC__`] [__predef_detection__]]\n\n    [[`__WATCOMC__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_COMP_WATCOM BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__WATCOMC__)\n#   define BOOST_COMP_WATCOM_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__WATCOMC__)\n#endif\n\n#ifdef BOOST_COMP_WATCOM_DETECTION\n#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)\n#       define BOOST_COMP_WATCOM_EMULATED BOOST_COMP_WATCOM_DETECTION\n#   else\n#       undef BOOST_COMP_WATCOM\n#       define BOOST_COMP_WATCOM BOOST_COMP_WATCOM_DETECTION\n#   endif\n#   define BOOST_COMP_WATCOM_AVAILABLE\n#   include <boost/predef/detail/comp_detected.h>\n#endif\n\n#define BOOST_COMP_WATCOM_NAME \"Watcom C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_WATCOM,BOOST_COMP_WATCOM_NAME)\n\n#ifdef BOOST_COMP_WATCOM_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_COMP_WATCOM_EMULATED,BOOST_COMP_WATCOM_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/compiler.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_COMPILER_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_COMPILER_H\n#define BOOST_PREDEF_COMPILER_H\n#endif\n\n#include <boost/predef/compiler/borland.h>\n#include <boost/predef/compiler/clang.h>\n#include <boost/predef/compiler/comeau.h>\n#include <boost/predef/compiler/compaq.h>\n#include <boost/predef/compiler/diab.h>\n#include <boost/predef/compiler/digitalmars.h>\n#include <boost/predef/compiler/dignus.h>\n#include <boost/predef/compiler/edg.h>\n#include <boost/predef/compiler/ekopath.h>\n#include <boost/predef/compiler/gcc_xml.h>\n#include <boost/predef/compiler/gcc.h>\n#include <boost/predef/compiler/greenhills.h>\n#include <boost/predef/compiler/hp_acc.h>\n#include <boost/predef/compiler/iar.h>\n#include <boost/predef/compiler/ibm.h>\n#include <boost/predef/compiler/intel.h>\n#include <boost/predef/compiler/kai.h>\n#include <boost/predef/compiler/llvm.h>\n#include <boost/predef/compiler/metaware.h>\n#include <boost/predef/compiler/metrowerks.h>\n#include <boost/predef/compiler/microtec.h>\n#include <boost/predef/compiler/mpw.h>\n#include <boost/predef/compiler/palm.h>\n#include <boost/predef/compiler/pgi.h>\n#include <boost/predef/compiler/sgi_mipspro.h>\n#include <boost/predef/compiler/sunpro.h>\n#include <boost/predef/compiler/tendra.h>\n#include <boost/predef/compiler/visualc.h>\n#include <boost/predef/compiler/watcom.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/detail/_cassert.h",
    "content": "/*\nCopyright Rene Rivera 2011-2012\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_DETAIL__CASSERT_H\n#define BOOST_PREDEF_DETAIL__CASSERT_H\n\n#if defined(__cplusplus)\n#include <cassert>\n#else\n#include <assert.h>\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/detail/_exception.h",
    "content": "/*\nCopyright Rene Rivera 2011-2012\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_DETAIL__EXCEPTION_H\n#define BOOST_PREDEF_DETAIL__EXCEPTION_H\n\n#if defined(__cplusplus)\n#include <exception>\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/detail/comp_detected.h",
    "content": "/*\nCopyright Rene Rivera 2014\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_DETAIL_COMP_DETECTED\n#define BOOST_PREDEF_DETAIL_COMP_DETECTED 1\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/detail/endian_compat.h",
    "content": "/*\nCopyright Rene Rivera 2013\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_DETAIL_ENDIAN_COMPAT_H\n#define BOOST_PREDEF_DETAIL_ENDIAN_COMPAT_H\n\n#include <boost/predef/other/endian.h>\n\n#if BOOST_ENDIAN_BIG_BYTE\n#   define BOOST_BIG_ENDIAN\n#   define BOOST_BYTE_ORDER 4321\n#endif\n#if BOOST_ENDIAN_LITTLE_BYTE\n#   define BOOST_LITTLE_ENDIAN\n#   define BOOST_BYTE_ORDER 1234\n#endif\n#if BOOST_ENDIAN_LITTLE_WORD\n#   define BOOST_PDP_ENDIAN\n#   define BOOST_BYTE_ORDER 2134\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/detail/os_detected.h",
    "content": "/*\nCopyright Rene Rivera 2013\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_DETAIL_OS_DETECTED\n#define BOOST_PREDEF_DETAIL_OS_DETECTED 1\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/detail/platform_detected.h",
    "content": "/*\nCopyright Rene Rivera 2014\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_DETAIL_PLAT_DETECTED\n#define BOOST_PREDEF_DETAIL_PLAT_DETECTED 1\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/detail/test.h",
    "content": "/*\nCopyright Rene Rivera 2011-2012\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_DETAIL_TEST_H\n#define BOOST_PREDEF_DETAIL_TEST_H\n\n#if !defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n\n#define BOOST_PREDEF_DECLARE_TEST(x,s)\n\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/detail/test_def.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n#include <boost/predef.h>\n\n#define BOOST_PREDEF_INTERNAL_GENERATE_TESTS\n\nvoid * add_predef_entry(const char * name, const char * description, unsigned value);\n#undef BOOST_PREDEF_DECLARE_TEST\n#define BOOST_PREDEF_DECLARE_TEST(x,s) void predef_entry_##x() { add_predef_entry(#x, s, x); }\n#include <boost/predef.h>\n\n#undef BOOST_PREDEF_DECLARE_TEST\n#define BOOST_PREDEF_DECLARE_TEST(x,s) predef_entry_##x();\nvoid create_predef_entries()\n{\n#include <boost/predef.h>\n}\n\n#ifdef __cplusplus\n#include <cstring>\n#include <cstdio>\n#include <cstdlib>\nusing namespace std;\n#else\n#include <string.h>\n#include <stdio.h>\n#include <stdlib.h>\n#endif\n\ntypedef struct predef_info\n{\n    const char * name;\n    const char * description;\n    unsigned value;\n} predef_info;\n\n#ifdef __cplusplus\nusing namespace std;\n#endif\n\nunsigned generated_predef_info_count = 0;\npredef_info* generated_predef_info = 0;\nvoid * add_predef_entry(const char * name, const char * description, unsigned value)\n{\n    if (0 == generated_predef_info_count)\n    {\n        generated_predef_info_count = 1;\n        generated_predef_info = (predef_info*)malloc(sizeof(predef_info));\n    }\n    else\n    {\n        generated_predef_info_count += 1;\n        generated_predef_info = (predef_info*)realloc(generated_predef_info,\n            generated_predef_info_count*sizeof(predef_info));\n    }\n    generated_predef_info[generated_predef_info_count-1].name = name;\n    generated_predef_info[generated_predef_info_count-1].description = description;\n    generated_predef_info[generated_predef_info_count-1].value = value;\n    return 0;\n}\n\nint predef_info_compare(const void * a, const void * b)\n{\n    const predef_info * i = (const predef_info *)a;\n    const predef_info * j = (const predef_info *)b;\n    return strcmp(i->name,j->name);\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware/simd/arm/versions.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_HARDWARE_SIMD_ARM_VERSIONS_H\n#define BOOST_PREDEF_HARDWARE_SIMD_ARM_VERSIONS_H\n\n#include <boost/predef/version_number.h>\n\n/*`\n Those defines represent ARM SIMD extensions versions.\n\n [note You *MUST* compare them with the predef `BOOST_HW_SIMD_ARM`.]\n */\n\n// ---------------------------------\n\n/*`\n [heading `BOOST_HW_SIMD_ARM_NEON_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_.28NEON.29 NEON]\n ARM extension version number.\n\n Version number is: *1.0.0*.\n */\n#define BOOST_HW_SIMD_ARM_NEON_VERSION BOOST_VERSION_NUMBER(1, 0, 0)\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware/simd/arm.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_HARDWARE_SIMD_ARM_H\n#define BOOST_PREDEF_HARDWARE_SIMD_ARM_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/hardware/simd/arm/versions.h>\n\n/*`\n [heading `BOOST_HW_SIMD_ARM`]\n\n The SIMD extension for ARM (*if detected*).\n Version number depends on the most recent detected extension.\n\n [table\n     [[__predef_symbol__] [__predef_version__]]\n\n     [[`__ARM_NEON__`] [__predef_detection__]]\n     [[`__aarch64__`] [__predef_detection__]]\n     [[`_M_ARM`] [__predef_detection__]]\n     ]\n\n [table\n     [[__predef_symbol__] [__predef_version__]]\n\n     [[`__ARM_NEON__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]\n     [[`__aarch64__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]\n     [[`_M_ARM`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]\n     ]\n\n */\n\n#define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#undef BOOST_HW_SIMD_ARM\n#if !defined(BOOST_HW_SIMD_ARM) && (defined(__ARM_NEON__) || defined(__aarch64__) || defined (_M_ARM))\n#   define BOOST_HW_SIMD_ARM BOOST_HW_SIMD_ARM_NEON_VERSION\n#endif\n\n#if !defined(BOOST_HW_SIMD_ARM)\n#   define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE\n#else\n#   define BOOST_HW_SIMD_ARM_AVAILABLE\n#endif\n\n#define BOOST_HW_SIMD_ARM_NAME \"ARM SIMD\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_ARM, BOOST_HW_SIMD_ARM_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware/simd/ppc/versions.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_HARDWARE_SIMD_PPC_VERSIONS_H\n#define BOOST_PREDEF_HARDWARE_SIMD_PPC_VERSIONS_H\n\n#include <boost/predef/version_number.h>\n\n/*`\n Those defines represent Power PC SIMD extensions versions.\n\n [note You *MUST* compare them with the predef `BOOST_HW_SIMD_PPC`.]\n */\n\n// ---------------------------------\n\n/*`\n [heading `BOOST_HW_SIMD_PPC_VMX_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/AltiVec#VMX128 VMX] powerpc extension\n version number.\n\n Version number is: *1.0.0*.\n */\n#define BOOST_HW_SIMD_PPC_VMX_VERSION BOOST_VERSION_NUMBER(1, 0, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_PPC_VSX_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/AltiVec#VSX VSX] powerpc extension version\n number.\n\n Version number is: *1.1.0*.\n */\n#define BOOST_HW_SIMD_PPC_VSX_VERSION BOOST_VERSION_NUMBER(1, 1, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_PPC_QPX_VERSION`]\n\n The QPX powerpc extension version number.\n\n Version number is: *2.0.0*.\n */\n#define BOOST_HW_SIMD_PPC_QPX_VERSION BOOST_VERSION_NUMBER(2, 0, 0)\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware/simd/ppc.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_HARDWARE_SIMD_PPC_H\n#define BOOST_PREDEF_HARDWARE_SIMD_PPC_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/hardware/simd/ppc/versions.h>\n\n/*`\n [heading `BOOST_HW_SIMD_PPC`]\n\n The SIMD extension for PowerPC (*if detected*).\n Version number depends on the most recent detected extension.\n\n [table\n     [[__predef_symbol__] [__predef_version__]]\n\n     [[`__VECTOR4DOUBLE__`] [__predef_detection__]]\n\n     [[`__ALTIVEC__`] [__predef_detection__]]\n     [[`__VEC__`] [__predef_detection__]]\n\n     [[`__VSX__`] [__predef_detection__]]\n     ]\n\n [table\n     [[__predef_symbol__] [__predef_version__]]\n\n     [[`__VECTOR4DOUBLE__`] [BOOST_HW_SIMD_PPC_QPX_VERSION]]\n\n     [[`__ALTIVEC__`] [BOOST_HW_SIMD_PPC_VMX_VERSION]]\n     [[`__VEC__`] [BOOST_HW_SIMD_PPC_VMX_VERSION]]\n\n     [[`__VSX__`] [BOOST_HW_SIMD_PPC_VSX_VERSION]]\n     ]\n\n */\n\n#define BOOST_HW_SIMD_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#undef BOOST_HW_SIMD_PPC\n#if !defined(BOOST_HW_SIMD_PPC) && defined(__VECTOR4DOUBLE__)\n#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_QPX_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_PPC) && defined(__VSX__)\n#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_VSX_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_PPC) && (defined(__ALTIVEC__) || defined(__VEC__))\n#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_VMX_VERSION\n#endif\n\n#if !defined(BOOST_HW_SIMD_PPC)\n#   define BOOST_HW_SIMD_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n#else\n#   define BOOST_HW_SIMD_PPC_AVAILABLE\n#endif\n\n#define BOOST_HW_SIMD_PPC_NAME \"PPC SIMD\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_PPC, BOOST_HW_SIMD_PPC_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware/simd/x86/versions.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_VERSIONS_H\n#define BOOST_PREDEF_HARDWARE_SIMD_X86_VERSIONS_H\n\n#include <boost/predef/version_number.h>\n\n/*`\n Those defines represent x86 SIMD extensions versions.\n\n [note You *MUST* compare them with the predef `BOOST_HW_SIMD_X86`.]\n */\n\n// ---------------------------------\n\n/*`\n [heading `BOOST_HW_SIMD_X86_MMX_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/MMX_(instruction_set) MMX] x86 extension\n version number.\n\n Version number is: *0.99.0*.\n */\n#define BOOST_HW_SIMD_X86_MMX_VERSION BOOST_VERSION_NUMBER(0, 99, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_SSE_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions SSE] x86 extension\n version number.\n\n Version number is: *1.0.0*.\n */\n#define BOOST_HW_SIMD_X86_SSE_VERSION BOOST_VERSION_NUMBER(1, 0, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_SSE2_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/SSE2 SSE2] x86 extension version number.\n\n Version number is: *2.0.0*.\n */\n#define BOOST_HW_SIMD_X86_SSE2_VERSION BOOST_VERSION_NUMBER(2, 0, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_SSE3_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/SSE3 SSE3] x86 extension version number.\n\n Version number is: *3.0.0*.\n */\n#define BOOST_HW_SIMD_X86_SSE3_VERSION BOOST_VERSION_NUMBER(3, 0, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_SSSE3_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/SSSE3 SSSE3] x86 extension version number.\n\n Version number is: *3.1.0*.\n */\n#define BOOST_HW_SIMD_X86_SSSE3_VERSION BOOST_VERSION_NUMBER(3, 1, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_SSE4_1_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/SSE4#SSE4.1 SSE4_1] x86 extension version\n number.\n\n Version number is: *4.1.0*.\n */\n#define BOOST_HW_SIMD_X86_SSE4_1_VERSION BOOST_VERSION_NUMBER(4, 1, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_SSE4_2_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/SSE4##SSE4.2 SSE4_2] x86 extension version\n number.\n\n Version number is: *4.2.0*.\n */\n#define BOOST_HW_SIMD_X86_SSE4_2_VERSION BOOST_VERSION_NUMBER(4, 2, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_AVX_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/Advanced_Vector_Extensions AVX] x86\n extension version number.\n\n Version number is: *5.0.0*.\n */\n#define BOOST_HW_SIMD_X86_AVX_VERSION BOOST_VERSION_NUMBER(5, 0, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_FMA3_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/FMA_instruction_set FMA3] x86 extension\n version number.\n\n Version number is: *5.2.0*.\n */\n#define BOOST_HW_SIMD_X86_FMA3_VERSION BOOST_VERSION_NUMBER(5, 2, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_AVX2_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Advanced_Vector_Extensions_2 AVX2]\n x86 extension version number.\n\n Version number is: *5.3.0*.\n */\n#define BOOST_HW_SIMD_X86_AVX2_VERSION BOOST_VERSION_NUMBER(5, 3, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_MIC_VERSION`]\n\n The [@https://en.wikipedia.org/wiki/Xeon_Phi MIC] (Xeon Phi) x86 extension\n version number.\n\n Version number is: *9.0.0*.\n */\n#define BOOST_HW_SIMD_X86_MIC_VERSION BOOST_VERSION_NUMBER(9, 0, 0)\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware/simd/x86.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_H\n#define BOOST_PREDEF_HARDWARE_SIMD_X86_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/hardware/simd/x86/versions.h>\n\n/*`\n [heading `BOOST_HW_SIMD_X86`]\n\n The SIMD extension for x86 (*if detected*).\n Version number depends on the most recent detected extension.\n\n [table\n     [[__predef_symbol__] [__predef_version__]]\n\n     [[`__SSE__`] [__predef_detection__]]\n     [[`_M_X64`] [__predef_detection__]]\n     [[`_M_IX86_FP >= 1`] [__predef_detection__]]\n\n     [[`__SSE2__`] [__predef_detection__]]\n     [[`_M_X64`] [__predef_detection__]]\n     [[`_M_IX86_FP >= 2`] [__predef_detection__]]\n\n     [[`__SSE3__`] [__predef_detection__]]\n\n     [[`__SSSE3__`] [__predef_detection__]]\n\n     [[`__SSE4_1__`] [__predef_detection__]]\n\n     [[`__SSE4_2__`] [__predef_detection__]]\n\n     [[`__AVX__`] [__predef_detection__]]\n\n     [[`__FMA__`] [__predef_detection__]]\n\n     [[`__AVX2__`] [__predef_detection__]]\n     ]\n\n [table\n     [[__predef_symbol__] [__predef_version__]]\n\n     [[`__SSE__`] [BOOST_HW_SIMD_X86_SSE_VERSION]]\n     [[`_M_X64`] [BOOST_HW_SIMD_X86_SSE_VERSION]]\n     [[`_M_IX86_FP >= 1`] [BOOST_HW_SIMD_X86_SSE_VERSION]]\n\n     [[`__SSE2__`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]\n     [[`_M_X64`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]\n     [[`_M_IX86_FP >= 2`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]\n\n     [[`__SSE3__`] [BOOST_HW_SIMD_X86_SSE3_VERSION]]\n\n     [[`__SSSE3__`] [BOOST_HW_SIMD_X86_SSSE3_VERSION]]\n\n     [[`__SSE4_1__`] [BOOST_HW_SIMD_X86_SSE4_1_VERSION]]\n\n     [[`__SSE4_2__`] [BOOST_HW_SIMD_X86_SSE4_2_VERSION]]\n\n     [[`__AVX__`] [BOOST_HW_SIMD_X86_AVX_VERSION]]\n\n     [[`__FMA__`] [BOOST_HW_SIMD_X86_FMA3_VERSION]]\n\n     [[`__AVX2__`] [BOOST_HW_SIMD_x86_AVX2_VERSION]]\n     ]\n\n */\n\n#define BOOST_HW_SIMD_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#undef BOOST_HW_SIMD_X86\n#if !defined(BOOST_HW_SIMD_X86) && defined(__MIC__)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_MIC_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && defined(__AVX2__)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_AVX2_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && defined(__AVX__)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_AVX_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && defined(__FMA__)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_FMA_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE4_2__)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE4_2_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE4_1__)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE4_1_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && defined(__SSSE3__)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSSE3_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE3__)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE3_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE2__) || defined(_M_X64) || _M_IX86_FP >= 2)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE2_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE__) || defined(_M_X64) || _M_IX86_FP >= 1)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86) && defined(__MMX__)\n#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_MMX_VERSION\n#endif\n\n#if !defined(BOOST_HW_SIMD_X86)\n#   define BOOST_HW_SIMD_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n#else\n#   define BOOST_HW_SIMD_X86_AVAILABLE\n#endif\n\n#define BOOST_HW_SIMD_X86_NAME \"x86 SIMD\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_X86, BOOST_HW_SIMD_X86_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd/versions.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_VERSIONS_H\n#define BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_VERSIONS_H\n\n#include <boost/predef/version_number.h>\n\n/*`\n Those defines represent x86 (AMD specific) SIMD extensions versions.\n\n [note You *MUST* compare them with the predef `BOOST_HW_SIMD_X86_AMD`.]\n */\n\n\n// ---------------------------------\n\n/*`\n [heading `BOOST_HW_SIMD_X86_SSE4A_VERSION`]\n\n [@https://en.wikipedia.org/wiki/SSE4##SSE4A SSE4A] x86 extension (AMD specific).\n\n Version number is: *4.0.0*.\n */\n#define BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION BOOST_VERSION_NUMBER(4, 0, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_XOP_VERSION`]\n\n [@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific).\n\n Version number is: *5.1.0*.\n */\n#define BOOST_HW_SIMD_X86_AMD_FMA4_VERSION BOOST_VERSION_NUMBER(5, 1, 0)\n\n/*`\n [heading `BOOST_HW_SIMD_X86_XOP_VERSION`]\n\n [@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific).\n\n Version number is: *5.1.1*.\n */\n#define BOOST_HW_SIMD_X86_AMD_XOP_VERSION BOOST_VERSION_NUMBER(5, 1, 1)\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H\n#define BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/hardware/simd/x86_amd/versions.h>\n\n/*`\n [heading `BOOST_HW_SIMD_X86_AMD`]\n\n The SIMD extension for x86 (AMD) (*if detected*).\n Version number depends on the most recent detected extension.\n\n [table\n     [[__predef_symbol__] [__predef_version__]]\n\n     [[`__SSE4A__`] [__predef_detection__]]\n\n     [[`__FMA4__`] [__predef_detection__]]\n\n     [[`__XOP__`] [__predef_detection__]]\n\n     [[`BOOST_HW_SIMD_X86`] [__predef_detection__]]\n     ]\n\n [table\n     [[__predef_symbol__] [__predef_version__]]\n\n     [[`__SSE4A__`] [BOOST_HW_SIMD_x86_SSE4A_VERSION]]\n\n     [[`__FMA4__`] [BOOST_HW_SIMD_x86_FMA4_VERSION]]\n\n     [[`__XOP__`] [BOOST_HW_SIMD_x86_XOP_VERSION]]\n\n     [[`BOOST_HW_SIMD_X86`] [BOOST_HW_SIMD_x86]]\n     ]\n\n [note This predef includes every other x86 SIMD extensions and also has other\n more specific extensions (FMA4, XOP, SSE4a). You should use this predef\n instead of `BOOST_HW_SIMD_X86` to test if those specific extensions have\n been detected.]\n\n */\n\n#define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n// AMD CPUs also use x86 architecture. We first try to detect if any AMD\n// specific extension are detected, if yes, then try to detect more recent x86\n// common extensions.\n\n#undef BOOST_HW_SIMD_X86_AMD\n#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__XOP__)\n#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_XOP_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__FMA4__)\n#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_FMA4_VERSION\n#endif\n#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__SSE4A__)\n#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION\n#endif\n\n#if !defined(BOOST_HW_SIMD_X86_AMD)\n#   define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE\n#else\n    // At this point, we know that we have an AMD CPU, we do need to check for\n    // other x86 extensions to determine the final version number.\n#   include <boost/predef/hardware/simd/x86.h>\n#   if BOOST_HW_SIMD_X86 > BOOST_HW_SIMD_X86_AMD\n#      undef BOOST_HW_SIMD_X86_AMD\n#      define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86\n#   endif\n#   define BOOST_HW_SIMD_X86_AMD_AVAILABLE\n#endif\n\n#define BOOST_HW_SIMD_X86_AMD_NAME \"x86 (AMD) SIMD\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_X86_AMD, BOOST_HW_SIMD_X86_AMD_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware/simd.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#include <boost/predef/hardware/simd/x86.h>\n#include <boost/predef/hardware/simd/x86_amd.h>\n#include <boost/predef/hardware/simd/arm.h>\n#include <boost/predef/hardware/simd/ppc.h>\n\n#ifndef BOOST_PREDEF_HARDWARE_SIMD_H\n#define BOOST_PREDEF_HARDWARE_SIMD_H\n\n#include <boost/predef/version_number.h>\n\n/*`\n [section Using the `BOOST_HW_SIMD_*` predefs]\n [include ../doc/hardware_simd.qbk]\n [endsect]\n\n [/ --------------------------- ]\n\n [section `BOOST_HW_SIMD_*`]\n\n [heading `BOOST_HW_SIMD`]\n\n The SIMD extension detected for a specific architectures.\n Version number depends on the detected extension.\n\n [table\n     [[__predef_symbol__] [__predef_version__]]\n\n     [[`BOOST_HW_SIMD_X86_AVAILABLE`] [__predef_detection__]]\n     [[`BOOST_HW_SIMD_X86_AMD_AVAILABLE`] [__predef_detection__]]\n     [[`BOOST_HW_SIMD_ARM_AVAILABLE`] [__predef_detection__]]\n     [[`BOOST_HW_SIMD_PPC_AVAILABLE`] [__predef_detection__]]\n     ]\n\n [include ../include/boost/predef/hardware/simd/x86.h]\n [include ../include/boost/predef/hardware/simd/x86_amd.h]\n [include ../include/boost/predef/hardware/simd/arm.h]\n [include ../include/boost/predef/hardware/simd/ppc.h]\n\n [endsect]\n\n [/ --------------------------- ]\n\n [section `BOOST_HW_SIMD_X86_*_VERSION`]\n [include ../include/boost/predef/hardware/simd/x86/versions.h]\n [endsect]\n\n [section `BOOST_HW_SIMD_X86_AMD_*_VERSION`]\n [include ../include/boost/predef/hardware/simd/x86_amd/versions.h]\n [endsect]\n\n [section `BOOST_HW_SIMD_ARM_*_VERSION`]\n [include ../include/boost/predef/hardware/simd/arm/versions.h]\n [endsect]\n\n [section `BOOST_HW_SIMD_PPC_*_VERSION`]\n [include ../include/boost/predef/hardware/simd/ppc/versions.h]\n [endsect]\n\n */\n\n// We check if SIMD extension of multiples architectures have been detected,\n// if yes, then this is an error!\n//\n// NOTE: _X86_AMD implies _X86, so there is no need to check for it here!\n//\n#if defined(BOOST_HW_SIMD_ARM_AVAILABLE) && defined(BOOST_HW_SIMD_PPC_AVAILABLE) ||\\\n    defined(BOOST_HW_SIMD_ARM_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AVAILABLE) ||\\\n    defined(BOOST_HW_SIMD_PPC_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AVAILABLE)\n#   error \"Multiple SIMD architectures detected, this cannot happen!\"\n#endif\n\n#if defined(BOOST_HW_SIMD_X86_AVAILABLE)\n#   define BOOST_HW_SIMD BOOST_HW_SIMD_X86\n#endif\n\n#if defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE)\n#   define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD\n#endif\n\n#if defined(BOOST_HW_SIMD_ARM_AVAILABLE)\n#   define BOOST_HW_SIMD BOOST_HW_SIMD_ARM\n#endif\n\n#if defined(BOOST_HW_SIMD_PPC_AVAILABLE)\n#   define BOOST_HW_SIMD BOOST_HW_SIMD_PPC\n#endif\n\n#if defined(BOOST_HW_SIMD)\n#   define BOOST_HW_SIMD_AVAILABLE\n#else\n#   define BOOST_HW_SIMD BOOST_VERSION_NUMBER_NOT_AVAILABLE\n#endif\n\n#define BOOST_HW_SIMD_NAME \"Hardware SIMD\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD, BOOST_HW_SIMD_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/hardware.h",
    "content": "/*\nCopyright Charly Chevalier 2015\nCopyright Joel Falcou 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_HARDWARE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_HARDWARE_H\n#define BOOST_PREDEF_HARDWARE_H\n#endif\n\n#include <boost/predef/hardware/simd.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/language/objc.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LANGUAGE_OBJC_H\n#define BOOST_PREDEF_LANGUAGE_OBJC_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LANG_OBJC`]\n\n[@http://en.wikipedia.org/wiki/Objective-C Objective-C] language.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__OBJC__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__OBJC__)\n#   undef BOOST_LANG_OBJC\n#   define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_LANG_OBJC\n#   define BOOST_LANG_OBJC_AVAILABLE\n#endif\n\n#define BOOST_LANG_OBJC_NAME \"Objective-C\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LANG_OBJC,BOOST_LANG_OBJC_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/language/stdc.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LANGUAGE_STDC_H\n#define BOOST_PREDEF_LANGUAGE_STDC_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LANG_STDC`]\n\n[@http://en.wikipedia.org/wiki/C_(programming_language) Standard C] language.\nIf available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__STDC__`] [__predef_detection__]]\n\n    [[`__STDC_VERSION__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_LANG_STDC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__STDC__)\n#   undef BOOST_LANG_STDC\n#   if defined(__STDC_VERSION__)\n#       if (__STDC_VERSION__ > 100)\n#           define BOOST_LANG_STDC BOOST_PREDEF_MAKE_YYYYMM(__STDC_VERSION__)\n#       else\n#           define BOOST_LANG_STDC BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#   else\n#       define BOOST_LANG_STDC BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_LANG_STDC\n#   define BOOST_LANG_STDC_AVAILABLE\n#endif\n\n#define BOOST_LANG_STDC_NAME \"Standard C\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDC,BOOST_LANG_STDC_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/language/stdcpp.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LANGUAGE_STDCPP_H\n#define BOOST_PREDEF_LANGUAGE_STDCPP_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LANG_STDCPP`]\n\n[@http://en.wikipedia.org/wiki/C%2B%2B Standard C++] language.\nIf available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.\nBecause of the way the C++ standardization process works the\ndefined version year will not be the commonly known year of the standard.\nSpecifically the defined versions are:\n\n[table Detected Version Number vs. C++ Standard Year\n  [[Detected Version Number] [Standard Year] [C++ Standard]]\n  [[27.11.1] [1998] [ISO/IEC 14882:1998]]\n  [[41.12.1] [2011] [ISO/IEC 14882:2011]]\n]\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__cplusplus`] [__predef_detection__]]\n\n    [[`__cplusplus`] [YYYY.MM.1]]\n    ]\n */\n\n#define BOOST_LANG_STDCPP BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__cplusplus)\n#   undef BOOST_LANG_STDCPP\n#   if (__cplusplus > 100)\n#       define BOOST_LANG_STDCPP BOOST_PREDEF_MAKE_YYYYMM(__cplusplus)\n#   else\n#       define BOOST_LANG_STDCPP BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_LANG_STDCPP\n#   define BOOST_LANG_STDCPP_AVAILABLE\n#endif\n\n#define BOOST_LANG_STDCPP_NAME \"Standard C++\"\n\n/*`\n[heading `BOOST_LANG_STDCPPCLI`]\n\n[@http://en.wikipedia.org/wiki/C%2B%2B/CLI Standard C++/CLI] language.\nIf available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__cplusplus_cli`] [__predef_detection__]]\n\n    [[`__cplusplus_cli`] [YYYY.MM.1]]\n    ]\n */\n\n#define BOOST_LANG_STDCPPCLI BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__cplusplus_cli)\n#   undef BOOST_LANG_STDCPPCLI\n#   if (__cplusplus_cli > 100)\n#       define BOOST_LANG_STDCPPCLI BOOST_PREDEF_MAKE_YYYYMM(__cplusplus_cli)\n#   else\n#       define BOOST_LANG_STDCPPCLI BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_LANG_STDCPPCLI\n#   define BOOST_LANG_STDCPPCLI_AVAILABLE\n#endif\n\n#define BOOST_LANG_STDCPPCLI_NAME \"Standard C++/CLI\"\n\n/*`\n[heading `BOOST_LANG_STDECPP`]\n\n[@http://en.wikipedia.org/wiki/Embedded_C%2B%2B Standard Embedded C++] language.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__embedded_cplusplus`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_LANG_STDECPP BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__embedded_cplusplus)\n#   undef BOOST_LANG_STDECPP\n#   define BOOST_LANG_STDECPP BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_LANG_STDECPP\n#   define BOOST_LANG_STDECPP_AVAILABLE\n#endif\n\n#define BOOST_LANG_STDECPP_NAME \"Standard Embedded C++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDCPP,BOOST_LANG_STDCPP_NAME)\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDCPPCLI,BOOST_LANG_STDCPPCLI_NAME)\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDECPP,BOOST_LANG_STDECPP_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/language.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_LANGUAGE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_LANGUAGE_H\n#define BOOST_PREDEF_LANGUAGE_H\n#endif\n\n#include <boost/predef/language/stdc.h>\n#include <boost/predef/language/stdcpp.h>\n#include <boost/predef/language/objc.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/c/_prefix.h",
    "content": "/*\nCopyright Rene Rivera 2008-2013\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_C__PREFIX_H\n#define BOOST_PREDEF_LIBRARY_C__PREFIX_H\n\n#include <boost/predef/detail/_cassert.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/c/gnu.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_C_GNU_H\n#define BOOST_PREDEF_LIBRARY_C_GNU_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n#include <boost/predef/library/c/_prefix.h>\n\n#if defined(__STDC__)\n#include <stddef.h>\n#elif defined(__cplusplus)\n#include <cstddef>\n#endif\n\n/*`\n[heading `BOOST_LIB_C_GNU`]\n\n[@http://en.wikipedia.org/wiki/Glibc GNU glibc] Standard C library.\nVersion number available as major, and minor.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__GLIBC__`] [__predef_detection__]]\n    [[`__GNU_LIBRARY__`] [__predef_detection__]]\n\n    [[`__GLIBC__`, `__GLIBC_MINOR__`] [V.R.0]]\n    [[`__GNU_LIBRARY__`, `__GNU_LIBRARY_MINOR__`] [V.R.0]]\n    ]\n */\n\n#define BOOST_LIB_C_GNU BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__GLIBC__) || defined(__GNU_LIBRARY__)\n#   undef BOOST_LIB_C_GNU\n#   if defined(__GLIBC__)\n#       define BOOST_LIB_C_GNU \\\n            BOOST_VERSION_NUMBER(__GLIBC__,__GLIBC_MINOR__,0)\n#   else\n#       define BOOST_LIB_C_GNU \\\n            BOOST_VERSION_NUMBER(__GNU_LIBRARY__,__GNU_LIBRARY_MINOR__,0)\n#   endif\n#endif\n\n#if BOOST_LIB_C_GNU\n#   define BOOST_LIB_C_GNU_AVAILABLE\n#endif\n\n#define BOOST_LIB_C_GNU_NAME \"GNU\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_GNU,BOOST_LIB_C_GNU_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/c/uc.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_C_UC_H\n#define BOOST_PREDEF_LIBRARY_C_UC_H\n\n#include <boost/predef/library/c/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_C_UC`]\n\n[@http://en.wikipedia.org/wiki/Uclibc uClibc] Standard C library.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__UCLIBC__`] [__predef_detection__]]\n\n    [[`__UCLIBC_MAJOR__`, `__UCLIBC_MINOR__`, `__UCLIBC_SUBLEVEL__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_LIB_C_UC BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__UCLIBC__)\n#   undef BOOST_LIB_C_UC\n#   define BOOST_LIB_C_UC BOOST_VERSION_NUMBER(\\\n        __UCLIBC_MAJOR__,__UCLIBC_MINOR__,__UCLIBC_SUBLEVEL__)\n#endif\n\n#if BOOST_LIB_C_UC\n#   define BOOST_LIB_C_UC_AVAILABLE\n#endif\n\n#define BOOST_LIB_C_UC_NAME \"uClibc\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_UC,BOOST_LIB_C_UC_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/c/vms.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_C_VMS_H\n#define BOOST_PREDEF_LIBRARY_C_VMS_H\n\n#include <boost/predef/library/c/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_C_VMS`]\n\nVMS libc Standard C library.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__CRTL_VER`] [__predef_detection__]]\n\n    [[`__CRTL_VER`] [V.R.P]]\n    ]\n */\n\n#define BOOST_LIB_C_VMS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__CRTL_VER)\n#   undef BOOST_LIB_C_VMS\n#   define BOOST_LIB_C_VMS BOOST_PREDEF_MAKE_10_VVRR0PP00(__CRTL_VER)\n#endif\n\n#if BOOST_LIB_C_VMS\n#   define BOOST_LIB_C_VMS_AVAILABLE\n#endif\n\n#define BOOST_LIB_C_VMS_NAME \"VMS\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_VMS,BOOST_LIB_C_VMS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/c/zos.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_C_ZOS_H\n#define BOOST_PREDEF_LIBRARY_C_ZOS_H\n\n#include <boost/predef/library/c/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_C_ZOS`]\n\nz/OS libc Standard C library.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__LIBREL__`] [__predef_detection__]]\n\n    [[`__LIBREL__`] [V.R.P]]\n    [[`__TARGET_LIB__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_LIB_C_ZOS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__LIBREL__)\n#   undef BOOST_LIB_C_ZOS\n#   if !defined(BOOST_LIB_C_ZOS) && defined(__LIBREL__)\n#       define BOOST_LIB_C_ZOS BOOST_PREDEF_MAKE_0X_VRRPPPP(__LIBREL__)\n#   endif\n#   if !defined(BOOST_LIB_C_ZOS) && defined(__TARGET_LIB__)\n#       define BOOST_LIB_C_ZOS BOOST_PREDEF_MAKE_0X_VRRPPPP(__TARGET_LIB__)\n#   endif\n#   if !defined(BOOST_LIB_C_ZOS)\n#       define BOOST_LIB_C_ZOS BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_LIB_C_ZOS\n#   define BOOST_LIB_C_ZOS_AVAILABLE\n#endif\n\n#define BOOST_LIB_C_ZOS_NAME \"z/OS\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_ZOS,BOOST_LIB_C_ZOS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/c.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_LIBRARY_C_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_LIBRARY_C_H\n#define BOOST_PREDEF_LIBRARY_C_H\n#endif\n\n#include <boost/predef/library/c/_prefix.h>\n\n#include <boost/predef/library/c/gnu.h>\n#include <boost/predef/library/c/uc.h>\n#include <boost/predef/library/c/vms.h>\n#include <boost/predef/library/c/zos.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/_prefix.h",
    "content": "/*\nCopyright Rene Rivera 2008-2013\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n#ifndef BOOST_PREDEF_LIBRARY_STD__PREFIX_H\n#define BOOST_PREDEF_LIBRARY_STD__PREFIX_H\n\n/*\nWe need to include an STD header to gives us the context\nof which library we are using. The \"smallest\" code-wise header\nseems to be <exception>. Boost uses <utility> but as far\nas I can tell (RR) it's not a stand-alone header in most\nimplementations. Using <exception> also has the benefit of\nbeing available in EC++, so we get a chance to make this work\nfor embedded users. And since it's not a header impacted by TR1\nthere's no magic needed for inclusion in the face of the\nBoost.TR1 library.\n*/\n#include <boost/predef/detail/_exception.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/cxx.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_CXX_H\n#define BOOST_PREDEF_LIBRARY_STD_CXX_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_CXX`]\n\n[@http://libcxx.llvm.org/ libc++] C++ Standard Library.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`_LIBCPP_VERSION`] [__predef_detection__]]\n\n    [[`_LIBCPP_VERSION`] [V.0.P]]\n    ]\n */\n\n#define BOOST_LIB_STD_CXX BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(_LIBCPP_VERSION)\n#   undef BOOST_LIB_STD_CXX\n#   define BOOST_LIB_STD_CXX BOOST_PREDEF_MAKE_10_VPPP(_LIBCPP_VERSION)\n#endif\n\n#if BOOST_LIB_STD_CXX\n#   define BOOST_LIB_STD_CXX_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_CXX_NAME \"libc++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_CXX,BOOST_LIB_STD_CXX_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/dinkumware.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_DINKUMWARE_H\n#define BOOST_PREDEF_LIBRARY_STD_DINKUMWARE_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_DINKUMWARE`]\n\n[@http://en.wikipedia.org/wiki/Dinkumware Dinkumware] Standard C++ Library.\nIf available version number as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`_YVALS`, `__IBMCPP__`] [__predef_detection__]]\n    [[`_CPPLIB_VER`] [__predef_detection__]]\n\n    [[`_CPPLIB_VER`] [V.R.0]]\n    ]\n */\n\n#define BOOST_LIB_STD_DINKUMWARE BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)\n#   undef BOOST_LIB_STD_DINKUMWARE\n#   if defined(_CPPLIB_VER)\n#       define BOOST_LIB_STD_DINKUMWARE BOOST_PREDEF_MAKE_10_VVRR(_CPPLIB_VER)\n#   else\n#       define BOOST_LIB_STD_DINKUMWARE BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_LIB_STD_DINKUMWARE\n#   define BOOST_LIB_STD_DINKUMWARE_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_DINKUMWARE_NAME \"Dinkumware\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_DINKUMWARE,BOOST_LIB_STD_DINKUMWARE_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/libcomo.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_LIBCOMO_H\n#define BOOST_PREDEF_LIBRARY_STD_LIBCOMO_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_COMO`]\n\n[@http://www.comeaucomputing.com/libcomo/ Comeau Computing] Standard C++ Library.\nVersion number available as major.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__LIBCOMO__`] [__predef_detection__]]\n\n    [[`__LIBCOMO_VERSION__`] [V.0.0]]\n    ]\n */\n\n#define BOOST_LIB_STD_COMO BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__LIBCOMO__)\n#   undef BOOST_LIB_STD_COMO\n#   define BOOST_LIB_STD_COMO BOOST_VERSION_NUMBER(__LIBCOMO_VERSION__,0,0)\n#endif\n\n#if BOOST_LIB_STD_COMO\n#   define BOOST_LIB_STD_COMO_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_COMO_NAME \"Comeau Computing\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_COMO,BOOST_LIB_STD_COMO_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/modena.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_MODENA_H\n#define BOOST_PREDEF_LIBRARY_STD_MODENA_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_MSIPL`]\n\n[@http://modena.us/ Modena Software Lib++] Standard C++ Library.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`MSIPL_COMPILE_H`] [__predef_detection__]]\n    [[`__MSIPL_COMPILE_H`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_LIB_STD_MSIPL BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(MSIPL_COMPILE_H) || defined(__MSIPL_COMPILE_H)\n#   undef BOOST_LIB_STD_MSIPL\n#   define BOOST_LIB_STD_MSIPL BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_LIB_STD_MSIPL\n#   define BOOST_LIB_STD_MSIPL_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_MSIPL_NAME \"Modena Software Lib++\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_MSIPL,BOOST_LIB_STD_MSIPL_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/msl.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_MSL_H\n#define BOOST_PREDEF_LIBRARY_STD_MSL_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_MSL`]\n\n[@http://www.freescale.com/ Metrowerks] Standard C++ Library.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__MSL_CPP__`] [__predef_detection__]]\n    [[`__MSL__`] [__predef_detection__]]\n\n    [[`__MSL_CPP__`] [V.R.P]]\n    [[`__MSL__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_LIB_STD_MSL BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__MSL_CPP__) || defined(__MSL__)\n#   undef BOOST_LIB_STD_MSL\n#   if defined(__MSL_CPP__)\n#       define BOOST_LIB_STD_MSL BOOST_PREDEF_MAKE_0X_VRPP(__MSL_CPP__)\n#   else\n#       define BOOST_LIB_STD_MSL BOOST_PREDEF_MAKE_0X_VRPP(__MSL__)\n#   endif\n#endif\n\n#if BOOST_LIB_STD_MSL\n#   define BOOST_LIB_STD_MSL_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_MSL_NAME \"Metrowerks\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_MSL,BOOST_LIB_STD_MSL_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/roguewave.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_ROGUEWAVE_H\n#define BOOST_PREDEF_LIBRARY_STD_ROGUEWAVE_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_RW`]\n\n[@http://stdcxx.apache.org/ Roguewave] Standard C++ library.\nIf available version number as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__STD_RWCOMPILER_H__`] [__predef_detection__]]\n    [[`_RWSTD_VER`] [__predef_detection__]]\n\n    [[`_RWSTD_VER`] [V.R.P]]\n    ]\n */\n\n#define BOOST_LIB_STD_RW BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)\n#   undef BOOST_LIB_STD_RW\n#   if defined(_RWSTD_VER)\n#       if _RWSTD_VER < 0x010000\n#           define BOOST_LIB_STD_RW BOOST_PREDEF_MAKE_0X_VVRRP(_RWSTD_VER)\n#       else\n#           define BOOST_LIB_STD_RW BOOST_PREDEF_MAKE_0X_VVRRPP(_RWSTD_VER)\n#       endif\n#   else\n#       define BOOST_LIB_STD_RW BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_LIB_STD_RW\n#   define BOOST_LIB_STD_RW_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_RW_NAME \"Roguewave\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_RW,BOOST_LIB_STD_RW_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/sgi.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_SGI_H\n#define BOOST_PREDEF_LIBRARY_STD_SGI_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_SGI`]\n\n[@http://www.sgi.com/tech/stl/ SGI] Standard C++ library.\nIf available version number as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__STL_CONFIG_H`] [__predef_detection__]]\n\n    [[`__SGI_STL`] [V.R.P]]\n    ]\n */\n\n#define BOOST_LIB_STD_SGI BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__STL_CONFIG_H)\n#   undef BOOST_LIB_STD_SGI\n#   if defined(__SGI_STL)\n#       define BOOST_LIB_STD_SGI BOOST_PREDEF_MAKE_0X_VRP(__SGI_STL)\n#   else\n#       define BOOST_LIB_STD_SGI BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_LIB_STD_SGI\n#   define BOOST_LIB_STD_SGI_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_SGI_NAME \"SGI\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_SGI,BOOST_LIB_STD_SGI_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/stdcpp3.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_STDCPP3_H\n#define BOOST_PREDEF_LIBRARY_STD_STDCPP3_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_GNU`]\n\n[@http://gcc.gnu.org/libstdc++/ GNU libstdc++] Standard C++ library.\nVersion number available as year (from 1970), month, and day.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__GLIBCXX__`] [__predef_detection__]]\n    [[`__GLIBCPP__`] [__predef_detection__]]\n\n    [[`__GLIBCXX__`] [V.R.P]]\n    [[`__GLIBCPP__`] [V.R.P]]\n    ]\n */\n\n#define BOOST_LIB_STD_GNU BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__GLIBCPP__) || defined(__GLIBCXX__)\n#   undef BOOST_LIB_STD_GNU\n#   if defined(__GLIBCXX__)\n#       define BOOST_LIB_STD_GNU BOOST_PREDEF_MAKE_YYYYMMDD(__GLIBCXX__)\n#   else\n#       define BOOST_LIB_STD_GNU BOOST_PREDEF_MAKE_YYYYMMDD(__GLIBCPP__)\n#   endif\n#endif\n\n#if BOOST_LIB_STD_GNU\n#   define BOOST_LIB_STD_GNU_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_GNU_NAME \"GNU\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_GNU,BOOST_LIB_STD_GNU_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/stlport.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_STLPORT_H\n#define BOOST_PREDEF_LIBRARY_STD_STLPORT_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_STLPORT`]\n\n[@http://sourceforge.net/projects/stlport/ STLport Standard C++] library.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__SGI_STL_PORT`] [__predef_detection__]]\n    [[`_STLPORT_VERSION`] [__predef_detection__]]\n\n    [[`_STLPORT_MAJOR`, `_STLPORT_MINOR`, `_STLPORT_PATCHLEVEL`] [V.R.P]]\n    [[`_STLPORT_VERSION`] [V.R.P]]\n    [[`__SGI_STL_PORT`] [V.R.P]]\n    ]\n */\n\n#define BOOST_LIB_STD_STLPORT BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)\n#   undef BOOST_LIB_STD_STLPORT\n#   if !defined(BOOST_LIB_STD_STLPORT) && defined(_STLPORT_MAJOR)\n#       define BOOST_LIB_STD_STLPORT \\\n            BOOST_VERSION_NUMBER(_STLPORT_MAJOR,_STLPORT_MINOR,_STLPORT_PATCHLEVEL)\n#   endif\n#   if !defined(BOOST_LIB_STD_STLPORT) && defined(_STLPORT_VERSION)\n#       define BOOST_LIB_STD_STLPORT BOOST_PREDEF_MAKE_0X_VRP(_STLPORT_VERSION)\n#   endif\n#   if !defined(BOOST_LIB_STD_STLPORT)\n#       define BOOST_LIB_STD_STLPORT BOOST_PREDEF_MAKE_0X_VRP(__SGI_STL_PORT)\n#   endif\n#endif\n\n#if BOOST_LIB_STD_STLPORT\n#   define BOOST_LIB_STD_STLPORT_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_STLPORT_NAME \"STLport\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_STLPORT,BOOST_LIB_STD_STLPORT_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std/vacpp.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_LIBRARY_STD_VACPP_H\n#define BOOST_PREDEF_LIBRARY_STD_VACPP_H\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_LIB_STD_IBM`]\n\n[@http://www.ibm.com/software/awdtools/xlcpp/ IBM VACPP Standard C++] library.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__IBMCPP__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_LIB_STD_IBM BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__IBMCPP__)\n#   undef BOOST_LIB_STD_IBM\n#   define BOOST_LIB_STD_IBM BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_LIB_STD_IBM\n#   define BOOST_LIB_STD_IBM_AVAILABLE\n#endif\n\n#define BOOST_LIB_STD_IBM_NAME \"IBM VACPP\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_IBM,BOOST_LIB_STD_IBM_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library/std.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n#if !defined(BOOST_PREDEF_LIBRARY_STD_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_LIBRARY_STD_H\n#define BOOST_PREDEF_LIBRARY_STD_H\n#endif\n\n#include <boost/predef/library/std/_prefix.h>\n\n#include <boost/predef/library/std/cxx.h>\n#include <boost/predef/library/std/dinkumware.h>\n#include <boost/predef/library/std/libcomo.h>\n#include <boost/predef/library/std/modena.h>\n#include <boost/predef/library/std/msl.h>\n#include <boost/predef/library/std/roguewave.h>\n#include <boost/predef/library/std/sgi.h>\n#include <boost/predef/library/std/stdcpp3.h>\n#include <boost/predef/library/std/stlport.h>\n#include <boost/predef/library/std/vacpp.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/library.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_LIBRARY_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_LIBRARY_H\n#define BOOST_PREDEF_LIBRARY_H\n#endif\n\n#include <boost/predef/library/c.h>\n#include <boost/predef/library/std.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/make.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n#include <boost/predef/detail/test.h>\n\n#ifndef BOOST_PREDEF_MAKE_H\n#define BOOST_PREDEF_MAKE_H\n\n/*\nShorthands for the common version number formats used by vendors...\n*/\n\n/*`\n[heading `BOOST_PREDEF_MAKE_..` macros]\n\nThese set of macros decompose common vendor version number\nmacros which are composed version, revision, and patch digits.\nThe naming convention indicates:\n\n* The base of the specified version number. \"`BOOST_PREDEF_MAKE_0X`\" for\n  hexadecimal digits, and \"`BOOST_PREDEF_MAKE_10`\" for decimal digits.\n* The format of the vendor version number. Where \"`V`\" indicates the version digits,\n  \"`R`\" indicates the revision digits, \"`P`\" indicates the patch digits, and \"`0`\"\n  indicates an ignored digit.\n\nMacros are:\n*/\n/*` `BOOST_PREDEF_MAKE_0X_VRP(V)` */\n#define BOOST_PREDEF_MAKE_0X_VRP(V) BOOST_VERSION_NUMBER((V&0xF00)>>8,(V&0xF0)>>4,(V&0xF))\n/*` `BOOST_PREDEF_MAKE_0X_VVRP(V)` */\n#define BOOST_PREDEF_MAKE_0X_VVRP(V) BOOST_VERSION_NUMBER((V&0xFF00)>>8,(V&0xF0)>>4,(V&0xF))\n/*` `BOOST_PREDEF_MAKE_0X_VRPP(V)` */\n#define BOOST_PREDEF_MAKE_0X_VRPP(V) BOOST_VERSION_NUMBER((V&0xF000)>>12,(V&0xF00)>>8,(V&0xFF))\n/*` `BOOST_PREDEF_MAKE_0X_VVRR(V)` */\n#define BOOST_PREDEF_MAKE_0X_VVRR(V) BOOST_VERSION_NUMBER((V&0xFF00)>>8,(V&0xFF),0)\n/*` `BOOST_PREDEF_MAKE_0X_VRRPPPP(V)` */\n#define BOOST_PREDEF_MAKE_0X_VRRPPPP(V) BOOST_VERSION_NUMBER((V&0xF000000)>>24,(V&0xFF0000)>>16,(V&0xFFFF))\n/*` `BOOST_PREDEF_MAKE_0X_VVRRP(V)` */\n#define BOOST_PREDEF_MAKE_0X_VVRRP(V) BOOST_VERSION_NUMBER((V&0xFF000)>>12,(V&0xFF0)>>4,(V&0xF))\n/*` `BOOST_PREDEF_MAKE_0X_VRRPP000(V)` */\n#define BOOST_PREDEF_MAKE_0X_VRRPP000(V) BOOST_VERSION_NUMBER((V&0xF0000000)>>28,(V&0xFF00000)>>20,(V&0xFF000)>>12)\n/*` `BOOST_PREDEF_MAKE_0X_VVRRPP(V)` */\n#define BOOST_PREDEF_MAKE_0X_VVRRPP(V) BOOST_VERSION_NUMBER((V&0xFF0000)>>16,(V&0xFF00)>>8,(V&0xFF))\n/*` `BOOST_PREDEF_MAKE_10_VPPP(V)` */\n#define BOOST_PREDEF_MAKE_10_VPPP(V) BOOST_VERSION_NUMBER(((V)/1000)%10,0,(V)%1000)\n/*` `BOOST_PREDEF_MAKE_10_VRP(V)` */\n#define BOOST_PREDEF_MAKE_10_VRP(V) BOOST_VERSION_NUMBER(((V)/100)%10,((V)/10)%10,(V)%10)\n/*` `BOOST_PREDEF_MAKE_10_VRP000(V)` */\n#define BOOST_PREDEF_MAKE_10_VRP000(V) BOOST_VERSION_NUMBER(((V)/100000)%10,((V)/10000)%10,((V)/1000)%10)\n/*` `BOOST_PREDEF_MAKE_10_VRPP(V)` */\n#define BOOST_PREDEF_MAKE_10_VRPP(V) BOOST_VERSION_NUMBER(((V)/1000)%10,((V)/100)%10,(V)%100)\n/*` `BOOST_PREDEF_MAKE_10_VRR(V)` */\n#define BOOST_PREDEF_MAKE_10_VRR(V) BOOST_VERSION_NUMBER(((V)/100)%10,(V)%100,0)\n/*` `BOOST_PREDEF_MAKE_10_VRRPP(V)` */\n#define BOOST_PREDEF_MAKE_10_VRRPP(V) BOOST_VERSION_NUMBER(((V)/10000)%10,((V)/100)%100,(V)%100)\n/*` `BOOST_PREDEF_MAKE_10_VRR000(V)` */\n#define BOOST_PREDEF_MAKE_10_VRR000(V) BOOST_VERSION_NUMBER(((V)/100000)%10,((V)/1000)%100,0)\n/*` `BOOST_PREDEF_MAKE_10_VV00(V)` */\n#define BOOST_PREDEF_MAKE_10_VV00(V) BOOST_VERSION_NUMBER(((V)/100)%100,0,0)\n/*` `BOOST_PREDEF_MAKE_10_VVRR(V)` */\n#define BOOST_PREDEF_MAKE_10_VVRR(V) BOOST_VERSION_NUMBER(((V)/100)%100,(V)%100,0)\n/*` `BOOST_PREDEF_MAKE_10_VVRRPP(V)` */\n#define BOOST_PREDEF_MAKE_10_VVRRPP(V) BOOST_VERSION_NUMBER(((V)/10000)%100,((V)/100)%100,(V)%100)\n/*` `BOOST_PREDEF_MAKE_10_VVRR0PP00(V)` */\n#define BOOST_PREDEF_MAKE_10_VVRR0PP00(V) BOOST_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,((V)/100)%100)\n/*` `BOOST_PREDEF_MAKE_10_VVRR0PPPP(V)` */\n#define BOOST_PREDEF_MAKE_10_VVRR0PPPP(V) BOOST_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,(V)%10000)\n/*` `BOOST_PREDEF_MAKE_10_VVRR00PP00(V)` */\n#define BOOST_PREDEF_MAKE_10_VVRR00PP00(V) BOOST_VERSION_NUMBER(((V)/100000000)%100,((V)/1000000)%100,((V)/100)%100)\n/*`\n[heading `BOOST_PREDEF_MAKE_*..` date macros]\n\nDate decomposition macros return a date in the relative to the 1970\nEpoch date. If the month is not available, January 1st is used as the month and day.\nIf the day is not available, but the month is, the 1st of the month is used as the day.\n*/\n/*` `BOOST_PREDEF_MAKE_DATE(Y,M,D)` */\n#define BOOST_PREDEF_MAKE_DATE(Y,M,D) BOOST_VERSION_NUMBER((Y)%10000-1970,(M)%100,(D)%100)\n/*` `BOOST_PREDEF_MAKE_YYYYMMDD(V)` */\n#define BOOST_PREDEF_MAKE_YYYYMMDD(V) BOOST_PREDEF_MAKE_DATE(((V)/10000)%10000,((V)/100)%100,(V)%100)\n/*` `BOOST_PREDEF_MAKE_YYYY(V)` */\n#define BOOST_PREDEF_MAKE_YYYY(V) BOOST_PREDEF_MAKE_DATE(V,1,1)\n/*` `BOOST_PREDEF_MAKE_YYYYMM(V)` */\n#define BOOST_PREDEF_MAKE_YYYYMM(V) BOOST_PREDEF_MAKE_DATE((V)/100,(V)%100,1)\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/aix.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_AIX_H\n#define BOOST_PREDEF_OS_AIX_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_AIX`]\n\n[@http://en.wikipedia.org/wiki/AIX_operating_system IBM AIX] operating system.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`_AIX`] [__predef_detection__]]\n    [[`__TOS_AIX__`] [__predef_detection__]]\n\n    [[`_AIX43`] [4.3.0]]\n    [[`_AIX41`] [4.1.0]]\n    [[`_AIX32`] [3.2.0]]\n    [[`_AIX3`] [3.0.0]]\n    ]\n */\n\n#define BOOST_OS_AIX BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(_AIX) || defined(__TOS_AIX__) \\\n    )\n#   undef BOOST_OS_AIX\n#   if !defined(BOOST_OS_AIX) && defined(_AIX43)\n#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(4,3,0)\n#   endif\n#   if !defined(BOOST_OS_AIX) && defined(_AIX41)\n#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(4,1,0)\n#   endif\n#   if !defined(BOOST_OS_AIX) && defined(_AIX32)\n#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(3,2,0)\n#   endif\n#   if !defined(BOOST_OS_AIX) && defined(_AIX3)\n#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(3,0,0)\n#   endif\n#   if !defined(BOOST_OS_AIX)\n#       define BOOST_OS_AIX BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_OS_AIX\n#   define BOOST_OS_AIX_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_AIX_NAME \"IBM AIX\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_AIX,BOOST_OS_AIX_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/amigaos.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_AMIGAOS_H\n#define BOOST_PREDEF_OS_AMIGAOS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_AMIGAOS`]\n\n[@http://en.wikipedia.org/wiki/AmigaOS AmigaOS] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`AMIGA`] [__predef_detection__]]\n    [[`__amigaos__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_AMIGAOS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(AMIGA) || defined(__amigaos__) \\\n    )\n#   undef BOOST_OS_AMIGAOS\n#   define BOOST_OS_AMIGAOS BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_AMIGAOS\n#   define BOOST_OS_AMIGAOS_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_AMIGAOS_NAME \"AmigaOS\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_AMIGAOS,BOOST_OS_AMIGAOS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/android.h",
    "content": "/*\nCopyright Rene Rivera 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_ADROID_H\n#define BOOST_PREDEF_OS_ADROID_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_ANDROID`]\n\n[@http://en.wikipedia.org/wiki/Android_%28operating_system%29 Android] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__ANDROID__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_ANDROID BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__ANDROID__) \\\n    )\n#   undef BOOST_OS_ANDROID\n#   define BOOST_OS_ANDROID BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_ANDROID\n#   define BOOST_OS_ANDROID_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_ANDROID_NAME \"Android\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_ANDROID,BOOST_OS_ANDROID_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/beos.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_BEOS_H\n#define BOOST_PREDEF_OS_BEOS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_BEOS`]\n\n[@http://en.wikipedia.org/wiki/BeOS BeOS] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__BEOS__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_BEOS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__BEOS__) \\\n    )\n#   undef BOOST_OS_BEOS\n#   define BOOST_OS_BEOS BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_BEOS\n#   define BOOST_OS_BEOS_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_BEOS_NAME \"BeOS\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_BEOS,BOOST_OS_BEOS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/bsd/bsdi.h",
    "content": "/*\nCopyright Rene Rivera 2012-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_BSD_BSDI_H\n#define BOOST_PREDEF_OS_BSD_BSDI_H\n\n#include <boost/predef/os/bsd.h>\n\n/*`\n[heading `BOOST_OS_BSD_BSDI`]\n\n[@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__bsdi__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_BSD_BSDI BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__bsdi__) \\\n    )\n#   ifndef BOOST_OS_BSD_AVAILABLE\n#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE\n#       define BOOST_OS_BSD_AVAILABLE\n#   endif\n#   undef BOOST_OS_BSD_BSDI\n#   define BOOST_OS_BSD_BSDI BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_BSD_BSDI\n#   define BOOST_OS_BSD_BSDI_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_BSD_BSDI_NAME \"BSDi BSD/OS\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_BSDI,BOOST_OS_BSD_BSDI_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/bsd/dragonfly.h",
    "content": "/*\nCopyright Rene Rivera 2012-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_BSD_DRAGONFLY_H\n#define BOOST_PREDEF_OS_BSD_DRAGONFLY_H\n\n#include <boost/predef/os/bsd.h>\n\n/*`\n[heading `BOOST_OS_BSD_DRAGONFLY`]\n\n[@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__DragonFly__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_BSD_DRAGONFLY BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__DragonFly__) \\\n    )\n#   ifndef BOOST_OS_BSD_AVAILABLE\n#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE\n#       define BOOST_OS_BSD_AVAILABLE\n#   endif\n#   undef BOOST_OS_BSD_DRAGONFLY\n#   if defined(__DragonFly__)\n#       define BOOST_OS_DRAGONFLY_BSD BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_OS_BSD_DRAGONFLY\n#   define BOOST_OS_BSD_DRAGONFLY_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_BSD_DRAGONFLY_NAME \"DragonFly BSD\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_DRAGONFLY,BOOST_OS_BSD_DRAGONFLY_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/bsd/free.h",
    "content": "/*\nCopyright Rene Rivera 2012-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_BSD_FREE_H\n#define BOOST_PREDEF_OS_BSD_FREE_H\n\n#include <boost/predef/os/bsd.h>\n\n/*`\n[heading `BOOST_OS_BSD_FREE`]\n\n[@http://en.wikipedia.org/wiki/Freebsd FreeBSD] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__FreeBSD__`] [__predef_detection__]]\n\n    [[`__FreeBSD_version`] [V.R.P]]\n    ]\n */\n\n#define BOOST_OS_BSD_FREE BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__FreeBSD__) \\\n    )\n#   ifndef BOOST_OS_BSD_AVAILABLE\n#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE\n#       define BOOST_OS_BSD_AVAILABLE\n#   endif\n#   undef BOOST_OS_BSD_FREE\n#   if defined(__FreeBSD_version)\n#       if __FreeBSD_version < 500000\n#           define BOOST_OS_BSD_FREE \\\n                BOOST_PREDEF_MAKE_10_VRP000(__FreeBSD_version)\n#       else\n#           define BOOST_OS_BSD_FREE \\\n                BOOST_PREDEF_MAKE_10_VRR000(__FreeBSD_version)\n#       endif\n#   else\n#       define BOOST_OS_BSD_FREE BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_OS_BSD_FREE\n#   define BOOST_OS_BSD_FREE_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_BSD_FREE_NAME \"Free BSD\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_FREE,BOOST_OS_BSD_FREE_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/bsd/net.h",
    "content": "/*\nCopyright Rene Rivera 2012-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_BSD_NET_H\n#define BOOST_PREDEF_OS_BSD_NET_H\n\n#include <boost/predef/os/bsd.h>\n\n/*`\n[heading `BOOST_OS_BSD_NET`]\n\n[@http://en.wikipedia.org/wiki/Netbsd NetBSD] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__NETBSD__`] [__predef_detection__]]\n    [[`__NetBSD__`] [__predef_detection__]]\n\n    [[`__NETBSD_version`] [V.R.P]]\n    [[`NetBSD0_8`] [0.8.0]]\n    [[`NetBSD0_9`] [0.9.0]]\n    [[`NetBSD1_0`] [1.0.0]]\n    [[`__NetBSD_Version`] [V.R.P]]\n    ]\n */\n\n#define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__NETBSD__) || defined(__NetBSD__) \\\n    )\n#   ifndef BOOST_OS_BSD_AVAILABLE\n#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE\n#       define BOOST_OS_BSD_AVAILABLE\n#   endif\n#   undef BOOST_OS_BSD_NET\n#   if defined(__NETBSD__)\n#       if defined(__NETBSD_version)\n#           if __NETBSD_version < 500000\n#               define BOOST_OS_BSD_NET \\\n                    BOOST_PREDEF_MAKE_10_VRP000(__NETBSD_version)\n#           else\n#               define BOOST_OS_BSD_NET \\\n                    BOOST_PREDEF_MAKE_10_VRR000(__NETBSD_version)\n#           endif\n#       else\n#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#   elif defined(__NetBSD__)\n#       if !defined(BOOST_OS_BSD_NET) && defined(NetBSD0_8)\n#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(0,8,0)\n#       endif\n#       if !defined(BOOST_OS_BSD_NET) && defined(NetBSD0_9)\n#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(0,9,0)\n#       endif\n#       if !defined(BOOST_OS_BSD_NET) && defined(NetBSD1_0)\n#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(1,0,0)\n#       endif\n#       if !defined(BOOST_OS_BSD_NET) && defined(__NetBSD_Version)\n#           define BOOST_OS_BSD_NET \\\n                BOOST_PREDEF_MAKE_10_VVRR00PP00(__NetBSD_Version)\n#       endif\n#       if !defined(BOOST_OS_BSD_NET)\n#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#   endif\n#endif\n\n#if BOOST_OS_BSD_NET\n#   define BOOST_OS_BSD_NET_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_BSD_NET_NAME \"DragonFly BSD\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_NET,BOOST_OS_BSD_NET_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/bsd/open.h",
    "content": "/*\nCopyright Rene Rivera 2012-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_BSD_OPEN_H\n#define BOOST_PREDEF_OS_BSD_OPEN_H\n\n#include <boost/predef/os/bsd.h>\n\n/*`\n[heading `BOOST_OS_BSD_OPEN`]\n\n[@http://en.wikipedia.org/wiki/Openbsd OpenBSD] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__OpenBSD__`] [__predef_detection__]]\n\n    [[`OpenBSD2_0`] [2.0.0]]\n    [[`OpenBSD2_1`] [2.1.0]]\n    [[`OpenBSD2_2`] [2.2.0]]\n    [[`OpenBSD2_3`] [2.3.0]]\n    [[`OpenBSD2_4`] [2.4.0]]\n    [[`OpenBSD2_5`] [2.5.0]]\n    [[`OpenBSD2_6`] [2.6.0]]\n    [[`OpenBSD2_7`] [2.7.0]]\n    [[`OpenBSD2_8`] [2.8.0]]\n    [[`OpenBSD2_9`] [2.9.0]]\n    [[`OpenBSD3_0`] [3.0.0]]\n    [[`OpenBSD3_1`] [3.1.0]]\n    [[`OpenBSD3_2`] [3.2.0]]\n    [[`OpenBSD3_3`] [3.3.0]]\n    [[`OpenBSD3_4`] [3.4.0]]\n    [[`OpenBSD3_5`] [3.5.0]]\n    [[`OpenBSD3_6`] [3.6.0]]\n    [[`OpenBSD3_7`] [3.7.0]]\n    [[`OpenBSD3_8`] [3.8.0]]\n    [[`OpenBSD3_9`] [3.9.0]]\n    [[`OpenBSD4_0`] [4.0.0]]\n    [[`OpenBSD4_1`] [4.1.0]]\n    [[`OpenBSD4_2`] [4.2.0]]\n    [[`OpenBSD4_3`] [4.3.0]]\n    [[`OpenBSD4_4`] [4.4.0]]\n    [[`OpenBSD4_5`] [4.5.0]]\n    [[`OpenBSD4_6`] [4.6.0]]\n    [[`OpenBSD4_7`] [4.7.0]]\n    [[`OpenBSD4_8`] [4.8.0]]\n    [[`OpenBSD4_9`] [4.9.0]]\n    ]\n */\n\n#define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__OpenBSD__) \\\n    )\n#   ifndef BOOST_OS_BSD_AVAILABLE\n#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE\n#       define BOOST_OS_BSD_AVAILABLE\n#   endif\n#   undef BOOST_OS_BSD_OPEN\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_0)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,0,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_1)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,1,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_2)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,2,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_3)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,3,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_4)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,4,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_5)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,5,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_6)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,6,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_7)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,7,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_8)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,8,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_9)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,9,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_0)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,0,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_1)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,1,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_2)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,2,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_3)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,3,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_4)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,4,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_5)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,5,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_6)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,6,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_7)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,7,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_8)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,8,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_9)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,9,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_0)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,0,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_1)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,1,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_2)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,2,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_3)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,3,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_4)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,4,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_5)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,5,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_6)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,6,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_7)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,7,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_8)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,8,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_9)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,9,0)\n#   endif\n#   if !defined(BOOST_OS_BSD_OPEN)\n#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_OS_BSD_OPEN\n#   define BOOST_OS_BSD_OPEN_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_BSD_OPEN_NAME \"OpenBSD\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_OPEN,BOOST_OS_BSD_OPEN_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/bsd.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_BSD_H\n#define BOOST_PREDEF_OS_BSD_H\n\n/* Special case: OSX will define BSD predefs if the sys/param.h\n * header is included. We can guard against that, but only if we\n * detect OSX first. Hence we will force include OSX detection\n * before doing any BSD detection.\n */\n#include <boost/predef/os/macos.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_BSD`]\n\n[@http://en.wikipedia.org/wiki/Berkeley_Software_Distribution BSD] operating system.\n\nBSD has various branch operating systems possible and each detected\nindividually. This detects the following variations and sets a specific\nversion number macro to match:\n\n* `BOOST_OS_BSD_DRAGONFLY` [@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD]\n* `BOOST_OS_BSD_FREE` [@http://en.wikipedia.org/wiki/Freebsd FreeBSD]\n* `BOOST_OS_BSD_BSDI` [@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS]\n* `BOOST_OS_BSD_NET` [@http://en.wikipedia.org/wiki/Netbsd NetBSD]\n* `BOOST_OS_BSD_OPEN` [@http://en.wikipedia.org/wiki/Openbsd OpenBSD]\n\n[note The general `BOOST_OS_BSD` is set in all cases to indicate some form\nof BSD. If the above variants is detected the corresponding macro is also set.]\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`BSD`] [__predef_detection__]]\n    [[`_SYSTYPE_BSD`] [__predef_detection__]]\n\n    [[`BSD4_2`] [4.2.0]]\n    [[`BSD4_3`] [4.3.0]]\n    [[`BSD4_4`] [4.4.0]]\n    [[`BSD`] [V.R.0]]\n    ]\n */\n\n#include <boost/predef/os/bsd/bsdi.h>\n#include <boost/predef/os/bsd/dragonfly.h>\n#include <boost/predef/os/bsd/free.h>\n#include <boost/predef/os/bsd/open.h>\n#include <boost/predef/os/bsd/net.h>\n\n#ifndef BOOST_OS_BSD\n#define BOOST_OS_BSD BOOST_VERSION_NUMBER_NOT_AVAILABLE\n#endif\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(BSD) || \\\n    defined(_SYSTYPE_BSD) \\\n    )\n#   undef BOOST_OS_BSD\n#   include <sys/param.h>\n#   if !defined(BOOST_OS_BSD) && defined(BSD4_4)\n#       define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,4,0)\n#   endif\n#   if !defined(BOOST_OS_BSD) && defined(BSD4_3)\n#       define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,3,0)\n#   endif\n#   if !defined(BOOST_OS_BSD) && defined(BSD4_2)\n#       define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,2,0)\n#   endif\n#   if !defined(BOOST_OS_BSD) && defined(BSD)\n#       define BOOST_OS_BSD BOOST_PREDEF_MAKE_10_VVRR(BSD)\n#   endif\n#   if !defined(BOOST_OS_BSD)\n#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_OS_BSD\n#   define BOOST_OS_BSD_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_BSD_NAME \"BSD\"\n\n#else\n\n#include <boost/predef/os/bsd/bsdi.h>\n#include <boost/predef/os/bsd/dragonfly.h>\n#include <boost/predef/os/bsd/free.h>\n#include <boost/predef/os/bsd/open.h>\n#include <boost/predef/os/bsd/net.h>\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD,BOOST_OS_BSD_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/cygwin.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_CYGWIN_H\n#define BOOST_PREDEF_OS_CYGWIN_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_CYGWIN`]\n\n[@http://en.wikipedia.org/wiki/Cygwin Cygwin] evironment.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__CYGWIN__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_CYGWIN BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__CYGWIN__) \\\n    )\n#   undef BOOST_OS_CYGWIN\n#   define BOOST_OS_CGYWIN BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_CYGWIN\n#   define BOOST_OS_CYGWIN_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_CYGWIN_NAME \"Cygwin\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_CYGWIN,BOOST_OS_CYGWIN_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/haiku.h",
    "content": "/*\nCopyright Jessica Hamilton 2014\nCopyright Rene Rivera 2014-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_HAIKU_H\n#define BOOST_PREDEF_OS_HAIKU_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_HAIKU`]\n\n[@http://en.wikipedia.org/wiki/Haiku_(operating_system) Haiku] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__HAIKU__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_HAIKU BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__HAIKU__) \\\n    )\n#   undef BOOST_OS_HAIKU\n#   define BOOST_OS_HAIKU BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_HAIKU\n#   define BOOST_OS_HAIKU_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_HAIKU_NAME \"Haiku\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_HAIKU,BOOST_OS_HAIKU_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/hpux.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_HPUX_H\n#define BOOST_PREDEF_OS_HPUX_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_HPUX`]\n\n[@http://en.wikipedia.org/wiki/HP-UX HP-UX] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`hpux`] [__predef_detection__]]\n    [[`_hpux`] [__predef_detection__]]\n    [[`__hpux`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_HPUX BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(hpux) || defined(_hpux) || defined(__hpux) \\\n    )\n#   undef BOOST_OS_HPUX\n#   define BOOST_OS_HPUX BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_HPUX\n#   define BOOST_OS_HPUX_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_HPUX_NAME \"HP-UX\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_HPUX,BOOST_OS_HPUX_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/ios.h",
    "content": "/*\nCopyright Franz Detro 2014\nCopyright Rene Rivera 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_IOS_H\n#define BOOST_PREDEF_OS_IOS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_IOS`]\n\n[@http://en.wikipedia.org/wiki/iOS iOS] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__APPLE__`] [__predef_detection__]]\n    [[`__MACH__`] [__predef_detection__]]\n    [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__predef_detection__]]\n\n    [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000]]\n    ]\n */\n\n#define BOOST_OS_IOS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__APPLE__) && defined(__MACH__) && \\\n    defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) \\\n    )\n#   undef BOOST_OS_IOS\n#   define BOOST_OS_IOS (__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000)\n#endif\n\n#if BOOST_OS_IOS\n#   define BOOST_OS_IOS_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_IOS_NAME \"iOS\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_IOS,BOOST_OS_IOS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/irix.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_IRIX_H\n#define BOOST_PREDEF_OS_IRIX_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_IRIX`]\n\n[@http://en.wikipedia.org/wiki/Irix IRIX] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`sgi`] [__predef_detection__]]\n    [[`__sgi`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_IRIX BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(sgi) || defined(__sgi) \\\n    )\n#   undef BOOST_OS_IRIX\n#   define BOOST_OS_IRIX BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_IRIX\n#   define BOOST_OS_IRIX_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_IRIX_NAME \"IRIX\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_IRIX,BOOST_OS_IRIX_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/linux.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_LINUX_H\n#define BOOST_PREDEF_OS_LINUX_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_LINUX`]\n\n[@http://en.wikipedia.org/wiki/Linux Linux] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`linux`] [__predef_detection__]]\n    [[`__linux`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_LINUX BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(linux) || defined(__linux) \\\n    )\n#   undef BOOST_OS_LINUX\n#   define BOOST_OS_LINUX BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_LINUX\n#   define BOOST_OS_LINUX_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_LINUX_NAME \"Linux\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_LINUX,BOOST_OS_LINUX_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/macos.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nCopyright Franz Detro 2014\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_MACOS_H\n#define BOOST_PREDEF_OS_MACOS_H\n\n/* Special case: iOS will define the same predefs as MacOS, and additionally\n '__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__'. We can guard against that,\n but only if we detect iOS first. Hence we will force include iOS detection\n * before doing any MacOS detection.\n */\n#include <boost/predef/os/ios.h>\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_MACOS`]\n\n[@http://en.wikipedia.org/wiki/Mac_OS Mac OS] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`macintosh`] [__predef_detection__]]\n    [[`Macintosh`] [__predef_detection__]]\n    [[`__APPLE__`] [__predef_detection__]]\n    [[`__MACH__`] [__predef_detection__]]\n\n    [[`__APPLE__`, `__MACH__`] [10.0.0]]\n    [[ /otherwise/ ] [9.0.0]]\n    ]\n */\n\n#define BOOST_OS_MACOS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(macintosh) || defined(Macintosh) || \\\n    (defined(__APPLE__) && defined(__MACH__)) \\\n    )\n#   undef BOOST_OS_MACOS\n#   if !defined(BOOST_OS_MACOS) && defined(__APPLE__) && defined(__MACH__)\n#       define BOOST_OS_MACOS BOOST_VERSION_NUMBER(10,0,0)\n#   endif\n#   if !defined(BOOST_OS_MACOS)\n#       define BOOST_OS_MACOS BOOST_VERSION_NUMBER(9,0,0)\n#   endif\n#endif\n\n#if BOOST_OS_MACOS\n#   define BOOST_OS_MACOS_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_MACOS_NAME \"Mac OS\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_MACOS,BOOST_OS_MACOS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/os400.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_OS400_H\n#define BOOST_PREDEF_OS_OS400_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_OS400`]\n\n[@http://en.wikipedia.org/wiki/IBM_i IBM OS/400] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__OS400__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_OS400 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__OS400__) \\\n    )\n#   undef BOOST_OS_OS400\n#   define BOOST_OS_OS400 BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_OS400\n#   define BOOST_OS_OS400_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_OS400_NAME \"IBM OS/400\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_OS400,BOOST_OS_OS400_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/qnxnto.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_QNXNTO_H\n#define BOOST_PREDEF_OS_QNXNTO_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_QNX`]\n\n[@http://en.wikipedia.org/wiki/QNX QNX] operating system.\nVersion number available as major, and minor if possible. And\nversion 4 is specifically detected.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__QNX__`] [__predef_detection__]]\n    [[`__QNXNTO__`] [__predef_detection__]]\n\n    [[`_NTO_VERSION`] [V.R.0]]\n    [[`__QNX__`] [4.0.0]]\n    ]\n */\n\n#define BOOST_OS_QNX BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(__QNX__) || defined(__QNXNTO__) \\\n    )\n#   undef BOOST_OS_QNX\n#   if !defined(BOOST_OS_QNX) && defined(_NTO_VERSION)\n#       define BOOST_OS_QNX BOOST_PREDEF_MAKE_10_VVRR(_NTO_VERSION)\n#   endif\n#   if !defined(BOOST_OS_QNX) && defined(__QNX__)\n#       define BOOST_OS_QNX BOOST_VERSION_NUMBER(4,0,0)\n#   endif\n#   if !defined(BOOST_OS_QNX)\n#       define BOOST_OS_QNX BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_OS_QNX\n#   define BOOST_OS_QNX_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_QNX_NAME \"QNX\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_QNX,BOOST_OS_QNX_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/solaris.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_SOLARIS_H\n#define BOOST_PREDEF_OS_SOLARIS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_SOLARIS`]\n\n[@http://en.wikipedia.org/wiki/Solaris_Operating_Environment Solaris] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`sun`] [__predef_detection__]]\n    [[`__sun`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_SOLARIS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(sun) || defined(__sun) \\\n    )\n#   undef BOOST_OS_SOLARIS\n#   define BOOST_OS_SOLARIS BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_SOLARIS\n#   define BOOST_OS_SOLARIS_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_SOLARIS_NAME \"Solaris\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_SOLARIS,BOOST_OS_SOLARIS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/unix.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_UNIX_H\n#define BOOST_PREDEF_OS_UNIX_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_UNIX`]\n\n[@http://en.wikipedia.org/wiki/Unix Unix Environment] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`unix`] [__predef_detection__]]\n    [[`__unix`] [__predef_detection__]]\n    [[`_XOPEN_SOURCE`] [__predef_detection__]]\n    [[`_POSIX_SOURCE`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_UNIX BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(unix) || defined(__unix) || \\\n    defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE)\n#   undef BOOST_OS_UNIX\n#   define BOOST_OS_UNIX BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_UNIX\n#   define BOOST_OS_UNIX_AVAILABLE\n#endif\n\n#define BOOST_OS_UNIX_NAME \"Unix Environment\"\n\n/*`\n[heading `BOOST_OS_SVR4`]\n\n[@http://en.wikipedia.org/wiki/UNIX_System_V SVR4 Environment] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__sysv__`] [__predef_detection__]]\n    [[`__SVR4`] [__predef_detection__]]\n    [[`__svr4__`] [__predef_detection__]]\n    [[`_SYSTYPE_SVR4`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_SVR4 BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__sysv__) || defined(__SVR4) || \\\n    defined(__svr4__) || defined(_SYSTYPE_SVR4)\n#   undef BOOST_OS_SVR4\n#   define BOOST_OS_SVR4 BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_SVR4\n#   define BOOST_OS_SVR4_AVAILABLE\n#endif\n\n#define BOOST_OS_SVR4_NAME \"SVR4 Environment\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_UNIX,BOOST_OS_UNIX_NAME)\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_SVR4,BOOST_OS_SVR4_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/vms.h",
    "content": "/*\nCopyright Rene Rivera 2011-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_VMS_H\n#define BOOST_PREDEF_OS_VMS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_VMS`]\n\n[@http://en.wikipedia.org/wiki/Vms VMS] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`VMS`] [__predef_detection__]]\n    [[`__VMS`] [__predef_detection__]]\n\n    [[`__VMS_VER`] [V.R.P]]\n    ]\n */\n\n#define BOOST_OS_VMS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(VMS) || defined(__VMS) \\\n    )\n#   undef BOOST_OS_VMS\n#   if defined(__VMS_VER)\n#       define BOOST_OS_VMS BOOST_PREDEF_MAKE_10_VVRR00PP00(__VMS_VER)\n#   else\n#       define BOOST_OS_VMS BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#if BOOST_OS_VMS\n#   define BOOST_OS_VMS_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_VMS_NAME \"VMS\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_VMS,BOOST_OS_VMS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os/windows.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_OS_WINDOWS_H\n#define BOOST_PREDEF_OS_WINDOWS_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_OS_WINDOWS`]\n\n[@http://en.wikipedia.org/wiki/Category:Microsoft_Windows Microsoft Windows] operating system.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`_WIN32`] [__predef_detection__]]\n    [[`_WIN64`] [__predef_detection__]]\n    [[`__WIN32__`] [__predef_detection__]]\n    [[`__TOS_WIN__`] [__predef_detection__]]\n    [[`__WINDOWS__`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_OS_WINDOWS BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \\\n    defined(_WIN32) || defined(_WIN64) || \\\n    defined(__WIN32__) || defined(__TOS_WIN__) || \\\n    defined(__WINDOWS__) \\\n    )\n#   undef BOOST_OS_WINDOWS\n#   define BOOST_OS_WINDOWS BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n\n#if BOOST_OS_WINDOWS\n#   define BOOST_OS_WINDOWS_AVAILABLE\n#   include <boost/predef/detail/os_detected.h>\n#endif\n\n#define BOOST_OS_WINDOWS_NAME \"Microsoft Windows\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_OS_WINDOWS,BOOST_OS_WINDOWS_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/os.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nCopyright Franz Detro 2014\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_OS_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_OS_H\n#define BOOST_PREDEF_OS_H\n#endif\n\n#include <boost/predef/os/aix.h>\n#include <boost/predef/os/amigaos.h>\n#include <boost/predef/os/android.h>\n#include <boost/predef/os/beos.h>\n#include <boost/predef/os/bsd.h>\n#include <boost/predef/os/cygwin.h>\n#include <boost/predef/os/haiku.h>\n#include <boost/predef/os/hpux.h>\n#include <boost/predef/os/irix.h>\n#include <boost/predef/os/ios.h>\n#include <boost/predef/os/linux.h>\n#include <boost/predef/os/macos.h>\n#include <boost/predef/os/os400.h>\n#include <boost/predef/os/qnxnto.h>\n#include <boost/predef/os/solaris.h>\n#include <boost/predef/os/unix.h>\n#include <boost/predef/os/vms.h>\n#include <boost/predef/os/windows.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/other/endian.h",
    "content": "/*\nCopyright Rene Rivera 2013-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_ENDIAN_H\n#define BOOST_PREDEF_ENDIAN_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n#include <boost/predef/library/c/gnu.h>\n#include <boost/predef/os/macos.h>\n#include <boost/predef/os/bsd.h>\n#include <boost/predef/os/android.h>\n\n/*`\n[heading `BOOST_ENDIAN_*`]\n\nDetection of endian memory ordering. There are four defined macros\nin this header that define the various generally possible endian\nmemory orderings:\n\n* `BOOST_ENDIAN_BIG_BYTE`, byte-swapped big-endian.\n* `BOOST_ENDIAN_BIG_WORD`, word-swapped big-endian.\n* `BOOST_ENDIAN_LITTLE_BYTE`, byte-swapped little-endian.\n* `BOOST_ENDIAN_LITTLE_WORD`, word-swapped little-endian.\n\nThe detection is conservative in that it only identifies endianness\nthat it knows for certain. In particular bi-endianness is not\nindicated as is it not practically possible to determine the\nendianness from anything but an operating system provided\nheader. And the currently known headers do not define that\nprogramatic bi-endianness is available.\n\nThis implementation is a compilation of various publicly available\ninformation and acquired knowledge:\n\n# The indispensable documentation of \"Pre-defined Compiler Macros\"\n  [@http://sourceforge.net/p/predef/wiki/Endianness Endianness].\n# The various endian specifications available in the\n  [@http://wikipedia.org/ Wikipedia] computer architecture pages.\n# Generally available searches for headers that define endianness.\n */\n\n#define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE\n#define BOOST_ENDIAN_BIG_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE\n#define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE\n#define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n/* GNU libc provides a header defining __BYTE_ORDER, or _BYTE_ORDER.\n * And some OSs provide some for of endian header also.\n */\n#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \\\n    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD\n#   if BOOST_LIB_C_GNU || BOOST_OS_ANDROID\n#       include <endian.h>\n#   else\n#       if BOOST_OS_MACOS\n#           include <machine/endian.h>\n#       else\n#           if BOOST_OS_BSD\n#               if BOOST_OS_BSD_OPEN\n#                   include <machine/endian.h>\n#               else\n#                   include <sys/endian.h>\n#               endif\n#           endif\n#       endif\n#   endif\n#   if defined(__BYTE_ORDER)\n#       if defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN)\n#           undef BOOST_ENDIAN_BIG_BYTE\n#           define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#       if defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN)\n#           undef BOOST_ENDIAN_LITTLE_BYTE\n#           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#       if defined(__PDP_ENDIAN) && (__BYTE_ORDER == __PDP_ENDIAN)\n#           undef BOOST_ENDIAN_LITTLE_WORD\n#           define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#   endif\n#   if !defined(__BYTE_ORDER) && defined(_BYTE_ORDER)\n#       if defined(_BIG_ENDIAN) && (_BYTE_ORDER == _BIG_ENDIAN)\n#           undef BOOST_ENDIAN_BIG_BYTE\n#           define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#       if defined(_LITTLE_ENDIAN) && (_BYTE_ORDER == _LITTLE_ENDIAN)\n#           undef BOOST_ENDIAN_LITTLE_BYTE\n#           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#       if defined(_PDP_ENDIAN) && (_BYTE_ORDER == _PDP_ENDIAN)\n#           undef BOOST_ENDIAN_LITTLE_WORD\n#           define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#   endif\n#endif\n\n/* Built-in byte-swpped big-endian macros.\n */\n#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \\\n    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD\n#   if (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)) || \\\n       (defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)) || \\\n        defined(__ARMEB__) || \\\n        defined(__THUMBEB__) || \\\n        defined(__AARCH64EB__) || \\\n        defined(_MIPSEB) || \\\n        defined(__MIPSEB) || \\\n        defined(__MIPSEB__)\n#       undef BOOST_ENDIAN_BIG_BYTE\n#       define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n/* Built-in byte-swpped little-endian macros.\n */\n#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \\\n    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD\n#   if (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \\\n       (defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)) || \\\n        defined(__ARMEL__) || \\\n        defined(__THUMBEL__) || \\\n        defined(__AARCH64EL__) || \\\n        defined(_MIPSEL) || \\\n        defined(__MIPSEL) || \\\n        defined(__MIPSEL__)\n#       undef BOOST_ENDIAN_LITTLE_BYTE\n#       define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n/* Some architectures are strictly one endianess (as opposed\n * the current common bi-endianess).\n */\n#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \\\n    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD\n#   include <boost/predef/architecture.h>\n#   if BOOST_ARCH_M68K || \\\n        BOOST_ARCH_PARISC || \\\n        BOOST_ARCH_SPARC || \\\n        BOOST_ARCH_SYS370 || \\\n        BOOST_ARCH_SYS390 || \\\n        BOOST_ARCH_Z\n#       undef BOOST_ENDIAN_BIG_BYTE\n#       define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#   if BOOST_ARCH_AMD64 || \\\n        BOOST_ARCH_IA64 || \\\n        BOOST_ARCH_X86 || \\\n        BOOST_ARCH_BLACKFIN\n#       undef BOOST_ENDIAN_LITTLE_BYTE\n#       define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n/* Windows on ARM, if not otherwise detected/specified, is always\n * byte-swaped little-endian.\n */\n#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \\\n    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD\n#   if BOOST_ARCH_ARM\n#       include <boost/predef/os/windows.h>\n#       if BOOST_OS_WINDOWS\n#           undef BOOST_ENDIAN_LITTLE_BYTE\n#           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE\n#       endif\n#   endif\n#endif\n\n#if BOOST_ENDIAN_BIG_BYTE\n#   define BOOST_ENDIAN_BIG_BYTE_AVAILABLE\n#endif\n#if BOOST_ENDIAN_BIG_WORD\n#   define BOOST_ENDIAN_BIG_WORD_BYTE_AVAILABLE\n#endif\n#if BOOST_ENDIAN_LITTLE_BYTE\n#   define BOOST_ENDIAN_LITTLE_BYTE_AVAILABLE\n#endif\n#if BOOST_ENDIAN_LITTLE_WORD\n#   define BOOST_ENDIAN_LITTLE_WORD_BYTE_AVAILABLE\n#endif\n\n#define BOOST_ENDIAN_BIG_BYTE_NAME \"Byte-Swapped Big-Endian\"\n#define BOOST_ENDIAN_BIG_WORD_NAME \"Word-Swapped Big-Endian\"\n#define BOOST_ENDIAN_LITTLE_BYTE_NAME \"Byte-Swapped Little-Endian\"\n#define BOOST_ENDIAN_LITTLE_WORD_NAME \"Word-Swapped Little-Endian\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_BYTE,BOOST_ENDIAN_BIG_BYTE_NAME)\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_WORD,BOOST_ENDIAN_BIG_WORD_NAME)\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_BYTE,BOOST_ENDIAN_LITTLE_BYTE_NAME)\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_WORD,BOOST_ENDIAN_LITTLE_WORD_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/other.h",
    "content": "/*\nCopyright Rene Rivera 2013-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_OTHER_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_OTHER_H\n#define BOOST_PREDEF_OTHER_H\n#endif\n\n#include <boost/predef/other/endian.h>\n/*#include <boost/predef/other/.h>*/\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/platform/mingw.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_COMPILER_MINGW_H\n#define BOOST_PREDEF_COMPILER_MINGW_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n\n/*`\n[heading `BOOST_PLAT_MINGW`]\n\n[@http://en.wikipedia.org/wiki/MinGW MinGW] platform.\nVersion number available as major, minor, and patch.\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`__MINGW32__`] [__predef_detection__]]\n    [[`__MINGW64__`] [__predef_detection__]]\n\n    [[`__MINGW64_VERSION_MAJOR`, `__MINGW64_VERSION_MINOR`] [V.R.0]]\n    [[`__MINGW32_VERSION_MAJOR`, `__MINGW32_VERSION_MINOR`] [V.R.0]]\n    ]\n */\n\n#define BOOST_PLAT_MINGW BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if defined(__MINGW32__) || defined(__MINGW64__)\n#   include <_mingw.h>\n#   if !defined(BOOST_PLAT_MINGW_DETECTION) && (defined(__MINGW64_VERSION_MAJOR) && defined(__MINGW64_VERSION_MINOR))\n#       define BOOST_PLAT_MINGW_DETECTION \\\n            BOOST_VERSION_NUMBER(__MINGW64_VERSION_MAJOR,__MINGW64_VERSION_MINOR,0)\n#   endif\n#   if !defined(BOOST_PLAT_MINGW_DETECTION) && (defined(__MINGW32_VERSION_MAJOR) && defined(__MINGW32_VERSION_MINOR))\n#       define BOOST_PLAT_MINGW_DETECTION \\\n            BOOST_VERSION_NUMBER(__MINGW32_MAJOR_VERSION,__MINGW32_MINOR_VERSION,0)\n#   endif\n#   if !defined(BOOST_PLAT_MINGW_DETECTION)\n#       define BOOST_PLAT_MINGW_DETECTION BOOST_VERSION_NUMBER_AVAILABLE\n#   endif\n#endif\n\n#ifdef BOOST_PLAT_MINGW_DETECTION\n#   define BOOST_PLAT_MINGW_AVAILABLE\n#   if defined(BOOST_PREDEF_DETAIL_PLAT_DETECTED)\n#       define BOOST_PLAT_MINGW_EMULATED BOOST_PLAT_MINGW_DETECTION\n#   else\n#       undef BOOST_PLAT_MINGW\n#       define BOOST_PLAT_MINGW BOOST_PLAT_MINGW_DETECTION\n#   endif\n#   include <boost/predef/detail/platform_detected.h>\n#endif\n\n#define BOOST_PLAT_MINGW_NAME \"MinGW\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW,BOOST_PLAT_MINGW_NAME)\n\n#ifdef BOOST_PLAT_MINGW_EMULATED\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW_EMULATED,BOOST_PLAT_MINGW_NAME)\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/platform/windows_desktop.h",
    "content": "/*\nCopyright (c) Microsoft Corporation 2014\nCopyright Rene Rivera 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_PLAT_WINDOWS_DESKTOP_H\n#define BOOST_PREDEF_PLAT_WINDOWS_DESKTOP_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n#include <boost/predef/os/windows.h>\n\n/*`\n[heading `BOOST_PLAT_WINDOWS_DESKTOP`]\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`!WINAPI_FAMILY`] [__predef_detection__]]\n    [[`WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_PLAT_WINDOWS_DESKTOP BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if BOOST_OS_WINDOWS && \\\n    ( !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) )\n#   undef BOOST_PLAT_WINDOWS_DESKTOP\n#   define BOOST_PLAT_WINDOWS_DESKTOP BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n \n#if BOOST_PLAT_WINDOWS_DESKTOP\n#   define BOOST_PLAT_WINDOWS_DESKTOP_AVAILABLE\n#   include <boost/predef/detail/platform_detected.h>\n#endif\n\n#define BOOST_PLAT_WINDOWS_DESKTOP_NAME \"Windows Desktop\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_DESKTOP,BOOST_PLAT_WINDOWS_DESKTOP_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/platform/windows_phone.h",
    "content": "/*\nCopyright (c) Microsoft Corporation 2014\nCopyright Rene Rivera 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_PLAT_WINDOWS_PHONE_H\n#define BOOST_PREDEF_PLAT_WINDOWS_PHONE_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n#include <boost/predef/os/windows.h>\n\n/*`\n[heading `BOOST_PLAT_WINDOWS_PHONE`]\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_PLAT_WINDOWS_PHONE BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if BOOST_OS_WINDOWS && defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP\n#   undef BOOST_PLAT_WINDOWS_PHONE\n#   define BOOST_PLAT_WINDOWS_PHONE BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n \n#if BOOST_PLAT_WINDOWS_PHONE\n#   define BOOST_PLAT_WINDOWS_PHONE_AVAILABLE\n#   include <boost/predef/detail/platform_detected.h>\n#endif\n\n#define BOOST_PLAT_WINDOWS_PHONE_NAME \"Windows Phone\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_PHONE,BOOST_PLAT_WINDOWS_PHONE_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/platform/windows_runtime.h",
    "content": "/*\nCopyright (c) Microsoft Corporation 2014\nCopyright Rene Rivera 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_PLAT_WINDOWS_RUNTIME_H\n#define BOOST_PREDEF_PLAT_WINDOWS_RUNTIME_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n#include <boost/predef/os/windows.h>\n\n/*`\n[heading `BOOST_PLAT_WINDOWS_RUNTIME`]\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`WINAPI_FAMILY == WINAPI_FAMILY_APP`] [__predef_detection__]]\n    [[`WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_PLAT_WINDOWS_RUNTIME BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if BOOST_OS_WINDOWS && defined(WINAPI_FAMILY) && \\\n    ( WINAPI_FAMILY == WINAPI_FAMILY_APP || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP )\n#   undef BOOST_PLAT_WINDOWS_RUNTIME\n#   define BOOST_PLAT_WINDOWS_RUNTIME BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n \n#if BOOST_PLAT_WINDOWS_RUNTIME\n#   define BOOST_PLAT_WINDOWS_RUNTIME_AVAILABLE\n#   include <boost/predef/detail/platform_detected.h>\n#endif\n\n#define BOOST_PLAT_WINDOWS_RUNTIME_NAME \"Windows Runtime\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_RUNTIME,BOOST_PLAT_WINDOWS_RUNTIME_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/platform/windows_store.h",
    "content": "/*\nCopyright (c) Microsoft Corporation 2014\nCopyright Rene Rivera 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_PLAT_WINDOWS_STORE_H\n#define BOOST_PREDEF_PLAT_WINDOWS_STORE_H\n\n#include <boost/predef/version_number.h>\n#include <boost/predef/make.h>\n#include <boost/predef/os/windows.h>\n\n/*`\n[heading `BOOST_PLAT_WINDOWS_STORE`]\n\n[table\n    [[__predef_symbol__] [__predef_version__]]\n\n    [[`WINAPI_FAMILY == WINAPI_FAMILY_APP`] [__predef_detection__]]\n    ]\n */\n\n#define BOOST_PLAT_WINDOWS_STORE BOOST_VERSION_NUMBER_NOT_AVAILABLE\n\n#if BOOST_OS_WINDOWS && defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_APP\n#   undef BOOST_PLAT_WINDOWS_STORE\n#   define BOOST_PLAT_WINDOWS_STORE BOOST_VERSION_NUMBER_AVAILABLE\n#endif\n \n#if BOOST_PLAT_WINDOWS_STORE\n#   define BOOST_PLAT_WINDOWS_STORE_AVAILABLE\n#   include <boost/predef/detail/platform_detected.h>\n#endif\n\n#define BOOST_PLAT_WINDOWS_STORE_NAME \"Windows Store\"\n\n#endif\n\n#include <boost/predef/detail/test.h>\nBOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_STORE,BOOST_PLAT_WINDOWS_STORE_NAME)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/platform.h",
    "content": "/*\nCopyright Rene Rivera 2013-2015\nCopyright (c) Microsoft Corporation 2014\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_PLATFORM_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_PLATFORM_H\n#define BOOST_PREDEF_PLATFORM_H\n#endif\n\n#include <boost/predef/platform/mingw.h>\n#include <boost/predef/platform/windows_desktop.h>\n#include <boost/predef/platform/windows_store.h>\n#include <boost/predef/platform/windows_phone.h>\n#include <boost/predef/platform/windows_runtime.h>\n/*#include <boost/predef/platform/.h>*/\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/version.h",
    "content": "/*\nCopyright Rene Rivera 2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_VERSION_H\n#define BOOST_PREDEF_VERSION_H\n\n#include <boost/predef/version_number.h>\n\n#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,4,0)\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef/version_number.h",
    "content": "/*\nCopyright Rene Rivera 2005, 2008-2013\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#ifndef BOOST_PREDEF_VERSION_NUMBER_H\n#define BOOST_PREDEF_VERSION_NUMBER_H\n\n/*`\n[heading `BOOST_VERSION_NUMBER`]\n\n``\nBOOST_VERSION_NUMBER(major,minor,patch)\n``\n\nDefines standard version numbers, with these properties:\n\n* Decimal base whole numbers in the range \\[0,1000000000).\n  The number range is designed to allow for a (2,2,5) triplet.\n  Which fits within a 32 bit value.\n* The `major` number can be in the \\[0,99\\] range.\n* The `minor` number can be in the \\[0,99\\] range.\n* The `patch` number can be in the \\[0,99999\\] range.\n* Values can be specified in any base. As the defined value\n  is an constant expression.\n* Value can be directly used in both preprocessor and compiler\n  expressions for comparison to other similarly defined values.\n* The implementation enforces the individual ranges for the\n  major, minor, and patch numbers. And values over the ranges\n  are truncated (modulo).\n\n*/\n#define BOOST_VERSION_NUMBER(major,minor,patch) \\\n    ( (((major)%100)*10000000) + (((minor)%100)*100000) + ((patch)%100000) )\n\n#define BOOST_VERSION_NUMBER_MAX \\\n    BOOST_VERSION_NUMBER(99,99,99999)\n\n#define BOOST_VERSION_NUMBER_ZERO \\\n    BOOST_VERSION_NUMBER(0,0,0)\n\n#define BOOST_VERSION_NUMBER_MIN \\\n    BOOST_VERSION_NUMBER(0,0,1)\n\n#define BOOST_VERSION_NUMBER_AVAILABLE \\\n    BOOST_VERSION_NUMBER_MIN\n\n#define BOOST_VERSION_NUMBER_NOT_AVAILABLE \\\n    BOOST_VERSION_NUMBER_ZERO\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/predef.h",
    "content": "/*\nCopyright Rene Rivera 2008-2015\nDistributed under the Boost Software License, Version 1.0.\n(See accompanying file LICENSE_1_0.txt or copy at\nhttp://www.boost.org/LICENSE_1_0.txt)\n*/\n\n#if !defined(BOOST_PREDEF_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)\n#ifndef BOOST_PREDEF_H\n#define BOOST_PREDEF_H\n#endif\n\n#include <boost/predef/language.h>\n#include <boost/predef/architecture.h>\n#include <boost/predef/compiler.h>\n#include <boost/predef/library.h>\n#include <boost/predef/os.h>\n#include <boost/predef/other.h>\n#include <boost/predef/platform.h>\n#include <boost/predef/hardware.h>\n\n#include <boost/predef/version.h>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/arithmetic/add.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ADD */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ADD(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))\n# else\n#    define BOOST_PP_ADD(x, y) BOOST_PP_ADD_I(x, y)\n#    define BOOST_PP_ADD_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))\n# endif\n#\n# define BOOST_PP_ADD_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I xy\n# else\n#    define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))\n# endif\n#\n# define BOOST_PP_ADD_O_I(x, y) (BOOST_PP_INC(x), BOOST_PP_DEC(y))\n#\n# /* BOOST_PP_ADD_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ADD_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))\n# else\n#    define BOOST_PP_ADD_D(d, x, y) BOOST_PP_ADD_D_I(d, x, y)\n#    define BOOST_PP_ADD_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/arithmetic/dec.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_DEC */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_DEC(x) BOOST_PP_DEC_I(x)\n# else\n#    define BOOST_PP_DEC(x) BOOST_PP_DEC_OO((x))\n#    define BOOST_PP_DEC_OO(par) BOOST_PP_DEC_I ## par\n# endif\n#\n# define BOOST_PP_DEC_I(x) BOOST_PP_DEC_ ## x\n#\n# define BOOST_PP_DEC_0 0\n# define BOOST_PP_DEC_1 0\n# define BOOST_PP_DEC_2 1\n# define BOOST_PP_DEC_3 2\n# define BOOST_PP_DEC_4 3\n# define BOOST_PP_DEC_5 4\n# define BOOST_PP_DEC_6 5\n# define BOOST_PP_DEC_7 6\n# define BOOST_PP_DEC_8 7\n# define BOOST_PP_DEC_9 8\n# define BOOST_PP_DEC_10 9\n# define BOOST_PP_DEC_11 10\n# define BOOST_PP_DEC_12 11\n# define BOOST_PP_DEC_13 12\n# define BOOST_PP_DEC_14 13\n# define BOOST_PP_DEC_15 14\n# define BOOST_PP_DEC_16 15\n# define BOOST_PP_DEC_17 16\n# define BOOST_PP_DEC_18 17\n# define BOOST_PP_DEC_19 18\n# define BOOST_PP_DEC_20 19\n# define BOOST_PP_DEC_21 20\n# define BOOST_PP_DEC_22 21\n# define BOOST_PP_DEC_23 22\n# define BOOST_PP_DEC_24 23\n# define BOOST_PP_DEC_25 24\n# define BOOST_PP_DEC_26 25\n# define BOOST_PP_DEC_27 26\n# define BOOST_PP_DEC_28 27\n# define BOOST_PP_DEC_29 28\n# define BOOST_PP_DEC_30 29\n# define BOOST_PP_DEC_31 30\n# define BOOST_PP_DEC_32 31\n# define BOOST_PP_DEC_33 32\n# define BOOST_PP_DEC_34 33\n# define BOOST_PP_DEC_35 34\n# define BOOST_PP_DEC_36 35\n# define BOOST_PP_DEC_37 36\n# define BOOST_PP_DEC_38 37\n# define BOOST_PP_DEC_39 38\n# define BOOST_PP_DEC_40 39\n# define BOOST_PP_DEC_41 40\n# define BOOST_PP_DEC_42 41\n# define BOOST_PP_DEC_43 42\n# define BOOST_PP_DEC_44 43\n# define BOOST_PP_DEC_45 44\n# define BOOST_PP_DEC_46 45\n# define BOOST_PP_DEC_47 46\n# define BOOST_PP_DEC_48 47\n# define BOOST_PP_DEC_49 48\n# define BOOST_PP_DEC_50 49\n# define BOOST_PP_DEC_51 50\n# define BOOST_PP_DEC_52 51\n# define BOOST_PP_DEC_53 52\n# define BOOST_PP_DEC_54 53\n# define BOOST_PP_DEC_55 54\n# define BOOST_PP_DEC_56 55\n# define BOOST_PP_DEC_57 56\n# define BOOST_PP_DEC_58 57\n# define BOOST_PP_DEC_59 58\n# define BOOST_PP_DEC_60 59\n# define BOOST_PP_DEC_61 60\n# define BOOST_PP_DEC_62 61\n# define BOOST_PP_DEC_63 62\n# define BOOST_PP_DEC_64 63\n# define BOOST_PP_DEC_65 64\n# define BOOST_PP_DEC_66 65\n# define BOOST_PP_DEC_67 66\n# define BOOST_PP_DEC_68 67\n# define BOOST_PP_DEC_69 68\n# define BOOST_PP_DEC_70 69\n# define BOOST_PP_DEC_71 70\n# define BOOST_PP_DEC_72 71\n# define BOOST_PP_DEC_73 72\n# define BOOST_PP_DEC_74 73\n# define BOOST_PP_DEC_75 74\n# define BOOST_PP_DEC_76 75\n# define BOOST_PP_DEC_77 76\n# define BOOST_PP_DEC_78 77\n# define BOOST_PP_DEC_79 78\n# define BOOST_PP_DEC_80 79\n# define BOOST_PP_DEC_81 80\n# define BOOST_PP_DEC_82 81\n# define BOOST_PP_DEC_83 82\n# define BOOST_PP_DEC_84 83\n# define BOOST_PP_DEC_85 84\n# define BOOST_PP_DEC_86 85\n# define BOOST_PP_DEC_87 86\n# define BOOST_PP_DEC_88 87\n# define BOOST_PP_DEC_89 88\n# define BOOST_PP_DEC_90 89\n# define BOOST_PP_DEC_91 90\n# define BOOST_PP_DEC_92 91\n# define BOOST_PP_DEC_93 92\n# define BOOST_PP_DEC_94 93\n# define BOOST_PP_DEC_95 94\n# define BOOST_PP_DEC_96 95\n# define BOOST_PP_DEC_97 96\n# define BOOST_PP_DEC_98 97\n# define BOOST_PP_DEC_99 98\n# define BOOST_PP_DEC_100 99\n# define BOOST_PP_DEC_101 100\n# define BOOST_PP_DEC_102 101\n# define BOOST_PP_DEC_103 102\n# define BOOST_PP_DEC_104 103\n# define BOOST_PP_DEC_105 104\n# define BOOST_PP_DEC_106 105\n# define BOOST_PP_DEC_107 106\n# define BOOST_PP_DEC_108 107\n# define BOOST_PP_DEC_109 108\n# define BOOST_PP_DEC_110 109\n# define BOOST_PP_DEC_111 110\n# define BOOST_PP_DEC_112 111\n# define BOOST_PP_DEC_113 112\n# define BOOST_PP_DEC_114 113\n# define BOOST_PP_DEC_115 114\n# define BOOST_PP_DEC_116 115\n# define BOOST_PP_DEC_117 116\n# define BOOST_PP_DEC_118 117\n# define BOOST_PP_DEC_119 118\n# define BOOST_PP_DEC_120 119\n# define BOOST_PP_DEC_121 120\n# define BOOST_PP_DEC_122 121\n# define BOOST_PP_DEC_123 122\n# define BOOST_PP_DEC_124 123\n# define BOOST_PP_DEC_125 124\n# define BOOST_PP_DEC_126 125\n# define BOOST_PP_DEC_127 126\n# define BOOST_PP_DEC_128 127\n# define BOOST_PP_DEC_129 128\n# define BOOST_PP_DEC_130 129\n# define BOOST_PP_DEC_131 130\n# define BOOST_PP_DEC_132 131\n# define BOOST_PP_DEC_133 132\n# define BOOST_PP_DEC_134 133\n# define BOOST_PP_DEC_135 134\n# define BOOST_PP_DEC_136 135\n# define BOOST_PP_DEC_137 136\n# define BOOST_PP_DEC_138 137\n# define BOOST_PP_DEC_139 138\n# define BOOST_PP_DEC_140 139\n# define BOOST_PP_DEC_141 140\n# define BOOST_PP_DEC_142 141\n# define BOOST_PP_DEC_143 142\n# define BOOST_PP_DEC_144 143\n# define BOOST_PP_DEC_145 144\n# define BOOST_PP_DEC_146 145\n# define BOOST_PP_DEC_147 146\n# define BOOST_PP_DEC_148 147\n# define BOOST_PP_DEC_149 148\n# define BOOST_PP_DEC_150 149\n# define BOOST_PP_DEC_151 150\n# define BOOST_PP_DEC_152 151\n# define BOOST_PP_DEC_153 152\n# define BOOST_PP_DEC_154 153\n# define BOOST_PP_DEC_155 154\n# define BOOST_PP_DEC_156 155\n# define BOOST_PP_DEC_157 156\n# define BOOST_PP_DEC_158 157\n# define BOOST_PP_DEC_159 158\n# define BOOST_PP_DEC_160 159\n# define BOOST_PP_DEC_161 160\n# define BOOST_PP_DEC_162 161\n# define BOOST_PP_DEC_163 162\n# define BOOST_PP_DEC_164 163\n# define BOOST_PP_DEC_165 164\n# define BOOST_PP_DEC_166 165\n# define BOOST_PP_DEC_167 166\n# define BOOST_PP_DEC_168 167\n# define BOOST_PP_DEC_169 168\n# define BOOST_PP_DEC_170 169\n# define BOOST_PP_DEC_171 170\n# define BOOST_PP_DEC_172 171\n# define BOOST_PP_DEC_173 172\n# define BOOST_PP_DEC_174 173\n# define BOOST_PP_DEC_175 174\n# define BOOST_PP_DEC_176 175\n# define BOOST_PP_DEC_177 176\n# define BOOST_PP_DEC_178 177\n# define BOOST_PP_DEC_179 178\n# define BOOST_PP_DEC_180 179\n# define BOOST_PP_DEC_181 180\n# define BOOST_PP_DEC_182 181\n# define BOOST_PP_DEC_183 182\n# define BOOST_PP_DEC_184 183\n# define BOOST_PP_DEC_185 184\n# define BOOST_PP_DEC_186 185\n# define BOOST_PP_DEC_187 186\n# define BOOST_PP_DEC_188 187\n# define BOOST_PP_DEC_189 188\n# define BOOST_PP_DEC_190 189\n# define BOOST_PP_DEC_191 190\n# define BOOST_PP_DEC_192 191\n# define BOOST_PP_DEC_193 192\n# define BOOST_PP_DEC_194 193\n# define BOOST_PP_DEC_195 194\n# define BOOST_PP_DEC_196 195\n# define BOOST_PP_DEC_197 196\n# define BOOST_PP_DEC_198 197\n# define BOOST_PP_DEC_199 198\n# define BOOST_PP_DEC_200 199\n# define BOOST_PP_DEC_201 200\n# define BOOST_PP_DEC_202 201\n# define BOOST_PP_DEC_203 202\n# define BOOST_PP_DEC_204 203\n# define BOOST_PP_DEC_205 204\n# define BOOST_PP_DEC_206 205\n# define BOOST_PP_DEC_207 206\n# define BOOST_PP_DEC_208 207\n# define BOOST_PP_DEC_209 208\n# define BOOST_PP_DEC_210 209\n# define BOOST_PP_DEC_211 210\n# define BOOST_PP_DEC_212 211\n# define BOOST_PP_DEC_213 212\n# define BOOST_PP_DEC_214 213\n# define BOOST_PP_DEC_215 214\n# define BOOST_PP_DEC_216 215\n# define BOOST_PP_DEC_217 216\n# define BOOST_PP_DEC_218 217\n# define BOOST_PP_DEC_219 218\n# define BOOST_PP_DEC_220 219\n# define BOOST_PP_DEC_221 220\n# define BOOST_PP_DEC_222 221\n# define BOOST_PP_DEC_223 222\n# define BOOST_PP_DEC_224 223\n# define BOOST_PP_DEC_225 224\n# define BOOST_PP_DEC_226 225\n# define BOOST_PP_DEC_227 226\n# define BOOST_PP_DEC_228 227\n# define BOOST_PP_DEC_229 228\n# define BOOST_PP_DEC_230 229\n# define BOOST_PP_DEC_231 230\n# define BOOST_PP_DEC_232 231\n# define BOOST_PP_DEC_233 232\n# define BOOST_PP_DEC_234 233\n# define BOOST_PP_DEC_235 234\n# define BOOST_PP_DEC_236 235\n# define BOOST_PP_DEC_237 236\n# define BOOST_PP_DEC_238 237\n# define BOOST_PP_DEC_239 238\n# define BOOST_PP_DEC_240 239\n# define BOOST_PP_DEC_241 240\n# define BOOST_PP_DEC_242 241\n# define BOOST_PP_DEC_243 242\n# define BOOST_PP_DEC_244 243\n# define BOOST_PP_DEC_245 244\n# define BOOST_PP_DEC_246 245\n# define BOOST_PP_DEC_247 246\n# define BOOST_PP_DEC_248 247\n# define BOOST_PP_DEC_249 248\n# define BOOST_PP_DEC_250 249\n# define BOOST_PP_DEC_251 250\n# define BOOST_PP_DEC_252 251\n# define BOOST_PP_DEC_253 252\n# define BOOST_PP_DEC_254 253\n# define BOOST_PP_DEC_255 254\n# define BOOST_PP_DEC_256 255\n# define BOOST_PP_DEC_257 256\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/arithmetic/detail/div_base.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DETAIL_DIV_BASE_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_DETAIL_DIV_BASE_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/arithmetic/sub.hpp>\n# include <boost/preprocessor/comparison/less_equal.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_DIV_BASE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_DIV_BASE(x, y) BOOST_PP_WHILE(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))\n# else\n#    define BOOST_PP_DIV_BASE(x, y) BOOST_PP_DIV_BASE_I(x, y)\n#    define BOOST_PP_DIV_BASE_I(x, y) BOOST_PP_WHILE(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_DIV_BASE_P(d, rxy) BOOST_PP_DIV_BASE_P_IM(d, BOOST_PP_TUPLE_REM_3 rxy)\n#    define BOOST_PP_DIV_BASE_P_IM(d, im) BOOST_PP_DIV_BASE_P_I(d, im)\n# else\n#    define BOOST_PP_DIV_BASE_P(d, rxy) BOOST_PP_DIV_BASE_P_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))\n# endif\n#\n# define BOOST_PP_DIV_BASE_P_I(d, r, x, y) BOOST_PP_LESS_EQUAL_D(d, y, x)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_DIV_BASE_O(d, rxy) BOOST_PP_DIV_BASE_O_IM(d, BOOST_PP_TUPLE_REM_3 rxy)\n#    define BOOST_PP_DIV_BASE_O_IM(d, im) BOOST_PP_DIV_BASE_O_I(d, im)\n# else\n#    define BOOST_PP_DIV_BASE_O(d, rxy) BOOST_PP_DIV_BASE_O_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))\n# endif\n#\n# define BOOST_PP_DIV_BASE_O_I(d, r, x, y) (BOOST_PP_INC(r), BOOST_PP_SUB_D(d, x, y), y)\n#\n# /* BOOST_PP_DIV_BASE_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_DIV_BASE_D(d, x, y) BOOST_PP_WHILE_ ## d(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))\n# else\n#    define BOOST_PP_DIV_BASE_D(d, x, y) BOOST_PP_DIV_BASE_D_I(d, x, y)\n#    define BOOST_PP_DIV_BASE_D_I(d, x, y) BOOST_PP_WHILE_ ## d(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/arithmetic/div.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DIV_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_DIV_HPP\n#\n# include <boost/preprocessor/arithmetic/detail/div_base.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_DIV */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_DIV(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE(x, y))\n# else\n#    define BOOST_PP_DIV(x, y) BOOST_PP_DIV_I(x, y)\n#    define BOOST_PP_DIV_I(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE(x, y))\n# endif\n#\n# /* BOOST_PP_DIV_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_DIV_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE_D(d, x, y))\n# else\n#    define BOOST_PP_DIV_D(d, x, y) BOOST_PP_DIV_D_I(d, x, y)\n#    define BOOST_PP_DIV_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE_D(d, x, y))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/arithmetic/inc.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_INC */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_INC(x) BOOST_PP_INC_I(x)\n# else\n#    define BOOST_PP_INC(x) BOOST_PP_INC_OO((x))\n#    define BOOST_PP_INC_OO(par) BOOST_PP_INC_I ## par\n# endif\n#\n# define BOOST_PP_INC_I(x) BOOST_PP_INC_ ## x\n#\n# define BOOST_PP_INC_0 1\n# define BOOST_PP_INC_1 2\n# define BOOST_PP_INC_2 3\n# define BOOST_PP_INC_3 4\n# define BOOST_PP_INC_4 5\n# define BOOST_PP_INC_5 6\n# define BOOST_PP_INC_6 7\n# define BOOST_PP_INC_7 8\n# define BOOST_PP_INC_8 9\n# define BOOST_PP_INC_9 10\n# define BOOST_PP_INC_10 11\n# define BOOST_PP_INC_11 12\n# define BOOST_PP_INC_12 13\n# define BOOST_PP_INC_13 14\n# define BOOST_PP_INC_14 15\n# define BOOST_PP_INC_15 16\n# define BOOST_PP_INC_16 17\n# define BOOST_PP_INC_17 18\n# define BOOST_PP_INC_18 19\n# define BOOST_PP_INC_19 20\n# define BOOST_PP_INC_20 21\n# define BOOST_PP_INC_21 22\n# define BOOST_PP_INC_22 23\n# define BOOST_PP_INC_23 24\n# define BOOST_PP_INC_24 25\n# define BOOST_PP_INC_25 26\n# define BOOST_PP_INC_26 27\n# define BOOST_PP_INC_27 28\n# define BOOST_PP_INC_28 29\n# define BOOST_PP_INC_29 30\n# define BOOST_PP_INC_30 31\n# define BOOST_PP_INC_31 32\n# define BOOST_PP_INC_32 33\n# define BOOST_PP_INC_33 34\n# define BOOST_PP_INC_34 35\n# define BOOST_PP_INC_35 36\n# define BOOST_PP_INC_36 37\n# define BOOST_PP_INC_37 38\n# define BOOST_PP_INC_38 39\n# define BOOST_PP_INC_39 40\n# define BOOST_PP_INC_40 41\n# define BOOST_PP_INC_41 42\n# define BOOST_PP_INC_42 43\n# define BOOST_PP_INC_43 44\n# define BOOST_PP_INC_44 45\n# define BOOST_PP_INC_45 46\n# define BOOST_PP_INC_46 47\n# define BOOST_PP_INC_47 48\n# define BOOST_PP_INC_48 49\n# define BOOST_PP_INC_49 50\n# define BOOST_PP_INC_50 51\n# define BOOST_PP_INC_51 52\n# define BOOST_PP_INC_52 53\n# define BOOST_PP_INC_53 54\n# define BOOST_PP_INC_54 55\n# define BOOST_PP_INC_55 56\n# define BOOST_PP_INC_56 57\n# define BOOST_PP_INC_57 58\n# define BOOST_PP_INC_58 59\n# define BOOST_PP_INC_59 60\n# define BOOST_PP_INC_60 61\n# define BOOST_PP_INC_61 62\n# define BOOST_PP_INC_62 63\n# define BOOST_PP_INC_63 64\n# define BOOST_PP_INC_64 65\n# define BOOST_PP_INC_65 66\n# define BOOST_PP_INC_66 67\n# define BOOST_PP_INC_67 68\n# define BOOST_PP_INC_68 69\n# define BOOST_PP_INC_69 70\n# define BOOST_PP_INC_70 71\n# define BOOST_PP_INC_71 72\n# define BOOST_PP_INC_72 73\n# define BOOST_PP_INC_73 74\n# define BOOST_PP_INC_74 75\n# define BOOST_PP_INC_75 76\n# define BOOST_PP_INC_76 77\n# define BOOST_PP_INC_77 78\n# define BOOST_PP_INC_78 79\n# define BOOST_PP_INC_79 80\n# define BOOST_PP_INC_80 81\n# define BOOST_PP_INC_81 82\n# define BOOST_PP_INC_82 83\n# define BOOST_PP_INC_83 84\n# define BOOST_PP_INC_84 85\n# define BOOST_PP_INC_85 86\n# define BOOST_PP_INC_86 87\n# define BOOST_PP_INC_87 88\n# define BOOST_PP_INC_88 89\n# define BOOST_PP_INC_89 90\n# define BOOST_PP_INC_90 91\n# define BOOST_PP_INC_91 92\n# define BOOST_PP_INC_92 93\n# define BOOST_PP_INC_93 94\n# define BOOST_PP_INC_94 95\n# define BOOST_PP_INC_95 96\n# define BOOST_PP_INC_96 97\n# define BOOST_PP_INC_97 98\n# define BOOST_PP_INC_98 99\n# define BOOST_PP_INC_99 100\n# define BOOST_PP_INC_100 101\n# define BOOST_PP_INC_101 102\n# define BOOST_PP_INC_102 103\n# define BOOST_PP_INC_103 104\n# define BOOST_PP_INC_104 105\n# define BOOST_PP_INC_105 106\n# define BOOST_PP_INC_106 107\n# define BOOST_PP_INC_107 108\n# define BOOST_PP_INC_108 109\n# define BOOST_PP_INC_109 110\n# define BOOST_PP_INC_110 111\n# define BOOST_PP_INC_111 112\n# define BOOST_PP_INC_112 113\n# define BOOST_PP_INC_113 114\n# define BOOST_PP_INC_114 115\n# define BOOST_PP_INC_115 116\n# define BOOST_PP_INC_116 117\n# define BOOST_PP_INC_117 118\n# define BOOST_PP_INC_118 119\n# define BOOST_PP_INC_119 120\n# define BOOST_PP_INC_120 121\n# define BOOST_PP_INC_121 122\n# define BOOST_PP_INC_122 123\n# define BOOST_PP_INC_123 124\n# define BOOST_PP_INC_124 125\n# define BOOST_PP_INC_125 126\n# define BOOST_PP_INC_126 127\n# define BOOST_PP_INC_127 128\n# define BOOST_PP_INC_128 129\n# define BOOST_PP_INC_129 130\n# define BOOST_PP_INC_130 131\n# define BOOST_PP_INC_131 132\n# define BOOST_PP_INC_132 133\n# define BOOST_PP_INC_133 134\n# define BOOST_PP_INC_134 135\n# define BOOST_PP_INC_135 136\n# define BOOST_PP_INC_136 137\n# define BOOST_PP_INC_137 138\n# define BOOST_PP_INC_138 139\n# define BOOST_PP_INC_139 140\n# define BOOST_PP_INC_140 141\n# define BOOST_PP_INC_141 142\n# define BOOST_PP_INC_142 143\n# define BOOST_PP_INC_143 144\n# define BOOST_PP_INC_144 145\n# define BOOST_PP_INC_145 146\n# define BOOST_PP_INC_146 147\n# define BOOST_PP_INC_147 148\n# define BOOST_PP_INC_148 149\n# define BOOST_PP_INC_149 150\n# define BOOST_PP_INC_150 151\n# define BOOST_PP_INC_151 152\n# define BOOST_PP_INC_152 153\n# define BOOST_PP_INC_153 154\n# define BOOST_PP_INC_154 155\n# define BOOST_PP_INC_155 156\n# define BOOST_PP_INC_156 157\n# define BOOST_PP_INC_157 158\n# define BOOST_PP_INC_158 159\n# define BOOST_PP_INC_159 160\n# define BOOST_PP_INC_160 161\n# define BOOST_PP_INC_161 162\n# define BOOST_PP_INC_162 163\n# define BOOST_PP_INC_163 164\n# define BOOST_PP_INC_164 165\n# define BOOST_PP_INC_165 166\n# define BOOST_PP_INC_166 167\n# define BOOST_PP_INC_167 168\n# define BOOST_PP_INC_168 169\n# define BOOST_PP_INC_169 170\n# define BOOST_PP_INC_170 171\n# define BOOST_PP_INC_171 172\n# define BOOST_PP_INC_172 173\n# define BOOST_PP_INC_173 174\n# define BOOST_PP_INC_174 175\n# define BOOST_PP_INC_175 176\n# define BOOST_PP_INC_176 177\n# define BOOST_PP_INC_177 178\n# define BOOST_PP_INC_178 179\n# define BOOST_PP_INC_179 180\n# define BOOST_PP_INC_180 181\n# define BOOST_PP_INC_181 182\n# define BOOST_PP_INC_182 183\n# define BOOST_PP_INC_183 184\n# define BOOST_PP_INC_184 185\n# define BOOST_PP_INC_185 186\n# define BOOST_PP_INC_186 187\n# define BOOST_PP_INC_187 188\n# define BOOST_PP_INC_188 189\n# define BOOST_PP_INC_189 190\n# define BOOST_PP_INC_190 191\n# define BOOST_PP_INC_191 192\n# define BOOST_PP_INC_192 193\n# define BOOST_PP_INC_193 194\n# define BOOST_PP_INC_194 195\n# define BOOST_PP_INC_195 196\n# define BOOST_PP_INC_196 197\n# define BOOST_PP_INC_197 198\n# define BOOST_PP_INC_198 199\n# define BOOST_PP_INC_199 200\n# define BOOST_PP_INC_200 201\n# define BOOST_PP_INC_201 202\n# define BOOST_PP_INC_202 203\n# define BOOST_PP_INC_203 204\n# define BOOST_PP_INC_204 205\n# define BOOST_PP_INC_205 206\n# define BOOST_PP_INC_206 207\n# define BOOST_PP_INC_207 208\n# define BOOST_PP_INC_208 209\n# define BOOST_PP_INC_209 210\n# define BOOST_PP_INC_210 211\n# define BOOST_PP_INC_211 212\n# define BOOST_PP_INC_212 213\n# define BOOST_PP_INC_213 214\n# define BOOST_PP_INC_214 215\n# define BOOST_PP_INC_215 216\n# define BOOST_PP_INC_216 217\n# define BOOST_PP_INC_217 218\n# define BOOST_PP_INC_218 219\n# define BOOST_PP_INC_219 220\n# define BOOST_PP_INC_220 221\n# define BOOST_PP_INC_221 222\n# define BOOST_PP_INC_222 223\n# define BOOST_PP_INC_223 224\n# define BOOST_PP_INC_224 225\n# define BOOST_PP_INC_225 226\n# define BOOST_PP_INC_226 227\n# define BOOST_PP_INC_227 228\n# define BOOST_PP_INC_228 229\n# define BOOST_PP_INC_229 230\n# define BOOST_PP_INC_230 231\n# define BOOST_PP_INC_231 232\n# define BOOST_PP_INC_232 233\n# define BOOST_PP_INC_233 234\n# define BOOST_PP_INC_234 235\n# define BOOST_PP_INC_235 236\n# define BOOST_PP_INC_236 237\n# define BOOST_PP_INC_237 238\n# define BOOST_PP_INC_238 239\n# define BOOST_PP_INC_239 240\n# define BOOST_PP_INC_240 241\n# define BOOST_PP_INC_241 242\n# define BOOST_PP_INC_242 243\n# define BOOST_PP_INC_243 244\n# define BOOST_PP_INC_244 245\n# define BOOST_PP_INC_245 246\n# define BOOST_PP_INC_246 247\n# define BOOST_PP_INC_247 248\n# define BOOST_PP_INC_248 249\n# define BOOST_PP_INC_249 250\n# define BOOST_PP_INC_250 251\n# define BOOST_PP_INC_251 252\n# define BOOST_PP_INC_252 253\n# define BOOST_PP_INC_253 254\n# define BOOST_PP_INC_254 255\n# define BOOST_PP_INC_255 256\n# define BOOST_PP_INC_256 256\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/arithmetic/mod.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_MOD_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_MOD_HPP\n#\n# include <boost/preprocessor/arithmetic/detail/div_base.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_MOD */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MOD(x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE(x, y))\n# else\n#    define BOOST_PP_MOD(x, y) BOOST_PP_MOD_I(x, y)\n#    define BOOST_PP_MOD_I(x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE(x, y))\n# endif\n#\n# /* BOOST_PP_MOD_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MOD_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE_D(d, x, y))\n# else\n#    define BOOST_PP_MOD_D(d, x, y) BOOST_PP_MOD_D_I(d, x, y)\n#    define BOOST_PP_MOD_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE_D(d, x, y))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/arithmetic/mul.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_MUL_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_MUL_HPP\n#\n# include <boost/preprocessor/arithmetic/add.hpp>\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_MUL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MUL(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y)))\n# else\n#    define BOOST_PP_MUL(x, y) BOOST_PP_MUL_I(x, y)\n#    define BOOST_PP_MUL_I(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y)))\n# endif\n#\n# define BOOST_PP_MUL_P(d, rxy) BOOST_PP_TUPLE_ELEM(3, 2, rxy)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_MUL_O(d, rxy) BOOST_PP_MUL_O_IM(d, BOOST_PP_TUPLE_REM_3 rxy)\n#    define BOOST_PP_MUL_O_IM(d, im) BOOST_PP_MUL_O_I(d, im)\n# else\n#    define BOOST_PP_MUL_O(d, rxy) BOOST_PP_MUL_O_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))\n# endif\n#\n# define BOOST_PP_MUL_O_I(d, r, x, y) (BOOST_PP_ADD_D(d, r, x), x, BOOST_PP_DEC(y))\n#\n# /* BOOST_PP_MUL_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MUL_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y)))\n# else\n#    define BOOST_PP_MUL_D(d, x, y) BOOST_PP_MUL_D_I(d, x, y)\n#    define BOOST_PP_MUL_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/arithmetic/sub.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_SUB */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SUB(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))\n# else\n#    define BOOST_PP_SUB(x, y) BOOST_PP_SUB_I(x, y)\n#    define BOOST_PP_SUB_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))\n# endif\n#\n# define BOOST_PP_SUB_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I xy\n# else\n#    define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))\n# endif\n#\n# define BOOST_PP_SUB_O_I(x, y) (BOOST_PP_DEC(x), BOOST_PP_DEC(y))\n#\n# /* BOOST_PP_SUB_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SUB_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))\n# else\n#    define BOOST_PP_SUB_D(d, x, y) BOOST_PP_SUB_D_I(d, x, y)\n#    define BOOST_PP_SUB_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/arithmetic.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_HPP\n#\n# include <boost/preprocessor/arithmetic/add.hpp>\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/div.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/arithmetic/mod.hpp>\n# include <boost/preprocessor/arithmetic/mul.hpp>\n# include <boost/preprocessor/arithmetic/sub.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/data.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_DATA_HPP\n# define BOOST_PREPROCESSOR_ARRAY_DATA_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ARRAY_DATA */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_DATA(array) BOOST_PP_TUPLE_ELEM(2, 1, array)\n# else\n#    define BOOST_PP_ARRAY_DATA(array) BOOST_PP_ARRAY_DATA_I(array)\n#    define BOOST_PP_ARRAY_DATA_I(array) BOOST_PP_ARRAY_DATA_II array\n#    define BOOST_PP_ARRAY_DATA_II(size, data) data\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/detail/get_data.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2014.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_DETAIL_GET_DATA_HPP\n# define BOOST_PREPROCESSOR_ARRAY_DETAIL_GET_DATA_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/facilities/is_1.hpp>\n#\n# /* BOOST_PP_ARRAY_DETAIL_GET_DATA */\n#\n# define BOOST_PP_ARRAY_DETAIL_GET_DATA_NONE(size, data)\n\n# if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400)\n# \t if BOOST_PP_VARIADICS_MSVC\n# \t\tdefine BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_DEFAULT(size, data) BOOST_PP_TUPLE_REM(size) data\n# \t\tdefine BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_CAT(size, data) BOOST_PP_TUPLE_REM_CAT(size) data\n# \t\tdefine BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) \\\n\t\t\tBOOST_PP_IIF \\\n\t\t\t\t( \\\n\t\t\t\tBOOST_PP_IS_1(size), \\\n\t\t\t\tBOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_CAT, \\\n\t\t\t\tBOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_DEFAULT \\\n\t\t\t\t) \\\n\t\t\t(size,data) \\\n/**/\n#    else\n# \t\tdefine BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) BOOST_PP_TUPLE_REM(size) data\n#    endif\n# else\n# \t define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) BOOST_PP_TUPLE_REM(size) data\n# endif\n\n# define BOOST_PP_ARRAY_DETAIL_GET_DATA(size, data) \\\n\tBOOST_PP_IF \\\n\t\t( \\\n\t\tsize, \\\n\t\tBOOST_PP_ARRAY_DETAIL_GET_DATA_ANY, \\\n\t\tBOOST_PP_ARRAY_DETAIL_GET_DATA_NONE \\\n\t\t) \\\n\t(size,data) \\\n/**/\n#\n# endif /* BOOST_PREPROCESSOR_ARRAY_DETAIL_GET_DATA_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/elem.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_ELEM_HPP\n# define BOOST_PREPROCESSOR_ARRAY_ELEM_HPP\n#\n# include <boost/preprocessor/array/data.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ARRAY_ELEM */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array))\n# else\n#    define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_ARRAY_ELEM_I(i, array)\n#    define BOOST_PP_ARRAY_ELEM_I(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/enum.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_ENUM_HPP\n# define BOOST_PREPROCESSOR_ARRAY_ENUM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_ARRAY_ENUM */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_ARRAY_ENUM(array) BOOST_PP_ARRAY_ENUM_I(BOOST_PP_TUPLE_REM_CTOR, array)\n#    define BOOST_PP_ARRAY_ENUM_I(m, args) BOOST_PP_ARRAY_ENUM_II(m, args)\n#    define BOOST_PP_ARRAY_ENUM_II(m, args) BOOST_PP_CAT(m ## args,)\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_ARRAY_ENUM(array) BOOST_PP_ARRAY_ENUM_I(array)\n#    define BOOST_PP_ARRAY_ENUM_I(array) BOOST_PP_TUPLE_REM_CTOR ## array\n# else\n#    define BOOST_PP_ARRAY_ENUM(array) BOOST_PP_TUPLE_REM_CTOR array\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/insert.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_INSERT_HPP\n# define BOOST_PREPROCESSOR_ARRAY_INSERT_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/array/elem.hpp>\n# include <boost/preprocessor/array/push_back.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/comparison/not_equal.hpp>\n# include <boost/preprocessor/control/deduce_d.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ARRAY_INSERT */\n#\n# define BOOST_PP_ARRAY_INSERT(array, i, elem) BOOST_PP_ARRAY_INSERT_I(BOOST_PP_DEDUCE_D(), array, i, elem)\n# define BOOST_PP_ARRAY_INSERT_I(d, array, i, elem) BOOST_PP_ARRAY_INSERT_D(d, array, i, elem)\n#\n# /* BOOST_PP_ARRAY_INSERT_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_INSERT_D(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_INSERT_P, BOOST_PP_ARRAY_INSERT_O, (0, i, elem, (0, ()), array)))\n# else\n#    define BOOST_PP_ARRAY_INSERT_D(d, array, i, elem) BOOST_PP_ARRAY_INSERT_D_I(d, array, i, elem)\n#    define BOOST_PP_ARRAY_INSERT_D_I(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_INSERT_P, BOOST_PP_ARRAY_INSERT_O, (0, i, elem, (0, ()), array)))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ARRAY_INSERT_P(d, state) BOOST_PP_ARRAY_INSERT_P_I state\n# else\n#    define BOOST_PP_ARRAY_INSERT_P(d, state) BOOST_PP_ARRAY_INSERT_P_I(nil, nil, nil, BOOST_PP_TUPLE_ELEM(5, 3, state), BOOST_PP_TUPLE_ELEM(5, 4, state))\n# endif\n#\n# define BOOST_PP_ARRAY_INSERT_P_I(_i, _ii, _iii, res, arr) BOOST_PP_NOT_EQUAL(BOOST_PP_ARRAY_SIZE(res), BOOST_PP_INC(BOOST_PP_ARRAY_SIZE(arr)))\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ARRAY_INSERT_O(d, state) BOOST_PP_ARRAY_INSERT_O_I state\n# else\n#    define BOOST_PP_ARRAY_INSERT_O(d, state) BOOST_PP_ARRAY_INSERT_O_I(BOOST_PP_TUPLE_ELEM(5, 0, state), BOOST_PP_TUPLE_ELEM(5, 1, state), BOOST_PP_TUPLE_ELEM(5, 2, state), BOOST_PP_TUPLE_ELEM(5, 3, state), BOOST_PP_TUPLE_ELEM(5, 4, state))\n# endif\n#\n# define BOOST_PP_ARRAY_INSERT_O_I(n, i, elem, res, arr) (BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(BOOST_PP_ARRAY_SIZE(res), i), BOOST_PP_INC(n), n), i, elem, BOOST_PP_ARRAY_PUSH_BACK(res, BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(BOOST_PP_ARRAY_SIZE(res), i), BOOST_PP_ARRAY_ELEM(n, arr), elem)), arr)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/pop_back.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_POP_BACK_HPP\n# define BOOST_PREPROCESSOR_ARRAY_POP_BACK_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/array/elem.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/repetition/enum.hpp>\n# include <boost/preprocessor/repetition/deduce_z.hpp>\n#\n# /* BOOST_PP_ARRAY_POP_BACK */\n#\n# define BOOST_PP_ARRAY_POP_BACK(array) BOOST_PP_ARRAY_POP_BACK_Z(BOOST_PP_DEDUCE_Z(), array)\n#\n# /* BOOST_PP_ARRAY_POP_BACK_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_POP_BACK_Z(z, array) BOOST_PP_ARRAY_POP_BACK_I(z, BOOST_PP_ARRAY_SIZE(array), array)\n# else\n#    define BOOST_PP_ARRAY_POP_BACK_Z(z, array) BOOST_PP_ARRAY_POP_BACK_Z_D(z, array)\n#    define BOOST_PP_ARRAY_POP_BACK_Z_D(z, array) BOOST_PP_ARRAY_POP_BACK_I(z, BOOST_PP_ARRAY_SIZE(array), array)\n# endif\n#\n# define BOOST_PP_ARRAY_POP_BACK_I(z, size, array) (BOOST_PP_DEC(size), (BOOST_PP_ENUM_ ## z(BOOST_PP_DEC(size), BOOST_PP_ARRAY_POP_BACK_M, array)))\n# define BOOST_PP_ARRAY_POP_BACK_M(z, n, data) BOOST_PP_ARRAY_ELEM(n, data)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/pop_front.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_POP_FRONT_HPP\n# define BOOST_PREPROCESSOR_ARRAY_POP_FRONT_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/array/elem.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/repetition/enum.hpp>\n# include <boost/preprocessor/repetition/deduce_z.hpp>\n#\n# /* BOOST_PP_ARRAY_POP_FRONT */\n#\n# define BOOST_PP_ARRAY_POP_FRONT(array) BOOST_PP_ARRAY_POP_FRONT_Z(BOOST_PP_DEDUCE_Z(), array)\n#\n# /* BOOST_PP_ARRAY_POP_FRONT_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_POP_FRONT_Z(z, array) BOOST_PP_ARRAY_POP_FRONT_I(z, BOOST_PP_ARRAY_SIZE(array), array)\n# else\n#    define BOOST_PP_ARRAY_POP_FRONT_Z(z, array) BOOST_PP_ARRAY_POP_FRONT_Z_D(z, array)\n#    define BOOST_PP_ARRAY_POP_FRONT_Z_D(z, array) BOOST_PP_ARRAY_POP_FRONT_I(z, BOOST_PP_ARRAY_SIZE(array), array)\n# endif\n#\n# define BOOST_PP_ARRAY_POP_FRONT_I(z, size, array) (BOOST_PP_DEC(size), (BOOST_PP_ENUM_ ## z(BOOST_PP_DEC(size), BOOST_PP_ARRAY_POP_FRONT_M, array)))\n# define BOOST_PP_ARRAY_POP_FRONT_M(z, n, data) BOOST_PP_ARRAY_ELEM(BOOST_PP_INC(n), data)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/push_back.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     (C) Copyright Edward Diener 2014.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_PUSH_BACK_HPP\n# define BOOST_PREPROCESSOR_ARRAY_PUSH_BACK_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/array/data.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n# include <boost/preprocessor/array/detail/get_data.hpp>\n#\n# /* BOOST_PP_ARRAY_PUSH_BACK */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_PUSH_BACK(array, elem) BOOST_PP_ARRAY_PUSH_BACK_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)\n# else\n#    define BOOST_PP_ARRAY_PUSH_BACK(array, elem) BOOST_PP_ARRAY_PUSH_BACK_D(array, elem)\n#    define BOOST_PP_ARRAY_PUSH_BACK_D(array, elem) BOOST_PP_ARRAY_PUSH_BACK_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)\n# endif\n#\n# define BOOST_PP_ARRAY_PUSH_BACK_I(size, data, elem) (BOOST_PP_INC(size), (BOOST_PP_ARRAY_DETAIL_GET_DATA(size,data) BOOST_PP_COMMA_IF(size) elem))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/push_front.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     (C) Copyright Edward Diener 2014.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_PUSH_FRONT_HPP\n# define BOOST_PREPROCESSOR_ARRAY_PUSH_FRONT_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/array/data.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n# include <boost/preprocessor/array/detail/get_data.hpp>\n#\n# /* BOOST_PP_ARRAY_PUSH_FRONT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_PUSH_FRONT(array, elem) BOOST_PP_ARRAY_PUSH_FRONT_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)\n# else\n#    define BOOST_PP_ARRAY_PUSH_FRONT(array, elem) BOOST_PP_ARRAY_PUSH_FRONT_D(array, elem)\n#    define BOOST_PP_ARRAY_PUSH_FRONT_D(array, elem) BOOST_PP_ARRAY_PUSH_FRONT_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)\n# endif\n#\n# define BOOST_PP_ARRAY_PUSH_FRONT_I(size, data, elem) (BOOST_PP_INC(size), (elem BOOST_PP_COMMA_IF(size) BOOST_PP_ARRAY_DETAIL_GET_DATA(size,data)))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/remove.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_REMOVE_HPP\n# define BOOST_PREPROCESSOR_ARRAY_REMOVE_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/array/elem.hpp>\n# include <boost/preprocessor/array/push_back.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/comparison/not_equal.hpp>\n# include <boost/preprocessor/control/deduce_d.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ARRAY_REMOVE */\n#\n# define BOOST_PP_ARRAY_REMOVE(array, i) BOOST_PP_ARRAY_REMOVE_I(BOOST_PP_DEDUCE_D(), array, i)\n# define BOOST_PP_ARRAY_REMOVE_I(d, array, i) BOOST_PP_ARRAY_REMOVE_D(d, array, i)\n#\n# /* BOOST_PP_ARRAY_REMOVE_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_REMOVE_D(d, array, i) BOOST_PP_TUPLE_ELEM(4, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REMOVE_P, BOOST_PP_ARRAY_REMOVE_O, (0, i, (0, ()), array)))\n# else\n#    define BOOST_PP_ARRAY_REMOVE_D(d, array, i) BOOST_PP_ARRAY_REMOVE_D_I(d, array, i)\n#    define BOOST_PP_ARRAY_REMOVE_D_I(d, array, i) BOOST_PP_TUPLE_ELEM(4, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REMOVE_P, BOOST_PP_ARRAY_REMOVE_O, (0, i, (0, ()), array)))\n# endif\n#\n# define BOOST_PP_ARRAY_REMOVE_P(d, st) BOOST_PP_NOT_EQUAL(BOOST_PP_TUPLE_ELEM(4, 0, st), BOOST_PP_ARRAY_SIZE(BOOST_PP_TUPLE_ELEM(4, 3, st)))\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ARRAY_REMOVE_O(d, st) BOOST_PP_ARRAY_REMOVE_O_I st\n# else\n#    define BOOST_PP_ARRAY_REMOVE_O(d, st) BOOST_PP_ARRAY_REMOVE_O_I(BOOST_PP_TUPLE_ELEM(4, 0, st), BOOST_PP_TUPLE_ELEM(4, 1, st), BOOST_PP_TUPLE_ELEM(4, 2, st), BOOST_PP_TUPLE_ELEM(4, 3, st))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    define BOOST_PP_ARRAY_REMOVE_O_I(n, i, res, arr) (BOOST_PP_INC(n), i, BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(n, i), BOOST_PP_ARRAY_PUSH_BACK, res BOOST_PP_TUPLE_EAT_2)(res, BOOST_PP_ARRAY_ELEM(n, arr)), arr)\n# else\n#    define BOOST_PP_ARRAY_REMOVE_O_I(n, i, res, arr) (BOOST_PP_INC(n), i, BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(n, i), BOOST_PP_ARRAY_PUSH_BACK, BOOST_PP_TUPLE_ELEM_2_0)(res, BOOST_PP_ARRAY_ELEM(n, arr)), arr)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/replace.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_REPLACE_HPP\n# define BOOST_PREPROCESSOR_ARRAY_REPLACE_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/array/elem.hpp>\n# include <boost/preprocessor/array/push_back.hpp>\n# include <boost/preprocessor/comparison/not_equal.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/deduce_d.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ARRAY_REPLACE */\n#\n# define BOOST_PP_ARRAY_REPLACE(array, i, elem) BOOST_PP_ARRAY_REPLACE_I(BOOST_PP_DEDUCE_D(), array, i, elem)\n# define BOOST_PP_ARRAY_REPLACE_I(d, array, i, elem) BOOST_PP_ARRAY_REPLACE_D(d, array, i, elem)\n#\n# /* BOOST_PP_ARRAY_REPLACE_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_REPLACE_D(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REPLACE_P, BOOST_PP_ARRAY_REPLACE_O, (0, i, elem, (0, ()), array)))\n# else\n#    define BOOST_PP_ARRAY_REPLACE_D(d, array, i, elem) BOOST_PP_ARRAY_REPLACE_D_I(d, array, i, elem)\n#    define BOOST_PP_ARRAY_REPLACE_D_I(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REPLACE_P, BOOST_PP_ARRAY_REPLACE_O, (0, i, elem, (0, ()), array)))\n# endif\n#\n# define BOOST_PP_ARRAY_REPLACE_P(d, state) BOOST_PP_NOT_EQUAL(BOOST_PP_TUPLE_ELEM(5, 0, state), BOOST_PP_ARRAY_SIZE(BOOST_PP_TUPLE_ELEM(5, 4, state)))\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ARRAY_REPLACE_O(d, state) BOOST_PP_ARRAY_REPLACE_O_I state\n# else\n#    define BOOST_PP_ARRAY_REPLACE_O(d, state) BOOST_PP_ARRAY_REPLACE_O_I(BOOST_PP_TUPLE_ELEM(5, 0, state), BOOST_PP_TUPLE_ELEM(5, 1, state), BOOST_PP_TUPLE_ELEM(5, 2, state), BOOST_PP_TUPLE_ELEM(5, 3, state), BOOST_PP_TUPLE_ELEM(5, 4, state))\n# endif\n#\n# define BOOST_PP_ARRAY_REPLACE_O_I(n, i, elem, res, arr) (BOOST_PP_INC(n), i, elem, BOOST_PP_ARRAY_PUSH_BACK(res, BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(n, i), BOOST_PP_ARRAY_ELEM(n, arr), elem)), arr)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/reverse.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_REVERSE_HPP\n# define BOOST_PREPROCESSOR_ARRAY_REVERSE_HPP\n#\n# include <boost/preprocessor/array/data.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/reverse.hpp>\n#\n# /* BOOST_PP_ARRAY_REVERSE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_REVERSE(array) (BOOST_PP_ARRAY_SIZE(array), BOOST_PP_TUPLE_REVERSE(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array)))\n# else\n#    define BOOST_PP_ARRAY_REVERSE(array) BOOST_PP_ARRAY_REVERSE_I(array)\n#    define BOOST_PP_ARRAY_REVERSE_I(array) (BOOST_PP_ARRAY_SIZE(array), BOOST_PP_TUPLE_REVERSE(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/size.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_SIZE_HPP\n# define BOOST_PREPROCESSOR_ARRAY_SIZE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ARRAY_SIZE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_TUPLE_ELEM(2, 0, array)\n# else\n#    define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_ARRAY_SIZE_I(array)\n#    define BOOST_PP_ARRAY_SIZE_I(array) BOOST_PP_ARRAY_SIZE_II array\n#    define BOOST_PP_ARRAY_SIZE_II(size, data) size\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/to_list.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_TO_LIST_HPP\n# define BOOST_PREPROCESSOR_ARRAY_TO_LIST_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/tuple/to_list.hpp>\n#\n# /* BOOST_PP_ARRAY_TO_LIST */\n#\n#    define BOOST_PP_ARRAY_TO_LIST(array) \\\n\t\tBOOST_PP_IF \\\n\t\t\t( \\\n\t\t\tBOOST_PP_ARRAY_SIZE(array), \\\n\t\t\tBOOST_PP_ARRAY_TO_LIST_DO, \\\n\t\t\tBOOST_PP_ARRAY_TO_LIST_EMPTY \\\n\t\t\t) \\\n\t\t(array) \\\n/**/\n#\n#    define BOOST_PP_ARRAY_TO_LIST_EMPTY(array) BOOST_PP_NIL\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_ARRAY_TO_LIST_DO(array) BOOST_PP_ARRAY_TO_LIST_I(BOOST_PP_TUPLE_TO_LIST, array)\n#    define BOOST_PP_ARRAY_TO_LIST_I(m, args) BOOST_PP_ARRAY_TO_LIST_II(m, args)\n#    define BOOST_PP_ARRAY_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,)\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_ARRAY_TO_LIST_DO(array) BOOST_PP_ARRAY_TO_LIST_I(array)\n#    define BOOST_PP_ARRAY_TO_LIST_I(array) BOOST_PP_TUPLE_TO_LIST ## array\n# else\n#    define BOOST_PP_ARRAY_TO_LIST_DO(array) BOOST_PP_TUPLE_TO_LIST array\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/to_seq.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_TO_SEQ_HPP\n# define BOOST_PREPROCESSOR_ARRAY_TO_SEQ_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/tuple/to_seq.hpp>\n#\n# /* BOOST_PP_ARRAY_TO_SEQ */\n#\n#    define BOOST_PP_ARRAY_TO_SEQ(array) \\\n\t\tBOOST_PP_IF \\\n\t\t\t( \\\n\t\t\tBOOST_PP_ARRAY_SIZE(array), \\\n\t\t\tBOOST_PP_ARRAY_TO_SEQ_DO, \\\n\t\t\tBOOST_PP_ARRAY_TO_SEQ_EMPTY \\\n\t\t\t) \\\n\t\t(array) \\\n/**/\n#    define BOOST_PP_ARRAY_TO_SEQ_EMPTY(array)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_ARRAY_TO_SEQ_DO(array) BOOST_PP_ARRAY_TO_SEQ_I(BOOST_PP_TUPLE_TO_SEQ, array)\n#    define BOOST_PP_ARRAY_TO_SEQ_I(m, args) BOOST_PP_ARRAY_TO_SEQ_II(m, args)\n#    define BOOST_PP_ARRAY_TO_SEQ_II(m, args) BOOST_PP_CAT(m ## args,)\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_ARRAY_TO_SEQ_DO(array) BOOST_PP_ARRAY_TO_SEQ_I(array)\n#    define BOOST_PP_ARRAY_TO_SEQ_I(array) BOOST_PP_TUPLE_TO_SEQ ## array\n# else\n#    define BOOST_PP_ARRAY_TO_SEQ_DO(array) BOOST_PP_TUPLE_TO_SEQ array\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array/to_tuple.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_TO_TUPLE_HPP\n# define BOOST_PREPROCESSOR_ARRAY_TO_TUPLE_HPP\n#\n# include <boost/preprocessor/array/data.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/control/if.hpp>\n#\n# /* BOOST_PP_ARRAY_TO_TUPLE */\n#\n#    define BOOST_PP_ARRAY_TO_TUPLE(array) \\\n\t\tBOOST_PP_IF \\\n\t\t\t( \\\n\t\t\tBOOST_PP_ARRAY_SIZE(array), \\\n\t\t\tBOOST_PP_ARRAY_DATA, \\\n\t\t\tBOOST_PP_ARRAY_TO_TUPLE_EMPTY \\\n\t\t\t) \\\n\t\t(array) \\\n/**/\n#    define BOOST_PP_ARRAY_TO_TUPLE_EMPTY(array)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/array.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002-2011.                             *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_HPP\n# define BOOST_PREPROCESSOR_ARRAY_HPP\n#\n# include <boost/preprocessor/array/data.hpp>\n# include <boost/preprocessor/array/elem.hpp>\n# include <boost/preprocessor/array/enum.hpp>\n# include <boost/preprocessor/array/insert.hpp>\n# include <boost/preprocessor/array/pop_back.hpp>\n# include <boost/preprocessor/array/pop_front.hpp>\n# include <boost/preprocessor/array/push_back.hpp>\n# include <boost/preprocessor/array/push_front.hpp>\n# include <boost/preprocessor/array/remove.hpp>\n# include <boost/preprocessor/array/replace.hpp>\n# include <boost/preprocessor/array/reverse.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/array/to_list.hpp>\n# include <boost/preprocessor/array/to_seq.hpp>\n# include <boost/preprocessor/array/to_tuple.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/assert_msg.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ASSERT_MSG_HPP\n# define BOOST_PREPROCESSOR_ASSERT_MSG_HPP\n#\n# include <boost/preprocessor/debug/assert.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/cat.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CAT_HPP\n# define BOOST_PREPROCESSOR_CAT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_CAT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b)\n# else\n#    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_OO((a, b))\n#    define BOOST_PP_CAT_OO(par) BOOST_PP_CAT_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_CAT_I(a, b) a ## b\n# else\n#    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)\n#    define BOOST_PP_CAT_II(p, res) res\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/comma.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMMA_HPP\n# define BOOST_PREPROCESSOR_COMMA_HPP\n#\n# include <boost/preprocessor/punctuation/comma.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/comma_if.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP\n# define BOOST_PREPROCESSOR_COMMA_IF_HPP\n#\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/comparison/equal.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP\n# define BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP\n#\n# include <boost/preprocessor/comparison/not_equal.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/compl.hpp>\n#\n# /* BOOST_PP_EQUAL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_EQUAL(x, y) BOOST_PP_COMPL(BOOST_PP_NOT_EQUAL(x, y))\n# else\n#    define BOOST_PP_EQUAL(x, y) BOOST_PP_EQUAL_I(x, y)\n#    define BOOST_PP_EQUAL_I(x, y) BOOST_PP_COMPL(BOOST_PP_NOT_EQUAL(x, y))\n# endif\n#\n# /* BOOST_PP_EQUAL_D */\n#\n# define BOOST_PP_EQUAL_D(d, x, y) BOOST_PP_EQUAL(x, y)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/comparison/greater.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP\n# define BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP\n#\n# include <boost/preprocessor/comparison/less.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_GREATER */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_GREATER(x, y) BOOST_PP_LESS(y, x)\n# else\n#    define BOOST_PP_GREATER(x, y) BOOST_PP_GREATER_I(x, y)\n#    define BOOST_PP_GREATER_I(x, y) BOOST_PP_LESS(y, x)\n# endif\n#\n# /* BOOST_PP_GREATER_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_GREATER_D(d, x, y) BOOST_PP_LESS_D(d, y, x)\n# else\n#    define BOOST_PP_GREATER_D(d, x, y) BOOST_PP_GREATER_D_I(d, x, y)\n#    define BOOST_PP_GREATER_D_I(d, x, y) BOOST_PP_LESS_D(d, y, x)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/comparison/greater_equal.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_EQUAL_HPP\n# define BOOST_PREPROCESSOR_COMPARISON_GREATER_EQUAL_HPP\n#\n# include <boost/preprocessor/comparison/less_equal.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_GREATER_EQUAL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_GREATER_EQUAL(x, y) BOOST_PP_LESS_EQUAL(y, x)\n# else\n#    define BOOST_PP_GREATER_EQUAL(x, y) BOOST_PP_GREATER_EQUAL_I(x, y)\n#    define BOOST_PP_GREATER_EQUAL_I(x, y) BOOST_PP_LESS_EQUAL(y, x)\n# endif\n#\n# /* BOOST_PP_GREATER_EQUAL_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_GREATER_EQUAL_D(d, x, y) BOOST_PP_LESS_EQUAL_D(d, y, x)\n# else\n#    define BOOST_PP_GREATER_EQUAL_D(d, x, y) BOOST_PP_GREATER_EQUAL_D_I(d, x, y)\n#    define BOOST_PP_GREATER_EQUAL_D_I(d, x, y) BOOST_PP_LESS_EQUAL_D(d, y, x)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/comparison/less.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_HPP\n# define BOOST_PREPROCESSOR_COMPARISON_LESS_HPP\n#\n# include <boost/preprocessor/comparison/less_equal.hpp>\n# include <boost/preprocessor/comparison/not_equal.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/bitand.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# /* BOOST_PP_LESS */\n#\n# if BOOST_PP_CONFIG_FLAGS() & (BOOST_PP_CONFIG_MWCC() | BOOST_PP_CONFIG_DMC())\n#    define BOOST_PP_LESS(x, y) BOOST_PP_BITAND(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL(x, y))\n# elif ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LESS(x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL, 0 BOOST_PP_TUPLE_EAT_2)(x, y)\n# else\n#    define BOOST_PP_LESS(x, y) BOOST_PP_LESS_I(x, y)\n#    define BOOST_PP_LESS_I(x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL, 0 BOOST_PP_TUPLE_EAT_2)(x, y)\n# endif\n#\n# /* BOOST_PP_LESS_D */\n#\n# if BOOST_PP_CONFIG_FLAGS() & (BOOST_PP_CONFIG_MWCC() | BOOST_PP_CONFIG_DMC())\n#    define BOOST_PP_LESS_D(d, x, y) BOOST_PP_BITAND(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D(d, x, y))\n# elif ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LESS_D(d, x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D, 0 BOOST_PP_TUPLE_EAT_3)(d, x, y)\n# else\n#    define BOOST_PP_LESS_D(d, x, y) BOOST_PP_LESS_D_I(d, x, y)\n#    define BOOST_PP_LESS_D_I(d, x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D, 0 BOOST_PP_TUPLE_EAT_3)(d, x, y)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/comparison/less_equal.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP\n# define BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP\n#\n# include <boost/preprocessor/arithmetic/sub.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/not.hpp>\n#\n# /* BOOST_PP_LESS_EQUAL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LESS_EQUAL(x, y) BOOST_PP_NOT(BOOST_PP_SUB(x, y))\n# else\n#    define BOOST_PP_LESS_EQUAL(x, y) BOOST_PP_LESS_EQUAL_I(x, y)\n#    define BOOST_PP_LESS_EQUAL_I(x, y) BOOST_PP_NOT(BOOST_PP_SUB(x, y))\n# endif\n#\n# /* BOOST_PP_LESS_EQUAL_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LESS_EQUAL_D(d, x, y) BOOST_PP_NOT(BOOST_PP_SUB_D(d, x, y))\n# else\n#    define BOOST_PP_LESS_EQUAL_D(d, x, y) BOOST_PP_LESS_EQUAL_D_I(d, x, y)\n#    define BOOST_PP_LESS_EQUAL_D_I(d, x, y) BOOST_PP_NOT(BOOST_PP_SUB_D(d, x, y))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/comparison/not_equal.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP\n# define BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n#\n# /* BOOST_PP_NOT_EQUAL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_NOT_EQUAL_I(x, y)\n# else\n#    define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_NOT_EQUAL_OO((x, y))\n#    define BOOST_PP_NOT_EQUAL_OO(par) BOOST_PP_NOT_EQUAL_I ## par\n# endif\n#\n# define BOOST_PP_NOT_EQUAL_I(x, y) BOOST_PP_CAT(BOOST_PP_NOT_EQUAL_CHECK_, BOOST_PP_NOT_EQUAL_ ## x(0, BOOST_PP_NOT_EQUAL_ ## y))\n#\n# /* BOOST_PP_NOT_EQUAL_D */\n#\n# define BOOST_PP_NOT_EQUAL_D(d, x, y) BOOST_PP_NOT_EQUAL(x, y)\n#\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_0(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_1(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_2(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_3(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_4(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_5(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_6(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_7(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_8(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_9(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_10(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_11(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_12(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_13(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_14(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_15(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_16(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_17(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_18(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_19(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_20(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_21(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_22(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_23(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_24(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_25(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_26(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_27(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_28(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_29(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_30(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_31(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_32(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_33(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_34(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_35(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_36(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_37(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_38(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_39(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_40(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_41(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_42(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_43(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_44(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_45(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_46(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_47(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_48(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_49(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_50(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_51(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_52(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_53(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_54(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_55(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_56(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_57(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_58(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_59(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_60(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_61(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_62(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_63(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_64(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_65(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_66(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_67(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_68(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_69(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_70(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_71(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_72(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_73(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_74(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_75(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_76(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_77(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_78(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_79(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_80(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_81(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_82(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_83(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_84(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_85(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_86(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_87(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_88(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_89(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_90(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_91(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_92(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_93(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_94(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_95(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_96(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_97(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_98(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_99(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_100(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_101(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_102(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_103(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_104(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_105(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_106(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_107(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_108(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_109(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_110(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_111(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_112(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_113(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_114(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_115(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_116(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_117(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_118(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_119(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_120(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_121(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_122(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_123(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_124(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_125(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_126(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_127(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_128(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_129(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_130(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_131(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_132(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_133(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_134(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_135(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_136(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_137(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_138(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_139(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_140(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_141(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_142(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_143(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_144(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_145(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_146(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_147(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_148(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_149(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_150(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_151(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_152(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_153(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_154(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_155(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_156(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_157(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_158(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_159(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_160(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_161(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_162(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_163(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_164(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_165(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_166(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_167(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_168(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_169(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_170(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_171(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_172(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_173(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_174(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_175(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_176(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_177(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_178(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_179(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_180(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_181(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_182(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_183(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_184(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_185(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_186(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_187(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_188(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_189(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_190(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_191(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_192(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_193(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_194(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_195(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_196(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_197(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_198(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_199(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_200(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_201(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_202(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_203(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_204(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_205(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_206(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_207(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_208(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_209(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_210(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_211(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_212(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_213(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_214(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_215(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_216(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_217(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_218(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_219(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_220(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_221(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_222(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_223(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_224(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_225(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_226(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_227(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_228(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_229(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_230(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_231(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_232(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_233(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_234(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_235(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_236(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_237(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_238(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_239(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_240(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_241(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_242(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_243(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_244(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_245(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_246(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_247(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_248(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_249(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_250(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_251(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_252(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_253(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_254(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_255(c, y) 0\n# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_256(c, y) 0\n#\n#if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    define BOOST_PP_NOT_EQUAL_0(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_1(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_2(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_3(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_4(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_5(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_6(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_7(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_8(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_9(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_10(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_11(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_12(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_13(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_14(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_15(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_16(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_17(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_18(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_19(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_20(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_21(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_22(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_23(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_24(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_25(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_26(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_27(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_28(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_29(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_30(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_31(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_32(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_33(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_34(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_35(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_36(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_37(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_38(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_39(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_40(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_41(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_42(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_43(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_44(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_45(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_46(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_47(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_48(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_49(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_50(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_51(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_52(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_53(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_54(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_55(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_56(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_57(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_58(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_59(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_60(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_61(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_62(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_63(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_64(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_65(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_66(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_67(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_68(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_69(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_70(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_71(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_72(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_73(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_74(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_75(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_76(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_77(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_78(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_79(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_80(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_81(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_82(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_83(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_84(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_85(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_86(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_87(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_88(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_89(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_90(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_91(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_92(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_93(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_94(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_95(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_96(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_97(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_98(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_99(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_100(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_101(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_102(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_103(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_104(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_105(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_106(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_107(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_108(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_109(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_110(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_111(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_112(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_113(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_114(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_115(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_116(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_117(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_118(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_119(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_120(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_121(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_122(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_123(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_124(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_125(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_126(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_127(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_128(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_129(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_130(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_131(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_132(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_133(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_134(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_135(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_136(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_137(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_138(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_139(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_140(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_141(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_142(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_143(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_144(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_145(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_146(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_147(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_148(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_149(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_150(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_151(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_152(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_153(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_154(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_155(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_156(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_157(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_158(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_159(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_160(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_161(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_162(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_163(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_164(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_165(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_166(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_167(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_168(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_169(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_170(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_171(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_172(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_173(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_174(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_175(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_176(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_177(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_178(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_179(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_180(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_181(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_182(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_183(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_184(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_185(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_186(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_187(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_188(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_189(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_190(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_191(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_192(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_193(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_194(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_195(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_196(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_197(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_198(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_199(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_200(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_201(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_202(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_203(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_204(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_205(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_206(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_207(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_208(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_209(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_210(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_211(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_212(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_213(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_214(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_215(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_216(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_217(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_218(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_219(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_220(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_221(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_222(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_223(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_224(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_225(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_226(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_227(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_228(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_229(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_230(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_231(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_232(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_233(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_234(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_235(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_236(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_237(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_238(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_239(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_240(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_241(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_242(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_243(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_244(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_245(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_246(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_247(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_248(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_249(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_250(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_251(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_252(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_253(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_254(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_255(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_256(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))\n# else\n#    define BOOST_PP_NOT_EQUAL_0(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_1(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_2(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_3(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_4(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_5(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_6(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_7(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_8(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_9(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_10(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_11(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_12(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_13(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_14(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_15(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_16(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_17(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_18(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_19(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_20(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_21(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_22(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_23(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_24(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_25(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_26(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_27(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_28(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_29(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_30(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_31(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_32(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_33(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_34(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_35(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_36(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_37(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_38(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_39(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_40(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_41(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_42(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_43(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_44(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_45(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_46(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_47(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_48(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_49(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_50(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_51(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_52(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_53(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_54(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_55(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_56(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_57(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_58(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_59(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_60(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_61(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_62(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_63(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_64(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_65(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_66(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_67(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_68(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_69(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_70(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_71(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_72(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_73(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_74(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_75(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_76(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_77(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_78(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_79(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_80(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_81(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_82(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_83(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_84(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_85(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_86(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_87(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_88(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_89(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_90(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_91(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_92(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_93(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_94(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_95(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_96(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_97(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_98(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_99(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_100(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_101(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_102(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_103(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_104(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_105(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_106(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_107(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_108(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_109(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_110(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_111(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_112(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_113(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_114(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_115(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_116(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_117(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_118(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_119(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_120(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_121(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_122(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_123(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_124(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_125(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_126(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_127(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_128(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_129(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_130(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_131(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_132(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_133(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_134(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_135(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_136(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_137(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_138(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_139(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_140(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_141(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_142(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_143(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_144(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_145(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_146(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_147(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_148(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_149(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_150(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_151(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_152(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_153(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_154(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_155(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_156(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_157(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_158(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_159(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_160(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_161(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_162(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_163(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_164(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_165(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_166(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_167(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_168(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_169(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_170(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_171(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_172(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_173(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_174(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_175(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_176(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_177(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_178(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_179(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_180(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_181(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_182(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_183(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_184(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_185(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_186(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_187(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_188(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_189(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_190(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_191(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_192(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_193(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_194(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_195(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_196(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_197(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_198(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_199(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_200(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_201(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_202(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_203(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_204(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_205(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_206(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_207(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_208(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_209(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_210(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_211(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_212(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_213(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_214(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_215(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_216(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_217(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_218(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_219(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_220(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_221(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_222(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_223(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_224(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_225(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_226(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_227(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_228(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_229(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_230(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_231(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_232(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_233(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_234(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_235(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_236(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_237(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_238(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_239(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_240(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_241(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_242(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_243(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_244(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_245(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_246(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_247(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_248(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_249(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_250(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_251(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_252(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_253(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_254(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_255(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n#    define BOOST_PP_NOT_EQUAL_256(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/comparison.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMPARISON_HPP\n# define BOOST_PREPROCESSOR_COMPARISON_HPP\n#\n# include <boost/preprocessor/comparison/equal.hpp>\n# include <boost/preprocessor/comparison/greater.hpp>\n# include <boost/preprocessor/comparison/greater_equal.hpp>\n# include <boost/preprocessor/comparison/less.hpp>\n# include <boost/preprocessor/comparison/less_equal.hpp>\n# include <boost/preprocessor/comparison/not_equal.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/config/config.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002-2011.                             *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP\n# define BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP\n#\n# /* BOOST_PP_CONFIG_FLAGS */\n#\n# define BOOST_PP_CONFIG_STRICT() 0x0001\n# define BOOST_PP_CONFIG_IDEAL() 0x0002\n#\n# define BOOST_PP_CONFIG_MSVC() 0x0004\n# define BOOST_PP_CONFIG_MWCC() 0x0008\n# define BOOST_PP_CONFIG_BCC() 0x0010\n# define BOOST_PP_CONFIG_EDG() 0x0020\n# define BOOST_PP_CONFIG_DMC() 0x0040\n#\n# ifndef BOOST_PP_CONFIG_FLAGS\n#    if defined(__GCCXML__)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    elif defined(__WAVE__)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    elif defined(__MWERKS__) && __MWERKS__ >= 0x3200\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    elif defined(__EDG__) || defined(__EDG_VERSION__)\n#        if defined(_MSC_VER) && (defined(__INTELLISENSE__) || __EDG_VERSION__ >= 308)\n#            define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())\n#        else\n#            define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_EDG() | BOOST_PP_CONFIG_STRICT())\n#        endif\n#    elif defined(__MWERKS__)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MWCC())\n#    elif defined(__DMC__)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_DMC())\n#    elif defined(__BORLANDC__) && __BORLANDC__ >= 0x581\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    elif defined(__BORLANDC__) || defined(__IBMC__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_BCC())\n#    elif defined(_MSC_VER) && !defined(__clang__)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())\n#    else\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    endif\n# endif\n#\n# /* BOOST_PP_CONFIG_EXTENDED_LINE_INFO */\n#\n# ifndef BOOST_PP_CONFIG_EXTENDED_LINE_INFO\n#    define BOOST_PP_CONFIG_EXTENDED_LINE_INFO 0\n# endif\n#\n# /* BOOST_PP_CONFIG_ERRORS */\n#\n# ifndef BOOST_PP_CONFIG_ERRORS\n#    ifdef NDEBUG\n#        define BOOST_PP_CONFIG_ERRORS 0\n#    else\n#        define BOOST_PP_CONFIG_ERRORS 1\n#    endif\n# endif\n#\n# /* BOOST_PP_VARIADICS */\n#\n# define BOOST_PP_VARIADICS_MSVC 0\n# if !defined BOOST_PP_VARIADICS\n#    /* variadic support explicitly disabled for all untested compilers */\n#    if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || ( defined __SUNPRO_CC && __SUNPRO_CC < 0x5130 ) || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI\n#        define BOOST_PP_VARIADICS 0\n#    /* VC++ (C/C++) */\n#    elif defined _MSC_VER && _MSC_VER >= 1400 && (!defined __EDG__ || defined(__INTELLISENSE__)) && !defined __clang__\n#        define BOOST_PP_VARIADICS 1\n#        undef BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_VARIADICS_MSVC 1\n#    /* Wave (C/C++), GCC (C++) */\n#    elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && defined __GXX_EXPERIMENTAL_CXX0X__ && __GXX_EXPERIMENTAL_CXX0X__\n#        define BOOST_PP_VARIADICS 1\n#    /* EDG-based (C/C++), GCC (C), and unknown (C/C++) */\n#    elif !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L\n#        define BOOST_PP_VARIADICS 1\n#    else\n#        define BOOST_PP_VARIADICS 0\n#    endif\n# elif !BOOST_PP_VARIADICS + 1 < 2\n#    undef BOOST_PP_VARIADICS\n#    define BOOST_PP_VARIADICS 1\n#    if defined _MSC_VER && _MSC_VER >= 1400 && (defined(__INTELLISENSE__) || !(defined __EDG__ || defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI))\n#        undef BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_VARIADICS_MSVC 1\n#    endif\n# else\n#    undef BOOST_PP_VARIADICS\n#    define BOOST_PP_VARIADICS 0\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/config/limits.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n# /* Revised by Edward Diener (2011) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONFIG_LIMITS_HPP\n# define BOOST_PREPROCESSOR_CONFIG_LIMITS_HPP\n#\n# define BOOST_PP_LIMIT_MAG 256\n# define BOOST_PP_LIMIT_TUPLE 64\n# define BOOST_PP_LIMIT_DIM 3\n# define BOOST_PP_LIMIT_REPEAT 256\n# define BOOST_PP_LIMIT_WHILE 256\n# define BOOST_PP_LIMIT_FOR 256\n# define BOOST_PP_LIMIT_ITERATION 256\n# define BOOST_PP_LIMIT_ITERATION_DIM 3\n# define BOOST_PP_LIMIT_SEQ 256\n# define BOOST_PP_LIMIT_SLOT_SIG 10\n# define BOOST_PP_LIMIT_SLOT_COUNT 5\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/deduce_d.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_DEDUCE_D_HPP\n# define BOOST_PREPROCESSOR_CONTROL_DEDUCE_D_HPP\n#\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n#\n# /* BOOST_PP_DEDUCE_D */\n#\n# define BOOST_PP_DEDUCE_D() BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/detail/dmc/while.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP\n# define BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP\n#\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p##(2, s)), p, o, s)\n# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p##(3, s)), p, o, s)\n# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p##(4, s)), p, o, s)\n# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p##(5, s)), p, o, s)\n# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_C(BOOST_PP_BOOL(p##(6, s)), p, o, s)\n# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_C(BOOST_PP_BOOL(p##(7, s)), p, o, s)\n# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_C(BOOST_PP_BOOL(p##(8, s)), p, o, s)\n# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_C(BOOST_PP_BOOL(p##(9, s)), p, o, s)\n# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_C(BOOST_PP_BOOL(p##(10, s)), p, o, s)\n# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_C(BOOST_PP_BOOL(p##(11, s)), p, o, s)\n# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_C(BOOST_PP_BOOL(p##(12, s)), p, o, s)\n# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_C(BOOST_PP_BOOL(p##(13, s)), p, o, s)\n# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_C(BOOST_PP_BOOL(p##(14, s)), p, o, s)\n# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_C(BOOST_PP_BOOL(p##(15, s)), p, o, s)\n# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_C(BOOST_PP_BOOL(p##(16, s)), p, o, s)\n# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_C(BOOST_PP_BOOL(p##(17, s)), p, o, s)\n# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_C(BOOST_PP_BOOL(p##(18, s)), p, o, s)\n# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_C(BOOST_PP_BOOL(p##(19, s)), p, o, s)\n# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_C(BOOST_PP_BOOL(p##(20, s)), p, o, s)\n# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_C(BOOST_PP_BOOL(p##(21, s)), p, o, s)\n# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_C(BOOST_PP_BOOL(p##(22, s)), p, o, s)\n# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_C(BOOST_PP_BOOL(p##(23, s)), p, o, s)\n# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_C(BOOST_PP_BOOL(p##(24, s)), p, o, s)\n# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_C(BOOST_PP_BOOL(p##(25, s)), p, o, s)\n# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_C(BOOST_PP_BOOL(p##(26, s)), p, o, s)\n# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_C(BOOST_PP_BOOL(p##(27, s)), p, o, s)\n# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_C(BOOST_PP_BOOL(p##(28, s)), p, o, s)\n# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_C(BOOST_PP_BOOL(p##(29, s)), p, o, s)\n# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_C(BOOST_PP_BOOL(p##(30, s)), p, o, s)\n# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_C(BOOST_PP_BOOL(p##(31, s)), p, o, s)\n# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_C(BOOST_PP_BOOL(p##(32, s)), p, o, s)\n# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_C(BOOST_PP_BOOL(p##(33, s)), p, o, s)\n# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_C(BOOST_PP_BOOL(p##(34, s)), p, o, s)\n# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_C(BOOST_PP_BOOL(p##(35, s)), p, o, s)\n# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_C(BOOST_PP_BOOL(p##(36, s)), p, o, s)\n# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_C(BOOST_PP_BOOL(p##(37, s)), p, o, s)\n# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_C(BOOST_PP_BOOL(p##(38, s)), p, o, s)\n# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_C(BOOST_PP_BOOL(p##(39, s)), p, o, s)\n# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_C(BOOST_PP_BOOL(p##(40, s)), p, o, s)\n# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_C(BOOST_PP_BOOL(p##(41, s)), p, o, s)\n# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_C(BOOST_PP_BOOL(p##(42, s)), p, o, s)\n# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_C(BOOST_PP_BOOL(p##(43, s)), p, o, s)\n# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_C(BOOST_PP_BOOL(p##(44, s)), p, o, s)\n# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_C(BOOST_PP_BOOL(p##(45, s)), p, o, s)\n# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_C(BOOST_PP_BOOL(p##(46, s)), p, o, s)\n# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_C(BOOST_PP_BOOL(p##(47, s)), p, o, s)\n# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_C(BOOST_PP_BOOL(p##(48, s)), p, o, s)\n# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_C(BOOST_PP_BOOL(p##(49, s)), p, o, s)\n# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_C(BOOST_PP_BOOL(p##(50, s)), p, o, s)\n# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_C(BOOST_PP_BOOL(p##(51, s)), p, o, s)\n# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_C(BOOST_PP_BOOL(p##(52, s)), p, o, s)\n# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_C(BOOST_PP_BOOL(p##(53, s)), p, o, s)\n# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_C(BOOST_PP_BOOL(p##(54, s)), p, o, s)\n# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_C(BOOST_PP_BOOL(p##(55, s)), p, o, s)\n# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_C(BOOST_PP_BOOL(p##(56, s)), p, o, s)\n# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_C(BOOST_PP_BOOL(p##(57, s)), p, o, s)\n# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_C(BOOST_PP_BOOL(p##(58, s)), p, o, s)\n# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_C(BOOST_PP_BOOL(p##(59, s)), p, o, s)\n# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_C(BOOST_PP_BOOL(p##(60, s)), p, o, s)\n# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_C(BOOST_PP_BOOL(p##(61, s)), p, o, s)\n# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_C(BOOST_PP_BOOL(p##(62, s)), p, o, s)\n# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_C(BOOST_PP_BOOL(p##(63, s)), p, o, s)\n# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_C(BOOST_PP_BOOL(p##(64, s)), p, o, s)\n# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_C(BOOST_PP_BOOL(p##(65, s)), p, o, s)\n# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_C(BOOST_PP_BOOL(p##(66, s)), p, o, s)\n# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_C(BOOST_PP_BOOL(p##(67, s)), p, o, s)\n# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_C(BOOST_PP_BOOL(p##(68, s)), p, o, s)\n# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_C(BOOST_PP_BOOL(p##(69, s)), p, o, s)\n# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_C(BOOST_PP_BOOL(p##(70, s)), p, o, s)\n# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_C(BOOST_PP_BOOL(p##(71, s)), p, o, s)\n# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_C(BOOST_PP_BOOL(p##(72, s)), p, o, s)\n# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_C(BOOST_PP_BOOL(p##(73, s)), p, o, s)\n# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_C(BOOST_PP_BOOL(p##(74, s)), p, o, s)\n# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_C(BOOST_PP_BOOL(p##(75, s)), p, o, s)\n# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_C(BOOST_PP_BOOL(p##(76, s)), p, o, s)\n# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_C(BOOST_PP_BOOL(p##(77, s)), p, o, s)\n# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_C(BOOST_PP_BOOL(p##(78, s)), p, o, s)\n# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_C(BOOST_PP_BOOL(p##(79, s)), p, o, s)\n# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_C(BOOST_PP_BOOL(p##(80, s)), p, o, s)\n# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_C(BOOST_PP_BOOL(p##(81, s)), p, o, s)\n# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_C(BOOST_PP_BOOL(p##(82, s)), p, o, s)\n# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_C(BOOST_PP_BOOL(p##(83, s)), p, o, s)\n# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_C(BOOST_PP_BOOL(p##(84, s)), p, o, s)\n# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_C(BOOST_PP_BOOL(p##(85, s)), p, o, s)\n# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_C(BOOST_PP_BOOL(p##(86, s)), p, o, s)\n# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_C(BOOST_PP_BOOL(p##(87, s)), p, o, s)\n# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_C(BOOST_PP_BOOL(p##(88, s)), p, o, s)\n# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_C(BOOST_PP_BOOL(p##(89, s)), p, o, s)\n# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_C(BOOST_PP_BOOL(p##(90, s)), p, o, s)\n# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_C(BOOST_PP_BOOL(p##(91, s)), p, o, s)\n# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_C(BOOST_PP_BOOL(p##(92, s)), p, o, s)\n# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_C(BOOST_PP_BOOL(p##(93, s)), p, o, s)\n# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_C(BOOST_PP_BOOL(p##(94, s)), p, o, s)\n# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_C(BOOST_PP_BOOL(p##(95, s)), p, o, s)\n# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_C(BOOST_PP_BOOL(p##(96, s)), p, o, s)\n# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_C(BOOST_PP_BOOL(p##(97, s)), p, o, s)\n# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_C(BOOST_PP_BOOL(p##(98, s)), p, o, s)\n# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_C(BOOST_PP_BOOL(p##(99, s)), p, o, s)\n# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_C(BOOST_PP_BOOL(p##(100, s)), p, o, s)\n# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_C(BOOST_PP_BOOL(p##(101, s)), p, o, s)\n# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_C(BOOST_PP_BOOL(p##(102, s)), p, o, s)\n# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_C(BOOST_PP_BOOL(p##(103, s)), p, o, s)\n# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_C(BOOST_PP_BOOL(p##(104, s)), p, o, s)\n# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_C(BOOST_PP_BOOL(p##(105, s)), p, o, s)\n# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_C(BOOST_PP_BOOL(p##(106, s)), p, o, s)\n# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_C(BOOST_PP_BOOL(p##(107, s)), p, o, s)\n# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_C(BOOST_PP_BOOL(p##(108, s)), p, o, s)\n# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_C(BOOST_PP_BOOL(p##(109, s)), p, o, s)\n# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_C(BOOST_PP_BOOL(p##(110, s)), p, o, s)\n# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_C(BOOST_PP_BOOL(p##(111, s)), p, o, s)\n# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_C(BOOST_PP_BOOL(p##(112, s)), p, o, s)\n# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_C(BOOST_PP_BOOL(p##(113, s)), p, o, s)\n# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_C(BOOST_PP_BOOL(p##(114, s)), p, o, s)\n# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_C(BOOST_PP_BOOL(p##(115, s)), p, o, s)\n# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_C(BOOST_PP_BOOL(p##(116, s)), p, o, s)\n# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_C(BOOST_PP_BOOL(p##(117, s)), p, o, s)\n# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_C(BOOST_PP_BOOL(p##(118, s)), p, o, s)\n# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_C(BOOST_PP_BOOL(p##(119, s)), p, o, s)\n# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_C(BOOST_PP_BOOL(p##(120, s)), p, o, s)\n# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_C(BOOST_PP_BOOL(p##(121, s)), p, o, s)\n# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_C(BOOST_PP_BOOL(p##(122, s)), p, o, s)\n# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_C(BOOST_PP_BOOL(p##(123, s)), p, o, s)\n# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_C(BOOST_PP_BOOL(p##(124, s)), p, o, s)\n# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_C(BOOST_PP_BOOL(p##(125, s)), p, o, s)\n# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_C(BOOST_PP_BOOL(p##(126, s)), p, o, s)\n# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_C(BOOST_PP_BOOL(p##(127, s)), p, o, s)\n# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_C(BOOST_PP_BOOL(p##(128, s)), p, o, s)\n# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p##(129, s)), p, o, s)\n# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_C(BOOST_PP_BOOL(p##(130, s)), p, o, s)\n# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_C(BOOST_PP_BOOL(p##(131, s)), p, o, s)\n# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_C(BOOST_PP_BOOL(p##(132, s)), p, o, s)\n# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_C(BOOST_PP_BOOL(p##(133, s)), p, o, s)\n# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_C(BOOST_PP_BOOL(p##(134, s)), p, o, s)\n# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_C(BOOST_PP_BOOL(p##(135, s)), p, o, s)\n# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_C(BOOST_PP_BOOL(p##(136, s)), p, o, s)\n# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_C(BOOST_PP_BOOL(p##(137, s)), p, o, s)\n# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_C(BOOST_PP_BOOL(p##(138, s)), p, o, s)\n# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_C(BOOST_PP_BOOL(p##(139, s)), p, o, s)\n# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_C(BOOST_PP_BOOL(p##(140, s)), p, o, s)\n# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_C(BOOST_PP_BOOL(p##(141, s)), p, o, s)\n# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_C(BOOST_PP_BOOL(p##(142, s)), p, o, s)\n# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_C(BOOST_PP_BOOL(p##(143, s)), p, o, s)\n# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_C(BOOST_PP_BOOL(p##(144, s)), p, o, s)\n# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_C(BOOST_PP_BOOL(p##(145, s)), p, o, s)\n# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_C(BOOST_PP_BOOL(p##(146, s)), p, o, s)\n# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_C(BOOST_PP_BOOL(p##(147, s)), p, o, s)\n# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_C(BOOST_PP_BOOL(p##(148, s)), p, o, s)\n# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_C(BOOST_PP_BOOL(p##(149, s)), p, o, s)\n# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_C(BOOST_PP_BOOL(p##(150, s)), p, o, s)\n# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_C(BOOST_PP_BOOL(p##(151, s)), p, o, s)\n# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_C(BOOST_PP_BOOL(p##(152, s)), p, o, s)\n# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_C(BOOST_PP_BOOL(p##(153, s)), p, o, s)\n# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_C(BOOST_PP_BOOL(p##(154, s)), p, o, s)\n# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_C(BOOST_PP_BOOL(p##(155, s)), p, o, s)\n# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_C(BOOST_PP_BOOL(p##(156, s)), p, o, s)\n# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_C(BOOST_PP_BOOL(p##(157, s)), p, o, s)\n# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_C(BOOST_PP_BOOL(p##(158, s)), p, o, s)\n# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_C(BOOST_PP_BOOL(p##(159, s)), p, o, s)\n# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_C(BOOST_PP_BOOL(p##(160, s)), p, o, s)\n# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_C(BOOST_PP_BOOL(p##(161, s)), p, o, s)\n# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_C(BOOST_PP_BOOL(p##(162, s)), p, o, s)\n# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_C(BOOST_PP_BOOL(p##(163, s)), p, o, s)\n# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_C(BOOST_PP_BOOL(p##(164, s)), p, o, s)\n# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_C(BOOST_PP_BOOL(p##(165, s)), p, o, s)\n# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_C(BOOST_PP_BOOL(p##(166, s)), p, o, s)\n# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_C(BOOST_PP_BOOL(p##(167, s)), p, o, s)\n# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_C(BOOST_PP_BOOL(p##(168, s)), p, o, s)\n# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_C(BOOST_PP_BOOL(p##(169, s)), p, o, s)\n# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_C(BOOST_PP_BOOL(p##(170, s)), p, o, s)\n# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_C(BOOST_PP_BOOL(p##(171, s)), p, o, s)\n# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_C(BOOST_PP_BOOL(p##(172, s)), p, o, s)\n# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_C(BOOST_PP_BOOL(p##(173, s)), p, o, s)\n# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_C(BOOST_PP_BOOL(p##(174, s)), p, o, s)\n# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_C(BOOST_PP_BOOL(p##(175, s)), p, o, s)\n# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_C(BOOST_PP_BOOL(p##(176, s)), p, o, s)\n# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_C(BOOST_PP_BOOL(p##(177, s)), p, o, s)\n# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_C(BOOST_PP_BOOL(p##(178, s)), p, o, s)\n# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_C(BOOST_PP_BOOL(p##(179, s)), p, o, s)\n# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_C(BOOST_PP_BOOL(p##(180, s)), p, o, s)\n# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_C(BOOST_PP_BOOL(p##(181, s)), p, o, s)\n# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_C(BOOST_PP_BOOL(p##(182, s)), p, o, s)\n# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_C(BOOST_PP_BOOL(p##(183, s)), p, o, s)\n# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_C(BOOST_PP_BOOL(p##(184, s)), p, o, s)\n# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_C(BOOST_PP_BOOL(p##(185, s)), p, o, s)\n# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_C(BOOST_PP_BOOL(p##(186, s)), p, o, s)\n# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_C(BOOST_PP_BOOL(p##(187, s)), p, o, s)\n# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_C(BOOST_PP_BOOL(p##(188, s)), p, o, s)\n# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_C(BOOST_PP_BOOL(p##(189, s)), p, o, s)\n# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_C(BOOST_PP_BOOL(p##(190, s)), p, o, s)\n# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_C(BOOST_PP_BOOL(p##(191, s)), p, o, s)\n# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_C(BOOST_PP_BOOL(p##(192, s)), p, o, s)\n# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_C(BOOST_PP_BOOL(p##(193, s)), p, o, s)\n# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_C(BOOST_PP_BOOL(p##(194, s)), p, o, s)\n# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_C(BOOST_PP_BOOL(p##(195, s)), p, o, s)\n# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_C(BOOST_PP_BOOL(p##(196, s)), p, o, s)\n# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_C(BOOST_PP_BOOL(p##(197, s)), p, o, s)\n# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_C(BOOST_PP_BOOL(p##(198, s)), p, o, s)\n# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_C(BOOST_PP_BOOL(p##(199, s)), p, o, s)\n# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_C(BOOST_PP_BOOL(p##(200, s)), p, o, s)\n# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_C(BOOST_PP_BOOL(p##(201, s)), p, o, s)\n# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_C(BOOST_PP_BOOL(p##(202, s)), p, o, s)\n# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_C(BOOST_PP_BOOL(p##(203, s)), p, o, s)\n# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_C(BOOST_PP_BOOL(p##(204, s)), p, o, s)\n# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_C(BOOST_PP_BOOL(p##(205, s)), p, o, s)\n# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_C(BOOST_PP_BOOL(p##(206, s)), p, o, s)\n# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_C(BOOST_PP_BOOL(p##(207, s)), p, o, s)\n# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_C(BOOST_PP_BOOL(p##(208, s)), p, o, s)\n# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_C(BOOST_PP_BOOL(p##(209, s)), p, o, s)\n# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_C(BOOST_PP_BOOL(p##(210, s)), p, o, s)\n# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_C(BOOST_PP_BOOL(p##(211, s)), p, o, s)\n# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_C(BOOST_PP_BOOL(p##(212, s)), p, o, s)\n# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_C(BOOST_PP_BOOL(p##(213, s)), p, o, s)\n# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_C(BOOST_PP_BOOL(p##(214, s)), p, o, s)\n# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_C(BOOST_PP_BOOL(p##(215, s)), p, o, s)\n# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_C(BOOST_PP_BOOL(p##(216, s)), p, o, s)\n# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_C(BOOST_PP_BOOL(p##(217, s)), p, o, s)\n# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_C(BOOST_PP_BOOL(p##(218, s)), p, o, s)\n# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_C(BOOST_PP_BOOL(p##(219, s)), p, o, s)\n# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_C(BOOST_PP_BOOL(p##(220, s)), p, o, s)\n# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_C(BOOST_PP_BOOL(p##(221, s)), p, o, s)\n# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_C(BOOST_PP_BOOL(p##(222, s)), p, o, s)\n# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_C(BOOST_PP_BOOL(p##(223, s)), p, o, s)\n# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_C(BOOST_PP_BOOL(p##(224, s)), p, o, s)\n# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_C(BOOST_PP_BOOL(p##(225, s)), p, o, s)\n# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_C(BOOST_PP_BOOL(p##(226, s)), p, o, s)\n# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_C(BOOST_PP_BOOL(p##(227, s)), p, o, s)\n# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_C(BOOST_PP_BOOL(p##(228, s)), p, o, s)\n# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_C(BOOST_PP_BOOL(p##(229, s)), p, o, s)\n# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_C(BOOST_PP_BOOL(p##(230, s)), p, o, s)\n# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_C(BOOST_PP_BOOL(p##(231, s)), p, o, s)\n# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_C(BOOST_PP_BOOL(p##(232, s)), p, o, s)\n# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_C(BOOST_PP_BOOL(p##(233, s)), p, o, s)\n# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_C(BOOST_PP_BOOL(p##(234, s)), p, o, s)\n# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_C(BOOST_PP_BOOL(p##(235, s)), p, o, s)\n# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_C(BOOST_PP_BOOL(p##(236, s)), p, o, s)\n# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_C(BOOST_PP_BOOL(p##(237, s)), p, o, s)\n# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_C(BOOST_PP_BOOL(p##(238, s)), p, o, s)\n# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_C(BOOST_PP_BOOL(p##(239, s)), p, o, s)\n# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_C(BOOST_PP_BOOL(p##(240, s)), p, o, s)\n# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_C(BOOST_PP_BOOL(p##(241, s)), p, o, s)\n# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_C(BOOST_PP_BOOL(p##(242, s)), p, o, s)\n# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_C(BOOST_PP_BOOL(p##(243, s)), p, o, s)\n# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_C(BOOST_PP_BOOL(p##(244, s)), p, o, s)\n# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_C(BOOST_PP_BOOL(p##(245, s)), p, o, s)\n# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_C(BOOST_PP_BOOL(p##(246, s)), p, o, s)\n# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_C(BOOST_PP_BOOL(p##(247, s)), p, o, s)\n# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_C(BOOST_PP_BOOL(p##(248, s)), p, o, s)\n# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_C(BOOST_PP_BOOL(p##(249, s)), p, o, s)\n# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_C(BOOST_PP_BOOL(p##(250, s)), p, o, s)\n# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_C(BOOST_PP_BOOL(p##(251, s)), p, o, s)\n# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_C(BOOST_PP_BOOL(p##(252, s)), p, o, s)\n# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_C(BOOST_PP_BOOL(p##(253, s)), p, o, s)\n# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_C(BOOST_PP_BOOL(p##(254, s)), p, o, s)\n# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_C(BOOST_PP_BOOL(p##(255, s)), p, o, s)\n# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_C(BOOST_PP_BOOL(p##(256, s)), p, o, s)\n# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_C(BOOST_PP_BOOL(p##(257, s)), p, o, s)\n#\n# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(2, s))\n# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(3, s))\n# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(4, s))\n# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(5, s))\n# define BOOST_PP_WHILE_5_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_6, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(6, s))\n# define BOOST_PP_WHILE_6_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_7, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(7, s))\n# define BOOST_PP_WHILE_7_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_8, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(8, s))\n# define BOOST_PP_WHILE_8_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_9, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(9, s))\n# define BOOST_PP_WHILE_9_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_10, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(10, s))\n# define BOOST_PP_WHILE_10_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_11, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(11, s))\n# define BOOST_PP_WHILE_11_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_12, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(12, s))\n# define BOOST_PP_WHILE_12_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_13, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(13, s))\n# define BOOST_PP_WHILE_13_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_14, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(14, s))\n# define BOOST_PP_WHILE_14_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_15, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(15, s))\n# define BOOST_PP_WHILE_15_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_16, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(16, s))\n# define BOOST_PP_WHILE_16_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_17, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(17, s))\n# define BOOST_PP_WHILE_17_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_18, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(18, s))\n# define BOOST_PP_WHILE_18_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_19, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(19, s))\n# define BOOST_PP_WHILE_19_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_20, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(20, s))\n# define BOOST_PP_WHILE_20_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_21, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(21, s))\n# define BOOST_PP_WHILE_21_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_22, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(22, s))\n# define BOOST_PP_WHILE_22_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_23, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(23, s))\n# define BOOST_PP_WHILE_23_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_24, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(24, s))\n# define BOOST_PP_WHILE_24_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_25, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(25, s))\n# define BOOST_PP_WHILE_25_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_26, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(26, s))\n# define BOOST_PP_WHILE_26_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_27, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(27, s))\n# define BOOST_PP_WHILE_27_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_28, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(28, s))\n# define BOOST_PP_WHILE_28_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_29, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(29, s))\n# define BOOST_PP_WHILE_29_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_30, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(30, s))\n# define BOOST_PP_WHILE_30_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_31, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(31, s))\n# define BOOST_PP_WHILE_31_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_32, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(32, s))\n# define BOOST_PP_WHILE_32_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_33, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(33, s))\n# define BOOST_PP_WHILE_33_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_34, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(34, s))\n# define BOOST_PP_WHILE_34_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_35, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(35, s))\n# define BOOST_PP_WHILE_35_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_36, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(36, s))\n# define BOOST_PP_WHILE_36_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_37, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(37, s))\n# define BOOST_PP_WHILE_37_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_38, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(38, s))\n# define BOOST_PP_WHILE_38_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_39, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(39, s))\n# define BOOST_PP_WHILE_39_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_40, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(40, s))\n# define BOOST_PP_WHILE_40_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_41, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(41, s))\n# define BOOST_PP_WHILE_41_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_42, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(42, s))\n# define BOOST_PP_WHILE_42_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_43, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(43, s))\n# define BOOST_PP_WHILE_43_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_44, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(44, s))\n# define BOOST_PP_WHILE_44_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_45, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(45, s))\n# define BOOST_PP_WHILE_45_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_46, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(46, s))\n# define BOOST_PP_WHILE_46_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_47, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(47, s))\n# define BOOST_PP_WHILE_47_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_48, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(48, s))\n# define BOOST_PP_WHILE_48_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_49, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(49, s))\n# define BOOST_PP_WHILE_49_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_50, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(50, s))\n# define BOOST_PP_WHILE_50_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_51, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(51, s))\n# define BOOST_PP_WHILE_51_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_52, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(52, s))\n# define BOOST_PP_WHILE_52_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_53, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(53, s))\n# define BOOST_PP_WHILE_53_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_54, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(54, s))\n# define BOOST_PP_WHILE_54_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_55, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(55, s))\n# define BOOST_PP_WHILE_55_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_56, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(56, s))\n# define BOOST_PP_WHILE_56_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_57, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(57, s))\n# define BOOST_PP_WHILE_57_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_58, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(58, s))\n# define BOOST_PP_WHILE_58_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_59, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(59, s))\n# define BOOST_PP_WHILE_59_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_60, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(60, s))\n# define BOOST_PP_WHILE_60_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_61, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(61, s))\n# define BOOST_PP_WHILE_61_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_62, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(62, s))\n# define BOOST_PP_WHILE_62_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_63, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(63, s))\n# define BOOST_PP_WHILE_63_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_64, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(64, s))\n# define BOOST_PP_WHILE_64_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_65, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(65, s))\n# define BOOST_PP_WHILE_65_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_66, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(66, s))\n# define BOOST_PP_WHILE_66_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_67, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(67, s))\n# define BOOST_PP_WHILE_67_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_68, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(68, s))\n# define BOOST_PP_WHILE_68_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_69, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(69, s))\n# define BOOST_PP_WHILE_69_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_70, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(70, s))\n# define BOOST_PP_WHILE_70_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_71, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(71, s))\n# define BOOST_PP_WHILE_71_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_72, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(72, s))\n# define BOOST_PP_WHILE_72_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_73, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(73, s))\n# define BOOST_PP_WHILE_73_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_74, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(74, s))\n# define BOOST_PP_WHILE_74_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_75, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(75, s))\n# define BOOST_PP_WHILE_75_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_76, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(76, s))\n# define BOOST_PP_WHILE_76_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_77, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(77, s))\n# define BOOST_PP_WHILE_77_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_78, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(78, s))\n# define BOOST_PP_WHILE_78_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_79, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(79, s))\n# define BOOST_PP_WHILE_79_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_80, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(80, s))\n# define BOOST_PP_WHILE_80_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_81, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(81, s))\n# define BOOST_PP_WHILE_81_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_82, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(82, s))\n# define BOOST_PP_WHILE_82_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_83, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(83, s))\n# define BOOST_PP_WHILE_83_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_84, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(84, s))\n# define BOOST_PP_WHILE_84_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_85, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(85, s))\n# define BOOST_PP_WHILE_85_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_86, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(86, s))\n# define BOOST_PP_WHILE_86_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_87, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(87, s))\n# define BOOST_PP_WHILE_87_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_88, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(88, s))\n# define BOOST_PP_WHILE_88_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_89, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(89, s))\n# define BOOST_PP_WHILE_89_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_90, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(90, s))\n# define BOOST_PP_WHILE_90_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_91, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(91, s))\n# define BOOST_PP_WHILE_91_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_92, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(92, s))\n# define BOOST_PP_WHILE_92_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_93, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(93, s))\n# define BOOST_PP_WHILE_93_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_94, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(94, s))\n# define BOOST_PP_WHILE_94_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_95, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(95, s))\n# define BOOST_PP_WHILE_95_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_96, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(96, s))\n# define BOOST_PP_WHILE_96_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_97, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(97, s))\n# define BOOST_PP_WHILE_97_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_98, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(98, s))\n# define BOOST_PP_WHILE_98_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_99, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(99, s))\n# define BOOST_PP_WHILE_99_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_100, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(100, s))\n# define BOOST_PP_WHILE_100_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_101, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(101, s))\n# define BOOST_PP_WHILE_101_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_102, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(102, s))\n# define BOOST_PP_WHILE_102_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_103, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(103, s))\n# define BOOST_PP_WHILE_103_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_104, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(104, s))\n# define BOOST_PP_WHILE_104_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_105, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(105, s))\n# define BOOST_PP_WHILE_105_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_106, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(106, s))\n# define BOOST_PP_WHILE_106_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_107, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(107, s))\n# define BOOST_PP_WHILE_107_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_108, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(108, s))\n# define BOOST_PP_WHILE_108_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_109, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(109, s))\n# define BOOST_PP_WHILE_109_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_110, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(110, s))\n# define BOOST_PP_WHILE_110_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_111, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(111, s))\n# define BOOST_PP_WHILE_111_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_112, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(112, s))\n# define BOOST_PP_WHILE_112_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_113, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(113, s))\n# define BOOST_PP_WHILE_113_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_114, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(114, s))\n# define BOOST_PP_WHILE_114_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_115, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(115, s))\n# define BOOST_PP_WHILE_115_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_116, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(116, s))\n# define BOOST_PP_WHILE_116_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_117, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(117, s))\n# define BOOST_PP_WHILE_117_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_118, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(118, s))\n# define BOOST_PP_WHILE_118_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_119, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(119, s))\n# define BOOST_PP_WHILE_119_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_120, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(120, s))\n# define BOOST_PP_WHILE_120_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_121, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(121, s))\n# define BOOST_PP_WHILE_121_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_122, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(122, s))\n# define BOOST_PP_WHILE_122_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_123, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(123, s))\n# define BOOST_PP_WHILE_123_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_124, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(124, s))\n# define BOOST_PP_WHILE_124_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_125, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(125, s))\n# define BOOST_PP_WHILE_125_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_126, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(126, s))\n# define BOOST_PP_WHILE_126_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_127, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(127, s))\n# define BOOST_PP_WHILE_127_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_128, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(128, s))\n# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(129, s))\n# define BOOST_PP_WHILE_129_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_130, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(130, s))\n# define BOOST_PP_WHILE_130_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_131, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(131, s))\n# define BOOST_PP_WHILE_131_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_132, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(132, s))\n# define BOOST_PP_WHILE_132_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_133, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(133, s))\n# define BOOST_PP_WHILE_133_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_134, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(134, s))\n# define BOOST_PP_WHILE_134_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_135, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(135, s))\n# define BOOST_PP_WHILE_135_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_136, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(136, s))\n# define BOOST_PP_WHILE_136_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_137, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(137, s))\n# define BOOST_PP_WHILE_137_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_138, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(138, s))\n# define BOOST_PP_WHILE_138_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_139, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(139, s))\n# define BOOST_PP_WHILE_139_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_140, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(140, s))\n# define BOOST_PP_WHILE_140_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_141, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(141, s))\n# define BOOST_PP_WHILE_141_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_142, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(142, s))\n# define BOOST_PP_WHILE_142_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_143, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(143, s))\n# define BOOST_PP_WHILE_143_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_144, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(144, s))\n# define BOOST_PP_WHILE_144_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_145, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(145, s))\n# define BOOST_PP_WHILE_145_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_146, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(146, s))\n# define BOOST_PP_WHILE_146_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_147, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(147, s))\n# define BOOST_PP_WHILE_147_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_148, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(148, s))\n# define BOOST_PP_WHILE_148_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_149, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(149, s))\n# define BOOST_PP_WHILE_149_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_150, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(150, s))\n# define BOOST_PP_WHILE_150_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_151, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(151, s))\n# define BOOST_PP_WHILE_151_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_152, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(152, s))\n# define BOOST_PP_WHILE_152_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_153, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(153, s))\n# define BOOST_PP_WHILE_153_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_154, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(154, s))\n# define BOOST_PP_WHILE_154_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_155, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(155, s))\n# define BOOST_PP_WHILE_155_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_156, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(156, s))\n# define BOOST_PP_WHILE_156_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_157, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(157, s))\n# define BOOST_PP_WHILE_157_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_158, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(158, s))\n# define BOOST_PP_WHILE_158_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_159, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(159, s))\n# define BOOST_PP_WHILE_159_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_160, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(160, s))\n# define BOOST_PP_WHILE_160_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_161, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(161, s))\n# define BOOST_PP_WHILE_161_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_162, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(162, s))\n# define BOOST_PP_WHILE_162_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_163, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(163, s))\n# define BOOST_PP_WHILE_163_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_164, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(164, s))\n# define BOOST_PP_WHILE_164_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_165, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(165, s))\n# define BOOST_PP_WHILE_165_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_166, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(166, s))\n# define BOOST_PP_WHILE_166_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_167, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(167, s))\n# define BOOST_PP_WHILE_167_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_168, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(168, s))\n# define BOOST_PP_WHILE_168_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_169, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(169, s))\n# define BOOST_PP_WHILE_169_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_170, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(170, s))\n# define BOOST_PP_WHILE_170_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_171, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(171, s))\n# define BOOST_PP_WHILE_171_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_172, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(172, s))\n# define BOOST_PP_WHILE_172_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_173, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(173, s))\n# define BOOST_PP_WHILE_173_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_174, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(174, s))\n# define BOOST_PP_WHILE_174_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_175, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(175, s))\n# define BOOST_PP_WHILE_175_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_176, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(176, s))\n# define BOOST_PP_WHILE_176_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_177, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(177, s))\n# define BOOST_PP_WHILE_177_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_178, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(178, s))\n# define BOOST_PP_WHILE_178_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_179, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(179, s))\n# define BOOST_PP_WHILE_179_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_180, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(180, s))\n# define BOOST_PP_WHILE_180_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_181, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(181, s))\n# define BOOST_PP_WHILE_181_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_182, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(182, s))\n# define BOOST_PP_WHILE_182_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_183, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(183, s))\n# define BOOST_PP_WHILE_183_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_184, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(184, s))\n# define BOOST_PP_WHILE_184_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_185, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(185, s))\n# define BOOST_PP_WHILE_185_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_186, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(186, s))\n# define BOOST_PP_WHILE_186_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_187, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(187, s))\n# define BOOST_PP_WHILE_187_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_188, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(188, s))\n# define BOOST_PP_WHILE_188_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_189, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(189, s))\n# define BOOST_PP_WHILE_189_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_190, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(190, s))\n# define BOOST_PP_WHILE_190_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_191, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(191, s))\n# define BOOST_PP_WHILE_191_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_192, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(192, s))\n# define BOOST_PP_WHILE_192_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_193, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(193, s))\n# define BOOST_PP_WHILE_193_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_194, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(194, s))\n# define BOOST_PP_WHILE_194_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_195, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(195, s))\n# define BOOST_PP_WHILE_195_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_196, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(196, s))\n# define BOOST_PP_WHILE_196_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_197, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(197, s))\n# define BOOST_PP_WHILE_197_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_198, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(198, s))\n# define BOOST_PP_WHILE_198_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_199, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(199, s))\n# define BOOST_PP_WHILE_199_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_200, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(200, s))\n# define BOOST_PP_WHILE_200_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_201, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(201, s))\n# define BOOST_PP_WHILE_201_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_202, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(202, s))\n# define BOOST_PP_WHILE_202_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_203, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(203, s))\n# define BOOST_PP_WHILE_203_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_204, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(204, s))\n# define BOOST_PP_WHILE_204_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_205, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(205, s))\n# define BOOST_PP_WHILE_205_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_206, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(206, s))\n# define BOOST_PP_WHILE_206_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_207, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(207, s))\n# define BOOST_PP_WHILE_207_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_208, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(208, s))\n# define BOOST_PP_WHILE_208_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_209, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(209, s))\n# define BOOST_PP_WHILE_209_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_210, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(210, s))\n# define BOOST_PP_WHILE_210_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_211, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(211, s))\n# define BOOST_PP_WHILE_211_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_212, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(212, s))\n# define BOOST_PP_WHILE_212_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_213, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(213, s))\n# define BOOST_PP_WHILE_213_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_214, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(214, s))\n# define BOOST_PP_WHILE_214_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_215, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(215, s))\n# define BOOST_PP_WHILE_215_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_216, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(216, s))\n# define BOOST_PP_WHILE_216_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_217, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(217, s))\n# define BOOST_PP_WHILE_217_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_218, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(218, s))\n# define BOOST_PP_WHILE_218_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_219, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(219, s))\n# define BOOST_PP_WHILE_219_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_220, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(220, s))\n# define BOOST_PP_WHILE_220_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_221, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(221, s))\n# define BOOST_PP_WHILE_221_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_222, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(222, s))\n# define BOOST_PP_WHILE_222_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_223, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(223, s))\n# define BOOST_PP_WHILE_223_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_224, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(224, s))\n# define BOOST_PP_WHILE_224_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_225, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(225, s))\n# define BOOST_PP_WHILE_225_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_226, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(226, s))\n# define BOOST_PP_WHILE_226_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_227, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(227, s))\n# define BOOST_PP_WHILE_227_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_228, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(228, s))\n# define BOOST_PP_WHILE_228_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_229, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(229, s))\n# define BOOST_PP_WHILE_229_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_230, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(230, s))\n# define BOOST_PP_WHILE_230_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_231, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(231, s))\n# define BOOST_PP_WHILE_231_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_232, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(232, s))\n# define BOOST_PP_WHILE_232_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_233, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(233, s))\n# define BOOST_PP_WHILE_233_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_234, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(234, s))\n# define BOOST_PP_WHILE_234_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_235, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(235, s))\n# define BOOST_PP_WHILE_235_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_236, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(236, s))\n# define BOOST_PP_WHILE_236_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_237, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(237, s))\n# define BOOST_PP_WHILE_237_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_238, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(238, s))\n# define BOOST_PP_WHILE_238_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_239, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(239, s))\n# define BOOST_PP_WHILE_239_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_240, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(240, s))\n# define BOOST_PP_WHILE_240_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_241, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(241, s))\n# define BOOST_PP_WHILE_241_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_242, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(242, s))\n# define BOOST_PP_WHILE_242_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_243, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(243, s))\n# define BOOST_PP_WHILE_243_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_244, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(244, s))\n# define BOOST_PP_WHILE_244_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_245, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(245, s))\n# define BOOST_PP_WHILE_245_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_246, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(246, s))\n# define BOOST_PP_WHILE_246_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_247, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(247, s))\n# define BOOST_PP_WHILE_247_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_248, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(248, s))\n# define BOOST_PP_WHILE_248_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_249, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(249, s))\n# define BOOST_PP_WHILE_249_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_250, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(250, s))\n# define BOOST_PP_WHILE_250_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_251, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(251, s))\n# define BOOST_PP_WHILE_251_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_252, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(252, s))\n# define BOOST_PP_WHILE_252_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_253, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(253, s))\n# define BOOST_PP_WHILE_253_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_254, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(254, s))\n# define BOOST_PP_WHILE_254_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_255, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(255, s))\n# define BOOST_PP_WHILE_255_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_256, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(256, s))\n# define BOOST_PP_WHILE_256_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_257, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(257, s))\n#\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/detail/edg/while.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_EDG_WHILE_HPP\n# define BOOST_PREPROCESSOR_CONTROL_DETAIL_EDG_WHILE_HPP\n#\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_I(p, o, s)\n# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_I(p, o, s)\n# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_I(p, o, s)\n# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_I(p, o, s)\n# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_I(p, o, s)\n# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_I(p, o, s)\n# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_I(p, o, s)\n# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_I(p, o, s)\n# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_I(p, o, s)\n# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_I(p, o, s)\n# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_I(p, o, s)\n# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_I(p, o, s)\n# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_I(p, o, s)\n# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_I(p, o, s)\n# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_I(p, o, s)\n# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_I(p, o, s)\n# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_I(p, o, s)\n# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_I(p, o, s)\n# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_I(p, o, s)\n# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_I(p, o, s)\n# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_I(p, o, s)\n# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_I(p, o, s)\n# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_I(p, o, s)\n# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_I(p, o, s)\n# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_I(p, o, s)\n# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_I(p, o, s)\n# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_I(p, o, s)\n# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_I(p, o, s)\n# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_I(p, o, s)\n# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_I(p, o, s)\n# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_I(p, o, s)\n# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_I(p, o, s)\n# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_I(p, o, s)\n# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_I(p, o, s)\n# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_I(p, o, s)\n# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_I(p, o, s)\n# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_I(p, o, s)\n# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_I(p, o, s)\n# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_I(p, o, s)\n# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_I(p, o, s)\n# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_I(p, o, s)\n# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_I(p, o, s)\n# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_I(p, o, s)\n# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_I(p, o, s)\n# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_I(p, o, s)\n# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_I(p, o, s)\n# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_I(p, o, s)\n# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_I(p, o, s)\n# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_I(p, o, s)\n# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_I(p, o, s)\n# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_I(p, o, s)\n# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_I(p, o, s)\n# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_I(p, o, s)\n# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_I(p, o, s)\n# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_I(p, o, s)\n# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_I(p, o, s)\n# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_I(p, o, s)\n# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_I(p, o, s)\n# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_I(p, o, s)\n# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_I(p, o, s)\n# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_I(p, o, s)\n# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_I(p, o, s)\n# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_I(p, o, s)\n# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_I(p, o, s)\n# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_I(p, o, s)\n# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_I(p, o, s)\n# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_I(p, o, s)\n# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_I(p, o, s)\n# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_I(p, o, s)\n# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_I(p, o, s)\n# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_I(p, o, s)\n# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_I(p, o, s)\n# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_I(p, o, s)\n# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_I(p, o, s)\n# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_I(p, o, s)\n# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_I(p, o, s)\n# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_I(p, o, s)\n# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_I(p, o, s)\n# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_I(p, o, s)\n# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_I(p, o, s)\n# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_I(p, o, s)\n# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_I(p, o, s)\n# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_I(p, o, s)\n# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_I(p, o, s)\n# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_I(p, o, s)\n# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_I(p, o, s)\n# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_I(p, o, s)\n# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_I(p, o, s)\n# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_I(p, o, s)\n# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_I(p, o, s)\n# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_I(p, o, s)\n# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_I(p, o, s)\n# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_I(p, o, s)\n# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_I(p, o, s)\n# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_I(p, o, s)\n# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_I(p, o, s)\n# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_I(p, o, s)\n# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_I(p, o, s)\n# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_I(p, o, s)\n# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_I(p, o, s)\n# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_I(p, o, s)\n# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_I(p, o, s)\n# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_I(p, o, s)\n# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_I(p, o, s)\n# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_I(p, o, s)\n# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_I(p, o, s)\n# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_I(p, o, s)\n# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_I(p, o, s)\n# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_I(p, o, s)\n# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_I(p, o, s)\n# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_I(p, o, s)\n# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_I(p, o, s)\n# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_I(p, o, s)\n# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_I(p, o, s)\n# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_I(p, o, s)\n# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_I(p, o, s)\n# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_I(p, o, s)\n# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_I(p, o, s)\n# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_I(p, o, s)\n# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_I(p, o, s)\n# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_I(p, o, s)\n# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_I(p, o, s)\n# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_I(p, o, s)\n# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_I(p, o, s)\n# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_I(p, o, s)\n# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_I(p, o, s)\n# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_I(p, o, s)\n# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_I(p, o, s)\n# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_I(p, o, s)\n# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_I(p, o, s)\n# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_I(p, o, s)\n# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_I(p, o, s)\n# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_I(p, o, s)\n# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_I(p, o, s)\n# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_I(p, o, s)\n# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_I(p, o, s)\n# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_I(p, o, s)\n# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_I(p, o, s)\n# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_I(p, o, s)\n# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_I(p, o, s)\n# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_I(p, o, s)\n# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_I(p, o, s)\n# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_I(p, o, s)\n# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_I(p, o, s)\n# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_I(p, o, s)\n# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_I(p, o, s)\n# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_I(p, o, s)\n# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_I(p, o, s)\n# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_I(p, o, s)\n# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_I(p, o, s)\n# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_I(p, o, s)\n# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_I(p, o, s)\n# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_I(p, o, s)\n# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_I(p, o, s)\n# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_I(p, o, s)\n# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_I(p, o, s)\n# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_I(p, o, s)\n# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_I(p, o, s)\n# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_I(p, o, s)\n# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_I(p, o, s)\n# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_I(p, o, s)\n# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_I(p, o, s)\n# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_I(p, o, s)\n# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_I(p, o, s)\n# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_I(p, o, s)\n# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_I(p, o, s)\n# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_I(p, o, s)\n# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_I(p, o, s)\n# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_I(p, o, s)\n# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_I(p, o, s)\n# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_I(p, o, s)\n# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_I(p, o, s)\n# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_I(p, o, s)\n# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_I(p, o, s)\n# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_I(p, o, s)\n# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_I(p, o, s)\n# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_I(p, o, s)\n# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_I(p, o, s)\n# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_I(p, o, s)\n# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_I(p, o, s)\n# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_I(p, o, s)\n# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_I(p, o, s)\n# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_I(p, o, s)\n# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_I(p, o, s)\n# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_I(p, o, s)\n# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_I(p, o, s)\n# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_I(p, o, s)\n# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_I(p, o, s)\n# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_I(p, o, s)\n# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_I(p, o, s)\n# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_I(p, o, s)\n# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_I(p, o, s)\n# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_I(p, o, s)\n# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_I(p, o, s)\n# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_I(p, o, s)\n# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_I(p, o, s)\n# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_I(p, o, s)\n# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_I(p, o, s)\n# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_I(p, o, s)\n# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_I(p, o, s)\n# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_I(p, o, s)\n# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_I(p, o, s)\n# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_I(p, o, s)\n# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_I(p, o, s)\n# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_I(p, o, s)\n# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_I(p, o, s)\n# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_I(p, o, s)\n# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_I(p, o, s)\n# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_I(p, o, s)\n# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_I(p, o, s)\n# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_I(p, o, s)\n# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_I(p, o, s)\n# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_I(p, o, s)\n# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_I(p, o, s)\n# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_I(p, o, s)\n# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_I(p, o, s)\n# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_I(p, o, s)\n# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_I(p, o, s)\n# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_I(p, o, s)\n# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_I(p, o, s)\n# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_I(p, o, s)\n# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_I(p, o, s)\n# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_I(p, o, s)\n# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_I(p, o, s)\n# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_I(p, o, s)\n# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_I(p, o, s)\n# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_I(p, o, s)\n# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_I(p, o, s)\n# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_I(p, o, s)\n# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_I(p, o, s)\n# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_I(p, o, s)\n# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_I(p, o, s)\n# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_I(p, o, s)\n# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_I(p, o, s)\n# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_I(p, o, s)\n# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_I(p, o, s)\n# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_I(p, o, s)\n# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_I(p, o, s)\n# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_I(p, o, s)\n# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_I(p, o, s)\n# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_I(p, o, s)\n# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_I(p, o, s)\n# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_I(p, o, s)\n# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_I(p, o, s)\n# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_I(p, o, s)\n# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_I(p, o, s)\n# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_I(p, o, s)\n# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_I(p, o, s)\n# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_I(p, o, s)\n# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_I(p, o, s)\n# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_I(p, o, s)\n# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_I(p, o, s)\n# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_I(p, o, s)\n# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_I(p, o, s)\n# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_I(p, o, s)\n# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_I(p, o, s)\n#\n# define BOOST_PP_WHILE_1_I(p, o, s) BOOST_PP_IF(p(2, s), BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, o(2, s))\n# define BOOST_PP_WHILE_2_I(p, o, s) BOOST_PP_IF(p(3, s), BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, o(3, s))\n# define BOOST_PP_WHILE_3_I(p, o, s) BOOST_PP_IF(p(4, s), BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, o(4, s))\n# define BOOST_PP_WHILE_4_I(p, o, s) BOOST_PP_IF(p(5, s), BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, o(5, s))\n# define BOOST_PP_WHILE_5_I(p, o, s) BOOST_PP_IF(p(6, s), BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, o(6, s))\n# define BOOST_PP_WHILE_6_I(p, o, s) BOOST_PP_IF(p(7, s), BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, o(7, s))\n# define BOOST_PP_WHILE_7_I(p, o, s) BOOST_PP_IF(p(8, s), BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, o(8, s))\n# define BOOST_PP_WHILE_8_I(p, o, s) BOOST_PP_IF(p(9, s), BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, o(9, s))\n# define BOOST_PP_WHILE_9_I(p, o, s) BOOST_PP_IF(p(10, s), BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, o(10, s))\n# define BOOST_PP_WHILE_10_I(p, o, s) BOOST_PP_IF(p(11, s), BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, o(11, s))\n# define BOOST_PP_WHILE_11_I(p, o, s) BOOST_PP_IF(p(12, s), BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, o(12, s))\n# define BOOST_PP_WHILE_12_I(p, o, s) BOOST_PP_IF(p(13, s), BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, o(13, s))\n# define BOOST_PP_WHILE_13_I(p, o, s) BOOST_PP_IF(p(14, s), BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, o(14, s))\n# define BOOST_PP_WHILE_14_I(p, o, s) BOOST_PP_IF(p(15, s), BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, o(15, s))\n# define BOOST_PP_WHILE_15_I(p, o, s) BOOST_PP_IF(p(16, s), BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, o(16, s))\n# define BOOST_PP_WHILE_16_I(p, o, s) BOOST_PP_IF(p(17, s), BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, o(17, s))\n# define BOOST_PP_WHILE_17_I(p, o, s) BOOST_PP_IF(p(18, s), BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, o(18, s))\n# define BOOST_PP_WHILE_18_I(p, o, s) BOOST_PP_IF(p(19, s), BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, o(19, s))\n# define BOOST_PP_WHILE_19_I(p, o, s) BOOST_PP_IF(p(20, s), BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, o(20, s))\n# define BOOST_PP_WHILE_20_I(p, o, s) BOOST_PP_IF(p(21, s), BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, o(21, s))\n# define BOOST_PP_WHILE_21_I(p, o, s) BOOST_PP_IF(p(22, s), BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, o(22, s))\n# define BOOST_PP_WHILE_22_I(p, o, s) BOOST_PP_IF(p(23, s), BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, o(23, s))\n# define BOOST_PP_WHILE_23_I(p, o, s) BOOST_PP_IF(p(24, s), BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, o(24, s))\n# define BOOST_PP_WHILE_24_I(p, o, s) BOOST_PP_IF(p(25, s), BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, o(25, s))\n# define BOOST_PP_WHILE_25_I(p, o, s) BOOST_PP_IF(p(26, s), BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, o(26, s))\n# define BOOST_PP_WHILE_26_I(p, o, s) BOOST_PP_IF(p(27, s), BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, o(27, s))\n# define BOOST_PP_WHILE_27_I(p, o, s) BOOST_PP_IF(p(28, s), BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, o(28, s))\n# define BOOST_PP_WHILE_28_I(p, o, s) BOOST_PP_IF(p(29, s), BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, o(29, s))\n# define BOOST_PP_WHILE_29_I(p, o, s) BOOST_PP_IF(p(30, s), BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, o(30, s))\n# define BOOST_PP_WHILE_30_I(p, o, s) BOOST_PP_IF(p(31, s), BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, o(31, s))\n# define BOOST_PP_WHILE_31_I(p, o, s) BOOST_PP_IF(p(32, s), BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, o(32, s))\n# define BOOST_PP_WHILE_32_I(p, o, s) BOOST_PP_IF(p(33, s), BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, o(33, s))\n# define BOOST_PP_WHILE_33_I(p, o, s) BOOST_PP_IF(p(34, s), BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, o(34, s))\n# define BOOST_PP_WHILE_34_I(p, o, s) BOOST_PP_IF(p(35, s), BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, o(35, s))\n# define BOOST_PP_WHILE_35_I(p, o, s) BOOST_PP_IF(p(36, s), BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, o(36, s))\n# define BOOST_PP_WHILE_36_I(p, o, s) BOOST_PP_IF(p(37, s), BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, o(37, s))\n# define BOOST_PP_WHILE_37_I(p, o, s) BOOST_PP_IF(p(38, s), BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, o(38, s))\n# define BOOST_PP_WHILE_38_I(p, o, s) BOOST_PP_IF(p(39, s), BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, o(39, s))\n# define BOOST_PP_WHILE_39_I(p, o, s) BOOST_PP_IF(p(40, s), BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, o(40, s))\n# define BOOST_PP_WHILE_40_I(p, o, s) BOOST_PP_IF(p(41, s), BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, o(41, s))\n# define BOOST_PP_WHILE_41_I(p, o, s) BOOST_PP_IF(p(42, s), BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, o(42, s))\n# define BOOST_PP_WHILE_42_I(p, o, s) BOOST_PP_IF(p(43, s), BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, o(43, s))\n# define BOOST_PP_WHILE_43_I(p, o, s) BOOST_PP_IF(p(44, s), BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, o(44, s))\n# define BOOST_PP_WHILE_44_I(p, o, s) BOOST_PP_IF(p(45, s), BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, o(45, s))\n# define BOOST_PP_WHILE_45_I(p, o, s) BOOST_PP_IF(p(46, s), BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, o(46, s))\n# define BOOST_PP_WHILE_46_I(p, o, s) BOOST_PP_IF(p(47, s), BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, o(47, s))\n# define BOOST_PP_WHILE_47_I(p, o, s) BOOST_PP_IF(p(48, s), BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, o(48, s))\n# define BOOST_PP_WHILE_48_I(p, o, s) BOOST_PP_IF(p(49, s), BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, o(49, s))\n# define BOOST_PP_WHILE_49_I(p, o, s) BOOST_PP_IF(p(50, s), BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, o(50, s))\n# define BOOST_PP_WHILE_50_I(p, o, s) BOOST_PP_IF(p(51, s), BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, o(51, s))\n# define BOOST_PP_WHILE_51_I(p, o, s) BOOST_PP_IF(p(52, s), BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, o(52, s))\n# define BOOST_PP_WHILE_52_I(p, o, s) BOOST_PP_IF(p(53, s), BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, o(53, s))\n# define BOOST_PP_WHILE_53_I(p, o, s) BOOST_PP_IF(p(54, s), BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, o(54, s))\n# define BOOST_PP_WHILE_54_I(p, o, s) BOOST_PP_IF(p(55, s), BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, o(55, s))\n# define BOOST_PP_WHILE_55_I(p, o, s) BOOST_PP_IF(p(56, s), BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, o(56, s))\n# define BOOST_PP_WHILE_56_I(p, o, s) BOOST_PP_IF(p(57, s), BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, o(57, s))\n# define BOOST_PP_WHILE_57_I(p, o, s) BOOST_PP_IF(p(58, s), BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, o(58, s))\n# define BOOST_PP_WHILE_58_I(p, o, s) BOOST_PP_IF(p(59, s), BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, o(59, s))\n# define BOOST_PP_WHILE_59_I(p, o, s) BOOST_PP_IF(p(60, s), BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, o(60, s))\n# define BOOST_PP_WHILE_60_I(p, o, s) BOOST_PP_IF(p(61, s), BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, o(61, s))\n# define BOOST_PP_WHILE_61_I(p, o, s) BOOST_PP_IF(p(62, s), BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, o(62, s))\n# define BOOST_PP_WHILE_62_I(p, o, s) BOOST_PP_IF(p(63, s), BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, o(63, s))\n# define BOOST_PP_WHILE_63_I(p, o, s) BOOST_PP_IF(p(64, s), BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, o(64, s))\n# define BOOST_PP_WHILE_64_I(p, o, s) BOOST_PP_IF(p(65, s), BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, o(65, s))\n# define BOOST_PP_WHILE_65_I(p, o, s) BOOST_PP_IF(p(66, s), BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, o(66, s))\n# define BOOST_PP_WHILE_66_I(p, o, s) BOOST_PP_IF(p(67, s), BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, o(67, s))\n# define BOOST_PP_WHILE_67_I(p, o, s) BOOST_PP_IF(p(68, s), BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, o(68, s))\n# define BOOST_PP_WHILE_68_I(p, o, s) BOOST_PP_IF(p(69, s), BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, o(69, s))\n# define BOOST_PP_WHILE_69_I(p, o, s) BOOST_PP_IF(p(70, s), BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, o(70, s))\n# define BOOST_PP_WHILE_70_I(p, o, s) BOOST_PP_IF(p(71, s), BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, o(71, s))\n# define BOOST_PP_WHILE_71_I(p, o, s) BOOST_PP_IF(p(72, s), BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, o(72, s))\n# define BOOST_PP_WHILE_72_I(p, o, s) BOOST_PP_IF(p(73, s), BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, o(73, s))\n# define BOOST_PP_WHILE_73_I(p, o, s) BOOST_PP_IF(p(74, s), BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, o(74, s))\n# define BOOST_PP_WHILE_74_I(p, o, s) BOOST_PP_IF(p(75, s), BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, o(75, s))\n# define BOOST_PP_WHILE_75_I(p, o, s) BOOST_PP_IF(p(76, s), BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, o(76, s))\n# define BOOST_PP_WHILE_76_I(p, o, s) BOOST_PP_IF(p(77, s), BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, o(77, s))\n# define BOOST_PP_WHILE_77_I(p, o, s) BOOST_PP_IF(p(78, s), BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, o(78, s))\n# define BOOST_PP_WHILE_78_I(p, o, s) BOOST_PP_IF(p(79, s), BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, o(79, s))\n# define BOOST_PP_WHILE_79_I(p, o, s) BOOST_PP_IF(p(80, s), BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, o(80, s))\n# define BOOST_PP_WHILE_80_I(p, o, s) BOOST_PP_IF(p(81, s), BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, o(81, s))\n# define BOOST_PP_WHILE_81_I(p, o, s) BOOST_PP_IF(p(82, s), BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, o(82, s))\n# define BOOST_PP_WHILE_82_I(p, o, s) BOOST_PP_IF(p(83, s), BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, o(83, s))\n# define BOOST_PP_WHILE_83_I(p, o, s) BOOST_PP_IF(p(84, s), BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, o(84, s))\n# define BOOST_PP_WHILE_84_I(p, o, s) BOOST_PP_IF(p(85, s), BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, o(85, s))\n# define BOOST_PP_WHILE_85_I(p, o, s) BOOST_PP_IF(p(86, s), BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, o(86, s))\n# define BOOST_PP_WHILE_86_I(p, o, s) BOOST_PP_IF(p(87, s), BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, o(87, s))\n# define BOOST_PP_WHILE_87_I(p, o, s) BOOST_PP_IF(p(88, s), BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, o(88, s))\n# define BOOST_PP_WHILE_88_I(p, o, s) BOOST_PP_IF(p(89, s), BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, o(89, s))\n# define BOOST_PP_WHILE_89_I(p, o, s) BOOST_PP_IF(p(90, s), BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, o(90, s))\n# define BOOST_PP_WHILE_90_I(p, o, s) BOOST_PP_IF(p(91, s), BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, o(91, s))\n# define BOOST_PP_WHILE_91_I(p, o, s) BOOST_PP_IF(p(92, s), BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, o(92, s))\n# define BOOST_PP_WHILE_92_I(p, o, s) BOOST_PP_IF(p(93, s), BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, o(93, s))\n# define BOOST_PP_WHILE_93_I(p, o, s) BOOST_PP_IF(p(94, s), BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, o(94, s))\n# define BOOST_PP_WHILE_94_I(p, o, s) BOOST_PP_IF(p(95, s), BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, o(95, s))\n# define BOOST_PP_WHILE_95_I(p, o, s) BOOST_PP_IF(p(96, s), BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, o(96, s))\n# define BOOST_PP_WHILE_96_I(p, o, s) BOOST_PP_IF(p(97, s), BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, o(97, s))\n# define BOOST_PP_WHILE_97_I(p, o, s) BOOST_PP_IF(p(98, s), BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, o(98, s))\n# define BOOST_PP_WHILE_98_I(p, o, s) BOOST_PP_IF(p(99, s), BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, o(99, s))\n# define BOOST_PP_WHILE_99_I(p, o, s) BOOST_PP_IF(p(100, s), BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, o(100, s))\n# define BOOST_PP_WHILE_100_I(p, o, s) BOOST_PP_IF(p(101, s), BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, o(101, s))\n# define BOOST_PP_WHILE_101_I(p, o, s) BOOST_PP_IF(p(102, s), BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, o(102, s))\n# define BOOST_PP_WHILE_102_I(p, o, s) BOOST_PP_IF(p(103, s), BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, o(103, s))\n# define BOOST_PP_WHILE_103_I(p, o, s) BOOST_PP_IF(p(104, s), BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, o(104, s))\n# define BOOST_PP_WHILE_104_I(p, o, s) BOOST_PP_IF(p(105, s), BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, o(105, s))\n# define BOOST_PP_WHILE_105_I(p, o, s) BOOST_PP_IF(p(106, s), BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, o(106, s))\n# define BOOST_PP_WHILE_106_I(p, o, s) BOOST_PP_IF(p(107, s), BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, o(107, s))\n# define BOOST_PP_WHILE_107_I(p, o, s) BOOST_PP_IF(p(108, s), BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, o(108, s))\n# define BOOST_PP_WHILE_108_I(p, o, s) BOOST_PP_IF(p(109, s), BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, o(109, s))\n# define BOOST_PP_WHILE_109_I(p, o, s) BOOST_PP_IF(p(110, s), BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, o(110, s))\n# define BOOST_PP_WHILE_110_I(p, o, s) BOOST_PP_IF(p(111, s), BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, o(111, s))\n# define BOOST_PP_WHILE_111_I(p, o, s) BOOST_PP_IF(p(112, s), BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, o(112, s))\n# define BOOST_PP_WHILE_112_I(p, o, s) BOOST_PP_IF(p(113, s), BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, o(113, s))\n# define BOOST_PP_WHILE_113_I(p, o, s) BOOST_PP_IF(p(114, s), BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, o(114, s))\n# define BOOST_PP_WHILE_114_I(p, o, s) BOOST_PP_IF(p(115, s), BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, o(115, s))\n# define BOOST_PP_WHILE_115_I(p, o, s) BOOST_PP_IF(p(116, s), BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, o(116, s))\n# define BOOST_PP_WHILE_116_I(p, o, s) BOOST_PP_IF(p(117, s), BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, o(117, s))\n# define BOOST_PP_WHILE_117_I(p, o, s) BOOST_PP_IF(p(118, s), BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, o(118, s))\n# define BOOST_PP_WHILE_118_I(p, o, s) BOOST_PP_IF(p(119, s), BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, o(119, s))\n# define BOOST_PP_WHILE_119_I(p, o, s) BOOST_PP_IF(p(120, s), BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, o(120, s))\n# define BOOST_PP_WHILE_120_I(p, o, s) BOOST_PP_IF(p(121, s), BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, o(121, s))\n# define BOOST_PP_WHILE_121_I(p, o, s) BOOST_PP_IF(p(122, s), BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, o(122, s))\n# define BOOST_PP_WHILE_122_I(p, o, s) BOOST_PP_IF(p(123, s), BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, o(123, s))\n# define BOOST_PP_WHILE_123_I(p, o, s) BOOST_PP_IF(p(124, s), BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, o(124, s))\n# define BOOST_PP_WHILE_124_I(p, o, s) BOOST_PP_IF(p(125, s), BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, o(125, s))\n# define BOOST_PP_WHILE_125_I(p, o, s) BOOST_PP_IF(p(126, s), BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, o(126, s))\n# define BOOST_PP_WHILE_126_I(p, o, s) BOOST_PP_IF(p(127, s), BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, o(127, s))\n# define BOOST_PP_WHILE_127_I(p, o, s) BOOST_PP_IF(p(128, s), BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, o(128, s))\n# define BOOST_PP_WHILE_128_I(p, o, s) BOOST_PP_IF(p(129, s), BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, o(129, s))\n# define BOOST_PP_WHILE_129_I(p, o, s) BOOST_PP_IF(p(130, s), BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, o(130, s))\n# define BOOST_PP_WHILE_130_I(p, o, s) BOOST_PP_IF(p(131, s), BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, o(131, s))\n# define BOOST_PP_WHILE_131_I(p, o, s) BOOST_PP_IF(p(132, s), BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, o(132, s))\n# define BOOST_PP_WHILE_132_I(p, o, s) BOOST_PP_IF(p(133, s), BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, o(133, s))\n# define BOOST_PP_WHILE_133_I(p, o, s) BOOST_PP_IF(p(134, s), BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, o(134, s))\n# define BOOST_PP_WHILE_134_I(p, o, s) BOOST_PP_IF(p(135, s), BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, o(135, s))\n# define BOOST_PP_WHILE_135_I(p, o, s) BOOST_PP_IF(p(136, s), BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, o(136, s))\n# define BOOST_PP_WHILE_136_I(p, o, s) BOOST_PP_IF(p(137, s), BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, o(137, s))\n# define BOOST_PP_WHILE_137_I(p, o, s) BOOST_PP_IF(p(138, s), BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, o(138, s))\n# define BOOST_PP_WHILE_138_I(p, o, s) BOOST_PP_IF(p(139, s), BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, o(139, s))\n# define BOOST_PP_WHILE_139_I(p, o, s) BOOST_PP_IF(p(140, s), BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, o(140, s))\n# define BOOST_PP_WHILE_140_I(p, o, s) BOOST_PP_IF(p(141, s), BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, o(141, s))\n# define BOOST_PP_WHILE_141_I(p, o, s) BOOST_PP_IF(p(142, s), BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, o(142, s))\n# define BOOST_PP_WHILE_142_I(p, o, s) BOOST_PP_IF(p(143, s), BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, o(143, s))\n# define BOOST_PP_WHILE_143_I(p, o, s) BOOST_PP_IF(p(144, s), BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, o(144, s))\n# define BOOST_PP_WHILE_144_I(p, o, s) BOOST_PP_IF(p(145, s), BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, o(145, s))\n# define BOOST_PP_WHILE_145_I(p, o, s) BOOST_PP_IF(p(146, s), BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, o(146, s))\n# define BOOST_PP_WHILE_146_I(p, o, s) BOOST_PP_IF(p(147, s), BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, o(147, s))\n# define BOOST_PP_WHILE_147_I(p, o, s) BOOST_PP_IF(p(148, s), BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, o(148, s))\n# define BOOST_PP_WHILE_148_I(p, o, s) BOOST_PP_IF(p(149, s), BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, o(149, s))\n# define BOOST_PP_WHILE_149_I(p, o, s) BOOST_PP_IF(p(150, s), BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, o(150, s))\n# define BOOST_PP_WHILE_150_I(p, o, s) BOOST_PP_IF(p(151, s), BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, o(151, s))\n# define BOOST_PP_WHILE_151_I(p, o, s) BOOST_PP_IF(p(152, s), BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, o(152, s))\n# define BOOST_PP_WHILE_152_I(p, o, s) BOOST_PP_IF(p(153, s), BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, o(153, s))\n# define BOOST_PP_WHILE_153_I(p, o, s) BOOST_PP_IF(p(154, s), BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, o(154, s))\n# define BOOST_PP_WHILE_154_I(p, o, s) BOOST_PP_IF(p(155, s), BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, o(155, s))\n# define BOOST_PP_WHILE_155_I(p, o, s) BOOST_PP_IF(p(156, s), BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, o(156, s))\n# define BOOST_PP_WHILE_156_I(p, o, s) BOOST_PP_IF(p(157, s), BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, o(157, s))\n# define BOOST_PP_WHILE_157_I(p, o, s) BOOST_PP_IF(p(158, s), BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, o(158, s))\n# define BOOST_PP_WHILE_158_I(p, o, s) BOOST_PP_IF(p(159, s), BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, o(159, s))\n# define BOOST_PP_WHILE_159_I(p, o, s) BOOST_PP_IF(p(160, s), BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, o(160, s))\n# define BOOST_PP_WHILE_160_I(p, o, s) BOOST_PP_IF(p(161, s), BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, o(161, s))\n# define BOOST_PP_WHILE_161_I(p, o, s) BOOST_PP_IF(p(162, s), BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, o(162, s))\n# define BOOST_PP_WHILE_162_I(p, o, s) BOOST_PP_IF(p(163, s), BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, o(163, s))\n# define BOOST_PP_WHILE_163_I(p, o, s) BOOST_PP_IF(p(164, s), BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, o(164, s))\n# define BOOST_PP_WHILE_164_I(p, o, s) BOOST_PP_IF(p(165, s), BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, o(165, s))\n# define BOOST_PP_WHILE_165_I(p, o, s) BOOST_PP_IF(p(166, s), BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, o(166, s))\n# define BOOST_PP_WHILE_166_I(p, o, s) BOOST_PP_IF(p(167, s), BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, o(167, s))\n# define BOOST_PP_WHILE_167_I(p, o, s) BOOST_PP_IF(p(168, s), BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, o(168, s))\n# define BOOST_PP_WHILE_168_I(p, o, s) BOOST_PP_IF(p(169, s), BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, o(169, s))\n# define BOOST_PP_WHILE_169_I(p, o, s) BOOST_PP_IF(p(170, s), BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, o(170, s))\n# define BOOST_PP_WHILE_170_I(p, o, s) BOOST_PP_IF(p(171, s), BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, o(171, s))\n# define BOOST_PP_WHILE_171_I(p, o, s) BOOST_PP_IF(p(172, s), BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, o(172, s))\n# define BOOST_PP_WHILE_172_I(p, o, s) BOOST_PP_IF(p(173, s), BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, o(173, s))\n# define BOOST_PP_WHILE_173_I(p, o, s) BOOST_PP_IF(p(174, s), BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, o(174, s))\n# define BOOST_PP_WHILE_174_I(p, o, s) BOOST_PP_IF(p(175, s), BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, o(175, s))\n# define BOOST_PP_WHILE_175_I(p, o, s) BOOST_PP_IF(p(176, s), BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, o(176, s))\n# define BOOST_PP_WHILE_176_I(p, o, s) BOOST_PP_IF(p(177, s), BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, o(177, s))\n# define BOOST_PP_WHILE_177_I(p, o, s) BOOST_PP_IF(p(178, s), BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, o(178, s))\n# define BOOST_PP_WHILE_178_I(p, o, s) BOOST_PP_IF(p(179, s), BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, o(179, s))\n# define BOOST_PP_WHILE_179_I(p, o, s) BOOST_PP_IF(p(180, s), BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, o(180, s))\n# define BOOST_PP_WHILE_180_I(p, o, s) BOOST_PP_IF(p(181, s), BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, o(181, s))\n# define BOOST_PP_WHILE_181_I(p, o, s) BOOST_PP_IF(p(182, s), BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, o(182, s))\n# define BOOST_PP_WHILE_182_I(p, o, s) BOOST_PP_IF(p(183, s), BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, o(183, s))\n# define BOOST_PP_WHILE_183_I(p, o, s) BOOST_PP_IF(p(184, s), BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, o(184, s))\n# define BOOST_PP_WHILE_184_I(p, o, s) BOOST_PP_IF(p(185, s), BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, o(185, s))\n# define BOOST_PP_WHILE_185_I(p, o, s) BOOST_PP_IF(p(186, s), BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, o(186, s))\n# define BOOST_PP_WHILE_186_I(p, o, s) BOOST_PP_IF(p(187, s), BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, o(187, s))\n# define BOOST_PP_WHILE_187_I(p, o, s) BOOST_PP_IF(p(188, s), BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, o(188, s))\n# define BOOST_PP_WHILE_188_I(p, o, s) BOOST_PP_IF(p(189, s), BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, o(189, s))\n# define BOOST_PP_WHILE_189_I(p, o, s) BOOST_PP_IF(p(190, s), BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, o(190, s))\n# define BOOST_PP_WHILE_190_I(p, o, s) BOOST_PP_IF(p(191, s), BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, o(191, s))\n# define BOOST_PP_WHILE_191_I(p, o, s) BOOST_PP_IF(p(192, s), BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, o(192, s))\n# define BOOST_PP_WHILE_192_I(p, o, s) BOOST_PP_IF(p(193, s), BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, o(193, s))\n# define BOOST_PP_WHILE_193_I(p, o, s) BOOST_PP_IF(p(194, s), BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, o(194, s))\n# define BOOST_PP_WHILE_194_I(p, o, s) BOOST_PP_IF(p(195, s), BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, o(195, s))\n# define BOOST_PP_WHILE_195_I(p, o, s) BOOST_PP_IF(p(196, s), BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, o(196, s))\n# define BOOST_PP_WHILE_196_I(p, o, s) BOOST_PP_IF(p(197, s), BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, o(197, s))\n# define BOOST_PP_WHILE_197_I(p, o, s) BOOST_PP_IF(p(198, s), BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, o(198, s))\n# define BOOST_PP_WHILE_198_I(p, o, s) BOOST_PP_IF(p(199, s), BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, o(199, s))\n# define BOOST_PP_WHILE_199_I(p, o, s) BOOST_PP_IF(p(200, s), BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, o(200, s))\n# define BOOST_PP_WHILE_200_I(p, o, s) BOOST_PP_IF(p(201, s), BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, o(201, s))\n# define BOOST_PP_WHILE_201_I(p, o, s) BOOST_PP_IF(p(202, s), BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, o(202, s))\n# define BOOST_PP_WHILE_202_I(p, o, s) BOOST_PP_IF(p(203, s), BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, o(203, s))\n# define BOOST_PP_WHILE_203_I(p, o, s) BOOST_PP_IF(p(204, s), BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, o(204, s))\n# define BOOST_PP_WHILE_204_I(p, o, s) BOOST_PP_IF(p(205, s), BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, o(205, s))\n# define BOOST_PP_WHILE_205_I(p, o, s) BOOST_PP_IF(p(206, s), BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, o(206, s))\n# define BOOST_PP_WHILE_206_I(p, o, s) BOOST_PP_IF(p(207, s), BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, o(207, s))\n# define BOOST_PP_WHILE_207_I(p, o, s) BOOST_PP_IF(p(208, s), BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, o(208, s))\n# define BOOST_PP_WHILE_208_I(p, o, s) BOOST_PP_IF(p(209, s), BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, o(209, s))\n# define BOOST_PP_WHILE_209_I(p, o, s) BOOST_PP_IF(p(210, s), BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, o(210, s))\n# define BOOST_PP_WHILE_210_I(p, o, s) BOOST_PP_IF(p(211, s), BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, o(211, s))\n# define BOOST_PP_WHILE_211_I(p, o, s) BOOST_PP_IF(p(212, s), BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, o(212, s))\n# define BOOST_PP_WHILE_212_I(p, o, s) BOOST_PP_IF(p(213, s), BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, o(213, s))\n# define BOOST_PP_WHILE_213_I(p, o, s) BOOST_PP_IF(p(214, s), BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, o(214, s))\n# define BOOST_PP_WHILE_214_I(p, o, s) BOOST_PP_IF(p(215, s), BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, o(215, s))\n# define BOOST_PP_WHILE_215_I(p, o, s) BOOST_PP_IF(p(216, s), BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, o(216, s))\n# define BOOST_PP_WHILE_216_I(p, o, s) BOOST_PP_IF(p(217, s), BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, o(217, s))\n# define BOOST_PP_WHILE_217_I(p, o, s) BOOST_PP_IF(p(218, s), BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, o(218, s))\n# define BOOST_PP_WHILE_218_I(p, o, s) BOOST_PP_IF(p(219, s), BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, o(219, s))\n# define BOOST_PP_WHILE_219_I(p, o, s) BOOST_PP_IF(p(220, s), BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, o(220, s))\n# define BOOST_PP_WHILE_220_I(p, o, s) BOOST_PP_IF(p(221, s), BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, o(221, s))\n# define BOOST_PP_WHILE_221_I(p, o, s) BOOST_PP_IF(p(222, s), BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, o(222, s))\n# define BOOST_PP_WHILE_222_I(p, o, s) BOOST_PP_IF(p(223, s), BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, o(223, s))\n# define BOOST_PP_WHILE_223_I(p, o, s) BOOST_PP_IF(p(224, s), BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, o(224, s))\n# define BOOST_PP_WHILE_224_I(p, o, s) BOOST_PP_IF(p(225, s), BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, o(225, s))\n# define BOOST_PP_WHILE_225_I(p, o, s) BOOST_PP_IF(p(226, s), BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, o(226, s))\n# define BOOST_PP_WHILE_226_I(p, o, s) BOOST_PP_IF(p(227, s), BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, o(227, s))\n# define BOOST_PP_WHILE_227_I(p, o, s) BOOST_PP_IF(p(228, s), BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, o(228, s))\n# define BOOST_PP_WHILE_228_I(p, o, s) BOOST_PP_IF(p(229, s), BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, o(229, s))\n# define BOOST_PP_WHILE_229_I(p, o, s) BOOST_PP_IF(p(230, s), BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, o(230, s))\n# define BOOST_PP_WHILE_230_I(p, o, s) BOOST_PP_IF(p(231, s), BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, o(231, s))\n# define BOOST_PP_WHILE_231_I(p, o, s) BOOST_PP_IF(p(232, s), BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, o(232, s))\n# define BOOST_PP_WHILE_232_I(p, o, s) BOOST_PP_IF(p(233, s), BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, o(233, s))\n# define BOOST_PP_WHILE_233_I(p, o, s) BOOST_PP_IF(p(234, s), BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, o(234, s))\n# define BOOST_PP_WHILE_234_I(p, o, s) BOOST_PP_IF(p(235, s), BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, o(235, s))\n# define BOOST_PP_WHILE_235_I(p, o, s) BOOST_PP_IF(p(236, s), BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, o(236, s))\n# define BOOST_PP_WHILE_236_I(p, o, s) BOOST_PP_IF(p(237, s), BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, o(237, s))\n# define BOOST_PP_WHILE_237_I(p, o, s) BOOST_PP_IF(p(238, s), BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, o(238, s))\n# define BOOST_PP_WHILE_238_I(p, o, s) BOOST_PP_IF(p(239, s), BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, o(239, s))\n# define BOOST_PP_WHILE_239_I(p, o, s) BOOST_PP_IF(p(240, s), BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, o(240, s))\n# define BOOST_PP_WHILE_240_I(p, o, s) BOOST_PP_IF(p(241, s), BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, o(241, s))\n# define BOOST_PP_WHILE_241_I(p, o, s) BOOST_PP_IF(p(242, s), BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, o(242, s))\n# define BOOST_PP_WHILE_242_I(p, o, s) BOOST_PP_IF(p(243, s), BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, o(243, s))\n# define BOOST_PP_WHILE_243_I(p, o, s) BOOST_PP_IF(p(244, s), BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, o(244, s))\n# define BOOST_PP_WHILE_244_I(p, o, s) BOOST_PP_IF(p(245, s), BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, o(245, s))\n# define BOOST_PP_WHILE_245_I(p, o, s) BOOST_PP_IF(p(246, s), BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, o(246, s))\n# define BOOST_PP_WHILE_246_I(p, o, s) BOOST_PP_IF(p(247, s), BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, o(247, s))\n# define BOOST_PP_WHILE_247_I(p, o, s) BOOST_PP_IF(p(248, s), BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, o(248, s))\n# define BOOST_PP_WHILE_248_I(p, o, s) BOOST_PP_IF(p(249, s), BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, o(249, s))\n# define BOOST_PP_WHILE_249_I(p, o, s) BOOST_PP_IF(p(250, s), BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, o(250, s))\n# define BOOST_PP_WHILE_250_I(p, o, s) BOOST_PP_IF(p(251, s), BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, o(251, s))\n# define BOOST_PP_WHILE_251_I(p, o, s) BOOST_PP_IF(p(252, s), BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, o(252, s))\n# define BOOST_PP_WHILE_252_I(p, o, s) BOOST_PP_IF(p(253, s), BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, o(253, s))\n# define BOOST_PP_WHILE_253_I(p, o, s) BOOST_PP_IF(p(254, s), BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, o(254, s))\n# define BOOST_PP_WHILE_254_I(p, o, s) BOOST_PP_IF(p(255, s), BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, o(255, s))\n# define BOOST_PP_WHILE_255_I(p, o, s) BOOST_PP_IF(p(256, s), BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, o(256, s))\n# define BOOST_PP_WHILE_256_I(p, o, s) BOOST_PP_IF(p(257, s), BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, o(257, s))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/detail/msvc/while.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_MSVC_WHILE_HPP\n# define BOOST_PREPROCESSOR_CONTROL_DETAIL_MSVC_WHILE_HPP\n#\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_IF(p(2, s), BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, o(2, s))\n# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_IF(p(3, s), BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, o(3, s))\n# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_IF(p(4, s), BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, o(4, s))\n# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_IF(p(5, s), BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, o(5, s))\n# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_IF(p(6, s), BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, o(6, s))\n# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_IF(p(7, s), BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, o(7, s))\n# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_IF(p(8, s), BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, o(8, s))\n# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_IF(p(9, s), BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, o(9, s))\n# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_IF(p(10, s), BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, o(10, s))\n# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_IF(p(11, s), BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, o(11, s))\n# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_IF(p(12, s), BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, o(12, s))\n# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_IF(p(13, s), BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, o(13, s))\n# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_IF(p(14, s), BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, o(14, s))\n# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_IF(p(15, s), BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, o(15, s))\n# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_IF(p(16, s), BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, o(16, s))\n# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_IF(p(17, s), BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, o(17, s))\n# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_IF(p(18, s), BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, o(18, s))\n# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_IF(p(19, s), BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, o(19, s))\n# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_IF(p(20, s), BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, o(20, s))\n# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_IF(p(21, s), BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, o(21, s))\n# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_IF(p(22, s), BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, o(22, s))\n# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_IF(p(23, s), BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, o(23, s))\n# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_IF(p(24, s), BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, o(24, s))\n# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_IF(p(25, s), BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, o(25, s))\n# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_IF(p(26, s), BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, o(26, s))\n# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_IF(p(27, s), BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, o(27, s))\n# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_IF(p(28, s), BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, o(28, s))\n# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_IF(p(29, s), BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, o(29, s))\n# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_IF(p(30, s), BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, o(30, s))\n# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_IF(p(31, s), BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, o(31, s))\n# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_IF(p(32, s), BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, o(32, s))\n# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_IF(p(33, s), BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, o(33, s))\n# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_IF(p(34, s), BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, o(34, s))\n# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_IF(p(35, s), BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, o(35, s))\n# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_IF(p(36, s), BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, o(36, s))\n# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_IF(p(37, s), BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, o(37, s))\n# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_IF(p(38, s), BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, o(38, s))\n# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_IF(p(39, s), BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, o(39, s))\n# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_IF(p(40, s), BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, o(40, s))\n# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_IF(p(41, s), BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, o(41, s))\n# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_IF(p(42, s), BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, o(42, s))\n# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_IF(p(43, s), BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, o(43, s))\n# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_IF(p(44, s), BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, o(44, s))\n# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_IF(p(45, s), BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, o(45, s))\n# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_IF(p(46, s), BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, o(46, s))\n# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_IF(p(47, s), BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, o(47, s))\n# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_IF(p(48, s), BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, o(48, s))\n# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_IF(p(49, s), BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, o(49, s))\n# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_IF(p(50, s), BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, o(50, s))\n# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_IF(p(51, s), BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, o(51, s))\n# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_IF(p(52, s), BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, o(52, s))\n# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_IF(p(53, s), BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, o(53, s))\n# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_IF(p(54, s), BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, o(54, s))\n# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_IF(p(55, s), BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, o(55, s))\n# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_IF(p(56, s), BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, o(56, s))\n# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_IF(p(57, s), BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, o(57, s))\n# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_IF(p(58, s), BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, o(58, s))\n# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_IF(p(59, s), BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, o(59, s))\n# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_IF(p(60, s), BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, o(60, s))\n# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_IF(p(61, s), BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, o(61, s))\n# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_IF(p(62, s), BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, o(62, s))\n# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_IF(p(63, s), BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, o(63, s))\n# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_IF(p(64, s), BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, o(64, s))\n# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_IF(p(65, s), BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, o(65, s))\n# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_IF(p(66, s), BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, o(66, s))\n# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_IF(p(67, s), BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, o(67, s))\n# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_IF(p(68, s), BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, o(68, s))\n# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_IF(p(69, s), BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, o(69, s))\n# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_IF(p(70, s), BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, o(70, s))\n# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_IF(p(71, s), BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, o(71, s))\n# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_IF(p(72, s), BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, o(72, s))\n# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_IF(p(73, s), BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, o(73, s))\n# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_IF(p(74, s), BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, o(74, s))\n# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_IF(p(75, s), BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, o(75, s))\n# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_IF(p(76, s), BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, o(76, s))\n# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_IF(p(77, s), BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, o(77, s))\n# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_IF(p(78, s), BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, o(78, s))\n# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_IF(p(79, s), BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, o(79, s))\n# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_IF(p(80, s), BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, o(80, s))\n# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_IF(p(81, s), BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, o(81, s))\n# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_IF(p(82, s), BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, o(82, s))\n# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_IF(p(83, s), BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, o(83, s))\n# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_IF(p(84, s), BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, o(84, s))\n# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_IF(p(85, s), BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, o(85, s))\n# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_IF(p(86, s), BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, o(86, s))\n# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_IF(p(87, s), BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, o(87, s))\n# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_IF(p(88, s), BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, o(88, s))\n# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_IF(p(89, s), BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, o(89, s))\n# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_IF(p(90, s), BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, o(90, s))\n# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_IF(p(91, s), BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, o(91, s))\n# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_IF(p(92, s), BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, o(92, s))\n# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_IF(p(93, s), BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, o(93, s))\n# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_IF(p(94, s), BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, o(94, s))\n# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_IF(p(95, s), BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, o(95, s))\n# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_IF(p(96, s), BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, o(96, s))\n# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_IF(p(97, s), BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, o(97, s))\n# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_IF(p(98, s), BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, o(98, s))\n# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_IF(p(99, s), BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, o(99, s))\n# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_IF(p(100, s), BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, o(100, s))\n# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_IF(p(101, s), BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, o(101, s))\n# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_IF(p(102, s), BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, o(102, s))\n# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_IF(p(103, s), BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, o(103, s))\n# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_IF(p(104, s), BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, o(104, s))\n# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_IF(p(105, s), BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, o(105, s))\n# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_IF(p(106, s), BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, o(106, s))\n# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_IF(p(107, s), BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, o(107, s))\n# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_IF(p(108, s), BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, o(108, s))\n# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_IF(p(109, s), BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, o(109, s))\n# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_IF(p(110, s), BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, o(110, s))\n# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_IF(p(111, s), BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, o(111, s))\n# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_IF(p(112, s), BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, o(112, s))\n# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_IF(p(113, s), BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, o(113, s))\n# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_IF(p(114, s), BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, o(114, s))\n# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_IF(p(115, s), BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, o(115, s))\n# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_IF(p(116, s), BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, o(116, s))\n# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_IF(p(117, s), BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, o(117, s))\n# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_IF(p(118, s), BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, o(118, s))\n# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_IF(p(119, s), BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, o(119, s))\n# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_IF(p(120, s), BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, o(120, s))\n# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_IF(p(121, s), BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, o(121, s))\n# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_IF(p(122, s), BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, o(122, s))\n# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_IF(p(123, s), BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, o(123, s))\n# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_IF(p(124, s), BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, o(124, s))\n# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_IF(p(125, s), BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, o(125, s))\n# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_IF(p(126, s), BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, o(126, s))\n# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_IF(p(127, s), BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, o(127, s))\n# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_IF(p(128, s), BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, o(128, s))\n# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_IF(p(129, s), BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, o(129, s))\n# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_IF(p(130, s), BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, o(130, s))\n# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_IF(p(131, s), BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, o(131, s))\n# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_IF(p(132, s), BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, o(132, s))\n# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_IF(p(133, s), BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, o(133, s))\n# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_IF(p(134, s), BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, o(134, s))\n# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_IF(p(135, s), BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, o(135, s))\n# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_IF(p(136, s), BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, o(136, s))\n# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_IF(p(137, s), BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, o(137, s))\n# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_IF(p(138, s), BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, o(138, s))\n# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_IF(p(139, s), BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, o(139, s))\n# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_IF(p(140, s), BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, o(140, s))\n# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_IF(p(141, s), BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, o(141, s))\n# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_IF(p(142, s), BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, o(142, s))\n# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_IF(p(143, s), BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, o(143, s))\n# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_IF(p(144, s), BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, o(144, s))\n# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_IF(p(145, s), BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, o(145, s))\n# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_IF(p(146, s), BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, o(146, s))\n# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_IF(p(147, s), BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, o(147, s))\n# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_IF(p(148, s), BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, o(148, s))\n# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_IF(p(149, s), BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, o(149, s))\n# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_IF(p(150, s), BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, o(150, s))\n# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_IF(p(151, s), BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, o(151, s))\n# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_IF(p(152, s), BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, o(152, s))\n# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_IF(p(153, s), BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, o(153, s))\n# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_IF(p(154, s), BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, o(154, s))\n# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_IF(p(155, s), BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, o(155, s))\n# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_IF(p(156, s), BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, o(156, s))\n# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_IF(p(157, s), BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, o(157, s))\n# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_IF(p(158, s), BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, o(158, s))\n# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_IF(p(159, s), BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, o(159, s))\n# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_IF(p(160, s), BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, o(160, s))\n# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_IF(p(161, s), BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, o(161, s))\n# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_IF(p(162, s), BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, o(162, s))\n# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_IF(p(163, s), BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, o(163, s))\n# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_IF(p(164, s), BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, o(164, s))\n# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_IF(p(165, s), BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, o(165, s))\n# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_IF(p(166, s), BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, o(166, s))\n# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_IF(p(167, s), BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, o(167, s))\n# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_IF(p(168, s), BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, o(168, s))\n# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_IF(p(169, s), BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, o(169, s))\n# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_IF(p(170, s), BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, o(170, s))\n# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_IF(p(171, s), BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, o(171, s))\n# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_IF(p(172, s), BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, o(172, s))\n# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_IF(p(173, s), BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, o(173, s))\n# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_IF(p(174, s), BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, o(174, s))\n# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_IF(p(175, s), BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, o(175, s))\n# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_IF(p(176, s), BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, o(176, s))\n# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_IF(p(177, s), BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, o(177, s))\n# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_IF(p(178, s), BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, o(178, s))\n# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_IF(p(179, s), BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, o(179, s))\n# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_IF(p(180, s), BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, o(180, s))\n# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_IF(p(181, s), BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, o(181, s))\n# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_IF(p(182, s), BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, o(182, s))\n# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_IF(p(183, s), BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, o(183, s))\n# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_IF(p(184, s), BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, o(184, s))\n# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_IF(p(185, s), BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, o(185, s))\n# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_IF(p(186, s), BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, o(186, s))\n# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_IF(p(187, s), BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, o(187, s))\n# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_IF(p(188, s), BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, o(188, s))\n# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_IF(p(189, s), BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, o(189, s))\n# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_IF(p(190, s), BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, o(190, s))\n# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_IF(p(191, s), BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, o(191, s))\n# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_IF(p(192, s), BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, o(192, s))\n# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_IF(p(193, s), BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, o(193, s))\n# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_IF(p(194, s), BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, o(194, s))\n# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_IF(p(195, s), BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, o(195, s))\n# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_IF(p(196, s), BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, o(196, s))\n# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_IF(p(197, s), BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, o(197, s))\n# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_IF(p(198, s), BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, o(198, s))\n# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_IF(p(199, s), BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, o(199, s))\n# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_IF(p(200, s), BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, o(200, s))\n# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_IF(p(201, s), BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, o(201, s))\n# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_IF(p(202, s), BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, o(202, s))\n# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_IF(p(203, s), BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, o(203, s))\n# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_IF(p(204, s), BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, o(204, s))\n# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_IF(p(205, s), BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, o(205, s))\n# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_IF(p(206, s), BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, o(206, s))\n# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_IF(p(207, s), BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, o(207, s))\n# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_IF(p(208, s), BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, o(208, s))\n# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_IF(p(209, s), BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, o(209, s))\n# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_IF(p(210, s), BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, o(210, s))\n# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_IF(p(211, s), BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, o(211, s))\n# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_IF(p(212, s), BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, o(212, s))\n# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_IF(p(213, s), BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, o(213, s))\n# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_IF(p(214, s), BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, o(214, s))\n# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_IF(p(215, s), BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, o(215, s))\n# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_IF(p(216, s), BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, o(216, s))\n# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_IF(p(217, s), BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, o(217, s))\n# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_IF(p(218, s), BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, o(218, s))\n# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_IF(p(219, s), BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, o(219, s))\n# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_IF(p(220, s), BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, o(220, s))\n# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_IF(p(221, s), BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, o(221, s))\n# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_IF(p(222, s), BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, o(222, s))\n# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_IF(p(223, s), BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, o(223, s))\n# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_IF(p(224, s), BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, o(224, s))\n# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_IF(p(225, s), BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, o(225, s))\n# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_IF(p(226, s), BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, o(226, s))\n# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_IF(p(227, s), BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, o(227, s))\n# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_IF(p(228, s), BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, o(228, s))\n# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_IF(p(229, s), BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, o(229, s))\n# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_IF(p(230, s), BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, o(230, s))\n# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_IF(p(231, s), BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, o(231, s))\n# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_IF(p(232, s), BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, o(232, s))\n# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_IF(p(233, s), BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, o(233, s))\n# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_IF(p(234, s), BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, o(234, s))\n# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_IF(p(235, s), BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, o(235, s))\n# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_IF(p(236, s), BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, o(236, s))\n# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_IF(p(237, s), BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, o(237, s))\n# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_IF(p(238, s), BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, o(238, s))\n# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_IF(p(239, s), BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, o(239, s))\n# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_IF(p(240, s), BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, o(240, s))\n# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_IF(p(241, s), BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, o(241, s))\n# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_IF(p(242, s), BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, o(242, s))\n# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_IF(p(243, s), BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, o(243, s))\n# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_IF(p(244, s), BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, o(244, s))\n# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_IF(p(245, s), BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, o(245, s))\n# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_IF(p(246, s), BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, o(246, s))\n# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_IF(p(247, s), BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, o(247, s))\n# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_IF(p(248, s), BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, o(248, s))\n# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_IF(p(249, s), BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, o(249, s))\n# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_IF(p(250, s), BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, o(250, s))\n# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_IF(p(251, s), BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, o(251, s))\n# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_IF(p(252, s), BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, o(252, s))\n# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_IF(p(253, s), BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, o(253, s))\n# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_IF(p(254, s), BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, o(254, s))\n# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_IF(p(255, s), BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, o(255, s))\n# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_IF(p(256, s), BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, o(256, s))\n# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_IF(p(257, s), BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, o(257, s))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/detail/while.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP\n# define BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP\n#\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p(2, s)), p, o, s)\n# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p(3, s)), p, o, s)\n# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p(4, s)), p, o, s)\n# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p(5, s)), p, o, s)\n# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_C(BOOST_PP_BOOL(p(6, s)), p, o, s)\n# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_C(BOOST_PP_BOOL(p(7, s)), p, o, s)\n# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_C(BOOST_PP_BOOL(p(8, s)), p, o, s)\n# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_C(BOOST_PP_BOOL(p(9, s)), p, o, s)\n# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_C(BOOST_PP_BOOL(p(10, s)), p, o, s)\n# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_C(BOOST_PP_BOOL(p(11, s)), p, o, s)\n# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_C(BOOST_PP_BOOL(p(12, s)), p, o, s)\n# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_C(BOOST_PP_BOOL(p(13, s)), p, o, s)\n# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_C(BOOST_PP_BOOL(p(14, s)), p, o, s)\n# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_C(BOOST_PP_BOOL(p(15, s)), p, o, s)\n# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_C(BOOST_PP_BOOL(p(16, s)), p, o, s)\n# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_C(BOOST_PP_BOOL(p(17, s)), p, o, s)\n# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_C(BOOST_PP_BOOL(p(18, s)), p, o, s)\n# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_C(BOOST_PP_BOOL(p(19, s)), p, o, s)\n# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_C(BOOST_PP_BOOL(p(20, s)), p, o, s)\n# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_C(BOOST_PP_BOOL(p(21, s)), p, o, s)\n# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_C(BOOST_PP_BOOL(p(22, s)), p, o, s)\n# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_C(BOOST_PP_BOOL(p(23, s)), p, o, s)\n# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_C(BOOST_PP_BOOL(p(24, s)), p, o, s)\n# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_C(BOOST_PP_BOOL(p(25, s)), p, o, s)\n# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_C(BOOST_PP_BOOL(p(26, s)), p, o, s)\n# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_C(BOOST_PP_BOOL(p(27, s)), p, o, s)\n# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_C(BOOST_PP_BOOL(p(28, s)), p, o, s)\n# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_C(BOOST_PP_BOOL(p(29, s)), p, o, s)\n# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_C(BOOST_PP_BOOL(p(30, s)), p, o, s)\n# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_C(BOOST_PP_BOOL(p(31, s)), p, o, s)\n# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_C(BOOST_PP_BOOL(p(32, s)), p, o, s)\n# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_C(BOOST_PP_BOOL(p(33, s)), p, o, s)\n# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_C(BOOST_PP_BOOL(p(34, s)), p, o, s)\n# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_C(BOOST_PP_BOOL(p(35, s)), p, o, s)\n# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_C(BOOST_PP_BOOL(p(36, s)), p, o, s)\n# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_C(BOOST_PP_BOOL(p(37, s)), p, o, s)\n# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_C(BOOST_PP_BOOL(p(38, s)), p, o, s)\n# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_C(BOOST_PP_BOOL(p(39, s)), p, o, s)\n# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_C(BOOST_PP_BOOL(p(40, s)), p, o, s)\n# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_C(BOOST_PP_BOOL(p(41, s)), p, o, s)\n# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_C(BOOST_PP_BOOL(p(42, s)), p, o, s)\n# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_C(BOOST_PP_BOOL(p(43, s)), p, o, s)\n# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_C(BOOST_PP_BOOL(p(44, s)), p, o, s)\n# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_C(BOOST_PP_BOOL(p(45, s)), p, o, s)\n# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_C(BOOST_PP_BOOL(p(46, s)), p, o, s)\n# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_C(BOOST_PP_BOOL(p(47, s)), p, o, s)\n# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_C(BOOST_PP_BOOL(p(48, s)), p, o, s)\n# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_C(BOOST_PP_BOOL(p(49, s)), p, o, s)\n# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_C(BOOST_PP_BOOL(p(50, s)), p, o, s)\n# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_C(BOOST_PP_BOOL(p(51, s)), p, o, s)\n# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_C(BOOST_PP_BOOL(p(52, s)), p, o, s)\n# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_C(BOOST_PP_BOOL(p(53, s)), p, o, s)\n# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_C(BOOST_PP_BOOL(p(54, s)), p, o, s)\n# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_C(BOOST_PP_BOOL(p(55, s)), p, o, s)\n# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_C(BOOST_PP_BOOL(p(56, s)), p, o, s)\n# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_C(BOOST_PP_BOOL(p(57, s)), p, o, s)\n# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_C(BOOST_PP_BOOL(p(58, s)), p, o, s)\n# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_C(BOOST_PP_BOOL(p(59, s)), p, o, s)\n# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_C(BOOST_PP_BOOL(p(60, s)), p, o, s)\n# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_C(BOOST_PP_BOOL(p(61, s)), p, o, s)\n# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_C(BOOST_PP_BOOL(p(62, s)), p, o, s)\n# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_C(BOOST_PP_BOOL(p(63, s)), p, o, s)\n# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_C(BOOST_PP_BOOL(p(64, s)), p, o, s)\n# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_C(BOOST_PP_BOOL(p(65, s)), p, o, s)\n# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_C(BOOST_PP_BOOL(p(66, s)), p, o, s)\n# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_C(BOOST_PP_BOOL(p(67, s)), p, o, s)\n# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_C(BOOST_PP_BOOL(p(68, s)), p, o, s)\n# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_C(BOOST_PP_BOOL(p(69, s)), p, o, s)\n# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_C(BOOST_PP_BOOL(p(70, s)), p, o, s)\n# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_C(BOOST_PP_BOOL(p(71, s)), p, o, s)\n# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_C(BOOST_PP_BOOL(p(72, s)), p, o, s)\n# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_C(BOOST_PP_BOOL(p(73, s)), p, o, s)\n# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_C(BOOST_PP_BOOL(p(74, s)), p, o, s)\n# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_C(BOOST_PP_BOOL(p(75, s)), p, o, s)\n# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_C(BOOST_PP_BOOL(p(76, s)), p, o, s)\n# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_C(BOOST_PP_BOOL(p(77, s)), p, o, s)\n# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_C(BOOST_PP_BOOL(p(78, s)), p, o, s)\n# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_C(BOOST_PP_BOOL(p(79, s)), p, o, s)\n# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_C(BOOST_PP_BOOL(p(80, s)), p, o, s)\n# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_C(BOOST_PP_BOOL(p(81, s)), p, o, s)\n# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_C(BOOST_PP_BOOL(p(82, s)), p, o, s)\n# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_C(BOOST_PP_BOOL(p(83, s)), p, o, s)\n# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_C(BOOST_PP_BOOL(p(84, s)), p, o, s)\n# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_C(BOOST_PP_BOOL(p(85, s)), p, o, s)\n# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_C(BOOST_PP_BOOL(p(86, s)), p, o, s)\n# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_C(BOOST_PP_BOOL(p(87, s)), p, o, s)\n# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_C(BOOST_PP_BOOL(p(88, s)), p, o, s)\n# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_C(BOOST_PP_BOOL(p(89, s)), p, o, s)\n# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_C(BOOST_PP_BOOL(p(90, s)), p, o, s)\n# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_C(BOOST_PP_BOOL(p(91, s)), p, o, s)\n# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_C(BOOST_PP_BOOL(p(92, s)), p, o, s)\n# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_C(BOOST_PP_BOOL(p(93, s)), p, o, s)\n# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_C(BOOST_PP_BOOL(p(94, s)), p, o, s)\n# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_C(BOOST_PP_BOOL(p(95, s)), p, o, s)\n# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_C(BOOST_PP_BOOL(p(96, s)), p, o, s)\n# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_C(BOOST_PP_BOOL(p(97, s)), p, o, s)\n# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_C(BOOST_PP_BOOL(p(98, s)), p, o, s)\n# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_C(BOOST_PP_BOOL(p(99, s)), p, o, s)\n# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_C(BOOST_PP_BOOL(p(100, s)), p, o, s)\n# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_C(BOOST_PP_BOOL(p(101, s)), p, o, s)\n# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_C(BOOST_PP_BOOL(p(102, s)), p, o, s)\n# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_C(BOOST_PP_BOOL(p(103, s)), p, o, s)\n# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_C(BOOST_PP_BOOL(p(104, s)), p, o, s)\n# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_C(BOOST_PP_BOOL(p(105, s)), p, o, s)\n# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_C(BOOST_PP_BOOL(p(106, s)), p, o, s)\n# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_C(BOOST_PP_BOOL(p(107, s)), p, o, s)\n# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_C(BOOST_PP_BOOL(p(108, s)), p, o, s)\n# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_C(BOOST_PP_BOOL(p(109, s)), p, o, s)\n# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_C(BOOST_PP_BOOL(p(110, s)), p, o, s)\n# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_C(BOOST_PP_BOOL(p(111, s)), p, o, s)\n# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_C(BOOST_PP_BOOL(p(112, s)), p, o, s)\n# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_C(BOOST_PP_BOOL(p(113, s)), p, o, s)\n# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_C(BOOST_PP_BOOL(p(114, s)), p, o, s)\n# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_C(BOOST_PP_BOOL(p(115, s)), p, o, s)\n# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_C(BOOST_PP_BOOL(p(116, s)), p, o, s)\n# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_C(BOOST_PP_BOOL(p(117, s)), p, o, s)\n# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_C(BOOST_PP_BOOL(p(118, s)), p, o, s)\n# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_C(BOOST_PP_BOOL(p(119, s)), p, o, s)\n# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_C(BOOST_PP_BOOL(p(120, s)), p, o, s)\n# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_C(BOOST_PP_BOOL(p(121, s)), p, o, s)\n# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_C(BOOST_PP_BOOL(p(122, s)), p, o, s)\n# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_C(BOOST_PP_BOOL(p(123, s)), p, o, s)\n# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_C(BOOST_PP_BOOL(p(124, s)), p, o, s)\n# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_C(BOOST_PP_BOOL(p(125, s)), p, o, s)\n# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_C(BOOST_PP_BOOL(p(126, s)), p, o, s)\n# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_C(BOOST_PP_BOOL(p(127, s)), p, o, s)\n# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_C(BOOST_PP_BOOL(p(128, s)), p, o, s)\n# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p(129, s)), p, o, s)\n# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_C(BOOST_PP_BOOL(p(130, s)), p, o, s)\n# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_C(BOOST_PP_BOOL(p(131, s)), p, o, s)\n# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_C(BOOST_PP_BOOL(p(132, s)), p, o, s)\n# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_C(BOOST_PP_BOOL(p(133, s)), p, o, s)\n# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_C(BOOST_PP_BOOL(p(134, s)), p, o, s)\n# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_C(BOOST_PP_BOOL(p(135, s)), p, o, s)\n# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_C(BOOST_PP_BOOL(p(136, s)), p, o, s)\n# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_C(BOOST_PP_BOOL(p(137, s)), p, o, s)\n# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_C(BOOST_PP_BOOL(p(138, s)), p, o, s)\n# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_C(BOOST_PP_BOOL(p(139, s)), p, o, s)\n# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_C(BOOST_PP_BOOL(p(140, s)), p, o, s)\n# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_C(BOOST_PP_BOOL(p(141, s)), p, o, s)\n# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_C(BOOST_PP_BOOL(p(142, s)), p, o, s)\n# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_C(BOOST_PP_BOOL(p(143, s)), p, o, s)\n# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_C(BOOST_PP_BOOL(p(144, s)), p, o, s)\n# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_C(BOOST_PP_BOOL(p(145, s)), p, o, s)\n# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_C(BOOST_PP_BOOL(p(146, s)), p, o, s)\n# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_C(BOOST_PP_BOOL(p(147, s)), p, o, s)\n# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_C(BOOST_PP_BOOL(p(148, s)), p, o, s)\n# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_C(BOOST_PP_BOOL(p(149, s)), p, o, s)\n# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_C(BOOST_PP_BOOL(p(150, s)), p, o, s)\n# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_C(BOOST_PP_BOOL(p(151, s)), p, o, s)\n# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_C(BOOST_PP_BOOL(p(152, s)), p, o, s)\n# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_C(BOOST_PP_BOOL(p(153, s)), p, o, s)\n# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_C(BOOST_PP_BOOL(p(154, s)), p, o, s)\n# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_C(BOOST_PP_BOOL(p(155, s)), p, o, s)\n# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_C(BOOST_PP_BOOL(p(156, s)), p, o, s)\n# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_C(BOOST_PP_BOOL(p(157, s)), p, o, s)\n# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_C(BOOST_PP_BOOL(p(158, s)), p, o, s)\n# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_C(BOOST_PP_BOOL(p(159, s)), p, o, s)\n# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_C(BOOST_PP_BOOL(p(160, s)), p, o, s)\n# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_C(BOOST_PP_BOOL(p(161, s)), p, o, s)\n# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_C(BOOST_PP_BOOL(p(162, s)), p, o, s)\n# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_C(BOOST_PP_BOOL(p(163, s)), p, o, s)\n# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_C(BOOST_PP_BOOL(p(164, s)), p, o, s)\n# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_C(BOOST_PP_BOOL(p(165, s)), p, o, s)\n# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_C(BOOST_PP_BOOL(p(166, s)), p, o, s)\n# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_C(BOOST_PP_BOOL(p(167, s)), p, o, s)\n# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_C(BOOST_PP_BOOL(p(168, s)), p, o, s)\n# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_C(BOOST_PP_BOOL(p(169, s)), p, o, s)\n# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_C(BOOST_PP_BOOL(p(170, s)), p, o, s)\n# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_C(BOOST_PP_BOOL(p(171, s)), p, o, s)\n# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_C(BOOST_PP_BOOL(p(172, s)), p, o, s)\n# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_C(BOOST_PP_BOOL(p(173, s)), p, o, s)\n# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_C(BOOST_PP_BOOL(p(174, s)), p, o, s)\n# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_C(BOOST_PP_BOOL(p(175, s)), p, o, s)\n# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_C(BOOST_PP_BOOL(p(176, s)), p, o, s)\n# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_C(BOOST_PP_BOOL(p(177, s)), p, o, s)\n# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_C(BOOST_PP_BOOL(p(178, s)), p, o, s)\n# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_C(BOOST_PP_BOOL(p(179, s)), p, o, s)\n# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_C(BOOST_PP_BOOL(p(180, s)), p, o, s)\n# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_C(BOOST_PP_BOOL(p(181, s)), p, o, s)\n# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_C(BOOST_PP_BOOL(p(182, s)), p, o, s)\n# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_C(BOOST_PP_BOOL(p(183, s)), p, o, s)\n# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_C(BOOST_PP_BOOL(p(184, s)), p, o, s)\n# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_C(BOOST_PP_BOOL(p(185, s)), p, o, s)\n# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_C(BOOST_PP_BOOL(p(186, s)), p, o, s)\n# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_C(BOOST_PP_BOOL(p(187, s)), p, o, s)\n# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_C(BOOST_PP_BOOL(p(188, s)), p, o, s)\n# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_C(BOOST_PP_BOOL(p(189, s)), p, o, s)\n# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_C(BOOST_PP_BOOL(p(190, s)), p, o, s)\n# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_C(BOOST_PP_BOOL(p(191, s)), p, o, s)\n# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_C(BOOST_PP_BOOL(p(192, s)), p, o, s)\n# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_C(BOOST_PP_BOOL(p(193, s)), p, o, s)\n# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_C(BOOST_PP_BOOL(p(194, s)), p, o, s)\n# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_C(BOOST_PP_BOOL(p(195, s)), p, o, s)\n# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_C(BOOST_PP_BOOL(p(196, s)), p, o, s)\n# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_C(BOOST_PP_BOOL(p(197, s)), p, o, s)\n# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_C(BOOST_PP_BOOL(p(198, s)), p, o, s)\n# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_C(BOOST_PP_BOOL(p(199, s)), p, o, s)\n# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_C(BOOST_PP_BOOL(p(200, s)), p, o, s)\n# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_C(BOOST_PP_BOOL(p(201, s)), p, o, s)\n# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_C(BOOST_PP_BOOL(p(202, s)), p, o, s)\n# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_C(BOOST_PP_BOOL(p(203, s)), p, o, s)\n# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_C(BOOST_PP_BOOL(p(204, s)), p, o, s)\n# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_C(BOOST_PP_BOOL(p(205, s)), p, o, s)\n# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_C(BOOST_PP_BOOL(p(206, s)), p, o, s)\n# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_C(BOOST_PP_BOOL(p(207, s)), p, o, s)\n# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_C(BOOST_PP_BOOL(p(208, s)), p, o, s)\n# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_C(BOOST_PP_BOOL(p(209, s)), p, o, s)\n# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_C(BOOST_PP_BOOL(p(210, s)), p, o, s)\n# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_C(BOOST_PP_BOOL(p(211, s)), p, o, s)\n# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_C(BOOST_PP_BOOL(p(212, s)), p, o, s)\n# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_C(BOOST_PP_BOOL(p(213, s)), p, o, s)\n# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_C(BOOST_PP_BOOL(p(214, s)), p, o, s)\n# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_C(BOOST_PP_BOOL(p(215, s)), p, o, s)\n# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_C(BOOST_PP_BOOL(p(216, s)), p, o, s)\n# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_C(BOOST_PP_BOOL(p(217, s)), p, o, s)\n# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_C(BOOST_PP_BOOL(p(218, s)), p, o, s)\n# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_C(BOOST_PP_BOOL(p(219, s)), p, o, s)\n# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_C(BOOST_PP_BOOL(p(220, s)), p, o, s)\n# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_C(BOOST_PP_BOOL(p(221, s)), p, o, s)\n# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_C(BOOST_PP_BOOL(p(222, s)), p, o, s)\n# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_C(BOOST_PP_BOOL(p(223, s)), p, o, s)\n# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_C(BOOST_PP_BOOL(p(224, s)), p, o, s)\n# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_C(BOOST_PP_BOOL(p(225, s)), p, o, s)\n# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_C(BOOST_PP_BOOL(p(226, s)), p, o, s)\n# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_C(BOOST_PP_BOOL(p(227, s)), p, o, s)\n# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_C(BOOST_PP_BOOL(p(228, s)), p, o, s)\n# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_C(BOOST_PP_BOOL(p(229, s)), p, o, s)\n# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_C(BOOST_PP_BOOL(p(230, s)), p, o, s)\n# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_C(BOOST_PP_BOOL(p(231, s)), p, o, s)\n# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_C(BOOST_PP_BOOL(p(232, s)), p, o, s)\n# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_C(BOOST_PP_BOOL(p(233, s)), p, o, s)\n# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_C(BOOST_PP_BOOL(p(234, s)), p, o, s)\n# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_C(BOOST_PP_BOOL(p(235, s)), p, o, s)\n# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_C(BOOST_PP_BOOL(p(236, s)), p, o, s)\n# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_C(BOOST_PP_BOOL(p(237, s)), p, o, s)\n# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_C(BOOST_PP_BOOL(p(238, s)), p, o, s)\n# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_C(BOOST_PP_BOOL(p(239, s)), p, o, s)\n# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_C(BOOST_PP_BOOL(p(240, s)), p, o, s)\n# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_C(BOOST_PP_BOOL(p(241, s)), p, o, s)\n# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_C(BOOST_PP_BOOL(p(242, s)), p, o, s)\n# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_C(BOOST_PP_BOOL(p(243, s)), p, o, s)\n# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_C(BOOST_PP_BOOL(p(244, s)), p, o, s)\n# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_C(BOOST_PP_BOOL(p(245, s)), p, o, s)\n# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_C(BOOST_PP_BOOL(p(246, s)), p, o, s)\n# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_C(BOOST_PP_BOOL(p(247, s)), p, o, s)\n# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_C(BOOST_PP_BOOL(p(248, s)), p, o, s)\n# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_C(BOOST_PP_BOOL(p(249, s)), p, o, s)\n# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_C(BOOST_PP_BOOL(p(250, s)), p, o, s)\n# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_C(BOOST_PP_BOOL(p(251, s)), p, o, s)\n# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_C(BOOST_PP_BOOL(p(252, s)), p, o, s)\n# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_C(BOOST_PP_BOOL(p(253, s)), p, o, s)\n# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_C(BOOST_PP_BOOL(p(254, s)), p, o, s)\n# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_C(BOOST_PP_BOOL(p(255, s)), p, o, s)\n# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_C(BOOST_PP_BOOL(p(256, s)), p, o, s)\n# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_C(BOOST_PP_BOOL(p(257, s)), p, o, s)\n#\n# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(2, s))\n# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(3, s))\n# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(4, s))\n# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(5, s))\n# define BOOST_PP_WHILE_5_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(6, s))\n# define BOOST_PP_WHILE_6_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(7, s))\n# define BOOST_PP_WHILE_7_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(8, s))\n# define BOOST_PP_WHILE_8_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(9, s))\n# define BOOST_PP_WHILE_9_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(10, s))\n# define BOOST_PP_WHILE_10_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(11, s))\n# define BOOST_PP_WHILE_11_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(12, s))\n# define BOOST_PP_WHILE_12_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(13, s))\n# define BOOST_PP_WHILE_13_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(14, s))\n# define BOOST_PP_WHILE_14_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(15, s))\n# define BOOST_PP_WHILE_15_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(16, s))\n# define BOOST_PP_WHILE_16_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(17, s))\n# define BOOST_PP_WHILE_17_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(18, s))\n# define BOOST_PP_WHILE_18_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(19, s))\n# define BOOST_PP_WHILE_19_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(20, s))\n# define BOOST_PP_WHILE_20_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(21, s))\n# define BOOST_PP_WHILE_21_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(22, s))\n# define BOOST_PP_WHILE_22_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(23, s))\n# define BOOST_PP_WHILE_23_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(24, s))\n# define BOOST_PP_WHILE_24_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(25, s))\n# define BOOST_PP_WHILE_25_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(26, s))\n# define BOOST_PP_WHILE_26_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(27, s))\n# define BOOST_PP_WHILE_27_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(28, s))\n# define BOOST_PP_WHILE_28_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(29, s))\n# define BOOST_PP_WHILE_29_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(30, s))\n# define BOOST_PP_WHILE_30_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(31, s))\n# define BOOST_PP_WHILE_31_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(32, s))\n# define BOOST_PP_WHILE_32_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(33, s))\n# define BOOST_PP_WHILE_33_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(34, s))\n# define BOOST_PP_WHILE_34_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(35, s))\n# define BOOST_PP_WHILE_35_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(36, s))\n# define BOOST_PP_WHILE_36_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(37, s))\n# define BOOST_PP_WHILE_37_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(38, s))\n# define BOOST_PP_WHILE_38_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(39, s))\n# define BOOST_PP_WHILE_39_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(40, s))\n# define BOOST_PP_WHILE_40_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(41, s))\n# define BOOST_PP_WHILE_41_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(42, s))\n# define BOOST_PP_WHILE_42_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(43, s))\n# define BOOST_PP_WHILE_43_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(44, s))\n# define BOOST_PP_WHILE_44_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(45, s))\n# define BOOST_PP_WHILE_45_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(46, s))\n# define BOOST_PP_WHILE_46_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(47, s))\n# define BOOST_PP_WHILE_47_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(48, s))\n# define BOOST_PP_WHILE_48_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(49, s))\n# define BOOST_PP_WHILE_49_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(50, s))\n# define BOOST_PP_WHILE_50_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(51, s))\n# define BOOST_PP_WHILE_51_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(52, s))\n# define BOOST_PP_WHILE_52_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(53, s))\n# define BOOST_PP_WHILE_53_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(54, s))\n# define BOOST_PP_WHILE_54_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(55, s))\n# define BOOST_PP_WHILE_55_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(56, s))\n# define BOOST_PP_WHILE_56_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(57, s))\n# define BOOST_PP_WHILE_57_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(58, s))\n# define BOOST_PP_WHILE_58_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(59, s))\n# define BOOST_PP_WHILE_59_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(60, s))\n# define BOOST_PP_WHILE_60_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(61, s))\n# define BOOST_PP_WHILE_61_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(62, s))\n# define BOOST_PP_WHILE_62_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(63, s))\n# define BOOST_PP_WHILE_63_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(64, s))\n# define BOOST_PP_WHILE_64_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(65, s))\n# define BOOST_PP_WHILE_65_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(66, s))\n# define BOOST_PP_WHILE_66_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(67, s))\n# define BOOST_PP_WHILE_67_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(68, s))\n# define BOOST_PP_WHILE_68_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(69, s))\n# define BOOST_PP_WHILE_69_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(70, s))\n# define BOOST_PP_WHILE_70_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(71, s))\n# define BOOST_PP_WHILE_71_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(72, s))\n# define BOOST_PP_WHILE_72_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(73, s))\n# define BOOST_PP_WHILE_73_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(74, s))\n# define BOOST_PP_WHILE_74_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(75, s))\n# define BOOST_PP_WHILE_75_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(76, s))\n# define BOOST_PP_WHILE_76_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(77, s))\n# define BOOST_PP_WHILE_77_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(78, s))\n# define BOOST_PP_WHILE_78_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(79, s))\n# define BOOST_PP_WHILE_79_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(80, s))\n# define BOOST_PP_WHILE_80_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(81, s))\n# define BOOST_PP_WHILE_81_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(82, s))\n# define BOOST_PP_WHILE_82_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(83, s))\n# define BOOST_PP_WHILE_83_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(84, s))\n# define BOOST_PP_WHILE_84_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(85, s))\n# define BOOST_PP_WHILE_85_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(86, s))\n# define BOOST_PP_WHILE_86_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(87, s))\n# define BOOST_PP_WHILE_87_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(88, s))\n# define BOOST_PP_WHILE_88_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(89, s))\n# define BOOST_PP_WHILE_89_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(90, s))\n# define BOOST_PP_WHILE_90_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(91, s))\n# define BOOST_PP_WHILE_91_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(92, s))\n# define BOOST_PP_WHILE_92_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(93, s))\n# define BOOST_PP_WHILE_93_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(94, s))\n# define BOOST_PP_WHILE_94_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(95, s))\n# define BOOST_PP_WHILE_95_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(96, s))\n# define BOOST_PP_WHILE_96_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(97, s))\n# define BOOST_PP_WHILE_97_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(98, s))\n# define BOOST_PP_WHILE_98_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(99, s))\n# define BOOST_PP_WHILE_99_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(100, s))\n# define BOOST_PP_WHILE_100_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(101, s))\n# define BOOST_PP_WHILE_101_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(102, s))\n# define BOOST_PP_WHILE_102_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(103, s))\n# define BOOST_PP_WHILE_103_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(104, s))\n# define BOOST_PP_WHILE_104_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(105, s))\n# define BOOST_PP_WHILE_105_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(106, s))\n# define BOOST_PP_WHILE_106_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(107, s))\n# define BOOST_PP_WHILE_107_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(108, s))\n# define BOOST_PP_WHILE_108_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(109, s))\n# define BOOST_PP_WHILE_109_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(110, s))\n# define BOOST_PP_WHILE_110_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(111, s))\n# define BOOST_PP_WHILE_111_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(112, s))\n# define BOOST_PP_WHILE_112_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(113, s))\n# define BOOST_PP_WHILE_113_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(114, s))\n# define BOOST_PP_WHILE_114_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(115, s))\n# define BOOST_PP_WHILE_115_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(116, s))\n# define BOOST_PP_WHILE_116_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(117, s))\n# define BOOST_PP_WHILE_117_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(118, s))\n# define BOOST_PP_WHILE_118_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(119, s))\n# define BOOST_PP_WHILE_119_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(120, s))\n# define BOOST_PP_WHILE_120_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(121, s))\n# define BOOST_PP_WHILE_121_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(122, s))\n# define BOOST_PP_WHILE_122_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(123, s))\n# define BOOST_PP_WHILE_123_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(124, s))\n# define BOOST_PP_WHILE_124_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(125, s))\n# define BOOST_PP_WHILE_125_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(126, s))\n# define BOOST_PP_WHILE_126_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(127, s))\n# define BOOST_PP_WHILE_127_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(128, s))\n# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(129, s))\n# define BOOST_PP_WHILE_129_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(130, s))\n# define BOOST_PP_WHILE_130_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(131, s))\n# define BOOST_PP_WHILE_131_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(132, s))\n# define BOOST_PP_WHILE_132_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(133, s))\n# define BOOST_PP_WHILE_133_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(134, s))\n# define BOOST_PP_WHILE_134_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(135, s))\n# define BOOST_PP_WHILE_135_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(136, s))\n# define BOOST_PP_WHILE_136_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(137, s))\n# define BOOST_PP_WHILE_137_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(138, s))\n# define BOOST_PP_WHILE_138_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(139, s))\n# define BOOST_PP_WHILE_139_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(140, s))\n# define BOOST_PP_WHILE_140_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(141, s))\n# define BOOST_PP_WHILE_141_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(142, s))\n# define BOOST_PP_WHILE_142_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(143, s))\n# define BOOST_PP_WHILE_143_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(144, s))\n# define BOOST_PP_WHILE_144_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(145, s))\n# define BOOST_PP_WHILE_145_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(146, s))\n# define BOOST_PP_WHILE_146_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(147, s))\n# define BOOST_PP_WHILE_147_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(148, s))\n# define BOOST_PP_WHILE_148_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(149, s))\n# define BOOST_PP_WHILE_149_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(150, s))\n# define BOOST_PP_WHILE_150_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(151, s))\n# define BOOST_PP_WHILE_151_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(152, s))\n# define BOOST_PP_WHILE_152_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(153, s))\n# define BOOST_PP_WHILE_153_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(154, s))\n# define BOOST_PP_WHILE_154_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(155, s))\n# define BOOST_PP_WHILE_155_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(156, s))\n# define BOOST_PP_WHILE_156_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(157, s))\n# define BOOST_PP_WHILE_157_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(158, s))\n# define BOOST_PP_WHILE_158_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(159, s))\n# define BOOST_PP_WHILE_159_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(160, s))\n# define BOOST_PP_WHILE_160_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(161, s))\n# define BOOST_PP_WHILE_161_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(162, s))\n# define BOOST_PP_WHILE_162_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(163, s))\n# define BOOST_PP_WHILE_163_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(164, s))\n# define BOOST_PP_WHILE_164_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(165, s))\n# define BOOST_PP_WHILE_165_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(166, s))\n# define BOOST_PP_WHILE_166_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(167, s))\n# define BOOST_PP_WHILE_167_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(168, s))\n# define BOOST_PP_WHILE_168_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(169, s))\n# define BOOST_PP_WHILE_169_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(170, s))\n# define BOOST_PP_WHILE_170_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(171, s))\n# define BOOST_PP_WHILE_171_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(172, s))\n# define BOOST_PP_WHILE_172_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(173, s))\n# define BOOST_PP_WHILE_173_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(174, s))\n# define BOOST_PP_WHILE_174_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(175, s))\n# define BOOST_PP_WHILE_175_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(176, s))\n# define BOOST_PP_WHILE_176_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(177, s))\n# define BOOST_PP_WHILE_177_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(178, s))\n# define BOOST_PP_WHILE_178_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(179, s))\n# define BOOST_PP_WHILE_179_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(180, s))\n# define BOOST_PP_WHILE_180_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(181, s))\n# define BOOST_PP_WHILE_181_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(182, s))\n# define BOOST_PP_WHILE_182_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(183, s))\n# define BOOST_PP_WHILE_183_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(184, s))\n# define BOOST_PP_WHILE_184_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(185, s))\n# define BOOST_PP_WHILE_185_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(186, s))\n# define BOOST_PP_WHILE_186_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(187, s))\n# define BOOST_PP_WHILE_187_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(188, s))\n# define BOOST_PP_WHILE_188_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(189, s))\n# define BOOST_PP_WHILE_189_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(190, s))\n# define BOOST_PP_WHILE_190_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(191, s))\n# define BOOST_PP_WHILE_191_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(192, s))\n# define BOOST_PP_WHILE_192_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(193, s))\n# define BOOST_PP_WHILE_193_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(194, s))\n# define BOOST_PP_WHILE_194_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(195, s))\n# define BOOST_PP_WHILE_195_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(196, s))\n# define BOOST_PP_WHILE_196_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(197, s))\n# define BOOST_PP_WHILE_197_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(198, s))\n# define BOOST_PP_WHILE_198_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(199, s))\n# define BOOST_PP_WHILE_199_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(200, s))\n# define BOOST_PP_WHILE_200_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(201, s))\n# define BOOST_PP_WHILE_201_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(202, s))\n# define BOOST_PP_WHILE_202_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(203, s))\n# define BOOST_PP_WHILE_203_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(204, s))\n# define BOOST_PP_WHILE_204_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(205, s))\n# define BOOST_PP_WHILE_205_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(206, s))\n# define BOOST_PP_WHILE_206_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(207, s))\n# define BOOST_PP_WHILE_207_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(208, s))\n# define BOOST_PP_WHILE_208_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(209, s))\n# define BOOST_PP_WHILE_209_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(210, s))\n# define BOOST_PP_WHILE_210_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(211, s))\n# define BOOST_PP_WHILE_211_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(212, s))\n# define BOOST_PP_WHILE_212_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(213, s))\n# define BOOST_PP_WHILE_213_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(214, s))\n# define BOOST_PP_WHILE_214_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(215, s))\n# define BOOST_PP_WHILE_215_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(216, s))\n# define BOOST_PP_WHILE_216_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(217, s))\n# define BOOST_PP_WHILE_217_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(218, s))\n# define BOOST_PP_WHILE_218_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(219, s))\n# define BOOST_PP_WHILE_219_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(220, s))\n# define BOOST_PP_WHILE_220_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(221, s))\n# define BOOST_PP_WHILE_221_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(222, s))\n# define BOOST_PP_WHILE_222_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(223, s))\n# define BOOST_PP_WHILE_223_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(224, s))\n# define BOOST_PP_WHILE_224_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(225, s))\n# define BOOST_PP_WHILE_225_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(226, s))\n# define BOOST_PP_WHILE_226_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(227, s))\n# define BOOST_PP_WHILE_227_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(228, s))\n# define BOOST_PP_WHILE_228_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(229, s))\n# define BOOST_PP_WHILE_229_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(230, s))\n# define BOOST_PP_WHILE_230_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(231, s))\n# define BOOST_PP_WHILE_231_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(232, s))\n# define BOOST_PP_WHILE_232_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(233, s))\n# define BOOST_PP_WHILE_233_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(234, s))\n# define BOOST_PP_WHILE_234_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(235, s))\n# define BOOST_PP_WHILE_235_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(236, s))\n# define BOOST_PP_WHILE_236_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(237, s))\n# define BOOST_PP_WHILE_237_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(238, s))\n# define BOOST_PP_WHILE_238_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(239, s))\n# define BOOST_PP_WHILE_239_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(240, s))\n# define BOOST_PP_WHILE_240_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(241, s))\n# define BOOST_PP_WHILE_241_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(242, s))\n# define BOOST_PP_WHILE_242_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(243, s))\n# define BOOST_PP_WHILE_243_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(244, s))\n# define BOOST_PP_WHILE_244_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(245, s))\n# define BOOST_PP_WHILE_245_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(246, s))\n# define BOOST_PP_WHILE_246_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(247, s))\n# define BOOST_PP_WHILE_247_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(248, s))\n# define BOOST_PP_WHILE_248_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(249, s))\n# define BOOST_PP_WHILE_249_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(250, s))\n# define BOOST_PP_WHILE_250_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(251, s))\n# define BOOST_PP_WHILE_251_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(252, s))\n# define BOOST_PP_WHILE_252_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(253, s))\n# define BOOST_PP_WHILE_253_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(254, s))\n# define BOOST_PP_WHILE_254_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(255, s))\n# define BOOST_PP_WHILE_255_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(256, s))\n# define BOOST_PP_WHILE_256_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(257, s))\n#\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/expr_if.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_EXPR_IF_HPP\n# define BOOST_PREPROCESSOR_CONTROL_EXPR_IF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n#\n# /* BOOST_PP_EXPR_IF */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_EXPR_IF(cond, expr) BOOST_PP_EXPR_IIF(BOOST_PP_BOOL(cond), expr)\n# else\n#    define BOOST_PP_EXPR_IF(cond, expr) BOOST_PP_EXPR_IF_I(cond, expr)\n#    define BOOST_PP_EXPR_IF_I(cond, expr) BOOST_PP_EXPR_IIF(BOOST_PP_BOOL(cond), expr)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/expr_iif.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP\n# define BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_EXPR_IIF */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_I(bit, expr)\n# else\n#    define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_OO((bit, expr))\n#    define BOOST_PP_EXPR_IIF_OO(par) BOOST_PP_EXPR_IIF_I ## par\n# endif\n#\n# define BOOST_PP_EXPR_IIF_I(bit, expr) BOOST_PP_EXPR_IIF_ ## bit(expr)\n#\n# define BOOST_PP_EXPR_IIF_0(expr)\n# define BOOST_PP_EXPR_IIF_1(expr) expr\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/if.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_IF_HPP\n# define BOOST_PREPROCESSOR_CONTROL_IF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n#\n# /* BOOST_PP_IF */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_IF(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)\n# else\n#    define BOOST_PP_IF(cond, t, f) BOOST_PP_IF_I(cond, t, f)\n#    define BOOST_PP_IF_I(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/iif.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_IIF_HPP\n# define BOOST_PREPROCESSOR_CONTROL_IIF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_I(bit, t, f)\n# else\n#    define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_OO((bit, t, f))\n#    define BOOST_PP_IIF_OO(par) BOOST_PP_IIF_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_ ## bit(t, f)\n# else\n#    define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_II(BOOST_PP_IIF_ ## bit(t, f))\n#    define BOOST_PP_IIF_II(id) id\n# endif\n#\n# define BOOST_PP_IIF_0(t, f) f\n# define BOOST_PP_IIF_1(t, f) t\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control/while.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_WHILE_HPP\n# define BOOST_PREPROCESSOR_CONTROL_WHILE_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/list/fold_left.hpp>\n# include <boost/preprocessor/list/fold_right.hpp>\n# include <boost/preprocessor/logical/bitand.hpp>\n#\n# /* BOOST_PP_WHILE */\n#\n# if 0\n#    define BOOST_PP_WHILE(pred, op, state)\n# endif\n#\n# define BOOST_PP_WHILE BOOST_PP_CAT(BOOST_PP_WHILE_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_CHECK_, BOOST_PP_LIST_FOLD_RIGHT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL))))\n# else\n#    define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)))\n# endif\n#\n# define BOOST_PP_WHILE_F(d, _) 0\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    include <boost/preprocessor/control/detail/edg/while.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    include <boost/preprocessor/control/detail/msvc/while.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    include <boost/preprocessor/control/detail/dmc/while.hpp>\n# else\n#    include <boost/preprocessor/control/detail/while.hpp>\n# endif\n#\n# define BOOST_PP_WHILE_257(p, o, s) BOOST_PP_ERROR(0x0001)\n#\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_1(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_2(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_3(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_4(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_5(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_6(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_7(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_8(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_9(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_10(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_11(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_12(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_13(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_14(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_15(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_16(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_17(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_18(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_19(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_20(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_21(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_22(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_23(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_24(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_25(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_26(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_27(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_28(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_29(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_30(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_31(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_32(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_33(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_34(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_35(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_36(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_37(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_38(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_39(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_40(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_41(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_42(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_43(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_44(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_45(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_46(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_47(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_48(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_49(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_50(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_51(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_52(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_53(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_54(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_55(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_56(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_57(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_58(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_59(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_60(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_61(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_62(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_63(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_64(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_65(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_66(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_67(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_68(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_69(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_70(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_71(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_72(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_73(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_74(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_75(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_76(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_77(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_78(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_79(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_80(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_81(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_82(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_83(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_84(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_85(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_86(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_87(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_88(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_89(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_90(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_91(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_92(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_93(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_94(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_95(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_96(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_97(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_98(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_99(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_100(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_101(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_102(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_103(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_104(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_105(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_106(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_107(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_108(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_109(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_110(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_111(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_112(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_113(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_114(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_115(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_116(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_117(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_118(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_119(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_120(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_121(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_122(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_123(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_124(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_125(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_126(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_127(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_128(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_129(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_130(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_131(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_132(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_133(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_134(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_135(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_136(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_137(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_138(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_139(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_140(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_141(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_142(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_143(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_144(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_145(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_146(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_147(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_148(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_149(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_150(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_151(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_152(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_153(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_154(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_155(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_156(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_157(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_158(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_159(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_160(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_161(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_162(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_163(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_164(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_165(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_166(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_167(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_168(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_169(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_170(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_171(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_172(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_173(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_174(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_175(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_176(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_177(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_178(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_179(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_180(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_181(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_182(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_183(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_184(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_185(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_186(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_187(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_188(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_189(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_190(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_191(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_192(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_193(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_194(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_195(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_196(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_197(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_198(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_199(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_200(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_201(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_202(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_203(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_204(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_205(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_206(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_207(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_208(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_209(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_210(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_211(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_212(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_213(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_214(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_215(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_216(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_217(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_218(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_219(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_220(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_221(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_222(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_223(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_224(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_225(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_226(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_227(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_228(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_229(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_230(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_231(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_232(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_233(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_234(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_235(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_236(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_237(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_238(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_239(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_240(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_241(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_242(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_243(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_244(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_245(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_246(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_247(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_248(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_249(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_250(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_251(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_252(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_253(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_254(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_255(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_256(p, o, s) 0\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/control.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_HPP\n# define BOOST_PREPROCESSOR_CONTROL_HPP\n#\n# include <boost/preprocessor/control/deduce_d.hpp>\n# include <boost/preprocessor/control/expr_if.hpp>\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/control/while.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/debug/assert.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DEBUG_ASSERT_HPP\n# define BOOST_PREPROCESSOR_DEBUG_ASSERT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/not.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# /* BOOST_PP_ASSERT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ASSERT BOOST_PP_ASSERT_D\n# else\n#    define BOOST_PP_ASSERT(cond) BOOST_PP_ASSERT_D(cond)\n# endif\n#\n# define BOOST_PP_ASSERT_D(cond) BOOST_PP_IIF(BOOST_PP_NOT(cond), BOOST_PP_ASSERT_ERROR, BOOST_PP_TUPLE_EAT_1)(...)\n# define BOOST_PP_ASSERT_ERROR(x, y, z)\n#\n# /* BOOST_PP_ASSERT_MSG */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ASSERT_MSG BOOST_PP_ASSERT_MSG_D\n# else\n#    define BOOST_PP_ASSERT_MSG(cond, msg) BOOST_PP_ASSERT_MSG_D(cond, msg)\n# endif\n#\n# define BOOST_PP_ASSERT_MSG_D(cond, msg) BOOST_PP_EXPR_IIF(BOOST_PP_NOT(cond), msg)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/debug/error.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DEBUG_ERROR_HPP\n# define BOOST_PREPROCESSOR_DEBUG_ERROR_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_ERROR */\n#\n# if BOOST_PP_CONFIG_ERRORS\n#    define BOOST_PP_ERROR(code) BOOST_PP_CAT(BOOST_PP_ERROR_, code)\n# endif\n#\n# define BOOST_PP_ERROR_0x0000 BOOST_PP_ERROR(0x0000, BOOST_PP_INDEX_OUT_OF_BOUNDS)\n# define BOOST_PP_ERROR_0x0001 BOOST_PP_ERROR(0x0001, BOOST_PP_WHILE_OVERFLOW)\n# define BOOST_PP_ERROR_0x0002 BOOST_PP_ERROR(0x0002, BOOST_PP_FOR_OVERFLOW)\n# define BOOST_PP_ERROR_0x0003 BOOST_PP_ERROR(0x0003, BOOST_PP_REPEAT_OVERFLOW)\n# define BOOST_PP_ERROR_0x0004 BOOST_PP_ERROR(0x0004, BOOST_PP_LIST_FOLD_OVERFLOW)\n# define BOOST_PP_ERROR_0x0005 BOOST_PP_ERROR(0x0005, BOOST_PP_SEQ_FOLD_OVERFLOW)\n# define BOOST_PP_ERROR_0x0006 BOOST_PP_ERROR(0x0006, BOOST_PP_ARITHMETIC_OVERFLOW)\n# define BOOST_PP_ERROR_0x0007 BOOST_PP_ERROR(0x0007, BOOST_PP_DIVISION_BY_ZERO)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/debug/line.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DEBUG_LINE_HPP\n# define BOOST_PREPROCESSOR_DEBUG_LINE_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/iteration/iterate.hpp>\n# include <boost/preprocessor/stringize.hpp>\n#\n# /* BOOST_PP_LINE */\n#\n# if BOOST_PP_CONFIG_EXTENDED_LINE_INFO\n#    define BOOST_PP_LINE(line, file) line BOOST_PP_CAT(BOOST_PP_LINE_, BOOST_PP_IS_ITERATING)(file)\n#    define BOOST_PP_LINE_BOOST_PP_IS_ITERATING(file) #file\n#    define BOOST_PP_LINE_1(file) BOOST_PP_STRINGIZE(file BOOST_PP_CAT(BOOST_PP_LINE_I_, BOOST_PP_ITERATION_DEPTH())())\n#    define BOOST_PP_LINE_I_1() [BOOST_PP_FRAME_ITERATION(1)]\n#    define BOOST_PP_LINE_I_2() BOOST_PP_LINE_I_1()[BOOST_PP_FRAME_ITERATION(2)]\n#    define BOOST_PP_LINE_I_3() BOOST_PP_LINE_I_2()[BOOST_PP_FRAME_ITERATION(3)]\n#    define BOOST_PP_LINE_I_4() BOOST_PP_LINE_I_3()[BOOST_PP_FRAME_ITERATION(4)]\n#    define BOOST_PP_LINE_I_5() BOOST_PP_LINE_I_4()[BOOST_PP_FRAME_ITERATION(5)]\n# else\n#    define BOOST_PP_LINE(line, file) line __FILE__\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/debug.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DEBUG_HPP\n# define BOOST_PREPROCESSOR_DEBUG_HPP\n#\n# include <boost/preprocessor/debug/assert.hpp>\n# include <boost/preprocessor/debug/line.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/dec.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DEC_HPP\n# define BOOST_PREPROCESSOR_DEC_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/detail/auto_rec.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#     include <boost/preprocessor/detail/dmc/auto_rec.hpp>\n# else\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP\n# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP\n#\n# include <boost/preprocessor/control/iif.hpp>\n#\n# /* BOOST_PP_AUTO_REC */\n#\n# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred)\n#\n# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_128(p) BOOST_PP_NODE_64(p)(p)(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_64(p) BOOST_PP_NODE_32(p)(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_32(p) BOOST_PP_NODE_16(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_16(p) BOOST_PP_NODE_8(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_8(p) BOOST_PP_NODE_4(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_4(p) BOOST_PP_NODE_2(p)(p)\n# define BOOST_PP_NODE_ENTRY_2(p) BOOST_PP_NODE_1(p)\n#\n# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)\n#    define BOOST_PP_NODE_64(p) BOOST_PP_IIF(p(64), BOOST_PP_NODE_32, BOOST_PP_NODE_96)\n#        define BOOST_PP_NODE_32(p) BOOST_PP_IIF(p(32), BOOST_PP_NODE_16, BOOST_PP_NODE_48)\n#            define BOOST_PP_NODE_16(p) BOOST_PP_IIF(p(16), BOOST_PP_NODE_8, BOOST_PP_NODE_24)\n#                define BOOST_PP_NODE_8(p) BOOST_PP_IIF(p(8), BOOST_PP_NODE_4, BOOST_PP_NODE_12)\n#                    define BOOST_PP_NODE_4(p) BOOST_PP_IIF(p(4), BOOST_PP_NODE_2, BOOST_PP_NODE_6)\n#                        define BOOST_PP_NODE_2(p) BOOST_PP_IIF(p(2), BOOST_PP_NODE_1, BOOST_PP_NODE_3)\n#                            define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p(1), 1, 2)\n#                            define BOOST_PP_NODE_3(p) BOOST_PP_IIF(p(3), 3, 4)\n#                        define BOOST_PP_NODE_6(p) BOOST_PP_IIF(p(6), BOOST_PP_NODE_5, BOOST_PP_NODE_7)\n#                            define BOOST_PP_NODE_5(p) BOOST_PP_IIF(p(5), 5, 6)\n#                            define BOOST_PP_NODE_7(p) BOOST_PP_IIF(p(7), 7, 8)\n#                    define BOOST_PP_NODE_12(p) BOOST_PP_IIF(p(12), BOOST_PP_NODE_10, BOOST_PP_NODE_14)\n#                        define BOOST_PP_NODE_10(p) BOOST_PP_IIF(p(10), BOOST_PP_NODE_9, BOOST_PP_NODE_11)\n#                            define BOOST_PP_NODE_9(p) BOOST_PP_IIF(p(9), 9, 10)\n#                            define BOOST_PP_NODE_11(p) BOOST_PP_IIF(p(11), 11, 12)\n#                        define BOOST_PP_NODE_14(p) BOOST_PP_IIF(p(14), BOOST_PP_NODE_13, BOOST_PP_NODE_15)\n#                            define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p(13), 13, 14)\n#                            define BOOST_PP_NODE_15(p) BOOST_PP_IIF(p(15), 15, 16)\n#                define BOOST_PP_NODE_24(p) BOOST_PP_IIF(p(24), BOOST_PP_NODE_20, BOOST_PP_NODE_28)\n#                    define BOOST_PP_NODE_20(p) BOOST_PP_IIF(p(20), BOOST_PP_NODE_18, BOOST_PP_NODE_22)\n#                        define BOOST_PP_NODE_18(p) BOOST_PP_IIF(p(18), BOOST_PP_NODE_17, BOOST_PP_NODE_19)\n#                            define BOOST_PP_NODE_17(p) BOOST_PP_IIF(p(17), 17, 18)\n#                            define BOOST_PP_NODE_19(p) BOOST_PP_IIF(p(19), 19, 20)\n#                        define BOOST_PP_NODE_22(p) BOOST_PP_IIF(p(22), BOOST_PP_NODE_21, BOOST_PP_NODE_23)\n#                            define BOOST_PP_NODE_21(p) BOOST_PP_IIF(p(21), 21, 22)\n#                            define BOOST_PP_NODE_23(p) BOOST_PP_IIF(p(23), 23, 24)\n#                    define BOOST_PP_NODE_28(p) BOOST_PP_IIF(p(28), BOOST_PP_NODE_26, BOOST_PP_NODE_30)\n#                        define BOOST_PP_NODE_26(p) BOOST_PP_IIF(p(26), BOOST_PP_NODE_25, BOOST_PP_NODE_27)\n#                            define BOOST_PP_NODE_25(p) BOOST_PP_IIF(p(25), 25, 26)\n#                            define BOOST_PP_NODE_27(p) BOOST_PP_IIF(p(27), 27, 28)\n#                        define BOOST_PP_NODE_30(p) BOOST_PP_IIF(p(30), BOOST_PP_NODE_29, BOOST_PP_NODE_31)\n#                            define BOOST_PP_NODE_29(p) BOOST_PP_IIF(p(29), 29, 30)\n#                            define BOOST_PP_NODE_31(p) BOOST_PP_IIF(p(31), 31, 32)\n#            define BOOST_PP_NODE_48(p) BOOST_PP_IIF(p(48), BOOST_PP_NODE_40, BOOST_PP_NODE_56)\n#                define BOOST_PP_NODE_40(p) BOOST_PP_IIF(p(40), BOOST_PP_NODE_36, BOOST_PP_NODE_44)\n#                    define BOOST_PP_NODE_36(p) BOOST_PP_IIF(p(36), BOOST_PP_NODE_34, BOOST_PP_NODE_38)\n#                        define BOOST_PP_NODE_34(p) BOOST_PP_IIF(p(34), BOOST_PP_NODE_33, BOOST_PP_NODE_35)\n#                            define BOOST_PP_NODE_33(p) BOOST_PP_IIF(p(33), 33, 34)\n#                            define BOOST_PP_NODE_35(p) BOOST_PP_IIF(p(35), 35, 36)\n#                        define BOOST_PP_NODE_38(p) BOOST_PP_IIF(p(38), BOOST_PP_NODE_37, BOOST_PP_NODE_39)\n#                            define BOOST_PP_NODE_37(p) BOOST_PP_IIF(p(37), 37, 38)\n#                            define BOOST_PP_NODE_39(p) BOOST_PP_IIF(p(39), 39, 40)\n#                    define BOOST_PP_NODE_44(p) BOOST_PP_IIF(p(44), BOOST_PP_NODE_42, BOOST_PP_NODE_46)\n#                        define BOOST_PP_NODE_42(p) BOOST_PP_IIF(p(42), BOOST_PP_NODE_41, BOOST_PP_NODE_43)\n#                            define BOOST_PP_NODE_41(p) BOOST_PP_IIF(p(41), 41, 42)\n#                            define BOOST_PP_NODE_43(p) BOOST_PP_IIF(p(43), 43, 44)\n#                        define BOOST_PP_NODE_46(p) BOOST_PP_IIF(p(46), BOOST_PP_NODE_45, BOOST_PP_NODE_47)\n#                            define BOOST_PP_NODE_45(p) BOOST_PP_IIF(p(45), 45, 46)\n#                            define BOOST_PP_NODE_47(p) BOOST_PP_IIF(p(47), 47, 48)\n#                define BOOST_PP_NODE_56(p) BOOST_PP_IIF(p(56), BOOST_PP_NODE_52, BOOST_PP_NODE_60)\n#                    define BOOST_PP_NODE_52(p) BOOST_PP_IIF(p(52), BOOST_PP_NODE_50, BOOST_PP_NODE_54)\n#                        define BOOST_PP_NODE_50(p) BOOST_PP_IIF(p(50), BOOST_PP_NODE_49, BOOST_PP_NODE_51)\n#                            define BOOST_PP_NODE_49(p) BOOST_PP_IIF(p(49), 49, 50)\n#                            define BOOST_PP_NODE_51(p) BOOST_PP_IIF(p(51), 51, 52)\n#                        define BOOST_PP_NODE_54(p) BOOST_PP_IIF(p(54), BOOST_PP_NODE_53, BOOST_PP_NODE_55)\n#                            define BOOST_PP_NODE_53(p) BOOST_PP_IIF(p(53), 53, 54)\n#                            define BOOST_PP_NODE_55(p) BOOST_PP_IIF(p(55), 55, 56)\n#                    define BOOST_PP_NODE_60(p) BOOST_PP_IIF(p(60), BOOST_PP_NODE_58, BOOST_PP_NODE_62)\n#                        define BOOST_PP_NODE_58(p) BOOST_PP_IIF(p(58), BOOST_PP_NODE_57, BOOST_PP_NODE_59)\n#                            define BOOST_PP_NODE_57(p) BOOST_PP_IIF(p(57), 57, 58)\n#                            define BOOST_PP_NODE_59(p) BOOST_PP_IIF(p(59), 59, 60)\n#                        define BOOST_PP_NODE_62(p) BOOST_PP_IIF(p(62), BOOST_PP_NODE_61, BOOST_PP_NODE_63)\n#                            define BOOST_PP_NODE_61(p) BOOST_PP_IIF(p(61), 61, 62)\n#                            define BOOST_PP_NODE_63(p) BOOST_PP_IIF(p(63), 63, 64)\n#        define BOOST_PP_NODE_96(p) BOOST_PP_IIF(p(96), BOOST_PP_NODE_80, BOOST_PP_NODE_112)\n#            define BOOST_PP_NODE_80(p) BOOST_PP_IIF(p(80), BOOST_PP_NODE_72, BOOST_PP_NODE_88)\n#                define BOOST_PP_NODE_72(p) BOOST_PP_IIF(p(72), BOOST_PP_NODE_68, BOOST_PP_NODE_76)\n#                    define BOOST_PP_NODE_68(p) BOOST_PP_IIF(p(68), BOOST_PP_NODE_66, BOOST_PP_NODE_70)\n#                        define BOOST_PP_NODE_66(p) BOOST_PP_IIF(p(66), BOOST_PP_NODE_65, BOOST_PP_NODE_67)\n#                            define BOOST_PP_NODE_65(p) BOOST_PP_IIF(p(65), 65, 66)\n#                            define BOOST_PP_NODE_67(p) BOOST_PP_IIF(p(67), 67, 68)\n#                        define BOOST_PP_NODE_70(p) BOOST_PP_IIF(p(70), BOOST_PP_NODE_69, BOOST_PP_NODE_71)\n#                            define BOOST_PP_NODE_69(p) BOOST_PP_IIF(p(69), 69, 70)\n#                            define BOOST_PP_NODE_71(p) BOOST_PP_IIF(p(71), 71, 72)\n#                    define BOOST_PP_NODE_76(p) BOOST_PP_IIF(p(76), BOOST_PP_NODE_74, BOOST_PP_NODE_78)\n#                        define BOOST_PP_NODE_74(p) BOOST_PP_IIF(p(74), BOOST_PP_NODE_73, BOOST_PP_NODE_75)\n#                            define BOOST_PP_NODE_73(p) BOOST_PP_IIF(p(73), 73, 74)\n#                            define BOOST_PP_NODE_75(p) BOOST_PP_IIF(p(75), 75, 76)\n#                        define BOOST_PP_NODE_78(p) BOOST_PP_IIF(p(78), BOOST_PP_NODE_77, BOOST_PP_NODE_79)\n#                            define BOOST_PP_NODE_77(p) BOOST_PP_IIF(p(77), 77, 78)\n#                            define BOOST_PP_NODE_79(p) BOOST_PP_IIF(p(79), 79, 80)\n#                define BOOST_PP_NODE_88(p) BOOST_PP_IIF(p(88), BOOST_PP_NODE_84, BOOST_PP_NODE_92)\n#                    define BOOST_PP_NODE_84(p) BOOST_PP_IIF(p(84), BOOST_PP_NODE_82, BOOST_PP_NODE_86)\n#                        define BOOST_PP_NODE_82(p) BOOST_PP_IIF(p(82), BOOST_PP_NODE_81, BOOST_PP_NODE_83)\n#                            define BOOST_PP_NODE_81(p) BOOST_PP_IIF(p(81), 81, 82)\n#                            define BOOST_PP_NODE_83(p) BOOST_PP_IIF(p(83), 83, 84)\n#                        define BOOST_PP_NODE_86(p) BOOST_PP_IIF(p(86), BOOST_PP_NODE_85, BOOST_PP_NODE_87)\n#                            define BOOST_PP_NODE_85(p) BOOST_PP_IIF(p(85), 85, 86)\n#                            define BOOST_PP_NODE_87(p) BOOST_PP_IIF(p(87), 87, 88)\n#                    define BOOST_PP_NODE_92(p) BOOST_PP_IIF(p(92), BOOST_PP_NODE_90, BOOST_PP_NODE_94)\n#                        define BOOST_PP_NODE_90(p) BOOST_PP_IIF(p(90), BOOST_PP_NODE_89, BOOST_PP_NODE_91)\n#                            define BOOST_PP_NODE_89(p) BOOST_PP_IIF(p(89), 89, 90)\n#                            define BOOST_PP_NODE_91(p) BOOST_PP_IIF(p(91), 91, 92)\n#                        define BOOST_PP_NODE_94(p) BOOST_PP_IIF(p(94), BOOST_PP_NODE_93, BOOST_PP_NODE_95)\n#                            define BOOST_PP_NODE_93(p) BOOST_PP_IIF(p(93), 93, 94)\n#                            define BOOST_PP_NODE_95(p) BOOST_PP_IIF(p(95), 95, 96)\n#            define BOOST_PP_NODE_112(p) BOOST_PP_IIF(p(112), BOOST_PP_NODE_104, BOOST_PP_NODE_120)\n#                define BOOST_PP_NODE_104(p) BOOST_PP_IIF(p(104), BOOST_PP_NODE_100, BOOST_PP_NODE_108)\n#                    define BOOST_PP_NODE_100(p) BOOST_PP_IIF(p(100), BOOST_PP_NODE_98, BOOST_PP_NODE_102)\n#                        define BOOST_PP_NODE_98(p) BOOST_PP_IIF(p(98), BOOST_PP_NODE_97, BOOST_PP_NODE_99)\n#                            define BOOST_PP_NODE_97(p) BOOST_PP_IIF(p(97), 97, 98)\n#                            define BOOST_PP_NODE_99(p) BOOST_PP_IIF(p(99), 99, 100)\n#                        define BOOST_PP_NODE_102(p) BOOST_PP_IIF(p(102), BOOST_PP_NODE_101, BOOST_PP_NODE_103)\n#                            define BOOST_PP_NODE_101(p) BOOST_PP_IIF(p(101), 101, 102)\n#                            define BOOST_PP_NODE_103(p) BOOST_PP_IIF(p(103), 103, 104)\n#                    define BOOST_PP_NODE_108(p) BOOST_PP_IIF(p(108), BOOST_PP_NODE_106, BOOST_PP_NODE_110)\n#                        define BOOST_PP_NODE_106(p) BOOST_PP_IIF(p(106), BOOST_PP_NODE_105, BOOST_PP_NODE_107)\n#                            define BOOST_PP_NODE_105(p) BOOST_PP_IIF(p(105), 105, 106)\n#                            define BOOST_PP_NODE_107(p) BOOST_PP_IIF(p(107), 107, 108)\n#                        define BOOST_PP_NODE_110(p) BOOST_PP_IIF(p(110), BOOST_PP_NODE_109, BOOST_PP_NODE_111)\n#                            define BOOST_PP_NODE_109(p) BOOST_PP_IIF(p(109), 109, 110)\n#                            define BOOST_PP_NODE_111(p) BOOST_PP_IIF(p(111), 111, 112)\n#                define BOOST_PP_NODE_120(p) BOOST_PP_IIF(p(120), BOOST_PP_NODE_116, BOOST_PP_NODE_124)\n#                    define BOOST_PP_NODE_116(p) BOOST_PP_IIF(p(116), BOOST_PP_NODE_114, BOOST_PP_NODE_118)\n#                        define BOOST_PP_NODE_114(p) BOOST_PP_IIF(p(114), BOOST_PP_NODE_113, BOOST_PP_NODE_115)\n#                            define BOOST_PP_NODE_113(p) BOOST_PP_IIF(p(113), 113, 114)\n#                            define BOOST_PP_NODE_115(p) BOOST_PP_IIF(p(115), 115, 116)\n#                        define BOOST_PP_NODE_118(p) BOOST_PP_IIF(p(118), BOOST_PP_NODE_117, BOOST_PP_NODE_119)\n#                            define BOOST_PP_NODE_117(p) BOOST_PP_IIF(p(117), 117, 118)\n#                            define BOOST_PP_NODE_119(p) BOOST_PP_IIF(p(119), 119, 120)\n#                    define BOOST_PP_NODE_124(p) BOOST_PP_IIF(p(124), BOOST_PP_NODE_122, BOOST_PP_NODE_126)\n#                        define BOOST_PP_NODE_122(p) BOOST_PP_IIF(p(122), BOOST_PP_NODE_121, BOOST_PP_NODE_123)\n#                            define BOOST_PP_NODE_121(p) BOOST_PP_IIF(p(121), 121, 122)\n#                            define BOOST_PP_NODE_123(p) BOOST_PP_IIF(p(123), 123, 124)\n#                        define BOOST_PP_NODE_126(p) BOOST_PP_IIF(p(126), BOOST_PP_NODE_125, BOOST_PP_NODE_127)\n#                            define BOOST_PP_NODE_125(p) BOOST_PP_IIF(p(125), 125, 126)\n#                            define BOOST_PP_NODE_127(p) BOOST_PP_IIF(p(127), 127, 128)\n#    define BOOST_PP_NODE_192(p) BOOST_PP_IIF(p(192), BOOST_PP_NODE_160, BOOST_PP_NODE_224)\n#        define BOOST_PP_NODE_160(p) BOOST_PP_IIF(p(160), BOOST_PP_NODE_144, BOOST_PP_NODE_176)\n#            define BOOST_PP_NODE_144(p) BOOST_PP_IIF(p(144), BOOST_PP_NODE_136, BOOST_PP_NODE_152)\n#                define BOOST_PP_NODE_136(p) BOOST_PP_IIF(p(136), BOOST_PP_NODE_132, BOOST_PP_NODE_140)\n#                    define BOOST_PP_NODE_132(p) BOOST_PP_IIF(p(132), BOOST_PP_NODE_130, BOOST_PP_NODE_134)\n#                        define BOOST_PP_NODE_130(p) BOOST_PP_IIF(p(130), BOOST_PP_NODE_129, BOOST_PP_NODE_131)\n#                            define BOOST_PP_NODE_129(p) BOOST_PP_IIF(p(129), 129, 130)\n#                            define BOOST_PP_NODE_131(p) BOOST_PP_IIF(p(131), 131, 132)\n#                        define BOOST_PP_NODE_134(p) BOOST_PP_IIF(p(134), BOOST_PP_NODE_133, BOOST_PP_NODE_135)\n#                            define BOOST_PP_NODE_133(p) BOOST_PP_IIF(p(133), 133, 134)\n#                            define BOOST_PP_NODE_135(p) BOOST_PP_IIF(p(135), 135, 136)\n#                    define BOOST_PP_NODE_140(p) BOOST_PP_IIF(p(140), BOOST_PP_NODE_138, BOOST_PP_NODE_142)\n#                        define BOOST_PP_NODE_138(p) BOOST_PP_IIF(p(138), BOOST_PP_NODE_137, BOOST_PP_NODE_139)\n#                            define BOOST_PP_NODE_137(p) BOOST_PP_IIF(p(137), 137, 138)\n#                            define BOOST_PP_NODE_139(p) BOOST_PP_IIF(p(139), 139, 140)\n#                        define BOOST_PP_NODE_142(p) BOOST_PP_IIF(p(142), BOOST_PP_NODE_141, BOOST_PP_NODE_143)\n#                            define BOOST_PP_NODE_141(p) BOOST_PP_IIF(p(141), 141, 142)\n#                            define BOOST_PP_NODE_143(p) BOOST_PP_IIF(p(143), 143, 144)\n#                define BOOST_PP_NODE_152(p) BOOST_PP_IIF(p(152), BOOST_PP_NODE_148, BOOST_PP_NODE_156)\n#                    define BOOST_PP_NODE_148(p) BOOST_PP_IIF(p(148), BOOST_PP_NODE_146, BOOST_PP_NODE_150)\n#                        define BOOST_PP_NODE_146(p) BOOST_PP_IIF(p(146), BOOST_PP_NODE_145, BOOST_PP_NODE_147)\n#                            define BOOST_PP_NODE_145(p) BOOST_PP_IIF(p(145), 145, 146)\n#                            define BOOST_PP_NODE_147(p) BOOST_PP_IIF(p(147), 147, 148)\n#                        define BOOST_PP_NODE_150(p) BOOST_PP_IIF(p(150), BOOST_PP_NODE_149, BOOST_PP_NODE_151)\n#                            define BOOST_PP_NODE_149(p) BOOST_PP_IIF(p(149), 149, 150)\n#                            define BOOST_PP_NODE_151(p) BOOST_PP_IIF(p(151), 151, 152)\n#                    define BOOST_PP_NODE_156(p) BOOST_PP_IIF(p(156), BOOST_PP_NODE_154, BOOST_PP_NODE_158)\n#                        define BOOST_PP_NODE_154(p) BOOST_PP_IIF(p(154), BOOST_PP_NODE_153, BOOST_PP_NODE_155)\n#                            define BOOST_PP_NODE_153(p) BOOST_PP_IIF(p(153), 153, 154)\n#                            define BOOST_PP_NODE_155(p) BOOST_PP_IIF(p(155), 155, 156)\n#                        define BOOST_PP_NODE_158(p) BOOST_PP_IIF(p(158), BOOST_PP_NODE_157, BOOST_PP_NODE_159)\n#                            define BOOST_PP_NODE_157(p) BOOST_PP_IIF(p(157), 157, 158)\n#                            define BOOST_PP_NODE_159(p) BOOST_PP_IIF(p(159), 159, 160)\n#            define BOOST_PP_NODE_176(p) BOOST_PP_IIF(p(176), BOOST_PP_NODE_168, BOOST_PP_NODE_184)\n#                define BOOST_PP_NODE_168(p) BOOST_PP_IIF(p(168), BOOST_PP_NODE_164, BOOST_PP_NODE_172)\n#                    define BOOST_PP_NODE_164(p) BOOST_PP_IIF(p(164), BOOST_PP_NODE_162, BOOST_PP_NODE_166)\n#                        define BOOST_PP_NODE_162(p) BOOST_PP_IIF(p(162), BOOST_PP_NODE_161, BOOST_PP_NODE_163)\n#                            define BOOST_PP_NODE_161(p) BOOST_PP_IIF(p(161), 161, 162)\n#                            define BOOST_PP_NODE_163(p) BOOST_PP_IIF(p(163), 163, 164)\n#                        define BOOST_PP_NODE_166(p) BOOST_PP_IIF(p(166), BOOST_PP_NODE_165, BOOST_PP_NODE_167)\n#                            define BOOST_PP_NODE_165(p) BOOST_PP_IIF(p(165), 165, 166)\n#                            define BOOST_PP_NODE_167(p) BOOST_PP_IIF(p(167), 167, 168)\n#                    define BOOST_PP_NODE_172(p) BOOST_PP_IIF(p(172), BOOST_PP_NODE_170, BOOST_PP_NODE_174)\n#                        define BOOST_PP_NODE_170(p) BOOST_PP_IIF(p(170), BOOST_PP_NODE_169, BOOST_PP_NODE_171)\n#                            define BOOST_PP_NODE_169(p) BOOST_PP_IIF(p(169), 169, 170)\n#                            define BOOST_PP_NODE_171(p) BOOST_PP_IIF(p(171), 171, 172)\n#                        define BOOST_PP_NODE_174(p) BOOST_PP_IIF(p(174), BOOST_PP_NODE_173, BOOST_PP_NODE_175)\n#                            define BOOST_PP_NODE_173(p) BOOST_PP_IIF(p(173), 173, 174)\n#                            define BOOST_PP_NODE_175(p) BOOST_PP_IIF(p(175), 175, 176)\n#                define BOOST_PP_NODE_184(p) BOOST_PP_IIF(p(184), BOOST_PP_NODE_180, BOOST_PP_NODE_188)\n#                    define BOOST_PP_NODE_180(p) BOOST_PP_IIF(p(180), BOOST_PP_NODE_178, BOOST_PP_NODE_182)\n#                        define BOOST_PP_NODE_178(p) BOOST_PP_IIF(p(178), BOOST_PP_NODE_177, BOOST_PP_NODE_179)\n#                            define BOOST_PP_NODE_177(p) BOOST_PP_IIF(p(177), 177, 178)\n#                            define BOOST_PP_NODE_179(p) BOOST_PP_IIF(p(179), 179, 180)\n#                        define BOOST_PP_NODE_182(p) BOOST_PP_IIF(p(182), BOOST_PP_NODE_181, BOOST_PP_NODE_183)\n#                            define BOOST_PP_NODE_181(p) BOOST_PP_IIF(p(181), 181, 182)\n#                            define BOOST_PP_NODE_183(p) BOOST_PP_IIF(p(183), 183, 184)\n#                    define BOOST_PP_NODE_188(p) BOOST_PP_IIF(p(188), BOOST_PP_NODE_186, BOOST_PP_NODE_190)\n#                        define BOOST_PP_NODE_186(p) BOOST_PP_IIF(p(186), BOOST_PP_NODE_185, BOOST_PP_NODE_187)\n#                            define BOOST_PP_NODE_185(p) BOOST_PP_IIF(p(185), 185, 186)\n#                            define BOOST_PP_NODE_187(p) BOOST_PP_IIF(p(187), 187, 188)\n#                        define BOOST_PP_NODE_190(p) BOOST_PP_IIF(p(190), BOOST_PP_NODE_189, BOOST_PP_NODE_191)\n#                            define BOOST_PP_NODE_189(p) BOOST_PP_IIF(p(189), 189, 190)\n#                            define BOOST_PP_NODE_191(p) BOOST_PP_IIF(p(191), 191, 192)\n#        define BOOST_PP_NODE_224(p) BOOST_PP_IIF(p(224), BOOST_PP_NODE_208, BOOST_PP_NODE_240)\n#            define BOOST_PP_NODE_208(p) BOOST_PP_IIF(p(208), BOOST_PP_NODE_200, BOOST_PP_NODE_216)\n#                define BOOST_PP_NODE_200(p) BOOST_PP_IIF(p(200), BOOST_PP_NODE_196, BOOST_PP_NODE_204)\n#                    define BOOST_PP_NODE_196(p) BOOST_PP_IIF(p(196), BOOST_PP_NODE_194, BOOST_PP_NODE_198)\n#                        define BOOST_PP_NODE_194(p) BOOST_PP_IIF(p(194), BOOST_PP_NODE_193, BOOST_PP_NODE_195)\n#                            define BOOST_PP_NODE_193(p) BOOST_PP_IIF(p(193), 193, 194)\n#                            define BOOST_PP_NODE_195(p) BOOST_PP_IIF(p(195), 195, 196)\n#                        define BOOST_PP_NODE_198(p) BOOST_PP_IIF(p(198), BOOST_PP_NODE_197, BOOST_PP_NODE_199)\n#                            define BOOST_PP_NODE_197(p) BOOST_PP_IIF(p(197), 197, 198)\n#                            define BOOST_PP_NODE_199(p) BOOST_PP_IIF(p(199), 199, 200)\n#                    define BOOST_PP_NODE_204(p) BOOST_PP_IIF(p(204), BOOST_PP_NODE_202, BOOST_PP_NODE_206)\n#                        define BOOST_PP_NODE_202(p) BOOST_PP_IIF(p(202), BOOST_PP_NODE_201, BOOST_PP_NODE_203)\n#                            define BOOST_PP_NODE_201(p) BOOST_PP_IIF(p(201), 201, 202)\n#                            define BOOST_PP_NODE_203(p) BOOST_PP_IIF(p(203), 203, 204)\n#                        define BOOST_PP_NODE_206(p) BOOST_PP_IIF(p(206), BOOST_PP_NODE_205, BOOST_PP_NODE_207)\n#                            define BOOST_PP_NODE_205(p) BOOST_PP_IIF(p(205), 205, 206)\n#                            define BOOST_PP_NODE_207(p) BOOST_PP_IIF(p(207), 207, 208)\n#                define BOOST_PP_NODE_216(p) BOOST_PP_IIF(p(216), BOOST_PP_NODE_212, BOOST_PP_NODE_220)\n#                    define BOOST_PP_NODE_212(p) BOOST_PP_IIF(p(212), BOOST_PP_NODE_210, BOOST_PP_NODE_214)\n#                        define BOOST_PP_NODE_210(p) BOOST_PP_IIF(p(210), BOOST_PP_NODE_209, BOOST_PP_NODE_211)\n#                            define BOOST_PP_NODE_209(p) BOOST_PP_IIF(p(209), 209, 210)\n#                            define BOOST_PP_NODE_211(p) BOOST_PP_IIF(p(211), 211, 212)\n#                        define BOOST_PP_NODE_214(p) BOOST_PP_IIF(p(214), BOOST_PP_NODE_213, BOOST_PP_NODE_215)\n#                            define BOOST_PP_NODE_213(p) BOOST_PP_IIF(p(213), 213, 214)\n#                            define BOOST_PP_NODE_215(p) BOOST_PP_IIF(p(215), 215, 216)\n#                    define BOOST_PP_NODE_220(p) BOOST_PP_IIF(p(220), BOOST_PP_NODE_218, BOOST_PP_NODE_222)\n#                        define BOOST_PP_NODE_218(p) BOOST_PP_IIF(p(218), BOOST_PP_NODE_217, BOOST_PP_NODE_219)\n#                            define BOOST_PP_NODE_217(p) BOOST_PP_IIF(p(217), 217, 218)\n#                            define BOOST_PP_NODE_219(p) BOOST_PP_IIF(p(219), 219, 220)\n#                        define BOOST_PP_NODE_222(p) BOOST_PP_IIF(p(222), BOOST_PP_NODE_221, BOOST_PP_NODE_223)\n#                            define BOOST_PP_NODE_221(p) BOOST_PP_IIF(p(221), 221, 222)\n#                            define BOOST_PP_NODE_223(p) BOOST_PP_IIF(p(223), 223, 224)\n#            define BOOST_PP_NODE_240(p) BOOST_PP_IIF(p(240), BOOST_PP_NODE_232, BOOST_PP_NODE_248)\n#                define BOOST_PP_NODE_232(p) BOOST_PP_IIF(p(232), BOOST_PP_NODE_228, BOOST_PP_NODE_236)\n#                    define BOOST_PP_NODE_228(p) BOOST_PP_IIF(p(228), BOOST_PP_NODE_226, BOOST_PP_NODE_230)\n#                        define BOOST_PP_NODE_226(p) BOOST_PP_IIF(p(226), BOOST_PP_NODE_225, BOOST_PP_NODE_227)\n#                            define BOOST_PP_NODE_225(p) BOOST_PP_IIF(p(225), 225, 226)\n#                            define BOOST_PP_NODE_227(p) BOOST_PP_IIF(p(227), 227, 228)\n#                        define BOOST_PP_NODE_230(p) BOOST_PP_IIF(p(230), BOOST_PP_NODE_229, BOOST_PP_NODE_231)\n#                            define BOOST_PP_NODE_229(p) BOOST_PP_IIF(p(229), 229, 230)\n#                            define BOOST_PP_NODE_231(p) BOOST_PP_IIF(p(231), 231, 232)\n#                    define BOOST_PP_NODE_236(p) BOOST_PP_IIF(p(236), BOOST_PP_NODE_234, BOOST_PP_NODE_238)\n#                        define BOOST_PP_NODE_234(p) BOOST_PP_IIF(p(234), BOOST_PP_NODE_233, BOOST_PP_NODE_235)\n#                            define BOOST_PP_NODE_233(p) BOOST_PP_IIF(p(233), 233, 234)\n#                            define BOOST_PP_NODE_235(p) BOOST_PP_IIF(p(235), 235, 236)\n#                        define BOOST_PP_NODE_238(p) BOOST_PP_IIF(p(238), BOOST_PP_NODE_237, BOOST_PP_NODE_239)\n#                            define BOOST_PP_NODE_237(p) BOOST_PP_IIF(p(237), 237, 238)\n#                            define BOOST_PP_NODE_239(p) BOOST_PP_IIF(p(239), 239, 240)\n#                define BOOST_PP_NODE_248(p) BOOST_PP_IIF(p(248), BOOST_PP_NODE_244, BOOST_PP_NODE_252)\n#                    define BOOST_PP_NODE_244(p) BOOST_PP_IIF(p(244), BOOST_PP_NODE_242, BOOST_PP_NODE_246)\n#                        define BOOST_PP_NODE_242(p) BOOST_PP_IIF(p(242), BOOST_PP_NODE_241, BOOST_PP_NODE_243)\n#                            define BOOST_PP_NODE_241(p) BOOST_PP_IIF(p(241), 241, 242)\n#                            define BOOST_PP_NODE_243(p) BOOST_PP_IIF(p(243), 243, 244)\n#                        define BOOST_PP_NODE_246(p) BOOST_PP_IIF(p(246), BOOST_PP_NODE_245, BOOST_PP_NODE_247)\n#                            define BOOST_PP_NODE_245(p) BOOST_PP_IIF(p(245), 245, 246)\n#                            define BOOST_PP_NODE_247(p) BOOST_PP_IIF(p(247), 247, 248)\n#                    define BOOST_PP_NODE_252(p) BOOST_PP_IIF(p(252), BOOST_PP_NODE_250, BOOST_PP_NODE_254)\n#                        define BOOST_PP_NODE_250(p) BOOST_PP_IIF(p(250), BOOST_PP_NODE_249, BOOST_PP_NODE_251)\n#                            define BOOST_PP_NODE_249(p) BOOST_PP_IIF(p(249), 249, 250)\n#                            define BOOST_PP_NODE_251(p) BOOST_PP_IIF(p(251), 251, 252)\n#                        define BOOST_PP_NODE_254(p) BOOST_PP_IIF(p(254), BOOST_PP_NODE_253, BOOST_PP_NODE_255)\n#                            define BOOST_PP_NODE_253(p) BOOST_PP_IIF(p(253), 253, 254)\n#                            define BOOST_PP_NODE_255(p) BOOST_PP_IIF(p(255), 255, 256)\n#\n# endif\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/detail/check.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_CHECK_HPP\n# define BOOST_PREPROCESSOR_DETAIL_CHECK_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_CHECK */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_D(x, type)\n# else\n#    define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_OO((x, type))\n#    define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_D ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, type x))\n#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)\n#    define BOOST_PP_CHECK_2(res, _) res\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(type x)\n#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)\n#    define BOOST_PP_CHECK_2(chk) BOOST_PP_CHECK_3((BOOST_PP_CHECK_RESULT_ ## chk))\n#    define BOOST_PP_CHECK_3(im) BOOST_PP_CHECK_5(BOOST_PP_CHECK_4 im)\n#    define BOOST_PP_CHECK_4(res, _) res\n#    define BOOST_PP_CHECK_5(res) res\n# else /* DMC */\n#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_OO((type x))\n#    define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_0 ## par\n#    define BOOST_PP_CHECK_0(chk) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, chk))\n#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)\n#    define BOOST_PP_CHECK_2(res, _) res\n# endif\n#\n# define BOOST_PP_CHECK_RESULT_1 1, BOOST_PP_NIL\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/detail/dmc/auto_rec.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP\n# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP\n#\n# include <boost/preprocessor/control/iif.hpp>\n#\n# /* BOOST_PP_AUTO_REC */\n#\n# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred)\n#\n# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_128(p) BOOST_PP_NODE_64(p)(p)(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_64(p) BOOST_PP_NODE_32(p)(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_32(p) BOOST_PP_NODE_16(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_16(p) BOOST_PP_NODE_8(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_8(p) BOOST_PP_NODE_4(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_4(p) BOOST_PP_NODE_2(p)(p)\n# define BOOST_PP_NODE_ENTRY_2(p) BOOST_PP_NODE_1(p)\n#\n# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p##(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)\n#    define BOOST_PP_NODE_64(p) BOOST_PP_IIF(p##(64), BOOST_PP_NODE_32, BOOST_PP_NODE_96)\n#        define BOOST_PP_NODE_32(p) BOOST_PP_IIF(p##(32), BOOST_PP_NODE_16, BOOST_PP_NODE_48)\n#            define BOOST_PP_NODE_16(p) BOOST_PP_IIF(p##(16), BOOST_PP_NODE_8, BOOST_PP_NODE_24)\n#                define BOOST_PP_NODE_8(p) BOOST_PP_IIF(p##(8), BOOST_PP_NODE_4, BOOST_PP_NODE_12)\n#                    define BOOST_PP_NODE_4(p) BOOST_PP_IIF(p##(4), BOOST_PP_NODE_2, BOOST_PP_NODE_6)\n#                        define BOOST_PP_NODE_2(p) BOOST_PP_IIF(p##(2), BOOST_PP_NODE_1, BOOST_PP_NODE_3)\n#                            define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p##(1), 1, 2)\n#                            define BOOST_PP_NODE_3(p) BOOST_PP_IIF(p##(3), 3, 4)\n#                        define BOOST_PP_NODE_6(p) BOOST_PP_IIF(p##(6), BOOST_PP_NODE_5, BOOST_PP_NODE_7)\n#                            define BOOST_PP_NODE_5(p) BOOST_PP_IIF(p##(5), 5, 6)\n#                            define BOOST_PP_NODE_7(p) BOOST_PP_IIF(p##(7), 7, 8)\n#                    define BOOST_PP_NODE_12(p) BOOST_PP_IIF(p##(12), BOOST_PP_NODE_10, BOOST_PP_NODE_14)\n#                        define BOOST_PP_NODE_10(p) BOOST_PP_IIF(p##(10), BOOST_PP_NODE_9, BOOST_PP_NODE_11)\n#                            define BOOST_PP_NODE_9(p) BOOST_PP_IIF(p##(9), 9, 10)\n#                            define BOOST_PP_NODE_11(p) BOOST_PP_IIF(p##(11), 11, 12)\n#                        define BOOST_PP_NODE_14(p) BOOST_PP_IIF(p##(14), BOOST_PP_NODE_13, BOOST_PP_NODE_15)\n#                            define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p##(13), 13, 14)\n#                            define BOOST_PP_NODE_15(p) BOOST_PP_IIF(p##(15), 15, 16)\n#                define BOOST_PP_NODE_24(p) BOOST_PP_IIF(p##(24), BOOST_PP_NODE_20, BOOST_PP_NODE_28)\n#                    define BOOST_PP_NODE_20(p) BOOST_PP_IIF(p##(20), BOOST_PP_NODE_18, BOOST_PP_NODE_22)\n#                        define BOOST_PP_NODE_18(p) BOOST_PP_IIF(p##(18), BOOST_PP_NODE_17, BOOST_PP_NODE_19)\n#                            define BOOST_PP_NODE_17(p) BOOST_PP_IIF(p##(17), 17, 18)\n#                            define BOOST_PP_NODE_19(p) BOOST_PP_IIF(p##(19), 19, 20)\n#                        define BOOST_PP_NODE_22(p) BOOST_PP_IIF(p##(22), BOOST_PP_NODE_21, BOOST_PP_NODE_23)\n#                            define BOOST_PP_NODE_21(p) BOOST_PP_IIF(p##(21), 21, 22)\n#                            define BOOST_PP_NODE_23(p) BOOST_PP_IIF(p##(23), 23, 24)\n#                    define BOOST_PP_NODE_28(p) BOOST_PP_IIF(p##(28), BOOST_PP_NODE_26, BOOST_PP_NODE_30)\n#                        define BOOST_PP_NODE_26(p) BOOST_PP_IIF(p##(26), BOOST_PP_NODE_25, BOOST_PP_NODE_27)\n#                            define BOOST_PP_NODE_25(p) BOOST_PP_IIF(p##(25), 25, 26)\n#                            define BOOST_PP_NODE_27(p) BOOST_PP_IIF(p##(27), 27, 28)\n#                        define BOOST_PP_NODE_30(p) BOOST_PP_IIF(p##(30), BOOST_PP_NODE_29, BOOST_PP_NODE_31)\n#                            define BOOST_PP_NODE_29(p) BOOST_PP_IIF(p##(29), 29, 30)\n#                            define BOOST_PP_NODE_31(p) BOOST_PP_IIF(p##(31), 31, 32)\n#            define BOOST_PP_NODE_48(p) BOOST_PP_IIF(p##(48), BOOST_PP_NODE_40, BOOST_PP_NODE_56)\n#                define BOOST_PP_NODE_40(p) BOOST_PP_IIF(p##(40), BOOST_PP_NODE_36, BOOST_PP_NODE_44)\n#                    define BOOST_PP_NODE_36(p) BOOST_PP_IIF(p##(36), BOOST_PP_NODE_34, BOOST_PP_NODE_38)\n#                        define BOOST_PP_NODE_34(p) BOOST_PP_IIF(p##(34), BOOST_PP_NODE_33, BOOST_PP_NODE_35)\n#                            define BOOST_PP_NODE_33(p) BOOST_PP_IIF(p##(33), 33, 34)\n#                            define BOOST_PP_NODE_35(p) BOOST_PP_IIF(p##(35), 35, 36)\n#                        define BOOST_PP_NODE_38(p) BOOST_PP_IIF(p##(38), BOOST_PP_NODE_37, BOOST_PP_NODE_39)\n#                            define BOOST_PP_NODE_37(p) BOOST_PP_IIF(p##(37), 37, 38)\n#                            define BOOST_PP_NODE_39(p) BOOST_PP_IIF(p##(39), 39, 40)\n#                    define BOOST_PP_NODE_44(p) BOOST_PP_IIF(p##(44), BOOST_PP_NODE_42, BOOST_PP_NODE_46)\n#                        define BOOST_PP_NODE_42(p) BOOST_PP_IIF(p##(42), BOOST_PP_NODE_41, BOOST_PP_NODE_43)\n#                            define BOOST_PP_NODE_41(p) BOOST_PP_IIF(p##(41), 41, 42)\n#                            define BOOST_PP_NODE_43(p) BOOST_PP_IIF(p##(43), 43, 44)\n#                        define BOOST_PP_NODE_46(p) BOOST_PP_IIF(p##(46), BOOST_PP_NODE_45, BOOST_PP_NODE_47)\n#                            define BOOST_PP_NODE_45(p) BOOST_PP_IIF(p##(45), 45, 46)\n#                            define BOOST_PP_NODE_47(p) BOOST_PP_IIF(p##(47), 47, 48)\n#                define BOOST_PP_NODE_56(p) BOOST_PP_IIF(p##(56), BOOST_PP_NODE_52, BOOST_PP_NODE_60)\n#                    define BOOST_PP_NODE_52(p) BOOST_PP_IIF(p##(52), BOOST_PP_NODE_50, BOOST_PP_NODE_54)\n#                        define BOOST_PP_NODE_50(p) BOOST_PP_IIF(p##(50), BOOST_PP_NODE_49, BOOST_PP_NODE_51)\n#                            define BOOST_PP_NODE_49(p) BOOST_PP_IIF(p##(49), 49, 50)\n#                            define BOOST_PP_NODE_51(p) BOOST_PP_IIF(p##(51), 51, 52)\n#                        define BOOST_PP_NODE_54(p) BOOST_PP_IIF(p##(54), BOOST_PP_NODE_53, BOOST_PP_NODE_55)\n#                            define BOOST_PP_NODE_53(p) BOOST_PP_IIF(p##(53), 53, 54)\n#                            define BOOST_PP_NODE_55(p) BOOST_PP_IIF(p##(55), 55, 56)\n#                    define BOOST_PP_NODE_60(p) BOOST_PP_IIF(p##(60), BOOST_PP_NODE_58, BOOST_PP_NODE_62)\n#                        define BOOST_PP_NODE_58(p) BOOST_PP_IIF(p##(58), BOOST_PP_NODE_57, BOOST_PP_NODE_59)\n#                            define BOOST_PP_NODE_57(p) BOOST_PP_IIF(p##(57), 57, 58)\n#                            define BOOST_PP_NODE_59(p) BOOST_PP_IIF(p##(59), 59, 60)\n#                        define BOOST_PP_NODE_62(p) BOOST_PP_IIF(p##(62), BOOST_PP_NODE_61, BOOST_PP_NODE_63)\n#                            define BOOST_PP_NODE_61(p) BOOST_PP_IIF(p##(61), 61, 62)\n#                            define BOOST_PP_NODE_63(p) BOOST_PP_IIF(p##(63), 63, 64)\n#        define BOOST_PP_NODE_96(p) BOOST_PP_IIF(p##(96), BOOST_PP_NODE_80, BOOST_PP_NODE_112)\n#            define BOOST_PP_NODE_80(p) BOOST_PP_IIF(p##(80), BOOST_PP_NODE_72, BOOST_PP_NODE_88)\n#                define BOOST_PP_NODE_72(p) BOOST_PP_IIF(p##(72), BOOST_PP_NODE_68, BOOST_PP_NODE_76)\n#                    define BOOST_PP_NODE_68(p) BOOST_PP_IIF(p##(68), BOOST_PP_NODE_66, BOOST_PP_NODE_70)\n#                        define BOOST_PP_NODE_66(p) BOOST_PP_IIF(p##(66), BOOST_PP_NODE_65, BOOST_PP_NODE_67)\n#                            define BOOST_PP_NODE_65(p) BOOST_PP_IIF(p##(65), 65, 66)\n#                            define BOOST_PP_NODE_67(p) BOOST_PP_IIF(p##(67), 67, 68)\n#                        define BOOST_PP_NODE_70(p) BOOST_PP_IIF(p##(70), BOOST_PP_NODE_69, BOOST_PP_NODE_71)\n#                            define BOOST_PP_NODE_69(p) BOOST_PP_IIF(p##(69), 69, 70)\n#                            define BOOST_PP_NODE_71(p) BOOST_PP_IIF(p##(71), 71, 72)\n#                    define BOOST_PP_NODE_76(p) BOOST_PP_IIF(p##(76), BOOST_PP_NODE_74, BOOST_PP_NODE_78)\n#                        define BOOST_PP_NODE_74(p) BOOST_PP_IIF(p##(74), BOOST_PP_NODE_73, BOOST_PP_NODE_75)\n#                            define BOOST_PP_NODE_73(p) BOOST_PP_IIF(p##(73), 73, 74)\n#                            define BOOST_PP_NODE_75(p) BOOST_PP_IIF(p##(75), 75, 76)\n#                        define BOOST_PP_NODE_78(p) BOOST_PP_IIF(p##(78), BOOST_PP_NODE_77, BOOST_PP_NODE_79)\n#                            define BOOST_PP_NODE_77(p) BOOST_PP_IIF(p##(77), 77, 78)\n#                            define BOOST_PP_NODE_79(p) BOOST_PP_IIF(p##(79), 79, 80)\n#                define BOOST_PP_NODE_88(p) BOOST_PP_IIF(p##(88), BOOST_PP_NODE_84, BOOST_PP_NODE_92)\n#                    define BOOST_PP_NODE_84(p) BOOST_PP_IIF(p##(84), BOOST_PP_NODE_82, BOOST_PP_NODE_86)\n#                        define BOOST_PP_NODE_82(p) BOOST_PP_IIF(p##(82), BOOST_PP_NODE_81, BOOST_PP_NODE_83)\n#                            define BOOST_PP_NODE_81(p) BOOST_PP_IIF(p##(81), 81, 82)\n#                            define BOOST_PP_NODE_83(p) BOOST_PP_IIF(p##(83), 83, 84)\n#                        define BOOST_PP_NODE_86(p) BOOST_PP_IIF(p##(86), BOOST_PP_NODE_85, BOOST_PP_NODE_87)\n#                            define BOOST_PP_NODE_85(p) BOOST_PP_IIF(p##(85), 85, 86)\n#                            define BOOST_PP_NODE_87(p) BOOST_PP_IIF(p##(87), 87, 88)\n#                    define BOOST_PP_NODE_92(p) BOOST_PP_IIF(p##(92), BOOST_PP_NODE_90, BOOST_PP_NODE_94)\n#                        define BOOST_PP_NODE_90(p) BOOST_PP_IIF(p##(90), BOOST_PP_NODE_89, BOOST_PP_NODE_91)\n#                            define BOOST_PP_NODE_89(p) BOOST_PP_IIF(p##(89), 89, 90)\n#                            define BOOST_PP_NODE_91(p) BOOST_PP_IIF(p##(91), 91, 92)\n#                        define BOOST_PP_NODE_94(p) BOOST_PP_IIF(p##(94), BOOST_PP_NODE_93, BOOST_PP_NODE_95)\n#                            define BOOST_PP_NODE_93(p) BOOST_PP_IIF(p##(93), 93, 94)\n#                            define BOOST_PP_NODE_95(p) BOOST_PP_IIF(p##(95), 95, 96)\n#            define BOOST_PP_NODE_112(p) BOOST_PP_IIF(p##(112), BOOST_PP_NODE_104, BOOST_PP_NODE_120)\n#                define BOOST_PP_NODE_104(p) BOOST_PP_IIF(p##(104), BOOST_PP_NODE_100, BOOST_PP_NODE_108)\n#                    define BOOST_PP_NODE_100(p) BOOST_PP_IIF(p##(100), BOOST_PP_NODE_98, BOOST_PP_NODE_102)\n#                        define BOOST_PP_NODE_98(p) BOOST_PP_IIF(p##(98), BOOST_PP_NODE_97, BOOST_PP_NODE_99)\n#                            define BOOST_PP_NODE_97(p) BOOST_PP_IIF(p##(97), 97, 98)\n#                            define BOOST_PP_NODE_99(p) BOOST_PP_IIF(p##(99), 99, 100)\n#                        define BOOST_PP_NODE_102(p) BOOST_PP_IIF(p##(102), BOOST_PP_NODE_101, BOOST_PP_NODE_103)\n#                            define BOOST_PP_NODE_101(p) BOOST_PP_IIF(p##(101), 101, 102)\n#                            define BOOST_PP_NODE_103(p) BOOST_PP_IIF(p##(103), 103, 104)\n#                    define BOOST_PP_NODE_108(p) BOOST_PP_IIF(p##(108), BOOST_PP_NODE_106, BOOST_PP_NODE_110)\n#                        define BOOST_PP_NODE_106(p) BOOST_PP_IIF(p##(106), BOOST_PP_NODE_105, BOOST_PP_NODE_107)\n#                            define BOOST_PP_NODE_105(p) BOOST_PP_IIF(p##(105), 105, 106)\n#                            define BOOST_PP_NODE_107(p) BOOST_PP_IIF(p##(107), 107, 108)\n#                        define BOOST_PP_NODE_110(p) BOOST_PP_IIF(p##(110), BOOST_PP_NODE_109, BOOST_PP_NODE_111)\n#                            define BOOST_PP_NODE_109(p) BOOST_PP_IIF(p##(109), 109, 110)\n#                            define BOOST_PP_NODE_111(p) BOOST_PP_IIF(p##(111), 111, 112)\n#                define BOOST_PP_NODE_120(p) BOOST_PP_IIF(p##(120), BOOST_PP_NODE_116, BOOST_PP_NODE_124)\n#                    define BOOST_PP_NODE_116(p) BOOST_PP_IIF(p##(116), BOOST_PP_NODE_114, BOOST_PP_NODE_118)\n#                        define BOOST_PP_NODE_114(p) BOOST_PP_IIF(p##(114), BOOST_PP_NODE_113, BOOST_PP_NODE_115)\n#                            define BOOST_PP_NODE_113(p) BOOST_PP_IIF(p##(113), 113, 114)\n#                            define BOOST_PP_NODE_115(p) BOOST_PP_IIF(p##(115), 115, 116)\n#                        define BOOST_PP_NODE_118(p) BOOST_PP_IIF(p##(118), BOOST_PP_NODE_117, BOOST_PP_NODE_119)\n#                            define BOOST_PP_NODE_117(p) BOOST_PP_IIF(p##(117), 117, 118)\n#                            define BOOST_PP_NODE_119(p) BOOST_PP_IIF(p##(119), 119, 120)\n#                    define BOOST_PP_NODE_124(p) BOOST_PP_IIF(p##(124), BOOST_PP_NODE_122, BOOST_PP_NODE_126)\n#                        define BOOST_PP_NODE_122(p) BOOST_PP_IIF(p##(122), BOOST_PP_NODE_121, BOOST_PP_NODE_123)\n#                            define BOOST_PP_NODE_121(p) BOOST_PP_IIF(p##(121), 121, 122)\n#                            define BOOST_PP_NODE_123(p) BOOST_PP_IIF(p##(123), 123, 124)\n#                        define BOOST_PP_NODE_126(p) BOOST_PP_IIF(p##(126), BOOST_PP_NODE_125, BOOST_PP_NODE_127)\n#                            define BOOST_PP_NODE_125(p) BOOST_PP_IIF(p##(125), 125, 126)\n#                            define BOOST_PP_NODE_127(p) BOOST_PP_IIF(p##(127), 127, 128)\n#    define BOOST_PP_NODE_192(p) BOOST_PP_IIF(p##(192), BOOST_PP_NODE_160, BOOST_PP_NODE_224)\n#        define BOOST_PP_NODE_160(p) BOOST_PP_IIF(p##(160), BOOST_PP_NODE_144, BOOST_PP_NODE_176)\n#            define BOOST_PP_NODE_144(p) BOOST_PP_IIF(p##(144), BOOST_PP_NODE_136, BOOST_PP_NODE_152)\n#                define BOOST_PP_NODE_136(p) BOOST_PP_IIF(p##(136), BOOST_PP_NODE_132, BOOST_PP_NODE_140)\n#                    define BOOST_PP_NODE_132(p) BOOST_PP_IIF(p##(132), BOOST_PP_NODE_130, BOOST_PP_NODE_134)\n#                        define BOOST_PP_NODE_130(p) BOOST_PP_IIF(p##(130), BOOST_PP_NODE_129, BOOST_PP_NODE_131)\n#                            define BOOST_PP_NODE_129(p) BOOST_PP_IIF(p##(129), 129, 130)\n#                            define BOOST_PP_NODE_131(p) BOOST_PP_IIF(p##(131), 131, 132)\n#                        define BOOST_PP_NODE_134(p) BOOST_PP_IIF(p##(134), BOOST_PP_NODE_133, BOOST_PP_NODE_135)\n#                            define BOOST_PP_NODE_133(p) BOOST_PP_IIF(p##(133), 133, 134)\n#                            define BOOST_PP_NODE_135(p) BOOST_PP_IIF(p##(135), 135, 136)\n#                    define BOOST_PP_NODE_140(p) BOOST_PP_IIF(p##(140), BOOST_PP_NODE_138, BOOST_PP_NODE_142)\n#                        define BOOST_PP_NODE_138(p) BOOST_PP_IIF(p##(138), BOOST_PP_NODE_137, BOOST_PP_NODE_139)\n#                            define BOOST_PP_NODE_137(p) BOOST_PP_IIF(p##(137), 137, 138)\n#                            define BOOST_PP_NODE_139(p) BOOST_PP_IIF(p##(139), 139, 140)\n#                        define BOOST_PP_NODE_142(p) BOOST_PP_IIF(p##(142), BOOST_PP_NODE_141, BOOST_PP_NODE_143)\n#                            define BOOST_PP_NODE_141(p) BOOST_PP_IIF(p##(141), 141, 142)\n#                            define BOOST_PP_NODE_143(p) BOOST_PP_IIF(p##(143), 143, 144)\n#                define BOOST_PP_NODE_152(p) BOOST_PP_IIF(p##(152), BOOST_PP_NODE_148, BOOST_PP_NODE_156)\n#                    define BOOST_PP_NODE_148(p) BOOST_PP_IIF(p##(148), BOOST_PP_NODE_146, BOOST_PP_NODE_150)\n#                        define BOOST_PP_NODE_146(p) BOOST_PP_IIF(p##(146), BOOST_PP_NODE_145, BOOST_PP_NODE_147)\n#                            define BOOST_PP_NODE_145(p) BOOST_PP_IIF(p##(145), 145, 146)\n#                            define BOOST_PP_NODE_147(p) BOOST_PP_IIF(p##(147), 147, 148)\n#                        define BOOST_PP_NODE_150(p) BOOST_PP_IIF(p##(150), BOOST_PP_NODE_149, BOOST_PP_NODE_151)\n#                            define BOOST_PP_NODE_149(p) BOOST_PP_IIF(p##(149), 149, 150)\n#                            define BOOST_PP_NODE_151(p) BOOST_PP_IIF(p##(151), 151, 152)\n#                    define BOOST_PP_NODE_156(p) BOOST_PP_IIF(p##(156), BOOST_PP_NODE_154, BOOST_PP_NODE_158)\n#                        define BOOST_PP_NODE_154(p) BOOST_PP_IIF(p##(154), BOOST_PP_NODE_153, BOOST_PP_NODE_155)\n#                            define BOOST_PP_NODE_153(p) BOOST_PP_IIF(p##(153), 153, 154)\n#                            define BOOST_PP_NODE_155(p) BOOST_PP_IIF(p##(155), 155, 156)\n#                        define BOOST_PP_NODE_158(p) BOOST_PP_IIF(p##(158), BOOST_PP_NODE_157, BOOST_PP_NODE_159)\n#                            define BOOST_PP_NODE_157(p) BOOST_PP_IIF(p##(157), 157, 158)\n#                            define BOOST_PP_NODE_159(p) BOOST_PP_IIF(p##(159), 159, 160)\n#            define BOOST_PP_NODE_176(p) BOOST_PP_IIF(p##(176), BOOST_PP_NODE_168, BOOST_PP_NODE_184)\n#                define BOOST_PP_NODE_168(p) BOOST_PP_IIF(p##(168), BOOST_PP_NODE_164, BOOST_PP_NODE_172)\n#                    define BOOST_PP_NODE_164(p) BOOST_PP_IIF(p##(164), BOOST_PP_NODE_162, BOOST_PP_NODE_166)\n#                        define BOOST_PP_NODE_162(p) BOOST_PP_IIF(p##(162), BOOST_PP_NODE_161, BOOST_PP_NODE_163)\n#                            define BOOST_PP_NODE_161(p) BOOST_PP_IIF(p##(161), 161, 162)\n#                            define BOOST_PP_NODE_163(p) BOOST_PP_IIF(p##(163), 163, 164)\n#                        define BOOST_PP_NODE_166(p) BOOST_PP_IIF(p##(166), BOOST_PP_NODE_165, BOOST_PP_NODE_167)\n#                            define BOOST_PP_NODE_165(p) BOOST_PP_IIF(p##(165), 165, 166)\n#                            define BOOST_PP_NODE_167(p) BOOST_PP_IIF(p##(167), 167, 168)\n#                    define BOOST_PP_NODE_172(p) BOOST_PP_IIF(p##(172), BOOST_PP_NODE_170, BOOST_PP_NODE_174)\n#                        define BOOST_PP_NODE_170(p) BOOST_PP_IIF(p##(170), BOOST_PP_NODE_169, BOOST_PP_NODE_171)\n#                            define BOOST_PP_NODE_169(p) BOOST_PP_IIF(p##(169), 169, 170)\n#                            define BOOST_PP_NODE_171(p) BOOST_PP_IIF(p##(171), 171, 172)\n#                        define BOOST_PP_NODE_174(p) BOOST_PP_IIF(p##(174), BOOST_PP_NODE_173, BOOST_PP_NODE_175)\n#                            define BOOST_PP_NODE_173(p) BOOST_PP_IIF(p##(173), 173, 174)\n#                            define BOOST_PP_NODE_175(p) BOOST_PP_IIF(p##(175), 175, 176)\n#                define BOOST_PP_NODE_184(p) BOOST_PP_IIF(p##(184), BOOST_PP_NODE_180, BOOST_PP_NODE_188)\n#                    define BOOST_PP_NODE_180(p) BOOST_PP_IIF(p##(180), BOOST_PP_NODE_178, BOOST_PP_NODE_182)\n#                        define BOOST_PP_NODE_178(p) BOOST_PP_IIF(p##(178), BOOST_PP_NODE_177, BOOST_PP_NODE_179)\n#                            define BOOST_PP_NODE_177(p) BOOST_PP_IIF(p##(177), 177, 178)\n#                            define BOOST_PP_NODE_179(p) BOOST_PP_IIF(p##(179), 179, 180)\n#                        define BOOST_PP_NODE_182(p) BOOST_PP_IIF(p##(182), BOOST_PP_NODE_181, BOOST_PP_NODE_183)\n#                            define BOOST_PP_NODE_181(p) BOOST_PP_IIF(p##(181), 181, 182)\n#                            define BOOST_PP_NODE_183(p) BOOST_PP_IIF(p##(183), 183, 184)\n#                    define BOOST_PP_NODE_188(p) BOOST_PP_IIF(p##(188), BOOST_PP_NODE_186, BOOST_PP_NODE_190)\n#                        define BOOST_PP_NODE_186(p) BOOST_PP_IIF(p##(186), BOOST_PP_NODE_185, BOOST_PP_NODE_187)\n#                            define BOOST_PP_NODE_185(p) BOOST_PP_IIF(p##(185), 185, 186)\n#                            define BOOST_PP_NODE_187(p) BOOST_PP_IIF(p##(187), 187, 188)\n#                        define BOOST_PP_NODE_190(p) BOOST_PP_IIF(p##(190), BOOST_PP_NODE_189, BOOST_PP_NODE_191)\n#                            define BOOST_PP_NODE_189(p) BOOST_PP_IIF(p##(189), 189, 190)\n#                            define BOOST_PP_NODE_191(p) BOOST_PP_IIF(p##(191), 191, 192)\n#        define BOOST_PP_NODE_224(p) BOOST_PP_IIF(p##(224), BOOST_PP_NODE_208, BOOST_PP_NODE_240)\n#            define BOOST_PP_NODE_208(p) BOOST_PP_IIF(p##(208), BOOST_PP_NODE_200, BOOST_PP_NODE_216)\n#                define BOOST_PP_NODE_200(p) BOOST_PP_IIF(p##(200), BOOST_PP_NODE_196, BOOST_PP_NODE_204)\n#                    define BOOST_PP_NODE_196(p) BOOST_PP_IIF(p##(196), BOOST_PP_NODE_194, BOOST_PP_NODE_198)\n#                        define BOOST_PP_NODE_194(p) BOOST_PP_IIF(p##(194), BOOST_PP_NODE_193, BOOST_PP_NODE_195)\n#                            define BOOST_PP_NODE_193(p) BOOST_PP_IIF(p##(193), 193, 194)\n#                            define BOOST_PP_NODE_195(p) BOOST_PP_IIF(p##(195), 195, 196)\n#                        define BOOST_PP_NODE_198(p) BOOST_PP_IIF(p##(198), BOOST_PP_NODE_197, BOOST_PP_NODE_199)\n#                            define BOOST_PP_NODE_197(p) BOOST_PP_IIF(p##(197), 197, 198)\n#                            define BOOST_PP_NODE_199(p) BOOST_PP_IIF(p##(199), 199, 200)\n#                    define BOOST_PP_NODE_204(p) BOOST_PP_IIF(p##(204), BOOST_PP_NODE_202, BOOST_PP_NODE_206)\n#                        define BOOST_PP_NODE_202(p) BOOST_PP_IIF(p##(202), BOOST_PP_NODE_201, BOOST_PP_NODE_203)\n#                            define BOOST_PP_NODE_201(p) BOOST_PP_IIF(p##(201), 201, 202)\n#                            define BOOST_PP_NODE_203(p) BOOST_PP_IIF(p##(203), 203, 204)\n#                        define BOOST_PP_NODE_206(p) BOOST_PP_IIF(p##(206), BOOST_PP_NODE_205, BOOST_PP_NODE_207)\n#                            define BOOST_PP_NODE_205(p) BOOST_PP_IIF(p##(205), 205, 206)\n#                            define BOOST_PP_NODE_207(p) BOOST_PP_IIF(p##(207), 207, 208)\n#                define BOOST_PP_NODE_216(p) BOOST_PP_IIF(p##(216), BOOST_PP_NODE_212, BOOST_PP_NODE_220)\n#                    define BOOST_PP_NODE_212(p) BOOST_PP_IIF(p##(212), BOOST_PP_NODE_210, BOOST_PP_NODE_214)\n#                        define BOOST_PP_NODE_210(p) BOOST_PP_IIF(p##(210), BOOST_PP_NODE_209, BOOST_PP_NODE_211)\n#                            define BOOST_PP_NODE_209(p) BOOST_PP_IIF(p##(209), 209, 210)\n#                            define BOOST_PP_NODE_211(p) BOOST_PP_IIF(p##(211), 211, 212)\n#                        define BOOST_PP_NODE_214(p) BOOST_PP_IIF(p##(214), BOOST_PP_NODE_213, BOOST_PP_NODE_215)\n#                            define BOOST_PP_NODE_213(p) BOOST_PP_IIF(p##(213), 213, 214)\n#                            define BOOST_PP_NODE_215(p) BOOST_PP_IIF(p##(215), 215, 216)\n#                    define BOOST_PP_NODE_220(p) BOOST_PP_IIF(p##(220), BOOST_PP_NODE_218, BOOST_PP_NODE_222)\n#                        define BOOST_PP_NODE_218(p) BOOST_PP_IIF(p##(218), BOOST_PP_NODE_217, BOOST_PP_NODE_219)\n#                            define BOOST_PP_NODE_217(p) BOOST_PP_IIF(p##(217), 217, 218)\n#                            define BOOST_PP_NODE_219(p) BOOST_PP_IIF(p##(219), 219, 220)\n#                        define BOOST_PP_NODE_222(p) BOOST_PP_IIF(p##(222), BOOST_PP_NODE_221, BOOST_PP_NODE_223)\n#                            define BOOST_PP_NODE_221(p) BOOST_PP_IIF(p##(221), 221, 222)\n#                            define BOOST_PP_NODE_223(p) BOOST_PP_IIF(p##(223), 223, 224)\n#            define BOOST_PP_NODE_240(p) BOOST_PP_IIF(p##(240), BOOST_PP_NODE_232, BOOST_PP_NODE_248)\n#                define BOOST_PP_NODE_232(p) BOOST_PP_IIF(p##(232), BOOST_PP_NODE_228, BOOST_PP_NODE_236)\n#                    define BOOST_PP_NODE_228(p) BOOST_PP_IIF(p##(228), BOOST_PP_NODE_226, BOOST_PP_NODE_230)\n#                        define BOOST_PP_NODE_226(p) BOOST_PP_IIF(p##(226), BOOST_PP_NODE_225, BOOST_PP_NODE_227)\n#                            define BOOST_PP_NODE_225(p) BOOST_PP_IIF(p##(225), 225, 226)\n#                            define BOOST_PP_NODE_227(p) BOOST_PP_IIF(p##(227), 227, 228)\n#                        define BOOST_PP_NODE_230(p) BOOST_PP_IIF(p##(230), BOOST_PP_NODE_229, BOOST_PP_NODE_231)\n#                            define BOOST_PP_NODE_229(p) BOOST_PP_IIF(p##(229), 229, 230)\n#                            define BOOST_PP_NODE_231(p) BOOST_PP_IIF(p##(231), 231, 232)\n#                    define BOOST_PP_NODE_236(p) BOOST_PP_IIF(p##(236), BOOST_PP_NODE_234, BOOST_PP_NODE_238)\n#                        define BOOST_PP_NODE_234(p) BOOST_PP_IIF(p##(234), BOOST_PP_NODE_233, BOOST_PP_NODE_235)\n#                            define BOOST_PP_NODE_233(p) BOOST_PP_IIF(p##(233), 233, 234)\n#                            define BOOST_PP_NODE_235(p) BOOST_PP_IIF(p##(235), 235, 236)\n#                        define BOOST_PP_NODE_238(p) BOOST_PP_IIF(p##(238), BOOST_PP_NODE_237, BOOST_PP_NODE_239)\n#                            define BOOST_PP_NODE_237(p) BOOST_PP_IIF(p##(237), 237, 238)\n#                            define BOOST_PP_NODE_239(p) BOOST_PP_IIF(p##(239), 239, 240)\n#                define BOOST_PP_NODE_248(p) BOOST_PP_IIF(p##(248), BOOST_PP_NODE_244, BOOST_PP_NODE_252)\n#                    define BOOST_PP_NODE_244(p) BOOST_PP_IIF(p##(244), BOOST_PP_NODE_242, BOOST_PP_NODE_246)\n#                        define BOOST_PP_NODE_242(p) BOOST_PP_IIF(p##(242), BOOST_PP_NODE_241, BOOST_PP_NODE_243)\n#                            define BOOST_PP_NODE_241(p) BOOST_PP_IIF(p##(241), 241, 242)\n#                            define BOOST_PP_NODE_243(p) BOOST_PP_IIF(p##(243), 243, 244)\n#                        define BOOST_PP_NODE_246(p) BOOST_PP_IIF(p##(246), BOOST_PP_NODE_245, BOOST_PP_NODE_247)\n#                            define BOOST_PP_NODE_245(p) BOOST_PP_IIF(p##(245), 245, 246)\n#                            define BOOST_PP_NODE_247(p) BOOST_PP_IIF(p##(247), 247, 248)\n#                    define BOOST_PP_NODE_252(p) BOOST_PP_IIF(p##(252), BOOST_PP_NODE_250, BOOST_PP_NODE_254)\n#                        define BOOST_PP_NODE_250(p) BOOST_PP_IIF(p##(250), BOOST_PP_NODE_249, BOOST_PP_NODE_251)\n#                            define BOOST_PP_NODE_249(p) BOOST_PP_IIF(p##(249), 249, 250)\n#                            define BOOST_PP_NODE_251(p) BOOST_PP_IIF(p##(251), 251, 252)\n#                        define BOOST_PP_NODE_254(p) BOOST_PP_IIF(p##(254), BOOST_PP_NODE_253, BOOST_PP_NODE_255)\n#                            define BOOST_PP_NODE_253(p) BOOST_PP_IIF(p##(253), 253, 254)\n#                            define BOOST_PP_NODE_255(p) BOOST_PP_IIF(p##(255), 255, 256)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/detail/is_binary.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP\n# define BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/detail/check.hpp>\n#\n# /* BOOST_PP_IS_BINARY */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_IS_BINARY(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK)\n# else\n#    define BOOST_PP_IS_BINARY(x) BOOST_PP_IS_BINARY_I(x)\n#    define BOOST_PP_IS_BINARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK)\n# endif\n#\n# define BOOST_PP_IS_BINARY_CHECK(a, b) 1\n# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_BINARY_CHECK 0, BOOST_PP_NIL\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/detail/is_nullary.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_IS_NULLARY_HPP\n# define BOOST_PREPROCESSOR_DETAIL_IS_NULLARY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/detail/check.hpp>\n#\n# /* BOOST_PP_IS_NULLARY */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_IS_NULLARY(x) BOOST_PP_CHECK(x, BOOST_PP_IS_NULLARY_CHECK)\n# else\n#    define BOOST_PP_IS_NULLARY(x) BOOST_PP_IS_NULLARY_I(x)\n#    define BOOST_PP_IS_NULLARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_NULLARY_CHECK)\n# endif\n#\n# define BOOST_PP_IS_NULLARY_CHECK() 1\n# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_NULLARY_CHECK 0, BOOST_PP_NIL\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/detail/is_unary.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_IS_UNARY_HPP\n# define BOOST_PREPROCESSOR_DETAIL_IS_UNARY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/detail/check.hpp>\n#\n# /* BOOST_PP_IS_UNARY */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_IS_UNARY(x) BOOST_PP_CHECK(x, BOOST_PP_IS_UNARY_CHECK)\n# else\n#    define BOOST_PP_IS_UNARY(x) BOOST_PP_IS_UNARY_I(x)\n#    define BOOST_PP_IS_UNARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_UNARY_CHECK)\n# endif\n#\n# define BOOST_PP_IS_UNARY_CHECK(a) 1\n# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_UNARY_CHECK 0, BOOST_PP_NIL\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/detail/null.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_NULL_HPP\n# define BOOST_PREPROCESSOR_DETAIL_NULL_HPP\n#\n# /* empty file */\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/detail/split.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_SPLIT_HPP\n# define BOOST_PREPROCESSOR_DETAIL_SPLIT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_SPLIT */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SPLIT(n, im) BOOST_PP_SPLIT_I((n, im))\n#    define BOOST_PP_SPLIT_I(par) BOOST_PP_SPLIT_II ## par\n#    define BOOST_PP_SPLIT_II(n, a, b) BOOST_PP_SPLIT_ ## n(a, b)\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_SPLIT(n, im) BOOST_PP_SPLIT_I(n((im)))\n#    define BOOST_PP_SPLIT_I(n) BOOST_PP_SPLIT_ID(BOOST_PP_SPLIT_II_ ## n)\n#    define BOOST_PP_SPLIT_II_0(s) BOOST_PP_SPLIT_ID(BOOST_PP_SPLIT_0 s)\n#    define BOOST_PP_SPLIT_II_1(s) BOOST_PP_SPLIT_ID(BOOST_PP_SPLIT_1 s)\n#    define BOOST_PP_SPLIT_ID(id) id\n# else\n#    define BOOST_PP_SPLIT(n, im) BOOST_PP_SPLIT_I(n)(im)\n#    define BOOST_PP_SPLIT_I(n) BOOST_PP_SPLIT_ ## n\n# endif\n#\n# define BOOST_PP_SPLIT_0(a, b) a\n# define BOOST_PP_SPLIT_1(a, b) b\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/empty.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_EMPTY_HPP\n# define BOOST_PREPROCESSOR_EMPTY_HPP\n#\n# include <boost/preprocessor/facilities/empty.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/enum.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ENUM_HPP\n# define BOOST_PREPROCESSOR_ENUM_HPP\n#\n# include <boost/preprocessor/repetition/enum.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/enum_params.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_HPP\n# define BOOST_PREPROCESSOR_ENUM_PARAMS_HPP\n#\n# include <boost/preprocessor/repetition/enum_params.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/enum_params_with_a_default.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT_HPP\n# define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT_HPP\n#\n# include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/enum_params_with_defaults.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS_HPP\n# define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS_HPP\n#\n# include <boost/preprocessor/repetition/enum_params_with_defaults.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/enum_shifted.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ENUM_SHIFTED_HPP\n# define BOOST_PREPROCESSOR_ENUM_SHIFTED_HPP\n#\n# include <boost/preprocessor/repetition/enum_shifted.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/enum_shifted_params.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS_HPP\n# define BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS_HPP\n#\n# include <boost/preprocessor/repetition/enum_shifted_params.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/expand.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_EXPAND_HPP\n# define BOOST_PREPROCESSOR_EXPAND_HPP\n#\n# include <boost/preprocessor/facilities/expand.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/expr_if.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_EXPR_IF_HPP\n# define BOOST_PREPROCESSOR_EXPR_IF_HPP\n#\n# include <boost/preprocessor/control/expr_if.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/apply.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_APPLY_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_APPLY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/detail/is_unary.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_APPLY */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_APPLY(x) BOOST_PP_APPLY_I(x)\n#    define BOOST_PP_APPLY_I(x) BOOST_PP_EXPR_IIF(BOOST_PP_IS_UNARY(x), BOOST_PP_TUPLE_REM_1 x)\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()\n#    define BOOST_PP_APPLY(x) BOOST_PP_APPLY_I(x)\n#    define BOOST_PP_APPLY_I(x) BOOST_PP_APPLY_ ## x\n#    define BOOST_PP_APPLY_(x) x\n#    define BOOST_PP_APPLY_BOOST_PP_NIL\n# else\n#    define BOOST_PP_APPLY(x) BOOST_PP_EXPR_IIF(BOOST_PP_IS_UNARY(x), BOOST_PP_TUPLE_REM_1 x)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/detail/is_empty.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2014.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n#ifndef BOOST_PREPROCESSOR_DETAIL_IS_EMPTY_HPP\n#define BOOST_PREPROCESSOR_DETAIL_IS_EMPTY_HPP\n\n#include <boost/preprocessor/punctuation/is_begin_parens.hpp>\n\n#if BOOST_PP_VARIADICS_MSVC\n\n# pragma warning(once:4002)\n\n#define BOOST_PP_DETAIL_IS_EMPTY_IIF_0(t, b) b\n#define BOOST_PP_DETAIL_IS_EMPTY_IIF_1(t, b) t\n\n#else\n\n#define BOOST_PP_DETAIL_IS_EMPTY_IIF_0(t, ...) __VA_ARGS__\n#define BOOST_PP_DETAIL_IS_EMPTY_IIF_1(t, ...) t\n\n#endif\n\n#if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400\n\n#define BOOST_PP_DETAIL_IS_EMPTY_PROCESS(param) \\\n\tBOOST_PP_IS_BEGIN_PARENS \\\n    \t( \\\n        BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C param () \\\n        ) \\\n/**/\n\n#else\n\n#define BOOST_PP_DETAIL_IS_EMPTY_PROCESS(...) \\\n\tBOOST_PP_IS_BEGIN_PARENS \\\n        ( \\\n        BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C __VA_ARGS__ () \\\n        ) \\\n/**/\n\n#endif\n\n#define BOOST_PP_DETAIL_IS_EMPTY_PRIMITIVE_CAT(a, b) a ## b\n#define BOOST_PP_DETAIL_IS_EMPTY_IIF(bit) BOOST_PP_DETAIL_IS_EMPTY_PRIMITIVE_CAT(BOOST_PP_DETAIL_IS_EMPTY_IIF_,bit)\n#define BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C(...) ()\n\n#endif /* BOOST_PREPROCESSOR_DETAIL_IS_EMPTY_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/empty.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_EMPTY */\n#\n# define BOOST_PP_EMPTY()\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/expand.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_EXPAND_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_EXPAND_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    define BOOST_PP_EXPAND(x) BOOST_PP_EXPAND_I(x)\n# else\n#    define BOOST_PP_EXPAND(x) BOOST_PP_EXPAND_OO((x))\n#    define BOOST_PP_EXPAND_OO(par) BOOST_PP_EXPAND_I ## par\n# endif\n#\n# define BOOST_PP_EXPAND_I(x) x\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/identity.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n# /* Revised by Edward Diener (2015) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP\n#\n# include <boost/preprocessor/facilities/empty.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# /* BOOST_PP_IDENTITY */\n#\n# define BOOST_PP_IDENTITY(item) item BOOST_PP_EMPTY\n#\n# define BOOST_PP_IDENTITY_N(item,n) item BOOST_PP_TUPLE_EAT_N(n)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/intercept.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_INTERCEPT_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_INTERCEPT_HPP\n#\n# /* BOOST_PP_INTERCEPT */\n#\n# define BOOST_PP_INTERCEPT BOOST_PP_INTERCEPT_\n#\n# define BOOST_PP_INTERCEPT_0\n# define BOOST_PP_INTERCEPT_1\n# define BOOST_PP_INTERCEPT_2\n# define BOOST_PP_INTERCEPT_3\n# define BOOST_PP_INTERCEPT_4\n# define BOOST_PP_INTERCEPT_5\n# define BOOST_PP_INTERCEPT_6\n# define BOOST_PP_INTERCEPT_7\n# define BOOST_PP_INTERCEPT_8\n# define BOOST_PP_INTERCEPT_9\n# define BOOST_PP_INTERCEPT_10\n# define BOOST_PP_INTERCEPT_11\n# define BOOST_PP_INTERCEPT_12\n# define BOOST_PP_INTERCEPT_13\n# define BOOST_PP_INTERCEPT_14\n# define BOOST_PP_INTERCEPT_15\n# define BOOST_PP_INTERCEPT_16\n# define BOOST_PP_INTERCEPT_17\n# define BOOST_PP_INTERCEPT_18\n# define BOOST_PP_INTERCEPT_19\n# define BOOST_PP_INTERCEPT_20\n# define BOOST_PP_INTERCEPT_21\n# define BOOST_PP_INTERCEPT_22\n# define BOOST_PP_INTERCEPT_23\n# define BOOST_PP_INTERCEPT_24\n# define BOOST_PP_INTERCEPT_25\n# define BOOST_PP_INTERCEPT_26\n# define BOOST_PP_INTERCEPT_27\n# define BOOST_PP_INTERCEPT_28\n# define BOOST_PP_INTERCEPT_29\n# define BOOST_PP_INTERCEPT_30\n# define BOOST_PP_INTERCEPT_31\n# define BOOST_PP_INTERCEPT_32\n# define BOOST_PP_INTERCEPT_33\n# define BOOST_PP_INTERCEPT_34\n# define BOOST_PP_INTERCEPT_35\n# define BOOST_PP_INTERCEPT_36\n# define BOOST_PP_INTERCEPT_37\n# define BOOST_PP_INTERCEPT_38\n# define BOOST_PP_INTERCEPT_39\n# define BOOST_PP_INTERCEPT_40\n# define BOOST_PP_INTERCEPT_41\n# define BOOST_PP_INTERCEPT_42\n# define BOOST_PP_INTERCEPT_43\n# define BOOST_PP_INTERCEPT_44\n# define BOOST_PP_INTERCEPT_45\n# define BOOST_PP_INTERCEPT_46\n# define BOOST_PP_INTERCEPT_47\n# define BOOST_PP_INTERCEPT_48\n# define BOOST_PP_INTERCEPT_49\n# define BOOST_PP_INTERCEPT_50\n# define BOOST_PP_INTERCEPT_51\n# define BOOST_PP_INTERCEPT_52\n# define BOOST_PP_INTERCEPT_53\n# define BOOST_PP_INTERCEPT_54\n# define BOOST_PP_INTERCEPT_55\n# define BOOST_PP_INTERCEPT_56\n# define BOOST_PP_INTERCEPT_57\n# define BOOST_PP_INTERCEPT_58\n# define BOOST_PP_INTERCEPT_59\n# define BOOST_PP_INTERCEPT_60\n# define BOOST_PP_INTERCEPT_61\n# define BOOST_PP_INTERCEPT_62\n# define BOOST_PP_INTERCEPT_63\n# define BOOST_PP_INTERCEPT_64\n# define BOOST_PP_INTERCEPT_65\n# define BOOST_PP_INTERCEPT_66\n# define BOOST_PP_INTERCEPT_67\n# define BOOST_PP_INTERCEPT_68\n# define BOOST_PP_INTERCEPT_69\n# define BOOST_PP_INTERCEPT_70\n# define BOOST_PP_INTERCEPT_71\n# define BOOST_PP_INTERCEPT_72\n# define BOOST_PP_INTERCEPT_73\n# define BOOST_PP_INTERCEPT_74\n# define BOOST_PP_INTERCEPT_75\n# define BOOST_PP_INTERCEPT_76\n# define BOOST_PP_INTERCEPT_77\n# define BOOST_PP_INTERCEPT_78\n# define BOOST_PP_INTERCEPT_79\n# define BOOST_PP_INTERCEPT_80\n# define BOOST_PP_INTERCEPT_81\n# define BOOST_PP_INTERCEPT_82\n# define BOOST_PP_INTERCEPT_83\n# define BOOST_PP_INTERCEPT_84\n# define BOOST_PP_INTERCEPT_85\n# define BOOST_PP_INTERCEPT_86\n# define BOOST_PP_INTERCEPT_87\n# define BOOST_PP_INTERCEPT_88\n# define BOOST_PP_INTERCEPT_89\n# define BOOST_PP_INTERCEPT_90\n# define BOOST_PP_INTERCEPT_91\n# define BOOST_PP_INTERCEPT_92\n# define BOOST_PP_INTERCEPT_93\n# define BOOST_PP_INTERCEPT_94\n# define BOOST_PP_INTERCEPT_95\n# define BOOST_PP_INTERCEPT_96\n# define BOOST_PP_INTERCEPT_97\n# define BOOST_PP_INTERCEPT_98\n# define BOOST_PP_INTERCEPT_99\n# define BOOST_PP_INTERCEPT_100\n# define BOOST_PP_INTERCEPT_101\n# define BOOST_PP_INTERCEPT_102\n# define BOOST_PP_INTERCEPT_103\n# define BOOST_PP_INTERCEPT_104\n# define BOOST_PP_INTERCEPT_105\n# define BOOST_PP_INTERCEPT_106\n# define BOOST_PP_INTERCEPT_107\n# define BOOST_PP_INTERCEPT_108\n# define BOOST_PP_INTERCEPT_109\n# define BOOST_PP_INTERCEPT_110\n# define BOOST_PP_INTERCEPT_111\n# define BOOST_PP_INTERCEPT_112\n# define BOOST_PP_INTERCEPT_113\n# define BOOST_PP_INTERCEPT_114\n# define BOOST_PP_INTERCEPT_115\n# define BOOST_PP_INTERCEPT_116\n# define BOOST_PP_INTERCEPT_117\n# define BOOST_PP_INTERCEPT_118\n# define BOOST_PP_INTERCEPT_119\n# define BOOST_PP_INTERCEPT_120\n# define BOOST_PP_INTERCEPT_121\n# define BOOST_PP_INTERCEPT_122\n# define BOOST_PP_INTERCEPT_123\n# define BOOST_PP_INTERCEPT_124\n# define BOOST_PP_INTERCEPT_125\n# define BOOST_PP_INTERCEPT_126\n# define BOOST_PP_INTERCEPT_127\n# define BOOST_PP_INTERCEPT_128\n# define BOOST_PP_INTERCEPT_129\n# define BOOST_PP_INTERCEPT_130\n# define BOOST_PP_INTERCEPT_131\n# define BOOST_PP_INTERCEPT_132\n# define BOOST_PP_INTERCEPT_133\n# define BOOST_PP_INTERCEPT_134\n# define BOOST_PP_INTERCEPT_135\n# define BOOST_PP_INTERCEPT_136\n# define BOOST_PP_INTERCEPT_137\n# define BOOST_PP_INTERCEPT_138\n# define BOOST_PP_INTERCEPT_139\n# define BOOST_PP_INTERCEPT_140\n# define BOOST_PP_INTERCEPT_141\n# define BOOST_PP_INTERCEPT_142\n# define BOOST_PP_INTERCEPT_143\n# define BOOST_PP_INTERCEPT_144\n# define BOOST_PP_INTERCEPT_145\n# define BOOST_PP_INTERCEPT_146\n# define BOOST_PP_INTERCEPT_147\n# define BOOST_PP_INTERCEPT_148\n# define BOOST_PP_INTERCEPT_149\n# define BOOST_PP_INTERCEPT_150\n# define BOOST_PP_INTERCEPT_151\n# define BOOST_PP_INTERCEPT_152\n# define BOOST_PP_INTERCEPT_153\n# define BOOST_PP_INTERCEPT_154\n# define BOOST_PP_INTERCEPT_155\n# define BOOST_PP_INTERCEPT_156\n# define BOOST_PP_INTERCEPT_157\n# define BOOST_PP_INTERCEPT_158\n# define BOOST_PP_INTERCEPT_159\n# define BOOST_PP_INTERCEPT_160\n# define BOOST_PP_INTERCEPT_161\n# define BOOST_PP_INTERCEPT_162\n# define BOOST_PP_INTERCEPT_163\n# define BOOST_PP_INTERCEPT_164\n# define BOOST_PP_INTERCEPT_165\n# define BOOST_PP_INTERCEPT_166\n# define BOOST_PP_INTERCEPT_167\n# define BOOST_PP_INTERCEPT_168\n# define BOOST_PP_INTERCEPT_169\n# define BOOST_PP_INTERCEPT_170\n# define BOOST_PP_INTERCEPT_171\n# define BOOST_PP_INTERCEPT_172\n# define BOOST_PP_INTERCEPT_173\n# define BOOST_PP_INTERCEPT_174\n# define BOOST_PP_INTERCEPT_175\n# define BOOST_PP_INTERCEPT_176\n# define BOOST_PP_INTERCEPT_177\n# define BOOST_PP_INTERCEPT_178\n# define BOOST_PP_INTERCEPT_179\n# define BOOST_PP_INTERCEPT_180\n# define BOOST_PP_INTERCEPT_181\n# define BOOST_PP_INTERCEPT_182\n# define BOOST_PP_INTERCEPT_183\n# define BOOST_PP_INTERCEPT_184\n# define BOOST_PP_INTERCEPT_185\n# define BOOST_PP_INTERCEPT_186\n# define BOOST_PP_INTERCEPT_187\n# define BOOST_PP_INTERCEPT_188\n# define BOOST_PP_INTERCEPT_189\n# define BOOST_PP_INTERCEPT_190\n# define BOOST_PP_INTERCEPT_191\n# define BOOST_PP_INTERCEPT_192\n# define BOOST_PP_INTERCEPT_193\n# define BOOST_PP_INTERCEPT_194\n# define BOOST_PP_INTERCEPT_195\n# define BOOST_PP_INTERCEPT_196\n# define BOOST_PP_INTERCEPT_197\n# define BOOST_PP_INTERCEPT_198\n# define BOOST_PP_INTERCEPT_199\n# define BOOST_PP_INTERCEPT_200\n# define BOOST_PP_INTERCEPT_201\n# define BOOST_PP_INTERCEPT_202\n# define BOOST_PP_INTERCEPT_203\n# define BOOST_PP_INTERCEPT_204\n# define BOOST_PP_INTERCEPT_205\n# define BOOST_PP_INTERCEPT_206\n# define BOOST_PP_INTERCEPT_207\n# define BOOST_PP_INTERCEPT_208\n# define BOOST_PP_INTERCEPT_209\n# define BOOST_PP_INTERCEPT_210\n# define BOOST_PP_INTERCEPT_211\n# define BOOST_PP_INTERCEPT_212\n# define BOOST_PP_INTERCEPT_213\n# define BOOST_PP_INTERCEPT_214\n# define BOOST_PP_INTERCEPT_215\n# define BOOST_PP_INTERCEPT_216\n# define BOOST_PP_INTERCEPT_217\n# define BOOST_PP_INTERCEPT_218\n# define BOOST_PP_INTERCEPT_219\n# define BOOST_PP_INTERCEPT_220\n# define BOOST_PP_INTERCEPT_221\n# define BOOST_PP_INTERCEPT_222\n# define BOOST_PP_INTERCEPT_223\n# define BOOST_PP_INTERCEPT_224\n# define BOOST_PP_INTERCEPT_225\n# define BOOST_PP_INTERCEPT_226\n# define BOOST_PP_INTERCEPT_227\n# define BOOST_PP_INTERCEPT_228\n# define BOOST_PP_INTERCEPT_229\n# define BOOST_PP_INTERCEPT_230\n# define BOOST_PP_INTERCEPT_231\n# define BOOST_PP_INTERCEPT_232\n# define BOOST_PP_INTERCEPT_233\n# define BOOST_PP_INTERCEPT_234\n# define BOOST_PP_INTERCEPT_235\n# define BOOST_PP_INTERCEPT_236\n# define BOOST_PP_INTERCEPT_237\n# define BOOST_PP_INTERCEPT_238\n# define BOOST_PP_INTERCEPT_239\n# define BOOST_PP_INTERCEPT_240\n# define BOOST_PP_INTERCEPT_241\n# define BOOST_PP_INTERCEPT_242\n# define BOOST_PP_INTERCEPT_243\n# define BOOST_PP_INTERCEPT_244\n# define BOOST_PP_INTERCEPT_245\n# define BOOST_PP_INTERCEPT_246\n# define BOOST_PP_INTERCEPT_247\n# define BOOST_PP_INTERCEPT_248\n# define BOOST_PP_INTERCEPT_249\n# define BOOST_PP_INTERCEPT_250\n# define BOOST_PP_INTERCEPT_251\n# define BOOST_PP_INTERCEPT_252\n# define BOOST_PP_INTERCEPT_253\n# define BOOST_PP_INTERCEPT_254\n# define BOOST_PP_INTERCEPT_255\n# define BOOST_PP_INTERCEPT_256\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/is_1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2003.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_1_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_IS_1_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/facilities/is_empty.hpp>\n#\n# /* BOOST_PP_IS_1 */\n#\n# define BOOST_PP_IS_1(x) BOOST_PP_IS_EMPTY(BOOST_PP_CAT(BOOST_PP_IS_1_HELPER_, x))\n# define BOOST_PP_IS_1_HELPER_1\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/is_empty.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2003.\n#  *     (C) Copyright Edward Diener 2014.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_VARIADICS\n#\n# include <boost/preprocessor/facilities/is_empty_variadic.hpp>\n#\n# else\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/facilities/identity.hpp>\n# else\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/detail/split.hpp>\n# endif\n#\n# /* BOOST_PP_IS_EMPTY */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I(x BOOST_PP_IS_EMPTY_HELPER)\n#    define BOOST_PP_IS_EMPTY_I(contents) BOOST_PP_TUPLE_ELEM(2, 1, (BOOST_PP_IS_EMPTY_DEF_ ## contents()))\n#    define BOOST_PP_IS_EMPTY_DEF_BOOST_PP_IS_EMPTY_HELPER 1, BOOST_PP_IDENTITY(1)\n#    define BOOST_PP_IS_EMPTY_HELPER() , 0\n# else\n#    if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#        define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I(BOOST_PP_IS_EMPTY_HELPER x ())\n#        define BOOST_PP_IS_EMPTY_I(test) BOOST_PP_IS_EMPTY_II(BOOST_PP_SPLIT(0, BOOST_PP_CAT(BOOST_PP_IS_EMPTY_DEF_, test)))\n#        define BOOST_PP_IS_EMPTY_II(id) id\n#    else\n#        define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I((BOOST_PP_IS_EMPTY_HELPER x ()))\n#        define BOOST_PP_IS_EMPTY_I(par) BOOST_PP_IS_EMPTY_II ## par\n#        define BOOST_PP_IS_EMPTY_II(test) BOOST_PP_SPLIT(0, BOOST_PP_CAT(BOOST_PP_IS_EMPTY_DEF_, test))\n#    endif\n#    define BOOST_PP_IS_EMPTY_HELPER() 1\n#    define BOOST_PP_IS_EMPTY_DEF_1 1, BOOST_PP_NIL\n#    define BOOST_PP_IS_EMPTY_DEF_BOOST_PP_IS_EMPTY_HELPER 0, BOOST_PP_NIL\n# endif\n#\n# endif /* BOOST_PP_VARIADICS */\n#\n# endif /* BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/is_empty_or_1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2003.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_OR_1_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_OR_1_HPP\n#\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n# include <boost/preprocessor/facilities/identity.hpp>\n# include <boost/preprocessor/facilities/is_1.hpp>\n# include <boost/preprocessor/facilities/is_empty.hpp>\n#\n# /* BOOST_PP_IS_EMPTY_OR_1 */\n#\n# define BOOST_PP_IS_EMPTY_OR_1(x) \\\n    BOOST_PP_IIF( \\\n        BOOST_PP_IS_EMPTY(x BOOST_PP_EMPTY()), \\\n        BOOST_PP_IDENTITY(1), \\\n        BOOST_PP_IS_1 \\\n    )(x) \\\n    /**/\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/is_empty_variadic.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2014.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_VARIADICS\n#\n# include <boost/preprocessor/punctuation/is_begin_parens.hpp>\n# include <boost/preprocessor/facilities/detail/is_empty.hpp>\n#\n#if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400\n#\n#define BOOST_PP_IS_EMPTY(param) \\\n    BOOST_PP_DETAIL_IS_EMPTY_IIF \\\n      ( \\\n      BOOST_PP_IS_BEGIN_PARENS \\\n        ( \\\n        param \\\n        ) \\\n      ) \\\n      ( \\\n      BOOST_PP_IS_EMPTY_ZERO, \\\n      BOOST_PP_DETAIL_IS_EMPTY_PROCESS \\\n      ) \\\n    (param) \\\n/**/\n#define BOOST_PP_IS_EMPTY_ZERO(param) 0\n# else\n#define BOOST_PP_IS_EMPTY(...) \\\n    BOOST_PP_DETAIL_IS_EMPTY_IIF \\\n      ( \\\n      BOOST_PP_IS_BEGIN_PARENS \\\n        ( \\\n        __VA_ARGS__ \\\n        ) \\\n      ) \\\n      ( \\\n      BOOST_PP_IS_EMPTY_ZERO, \\\n      BOOST_PP_DETAIL_IS_EMPTY_PROCESS \\\n      ) \\\n    (__VA_ARGS__) \\\n/**/\n#define BOOST_PP_IS_EMPTY_ZERO(...) 0\n# endif /* BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 */\n# endif /* BOOST_PP_VARIADICS */\n# endif /* BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities/overload.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_OVERLOAD_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_OVERLOAD_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n#\n# /* BOOST_PP_OVERLOAD */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_OVERLOAD(prefix, ...) BOOST_PP_CAT(prefix, BOOST_PP_VARIADIC_SIZE(__VA_ARGS__))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/facilities.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002-2011.                             *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_HPP\n#\n# include <boost/preprocessor/facilities/apply.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n# include <boost/preprocessor/facilities/expand.hpp>\n# include <boost/preprocessor/facilities/identity.hpp>\n# include <boost/preprocessor/facilities/intercept.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/for.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FOR_HPP\n# define BOOST_PREPROCESSOR_FOR_HPP\n#\n# include <boost/preprocessor/repetition/for.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/identity.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_IDENTITY_HPP\n# define BOOST_PREPROCESSOR_IDENTITY_HPP\n#\n# include <boost/preprocessor/facilities/identity.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/if.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_IF_HPP\n# define BOOST_PREPROCESSOR_IF_HPP\n#\n# include <boost/preprocessor/control/if.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/inc.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_INC_HPP\n# define BOOST_PREPROCESSOR_INC_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iterate.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ITERATE_HPP\n# define BOOST_PREPROCESSOR_ITERATE_HPP\n#\n# include <boost/preprocessor/iteration/iterate.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/lower1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_START_1\n#\n# undef BOOST_PP_ITERATION_START_1_DIGIT_1\n# undef BOOST_PP_ITERATION_START_1_DIGIT_2\n# undef BOOST_PP_ITERATION_START_1_DIGIT_3\n# undef BOOST_PP_ITERATION_START_1_DIGIT_4\n# undef BOOST_PP_ITERATION_START_1_DIGIT_5\n# undef BOOST_PP_ITERATION_START_1_DIGIT_6\n# undef BOOST_PP_ITERATION_START_1_DIGIT_7\n# undef BOOST_PP_ITERATION_START_1_DIGIT_8\n# undef BOOST_PP_ITERATION_START_1_DIGIT_9\n# undef BOOST_PP_ITERATION_START_1_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_START_1_DIGIT_3\n#    define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_1_DIGIT_3, BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1)\n# elif BOOST_PP_ITERATION_START_1_DIGIT_2\n#    define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_START_1 BOOST_PP_ITERATION_START_1_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/lower2.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_START_2\n#\n# undef BOOST_PP_ITERATION_START_2_DIGIT_1\n# undef BOOST_PP_ITERATION_START_2_DIGIT_2\n# undef BOOST_PP_ITERATION_START_2_DIGIT_3\n# undef BOOST_PP_ITERATION_START_2_DIGIT_4\n# undef BOOST_PP_ITERATION_START_2_DIGIT_5\n# undef BOOST_PP_ITERATION_START_2_DIGIT_6\n# undef BOOST_PP_ITERATION_START_2_DIGIT_7\n# undef BOOST_PP_ITERATION_START_2_DIGIT_8\n# undef BOOST_PP_ITERATION_START_2_DIGIT_9\n# undef BOOST_PP_ITERATION_START_2_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_START_2_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_START_2_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_START_2_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_START_2_DIGIT_3\n#    define BOOST_PP_ITERATION_START_2 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_2_DIGIT_3, BOOST_PP_ITERATION_START_2_DIGIT_2, BOOST_PP_ITERATION_START_2_DIGIT_1)\n# elif BOOST_PP_ITERATION_START_2_DIGIT_2\n#    define BOOST_PP_ITERATION_START_2 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_2_DIGIT_2, BOOST_PP_ITERATION_START_2_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_START_2 BOOST_PP_ITERATION_START_2_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/lower3.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_START_3\n#\n# undef BOOST_PP_ITERATION_START_3_DIGIT_1\n# undef BOOST_PP_ITERATION_START_3_DIGIT_2\n# undef BOOST_PP_ITERATION_START_3_DIGIT_3\n# undef BOOST_PP_ITERATION_START_3_DIGIT_4\n# undef BOOST_PP_ITERATION_START_3_DIGIT_5\n# undef BOOST_PP_ITERATION_START_3_DIGIT_6\n# undef BOOST_PP_ITERATION_START_3_DIGIT_7\n# undef BOOST_PP_ITERATION_START_3_DIGIT_8\n# undef BOOST_PP_ITERATION_START_3_DIGIT_9\n# undef BOOST_PP_ITERATION_START_3_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_START_3_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_START_3_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_START_3_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_START_3_DIGIT_3\n#    define BOOST_PP_ITERATION_START_3 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_3_DIGIT_3, BOOST_PP_ITERATION_START_3_DIGIT_2, BOOST_PP_ITERATION_START_3_DIGIT_1)\n# elif BOOST_PP_ITERATION_START_3_DIGIT_2\n#    define BOOST_PP_ITERATION_START_3 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_3_DIGIT_2, BOOST_PP_ITERATION_START_3_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_START_3 BOOST_PP_ITERATION_START_3_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/lower4.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_START_4\n#\n# undef BOOST_PP_ITERATION_START_4_DIGIT_1\n# undef BOOST_PP_ITERATION_START_4_DIGIT_2\n# undef BOOST_PP_ITERATION_START_4_DIGIT_3\n# undef BOOST_PP_ITERATION_START_4_DIGIT_4\n# undef BOOST_PP_ITERATION_START_4_DIGIT_5\n# undef BOOST_PP_ITERATION_START_4_DIGIT_6\n# undef BOOST_PP_ITERATION_START_4_DIGIT_7\n# undef BOOST_PP_ITERATION_START_4_DIGIT_8\n# undef BOOST_PP_ITERATION_START_4_DIGIT_9\n# undef BOOST_PP_ITERATION_START_4_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_START_4_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_START_4_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_START_4_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_START_4_DIGIT_3\n#    define BOOST_PP_ITERATION_START_4 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_4_DIGIT_3, BOOST_PP_ITERATION_START_4_DIGIT_2, BOOST_PP_ITERATION_START_4_DIGIT_1)\n# elif BOOST_PP_ITERATION_START_4_DIGIT_2\n#    define BOOST_PP_ITERATION_START_4 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_4_DIGIT_2, BOOST_PP_ITERATION_START_4_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_START_4 BOOST_PP_ITERATION_START_4_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/lower5.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_START_5\n#\n# undef BOOST_PP_ITERATION_START_5_DIGIT_1\n# undef BOOST_PP_ITERATION_START_5_DIGIT_2\n# undef BOOST_PP_ITERATION_START_5_DIGIT_3\n# undef BOOST_PP_ITERATION_START_5_DIGIT_4\n# undef BOOST_PP_ITERATION_START_5_DIGIT_5\n# undef BOOST_PP_ITERATION_START_5_DIGIT_6\n# undef BOOST_PP_ITERATION_START_5_DIGIT_7\n# undef BOOST_PP_ITERATION_START_5_DIGIT_8\n# undef BOOST_PP_ITERATION_START_5_DIGIT_9\n# undef BOOST_PP_ITERATION_START_5_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_START_5_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_START_5_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_START_5_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_START_5_DIGIT_3\n#    define BOOST_PP_ITERATION_START_5 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_5_DIGIT_3, BOOST_PP_ITERATION_START_5_DIGIT_2, BOOST_PP_ITERATION_START_5_DIGIT_1)\n# elif BOOST_PP_ITERATION_START_5_DIGIT_2\n#    define BOOST_PP_ITERATION_START_5 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_5_DIGIT_2, BOOST_PP_ITERATION_START_5_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_START_5 BOOST_PP_ITERATION_START_5_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/upper1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_FINISH_1\n#\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_1\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_2\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_3\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_4\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_5\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_6\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_7\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_8\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_9\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_FINISH_1_DIGIT_3\n#    define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_1_DIGIT_3, BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1)\n# elif BOOST_PP_ITERATION_FINISH_1_DIGIT_2\n#    define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_ITERATION_FINISH_1_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/upper2.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_FINISH_2\n#\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_1\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_2\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_3\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_4\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_5\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_6\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_7\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_8\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_9\n# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_FINISH_2_DIGIT_3\n#    define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_2_DIGIT_3, BOOST_PP_ITERATION_FINISH_2_DIGIT_2, BOOST_PP_ITERATION_FINISH_2_DIGIT_1)\n# elif BOOST_PP_ITERATION_FINISH_2_DIGIT_2\n#    define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_2_DIGIT_2, BOOST_PP_ITERATION_FINISH_2_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_ITERATION_FINISH_2_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/upper3.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_FINISH_3\n#\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_1\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_2\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_3\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_4\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_5\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_6\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_7\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_8\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_9\n# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_FINISH_3_DIGIT_3\n#    define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_3_DIGIT_3, BOOST_PP_ITERATION_FINISH_3_DIGIT_2, BOOST_PP_ITERATION_FINISH_3_DIGIT_1)\n# elif BOOST_PP_ITERATION_FINISH_3_DIGIT_2\n#    define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_3_DIGIT_2, BOOST_PP_ITERATION_FINISH_3_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_ITERATION_FINISH_3_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/upper4.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_FINISH_4\n#\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_1\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_2\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_3\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_4\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_5\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_6\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_7\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_8\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_9\n# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_FINISH_4_DIGIT_3\n#    define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_4_DIGIT_3, BOOST_PP_ITERATION_FINISH_4_DIGIT_2, BOOST_PP_ITERATION_FINISH_4_DIGIT_1)\n# elif BOOST_PP_ITERATION_FINISH_4_DIGIT_2\n#    define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_4_DIGIT_2, BOOST_PP_ITERATION_FINISH_4_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_ITERATION_FINISH_4_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/bounds/upper5.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_FINISH_5\n#\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_1\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_2\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_3\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_4\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_5\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_6\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_7\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_8\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_9\n# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_FINISH_5_DIGIT_3\n#    define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_5_DIGIT_3, BOOST_PP_ITERATION_FINISH_5_DIGIT_2, BOOST_PP_ITERATION_FINISH_5_DIGIT_1)\n# elif BOOST_PP_ITERATION_FINISH_5_DIGIT_2\n#    define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_5_DIGIT_2, BOOST_PP_ITERATION_FINISH_5_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_ITERATION_FINISH_5_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/finish.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_LOCAL_FE\n#\n# undef BOOST_PP_LOCAL_FE_DIGIT_1\n# undef BOOST_PP_LOCAL_FE_DIGIT_2\n# undef BOOST_PP_LOCAL_FE_DIGIT_3\n# undef BOOST_PP_LOCAL_FE_DIGIT_4\n# undef BOOST_PP_LOCAL_FE_DIGIT_5\n# undef BOOST_PP_LOCAL_FE_DIGIT_6\n# undef BOOST_PP_LOCAL_FE_DIGIT_7\n# undef BOOST_PP_LOCAL_FE_DIGIT_8\n# undef BOOST_PP_LOCAL_FE_DIGIT_9\n# undef BOOST_PP_LOCAL_FE_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_LOCAL_FE_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_LOCAL_FE_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_LOCAL_FE_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_LOCAL_FE_DIGIT_3\n#    define BOOST_PP_LOCAL_FE() BOOST_PP_SLOT_CC_3(BOOST_PP_LOCAL_FE_DIGIT_3, BOOST_PP_LOCAL_FE_DIGIT_2, BOOST_PP_LOCAL_FE_DIGIT_1)\n# elif BOOST_PP_LOCAL_FE_DIGIT_2\n#    define BOOST_PP_LOCAL_FE() BOOST_PP_SLOT_CC_2(BOOST_PP_LOCAL_FE_DIGIT_2, BOOST_PP_LOCAL_FE_DIGIT_1)\n# else\n#    define BOOST_PP_LOCAL_FE() BOOST_PP_LOCAL_FE_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/forward1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if defined(BOOST_PP_ITERATION_LIMITS)\n#    if !defined(BOOST_PP_FILENAME_1)\n#        error BOOST_PP_ERROR:  depth #1 filename is not defined\n#    endif\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/lower1.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/upper1.hpp>\n#    define BOOST_PP_ITERATION_FLAGS_1() 0\n#    undef BOOST_PP_ITERATION_LIMITS\n# elif defined(BOOST_PP_ITERATION_PARAMS_1)\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_1)\n#    include <boost/preprocessor/iteration/detail/bounds/lower1.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_1)\n#    include <boost/preprocessor/iteration/detail/bounds/upper1.hpp>\n#    define BOOST_PP_FILENAME_1 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_1)\n#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_1) >= 4\n#        define BOOST_PP_ITERATION_FLAGS_1() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_1)\n#    else\n#        define BOOST_PP_ITERATION_FLAGS_1() 0\n#    endif\n# else\n#    error BOOST_PP_ERROR:  depth #1 iteration boundaries or filename not defined\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 1\n#\n# define BOOST_PP_IS_ITERATING 1\n#\n# if (BOOST_PP_ITERATION_START_1) > (BOOST_PP_ITERATION_FINISH_1)\n#    include <boost/preprocessor/iteration/detail/iter/reverse1.hpp>\n# else\n#    if BOOST_PP_ITERATION_START_1 <= 0 && BOOST_PP_ITERATION_FINISH_1 >= 0\n#        define BOOST_PP_ITERATION_1 0\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 1 && BOOST_PP_ITERATION_FINISH_1 >= 1\n#        define BOOST_PP_ITERATION_1 1\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 2 && BOOST_PP_ITERATION_FINISH_1 >= 2\n#        define BOOST_PP_ITERATION_1 2\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 3 && BOOST_PP_ITERATION_FINISH_1 >= 3\n#        define BOOST_PP_ITERATION_1 3\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 4 && BOOST_PP_ITERATION_FINISH_1 >= 4\n#        define BOOST_PP_ITERATION_1 4\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 5 && BOOST_PP_ITERATION_FINISH_1 >= 5\n#        define BOOST_PP_ITERATION_1 5\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 6 && BOOST_PP_ITERATION_FINISH_1 >= 6\n#        define BOOST_PP_ITERATION_1 6\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 7 && BOOST_PP_ITERATION_FINISH_1 >= 7\n#        define BOOST_PP_ITERATION_1 7\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 8 && BOOST_PP_ITERATION_FINISH_1 >= 8\n#        define BOOST_PP_ITERATION_1 8\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 9 && BOOST_PP_ITERATION_FINISH_1 >= 9\n#        define BOOST_PP_ITERATION_1 9\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 10 && BOOST_PP_ITERATION_FINISH_1 >= 10\n#        define BOOST_PP_ITERATION_1 10\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 11 && BOOST_PP_ITERATION_FINISH_1 >= 11\n#        define BOOST_PP_ITERATION_1 11\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 12 && BOOST_PP_ITERATION_FINISH_1 >= 12\n#        define BOOST_PP_ITERATION_1 12\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 13 && BOOST_PP_ITERATION_FINISH_1 >= 13\n#        define BOOST_PP_ITERATION_1 13\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 14 && BOOST_PP_ITERATION_FINISH_1 >= 14\n#        define BOOST_PP_ITERATION_1 14\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 15 && BOOST_PP_ITERATION_FINISH_1 >= 15\n#        define BOOST_PP_ITERATION_1 15\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 16 && BOOST_PP_ITERATION_FINISH_1 >= 16\n#        define BOOST_PP_ITERATION_1 16\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 17 && BOOST_PP_ITERATION_FINISH_1 >= 17\n#        define BOOST_PP_ITERATION_1 17\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 18 && BOOST_PP_ITERATION_FINISH_1 >= 18\n#        define BOOST_PP_ITERATION_1 18\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 19 && BOOST_PP_ITERATION_FINISH_1 >= 19\n#        define BOOST_PP_ITERATION_1 19\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 20 && BOOST_PP_ITERATION_FINISH_1 >= 20\n#        define BOOST_PP_ITERATION_1 20\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 21 && BOOST_PP_ITERATION_FINISH_1 >= 21\n#        define BOOST_PP_ITERATION_1 21\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 22 && BOOST_PP_ITERATION_FINISH_1 >= 22\n#        define BOOST_PP_ITERATION_1 22\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 23 && BOOST_PP_ITERATION_FINISH_1 >= 23\n#        define BOOST_PP_ITERATION_1 23\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 24 && BOOST_PP_ITERATION_FINISH_1 >= 24\n#        define BOOST_PP_ITERATION_1 24\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 25 && BOOST_PP_ITERATION_FINISH_1 >= 25\n#        define BOOST_PP_ITERATION_1 25\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 26 && BOOST_PP_ITERATION_FINISH_1 >= 26\n#        define BOOST_PP_ITERATION_1 26\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 27 && BOOST_PP_ITERATION_FINISH_1 >= 27\n#        define BOOST_PP_ITERATION_1 27\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 28 && BOOST_PP_ITERATION_FINISH_1 >= 28\n#        define BOOST_PP_ITERATION_1 28\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 29 && BOOST_PP_ITERATION_FINISH_1 >= 29\n#        define BOOST_PP_ITERATION_1 29\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 30 && BOOST_PP_ITERATION_FINISH_1 >= 30\n#        define BOOST_PP_ITERATION_1 30\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 31 && BOOST_PP_ITERATION_FINISH_1 >= 31\n#        define BOOST_PP_ITERATION_1 31\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 32 && BOOST_PP_ITERATION_FINISH_1 >= 32\n#        define BOOST_PP_ITERATION_1 32\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 33 && BOOST_PP_ITERATION_FINISH_1 >= 33\n#        define BOOST_PP_ITERATION_1 33\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 34 && BOOST_PP_ITERATION_FINISH_1 >= 34\n#        define BOOST_PP_ITERATION_1 34\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 35 && BOOST_PP_ITERATION_FINISH_1 >= 35\n#        define BOOST_PP_ITERATION_1 35\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 36 && BOOST_PP_ITERATION_FINISH_1 >= 36\n#        define BOOST_PP_ITERATION_1 36\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 37 && BOOST_PP_ITERATION_FINISH_1 >= 37\n#        define BOOST_PP_ITERATION_1 37\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 38 && BOOST_PP_ITERATION_FINISH_1 >= 38\n#        define BOOST_PP_ITERATION_1 38\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 39 && BOOST_PP_ITERATION_FINISH_1 >= 39\n#        define BOOST_PP_ITERATION_1 39\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 40 && BOOST_PP_ITERATION_FINISH_1 >= 40\n#        define BOOST_PP_ITERATION_1 40\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 41 && BOOST_PP_ITERATION_FINISH_1 >= 41\n#        define BOOST_PP_ITERATION_1 41\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 42 && BOOST_PP_ITERATION_FINISH_1 >= 42\n#        define BOOST_PP_ITERATION_1 42\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 43 && BOOST_PP_ITERATION_FINISH_1 >= 43\n#        define BOOST_PP_ITERATION_1 43\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 44 && BOOST_PP_ITERATION_FINISH_1 >= 44\n#        define BOOST_PP_ITERATION_1 44\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 45 && BOOST_PP_ITERATION_FINISH_1 >= 45\n#        define BOOST_PP_ITERATION_1 45\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 46 && BOOST_PP_ITERATION_FINISH_1 >= 46\n#        define BOOST_PP_ITERATION_1 46\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 47 && BOOST_PP_ITERATION_FINISH_1 >= 47\n#        define BOOST_PP_ITERATION_1 47\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 48 && BOOST_PP_ITERATION_FINISH_1 >= 48\n#        define BOOST_PP_ITERATION_1 48\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 49 && BOOST_PP_ITERATION_FINISH_1 >= 49\n#        define BOOST_PP_ITERATION_1 49\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 50 && BOOST_PP_ITERATION_FINISH_1 >= 50\n#        define BOOST_PP_ITERATION_1 50\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 51 && BOOST_PP_ITERATION_FINISH_1 >= 51\n#        define BOOST_PP_ITERATION_1 51\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 52 && BOOST_PP_ITERATION_FINISH_1 >= 52\n#        define BOOST_PP_ITERATION_1 52\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 53 && BOOST_PP_ITERATION_FINISH_1 >= 53\n#        define BOOST_PP_ITERATION_1 53\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 54 && BOOST_PP_ITERATION_FINISH_1 >= 54\n#        define BOOST_PP_ITERATION_1 54\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 55 && BOOST_PP_ITERATION_FINISH_1 >= 55\n#        define BOOST_PP_ITERATION_1 55\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 56 && BOOST_PP_ITERATION_FINISH_1 >= 56\n#        define BOOST_PP_ITERATION_1 56\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 57 && BOOST_PP_ITERATION_FINISH_1 >= 57\n#        define BOOST_PP_ITERATION_1 57\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 58 && BOOST_PP_ITERATION_FINISH_1 >= 58\n#        define BOOST_PP_ITERATION_1 58\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 59 && BOOST_PP_ITERATION_FINISH_1 >= 59\n#        define BOOST_PP_ITERATION_1 59\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 60 && BOOST_PP_ITERATION_FINISH_1 >= 60\n#        define BOOST_PP_ITERATION_1 60\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 61 && BOOST_PP_ITERATION_FINISH_1 >= 61\n#        define BOOST_PP_ITERATION_1 61\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 62 && BOOST_PP_ITERATION_FINISH_1 >= 62\n#        define BOOST_PP_ITERATION_1 62\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 63 && BOOST_PP_ITERATION_FINISH_1 >= 63\n#        define BOOST_PP_ITERATION_1 63\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 64 && BOOST_PP_ITERATION_FINISH_1 >= 64\n#        define BOOST_PP_ITERATION_1 64\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 65 && BOOST_PP_ITERATION_FINISH_1 >= 65\n#        define BOOST_PP_ITERATION_1 65\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 66 && BOOST_PP_ITERATION_FINISH_1 >= 66\n#        define BOOST_PP_ITERATION_1 66\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 67 && BOOST_PP_ITERATION_FINISH_1 >= 67\n#        define BOOST_PP_ITERATION_1 67\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 68 && BOOST_PP_ITERATION_FINISH_1 >= 68\n#        define BOOST_PP_ITERATION_1 68\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 69 && BOOST_PP_ITERATION_FINISH_1 >= 69\n#        define BOOST_PP_ITERATION_1 69\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 70 && BOOST_PP_ITERATION_FINISH_1 >= 70\n#        define BOOST_PP_ITERATION_1 70\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 71 && BOOST_PP_ITERATION_FINISH_1 >= 71\n#        define BOOST_PP_ITERATION_1 71\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 72 && BOOST_PP_ITERATION_FINISH_1 >= 72\n#        define BOOST_PP_ITERATION_1 72\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 73 && BOOST_PP_ITERATION_FINISH_1 >= 73\n#        define BOOST_PP_ITERATION_1 73\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 74 && BOOST_PP_ITERATION_FINISH_1 >= 74\n#        define BOOST_PP_ITERATION_1 74\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 75 && BOOST_PP_ITERATION_FINISH_1 >= 75\n#        define BOOST_PP_ITERATION_1 75\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 76 && BOOST_PP_ITERATION_FINISH_1 >= 76\n#        define BOOST_PP_ITERATION_1 76\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 77 && BOOST_PP_ITERATION_FINISH_1 >= 77\n#        define BOOST_PP_ITERATION_1 77\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 78 && BOOST_PP_ITERATION_FINISH_1 >= 78\n#        define BOOST_PP_ITERATION_1 78\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 79 && BOOST_PP_ITERATION_FINISH_1 >= 79\n#        define BOOST_PP_ITERATION_1 79\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 80 && BOOST_PP_ITERATION_FINISH_1 >= 80\n#        define BOOST_PP_ITERATION_1 80\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 81 && BOOST_PP_ITERATION_FINISH_1 >= 81\n#        define BOOST_PP_ITERATION_1 81\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 82 && BOOST_PP_ITERATION_FINISH_1 >= 82\n#        define BOOST_PP_ITERATION_1 82\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 83 && BOOST_PP_ITERATION_FINISH_1 >= 83\n#        define BOOST_PP_ITERATION_1 83\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 84 && BOOST_PP_ITERATION_FINISH_1 >= 84\n#        define BOOST_PP_ITERATION_1 84\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 85 && BOOST_PP_ITERATION_FINISH_1 >= 85\n#        define BOOST_PP_ITERATION_1 85\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 86 && BOOST_PP_ITERATION_FINISH_1 >= 86\n#        define BOOST_PP_ITERATION_1 86\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 87 && BOOST_PP_ITERATION_FINISH_1 >= 87\n#        define BOOST_PP_ITERATION_1 87\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 88 && BOOST_PP_ITERATION_FINISH_1 >= 88\n#        define BOOST_PP_ITERATION_1 88\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 89 && BOOST_PP_ITERATION_FINISH_1 >= 89\n#        define BOOST_PP_ITERATION_1 89\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 90 && BOOST_PP_ITERATION_FINISH_1 >= 90\n#        define BOOST_PP_ITERATION_1 90\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 91 && BOOST_PP_ITERATION_FINISH_1 >= 91\n#        define BOOST_PP_ITERATION_1 91\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 92 && BOOST_PP_ITERATION_FINISH_1 >= 92\n#        define BOOST_PP_ITERATION_1 92\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 93 && BOOST_PP_ITERATION_FINISH_1 >= 93\n#        define BOOST_PP_ITERATION_1 93\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 94 && BOOST_PP_ITERATION_FINISH_1 >= 94\n#        define BOOST_PP_ITERATION_1 94\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 95 && BOOST_PP_ITERATION_FINISH_1 >= 95\n#        define BOOST_PP_ITERATION_1 95\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 96 && BOOST_PP_ITERATION_FINISH_1 >= 96\n#        define BOOST_PP_ITERATION_1 96\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 97 && BOOST_PP_ITERATION_FINISH_1 >= 97\n#        define BOOST_PP_ITERATION_1 97\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 98 && BOOST_PP_ITERATION_FINISH_1 >= 98\n#        define BOOST_PP_ITERATION_1 98\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 99 && BOOST_PP_ITERATION_FINISH_1 >= 99\n#        define BOOST_PP_ITERATION_1 99\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 100 && BOOST_PP_ITERATION_FINISH_1 >= 100\n#        define BOOST_PP_ITERATION_1 100\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 101 && BOOST_PP_ITERATION_FINISH_1 >= 101\n#        define BOOST_PP_ITERATION_1 101\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 102 && BOOST_PP_ITERATION_FINISH_1 >= 102\n#        define BOOST_PP_ITERATION_1 102\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 103 && BOOST_PP_ITERATION_FINISH_1 >= 103\n#        define BOOST_PP_ITERATION_1 103\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 104 && BOOST_PP_ITERATION_FINISH_1 >= 104\n#        define BOOST_PP_ITERATION_1 104\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 105 && BOOST_PP_ITERATION_FINISH_1 >= 105\n#        define BOOST_PP_ITERATION_1 105\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 106 && BOOST_PP_ITERATION_FINISH_1 >= 106\n#        define BOOST_PP_ITERATION_1 106\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 107 && BOOST_PP_ITERATION_FINISH_1 >= 107\n#        define BOOST_PP_ITERATION_1 107\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 108 && BOOST_PP_ITERATION_FINISH_1 >= 108\n#        define BOOST_PP_ITERATION_1 108\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 109 && BOOST_PP_ITERATION_FINISH_1 >= 109\n#        define BOOST_PP_ITERATION_1 109\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 110 && BOOST_PP_ITERATION_FINISH_1 >= 110\n#        define BOOST_PP_ITERATION_1 110\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 111 && BOOST_PP_ITERATION_FINISH_1 >= 111\n#        define BOOST_PP_ITERATION_1 111\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 112 && BOOST_PP_ITERATION_FINISH_1 >= 112\n#        define BOOST_PP_ITERATION_1 112\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 113 && BOOST_PP_ITERATION_FINISH_1 >= 113\n#        define BOOST_PP_ITERATION_1 113\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 114 && BOOST_PP_ITERATION_FINISH_1 >= 114\n#        define BOOST_PP_ITERATION_1 114\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 115 && BOOST_PP_ITERATION_FINISH_1 >= 115\n#        define BOOST_PP_ITERATION_1 115\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 116 && BOOST_PP_ITERATION_FINISH_1 >= 116\n#        define BOOST_PP_ITERATION_1 116\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 117 && BOOST_PP_ITERATION_FINISH_1 >= 117\n#        define BOOST_PP_ITERATION_1 117\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 118 && BOOST_PP_ITERATION_FINISH_1 >= 118\n#        define BOOST_PP_ITERATION_1 118\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 119 && BOOST_PP_ITERATION_FINISH_1 >= 119\n#        define BOOST_PP_ITERATION_1 119\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 120 && BOOST_PP_ITERATION_FINISH_1 >= 120\n#        define BOOST_PP_ITERATION_1 120\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 121 && BOOST_PP_ITERATION_FINISH_1 >= 121\n#        define BOOST_PP_ITERATION_1 121\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 122 && BOOST_PP_ITERATION_FINISH_1 >= 122\n#        define BOOST_PP_ITERATION_1 122\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 123 && BOOST_PP_ITERATION_FINISH_1 >= 123\n#        define BOOST_PP_ITERATION_1 123\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 124 && BOOST_PP_ITERATION_FINISH_1 >= 124\n#        define BOOST_PP_ITERATION_1 124\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 125 && BOOST_PP_ITERATION_FINISH_1 >= 125\n#        define BOOST_PP_ITERATION_1 125\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 126 && BOOST_PP_ITERATION_FINISH_1 >= 126\n#        define BOOST_PP_ITERATION_1 126\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 127 && BOOST_PP_ITERATION_FINISH_1 >= 127\n#        define BOOST_PP_ITERATION_1 127\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 128 && BOOST_PP_ITERATION_FINISH_1 >= 128\n#        define BOOST_PP_ITERATION_1 128\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 129 && BOOST_PP_ITERATION_FINISH_1 >= 129\n#        define BOOST_PP_ITERATION_1 129\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 130 && BOOST_PP_ITERATION_FINISH_1 >= 130\n#        define BOOST_PP_ITERATION_1 130\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 131 && BOOST_PP_ITERATION_FINISH_1 >= 131\n#        define BOOST_PP_ITERATION_1 131\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 132 && BOOST_PP_ITERATION_FINISH_1 >= 132\n#        define BOOST_PP_ITERATION_1 132\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 133 && BOOST_PP_ITERATION_FINISH_1 >= 133\n#        define BOOST_PP_ITERATION_1 133\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 134 && BOOST_PP_ITERATION_FINISH_1 >= 134\n#        define BOOST_PP_ITERATION_1 134\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 135 && BOOST_PP_ITERATION_FINISH_1 >= 135\n#        define BOOST_PP_ITERATION_1 135\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 136 && BOOST_PP_ITERATION_FINISH_1 >= 136\n#        define BOOST_PP_ITERATION_1 136\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 137 && BOOST_PP_ITERATION_FINISH_1 >= 137\n#        define BOOST_PP_ITERATION_1 137\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 138 && BOOST_PP_ITERATION_FINISH_1 >= 138\n#        define BOOST_PP_ITERATION_1 138\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 139 && BOOST_PP_ITERATION_FINISH_1 >= 139\n#        define BOOST_PP_ITERATION_1 139\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 140 && BOOST_PP_ITERATION_FINISH_1 >= 140\n#        define BOOST_PP_ITERATION_1 140\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 141 && BOOST_PP_ITERATION_FINISH_1 >= 141\n#        define BOOST_PP_ITERATION_1 141\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 142 && BOOST_PP_ITERATION_FINISH_1 >= 142\n#        define BOOST_PP_ITERATION_1 142\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 143 && BOOST_PP_ITERATION_FINISH_1 >= 143\n#        define BOOST_PP_ITERATION_1 143\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 144 && BOOST_PP_ITERATION_FINISH_1 >= 144\n#        define BOOST_PP_ITERATION_1 144\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 145 && BOOST_PP_ITERATION_FINISH_1 >= 145\n#        define BOOST_PP_ITERATION_1 145\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 146 && BOOST_PP_ITERATION_FINISH_1 >= 146\n#        define BOOST_PP_ITERATION_1 146\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 147 && BOOST_PP_ITERATION_FINISH_1 >= 147\n#        define BOOST_PP_ITERATION_1 147\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 148 && BOOST_PP_ITERATION_FINISH_1 >= 148\n#        define BOOST_PP_ITERATION_1 148\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 149 && BOOST_PP_ITERATION_FINISH_1 >= 149\n#        define BOOST_PP_ITERATION_1 149\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 150 && BOOST_PP_ITERATION_FINISH_1 >= 150\n#        define BOOST_PP_ITERATION_1 150\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 151 && BOOST_PP_ITERATION_FINISH_1 >= 151\n#        define BOOST_PP_ITERATION_1 151\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 152 && BOOST_PP_ITERATION_FINISH_1 >= 152\n#        define BOOST_PP_ITERATION_1 152\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 153 && BOOST_PP_ITERATION_FINISH_1 >= 153\n#        define BOOST_PP_ITERATION_1 153\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 154 && BOOST_PP_ITERATION_FINISH_1 >= 154\n#        define BOOST_PP_ITERATION_1 154\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 155 && BOOST_PP_ITERATION_FINISH_1 >= 155\n#        define BOOST_PP_ITERATION_1 155\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 156 && BOOST_PP_ITERATION_FINISH_1 >= 156\n#        define BOOST_PP_ITERATION_1 156\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 157 && BOOST_PP_ITERATION_FINISH_1 >= 157\n#        define BOOST_PP_ITERATION_1 157\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 158 && BOOST_PP_ITERATION_FINISH_1 >= 158\n#        define BOOST_PP_ITERATION_1 158\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 159 && BOOST_PP_ITERATION_FINISH_1 >= 159\n#        define BOOST_PP_ITERATION_1 159\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 160 && BOOST_PP_ITERATION_FINISH_1 >= 160\n#        define BOOST_PP_ITERATION_1 160\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 161 && BOOST_PP_ITERATION_FINISH_1 >= 161\n#        define BOOST_PP_ITERATION_1 161\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 162 && BOOST_PP_ITERATION_FINISH_1 >= 162\n#        define BOOST_PP_ITERATION_1 162\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 163 && BOOST_PP_ITERATION_FINISH_1 >= 163\n#        define BOOST_PP_ITERATION_1 163\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 164 && BOOST_PP_ITERATION_FINISH_1 >= 164\n#        define BOOST_PP_ITERATION_1 164\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 165 && BOOST_PP_ITERATION_FINISH_1 >= 165\n#        define BOOST_PP_ITERATION_1 165\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 166 && BOOST_PP_ITERATION_FINISH_1 >= 166\n#        define BOOST_PP_ITERATION_1 166\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 167 && BOOST_PP_ITERATION_FINISH_1 >= 167\n#        define BOOST_PP_ITERATION_1 167\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 168 && BOOST_PP_ITERATION_FINISH_1 >= 168\n#        define BOOST_PP_ITERATION_1 168\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 169 && BOOST_PP_ITERATION_FINISH_1 >= 169\n#        define BOOST_PP_ITERATION_1 169\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 170 && BOOST_PP_ITERATION_FINISH_1 >= 170\n#        define BOOST_PP_ITERATION_1 170\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 171 && BOOST_PP_ITERATION_FINISH_1 >= 171\n#        define BOOST_PP_ITERATION_1 171\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 172 && BOOST_PP_ITERATION_FINISH_1 >= 172\n#        define BOOST_PP_ITERATION_1 172\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 173 && BOOST_PP_ITERATION_FINISH_1 >= 173\n#        define BOOST_PP_ITERATION_1 173\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 174 && BOOST_PP_ITERATION_FINISH_1 >= 174\n#        define BOOST_PP_ITERATION_1 174\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 175 && BOOST_PP_ITERATION_FINISH_1 >= 175\n#        define BOOST_PP_ITERATION_1 175\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 176 && BOOST_PP_ITERATION_FINISH_1 >= 176\n#        define BOOST_PP_ITERATION_1 176\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 177 && BOOST_PP_ITERATION_FINISH_1 >= 177\n#        define BOOST_PP_ITERATION_1 177\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 178 && BOOST_PP_ITERATION_FINISH_1 >= 178\n#        define BOOST_PP_ITERATION_1 178\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 179 && BOOST_PP_ITERATION_FINISH_1 >= 179\n#        define BOOST_PP_ITERATION_1 179\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 180 && BOOST_PP_ITERATION_FINISH_1 >= 180\n#        define BOOST_PP_ITERATION_1 180\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 181 && BOOST_PP_ITERATION_FINISH_1 >= 181\n#        define BOOST_PP_ITERATION_1 181\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 182 && BOOST_PP_ITERATION_FINISH_1 >= 182\n#        define BOOST_PP_ITERATION_1 182\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 183 && BOOST_PP_ITERATION_FINISH_1 >= 183\n#        define BOOST_PP_ITERATION_1 183\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 184 && BOOST_PP_ITERATION_FINISH_1 >= 184\n#        define BOOST_PP_ITERATION_1 184\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 185 && BOOST_PP_ITERATION_FINISH_1 >= 185\n#        define BOOST_PP_ITERATION_1 185\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 186 && BOOST_PP_ITERATION_FINISH_1 >= 186\n#        define BOOST_PP_ITERATION_1 186\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 187 && BOOST_PP_ITERATION_FINISH_1 >= 187\n#        define BOOST_PP_ITERATION_1 187\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 188 && BOOST_PP_ITERATION_FINISH_1 >= 188\n#        define BOOST_PP_ITERATION_1 188\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 189 && BOOST_PP_ITERATION_FINISH_1 >= 189\n#        define BOOST_PP_ITERATION_1 189\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 190 && BOOST_PP_ITERATION_FINISH_1 >= 190\n#        define BOOST_PP_ITERATION_1 190\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 191 && BOOST_PP_ITERATION_FINISH_1 >= 191\n#        define BOOST_PP_ITERATION_1 191\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 192 && BOOST_PP_ITERATION_FINISH_1 >= 192\n#        define BOOST_PP_ITERATION_1 192\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 193 && BOOST_PP_ITERATION_FINISH_1 >= 193\n#        define BOOST_PP_ITERATION_1 193\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 194 && BOOST_PP_ITERATION_FINISH_1 >= 194\n#        define BOOST_PP_ITERATION_1 194\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 195 && BOOST_PP_ITERATION_FINISH_1 >= 195\n#        define BOOST_PP_ITERATION_1 195\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 196 && BOOST_PP_ITERATION_FINISH_1 >= 196\n#        define BOOST_PP_ITERATION_1 196\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 197 && BOOST_PP_ITERATION_FINISH_1 >= 197\n#        define BOOST_PP_ITERATION_1 197\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 198 && BOOST_PP_ITERATION_FINISH_1 >= 198\n#        define BOOST_PP_ITERATION_1 198\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 199 && BOOST_PP_ITERATION_FINISH_1 >= 199\n#        define BOOST_PP_ITERATION_1 199\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 200 && BOOST_PP_ITERATION_FINISH_1 >= 200\n#        define BOOST_PP_ITERATION_1 200\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 201 && BOOST_PP_ITERATION_FINISH_1 >= 201\n#        define BOOST_PP_ITERATION_1 201\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 202 && BOOST_PP_ITERATION_FINISH_1 >= 202\n#        define BOOST_PP_ITERATION_1 202\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 203 && BOOST_PP_ITERATION_FINISH_1 >= 203\n#        define BOOST_PP_ITERATION_1 203\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 204 && BOOST_PP_ITERATION_FINISH_1 >= 204\n#        define BOOST_PP_ITERATION_1 204\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 205 && BOOST_PP_ITERATION_FINISH_1 >= 205\n#        define BOOST_PP_ITERATION_1 205\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 206 && BOOST_PP_ITERATION_FINISH_1 >= 206\n#        define BOOST_PP_ITERATION_1 206\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 207 && BOOST_PP_ITERATION_FINISH_1 >= 207\n#        define BOOST_PP_ITERATION_1 207\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 208 && BOOST_PP_ITERATION_FINISH_1 >= 208\n#        define BOOST_PP_ITERATION_1 208\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 209 && BOOST_PP_ITERATION_FINISH_1 >= 209\n#        define BOOST_PP_ITERATION_1 209\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 210 && BOOST_PP_ITERATION_FINISH_1 >= 210\n#        define BOOST_PP_ITERATION_1 210\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 211 && BOOST_PP_ITERATION_FINISH_1 >= 211\n#        define BOOST_PP_ITERATION_1 211\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 212 && BOOST_PP_ITERATION_FINISH_1 >= 212\n#        define BOOST_PP_ITERATION_1 212\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 213 && BOOST_PP_ITERATION_FINISH_1 >= 213\n#        define BOOST_PP_ITERATION_1 213\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 214 && BOOST_PP_ITERATION_FINISH_1 >= 214\n#        define BOOST_PP_ITERATION_1 214\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 215 && BOOST_PP_ITERATION_FINISH_1 >= 215\n#        define BOOST_PP_ITERATION_1 215\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 216 && BOOST_PP_ITERATION_FINISH_1 >= 216\n#        define BOOST_PP_ITERATION_1 216\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 217 && BOOST_PP_ITERATION_FINISH_1 >= 217\n#        define BOOST_PP_ITERATION_1 217\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 218 && BOOST_PP_ITERATION_FINISH_1 >= 218\n#        define BOOST_PP_ITERATION_1 218\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 219 && BOOST_PP_ITERATION_FINISH_1 >= 219\n#        define BOOST_PP_ITERATION_1 219\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 220 && BOOST_PP_ITERATION_FINISH_1 >= 220\n#        define BOOST_PP_ITERATION_1 220\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 221 && BOOST_PP_ITERATION_FINISH_1 >= 221\n#        define BOOST_PP_ITERATION_1 221\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 222 && BOOST_PP_ITERATION_FINISH_1 >= 222\n#        define BOOST_PP_ITERATION_1 222\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 223 && BOOST_PP_ITERATION_FINISH_1 >= 223\n#        define BOOST_PP_ITERATION_1 223\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 224 && BOOST_PP_ITERATION_FINISH_1 >= 224\n#        define BOOST_PP_ITERATION_1 224\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 225 && BOOST_PP_ITERATION_FINISH_1 >= 225\n#        define BOOST_PP_ITERATION_1 225\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 226 && BOOST_PP_ITERATION_FINISH_1 >= 226\n#        define BOOST_PP_ITERATION_1 226\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 227 && BOOST_PP_ITERATION_FINISH_1 >= 227\n#        define BOOST_PP_ITERATION_1 227\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 228 && BOOST_PP_ITERATION_FINISH_1 >= 228\n#        define BOOST_PP_ITERATION_1 228\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 229 && BOOST_PP_ITERATION_FINISH_1 >= 229\n#        define BOOST_PP_ITERATION_1 229\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 230 && BOOST_PP_ITERATION_FINISH_1 >= 230\n#        define BOOST_PP_ITERATION_1 230\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 231 && BOOST_PP_ITERATION_FINISH_1 >= 231\n#        define BOOST_PP_ITERATION_1 231\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 232 && BOOST_PP_ITERATION_FINISH_1 >= 232\n#        define BOOST_PP_ITERATION_1 232\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 233 && BOOST_PP_ITERATION_FINISH_1 >= 233\n#        define BOOST_PP_ITERATION_1 233\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 234 && BOOST_PP_ITERATION_FINISH_1 >= 234\n#        define BOOST_PP_ITERATION_1 234\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 235 && BOOST_PP_ITERATION_FINISH_1 >= 235\n#        define BOOST_PP_ITERATION_1 235\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 236 && BOOST_PP_ITERATION_FINISH_1 >= 236\n#        define BOOST_PP_ITERATION_1 236\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 237 && BOOST_PP_ITERATION_FINISH_1 >= 237\n#        define BOOST_PP_ITERATION_1 237\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 238 && BOOST_PP_ITERATION_FINISH_1 >= 238\n#        define BOOST_PP_ITERATION_1 238\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 239 && BOOST_PP_ITERATION_FINISH_1 >= 239\n#        define BOOST_PP_ITERATION_1 239\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 240 && BOOST_PP_ITERATION_FINISH_1 >= 240\n#        define BOOST_PP_ITERATION_1 240\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 241 && BOOST_PP_ITERATION_FINISH_1 >= 241\n#        define BOOST_PP_ITERATION_1 241\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 242 && BOOST_PP_ITERATION_FINISH_1 >= 242\n#        define BOOST_PP_ITERATION_1 242\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 243 && BOOST_PP_ITERATION_FINISH_1 >= 243\n#        define BOOST_PP_ITERATION_1 243\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 244 && BOOST_PP_ITERATION_FINISH_1 >= 244\n#        define BOOST_PP_ITERATION_1 244\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 245 && BOOST_PP_ITERATION_FINISH_1 >= 245\n#        define BOOST_PP_ITERATION_1 245\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 246 && BOOST_PP_ITERATION_FINISH_1 >= 246\n#        define BOOST_PP_ITERATION_1 246\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 247 && BOOST_PP_ITERATION_FINISH_1 >= 247\n#        define BOOST_PP_ITERATION_1 247\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 248 && BOOST_PP_ITERATION_FINISH_1 >= 248\n#        define BOOST_PP_ITERATION_1 248\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 249 && BOOST_PP_ITERATION_FINISH_1 >= 249\n#        define BOOST_PP_ITERATION_1 249\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 250 && BOOST_PP_ITERATION_FINISH_1 >= 250\n#        define BOOST_PP_ITERATION_1 250\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 251 && BOOST_PP_ITERATION_FINISH_1 >= 251\n#        define BOOST_PP_ITERATION_1 251\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 252 && BOOST_PP_ITERATION_FINISH_1 >= 252\n#        define BOOST_PP_ITERATION_1 252\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 253 && BOOST_PP_ITERATION_FINISH_1 >= 253\n#        define BOOST_PP_ITERATION_1 253\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 254 && BOOST_PP_ITERATION_FINISH_1 >= 254\n#        define BOOST_PP_ITERATION_1 254\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 255 && BOOST_PP_ITERATION_FINISH_1 >= 255\n#        define BOOST_PP_ITERATION_1 255\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 256 && BOOST_PP_ITERATION_FINISH_1 >= 256\n#        define BOOST_PP_ITERATION_1 256\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n# endif\n#\n# undef BOOST_PP_IS_ITERATING\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 0\n#\n# undef BOOST_PP_ITERATION_START_1\n# undef BOOST_PP_ITERATION_FINISH_1\n# undef BOOST_PP_FILENAME_1\n#\n# undef BOOST_PP_ITERATION_FLAGS_1\n# undef BOOST_PP_ITERATION_PARAMS_1\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/forward2.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if defined(BOOST_PP_ITERATION_LIMITS)\n#    if !defined(BOOST_PP_FILENAME_2)\n#        error BOOST_PP_ERROR:  depth #2 filename is not defined\n#    endif\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/lower2.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/upper2.hpp>\n#    define BOOST_PP_ITERATION_FLAGS_2() 0\n#    undef BOOST_PP_ITERATION_LIMITS\n# elif defined(BOOST_PP_ITERATION_PARAMS_2)\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_2)\n#    include <boost/preprocessor/iteration/detail/bounds/lower2.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_2)\n#    include <boost/preprocessor/iteration/detail/bounds/upper2.hpp>\n#    define BOOST_PP_FILENAME_2 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_2)\n#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_2) >= 4\n#        define BOOST_PP_ITERATION_FLAGS_2() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_2)\n#    else\n#        define BOOST_PP_ITERATION_FLAGS_2() 0\n#    endif\n# else\n#    error BOOST_PP_ERROR:  depth #2 iteration boundaries or filename not defined\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 2\n#\n# if (BOOST_PP_ITERATION_START_2) > (BOOST_PP_ITERATION_FINISH_2)\n#    include <boost/preprocessor/iteration/detail/iter/reverse2.hpp>\n# else\n#    if BOOST_PP_ITERATION_START_2 <= 0 && BOOST_PP_ITERATION_FINISH_2 >= 0\n#        define BOOST_PP_ITERATION_2 0\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 1 && BOOST_PP_ITERATION_FINISH_2 >= 1\n#        define BOOST_PP_ITERATION_2 1\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 2 && BOOST_PP_ITERATION_FINISH_2 >= 2\n#        define BOOST_PP_ITERATION_2 2\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 3 && BOOST_PP_ITERATION_FINISH_2 >= 3\n#        define BOOST_PP_ITERATION_2 3\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 4 && BOOST_PP_ITERATION_FINISH_2 >= 4\n#        define BOOST_PP_ITERATION_2 4\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 5 && BOOST_PP_ITERATION_FINISH_2 >= 5\n#        define BOOST_PP_ITERATION_2 5\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 6 && BOOST_PP_ITERATION_FINISH_2 >= 6\n#        define BOOST_PP_ITERATION_2 6\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 7 && BOOST_PP_ITERATION_FINISH_2 >= 7\n#        define BOOST_PP_ITERATION_2 7\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 8 && BOOST_PP_ITERATION_FINISH_2 >= 8\n#        define BOOST_PP_ITERATION_2 8\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 9 && BOOST_PP_ITERATION_FINISH_2 >= 9\n#        define BOOST_PP_ITERATION_2 9\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 10 && BOOST_PP_ITERATION_FINISH_2 >= 10\n#        define BOOST_PP_ITERATION_2 10\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 11 && BOOST_PP_ITERATION_FINISH_2 >= 11\n#        define BOOST_PP_ITERATION_2 11\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 12 && BOOST_PP_ITERATION_FINISH_2 >= 12\n#        define BOOST_PP_ITERATION_2 12\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 13 && BOOST_PP_ITERATION_FINISH_2 >= 13\n#        define BOOST_PP_ITERATION_2 13\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 14 && BOOST_PP_ITERATION_FINISH_2 >= 14\n#        define BOOST_PP_ITERATION_2 14\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 15 && BOOST_PP_ITERATION_FINISH_2 >= 15\n#        define BOOST_PP_ITERATION_2 15\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 16 && BOOST_PP_ITERATION_FINISH_2 >= 16\n#        define BOOST_PP_ITERATION_2 16\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 17 && BOOST_PP_ITERATION_FINISH_2 >= 17\n#        define BOOST_PP_ITERATION_2 17\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 18 && BOOST_PP_ITERATION_FINISH_2 >= 18\n#        define BOOST_PP_ITERATION_2 18\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 19 && BOOST_PP_ITERATION_FINISH_2 >= 19\n#        define BOOST_PP_ITERATION_2 19\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 20 && BOOST_PP_ITERATION_FINISH_2 >= 20\n#        define BOOST_PP_ITERATION_2 20\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 21 && BOOST_PP_ITERATION_FINISH_2 >= 21\n#        define BOOST_PP_ITERATION_2 21\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 22 && BOOST_PP_ITERATION_FINISH_2 >= 22\n#        define BOOST_PP_ITERATION_2 22\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 23 && BOOST_PP_ITERATION_FINISH_2 >= 23\n#        define BOOST_PP_ITERATION_2 23\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 24 && BOOST_PP_ITERATION_FINISH_2 >= 24\n#        define BOOST_PP_ITERATION_2 24\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 25 && BOOST_PP_ITERATION_FINISH_2 >= 25\n#        define BOOST_PP_ITERATION_2 25\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 26 && BOOST_PP_ITERATION_FINISH_2 >= 26\n#        define BOOST_PP_ITERATION_2 26\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 27 && BOOST_PP_ITERATION_FINISH_2 >= 27\n#        define BOOST_PP_ITERATION_2 27\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 28 && BOOST_PP_ITERATION_FINISH_2 >= 28\n#        define BOOST_PP_ITERATION_2 28\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 29 && BOOST_PP_ITERATION_FINISH_2 >= 29\n#        define BOOST_PP_ITERATION_2 29\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 30 && BOOST_PP_ITERATION_FINISH_2 >= 30\n#        define BOOST_PP_ITERATION_2 30\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 31 && BOOST_PP_ITERATION_FINISH_2 >= 31\n#        define BOOST_PP_ITERATION_2 31\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 32 && BOOST_PP_ITERATION_FINISH_2 >= 32\n#        define BOOST_PP_ITERATION_2 32\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 33 && BOOST_PP_ITERATION_FINISH_2 >= 33\n#        define BOOST_PP_ITERATION_2 33\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 34 && BOOST_PP_ITERATION_FINISH_2 >= 34\n#        define BOOST_PP_ITERATION_2 34\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 35 && BOOST_PP_ITERATION_FINISH_2 >= 35\n#        define BOOST_PP_ITERATION_2 35\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 36 && BOOST_PP_ITERATION_FINISH_2 >= 36\n#        define BOOST_PP_ITERATION_2 36\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 37 && BOOST_PP_ITERATION_FINISH_2 >= 37\n#        define BOOST_PP_ITERATION_2 37\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 38 && BOOST_PP_ITERATION_FINISH_2 >= 38\n#        define BOOST_PP_ITERATION_2 38\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 39 && BOOST_PP_ITERATION_FINISH_2 >= 39\n#        define BOOST_PP_ITERATION_2 39\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 40 && BOOST_PP_ITERATION_FINISH_2 >= 40\n#        define BOOST_PP_ITERATION_2 40\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 41 && BOOST_PP_ITERATION_FINISH_2 >= 41\n#        define BOOST_PP_ITERATION_2 41\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 42 && BOOST_PP_ITERATION_FINISH_2 >= 42\n#        define BOOST_PP_ITERATION_2 42\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 43 && BOOST_PP_ITERATION_FINISH_2 >= 43\n#        define BOOST_PP_ITERATION_2 43\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 44 && BOOST_PP_ITERATION_FINISH_2 >= 44\n#        define BOOST_PP_ITERATION_2 44\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 45 && BOOST_PP_ITERATION_FINISH_2 >= 45\n#        define BOOST_PP_ITERATION_2 45\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 46 && BOOST_PP_ITERATION_FINISH_2 >= 46\n#        define BOOST_PP_ITERATION_2 46\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 47 && BOOST_PP_ITERATION_FINISH_2 >= 47\n#        define BOOST_PP_ITERATION_2 47\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 48 && BOOST_PP_ITERATION_FINISH_2 >= 48\n#        define BOOST_PP_ITERATION_2 48\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 49 && BOOST_PP_ITERATION_FINISH_2 >= 49\n#        define BOOST_PP_ITERATION_2 49\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 50 && BOOST_PP_ITERATION_FINISH_2 >= 50\n#        define BOOST_PP_ITERATION_2 50\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 51 && BOOST_PP_ITERATION_FINISH_2 >= 51\n#        define BOOST_PP_ITERATION_2 51\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 52 && BOOST_PP_ITERATION_FINISH_2 >= 52\n#        define BOOST_PP_ITERATION_2 52\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 53 && BOOST_PP_ITERATION_FINISH_2 >= 53\n#        define BOOST_PP_ITERATION_2 53\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 54 && BOOST_PP_ITERATION_FINISH_2 >= 54\n#        define BOOST_PP_ITERATION_2 54\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 55 && BOOST_PP_ITERATION_FINISH_2 >= 55\n#        define BOOST_PP_ITERATION_2 55\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 56 && BOOST_PP_ITERATION_FINISH_2 >= 56\n#        define BOOST_PP_ITERATION_2 56\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 57 && BOOST_PP_ITERATION_FINISH_2 >= 57\n#        define BOOST_PP_ITERATION_2 57\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 58 && BOOST_PP_ITERATION_FINISH_2 >= 58\n#        define BOOST_PP_ITERATION_2 58\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 59 && BOOST_PP_ITERATION_FINISH_2 >= 59\n#        define BOOST_PP_ITERATION_2 59\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 60 && BOOST_PP_ITERATION_FINISH_2 >= 60\n#        define BOOST_PP_ITERATION_2 60\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 61 && BOOST_PP_ITERATION_FINISH_2 >= 61\n#        define BOOST_PP_ITERATION_2 61\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 62 && BOOST_PP_ITERATION_FINISH_2 >= 62\n#        define BOOST_PP_ITERATION_2 62\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 63 && BOOST_PP_ITERATION_FINISH_2 >= 63\n#        define BOOST_PP_ITERATION_2 63\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 64 && BOOST_PP_ITERATION_FINISH_2 >= 64\n#        define BOOST_PP_ITERATION_2 64\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 65 && BOOST_PP_ITERATION_FINISH_2 >= 65\n#        define BOOST_PP_ITERATION_2 65\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 66 && BOOST_PP_ITERATION_FINISH_2 >= 66\n#        define BOOST_PP_ITERATION_2 66\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 67 && BOOST_PP_ITERATION_FINISH_2 >= 67\n#        define BOOST_PP_ITERATION_2 67\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 68 && BOOST_PP_ITERATION_FINISH_2 >= 68\n#        define BOOST_PP_ITERATION_2 68\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 69 && BOOST_PP_ITERATION_FINISH_2 >= 69\n#        define BOOST_PP_ITERATION_2 69\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 70 && BOOST_PP_ITERATION_FINISH_2 >= 70\n#        define BOOST_PP_ITERATION_2 70\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 71 && BOOST_PP_ITERATION_FINISH_2 >= 71\n#        define BOOST_PP_ITERATION_2 71\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 72 && BOOST_PP_ITERATION_FINISH_2 >= 72\n#        define BOOST_PP_ITERATION_2 72\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 73 && BOOST_PP_ITERATION_FINISH_2 >= 73\n#        define BOOST_PP_ITERATION_2 73\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 74 && BOOST_PP_ITERATION_FINISH_2 >= 74\n#        define BOOST_PP_ITERATION_2 74\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 75 && BOOST_PP_ITERATION_FINISH_2 >= 75\n#        define BOOST_PP_ITERATION_2 75\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 76 && BOOST_PP_ITERATION_FINISH_2 >= 76\n#        define BOOST_PP_ITERATION_2 76\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 77 && BOOST_PP_ITERATION_FINISH_2 >= 77\n#        define BOOST_PP_ITERATION_2 77\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 78 && BOOST_PP_ITERATION_FINISH_2 >= 78\n#        define BOOST_PP_ITERATION_2 78\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 79 && BOOST_PP_ITERATION_FINISH_2 >= 79\n#        define BOOST_PP_ITERATION_2 79\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 80 && BOOST_PP_ITERATION_FINISH_2 >= 80\n#        define BOOST_PP_ITERATION_2 80\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 81 && BOOST_PP_ITERATION_FINISH_2 >= 81\n#        define BOOST_PP_ITERATION_2 81\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 82 && BOOST_PP_ITERATION_FINISH_2 >= 82\n#        define BOOST_PP_ITERATION_2 82\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 83 && BOOST_PP_ITERATION_FINISH_2 >= 83\n#        define BOOST_PP_ITERATION_2 83\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 84 && BOOST_PP_ITERATION_FINISH_2 >= 84\n#        define BOOST_PP_ITERATION_2 84\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 85 && BOOST_PP_ITERATION_FINISH_2 >= 85\n#        define BOOST_PP_ITERATION_2 85\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 86 && BOOST_PP_ITERATION_FINISH_2 >= 86\n#        define BOOST_PP_ITERATION_2 86\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 87 && BOOST_PP_ITERATION_FINISH_2 >= 87\n#        define BOOST_PP_ITERATION_2 87\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 88 && BOOST_PP_ITERATION_FINISH_2 >= 88\n#        define BOOST_PP_ITERATION_2 88\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 89 && BOOST_PP_ITERATION_FINISH_2 >= 89\n#        define BOOST_PP_ITERATION_2 89\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 90 && BOOST_PP_ITERATION_FINISH_2 >= 90\n#        define BOOST_PP_ITERATION_2 90\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 91 && BOOST_PP_ITERATION_FINISH_2 >= 91\n#        define BOOST_PP_ITERATION_2 91\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 92 && BOOST_PP_ITERATION_FINISH_2 >= 92\n#        define BOOST_PP_ITERATION_2 92\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 93 && BOOST_PP_ITERATION_FINISH_2 >= 93\n#        define BOOST_PP_ITERATION_2 93\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 94 && BOOST_PP_ITERATION_FINISH_2 >= 94\n#        define BOOST_PP_ITERATION_2 94\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 95 && BOOST_PP_ITERATION_FINISH_2 >= 95\n#        define BOOST_PP_ITERATION_2 95\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 96 && BOOST_PP_ITERATION_FINISH_2 >= 96\n#        define BOOST_PP_ITERATION_2 96\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 97 && BOOST_PP_ITERATION_FINISH_2 >= 97\n#        define BOOST_PP_ITERATION_2 97\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 98 && BOOST_PP_ITERATION_FINISH_2 >= 98\n#        define BOOST_PP_ITERATION_2 98\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 99 && BOOST_PP_ITERATION_FINISH_2 >= 99\n#        define BOOST_PP_ITERATION_2 99\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 100 && BOOST_PP_ITERATION_FINISH_2 >= 100\n#        define BOOST_PP_ITERATION_2 100\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 101 && BOOST_PP_ITERATION_FINISH_2 >= 101\n#        define BOOST_PP_ITERATION_2 101\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 102 && BOOST_PP_ITERATION_FINISH_2 >= 102\n#        define BOOST_PP_ITERATION_2 102\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 103 && BOOST_PP_ITERATION_FINISH_2 >= 103\n#        define BOOST_PP_ITERATION_2 103\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 104 && BOOST_PP_ITERATION_FINISH_2 >= 104\n#        define BOOST_PP_ITERATION_2 104\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 105 && BOOST_PP_ITERATION_FINISH_2 >= 105\n#        define BOOST_PP_ITERATION_2 105\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 106 && BOOST_PP_ITERATION_FINISH_2 >= 106\n#        define BOOST_PP_ITERATION_2 106\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 107 && BOOST_PP_ITERATION_FINISH_2 >= 107\n#        define BOOST_PP_ITERATION_2 107\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 108 && BOOST_PP_ITERATION_FINISH_2 >= 108\n#        define BOOST_PP_ITERATION_2 108\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 109 && BOOST_PP_ITERATION_FINISH_2 >= 109\n#        define BOOST_PP_ITERATION_2 109\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 110 && BOOST_PP_ITERATION_FINISH_2 >= 110\n#        define BOOST_PP_ITERATION_2 110\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 111 && BOOST_PP_ITERATION_FINISH_2 >= 111\n#        define BOOST_PP_ITERATION_2 111\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 112 && BOOST_PP_ITERATION_FINISH_2 >= 112\n#        define BOOST_PP_ITERATION_2 112\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 113 && BOOST_PP_ITERATION_FINISH_2 >= 113\n#        define BOOST_PP_ITERATION_2 113\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 114 && BOOST_PP_ITERATION_FINISH_2 >= 114\n#        define BOOST_PP_ITERATION_2 114\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 115 && BOOST_PP_ITERATION_FINISH_2 >= 115\n#        define BOOST_PP_ITERATION_2 115\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 116 && BOOST_PP_ITERATION_FINISH_2 >= 116\n#        define BOOST_PP_ITERATION_2 116\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 117 && BOOST_PP_ITERATION_FINISH_2 >= 117\n#        define BOOST_PP_ITERATION_2 117\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 118 && BOOST_PP_ITERATION_FINISH_2 >= 118\n#        define BOOST_PP_ITERATION_2 118\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 119 && BOOST_PP_ITERATION_FINISH_2 >= 119\n#        define BOOST_PP_ITERATION_2 119\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 120 && BOOST_PP_ITERATION_FINISH_2 >= 120\n#        define BOOST_PP_ITERATION_2 120\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 121 && BOOST_PP_ITERATION_FINISH_2 >= 121\n#        define BOOST_PP_ITERATION_2 121\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 122 && BOOST_PP_ITERATION_FINISH_2 >= 122\n#        define BOOST_PP_ITERATION_2 122\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 123 && BOOST_PP_ITERATION_FINISH_2 >= 123\n#        define BOOST_PP_ITERATION_2 123\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 124 && BOOST_PP_ITERATION_FINISH_2 >= 124\n#        define BOOST_PP_ITERATION_2 124\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 125 && BOOST_PP_ITERATION_FINISH_2 >= 125\n#        define BOOST_PP_ITERATION_2 125\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 126 && BOOST_PP_ITERATION_FINISH_2 >= 126\n#        define BOOST_PP_ITERATION_2 126\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 127 && BOOST_PP_ITERATION_FINISH_2 >= 127\n#        define BOOST_PP_ITERATION_2 127\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 128 && BOOST_PP_ITERATION_FINISH_2 >= 128\n#        define BOOST_PP_ITERATION_2 128\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 129 && BOOST_PP_ITERATION_FINISH_2 >= 129\n#        define BOOST_PP_ITERATION_2 129\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 130 && BOOST_PP_ITERATION_FINISH_2 >= 130\n#        define BOOST_PP_ITERATION_2 130\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 131 && BOOST_PP_ITERATION_FINISH_2 >= 131\n#        define BOOST_PP_ITERATION_2 131\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 132 && BOOST_PP_ITERATION_FINISH_2 >= 132\n#        define BOOST_PP_ITERATION_2 132\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 133 && BOOST_PP_ITERATION_FINISH_2 >= 133\n#        define BOOST_PP_ITERATION_2 133\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 134 && BOOST_PP_ITERATION_FINISH_2 >= 134\n#        define BOOST_PP_ITERATION_2 134\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 135 && BOOST_PP_ITERATION_FINISH_2 >= 135\n#        define BOOST_PP_ITERATION_2 135\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 136 && BOOST_PP_ITERATION_FINISH_2 >= 136\n#        define BOOST_PP_ITERATION_2 136\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 137 && BOOST_PP_ITERATION_FINISH_2 >= 137\n#        define BOOST_PP_ITERATION_2 137\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 138 && BOOST_PP_ITERATION_FINISH_2 >= 138\n#        define BOOST_PP_ITERATION_2 138\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 139 && BOOST_PP_ITERATION_FINISH_2 >= 139\n#        define BOOST_PP_ITERATION_2 139\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 140 && BOOST_PP_ITERATION_FINISH_2 >= 140\n#        define BOOST_PP_ITERATION_2 140\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 141 && BOOST_PP_ITERATION_FINISH_2 >= 141\n#        define BOOST_PP_ITERATION_2 141\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 142 && BOOST_PP_ITERATION_FINISH_2 >= 142\n#        define BOOST_PP_ITERATION_2 142\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 143 && BOOST_PP_ITERATION_FINISH_2 >= 143\n#        define BOOST_PP_ITERATION_2 143\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 144 && BOOST_PP_ITERATION_FINISH_2 >= 144\n#        define BOOST_PP_ITERATION_2 144\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 145 && BOOST_PP_ITERATION_FINISH_2 >= 145\n#        define BOOST_PP_ITERATION_2 145\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 146 && BOOST_PP_ITERATION_FINISH_2 >= 146\n#        define BOOST_PP_ITERATION_2 146\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 147 && BOOST_PP_ITERATION_FINISH_2 >= 147\n#        define BOOST_PP_ITERATION_2 147\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 148 && BOOST_PP_ITERATION_FINISH_2 >= 148\n#        define BOOST_PP_ITERATION_2 148\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 149 && BOOST_PP_ITERATION_FINISH_2 >= 149\n#        define BOOST_PP_ITERATION_2 149\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 150 && BOOST_PP_ITERATION_FINISH_2 >= 150\n#        define BOOST_PP_ITERATION_2 150\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 151 && BOOST_PP_ITERATION_FINISH_2 >= 151\n#        define BOOST_PP_ITERATION_2 151\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 152 && BOOST_PP_ITERATION_FINISH_2 >= 152\n#        define BOOST_PP_ITERATION_2 152\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 153 && BOOST_PP_ITERATION_FINISH_2 >= 153\n#        define BOOST_PP_ITERATION_2 153\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 154 && BOOST_PP_ITERATION_FINISH_2 >= 154\n#        define BOOST_PP_ITERATION_2 154\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 155 && BOOST_PP_ITERATION_FINISH_2 >= 155\n#        define BOOST_PP_ITERATION_2 155\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 156 && BOOST_PP_ITERATION_FINISH_2 >= 156\n#        define BOOST_PP_ITERATION_2 156\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 157 && BOOST_PP_ITERATION_FINISH_2 >= 157\n#        define BOOST_PP_ITERATION_2 157\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 158 && BOOST_PP_ITERATION_FINISH_2 >= 158\n#        define BOOST_PP_ITERATION_2 158\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 159 && BOOST_PP_ITERATION_FINISH_2 >= 159\n#        define BOOST_PP_ITERATION_2 159\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 160 && BOOST_PP_ITERATION_FINISH_2 >= 160\n#        define BOOST_PP_ITERATION_2 160\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 161 && BOOST_PP_ITERATION_FINISH_2 >= 161\n#        define BOOST_PP_ITERATION_2 161\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 162 && BOOST_PP_ITERATION_FINISH_2 >= 162\n#        define BOOST_PP_ITERATION_2 162\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 163 && BOOST_PP_ITERATION_FINISH_2 >= 163\n#        define BOOST_PP_ITERATION_2 163\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 164 && BOOST_PP_ITERATION_FINISH_2 >= 164\n#        define BOOST_PP_ITERATION_2 164\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 165 && BOOST_PP_ITERATION_FINISH_2 >= 165\n#        define BOOST_PP_ITERATION_2 165\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 166 && BOOST_PP_ITERATION_FINISH_2 >= 166\n#        define BOOST_PP_ITERATION_2 166\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 167 && BOOST_PP_ITERATION_FINISH_2 >= 167\n#        define BOOST_PP_ITERATION_2 167\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 168 && BOOST_PP_ITERATION_FINISH_2 >= 168\n#        define BOOST_PP_ITERATION_2 168\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 169 && BOOST_PP_ITERATION_FINISH_2 >= 169\n#        define BOOST_PP_ITERATION_2 169\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 170 && BOOST_PP_ITERATION_FINISH_2 >= 170\n#        define BOOST_PP_ITERATION_2 170\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 171 && BOOST_PP_ITERATION_FINISH_2 >= 171\n#        define BOOST_PP_ITERATION_2 171\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 172 && BOOST_PP_ITERATION_FINISH_2 >= 172\n#        define BOOST_PP_ITERATION_2 172\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 173 && BOOST_PP_ITERATION_FINISH_2 >= 173\n#        define BOOST_PP_ITERATION_2 173\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 174 && BOOST_PP_ITERATION_FINISH_2 >= 174\n#        define BOOST_PP_ITERATION_2 174\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 175 && BOOST_PP_ITERATION_FINISH_2 >= 175\n#        define BOOST_PP_ITERATION_2 175\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 176 && BOOST_PP_ITERATION_FINISH_2 >= 176\n#        define BOOST_PP_ITERATION_2 176\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 177 && BOOST_PP_ITERATION_FINISH_2 >= 177\n#        define BOOST_PP_ITERATION_2 177\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 178 && BOOST_PP_ITERATION_FINISH_2 >= 178\n#        define BOOST_PP_ITERATION_2 178\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 179 && BOOST_PP_ITERATION_FINISH_2 >= 179\n#        define BOOST_PP_ITERATION_2 179\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 180 && BOOST_PP_ITERATION_FINISH_2 >= 180\n#        define BOOST_PP_ITERATION_2 180\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 181 && BOOST_PP_ITERATION_FINISH_2 >= 181\n#        define BOOST_PP_ITERATION_2 181\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 182 && BOOST_PP_ITERATION_FINISH_2 >= 182\n#        define BOOST_PP_ITERATION_2 182\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 183 && BOOST_PP_ITERATION_FINISH_2 >= 183\n#        define BOOST_PP_ITERATION_2 183\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 184 && BOOST_PP_ITERATION_FINISH_2 >= 184\n#        define BOOST_PP_ITERATION_2 184\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 185 && BOOST_PP_ITERATION_FINISH_2 >= 185\n#        define BOOST_PP_ITERATION_2 185\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 186 && BOOST_PP_ITERATION_FINISH_2 >= 186\n#        define BOOST_PP_ITERATION_2 186\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 187 && BOOST_PP_ITERATION_FINISH_2 >= 187\n#        define BOOST_PP_ITERATION_2 187\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 188 && BOOST_PP_ITERATION_FINISH_2 >= 188\n#        define BOOST_PP_ITERATION_2 188\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 189 && BOOST_PP_ITERATION_FINISH_2 >= 189\n#        define BOOST_PP_ITERATION_2 189\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 190 && BOOST_PP_ITERATION_FINISH_2 >= 190\n#        define BOOST_PP_ITERATION_2 190\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 191 && BOOST_PP_ITERATION_FINISH_2 >= 191\n#        define BOOST_PP_ITERATION_2 191\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 192 && BOOST_PP_ITERATION_FINISH_2 >= 192\n#        define BOOST_PP_ITERATION_2 192\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 193 && BOOST_PP_ITERATION_FINISH_2 >= 193\n#        define BOOST_PP_ITERATION_2 193\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 194 && BOOST_PP_ITERATION_FINISH_2 >= 194\n#        define BOOST_PP_ITERATION_2 194\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 195 && BOOST_PP_ITERATION_FINISH_2 >= 195\n#        define BOOST_PP_ITERATION_2 195\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 196 && BOOST_PP_ITERATION_FINISH_2 >= 196\n#        define BOOST_PP_ITERATION_2 196\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 197 && BOOST_PP_ITERATION_FINISH_2 >= 197\n#        define BOOST_PP_ITERATION_2 197\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 198 && BOOST_PP_ITERATION_FINISH_2 >= 198\n#        define BOOST_PP_ITERATION_2 198\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 199 && BOOST_PP_ITERATION_FINISH_2 >= 199\n#        define BOOST_PP_ITERATION_2 199\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 200 && BOOST_PP_ITERATION_FINISH_2 >= 200\n#        define BOOST_PP_ITERATION_2 200\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 201 && BOOST_PP_ITERATION_FINISH_2 >= 201\n#        define BOOST_PP_ITERATION_2 201\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 202 && BOOST_PP_ITERATION_FINISH_2 >= 202\n#        define BOOST_PP_ITERATION_2 202\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 203 && BOOST_PP_ITERATION_FINISH_2 >= 203\n#        define BOOST_PP_ITERATION_2 203\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 204 && BOOST_PP_ITERATION_FINISH_2 >= 204\n#        define BOOST_PP_ITERATION_2 204\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 205 && BOOST_PP_ITERATION_FINISH_2 >= 205\n#        define BOOST_PP_ITERATION_2 205\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 206 && BOOST_PP_ITERATION_FINISH_2 >= 206\n#        define BOOST_PP_ITERATION_2 206\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 207 && BOOST_PP_ITERATION_FINISH_2 >= 207\n#        define BOOST_PP_ITERATION_2 207\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 208 && BOOST_PP_ITERATION_FINISH_2 >= 208\n#        define BOOST_PP_ITERATION_2 208\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 209 && BOOST_PP_ITERATION_FINISH_2 >= 209\n#        define BOOST_PP_ITERATION_2 209\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 210 && BOOST_PP_ITERATION_FINISH_2 >= 210\n#        define BOOST_PP_ITERATION_2 210\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 211 && BOOST_PP_ITERATION_FINISH_2 >= 211\n#        define BOOST_PP_ITERATION_2 211\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 212 && BOOST_PP_ITERATION_FINISH_2 >= 212\n#        define BOOST_PP_ITERATION_2 212\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 213 && BOOST_PP_ITERATION_FINISH_2 >= 213\n#        define BOOST_PP_ITERATION_2 213\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 214 && BOOST_PP_ITERATION_FINISH_2 >= 214\n#        define BOOST_PP_ITERATION_2 214\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 215 && BOOST_PP_ITERATION_FINISH_2 >= 215\n#        define BOOST_PP_ITERATION_2 215\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 216 && BOOST_PP_ITERATION_FINISH_2 >= 216\n#        define BOOST_PP_ITERATION_2 216\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 217 && BOOST_PP_ITERATION_FINISH_2 >= 217\n#        define BOOST_PP_ITERATION_2 217\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 218 && BOOST_PP_ITERATION_FINISH_2 >= 218\n#        define BOOST_PP_ITERATION_2 218\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 219 && BOOST_PP_ITERATION_FINISH_2 >= 219\n#        define BOOST_PP_ITERATION_2 219\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 220 && BOOST_PP_ITERATION_FINISH_2 >= 220\n#        define BOOST_PP_ITERATION_2 220\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 221 && BOOST_PP_ITERATION_FINISH_2 >= 221\n#        define BOOST_PP_ITERATION_2 221\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 222 && BOOST_PP_ITERATION_FINISH_2 >= 222\n#        define BOOST_PP_ITERATION_2 222\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 223 && BOOST_PP_ITERATION_FINISH_2 >= 223\n#        define BOOST_PP_ITERATION_2 223\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 224 && BOOST_PP_ITERATION_FINISH_2 >= 224\n#        define BOOST_PP_ITERATION_2 224\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 225 && BOOST_PP_ITERATION_FINISH_2 >= 225\n#        define BOOST_PP_ITERATION_2 225\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 226 && BOOST_PP_ITERATION_FINISH_2 >= 226\n#        define BOOST_PP_ITERATION_2 226\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 227 && BOOST_PP_ITERATION_FINISH_2 >= 227\n#        define BOOST_PP_ITERATION_2 227\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 228 && BOOST_PP_ITERATION_FINISH_2 >= 228\n#        define BOOST_PP_ITERATION_2 228\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 229 && BOOST_PP_ITERATION_FINISH_2 >= 229\n#        define BOOST_PP_ITERATION_2 229\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 230 && BOOST_PP_ITERATION_FINISH_2 >= 230\n#        define BOOST_PP_ITERATION_2 230\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 231 && BOOST_PP_ITERATION_FINISH_2 >= 231\n#        define BOOST_PP_ITERATION_2 231\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 232 && BOOST_PP_ITERATION_FINISH_2 >= 232\n#        define BOOST_PP_ITERATION_2 232\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 233 && BOOST_PP_ITERATION_FINISH_2 >= 233\n#        define BOOST_PP_ITERATION_2 233\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 234 && BOOST_PP_ITERATION_FINISH_2 >= 234\n#        define BOOST_PP_ITERATION_2 234\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 235 && BOOST_PP_ITERATION_FINISH_2 >= 235\n#        define BOOST_PP_ITERATION_2 235\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 236 && BOOST_PP_ITERATION_FINISH_2 >= 236\n#        define BOOST_PP_ITERATION_2 236\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 237 && BOOST_PP_ITERATION_FINISH_2 >= 237\n#        define BOOST_PP_ITERATION_2 237\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 238 && BOOST_PP_ITERATION_FINISH_2 >= 238\n#        define BOOST_PP_ITERATION_2 238\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 239 && BOOST_PP_ITERATION_FINISH_2 >= 239\n#        define BOOST_PP_ITERATION_2 239\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 240 && BOOST_PP_ITERATION_FINISH_2 >= 240\n#        define BOOST_PP_ITERATION_2 240\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 241 && BOOST_PP_ITERATION_FINISH_2 >= 241\n#        define BOOST_PP_ITERATION_2 241\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 242 && BOOST_PP_ITERATION_FINISH_2 >= 242\n#        define BOOST_PP_ITERATION_2 242\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 243 && BOOST_PP_ITERATION_FINISH_2 >= 243\n#        define BOOST_PP_ITERATION_2 243\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 244 && BOOST_PP_ITERATION_FINISH_2 >= 244\n#        define BOOST_PP_ITERATION_2 244\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 245 && BOOST_PP_ITERATION_FINISH_2 >= 245\n#        define BOOST_PP_ITERATION_2 245\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 246 && BOOST_PP_ITERATION_FINISH_2 >= 246\n#        define BOOST_PP_ITERATION_2 246\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 247 && BOOST_PP_ITERATION_FINISH_2 >= 247\n#        define BOOST_PP_ITERATION_2 247\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 248 && BOOST_PP_ITERATION_FINISH_2 >= 248\n#        define BOOST_PP_ITERATION_2 248\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 249 && BOOST_PP_ITERATION_FINISH_2 >= 249\n#        define BOOST_PP_ITERATION_2 249\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 250 && BOOST_PP_ITERATION_FINISH_2 >= 250\n#        define BOOST_PP_ITERATION_2 250\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 251 && BOOST_PP_ITERATION_FINISH_2 >= 251\n#        define BOOST_PP_ITERATION_2 251\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 252 && BOOST_PP_ITERATION_FINISH_2 >= 252\n#        define BOOST_PP_ITERATION_2 252\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 253 && BOOST_PP_ITERATION_FINISH_2 >= 253\n#        define BOOST_PP_ITERATION_2 253\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 254 && BOOST_PP_ITERATION_FINISH_2 >= 254\n#        define BOOST_PP_ITERATION_2 254\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 255 && BOOST_PP_ITERATION_FINISH_2 >= 255\n#        define BOOST_PP_ITERATION_2 255\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n#    if BOOST_PP_ITERATION_START_2 <= 256 && BOOST_PP_ITERATION_FINISH_2 >= 256\n#        define BOOST_PP_ITERATION_2 256\n#        include BOOST_PP_FILENAME_2\n#        undef BOOST_PP_ITERATION_2\n#    endif\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 1\n#\n# undef BOOST_PP_ITERATION_START_2\n# undef BOOST_PP_ITERATION_FINISH_2\n# undef BOOST_PP_FILENAME_2\n#\n# undef BOOST_PP_ITERATION_FLAGS_2\n# undef BOOST_PP_ITERATION_PARAMS_2\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/forward3.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if defined(BOOST_PP_ITERATION_LIMITS)\n#    if !defined(BOOST_PP_FILENAME_3)\n#        error BOOST_PP_ERROR:  depth #3 filename is not defined\n#    endif\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/lower3.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/upper3.hpp>\n#    define BOOST_PP_ITERATION_FLAGS_3() 0\n#    undef BOOST_PP_ITERATION_LIMITS\n# elif defined(BOOST_PP_ITERATION_PARAMS_3)\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_3)\n#    include <boost/preprocessor/iteration/detail/bounds/lower3.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_3)\n#    include <boost/preprocessor/iteration/detail/bounds/upper3.hpp>\n#    define BOOST_PP_FILENAME_3 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_3)\n#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_3) >= 4\n#        define BOOST_PP_ITERATION_FLAGS_3() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_3)\n#    else\n#        define BOOST_PP_ITERATION_FLAGS_3() 0\n#    endif\n# else\n#    error BOOST_PP_ERROR:  depth #3 iteration boundaries or filename not defined\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 3\n#\n# if (BOOST_PP_ITERATION_START_3) > (BOOST_PP_ITERATION_FINISH_3)\n#    include <boost/preprocessor/iteration/detail/iter/reverse3.hpp>\n# else\n#    if BOOST_PP_ITERATION_START_3 <= 0 && BOOST_PP_ITERATION_FINISH_3 >= 0\n#        define BOOST_PP_ITERATION_3 0\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 1 && BOOST_PP_ITERATION_FINISH_3 >= 1\n#        define BOOST_PP_ITERATION_3 1\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 2 && BOOST_PP_ITERATION_FINISH_3 >= 2\n#        define BOOST_PP_ITERATION_3 2\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 3 && BOOST_PP_ITERATION_FINISH_3 >= 3\n#        define BOOST_PP_ITERATION_3 3\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 4 && BOOST_PP_ITERATION_FINISH_3 >= 4\n#        define BOOST_PP_ITERATION_3 4\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 5 && BOOST_PP_ITERATION_FINISH_3 >= 5\n#        define BOOST_PP_ITERATION_3 5\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 6 && BOOST_PP_ITERATION_FINISH_3 >= 6\n#        define BOOST_PP_ITERATION_3 6\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 7 && BOOST_PP_ITERATION_FINISH_3 >= 7\n#        define BOOST_PP_ITERATION_3 7\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 8 && BOOST_PP_ITERATION_FINISH_3 >= 8\n#        define BOOST_PP_ITERATION_3 8\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 9 && BOOST_PP_ITERATION_FINISH_3 >= 9\n#        define BOOST_PP_ITERATION_3 9\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 10 && BOOST_PP_ITERATION_FINISH_3 >= 10\n#        define BOOST_PP_ITERATION_3 10\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 11 && BOOST_PP_ITERATION_FINISH_3 >= 11\n#        define BOOST_PP_ITERATION_3 11\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 12 && BOOST_PP_ITERATION_FINISH_3 >= 12\n#        define BOOST_PP_ITERATION_3 12\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 13 && BOOST_PP_ITERATION_FINISH_3 >= 13\n#        define BOOST_PP_ITERATION_3 13\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 14 && BOOST_PP_ITERATION_FINISH_3 >= 14\n#        define BOOST_PP_ITERATION_3 14\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 15 && BOOST_PP_ITERATION_FINISH_3 >= 15\n#        define BOOST_PP_ITERATION_3 15\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 16 && BOOST_PP_ITERATION_FINISH_3 >= 16\n#        define BOOST_PP_ITERATION_3 16\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 17 && BOOST_PP_ITERATION_FINISH_3 >= 17\n#        define BOOST_PP_ITERATION_3 17\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 18 && BOOST_PP_ITERATION_FINISH_3 >= 18\n#        define BOOST_PP_ITERATION_3 18\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 19 && BOOST_PP_ITERATION_FINISH_3 >= 19\n#        define BOOST_PP_ITERATION_3 19\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 20 && BOOST_PP_ITERATION_FINISH_3 >= 20\n#        define BOOST_PP_ITERATION_3 20\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 21 && BOOST_PP_ITERATION_FINISH_3 >= 21\n#        define BOOST_PP_ITERATION_3 21\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 22 && BOOST_PP_ITERATION_FINISH_3 >= 22\n#        define BOOST_PP_ITERATION_3 22\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 23 && BOOST_PP_ITERATION_FINISH_3 >= 23\n#        define BOOST_PP_ITERATION_3 23\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 24 && BOOST_PP_ITERATION_FINISH_3 >= 24\n#        define BOOST_PP_ITERATION_3 24\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 25 && BOOST_PP_ITERATION_FINISH_3 >= 25\n#        define BOOST_PP_ITERATION_3 25\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 26 && BOOST_PP_ITERATION_FINISH_3 >= 26\n#        define BOOST_PP_ITERATION_3 26\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 27 && BOOST_PP_ITERATION_FINISH_3 >= 27\n#        define BOOST_PP_ITERATION_3 27\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 28 && BOOST_PP_ITERATION_FINISH_3 >= 28\n#        define BOOST_PP_ITERATION_3 28\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 29 && BOOST_PP_ITERATION_FINISH_3 >= 29\n#        define BOOST_PP_ITERATION_3 29\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 30 && BOOST_PP_ITERATION_FINISH_3 >= 30\n#        define BOOST_PP_ITERATION_3 30\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 31 && BOOST_PP_ITERATION_FINISH_3 >= 31\n#        define BOOST_PP_ITERATION_3 31\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 32 && BOOST_PP_ITERATION_FINISH_3 >= 32\n#        define BOOST_PP_ITERATION_3 32\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 33 && BOOST_PP_ITERATION_FINISH_3 >= 33\n#        define BOOST_PP_ITERATION_3 33\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 34 && BOOST_PP_ITERATION_FINISH_3 >= 34\n#        define BOOST_PP_ITERATION_3 34\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 35 && BOOST_PP_ITERATION_FINISH_3 >= 35\n#        define BOOST_PP_ITERATION_3 35\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 36 && BOOST_PP_ITERATION_FINISH_3 >= 36\n#        define BOOST_PP_ITERATION_3 36\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 37 && BOOST_PP_ITERATION_FINISH_3 >= 37\n#        define BOOST_PP_ITERATION_3 37\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 38 && BOOST_PP_ITERATION_FINISH_3 >= 38\n#        define BOOST_PP_ITERATION_3 38\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 39 && BOOST_PP_ITERATION_FINISH_3 >= 39\n#        define BOOST_PP_ITERATION_3 39\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 40 && BOOST_PP_ITERATION_FINISH_3 >= 40\n#        define BOOST_PP_ITERATION_3 40\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 41 && BOOST_PP_ITERATION_FINISH_3 >= 41\n#        define BOOST_PP_ITERATION_3 41\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 42 && BOOST_PP_ITERATION_FINISH_3 >= 42\n#        define BOOST_PP_ITERATION_3 42\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 43 && BOOST_PP_ITERATION_FINISH_3 >= 43\n#        define BOOST_PP_ITERATION_3 43\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 44 && BOOST_PP_ITERATION_FINISH_3 >= 44\n#        define BOOST_PP_ITERATION_3 44\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 45 && BOOST_PP_ITERATION_FINISH_3 >= 45\n#        define BOOST_PP_ITERATION_3 45\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 46 && BOOST_PP_ITERATION_FINISH_3 >= 46\n#        define BOOST_PP_ITERATION_3 46\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 47 && BOOST_PP_ITERATION_FINISH_3 >= 47\n#        define BOOST_PP_ITERATION_3 47\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 48 && BOOST_PP_ITERATION_FINISH_3 >= 48\n#        define BOOST_PP_ITERATION_3 48\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 49 && BOOST_PP_ITERATION_FINISH_3 >= 49\n#        define BOOST_PP_ITERATION_3 49\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 50 && BOOST_PP_ITERATION_FINISH_3 >= 50\n#        define BOOST_PP_ITERATION_3 50\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 51 && BOOST_PP_ITERATION_FINISH_3 >= 51\n#        define BOOST_PP_ITERATION_3 51\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 52 && BOOST_PP_ITERATION_FINISH_3 >= 52\n#        define BOOST_PP_ITERATION_3 52\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 53 && BOOST_PP_ITERATION_FINISH_3 >= 53\n#        define BOOST_PP_ITERATION_3 53\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 54 && BOOST_PP_ITERATION_FINISH_3 >= 54\n#        define BOOST_PP_ITERATION_3 54\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 55 && BOOST_PP_ITERATION_FINISH_3 >= 55\n#        define BOOST_PP_ITERATION_3 55\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 56 && BOOST_PP_ITERATION_FINISH_3 >= 56\n#        define BOOST_PP_ITERATION_3 56\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 57 && BOOST_PP_ITERATION_FINISH_3 >= 57\n#        define BOOST_PP_ITERATION_3 57\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 58 && BOOST_PP_ITERATION_FINISH_3 >= 58\n#        define BOOST_PP_ITERATION_3 58\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 59 && BOOST_PP_ITERATION_FINISH_3 >= 59\n#        define BOOST_PP_ITERATION_3 59\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 60 && BOOST_PP_ITERATION_FINISH_3 >= 60\n#        define BOOST_PP_ITERATION_3 60\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 61 && BOOST_PP_ITERATION_FINISH_3 >= 61\n#        define BOOST_PP_ITERATION_3 61\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 62 && BOOST_PP_ITERATION_FINISH_3 >= 62\n#        define BOOST_PP_ITERATION_3 62\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 63 && BOOST_PP_ITERATION_FINISH_3 >= 63\n#        define BOOST_PP_ITERATION_3 63\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 64 && BOOST_PP_ITERATION_FINISH_3 >= 64\n#        define BOOST_PP_ITERATION_3 64\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 65 && BOOST_PP_ITERATION_FINISH_3 >= 65\n#        define BOOST_PP_ITERATION_3 65\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 66 && BOOST_PP_ITERATION_FINISH_3 >= 66\n#        define BOOST_PP_ITERATION_3 66\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 67 && BOOST_PP_ITERATION_FINISH_3 >= 67\n#        define BOOST_PP_ITERATION_3 67\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 68 && BOOST_PP_ITERATION_FINISH_3 >= 68\n#        define BOOST_PP_ITERATION_3 68\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 69 && BOOST_PP_ITERATION_FINISH_3 >= 69\n#        define BOOST_PP_ITERATION_3 69\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 70 && BOOST_PP_ITERATION_FINISH_3 >= 70\n#        define BOOST_PP_ITERATION_3 70\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 71 && BOOST_PP_ITERATION_FINISH_3 >= 71\n#        define BOOST_PP_ITERATION_3 71\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 72 && BOOST_PP_ITERATION_FINISH_3 >= 72\n#        define BOOST_PP_ITERATION_3 72\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 73 && BOOST_PP_ITERATION_FINISH_3 >= 73\n#        define BOOST_PP_ITERATION_3 73\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 74 && BOOST_PP_ITERATION_FINISH_3 >= 74\n#        define BOOST_PP_ITERATION_3 74\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 75 && BOOST_PP_ITERATION_FINISH_3 >= 75\n#        define BOOST_PP_ITERATION_3 75\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 76 && BOOST_PP_ITERATION_FINISH_3 >= 76\n#        define BOOST_PP_ITERATION_3 76\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 77 && BOOST_PP_ITERATION_FINISH_3 >= 77\n#        define BOOST_PP_ITERATION_3 77\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 78 && BOOST_PP_ITERATION_FINISH_3 >= 78\n#        define BOOST_PP_ITERATION_3 78\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 79 && BOOST_PP_ITERATION_FINISH_3 >= 79\n#        define BOOST_PP_ITERATION_3 79\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 80 && BOOST_PP_ITERATION_FINISH_3 >= 80\n#        define BOOST_PP_ITERATION_3 80\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 81 && BOOST_PP_ITERATION_FINISH_3 >= 81\n#        define BOOST_PP_ITERATION_3 81\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 82 && BOOST_PP_ITERATION_FINISH_3 >= 82\n#        define BOOST_PP_ITERATION_3 82\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 83 && BOOST_PP_ITERATION_FINISH_3 >= 83\n#        define BOOST_PP_ITERATION_3 83\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 84 && BOOST_PP_ITERATION_FINISH_3 >= 84\n#        define BOOST_PP_ITERATION_3 84\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 85 && BOOST_PP_ITERATION_FINISH_3 >= 85\n#        define BOOST_PP_ITERATION_3 85\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 86 && BOOST_PP_ITERATION_FINISH_3 >= 86\n#        define BOOST_PP_ITERATION_3 86\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 87 && BOOST_PP_ITERATION_FINISH_3 >= 87\n#        define BOOST_PP_ITERATION_3 87\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 88 && BOOST_PP_ITERATION_FINISH_3 >= 88\n#        define BOOST_PP_ITERATION_3 88\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 89 && BOOST_PP_ITERATION_FINISH_3 >= 89\n#        define BOOST_PP_ITERATION_3 89\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 90 && BOOST_PP_ITERATION_FINISH_3 >= 90\n#        define BOOST_PP_ITERATION_3 90\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 91 && BOOST_PP_ITERATION_FINISH_3 >= 91\n#        define BOOST_PP_ITERATION_3 91\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 92 && BOOST_PP_ITERATION_FINISH_3 >= 92\n#        define BOOST_PP_ITERATION_3 92\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 93 && BOOST_PP_ITERATION_FINISH_3 >= 93\n#        define BOOST_PP_ITERATION_3 93\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 94 && BOOST_PP_ITERATION_FINISH_3 >= 94\n#        define BOOST_PP_ITERATION_3 94\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 95 && BOOST_PP_ITERATION_FINISH_3 >= 95\n#        define BOOST_PP_ITERATION_3 95\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 96 && BOOST_PP_ITERATION_FINISH_3 >= 96\n#        define BOOST_PP_ITERATION_3 96\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 97 && BOOST_PP_ITERATION_FINISH_3 >= 97\n#        define BOOST_PP_ITERATION_3 97\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 98 && BOOST_PP_ITERATION_FINISH_3 >= 98\n#        define BOOST_PP_ITERATION_3 98\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 99 && BOOST_PP_ITERATION_FINISH_3 >= 99\n#        define BOOST_PP_ITERATION_3 99\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 100 && BOOST_PP_ITERATION_FINISH_3 >= 100\n#        define BOOST_PP_ITERATION_3 100\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 101 && BOOST_PP_ITERATION_FINISH_3 >= 101\n#        define BOOST_PP_ITERATION_3 101\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 102 && BOOST_PP_ITERATION_FINISH_3 >= 102\n#        define BOOST_PP_ITERATION_3 102\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 103 && BOOST_PP_ITERATION_FINISH_3 >= 103\n#        define BOOST_PP_ITERATION_3 103\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 104 && BOOST_PP_ITERATION_FINISH_3 >= 104\n#        define BOOST_PP_ITERATION_3 104\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 105 && BOOST_PP_ITERATION_FINISH_3 >= 105\n#        define BOOST_PP_ITERATION_3 105\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 106 && BOOST_PP_ITERATION_FINISH_3 >= 106\n#        define BOOST_PP_ITERATION_3 106\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 107 && BOOST_PP_ITERATION_FINISH_3 >= 107\n#        define BOOST_PP_ITERATION_3 107\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 108 && BOOST_PP_ITERATION_FINISH_3 >= 108\n#        define BOOST_PP_ITERATION_3 108\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 109 && BOOST_PP_ITERATION_FINISH_3 >= 109\n#        define BOOST_PP_ITERATION_3 109\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 110 && BOOST_PP_ITERATION_FINISH_3 >= 110\n#        define BOOST_PP_ITERATION_3 110\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 111 && BOOST_PP_ITERATION_FINISH_3 >= 111\n#        define BOOST_PP_ITERATION_3 111\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 112 && BOOST_PP_ITERATION_FINISH_3 >= 112\n#        define BOOST_PP_ITERATION_3 112\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 113 && BOOST_PP_ITERATION_FINISH_3 >= 113\n#        define BOOST_PP_ITERATION_3 113\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 114 && BOOST_PP_ITERATION_FINISH_3 >= 114\n#        define BOOST_PP_ITERATION_3 114\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 115 && BOOST_PP_ITERATION_FINISH_3 >= 115\n#        define BOOST_PP_ITERATION_3 115\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 116 && BOOST_PP_ITERATION_FINISH_3 >= 116\n#        define BOOST_PP_ITERATION_3 116\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 117 && BOOST_PP_ITERATION_FINISH_3 >= 117\n#        define BOOST_PP_ITERATION_3 117\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 118 && BOOST_PP_ITERATION_FINISH_3 >= 118\n#        define BOOST_PP_ITERATION_3 118\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 119 && BOOST_PP_ITERATION_FINISH_3 >= 119\n#        define BOOST_PP_ITERATION_3 119\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 120 && BOOST_PP_ITERATION_FINISH_3 >= 120\n#        define BOOST_PP_ITERATION_3 120\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 121 && BOOST_PP_ITERATION_FINISH_3 >= 121\n#        define BOOST_PP_ITERATION_3 121\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 122 && BOOST_PP_ITERATION_FINISH_3 >= 122\n#        define BOOST_PP_ITERATION_3 122\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 123 && BOOST_PP_ITERATION_FINISH_3 >= 123\n#        define BOOST_PP_ITERATION_3 123\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 124 && BOOST_PP_ITERATION_FINISH_3 >= 124\n#        define BOOST_PP_ITERATION_3 124\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 125 && BOOST_PP_ITERATION_FINISH_3 >= 125\n#        define BOOST_PP_ITERATION_3 125\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 126 && BOOST_PP_ITERATION_FINISH_3 >= 126\n#        define BOOST_PP_ITERATION_3 126\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 127 && BOOST_PP_ITERATION_FINISH_3 >= 127\n#        define BOOST_PP_ITERATION_3 127\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 128 && BOOST_PP_ITERATION_FINISH_3 >= 128\n#        define BOOST_PP_ITERATION_3 128\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 129 && BOOST_PP_ITERATION_FINISH_3 >= 129\n#        define BOOST_PP_ITERATION_3 129\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 130 && BOOST_PP_ITERATION_FINISH_3 >= 130\n#        define BOOST_PP_ITERATION_3 130\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 131 && BOOST_PP_ITERATION_FINISH_3 >= 131\n#        define BOOST_PP_ITERATION_3 131\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 132 && BOOST_PP_ITERATION_FINISH_3 >= 132\n#        define BOOST_PP_ITERATION_3 132\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 133 && BOOST_PP_ITERATION_FINISH_3 >= 133\n#        define BOOST_PP_ITERATION_3 133\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 134 && BOOST_PP_ITERATION_FINISH_3 >= 134\n#        define BOOST_PP_ITERATION_3 134\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 135 && BOOST_PP_ITERATION_FINISH_3 >= 135\n#        define BOOST_PP_ITERATION_3 135\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 136 && BOOST_PP_ITERATION_FINISH_3 >= 136\n#        define BOOST_PP_ITERATION_3 136\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 137 && BOOST_PP_ITERATION_FINISH_3 >= 137\n#        define BOOST_PP_ITERATION_3 137\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 138 && BOOST_PP_ITERATION_FINISH_3 >= 138\n#        define BOOST_PP_ITERATION_3 138\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 139 && BOOST_PP_ITERATION_FINISH_3 >= 139\n#        define BOOST_PP_ITERATION_3 139\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 140 && BOOST_PP_ITERATION_FINISH_3 >= 140\n#        define BOOST_PP_ITERATION_3 140\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 141 && BOOST_PP_ITERATION_FINISH_3 >= 141\n#        define BOOST_PP_ITERATION_3 141\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 142 && BOOST_PP_ITERATION_FINISH_3 >= 142\n#        define BOOST_PP_ITERATION_3 142\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 143 && BOOST_PP_ITERATION_FINISH_3 >= 143\n#        define BOOST_PP_ITERATION_3 143\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 144 && BOOST_PP_ITERATION_FINISH_3 >= 144\n#        define BOOST_PP_ITERATION_3 144\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 145 && BOOST_PP_ITERATION_FINISH_3 >= 145\n#        define BOOST_PP_ITERATION_3 145\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 146 && BOOST_PP_ITERATION_FINISH_3 >= 146\n#        define BOOST_PP_ITERATION_3 146\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 147 && BOOST_PP_ITERATION_FINISH_3 >= 147\n#        define BOOST_PP_ITERATION_3 147\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 148 && BOOST_PP_ITERATION_FINISH_3 >= 148\n#        define BOOST_PP_ITERATION_3 148\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 149 && BOOST_PP_ITERATION_FINISH_3 >= 149\n#        define BOOST_PP_ITERATION_3 149\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 150 && BOOST_PP_ITERATION_FINISH_3 >= 150\n#        define BOOST_PP_ITERATION_3 150\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 151 && BOOST_PP_ITERATION_FINISH_3 >= 151\n#        define BOOST_PP_ITERATION_3 151\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 152 && BOOST_PP_ITERATION_FINISH_3 >= 152\n#        define BOOST_PP_ITERATION_3 152\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 153 && BOOST_PP_ITERATION_FINISH_3 >= 153\n#        define BOOST_PP_ITERATION_3 153\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 154 && BOOST_PP_ITERATION_FINISH_3 >= 154\n#        define BOOST_PP_ITERATION_3 154\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 155 && BOOST_PP_ITERATION_FINISH_3 >= 155\n#        define BOOST_PP_ITERATION_3 155\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 156 && BOOST_PP_ITERATION_FINISH_3 >= 156\n#        define BOOST_PP_ITERATION_3 156\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 157 && BOOST_PP_ITERATION_FINISH_3 >= 157\n#        define BOOST_PP_ITERATION_3 157\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 158 && BOOST_PP_ITERATION_FINISH_3 >= 158\n#        define BOOST_PP_ITERATION_3 158\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 159 && BOOST_PP_ITERATION_FINISH_3 >= 159\n#        define BOOST_PP_ITERATION_3 159\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 160 && BOOST_PP_ITERATION_FINISH_3 >= 160\n#        define BOOST_PP_ITERATION_3 160\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 161 && BOOST_PP_ITERATION_FINISH_3 >= 161\n#        define BOOST_PP_ITERATION_3 161\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 162 && BOOST_PP_ITERATION_FINISH_3 >= 162\n#        define BOOST_PP_ITERATION_3 162\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 163 && BOOST_PP_ITERATION_FINISH_3 >= 163\n#        define BOOST_PP_ITERATION_3 163\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 164 && BOOST_PP_ITERATION_FINISH_3 >= 164\n#        define BOOST_PP_ITERATION_3 164\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 165 && BOOST_PP_ITERATION_FINISH_3 >= 165\n#        define BOOST_PP_ITERATION_3 165\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 166 && BOOST_PP_ITERATION_FINISH_3 >= 166\n#        define BOOST_PP_ITERATION_3 166\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 167 && BOOST_PP_ITERATION_FINISH_3 >= 167\n#        define BOOST_PP_ITERATION_3 167\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 168 && BOOST_PP_ITERATION_FINISH_3 >= 168\n#        define BOOST_PP_ITERATION_3 168\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 169 && BOOST_PP_ITERATION_FINISH_3 >= 169\n#        define BOOST_PP_ITERATION_3 169\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 170 && BOOST_PP_ITERATION_FINISH_3 >= 170\n#        define BOOST_PP_ITERATION_3 170\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 171 && BOOST_PP_ITERATION_FINISH_3 >= 171\n#        define BOOST_PP_ITERATION_3 171\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 172 && BOOST_PP_ITERATION_FINISH_3 >= 172\n#        define BOOST_PP_ITERATION_3 172\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 173 && BOOST_PP_ITERATION_FINISH_3 >= 173\n#        define BOOST_PP_ITERATION_3 173\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 174 && BOOST_PP_ITERATION_FINISH_3 >= 174\n#        define BOOST_PP_ITERATION_3 174\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 175 && BOOST_PP_ITERATION_FINISH_3 >= 175\n#        define BOOST_PP_ITERATION_3 175\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 176 && BOOST_PP_ITERATION_FINISH_3 >= 176\n#        define BOOST_PP_ITERATION_3 176\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 177 && BOOST_PP_ITERATION_FINISH_3 >= 177\n#        define BOOST_PP_ITERATION_3 177\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 178 && BOOST_PP_ITERATION_FINISH_3 >= 178\n#        define BOOST_PP_ITERATION_3 178\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 179 && BOOST_PP_ITERATION_FINISH_3 >= 179\n#        define BOOST_PP_ITERATION_3 179\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 180 && BOOST_PP_ITERATION_FINISH_3 >= 180\n#        define BOOST_PP_ITERATION_3 180\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 181 && BOOST_PP_ITERATION_FINISH_3 >= 181\n#        define BOOST_PP_ITERATION_3 181\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 182 && BOOST_PP_ITERATION_FINISH_3 >= 182\n#        define BOOST_PP_ITERATION_3 182\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 183 && BOOST_PP_ITERATION_FINISH_3 >= 183\n#        define BOOST_PP_ITERATION_3 183\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 184 && BOOST_PP_ITERATION_FINISH_3 >= 184\n#        define BOOST_PP_ITERATION_3 184\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 185 && BOOST_PP_ITERATION_FINISH_3 >= 185\n#        define BOOST_PP_ITERATION_3 185\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 186 && BOOST_PP_ITERATION_FINISH_3 >= 186\n#        define BOOST_PP_ITERATION_3 186\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 187 && BOOST_PP_ITERATION_FINISH_3 >= 187\n#        define BOOST_PP_ITERATION_3 187\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 188 && BOOST_PP_ITERATION_FINISH_3 >= 188\n#        define BOOST_PP_ITERATION_3 188\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 189 && BOOST_PP_ITERATION_FINISH_3 >= 189\n#        define BOOST_PP_ITERATION_3 189\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 190 && BOOST_PP_ITERATION_FINISH_3 >= 190\n#        define BOOST_PP_ITERATION_3 190\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 191 && BOOST_PP_ITERATION_FINISH_3 >= 191\n#        define BOOST_PP_ITERATION_3 191\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 192 && BOOST_PP_ITERATION_FINISH_3 >= 192\n#        define BOOST_PP_ITERATION_3 192\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 193 && BOOST_PP_ITERATION_FINISH_3 >= 193\n#        define BOOST_PP_ITERATION_3 193\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 194 && BOOST_PP_ITERATION_FINISH_3 >= 194\n#        define BOOST_PP_ITERATION_3 194\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 195 && BOOST_PP_ITERATION_FINISH_3 >= 195\n#        define BOOST_PP_ITERATION_3 195\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 196 && BOOST_PP_ITERATION_FINISH_3 >= 196\n#        define BOOST_PP_ITERATION_3 196\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 197 && BOOST_PP_ITERATION_FINISH_3 >= 197\n#        define BOOST_PP_ITERATION_3 197\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 198 && BOOST_PP_ITERATION_FINISH_3 >= 198\n#        define BOOST_PP_ITERATION_3 198\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 199 && BOOST_PP_ITERATION_FINISH_3 >= 199\n#        define BOOST_PP_ITERATION_3 199\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 200 && BOOST_PP_ITERATION_FINISH_3 >= 200\n#        define BOOST_PP_ITERATION_3 200\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 201 && BOOST_PP_ITERATION_FINISH_3 >= 201\n#        define BOOST_PP_ITERATION_3 201\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 202 && BOOST_PP_ITERATION_FINISH_3 >= 202\n#        define BOOST_PP_ITERATION_3 202\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 203 && BOOST_PP_ITERATION_FINISH_3 >= 203\n#        define BOOST_PP_ITERATION_3 203\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 204 && BOOST_PP_ITERATION_FINISH_3 >= 204\n#        define BOOST_PP_ITERATION_3 204\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 205 && BOOST_PP_ITERATION_FINISH_3 >= 205\n#        define BOOST_PP_ITERATION_3 205\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 206 && BOOST_PP_ITERATION_FINISH_3 >= 206\n#        define BOOST_PP_ITERATION_3 206\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 207 && BOOST_PP_ITERATION_FINISH_3 >= 207\n#        define BOOST_PP_ITERATION_3 207\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 208 && BOOST_PP_ITERATION_FINISH_3 >= 208\n#        define BOOST_PP_ITERATION_3 208\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 209 && BOOST_PP_ITERATION_FINISH_3 >= 209\n#        define BOOST_PP_ITERATION_3 209\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 210 && BOOST_PP_ITERATION_FINISH_3 >= 210\n#        define BOOST_PP_ITERATION_3 210\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 211 && BOOST_PP_ITERATION_FINISH_3 >= 211\n#        define BOOST_PP_ITERATION_3 211\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 212 && BOOST_PP_ITERATION_FINISH_3 >= 212\n#        define BOOST_PP_ITERATION_3 212\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 213 && BOOST_PP_ITERATION_FINISH_3 >= 213\n#        define BOOST_PP_ITERATION_3 213\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 214 && BOOST_PP_ITERATION_FINISH_3 >= 214\n#        define BOOST_PP_ITERATION_3 214\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 215 && BOOST_PP_ITERATION_FINISH_3 >= 215\n#        define BOOST_PP_ITERATION_3 215\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 216 && BOOST_PP_ITERATION_FINISH_3 >= 216\n#        define BOOST_PP_ITERATION_3 216\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 217 && BOOST_PP_ITERATION_FINISH_3 >= 217\n#        define BOOST_PP_ITERATION_3 217\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 218 && BOOST_PP_ITERATION_FINISH_3 >= 218\n#        define BOOST_PP_ITERATION_3 218\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 219 && BOOST_PP_ITERATION_FINISH_3 >= 219\n#        define BOOST_PP_ITERATION_3 219\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 220 && BOOST_PP_ITERATION_FINISH_3 >= 220\n#        define BOOST_PP_ITERATION_3 220\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 221 && BOOST_PP_ITERATION_FINISH_3 >= 221\n#        define BOOST_PP_ITERATION_3 221\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 222 && BOOST_PP_ITERATION_FINISH_3 >= 222\n#        define BOOST_PP_ITERATION_3 222\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 223 && BOOST_PP_ITERATION_FINISH_3 >= 223\n#        define BOOST_PP_ITERATION_3 223\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 224 && BOOST_PP_ITERATION_FINISH_3 >= 224\n#        define BOOST_PP_ITERATION_3 224\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 225 && BOOST_PP_ITERATION_FINISH_3 >= 225\n#        define BOOST_PP_ITERATION_3 225\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 226 && BOOST_PP_ITERATION_FINISH_3 >= 226\n#        define BOOST_PP_ITERATION_3 226\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 227 && BOOST_PP_ITERATION_FINISH_3 >= 227\n#        define BOOST_PP_ITERATION_3 227\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 228 && BOOST_PP_ITERATION_FINISH_3 >= 228\n#        define BOOST_PP_ITERATION_3 228\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 229 && BOOST_PP_ITERATION_FINISH_3 >= 229\n#        define BOOST_PP_ITERATION_3 229\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 230 && BOOST_PP_ITERATION_FINISH_3 >= 230\n#        define BOOST_PP_ITERATION_3 230\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 231 && BOOST_PP_ITERATION_FINISH_3 >= 231\n#        define BOOST_PP_ITERATION_3 231\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 232 && BOOST_PP_ITERATION_FINISH_3 >= 232\n#        define BOOST_PP_ITERATION_3 232\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 233 && BOOST_PP_ITERATION_FINISH_3 >= 233\n#        define BOOST_PP_ITERATION_3 233\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 234 && BOOST_PP_ITERATION_FINISH_3 >= 234\n#        define BOOST_PP_ITERATION_3 234\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 235 && BOOST_PP_ITERATION_FINISH_3 >= 235\n#        define BOOST_PP_ITERATION_3 235\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 236 && BOOST_PP_ITERATION_FINISH_3 >= 236\n#        define BOOST_PP_ITERATION_3 236\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 237 && BOOST_PP_ITERATION_FINISH_3 >= 237\n#        define BOOST_PP_ITERATION_3 237\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 238 && BOOST_PP_ITERATION_FINISH_3 >= 238\n#        define BOOST_PP_ITERATION_3 238\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 239 && BOOST_PP_ITERATION_FINISH_3 >= 239\n#        define BOOST_PP_ITERATION_3 239\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 240 && BOOST_PP_ITERATION_FINISH_3 >= 240\n#        define BOOST_PP_ITERATION_3 240\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 241 && BOOST_PP_ITERATION_FINISH_3 >= 241\n#        define BOOST_PP_ITERATION_3 241\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 242 && BOOST_PP_ITERATION_FINISH_3 >= 242\n#        define BOOST_PP_ITERATION_3 242\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 243 && BOOST_PP_ITERATION_FINISH_3 >= 243\n#        define BOOST_PP_ITERATION_3 243\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 244 && BOOST_PP_ITERATION_FINISH_3 >= 244\n#        define BOOST_PP_ITERATION_3 244\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 245 && BOOST_PP_ITERATION_FINISH_3 >= 245\n#        define BOOST_PP_ITERATION_3 245\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 246 && BOOST_PP_ITERATION_FINISH_3 >= 246\n#        define BOOST_PP_ITERATION_3 246\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 247 && BOOST_PP_ITERATION_FINISH_3 >= 247\n#        define BOOST_PP_ITERATION_3 247\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 248 && BOOST_PP_ITERATION_FINISH_3 >= 248\n#        define BOOST_PP_ITERATION_3 248\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 249 && BOOST_PP_ITERATION_FINISH_3 >= 249\n#        define BOOST_PP_ITERATION_3 249\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 250 && BOOST_PP_ITERATION_FINISH_3 >= 250\n#        define BOOST_PP_ITERATION_3 250\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 251 && BOOST_PP_ITERATION_FINISH_3 >= 251\n#        define BOOST_PP_ITERATION_3 251\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 252 && BOOST_PP_ITERATION_FINISH_3 >= 252\n#        define BOOST_PP_ITERATION_3 252\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 253 && BOOST_PP_ITERATION_FINISH_3 >= 253\n#        define BOOST_PP_ITERATION_3 253\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 254 && BOOST_PP_ITERATION_FINISH_3 >= 254\n#        define BOOST_PP_ITERATION_3 254\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 255 && BOOST_PP_ITERATION_FINISH_3 >= 255\n#        define BOOST_PP_ITERATION_3 255\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n#    if BOOST_PP_ITERATION_START_3 <= 256 && BOOST_PP_ITERATION_FINISH_3 >= 256\n#        define BOOST_PP_ITERATION_3 256\n#        include BOOST_PP_FILENAME_3\n#        undef BOOST_PP_ITERATION_3\n#    endif\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 2\n#\n# undef BOOST_PP_ITERATION_START_3\n# undef BOOST_PP_ITERATION_FINISH_3\n# undef BOOST_PP_FILENAME_3\n#\n# undef BOOST_PP_ITERATION_FLAGS_3\n# undef BOOST_PP_ITERATION_PARAMS_3\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/forward4.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if defined(BOOST_PP_ITERATION_LIMITS)\n#    if !defined(BOOST_PP_FILENAME_4)\n#        error BOOST_PP_ERROR:  depth #4 filename is not defined\n#    endif\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/lower4.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/upper4.hpp>\n#    define BOOST_PP_ITERATION_FLAGS_4() 0\n#    undef BOOST_PP_ITERATION_LIMITS\n# elif defined(BOOST_PP_ITERATION_PARAMS_4)\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_4)\n#    include <boost/preprocessor/iteration/detail/bounds/lower4.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_4)\n#    include <boost/preprocessor/iteration/detail/bounds/upper4.hpp>\n#    define BOOST_PP_FILENAME_4 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_4)\n#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_4) >= 4\n#        define BOOST_PP_ITERATION_FLAGS_4() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_4)\n#    else\n#        define BOOST_PP_ITERATION_FLAGS_4() 0\n#    endif\n# else\n#    error BOOST_PP_ERROR:  depth #4 iteration boundaries or filename not defined\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 4\n#\n# if (BOOST_PP_ITERATION_START_4) > (BOOST_PP_ITERATION_FINISH_4)\n#    include <boost/preprocessor/iteration/detail/iter/reverse4.hpp>\n# else\n#    if BOOST_PP_ITERATION_START_4 <= 0 && BOOST_PP_ITERATION_FINISH_4 >= 0\n#        define BOOST_PP_ITERATION_4 0\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 1 && BOOST_PP_ITERATION_FINISH_4 >= 1\n#        define BOOST_PP_ITERATION_4 1\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 2 && BOOST_PP_ITERATION_FINISH_4 >= 2\n#        define BOOST_PP_ITERATION_4 2\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 3 && BOOST_PP_ITERATION_FINISH_4 >= 3\n#        define BOOST_PP_ITERATION_4 3\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 4 && BOOST_PP_ITERATION_FINISH_4 >= 4\n#        define BOOST_PP_ITERATION_4 4\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 5 && BOOST_PP_ITERATION_FINISH_4 >= 5\n#        define BOOST_PP_ITERATION_4 5\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 6 && BOOST_PP_ITERATION_FINISH_4 >= 6\n#        define BOOST_PP_ITERATION_4 6\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 7 && BOOST_PP_ITERATION_FINISH_4 >= 7\n#        define BOOST_PP_ITERATION_4 7\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 8 && BOOST_PP_ITERATION_FINISH_4 >= 8\n#        define BOOST_PP_ITERATION_4 8\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 9 && BOOST_PP_ITERATION_FINISH_4 >= 9\n#        define BOOST_PP_ITERATION_4 9\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 10 && BOOST_PP_ITERATION_FINISH_4 >= 10\n#        define BOOST_PP_ITERATION_4 10\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 11 && BOOST_PP_ITERATION_FINISH_4 >= 11\n#        define BOOST_PP_ITERATION_4 11\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 12 && BOOST_PP_ITERATION_FINISH_4 >= 12\n#        define BOOST_PP_ITERATION_4 12\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 13 && BOOST_PP_ITERATION_FINISH_4 >= 13\n#        define BOOST_PP_ITERATION_4 13\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 14 && BOOST_PP_ITERATION_FINISH_4 >= 14\n#        define BOOST_PP_ITERATION_4 14\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 15 && BOOST_PP_ITERATION_FINISH_4 >= 15\n#        define BOOST_PP_ITERATION_4 15\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 16 && BOOST_PP_ITERATION_FINISH_4 >= 16\n#        define BOOST_PP_ITERATION_4 16\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 17 && BOOST_PP_ITERATION_FINISH_4 >= 17\n#        define BOOST_PP_ITERATION_4 17\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 18 && BOOST_PP_ITERATION_FINISH_4 >= 18\n#        define BOOST_PP_ITERATION_4 18\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 19 && BOOST_PP_ITERATION_FINISH_4 >= 19\n#        define BOOST_PP_ITERATION_4 19\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 20 && BOOST_PP_ITERATION_FINISH_4 >= 20\n#        define BOOST_PP_ITERATION_4 20\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 21 && BOOST_PP_ITERATION_FINISH_4 >= 21\n#        define BOOST_PP_ITERATION_4 21\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 22 && BOOST_PP_ITERATION_FINISH_4 >= 22\n#        define BOOST_PP_ITERATION_4 22\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 23 && BOOST_PP_ITERATION_FINISH_4 >= 23\n#        define BOOST_PP_ITERATION_4 23\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 24 && BOOST_PP_ITERATION_FINISH_4 >= 24\n#        define BOOST_PP_ITERATION_4 24\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 25 && BOOST_PP_ITERATION_FINISH_4 >= 25\n#        define BOOST_PP_ITERATION_4 25\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 26 && BOOST_PP_ITERATION_FINISH_4 >= 26\n#        define BOOST_PP_ITERATION_4 26\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 27 && BOOST_PP_ITERATION_FINISH_4 >= 27\n#        define BOOST_PP_ITERATION_4 27\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 28 && BOOST_PP_ITERATION_FINISH_4 >= 28\n#        define BOOST_PP_ITERATION_4 28\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 29 && BOOST_PP_ITERATION_FINISH_4 >= 29\n#        define BOOST_PP_ITERATION_4 29\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 30 && BOOST_PP_ITERATION_FINISH_4 >= 30\n#        define BOOST_PP_ITERATION_4 30\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 31 && BOOST_PP_ITERATION_FINISH_4 >= 31\n#        define BOOST_PP_ITERATION_4 31\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 32 && BOOST_PP_ITERATION_FINISH_4 >= 32\n#        define BOOST_PP_ITERATION_4 32\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 33 && BOOST_PP_ITERATION_FINISH_4 >= 33\n#        define BOOST_PP_ITERATION_4 33\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 34 && BOOST_PP_ITERATION_FINISH_4 >= 34\n#        define BOOST_PP_ITERATION_4 34\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 35 && BOOST_PP_ITERATION_FINISH_4 >= 35\n#        define BOOST_PP_ITERATION_4 35\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 36 && BOOST_PP_ITERATION_FINISH_4 >= 36\n#        define BOOST_PP_ITERATION_4 36\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 37 && BOOST_PP_ITERATION_FINISH_4 >= 37\n#        define BOOST_PP_ITERATION_4 37\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 38 && BOOST_PP_ITERATION_FINISH_4 >= 38\n#        define BOOST_PP_ITERATION_4 38\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 39 && BOOST_PP_ITERATION_FINISH_4 >= 39\n#        define BOOST_PP_ITERATION_4 39\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 40 && BOOST_PP_ITERATION_FINISH_4 >= 40\n#        define BOOST_PP_ITERATION_4 40\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 41 && BOOST_PP_ITERATION_FINISH_4 >= 41\n#        define BOOST_PP_ITERATION_4 41\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 42 && BOOST_PP_ITERATION_FINISH_4 >= 42\n#        define BOOST_PP_ITERATION_4 42\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 43 && BOOST_PP_ITERATION_FINISH_4 >= 43\n#        define BOOST_PP_ITERATION_4 43\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 44 && BOOST_PP_ITERATION_FINISH_4 >= 44\n#        define BOOST_PP_ITERATION_4 44\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 45 && BOOST_PP_ITERATION_FINISH_4 >= 45\n#        define BOOST_PP_ITERATION_4 45\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 46 && BOOST_PP_ITERATION_FINISH_4 >= 46\n#        define BOOST_PP_ITERATION_4 46\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 47 && BOOST_PP_ITERATION_FINISH_4 >= 47\n#        define BOOST_PP_ITERATION_4 47\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 48 && BOOST_PP_ITERATION_FINISH_4 >= 48\n#        define BOOST_PP_ITERATION_4 48\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 49 && BOOST_PP_ITERATION_FINISH_4 >= 49\n#        define BOOST_PP_ITERATION_4 49\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 50 && BOOST_PP_ITERATION_FINISH_4 >= 50\n#        define BOOST_PP_ITERATION_4 50\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 51 && BOOST_PP_ITERATION_FINISH_4 >= 51\n#        define BOOST_PP_ITERATION_4 51\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 52 && BOOST_PP_ITERATION_FINISH_4 >= 52\n#        define BOOST_PP_ITERATION_4 52\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 53 && BOOST_PP_ITERATION_FINISH_4 >= 53\n#        define BOOST_PP_ITERATION_4 53\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 54 && BOOST_PP_ITERATION_FINISH_4 >= 54\n#        define BOOST_PP_ITERATION_4 54\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 55 && BOOST_PP_ITERATION_FINISH_4 >= 55\n#        define BOOST_PP_ITERATION_4 55\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 56 && BOOST_PP_ITERATION_FINISH_4 >= 56\n#        define BOOST_PP_ITERATION_4 56\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 57 && BOOST_PP_ITERATION_FINISH_4 >= 57\n#        define BOOST_PP_ITERATION_4 57\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 58 && BOOST_PP_ITERATION_FINISH_4 >= 58\n#        define BOOST_PP_ITERATION_4 58\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 59 && BOOST_PP_ITERATION_FINISH_4 >= 59\n#        define BOOST_PP_ITERATION_4 59\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 60 && BOOST_PP_ITERATION_FINISH_4 >= 60\n#        define BOOST_PP_ITERATION_4 60\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 61 && BOOST_PP_ITERATION_FINISH_4 >= 61\n#        define BOOST_PP_ITERATION_4 61\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 62 && BOOST_PP_ITERATION_FINISH_4 >= 62\n#        define BOOST_PP_ITERATION_4 62\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 63 && BOOST_PP_ITERATION_FINISH_4 >= 63\n#        define BOOST_PP_ITERATION_4 63\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 64 && BOOST_PP_ITERATION_FINISH_4 >= 64\n#        define BOOST_PP_ITERATION_4 64\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 65 && BOOST_PP_ITERATION_FINISH_4 >= 65\n#        define BOOST_PP_ITERATION_4 65\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 66 && BOOST_PP_ITERATION_FINISH_4 >= 66\n#        define BOOST_PP_ITERATION_4 66\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 67 && BOOST_PP_ITERATION_FINISH_4 >= 67\n#        define BOOST_PP_ITERATION_4 67\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 68 && BOOST_PP_ITERATION_FINISH_4 >= 68\n#        define BOOST_PP_ITERATION_4 68\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 69 && BOOST_PP_ITERATION_FINISH_4 >= 69\n#        define BOOST_PP_ITERATION_4 69\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 70 && BOOST_PP_ITERATION_FINISH_4 >= 70\n#        define BOOST_PP_ITERATION_4 70\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 71 && BOOST_PP_ITERATION_FINISH_4 >= 71\n#        define BOOST_PP_ITERATION_4 71\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 72 && BOOST_PP_ITERATION_FINISH_4 >= 72\n#        define BOOST_PP_ITERATION_4 72\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 73 && BOOST_PP_ITERATION_FINISH_4 >= 73\n#        define BOOST_PP_ITERATION_4 73\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 74 && BOOST_PP_ITERATION_FINISH_4 >= 74\n#        define BOOST_PP_ITERATION_4 74\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 75 && BOOST_PP_ITERATION_FINISH_4 >= 75\n#        define BOOST_PP_ITERATION_4 75\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 76 && BOOST_PP_ITERATION_FINISH_4 >= 76\n#        define BOOST_PP_ITERATION_4 76\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 77 && BOOST_PP_ITERATION_FINISH_4 >= 77\n#        define BOOST_PP_ITERATION_4 77\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 78 && BOOST_PP_ITERATION_FINISH_4 >= 78\n#        define BOOST_PP_ITERATION_4 78\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 79 && BOOST_PP_ITERATION_FINISH_4 >= 79\n#        define BOOST_PP_ITERATION_4 79\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 80 && BOOST_PP_ITERATION_FINISH_4 >= 80\n#        define BOOST_PP_ITERATION_4 80\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 81 && BOOST_PP_ITERATION_FINISH_4 >= 81\n#        define BOOST_PP_ITERATION_4 81\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 82 && BOOST_PP_ITERATION_FINISH_4 >= 82\n#        define BOOST_PP_ITERATION_4 82\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 83 && BOOST_PP_ITERATION_FINISH_4 >= 83\n#        define BOOST_PP_ITERATION_4 83\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 84 && BOOST_PP_ITERATION_FINISH_4 >= 84\n#        define BOOST_PP_ITERATION_4 84\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 85 && BOOST_PP_ITERATION_FINISH_4 >= 85\n#        define BOOST_PP_ITERATION_4 85\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 86 && BOOST_PP_ITERATION_FINISH_4 >= 86\n#        define BOOST_PP_ITERATION_4 86\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 87 && BOOST_PP_ITERATION_FINISH_4 >= 87\n#        define BOOST_PP_ITERATION_4 87\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 88 && BOOST_PP_ITERATION_FINISH_4 >= 88\n#        define BOOST_PP_ITERATION_4 88\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 89 && BOOST_PP_ITERATION_FINISH_4 >= 89\n#        define BOOST_PP_ITERATION_4 89\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 90 && BOOST_PP_ITERATION_FINISH_4 >= 90\n#        define BOOST_PP_ITERATION_4 90\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 91 && BOOST_PP_ITERATION_FINISH_4 >= 91\n#        define BOOST_PP_ITERATION_4 91\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 92 && BOOST_PP_ITERATION_FINISH_4 >= 92\n#        define BOOST_PP_ITERATION_4 92\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 93 && BOOST_PP_ITERATION_FINISH_4 >= 93\n#        define BOOST_PP_ITERATION_4 93\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 94 && BOOST_PP_ITERATION_FINISH_4 >= 94\n#        define BOOST_PP_ITERATION_4 94\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 95 && BOOST_PP_ITERATION_FINISH_4 >= 95\n#        define BOOST_PP_ITERATION_4 95\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 96 && BOOST_PP_ITERATION_FINISH_4 >= 96\n#        define BOOST_PP_ITERATION_4 96\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 97 && BOOST_PP_ITERATION_FINISH_4 >= 97\n#        define BOOST_PP_ITERATION_4 97\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 98 && BOOST_PP_ITERATION_FINISH_4 >= 98\n#        define BOOST_PP_ITERATION_4 98\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 99 && BOOST_PP_ITERATION_FINISH_4 >= 99\n#        define BOOST_PP_ITERATION_4 99\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 100 && BOOST_PP_ITERATION_FINISH_4 >= 100\n#        define BOOST_PP_ITERATION_4 100\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 101 && BOOST_PP_ITERATION_FINISH_4 >= 101\n#        define BOOST_PP_ITERATION_4 101\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 102 && BOOST_PP_ITERATION_FINISH_4 >= 102\n#        define BOOST_PP_ITERATION_4 102\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 103 && BOOST_PP_ITERATION_FINISH_4 >= 103\n#        define BOOST_PP_ITERATION_4 103\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 104 && BOOST_PP_ITERATION_FINISH_4 >= 104\n#        define BOOST_PP_ITERATION_4 104\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 105 && BOOST_PP_ITERATION_FINISH_4 >= 105\n#        define BOOST_PP_ITERATION_4 105\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 106 && BOOST_PP_ITERATION_FINISH_4 >= 106\n#        define BOOST_PP_ITERATION_4 106\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 107 && BOOST_PP_ITERATION_FINISH_4 >= 107\n#        define BOOST_PP_ITERATION_4 107\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 108 && BOOST_PP_ITERATION_FINISH_4 >= 108\n#        define BOOST_PP_ITERATION_4 108\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 109 && BOOST_PP_ITERATION_FINISH_4 >= 109\n#        define BOOST_PP_ITERATION_4 109\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 110 && BOOST_PP_ITERATION_FINISH_4 >= 110\n#        define BOOST_PP_ITERATION_4 110\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 111 && BOOST_PP_ITERATION_FINISH_4 >= 111\n#        define BOOST_PP_ITERATION_4 111\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 112 && BOOST_PP_ITERATION_FINISH_4 >= 112\n#        define BOOST_PP_ITERATION_4 112\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 113 && BOOST_PP_ITERATION_FINISH_4 >= 113\n#        define BOOST_PP_ITERATION_4 113\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 114 && BOOST_PP_ITERATION_FINISH_4 >= 114\n#        define BOOST_PP_ITERATION_4 114\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 115 && BOOST_PP_ITERATION_FINISH_4 >= 115\n#        define BOOST_PP_ITERATION_4 115\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 116 && BOOST_PP_ITERATION_FINISH_4 >= 116\n#        define BOOST_PP_ITERATION_4 116\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 117 && BOOST_PP_ITERATION_FINISH_4 >= 117\n#        define BOOST_PP_ITERATION_4 117\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 118 && BOOST_PP_ITERATION_FINISH_4 >= 118\n#        define BOOST_PP_ITERATION_4 118\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 119 && BOOST_PP_ITERATION_FINISH_4 >= 119\n#        define BOOST_PP_ITERATION_4 119\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 120 && BOOST_PP_ITERATION_FINISH_4 >= 120\n#        define BOOST_PP_ITERATION_4 120\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 121 && BOOST_PP_ITERATION_FINISH_4 >= 121\n#        define BOOST_PP_ITERATION_4 121\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 122 && BOOST_PP_ITERATION_FINISH_4 >= 122\n#        define BOOST_PP_ITERATION_4 122\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 123 && BOOST_PP_ITERATION_FINISH_4 >= 123\n#        define BOOST_PP_ITERATION_4 123\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 124 && BOOST_PP_ITERATION_FINISH_4 >= 124\n#        define BOOST_PP_ITERATION_4 124\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 125 && BOOST_PP_ITERATION_FINISH_4 >= 125\n#        define BOOST_PP_ITERATION_4 125\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 126 && BOOST_PP_ITERATION_FINISH_4 >= 126\n#        define BOOST_PP_ITERATION_4 126\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 127 && BOOST_PP_ITERATION_FINISH_4 >= 127\n#        define BOOST_PP_ITERATION_4 127\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 128 && BOOST_PP_ITERATION_FINISH_4 >= 128\n#        define BOOST_PP_ITERATION_4 128\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 129 && BOOST_PP_ITERATION_FINISH_4 >= 129\n#        define BOOST_PP_ITERATION_4 129\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 130 && BOOST_PP_ITERATION_FINISH_4 >= 130\n#        define BOOST_PP_ITERATION_4 130\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 131 && BOOST_PP_ITERATION_FINISH_4 >= 131\n#        define BOOST_PP_ITERATION_4 131\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 132 && BOOST_PP_ITERATION_FINISH_4 >= 132\n#        define BOOST_PP_ITERATION_4 132\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 133 && BOOST_PP_ITERATION_FINISH_4 >= 133\n#        define BOOST_PP_ITERATION_4 133\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 134 && BOOST_PP_ITERATION_FINISH_4 >= 134\n#        define BOOST_PP_ITERATION_4 134\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 135 && BOOST_PP_ITERATION_FINISH_4 >= 135\n#        define BOOST_PP_ITERATION_4 135\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 136 && BOOST_PP_ITERATION_FINISH_4 >= 136\n#        define BOOST_PP_ITERATION_4 136\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 137 && BOOST_PP_ITERATION_FINISH_4 >= 137\n#        define BOOST_PP_ITERATION_4 137\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 138 && BOOST_PP_ITERATION_FINISH_4 >= 138\n#        define BOOST_PP_ITERATION_4 138\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 139 && BOOST_PP_ITERATION_FINISH_4 >= 139\n#        define BOOST_PP_ITERATION_4 139\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 140 && BOOST_PP_ITERATION_FINISH_4 >= 140\n#        define BOOST_PP_ITERATION_4 140\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 141 && BOOST_PP_ITERATION_FINISH_4 >= 141\n#        define BOOST_PP_ITERATION_4 141\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 142 && BOOST_PP_ITERATION_FINISH_4 >= 142\n#        define BOOST_PP_ITERATION_4 142\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 143 && BOOST_PP_ITERATION_FINISH_4 >= 143\n#        define BOOST_PP_ITERATION_4 143\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 144 && BOOST_PP_ITERATION_FINISH_4 >= 144\n#        define BOOST_PP_ITERATION_4 144\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 145 && BOOST_PP_ITERATION_FINISH_4 >= 145\n#        define BOOST_PP_ITERATION_4 145\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 146 && BOOST_PP_ITERATION_FINISH_4 >= 146\n#        define BOOST_PP_ITERATION_4 146\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 147 && BOOST_PP_ITERATION_FINISH_4 >= 147\n#        define BOOST_PP_ITERATION_4 147\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 148 && BOOST_PP_ITERATION_FINISH_4 >= 148\n#        define BOOST_PP_ITERATION_4 148\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 149 && BOOST_PP_ITERATION_FINISH_4 >= 149\n#        define BOOST_PP_ITERATION_4 149\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 150 && BOOST_PP_ITERATION_FINISH_4 >= 150\n#        define BOOST_PP_ITERATION_4 150\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 151 && BOOST_PP_ITERATION_FINISH_4 >= 151\n#        define BOOST_PP_ITERATION_4 151\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 152 && BOOST_PP_ITERATION_FINISH_4 >= 152\n#        define BOOST_PP_ITERATION_4 152\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 153 && BOOST_PP_ITERATION_FINISH_4 >= 153\n#        define BOOST_PP_ITERATION_4 153\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 154 && BOOST_PP_ITERATION_FINISH_4 >= 154\n#        define BOOST_PP_ITERATION_4 154\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 155 && BOOST_PP_ITERATION_FINISH_4 >= 155\n#        define BOOST_PP_ITERATION_4 155\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 156 && BOOST_PP_ITERATION_FINISH_4 >= 156\n#        define BOOST_PP_ITERATION_4 156\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 157 && BOOST_PP_ITERATION_FINISH_4 >= 157\n#        define BOOST_PP_ITERATION_4 157\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 158 && BOOST_PP_ITERATION_FINISH_4 >= 158\n#        define BOOST_PP_ITERATION_4 158\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 159 && BOOST_PP_ITERATION_FINISH_4 >= 159\n#        define BOOST_PP_ITERATION_4 159\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 160 && BOOST_PP_ITERATION_FINISH_4 >= 160\n#        define BOOST_PP_ITERATION_4 160\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 161 && BOOST_PP_ITERATION_FINISH_4 >= 161\n#        define BOOST_PP_ITERATION_4 161\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 162 && BOOST_PP_ITERATION_FINISH_4 >= 162\n#        define BOOST_PP_ITERATION_4 162\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 163 && BOOST_PP_ITERATION_FINISH_4 >= 163\n#        define BOOST_PP_ITERATION_4 163\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 164 && BOOST_PP_ITERATION_FINISH_4 >= 164\n#        define BOOST_PP_ITERATION_4 164\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 165 && BOOST_PP_ITERATION_FINISH_4 >= 165\n#        define BOOST_PP_ITERATION_4 165\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 166 && BOOST_PP_ITERATION_FINISH_4 >= 166\n#        define BOOST_PP_ITERATION_4 166\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 167 && BOOST_PP_ITERATION_FINISH_4 >= 167\n#        define BOOST_PP_ITERATION_4 167\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 168 && BOOST_PP_ITERATION_FINISH_4 >= 168\n#        define BOOST_PP_ITERATION_4 168\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 169 && BOOST_PP_ITERATION_FINISH_4 >= 169\n#        define BOOST_PP_ITERATION_4 169\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 170 && BOOST_PP_ITERATION_FINISH_4 >= 170\n#        define BOOST_PP_ITERATION_4 170\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 171 && BOOST_PP_ITERATION_FINISH_4 >= 171\n#        define BOOST_PP_ITERATION_4 171\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 172 && BOOST_PP_ITERATION_FINISH_4 >= 172\n#        define BOOST_PP_ITERATION_4 172\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 173 && BOOST_PP_ITERATION_FINISH_4 >= 173\n#        define BOOST_PP_ITERATION_4 173\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 174 && BOOST_PP_ITERATION_FINISH_4 >= 174\n#        define BOOST_PP_ITERATION_4 174\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 175 && BOOST_PP_ITERATION_FINISH_4 >= 175\n#        define BOOST_PP_ITERATION_4 175\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 176 && BOOST_PP_ITERATION_FINISH_4 >= 176\n#        define BOOST_PP_ITERATION_4 176\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 177 && BOOST_PP_ITERATION_FINISH_4 >= 177\n#        define BOOST_PP_ITERATION_4 177\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 178 && BOOST_PP_ITERATION_FINISH_4 >= 178\n#        define BOOST_PP_ITERATION_4 178\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 179 && BOOST_PP_ITERATION_FINISH_4 >= 179\n#        define BOOST_PP_ITERATION_4 179\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 180 && BOOST_PP_ITERATION_FINISH_4 >= 180\n#        define BOOST_PP_ITERATION_4 180\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 181 && BOOST_PP_ITERATION_FINISH_4 >= 181\n#        define BOOST_PP_ITERATION_4 181\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 182 && BOOST_PP_ITERATION_FINISH_4 >= 182\n#        define BOOST_PP_ITERATION_4 182\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 183 && BOOST_PP_ITERATION_FINISH_4 >= 183\n#        define BOOST_PP_ITERATION_4 183\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 184 && BOOST_PP_ITERATION_FINISH_4 >= 184\n#        define BOOST_PP_ITERATION_4 184\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 185 && BOOST_PP_ITERATION_FINISH_4 >= 185\n#        define BOOST_PP_ITERATION_4 185\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 186 && BOOST_PP_ITERATION_FINISH_4 >= 186\n#        define BOOST_PP_ITERATION_4 186\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 187 && BOOST_PP_ITERATION_FINISH_4 >= 187\n#        define BOOST_PP_ITERATION_4 187\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 188 && BOOST_PP_ITERATION_FINISH_4 >= 188\n#        define BOOST_PP_ITERATION_4 188\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 189 && BOOST_PP_ITERATION_FINISH_4 >= 189\n#        define BOOST_PP_ITERATION_4 189\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 190 && BOOST_PP_ITERATION_FINISH_4 >= 190\n#        define BOOST_PP_ITERATION_4 190\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 191 && BOOST_PP_ITERATION_FINISH_4 >= 191\n#        define BOOST_PP_ITERATION_4 191\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 192 && BOOST_PP_ITERATION_FINISH_4 >= 192\n#        define BOOST_PP_ITERATION_4 192\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 193 && BOOST_PP_ITERATION_FINISH_4 >= 193\n#        define BOOST_PP_ITERATION_4 193\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 194 && BOOST_PP_ITERATION_FINISH_4 >= 194\n#        define BOOST_PP_ITERATION_4 194\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 195 && BOOST_PP_ITERATION_FINISH_4 >= 195\n#        define BOOST_PP_ITERATION_4 195\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 196 && BOOST_PP_ITERATION_FINISH_4 >= 196\n#        define BOOST_PP_ITERATION_4 196\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 197 && BOOST_PP_ITERATION_FINISH_4 >= 197\n#        define BOOST_PP_ITERATION_4 197\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 198 && BOOST_PP_ITERATION_FINISH_4 >= 198\n#        define BOOST_PP_ITERATION_4 198\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 199 && BOOST_PP_ITERATION_FINISH_4 >= 199\n#        define BOOST_PP_ITERATION_4 199\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 200 && BOOST_PP_ITERATION_FINISH_4 >= 200\n#        define BOOST_PP_ITERATION_4 200\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 201 && BOOST_PP_ITERATION_FINISH_4 >= 201\n#        define BOOST_PP_ITERATION_4 201\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 202 && BOOST_PP_ITERATION_FINISH_4 >= 202\n#        define BOOST_PP_ITERATION_4 202\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 203 && BOOST_PP_ITERATION_FINISH_4 >= 203\n#        define BOOST_PP_ITERATION_4 203\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 204 && BOOST_PP_ITERATION_FINISH_4 >= 204\n#        define BOOST_PP_ITERATION_4 204\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 205 && BOOST_PP_ITERATION_FINISH_4 >= 205\n#        define BOOST_PP_ITERATION_4 205\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 206 && BOOST_PP_ITERATION_FINISH_4 >= 206\n#        define BOOST_PP_ITERATION_4 206\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 207 && BOOST_PP_ITERATION_FINISH_4 >= 207\n#        define BOOST_PP_ITERATION_4 207\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 208 && BOOST_PP_ITERATION_FINISH_4 >= 208\n#        define BOOST_PP_ITERATION_4 208\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 209 && BOOST_PP_ITERATION_FINISH_4 >= 209\n#        define BOOST_PP_ITERATION_4 209\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 210 && BOOST_PP_ITERATION_FINISH_4 >= 210\n#        define BOOST_PP_ITERATION_4 210\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 211 && BOOST_PP_ITERATION_FINISH_4 >= 211\n#        define BOOST_PP_ITERATION_4 211\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 212 && BOOST_PP_ITERATION_FINISH_4 >= 212\n#        define BOOST_PP_ITERATION_4 212\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 213 && BOOST_PP_ITERATION_FINISH_4 >= 213\n#        define BOOST_PP_ITERATION_4 213\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 214 && BOOST_PP_ITERATION_FINISH_4 >= 214\n#        define BOOST_PP_ITERATION_4 214\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 215 && BOOST_PP_ITERATION_FINISH_4 >= 215\n#        define BOOST_PP_ITERATION_4 215\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 216 && BOOST_PP_ITERATION_FINISH_4 >= 216\n#        define BOOST_PP_ITERATION_4 216\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 217 && BOOST_PP_ITERATION_FINISH_4 >= 217\n#        define BOOST_PP_ITERATION_4 217\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 218 && BOOST_PP_ITERATION_FINISH_4 >= 218\n#        define BOOST_PP_ITERATION_4 218\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 219 && BOOST_PP_ITERATION_FINISH_4 >= 219\n#        define BOOST_PP_ITERATION_4 219\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 220 && BOOST_PP_ITERATION_FINISH_4 >= 220\n#        define BOOST_PP_ITERATION_4 220\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 221 && BOOST_PP_ITERATION_FINISH_4 >= 221\n#        define BOOST_PP_ITERATION_4 221\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 222 && BOOST_PP_ITERATION_FINISH_4 >= 222\n#        define BOOST_PP_ITERATION_4 222\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 223 && BOOST_PP_ITERATION_FINISH_4 >= 223\n#        define BOOST_PP_ITERATION_4 223\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 224 && BOOST_PP_ITERATION_FINISH_4 >= 224\n#        define BOOST_PP_ITERATION_4 224\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 225 && BOOST_PP_ITERATION_FINISH_4 >= 225\n#        define BOOST_PP_ITERATION_4 225\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 226 && BOOST_PP_ITERATION_FINISH_4 >= 226\n#        define BOOST_PP_ITERATION_4 226\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 227 && BOOST_PP_ITERATION_FINISH_4 >= 227\n#        define BOOST_PP_ITERATION_4 227\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 228 && BOOST_PP_ITERATION_FINISH_4 >= 228\n#        define BOOST_PP_ITERATION_4 228\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 229 && BOOST_PP_ITERATION_FINISH_4 >= 229\n#        define BOOST_PP_ITERATION_4 229\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 230 && BOOST_PP_ITERATION_FINISH_4 >= 230\n#        define BOOST_PP_ITERATION_4 230\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 231 && BOOST_PP_ITERATION_FINISH_4 >= 231\n#        define BOOST_PP_ITERATION_4 231\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 232 && BOOST_PP_ITERATION_FINISH_4 >= 232\n#        define BOOST_PP_ITERATION_4 232\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 233 && BOOST_PP_ITERATION_FINISH_4 >= 233\n#        define BOOST_PP_ITERATION_4 233\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 234 && BOOST_PP_ITERATION_FINISH_4 >= 234\n#        define BOOST_PP_ITERATION_4 234\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 235 && BOOST_PP_ITERATION_FINISH_4 >= 235\n#        define BOOST_PP_ITERATION_4 235\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 236 && BOOST_PP_ITERATION_FINISH_4 >= 236\n#        define BOOST_PP_ITERATION_4 236\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 237 && BOOST_PP_ITERATION_FINISH_4 >= 237\n#        define BOOST_PP_ITERATION_4 237\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 238 && BOOST_PP_ITERATION_FINISH_4 >= 238\n#        define BOOST_PP_ITERATION_4 238\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 239 && BOOST_PP_ITERATION_FINISH_4 >= 239\n#        define BOOST_PP_ITERATION_4 239\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 240 && BOOST_PP_ITERATION_FINISH_4 >= 240\n#        define BOOST_PP_ITERATION_4 240\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 241 && BOOST_PP_ITERATION_FINISH_4 >= 241\n#        define BOOST_PP_ITERATION_4 241\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 242 && BOOST_PP_ITERATION_FINISH_4 >= 242\n#        define BOOST_PP_ITERATION_4 242\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 243 && BOOST_PP_ITERATION_FINISH_4 >= 243\n#        define BOOST_PP_ITERATION_4 243\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 244 && BOOST_PP_ITERATION_FINISH_4 >= 244\n#        define BOOST_PP_ITERATION_4 244\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 245 && BOOST_PP_ITERATION_FINISH_4 >= 245\n#        define BOOST_PP_ITERATION_4 245\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 246 && BOOST_PP_ITERATION_FINISH_4 >= 246\n#        define BOOST_PP_ITERATION_4 246\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 247 && BOOST_PP_ITERATION_FINISH_4 >= 247\n#        define BOOST_PP_ITERATION_4 247\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 248 && BOOST_PP_ITERATION_FINISH_4 >= 248\n#        define BOOST_PP_ITERATION_4 248\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 249 && BOOST_PP_ITERATION_FINISH_4 >= 249\n#        define BOOST_PP_ITERATION_4 249\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 250 && BOOST_PP_ITERATION_FINISH_4 >= 250\n#        define BOOST_PP_ITERATION_4 250\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 251 && BOOST_PP_ITERATION_FINISH_4 >= 251\n#        define BOOST_PP_ITERATION_4 251\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 252 && BOOST_PP_ITERATION_FINISH_4 >= 252\n#        define BOOST_PP_ITERATION_4 252\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 253 && BOOST_PP_ITERATION_FINISH_4 >= 253\n#        define BOOST_PP_ITERATION_4 253\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 254 && BOOST_PP_ITERATION_FINISH_4 >= 254\n#        define BOOST_PP_ITERATION_4 254\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 255 && BOOST_PP_ITERATION_FINISH_4 >= 255\n#        define BOOST_PP_ITERATION_4 255\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n#    if BOOST_PP_ITERATION_START_4 <= 256 && BOOST_PP_ITERATION_FINISH_4 >= 256\n#        define BOOST_PP_ITERATION_4 256\n#        include BOOST_PP_FILENAME_4\n#        undef BOOST_PP_ITERATION_4\n#    endif\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 3\n#\n# undef BOOST_PP_ITERATION_START_4\n# undef BOOST_PP_ITERATION_FINISH_4\n# undef BOOST_PP_FILENAME_4\n#\n# undef BOOST_PP_ITERATION_FLAGS_4\n# undef BOOST_PP_ITERATION_PARAMS_4\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/forward5.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if defined(BOOST_PP_ITERATION_LIMITS)\n#    if !defined(BOOST_PP_FILENAME_5)\n#        error BOOST_PP_ERROR:  depth #5 filename is not defined\n#    endif\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/lower5.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/upper5.hpp>\n#    define BOOST_PP_ITERATION_FLAGS_5() 0\n#    undef BOOST_PP_ITERATION_LIMITS\n# elif defined(BOOST_PP_ITERATION_PARAMS_5)\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_5)\n#    include <boost/preprocessor/iteration/detail/bounds/lower5.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_5)\n#    include <boost/preprocessor/iteration/detail/bounds/upper5.hpp>\n#    define BOOST_PP_FILENAME_5 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_5)\n#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_5) >= 4\n#        define BOOST_PP_ITERATION_FLAGS_5() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_5)\n#    else\n#        define BOOST_PP_ITERATION_FLAGS_5() 0\n#    endif\n# else\n#    error BOOST_PP_ERROR:  depth #5 iteration boundaries or filename not defined\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 5\n#\n# if (BOOST_PP_ITERATION_START_5) > (BOOST_PP_ITERATION_FINISH_5)\n#    include <boost/preprocessor/iteration/detail/iter/reverse5.hpp>\n# else\n#    if BOOST_PP_ITERATION_START_5 <= 0 && BOOST_PP_ITERATION_FINISH_5 >= 0\n#        define BOOST_PP_ITERATION_5 0\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 1 && BOOST_PP_ITERATION_FINISH_5 >= 1\n#        define BOOST_PP_ITERATION_5 1\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 2 && BOOST_PP_ITERATION_FINISH_5 >= 2\n#        define BOOST_PP_ITERATION_5 2\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 3 && BOOST_PP_ITERATION_FINISH_5 >= 3\n#        define BOOST_PP_ITERATION_5 3\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 4 && BOOST_PP_ITERATION_FINISH_5 >= 4\n#        define BOOST_PP_ITERATION_5 4\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 5 && BOOST_PP_ITERATION_FINISH_5 >= 5\n#        define BOOST_PP_ITERATION_5 5\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 6 && BOOST_PP_ITERATION_FINISH_5 >= 6\n#        define BOOST_PP_ITERATION_5 6\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 7 && BOOST_PP_ITERATION_FINISH_5 >= 7\n#        define BOOST_PP_ITERATION_5 7\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 8 && BOOST_PP_ITERATION_FINISH_5 >= 8\n#        define BOOST_PP_ITERATION_5 8\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 9 && BOOST_PP_ITERATION_FINISH_5 >= 9\n#        define BOOST_PP_ITERATION_5 9\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 10 && BOOST_PP_ITERATION_FINISH_5 >= 10\n#        define BOOST_PP_ITERATION_5 10\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 11 && BOOST_PP_ITERATION_FINISH_5 >= 11\n#        define BOOST_PP_ITERATION_5 11\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 12 && BOOST_PP_ITERATION_FINISH_5 >= 12\n#        define BOOST_PP_ITERATION_5 12\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 13 && BOOST_PP_ITERATION_FINISH_5 >= 13\n#        define BOOST_PP_ITERATION_5 13\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 14 && BOOST_PP_ITERATION_FINISH_5 >= 14\n#        define BOOST_PP_ITERATION_5 14\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 15 && BOOST_PP_ITERATION_FINISH_5 >= 15\n#        define BOOST_PP_ITERATION_5 15\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 16 && BOOST_PP_ITERATION_FINISH_5 >= 16\n#        define BOOST_PP_ITERATION_5 16\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 17 && BOOST_PP_ITERATION_FINISH_5 >= 17\n#        define BOOST_PP_ITERATION_5 17\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 18 && BOOST_PP_ITERATION_FINISH_5 >= 18\n#        define BOOST_PP_ITERATION_5 18\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 19 && BOOST_PP_ITERATION_FINISH_5 >= 19\n#        define BOOST_PP_ITERATION_5 19\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 20 && BOOST_PP_ITERATION_FINISH_5 >= 20\n#        define BOOST_PP_ITERATION_5 20\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 21 && BOOST_PP_ITERATION_FINISH_5 >= 21\n#        define BOOST_PP_ITERATION_5 21\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 22 && BOOST_PP_ITERATION_FINISH_5 >= 22\n#        define BOOST_PP_ITERATION_5 22\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 23 && BOOST_PP_ITERATION_FINISH_5 >= 23\n#        define BOOST_PP_ITERATION_5 23\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 24 && BOOST_PP_ITERATION_FINISH_5 >= 24\n#        define BOOST_PP_ITERATION_5 24\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 25 && BOOST_PP_ITERATION_FINISH_5 >= 25\n#        define BOOST_PP_ITERATION_5 25\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 26 && BOOST_PP_ITERATION_FINISH_5 >= 26\n#        define BOOST_PP_ITERATION_5 26\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 27 && BOOST_PP_ITERATION_FINISH_5 >= 27\n#        define BOOST_PP_ITERATION_5 27\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 28 && BOOST_PP_ITERATION_FINISH_5 >= 28\n#        define BOOST_PP_ITERATION_5 28\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 29 && BOOST_PP_ITERATION_FINISH_5 >= 29\n#        define BOOST_PP_ITERATION_5 29\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 30 && BOOST_PP_ITERATION_FINISH_5 >= 30\n#        define BOOST_PP_ITERATION_5 30\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 31 && BOOST_PP_ITERATION_FINISH_5 >= 31\n#        define BOOST_PP_ITERATION_5 31\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 32 && BOOST_PP_ITERATION_FINISH_5 >= 32\n#        define BOOST_PP_ITERATION_5 32\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 33 && BOOST_PP_ITERATION_FINISH_5 >= 33\n#        define BOOST_PP_ITERATION_5 33\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 34 && BOOST_PP_ITERATION_FINISH_5 >= 34\n#        define BOOST_PP_ITERATION_5 34\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 35 && BOOST_PP_ITERATION_FINISH_5 >= 35\n#        define BOOST_PP_ITERATION_5 35\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 36 && BOOST_PP_ITERATION_FINISH_5 >= 36\n#        define BOOST_PP_ITERATION_5 36\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 37 && BOOST_PP_ITERATION_FINISH_5 >= 37\n#        define BOOST_PP_ITERATION_5 37\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 38 && BOOST_PP_ITERATION_FINISH_5 >= 38\n#        define BOOST_PP_ITERATION_5 38\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 39 && BOOST_PP_ITERATION_FINISH_5 >= 39\n#        define BOOST_PP_ITERATION_5 39\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 40 && BOOST_PP_ITERATION_FINISH_5 >= 40\n#        define BOOST_PP_ITERATION_5 40\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 41 && BOOST_PP_ITERATION_FINISH_5 >= 41\n#        define BOOST_PP_ITERATION_5 41\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 42 && BOOST_PP_ITERATION_FINISH_5 >= 42\n#        define BOOST_PP_ITERATION_5 42\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 43 && BOOST_PP_ITERATION_FINISH_5 >= 43\n#        define BOOST_PP_ITERATION_5 43\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 44 && BOOST_PP_ITERATION_FINISH_5 >= 44\n#        define BOOST_PP_ITERATION_5 44\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 45 && BOOST_PP_ITERATION_FINISH_5 >= 45\n#        define BOOST_PP_ITERATION_5 45\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 46 && BOOST_PP_ITERATION_FINISH_5 >= 46\n#        define BOOST_PP_ITERATION_5 46\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 47 && BOOST_PP_ITERATION_FINISH_5 >= 47\n#        define BOOST_PP_ITERATION_5 47\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 48 && BOOST_PP_ITERATION_FINISH_5 >= 48\n#        define BOOST_PP_ITERATION_5 48\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 49 && BOOST_PP_ITERATION_FINISH_5 >= 49\n#        define BOOST_PP_ITERATION_5 49\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 50 && BOOST_PP_ITERATION_FINISH_5 >= 50\n#        define BOOST_PP_ITERATION_5 50\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 51 && BOOST_PP_ITERATION_FINISH_5 >= 51\n#        define BOOST_PP_ITERATION_5 51\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 52 && BOOST_PP_ITERATION_FINISH_5 >= 52\n#        define BOOST_PP_ITERATION_5 52\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 53 && BOOST_PP_ITERATION_FINISH_5 >= 53\n#        define BOOST_PP_ITERATION_5 53\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 54 && BOOST_PP_ITERATION_FINISH_5 >= 54\n#        define BOOST_PP_ITERATION_5 54\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 55 && BOOST_PP_ITERATION_FINISH_5 >= 55\n#        define BOOST_PP_ITERATION_5 55\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 56 && BOOST_PP_ITERATION_FINISH_5 >= 56\n#        define BOOST_PP_ITERATION_5 56\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 57 && BOOST_PP_ITERATION_FINISH_5 >= 57\n#        define BOOST_PP_ITERATION_5 57\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 58 && BOOST_PP_ITERATION_FINISH_5 >= 58\n#        define BOOST_PP_ITERATION_5 58\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 59 && BOOST_PP_ITERATION_FINISH_5 >= 59\n#        define BOOST_PP_ITERATION_5 59\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 60 && BOOST_PP_ITERATION_FINISH_5 >= 60\n#        define BOOST_PP_ITERATION_5 60\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 61 && BOOST_PP_ITERATION_FINISH_5 >= 61\n#        define BOOST_PP_ITERATION_5 61\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 62 && BOOST_PP_ITERATION_FINISH_5 >= 62\n#        define BOOST_PP_ITERATION_5 62\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 63 && BOOST_PP_ITERATION_FINISH_5 >= 63\n#        define BOOST_PP_ITERATION_5 63\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 64 && BOOST_PP_ITERATION_FINISH_5 >= 64\n#        define BOOST_PP_ITERATION_5 64\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 65 && BOOST_PP_ITERATION_FINISH_5 >= 65\n#        define BOOST_PP_ITERATION_5 65\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 66 && BOOST_PP_ITERATION_FINISH_5 >= 66\n#        define BOOST_PP_ITERATION_5 66\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 67 && BOOST_PP_ITERATION_FINISH_5 >= 67\n#        define BOOST_PP_ITERATION_5 67\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 68 && BOOST_PP_ITERATION_FINISH_5 >= 68\n#        define BOOST_PP_ITERATION_5 68\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 69 && BOOST_PP_ITERATION_FINISH_5 >= 69\n#        define BOOST_PP_ITERATION_5 69\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 70 && BOOST_PP_ITERATION_FINISH_5 >= 70\n#        define BOOST_PP_ITERATION_5 70\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 71 && BOOST_PP_ITERATION_FINISH_5 >= 71\n#        define BOOST_PP_ITERATION_5 71\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 72 && BOOST_PP_ITERATION_FINISH_5 >= 72\n#        define BOOST_PP_ITERATION_5 72\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 73 && BOOST_PP_ITERATION_FINISH_5 >= 73\n#        define BOOST_PP_ITERATION_5 73\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 74 && BOOST_PP_ITERATION_FINISH_5 >= 74\n#        define BOOST_PP_ITERATION_5 74\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 75 && BOOST_PP_ITERATION_FINISH_5 >= 75\n#        define BOOST_PP_ITERATION_5 75\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 76 && BOOST_PP_ITERATION_FINISH_5 >= 76\n#        define BOOST_PP_ITERATION_5 76\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 77 && BOOST_PP_ITERATION_FINISH_5 >= 77\n#        define BOOST_PP_ITERATION_5 77\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 78 && BOOST_PP_ITERATION_FINISH_5 >= 78\n#        define BOOST_PP_ITERATION_5 78\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 79 && BOOST_PP_ITERATION_FINISH_5 >= 79\n#        define BOOST_PP_ITERATION_5 79\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 80 && BOOST_PP_ITERATION_FINISH_5 >= 80\n#        define BOOST_PP_ITERATION_5 80\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 81 && BOOST_PP_ITERATION_FINISH_5 >= 81\n#        define BOOST_PP_ITERATION_5 81\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 82 && BOOST_PP_ITERATION_FINISH_5 >= 82\n#        define BOOST_PP_ITERATION_5 82\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 83 && BOOST_PP_ITERATION_FINISH_5 >= 83\n#        define BOOST_PP_ITERATION_5 83\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 84 && BOOST_PP_ITERATION_FINISH_5 >= 84\n#        define BOOST_PP_ITERATION_5 84\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 85 && BOOST_PP_ITERATION_FINISH_5 >= 85\n#        define BOOST_PP_ITERATION_5 85\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 86 && BOOST_PP_ITERATION_FINISH_5 >= 86\n#        define BOOST_PP_ITERATION_5 86\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 87 && BOOST_PP_ITERATION_FINISH_5 >= 87\n#        define BOOST_PP_ITERATION_5 87\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 88 && BOOST_PP_ITERATION_FINISH_5 >= 88\n#        define BOOST_PP_ITERATION_5 88\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 89 && BOOST_PP_ITERATION_FINISH_5 >= 89\n#        define BOOST_PP_ITERATION_5 89\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 90 && BOOST_PP_ITERATION_FINISH_5 >= 90\n#        define BOOST_PP_ITERATION_5 90\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 91 && BOOST_PP_ITERATION_FINISH_5 >= 91\n#        define BOOST_PP_ITERATION_5 91\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 92 && BOOST_PP_ITERATION_FINISH_5 >= 92\n#        define BOOST_PP_ITERATION_5 92\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 93 && BOOST_PP_ITERATION_FINISH_5 >= 93\n#        define BOOST_PP_ITERATION_5 93\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 94 && BOOST_PP_ITERATION_FINISH_5 >= 94\n#        define BOOST_PP_ITERATION_5 94\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 95 && BOOST_PP_ITERATION_FINISH_5 >= 95\n#        define BOOST_PP_ITERATION_5 95\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 96 && BOOST_PP_ITERATION_FINISH_5 >= 96\n#        define BOOST_PP_ITERATION_5 96\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 97 && BOOST_PP_ITERATION_FINISH_5 >= 97\n#        define BOOST_PP_ITERATION_5 97\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 98 && BOOST_PP_ITERATION_FINISH_5 >= 98\n#        define BOOST_PP_ITERATION_5 98\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 99 && BOOST_PP_ITERATION_FINISH_5 >= 99\n#        define BOOST_PP_ITERATION_5 99\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 100 && BOOST_PP_ITERATION_FINISH_5 >= 100\n#        define BOOST_PP_ITERATION_5 100\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 101 && BOOST_PP_ITERATION_FINISH_5 >= 101\n#        define BOOST_PP_ITERATION_5 101\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 102 && BOOST_PP_ITERATION_FINISH_5 >= 102\n#        define BOOST_PP_ITERATION_5 102\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 103 && BOOST_PP_ITERATION_FINISH_5 >= 103\n#        define BOOST_PP_ITERATION_5 103\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 104 && BOOST_PP_ITERATION_FINISH_5 >= 104\n#        define BOOST_PP_ITERATION_5 104\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 105 && BOOST_PP_ITERATION_FINISH_5 >= 105\n#        define BOOST_PP_ITERATION_5 105\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 106 && BOOST_PP_ITERATION_FINISH_5 >= 106\n#        define BOOST_PP_ITERATION_5 106\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 107 && BOOST_PP_ITERATION_FINISH_5 >= 107\n#        define BOOST_PP_ITERATION_5 107\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 108 && BOOST_PP_ITERATION_FINISH_5 >= 108\n#        define BOOST_PP_ITERATION_5 108\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 109 && BOOST_PP_ITERATION_FINISH_5 >= 109\n#        define BOOST_PP_ITERATION_5 109\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 110 && BOOST_PP_ITERATION_FINISH_5 >= 110\n#        define BOOST_PP_ITERATION_5 110\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 111 && BOOST_PP_ITERATION_FINISH_5 >= 111\n#        define BOOST_PP_ITERATION_5 111\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 112 && BOOST_PP_ITERATION_FINISH_5 >= 112\n#        define BOOST_PP_ITERATION_5 112\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 113 && BOOST_PP_ITERATION_FINISH_5 >= 113\n#        define BOOST_PP_ITERATION_5 113\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 114 && BOOST_PP_ITERATION_FINISH_5 >= 114\n#        define BOOST_PP_ITERATION_5 114\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 115 && BOOST_PP_ITERATION_FINISH_5 >= 115\n#        define BOOST_PP_ITERATION_5 115\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 116 && BOOST_PP_ITERATION_FINISH_5 >= 116\n#        define BOOST_PP_ITERATION_5 116\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 117 && BOOST_PP_ITERATION_FINISH_5 >= 117\n#        define BOOST_PP_ITERATION_5 117\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 118 && BOOST_PP_ITERATION_FINISH_5 >= 118\n#        define BOOST_PP_ITERATION_5 118\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 119 && BOOST_PP_ITERATION_FINISH_5 >= 119\n#        define BOOST_PP_ITERATION_5 119\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 120 && BOOST_PP_ITERATION_FINISH_5 >= 120\n#        define BOOST_PP_ITERATION_5 120\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 121 && BOOST_PP_ITERATION_FINISH_5 >= 121\n#        define BOOST_PP_ITERATION_5 121\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 122 && BOOST_PP_ITERATION_FINISH_5 >= 122\n#        define BOOST_PP_ITERATION_5 122\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 123 && BOOST_PP_ITERATION_FINISH_5 >= 123\n#        define BOOST_PP_ITERATION_5 123\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 124 && BOOST_PP_ITERATION_FINISH_5 >= 124\n#        define BOOST_PP_ITERATION_5 124\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 125 && BOOST_PP_ITERATION_FINISH_5 >= 125\n#        define BOOST_PP_ITERATION_5 125\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 126 && BOOST_PP_ITERATION_FINISH_5 >= 126\n#        define BOOST_PP_ITERATION_5 126\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 127 && BOOST_PP_ITERATION_FINISH_5 >= 127\n#        define BOOST_PP_ITERATION_5 127\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 128 && BOOST_PP_ITERATION_FINISH_5 >= 128\n#        define BOOST_PP_ITERATION_5 128\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 129 && BOOST_PP_ITERATION_FINISH_5 >= 129\n#        define BOOST_PP_ITERATION_5 129\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 130 && BOOST_PP_ITERATION_FINISH_5 >= 130\n#        define BOOST_PP_ITERATION_5 130\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 131 && BOOST_PP_ITERATION_FINISH_5 >= 131\n#        define BOOST_PP_ITERATION_5 131\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 132 && BOOST_PP_ITERATION_FINISH_5 >= 132\n#        define BOOST_PP_ITERATION_5 132\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 133 && BOOST_PP_ITERATION_FINISH_5 >= 133\n#        define BOOST_PP_ITERATION_5 133\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 134 && BOOST_PP_ITERATION_FINISH_5 >= 134\n#        define BOOST_PP_ITERATION_5 134\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 135 && BOOST_PP_ITERATION_FINISH_5 >= 135\n#        define BOOST_PP_ITERATION_5 135\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 136 && BOOST_PP_ITERATION_FINISH_5 >= 136\n#        define BOOST_PP_ITERATION_5 136\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 137 && BOOST_PP_ITERATION_FINISH_5 >= 137\n#        define BOOST_PP_ITERATION_5 137\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 138 && BOOST_PP_ITERATION_FINISH_5 >= 138\n#        define BOOST_PP_ITERATION_5 138\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 139 && BOOST_PP_ITERATION_FINISH_5 >= 139\n#        define BOOST_PP_ITERATION_5 139\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 140 && BOOST_PP_ITERATION_FINISH_5 >= 140\n#        define BOOST_PP_ITERATION_5 140\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 141 && BOOST_PP_ITERATION_FINISH_5 >= 141\n#        define BOOST_PP_ITERATION_5 141\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 142 && BOOST_PP_ITERATION_FINISH_5 >= 142\n#        define BOOST_PP_ITERATION_5 142\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 143 && BOOST_PP_ITERATION_FINISH_5 >= 143\n#        define BOOST_PP_ITERATION_5 143\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 144 && BOOST_PP_ITERATION_FINISH_5 >= 144\n#        define BOOST_PP_ITERATION_5 144\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 145 && BOOST_PP_ITERATION_FINISH_5 >= 145\n#        define BOOST_PP_ITERATION_5 145\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 146 && BOOST_PP_ITERATION_FINISH_5 >= 146\n#        define BOOST_PP_ITERATION_5 146\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 147 && BOOST_PP_ITERATION_FINISH_5 >= 147\n#        define BOOST_PP_ITERATION_5 147\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 148 && BOOST_PP_ITERATION_FINISH_5 >= 148\n#        define BOOST_PP_ITERATION_5 148\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 149 && BOOST_PP_ITERATION_FINISH_5 >= 149\n#        define BOOST_PP_ITERATION_5 149\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 150 && BOOST_PP_ITERATION_FINISH_5 >= 150\n#        define BOOST_PP_ITERATION_5 150\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 151 && BOOST_PP_ITERATION_FINISH_5 >= 151\n#        define BOOST_PP_ITERATION_5 151\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 152 && BOOST_PP_ITERATION_FINISH_5 >= 152\n#        define BOOST_PP_ITERATION_5 152\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 153 && BOOST_PP_ITERATION_FINISH_5 >= 153\n#        define BOOST_PP_ITERATION_5 153\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 154 && BOOST_PP_ITERATION_FINISH_5 >= 154\n#        define BOOST_PP_ITERATION_5 154\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 155 && BOOST_PP_ITERATION_FINISH_5 >= 155\n#        define BOOST_PP_ITERATION_5 155\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 156 && BOOST_PP_ITERATION_FINISH_5 >= 156\n#        define BOOST_PP_ITERATION_5 156\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 157 && BOOST_PP_ITERATION_FINISH_5 >= 157\n#        define BOOST_PP_ITERATION_5 157\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 158 && BOOST_PP_ITERATION_FINISH_5 >= 158\n#        define BOOST_PP_ITERATION_5 158\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 159 && BOOST_PP_ITERATION_FINISH_5 >= 159\n#        define BOOST_PP_ITERATION_5 159\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 160 && BOOST_PP_ITERATION_FINISH_5 >= 160\n#        define BOOST_PP_ITERATION_5 160\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 161 && BOOST_PP_ITERATION_FINISH_5 >= 161\n#        define BOOST_PP_ITERATION_5 161\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 162 && BOOST_PP_ITERATION_FINISH_5 >= 162\n#        define BOOST_PP_ITERATION_5 162\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 163 && BOOST_PP_ITERATION_FINISH_5 >= 163\n#        define BOOST_PP_ITERATION_5 163\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 164 && BOOST_PP_ITERATION_FINISH_5 >= 164\n#        define BOOST_PP_ITERATION_5 164\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 165 && BOOST_PP_ITERATION_FINISH_5 >= 165\n#        define BOOST_PP_ITERATION_5 165\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 166 && BOOST_PP_ITERATION_FINISH_5 >= 166\n#        define BOOST_PP_ITERATION_5 166\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 167 && BOOST_PP_ITERATION_FINISH_5 >= 167\n#        define BOOST_PP_ITERATION_5 167\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 168 && BOOST_PP_ITERATION_FINISH_5 >= 168\n#        define BOOST_PP_ITERATION_5 168\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 169 && BOOST_PP_ITERATION_FINISH_5 >= 169\n#        define BOOST_PP_ITERATION_5 169\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 170 && BOOST_PP_ITERATION_FINISH_5 >= 170\n#        define BOOST_PP_ITERATION_5 170\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 171 && BOOST_PP_ITERATION_FINISH_5 >= 171\n#        define BOOST_PP_ITERATION_5 171\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 172 && BOOST_PP_ITERATION_FINISH_5 >= 172\n#        define BOOST_PP_ITERATION_5 172\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 173 && BOOST_PP_ITERATION_FINISH_5 >= 173\n#        define BOOST_PP_ITERATION_5 173\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 174 && BOOST_PP_ITERATION_FINISH_5 >= 174\n#        define BOOST_PP_ITERATION_5 174\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 175 && BOOST_PP_ITERATION_FINISH_5 >= 175\n#        define BOOST_PP_ITERATION_5 175\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 176 && BOOST_PP_ITERATION_FINISH_5 >= 176\n#        define BOOST_PP_ITERATION_5 176\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 177 && BOOST_PP_ITERATION_FINISH_5 >= 177\n#        define BOOST_PP_ITERATION_5 177\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 178 && BOOST_PP_ITERATION_FINISH_5 >= 178\n#        define BOOST_PP_ITERATION_5 178\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 179 && BOOST_PP_ITERATION_FINISH_5 >= 179\n#        define BOOST_PP_ITERATION_5 179\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 180 && BOOST_PP_ITERATION_FINISH_5 >= 180\n#        define BOOST_PP_ITERATION_5 180\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 181 && BOOST_PP_ITERATION_FINISH_5 >= 181\n#        define BOOST_PP_ITERATION_5 181\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 182 && BOOST_PP_ITERATION_FINISH_5 >= 182\n#        define BOOST_PP_ITERATION_5 182\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 183 && BOOST_PP_ITERATION_FINISH_5 >= 183\n#        define BOOST_PP_ITERATION_5 183\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 184 && BOOST_PP_ITERATION_FINISH_5 >= 184\n#        define BOOST_PP_ITERATION_5 184\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 185 && BOOST_PP_ITERATION_FINISH_5 >= 185\n#        define BOOST_PP_ITERATION_5 185\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 186 && BOOST_PP_ITERATION_FINISH_5 >= 186\n#        define BOOST_PP_ITERATION_5 186\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 187 && BOOST_PP_ITERATION_FINISH_5 >= 187\n#        define BOOST_PP_ITERATION_5 187\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 188 && BOOST_PP_ITERATION_FINISH_5 >= 188\n#        define BOOST_PP_ITERATION_5 188\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 189 && BOOST_PP_ITERATION_FINISH_5 >= 189\n#        define BOOST_PP_ITERATION_5 189\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 190 && BOOST_PP_ITERATION_FINISH_5 >= 190\n#        define BOOST_PP_ITERATION_5 190\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 191 && BOOST_PP_ITERATION_FINISH_5 >= 191\n#        define BOOST_PP_ITERATION_5 191\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 192 && BOOST_PP_ITERATION_FINISH_5 >= 192\n#        define BOOST_PP_ITERATION_5 192\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 193 && BOOST_PP_ITERATION_FINISH_5 >= 193\n#        define BOOST_PP_ITERATION_5 193\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 194 && BOOST_PP_ITERATION_FINISH_5 >= 194\n#        define BOOST_PP_ITERATION_5 194\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 195 && BOOST_PP_ITERATION_FINISH_5 >= 195\n#        define BOOST_PP_ITERATION_5 195\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 196 && BOOST_PP_ITERATION_FINISH_5 >= 196\n#        define BOOST_PP_ITERATION_5 196\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 197 && BOOST_PP_ITERATION_FINISH_5 >= 197\n#        define BOOST_PP_ITERATION_5 197\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 198 && BOOST_PP_ITERATION_FINISH_5 >= 198\n#        define BOOST_PP_ITERATION_5 198\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 199 && BOOST_PP_ITERATION_FINISH_5 >= 199\n#        define BOOST_PP_ITERATION_5 199\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 200 && BOOST_PP_ITERATION_FINISH_5 >= 200\n#        define BOOST_PP_ITERATION_5 200\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 201 && BOOST_PP_ITERATION_FINISH_5 >= 201\n#        define BOOST_PP_ITERATION_5 201\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 202 && BOOST_PP_ITERATION_FINISH_5 >= 202\n#        define BOOST_PP_ITERATION_5 202\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 203 && BOOST_PP_ITERATION_FINISH_5 >= 203\n#        define BOOST_PP_ITERATION_5 203\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 204 && BOOST_PP_ITERATION_FINISH_5 >= 204\n#        define BOOST_PP_ITERATION_5 204\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 205 && BOOST_PP_ITERATION_FINISH_5 >= 205\n#        define BOOST_PP_ITERATION_5 205\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 206 && BOOST_PP_ITERATION_FINISH_5 >= 206\n#        define BOOST_PP_ITERATION_5 206\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 207 && BOOST_PP_ITERATION_FINISH_5 >= 207\n#        define BOOST_PP_ITERATION_5 207\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 208 && BOOST_PP_ITERATION_FINISH_5 >= 208\n#        define BOOST_PP_ITERATION_5 208\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 209 && BOOST_PP_ITERATION_FINISH_5 >= 209\n#        define BOOST_PP_ITERATION_5 209\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 210 && BOOST_PP_ITERATION_FINISH_5 >= 210\n#        define BOOST_PP_ITERATION_5 210\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 211 && BOOST_PP_ITERATION_FINISH_5 >= 211\n#        define BOOST_PP_ITERATION_5 211\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 212 && BOOST_PP_ITERATION_FINISH_5 >= 212\n#        define BOOST_PP_ITERATION_5 212\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 213 && BOOST_PP_ITERATION_FINISH_5 >= 213\n#        define BOOST_PP_ITERATION_5 213\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 214 && BOOST_PP_ITERATION_FINISH_5 >= 214\n#        define BOOST_PP_ITERATION_5 214\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 215 && BOOST_PP_ITERATION_FINISH_5 >= 215\n#        define BOOST_PP_ITERATION_5 215\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 216 && BOOST_PP_ITERATION_FINISH_5 >= 216\n#        define BOOST_PP_ITERATION_5 216\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 217 && BOOST_PP_ITERATION_FINISH_5 >= 217\n#        define BOOST_PP_ITERATION_5 217\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 218 && BOOST_PP_ITERATION_FINISH_5 >= 218\n#        define BOOST_PP_ITERATION_5 218\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 219 && BOOST_PP_ITERATION_FINISH_5 >= 219\n#        define BOOST_PP_ITERATION_5 219\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 220 && BOOST_PP_ITERATION_FINISH_5 >= 220\n#        define BOOST_PP_ITERATION_5 220\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 221 && BOOST_PP_ITERATION_FINISH_5 >= 221\n#        define BOOST_PP_ITERATION_5 221\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 222 && BOOST_PP_ITERATION_FINISH_5 >= 222\n#        define BOOST_PP_ITERATION_5 222\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 223 && BOOST_PP_ITERATION_FINISH_5 >= 223\n#        define BOOST_PP_ITERATION_5 223\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 224 && BOOST_PP_ITERATION_FINISH_5 >= 224\n#        define BOOST_PP_ITERATION_5 224\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 225 && BOOST_PP_ITERATION_FINISH_5 >= 225\n#        define BOOST_PP_ITERATION_5 225\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 226 && BOOST_PP_ITERATION_FINISH_5 >= 226\n#        define BOOST_PP_ITERATION_5 226\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 227 && BOOST_PP_ITERATION_FINISH_5 >= 227\n#        define BOOST_PP_ITERATION_5 227\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 228 && BOOST_PP_ITERATION_FINISH_5 >= 228\n#        define BOOST_PP_ITERATION_5 228\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 229 && BOOST_PP_ITERATION_FINISH_5 >= 229\n#        define BOOST_PP_ITERATION_5 229\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 230 && BOOST_PP_ITERATION_FINISH_5 >= 230\n#        define BOOST_PP_ITERATION_5 230\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 231 && BOOST_PP_ITERATION_FINISH_5 >= 231\n#        define BOOST_PP_ITERATION_5 231\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 232 && BOOST_PP_ITERATION_FINISH_5 >= 232\n#        define BOOST_PP_ITERATION_5 232\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 233 && BOOST_PP_ITERATION_FINISH_5 >= 233\n#        define BOOST_PP_ITERATION_5 233\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 234 && BOOST_PP_ITERATION_FINISH_5 >= 234\n#        define BOOST_PP_ITERATION_5 234\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 235 && BOOST_PP_ITERATION_FINISH_5 >= 235\n#        define BOOST_PP_ITERATION_5 235\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 236 && BOOST_PP_ITERATION_FINISH_5 >= 236\n#        define BOOST_PP_ITERATION_5 236\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 237 && BOOST_PP_ITERATION_FINISH_5 >= 237\n#        define BOOST_PP_ITERATION_5 237\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 238 && BOOST_PP_ITERATION_FINISH_5 >= 238\n#        define BOOST_PP_ITERATION_5 238\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 239 && BOOST_PP_ITERATION_FINISH_5 >= 239\n#        define BOOST_PP_ITERATION_5 239\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 240 && BOOST_PP_ITERATION_FINISH_5 >= 240\n#        define BOOST_PP_ITERATION_5 240\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 241 && BOOST_PP_ITERATION_FINISH_5 >= 241\n#        define BOOST_PP_ITERATION_5 241\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 242 && BOOST_PP_ITERATION_FINISH_5 >= 242\n#        define BOOST_PP_ITERATION_5 242\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 243 && BOOST_PP_ITERATION_FINISH_5 >= 243\n#        define BOOST_PP_ITERATION_5 243\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 244 && BOOST_PP_ITERATION_FINISH_5 >= 244\n#        define BOOST_PP_ITERATION_5 244\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 245 && BOOST_PP_ITERATION_FINISH_5 >= 245\n#        define BOOST_PP_ITERATION_5 245\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 246 && BOOST_PP_ITERATION_FINISH_5 >= 246\n#        define BOOST_PP_ITERATION_5 246\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 247 && BOOST_PP_ITERATION_FINISH_5 >= 247\n#        define BOOST_PP_ITERATION_5 247\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 248 && BOOST_PP_ITERATION_FINISH_5 >= 248\n#        define BOOST_PP_ITERATION_5 248\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 249 && BOOST_PP_ITERATION_FINISH_5 >= 249\n#        define BOOST_PP_ITERATION_5 249\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 250 && BOOST_PP_ITERATION_FINISH_5 >= 250\n#        define BOOST_PP_ITERATION_5 250\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 251 && BOOST_PP_ITERATION_FINISH_5 >= 251\n#        define BOOST_PP_ITERATION_5 251\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 252 && BOOST_PP_ITERATION_FINISH_5 >= 252\n#        define BOOST_PP_ITERATION_5 252\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 253 && BOOST_PP_ITERATION_FINISH_5 >= 253\n#        define BOOST_PP_ITERATION_5 253\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 254 && BOOST_PP_ITERATION_FINISH_5 >= 254\n#        define BOOST_PP_ITERATION_5 254\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 255 && BOOST_PP_ITERATION_FINISH_5 >= 255\n#        define BOOST_PP_ITERATION_5 255\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n#    if BOOST_PP_ITERATION_START_5 <= 256 && BOOST_PP_ITERATION_FINISH_5 >= 256\n#        define BOOST_PP_ITERATION_5 256\n#        include BOOST_PP_FILENAME_5\n#        undef BOOST_PP_ITERATION_5\n#    endif\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 4\n#\n# undef BOOST_PP_ITERATION_START_5\n# undef BOOST_PP_ITERATION_FINISH_5\n# undef BOOST_PP_FILENAME_5\n#\n# undef BOOST_PP_ITERATION_FLAGS_5\n# undef BOOST_PP_ITERATION_PARAMS_5\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/reverse1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if BOOST_PP_ITERATION_FINISH_1 <= 256 && BOOST_PP_ITERATION_START_1 >= 256\n#    define BOOST_PP_ITERATION_1 256\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 255 && BOOST_PP_ITERATION_START_1 >= 255\n#    define BOOST_PP_ITERATION_1 255\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 254 && BOOST_PP_ITERATION_START_1 >= 254\n#    define BOOST_PP_ITERATION_1 254\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 253 && BOOST_PP_ITERATION_START_1 >= 253\n#    define BOOST_PP_ITERATION_1 253\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 252 && BOOST_PP_ITERATION_START_1 >= 252\n#    define BOOST_PP_ITERATION_1 252\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 251 && BOOST_PP_ITERATION_START_1 >= 251\n#    define BOOST_PP_ITERATION_1 251\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 250 && BOOST_PP_ITERATION_START_1 >= 250\n#    define BOOST_PP_ITERATION_1 250\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 249 && BOOST_PP_ITERATION_START_1 >= 249\n#    define BOOST_PP_ITERATION_1 249\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 248 && BOOST_PP_ITERATION_START_1 >= 248\n#    define BOOST_PP_ITERATION_1 248\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 247 && BOOST_PP_ITERATION_START_1 >= 247\n#    define BOOST_PP_ITERATION_1 247\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 246 && BOOST_PP_ITERATION_START_1 >= 246\n#    define BOOST_PP_ITERATION_1 246\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 245 && BOOST_PP_ITERATION_START_1 >= 245\n#    define BOOST_PP_ITERATION_1 245\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 244 && BOOST_PP_ITERATION_START_1 >= 244\n#    define BOOST_PP_ITERATION_1 244\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 243 && BOOST_PP_ITERATION_START_1 >= 243\n#    define BOOST_PP_ITERATION_1 243\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 242 && BOOST_PP_ITERATION_START_1 >= 242\n#    define BOOST_PP_ITERATION_1 242\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 241 && BOOST_PP_ITERATION_START_1 >= 241\n#    define BOOST_PP_ITERATION_1 241\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 240 && BOOST_PP_ITERATION_START_1 >= 240\n#    define BOOST_PP_ITERATION_1 240\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 239 && BOOST_PP_ITERATION_START_1 >= 239\n#    define BOOST_PP_ITERATION_1 239\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 238 && BOOST_PP_ITERATION_START_1 >= 238\n#    define BOOST_PP_ITERATION_1 238\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 237 && BOOST_PP_ITERATION_START_1 >= 237\n#    define BOOST_PP_ITERATION_1 237\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 236 && BOOST_PP_ITERATION_START_1 >= 236\n#    define BOOST_PP_ITERATION_1 236\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 235 && BOOST_PP_ITERATION_START_1 >= 235\n#    define BOOST_PP_ITERATION_1 235\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 234 && BOOST_PP_ITERATION_START_1 >= 234\n#    define BOOST_PP_ITERATION_1 234\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 233 && BOOST_PP_ITERATION_START_1 >= 233\n#    define BOOST_PP_ITERATION_1 233\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 232 && BOOST_PP_ITERATION_START_1 >= 232\n#    define BOOST_PP_ITERATION_1 232\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 231 && BOOST_PP_ITERATION_START_1 >= 231\n#    define BOOST_PP_ITERATION_1 231\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 230 && BOOST_PP_ITERATION_START_1 >= 230\n#    define BOOST_PP_ITERATION_1 230\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 229 && BOOST_PP_ITERATION_START_1 >= 229\n#    define BOOST_PP_ITERATION_1 229\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 228 && BOOST_PP_ITERATION_START_1 >= 228\n#    define BOOST_PP_ITERATION_1 228\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 227 && BOOST_PP_ITERATION_START_1 >= 227\n#    define BOOST_PP_ITERATION_1 227\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 226 && BOOST_PP_ITERATION_START_1 >= 226\n#    define BOOST_PP_ITERATION_1 226\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 225 && BOOST_PP_ITERATION_START_1 >= 225\n#    define BOOST_PP_ITERATION_1 225\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 224 && BOOST_PP_ITERATION_START_1 >= 224\n#    define BOOST_PP_ITERATION_1 224\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 223 && BOOST_PP_ITERATION_START_1 >= 223\n#    define BOOST_PP_ITERATION_1 223\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 222 && BOOST_PP_ITERATION_START_1 >= 222\n#    define BOOST_PP_ITERATION_1 222\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 221 && BOOST_PP_ITERATION_START_1 >= 221\n#    define BOOST_PP_ITERATION_1 221\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 220 && BOOST_PP_ITERATION_START_1 >= 220\n#    define BOOST_PP_ITERATION_1 220\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 219 && BOOST_PP_ITERATION_START_1 >= 219\n#    define BOOST_PP_ITERATION_1 219\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 218 && BOOST_PP_ITERATION_START_1 >= 218\n#    define BOOST_PP_ITERATION_1 218\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 217 && BOOST_PP_ITERATION_START_1 >= 217\n#    define BOOST_PP_ITERATION_1 217\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 216 && BOOST_PP_ITERATION_START_1 >= 216\n#    define BOOST_PP_ITERATION_1 216\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 215 && BOOST_PP_ITERATION_START_1 >= 215\n#    define BOOST_PP_ITERATION_1 215\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 214 && BOOST_PP_ITERATION_START_1 >= 214\n#    define BOOST_PP_ITERATION_1 214\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 213 && BOOST_PP_ITERATION_START_1 >= 213\n#    define BOOST_PP_ITERATION_1 213\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 212 && BOOST_PP_ITERATION_START_1 >= 212\n#    define BOOST_PP_ITERATION_1 212\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 211 && BOOST_PP_ITERATION_START_1 >= 211\n#    define BOOST_PP_ITERATION_1 211\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 210 && BOOST_PP_ITERATION_START_1 >= 210\n#    define BOOST_PP_ITERATION_1 210\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 209 && BOOST_PP_ITERATION_START_1 >= 209\n#    define BOOST_PP_ITERATION_1 209\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 208 && BOOST_PP_ITERATION_START_1 >= 208\n#    define BOOST_PP_ITERATION_1 208\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 207 && BOOST_PP_ITERATION_START_1 >= 207\n#    define BOOST_PP_ITERATION_1 207\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 206 && BOOST_PP_ITERATION_START_1 >= 206\n#    define BOOST_PP_ITERATION_1 206\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 205 && BOOST_PP_ITERATION_START_1 >= 205\n#    define BOOST_PP_ITERATION_1 205\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 204 && BOOST_PP_ITERATION_START_1 >= 204\n#    define BOOST_PP_ITERATION_1 204\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 203 && BOOST_PP_ITERATION_START_1 >= 203\n#    define BOOST_PP_ITERATION_1 203\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 202 && BOOST_PP_ITERATION_START_1 >= 202\n#    define BOOST_PP_ITERATION_1 202\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 201 && BOOST_PP_ITERATION_START_1 >= 201\n#    define BOOST_PP_ITERATION_1 201\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 200 && BOOST_PP_ITERATION_START_1 >= 200\n#    define BOOST_PP_ITERATION_1 200\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 199 && BOOST_PP_ITERATION_START_1 >= 199\n#    define BOOST_PP_ITERATION_1 199\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 198 && BOOST_PP_ITERATION_START_1 >= 198\n#    define BOOST_PP_ITERATION_1 198\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 197 && BOOST_PP_ITERATION_START_1 >= 197\n#    define BOOST_PP_ITERATION_1 197\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 196 && BOOST_PP_ITERATION_START_1 >= 196\n#    define BOOST_PP_ITERATION_1 196\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 195 && BOOST_PP_ITERATION_START_1 >= 195\n#    define BOOST_PP_ITERATION_1 195\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 194 && BOOST_PP_ITERATION_START_1 >= 194\n#    define BOOST_PP_ITERATION_1 194\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 193 && BOOST_PP_ITERATION_START_1 >= 193\n#    define BOOST_PP_ITERATION_1 193\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 192 && BOOST_PP_ITERATION_START_1 >= 192\n#    define BOOST_PP_ITERATION_1 192\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 191 && BOOST_PP_ITERATION_START_1 >= 191\n#    define BOOST_PP_ITERATION_1 191\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 190 && BOOST_PP_ITERATION_START_1 >= 190\n#    define BOOST_PP_ITERATION_1 190\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 189 && BOOST_PP_ITERATION_START_1 >= 189\n#    define BOOST_PP_ITERATION_1 189\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 188 && BOOST_PP_ITERATION_START_1 >= 188\n#    define BOOST_PP_ITERATION_1 188\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 187 && BOOST_PP_ITERATION_START_1 >= 187\n#    define BOOST_PP_ITERATION_1 187\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 186 && BOOST_PP_ITERATION_START_1 >= 186\n#    define BOOST_PP_ITERATION_1 186\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 185 && BOOST_PP_ITERATION_START_1 >= 185\n#    define BOOST_PP_ITERATION_1 185\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 184 && BOOST_PP_ITERATION_START_1 >= 184\n#    define BOOST_PP_ITERATION_1 184\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 183 && BOOST_PP_ITERATION_START_1 >= 183\n#    define BOOST_PP_ITERATION_1 183\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 182 && BOOST_PP_ITERATION_START_1 >= 182\n#    define BOOST_PP_ITERATION_1 182\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 181 && BOOST_PP_ITERATION_START_1 >= 181\n#    define BOOST_PP_ITERATION_1 181\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 180 && BOOST_PP_ITERATION_START_1 >= 180\n#    define BOOST_PP_ITERATION_1 180\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 179 && BOOST_PP_ITERATION_START_1 >= 179\n#    define BOOST_PP_ITERATION_1 179\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 178 && BOOST_PP_ITERATION_START_1 >= 178\n#    define BOOST_PP_ITERATION_1 178\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 177 && BOOST_PP_ITERATION_START_1 >= 177\n#    define BOOST_PP_ITERATION_1 177\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 176 && BOOST_PP_ITERATION_START_1 >= 176\n#    define BOOST_PP_ITERATION_1 176\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 175 && BOOST_PP_ITERATION_START_1 >= 175\n#    define BOOST_PP_ITERATION_1 175\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 174 && BOOST_PP_ITERATION_START_1 >= 174\n#    define BOOST_PP_ITERATION_1 174\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 173 && BOOST_PP_ITERATION_START_1 >= 173\n#    define BOOST_PP_ITERATION_1 173\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 172 && BOOST_PP_ITERATION_START_1 >= 172\n#    define BOOST_PP_ITERATION_1 172\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 171 && BOOST_PP_ITERATION_START_1 >= 171\n#    define BOOST_PP_ITERATION_1 171\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 170 && BOOST_PP_ITERATION_START_1 >= 170\n#    define BOOST_PP_ITERATION_1 170\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 169 && BOOST_PP_ITERATION_START_1 >= 169\n#    define BOOST_PP_ITERATION_1 169\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 168 && BOOST_PP_ITERATION_START_1 >= 168\n#    define BOOST_PP_ITERATION_1 168\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 167 && BOOST_PP_ITERATION_START_1 >= 167\n#    define BOOST_PP_ITERATION_1 167\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 166 && BOOST_PP_ITERATION_START_1 >= 166\n#    define BOOST_PP_ITERATION_1 166\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 165 && BOOST_PP_ITERATION_START_1 >= 165\n#    define BOOST_PP_ITERATION_1 165\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 164 && BOOST_PP_ITERATION_START_1 >= 164\n#    define BOOST_PP_ITERATION_1 164\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 163 && BOOST_PP_ITERATION_START_1 >= 163\n#    define BOOST_PP_ITERATION_1 163\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 162 && BOOST_PP_ITERATION_START_1 >= 162\n#    define BOOST_PP_ITERATION_1 162\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 161 && BOOST_PP_ITERATION_START_1 >= 161\n#    define BOOST_PP_ITERATION_1 161\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 160 && BOOST_PP_ITERATION_START_1 >= 160\n#    define BOOST_PP_ITERATION_1 160\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 159 && BOOST_PP_ITERATION_START_1 >= 159\n#    define BOOST_PP_ITERATION_1 159\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 158 && BOOST_PP_ITERATION_START_1 >= 158\n#    define BOOST_PP_ITERATION_1 158\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 157 && BOOST_PP_ITERATION_START_1 >= 157\n#    define BOOST_PP_ITERATION_1 157\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 156 && BOOST_PP_ITERATION_START_1 >= 156\n#    define BOOST_PP_ITERATION_1 156\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 155 && BOOST_PP_ITERATION_START_1 >= 155\n#    define BOOST_PP_ITERATION_1 155\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 154 && BOOST_PP_ITERATION_START_1 >= 154\n#    define BOOST_PP_ITERATION_1 154\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 153 && BOOST_PP_ITERATION_START_1 >= 153\n#    define BOOST_PP_ITERATION_1 153\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 152 && BOOST_PP_ITERATION_START_1 >= 152\n#    define BOOST_PP_ITERATION_1 152\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 151 && BOOST_PP_ITERATION_START_1 >= 151\n#    define BOOST_PP_ITERATION_1 151\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 150 && BOOST_PP_ITERATION_START_1 >= 150\n#    define BOOST_PP_ITERATION_1 150\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 149 && BOOST_PP_ITERATION_START_1 >= 149\n#    define BOOST_PP_ITERATION_1 149\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 148 && BOOST_PP_ITERATION_START_1 >= 148\n#    define BOOST_PP_ITERATION_1 148\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 147 && BOOST_PP_ITERATION_START_1 >= 147\n#    define BOOST_PP_ITERATION_1 147\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 146 && BOOST_PP_ITERATION_START_1 >= 146\n#    define BOOST_PP_ITERATION_1 146\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 145 && BOOST_PP_ITERATION_START_1 >= 145\n#    define BOOST_PP_ITERATION_1 145\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 144 && BOOST_PP_ITERATION_START_1 >= 144\n#    define BOOST_PP_ITERATION_1 144\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 143 && BOOST_PP_ITERATION_START_1 >= 143\n#    define BOOST_PP_ITERATION_1 143\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 142 && BOOST_PP_ITERATION_START_1 >= 142\n#    define BOOST_PP_ITERATION_1 142\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 141 && BOOST_PP_ITERATION_START_1 >= 141\n#    define BOOST_PP_ITERATION_1 141\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 140 && BOOST_PP_ITERATION_START_1 >= 140\n#    define BOOST_PP_ITERATION_1 140\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 139 && BOOST_PP_ITERATION_START_1 >= 139\n#    define BOOST_PP_ITERATION_1 139\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 138 && BOOST_PP_ITERATION_START_1 >= 138\n#    define BOOST_PP_ITERATION_1 138\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 137 && BOOST_PP_ITERATION_START_1 >= 137\n#    define BOOST_PP_ITERATION_1 137\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 136 && BOOST_PP_ITERATION_START_1 >= 136\n#    define BOOST_PP_ITERATION_1 136\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 135 && BOOST_PP_ITERATION_START_1 >= 135\n#    define BOOST_PP_ITERATION_1 135\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 134 && BOOST_PP_ITERATION_START_1 >= 134\n#    define BOOST_PP_ITERATION_1 134\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 133 && BOOST_PP_ITERATION_START_1 >= 133\n#    define BOOST_PP_ITERATION_1 133\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 132 && BOOST_PP_ITERATION_START_1 >= 132\n#    define BOOST_PP_ITERATION_1 132\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 131 && BOOST_PP_ITERATION_START_1 >= 131\n#    define BOOST_PP_ITERATION_1 131\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 130 && BOOST_PP_ITERATION_START_1 >= 130\n#    define BOOST_PP_ITERATION_1 130\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 129 && BOOST_PP_ITERATION_START_1 >= 129\n#    define BOOST_PP_ITERATION_1 129\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 128 && BOOST_PP_ITERATION_START_1 >= 128\n#    define BOOST_PP_ITERATION_1 128\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 127 && BOOST_PP_ITERATION_START_1 >= 127\n#    define BOOST_PP_ITERATION_1 127\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 126 && BOOST_PP_ITERATION_START_1 >= 126\n#    define BOOST_PP_ITERATION_1 126\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 125 && BOOST_PP_ITERATION_START_1 >= 125\n#    define BOOST_PP_ITERATION_1 125\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 124 && BOOST_PP_ITERATION_START_1 >= 124\n#    define BOOST_PP_ITERATION_1 124\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 123 && BOOST_PP_ITERATION_START_1 >= 123\n#    define BOOST_PP_ITERATION_1 123\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 122 && BOOST_PP_ITERATION_START_1 >= 122\n#    define BOOST_PP_ITERATION_1 122\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 121 && BOOST_PP_ITERATION_START_1 >= 121\n#    define BOOST_PP_ITERATION_1 121\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 120 && BOOST_PP_ITERATION_START_1 >= 120\n#    define BOOST_PP_ITERATION_1 120\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 119 && BOOST_PP_ITERATION_START_1 >= 119\n#    define BOOST_PP_ITERATION_1 119\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 118 && BOOST_PP_ITERATION_START_1 >= 118\n#    define BOOST_PP_ITERATION_1 118\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 117 && BOOST_PP_ITERATION_START_1 >= 117\n#    define BOOST_PP_ITERATION_1 117\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 116 && BOOST_PP_ITERATION_START_1 >= 116\n#    define BOOST_PP_ITERATION_1 116\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 115 && BOOST_PP_ITERATION_START_1 >= 115\n#    define BOOST_PP_ITERATION_1 115\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 114 && BOOST_PP_ITERATION_START_1 >= 114\n#    define BOOST_PP_ITERATION_1 114\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 113 && BOOST_PP_ITERATION_START_1 >= 113\n#    define BOOST_PP_ITERATION_1 113\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 112 && BOOST_PP_ITERATION_START_1 >= 112\n#    define BOOST_PP_ITERATION_1 112\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 111 && BOOST_PP_ITERATION_START_1 >= 111\n#    define BOOST_PP_ITERATION_1 111\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 110 && BOOST_PP_ITERATION_START_1 >= 110\n#    define BOOST_PP_ITERATION_1 110\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 109 && BOOST_PP_ITERATION_START_1 >= 109\n#    define BOOST_PP_ITERATION_1 109\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 108 && BOOST_PP_ITERATION_START_1 >= 108\n#    define BOOST_PP_ITERATION_1 108\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 107 && BOOST_PP_ITERATION_START_1 >= 107\n#    define BOOST_PP_ITERATION_1 107\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 106 && BOOST_PP_ITERATION_START_1 >= 106\n#    define BOOST_PP_ITERATION_1 106\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 105 && BOOST_PP_ITERATION_START_1 >= 105\n#    define BOOST_PP_ITERATION_1 105\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 104 && BOOST_PP_ITERATION_START_1 >= 104\n#    define BOOST_PP_ITERATION_1 104\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 103 && BOOST_PP_ITERATION_START_1 >= 103\n#    define BOOST_PP_ITERATION_1 103\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 102 && BOOST_PP_ITERATION_START_1 >= 102\n#    define BOOST_PP_ITERATION_1 102\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 101 && BOOST_PP_ITERATION_START_1 >= 101\n#    define BOOST_PP_ITERATION_1 101\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 100 && BOOST_PP_ITERATION_START_1 >= 100\n#    define BOOST_PP_ITERATION_1 100\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 99 && BOOST_PP_ITERATION_START_1 >= 99\n#    define BOOST_PP_ITERATION_1 99\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 98 && BOOST_PP_ITERATION_START_1 >= 98\n#    define BOOST_PP_ITERATION_1 98\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 97 && BOOST_PP_ITERATION_START_1 >= 97\n#    define BOOST_PP_ITERATION_1 97\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 96 && BOOST_PP_ITERATION_START_1 >= 96\n#    define BOOST_PP_ITERATION_1 96\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 95 && BOOST_PP_ITERATION_START_1 >= 95\n#    define BOOST_PP_ITERATION_1 95\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 94 && BOOST_PP_ITERATION_START_1 >= 94\n#    define BOOST_PP_ITERATION_1 94\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 93 && BOOST_PP_ITERATION_START_1 >= 93\n#    define BOOST_PP_ITERATION_1 93\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 92 && BOOST_PP_ITERATION_START_1 >= 92\n#    define BOOST_PP_ITERATION_1 92\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 91 && BOOST_PP_ITERATION_START_1 >= 91\n#    define BOOST_PP_ITERATION_1 91\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 90 && BOOST_PP_ITERATION_START_1 >= 90\n#    define BOOST_PP_ITERATION_1 90\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 89 && BOOST_PP_ITERATION_START_1 >= 89\n#    define BOOST_PP_ITERATION_1 89\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 88 && BOOST_PP_ITERATION_START_1 >= 88\n#    define BOOST_PP_ITERATION_1 88\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 87 && BOOST_PP_ITERATION_START_1 >= 87\n#    define BOOST_PP_ITERATION_1 87\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 86 && BOOST_PP_ITERATION_START_1 >= 86\n#    define BOOST_PP_ITERATION_1 86\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 85 && BOOST_PP_ITERATION_START_1 >= 85\n#    define BOOST_PP_ITERATION_1 85\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 84 && BOOST_PP_ITERATION_START_1 >= 84\n#    define BOOST_PP_ITERATION_1 84\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 83 && BOOST_PP_ITERATION_START_1 >= 83\n#    define BOOST_PP_ITERATION_1 83\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 82 && BOOST_PP_ITERATION_START_1 >= 82\n#    define BOOST_PP_ITERATION_1 82\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 81 && BOOST_PP_ITERATION_START_1 >= 81\n#    define BOOST_PP_ITERATION_1 81\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 80 && BOOST_PP_ITERATION_START_1 >= 80\n#    define BOOST_PP_ITERATION_1 80\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 79 && BOOST_PP_ITERATION_START_1 >= 79\n#    define BOOST_PP_ITERATION_1 79\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 78 && BOOST_PP_ITERATION_START_1 >= 78\n#    define BOOST_PP_ITERATION_1 78\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 77 && BOOST_PP_ITERATION_START_1 >= 77\n#    define BOOST_PP_ITERATION_1 77\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 76 && BOOST_PP_ITERATION_START_1 >= 76\n#    define BOOST_PP_ITERATION_1 76\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 75 && BOOST_PP_ITERATION_START_1 >= 75\n#    define BOOST_PP_ITERATION_1 75\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 74 && BOOST_PP_ITERATION_START_1 >= 74\n#    define BOOST_PP_ITERATION_1 74\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 73 && BOOST_PP_ITERATION_START_1 >= 73\n#    define BOOST_PP_ITERATION_1 73\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 72 && BOOST_PP_ITERATION_START_1 >= 72\n#    define BOOST_PP_ITERATION_1 72\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 71 && BOOST_PP_ITERATION_START_1 >= 71\n#    define BOOST_PP_ITERATION_1 71\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 70 && BOOST_PP_ITERATION_START_1 >= 70\n#    define BOOST_PP_ITERATION_1 70\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 69 && BOOST_PP_ITERATION_START_1 >= 69\n#    define BOOST_PP_ITERATION_1 69\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 68 && BOOST_PP_ITERATION_START_1 >= 68\n#    define BOOST_PP_ITERATION_1 68\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 67 && BOOST_PP_ITERATION_START_1 >= 67\n#    define BOOST_PP_ITERATION_1 67\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 66 && BOOST_PP_ITERATION_START_1 >= 66\n#    define BOOST_PP_ITERATION_1 66\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 65 && BOOST_PP_ITERATION_START_1 >= 65\n#    define BOOST_PP_ITERATION_1 65\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 64 && BOOST_PP_ITERATION_START_1 >= 64\n#    define BOOST_PP_ITERATION_1 64\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 63 && BOOST_PP_ITERATION_START_1 >= 63\n#    define BOOST_PP_ITERATION_1 63\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 62 && BOOST_PP_ITERATION_START_1 >= 62\n#    define BOOST_PP_ITERATION_1 62\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 61 && BOOST_PP_ITERATION_START_1 >= 61\n#    define BOOST_PP_ITERATION_1 61\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 60 && BOOST_PP_ITERATION_START_1 >= 60\n#    define BOOST_PP_ITERATION_1 60\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 59 && BOOST_PP_ITERATION_START_1 >= 59\n#    define BOOST_PP_ITERATION_1 59\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 58 && BOOST_PP_ITERATION_START_1 >= 58\n#    define BOOST_PP_ITERATION_1 58\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 57 && BOOST_PP_ITERATION_START_1 >= 57\n#    define BOOST_PP_ITERATION_1 57\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 56 && BOOST_PP_ITERATION_START_1 >= 56\n#    define BOOST_PP_ITERATION_1 56\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 55 && BOOST_PP_ITERATION_START_1 >= 55\n#    define BOOST_PP_ITERATION_1 55\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 54 && BOOST_PP_ITERATION_START_1 >= 54\n#    define BOOST_PP_ITERATION_1 54\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 53 && BOOST_PP_ITERATION_START_1 >= 53\n#    define BOOST_PP_ITERATION_1 53\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 52 && BOOST_PP_ITERATION_START_1 >= 52\n#    define BOOST_PP_ITERATION_1 52\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 51 && BOOST_PP_ITERATION_START_1 >= 51\n#    define BOOST_PP_ITERATION_1 51\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 50 && BOOST_PP_ITERATION_START_1 >= 50\n#    define BOOST_PP_ITERATION_1 50\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 49 && BOOST_PP_ITERATION_START_1 >= 49\n#    define BOOST_PP_ITERATION_1 49\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 48 && BOOST_PP_ITERATION_START_1 >= 48\n#    define BOOST_PP_ITERATION_1 48\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 47 && BOOST_PP_ITERATION_START_1 >= 47\n#    define BOOST_PP_ITERATION_1 47\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 46 && BOOST_PP_ITERATION_START_1 >= 46\n#    define BOOST_PP_ITERATION_1 46\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 45 && BOOST_PP_ITERATION_START_1 >= 45\n#    define BOOST_PP_ITERATION_1 45\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 44 && BOOST_PP_ITERATION_START_1 >= 44\n#    define BOOST_PP_ITERATION_1 44\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 43 && BOOST_PP_ITERATION_START_1 >= 43\n#    define BOOST_PP_ITERATION_1 43\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 42 && BOOST_PP_ITERATION_START_1 >= 42\n#    define BOOST_PP_ITERATION_1 42\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 41 && BOOST_PP_ITERATION_START_1 >= 41\n#    define BOOST_PP_ITERATION_1 41\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 40 && BOOST_PP_ITERATION_START_1 >= 40\n#    define BOOST_PP_ITERATION_1 40\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 39 && BOOST_PP_ITERATION_START_1 >= 39\n#    define BOOST_PP_ITERATION_1 39\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 38 && BOOST_PP_ITERATION_START_1 >= 38\n#    define BOOST_PP_ITERATION_1 38\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 37 && BOOST_PP_ITERATION_START_1 >= 37\n#    define BOOST_PP_ITERATION_1 37\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 36 && BOOST_PP_ITERATION_START_1 >= 36\n#    define BOOST_PP_ITERATION_1 36\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 35 && BOOST_PP_ITERATION_START_1 >= 35\n#    define BOOST_PP_ITERATION_1 35\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 34 && BOOST_PP_ITERATION_START_1 >= 34\n#    define BOOST_PP_ITERATION_1 34\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 33 && BOOST_PP_ITERATION_START_1 >= 33\n#    define BOOST_PP_ITERATION_1 33\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 32 && BOOST_PP_ITERATION_START_1 >= 32\n#    define BOOST_PP_ITERATION_1 32\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 31 && BOOST_PP_ITERATION_START_1 >= 31\n#    define BOOST_PP_ITERATION_1 31\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 30 && BOOST_PP_ITERATION_START_1 >= 30\n#    define BOOST_PP_ITERATION_1 30\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 29 && BOOST_PP_ITERATION_START_1 >= 29\n#    define BOOST_PP_ITERATION_1 29\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 28 && BOOST_PP_ITERATION_START_1 >= 28\n#    define BOOST_PP_ITERATION_1 28\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 27 && BOOST_PP_ITERATION_START_1 >= 27\n#    define BOOST_PP_ITERATION_1 27\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 26 && BOOST_PP_ITERATION_START_1 >= 26\n#    define BOOST_PP_ITERATION_1 26\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 25 && BOOST_PP_ITERATION_START_1 >= 25\n#    define BOOST_PP_ITERATION_1 25\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 24 && BOOST_PP_ITERATION_START_1 >= 24\n#    define BOOST_PP_ITERATION_1 24\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 23 && BOOST_PP_ITERATION_START_1 >= 23\n#    define BOOST_PP_ITERATION_1 23\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 22 && BOOST_PP_ITERATION_START_1 >= 22\n#    define BOOST_PP_ITERATION_1 22\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 21 && BOOST_PP_ITERATION_START_1 >= 21\n#    define BOOST_PP_ITERATION_1 21\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 20 && BOOST_PP_ITERATION_START_1 >= 20\n#    define BOOST_PP_ITERATION_1 20\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 19 && BOOST_PP_ITERATION_START_1 >= 19\n#    define BOOST_PP_ITERATION_1 19\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 18 && BOOST_PP_ITERATION_START_1 >= 18\n#    define BOOST_PP_ITERATION_1 18\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 17 && BOOST_PP_ITERATION_START_1 >= 17\n#    define BOOST_PP_ITERATION_1 17\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 16 && BOOST_PP_ITERATION_START_1 >= 16\n#    define BOOST_PP_ITERATION_1 16\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 15 && BOOST_PP_ITERATION_START_1 >= 15\n#    define BOOST_PP_ITERATION_1 15\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 14 && BOOST_PP_ITERATION_START_1 >= 14\n#    define BOOST_PP_ITERATION_1 14\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 13 && BOOST_PP_ITERATION_START_1 >= 13\n#    define BOOST_PP_ITERATION_1 13\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 12 && BOOST_PP_ITERATION_START_1 >= 12\n#    define BOOST_PP_ITERATION_1 12\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 11 && BOOST_PP_ITERATION_START_1 >= 11\n#    define BOOST_PP_ITERATION_1 11\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 10 && BOOST_PP_ITERATION_START_1 >= 10\n#    define BOOST_PP_ITERATION_1 10\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 9 && BOOST_PP_ITERATION_START_1 >= 9\n#    define BOOST_PP_ITERATION_1 9\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 8 && BOOST_PP_ITERATION_START_1 >= 8\n#    define BOOST_PP_ITERATION_1 8\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 7 && BOOST_PP_ITERATION_START_1 >= 7\n#    define BOOST_PP_ITERATION_1 7\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 6 && BOOST_PP_ITERATION_START_1 >= 6\n#    define BOOST_PP_ITERATION_1 6\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 5 && BOOST_PP_ITERATION_START_1 >= 5\n#    define BOOST_PP_ITERATION_1 5\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 4 && BOOST_PP_ITERATION_START_1 >= 4\n#    define BOOST_PP_ITERATION_1 4\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 3 && BOOST_PP_ITERATION_START_1 >= 3\n#    define BOOST_PP_ITERATION_1 3\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 2 && BOOST_PP_ITERATION_START_1 >= 2\n#    define BOOST_PP_ITERATION_1 2\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 1 && BOOST_PP_ITERATION_START_1 >= 1\n#    define BOOST_PP_ITERATION_1 1\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n# if BOOST_PP_ITERATION_FINISH_1 <= 0 && BOOST_PP_ITERATION_START_1 >= 0\n#    define BOOST_PP_ITERATION_1 0\n#    include BOOST_PP_FILENAME_1\n#    undef BOOST_PP_ITERATION_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/reverse2.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if BOOST_PP_ITERATION_FINISH_2 <= 256 && BOOST_PP_ITERATION_START_2 >= 256\n#    define BOOST_PP_ITERATION_2 256\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 255 && BOOST_PP_ITERATION_START_2 >= 255\n#    define BOOST_PP_ITERATION_2 255\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 254 && BOOST_PP_ITERATION_START_2 >= 254\n#    define BOOST_PP_ITERATION_2 254\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 253 && BOOST_PP_ITERATION_START_2 >= 253\n#    define BOOST_PP_ITERATION_2 253\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 252 && BOOST_PP_ITERATION_START_2 >= 252\n#    define BOOST_PP_ITERATION_2 252\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 251 && BOOST_PP_ITERATION_START_2 >= 251\n#    define BOOST_PP_ITERATION_2 251\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 250 && BOOST_PP_ITERATION_START_2 >= 250\n#    define BOOST_PP_ITERATION_2 250\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 249 && BOOST_PP_ITERATION_START_2 >= 249\n#    define BOOST_PP_ITERATION_2 249\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 248 && BOOST_PP_ITERATION_START_2 >= 248\n#    define BOOST_PP_ITERATION_2 248\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 247 && BOOST_PP_ITERATION_START_2 >= 247\n#    define BOOST_PP_ITERATION_2 247\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 246 && BOOST_PP_ITERATION_START_2 >= 246\n#    define BOOST_PP_ITERATION_2 246\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 245 && BOOST_PP_ITERATION_START_2 >= 245\n#    define BOOST_PP_ITERATION_2 245\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 244 && BOOST_PP_ITERATION_START_2 >= 244\n#    define BOOST_PP_ITERATION_2 244\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 243 && BOOST_PP_ITERATION_START_2 >= 243\n#    define BOOST_PP_ITERATION_2 243\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 242 && BOOST_PP_ITERATION_START_2 >= 242\n#    define BOOST_PP_ITERATION_2 242\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 241 && BOOST_PP_ITERATION_START_2 >= 241\n#    define BOOST_PP_ITERATION_2 241\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 240 && BOOST_PP_ITERATION_START_2 >= 240\n#    define BOOST_PP_ITERATION_2 240\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 239 && BOOST_PP_ITERATION_START_2 >= 239\n#    define BOOST_PP_ITERATION_2 239\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 238 && BOOST_PP_ITERATION_START_2 >= 238\n#    define BOOST_PP_ITERATION_2 238\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 237 && BOOST_PP_ITERATION_START_2 >= 237\n#    define BOOST_PP_ITERATION_2 237\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 236 && BOOST_PP_ITERATION_START_2 >= 236\n#    define BOOST_PP_ITERATION_2 236\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 235 && BOOST_PP_ITERATION_START_2 >= 235\n#    define BOOST_PP_ITERATION_2 235\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 234 && BOOST_PP_ITERATION_START_2 >= 234\n#    define BOOST_PP_ITERATION_2 234\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 233 && BOOST_PP_ITERATION_START_2 >= 233\n#    define BOOST_PP_ITERATION_2 233\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 232 && BOOST_PP_ITERATION_START_2 >= 232\n#    define BOOST_PP_ITERATION_2 232\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 231 && BOOST_PP_ITERATION_START_2 >= 231\n#    define BOOST_PP_ITERATION_2 231\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 230 && BOOST_PP_ITERATION_START_2 >= 230\n#    define BOOST_PP_ITERATION_2 230\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 229 && BOOST_PP_ITERATION_START_2 >= 229\n#    define BOOST_PP_ITERATION_2 229\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 228 && BOOST_PP_ITERATION_START_2 >= 228\n#    define BOOST_PP_ITERATION_2 228\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 227 && BOOST_PP_ITERATION_START_2 >= 227\n#    define BOOST_PP_ITERATION_2 227\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 226 && BOOST_PP_ITERATION_START_2 >= 226\n#    define BOOST_PP_ITERATION_2 226\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 225 && BOOST_PP_ITERATION_START_2 >= 225\n#    define BOOST_PP_ITERATION_2 225\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 224 && BOOST_PP_ITERATION_START_2 >= 224\n#    define BOOST_PP_ITERATION_2 224\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 223 && BOOST_PP_ITERATION_START_2 >= 223\n#    define BOOST_PP_ITERATION_2 223\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 222 && BOOST_PP_ITERATION_START_2 >= 222\n#    define BOOST_PP_ITERATION_2 222\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 221 && BOOST_PP_ITERATION_START_2 >= 221\n#    define BOOST_PP_ITERATION_2 221\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 220 && BOOST_PP_ITERATION_START_2 >= 220\n#    define BOOST_PP_ITERATION_2 220\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 219 && BOOST_PP_ITERATION_START_2 >= 219\n#    define BOOST_PP_ITERATION_2 219\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 218 && BOOST_PP_ITERATION_START_2 >= 218\n#    define BOOST_PP_ITERATION_2 218\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 217 && BOOST_PP_ITERATION_START_2 >= 217\n#    define BOOST_PP_ITERATION_2 217\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 216 && BOOST_PP_ITERATION_START_2 >= 216\n#    define BOOST_PP_ITERATION_2 216\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 215 && BOOST_PP_ITERATION_START_2 >= 215\n#    define BOOST_PP_ITERATION_2 215\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 214 && BOOST_PP_ITERATION_START_2 >= 214\n#    define BOOST_PP_ITERATION_2 214\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 213 && BOOST_PP_ITERATION_START_2 >= 213\n#    define BOOST_PP_ITERATION_2 213\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 212 && BOOST_PP_ITERATION_START_2 >= 212\n#    define BOOST_PP_ITERATION_2 212\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 211 && BOOST_PP_ITERATION_START_2 >= 211\n#    define BOOST_PP_ITERATION_2 211\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 210 && BOOST_PP_ITERATION_START_2 >= 210\n#    define BOOST_PP_ITERATION_2 210\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 209 && BOOST_PP_ITERATION_START_2 >= 209\n#    define BOOST_PP_ITERATION_2 209\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 208 && BOOST_PP_ITERATION_START_2 >= 208\n#    define BOOST_PP_ITERATION_2 208\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 207 && BOOST_PP_ITERATION_START_2 >= 207\n#    define BOOST_PP_ITERATION_2 207\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 206 && BOOST_PP_ITERATION_START_2 >= 206\n#    define BOOST_PP_ITERATION_2 206\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 205 && BOOST_PP_ITERATION_START_2 >= 205\n#    define BOOST_PP_ITERATION_2 205\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 204 && BOOST_PP_ITERATION_START_2 >= 204\n#    define BOOST_PP_ITERATION_2 204\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 203 && BOOST_PP_ITERATION_START_2 >= 203\n#    define BOOST_PP_ITERATION_2 203\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 202 && BOOST_PP_ITERATION_START_2 >= 202\n#    define BOOST_PP_ITERATION_2 202\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 201 && BOOST_PP_ITERATION_START_2 >= 201\n#    define BOOST_PP_ITERATION_2 201\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 200 && BOOST_PP_ITERATION_START_2 >= 200\n#    define BOOST_PP_ITERATION_2 200\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 199 && BOOST_PP_ITERATION_START_2 >= 199\n#    define BOOST_PP_ITERATION_2 199\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 198 && BOOST_PP_ITERATION_START_2 >= 198\n#    define BOOST_PP_ITERATION_2 198\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 197 && BOOST_PP_ITERATION_START_2 >= 197\n#    define BOOST_PP_ITERATION_2 197\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 196 && BOOST_PP_ITERATION_START_2 >= 196\n#    define BOOST_PP_ITERATION_2 196\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 195 && BOOST_PP_ITERATION_START_2 >= 195\n#    define BOOST_PP_ITERATION_2 195\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 194 && BOOST_PP_ITERATION_START_2 >= 194\n#    define BOOST_PP_ITERATION_2 194\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 193 && BOOST_PP_ITERATION_START_2 >= 193\n#    define BOOST_PP_ITERATION_2 193\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 192 && BOOST_PP_ITERATION_START_2 >= 192\n#    define BOOST_PP_ITERATION_2 192\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 191 && BOOST_PP_ITERATION_START_2 >= 191\n#    define BOOST_PP_ITERATION_2 191\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 190 && BOOST_PP_ITERATION_START_2 >= 190\n#    define BOOST_PP_ITERATION_2 190\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 189 && BOOST_PP_ITERATION_START_2 >= 189\n#    define BOOST_PP_ITERATION_2 189\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 188 && BOOST_PP_ITERATION_START_2 >= 188\n#    define BOOST_PP_ITERATION_2 188\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 187 && BOOST_PP_ITERATION_START_2 >= 187\n#    define BOOST_PP_ITERATION_2 187\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 186 && BOOST_PP_ITERATION_START_2 >= 186\n#    define BOOST_PP_ITERATION_2 186\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 185 && BOOST_PP_ITERATION_START_2 >= 185\n#    define BOOST_PP_ITERATION_2 185\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 184 && BOOST_PP_ITERATION_START_2 >= 184\n#    define BOOST_PP_ITERATION_2 184\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 183 && BOOST_PP_ITERATION_START_2 >= 183\n#    define BOOST_PP_ITERATION_2 183\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 182 && BOOST_PP_ITERATION_START_2 >= 182\n#    define BOOST_PP_ITERATION_2 182\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 181 && BOOST_PP_ITERATION_START_2 >= 181\n#    define BOOST_PP_ITERATION_2 181\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 180 && BOOST_PP_ITERATION_START_2 >= 180\n#    define BOOST_PP_ITERATION_2 180\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 179 && BOOST_PP_ITERATION_START_2 >= 179\n#    define BOOST_PP_ITERATION_2 179\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 178 && BOOST_PP_ITERATION_START_2 >= 178\n#    define BOOST_PP_ITERATION_2 178\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 177 && BOOST_PP_ITERATION_START_2 >= 177\n#    define BOOST_PP_ITERATION_2 177\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 176 && BOOST_PP_ITERATION_START_2 >= 176\n#    define BOOST_PP_ITERATION_2 176\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 175 && BOOST_PP_ITERATION_START_2 >= 175\n#    define BOOST_PP_ITERATION_2 175\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 174 && BOOST_PP_ITERATION_START_2 >= 174\n#    define BOOST_PP_ITERATION_2 174\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 173 && BOOST_PP_ITERATION_START_2 >= 173\n#    define BOOST_PP_ITERATION_2 173\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 172 && BOOST_PP_ITERATION_START_2 >= 172\n#    define BOOST_PP_ITERATION_2 172\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 171 && BOOST_PP_ITERATION_START_2 >= 171\n#    define BOOST_PP_ITERATION_2 171\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 170 && BOOST_PP_ITERATION_START_2 >= 170\n#    define BOOST_PP_ITERATION_2 170\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 169 && BOOST_PP_ITERATION_START_2 >= 169\n#    define BOOST_PP_ITERATION_2 169\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 168 && BOOST_PP_ITERATION_START_2 >= 168\n#    define BOOST_PP_ITERATION_2 168\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 167 && BOOST_PP_ITERATION_START_2 >= 167\n#    define BOOST_PP_ITERATION_2 167\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 166 && BOOST_PP_ITERATION_START_2 >= 166\n#    define BOOST_PP_ITERATION_2 166\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 165 && BOOST_PP_ITERATION_START_2 >= 165\n#    define BOOST_PP_ITERATION_2 165\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 164 && BOOST_PP_ITERATION_START_2 >= 164\n#    define BOOST_PP_ITERATION_2 164\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 163 && BOOST_PP_ITERATION_START_2 >= 163\n#    define BOOST_PP_ITERATION_2 163\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 162 && BOOST_PP_ITERATION_START_2 >= 162\n#    define BOOST_PP_ITERATION_2 162\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 161 && BOOST_PP_ITERATION_START_2 >= 161\n#    define BOOST_PP_ITERATION_2 161\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 160 && BOOST_PP_ITERATION_START_2 >= 160\n#    define BOOST_PP_ITERATION_2 160\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 159 && BOOST_PP_ITERATION_START_2 >= 159\n#    define BOOST_PP_ITERATION_2 159\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 158 && BOOST_PP_ITERATION_START_2 >= 158\n#    define BOOST_PP_ITERATION_2 158\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 157 && BOOST_PP_ITERATION_START_2 >= 157\n#    define BOOST_PP_ITERATION_2 157\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 156 && BOOST_PP_ITERATION_START_2 >= 156\n#    define BOOST_PP_ITERATION_2 156\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 155 && BOOST_PP_ITERATION_START_2 >= 155\n#    define BOOST_PP_ITERATION_2 155\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 154 && BOOST_PP_ITERATION_START_2 >= 154\n#    define BOOST_PP_ITERATION_2 154\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 153 && BOOST_PP_ITERATION_START_2 >= 153\n#    define BOOST_PP_ITERATION_2 153\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 152 && BOOST_PP_ITERATION_START_2 >= 152\n#    define BOOST_PP_ITERATION_2 152\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 151 && BOOST_PP_ITERATION_START_2 >= 151\n#    define BOOST_PP_ITERATION_2 151\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 150 && BOOST_PP_ITERATION_START_2 >= 150\n#    define BOOST_PP_ITERATION_2 150\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 149 && BOOST_PP_ITERATION_START_2 >= 149\n#    define BOOST_PP_ITERATION_2 149\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 148 && BOOST_PP_ITERATION_START_2 >= 148\n#    define BOOST_PP_ITERATION_2 148\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 147 && BOOST_PP_ITERATION_START_2 >= 147\n#    define BOOST_PP_ITERATION_2 147\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 146 && BOOST_PP_ITERATION_START_2 >= 146\n#    define BOOST_PP_ITERATION_2 146\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 145 && BOOST_PP_ITERATION_START_2 >= 145\n#    define BOOST_PP_ITERATION_2 145\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 144 && BOOST_PP_ITERATION_START_2 >= 144\n#    define BOOST_PP_ITERATION_2 144\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 143 && BOOST_PP_ITERATION_START_2 >= 143\n#    define BOOST_PP_ITERATION_2 143\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 142 && BOOST_PP_ITERATION_START_2 >= 142\n#    define BOOST_PP_ITERATION_2 142\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 141 && BOOST_PP_ITERATION_START_2 >= 141\n#    define BOOST_PP_ITERATION_2 141\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 140 && BOOST_PP_ITERATION_START_2 >= 140\n#    define BOOST_PP_ITERATION_2 140\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 139 && BOOST_PP_ITERATION_START_2 >= 139\n#    define BOOST_PP_ITERATION_2 139\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 138 && BOOST_PP_ITERATION_START_2 >= 138\n#    define BOOST_PP_ITERATION_2 138\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 137 && BOOST_PP_ITERATION_START_2 >= 137\n#    define BOOST_PP_ITERATION_2 137\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 136 && BOOST_PP_ITERATION_START_2 >= 136\n#    define BOOST_PP_ITERATION_2 136\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 135 && BOOST_PP_ITERATION_START_2 >= 135\n#    define BOOST_PP_ITERATION_2 135\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 134 && BOOST_PP_ITERATION_START_2 >= 134\n#    define BOOST_PP_ITERATION_2 134\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 133 && BOOST_PP_ITERATION_START_2 >= 133\n#    define BOOST_PP_ITERATION_2 133\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 132 && BOOST_PP_ITERATION_START_2 >= 132\n#    define BOOST_PP_ITERATION_2 132\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 131 && BOOST_PP_ITERATION_START_2 >= 131\n#    define BOOST_PP_ITERATION_2 131\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 130 && BOOST_PP_ITERATION_START_2 >= 130\n#    define BOOST_PP_ITERATION_2 130\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 129 && BOOST_PP_ITERATION_START_2 >= 129\n#    define BOOST_PP_ITERATION_2 129\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 128 && BOOST_PP_ITERATION_START_2 >= 128\n#    define BOOST_PP_ITERATION_2 128\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 127 && BOOST_PP_ITERATION_START_2 >= 127\n#    define BOOST_PP_ITERATION_2 127\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 126 && BOOST_PP_ITERATION_START_2 >= 126\n#    define BOOST_PP_ITERATION_2 126\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 125 && BOOST_PP_ITERATION_START_2 >= 125\n#    define BOOST_PP_ITERATION_2 125\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 124 && BOOST_PP_ITERATION_START_2 >= 124\n#    define BOOST_PP_ITERATION_2 124\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 123 && BOOST_PP_ITERATION_START_2 >= 123\n#    define BOOST_PP_ITERATION_2 123\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 122 && BOOST_PP_ITERATION_START_2 >= 122\n#    define BOOST_PP_ITERATION_2 122\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 121 && BOOST_PP_ITERATION_START_2 >= 121\n#    define BOOST_PP_ITERATION_2 121\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 120 && BOOST_PP_ITERATION_START_2 >= 120\n#    define BOOST_PP_ITERATION_2 120\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 119 && BOOST_PP_ITERATION_START_2 >= 119\n#    define BOOST_PP_ITERATION_2 119\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 118 && BOOST_PP_ITERATION_START_2 >= 118\n#    define BOOST_PP_ITERATION_2 118\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 117 && BOOST_PP_ITERATION_START_2 >= 117\n#    define BOOST_PP_ITERATION_2 117\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 116 && BOOST_PP_ITERATION_START_2 >= 116\n#    define BOOST_PP_ITERATION_2 116\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 115 && BOOST_PP_ITERATION_START_2 >= 115\n#    define BOOST_PP_ITERATION_2 115\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 114 && BOOST_PP_ITERATION_START_2 >= 114\n#    define BOOST_PP_ITERATION_2 114\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 113 && BOOST_PP_ITERATION_START_2 >= 113\n#    define BOOST_PP_ITERATION_2 113\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 112 && BOOST_PP_ITERATION_START_2 >= 112\n#    define BOOST_PP_ITERATION_2 112\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 111 && BOOST_PP_ITERATION_START_2 >= 111\n#    define BOOST_PP_ITERATION_2 111\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 110 && BOOST_PP_ITERATION_START_2 >= 110\n#    define BOOST_PP_ITERATION_2 110\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 109 && BOOST_PP_ITERATION_START_2 >= 109\n#    define BOOST_PP_ITERATION_2 109\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 108 && BOOST_PP_ITERATION_START_2 >= 108\n#    define BOOST_PP_ITERATION_2 108\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 107 && BOOST_PP_ITERATION_START_2 >= 107\n#    define BOOST_PP_ITERATION_2 107\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 106 && BOOST_PP_ITERATION_START_2 >= 106\n#    define BOOST_PP_ITERATION_2 106\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 105 && BOOST_PP_ITERATION_START_2 >= 105\n#    define BOOST_PP_ITERATION_2 105\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 104 && BOOST_PP_ITERATION_START_2 >= 104\n#    define BOOST_PP_ITERATION_2 104\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 103 && BOOST_PP_ITERATION_START_2 >= 103\n#    define BOOST_PP_ITERATION_2 103\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 102 && BOOST_PP_ITERATION_START_2 >= 102\n#    define BOOST_PP_ITERATION_2 102\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 101 && BOOST_PP_ITERATION_START_2 >= 101\n#    define BOOST_PP_ITERATION_2 101\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 100 && BOOST_PP_ITERATION_START_2 >= 100\n#    define BOOST_PP_ITERATION_2 100\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 99 && BOOST_PP_ITERATION_START_2 >= 99\n#    define BOOST_PP_ITERATION_2 99\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 98 && BOOST_PP_ITERATION_START_2 >= 98\n#    define BOOST_PP_ITERATION_2 98\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 97 && BOOST_PP_ITERATION_START_2 >= 97\n#    define BOOST_PP_ITERATION_2 97\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 96 && BOOST_PP_ITERATION_START_2 >= 96\n#    define BOOST_PP_ITERATION_2 96\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 95 && BOOST_PP_ITERATION_START_2 >= 95\n#    define BOOST_PP_ITERATION_2 95\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 94 && BOOST_PP_ITERATION_START_2 >= 94\n#    define BOOST_PP_ITERATION_2 94\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 93 && BOOST_PP_ITERATION_START_2 >= 93\n#    define BOOST_PP_ITERATION_2 93\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 92 && BOOST_PP_ITERATION_START_2 >= 92\n#    define BOOST_PP_ITERATION_2 92\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 91 && BOOST_PP_ITERATION_START_2 >= 91\n#    define BOOST_PP_ITERATION_2 91\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 90 && BOOST_PP_ITERATION_START_2 >= 90\n#    define BOOST_PP_ITERATION_2 90\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 89 && BOOST_PP_ITERATION_START_2 >= 89\n#    define BOOST_PP_ITERATION_2 89\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 88 && BOOST_PP_ITERATION_START_2 >= 88\n#    define BOOST_PP_ITERATION_2 88\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 87 && BOOST_PP_ITERATION_START_2 >= 87\n#    define BOOST_PP_ITERATION_2 87\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 86 && BOOST_PP_ITERATION_START_2 >= 86\n#    define BOOST_PP_ITERATION_2 86\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 85 && BOOST_PP_ITERATION_START_2 >= 85\n#    define BOOST_PP_ITERATION_2 85\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 84 && BOOST_PP_ITERATION_START_2 >= 84\n#    define BOOST_PP_ITERATION_2 84\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 83 && BOOST_PP_ITERATION_START_2 >= 83\n#    define BOOST_PP_ITERATION_2 83\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 82 && BOOST_PP_ITERATION_START_2 >= 82\n#    define BOOST_PP_ITERATION_2 82\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 81 && BOOST_PP_ITERATION_START_2 >= 81\n#    define BOOST_PP_ITERATION_2 81\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 80 && BOOST_PP_ITERATION_START_2 >= 80\n#    define BOOST_PP_ITERATION_2 80\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 79 && BOOST_PP_ITERATION_START_2 >= 79\n#    define BOOST_PP_ITERATION_2 79\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 78 && BOOST_PP_ITERATION_START_2 >= 78\n#    define BOOST_PP_ITERATION_2 78\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 77 && BOOST_PP_ITERATION_START_2 >= 77\n#    define BOOST_PP_ITERATION_2 77\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 76 && BOOST_PP_ITERATION_START_2 >= 76\n#    define BOOST_PP_ITERATION_2 76\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 75 && BOOST_PP_ITERATION_START_2 >= 75\n#    define BOOST_PP_ITERATION_2 75\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 74 && BOOST_PP_ITERATION_START_2 >= 74\n#    define BOOST_PP_ITERATION_2 74\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 73 && BOOST_PP_ITERATION_START_2 >= 73\n#    define BOOST_PP_ITERATION_2 73\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 72 && BOOST_PP_ITERATION_START_2 >= 72\n#    define BOOST_PP_ITERATION_2 72\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 71 && BOOST_PP_ITERATION_START_2 >= 71\n#    define BOOST_PP_ITERATION_2 71\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 70 && BOOST_PP_ITERATION_START_2 >= 70\n#    define BOOST_PP_ITERATION_2 70\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 69 && BOOST_PP_ITERATION_START_2 >= 69\n#    define BOOST_PP_ITERATION_2 69\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 68 && BOOST_PP_ITERATION_START_2 >= 68\n#    define BOOST_PP_ITERATION_2 68\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 67 && BOOST_PP_ITERATION_START_2 >= 67\n#    define BOOST_PP_ITERATION_2 67\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 66 && BOOST_PP_ITERATION_START_2 >= 66\n#    define BOOST_PP_ITERATION_2 66\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 65 && BOOST_PP_ITERATION_START_2 >= 65\n#    define BOOST_PP_ITERATION_2 65\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 64 && BOOST_PP_ITERATION_START_2 >= 64\n#    define BOOST_PP_ITERATION_2 64\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 63 && BOOST_PP_ITERATION_START_2 >= 63\n#    define BOOST_PP_ITERATION_2 63\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 62 && BOOST_PP_ITERATION_START_2 >= 62\n#    define BOOST_PP_ITERATION_2 62\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 61 && BOOST_PP_ITERATION_START_2 >= 61\n#    define BOOST_PP_ITERATION_2 61\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 60 && BOOST_PP_ITERATION_START_2 >= 60\n#    define BOOST_PP_ITERATION_2 60\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 59 && BOOST_PP_ITERATION_START_2 >= 59\n#    define BOOST_PP_ITERATION_2 59\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 58 && BOOST_PP_ITERATION_START_2 >= 58\n#    define BOOST_PP_ITERATION_2 58\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 57 && BOOST_PP_ITERATION_START_2 >= 57\n#    define BOOST_PP_ITERATION_2 57\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 56 && BOOST_PP_ITERATION_START_2 >= 56\n#    define BOOST_PP_ITERATION_2 56\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 55 && BOOST_PP_ITERATION_START_2 >= 55\n#    define BOOST_PP_ITERATION_2 55\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 54 && BOOST_PP_ITERATION_START_2 >= 54\n#    define BOOST_PP_ITERATION_2 54\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 53 && BOOST_PP_ITERATION_START_2 >= 53\n#    define BOOST_PP_ITERATION_2 53\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 52 && BOOST_PP_ITERATION_START_2 >= 52\n#    define BOOST_PP_ITERATION_2 52\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 51 && BOOST_PP_ITERATION_START_2 >= 51\n#    define BOOST_PP_ITERATION_2 51\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 50 && BOOST_PP_ITERATION_START_2 >= 50\n#    define BOOST_PP_ITERATION_2 50\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 49 && BOOST_PP_ITERATION_START_2 >= 49\n#    define BOOST_PP_ITERATION_2 49\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 48 && BOOST_PP_ITERATION_START_2 >= 48\n#    define BOOST_PP_ITERATION_2 48\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 47 && BOOST_PP_ITERATION_START_2 >= 47\n#    define BOOST_PP_ITERATION_2 47\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 46 && BOOST_PP_ITERATION_START_2 >= 46\n#    define BOOST_PP_ITERATION_2 46\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 45 && BOOST_PP_ITERATION_START_2 >= 45\n#    define BOOST_PP_ITERATION_2 45\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 44 && BOOST_PP_ITERATION_START_2 >= 44\n#    define BOOST_PP_ITERATION_2 44\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 43 && BOOST_PP_ITERATION_START_2 >= 43\n#    define BOOST_PP_ITERATION_2 43\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 42 && BOOST_PP_ITERATION_START_2 >= 42\n#    define BOOST_PP_ITERATION_2 42\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 41 && BOOST_PP_ITERATION_START_2 >= 41\n#    define BOOST_PP_ITERATION_2 41\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 40 && BOOST_PP_ITERATION_START_2 >= 40\n#    define BOOST_PP_ITERATION_2 40\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 39 && BOOST_PP_ITERATION_START_2 >= 39\n#    define BOOST_PP_ITERATION_2 39\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 38 && BOOST_PP_ITERATION_START_2 >= 38\n#    define BOOST_PP_ITERATION_2 38\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 37 && BOOST_PP_ITERATION_START_2 >= 37\n#    define BOOST_PP_ITERATION_2 37\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 36 && BOOST_PP_ITERATION_START_2 >= 36\n#    define BOOST_PP_ITERATION_2 36\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 35 && BOOST_PP_ITERATION_START_2 >= 35\n#    define BOOST_PP_ITERATION_2 35\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 34 && BOOST_PP_ITERATION_START_2 >= 34\n#    define BOOST_PP_ITERATION_2 34\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 33 && BOOST_PP_ITERATION_START_2 >= 33\n#    define BOOST_PP_ITERATION_2 33\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 32 && BOOST_PP_ITERATION_START_2 >= 32\n#    define BOOST_PP_ITERATION_2 32\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 31 && BOOST_PP_ITERATION_START_2 >= 31\n#    define BOOST_PP_ITERATION_2 31\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 30 && BOOST_PP_ITERATION_START_2 >= 30\n#    define BOOST_PP_ITERATION_2 30\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 29 && BOOST_PP_ITERATION_START_2 >= 29\n#    define BOOST_PP_ITERATION_2 29\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 28 && BOOST_PP_ITERATION_START_2 >= 28\n#    define BOOST_PP_ITERATION_2 28\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 27 && BOOST_PP_ITERATION_START_2 >= 27\n#    define BOOST_PP_ITERATION_2 27\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 26 && BOOST_PP_ITERATION_START_2 >= 26\n#    define BOOST_PP_ITERATION_2 26\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 25 && BOOST_PP_ITERATION_START_2 >= 25\n#    define BOOST_PP_ITERATION_2 25\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 24 && BOOST_PP_ITERATION_START_2 >= 24\n#    define BOOST_PP_ITERATION_2 24\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 23 && BOOST_PP_ITERATION_START_2 >= 23\n#    define BOOST_PP_ITERATION_2 23\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 22 && BOOST_PP_ITERATION_START_2 >= 22\n#    define BOOST_PP_ITERATION_2 22\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 21 && BOOST_PP_ITERATION_START_2 >= 21\n#    define BOOST_PP_ITERATION_2 21\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 20 && BOOST_PP_ITERATION_START_2 >= 20\n#    define BOOST_PP_ITERATION_2 20\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 19 && BOOST_PP_ITERATION_START_2 >= 19\n#    define BOOST_PP_ITERATION_2 19\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 18 && BOOST_PP_ITERATION_START_2 >= 18\n#    define BOOST_PP_ITERATION_2 18\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 17 && BOOST_PP_ITERATION_START_2 >= 17\n#    define BOOST_PP_ITERATION_2 17\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 16 && BOOST_PP_ITERATION_START_2 >= 16\n#    define BOOST_PP_ITERATION_2 16\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 15 && BOOST_PP_ITERATION_START_2 >= 15\n#    define BOOST_PP_ITERATION_2 15\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 14 && BOOST_PP_ITERATION_START_2 >= 14\n#    define BOOST_PP_ITERATION_2 14\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 13 && BOOST_PP_ITERATION_START_2 >= 13\n#    define BOOST_PP_ITERATION_2 13\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 12 && BOOST_PP_ITERATION_START_2 >= 12\n#    define BOOST_PP_ITERATION_2 12\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 11 && BOOST_PP_ITERATION_START_2 >= 11\n#    define BOOST_PP_ITERATION_2 11\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 10 && BOOST_PP_ITERATION_START_2 >= 10\n#    define BOOST_PP_ITERATION_2 10\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 9 && BOOST_PP_ITERATION_START_2 >= 9\n#    define BOOST_PP_ITERATION_2 9\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 8 && BOOST_PP_ITERATION_START_2 >= 8\n#    define BOOST_PP_ITERATION_2 8\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 7 && BOOST_PP_ITERATION_START_2 >= 7\n#    define BOOST_PP_ITERATION_2 7\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 6 && BOOST_PP_ITERATION_START_2 >= 6\n#    define BOOST_PP_ITERATION_2 6\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 5 && BOOST_PP_ITERATION_START_2 >= 5\n#    define BOOST_PP_ITERATION_2 5\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 4 && BOOST_PP_ITERATION_START_2 >= 4\n#    define BOOST_PP_ITERATION_2 4\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 3 && BOOST_PP_ITERATION_START_2 >= 3\n#    define BOOST_PP_ITERATION_2 3\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 2 && BOOST_PP_ITERATION_START_2 >= 2\n#    define BOOST_PP_ITERATION_2 2\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 1 && BOOST_PP_ITERATION_START_2 >= 1\n#    define BOOST_PP_ITERATION_2 1\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n# if BOOST_PP_ITERATION_FINISH_2 <= 0 && BOOST_PP_ITERATION_START_2 >= 0\n#    define BOOST_PP_ITERATION_2 0\n#    include BOOST_PP_FILENAME_2\n#    undef BOOST_PP_ITERATION_2\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/reverse3.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if BOOST_PP_ITERATION_FINISH_3 <= 256 && BOOST_PP_ITERATION_START_3 >= 256\n#    define BOOST_PP_ITERATION_3 256\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 255 && BOOST_PP_ITERATION_START_3 >= 255\n#    define BOOST_PP_ITERATION_3 255\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 254 && BOOST_PP_ITERATION_START_3 >= 254\n#    define BOOST_PP_ITERATION_3 254\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 253 && BOOST_PP_ITERATION_START_3 >= 253\n#    define BOOST_PP_ITERATION_3 253\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 252 && BOOST_PP_ITERATION_START_3 >= 252\n#    define BOOST_PP_ITERATION_3 252\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 251 && BOOST_PP_ITERATION_START_3 >= 251\n#    define BOOST_PP_ITERATION_3 251\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 250 && BOOST_PP_ITERATION_START_3 >= 250\n#    define BOOST_PP_ITERATION_3 250\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 249 && BOOST_PP_ITERATION_START_3 >= 249\n#    define BOOST_PP_ITERATION_3 249\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 248 && BOOST_PP_ITERATION_START_3 >= 248\n#    define BOOST_PP_ITERATION_3 248\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 247 && BOOST_PP_ITERATION_START_3 >= 247\n#    define BOOST_PP_ITERATION_3 247\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 246 && BOOST_PP_ITERATION_START_3 >= 246\n#    define BOOST_PP_ITERATION_3 246\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 245 && BOOST_PP_ITERATION_START_3 >= 245\n#    define BOOST_PP_ITERATION_3 245\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 244 && BOOST_PP_ITERATION_START_3 >= 244\n#    define BOOST_PP_ITERATION_3 244\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 243 && BOOST_PP_ITERATION_START_3 >= 243\n#    define BOOST_PP_ITERATION_3 243\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 242 && BOOST_PP_ITERATION_START_3 >= 242\n#    define BOOST_PP_ITERATION_3 242\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 241 && BOOST_PP_ITERATION_START_3 >= 241\n#    define BOOST_PP_ITERATION_3 241\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 240 && BOOST_PP_ITERATION_START_3 >= 240\n#    define BOOST_PP_ITERATION_3 240\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 239 && BOOST_PP_ITERATION_START_3 >= 239\n#    define BOOST_PP_ITERATION_3 239\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 238 && BOOST_PP_ITERATION_START_3 >= 238\n#    define BOOST_PP_ITERATION_3 238\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 237 && BOOST_PP_ITERATION_START_3 >= 237\n#    define BOOST_PP_ITERATION_3 237\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 236 && BOOST_PP_ITERATION_START_3 >= 236\n#    define BOOST_PP_ITERATION_3 236\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 235 && BOOST_PP_ITERATION_START_3 >= 235\n#    define BOOST_PP_ITERATION_3 235\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 234 && BOOST_PP_ITERATION_START_3 >= 234\n#    define BOOST_PP_ITERATION_3 234\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 233 && BOOST_PP_ITERATION_START_3 >= 233\n#    define BOOST_PP_ITERATION_3 233\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 232 && BOOST_PP_ITERATION_START_3 >= 232\n#    define BOOST_PP_ITERATION_3 232\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 231 && BOOST_PP_ITERATION_START_3 >= 231\n#    define BOOST_PP_ITERATION_3 231\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 230 && BOOST_PP_ITERATION_START_3 >= 230\n#    define BOOST_PP_ITERATION_3 230\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 229 && BOOST_PP_ITERATION_START_3 >= 229\n#    define BOOST_PP_ITERATION_3 229\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 228 && BOOST_PP_ITERATION_START_3 >= 228\n#    define BOOST_PP_ITERATION_3 228\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 227 && BOOST_PP_ITERATION_START_3 >= 227\n#    define BOOST_PP_ITERATION_3 227\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 226 && BOOST_PP_ITERATION_START_3 >= 226\n#    define BOOST_PP_ITERATION_3 226\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 225 && BOOST_PP_ITERATION_START_3 >= 225\n#    define BOOST_PP_ITERATION_3 225\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 224 && BOOST_PP_ITERATION_START_3 >= 224\n#    define BOOST_PP_ITERATION_3 224\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 223 && BOOST_PP_ITERATION_START_3 >= 223\n#    define BOOST_PP_ITERATION_3 223\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 222 && BOOST_PP_ITERATION_START_3 >= 222\n#    define BOOST_PP_ITERATION_3 222\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 221 && BOOST_PP_ITERATION_START_3 >= 221\n#    define BOOST_PP_ITERATION_3 221\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 220 && BOOST_PP_ITERATION_START_3 >= 220\n#    define BOOST_PP_ITERATION_3 220\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 219 && BOOST_PP_ITERATION_START_3 >= 219\n#    define BOOST_PP_ITERATION_3 219\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 218 && BOOST_PP_ITERATION_START_3 >= 218\n#    define BOOST_PP_ITERATION_3 218\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 217 && BOOST_PP_ITERATION_START_3 >= 217\n#    define BOOST_PP_ITERATION_3 217\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 216 && BOOST_PP_ITERATION_START_3 >= 216\n#    define BOOST_PP_ITERATION_3 216\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 215 && BOOST_PP_ITERATION_START_3 >= 215\n#    define BOOST_PP_ITERATION_3 215\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 214 && BOOST_PP_ITERATION_START_3 >= 214\n#    define BOOST_PP_ITERATION_3 214\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 213 && BOOST_PP_ITERATION_START_3 >= 213\n#    define BOOST_PP_ITERATION_3 213\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 212 && BOOST_PP_ITERATION_START_3 >= 212\n#    define BOOST_PP_ITERATION_3 212\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 211 && BOOST_PP_ITERATION_START_3 >= 211\n#    define BOOST_PP_ITERATION_3 211\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 210 && BOOST_PP_ITERATION_START_3 >= 210\n#    define BOOST_PP_ITERATION_3 210\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 209 && BOOST_PP_ITERATION_START_3 >= 209\n#    define BOOST_PP_ITERATION_3 209\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 208 && BOOST_PP_ITERATION_START_3 >= 208\n#    define BOOST_PP_ITERATION_3 208\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 207 && BOOST_PP_ITERATION_START_3 >= 207\n#    define BOOST_PP_ITERATION_3 207\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 206 && BOOST_PP_ITERATION_START_3 >= 206\n#    define BOOST_PP_ITERATION_3 206\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 205 && BOOST_PP_ITERATION_START_3 >= 205\n#    define BOOST_PP_ITERATION_3 205\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 204 && BOOST_PP_ITERATION_START_3 >= 204\n#    define BOOST_PP_ITERATION_3 204\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 203 && BOOST_PP_ITERATION_START_3 >= 203\n#    define BOOST_PP_ITERATION_3 203\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 202 && BOOST_PP_ITERATION_START_3 >= 202\n#    define BOOST_PP_ITERATION_3 202\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 201 && BOOST_PP_ITERATION_START_3 >= 201\n#    define BOOST_PP_ITERATION_3 201\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 200 && BOOST_PP_ITERATION_START_3 >= 200\n#    define BOOST_PP_ITERATION_3 200\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 199 && BOOST_PP_ITERATION_START_3 >= 199\n#    define BOOST_PP_ITERATION_3 199\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 198 && BOOST_PP_ITERATION_START_3 >= 198\n#    define BOOST_PP_ITERATION_3 198\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 197 && BOOST_PP_ITERATION_START_3 >= 197\n#    define BOOST_PP_ITERATION_3 197\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 196 && BOOST_PP_ITERATION_START_3 >= 196\n#    define BOOST_PP_ITERATION_3 196\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 195 && BOOST_PP_ITERATION_START_3 >= 195\n#    define BOOST_PP_ITERATION_3 195\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 194 && BOOST_PP_ITERATION_START_3 >= 194\n#    define BOOST_PP_ITERATION_3 194\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 193 && BOOST_PP_ITERATION_START_3 >= 193\n#    define BOOST_PP_ITERATION_3 193\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 192 && BOOST_PP_ITERATION_START_3 >= 192\n#    define BOOST_PP_ITERATION_3 192\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 191 && BOOST_PP_ITERATION_START_3 >= 191\n#    define BOOST_PP_ITERATION_3 191\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 190 && BOOST_PP_ITERATION_START_3 >= 190\n#    define BOOST_PP_ITERATION_3 190\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 189 && BOOST_PP_ITERATION_START_3 >= 189\n#    define BOOST_PP_ITERATION_3 189\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 188 && BOOST_PP_ITERATION_START_3 >= 188\n#    define BOOST_PP_ITERATION_3 188\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 187 && BOOST_PP_ITERATION_START_3 >= 187\n#    define BOOST_PP_ITERATION_3 187\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 186 && BOOST_PP_ITERATION_START_3 >= 186\n#    define BOOST_PP_ITERATION_3 186\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 185 && BOOST_PP_ITERATION_START_3 >= 185\n#    define BOOST_PP_ITERATION_3 185\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 184 && BOOST_PP_ITERATION_START_3 >= 184\n#    define BOOST_PP_ITERATION_3 184\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 183 && BOOST_PP_ITERATION_START_3 >= 183\n#    define BOOST_PP_ITERATION_3 183\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 182 && BOOST_PP_ITERATION_START_3 >= 182\n#    define BOOST_PP_ITERATION_3 182\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 181 && BOOST_PP_ITERATION_START_3 >= 181\n#    define BOOST_PP_ITERATION_3 181\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 180 && BOOST_PP_ITERATION_START_3 >= 180\n#    define BOOST_PP_ITERATION_3 180\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 179 && BOOST_PP_ITERATION_START_3 >= 179\n#    define BOOST_PP_ITERATION_3 179\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 178 && BOOST_PP_ITERATION_START_3 >= 178\n#    define BOOST_PP_ITERATION_3 178\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 177 && BOOST_PP_ITERATION_START_3 >= 177\n#    define BOOST_PP_ITERATION_3 177\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 176 && BOOST_PP_ITERATION_START_3 >= 176\n#    define BOOST_PP_ITERATION_3 176\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 175 && BOOST_PP_ITERATION_START_3 >= 175\n#    define BOOST_PP_ITERATION_3 175\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 174 && BOOST_PP_ITERATION_START_3 >= 174\n#    define BOOST_PP_ITERATION_3 174\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 173 && BOOST_PP_ITERATION_START_3 >= 173\n#    define BOOST_PP_ITERATION_3 173\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 172 && BOOST_PP_ITERATION_START_3 >= 172\n#    define BOOST_PP_ITERATION_3 172\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 171 && BOOST_PP_ITERATION_START_3 >= 171\n#    define BOOST_PP_ITERATION_3 171\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 170 && BOOST_PP_ITERATION_START_3 >= 170\n#    define BOOST_PP_ITERATION_3 170\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 169 && BOOST_PP_ITERATION_START_3 >= 169\n#    define BOOST_PP_ITERATION_3 169\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 168 && BOOST_PP_ITERATION_START_3 >= 168\n#    define BOOST_PP_ITERATION_3 168\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 167 && BOOST_PP_ITERATION_START_3 >= 167\n#    define BOOST_PP_ITERATION_3 167\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 166 && BOOST_PP_ITERATION_START_3 >= 166\n#    define BOOST_PP_ITERATION_3 166\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 165 && BOOST_PP_ITERATION_START_3 >= 165\n#    define BOOST_PP_ITERATION_3 165\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 164 && BOOST_PP_ITERATION_START_3 >= 164\n#    define BOOST_PP_ITERATION_3 164\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 163 && BOOST_PP_ITERATION_START_3 >= 163\n#    define BOOST_PP_ITERATION_3 163\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 162 && BOOST_PP_ITERATION_START_3 >= 162\n#    define BOOST_PP_ITERATION_3 162\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 161 && BOOST_PP_ITERATION_START_3 >= 161\n#    define BOOST_PP_ITERATION_3 161\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 160 && BOOST_PP_ITERATION_START_3 >= 160\n#    define BOOST_PP_ITERATION_3 160\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 159 && BOOST_PP_ITERATION_START_3 >= 159\n#    define BOOST_PP_ITERATION_3 159\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 158 && BOOST_PP_ITERATION_START_3 >= 158\n#    define BOOST_PP_ITERATION_3 158\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 157 && BOOST_PP_ITERATION_START_3 >= 157\n#    define BOOST_PP_ITERATION_3 157\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 156 && BOOST_PP_ITERATION_START_3 >= 156\n#    define BOOST_PP_ITERATION_3 156\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 155 && BOOST_PP_ITERATION_START_3 >= 155\n#    define BOOST_PP_ITERATION_3 155\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 154 && BOOST_PP_ITERATION_START_3 >= 154\n#    define BOOST_PP_ITERATION_3 154\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 153 && BOOST_PP_ITERATION_START_3 >= 153\n#    define BOOST_PP_ITERATION_3 153\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 152 && BOOST_PP_ITERATION_START_3 >= 152\n#    define BOOST_PP_ITERATION_3 152\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 151 && BOOST_PP_ITERATION_START_3 >= 151\n#    define BOOST_PP_ITERATION_3 151\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 150 && BOOST_PP_ITERATION_START_3 >= 150\n#    define BOOST_PP_ITERATION_3 150\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 149 && BOOST_PP_ITERATION_START_3 >= 149\n#    define BOOST_PP_ITERATION_3 149\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 148 && BOOST_PP_ITERATION_START_3 >= 148\n#    define BOOST_PP_ITERATION_3 148\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 147 && BOOST_PP_ITERATION_START_3 >= 147\n#    define BOOST_PP_ITERATION_3 147\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 146 && BOOST_PP_ITERATION_START_3 >= 146\n#    define BOOST_PP_ITERATION_3 146\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 145 && BOOST_PP_ITERATION_START_3 >= 145\n#    define BOOST_PP_ITERATION_3 145\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 144 && BOOST_PP_ITERATION_START_3 >= 144\n#    define BOOST_PP_ITERATION_3 144\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 143 && BOOST_PP_ITERATION_START_3 >= 143\n#    define BOOST_PP_ITERATION_3 143\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 142 && BOOST_PP_ITERATION_START_3 >= 142\n#    define BOOST_PP_ITERATION_3 142\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 141 && BOOST_PP_ITERATION_START_3 >= 141\n#    define BOOST_PP_ITERATION_3 141\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 140 && BOOST_PP_ITERATION_START_3 >= 140\n#    define BOOST_PP_ITERATION_3 140\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 139 && BOOST_PP_ITERATION_START_3 >= 139\n#    define BOOST_PP_ITERATION_3 139\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 138 && BOOST_PP_ITERATION_START_3 >= 138\n#    define BOOST_PP_ITERATION_3 138\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 137 && BOOST_PP_ITERATION_START_3 >= 137\n#    define BOOST_PP_ITERATION_3 137\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 136 && BOOST_PP_ITERATION_START_3 >= 136\n#    define BOOST_PP_ITERATION_3 136\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 135 && BOOST_PP_ITERATION_START_3 >= 135\n#    define BOOST_PP_ITERATION_3 135\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 134 && BOOST_PP_ITERATION_START_3 >= 134\n#    define BOOST_PP_ITERATION_3 134\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 133 && BOOST_PP_ITERATION_START_3 >= 133\n#    define BOOST_PP_ITERATION_3 133\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 132 && BOOST_PP_ITERATION_START_3 >= 132\n#    define BOOST_PP_ITERATION_3 132\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 131 && BOOST_PP_ITERATION_START_3 >= 131\n#    define BOOST_PP_ITERATION_3 131\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 130 && BOOST_PP_ITERATION_START_3 >= 130\n#    define BOOST_PP_ITERATION_3 130\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 129 && BOOST_PP_ITERATION_START_3 >= 129\n#    define BOOST_PP_ITERATION_3 129\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 128 && BOOST_PP_ITERATION_START_3 >= 128\n#    define BOOST_PP_ITERATION_3 128\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 127 && BOOST_PP_ITERATION_START_3 >= 127\n#    define BOOST_PP_ITERATION_3 127\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 126 && BOOST_PP_ITERATION_START_3 >= 126\n#    define BOOST_PP_ITERATION_3 126\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 125 && BOOST_PP_ITERATION_START_3 >= 125\n#    define BOOST_PP_ITERATION_3 125\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 124 && BOOST_PP_ITERATION_START_3 >= 124\n#    define BOOST_PP_ITERATION_3 124\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 123 && BOOST_PP_ITERATION_START_3 >= 123\n#    define BOOST_PP_ITERATION_3 123\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 122 && BOOST_PP_ITERATION_START_3 >= 122\n#    define BOOST_PP_ITERATION_3 122\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 121 && BOOST_PP_ITERATION_START_3 >= 121\n#    define BOOST_PP_ITERATION_3 121\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 120 && BOOST_PP_ITERATION_START_3 >= 120\n#    define BOOST_PP_ITERATION_3 120\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 119 && BOOST_PP_ITERATION_START_3 >= 119\n#    define BOOST_PP_ITERATION_3 119\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 118 && BOOST_PP_ITERATION_START_3 >= 118\n#    define BOOST_PP_ITERATION_3 118\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 117 && BOOST_PP_ITERATION_START_3 >= 117\n#    define BOOST_PP_ITERATION_3 117\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 116 && BOOST_PP_ITERATION_START_3 >= 116\n#    define BOOST_PP_ITERATION_3 116\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 115 && BOOST_PP_ITERATION_START_3 >= 115\n#    define BOOST_PP_ITERATION_3 115\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 114 && BOOST_PP_ITERATION_START_3 >= 114\n#    define BOOST_PP_ITERATION_3 114\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 113 && BOOST_PP_ITERATION_START_3 >= 113\n#    define BOOST_PP_ITERATION_3 113\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 112 && BOOST_PP_ITERATION_START_3 >= 112\n#    define BOOST_PP_ITERATION_3 112\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 111 && BOOST_PP_ITERATION_START_3 >= 111\n#    define BOOST_PP_ITERATION_3 111\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 110 && BOOST_PP_ITERATION_START_3 >= 110\n#    define BOOST_PP_ITERATION_3 110\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 109 && BOOST_PP_ITERATION_START_3 >= 109\n#    define BOOST_PP_ITERATION_3 109\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 108 && BOOST_PP_ITERATION_START_3 >= 108\n#    define BOOST_PP_ITERATION_3 108\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 107 && BOOST_PP_ITERATION_START_3 >= 107\n#    define BOOST_PP_ITERATION_3 107\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 106 && BOOST_PP_ITERATION_START_3 >= 106\n#    define BOOST_PP_ITERATION_3 106\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 105 && BOOST_PP_ITERATION_START_3 >= 105\n#    define BOOST_PP_ITERATION_3 105\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 104 && BOOST_PP_ITERATION_START_3 >= 104\n#    define BOOST_PP_ITERATION_3 104\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 103 && BOOST_PP_ITERATION_START_3 >= 103\n#    define BOOST_PP_ITERATION_3 103\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 102 && BOOST_PP_ITERATION_START_3 >= 102\n#    define BOOST_PP_ITERATION_3 102\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 101 && BOOST_PP_ITERATION_START_3 >= 101\n#    define BOOST_PP_ITERATION_3 101\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 100 && BOOST_PP_ITERATION_START_3 >= 100\n#    define BOOST_PP_ITERATION_3 100\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 99 && BOOST_PP_ITERATION_START_3 >= 99\n#    define BOOST_PP_ITERATION_3 99\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 98 && BOOST_PP_ITERATION_START_3 >= 98\n#    define BOOST_PP_ITERATION_3 98\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 97 && BOOST_PP_ITERATION_START_3 >= 97\n#    define BOOST_PP_ITERATION_3 97\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 96 && BOOST_PP_ITERATION_START_3 >= 96\n#    define BOOST_PP_ITERATION_3 96\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 95 && BOOST_PP_ITERATION_START_3 >= 95\n#    define BOOST_PP_ITERATION_3 95\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 94 && BOOST_PP_ITERATION_START_3 >= 94\n#    define BOOST_PP_ITERATION_3 94\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 93 && BOOST_PP_ITERATION_START_3 >= 93\n#    define BOOST_PP_ITERATION_3 93\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 92 && BOOST_PP_ITERATION_START_3 >= 92\n#    define BOOST_PP_ITERATION_3 92\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 91 && BOOST_PP_ITERATION_START_3 >= 91\n#    define BOOST_PP_ITERATION_3 91\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 90 && BOOST_PP_ITERATION_START_3 >= 90\n#    define BOOST_PP_ITERATION_3 90\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 89 && BOOST_PP_ITERATION_START_3 >= 89\n#    define BOOST_PP_ITERATION_3 89\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 88 && BOOST_PP_ITERATION_START_3 >= 88\n#    define BOOST_PP_ITERATION_3 88\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 87 && BOOST_PP_ITERATION_START_3 >= 87\n#    define BOOST_PP_ITERATION_3 87\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 86 && BOOST_PP_ITERATION_START_3 >= 86\n#    define BOOST_PP_ITERATION_3 86\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 85 && BOOST_PP_ITERATION_START_3 >= 85\n#    define BOOST_PP_ITERATION_3 85\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 84 && BOOST_PP_ITERATION_START_3 >= 84\n#    define BOOST_PP_ITERATION_3 84\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 83 && BOOST_PP_ITERATION_START_3 >= 83\n#    define BOOST_PP_ITERATION_3 83\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 82 && BOOST_PP_ITERATION_START_3 >= 82\n#    define BOOST_PP_ITERATION_3 82\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 81 && BOOST_PP_ITERATION_START_3 >= 81\n#    define BOOST_PP_ITERATION_3 81\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 80 && BOOST_PP_ITERATION_START_3 >= 80\n#    define BOOST_PP_ITERATION_3 80\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 79 && BOOST_PP_ITERATION_START_3 >= 79\n#    define BOOST_PP_ITERATION_3 79\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 78 && BOOST_PP_ITERATION_START_3 >= 78\n#    define BOOST_PP_ITERATION_3 78\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 77 && BOOST_PP_ITERATION_START_3 >= 77\n#    define BOOST_PP_ITERATION_3 77\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 76 && BOOST_PP_ITERATION_START_3 >= 76\n#    define BOOST_PP_ITERATION_3 76\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 75 && BOOST_PP_ITERATION_START_3 >= 75\n#    define BOOST_PP_ITERATION_3 75\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 74 && BOOST_PP_ITERATION_START_3 >= 74\n#    define BOOST_PP_ITERATION_3 74\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 73 && BOOST_PP_ITERATION_START_3 >= 73\n#    define BOOST_PP_ITERATION_3 73\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 72 && BOOST_PP_ITERATION_START_3 >= 72\n#    define BOOST_PP_ITERATION_3 72\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 71 && BOOST_PP_ITERATION_START_3 >= 71\n#    define BOOST_PP_ITERATION_3 71\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 70 && BOOST_PP_ITERATION_START_3 >= 70\n#    define BOOST_PP_ITERATION_3 70\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 69 && BOOST_PP_ITERATION_START_3 >= 69\n#    define BOOST_PP_ITERATION_3 69\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 68 && BOOST_PP_ITERATION_START_3 >= 68\n#    define BOOST_PP_ITERATION_3 68\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 67 && BOOST_PP_ITERATION_START_3 >= 67\n#    define BOOST_PP_ITERATION_3 67\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 66 && BOOST_PP_ITERATION_START_3 >= 66\n#    define BOOST_PP_ITERATION_3 66\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 65 && BOOST_PP_ITERATION_START_3 >= 65\n#    define BOOST_PP_ITERATION_3 65\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 64 && BOOST_PP_ITERATION_START_3 >= 64\n#    define BOOST_PP_ITERATION_3 64\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 63 && BOOST_PP_ITERATION_START_3 >= 63\n#    define BOOST_PP_ITERATION_3 63\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 62 && BOOST_PP_ITERATION_START_3 >= 62\n#    define BOOST_PP_ITERATION_3 62\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 61 && BOOST_PP_ITERATION_START_3 >= 61\n#    define BOOST_PP_ITERATION_3 61\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 60 && BOOST_PP_ITERATION_START_3 >= 60\n#    define BOOST_PP_ITERATION_3 60\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 59 && BOOST_PP_ITERATION_START_3 >= 59\n#    define BOOST_PP_ITERATION_3 59\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 58 && BOOST_PP_ITERATION_START_3 >= 58\n#    define BOOST_PP_ITERATION_3 58\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 57 && BOOST_PP_ITERATION_START_3 >= 57\n#    define BOOST_PP_ITERATION_3 57\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 56 && BOOST_PP_ITERATION_START_3 >= 56\n#    define BOOST_PP_ITERATION_3 56\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 55 && BOOST_PP_ITERATION_START_3 >= 55\n#    define BOOST_PP_ITERATION_3 55\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 54 && BOOST_PP_ITERATION_START_3 >= 54\n#    define BOOST_PP_ITERATION_3 54\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 53 && BOOST_PP_ITERATION_START_3 >= 53\n#    define BOOST_PP_ITERATION_3 53\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 52 && BOOST_PP_ITERATION_START_3 >= 52\n#    define BOOST_PP_ITERATION_3 52\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 51 && BOOST_PP_ITERATION_START_3 >= 51\n#    define BOOST_PP_ITERATION_3 51\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 50 && BOOST_PP_ITERATION_START_3 >= 50\n#    define BOOST_PP_ITERATION_3 50\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 49 && BOOST_PP_ITERATION_START_3 >= 49\n#    define BOOST_PP_ITERATION_3 49\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 48 && BOOST_PP_ITERATION_START_3 >= 48\n#    define BOOST_PP_ITERATION_3 48\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 47 && BOOST_PP_ITERATION_START_3 >= 47\n#    define BOOST_PP_ITERATION_3 47\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 46 && BOOST_PP_ITERATION_START_3 >= 46\n#    define BOOST_PP_ITERATION_3 46\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 45 && BOOST_PP_ITERATION_START_3 >= 45\n#    define BOOST_PP_ITERATION_3 45\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 44 && BOOST_PP_ITERATION_START_3 >= 44\n#    define BOOST_PP_ITERATION_3 44\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 43 && BOOST_PP_ITERATION_START_3 >= 43\n#    define BOOST_PP_ITERATION_3 43\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 42 && BOOST_PP_ITERATION_START_3 >= 42\n#    define BOOST_PP_ITERATION_3 42\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 41 && BOOST_PP_ITERATION_START_3 >= 41\n#    define BOOST_PP_ITERATION_3 41\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 40 && BOOST_PP_ITERATION_START_3 >= 40\n#    define BOOST_PP_ITERATION_3 40\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 39 && BOOST_PP_ITERATION_START_3 >= 39\n#    define BOOST_PP_ITERATION_3 39\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 38 && BOOST_PP_ITERATION_START_3 >= 38\n#    define BOOST_PP_ITERATION_3 38\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 37 && BOOST_PP_ITERATION_START_3 >= 37\n#    define BOOST_PP_ITERATION_3 37\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 36 && BOOST_PP_ITERATION_START_3 >= 36\n#    define BOOST_PP_ITERATION_3 36\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 35 && BOOST_PP_ITERATION_START_3 >= 35\n#    define BOOST_PP_ITERATION_3 35\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 34 && BOOST_PP_ITERATION_START_3 >= 34\n#    define BOOST_PP_ITERATION_3 34\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 33 && BOOST_PP_ITERATION_START_3 >= 33\n#    define BOOST_PP_ITERATION_3 33\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 32 && BOOST_PP_ITERATION_START_3 >= 32\n#    define BOOST_PP_ITERATION_3 32\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 31 && BOOST_PP_ITERATION_START_3 >= 31\n#    define BOOST_PP_ITERATION_3 31\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 30 && BOOST_PP_ITERATION_START_3 >= 30\n#    define BOOST_PP_ITERATION_3 30\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 29 && BOOST_PP_ITERATION_START_3 >= 29\n#    define BOOST_PP_ITERATION_3 29\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 28 && BOOST_PP_ITERATION_START_3 >= 28\n#    define BOOST_PP_ITERATION_3 28\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 27 && BOOST_PP_ITERATION_START_3 >= 27\n#    define BOOST_PP_ITERATION_3 27\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 26 && BOOST_PP_ITERATION_START_3 >= 26\n#    define BOOST_PP_ITERATION_3 26\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 25 && BOOST_PP_ITERATION_START_3 >= 25\n#    define BOOST_PP_ITERATION_3 25\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 24 && BOOST_PP_ITERATION_START_3 >= 24\n#    define BOOST_PP_ITERATION_3 24\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 23 && BOOST_PP_ITERATION_START_3 >= 23\n#    define BOOST_PP_ITERATION_3 23\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 22 && BOOST_PP_ITERATION_START_3 >= 22\n#    define BOOST_PP_ITERATION_3 22\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 21 && BOOST_PP_ITERATION_START_3 >= 21\n#    define BOOST_PP_ITERATION_3 21\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 20 && BOOST_PP_ITERATION_START_3 >= 20\n#    define BOOST_PP_ITERATION_3 20\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 19 && BOOST_PP_ITERATION_START_3 >= 19\n#    define BOOST_PP_ITERATION_3 19\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 18 && BOOST_PP_ITERATION_START_3 >= 18\n#    define BOOST_PP_ITERATION_3 18\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 17 && BOOST_PP_ITERATION_START_3 >= 17\n#    define BOOST_PP_ITERATION_3 17\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 16 && BOOST_PP_ITERATION_START_3 >= 16\n#    define BOOST_PP_ITERATION_3 16\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 15 && BOOST_PP_ITERATION_START_3 >= 15\n#    define BOOST_PP_ITERATION_3 15\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 14 && BOOST_PP_ITERATION_START_3 >= 14\n#    define BOOST_PP_ITERATION_3 14\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 13 && BOOST_PP_ITERATION_START_3 >= 13\n#    define BOOST_PP_ITERATION_3 13\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 12 && BOOST_PP_ITERATION_START_3 >= 12\n#    define BOOST_PP_ITERATION_3 12\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 11 && BOOST_PP_ITERATION_START_3 >= 11\n#    define BOOST_PP_ITERATION_3 11\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 10 && BOOST_PP_ITERATION_START_3 >= 10\n#    define BOOST_PP_ITERATION_3 10\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 9 && BOOST_PP_ITERATION_START_3 >= 9\n#    define BOOST_PP_ITERATION_3 9\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 8 && BOOST_PP_ITERATION_START_3 >= 8\n#    define BOOST_PP_ITERATION_3 8\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 7 && BOOST_PP_ITERATION_START_3 >= 7\n#    define BOOST_PP_ITERATION_3 7\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 6 && BOOST_PP_ITERATION_START_3 >= 6\n#    define BOOST_PP_ITERATION_3 6\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 5 && BOOST_PP_ITERATION_START_3 >= 5\n#    define BOOST_PP_ITERATION_3 5\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 4 && BOOST_PP_ITERATION_START_3 >= 4\n#    define BOOST_PP_ITERATION_3 4\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 3 && BOOST_PP_ITERATION_START_3 >= 3\n#    define BOOST_PP_ITERATION_3 3\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 2 && BOOST_PP_ITERATION_START_3 >= 2\n#    define BOOST_PP_ITERATION_3 2\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 1 && BOOST_PP_ITERATION_START_3 >= 1\n#    define BOOST_PP_ITERATION_3 1\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n# if BOOST_PP_ITERATION_FINISH_3 <= 0 && BOOST_PP_ITERATION_START_3 >= 0\n#    define BOOST_PP_ITERATION_3 0\n#    include BOOST_PP_FILENAME_3\n#    undef BOOST_PP_ITERATION_3\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/reverse4.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if BOOST_PP_ITERATION_FINISH_4 <= 256 && BOOST_PP_ITERATION_START_4 >= 256\n#    define BOOST_PP_ITERATION_4 256\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 255 && BOOST_PP_ITERATION_START_4 >= 255\n#    define BOOST_PP_ITERATION_4 255\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 254 && BOOST_PP_ITERATION_START_4 >= 254\n#    define BOOST_PP_ITERATION_4 254\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 253 && BOOST_PP_ITERATION_START_4 >= 253\n#    define BOOST_PP_ITERATION_4 253\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 252 && BOOST_PP_ITERATION_START_4 >= 252\n#    define BOOST_PP_ITERATION_4 252\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 251 && BOOST_PP_ITERATION_START_4 >= 251\n#    define BOOST_PP_ITERATION_4 251\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 250 && BOOST_PP_ITERATION_START_4 >= 250\n#    define BOOST_PP_ITERATION_4 250\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 249 && BOOST_PP_ITERATION_START_4 >= 249\n#    define BOOST_PP_ITERATION_4 249\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 248 && BOOST_PP_ITERATION_START_4 >= 248\n#    define BOOST_PP_ITERATION_4 248\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 247 && BOOST_PP_ITERATION_START_4 >= 247\n#    define BOOST_PP_ITERATION_4 247\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 246 && BOOST_PP_ITERATION_START_4 >= 246\n#    define BOOST_PP_ITERATION_4 246\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 245 && BOOST_PP_ITERATION_START_4 >= 245\n#    define BOOST_PP_ITERATION_4 245\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 244 && BOOST_PP_ITERATION_START_4 >= 244\n#    define BOOST_PP_ITERATION_4 244\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 243 && BOOST_PP_ITERATION_START_4 >= 243\n#    define BOOST_PP_ITERATION_4 243\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 242 && BOOST_PP_ITERATION_START_4 >= 242\n#    define BOOST_PP_ITERATION_4 242\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 241 && BOOST_PP_ITERATION_START_4 >= 241\n#    define BOOST_PP_ITERATION_4 241\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 240 && BOOST_PP_ITERATION_START_4 >= 240\n#    define BOOST_PP_ITERATION_4 240\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 239 && BOOST_PP_ITERATION_START_4 >= 239\n#    define BOOST_PP_ITERATION_4 239\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 238 && BOOST_PP_ITERATION_START_4 >= 238\n#    define BOOST_PP_ITERATION_4 238\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 237 && BOOST_PP_ITERATION_START_4 >= 237\n#    define BOOST_PP_ITERATION_4 237\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 236 && BOOST_PP_ITERATION_START_4 >= 236\n#    define BOOST_PP_ITERATION_4 236\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 235 && BOOST_PP_ITERATION_START_4 >= 235\n#    define BOOST_PP_ITERATION_4 235\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 234 && BOOST_PP_ITERATION_START_4 >= 234\n#    define BOOST_PP_ITERATION_4 234\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 233 && BOOST_PP_ITERATION_START_4 >= 233\n#    define BOOST_PP_ITERATION_4 233\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 232 && BOOST_PP_ITERATION_START_4 >= 232\n#    define BOOST_PP_ITERATION_4 232\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 231 && BOOST_PP_ITERATION_START_4 >= 231\n#    define BOOST_PP_ITERATION_4 231\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 230 && BOOST_PP_ITERATION_START_4 >= 230\n#    define BOOST_PP_ITERATION_4 230\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 229 && BOOST_PP_ITERATION_START_4 >= 229\n#    define BOOST_PP_ITERATION_4 229\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 228 && BOOST_PP_ITERATION_START_4 >= 228\n#    define BOOST_PP_ITERATION_4 228\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 227 && BOOST_PP_ITERATION_START_4 >= 227\n#    define BOOST_PP_ITERATION_4 227\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 226 && BOOST_PP_ITERATION_START_4 >= 226\n#    define BOOST_PP_ITERATION_4 226\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 225 && BOOST_PP_ITERATION_START_4 >= 225\n#    define BOOST_PP_ITERATION_4 225\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 224 && BOOST_PP_ITERATION_START_4 >= 224\n#    define BOOST_PP_ITERATION_4 224\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 223 && BOOST_PP_ITERATION_START_4 >= 223\n#    define BOOST_PP_ITERATION_4 223\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 222 && BOOST_PP_ITERATION_START_4 >= 222\n#    define BOOST_PP_ITERATION_4 222\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 221 && BOOST_PP_ITERATION_START_4 >= 221\n#    define BOOST_PP_ITERATION_4 221\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 220 && BOOST_PP_ITERATION_START_4 >= 220\n#    define BOOST_PP_ITERATION_4 220\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 219 && BOOST_PP_ITERATION_START_4 >= 219\n#    define BOOST_PP_ITERATION_4 219\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 218 && BOOST_PP_ITERATION_START_4 >= 218\n#    define BOOST_PP_ITERATION_4 218\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 217 && BOOST_PP_ITERATION_START_4 >= 217\n#    define BOOST_PP_ITERATION_4 217\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 216 && BOOST_PP_ITERATION_START_4 >= 216\n#    define BOOST_PP_ITERATION_4 216\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 215 && BOOST_PP_ITERATION_START_4 >= 215\n#    define BOOST_PP_ITERATION_4 215\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 214 && BOOST_PP_ITERATION_START_4 >= 214\n#    define BOOST_PP_ITERATION_4 214\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 213 && BOOST_PP_ITERATION_START_4 >= 213\n#    define BOOST_PP_ITERATION_4 213\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 212 && BOOST_PP_ITERATION_START_4 >= 212\n#    define BOOST_PP_ITERATION_4 212\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 211 && BOOST_PP_ITERATION_START_4 >= 211\n#    define BOOST_PP_ITERATION_4 211\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 210 && BOOST_PP_ITERATION_START_4 >= 210\n#    define BOOST_PP_ITERATION_4 210\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 209 && BOOST_PP_ITERATION_START_4 >= 209\n#    define BOOST_PP_ITERATION_4 209\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 208 && BOOST_PP_ITERATION_START_4 >= 208\n#    define BOOST_PP_ITERATION_4 208\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 207 && BOOST_PP_ITERATION_START_4 >= 207\n#    define BOOST_PP_ITERATION_4 207\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 206 && BOOST_PP_ITERATION_START_4 >= 206\n#    define BOOST_PP_ITERATION_4 206\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 205 && BOOST_PP_ITERATION_START_4 >= 205\n#    define BOOST_PP_ITERATION_4 205\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 204 && BOOST_PP_ITERATION_START_4 >= 204\n#    define BOOST_PP_ITERATION_4 204\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 203 && BOOST_PP_ITERATION_START_4 >= 203\n#    define BOOST_PP_ITERATION_4 203\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 202 && BOOST_PP_ITERATION_START_4 >= 202\n#    define BOOST_PP_ITERATION_4 202\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 201 && BOOST_PP_ITERATION_START_4 >= 201\n#    define BOOST_PP_ITERATION_4 201\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 200 && BOOST_PP_ITERATION_START_4 >= 200\n#    define BOOST_PP_ITERATION_4 200\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 199 && BOOST_PP_ITERATION_START_4 >= 199\n#    define BOOST_PP_ITERATION_4 199\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 198 && BOOST_PP_ITERATION_START_4 >= 198\n#    define BOOST_PP_ITERATION_4 198\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 197 && BOOST_PP_ITERATION_START_4 >= 197\n#    define BOOST_PP_ITERATION_4 197\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 196 && BOOST_PP_ITERATION_START_4 >= 196\n#    define BOOST_PP_ITERATION_4 196\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 195 && BOOST_PP_ITERATION_START_4 >= 195\n#    define BOOST_PP_ITERATION_4 195\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 194 && BOOST_PP_ITERATION_START_4 >= 194\n#    define BOOST_PP_ITERATION_4 194\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 193 && BOOST_PP_ITERATION_START_4 >= 193\n#    define BOOST_PP_ITERATION_4 193\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 192 && BOOST_PP_ITERATION_START_4 >= 192\n#    define BOOST_PP_ITERATION_4 192\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 191 && BOOST_PP_ITERATION_START_4 >= 191\n#    define BOOST_PP_ITERATION_4 191\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 190 && BOOST_PP_ITERATION_START_4 >= 190\n#    define BOOST_PP_ITERATION_4 190\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 189 && BOOST_PP_ITERATION_START_4 >= 189\n#    define BOOST_PP_ITERATION_4 189\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 188 && BOOST_PP_ITERATION_START_4 >= 188\n#    define BOOST_PP_ITERATION_4 188\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 187 && BOOST_PP_ITERATION_START_4 >= 187\n#    define BOOST_PP_ITERATION_4 187\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 186 && BOOST_PP_ITERATION_START_4 >= 186\n#    define BOOST_PP_ITERATION_4 186\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 185 && BOOST_PP_ITERATION_START_4 >= 185\n#    define BOOST_PP_ITERATION_4 185\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 184 && BOOST_PP_ITERATION_START_4 >= 184\n#    define BOOST_PP_ITERATION_4 184\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 183 && BOOST_PP_ITERATION_START_4 >= 183\n#    define BOOST_PP_ITERATION_4 183\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 182 && BOOST_PP_ITERATION_START_4 >= 182\n#    define BOOST_PP_ITERATION_4 182\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 181 && BOOST_PP_ITERATION_START_4 >= 181\n#    define BOOST_PP_ITERATION_4 181\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 180 && BOOST_PP_ITERATION_START_4 >= 180\n#    define BOOST_PP_ITERATION_4 180\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 179 && BOOST_PP_ITERATION_START_4 >= 179\n#    define BOOST_PP_ITERATION_4 179\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 178 && BOOST_PP_ITERATION_START_4 >= 178\n#    define BOOST_PP_ITERATION_4 178\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 177 && BOOST_PP_ITERATION_START_4 >= 177\n#    define BOOST_PP_ITERATION_4 177\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 176 && BOOST_PP_ITERATION_START_4 >= 176\n#    define BOOST_PP_ITERATION_4 176\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 175 && BOOST_PP_ITERATION_START_4 >= 175\n#    define BOOST_PP_ITERATION_4 175\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 174 && BOOST_PP_ITERATION_START_4 >= 174\n#    define BOOST_PP_ITERATION_4 174\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 173 && BOOST_PP_ITERATION_START_4 >= 173\n#    define BOOST_PP_ITERATION_4 173\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 172 && BOOST_PP_ITERATION_START_4 >= 172\n#    define BOOST_PP_ITERATION_4 172\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 171 && BOOST_PP_ITERATION_START_4 >= 171\n#    define BOOST_PP_ITERATION_4 171\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 170 && BOOST_PP_ITERATION_START_4 >= 170\n#    define BOOST_PP_ITERATION_4 170\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 169 && BOOST_PP_ITERATION_START_4 >= 169\n#    define BOOST_PP_ITERATION_4 169\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 168 && BOOST_PP_ITERATION_START_4 >= 168\n#    define BOOST_PP_ITERATION_4 168\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 167 && BOOST_PP_ITERATION_START_4 >= 167\n#    define BOOST_PP_ITERATION_4 167\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 166 && BOOST_PP_ITERATION_START_4 >= 166\n#    define BOOST_PP_ITERATION_4 166\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 165 && BOOST_PP_ITERATION_START_4 >= 165\n#    define BOOST_PP_ITERATION_4 165\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 164 && BOOST_PP_ITERATION_START_4 >= 164\n#    define BOOST_PP_ITERATION_4 164\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 163 && BOOST_PP_ITERATION_START_4 >= 163\n#    define BOOST_PP_ITERATION_4 163\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 162 && BOOST_PP_ITERATION_START_4 >= 162\n#    define BOOST_PP_ITERATION_4 162\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 161 && BOOST_PP_ITERATION_START_4 >= 161\n#    define BOOST_PP_ITERATION_4 161\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 160 && BOOST_PP_ITERATION_START_4 >= 160\n#    define BOOST_PP_ITERATION_4 160\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 159 && BOOST_PP_ITERATION_START_4 >= 159\n#    define BOOST_PP_ITERATION_4 159\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 158 && BOOST_PP_ITERATION_START_4 >= 158\n#    define BOOST_PP_ITERATION_4 158\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 157 && BOOST_PP_ITERATION_START_4 >= 157\n#    define BOOST_PP_ITERATION_4 157\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 156 && BOOST_PP_ITERATION_START_4 >= 156\n#    define BOOST_PP_ITERATION_4 156\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 155 && BOOST_PP_ITERATION_START_4 >= 155\n#    define BOOST_PP_ITERATION_4 155\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 154 && BOOST_PP_ITERATION_START_4 >= 154\n#    define BOOST_PP_ITERATION_4 154\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 153 && BOOST_PP_ITERATION_START_4 >= 153\n#    define BOOST_PP_ITERATION_4 153\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 152 && BOOST_PP_ITERATION_START_4 >= 152\n#    define BOOST_PP_ITERATION_4 152\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 151 && BOOST_PP_ITERATION_START_4 >= 151\n#    define BOOST_PP_ITERATION_4 151\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 150 && BOOST_PP_ITERATION_START_4 >= 150\n#    define BOOST_PP_ITERATION_4 150\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 149 && BOOST_PP_ITERATION_START_4 >= 149\n#    define BOOST_PP_ITERATION_4 149\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 148 && BOOST_PP_ITERATION_START_4 >= 148\n#    define BOOST_PP_ITERATION_4 148\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 147 && BOOST_PP_ITERATION_START_4 >= 147\n#    define BOOST_PP_ITERATION_4 147\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 146 && BOOST_PP_ITERATION_START_4 >= 146\n#    define BOOST_PP_ITERATION_4 146\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 145 && BOOST_PP_ITERATION_START_4 >= 145\n#    define BOOST_PP_ITERATION_4 145\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 144 && BOOST_PP_ITERATION_START_4 >= 144\n#    define BOOST_PP_ITERATION_4 144\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 143 && BOOST_PP_ITERATION_START_4 >= 143\n#    define BOOST_PP_ITERATION_4 143\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 142 && BOOST_PP_ITERATION_START_4 >= 142\n#    define BOOST_PP_ITERATION_4 142\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 141 && BOOST_PP_ITERATION_START_4 >= 141\n#    define BOOST_PP_ITERATION_4 141\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 140 && BOOST_PP_ITERATION_START_4 >= 140\n#    define BOOST_PP_ITERATION_4 140\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 139 && BOOST_PP_ITERATION_START_4 >= 139\n#    define BOOST_PP_ITERATION_4 139\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 138 && BOOST_PP_ITERATION_START_4 >= 138\n#    define BOOST_PP_ITERATION_4 138\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 137 && BOOST_PP_ITERATION_START_4 >= 137\n#    define BOOST_PP_ITERATION_4 137\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 136 && BOOST_PP_ITERATION_START_4 >= 136\n#    define BOOST_PP_ITERATION_4 136\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 135 && BOOST_PP_ITERATION_START_4 >= 135\n#    define BOOST_PP_ITERATION_4 135\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 134 && BOOST_PP_ITERATION_START_4 >= 134\n#    define BOOST_PP_ITERATION_4 134\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 133 && BOOST_PP_ITERATION_START_4 >= 133\n#    define BOOST_PP_ITERATION_4 133\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 132 && BOOST_PP_ITERATION_START_4 >= 132\n#    define BOOST_PP_ITERATION_4 132\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 131 && BOOST_PP_ITERATION_START_4 >= 131\n#    define BOOST_PP_ITERATION_4 131\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 130 && BOOST_PP_ITERATION_START_4 >= 130\n#    define BOOST_PP_ITERATION_4 130\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 129 && BOOST_PP_ITERATION_START_4 >= 129\n#    define BOOST_PP_ITERATION_4 129\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 128 && BOOST_PP_ITERATION_START_4 >= 128\n#    define BOOST_PP_ITERATION_4 128\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 127 && BOOST_PP_ITERATION_START_4 >= 127\n#    define BOOST_PP_ITERATION_4 127\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 126 && BOOST_PP_ITERATION_START_4 >= 126\n#    define BOOST_PP_ITERATION_4 126\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 125 && BOOST_PP_ITERATION_START_4 >= 125\n#    define BOOST_PP_ITERATION_4 125\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 124 && BOOST_PP_ITERATION_START_4 >= 124\n#    define BOOST_PP_ITERATION_4 124\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 123 && BOOST_PP_ITERATION_START_4 >= 123\n#    define BOOST_PP_ITERATION_4 123\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 122 && BOOST_PP_ITERATION_START_4 >= 122\n#    define BOOST_PP_ITERATION_4 122\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 121 && BOOST_PP_ITERATION_START_4 >= 121\n#    define BOOST_PP_ITERATION_4 121\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 120 && BOOST_PP_ITERATION_START_4 >= 120\n#    define BOOST_PP_ITERATION_4 120\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 119 && BOOST_PP_ITERATION_START_4 >= 119\n#    define BOOST_PP_ITERATION_4 119\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 118 && BOOST_PP_ITERATION_START_4 >= 118\n#    define BOOST_PP_ITERATION_4 118\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 117 && BOOST_PP_ITERATION_START_4 >= 117\n#    define BOOST_PP_ITERATION_4 117\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 116 && BOOST_PP_ITERATION_START_4 >= 116\n#    define BOOST_PP_ITERATION_4 116\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 115 && BOOST_PP_ITERATION_START_4 >= 115\n#    define BOOST_PP_ITERATION_4 115\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 114 && BOOST_PP_ITERATION_START_4 >= 114\n#    define BOOST_PP_ITERATION_4 114\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 113 && BOOST_PP_ITERATION_START_4 >= 113\n#    define BOOST_PP_ITERATION_4 113\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 112 && BOOST_PP_ITERATION_START_4 >= 112\n#    define BOOST_PP_ITERATION_4 112\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 111 && BOOST_PP_ITERATION_START_4 >= 111\n#    define BOOST_PP_ITERATION_4 111\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 110 && BOOST_PP_ITERATION_START_4 >= 110\n#    define BOOST_PP_ITERATION_4 110\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 109 && BOOST_PP_ITERATION_START_4 >= 109\n#    define BOOST_PP_ITERATION_4 109\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 108 && BOOST_PP_ITERATION_START_4 >= 108\n#    define BOOST_PP_ITERATION_4 108\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 107 && BOOST_PP_ITERATION_START_4 >= 107\n#    define BOOST_PP_ITERATION_4 107\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 106 && BOOST_PP_ITERATION_START_4 >= 106\n#    define BOOST_PP_ITERATION_4 106\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 105 && BOOST_PP_ITERATION_START_4 >= 105\n#    define BOOST_PP_ITERATION_4 105\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 104 && BOOST_PP_ITERATION_START_4 >= 104\n#    define BOOST_PP_ITERATION_4 104\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 103 && BOOST_PP_ITERATION_START_4 >= 103\n#    define BOOST_PP_ITERATION_4 103\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 102 && BOOST_PP_ITERATION_START_4 >= 102\n#    define BOOST_PP_ITERATION_4 102\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 101 && BOOST_PP_ITERATION_START_4 >= 101\n#    define BOOST_PP_ITERATION_4 101\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 100 && BOOST_PP_ITERATION_START_4 >= 100\n#    define BOOST_PP_ITERATION_4 100\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 99 && BOOST_PP_ITERATION_START_4 >= 99\n#    define BOOST_PP_ITERATION_4 99\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 98 && BOOST_PP_ITERATION_START_4 >= 98\n#    define BOOST_PP_ITERATION_4 98\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 97 && BOOST_PP_ITERATION_START_4 >= 97\n#    define BOOST_PP_ITERATION_4 97\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 96 && BOOST_PP_ITERATION_START_4 >= 96\n#    define BOOST_PP_ITERATION_4 96\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 95 && BOOST_PP_ITERATION_START_4 >= 95\n#    define BOOST_PP_ITERATION_4 95\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 94 && BOOST_PP_ITERATION_START_4 >= 94\n#    define BOOST_PP_ITERATION_4 94\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 93 && BOOST_PP_ITERATION_START_4 >= 93\n#    define BOOST_PP_ITERATION_4 93\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 92 && BOOST_PP_ITERATION_START_4 >= 92\n#    define BOOST_PP_ITERATION_4 92\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 91 && BOOST_PP_ITERATION_START_4 >= 91\n#    define BOOST_PP_ITERATION_4 91\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 90 && BOOST_PP_ITERATION_START_4 >= 90\n#    define BOOST_PP_ITERATION_4 90\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 89 && BOOST_PP_ITERATION_START_4 >= 89\n#    define BOOST_PP_ITERATION_4 89\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 88 && BOOST_PP_ITERATION_START_4 >= 88\n#    define BOOST_PP_ITERATION_4 88\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 87 && BOOST_PP_ITERATION_START_4 >= 87\n#    define BOOST_PP_ITERATION_4 87\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 86 && BOOST_PP_ITERATION_START_4 >= 86\n#    define BOOST_PP_ITERATION_4 86\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 85 && BOOST_PP_ITERATION_START_4 >= 85\n#    define BOOST_PP_ITERATION_4 85\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 84 && BOOST_PP_ITERATION_START_4 >= 84\n#    define BOOST_PP_ITERATION_4 84\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 83 && BOOST_PP_ITERATION_START_4 >= 83\n#    define BOOST_PP_ITERATION_4 83\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 82 && BOOST_PP_ITERATION_START_4 >= 82\n#    define BOOST_PP_ITERATION_4 82\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 81 && BOOST_PP_ITERATION_START_4 >= 81\n#    define BOOST_PP_ITERATION_4 81\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 80 && BOOST_PP_ITERATION_START_4 >= 80\n#    define BOOST_PP_ITERATION_4 80\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 79 && BOOST_PP_ITERATION_START_4 >= 79\n#    define BOOST_PP_ITERATION_4 79\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 78 && BOOST_PP_ITERATION_START_4 >= 78\n#    define BOOST_PP_ITERATION_4 78\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 77 && BOOST_PP_ITERATION_START_4 >= 77\n#    define BOOST_PP_ITERATION_4 77\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 76 && BOOST_PP_ITERATION_START_4 >= 76\n#    define BOOST_PP_ITERATION_4 76\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 75 && BOOST_PP_ITERATION_START_4 >= 75\n#    define BOOST_PP_ITERATION_4 75\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 74 && BOOST_PP_ITERATION_START_4 >= 74\n#    define BOOST_PP_ITERATION_4 74\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 73 && BOOST_PP_ITERATION_START_4 >= 73\n#    define BOOST_PP_ITERATION_4 73\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 72 && BOOST_PP_ITERATION_START_4 >= 72\n#    define BOOST_PP_ITERATION_4 72\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 71 && BOOST_PP_ITERATION_START_4 >= 71\n#    define BOOST_PP_ITERATION_4 71\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 70 && BOOST_PP_ITERATION_START_4 >= 70\n#    define BOOST_PP_ITERATION_4 70\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 69 && BOOST_PP_ITERATION_START_4 >= 69\n#    define BOOST_PP_ITERATION_4 69\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 68 && BOOST_PP_ITERATION_START_4 >= 68\n#    define BOOST_PP_ITERATION_4 68\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 67 && BOOST_PP_ITERATION_START_4 >= 67\n#    define BOOST_PP_ITERATION_4 67\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 66 && BOOST_PP_ITERATION_START_4 >= 66\n#    define BOOST_PP_ITERATION_4 66\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 65 && BOOST_PP_ITERATION_START_4 >= 65\n#    define BOOST_PP_ITERATION_4 65\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 64 && BOOST_PP_ITERATION_START_4 >= 64\n#    define BOOST_PP_ITERATION_4 64\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 63 && BOOST_PP_ITERATION_START_4 >= 63\n#    define BOOST_PP_ITERATION_4 63\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 62 && BOOST_PP_ITERATION_START_4 >= 62\n#    define BOOST_PP_ITERATION_4 62\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 61 && BOOST_PP_ITERATION_START_4 >= 61\n#    define BOOST_PP_ITERATION_4 61\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 60 && BOOST_PP_ITERATION_START_4 >= 60\n#    define BOOST_PP_ITERATION_4 60\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 59 && BOOST_PP_ITERATION_START_4 >= 59\n#    define BOOST_PP_ITERATION_4 59\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 58 && BOOST_PP_ITERATION_START_4 >= 58\n#    define BOOST_PP_ITERATION_4 58\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 57 && BOOST_PP_ITERATION_START_4 >= 57\n#    define BOOST_PP_ITERATION_4 57\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 56 && BOOST_PP_ITERATION_START_4 >= 56\n#    define BOOST_PP_ITERATION_4 56\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 55 && BOOST_PP_ITERATION_START_4 >= 55\n#    define BOOST_PP_ITERATION_4 55\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 54 && BOOST_PP_ITERATION_START_4 >= 54\n#    define BOOST_PP_ITERATION_4 54\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 53 && BOOST_PP_ITERATION_START_4 >= 53\n#    define BOOST_PP_ITERATION_4 53\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 52 && BOOST_PP_ITERATION_START_4 >= 52\n#    define BOOST_PP_ITERATION_4 52\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 51 && BOOST_PP_ITERATION_START_4 >= 51\n#    define BOOST_PP_ITERATION_4 51\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 50 && BOOST_PP_ITERATION_START_4 >= 50\n#    define BOOST_PP_ITERATION_4 50\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 49 && BOOST_PP_ITERATION_START_4 >= 49\n#    define BOOST_PP_ITERATION_4 49\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 48 && BOOST_PP_ITERATION_START_4 >= 48\n#    define BOOST_PP_ITERATION_4 48\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 47 && BOOST_PP_ITERATION_START_4 >= 47\n#    define BOOST_PP_ITERATION_4 47\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 46 && BOOST_PP_ITERATION_START_4 >= 46\n#    define BOOST_PP_ITERATION_4 46\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 45 && BOOST_PP_ITERATION_START_4 >= 45\n#    define BOOST_PP_ITERATION_4 45\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 44 && BOOST_PP_ITERATION_START_4 >= 44\n#    define BOOST_PP_ITERATION_4 44\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 43 && BOOST_PP_ITERATION_START_4 >= 43\n#    define BOOST_PP_ITERATION_4 43\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 42 && BOOST_PP_ITERATION_START_4 >= 42\n#    define BOOST_PP_ITERATION_4 42\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 41 && BOOST_PP_ITERATION_START_4 >= 41\n#    define BOOST_PP_ITERATION_4 41\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 40 && BOOST_PP_ITERATION_START_4 >= 40\n#    define BOOST_PP_ITERATION_4 40\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 39 && BOOST_PP_ITERATION_START_4 >= 39\n#    define BOOST_PP_ITERATION_4 39\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 38 && BOOST_PP_ITERATION_START_4 >= 38\n#    define BOOST_PP_ITERATION_4 38\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 37 && BOOST_PP_ITERATION_START_4 >= 37\n#    define BOOST_PP_ITERATION_4 37\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 36 && BOOST_PP_ITERATION_START_4 >= 36\n#    define BOOST_PP_ITERATION_4 36\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 35 && BOOST_PP_ITERATION_START_4 >= 35\n#    define BOOST_PP_ITERATION_4 35\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 34 && BOOST_PP_ITERATION_START_4 >= 34\n#    define BOOST_PP_ITERATION_4 34\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 33 && BOOST_PP_ITERATION_START_4 >= 33\n#    define BOOST_PP_ITERATION_4 33\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 32 && BOOST_PP_ITERATION_START_4 >= 32\n#    define BOOST_PP_ITERATION_4 32\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 31 && BOOST_PP_ITERATION_START_4 >= 31\n#    define BOOST_PP_ITERATION_4 31\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 30 && BOOST_PP_ITERATION_START_4 >= 30\n#    define BOOST_PP_ITERATION_4 30\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 29 && BOOST_PP_ITERATION_START_4 >= 29\n#    define BOOST_PP_ITERATION_4 29\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 28 && BOOST_PP_ITERATION_START_4 >= 28\n#    define BOOST_PP_ITERATION_4 28\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 27 && BOOST_PP_ITERATION_START_4 >= 27\n#    define BOOST_PP_ITERATION_4 27\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 26 && BOOST_PP_ITERATION_START_4 >= 26\n#    define BOOST_PP_ITERATION_4 26\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 25 && BOOST_PP_ITERATION_START_4 >= 25\n#    define BOOST_PP_ITERATION_4 25\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 24 && BOOST_PP_ITERATION_START_4 >= 24\n#    define BOOST_PP_ITERATION_4 24\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 23 && BOOST_PP_ITERATION_START_4 >= 23\n#    define BOOST_PP_ITERATION_4 23\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 22 && BOOST_PP_ITERATION_START_4 >= 22\n#    define BOOST_PP_ITERATION_4 22\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 21 && BOOST_PP_ITERATION_START_4 >= 21\n#    define BOOST_PP_ITERATION_4 21\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 20 && BOOST_PP_ITERATION_START_4 >= 20\n#    define BOOST_PP_ITERATION_4 20\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 19 && BOOST_PP_ITERATION_START_4 >= 19\n#    define BOOST_PP_ITERATION_4 19\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 18 && BOOST_PP_ITERATION_START_4 >= 18\n#    define BOOST_PP_ITERATION_4 18\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 17 && BOOST_PP_ITERATION_START_4 >= 17\n#    define BOOST_PP_ITERATION_4 17\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 16 && BOOST_PP_ITERATION_START_4 >= 16\n#    define BOOST_PP_ITERATION_4 16\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 15 && BOOST_PP_ITERATION_START_4 >= 15\n#    define BOOST_PP_ITERATION_4 15\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 14 && BOOST_PP_ITERATION_START_4 >= 14\n#    define BOOST_PP_ITERATION_4 14\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 13 && BOOST_PP_ITERATION_START_4 >= 13\n#    define BOOST_PP_ITERATION_4 13\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 12 && BOOST_PP_ITERATION_START_4 >= 12\n#    define BOOST_PP_ITERATION_4 12\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 11 && BOOST_PP_ITERATION_START_4 >= 11\n#    define BOOST_PP_ITERATION_4 11\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 10 && BOOST_PP_ITERATION_START_4 >= 10\n#    define BOOST_PP_ITERATION_4 10\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 9 && BOOST_PP_ITERATION_START_4 >= 9\n#    define BOOST_PP_ITERATION_4 9\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 8 && BOOST_PP_ITERATION_START_4 >= 8\n#    define BOOST_PP_ITERATION_4 8\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 7 && BOOST_PP_ITERATION_START_4 >= 7\n#    define BOOST_PP_ITERATION_4 7\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 6 && BOOST_PP_ITERATION_START_4 >= 6\n#    define BOOST_PP_ITERATION_4 6\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 5 && BOOST_PP_ITERATION_START_4 >= 5\n#    define BOOST_PP_ITERATION_4 5\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 4 && BOOST_PP_ITERATION_START_4 >= 4\n#    define BOOST_PP_ITERATION_4 4\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 3 && BOOST_PP_ITERATION_START_4 >= 3\n#    define BOOST_PP_ITERATION_4 3\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 2 && BOOST_PP_ITERATION_START_4 >= 2\n#    define BOOST_PP_ITERATION_4 2\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 1 && BOOST_PP_ITERATION_START_4 >= 1\n#    define BOOST_PP_ITERATION_4 1\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n# if BOOST_PP_ITERATION_FINISH_4 <= 0 && BOOST_PP_ITERATION_START_4 >= 0\n#    define BOOST_PP_ITERATION_4 0\n#    include BOOST_PP_FILENAME_4\n#    undef BOOST_PP_ITERATION_4\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/iter/reverse5.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if BOOST_PP_ITERATION_FINISH_5 <= 256 && BOOST_PP_ITERATION_START_5 >= 256\n#    define BOOST_PP_ITERATION_5 256\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 255 && BOOST_PP_ITERATION_START_5 >= 255\n#    define BOOST_PP_ITERATION_5 255\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 254 && BOOST_PP_ITERATION_START_5 >= 254\n#    define BOOST_PP_ITERATION_5 254\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 253 && BOOST_PP_ITERATION_START_5 >= 253\n#    define BOOST_PP_ITERATION_5 253\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 252 && BOOST_PP_ITERATION_START_5 >= 252\n#    define BOOST_PP_ITERATION_5 252\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 251 && BOOST_PP_ITERATION_START_5 >= 251\n#    define BOOST_PP_ITERATION_5 251\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 250 && BOOST_PP_ITERATION_START_5 >= 250\n#    define BOOST_PP_ITERATION_5 250\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 249 && BOOST_PP_ITERATION_START_5 >= 249\n#    define BOOST_PP_ITERATION_5 249\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 248 && BOOST_PP_ITERATION_START_5 >= 248\n#    define BOOST_PP_ITERATION_5 248\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 247 && BOOST_PP_ITERATION_START_5 >= 247\n#    define BOOST_PP_ITERATION_5 247\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 246 && BOOST_PP_ITERATION_START_5 >= 246\n#    define BOOST_PP_ITERATION_5 246\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 245 && BOOST_PP_ITERATION_START_5 >= 245\n#    define BOOST_PP_ITERATION_5 245\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 244 && BOOST_PP_ITERATION_START_5 >= 244\n#    define BOOST_PP_ITERATION_5 244\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 243 && BOOST_PP_ITERATION_START_5 >= 243\n#    define BOOST_PP_ITERATION_5 243\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 242 && BOOST_PP_ITERATION_START_5 >= 242\n#    define BOOST_PP_ITERATION_5 242\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 241 && BOOST_PP_ITERATION_START_5 >= 241\n#    define BOOST_PP_ITERATION_5 241\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 240 && BOOST_PP_ITERATION_START_5 >= 240\n#    define BOOST_PP_ITERATION_5 240\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 239 && BOOST_PP_ITERATION_START_5 >= 239\n#    define BOOST_PP_ITERATION_5 239\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 238 && BOOST_PP_ITERATION_START_5 >= 238\n#    define BOOST_PP_ITERATION_5 238\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 237 && BOOST_PP_ITERATION_START_5 >= 237\n#    define BOOST_PP_ITERATION_5 237\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 236 && BOOST_PP_ITERATION_START_5 >= 236\n#    define BOOST_PP_ITERATION_5 236\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 235 && BOOST_PP_ITERATION_START_5 >= 235\n#    define BOOST_PP_ITERATION_5 235\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 234 && BOOST_PP_ITERATION_START_5 >= 234\n#    define BOOST_PP_ITERATION_5 234\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 233 && BOOST_PP_ITERATION_START_5 >= 233\n#    define BOOST_PP_ITERATION_5 233\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 232 && BOOST_PP_ITERATION_START_5 >= 232\n#    define BOOST_PP_ITERATION_5 232\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 231 && BOOST_PP_ITERATION_START_5 >= 231\n#    define BOOST_PP_ITERATION_5 231\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 230 && BOOST_PP_ITERATION_START_5 >= 230\n#    define BOOST_PP_ITERATION_5 230\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 229 && BOOST_PP_ITERATION_START_5 >= 229\n#    define BOOST_PP_ITERATION_5 229\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 228 && BOOST_PP_ITERATION_START_5 >= 228\n#    define BOOST_PP_ITERATION_5 228\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 227 && BOOST_PP_ITERATION_START_5 >= 227\n#    define BOOST_PP_ITERATION_5 227\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 226 && BOOST_PP_ITERATION_START_5 >= 226\n#    define BOOST_PP_ITERATION_5 226\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 225 && BOOST_PP_ITERATION_START_5 >= 225\n#    define BOOST_PP_ITERATION_5 225\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 224 && BOOST_PP_ITERATION_START_5 >= 224\n#    define BOOST_PP_ITERATION_5 224\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 223 && BOOST_PP_ITERATION_START_5 >= 223\n#    define BOOST_PP_ITERATION_5 223\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 222 && BOOST_PP_ITERATION_START_5 >= 222\n#    define BOOST_PP_ITERATION_5 222\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 221 && BOOST_PP_ITERATION_START_5 >= 221\n#    define BOOST_PP_ITERATION_5 221\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 220 && BOOST_PP_ITERATION_START_5 >= 220\n#    define BOOST_PP_ITERATION_5 220\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 219 && BOOST_PP_ITERATION_START_5 >= 219\n#    define BOOST_PP_ITERATION_5 219\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 218 && BOOST_PP_ITERATION_START_5 >= 218\n#    define BOOST_PP_ITERATION_5 218\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 217 && BOOST_PP_ITERATION_START_5 >= 217\n#    define BOOST_PP_ITERATION_5 217\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 216 && BOOST_PP_ITERATION_START_5 >= 216\n#    define BOOST_PP_ITERATION_5 216\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 215 && BOOST_PP_ITERATION_START_5 >= 215\n#    define BOOST_PP_ITERATION_5 215\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 214 && BOOST_PP_ITERATION_START_5 >= 214\n#    define BOOST_PP_ITERATION_5 214\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 213 && BOOST_PP_ITERATION_START_5 >= 213\n#    define BOOST_PP_ITERATION_5 213\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 212 && BOOST_PP_ITERATION_START_5 >= 212\n#    define BOOST_PP_ITERATION_5 212\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 211 && BOOST_PP_ITERATION_START_5 >= 211\n#    define BOOST_PP_ITERATION_5 211\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 210 && BOOST_PP_ITERATION_START_5 >= 210\n#    define BOOST_PP_ITERATION_5 210\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 209 && BOOST_PP_ITERATION_START_5 >= 209\n#    define BOOST_PP_ITERATION_5 209\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 208 && BOOST_PP_ITERATION_START_5 >= 208\n#    define BOOST_PP_ITERATION_5 208\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 207 && BOOST_PP_ITERATION_START_5 >= 207\n#    define BOOST_PP_ITERATION_5 207\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 206 && BOOST_PP_ITERATION_START_5 >= 206\n#    define BOOST_PP_ITERATION_5 206\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 205 && BOOST_PP_ITERATION_START_5 >= 205\n#    define BOOST_PP_ITERATION_5 205\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 204 && BOOST_PP_ITERATION_START_5 >= 204\n#    define BOOST_PP_ITERATION_5 204\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 203 && BOOST_PP_ITERATION_START_5 >= 203\n#    define BOOST_PP_ITERATION_5 203\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 202 && BOOST_PP_ITERATION_START_5 >= 202\n#    define BOOST_PP_ITERATION_5 202\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 201 && BOOST_PP_ITERATION_START_5 >= 201\n#    define BOOST_PP_ITERATION_5 201\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 200 && BOOST_PP_ITERATION_START_5 >= 200\n#    define BOOST_PP_ITERATION_5 200\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 199 && BOOST_PP_ITERATION_START_5 >= 199\n#    define BOOST_PP_ITERATION_5 199\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 198 && BOOST_PP_ITERATION_START_5 >= 198\n#    define BOOST_PP_ITERATION_5 198\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 197 && BOOST_PP_ITERATION_START_5 >= 197\n#    define BOOST_PP_ITERATION_5 197\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 196 && BOOST_PP_ITERATION_START_5 >= 196\n#    define BOOST_PP_ITERATION_5 196\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 195 && BOOST_PP_ITERATION_START_5 >= 195\n#    define BOOST_PP_ITERATION_5 195\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 194 && BOOST_PP_ITERATION_START_5 >= 194\n#    define BOOST_PP_ITERATION_5 194\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 193 && BOOST_PP_ITERATION_START_5 >= 193\n#    define BOOST_PP_ITERATION_5 193\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 192 && BOOST_PP_ITERATION_START_5 >= 192\n#    define BOOST_PP_ITERATION_5 192\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 191 && BOOST_PP_ITERATION_START_5 >= 191\n#    define BOOST_PP_ITERATION_5 191\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 190 && BOOST_PP_ITERATION_START_5 >= 190\n#    define BOOST_PP_ITERATION_5 190\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 189 && BOOST_PP_ITERATION_START_5 >= 189\n#    define BOOST_PP_ITERATION_5 189\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 188 && BOOST_PP_ITERATION_START_5 >= 188\n#    define BOOST_PP_ITERATION_5 188\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 187 && BOOST_PP_ITERATION_START_5 >= 187\n#    define BOOST_PP_ITERATION_5 187\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 186 && BOOST_PP_ITERATION_START_5 >= 186\n#    define BOOST_PP_ITERATION_5 186\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 185 && BOOST_PP_ITERATION_START_5 >= 185\n#    define BOOST_PP_ITERATION_5 185\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 184 && BOOST_PP_ITERATION_START_5 >= 184\n#    define BOOST_PP_ITERATION_5 184\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 183 && BOOST_PP_ITERATION_START_5 >= 183\n#    define BOOST_PP_ITERATION_5 183\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 182 && BOOST_PP_ITERATION_START_5 >= 182\n#    define BOOST_PP_ITERATION_5 182\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 181 && BOOST_PP_ITERATION_START_5 >= 181\n#    define BOOST_PP_ITERATION_5 181\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 180 && BOOST_PP_ITERATION_START_5 >= 180\n#    define BOOST_PP_ITERATION_5 180\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 179 && BOOST_PP_ITERATION_START_5 >= 179\n#    define BOOST_PP_ITERATION_5 179\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 178 && BOOST_PP_ITERATION_START_5 >= 178\n#    define BOOST_PP_ITERATION_5 178\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 177 && BOOST_PP_ITERATION_START_5 >= 177\n#    define BOOST_PP_ITERATION_5 177\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 176 && BOOST_PP_ITERATION_START_5 >= 176\n#    define BOOST_PP_ITERATION_5 176\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 175 && BOOST_PP_ITERATION_START_5 >= 175\n#    define BOOST_PP_ITERATION_5 175\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 174 && BOOST_PP_ITERATION_START_5 >= 174\n#    define BOOST_PP_ITERATION_5 174\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 173 && BOOST_PP_ITERATION_START_5 >= 173\n#    define BOOST_PP_ITERATION_5 173\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 172 && BOOST_PP_ITERATION_START_5 >= 172\n#    define BOOST_PP_ITERATION_5 172\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 171 && BOOST_PP_ITERATION_START_5 >= 171\n#    define BOOST_PP_ITERATION_5 171\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 170 && BOOST_PP_ITERATION_START_5 >= 170\n#    define BOOST_PP_ITERATION_5 170\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 169 && BOOST_PP_ITERATION_START_5 >= 169\n#    define BOOST_PP_ITERATION_5 169\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 168 && BOOST_PP_ITERATION_START_5 >= 168\n#    define BOOST_PP_ITERATION_5 168\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 167 && BOOST_PP_ITERATION_START_5 >= 167\n#    define BOOST_PP_ITERATION_5 167\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 166 && BOOST_PP_ITERATION_START_5 >= 166\n#    define BOOST_PP_ITERATION_5 166\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 165 && BOOST_PP_ITERATION_START_5 >= 165\n#    define BOOST_PP_ITERATION_5 165\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 164 && BOOST_PP_ITERATION_START_5 >= 164\n#    define BOOST_PP_ITERATION_5 164\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 163 && BOOST_PP_ITERATION_START_5 >= 163\n#    define BOOST_PP_ITERATION_5 163\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 162 && BOOST_PP_ITERATION_START_5 >= 162\n#    define BOOST_PP_ITERATION_5 162\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 161 && BOOST_PP_ITERATION_START_5 >= 161\n#    define BOOST_PP_ITERATION_5 161\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 160 && BOOST_PP_ITERATION_START_5 >= 160\n#    define BOOST_PP_ITERATION_5 160\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 159 && BOOST_PP_ITERATION_START_5 >= 159\n#    define BOOST_PP_ITERATION_5 159\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 158 && BOOST_PP_ITERATION_START_5 >= 158\n#    define BOOST_PP_ITERATION_5 158\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 157 && BOOST_PP_ITERATION_START_5 >= 157\n#    define BOOST_PP_ITERATION_5 157\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 156 && BOOST_PP_ITERATION_START_5 >= 156\n#    define BOOST_PP_ITERATION_5 156\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 155 && BOOST_PP_ITERATION_START_5 >= 155\n#    define BOOST_PP_ITERATION_5 155\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 154 && BOOST_PP_ITERATION_START_5 >= 154\n#    define BOOST_PP_ITERATION_5 154\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 153 && BOOST_PP_ITERATION_START_5 >= 153\n#    define BOOST_PP_ITERATION_5 153\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 152 && BOOST_PP_ITERATION_START_5 >= 152\n#    define BOOST_PP_ITERATION_5 152\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 151 && BOOST_PP_ITERATION_START_5 >= 151\n#    define BOOST_PP_ITERATION_5 151\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 150 && BOOST_PP_ITERATION_START_5 >= 150\n#    define BOOST_PP_ITERATION_5 150\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 149 && BOOST_PP_ITERATION_START_5 >= 149\n#    define BOOST_PP_ITERATION_5 149\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 148 && BOOST_PP_ITERATION_START_5 >= 148\n#    define BOOST_PP_ITERATION_5 148\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 147 && BOOST_PP_ITERATION_START_5 >= 147\n#    define BOOST_PP_ITERATION_5 147\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 146 && BOOST_PP_ITERATION_START_5 >= 146\n#    define BOOST_PP_ITERATION_5 146\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 145 && BOOST_PP_ITERATION_START_5 >= 145\n#    define BOOST_PP_ITERATION_5 145\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 144 && BOOST_PP_ITERATION_START_5 >= 144\n#    define BOOST_PP_ITERATION_5 144\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 143 && BOOST_PP_ITERATION_START_5 >= 143\n#    define BOOST_PP_ITERATION_5 143\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 142 && BOOST_PP_ITERATION_START_5 >= 142\n#    define BOOST_PP_ITERATION_5 142\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 141 && BOOST_PP_ITERATION_START_5 >= 141\n#    define BOOST_PP_ITERATION_5 141\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 140 && BOOST_PP_ITERATION_START_5 >= 140\n#    define BOOST_PP_ITERATION_5 140\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 139 && BOOST_PP_ITERATION_START_5 >= 139\n#    define BOOST_PP_ITERATION_5 139\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 138 && BOOST_PP_ITERATION_START_5 >= 138\n#    define BOOST_PP_ITERATION_5 138\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 137 && BOOST_PP_ITERATION_START_5 >= 137\n#    define BOOST_PP_ITERATION_5 137\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 136 && BOOST_PP_ITERATION_START_5 >= 136\n#    define BOOST_PP_ITERATION_5 136\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 135 && BOOST_PP_ITERATION_START_5 >= 135\n#    define BOOST_PP_ITERATION_5 135\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 134 && BOOST_PP_ITERATION_START_5 >= 134\n#    define BOOST_PP_ITERATION_5 134\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 133 && BOOST_PP_ITERATION_START_5 >= 133\n#    define BOOST_PP_ITERATION_5 133\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 132 && BOOST_PP_ITERATION_START_5 >= 132\n#    define BOOST_PP_ITERATION_5 132\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 131 && BOOST_PP_ITERATION_START_5 >= 131\n#    define BOOST_PP_ITERATION_5 131\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 130 && BOOST_PP_ITERATION_START_5 >= 130\n#    define BOOST_PP_ITERATION_5 130\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 129 && BOOST_PP_ITERATION_START_5 >= 129\n#    define BOOST_PP_ITERATION_5 129\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 128 && BOOST_PP_ITERATION_START_5 >= 128\n#    define BOOST_PP_ITERATION_5 128\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 127 && BOOST_PP_ITERATION_START_5 >= 127\n#    define BOOST_PP_ITERATION_5 127\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 126 && BOOST_PP_ITERATION_START_5 >= 126\n#    define BOOST_PP_ITERATION_5 126\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 125 && BOOST_PP_ITERATION_START_5 >= 125\n#    define BOOST_PP_ITERATION_5 125\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 124 && BOOST_PP_ITERATION_START_5 >= 124\n#    define BOOST_PP_ITERATION_5 124\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 123 && BOOST_PP_ITERATION_START_5 >= 123\n#    define BOOST_PP_ITERATION_5 123\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 122 && BOOST_PP_ITERATION_START_5 >= 122\n#    define BOOST_PP_ITERATION_5 122\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 121 && BOOST_PP_ITERATION_START_5 >= 121\n#    define BOOST_PP_ITERATION_5 121\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 120 && BOOST_PP_ITERATION_START_5 >= 120\n#    define BOOST_PP_ITERATION_5 120\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 119 && BOOST_PP_ITERATION_START_5 >= 119\n#    define BOOST_PP_ITERATION_5 119\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 118 && BOOST_PP_ITERATION_START_5 >= 118\n#    define BOOST_PP_ITERATION_5 118\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 117 && BOOST_PP_ITERATION_START_5 >= 117\n#    define BOOST_PP_ITERATION_5 117\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 116 && BOOST_PP_ITERATION_START_5 >= 116\n#    define BOOST_PP_ITERATION_5 116\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 115 && BOOST_PP_ITERATION_START_5 >= 115\n#    define BOOST_PP_ITERATION_5 115\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 114 && BOOST_PP_ITERATION_START_5 >= 114\n#    define BOOST_PP_ITERATION_5 114\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 113 && BOOST_PP_ITERATION_START_5 >= 113\n#    define BOOST_PP_ITERATION_5 113\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 112 && BOOST_PP_ITERATION_START_5 >= 112\n#    define BOOST_PP_ITERATION_5 112\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 111 && BOOST_PP_ITERATION_START_5 >= 111\n#    define BOOST_PP_ITERATION_5 111\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 110 && BOOST_PP_ITERATION_START_5 >= 110\n#    define BOOST_PP_ITERATION_5 110\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 109 && BOOST_PP_ITERATION_START_5 >= 109\n#    define BOOST_PP_ITERATION_5 109\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 108 && BOOST_PP_ITERATION_START_5 >= 108\n#    define BOOST_PP_ITERATION_5 108\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 107 && BOOST_PP_ITERATION_START_5 >= 107\n#    define BOOST_PP_ITERATION_5 107\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 106 && BOOST_PP_ITERATION_START_5 >= 106\n#    define BOOST_PP_ITERATION_5 106\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 105 && BOOST_PP_ITERATION_START_5 >= 105\n#    define BOOST_PP_ITERATION_5 105\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 104 && BOOST_PP_ITERATION_START_5 >= 104\n#    define BOOST_PP_ITERATION_5 104\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 103 && BOOST_PP_ITERATION_START_5 >= 103\n#    define BOOST_PP_ITERATION_5 103\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 102 && BOOST_PP_ITERATION_START_5 >= 102\n#    define BOOST_PP_ITERATION_5 102\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 101 && BOOST_PP_ITERATION_START_5 >= 101\n#    define BOOST_PP_ITERATION_5 101\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 100 && BOOST_PP_ITERATION_START_5 >= 100\n#    define BOOST_PP_ITERATION_5 100\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 99 && BOOST_PP_ITERATION_START_5 >= 99\n#    define BOOST_PP_ITERATION_5 99\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 98 && BOOST_PP_ITERATION_START_5 >= 98\n#    define BOOST_PP_ITERATION_5 98\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 97 && BOOST_PP_ITERATION_START_5 >= 97\n#    define BOOST_PP_ITERATION_5 97\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 96 && BOOST_PP_ITERATION_START_5 >= 96\n#    define BOOST_PP_ITERATION_5 96\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 95 && BOOST_PP_ITERATION_START_5 >= 95\n#    define BOOST_PP_ITERATION_5 95\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 94 && BOOST_PP_ITERATION_START_5 >= 94\n#    define BOOST_PP_ITERATION_5 94\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 93 && BOOST_PP_ITERATION_START_5 >= 93\n#    define BOOST_PP_ITERATION_5 93\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 92 && BOOST_PP_ITERATION_START_5 >= 92\n#    define BOOST_PP_ITERATION_5 92\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 91 && BOOST_PP_ITERATION_START_5 >= 91\n#    define BOOST_PP_ITERATION_5 91\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 90 && BOOST_PP_ITERATION_START_5 >= 90\n#    define BOOST_PP_ITERATION_5 90\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 89 && BOOST_PP_ITERATION_START_5 >= 89\n#    define BOOST_PP_ITERATION_5 89\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 88 && BOOST_PP_ITERATION_START_5 >= 88\n#    define BOOST_PP_ITERATION_5 88\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 87 && BOOST_PP_ITERATION_START_5 >= 87\n#    define BOOST_PP_ITERATION_5 87\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 86 && BOOST_PP_ITERATION_START_5 >= 86\n#    define BOOST_PP_ITERATION_5 86\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 85 && BOOST_PP_ITERATION_START_5 >= 85\n#    define BOOST_PP_ITERATION_5 85\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 84 && BOOST_PP_ITERATION_START_5 >= 84\n#    define BOOST_PP_ITERATION_5 84\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 83 && BOOST_PP_ITERATION_START_5 >= 83\n#    define BOOST_PP_ITERATION_5 83\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 82 && BOOST_PP_ITERATION_START_5 >= 82\n#    define BOOST_PP_ITERATION_5 82\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 81 && BOOST_PP_ITERATION_START_5 >= 81\n#    define BOOST_PP_ITERATION_5 81\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 80 && BOOST_PP_ITERATION_START_5 >= 80\n#    define BOOST_PP_ITERATION_5 80\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 79 && BOOST_PP_ITERATION_START_5 >= 79\n#    define BOOST_PP_ITERATION_5 79\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 78 && BOOST_PP_ITERATION_START_5 >= 78\n#    define BOOST_PP_ITERATION_5 78\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 77 && BOOST_PP_ITERATION_START_5 >= 77\n#    define BOOST_PP_ITERATION_5 77\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 76 && BOOST_PP_ITERATION_START_5 >= 76\n#    define BOOST_PP_ITERATION_5 76\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 75 && BOOST_PP_ITERATION_START_5 >= 75\n#    define BOOST_PP_ITERATION_5 75\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 74 && BOOST_PP_ITERATION_START_5 >= 74\n#    define BOOST_PP_ITERATION_5 74\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 73 && BOOST_PP_ITERATION_START_5 >= 73\n#    define BOOST_PP_ITERATION_5 73\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 72 && BOOST_PP_ITERATION_START_5 >= 72\n#    define BOOST_PP_ITERATION_5 72\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 71 && BOOST_PP_ITERATION_START_5 >= 71\n#    define BOOST_PP_ITERATION_5 71\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 70 && BOOST_PP_ITERATION_START_5 >= 70\n#    define BOOST_PP_ITERATION_5 70\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 69 && BOOST_PP_ITERATION_START_5 >= 69\n#    define BOOST_PP_ITERATION_5 69\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 68 && BOOST_PP_ITERATION_START_5 >= 68\n#    define BOOST_PP_ITERATION_5 68\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 67 && BOOST_PP_ITERATION_START_5 >= 67\n#    define BOOST_PP_ITERATION_5 67\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 66 && BOOST_PP_ITERATION_START_5 >= 66\n#    define BOOST_PP_ITERATION_5 66\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 65 && BOOST_PP_ITERATION_START_5 >= 65\n#    define BOOST_PP_ITERATION_5 65\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 64 && BOOST_PP_ITERATION_START_5 >= 64\n#    define BOOST_PP_ITERATION_5 64\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 63 && BOOST_PP_ITERATION_START_5 >= 63\n#    define BOOST_PP_ITERATION_5 63\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 62 && BOOST_PP_ITERATION_START_5 >= 62\n#    define BOOST_PP_ITERATION_5 62\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 61 && BOOST_PP_ITERATION_START_5 >= 61\n#    define BOOST_PP_ITERATION_5 61\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 60 && BOOST_PP_ITERATION_START_5 >= 60\n#    define BOOST_PP_ITERATION_5 60\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 59 && BOOST_PP_ITERATION_START_5 >= 59\n#    define BOOST_PP_ITERATION_5 59\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 58 && BOOST_PP_ITERATION_START_5 >= 58\n#    define BOOST_PP_ITERATION_5 58\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 57 && BOOST_PP_ITERATION_START_5 >= 57\n#    define BOOST_PP_ITERATION_5 57\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 56 && BOOST_PP_ITERATION_START_5 >= 56\n#    define BOOST_PP_ITERATION_5 56\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 55 && BOOST_PP_ITERATION_START_5 >= 55\n#    define BOOST_PP_ITERATION_5 55\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 54 && BOOST_PP_ITERATION_START_5 >= 54\n#    define BOOST_PP_ITERATION_5 54\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 53 && BOOST_PP_ITERATION_START_5 >= 53\n#    define BOOST_PP_ITERATION_5 53\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 52 && BOOST_PP_ITERATION_START_5 >= 52\n#    define BOOST_PP_ITERATION_5 52\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 51 && BOOST_PP_ITERATION_START_5 >= 51\n#    define BOOST_PP_ITERATION_5 51\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 50 && BOOST_PP_ITERATION_START_5 >= 50\n#    define BOOST_PP_ITERATION_5 50\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 49 && BOOST_PP_ITERATION_START_5 >= 49\n#    define BOOST_PP_ITERATION_5 49\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 48 && BOOST_PP_ITERATION_START_5 >= 48\n#    define BOOST_PP_ITERATION_5 48\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 47 && BOOST_PP_ITERATION_START_5 >= 47\n#    define BOOST_PP_ITERATION_5 47\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 46 && BOOST_PP_ITERATION_START_5 >= 46\n#    define BOOST_PP_ITERATION_5 46\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 45 && BOOST_PP_ITERATION_START_5 >= 45\n#    define BOOST_PP_ITERATION_5 45\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 44 && BOOST_PP_ITERATION_START_5 >= 44\n#    define BOOST_PP_ITERATION_5 44\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 43 && BOOST_PP_ITERATION_START_5 >= 43\n#    define BOOST_PP_ITERATION_5 43\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 42 && BOOST_PP_ITERATION_START_5 >= 42\n#    define BOOST_PP_ITERATION_5 42\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 41 && BOOST_PP_ITERATION_START_5 >= 41\n#    define BOOST_PP_ITERATION_5 41\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 40 && BOOST_PP_ITERATION_START_5 >= 40\n#    define BOOST_PP_ITERATION_5 40\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 39 && BOOST_PP_ITERATION_START_5 >= 39\n#    define BOOST_PP_ITERATION_5 39\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 38 && BOOST_PP_ITERATION_START_5 >= 38\n#    define BOOST_PP_ITERATION_5 38\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 37 && BOOST_PP_ITERATION_START_5 >= 37\n#    define BOOST_PP_ITERATION_5 37\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 36 && BOOST_PP_ITERATION_START_5 >= 36\n#    define BOOST_PP_ITERATION_5 36\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 35 && BOOST_PP_ITERATION_START_5 >= 35\n#    define BOOST_PP_ITERATION_5 35\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 34 && BOOST_PP_ITERATION_START_5 >= 34\n#    define BOOST_PP_ITERATION_5 34\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 33 && BOOST_PP_ITERATION_START_5 >= 33\n#    define BOOST_PP_ITERATION_5 33\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 32 && BOOST_PP_ITERATION_START_5 >= 32\n#    define BOOST_PP_ITERATION_5 32\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 31 && BOOST_PP_ITERATION_START_5 >= 31\n#    define BOOST_PP_ITERATION_5 31\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 30 && BOOST_PP_ITERATION_START_5 >= 30\n#    define BOOST_PP_ITERATION_5 30\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 29 && BOOST_PP_ITERATION_START_5 >= 29\n#    define BOOST_PP_ITERATION_5 29\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 28 && BOOST_PP_ITERATION_START_5 >= 28\n#    define BOOST_PP_ITERATION_5 28\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 27 && BOOST_PP_ITERATION_START_5 >= 27\n#    define BOOST_PP_ITERATION_5 27\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 26 && BOOST_PP_ITERATION_START_5 >= 26\n#    define BOOST_PP_ITERATION_5 26\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 25 && BOOST_PP_ITERATION_START_5 >= 25\n#    define BOOST_PP_ITERATION_5 25\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 24 && BOOST_PP_ITERATION_START_5 >= 24\n#    define BOOST_PP_ITERATION_5 24\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 23 && BOOST_PP_ITERATION_START_5 >= 23\n#    define BOOST_PP_ITERATION_5 23\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 22 && BOOST_PP_ITERATION_START_5 >= 22\n#    define BOOST_PP_ITERATION_5 22\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 21 && BOOST_PP_ITERATION_START_5 >= 21\n#    define BOOST_PP_ITERATION_5 21\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 20 && BOOST_PP_ITERATION_START_5 >= 20\n#    define BOOST_PP_ITERATION_5 20\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 19 && BOOST_PP_ITERATION_START_5 >= 19\n#    define BOOST_PP_ITERATION_5 19\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 18 && BOOST_PP_ITERATION_START_5 >= 18\n#    define BOOST_PP_ITERATION_5 18\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 17 && BOOST_PP_ITERATION_START_5 >= 17\n#    define BOOST_PP_ITERATION_5 17\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 16 && BOOST_PP_ITERATION_START_5 >= 16\n#    define BOOST_PP_ITERATION_5 16\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 15 && BOOST_PP_ITERATION_START_5 >= 15\n#    define BOOST_PP_ITERATION_5 15\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 14 && BOOST_PP_ITERATION_START_5 >= 14\n#    define BOOST_PP_ITERATION_5 14\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 13 && BOOST_PP_ITERATION_START_5 >= 13\n#    define BOOST_PP_ITERATION_5 13\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 12 && BOOST_PP_ITERATION_START_5 >= 12\n#    define BOOST_PP_ITERATION_5 12\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 11 && BOOST_PP_ITERATION_START_5 >= 11\n#    define BOOST_PP_ITERATION_5 11\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 10 && BOOST_PP_ITERATION_START_5 >= 10\n#    define BOOST_PP_ITERATION_5 10\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 9 && BOOST_PP_ITERATION_START_5 >= 9\n#    define BOOST_PP_ITERATION_5 9\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 8 && BOOST_PP_ITERATION_START_5 >= 8\n#    define BOOST_PP_ITERATION_5 8\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 7 && BOOST_PP_ITERATION_START_5 >= 7\n#    define BOOST_PP_ITERATION_5 7\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 6 && BOOST_PP_ITERATION_START_5 >= 6\n#    define BOOST_PP_ITERATION_5 6\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 5 && BOOST_PP_ITERATION_START_5 >= 5\n#    define BOOST_PP_ITERATION_5 5\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 4 && BOOST_PP_ITERATION_START_5 >= 4\n#    define BOOST_PP_ITERATION_5 4\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 3 && BOOST_PP_ITERATION_START_5 >= 3\n#    define BOOST_PP_ITERATION_5 3\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 2 && BOOST_PP_ITERATION_START_5 >= 2\n#    define BOOST_PP_ITERATION_5 2\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 1 && BOOST_PP_ITERATION_START_5 >= 1\n#    define BOOST_PP_ITERATION_5 1\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n# if BOOST_PP_ITERATION_FINISH_5 <= 0 && BOOST_PP_ITERATION_START_5 >= 0\n#    define BOOST_PP_ITERATION_5 0\n#    include BOOST_PP_FILENAME_5\n#    undef BOOST_PP_ITERATION_5\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/local.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if !defined(BOOST_PP_LOCAL_LIMITS)\n#    error BOOST_PP_ERROR:  local iteration boundaries are not defined\n# elif !defined(BOOST_PP_LOCAL_MACRO)\n#    error BOOST_PP_ERROR:  local iteration target macro is not defined\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#        define BOOST_PP_LOCAL_S BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_LOCAL_LIMITS)\n#        define BOOST_PP_LOCAL_F BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_LOCAL_LIMITS)\n#    else\n#        define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_LOCAL_LIMITS)\n#        include <boost/preprocessor/iteration/detail/start.hpp>\n#        define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_LOCAL_LIMITS)\n#        include <boost/preprocessor/iteration/detail/finish.hpp>\n#        define BOOST_PP_LOCAL_S BOOST_PP_LOCAL_SE()\n#        define BOOST_PP_LOCAL_F BOOST_PP_LOCAL_FE()\n#    endif\n# endif\n#\n# if (BOOST_PP_LOCAL_S) > (BOOST_PP_LOCAL_F)\n#    include <boost/preprocessor/iteration/detail/rlocal.hpp>\n# else\n#    if BOOST_PP_LOCAL_C(0)\n        BOOST_PP_LOCAL_MACRO(0)\n#    endif\n#    if BOOST_PP_LOCAL_C(1)\n        BOOST_PP_LOCAL_MACRO(1)\n#    endif\n#    if BOOST_PP_LOCAL_C(2)\n        BOOST_PP_LOCAL_MACRO(2)\n#    endif\n#    if BOOST_PP_LOCAL_C(3)\n        BOOST_PP_LOCAL_MACRO(3)\n#    endif\n#    if BOOST_PP_LOCAL_C(4)\n        BOOST_PP_LOCAL_MACRO(4)\n#    endif\n#    if BOOST_PP_LOCAL_C(5)\n        BOOST_PP_LOCAL_MACRO(5)\n#    endif\n#    if BOOST_PP_LOCAL_C(6)\n        BOOST_PP_LOCAL_MACRO(6)\n#    endif\n#    if BOOST_PP_LOCAL_C(7)\n        BOOST_PP_LOCAL_MACRO(7)\n#    endif\n#    if BOOST_PP_LOCAL_C(8)\n        BOOST_PP_LOCAL_MACRO(8)\n#    endif\n#    if BOOST_PP_LOCAL_C(9)\n        BOOST_PP_LOCAL_MACRO(9)\n#    endif\n#    if BOOST_PP_LOCAL_C(10)\n        BOOST_PP_LOCAL_MACRO(10)\n#    endif\n#    if BOOST_PP_LOCAL_C(11)\n        BOOST_PP_LOCAL_MACRO(11)\n#    endif\n#    if BOOST_PP_LOCAL_C(12)\n        BOOST_PP_LOCAL_MACRO(12)\n#    endif\n#    if BOOST_PP_LOCAL_C(13)\n        BOOST_PP_LOCAL_MACRO(13)\n#    endif\n#    if BOOST_PP_LOCAL_C(14)\n        BOOST_PP_LOCAL_MACRO(14)\n#    endif\n#    if BOOST_PP_LOCAL_C(15)\n        BOOST_PP_LOCAL_MACRO(15)\n#    endif\n#    if BOOST_PP_LOCAL_C(16)\n        BOOST_PP_LOCAL_MACRO(16)\n#    endif\n#    if BOOST_PP_LOCAL_C(17)\n        BOOST_PP_LOCAL_MACRO(17)\n#    endif\n#    if BOOST_PP_LOCAL_C(18)\n        BOOST_PP_LOCAL_MACRO(18)\n#    endif\n#    if BOOST_PP_LOCAL_C(19)\n        BOOST_PP_LOCAL_MACRO(19)\n#    endif\n#    if BOOST_PP_LOCAL_C(20)\n        BOOST_PP_LOCAL_MACRO(20)\n#    endif\n#    if BOOST_PP_LOCAL_C(21)\n        BOOST_PP_LOCAL_MACRO(21)\n#    endif\n#    if BOOST_PP_LOCAL_C(22)\n        BOOST_PP_LOCAL_MACRO(22)\n#    endif\n#    if BOOST_PP_LOCAL_C(23)\n        BOOST_PP_LOCAL_MACRO(23)\n#    endif\n#    if BOOST_PP_LOCAL_C(24)\n        BOOST_PP_LOCAL_MACRO(24)\n#    endif\n#    if BOOST_PP_LOCAL_C(25)\n        BOOST_PP_LOCAL_MACRO(25)\n#    endif\n#    if BOOST_PP_LOCAL_C(26)\n        BOOST_PP_LOCAL_MACRO(26)\n#    endif\n#    if BOOST_PP_LOCAL_C(27)\n        BOOST_PP_LOCAL_MACRO(27)\n#    endif\n#    if BOOST_PP_LOCAL_C(28)\n        BOOST_PP_LOCAL_MACRO(28)\n#    endif\n#    if BOOST_PP_LOCAL_C(29)\n        BOOST_PP_LOCAL_MACRO(29)\n#    endif\n#    if BOOST_PP_LOCAL_C(30)\n        BOOST_PP_LOCAL_MACRO(30)\n#    endif\n#    if BOOST_PP_LOCAL_C(31)\n        BOOST_PP_LOCAL_MACRO(31)\n#    endif\n#    if BOOST_PP_LOCAL_C(32)\n        BOOST_PP_LOCAL_MACRO(32)\n#    endif\n#    if BOOST_PP_LOCAL_C(33)\n        BOOST_PP_LOCAL_MACRO(33)\n#    endif\n#    if BOOST_PP_LOCAL_C(34)\n        BOOST_PP_LOCAL_MACRO(34)\n#    endif\n#    if BOOST_PP_LOCAL_C(35)\n        BOOST_PP_LOCAL_MACRO(35)\n#    endif\n#    if BOOST_PP_LOCAL_C(36)\n        BOOST_PP_LOCAL_MACRO(36)\n#    endif\n#    if BOOST_PP_LOCAL_C(37)\n        BOOST_PP_LOCAL_MACRO(37)\n#    endif\n#    if BOOST_PP_LOCAL_C(38)\n        BOOST_PP_LOCAL_MACRO(38)\n#    endif\n#    if BOOST_PP_LOCAL_C(39)\n        BOOST_PP_LOCAL_MACRO(39)\n#    endif\n#    if BOOST_PP_LOCAL_C(40)\n        BOOST_PP_LOCAL_MACRO(40)\n#    endif\n#    if BOOST_PP_LOCAL_C(41)\n        BOOST_PP_LOCAL_MACRO(41)\n#    endif\n#    if BOOST_PP_LOCAL_C(42)\n        BOOST_PP_LOCAL_MACRO(42)\n#    endif\n#    if BOOST_PP_LOCAL_C(43)\n        BOOST_PP_LOCAL_MACRO(43)\n#    endif\n#    if BOOST_PP_LOCAL_C(44)\n        BOOST_PP_LOCAL_MACRO(44)\n#    endif\n#    if BOOST_PP_LOCAL_C(45)\n        BOOST_PP_LOCAL_MACRO(45)\n#    endif\n#    if BOOST_PP_LOCAL_C(46)\n        BOOST_PP_LOCAL_MACRO(46)\n#    endif\n#    if BOOST_PP_LOCAL_C(47)\n        BOOST_PP_LOCAL_MACRO(47)\n#    endif\n#    if BOOST_PP_LOCAL_C(48)\n        BOOST_PP_LOCAL_MACRO(48)\n#    endif\n#    if BOOST_PP_LOCAL_C(49)\n        BOOST_PP_LOCAL_MACRO(49)\n#    endif\n#    if BOOST_PP_LOCAL_C(50)\n        BOOST_PP_LOCAL_MACRO(50)\n#    endif\n#    if BOOST_PP_LOCAL_C(51)\n        BOOST_PP_LOCAL_MACRO(51)\n#    endif\n#    if BOOST_PP_LOCAL_C(52)\n        BOOST_PP_LOCAL_MACRO(52)\n#    endif\n#    if BOOST_PP_LOCAL_C(53)\n        BOOST_PP_LOCAL_MACRO(53)\n#    endif\n#    if BOOST_PP_LOCAL_C(54)\n        BOOST_PP_LOCAL_MACRO(54)\n#    endif\n#    if BOOST_PP_LOCAL_C(55)\n        BOOST_PP_LOCAL_MACRO(55)\n#    endif\n#    if BOOST_PP_LOCAL_C(56)\n        BOOST_PP_LOCAL_MACRO(56)\n#    endif\n#    if BOOST_PP_LOCAL_C(57)\n        BOOST_PP_LOCAL_MACRO(57)\n#    endif\n#    if BOOST_PP_LOCAL_C(58)\n        BOOST_PP_LOCAL_MACRO(58)\n#    endif\n#    if BOOST_PP_LOCAL_C(59)\n        BOOST_PP_LOCAL_MACRO(59)\n#    endif\n#    if BOOST_PP_LOCAL_C(60)\n        BOOST_PP_LOCAL_MACRO(60)\n#    endif\n#    if BOOST_PP_LOCAL_C(61)\n        BOOST_PP_LOCAL_MACRO(61)\n#    endif\n#    if BOOST_PP_LOCAL_C(62)\n        BOOST_PP_LOCAL_MACRO(62)\n#    endif\n#    if BOOST_PP_LOCAL_C(63)\n        BOOST_PP_LOCAL_MACRO(63)\n#    endif\n#    if BOOST_PP_LOCAL_C(64)\n        BOOST_PP_LOCAL_MACRO(64)\n#    endif\n#    if BOOST_PP_LOCAL_C(65)\n        BOOST_PP_LOCAL_MACRO(65)\n#    endif\n#    if BOOST_PP_LOCAL_C(66)\n        BOOST_PP_LOCAL_MACRO(66)\n#    endif\n#    if BOOST_PP_LOCAL_C(67)\n        BOOST_PP_LOCAL_MACRO(67)\n#    endif\n#    if BOOST_PP_LOCAL_C(68)\n        BOOST_PP_LOCAL_MACRO(68)\n#    endif\n#    if BOOST_PP_LOCAL_C(69)\n        BOOST_PP_LOCAL_MACRO(69)\n#    endif\n#    if BOOST_PP_LOCAL_C(70)\n        BOOST_PP_LOCAL_MACRO(70)\n#    endif\n#    if BOOST_PP_LOCAL_C(71)\n        BOOST_PP_LOCAL_MACRO(71)\n#    endif\n#    if BOOST_PP_LOCAL_C(72)\n        BOOST_PP_LOCAL_MACRO(72)\n#    endif\n#    if BOOST_PP_LOCAL_C(73)\n        BOOST_PP_LOCAL_MACRO(73)\n#    endif\n#    if BOOST_PP_LOCAL_C(74)\n        BOOST_PP_LOCAL_MACRO(74)\n#    endif\n#    if BOOST_PP_LOCAL_C(75)\n        BOOST_PP_LOCAL_MACRO(75)\n#    endif\n#    if BOOST_PP_LOCAL_C(76)\n        BOOST_PP_LOCAL_MACRO(76)\n#    endif\n#    if BOOST_PP_LOCAL_C(77)\n        BOOST_PP_LOCAL_MACRO(77)\n#    endif\n#    if BOOST_PP_LOCAL_C(78)\n        BOOST_PP_LOCAL_MACRO(78)\n#    endif\n#    if BOOST_PP_LOCAL_C(79)\n        BOOST_PP_LOCAL_MACRO(79)\n#    endif\n#    if BOOST_PP_LOCAL_C(80)\n        BOOST_PP_LOCAL_MACRO(80)\n#    endif\n#    if BOOST_PP_LOCAL_C(81)\n        BOOST_PP_LOCAL_MACRO(81)\n#    endif\n#    if BOOST_PP_LOCAL_C(82)\n        BOOST_PP_LOCAL_MACRO(82)\n#    endif\n#    if BOOST_PP_LOCAL_C(83)\n        BOOST_PP_LOCAL_MACRO(83)\n#    endif\n#    if BOOST_PP_LOCAL_C(84)\n        BOOST_PP_LOCAL_MACRO(84)\n#    endif\n#    if BOOST_PP_LOCAL_C(85)\n        BOOST_PP_LOCAL_MACRO(85)\n#    endif\n#    if BOOST_PP_LOCAL_C(86)\n        BOOST_PP_LOCAL_MACRO(86)\n#    endif\n#    if BOOST_PP_LOCAL_C(87)\n        BOOST_PP_LOCAL_MACRO(87)\n#    endif\n#    if BOOST_PP_LOCAL_C(88)\n        BOOST_PP_LOCAL_MACRO(88)\n#    endif\n#    if BOOST_PP_LOCAL_C(89)\n        BOOST_PP_LOCAL_MACRO(89)\n#    endif\n#    if BOOST_PP_LOCAL_C(90)\n        BOOST_PP_LOCAL_MACRO(90)\n#    endif\n#    if BOOST_PP_LOCAL_C(91)\n        BOOST_PP_LOCAL_MACRO(91)\n#    endif\n#    if BOOST_PP_LOCAL_C(92)\n        BOOST_PP_LOCAL_MACRO(92)\n#    endif\n#    if BOOST_PP_LOCAL_C(93)\n        BOOST_PP_LOCAL_MACRO(93)\n#    endif\n#    if BOOST_PP_LOCAL_C(94)\n        BOOST_PP_LOCAL_MACRO(94)\n#    endif\n#    if BOOST_PP_LOCAL_C(95)\n        BOOST_PP_LOCAL_MACRO(95)\n#    endif\n#    if BOOST_PP_LOCAL_C(96)\n        BOOST_PP_LOCAL_MACRO(96)\n#    endif\n#    if BOOST_PP_LOCAL_C(97)\n        BOOST_PP_LOCAL_MACRO(97)\n#    endif\n#    if BOOST_PP_LOCAL_C(98)\n        BOOST_PP_LOCAL_MACRO(98)\n#    endif\n#    if BOOST_PP_LOCAL_C(99)\n        BOOST_PP_LOCAL_MACRO(99)\n#    endif\n#    if BOOST_PP_LOCAL_C(100)\n        BOOST_PP_LOCAL_MACRO(100)\n#    endif\n#    if BOOST_PP_LOCAL_C(101)\n        BOOST_PP_LOCAL_MACRO(101)\n#    endif\n#    if BOOST_PP_LOCAL_C(102)\n        BOOST_PP_LOCAL_MACRO(102)\n#    endif\n#    if BOOST_PP_LOCAL_C(103)\n        BOOST_PP_LOCAL_MACRO(103)\n#    endif\n#    if BOOST_PP_LOCAL_C(104)\n        BOOST_PP_LOCAL_MACRO(104)\n#    endif\n#    if BOOST_PP_LOCAL_C(105)\n        BOOST_PP_LOCAL_MACRO(105)\n#    endif\n#    if BOOST_PP_LOCAL_C(106)\n        BOOST_PP_LOCAL_MACRO(106)\n#    endif\n#    if BOOST_PP_LOCAL_C(107)\n        BOOST_PP_LOCAL_MACRO(107)\n#    endif\n#    if BOOST_PP_LOCAL_C(108)\n        BOOST_PP_LOCAL_MACRO(108)\n#    endif\n#    if BOOST_PP_LOCAL_C(109)\n        BOOST_PP_LOCAL_MACRO(109)\n#    endif\n#    if BOOST_PP_LOCAL_C(110)\n        BOOST_PP_LOCAL_MACRO(110)\n#    endif\n#    if BOOST_PP_LOCAL_C(111)\n        BOOST_PP_LOCAL_MACRO(111)\n#    endif\n#    if BOOST_PP_LOCAL_C(112)\n        BOOST_PP_LOCAL_MACRO(112)\n#    endif\n#    if BOOST_PP_LOCAL_C(113)\n        BOOST_PP_LOCAL_MACRO(113)\n#    endif\n#    if BOOST_PP_LOCAL_C(114)\n        BOOST_PP_LOCAL_MACRO(114)\n#    endif\n#    if BOOST_PP_LOCAL_C(115)\n        BOOST_PP_LOCAL_MACRO(115)\n#    endif\n#    if BOOST_PP_LOCAL_C(116)\n        BOOST_PP_LOCAL_MACRO(116)\n#    endif\n#    if BOOST_PP_LOCAL_C(117)\n        BOOST_PP_LOCAL_MACRO(117)\n#    endif\n#    if BOOST_PP_LOCAL_C(118)\n        BOOST_PP_LOCAL_MACRO(118)\n#    endif\n#    if BOOST_PP_LOCAL_C(119)\n        BOOST_PP_LOCAL_MACRO(119)\n#    endif\n#    if BOOST_PP_LOCAL_C(120)\n        BOOST_PP_LOCAL_MACRO(120)\n#    endif\n#    if BOOST_PP_LOCAL_C(121)\n        BOOST_PP_LOCAL_MACRO(121)\n#    endif\n#    if BOOST_PP_LOCAL_C(122)\n        BOOST_PP_LOCAL_MACRO(122)\n#    endif\n#    if BOOST_PP_LOCAL_C(123)\n        BOOST_PP_LOCAL_MACRO(123)\n#    endif\n#    if BOOST_PP_LOCAL_C(124)\n        BOOST_PP_LOCAL_MACRO(124)\n#    endif\n#    if BOOST_PP_LOCAL_C(125)\n        BOOST_PP_LOCAL_MACRO(125)\n#    endif\n#    if BOOST_PP_LOCAL_C(126)\n        BOOST_PP_LOCAL_MACRO(126)\n#    endif\n#    if BOOST_PP_LOCAL_C(127)\n        BOOST_PP_LOCAL_MACRO(127)\n#    endif\n#    if BOOST_PP_LOCAL_C(128)\n        BOOST_PP_LOCAL_MACRO(128)\n#    endif\n#    if BOOST_PP_LOCAL_C(129)\n        BOOST_PP_LOCAL_MACRO(129)\n#    endif\n#    if BOOST_PP_LOCAL_C(130)\n        BOOST_PP_LOCAL_MACRO(130)\n#    endif\n#    if BOOST_PP_LOCAL_C(131)\n        BOOST_PP_LOCAL_MACRO(131)\n#    endif\n#    if BOOST_PP_LOCAL_C(132)\n        BOOST_PP_LOCAL_MACRO(132)\n#    endif\n#    if BOOST_PP_LOCAL_C(133)\n        BOOST_PP_LOCAL_MACRO(133)\n#    endif\n#    if BOOST_PP_LOCAL_C(134)\n        BOOST_PP_LOCAL_MACRO(134)\n#    endif\n#    if BOOST_PP_LOCAL_C(135)\n        BOOST_PP_LOCAL_MACRO(135)\n#    endif\n#    if BOOST_PP_LOCAL_C(136)\n        BOOST_PP_LOCAL_MACRO(136)\n#    endif\n#    if BOOST_PP_LOCAL_C(137)\n        BOOST_PP_LOCAL_MACRO(137)\n#    endif\n#    if BOOST_PP_LOCAL_C(138)\n        BOOST_PP_LOCAL_MACRO(138)\n#    endif\n#    if BOOST_PP_LOCAL_C(139)\n        BOOST_PP_LOCAL_MACRO(139)\n#    endif\n#    if BOOST_PP_LOCAL_C(140)\n        BOOST_PP_LOCAL_MACRO(140)\n#    endif\n#    if BOOST_PP_LOCAL_C(141)\n        BOOST_PP_LOCAL_MACRO(141)\n#    endif\n#    if BOOST_PP_LOCAL_C(142)\n        BOOST_PP_LOCAL_MACRO(142)\n#    endif\n#    if BOOST_PP_LOCAL_C(143)\n        BOOST_PP_LOCAL_MACRO(143)\n#    endif\n#    if BOOST_PP_LOCAL_C(144)\n        BOOST_PP_LOCAL_MACRO(144)\n#    endif\n#    if BOOST_PP_LOCAL_C(145)\n        BOOST_PP_LOCAL_MACRO(145)\n#    endif\n#    if BOOST_PP_LOCAL_C(146)\n        BOOST_PP_LOCAL_MACRO(146)\n#    endif\n#    if BOOST_PP_LOCAL_C(147)\n        BOOST_PP_LOCAL_MACRO(147)\n#    endif\n#    if BOOST_PP_LOCAL_C(148)\n        BOOST_PP_LOCAL_MACRO(148)\n#    endif\n#    if BOOST_PP_LOCAL_C(149)\n        BOOST_PP_LOCAL_MACRO(149)\n#    endif\n#    if BOOST_PP_LOCAL_C(150)\n        BOOST_PP_LOCAL_MACRO(150)\n#    endif\n#    if BOOST_PP_LOCAL_C(151)\n        BOOST_PP_LOCAL_MACRO(151)\n#    endif\n#    if BOOST_PP_LOCAL_C(152)\n        BOOST_PP_LOCAL_MACRO(152)\n#    endif\n#    if BOOST_PP_LOCAL_C(153)\n        BOOST_PP_LOCAL_MACRO(153)\n#    endif\n#    if BOOST_PP_LOCAL_C(154)\n        BOOST_PP_LOCAL_MACRO(154)\n#    endif\n#    if BOOST_PP_LOCAL_C(155)\n        BOOST_PP_LOCAL_MACRO(155)\n#    endif\n#    if BOOST_PP_LOCAL_C(156)\n        BOOST_PP_LOCAL_MACRO(156)\n#    endif\n#    if BOOST_PP_LOCAL_C(157)\n        BOOST_PP_LOCAL_MACRO(157)\n#    endif\n#    if BOOST_PP_LOCAL_C(158)\n        BOOST_PP_LOCAL_MACRO(158)\n#    endif\n#    if BOOST_PP_LOCAL_C(159)\n        BOOST_PP_LOCAL_MACRO(159)\n#    endif\n#    if BOOST_PP_LOCAL_C(160)\n        BOOST_PP_LOCAL_MACRO(160)\n#    endif\n#    if BOOST_PP_LOCAL_C(161)\n        BOOST_PP_LOCAL_MACRO(161)\n#    endif\n#    if BOOST_PP_LOCAL_C(162)\n        BOOST_PP_LOCAL_MACRO(162)\n#    endif\n#    if BOOST_PP_LOCAL_C(163)\n        BOOST_PP_LOCAL_MACRO(163)\n#    endif\n#    if BOOST_PP_LOCAL_C(164)\n        BOOST_PP_LOCAL_MACRO(164)\n#    endif\n#    if BOOST_PP_LOCAL_C(165)\n        BOOST_PP_LOCAL_MACRO(165)\n#    endif\n#    if BOOST_PP_LOCAL_C(166)\n        BOOST_PP_LOCAL_MACRO(166)\n#    endif\n#    if BOOST_PP_LOCAL_C(167)\n        BOOST_PP_LOCAL_MACRO(167)\n#    endif\n#    if BOOST_PP_LOCAL_C(168)\n        BOOST_PP_LOCAL_MACRO(168)\n#    endif\n#    if BOOST_PP_LOCAL_C(169)\n        BOOST_PP_LOCAL_MACRO(169)\n#    endif\n#    if BOOST_PP_LOCAL_C(170)\n        BOOST_PP_LOCAL_MACRO(170)\n#    endif\n#    if BOOST_PP_LOCAL_C(171)\n        BOOST_PP_LOCAL_MACRO(171)\n#    endif\n#    if BOOST_PP_LOCAL_C(172)\n        BOOST_PP_LOCAL_MACRO(172)\n#    endif\n#    if BOOST_PP_LOCAL_C(173)\n        BOOST_PP_LOCAL_MACRO(173)\n#    endif\n#    if BOOST_PP_LOCAL_C(174)\n        BOOST_PP_LOCAL_MACRO(174)\n#    endif\n#    if BOOST_PP_LOCAL_C(175)\n        BOOST_PP_LOCAL_MACRO(175)\n#    endif\n#    if BOOST_PP_LOCAL_C(176)\n        BOOST_PP_LOCAL_MACRO(176)\n#    endif\n#    if BOOST_PP_LOCAL_C(177)\n        BOOST_PP_LOCAL_MACRO(177)\n#    endif\n#    if BOOST_PP_LOCAL_C(178)\n        BOOST_PP_LOCAL_MACRO(178)\n#    endif\n#    if BOOST_PP_LOCAL_C(179)\n        BOOST_PP_LOCAL_MACRO(179)\n#    endif\n#    if BOOST_PP_LOCAL_C(180)\n        BOOST_PP_LOCAL_MACRO(180)\n#    endif\n#    if BOOST_PP_LOCAL_C(181)\n        BOOST_PP_LOCAL_MACRO(181)\n#    endif\n#    if BOOST_PP_LOCAL_C(182)\n        BOOST_PP_LOCAL_MACRO(182)\n#    endif\n#    if BOOST_PP_LOCAL_C(183)\n        BOOST_PP_LOCAL_MACRO(183)\n#    endif\n#    if BOOST_PP_LOCAL_C(184)\n        BOOST_PP_LOCAL_MACRO(184)\n#    endif\n#    if BOOST_PP_LOCAL_C(185)\n        BOOST_PP_LOCAL_MACRO(185)\n#    endif\n#    if BOOST_PP_LOCAL_C(186)\n        BOOST_PP_LOCAL_MACRO(186)\n#    endif\n#    if BOOST_PP_LOCAL_C(187)\n        BOOST_PP_LOCAL_MACRO(187)\n#    endif\n#    if BOOST_PP_LOCAL_C(188)\n        BOOST_PP_LOCAL_MACRO(188)\n#    endif\n#    if BOOST_PP_LOCAL_C(189)\n        BOOST_PP_LOCAL_MACRO(189)\n#    endif\n#    if BOOST_PP_LOCAL_C(190)\n        BOOST_PP_LOCAL_MACRO(190)\n#    endif\n#    if BOOST_PP_LOCAL_C(191)\n        BOOST_PP_LOCAL_MACRO(191)\n#    endif\n#    if BOOST_PP_LOCAL_C(192)\n        BOOST_PP_LOCAL_MACRO(192)\n#    endif\n#    if BOOST_PP_LOCAL_C(193)\n        BOOST_PP_LOCAL_MACRO(193)\n#    endif\n#    if BOOST_PP_LOCAL_C(194)\n        BOOST_PP_LOCAL_MACRO(194)\n#    endif\n#    if BOOST_PP_LOCAL_C(195)\n        BOOST_PP_LOCAL_MACRO(195)\n#    endif\n#    if BOOST_PP_LOCAL_C(196)\n        BOOST_PP_LOCAL_MACRO(196)\n#    endif\n#    if BOOST_PP_LOCAL_C(197)\n        BOOST_PP_LOCAL_MACRO(197)\n#    endif\n#    if BOOST_PP_LOCAL_C(198)\n        BOOST_PP_LOCAL_MACRO(198)\n#    endif\n#    if BOOST_PP_LOCAL_C(199)\n        BOOST_PP_LOCAL_MACRO(199)\n#    endif\n#    if BOOST_PP_LOCAL_C(200)\n        BOOST_PP_LOCAL_MACRO(200)\n#    endif\n#    if BOOST_PP_LOCAL_C(201)\n        BOOST_PP_LOCAL_MACRO(201)\n#    endif\n#    if BOOST_PP_LOCAL_C(202)\n        BOOST_PP_LOCAL_MACRO(202)\n#    endif\n#    if BOOST_PP_LOCAL_C(203)\n        BOOST_PP_LOCAL_MACRO(203)\n#    endif\n#    if BOOST_PP_LOCAL_C(204)\n        BOOST_PP_LOCAL_MACRO(204)\n#    endif\n#    if BOOST_PP_LOCAL_C(205)\n        BOOST_PP_LOCAL_MACRO(205)\n#    endif\n#    if BOOST_PP_LOCAL_C(206)\n        BOOST_PP_LOCAL_MACRO(206)\n#    endif\n#    if BOOST_PP_LOCAL_C(207)\n        BOOST_PP_LOCAL_MACRO(207)\n#    endif\n#    if BOOST_PP_LOCAL_C(208)\n        BOOST_PP_LOCAL_MACRO(208)\n#    endif\n#    if BOOST_PP_LOCAL_C(209)\n        BOOST_PP_LOCAL_MACRO(209)\n#    endif\n#    if BOOST_PP_LOCAL_C(210)\n        BOOST_PP_LOCAL_MACRO(210)\n#    endif\n#    if BOOST_PP_LOCAL_C(211)\n        BOOST_PP_LOCAL_MACRO(211)\n#    endif\n#    if BOOST_PP_LOCAL_C(212)\n        BOOST_PP_LOCAL_MACRO(212)\n#    endif\n#    if BOOST_PP_LOCAL_C(213)\n        BOOST_PP_LOCAL_MACRO(213)\n#    endif\n#    if BOOST_PP_LOCAL_C(214)\n        BOOST_PP_LOCAL_MACRO(214)\n#    endif\n#    if BOOST_PP_LOCAL_C(215)\n        BOOST_PP_LOCAL_MACRO(215)\n#    endif\n#    if BOOST_PP_LOCAL_C(216)\n        BOOST_PP_LOCAL_MACRO(216)\n#    endif\n#    if BOOST_PP_LOCAL_C(217)\n        BOOST_PP_LOCAL_MACRO(217)\n#    endif\n#    if BOOST_PP_LOCAL_C(218)\n        BOOST_PP_LOCAL_MACRO(218)\n#    endif\n#    if BOOST_PP_LOCAL_C(219)\n        BOOST_PP_LOCAL_MACRO(219)\n#    endif\n#    if BOOST_PP_LOCAL_C(220)\n        BOOST_PP_LOCAL_MACRO(220)\n#    endif\n#    if BOOST_PP_LOCAL_C(221)\n        BOOST_PP_LOCAL_MACRO(221)\n#    endif\n#    if BOOST_PP_LOCAL_C(222)\n        BOOST_PP_LOCAL_MACRO(222)\n#    endif\n#    if BOOST_PP_LOCAL_C(223)\n        BOOST_PP_LOCAL_MACRO(223)\n#    endif\n#    if BOOST_PP_LOCAL_C(224)\n        BOOST_PP_LOCAL_MACRO(224)\n#    endif\n#    if BOOST_PP_LOCAL_C(225)\n        BOOST_PP_LOCAL_MACRO(225)\n#    endif\n#    if BOOST_PP_LOCAL_C(226)\n        BOOST_PP_LOCAL_MACRO(226)\n#    endif\n#    if BOOST_PP_LOCAL_C(227)\n        BOOST_PP_LOCAL_MACRO(227)\n#    endif\n#    if BOOST_PP_LOCAL_C(228)\n        BOOST_PP_LOCAL_MACRO(228)\n#    endif\n#    if BOOST_PP_LOCAL_C(229)\n        BOOST_PP_LOCAL_MACRO(229)\n#    endif\n#    if BOOST_PP_LOCAL_C(230)\n        BOOST_PP_LOCAL_MACRO(230)\n#    endif\n#    if BOOST_PP_LOCAL_C(231)\n        BOOST_PP_LOCAL_MACRO(231)\n#    endif\n#    if BOOST_PP_LOCAL_C(232)\n        BOOST_PP_LOCAL_MACRO(232)\n#    endif\n#    if BOOST_PP_LOCAL_C(233)\n        BOOST_PP_LOCAL_MACRO(233)\n#    endif\n#    if BOOST_PP_LOCAL_C(234)\n        BOOST_PP_LOCAL_MACRO(234)\n#    endif\n#    if BOOST_PP_LOCAL_C(235)\n        BOOST_PP_LOCAL_MACRO(235)\n#    endif\n#    if BOOST_PP_LOCAL_C(236)\n        BOOST_PP_LOCAL_MACRO(236)\n#    endif\n\n#    if BOOST_PP_LOCAL_C(237)\n        BOOST_PP_LOCAL_MACRO(237)\n#    endif\n#    if BOOST_PP_LOCAL_C(238)\n        BOOST_PP_LOCAL_MACRO(238)\n#    endif\n#    if BOOST_PP_LOCAL_C(239)\n        BOOST_PP_LOCAL_MACRO(239)\n#    endif\n#    if BOOST_PP_LOCAL_C(240)\n        BOOST_PP_LOCAL_MACRO(240)\n#    endif\n#    if BOOST_PP_LOCAL_C(241)\n        BOOST_PP_LOCAL_MACRO(241)\n#    endif\n#    if BOOST_PP_LOCAL_C(242)\n        BOOST_PP_LOCAL_MACRO(242)\n#    endif\n#    if BOOST_PP_LOCAL_C(243)\n        BOOST_PP_LOCAL_MACRO(243)\n#    endif\n#    if BOOST_PP_LOCAL_C(244)\n        BOOST_PP_LOCAL_MACRO(244)\n#    endif\n#    if BOOST_PP_LOCAL_C(245)\n        BOOST_PP_LOCAL_MACRO(245)\n#    endif\n#    if BOOST_PP_LOCAL_C(246)\n        BOOST_PP_LOCAL_MACRO(246)\n#    endif\n#    if BOOST_PP_LOCAL_C(247)\n        BOOST_PP_LOCAL_MACRO(247)\n#    endif\n#    if BOOST_PP_LOCAL_C(248)\n        BOOST_PP_LOCAL_MACRO(248)\n#    endif\n#    if BOOST_PP_LOCAL_C(249)\n        BOOST_PP_LOCAL_MACRO(249)\n#    endif\n#    if BOOST_PP_LOCAL_C(250)\n        BOOST_PP_LOCAL_MACRO(250)\n#    endif\n#    if BOOST_PP_LOCAL_C(251)\n        BOOST_PP_LOCAL_MACRO(251)\n#    endif\n#    if BOOST_PP_LOCAL_C(252)\n        BOOST_PP_LOCAL_MACRO(252)\n#    endif\n#    if BOOST_PP_LOCAL_C(253)\n        BOOST_PP_LOCAL_MACRO(253)\n#    endif\n#    if BOOST_PP_LOCAL_C(254)\n        BOOST_PP_LOCAL_MACRO(254)\n#    endif\n#    if BOOST_PP_LOCAL_C(255)\n        BOOST_PP_LOCAL_MACRO(255)\n#    endif\n#    if BOOST_PP_LOCAL_C(256)\n        BOOST_PP_LOCAL_MACRO(256)\n#    endif\n# endif\n#\n# undef BOOST_PP_LOCAL_LIMITS\n#\n# undef BOOST_PP_LOCAL_S\n# undef BOOST_PP_LOCAL_F\n#\n# undef BOOST_PP_LOCAL_MACRO\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/rlocal.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if BOOST_PP_LOCAL_R(256)\n    BOOST_PP_LOCAL_MACRO(256)\n# endif\n# if BOOST_PP_LOCAL_R(255)\n    BOOST_PP_LOCAL_MACRO(255)\n# endif\n# if BOOST_PP_LOCAL_R(254)\n    BOOST_PP_LOCAL_MACRO(254)\n# endif\n# if BOOST_PP_LOCAL_R(253)\n    BOOST_PP_LOCAL_MACRO(253)\n# endif\n# if BOOST_PP_LOCAL_R(252)\n    BOOST_PP_LOCAL_MACRO(252)\n# endif\n# if BOOST_PP_LOCAL_R(251)\n    BOOST_PP_LOCAL_MACRO(251)\n# endif\n# if BOOST_PP_LOCAL_R(250)\n    BOOST_PP_LOCAL_MACRO(250)\n# endif\n# if BOOST_PP_LOCAL_R(249)\n    BOOST_PP_LOCAL_MACRO(249)\n# endif\n# if BOOST_PP_LOCAL_R(248)\n    BOOST_PP_LOCAL_MACRO(248)\n# endif\n# if BOOST_PP_LOCAL_R(247)\n    BOOST_PP_LOCAL_MACRO(247)\n# endif\n# if BOOST_PP_LOCAL_R(246)\n    BOOST_PP_LOCAL_MACRO(246)\n# endif\n# if BOOST_PP_LOCAL_R(245)\n    BOOST_PP_LOCAL_MACRO(245)\n# endif\n# if BOOST_PP_LOCAL_R(244)\n    BOOST_PP_LOCAL_MACRO(244)\n# endif\n# if BOOST_PP_LOCAL_R(243)\n    BOOST_PP_LOCAL_MACRO(243)\n# endif\n# if BOOST_PP_LOCAL_R(242)\n    BOOST_PP_LOCAL_MACRO(242)\n# endif\n# if BOOST_PP_LOCAL_R(241)\n    BOOST_PP_LOCAL_MACRO(241)\n# endif\n# if BOOST_PP_LOCAL_R(240)\n    BOOST_PP_LOCAL_MACRO(240)\n# endif\n# if BOOST_PP_LOCAL_R(239)\n    BOOST_PP_LOCAL_MACRO(239)\n# endif\n# if BOOST_PP_LOCAL_R(238)\n    BOOST_PP_LOCAL_MACRO(238)\n# endif\n# if BOOST_PP_LOCAL_R(237)\n    BOOST_PP_LOCAL_MACRO(237)\n# endif\n# if BOOST_PP_LOCAL_R(236)\n    BOOST_PP_LOCAL_MACRO(236)\n# endif\n# if BOOST_PP_LOCAL_R(235)\n    BOOST_PP_LOCAL_MACRO(235)\n# endif\n# if BOOST_PP_LOCAL_R(234)\n    BOOST_PP_LOCAL_MACRO(234)\n# endif\n# if BOOST_PP_LOCAL_R(233)\n    BOOST_PP_LOCAL_MACRO(233)\n# endif\n# if BOOST_PP_LOCAL_R(232)\n    BOOST_PP_LOCAL_MACRO(232)\n# endif\n# if BOOST_PP_LOCAL_R(231)\n    BOOST_PP_LOCAL_MACRO(231)\n# endif\n# if BOOST_PP_LOCAL_R(230)\n    BOOST_PP_LOCAL_MACRO(230)\n# endif\n# if BOOST_PP_LOCAL_R(229)\n    BOOST_PP_LOCAL_MACRO(229)\n# endif\n# if BOOST_PP_LOCAL_R(228)\n    BOOST_PP_LOCAL_MACRO(228)\n# endif\n# if BOOST_PP_LOCAL_R(227)\n    BOOST_PP_LOCAL_MACRO(227)\n# endif\n# if BOOST_PP_LOCAL_R(226)\n    BOOST_PP_LOCAL_MACRO(226)\n# endif\n# if BOOST_PP_LOCAL_R(225)\n    BOOST_PP_LOCAL_MACRO(225)\n# endif\n# if BOOST_PP_LOCAL_R(224)\n    BOOST_PP_LOCAL_MACRO(224)\n# endif\n# if BOOST_PP_LOCAL_R(223)\n    BOOST_PP_LOCAL_MACRO(223)\n# endif\n# if BOOST_PP_LOCAL_R(222)\n    BOOST_PP_LOCAL_MACRO(222)\n# endif\n# if BOOST_PP_LOCAL_R(221)\n    BOOST_PP_LOCAL_MACRO(221)\n# endif\n# if BOOST_PP_LOCAL_R(220)\n    BOOST_PP_LOCAL_MACRO(220)\n# endif\n# if BOOST_PP_LOCAL_R(219)\n    BOOST_PP_LOCAL_MACRO(219)\n# endif\n# if BOOST_PP_LOCAL_R(218)\n    BOOST_PP_LOCAL_MACRO(218)\n# endif\n# if BOOST_PP_LOCAL_R(217)\n    BOOST_PP_LOCAL_MACRO(217)\n# endif\n# if BOOST_PP_LOCAL_R(216)\n    BOOST_PP_LOCAL_MACRO(216)\n# endif\n# if BOOST_PP_LOCAL_R(215)\n    BOOST_PP_LOCAL_MACRO(215)\n# endif\n# if BOOST_PP_LOCAL_R(214)\n    BOOST_PP_LOCAL_MACRO(214)\n# endif\n# if BOOST_PP_LOCAL_R(213)\n    BOOST_PP_LOCAL_MACRO(213)\n# endif\n# if BOOST_PP_LOCAL_R(212)\n    BOOST_PP_LOCAL_MACRO(212)\n# endif\n# if BOOST_PP_LOCAL_R(211)\n    BOOST_PP_LOCAL_MACRO(211)\n# endif\n# if BOOST_PP_LOCAL_R(210)\n    BOOST_PP_LOCAL_MACRO(210)\n# endif\n# if BOOST_PP_LOCAL_R(209)\n    BOOST_PP_LOCAL_MACRO(209)\n# endif\n# if BOOST_PP_LOCAL_R(208)\n    BOOST_PP_LOCAL_MACRO(208)\n# endif\n# if BOOST_PP_LOCAL_R(207)\n    BOOST_PP_LOCAL_MACRO(207)\n# endif\n# if BOOST_PP_LOCAL_R(206)\n    BOOST_PP_LOCAL_MACRO(206)\n# endif\n# if BOOST_PP_LOCAL_R(205)\n    BOOST_PP_LOCAL_MACRO(205)\n# endif\n# if BOOST_PP_LOCAL_R(204)\n    BOOST_PP_LOCAL_MACRO(204)\n# endif\n# if BOOST_PP_LOCAL_R(203)\n    BOOST_PP_LOCAL_MACRO(203)\n# endif\n# if BOOST_PP_LOCAL_R(202)\n    BOOST_PP_LOCAL_MACRO(202)\n# endif\n# if BOOST_PP_LOCAL_R(201)\n    BOOST_PP_LOCAL_MACRO(201)\n# endif\n# if BOOST_PP_LOCAL_R(200)\n    BOOST_PP_LOCAL_MACRO(200)\n# endif\n# if BOOST_PP_LOCAL_R(199)\n    BOOST_PP_LOCAL_MACRO(199)\n# endif\n# if BOOST_PP_LOCAL_R(198)\n    BOOST_PP_LOCAL_MACRO(198)\n# endif\n# if BOOST_PP_LOCAL_R(197)\n    BOOST_PP_LOCAL_MACRO(197)\n# endif\n# if BOOST_PP_LOCAL_R(196)\n    BOOST_PP_LOCAL_MACRO(196)\n# endif\n# if BOOST_PP_LOCAL_R(195)\n    BOOST_PP_LOCAL_MACRO(195)\n# endif\n# if BOOST_PP_LOCAL_R(194)\n    BOOST_PP_LOCAL_MACRO(194)\n# endif\n# if BOOST_PP_LOCAL_R(193)\n    BOOST_PP_LOCAL_MACRO(193)\n# endif\n# if BOOST_PP_LOCAL_R(192)\n    BOOST_PP_LOCAL_MACRO(192)\n# endif\n# if BOOST_PP_LOCAL_R(191)\n    BOOST_PP_LOCAL_MACRO(191)\n# endif\n# if BOOST_PP_LOCAL_R(190)\n    BOOST_PP_LOCAL_MACRO(190)\n# endif\n# if BOOST_PP_LOCAL_R(189)\n    BOOST_PP_LOCAL_MACRO(189)\n# endif\n# if BOOST_PP_LOCAL_R(188)\n    BOOST_PP_LOCAL_MACRO(188)\n# endif\n# if BOOST_PP_LOCAL_R(187)\n    BOOST_PP_LOCAL_MACRO(187)\n# endif\n# if BOOST_PP_LOCAL_R(186)\n    BOOST_PP_LOCAL_MACRO(186)\n# endif\n# if BOOST_PP_LOCAL_R(185)\n    BOOST_PP_LOCAL_MACRO(185)\n# endif\n# if BOOST_PP_LOCAL_R(184)\n    BOOST_PP_LOCAL_MACRO(184)\n# endif\n# if BOOST_PP_LOCAL_R(183)\n    BOOST_PP_LOCAL_MACRO(183)\n# endif\n# if BOOST_PP_LOCAL_R(182)\n    BOOST_PP_LOCAL_MACRO(182)\n# endif\n# if BOOST_PP_LOCAL_R(181)\n    BOOST_PP_LOCAL_MACRO(181)\n# endif\n# if BOOST_PP_LOCAL_R(180)\n    BOOST_PP_LOCAL_MACRO(180)\n# endif\n# if BOOST_PP_LOCAL_R(179)\n    BOOST_PP_LOCAL_MACRO(179)\n# endif\n# if BOOST_PP_LOCAL_R(178)\n    BOOST_PP_LOCAL_MACRO(178)\n# endif\n# if BOOST_PP_LOCAL_R(177)\n    BOOST_PP_LOCAL_MACRO(177)\n# endif\n# if BOOST_PP_LOCAL_R(176)\n    BOOST_PP_LOCAL_MACRO(176)\n# endif\n# if BOOST_PP_LOCAL_R(175)\n    BOOST_PP_LOCAL_MACRO(175)\n# endif\n# if BOOST_PP_LOCAL_R(174)\n    BOOST_PP_LOCAL_MACRO(174)\n# endif\n# if BOOST_PP_LOCAL_R(173)\n    BOOST_PP_LOCAL_MACRO(173)\n# endif\n# if BOOST_PP_LOCAL_R(172)\n    BOOST_PP_LOCAL_MACRO(172)\n# endif\n# if BOOST_PP_LOCAL_R(171)\n    BOOST_PP_LOCAL_MACRO(171)\n# endif\n# if BOOST_PP_LOCAL_R(170)\n    BOOST_PP_LOCAL_MACRO(170)\n# endif\n# if BOOST_PP_LOCAL_R(169)\n    BOOST_PP_LOCAL_MACRO(169)\n# endif\n# if BOOST_PP_LOCAL_R(168)\n    BOOST_PP_LOCAL_MACRO(168)\n# endif\n# if BOOST_PP_LOCAL_R(167)\n    BOOST_PP_LOCAL_MACRO(167)\n# endif\n# if BOOST_PP_LOCAL_R(166)\n    BOOST_PP_LOCAL_MACRO(166)\n# endif\n# if BOOST_PP_LOCAL_R(165)\n    BOOST_PP_LOCAL_MACRO(165)\n# endif\n# if BOOST_PP_LOCAL_R(164)\n    BOOST_PP_LOCAL_MACRO(164)\n# endif\n# if BOOST_PP_LOCAL_R(163)\n    BOOST_PP_LOCAL_MACRO(163)\n# endif\n# if BOOST_PP_LOCAL_R(162)\n    BOOST_PP_LOCAL_MACRO(162)\n# endif\n# if BOOST_PP_LOCAL_R(161)\n    BOOST_PP_LOCAL_MACRO(161)\n# endif\n# if BOOST_PP_LOCAL_R(160)\n    BOOST_PP_LOCAL_MACRO(160)\n# endif\n# if BOOST_PP_LOCAL_R(159)\n    BOOST_PP_LOCAL_MACRO(159)\n# endif\n# if BOOST_PP_LOCAL_R(158)\n    BOOST_PP_LOCAL_MACRO(158)\n# endif\n# if BOOST_PP_LOCAL_R(157)\n    BOOST_PP_LOCAL_MACRO(157)\n# endif\n# if BOOST_PP_LOCAL_R(156)\n    BOOST_PP_LOCAL_MACRO(156)\n# endif\n# if BOOST_PP_LOCAL_R(155)\n    BOOST_PP_LOCAL_MACRO(155)\n# endif\n# if BOOST_PP_LOCAL_R(154)\n    BOOST_PP_LOCAL_MACRO(154)\n# endif\n# if BOOST_PP_LOCAL_R(153)\n    BOOST_PP_LOCAL_MACRO(153)\n# endif\n# if BOOST_PP_LOCAL_R(152)\n    BOOST_PP_LOCAL_MACRO(152)\n# endif\n# if BOOST_PP_LOCAL_R(151)\n    BOOST_PP_LOCAL_MACRO(151)\n# endif\n# if BOOST_PP_LOCAL_R(150)\n    BOOST_PP_LOCAL_MACRO(150)\n# endif\n# if BOOST_PP_LOCAL_R(149)\n    BOOST_PP_LOCAL_MACRO(149)\n# endif\n# if BOOST_PP_LOCAL_R(148)\n    BOOST_PP_LOCAL_MACRO(148)\n# endif\n# if BOOST_PP_LOCAL_R(147)\n    BOOST_PP_LOCAL_MACRO(147)\n# endif\n# if BOOST_PP_LOCAL_R(146)\n    BOOST_PP_LOCAL_MACRO(146)\n# endif\n# if BOOST_PP_LOCAL_R(145)\n    BOOST_PP_LOCAL_MACRO(145)\n# endif\n# if BOOST_PP_LOCAL_R(144)\n    BOOST_PP_LOCAL_MACRO(144)\n# endif\n# if BOOST_PP_LOCAL_R(143)\n    BOOST_PP_LOCAL_MACRO(143)\n# endif\n# if BOOST_PP_LOCAL_R(142)\n    BOOST_PP_LOCAL_MACRO(142)\n# endif\n# if BOOST_PP_LOCAL_R(141)\n    BOOST_PP_LOCAL_MACRO(141)\n# endif\n# if BOOST_PP_LOCAL_R(140)\n    BOOST_PP_LOCAL_MACRO(140)\n# endif\n# if BOOST_PP_LOCAL_R(139)\n    BOOST_PP_LOCAL_MACRO(139)\n# endif\n# if BOOST_PP_LOCAL_R(138)\n    BOOST_PP_LOCAL_MACRO(138)\n# endif\n# if BOOST_PP_LOCAL_R(137)\n    BOOST_PP_LOCAL_MACRO(137)\n# endif\n# if BOOST_PP_LOCAL_R(136)\n    BOOST_PP_LOCAL_MACRO(136)\n# endif\n# if BOOST_PP_LOCAL_R(135)\n    BOOST_PP_LOCAL_MACRO(135)\n# endif\n# if BOOST_PP_LOCAL_R(134)\n    BOOST_PP_LOCAL_MACRO(134)\n# endif\n# if BOOST_PP_LOCAL_R(133)\n    BOOST_PP_LOCAL_MACRO(133)\n# endif\n# if BOOST_PP_LOCAL_R(132)\n    BOOST_PP_LOCAL_MACRO(132)\n# endif\n# if BOOST_PP_LOCAL_R(131)\n    BOOST_PP_LOCAL_MACRO(131)\n# endif\n# if BOOST_PP_LOCAL_R(130)\n    BOOST_PP_LOCAL_MACRO(130)\n# endif\n# if BOOST_PP_LOCAL_R(129)\n    BOOST_PP_LOCAL_MACRO(129)\n# endif\n# if BOOST_PP_LOCAL_R(128)\n    BOOST_PP_LOCAL_MACRO(128)\n# endif\n# if BOOST_PP_LOCAL_R(127)\n    BOOST_PP_LOCAL_MACRO(127)\n# endif\n# if BOOST_PP_LOCAL_R(126)\n    BOOST_PP_LOCAL_MACRO(126)\n# endif\n# if BOOST_PP_LOCAL_R(125)\n    BOOST_PP_LOCAL_MACRO(125)\n# endif\n# if BOOST_PP_LOCAL_R(124)\n    BOOST_PP_LOCAL_MACRO(124)\n# endif\n# if BOOST_PP_LOCAL_R(123)\n    BOOST_PP_LOCAL_MACRO(123)\n# endif\n# if BOOST_PP_LOCAL_R(122)\n    BOOST_PP_LOCAL_MACRO(122)\n# endif\n# if BOOST_PP_LOCAL_R(121)\n    BOOST_PP_LOCAL_MACRO(121)\n# endif\n# if BOOST_PP_LOCAL_R(120)\n    BOOST_PP_LOCAL_MACRO(120)\n# endif\n# if BOOST_PP_LOCAL_R(119)\n    BOOST_PP_LOCAL_MACRO(119)\n# endif\n# if BOOST_PP_LOCAL_R(118)\n    BOOST_PP_LOCAL_MACRO(118)\n# endif\n# if BOOST_PP_LOCAL_R(117)\n    BOOST_PP_LOCAL_MACRO(117)\n# endif\n# if BOOST_PP_LOCAL_R(116)\n    BOOST_PP_LOCAL_MACRO(116)\n# endif\n# if BOOST_PP_LOCAL_R(115)\n    BOOST_PP_LOCAL_MACRO(115)\n# endif\n# if BOOST_PP_LOCAL_R(114)\n    BOOST_PP_LOCAL_MACRO(114)\n# endif\n# if BOOST_PP_LOCAL_R(113)\n    BOOST_PP_LOCAL_MACRO(113)\n# endif\n# if BOOST_PP_LOCAL_R(112)\n    BOOST_PP_LOCAL_MACRO(112)\n# endif\n# if BOOST_PP_LOCAL_R(111)\n    BOOST_PP_LOCAL_MACRO(111)\n# endif\n# if BOOST_PP_LOCAL_R(110)\n    BOOST_PP_LOCAL_MACRO(110)\n# endif\n# if BOOST_PP_LOCAL_R(109)\n    BOOST_PP_LOCAL_MACRO(109)\n# endif\n# if BOOST_PP_LOCAL_R(108)\n    BOOST_PP_LOCAL_MACRO(108)\n# endif\n# if BOOST_PP_LOCAL_R(107)\n    BOOST_PP_LOCAL_MACRO(107)\n# endif\n# if BOOST_PP_LOCAL_R(106)\n    BOOST_PP_LOCAL_MACRO(106)\n# endif\n# if BOOST_PP_LOCAL_R(105)\n    BOOST_PP_LOCAL_MACRO(105)\n# endif\n# if BOOST_PP_LOCAL_R(104)\n    BOOST_PP_LOCAL_MACRO(104)\n# endif\n# if BOOST_PP_LOCAL_R(103)\n    BOOST_PP_LOCAL_MACRO(103)\n# endif\n# if BOOST_PP_LOCAL_R(102)\n    BOOST_PP_LOCAL_MACRO(102)\n# endif\n# if BOOST_PP_LOCAL_R(101)\n    BOOST_PP_LOCAL_MACRO(101)\n# endif\n# if BOOST_PP_LOCAL_R(100)\n    BOOST_PP_LOCAL_MACRO(100)\n# endif\n# if BOOST_PP_LOCAL_R(99)\n    BOOST_PP_LOCAL_MACRO(99)\n# endif\n# if BOOST_PP_LOCAL_R(98)\n    BOOST_PP_LOCAL_MACRO(98)\n# endif\n# if BOOST_PP_LOCAL_R(97)\n    BOOST_PP_LOCAL_MACRO(97)\n# endif\n# if BOOST_PP_LOCAL_R(96)\n    BOOST_PP_LOCAL_MACRO(96)\n# endif\n# if BOOST_PP_LOCAL_R(95)\n    BOOST_PP_LOCAL_MACRO(95)\n# endif\n# if BOOST_PP_LOCAL_R(94)\n    BOOST_PP_LOCAL_MACRO(94)\n# endif\n# if BOOST_PP_LOCAL_R(93)\n    BOOST_PP_LOCAL_MACRO(93)\n# endif\n# if BOOST_PP_LOCAL_R(92)\n    BOOST_PP_LOCAL_MACRO(92)\n# endif\n# if BOOST_PP_LOCAL_R(91)\n    BOOST_PP_LOCAL_MACRO(91)\n# endif\n# if BOOST_PP_LOCAL_R(90)\n    BOOST_PP_LOCAL_MACRO(90)\n# endif\n# if BOOST_PP_LOCAL_R(89)\n    BOOST_PP_LOCAL_MACRO(89)\n# endif\n# if BOOST_PP_LOCAL_R(88)\n    BOOST_PP_LOCAL_MACRO(88)\n# endif\n# if BOOST_PP_LOCAL_R(87)\n    BOOST_PP_LOCAL_MACRO(87)\n# endif\n# if BOOST_PP_LOCAL_R(86)\n    BOOST_PP_LOCAL_MACRO(86)\n# endif\n# if BOOST_PP_LOCAL_R(85)\n    BOOST_PP_LOCAL_MACRO(85)\n# endif\n# if BOOST_PP_LOCAL_R(84)\n    BOOST_PP_LOCAL_MACRO(84)\n# endif\n# if BOOST_PP_LOCAL_R(83)\n    BOOST_PP_LOCAL_MACRO(83)\n# endif\n# if BOOST_PP_LOCAL_R(82)\n    BOOST_PP_LOCAL_MACRO(82)\n# endif\n# if BOOST_PP_LOCAL_R(81)\n    BOOST_PP_LOCAL_MACRO(81)\n# endif\n# if BOOST_PP_LOCAL_R(80)\n    BOOST_PP_LOCAL_MACRO(80)\n# endif\n# if BOOST_PP_LOCAL_R(79)\n    BOOST_PP_LOCAL_MACRO(79)\n# endif\n# if BOOST_PP_LOCAL_R(78)\n    BOOST_PP_LOCAL_MACRO(78)\n# endif\n# if BOOST_PP_LOCAL_R(77)\n    BOOST_PP_LOCAL_MACRO(77)\n# endif\n# if BOOST_PP_LOCAL_R(76)\n    BOOST_PP_LOCAL_MACRO(76)\n# endif\n# if BOOST_PP_LOCAL_R(75)\n    BOOST_PP_LOCAL_MACRO(75)\n# endif\n# if BOOST_PP_LOCAL_R(74)\n    BOOST_PP_LOCAL_MACRO(74)\n# endif\n# if BOOST_PP_LOCAL_R(73)\n    BOOST_PP_LOCAL_MACRO(73)\n# endif\n# if BOOST_PP_LOCAL_R(72)\n    BOOST_PP_LOCAL_MACRO(72)\n# endif\n# if BOOST_PP_LOCAL_R(71)\n    BOOST_PP_LOCAL_MACRO(71)\n# endif\n# if BOOST_PP_LOCAL_R(70)\n    BOOST_PP_LOCAL_MACRO(70)\n# endif\n# if BOOST_PP_LOCAL_R(69)\n    BOOST_PP_LOCAL_MACRO(69)\n# endif\n# if BOOST_PP_LOCAL_R(68)\n    BOOST_PP_LOCAL_MACRO(68)\n# endif\n# if BOOST_PP_LOCAL_R(67)\n    BOOST_PP_LOCAL_MACRO(67)\n# endif\n# if BOOST_PP_LOCAL_R(66)\n    BOOST_PP_LOCAL_MACRO(66)\n# endif\n# if BOOST_PP_LOCAL_R(65)\n    BOOST_PP_LOCAL_MACRO(65)\n# endif\n# if BOOST_PP_LOCAL_R(64)\n    BOOST_PP_LOCAL_MACRO(64)\n# endif\n# if BOOST_PP_LOCAL_R(63)\n    BOOST_PP_LOCAL_MACRO(63)\n# endif\n# if BOOST_PP_LOCAL_R(62)\n    BOOST_PP_LOCAL_MACRO(62)\n# endif\n# if BOOST_PP_LOCAL_R(61)\n    BOOST_PP_LOCAL_MACRO(61)\n# endif\n# if BOOST_PP_LOCAL_R(60)\n    BOOST_PP_LOCAL_MACRO(60)\n# endif\n# if BOOST_PP_LOCAL_R(59)\n    BOOST_PP_LOCAL_MACRO(59)\n# endif\n# if BOOST_PP_LOCAL_R(58)\n    BOOST_PP_LOCAL_MACRO(58)\n# endif\n# if BOOST_PP_LOCAL_R(57)\n    BOOST_PP_LOCAL_MACRO(57)\n# endif\n# if BOOST_PP_LOCAL_R(56)\n    BOOST_PP_LOCAL_MACRO(56)\n# endif\n# if BOOST_PP_LOCAL_R(55)\n    BOOST_PP_LOCAL_MACRO(55)\n# endif\n# if BOOST_PP_LOCAL_R(54)\n    BOOST_PP_LOCAL_MACRO(54)\n# endif\n# if BOOST_PP_LOCAL_R(53)\n    BOOST_PP_LOCAL_MACRO(53)\n# endif\n# if BOOST_PP_LOCAL_R(52)\n    BOOST_PP_LOCAL_MACRO(52)\n# endif\n# if BOOST_PP_LOCAL_R(51)\n    BOOST_PP_LOCAL_MACRO(51)\n# endif\n# if BOOST_PP_LOCAL_R(50)\n    BOOST_PP_LOCAL_MACRO(50)\n# endif\n# if BOOST_PP_LOCAL_R(49)\n    BOOST_PP_LOCAL_MACRO(49)\n# endif\n# if BOOST_PP_LOCAL_R(48)\n    BOOST_PP_LOCAL_MACRO(48)\n# endif\n# if BOOST_PP_LOCAL_R(47)\n    BOOST_PP_LOCAL_MACRO(47)\n# endif\n# if BOOST_PP_LOCAL_R(46)\n    BOOST_PP_LOCAL_MACRO(46)\n# endif\n# if BOOST_PP_LOCAL_R(45)\n    BOOST_PP_LOCAL_MACRO(45)\n# endif\n# if BOOST_PP_LOCAL_R(44)\n    BOOST_PP_LOCAL_MACRO(44)\n# endif\n# if BOOST_PP_LOCAL_R(43)\n    BOOST_PP_LOCAL_MACRO(43)\n# endif\n# if BOOST_PP_LOCAL_R(42)\n    BOOST_PP_LOCAL_MACRO(42)\n# endif\n# if BOOST_PP_LOCAL_R(41)\n    BOOST_PP_LOCAL_MACRO(41)\n# endif\n# if BOOST_PP_LOCAL_R(40)\n    BOOST_PP_LOCAL_MACRO(40)\n# endif\n# if BOOST_PP_LOCAL_R(39)\n    BOOST_PP_LOCAL_MACRO(39)\n# endif\n# if BOOST_PP_LOCAL_R(38)\n    BOOST_PP_LOCAL_MACRO(38)\n# endif\n# if BOOST_PP_LOCAL_R(37)\n    BOOST_PP_LOCAL_MACRO(37)\n# endif\n# if BOOST_PP_LOCAL_R(36)\n    BOOST_PP_LOCAL_MACRO(36)\n# endif\n# if BOOST_PP_LOCAL_R(35)\n    BOOST_PP_LOCAL_MACRO(35)\n# endif\n# if BOOST_PP_LOCAL_R(34)\n    BOOST_PP_LOCAL_MACRO(34)\n# endif\n# if BOOST_PP_LOCAL_R(33)\n    BOOST_PP_LOCAL_MACRO(33)\n# endif\n# if BOOST_PP_LOCAL_R(32)\n    BOOST_PP_LOCAL_MACRO(32)\n# endif\n# if BOOST_PP_LOCAL_R(31)\n    BOOST_PP_LOCAL_MACRO(31)\n# endif\n# if BOOST_PP_LOCAL_R(30)\n    BOOST_PP_LOCAL_MACRO(30)\n# endif\n# if BOOST_PP_LOCAL_R(29)\n    BOOST_PP_LOCAL_MACRO(29)\n# endif\n# if BOOST_PP_LOCAL_R(28)\n    BOOST_PP_LOCAL_MACRO(28)\n# endif\n# if BOOST_PP_LOCAL_R(27)\n    BOOST_PP_LOCAL_MACRO(27)\n# endif\n# if BOOST_PP_LOCAL_R(26)\n    BOOST_PP_LOCAL_MACRO(26)\n# endif\n# if BOOST_PP_LOCAL_R(25)\n    BOOST_PP_LOCAL_MACRO(25)\n# endif\n# if BOOST_PP_LOCAL_R(24)\n    BOOST_PP_LOCAL_MACRO(24)\n# endif\n# if BOOST_PP_LOCAL_R(23)\n    BOOST_PP_LOCAL_MACRO(23)\n# endif\n# if BOOST_PP_LOCAL_R(22)\n    BOOST_PP_LOCAL_MACRO(22)\n# endif\n# if BOOST_PP_LOCAL_R(21)\n    BOOST_PP_LOCAL_MACRO(21)\n# endif\n# if BOOST_PP_LOCAL_R(20)\n    BOOST_PP_LOCAL_MACRO(20)\n# endif\n# if BOOST_PP_LOCAL_R(19)\n    BOOST_PP_LOCAL_MACRO(19)\n# endif\n# if BOOST_PP_LOCAL_R(18)\n    BOOST_PP_LOCAL_MACRO(18)\n# endif\n# if BOOST_PP_LOCAL_R(17)\n    BOOST_PP_LOCAL_MACRO(17)\n# endif\n# if BOOST_PP_LOCAL_R(16)\n    BOOST_PP_LOCAL_MACRO(16)\n# endif\n# if BOOST_PP_LOCAL_R(15)\n    BOOST_PP_LOCAL_MACRO(15)\n# endif\n# if BOOST_PP_LOCAL_R(14)\n    BOOST_PP_LOCAL_MACRO(14)\n# endif\n# if BOOST_PP_LOCAL_R(13)\n    BOOST_PP_LOCAL_MACRO(13)\n# endif\n# if BOOST_PP_LOCAL_R(12)\n    BOOST_PP_LOCAL_MACRO(12)\n# endif\n# if BOOST_PP_LOCAL_R(11)\n    BOOST_PP_LOCAL_MACRO(11)\n# endif\n# if BOOST_PP_LOCAL_R(10)\n    BOOST_PP_LOCAL_MACRO(10)\n# endif\n# if BOOST_PP_LOCAL_R(9)\n    BOOST_PP_LOCAL_MACRO(9)\n# endif\n# if BOOST_PP_LOCAL_R(8)\n    BOOST_PP_LOCAL_MACRO(8)\n# endif\n# if BOOST_PP_LOCAL_R(7)\n    BOOST_PP_LOCAL_MACRO(7)\n# endif\n# if BOOST_PP_LOCAL_R(6)\n    BOOST_PP_LOCAL_MACRO(6)\n# endif\n# if BOOST_PP_LOCAL_R(5)\n    BOOST_PP_LOCAL_MACRO(5)\n# endif\n# if BOOST_PP_LOCAL_R(4)\n    BOOST_PP_LOCAL_MACRO(4)\n# endif\n# if BOOST_PP_LOCAL_R(3)\n    BOOST_PP_LOCAL_MACRO(3)\n# endif\n# if BOOST_PP_LOCAL_R(2)\n    BOOST_PP_LOCAL_MACRO(2)\n# endif\n# if BOOST_PP_LOCAL_R(1)\n    BOOST_PP_LOCAL_MACRO(1)\n# endif\n# if BOOST_PP_LOCAL_R(0)\n    BOOST_PP_LOCAL_MACRO(0)\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/self.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if !defined(BOOST_PP_INDIRECT_SELF)\n#    error BOOST_PP_ERROR:  no indirect file to include\n# endif\n#\n# define BOOST_PP_IS_SELFISH 1\n#\n# include BOOST_PP_INDIRECT_SELF\n#\n# undef BOOST_PP_IS_SELFISH\n# undef BOOST_PP_INDIRECT_SELF\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/detail/start.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_LOCAL_SE\n#\n# undef BOOST_PP_LOCAL_SE_DIGIT_1\n# undef BOOST_PP_LOCAL_SE_DIGIT_2\n# undef BOOST_PP_LOCAL_SE_DIGIT_3\n# undef BOOST_PP_LOCAL_SE_DIGIT_4\n# undef BOOST_PP_LOCAL_SE_DIGIT_5\n# undef BOOST_PP_LOCAL_SE_DIGIT_6\n# undef BOOST_PP_LOCAL_SE_DIGIT_7\n# undef BOOST_PP_LOCAL_SE_DIGIT_8\n# undef BOOST_PP_LOCAL_SE_DIGIT_9\n# undef BOOST_PP_LOCAL_SE_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_LOCAL_SE_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_LOCAL_SE_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_LOCAL_SE_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_LOCAL_SE_DIGIT_3\n#    define BOOST_PP_LOCAL_SE() BOOST_PP_SLOT_CC_3(BOOST_PP_LOCAL_SE_DIGIT_3, BOOST_PP_LOCAL_SE_DIGIT_2, BOOST_PP_LOCAL_SE_DIGIT_1)\n# elif BOOST_PP_LOCAL_SE_DIGIT_2\n#    define BOOST_PP_LOCAL_SE() BOOST_PP_SLOT_CC_2(BOOST_PP_LOCAL_SE_DIGIT_2, BOOST_PP_LOCAL_SE_DIGIT_1)\n# else\n#    define BOOST_PP_LOCAL_SE() BOOST_PP_LOCAL_SE_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/iterate.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP\n# define BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/array/elem.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/slot/slot.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ITERATION_DEPTH */\n#\n# define BOOST_PP_ITERATION_DEPTH() 0\n#\n# /* BOOST_PP_ITERATION */\n#\n# define BOOST_PP_ITERATION() BOOST_PP_CAT(BOOST_PP_ITERATION_, BOOST_PP_ITERATION_DEPTH())\n#\n# /* BOOST_PP_ITERATION_START && BOOST_PP_ITERATION_FINISH */\n#\n# define BOOST_PP_ITERATION_START() BOOST_PP_CAT(BOOST_PP_ITERATION_START_, BOOST_PP_ITERATION_DEPTH())\n# define BOOST_PP_ITERATION_FINISH() BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, BOOST_PP_ITERATION_DEPTH())\n#\n# /* BOOST_PP_ITERATION_FLAGS */\n#\n# define BOOST_PP_ITERATION_FLAGS() (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, BOOST_PP_ITERATION_DEPTH())())\n#\n# /* BOOST_PP_FRAME_ITERATION */\n#\n# define BOOST_PP_FRAME_ITERATION(i) BOOST_PP_CAT(BOOST_PP_ITERATION_, i)\n#\n# /* BOOST_PP_FRAME_START && BOOST_PP_FRAME_FINISH */\n#\n# define BOOST_PP_FRAME_START(i) BOOST_PP_CAT(BOOST_PP_ITERATION_START_, i)\n# define BOOST_PP_FRAME_FINISH(i) BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, i)\n#\n# /* BOOST_PP_FRAME_FLAGS */\n#\n# define BOOST_PP_FRAME_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, i)())\n#\n# /* BOOST_PP_RELATIVE_ITERATION */\n#\n# define BOOST_PP_RELATIVE_ITERATION(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_)\n#\n# define BOOST_PP_RELATIVE_0(m) BOOST_PP_CAT(m, BOOST_PP_ITERATION_DEPTH())\n# define BOOST_PP_RELATIVE_1(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))\n# define BOOST_PP_RELATIVE_2(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())))\n# define BOOST_PP_RELATIVE_3(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))))\n# define BOOST_PP_RELATIVE_4(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())))))\n#\n# /* BOOST_PP_RELATIVE_START && BOOST_PP_RELATIVE_FINISH */\n#\n# define BOOST_PP_RELATIVE_START(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_START_)\n# define BOOST_PP_RELATIVE_FINISH(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FINISH_)\n#\n# /* BOOST_PP_RELATIVE_FLAGS */\n#\n# define BOOST_PP_RELATIVE_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FLAGS_)())\n#\n# /* BOOST_PP_ITERATE */\n#\n# define BOOST_PP_ITERATE() BOOST_PP_CAT(BOOST_PP_ITERATE_, BOOST_PP_INC(BOOST_PP_ITERATION_DEPTH()))\n#\n# define BOOST_PP_ITERATE_1 <boost/preprocessor/iteration/detail/iter/forward1.hpp>\n# define BOOST_PP_ITERATE_2 <boost/preprocessor/iteration/detail/iter/forward2.hpp>\n# define BOOST_PP_ITERATE_3 <boost/preprocessor/iteration/detail/iter/forward3.hpp>\n# define BOOST_PP_ITERATE_4 <boost/preprocessor/iteration/detail/iter/forward4.hpp>\n# define BOOST_PP_ITERATE_5 <boost/preprocessor/iteration/detail/iter/forward5.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/local.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ITERATION_LOCAL_HPP\n# define BOOST_PREPROCESSOR_ITERATION_LOCAL_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/slot/slot.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_LOCAL_ITERATE */\n#\n# define BOOST_PP_LOCAL_ITERATE() <boost/preprocessor/iteration/detail/local.hpp>\n#\n# define BOOST_PP_LOCAL_C(n) (BOOST_PP_LOCAL_S) <= n && (BOOST_PP_LOCAL_F) >= n\n# define BOOST_PP_LOCAL_R(n) (BOOST_PP_LOCAL_F) <= n && (BOOST_PP_LOCAL_S) >= n\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration/self.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ITERATION_SELF_HPP\n# define BOOST_PREPROCESSOR_ITERATION_SELF_HPP\n#\n# /* BOOST_PP_INCLUDE_SELF */\n#\n# define BOOST_PP_INCLUDE_SELF() <boost/preprocessor/iteration/detail/self.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/iteration.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ITERATION_HPP\n# define BOOST_PREPROCESSOR_ITERATION_HPP\n#\n# include <boost/preprocessor/iteration/iterate.hpp>\n# include <boost/preprocessor/iteration/local.hpp>\n# include <boost/preprocessor/iteration/self.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/library.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002-2011.                             *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIBRARY_HPP\n# define BOOST_PREPROCESSOR_LIBRARY_HPP\n#\n# include <boost/preprocessor/arithmetic.hpp>\n# include <boost/preprocessor/array.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/comparison.hpp>\n# include <boost/preprocessor/config/limits.hpp>\n# include <boost/preprocessor/control.hpp>\n# include <boost/preprocessor/debug.hpp>\n# include <boost/preprocessor/facilities.hpp>\n# include <boost/preprocessor/iteration.hpp>\n# include <boost/preprocessor/list.hpp>\n# include <boost/preprocessor/logical.hpp>\n# include <boost/preprocessor/punctuation.hpp>\n# include <boost/preprocessor/repetition.hpp>\n# include <boost/preprocessor/selection.hpp>\n# include <boost/preprocessor/seq.hpp>\n# include <boost/preprocessor/slot.hpp>\n# include <boost/preprocessor/stringize.hpp>\n# include <boost/preprocessor/tuple.hpp>\n# include <boost/preprocessor/variadic.hpp>\n# include <boost/preprocessor/wstringize.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/limits.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIMITS_HPP\n# define BOOST_PREPROCESSOR_LIMITS_HPP\n#\n# include <boost/preprocessor/config/limits.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/adt.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  *\n#  * See http://www.boost.org for most recent version.\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_ADT_HPP\n# define BOOST_PREPROCESSOR_LIST_ADT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/detail/is_binary.hpp>\n# include <boost/preprocessor/logical/compl.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# /* BOOST_PP_LIST_CONS */\n#\n# define BOOST_PP_LIST_CONS(head, tail) (head, tail)\n#\n# /* BOOST_PP_LIST_NIL */\n#\n# define BOOST_PP_LIST_NIL BOOST_PP_NIL\n#\n# /* BOOST_PP_LIST_FIRST */\n#\n# define BOOST_PP_LIST_FIRST(list) BOOST_PP_LIST_FIRST_D(list)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I list\n# else\n#    define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I ## list\n# endif\n#\n# define BOOST_PP_LIST_FIRST_I(head, tail) head\n#\n# /* BOOST_PP_LIST_REST */\n#\n# define BOOST_PP_LIST_REST(list) BOOST_PP_LIST_REST_D(list)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I list\n# else\n#    define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I ## list\n# endif\n#\n# define BOOST_PP_LIST_REST_I(head, tail) tail\n#\n# /* BOOST_PP_LIST_IS_CONS */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()\n#    define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_LIST_IS_CONS_D(list)\n#    define BOOST_PP_LIST_IS_CONS_D(list) BOOST_PP_LIST_IS_CONS_ ## list\n#    define BOOST_PP_LIST_IS_CONS_(head, tail) 1\n#    define BOOST_PP_LIST_IS_CONS_BOOST_PP_NIL 0\n# else\n#    define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_IS_BINARY(list)\n# endif\n#\n# /* BOOST_PP_LIST_IS_NIL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()\n#    define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_IS_BINARY(list))\n# else\n#    define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_LIST_IS_CONS(list))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/append.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_APPEND_HPP\n# define BOOST_PREPROCESSOR_LIST_APPEND_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/fold_right.hpp>\n#\n# /* BOOST_PP_LIST_APPEND */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a)\n# else\n#    define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_APPEND_I(a, b)\n#    define BOOST_PP_LIST_APPEND_I(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a)\n# endif\n#\n# define BOOST_PP_LIST_APPEND_O(d, s, x) (x, s)\n#\n# /* BOOST_PP_LIST_APPEND_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a)\n# else\n#    define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_APPEND_D_I(d, a, b)\n#    define BOOST_PP_LIST_APPEND_D_I(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/at.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_AT_HPP\n# define BOOST_PREPROCESSOR_LIST_AT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/list/rest_n.hpp>\n#\n# /* BOOST_PP_LIST_AT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_AT(list, index) BOOST_PP_LIST_FIRST(BOOST_PP_LIST_REST_N(index, list))\n# else\n#    define BOOST_PP_LIST_AT(list, index) BOOST_PP_LIST_AT_I(list, index)\n#    define BOOST_PP_LIST_AT_I(list, index) BOOST_PP_LIST_FIRST(BOOST_PP_LIST_REST_N(index, list))\n# endif\n#\n# /* BOOST_PP_LIST_AT_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_AT_D(d, list, index) BOOST_PP_LIST_FIRST(BOOST_PP_LIST_REST_N_D(d, index, list))\n# else\n#    define BOOST_PP_LIST_AT_D(d, list, index) BOOST_PP_LIST_AT_D_I(d, list, index)\n#    define BOOST_PP_LIST_AT_D_I(d, list, index) BOOST_PP_LIST_FIRST(BOOST_PP_LIST_REST_N_D(d, index, list))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/cat.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_CAT_HPP\n# define BOOST_PREPROCESSOR_LIST_CAT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/list/fold_left.hpp>\n#\n# /* BOOST_PP_LIST_CAT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_CAT(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_CAT_O, BOOST_PP_LIST_FIRST(list), BOOST_PP_LIST_REST(list))\n# else\n#    define BOOST_PP_LIST_CAT(list) BOOST_PP_LIST_CAT_I(list)\n#    define BOOST_PP_LIST_CAT_I(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_CAT_O, BOOST_PP_LIST_FIRST(list), BOOST_PP_LIST_REST(list))\n# endif\n#\n# define BOOST_PP_LIST_CAT_O(d, s, x) BOOST_PP_CAT(s, x)\n#\n# /* BOOST_PP_LIST_CAT_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_CAT_D(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_CAT_O, BOOST_PP_LIST_FIRST(list), BOOST_PP_LIST_REST(list))\n# else\n#    define BOOST_PP_LIST_CAT_D(d, list) BOOST_PP_LIST_CAT_D_I(d, list)\n#    define BOOST_PP_LIST_CAT_D_I(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_CAT_O, BOOST_PP_LIST_FIRST(list), BOOST_PP_LIST_REST(list))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/detail/dmc/fold_left.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP\n# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP\n#\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/detail/edg/fold_left.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_LEFT_HPP\n# define BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_LEFT_HPP\n#\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_LIST_FOLD_LEFT_1_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_LIST_FOLD_LEFT_2_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_LIST_FOLD_LEFT_3_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_LIST_FOLD_LEFT_4_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_LIST_FOLD_LEFT_5_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_LIST_FOLD_LEFT_6_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_LIST_FOLD_LEFT_7_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_LIST_FOLD_LEFT_8_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_LIST_FOLD_LEFT_9_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_LIST_FOLD_LEFT_10_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_LIST_FOLD_LEFT_11_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_LIST_FOLD_LEFT_12_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_LIST_FOLD_LEFT_13_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_LIST_FOLD_LEFT_14_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_LIST_FOLD_LEFT_15_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_LIST_FOLD_LEFT_16_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_LIST_FOLD_LEFT_17_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_LIST_FOLD_LEFT_18_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_LIST_FOLD_LEFT_19_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_LIST_FOLD_LEFT_20_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_LIST_FOLD_LEFT_21_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_LIST_FOLD_LEFT_22_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_LIST_FOLD_LEFT_23_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_LIST_FOLD_LEFT_24_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_LIST_FOLD_LEFT_25_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_LIST_FOLD_LEFT_26_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_LIST_FOLD_LEFT_27_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_LIST_FOLD_LEFT_28_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_LIST_FOLD_LEFT_29_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_LIST_FOLD_LEFT_30_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_LIST_FOLD_LEFT_31_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_LIST_FOLD_LEFT_32_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_LIST_FOLD_LEFT_33_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_LIST_FOLD_LEFT_34_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_LIST_FOLD_LEFT_35_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_LIST_FOLD_LEFT_36_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_LIST_FOLD_LEFT_37_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_LIST_FOLD_LEFT_38_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_LIST_FOLD_LEFT_39_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_LIST_FOLD_LEFT_40_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_LIST_FOLD_LEFT_41_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_LIST_FOLD_LEFT_42_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_LIST_FOLD_LEFT_43_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_LIST_FOLD_LEFT_44_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_LIST_FOLD_LEFT_45_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_LIST_FOLD_LEFT_46_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_LIST_FOLD_LEFT_47_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_LIST_FOLD_LEFT_48_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_LIST_FOLD_LEFT_49_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_LIST_FOLD_LEFT_50_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_LIST_FOLD_LEFT_51_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_LIST_FOLD_LEFT_52_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_LIST_FOLD_LEFT_53_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_LIST_FOLD_LEFT_54_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_LIST_FOLD_LEFT_55_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_LIST_FOLD_LEFT_56_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_LIST_FOLD_LEFT_57_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_LIST_FOLD_LEFT_58_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_LIST_FOLD_LEFT_59_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_LIST_FOLD_LEFT_60_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_LIST_FOLD_LEFT_61_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_LIST_FOLD_LEFT_62_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_LIST_FOLD_LEFT_63_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_LIST_FOLD_LEFT_64_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_LIST_FOLD_LEFT_65_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_LIST_FOLD_LEFT_66_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_LIST_FOLD_LEFT_67_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_LIST_FOLD_LEFT_68_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_LIST_FOLD_LEFT_69_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_LIST_FOLD_LEFT_70_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_LIST_FOLD_LEFT_71_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_LIST_FOLD_LEFT_72_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_LIST_FOLD_LEFT_73_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_LIST_FOLD_LEFT_74_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_LIST_FOLD_LEFT_75_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_LIST_FOLD_LEFT_76_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_LIST_FOLD_LEFT_77_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_LIST_FOLD_LEFT_78_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_LIST_FOLD_LEFT_79_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_LIST_FOLD_LEFT_80_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_LIST_FOLD_LEFT_81_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_LIST_FOLD_LEFT_82_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_LIST_FOLD_LEFT_83_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_LIST_FOLD_LEFT_84_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_LIST_FOLD_LEFT_85_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_LIST_FOLD_LEFT_86_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_LIST_FOLD_LEFT_87_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_LIST_FOLD_LEFT_88_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_LIST_FOLD_LEFT_89_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_LIST_FOLD_LEFT_90_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_LIST_FOLD_LEFT_91_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_LIST_FOLD_LEFT_92_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_LIST_FOLD_LEFT_93_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_LIST_FOLD_LEFT_94_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_LIST_FOLD_LEFT_95_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_LIST_FOLD_LEFT_96_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_LIST_FOLD_LEFT_97_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_LIST_FOLD_LEFT_98_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_LIST_FOLD_LEFT_99_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_LIST_FOLD_LEFT_100_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_LIST_FOLD_LEFT_101_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_LIST_FOLD_LEFT_102_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_LIST_FOLD_LEFT_103_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_LIST_FOLD_LEFT_104_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_LIST_FOLD_LEFT_105_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_LIST_FOLD_LEFT_106_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_LIST_FOLD_LEFT_107_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_LIST_FOLD_LEFT_108_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_LIST_FOLD_LEFT_109_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_LIST_FOLD_LEFT_110_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_LIST_FOLD_LEFT_111_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_LIST_FOLD_LEFT_112_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_LIST_FOLD_LEFT_113_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_LIST_FOLD_LEFT_114_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_LIST_FOLD_LEFT_115_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_LIST_FOLD_LEFT_116_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_LIST_FOLD_LEFT_117_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_LIST_FOLD_LEFT_118_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_LIST_FOLD_LEFT_119_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_LIST_FOLD_LEFT_120_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_LIST_FOLD_LEFT_121_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_LIST_FOLD_LEFT_122_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_LIST_FOLD_LEFT_123_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_LIST_FOLD_LEFT_124_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_LIST_FOLD_LEFT_125_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_LIST_FOLD_LEFT_126_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_LIST_FOLD_LEFT_127_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_LIST_FOLD_LEFT_128_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_LIST_FOLD_LEFT_129_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_LIST_FOLD_LEFT_130_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_LIST_FOLD_LEFT_131_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_LIST_FOLD_LEFT_132_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_LIST_FOLD_LEFT_133_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_LIST_FOLD_LEFT_134_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_LIST_FOLD_LEFT_135_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_LIST_FOLD_LEFT_136_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_LIST_FOLD_LEFT_137_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_LIST_FOLD_LEFT_138_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_LIST_FOLD_LEFT_139_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_LIST_FOLD_LEFT_140_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_LIST_FOLD_LEFT_141_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_LIST_FOLD_LEFT_142_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_LIST_FOLD_LEFT_143_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_LIST_FOLD_LEFT_144_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_LIST_FOLD_LEFT_145_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_LIST_FOLD_LEFT_146_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_LIST_FOLD_LEFT_147_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_LIST_FOLD_LEFT_148_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_LIST_FOLD_LEFT_149_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_LIST_FOLD_LEFT_150_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_LIST_FOLD_LEFT_151_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_LIST_FOLD_LEFT_152_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_LIST_FOLD_LEFT_153_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_LIST_FOLD_LEFT_154_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_LIST_FOLD_LEFT_155_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_LIST_FOLD_LEFT_156_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_LIST_FOLD_LEFT_157_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_LIST_FOLD_LEFT_158_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_LIST_FOLD_LEFT_159_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_LIST_FOLD_LEFT_160_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_LIST_FOLD_LEFT_161_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_LIST_FOLD_LEFT_162_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_LIST_FOLD_LEFT_163_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_LIST_FOLD_LEFT_164_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_LIST_FOLD_LEFT_165_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_LIST_FOLD_LEFT_166_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_LIST_FOLD_LEFT_167_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_LIST_FOLD_LEFT_168_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_LIST_FOLD_LEFT_169_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_LIST_FOLD_LEFT_170_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_LIST_FOLD_LEFT_171_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_LIST_FOLD_LEFT_172_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_LIST_FOLD_LEFT_173_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_LIST_FOLD_LEFT_174_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_LIST_FOLD_LEFT_175_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_LIST_FOLD_LEFT_176_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_LIST_FOLD_LEFT_177_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_LIST_FOLD_LEFT_178_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_LIST_FOLD_LEFT_179_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_LIST_FOLD_LEFT_180_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_LIST_FOLD_LEFT_181_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_LIST_FOLD_LEFT_182_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_LIST_FOLD_LEFT_183_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_LIST_FOLD_LEFT_184_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_LIST_FOLD_LEFT_185_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_LIST_FOLD_LEFT_186_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_LIST_FOLD_LEFT_187_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_LIST_FOLD_LEFT_188_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_LIST_FOLD_LEFT_189_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_LIST_FOLD_LEFT_190_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_LIST_FOLD_LEFT_191_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_LIST_FOLD_LEFT_192_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_LIST_FOLD_LEFT_193_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_LIST_FOLD_LEFT_194_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_LIST_FOLD_LEFT_195_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_LIST_FOLD_LEFT_196_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_LIST_FOLD_LEFT_197_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_LIST_FOLD_LEFT_198_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_LIST_FOLD_LEFT_199_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_LIST_FOLD_LEFT_200_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_LIST_FOLD_LEFT_201_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_LIST_FOLD_LEFT_202_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_LIST_FOLD_LEFT_203_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_LIST_FOLD_LEFT_204_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_LIST_FOLD_LEFT_205_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_LIST_FOLD_LEFT_206_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_LIST_FOLD_LEFT_207_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_LIST_FOLD_LEFT_208_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_LIST_FOLD_LEFT_209_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_LIST_FOLD_LEFT_210_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_LIST_FOLD_LEFT_211_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_LIST_FOLD_LEFT_212_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_LIST_FOLD_LEFT_213_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_LIST_FOLD_LEFT_214_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_LIST_FOLD_LEFT_215_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_LIST_FOLD_LEFT_216_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_LIST_FOLD_LEFT_217_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_LIST_FOLD_LEFT_218_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_LIST_FOLD_LEFT_219_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_LIST_FOLD_LEFT_220_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_LIST_FOLD_LEFT_221_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_LIST_FOLD_LEFT_222_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_LIST_FOLD_LEFT_223_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_LIST_FOLD_LEFT_224_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_LIST_FOLD_LEFT_225_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_LIST_FOLD_LEFT_226_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_LIST_FOLD_LEFT_227_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_LIST_FOLD_LEFT_228_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_LIST_FOLD_LEFT_229_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_LIST_FOLD_LEFT_230_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_LIST_FOLD_LEFT_231_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_LIST_FOLD_LEFT_232_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_LIST_FOLD_LEFT_233_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_LIST_FOLD_LEFT_234_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_LIST_FOLD_LEFT_235_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_LIST_FOLD_LEFT_236_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_LIST_FOLD_LEFT_237_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_LIST_FOLD_LEFT_238_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_LIST_FOLD_LEFT_239_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_LIST_FOLD_LEFT_240_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_LIST_FOLD_LEFT_241_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_LIST_FOLD_LEFT_242_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_LIST_FOLD_LEFT_243_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_LIST_FOLD_LEFT_244_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_LIST_FOLD_LEFT_245_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_LIST_FOLD_LEFT_246_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_LIST_FOLD_LEFT_247_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_LIST_FOLD_LEFT_248_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_LIST_FOLD_LEFT_249_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_LIST_FOLD_LEFT_250_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_LIST_FOLD_LEFT_251_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_LIST_FOLD_LEFT_252_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_LIST_FOLD_LEFT_253_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_LIST_FOLD_LEFT_254_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_LIST_FOLD_LEFT_255_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_LIST_FOLD_LEFT_256_D(o, s, l)\n#\n# define BOOST_PP_LIST_FOLD_LEFT_1_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_2_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_3_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_4_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_5_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_6_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_7_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_8_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_9_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_10_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_11_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_12_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_13_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_14_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_15_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_16_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_17_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_18_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_19_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_20_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_21_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_22_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_23_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_24_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_25_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_26_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_27_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_28_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_29_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_30_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_31_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_32_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_33_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_34_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_35_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_36_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_37_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_38_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_39_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_40_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_41_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_42_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_43_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_44_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_45_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_46_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_47_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_48_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_49_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_50_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_51_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_52_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_53_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_54_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_55_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_56_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_57_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_58_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_59_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_60_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_61_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_62_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_63_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_64_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_65_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_66_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_67_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_68_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_69_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_70_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_71_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_72_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_73_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_74_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_75_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_76_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_77_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_78_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_79_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_80_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_81_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_82_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_83_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_84_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_85_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_86_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_87_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_88_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_89_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_90_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_91_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_92_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_93_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_94_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_95_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_96_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_97_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_98_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_99_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_100_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_101_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_102_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_103_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_104_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_105_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_106_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_107_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_108_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_109_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_110_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_111_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_112_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_113_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_114_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_115_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_116_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_117_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_118_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_119_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_120_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_121_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_122_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_123_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_124_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_125_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_126_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_127_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_128_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_129_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_130_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_131_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_132_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_133_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_134_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_135_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_136_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_137_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_138_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_139_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_140_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_141_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_142_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_143_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_144_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_145_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_146_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_147_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_148_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_149_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_150_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_151_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_152_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_153_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_154_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_155_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_156_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_157_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_158_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_159_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_160_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_161_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_162_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_163_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_164_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_165_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_166_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_167_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_168_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_169_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_170_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_171_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_172_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_173_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_174_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_175_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_176_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_177_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_178_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_179_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_180_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_181_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_182_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_183_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_184_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_185_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_186_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_187_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_188_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_189_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_190_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_191_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_192_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_193_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_194_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_195_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_196_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_197_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_198_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_199_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_200_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_201_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_202_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_203_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_204_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_205_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_206_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_207_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_208_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_209_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_210_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_211_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_212_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_213_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_214_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_215_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_216_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_217_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_218_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_219_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_220_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_221_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_222_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_223_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_224_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_225_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_226_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_227_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_228_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_229_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_230_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_231_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_232_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_233_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_234_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_235_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_236_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_237_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_238_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_239_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_240_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_241_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_242_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_243_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_244_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_245_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_246_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_247_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_248_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_249_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_250_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_251_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_252_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_253_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_254_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_255_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_256_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/detail/edg/fold_right.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_RIGHT_HPP\n# define BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_RIGHT_HPP\n#\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_1_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_2_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_3_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_4_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_5_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_6_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_7_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_8_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_9_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_10_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_11_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_12_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_13_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_14_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_15_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_16_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_17_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_18_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_19_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_20_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_21_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_22_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_23_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_24_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_25_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_26_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_27_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_28_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_29_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_30_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_31_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_32_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_33_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_34_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_35_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_36_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_37_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_38_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_39_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_40_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_41_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_42_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_43_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_44_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_45_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_46_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_47_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_48_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_49_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_50_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_51_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_52_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_53_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_54_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_55_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_56_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_57_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_58_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_59_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_60_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_61_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_62_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_63_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_64_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_65_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_66_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_67_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_68_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_69_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_70_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_71_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_72_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_73_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_74_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_75_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_76_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_77_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_78_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_79_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_80_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_81_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_82_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_83_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_84_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_85_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_86_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_87_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_88_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_89_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_90_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_91_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_92_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_93_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_94_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_95_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_96_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_97_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_98_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_99_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_100_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_101_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_102_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_103_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_104_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_105_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_106_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_107_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_108_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_109_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_110_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_111_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_112_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_113_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_114_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_115_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_116_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_117_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_118_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_119_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_120_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_121_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_122_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_123_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_124_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_125_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_126_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_127_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_128_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_129_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_130_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_131_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_132_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_133_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_134_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_135_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_136_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_137_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_138_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_139_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_140_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_141_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_142_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_143_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_144_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_145_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_146_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_147_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_148_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_149_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_150_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_151_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_152_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_153_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_154_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_155_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_156_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_157_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_158_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_159_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_160_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_161_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_162_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_163_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_164_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_165_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_166_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_167_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_168_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_169_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_170_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_171_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_172_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_173_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_174_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_175_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_176_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_177_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_178_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_179_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_180_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_181_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_182_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_183_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_184_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_185_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_186_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_187_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_188_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_189_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_190_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_191_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_192_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_193_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_194_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_195_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_196_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_197_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_198_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_199_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_200_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_201_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_202_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_203_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_204_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_205_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_206_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_207_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_208_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_209_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_210_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_211_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_212_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_213_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_214_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_215_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_216_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_217_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_218_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_219_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_220_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_221_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_222_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_223_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_224_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_225_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_226_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_227_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_228_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_229_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_230_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_231_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_232_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_233_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_234_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_235_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_236_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_237_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_238_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_239_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_240_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_241_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_242_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_243_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_244_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_245_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_246_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_247_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_248_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_249_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_250_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_251_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_252_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_253_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_254_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_255_D(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_256_D(o, s, l)\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_1_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(2, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_2, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_2_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(3, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_3, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_3_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(4, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_4, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_4_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(5, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_5, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_5_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(6, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_6, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_6_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(7, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_7, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_7_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(8, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_8, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_8_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(9, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_9, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_9_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(10, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_10, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_10_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(11, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_11, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_11_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(12, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_12, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_12_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(13, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_13, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_13_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(14, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_14, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_14_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(15, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_15, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_15_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(16, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_16, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_16_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(17, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_17, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_17_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(18, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_18, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_18_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(19, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_19, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_19_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(20, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_20, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_20_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(21, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_21, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_21_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(22, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_22, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_22_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(23, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_23, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_23_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(24, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_24, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_24_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(25, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_25, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_25_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(26, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_26, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_26_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(27, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_27, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_27_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(28, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_28, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_28_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(29, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_29, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_29_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(30, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_30, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_30_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(31, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_31, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_31_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(32, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_32, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_32_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(33, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_33, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_33_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(34, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_34, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_34_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(35, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_35, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_35_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(36, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_36, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_36_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(37, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_37, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_37_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(38, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_38, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_38_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(39, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_39, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_39_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(40, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_40, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_40_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(41, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_41, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_41_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(42, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_42, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_42_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(43, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_43, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_43_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(44, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_44, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_44_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(45, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_45, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_45_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(46, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_46, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_46_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(47, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_47, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_47_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(48, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_48, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_48_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(49, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_49, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_49_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(50, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_50, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_50_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(51, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_51, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_51_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(52, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_52, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_52_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(53, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_53, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_53_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(54, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_54, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_54_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(55, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_55, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_55_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(56, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_56, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_56_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(57, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_57, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_57_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(58, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_58, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_58_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(59, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_59, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_59_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(60, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_60, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_60_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(61, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_61, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_61_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(62, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_62, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_62_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(63, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_63, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_63_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(64, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_64, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_64_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(65, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_65, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_65_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(66, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_66, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_66_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(67, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_67, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_67_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(68, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_68, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_68_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(69, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_69, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_69_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(70, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_70, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_70_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(71, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_71, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_71_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(72, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_72, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_72_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(73, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_73, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_73_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(74, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_74, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_74_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(75, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_75, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_75_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(76, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_76, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_76_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(77, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_77, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_77_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(78, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_78, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_78_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(79, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_79, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_79_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(80, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_80, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_80_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(81, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_81, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_81_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(82, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_82, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_82_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(83, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_83, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_83_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(84, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_84, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_84_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(85, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_85, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_85_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(86, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_86, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_86_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(87, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_87, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_87_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(88, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_88, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_88_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(89, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_89, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_89_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(90, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_90, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_90_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(91, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_91, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_91_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(92, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_92, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_92_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(93, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_93, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_93_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(94, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_94, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_94_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(95, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_95, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_95_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(96, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_96, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_96_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(97, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_97, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_97_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(98, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_98, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_98_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(99, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_99, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_99_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(100, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_100, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_100_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(101, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_101, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_101_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(102, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_102, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_102_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(103, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_103, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_103_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(104, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_104, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_104_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(105, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_105, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_105_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(106, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_106, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_106_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(107, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_107, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_107_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(108, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_108, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_108_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(109, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_109, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_109_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(110, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_110, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_110_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(111, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_111, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_111_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(112, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_112, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_112_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(113, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_113, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_113_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(114, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_114, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_114_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(115, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_115, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_115_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(116, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_116, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_116_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(117, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_117, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_117_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(118, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_118, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_118_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(119, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_119, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_119_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(120, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_120, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_120_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(121, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_121, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_121_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(122, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_122, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_122_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(123, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_123, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_123_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(124, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_124, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_124_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(125, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_125, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_125_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(126, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_126, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_126_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(127, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_127, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_127_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(128, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_128, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_128_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(129, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_129, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_129_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(130, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_130, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_130_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(131, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_131, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_131_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(132, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_132, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_132_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(133, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_133, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_133_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(134, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_134, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_134_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(135, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_135, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_135_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(136, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_136, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_136_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(137, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_137, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_137_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(138, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_138, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_138_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(139, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_139, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_139_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(140, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_140, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_140_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(141, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_141, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_141_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(142, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_142, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_142_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(143, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_143, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_143_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(144, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_144, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_144_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(145, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_145, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_145_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(146, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_146, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_146_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(147, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_147, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_147_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(148, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_148, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_148_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(149, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_149, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_149_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(150, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_150, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_150_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(151, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_151, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_151_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(152, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_152, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_152_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(153, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_153, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_153_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(154, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_154, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_154_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(155, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_155, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_155_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(156, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_156, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_156_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(157, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_157, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_157_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(158, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_158, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_158_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(159, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_159, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_159_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(160, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_160, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_160_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(161, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_161, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_161_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(162, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_162, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_162_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(163, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_163, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_163_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(164, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_164, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_164_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(165, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_165, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_165_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(166, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_166, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_166_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(167, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_167, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_167_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(168, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_168, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_168_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(169, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_169, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_169_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(170, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_170, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_170_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(171, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_171, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_171_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(172, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_172, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_172_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(173, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_173, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_173_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(174, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_174, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_174_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(175, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_175, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_175_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(176, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_176, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_176_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(177, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_177, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_177_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(178, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_178, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_178_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(179, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_179, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_179_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(180, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_180, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_180_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(181, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_181, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_181_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(182, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_182, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_182_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(183, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_183, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_183_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(184, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_184, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_184_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(185, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_185, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_185_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(186, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_186, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_186_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(187, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_187, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_187_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(188, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_188, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_188_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(189, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_189, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_189_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(190, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_190, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_190_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(191, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_191, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_191_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(192, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_192, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_192_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(193, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_193, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_193_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(194, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_194, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_194_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(195, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_195, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_195_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(196, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_196, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_196_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(197, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_197, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_197_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(198, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_198, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_198_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(199, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_199, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_199_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(200, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_200, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_200_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(201, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_201, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_201_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(202, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_202, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_202_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(203, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_203, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_203_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(204, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_204, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_204_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(205, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_205, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_205_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(206, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_206, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_206_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(207, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_207, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_207_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(208, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_208, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_208_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(209, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_209, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_209_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(210, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_210, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_210_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(211, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_211, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_211_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(212, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_212, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_212_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(213, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_213, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_213_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(214, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_214, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_214_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(215, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_215, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_215_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(216, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_216, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_216_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(217, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_217, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_217_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(218, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_218, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_218_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(219, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_219, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_219_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(220, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_220, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_220_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(221, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_221, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_221_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(222, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_222, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_222_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(223, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_223, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_223_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(224, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_224, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_224_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(225, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_225, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_225_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(226, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_226, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_226_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(227, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_227, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_227_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(228, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_228, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_228_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(229, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_229, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_229_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(230, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_230, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_230_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(231, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_231, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_231_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(232, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_232, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_232_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(233, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_233, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_233_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(234, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_234, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_234_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(235, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_235, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_235_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(236, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_236, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_236_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(237, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_237, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_237_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(238, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_238, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_238_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(239, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_239, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_239_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(240, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_240, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_240_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(241, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_241, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_241_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(242, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_242, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_242_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(243, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_243, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_243_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(244, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_244, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_244_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(245, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_245, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_245_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(246, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_246, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_246_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(247, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_247, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_247_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(248, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_248, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_248_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(249, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_249, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_249_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(250, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_250, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_250_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(251, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_251, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_251_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(252, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_252, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_252_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(253, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_253, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_253_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(254, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_254, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_254_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(255, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_255, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_255_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(256, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_256, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n# define BOOST_PP_LIST_FOLD_RIGHT_256_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(257, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_257, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) 0\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/detail/fold_left.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP\n# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP\n#\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/detail/fold_right.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP\n# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP\n#\n# include <boost/preprocessor/list/fold_left.hpp>\n# include <boost/preprocessor/list/reverse.hpp>\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) BOOST_PP_LIST_FOLD_LEFT_1(o, s, BOOST_PP_LIST_REVERSE_D(1, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) BOOST_PP_LIST_FOLD_LEFT_2(o, s, BOOST_PP_LIST_REVERSE_D(2, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) BOOST_PP_LIST_FOLD_LEFT_3(o, s, BOOST_PP_LIST_REVERSE_D(3, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) BOOST_PP_LIST_FOLD_LEFT_4(o, s, BOOST_PP_LIST_REVERSE_D(4, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) BOOST_PP_LIST_FOLD_LEFT_5(o, s, BOOST_PP_LIST_REVERSE_D(5, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) BOOST_PP_LIST_FOLD_LEFT_6(o, s, BOOST_PP_LIST_REVERSE_D(6, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) BOOST_PP_LIST_FOLD_LEFT_7(o, s, BOOST_PP_LIST_REVERSE_D(7, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) BOOST_PP_LIST_FOLD_LEFT_8(o, s, BOOST_PP_LIST_REVERSE_D(8, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) BOOST_PP_LIST_FOLD_LEFT_9(o, s, BOOST_PP_LIST_REVERSE_D(9, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) BOOST_PP_LIST_FOLD_LEFT_10(o, s, BOOST_PP_LIST_REVERSE_D(10, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) BOOST_PP_LIST_FOLD_LEFT_11(o, s, BOOST_PP_LIST_REVERSE_D(11, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) BOOST_PP_LIST_FOLD_LEFT_12(o, s, BOOST_PP_LIST_REVERSE_D(12, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) BOOST_PP_LIST_FOLD_LEFT_13(o, s, BOOST_PP_LIST_REVERSE_D(13, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) BOOST_PP_LIST_FOLD_LEFT_14(o, s, BOOST_PP_LIST_REVERSE_D(14, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) BOOST_PP_LIST_FOLD_LEFT_15(o, s, BOOST_PP_LIST_REVERSE_D(15, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) BOOST_PP_LIST_FOLD_LEFT_16(o, s, BOOST_PP_LIST_REVERSE_D(16, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) BOOST_PP_LIST_FOLD_LEFT_17(o, s, BOOST_PP_LIST_REVERSE_D(17, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) BOOST_PP_LIST_FOLD_LEFT_18(o, s, BOOST_PP_LIST_REVERSE_D(18, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) BOOST_PP_LIST_FOLD_LEFT_19(o, s, BOOST_PP_LIST_REVERSE_D(19, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) BOOST_PP_LIST_FOLD_LEFT_20(o, s, BOOST_PP_LIST_REVERSE_D(20, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) BOOST_PP_LIST_FOLD_LEFT_21(o, s, BOOST_PP_LIST_REVERSE_D(21, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) BOOST_PP_LIST_FOLD_LEFT_22(o, s, BOOST_PP_LIST_REVERSE_D(22, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) BOOST_PP_LIST_FOLD_LEFT_23(o, s, BOOST_PP_LIST_REVERSE_D(23, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) BOOST_PP_LIST_FOLD_LEFT_24(o, s, BOOST_PP_LIST_REVERSE_D(24, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) BOOST_PP_LIST_FOLD_LEFT_25(o, s, BOOST_PP_LIST_REVERSE_D(25, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) BOOST_PP_LIST_FOLD_LEFT_26(o, s, BOOST_PP_LIST_REVERSE_D(26, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) BOOST_PP_LIST_FOLD_LEFT_27(o, s, BOOST_PP_LIST_REVERSE_D(27, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) BOOST_PP_LIST_FOLD_LEFT_28(o, s, BOOST_PP_LIST_REVERSE_D(28, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) BOOST_PP_LIST_FOLD_LEFT_29(o, s, BOOST_PP_LIST_REVERSE_D(29, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) BOOST_PP_LIST_FOLD_LEFT_30(o, s, BOOST_PP_LIST_REVERSE_D(30, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) BOOST_PP_LIST_FOLD_LEFT_31(o, s, BOOST_PP_LIST_REVERSE_D(31, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) BOOST_PP_LIST_FOLD_LEFT_32(o, s, BOOST_PP_LIST_REVERSE_D(32, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) BOOST_PP_LIST_FOLD_LEFT_33(o, s, BOOST_PP_LIST_REVERSE_D(33, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) BOOST_PP_LIST_FOLD_LEFT_34(o, s, BOOST_PP_LIST_REVERSE_D(34, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) BOOST_PP_LIST_FOLD_LEFT_35(o, s, BOOST_PP_LIST_REVERSE_D(35, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) BOOST_PP_LIST_FOLD_LEFT_36(o, s, BOOST_PP_LIST_REVERSE_D(36, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) BOOST_PP_LIST_FOLD_LEFT_37(o, s, BOOST_PP_LIST_REVERSE_D(37, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) BOOST_PP_LIST_FOLD_LEFT_38(o, s, BOOST_PP_LIST_REVERSE_D(38, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) BOOST_PP_LIST_FOLD_LEFT_39(o, s, BOOST_PP_LIST_REVERSE_D(39, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) BOOST_PP_LIST_FOLD_LEFT_40(o, s, BOOST_PP_LIST_REVERSE_D(40, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) BOOST_PP_LIST_FOLD_LEFT_41(o, s, BOOST_PP_LIST_REVERSE_D(41, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) BOOST_PP_LIST_FOLD_LEFT_42(o, s, BOOST_PP_LIST_REVERSE_D(42, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) BOOST_PP_LIST_FOLD_LEFT_43(o, s, BOOST_PP_LIST_REVERSE_D(43, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) BOOST_PP_LIST_FOLD_LEFT_44(o, s, BOOST_PP_LIST_REVERSE_D(44, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) BOOST_PP_LIST_FOLD_LEFT_45(o, s, BOOST_PP_LIST_REVERSE_D(45, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) BOOST_PP_LIST_FOLD_LEFT_46(o, s, BOOST_PP_LIST_REVERSE_D(46, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) BOOST_PP_LIST_FOLD_LEFT_47(o, s, BOOST_PP_LIST_REVERSE_D(47, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) BOOST_PP_LIST_FOLD_LEFT_48(o, s, BOOST_PP_LIST_REVERSE_D(48, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) BOOST_PP_LIST_FOLD_LEFT_49(o, s, BOOST_PP_LIST_REVERSE_D(49, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) BOOST_PP_LIST_FOLD_LEFT_50(o, s, BOOST_PP_LIST_REVERSE_D(50, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) BOOST_PP_LIST_FOLD_LEFT_51(o, s, BOOST_PP_LIST_REVERSE_D(51, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) BOOST_PP_LIST_FOLD_LEFT_52(o, s, BOOST_PP_LIST_REVERSE_D(52, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) BOOST_PP_LIST_FOLD_LEFT_53(o, s, BOOST_PP_LIST_REVERSE_D(53, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) BOOST_PP_LIST_FOLD_LEFT_54(o, s, BOOST_PP_LIST_REVERSE_D(54, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) BOOST_PP_LIST_FOLD_LEFT_55(o, s, BOOST_PP_LIST_REVERSE_D(55, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) BOOST_PP_LIST_FOLD_LEFT_56(o, s, BOOST_PP_LIST_REVERSE_D(56, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) BOOST_PP_LIST_FOLD_LEFT_57(o, s, BOOST_PP_LIST_REVERSE_D(57, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) BOOST_PP_LIST_FOLD_LEFT_58(o, s, BOOST_PP_LIST_REVERSE_D(58, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) BOOST_PP_LIST_FOLD_LEFT_59(o, s, BOOST_PP_LIST_REVERSE_D(59, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) BOOST_PP_LIST_FOLD_LEFT_60(o, s, BOOST_PP_LIST_REVERSE_D(60, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) BOOST_PP_LIST_FOLD_LEFT_61(o, s, BOOST_PP_LIST_REVERSE_D(61, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) BOOST_PP_LIST_FOLD_LEFT_62(o, s, BOOST_PP_LIST_REVERSE_D(62, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) BOOST_PP_LIST_FOLD_LEFT_63(o, s, BOOST_PP_LIST_REVERSE_D(63, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) BOOST_PP_LIST_FOLD_LEFT_64(o, s, BOOST_PP_LIST_REVERSE_D(64, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) BOOST_PP_LIST_FOLD_LEFT_65(o, s, BOOST_PP_LIST_REVERSE_D(65, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) BOOST_PP_LIST_FOLD_LEFT_66(o, s, BOOST_PP_LIST_REVERSE_D(66, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) BOOST_PP_LIST_FOLD_LEFT_67(o, s, BOOST_PP_LIST_REVERSE_D(67, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) BOOST_PP_LIST_FOLD_LEFT_68(o, s, BOOST_PP_LIST_REVERSE_D(68, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) BOOST_PP_LIST_FOLD_LEFT_69(o, s, BOOST_PP_LIST_REVERSE_D(69, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) BOOST_PP_LIST_FOLD_LEFT_70(o, s, BOOST_PP_LIST_REVERSE_D(70, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) BOOST_PP_LIST_FOLD_LEFT_71(o, s, BOOST_PP_LIST_REVERSE_D(71, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) BOOST_PP_LIST_FOLD_LEFT_72(o, s, BOOST_PP_LIST_REVERSE_D(72, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) BOOST_PP_LIST_FOLD_LEFT_73(o, s, BOOST_PP_LIST_REVERSE_D(73, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) BOOST_PP_LIST_FOLD_LEFT_74(o, s, BOOST_PP_LIST_REVERSE_D(74, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) BOOST_PP_LIST_FOLD_LEFT_75(o, s, BOOST_PP_LIST_REVERSE_D(75, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) BOOST_PP_LIST_FOLD_LEFT_76(o, s, BOOST_PP_LIST_REVERSE_D(76, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) BOOST_PP_LIST_FOLD_LEFT_77(o, s, BOOST_PP_LIST_REVERSE_D(77, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) BOOST_PP_LIST_FOLD_LEFT_78(o, s, BOOST_PP_LIST_REVERSE_D(78, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) BOOST_PP_LIST_FOLD_LEFT_79(o, s, BOOST_PP_LIST_REVERSE_D(79, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) BOOST_PP_LIST_FOLD_LEFT_80(o, s, BOOST_PP_LIST_REVERSE_D(80, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) BOOST_PP_LIST_FOLD_LEFT_81(o, s, BOOST_PP_LIST_REVERSE_D(81, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) BOOST_PP_LIST_FOLD_LEFT_82(o, s, BOOST_PP_LIST_REVERSE_D(82, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) BOOST_PP_LIST_FOLD_LEFT_83(o, s, BOOST_PP_LIST_REVERSE_D(83, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) BOOST_PP_LIST_FOLD_LEFT_84(o, s, BOOST_PP_LIST_REVERSE_D(84, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) BOOST_PP_LIST_FOLD_LEFT_85(o, s, BOOST_PP_LIST_REVERSE_D(85, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) BOOST_PP_LIST_FOLD_LEFT_86(o, s, BOOST_PP_LIST_REVERSE_D(86, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) BOOST_PP_LIST_FOLD_LEFT_87(o, s, BOOST_PP_LIST_REVERSE_D(87, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) BOOST_PP_LIST_FOLD_LEFT_88(o, s, BOOST_PP_LIST_REVERSE_D(88, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) BOOST_PP_LIST_FOLD_LEFT_89(o, s, BOOST_PP_LIST_REVERSE_D(89, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) BOOST_PP_LIST_FOLD_LEFT_90(o, s, BOOST_PP_LIST_REVERSE_D(90, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) BOOST_PP_LIST_FOLD_LEFT_91(o, s, BOOST_PP_LIST_REVERSE_D(91, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) BOOST_PP_LIST_FOLD_LEFT_92(o, s, BOOST_PP_LIST_REVERSE_D(92, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) BOOST_PP_LIST_FOLD_LEFT_93(o, s, BOOST_PP_LIST_REVERSE_D(93, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) BOOST_PP_LIST_FOLD_LEFT_94(o, s, BOOST_PP_LIST_REVERSE_D(94, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) BOOST_PP_LIST_FOLD_LEFT_95(o, s, BOOST_PP_LIST_REVERSE_D(95, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) BOOST_PP_LIST_FOLD_LEFT_96(o, s, BOOST_PP_LIST_REVERSE_D(96, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) BOOST_PP_LIST_FOLD_LEFT_97(o, s, BOOST_PP_LIST_REVERSE_D(97, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) BOOST_PP_LIST_FOLD_LEFT_98(o, s, BOOST_PP_LIST_REVERSE_D(98, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) BOOST_PP_LIST_FOLD_LEFT_99(o, s, BOOST_PP_LIST_REVERSE_D(99, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) BOOST_PP_LIST_FOLD_LEFT_100(o, s, BOOST_PP_LIST_REVERSE_D(100, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) BOOST_PP_LIST_FOLD_LEFT_101(o, s, BOOST_PP_LIST_REVERSE_D(101, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) BOOST_PP_LIST_FOLD_LEFT_102(o, s, BOOST_PP_LIST_REVERSE_D(102, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) BOOST_PP_LIST_FOLD_LEFT_103(o, s, BOOST_PP_LIST_REVERSE_D(103, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) BOOST_PP_LIST_FOLD_LEFT_104(o, s, BOOST_PP_LIST_REVERSE_D(104, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) BOOST_PP_LIST_FOLD_LEFT_105(o, s, BOOST_PP_LIST_REVERSE_D(105, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) BOOST_PP_LIST_FOLD_LEFT_106(o, s, BOOST_PP_LIST_REVERSE_D(106, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) BOOST_PP_LIST_FOLD_LEFT_107(o, s, BOOST_PP_LIST_REVERSE_D(107, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) BOOST_PP_LIST_FOLD_LEFT_108(o, s, BOOST_PP_LIST_REVERSE_D(108, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) BOOST_PP_LIST_FOLD_LEFT_109(o, s, BOOST_PP_LIST_REVERSE_D(109, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) BOOST_PP_LIST_FOLD_LEFT_110(o, s, BOOST_PP_LIST_REVERSE_D(110, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) BOOST_PP_LIST_FOLD_LEFT_111(o, s, BOOST_PP_LIST_REVERSE_D(111, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) BOOST_PP_LIST_FOLD_LEFT_112(o, s, BOOST_PP_LIST_REVERSE_D(112, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) BOOST_PP_LIST_FOLD_LEFT_113(o, s, BOOST_PP_LIST_REVERSE_D(113, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) BOOST_PP_LIST_FOLD_LEFT_114(o, s, BOOST_PP_LIST_REVERSE_D(114, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) BOOST_PP_LIST_FOLD_LEFT_115(o, s, BOOST_PP_LIST_REVERSE_D(115, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) BOOST_PP_LIST_FOLD_LEFT_116(o, s, BOOST_PP_LIST_REVERSE_D(116, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) BOOST_PP_LIST_FOLD_LEFT_117(o, s, BOOST_PP_LIST_REVERSE_D(117, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) BOOST_PP_LIST_FOLD_LEFT_118(o, s, BOOST_PP_LIST_REVERSE_D(118, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) BOOST_PP_LIST_FOLD_LEFT_119(o, s, BOOST_PP_LIST_REVERSE_D(119, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) BOOST_PP_LIST_FOLD_LEFT_120(o, s, BOOST_PP_LIST_REVERSE_D(120, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) BOOST_PP_LIST_FOLD_LEFT_121(o, s, BOOST_PP_LIST_REVERSE_D(121, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) BOOST_PP_LIST_FOLD_LEFT_122(o, s, BOOST_PP_LIST_REVERSE_D(122, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) BOOST_PP_LIST_FOLD_LEFT_123(o, s, BOOST_PP_LIST_REVERSE_D(123, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) BOOST_PP_LIST_FOLD_LEFT_124(o, s, BOOST_PP_LIST_REVERSE_D(124, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) BOOST_PP_LIST_FOLD_LEFT_125(o, s, BOOST_PP_LIST_REVERSE_D(125, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) BOOST_PP_LIST_FOLD_LEFT_126(o, s, BOOST_PP_LIST_REVERSE_D(126, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) BOOST_PP_LIST_FOLD_LEFT_127(o, s, BOOST_PP_LIST_REVERSE_D(127, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) BOOST_PP_LIST_FOLD_LEFT_128(o, s, BOOST_PP_LIST_REVERSE_D(128, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) BOOST_PP_LIST_FOLD_LEFT_129(o, s, BOOST_PP_LIST_REVERSE_D(129, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) BOOST_PP_LIST_FOLD_LEFT_130(o, s, BOOST_PP_LIST_REVERSE_D(130, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) BOOST_PP_LIST_FOLD_LEFT_131(o, s, BOOST_PP_LIST_REVERSE_D(131, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) BOOST_PP_LIST_FOLD_LEFT_132(o, s, BOOST_PP_LIST_REVERSE_D(132, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) BOOST_PP_LIST_FOLD_LEFT_133(o, s, BOOST_PP_LIST_REVERSE_D(133, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) BOOST_PP_LIST_FOLD_LEFT_134(o, s, BOOST_PP_LIST_REVERSE_D(134, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) BOOST_PP_LIST_FOLD_LEFT_135(o, s, BOOST_PP_LIST_REVERSE_D(135, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) BOOST_PP_LIST_FOLD_LEFT_136(o, s, BOOST_PP_LIST_REVERSE_D(136, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) BOOST_PP_LIST_FOLD_LEFT_137(o, s, BOOST_PP_LIST_REVERSE_D(137, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) BOOST_PP_LIST_FOLD_LEFT_138(o, s, BOOST_PP_LIST_REVERSE_D(138, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) BOOST_PP_LIST_FOLD_LEFT_139(o, s, BOOST_PP_LIST_REVERSE_D(139, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) BOOST_PP_LIST_FOLD_LEFT_140(o, s, BOOST_PP_LIST_REVERSE_D(140, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) BOOST_PP_LIST_FOLD_LEFT_141(o, s, BOOST_PP_LIST_REVERSE_D(141, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) BOOST_PP_LIST_FOLD_LEFT_142(o, s, BOOST_PP_LIST_REVERSE_D(142, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) BOOST_PP_LIST_FOLD_LEFT_143(o, s, BOOST_PP_LIST_REVERSE_D(143, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) BOOST_PP_LIST_FOLD_LEFT_144(o, s, BOOST_PP_LIST_REVERSE_D(144, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) BOOST_PP_LIST_FOLD_LEFT_145(o, s, BOOST_PP_LIST_REVERSE_D(145, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) BOOST_PP_LIST_FOLD_LEFT_146(o, s, BOOST_PP_LIST_REVERSE_D(146, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) BOOST_PP_LIST_FOLD_LEFT_147(o, s, BOOST_PP_LIST_REVERSE_D(147, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) BOOST_PP_LIST_FOLD_LEFT_148(o, s, BOOST_PP_LIST_REVERSE_D(148, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) BOOST_PP_LIST_FOLD_LEFT_149(o, s, BOOST_PP_LIST_REVERSE_D(149, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) BOOST_PP_LIST_FOLD_LEFT_150(o, s, BOOST_PP_LIST_REVERSE_D(150, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) BOOST_PP_LIST_FOLD_LEFT_151(o, s, BOOST_PP_LIST_REVERSE_D(151, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) BOOST_PP_LIST_FOLD_LEFT_152(o, s, BOOST_PP_LIST_REVERSE_D(152, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) BOOST_PP_LIST_FOLD_LEFT_153(o, s, BOOST_PP_LIST_REVERSE_D(153, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) BOOST_PP_LIST_FOLD_LEFT_154(o, s, BOOST_PP_LIST_REVERSE_D(154, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) BOOST_PP_LIST_FOLD_LEFT_155(o, s, BOOST_PP_LIST_REVERSE_D(155, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) BOOST_PP_LIST_FOLD_LEFT_156(o, s, BOOST_PP_LIST_REVERSE_D(156, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) BOOST_PP_LIST_FOLD_LEFT_157(o, s, BOOST_PP_LIST_REVERSE_D(157, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) BOOST_PP_LIST_FOLD_LEFT_158(o, s, BOOST_PP_LIST_REVERSE_D(158, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) BOOST_PP_LIST_FOLD_LEFT_159(o, s, BOOST_PP_LIST_REVERSE_D(159, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) BOOST_PP_LIST_FOLD_LEFT_160(o, s, BOOST_PP_LIST_REVERSE_D(160, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) BOOST_PP_LIST_FOLD_LEFT_161(o, s, BOOST_PP_LIST_REVERSE_D(161, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) BOOST_PP_LIST_FOLD_LEFT_162(o, s, BOOST_PP_LIST_REVERSE_D(162, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) BOOST_PP_LIST_FOLD_LEFT_163(o, s, BOOST_PP_LIST_REVERSE_D(163, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) BOOST_PP_LIST_FOLD_LEFT_164(o, s, BOOST_PP_LIST_REVERSE_D(164, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) BOOST_PP_LIST_FOLD_LEFT_165(o, s, BOOST_PP_LIST_REVERSE_D(165, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) BOOST_PP_LIST_FOLD_LEFT_166(o, s, BOOST_PP_LIST_REVERSE_D(166, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) BOOST_PP_LIST_FOLD_LEFT_167(o, s, BOOST_PP_LIST_REVERSE_D(167, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) BOOST_PP_LIST_FOLD_LEFT_168(o, s, BOOST_PP_LIST_REVERSE_D(168, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) BOOST_PP_LIST_FOLD_LEFT_169(o, s, BOOST_PP_LIST_REVERSE_D(169, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) BOOST_PP_LIST_FOLD_LEFT_170(o, s, BOOST_PP_LIST_REVERSE_D(170, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) BOOST_PP_LIST_FOLD_LEFT_171(o, s, BOOST_PP_LIST_REVERSE_D(171, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) BOOST_PP_LIST_FOLD_LEFT_172(o, s, BOOST_PP_LIST_REVERSE_D(172, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) BOOST_PP_LIST_FOLD_LEFT_173(o, s, BOOST_PP_LIST_REVERSE_D(173, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) BOOST_PP_LIST_FOLD_LEFT_174(o, s, BOOST_PP_LIST_REVERSE_D(174, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) BOOST_PP_LIST_FOLD_LEFT_175(o, s, BOOST_PP_LIST_REVERSE_D(175, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) BOOST_PP_LIST_FOLD_LEFT_176(o, s, BOOST_PP_LIST_REVERSE_D(176, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) BOOST_PP_LIST_FOLD_LEFT_177(o, s, BOOST_PP_LIST_REVERSE_D(177, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) BOOST_PP_LIST_FOLD_LEFT_178(o, s, BOOST_PP_LIST_REVERSE_D(178, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) BOOST_PP_LIST_FOLD_LEFT_179(o, s, BOOST_PP_LIST_REVERSE_D(179, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) BOOST_PP_LIST_FOLD_LEFT_180(o, s, BOOST_PP_LIST_REVERSE_D(180, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) BOOST_PP_LIST_FOLD_LEFT_181(o, s, BOOST_PP_LIST_REVERSE_D(181, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) BOOST_PP_LIST_FOLD_LEFT_182(o, s, BOOST_PP_LIST_REVERSE_D(182, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) BOOST_PP_LIST_FOLD_LEFT_183(o, s, BOOST_PP_LIST_REVERSE_D(183, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) BOOST_PP_LIST_FOLD_LEFT_184(o, s, BOOST_PP_LIST_REVERSE_D(184, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) BOOST_PP_LIST_FOLD_LEFT_185(o, s, BOOST_PP_LIST_REVERSE_D(185, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) BOOST_PP_LIST_FOLD_LEFT_186(o, s, BOOST_PP_LIST_REVERSE_D(186, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) BOOST_PP_LIST_FOLD_LEFT_187(o, s, BOOST_PP_LIST_REVERSE_D(187, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) BOOST_PP_LIST_FOLD_LEFT_188(o, s, BOOST_PP_LIST_REVERSE_D(188, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) BOOST_PP_LIST_FOLD_LEFT_189(o, s, BOOST_PP_LIST_REVERSE_D(189, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) BOOST_PP_LIST_FOLD_LEFT_190(o, s, BOOST_PP_LIST_REVERSE_D(190, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) BOOST_PP_LIST_FOLD_LEFT_191(o, s, BOOST_PP_LIST_REVERSE_D(191, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) BOOST_PP_LIST_FOLD_LEFT_192(o, s, BOOST_PP_LIST_REVERSE_D(192, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) BOOST_PP_LIST_FOLD_LEFT_193(o, s, BOOST_PP_LIST_REVERSE_D(193, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) BOOST_PP_LIST_FOLD_LEFT_194(o, s, BOOST_PP_LIST_REVERSE_D(194, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) BOOST_PP_LIST_FOLD_LEFT_195(o, s, BOOST_PP_LIST_REVERSE_D(195, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) BOOST_PP_LIST_FOLD_LEFT_196(o, s, BOOST_PP_LIST_REVERSE_D(196, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) BOOST_PP_LIST_FOLD_LEFT_197(o, s, BOOST_PP_LIST_REVERSE_D(197, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) BOOST_PP_LIST_FOLD_LEFT_198(o, s, BOOST_PP_LIST_REVERSE_D(198, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) BOOST_PP_LIST_FOLD_LEFT_199(o, s, BOOST_PP_LIST_REVERSE_D(199, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) BOOST_PP_LIST_FOLD_LEFT_200(o, s, BOOST_PP_LIST_REVERSE_D(200, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) BOOST_PP_LIST_FOLD_LEFT_201(o, s, BOOST_PP_LIST_REVERSE_D(201, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) BOOST_PP_LIST_FOLD_LEFT_202(o, s, BOOST_PP_LIST_REVERSE_D(202, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) BOOST_PP_LIST_FOLD_LEFT_203(o, s, BOOST_PP_LIST_REVERSE_D(203, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) BOOST_PP_LIST_FOLD_LEFT_204(o, s, BOOST_PP_LIST_REVERSE_D(204, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) BOOST_PP_LIST_FOLD_LEFT_205(o, s, BOOST_PP_LIST_REVERSE_D(205, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) BOOST_PP_LIST_FOLD_LEFT_206(o, s, BOOST_PP_LIST_REVERSE_D(206, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) BOOST_PP_LIST_FOLD_LEFT_207(o, s, BOOST_PP_LIST_REVERSE_D(207, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) BOOST_PP_LIST_FOLD_LEFT_208(o, s, BOOST_PP_LIST_REVERSE_D(208, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) BOOST_PP_LIST_FOLD_LEFT_209(o, s, BOOST_PP_LIST_REVERSE_D(209, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) BOOST_PP_LIST_FOLD_LEFT_210(o, s, BOOST_PP_LIST_REVERSE_D(210, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) BOOST_PP_LIST_FOLD_LEFT_211(o, s, BOOST_PP_LIST_REVERSE_D(211, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) BOOST_PP_LIST_FOLD_LEFT_212(o, s, BOOST_PP_LIST_REVERSE_D(212, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) BOOST_PP_LIST_FOLD_LEFT_213(o, s, BOOST_PP_LIST_REVERSE_D(213, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) BOOST_PP_LIST_FOLD_LEFT_214(o, s, BOOST_PP_LIST_REVERSE_D(214, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) BOOST_PP_LIST_FOLD_LEFT_215(o, s, BOOST_PP_LIST_REVERSE_D(215, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) BOOST_PP_LIST_FOLD_LEFT_216(o, s, BOOST_PP_LIST_REVERSE_D(216, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) BOOST_PP_LIST_FOLD_LEFT_217(o, s, BOOST_PP_LIST_REVERSE_D(217, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) BOOST_PP_LIST_FOLD_LEFT_218(o, s, BOOST_PP_LIST_REVERSE_D(218, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) BOOST_PP_LIST_FOLD_LEFT_219(o, s, BOOST_PP_LIST_REVERSE_D(219, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) BOOST_PP_LIST_FOLD_LEFT_220(o, s, BOOST_PP_LIST_REVERSE_D(220, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) BOOST_PP_LIST_FOLD_LEFT_221(o, s, BOOST_PP_LIST_REVERSE_D(221, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) BOOST_PP_LIST_FOLD_LEFT_222(o, s, BOOST_PP_LIST_REVERSE_D(222, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) BOOST_PP_LIST_FOLD_LEFT_223(o, s, BOOST_PP_LIST_REVERSE_D(223, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) BOOST_PP_LIST_FOLD_LEFT_224(o, s, BOOST_PP_LIST_REVERSE_D(224, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) BOOST_PP_LIST_FOLD_LEFT_225(o, s, BOOST_PP_LIST_REVERSE_D(225, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) BOOST_PP_LIST_FOLD_LEFT_226(o, s, BOOST_PP_LIST_REVERSE_D(226, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) BOOST_PP_LIST_FOLD_LEFT_227(o, s, BOOST_PP_LIST_REVERSE_D(227, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) BOOST_PP_LIST_FOLD_LEFT_228(o, s, BOOST_PP_LIST_REVERSE_D(228, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) BOOST_PP_LIST_FOLD_LEFT_229(o, s, BOOST_PP_LIST_REVERSE_D(229, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) BOOST_PP_LIST_FOLD_LEFT_230(o, s, BOOST_PP_LIST_REVERSE_D(230, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) BOOST_PP_LIST_FOLD_LEFT_231(o, s, BOOST_PP_LIST_REVERSE_D(231, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) BOOST_PP_LIST_FOLD_LEFT_232(o, s, BOOST_PP_LIST_REVERSE_D(232, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) BOOST_PP_LIST_FOLD_LEFT_233(o, s, BOOST_PP_LIST_REVERSE_D(233, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) BOOST_PP_LIST_FOLD_LEFT_234(o, s, BOOST_PP_LIST_REVERSE_D(234, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) BOOST_PP_LIST_FOLD_LEFT_235(o, s, BOOST_PP_LIST_REVERSE_D(235, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) BOOST_PP_LIST_FOLD_LEFT_236(o, s, BOOST_PP_LIST_REVERSE_D(236, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) BOOST_PP_LIST_FOLD_LEFT_237(o, s, BOOST_PP_LIST_REVERSE_D(237, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) BOOST_PP_LIST_FOLD_LEFT_238(o, s, BOOST_PP_LIST_REVERSE_D(238, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) BOOST_PP_LIST_FOLD_LEFT_239(o, s, BOOST_PP_LIST_REVERSE_D(239, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) BOOST_PP_LIST_FOLD_LEFT_240(o, s, BOOST_PP_LIST_REVERSE_D(240, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) BOOST_PP_LIST_FOLD_LEFT_241(o, s, BOOST_PP_LIST_REVERSE_D(241, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) BOOST_PP_LIST_FOLD_LEFT_242(o, s, BOOST_PP_LIST_REVERSE_D(242, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) BOOST_PP_LIST_FOLD_LEFT_243(o, s, BOOST_PP_LIST_REVERSE_D(243, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) BOOST_PP_LIST_FOLD_LEFT_244(o, s, BOOST_PP_LIST_REVERSE_D(244, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) BOOST_PP_LIST_FOLD_LEFT_245(o, s, BOOST_PP_LIST_REVERSE_D(245, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) BOOST_PP_LIST_FOLD_LEFT_246(o, s, BOOST_PP_LIST_REVERSE_D(246, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) BOOST_PP_LIST_FOLD_LEFT_247(o, s, BOOST_PP_LIST_REVERSE_D(247, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) BOOST_PP_LIST_FOLD_LEFT_248(o, s, BOOST_PP_LIST_REVERSE_D(248, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) BOOST_PP_LIST_FOLD_LEFT_249(o, s, BOOST_PP_LIST_REVERSE_D(249, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) BOOST_PP_LIST_FOLD_LEFT_250(o, s, BOOST_PP_LIST_REVERSE_D(250, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) BOOST_PP_LIST_FOLD_LEFT_251(o, s, BOOST_PP_LIST_REVERSE_D(251, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) BOOST_PP_LIST_FOLD_LEFT_252(o, s, BOOST_PP_LIST_REVERSE_D(252, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) BOOST_PP_LIST_FOLD_LEFT_253(o, s, BOOST_PP_LIST_REVERSE_D(253, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) BOOST_PP_LIST_FOLD_LEFT_254(o, s, BOOST_PP_LIST_REVERSE_D(254, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) BOOST_PP_LIST_FOLD_LEFT_255(o, s, BOOST_PP_LIST_REVERSE_D(255, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) BOOST_PP_LIST_FOLD_LEFT_256(o, s, BOOST_PP_LIST_REVERSE_D(256, l))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/enum.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_ENUM_HPP\n# define BOOST_PREPROCESSOR_LIST_ENUM_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/for_each_i.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n#\n# /* BOOST_PP_LIST_ENUM */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_ENUM(list) BOOST_PP_LIST_FOR_EACH_I(BOOST_PP_LIST_ENUM_O, BOOST_PP_NIL, list)\n# else\n#    define BOOST_PP_LIST_ENUM(list) BOOST_PP_LIST_ENUM_I(list)\n#    define BOOST_PP_LIST_ENUM_I(list) BOOST_PP_LIST_FOR_EACH_I(BOOST_PP_LIST_ENUM_O, BOOST_PP_NIL, list)\n# endif\n#\n# define BOOST_PP_LIST_ENUM_O(r, _, i, elem) BOOST_PP_COMMA_IF(i) elem\n#\n# /* BOOST_PP_LIST_ENUM_R */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_ENUM_R(r, list) BOOST_PP_LIST_FOR_EACH_I_R(r, BOOST_PP_LIST_ENUM_O, BOOST_PP_NIL, list)\n# else\n#    define BOOST_PP_LIST_ENUM_R(r, list) BOOST_PP_LIST_ENUM_R_I(r, list)\n#    define BOOST_PP_LIST_ENUM_R_I(r, list) BOOST_PP_LIST_FOR_EACH_I_R(r, BOOST_PP_LIST_ENUM_O, BOOST_PP_NIL, list)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/filter.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_FILTER_HPP\n# define BOOST_PREPROCESSOR_LIST_FILTER_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/list/fold_right.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_LIST_FILTER */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FILTER(pred, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_FILTER_O, (pred, data, BOOST_PP_NIL), list))\n# else\n#    define BOOST_PP_LIST_FILTER(pred, data, list) BOOST_PP_LIST_FILTER_I(pred, data, list)\n#    define BOOST_PP_LIST_FILTER_I(pred, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_FILTER_O, (pred, data, BOOST_PP_NIL), list))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FILTER_O(d, pdr, elem) BOOST_PP_LIST_FILTER_O_D(d, BOOST_PP_TUPLE_ELEM(3, 0, pdr), BOOST_PP_TUPLE_ELEM(3, 1, pdr), BOOST_PP_TUPLE_ELEM(3, 2, pdr), elem)\n# else\n#    define BOOST_PP_LIST_FILTER_O(d, pdr, elem) BOOST_PP_LIST_FILTER_O_I(d, BOOST_PP_TUPLE_REM_3 pdr, elem)\n#    define BOOST_PP_LIST_FILTER_O_I(d, im, elem) BOOST_PP_LIST_FILTER_O_D(d, im, elem)\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    define BOOST_PP_LIST_FILTER_O_D(d, pred, data, res, elem) (pred, data, BOOST_PP_IF(pred(d, data, elem), (elem, res), res))\n# else\n#    define BOOST_PP_LIST_FILTER_O_D(d, pred, data, res, elem) (pred, data, BOOST_PP_IF(pred##(d, data, elem), (elem, res), res))\n# endif\n#\n# /* BOOST_PP_LIST_FILTER_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FILTER_D(d, pred, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_FILTER_O, (pred, data, BOOST_PP_NIL), list))\n# else\n#    define BOOST_PP_LIST_FILTER_D(d, pred, data, list) BOOST_PP_LIST_FILTER_D_I(d, pred, data, list)\n#    define BOOST_PP_LIST_FILTER_D_I(d, pred, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_FILTER_O, (pred, data, BOOST_PP_NIL), list))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/first_n.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_FIRST_N_HPP\n# define BOOST_PREPROCESSOR_LIST_FIRST_N_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/list/reverse.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_LIST_FIRST_N */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FIRST_N(count, list) BOOST_PP_LIST_REVERSE(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_WHILE(BOOST_PP_LIST_FIRST_N_P, BOOST_PP_LIST_FIRST_N_O, (count, list, BOOST_PP_NIL))))\n# else\n#    define BOOST_PP_LIST_FIRST_N(count, list) BOOST_PP_LIST_FIRST_N_I(count, list)\n#    define BOOST_PP_LIST_FIRST_N_I(count, list) BOOST_PP_LIST_REVERSE(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_WHILE(BOOST_PP_LIST_FIRST_N_P, BOOST_PP_LIST_FIRST_N_O, (count, list, BOOST_PP_NIL))))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FIRST_N_P(d, data) BOOST_PP_TUPLE_ELEM(3, 0, data)\n# else\n#    define BOOST_PP_LIST_FIRST_N_P(d, data) BOOST_PP_LIST_FIRST_N_P_I data\n#    define BOOST_PP_LIST_FIRST_N_P_I(c, l, nl) c\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_LIST_FIRST_N_O(d, data) BOOST_PP_LIST_FIRST_N_O_D data\n# else\n#    define BOOST_PP_LIST_FIRST_N_O(d, data) BOOST_PP_LIST_FIRST_N_O_D(BOOST_PP_TUPLE_ELEM(3, 0, data), BOOST_PP_TUPLE_ELEM(3, 1, data), BOOST_PP_TUPLE_ELEM(3, 2, data))\n# endif\n#\n# define BOOST_PP_LIST_FIRST_N_O_D(c, l, nl) (BOOST_PP_DEC(c), BOOST_PP_LIST_REST(l), (BOOST_PP_LIST_FIRST(l), nl))\n#\n# /* BOOST_PP_LIST_FIRST_N_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FIRST_N_D(d, count, list) BOOST_PP_LIST_REVERSE_D(d, BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_FIRST_N_P, BOOST_PP_LIST_FIRST_N_O, (count, list, BOOST_PP_NIL))))\n# else\n#    define BOOST_PP_LIST_FIRST_N_D(d, count, list) BOOST_PP_LIST_FIRST_N_D_I(d, count, list)\n#    define BOOST_PP_LIST_FIRST_N_D_I(d, count, list) BOOST_PP_LIST_REVERSE_D(d, BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_FIRST_N_P, BOOST_PP_LIST_FIRST_N_O, (count, list, BOOST_PP_NIL))))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/fold_left.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP\n# define BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n#\n# /* BOOST_PP_LIST_FOLD_LEFT */\n#\n# if 0\n#    define BOOST_PP_LIST_FOLD_LEFT(op, state, list)\n# endif\n#\n# define BOOST_PP_LIST_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))\n#\n# define BOOST_PP_LIST_FOLD_LEFT_257(o, s, l) BOOST_PP_ERROR(0x0004)\n#\n# define BOOST_PP_LIST_FOLD_LEFT_D(d, o, s, l) BOOST_PP_LIST_FOLD_LEFT_ ## d(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_2ND BOOST_PP_LIST_FOLD_LEFT\n# define BOOST_PP_LIST_FOLD_LEFT_2ND_D BOOST_PP_LIST_FOLD_LEFT_D\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    include <boost/preprocessor/list/detail/edg/fold_left.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    include <boost/preprocessor/list/detail/dmc/fold_left.hpp>\n# else\n#    include <boost/preprocessor/list/detail/fold_left.hpp>\n# endif\n#\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) 0\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/fold_right.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP\n# define BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n#\n# if 0\n#    define BOOST_PP_LIST_FOLD_RIGHT(op, state, list)\n# endif\n#\n# define BOOST_PP_LIST_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_257(o, s, l) BOOST_PP_ERROR(0x0004)\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_D(d, o, s, l) BOOST_PP_LIST_FOLD_RIGHT_ ## d(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_2ND BOOST_PP_LIST_FOLD_RIGHT\n# define BOOST_PP_LIST_FOLD_RIGHT_2ND_D BOOST_PP_LIST_FOLD_RIGHT_D\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    include <boost/preprocessor/list/detail/edg/fold_right.hpp>\n# else\n#    include <boost/preprocessor/list/detail/fold_right.hpp>\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/for_each.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_FOR_EACH_HPP\n# define BOOST_PREPROCESSOR_LIST_FOR_EACH_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/for_each_i.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_LIST_FOR_EACH */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH(macro, data, list) BOOST_PP_LIST_FOR_EACH_I(BOOST_PP_LIST_FOR_EACH_O, (macro, data), list)\n# else\n#    define BOOST_PP_LIST_FOR_EACH(macro, data, list) BOOST_PP_LIST_FOR_EACH_X(macro, data, list)\n#    define BOOST_PP_LIST_FOR_EACH_X(macro, data, list) BOOST_PP_LIST_FOR_EACH_I(BOOST_PP_LIST_FOR_EACH_O, (macro, data), list)\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_O(r, md, i, elem) BOOST_PP_LIST_FOR_EACH_O_D(r, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md), elem)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_O(r, md, i, elem) BOOST_PP_LIST_FOR_EACH_O_I(r, BOOST_PP_TUPLE_REM_2 md, elem)\n#    define BOOST_PP_LIST_FOR_EACH_O_I(r, im, elem) BOOST_PP_LIST_FOR_EACH_O_D(r, im, elem)\n# endif\n#\n# define BOOST_PP_LIST_FOR_EACH_O_D(r, m, d, elem) m(r, d, elem)\n#\n# /* BOOST_PP_LIST_FOR_EACH_R */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_R(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_I_R(r, BOOST_PP_LIST_FOR_EACH_O, (macro, data), list)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_R(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_R_X(r, macro, data, list)\n#    define BOOST_PP_LIST_FOR_EACH_R_X(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_I_R(r, BOOST_PP_LIST_FOR_EACH_O, (macro, data), list)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/for_each_i.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP\n# define BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_LIST_FOR_EACH_I */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list)\n#    define BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_FOR_EACH_I_P_D x\n#    define BOOST_PP_LIST_FOR_EACH_I_P_D(m, d, l, i) BOOST_PP_LIST_IS_CONS(l)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(4, 2, x))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_LIST_FOR_EACH_I_O(r, x) BOOST_PP_LIST_FOR_EACH_I_O_D x\n#    define BOOST_PP_LIST_FOR_EACH_I_O_D(m, d, l, i) (m, d, BOOST_PP_LIST_REST(l), BOOST_PP_INC(i))\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I_O(r, x) (BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(4, 2, x)), BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(4, 3, x)))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_D(r, BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_I(r, BOOST_PP_TUPLE_REM_4 x)\n#    define BOOST_PP_LIST_FOR_EACH_I_M_I(r, x_e) BOOST_PP_LIST_FOR_EACH_I_M_D(r, x_e)\n# endif\n#\n# define BOOST_PP_LIST_FOR_EACH_I_M_D(r, m, d, l, i) m(r, d, i, BOOST_PP_LIST_FIRST(l))\n#\n# /* BOOST_PP_LIST_FOR_EACH_I_R */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list)\n#    define BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/for_each_product.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_FOR_EACH_PRODUCT_HPP\n# define BOOST_PREPROCESSOR_LIST_FOR_EACH_PRODUCT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/list/to_tuple.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/to_list.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n# include <boost/preprocessor/tuple/reverse.hpp>\n#\n# /* BOOST_PP_LIST_FOR_EACH_PRODUCT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT(macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_E(BOOST_PP_FOR, macro, size, BOOST_PP_TUPLE_TO_LIST(size, tuple))\n# else\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT(macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_Q(macro, size, tuple)\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_Q(macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_E(BOOST_PP_FOR, macro, size, BOOST_PP_TUPLE_TO_LIST(size, tuple))\n# endif\n#\n# /* BOOST_PP_LIST_FOR_EACH_PRODUCT_R */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_R(r, macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_E(BOOST_PP_FOR_ ## r, macro, size, BOOST_PP_TUPLE_TO_LIST(size, tuple))\n# else\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_R(r, macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_R_Q(r, macro, size, tuple)\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_R_Q(r, macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_E(BOOST_PP_FOR_ ## r, macro, size, BOOST_PP_TUPLE_TO_LIST(size, tuple))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_E(impl, macro, size, lists) impl((BOOST_PP_LIST_FIRST(lists), BOOST_PP_LIST_REST(lists), BOOST_PP_NIL, macro, size), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_0)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_E(impl, macro, size, lists) BOOST_PP_LIST_FOR_EACH_PRODUCT_E_D(impl, macro, size, lists)\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_E_D(impl, macro, size, lists) impl((BOOST_PP_LIST_FIRST(lists), BOOST_PP_LIST_REST(lists), BOOST_PP_NIL, macro, size), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_0)\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_P(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_P_I data\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_P_I(a, b, res, macro, size) BOOST_PP_LIST_IS_CONS(a)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_P(r, data) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(5, 0, data))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_O(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_O_I data\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_O_I(a, b, res, macro, size) (BOOST_PP_LIST_REST(a), b, res, macro, size)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_O(r, data) (BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(5, 0, data)), BOOST_PP_TUPLE_ELEM(5, 1, data), BOOST_PP_TUPLE_ELEM(5, 2, data), BOOST_PP_TUPLE_ELEM(5, 3, data), BOOST_PP_TUPLE_ELEM(5, 4, data))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_I(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_I(r, BOOST_PP_TUPLE_ELEM(5, 0, data), BOOST_PP_TUPLE_ELEM(5, 1, data), BOOST_PP_TUPLE_ELEM(5, 2, data), BOOST_PP_TUPLE_ELEM(5, 3, data), BOOST_PP_TUPLE_ELEM(5, 4, data))\n# else\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_I(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_D(r, BOOST_PP_TUPLE_REM_5 data)\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_I_D(r, data_e) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_I(r, data_e)\n# endif\n#\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_I_I(r, a, b, res, macro, size) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_II(r, macro, BOOST_PP_LIST_TO_TUPLE_R(r, (BOOST_PP_LIST_FIRST(a), res)), size)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_I_II(r, macro, args, size) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_III(r, macro, args, size)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_I_III(r, macro, args, size) macro(r, BOOST_PP_TUPLE_REVERSE(size, args))\n#\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, i) BOOST_PP_IF(BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(5, 1, data)), BOOST_PP_LIST_FOR_EACH_PRODUCT_N_ ## i, BOOST_PP_LIST_FOR_EACH_PRODUCT_I)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data) BOOST_PP_LIST_FOR_EACH_PRODUCT_H_I data\n# else\n#    define BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data) BOOST_PP_LIST_FOR_EACH_PRODUCT_H_I(BOOST_PP_TUPLE_ELEM(5, 0, data), BOOST_PP_TUPLE_ELEM(5, 1, data), BOOST_PP_TUPLE_ELEM(5, 2, data), BOOST_PP_TUPLE_ELEM(5, 3, data), BOOST_PP_TUPLE_ELEM(5, 4, data))\n# endif\n#\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_H_I(a, b, res, macro, size) (BOOST_PP_LIST_FIRST(b), BOOST_PP_LIST_REST(b), (BOOST_PP_LIST_FIRST(a), res), macro, size)\n#\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_0(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 0)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_1(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 1)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_2(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 2)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_3(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 3)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_4(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 4)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_5(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 5)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_6(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 6)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_7(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 7)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_8(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 8)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_9(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 9)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_10(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 10)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_11(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 11)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_12(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 12)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_13(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 13)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_14(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 14)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_15(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 15)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_16(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 16)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_17(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 17)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_18(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 18)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_19(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 19)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_20(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 20)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_21(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 21)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_22(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 22)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_23(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 23)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_24(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 24)(r, data)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_25(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 25)(r, data)\n#\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_0(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_1)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_1(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_2)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_2(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_3)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_3(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_4)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_4(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_5)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_5(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_6)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_6(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_7)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_7(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_8)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_8(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_9)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_9(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_10)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_10(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_11)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_11(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_12)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_12(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_13)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_13(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_14)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_14(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_15)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_15(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_16)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_16(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_17)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_17(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_18)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_18(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_19)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_19(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_20)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_20(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_21)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_21(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_22)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_22(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_23)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_23(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_24)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_24(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_25)\n# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_25(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_26)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/rest_n.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_REST_N_HPP\n# define BOOST_PREPROCESSOR_LIST_REST_N_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_LIST_REST_N */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_REST_N(count, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_LIST_REST_N_P, BOOST_PP_LIST_REST_N_O, (list, count)))\n# else\n#    define BOOST_PP_LIST_REST_N(count, list) BOOST_PP_LIST_REST_N_I(count, list)\n#    define BOOST_PP_LIST_REST_N_I(count, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_LIST_REST_N_P, BOOST_PP_LIST_REST_N_O, (list, count)))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_REST_N_P(d, lc) BOOST_PP_TUPLE_ELEM(2, 1, lc)\n# else\n#    define BOOST_PP_LIST_REST_N_P(d, lc) BOOST_PP_LIST_REST_N_P_I lc\n#    define BOOST_PP_LIST_REST_N_P_I(list, count) count\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_REST_N_O(d, lc) (BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(2, 0, lc)), BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2, 1, lc)))\n# else\n#    define BOOST_PP_LIST_REST_N_O(d, lc) BOOST_PP_LIST_REST_N_O_I lc\n#    define BOOST_PP_LIST_REST_N_O_I(list, count) (BOOST_PP_LIST_REST(list), BOOST_PP_DEC(count))\n# endif\n#\n# /* BOOST_PP_LIST_REST_N_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_REST_N_D(d, count, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_REST_N_P, BOOST_PP_LIST_REST_N_O, (list, count)))\n# else\n#    define BOOST_PP_LIST_REST_N_D(d, count, list) BOOST_PP_LIST_REST_N_D_I(d, count, list)\n#    define BOOST_PP_LIST_REST_N_D_I(d, count, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_REST_N_P, BOOST_PP_LIST_REST_N_O, (list, count)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/reverse.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_REVERSE_HPP\n# define BOOST_PREPROCESSOR_LIST_REVERSE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/fold_left.hpp>\n#\n# /* BOOST_PP_LIST_REVERSE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)\n# else\n#    define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_REVERSE_I(list)\n#    define BOOST_PP_LIST_REVERSE_I(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)\n# endif\n#\n# define BOOST_PP_LIST_REVERSE_O(d, s, x) (x, s)\n#\n# /* BOOST_PP_LIST_REVERSE_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)\n# else\n#    define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_REVERSE_D_I(d, list)\n#    define BOOST_PP_LIST_REVERSE_D_I(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/size.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_SIZE_HPP\n# define BOOST_PREPROCESSOR_LIST_SIZE_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_LIST_SIZE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_SIZE(list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_LIST_SIZE_P, BOOST_PP_LIST_SIZE_O, (0, list)))\n# else\n#    define BOOST_PP_LIST_SIZE(list) BOOST_PP_LIST_SIZE_I(list)\n#    define BOOST_PP_LIST_SIZE_I(list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_LIST_SIZE_P, BOOST_PP_LIST_SIZE_O, (0, list)))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_SIZE_P(d, rl) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(2, 1, rl))\n# else\n#    define BOOST_PP_LIST_SIZE_P(d, rl) BOOST_PP_LIST_SIZE_P_I(BOOST_PP_TUPLE_REM_2 rl)\n#    define BOOST_PP_LIST_SIZE_P_I(im) BOOST_PP_LIST_SIZE_P_II(im)\n#    define BOOST_PP_LIST_SIZE_P_II(r, l) BOOST_PP_LIST_IS_CONS(l)\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_SIZE_O(d, rl) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2, 0, rl)), BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(2, 1, rl)))\n# else\n#    define BOOST_PP_LIST_SIZE_O(d, rl) BOOST_PP_LIST_SIZE_O_I(BOOST_PP_TUPLE_REM_2 rl)\n#    define BOOST_PP_LIST_SIZE_O_I(im) BOOST_PP_LIST_SIZE_O_II(im)\n#    define BOOST_PP_LIST_SIZE_O_II(r, l) (BOOST_PP_INC(r), BOOST_PP_LIST_REST(l))\n# endif\n#\n# /* BOOST_PP_LIST_SIZE_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_SIZE_D(d, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_SIZE_P, BOOST_PP_LIST_SIZE_O, (0, list)))\n# else\n#    define BOOST_PP_LIST_SIZE_D(d, list) BOOST_PP_LIST_SIZE_D_I(d, list)\n#    define BOOST_PP_LIST_SIZE_D_I(d, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_SIZE_P, BOOST_PP_LIST_SIZE_O, (0, list)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/to_array.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2011.\n#  *     (C) Copyright Edward Diener 2011,2014.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_TO_ARRAY_HPP\n# define BOOST_PREPROCESSOR_LIST_TO_ARRAY_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400)\n# include <boost/preprocessor/control/iif.hpp>\n# endif\n#\n# /* BOOST_PP_LIST_TO_ARRAY */\n#\n# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400)\n# define BOOST_PP_LIST_TO_ARRAY(list) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_LIST_IS_NIL(list), \\\n\t\tBOOST_PP_LIST_TO_ARRAY_VC8ORLESS_EMPTY, \\\n\t\tBOOST_PP_LIST_TO_ARRAY_VC8ORLESS_DO \\\n\t\t) \\\n\t(list) \\\n/**/\n# define BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_EMPTY(list) (0,())\n# define BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_DO(list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE, list)\n# else\n# define BOOST_PP_LIST_TO_ARRAY(list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE, list)\n# endif\n\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_LIST_TO_ARRAY_I(w, list) \\\n        BOOST_PP_LIST_TO_ARRAY_II(((BOOST_PP_TUPLE_REM_CTOR( \\\n            3, \\\n\t        w(BOOST_PP_LIST_TO_ARRAY_P, BOOST_PP_LIST_TO_ARRAY_O, (list, 1, (~))) \\\n        )))) \\\n        /**/\n#    define BOOST_PP_LIST_TO_ARRAY_II(p) BOOST_PP_LIST_TO_ARRAY_II_B(p)\n#    define BOOST_PP_LIST_TO_ARRAY_II_B(p) BOOST_PP_LIST_TO_ARRAY_II_C ## p\n#    define BOOST_PP_LIST_TO_ARRAY_II_C(p) BOOST_PP_LIST_TO_ARRAY_III p\n# else\n#    define BOOST_PP_LIST_TO_ARRAY_I(w, list) \\\n        BOOST_PP_LIST_TO_ARRAY_II(BOOST_PP_TUPLE_REM_CTOR( \\\n            3, \\\n\t        w(BOOST_PP_LIST_TO_ARRAY_P, BOOST_PP_LIST_TO_ARRAY_O, (list, 1, (~))) \\\n        )) \\\n        /**/\n#    define BOOST_PP_LIST_TO_ARRAY_II(im) BOOST_PP_LIST_TO_ARRAY_III(im)\n# endif\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_LIST_TO_ARRAY_III(list, size, tuple) (BOOST_PP_DEC(size), BOOST_PP_LIST_TO_ARRAY_IV tuple)\n#    define BOOST_PP_LIST_TO_ARRAY_IV(_, ...) (__VA_ARGS__)\n# else\n#    define BOOST_PP_LIST_TO_ARRAY_III(list, size, tuple) (BOOST_PP_DEC(size), BOOST_PP_LIST_TO_ARRAY_IV_ ## size tuple)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_2(_, e0)                 (e0)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_3(_, e0, e1)             (e0, e1)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_4(_, e0, e1, e2)         (e0, e1, e2)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_5(_, e0, e1, e2, e3)     (e0, e1, e2, e3)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_6(_, e0, e1, e2, e3, e4) (e0, e1, e2, e3, e4)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_7(_, e0, e1, e2, e3, e4, e5) (e0, e1, e2, e3, e4, e5)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_8(_, e0, e1, e2, e3, e4, e5, e6) (e0, e1, e2, e3, e4, e5, e6)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_9(_, e0, e1, e2, e3, e4, e5, e6, e7) (e0, e1, e2, e3, e4, e5, e6, e7)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_10(_, e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0, e1, e2, e3, e4, e5, e6, e7, e8)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_11(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_12(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_13(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_14(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_15(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_16(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_17(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_18(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_19(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_20(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_21(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_22(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_23(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_24(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_25(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_26(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_27(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_28(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_29(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_30(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_31(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_32(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_33(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_34(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_35(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_36(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_37(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_38(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_39(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_40(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_41(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_42(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_43(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_44(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_45(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_46(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_47(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_48(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_49(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_50(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_51(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_52(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_53(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_54(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_55(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_56(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_57(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_58(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_59(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_60(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_61(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_62(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_63(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61)\n#    define BOOST_PP_LIST_TO_ARRAY_IV_64(_, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62)\n# endif\n# define BOOST_PP_LIST_TO_ARRAY_P(d, state) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(3, 0, state))\n# define BOOST_PP_LIST_TO_ARRAY_O(d, state) BOOST_PP_LIST_TO_ARRAY_O_I state\n# define BOOST_PP_LIST_TO_ARRAY_O_I(list, size, tuple) (BOOST_PP_LIST_REST(list), BOOST_PP_INC(size), (BOOST_PP_TUPLE_REM(size) tuple, BOOST_PP_LIST_FIRST(list)))\n#\n# /* BOOST_PP_LIST_TO_ARRAY_D */\n#\n# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400)\n# define BOOST_PP_LIST_TO_ARRAY_D(d, list) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_LIST_IS_NIL(list), \\\n\t\tBOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_EMPTY, \\\n\t\tBOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_DO \\\n\t\t) \\\n\t(d, list) \\\n/**/\n# define BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_EMPTY(d, list) (0,())\n# define BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_DO(d, list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE_ ## d, list)\n# else\n# define BOOST_PP_LIST_TO_ARRAY_D(d, list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE_ ## d, list)\n# endif\n#\n# endif /* BOOST_PREPROCESSOR_LIST_TO_ARRAY_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/to_seq.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* Revised by Paul Mensonides (2011) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_TO_SEQ_HPP\n# define BOOST_PREPROCESSOR_LIST_TO_SEQ_HPP\n#\n# include <boost/preprocessor/list/for_each.hpp>\n#\n# /* BOOST_PP_LIST_TO_SEQ */\n#\n# define BOOST_PP_LIST_TO_SEQ(list) \\\n    BOOST_PP_LIST_FOR_EACH(BOOST_PP_LIST_TO_SEQ_MACRO, ~, list) \\\n    /**/\n# define BOOST_PP_LIST_TO_SEQ_MACRO(r, data, elem) (elem)\n#\n# /* BOOST_PP_LIST_TO_SEQ_R */\n#\n# define BOOST_PP_LIST_TO_SEQ_R(r, list) \\\n    BOOST_PP_LIST_FOR_EACH_R(r, BOOST_PP_LIST_TO_SEQ_MACRO, ~, list) \\\n    /**/\n#\n# endif /* BOOST_PREPROCESSOR_LIST_TO_SEQ_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/to_tuple.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_TO_TUPLE_HPP\n# define BOOST_PREPROCESSOR_LIST_TO_TUPLE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/enum.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n#\n# /* BOOST_PP_LIST_TO_TUPLE */\n#\n# define BOOST_PP_LIST_TO_TUPLE(list) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_LIST_IS_NIL(list), \\\n\t\tBOOST_PP_LIST_TO_TUPLE_EMPTY, \\\n\t\tBOOST_PP_LIST_TO_TUPLE_DO \\\n\t\t) \\\n\t(list) \\\n/**/\n# define BOOST_PP_LIST_TO_TUPLE_EMPTY(list)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_TO_TUPLE_DO(list) (BOOST_PP_LIST_ENUM(list))\n# else\n#    define BOOST_PP_LIST_TO_TUPLE_DO(list) BOOST_PP_LIST_TO_TUPLE_I(list)\n#    define BOOST_PP_LIST_TO_TUPLE_I(list) (BOOST_PP_LIST_ENUM(list))\n# endif\n#\n# /* BOOST_PP_LIST_TO_TUPLE_R */\n#\n# define BOOST_PP_LIST_TO_TUPLE_R(r, list) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_LIST_IS_NIL(list), \\\n\t\tBOOST_PP_LIST_TO_TUPLE_R_EMPTY, \\\n\t\tBOOST_PP_LIST_TO_TUPLE_R_DO \\\n\t\t) \\\n\t(r, list) \\\n/**/\n# define BOOST_PP_LIST_TO_TUPLE_R_EMPTY(r,list)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_TO_TUPLE_R_DO(r, list) (BOOST_PP_LIST_ENUM_R(r, list))\n# else\n#    define BOOST_PP_LIST_TO_TUPLE_R_DO(r, list) BOOST_PP_LIST_TO_TUPLE_R_I(r, list)\n#    define BOOST_PP_LIST_TO_TUPLE_R_I(r, list) (BOOST_PP_LIST_ENUM_R(r, list))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list/transform.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP\n# define BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/fold_right.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_LIST_TRANSFORM */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))\n# else\n#    define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_LIST_TRANSFORM_I(op, data, list)\n#    define BOOST_PP_LIST_TRANSFORM_I(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, BOOST_PP_TUPLE_ELEM(3, 0, odr), BOOST_PP_TUPLE_ELEM(3, 1, odr), BOOST_PP_TUPLE_ELEM(3, 2, odr), elem)\n# else\n#    define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_I(d, BOOST_PP_TUPLE_REM_3 odr, elem)\n#    define BOOST_PP_LIST_TRANSFORM_O_I(d, im, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, im, elem)\n# endif\n#\n# define BOOST_PP_LIST_TRANSFORM_O_D(d, op, data, res, elem) (op, data, (op(d, data, elem), res))\n#\n# /* BOOST_PP_LIST_TRANSFORM_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))\n# else\n#    define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list)\n#    define BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/list.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_HPP\n# define BOOST_PREPROCESSOR_LIST_HPP\n#\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/list/append.hpp>\n# include <boost/preprocessor/list/at.hpp>\n# include <boost/preprocessor/list/cat.hpp>\n# include <boost/preprocessor/list/enum.hpp>\n# include <boost/preprocessor/list/filter.hpp>\n# include <boost/preprocessor/list/first_n.hpp>\n# include <boost/preprocessor/list/fold_left.hpp>\n# include <boost/preprocessor/list/fold_right.hpp>\n# include <boost/preprocessor/list/for_each.hpp>\n# include <boost/preprocessor/list/for_each_i.hpp>\n# include <boost/preprocessor/list/for_each_product.hpp>\n# include <boost/preprocessor/list/rest_n.hpp>\n# include <boost/preprocessor/list/reverse.hpp>\n# include <boost/preprocessor/list/size.hpp>\n# include <boost/preprocessor/list/to_array.hpp>\n# include <boost/preprocessor/list/to_seq.hpp>\n# include <boost/preprocessor/list/to_tuple.hpp>\n# include <boost/preprocessor/list/transform.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/and.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_AND_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_AND_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/logical/bitand.hpp>\n#\n# /* BOOST_PP_AND */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_AND(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# else\n#    define BOOST_PP_AND(p, q) BOOST_PP_AND_I(p, q)\n#    define BOOST_PP_AND_I(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/bitand.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_BITAND */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_I(x, y)\n# else\n#    define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_OO((x, y))\n#    define BOOST_PP_BITAND_OO(par) BOOST_PP_BITAND_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ ## x ## y\n# else\n#    define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ID(BOOST_PP_BITAND_ ## x ## y)\n#    define BOOST_PP_BITAND_ID(res) res\n# endif\n#\n# define BOOST_PP_BITAND_00 0\n# define BOOST_PP_BITAND_01 0\n# define BOOST_PP_BITAND_10 0\n# define BOOST_PP_BITAND_11 1\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/bitnor.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_BITNOR_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_BITNOR_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_BITNOR */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_BITNOR(x, y) BOOST_PP_BITNOR_I(x, y)\n# else\n#    define BOOST_PP_BITNOR(x, y) BOOST_PP_BITNOR_OO((x, y))\n#    define BOOST_PP_BITNOR_OO(par) BOOST_PP_BITNOR_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_BITNOR_I(x, y) BOOST_PP_BITNOR_ ## x ## y\n# else\n#    define BOOST_PP_BITNOR_I(x, y) BOOST_PP_BITNOR_ID(BOOST_PP_BITNOR_ ## x ## y)\n#    define BOOST_PP_BITNOR_ID(id) id\n# endif\n#\n# define BOOST_PP_BITNOR_00 1\n# define BOOST_PP_BITNOR_01 0\n# define BOOST_PP_BITNOR_10 0\n# define BOOST_PP_BITNOR_11 0\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/bitor.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_BITOR_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_BITOR_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_BITOR */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_BITOR(x, y) BOOST_PP_BITOR_I(x, y)\n# else\n#    define BOOST_PP_BITOR(x, y) BOOST_PP_BITOR_OO((x, y))\n#    define BOOST_PP_BITOR_OO(par) BOOST_PP_BITOR_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_BITOR_I(x, y) BOOST_PP_BITOR_ ## x ## y\n# else\n#    define BOOST_PP_BITOR_I(x, y) BOOST_PP_BITOR_ID(BOOST_PP_BITOR_ ## x ## y)\n#    define BOOST_PP_BITOR_ID(id) id\n# endif\n#\n# define BOOST_PP_BITOR_00 0\n# define BOOST_PP_BITOR_01 1\n# define BOOST_PP_BITOR_10 1\n# define BOOST_PP_BITOR_11 1\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/bitxor.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_BITXOR_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_BITXOR_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_BITXOR */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_BITXOR(x, y) BOOST_PP_BITXOR_I(x, y)\n# else\n#    define BOOST_PP_BITXOR(x, y) BOOST_PP_BITXOR_OO((x, y))\n#    define BOOST_PP_BITXOR_OO(par) BOOST_PP_BITXOR_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_BITXOR_I(x, y) BOOST_PP_BITXOR_ ## x ## y\n# else\n#    define BOOST_PP_BITXOR_I(x, y) BOOST_PP_BITXOR_ID(BOOST_PP_BITXOR_ ## x ## y)\n#    define BOOST_PP_BITXOR_ID(id) id\n# endif\n#\n# define BOOST_PP_BITXOR_00 0\n# define BOOST_PP_BITXOR_01 1\n# define BOOST_PP_BITXOR_10 1\n# define BOOST_PP_BITXOR_11 0\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/bool.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_BOOL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_BOOL(x) BOOST_PP_BOOL_I(x)\n# else\n#    define BOOST_PP_BOOL(x) BOOST_PP_BOOL_OO((x))\n#    define BOOST_PP_BOOL_OO(par) BOOST_PP_BOOL_I ## par\n# endif\n#\n# define BOOST_PP_BOOL_I(x) BOOST_PP_BOOL_ ## x\n#\n# define BOOST_PP_BOOL_0 0\n# define BOOST_PP_BOOL_1 1\n# define BOOST_PP_BOOL_2 1\n# define BOOST_PP_BOOL_3 1\n# define BOOST_PP_BOOL_4 1\n# define BOOST_PP_BOOL_5 1\n# define BOOST_PP_BOOL_6 1\n# define BOOST_PP_BOOL_7 1\n# define BOOST_PP_BOOL_8 1\n# define BOOST_PP_BOOL_9 1\n# define BOOST_PP_BOOL_10 1\n# define BOOST_PP_BOOL_11 1\n# define BOOST_PP_BOOL_12 1\n# define BOOST_PP_BOOL_13 1\n# define BOOST_PP_BOOL_14 1\n# define BOOST_PP_BOOL_15 1\n# define BOOST_PP_BOOL_16 1\n# define BOOST_PP_BOOL_17 1\n# define BOOST_PP_BOOL_18 1\n# define BOOST_PP_BOOL_19 1\n# define BOOST_PP_BOOL_20 1\n# define BOOST_PP_BOOL_21 1\n# define BOOST_PP_BOOL_22 1\n# define BOOST_PP_BOOL_23 1\n# define BOOST_PP_BOOL_24 1\n# define BOOST_PP_BOOL_25 1\n# define BOOST_PP_BOOL_26 1\n# define BOOST_PP_BOOL_27 1\n# define BOOST_PP_BOOL_28 1\n# define BOOST_PP_BOOL_29 1\n# define BOOST_PP_BOOL_30 1\n# define BOOST_PP_BOOL_31 1\n# define BOOST_PP_BOOL_32 1\n# define BOOST_PP_BOOL_33 1\n# define BOOST_PP_BOOL_34 1\n# define BOOST_PP_BOOL_35 1\n# define BOOST_PP_BOOL_36 1\n# define BOOST_PP_BOOL_37 1\n# define BOOST_PP_BOOL_38 1\n# define BOOST_PP_BOOL_39 1\n# define BOOST_PP_BOOL_40 1\n# define BOOST_PP_BOOL_41 1\n# define BOOST_PP_BOOL_42 1\n# define BOOST_PP_BOOL_43 1\n# define BOOST_PP_BOOL_44 1\n# define BOOST_PP_BOOL_45 1\n# define BOOST_PP_BOOL_46 1\n# define BOOST_PP_BOOL_47 1\n# define BOOST_PP_BOOL_48 1\n# define BOOST_PP_BOOL_49 1\n# define BOOST_PP_BOOL_50 1\n# define BOOST_PP_BOOL_51 1\n# define BOOST_PP_BOOL_52 1\n# define BOOST_PP_BOOL_53 1\n# define BOOST_PP_BOOL_54 1\n# define BOOST_PP_BOOL_55 1\n# define BOOST_PP_BOOL_56 1\n# define BOOST_PP_BOOL_57 1\n# define BOOST_PP_BOOL_58 1\n# define BOOST_PP_BOOL_59 1\n# define BOOST_PP_BOOL_60 1\n# define BOOST_PP_BOOL_61 1\n# define BOOST_PP_BOOL_62 1\n# define BOOST_PP_BOOL_63 1\n# define BOOST_PP_BOOL_64 1\n# define BOOST_PP_BOOL_65 1\n# define BOOST_PP_BOOL_66 1\n# define BOOST_PP_BOOL_67 1\n# define BOOST_PP_BOOL_68 1\n# define BOOST_PP_BOOL_69 1\n# define BOOST_PP_BOOL_70 1\n# define BOOST_PP_BOOL_71 1\n# define BOOST_PP_BOOL_72 1\n# define BOOST_PP_BOOL_73 1\n# define BOOST_PP_BOOL_74 1\n# define BOOST_PP_BOOL_75 1\n# define BOOST_PP_BOOL_76 1\n# define BOOST_PP_BOOL_77 1\n# define BOOST_PP_BOOL_78 1\n# define BOOST_PP_BOOL_79 1\n# define BOOST_PP_BOOL_80 1\n# define BOOST_PP_BOOL_81 1\n# define BOOST_PP_BOOL_82 1\n# define BOOST_PP_BOOL_83 1\n# define BOOST_PP_BOOL_84 1\n# define BOOST_PP_BOOL_85 1\n# define BOOST_PP_BOOL_86 1\n# define BOOST_PP_BOOL_87 1\n# define BOOST_PP_BOOL_88 1\n# define BOOST_PP_BOOL_89 1\n# define BOOST_PP_BOOL_90 1\n# define BOOST_PP_BOOL_91 1\n# define BOOST_PP_BOOL_92 1\n# define BOOST_PP_BOOL_93 1\n# define BOOST_PP_BOOL_94 1\n# define BOOST_PP_BOOL_95 1\n# define BOOST_PP_BOOL_96 1\n# define BOOST_PP_BOOL_97 1\n# define BOOST_PP_BOOL_98 1\n# define BOOST_PP_BOOL_99 1\n# define BOOST_PP_BOOL_100 1\n# define BOOST_PP_BOOL_101 1\n# define BOOST_PP_BOOL_102 1\n# define BOOST_PP_BOOL_103 1\n# define BOOST_PP_BOOL_104 1\n# define BOOST_PP_BOOL_105 1\n# define BOOST_PP_BOOL_106 1\n# define BOOST_PP_BOOL_107 1\n# define BOOST_PP_BOOL_108 1\n# define BOOST_PP_BOOL_109 1\n# define BOOST_PP_BOOL_110 1\n# define BOOST_PP_BOOL_111 1\n# define BOOST_PP_BOOL_112 1\n# define BOOST_PP_BOOL_113 1\n# define BOOST_PP_BOOL_114 1\n# define BOOST_PP_BOOL_115 1\n# define BOOST_PP_BOOL_116 1\n# define BOOST_PP_BOOL_117 1\n# define BOOST_PP_BOOL_118 1\n# define BOOST_PP_BOOL_119 1\n# define BOOST_PP_BOOL_120 1\n# define BOOST_PP_BOOL_121 1\n# define BOOST_PP_BOOL_122 1\n# define BOOST_PP_BOOL_123 1\n# define BOOST_PP_BOOL_124 1\n# define BOOST_PP_BOOL_125 1\n# define BOOST_PP_BOOL_126 1\n# define BOOST_PP_BOOL_127 1\n# define BOOST_PP_BOOL_128 1\n# define BOOST_PP_BOOL_129 1\n# define BOOST_PP_BOOL_130 1\n# define BOOST_PP_BOOL_131 1\n# define BOOST_PP_BOOL_132 1\n# define BOOST_PP_BOOL_133 1\n# define BOOST_PP_BOOL_134 1\n# define BOOST_PP_BOOL_135 1\n# define BOOST_PP_BOOL_136 1\n# define BOOST_PP_BOOL_137 1\n# define BOOST_PP_BOOL_138 1\n# define BOOST_PP_BOOL_139 1\n# define BOOST_PP_BOOL_140 1\n# define BOOST_PP_BOOL_141 1\n# define BOOST_PP_BOOL_142 1\n# define BOOST_PP_BOOL_143 1\n# define BOOST_PP_BOOL_144 1\n# define BOOST_PP_BOOL_145 1\n# define BOOST_PP_BOOL_146 1\n# define BOOST_PP_BOOL_147 1\n# define BOOST_PP_BOOL_148 1\n# define BOOST_PP_BOOL_149 1\n# define BOOST_PP_BOOL_150 1\n# define BOOST_PP_BOOL_151 1\n# define BOOST_PP_BOOL_152 1\n# define BOOST_PP_BOOL_153 1\n# define BOOST_PP_BOOL_154 1\n# define BOOST_PP_BOOL_155 1\n# define BOOST_PP_BOOL_156 1\n# define BOOST_PP_BOOL_157 1\n# define BOOST_PP_BOOL_158 1\n# define BOOST_PP_BOOL_159 1\n# define BOOST_PP_BOOL_160 1\n# define BOOST_PP_BOOL_161 1\n# define BOOST_PP_BOOL_162 1\n# define BOOST_PP_BOOL_163 1\n# define BOOST_PP_BOOL_164 1\n# define BOOST_PP_BOOL_165 1\n# define BOOST_PP_BOOL_166 1\n# define BOOST_PP_BOOL_167 1\n# define BOOST_PP_BOOL_168 1\n# define BOOST_PP_BOOL_169 1\n# define BOOST_PP_BOOL_170 1\n# define BOOST_PP_BOOL_171 1\n# define BOOST_PP_BOOL_172 1\n# define BOOST_PP_BOOL_173 1\n# define BOOST_PP_BOOL_174 1\n# define BOOST_PP_BOOL_175 1\n# define BOOST_PP_BOOL_176 1\n# define BOOST_PP_BOOL_177 1\n# define BOOST_PP_BOOL_178 1\n# define BOOST_PP_BOOL_179 1\n# define BOOST_PP_BOOL_180 1\n# define BOOST_PP_BOOL_181 1\n# define BOOST_PP_BOOL_182 1\n# define BOOST_PP_BOOL_183 1\n# define BOOST_PP_BOOL_184 1\n# define BOOST_PP_BOOL_185 1\n# define BOOST_PP_BOOL_186 1\n# define BOOST_PP_BOOL_187 1\n# define BOOST_PP_BOOL_188 1\n# define BOOST_PP_BOOL_189 1\n# define BOOST_PP_BOOL_190 1\n# define BOOST_PP_BOOL_191 1\n# define BOOST_PP_BOOL_192 1\n# define BOOST_PP_BOOL_193 1\n# define BOOST_PP_BOOL_194 1\n# define BOOST_PP_BOOL_195 1\n# define BOOST_PP_BOOL_196 1\n# define BOOST_PP_BOOL_197 1\n# define BOOST_PP_BOOL_198 1\n# define BOOST_PP_BOOL_199 1\n# define BOOST_PP_BOOL_200 1\n# define BOOST_PP_BOOL_201 1\n# define BOOST_PP_BOOL_202 1\n# define BOOST_PP_BOOL_203 1\n# define BOOST_PP_BOOL_204 1\n# define BOOST_PP_BOOL_205 1\n# define BOOST_PP_BOOL_206 1\n# define BOOST_PP_BOOL_207 1\n# define BOOST_PP_BOOL_208 1\n# define BOOST_PP_BOOL_209 1\n# define BOOST_PP_BOOL_210 1\n# define BOOST_PP_BOOL_211 1\n# define BOOST_PP_BOOL_212 1\n# define BOOST_PP_BOOL_213 1\n# define BOOST_PP_BOOL_214 1\n# define BOOST_PP_BOOL_215 1\n# define BOOST_PP_BOOL_216 1\n# define BOOST_PP_BOOL_217 1\n# define BOOST_PP_BOOL_218 1\n# define BOOST_PP_BOOL_219 1\n# define BOOST_PP_BOOL_220 1\n# define BOOST_PP_BOOL_221 1\n# define BOOST_PP_BOOL_222 1\n# define BOOST_PP_BOOL_223 1\n# define BOOST_PP_BOOL_224 1\n# define BOOST_PP_BOOL_225 1\n# define BOOST_PP_BOOL_226 1\n# define BOOST_PP_BOOL_227 1\n# define BOOST_PP_BOOL_228 1\n# define BOOST_PP_BOOL_229 1\n# define BOOST_PP_BOOL_230 1\n# define BOOST_PP_BOOL_231 1\n# define BOOST_PP_BOOL_232 1\n# define BOOST_PP_BOOL_233 1\n# define BOOST_PP_BOOL_234 1\n# define BOOST_PP_BOOL_235 1\n# define BOOST_PP_BOOL_236 1\n# define BOOST_PP_BOOL_237 1\n# define BOOST_PP_BOOL_238 1\n# define BOOST_PP_BOOL_239 1\n# define BOOST_PP_BOOL_240 1\n# define BOOST_PP_BOOL_241 1\n# define BOOST_PP_BOOL_242 1\n# define BOOST_PP_BOOL_243 1\n# define BOOST_PP_BOOL_244 1\n# define BOOST_PP_BOOL_245 1\n# define BOOST_PP_BOOL_246 1\n# define BOOST_PP_BOOL_247 1\n# define BOOST_PP_BOOL_248 1\n# define BOOST_PP_BOOL_249 1\n# define BOOST_PP_BOOL_250 1\n# define BOOST_PP_BOOL_251 1\n# define BOOST_PP_BOOL_252 1\n# define BOOST_PP_BOOL_253 1\n# define BOOST_PP_BOOL_254 1\n# define BOOST_PP_BOOL_255 1\n# define BOOST_PP_BOOL_256 1\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/compl.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_COMPL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_COMPL(x) BOOST_PP_COMPL_I(x)\n# else\n#    define BOOST_PP_COMPL(x) BOOST_PP_COMPL_OO((x))\n#    define BOOST_PP_COMPL_OO(par) BOOST_PP_COMPL_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ ## x\n# else\n#    define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ID(BOOST_PP_COMPL_ ## x)\n#    define BOOST_PP_COMPL_ID(id) id\n# endif\n#\n# define BOOST_PP_COMPL_0 1\n# define BOOST_PP_COMPL_1 0\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/nor.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_NOR_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_NOR_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/logical/bitnor.hpp>\n#\n# /* BOOST_PP_NOR */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_NOR(p, q) BOOST_PP_BITNOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# else\n#    define BOOST_PP_NOR(p, q) BOOST_PP_NOR_I(p, q)\n#    define BOOST_PP_NOR_I(p, q) BOOST_PP_BITNOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/not.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_NOT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/logical/compl.hpp>\n#\n# /* BOOST_PP_NOT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_NOT(x) BOOST_PP_COMPL(BOOST_PP_BOOL(x))\n# else\n#    define BOOST_PP_NOT(x) BOOST_PP_NOT_I(x)\n#    define BOOST_PP_NOT_I(x) BOOST_PP_COMPL(BOOST_PP_BOOL(x))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/or.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_OR_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_OR_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/logical/bitor.hpp>\n#\n# /* BOOST_PP_OR */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_OR(p, q) BOOST_PP_BITOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# else\n#    define BOOST_PP_OR(p, q) BOOST_PP_OR_I(p, q)\n#    define BOOST_PP_OR_I(p, q) BOOST_PP_BITOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical/xor.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_XOR_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_XOR_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/logical/bitxor.hpp>\n#\n# /* BOOST_PP_XOR */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_XOR(p, q) BOOST_PP_BITXOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# else\n#    define BOOST_PP_XOR(p, q) BOOST_PP_XOR_I(p, q)\n#    define BOOST_PP_XOR_I(p, q) BOOST_PP_BITXOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/logical.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_HPP\n#\n# include <boost/preprocessor/logical/and.hpp>\n# include <boost/preprocessor/logical/bitand.hpp>\n# include <boost/preprocessor/logical/bitnor.hpp>\n# include <boost/preprocessor/logical/bitor.hpp>\n# include <boost/preprocessor/logical/bitxor.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/logical/compl.hpp>\n# include <boost/preprocessor/logical/nor.hpp>\n# include <boost/preprocessor/logical/not.hpp>\n# include <boost/preprocessor/logical/or.hpp>\n# include <boost/preprocessor/logical/xor.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/max.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_MAX_HPP\n# define BOOST_PREPROCESSOR_MAX_HPP\n#\n# include <boost/preprocessor/selection/max.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/min.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_MIN_HPP\n# define BOOST_PREPROCESSOR_MIN_HPP\n#\n# include <boost/preprocessor/selection/min.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/punctuation/comma.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP\n# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP\n#\n# /* BOOST_PP_COMMA */\n#\n# define BOOST_PP_COMMA() ,\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/punctuation/comma_if.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP\n# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n# include <boost/preprocessor/punctuation/comma.hpp>\n#\n# /* BOOST_PP_COMMA_IF */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_COMMA_IF(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)()\n# else\n#    define BOOST_PP_COMMA_IF(cond) BOOST_PP_COMMA_IF_I(cond)\n#    define BOOST_PP_COMMA_IF_I(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)()\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/punctuation/detail/is_begin_parens.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2014.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n#ifndef BOOST_PREPROCESSOR_DETAIL_IS_BEGIN_PARENS_HPP\n#define BOOST_PREPROCESSOR_DETAIL_IS_BEGIN_PARENS_HPP\n\n#if BOOST_PP_VARIADICS_MSVC\n\n#include <boost/preprocessor/facilities/empty.hpp>\n\n#define BOOST_PP_DETAIL_VD_IBP_CAT(a, b) BOOST_PP_DETAIL_VD_IBP_CAT_I(a, b)\n#define BOOST_PP_DETAIL_VD_IBP_CAT_I(a, b) BOOST_PP_DETAIL_VD_IBP_CAT_II(a ## b)\n#define BOOST_PP_DETAIL_VD_IBP_CAT_II(res) res\n\n#define BOOST_PP_DETAIL_IBP_SPLIT(i, ...) \\\n    BOOST_PP_DETAIL_VD_IBP_CAT(BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(BOOST_PP_DETAIL_IBP_SPLIT_,i)(__VA_ARGS__),BOOST_PP_EMPTY()) \\\n/**/\n\n#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_C(...) 1 1\n\n#else\n\n#define BOOST_PP_DETAIL_IBP_SPLIT(i, ...) \\\n    BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(BOOST_PP_DETAIL_IBP_SPLIT_,i)(__VA_ARGS__) \\\n/**/\n\n#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_C(...) 1\n\n#endif /* BOOST_PP_VARIADICS_MSVC */\n\n#define BOOST_PP_DETAIL_IBP_SPLIT_0(a, ...) a\n#define BOOST_PP_DETAIL_IBP_SPLIT_1(a, ...) __VA_ARGS__\n\n#define BOOST_PP_DETAIL_IBP_CAT(a, ...) BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(a,__VA_ARGS__)\n#define BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__\n\n#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_1 1,\n#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_BOOST_PP_DETAIL_IBP_IS_VARIADIC_C 0,\n\n#endif /* BOOST_PREPROCESSOR_DETAIL_IS_BEGIN_PARENS_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/punctuation/is_begin_parens.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2014.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_IS_BEGIN_PARENS_HPP\n# define BOOST_PREPROCESSOR_IS_BEGIN_PARENS_HPP\n\n# include <boost/preprocessor/config/config.hpp>\n\n#if BOOST_PP_VARIADICS\n\n#include <boost/preprocessor/punctuation/detail/is_begin_parens.hpp>\n\n#if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400\n\n#define BOOST_PP_IS_BEGIN_PARENS(param) \\\n    BOOST_PP_DETAIL_IBP_SPLIT \\\n      ( \\\n      0, \\\n      BOOST_PP_DETAIL_IBP_CAT \\\n        ( \\\n        BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_, \\\n        BOOST_PP_DETAIL_IBP_IS_VARIADIC_C param \\\n        ) \\\n      ) \\\n/**/\n\n#else\n\n#define BOOST_PP_IS_BEGIN_PARENS(...) \\\n    BOOST_PP_DETAIL_IBP_SPLIT \\\n      ( \\\n      0, \\\n      BOOST_PP_DETAIL_IBP_CAT \\\n        ( \\\n        BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_, \\\n        BOOST_PP_DETAIL_IBP_IS_VARIADIC_C __VA_ARGS__ \\\n        ) \\\n      ) \\\n/**/\n\n#endif /* BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 */\n#endif /* BOOST_PP_VARIADICS */\n#endif /* BOOST_PREPROCESSOR_IS_BEGIN_PARENS_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/punctuation/paren.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_PUNCTUATION_PAREN_HPP\n# define BOOST_PREPROCESSOR_PUNCTUATION_PAREN_HPP\n#\n# /* BOOST_PP_LPAREN */\n#\n# define BOOST_PP_LPAREN() (\n#\n# /* BOOST_PP_RPAREN */\n#\n# define BOOST_PP_RPAREN() )\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/punctuation/paren_if.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_PUNCTUATION_PAREN_IF_HPP\n# define BOOST_PREPROCESSOR_PUNCTUATION_PAREN_IF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n# include <boost/preprocessor/punctuation/paren.hpp>\n#\n# /* BOOST_PP_LPAREN_IF */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LPAREN_IF(cond) BOOST_PP_IF(cond, BOOST_PP_LPAREN, BOOST_PP_EMPTY)()\n# else\n#    define BOOST_PP_LPAREN_IF(cond) BOOST_PP_LPAREN_IF_I(cond)\n#    define BOOST_PP_LPAREN_IF_I(cond) BOOST_PP_IF(cond, BOOST_PP_LPAREN, BOOST_PP_EMPTY)()\n# endif\n#\n# /* BOOST_PP_RPAREN_IF */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_RPAREN_IF(cond) BOOST_PP_IF(cond, BOOST_PP_RPAREN, BOOST_PP_EMPTY)()\n# else\n#    define BOOST_PP_RPAREN_IF(cond) BOOST_PP_RPAREN_IF_I(cond)\n#    define BOOST_PP_RPAREN_IF_I(cond) BOOST_PP_IF(cond, BOOST_PP_RPAREN, BOOST_PP_EMPTY)()\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/punctuation/remove_parens.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2014.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n#ifndef BOOST_PREPROCESSOR_REMOVE_PARENS_HPP\n#define BOOST_PREPROCESSOR_REMOVE_PARENS_HPP\n\n#include <boost/preprocessor/config/config.hpp>\n\n#if BOOST_PP_VARIADICS\n\n#include <boost/preprocessor/control/iif.hpp>\n#include <boost/preprocessor/facilities/identity.hpp>\n#include <boost/preprocessor/punctuation/is_begin_parens.hpp>\n#include <boost/preprocessor/tuple/enum.hpp>\n\n#define BOOST_PP_REMOVE_PARENS(param) \\\n    BOOST_PP_IIF \\\n      ( \\\n      BOOST_PP_IS_BEGIN_PARENS(param), \\\n      BOOST_PP_REMOVE_PARENS_DO, \\\n      BOOST_PP_IDENTITY \\\n      ) \\\n    (param)() \\\n/**/\n\n#define BOOST_PP_REMOVE_PARENS_DO(param) \\\n  BOOST_PP_IDENTITY(BOOST_PP_TUPLE_ENUM(param)) \\\n/**/\n\n#endif /* BOOST_PP_VARIADICS */\n#endif /* BOOST_PREPROCESSOR_REMOVE_PARENS_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/punctuation.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_PUNCTUATION_HPP\n# define BOOST_PREPROCESSOR_PUNCTUATION_HPP\n#\n# include <boost/preprocessor/punctuation/comma.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/punctuation/is_begin_parens.hpp>\n# include <boost/preprocessor/punctuation/paren.hpp>\n# include <boost/preprocessor/punctuation/paren_if.hpp>\n# include <boost/preprocessor/punctuation/remove_parens.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repeat.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPEAT_HPP\n# define BOOST_PREPROCESSOR_REPEAT_HPP\n#\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repeat_2nd.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPEAT_2ND_HPP\n# define BOOST_PREPROCESSOR_REPEAT_2ND_HPP\n#\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repeat_3rd.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPEAT_3RD_HPP\n# define BOOST_PREPROCESSOR_REPEAT_3RD_HPP\n#\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repeat_from_to.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPEAT_FROM_TO_HPP\n# define BOOST_PREPROCESSOR_REPEAT_FROM_TO_HPP\n#\n# include <boost/preprocessor/repetition/repeat_from_to.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repeat_from_to_2nd.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPEAT_FROM_TO_2ND_HPP\n# define BOOST_PREPROCESSOR_REPEAT_FROM_TO_2ND_HPP\n#\n# include <boost/preprocessor/repetition/repeat_from_to.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repeat_from_to_3rd.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPEAT_FROM_TO_3RD_HPP\n# define BOOST_PREPROCESSOR_REPEAT_FROM_TO_3RD_HPP\n#\n# include <boost/preprocessor/repetition/repeat_from_to.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/deduce_r.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_DEDUCE_R_HPP\n# define BOOST_PREPROCESSOR_REPETITION_DEDUCE_R_HPP\n#\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n#\n# /* BOOST_PP_DEDUCE_R */\n#\n# define BOOST_PP_DEDUCE_R() BOOST_PP_AUTO_REC(BOOST_PP_FOR_P, 256)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/deduce_z.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_DEDUCE_Z_HPP\n# define BOOST_PREPROCESSOR_REPETITION_DEDUCE_Z_HPP\n#\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# /* BOOST_PP_DEDUCE_Z */\n#\n# define BOOST_PP_DEDUCE_Z() BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/detail/dmc/for.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP\n# define BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP\n#\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_C(BOOST_PP_BOOL(p##(2, s)), s, p, o, m)\n# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_C(BOOST_PP_BOOL(p##(3, s)), s, p, o, m)\n# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_C(BOOST_PP_BOOL(p##(4, s)), s, p, o, m)\n# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_C(BOOST_PP_BOOL(p##(5, s)), s, p, o, m)\n# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_C(BOOST_PP_BOOL(p##(6, s)), s, p, o, m)\n# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_C(BOOST_PP_BOOL(p##(7, s)), s, p, o, m)\n# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_C(BOOST_PP_BOOL(p##(8, s)), s, p, o, m)\n# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_C(BOOST_PP_BOOL(p##(9, s)), s, p, o, m)\n# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_C(BOOST_PP_BOOL(p##(10, s)), s, p, o, m)\n# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_C(BOOST_PP_BOOL(p##(11, s)), s, p, o, m)\n# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_C(BOOST_PP_BOOL(p##(12, s)), s, p, o, m)\n# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_C(BOOST_PP_BOOL(p##(13, s)), s, p, o, m)\n# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_C(BOOST_PP_BOOL(p##(14, s)), s, p, o, m)\n# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_C(BOOST_PP_BOOL(p##(15, s)), s, p, o, m)\n# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_C(BOOST_PP_BOOL(p##(16, s)), s, p, o, m)\n# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_C(BOOST_PP_BOOL(p##(17, s)), s, p, o, m)\n# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_C(BOOST_PP_BOOL(p##(18, s)), s, p, o, m)\n# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_C(BOOST_PP_BOOL(p##(19, s)), s, p, o, m)\n# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_C(BOOST_PP_BOOL(p##(20, s)), s, p, o, m)\n# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_C(BOOST_PP_BOOL(p##(21, s)), s, p, o, m)\n# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_C(BOOST_PP_BOOL(p##(22, s)), s, p, o, m)\n# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_C(BOOST_PP_BOOL(p##(23, s)), s, p, o, m)\n# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_C(BOOST_PP_BOOL(p##(24, s)), s, p, o, m)\n# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_C(BOOST_PP_BOOL(p##(25, s)), s, p, o, m)\n# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_C(BOOST_PP_BOOL(p##(26, s)), s, p, o, m)\n# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_C(BOOST_PP_BOOL(p##(27, s)), s, p, o, m)\n# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_C(BOOST_PP_BOOL(p##(28, s)), s, p, o, m)\n# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_C(BOOST_PP_BOOL(p##(29, s)), s, p, o, m)\n# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_C(BOOST_PP_BOOL(p##(30, s)), s, p, o, m)\n# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_C(BOOST_PP_BOOL(p##(31, s)), s, p, o, m)\n# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_C(BOOST_PP_BOOL(p##(32, s)), s, p, o, m)\n# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_C(BOOST_PP_BOOL(p##(33, s)), s, p, o, m)\n# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_C(BOOST_PP_BOOL(p##(34, s)), s, p, o, m)\n# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_C(BOOST_PP_BOOL(p##(35, s)), s, p, o, m)\n# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_C(BOOST_PP_BOOL(p##(36, s)), s, p, o, m)\n# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_C(BOOST_PP_BOOL(p##(37, s)), s, p, o, m)\n# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_C(BOOST_PP_BOOL(p##(38, s)), s, p, o, m)\n# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_C(BOOST_PP_BOOL(p##(39, s)), s, p, o, m)\n# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_C(BOOST_PP_BOOL(p##(40, s)), s, p, o, m)\n# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_C(BOOST_PP_BOOL(p##(41, s)), s, p, o, m)\n# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_C(BOOST_PP_BOOL(p##(42, s)), s, p, o, m)\n# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_C(BOOST_PP_BOOL(p##(43, s)), s, p, o, m)\n# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_C(BOOST_PP_BOOL(p##(44, s)), s, p, o, m)\n# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_C(BOOST_PP_BOOL(p##(45, s)), s, p, o, m)\n# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_C(BOOST_PP_BOOL(p##(46, s)), s, p, o, m)\n# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_C(BOOST_PP_BOOL(p##(47, s)), s, p, o, m)\n# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_C(BOOST_PP_BOOL(p##(48, s)), s, p, o, m)\n# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_C(BOOST_PP_BOOL(p##(49, s)), s, p, o, m)\n# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_C(BOOST_PP_BOOL(p##(50, s)), s, p, o, m)\n# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_C(BOOST_PP_BOOL(p##(51, s)), s, p, o, m)\n# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_C(BOOST_PP_BOOL(p##(52, s)), s, p, o, m)\n# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_C(BOOST_PP_BOOL(p##(53, s)), s, p, o, m)\n# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_C(BOOST_PP_BOOL(p##(54, s)), s, p, o, m)\n# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_C(BOOST_PP_BOOL(p##(55, s)), s, p, o, m)\n# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_C(BOOST_PP_BOOL(p##(56, s)), s, p, o, m)\n# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_C(BOOST_PP_BOOL(p##(57, s)), s, p, o, m)\n# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_C(BOOST_PP_BOOL(p##(58, s)), s, p, o, m)\n# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_C(BOOST_PP_BOOL(p##(59, s)), s, p, o, m)\n# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_C(BOOST_PP_BOOL(p##(60, s)), s, p, o, m)\n# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_C(BOOST_PP_BOOL(p##(61, s)), s, p, o, m)\n# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_C(BOOST_PP_BOOL(p##(62, s)), s, p, o, m)\n# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_C(BOOST_PP_BOOL(p##(63, s)), s, p, o, m)\n# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_C(BOOST_PP_BOOL(p##(64, s)), s, p, o, m)\n# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_C(BOOST_PP_BOOL(p##(65, s)), s, p, o, m)\n# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_C(BOOST_PP_BOOL(p##(66, s)), s, p, o, m)\n# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_C(BOOST_PP_BOOL(p##(67, s)), s, p, o, m)\n# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_C(BOOST_PP_BOOL(p##(68, s)), s, p, o, m)\n# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_C(BOOST_PP_BOOL(p##(69, s)), s, p, o, m)\n# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_C(BOOST_PP_BOOL(p##(70, s)), s, p, o, m)\n# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_C(BOOST_PP_BOOL(p##(71, s)), s, p, o, m)\n# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_C(BOOST_PP_BOOL(p##(72, s)), s, p, o, m)\n# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_C(BOOST_PP_BOOL(p##(73, s)), s, p, o, m)\n# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_C(BOOST_PP_BOOL(p##(74, s)), s, p, o, m)\n# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_C(BOOST_PP_BOOL(p##(75, s)), s, p, o, m)\n# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_C(BOOST_PP_BOOL(p##(76, s)), s, p, o, m)\n# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_C(BOOST_PP_BOOL(p##(77, s)), s, p, o, m)\n# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_C(BOOST_PP_BOOL(p##(78, s)), s, p, o, m)\n# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_C(BOOST_PP_BOOL(p##(79, s)), s, p, o, m)\n# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_C(BOOST_PP_BOOL(p##(80, s)), s, p, o, m)\n# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_C(BOOST_PP_BOOL(p##(81, s)), s, p, o, m)\n# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_C(BOOST_PP_BOOL(p##(82, s)), s, p, o, m)\n# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_C(BOOST_PP_BOOL(p##(83, s)), s, p, o, m)\n# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_C(BOOST_PP_BOOL(p##(84, s)), s, p, o, m)\n# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_C(BOOST_PP_BOOL(p##(85, s)), s, p, o, m)\n# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_C(BOOST_PP_BOOL(p##(86, s)), s, p, o, m)\n# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_C(BOOST_PP_BOOL(p##(87, s)), s, p, o, m)\n# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_C(BOOST_PP_BOOL(p##(88, s)), s, p, o, m)\n# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_C(BOOST_PP_BOOL(p##(89, s)), s, p, o, m)\n# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_C(BOOST_PP_BOOL(p##(90, s)), s, p, o, m)\n# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_C(BOOST_PP_BOOL(p##(91, s)), s, p, o, m)\n# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_C(BOOST_PP_BOOL(p##(92, s)), s, p, o, m)\n# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_C(BOOST_PP_BOOL(p##(93, s)), s, p, o, m)\n# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_C(BOOST_PP_BOOL(p##(94, s)), s, p, o, m)\n# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_C(BOOST_PP_BOOL(p##(95, s)), s, p, o, m)\n# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_C(BOOST_PP_BOOL(p##(96, s)), s, p, o, m)\n# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_C(BOOST_PP_BOOL(p##(97, s)), s, p, o, m)\n# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_C(BOOST_PP_BOOL(p##(98, s)), s, p, o, m)\n# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_C(BOOST_PP_BOOL(p##(99, s)), s, p, o, m)\n# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_C(BOOST_PP_BOOL(p##(100, s)), s, p, o, m)\n# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_C(BOOST_PP_BOOL(p##(101, s)), s, p, o, m)\n# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_C(BOOST_PP_BOOL(p##(102, s)), s, p, o, m)\n# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_C(BOOST_PP_BOOL(p##(103, s)), s, p, o, m)\n# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_C(BOOST_PP_BOOL(p##(104, s)), s, p, o, m)\n# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_C(BOOST_PP_BOOL(p##(105, s)), s, p, o, m)\n# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_C(BOOST_PP_BOOL(p##(106, s)), s, p, o, m)\n# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_C(BOOST_PP_BOOL(p##(107, s)), s, p, o, m)\n# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_C(BOOST_PP_BOOL(p##(108, s)), s, p, o, m)\n# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_C(BOOST_PP_BOOL(p##(109, s)), s, p, o, m)\n# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_C(BOOST_PP_BOOL(p##(110, s)), s, p, o, m)\n# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_C(BOOST_PP_BOOL(p##(111, s)), s, p, o, m)\n# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_C(BOOST_PP_BOOL(p##(112, s)), s, p, o, m)\n# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_C(BOOST_PP_BOOL(p##(113, s)), s, p, o, m)\n# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_C(BOOST_PP_BOOL(p##(114, s)), s, p, o, m)\n# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_C(BOOST_PP_BOOL(p##(115, s)), s, p, o, m)\n# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_C(BOOST_PP_BOOL(p##(116, s)), s, p, o, m)\n# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_C(BOOST_PP_BOOL(p##(117, s)), s, p, o, m)\n# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_C(BOOST_PP_BOOL(p##(118, s)), s, p, o, m)\n# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_C(BOOST_PP_BOOL(p##(119, s)), s, p, o, m)\n# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_C(BOOST_PP_BOOL(p##(120, s)), s, p, o, m)\n# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_C(BOOST_PP_BOOL(p##(121, s)), s, p, o, m)\n# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_C(BOOST_PP_BOOL(p##(122, s)), s, p, o, m)\n# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_C(BOOST_PP_BOOL(p##(123, s)), s, p, o, m)\n# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_C(BOOST_PP_BOOL(p##(124, s)), s, p, o, m)\n# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_C(BOOST_PP_BOOL(p##(125, s)), s, p, o, m)\n# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_C(BOOST_PP_BOOL(p##(126, s)), s, p, o, m)\n# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_C(BOOST_PP_BOOL(p##(127, s)), s, p, o, m)\n# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_C(BOOST_PP_BOOL(p##(128, s)), s, p, o, m)\n# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_C(BOOST_PP_BOOL(p##(129, s)), s, p, o, m)\n# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_C(BOOST_PP_BOOL(p##(130, s)), s, p, o, m)\n# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_C(BOOST_PP_BOOL(p##(131, s)), s, p, o, m)\n# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_C(BOOST_PP_BOOL(p##(132, s)), s, p, o, m)\n# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_C(BOOST_PP_BOOL(p##(133, s)), s, p, o, m)\n# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_C(BOOST_PP_BOOL(p##(134, s)), s, p, o, m)\n# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_C(BOOST_PP_BOOL(p##(135, s)), s, p, o, m)\n# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_C(BOOST_PP_BOOL(p##(136, s)), s, p, o, m)\n# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_C(BOOST_PP_BOOL(p##(137, s)), s, p, o, m)\n# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_C(BOOST_PP_BOOL(p##(138, s)), s, p, o, m)\n# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_C(BOOST_PP_BOOL(p##(139, s)), s, p, o, m)\n# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_C(BOOST_PP_BOOL(p##(140, s)), s, p, o, m)\n# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_C(BOOST_PP_BOOL(p##(141, s)), s, p, o, m)\n# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_C(BOOST_PP_BOOL(p##(142, s)), s, p, o, m)\n# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_C(BOOST_PP_BOOL(p##(143, s)), s, p, o, m)\n# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_C(BOOST_PP_BOOL(p##(144, s)), s, p, o, m)\n# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_C(BOOST_PP_BOOL(p##(145, s)), s, p, o, m)\n# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_C(BOOST_PP_BOOL(p##(146, s)), s, p, o, m)\n# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_C(BOOST_PP_BOOL(p##(147, s)), s, p, o, m)\n# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_C(BOOST_PP_BOOL(p##(148, s)), s, p, o, m)\n# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_C(BOOST_PP_BOOL(p##(149, s)), s, p, o, m)\n# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_C(BOOST_PP_BOOL(p##(150, s)), s, p, o, m)\n# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_C(BOOST_PP_BOOL(p##(151, s)), s, p, o, m)\n# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_C(BOOST_PP_BOOL(p##(152, s)), s, p, o, m)\n# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_C(BOOST_PP_BOOL(p##(153, s)), s, p, o, m)\n# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_C(BOOST_PP_BOOL(p##(154, s)), s, p, o, m)\n# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_C(BOOST_PP_BOOL(p##(155, s)), s, p, o, m)\n# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_C(BOOST_PP_BOOL(p##(156, s)), s, p, o, m)\n# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_C(BOOST_PP_BOOL(p##(157, s)), s, p, o, m)\n# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_C(BOOST_PP_BOOL(p##(158, s)), s, p, o, m)\n# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_C(BOOST_PP_BOOL(p##(159, s)), s, p, o, m)\n# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_C(BOOST_PP_BOOL(p##(160, s)), s, p, o, m)\n# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_C(BOOST_PP_BOOL(p##(161, s)), s, p, o, m)\n# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_C(BOOST_PP_BOOL(p##(162, s)), s, p, o, m)\n# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_C(BOOST_PP_BOOL(p##(163, s)), s, p, o, m)\n# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_C(BOOST_PP_BOOL(p##(164, s)), s, p, o, m)\n# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_C(BOOST_PP_BOOL(p##(165, s)), s, p, o, m)\n# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_C(BOOST_PP_BOOL(p##(166, s)), s, p, o, m)\n# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_C(BOOST_PP_BOOL(p##(167, s)), s, p, o, m)\n# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_C(BOOST_PP_BOOL(p##(168, s)), s, p, o, m)\n# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_C(BOOST_PP_BOOL(p##(169, s)), s, p, o, m)\n# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_C(BOOST_PP_BOOL(p##(170, s)), s, p, o, m)\n# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_C(BOOST_PP_BOOL(p##(171, s)), s, p, o, m)\n# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_C(BOOST_PP_BOOL(p##(172, s)), s, p, o, m)\n# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_C(BOOST_PP_BOOL(p##(173, s)), s, p, o, m)\n# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_C(BOOST_PP_BOOL(p##(174, s)), s, p, o, m)\n# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_C(BOOST_PP_BOOL(p##(175, s)), s, p, o, m)\n# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_C(BOOST_PP_BOOL(p##(176, s)), s, p, o, m)\n# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_C(BOOST_PP_BOOL(p##(177, s)), s, p, o, m)\n# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_C(BOOST_PP_BOOL(p##(178, s)), s, p, o, m)\n# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_C(BOOST_PP_BOOL(p##(179, s)), s, p, o, m)\n# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_C(BOOST_PP_BOOL(p##(180, s)), s, p, o, m)\n# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_C(BOOST_PP_BOOL(p##(181, s)), s, p, o, m)\n# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_C(BOOST_PP_BOOL(p##(182, s)), s, p, o, m)\n# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_C(BOOST_PP_BOOL(p##(183, s)), s, p, o, m)\n# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_C(BOOST_PP_BOOL(p##(184, s)), s, p, o, m)\n# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_C(BOOST_PP_BOOL(p##(185, s)), s, p, o, m)\n# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_C(BOOST_PP_BOOL(p##(186, s)), s, p, o, m)\n# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_C(BOOST_PP_BOOL(p##(187, s)), s, p, o, m)\n# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_C(BOOST_PP_BOOL(p##(188, s)), s, p, o, m)\n# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_C(BOOST_PP_BOOL(p##(189, s)), s, p, o, m)\n# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_C(BOOST_PP_BOOL(p##(190, s)), s, p, o, m)\n# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_C(BOOST_PP_BOOL(p##(191, s)), s, p, o, m)\n# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_C(BOOST_PP_BOOL(p##(192, s)), s, p, o, m)\n# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_C(BOOST_PP_BOOL(p##(193, s)), s, p, o, m)\n# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_C(BOOST_PP_BOOL(p##(194, s)), s, p, o, m)\n# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_C(BOOST_PP_BOOL(p##(195, s)), s, p, o, m)\n# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_C(BOOST_PP_BOOL(p##(196, s)), s, p, o, m)\n# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_C(BOOST_PP_BOOL(p##(197, s)), s, p, o, m)\n# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_C(BOOST_PP_BOOL(p##(198, s)), s, p, o, m)\n# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_C(BOOST_PP_BOOL(p##(199, s)), s, p, o, m)\n# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_C(BOOST_PP_BOOL(p##(200, s)), s, p, o, m)\n# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_C(BOOST_PP_BOOL(p##(201, s)), s, p, o, m)\n# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_C(BOOST_PP_BOOL(p##(202, s)), s, p, o, m)\n# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_C(BOOST_PP_BOOL(p##(203, s)), s, p, o, m)\n# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_C(BOOST_PP_BOOL(p##(204, s)), s, p, o, m)\n# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_C(BOOST_PP_BOOL(p##(205, s)), s, p, o, m)\n# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_C(BOOST_PP_BOOL(p##(206, s)), s, p, o, m)\n# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_C(BOOST_PP_BOOL(p##(207, s)), s, p, o, m)\n# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_C(BOOST_PP_BOOL(p##(208, s)), s, p, o, m)\n# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_C(BOOST_PP_BOOL(p##(209, s)), s, p, o, m)\n# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_C(BOOST_PP_BOOL(p##(210, s)), s, p, o, m)\n# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_C(BOOST_PP_BOOL(p##(211, s)), s, p, o, m)\n# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_C(BOOST_PP_BOOL(p##(212, s)), s, p, o, m)\n# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_C(BOOST_PP_BOOL(p##(213, s)), s, p, o, m)\n# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_C(BOOST_PP_BOOL(p##(214, s)), s, p, o, m)\n# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_C(BOOST_PP_BOOL(p##(215, s)), s, p, o, m)\n# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_C(BOOST_PP_BOOL(p##(216, s)), s, p, o, m)\n# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_C(BOOST_PP_BOOL(p##(217, s)), s, p, o, m)\n# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_C(BOOST_PP_BOOL(p##(218, s)), s, p, o, m)\n# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_C(BOOST_PP_BOOL(p##(219, s)), s, p, o, m)\n# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_C(BOOST_PP_BOOL(p##(220, s)), s, p, o, m)\n# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_C(BOOST_PP_BOOL(p##(221, s)), s, p, o, m)\n# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_C(BOOST_PP_BOOL(p##(222, s)), s, p, o, m)\n# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_C(BOOST_PP_BOOL(p##(223, s)), s, p, o, m)\n# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_C(BOOST_PP_BOOL(p##(224, s)), s, p, o, m)\n# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_C(BOOST_PP_BOOL(p##(225, s)), s, p, o, m)\n# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_C(BOOST_PP_BOOL(p##(226, s)), s, p, o, m)\n# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_C(BOOST_PP_BOOL(p##(227, s)), s, p, o, m)\n# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_C(BOOST_PP_BOOL(p##(228, s)), s, p, o, m)\n# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_C(BOOST_PP_BOOL(p##(229, s)), s, p, o, m)\n# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_C(BOOST_PP_BOOL(p##(230, s)), s, p, o, m)\n# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_C(BOOST_PP_BOOL(p##(231, s)), s, p, o, m)\n# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_C(BOOST_PP_BOOL(p##(232, s)), s, p, o, m)\n# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_C(BOOST_PP_BOOL(p##(233, s)), s, p, o, m)\n# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_C(BOOST_PP_BOOL(p##(234, s)), s, p, o, m)\n# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_C(BOOST_PP_BOOL(p##(235, s)), s, p, o, m)\n# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_C(BOOST_PP_BOOL(p##(236, s)), s, p, o, m)\n# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_C(BOOST_PP_BOOL(p##(237, s)), s, p, o, m)\n# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_C(BOOST_PP_BOOL(p##(238, s)), s, p, o, m)\n# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_C(BOOST_PP_BOOL(p##(239, s)), s, p, o, m)\n# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_C(BOOST_PP_BOOL(p##(240, s)), s, p, o, m)\n# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_C(BOOST_PP_BOOL(p##(241, s)), s, p, o, m)\n# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_C(BOOST_PP_BOOL(p##(242, s)), s, p, o, m)\n# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_C(BOOST_PP_BOOL(p##(243, s)), s, p, o, m)\n# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_C(BOOST_PP_BOOL(p##(244, s)), s, p, o, m)\n# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_C(BOOST_PP_BOOL(p##(245, s)), s, p, o, m)\n# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_C(BOOST_PP_BOOL(p##(246, s)), s, p, o, m)\n# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_C(BOOST_PP_BOOL(p##(247, s)), s, p, o, m)\n# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_C(BOOST_PP_BOOL(p##(248, s)), s, p, o, m)\n# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_C(BOOST_PP_BOOL(p##(249, s)), s, p, o, m)\n# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_C(BOOST_PP_BOOL(p##(250, s)), s, p, o, m)\n# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_C(BOOST_PP_BOOL(p##(251, s)), s, p, o, m)\n# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_C(BOOST_PP_BOOL(p##(252, s)), s, p, o, m)\n# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_C(BOOST_PP_BOOL(p##(253, s)), s, p, o, m)\n# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_C(BOOST_PP_BOOL(p##(254, s)), s, p, o, m)\n# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_C(BOOST_PP_BOOL(p##(255, s)), s, p, o, m)\n# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_C(BOOST_PP_BOOL(p##(256, s)), s, p, o, m)\n# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_C(BOOST_PP_BOOL(p##(257, s)), s, p, o, m)\n#\n# define BOOST_PP_FOR_1_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IIF(c, BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(2, s), p, o, m)\n# define BOOST_PP_FOR_2_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IIF(c, BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(3, s), p, o, m)\n# define BOOST_PP_FOR_3_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IIF(c, BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(4, s), p, o, m)\n# define BOOST_PP_FOR_4_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IIF(c, BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(5, s), p, o, m)\n# define BOOST_PP_FOR_5_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IIF(c, BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(6, s), p, o, m)\n# define BOOST_PP_FOR_6_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IIF(c, BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(7, s), p, o, m)\n# define BOOST_PP_FOR_7_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IIF(c, BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(8, s), p, o, m)\n# define BOOST_PP_FOR_8_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IIF(c, BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(9, s), p, o, m)\n# define BOOST_PP_FOR_9_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IIF(c, BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(10, s), p, o, m)\n# define BOOST_PP_FOR_10_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IIF(c, BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(11, s), p, o, m)\n# define BOOST_PP_FOR_11_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IIF(c, BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(12, s), p, o, m)\n# define BOOST_PP_FOR_12_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IIF(c, BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(13, s), p, o, m)\n# define BOOST_PP_FOR_13_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IIF(c, BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(14, s), p, o, m)\n# define BOOST_PP_FOR_14_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IIF(c, BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(15, s), p, o, m)\n# define BOOST_PP_FOR_15_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IIF(c, BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(16, s), p, o, m)\n# define BOOST_PP_FOR_16_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IIF(c, BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(17, s), p, o, m)\n# define BOOST_PP_FOR_17_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IIF(c, BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(18, s), p, o, m)\n# define BOOST_PP_FOR_18_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IIF(c, BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(19, s), p, o, m)\n# define BOOST_PP_FOR_19_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IIF(c, BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(20, s), p, o, m)\n# define BOOST_PP_FOR_20_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IIF(c, BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(21, s), p, o, m)\n# define BOOST_PP_FOR_21_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IIF(c, BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(22, s), p, o, m)\n# define BOOST_PP_FOR_22_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IIF(c, BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(23, s), p, o, m)\n# define BOOST_PP_FOR_23_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IIF(c, BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(24, s), p, o, m)\n# define BOOST_PP_FOR_24_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IIF(c, BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(25, s), p, o, m)\n# define BOOST_PP_FOR_25_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IIF(c, BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(26, s), p, o, m)\n# define BOOST_PP_FOR_26_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IIF(c, BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(27, s), p, o, m)\n# define BOOST_PP_FOR_27_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IIF(c, BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(28, s), p, o, m)\n# define BOOST_PP_FOR_28_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IIF(c, BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(29, s), p, o, m)\n# define BOOST_PP_FOR_29_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IIF(c, BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(30, s), p, o, m)\n# define BOOST_PP_FOR_30_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IIF(c, BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(31, s), p, o, m)\n# define BOOST_PP_FOR_31_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IIF(c, BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(32, s), p, o, m)\n# define BOOST_PP_FOR_32_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IIF(c, BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(33, s), p, o, m)\n# define BOOST_PP_FOR_33_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IIF(c, BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(34, s), p, o, m)\n# define BOOST_PP_FOR_34_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IIF(c, BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(35, s), p, o, m)\n# define BOOST_PP_FOR_35_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IIF(c, BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(36, s), p, o, m)\n# define BOOST_PP_FOR_36_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IIF(c, BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(37, s), p, o, m)\n# define BOOST_PP_FOR_37_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IIF(c, BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(38, s), p, o, m)\n# define BOOST_PP_FOR_38_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IIF(c, BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(39, s), p, o, m)\n# define BOOST_PP_FOR_39_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IIF(c, BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(40, s), p, o, m)\n# define BOOST_PP_FOR_40_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IIF(c, BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(41, s), p, o, m)\n# define BOOST_PP_FOR_41_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IIF(c, BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(42, s), p, o, m)\n# define BOOST_PP_FOR_42_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IIF(c, BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(43, s), p, o, m)\n# define BOOST_PP_FOR_43_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IIF(c, BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(44, s), p, o, m)\n# define BOOST_PP_FOR_44_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IIF(c, BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(45, s), p, o, m)\n# define BOOST_PP_FOR_45_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IIF(c, BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(46, s), p, o, m)\n# define BOOST_PP_FOR_46_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IIF(c, BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(47, s), p, o, m)\n# define BOOST_PP_FOR_47_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IIF(c, BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(48, s), p, o, m)\n# define BOOST_PP_FOR_48_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IIF(c, BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(49, s), p, o, m)\n# define BOOST_PP_FOR_49_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IIF(c, BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(50, s), p, o, m)\n# define BOOST_PP_FOR_50_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IIF(c, BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(51, s), p, o, m)\n# define BOOST_PP_FOR_51_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IIF(c, BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(52, s), p, o, m)\n# define BOOST_PP_FOR_52_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IIF(c, BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(53, s), p, o, m)\n# define BOOST_PP_FOR_53_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IIF(c, BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(54, s), p, o, m)\n# define BOOST_PP_FOR_54_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IIF(c, BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(55, s), p, o, m)\n# define BOOST_PP_FOR_55_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IIF(c, BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(56, s), p, o, m)\n# define BOOST_PP_FOR_56_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IIF(c, BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(57, s), p, o, m)\n# define BOOST_PP_FOR_57_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IIF(c, BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(58, s), p, o, m)\n# define BOOST_PP_FOR_58_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IIF(c, BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(59, s), p, o, m)\n# define BOOST_PP_FOR_59_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IIF(c, BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(60, s), p, o, m)\n# define BOOST_PP_FOR_60_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IIF(c, BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(61, s), p, o, m)\n# define BOOST_PP_FOR_61_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IIF(c, BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(62, s), p, o, m)\n# define BOOST_PP_FOR_62_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IIF(c, BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(63, s), p, o, m)\n# define BOOST_PP_FOR_63_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IIF(c, BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(64, s), p, o, m)\n# define BOOST_PP_FOR_64_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IIF(c, BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(65, s), p, o, m)\n# define BOOST_PP_FOR_65_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IIF(c, BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(66, s), p, o, m)\n# define BOOST_PP_FOR_66_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IIF(c, BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(67, s), p, o, m)\n# define BOOST_PP_FOR_67_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IIF(c, BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(68, s), p, o, m)\n# define BOOST_PP_FOR_68_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IIF(c, BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(69, s), p, o, m)\n# define BOOST_PP_FOR_69_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IIF(c, BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(70, s), p, o, m)\n# define BOOST_PP_FOR_70_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IIF(c, BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(71, s), p, o, m)\n# define BOOST_PP_FOR_71_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IIF(c, BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(72, s), p, o, m)\n# define BOOST_PP_FOR_72_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IIF(c, BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(73, s), p, o, m)\n# define BOOST_PP_FOR_73_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IIF(c, BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(74, s), p, o, m)\n# define BOOST_PP_FOR_74_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IIF(c, BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(75, s), p, o, m)\n# define BOOST_PP_FOR_75_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IIF(c, BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(76, s), p, o, m)\n# define BOOST_PP_FOR_76_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IIF(c, BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(77, s), p, o, m)\n# define BOOST_PP_FOR_77_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IIF(c, BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(78, s), p, o, m)\n# define BOOST_PP_FOR_78_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IIF(c, BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(79, s), p, o, m)\n# define BOOST_PP_FOR_79_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IIF(c, BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(80, s), p, o, m)\n# define BOOST_PP_FOR_80_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IIF(c, BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(81, s), p, o, m)\n# define BOOST_PP_FOR_81_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IIF(c, BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(82, s), p, o, m)\n# define BOOST_PP_FOR_82_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IIF(c, BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(83, s), p, o, m)\n# define BOOST_PP_FOR_83_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IIF(c, BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(84, s), p, o, m)\n# define BOOST_PP_FOR_84_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IIF(c, BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(85, s), p, o, m)\n# define BOOST_PP_FOR_85_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IIF(c, BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(86, s), p, o, m)\n# define BOOST_PP_FOR_86_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IIF(c, BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(87, s), p, o, m)\n# define BOOST_PP_FOR_87_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IIF(c, BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(88, s), p, o, m)\n# define BOOST_PP_FOR_88_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IIF(c, BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(89, s), p, o, m)\n# define BOOST_PP_FOR_89_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IIF(c, BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(90, s), p, o, m)\n# define BOOST_PP_FOR_90_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IIF(c, BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(91, s), p, o, m)\n# define BOOST_PP_FOR_91_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IIF(c, BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(92, s), p, o, m)\n# define BOOST_PP_FOR_92_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IIF(c, BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(93, s), p, o, m)\n# define BOOST_PP_FOR_93_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IIF(c, BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(94, s), p, o, m)\n# define BOOST_PP_FOR_94_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IIF(c, BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(95, s), p, o, m)\n# define BOOST_PP_FOR_95_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IIF(c, BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(96, s), p, o, m)\n# define BOOST_PP_FOR_96_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IIF(c, BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(97, s), p, o, m)\n# define BOOST_PP_FOR_97_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IIF(c, BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(98, s), p, o, m)\n# define BOOST_PP_FOR_98_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IIF(c, BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(99, s), p, o, m)\n# define BOOST_PP_FOR_99_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IIF(c, BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(100, s), p, o, m)\n# define BOOST_PP_FOR_100_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IIF(c, BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(101, s), p, o, m)\n# define BOOST_PP_FOR_101_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IIF(c, BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(102, s), p, o, m)\n# define BOOST_PP_FOR_102_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IIF(c, BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(103, s), p, o, m)\n# define BOOST_PP_FOR_103_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IIF(c, BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(104, s), p, o, m)\n# define BOOST_PP_FOR_104_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IIF(c, BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(105, s), p, o, m)\n# define BOOST_PP_FOR_105_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IIF(c, BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(106, s), p, o, m)\n# define BOOST_PP_FOR_106_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IIF(c, BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(107, s), p, o, m)\n# define BOOST_PP_FOR_107_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IIF(c, BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(108, s), p, o, m)\n# define BOOST_PP_FOR_108_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IIF(c, BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(109, s), p, o, m)\n# define BOOST_PP_FOR_109_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IIF(c, BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(110, s), p, o, m)\n# define BOOST_PP_FOR_110_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IIF(c, BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(111, s), p, o, m)\n# define BOOST_PP_FOR_111_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IIF(c, BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(112, s), p, o, m)\n# define BOOST_PP_FOR_112_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IIF(c, BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(113, s), p, o, m)\n# define BOOST_PP_FOR_113_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IIF(c, BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(114, s), p, o, m)\n# define BOOST_PP_FOR_114_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IIF(c, BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(115, s), p, o, m)\n# define BOOST_PP_FOR_115_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IIF(c, BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(116, s), p, o, m)\n# define BOOST_PP_FOR_116_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IIF(c, BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(117, s), p, o, m)\n# define BOOST_PP_FOR_117_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IIF(c, BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(118, s), p, o, m)\n# define BOOST_PP_FOR_118_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IIF(c, BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(119, s), p, o, m)\n# define BOOST_PP_FOR_119_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IIF(c, BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(120, s), p, o, m)\n# define BOOST_PP_FOR_120_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IIF(c, BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(121, s), p, o, m)\n# define BOOST_PP_FOR_121_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IIF(c, BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(122, s), p, o, m)\n# define BOOST_PP_FOR_122_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IIF(c, BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(123, s), p, o, m)\n# define BOOST_PP_FOR_123_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IIF(c, BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(124, s), p, o, m)\n# define BOOST_PP_FOR_124_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IIF(c, BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(125, s), p, o, m)\n# define BOOST_PP_FOR_125_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IIF(c, BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(126, s), p, o, m)\n# define BOOST_PP_FOR_126_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IIF(c, BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(127, s), p, o, m)\n# define BOOST_PP_FOR_127_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IIF(c, BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(128, s), p, o, m)\n# define BOOST_PP_FOR_128_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IIF(c, BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(129, s), p, o, m)\n# define BOOST_PP_FOR_129_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IIF(c, BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(130, s), p, o, m)\n# define BOOST_PP_FOR_130_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IIF(c, BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(131, s), p, o, m)\n# define BOOST_PP_FOR_131_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IIF(c, BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(132, s), p, o, m)\n# define BOOST_PP_FOR_132_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IIF(c, BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(133, s), p, o, m)\n# define BOOST_PP_FOR_133_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IIF(c, BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(134, s), p, o, m)\n# define BOOST_PP_FOR_134_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IIF(c, BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(135, s), p, o, m)\n# define BOOST_PP_FOR_135_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IIF(c, BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(136, s), p, o, m)\n# define BOOST_PP_FOR_136_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IIF(c, BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(137, s), p, o, m)\n# define BOOST_PP_FOR_137_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IIF(c, BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(138, s), p, o, m)\n# define BOOST_PP_FOR_138_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IIF(c, BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(139, s), p, o, m)\n# define BOOST_PP_FOR_139_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IIF(c, BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(140, s), p, o, m)\n# define BOOST_PP_FOR_140_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IIF(c, BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(141, s), p, o, m)\n# define BOOST_PP_FOR_141_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IIF(c, BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(142, s), p, o, m)\n# define BOOST_PP_FOR_142_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IIF(c, BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(143, s), p, o, m)\n# define BOOST_PP_FOR_143_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IIF(c, BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(144, s), p, o, m)\n# define BOOST_PP_FOR_144_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IIF(c, BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(145, s), p, o, m)\n# define BOOST_PP_FOR_145_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IIF(c, BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(146, s), p, o, m)\n# define BOOST_PP_FOR_146_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IIF(c, BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(147, s), p, o, m)\n# define BOOST_PP_FOR_147_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IIF(c, BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(148, s), p, o, m)\n# define BOOST_PP_FOR_148_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IIF(c, BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(149, s), p, o, m)\n# define BOOST_PP_FOR_149_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IIF(c, BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(150, s), p, o, m)\n# define BOOST_PP_FOR_150_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IIF(c, BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(151, s), p, o, m)\n# define BOOST_PP_FOR_151_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IIF(c, BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(152, s), p, o, m)\n# define BOOST_PP_FOR_152_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IIF(c, BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(153, s), p, o, m)\n# define BOOST_PP_FOR_153_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IIF(c, BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(154, s), p, o, m)\n# define BOOST_PP_FOR_154_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IIF(c, BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(155, s), p, o, m)\n# define BOOST_PP_FOR_155_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IIF(c, BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(156, s), p, o, m)\n# define BOOST_PP_FOR_156_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IIF(c, BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(157, s), p, o, m)\n# define BOOST_PP_FOR_157_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IIF(c, BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(158, s), p, o, m)\n# define BOOST_PP_FOR_158_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IIF(c, BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(159, s), p, o, m)\n# define BOOST_PP_FOR_159_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IIF(c, BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(160, s), p, o, m)\n# define BOOST_PP_FOR_160_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IIF(c, BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(161, s), p, o, m)\n# define BOOST_PP_FOR_161_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IIF(c, BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(162, s), p, o, m)\n# define BOOST_PP_FOR_162_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IIF(c, BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(163, s), p, o, m)\n# define BOOST_PP_FOR_163_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IIF(c, BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(164, s), p, o, m)\n# define BOOST_PP_FOR_164_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IIF(c, BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(165, s), p, o, m)\n# define BOOST_PP_FOR_165_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IIF(c, BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(166, s), p, o, m)\n# define BOOST_PP_FOR_166_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IIF(c, BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(167, s), p, o, m)\n# define BOOST_PP_FOR_167_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IIF(c, BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(168, s), p, o, m)\n# define BOOST_PP_FOR_168_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IIF(c, BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(169, s), p, o, m)\n# define BOOST_PP_FOR_169_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IIF(c, BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(170, s), p, o, m)\n# define BOOST_PP_FOR_170_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IIF(c, BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(171, s), p, o, m)\n# define BOOST_PP_FOR_171_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IIF(c, BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(172, s), p, o, m)\n# define BOOST_PP_FOR_172_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IIF(c, BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(173, s), p, o, m)\n# define BOOST_PP_FOR_173_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IIF(c, BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(174, s), p, o, m)\n# define BOOST_PP_FOR_174_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IIF(c, BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(175, s), p, o, m)\n# define BOOST_PP_FOR_175_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IIF(c, BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(176, s), p, o, m)\n# define BOOST_PP_FOR_176_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IIF(c, BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(177, s), p, o, m)\n# define BOOST_PP_FOR_177_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IIF(c, BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(178, s), p, o, m)\n# define BOOST_PP_FOR_178_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IIF(c, BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(179, s), p, o, m)\n# define BOOST_PP_FOR_179_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IIF(c, BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(180, s), p, o, m)\n# define BOOST_PP_FOR_180_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IIF(c, BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(181, s), p, o, m)\n# define BOOST_PP_FOR_181_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IIF(c, BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(182, s), p, o, m)\n# define BOOST_PP_FOR_182_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IIF(c, BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(183, s), p, o, m)\n# define BOOST_PP_FOR_183_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IIF(c, BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(184, s), p, o, m)\n# define BOOST_PP_FOR_184_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IIF(c, BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(185, s), p, o, m)\n# define BOOST_PP_FOR_185_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IIF(c, BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(186, s), p, o, m)\n# define BOOST_PP_FOR_186_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IIF(c, BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(187, s), p, o, m)\n# define BOOST_PP_FOR_187_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IIF(c, BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(188, s), p, o, m)\n# define BOOST_PP_FOR_188_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IIF(c, BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(189, s), p, o, m)\n# define BOOST_PP_FOR_189_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IIF(c, BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(190, s), p, o, m)\n# define BOOST_PP_FOR_190_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IIF(c, BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(191, s), p, o, m)\n# define BOOST_PP_FOR_191_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IIF(c, BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(192, s), p, o, m)\n# define BOOST_PP_FOR_192_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IIF(c, BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(193, s), p, o, m)\n# define BOOST_PP_FOR_193_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IIF(c, BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(194, s), p, o, m)\n# define BOOST_PP_FOR_194_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IIF(c, BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(195, s), p, o, m)\n# define BOOST_PP_FOR_195_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IIF(c, BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(196, s), p, o, m)\n# define BOOST_PP_FOR_196_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IIF(c, BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(197, s), p, o, m)\n# define BOOST_PP_FOR_197_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IIF(c, BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(198, s), p, o, m)\n# define BOOST_PP_FOR_198_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IIF(c, BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(199, s), p, o, m)\n# define BOOST_PP_FOR_199_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IIF(c, BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(200, s), p, o, m)\n# define BOOST_PP_FOR_200_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IIF(c, BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(201, s), p, o, m)\n# define BOOST_PP_FOR_201_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IIF(c, BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(202, s), p, o, m)\n# define BOOST_PP_FOR_202_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IIF(c, BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(203, s), p, o, m)\n# define BOOST_PP_FOR_203_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IIF(c, BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(204, s), p, o, m)\n# define BOOST_PP_FOR_204_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IIF(c, BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(205, s), p, o, m)\n# define BOOST_PP_FOR_205_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IIF(c, BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(206, s), p, o, m)\n# define BOOST_PP_FOR_206_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IIF(c, BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(207, s), p, o, m)\n# define BOOST_PP_FOR_207_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IIF(c, BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(208, s), p, o, m)\n# define BOOST_PP_FOR_208_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IIF(c, BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(209, s), p, o, m)\n# define BOOST_PP_FOR_209_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IIF(c, BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(210, s), p, o, m)\n# define BOOST_PP_FOR_210_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IIF(c, BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(211, s), p, o, m)\n# define BOOST_PP_FOR_211_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IIF(c, BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(212, s), p, o, m)\n# define BOOST_PP_FOR_212_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IIF(c, BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(213, s), p, o, m)\n# define BOOST_PP_FOR_213_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IIF(c, BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(214, s), p, o, m)\n# define BOOST_PP_FOR_214_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IIF(c, BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(215, s), p, o, m)\n# define BOOST_PP_FOR_215_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IIF(c, BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(216, s), p, o, m)\n# define BOOST_PP_FOR_216_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IIF(c, BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(217, s), p, o, m)\n# define BOOST_PP_FOR_217_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IIF(c, BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(218, s), p, o, m)\n# define BOOST_PP_FOR_218_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IIF(c, BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(219, s), p, o, m)\n# define BOOST_PP_FOR_219_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IIF(c, BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(220, s), p, o, m)\n# define BOOST_PP_FOR_220_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IIF(c, BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(221, s), p, o, m)\n# define BOOST_PP_FOR_221_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IIF(c, BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(222, s), p, o, m)\n# define BOOST_PP_FOR_222_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IIF(c, BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(223, s), p, o, m)\n# define BOOST_PP_FOR_223_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IIF(c, BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(224, s), p, o, m)\n# define BOOST_PP_FOR_224_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IIF(c, BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(225, s), p, o, m)\n# define BOOST_PP_FOR_225_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IIF(c, BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(226, s), p, o, m)\n# define BOOST_PP_FOR_226_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IIF(c, BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(227, s), p, o, m)\n# define BOOST_PP_FOR_227_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IIF(c, BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(228, s), p, o, m)\n# define BOOST_PP_FOR_228_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IIF(c, BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(229, s), p, o, m)\n# define BOOST_PP_FOR_229_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IIF(c, BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(230, s), p, o, m)\n# define BOOST_PP_FOR_230_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IIF(c, BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(231, s), p, o, m)\n# define BOOST_PP_FOR_231_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IIF(c, BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(232, s), p, o, m)\n# define BOOST_PP_FOR_232_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IIF(c, BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(233, s), p, o, m)\n# define BOOST_PP_FOR_233_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IIF(c, BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(234, s), p, o, m)\n# define BOOST_PP_FOR_234_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IIF(c, BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(235, s), p, o, m)\n# define BOOST_PP_FOR_235_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IIF(c, BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(236, s), p, o, m)\n# define BOOST_PP_FOR_236_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IIF(c, BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(237, s), p, o, m)\n# define BOOST_PP_FOR_237_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IIF(c, BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(238, s), p, o, m)\n# define BOOST_PP_FOR_238_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IIF(c, BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(239, s), p, o, m)\n# define BOOST_PP_FOR_239_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IIF(c, BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(240, s), p, o, m)\n# define BOOST_PP_FOR_240_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IIF(c, BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(241, s), p, o, m)\n# define BOOST_PP_FOR_241_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IIF(c, BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(242, s), p, o, m)\n# define BOOST_PP_FOR_242_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IIF(c, BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(243, s), p, o, m)\n# define BOOST_PP_FOR_243_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IIF(c, BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(244, s), p, o, m)\n# define BOOST_PP_FOR_244_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IIF(c, BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(245, s), p, o, m)\n# define BOOST_PP_FOR_245_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IIF(c, BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(246, s), p, o, m)\n# define BOOST_PP_FOR_246_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IIF(c, BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(247, s), p, o, m)\n# define BOOST_PP_FOR_247_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IIF(c, BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(248, s), p, o, m)\n# define BOOST_PP_FOR_248_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IIF(c, BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(249, s), p, o, m)\n# define BOOST_PP_FOR_249_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IIF(c, BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(250, s), p, o, m)\n# define BOOST_PP_FOR_250_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IIF(c, BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(251, s), p, o, m)\n# define BOOST_PP_FOR_251_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IIF(c, BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(252, s), p, o, m)\n# define BOOST_PP_FOR_252_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IIF(c, BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(253, s), p, o, m)\n# define BOOST_PP_FOR_253_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IIF(c, BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(254, s), p, o, m)\n# define BOOST_PP_FOR_254_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IIF(c, BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(255, s), p, o, m)\n# define BOOST_PP_FOR_255_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IIF(c, BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(256, s), p, o, m)\n# define BOOST_PP_FOR_256_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IIF(c, BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(257, s), p, o, m)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/detail/edg/for.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP\n# define BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP\n#\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_I(s, p, o, m)\n# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_I(s, p, o, m)\n# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_I(s, p, o, m)\n# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_I(s, p, o, m)\n# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_I(s, p, o, m)\n# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_I(s, p, o, m)\n# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_I(s, p, o, m)\n# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_I(s, p, o, m)\n# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_I(s, p, o, m)\n# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_I(s, p, o, m)\n# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_I(s, p, o, m)\n# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_I(s, p, o, m)\n# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_I(s, p, o, m)\n# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_I(s, p, o, m)\n# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_I(s, p, o, m)\n# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_I(s, p, o, m)\n# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_I(s, p, o, m)\n# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_I(s, p, o, m)\n# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_I(s, p, o, m)\n# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_I(s, p, o, m)\n# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_I(s, p, o, m)\n# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_I(s, p, o, m)\n# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_I(s, p, o, m)\n# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_I(s, p, o, m)\n# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_I(s, p, o, m)\n# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_I(s, p, o, m)\n# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_I(s, p, o, m)\n# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_I(s, p, o, m)\n# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_I(s, p, o, m)\n# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_I(s, p, o, m)\n# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_I(s, p, o, m)\n# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_I(s, p, o, m)\n# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_I(s, p, o, m)\n# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_I(s, p, o, m)\n# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_I(s, p, o, m)\n# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_I(s, p, o, m)\n# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_I(s, p, o, m)\n# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_I(s, p, o, m)\n# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_I(s, p, o, m)\n# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_I(s, p, o, m)\n# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_I(s, p, o, m)\n# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_I(s, p, o, m)\n# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_I(s, p, o, m)\n# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_I(s, p, o, m)\n# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_I(s, p, o, m)\n# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_I(s, p, o, m)\n# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_I(s, p, o, m)\n# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_I(s, p, o, m)\n# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_I(s, p, o, m)\n# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_I(s, p, o, m)\n# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_I(s, p, o, m)\n# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_I(s, p, o, m)\n# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_I(s, p, o, m)\n# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_I(s, p, o, m)\n# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_I(s, p, o, m)\n# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_I(s, p, o, m)\n# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_I(s, p, o, m)\n# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_I(s, p, o, m)\n# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_I(s, p, o, m)\n# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_I(s, p, o, m)\n# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_I(s, p, o, m)\n# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_I(s, p, o, m)\n# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_I(s, p, o, m)\n# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_I(s, p, o, m)\n# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_I(s, p, o, m)\n# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_I(s, p, o, m)\n# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_I(s, p, o, m)\n# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_I(s, p, o, m)\n# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_I(s, p, o, m)\n# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_I(s, p, o, m)\n# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_I(s, p, o, m)\n# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_I(s, p, o, m)\n# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_I(s, p, o, m)\n# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_I(s, p, o, m)\n# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_I(s, p, o, m)\n# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_I(s, p, o, m)\n# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_I(s, p, o, m)\n# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_I(s, p, o, m)\n# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_I(s, p, o, m)\n# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_I(s, p, o, m)\n# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_I(s, p, o, m)\n# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_I(s, p, o, m)\n# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_I(s, p, o, m)\n# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_I(s, p, o, m)\n# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_I(s, p, o, m)\n# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_I(s, p, o, m)\n# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_I(s, p, o, m)\n# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_I(s, p, o, m)\n# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_I(s, p, o, m)\n# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_I(s, p, o, m)\n# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_I(s, p, o, m)\n# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_I(s, p, o, m)\n# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_I(s, p, o, m)\n# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_I(s, p, o, m)\n# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_I(s, p, o, m)\n# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_I(s, p, o, m)\n# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_I(s, p, o, m)\n# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_I(s, p, o, m)\n# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_I(s, p, o, m)\n# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_I(s, p, o, m)\n# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_I(s, p, o, m)\n# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_I(s, p, o, m)\n# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_I(s, p, o, m)\n# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_I(s, p, o, m)\n# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_I(s, p, o, m)\n# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_I(s, p, o, m)\n# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_I(s, p, o, m)\n# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_I(s, p, o, m)\n# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_I(s, p, o, m)\n# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_I(s, p, o, m)\n# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_I(s, p, o, m)\n# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_I(s, p, o, m)\n# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_I(s, p, o, m)\n# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_I(s, p, o, m)\n# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_I(s, p, o, m)\n# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_I(s, p, o, m)\n# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_I(s, p, o, m)\n# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_I(s, p, o, m)\n# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_I(s, p, o, m)\n# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_I(s, p, o, m)\n# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_I(s, p, o, m)\n# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_I(s, p, o, m)\n# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_I(s, p, o, m)\n# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_I(s, p, o, m)\n# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_I(s, p, o, m)\n# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_I(s, p, o, m)\n# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_I(s, p, o, m)\n# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_I(s, p, o, m)\n# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_I(s, p, o, m)\n# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_I(s, p, o, m)\n# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_I(s, p, o, m)\n# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_I(s, p, o, m)\n# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_I(s, p, o, m)\n# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_I(s, p, o, m)\n# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_I(s, p, o, m)\n# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_I(s, p, o, m)\n# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_I(s, p, o, m)\n# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_I(s, p, o, m)\n# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_I(s, p, o, m)\n# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_I(s, p, o, m)\n# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_I(s, p, o, m)\n# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_I(s, p, o, m)\n# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_I(s, p, o, m)\n# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_I(s, p, o, m)\n# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_I(s, p, o, m)\n# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_I(s, p, o, m)\n# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_I(s, p, o, m)\n# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_I(s, p, o, m)\n# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_I(s, p, o, m)\n# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_I(s, p, o, m)\n# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_I(s, p, o, m)\n# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_I(s, p, o, m)\n# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_I(s, p, o, m)\n# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_I(s, p, o, m)\n# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_I(s, p, o, m)\n# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_I(s, p, o, m)\n# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_I(s, p, o, m)\n# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_I(s, p, o, m)\n# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_I(s, p, o, m)\n# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_I(s, p, o, m)\n# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_I(s, p, o, m)\n# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_I(s, p, o, m)\n# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_I(s, p, o, m)\n# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_I(s, p, o, m)\n# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_I(s, p, o, m)\n# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_I(s, p, o, m)\n# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_I(s, p, o, m)\n# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_I(s, p, o, m)\n# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_I(s, p, o, m)\n# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_I(s, p, o, m)\n# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_I(s, p, o, m)\n# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_I(s, p, o, m)\n# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_I(s, p, o, m)\n# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_I(s, p, o, m)\n# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_I(s, p, o, m)\n# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_I(s, p, o, m)\n# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_I(s, p, o, m)\n# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_I(s, p, o, m)\n# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_I(s, p, o, m)\n# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_I(s, p, o, m)\n# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_I(s, p, o, m)\n# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_I(s, p, o, m)\n# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_I(s, p, o, m)\n# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_I(s, p, o, m)\n# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_I(s, p, o, m)\n# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_I(s, p, o, m)\n# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_I(s, p, o, m)\n# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_I(s, p, o, m)\n# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_I(s, p, o, m)\n# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_I(s, p, o, m)\n# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_I(s, p, o, m)\n# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_I(s, p, o, m)\n# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_I(s, p, o, m)\n# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_I(s, p, o, m)\n# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_I(s, p, o, m)\n# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_I(s, p, o, m)\n# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_I(s, p, o, m)\n# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_I(s, p, o, m)\n# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_I(s, p, o, m)\n# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_I(s, p, o, m)\n# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_I(s, p, o, m)\n# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_I(s, p, o, m)\n# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_I(s, p, o, m)\n# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_I(s, p, o, m)\n# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_I(s, p, o, m)\n# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_I(s, p, o, m)\n# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_I(s, p, o, m)\n# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_I(s, p, o, m)\n# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_I(s, p, o, m)\n# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_I(s, p, o, m)\n# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_I(s, p, o, m)\n# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_I(s, p, o, m)\n# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_I(s, p, o, m)\n# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_I(s, p, o, m)\n# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_I(s, p, o, m)\n# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_I(s, p, o, m)\n# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_I(s, p, o, m)\n# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_I(s, p, o, m)\n# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_I(s, p, o, m)\n# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_I(s, p, o, m)\n# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_I(s, p, o, m)\n# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_I(s, p, o, m)\n# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_I(s, p, o, m)\n# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_I(s, p, o, m)\n# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_I(s, p, o, m)\n# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_I(s, p, o, m)\n# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_I(s, p, o, m)\n# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_I(s, p, o, m)\n# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_I(s, p, o, m)\n# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_I(s, p, o, m)\n# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_I(s, p, o, m)\n# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_I(s, p, o, m)\n# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_I(s, p, o, m)\n# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_I(s, p, o, m)\n# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_I(s, p, o, m)\n# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_I(s, p, o, m)\n# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_I(s, p, o, m)\n# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_I(s, p, o, m)\n# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_I(s, p, o, m)\n# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_I(s, p, o, m)\n# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_I(s, p, o, m)\n# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_I(s, p, o, m)\n# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_I(s, p, o, m)\n# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_I(s, p, o, m)\n# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_I(s, p, o, m)\n# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_I(s, p, o, m)\n# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_I(s, p, o, m)\n# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_I(s, p, o, m)\n# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_I(s, p, o, m)\n# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_I(s, p, o, m)\n# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_I(s, p, o, m)\n# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_I(s, p, o, m)\n# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_I(s, p, o, m)\n# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_I(s, p, o, m)\n# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_I(s, p, o, m)\n# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_I(s, p, o, m)\n#\n# define BOOST_PP_FOR_1_I(s, p, o, m) BOOST_PP_IF(p(2, s), m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IF(p(2, s), BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(o(2, s), p, o, m)\n# define BOOST_PP_FOR_2_I(s, p, o, m) BOOST_PP_IF(p(3, s), m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IF(p(3, s), BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(o(3, s), p, o, m)\n# define BOOST_PP_FOR_3_I(s, p, o, m) BOOST_PP_IF(p(4, s), m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IF(p(4, s), BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(o(4, s), p, o, m)\n# define BOOST_PP_FOR_4_I(s, p, o, m) BOOST_PP_IF(p(5, s), m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IF(p(5, s), BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(o(5, s), p, o, m)\n# define BOOST_PP_FOR_5_I(s, p, o, m) BOOST_PP_IF(p(6, s), m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IF(p(6, s), BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(o(6, s), p, o, m)\n# define BOOST_PP_FOR_6_I(s, p, o, m) BOOST_PP_IF(p(7, s), m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IF(p(7, s), BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(o(7, s), p, o, m)\n# define BOOST_PP_FOR_7_I(s, p, o, m) BOOST_PP_IF(p(8, s), m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IF(p(8, s), BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(o(8, s), p, o, m)\n# define BOOST_PP_FOR_8_I(s, p, o, m) BOOST_PP_IF(p(9, s), m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IF(p(9, s), BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(o(9, s), p, o, m)\n# define BOOST_PP_FOR_9_I(s, p, o, m) BOOST_PP_IF(p(10, s), m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IF(p(10, s), BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(o(10, s), p, o, m)\n# define BOOST_PP_FOR_10_I(s, p, o, m) BOOST_PP_IF(p(11, s), m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IF(p(11, s), BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(o(11, s), p, o, m)\n# define BOOST_PP_FOR_11_I(s, p, o, m) BOOST_PP_IF(p(12, s), m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IF(p(12, s), BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(o(12, s), p, o, m)\n# define BOOST_PP_FOR_12_I(s, p, o, m) BOOST_PP_IF(p(13, s), m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IF(p(13, s), BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(o(13, s), p, o, m)\n# define BOOST_PP_FOR_13_I(s, p, o, m) BOOST_PP_IF(p(14, s), m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IF(p(14, s), BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(o(14, s), p, o, m)\n# define BOOST_PP_FOR_14_I(s, p, o, m) BOOST_PP_IF(p(15, s), m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IF(p(15, s), BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(o(15, s), p, o, m)\n# define BOOST_PP_FOR_15_I(s, p, o, m) BOOST_PP_IF(p(16, s), m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IF(p(16, s), BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(o(16, s), p, o, m)\n# define BOOST_PP_FOR_16_I(s, p, o, m) BOOST_PP_IF(p(17, s), m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IF(p(17, s), BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(o(17, s), p, o, m)\n# define BOOST_PP_FOR_17_I(s, p, o, m) BOOST_PP_IF(p(18, s), m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IF(p(18, s), BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(o(18, s), p, o, m)\n# define BOOST_PP_FOR_18_I(s, p, o, m) BOOST_PP_IF(p(19, s), m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IF(p(19, s), BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(o(19, s), p, o, m)\n# define BOOST_PP_FOR_19_I(s, p, o, m) BOOST_PP_IF(p(20, s), m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IF(p(20, s), BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(o(20, s), p, o, m)\n# define BOOST_PP_FOR_20_I(s, p, o, m) BOOST_PP_IF(p(21, s), m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IF(p(21, s), BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(o(21, s), p, o, m)\n# define BOOST_PP_FOR_21_I(s, p, o, m) BOOST_PP_IF(p(22, s), m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IF(p(22, s), BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(o(22, s), p, o, m)\n# define BOOST_PP_FOR_22_I(s, p, o, m) BOOST_PP_IF(p(23, s), m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IF(p(23, s), BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(o(23, s), p, o, m)\n# define BOOST_PP_FOR_23_I(s, p, o, m) BOOST_PP_IF(p(24, s), m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IF(p(24, s), BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(o(24, s), p, o, m)\n# define BOOST_PP_FOR_24_I(s, p, o, m) BOOST_PP_IF(p(25, s), m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IF(p(25, s), BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(o(25, s), p, o, m)\n# define BOOST_PP_FOR_25_I(s, p, o, m) BOOST_PP_IF(p(26, s), m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IF(p(26, s), BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(o(26, s), p, o, m)\n# define BOOST_PP_FOR_26_I(s, p, o, m) BOOST_PP_IF(p(27, s), m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IF(p(27, s), BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(o(27, s), p, o, m)\n# define BOOST_PP_FOR_27_I(s, p, o, m) BOOST_PP_IF(p(28, s), m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IF(p(28, s), BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(o(28, s), p, o, m)\n# define BOOST_PP_FOR_28_I(s, p, o, m) BOOST_PP_IF(p(29, s), m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IF(p(29, s), BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(o(29, s), p, o, m)\n# define BOOST_PP_FOR_29_I(s, p, o, m) BOOST_PP_IF(p(30, s), m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IF(p(30, s), BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(o(30, s), p, o, m)\n# define BOOST_PP_FOR_30_I(s, p, o, m) BOOST_PP_IF(p(31, s), m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IF(p(31, s), BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(o(31, s), p, o, m)\n# define BOOST_PP_FOR_31_I(s, p, o, m) BOOST_PP_IF(p(32, s), m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IF(p(32, s), BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(o(32, s), p, o, m)\n# define BOOST_PP_FOR_32_I(s, p, o, m) BOOST_PP_IF(p(33, s), m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IF(p(33, s), BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(o(33, s), p, o, m)\n# define BOOST_PP_FOR_33_I(s, p, o, m) BOOST_PP_IF(p(34, s), m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IF(p(34, s), BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(o(34, s), p, o, m)\n# define BOOST_PP_FOR_34_I(s, p, o, m) BOOST_PP_IF(p(35, s), m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IF(p(35, s), BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(o(35, s), p, o, m)\n# define BOOST_PP_FOR_35_I(s, p, o, m) BOOST_PP_IF(p(36, s), m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IF(p(36, s), BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(o(36, s), p, o, m)\n# define BOOST_PP_FOR_36_I(s, p, o, m) BOOST_PP_IF(p(37, s), m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IF(p(37, s), BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(o(37, s), p, o, m)\n# define BOOST_PP_FOR_37_I(s, p, o, m) BOOST_PP_IF(p(38, s), m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IF(p(38, s), BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(o(38, s), p, o, m)\n# define BOOST_PP_FOR_38_I(s, p, o, m) BOOST_PP_IF(p(39, s), m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IF(p(39, s), BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(o(39, s), p, o, m)\n# define BOOST_PP_FOR_39_I(s, p, o, m) BOOST_PP_IF(p(40, s), m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IF(p(40, s), BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(o(40, s), p, o, m)\n# define BOOST_PP_FOR_40_I(s, p, o, m) BOOST_PP_IF(p(41, s), m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IF(p(41, s), BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(o(41, s), p, o, m)\n# define BOOST_PP_FOR_41_I(s, p, o, m) BOOST_PP_IF(p(42, s), m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IF(p(42, s), BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(o(42, s), p, o, m)\n# define BOOST_PP_FOR_42_I(s, p, o, m) BOOST_PP_IF(p(43, s), m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IF(p(43, s), BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(o(43, s), p, o, m)\n# define BOOST_PP_FOR_43_I(s, p, o, m) BOOST_PP_IF(p(44, s), m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IF(p(44, s), BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(o(44, s), p, o, m)\n# define BOOST_PP_FOR_44_I(s, p, o, m) BOOST_PP_IF(p(45, s), m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IF(p(45, s), BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(o(45, s), p, o, m)\n# define BOOST_PP_FOR_45_I(s, p, o, m) BOOST_PP_IF(p(46, s), m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IF(p(46, s), BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(o(46, s), p, o, m)\n# define BOOST_PP_FOR_46_I(s, p, o, m) BOOST_PP_IF(p(47, s), m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IF(p(47, s), BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(o(47, s), p, o, m)\n# define BOOST_PP_FOR_47_I(s, p, o, m) BOOST_PP_IF(p(48, s), m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IF(p(48, s), BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(o(48, s), p, o, m)\n# define BOOST_PP_FOR_48_I(s, p, o, m) BOOST_PP_IF(p(49, s), m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IF(p(49, s), BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(o(49, s), p, o, m)\n# define BOOST_PP_FOR_49_I(s, p, o, m) BOOST_PP_IF(p(50, s), m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IF(p(50, s), BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(o(50, s), p, o, m)\n# define BOOST_PP_FOR_50_I(s, p, o, m) BOOST_PP_IF(p(51, s), m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IF(p(51, s), BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(o(51, s), p, o, m)\n# define BOOST_PP_FOR_51_I(s, p, o, m) BOOST_PP_IF(p(52, s), m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IF(p(52, s), BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(o(52, s), p, o, m)\n# define BOOST_PP_FOR_52_I(s, p, o, m) BOOST_PP_IF(p(53, s), m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IF(p(53, s), BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(o(53, s), p, o, m)\n# define BOOST_PP_FOR_53_I(s, p, o, m) BOOST_PP_IF(p(54, s), m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IF(p(54, s), BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(o(54, s), p, o, m)\n# define BOOST_PP_FOR_54_I(s, p, o, m) BOOST_PP_IF(p(55, s), m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IF(p(55, s), BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(o(55, s), p, o, m)\n# define BOOST_PP_FOR_55_I(s, p, o, m) BOOST_PP_IF(p(56, s), m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IF(p(56, s), BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(o(56, s), p, o, m)\n# define BOOST_PP_FOR_56_I(s, p, o, m) BOOST_PP_IF(p(57, s), m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IF(p(57, s), BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(o(57, s), p, o, m)\n# define BOOST_PP_FOR_57_I(s, p, o, m) BOOST_PP_IF(p(58, s), m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IF(p(58, s), BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(o(58, s), p, o, m)\n# define BOOST_PP_FOR_58_I(s, p, o, m) BOOST_PP_IF(p(59, s), m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IF(p(59, s), BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(o(59, s), p, o, m)\n# define BOOST_PP_FOR_59_I(s, p, o, m) BOOST_PP_IF(p(60, s), m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IF(p(60, s), BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(o(60, s), p, o, m)\n# define BOOST_PP_FOR_60_I(s, p, o, m) BOOST_PP_IF(p(61, s), m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IF(p(61, s), BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(o(61, s), p, o, m)\n# define BOOST_PP_FOR_61_I(s, p, o, m) BOOST_PP_IF(p(62, s), m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IF(p(62, s), BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(o(62, s), p, o, m)\n# define BOOST_PP_FOR_62_I(s, p, o, m) BOOST_PP_IF(p(63, s), m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IF(p(63, s), BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(o(63, s), p, o, m)\n# define BOOST_PP_FOR_63_I(s, p, o, m) BOOST_PP_IF(p(64, s), m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IF(p(64, s), BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(o(64, s), p, o, m)\n# define BOOST_PP_FOR_64_I(s, p, o, m) BOOST_PP_IF(p(65, s), m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IF(p(65, s), BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(o(65, s), p, o, m)\n# define BOOST_PP_FOR_65_I(s, p, o, m) BOOST_PP_IF(p(66, s), m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IF(p(66, s), BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(o(66, s), p, o, m)\n# define BOOST_PP_FOR_66_I(s, p, o, m) BOOST_PP_IF(p(67, s), m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IF(p(67, s), BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(o(67, s), p, o, m)\n# define BOOST_PP_FOR_67_I(s, p, o, m) BOOST_PP_IF(p(68, s), m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IF(p(68, s), BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(o(68, s), p, o, m)\n# define BOOST_PP_FOR_68_I(s, p, o, m) BOOST_PP_IF(p(69, s), m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IF(p(69, s), BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(o(69, s), p, o, m)\n# define BOOST_PP_FOR_69_I(s, p, o, m) BOOST_PP_IF(p(70, s), m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IF(p(70, s), BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(o(70, s), p, o, m)\n# define BOOST_PP_FOR_70_I(s, p, o, m) BOOST_PP_IF(p(71, s), m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IF(p(71, s), BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(o(71, s), p, o, m)\n# define BOOST_PP_FOR_71_I(s, p, o, m) BOOST_PP_IF(p(72, s), m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IF(p(72, s), BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(o(72, s), p, o, m)\n# define BOOST_PP_FOR_72_I(s, p, o, m) BOOST_PP_IF(p(73, s), m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IF(p(73, s), BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(o(73, s), p, o, m)\n# define BOOST_PP_FOR_73_I(s, p, o, m) BOOST_PP_IF(p(74, s), m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IF(p(74, s), BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(o(74, s), p, o, m)\n# define BOOST_PP_FOR_74_I(s, p, o, m) BOOST_PP_IF(p(75, s), m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IF(p(75, s), BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(o(75, s), p, o, m)\n# define BOOST_PP_FOR_75_I(s, p, o, m) BOOST_PP_IF(p(76, s), m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IF(p(76, s), BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(o(76, s), p, o, m)\n# define BOOST_PP_FOR_76_I(s, p, o, m) BOOST_PP_IF(p(77, s), m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IF(p(77, s), BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(o(77, s), p, o, m)\n# define BOOST_PP_FOR_77_I(s, p, o, m) BOOST_PP_IF(p(78, s), m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IF(p(78, s), BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(o(78, s), p, o, m)\n# define BOOST_PP_FOR_78_I(s, p, o, m) BOOST_PP_IF(p(79, s), m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IF(p(79, s), BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(o(79, s), p, o, m)\n# define BOOST_PP_FOR_79_I(s, p, o, m) BOOST_PP_IF(p(80, s), m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IF(p(80, s), BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(o(80, s), p, o, m)\n# define BOOST_PP_FOR_80_I(s, p, o, m) BOOST_PP_IF(p(81, s), m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IF(p(81, s), BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(o(81, s), p, o, m)\n# define BOOST_PP_FOR_81_I(s, p, o, m) BOOST_PP_IF(p(82, s), m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IF(p(82, s), BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(o(82, s), p, o, m)\n# define BOOST_PP_FOR_82_I(s, p, o, m) BOOST_PP_IF(p(83, s), m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IF(p(83, s), BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(o(83, s), p, o, m)\n# define BOOST_PP_FOR_83_I(s, p, o, m) BOOST_PP_IF(p(84, s), m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IF(p(84, s), BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(o(84, s), p, o, m)\n# define BOOST_PP_FOR_84_I(s, p, o, m) BOOST_PP_IF(p(85, s), m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IF(p(85, s), BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(o(85, s), p, o, m)\n# define BOOST_PP_FOR_85_I(s, p, o, m) BOOST_PP_IF(p(86, s), m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IF(p(86, s), BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(o(86, s), p, o, m)\n# define BOOST_PP_FOR_86_I(s, p, o, m) BOOST_PP_IF(p(87, s), m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IF(p(87, s), BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(o(87, s), p, o, m)\n# define BOOST_PP_FOR_87_I(s, p, o, m) BOOST_PP_IF(p(88, s), m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IF(p(88, s), BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(o(88, s), p, o, m)\n# define BOOST_PP_FOR_88_I(s, p, o, m) BOOST_PP_IF(p(89, s), m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IF(p(89, s), BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(o(89, s), p, o, m)\n# define BOOST_PP_FOR_89_I(s, p, o, m) BOOST_PP_IF(p(90, s), m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IF(p(90, s), BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(o(90, s), p, o, m)\n# define BOOST_PP_FOR_90_I(s, p, o, m) BOOST_PP_IF(p(91, s), m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IF(p(91, s), BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(o(91, s), p, o, m)\n# define BOOST_PP_FOR_91_I(s, p, o, m) BOOST_PP_IF(p(92, s), m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IF(p(92, s), BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(o(92, s), p, o, m)\n# define BOOST_PP_FOR_92_I(s, p, o, m) BOOST_PP_IF(p(93, s), m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IF(p(93, s), BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(o(93, s), p, o, m)\n# define BOOST_PP_FOR_93_I(s, p, o, m) BOOST_PP_IF(p(94, s), m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IF(p(94, s), BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(o(94, s), p, o, m)\n# define BOOST_PP_FOR_94_I(s, p, o, m) BOOST_PP_IF(p(95, s), m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IF(p(95, s), BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(o(95, s), p, o, m)\n# define BOOST_PP_FOR_95_I(s, p, o, m) BOOST_PP_IF(p(96, s), m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IF(p(96, s), BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(o(96, s), p, o, m)\n# define BOOST_PP_FOR_96_I(s, p, o, m) BOOST_PP_IF(p(97, s), m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IF(p(97, s), BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(o(97, s), p, o, m)\n# define BOOST_PP_FOR_97_I(s, p, o, m) BOOST_PP_IF(p(98, s), m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IF(p(98, s), BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(o(98, s), p, o, m)\n# define BOOST_PP_FOR_98_I(s, p, o, m) BOOST_PP_IF(p(99, s), m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IF(p(99, s), BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(o(99, s), p, o, m)\n# define BOOST_PP_FOR_99_I(s, p, o, m) BOOST_PP_IF(p(100, s), m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IF(p(100, s), BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(o(100, s), p, o, m)\n# define BOOST_PP_FOR_100_I(s, p, o, m) BOOST_PP_IF(p(101, s), m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IF(p(101, s), BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(o(101, s), p, o, m)\n# define BOOST_PP_FOR_101_I(s, p, o, m) BOOST_PP_IF(p(102, s), m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IF(p(102, s), BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(o(102, s), p, o, m)\n# define BOOST_PP_FOR_102_I(s, p, o, m) BOOST_PP_IF(p(103, s), m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IF(p(103, s), BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(o(103, s), p, o, m)\n# define BOOST_PP_FOR_103_I(s, p, o, m) BOOST_PP_IF(p(104, s), m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IF(p(104, s), BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(o(104, s), p, o, m)\n# define BOOST_PP_FOR_104_I(s, p, o, m) BOOST_PP_IF(p(105, s), m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IF(p(105, s), BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(o(105, s), p, o, m)\n# define BOOST_PP_FOR_105_I(s, p, o, m) BOOST_PP_IF(p(106, s), m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IF(p(106, s), BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(o(106, s), p, o, m)\n# define BOOST_PP_FOR_106_I(s, p, o, m) BOOST_PP_IF(p(107, s), m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IF(p(107, s), BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(o(107, s), p, o, m)\n# define BOOST_PP_FOR_107_I(s, p, o, m) BOOST_PP_IF(p(108, s), m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IF(p(108, s), BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(o(108, s), p, o, m)\n# define BOOST_PP_FOR_108_I(s, p, o, m) BOOST_PP_IF(p(109, s), m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IF(p(109, s), BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(o(109, s), p, o, m)\n# define BOOST_PP_FOR_109_I(s, p, o, m) BOOST_PP_IF(p(110, s), m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IF(p(110, s), BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(o(110, s), p, o, m)\n# define BOOST_PP_FOR_110_I(s, p, o, m) BOOST_PP_IF(p(111, s), m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IF(p(111, s), BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(o(111, s), p, o, m)\n# define BOOST_PP_FOR_111_I(s, p, o, m) BOOST_PP_IF(p(112, s), m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IF(p(112, s), BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(o(112, s), p, o, m)\n# define BOOST_PP_FOR_112_I(s, p, o, m) BOOST_PP_IF(p(113, s), m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IF(p(113, s), BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(o(113, s), p, o, m)\n# define BOOST_PP_FOR_113_I(s, p, o, m) BOOST_PP_IF(p(114, s), m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IF(p(114, s), BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(o(114, s), p, o, m)\n# define BOOST_PP_FOR_114_I(s, p, o, m) BOOST_PP_IF(p(115, s), m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IF(p(115, s), BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(o(115, s), p, o, m)\n# define BOOST_PP_FOR_115_I(s, p, o, m) BOOST_PP_IF(p(116, s), m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IF(p(116, s), BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(o(116, s), p, o, m)\n# define BOOST_PP_FOR_116_I(s, p, o, m) BOOST_PP_IF(p(117, s), m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IF(p(117, s), BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(o(117, s), p, o, m)\n# define BOOST_PP_FOR_117_I(s, p, o, m) BOOST_PP_IF(p(118, s), m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IF(p(118, s), BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(o(118, s), p, o, m)\n# define BOOST_PP_FOR_118_I(s, p, o, m) BOOST_PP_IF(p(119, s), m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IF(p(119, s), BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(o(119, s), p, o, m)\n# define BOOST_PP_FOR_119_I(s, p, o, m) BOOST_PP_IF(p(120, s), m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IF(p(120, s), BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(o(120, s), p, o, m)\n# define BOOST_PP_FOR_120_I(s, p, o, m) BOOST_PP_IF(p(121, s), m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IF(p(121, s), BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(o(121, s), p, o, m)\n# define BOOST_PP_FOR_121_I(s, p, o, m) BOOST_PP_IF(p(122, s), m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IF(p(122, s), BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(o(122, s), p, o, m)\n# define BOOST_PP_FOR_122_I(s, p, o, m) BOOST_PP_IF(p(123, s), m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IF(p(123, s), BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(o(123, s), p, o, m)\n# define BOOST_PP_FOR_123_I(s, p, o, m) BOOST_PP_IF(p(124, s), m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IF(p(124, s), BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(o(124, s), p, o, m)\n# define BOOST_PP_FOR_124_I(s, p, o, m) BOOST_PP_IF(p(125, s), m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IF(p(125, s), BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(o(125, s), p, o, m)\n# define BOOST_PP_FOR_125_I(s, p, o, m) BOOST_PP_IF(p(126, s), m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IF(p(126, s), BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(o(126, s), p, o, m)\n# define BOOST_PP_FOR_126_I(s, p, o, m) BOOST_PP_IF(p(127, s), m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IF(p(127, s), BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(o(127, s), p, o, m)\n# define BOOST_PP_FOR_127_I(s, p, o, m) BOOST_PP_IF(p(128, s), m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IF(p(128, s), BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(o(128, s), p, o, m)\n# define BOOST_PP_FOR_128_I(s, p, o, m) BOOST_PP_IF(p(129, s), m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IF(p(129, s), BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(o(129, s), p, o, m)\n# define BOOST_PP_FOR_129_I(s, p, o, m) BOOST_PP_IF(p(130, s), m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IF(p(130, s), BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(o(130, s), p, o, m)\n# define BOOST_PP_FOR_130_I(s, p, o, m) BOOST_PP_IF(p(131, s), m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IF(p(131, s), BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(o(131, s), p, o, m)\n# define BOOST_PP_FOR_131_I(s, p, o, m) BOOST_PP_IF(p(132, s), m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IF(p(132, s), BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(o(132, s), p, o, m)\n# define BOOST_PP_FOR_132_I(s, p, o, m) BOOST_PP_IF(p(133, s), m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IF(p(133, s), BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(o(133, s), p, o, m)\n# define BOOST_PP_FOR_133_I(s, p, o, m) BOOST_PP_IF(p(134, s), m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IF(p(134, s), BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(o(134, s), p, o, m)\n# define BOOST_PP_FOR_134_I(s, p, o, m) BOOST_PP_IF(p(135, s), m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IF(p(135, s), BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(o(135, s), p, o, m)\n# define BOOST_PP_FOR_135_I(s, p, o, m) BOOST_PP_IF(p(136, s), m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IF(p(136, s), BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(o(136, s), p, o, m)\n# define BOOST_PP_FOR_136_I(s, p, o, m) BOOST_PP_IF(p(137, s), m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IF(p(137, s), BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(o(137, s), p, o, m)\n# define BOOST_PP_FOR_137_I(s, p, o, m) BOOST_PP_IF(p(138, s), m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IF(p(138, s), BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(o(138, s), p, o, m)\n# define BOOST_PP_FOR_138_I(s, p, o, m) BOOST_PP_IF(p(139, s), m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IF(p(139, s), BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(o(139, s), p, o, m)\n# define BOOST_PP_FOR_139_I(s, p, o, m) BOOST_PP_IF(p(140, s), m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IF(p(140, s), BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(o(140, s), p, o, m)\n# define BOOST_PP_FOR_140_I(s, p, o, m) BOOST_PP_IF(p(141, s), m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IF(p(141, s), BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(o(141, s), p, o, m)\n# define BOOST_PP_FOR_141_I(s, p, o, m) BOOST_PP_IF(p(142, s), m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IF(p(142, s), BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(o(142, s), p, o, m)\n# define BOOST_PP_FOR_142_I(s, p, o, m) BOOST_PP_IF(p(143, s), m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IF(p(143, s), BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(o(143, s), p, o, m)\n# define BOOST_PP_FOR_143_I(s, p, o, m) BOOST_PP_IF(p(144, s), m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IF(p(144, s), BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(o(144, s), p, o, m)\n# define BOOST_PP_FOR_144_I(s, p, o, m) BOOST_PP_IF(p(145, s), m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IF(p(145, s), BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(o(145, s), p, o, m)\n# define BOOST_PP_FOR_145_I(s, p, o, m) BOOST_PP_IF(p(146, s), m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IF(p(146, s), BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(o(146, s), p, o, m)\n# define BOOST_PP_FOR_146_I(s, p, o, m) BOOST_PP_IF(p(147, s), m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IF(p(147, s), BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(o(147, s), p, o, m)\n# define BOOST_PP_FOR_147_I(s, p, o, m) BOOST_PP_IF(p(148, s), m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IF(p(148, s), BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(o(148, s), p, o, m)\n# define BOOST_PP_FOR_148_I(s, p, o, m) BOOST_PP_IF(p(149, s), m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IF(p(149, s), BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(o(149, s), p, o, m)\n# define BOOST_PP_FOR_149_I(s, p, o, m) BOOST_PP_IF(p(150, s), m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IF(p(150, s), BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(o(150, s), p, o, m)\n# define BOOST_PP_FOR_150_I(s, p, o, m) BOOST_PP_IF(p(151, s), m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IF(p(151, s), BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(o(151, s), p, o, m)\n# define BOOST_PP_FOR_151_I(s, p, o, m) BOOST_PP_IF(p(152, s), m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IF(p(152, s), BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(o(152, s), p, o, m)\n# define BOOST_PP_FOR_152_I(s, p, o, m) BOOST_PP_IF(p(153, s), m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IF(p(153, s), BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(o(153, s), p, o, m)\n# define BOOST_PP_FOR_153_I(s, p, o, m) BOOST_PP_IF(p(154, s), m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IF(p(154, s), BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(o(154, s), p, o, m)\n# define BOOST_PP_FOR_154_I(s, p, o, m) BOOST_PP_IF(p(155, s), m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IF(p(155, s), BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(o(155, s), p, o, m)\n# define BOOST_PP_FOR_155_I(s, p, o, m) BOOST_PP_IF(p(156, s), m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IF(p(156, s), BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(o(156, s), p, o, m)\n# define BOOST_PP_FOR_156_I(s, p, o, m) BOOST_PP_IF(p(157, s), m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IF(p(157, s), BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(o(157, s), p, o, m)\n# define BOOST_PP_FOR_157_I(s, p, o, m) BOOST_PP_IF(p(158, s), m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IF(p(158, s), BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(o(158, s), p, o, m)\n# define BOOST_PP_FOR_158_I(s, p, o, m) BOOST_PP_IF(p(159, s), m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IF(p(159, s), BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(o(159, s), p, o, m)\n# define BOOST_PP_FOR_159_I(s, p, o, m) BOOST_PP_IF(p(160, s), m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IF(p(160, s), BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(o(160, s), p, o, m)\n# define BOOST_PP_FOR_160_I(s, p, o, m) BOOST_PP_IF(p(161, s), m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IF(p(161, s), BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(o(161, s), p, o, m)\n# define BOOST_PP_FOR_161_I(s, p, o, m) BOOST_PP_IF(p(162, s), m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IF(p(162, s), BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(o(162, s), p, o, m)\n# define BOOST_PP_FOR_162_I(s, p, o, m) BOOST_PP_IF(p(163, s), m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IF(p(163, s), BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(o(163, s), p, o, m)\n# define BOOST_PP_FOR_163_I(s, p, o, m) BOOST_PP_IF(p(164, s), m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IF(p(164, s), BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(o(164, s), p, o, m)\n# define BOOST_PP_FOR_164_I(s, p, o, m) BOOST_PP_IF(p(165, s), m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IF(p(165, s), BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(o(165, s), p, o, m)\n# define BOOST_PP_FOR_165_I(s, p, o, m) BOOST_PP_IF(p(166, s), m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IF(p(166, s), BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(o(166, s), p, o, m)\n# define BOOST_PP_FOR_166_I(s, p, o, m) BOOST_PP_IF(p(167, s), m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IF(p(167, s), BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(o(167, s), p, o, m)\n# define BOOST_PP_FOR_167_I(s, p, o, m) BOOST_PP_IF(p(168, s), m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IF(p(168, s), BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(o(168, s), p, o, m)\n# define BOOST_PP_FOR_168_I(s, p, o, m) BOOST_PP_IF(p(169, s), m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IF(p(169, s), BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(o(169, s), p, o, m)\n# define BOOST_PP_FOR_169_I(s, p, o, m) BOOST_PP_IF(p(170, s), m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IF(p(170, s), BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(o(170, s), p, o, m)\n# define BOOST_PP_FOR_170_I(s, p, o, m) BOOST_PP_IF(p(171, s), m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IF(p(171, s), BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(o(171, s), p, o, m)\n# define BOOST_PP_FOR_171_I(s, p, o, m) BOOST_PP_IF(p(172, s), m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IF(p(172, s), BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(o(172, s), p, o, m)\n# define BOOST_PP_FOR_172_I(s, p, o, m) BOOST_PP_IF(p(173, s), m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IF(p(173, s), BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(o(173, s), p, o, m)\n# define BOOST_PP_FOR_173_I(s, p, o, m) BOOST_PP_IF(p(174, s), m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IF(p(174, s), BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(o(174, s), p, o, m)\n# define BOOST_PP_FOR_174_I(s, p, o, m) BOOST_PP_IF(p(175, s), m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IF(p(175, s), BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(o(175, s), p, o, m)\n# define BOOST_PP_FOR_175_I(s, p, o, m) BOOST_PP_IF(p(176, s), m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IF(p(176, s), BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(o(176, s), p, o, m)\n# define BOOST_PP_FOR_176_I(s, p, o, m) BOOST_PP_IF(p(177, s), m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IF(p(177, s), BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(o(177, s), p, o, m)\n# define BOOST_PP_FOR_177_I(s, p, o, m) BOOST_PP_IF(p(178, s), m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IF(p(178, s), BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(o(178, s), p, o, m)\n# define BOOST_PP_FOR_178_I(s, p, o, m) BOOST_PP_IF(p(179, s), m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IF(p(179, s), BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(o(179, s), p, o, m)\n# define BOOST_PP_FOR_179_I(s, p, o, m) BOOST_PP_IF(p(180, s), m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IF(p(180, s), BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(o(180, s), p, o, m)\n# define BOOST_PP_FOR_180_I(s, p, o, m) BOOST_PP_IF(p(181, s), m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IF(p(181, s), BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(o(181, s), p, o, m)\n# define BOOST_PP_FOR_181_I(s, p, o, m) BOOST_PP_IF(p(182, s), m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IF(p(182, s), BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(o(182, s), p, o, m)\n# define BOOST_PP_FOR_182_I(s, p, o, m) BOOST_PP_IF(p(183, s), m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IF(p(183, s), BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(o(183, s), p, o, m)\n# define BOOST_PP_FOR_183_I(s, p, o, m) BOOST_PP_IF(p(184, s), m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IF(p(184, s), BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(o(184, s), p, o, m)\n# define BOOST_PP_FOR_184_I(s, p, o, m) BOOST_PP_IF(p(185, s), m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IF(p(185, s), BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(o(185, s), p, o, m)\n# define BOOST_PP_FOR_185_I(s, p, o, m) BOOST_PP_IF(p(186, s), m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IF(p(186, s), BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(o(186, s), p, o, m)\n# define BOOST_PP_FOR_186_I(s, p, o, m) BOOST_PP_IF(p(187, s), m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IF(p(187, s), BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(o(187, s), p, o, m)\n# define BOOST_PP_FOR_187_I(s, p, o, m) BOOST_PP_IF(p(188, s), m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IF(p(188, s), BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(o(188, s), p, o, m)\n# define BOOST_PP_FOR_188_I(s, p, o, m) BOOST_PP_IF(p(189, s), m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IF(p(189, s), BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(o(189, s), p, o, m)\n# define BOOST_PP_FOR_189_I(s, p, o, m) BOOST_PP_IF(p(190, s), m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IF(p(190, s), BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(o(190, s), p, o, m)\n# define BOOST_PP_FOR_190_I(s, p, o, m) BOOST_PP_IF(p(191, s), m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IF(p(191, s), BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(o(191, s), p, o, m)\n# define BOOST_PP_FOR_191_I(s, p, o, m) BOOST_PP_IF(p(192, s), m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IF(p(192, s), BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(o(192, s), p, o, m)\n# define BOOST_PP_FOR_192_I(s, p, o, m) BOOST_PP_IF(p(193, s), m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IF(p(193, s), BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(o(193, s), p, o, m)\n# define BOOST_PP_FOR_193_I(s, p, o, m) BOOST_PP_IF(p(194, s), m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IF(p(194, s), BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(o(194, s), p, o, m)\n# define BOOST_PP_FOR_194_I(s, p, o, m) BOOST_PP_IF(p(195, s), m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IF(p(195, s), BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(o(195, s), p, o, m)\n# define BOOST_PP_FOR_195_I(s, p, o, m) BOOST_PP_IF(p(196, s), m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IF(p(196, s), BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(o(196, s), p, o, m)\n# define BOOST_PP_FOR_196_I(s, p, o, m) BOOST_PP_IF(p(197, s), m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IF(p(197, s), BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(o(197, s), p, o, m)\n# define BOOST_PP_FOR_197_I(s, p, o, m) BOOST_PP_IF(p(198, s), m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IF(p(198, s), BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(o(198, s), p, o, m)\n# define BOOST_PP_FOR_198_I(s, p, o, m) BOOST_PP_IF(p(199, s), m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IF(p(199, s), BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(o(199, s), p, o, m)\n# define BOOST_PP_FOR_199_I(s, p, o, m) BOOST_PP_IF(p(200, s), m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IF(p(200, s), BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(o(200, s), p, o, m)\n# define BOOST_PP_FOR_200_I(s, p, o, m) BOOST_PP_IF(p(201, s), m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IF(p(201, s), BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(o(201, s), p, o, m)\n# define BOOST_PP_FOR_201_I(s, p, o, m) BOOST_PP_IF(p(202, s), m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IF(p(202, s), BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(o(202, s), p, o, m)\n# define BOOST_PP_FOR_202_I(s, p, o, m) BOOST_PP_IF(p(203, s), m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IF(p(203, s), BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(o(203, s), p, o, m)\n# define BOOST_PP_FOR_203_I(s, p, o, m) BOOST_PP_IF(p(204, s), m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IF(p(204, s), BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(o(204, s), p, o, m)\n# define BOOST_PP_FOR_204_I(s, p, o, m) BOOST_PP_IF(p(205, s), m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IF(p(205, s), BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(o(205, s), p, o, m)\n# define BOOST_PP_FOR_205_I(s, p, o, m) BOOST_PP_IF(p(206, s), m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IF(p(206, s), BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(o(206, s), p, o, m)\n# define BOOST_PP_FOR_206_I(s, p, o, m) BOOST_PP_IF(p(207, s), m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IF(p(207, s), BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(o(207, s), p, o, m)\n# define BOOST_PP_FOR_207_I(s, p, o, m) BOOST_PP_IF(p(208, s), m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IF(p(208, s), BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(o(208, s), p, o, m)\n# define BOOST_PP_FOR_208_I(s, p, o, m) BOOST_PP_IF(p(209, s), m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IF(p(209, s), BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(o(209, s), p, o, m)\n# define BOOST_PP_FOR_209_I(s, p, o, m) BOOST_PP_IF(p(210, s), m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IF(p(210, s), BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(o(210, s), p, o, m)\n# define BOOST_PP_FOR_210_I(s, p, o, m) BOOST_PP_IF(p(211, s), m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IF(p(211, s), BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(o(211, s), p, o, m)\n# define BOOST_PP_FOR_211_I(s, p, o, m) BOOST_PP_IF(p(212, s), m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IF(p(212, s), BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(o(212, s), p, o, m)\n# define BOOST_PP_FOR_212_I(s, p, o, m) BOOST_PP_IF(p(213, s), m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IF(p(213, s), BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(o(213, s), p, o, m)\n# define BOOST_PP_FOR_213_I(s, p, o, m) BOOST_PP_IF(p(214, s), m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IF(p(214, s), BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(o(214, s), p, o, m)\n# define BOOST_PP_FOR_214_I(s, p, o, m) BOOST_PP_IF(p(215, s), m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IF(p(215, s), BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(o(215, s), p, o, m)\n# define BOOST_PP_FOR_215_I(s, p, o, m) BOOST_PP_IF(p(216, s), m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IF(p(216, s), BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(o(216, s), p, o, m)\n# define BOOST_PP_FOR_216_I(s, p, o, m) BOOST_PP_IF(p(217, s), m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IF(p(217, s), BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(o(217, s), p, o, m)\n# define BOOST_PP_FOR_217_I(s, p, o, m) BOOST_PP_IF(p(218, s), m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IF(p(218, s), BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(o(218, s), p, o, m)\n# define BOOST_PP_FOR_218_I(s, p, o, m) BOOST_PP_IF(p(219, s), m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IF(p(219, s), BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(o(219, s), p, o, m)\n# define BOOST_PP_FOR_219_I(s, p, o, m) BOOST_PP_IF(p(220, s), m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IF(p(220, s), BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(o(220, s), p, o, m)\n# define BOOST_PP_FOR_220_I(s, p, o, m) BOOST_PP_IF(p(221, s), m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IF(p(221, s), BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(o(221, s), p, o, m)\n# define BOOST_PP_FOR_221_I(s, p, o, m) BOOST_PP_IF(p(222, s), m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IF(p(222, s), BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(o(222, s), p, o, m)\n# define BOOST_PP_FOR_222_I(s, p, o, m) BOOST_PP_IF(p(223, s), m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IF(p(223, s), BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(o(223, s), p, o, m)\n# define BOOST_PP_FOR_223_I(s, p, o, m) BOOST_PP_IF(p(224, s), m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IF(p(224, s), BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(o(224, s), p, o, m)\n# define BOOST_PP_FOR_224_I(s, p, o, m) BOOST_PP_IF(p(225, s), m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IF(p(225, s), BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(o(225, s), p, o, m)\n# define BOOST_PP_FOR_225_I(s, p, o, m) BOOST_PP_IF(p(226, s), m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IF(p(226, s), BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(o(226, s), p, o, m)\n# define BOOST_PP_FOR_226_I(s, p, o, m) BOOST_PP_IF(p(227, s), m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IF(p(227, s), BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(o(227, s), p, o, m)\n# define BOOST_PP_FOR_227_I(s, p, o, m) BOOST_PP_IF(p(228, s), m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IF(p(228, s), BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(o(228, s), p, o, m)\n# define BOOST_PP_FOR_228_I(s, p, o, m) BOOST_PP_IF(p(229, s), m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IF(p(229, s), BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(o(229, s), p, o, m)\n# define BOOST_PP_FOR_229_I(s, p, o, m) BOOST_PP_IF(p(230, s), m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IF(p(230, s), BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(o(230, s), p, o, m)\n# define BOOST_PP_FOR_230_I(s, p, o, m) BOOST_PP_IF(p(231, s), m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IF(p(231, s), BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(o(231, s), p, o, m)\n# define BOOST_PP_FOR_231_I(s, p, o, m) BOOST_PP_IF(p(232, s), m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IF(p(232, s), BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(o(232, s), p, o, m)\n# define BOOST_PP_FOR_232_I(s, p, o, m) BOOST_PP_IF(p(233, s), m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IF(p(233, s), BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(o(233, s), p, o, m)\n# define BOOST_PP_FOR_233_I(s, p, o, m) BOOST_PP_IF(p(234, s), m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IF(p(234, s), BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(o(234, s), p, o, m)\n# define BOOST_PP_FOR_234_I(s, p, o, m) BOOST_PP_IF(p(235, s), m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IF(p(235, s), BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(o(235, s), p, o, m)\n# define BOOST_PP_FOR_235_I(s, p, o, m) BOOST_PP_IF(p(236, s), m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IF(p(236, s), BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(o(236, s), p, o, m)\n# define BOOST_PP_FOR_236_I(s, p, o, m) BOOST_PP_IF(p(237, s), m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IF(p(237, s), BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(o(237, s), p, o, m)\n# define BOOST_PP_FOR_237_I(s, p, o, m) BOOST_PP_IF(p(238, s), m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IF(p(238, s), BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(o(238, s), p, o, m)\n# define BOOST_PP_FOR_238_I(s, p, o, m) BOOST_PP_IF(p(239, s), m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IF(p(239, s), BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(o(239, s), p, o, m)\n# define BOOST_PP_FOR_239_I(s, p, o, m) BOOST_PP_IF(p(240, s), m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IF(p(240, s), BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(o(240, s), p, o, m)\n# define BOOST_PP_FOR_240_I(s, p, o, m) BOOST_PP_IF(p(241, s), m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IF(p(241, s), BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(o(241, s), p, o, m)\n# define BOOST_PP_FOR_241_I(s, p, o, m) BOOST_PP_IF(p(242, s), m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IF(p(242, s), BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(o(242, s), p, o, m)\n# define BOOST_PP_FOR_242_I(s, p, o, m) BOOST_PP_IF(p(243, s), m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IF(p(243, s), BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(o(243, s), p, o, m)\n# define BOOST_PP_FOR_243_I(s, p, o, m) BOOST_PP_IF(p(244, s), m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IF(p(244, s), BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(o(244, s), p, o, m)\n# define BOOST_PP_FOR_244_I(s, p, o, m) BOOST_PP_IF(p(245, s), m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IF(p(245, s), BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(o(245, s), p, o, m)\n# define BOOST_PP_FOR_245_I(s, p, o, m) BOOST_PP_IF(p(246, s), m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IF(p(246, s), BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(o(246, s), p, o, m)\n# define BOOST_PP_FOR_246_I(s, p, o, m) BOOST_PP_IF(p(247, s), m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IF(p(247, s), BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(o(247, s), p, o, m)\n# define BOOST_PP_FOR_247_I(s, p, o, m) BOOST_PP_IF(p(248, s), m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IF(p(248, s), BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(o(248, s), p, o, m)\n# define BOOST_PP_FOR_248_I(s, p, o, m) BOOST_PP_IF(p(249, s), m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IF(p(249, s), BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(o(249, s), p, o, m)\n# define BOOST_PP_FOR_249_I(s, p, o, m) BOOST_PP_IF(p(250, s), m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IF(p(250, s), BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(o(250, s), p, o, m)\n# define BOOST_PP_FOR_250_I(s, p, o, m) BOOST_PP_IF(p(251, s), m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IF(p(251, s), BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(o(251, s), p, o, m)\n# define BOOST_PP_FOR_251_I(s, p, o, m) BOOST_PP_IF(p(252, s), m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IF(p(252, s), BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(o(252, s), p, o, m)\n# define BOOST_PP_FOR_252_I(s, p, o, m) BOOST_PP_IF(p(253, s), m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IF(p(253, s), BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(o(253, s), p, o, m)\n# define BOOST_PP_FOR_253_I(s, p, o, m) BOOST_PP_IF(p(254, s), m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IF(p(254, s), BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(o(254, s), p, o, m)\n# define BOOST_PP_FOR_254_I(s, p, o, m) BOOST_PP_IF(p(255, s), m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IF(p(255, s), BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(o(255, s), p, o, m)\n# define BOOST_PP_FOR_255_I(s, p, o, m) BOOST_PP_IF(p(256, s), m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IF(p(256, s), BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(o(256, s), p, o, m)\n# define BOOST_PP_FOR_256_I(s, p, o, m) BOOST_PP_IF(p(257, s), m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IF(p(257, s), BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(o(257, s), p, o, m)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/detail/for.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP\n# define BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP\n#\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_C(BOOST_PP_BOOL(p(2, s)), s, p, o, m)\n# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_C(BOOST_PP_BOOL(p(3, s)), s, p, o, m)\n# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_C(BOOST_PP_BOOL(p(4, s)), s, p, o, m)\n# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_C(BOOST_PP_BOOL(p(5, s)), s, p, o, m)\n# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_C(BOOST_PP_BOOL(p(6, s)), s, p, o, m)\n# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_C(BOOST_PP_BOOL(p(7, s)), s, p, o, m)\n# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_C(BOOST_PP_BOOL(p(8, s)), s, p, o, m)\n# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_C(BOOST_PP_BOOL(p(9, s)), s, p, o, m)\n# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_C(BOOST_PP_BOOL(p(10, s)), s, p, o, m)\n# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_C(BOOST_PP_BOOL(p(11, s)), s, p, o, m)\n# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_C(BOOST_PP_BOOL(p(12, s)), s, p, o, m)\n# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_C(BOOST_PP_BOOL(p(13, s)), s, p, o, m)\n# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_C(BOOST_PP_BOOL(p(14, s)), s, p, o, m)\n# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_C(BOOST_PP_BOOL(p(15, s)), s, p, o, m)\n# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_C(BOOST_PP_BOOL(p(16, s)), s, p, o, m)\n# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_C(BOOST_PP_BOOL(p(17, s)), s, p, o, m)\n# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_C(BOOST_PP_BOOL(p(18, s)), s, p, o, m)\n# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_C(BOOST_PP_BOOL(p(19, s)), s, p, o, m)\n# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_C(BOOST_PP_BOOL(p(20, s)), s, p, o, m)\n# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_C(BOOST_PP_BOOL(p(21, s)), s, p, o, m)\n# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_C(BOOST_PP_BOOL(p(22, s)), s, p, o, m)\n# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_C(BOOST_PP_BOOL(p(23, s)), s, p, o, m)\n# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_C(BOOST_PP_BOOL(p(24, s)), s, p, o, m)\n# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_C(BOOST_PP_BOOL(p(25, s)), s, p, o, m)\n# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_C(BOOST_PP_BOOL(p(26, s)), s, p, o, m)\n# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_C(BOOST_PP_BOOL(p(27, s)), s, p, o, m)\n# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_C(BOOST_PP_BOOL(p(28, s)), s, p, o, m)\n# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_C(BOOST_PP_BOOL(p(29, s)), s, p, o, m)\n# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_C(BOOST_PP_BOOL(p(30, s)), s, p, o, m)\n# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_C(BOOST_PP_BOOL(p(31, s)), s, p, o, m)\n# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_C(BOOST_PP_BOOL(p(32, s)), s, p, o, m)\n# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_C(BOOST_PP_BOOL(p(33, s)), s, p, o, m)\n# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_C(BOOST_PP_BOOL(p(34, s)), s, p, o, m)\n# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_C(BOOST_PP_BOOL(p(35, s)), s, p, o, m)\n# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_C(BOOST_PP_BOOL(p(36, s)), s, p, o, m)\n# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_C(BOOST_PP_BOOL(p(37, s)), s, p, o, m)\n# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_C(BOOST_PP_BOOL(p(38, s)), s, p, o, m)\n# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_C(BOOST_PP_BOOL(p(39, s)), s, p, o, m)\n# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_C(BOOST_PP_BOOL(p(40, s)), s, p, o, m)\n# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_C(BOOST_PP_BOOL(p(41, s)), s, p, o, m)\n# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_C(BOOST_PP_BOOL(p(42, s)), s, p, o, m)\n# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_C(BOOST_PP_BOOL(p(43, s)), s, p, o, m)\n# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_C(BOOST_PP_BOOL(p(44, s)), s, p, o, m)\n# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_C(BOOST_PP_BOOL(p(45, s)), s, p, o, m)\n# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_C(BOOST_PP_BOOL(p(46, s)), s, p, o, m)\n# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_C(BOOST_PP_BOOL(p(47, s)), s, p, o, m)\n# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_C(BOOST_PP_BOOL(p(48, s)), s, p, o, m)\n# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_C(BOOST_PP_BOOL(p(49, s)), s, p, o, m)\n# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_C(BOOST_PP_BOOL(p(50, s)), s, p, o, m)\n# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_C(BOOST_PP_BOOL(p(51, s)), s, p, o, m)\n# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_C(BOOST_PP_BOOL(p(52, s)), s, p, o, m)\n# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_C(BOOST_PP_BOOL(p(53, s)), s, p, o, m)\n# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_C(BOOST_PP_BOOL(p(54, s)), s, p, o, m)\n# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_C(BOOST_PP_BOOL(p(55, s)), s, p, o, m)\n# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_C(BOOST_PP_BOOL(p(56, s)), s, p, o, m)\n# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_C(BOOST_PP_BOOL(p(57, s)), s, p, o, m)\n# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_C(BOOST_PP_BOOL(p(58, s)), s, p, o, m)\n# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_C(BOOST_PP_BOOL(p(59, s)), s, p, o, m)\n# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_C(BOOST_PP_BOOL(p(60, s)), s, p, o, m)\n# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_C(BOOST_PP_BOOL(p(61, s)), s, p, o, m)\n# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_C(BOOST_PP_BOOL(p(62, s)), s, p, o, m)\n# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_C(BOOST_PP_BOOL(p(63, s)), s, p, o, m)\n# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_C(BOOST_PP_BOOL(p(64, s)), s, p, o, m)\n# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_C(BOOST_PP_BOOL(p(65, s)), s, p, o, m)\n# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_C(BOOST_PP_BOOL(p(66, s)), s, p, o, m)\n# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_C(BOOST_PP_BOOL(p(67, s)), s, p, o, m)\n# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_C(BOOST_PP_BOOL(p(68, s)), s, p, o, m)\n# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_C(BOOST_PP_BOOL(p(69, s)), s, p, o, m)\n# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_C(BOOST_PP_BOOL(p(70, s)), s, p, o, m)\n# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_C(BOOST_PP_BOOL(p(71, s)), s, p, o, m)\n# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_C(BOOST_PP_BOOL(p(72, s)), s, p, o, m)\n# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_C(BOOST_PP_BOOL(p(73, s)), s, p, o, m)\n# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_C(BOOST_PP_BOOL(p(74, s)), s, p, o, m)\n# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_C(BOOST_PP_BOOL(p(75, s)), s, p, o, m)\n# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_C(BOOST_PP_BOOL(p(76, s)), s, p, o, m)\n# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_C(BOOST_PP_BOOL(p(77, s)), s, p, o, m)\n# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_C(BOOST_PP_BOOL(p(78, s)), s, p, o, m)\n# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_C(BOOST_PP_BOOL(p(79, s)), s, p, o, m)\n# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_C(BOOST_PP_BOOL(p(80, s)), s, p, o, m)\n# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_C(BOOST_PP_BOOL(p(81, s)), s, p, o, m)\n# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_C(BOOST_PP_BOOL(p(82, s)), s, p, o, m)\n# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_C(BOOST_PP_BOOL(p(83, s)), s, p, o, m)\n# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_C(BOOST_PP_BOOL(p(84, s)), s, p, o, m)\n# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_C(BOOST_PP_BOOL(p(85, s)), s, p, o, m)\n# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_C(BOOST_PP_BOOL(p(86, s)), s, p, o, m)\n# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_C(BOOST_PP_BOOL(p(87, s)), s, p, o, m)\n# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_C(BOOST_PP_BOOL(p(88, s)), s, p, o, m)\n# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_C(BOOST_PP_BOOL(p(89, s)), s, p, o, m)\n# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_C(BOOST_PP_BOOL(p(90, s)), s, p, o, m)\n# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_C(BOOST_PP_BOOL(p(91, s)), s, p, o, m)\n# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_C(BOOST_PP_BOOL(p(92, s)), s, p, o, m)\n# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_C(BOOST_PP_BOOL(p(93, s)), s, p, o, m)\n# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_C(BOOST_PP_BOOL(p(94, s)), s, p, o, m)\n# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_C(BOOST_PP_BOOL(p(95, s)), s, p, o, m)\n# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_C(BOOST_PP_BOOL(p(96, s)), s, p, o, m)\n# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_C(BOOST_PP_BOOL(p(97, s)), s, p, o, m)\n# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_C(BOOST_PP_BOOL(p(98, s)), s, p, o, m)\n# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_C(BOOST_PP_BOOL(p(99, s)), s, p, o, m)\n# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_C(BOOST_PP_BOOL(p(100, s)), s, p, o, m)\n# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_C(BOOST_PP_BOOL(p(101, s)), s, p, o, m)\n# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_C(BOOST_PP_BOOL(p(102, s)), s, p, o, m)\n# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_C(BOOST_PP_BOOL(p(103, s)), s, p, o, m)\n# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_C(BOOST_PP_BOOL(p(104, s)), s, p, o, m)\n# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_C(BOOST_PP_BOOL(p(105, s)), s, p, o, m)\n# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_C(BOOST_PP_BOOL(p(106, s)), s, p, o, m)\n# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_C(BOOST_PP_BOOL(p(107, s)), s, p, o, m)\n# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_C(BOOST_PP_BOOL(p(108, s)), s, p, o, m)\n# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_C(BOOST_PP_BOOL(p(109, s)), s, p, o, m)\n# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_C(BOOST_PP_BOOL(p(110, s)), s, p, o, m)\n# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_C(BOOST_PP_BOOL(p(111, s)), s, p, o, m)\n# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_C(BOOST_PP_BOOL(p(112, s)), s, p, o, m)\n# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_C(BOOST_PP_BOOL(p(113, s)), s, p, o, m)\n# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_C(BOOST_PP_BOOL(p(114, s)), s, p, o, m)\n# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_C(BOOST_PP_BOOL(p(115, s)), s, p, o, m)\n# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_C(BOOST_PP_BOOL(p(116, s)), s, p, o, m)\n# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_C(BOOST_PP_BOOL(p(117, s)), s, p, o, m)\n# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_C(BOOST_PP_BOOL(p(118, s)), s, p, o, m)\n# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_C(BOOST_PP_BOOL(p(119, s)), s, p, o, m)\n# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_C(BOOST_PP_BOOL(p(120, s)), s, p, o, m)\n# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_C(BOOST_PP_BOOL(p(121, s)), s, p, o, m)\n# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_C(BOOST_PP_BOOL(p(122, s)), s, p, o, m)\n# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_C(BOOST_PP_BOOL(p(123, s)), s, p, o, m)\n# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_C(BOOST_PP_BOOL(p(124, s)), s, p, o, m)\n# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_C(BOOST_PP_BOOL(p(125, s)), s, p, o, m)\n# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_C(BOOST_PP_BOOL(p(126, s)), s, p, o, m)\n# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_C(BOOST_PP_BOOL(p(127, s)), s, p, o, m)\n# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_C(BOOST_PP_BOOL(p(128, s)), s, p, o, m)\n# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_C(BOOST_PP_BOOL(p(129, s)), s, p, o, m)\n# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_C(BOOST_PP_BOOL(p(130, s)), s, p, o, m)\n# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_C(BOOST_PP_BOOL(p(131, s)), s, p, o, m)\n# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_C(BOOST_PP_BOOL(p(132, s)), s, p, o, m)\n# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_C(BOOST_PP_BOOL(p(133, s)), s, p, o, m)\n# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_C(BOOST_PP_BOOL(p(134, s)), s, p, o, m)\n# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_C(BOOST_PP_BOOL(p(135, s)), s, p, o, m)\n# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_C(BOOST_PP_BOOL(p(136, s)), s, p, o, m)\n# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_C(BOOST_PP_BOOL(p(137, s)), s, p, o, m)\n# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_C(BOOST_PP_BOOL(p(138, s)), s, p, o, m)\n# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_C(BOOST_PP_BOOL(p(139, s)), s, p, o, m)\n# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_C(BOOST_PP_BOOL(p(140, s)), s, p, o, m)\n# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_C(BOOST_PP_BOOL(p(141, s)), s, p, o, m)\n# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_C(BOOST_PP_BOOL(p(142, s)), s, p, o, m)\n# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_C(BOOST_PP_BOOL(p(143, s)), s, p, o, m)\n# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_C(BOOST_PP_BOOL(p(144, s)), s, p, o, m)\n# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_C(BOOST_PP_BOOL(p(145, s)), s, p, o, m)\n# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_C(BOOST_PP_BOOL(p(146, s)), s, p, o, m)\n# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_C(BOOST_PP_BOOL(p(147, s)), s, p, o, m)\n# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_C(BOOST_PP_BOOL(p(148, s)), s, p, o, m)\n# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_C(BOOST_PP_BOOL(p(149, s)), s, p, o, m)\n# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_C(BOOST_PP_BOOL(p(150, s)), s, p, o, m)\n# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_C(BOOST_PP_BOOL(p(151, s)), s, p, o, m)\n# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_C(BOOST_PP_BOOL(p(152, s)), s, p, o, m)\n# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_C(BOOST_PP_BOOL(p(153, s)), s, p, o, m)\n# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_C(BOOST_PP_BOOL(p(154, s)), s, p, o, m)\n# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_C(BOOST_PP_BOOL(p(155, s)), s, p, o, m)\n# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_C(BOOST_PP_BOOL(p(156, s)), s, p, o, m)\n# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_C(BOOST_PP_BOOL(p(157, s)), s, p, o, m)\n# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_C(BOOST_PP_BOOL(p(158, s)), s, p, o, m)\n# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_C(BOOST_PP_BOOL(p(159, s)), s, p, o, m)\n# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_C(BOOST_PP_BOOL(p(160, s)), s, p, o, m)\n# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_C(BOOST_PP_BOOL(p(161, s)), s, p, o, m)\n# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_C(BOOST_PP_BOOL(p(162, s)), s, p, o, m)\n# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_C(BOOST_PP_BOOL(p(163, s)), s, p, o, m)\n# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_C(BOOST_PP_BOOL(p(164, s)), s, p, o, m)\n# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_C(BOOST_PP_BOOL(p(165, s)), s, p, o, m)\n# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_C(BOOST_PP_BOOL(p(166, s)), s, p, o, m)\n# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_C(BOOST_PP_BOOL(p(167, s)), s, p, o, m)\n# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_C(BOOST_PP_BOOL(p(168, s)), s, p, o, m)\n# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_C(BOOST_PP_BOOL(p(169, s)), s, p, o, m)\n# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_C(BOOST_PP_BOOL(p(170, s)), s, p, o, m)\n# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_C(BOOST_PP_BOOL(p(171, s)), s, p, o, m)\n# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_C(BOOST_PP_BOOL(p(172, s)), s, p, o, m)\n# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_C(BOOST_PP_BOOL(p(173, s)), s, p, o, m)\n# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_C(BOOST_PP_BOOL(p(174, s)), s, p, o, m)\n# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_C(BOOST_PP_BOOL(p(175, s)), s, p, o, m)\n# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_C(BOOST_PP_BOOL(p(176, s)), s, p, o, m)\n# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_C(BOOST_PP_BOOL(p(177, s)), s, p, o, m)\n# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_C(BOOST_PP_BOOL(p(178, s)), s, p, o, m)\n# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_C(BOOST_PP_BOOL(p(179, s)), s, p, o, m)\n# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_C(BOOST_PP_BOOL(p(180, s)), s, p, o, m)\n# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_C(BOOST_PP_BOOL(p(181, s)), s, p, o, m)\n# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_C(BOOST_PP_BOOL(p(182, s)), s, p, o, m)\n# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_C(BOOST_PP_BOOL(p(183, s)), s, p, o, m)\n# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_C(BOOST_PP_BOOL(p(184, s)), s, p, o, m)\n# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_C(BOOST_PP_BOOL(p(185, s)), s, p, o, m)\n# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_C(BOOST_PP_BOOL(p(186, s)), s, p, o, m)\n# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_C(BOOST_PP_BOOL(p(187, s)), s, p, o, m)\n# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_C(BOOST_PP_BOOL(p(188, s)), s, p, o, m)\n# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_C(BOOST_PP_BOOL(p(189, s)), s, p, o, m)\n# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_C(BOOST_PP_BOOL(p(190, s)), s, p, o, m)\n# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_C(BOOST_PP_BOOL(p(191, s)), s, p, o, m)\n# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_C(BOOST_PP_BOOL(p(192, s)), s, p, o, m)\n# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_C(BOOST_PP_BOOL(p(193, s)), s, p, o, m)\n# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_C(BOOST_PP_BOOL(p(194, s)), s, p, o, m)\n# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_C(BOOST_PP_BOOL(p(195, s)), s, p, o, m)\n# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_C(BOOST_PP_BOOL(p(196, s)), s, p, o, m)\n# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_C(BOOST_PP_BOOL(p(197, s)), s, p, o, m)\n# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_C(BOOST_PP_BOOL(p(198, s)), s, p, o, m)\n# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_C(BOOST_PP_BOOL(p(199, s)), s, p, o, m)\n# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_C(BOOST_PP_BOOL(p(200, s)), s, p, o, m)\n# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_C(BOOST_PP_BOOL(p(201, s)), s, p, o, m)\n# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_C(BOOST_PP_BOOL(p(202, s)), s, p, o, m)\n# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_C(BOOST_PP_BOOL(p(203, s)), s, p, o, m)\n# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_C(BOOST_PP_BOOL(p(204, s)), s, p, o, m)\n# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_C(BOOST_PP_BOOL(p(205, s)), s, p, o, m)\n# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_C(BOOST_PP_BOOL(p(206, s)), s, p, o, m)\n# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_C(BOOST_PP_BOOL(p(207, s)), s, p, o, m)\n# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_C(BOOST_PP_BOOL(p(208, s)), s, p, o, m)\n# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_C(BOOST_PP_BOOL(p(209, s)), s, p, o, m)\n# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_C(BOOST_PP_BOOL(p(210, s)), s, p, o, m)\n# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_C(BOOST_PP_BOOL(p(211, s)), s, p, o, m)\n# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_C(BOOST_PP_BOOL(p(212, s)), s, p, o, m)\n# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_C(BOOST_PP_BOOL(p(213, s)), s, p, o, m)\n# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_C(BOOST_PP_BOOL(p(214, s)), s, p, o, m)\n# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_C(BOOST_PP_BOOL(p(215, s)), s, p, o, m)\n# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_C(BOOST_PP_BOOL(p(216, s)), s, p, o, m)\n# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_C(BOOST_PP_BOOL(p(217, s)), s, p, o, m)\n# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_C(BOOST_PP_BOOL(p(218, s)), s, p, o, m)\n# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_C(BOOST_PP_BOOL(p(219, s)), s, p, o, m)\n# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_C(BOOST_PP_BOOL(p(220, s)), s, p, o, m)\n# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_C(BOOST_PP_BOOL(p(221, s)), s, p, o, m)\n# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_C(BOOST_PP_BOOL(p(222, s)), s, p, o, m)\n# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_C(BOOST_PP_BOOL(p(223, s)), s, p, o, m)\n# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_C(BOOST_PP_BOOL(p(224, s)), s, p, o, m)\n# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_C(BOOST_PP_BOOL(p(225, s)), s, p, o, m)\n# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_C(BOOST_PP_BOOL(p(226, s)), s, p, o, m)\n# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_C(BOOST_PP_BOOL(p(227, s)), s, p, o, m)\n# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_C(BOOST_PP_BOOL(p(228, s)), s, p, o, m)\n# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_C(BOOST_PP_BOOL(p(229, s)), s, p, o, m)\n# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_C(BOOST_PP_BOOL(p(230, s)), s, p, o, m)\n# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_C(BOOST_PP_BOOL(p(231, s)), s, p, o, m)\n# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_C(BOOST_PP_BOOL(p(232, s)), s, p, o, m)\n# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_C(BOOST_PP_BOOL(p(233, s)), s, p, o, m)\n# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_C(BOOST_PP_BOOL(p(234, s)), s, p, o, m)\n# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_C(BOOST_PP_BOOL(p(235, s)), s, p, o, m)\n# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_C(BOOST_PP_BOOL(p(236, s)), s, p, o, m)\n# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_C(BOOST_PP_BOOL(p(237, s)), s, p, o, m)\n# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_C(BOOST_PP_BOOL(p(238, s)), s, p, o, m)\n# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_C(BOOST_PP_BOOL(p(239, s)), s, p, o, m)\n# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_C(BOOST_PP_BOOL(p(240, s)), s, p, o, m)\n# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_C(BOOST_PP_BOOL(p(241, s)), s, p, o, m)\n# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_C(BOOST_PP_BOOL(p(242, s)), s, p, o, m)\n# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_C(BOOST_PP_BOOL(p(243, s)), s, p, o, m)\n# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_C(BOOST_PP_BOOL(p(244, s)), s, p, o, m)\n# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_C(BOOST_PP_BOOL(p(245, s)), s, p, o, m)\n# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_C(BOOST_PP_BOOL(p(246, s)), s, p, o, m)\n# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_C(BOOST_PP_BOOL(p(247, s)), s, p, o, m)\n# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_C(BOOST_PP_BOOL(p(248, s)), s, p, o, m)\n# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_C(BOOST_PP_BOOL(p(249, s)), s, p, o, m)\n# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_C(BOOST_PP_BOOL(p(250, s)), s, p, o, m)\n# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_C(BOOST_PP_BOOL(p(251, s)), s, p, o, m)\n# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_C(BOOST_PP_BOOL(p(252, s)), s, p, o, m)\n# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_C(BOOST_PP_BOOL(p(253, s)), s, p, o, m)\n# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_C(BOOST_PP_BOOL(p(254, s)), s, p, o, m)\n# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_C(BOOST_PP_BOOL(p(255, s)), s, p, o, m)\n# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_C(BOOST_PP_BOOL(p(256, s)), s, p, o, m)\n# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_C(BOOST_PP_BOOL(p(257, s)), s, p, o, m)\n#\n# define BOOST_PP_FOR_1_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IIF(c, BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(2, s), p, o, m)\n# define BOOST_PP_FOR_2_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IIF(c, BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(3, s), p, o, m)\n# define BOOST_PP_FOR_3_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IIF(c, BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(4, s), p, o, m)\n# define BOOST_PP_FOR_4_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IIF(c, BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(5, s), p, o, m)\n# define BOOST_PP_FOR_5_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IIF(c, BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(6, s), p, o, m)\n# define BOOST_PP_FOR_6_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IIF(c, BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(7, s), p, o, m)\n# define BOOST_PP_FOR_7_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IIF(c, BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(8, s), p, o, m)\n# define BOOST_PP_FOR_8_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IIF(c, BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(9, s), p, o, m)\n# define BOOST_PP_FOR_9_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IIF(c, BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(10, s), p, o, m)\n# define BOOST_PP_FOR_10_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IIF(c, BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(11, s), p, o, m)\n# define BOOST_PP_FOR_11_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IIF(c, BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(12, s), p, o, m)\n# define BOOST_PP_FOR_12_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IIF(c, BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(13, s), p, o, m)\n# define BOOST_PP_FOR_13_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IIF(c, BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(14, s), p, o, m)\n# define BOOST_PP_FOR_14_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IIF(c, BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(15, s), p, o, m)\n# define BOOST_PP_FOR_15_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IIF(c, BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(16, s), p, o, m)\n# define BOOST_PP_FOR_16_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IIF(c, BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(17, s), p, o, m)\n# define BOOST_PP_FOR_17_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IIF(c, BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(18, s), p, o, m)\n# define BOOST_PP_FOR_18_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IIF(c, BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(19, s), p, o, m)\n# define BOOST_PP_FOR_19_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IIF(c, BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(20, s), p, o, m)\n# define BOOST_PP_FOR_20_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IIF(c, BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(21, s), p, o, m)\n# define BOOST_PP_FOR_21_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IIF(c, BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(22, s), p, o, m)\n# define BOOST_PP_FOR_22_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IIF(c, BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(23, s), p, o, m)\n# define BOOST_PP_FOR_23_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IIF(c, BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(24, s), p, o, m)\n# define BOOST_PP_FOR_24_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IIF(c, BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(25, s), p, o, m)\n# define BOOST_PP_FOR_25_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IIF(c, BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(26, s), p, o, m)\n# define BOOST_PP_FOR_26_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IIF(c, BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(27, s), p, o, m)\n# define BOOST_PP_FOR_27_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IIF(c, BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(28, s), p, o, m)\n# define BOOST_PP_FOR_28_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IIF(c, BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(29, s), p, o, m)\n# define BOOST_PP_FOR_29_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IIF(c, BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(30, s), p, o, m)\n# define BOOST_PP_FOR_30_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IIF(c, BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(31, s), p, o, m)\n# define BOOST_PP_FOR_31_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IIF(c, BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(32, s), p, o, m)\n# define BOOST_PP_FOR_32_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IIF(c, BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(33, s), p, o, m)\n# define BOOST_PP_FOR_33_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IIF(c, BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(34, s), p, o, m)\n# define BOOST_PP_FOR_34_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IIF(c, BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(35, s), p, o, m)\n# define BOOST_PP_FOR_35_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IIF(c, BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(36, s), p, o, m)\n# define BOOST_PP_FOR_36_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IIF(c, BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(37, s), p, o, m)\n# define BOOST_PP_FOR_37_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IIF(c, BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(38, s), p, o, m)\n# define BOOST_PP_FOR_38_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IIF(c, BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(39, s), p, o, m)\n# define BOOST_PP_FOR_39_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IIF(c, BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(40, s), p, o, m)\n# define BOOST_PP_FOR_40_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IIF(c, BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(41, s), p, o, m)\n# define BOOST_PP_FOR_41_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IIF(c, BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(42, s), p, o, m)\n# define BOOST_PP_FOR_42_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IIF(c, BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(43, s), p, o, m)\n# define BOOST_PP_FOR_43_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IIF(c, BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(44, s), p, o, m)\n# define BOOST_PP_FOR_44_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IIF(c, BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(45, s), p, o, m)\n# define BOOST_PP_FOR_45_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IIF(c, BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(46, s), p, o, m)\n# define BOOST_PP_FOR_46_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IIF(c, BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(47, s), p, o, m)\n# define BOOST_PP_FOR_47_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IIF(c, BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(48, s), p, o, m)\n# define BOOST_PP_FOR_48_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IIF(c, BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(49, s), p, o, m)\n# define BOOST_PP_FOR_49_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IIF(c, BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(50, s), p, o, m)\n# define BOOST_PP_FOR_50_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IIF(c, BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(51, s), p, o, m)\n# define BOOST_PP_FOR_51_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IIF(c, BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(52, s), p, o, m)\n# define BOOST_PP_FOR_52_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IIF(c, BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(53, s), p, o, m)\n# define BOOST_PP_FOR_53_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IIF(c, BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(54, s), p, o, m)\n# define BOOST_PP_FOR_54_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IIF(c, BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(55, s), p, o, m)\n# define BOOST_PP_FOR_55_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IIF(c, BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(56, s), p, o, m)\n# define BOOST_PP_FOR_56_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IIF(c, BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(57, s), p, o, m)\n# define BOOST_PP_FOR_57_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IIF(c, BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(58, s), p, o, m)\n# define BOOST_PP_FOR_58_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IIF(c, BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(59, s), p, o, m)\n# define BOOST_PP_FOR_59_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IIF(c, BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(60, s), p, o, m)\n# define BOOST_PP_FOR_60_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IIF(c, BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(61, s), p, o, m)\n# define BOOST_PP_FOR_61_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IIF(c, BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(62, s), p, o, m)\n# define BOOST_PP_FOR_62_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IIF(c, BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(63, s), p, o, m)\n# define BOOST_PP_FOR_63_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IIF(c, BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(64, s), p, o, m)\n# define BOOST_PP_FOR_64_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IIF(c, BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(65, s), p, o, m)\n# define BOOST_PP_FOR_65_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IIF(c, BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(66, s), p, o, m)\n# define BOOST_PP_FOR_66_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IIF(c, BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(67, s), p, o, m)\n# define BOOST_PP_FOR_67_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IIF(c, BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(68, s), p, o, m)\n# define BOOST_PP_FOR_68_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IIF(c, BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(69, s), p, o, m)\n# define BOOST_PP_FOR_69_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IIF(c, BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(70, s), p, o, m)\n# define BOOST_PP_FOR_70_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IIF(c, BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(71, s), p, o, m)\n# define BOOST_PP_FOR_71_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IIF(c, BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(72, s), p, o, m)\n# define BOOST_PP_FOR_72_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IIF(c, BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(73, s), p, o, m)\n# define BOOST_PP_FOR_73_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IIF(c, BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(74, s), p, o, m)\n# define BOOST_PP_FOR_74_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IIF(c, BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(75, s), p, o, m)\n# define BOOST_PP_FOR_75_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IIF(c, BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(76, s), p, o, m)\n# define BOOST_PP_FOR_76_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IIF(c, BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(77, s), p, o, m)\n# define BOOST_PP_FOR_77_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IIF(c, BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(78, s), p, o, m)\n# define BOOST_PP_FOR_78_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IIF(c, BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(79, s), p, o, m)\n# define BOOST_PP_FOR_79_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IIF(c, BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(80, s), p, o, m)\n# define BOOST_PP_FOR_80_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IIF(c, BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(81, s), p, o, m)\n# define BOOST_PP_FOR_81_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IIF(c, BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(82, s), p, o, m)\n# define BOOST_PP_FOR_82_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IIF(c, BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(83, s), p, o, m)\n# define BOOST_PP_FOR_83_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IIF(c, BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(84, s), p, o, m)\n# define BOOST_PP_FOR_84_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IIF(c, BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(85, s), p, o, m)\n# define BOOST_PP_FOR_85_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IIF(c, BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(86, s), p, o, m)\n# define BOOST_PP_FOR_86_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IIF(c, BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(87, s), p, o, m)\n# define BOOST_PP_FOR_87_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IIF(c, BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(88, s), p, o, m)\n# define BOOST_PP_FOR_88_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IIF(c, BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(89, s), p, o, m)\n# define BOOST_PP_FOR_89_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IIF(c, BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(90, s), p, o, m)\n# define BOOST_PP_FOR_90_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IIF(c, BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(91, s), p, o, m)\n# define BOOST_PP_FOR_91_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IIF(c, BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(92, s), p, o, m)\n# define BOOST_PP_FOR_92_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IIF(c, BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(93, s), p, o, m)\n# define BOOST_PP_FOR_93_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IIF(c, BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(94, s), p, o, m)\n# define BOOST_PP_FOR_94_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IIF(c, BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(95, s), p, o, m)\n# define BOOST_PP_FOR_95_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IIF(c, BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(96, s), p, o, m)\n# define BOOST_PP_FOR_96_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IIF(c, BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(97, s), p, o, m)\n# define BOOST_PP_FOR_97_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IIF(c, BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(98, s), p, o, m)\n# define BOOST_PP_FOR_98_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IIF(c, BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(99, s), p, o, m)\n# define BOOST_PP_FOR_99_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IIF(c, BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(100, s), p, o, m)\n# define BOOST_PP_FOR_100_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IIF(c, BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(101, s), p, o, m)\n# define BOOST_PP_FOR_101_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IIF(c, BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(102, s), p, o, m)\n# define BOOST_PP_FOR_102_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IIF(c, BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(103, s), p, o, m)\n# define BOOST_PP_FOR_103_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IIF(c, BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(104, s), p, o, m)\n# define BOOST_PP_FOR_104_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IIF(c, BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(105, s), p, o, m)\n# define BOOST_PP_FOR_105_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IIF(c, BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(106, s), p, o, m)\n# define BOOST_PP_FOR_106_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IIF(c, BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(107, s), p, o, m)\n# define BOOST_PP_FOR_107_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IIF(c, BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(108, s), p, o, m)\n# define BOOST_PP_FOR_108_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IIF(c, BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(109, s), p, o, m)\n# define BOOST_PP_FOR_109_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IIF(c, BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(110, s), p, o, m)\n# define BOOST_PP_FOR_110_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IIF(c, BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(111, s), p, o, m)\n# define BOOST_PP_FOR_111_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IIF(c, BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(112, s), p, o, m)\n# define BOOST_PP_FOR_112_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IIF(c, BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(113, s), p, o, m)\n# define BOOST_PP_FOR_113_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IIF(c, BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(114, s), p, o, m)\n# define BOOST_PP_FOR_114_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IIF(c, BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(115, s), p, o, m)\n# define BOOST_PP_FOR_115_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IIF(c, BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(116, s), p, o, m)\n# define BOOST_PP_FOR_116_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IIF(c, BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(117, s), p, o, m)\n# define BOOST_PP_FOR_117_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IIF(c, BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(118, s), p, o, m)\n# define BOOST_PP_FOR_118_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IIF(c, BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(119, s), p, o, m)\n# define BOOST_PP_FOR_119_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IIF(c, BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(120, s), p, o, m)\n# define BOOST_PP_FOR_120_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IIF(c, BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(121, s), p, o, m)\n# define BOOST_PP_FOR_121_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IIF(c, BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(122, s), p, o, m)\n# define BOOST_PP_FOR_122_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IIF(c, BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(123, s), p, o, m)\n# define BOOST_PP_FOR_123_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IIF(c, BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(124, s), p, o, m)\n# define BOOST_PP_FOR_124_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IIF(c, BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(125, s), p, o, m)\n# define BOOST_PP_FOR_125_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IIF(c, BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(126, s), p, o, m)\n# define BOOST_PP_FOR_126_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IIF(c, BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(127, s), p, o, m)\n# define BOOST_PP_FOR_127_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IIF(c, BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(128, s), p, o, m)\n# define BOOST_PP_FOR_128_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IIF(c, BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(129, s), p, o, m)\n# define BOOST_PP_FOR_129_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IIF(c, BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(130, s), p, o, m)\n# define BOOST_PP_FOR_130_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IIF(c, BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(131, s), p, o, m)\n# define BOOST_PP_FOR_131_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IIF(c, BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(132, s), p, o, m)\n# define BOOST_PP_FOR_132_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IIF(c, BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(133, s), p, o, m)\n# define BOOST_PP_FOR_133_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IIF(c, BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(134, s), p, o, m)\n# define BOOST_PP_FOR_134_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IIF(c, BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(135, s), p, o, m)\n# define BOOST_PP_FOR_135_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IIF(c, BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(136, s), p, o, m)\n# define BOOST_PP_FOR_136_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IIF(c, BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(137, s), p, o, m)\n# define BOOST_PP_FOR_137_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IIF(c, BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(138, s), p, o, m)\n# define BOOST_PP_FOR_138_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IIF(c, BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(139, s), p, o, m)\n# define BOOST_PP_FOR_139_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IIF(c, BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(140, s), p, o, m)\n# define BOOST_PP_FOR_140_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IIF(c, BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(141, s), p, o, m)\n# define BOOST_PP_FOR_141_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IIF(c, BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(142, s), p, o, m)\n# define BOOST_PP_FOR_142_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IIF(c, BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(143, s), p, o, m)\n# define BOOST_PP_FOR_143_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IIF(c, BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(144, s), p, o, m)\n# define BOOST_PP_FOR_144_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IIF(c, BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(145, s), p, o, m)\n# define BOOST_PP_FOR_145_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IIF(c, BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(146, s), p, o, m)\n# define BOOST_PP_FOR_146_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IIF(c, BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(147, s), p, o, m)\n# define BOOST_PP_FOR_147_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IIF(c, BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(148, s), p, o, m)\n# define BOOST_PP_FOR_148_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IIF(c, BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(149, s), p, o, m)\n# define BOOST_PP_FOR_149_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IIF(c, BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(150, s), p, o, m)\n# define BOOST_PP_FOR_150_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IIF(c, BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(151, s), p, o, m)\n# define BOOST_PP_FOR_151_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IIF(c, BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(152, s), p, o, m)\n# define BOOST_PP_FOR_152_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IIF(c, BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(153, s), p, o, m)\n# define BOOST_PP_FOR_153_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IIF(c, BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(154, s), p, o, m)\n# define BOOST_PP_FOR_154_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IIF(c, BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(155, s), p, o, m)\n# define BOOST_PP_FOR_155_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IIF(c, BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(156, s), p, o, m)\n# define BOOST_PP_FOR_156_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IIF(c, BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(157, s), p, o, m)\n# define BOOST_PP_FOR_157_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IIF(c, BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(158, s), p, o, m)\n# define BOOST_PP_FOR_158_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IIF(c, BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(159, s), p, o, m)\n# define BOOST_PP_FOR_159_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IIF(c, BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(160, s), p, o, m)\n# define BOOST_PP_FOR_160_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IIF(c, BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(161, s), p, o, m)\n# define BOOST_PP_FOR_161_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IIF(c, BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(162, s), p, o, m)\n# define BOOST_PP_FOR_162_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IIF(c, BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(163, s), p, o, m)\n# define BOOST_PP_FOR_163_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IIF(c, BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(164, s), p, o, m)\n# define BOOST_PP_FOR_164_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IIF(c, BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(165, s), p, o, m)\n# define BOOST_PP_FOR_165_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IIF(c, BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(166, s), p, o, m)\n# define BOOST_PP_FOR_166_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IIF(c, BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(167, s), p, o, m)\n# define BOOST_PP_FOR_167_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IIF(c, BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(168, s), p, o, m)\n# define BOOST_PP_FOR_168_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IIF(c, BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(169, s), p, o, m)\n# define BOOST_PP_FOR_169_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IIF(c, BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(170, s), p, o, m)\n# define BOOST_PP_FOR_170_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IIF(c, BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(171, s), p, o, m)\n# define BOOST_PP_FOR_171_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IIF(c, BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(172, s), p, o, m)\n# define BOOST_PP_FOR_172_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IIF(c, BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(173, s), p, o, m)\n# define BOOST_PP_FOR_173_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IIF(c, BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(174, s), p, o, m)\n# define BOOST_PP_FOR_174_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IIF(c, BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(175, s), p, o, m)\n# define BOOST_PP_FOR_175_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IIF(c, BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(176, s), p, o, m)\n# define BOOST_PP_FOR_176_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IIF(c, BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(177, s), p, o, m)\n# define BOOST_PP_FOR_177_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IIF(c, BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(178, s), p, o, m)\n# define BOOST_PP_FOR_178_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IIF(c, BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(179, s), p, o, m)\n# define BOOST_PP_FOR_179_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IIF(c, BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(180, s), p, o, m)\n# define BOOST_PP_FOR_180_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IIF(c, BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(181, s), p, o, m)\n# define BOOST_PP_FOR_181_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IIF(c, BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(182, s), p, o, m)\n# define BOOST_PP_FOR_182_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IIF(c, BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(183, s), p, o, m)\n# define BOOST_PP_FOR_183_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IIF(c, BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(184, s), p, o, m)\n# define BOOST_PP_FOR_184_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IIF(c, BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(185, s), p, o, m)\n# define BOOST_PP_FOR_185_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IIF(c, BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(186, s), p, o, m)\n# define BOOST_PP_FOR_186_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IIF(c, BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(187, s), p, o, m)\n# define BOOST_PP_FOR_187_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IIF(c, BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(188, s), p, o, m)\n# define BOOST_PP_FOR_188_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IIF(c, BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(189, s), p, o, m)\n# define BOOST_PP_FOR_189_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IIF(c, BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(190, s), p, o, m)\n# define BOOST_PP_FOR_190_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IIF(c, BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(191, s), p, o, m)\n# define BOOST_PP_FOR_191_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IIF(c, BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(192, s), p, o, m)\n# define BOOST_PP_FOR_192_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IIF(c, BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(193, s), p, o, m)\n# define BOOST_PP_FOR_193_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IIF(c, BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(194, s), p, o, m)\n# define BOOST_PP_FOR_194_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IIF(c, BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(195, s), p, o, m)\n# define BOOST_PP_FOR_195_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IIF(c, BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(196, s), p, o, m)\n# define BOOST_PP_FOR_196_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IIF(c, BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(197, s), p, o, m)\n# define BOOST_PP_FOR_197_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IIF(c, BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(198, s), p, o, m)\n# define BOOST_PP_FOR_198_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IIF(c, BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(199, s), p, o, m)\n# define BOOST_PP_FOR_199_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IIF(c, BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(200, s), p, o, m)\n# define BOOST_PP_FOR_200_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IIF(c, BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(201, s), p, o, m)\n# define BOOST_PP_FOR_201_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IIF(c, BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(202, s), p, o, m)\n# define BOOST_PP_FOR_202_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IIF(c, BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(203, s), p, o, m)\n# define BOOST_PP_FOR_203_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IIF(c, BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(204, s), p, o, m)\n# define BOOST_PP_FOR_204_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IIF(c, BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(205, s), p, o, m)\n# define BOOST_PP_FOR_205_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IIF(c, BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(206, s), p, o, m)\n# define BOOST_PP_FOR_206_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IIF(c, BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(207, s), p, o, m)\n# define BOOST_PP_FOR_207_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IIF(c, BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(208, s), p, o, m)\n# define BOOST_PP_FOR_208_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IIF(c, BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(209, s), p, o, m)\n# define BOOST_PP_FOR_209_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IIF(c, BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(210, s), p, o, m)\n# define BOOST_PP_FOR_210_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IIF(c, BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(211, s), p, o, m)\n# define BOOST_PP_FOR_211_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IIF(c, BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(212, s), p, o, m)\n# define BOOST_PP_FOR_212_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IIF(c, BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(213, s), p, o, m)\n# define BOOST_PP_FOR_213_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IIF(c, BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(214, s), p, o, m)\n# define BOOST_PP_FOR_214_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IIF(c, BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(215, s), p, o, m)\n# define BOOST_PP_FOR_215_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IIF(c, BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(216, s), p, o, m)\n# define BOOST_PP_FOR_216_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IIF(c, BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(217, s), p, o, m)\n# define BOOST_PP_FOR_217_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IIF(c, BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(218, s), p, o, m)\n# define BOOST_PP_FOR_218_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IIF(c, BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(219, s), p, o, m)\n# define BOOST_PP_FOR_219_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IIF(c, BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(220, s), p, o, m)\n# define BOOST_PP_FOR_220_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IIF(c, BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(221, s), p, o, m)\n# define BOOST_PP_FOR_221_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IIF(c, BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(222, s), p, o, m)\n# define BOOST_PP_FOR_222_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IIF(c, BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(223, s), p, o, m)\n# define BOOST_PP_FOR_223_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IIF(c, BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(224, s), p, o, m)\n# define BOOST_PP_FOR_224_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IIF(c, BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(225, s), p, o, m)\n# define BOOST_PP_FOR_225_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IIF(c, BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(226, s), p, o, m)\n# define BOOST_PP_FOR_226_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IIF(c, BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(227, s), p, o, m)\n# define BOOST_PP_FOR_227_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IIF(c, BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(228, s), p, o, m)\n# define BOOST_PP_FOR_228_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IIF(c, BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(229, s), p, o, m)\n# define BOOST_PP_FOR_229_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IIF(c, BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(230, s), p, o, m)\n# define BOOST_PP_FOR_230_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IIF(c, BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(231, s), p, o, m)\n# define BOOST_PP_FOR_231_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IIF(c, BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(232, s), p, o, m)\n# define BOOST_PP_FOR_232_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IIF(c, BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(233, s), p, o, m)\n# define BOOST_PP_FOR_233_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IIF(c, BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(234, s), p, o, m)\n# define BOOST_PP_FOR_234_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IIF(c, BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(235, s), p, o, m)\n# define BOOST_PP_FOR_235_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IIF(c, BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(236, s), p, o, m)\n# define BOOST_PP_FOR_236_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IIF(c, BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(237, s), p, o, m)\n# define BOOST_PP_FOR_237_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IIF(c, BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(238, s), p, o, m)\n# define BOOST_PP_FOR_238_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IIF(c, BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(239, s), p, o, m)\n# define BOOST_PP_FOR_239_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IIF(c, BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(240, s), p, o, m)\n# define BOOST_PP_FOR_240_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IIF(c, BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(241, s), p, o, m)\n# define BOOST_PP_FOR_241_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IIF(c, BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(242, s), p, o, m)\n# define BOOST_PP_FOR_242_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IIF(c, BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(243, s), p, o, m)\n# define BOOST_PP_FOR_243_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IIF(c, BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(244, s), p, o, m)\n# define BOOST_PP_FOR_244_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IIF(c, BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(245, s), p, o, m)\n# define BOOST_PP_FOR_245_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IIF(c, BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(246, s), p, o, m)\n# define BOOST_PP_FOR_246_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IIF(c, BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(247, s), p, o, m)\n# define BOOST_PP_FOR_247_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IIF(c, BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(248, s), p, o, m)\n# define BOOST_PP_FOR_248_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IIF(c, BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(249, s), p, o, m)\n# define BOOST_PP_FOR_249_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IIF(c, BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(250, s), p, o, m)\n# define BOOST_PP_FOR_250_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IIF(c, BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(251, s), p, o, m)\n# define BOOST_PP_FOR_251_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IIF(c, BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(252, s), p, o, m)\n# define BOOST_PP_FOR_252_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IIF(c, BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(253, s), p, o, m)\n# define BOOST_PP_FOR_253_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IIF(c, BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(254, s), p, o, m)\n# define BOOST_PP_FOR_254_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IIF(c, BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(255, s), p, o, m)\n# define BOOST_PP_FOR_255_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IIF(c, BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(256, s), p, o, m)\n# define BOOST_PP_FOR_256_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IIF(c, BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(257, s), p, o, m)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/detail/msvc/for.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_MSVC_FOR_HPP\n# define BOOST_PREPROCESSOR_REPETITION_DETAIL_MSVC_FOR_HPP\n#\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_IF(p(2, s), m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IF(p(2, s), BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(o(2, s), p, o, m)\n# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_IF(p(3, s), m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IF(p(3, s), BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(o(3, s), p, o, m)\n# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_IF(p(4, s), m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IF(p(4, s), BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(o(4, s), p, o, m)\n# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_IF(p(5, s), m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IF(p(5, s), BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(o(5, s), p, o, m)\n# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_IF(p(6, s), m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IF(p(6, s), BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(o(6, s), p, o, m)\n# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_IF(p(7, s), m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IF(p(7, s), BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(o(7, s), p, o, m)\n# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_IF(p(8, s), m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IF(p(8, s), BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(o(8, s), p, o, m)\n# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_IF(p(9, s), m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IF(p(9, s), BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(o(9, s), p, o, m)\n# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_IF(p(10, s), m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IF(p(10, s), BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(o(10, s), p, o, m)\n# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_IF(p(11, s), m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IF(p(11, s), BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(o(11, s), p, o, m)\n# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_IF(p(12, s), m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IF(p(12, s), BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(o(12, s), p, o, m)\n# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_IF(p(13, s), m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IF(p(13, s), BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(o(13, s), p, o, m)\n# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_IF(p(14, s), m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IF(p(14, s), BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(o(14, s), p, o, m)\n# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_IF(p(15, s), m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IF(p(15, s), BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(o(15, s), p, o, m)\n# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_IF(p(16, s), m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IF(p(16, s), BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(o(16, s), p, o, m)\n# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_IF(p(17, s), m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IF(p(17, s), BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(o(17, s), p, o, m)\n# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_IF(p(18, s), m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IF(p(18, s), BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(o(18, s), p, o, m)\n# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_IF(p(19, s), m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IF(p(19, s), BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(o(19, s), p, o, m)\n# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_IF(p(20, s), m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IF(p(20, s), BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(o(20, s), p, o, m)\n# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_IF(p(21, s), m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IF(p(21, s), BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(o(21, s), p, o, m)\n# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_IF(p(22, s), m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IF(p(22, s), BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(o(22, s), p, o, m)\n# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_IF(p(23, s), m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IF(p(23, s), BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(o(23, s), p, o, m)\n# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_IF(p(24, s), m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IF(p(24, s), BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(o(24, s), p, o, m)\n# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_IF(p(25, s), m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IF(p(25, s), BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(o(25, s), p, o, m)\n# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_IF(p(26, s), m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IF(p(26, s), BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(o(26, s), p, o, m)\n# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_IF(p(27, s), m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IF(p(27, s), BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(o(27, s), p, o, m)\n# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_IF(p(28, s), m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IF(p(28, s), BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(o(28, s), p, o, m)\n# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_IF(p(29, s), m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IF(p(29, s), BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(o(29, s), p, o, m)\n# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_IF(p(30, s), m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IF(p(30, s), BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(o(30, s), p, o, m)\n# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_IF(p(31, s), m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IF(p(31, s), BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(o(31, s), p, o, m)\n# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_IF(p(32, s), m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IF(p(32, s), BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(o(32, s), p, o, m)\n# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_IF(p(33, s), m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IF(p(33, s), BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(o(33, s), p, o, m)\n# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_IF(p(34, s), m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IF(p(34, s), BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(o(34, s), p, o, m)\n# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_IF(p(35, s), m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IF(p(35, s), BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(o(35, s), p, o, m)\n# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_IF(p(36, s), m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IF(p(36, s), BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(o(36, s), p, o, m)\n# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_IF(p(37, s), m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IF(p(37, s), BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(o(37, s), p, o, m)\n# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_IF(p(38, s), m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IF(p(38, s), BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(o(38, s), p, o, m)\n# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_IF(p(39, s), m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IF(p(39, s), BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(o(39, s), p, o, m)\n# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_IF(p(40, s), m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IF(p(40, s), BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(o(40, s), p, o, m)\n# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_IF(p(41, s), m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IF(p(41, s), BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(o(41, s), p, o, m)\n# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_IF(p(42, s), m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IF(p(42, s), BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(o(42, s), p, o, m)\n# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_IF(p(43, s), m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IF(p(43, s), BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(o(43, s), p, o, m)\n# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_IF(p(44, s), m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IF(p(44, s), BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(o(44, s), p, o, m)\n# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_IF(p(45, s), m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IF(p(45, s), BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(o(45, s), p, o, m)\n# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_IF(p(46, s), m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IF(p(46, s), BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(o(46, s), p, o, m)\n# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_IF(p(47, s), m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IF(p(47, s), BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(o(47, s), p, o, m)\n# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_IF(p(48, s), m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IF(p(48, s), BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(o(48, s), p, o, m)\n# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_IF(p(49, s), m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IF(p(49, s), BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(o(49, s), p, o, m)\n# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_IF(p(50, s), m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IF(p(50, s), BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(o(50, s), p, o, m)\n# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_IF(p(51, s), m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IF(p(51, s), BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(o(51, s), p, o, m)\n# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_IF(p(52, s), m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IF(p(52, s), BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(o(52, s), p, o, m)\n# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_IF(p(53, s), m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IF(p(53, s), BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(o(53, s), p, o, m)\n# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_IF(p(54, s), m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IF(p(54, s), BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(o(54, s), p, o, m)\n# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_IF(p(55, s), m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IF(p(55, s), BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(o(55, s), p, o, m)\n# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_IF(p(56, s), m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IF(p(56, s), BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(o(56, s), p, o, m)\n# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_IF(p(57, s), m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IF(p(57, s), BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(o(57, s), p, o, m)\n# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_IF(p(58, s), m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IF(p(58, s), BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(o(58, s), p, o, m)\n# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_IF(p(59, s), m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IF(p(59, s), BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(o(59, s), p, o, m)\n# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_IF(p(60, s), m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IF(p(60, s), BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(o(60, s), p, o, m)\n# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_IF(p(61, s), m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IF(p(61, s), BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(o(61, s), p, o, m)\n# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_IF(p(62, s), m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IF(p(62, s), BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(o(62, s), p, o, m)\n# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_IF(p(63, s), m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IF(p(63, s), BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(o(63, s), p, o, m)\n# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_IF(p(64, s), m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IF(p(64, s), BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(o(64, s), p, o, m)\n# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_IF(p(65, s), m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IF(p(65, s), BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(o(65, s), p, o, m)\n# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_IF(p(66, s), m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IF(p(66, s), BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(o(66, s), p, o, m)\n# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_IF(p(67, s), m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IF(p(67, s), BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(o(67, s), p, o, m)\n# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_IF(p(68, s), m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IF(p(68, s), BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(o(68, s), p, o, m)\n# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_IF(p(69, s), m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IF(p(69, s), BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(o(69, s), p, o, m)\n# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_IF(p(70, s), m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IF(p(70, s), BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(o(70, s), p, o, m)\n# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_IF(p(71, s), m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IF(p(71, s), BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(o(71, s), p, o, m)\n# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_IF(p(72, s), m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IF(p(72, s), BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(o(72, s), p, o, m)\n# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_IF(p(73, s), m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IF(p(73, s), BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(o(73, s), p, o, m)\n# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_IF(p(74, s), m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IF(p(74, s), BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(o(74, s), p, o, m)\n# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_IF(p(75, s), m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IF(p(75, s), BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(o(75, s), p, o, m)\n# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_IF(p(76, s), m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IF(p(76, s), BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(o(76, s), p, o, m)\n# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_IF(p(77, s), m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IF(p(77, s), BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(o(77, s), p, o, m)\n# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_IF(p(78, s), m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IF(p(78, s), BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(o(78, s), p, o, m)\n# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_IF(p(79, s), m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IF(p(79, s), BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(o(79, s), p, o, m)\n# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_IF(p(80, s), m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IF(p(80, s), BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(o(80, s), p, o, m)\n# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_IF(p(81, s), m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IF(p(81, s), BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(o(81, s), p, o, m)\n# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_IF(p(82, s), m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IF(p(82, s), BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(o(82, s), p, o, m)\n# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_IF(p(83, s), m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IF(p(83, s), BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(o(83, s), p, o, m)\n# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_IF(p(84, s), m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IF(p(84, s), BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(o(84, s), p, o, m)\n# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_IF(p(85, s), m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IF(p(85, s), BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(o(85, s), p, o, m)\n# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_IF(p(86, s), m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IF(p(86, s), BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(o(86, s), p, o, m)\n# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_IF(p(87, s), m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IF(p(87, s), BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(o(87, s), p, o, m)\n# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_IF(p(88, s), m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IF(p(88, s), BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(o(88, s), p, o, m)\n# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_IF(p(89, s), m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IF(p(89, s), BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(o(89, s), p, o, m)\n# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_IF(p(90, s), m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IF(p(90, s), BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(o(90, s), p, o, m)\n# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_IF(p(91, s), m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IF(p(91, s), BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(o(91, s), p, o, m)\n# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_IF(p(92, s), m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IF(p(92, s), BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(o(92, s), p, o, m)\n# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_IF(p(93, s), m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IF(p(93, s), BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(o(93, s), p, o, m)\n# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_IF(p(94, s), m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IF(p(94, s), BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(o(94, s), p, o, m)\n# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_IF(p(95, s), m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IF(p(95, s), BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(o(95, s), p, o, m)\n# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_IF(p(96, s), m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IF(p(96, s), BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(o(96, s), p, o, m)\n# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_IF(p(97, s), m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IF(p(97, s), BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(o(97, s), p, o, m)\n# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_IF(p(98, s), m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IF(p(98, s), BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(o(98, s), p, o, m)\n# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_IF(p(99, s), m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IF(p(99, s), BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(o(99, s), p, o, m)\n# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_IF(p(100, s), m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IF(p(100, s), BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(o(100, s), p, o, m)\n# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_IF(p(101, s), m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IF(p(101, s), BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(o(101, s), p, o, m)\n# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_IF(p(102, s), m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IF(p(102, s), BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(o(102, s), p, o, m)\n# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_IF(p(103, s), m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IF(p(103, s), BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(o(103, s), p, o, m)\n# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_IF(p(104, s), m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IF(p(104, s), BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(o(104, s), p, o, m)\n# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_IF(p(105, s), m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IF(p(105, s), BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(o(105, s), p, o, m)\n# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_IF(p(106, s), m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IF(p(106, s), BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(o(106, s), p, o, m)\n# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_IF(p(107, s), m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IF(p(107, s), BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(o(107, s), p, o, m)\n# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_IF(p(108, s), m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IF(p(108, s), BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(o(108, s), p, o, m)\n# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_IF(p(109, s), m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IF(p(109, s), BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(o(109, s), p, o, m)\n# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_IF(p(110, s), m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IF(p(110, s), BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(o(110, s), p, o, m)\n# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_IF(p(111, s), m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IF(p(111, s), BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(o(111, s), p, o, m)\n# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_IF(p(112, s), m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IF(p(112, s), BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(o(112, s), p, o, m)\n# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_IF(p(113, s), m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IF(p(113, s), BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(o(113, s), p, o, m)\n# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_IF(p(114, s), m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IF(p(114, s), BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(o(114, s), p, o, m)\n# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_IF(p(115, s), m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IF(p(115, s), BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(o(115, s), p, o, m)\n# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_IF(p(116, s), m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IF(p(116, s), BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(o(116, s), p, o, m)\n# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_IF(p(117, s), m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IF(p(117, s), BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(o(117, s), p, o, m)\n# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_IF(p(118, s), m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IF(p(118, s), BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(o(118, s), p, o, m)\n# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_IF(p(119, s), m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IF(p(119, s), BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(o(119, s), p, o, m)\n# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_IF(p(120, s), m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IF(p(120, s), BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(o(120, s), p, o, m)\n# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_IF(p(121, s), m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IF(p(121, s), BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(o(121, s), p, o, m)\n# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_IF(p(122, s), m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IF(p(122, s), BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(o(122, s), p, o, m)\n# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_IF(p(123, s), m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IF(p(123, s), BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(o(123, s), p, o, m)\n# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_IF(p(124, s), m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IF(p(124, s), BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(o(124, s), p, o, m)\n# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_IF(p(125, s), m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IF(p(125, s), BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(o(125, s), p, o, m)\n# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_IF(p(126, s), m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IF(p(126, s), BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(o(126, s), p, o, m)\n# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_IF(p(127, s), m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IF(p(127, s), BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(o(127, s), p, o, m)\n# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_IF(p(128, s), m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IF(p(128, s), BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(o(128, s), p, o, m)\n# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_IF(p(129, s), m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IF(p(129, s), BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(o(129, s), p, o, m)\n# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_IF(p(130, s), m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IF(p(130, s), BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(o(130, s), p, o, m)\n# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_IF(p(131, s), m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IF(p(131, s), BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(o(131, s), p, o, m)\n# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_IF(p(132, s), m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IF(p(132, s), BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(o(132, s), p, o, m)\n# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_IF(p(133, s), m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IF(p(133, s), BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(o(133, s), p, o, m)\n# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_IF(p(134, s), m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IF(p(134, s), BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(o(134, s), p, o, m)\n# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_IF(p(135, s), m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IF(p(135, s), BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(o(135, s), p, o, m)\n# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_IF(p(136, s), m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IF(p(136, s), BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(o(136, s), p, o, m)\n# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_IF(p(137, s), m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IF(p(137, s), BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(o(137, s), p, o, m)\n# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_IF(p(138, s), m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IF(p(138, s), BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(o(138, s), p, o, m)\n# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_IF(p(139, s), m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IF(p(139, s), BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(o(139, s), p, o, m)\n# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_IF(p(140, s), m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IF(p(140, s), BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(o(140, s), p, o, m)\n# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_IF(p(141, s), m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IF(p(141, s), BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(o(141, s), p, o, m)\n# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_IF(p(142, s), m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IF(p(142, s), BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(o(142, s), p, o, m)\n# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_IF(p(143, s), m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IF(p(143, s), BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(o(143, s), p, o, m)\n# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_IF(p(144, s), m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IF(p(144, s), BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(o(144, s), p, o, m)\n# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_IF(p(145, s), m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IF(p(145, s), BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(o(145, s), p, o, m)\n# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_IF(p(146, s), m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IF(p(146, s), BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(o(146, s), p, o, m)\n# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_IF(p(147, s), m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IF(p(147, s), BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(o(147, s), p, o, m)\n# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_IF(p(148, s), m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IF(p(148, s), BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(o(148, s), p, o, m)\n# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_IF(p(149, s), m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IF(p(149, s), BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(o(149, s), p, o, m)\n# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_IF(p(150, s), m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IF(p(150, s), BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(o(150, s), p, o, m)\n# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_IF(p(151, s), m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IF(p(151, s), BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(o(151, s), p, o, m)\n# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_IF(p(152, s), m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IF(p(152, s), BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(o(152, s), p, o, m)\n# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_IF(p(153, s), m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IF(p(153, s), BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(o(153, s), p, o, m)\n# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_IF(p(154, s), m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IF(p(154, s), BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(o(154, s), p, o, m)\n# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_IF(p(155, s), m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IF(p(155, s), BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(o(155, s), p, o, m)\n# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_IF(p(156, s), m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IF(p(156, s), BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(o(156, s), p, o, m)\n# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_IF(p(157, s), m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IF(p(157, s), BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(o(157, s), p, o, m)\n# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_IF(p(158, s), m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IF(p(158, s), BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(o(158, s), p, o, m)\n# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_IF(p(159, s), m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IF(p(159, s), BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(o(159, s), p, o, m)\n# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_IF(p(160, s), m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IF(p(160, s), BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(o(160, s), p, o, m)\n# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_IF(p(161, s), m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IF(p(161, s), BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(o(161, s), p, o, m)\n# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_IF(p(162, s), m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IF(p(162, s), BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(o(162, s), p, o, m)\n# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_IF(p(163, s), m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IF(p(163, s), BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(o(163, s), p, o, m)\n# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_IF(p(164, s), m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IF(p(164, s), BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(o(164, s), p, o, m)\n# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_IF(p(165, s), m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IF(p(165, s), BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(o(165, s), p, o, m)\n# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_IF(p(166, s), m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IF(p(166, s), BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(o(166, s), p, o, m)\n# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_IF(p(167, s), m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IF(p(167, s), BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(o(167, s), p, o, m)\n# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_IF(p(168, s), m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IF(p(168, s), BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(o(168, s), p, o, m)\n# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_IF(p(169, s), m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IF(p(169, s), BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(o(169, s), p, o, m)\n# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_IF(p(170, s), m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IF(p(170, s), BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(o(170, s), p, o, m)\n# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_IF(p(171, s), m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IF(p(171, s), BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(o(171, s), p, o, m)\n# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_IF(p(172, s), m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IF(p(172, s), BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(o(172, s), p, o, m)\n# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_IF(p(173, s), m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IF(p(173, s), BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(o(173, s), p, o, m)\n# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_IF(p(174, s), m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IF(p(174, s), BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(o(174, s), p, o, m)\n# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_IF(p(175, s), m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IF(p(175, s), BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(o(175, s), p, o, m)\n# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_IF(p(176, s), m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IF(p(176, s), BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(o(176, s), p, o, m)\n# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_IF(p(177, s), m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IF(p(177, s), BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(o(177, s), p, o, m)\n# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_IF(p(178, s), m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IF(p(178, s), BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(o(178, s), p, o, m)\n# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_IF(p(179, s), m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IF(p(179, s), BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(o(179, s), p, o, m)\n# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_IF(p(180, s), m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IF(p(180, s), BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(o(180, s), p, o, m)\n# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_IF(p(181, s), m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IF(p(181, s), BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(o(181, s), p, o, m)\n# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_IF(p(182, s), m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IF(p(182, s), BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(o(182, s), p, o, m)\n# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_IF(p(183, s), m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IF(p(183, s), BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(o(183, s), p, o, m)\n# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_IF(p(184, s), m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IF(p(184, s), BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(o(184, s), p, o, m)\n# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_IF(p(185, s), m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IF(p(185, s), BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(o(185, s), p, o, m)\n# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_IF(p(186, s), m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IF(p(186, s), BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(o(186, s), p, o, m)\n# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_IF(p(187, s), m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IF(p(187, s), BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(o(187, s), p, o, m)\n# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_IF(p(188, s), m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IF(p(188, s), BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(o(188, s), p, o, m)\n# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_IF(p(189, s), m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IF(p(189, s), BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(o(189, s), p, o, m)\n# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_IF(p(190, s), m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IF(p(190, s), BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(o(190, s), p, o, m)\n# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_IF(p(191, s), m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IF(p(191, s), BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(o(191, s), p, o, m)\n# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_IF(p(192, s), m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IF(p(192, s), BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(o(192, s), p, o, m)\n# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_IF(p(193, s), m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IF(p(193, s), BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(o(193, s), p, o, m)\n# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_IF(p(194, s), m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IF(p(194, s), BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(o(194, s), p, o, m)\n# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_IF(p(195, s), m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IF(p(195, s), BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(o(195, s), p, o, m)\n# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_IF(p(196, s), m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IF(p(196, s), BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(o(196, s), p, o, m)\n# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_IF(p(197, s), m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IF(p(197, s), BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(o(197, s), p, o, m)\n# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_IF(p(198, s), m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IF(p(198, s), BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(o(198, s), p, o, m)\n# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_IF(p(199, s), m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IF(p(199, s), BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(o(199, s), p, o, m)\n# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_IF(p(200, s), m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IF(p(200, s), BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(o(200, s), p, o, m)\n# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_IF(p(201, s), m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IF(p(201, s), BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(o(201, s), p, o, m)\n# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_IF(p(202, s), m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IF(p(202, s), BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(o(202, s), p, o, m)\n# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_IF(p(203, s), m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IF(p(203, s), BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(o(203, s), p, o, m)\n# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_IF(p(204, s), m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IF(p(204, s), BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(o(204, s), p, o, m)\n# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_IF(p(205, s), m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IF(p(205, s), BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(o(205, s), p, o, m)\n# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_IF(p(206, s), m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IF(p(206, s), BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(o(206, s), p, o, m)\n# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_IF(p(207, s), m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IF(p(207, s), BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(o(207, s), p, o, m)\n# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_IF(p(208, s), m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IF(p(208, s), BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(o(208, s), p, o, m)\n# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_IF(p(209, s), m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IF(p(209, s), BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(o(209, s), p, o, m)\n# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_IF(p(210, s), m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IF(p(210, s), BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(o(210, s), p, o, m)\n# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_IF(p(211, s), m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IF(p(211, s), BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(o(211, s), p, o, m)\n# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_IF(p(212, s), m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IF(p(212, s), BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(o(212, s), p, o, m)\n# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_IF(p(213, s), m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IF(p(213, s), BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(o(213, s), p, o, m)\n# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_IF(p(214, s), m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IF(p(214, s), BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(o(214, s), p, o, m)\n# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_IF(p(215, s), m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IF(p(215, s), BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(o(215, s), p, o, m)\n# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_IF(p(216, s), m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IF(p(216, s), BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(o(216, s), p, o, m)\n# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_IF(p(217, s), m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IF(p(217, s), BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(o(217, s), p, o, m)\n# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_IF(p(218, s), m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IF(p(218, s), BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(o(218, s), p, o, m)\n# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_IF(p(219, s), m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IF(p(219, s), BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(o(219, s), p, o, m)\n# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_IF(p(220, s), m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IF(p(220, s), BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(o(220, s), p, o, m)\n# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_IF(p(221, s), m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IF(p(221, s), BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(o(221, s), p, o, m)\n# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_IF(p(222, s), m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IF(p(222, s), BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(o(222, s), p, o, m)\n# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_IF(p(223, s), m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IF(p(223, s), BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(o(223, s), p, o, m)\n# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_IF(p(224, s), m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IF(p(224, s), BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(o(224, s), p, o, m)\n# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_IF(p(225, s), m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IF(p(225, s), BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(o(225, s), p, o, m)\n# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_IF(p(226, s), m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IF(p(226, s), BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(o(226, s), p, o, m)\n# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_IF(p(227, s), m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IF(p(227, s), BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(o(227, s), p, o, m)\n# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_IF(p(228, s), m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IF(p(228, s), BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(o(228, s), p, o, m)\n# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_IF(p(229, s), m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IF(p(229, s), BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(o(229, s), p, o, m)\n# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_IF(p(230, s), m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IF(p(230, s), BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(o(230, s), p, o, m)\n# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_IF(p(231, s), m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IF(p(231, s), BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(o(231, s), p, o, m)\n# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_IF(p(232, s), m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IF(p(232, s), BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(o(232, s), p, o, m)\n# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_IF(p(233, s), m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IF(p(233, s), BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(o(233, s), p, o, m)\n# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_IF(p(234, s), m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IF(p(234, s), BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(o(234, s), p, o, m)\n# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_IF(p(235, s), m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IF(p(235, s), BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(o(235, s), p, o, m)\n# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_IF(p(236, s), m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IF(p(236, s), BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(o(236, s), p, o, m)\n# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_IF(p(237, s), m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IF(p(237, s), BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(o(237, s), p, o, m)\n# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_IF(p(238, s), m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IF(p(238, s), BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(o(238, s), p, o, m)\n# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_IF(p(239, s), m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IF(p(239, s), BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(o(239, s), p, o, m)\n# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_IF(p(240, s), m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IF(p(240, s), BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(o(240, s), p, o, m)\n# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_IF(p(241, s), m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IF(p(241, s), BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(o(241, s), p, o, m)\n# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_IF(p(242, s), m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IF(p(242, s), BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(o(242, s), p, o, m)\n# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_IF(p(243, s), m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IF(p(243, s), BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(o(243, s), p, o, m)\n# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_IF(p(244, s), m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IF(p(244, s), BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(o(244, s), p, o, m)\n# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_IF(p(245, s), m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IF(p(245, s), BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(o(245, s), p, o, m)\n# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_IF(p(246, s), m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IF(p(246, s), BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(o(246, s), p, o, m)\n# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_IF(p(247, s), m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IF(p(247, s), BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(o(247, s), p, o, m)\n# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_IF(p(248, s), m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IF(p(248, s), BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(o(248, s), p, o, m)\n# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_IF(p(249, s), m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IF(p(249, s), BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(o(249, s), p, o, m)\n# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_IF(p(250, s), m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IF(p(250, s), BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(o(250, s), p, o, m)\n# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_IF(p(251, s), m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IF(p(251, s), BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(o(251, s), p, o, m)\n# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_IF(p(252, s), m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IF(p(252, s), BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(o(252, s), p, o, m)\n# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_IF(p(253, s), m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IF(p(253, s), BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(o(253, s), p, o, m)\n# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_IF(p(254, s), m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IF(p(254, s), BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(o(254, s), p, o, m)\n# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_IF(p(255, s), m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IF(p(255, s), BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(o(255, s), p, o, m)\n# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_IF(p(256, s), m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IF(p(256, s), BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(o(256, s), p, o, m)\n# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_IF(p(257, s), m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IF(p(257, s), BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(o(257, s), p, o, m)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_ENUM */\n#\n# if 0\n#    define BOOST_PP_ENUM(count, macro, data)\n# endif\n#\n# define BOOST_PP_ENUM BOOST_PP_CAT(BOOST_PP_ENUM_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_1(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_M_1, (m, d))\n#    define BOOST_PP_ENUM_2(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_M_2, (m, d))\n#    define BOOST_PP_ENUM_3(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_M_3, (m, d))\n# else\n#    define BOOST_PP_ENUM_1(c, m, d) BOOST_PP_ENUM_1_I(c, m, d)\n#    define BOOST_PP_ENUM_2(c, m, d) BOOST_PP_ENUM_2_I(c, m, d)\n#    define BOOST_PP_ENUM_3(c, m, d) BOOST_PP_ENUM_3_I(c, m, d)\n#    define BOOST_PP_ENUM_1_I(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_M_1, (m, d))\n#    define BOOST_PP_ENUM_2_I(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_M_2, (m, d))\n#    define BOOST_PP_ENUM_3_I(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_M_3, (m, d))\n# endif\n#\n# define BOOST_PP_ENUM_4(c, m, d) BOOST_PP_ERROR(0x0003)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ENUM_M_1(z, n, md) BOOST_PP_ENUM_M_1_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_M_2(z, n, md) BOOST_PP_ENUM_M_2_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_M_3(z, n, md) BOOST_PP_ENUM_M_3_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_M_1_IM(z, n, im) BOOST_PP_ENUM_M_1_I(z, n, im)\n#    define BOOST_PP_ENUM_M_2_IM(z, n, im) BOOST_PP_ENUM_M_2_I(z, n, im)\n#    define BOOST_PP_ENUM_M_3_IM(z, n, im) BOOST_PP_ENUM_M_3_I(z, n, im)\n# else\n#    define BOOST_PP_ENUM_M_1(z, n, md) BOOST_PP_ENUM_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n#    define BOOST_PP_ENUM_M_2(z, n, md) BOOST_PP_ENUM_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n#    define BOOST_PP_ENUM_M_3(z, n, md) BOOST_PP_ENUM_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n# endif\n#\n# define BOOST_PP_ENUM_M_1_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)\n# define BOOST_PP_ENUM_M_2_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)\n# define BOOST_PP_ENUM_M_3_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_binary_params.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_ENUM_BINARY_PARAMS */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))\n# else\n#    define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2)\n#    define BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp)\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, im)\n# else\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2)\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2) BOOST_PP_COMMA_IF(n) p1 ## n p2 ## n\n# else\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(p1, n) BOOST_PP_CAT(p2, n)\n# endif\n#\n# /* BOOST_PP_ENUM_BINARY_PARAMS_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))\n# else\n#    define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2)\n#    define BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_params.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# /* BOOST_PP_ENUM_PARAMS */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_ENUM_PARAMS_I(count, param)\n#    define BOOST_PP_ENUM_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param)\n# endif\n#\n# define BOOST_PP_ENUM_PARAMS_M(z, n, param) BOOST_PP_COMMA_IF(n) param ## n\n#\n# /* BOOST_PP_ENUM_PARAMS_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_ENUM_PARAMS_Z_I(z, count, param)\n#    define BOOST_PP_ENUM_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_params_with_a_default.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_A_DEFAULT_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_A_DEFAULT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/intercept.hpp>\n# include <boost/preprocessor/repetition/enum_binary_params.hpp>\n#\n# /* BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT */\n#\n# define BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(count, param, def) BOOST_PP_ENUM_BINARY_PARAMS(count, param, = def BOOST_PP_INTERCEPT)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_params_with_defaults.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_DEFAULTS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_DEFAULTS_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/repetition/enum_binary_params.hpp>\n#\n# /* BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS */\n#\n# define BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS(count, param, def) BOOST_PP_ENUM_BINARY_PARAMS(count, param, = def)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_shifted.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_ENUM_SHIFTED */\n#\n# if 0\n#    define BOOST_PP_ENUM_SHIFTED(count, macro, data)\n# endif\n#\n# define BOOST_PP_ENUM_SHIFTED BOOST_PP_CAT(BOOST_PP_ENUM_SHIFTED_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_SHIFTED_1(c, m, d) BOOST_PP_REPEAT_1(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_1, (m, d))\n#    define BOOST_PP_ENUM_SHIFTED_2(c, m, d) BOOST_PP_REPEAT_2(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_2, (m, d))\n#    define BOOST_PP_ENUM_SHIFTED_3(c, m, d) BOOST_PP_REPEAT_3(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_3, (m, d))\n# else\n#    define BOOST_PP_ENUM_SHIFTED_1(c, m, d) BOOST_PP_ENUM_SHIFTED_1_I(c, m, d)\n#    define BOOST_PP_ENUM_SHIFTED_2(c, m, d) BOOST_PP_ENUM_SHIFTED_1_2(c, m, d)\n#    define BOOST_PP_ENUM_SHIFTED_3(c, m, d) BOOST_PP_ENUM_SHIFTED_1_3(c, m, d)\n#    define BOOST_PP_ENUM_SHIFTED_1_I(c, m, d) BOOST_PP_REPEAT_1(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_1, (m, d))\n#    define BOOST_PP_ENUM_SHIFTED_2_I(c, m, d) BOOST_PP_REPEAT_2(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_2, (m, d))\n#    define BOOST_PP_ENUM_SHIFTED_3_I(c, m, d) BOOST_PP_REPEAT_3(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_3, (m, d))\n# endif\n#\n# define BOOST_PP_ENUM_SHIFTED_4(c, m, d) BOOST_PP_ERROR(0x0003)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ENUM_SHIFTED_M_1(z, n, md) BOOST_PP_ENUM_SHIFTED_M_1_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_SHIFTED_M_2(z, n, md) BOOST_PP_ENUM_SHIFTED_M_2_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_SHIFTED_M_3(z, n, md) BOOST_PP_ENUM_SHIFTED_M_3_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_SHIFTED_M_1_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_M_1_I(z, n, im)\n#    define BOOST_PP_ENUM_SHIFTED_M_2_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_M_2_I(z, n, im)\n#    define BOOST_PP_ENUM_SHIFTED_M_3_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_M_3_I(z, n, im)\n# else\n#    define BOOST_PP_ENUM_SHIFTED_M_1(z, n, md) BOOST_PP_ENUM_SHIFTED_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n#    define BOOST_PP_ENUM_SHIFTED_M_2(z, n, md) BOOST_PP_ENUM_SHIFTED_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n#    define BOOST_PP_ENUM_SHIFTED_M_3(z, n, md) BOOST_PP_ENUM_SHIFTED_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n# endif\n#\n# define BOOST_PP_ENUM_SHIFTED_M_1_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, BOOST_PP_INC(n), d)\n# define BOOST_PP_ENUM_SHIFTED_M_2_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, BOOST_PP_INC(n), d)\n# define BOOST_PP_ENUM_SHIFTED_M_3_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, BOOST_PP_INC(n), d)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_shifted_binary_params.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2005.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_BINARY_PARAMS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_BINARY_PARAMS_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M, (p1, p2))\n# else\n#    define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_I(count, p1, p2)\n#    define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M, (p1, p2))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp)\n#    define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_I(z, n, im)\n# else\n#    define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp))\n# endif\n#\n# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(p1, BOOST_PP_INC(n)) BOOST_PP_CAT(p2, BOOST_PP_INC(n))\n#\n# /* BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M, (p1, p2))\n# else\n#    define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z_I(z, count, p1, p2)\n#    define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M, (p1, p2))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_shifted_params.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_PARAMS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_PARAMS_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# /* BOOST_PP_ENUM_SHIFTED_PARAMS */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_SHIFTED_PARAMS(count, param) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_SHIFTED_PARAMS(count, param) BOOST_PP_ENUM_SHIFTED_PARAMS_I(count, param)\n#    define BOOST_PP_ENUM_SHIFTED_PARAMS_I(count, param) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)\n# endif\n#\n# define BOOST_PP_ENUM_SHIFTED_PARAMS_M(z, n, param) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(param, BOOST_PP_INC(n))\n#\n# /* BOOST_PP_ENUM_SHIFTED_PARAMS_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_SHIFTED_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_SHIFTED_PARAMS_Z(z, count, param) BOOST_PP_ENUM_SHIFTED_PARAMS_Z_I(z, count, param)\n#    define BOOST_PP_ENUM_SHIFTED_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_trailing.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_ENUM_TRAILING */\n#\n# if 0\n#    define BOOST_PP_ENUM_TRAILING(count, macro, data)\n# endif\n#\n# define BOOST_PP_ENUM_TRAILING BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_TRAILING_1(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_TRAILING_M_1, (m, d))\n#    define BOOST_PP_ENUM_TRAILING_2(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_TRAILING_M_2, (m, d))\n#    define BOOST_PP_ENUM_TRAILING_3(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_TRAILING_M_3, (m, d))\n# else\n#    define BOOST_PP_ENUM_TRAILING_1(c, m, d) BOOST_PP_ENUM_TRAILING_1_I(c, m, d)\n#    define BOOST_PP_ENUM_TRAILING_2(c, m, d) BOOST_PP_ENUM_TRAILING_2_I(c, m, d)\n#    define BOOST_PP_ENUM_TRAILING_3(c, m, d) BOOST_PP_ENUM_TRAILING_3_I(c, m, d)\n#    define BOOST_PP_ENUM_TRAILING_1_I(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_TRAILING_M_1, (m, d))\n#    define BOOST_PP_ENUM_TRAILING_2_I(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_TRAILING_M_2, (m, d))\n#    define BOOST_PP_ENUM_TRAILING_3_I(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_TRAILING_M_3, (m, d))\n# endif\n#\n# define BOOST_PP_ENUM_TRAILING_4(c, m, d) BOOST_PP_ERROR(0x0003)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ENUM_TRAILING_M_1(z, n, md) BOOST_PP_ENUM_TRAILING_M_1_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_TRAILING_M_2(z, n, md) BOOST_PP_ENUM_TRAILING_M_2_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_TRAILING_M_3(z, n, md) BOOST_PP_ENUM_TRAILING_M_3_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_TRAILING_M_1_IM(z, n, im) BOOST_PP_ENUM_TRAILING_M_1_I(z, n, im)\n#    define BOOST_PP_ENUM_TRAILING_M_2_IM(z, n, im) BOOST_PP_ENUM_TRAILING_M_2_I(z, n, im)\n#    define BOOST_PP_ENUM_TRAILING_M_3_IM(z, n, im) BOOST_PP_ENUM_TRAILING_M_3_I(z, n, im)\n# else\n#    define BOOST_PP_ENUM_TRAILING_M_1(z, n, md) BOOST_PP_ENUM_TRAILING_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n#    define BOOST_PP_ENUM_TRAILING_M_2(z, n, md) BOOST_PP_ENUM_TRAILING_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n#    define BOOST_PP_ENUM_TRAILING_M_3(z, n, md) BOOST_PP_ENUM_TRAILING_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n# endif\n#\n# define BOOST_PP_ENUM_TRAILING_M_1_I(z, n, m, d) , m(z, n, d)\n# define BOOST_PP_ENUM_TRAILING_M_2_I(z, n, m, d) , m(z, n, d)\n# define BOOST_PP_ENUM_TRAILING_M_3_I(z, n, m, d) , m(z, n, d)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_trailing_binary_params.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_BINARY_PARAMS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_BINARY_PARAMS_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_ENUM_TRAILING_BINARY_PARAMS */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))\n# else\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_I(count, p1, p2)\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp)\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, im)\n# else\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_II(z, n, p1, p2)\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_II(z, n, p1, p2) , p1 ## n p2 ## n\n# else\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, p1, p2) , BOOST_PP_CAT(p1, n) BOOST_PP_CAT(p2, n)\n# endif\n#\n# /* BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))\n# else\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z_I(z, count, p1, p2)\n#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/enum_trailing_params.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# /* BOOST_PP_ENUM_TRAILING_PARAMS */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param)\n#    define BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)\n# endif\n#\n# define BOOST_PP_ENUM_TRAILING_PARAMS_M(z, n, param) , param ## n\n#\n# /* BOOST_PP_ENUM_TRAILING_PARAMS_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param)\n#    define BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/for.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_FOR_HPP\n# define BOOST_PREPROCESSOR_REPETITION_FOR_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n#\n# /* BOOST_PP_FOR */\n#\n# if 0\n#    define BOOST_PP_FOR(state, pred, op, macro)\n# endif\n#\n# define BOOST_PP_FOR BOOST_PP_CAT(BOOST_PP_FOR_, BOOST_PP_AUTO_REC(BOOST_PP_FOR_P, 256))\n#\n# define BOOST_PP_FOR_P(n) BOOST_PP_CAT(BOOST_PP_FOR_CHECK_, BOOST_PP_FOR_ ## n(1, BOOST_PP_FOR_SR_P, BOOST_PP_FOR_SR_O, BOOST_PP_FOR_SR_M))\n#\n# define BOOST_PP_FOR_SR_P(r, s) s\n# define BOOST_PP_FOR_SR_O(r, s) 0\n# define BOOST_PP_FOR_SR_M(r, s) BOOST_PP_NIL\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    include <boost/preprocessor/repetition/detail/edg/for.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    include <boost/preprocessor/repetition/detail/msvc/for.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    include <boost/preprocessor/repetition/detail/dmc/for.hpp>\n# else\n#    include <boost/preprocessor/repetition/detail/for.hpp>\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n# define BOOST_PP_FOR_257_PR(s, p) BOOST_PP_BOOL(p##(257, s))\n# else\n# define BOOST_PP_FOR_257_PR(s, p) BOOST_PP_BOOL(p(257, s))\n# endif\n\n# define BOOST_PP_FOR_257_ERROR() BOOST_PP_ERROR(0x0002)\n# define BOOST_PP_FOR_257(s, p, o, m) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_FOR_257_PR(s,p), \\\n\t\tBOOST_PP_FOR_257_ERROR, \\\n\t\tBOOST_PP_EMPTY \\\n\t\t) \\\n\t() \\\n/**/\n// # define BOOST_PP_FOR_257(s, p, o, m) BOOST_PP_ERROR(0x0002)\n#\n# define BOOST_PP_FOR_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_1(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_2(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_3(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_4(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_5(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_6(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_7(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_8(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_9(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_10(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_11(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_12(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_13(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_14(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_15(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_16(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_17(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_18(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_19(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_20(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_21(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_22(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_23(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_24(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_25(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_26(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_27(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_28(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_29(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_30(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_31(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_32(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_33(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_34(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_35(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_36(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_37(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_38(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_39(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_40(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_41(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_42(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_43(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_44(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_45(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_46(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_47(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_48(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_49(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_50(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_51(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_52(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_53(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_54(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_55(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_56(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_57(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_58(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_59(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_60(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_61(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_62(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_63(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_64(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_65(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_66(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_67(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_68(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_69(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_70(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_71(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_72(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_73(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_74(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_75(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_76(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_77(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_78(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_79(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_80(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_81(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_82(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_83(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_84(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_85(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_86(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_87(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_88(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_89(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_90(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_91(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_92(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_93(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_94(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_95(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_96(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_97(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_98(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_99(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_100(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_101(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_102(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_103(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_104(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_105(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_106(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_107(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_108(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_109(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_110(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_111(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_112(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_113(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_114(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_115(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_116(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_117(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_118(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_119(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_120(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_121(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_122(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_123(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_124(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_125(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_126(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_127(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_128(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_129(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_130(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_131(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_132(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_133(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_134(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_135(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_136(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_137(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_138(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_139(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_140(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_141(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_142(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_143(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_144(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_145(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_146(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_147(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_148(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_149(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_150(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_151(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_152(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_153(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_154(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_155(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_156(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_157(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_158(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_159(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_160(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_161(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_162(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_163(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_164(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_165(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_166(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_167(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_168(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_169(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_170(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_171(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_172(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_173(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_174(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_175(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_176(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_177(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_178(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_179(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_180(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_181(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_182(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_183(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_184(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_185(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_186(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_187(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_188(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_189(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_190(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_191(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_192(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_193(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_194(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_195(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_196(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_197(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_198(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_199(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_200(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_201(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_202(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_203(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_204(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_205(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_206(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_207(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_208(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_209(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_210(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_211(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_212(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_213(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_214(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_215(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_216(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_217(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_218(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_219(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_220(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_221(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_222(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_223(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_224(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_225(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_226(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_227(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_228(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_229(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_230(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_231(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_232(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_233(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_234(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_235(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_236(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_237(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_238(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_239(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_240(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_241(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_242(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_243(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_244(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_245(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_246(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_247(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_248(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_249(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_250(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_251(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_252(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_253(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_254(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_255(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_256(s, p, o, m) 0\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/repeat.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP\n# define BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# /* BOOST_PP_REPEAT */\n#\n# if 0\n#    define BOOST_PP_REPEAT(count, macro, data)\n# endif\n#\n# define BOOST_PP_REPEAT BOOST_PP_CAT(BOOST_PP_REPEAT_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# define BOOST_PP_REPEAT_P(n) BOOST_PP_CAT(BOOST_PP_REPEAT_CHECK_, BOOST_PP_REPEAT_ ## n(1, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3, BOOST_PP_NIL))\n#\n# define BOOST_PP_REPEAT_CHECK_BOOST_PP_NIL 1\n# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_1(c, m, d) 0\n# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_2(c, m, d) 0\n# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_3(c, m, d) 0\n#\n# define BOOST_PP_REPEAT_1(c, m, d) BOOST_PP_REPEAT_1_I(c, m, d)\n# define BOOST_PP_REPEAT_2(c, m, d) BOOST_PP_REPEAT_2_I(c, m, d)\n# define BOOST_PP_REPEAT_3(c, m, d) BOOST_PP_REPEAT_3_I(c, m, d)\n# define BOOST_PP_REPEAT_4(c, m, d) BOOST_PP_ERROR(0x0003)\n#\n# define BOOST_PP_REPEAT_1_I(c, m, d) BOOST_PP_REPEAT_1_ ## c(m, d)\n# define BOOST_PP_REPEAT_2_I(c, m, d) BOOST_PP_REPEAT_2_ ## c(m, d)\n# define BOOST_PP_REPEAT_3_I(c, m, d) BOOST_PP_REPEAT_3_ ## c(m, d)\n#\n# define BOOST_PP_REPEAT_1ST BOOST_PP_REPEAT_1\n# define BOOST_PP_REPEAT_2ND BOOST_PP_REPEAT_2\n# define BOOST_PP_REPEAT_3RD BOOST_PP_REPEAT_3\n#\n# define BOOST_PP_REPEAT_1_0(m, d)\n# define BOOST_PP_REPEAT_1_1(m, d) m(2, 0, d)\n# define BOOST_PP_REPEAT_1_2(m, d) BOOST_PP_REPEAT_1_1(m, d) m(2, 1, d)\n# define BOOST_PP_REPEAT_1_3(m, d) BOOST_PP_REPEAT_1_2(m, d) m(2, 2, d)\n# define BOOST_PP_REPEAT_1_4(m, d) BOOST_PP_REPEAT_1_3(m, d) m(2, 3, d)\n# define BOOST_PP_REPEAT_1_5(m, d) BOOST_PP_REPEAT_1_4(m, d) m(2, 4, d)\n# define BOOST_PP_REPEAT_1_6(m, d) BOOST_PP_REPEAT_1_5(m, d) m(2, 5, d)\n# define BOOST_PP_REPEAT_1_7(m, d) BOOST_PP_REPEAT_1_6(m, d) m(2, 6, d)\n# define BOOST_PP_REPEAT_1_8(m, d) BOOST_PP_REPEAT_1_7(m, d) m(2, 7, d)\n# define BOOST_PP_REPEAT_1_9(m, d) BOOST_PP_REPEAT_1_8(m, d) m(2, 8, d)\n# define BOOST_PP_REPEAT_1_10(m, d) BOOST_PP_REPEAT_1_9(m, d) m(2, 9, d)\n# define BOOST_PP_REPEAT_1_11(m, d) BOOST_PP_REPEAT_1_10(m, d) m(2, 10, d)\n# define BOOST_PP_REPEAT_1_12(m, d) BOOST_PP_REPEAT_1_11(m, d) m(2, 11, d)\n# define BOOST_PP_REPEAT_1_13(m, d) BOOST_PP_REPEAT_1_12(m, d) m(2, 12, d)\n# define BOOST_PP_REPEAT_1_14(m, d) BOOST_PP_REPEAT_1_13(m, d) m(2, 13, d)\n# define BOOST_PP_REPEAT_1_15(m, d) BOOST_PP_REPEAT_1_14(m, d) m(2, 14, d)\n# define BOOST_PP_REPEAT_1_16(m, d) BOOST_PP_REPEAT_1_15(m, d) m(2, 15, d)\n# define BOOST_PP_REPEAT_1_17(m, d) BOOST_PP_REPEAT_1_16(m, d) m(2, 16, d)\n# define BOOST_PP_REPEAT_1_18(m, d) BOOST_PP_REPEAT_1_17(m, d) m(2, 17, d)\n# define BOOST_PP_REPEAT_1_19(m, d) BOOST_PP_REPEAT_1_18(m, d) m(2, 18, d)\n# define BOOST_PP_REPEAT_1_20(m, d) BOOST_PP_REPEAT_1_19(m, d) m(2, 19, d)\n# define BOOST_PP_REPEAT_1_21(m, d) BOOST_PP_REPEAT_1_20(m, d) m(2, 20, d)\n# define BOOST_PP_REPEAT_1_22(m, d) BOOST_PP_REPEAT_1_21(m, d) m(2, 21, d)\n# define BOOST_PP_REPEAT_1_23(m, d) BOOST_PP_REPEAT_1_22(m, d) m(2, 22, d)\n# define BOOST_PP_REPEAT_1_24(m, d) BOOST_PP_REPEAT_1_23(m, d) m(2, 23, d)\n# define BOOST_PP_REPEAT_1_25(m, d) BOOST_PP_REPEAT_1_24(m, d) m(2, 24, d)\n# define BOOST_PP_REPEAT_1_26(m, d) BOOST_PP_REPEAT_1_25(m, d) m(2, 25, d)\n# define BOOST_PP_REPEAT_1_27(m, d) BOOST_PP_REPEAT_1_26(m, d) m(2, 26, d)\n# define BOOST_PP_REPEAT_1_28(m, d) BOOST_PP_REPEAT_1_27(m, d) m(2, 27, d)\n# define BOOST_PP_REPEAT_1_29(m, d) BOOST_PP_REPEAT_1_28(m, d) m(2, 28, d)\n# define BOOST_PP_REPEAT_1_30(m, d) BOOST_PP_REPEAT_1_29(m, d) m(2, 29, d)\n# define BOOST_PP_REPEAT_1_31(m, d) BOOST_PP_REPEAT_1_30(m, d) m(2, 30, d)\n# define BOOST_PP_REPEAT_1_32(m, d) BOOST_PP_REPEAT_1_31(m, d) m(2, 31, d)\n# define BOOST_PP_REPEAT_1_33(m, d) BOOST_PP_REPEAT_1_32(m, d) m(2, 32, d)\n# define BOOST_PP_REPEAT_1_34(m, d) BOOST_PP_REPEAT_1_33(m, d) m(2, 33, d)\n# define BOOST_PP_REPEAT_1_35(m, d) BOOST_PP_REPEAT_1_34(m, d) m(2, 34, d)\n# define BOOST_PP_REPEAT_1_36(m, d) BOOST_PP_REPEAT_1_35(m, d) m(2, 35, d)\n# define BOOST_PP_REPEAT_1_37(m, d) BOOST_PP_REPEAT_1_36(m, d) m(2, 36, d)\n# define BOOST_PP_REPEAT_1_38(m, d) BOOST_PP_REPEAT_1_37(m, d) m(2, 37, d)\n# define BOOST_PP_REPEAT_1_39(m, d) BOOST_PP_REPEAT_1_38(m, d) m(2, 38, d)\n# define BOOST_PP_REPEAT_1_40(m, d) BOOST_PP_REPEAT_1_39(m, d) m(2, 39, d)\n# define BOOST_PP_REPEAT_1_41(m, d) BOOST_PP_REPEAT_1_40(m, d) m(2, 40, d)\n# define BOOST_PP_REPEAT_1_42(m, d) BOOST_PP_REPEAT_1_41(m, d) m(2, 41, d)\n# define BOOST_PP_REPEAT_1_43(m, d) BOOST_PP_REPEAT_1_42(m, d) m(2, 42, d)\n# define BOOST_PP_REPEAT_1_44(m, d) BOOST_PP_REPEAT_1_43(m, d) m(2, 43, d)\n# define BOOST_PP_REPEAT_1_45(m, d) BOOST_PP_REPEAT_1_44(m, d) m(2, 44, d)\n# define BOOST_PP_REPEAT_1_46(m, d) BOOST_PP_REPEAT_1_45(m, d) m(2, 45, d)\n# define BOOST_PP_REPEAT_1_47(m, d) BOOST_PP_REPEAT_1_46(m, d) m(2, 46, d)\n# define BOOST_PP_REPEAT_1_48(m, d) BOOST_PP_REPEAT_1_47(m, d) m(2, 47, d)\n# define BOOST_PP_REPEAT_1_49(m, d) BOOST_PP_REPEAT_1_48(m, d) m(2, 48, d)\n# define BOOST_PP_REPEAT_1_50(m, d) BOOST_PP_REPEAT_1_49(m, d) m(2, 49, d)\n# define BOOST_PP_REPEAT_1_51(m, d) BOOST_PP_REPEAT_1_50(m, d) m(2, 50, d)\n# define BOOST_PP_REPEAT_1_52(m, d) BOOST_PP_REPEAT_1_51(m, d) m(2, 51, d)\n# define BOOST_PP_REPEAT_1_53(m, d) BOOST_PP_REPEAT_1_52(m, d) m(2, 52, d)\n# define BOOST_PP_REPEAT_1_54(m, d) BOOST_PP_REPEAT_1_53(m, d) m(2, 53, d)\n# define BOOST_PP_REPEAT_1_55(m, d) BOOST_PP_REPEAT_1_54(m, d) m(2, 54, d)\n# define BOOST_PP_REPEAT_1_56(m, d) BOOST_PP_REPEAT_1_55(m, d) m(2, 55, d)\n# define BOOST_PP_REPEAT_1_57(m, d) BOOST_PP_REPEAT_1_56(m, d) m(2, 56, d)\n# define BOOST_PP_REPEAT_1_58(m, d) BOOST_PP_REPEAT_1_57(m, d) m(2, 57, d)\n# define BOOST_PP_REPEAT_1_59(m, d) BOOST_PP_REPEAT_1_58(m, d) m(2, 58, d)\n# define BOOST_PP_REPEAT_1_60(m, d) BOOST_PP_REPEAT_1_59(m, d) m(2, 59, d)\n# define BOOST_PP_REPEAT_1_61(m, d) BOOST_PP_REPEAT_1_60(m, d) m(2, 60, d)\n# define BOOST_PP_REPEAT_1_62(m, d) BOOST_PP_REPEAT_1_61(m, d) m(2, 61, d)\n# define BOOST_PP_REPEAT_1_63(m, d) BOOST_PP_REPEAT_1_62(m, d) m(2, 62, d)\n# define BOOST_PP_REPEAT_1_64(m, d) BOOST_PP_REPEAT_1_63(m, d) m(2, 63, d)\n# define BOOST_PP_REPEAT_1_65(m, d) BOOST_PP_REPEAT_1_64(m, d) m(2, 64, d)\n# define BOOST_PP_REPEAT_1_66(m, d) BOOST_PP_REPEAT_1_65(m, d) m(2, 65, d)\n# define BOOST_PP_REPEAT_1_67(m, d) BOOST_PP_REPEAT_1_66(m, d) m(2, 66, d)\n# define BOOST_PP_REPEAT_1_68(m, d) BOOST_PP_REPEAT_1_67(m, d) m(2, 67, d)\n# define BOOST_PP_REPEAT_1_69(m, d) BOOST_PP_REPEAT_1_68(m, d) m(2, 68, d)\n# define BOOST_PP_REPEAT_1_70(m, d) BOOST_PP_REPEAT_1_69(m, d) m(2, 69, d)\n# define BOOST_PP_REPEAT_1_71(m, d) BOOST_PP_REPEAT_1_70(m, d) m(2, 70, d)\n# define BOOST_PP_REPEAT_1_72(m, d) BOOST_PP_REPEAT_1_71(m, d) m(2, 71, d)\n# define BOOST_PP_REPEAT_1_73(m, d) BOOST_PP_REPEAT_1_72(m, d) m(2, 72, d)\n# define BOOST_PP_REPEAT_1_74(m, d) BOOST_PP_REPEAT_1_73(m, d) m(2, 73, d)\n# define BOOST_PP_REPEAT_1_75(m, d) BOOST_PP_REPEAT_1_74(m, d) m(2, 74, d)\n# define BOOST_PP_REPEAT_1_76(m, d) BOOST_PP_REPEAT_1_75(m, d) m(2, 75, d)\n# define BOOST_PP_REPEAT_1_77(m, d) BOOST_PP_REPEAT_1_76(m, d) m(2, 76, d)\n# define BOOST_PP_REPEAT_1_78(m, d) BOOST_PP_REPEAT_1_77(m, d) m(2, 77, d)\n# define BOOST_PP_REPEAT_1_79(m, d) BOOST_PP_REPEAT_1_78(m, d) m(2, 78, d)\n# define BOOST_PP_REPEAT_1_80(m, d) BOOST_PP_REPEAT_1_79(m, d) m(2, 79, d)\n# define BOOST_PP_REPEAT_1_81(m, d) BOOST_PP_REPEAT_1_80(m, d) m(2, 80, d)\n# define BOOST_PP_REPEAT_1_82(m, d) BOOST_PP_REPEAT_1_81(m, d) m(2, 81, d)\n# define BOOST_PP_REPEAT_1_83(m, d) BOOST_PP_REPEAT_1_82(m, d) m(2, 82, d)\n# define BOOST_PP_REPEAT_1_84(m, d) BOOST_PP_REPEAT_1_83(m, d) m(2, 83, d)\n# define BOOST_PP_REPEAT_1_85(m, d) BOOST_PP_REPEAT_1_84(m, d) m(2, 84, d)\n# define BOOST_PP_REPEAT_1_86(m, d) BOOST_PP_REPEAT_1_85(m, d) m(2, 85, d)\n# define BOOST_PP_REPEAT_1_87(m, d) BOOST_PP_REPEAT_1_86(m, d) m(2, 86, d)\n# define BOOST_PP_REPEAT_1_88(m, d) BOOST_PP_REPEAT_1_87(m, d) m(2, 87, d)\n# define BOOST_PP_REPEAT_1_89(m, d) BOOST_PP_REPEAT_1_88(m, d) m(2, 88, d)\n# define BOOST_PP_REPEAT_1_90(m, d) BOOST_PP_REPEAT_1_89(m, d) m(2, 89, d)\n# define BOOST_PP_REPEAT_1_91(m, d) BOOST_PP_REPEAT_1_90(m, d) m(2, 90, d)\n# define BOOST_PP_REPEAT_1_92(m, d) BOOST_PP_REPEAT_1_91(m, d) m(2, 91, d)\n# define BOOST_PP_REPEAT_1_93(m, d) BOOST_PP_REPEAT_1_92(m, d) m(2, 92, d)\n# define BOOST_PP_REPEAT_1_94(m, d) BOOST_PP_REPEAT_1_93(m, d) m(2, 93, d)\n# define BOOST_PP_REPEAT_1_95(m, d) BOOST_PP_REPEAT_1_94(m, d) m(2, 94, d)\n# define BOOST_PP_REPEAT_1_96(m, d) BOOST_PP_REPEAT_1_95(m, d) m(2, 95, d)\n# define BOOST_PP_REPEAT_1_97(m, d) BOOST_PP_REPEAT_1_96(m, d) m(2, 96, d)\n# define BOOST_PP_REPEAT_1_98(m, d) BOOST_PP_REPEAT_1_97(m, d) m(2, 97, d)\n# define BOOST_PP_REPEAT_1_99(m, d) BOOST_PP_REPEAT_1_98(m, d) m(2, 98, d)\n# define BOOST_PP_REPEAT_1_100(m, d) BOOST_PP_REPEAT_1_99(m, d) m(2, 99, d)\n# define BOOST_PP_REPEAT_1_101(m, d) BOOST_PP_REPEAT_1_100(m, d) m(2, 100, d)\n# define BOOST_PP_REPEAT_1_102(m, d) BOOST_PP_REPEAT_1_101(m, d) m(2, 101, d)\n# define BOOST_PP_REPEAT_1_103(m, d) BOOST_PP_REPEAT_1_102(m, d) m(2, 102, d)\n# define BOOST_PP_REPEAT_1_104(m, d) BOOST_PP_REPEAT_1_103(m, d) m(2, 103, d)\n# define BOOST_PP_REPEAT_1_105(m, d) BOOST_PP_REPEAT_1_104(m, d) m(2, 104, d)\n# define BOOST_PP_REPEAT_1_106(m, d) BOOST_PP_REPEAT_1_105(m, d) m(2, 105, d)\n# define BOOST_PP_REPEAT_1_107(m, d) BOOST_PP_REPEAT_1_106(m, d) m(2, 106, d)\n# define BOOST_PP_REPEAT_1_108(m, d) BOOST_PP_REPEAT_1_107(m, d) m(2, 107, d)\n# define BOOST_PP_REPEAT_1_109(m, d) BOOST_PP_REPEAT_1_108(m, d) m(2, 108, d)\n# define BOOST_PP_REPEAT_1_110(m, d) BOOST_PP_REPEAT_1_109(m, d) m(2, 109, d)\n# define BOOST_PP_REPEAT_1_111(m, d) BOOST_PP_REPEAT_1_110(m, d) m(2, 110, d)\n# define BOOST_PP_REPEAT_1_112(m, d) BOOST_PP_REPEAT_1_111(m, d) m(2, 111, d)\n# define BOOST_PP_REPEAT_1_113(m, d) BOOST_PP_REPEAT_1_112(m, d) m(2, 112, d)\n# define BOOST_PP_REPEAT_1_114(m, d) BOOST_PP_REPEAT_1_113(m, d) m(2, 113, d)\n# define BOOST_PP_REPEAT_1_115(m, d) BOOST_PP_REPEAT_1_114(m, d) m(2, 114, d)\n# define BOOST_PP_REPEAT_1_116(m, d) BOOST_PP_REPEAT_1_115(m, d) m(2, 115, d)\n# define BOOST_PP_REPEAT_1_117(m, d) BOOST_PP_REPEAT_1_116(m, d) m(2, 116, d)\n# define BOOST_PP_REPEAT_1_118(m, d) BOOST_PP_REPEAT_1_117(m, d) m(2, 117, d)\n# define BOOST_PP_REPEAT_1_119(m, d) BOOST_PP_REPEAT_1_118(m, d) m(2, 118, d)\n# define BOOST_PP_REPEAT_1_120(m, d) BOOST_PP_REPEAT_1_119(m, d) m(2, 119, d)\n# define BOOST_PP_REPEAT_1_121(m, d) BOOST_PP_REPEAT_1_120(m, d) m(2, 120, d)\n# define BOOST_PP_REPEAT_1_122(m, d) BOOST_PP_REPEAT_1_121(m, d) m(2, 121, d)\n# define BOOST_PP_REPEAT_1_123(m, d) BOOST_PP_REPEAT_1_122(m, d) m(2, 122, d)\n# define BOOST_PP_REPEAT_1_124(m, d) BOOST_PP_REPEAT_1_123(m, d) m(2, 123, d)\n# define BOOST_PP_REPEAT_1_125(m, d) BOOST_PP_REPEAT_1_124(m, d) m(2, 124, d)\n# define BOOST_PP_REPEAT_1_126(m, d) BOOST_PP_REPEAT_1_125(m, d) m(2, 125, d)\n# define BOOST_PP_REPEAT_1_127(m, d) BOOST_PP_REPEAT_1_126(m, d) m(2, 126, d)\n# define BOOST_PP_REPEAT_1_128(m, d) BOOST_PP_REPEAT_1_127(m, d) m(2, 127, d)\n# define BOOST_PP_REPEAT_1_129(m, d) BOOST_PP_REPEAT_1_128(m, d) m(2, 128, d)\n# define BOOST_PP_REPEAT_1_130(m, d) BOOST_PP_REPEAT_1_129(m, d) m(2, 129, d)\n# define BOOST_PP_REPEAT_1_131(m, d) BOOST_PP_REPEAT_1_130(m, d) m(2, 130, d)\n# define BOOST_PP_REPEAT_1_132(m, d) BOOST_PP_REPEAT_1_131(m, d) m(2, 131, d)\n# define BOOST_PP_REPEAT_1_133(m, d) BOOST_PP_REPEAT_1_132(m, d) m(2, 132, d)\n# define BOOST_PP_REPEAT_1_134(m, d) BOOST_PP_REPEAT_1_133(m, d) m(2, 133, d)\n# define BOOST_PP_REPEAT_1_135(m, d) BOOST_PP_REPEAT_1_134(m, d) m(2, 134, d)\n# define BOOST_PP_REPEAT_1_136(m, d) BOOST_PP_REPEAT_1_135(m, d) m(2, 135, d)\n# define BOOST_PP_REPEAT_1_137(m, d) BOOST_PP_REPEAT_1_136(m, d) m(2, 136, d)\n# define BOOST_PP_REPEAT_1_138(m, d) BOOST_PP_REPEAT_1_137(m, d) m(2, 137, d)\n# define BOOST_PP_REPEAT_1_139(m, d) BOOST_PP_REPEAT_1_138(m, d) m(2, 138, d)\n# define BOOST_PP_REPEAT_1_140(m, d) BOOST_PP_REPEAT_1_139(m, d) m(2, 139, d)\n# define BOOST_PP_REPEAT_1_141(m, d) BOOST_PP_REPEAT_1_140(m, d) m(2, 140, d)\n# define BOOST_PP_REPEAT_1_142(m, d) BOOST_PP_REPEAT_1_141(m, d) m(2, 141, d)\n# define BOOST_PP_REPEAT_1_143(m, d) BOOST_PP_REPEAT_1_142(m, d) m(2, 142, d)\n# define BOOST_PP_REPEAT_1_144(m, d) BOOST_PP_REPEAT_1_143(m, d) m(2, 143, d)\n# define BOOST_PP_REPEAT_1_145(m, d) BOOST_PP_REPEAT_1_144(m, d) m(2, 144, d)\n# define BOOST_PP_REPEAT_1_146(m, d) BOOST_PP_REPEAT_1_145(m, d) m(2, 145, d)\n# define BOOST_PP_REPEAT_1_147(m, d) BOOST_PP_REPEAT_1_146(m, d) m(2, 146, d)\n# define BOOST_PP_REPEAT_1_148(m, d) BOOST_PP_REPEAT_1_147(m, d) m(2, 147, d)\n# define BOOST_PP_REPEAT_1_149(m, d) BOOST_PP_REPEAT_1_148(m, d) m(2, 148, d)\n# define BOOST_PP_REPEAT_1_150(m, d) BOOST_PP_REPEAT_1_149(m, d) m(2, 149, d)\n# define BOOST_PP_REPEAT_1_151(m, d) BOOST_PP_REPEAT_1_150(m, d) m(2, 150, d)\n# define BOOST_PP_REPEAT_1_152(m, d) BOOST_PP_REPEAT_1_151(m, d) m(2, 151, d)\n# define BOOST_PP_REPEAT_1_153(m, d) BOOST_PP_REPEAT_1_152(m, d) m(2, 152, d)\n# define BOOST_PP_REPEAT_1_154(m, d) BOOST_PP_REPEAT_1_153(m, d) m(2, 153, d)\n# define BOOST_PP_REPEAT_1_155(m, d) BOOST_PP_REPEAT_1_154(m, d) m(2, 154, d)\n# define BOOST_PP_REPEAT_1_156(m, d) BOOST_PP_REPEAT_1_155(m, d) m(2, 155, d)\n# define BOOST_PP_REPEAT_1_157(m, d) BOOST_PP_REPEAT_1_156(m, d) m(2, 156, d)\n# define BOOST_PP_REPEAT_1_158(m, d) BOOST_PP_REPEAT_1_157(m, d) m(2, 157, d)\n# define BOOST_PP_REPEAT_1_159(m, d) BOOST_PP_REPEAT_1_158(m, d) m(2, 158, d)\n# define BOOST_PP_REPEAT_1_160(m, d) BOOST_PP_REPEAT_1_159(m, d) m(2, 159, d)\n# define BOOST_PP_REPEAT_1_161(m, d) BOOST_PP_REPEAT_1_160(m, d) m(2, 160, d)\n# define BOOST_PP_REPEAT_1_162(m, d) BOOST_PP_REPEAT_1_161(m, d) m(2, 161, d)\n# define BOOST_PP_REPEAT_1_163(m, d) BOOST_PP_REPEAT_1_162(m, d) m(2, 162, d)\n# define BOOST_PP_REPEAT_1_164(m, d) BOOST_PP_REPEAT_1_163(m, d) m(2, 163, d)\n# define BOOST_PP_REPEAT_1_165(m, d) BOOST_PP_REPEAT_1_164(m, d) m(2, 164, d)\n# define BOOST_PP_REPEAT_1_166(m, d) BOOST_PP_REPEAT_1_165(m, d) m(2, 165, d)\n# define BOOST_PP_REPEAT_1_167(m, d) BOOST_PP_REPEAT_1_166(m, d) m(2, 166, d)\n# define BOOST_PP_REPEAT_1_168(m, d) BOOST_PP_REPEAT_1_167(m, d) m(2, 167, d)\n# define BOOST_PP_REPEAT_1_169(m, d) BOOST_PP_REPEAT_1_168(m, d) m(2, 168, d)\n# define BOOST_PP_REPEAT_1_170(m, d) BOOST_PP_REPEAT_1_169(m, d) m(2, 169, d)\n# define BOOST_PP_REPEAT_1_171(m, d) BOOST_PP_REPEAT_1_170(m, d) m(2, 170, d)\n# define BOOST_PP_REPEAT_1_172(m, d) BOOST_PP_REPEAT_1_171(m, d) m(2, 171, d)\n# define BOOST_PP_REPEAT_1_173(m, d) BOOST_PP_REPEAT_1_172(m, d) m(2, 172, d)\n# define BOOST_PP_REPEAT_1_174(m, d) BOOST_PP_REPEAT_1_173(m, d) m(2, 173, d)\n# define BOOST_PP_REPEAT_1_175(m, d) BOOST_PP_REPEAT_1_174(m, d) m(2, 174, d)\n# define BOOST_PP_REPEAT_1_176(m, d) BOOST_PP_REPEAT_1_175(m, d) m(2, 175, d)\n# define BOOST_PP_REPEAT_1_177(m, d) BOOST_PP_REPEAT_1_176(m, d) m(2, 176, d)\n# define BOOST_PP_REPEAT_1_178(m, d) BOOST_PP_REPEAT_1_177(m, d) m(2, 177, d)\n# define BOOST_PP_REPEAT_1_179(m, d) BOOST_PP_REPEAT_1_178(m, d) m(2, 178, d)\n# define BOOST_PP_REPEAT_1_180(m, d) BOOST_PP_REPEAT_1_179(m, d) m(2, 179, d)\n# define BOOST_PP_REPEAT_1_181(m, d) BOOST_PP_REPEAT_1_180(m, d) m(2, 180, d)\n# define BOOST_PP_REPEAT_1_182(m, d) BOOST_PP_REPEAT_1_181(m, d) m(2, 181, d)\n# define BOOST_PP_REPEAT_1_183(m, d) BOOST_PP_REPEAT_1_182(m, d) m(2, 182, d)\n# define BOOST_PP_REPEAT_1_184(m, d) BOOST_PP_REPEAT_1_183(m, d) m(2, 183, d)\n# define BOOST_PP_REPEAT_1_185(m, d) BOOST_PP_REPEAT_1_184(m, d) m(2, 184, d)\n# define BOOST_PP_REPEAT_1_186(m, d) BOOST_PP_REPEAT_1_185(m, d) m(2, 185, d)\n# define BOOST_PP_REPEAT_1_187(m, d) BOOST_PP_REPEAT_1_186(m, d) m(2, 186, d)\n# define BOOST_PP_REPEAT_1_188(m, d) BOOST_PP_REPEAT_1_187(m, d) m(2, 187, d)\n# define BOOST_PP_REPEAT_1_189(m, d) BOOST_PP_REPEAT_1_188(m, d) m(2, 188, d)\n# define BOOST_PP_REPEAT_1_190(m, d) BOOST_PP_REPEAT_1_189(m, d) m(2, 189, d)\n# define BOOST_PP_REPEAT_1_191(m, d) BOOST_PP_REPEAT_1_190(m, d) m(2, 190, d)\n# define BOOST_PP_REPEAT_1_192(m, d) BOOST_PP_REPEAT_1_191(m, d) m(2, 191, d)\n# define BOOST_PP_REPEAT_1_193(m, d) BOOST_PP_REPEAT_1_192(m, d) m(2, 192, d)\n# define BOOST_PP_REPEAT_1_194(m, d) BOOST_PP_REPEAT_1_193(m, d) m(2, 193, d)\n# define BOOST_PP_REPEAT_1_195(m, d) BOOST_PP_REPEAT_1_194(m, d) m(2, 194, d)\n# define BOOST_PP_REPEAT_1_196(m, d) BOOST_PP_REPEAT_1_195(m, d) m(2, 195, d)\n# define BOOST_PP_REPEAT_1_197(m, d) BOOST_PP_REPEAT_1_196(m, d) m(2, 196, d)\n# define BOOST_PP_REPEAT_1_198(m, d) BOOST_PP_REPEAT_1_197(m, d) m(2, 197, d)\n# define BOOST_PP_REPEAT_1_199(m, d) BOOST_PP_REPEAT_1_198(m, d) m(2, 198, d)\n# define BOOST_PP_REPEAT_1_200(m, d) BOOST_PP_REPEAT_1_199(m, d) m(2, 199, d)\n# define BOOST_PP_REPEAT_1_201(m, d) BOOST_PP_REPEAT_1_200(m, d) m(2, 200, d)\n# define BOOST_PP_REPEAT_1_202(m, d) BOOST_PP_REPEAT_1_201(m, d) m(2, 201, d)\n# define BOOST_PP_REPEAT_1_203(m, d) BOOST_PP_REPEAT_1_202(m, d) m(2, 202, d)\n# define BOOST_PP_REPEAT_1_204(m, d) BOOST_PP_REPEAT_1_203(m, d) m(2, 203, d)\n# define BOOST_PP_REPEAT_1_205(m, d) BOOST_PP_REPEAT_1_204(m, d) m(2, 204, d)\n# define BOOST_PP_REPEAT_1_206(m, d) BOOST_PP_REPEAT_1_205(m, d) m(2, 205, d)\n# define BOOST_PP_REPEAT_1_207(m, d) BOOST_PP_REPEAT_1_206(m, d) m(2, 206, d)\n# define BOOST_PP_REPEAT_1_208(m, d) BOOST_PP_REPEAT_1_207(m, d) m(2, 207, d)\n# define BOOST_PP_REPEAT_1_209(m, d) BOOST_PP_REPEAT_1_208(m, d) m(2, 208, d)\n# define BOOST_PP_REPEAT_1_210(m, d) BOOST_PP_REPEAT_1_209(m, d) m(2, 209, d)\n# define BOOST_PP_REPEAT_1_211(m, d) BOOST_PP_REPEAT_1_210(m, d) m(2, 210, d)\n# define BOOST_PP_REPEAT_1_212(m, d) BOOST_PP_REPEAT_1_211(m, d) m(2, 211, d)\n# define BOOST_PP_REPEAT_1_213(m, d) BOOST_PP_REPEAT_1_212(m, d) m(2, 212, d)\n# define BOOST_PP_REPEAT_1_214(m, d) BOOST_PP_REPEAT_1_213(m, d) m(2, 213, d)\n# define BOOST_PP_REPEAT_1_215(m, d) BOOST_PP_REPEAT_1_214(m, d) m(2, 214, d)\n# define BOOST_PP_REPEAT_1_216(m, d) BOOST_PP_REPEAT_1_215(m, d) m(2, 215, d)\n# define BOOST_PP_REPEAT_1_217(m, d) BOOST_PP_REPEAT_1_216(m, d) m(2, 216, d)\n# define BOOST_PP_REPEAT_1_218(m, d) BOOST_PP_REPEAT_1_217(m, d) m(2, 217, d)\n# define BOOST_PP_REPEAT_1_219(m, d) BOOST_PP_REPEAT_1_218(m, d) m(2, 218, d)\n# define BOOST_PP_REPEAT_1_220(m, d) BOOST_PP_REPEAT_1_219(m, d) m(2, 219, d)\n# define BOOST_PP_REPEAT_1_221(m, d) BOOST_PP_REPEAT_1_220(m, d) m(2, 220, d)\n# define BOOST_PP_REPEAT_1_222(m, d) BOOST_PP_REPEAT_1_221(m, d) m(2, 221, d)\n# define BOOST_PP_REPEAT_1_223(m, d) BOOST_PP_REPEAT_1_222(m, d) m(2, 222, d)\n# define BOOST_PP_REPEAT_1_224(m, d) BOOST_PP_REPEAT_1_223(m, d) m(2, 223, d)\n# define BOOST_PP_REPEAT_1_225(m, d) BOOST_PP_REPEAT_1_224(m, d) m(2, 224, d)\n# define BOOST_PP_REPEAT_1_226(m, d) BOOST_PP_REPEAT_1_225(m, d) m(2, 225, d)\n# define BOOST_PP_REPEAT_1_227(m, d) BOOST_PP_REPEAT_1_226(m, d) m(2, 226, d)\n# define BOOST_PP_REPEAT_1_228(m, d) BOOST_PP_REPEAT_1_227(m, d) m(2, 227, d)\n# define BOOST_PP_REPEAT_1_229(m, d) BOOST_PP_REPEAT_1_228(m, d) m(2, 228, d)\n# define BOOST_PP_REPEAT_1_230(m, d) BOOST_PP_REPEAT_1_229(m, d) m(2, 229, d)\n# define BOOST_PP_REPEAT_1_231(m, d) BOOST_PP_REPEAT_1_230(m, d) m(2, 230, d)\n# define BOOST_PP_REPEAT_1_232(m, d) BOOST_PP_REPEAT_1_231(m, d) m(2, 231, d)\n# define BOOST_PP_REPEAT_1_233(m, d) BOOST_PP_REPEAT_1_232(m, d) m(2, 232, d)\n# define BOOST_PP_REPEAT_1_234(m, d) BOOST_PP_REPEAT_1_233(m, d) m(2, 233, d)\n# define BOOST_PP_REPEAT_1_235(m, d) BOOST_PP_REPEAT_1_234(m, d) m(2, 234, d)\n# define BOOST_PP_REPEAT_1_236(m, d) BOOST_PP_REPEAT_1_235(m, d) m(2, 235, d)\n# define BOOST_PP_REPEAT_1_237(m, d) BOOST_PP_REPEAT_1_236(m, d) m(2, 236, d)\n# define BOOST_PP_REPEAT_1_238(m, d) BOOST_PP_REPEAT_1_237(m, d) m(2, 237, d)\n# define BOOST_PP_REPEAT_1_239(m, d) BOOST_PP_REPEAT_1_238(m, d) m(2, 238, d)\n# define BOOST_PP_REPEAT_1_240(m, d) BOOST_PP_REPEAT_1_239(m, d) m(2, 239, d)\n# define BOOST_PP_REPEAT_1_241(m, d) BOOST_PP_REPEAT_1_240(m, d) m(2, 240, d)\n# define BOOST_PP_REPEAT_1_242(m, d) BOOST_PP_REPEAT_1_241(m, d) m(2, 241, d)\n# define BOOST_PP_REPEAT_1_243(m, d) BOOST_PP_REPEAT_1_242(m, d) m(2, 242, d)\n# define BOOST_PP_REPEAT_1_244(m, d) BOOST_PP_REPEAT_1_243(m, d) m(2, 243, d)\n# define BOOST_PP_REPEAT_1_245(m, d) BOOST_PP_REPEAT_1_244(m, d) m(2, 244, d)\n# define BOOST_PP_REPEAT_1_246(m, d) BOOST_PP_REPEAT_1_245(m, d) m(2, 245, d)\n# define BOOST_PP_REPEAT_1_247(m, d) BOOST_PP_REPEAT_1_246(m, d) m(2, 246, d)\n# define BOOST_PP_REPEAT_1_248(m, d) BOOST_PP_REPEAT_1_247(m, d) m(2, 247, d)\n# define BOOST_PP_REPEAT_1_249(m, d) BOOST_PP_REPEAT_1_248(m, d) m(2, 248, d)\n# define BOOST_PP_REPEAT_1_250(m, d) BOOST_PP_REPEAT_1_249(m, d) m(2, 249, d)\n# define BOOST_PP_REPEAT_1_251(m, d) BOOST_PP_REPEAT_1_250(m, d) m(2, 250, d)\n# define BOOST_PP_REPEAT_1_252(m, d) BOOST_PP_REPEAT_1_251(m, d) m(2, 251, d)\n# define BOOST_PP_REPEAT_1_253(m, d) BOOST_PP_REPEAT_1_252(m, d) m(2, 252, d)\n# define BOOST_PP_REPEAT_1_254(m, d) BOOST_PP_REPEAT_1_253(m, d) m(2, 253, d)\n# define BOOST_PP_REPEAT_1_255(m, d) BOOST_PP_REPEAT_1_254(m, d) m(2, 254, d)\n# define BOOST_PP_REPEAT_1_256(m, d) BOOST_PP_REPEAT_1_255(m, d) m(2, 255, d)\n#\n# define BOOST_PP_REPEAT_2_0(m, d)\n# define BOOST_PP_REPEAT_2_1(m, d) m(3, 0, d)\n# define BOOST_PP_REPEAT_2_2(m, d) BOOST_PP_REPEAT_2_1(m, d) m(3, 1, d)\n# define BOOST_PP_REPEAT_2_3(m, d) BOOST_PP_REPEAT_2_2(m, d) m(3, 2, d)\n# define BOOST_PP_REPEAT_2_4(m, d) BOOST_PP_REPEAT_2_3(m, d) m(3, 3, d)\n# define BOOST_PP_REPEAT_2_5(m, d) BOOST_PP_REPEAT_2_4(m, d) m(3, 4, d)\n# define BOOST_PP_REPEAT_2_6(m, d) BOOST_PP_REPEAT_2_5(m, d) m(3, 5, d)\n# define BOOST_PP_REPEAT_2_7(m, d) BOOST_PP_REPEAT_2_6(m, d) m(3, 6, d)\n# define BOOST_PP_REPEAT_2_8(m, d) BOOST_PP_REPEAT_2_7(m, d) m(3, 7, d)\n# define BOOST_PP_REPEAT_2_9(m, d) BOOST_PP_REPEAT_2_8(m, d) m(3, 8, d)\n# define BOOST_PP_REPEAT_2_10(m, d) BOOST_PP_REPEAT_2_9(m, d) m(3, 9, d)\n# define BOOST_PP_REPEAT_2_11(m, d) BOOST_PP_REPEAT_2_10(m, d) m(3, 10, d)\n# define BOOST_PP_REPEAT_2_12(m, d) BOOST_PP_REPEAT_2_11(m, d) m(3, 11, d)\n# define BOOST_PP_REPEAT_2_13(m, d) BOOST_PP_REPEAT_2_12(m, d) m(3, 12, d)\n# define BOOST_PP_REPEAT_2_14(m, d) BOOST_PP_REPEAT_2_13(m, d) m(3, 13, d)\n# define BOOST_PP_REPEAT_2_15(m, d) BOOST_PP_REPEAT_2_14(m, d) m(3, 14, d)\n# define BOOST_PP_REPEAT_2_16(m, d) BOOST_PP_REPEAT_2_15(m, d) m(3, 15, d)\n# define BOOST_PP_REPEAT_2_17(m, d) BOOST_PP_REPEAT_2_16(m, d) m(3, 16, d)\n# define BOOST_PP_REPEAT_2_18(m, d) BOOST_PP_REPEAT_2_17(m, d) m(3, 17, d)\n# define BOOST_PP_REPEAT_2_19(m, d) BOOST_PP_REPEAT_2_18(m, d) m(3, 18, d)\n# define BOOST_PP_REPEAT_2_20(m, d) BOOST_PP_REPEAT_2_19(m, d) m(3, 19, d)\n# define BOOST_PP_REPEAT_2_21(m, d) BOOST_PP_REPEAT_2_20(m, d) m(3, 20, d)\n# define BOOST_PP_REPEAT_2_22(m, d) BOOST_PP_REPEAT_2_21(m, d) m(3, 21, d)\n# define BOOST_PP_REPEAT_2_23(m, d) BOOST_PP_REPEAT_2_22(m, d) m(3, 22, d)\n# define BOOST_PP_REPEAT_2_24(m, d) BOOST_PP_REPEAT_2_23(m, d) m(3, 23, d)\n# define BOOST_PP_REPEAT_2_25(m, d) BOOST_PP_REPEAT_2_24(m, d) m(3, 24, d)\n# define BOOST_PP_REPEAT_2_26(m, d) BOOST_PP_REPEAT_2_25(m, d) m(3, 25, d)\n# define BOOST_PP_REPEAT_2_27(m, d) BOOST_PP_REPEAT_2_26(m, d) m(3, 26, d)\n# define BOOST_PP_REPEAT_2_28(m, d) BOOST_PP_REPEAT_2_27(m, d) m(3, 27, d)\n# define BOOST_PP_REPEAT_2_29(m, d) BOOST_PP_REPEAT_2_28(m, d) m(3, 28, d)\n# define BOOST_PP_REPEAT_2_30(m, d) BOOST_PP_REPEAT_2_29(m, d) m(3, 29, d)\n# define BOOST_PP_REPEAT_2_31(m, d) BOOST_PP_REPEAT_2_30(m, d) m(3, 30, d)\n# define BOOST_PP_REPEAT_2_32(m, d) BOOST_PP_REPEAT_2_31(m, d) m(3, 31, d)\n# define BOOST_PP_REPEAT_2_33(m, d) BOOST_PP_REPEAT_2_32(m, d) m(3, 32, d)\n# define BOOST_PP_REPEAT_2_34(m, d) BOOST_PP_REPEAT_2_33(m, d) m(3, 33, d)\n# define BOOST_PP_REPEAT_2_35(m, d) BOOST_PP_REPEAT_2_34(m, d) m(3, 34, d)\n# define BOOST_PP_REPEAT_2_36(m, d) BOOST_PP_REPEAT_2_35(m, d) m(3, 35, d)\n# define BOOST_PP_REPEAT_2_37(m, d) BOOST_PP_REPEAT_2_36(m, d) m(3, 36, d)\n# define BOOST_PP_REPEAT_2_38(m, d) BOOST_PP_REPEAT_2_37(m, d) m(3, 37, d)\n# define BOOST_PP_REPEAT_2_39(m, d) BOOST_PP_REPEAT_2_38(m, d) m(3, 38, d)\n# define BOOST_PP_REPEAT_2_40(m, d) BOOST_PP_REPEAT_2_39(m, d) m(3, 39, d)\n# define BOOST_PP_REPEAT_2_41(m, d) BOOST_PP_REPEAT_2_40(m, d) m(3, 40, d)\n# define BOOST_PP_REPEAT_2_42(m, d) BOOST_PP_REPEAT_2_41(m, d) m(3, 41, d)\n# define BOOST_PP_REPEAT_2_43(m, d) BOOST_PP_REPEAT_2_42(m, d) m(3, 42, d)\n# define BOOST_PP_REPEAT_2_44(m, d) BOOST_PP_REPEAT_2_43(m, d) m(3, 43, d)\n# define BOOST_PP_REPEAT_2_45(m, d) BOOST_PP_REPEAT_2_44(m, d) m(3, 44, d)\n# define BOOST_PP_REPEAT_2_46(m, d) BOOST_PP_REPEAT_2_45(m, d) m(3, 45, d)\n# define BOOST_PP_REPEAT_2_47(m, d) BOOST_PP_REPEAT_2_46(m, d) m(3, 46, d)\n# define BOOST_PP_REPEAT_2_48(m, d) BOOST_PP_REPEAT_2_47(m, d) m(3, 47, d)\n# define BOOST_PP_REPEAT_2_49(m, d) BOOST_PP_REPEAT_2_48(m, d) m(3, 48, d)\n# define BOOST_PP_REPEAT_2_50(m, d) BOOST_PP_REPEAT_2_49(m, d) m(3, 49, d)\n# define BOOST_PP_REPEAT_2_51(m, d) BOOST_PP_REPEAT_2_50(m, d) m(3, 50, d)\n# define BOOST_PP_REPEAT_2_52(m, d) BOOST_PP_REPEAT_2_51(m, d) m(3, 51, d)\n# define BOOST_PP_REPEAT_2_53(m, d) BOOST_PP_REPEAT_2_52(m, d) m(3, 52, d)\n# define BOOST_PP_REPEAT_2_54(m, d) BOOST_PP_REPEAT_2_53(m, d) m(3, 53, d)\n# define BOOST_PP_REPEAT_2_55(m, d) BOOST_PP_REPEAT_2_54(m, d) m(3, 54, d)\n# define BOOST_PP_REPEAT_2_56(m, d) BOOST_PP_REPEAT_2_55(m, d) m(3, 55, d)\n# define BOOST_PP_REPEAT_2_57(m, d) BOOST_PP_REPEAT_2_56(m, d) m(3, 56, d)\n# define BOOST_PP_REPEAT_2_58(m, d) BOOST_PP_REPEAT_2_57(m, d) m(3, 57, d)\n# define BOOST_PP_REPEAT_2_59(m, d) BOOST_PP_REPEAT_2_58(m, d) m(3, 58, d)\n# define BOOST_PP_REPEAT_2_60(m, d) BOOST_PP_REPEAT_2_59(m, d) m(3, 59, d)\n# define BOOST_PP_REPEAT_2_61(m, d) BOOST_PP_REPEAT_2_60(m, d) m(3, 60, d)\n# define BOOST_PP_REPEAT_2_62(m, d) BOOST_PP_REPEAT_2_61(m, d) m(3, 61, d)\n# define BOOST_PP_REPEAT_2_63(m, d) BOOST_PP_REPEAT_2_62(m, d) m(3, 62, d)\n# define BOOST_PP_REPEAT_2_64(m, d) BOOST_PP_REPEAT_2_63(m, d) m(3, 63, d)\n# define BOOST_PP_REPEAT_2_65(m, d) BOOST_PP_REPEAT_2_64(m, d) m(3, 64, d)\n# define BOOST_PP_REPEAT_2_66(m, d) BOOST_PP_REPEAT_2_65(m, d) m(3, 65, d)\n# define BOOST_PP_REPEAT_2_67(m, d) BOOST_PP_REPEAT_2_66(m, d) m(3, 66, d)\n# define BOOST_PP_REPEAT_2_68(m, d) BOOST_PP_REPEAT_2_67(m, d) m(3, 67, d)\n# define BOOST_PP_REPEAT_2_69(m, d) BOOST_PP_REPEAT_2_68(m, d) m(3, 68, d)\n# define BOOST_PP_REPEAT_2_70(m, d) BOOST_PP_REPEAT_2_69(m, d) m(3, 69, d)\n# define BOOST_PP_REPEAT_2_71(m, d) BOOST_PP_REPEAT_2_70(m, d) m(3, 70, d)\n# define BOOST_PP_REPEAT_2_72(m, d) BOOST_PP_REPEAT_2_71(m, d) m(3, 71, d)\n# define BOOST_PP_REPEAT_2_73(m, d) BOOST_PP_REPEAT_2_72(m, d) m(3, 72, d)\n# define BOOST_PP_REPEAT_2_74(m, d) BOOST_PP_REPEAT_2_73(m, d) m(3, 73, d)\n# define BOOST_PP_REPEAT_2_75(m, d) BOOST_PP_REPEAT_2_74(m, d) m(3, 74, d)\n# define BOOST_PP_REPEAT_2_76(m, d) BOOST_PP_REPEAT_2_75(m, d) m(3, 75, d)\n# define BOOST_PP_REPEAT_2_77(m, d) BOOST_PP_REPEAT_2_76(m, d) m(3, 76, d)\n# define BOOST_PP_REPEAT_2_78(m, d) BOOST_PP_REPEAT_2_77(m, d) m(3, 77, d)\n# define BOOST_PP_REPEAT_2_79(m, d) BOOST_PP_REPEAT_2_78(m, d) m(3, 78, d)\n# define BOOST_PP_REPEAT_2_80(m, d) BOOST_PP_REPEAT_2_79(m, d) m(3, 79, d)\n# define BOOST_PP_REPEAT_2_81(m, d) BOOST_PP_REPEAT_2_80(m, d) m(3, 80, d)\n# define BOOST_PP_REPEAT_2_82(m, d) BOOST_PP_REPEAT_2_81(m, d) m(3, 81, d)\n# define BOOST_PP_REPEAT_2_83(m, d) BOOST_PP_REPEAT_2_82(m, d) m(3, 82, d)\n# define BOOST_PP_REPEAT_2_84(m, d) BOOST_PP_REPEAT_2_83(m, d) m(3, 83, d)\n# define BOOST_PP_REPEAT_2_85(m, d) BOOST_PP_REPEAT_2_84(m, d) m(3, 84, d)\n# define BOOST_PP_REPEAT_2_86(m, d) BOOST_PP_REPEAT_2_85(m, d) m(3, 85, d)\n# define BOOST_PP_REPEAT_2_87(m, d) BOOST_PP_REPEAT_2_86(m, d) m(3, 86, d)\n# define BOOST_PP_REPEAT_2_88(m, d) BOOST_PP_REPEAT_2_87(m, d) m(3, 87, d)\n# define BOOST_PP_REPEAT_2_89(m, d) BOOST_PP_REPEAT_2_88(m, d) m(3, 88, d)\n# define BOOST_PP_REPEAT_2_90(m, d) BOOST_PP_REPEAT_2_89(m, d) m(3, 89, d)\n# define BOOST_PP_REPEAT_2_91(m, d) BOOST_PP_REPEAT_2_90(m, d) m(3, 90, d)\n# define BOOST_PP_REPEAT_2_92(m, d) BOOST_PP_REPEAT_2_91(m, d) m(3, 91, d)\n# define BOOST_PP_REPEAT_2_93(m, d) BOOST_PP_REPEAT_2_92(m, d) m(3, 92, d)\n# define BOOST_PP_REPEAT_2_94(m, d) BOOST_PP_REPEAT_2_93(m, d) m(3, 93, d)\n# define BOOST_PP_REPEAT_2_95(m, d) BOOST_PP_REPEAT_2_94(m, d) m(3, 94, d)\n# define BOOST_PP_REPEAT_2_96(m, d) BOOST_PP_REPEAT_2_95(m, d) m(3, 95, d)\n# define BOOST_PP_REPEAT_2_97(m, d) BOOST_PP_REPEAT_2_96(m, d) m(3, 96, d)\n# define BOOST_PP_REPEAT_2_98(m, d) BOOST_PP_REPEAT_2_97(m, d) m(3, 97, d)\n# define BOOST_PP_REPEAT_2_99(m, d) BOOST_PP_REPEAT_2_98(m, d) m(3, 98, d)\n# define BOOST_PP_REPEAT_2_100(m, d) BOOST_PP_REPEAT_2_99(m, d) m(3, 99, d)\n# define BOOST_PP_REPEAT_2_101(m, d) BOOST_PP_REPEAT_2_100(m, d) m(3, 100, d)\n# define BOOST_PP_REPEAT_2_102(m, d) BOOST_PP_REPEAT_2_101(m, d) m(3, 101, d)\n# define BOOST_PP_REPEAT_2_103(m, d) BOOST_PP_REPEAT_2_102(m, d) m(3, 102, d)\n# define BOOST_PP_REPEAT_2_104(m, d) BOOST_PP_REPEAT_2_103(m, d) m(3, 103, d)\n# define BOOST_PP_REPEAT_2_105(m, d) BOOST_PP_REPEAT_2_104(m, d) m(3, 104, d)\n# define BOOST_PP_REPEAT_2_106(m, d) BOOST_PP_REPEAT_2_105(m, d) m(3, 105, d)\n# define BOOST_PP_REPEAT_2_107(m, d) BOOST_PP_REPEAT_2_106(m, d) m(3, 106, d)\n# define BOOST_PP_REPEAT_2_108(m, d) BOOST_PP_REPEAT_2_107(m, d) m(3, 107, d)\n# define BOOST_PP_REPEAT_2_109(m, d) BOOST_PP_REPEAT_2_108(m, d) m(3, 108, d)\n# define BOOST_PP_REPEAT_2_110(m, d) BOOST_PP_REPEAT_2_109(m, d) m(3, 109, d)\n# define BOOST_PP_REPEAT_2_111(m, d) BOOST_PP_REPEAT_2_110(m, d) m(3, 110, d)\n# define BOOST_PP_REPEAT_2_112(m, d) BOOST_PP_REPEAT_2_111(m, d) m(3, 111, d)\n# define BOOST_PP_REPEAT_2_113(m, d) BOOST_PP_REPEAT_2_112(m, d) m(3, 112, d)\n# define BOOST_PP_REPEAT_2_114(m, d) BOOST_PP_REPEAT_2_113(m, d) m(3, 113, d)\n# define BOOST_PP_REPEAT_2_115(m, d) BOOST_PP_REPEAT_2_114(m, d) m(3, 114, d)\n# define BOOST_PP_REPEAT_2_116(m, d) BOOST_PP_REPEAT_2_115(m, d) m(3, 115, d)\n# define BOOST_PP_REPEAT_2_117(m, d) BOOST_PP_REPEAT_2_116(m, d) m(3, 116, d)\n# define BOOST_PP_REPEAT_2_118(m, d) BOOST_PP_REPEAT_2_117(m, d) m(3, 117, d)\n# define BOOST_PP_REPEAT_2_119(m, d) BOOST_PP_REPEAT_2_118(m, d) m(3, 118, d)\n# define BOOST_PP_REPEAT_2_120(m, d) BOOST_PP_REPEAT_2_119(m, d) m(3, 119, d)\n# define BOOST_PP_REPEAT_2_121(m, d) BOOST_PP_REPEAT_2_120(m, d) m(3, 120, d)\n# define BOOST_PP_REPEAT_2_122(m, d) BOOST_PP_REPEAT_2_121(m, d) m(3, 121, d)\n# define BOOST_PP_REPEAT_2_123(m, d) BOOST_PP_REPEAT_2_122(m, d) m(3, 122, d)\n# define BOOST_PP_REPEAT_2_124(m, d) BOOST_PP_REPEAT_2_123(m, d) m(3, 123, d)\n# define BOOST_PP_REPEAT_2_125(m, d) BOOST_PP_REPEAT_2_124(m, d) m(3, 124, d)\n# define BOOST_PP_REPEAT_2_126(m, d) BOOST_PP_REPEAT_2_125(m, d) m(3, 125, d)\n# define BOOST_PP_REPEAT_2_127(m, d) BOOST_PP_REPEAT_2_126(m, d) m(3, 126, d)\n# define BOOST_PP_REPEAT_2_128(m, d) BOOST_PP_REPEAT_2_127(m, d) m(3, 127, d)\n# define BOOST_PP_REPEAT_2_129(m, d) BOOST_PP_REPEAT_2_128(m, d) m(3, 128, d)\n# define BOOST_PP_REPEAT_2_130(m, d) BOOST_PP_REPEAT_2_129(m, d) m(3, 129, d)\n# define BOOST_PP_REPEAT_2_131(m, d) BOOST_PP_REPEAT_2_130(m, d) m(3, 130, d)\n# define BOOST_PP_REPEAT_2_132(m, d) BOOST_PP_REPEAT_2_131(m, d) m(3, 131, d)\n# define BOOST_PP_REPEAT_2_133(m, d) BOOST_PP_REPEAT_2_132(m, d) m(3, 132, d)\n# define BOOST_PP_REPEAT_2_134(m, d) BOOST_PP_REPEAT_2_133(m, d) m(3, 133, d)\n# define BOOST_PP_REPEAT_2_135(m, d) BOOST_PP_REPEAT_2_134(m, d) m(3, 134, d)\n# define BOOST_PP_REPEAT_2_136(m, d) BOOST_PP_REPEAT_2_135(m, d) m(3, 135, d)\n# define BOOST_PP_REPEAT_2_137(m, d) BOOST_PP_REPEAT_2_136(m, d) m(3, 136, d)\n# define BOOST_PP_REPEAT_2_138(m, d) BOOST_PP_REPEAT_2_137(m, d) m(3, 137, d)\n# define BOOST_PP_REPEAT_2_139(m, d) BOOST_PP_REPEAT_2_138(m, d) m(3, 138, d)\n# define BOOST_PP_REPEAT_2_140(m, d) BOOST_PP_REPEAT_2_139(m, d) m(3, 139, d)\n# define BOOST_PP_REPEAT_2_141(m, d) BOOST_PP_REPEAT_2_140(m, d) m(3, 140, d)\n# define BOOST_PP_REPEAT_2_142(m, d) BOOST_PP_REPEAT_2_141(m, d) m(3, 141, d)\n# define BOOST_PP_REPEAT_2_143(m, d) BOOST_PP_REPEAT_2_142(m, d) m(3, 142, d)\n# define BOOST_PP_REPEAT_2_144(m, d) BOOST_PP_REPEAT_2_143(m, d) m(3, 143, d)\n# define BOOST_PP_REPEAT_2_145(m, d) BOOST_PP_REPEAT_2_144(m, d) m(3, 144, d)\n# define BOOST_PP_REPEAT_2_146(m, d) BOOST_PP_REPEAT_2_145(m, d) m(3, 145, d)\n# define BOOST_PP_REPEAT_2_147(m, d) BOOST_PP_REPEAT_2_146(m, d) m(3, 146, d)\n# define BOOST_PP_REPEAT_2_148(m, d) BOOST_PP_REPEAT_2_147(m, d) m(3, 147, d)\n# define BOOST_PP_REPEAT_2_149(m, d) BOOST_PP_REPEAT_2_148(m, d) m(3, 148, d)\n# define BOOST_PP_REPEAT_2_150(m, d) BOOST_PP_REPEAT_2_149(m, d) m(3, 149, d)\n# define BOOST_PP_REPEAT_2_151(m, d) BOOST_PP_REPEAT_2_150(m, d) m(3, 150, d)\n# define BOOST_PP_REPEAT_2_152(m, d) BOOST_PP_REPEAT_2_151(m, d) m(3, 151, d)\n# define BOOST_PP_REPEAT_2_153(m, d) BOOST_PP_REPEAT_2_152(m, d) m(3, 152, d)\n# define BOOST_PP_REPEAT_2_154(m, d) BOOST_PP_REPEAT_2_153(m, d) m(3, 153, d)\n# define BOOST_PP_REPEAT_2_155(m, d) BOOST_PP_REPEAT_2_154(m, d) m(3, 154, d)\n# define BOOST_PP_REPEAT_2_156(m, d) BOOST_PP_REPEAT_2_155(m, d) m(3, 155, d)\n# define BOOST_PP_REPEAT_2_157(m, d) BOOST_PP_REPEAT_2_156(m, d) m(3, 156, d)\n# define BOOST_PP_REPEAT_2_158(m, d) BOOST_PP_REPEAT_2_157(m, d) m(3, 157, d)\n# define BOOST_PP_REPEAT_2_159(m, d) BOOST_PP_REPEAT_2_158(m, d) m(3, 158, d)\n# define BOOST_PP_REPEAT_2_160(m, d) BOOST_PP_REPEAT_2_159(m, d) m(3, 159, d)\n# define BOOST_PP_REPEAT_2_161(m, d) BOOST_PP_REPEAT_2_160(m, d) m(3, 160, d)\n# define BOOST_PP_REPEAT_2_162(m, d) BOOST_PP_REPEAT_2_161(m, d) m(3, 161, d)\n# define BOOST_PP_REPEAT_2_163(m, d) BOOST_PP_REPEAT_2_162(m, d) m(3, 162, d)\n# define BOOST_PP_REPEAT_2_164(m, d) BOOST_PP_REPEAT_2_163(m, d) m(3, 163, d)\n# define BOOST_PP_REPEAT_2_165(m, d) BOOST_PP_REPEAT_2_164(m, d) m(3, 164, d)\n# define BOOST_PP_REPEAT_2_166(m, d) BOOST_PP_REPEAT_2_165(m, d) m(3, 165, d)\n# define BOOST_PP_REPEAT_2_167(m, d) BOOST_PP_REPEAT_2_166(m, d) m(3, 166, d)\n# define BOOST_PP_REPEAT_2_168(m, d) BOOST_PP_REPEAT_2_167(m, d) m(3, 167, d)\n# define BOOST_PP_REPEAT_2_169(m, d) BOOST_PP_REPEAT_2_168(m, d) m(3, 168, d)\n# define BOOST_PP_REPEAT_2_170(m, d) BOOST_PP_REPEAT_2_169(m, d) m(3, 169, d)\n# define BOOST_PP_REPEAT_2_171(m, d) BOOST_PP_REPEAT_2_170(m, d) m(3, 170, d)\n# define BOOST_PP_REPEAT_2_172(m, d) BOOST_PP_REPEAT_2_171(m, d) m(3, 171, d)\n# define BOOST_PP_REPEAT_2_173(m, d) BOOST_PP_REPEAT_2_172(m, d) m(3, 172, d)\n# define BOOST_PP_REPEAT_2_174(m, d) BOOST_PP_REPEAT_2_173(m, d) m(3, 173, d)\n# define BOOST_PP_REPEAT_2_175(m, d) BOOST_PP_REPEAT_2_174(m, d) m(3, 174, d)\n# define BOOST_PP_REPEAT_2_176(m, d) BOOST_PP_REPEAT_2_175(m, d) m(3, 175, d)\n# define BOOST_PP_REPEAT_2_177(m, d) BOOST_PP_REPEAT_2_176(m, d) m(3, 176, d)\n# define BOOST_PP_REPEAT_2_178(m, d) BOOST_PP_REPEAT_2_177(m, d) m(3, 177, d)\n# define BOOST_PP_REPEAT_2_179(m, d) BOOST_PP_REPEAT_2_178(m, d) m(3, 178, d)\n# define BOOST_PP_REPEAT_2_180(m, d) BOOST_PP_REPEAT_2_179(m, d) m(3, 179, d)\n# define BOOST_PP_REPEAT_2_181(m, d) BOOST_PP_REPEAT_2_180(m, d) m(3, 180, d)\n# define BOOST_PP_REPEAT_2_182(m, d) BOOST_PP_REPEAT_2_181(m, d) m(3, 181, d)\n# define BOOST_PP_REPEAT_2_183(m, d) BOOST_PP_REPEAT_2_182(m, d) m(3, 182, d)\n# define BOOST_PP_REPEAT_2_184(m, d) BOOST_PP_REPEAT_2_183(m, d) m(3, 183, d)\n# define BOOST_PP_REPEAT_2_185(m, d) BOOST_PP_REPEAT_2_184(m, d) m(3, 184, d)\n# define BOOST_PP_REPEAT_2_186(m, d) BOOST_PP_REPEAT_2_185(m, d) m(3, 185, d)\n# define BOOST_PP_REPEAT_2_187(m, d) BOOST_PP_REPEAT_2_186(m, d) m(3, 186, d)\n# define BOOST_PP_REPEAT_2_188(m, d) BOOST_PP_REPEAT_2_187(m, d) m(3, 187, d)\n# define BOOST_PP_REPEAT_2_189(m, d) BOOST_PP_REPEAT_2_188(m, d) m(3, 188, d)\n# define BOOST_PP_REPEAT_2_190(m, d) BOOST_PP_REPEAT_2_189(m, d) m(3, 189, d)\n# define BOOST_PP_REPEAT_2_191(m, d) BOOST_PP_REPEAT_2_190(m, d) m(3, 190, d)\n# define BOOST_PP_REPEAT_2_192(m, d) BOOST_PP_REPEAT_2_191(m, d) m(3, 191, d)\n# define BOOST_PP_REPEAT_2_193(m, d) BOOST_PP_REPEAT_2_192(m, d) m(3, 192, d)\n# define BOOST_PP_REPEAT_2_194(m, d) BOOST_PP_REPEAT_2_193(m, d) m(3, 193, d)\n# define BOOST_PP_REPEAT_2_195(m, d) BOOST_PP_REPEAT_2_194(m, d) m(3, 194, d)\n# define BOOST_PP_REPEAT_2_196(m, d) BOOST_PP_REPEAT_2_195(m, d) m(3, 195, d)\n# define BOOST_PP_REPEAT_2_197(m, d) BOOST_PP_REPEAT_2_196(m, d) m(3, 196, d)\n# define BOOST_PP_REPEAT_2_198(m, d) BOOST_PP_REPEAT_2_197(m, d) m(3, 197, d)\n# define BOOST_PP_REPEAT_2_199(m, d) BOOST_PP_REPEAT_2_198(m, d) m(3, 198, d)\n# define BOOST_PP_REPEAT_2_200(m, d) BOOST_PP_REPEAT_2_199(m, d) m(3, 199, d)\n# define BOOST_PP_REPEAT_2_201(m, d) BOOST_PP_REPEAT_2_200(m, d) m(3, 200, d)\n# define BOOST_PP_REPEAT_2_202(m, d) BOOST_PP_REPEAT_2_201(m, d) m(3, 201, d)\n# define BOOST_PP_REPEAT_2_203(m, d) BOOST_PP_REPEAT_2_202(m, d) m(3, 202, d)\n# define BOOST_PP_REPEAT_2_204(m, d) BOOST_PP_REPEAT_2_203(m, d) m(3, 203, d)\n# define BOOST_PP_REPEAT_2_205(m, d) BOOST_PP_REPEAT_2_204(m, d) m(3, 204, d)\n# define BOOST_PP_REPEAT_2_206(m, d) BOOST_PP_REPEAT_2_205(m, d) m(3, 205, d)\n# define BOOST_PP_REPEAT_2_207(m, d) BOOST_PP_REPEAT_2_206(m, d) m(3, 206, d)\n# define BOOST_PP_REPEAT_2_208(m, d) BOOST_PP_REPEAT_2_207(m, d) m(3, 207, d)\n# define BOOST_PP_REPEAT_2_209(m, d) BOOST_PP_REPEAT_2_208(m, d) m(3, 208, d)\n# define BOOST_PP_REPEAT_2_210(m, d) BOOST_PP_REPEAT_2_209(m, d) m(3, 209, d)\n# define BOOST_PP_REPEAT_2_211(m, d) BOOST_PP_REPEAT_2_210(m, d) m(3, 210, d)\n# define BOOST_PP_REPEAT_2_212(m, d) BOOST_PP_REPEAT_2_211(m, d) m(3, 211, d)\n# define BOOST_PP_REPEAT_2_213(m, d) BOOST_PP_REPEAT_2_212(m, d) m(3, 212, d)\n# define BOOST_PP_REPEAT_2_214(m, d) BOOST_PP_REPEAT_2_213(m, d) m(3, 213, d)\n# define BOOST_PP_REPEAT_2_215(m, d) BOOST_PP_REPEAT_2_214(m, d) m(3, 214, d)\n# define BOOST_PP_REPEAT_2_216(m, d) BOOST_PP_REPEAT_2_215(m, d) m(3, 215, d)\n# define BOOST_PP_REPEAT_2_217(m, d) BOOST_PP_REPEAT_2_216(m, d) m(3, 216, d)\n# define BOOST_PP_REPEAT_2_218(m, d) BOOST_PP_REPEAT_2_217(m, d) m(3, 217, d)\n# define BOOST_PP_REPEAT_2_219(m, d) BOOST_PP_REPEAT_2_218(m, d) m(3, 218, d)\n# define BOOST_PP_REPEAT_2_220(m, d) BOOST_PP_REPEAT_2_219(m, d) m(3, 219, d)\n# define BOOST_PP_REPEAT_2_221(m, d) BOOST_PP_REPEAT_2_220(m, d) m(3, 220, d)\n# define BOOST_PP_REPEAT_2_222(m, d) BOOST_PP_REPEAT_2_221(m, d) m(3, 221, d)\n# define BOOST_PP_REPEAT_2_223(m, d) BOOST_PP_REPEAT_2_222(m, d) m(3, 222, d)\n# define BOOST_PP_REPEAT_2_224(m, d) BOOST_PP_REPEAT_2_223(m, d) m(3, 223, d)\n# define BOOST_PP_REPEAT_2_225(m, d) BOOST_PP_REPEAT_2_224(m, d) m(3, 224, d)\n# define BOOST_PP_REPEAT_2_226(m, d) BOOST_PP_REPEAT_2_225(m, d) m(3, 225, d)\n# define BOOST_PP_REPEAT_2_227(m, d) BOOST_PP_REPEAT_2_226(m, d) m(3, 226, d)\n# define BOOST_PP_REPEAT_2_228(m, d) BOOST_PP_REPEAT_2_227(m, d) m(3, 227, d)\n# define BOOST_PP_REPEAT_2_229(m, d) BOOST_PP_REPEAT_2_228(m, d) m(3, 228, d)\n# define BOOST_PP_REPEAT_2_230(m, d) BOOST_PP_REPEAT_2_229(m, d) m(3, 229, d)\n# define BOOST_PP_REPEAT_2_231(m, d) BOOST_PP_REPEAT_2_230(m, d) m(3, 230, d)\n# define BOOST_PP_REPEAT_2_232(m, d) BOOST_PP_REPEAT_2_231(m, d) m(3, 231, d)\n# define BOOST_PP_REPEAT_2_233(m, d) BOOST_PP_REPEAT_2_232(m, d) m(3, 232, d)\n# define BOOST_PP_REPEAT_2_234(m, d) BOOST_PP_REPEAT_2_233(m, d) m(3, 233, d)\n# define BOOST_PP_REPEAT_2_235(m, d) BOOST_PP_REPEAT_2_234(m, d) m(3, 234, d)\n# define BOOST_PP_REPEAT_2_236(m, d) BOOST_PP_REPEAT_2_235(m, d) m(3, 235, d)\n# define BOOST_PP_REPEAT_2_237(m, d) BOOST_PP_REPEAT_2_236(m, d) m(3, 236, d)\n# define BOOST_PP_REPEAT_2_238(m, d) BOOST_PP_REPEAT_2_237(m, d) m(3, 237, d)\n# define BOOST_PP_REPEAT_2_239(m, d) BOOST_PP_REPEAT_2_238(m, d) m(3, 238, d)\n# define BOOST_PP_REPEAT_2_240(m, d) BOOST_PP_REPEAT_2_239(m, d) m(3, 239, d)\n# define BOOST_PP_REPEAT_2_241(m, d) BOOST_PP_REPEAT_2_240(m, d) m(3, 240, d)\n# define BOOST_PP_REPEAT_2_242(m, d) BOOST_PP_REPEAT_2_241(m, d) m(3, 241, d)\n# define BOOST_PP_REPEAT_2_243(m, d) BOOST_PP_REPEAT_2_242(m, d) m(3, 242, d)\n# define BOOST_PP_REPEAT_2_244(m, d) BOOST_PP_REPEAT_2_243(m, d) m(3, 243, d)\n# define BOOST_PP_REPEAT_2_245(m, d) BOOST_PP_REPEAT_2_244(m, d) m(3, 244, d)\n# define BOOST_PP_REPEAT_2_246(m, d) BOOST_PP_REPEAT_2_245(m, d) m(3, 245, d)\n# define BOOST_PP_REPEAT_2_247(m, d) BOOST_PP_REPEAT_2_246(m, d) m(3, 246, d)\n# define BOOST_PP_REPEAT_2_248(m, d) BOOST_PP_REPEAT_2_247(m, d) m(3, 247, d)\n# define BOOST_PP_REPEAT_2_249(m, d) BOOST_PP_REPEAT_2_248(m, d) m(3, 248, d)\n# define BOOST_PP_REPEAT_2_250(m, d) BOOST_PP_REPEAT_2_249(m, d) m(3, 249, d)\n# define BOOST_PP_REPEAT_2_251(m, d) BOOST_PP_REPEAT_2_250(m, d) m(3, 250, d)\n# define BOOST_PP_REPEAT_2_252(m, d) BOOST_PP_REPEAT_2_251(m, d) m(3, 251, d)\n# define BOOST_PP_REPEAT_2_253(m, d) BOOST_PP_REPEAT_2_252(m, d) m(3, 252, d)\n# define BOOST_PP_REPEAT_2_254(m, d) BOOST_PP_REPEAT_2_253(m, d) m(3, 253, d)\n# define BOOST_PP_REPEAT_2_255(m, d) BOOST_PP_REPEAT_2_254(m, d) m(3, 254, d)\n# define BOOST_PP_REPEAT_2_256(m, d) BOOST_PP_REPEAT_2_255(m, d) m(3, 255, d)\n#\n# define BOOST_PP_REPEAT_3_0(m, d)\n# define BOOST_PP_REPEAT_3_1(m, d) m(4, 0, d)\n# define BOOST_PP_REPEAT_3_2(m, d) BOOST_PP_REPEAT_3_1(m, d) m(4, 1, d)\n# define BOOST_PP_REPEAT_3_3(m, d) BOOST_PP_REPEAT_3_2(m, d) m(4, 2, d)\n# define BOOST_PP_REPEAT_3_4(m, d) BOOST_PP_REPEAT_3_3(m, d) m(4, 3, d)\n# define BOOST_PP_REPEAT_3_5(m, d) BOOST_PP_REPEAT_3_4(m, d) m(4, 4, d)\n# define BOOST_PP_REPEAT_3_6(m, d) BOOST_PP_REPEAT_3_5(m, d) m(4, 5, d)\n# define BOOST_PP_REPEAT_3_7(m, d) BOOST_PP_REPEAT_3_6(m, d) m(4, 6, d)\n# define BOOST_PP_REPEAT_3_8(m, d) BOOST_PP_REPEAT_3_7(m, d) m(4, 7, d)\n# define BOOST_PP_REPEAT_3_9(m, d) BOOST_PP_REPEAT_3_8(m, d) m(4, 8, d)\n# define BOOST_PP_REPEAT_3_10(m, d) BOOST_PP_REPEAT_3_9(m, d) m(4, 9, d)\n# define BOOST_PP_REPEAT_3_11(m, d) BOOST_PP_REPEAT_3_10(m, d) m(4, 10, d)\n# define BOOST_PP_REPEAT_3_12(m, d) BOOST_PP_REPEAT_3_11(m, d) m(4, 11, d)\n# define BOOST_PP_REPEAT_3_13(m, d) BOOST_PP_REPEAT_3_12(m, d) m(4, 12, d)\n# define BOOST_PP_REPEAT_3_14(m, d) BOOST_PP_REPEAT_3_13(m, d) m(4, 13, d)\n# define BOOST_PP_REPEAT_3_15(m, d) BOOST_PP_REPEAT_3_14(m, d) m(4, 14, d)\n# define BOOST_PP_REPEAT_3_16(m, d) BOOST_PP_REPEAT_3_15(m, d) m(4, 15, d)\n# define BOOST_PP_REPEAT_3_17(m, d) BOOST_PP_REPEAT_3_16(m, d) m(4, 16, d)\n# define BOOST_PP_REPEAT_3_18(m, d) BOOST_PP_REPEAT_3_17(m, d) m(4, 17, d)\n# define BOOST_PP_REPEAT_3_19(m, d) BOOST_PP_REPEAT_3_18(m, d) m(4, 18, d)\n# define BOOST_PP_REPEAT_3_20(m, d) BOOST_PP_REPEAT_3_19(m, d) m(4, 19, d)\n# define BOOST_PP_REPEAT_3_21(m, d) BOOST_PP_REPEAT_3_20(m, d) m(4, 20, d)\n# define BOOST_PP_REPEAT_3_22(m, d) BOOST_PP_REPEAT_3_21(m, d) m(4, 21, d)\n# define BOOST_PP_REPEAT_3_23(m, d) BOOST_PP_REPEAT_3_22(m, d) m(4, 22, d)\n# define BOOST_PP_REPEAT_3_24(m, d) BOOST_PP_REPEAT_3_23(m, d) m(4, 23, d)\n# define BOOST_PP_REPEAT_3_25(m, d) BOOST_PP_REPEAT_3_24(m, d) m(4, 24, d)\n# define BOOST_PP_REPEAT_3_26(m, d) BOOST_PP_REPEAT_3_25(m, d) m(4, 25, d)\n# define BOOST_PP_REPEAT_3_27(m, d) BOOST_PP_REPEAT_3_26(m, d) m(4, 26, d)\n# define BOOST_PP_REPEAT_3_28(m, d) BOOST_PP_REPEAT_3_27(m, d) m(4, 27, d)\n# define BOOST_PP_REPEAT_3_29(m, d) BOOST_PP_REPEAT_3_28(m, d) m(4, 28, d)\n# define BOOST_PP_REPEAT_3_30(m, d) BOOST_PP_REPEAT_3_29(m, d) m(4, 29, d)\n# define BOOST_PP_REPEAT_3_31(m, d) BOOST_PP_REPEAT_3_30(m, d) m(4, 30, d)\n# define BOOST_PP_REPEAT_3_32(m, d) BOOST_PP_REPEAT_3_31(m, d) m(4, 31, d)\n# define BOOST_PP_REPEAT_3_33(m, d) BOOST_PP_REPEAT_3_32(m, d) m(4, 32, d)\n# define BOOST_PP_REPEAT_3_34(m, d) BOOST_PP_REPEAT_3_33(m, d) m(4, 33, d)\n# define BOOST_PP_REPEAT_3_35(m, d) BOOST_PP_REPEAT_3_34(m, d) m(4, 34, d)\n# define BOOST_PP_REPEAT_3_36(m, d) BOOST_PP_REPEAT_3_35(m, d) m(4, 35, d)\n# define BOOST_PP_REPEAT_3_37(m, d) BOOST_PP_REPEAT_3_36(m, d) m(4, 36, d)\n# define BOOST_PP_REPEAT_3_38(m, d) BOOST_PP_REPEAT_3_37(m, d) m(4, 37, d)\n# define BOOST_PP_REPEAT_3_39(m, d) BOOST_PP_REPEAT_3_38(m, d) m(4, 38, d)\n# define BOOST_PP_REPEAT_3_40(m, d) BOOST_PP_REPEAT_3_39(m, d) m(4, 39, d)\n# define BOOST_PP_REPEAT_3_41(m, d) BOOST_PP_REPEAT_3_40(m, d) m(4, 40, d)\n# define BOOST_PP_REPEAT_3_42(m, d) BOOST_PP_REPEAT_3_41(m, d) m(4, 41, d)\n# define BOOST_PP_REPEAT_3_43(m, d) BOOST_PP_REPEAT_3_42(m, d) m(4, 42, d)\n# define BOOST_PP_REPEAT_3_44(m, d) BOOST_PP_REPEAT_3_43(m, d) m(4, 43, d)\n# define BOOST_PP_REPEAT_3_45(m, d) BOOST_PP_REPEAT_3_44(m, d) m(4, 44, d)\n# define BOOST_PP_REPEAT_3_46(m, d) BOOST_PP_REPEAT_3_45(m, d) m(4, 45, d)\n# define BOOST_PP_REPEAT_3_47(m, d) BOOST_PP_REPEAT_3_46(m, d) m(4, 46, d)\n# define BOOST_PP_REPEAT_3_48(m, d) BOOST_PP_REPEAT_3_47(m, d) m(4, 47, d)\n# define BOOST_PP_REPEAT_3_49(m, d) BOOST_PP_REPEAT_3_48(m, d) m(4, 48, d)\n# define BOOST_PP_REPEAT_3_50(m, d) BOOST_PP_REPEAT_3_49(m, d) m(4, 49, d)\n# define BOOST_PP_REPEAT_3_51(m, d) BOOST_PP_REPEAT_3_50(m, d) m(4, 50, d)\n# define BOOST_PP_REPEAT_3_52(m, d) BOOST_PP_REPEAT_3_51(m, d) m(4, 51, d)\n# define BOOST_PP_REPEAT_3_53(m, d) BOOST_PP_REPEAT_3_52(m, d) m(4, 52, d)\n# define BOOST_PP_REPEAT_3_54(m, d) BOOST_PP_REPEAT_3_53(m, d) m(4, 53, d)\n# define BOOST_PP_REPEAT_3_55(m, d) BOOST_PP_REPEAT_3_54(m, d) m(4, 54, d)\n# define BOOST_PP_REPEAT_3_56(m, d) BOOST_PP_REPEAT_3_55(m, d) m(4, 55, d)\n# define BOOST_PP_REPEAT_3_57(m, d) BOOST_PP_REPEAT_3_56(m, d) m(4, 56, d)\n# define BOOST_PP_REPEAT_3_58(m, d) BOOST_PP_REPEAT_3_57(m, d) m(4, 57, d)\n# define BOOST_PP_REPEAT_3_59(m, d) BOOST_PP_REPEAT_3_58(m, d) m(4, 58, d)\n# define BOOST_PP_REPEAT_3_60(m, d) BOOST_PP_REPEAT_3_59(m, d) m(4, 59, d)\n# define BOOST_PP_REPEAT_3_61(m, d) BOOST_PP_REPEAT_3_60(m, d) m(4, 60, d)\n# define BOOST_PP_REPEAT_3_62(m, d) BOOST_PP_REPEAT_3_61(m, d) m(4, 61, d)\n# define BOOST_PP_REPEAT_3_63(m, d) BOOST_PP_REPEAT_3_62(m, d) m(4, 62, d)\n# define BOOST_PP_REPEAT_3_64(m, d) BOOST_PP_REPEAT_3_63(m, d) m(4, 63, d)\n# define BOOST_PP_REPEAT_3_65(m, d) BOOST_PP_REPEAT_3_64(m, d) m(4, 64, d)\n# define BOOST_PP_REPEAT_3_66(m, d) BOOST_PP_REPEAT_3_65(m, d) m(4, 65, d)\n# define BOOST_PP_REPEAT_3_67(m, d) BOOST_PP_REPEAT_3_66(m, d) m(4, 66, d)\n# define BOOST_PP_REPEAT_3_68(m, d) BOOST_PP_REPEAT_3_67(m, d) m(4, 67, d)\n# define BOOST_PP_REPEAT_3_69(m, d) BOOST_PP_REPEAT_3_68(m, d) m(4, 68, d)\n# define BOOST_PP_REPEAT_3_70(m, d) BOOST_PP_REPEAT_3_69(m, d) m(4, 69, d)\n# define BOOST_PP_REPEAT_3_71(m, d) BOOST_PP_REPEAT_3_70(m, d) m(4, 70, d)\n# define BOOST_PP_REPEAT_3_72(m, d) BOOST_PP_REPEAT_3_71(m, d) m(4, 71, d)\n# define BOOST_PP_REPEAT_3_73(m, d) BOOST_PP_REPEAT_3_72(m, d) m(4, 72, d)\n# define BOOST_PP_REPEAT_3_74(m, d) BOOST_PP_REPEAT_3_73(m, d) m(4, 73, d)\n# define BOOST_PP_REPEAT_3_75(m, d) BOOST_PP_REPEAT_3_74(m, d) m(4, 74, d)\n# define BOOST_PP_REPEAT_3_76(m, d) BOOST_PP_REPEAT_3_75(m, d) m(4, 75, d)\n# define BOOST_PP_REPEAT_3_77(m, d) BOOST_PP_REPEAT_3_76(m, d) m(4, 76, d)\n# define BOOST_PP_REPEAT_3_78(m, d) BOOST_PP_REPEAT_3_77(m, d) m(4, 77, d)\n# define BOOST_PP_REPEAT_3_79(m, d) BOOST_PP_REPEAT_3_78(m, d) m(4, 78, d)\n# define BOOST_PP_REPEAT_3_80(m, d) BOOST_PP_REPEAT_3_79(m, d) m(4, 79, d)\n# define BOOST_PP_REPEAT_3_81(m, d) BOOST_PP_REPEAT_3_80(m, d) m(4, 80, d)\n# define BOOST_PP_REPEAT_3_82(m, d) BOOST_PP_REPEAT_3_81(m, d) m(4, 81, d)\n# define BOOST_PP_REPEAT_3_83(m, d) BOOST_PP_REPEAT_3_82(m, d) m(4, 82, d)\n# define BOOST_PP_REPEAT_3_84(m, d) BOOST_PP_REPEAT_3_83(m, d) m(4, 83, d)\n# define BOOST_PP_REPEAT_3_85(m, d) BOOST_PP_REPEAT_3_84(m, d) m(4, 84, d)\n# define BOOST_PP_REPEAT_3_86(m, d) BOOST_PP_REPEAT_3_85(m, d) m(4, 85, d)\n# define BOOST_PP_REPEAT_3_87(m, d) BOOST_PP_REPEAT_3_86(m, d) m(4, 86, d)\n# define BOOST_PP_REPEAT_3_88(m, d) BOOST_PP_REPEAT_3_87(m, d) m(4, 87, d)\n# define BOOST_PP_REPEAT_3_89(m, d) BOOST_PP_REPEAT_3_88(m, d) m(4, 88, d)\n# define BOOST_PP_REPEAT_3_90(m, d) BOOST_PP_REPEAT_3_89(m, d) m(4, 89, d)\n# define BOOST_PP_REPEAT_3_91(m, d) BOOST_PP_REPEAT_3_90(m, d) m(4, 90, d)\n# define BOOST_PP_REPEAT_3_92(m, d) BOOST_PP_REPEAT_3_91(m, d) m(4, 91, d)\n# define BOOST_PP_REPEAT_3_93(m, d) BOOST_PP_REPEAT_3_92(m, d) m(4, 92, d)\n# define BOOST_PP_REPEAT_3_94(m, d) BOOST_PP_REPEAT_3_93(m, d) m(4, 93, d)\n# define BOOST_PP_REPEAT_3_95(m, d) BOOST_PP_REPEAT_3_94(m, d) m(4, 94, d)\n# define BOOST_PP_REPEAT_3_96(m, d) BOOST_PP_REPEAT_3_95(m, d) m(4, 95, d)\n# define BOOST_PP_REPEAT_3_97(m, d) BOOST_PP_REPEAT_3_96(m, d) m(4, 96, d)\n# define BOOST_PP_REPEAT_3_98(m, d) BOOST_PP_REPEAT_3_97(m, d) m(4, 97, d)\n# define BOOST_PP_REPEAT_3_99(m, d) BOOST_PP_REPEAT_3_98(m, d) m(4, 98, d)\n# define BOOST_PP_REPEAT_3_100(m, d) BOOST_PP_REPEAT_3_99(m, d) m(4, 99, d)\n# define BOOST_PP_REPEAT_3_101(m, d) BOOST_PP_REPEAT_3_100(m, d) m(4, 100, d)\n# define BOOST_PP_REPEAT_3_102(m, d) BOOST_PP_REPEAT_3_101(m, d) m(4, 101, d)\n# define BOOST_PP_REPEAT_3_103(m, d) BOOST_PP_REPEAT_3_102(m, d) m(4, 102, d)\n# define BOOST_PP_REPEAT_3_104(m, d) BOOST_PP_REPEAT_3_103(m, d) m(4, 103, d)\n# define BOOST_PP_REPEAT_3_105(m, d) BOOST_PP_REPEAT_3_104(m, d) m(4, 104, d)\n# define BOOST_PP_REPEAT_3_106(m, d) BOOST_PP_REPEAT_3_105(m, d) m(4, 105, d)\n# define BOOST_PP_REPEAT_3_107(m, d) BOOST_PP_REPEAT_3_106(m, d) m(4, 106, d)\n# define BOOST_PP_REPEAT_3_108(m, d) BOOST_PP_REPEAT_3_107(m, d) m(4, 107, d)\n# define BOOST_PP_REPEAT_3_109(m, d) BOOST_PP_REPEAT_3_108(m, d) m(4, 108, d)\n# define BOOST_PP_REPEAT_3_110(m, d) BOOST_PP_REPEAT_3_109(m, d) m(4, 109, d)\n# define BOOST_PP_REPEAT_3_111(m, d) BOOST_PP_REPEAT_3_110(m, d) m(4, 110, d)\n# define BOOST_PP_REPEAT_3_112(m, d) BOOST_PP_REPEAT_3_111(m, d) m(4, 111, d)\n# define BOOST_PP_REPEAT_3_113(m, d) BOOST_PP_REPEAT_3_112(m, d) m(4, 112, d)\n# define BOOST_PP_REPEAT_3_114(m, d) BOOST_PP_REPEAT_3_113(m, d) m(4, 113, d)\n# define BOOST_PP_REPEAT_3_115(m, d) BOOST_PP_REPEAT_3_114(m, d) m(4, 114, d)\n# define BOOST_PP_REPEAT_3_116(m, d) BOOST_PP_REPEAT_3_115(m, d) m(4, 115, d)\n# define BOOST_PP_REPEAT_3_117(m, d) BOOST_PP_REPEAT_3_116(m, d) m(4, 116, d)\n# define BOOST_PP_REPEAT_3_118(m, d) BOOST_PP_REPEAT_3_117(m, d) m(4, 117, d)\n# define BOOST_PP_REPEAT_3_119(m, d) BOOST_PP_REPEAT_3_118(m, d) m(4, 118, d)\n# define BOOST_PP_REPEAT_3_120(m, d) BOOST_PP_REPEAT_3_119(m, d) m(4, 119, d)\n# define BOOST_PP_REPEAT_3_121(m, d) BOOST_PP_REPEAT_3_120(m, d) m(4, 120, d)\n# define BOOST_PP_REPEAT_3_122(m, d) BOOST_PP_REPEAT_3_121(m, d) m(4, 121, d)\n# define BOOST_PP_REPEAT_3_123(m, d) BOOST_PP_REPEAT_3_122(m, d) m(4, 122, d)\n# define BOOST_PP_REPEAT_3_124(m, d) BOOST_PP_REPEAT_3_123(m, d) m(4, 123, d)\n# define BOOST_PP_REPEAT_3_125(m, d) BOOST_PP_REPEAT_3_124(m, d) m(4, 124, d)\n# define BOOST_PP_REPEAT_3_126(m, d) BOOST_PP_REPEAT_3_125(m, d) m(4, 125, d)\n# define BOOST_PP_REPEAT_3_127(m, d) BOOST_PP_REPEAT_3_126(m, d) m(4, 126, d)\n# define BOOST_PP_REPEAT_3_128(m, d) BOOST_PP_REPEAT_3_127(m, d) m(4, 127, d)\n# define BOOST_PP_REPEAT_3_129(m, d) BOOST_PP_REPEAT_3_128(m, d) m(4, 128, d)\n# define BOOST_PP_REPEAT_3_130(m, d) BOOST_PP_REPEAT_3_129(m, d) m(4, 129, d)\n# define BOOST_PP_REPEAT_3_131(m, d) BOOST_PP_REPEAT_3_130(m, d) m(4, 130, d)\n# define BOOST_PP_REPEAT_3_132(m, d) BOOST_PP_REPEAT_3_131(m, d) m(4, 131, d)\n# define BOOST_PP_REPEAT_3_133(m, d) BOOST_PP_REPEAT_3_132(m, d) m(4, 132, d)\n# define BOOST_PP_REPEAT_3_134(m, d) BOOST_PP_REPEAT_3_133(m, d) m(4, 133, d)\n# define BOOST_PP_REPEAT_3_135(m, d) BOOST_PP_REPEAT_3_134(m, d) m(4, 134, d)\n# define BOOST_PP_REPEAT_3_136(m, d) BOOST_PP_REPEAT_3_135(m, d) m(4, 135, d)\n# define BOOST_PP_REPEAT_3_137(m, d) BOOST_PP_REPEAT_3_136(m, d) m(4, 136, d)\n# define BOOST_PP_REPEAT_3_138(m, d) BOOST_PP_REPEAT_3_137(m, d) m(4, 137, d)\n# define BOOST_PP_REPEAT_3_139(m, d) BOOST_PP_REPEAT_3_138(m, d) m(4, 138, d)\n# define BOOST_PP_REPEAT_3_140(m, d) BOOST_PP_REPEAT_3_139(m, d) m(4, 139, d)\n# define BOOST_PP_REPEAT_3_141(m, d) BOOST_PP_REPEAT_3_140(m, d) m(4, 140, d)\n# define BOOST_PP_REPEAT_3_142(m, d) BOOST_PP_REPEAT_3_141(m, d) m(4, 141, d)\n# define BOOST_PP_REPEAT_3_143(m, d) BOOST_PP_REPEAT_3_142(m, d) m(4, 142, d)\n# define BOOST_PP_REPEAT_3_144(m, d) BOOST_PP_REPEAT_3_143(m, d) m(4, 143, d)\n# define BOOST_PP_REPEAT_3_145(m, d) BOOST_PP_REPEAT_3_144(m, d) m(4, 144, d)\n# define BOOST_PP_REPEAT_3_146(m, d) BOOST_PP_REPEAT_3_145(m, d) m(4, 145, d)\n# define BOOST_PP_REPEAT_3_147(m, d) BOOST_PP_REPEAT_3_146(m, d) m(4, 146, d)\n# define BOOST_PP_REPEAT_3_148(m, d) BOOST_PP_REPEAT_3_147(m, d) m(4, 147, d)\n# define BOOST_PP_REPEAT_3_149(m, d) BOOST_PP_REPEAT_3_148(m, d) m(4, 148, d)\n# define BOOST_PP_REPEAT_3_150(m, d) BOOST_PP_REPEAT_3_149(m, d) m(4, 149, d)\n# define BOOST_PP_REPEAT_3_151(m, d) BOOST_PP_REPEAT_3_150(m, d) m(4, 150, d)\n# define BOOST_PP_REPEAT_3_152(m, d) BOOST_PP_REPEAT_3_151(m, d) m(4, 151, d)\n# define BOOST_PP_REPEAT_3_153(m, d) BOOST_PP_REPEAT_3_152(m, d) m(4, 152, d)\n# define BOOST_PP_REPEAT_3_154(m, d) BOOST_PP_REPEAT_3_153(m, d) m(4, 153, d)\n# define BOOST_PP_REPEAT_3_155(m, d) BOOST_PP_REPEAT_3_154(m, d) m(4, 154, d)\n# define BOOST_PP_REPEAT_3_156(m, d) BOOST_PP_REPEAT_3_155(m, d) m(4, 155, d)\n# define BOOST_PP_REPEAT_3_157(m, d) BOOST_PP_REPEAT_3_156(m, d) m(4, 156, d)\n# define BOOST_PP_REPEAT_3_158(m, d) BOOST_PP_REPEAT_3_157(m, d) m(4, 157, d)\n# define BOOST_PP_REPEAT_3_159(m, d) BOOST_PP_REPEAT_3_158(m, d) m(4, 158, d)\n# define BOOST_PP_REPEAT_3_160(m, d) BOOST_PP_REPEAT_3_159(m, d) m(4, 159, d)\n# define BOOST_PP_REPEAT_3_161(m, d) BOOST_PP_REPEAT_3_160(m, d) m(4, 160, d)\n# define BOOST_PP_REPEAT_3_162(m, d) BOOST_PP_REPEAT_3_161(m, d) m(4, 161, d)\n# define BOOST_PP_REPEAT_3_163(m, d) BOOST_PP_REPEAT_3_162(m, d) m(4, 162, d)\n# define BOOST_PP_REPEAT_3_164(m, d) BOOST_PP_REPEAT_3_163(m, d) m(4, 163, d)\n# define BOOST_PP_REPEAT_3_165(m, d) BOOST_PP_REPEAT_3_164(m, d) m(4, 164, d)\n# define BOOST_PP_REPEAT_3_166(m, d) BOOST_PP_REPEAT_3_165(m, d) m(4, 165, d)\n# define BOOST_PP_REPEAT_3_167(m, d) BOOST_PP_REPEAT_3_166(m, d) m(4, 166, d)\n# define BOOST_PP_REPEAT_3_168(m, d) BOOST_PP_REPEAT_3_167(m, d) m(4, 167, d)\n# define BOOST_PP_REPEAT_3_169(m, d) BOOST_PP_REPEAT_3_168(m, d) m(4, 168, d)\n# define BOOST_PP_REPEAT_3_170(m, d) BOOST_PP_REPEAT_3_169(m, d) m(4, 169, d)\n# define BOOST_PP_REPEAT_3_171(m, d) BOOST_PP_REPEAT_3_170(m, d) m(4, 170, d)\n# define BOOST_PP_REPEAT_3_172(m, d) BOOST_PP_REPEAT_3_171(m, d) m(4, 171, d)\n# define BOOST_PP_REPEAT_3_173(m, d) BOOST_PP_REPEAT_3_172(m, d) m(4, 172, d)\n# define BOOST_PP_REPEAT_3_174(m, d) BOOST_PP_REPEAT_3_173(m, d) m(4, 173, d)\n# define BOOST_PP_REPEAT_3_175(m, d) BOOST_PP_REPEAT_3_174(m, d) m(4, 174, d)\n# define BOOST_PP_REPEAT_3_176(m, d) BOOST_PP_REPEAT_3_175(m, d) m(4, 175, d)\n# define BOOST_PP_REPEAT_3_177(m, d) BOOST_PP_REPEAT_3_176(m, d) m(4, 176, d)\n# define BOOST_PP_REPEAT_3_178(m, d) BOOST_PP_REPEAT_3_177(m, d) m(4, 177, d)\n# define BOOST_PP_REPEAT_3_179(m, d) BOOST_PP_REPEAT_3_178(m, d) m(4, 178, d)\n# define BOOST_PP_REPEAT_3_180(m, d) BOOST_PP_REPEAT_3_179(m, d) m(4, 179, d)\n# define BOOST_PP_REPEAT_3_181(m, d) BOOST_PP_REPEAT_3_180(m, d) m(4, 180, d)\n# define BOOST_PP_REPEAT_3_182(m, d) BOOST_PP_REPEAT_3_181(m, d) m(4, 181, d)\n# define BOOST_PP_REPEAT_3_183(m, d) BOOST_PP_REPEAT_3_182(m, d) m(4, 182, d)\n# define BOOST_PP_REPEAT_3_184(m, d) BOOST_PP_REPEAT_3_183(m, d) m(4, 183, d)\n# define BOOST_PP_REPEAT_3_185(m, d) BOOST_PP_REPEAT_3_184(m, d) m(4, 184, d)\n# define BOOST_PP_REPEAT_3_186(m, d) BOOST_PP_REPEAT_3_185(m, d) m(4, 185, d)\n# define BOOST_PP_REPEAT_3_187(m, d) BOOST_PP_REPEAT_3_186(m, d) m(4, 186, d)\n# define BOOST_PP_REPEAT_3_188(m, d) BOOST_PP_REPEAT_3_187(m, d) m(4, 187, d)\n# define BOOST_PP_REPEAT_3_189(m, d) BOOST_PP_REPEAT_3_188(m, d) m(4, 188, d)\n# define BOOST_PP_REPEAT_3_190(m, d) BOOST_PP_REPEAT_3_189(m, d) m(4, 189, d)\n# define BOOST_PP_REPEAT_3_191(m, d) BOOST_PP_REPEAT_3_190(m, d) m(4, 190, d)\n# define BOOST_PP_REPEAT_3_192(m, d) BOOST_PP_REPEAT_3_191(m, d) m(4, 191, d)\n# define BOOST_PP_REPEAT_3_193(m, d) BOOST_PP_REPEAT_3_192(m, d) m(4, 192, d)\n# define BOOST_PP_REPEAT_3_194(m, d) BOOST_PP_REPEAT_3_193(m, d) m(4, 193, d)\n# define BOOST_PP_REPEAT_3_195(m, d) BOOST_PP_REPEAT_3_194(m, d) m(4, 194, d)\n# define BOOST_PP_REPEAT_3_196(m, d) BOOST_PP_REPEAT_3_195(m, d) m(4, 195, d)\n# define BOOST_PP_REPEAT_3_197(m, d) BOOST_PP_REPEAT_3_196(m, d) m(4, 196, d)\n# define BOOST_PP_REPEAT_3_198(m, d) BOOST_PP_REPEAT_3_197(m, d) m(4, 197, d)\n# define BOOST_PP_REPEAT_3_199(m, d) BOOST_PP_REPEAT_3_198(m, d) m(4, 198, d)\n# define BOOST_PP_REPEAT_3_200(m, d) BOOST_PP_REPEAT_3_199(m, d) m(4, 199, d)\n# define BOOST_PP_REPEAT_3_201(m, d) BOOST_PP_REPEAT_3_200(m, d) m(4, 200, d)\n# define BOOST_PP_REPEAT_3_202(m, d) BOOST_PP_REPEAT_3_201(m, d) m(4, 201, d)\n# define BOOST_PP_REPEAT_3_203(m, d) BOOST_PP_REPEAT_3_202(m, d) m(4, 202, d)\n# define BOOST_PP_REPEAT_3_204(m, d) BOOST_PP_REPEAT_3_203(m, d) m(4, 203, d)\n# define BOOST_PP_REPEAT_3_205(m, d) BOOST_PP_REPEAT_3_204(m, d) m(4, 204, d)\n# define BOOST_PP_REPEAT_3_206(m, d) BOOST_PP_REPEAT_3_205(m, d) m(4, 205, d)\n# define BOOST_PP_REPEAT_3_207(m, d) BOOST_PP_REPEAT_3_206(m, d) m(4, 206, d)\n# define BOOST_PP_REPEAT_3_208(m, d) BOOST_PP_REPEAT_3_207(m, d) m(4, 207, d)\n# define BOOST_PP_REPEAT_3_209(m, d) BOOST_PP_REPEAT_3_208(m, d) m(4, 208, d)\n# define BOOST_PP_REPEAT_3_210(m, d) BOOST_PP_REPEAT_3_209(m, d) m(4, 209, d)\n# define BOOST_PP_REPEAT_3_211(m, d) BOOST_PP_REPEAT_3_210(m, d) m(4, 210, d)\n# define BOOST_PP_REPEAT_3_212(m, d) BOOST_PP_REPEAT_3_211(m, d) m(4, 211, d)\n# define BOOST_PP_REPEAT_3_213(m, d) BOOST_PP_REPEAT_3_212(m, d) m(4, 212, d)\n# define BOOST_PP_REPEAT_3_214(m, d) BOOST_PP_REPEAT_3_213(m, d) m(4, 213, d)\n# define BOOST_PP_REPEAT_3_215(m, d) BOOST_PP_REPEAT_3_214(m, d) m(4, 214, d)\n# define BOOST_PP_REPEAT_3_216(m, d) BOOST_PP_REPEAT_3_215(m, d) m(4, 215, d)\n# define BOOST_PP_REPEAT_3_217(m, d) BOOST_PP_REPEAT_3_216(m, d) m(4, 216, d)\n# define BOOST_PP_REPEAT_3_218(m, d) BOOST_PP_REPEAT_3_217(m, d) m(4, 217, d)\n# define BOOST_PP_REPEAT_3_219(m, d) BOOST_PP_REPEAT_3_218(m, d) m(4, 218, d)\n# define BOOST_PP_REPEAT_3_220(m, d) BOOST_PP_REPEAT_3_219(m, d) m(4, 219, d)\n# define BOOST_PP_REPEAT_3_221(m, d) BOOST_PP_REPEAT_3_220(m, d) m(4, 220, d)\n# define BOOST_PP_REPEAT_3_222(m, d) BOOST_PP_REPEAT_3_221(m, d) m(4, 221, d)\n# define BOOST_PP_REPEAT_3_223(m, d) BOOST_PP_REPEAT_3_222(m, d) m(4, 222, d)\n# define BOOST_PP_REPEAT_3_224(m, d) BOOST_PP_REPEAT_3_223(m, d) m(4, 223, d)\n# define BOOST_PP_REPEAT_3_225(m, d) BOOST_PP_REPEAT_3_224(m, d) m(4, 224, d)\n# define BOOST_PP_REPEAT_3_226(m, d) BOOST_PP_REPEAT_3_225(m, d) m(4, 225, d)\n# define BOOST_PP_REPEAT_3_227(m, d) BOOST_PP_REPEAT_3_226(m, d) m(4, 226, d)\n# define BOOST_PP_REPEAT_3_228(m, d) BOOST_PP_REPEAT_3_227(m, d) m(4, 227, d)\n# define BOOST_PP_REPEAT_3_229(m, d) BOOST_PP_REPEAT_3_228(m, d) m(4, 228, d)\n# define BOOST_PP_REPEAT_3_230(m, d) BOOST_PP_REPEAT_3_229(m, d) m(4, 229, d)\n# define BOOST_PP_REPEAT_3_231(m, d) BOOST_PP_REPEAT_3_230(m, d) m(4, 230, d)\n# define BOOST_PP_REPEAT_3_232(m, d) BOOST_PP_REPEAT_3_231(m, d) m(4, 231, d)\n# define BOOST_PP_REPEAT_3_233(m, d) BOOST_PP_REPEAT_3_232(m, d) m(4, 232, d)\n# define BOOST_PP_REPEAT_3_234(m, d) BOOST_PP_REPEAT_3_233(m, d) m(4, 233, d)\n# define BOOST_PP_REPEAT_3_235(m, d) BOOST_PP_REPEAT_3_234(m, d) m(4, 234, d)\n# define BOOST_PP_REPEAT_3_236(m, d) BOOST_PP_REPEAT_3_235(m, d) m(4, 235, d)\n# define BOOST_PP_REPEAT_3_237(m, d) BOOST_PP_REPEAT_3_236(m, d) m(4, 236, d)\n# define BOOST_PP_REPEAT_3_238(m, d) BOOST_PP_REPEAT_3_237(m, d) m(4, 237, d)\n# define BOOST_PP_REPEAT_3_239(m, d) BOOST_PP_REPEAT_3_238(m, d) m(4, 238, d)\n# define BOOST_PP_REPEAT_3_240(m, d) BOOST_PP_REPEAT_3_239(m, d) m(4, 239, d)\n# define BOOST_PP_REPEAT_3_241(m, d) BOOST_PP_REPEAT_3_240(m, d) m(4, 240, d)\n# define BOOST_PP_REPEAT_3_242(m, d) BOOST_PP_REPEAT_3_241(m, d) m(4, 241, d)\n# define BOOST_PP_REPEAT_3_243(m, d) BOOST_PP_REPEAT_3_242(m, d) m(4, 242, d)\n# define BOOST_PP_REPEAT_3_244(m, d) BOOST_PP_REPEAT_3_243(m, d) m(4, 243, d)\n# define BOOST_PP_REPEAT_3_245(m, d) BOOST_PP_REPEAT_3_244(m, d) m(4, 244, d)\n# define BOOST_PP_REPEAT_3_246(m, d) BOOST_PP_REPEAT_3_245(m, d) m(4, 245, d)\n# define BOOST_PP_REPEAT_3_247(m, d) BOOST_PP_REPEAT_3_246(m, d) m(4, 246, d)\n# define BOOST_PP_REPEAT_3_248(m, d) BOOST_PP_REPEAT_3_247(m, d) m(4, 247, d)\n# define BOOST_PP_REPEAT_3_249(m, d) BOOST_PP_REPEAT_3_248(m, d) m(4, 248, d)\n# define BOOST_PP_REPEAT_3_250(m, d) BOOST_PP_REPEAT_3_249(m, d) m(4, 249, d)\n# define BOOST_PP_REPEAT_3_251(m, d) BOOST_PP_REPEAT_3_250(m, d) m(4, 250, d)\n# define BOOST_PP_REPEAT_3_252(m, d) BOOST_PP_REPEAT_3_251(m, d) m(4, 251, d)\n# define BOOST_PP_REPEAT_3_253(m, d) BOOST_PP_REPEAT_3_252(m, d) m(4, 252, d)\n# define BOOST_PP_REPEAT_3_254(m, d) BOOST_PP_REPEAT_3_253(m, d) m(4, 253, d)\n# define BOOST_PP_REPEAT_3_255(m, d) BOOST_PP_REPEAT_3_254(m, d) m(4, 254, d)\n# define BOOST_PP_REPEAT_3_256(m, d) BOOST_PP_REPEAT_3_255(m, d) m(4, 255, d)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition/repeat_from_to.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP\n# define BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP\n#\n# include <boost/preprocessor/arithmetic/add.hpp>\n# include <boost/preprocessor/arithmetic/sub.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_REPEAT_FROM_TO */\n#\n# if 0\n#    define BOOST_PP_REPEAT_FROM_TO(first, last, macro, data)\n# endif\n#\n# define BOOST_PP_REPEAT_FROM_TO BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# define BOOST_PP_REPEAT_FROM_TO_1(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_2(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_3(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_4(f, l, m, dt) BOOST_PP_ERROR(0x0003)\n#\n# define BOOST_PP_REPEAT_FROM_TO_1ST BOOST_PP_REPEAT_FROM_TO_1\n# define BOOST_PP_REPEAT_FROM_TO_2ND BOOST_PP_REPEAT_FROM_TO_2\n# define BOOST_PP_REPEAT_FROM_TO_3RD BOOST_PP_REPEAT_FROM_TO_3\n#\n# /* BOOST_PP_REPEAT_FROM_TO_D */\n#\n# if 0\n#    define BOOST_PP_REPEAT_FROM_TO_D(d, first, last, macro, data)\n# endif\n#\n# define BOOST_PP_REPEAT_FROM_TO_D BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_D_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt))\n#    define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt))\n#    define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt))\n# else\n#    define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt)\n#    define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt)\n#    define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt)\n#    define BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt))\n#    define BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt))\n#    define BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)\n#    define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)\n#    define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)\n#    define BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, im)\n#    define BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, im)\n#    define BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, im)\n# else\n#    define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))\n#    define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))\n#    define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))\n# endif\n#\n# define BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_1_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_2_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_3_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)\n#\n# define BOOST_PP_REPEAT_FROM_TO_M_1_II(z, n, m, dt) m(z, n, dt)\n# define BOOST_PP_REPEAT_FROM_TO_M_2_II(z, n, m, dt) m(z, n, dt)\n# define BOOST_PP_REPEAT_FROM_TO_M_3_II(z, n, m, dt) m(z, n, dt)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/repetition.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_HPP\n# define BOOST_PREPROCESSOR_REPETITION_HPP\n#\n# include <boost/preprocessor/repetition/deduce_r.hpp>\n# include <boost/preprocessor/repetition/deduce_z.hpp>\n# include <boost/preprocessor/repetition/enum.hpp>\n# include <boost/preprocessor/repetition/enum_binary_params.hpp>\n# include <boost/preprocessor/repetition/enum_params.hpp>\n# include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>\n# include <boost/preprocessor/repetition/enum_params_with_defaults.hpp>\n# include <boost/preprocessor/repetition/enum_shifted.hpp>\n# include <boost/preprocessor/repetition/enum_shifted_binary_params.hpp>\n# include <boost/preprocessor/repetition/enum_shifted_params.hpp>\n# include <boost/preprocessor/repetition/enum_trailing.hpp>\n# include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>\n# include <boost/preprocessor/repetition/enum_trailing_params.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/repetition/repeat_from_to.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/selection/max.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SELECTION_MAX_HPP\n# define BOOST_PREPROCESSOR_SELECTION_MAX_HPP\n#\n# include <boost/preprocessor/comparison/less_equal.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n#\n# /* BOOST_PP_MAX */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MAX(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(x, y), y, x)\n# else\n#    define BOOST_PP_MAX(x, y) BOOST_PP_MAX_I(x, y)\n#    define BOOST_PP_MAX_I(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(x, y), y, x)\n# endif\n#\n# /* BOOST_PP_MAX_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MAX_D(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, x, y), y, x)\n# else\n#    define BOOST_PP_MAX_D(d, x, y) BOOST_PP_MAX_D_I(d, x, y)\n#    define BOOST_PP_MAX_D_I(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, x, y), y, x)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/selection/min.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SELECTION_MIN_HPP\n# define BOOST_PREPROCESSOR_SELECTION_MIN_HPP\n#\n# include <boost/preprocessor/comparison/less_equal.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n#\n# /* BOOST_PP_MIN */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MIN(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(y, x), y, x)\n# else\n#    define BOOST_PP_MIN(x, y) BOOST_PP_MIN_I(x, y)\n#    define BOOST_PP_MIN_I(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(y, x), y, x)\n# endif\n#\n# /* BOOST_PP_MIN_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MIN_D(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, y, x), y, x)\n# else\n#    define BOOST_PP_MIN_D(d, x, y) BOOST_PP_MIN_D_I(d, x, y)\n#    define BOOST_PP_MIN_D_I(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, y, x), y, x)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/selection.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SELECTION_HPP\n# define BOOST_PREPROCESSOR_SELECTION_HPP\n#\n# include <boost/preprocessor/selection/max.hpp>\n# include <boost/preprocessor/selection/min.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/cat.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_CAT_HPP\n# define BOOST_PREPROCESSOR_SEQ_CAT_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/seq/fold_left.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# /* BOOST_PP_SEQ_CAT */\n#\n# define BOOST_PP_SEQ_CAT(seq) \\\n    BOOST_PP_IF( \\\n        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), \\\n        BOOST_PP_SEQ_CAT_I, \\\n        BOOST_PP_SEQ_HEAD \\\n    )(seq) \\\n    /**/\n# define BOOST_PP_SEQ_CAT_I(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))\n#\n# define BOOST_PP_SEQ_CAT_O(s, st, elem) BOOST_PP_SEQ_CAT_O_I(st, elem)\n# define BOOST_PP_SEQ_CAT_O_I(a, b) a ## b\n#\n# /* BOOST_PP_SEQ_CAT_S */\n#\n# define BOOST_PP_SEQ_CAT_S(s, seq) \\\n    BOOST_PP_IF( \\\n        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), \\\n        BOOST_PP_SEQ_CAT_S_I_A, \\\n        BOOST_PP_SEQ_CAT_S_I_B \\\n    )(s, seq) \\\n    /**/\n# define BOOST_PP_SEQ_CAT_S_I_A(s, seq) BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))\n# define BOOST_PP_SEQ_CAT_S_I_B(s, seq) BOOST_PP_SEQ_HEAD(seq)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/detail/binary_transform.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_DETAIL_BINARY_TRANSFORM_HPP\n# define BOOST_PREPROCESSOR_SEQ_DETAIL_BINARY_TRANSFORM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n# include <boost/preprocessor/variadic/detail/is_single_return.hpp>\n#\n# /* BOOST_PP_SEQ_BINARY_TRANSFORM */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_SEQ_BINARY_TRANSFORM(seq) BOOST_PP_SEQ_BINARY_TRANSFORM_I(, seq)\n#    define BOOST_PP_SEQ_BINARY_TRANSFORM_I(p, seq) BOOST_PP_SEQ_BINARY_TRANSFORM_II(p ## seq)\n#    define BOOST_PP_SEQ_BINARY_TRANSFORM_II(seq) BOOST_PP_SEQ_BINARY_TRANSFORM_III(seq)\n#    define BOOST_PP_SEQ_BINARY_TRANSFORM_III(seq) BOOST_PP_CAT(BOOST_PP_SEQ_BINARY_TRANSFORM_A seq, 0)\n# else\n#    define BOOST_PP_SEQ_BINARY_TRANSFORM(seq) BOOST_PP_CAT(BOOST_PP_SEQ_BINARY_TRANSFORM_A seq, 0)\n# endif\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#\t\tdefine BOOST_PP_SEQ_BINARY_TRANSFORM_GET_REM(...) \\\n\t\t\tBOOST_PP_VARIADIC_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,__VA_ARGS__) \\\n\t\t/**/\n#\t else\n#\t\tdefine BOOST_PP_SEQ_BINARY_TRANSFORM_GET_REM(...) BOOST_PP_REM\n#\t endif\n#    define BOOST_PP_SEQ_BINARY_TRANSFORM_A(...) (BOOST_PP_SEQ_BINARY_TRANSFORM_GET_REM(__VA_ARGS__), __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_B\n#    define BOOST_PP_SEQ_BINARY_TRANSFORM_B(...) (BOOST_PP_SEQ_BINARY_TRANSFORM_GET_REM(__VA_ARGS__), __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_A\n# else\n#    define BOOST_PP_SEQ_BINARY_TRANSFORM_A(e) (BOOST_PP_REM, e)() BOOST_PP_SEQ_BINARY_TRANSFORM_B\n#    define BOOST_PP_SEQ_BINARY_TRANSFORM_B(e) (BOOST_PP_REM, e)() BOOST_PP_SEQ_BINARY_TRANSFORM_A\n# endif\n# define BOOST_PP_SEQ_BINARY_TRANSFORM_A0 (BOOST_PP_EAT, ?)\n# define BOOST_PP_SEQ_BINARY_TRANSFORM_B0 (BOOST_PP_EAT, ?)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/detail/is_empty.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2015.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_DETAIL_IS_EMPTY_HPP\n# define BOOST_PREPROCESSOR_SEQ_DETAIL_IS_EMPTY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/logical/compl.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n#\n/* An empty seq is one that is just BOOST_PP_SEQ_NIL */\n#\n# define BOOST_PP_SEQ_DETAIL_IS_EMPTY(seq) \\\n\tBOOST_PP_COMPL \\\n\t\t( \\\n\t\tBOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq) \\\n\t\t) \\\n/**/\n#\n# define BOOST_PP_SEQ_DETAIL_IS_EMPTY_SIZE(size) \\\n\tBOOST_PP_COMPL \\\n\t\t( \\\n\t\tBOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size) \\\n\t\t) \\\n/**/\n#\n# define BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq) \\\n\tBOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq)) \\\n/**/\n#\n# define BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size) \\\n\tBOOST_PP_BOOL(size) \\\n/**/\n#\n# define BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq) \\\n\tBOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq (nil))) \\\n/**/\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/detail/split.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_DETAIL_SPLIT_HPP\n# define BOOST_PREPROCESSOR_SEQ_DETAIL_SPLIT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_SEQ_SPLIT */\n#\n# define BOOST_PP_SEQ_SPLIT(n, seq) BOOST_PP_SEQ_SPLIT_D(n, seq)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_SPLIT_D(n, seq) (BOOST_PP_SEQ_SPLIT_ ## n seq)\n# else\n#    define BOOST_PP_SEQ_SPLIT_D(n, seq) (BOOST_PP_SEQ_SPLIT_ ## n ## seq)\n# endif\n#\n# define BOOST_PP_SEQ_SPLIT_1(x) (x),\n# define BOOST_PP_SEQ_SPLIT_2(x) (x) BOOST_PP_SEQ_SPLIT_1\n# define BOOST_PP_SEQ_SPLIT_3(x) (x) BOOST_PP_SEQ_SPLIT_2\n# define BOOST_PP_SEQ_SPLIT_4(x) (x) BOOST_PP_SEQ_SPLIT_3\n# define BOOST_PP_SEQ_SPLIT_5(x) (x) BOOST_PP_SEQ_SPLIT_4\n# define BOOST_PP_SEQ_SPLIT_6(x) (x) BOOST_PP_SEQ_SPLIT_5\n# define BOOST_PP_SEQ_SPLIT_7(x) (x) BOOST_PP_SEQ_SPLIT_6\n# define BOOST_PP_SEQ_SPLIT_8(x) (x) BOOST_PP_SEQ_SPLIT_7\n# define BOOST_PP_SEQ_SPLIT_9(x) (x) BOOST_PP_SEQ_SPLIT_8\n# define BOOST_PP_SEQ_SPLIT_10(x) (x) BOOST_PP_SEQ_SPLIT_9\n# define BOOST_PP_SEQ_SPLIT_11(x) (x) BOOST_PP_SEQ_SPLIT_10\n# define BOOST_PP_SEQ_SPLIT_12(x) (x) BOOST_PP_SEQ_SPLIT_11\n# define BOOST_PP_SEQ_SPLIT_13(x) (x) BOOST_PP_SEQ_SPLIT_12\n# define BOOST_PP_SEQ_SPLIT_14(x) (x) BOOST_PP_SEQ_SPLIT_13\n# define BOOST_PP_SEQ_SPLIT_15(x) (x) BOOST_PP_SEQ_SPLIT_14\n# define BOOST_PP_SEQ_SPLIT_16(x) (x) BOOST_PP_SEQ_SPLIT_15\n# define BOOST_PP_SEQ_SPLIT_17(x) (x) BOOST_PP_SEQ_SPLIT_16\n# define BOOST_PP_SEQ_SPLIT_18(x) (x) BOOST_PP_SEQ_SPLIT_17\n# define BOOST_PP_SEQ_SPLIT_19(x) (x) BOOST_PP_SEQ_SPLIT_18\n# define BOOST_PP_SEQ_SPLIT_20(x) (x) BOOST_PP_SEQ_SPLIT_19\n# define BOOST_PP_SEQ_SPLIT_21(x) (x) BOOST_PP_SEQ_SPLIT_20\n# define BOOST_PP_SEQ_SPLIT_22(x) (x) BOOST_PP_SEQ_SPLIT_21\n# define BOOST_PP_SEQ_SPLIT_23(x) (x) BOOST_PP_SEQ_SPLIT_22\n# define BOOST_PP_SEQ_SPLIT_24(x) (x) BOOST_PP_SEQ_SPLIT_23\n# define BOOST_PP_SEQ_SPLIT_25(x) (x) BOOST_PP_SEQ_SPLIT_24\n# define BOOST_PP_SEQ_SPLIT_26(x) (x) BOOST_PP_SEQ_SPLIT_25\n# define BOOST_PP_SEQ_SPLIT_27(x) (x) BOOST_PP_SEQ_SPLIT_26\n# define BOOST_PP_SEQ_SPLIT_28(x) (x) BOOST_PP_SEQ_SPLIT_27\n# define BOOST_PP_SEQ_SPLIT_29(x) (x) BOOST_PP_SEQ_SPLIT_28\n# define BOOST_PP_SEQ_SPLIT_30(x) (x) BOOST_PP_SEQ_SPLIT_29\n# define BOOST_PP_SEQ_SPLIT_31(x) (x) BOOST_PP_SEQ_SPLIT_30\n# define BOOST_PP_SEQ_SPLIT_32(x) (x) BOOST_PP_SEQ_SPLIT_31\n# define BOOST_PP_SEQ_SPLIT_33(x) (x) BOOST_PP_SEQ_SPLIT_32\n# define BOOST_PP_SEQ_SPLIT_34(x) (x) BOOST_PP_SEQ_SPLIT_33\n# define BOOST_PP_SEQ_SPLIT_35(x) (x) BOOST_PP_SEQ_SPLIT_34\n# define BOOST_PP_SEQ_SPLIT_36(x) (x) BOOST_PP_SEQ_SPLIT_35\n# define BOOST_PP_SEQ_SPLIT_37(x) (x) BOOST_PP_SEQ_SPLIT_36\n# define BOOST_PP_SEQ_SPLIT_38(x) (x) BOOST_PP_SEQ_SPLIT_37\n# define BOOST_PP_SEQ_SPLIT_39(x) (x) BOOST_PP_SEQ_SPLIT_38\n# define BOOST_PP_SEQ_SPLIT_40(x) (x) BOOST_PP_SEQ_SPLIT_39\n# define BOOST_PP_SEQ_SPLIT_41(x) (x) BOOST_PP_SEQ_SPLIT_40\n# define BOOST_PP_SEQ_SPLIT_42(x) (x) BOOST_PP_SEQ_SPLIT_41\n# define BOOST_PP_SEQ_SPLIT_43(x) (x) BOOST_PP_SEQ_SPLIT_42\n# define BOOST_PP_SEQ_SPLIT_44(x) (x) BOOST_PP_SEQ_SPLIT_43\n# define BOOST_PP_SEQ_SPLIT_45(x) (x) BOOST_PP_SEQ_SPLIT_44\n# define BOOST_PP_SEQ_SPLIT_46(x) (x) BOOST_PP_SEQ_SPLIT_45\n# define BOOST_PP_SEQ_SPLIT_47(x) (x) BOOST_PP_SEQ_SPLIT_46\n# define BOOST_PP_SEQ_SPLIT_48(x) (x) BOOST_PP_SEQ_SPLIT_47\n# define BOOST_PP_SEQ_SPLIT_49(x) (x) BOOST_PP_SEQ_SPLIT_48\n# define BOOST_PP_SEQ_SPLIT_50(x) (x) BOOST_PP_SEQ_SPLIT_49\n# define BOOST_PP_SEQ_SPLIT_51(x) (x) BOOST_PP_SEQ_SPLIT_50\n# define BOOST_PP_SEQ_SPLIT_52(x) (x) BOOST_PP_SEQ_SPLIT_51\n# define BOOST_PP_SEQ_SPLIT_53(x) (x) BOOST_PP_SEQ_SPLIT_52\n# define BOOST_PP_SEQ_SPLIT_54(x) (x) BOOST_PP_SEQ_SPLIT_53\n# define BOOST_PP_SEQ_SPLIT_55(x) (x) BOOST_PP_SEQ_SPLIT_54\n# define BOOST_PP_SEQ_SPLIT_56(x) (x) BOOST_PP_SEQ_SPLIT_55\n# define BOOST_PP_SEQ_SPLIT_57(x) (x) BOOST_PP_SEQ_SPLIT_56\n# define BOOST_PP_SEQ_SPLIT_58(x) (x) BOOST_PP_SEQ_SPLIT_57\n# define BOOST_PP_SEQ_SPLIT_59(x) (x) BOOST_PP_SEQ_SPLIT_58\n# define BOOST_PP_SEQ_SPLIT_60(x) (x) BOOST_PP_SEQ_SPLIT_59\n# define BOOST_PP_SEQ_SPLIT_61(x) (x) BOOST_PP_SEQ_SPLIT_60\n# define BOOST_PP_SEQ_SPLIT_62(x) (x) BOOST_PP_SEQ_SPLIT_61\n# define BOOST_PP_SEQ_SPLIT_63(x) (x) BOOST_PP_SEQ_SPLIT_62\n# define BOOST_PP_SEQ_SPLIT_64(x) (x) BOOST_PP_SEQ_SPLIT_63\n# define BOOST_PP_SEQ_SPLIT_65(x) (x) BOOST_PP_SEQ_SPLIT_64\n# define BOOST_PP_SEQ_SPLIT_66(x) (x) BOOST_PP_SEQ_SPLIT_65\n# define BOOST_PP_SEQ_SPLIT_67(x) (x) BOOST_PP_SEQ_SPLIT_66\n# define BOOST_PP_SEQ_SPLIT_68(x) (x) BOOST_PP_SEQ_SPLIT_67\n# define BOOST_PP_SEQ_SPLIT_69(x) (x) BOOST_PP_SEQ_SPLIT_68\n# define BOOST_PP_SEQ_SPLIT_70(x) (x) BOOST_PP_SEQ_SPLIT_69\n# define BOOST_PP_SEQ_SPLIT_71(x) (x) BOOST_PP_SEQ_SPLIT_70\n# define BOOST_PP_SEQ_SPLIT_72(x) (x) BOOST_PP_SEQ_SPLIT_71\n# define BOOST_PP_SEQ_SPLIT_73(x) (x) BOOST_PP_SEQ_SPLIT_72\n# define BOOST_PP_SEQ_SPLIT_74(x) (x) BOOST_PP_SEQ_SPLIT_73\n# define BOOST_PP_SEQ_SPLIT_75(x) (x) BOOST_PP_SEQ_SPLIT_74\n# define BOOST_PP_SEQ_SPLIT_76(x) (x) BOOST_PP_SEQ_SPLIT_75\n# define BOOST_PP_SEQ_SPLIT_77(x) (x) BOOST_PP_SEQ_SPLIT_76\n# define BOOST_PP_SEQ_SPLIT_78(x) (x) BOOST_PP_SEQ_SPLIT_77\n# define BOOST_PP_SEQ_SPLIT_79(x) (x) BOOST_PP_SEQ_SPLIT_78\n# define BOOST_PP_SEQ_SPLIT_80(x) (x) BOOST_PP_SEQ_SPLIT_79\n# define BOOST_PP_SEQ_SPLIT_81(x) (x) BOOST_PP_SEQ_SPLIT_80\n# define BOOST_PP_SEQ_SPLIT_82(x) (x) BOOST_PP_SEQ_SPLIT_81\n# define BOOST_PP_SEQ_SPLIT_83(x) (x) BOOST_PP_SEQ_SPLIT_82\n# define BOOST_PP_SEQ_SPLIT_84(x) (x) BOOST_PP_SEQ_SPLIT_83\n# define BOOST_PP_SEQ_SPLIT_85(x) (x) BOOST_PP_SEQ_SPLIT_84\n# define BOOST_PP_SEQ_SPLIT_86(x) (x) BOOST_PP_SEQ_SPLIT_85\n# define BOOST_PP_SEQ_SPLIT_87(x) (x) BOOST_PP_SEQ_SPLIT_86\n# define BOOST_PP_SEQ_SPLIT_88(x) (x) BOOST_PP_SEQ_SPLIT_87\n# define BOOST_PP_SEQ_SPLIT_89(x) (x) BOOST_PP_SEQ_SPLIT_88\n# define BOOST_PP_SEQ_SPLIT_90(x) (x) BOOST_PP_SEQ_SPLIT_89\n# define BOOST_PP_SEQ_SPLIT_91(x) (x) BOOST_PP_SEQ_SPLIT_90\n# define BOOST_PP_SEQ_SPLIT_92(x) (x) BOOST_PP_SEQ_SPLIT_91\n# define BOOST_PP_SEQ_SPLIT_93(x) (x) BOOST_PP_SEQ_SPLIT_92\n# define BOOST_PP_SEQ_SPLIT_94(x) (x) BOOST_PP_SEQ_SPLIT_93\n# define BOOST_PP_SEQ_SPLIT_95(x) (x) BOOST_PP_SEQ_SPLIT_94\n# define BOOST_PP_SEQ_SPLIT_96(x) (x) BOOST_PP_SEQ_SPLIT_95\n# define BOOST_PP_SEQ_SPLIT_97(x) (x) BOOST_PP_SEQ_SPLIT_96\n# define BOOST_PP_SEQ_SPLIT_98(x) (x) BOOST_PP_SEQ_SPLIT_97\n# define BOOST_PP_SEQ_SPLIT_99(x) (x) BOOST_PP_SEQ_SPLIT_98\n# define BOOST_PP_SEQ_SPLIT_100(x) (x) BOOST_PP_SEQ_SPLIT_99\n# define BOOST_PP_SEQ_SPLIT_101(x) (x) BOOST_PP_SEQ_SPLIT_100\n# define BOOST_PP_SEQ_SPLIT_102(x) (x) BOOST_PP_SEQ_SPLIT_101\n# define BOOST_PP_SEQ_SPLIT_103(x) (x) BOOST_PP_SEQ_SPLIT_102\n# define BOOST_PP_SEQ_SPLIT_104(x) (x) BOOST_PP_SEQ_SPLIT_103\n# define BOOST_PP_SEQ_SPLIT_105(x) (x) BOOST_PP_SEQ_SPLIT_104\n# define BOOST_PP_SEQ_SPLIT_106(x) (x) BOOST_PP_SEQ_SPLIT_105\n# define BOOST_PP_SEQ_SPLIT_107(x) (x) BOOST_PP_SEQ_SPLIT_106\n# define BOOST_PP_SEQ_SPLIT_108(x) (x) BOOST_PP_SEQ_SPLIT_107\n# define BOOST_PP_SEQ_SPLIT_109(x) (x) BOOST_PP_SEQ_SPLIT_108\n# define BOOST_PP_SEQ_SPLIT_110(x) (x) BOOST_PP_SEQ_SPLIT_109\n# define BOOST_PP_SEQ_SPLIT_111(x) (x) BOOST_PP_SEQ_SPLIT_110\n# define BOOST_PP_SEQ_SPLIT_112(x) (x) BOOST_PP_SEQ_SPLIT_111\n# define BOOST_PP_SEQ_SPLIT_113(x) (x) BOOST_PP_SEQ_SPLIT_112\n# define BOOST_PP_SEQ_SPLIT_114(x) (x) BOOST_PP_SEQ_SPLIT_113\n# define BOOST_PP_SEQ_SPLIT_115(x) (x) BOOST_PP_SEQ_SPLIT_114\n# define BOOST_PP_SEQ_SPLIT_116(x) (x) BOOST_PP_SEQ_SPLIT_115\n# define BOOST_PP_SEQ_SPLIT_117(x) (x) BOOST_PP_SEQ_SPLIT_116\n# define BOOST_PP_SEQ_SPLIT_118(x) (x) BOOST_PP_SEQ_SPLIT_117\n# define BOOST_PP_SEQ_SPLIT_119(x) (x) BOOST_PP_SEQ_SPLIT_118\n# define BOOST_PP_SEQ_SPLIT_120(x) (x) BOOST_PP_SEQ_SPLIT_119\n# define BOOST_PP_SEQ_SPLIT_121(x) (x) BOOST_PP_SEQ_SPLIT_120\n# define BOOST_PP_SEQ_SPLIT_122(x) (x) BOOST_PP_SEQ_SPLIT_121\n# define BOOST_PP_SEQ_SPLIT_123(x) (x) BOOST_PP_SEQ_SPLIT_122\n# define BOOST_PP_SEQ_SPLIT_124(x) (x) BOOST_PP_SEQ_SPLIT_123\n# define BOOST_PP_SEQ_SPLIT_125(x) (x) BOOST_PP_SEQ_SPLIT_124\n# define BOOST_PP_SEQ_SPLIT_126(x) (x) BOOST_PP_SEQ_SPLIT_125\n# define BOOST_PP_SEQ_SPLIT_127(x) (x) BOOST_PP_SEQ_SPLIT_126\n# define BOOST_PP_SEQ_SPLIT_128(x) (x) BOOST_PP_SEQ_SPLIT_127\n# define BOOST_PP_SEQ_SPLIT_129(x) (x) BOOST_PP_SEQ_SPLIT_128\n# define BOOST_PP_SEQ_SPLIT_130(x) (x) BOOST_PP_SEQ_SPLIT_129\n# define BOOST_PP_SEQ_SPLIT_131(x) (x) BOOST_PP_SEQ_SPLIT_130\n# define BOOST_PP_SEQ_SPLIT_132(x) (x) BOOST_PP_SEQ_SPLIT_131\n# define BOOST_PP_SEQ_SPLIT_133(x) (x) BOOST_PP_SEQ_SPLIT_132\n# define BOOST_PP_SEQ_SPLIT_134(x) (x) BOOST_PP_SEQ_SPLIT_133\n# define BOOST_PP_SEQ_SPLIT_135(x) (x) BOOST_PP_SEQ_SPLIT_134\n# define BOOST_PP_SEQ_SPLIT_136(x) (x) BOOST_PP_SEQ_SPLIT_135\n# define BOOST_PP_SEQ_SPLIT_137(x) (x) BOOST_PP_SEQ_SPLIT_136\n# define BOOST_PP_SEQ_SPLIT_138(x) (x) BOOST_PP_SEQ_SPLIT_137\n# define BOOST_PP_SEQ_SPLIT_139(x) (x) BOOST_PP_SEQ_SPLIT_138\n# define BOOST_PP_SEQ_SPLIT_140(x) (x) BOOST_PP_SEQ_SPLIT_139\n# define BOOST_PP_SEQ_SPLIT_141(x) (x) BOOST_PP_SEQ_SPLIT_140\n# define BOOST_PP_SEQ_SPLIT_142(x) (x) BOOST_PP_SEQ_SPLIT_141\n# define BOOST_PP_SEQ_SPLIT_143(x) (x) BOOST_PP_SEQ_SPLIT_142\n# define BOOST_PP_SEQ_SPLIT_144(x) (x) BOOST_PP_SEQ_SPLIT_143\n# define BOOST_PP_SEQ_SPLIT_145(x) (x) BOOST_PP_SEQ_SPLIT_144\n# define BOOST_PP_SEQ_SPLIT_146(x) (x) BOOST_PP_SEQ_SPLIT_145\n# define BOOST_PP_SEQ_SPLIT_147(x) (x) BOOST_PP_SEQ_SPLIT_146\n# define BOOST_PP_SEQ_SPLIT_148(x) (x) BOOST_PP_SEQ_SPLIT_147\n# define BOOST_PP_SEQ_SPLIT_149(x) (x) BOOST_PP_SEQ_SPLIT_148\n# define BOOST_PP_SEQ_SPLIT_150(x) (x) BOOST_PP_SEQ_SPLIT_149\n# define BOOST_PP_SEQ_SPLIT_151(x) (x) BOOST_PP_SEQ_SPLIT_150\n# define BOOST_PP_SEQ_SPLIT_152(x) (x) BOOST_PP_SEQ_SPLIT_151\n# define BOOST_PP_SEQ_SPLIT_153(x) (x) BOOST_PP_SEQ_SPLIT_152\n# define BOOST_PP_SEQ_SPLIT_154(x) (x) BOOST_PP_SEQ_SPLIT_153\n# define BOOST_PP_SEQ_SPLIT_155(x) (x) BOOST_PP_SEQ_SPLIT_154\n# define BOOST_PP_SEQ_SPLIT_156(x) (x) BOOST_PP_SEQ_SPLIT_155\n# define BOOST_PP_SEQ_SPLIT_157(x) (x) BOOST_PP_SEQ_SPLIT_156\n# define BOOST_PP_SEQ_SPLIT_158(x) (x) BOOST_PP_SEQ_SPLIT_157\n# define BOOST_PP_SEQ_SPLIT_159(x) (x) BOOST_PP_SEQ_SPLIT_158\n# define BOOST_PP_SEQ_SPLIT_160(x) (x) BOOST_PP_SEQ_SPLIT_159\n# define BOOST_PP_SEQ_SPLIT_161(x) (x) BOOST_PP_SEQ_SPLIT_160\n# define BOOST_PP_SEQ_SPLIT_162(x) (x) BOOST_PP_SEQ_SPLIT_161\n# define BOOST_PP_SEQ_SPLIT_163(x) (x) BOOST_PP_SEQ_SPLIT_162\n# define BOOST_PP_SEQ_SPLIT_164(x) (x) BOOST_PP_SEQ_SPLIT_163\n# define BOOST_PP_SEQ_SPLIT_165(x) (x) BOOST_PP_SEQ_SPLIT_164\n# define BOOST_PP_SEQ_SPLIT_166(x) (x) BOOST_PP_SEQ_SPLIT_165\n# define BOOST_PP_SEQ_SPLIT_167(x) (x) BOOST_PP_SEQ_SPLIT_166\n# define BOOST_PP_SEQ_SPLIT_168(x) (x) BOOST_PP_SEQ_SPLIT_167\n# define BOOST_PP_SEQ_SPLIT_169(x) (x) BOOST_PP_SEQ_SPLIT_168\n# define BOOST_PP_SEQ_SPLIT_170(x) (x) BOOST_PP_SEQ_SPLIT_169\n# define BOOST_PP_SEQ_SPLIT_171(x) (x) BOOST_PP_SEQ_SPLIT_170\n# define BOOST_PP_SEQ_SPLIT_172(x) (x) BOOST_PP_SEQ_SPLIT_171\n# define BOOST_PP_SEQ_SPLIT_173(x) (x) BOOST_PP_SEQ_SPLIT_172\n# define BOOST_PP_SEQ_SPLIT_174(x) (x) BOOST_PP_SEQ_SPLIT_173\n# define BOOST_PP_SEQ_SPLIT_175(x) (x) BOOST_PP_SEQ_SPLIT_174\n# define BOOST_PP_SEQ_SPLIT_176(x) (x) BOOST_PP_SEQ_SPLIT_175\n# define BOOST_PP_SEQ_SPLIT_177(x) (x) BOOST_PP_SEQ_SPLIT_176\n# define BOOST_PP_SEQ_SPLIT_178(x) (x) BOOST_PP_SEQ_SPLIT_177\n# define BOOST_PP_SEQ_SPLIT_179(x) (x) BOOST_PP_SEQ_SPLIT_178\n# define BOOST_PP_SEQ_SPLIT_180(x) (x) BOOST_PP_SEQ_SPLIT_179\n# define BOOST_PP_SEQ_SPLIT_181(x) (x) BOOST_PP_SEQ_SPLIT_180\n# define BOOST_PP_SEQ_SPLIT_182(x) (x) BOOST_PP_SEQ_SPLIT_181\n# define BOOST_PP_SEQ_SPLIT_183(x) (x) BOOST_PP_SEQ_SPLIT_182\n# define BOOST_PP_SEQ_SPLIT_184(x) (x) BOOST_PP_SEQ_SPLIT_183\n# define BOOST_PP_SEQ_SPLIT_185(x) (x) BOOST_PP_SEQ_SPLIT_184\n# define BOOST_PP_SEQ_SPLIT_186(x) (x) BOOST_PP_SEQ_SPLIT_185\n# define BOOST_PP_SEQ_SPLIT_187(x) (x) BOOST_PP_SEQ_SPLIT_186\n# define BOOST_PP_SEQ_SPLIT_188(x) (x) BOOST_PP_SEQ_SPLIT_187\n# define BOOST_PP_SEQ_SPLIT_189(x) (x) BOOST_PP_SEQ_SPLIT_188\n# define BOOST_PP_SEQ_SPLIT_190(x) (x) BOOST_PP_SEQ_SPLIT_189\n# define BOOST_PP_SEQ_SPLIT_191(x) (x) BOOST_PP_SEQ_SPLIT_190\n# define BOOST_PP_SEQ_SPLIT_192(x) (x) BOOST_PP_SEQ_SPLIT_191\n# define BOOST_PP_SEQ_SPLIT_193(x) (x) BOOST_PP_SEQ_SPLIT_192\n# define BOOST_PP_SEQ_SPLIT_194(x) (x) BOOST_PP_SEQ_SPLIT_193\n# define BOOST_PP_SEQ_SPLIT_195(x) (x) BOOST_PP_SEQ_SPLIT_194\n# define BOOST_PP_SEQ_SPLIT_196(x) (x) BOOST_PP_SEQ_SPLIT_195\n# define BOOST_PP_SEQ_SPLIT_197(x) (x) BOOST_PP_SEQ_SPLIT_196\n# define BOOST_PP_SEQ_SPLIT_198(x) (x) BOOST_PP_SEQ_SPLIT_197\n# define BOOST_PP_SEQ_SPLIT_199(x) (x) BOOST_PP_SEQ_SPLIT_198\n# define BOOST_PP_SEQ_SPLIT_200(x) (x) BOOST_PP_SEQ_SPLIT_199\n# define BOOST_PP_SEQ_SPLIT_201(x) (x) BOOST_PP_SEQ_SPLIT_200\n# define BOOST_PP_SEQ_SPLIT_202(x) (x) BOOST_PP_SEQ_SPLIT_201\n# define BOOST_PP_SEQ_SPLIT_203(x) (x) BOOST_PP_SEQ_SPLIT_202\n# define BOOST_PP_SEQ_SPLIT_204(x) (x) BOOST_PP_SEQ_SPLIT_203\n# define BOOST_PP_SEQ_SPLIT_205(x) (x) BOOST_PP_SEQ_SPLIT_204\n# define BOOST_PP_SEQ_SPLIT_206(x) (x) BOOST_PP_SEQ_SPLIT_205\n# define BOOST_PP_SEQ_SPLIT_207(x) (x) BOOST_PP_SEQ_SPLIT_206\n# define BOOST_PP_SEQ_SPLIT_208(x) (x) BOOST_PP_SEQ_SPLIT_207\n# define BOOST_PP_SEQ_SPLIT_209(x) (x) BOOST_PP_SEQ_SPLIT_208\n# define BOOST_PP_SEQ_SPLIT_210(x) (x) BOOST_PP_SEQ_SPLIT_209\n# define BOOST_PP_SEQ_SPLIT_211(x) (x) BOOST_PP_SEQ_SPLIT_210\n# define BOOST_PP_SEQ_SPLIT_212(x) (x) BOOST_PP_SEQ_SPLIT_211\n# define BOOST_PP_SEQ_SPLIT_213(x) (x) BOOST_PP_SEQ_SPLIT_212\n# define BOOST_PP_SEQ_SPLIT_214(x) (x) BOOST_PP_SEQ_SPLIT_213\n# define BOOST_PP_SEQ_SPLIT_215(x) (x) BOOST_PP_SEQ_SPLIT_214\n# define BOOST_PP_SEQ_SPLIT_216(x) (x) BOOST_PP_SEQ_SPLIT_215\n# define BOOST_PP_SEQ_SPLIT_217(x) (x) BOOST_PP_SEQ_SPLIT_216\n# define BOOST_PP_SEQ_SPLIT_218(x) (x) BOOST_PP_SEQ_SPLIT_217\n# define BOOST_PP_SEQ_SPLIT_219(x) (x) BOOST_PP_SEQ_SPLIT_218\n# define BOOST_PP_SEQ_SPLIT_220(x) (x) BOOST_PP_SEQ_SPLIT_219\n# define BOOST_PP_SEQ_SPLIT_221(x) (x) BOOST_PP_SEQ_SPLIT_220\n# define BOOST_PP_SEQ_SPLIT_222(x) (x) BOOST_PP_SEQ_SPLIT_221\n# define BOOST_PP_SEQ_SPLIT_223(x) (x) BOOST_PP_SEQ_SPLIT_222\n# define BOOST_PP_SEQ_SPLIT_224(x) (x) BOOST_PP_SEQ_SPLIT_223\n# define BOOST_PP_SEQ_SPLIT_225(x) (x) BOOST_PP_SEQ_SPLIT_224\n# define BOOST_PP_SEQ_SPLIT_226(x) (x) BOOST_PP_SEQ_SPLIT_225\n# define BOOST_PP_SEQ_SPLIT_227(x) (x) BOOST_PP_SEQ_SPLIT_226\n# define BOOST_PP_SEQ_SPLIT_228(x) (x) BOOST_PP_SEQ_SPLIT_227\n# define BOOST_PP_SEQ_SPLIT_229(x) (x) BOOST_PP_SEQ_SPLIT_228\n# define BOOST_PP_SEQ_SPLIT_230(x) (x) BOOST_PP_SEQ_SPLIT_229\n# define BOOST_PP_SEQ_SPLIT_231(x) (x) BOOST_PP_SEQ_SPLIT_230\n# define BOOST_PP_SEQ_SPLIT_232(x) (x) BOOST_PP_SEQ_SPLIT_231\n# define BOOST_PP_SEQ_SPLIT_233(x) (x) BOOST_PP_SEQ_SPLIT_232\n# define BOOST_PP_SEQ_SPLIT_234(x) (x) BOOST_PP_SEQ_SPLIT_233\n# define BOOST_PP_SEQ_SPLIT_235(x) (x) BOOST_PP_SEQ_SPLIT_234\n# define BOOST_PP_SEQ_SPLIT_236(x) (x) BOOST_PP_SEQ_SPLIT_235\n# define BOOST_PP_SEQ_SPLIT_237(x) (x) BOOST_PP_SEQ_SPLIT_236\n# define BOOST_PP_SEQ_SPLIT_238(x) (x) BOOST_PP_SEQ_SPLIT_237\n# define BOOST_PP_SEQ_SPLIT_239(x) (x) BOOST_PP_SEQ_SPLIT_238\n# define BOOST_PP_SEQ_SPLIT_240(x) (x) BOOST_PP_SEQ_SPLIT_239\n# define BOOST_PP_SEQ_SPLIT_241(x) (x) BOOST_PP_SEQ_SPLIT_240\n# define BOOST_PP_SEQ_SPLIT_242(x) (x) BOOST_PP_SEQ_SPLIT_241\n# define BOOST_PP_SEQ_SPLIT_243(x) (x) BOOST_PP_SEQ_SPLIT_242\n# define BOOST_PP_SEQ_SPLIT_244(x) (x) BOOST_PP_SEQ_SPLIT_243\n# define BOOST_PP_SEQ_SPLIT_245(x) (x) BOOST_PP_SEQ_SPLIT_244\n# define BOOST_PP_SEQ_SPLIT_246(x) (x) BOOST_PP_SEQ_SPLIT_245\n# define BOOST_PP_SEQ_SPLIT_247(x) (x) BOOST_PP_SEQ_SPLIT_246\n# define BOOST_PP_SEQ_SPLIT_248(x) (x) BOOST_PP_SEQ_SPLIT_247\n# define BOOST_PP_SEQ_SPLIT_249(x) (x) BOOST_PP_SEQ_SPLIT_248\n# define BOOST_PP_SEQ_SPLIT_250(x) (x) BOOST_PP_SEQ_SPLIT_249\n# define BOOST_PP_SEQ_SPLIT_251(x) (x) BOOST_PP_SEQ_SPLIT_250\n# define BOOST_PP_SEQ_SPLIT_252(x) (x) BOOST_PP_SEQ_SPLIT_251\n# define BOOST_PP_SEQ_SPLIT_253(x) (x) BOOST_PP_SEQ_SPLIT_252\n# define BOOST_PP_SEQ_SPLIT_254(x) (x) BOOST_PP_SEQ_SPLIT_253\n# define BOOST_PP_SEQ_SPLIT_255(x) (x) BOOST_PP_SEQ_SPLIT_254\n# define BOOST_PP_SEQ_SPLIT_256(x) (x) BOOST_PP_SEQ_SPLIT_255\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/elem.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_ELEM_HPP\n# define BOOST_PREPROCESSOR_SEQ_ELEM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n#\n# /* BOOST_PP_SEQ_ELEM */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_ELEM(i, seq) BOOST_PP_SEQ_ELEM_I(i, seq)\n# else\n#    define BOOST_PP_SEQ_ELEM(i, seq) BOOST_PP_SEQ_ELEM_I((i, seq))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II((BOOST_PP_SEQ_ELEM_ ## i seq))\n#    define BOOST_PP_SEQ_ELEM_II(res) BOOST_PP_SEQ_ELEM_IV(BOOST_PP_SEQ_ELEM_III res)\n#    define BOOST_PP_SEQ_ELEM_III(x, _) x BOOST_PP_EMPTY()\n#    define BOOST_PP_SEQ_ELEM_IV(x) x\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_ELEM_I(par) BOOST_PP_SEQ_ELEM_II ## par\n#    define BOOST_PP_SEQ_ELEM_II(i, seq) BOOST_PP_SEQ_ELEM_III(BOOST_PP_SEQ_ELEM_ ## i ## seq)\n#    define BOOST_PP_SEQ_ELEM_III(im) BOOST_PP_SEQ_ELEM_IV(im)\n#    define BOOST_PP_SEQ_ELEM_IV(x, _) x\n# else\n#    if defined(__IBMC__) || defined(__IBMCPP__)\n#        define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_CAT(BOOST_PP_SEQ_ELEM_ ## i, seq))\n#    else\n#        define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_SEQ_ELEM_ ## i seq)\n#    endif\n#    define BOOST_PP_SEQ_ELEM_II(im) BOOST_PP_SEQ_ELEM_III(im)\n#    define BOOST_PP_SEQ_ELEM_III(x, _) x\n# endif\n#\n# define BOOST_PP_SEQ_ELEM_0(x) x, BOOST_PP_NIL\n# define BOOST_PP_SEQ_ELEM_1(_) BOOST_PP_SEQ_ELEM_0\n# define BOOST_PP_SEQ_ELEM_2(_) BOOST_PP_SEQ_ELEM_1\n# define BOOST_PP_SEQ_ELEM_3(_) BOOST_PP_SEQ_ELEM_2\n# define BOOST_PP_SEQ_ELEM_4(_) BOOST_PP_SEQ_ELEM_3\n# define BOOST_PP_SEQ_ELEM_5(_) BOOST_PP_SEQ_ELEM_4\n# define BOOST_PP_SEQ_ELEM_6(_) BOOST_PP_SEQ_ELEM_5\n# define BOOST_PP_SEQ_ELEM_7(_) BOOST_PP_SEQ_ELEM_6\n# define BOOST_PP_SEQ_ELEM_8(_) BOOST_PP_SEQ_ELEM_7\n# define BOOST_PP_SEQ_ELEM_9(_) BOOST_PP_SEQ_ELEM_8\n# define BOOST_PP_SEQ_ELEM_10(_) BOOST_PP_SEQ_ELEM_9\n# define BOOST_PP_SEQ_ELEM_11(_) BOOST_PP_SEQ_ELEM_10\n# define BOOST_PP_SEQ_ELEM_12(_) BOOST_PP_SEQ_ELEM_11\n# define BOOST_PP_SEQ_ELEM_13(_) BOOST_PP_SEQ_ELEM_12\n# define BOOST_PP_SEQ_ELEM_14(_) BOOST_PP_SEQ_ELEM_13\n# define BOOST_PP_SEQ_ELEM_15(_) BOOST_PP_SEQ_ELEM_14\n# define BOOST_PP_SEQ_ELEM_16(_) BOOST_PP_SEQ_ELEM_15\n# define BOOST_PP_SEQ_ELEM_17(_) BOOST_PP_SEQ_ELEM_16\n# define BOOST_PP_SEQ_ELEM_18(_) BOOST_PP_SEQ_ELEM_17\n# define BOOST_PP_SEQ_ELEM_19(_) BOOST_PP_SEQ_ELEM_18\n# define BOOST_PP_SEQ_ELEM_20(_) BOOST_PP_SEQ_ELEM_19\n# define BOOST_PP_SEQ_ELEM_21(_) BOOST_PP_SEQ_ELEM_20\n# define BOOST_PP_SEQ_ELEM_22(_) BOOST_PP_SEQ_ELEM_21\n# define BOOST_PP_SEQ_ELEM_23(_) BOOST_PP_SEQ_ELEM_22\n# define BOOST_PP_SEQ_ELEM_24(_) BOOST_PP_SEQ_ELEM_23\n# define BOOST_PP_SEQ_ELEM_25(_) BOOST_PP_SEQ_ELEM_24\n# define BOOST_PP_SEQ_ELEM_26(_) BOOST_PP_SEQ_ELEM_25\n# define BOOST_PP_SEQ_ELEM_27(_) BOOST_PP_SEQ_ELEM_26\n# define BOOST_PP_SEQ_ELEM_28(_) BOOST_PP_SEQ_ELEM_27\n# define BOOST_PP_SEQ_ELEM_29(_) BOOST_PP_SEQ_ELEM_28\n# define BOOST_PP_SEQ_ELEM_30(_) BOOST_PP_SEQ_ELEM_29\n# define BOOST_PP_SEQ_ELEM_31(_) BOOST_PP_SEQ_ELEM_30\n# define BOOST_PP_SEQ_ELEM_32(_) BOOST_PP_SEQ_ELEM_31\n# define BOOST_PP_SEQ_ELEM_33(_) BOOST_PP_SEQ_ELEM_32\n# define BOOST_PP_SEQ_ELEM_34(_) BOOST_PP_SEQ_ELEM_33\n# define BOOST_PP_SEQ_ELEM_35(_) BOOST_PP_SEQ_ELEM_34\n# define BOOST_PP_SEQ_ELEM_36(_) BOOST_PP_SEQ_ELEM_35\n# define BOOST_PP_SEQ_ELEM_37(_) BOOST_PP_SEQ_ELEM_36\n# define BOOST_PP_SEQ_ELEM_38(_) BOOST_PP_SEQ_ELEM_37\n# define BOOST_PP_SEQ_ELEM_39(_) BOOST_PP_SEQ_ELEM_38\n# define BOOST_PP_SEQ_ELEM_40(_) BOOST_PP_SEQ_ELEM_39\n# define BOOST_PP_SEQ_ELEM_41(_) BOOST_PP_SEQ_ELEM_40\n# define BOOST_PP_SEQ_ELEM_42(_) BOOST_PP_SEQ_ELEM_41\n# define BOOST_PP_SEQ_ELEM_43(_) BOOST_PP_SEQ_ELEM_42\n# define BOOST_PP_SEQ_ELEM_44(_) BOOST_PP_SEQ_ELEM_43\n# define BOOST_PP_SEQ_ELEM_45(_) BOOST_PP_SEQ_ELEM_44\n# define BOOST_PP_SEQ_ELEM_46(_) BOOST_PP_SEQ_ELEM_45\n# define BOOST_PP_SEQ_ELEM_47(_) BOOST_PP_SEQ_ELEM_46\n# define BOOST_PP_SEQ_ELEM_48(_) BOOST_PP_SEQ_ELEM_47\n# define BOOST_PP_SEQ_ELEM_49(_) BOOST_PP_SEQ_ELEM_48\n# define BOOST_PP_SEQ_ELEM_50(_) BOOST_PP_SEQ_ELEM_49\n# define BOOST_PP_SEQ_ELEM_51(_) BOOST_PP_SEQ_ELEM_50\n# define BOOST_PP_SEQ_ELEM_52(_) BOOST_PP_SEQ_ELEM_51\n# define BOOST_PP_SEQ_ELEM_53(_) BOOST_PP_SEQ_ELEM_52\n# define BOOST_PP_SEQ_ELEM_54(_) BOOST_PP_SEQ_ELEM_53\n# define BOOST_PP_SEQ_ELEM_55(_) BOOST_PP_SEQ_ELEM_54\n# define BOOST_PP_SEQ_ELEM_56(_) BOOST_PP_SEQ_ELEM_55\n# define BOOST_PP_SEQ_ELEM_57(_) BOOST_PP_SEQ_ELEM_56\n# define BOOST_PP_SEQ_ELEM_58(_) BOOST_PP_SEQ_ELEM_57\n# define BOOST_PP_SEQ_ELEM_59(_) BOOST_PP_SEQ_ELEM_58\n# define BOOST_PP_SEQ_ELEM_60(_) BOOST_PP_SEQ_ELEM_59\n# define BOOST_PP_SEQ_ELEM_61(_) BOOST_PP_SEQ_ELEM_60\n# define BOOST_PP_SEQ_ELEM_62(_) BOOST_PP_SEQ_ELEM_61\n# define BOOST_PP_SEQ_ELEM_63(_) BOOST_PP_SEQ_ELEM_62\n# define BOOST_PP_SEQ_ELEM_64(_) BOOST_PP_SEQ_ELEM_63\n# define BOOST_PP_SEQ_ELEM_65(_) BOOST_PP_SEQ_ELEM_64\n# define BOOST_PP_SEQ_ELEM_66(_) BOOST_PP_SEQ_ELEM_65\n# define BOOST_PP_SEQ_ELEM_67(_) BOOST_PP_SEQ_ELEM_66\n# define BOOST_PP_SEQ_ELEM_68(_) BOOST_PP_SEQ_ELEM_67\n# define BOOST_PP_SEQ_ELEM_69(_) BOOST_PP_SEQ_ELEM_68\n# define BOOST_PP_SEQ_ELEM_70(_) BOOST_PP_SEQ_ELEM_69\n# define BOOST_PP_SEQ_ELEM_71(_) BOOST_PP_SEQ_ELEM_70\n# define BOOST_PP_SEQ_ELEM_72(_) BOOST_PP_SEQ_ELEM_71\n# define BOOST_PP_SEQ_ELEM_73(_) BOOST_PP_SEQ_ELEM_72\n# define BOOST_PP_SEQ_ELEM_74(_) BOOST_PP_SEQ_ELEM_73\n# define BOOST_PP_SEQ_ELEM_75(_) BOOST_PP_SEQ_ELEM_74\n# define BOOST_PP_SEQ_ELEM_76(_) BOOST_PP_SEQ_ELEM_75\n# define BOOST_PP_SEQ_ELEM_77(_) BOOST_PP_SEQ_ELEM_76\n# define BOOST_PP_SEQ_ELEM_78(_) BOOST_PP_SEQ_ELEM_77\n# define BOOST_PP_SEQ_ELEM_79(_) BOOST_PP_SEQ_ELEM_78\n# define BOOST_PP_SEQ_ELEM_80(_) BOOST_PP_SEQ_ELEM_79\n# define BOOST_PP_SEQ_ELEM_81(_) BOOST_PP_SEQ_ELEM_80\n# define BOOST_PP_SEQ_ELEM_82(_) BOOST_PP_SEQ_ELEM_81\n# define BOOST_PP_SEQ_ELEM_83(_) BOOST_PP_SEQ_ELEM_82\n# define BOOST_PP_SEQ_ELEM_84(_) BOOST_PP_SEQ_ELEM_83\n# define BOOST_PP_SEQ_ELEM_85(_) BOOST_PP_SEQ_ELEM_84\n# define BOOST_PP_SEQ_ELEM_86(_) BOOST_PP_SEQ_ELEM_85\n# define BOOST_PP_SEQ_ELEM_87(_) BOOST_PP_SEQ_ELEM_86\n# define BOOST_PP_SEQ_ELEM_88(_) BOOST_PP_SEQ_ELEM_87\n# define BOOST_PP_SEQ_ELEM_89(_) BOOST_PP_SEQ_ELEM_88\n# define BOOST_PP_SEQ_ELEM_90(_) BOOST_PP_SEQ_ELEM_89\n# define BOOST_PP_SEQ_ELEM_91(_) BOOST_PP_SEQ_ELEM_90\n# define BOOST_PP_SEQ_ELEM_92(_) BOOST_PP_SEQ_ELEM_91\n# define BOOST_PP_SEQ_ELEM_93(_) BOOST_PP_SEQ_ELEM_92\n# define BOOST_PP_SEQ_ELEM_94(_) BOOST_PP_SEQ_ELEM_93\n# define BOOST_PP_SEQ_ELEM_95(_) BOOST_PP_SEQ_ELEM_94\n# define BOOST_PP_SEQ_ELEM_96(_) BOOST_PP_SEQ_ELEM_95\n# define BOOST_PP_SEQ_ELEM_97(_) BOOST_PP_SEQ_ELEM_96\n# define BOOST_PP_SEQ_ELEM_98(_) BOOST_PP_SEQ_ELEM_97\n# define BOOST_PP_SEQ_ELEM_99(_) BOOST_PP_SEQ_ELEM_98\n# define BOOST_PP_SEQ_ELEM_100(_) BOOST_PP_SEQ_ELEM_99\n# define BOOST_PP_SEQ_ELEM_101(_) BOOST_PP_SEQ_ELEM_100\n# define BOOST_PP_SEQ_ELEM_102(_) BOOST_PP_SEQ_ELEM_101\n# define BOOST_PP_SEQ_ELEM_103(_) BOOST_PP_SEQ_ELEM_102\n# define BOOST_PP_SEQ_ELEM_104(_) BOOST_PP_SEQ_ELEM_103\n# define BOOST_PP_SEQ_ELEM_105(_) BOOST_PP_SEQ_ELEM_104\n# define BOOST_PP_SEQ_ELEM_106(_) BOOST_PP_SEQ_ELEM_105\n# define BOOST_PP_SEQ_ELEM_107(_) BOOST_PP_SEQ_ELEM_106\n# define BOOST_PP_SEQ_ELEM_108(_) BOOST_PP_SEQ_ELEM_107\n# define BOOST_PP_SEQ_ELEM_109(_) BOOST_PP_SEQ_ELEM_108\n# define BOOST_PP_SEQ_ELEM_110(_) BOOST_PP_SEQ_ELEM_109\n# define BOOST_PP_SEQ_ELEM_111(_) BOOST_PP_SEQ_ELEM_110\n# define BOOST_PP_SEQ_ELEM_112(_) BOOST_PP_SEQ_ELEM_111\n# define BOOST_PP_SEQ_ELEM_113(_) BOOST_PP_SEQ_ELEM_112\n# define BOOST_PP_SEQ_ELEM_114(_) BOOST_PP_SEQ_ELEM_113\n# define BOOST_PP_SEQ_ELEM_115(_) BOOST_PP_SEQ_ELEM_114\n# define BOOST_PP_SEQ_ELEM_116(_) BOOST_PP_SEQ_ELEM_115\n# define BOOST_PP_SEQ_ELEM_117(_) BOOST_PP_SEQ_ELEM_116\n# define BOOST_PP_SEQ_ELEM_118(_) BOOST_PP_SEQ_ELEM_117\n# define BOOST_PP_SEQ_ELEM_119(_) BOOST_PP_SEQ_ELEM_118\n# define BOOST_PP_SEQ_ELEM_120(_) BOOST_PP_SEQ_ELEM_119\n# define BOOST_PP_SEQ_ELEM_121(_) BOOST_PP_SEQ_ELEM_120\n# define BOOST_PP_SEQ_ELEM_122(_) BOOST_PP_SEQ_ELEM_121\n# define BOOST_PP_SEQ_ELEM_123(_) BOOST_PP_SEQ_ELEM_122\n# define BOOST_PP_SEQ_ELEM_124(_) BOOST_PP_SEQ_ELEM_123\n# define BOOST_PP_SEQ_ELEM_125(_) BOOST_PP_SEQ_ELEM_124\n# define BOOST_PP_SEQ_ELEM_126(_) BOOST_PP_SEQ_ELEM_125\n# define BOOST_PP_SEQ_ELEM_127(_) BOOST_PP_SEQ_ELEM_126\n# define BOOST_PP_SEQ_ELEM_128(_) BOOST_PP_SEQ_ELEM_127\n# define BOOST_PP_SEQ_ELEM_129(_) BOOST_PP_SEQ_ELEM_128\n# define BOOST_PP_SEQ_ELEM_130(_) BOOST_PP_SEQ_ELEM_129\n# define BOOST_PP_SEQ_ELEM_131(_) BOOST_PP_SEQ_ELEM_130\n# define BOOST_PP_SEQ_ELEM_132(_) BOOST_PP_SEQ_ELEM_131\n# define BOOST_PP_SEQ_ELEM_133(_) BOOST_PP_SEQ_ELEM_132\n# define BOOST_PP_SEQ_ELEM_134(_) BOOST_PP_SEQ_ELEM_133\n# define BOOST_PP_SEQ_ELEM_135(_) BOOST_PP_SEQ_ELEM_134\n# define BOOST_PP_SEQ_ELEM_136(_) BOOST_PP_SEQ_ELEM_135\n# define BOOST_PP_SEQ_ELEM_137(_) BOOST_PP_SEQ_ELEM_136\n# define BOOST_PP_SEQ_ELEM_138(_) BOOST_PP_SEQ_ELEM_137\n# define BOOST_PP_SEQ_ELEM_139(_) BOOST_PP_SEQ_ELEM_138\n# define BOOST_PP_SEQ_ELEM_140(_) BOOST_PP_SEQ_ELEM_139\n# define BOOST_PP_SEQ_ELEM_141(_) BOOST_PP_SEQ_ELEM_140\n# define BOOST_PP_SEQ_ELEM_142(_) BOOST_PP_SEQ_ELEM_141\n# define BOOST_PP_SEQ_ELEM_143(_) BOOST_PP_SEQ_ELEM_142\n# define BOOST_PP_SEQ_ELEM_144(_) BOOST_PP_SEQ_ELEM_143\n# define BOOST_PP_SEQ_ELEM_145(_) BOOST_PP_SEQ_ELEM_144\n# define BOOST_PP_SEQ_ELEM_146(_) BOOST_PP_SEQ_ELEM_145\n# define BOOST_PP_SEQ_ELEM_147(_) BOOST_PP_SEQ_ELEM_146\n# define BOOST_PP_SEQ_ELEM_148(_) BOOST_PP_SEQ_ELEM_147\n# define BOOST_PP_SEQ_ELEM_149(_) BOOST_PP_SEQ_ELEM_148\n# define BOOST_PP_SEQ_ELEM_150(_) BOOST_PP_SEQ_ELEM_149\n# define BOOST_PP_SEQ_ELEM_151(_) BOOST_PP_SEQ_ELEM_150\n# define BOOST_PP_SEQ_ELEM_152(_) BOOST_PP_SEQ_ELEM_151\n# define BOOST_PP_SEQ_ELEM_153(_) BOOST_PP_SEQ_ELEM_152\n# define BOOST_PP_SEQ_ELEM_154(_) BOOST_PP_SEQ_ELEM_153\n# define BOOST_PP_SEQ_ELEM_155(_) BOOST_PP_SEQ_ELEM_154\n# define BOOST_PP_SEQ_ELEM_156(_) BOOST_PP_SEQ_ELEM_155\n# define BOOST_PP_SEQ_ELEM_157(_) BOOST_PP_SEQ_ELEM_156\n# define BOOST_PP_SEQ_ELEM_158(_) BOOST_PP_SEQ_ELEM_157\n# define BOOST_PP_SEQ_ELEM_159(_) BOOST_PP_SEQ_ELEM_158\n# define BOOST_PP_SEQ_ELEM_160(_) BOOST_PP_SEQ_ELEM_159\n# define BOOST_PP_SEQ_ELEM_161(_) BOOST_PP_SEQ_ELEM_160\n# define BOOST_PP_SEQ_ELEM_162(_) BOOST_PP_SEQ_ELEM_161\n# define BOOST_PP_SEQ_ELEM_163(_) BOOST_PP_SEQ_ELEM_162\n# define BOOST_PP_SEQ_ELEM_164(_) BOOST_PP_SEQ_ELEM_163\n# define BOOST_PP_SEQ_ELEM_165(_) BOOST_PP_SEQ_ELEM_164\n# define BOOST_PP_SEQ_ELEM_166(_) BOOST_PP_SEQ_ELEM_165\n# define BOOST_PP_SEQ_ELEM_167(_) BOOST_PP_SEQ_ELEM_166\n# define BOOST_PP_SEQ_ELEM_168(_) BOOST_PP_SEQ_ELEM_167\n# define BOOST_PP_SEQ_ELEM_169(_) BOOST_PP_SEQ_ELEM_168\n# define BOOST_PP_SEQ_ELEM_170(_) BOOST_PP_SEQ_ELEM_169\n# define BOOST_PP_SEQ_ELEM_171(_) BOOST_PP_SEQ_ELEM_170\n# define BOOST_PP_SEQ_ELEM_172(_) BOOST_PP_SEQ_ELEM_171\n# define BOOST_PP_SEQ_ELEM_173(_) BOOST_PP_SEQ_ELEM_172\n# define BOOST_PP_SEQ_ELEM_174(_) BOOST_PP_SEQ_ELEM_173\n# define BOOST_PP_SEQ_ELEM_175(_) BOOST_PP_SEQ_ELEM_174\n# define BOOST_PP_SEQ_ELEM_176(_) BOOST_PP_SEQ_ELEM_175\n# define BOOST_PP_SEQ_ELEM_177(_) BOOST_PP_SEQ_ELEM_176\n# define BOOST_PP_SEQ_ELEM_178(_) BOOST_PP_SEQ_ELEM_177\n# define BOOST_PP_SEQ_ELEM_179(_) BOOST_PP_SEQ_ELEM_178\n# define BOOST_PP_SEQ_ELEM_180(_) BOOST_PP_SEQ_ELEM_179\n# define BOOST_PP_SEQ_ELEM_181(_) BOOST_PP_SEQ_ELEM_180\n# define BOOST_PP_SEQ_ELEM_182(_) BOOST_PP_SEQ_ELEM_181\n# define BOOST_PP_SEQ_ELEM_183(_) BOOST_PP_SEQ_ELEM_182\n# define BOOST_PP_SEQ_ELEM_184(_) BOOST_PP_SEQ_ELEM_183\n# define BOOST_PP_SEQ_ELEM_185(_) BOOST_PP_SEQ_ELEM_184\n# define BOOST_PP_SEQ_ELEM_186(_) BOOST_PP_SEQ_ELEM_185\n# define BOOST_PP_SEQ_ELEM_187(_) BOOST_PP_SEQ_ELEM_186\n# define BOOST_PP_SEQ_ELEM_188(_) BOOST_PP_SEQ_ELEM_187\n# define BOOST_PP_SEQ_ELEM_189(_) BOOST_PP_SEQ_ELEM_188\n# define BOOST_PP_SEQ_ELEM_190(_) BOOST_PP_SEQ_ELEM_189\n# define BOOST_PP_SEQ_ELEM_191(_) BOOST_PP_SEQ_ELEM_190\n# define BOOST_PP_SEQ_ELEM_192(_) BOOST_PP_SEQ_ELEM_191\n# define BOOST_PP_SEQ_ELEM_193(_) BOOST_PP_SEQ_ELEM_192\n# define BOOST_PP_SEQ_ELEM_194(_) BOOST_PP_SEQ_ELEM_193\n# define BOOST_PP_SEQ_ELEM_195(_) BOOST_PP_SEQ_ELEM_194\n# define BOOST_PP_SEQ_ELEM_196(_) BOOST_PP_SEQ_ELEM_195\n# define BOOST_PP_SEQ_ELEM_197(_) BOOST_PP_SEQ_ELEM_196\n# define BOOST_PP_SEQ_ELEM_198(_) BOOST_PP_SEQ_ELEM_197\n# define BOOST_PP_SEQ_ELEM_199(_) BOOST_PP_SEQ_ELEM_198\n# define BOOST_PP_SEQ_ELEM_200(_) BOOST_PP_SEQ_ELEM_199\n# define BOOST_PP_SEQ_ELEM_201(_) BOOST_PP_SEQ_ELEM_200\n# define BOOST_PP_SEQ_ELEM_202(_) BOOST_PP_SEQ_ELEM_201\n# define BOOST_PP_SEQ_ELEM_203(_) BOOST_PP_SEQ_ELEM_202\n# define BOOST_PP_SEQ_ELEM_204(_) BOOST_PP_SEQ_ELEM_203\n# define BOOST_PP_SEQ_ELEM_205(_) BOOST_PP_SEQ_ELEM_204\n# define BOOST_PP_SEQ_ELEM_206(_) BOOST_PP_SEQ_ELEM_205\n# define BOOST_PP_SEQ_ELEM_207(_) BOOST_PP_SEQ_ELEM_206\n# define BOOST_PP_SEQ_ELEM_208(_) BOOST_PP_SEQ_ELEM_207\n# define BOOST_PP_SEQ_ELEM_209(_) BOOST_PP_SEQ_ELEM_208\n# define BOOST_PP_SEQ_ELEM_210(_) BOOST_PP_SEQ_ELEM_209\n# define BOOST_PP_SEQ_ELEM_211(_) BOOST_PP_SEQ_ELEM_210\n# define BOOST_PP_SEQ_ELEM_212(_) BOOST_PP_SEQ_ELEM_211\n# define BOOST_PP_SEQ_ELEM_213(_) BOOST_PP_SEQ_ELEM_212\n# define BOOST_PP_SEQ_ELEM_214(_) BOOST_PP_SEQ_ELEM_213\n# define BOOST_PP_SEQ_ELEM_215(_) BOOST_PP_SEQ_ELEM_214\n# define BOOST_PP_SEQ_ELEM_216(_) BOOST_PP_SEQ_ELEM_215\n# define BOOST_PP_SEQ_ELEM_217(_) BOOST_PP_SEQ_ELEM_216\n# define BOOST_PP_SEQ_ELEM_218(_) BOOST_PP_SEQ_ELEM_217\n# define BOOST_PP_SEQ_ELEM_219(_) BOOST_PP_SEQ_ELEM_218\n# define BOOST_PP_SEQ_ELEM_220(_) BOOST_PP_SEQ_ELEM_219\n# define BOOST_PP_SEQ_ELEM_221(_) BOOST_PP_SEQ_ELEM_220\n# define BOOST_PP_SEQ_ELEM_222(_) BOOST_PP_SEQ_ELEM_221\n# define BOOST_PP_SEQ_ELEM_223(_) BOOST_PP_SEQ_ELEM_222\n# define BOOST_PP_SEQ_ELEM_224(_) BOOST_PP_SEQ_ELEM_223\n# define BOOST_PP_SEQ_ELEM_225(_) BOOST_PP_SEQ_ELEM_224\n# define BOOST_PP_SEQ_ELEM_226(_) BOOST_PP_SEQ_ELEM_225\n# define BOOST_PP_SEQ_ELEM_227(_) BOOST_PP_SEQ_ELEM_226\n# define BOOST_PP_SEQ_ELEM_228(_) BOOST_PP_SEQ_ELEM_227\n# define BOOST_PP_SEQ_ELEM_229(_) BOOST_PP_SEQ_ELEM_228\n# define BOOST_PP_SEQ_ELEM_230(_) BOOST_PP_SEQ_ELEM_229\n# define BOOST_PP_SEQ_ELEM_231(_) BOOST_PP_SEQ_ELEM_230\n# define BOOST_PP_SEQ_ELEM_232(_) BOOST_PP_SEQ_ELEM_231\n# define BOOST_PP_SEQ_ELEM_233(_) BOOST_PP_SEQ_ELEM_232\n# define BOOST_PP_SEQ_ELEM_234(_) BOOST_PP_SEQ_ELEM_233\n# define BOOST_PP_SEQ_ELEM_235(_) BOOST_PP_SEQ_ELEM_234\n# define BOOST_PP_SEQ_ELEM_236(_) BOOST_PP_SEQ_ELEM_235\n# define BOOST_PP_SEQ_ELEM_237(_) BOOST_PP_SEQ_ELEM_236\n# define BOOST_PP_SEQ_ELEM_238(_) BOOST_PP_SEQ_ELEM_237\n# define BOOST_PP_SEQ_ELEM_239(_) BOOST_PP_SEQ_ELEM_238\n# define BOOST_PP_SEQ_ELEM_240(_) BOOST_PP_SEQ_ELEM_239\n# define BOOST_PP_SEQ_ELEM_241(_) BOOST_PP_SEQ_ELEM_240\n# define BOOST_PP_SEQ_ELEM_242(_) BOOST_PP_SEQ_ELEM_241\n# define BOOST_PP_SEQ_ELEM_243(_) BOOST_PP_SEQ_ELEM_242\n# define BOOST_PP_SEQ_ELEM_244(_) BOOST_PP_SEQ_ELEM_243\n# define BOOST_PP_SEQ_ELEM_245(_) BOOST_PP_SEQ_ELEM_244\n# define BOOST_PP_SEQ_ELEM_246(_) BOOST_PP_SEQ_ELEM_245\n# define BOOST_PP_SEQ_ELEM_247(_) BOOST_PP_SEQ_ELEM_246\n# define BOOST_PP_SEQ_ELEM_248(_) BOOST_PP_SEQ_ELEM_247\n# define BOOST_PP_SEQ_ELEM_249(_) BOOST_PP_SEQ_ELEM_248\n# define BOOST_PP_SEQ_ELEM_250(_) BOOST_PP_SEQ_ELEM_249\n# define BOOST_PP_SEQ_ELEM_251(_) BOOST_PP_SEQ_ELEM_250\n# define BOOST_PP_SEQ_ELEM_252(_) BOOST_PP_SEQ_ELEM_251\n# define BOOST_PP_SEQ_ELEM_253(_) BOOST_PP_SEQ_ELEM_252\n# define BOOST_PP_SEQ_ELEM_254(_) BOOST_PP_SEQ_ELEM_253\n# define BOOST_PP_SEQ_ELEM_255(_) BOOST_PP_SEQ_ELEM_254\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/enum.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_ENUM_HPP\n# define BOOST_PREPROCESSOR_SEQ_ENUM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n#\n# /* BOOST_PP_SEQ_ENUM */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(seq)\n#    define BOOST_PP_SEQ_ENUM_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(BOOST_PP_SEQ_SIZE(seq), seq)\n#    define BOOST_PP_SEQ_ENUM_I(size, seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, size) seq\n# else\n#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq\n# endif\n#\n# define BOOST_PP_SEQ_ENUM_1(x) x\n# define BOOST_PP_SEQ_ENUM_2(x) x, BOOST_PP_SEQ_ENUM_1\n# define BOOST_PP_SEQ_ENUM_3(x) x, BOOST_PP_SEQ_ENUM_2\n# define BOOST_PP_SEQ_ENUM_4(x) x, BOOST_PP_SEQ_ENUM_3\n# define BOOST_PP_SEQ_ENUM_5(x) x, BOOST_PP_SEQ_ENUM_4\n# define BOOST_PP_SEQ_ENUM_6(x) x, BOOST_PP_SEQ_ENUM_5\n# define BOOST_PP_SEQ_ENUM_7(x) x, BOOST_PP_SEQ_ENUM_6\n# define BOOST_PP_SEQ_ENUM_8(x) x, BOOST_PP_SEQ_ENUM_7\n# define BOOST_PP_SEQ_ENUM_9(x) x, BOOST_PP_SEQ_ENUM_8\n# define BOOST_PP_SEQ_ENUM_10(x) x, BOOST_PP_SEQ_ENUM_9\n# define BOOST_PP_SEQ_ENUM_11(x) x, BOOST_PP_SEQ_ENUM_10\n# define BOOST_PP_SEQ_ENUM_12(x) x, BOOST_PP_SEQ_ENUM_11\n# define BOOST_PP_SEQ_ENUM_13(x) x, BOOST_PP_SEQ_ENUM_12\n# define BOOST_PP_SEQ_ENUM_14(x) x, BOOST_PP_SEQ_ENUM_13\n# define BOOST_PP_SEQ_ENUM_15(x) x, BOOST_PP_SEQ_ENUM_14\n# define BOOST_PP_SEQ_ENUM_16(x) x, BOOST_PP_SEQ_ENUM_15\n# define BOOST_PP_SEQ_ENUM_17(x) x, BOOST_PP_SEQ_ENUM_16\n# define BOOST_PP_SEQ_ENUM_18(x) x, BOOST_PP_SEQ_ENUM_17\n# define BOOST_PP_SEQ_ENUM_19(x) x, BOOST_PP_SEQ_ENUM_18\n# define BOOST_PP_SEQ_ENUM_20(x) x, BOOST_PP_SEQ_ENUM_19\n# define BOOST_PP_SEQ_ENUM_21(x) x, BOOST_PP_SEQ_ENUM_20\n# define BOOST_PP_SEQ_ENUM_22(x) x, BOOST_PP_SEQ_ENUM_21\n# define BOOST_PP_SEQ_ENUM_23(x) x, BOOST_PP_SEQ_ENUM_22\n# define BOOST_PP_SEQ_ENUM_24(x) x, BOOST_PP_SEQ_ENUM_23\n# define BOOST_PP_SEQ_ENUM_25(x) x, BOOST_PP_SEQ_ENUM_24\n# define BOOST_PP_SEQ_ENUM_26(x) x, BOOST_PP_SEQ_ENUM_25\n# define BOOST_PP_SEQ_ENUM_27(x) x, BOOST_PP_SEQ_ENUM_26\n# define BOOST_PP_SEQ_ENUM_28(x) x, BOOST_PP_SEQ_ENUM_27\n# define BOOST_PP_SEQ_ENUM_29(x) x, BOOST_PP_SEQ_ENUM_28\n# define BOOST_PP_SEQ_ENUM_30(x) x, BOOST_PP_SEQ_ENUM_29\n# define BOOST_PP_SEQ_ENUM_31(x) x, BOOST_PP_SEQ_ENUM_30\n# define BOOST_PP_SEQ_ENUM_32(x) x, BOOST_PP_SEQ_ENUM_31\n# define BOOST_PP_SEQ_ENUM_33(x) x, BOOST_PP_SEQ_ENUM_32\n# define BOOST_PP_SEQ_ENUM_34(x) x, BOOST_PP_SEQ_ENUM_33\n# define BOOST_PP_SEQ_ENUM_35(x) x, BOOST_PP_SEQ_ENUM_34\n# define BOOST_PP_SEQ_ENUM_36(x) x, BOOST_PP_SEQ_ENUM_35\n# define BOOST_PP_SEQ_ENUM_37(x) x, BOOST_PP_SEQ_ENUM_36\n# define BOOST_PP_SEQ_ENUM_38(x) x, BOOST_PP_SEQ_ENUM_37\n# define BOOST_PP_SEQ_ENUM_39(x) x, BOOST_PP_SEQ_ENUM_38\n# define BOOST_PP_SEQ_ENUM_40(x) x, BOOST_PP_SEQ_ENUM_39\n# define BOOST_PP_SEQ_ENUM_41(x) x, BOOST_PP_SEQ_ENUM_40\n# define BOOST_PP_SEQ_ENUM_42(x) x, BOOST_PP_SEQ_ENUM_41\n# define BOOST_PP_SEQ_ENUM_43(x) x, BOOST_PP_SEQ_ENUM_42\n# define BOOST_PP_SEQ_ENUM_44(x) x, BOOST_PP_SEQ_ENUM_43\n# define BOOST_PP_SEQ_ENUM_45(x) x, BOOST_PP_SEQ_ENUM_44\n# define BOOST_PP_SEQ_ENUM_46(x) x, BOOST_PP_SEQ_ENUM_45\n# define BOOST_PP_SEQ_ENUM_47(x) x, BOOST_PP_SEQ_ENUM_46\n# define BOOST_PP_SEQ_ENUM_48(x) x, BOOST_PP_SEQ_ENUM_47\n# define BOOST_PP_SEQ_ENUM_49(x) x, BOOST_PP_SEQ_ENUM_48\n# define BOOST_PP_SEQ_ENUM_50(x) x, BOOST_PP_SEQ_ENUM_49\n# define BOOST_PP_SEQ_ENUM_51(x) x, BOOST_PP_SEQ_ENUM_50\n# define BOOST_PP_SEQ_ENUM_52(x) x, BOOST_PP_SEQ_ENUM_51\n# define BOOST_PP_SEQ_ENUM_53(x) x, BOOST_PP_SEQ_ENUM_52\n# define BOOST_PP_SEQ_ENUM_54(x) x, BOOST_PP_SEQ_ENUM_53\n# define BOOST_PP_SEQ_ENUM_55(x) x, BOOST_PP_SEQ_ENUM_54\n# define BOOST_PP_SEQ_ENUM_56(x) x, BOOST_PP_SEQ_ENUM_55\n# define BOOST_PP_SEQ_ENUM_57(x) x, BOOST_PP_SEQ_ENUM_56\n# define BOOST_PP_SEQ_ENUM_58(x) x, BOOST_PP_SEQ_ENUM_57\n# define BOOST_PP_SEQ_ENUM_59(x) x, BOOST_PP_SEQ_ENUM_58\n# define BOOST_PP_SEQ_ENUM_60(x) x, BOOST_PP_SEQ_ENUM_59\n# define BOOST_PP_SEQ_ENUM_61(x) x, BOOST_PP_SEQ_ENUM_60\n# define BOOST_PP_SEQ_ENUM_62(x) x, BOOST_PP_SEQ_ENUM_61\n# define BOOST_PP_SEQ_ENUM_63(x) x, BOOST_PP_SEQ_ENUM_62\n# define BOOST_PP_SEQ_ENUM_64(x) x, BOOST_PP_SEQ_ENUM_63\n# define BOOST_PP_SEQ_ENUM_65(x) x, BOOST_PP_SEQ_ENUM_64\n# define BOOST_PP_SEQ_ENUM_66(x) x, BOOST_PP_SEQ_ENUM_65\n# define BOOST_PP_SEQ_ENUM_67(x) x, BOOST_PP_SEQ_ENUM_66\n# define BOOST_PP_SEQ_ENUM_68(x) x, BOOST_PP_SEQ_ENUM_67\n# define BOOST_PP_SEQ_ENUM_69(x) x, BOOST_PP_SEQ_ENUM_68\n# define BOOST_PP_SEQ_ENUM_70(x) x, BOOST_PP_SEQ_ENUM_69\n# define BOOST_PP_SEQ_ENUM_71(x) x, BOOST_PP_SEQ_ENUM_70\n# define BOOST_PP_SEQ_ENUM_72(x) x, BOOST_PP_SEQ_ENUM_71\n# define BOOST_PP_SEQ_ENUM_73(x) x, BOOST_PP_SEQ_ENUM_72\n# define BOOST_PP_SEQ_ENUM_74(x) x, BOOST_PP_SEQ_ENUM_73\n# define BOOST_PP_SEQ_ENUM_75(x) x, BOOST_PP_SEQ_ENUM_74\n# define BOOST_PP_SEQ_ENUM_76(x) x, BOOST_PP_SEQ_ENUM_75\n# define BOOST_PP_SEQ_ENUM_77(x) x, BOOST_PP_SEQ_ENUM_76\n# define BOOST_PP_SEQ_ENUM_78(x) x, BOOST_PP_SEQ_ENUM_77\n# define BOOST_PP_SEQ_ENUM_79(x) x, BOOST_PP_SEQ_ENUM_78\n# define BOOST_PP_SEQ_ENUM_80(x) x, BOOST_PP_SEQ_ENUM_79\n# define BOOST_PP_SEQ_ENUM_81(x) x, BOOST_PP_SEQ_ENUM_80\n# define BOOST_PP_SEQ_ENUM_82(x) x, BOOST_PP_SEQ_ENUM_81\n# define BOOST_PP_SEQ_ENUM_83(x) x, BOOST_PP_SEQ_ENUM_82\n# define BOOST_PP_SEQ_ENUM_84(x) x, BOOST_PP_SEQ_ENUM_83\n# define BOOST_PP_SEQ_ENUM_85(x) x, BOOST_PP_SEQ_ENUM_84\n# define BOOST_PP_SEQ_ENUM_86(x) x, BOOST_PP_SEQ_ENUM_85\n# define BOOST_PP_SEQ_ENUM_87(x) x, BOOST_PP_SEQ_ENUM_86\n# define BOOST_PP_SEQ_ENUM_88(x) x, BOOST_PP_SEQ_ENUM_87\n# define BOOST_PP_SEQ_ENUM_89(x) x, BOOST_PP_SEQ_ENUM_88\n# define BOOST_PP_SEQ_ENUM_90(x) x, BOOST_PP_SEQ_ENUM_89\n# define BOOST_PP_SEQ_ENUM_91(x) x, BOOST_PP_SEQ_ENUM_90\n# define BOOST_PP_SEQ_ENUM_92(x) x, BOOST_PP_SEQ_ENUM_91\n# define BOOST_PP_SEQ_ENUM_93(x) x, BOOST_PP_SEQ_ENUM_92\n# define BOOST_PP_SEQ_ENUM_94(x) x, BOOST_PP_SEQ_ENUM_93\n# define BOOST_PP_SEQ_ENUM_95(x) x, BOOST_PP_SEQ_ENUM_94\n# define BOOST_PP_SEQ_ENUM_96(x) x, BOOST_PP_SEQ_ENUM_95\n# define BOOST_PP_SEQ_ENUM_97(x) x, BOOST_PP_SEQ_ENUM_96\n# define BOOST_PP_SEQ_ENUM_98(x) x, BOOST_PP_SEQ_ENUM_97\n# define BOOST_PP_SEQ_ENUM_99(x) x, BOOST_PP_SEQ_ENUM_98\n# define BOOST_PP_SEQ_ENUM_100(x) x, BOOST_PP_SEQ_ENUM_99\n# define BOOST_PP_SEQ_ENUM_101(x) x, BOOST_PP_SEQ_ENUM_100\n# define BOOST_PP_SEQ_ENUM_102(x) x, BOOST_PP_SEQ_ENUM_101\n# define BOOST_PP_SEQ_ENUM_103(x) x, BOOST_PP_SEQ_ENUM_102\n# define BOOST_PP_SEQ_ENUM_104(x) x, BOOST_PP_SEQ_ENUM_103\n# define BOOST_PP_SEQ_ENUM_105(x) x, BOOST_PP_SEQ_ENUM_104\n# define BOOST_PP_SEQ_ENUM_106(x) x, BOOST_PP_SEQ_ENUM_105\n# define BOOST_PP_SEQ_ENUM_107(x) x, BOOST_PP_SEQ_ENUM_106\n# define BOOST_PP_SEQ_ENUM_108(x) x, BOOST_PP_SEQ_ENUM_107\n# define BOOST_PP_SEQ_ENUM_109(x) x, BOOST_PP_SEQ_ENUM_108\n# define BOOST_PP_SEQ_ENUM_110(x) x, BOOST_PP_SEQ_ENUM_109\n# define BOOST_PP_SEQ_ENUM_111(x) x, BOOST_PP_SEQ_ENUM_110\n# define BOOST_PP_SEQ_ENUM_112(x) x, BOOST_PP_SEQ_ENUM_111\n# define BOOST_PP_SEQ_ENUM_113(x) x, BOOST_PP_SEQ_ENUM_112\n# define BOOST_PP_SEQ_ENUM_114(x) x, BOOST_PP_SEQ_ENUM_113\n# define BOOST_PP_SEQ_ENUM_115(x) x, BOOST_PP_SEQ_ENUM_114\n# define BOOST_PP_SEQ_ENUM_116(x) x, BOOST_PP_SEQ_ENUM_115\n# define BOOST_PP_SEQ_ENUM_117(x) x, BOOST_PP_SEQ_ENUM_116\n# define BOOST_PP_SEQ_ENUM_118(x) x, BOOST_PP_SEQ_ENUM_117\n# define BOOST_PP_SEQ_ENUM_119(x) x, BOOST_PP_SEQ_ENUM_118\n# define BOOST_PP_SEQ_ENUM_120(x) x, BOOST_PP_SEQ_ENUM_119\n# define BOOST_PP_SEQ_ENUM_121(x) x, BOOST_PP_SEQ_ENUM_120\n# define BOOST_PP_SEQ_ENUM_122(x) x, BOOST_PP_SEQ_ENUM_121\n# define BOOST_PP_SEQ_ENUM_123(x) x, BOOST_PP_SEQ_ENUM_122\n# define BOOST_PP_SEQ_ENUM_124(x) x, BOOST_PP_SEQ_ENUM_123\n# define BOOST_PP_SEQ_ENUM_125(x) x, BOOST_PP_SEQ_ENUM_124\n# define BOOST_PP_SEQ_ENUM_126(x) x, BOOST_PP_SEQ_ENUM_125\n# define BOOST_PP_SEQ_ENUM_127(x) x, BOOST_PP_SEQ_ENUM_126\n# define BOOST_PP_SEQ_ENUM_128(x) x, BOOST_PP_SEQ_ENUM_127\n# define BOOST_PP_SEQ_ENUM_129(x) x, BOOST_PP_SEQ_ENUM_128\n# define BOOST_PP_SEQ_ENUM_130(x) x, BOOST_PP_SEQ_ENUM_129\n# define BOOST_PP_SEQ_ENUM_131(x) x, BOOST_PP_SEQ_ENUM_130\n# define BOOST_PP_SEQ_ENUM_132(x) x, BOOST_PP_SEQ_ENUM_131\n# define BOOST_PP_SEQ_ENUM_133(x) x, BOOST_PP_SEQ_ENUM_132\n# define BOOST_PP_SEQ_ENUM_134(x) x, BOOST_PP_SEQ_ENUM_133\n# define BOOST_PP_SEQ_ENUM_135(x) x, BOOST_PP_SEQ_ENUM_134\n# define BOOST_PP_SEQ_ENUM_136(x) x, BOOST_PP_SEQ_ENUM_135\n# define BOOST_PP_SEQ_ENUM_137(x) x, BOOST_PP_SEQ_ENUM_136\n# define BOOST_PP_SEQ_ENUM_138(x) x, BOOST_PP_SEQ_ENUM_137\n# define BOOST_PP_SEQ_ENUM_139(x) x, BOOST_PP_SEQ_ENUM_138\n# define BOOST_PP_SEQ_ENUM_140(x) x, BOOST_PP_SEQ_ENUM_139\n# define BOOST_PP_SEQ_ENUM_141(x) x, BOOST_PP_SEQ_ENUM_140\n# define BOOST_PP_SEQ_ENUM_142(x) x, BOOST_PP_SEQ_ENUM_141\n# define BOOST_PP_SEQ_ENUM_143(x) x, BOOST_PP_SEQ_ENUM_142\n# define BOOST_PP_SEQ_ENUM_144(x) x, BOOST_PP_SEQ_ENUM_143\n# define BOOST_PP_SEQ_ENUM_145(x) x, BOOST_PP_SEQ_ENUM_144\n# define BOOST_PP_SEQ_ENUM_146(x) x, BOOST_PP_SEQ_ENUM_145\n# define BOOST_PP_SEQ_ENUM_147(x) x, BOOST_PP_SEQ_ENUM_146\n# define BOOST_PP_SEQ_ENUM_148(x) x, BOOST_PP_SEQ_ENUM_147\n# define BOOST_PP_SEQ_ENUM_149(x) x, BOOST_PP_SEQ_ENUM_148\n# define BOOST_PP_SEQ_ENUM_150(x) x, BOOST_PP_SEQ_ENUM_149\n# define BOOST_PP_SEQ_ENUM_151(x) x, BOOST_PP_SEQ_ENUM_150\n# define BOOST_PP_SEQ_ENUM_152(x) x, BOOST_PP_SEQ_ENUM_151\n# define BOOST_PP_SEQ_ENUM_153(x) x, BOOST_PP_SEQ_ENUM_152\n# define BOOST_PP_SEQ_ENUM_154(x) x, BOOST_PP_SEQ_ENUM_153\n# define BOOST_PP_SEQ_ENUM_155(x) x, BOOST_PP_SEQ_ENUM_154\n# define BOOST_PP_SEQ_ENUM_156(x) x, BOOST_PP_SEQ_ENUM_155\n# define BOOST_PP_SEQ_ENUM_157(x) x, BOOST_PP_SEQ_ENUM_156\n# define BOOST_PP_SEQ_ENUM_158(x) x, BOOST_PP_SEQ_ENUM_157\n# define BOOST_PP_SEQ_ENUM_159(x) x, BOOST_PP_SEQ_ENUM_158\n# define BOOST_PP_SEQ_ENUM_160(x) x, BOOST_PP_SEQ_ENUM_159\n# define BOOST_PP_SEQ_ENUM_161(x) x, BOOST_PP_SEQ_ENUM_160\n# define BOOST_PP_SEQ_ENUM_162(x) x, BOOST_PP_SEQ_ENUM_161\n# define BOOST_PP_SEQ_ENUM_163(x) x, BOOST_PP_SEQ_ENUM_162\n# define BOOST_PP_SEQ_ENUM_164(x) x, BOOST_PP_SEQ_ENUM_163\n# define BOOST_PP_SEQ_ENUM_165(x) x, BOOST_PP_SEQ_ENUM_164\n# define BOOST_PP_SEQ_ENUM_166(x) x, BOOST_PP_SEQ_ENUM_165\n# define BOOST_PP_SEQ_ENUM_167(x) x, BOOST_PP_SEQ_ENUM_166\n# define BOOST_PP_SEQ_ENUM_168(x) x, BOOST_PP_SEQ_ENUM_167\n# define BOOST_PP_SEQ_ENUM_169(x) x, BOOST_PP_SEQ_ENUM_168\n# define BOOST_PP_SEQ_ENUM_170(x) x, BOOST_PP_SEQ_ENUM_169\n# define BOOST_PP_SEQ_ENUM_171(x) x, BOOST_PP_SEQ_ENUM_170\n# define BOOST_PP_SEQ_ENUM_172(x) x, BOOST_PP_SEQ_ENUM_171\n# define BOOST_PP_SEQ_ENUM_173(x) x, BOOST_PP_SEQ_ENUM_172\n# define BOOST_PP_SEQ_ENUM_174(x) x, BOOST_PP_SEQ_ENUM_173\n# define BOOST_PP_SEQ_ENUM_175(x) x, BOOST_PP_SEQ_ENUM_174\n# define BOOST_PP_SEQ_ENUM_176(x) x, BOOST_PP_SEQ_ENUM_175\n# define BOOST_PP_SEQ_ENUM_177(x) x, BOOST_PP_SEQ_ENUM_176\n# define BOOST_PP_SEQ_ENUM_178(x) x, BOOST_PP_SEQ_ENUM_177\n# define BOOST_PP_SEQ_ENUM_179(x) x, BOOST_PP_SEQ_ENUM_178\n# define BOOST_PP_SEQ_ENUM_180(x) x, BOOST_PP_SEQ_ENUM_179\n# define BOOST_PP_SEQ_ENUM_181(x) x, BOOST_PP_SEQ_ENUM_180\n# define BOOST_PP_SEQ_ENUM_182(x) x, BOOST_PP_SEQ_ENUM_181\n# define BOOST_PP_SEQ_ENUM_183(x) x, BOOST_PP_SEQ_ENUM_182\n# define BOOST_PP_SEQ_ENUM_184(x) x, BOOST_PP_SEQ_ENUM_183\n# define BOOST_PP_SEQ_ENUM_185(x) x, BOOST_PP_SEQ_ENUM_184\n# define BOOST_PP_SEQ_ENUM_186(x) x, BOOST_PP_SEQ_ENUM_185\n# define BOOST_PP_SEQ_ENUM_187(x) x, BOOST_PP_SEQ_ENUM_186\n# define BOOST_PP_SEQ_ENUM_188(x) x, BOOST_PP_SEQ_ENUM_187\n# define BOOST_PP_SEQ_ENUM_189(x) x, BOOST_PP_SEQ_ENUM_188\n# define BOOST_PP_SEQ_ENUM_190(x) x, BOOST_PP_SEQ_ENUM_189\n# define BOOST_PP_SEQ_ENUM_191(x) x, BOOST_PP_SEQ_ENUM_190\n# define BOOST_PP_SEQ_ENUM_192(x) x, BOOST_PP_SEQ_ENUM_191\n# define BOOST_PP_SEQ_ENUM_193(x) x, BOOST_PP_SEQ_ENUM_192\n# define BOOST_PP_SEQ_ENUM_194(x) x, BOOST_PP_SEQ_ENUM_193\n# define BOOST_PP_SEQ_ENUM_195(x) x, BOOST_PP_SEQ_ENUM_194\n# define BOOST_PP_SEQ_ENUM_196(x) x, BOOST_PP_SEQ_ENUM_195\n# define BOOST_PP_SEQ_ENUM_197(x) x, BOOST_PP_SEQ_ENUM_196\n# define BOOST_PP_SEQ_ENUM_198(x) x, BOOST_PP_SEQ_ENUM_197\n# define BOOST_PP_SEQ_ENUM_199(x) x, BOOST_PP_SEQ_ENUM_198\n# define BOOST_PP_SEQ_ENUM_200(x) x, BOOST_PP_SEQ_ENUM_199\n# define BOOST_PP_SEQ_ENUM_201(x) x, BOOST_PP_SEQ_ENUM_200\n# define BOOST_PP_SEQ_ENUM_202(x) x, BOOST_PP_SEQ_ENUM_201\n# define BOOST_PP_SEQ_ENUM_203(x) x, BOOST_PP_SEQ_ENUM_202\n# define BOOST_PP_SEQ_ENUM_204(x) x, BOOST_PP_SEQ_ENUM_203\n# define BOOST_PP_SEQ_ENUM_205(x) x, BOOST_PP_SEQ_ENUM_204\n# define BOOST_PP_SEQ_ENUM_206(x) x, BOOST_PP_SEQ_ENUM_205\n# define BOOST_PP_SEQ_ENUM_207(x) x, BOOST_PP_SEQ_ENUM_206\n# define BOOST_PP_SEQ_ENUM_208(x) x, BOOST_PP_SEQ_ENUM_207\n# define BOOST_PP_SEQ_ENUM_209(x) x, BOOST_PP_SEQ_ENUM_208\n# define BOOST_PP_SEQ_ENUM_210(x) x, BOOST_PP_SEQ_ENUM_209\n# define BOOST_PP_SEQ_ENUM_211(x) x, BOOST_PP_SEQ_ENUM_210\n# define BOOST_PP_SEQ_ENUM_212(x) x, BOOST_PP_SEQ_ENUM_211\n# define BOOST_PP_SEQ_ENUM_213(x) x, BOOST_PP_SEQ_ENUM_212\n# define BOOST_PP_SEQ_ENUM_214(x) x, BOOST_PP_SEQ_ENUM_213\n# define BOOST_PP_SEQ_ENUM_215(x) x, BOOST_PP_SEQ_ENUM_214\n# define BOOST_PP_SEQ_ENUM_216(x) x, BOOST_PP_SEQ_ENUM_215\n# define BOOST_PP_SEQ_ENUM_217(x) x, BOOST_PP_SEQ_ENUM_216\n# define BOOST_PP_SEQ_ENUM_218(x) x, BOOST_PP_SEQ_ENUM_217\n# define BOOST_PP_SEQ_ENUM_219(x) x, BOOST_PP_SEQ_ENUM_218\n# define BOOST_PP_SEQ_ENUM_220(x) x, BOOST_PP_SEQ_ENUM_219\n# define BOOST_PP_SEQ_ENUM_221(x) x, BOOST_PP_SEQ_ENUM_220\n# define BOOST_PP_SEQ_ENUM_222(x) x, BOOST_PP_SEQ_ENUM_221\n# define BOOST_PP_SEQ_ENUM_223(x) x, BOOST_PP_SEQ_ENUM_222\n# define BOOST_PP_SEQ_ENUM_224(x) x, BOOST_PP_SEQ_ENUM_223\n# define BOOST_PP_SEQ_ENUM_225(x) x, BOOST_PP_SEQ_ENUM_224\n# define BOOST_PP_SEQ_ENUM_226(x) x, BOOST_PP_SEQ_ENUM_225\n# define BOOST_PP_SEQ_ENUM_227(x) x, BOOST_PP_SEQ_ENUM_226\n# define BOOST_PP_SEQ_ENUM_228(x) x, BOOST_PP_SEQ_ENUM_227\n# define BOOST_PP_SEQ_ENUM_229(x) x, BOOST_PP_SEQ_ENUM_228\n# define BOOST_PP_SEQ_ENUM_230(x) x, BOOST_PP_SEQ_ENUM_229\n# define BOOST_PP_SEQ_ENUM_231(x) x, BOOST_PP_SEQ_ENUM_230\n# define BOOST_PP_SEQ_ENUM_232(x) x, BOOST_PP_SEQ_ENUM_231\n# define BOOST_PP_SEQ_ENUM_233(x) x, BOOST_PP_SEQ_ENUM_232\n# define BOOST_PP_SEQ_ENUM_234(x) x, BOOST_PP_SEQ_ENUM_233\n# define BOOST_PP_SEQ_ENUM_235(x) x, BOOST_PP_SEQ_ENUM_234\n# define BOOST_PP_SEQ_ENUM_236(x) x, BOOST_PP_SEQ_ENUM_235\n# define BOOST_PP_SEQ_ENUM_237(x) x, BOOST_PP_SEQ_ENUM_236\n# define BOOST_PP_SEQ_ENUM_238(x) x, BOOST_PP_SEQ_ENUM_237\n# define BOOST_PP_SEQ_ENUM_239(x) x, BOOST_PP_SEQ_ENUM_238\n# define BOOST_PP_SEQ_ENUM_240(x) x, BOOST_PP_SEQ_ENUM_239\n# define BOOST_PP_SEQ_ENUM_241(x) x, BOOST_PP_SEQ_ENUM_240\n# define BOOST_PP_SEQ_ENUM_242(x) x, BOOST_PP_SEQ_ENUM_241\n# define BOOST_PP_SEQ_ENUM_243(x) x, BOOST_PP_SEQ_ENUM_242\n# define BOOST_PP_SEQ_ENUM_244(x) x, BOOST_PP_SEQ_ENUM_243\n# define BOOST_PP_SEQ_ENUM_245(x) x, BOOST_PP_SEQ_ENUM_244\n# define BOOST_PP_SEQ_ENUM_246(x) x, BOOST_PP_SEQ_ENUM_245\n# define BOOST_PP_SEQ_ENUM_247(x) x, BOOST_PP_SEQ_ENUM_246\n# define BOOST_PP_SEQ_ENUM_248(x) x, BOOST_PP_SEQ_ENUM_247\n# define BOOST_PP_SEQ_ENUM_249(x) x, BOOST_PP_SEQ_ENUM_248\n# define BOOST_PP_SEQ_ENUM_250(x) x, BOOST_PP_SEQ_ENUM_249\n# define BOOST_PP_SEQ_ENUM_251(x) x, BOOST_PP_SEQ_ENUM_250\n# define BOOST_PP_SEQ_ENUM_252(x) x, BOOST_PP_SEQ_ENUM_251\n# define BOOST_PP_SEQ_ENUM_253(x) x, BOOST_PP_SEQ_ENUM_252\n# define BOOST_PP_SEQ_ENUM_254(x) x, BOOST_PP_SEQ_ENUM_253\n# define BOOST_PP_SEQ_ENUM_255(x) x, BOOST_PP_SEQ_ENUM_254\n# define BOOST_PP_SEQ_ENUM_256(x) x, BOOST_PP_SEQ_ENUM_255\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/filter.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FILTER_HPP\n# define BOOST_PREPROCESSOR_SEQ_FILTER_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/expr_if.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n# include <boost/preprocessor/seq/fold_left.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_SEQ_FILTER */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FILTER(pred, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_FILTER_O, (pred, data, (nil)), seq)))\n# else\n#    define BOOST_PP_SEQ_FILTER(pred, data, seq) BOOST_PP_SEQ_FILTER_I(pred, data, seq)\n#    define BOOST_PP_SEQ_FILTER_I(pred, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_FILTER_O, (pred, data, (nil)), seq)))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FILTER_O(s, st, elem) BOOST_PP_SEQ_FILTER_O_IM(s, BOOST_PP_TUPLE_REM_3 st, elem)\n#    define BOOST_PP_SEQ_FILTER_O_IM(s, im, elem) BOOST_PP_SEQ_FILTER_O_I(s, im, elem)\n# else\n#    define BOOST_PP_SEQ_FILTER_O(s, st, elem) BOOST_PP_SEQ_FILTER_O_I(s, BOOST_PP_TUPLE_ELEM(3, 0, st), BOOST_PP_TUPLE_ELEM(3, 1, st), BOOST_PP_TUPLE_ELEM(3, 2, st), elem)\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#   define BOOST_PP_SEQ_FILTER_O_I(s, pred, data, res, elem) (pred, data, res BOOST_PP_EXPR_IF(pred(s, data, elem), (elem)))\n# else\n#   define BOOST_PP_SEQ_FILTER_O_I(s, pred, data, res, elem) (pred, data, res BOOST_PP_EXPR_IF(pred##(s, data, elem), (elem)))\n# endif\n#\n# /* BOOST_PP_SEQ_FILTER_S */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FILTER_S(s, pred, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_FILTER_O, (pred, data, (nil)), seq)))\n# else\n#    define BOOST_PP_SEQ_FILTER_S(s, pred, data, seq) BOOST_PP_SEQ_FILTER_S_I(s, pred, data, seq)\n#    define BOOST_PP_SEQ_FILTER_S_I(s, pred, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_FILTER_O, (pred, data, (nil)), seq)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/first_n.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FIRST_N_HPP\n# define BOOST_PREPROCESSOR_SEQ_FIRST_N_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/seq/detail/split.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_SEQ_FIRST_N */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FIRST_N(n, seq) BOOST_PP_IF(n, BOOST_PP_TUPLE_ELEM, BOOST_PP_TUPLE_EAT_3)(2, 0, BOOST_PP_SEQ_SPLIT(n, seq (nil)))\n# else\n#    define BOOST_PP_SEQ_FIRST_N(n, seq) BOOST_PP_SEQ_FIRST_N_I(n, seq)\n#    define BOOST_PP_SEQ_FIRST_N_I(n, seq) BOOST_PP_IF(n, BOOST_PP_TUPLE_ELEM, BOOST_PP_TUPLE_EAT_3)(2, 0, BOOST_PP_SEQ_SPLIT(n, seq (nil)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/fold_left.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_HPP\n# define BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n#\n# /* BOOST_PP_SEQ_FOLD_LEFT */\n#\n# if 0\n#    define BOOST_PP_SEQ_FOLD_LEFT(op, state, seq) ...\n# endif\n#\n# define BOOST_PP_SEQ_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256))\n# define BOOST_PP_SEQ_FOLD_LEFT_P(n) BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_CHECK_, BOOST_PP_SEQ_FOLD_LEFT_I_ ## n(BOOST_PP_SEQ_FOLD_LEFT_O, BOOST_PP_NIL, (nil), 1))\n# define BOOST_PP_SEQ_FOLD_LEFT_O(s, st, _) st\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_257(op, st, ss) BOOST_PP_ERROR(0x0005)\n# define BOOST_PP_SEQ_FOLD_LEFT_I_257(op, st, ss, sz) BOOST_PP_ERROR(0x0005)\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) 0\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_F(op, st, ss, sz) st\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_1(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_2(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_3(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_4(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_5(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_6(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_7(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_8(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_9(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_10(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_11(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_12(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_13(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_14(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_15(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_16(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_17(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_18(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_19(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_20(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_21(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_22(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_23(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_24(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_25(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_26(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_27(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_28(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_29(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_30(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_31(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_32(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_33(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_34(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_35(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_36(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_37(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_38(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_39(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_40(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_41(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_42(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_43(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_44(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_45(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_46(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_47(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_48(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_49(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_50(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_51(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_52(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_53(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_54(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_55(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_56(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_57(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_58(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_59(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_60(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_61(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_62(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_63(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_64(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_65(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_66(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_67(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_68(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_69(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_70(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_71(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_72(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_73(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_74(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_75(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_76(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_77(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_78(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_79(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_80(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_81(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_82(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_83(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_84(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_85(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_86(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_87(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_88(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_89(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_90(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_91(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_92(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_93(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_94(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_95(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_96(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_97(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_98(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_99(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_100(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_101(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_102(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_103(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_104(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_105(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_106(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_107(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_108(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_109(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_110(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_111(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_112(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_113(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_114(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_115(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_116(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_117(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_118(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_119(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_120(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_121(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_122(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_123(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_124(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_125(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_126(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_127(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_128(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_129(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_130(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_131(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_132(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_133(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_134(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_135(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_136(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_137(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_138(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_139(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_140(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_141(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_142(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_143(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_144(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_145(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_146(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_147(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_148(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_149(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_150(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_151(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_152(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_153(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_154(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_155(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_156(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_157(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_158(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_159(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_160(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_161(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_162(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_163(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_164(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_165(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_166(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_167(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_168(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_169(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_170(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_171(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_172(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_173(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_174(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_175(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_176(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_177(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_178(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_179(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_180(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_181(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_182(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_183(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_184(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_185(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_186(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_187(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_188(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_189(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_190(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_191(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_192(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_193(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_194(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_195(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_196(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_197(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_198(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_199(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_200(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_201(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_202(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_203(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_204(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_205(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_206(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_207(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_208(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_209(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_210(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_211(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_212(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_213(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_214(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_215(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_216(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_217(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_218(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_219(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_220(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_221(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_222(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_223(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_224(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_225(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_226(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_227(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_228(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_229(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_230(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_231(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_232(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_233(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_234(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_235(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_236(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_237(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_238(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_239(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_240(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_241(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_242(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_243(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_244(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_245(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_246(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_247(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_248(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_249(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_250(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_251(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_252(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_253(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_254(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_255(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_256(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_5, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(5, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_6, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(6, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_7, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(7, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_8, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(8, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_9, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(9, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_10, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(10, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_11, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(11, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_12, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(12, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_13, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(13, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_14, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(14, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_15, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(15, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_16, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(16, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_17, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(17, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_18, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(18, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_19, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(19, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_20, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(20, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_21, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(21, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_22, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(22, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_23, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(23, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_24, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(24, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_25, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(25, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_26, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(26, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_27, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(27, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_28, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(28, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_29, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(29, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_30, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(30, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_31, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(31, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_32, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(32, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_33, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(33, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_34, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(34, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_35, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(35, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_36, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(36, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_37, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(37, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_38, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(38, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_39, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(39, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_40, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(40, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_41, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(41, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_42, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(42, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_43, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(43, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_44, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(44, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_45, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(45, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_46, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(46, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_47, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(47, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_48, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(48, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_49, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(49, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_50, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(50, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_51, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(51, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_52, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(52, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_53, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(53, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_54, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(54, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_55, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(55, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_56, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(56, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_57, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(57, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_58, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(58, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_59, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(59, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_60, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(60, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_61, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(61, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_62, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(62, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_63, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(63, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_64, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(64, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_65, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(65, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_66, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(66, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_67, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(67, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_68, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(68, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_69, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(69, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_70, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(70, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_71, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(71, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_72, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(72, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_73, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(73, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_74, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(74, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_75, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(75, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_76, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(76, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_77, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(77, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_78, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(78, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_79, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(79, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_80, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(80, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_81, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(81, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_82, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(82, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_83, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(83, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_84, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(84, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_85, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(85, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_86, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(86, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_87, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(87, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_88, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(88, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_89, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(89, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_90, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(90, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_91, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(91, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_92, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(92, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_93, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(93, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_94, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(94, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_95, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(95, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_96, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(96, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_97, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(97, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_98, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(98, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_99, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(99, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_100, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(100, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_101, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(101, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_102, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(102, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_103, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(103, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_104, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(104, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_105, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(105, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_106, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(106, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_107, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(107, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_108, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(108, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_109, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(109, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_110, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(110, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_111, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(111, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_112, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(112, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_113, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(113, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_114, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(114, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_115, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(115, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_116, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(116, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_117, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(117, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_118, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(118, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_119, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(119, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_120, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(120, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_121, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(121, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_122, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(122, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_123, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(123, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_124, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(124, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_125, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(125, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_126, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(126, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_127, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(127, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_128, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(128, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_129, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(129, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_130, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(130, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_131, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(131, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_132, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(132, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_133, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(133, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_134, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(134, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_135, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(135, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_136, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(136, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_137, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(137, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_138, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(138, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_139, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(139, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_140, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(140, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_141, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(141, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_142, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(142, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_143, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(143, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_144, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(144, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_145, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(145, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_146, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(146, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_147, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(147, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_148, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(148, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_149, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(149, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_150, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(150, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_151, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(151, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_152, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(152, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_153, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(153, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_154, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(154, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_155, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(155, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_156, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(156, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_157, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(157, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_158, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(158, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_159, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(159, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_160, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(160, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_161, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(161, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_162, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(162, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_163, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(163, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_164, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(164, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_165, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(165, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_166, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(166, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_167, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(167, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_168, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(168, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_169, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(169, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_170, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(170, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_171, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(171, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_172, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(172, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_173, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(173, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_174, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(174, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_175, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(175, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_176, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(176, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_177, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(177, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_178, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(178, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_179, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(179, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_180, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(180, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_181, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(181, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_182, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(182, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_183, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(183, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_184, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(184, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_185, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(185, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_186, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(186, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_187, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(187, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_188, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(188, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_189, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(189, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_190, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(190, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_191, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(191, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_192, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(192, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_193, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(193, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_194, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(194, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_195, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(195, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_196, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(196, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_197, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(197, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_198, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(198, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_199, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(199, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_200, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(200, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_201, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(201, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_202, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(202, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_203, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(203, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_204, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(204, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_205, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(205, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_206, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(206, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_207, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(207, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_208, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(208, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_209, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(209, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_210, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(210, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_211, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(211, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_212, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(212, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_213, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(213, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_214, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(214, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_215, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(215, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_216, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(216, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_217, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(217, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_218, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(218, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_219, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(219, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_220, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(220, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_221, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(221, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_222, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(222, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_223, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(223, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_224, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(224, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_225, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(225, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_226, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(226, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_227, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(227, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_228, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(228, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_229, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(229, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_230, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(230, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_231, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(231, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_232, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(232, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_233, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(233, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_234, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(234, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_235, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(235, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_236, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(236, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_237, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(237, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_238, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(238, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_239, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(239, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_240, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(240, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_241, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(241, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_242, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(242, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_243, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(243, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_244, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(244, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_245, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(245, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_246, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(246, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_247, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(247, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_248, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(248, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_249, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(249, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_250, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(250, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_251, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(251, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_252, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(252, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_253, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(253, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_254, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(254, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_255, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(255, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_256, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(256, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_257, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(257, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n# else\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_5, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(5, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_6, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(6, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_7, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(7, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_8, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(8, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_9, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(9, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_10, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(10, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_11, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(11, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_12, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(12, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_13, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(13, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_14, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(14, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_15, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(15, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_16, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(16, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_17, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(17, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_18, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(18, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_19, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(19, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_20, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(20, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_21, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(21, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_22, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(22, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_23, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(23, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_24, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(24, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_25, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(25, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_26, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(26, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_27, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(27, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_28, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(28, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_29, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(29, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_30, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(30, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_31, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(31, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_32, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(32, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_33, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(33, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_34, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(34, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_35, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(35, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_36, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(36, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_37, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(37, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_38, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(38, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_39, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(39, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_40, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(40, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_41, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(41, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_42, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(42, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_43, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(43, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_44, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(44, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_45, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(45, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_46, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(46, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_47, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(47, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_48, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(48, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_49, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(49, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_50, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(50, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_51, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(51, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_52, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(52, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_53, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(53, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_54, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(54, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_55, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(55, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_56, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(56, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_57, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(57, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_58, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(58, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_59, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(59, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_60, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(60, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_61, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(61, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_62, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(62, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_63, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(63, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_64, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(64, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_65, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(65, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_66, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(66, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_67, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(67, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_68, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(68, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_69, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(69, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_70, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(70, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_71, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(71, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_72, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(72, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_73, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(73, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_74, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(74, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_75, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(75, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_76, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(76, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_77, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(77, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_78, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(78, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_79, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(79, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_80, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(80, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_81, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(81, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_82, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(82, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_83, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(83, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_84, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(84, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_85, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(85, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_86, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(86, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_87, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(87, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_88, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(88, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_89, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(89, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_90, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(90, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_91, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(91, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_92, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(92, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_93, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(93, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_94, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(94, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_95, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(95, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_96, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(96, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_97, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(97, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_98, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(98, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_99, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(99, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_100, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(100, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_101, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(101, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_102, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(102, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_103, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(103, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_104, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(104, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_105, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(105, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_106, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(106, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_107, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(107, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_108, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(108, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_109, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(109, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_110, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(110, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_111, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(111, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_112, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(112, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_113, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(113, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_114, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(114, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_115, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(115, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_116, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(116, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_117, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(117, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_118, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(118, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_119, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(119, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_120, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(120, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_121, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(121, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_122, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(122, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_123, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(123, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_124, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(124, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_125, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(125, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_126, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(126, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_127, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(127, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_128, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(128, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_129, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(129, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_130, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(130, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_131, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(131, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_132, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(132, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_133, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(133, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_134, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(134, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_135, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(135, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_136, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(136, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_137, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(137, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_138, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(138, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_139, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(139, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_140, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(140, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_141, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(141, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_142, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(142, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_143, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(143, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_144, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(144, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_145, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(145, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_146, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(146, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_147, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(147, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_148, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(148, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_149, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(149, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_150, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(150, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_151, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(151, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_152, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(152, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_153, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(153, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_154, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(154, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_155, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(155, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_156, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(156, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_157, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(157, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_158, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(158, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_159, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(159, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_160, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(160, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_161, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(161, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_162, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(162, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_163, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(163, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_164, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(164, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_165, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(165, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_166, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(166, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_167, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(167, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_168, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(168, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_169, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(169, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_170, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(170, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_171, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(171, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_172, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(172, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_173, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(173, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_174, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(174, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_175, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(175, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_176, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(176, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_177, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(177, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_178, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(178, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_179, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(179, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_180, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(180, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_181, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(181, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_182, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(182, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_183, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(183, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_184, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(184, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_185, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(185, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_186, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(186, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_187, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(187, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_188, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(188, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_189, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(189, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_190, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(190, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_191, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(191, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_192, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(192, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_193, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(193, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_194, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(194, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_195, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(195, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_196, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(196, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_197, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(197, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_198, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(198, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_199, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(199, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_200, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(200, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_201, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(201, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_202, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(202, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_203, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(203, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_204, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(204, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_205, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(205, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_206, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(206, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_207, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(207, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_208, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(208, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_209, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(209, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_210, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(210, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_211, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(211, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_212, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(212, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_213, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(213, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_214, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(214, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_215, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(215, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_216, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(216, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_217, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(217, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_218, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(218, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_219, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(219, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_220, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(220, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_221, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(221, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_222, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(222, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_223, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(223, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_224, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(224, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_225, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(225, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_226, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(226, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_227, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(227, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_228, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(228, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_229, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(229, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_230, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(230, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_231, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(231, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_232, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(232, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_233, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(233, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_234, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(234, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_235, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(235, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_236, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(236, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_237, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(237, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_238, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(238, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_239, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(239, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_240, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(240, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_241, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(241, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_242, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(242, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_243, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(243, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_244, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(244, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_245, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(245, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_246, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(246, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_247, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(247, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_248, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(248, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_249, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(249, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_250, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(250, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_251, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(251, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_252, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(252, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_253, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(253, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_254, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(254, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_255, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(255, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_256, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(256, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_257, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(257, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/fold_right.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FOLD_RIGHT_HPP\n# define BOOST_PREPROCESSOR_SEQ_FOLD_RIGHT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/seq/fold_left.hpp>\n# include <boost/preprocessor/seq/reverse.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n#\n# /* BOOST_PP_SEQ_FOLD_RIGHT */\n#\n# if 0\n#    define BOOST_PP_SEQ_FOLD_RIGHT(op, state, seq) ...\n# endif\n#\n# define BOOST_PP_SEQ_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256))\n#\n# define BOOST_PP_SEQ_FOLD_RIGHT_257(op, st, ss) BOOST_PP_ERROR(0x0005)\n#\n# define BOOST_PP_SEQ_FOLD_RIGHT_1(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, BOOST_PP_SEQ_REVERSE_S(2, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_2(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, BOOST_PP_SEQ_REVERSE_S(3, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_3(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, BOOST_PP_SEQ_REVERSE_S(4, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_4(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, BOOST_PP_SEQ_REVERSE_S(5, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_5(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, BOOST_PP_SEQ_REVERSE_S(6, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_6(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, BOOST_PP_SEQ_REVERSE_S(7, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_7(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, BOOST_PP_SEQ_REVERSE_S(8, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_8(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, BOOST_PP_SEQ_REVERSE_S(9, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_9(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, BOOST_PP_SEQ_REVERSE_S(10, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_10(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, BOOST_PP_SEQ_REVERSE_S(11, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_11(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, BOOST_PP_SEQ_REVERSE_S(12, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_12(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, BOOST_PP_SEQ_REVERSE_S(13, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_13(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, BOOST_PP_SEQ_REVERSE_S(14, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_14(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, BOOST_PP_SEQ_REVERSE_S(15, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_15(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, BOOST_PP_SEQ_REVERSE_S(16, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_16(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, BOOST_PP_SEQ_REVERSE_S(17, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_17(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, BOOST_PP_SEQ_REVERSE_S(18, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_18(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, BOOST_PP_SEQ_REVERSE_S(19, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_19(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, BOOST_PP_SEQ_REVERSE_S(20, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_20(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, BOOST_PP_SEQ_REVERSE_S(21, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_21(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, BOOST_PP_SEQ_REVERSE_S(22, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_22(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, BOOST_PP_SEQ_REVERSE_S(23, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_23(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, BOOST_PP_SEQ_REVERSE_S(24, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_24(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, BOOST_PP_SEQ_REVERSE_S(25, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_25(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, BOOST_PP_SEQ_REVERSE_S(26, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_26(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, BOOST_PP_SEQ_REVERSE_S(27, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_27(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, BOOST_PP_SEQ_REVERSE_S(28, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_28(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, BOOST_PP_SEQ_REVERSE_S(29, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_29(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, BOOST_PP_SEQ_REVERSE_S(30, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_30(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, BOOST_PP_SEQ_REVERSE_S(31, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_31(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, BOOST_PP_SEQ_REVERSE_S(32, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_32(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, BOOST_PP_SEQ_REVERSE_S(33, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_33(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, BOOST_PP_SEQ_REVERSE_S(34, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_34(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, BOOST_PP_SEQ_REVERSE_S(35, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_35(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, BOOST_PP_SEQ_REVERSE_S(36, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_36(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, BOOST_PP_SEQ_REVERSE_S(37, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_37(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, BOOST_PP_SEQ_REVERSE_S(38, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_38(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, BOOST_PP_SEQ_REVERSE_S(39, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_39(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, BOOST_PP_SEQ_REVERSE_S(40, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_40(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, BOOST_PP_SEQ_REVERSE_S(41, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_41(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, BOOST_PP_SEQ_REVERSE_S(42, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_42(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, BOOST_PP_SEQ_REVERSE_S(43, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_43(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, BOOST_PP_SEQ_REVERSE_S(44, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_44(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, BOOST_PP_SEQ_REVERSE_S(45, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_45(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, BOOST_PP_SEQ_REVERSE_S(46, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_46(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, BOOST_PP_SEQ_REVERSE_S(47, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_47(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, BOOST_PP_SEQ_REVERSE_S(48, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_48(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, BOOST_PP_SEQ_REVERSE_S(49, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_49(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, BOOST_PP_SEQ_REVERSE_S(50, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_50(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, BOOST_PP_SEQ_REVERSE_S(51, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_51(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, BOOST_PP_SEQ_REVERSE_S(52, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_52(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, BOOST_PP_SEQ_REVERSE_S(53, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_53(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, BOOST_PP_SEQ_REVERSE_S(54, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_54(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, BOOST_PP_SEQ_REVERSE_S(55, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_55(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, BOOST_PP_SEQ_REVERSE_S(56, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_56(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, BOOST_PP_SEQ_REVERSE_S(57, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_57(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, BOOST_PP_SEQ_REVERSE_S(58, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_58(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, BOOST_PP_SEQ_REVERSE_S(59, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_59(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, BOOST_PP_SEQ_REVERSE_S(60, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_60(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, BOOST_PP_SEQ_REVERSE_S(61, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_61(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, BOOST_PP_SEQ_REVERSE_S(62, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_62(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, BOOST_PP_SEQ_REVERSE_S(63, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_63(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, BOOST_PP_SEQ_REVERSE_S(64, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_64(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, BOOST_PP_SEQ_REVERSE_S(65, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_65(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, BOOST_PP_SEQ_REVERSE_S(66, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_66(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, BOOST_PP_SEQ_REVERSE_S(67, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_67(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, BOOST_PP_SEQ_REVERSE_S(68, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_68(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, BOOST_PP_SEQ_REVERSE_S(69, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_69(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, BOOST_PP_SEQ_REVERSE_S(70, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_70(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, BOOST_PP_SEQ_REVERSE_S(71, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_71(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, BOOST_PP_SEQ_REVERSE_S(72, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_72(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, BOOST_PP_SEQ_REVERSE_S(73, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_73(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, BOOST_PP_SEQ_REVERSE_S(74, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_74(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, BOOST_PP_SEQ_REVERSE_S(75, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_75(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, BOOST_PP_SEQ_REVERSE_S(76, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_76(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, BOOST_PP_SEQ_REVERSE_S(77, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_77(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, BOOST_PP_SEQ_REVERSE_S(78, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_78(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, BOOST_PP_SEQ_REVERSE_S(79, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_79(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, BOOST_PP_SEQ_REVERSE_S(80, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_80(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, BOOST_PP_SEQ_REVERSE_S(81, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_81(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, BOOST_PP_SEQ_REVERSE_S(82, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_82(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, BOOST_PP_SEQ_REVERSE_S(83, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_83(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, BOOST_PP_SEQ_REVERSE_S(84, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_84(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, BOOST_PP_SEQ_REVERSE_S(85, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_85(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, BOOST_PP_SEQ_REVERSE_S(86, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_86(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, BOOST_PP_SEQ_REVERSE_S(87, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_87(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, BOOST_PP_SEQ_REVERSE_S(88, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_88(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, BOOST_PP_SEQ_REVERSE_S(89, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_89(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, BOOST_PP_SEQ_REVERSE_S(90, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_90(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, BOOST_PP_SEQ_REVERSE_S(91, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_91(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, BOOST_PP_SEQ_REVERSE_S(92, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_92(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, BOOST_PP_SEQ_REVERSE_S(93, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_93(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, BOOST_PP_SEQ_REVERSE_S(94, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_94(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, BOOST_PP_SEQ_REVERSE_S(95, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_95(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, BOOST_PP_SEQ_REVERSE_S(96, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_96(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, BOOST_PP_SEQ_REVERSE_S(97, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_97(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, BOOST_PP_SEQ_REVERSE_S(98, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_98(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, BOOST_PP_SEQ_REVERSE_S(99, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_99(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, BOOST_PP_SEQ_REVERSE_S(100, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_100(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, BOOST_PP_SEQ_REVERSE_S(101, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_101(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, BOOST_PP_SEQ_REVERSE_S(102, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_102(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, BOOST_PP_SEQ_REVERSE_S(103, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_103(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, BOOST_PP_SEQ_REVERSE_S(104, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_104(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, BOOST_PP_SEQ_REVERSE_S(105, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_105(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, BOOST_PP_SEQ_REVERSE_S(106, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_106(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, BOOST_PP_SEQ_REVERSE_S(107, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_107(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, BOOST_PP_SEQ_REVERSE_S(108, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_108(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, BOOST_PP_SEQ_REVERSE_S(109, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_109(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, BOOST_PP_SEQ_REVERSE_S(110, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_110(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, BOOST_PP_SEQ_REVERSE_S(111, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_111(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, BOOST_PP_SEQ_REVERSE_S(112, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_112(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, BOOST_PP_SEQ_REVERSE_S(113, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_113(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, BOOST_PP_SEQ_REVERSE_S(114, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_114(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, BOOST_PP_SEQ_REVERSE_S(115, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_115(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, BOOST_PP_SEQ_REVERSE_S(116, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_116(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, BOOST_PP_SEQ_REVERSE_S(117, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_117(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, BOOST_PP_SEQ_REVERSE_S(118, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_118(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, BOOST_PP_SEQ_REVERSE_S(119, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_119(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, BOOST_PP_SEQ_REVERSE_S(120, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_120(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, BOOST_PP_SEQ_REVERSE_S(121, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_121(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, BOOST_PP_SEQ_REVERSE_S(122, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_122(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, BOOST_PP_SEQ_REVERSE_S(123, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_123(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, BOOST_PP_SEQ_REVERSE_S(124, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_124(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, BOOST_PP_SEQ_REVERSE_S(125, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_125(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, BOOST_PP_SEQ_REVERSE_S(126, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_126(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, BOOST_PP_SEQ_REVERSE_S(127, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_127(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, BOOST_PP_SEQ_REVERSE_S(128, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_128(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, BOOST_PP_SEQ_REVERSE_S(129, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_129(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, BOOST_PP_SEQ_REVERSE_S(130, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_130(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, BOOST_PP_SEQ_REVERSE_S(131, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_131(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, BOOST_PP_SEQ_REVERSE_S(132, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_132(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, BOOST_PP_SEQ_REVERSE_S(133, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_133(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, BOOST_PP_SEQ_REVERSE_S(134, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_134(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, BOOST_PP_SEQ_REVERSE_S(135, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_135(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, BOOST_PP_SEQ_REVERSE_S(136, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_136(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, BOOST_PP_SEQ_REVERSE_S(137, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_137(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, BOOST_PP_SEQ_REVERSE_S(138, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_138(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, BOOST_PP_SEQ_REVERSE_S(139, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_139(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, BOOST_PP_SEQ_REVERSE_S(140, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_140(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, BOOST_PP_SEQ_REVERSE_S(141, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_141(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, BOOST_PP_SEQ_REVERSE_S(142, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_142(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, BOOST_PP_SEQ_REVERSE_S(143, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_143(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, BOOST_PP_SEQ_REVERSE_S(144, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_144(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, BOOST_PP_SEQ_REVERSE_S(145, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_145(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, BOOST_PP_SEQ_REVERSE_S(146, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_146(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, BOOST_PP_SEQ_REVERSE_S(147, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_147(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, BOOST_PP_SEQ_REVERSE_S(148, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_148(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, BOOST_PP_SEQ_REVERSE_S(149, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_149(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, BOOST_PP_SEQ_REVERSE_S(150, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_150(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, BOOST_PP_SEQ_REVERSE_S(151, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_151(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, BOOST_PP_SEQ_REVERSE_S(152, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_152(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, BOOST_PP_SEQ_REVERSE_S(153, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_153(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, BOOST_PP_SEQ_REVERSE_S(154, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_154(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, BOOST_PP_SEQ_REVERSE_S(155, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_155(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, BOOST_PP_SEQ_REVERSE_S(156, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_156(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, BOOST_PP_SEQ_REVERSE_S(157, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_157(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, BOOST_PP_SEQ_REVERSE_S(158, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_158(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, BOOST_PP_SEQ_REVERSE_S(159, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_159(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, BOOST_PP_SEQ_REVERSE_S(160, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_160(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, BOOST_PP_SEQ_REVERSE_S(161, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_161(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, BOOST_PP_SEQ_REVERSE_S(162, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_162(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, BOOST_PP_SEQ_REVERSE_S(163, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_163(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, BOOST_PP_SEQ_REVERSE_S(164, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_164(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, BOOST_PP_SEQ_REVERSE_S(165, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_165(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, BOOST_PP_SEQ_REVERSE_S(166, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_166(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, BOOST_PP_SEQ_REVERSE_S(167, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_167(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, BOOST_PP_SEQ_REVERSE_S(168, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_168(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, BOOST_PP_SEQ_REVERSE_S(169, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_169(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, BOOST_PP_SEQ_REVERSE_S(170, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_170(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, BOOST_PP_SEQ_REVERSE_S(171, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_171(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, BOOST_PP_SEQ_REVERSE_S(172, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_172(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, BOOST_PP_SEQ_REVERSE_S(173, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_173(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, BOOST_PP_SEQ_REVERSE_S(174, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_174(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, BOOST_PP_SEQ_REVERSE_S(175, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_175(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, BOOST_PP_SEQ_REVERSE_S(176, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_176(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, BOOST_PP_SEQ_REVERSE_S(177, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_177(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, BOOST_PP_SEQ_REVERSE_S(178, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_178(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, BOOST_PP_SEQ_REVERSE_S(179, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_179(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, BOOST_PP_SEQ_REVERSE_S(180, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_180(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, BOOST_PP_SEQ_REVERSE_S(181, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_181(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, BOOST_PP_SEQ_REVERSE_S(182, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_182(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, BOOST_PP_SEQ_REVERSE_S(183, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_183(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, BOOST_PP_SEQ_REVERSE_S(184, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_184(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, BOOST_PP_SEQ_REVERSE_S(185, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_185(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, BOOST_PP_SEQ_REVERSE_S(186, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_186(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, BOOST_PP_SEQ_REVERSE_S(187, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_187(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, BOOST_PP_SEQ_REVERSE_S(188, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_188(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, BOOST_PP_SEQ_REVERSE_S(189, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_189(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, BOOST_PP_SEQ_REVERSE_S(190, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_190(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, BOOST_PP_SEQ_REVERSE_S(191, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_191(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, BOOST_PP_SEQ_REVERSE_S(192, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_192(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, BOOST_PP_SEQ_REVERSE_S(193, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_193(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, BOOST_PP_SEQ_REVERSE_S(194, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_194(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, BOOST_PP_SEQ_REVERSE_S(195, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_195(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, BOOST_PP_SEQ_REVERSE_S(196, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_196(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, BOOST_PP_SEQ_REVERSE_S(197, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_197(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, BOOST_PP_SEQ_REVERSE_S(198, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_198(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, BOOST_PP_SEQ_REVERSE_S(199, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_199(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, BOOST_PP_SEQ_REVERSE_S(200, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_200(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, BOOST_PP_SEQ_REVERSE_S(201, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_201(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, BOOST_PP_SEQ_REVERSE_S(202, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_202(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, BOOST_PP_SEQ_REVERSE_S(203, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_203(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, BOOST_PP_SEQ_REVERSE_S(204, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_204(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, BOOST_PP_SEQ_REVERSE_S(205, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_205(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, BOOST_PP_SEQ_REVERSE_S(206, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_206(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, BOOST_PP_SEQ_REVERSE_S(207, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_207(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, BOOST_PP_SEQ_REVERSE_S(208, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_208(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, BOOST_PP_SEQ_REVERSE_S(209, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_209(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, BOOST_PP_SEQ_REVERSE_S(210, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_210(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, BOOST_PP_SEQ_REVERSE_S(211, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_211(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, BOOST_PP_SEQ_REVERSE_S(212, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_212(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, BOOST_PP_SEQ_REVERSE_S(213, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_213(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, BOOST_PP_SEQ_REVERSE_S(214, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_214(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, BOOST_PP_SEQ_REVERSE_S(215, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_215(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, BOOST_PP_SEQ_REVERSE_S(216, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_216(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, BOOST_PP_SEQ_REVERSE_S(217, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_217(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, BOOST_PP_SEQ_REVERSE_S(218, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_218(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, BOOST_PP_SEQ_REVERSE_S(219, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_219(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, BOOST_PP_SEQ_REVERSE_S(220, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_220(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, BOOST_PP_SEQ_REVERSE_S(221, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_221(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, BOOST_PP_SEQ_REVERSE_S(222, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_222(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, BOOST_PP_SEQ_REVERSE_S(223, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_223(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, BOOST_PP_SEQ_REVERSE_S(224, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_224(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, BOOST_PP_SEQ_REVERSE_S(225, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_225(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, BOOST_PP_SEQ_REVERSE_S(226, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_226(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, BOOST_PP_SEQ_REVERSE_S(227, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_227(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, BOOST_PP_SEQ_REVERSE_S(228, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_228(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, BOOST_PP_SEQ_REVERSE_S(229, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_229(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, BOOST_PP_SEQ_REVERSE_S(230, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_230(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, BOOST_PP_SEQ_REVERSE_S(231, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_231(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, BOOST_PP_SEQ_REVERSE_S(232, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_232(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, BOOST_PP_SEQ_REVERSE_S(233, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_233(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, BOOST_PP_SEQ_REVERSE_S(234, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_234(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, BOOST_PP_SEQ_REVERSE_S(235, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_235(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, BOOST_PP_SEQ_REVERSE_S(236, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_236(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, BOOST_PP_SEQ_REVERSE_S(237, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_237(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, BOOST_PP_SEQ_REVERSE_S(238, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_238(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, BOOST_PP_SEQ_REVERSE_S(239, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_239(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, BOOST_PP_SEQ_REVERSE_S(240, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_240(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, BOOST_PP_SEQ_REVERSE_S(241, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_241(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, BOOST_PP_SEQ_REVERSE_S(242, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_242(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, BOOST_PP_SEQ_REVERSE_S(243, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_243(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, BOOST_PP_SEQ_REVERSE_S(244, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_244(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, BOOST_PP_SEQ_REVERSE_S(245, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_245(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, BOOST_PP_SEQ_REVERSE_S(246, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_246(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, BOOST_PP_SEQ_REVERSE_S(247, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_247(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, BOOST_PP_SEQ_REVERSE_S(248, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_248(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, BOOST_PP_SEQ_REVERSE_S(249, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_249(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, BOOST_PP_SEQ_REVERSE_S(250, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_250(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, BOOST_PP_SEQ_REVERSE_S(251, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_251(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, BOOST_PP_SEQ_REVERSE_S(252, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_252(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, BOOST_PP_SEQ_REVERSE_S(253, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_253(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, BOOST_PP_SEQ_REVERSE_S(254, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_254(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, BOOST_PP_SEQ_REVERSE_S(255, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_255(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, BOOST_PP_SEQ_REVERSE_S(256, ss), BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_RIGHT_256(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, BOOST_PP_SEQ_REVERSE_S(257, ss), BOOST_PP_SEQ_SIZE(ss))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/for_each.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP\n# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n# include <boost/preprocessor/seq/detail/is_empty.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_SEQ_FOR_EACH */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK(macro, data, seq)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq)\n#    define BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK(macro, data, seq)\n# endif\n#\n#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC(macro, data, seq) BOOST_PP_FOR((macro, data, seq, BOOST_PP_SEQ_SIZE(seq)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)\n#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY(macro, data, seq)\n#\n#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK(macro, data, seq) \\\n\t\tBOOST_PP_IIF \\\n\t\t\t( \\\n\t\t\tBOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \\\n\t\t\tBOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC, \\\n\t\t\tBOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY \\\n\t\t\t) \\\n\t\t(macro, data, seq) \\\n/**/\n#\n# define BOOST_PP_SEQ_FOR_EACH_P(r, x) BOOST_PP_TUPLE_ELEM(4, 3, x)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I x\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I(BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_O_I(macro, data, seq, sz) \\\n\tBOOST_PP_SEQ_FOR_EACH_O_I_DEC(macro, data, seq, BOOST_PP_DEC(sz)) \\\n/**/\n# define BOOST_PP_SEQ_FOR_EACH_O_I_DEC(macro, data, seq, sz) \\\n\t( \\\n\tmacro, \\\n\tdata, \\\n\tBOOST_PP_IF \\\n\t\t( \\\n\t\tsz, \\\n\t\tBOOST_PP_SEQ_FOR_EACH_O_I_TAIL, \\\n\t\tBOOST_PP_SEQ_FOR_EACH_O_I_NIL \\\n\t\t) \\\n\t(seq), \\\n\tsz \\\n\t) \\\n/**/\n# define BOOST_PP_SEQ_FOR_EACH_O_I_TAIL(seq) BOOST_PP_SEQ_TAIL(seq)\n# define BOOST_PP_SEQ_FOR_EACH_O_I_NIL(seq) BOOST_PP_NIL\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_IM(r, BOOST_PP_TUPLE_REM_4 x)\n#    define BOOST_PP_SEQ_FOR_EACH_M_IM(r, im) BOOST_PP_SEQ_FOR_EACH_M_I(r, im)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_I(r, BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_M_I(r, macro, data, seq, sz) macro(r, data, BOOST_PP_SEQ_HEAD(seq))\n#\n# /* BOOST_PP_SEQ_FOR_EACH_R */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_R(r, macro, data, seq)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq)\n#    define BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_R(r, macro, data, seq)\n# endif\n#\n#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC_R(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq, BOOST_PP_SEQ_SIZE(seq)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)\n#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY_R(r, macro, data, seq)\n#\n#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_R(r, macro, data, seq) \\\n\t\tBOOST_PP_IIF \\\n\t\t\t( \\\n\t\t\tBOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \\\n\t\t\tBOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC_R, \\\n\t\t\tBOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY_R \\\n\t\t\t) \\\n\t\t(r, macro, data, seq) \\\n/**/\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/for_each_i.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_I_HPP\n# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_I_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n# include <boost/preprocessor/seq/detail/is_empty.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_SEQ_FOR_EACH_I */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH_I(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK(macro, data, seq)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_I(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_I(macro, data, seq)\n#    define BOOST_PP_SEQ_FOR_EACH_I_I(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK(macro, data, seq)\n# endif\n#\n#    define BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EXEC(macro, data, seq) BOOST_PP_FOR((macro, data, seq, 0, BOOST_PP_SEQ_SIZE(seq)), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)\n#    define BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EMPTY(macro, data, seq)\n#\n#    define BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK(macro, data, seq) \\\n\t\tBOOST_PP_IIF \\\n\t\t\t( \\\n\t\t\tBOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \\\n\t\t\tBOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EXEC, \\\n\t\t\tBOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EMPTY \\\n\t\t\t) \\\n\t\t(macro, data, seq) \\\n/**/\n#\n# define BOOST_PP_SEQ_FOR_EACH_I_P(r, x) BOOST_PP_TUPLE_ELEM(5, 4, x)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FOR_EACH_I_O(r, x) BOOST_PP_SEQ_FOR_EACH_I_O_I x\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_I_O(r, x) BOOST_PP_SEQ_FOR_EACH_I_O_I(BOOST_PP_TUPLE_ELEM(5, 0, x), BOOST_PP_TUPLE_ELEM(5, 1, x), BOOST_PP_TUPLE_ELEM(5, 2, x), BOOST_PP_TUPLE_ELEM(5, 3, x), BOOST_PP_TUPLE_ELEM(5, 4, x))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_I_O_I(macro, data, seq, i, sz) \\\n\tBOOST_PP_SEQ_FOR_EACH_I_O_I_DEC(macro, data, seq, i, BOOST_PP_DEC(sz)) \\\n/**/\n# define BOOST_PP_SEQ_FOR_EACH_I_O_I_DEC(macro, data, seq, i, sz) \\\n\t( \\\n\tmacro, \\\n\tdata, \\\n\tBOOST_PP_IF \\\n\t\t( \\\n\t\tsz, \\\n\t\tBOOST_PP_SEQ_FOR_EACH_I_O_I_TAIL, \\\n\t\tBOOST_PP_SEQ_FOR_EACH_I_O_I_NIL \\\n\t\t) \\\n\t(seq), \\\n\tBOOST_PP_INC(i), \\\n\tsz \\\n\t) \\\n/**/\n# define BOOST_PP_SEQ_FOR_EACH_I_O_I_TAIL(seq) BOOST_PP_SEQ_TAIL(seq)\n# define BOOST_PP_SEQ_FOR_EACH_I_O_I_NIL(seq) BOOST_PP_NIL\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FOR_EACH_I_M(r, x) BOOST_PP_SEQ_FOR_EACH_I_M_IM(r, BOOST_PP_TUPLE_REM_5 x)\n#    define BOOST_PP_SEQ_FOR_EACH_I_M_IM(r, im) BOOST_PP_SEQ_FOR_EACH_I_M_I(r, im)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_I_M(r, x) BOOST_PP_SEQ_FOR_EACH_I_M_I(r, BOOST_PP_TUPLE_ELEM(5, 0, x), BOOST_PP_TUPLE_ELEM(5, 1, x), BOOST_PP_TUPLE_ELEM(5, 2, x), BOOST_PP_TUPLE_ELEM(5, 3, x), BOOST_PP_TUPLE_ELEM(5, 4, x))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_I_M_I(r, macro, data, seq, i, sz) macro(r, data, i, BOOST_PP_SEQ_HEAD(seq))\n#\n# /* BOOST_PP_SEQ_FOR_EACH_I_R */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH_I_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK(r, macro, data, seq)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_I_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_R_I(r, macro, data, seq)\n#    define BOOST_PP_SEQ_FOR_EACH_I_R_I(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK(r, macro, data, seq)\n# endif\n#\n#    define BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EXEC(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq, 0, BOOST_PP_SEQ_SIZE(seq)), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)\n#    define BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EMPTY(r, macro, data, seq)\n#\n#    define BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK(r, macro, data, seq) \\\n\t\tBOOST_PP_IIF \\\n\t\t\t( \\\n\t\t\tBOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \\\n\t\t\tBOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EXEC, \\\n\t\t\tBOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EMPTY \\\n\t\t\t) \\\n\t\t(r, macro, data, seq) \\\n/**/\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/for_each_product.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_PRODUCT_HPP\n# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_PRODUCT_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_SEQ_FOR_EACH_PRODUCT */\n#\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT(macro, sets) BOOST_PP_SEQ_FOR_EACH_PRODUCT_E(BOOST_PP_FOR, macro, sets)\n#\n# /* BOOST_PP_SEQ_FOR_EACH_PRODUCT_R */\n#\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_R(r, macro, sets) BOOST_PP_SEQ_FOR_EACH_PRODUCT_E(BOOST_PP_FOR_ ## r, macro, sets)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_E(impl, macro, sets) impl((BOOST_PP_SEQ_HEAD(sets)(nil), BOOST_PP_SEQ_TAIL(sets)(nil), (nil), macro), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_0)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_E(impl, macro, sets) BOOST_PP_SEQ_FOR_EACH_PRODUCT_E_I(impl, macro, sets)\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_E_I(impl, macro, sets) impl((BOOST_PP_SEQ_HEAD(sets)(nil), BOOST_PP_SEQ_TAIL(sets)(nil), (nil), macro), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_0)\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_P(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_P_I data\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_P_I(cset, rset, res, macro) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(cset))\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_P(r, data) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(4, 0, data)))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_O(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_O_I data\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_O_I(cset, rset, res, macro) (BOOST_PP_SEQ_TAIL(cset), rset, res, macro)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_O(r, data) (BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(4, 0, data)), BOOST_PP_TUPLE_ELEM(4, 1, data), BOOST_PP_TUPLE_ELEM(4, 2, data), BOOST_PP_TUPLE_ELEM(4, 3, data))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, i) BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(4, 1, data))), BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_ ## i, BOOST_PP_SEQ_FOR_EACH_PRODUCT_I)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_I(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_I(r, BOOST_PP_TUPLE_ELEM(4, 0, data), BOOST_PP_TUPLE_ELEM(4, 1, data), BOOST_PP_TUPLE_ELEM(4, 2, data), BOOST_PP_TUPLE_ELEM(4, 3, data))\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_I(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_IM(r, BOOST_PP_TUPLE_REM_4 data)\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_IM(r, im) BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_I(r, im)\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_I(r, cset, rset, res, macro) macro(r, BOOST_PP_SEQ_TAIL(res (BOOST_PP_SEQ_HEAD(cset))))\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_H_I data\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_H_I(BOOST_PP_TUPLE_ELEM(4, 0, data), BOOST_PP_TUPLE_ELEM(4, 1, data), BOOST_PP_TUPLE_ELEM(4, 2, data), BOOST_PP_TUPLE_ELEM(4, 3, data))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_H_I(cset, rset, res, macro) (BOOST_PP_SEQ_HEAD(rset)(nil), BOOST_PP_SEQ_TAIL(rset), res (BOOST_PP_SEQ_HEAD(cset)), macro)\n#\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_0(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 0)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_1(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 1)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_2(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 2)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_3(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 3)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_4(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 4)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_5(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 5)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_6(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 6)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_7(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 7)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_8(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 8)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_9(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 9)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_10(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 10)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_11(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 11)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_12(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 12)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_13(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 13)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_14(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 14)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_15(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 15)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_16(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 16)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_17(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 17)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_18(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 18)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_19(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 19)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_20(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 20)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_21(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 21)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_22(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 22)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_23(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 23)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_24(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 24)(r, data)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_25(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 25)(r, data)\n#\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_0(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_1)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_1(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_2)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_2(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_3)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_3(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_4)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_4(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_5)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_5(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_6)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_6(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_7)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_7(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_8)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_8(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_9)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_9(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_10)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_10(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_11)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_11(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_12)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_12(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_13)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_13(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_14)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_14(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_15)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_15(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_16)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_16(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_17)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_17(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_18)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_18(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_19)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_19(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_20)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_20(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_21)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_21(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_22)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_22(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_23)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_23(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_24)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_24(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_25)\n# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_25(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_26)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/insert.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_INSERT_HPP\n# define BOOST_PREPROCESSOR_SEQ_INSERT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/first_n.hpp>\n# include <boost/preprocessor/seq/rest_n.hpp>\n#\n# /* BOOST_PP_SEQ_INSERT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_INSERT(seq, i, elem) BOOST_PP_SEQ_FIRST_N(i, seq) (elem) BOOST_PP_SEQ_REST_N(i, seq)\n# else\n#    define BOOST_PP_SEQ_INSERT(seq, i, elem) BOOST_PP_SEQ_INSERT_I(seq, i, elem)\n#    define BOOST_PP_SEQ_INSERT_I(seq, i, elem) BOOST_PP_SEQ_FIRST_N(i, seq) (elem) BOOST_PP_SEQ_REST_N(i, seq)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/pop_back.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_POP_BACK_HPP\n# define BOOST_PREPROCESSOR_SEQ_POP_BACK_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/first_n.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n#\n# /* BOOST_PP_SEQ_POP_BACK */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_POP_BACK(seq) BOOST_PP_SEQ_FIRST_N(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), seq)\n# else\n#    define BOOST_PP_SEQ_POP_BACK(seq) BOOST_PP_SEQ_POP_BACK_I(seq)\n#    define BOOST_PP_SEQ_POP_BACK_I(seq) BOOST_PP_SEQ_FIRST_N(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), seq)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/pop_front.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_POP_FRONT_HPP\n# define BOOST_PREPROCESSOR_SEQ_POP_FRONT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n#\n# /* BOOST_PP_SEQ_POP_FRONT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_POP_FRONT(seq) BOOST_PP_SEQ_TAIL(seq)\n# else\n#    define BOOST_PP_SEQ_POP_FRONT(seq) BOOST_PP_SEQ_POP_FRONT_I(seq)\n#    define BOOST_PP_SEQ_POP_FRONT_I(seq) BOOST_PP_SEQ_TAIL(seq)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/push_back.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_PUSH_BACK_HPP\n# define BOOST_PREPROCESSOR_SEQ_PUSH_BACK_HPP\n#\n# /* BOOST_PP_SEQ_PUSH_BACK */\n#\n# define BOOST_PP_SEQ_PUSH_BACK(seq, elem) seq(elem)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/push_front.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_PUSH_FRONT_HPP\n# define BOOST_PREPROCESSOR_SEQ_PUSH_FRONT_HPP\n#\n# /* BOOST_PP_SEQ_PUSH_FRONT */\n#\n# define BOOST_PP_SEQ_PUSH_FRONT(seq, elem) (elem)seq\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/remove.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_REMOVE_HPP\n# define BOOST_PREPROCESSOR_SEQ_REMOVE_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/first_n.hpp>\n# include <boost/preprocessor/seq/rest_n.hpp>\n#\n# /* BOOST_PP_SEQ_REMOVE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_REMOVE(seq, i) BOOST_PP_SEQ_FIRST_N(i, seq) BOOST_PP_SEQ_REST_N(BOOST_PP_INC(i), seq)\n# else\n#    define BOOST_PP_SEQ_REMOVE(seq, i) BOOST_PP_SEQ_REMOVE_I(seq, i)\n#    define BOOST_PP_SEQ_REMOVE_I(seq, i) BOOST_PP_SEQ_FIRST_N(i, seq) BOOST_PP_SEQ_REST_N(BOOST_PP_INC(i), seq)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/replace.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_REPLACE_HPP\n# define BOOST_PREPROCESSOR_SEQ_REPLACE_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/comparison/equal.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/seq/first_n.hpp>\n# include <boost/preprocessor/seq/rest_n.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n#\n# /* BOOST_PP_SEQ_REPLACE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_REPLACE(seq, i, elem) BOOST_PP_SEQ_FIRST_N(i, seq) (elem) BOOST_PP_SEQ_REPLACE_DETAIL_REST(seq, i)\n# else\n#    define BOOST_PP_SEQ_REPLACE(seq, i, elem) BOOST_PP_SEQ_REPLACE_I(seq, i, elem)\n#    define BOOST_PP_SEQ_REPLACE_I(seq, i, elem) BOOST_PP_SEQ_FIRST_N(i, seq) (elem) BOOST_PP_SEQ_REPLACE_DETAIL_REST(seq, i)\n# endif\n#\n#    define BOOST_PP_SEQ_REPLACE_DETAIL_REST_EMPTY(seq, i)\n#    define BOOST_PP_SEQ_REPLACE_DETAIL_REST_VALID(seq, i) BOOST_PP_SEQ_REST_N(BOOST_PP_INC(i), seq)\n#    define BOOST_PP_SEQ_REPLACE_DETAIL_REST(seq, i) \\\n\t\tBOOST_PP_IIF \\\n\t\t\t( \\\n\t\t\tBOOST_PP_EQUAL(i,BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq))), \\\n\t\t\tBOOST_PP_SEQ_REPLACE_DETAIL_REST_EMPTY, \\\n\t\t\tBOOST_PP_SEQ_REPLACE_DETAIL_REST_VALID \\\n\t\t\t) \\\n\t\t(seq, i) \\\n/**/\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/rest_n.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_REST_N_HPP\n# define BOOST_PREPROCESSOR_SEQ_REST_N_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/comparison/not_equal.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/facilities/identity.hpp>\n# include <boost/preprocessor/logical/bitand.hpp>\n# include <boost/preprocessor/seq/detail/is_empty.hpp>\n# include <boost/preprocessor/seq/detail/split.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_SEQ_REST_N */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_REST_N(n, seq) BOOST_PP_SEQ_REST_N_DETAIL_EXEC(n, seq, BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq))\n# else\n#    define BOOST_PP_SEQ_REST_N(n, seq) BOOST_PP_SEQ_REST_N_I(n, seq)\n#    define BOOST_PP_SEQ_REST_N_I(n, seq) BOOST_PP_SEQ_REST_N_DETAIL_EXEC(n, seq, BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq))\n# endif\n#\n#    define BOOST_PP_SEQ_REST_N_DETAIL_EXEC(n, seq, size) \\\n\t\tBOOST_PP_EXPR_IIF \\\n\t\t\t( \\\n\t\t\tBOOST_PP_BITAND \\\n\t\t\t\t( \\\n\t\t\t\tBOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size), \\\n\t\t\t\tBOOST_PP_NOT_EQUAL(n,size) \\\n\t\t\t\t), \\\n\t\t\tBOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), BOOST_PP_IDENTITY( (nil) seq )))() \\\n\t\t\t) \\\n/**/\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/reverse.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_REVERSE_HPP\n# define BOOST_PREPROCESSOR_SEQ_REVERSE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n# include <boost/preprocessor/seq/fold_left.hpp>\n#\n# /* BOOST_PP_SEQ_REVERSE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_REVERSE(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_REVERSE_O, BOOST_PP_EMPTY, seq)()\n# else\n#    define BOOST_PP_SEQ_REVERSE(seq) BOOST_PP_SEQ_REVERSE_I(seq)\n#    define BOOST_PP_SEQ_REVERSE_I(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_REVERSE_O, BOOST_PP_EMPTY, seq)()\n# endif\n#\n# define BOOST_PP_SEQ_REVERSE_O(s, state, elem) (elem) state\n#\n# /* BOOST_PP_SEQ_REVERSE_S */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_REVERSE_S(s, seq) BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_REVERSE_O, BOOST_PP_EMPTY, seq)()\n# else\n#    define BOOST_PP_SEQ_REVERSE_S(s, seq) BOOST_PP_SEQ_REVERSE_S_I(s, seq)\n#    define BOOST_PP_SEQ_REVERSE_S_I(s, seq) BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_REVERSE_O, BOOST_PP_EMPTY, seq)()\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/seq.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_SEQ_HPP\n# define BOOST_PREPROCESSOR_SEQ_SEQ_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/elem.hpp>\n#\n# /* BOOST_PP_SEQ_HEAD */\n#\n# define BOOST_PP_SEQ_HEAD(seq) BOOST_PP_SEQ_ELEM(0, seq)\n#\n# /* BOOST_PP_SEQ_TAIL */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_1((seq))\n#    define BOOST_PP_SEQ_TAIL_1(par) BOOST_PP_SEQ_TAIL_2 ## par\n#    define BOOST_PP_SEQ_TAIL_2(seq) BOOST_PP_SEQ_TAIL_I ## seq\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_ID(BOOST_PP_SEQ_TAIL_I seq)\n#    define BOOST_PP_SEQ_TAIL_ID(id) id\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_D(seq)\n#    define BOOST_PP_SEQ_TAIL_D(seq) BOOST_PP_SEQ_TAIL_I seq\n# else\n#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_I seq\n# endif\n#\n# define BOOST_PP_SEQ_TAIL_I(x)\n#\n# /* BOOST_PP_SEQ_NIL */\n#\n# define BOOST_PP_SEQ_NIL(x) (x)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/size.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_SIZE_HPP\n# define BOOST_PREPROCESSOR_SEQ_SIZE_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I((seq))\n#    define BOOST_PP_SEQ_SIZE_I(par) BOOST_PP_SEQ_SIZE_II ## par\n#    define BOOST_PP_SEQ_SIZE_II(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 ## seq)\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() || BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I(seq)\n#    define BOOST_PP_SEQ_SIZE_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)\n# elif defined(__IBMC__) || defined(__IBMCPP__)\n#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_0, seq))\n# else\n#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)\n# endif\n#\n# define BOOST_PP_SEQ_SIZE_0(_) BOOST_PP_SEQ_SIZE_1\n# define BOOST_PP_SEQ_SIZE_1(_) BOOST_PP_SEQ_SIZE_2\n# define BOOST_PP_SEQ_SIZE_2(_) BOOST_PP_SEQ_SIZE_3\n# define BOOST_PP_SEQ_SIZE_3(_) BOOST_PP_SEQ_SIZE_4\n# define BOOST_PP_SEQ_SIZE_4(_) BOOST_PP_SEQ_SIZE_5\n# define BOOST_PP_SEQ_SIZE_5(_) BOOST_PP_SEQ_SIZE_6\n# define BOOST_PP_SEQ_SIZE_6(_) BOOST_PP_SEQ_SIZE_7\n# define BOOST_PP_SEQ_SIZE_7(_) BOOST_PP_SEQ_SIZE_8\n# define BOOST_PP_SEQ_SIZE_8(_) BOOST_PP_SEQ_SIZE_9\n# define BOOST_PP_SEQ_SIZE_9(_) BOOST_PP_SEQ_SIZE_10\n# define BOOST_PP_SEQ_SIZE_10(_) BOOST_PP_SEQ_SIZE_11\n# define BOOST_PP_SEQ_SIZE_11(_) BOOST_PP_SEQ_SIZE_12\n# define BOOST_PP_SEQ_SIZE_12(_) BOOST_PP_SEQ_SIZE_13\n# define BOOST_PP_SEQ_SIZE_13(_) BOOST_PP_SEQ_SIZE_14\n# define BOOST_PP_SEQ_SIZE_14(_) BOOST_PP_SEQ_SIZE_15\n# define BOOST_PP_SEQ_SIZE_15(_) BOOST_PP_SEQ_SIZE_16\n# define BOOST_PP_SEQ_SIZE_16(_) BOOST_PP_SEQ_SIZE_17\n# define BOOST_PP_SEQ_SIZE_17(_) BOOST_PP_SEQ_SIZE_18\n# define BOOST_PP_SEQ_SIZE_18(_) BOOST_PP_SEQ_SIZE_19\n# define BOOST_PP_SEQ_SIZE_19(_) BOOST_PP_SEQ_SIZE_20\n# define BOOST_PP_SEQ_SIZE_20(_) BOOST_PP_SEQ_SIZE_21\n# define BOOST_PP_SEQ_SIZE_21(_) BOOST_PP_SEQ_SIZE_22\n# define BOOST_PP_SEQ_SIZE_22(_) BOOST_PP_SEQ_SIZE_23\n# define BOOST_PP_SEQ_SIZE_23(_) BOOST_PP_SEQ_SIZE_24\n# define BOOST_PP_SEQ_SIZE_24(_) BOOST_PP_SEQ_SIZE_25\n# define BOOST_PP_SEQ_SIZE_25(_) BOOST_PP_SEQ_SIZE_26\n# define BOOST_PP_SEQ_SIZE_26(_) BOOST_PP_SEQ_SIZE_27\n# define BOOST_PP_SEQ_SIZE_27(_) BOOST_PP_SEQ_SIZE_28\n# define BOOST_PP_SEQ_SIZE_28(_) BOOST_PP_SEQ_SIZE_29\n# define BOOST_PP_SEQ_SIZE_29(_) BOOST_PP_SEQ_SIZE_30\n# define BOOST_PP_SEQ_SIZE_30(_) BOOST_PP_SEQ_SIZE_31\n# define BOOST_PP_SEQ_SIZE_31(_) BOOST_PP_SEQ_SIZE_32\n# define BOOST_PP_SEQ_SIZE_32(_) BOOST_PP_SEQ_SIZE_33\n# define BOOST_PP_SEQ_SIZE_33(_) BOOST_PP_SEQ_SIZE_34\n# define BOOST_PP_SEQ_SIZE_34(_) BOOST_PP_SEQ_SIZE_35\n# define BOOST_PP_SEQ_SIZE_35(_) BOOST_PP_SEQ_SIZE_36\n# define BOOST_PP_SEQ_SIZE_36(_) BOOST_PP_SEQ_SIZE_37\n# define BOOST_PP_SEQ_SIZE_37(_) BOOST_PP_SEQ_SIZE_38\n# define BOOST_PP_SEQ_SIZE_38(_) BOOST_PP_SEQ_SIZE_39\n# define BOOST_PP_SEQ_SIZE_39(_) BOOST_PP_SEQ_SIZE_40\n# define BOOST_PP_SEQ_SIZE_40(_) BOOST_PP_SEQ_SIZE_41\n# define BOOST_PP_SEQ_SIZE_41(_) BOOST_PP_SEQ_SIZE_42\n# define BOOST_PP_SEQ_SIZE_42(_) BOOST_PP_SEQ_SIZE_43\n# define BOOST_PP_SEQ_SIZE_43(_) BOOST_PP_SEQ_SIZE_44\n# define BOOST_PP_SEQ_SIZE_44(_) BOOST_PP_SEQ_SIZE_45\n# define BOOST_PP_SEQ_SIZE_45(_) BOOST_PP_SEQ_SIZE_46\n# define BOOST_PP_SEQ_SIZE_46(_) BOOST_PP_SEQ_SIZE_47\n# define BOOST_PP_SEQ_SIZE_47(_) BOOST_PP_SEQ_SIZE_48\n# define BOOST_PP_SEQ_SIZE_48(_) BOOST_PP_SEQ_SIZE_49\n# define BOOST_PP_SEQ_SIZE_49(_) BOOST_PP_SEQ_SIZE_50\n# define BOOST_PP_SEQ_SIZE_50(_) BOOST_PP_SEQ_SIZE_51\n# define BOOST_PP_SEQ_SIZE_51(_) BOOST_PP_SEQ_SIZE_52\n# define BOOST_PP_SEQ_SIZE_52(_) BOOST_PP_SEQ_SIZE_53\n# define BOOST_PP_SEQ_SIZE_53(_) BOOST_PP_SEQ_SIZE_54\n# define BOOST_PP_SEQ_SIZE_54(_) BOOST_PP_SEQ_SIZE_55\n# define BOOST_PP_SEQ_SIZE_55(_) BOOST_PP_SEQ_SIZE_56\n# define BOOST_PP_SEQ_SIZE_56(_) BOOST_PP_SEQ_SIZE_57\n# define BOOST_PP_SEQ_SIZE_57(_) BOOST_PP_SEQ_SIZE_58\n# define BOOST_PP_SEQ_SIZE_58(_) BOOST_PP_SEQ_SIZE_59\n# define BOOST_PP_SEQ_SIZE_59(_) BOOST_PP_SEQ_SIZE_60\n# define BOOST_PP_SEQ_SIZE_60(_) BOOST_PP_SEQ_SIZE_61\n# define BOOST_PP_SEQ_SIZE_61(_) BOOST_PP_SEQ_SIZE_62\n# define BOOST_PP_SEQ_SIZE_62(_) BOOST_PP_SEQ_SIZE_63\n# define BOOST_PP_SEQ_SIZE_63(_) BOOST_PP_SEQ_SIZE_64\n# define BOOST_PP_SEQ_SIZE_64(_) BOOST_PP_SEQ_SIZE_65\n# define BOOST_PP_SEQ_SIZE_65(_) BOOST_PP_SEQ_SIZE_66\n# define BOOST_PP_SEQ_SIZE_66(_) BOOST_PP_SEQ_SIZE_67\n# define BOOST_PP_SEQ_SIZE_67(_) BOOST_PP_SEQ_SIZE_68\n# define BOOST_PP_SEQ_SIZE_68(_) BOOST_PP_SEQ_SIZE_69\n# define BOOST_PP_SEQ_SIZE_69(_) BOOST_PP_SEQ_SIZE_70\n# define BOOST_PP_SEQ_SIZE_70(_) BOOST_PP_SEQ_SIZE_71\n# define BOOST_PP_SEQ_SIZE_71(_) BOOST_PP_SEQ_SIZE_72\n# define BOOST_PP_SEQ_SIZE_72(_) BOOST_PP_SEQ_SIZE_73\n# define BOOST_PP_SEQ_SIZE_73(_) BOOST_PP_SEQ_SIZE_74\n# define BOOST_PP_SEQ_SIZE_74(_) BOOST_PP_SEQ_SIZE_75\n# define BOOST_PP_SEQ_SIZE_75(_) BOOST_PP_SEQ_SIZE_76\n# define BOOST_PP_SEQ_SIZE_76(_) BOOST_PP_SEQ_SIZE_77\n# define BOOST_PP_SEQ_SIZE_77(_) BOOST_PP_SEQ_SIZE_78\n# define BOOST_PP_SEQ_SIZE_78(_) BOOST_PP_SEQ_SIZE_79\n# define BOOST_PP_SEQ_SIZE_79(_) BOOST_PP_SEQ_SIZE_80\n# define BOOST_PP_SEQ_SIZE_80(_) BOOST_PP_SEQ_SIZE_81\n# define BOOST_PP_SEQ_SIZE_81(_) BOOST_PP_SEQ_SIZE_82\n# define BOOST_PP_SEQ_SIZE_82(_) BOOST_PP_SEQ_SIZE_83\n# define BOOST_PP_SEQ_SIZE_83(_) BOOST_PP_SEQ_SIZE_84\n# define BOOST_PP_SEQ_SIZE_84(_) BOOST_PP_SEQ_SIZE_85\n# define BOOST_PP_SEQ_SIZE_85(_) BOOST_PP_SEQ_SIZE_86\n# define BOOST_PP_SEQ_SIZE_86(_) BOOST_PP_SEQ_SIZE_87\n# define BOOST_PP_SEQ_SIZE_87(_) BOOST_PP_SEQ_SIZE_88\n# define BOOST_PP_SEQ_SIZE_88(_) BOOST_PP_SEQ_SIZE_89\n# define BOOST_PP_SEQ_SIZE_89(_) BOOST_PP_SEQ_SIZE_90\n# define BOOST_PP_SEQ_SIZE_90(_) BOOST_PP_SEQ_SIZE_91\n# define BOOST_PP_SEQ_SIZE_91(_) BOOST_PP_SEQ_SIZE_92\n# define BOOST_PP_SEQ_SIZE_92(_) BOOST_PP_SEQ_SIZE_93\n# define BOOST_PP_SEQ_SIZE_93(_) BOOST_PP_SEQ_SIZE_94\n# define BOOST_PP_SEQ_SIZE_94(_) BOOST_PP_SEQ_SIZE_95\n# define BOOST_PP_SEQ_SIZE_95(_) BOOST_PP_SEQ_SIZE_96\n# define BOOST_PP_SEQ_SIZE_96(_) BOOST_PP_SEQ_SIZE_97\n# define BOOST_PP_SEQ_SIZE_97(_) BOOST_PP_SEQ_SIZE_98\n# define BOOST_PP_SEQ_SIZE_98(_) BOOST_PP_SEQ_SIZE_99\n# define BOOST_PP_SEQ_SIZE_99(_) BOOST_PP_SEQ_SIZE_100\n# define BOOST_PP_SEQ_SIZE_100(_) BOOST_PP_SEQ_SIZE_101\n# define BOOST_PP_SEQ_SIZE_101(_) BOOST_PP_SEQ_SIZE_102\n# define BOOST_PP_SEQ_SIZE_102(_) BOOST_PP_SEQ_SIZE_103\n# define BOOST_PP_SEQ_SIZE_103(_) BOOST_PP_SEQ_SIZE_104\n# define BOOST_PP_SEQ_SIZE_104(_) BOOST_PP_SEQ_SIZE_105\n# define BOOST_PP_SEQ_SIZE_105(_) BOOST_PP_SEQ_SIZE_106\n# define BOOST_PP_SEQ_SIZE_106(_) BOOST_PP_SEQ_SIZE_107\n# define BOOST_PP_SEQ_SIZE_107(_) BOOST_PP_SEQ_SIZE_108\n# define BOOST_PP_SEQ_SIZE_108(_) BOOST_PP_SEQ_SIZE_109\n# define BOOST_PP_SEQ_SIZE_109(_) BOOST_PP_SEQ_SIZE_110\n# define BOOST_PP_SEQ_SIZE_110(_) BOOST_PP_SEQ_SIZE_111\n# define BOOST_PP_SEQ_SIZE_111(_) BOOST_PP_SEQ_SIZE_112\n# define BOOST_PP_SEQ_SIZE_112(_) BOOST_PP_SEQ_SIZE_113\n# define BOOST_PP_SEQ_SIZE_113(_) BOOST_PP_SEQ_SIZE_114\n# define BOOST_PP_SEQ_SIZE_114(_) BOOST_PP_SEQ_SIZE_115\n# define BOOST_PP_SEQ_SIZE_115(_) BOOST_PP_SEQ_SIZE_116\n# define BOOST_PP_SEQ_SIZE_116(_) BOOST_PP_SEQ_SIZE_117\n# define BOOST_PP_SEQ_SIZE_117(_) BOOST_PP_SEQ_SIZE_118\n# define BOOST_PP_SEQ_SIZE_118(_) BOOST_PP_SEQ_SIZE_119\n# define BOOST_PP_SEQ_SIZE_119(_) BOOST_PP_SEQ_SIZE_120\n# define BOOST_PP_SEQ_SIZE_120(_) BOOST_PP_SEQ_SIZE_121\n# define BOOST_PP_SEQ_SIZE_121(_) BOOST_PP_SEQ_SIZE_122\n# define BOOST_PP_SEQ_SIZE_122(_) BOOST_PP_SEQ_SIZE_123\n# define BOOST_PP_SEQ_SIZE_123(_) BOOST_PP_SEQ_SIZE_124\n# define BOOST_PP_SEQ_SIZE_124(_) BOOST_PP_SEQ_SIZE_125\n# define BOOST_PP_SEQ_SIZE_125(_) BOOST_PP_SEQ_SIZE_126\n# define BOOST_PP_SEQ_SIZE_126(_) BOOST_PP_SEQ_SIZE_127\n# define BOOST_PP_SEQ_SIZE_127(_) BOOST_PP_SEQ_SIZE_128\n# define BOOST_PP_SEQ_SIZE_128(_) BOOST_PP_SEQ_SIZE_129\n# define BOOST_PP_SEQ_SIZE_129(_) BOOST_PP_SEQ_SIZE_130\n# define BOOST_PP_SEQ_SIZE_130(_) BOOST_PP_SEQ_SIZE_131\n# define BOOST_PP_SEQ_SIZE_131(_) BOOST_PP_SEQ_SIZE_132\n# define BOOST_PP_SEQ_SIZE_132(_) BOOST_PP_SEQ_SIZE_133\n# define BOOST_PP_SEQ_SIZE_133(_) BOOST_PP_SEQ_SIZE_134\n# define BOOST_PP_SEQ_SIZE_134(_) BOOST_PP_SEQ_SIZE_135\n# define BOOST_PP_SEQ_SIZE_135(_) BOOST_PP_SEQ_SIZE_136\n# define BOOST_PP_SEQ_SIZE_136(_) BOOST_PP_SEQ_SIZE_137\n# define BOOST_PP_SEQ_SIZE_137(_) BOOST_PP_SEQ_SIZE_138\n# define BOOST_PP_SEQ_SIZE_138(_) BOOST_PP_SEQ_SIZE_139\n# define BOOST_PP_SEQ_SIZE_139(_) BOOST_PP_SEQ_SIZE_140\n# define BOOST_PP_SEQ_SIZE_140(_) BOOST_PP_SEQ_SIZE_141\n# define BOOST_PP_SEQ_SIZE_141(_) BOOST_PP_SEQ_SIZE_142\n# define BOOST_PP_SEQ_SIZE_142(_) BOOST_PP_SEQ_SIZE_143\n# define BOOST_PP_SEQ_SIZE_143(_) BOOST_PP_SEQ_SIZE_144\n# define BOOST_PP_SEQ_SIZE_144(_) BOOST_PP_SEQ_SIZE_145\n# define BOOST_PP_SEQ_SIZE_145(_) BOOST_PP_SEQ_SIZE_146\n# define BOOST_PP_SEQ_SIZE_146(_) BOOST_PP_SEQ_SIZE_147\n# define BOOST_PP_SEQ_SIZE_147(_) BOOST_PP_SEQ_SIZE_148\n# define BOOST_PP_SEQ_SIZE_148(_) BOOST_PP_SEQ_SIZE_149\n# define BOOST_PP_SEQ_SIZE_149(_) BOOST_PP_SEQ_SIZE_150\n# define BOOST_PP_SEQ_SIZE_150(_) BOOST_PP_SEQ_SIZE_151\n# define BOOST_PP_SEQ_SIZE_151(_) BOOST_PP_SEQ_SIZE_152\n# define BOOST_PP_SEQ_SIZE_152(_) BOOST_PP_SEQ_SIZE_153\n# define BOOST_PP_SEQ_SIZE_153(_) BOOST_PP_SEQ_SIZE_154\n# define BOOST_PP_SEQ_SIZE_154(_) BOOST_PP_SEQ_SIZE_155\n# define BOOST_PP_SEQ_SIZE_155(_) BOOST_PP_SEQ_SIZE_156\n# define BOOST_PP_SEQ_SIZE_156(_) BOOST_PP_SEQ_SIZE_157\n# define BOOST_PP_SEQ_SIZE_157(_) BOOST_PP_SEQ_SIZE_158\n# define BOOST_PP_SEQ_SIZE_158(_) BOOST_PP_SEQ_SIZE_159\n# define BOOST_PP_SEQ_SIZE_159(_) BOOST_PP_SEQ_SIZE_160\n# define BOOST_PP_SEQ_SIZE_160(_) BOOST_PP_SEQ_SIZE_161\n# define BOOST_PP_SEQ_SIZE_161(_) BOOST_PP_SEQ_SIZE_162\n# define BOOST_PP_SEQ_SIZE_162(_) BOOST_PP_SEQ_SIZE_163\n# define BOOST_PP_SEQ_SIZE_163(_) BOOST_PP_SEQ_SIZE_164\n# define BOOST_PP_SEQ_SIZE_164(_) BOOST_PP_SEQ_SIZE_165\n# define BOOST_PP_SEQ_SIZE_165(_) BOOST_PP_SEQ_SIZE_166\n# define BOOST_PP_SEQ_SIZE_166(_) BOOST_PP_SEQ_SIZE_167\n# define BOOST_PP_SEQ_SIZE_167(_) BOOST_PP_SEQ_SIZE_168\n# define BOOST_PP_SEQ_SIZE_168(_) BOOST_PP_SEQ_SIZE_169\n# define BOOST_PP_SEQ_SIZE_169(_) BOOST_PP_SEQ_SIZE_170\n# define BOOST_PP_SEQ_SIZE_170(_) BOOST_PP_SEQ_SIZE_171\n# define BOOST_PP_SEQ_SIZE_171(_) BOOST_PP_SEQ_SIZE_172\n# define BOOST_PP_SEQ_SIZE_172(_) BOOST_PP_SEQ_SIZE_173\n# define BOOST_PP_SEQ_SIZE_173(_) BOOST_PP_SEQ_SIZE_174\n# define BOOST_PP_SEQ_SIZE_174(_) BOOST_PP_SEQ_SIZE_175\n# define BOOST_PP_SEQ_SIZE_175(_) BOOST_PP_SEQ_SIZE_176\n# define BOOST_PP_SEQ_SIZE_176(_) BOOST_PP_SEQ_SIZE_177\n# define BOOST_PP_SEQ_SIZE_177(_) BOOST_PP_SEQ_SIZE_178\n# define BOOST_PP_SEQ_SIZE_178(_) BOOST_PP_SEQ_SIZE_179\n# define BOOST_PP_SEQ_SIZE_179(_) BOOST_PP_SEQ_SIZE_180\n# define BOOST_PP_SEQ_SIZE_180(_) BOOST_PP_SEQ_SIZE_181\n# define BOOST_PP_SEQ_SIZE_181(_) BOOST_PP_SEQ_SIZE_182\n# define BOOST_PP_SEQ_SIZE_182(_) BOOST_PP_SEQ_SIZE_183\n# define BOOST_PP_SEQ_SIZE_183(_) BOOST_PP_SEQ_SIZE_184\n# define BOOST_PP_SEQ_SIZE_184(_) BOOST_PP_SEQ_SIZE_185\n# define BOOST_PP_SEQ_SIZE_185(_) BOOST_PP_SEQ_SIZE_186\n# define BOOST_PP_SEQ_SIZE_186(_) BOOST_PP_SEQ_SIZE_187\n# define BOOST_PP_SEQ_SIZE_187(_) BOOST_PP_SEQ_SIZE_188\n# define BOOST_PP_SEQ_SIZE_188(_) BOOST_PP_SEQ_SIZE_189\n# define BOOST_PP_SEQ_SIZE_189(_) BOOST_PP_SEQ_SIZE_190\n# define BOOST_PP_SEQ_SIZE_190(_) BOOST_PP_SEQ_SIZE_191\n# define BOOST_PP_SEQ_SIZE_191(_) BOOST_PP_SEQ_SIZE_192\n# define BOOST_PP_SEQ_SIZE_192(_) BOOST_PP_SEQ_SIZE_193\n# define BOOST_PP_SEQ_SIZE_193(_) BOOST_PP_SEQ_SIZE_194\n# define BOOST_PP_SEQ_SIZE_194(_) BOOST_PP_SEQ_SIZE_195\n# define BOOST_PP_SEQ_SIZE_195(_) BOOST_PP_SEQ_SIZE_196\n# define BOOST_PP_SEQ_SIZE_196(_) BOOST_PP_SEQ_SIZE_197\n# define BOOST_PP_SEQ_SIZE_197(_) BOOST_PP_SEQ_SIZE_198\n# define BOOST_PP_SEQ_SIZE_198(_) BOOST_PP_SEQ_SIZE_199\n# define BOOST_PP_SEQ_SIZE_199(_) BOOST_PP_SEQ_SIZE_200\n# define BOOST_PP_SEQ_SIZE_200(_) BOOST_PP_SEQ_SIZE_201\n# define BOOST_PP_SEQ_SIZE_201(_) BOOST_PP_SEQ_SIZE_202\n# define BOOST_PP_SEQ_SIZE_202(_) BOOST_PP_SEQ_SIZE_203\n# define BOOST_PP_SEQ_SIZE_203(_) BOOST_PP_SEQ_SIZE_204\n# define BOOST_PP_SEQ_SIZE_204(_) BOOST_PP_SEQ_SIZE_205\n# define BOOST_PP_SEQ_SIZE_205(_) BOOST_PP_SEQ_SIZE_206\n# define BOOST_PP_SEQ_SIZE_206(_) BOOST_PP_SEQ_SIZE_207\n# define BOOST_PP_SEQ_SIZE_207(_) BOOST_PP_SEQ_SIZE_208\n# define BOOST_PP_SEQ_SIZE_208(_) BOOST_PP_SEQ_SIZE_209\n# define BOOST_PP_SEQ_SIZE_209(_) BOOST_PP_SEQ_SIZE_210\n# define BOOST_PP_SEQ_SIZE_210(_) BOOST_PP_SEQ_SIZE_211\n# define BOOST_PP_SEQ_SIZE_211(_) BOOST_PP_SEQ_SIZE_212\n# define BOOST_PP_SEQ_SIZE_212(_) BOOST_PP_SEQ_SIZE_213\n# define BOOST_PP_SEQ_SIZE_213(_) BOOST_PP_SEQ_SIZE_214\n# define BOOST_PP_SEQ_SIZE_214(_) BOOST_PP_SEQ_SIZE_215\n# define BOOST_PP_SEQ_SIZE_215(_) BOOST_PP_SEQ_SIZE_216\n# define BOOST_PP_SEQ_SIZE_216(_) BOOST_PP_SEQ_SIZE_217\n# define BOOST_PP_SEQ_SIZE_217(_) BOOST_PP_SEQ_SIZE_218\n# define BOOST_PP_SEQ_SIZE_218(_) BOOST_PP_SEQ_SIZE_219\n# define BOOST_PP_SEQ_SIZE_219(_) BOOST_PP_SEQ_SIZE_220\n# define BOOST_PP_SEQ_SIZE_220(_) BOOST_PP_SEQ_SIZE_221\n# define BOOST_PP_SEQ_SIZE_221(_) BOOST_PP_SEQ_SIZE_222\n# define BOOST_PP_SEQ_SIZE_222(_) BOOST_PP_SEQ_SIZE_223\n# define BOOST_PP_SEQ_SIZE_223(_) BOOST_PP_SEQ_SIZE_224\n# define BOOST_PP_SEQ_SIZE_224(_) BOOST_PP_SEQ_SIZE_225\n# define BOOST_PP_SEQ_SIZE_225(_) BOOST_PP_SEQ_SIZE_226\n# define BOOST_PP_SEQ_SIZE_226(_) BOOST_PP_SEQ_SIZE_227\n# define BOOST_PP_SEQ_SIZE_227(_) BOOST_PP_SEQ_SIZE_228\n# define BOOST_PP_SEQ_SIZE_228(_) BOOST_PP_SEQ_SIZE_229\n# define BOOST_PP_SEQ_SIZE_229(_) BOOST_PP_SEQ_SIZE_230\n# define BOOST_PP_SEQ_SIZE_230(_) BOOST_PP_SEQ_SIZE_231\n# define BOOST_PP_SEQ_SIZE_231(_) BOOST_PP_SEQ_SIZE_232\n# define BOOST_PP_SEQ_SIZE_232(_) BOOST_PP_SEQ_SIZE_233\n# define BOOST_PP_SEQ_SIZE_233(_) BOOST_PP_SEQ_SIZE_234\n# define BOOST_PP_SEQ_SIZE_234(_) BOOST_PP_SEQ_SIZE_235\n# define BOOST_PP_SEQ_SIZE_235(_) BOOST_PP_SEQ_SIZE_236\n# define BOOST_PP_SEQ_SIZE_236(_) BOOST_PP_SEQ_SIZE_237\n# define BOOST_PP_SEQ_SIZE_237(_) BOOST_PP_SEQ_SIZE_238\n# define BOOST_PP_SEQ_SIZE_238(_) BOOST_PP_SEQ_SIZE_239\n# define BOOST_PP_SEQ_SIZE_239(_) BOOST_PP_SEQ_SIZE_240\n# define BOOST_PP_SEQ_SIZE_240(_) BOOST_PP_SEQ_SIZE_241\n# define BOOST_PP_SEQ_SIZE_241(_) BOOST_PP_SEQ_SIZE_242\n# define BOOST_PP_SEQ_SIZE_242(_) BOOST_PP_SEQ_SIZE_243\n# define BOOST_PP_SEQ_SIZE_243(_) BOOST_PP_SEQ_SIZE_244\n# define BOOST_PP_SEQ_SIZE_244(_) BOOST_PP_SEQ_SIZE_245\n# define BOOST_PP_SEQ_SIZE_245(_) BOOST_PP_SEQ_SIZE_246\n# define BOOST_PP_SEQ_SIZE_246(_) BOOST_PP_SEQ_SIZE_247\n# define BOOST_PP_SEQ_SIZE_247(_) BOOST_PP_SEQ_SIZE_248\n# define BOOST_PP_SEQ_SIZE_248(_) BOOST_PP_SEQ_SIZE_249\n# define BOOST_PP_SEQ_SIZE_249(_) BOOST_PP_SEQ_SIZE_250\n# define BOOST_PP_SEQ_SIZE_250(_) BOOST_PP_SEQ_SIZE_251\n# define BOOST_PP_SEQ_SIZE_251(_) BOOST_PP_SEQ_SIZE_252\n# define BOOST_PP_SEQ_SIZE_252(_) BOOST_PP_SEQ_SIZE_253\n# define BOOST_PP_SEQ_SIZE_253(_) BOOST_PP_SEQ_SIZE_254\n# define BOOST_PP_SEQ_SIZE_254(_) BOOST_PP_SEQ_SIZE_255\n# define BOOST_PP_SEQ_SIZE_255(_) BOOST_PP_SEQ_SIZE_256\n# define BOOST_PP_SEQ_SIZE_256(_) BOOST_PP_SEQ_SIZE_257\n#\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_0 0\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_1 1\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_2 2\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_3 3\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4 4\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_5 5\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_6 6\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_7 7\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_8 8\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_9 9\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_10 10\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_11 11\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_12 12\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_13 13\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_14 14\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_15 15\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_16 16\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_17 17\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_18 18\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_19 19\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_20 20\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_21 21\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_22 22\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_23 23\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_24 24\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_25 25\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_26 26\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_27 27\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_28 28\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_29 29\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_30 30\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_31 31\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_32 32\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_33 33\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_34 34\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_35 35\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_36 36\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_37 37\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_38 38\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_39 39\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_40 40\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_41 41\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_42 42\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_43 43\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_44 44\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_45 45\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_46 46\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_47 47\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_48 48\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_49 49\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_50 50\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_51 51\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_52 52\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_53 53\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_54 54\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_55 55\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_56 56\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_57 57\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_58 58\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_59 59\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_60 60\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_61 61\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_62 62\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_63 63\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_64 64\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_65 65\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_66 66\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_67 67\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_68 68\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_69 69\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_70 70\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_71 71\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_72 72\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_73 73\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_74 74\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_75 75\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_76 76\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_77 77\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_78 78\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_79 79\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_80 80\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_81 81\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_82 82\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_83 83\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_84 84\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_85 85\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_86 86\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_87 87\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_88 88\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_89 89\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_90 90\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_91 91\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_92 92\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_93 93\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_94 94\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_95 95\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_96 96\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_97 97\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_98 98\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_99 99\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_100 100\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_101 101\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_102 102\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_103 103\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_104 104\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_105 105\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_106 106\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_107 107\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_108 108\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_109 109\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_110 110\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_111 111\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_112 112\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_113 113\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_114 114\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_115 115\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_116 116\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_117 117\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_118 118\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_119 119\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_120 120\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_121 121\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_122 122\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_123 123\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_124 124\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_125 125\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_126 126\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_127 127\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_128 128\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_129 129\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_130 130\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_131 131\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_132 132\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_133 133\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_134 134\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_135 135\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_136 136\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_137 137\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_138 138\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_139 139\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_140 140\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_141 141\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_142 142\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_143 143\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_144 144\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_145 145\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_146 146\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_147 147\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_148 148\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_149 149\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_150 150\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_151 151\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_152 152\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_153 153\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_154 154\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_155 155\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_156 156\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_157 157\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_158 158\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_159 159\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_160 160\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_161 161\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_162 162\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_163 163\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_164 164\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_165 165\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_166 166\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_167 167\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_168 168\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_169 169\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_170 170\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_171 171\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_172 172\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_173 173\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_174 174\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_175 175\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_176 176\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_177 177\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_178 178\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_179 179\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_180 180\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_181 181\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_182 182\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_183 183\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_184 184\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_185 185\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_186 186\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_187 187\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_188 188\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_189 189\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_190 190\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_191 191\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_192 192\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_193 193\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_194 194\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_195 195\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_196 196\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_197 197\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_198 198\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_199 199\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_200 200\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_201 201\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_202 202\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_203 203\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_204 204\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_205 205\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_206 206\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_207 207\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_208 208\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_209 209\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_210 210\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_211 211\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_212 212\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_213 213\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_214 214\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_215 215\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_216 216\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_217 217\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_218 218\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_219 219\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_220 220\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_221 221\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_222 222\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_223 223\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_224 224\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_225 225\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_226 226\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_227 227\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_228 228\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_229 229\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_230 230\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_231 231\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_232 232\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_233 233\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_234 234\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_235 235\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_236 236\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_237 237\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_238 238\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_239 239\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_240 240\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_241 241\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_242 242\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_243 243\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_244 244\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_245 245\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_246 246\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_247 247\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_248 248\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_249 249\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_250 250\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_251 251\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_252 252\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_253 253\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_254 254\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_255 255\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_256 256\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_257 257\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/subseq.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_SUBSEQ_HPP\n# define BOOST_PREPROCESSOR_SEQ_SUBSEQ_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/first_n.hpp>\n# include <boost/preprocessor/seq/rest_n.hpp>\n#\n# /* BOOST_PP_SEQ_SUBSEQ */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_SUBSEQ(seq, i, len) BOOST_PP_SEQ_FIRST_N(len, BOOST_PP_SEQ_REST_N(i, seq))\n# else\n#    define BOOST_PP_SEQ_SUBSEQ(seq, i, len) BOOST_PP_SEQ_SUBSEQ_I(seq, i, len)\n#    define BOOST_PP_SEQ_SUBSEQ_I(seq, i, len) BOOST_PP_SEQ_FIRST_N(len, BOOST_PP_SEQ_REST_N(i, seq))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/to_array.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_TO_ARRAY_HPP\n# define BOOST_PREPROCESSOR_SEQ_TO_ARRAY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/enum.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n#\n# /* BOOST_PP_SEQ_TO_ARRAY */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_TO_ARRAY(seq) (BOOST_PP_SEQ_SIZE(seq), (BOOST_PP_SEQ_ENUM(seq)))\n# else\n#    define BOOST_PP_SEQ_TO_ARRAY(seq) BOOST_PP_SEQ_TO_ARRAY_I(seq)\n#    define BOOST_PP_SEQ_TO_ARRAY_I(seq) (BOOST_PP_SEQ_SIZE(seq), (BOOST_PP_SEQ_ENUM(seq)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/to_list.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_TO_LIST_HPP\n# define BOOST_PREPROCESSOR_SEQ_TO_LIST_HPP\n#\n# include <boost/preprocessor/punctuation/comma.hpp>\n# include <boost/preprocessor/punctuation/paren.hpp>\n# include <boost/preprocessor/seq/detail/binary_transform.hpp>\n#\n# /* BOOST_PP_SEQ_TO_LIST */\n#\n# define BOOST_PP_SEQ_TO_LIST(seq) BOOST_PP_SEQ_TO_LIST_I(BOOST_PP_SEQ_BINARY_TRANSFORM(seq))\n# define BOOST_PP_SEQ_TO_LIST_I(bseq) BOOST_PP_SEQ_TO_LIST_A bseq BOOST_PP_NIL BOOST_PP_SEQ_TO_LIST_B bseq\n# define BOOST_PP_SEQ_TO_LIST_A(m, e) m(BOOST_PP_LPAREN() e BOOST_PP_COMMA() BOOST_PP_SEQ_TO_LIST_A_ID)\n# define BOOST_PP_SEQ_TO_LIST_A_ID() BOOST_PP_SEQ_TO_LIST_A\n# define BOOST_PP_SEQ_TO_LIST_B(m, e) m(BOOST_PP_RPAREN() BOOST_PP_SEQ_TO_LIST_B_ID)\n# define BOOST_PP_SEQ_TO_LIST_B_ID() BOOST_PP_SEQ_TO_LIST_B\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/to_tuple.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_TO_TUPLE_HPP\n# define BOOST_PREPROCESSOR_SEQ_TO_TUPLE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/enum.hpp>\n#\n# /* BOOST_PP_SEQ_TO_TUPLE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_TO_TUPLE(seq) (BOOST_PP_SEQ_ENUM(seq))\n# else\n#    define BOOST_PP_SEQ_TO_TUPLE(seq) BOOST_PP_SEQ_TO_TUPLE_I(seq)\n#    define BOOST_PP_SEQ_TO_TUPLE_I(seq) (BOOST_PP_SEQ_ENUM(seq))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/transform.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_TRANSFORM_HPP\n# define BOOST_PREPROCESSOR_SEQ_TRANSFORM_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/fold_left.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_SEQ_TRANSFORM */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_TRANSFORM(op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))\n# else\n#    define BOOST_PP_SEQ_TRANSFORM(op, data, seq) BOOST_PP_SEQ_TRANSFORM_I(op, data, seq)\n#    define BOOST_PP_SEQ_TRANSFORM_I(op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_TRANSFORM_O(s, state, elem) BOOST_PP_SEQ_TRANSFORM_O_IM(s, BOOST_PP_TUPLE_REM_3 state, elem)\n#    define BOOST_PP_SEQ_TRANSFORM_O_IM(s, im, elem) BOOST_PP_SEQ_TRANSFORM_O_I(s, im, elem)\n# else\n#    define BOOST_PP_SEQ_TRANSFORM_O(s, state, elem) BOOST_PP_SEQ_TRANSFORM_O_I(s, BOOST_PP_TUPLE_ELEM(3, 0, state), BOOST_PP_TUPLE_ELEM(3, 1, state), BOOST_PP_TUPLE_ELEM(3, 2, state), elem)\n# endif\n#\n# define BOOST_PP_SEQ_TRANSFORM_O_I(s, op, data, res, elem) (op, data, res (op(s, data, elem)))\n#\n# /* BOOST_PP_SEQ_TRANSFORM_S */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_TRANSFORM_S(s, op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))\n# else\n#    define BOOST_PP_SEQ_TRANSFORM_S(s, op, data, seq) BOOST_PP_SEQ_TRANSFORM_S_I(s, op, data, seq)\n#    define BOOST_PP_SEQ_TRANSFORM_S_I(s, op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq/variadic_seq_to_seq.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2012.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_VARIADIC_SEQ_TO_SEQ_HPP\n# define BOOST_PREPROCESSOR_SEQ_VARIADIC_SEQ_TO_SEQ_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_VARIADIC_SEQ_TO_SEQ */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_VARIADIC_SEQ_TO_SEQ(vseq) BOOST_PP_CAT(BOOST_PP_VARIADIC_SEQ_TO_SEQ_A vseq, 0)\n#    define BOOST_PP_VARIADIC_SEQ_TO_SEQ_A(...) ((__VA_ARGS__)) BOOST_PP_VARIADIC_SEQ_TO_SEQ_B\n#    define BOOST_PP_VARIADIC_SEQ_TO_SEQ_B(...) ((__VA_ARGS__)) BOOST_PP_VARIADIC_SEQ_TO_SEQ_A\n#    define BOOST_PP_VARIADIC_SEQ_TO_SEQ_A0\n#    define BOOST_PP_VARIADIC_SEQ_TO_SEQ_B0\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/seq.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002-2011.                             *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_HPP\n# define BOOST_PREPROCESSOR_SEQ_HPP\n#\n# include <boost/preprocessor/seq/cat.hpp>\n# include <boost/preprocessor/seq/elem.hpp>\n# include <boost/preprocessor/seq/enum.hpp>\n# include <boost/preprocessor/seq/filter.hpp>\n# include <boost/preprocessor/seq/first_n.hpp>\n# include <boost/preprocessor/seq/fold_left.hpp>\n# include <boost/preprocessor/seq/fold_right.hpp>\n# include <boost/preprocessor/seq/for_each.hpp>\n# include <boost/preprocessor/seq/for_each_i.hpp>\n# include <boost/preprocessor/seq/for_each_product.hpp>\n# include <boost/preprocessor/seq/insert.hpp>\n# include <boost/preprocessor/seq/pop_back.hpp>\n# include <boost/preprocessor/seq/pop_front.hpp>\n# include <boost/preprocessor/seq/push_back.hpp>\n# include <boost/preprocessor/seq/push_front.hpp>\n# include <boost/preprocessor/seq/remove.hpp>\n# include <boost/preprocessor/seq/replace.hpp>\n# include <boost/preprocessor/seq/rest_n.hpp>\n# include <boost/preprocessor/seq/reverse.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n# include <boost/preprocessor/seq/subseq.hpp>\n# include <boost/preprocessor/seq/to_array.hpp>\n# include <boost/preprocessor/seq/to_list.hpp>\n# include <boost/preprocessor/seq/to_tuple.hpp>\n# include <boost/preprocessor/seq/transform.hpp>\n# include <boost/preprocessor/seq/variadic_seq_to_seq.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/counter.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2005.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SLOT_COUNTER_HPP\n# define BOOST_PREPROCESSOR_SLOT_COUNTER_HPP\n#\n# include <boost/preprocessor/slot/detail/def.hpp>\n#\n# /* BOOST_PP_COUNTER */\n#\n# define BOOST_PP_COUNTER 0\n#\n# /* BOOST_PP_UPDATE_COUNTER */\n#\n# define BOOST_PP_UPDATE_COUNTER() <boost/preprocessor/slot/detail/counter.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/detail/counter.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2005.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# define BOOST_PP_VALUE BOOST_PP_COUNTER + 1\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_COUNTER\n#\n# undef BOOST_PP_COUNTER_DIGIT_1\n# undef BOOST_PP_COUNTER_DIGIT_2\n# undef BOOST_PP_COUNTER_DIGIT_3\n# undef BOOST_PP_COUNTER_DIGIT_4\n# undef BOOST_PP_COUNTER_DIGIT_5\n# undef BOOST_PP_COUNTER_DIGIT_6\n# undef BOOST_PP_COUNTER_DIGIT_7\n# undef BOOST_PP_COUNTER_DIGIT_8\n# undef BOOST_PP_COUNTER_DIGIT_9\n# undef BOOST_PP_COUNTER_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_10 == 0\n#    define BOOST_PP_COUNTER_DIGIT_10 0\n# elif BOOST_PP_SLOT_TEMP_10 == 1\n#    define BOOST_PP_COUNTER_DIGIT_10 1\n# elif BOOST_PP_SLOT_TEMP_10 == 2\n#    define BOOST_PP_COUNTER_DIGIT_10 2\n# elif BOOST_PP_SLOT_TEMP_10 == 3\n#    define BOOST_PP_COUNTER_DIGIT_10 3\n# elif BOOST_PP_SLOT_TEMP_10 == 4\n#    define BOOST_PP_COUNTER_DIGIT_10 4\n# elif BOOST_PP_SLOT_TEMP_10 == 5\n#    define BOOST_PP_COUNTER_DIGIT_10 5\n# elif BOOST_PP_SLOT_TEMP_10 == 6\n#    define BOOST_PP_COUNTER_DIGIT_10 6\n# elif BOOST_PP_SLOT_TEMP_10 == 7\n#    define BOOST_PP_COUNTER_DIGIT_10 7\n# elif BOOST_PP_SLOT_TEMP_10 == 8\n#    define BOOST_PP_COUNTER_DIGIT_10 8\n# elif BOOST_PP_SLOT_TEMP_10 == 9\n#    define BOOST_PP_COUNTER_DIGIT_10 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_9 == 0\n#    define BOOST_PP_COUNTER_DIGIT_9 0\n# elif BOOST_PP_SLOT_TEMP_9 == 1\n#    define BOOST_PP_COUNTER_DIGIT_9 1\n# elif BOOST_PP_SLOT_TEMP_9 == 2\n#    define BOOST_PP_COUNTER_DIGIT_9 2\n# elif BOOST_PP_SLOT_TEMP_9 == 3\n#    define BOOST_PP_COUNTER_DIGIT_9 3\n# elif BOOST_PP_SLOT_TEMP_9 == 4\n#    define BOOST_PP_COUNTER_DIGIT_9 4\n# elif BOOST_PP_SLOT_TEMP_9 == 5\n#    define BOOST_PP_COUNTER_DIGIT_9 5\n# elif BOOST_PP_SLOT_TEMP_9 == 6\n#    define BOOST_PP_COUNTER_DIGIT_9 6\n# elif BOOST_PP_SLOT_TEMP_9 == 7\n#    define BOOST_PP_COUNTER_DIGIT_9 7\n# elif BOOST_PP_SLOT_TEMP_9 == 8\n#    define BOOST_PP_COUNTER_DIGIT_9 8\n# elif BOOST_PP_SLOT_TEMP_9 == 9\n#    define BOOST_PP_COUNTER_DIGIT_9 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_8 == 0\n#    define BOOST_PP_COUNTER_DIGIT_8 0\n# elif BOOST_PP_SLOT_TEMP_8 == 1\n#    define BOOST_PP_COUNTER_DIGIT_8 1\n# elif BOOST_PP_SLOT_TEMP_8 == 2\n#    define BOOST_PP_COUNTER_DIGIT_8 2\n# elif BOOST_PP_SLOT_TEMP_8 == 3\n#    define BOOST_PP_COUNTER_DIGIT_8 3\n# elif BOOST_PP_SLOT_TEMP_8 == 4\n#    define BOOST_PP_COUNTER_DIGIT_8 4\n# elif BOOST_PP_SLOT_TEMP_8 == 5\n#    define BOOST_PP_COUNTER_DIGIT_8 5\n# elif BOOST_PP_SLOT_TEMP_8 == 6\n#    define BOOST_PP_COUNTER_DIGIT_8 6\n# elif BOOST_PP_SLOT_TEMP_8 == 7\n#    define BOOST_PP_COUNTER_DIGIT_8 7\n# elif BOOST_PP_SLOT_TEMP_8 == 8\n#    define BOOST_PP_COUNTER_DIGIT_8 8\n# elif BOOST_PP_SLOT_TEMP_8 == 9\n#    define BOOST_PP_COUNTER_DIGIT_8 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_7 == 0\n#    define BOOST_PP_COUNTER_DIGIT_7 0\n# elif BOOST_PP_SLOT_TEMP_7 == 1\n#    define BOOST_PP_COUNTER_DIGIT_7 1\n# elif BOOST_PP_SLOT_TEMP_7 == 2\n#    define BOOST_PP_COUNTER_DIGIT_7 2\n# elif BOOST_PP_SLOT_TEMP_7 == 3\n#    define BOOST_PP_COUNTER_DIGIT_7 3\n# elif BOOST_PP_SLOT_TEMP_7 == 4\n#    define BOOST_PP_COUNTER_DIGIT_7 4\n# elif BOOST_PP_SLOT_TEMP_7 == 5\n#    define BOOST_PP_COUNTER_DIGIT_7 5\n# elif BOOST_PP_SLOT_TEMP_7 == 6\n#    define BOOST_PP_COUNTER_DIGIT_7 6\n# elif BOOST_PP_SLOT_TEMP_7 == 7\n#    define BOOST_PP_COUNTER_DIGIT_7 7\n# elif BOOST_PP_SLOT_TEMP_7 == 8\n#    define BOOST_PP_COUNTER_DIGIT_7 8\n# elif BOOST_PP_SLOT_TEMP_7 == 9\n#    define BOOST_PP_COUNTER_DIGIT_7 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_6 == 0\n#    define BOOST_PP_COUNTER_DIGIT_6 0\n# elif BOOST_PP_SLOT_TEMP_6 == 1\n#    define BOOST_PP_COUNTER_DIGIT_6 1\n# elif BOOST_PP_SLOT_TEMP_6 == 2\n#    define BOOST_PP_COUNTER_DIGIT_6 2\n# elif BOOST_PP_SLOT_TEMP_6 == 3\n#    define BOOST_PP_COUNTER_DIGIT_6 3\n# elif BOOST_PP_SLOT_TEMP_6 == 4\n#    define BOOST_PP_COUNTER_DIGIT_6 4\n# elif BOOST_PP_SLOT_TEMP_6 == 5\n#    define BOOST_PP_COUNTER_DIGIT_6 5\n# elif BOOST_PP_SLOT_TEMP_6 == 6\n#    define BOOST_PP_COUNTER_DIGIT_6 6\n# elif BOOST_PP_SLOT_TEMP_6 == 7\n#    define BOOST_PP_COUNTER_DIGIT_6 7\n# elif BOOST_PP_SLOT_TEMP_6 == 8\n#    define BOOST_PP_COUNTER_DIGIT_6 8\n# elif BOOST_PP_SLOT_TEMP_6 == 9\n#    define BOOST_PP_COUNTER_DIGIT_6 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_5 == 0\n#    define BOOST_PP_COUNTER_DIGIT_5 0\n# elif BOOST_PP_SLOT_TEMP_5 == 1\n#    define BOOST_PP_COUNTER_DIGIT_5 1\n# elif BOOST_PP_SLOT_TEMP_5 == 2\n#    define BOOST_PP_COUNTER_DIGIT_5 2\n# elif BOOST_PP_SLOT_TEMP_5 == 3\n#    define BOOST_PP_COUNTER_DIGIT_5 3\n# elif BOOST_PP_SLOT_TEMP_5 == 4\n#    define BOOST_PP_COUNTER_DIGIT_5 4\n# elif BOOST_PP_SLOT_TEMP_5 == 5\n#    define BOOST_PP_COUNTER_DIGIT_5 5\n# elif BOOST_PP_SLOT_TEMP_5 == 6\n#    define BOOST_PP_COUNTER_DIGIT_5 6\n# elif BOOST_PP_SLOT_TEMP_5 == 7\n#    define BOOST_PP_COUNTER_DIGIT_5 7\n# elif BOOST_PP_SLOT_TEMP_5 == 8\n#    define BOOST_PP_COUNTER_DIGIT_5 8\n# elif BOOST_PP_SLOT_TEMP_5 == 9\n#    define BOOST_PP_COUNTER_DIGIT_5 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_4 == 0\n#    define BOOST_PP_COUNTER_DIGIT_4 0\n# elif BOOST_PP_SLOT_TEMP_4 == 1\n#    define BOOST_PP_COUNTER_DIGIT_4 1\n# elif BOOST_PP_SLOT_TEMP_4 == 2\n#    define BOOST_PP_COUNTER_DIGIT_4 2\n# elif BOOST_PP_SLOT_TEMP_4 == 3\n#    define BOOST_PP_COUNTER_DIGIT_4 3\n# elif BOOST_PP_SLOT_TEMP_4 == 4\n#    define BOOST_PP_COUNTER_DIGIT_4 4\n# elif BOOST_PP_SLOT_TEMP_4 == 5\n#    define BOOST_PP_COUNTER_DIGIT_4 5\n# elif BOOST_PP_SLOT_TEMP_4 == 6\n#    define BOOST_PP_COUNTER_DIGIT_4 6\n# elif BOOST_PP_SLOT_TEMP_4 == 7\n#    define BOOST_PP_COUNTER_DIGIT_4 7\n# elif BOOST_PP_SLOT_TEMP_4 == 8\n#    define BOOST_PP_COUNTER_DIGIT_4 8\n# elif BOOST_PP_SLOT_TEMP_4 == 9\n#    define BOOST_PP_COUNTER_DIGIT_4 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_COUNTER_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_COUNTER_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_COUNTER_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_COUNTER_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_COUNTER_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_COUNTER_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_COUNTER_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_COUNTER_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_COUNTER_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_COUNTER_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_COUNTER_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_COUNTER_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_COUNTER_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_COUNTER_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_COUNTER_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_COUNTER_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_COUNTER_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_COUNTER_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_COUNTER_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_COUNTER_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_COUNTER_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_COUNTER_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_COUNTER_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_COUNTER_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_COUNTER_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_COUNTER_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_COUNTER_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_COUNTER_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_COUNTER_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_COUNTER_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_COUNTER_DIGIT_10\n#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_10(BOOST_PP_COUNTER_DIGIT_10, BOOST_PP_COUNTER_DIGIT_9, BOOST_PP_COUNTER_DIGIT_8, BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)\n# elif BOOST_PP_COUNTER_DIGIT_9\n#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_9(BOOST_PP_COUNTER_DIGIT_9, BOOST_PP_COUNTER_DIGIT_8, BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)\n# elif BOOST_PP_COUNTER_DIGIT_8\n#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_8(BOOST_PP_COUNTER_DIGIT_8, BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)\n# elif BOOST_PP_COUNTER_DIGIT_7\n#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_7(BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)\n# elif BOOST_PP_COUNTER_DIGIT_6\n#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_6(BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)\n# elif BOOST_PP_COUNTER_DIGIT_5\n#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_5(BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)\n# elif BOOST_PP_COUNTER_DIGIT_4\n#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_4(BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)\n# elif BOOST_PP_COUNTER_DIGIT_3\n#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_3(BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)\n# elif BOOST_PP_COUNTER_DIGIT_2\n#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_2(BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)\n# else\n#    define BOOST_PP_COUNTER BOOST_PP_COUNTER_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/detail/def.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP\n# define BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP\n#\n# /* BOOST_PP_SLOT_OFFSET_x */\n#\n# define BOOST_PP_SLOT_OFFSET_10(x) (x) % 1000000000UL\n# define BOOST_PP_SLOT_OFFSET_9(x) BOOST_PP_SLOT_OFFSET_10(x) % 100000000UL\n# define BOOST_PP_SLOT_OFFSET_8(x) BOOST_PP_SLOT_OFFSET_9(x) % 10000000UL\n# define BOOST_PP_SLOT_OFFSET_7(x) BOOST_PP_SLOT_OFFSET_8(x) % 1000000UL\n# define BOOST_PP_SLOT_OFFSET_6(x) BOOST_PP_SLOT_OFFSET_7(x) % 100000UL\n# define BOOST_PP_SLOT_OFFSET_5(x) BOOST_PP_SLOT_OFFSET_6(x) % 10000UL\n# define BOOST_PP_SLOT_OFFSET_4(x) BOOST_PP_SLOT_OFFSET_5(x) % 1000UL\n# define BOOST_PP_SLOT_OFFSET_3(x) BOOST_PP_SLOT_OFFSET_4(x) % 100UL\n# define BOOST_PP_SLOT_OFFSET_2(x) BOOST_PP_SLOT_OFFSET_3(x) % 10UL\n#\n# /* BOOST_PP_SLOT_CC_x */\n#\n# define BOOST_PP_SLOT_CC_2(a, b) BOOST_PP_SLOT_CC_2_D(a, b)\n# define BOOST_PP_SLOT_CC_3(a, b, c) BOOST_PP_SLOT_CC_3_D(a, b, c)\n# define BOOST_PP_SLOT_CC_4(a, b, c, d) BOOST_PP_SLOT_CC_4_D(a, b, c, d)\n# define BOOST_PP_SLOT_CC_5(a, b, c, d, e) BOOST_PP_SLOT_CC_5_D(a, b, c, d, e)\n# define BOOST_PP_SLOT_CC_6(a, b, c, d, e, f) BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f)\n# define BOOST_PP_SLOT_CC_7(a, b, c, d, e, f, g) BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g)\n# define BOOST_PP_SLOT_CC_8(a, b, c, d, e, f, g, h) BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h)\n# define BOOST_PP_SLOT_CC_9(a, b, c, d, e, f, g, h, i) BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i)\n# define BOOST_PP_SLOT_CC_10(a, b, c, d, e, f, g, h, i, j) BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j)\n#\n# define BOOST_PP_SLOT_CC_2_D(a, b) a ## b\n# define BOOST_PP_SLOT_CC_3_D(a, b, c) a ## b ## c\n# define BOOST_PP_SLOT_CC_4_D(a, b, c, d) a ## b ## c ## d\n# define BOOST_PP_SLOT_CC_5_D(a, b, c, d, e) a ## b ## c ## d ## e\n# define BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f) a ## b ## c ## d ## e ## f\n# define BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g) a ## b ## c ## d ## e ## f ## g\n# define BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h) a ## b ## c ## d ## e ## f ## g ## h\n# define BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i) a ## b ## c ## d ## e ## f ## g ## h ## i\n# define BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j) a ## b ## c ## d ## e ## f ## g ## h ## i ## j\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/detail/shared.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PP_VALUE\n#    error BOOST_PP_ERROR:  BOOST_PP_VALUE is not defined\n# endif\n#\n# undef BOOST_PP_SLOT_TEMP_1\n# undef BOOST_PP_SLOT_TEMP_2\n# undef BOOST_PP_SLOT_TEMP_3\n# undef BOOST_PP_SLOT_TEMP_4\n# undef BOOST_PP_SLOT_TEMP_5\n# undef BOOST_PP_SLOT_TEMP_6\n# undef BOOST_PP_SLOT_TEMP_7\n# undef BOOST_PP_SLOT_TEMP_8\n# undef BOOST_PP_SLOT_TEMP_9\n# undef BOOST_PP_SLOT_TEMP_10\n#\n# if (BOOST_PP_VALUE) / 1000000000UL == 0\n#    define BOOST_PP_SLOT_TEMP_10 0\n# elif (BOOST_PP_VALUE) / 1000000000UL == 1\n#    define BOOST_PP_SLOT_TEMP_10 1\n# elif (BOOST_PP_VALUE) / 1000000000UL == 2\n#    define BOOST_PP_SLOT_TEMP_10 2\n# elif (BOOST_PP_VALUE) / 1000000000UL == 3\n#    define BOOST_PP_SLOT_TEMP_10 3\n# elif (BOOST_PP_VALUE) / 1000000000UL == 4\n#    define BOOST_PP_SLOT_TEMP_10 4\n# elif (BOOST_PP_VALUE) / 1000000000UL == 5\n#    define BOOST_PP_SLOT_TEMP_10 5\n# elif (BOOST_PP_VALUE) / 1000000000UL == 6\n#    define BOOST_PP_SLOT_TEMP_10 6\n# elif (BOOST_PP_VALUE) / 1000000000UL == 7\n#    define BOOST_PP_SLOT_TEMP_10 7\n# elif (BOOST_PP_VALUE) / 1000000000UL == 8\n#    define BOOST_PP_SLOT_TEMP_10 8\n# elif (BOOST_PP_VALUE) / 1000000000UL == 9\n#    define BOOST_PP_SLOT_TEMP_10 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 0\n#    define BOOST_PP_SLOT_TEMP_9 0\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 1\n#    define BOOST_PP_SLOT_TEMP_9 1\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 2\n#    define BOOST_PP_SLOT_TEMP_9 2\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 3\n#    define BOOST_PP_SLOT_TEMP_9 3\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 4\n#    define BOOST_PP_SLOT_TEMP_9 4\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 5\n#    define BOOST_PP_SLOT_TEMP_9 5\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 6\n#    define BOOST_PP_SLOT_TEMP_9 6\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 7\n#    define BOOST_PP_SLOT_TEMP_9 7\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 8\n#    define BOOST_PP_SLOT_TEMP_9 8\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 9\n#    define BOOST_PP_SLOT_TEMP_9 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 0\n#    define BOOST_PP_SLOT_TEMP_8 0\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 1\n#    define BOOST_PP_SLOT_TEMP_8 1\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 2\n#    define BOOST_PP_SLOT_TEMP_8 2\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 3\n#    define BOOST_PP_SLOT_TEMP_8 3\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 4\n#    define BOOST_PP_SLOT_TEMP_8 4\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 5\n#    define BOOST_PP_SLOT_TEMP_8 5\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 6\n#    define BOOST_PP_SLOT_TEMP_8 6\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 7\n#    define BOOST_PP_SLOT_TEMP_8 7\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 8\n#    define BOOST_PP_SLOT_TEMP_8 8\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 9\n#    define BOOST_PP_SLOT_TEMP_8 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 0\n#    define BOOST_PP_SLOT_TEMP_7 0\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 1\n#    define BOOST_PP_SLOT_TEMP_7 1\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 2\n#    define BOOST_PP_SLOT_TEMP_7 2\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 3\n#    define BOOST_PP_SLOT_TEMP_7 3\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 4\n#    define BOOST_PP_SLOT_TEMP_7 4\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 5\n#    define BOOST_PP_SLOT_TEMP_7 5\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 6\n#    define BOOST_PP_SLOT_TEMP_7 6\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 7\n#    define BOOST_PP_SLOT_TEMP_7 7\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 8\n#    define BOOST_PP_SLOT_TEMP_7 8\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 9\n#    define BOOST_PP_SLOT_TEMP_7 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 0\n#    define BOOST_PP_SLOT_TEMP_6 0\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 1\n#    define BOOST_PP_SLOT_TEMP_6 1\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 2\n#    define BOOST_PP_SLOT_TEMP_6 2\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 3\n#    define BOOST_PP_SLOT_TEMP_6 3\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 4\n#    define BOOST_PP_SLOT_TEMP_6 4\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 5\n#    define BOOST_PP_SLOT_TEMP_6 5\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 6\n#    define BOOST_PP_SLOT_TEMP_6 6\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 7\n#    define BOOST_PP_SLOT_TEMP_6 7\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 8\n#    define BOOST_PP_SLOT_TEMP_6 8\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 9\n#    define BOOST_PP_SLOT_TEMP_6 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 0\n#    define BOOST_PP_SLOT_TEMP_5 0\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 1\n#    define BOOST_PP_SLOT_TEMP_5 1\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 2\n#    define BOOST_PP_SLOT_TEMP_5 2\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 3\n#    define BOOST_PP_SLOT_TEMP_5 3\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 4\n#    define BOOST_PP_SLOT_TEMP_5 4\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 5\n#    define BOOST_PP_SLOT_TEMP_5 5\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 6\n#    define BOOST_PP_SLOT_TEMP_5 6\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 7\n#    define BOOST_PP_SLOT_TEMP_5 7\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 8\n#    define BOOST_PP_SLOT_TEMP_5 8\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 9\n#    define BOOST_PP_SLOT_TEMP_5 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 0\n#    define BOOST_PP_SLOT_TEMP_4 0\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 1\n#    define BOOST_PP_SLOT_TEMP_4 1\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 2\n#    define BOOST_PP_SLOT_TEMP_4 2\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 3\n#    define BOOST_PP_SLOT_TEMP_4 3\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 4\n#    define BOOST_PP_SLOT_TEMP_4 4\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 5\n#    define BOOST_PP_SLOT_TEMP_4 5\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 6\n#    define BOOST_PP_SLOT_TEMP_4 6\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 7\n#    define BOOST_PP_SLOT_TEMP_4 7\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 8\n#    define BOOST_PP_SLOT_TEMP_4 8\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 9\n#    define BOOST_PP_SLOT_TEMP_4 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 0\n#    define BOOST_PP_SLOT_TEMP_3 0\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 1\n#    define BOOST_PP_SLOT_TEMP_3 1\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 2\n#    define BOOST_PP_SLOT_TEMP_3 2\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 3\n#    define BOOST_PP_SLOT_TEMP_3 3\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 4\n#    define BOOST_PP_SLOT_TEMP_3 4\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 5\n#    define BOOST_PP_SLOT_TEMP_3 5\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 6\n#    define BOOST_PP_SLOT_TEMP_3 6\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 7\n#    define BOOST_PP_SLOT_TEMP_3 7\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 8\n#    define BOOST_PP_SLOT_TEMP_3 8\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 9\n#    define BOOST_PP_SLOT_TEMP_3 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 0\n#    define BOOST_PP_SLOT_TEMP_2 0\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 1\n#    define BOOST_PP_SLOT_TEMP_2 1\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 2\n#    define BOOST_PP_SLOT_TEMP_2 2\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 3\n#    define BOOST_PP_SLOT_TEMP_2 3\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 4\n#    define BOOST_PP_SLOT_TEMP_2 4\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 5\n#    define BOOST_PP_SLOT_TEMP_2 5\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 6\n#    define BOOST_PP_SLOT_TEMP_2 6\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 7\n#    define BOOST_PP_SLOT_TEMP_2 7\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 8\n#    define BOOST_PP_SLOT_TEMP_2 8\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 9\n#    define BOOST_PP_SLOT_TEMP_2 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 0\n#    define BOOST_PP_SLOT_TEMP_1 0\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 1\n#    define BOOST_PP_SLOT_TEMP_1 1\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 2\n#    define BOOST_PP_SLOT_TEMP_1 2\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 3\n#    define BOOST_PP_SLOT_TEMP_1 3\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 4\n#    define BOOST_PP_SLOT_TEMP_1 4\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 5\n#    define BOOST_PP_SLOT_TEMP_1 5\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 6\n#    define BOOST_PP_SLOT_TEMP_1 6\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 7\n#    define BOOST_PP_SLOT_TEMP_1 7\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 8\n#    define BOOST_PP_SLOT_TEMP_1 8\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 9\n#    define BOOST_PP_SLOT_TEMP_1 9\n# endif\n#\n# undef BOOST_PP_VALUE\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/detail/slot1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_SLOT_1\n#\n# undef BOOST_PP_SLOT_1_DIGIT_1\n# undef BOOST_PP_SLOT_1_DIGIT_2\n# undef BOOST_PP_SLOT_1_DIGIT_3\n# undef BOOST_PP_SLOT_1_DIGIT_4\n# undef BOOST_PP_SLOT_1_DIGIT_5\n# undef BOOST_PP_SLOT_1_DIGIT_6\n# undef BOOST_PP_SLOT_1_DIGIT_7\n# undef BOOST_PP_SLOT_1_DIGIT_8\n# undef BOOST_PP_SLOT_1_DIGIT_9\n# undef BOOST_PP_SLOT_1_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_10 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_10 0\n# elif BOOST_PP_SLOT_TEMP_10 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_10 1\n# elif BOOST_PP_SLOT_TEMP_10 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_10 2\n# elif BOOST_PP_SLOT_TEMP_10 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_10 3\n# elif BOOST_PP_SLOT_TEMP_10 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_10 4\n# elif BOOST_PP_SLOT_TEMP_10 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_10 5\n# elif BOOST_PP_SLOT_TEMP_10 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_10 6\n# elif BOOST_PP_SLOT_TEMP_10 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_10 7\n# elif BOOST_PP_SLOT_TEMP_10 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_10 8\n# elif BOOST_PP_SLOT_TEMP_10 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_10 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_9 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_9 0\n# elif BOOST_PP_SLOT_TEMP_9 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_9 1\n# elif BOOST_PP_SLOT_TEMP_9 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_9 2\n# elif BOOST_PP_SLOT_TEMP_9 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_9 3\n# elif BOOST_PP_SLOT_TEMP_9 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_9 4\n# elif BOOST_PP_SLOT_TEMP_9 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_9 5\n# elif BOOST_PP_SLOT_TEMP_9 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_9 6\n# elif BOOST_PP_SLOT_TEMP_9 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_9 7\n# elif BOOST_PP_SLOT_TEMP_9 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_9 8\n# elif BOOST_PP_SLOT_TEMP_9 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_9 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_8 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_8 0\n# elif BOOST_PP_SLOT_TEMP_8 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_8 1\n# elif BOOST_PP_SLOT_TEMP_8 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_8 2\n# elif BOOST_PP_SLOT_TEMP_8 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_8 3\n# elif BOOST_PP_SLOT_TEMP_8 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_8 4\n# elif BOOST_PP_SLOT_TEMP_8 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_8 5\n# elif BOOST_PP_SLOT_TEMP_8 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_8 6\n# elif BOOST_PP_SLOT_TEMP_8 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_8 7\n# elif BOOST_PP_SLOT_TEMP_8 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_8 8\n# elif BOOST_PP_SLOT_TEMP_8 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_8 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_7 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_7 0\n# elif BOOST_PP_SLOT_TEMP_7 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_7 1\n# elif BOOST_PP_SLOT_TEMP_7 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_7 2\n# elif BOOST_PP_SLOT_TEMP_7 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_7 3\n# elif BOOST_PP_SLOT_TEMP_7 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_7 4\n# elif BOOST_PP_SLOT_TEMP_7 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_7 5\n# elif BOOST_PP_SLOT_TEMP_7 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_7 6\n# elif BOOST_PP_SLOT_TEMP_7 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_7 7\n# elif BOOST_PP_SLOT_TEMP_7 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_7 8\n# elif BOOST_PP_SLOT_TEMP_7 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_7 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_6 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_6 0\n# elif BOOST_PP_SLOT_TEMP_6 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_6 1\n# elif BOOST_PP_SLOT_TEMP_6 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_6 2\n# elif BOOST_PP_SLOT_TEMP_6 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_6 3\n# elif BOOST_PP_SLOT_TEMP_6 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_6 4\n# elif BOOST_PP_SLOT_TEMP_6 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_6 5\n# elif BOOST_PP_SLOT_TEMP_6 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_6 6\n# elif BOOST_PP_SLOT_TEMP_6 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_6 7\n# elif BOOST_PP_SLOT_TEMP_6 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_6 8\n# elif BOOST_PP_SLOT_TEMP_6 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_6 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_5 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_5 0\n# elif BOOST_PP_SLOT_TEMP_5 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_5 1\n# elif BOOST_PP_SLOT_TEMP_5 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_5 2\n# elif BOOST_PP_SLOT_TEMP_5 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_5 3\n# elif BOOST_PP_SLOT_TEMP_5 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_5 4\n# elif BOOST_PP_SLOT_TEMP_5 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_5 5\n# elif BOOST_PP_SLOT_TEMP_5 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_5 6\n# elif BOOST_PP_SLOT_TEMP_5 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_5 7\n# elif BOOST_PP_SLOT_TEMP_5 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_5 8\n# elif BOOST_PP_SLOT_TEMP_5 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_5 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_4 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_4 0\n# elif BOOST_PP_SLOT_TEMP_4 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_4 1\n# elif BOOST_PP_SLOT_TEMP_4 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_4 2\n# elif BOOST_PP_SLOT_TEMP_4 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_4 3\n# elif BOOST_PP_SLOT_TEMP_4 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_4 4\n# elif BOOST_PP_SLOT_TEMP_4 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_4 5\n# elif BOOST_PP_SLOT_TEMP_4 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_4 6\n# elif BOOST_PP_SLOT_TEMP_4 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_4 7\n# elif BOOST_PP_SLOT_TEMP_4 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_4 8\n# elif BOOST_PP_SLOT_TEMP_4 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_4 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_SLOT_1_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_SLOT_1_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_SLOT_1_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_SLOT_1_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_SLOT_1_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_SLOT_1_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_SLOT_1_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_SLOT_1_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_SLOT_1_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_SLOT_1_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_SLOT_1_DIGIT_10\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_1_DIGIT_10, BOOST_PP_SLOT_1_DIGIT_9, BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)\n# elif BOOST_PP_SLOT_1_DIGIT_9\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_1_DIGIT_9, BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)\n# elif BOOST_PP_SLOT_1_DIGIT_8\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)\n# elif BOOST_PP_SLOT_1_DIGIT_7\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)\n# elif BOOST_PP_SLOT_1_DIGIT_6\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)\n# elif BOOST_PP_SLOT_1_DIGIT_5\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)\n# elif BOOST_PP_SLOT_1_DIGIT_4\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)\n# elif BOOST_PP_SLOT_1_DIGIT_3\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)\n# elif BOOST_PP_SLOT_1_DIGIT_2\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)\n# else\n#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_1_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/detail/slot2.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_SLOT_2\n#\n# undef BOOST_PP_SLOT_2_DIGIT_1\n# undef BOOST_PP_SLOT_2_DIGIT_2\n# undef BOOST_PP_SLOT_2_DIGIT_3\n# undef BOOST_PP_SLOT_2_DIGIT_4\n# undef BOOST_PP_SLOT_2_DIGIT_5\n# undef BOOST_PP_SLOT_2_DIGIT_6\n# undef BOOST_PP_SLOT_2_DIGIT_7\n# undef BOOST_PP_SLOT_2_DIGIT_8\n# undef BOOST_PP_SLOT_2_DIGIT_9\n# undef BOOST_PP_SLOT_2_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_10 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_10 0\n# elif BOOST_PP_SLOT_TEMP_10 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_10 1\n# elif BOOST_PP_SLOT_TEMP_10 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_10 2\n# elif BOOST_PP_SLOT_TEMP_10 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_10 3\n# elif BOOST_PP_SLOT_TEMP_10 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_10 4\n# elif BOOST_PP_SLOT_TEMP_10 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_10 5\n# elif BOOST_PP_SLOT_TEMP_10 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_10 6\n# elif BOOST_PP_SLOT_TEMP_10 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_10 7\n# elif BOOST_PP_SLOT_TEMP_10 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_10 8\n# elif BOOST_PP_SLOT_TEMP_10 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_10 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_9 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_9 0\n# elif BOOST_PP_SLOT_TEMP_9 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_9 1\n# elif BOOST_PP_SLOT_TEMP_9 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_9 2\n# elif BOOST_PP_SLOT_TEMP_9 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_9 3\n# elif BOOST_PP_SLOT_TEMP_9 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_9 4\n# elif BOOST_PP_SLOT_TEMP_9 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_9 5\n# elif BOOST_PP_SLOT_TEMP_9 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_9 6\n# elif BOOST_PP_SLOT_TEMP_9 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_9 7\n# elif BOOST_PP_SLOT_TEMP_9 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_9 8\n# elif BOOST_PP_SLOT_TEMP_9 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_9 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_8 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_8 0\n# elif BOOST_PP_SLOT_TEMP_8 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_8 1\n# elif BOOST_PP_SLOT_TEMP_8 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_8 2\n# elif BOOST_PP_SLOT_TEMP_8 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_8 3\n# elif BOOST_PP_SLOT_TEMP_8 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_8 4\n# elif BOOST_PP_SLOT_TEMP_8 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_8 5\n# elif BOOST_PP_SLOT_TEMP_8 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_8 6\n# elif BOOST_PP_SLOT_TEMP_8 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_8 7\n# elif BOOST_PP_SLOT_TEMP_8 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_8 8\n# elif BOOST_PP_SLOT_TEMP_8 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_8 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_7 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_7 0\n# elif BOOST_PP_SLOT_TEMP_7 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_7 1\n# elif BOOST_PP_SLOT_TEMP_7 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_7 2\n# elif BOOST_PP_SLOT_TEMP_7 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_7 3\n# elif BOOST_PP_SLOT_TEMP_7 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_7 4\n# elif BOOST_PP_SLOT_TEMP_7 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_7 5\n# elif BOOST_PP_SLOT_TEMP_7 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_7 6\n# elif BOOST_PP_SLOT_TEMP_7 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_7 7\n# elif BOOST_PP_SLOT_TEMP_7 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_7 8\n# elif BOOST_PP_SLOT_TEMP_7 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_7 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_6 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_6 0\n# elif BOOST_PP_SLOT_TEMP_6 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_6 1\n# elif BOOST_PP_SLOT_TEMP_6 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_6 2\n# elif BOOST_PP_SLOT_TEMP_6 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_6 3\n# elif BOOST_PP_SLOT_TEMP_6 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_6 4\n# elif BOOST_PP_SLOT_TEMP_6 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_6 5\n# elif BOOST_PP_SLOT_TEMP_6 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_6 6\n# elif BOOST_PP_SLOT_TEMP_6 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_6 7\n# elif BOOST_PP_SLOT_TEMP_6 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_6 8\n# elif BOOST_PP_SLOT_TEMP_6 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_6 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_5 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_5 0\n# elif BOOST_PP_SLOT_TEMP_5 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_5 1\n# elif BOOST_PP_SLOT_TEMP_5 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_5 2\n# elif BOOST_PP_SLOT_TEMP_5 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_5 3\n# elif BOOST_PP_SLOT_TEMP_5 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_5 4\n# elif BOOST_PP_SLOT_TEMP_5 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_5 5\n# elif BOOST_PP_SLOT_TEMP_5 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_5 6\n# elif BOOST_PP_SLOT_TEMP_5 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_5 7\n# elif BOOST_PP_SLOT_TEMP_5 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_5 8\n# elif BOOST_PP_SLOT_TEMP_5 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_5 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_4 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_4 0\n# elif BOOST_PP_SLOT_TEMP_4 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_4 1\n# elif BOOST_PP_SLOT_TEMP_4 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_4 2\n# elif BOOST_PP_SLOT_TEMP_4 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_4 3\n# elif BOOST_PP_SLOT_TEMP_4 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_4 4\n# elif BOOST_PP_SLOT_TEMP_4 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_4 5\n# elif BOOST_PP_SLOT_TEMP_4 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_4 6\n# elif BOOST_PP_SLOT_TEMP_4 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_4 7\n# elif BOOST_PP_SLOT_TEMP_4 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_4 8\n# elif BOOST_PP_SLOT_TEMP_4 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_4 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_SLOT_2_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_SLOT_2_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_SLOT_2_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_SLOT_2_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_SLOT_2_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_SLOT_2_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_SLOT_2_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_SLOT_2_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_SLOT_2_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_SLOT_2_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_SLOT_2_DIGIT_10\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_2_DIGIT_10, BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)\n# elif BOOST_PP_SLOT_2_DIGIT_9\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)\n# elif BOOST_PP_SLOT_2_DIGIT_8\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)\n# elif BOOST_PP_SLOT_2_DIGIT_7\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)\n# elif BOOST_PP_SLOT_2_DIGIT_6\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)\n# elif BOOST_PP_SLOT_2_DIGIT_5\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)\n# elif BOOST_PP_SLOT_2_DIGIT_4\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)\n# elif BOOST_PP_SLOT_2_DIGIT_3\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)\n# elif BOOST_PP_SLOT_2_DIGIT_2\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)\n# else\n#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_2_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/detail/slot3.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_SLOT_3\n#\n# undef BOOST_PP_SLOT_3_DIGIT_1\n# undef BOOST_PP_SLOT_3_DIGIT_2\n# undef BOOST_PP_SLOT_3_DIGIT_3\n# undef BOOST_PP_SLOT_3_DIGIT_4\n# undef BOOST_PP_SLOT_3_DIGIT_5\n# undef BOOST_PP_SLOT_3_DIGIT_6\n# undef BOOST_PP_SLOT_3_DIGIT_7\n# undef BOOST_PP_SLOT_3_DIGIT_8\n# undef BOOST_PP_SLOT_3_DIGIT_9\n# undef BOOST_PP_SLOT_3_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_10 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_10 0\n# elif BOOST_PP_SLOT_TEMP_10 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_10 1\n# elif BOOST_PP_SLOT_TEMP_10 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_10 2\n# elif BOOST_PP_SLOT_TEMP_10 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_10 3\n# elif BOOST_PP_SLOT_TEMP_10 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_10 4\n# elif BOOST_PP_SLOT_TEMP_10 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_10 5\n# elif BOOST_PP_SLOT_TEMP_10 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_10 6\n# elif BOOST_PP_SLOT_TEMP_10 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_10 7\n# elif BOOST_PP_SLOT_TEMP_10 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_10 8\n# elif BOOST_PP_SLOT_TEMP_10 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_10 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_9 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_9 0\n# elif BOOST_PP_SLOT_TEMP_9 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_9 1\n# elif BOOST_PP_SLOT_TEMP_9 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_9 2\n# elif BOOST_PP_SLOT_TEMP_9 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_9 3\n# elif BOOST_PP_SLOT_TEMP_9 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_9 4\n# elif BOOST_PP_SLOT_TEMP_9 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_9 5\n# elif BOOST_PP_SLOT_TEMP_9 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_9 6\n# elif BOOST_PP_SLOT_TEMP_9 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_9 7\n# elif BOOST_PP_SLOT_TEMP_9 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_9 8\n# elif BOOST_PP_SLOT_TEMP_9 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_9 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_8 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_8 0\n# elif BOOST_PP_SLOT_TEMP_8 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_8 1\n# elif BOOST_PP_SLOT_TEMP_8 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_8 2\n# elif BOOST_PP_SLOT_TEMP_8 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_8 3\n# elif BOOST_PP_SLOT_TEMP_8 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_8 4\n# elif BOOST_PP_SLOT_TEMP_8 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_8 5\n# elif BOOST_PP_SLOT_TEMP_8 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_8 6\n# elif BOOST_PP_SLOT_TEMP_8 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_8 7\n# elif BOOST_PP_SLOT_TEMP_8 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_8 8\n# elif BOOST_PP_SLOT_TEMP_8 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_8 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_7 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_7 0\n# elif BOOST_PP_SLOT_TEMP_7 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_7 1\n# elif BOOST_PP_SLOT_TEMP_7 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_7 2\n# elif BOOST_PP_SLOT_TEMP_7 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_7 3\n# elif BOOST_PP_SLOT_TEMP_7 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_7 4\n# elif BOOST_PP_SLOT_TEMP_7 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_7 5\n# elif BOOST_PP_SLOT_TEMP_7 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_7 6\n# elif BOOST_PP_SLOT_TEMP_7 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_7 7\n# elif BOOST_PP_SLOT_TEMP_7 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_7 8\n# elif BOOST_PP_SLOT_TEMP_7 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_7 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_6 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_6 0\n# elif BOOST_PP_SLOT_TEMP_6 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_6 1\n# elif BOOST_PP_SLOT_TEMP_6 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_6 2\n# elif BOOST_PP_SLOT_TEMP_6 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_6 3\n# elif BOOST_PP_SLOT_TEMP_6 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_6 4\n# elif BOOST_PP_SLOT_TEMP_6 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_6 5\n# elif BOOST_PP_SLOT_TEMP_6 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_6 6\n# elif BOOST_PP_SLOT_TEMP_6 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_6 7\n# elif BOOST_PP_SLOT_TEMP_6 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_6 8\n# elif BOOST_PP_SLOT_TEMP_6 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_6 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_5 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_5 0\n# elif BOOST_PP_SLOT_TEMP_5 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_5 1\n# elif BOOST_PP_SLOT_TEMP_5 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_5 2\n# elif BOOST_PP_SLOT_TEMP_5 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_5 3\n# elif BOOST_PP_SLOT_TEMP_5 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_5 4\n# elif BOOST_PP_SLOT_TEMP_5 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_5 5\n# elif BOOST_PP_SLOT_TEMP_5 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_5 6\n# elif BOOST_PP_SLOT_TEMP_5 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_5 7\n# elif BOOST_PP_SLOT_TEMP_5 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_5 8\n# elif BOOST_PP_SLOT_TEMP_5 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_5 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_4 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_4 0\n# elif BOOST_PP_SLOT_TEMP_4 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_4 1\n# elif BOOST_PP_SLOT_TEMP_4 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_4 2\n# elif BOOST_PP_SLOT_TEMP_4 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_4 3\n# elif BOOST_PP_SLOT_TEMP_4 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_4 4\n# elif BOOST_PP_SLOT_TEMP_4 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_4 5\n# elif BOOST_PP_SLOT_TEMP_4 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_4 6\n# elif BOOST_PP_SLOT_TEMP_4 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_4 7\n# elif BOOST_PP_SLOT_TEMP_4 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_4 8\n# elif BOOST_PP_SLOT_TEMP_4 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_4 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_SLOT_3_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_SLOT_3_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_SLOT_3_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_SLOT_3_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_SLOT_3_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_SLOT_3_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_SLOT_3_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_SLOT_3_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_SLOT_3_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_SLOT_3_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_SLOT_3_DIGIT_10\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_3_DIGIT_10, BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)\n# elif BOOST_PP_SLOT_3_DIGIT_9\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)\n# elif BOOST_PP_SLOT_3_DIGIT_8\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)\n# elif BOOST_PP_SLOT_3_DIGIT_7\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)\n# elif BOOST_PP_SLOT_3_DIGIT_6\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)\n# elif BOOST_PP_SLOT_3_DIGIT_5\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)\n# elif BOOST_PP_SLOT_3_DIGIT_4\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)\n# elif BOOST_PP_SLOT_3_DIGIT_3\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)\n# elif BOOST_PP_SLOT_3_DIGIT_2\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)\n# else\n#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_3_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/detail/slot4.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_SLOT_4\n#\n# undef BOOST_PP_SLOT_4_DIGIT_1\n# undef BOOST_PP_SLOT_4_DIGIT_2\n# undef BOOST_PP_SLOT_4_DIGIT_3\n# undef BOOST_PP_SLOT_4_DIGIT_4\n# undef BOOST_PP_SLOT_4_DIGIT_5\n# undef BOOST_PP_SLOT_4_DIGIT_6\n# undef BOOST_PP_SLOT_4_DIGIT_7\n# undef BOOST_PP_SLOT_4_DIGIT_8\n# undef BOOST_PP_SLOT_4_DIGIT_9\n# undef BOOST_PP_SLOT_4_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_10 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_10 0\n# elif BOOST_PP_SLOT_TEMP_10 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_10 1\n# elif BOOST_PP_SLOT_TEMP_10 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_10 2\n# elif BOOST_PP_SLOT_TEMP_10 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_10 3\n# elif BOOST_PP_SLOT_TEMP_10 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_10 4\n# elif BOOST_PP_SLOT_TEMP_10 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_10 5\n# elif BOOST_PP_SLOT_TEMP_10 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_10 6\n# elif BOOST_PP_SLOT_TEMP_10 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_10 7\n# elif BOOST_PP_SLOT_TEMP_10 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_10 8\n# elif BOOST_PP_SLOT_TEMP_10 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_10 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_9 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_9 0\n# elif BOOST_PP_SLOT_TEMP_9 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_9 1\n# elif BOOST_PP_SLOT_TEMP_9 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_9 2\n# elif BOOST_PP_SLOT_TEMP_9 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_9 3\n# elif BOOST_PP_SLOT_TEMP_9 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_9 4\n# elif BOOST_PP_SLOT_TEMP_9 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_9 5\n# elif BOOST_PP_SLOT_TEMP_9 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_9 6\n# elif BOOST_PP_SLOT_TEMP_9 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_9 7\n# elif BOOST_PP_SLOT_TEMP_9 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_9 8\n# elif BOOST_PP_SLOT_TEMP_9 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_9 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_8 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_8 0\n# elif BOOST_PP_SLOT_TEMP_8 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_8 1\n# elif BOOST_PP_SLOT_TEMP_8 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_8 2\n# elif BOOST_PP_SLOT_TEMP_8 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_8 3\n# elif BOOST_PP_SLOT_TEMP_8 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_8 4\n# elif BOOST_PP_SLOT_TEMP_8 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_8 5\n# elif BOOST_PP_SLOT_TEMP_8 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_8 6\n# elif BOOST_PP_SLOT_TEMP_8 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_8 7\n# elif BOOST_PP_SLOT_TEMP_8 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_8 8\n# elif BOOST_PP_SLOT_TEMP_8 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_8 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_7 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_7 0\n# elif BOOST_PP_SLOT_TEMP_7 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_7 1\n# elif BOOST_PP_SLOT_TEMP_7 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_7 2\n# elif BOOST_PP_SLOT_TEMP_7 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_7 3\n# elif BOOST_PP_SLOT_TEMP_7 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_7 4\n# elif BOOST_PP_SLOT_TEMP_7 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_7 5\n# elif BOOST_PP_SLOT_TEMP_7 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_7 6\n# elif BOOST_PP_SLOT_TEMP_7 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_7 7\n# elif BOOST_PP_SLOT_TEMP_7 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_7 8\n# elif BOOST_PP_SLOT_TEMP_7 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_7 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_6 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_6 0\n# elif BOOST_PP_SLOT_TEMP_6 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_6 1\n# elif BOOST_PP_SLOT_TEMP_6 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_6 2\n# elif BOOST_PP_SLOT_TEMP_6 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_6 3\n# elif BOOST_PP_SLOT_TEMP_6 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_6 4\n# elif BOOST_PP_SLOT_TEMP_6 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_6 5\n# elif BOOST_PP_SLOT_TEMP_6 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_6 6\n# elif BOOST_PP_SLOT_TEMP_6 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_6 7\n# elif BOOST_PP_SLOT_TEMP_6 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_6 8\n# elif BOOST_PP_SLOT_TEMP_6 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_6 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_5 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_5 0\n# elif BOOST_PP_SLOT_TEMP_5 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_5 1\n# elif BOOST_PP_SLOT_TEMP_5 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_5 2\n# elif BOOST_PP_SLOT_TEMP_5 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_5 3\n# elif BOOST_PP_SLOT_TEMP_5 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_5 4\n# elif BOOST_PP_SLOT_TEMP_5 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_5 5\n# elif BOOST_PP_SLOT_TEMP_5 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_5 6\n# elif BOOST_PP_SLOT_TEMP_5 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_5 7\n# elif BOOST_PP_SLOT_TEMP_5 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_5 8\n# elif BOOST_PP_SLOT_TEMP_5 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_5 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_4 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_4 0\n# elif BOOST_PP_SLOT_TEMP_4 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_4 1\n# elif BOOST_PP_SLOT_TEMP_4 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_4 2\n# elif BOOST_PP_SLOT_TEMP_4 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_4 3\n# elif BOOST_PP_SLOT_TEMP_4 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_4 4\n# elif BOOST_PP_SLOT_TEMP_4 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_4 5\n# elif BOOST_PP_SLOT_TEMP_4 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_4 6\n# elif BOOST_PP_SLOT_TEMP_4 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_4 7\n# elif BOOST_PP_SLOT_TEMP_4 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_4 8\n# elif BOOST_PP_SLOT_TEMP_4 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_4 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_SLOT_4_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_SLOT_4_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_SLOT_4_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_SLOT_4_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_SLOT_4_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_SLOT_4_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_SLOT_4_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_SLOT_4_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_SLOT_4_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_SLOT_4_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_SLOT_4_DIGIT_10\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_4_DIGIT_10, BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)\n# elif BOOST_PP_SLOT_4_DIGIT_9\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)\n# elif BOOST_PP_SLOT_4_DIGIT_8\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)\n# elif BOOST_PP_SLOT_4_DIGIT_7\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)\n# elif BOOST_PP_SLOT_4_DIGIT_6\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)\n# elif BOOST_PP_SLOT_4_DIGIT_5\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)\n# elif BOOST_PP_SLOT_4_DIGIT_4\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)\n# elif BOOST_PP_SLOT_4_DIGIT_3\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)\n# elif BOOST_PP_SLOT_4_DIGIT_2\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)\n# else\n#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_4_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/detail/slot5.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_SLOT_5\n#\n# undef BOOST_PP_SLOT_5_DIGIT_1\n# undef BOOST_PP_SLOT_5_DIGIT_2\n# undef BOOST_PP_SLOT_5_DIGIT_3\n# undef BOOST_PP_SLOT_5_DIGIT_4\n# undef BOOST_PP_SLOT_5_DIGIT_5\n# undef BOOST_PP_SLOT_5_DIGIT_6\n# undef BOOST_PP_SLOT_5_DIGIT_7\n# undef BOOST_PP_SLOT_5_DIGIT_8\n# undef BOOST_PP_SLOT_5_DIGIT_9\n# undef BOOST_PP_SLOT_5_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_10 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_10 0\n# elif BOOST_PP_SLOT_TEMP_10 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_10 1\n# elif BOOST_PP_SLOT_TEMP_10 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_10 2\n# elif BOOST_PP_SLOT_TEMP_10 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_10 3\n# elif BOOST_PP_SLOT_TEMP_10 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_10 4\n# elif BOOST_PP_SLOT_TEMP_10 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_10 5\n# elif BOOST_PP_SLOT_TEMP_10 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_10 6\n# elif BOOST_PP_SLOT_TEMP_10 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_10 7\n# elif BOOST_PP_SLOT_TEMP_10 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_10 8\n# elif BOOST_PP_SLOT_TEMP_10 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_10 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_9 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_9 0\n# elif BOOST_PP_SLOT_TEMP_9 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_9 1\n# elif BOOST_PP_SLOT_TEMP_9 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_9 2\n# elif BOOST_PP_SLOT_TEMP_9 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_9 3\n# elif BOOST_PP_SLOT_TEMP_9 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_9 4\n# elif BOOST_PP_SLOT_TEMP_9 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_9 5\n# elif BOOST_PP_SLOT_TEMP_9 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_9 6\n# elif BOOST_PP_SLOT_TEMP_9 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_9 7\n# elif BOOST_PP_SLOT_TEMP_9 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_9 8\n# elif BOOST_PP_SLOT_TEMP_9 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_9 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_8 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_8 0\n# elif BOOST_PP_SLOT_TEMP_8 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_8 1\n# elif BOOST_PP_SLOT_TEMP_8 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_8 2\n# elif BOOST_PP_SLOT_TEMP_8 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_8 3\n# elif BOOST_PP_SLOT_TEMP_8 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_8 4\n# elif BOOST_PP_SLOT_TEMP_8 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_8 5\n# elif BOOST_PP_SLOT_TEMP_8 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_8 6\n# elif BOOST_PP_SLOT_TEMP_8 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_8 7\n# elif BOOST_PP_SLOT_TEMP_8 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_8 8\n# elif BOOST_PP_SLOT_TEMP_8 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_8 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_7 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_7 0\n# elif BOOST_PP_SLOT_TEMP_7 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_7 1\n# elif BOOST_PP_SLOT_TEMP_7 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_7 2\n# elif BOOST_PP_SLOT_TEMP_7 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_7 3\n# elif BOOST_PP_SLOT_TEMP_7 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_7 4\n# elif BOOST_PP_SLOT_TEMP_7 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_7 5\n# elif BOOST_PP_SLOT_TEMP_7 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_7 6\n# elif BOOST_PP_SLOT_TEMP_7 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_7 7\n# elif BOOST_PP_SLOT_TEMP_7 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_7 8\n# elif BOOST_PP_SLOT_TEMP_7 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_7 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_6 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_6 0\n# elif BOOST_PP_SLOT_TEMP_6 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_6 1\n# elif BOOST_PP_SLOT_TEMP_6 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_6 2\n# elif BOOST_PP_SLOT_TEMP_6 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_6 3\n# elif BOOST_PP_SLOT_TEMP_6 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_6 4\n# elif BOOST_PP_SLOT_TEMP_6 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_6 5\n# elif BOOST_PP_SLOT_TEMP_6 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_6 6\n# elif BOOST_PP_SLOT_TEMP_6 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_6 7\n# elif BOOST_PP_SLOT_TEMP_6 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_6 8\n# elif BOOST_PP_SLOT_TEMP_6 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_6 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_5 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_5 0\n# elif BOOST_PP_SLOT_TEMP_5 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_5 1\n# elif BOOST_PP_SLOT_TEMP_5 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_5 2\n# elif BOOST_PP_SLOT_TEMP_5 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_5 3\n# elif BOOST_PP_SLOT_TEMP_5 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_5 4\n# elif BOOST_PP_SLOT_TEMP_5 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_5 5\n# elif BOOST_PP_SLOT_TEMP_5 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_5 6\n# elif BOOST_PP_SLOT_TEMP_5 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_5 7\n# elif BOOST_PP_SLOT_TEMP_5 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_5 8\n# elif BOOST_PP_SLOT_TEMP_5 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_5 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_4 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_4 0\n# elif BOOST_PP_SLOT_TEMP_4 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_4 1\n# elif BOOST_PP_SLOT_TEMP_4 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_4 2\n# elif BOOST_PP_SLOT_TEMP_4 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_4 3\n# elif BOOST_PP_SLOT_TEMP_4 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_4 4\n# elif BOOST_PP_SLOT_TEMP_4 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_4 5\n# elif BOOST_PP_SLOT_TEMP_4 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_4 6\n# elif BOOST_PP_SLOT_TEMP_4 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_4 7\n# elif BOOST_PP_SLOT_TEMP_4 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_4 8\n# elif BOOST_PP_SLOT_TEMP_4 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_4 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_SLOT_5_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_SLOT_5_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_SLOT_5_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_SLOT_5_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_SLOT_5_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_SLOT_5_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_SLOT_5_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_SLOT_5_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_SLOT_5_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_SLOT_5_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_SLOT_5_DIGIT_10\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_5_DIGIT_10, BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)\n# elif BOOST_PP_SLOT_5_DIGIT_9\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)\n# elif BOOST_PP_SLOT_5_DIGIT_8\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)\n# elif BOOST_PP_SLOT_5_DIGIT_7\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)\n# elif BOOST_PP_SLOT_5_DIGIT_6\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)\n# elif BOOST_PP_SLOT_5_DIGIT_5\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)\n# elif BOOST_PP_SLOT_5_DIGIT_4\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)\n# elif BOOST_PP_SLOT_5_DIGIT_3\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)\n# elif BOOST_PP_SLOT_5_DIGIT_2\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)\n# else\n#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_5_DIGIT_1\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot/slot.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SLOT_SLOT_HPP\n# define BOOST_PREPROCESSOR_SLOT_SLOT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/slot/detail/def.hpp>\n#\n# /* BOOST_PP_ASSIGN_SLOT */\n#\n# define BOOST_PP_ASSIGN_SLOT(i) BOOST_PP_CAT(BOOST_PP_ASSIGN_SLOT_, i)\n#\n# define BOOST_PP_ASSIGN_SLOT_1 <boost/preprocessor/slot/detail/slot1.hpp>\n# define BOOST_PP_ASSIGN_SLOT_2 <boost/preprocessor/slot/detail/slot2.hpp>\n# define BOOST_PP_ASSIGN_SLOT_3 <boost/preprocessor/slot/detail/slot3.hpp>\n# define BOOST_PP_ASSIGN_SLOT_4 <boost/preprocessor/slot/detail/slot4.hpp>\n# define BOOST_PP_ASSIGN_SLOT_5 <boost/preprocessor/slot/detail/slot5.hpp>\n#\n# /* BOOST_PP_SLOT */\n#\n# define BOOST_PP_SLOT(i) BOOST_PP_CAT(BOOST_PP_SLOT_, i)()\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/slot.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SLOT_HPP\n# define BOOST_PREPROCESSOR_SLOT_HPP\n#\n# include <boost/preprocessor/slot/slot.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/stringize.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_STRINGIZE_HPP\n# define BOOST_PREPROCESSOR_STRINGIZE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_STRINGIZE */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_A((text))\n#    define BOOST_PP_STRINGIZE_A(arg) BOOST_PP_STRINGIZE_I arg\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_OO((text))\n#    define BOOST_PP_STRINGIZE_OO(par) BOOST_PP_STRINGIZE_I ## par\n# else\n#    define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_I(text)\n# endif\n#\n# define BOOST_PP_STRINGIZE_I(text) #text\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/detail/is_single_return.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2014.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP\n# define BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_TUPLE_IS_SINGLE_RETURN */\n#\n# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/facilities/is_1.hpp>\n# include <boost/preprocessor/tuple/size.hpp>\n# define BOOST_PP_TUPLE_IS_SINGLE_RETURN(sr,nsr,tuple)\t\\\n\tBOOST_PP_IIF(BOOST_PP_IS_1(BOOST_PP_TUPLE_SIZE(tuple)),sr,nsr) \\\n\t/**/\n# endif /* BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC */\n#\n# endif /* BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/eat.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002-2011) */\n# /* Revised by Edward Diener (2011,2015) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_EAT_HPP\n# define BOOST_PREPROCESSOR_TUPLE_EAT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_EAT */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_EAT(...)\n# else\n#    define BOOST_PP_EAT(x)\n# endif\n#\n# /* BOOST_PP_TUPLE_EAT */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_TUPLE_EAT(size) BOOST_PP_EAT\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_I(size)\n#    else\n#        define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_OO((size))\n#        define BOOST_PP_TUPLE_EAT_OO(par) BOOST_PP_TUPLE_EAT_I ## par\n#    endif\n#    define BOOST_PP_TUPLE_EAT_I(size) BOOST_PP_TUPLE_EAT_ ## size\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#     define BOOST_PP_TUPLE_EAT_N(size) BOOST_PP_TUPLE_EAT_N_I(size)\n# else\n#     define BOOST_PP_TUPLE_EAT_N(size) BOOST_PP_TUPLE_EAT_N_OO((size))\n#     define BOOST_PP_TUPLE_EAT_N_OO(par) BOOST_PP_TUPLE_EAT_N_I ## par\n# endif\n# define BOOST_PP_TUPLE_EAT_N_I(size) BOOST_PP_TUPLE_EAT_ ## size\n#\n# define BOOST_PP_TUPLE_EAT_1(e0)\n# define BOOST_PP_TUPLE_EAT_2(e0, e1)\n# define BOOST_PP_TUPLE_EAT_3(e0, e1, e2)\n# define BOOST_PP_TUPLE_EAT_4(e0, e1, e2, e3)\n# define BOOST_PP_TUPLE_EAT_5(e0, e1, e2, e3, e4)\n# define BOOST_PP_TUPLE_EAT_6(e0, e1, e2, e3, e4, e5)\n# define BOOST_PP_TUPLE_EAT_7(e0, e1, e2, e3, e4, e5, e6)\n# define BOOST_PP_TUPLE_EAT_8(e0, e1, e2, e3, e4, e5, e6, e7)\n# define BOOST_PP_TUPLE_EAT_9(e0, e1, e2, e3, e4, e5, e6, e7, e8)\n# define BOOST_PP_TUPLE_EAT_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9)\n# define BOOST_PP_TUPLE_EAT_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10)\n# define BOOST_PP_TUPLE_EAT_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11)\n# define BOOST_PP_TUPLE_EAT_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12)\n# define BOOST_PP_TUPLE_EAT_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13)\n# define BOOST_PP_TUPLE_EAT_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14)\n# define BOOST_PP_TUPLE_EAT_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15)\n# define BOOST_PP_TUPLE_EAT_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16)\n# define BOOST_PP_TUPLE_EAT_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17)\n# define BOOST_PP_TUPLE_EAT_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18)\n# define BOOST_PP_TUPLE_EAT_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19)\n# define BOOST_PP_TUPLE_EAT_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20)\n# define BOOST_PP_TUPLE_EAT_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21)\n# define BOOST_PP_TUPLE_EAT_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22)\n# define BOOST_PP_TUPLE_EAT_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23)\n# define BOOST_PP_TUPLE_EAT_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24)\n# define BOOST_PP_TUPLE_EAT_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25)\n# define BOOST_PP_TUPLE_EAT_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26)\n# define BOOST_PP_TUPLE_EAT_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27)\n# define BOOST_PP_TUPLE_EAT_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28)\n# define BOOST_PP_TUPLE_EAT_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29)\n# define BOOST_PP_TUPLE_EAT_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30)\n# define BOOST_PP_TUPLE_EAT_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31)\n# define BOOST_PP_TUPLE_EAT_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32)\n# define BOOST_PP_TUPLE_EAT_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33)\n# define BOOST_PP_TUPLE_EAT_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34)\n# define BOOST_PP_TUPLE_EAT_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35)\n# define BOOST_PP_TUPLE_EAT_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36)\n# define BOOST_PP_TUPLE_EAT_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37)\n# define BOOST_PP_TUPLE_EAT_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38)\n# define BOOST_PP_TUPLE_EAT_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39)\n# define BOOST_PP_TUPLE_EAT_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40)\n# define BOOST_PP_TUPLE_EAT_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41)\n# define BOOST_PP_TUPLE_EAT_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42)\n# define BOOST_PP_TUPLE_EAT_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43)\n# define BOOST_PP_TUPLE_EAT_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44)\n# define BOOST_PP_TUPLE_EAT_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45)\n# define BOOST_PP_TUPLE_EAT_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46)\n# define BOOST_PP_TUPLE_EAT_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47)\n# define BOOST_PP_TUPLE_EAT_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48)\n# define BOOST_PP_TUPLE_EAT_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49)\n# define BOOST_PP_TUPLE_EAT_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50)\n# define BOOST_PP_TUPLE_EAT_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51)\n# define BOOST_PP_TUPLE_EAT_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52)\n# define BOOST_PP_TUPLE_EAT_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53)\n# define BOOST_PP_TUPLE_EAT_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54)\n# define BOOST_PP_TUPLE_EAT_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55)\n# define BOOST_PP_TUPLE_EAT_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56)\n# define BOOST_PP_TUPLE_EAT_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57)\n# define BOOST_PP_TUPLE_EAT_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58)\n# define BOOST_PP_TUPLE_EAT_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59)\n# define BOOST_PP_TUPLE_EAT_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60)\n# define BOOST_PP_TUPLE_EAT_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61)\n# define BOOST_PP_TUPLE_EAT_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62)\n# define BOOST_PP_TUPLE_EAT_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/elem.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002-2011) */\n# /* Revised by Edward Diener (2011,2014) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_ELEM_HPP\n# define BOOST_PREPROCESSOR_TUPLE_ELEM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/expand.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n# include <boost/preprocessor/variadic/elem.hpp>\n# include <boost/preprocessor/tuple/detail/is_single_return.hpp>\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__), (__VA_ARGS__))\n#        define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args)\n#        define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,)\n/*\n  Use BOOST_PP_REM_CAT if it is a single element tuple ( which might be empty )\n  else use BOOST_PP_REM. This fixes a VC++ problem with an empty tuple and BOOST_PP_TUPLE_ELEM\n  functionality. See tuple_elem_bug_test.cxx.\n*/\n#    \t define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) \\\n\t\t\tBOOST_PP_VARIADIC_ELEM(n, BOOST_PP_EXPAND(BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple)) \\\n\t\t\t/**/\n#    else\n#        define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__)(__VA_ARGS__)\n#    \t define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_REM tuple)\n#    endif\n#    define BOOST_PP_TUPLE_ELEM_O_3(size, n, tuple) BOOST_PP_TUPLE_ELEM_O_2(n, tuple)\n# else\n#    if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#        define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_, n), BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_E_, size), tuple))\n#        define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args)\n#        define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,)\n#    elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I_OO((size, n, tuple))\n#        define BOOST_PP_TUPLE_ELEM_I_OO(par) BOOST_PP_TUPLE_ELEM_I ## par\n#        define BOOST_PP_TUPLE_ELEM_I(size, n, tuple) BOOST_PP_TUPLE_ELEM_II((n, BOOST_PP_TUPLE_ELEM_E_ ## size ## tuple))\n#        define BOOST_PP_TUPLE_ELEM_II(par) BOOST_PP_TUPLE_ELEM_III_OO(par)\n#        define BOOST_PP_TUPLE_ELEM_III_OO(par) BOOST_PP_TUPLE_ELEM_III ## par\n#        define BOOST_PP_TUPLE_ELEM_III(n, etuple) BOOST_PP_TUPLE_ELEM_ ## n ## etuple\n#    else\n#        define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_, n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_E_, size) tuple)\n#        define BOOST_PP_TUPLE_ELEM_I(x) x\n#    endif\n#    define BOOST_PP_TUPLE_ELEM_E_1(e0) (e0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_2(e0, e1) (e0, e1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_3(e0, e1, e2) (e0, e1, e2, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_4(e0, e1, e2, e3) (e0, e1, e2, e3, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_5(e0, e1, e2, e3, e4) (e0, e1, e2, e3, e4, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_6(e0, e1, e2, e3, e4, e5) (e0, e1, e2, e3, e4, e5, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_7(e0, e1, e2, e3, e4, e5, e6) (e0, e1, e2, e3, e4, e5, e6, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_8(e0, e1, e2, e3, e4, e5, e6, e7) (e0, e1, e2, e3, e4, e5, e6, e7, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0, e1, e2, e3, e4, e5, e6, e7, e8, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_64\n#    define BOOST_PP_TUPLE_ELEM_0(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e0\n#    define BOOST_PP_TUPLE_ELEM_1(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e1\n#    define BOOST_PP_TUPLE_ELEM_2(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e2\n#    define BOOST_PP_TUPLE_ELEM_3(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e3\n#    define BOOST_PP_TUPLE_ELEM_4(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e4\n#    define BOOST_PP_TUPLE_ELEM_5(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e5\n#    define BOOST_PP_TUPLE_ELEM_6(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e6\n#    define BOOST_PP_TUPLE_ELEM_7(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e7\n#    define BOOST_PP_TUPLE_ELEM_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e8\n#    define BOOST_PP_TUPLE_ELEM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e9\n#    define BOOST_PP_TUPLE_ELEM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e10\n#    define BOOST_PP_TUPLE_ELEM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e11\n#    define BOOST_PP_TUPLE_ELEM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e12\n#    define BOOST_PP_TUPLE_ELEM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e13\n#    define BOOST_PP_TUPLE_ELEM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e14\n#    define BOOST_PP_TUPLE_ELEM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e15\n#    define BOOST_PP_TUPLE_ELEM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e16\n#    define BOOST_PP_TUPLE_ELEM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e17\n#    define BOOST_PP_TUPLE_ELEM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e18\n#    define BOOST_PP_TUPLE_ELEM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e19\n#    define BOOST_PP_TUPLE_ELEM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e20\n#    define BOOST_PP_TUPLE_ELEM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e21\n#    define BOOST_PP_TUPLE_ELEM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e22\n#    define BOOST_PP_TUPLE_ELEM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e23\n#    define BOOST_PP_TUPLE_ELEM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e24\n#    define BOOST_PP_TUPLE_ELEM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e25\n#    define BOOST_PP_TUPLE_ELEM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e26\n#    define BOOST_PP_TUPLE_ELEM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e27\n#    define BOOST_PP_TUPLE_ELEM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e28\n#    define BOOST_PP_TUPLE_ELEM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e29\n#    define BOOST_PP_TUPLE_ELEM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e30\n#    define BOOST_PP_TUPLE_ELEM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e31\n#    define BOOST_PP_TUPLE_ELEM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e32\n#    define BOOST_PP_TUPLE_ELEM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e33\n#    define BOOST_PP_TUPLE_ELEM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e34\n#    define BOOST_PP_TUPLE_ELEM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e35\n#    define BOOST_PP_TUPLE_ELEM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e36\n#    define BOOST_PP_TUPLE_ELEM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e37\n#    define BOOST_PP_TUPLE_ELEM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e38\n#    define BOOST_PP_TUPLE_ELEM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e39\n#    define BOOST_PP_TUPLE_ELEM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e40\n#    define BOOST_PP_TUPLE_ELEM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e41\n#    define BOOST_PP_TUPLE_ELEM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e42\n#    define BOOST_PP_TUPLE_ELEM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e43\n#    define BOOST_PP_TUPLE_ELEM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e44\n#    define BOOST_PP_TUPLE_ELEM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e45\n#    define BOOST_PP_TUPLE_ELEM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e46\n#    define BOOST_PP_TUPLE_ELEM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e47\n#    define BOOST_PP_TUPLE_ELEM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e48\n#    define BOOST_PP_TUPLE_ELEM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e49\n#    define BOOST_PP_TUPLE_ELEM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e50\n#    define BOOST_PP_TUPLE_ELEM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e51\n#    define BOOST_PP_TUPLE_ELEM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e52\n#    define BOOST_PP_TUPLE_ELEM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e53\n#    define BOOST_PP_TUPLE_ELEM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e54\n#    define BOOST_PP_TUPLE_ELEM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e55\n#    define BOOST_PP_TUPLE_ELEM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e56\n#    define BOOST_PP_TUPLE_ELEM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e57\n#    define BOOST_PP_TUPLE_ELEM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e58\n#    define BOOST_PP_TUPLE_ELEM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e59\n#    define BOOST_PP_TUPLE_ELEM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e60\n#    define BOOST_PP_TUPLE_ELEM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e61\n#    define BOOST_PP_TUPLE_ELEM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e62\n#    define BOOST_PP_TUPLE_ELEM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e63\n# endif\n#\n# /* directly used elsewhere in Boost... */\n#\n# define BOOST_PP_TUPLE_ELEM_1_0(a) a\n#\n# define BOOST_PP_TUPLE_ELEM_2_0(a, b) a\n# define BOOST_PP_TUPLE_ELEM_2_1(a, b) b\n#\n# define BOOST_PP_TUPLE_ELEM_3_0(a, b, c) a\n# define BOOST_PP_TUPLE_ELEM_3_1(a, b, c) b\n# define BOOST_PP_TUPLE_ELEM_3_2(a, b, c) c\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/enum.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_ENUM_HPP\n# define BOOST_PREPROCESSOR_TUPLE_ENUM_HPP\n#\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_TUPLE_ENUM */\n#\n# define BOOST_PP_TUPLE_ENUM BOOST_PP_TUPLE_REM_CTOR\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/insert.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2013.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_INSERT_HPP\n# define BOOST_PREPROCESSOR_TUPLE_INSERT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_VARIADICS\n#\n# include <boost/preprocessor/array/insert.hpp>\n# include <boost/preprocessor/array/to_tuple.hpp>\n# include <boost/preprocessor/tuple/to_array.hpp>\n#\n# /* BOOST_PP_TUPLE_INSERT */\n#\n# define BOOST_PP_TUPLE_INSERT(tuple, i, elem) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \\\n/**/\n#\n# /* BOOST_PP_TUPLE_INSERT_D */\n#\n# define BOOST_PP_TUPLE_INSERT_D(d, tuple, i, elem) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \\\n/**/\n#\n# endif // BOOST_PP_VARIADICS\n#\n# endif // BOOST_PREPROCESSOR_TUPLE_INSERT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/pop_back.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2013.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_POP_BACK_HPP\n# define BOOST_PREPROCESSOR_TUPLE_POP_BACK_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_VARIADICS\n#\n# include <boost/preprocessor/array/pop_back.hpp>\n# include <boost/preprocessor/array/to_tuple.hpp>\n# include <boost/preprocessor/comparison/greater.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/tuple/size.hpp>\n# include <boost/preprocessor/tuple/to_array.hpp>\n#\n# /* BOOST_PP_TUPLE_POP_BACK */\n#\n# define BOOST_PP_TUPLE_POP_BACK(tuple) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \\\n\t\tBOOST_PP_TUPLE_POP_BACK_EXEC, \\\n\t\tBOOST_PP_TUPLE_POP_BACK_RETURN \\\n\t\t) \\\n\t(tuple) \\\n/**/\n#\n# define BOOST_PP_TUPLE_POP_BACK_EXEC(tuple) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \\\n/**/\n#\n# define BOOST_PP_TUPLE_POP_BACK_RETURN(tuple) tuple\n#\n# /* BOOST_PP_TUPLE_POP_BACK_Z */\n#\n# define BOOST_PP_TUPLE_POP_BACK_Z(z, tuple) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \\\n\t\tBOOST_PP_TUPLE_POP_BACK_Z_EXEC, \\\n\t\tBOOST_PP_TUPLE_POP_BACK_Z_RETURN \\\n\t\t) \\\n\t(z, tuple) \\\n/**/\n#\n# define BOOST_PP_TUPLE_POP_BACK_Z_EXEC(z, tuple) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \\\n/**/\n#\n# define BOOST_PP_TUPLE_POP_BACK_Z_RETURN(z, tuple) tuple\n#\n# endif // BOOST_PP_VARIADICS\n#\n# endif // BOOST_PREPROCESSOR_TUPLE_POP_BACK_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/pop_front.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2013.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_POP_FRONT_HPP\n# define BOOST_PREPROCESSOR_TUPLE_POP_FRONT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_VARIADICS\n#\n# include <boost/preprocessor/array/pop_front.hpp>\n# include <boost/preprocessor/array/to_tuple.hpp>\n# include <boost/preprocessor/comparison/greater.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/tuple/size.hpp>\n# include <boost/preprocessor/tuple/to_array.hpp>\n#\n#\n# /* BOOST_PP_TUPLE_POP_FRONT */\n#\n# define BOOST_PP_TUPLE_POP_FRONT(tuple) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \\\n\t\tBOOST_PP_TUPLE_POP_FRONT_EXEC, \\\n\t\tBOOST_PP_TUPLE_POP_FRONT_RETURN \\\n\t\t) \\\n\t(tuple) \\\n/**/\n#\n# define BOOST_PP_TUPLE_POP_FRONT_EXEC(tuple) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \\\n/**/\n#\n# define BOOST_PP_TUPLE_POP_FRONT_RETURN(tuple) tuple\n#\n# /* BOOST_PP_TUPLE_POP_FRONT_Z */\n#\n# define BOOST_PP_TUPLE_POP_FRONT_Z(z, tuple) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \\\n\t\tBOOST_PP_TUPLE_POP_FRONT_Z_EXEC, \\\n\t\tBOOST_PP_TUPLE_POP_FRONT_Z_RETURN \\\n\t\t) \\\n\t(z, tuple) \\\n/**/\n#\n# define BOOST_PP_TUPLE_POP_FRONT_Z_EXEC(z, tuple) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \\\n/**/\n#\n# define BOOST_PP_TUPLE_POP_FRONT_Z_RETURN(z, tuple) tuple\n#\n# endif // BOOST_PP_VARIADICS\n#\n# endif // BOOST_PREPROCESSOR_TUPLE_POP_FRONT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/push_back.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2013.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_PUSH_BACK_HPP\n# define BOOST_PREPROCESSOR_TUPLE_PUSH_BACK_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_VARIADICS\n#\n# include <boost/preprocessor/array/push_back.hpp>\n# include <boost/preprocessor/array/to_tuple.hpp>\n# include <boost/preprocessor/tuple/to_array.hpp>\n#\n# /* BOOST_PP_TUPLE_PUSH_BACK */\n#\n# define BOOST_PP_TUPLE_PUSH_BACK(tuple, elem) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \\\n/**/\n#\n# endif // BOOST_PP_VARIADICS\n#\n# endif // BOOST_PREPROCESSOR_TUPLE_PUSH_BACK_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/push_front.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2013.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_PUSH_FRONT_HPP\n# define BOOST_PREPROCESSOR_TUPLE_PUSH_FRONT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_VARIADICS\n#\n# include <boost/preprocessor/array/push_front.hpp>\n# include <boost/preprocessor/array/to_tuple.hpp>\n# include <boost/preprocessor/tuple/to_array.hpp>\n#\n#\n# /* BOOST_PP_TUPLE_PUSH_FRONT */\n#\n# define BOOST_PP_TUPLE_PUSH_FRONT(tuple, elem) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \\\n/**/\n#\n# endif // BOOST_PP_VARIADICS\n#\n# endif // BOOST_PREPROCESSOR_TUPLE_PUSH_FRONT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/rem.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002-2011.                             *\n#  *     (C) Copyright Edward Diener 2011,2013.                               *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_REM_HPP\n# define BOOST_PREPROCESSOR_TUPLE_REM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/expand.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n# include <boost/preprocessor/tuple/detail/is_single_return.hpp>\n#\n# /* BOOST_PP_REM */\n#\n# if BOOST_PP_VARIADICS\n# \t if BOOST_PP_VARIADICS_MSVC\n\t\t/* To be used internally when __VA_ARGS__ could be empty ( or is a single element ) */\n#    \tdefine BOOST_PP_REM_CAT(...) BOOST_PP_CAT(__VA_ARGS__,)\n# \t endif\n#    define BOOST_PP_REM(...) __VA_ARGS__\n# else\n#    define BOOST_PP_REM(x) x\n# endif\n#\n# /* BOOST_PP_TUPLE_REM */\n#\n/*\n  VC++8.0 cannot handle the variadic version of BOOST_PP_TUPLE_REM(size)\n*/\n# if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400)\n# \t if BOOST_PP_VARIADICS_MSVC\n\t\t/* To be used internally when the size could be 0 ( or 1 ) */\n#    \tdefine BOOST_PP_TUPLE_REM_CAT(size) BOOST_PP_REM_CAT\n# \t endif\n#    define BOOST_PP_TUPLE_REM(size) BOOST_PP_REM\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_I(size)\n#    else\n#        define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_OO((size))\n#        define BOOST_PP_TUPLE_REM_OO(par) BOOST_PP_TUPLE_REM_I ## par\n#    endif\n#    define BOOST_PP_TUPLE_REM_I(size) BOOST_PP_TUPLE_REM_ ## size\n# endif\n# define BOOST_PP_TUPLE_REM_0()\n# define BOOST_PP_TUPLE_REM_1(e0) e0\n# define BOOST_PP_TUPLE_REM_2(e0, e1) e0, e1\n# define BOOST_PP_TUPLE_REM_3(e0, e1, e2) e0, e1, e2\n# define BOOST_PP_TUPLE_REM_4(e0, e1, e2, e3) e0, e1, e2, e3\n# define BOOST_PP_TUPLE_REM_5(e0, e1, e2, e3, e4) e0, e1, e2, e3, e4\n# define BOOST_PP_TUPLE_REM_6(e0, e1, e2, e3, e4, e5) e0, e1, e2, e3, e4, e5\n# define BOOST_PP_TUPLE_REM_7(e0, e1, e2, e3, e4, e5, e6) e0, e1, e2, e3, e4, e5, e6\n# define BOOST_PP_TUPLE_REM_8(e0, e1, e2, e3, e4, e5, e6, e7) e0, e1, e2, e3, e4, e5, e6, e7\n# define BOOST_PP_TUPLE_REM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) e0, e1, e2, e3, e4, e5, e6, e7, e8\n# define BOOST_PP_TUPLE_REM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9\n# define BOOST_PP_TUPLE_REM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10\n# define BOOST_PP_TUPLE_REM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11\n# define BOOST_PP_TUPLE_REM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12\n# define BOOST_PP_TUPLE_REM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13\n# define BOOST_PP_TUPLE_REM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14\n# define BOOST_PP_TUPLE_REM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15\n# define BOOST_PP_TUPLE_REM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16\n# define BOOST_PP_TUPLE_REM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17\n# define BOOST_PP_TUPLE_REM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18\n# define BOOST_PP_TUPLE_REM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19\n# define BOOST_PP_TUPLE_REM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20\n# define BOOST_PP_TUPLE_REM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21\n# define BOOST_PP_TUPLE_REM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22\n# define BOOST_PP_TUPLE_REM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23\n# define BOOST_PP_TUPLE_REM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24\n# define BOOST_PP_TUPLE_REM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25\n# define BOOST_PP_TUPLE_REM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26\n# define BOOST_PP_TUPLE_REM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27\n# define BOOST_PP_TUPLE_REM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28\n# define BOOST_PP_TUPLE_REM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29\n# define BOOST_PP_TUPLE_REM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30\n# define BOOST_PP_TUPLE_REM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31\n# define BOOST_PP_TUPLE_REM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32\n# define BOOST_PP_TUPLE_REM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33\n# define BOOST_PP_TUPLE_REM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34\n# define BOOST_PP_TUPLE_REM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35\n# define BOOST_PP_TUPLE_REM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36\n# define BOOST_PP_TUPLE_REM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37\n# define BOOST_PP_TUPLE_REM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38\n# define BOOST_PP_TUPLE_REM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39\n# define BOOST_PP_TUPLE_REM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40\n# define BOOST_PP_TUPLE_REM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41\n# define BOOST_PP_TUPLE_REM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42\n# define BOOST_PP_TUPLE_REM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43\n# define BOOST_PP_TUPLE_REM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44\n# define BOOST_PP_TUPLE_REM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45\n# define BOOST_PP_TUPLE_REM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46\n# define BOOST_PP_TUPLE_REM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47\n# define BOOST_PP_TUPLE_REM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48\n# define BOOST_PP_TUPLE_REM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49\n# define BOOST_PP_TUPLE_REM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50\n# define BOOST_PP_TUPLE_REM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51\n# define BOOST_PP_TUPLE_REM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52\n# define BOOST_PP_TUPLE_REM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53\n# define BOOST_PP_TUPLE_REM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54\n# define BOOST_PP_TUPLE_REM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55\n# define BOOST_PP_TUPLE_REM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56\n# define BOOST_PP_TUPLE_REM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57\n# define BOOST_PP_TUPLE_REM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58\n# define BOOST_PP_TUPLE_REM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59\n# define BOOST_PP_TUPLE_REM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60\n# define BOOST_PP_TUPLE_REM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61\n# define BOOST_PP_TUPLE_REM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62\n# define BOOST_PP_TUPLE_REM_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63\n#\n# /* BOOST_PP_TUPLE_REM_CTOR */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__), (__VA_ARGS__))\n#        define BOOST_PP_TUPLE_REM_CTOR_I(m, args) BOOST_PP_TUPLE_REM_CTOR_II(m, args)\n#        define BOOST_PP_TUPLE_REM_CTOR_II(m, args) BOOST_PP_CAT(m ## args,)\n#    \t define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_EXPAND(BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple)\n#    else\n#        define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__)(__VA_ARGS__)\n#    \t define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_REM tuple\n#    endif\n#    define BOOST_PP_TUPLE_REM_CTOR_O_2(size, tuple) BOOST_PP_TUPLE_REM_CTOR_O_1(tuple)\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#        define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple)\n#    else\n#        define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_D(size, tuple)\n#        define BOOST_PP_TUPLE_REM_CTOR_D(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple)\n#    endif\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) ext tuple\n#    else\n#        define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) BOOST_PP_TUPLE_REM_CTOR_OO((ext, tuple))\n#        define BOOST_PP_TUPLE_REM_CTOR_OO(par) BOOST_PP_TUPLE_REM_CTOR_II ## par\n#        define BOOST_PP_TUPLE_REM_CTOR_II(ext, tuple) ext ## tuple\n#    endif\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/remove.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2013.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_REMOVE_HPP\n# define BOOST_PREPROCESSOR_TUPLE_REMOVE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_VARIADICS\n#\n# include <boost/preprocessor/array/remove.hpp>\n# include <boost/preprocessor/array/to_tuple.hpp>\n# include <boost/preprocessor/comparison/greater.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/tuple/size.hpp>\n# include <boost/preprocessor/tuple/to_array.hpp>\n#\n# /* BOOST_PP_TUPLE_REMOVE */\n#\n# define BOOST_PP_TUPLE_REMOVE(tuple, i) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \\\n\t\tBOOST_PP_TUPLE_REMOVE_EXEC, \\\n\t\tBOOST_PP_TUPLE_REMOVE_RETURN \\\n\t\t) \\\n\t(tuple, i) \\\n/**/\n#\n# define BOOST_PP_TUPLE_REMOVE_EXEC(tuple, i) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \\\n/**/\n#\n# define BOOST_PP_TUPLE_REMOVE_RETURN(tuple, i) tuple\n#\n# /* BOOST_PP_TUPLE_REMOVE_D */\n#\n# define BOOST_PP_TUPLE_REMOVE_D(d, tuple, i) \\\n\tBOOST_PP_IIF \\\n\t\t( \\\n\t\tBOOST_PP_GREATER_D(d, BOOST_PP_TUPLE_SIZE(tuple), 1), \\\n\t\tBOOST_PP_TUPLE_REMOVE_D_EXEC, \\\n\t\tBOOST_PP_TUPLE_REMOVE_D_RETURN \\\n\t\t) \\\n\t(d, tuple, i) \\\n/**/\n#\n# define BOOST_PP_TUPLE_REMOVE_D_EXEC(d, tuple, i) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \\\n/**/\n#\n# define BOOST_PP_TUPLE_REMOVE_D_RETURN(d, tuple, i) tuple\n#\n# endif // BOOST_PP_VARIADICS\n#\n# endif // BOOST_PREPROCESSOR_TUPLE_REMOVE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/replace.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2013.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_REPLACE_HPP\n# define BOOST_PREPROCESSOR_TUPLE_REPLACE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_VARIADICS\n#\n# include <boost/preprocessor/array/replace.hpp>\n# include <boost/preprocessor/array/to_tuple.hpp>\n# include <boost/preprocessor/tuple/to_array.hpp>\n#\n# /* BOOST_PP_TUPLE_REPLACE */\n#\n# define BOOST_PP_TUPLE_REPLACE(tuple, i, elem) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \\\n/**/\n#\n# /* BOOST_PP_TUPLE_REPLACE_D */\n#\n# define BOOST_PP_TUPLE_REPLACE_D(d, tuple, i, elem) \\\n\tBOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \\\n/**/\n#\n# endif // BOOST_PP_VARIADICS\n#\n# endif // BOOST_PREPROCESSOR_TUPLE_REPLACE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/reverse.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002-2011) */\n# /* Revised by Edward Diener (2011) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_REVERSE_HPP\n# define BOOST_PREPROCESSOR_TUPLE_REVERSE_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n# include <boost/preprocessor/tuple/size.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n#\n# /* BOOST_PP_TUPLE_REVERSE */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_REVERSE(...) BOOST_PP_TUPLE_REVERSE_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REVERSE_O_, __VA_ARGS__), (__VA_ARGS__))\n#        define BOOST_PP_TUPLE_REVERSE_I(m, args) BOOST_PP_TUPLE_REVERSE_II(m, args)\n#        define BOOST_PP_TUPLE_REVERSE_II(m, args) BOOST_PP_CAT(m ## args,)\n#    \t define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_TUPLE_SIZE(tuple)) tuple\n#    else\n#        define BOOST_PP_TUPLE_REVERSE(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REVERSE_O_, __VA_ARGS__)(__VA_ARGS__)\n#    \t define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_VARIADIC_SIZE tuple) tuple\n#    endif\n#    define BOOST_PP_TUPLE_REVERSE_O_2(size, tuple) BOOST_PP_TUPLE_REVERSE_O_1(tuple)\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_REVERSE(size, tuple) BOOST_PP_TUPLE_REVERSE_I(size, tuple)\n#        if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#            define BOOST_PP_TUPLE_REVERSE_I(s, t) BOOST_PP_TUPLE_REVERSE_ ## s t\n#        else\n#            define BOOST_PP_TUPLE_REVERSE_I(s, t) BOOST_PP_TUPLE_REVERSE_II(BOOST_PP_TUPLE_REVERSE_ ## s t)\n#            define BOOST_PP_TUPLE_REVERSE_II(res) res\n#        endif\n#    else\n#        define BOOST_PP_TUPLE_REVERSE(size, tuple) BOOST_PP_TUPLE_REVERSE_OO((size, tuple))\n#        define BOOST_PP_TUPLE_REVERSE_OO(par) BOOST_PP_TUPLE_REVERSE_I ## par\n#        define BOOST_PP_TUPLE_REVERSE_I(s, t) BOOST_PP_TUPLE_REVERSE_ ## s ## t\n#    endif\n# endif\n# define BOOST_PP_TUPLE_REVERSE_1(e0) (e0)\n# define BOOST_PP_TUPLE_REVERSE_2(e0, e1) (e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_3(e0, e1, e2) (e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_4(e0, e1, e2, e3) (e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_5(e0, e1, e2, e3, e4) (e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_6(e0, e1, e2, e3, e4, e5) (e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_7(e0, e1, e2, e3, e4, e5, e6) (e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_8(e0, e1, e2, e3, e4, e5, e6, e7) (e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e56, e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e57, e56, e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e58, e57, e56, e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e59, e58, e57, e56, e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e60, e59, e58, e57, e56, e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e61, e60, e59, e58, e57, e56, e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e62, e61, e60, e59, e58, e57, e56, e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n# define BOOST_PP_TUPLE_REVERSE_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) (e63, e62, e61, e60, e59, e58, e57, e56, e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/size.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_SIZE_HPP\n# define BOOST_PREPROCESSOR_TUPLE_SIZE_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_SIZE(tuple) BOOST_PP_CAT(BOOST_PP_VARIADIC_SIZE tuple,)\n#    else\n#        define BOOST_PP_TUPLE_SIZE(tuple) BOOST_PP_VARIADIC_SIZE tuple\n#    endif\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/to_array.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_TO_ARRAY_HPP\n# define BOOST_PREPROCESSOR_TUPLE_TO_ARRAY_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n# include <boost/preprocessor/tuple/size.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n#\n# /* BOOST_PP_TUPLE_TO_ARRAY */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_TO_ARRAY(...) BOOST_PP_TUPLE_TO_ARRAY_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_ARRAY_, __VA_ARGS__), (__VA_ARGS__))\n#        define BOOST_PP_TUPLE_TO_ARRAY_I(m, args) BOOST_PP_TUPLE_TO_ARRAY_II(m, args)\n#        define BOOST_PP_TUPLE_TO_ARRAY_II(m, args) BOOST_PP_CAT(m ## args,)\n#        define BOOST_PP_TUPLE_TO_ARRAY_1(tuple) (BOOST_PP_TUPLE_SIZE(tuple), tuple)\n#    else\n#        define BOOST_PP_TUPLE_TO_ARRAY(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_ARRAY_, __VA_ARGS__)(__VA_ARGS__)\n#        define BOOST_PP_TUPLE_TO_ARRAY_1(tuple) (BOOST_PP_VARIADIC_SIZE tuple, tuple)\n#    endif\n#    define BOOST_PP_TUPLE_TO_ARRAY_2(size, tuple) (size, tuple)\n# else\n#    define BOOST_PP_TUPLE_TO_ARRAY(size, tuple) (size, tuple)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/to_list.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002-2011) */\n# /* Revised by Edward Diener (2011) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP\n# define BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n# include <boost/preprocessor/tuple/size.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n#\n# /* BOOST_PP_TUPLE_TO_LIST */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_TUPLE_TO_LIST_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__), (__VA_ARGS__))\n#        define BOOST_PP_TUPLE_TO_LIST_I(m, args) BOOST_PP_TUPLE_TO_LIST_II(m, args)\n#        define BOOST_PP_TUPLE_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,)\n#    \t define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_TUPLE_SIZE(tuple)) tuple\n#    else\n#        define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__)(__VA_ARGS__)\n#    \t define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple\n#    endif\n#    define BOOST_PP_TUPLE_TO_LIST_O_2(size, tuple) BOOST_PP_TUPLE_TO_LIST_O_1(tuple)\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_I(size, tuple)\n#        if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#            define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s t\n#        else\n#            define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_II(BOOST_PP_TUPLE_TO_LIST_ ## s t)\n#            define BOOST_PP_TUPLE_TO_LIST_II(res) res\n#        endif\n#    else\n#        define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_OO((size, tuple))\n#        define BOOST_PP_TUPLE_TO_LIST_OO(par) BOOST_PP_TUPLE_TO_LIST_I ## par\n#        define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s ## t\n#    endif\n# endif\n#\n# define BOOST_PP_TUPLE_TO_LIST_1(e0) (e0, BOOST_PP_NIL)\n# define BOOST_PP_TUPLE_TO_LIST_2(e0, e1) (e0, (e1, BOOST_PP_NIL))\n# define BOOST_PP_TUPLE_TO_LIST_3(e0, e1, e2) (e0, (e1, (e2, BOOST_PP_NIL)))\n# define BOOST_PP_TUPLE_TO_LIST_4(e0, e1, e2, e3) (e0, (e1, (e2, (e3, BOOST_PP_NIL))))\n# define BOOST_PP_TUPLE_TO_LIST_5(e0, e1, e2, e3, e4) (e0, (e1, (e2, (e3, (e4, BOOST_PP_NIL)))))\n# define BOOST_PP_TUPLE_TO_LIST_6(e0, e1, e2, e3, e4, e5) (e0, (e1, (e2, (e3, (e4, (e5, BOOST_PP_NIL))))))\n# define BOOST_PP_TUPLE_TO_LIST_7(e0, e1, e2, e3, e4, e5, e6) (e0, (e1, (e2, (e3, (e4, (e5, (e6, BOOST_PP_NIL)))))))\n# define BOOST_PP_TUPLE_TO_LIST_8(e0, e1, e2, e3, e4, e5, e6, e7) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, BOOST_PP_NIL))))))))\n# define BOOST_PP_TUPLE_TO_LIST_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, BOOST_PP_NIL)))))))))\n# define BOOST_PP_TUPLE_TO_LIST_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, BOOST_PP_NIL))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, BOOST_PP_NIL)))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, BOOST_PP_NIL))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, BOOST_PP_NIL)))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, BOOST_PP_NIL))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, BOOST_PP_NIL)))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, BOOST_PP_NIL))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, BOOST_PP_NIL)))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, BOOST_PP_NIL))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, BOOST_PP_NIL)))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, BOOST_PP_NIL))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, BOOST_PP_NIL)))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, BOOST_PP_NIL))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, BOOST_PP_NIL)))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, BOOST_PP_NIL))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, BOOST_PP_NIL)))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, BOOST_PP_NIL))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, BOOST_PP_NIL)))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, BOOST_PP_NIL))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, BOOST_PP_NIL)))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, BOOST_PP_NIL))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, BOOST_PP_NIL)))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, BOOST_PP_NIL))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, BOOST_PP_NIL)))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, BOOST_PP_NIL))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, (e61, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, (e61, (e62, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, (e61, (e62, (e63, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple/to_seq.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002-2011.                             *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_TO_SEQ_HPP\n# define BOOST_PREPROCESSOR_TUPLE_TO_SEQ_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n# include <boost/preprocessor/tuple/size.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n#\n# /* BOOST_PP_TUPLE_TO_SEQ */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_TO_SEQ(...) BOOST_PP_TUPLE_TO_SEQ_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_SEQ_O_, __VA_ARGS__), (__VA_ARGS__))\n#        define BOOST_PP_TUPLE_TO_SEQ_I(m, args) BOOST_PP_TUPLE_TO_SEQ_II(m, args)\n#        define BOOST_PP_TUPLE_TO_SEQ_II(m, args) BOOST_PP_CAT(m ## args,)\n#    \t define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_TUPLE_SIZE(tuple)) tuple\n#    else\n#        define BOOST_PP_TUPLE_TO_SEQ(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_SEQ_O_, __VA_ARGS__)(__VA_ARGS__)\n#    \t define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_VARIADIC_SIZE tuple) tuple\n#    endif\n#    define BOOST_PP_TUPLE_TO_SEQ_O_2(size, tuple) BOOST_PP_TUPLE_TO_SEQ_O_1(tuple)\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_TO_SEQ(size, tuple) BOOST_PP_TUPLE_TO_SEQ_I(size, tuple)\n#        if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#            define BOOST_PP_TUPLE_TO_SEQ_I(s, t) BOOST_PP_TUPLE_TO_SEQ_ ## s t\n#        else\n#            define BOOST_PP_TUPLE_TO_SEQ_I(s, t) BOOST_PP_TUPLE_TO_SEQ_II(BOOST_PP_TUPLE_TO_SEQ_ ## s t)\n#            define BOOST_PP_TUPLE_TO_SEQ_II(res) res\n#        endif\n#    else\n#        define BOOST_PP_TUPLE_TO_SEQ(size, tuple) BOOST_PP_TUPLE_TO_SEQ_OO((size, tuple))\n#        define BOOST_PP_TUPLE_TO_SEQ_OO(par) BOOST_PP_TUPLE_TO_SEQ_I ## par\n#        define BOOST_PP_TUPLE_TO_SEQ_I(s, t) BOOST_PP_TUPLE_TO_SEQ_ ## s ## t\n#    endif\n# endif\n#\n/* An empty array can be passed */\n# define BOOST_PP_TUPLE_TO_SEQ_0() ()\n#\n# define BOOST_PP_TUPLE_TO_SEQ_1(e0) (e0)\n# define BOOST_PP_TUPLE_TO_SEQ_2(e0, e1) (e0)(e1)\n# define BOOST_PP_TUPLE_TO_SEQ_3(e0, e1, e2) (e0)(e1)(e2)\n# define BOOST_PP_TUPLE_TO_SEQ_4(e0, e1, e2, e3) (e0)(e1)(e2)(e3)\n# define BOOST_PP_TUPLE_TO_SEQ_5(e0, e1, e2, e3, e4) (e0)(e1)(e2)(e3)(e4)\n# define BOOST_PP_TUPLE_TO_SEQ_6(e0, e1, e2, e3, e4, e5) (e0)(e1)(e2)(e3)(e4)(e5)\n# define BOOST_PP_TUPLE_TO_SEQ_7(e0, e1, e2, e3, e4, e5, e6) (e0)(e1)(e2)(e3)(e4)(e5)(e6)\n# define BOOST_PP_TUPLE_TO_SEQ_8(e0, e1, e2, e3, e4, e5, e6, e7) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)\n# define BOOST_PP_TUPLE_TO_SEQ_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)\n# define BOOST_PP_TUPLE_TO_SEQ_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)\n# define BOOST_PP_TUPLE_TO_SEQ_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)\n# define BOOST_PP_TUPLE_TO_SEQ_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)\n# define BOOST_PP_TUPLE_TO_SEQ_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)\n# define BOOST_PP_TUPLE_TO_SEQ_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)\n# define BOOST_PP_TUPLE_TO_SEQ_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)\n# define BOOST_PP_TUPLE_TO_SEQ_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)\n# define BOOST_PP_TUPLE_TO_SEQ_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)\n# define BOOST_PP_TUPLE_TO_SEQ_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)\n# define BOOST_PP_TUPLE_TO_SEQ_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)\n# define BOOST_PP_TUPLE_TO_SEQ_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)\n# define BOOST_PP_TUPLE_TO_SEQ_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)\n# define BOOST_PP_TUPLE_TO_SEQ_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)\n# define BOOST_PP_TUPLE_TO_SEQ_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)\n# define BOOST_PP_TUPLE_TO_SEQ_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)\n# define BOOST_PP_TUPLE_TO_SEQ_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)\n# define BOOST_PP_TUPLE_TO_SEQ_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)\n# define BOOST_PP_TUPLE_TO_SEQ_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)\n# define BOOST_PP_TUPLE_TO_SEQ_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)\n# define BOOST_PP_TUPLE_TO_SEQ_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)\n# define BOOST_PP_TUPLE_TO_SEQ_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)\n# define BOOST_PP_TUPLE_TO_SEQ_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)\n# define BOOST_PP_TUPLE_TO_SEQ_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)\n# define BOOST_PP_TUPLE_TO_SEQ_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)\n# define BOOST_PP_TUPLE_TO_SEQ_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)\n# define BOOST_PP_TUPLE_TO_SEQ_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)\n# define BOOST_PP_TUPLE_TO_SEQ_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)\n# define BOOST_PP_TUPLE_TO_SEQ_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)\n# define BOOST_PP_TUPLE_TO_SEQ_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)\n# define BOOST_PP_TUPLE_TO_SEQ_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)\n# define BOOST_PP_TUPLE_TO_SEQ_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)\n# define BOOST_PP_TUPLE_TO_SEQ_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)\n# define BOOST_PP_TUPLE_TO_SEQ_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)\n# define BOOST_PP_TUPLE_TO_SEQ_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)\n# define BOOST_PP_TUPLE_TO_SEQ_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)\n# define BOOST_PP_TUPLE_TO_SEQ_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)\n# define BOOST_PP_TUPLE_TO_SEQ_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)\n# define BOOST_PP_TUPLE_TO_SEQ_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)\n# define BOOST_PP_TUPLE_TO_SEQ_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)\n# define BOOST_PP_TUPLE_TO_SEQ_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)\n# define BOOST_PP_TUPLE_TO_SEQ_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)\n# define BOOST_PP_TUPLE_TO_SEQ_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)\n# define BOOST_PP_TUPLE_TO_SEQ_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)\n# define BOOST_PP_TUPLE_TO_SEQ_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)\n# define BOOST_PP_TUPLE_TO_SEQ_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)\n# define BOOST_PP_TUPLE_TO_SEQ_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)\n# define BOOST_PP_TUPLE_TO_SEQ_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)(e55)\n# define BOOST_PP_TUPLE_TO_SEQ_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)(e55)(e56)\n# define BOOST_PP_TUPLE_TO_SEQ_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)(e55)(e56)(e57)\n# define BOOST_PP_TUPLE_TO_SEQ_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)(e55)(e56)(e57)(e58)\n# define BOOST_PP_TUPLE_TO_SEQ_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)(e55)(e56)(e57)(e58)(e59)\n# define BOOST_PP_TUPLE_TO_SEQ_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)(e55)(e56)(e57)(e58)(e59)(e60)\n# define BOOST_PP_TUPLE_TO_SEQ_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)(e55)(e56)(e57)(e58)(e59)(e60)(e61)\n# define BOOST_PP_TUPLE_TO_SEQ_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)(e55)(e56)(e57)(e58)(e59)(e60)(e61)(e62)\n# define BOOST_PP_TUPLE_TO_SEQ_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) (e0)(e1)(e2)(e3)(e4)(e5)(e6)(e7)(e8)(e9)(e10)(e11)(e12)(e13)(e14)(e15)(e16)(e17)(e18)(e19)(e20)(e21)(e22)(e23)(e24)(e25)(e26)(e27)(e28)(e29)(e30)(e31)(e32)(e33)(e34)(e35)(e36)(e37)(e38)(e39)(e40)(e41)(e42)(e43)(e44)(e45)(e46)(e47)(e48)(e49)(e50)(e51)(e52)(e53)(e54)(e55)(e56)(e57)(e58)(e59)(e60)(e61)(e62)(e63)\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/tuple.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n# /* Revised by Edward Diener (2011,2013) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_HPP\n# define BOOST_PREPROCESSOR_TUPLE_HPP\n#\n# include <boost/preprocessor/tuple/eat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/enum.hpp>\n# include <boost/preprocessor/tuple/insert.hpp>\n# include <boost/preprocessor/tuple/pop_back.hpp>\n# include <boost/preprocessor/tuple/pop_front.hpp>\n# include <boost/preprocessor/tuple/push_back.hpp>\n# include <boost/preprocessor/tuple/push_front.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n# include <boost/preprocessor/tuple/remove.hpp>\n# include <boost/preprocessor/tuple/replace.hpp>\n# include <boost/preprocessor/tuple/reverse.hpp>\n# include <boost/preprocessor/tuple/size.hpp>\n# include <boost/preprocessor/tuple/to_array.hpp>\n# include <boost/preprocessor/tuple/to_list.hpp>\n# include <boost/preprocessor/tuple/to_seq.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/variadic/detail/is_single_return.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2014.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_DETAIL_IS_SINGLE_RETURN_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_DETAIL_IS_SINGLE_RETURN_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_VARIADIC_IS_SINGLE_RETURN */\n#\n# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/facilities/is_1.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n# define BOOST_PP_VARIADIC_IS_SINGLE_RETURN(sr,nsr,...)\t\\\n\tBOOST_PP_IIF(BOOST_PP_IS_1(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)),sr,nsr) \\\n\t/**/\n# endif /* BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC */\n#\n# endif /* BOOST_PREPROCESSOR_VARIADIC_DETAIL_IS_SINGLE_RETURN_HPP */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/variadic/elem.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_ELEM_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_ELEM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_VARIADIC_ELEM */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_VARIADIC_ELEM(n, ...) BOOST_PP_VARIADIC_ELEM_I(n,__VA_ARGS__)\n#        define BOOST_PP_VARIADIC_ELEM_I(n, ...) BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_VARIADIC_ELEM_, n)(__VA_ARGS__,),)\n#    else\n#        define BOOST_PP_VARIADIC_ELEM(n, ...) BOOST_PP_CAT(BOOST_PP_VARIADIC_ELEM_, n)(__VA_ARGS__,)\n#    endif\n#    define BOOST_PP_VARIADIC_ELEM_0(e0, ...) e0\n#    define BOOST_PP_VARIADIC_ELEM_1(e0, e1, ...) e1\n#    define BOOST_PP_VARIADIC_ELEM_2(e0, e1, e2, ...) e2\n#    define BOOST_PP_VARIADIC_ELEM_3(e0, e1, e2, e3, ...) e3\n#    define BOOST_PP_VARIADIC_ELEM_4(e0, e1, e2, e3, e4, ...) e4\n#    define BOOST_PP_VARIADIC_ELEM_5(e0, e1, e2, e3, e4, e5, ...) e5\n#    define BOOST_PP_VARIADIC_ELEM_6(e0, e1, e2, e3, e4, e5, e6, ...) e6\n#    define BOOST_PP_VARIADIC_ELEM_7(e0, e1, e2, e3, e4, e5, e6, e7, ...) e7\n#    define BOOST_PP_VARIADIC_ELEM_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, ...) e8\n#    define BOOST_PP_VARIADIC_ELEM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ...) e9\n#    define BOOST_PP_VARIADIC_ELEM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ...) e10\n#    define BOOST_PP_VARIADIC_ELEM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ...) e11\n#    define BOOST_PP_VARIADIC_ELEM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ...) e12\n#    define BOOST_PP_VARIADIC_ELEM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ...) e13\n#    define BOOST_PP_VARIADIC_ELEM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ...) e14\n#    define BOOST_PP_VARIADIC_ELEM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ...) e15\n#    define BOOST_PP_VARIADIC_ELEM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ...) e16\n#    define BOOST_PP_VARIADIC_ELEM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ...) e17\n#    define BOOST_PP_VARIADIC_ELEM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ...) e18\n#    define BOOST_PP_VARIADIC_ELEM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ...) e19\n#    define BOOST_PP_VARIADIC_ELEM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ...) e20\n#    define BOOST_PP_VARIADIC_ELEM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ...) e21\n#    define BOOST_PP_VARIADIC_ELEM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ...) e22\n#    define BOOST_PP_VARIADIC_ELEM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ...) e23\n#    define BOOST_PP_VARIADIC_ELEM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ...) e24\n#    define BOOST_PP_VARIADIC_ELEM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ...) e25\n#    define BOOST_PP_VARIADIC_ELEM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ...) e26\n#    define BOOST_PP_VARIADIC_ELEM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ...) e27\n#    define BOOST_PP_VARIADIC_ELEM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ...) e28\n#    define BOOST_PP_VARIADIC_ELEM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ...) e29\n#    define BOOST_PP_VARIADIC_ELEM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ...) e30\n#    define BOOST_PP_VARIADIC_ELEM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ...) e31\n#    define BOOST_PP_VARIADIC_ELEM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ...) e32\n#    define BOOST_PP_VARIADIC_ELEM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ...) e33\n#    define BOOST_PP_VARIADIC_ELEM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ...) e34\n#    define BOOST_PP_VARIADIC_ELEM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ...) e35\n#    define BOOST_PP_VARIADIC_ELEM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ...) e36\n#    define BOOST_PP_VARIADIC_ELEM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ...) e37\n#    define BOOST_PP_VARIADIC_ELEM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ...) e38\n#    define BOOST_PP_VARIADIC_ELEM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ...) e39\n#    define BOOST_PP_VARIADIC_ELEM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ...) e40\n#    define BOOST_PP_VARIADIC_ELEM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ...) e41\n#    define BOOST_PP_VARIADIC_ELEM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ...) e42\n#    define BOOST_PP_VARIADIC_ELEM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ...) e43\n#    define BOOST_PP_VARIADIC_ELEM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ...) e44\n#    define BOOST_PP_VARIADIC_ELEM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ...) e45\n#    define BOOST_PP_VARIADIC_ELEM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ...) e46\n#    define BOOST_PP_VARIADIC_ELEM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, ...) e47\n#    define BOOST_PP_VARIADIC_ELEM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, ...) e48\n#    define BOOST_PP_VARIADIC_ELEM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, ...) e49\n#    define BOOST_PP_VARIADIC_ELEM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, ...) e50\n#    define BOOST_PP_VARIADIC_ELEM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, ...) e51\n#    define BOOST_PP_VARIADIC_ELEM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, ...) e52\n#    define BOOST_PP_VARIADIC_ELEM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, ...) e53\n#    define BOOST_PP_VARIADIC_ELEM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, ...) e54\n#    define BOOST_PP_VARIADIC_ELEM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, ...) e55\n#    define BOOST_PP_VARIADIC_ELEM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, ...) e56\n#    define BOOST_PP_VARIADIC_ELEM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, ...) e57\n#    define BOOST_PP_VARIADIC_ELEM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, ...) e58\n#    define BOOST_PP_VARIADIC_ELEM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, ...) e59\n#    define BOOST_PP_VARIADIC_ELEM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, ...) e60\n#    define BOOST_PP_VARIADIC_ELEM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, ...) e61\n#    define BOOST_PP_VARIADIC_ELEM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, ...) e62\n#    define BOOST_PP_VARIADIC_ELEM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, ...) e63\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/variadic/size.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_SIZE_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_SIZE_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_VARIADIC_SIZE */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_CAT(BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 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,),)\n#    else\n#        define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 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,)\n#    endif\n#    define BOOST_PP_VARIADIC_SIZE_I(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, size, ...) size\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/variadic/to_array.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_TO_ARRAY_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_TO_ARRAY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/to_array.hpp>\n# if BOOST_PP_VARIADICS_MSVC\n#    include <boost/preprocessor/variadic/size.hpp>\n# endif\n#\n# /* BOOST_PP_VARIADIC_TO_ARRAY */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_VARIADIC_TO_ARRAY(...) BOOST_PP_TUPLE_TO_ARRAY_2(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__),(__VA_ARGS__))\n#    else\n#        define BOOST_PP_VARIADIC_TO_ARRAY(...) BOOST_PP_TUPLE_TO_ARRAY((__VA_ARGS__))\n#    endif\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/variadic/to_list.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_TO_LIST_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_TO_LIST_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/to_list.hpp>\n#\n# /* BOOST_PP_VARIADIC_TO_LIST */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_VARIADIC_TO_LIST(...) BOOST_PP_TUPLE_TO_LIST((__VA_ARGS__))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/variadic/to_seq.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_TO_SEQ_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_TO_SEQ_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/to_seq.hpp>\n#\n# /* BOOST_PP_VARIADIC_TO_SEQ */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_VARIADIC_TO_SEQ(...) BOOST_PP_TUPLE_TO_SEQ((__VA_ARGS__))\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/variadic/to_tuple.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_TO_TUPLE_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_TO_TUPLE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_VARIADIC_TO_TUPLE */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_VARIADIC_TO_TUPLE(...) (__VA_ARGS__)\n# endif\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/variadic.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_HPP\n#\n# include <boost/preprocessor/variadic/elem.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n# include <boost/preprocessor/variadic/to_array.hpp>\n# include <boost/preprocessor/variadic/to_list.hpp>\n# include <boost/preprocessor/variadic/to_seq.hpp>\n# include <boost/preprocessor/variadic/to_tuple.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/while.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_WHILE_HPP\n# define BOOST_PREPROCESSOR_WHILE_HPP\n#\n# include <boost/preprocessor/control/while.hpp>\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/preprocessor/wstringize.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_WSTRINGIZE_HPP\n# define BOOST_PREPROCESSOR_WSTRINGIZE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_WSTRINGIZE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_WSTRINGIZE(text) BOOST_PP_WSTRINGIZE_I(text)\n# else\n#    define BOOST_PP_WSTRINGIZE(text) BOOST_PP_WSTRINGIZE_OO((text))\n#    define BOOST_PP_WSTRINGIZE_OO(par) BOOST_PP_WSTRINGIZE_I ## par\n# endif\n#\n# define BOOST_PP_WSTRINGIZE_I(text) BOOST_PP_WSTRINGIZE_II(#text)\n# define BOOST_PP_WSTRINGIZE_II(str) L ## str\n#\n# endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/adjacent_filtered.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_ADJACENT_FILTER_IMPL_HPP\n#define BOOST_RANGE_ADAPTOR_ADJACENT_FILTER_IMPL_HPP\n\n#include <boost/config.hpp>\n#ifdef BOOST_MSVC\n#pragma warning( push )\n#pragma warning( disable : 4355 )\n#endif\n\n#include <boost/range/adaptor/argument_fwd.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n#include <boost/next_prior.hpp>\n\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< class Iter, class Pred, bool default_pass >\n        class skip_iterator\n          : public boost::iterator_adaptor<\n                    skip_iterator<Iter,Pred,default_pass>,\n                    Iter,\n                    BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::value_type,\n                    boost::forward_traversal_tag,\n                    BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::reference,\n                    BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::difference_type\n                >\n          , private Pred\n        {\n        private:\n            typedef boost::iterator_adaptor<\n                        skip_iterator<Iter,Pred,default_pass>,\n                        Iter,\n                        BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::value_type,\n                        boost::forward_traversal_tag,\n                        BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::reference,\n                        BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::difference_type\n                    > base_t;\n\n        public:\n            typedef Pred pred_t;\n            typedef Iter iter_t;\n\n            skip_iterator() : m_last() {}\n\n            skip_iterator(iter_t it, iter_t last, const Pred& pred)\n                : base_t(it)\n                , pred_t(pred)\n                , m_last(last)\n            {\n            }\n\n            template<class OtherIter>\n            skip_iterator( const skip_iterator<OtherIter, pred_t, default_pass>& other )\n            : base_t(other.base())\n            , pred_t(other)\n            , m_last(other.m_last)\n            {\n            }\n\n            void increment()\n            {\n                iter_t& it = this->base_reference();\n                BOOST_ASSERT( it != m_last );\n                pred_t& bi_pred = *this;\n                iter_t prev = it;\n                ++it;\n                if (it != m_last)\n                {\n                    if (default_pass)\n                    {\n                        while (it != m_last && !bi_pred(*prev, *it))\n                        {\n                            ++it;\n                            ++prev;\n                        }\n                    }\n                    else\n                    {\n                        for (; it != m_last; ++it, ++prev)\n                        {\n                            if (bi_pred(*prev, *it))\n                            {\n                                break;\n                            }\n                        }\n                    }\n                }\n            }\n\n            iter_t m_last;\n        };\n\n        template< class P, class R, bool default_pass >\n        struct adjacent_filtered_range\n            : iterator_range< skip_iterator<\n                                BOOST_DEDUCED_TYPENAME range_iterator<R>::type,\n                                P,\n                                default_pass\n                            >\n                        >\n        {\n        private:\n            typedef skip_iterator<\n                        BOOST_DEDUCED_TYPENAME range_iterator<R>::type,\n                        P,\n                        default_pass\n                     >\n                skip_iter;\n\n            typedef iterator_range<skip_iter>\n                base_range;\n\n            typedef BOOST_DEDUCED_TYPENAME range_iterator<R>::type raw_iterator;\n\n        public:\n            adjacent_filtered_range( const P& p, R& r )\n            : base_range(skip_iter(boost::begin(r), boost::end(r), p),\n                         skip_iter(boost::end(r), boost::end(r), p))\n            {\n            }\n        };\n\n        template< class T >\n        struct adjacent_holder : holder<T>\n        {\n            adjacent_holder( T r ) : holder<T>(r)\n            { }\n        };\n\n        template< class T >\n        struct adjacent_excl_holder : holder<T>\n        {\n            adjacent_excl_holder( T r ) : holder<T>(r)\n            { }\n        };\n\n        template< class ForwardRng, class BinPredicate >\n        inline adjacent_filtered_range<BinPredicate, ForwardRng, true>\n        operator|( ForwardRng& r,\n                   const adjacent_holder<BinPredicate>& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));\n\n            return adjacent_filtered_range<BinPredicate, ForwardRng, true>( f.val, r );\n        }\n\n        template< class ForwardRng, class BinPredicate >\n        inline adjacent_filtered_range<BinPredicate, const ForwardRng, true>\n        operator|( const ForwardRng& r,\n                   const adjacent_holder<BinPredicate>& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));\n\n            return adjacent_filtered_range<BinPredicate,\n                                           const ForwardRng, true>( f.val, r );\n        }\n\n        template< class ForwardRng, class BinPredicate >\n        inline adjacent_filtered_range<BinPredicate, ForwardRng, false>\n        operator|( ForwardRng& r,\n                   const adjacent_excl_holder<BinPredicate>& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));\n            return adjacent_filtered_range<BinPredicate, ForwardRng, false>( f.val, r );\n        }\n\n        template< class ForwardRng, class BinPredicate >\n        inline adjacent_filtered_range<BinPredicate, ForwardRng, false>\n        operator|( const ForwardRng& r,\n                   const adjacent_excl_holder<BinPredicate>& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));\n            return adjacent_filtered_range<BinPredicate,\n                                           const ForwardRng, false>( f.val, r );\n        }\n\n    } // 'range_detail'\n\n    // Bring adjacent_filter_range into the boost namespace so that users of\n    // this library may specify the return type of the '|' operator and\n    // adjacent_filter()\n    using range_detail::adjacent_filtered_range;\n\n    namespace adaptors\n    {\n        namespace\n        {\n            const range_detail::forwarder<range_detail::adjacent_holder>\n                adjacent_filtered =\n                   range_detail::forwarder<range_detail::adjacent_holder>();\n\n            const range_detail::forwarder<range_detail::adjacent_excl_holder>\n                adjacent_filtered_excl =\n                    range_detail::forwarder<range_detail::adjacent_excl_holder>();\n        }\n\n        template<class ForwardRng, class BinPredicate>\n        inline adjacent_filtered_range<BinPredicate, ForwardRng, true>\n        adjacent_filter(ForwardRng& rng, BinPredicate filter_pred)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));\n            return adjacent_filtered_range<BinPredicate, ForwardRng, true>(filter_pred, rng);\n        }\n\n        template<class ForwardRng, class BinPredicate>\n        inline adjacent_filtered_range<BinPredicate, const ForwardRng, true>\n        adjacent_filter(const ForwardRng& rng, BinPredicate filter_pred)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));\n            return adjacent_filtered_range<BinPredicate, const ForwardRng, true>(filter_pred, rng);\n        }\n\n    } // 'adaptors'\n\n}\n\n#ifdef BOOST_MSVC\n#pragma warning( pop )\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/argument_fwd.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_ARGUMENT_FWD_HPP\n#define BOOST_RANGE_ADAPTOR_ARGUMENT_FWD_HPP\n\n#include <boost/config.hpp>\n\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable : 4512) // assignment operator could not be generated\n#endif\n\nnamespace boost\n{\n    namespace range_detail\n    {  \n        template< class T >\n        struct holder\n        {\n            T val;\n            holder( T t ) : val(t)\n            { }\n        };\n\n        template< class T >\n        struct holder2\n        {\n            T val1, val2;\n            holder2( T t, T u ) : val1(t), val2(u)\n            { }\n        };\n        \n        template< template<class> class Holder >\n        struct forwarder\n        {\n            template< class T >\n            Holder<T> operator()( T t ) const\n            {\n                return Holder<T>(t);\n            }\n        };\n\n        template< template<class> class Holder >\n        struct forwarder2\n        {\n            template< class T >\n            Holder<T> operator()( T t, T u ) const\n            {\n                return Holder<T>(t,u);\n            }\n        };\n\n        template< template<class,class> class Holder >\n        struct forwarder2TU\n        {\n            template< class T, class U >\n            Holder<T, U> operator()( T t, U u ) const\n            {\n                return Holder<T, U>(t, u);\n            }\n        };\n\n\n    } \n        \n}\n\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/copied.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_COPIED_HPP\n#define BOOST_RANGE_ADAPTOR_COPIED_HPP\n\n#include <boost/range/adaptor/argument_fwd.hpp>\n#include <boost/range/adaptor/sliced.hpp>\n#include <boost/range/size_type.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/concepts.hpp>\n\nnamespace boost\n{\n    namespace adaptors\n    {\n        struct copied\n        {\n            copied(std::size_t t_, std::size_t u_)\n                : t(t_), u(u_) {}\n\n            std::size_t t;\n            std::size_t u;\n        };\n\n        template<class CopyableRandomAccessRange>\n        inline CopyableRandomAccessRange\n        operator|(const CopyableRandomAccessRange& r, const copied& f)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                RandomAccessRangeConcept<const CopyableRandomAccessRange>));\n\n            iterator_range<\n                BOOST_DEDUCED_TYPENAME range_iterator<\n                    const CopyableRandomAccessRange\n                >::type\n            > temp(adaptors::slice(r, f.t, f.u));\n\n            return CopyableRandomAccessRange(temp.begin(), temp.end());\n        }\n\n        template<class CopyableRandomAccessRange>\n        inline CopyableRandomAccessRange\n        copy(const CopyableRandomAccessRange& rng, std::size_t t, std::size_t u)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                RandomAccessRangeConcept<const CopyableRandomAccessRange>));\n\n            iterator_range<\n                BOOST_DEDUCED_TYPENAME range_iterator<\n                    const CopyableRandomAccessRange\n                >::type\n            > temp(adaptors::slice(rng, t, u));\n\n            return CopyableRandomAccessRange( temp.begin(), temp.end() );\n        }\n    } // 'adaptors'\n\n}\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/define_adaptor.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DEFINE_ADAPTOR_HPP_INCLUDED\n#define BOOST_RANGE_DEFINE_ADAPTOR_HPP_INCLUDED\n\n#include <boost/tuple/tuple.hpp>\n\n#define BOOST_DEFINE_RANGE_ADAPTOR( adaptor_name, range_adaptor ) \\\n    struct adaptor_name##_forwarder {}; \\\n    \\\n    template<typename Range> range_adaptor <Range> \\\n        operator|(Range& rng, adaptor_name##_forwarder) \\\n    { \\\n        return range_adaptor <Range>( rng ); \\\n    } \\\n    \\\n    template<typename Range> range_adaptor <const Range> \\\n        operator|(const Range& rng, adaptor_name##_forwarder) \\\n    { \\\n        return range_adaptor <const Range>( rng ); \\\n    } \\\n    \\\n    static adaptor_name##_forwarder adaptor_name = adaptor_name##_forwarder(); \\\n    \\\n    template<typename Range> \\\n    range_adaptor <Range> \\\n    make_##adaptor_name(Range& rng) \\\n    { \\\n        return range_adaptor <Range>(rng); \\\n    } \\\n    \\\n    template<typename Range> \\\n    range_adaptor <const Range> \\\n    make_##adaptor_name(const Range& rng) \\\n    { \\\n        return range_adaptor <const Range>(rng); \\\n    }\n\n#define BOOST_DEFINE_RANGE_ADAPTOR_1( adaptor_name, range_adaptor, arg1_type ) \\\n    struct adaptor_name \\\n    { \\\n        explicit adaptor_name (arg1_type arg1_) \\\n            : arg1(arg1_) {} \\\n        arg1_type arg1; \\\n    }; \\\n    \\\n    template<typename Range> range_adaptor <Range> \\\n        operator|(Range& rng, adaptor_name args) \\\n    { \\\n        return range_adaptor <Range>(rng, args.arg1); \\\n    } \\\n    \\\n    template<typename Range> range_adaptor <const Range> \\\n        operator|(const Range& rng, adaptor_name args) \\\n    { \\\n        return range_adaptor <const Range>(rng, args.arg1); \\\n    } \\\n    \\\n    template<typename Range> \\\n    range_adaptor <Range> \\\n    make_##adaptor_name(Range& rng, arg1_type arg1) \\\n    { \\\n        return range_adaptor <Range>(rng, arg1); \\\n    } \\\n    \\\n    template<typename Range> \\\n    range_adaptor <const Range> \\\n    make_##adaptor_name(const Range& rng, arg1_type arg1) \\\n    { \\\n        return range_adaptor <const Range>(rng, arg1); \\\n    }\n\n#define BOOST_RANGE_ADAPTOR_2( adaptor_name, range_adaptor, arg1_type, arg2_type ) \\\n    struct adaptor_name \\\n    { \\\n        explicit adaptor_name (arg1_type arg1_, arg2_type arg2_) \\\n            : arg1(arg1_), arg2(arg2_) {} \\\n        arg1_type arg1; \\\n        arg2_type arg2; \\\n    }; \\\n    \\\n    template<typename Range> range_adaptor <Range> \\\n    operator|(Range& rng, adaptor_name args) \\\n    { \\\n        return range_adaptor <Range>(rng, args.arg1, args.arg2); \\\n    } \\\n    template<typename Range> \\\n    range_adaptor <Range> \\\n    make_##adaptor_name(Range& rng, arg1_type arg1, arg2_type arg2) \\\n    { \\\n        return range_adaptor <Range>(rng, arg1, arg2); \\\n    } \\\n    template<typename Range> \\\n    range_adaptor <const Range> \\\n    make_##adaptor_name(const Range& rng, arg1_type arg1, arg2_type arg2) \\\n    { \\\n        return range_adaptor <const Range>(rng, arg1, arg2); \\\n    }\n\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/filtered.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_FILTERED_HPP\n#define BOOST_RANGE_ADAPTOR_FILTERED_HPP\n\n#include <boost/range/adaptor/argument_fwd.hpp>\n#include <boost/range/detail/default_constructible_unary_fn.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/iterator/filter_iterator.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< class P, class R >\n        struct filtered_range :\n            boost::iterator_range<\n                boost::filter_iterator<\n                    typename default_constructible_unary_fn_gen<P, bool>::type,\n                    typename range_iterator<R>::type\n                >\n            >\n        {\n        private:\n            typedef boost::iterator_range<\n                boost::filter_iterator<\n                    typename default_constructible_unary_fn_gen<P, bool>::type,\n                    typename range_iterator<R>::type\n                >\n            > base;\n        public:\n            typedef typename default_constructible_unary_fn_gen<P, bool>::type\n                pred_t;\n\n            filtered_range(P p, R& r)\n            : base(make_filter_iterator(pred_t(p),\n                                        boost::begin(r), boost::end(r)),\n                   make_filter_iterator(pred_t(p),\n                                        boost::end(r), boost::end(r)))\n            { }\n        };\n\n        template< class T >\n        struct filter_holder : holder<T>\n        {\n            filter_holder( T r ) : holder<T>(r)\n            { }\n        };\n\n        template< class SinglePassRange, class Predicate >\n        inline filtered_range<Predicate, SinglePassRange>\n        operator|(SinglePassRange& r,\n                  const filter_holder<Predicate>& f)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<SinglePassRange>));\n            return filtered_range<Predicate, SinglePassRange>( f.val, r );\n        }\n\n        template< class SinglePassRange, class Predicate >\n        inline filtered_range<Predicate, const SinglePassRange>\n        operator|(const SinglePassRange& r,\n                  const filter_holder<Predicate>& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n            return filtered_range<Predicate, const SinglePassRange>( f.val, r );\n        }\n\n    } // 'range_detail'\n\n    // Unusual use of 'using' is intended to bring filter_range into the boost namespace\n    // while leaving the mechanics of the '|' operator in range_detail and maintain\n    // argument dependent lookup.\n    // filter_range logically needs to be in the boost namespace to allow user of\n    // the library to define the return type for filter()\n    using range_detail::filtered_range;\n\n    namespace adaptors\n    {\n        namespace\n        {\n            const range_detail::forwarder<range_detail::filter_holder>\n                    filtered =\n                       range_detail::forwarder<range_detail::filter_holder>();\n        }\n\n        template<class SinglePassRange, class Predicate>\n        inline filtered_range<Predicate, SinglePassRange>\n        filter(SinglePassRange& rng, Predicate filter_pred)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            return range_detail::filtered_range<\n                Predicate, SinglePassRange>( filter_pred, rng );\n        }\n\n        template<class SinglePassRange, class Predicate>\n        inline filtered_range<Predicate, const SinglePassRange>\n        filter(const SinglePassRange& rng, Predicate filter_pred)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            return range_detail::filtered_range<\n                Predicate, const SinglePassRange>( filter_pred, rng );\n        }\n    } // 'adaptors'\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/formatted.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2014.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ADAPTOR_FORMATTED_HPP_INCLUDED\n#define BOOST_RANGE_ADAPTOR_FORMATTED_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/remove_extent.hpp>\n#include <ostream>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<typename Sep, typename Prefix, typename Postfix>\nstruct formatted_holder\n{\n    typedef typename boost::mpl::if_<\n        boost::is_array<Sep>,\n        const typename boost::remove_extent<Sep>::type*,\n        Sep\n    >::type separator_t;\n\n    typedef typename boost::mpl::if_<\n        boost::is_array<Prefix>,\n        const typename boost::remove_extent<Prefix>::type*,\n        Prefix\n    >::type prefix_t;\n\n    typedef typename boost::mpl::if_<\n        boost::is_array<Postfix>,\n        const typename boost::remove_extent<Postfix>::type*,\n        Postfix\n    >::type postfix_t;\n\n    formatted_holder(\n        const separator_t& sep,\n        const prefix_t& prefix,\n        const postfix_t& postfix)\n        : m_sep(sep)\n        , m_prefix(prefix)\n        , m_postfix(postfix)\n    {\n    }\n\n    separator_t m_sep;\n    prefix_t m_prefix;\n    postfix_t m_postfix;\n};\n\ntemplate<typename Iter, typename Sep, typename Prefix, typename Postfix>\nclass formatted_range\n        : public boost::iterator_range<Iter>\n{\n    typedef formatted_holder<Sep,Prefix,Postfix> holder_t;\npublic:\n    formatted_range(Iter first, Iter last, const holder_t& holder)\n        : boost::iterator_range<Iter>(first, last)\n        , m_holder(holder)\n    {\n    }\n\n    template<typename OStream>\n    void write(OStream& out) const\n    {\n        Iter it(this->begin());\n        out << m_holder.m_prefix;\n        if (it != this->end())\n        {\n            out << *it;\n            for (++it; it != this->end(); ++it)\n            {\n                out << m_holder.m_sep << *it;\n            }\n        }\n        out << m_holder.m_postfix;\n    }\n\nprivate:\n    holder_t m_holder;\n};\n\ntemplate<\n    typename SinglePassRange,\n    typename Sep,\n    typename Prefix,\n    typename Postfix\n>\ninline range_detail::formatted_range<\n    typename range_iterator<const SinglePassRange>::type, Sep, Prefix, Postfix\n>\noperator|(\n    const SinglePassRange& rng,\n    const range_detail::formatted_holder<Sep,Prefix,Postfix>& holder\n)\n{\n    typedef typename range_iterator<const SinglePassRange>::type iterator;\n    return range_detail::formatted_range<iterator, Sep, Prefix, Postfix>(\n        boost::begin(rng), boost::end(rng), holder);\n}\n\ntemplate<typename Char, typename Traits, typename Iter, typename Sep,\n    typename Prefix, typename Postfix>\nstd::basic_ostream<Char, Traits>&\noperator<<(\n        std::basic_ostream<Char, Traits>& out,\n        const formatted_range<Iter, Sep, Prefix, Postfix>& writer)\n{\n    writer.write(out);\n    return out;\n}\n\n    } // namespace range_detail\n\n    namespace adaptors\n    {\n\ntemplate<typename Sep, typename Prefix, typename Postfix>\nrange_detail::formatted_holder<Sep, Prefix, Postfix>\nformatted(const Sep& sep, const Prefix& prefix, const Postfix& postfix)\n{\n    return range_detail::formatted_holder<Sep,Prefix,Postfix>(\n                sep, prefix, postfix);\n}\n\ntemplate<typename Sep, typename Prefix>\nrange_detail::formatted_holder<Sep, Prefix, char>\nformatted(const Sep& sep, const Prefix& prefix)\n{\n    return range_detail::formatted_holder<Sep, Prefix, char>(sep, prefix, '}');\n}\n\ntemplate<typename Sep>\nrange_detail::formatted_holder<Sep, char, char>\nformatted(const Sep& sep)\n{\n    return range_detail::formatted_holder<Sep, char, char>(sep, '{', '}');\n}\n\ninline range_detail::formatted_holder<char, char, char>\nformatted()\n{\n    return range_detail::formatted_holder<char, char, char>(',', '{', '}');\n}\n\nusing range_detail::formatted_range;\n\ntemplate<typename SinglePassRange, typename Sep, typename Prefix,\n         typename Postfix>\ninline boost::range_detail::formatted_range<\n    typename boost::range_iterator<const SinglePassRange>::type,\n    Sep, Prefix, Postfix\n>\nformat(\n    const SinglePassRange& rng,\n    const Sep& sep,\n    const Prefix& prefix,\n    const Postfix& postfix\n)\n{\n    typedef typename boost::range_iterator<const SinglePassRange>::type\n                iterator_t;\n\n    typedef boost::range_detail::formatted_range<\n                iterator_t, Sep, Prefix, Postfix>       result_t;\n\n    typedef boost::range_detail::formatted_holder<Sep, Prefix, Postfix>\n                holder_t;\n\n    return result_t(boost::begin(rng), boost::end(rng),\n                    holder_t(sep, prefix, postfix));\n}\n\ntemplate<typename SinglePassRange, typename Sep, typename Prefix>\ninline boost::range_detail::formatted_range<\n    typename boost::range_iterator<const SinglePassRange>::type,\n    Sep, Prefix, char\n>\nformat(\n    const SinglePassRange& rng,\n    const Sep& sep,\n    const Prefix& prefix)\n{\n    return adaptors::format<SinglePassRange, Sep, Prefix, char>(rng, sep, prefix, '}');\n}\n\ntemplate<typename SinglePassRange, typename Sep>\ninline boost::range_detail::formatted_range<\n    typename boost::range_iterator<const SinglePassRange>::type,\n    Sep, char, char\n>\nformat(const SinglePassRange& rng, const Sep& sep)\n{\n    return adaptors::format<SinglePassRange, Sep, char, char>(rng, sep, '{', '}');\n}\n\ntemplate<typename SinglePassRange>\ninline boost::range_detail::formatted_range<\n    typename boost::range_iterator<const SinglePassRange>::type,\n    char, char, char\n>\nformat(const SinglePassRange& rng)\n{\n    return adaptors::format<SinglePassRange, char, char, char>(rng, ',', '{', '}');\n}\n\n    } // namespace adaptors\n\n    namespace range\n    {\n        using boost::range_detail::formatted_range;\n    } // namespace range\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/indexed.hpp",
    "content": "//  Copyright 2014 Neil Groves\n//\n//  Copyright (c) 2010 Ilya Murav'jov\n// \n//  Use, modification and distribution is subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// Credits:\n//  My (Neil's) first indexed adaptor was hindered by having the underlying\n//  iterator return the same reference as the wrapped iterator. This meant that\n//  to obtain the index one had to get to the index_iterator and call the\n//  index() function on it. Ilya politely pointed out that this was useless in\n//  a number of scenarios since one naturally hides the use of iterators in\n//  good range-based code. Ilya provided a new interface (which has remained)\n//  and a first implementation. Much of this original implementation has\n//  been simplified and now supports more compilers and platforms.\n//\n#ifndef BOOST_RANGE_ADAPTOR_INDEXED_HPP_INCLUDED\n#define BOOST_RANGE_ADAPTOR_INDEXED_HPP_INCLUDED\n\n#include <boost/range/config.hpp>\n#include <boost/range/adaptor/argument_fwd.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/traversal.hpp>\n#include <boost/range/size.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n\n#include <boost/iterator/iterator_traits.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n\n#include <boost/tuple/tuple.hpp>\n\nnamespace boost\n{\n    namespace adaptors\n    {\n\nstruct indexed\n{\n    explicit indexed(std::ptrdiff_t x = 0)\n        : val(x)\n    {\n    }\n    std::ptrdiff_t val;\n};\n\n    } // namespace adaptors\n\n    namespace range\n    {\n\n// Why yet another \"pair\" class:\n// - std::pair can't store references\n// - no need for typing for index type (default to \"std::ptrdiff_t\"); this is\n// useful in BOOST_FOREACH() expressions that have pitfalls with commas\n//   ( see http://www.boost.org/doc/libs/1_44_0/doc/html/foreach/pitfalls.html )\n// - meaningful access functions index(), value()\ntemplate<class T, class Indexable = std::ptrdiff_t>\nclass index_value\n    : public tuple<Indexable, T>\n{\n    typedef tuple<Indexable, T> base_t;\n\n    template<int N>\n    struct iv_types\n    {\n        typedef typename tuples::element<N, base_t>::type n_type;\n\n        typedef typename tuples::access_traits<n_type>::non_const_type non_const_type;\n        typedef typename tuples::access_traits<n_type>::const_type const_type;\n    };\n\npublic:\n    typedef typename iv_types<0>::non_const_type index_type;\n    typedef typename iv_types<0>::const_type const_index_type;\n    typedef typename iv_types<1>::non_const_type value_type;\n    typedef typename iv_types<1>::const_type const_value_type;\n\n    index_value()\n    {\n    }\n\n    index_value(typename tuples::access_traits<Indexable>::parameter_type t0,\n                typename tuples::access_traits<T>::parameter_type t1)\n        : base_t(t0, t1)\n    {\n    }\n\n    // member functions index(), value() (non-const and const)\n    index_type index()\n    {\n        return boost::tuples::get<0>(*this);\n    }\n\n    const_index_type index() const\n    {\n        return boost::tuples::get<0>(*this);\n    }\n\n    value_type value()\n    {\n        return boost::tuples::get<1>(*this);\n    }\n\n    const_value_type value() const\n    {\n        return boost::tuples::get<1>(*this);\n    }\n};\n\n    } // namespace range\n\nnamespace range_detail\n{\n\ntemplate<typename Iter>\nstruct indexed_iterator_value_type\n{\n    typedef ::boost::range::index_value<\n        typename iterator_reference<Iter>::type,\n        typename iterator_difference<Iter>::type\n    > type;\n};\n\n// Meta-function to get the traversal for the range and therefore iterator\n// returned by the indexed adaptor for a specified iterator type.\n//\n// Random access -> Random access\n// Bidirectional -> Forward\n// Forward -> Forward\n// SinglePass -> SinglePass\n//\n// The rationale for demoting a Bidirectional input to Forward is that the end\n// iterator cannot cheaply have an index computed for it. Therefore I chose to\n// demote to forward traversal. I can maintain the ability to traverse randomly\n// when the input is Random Access since the index for the end iterator is cheap\n// to compute.\ntemplate<typename Iter>\nstruct indexed_traversal\n{\nprivate:\n    typedef typename iterator_traversal<Iter>::type wrapped_traversal;\n\npublic:\n\n    typedef typename mpl::if_<\n        is_convertible<wrapped_traversal, random_access_traversal_tag>,\n        random_access_traversal_tag,\n        typename mpl::if_<\n            is_convertible<wrapped_traversal, bidirectional_traversal_tag>,\n            forward_traversal_tag,\n            wrapped_traversal\n        >::type\n    >::type type;\n};\n\ntemplate<typename Iter>\nclass indexed_iterator\n    : public iterator_facade<\n            indexed_iterator<Iter>,\n            typename indexed_iterator_value_type<Iter>::type,\n            typename indexed_traversal<Iter>::type,\n            typename indexed_iterator_value_type<Iter>::type,\n            typename iterator_difference<Iter>::type\n        >\n{\npublic:\n    typedef Iter wrapped;\n\nprivate:\n    typedef iterator_facade<\n        indexed_iterator<wrapped>,\n        typename indexed_iterator_value_type<wrapped>::type,\n        typename indexed_traversal<wrapped>::type,\n        typename indexed_iterator_value_type<wrapped>::type,\n        typename iterator_difference<wrapped>::type\n    > base_t;\n\npublic:\n    typedef typename base_t::difference_type difference_type;\n    typedef typename base_t::reference reference;\n    typedef typename base_t::difference_type index_type;\n\n    indexed_iterator()\n        : m_it()\n        , m_index()\n    {\n    }\n\n    template<typename OtherWrapped>\n    indexed_iterator(\n        const indexed_iterator<OtherWrapped>& other,\n        typename enable_if<is_convertible<OtherWrapped, wrapped> >::type* = 0\n    )\n        : m_it(other.get())\n        , m_index(other.get_index())\n    {\n    }\n\n    explicit indexed_iterator(wrapped it, index_type index)\n        : m_it(it)\n        , m_index(index)\n    {\n    }\n\n    wrapped get() const\n    {\n        return m_it;\n    }\n\n    index_type get_index() const\n    {\n        return m_index;\n    }\n\n private:\n    friend class boost::iterator_core_access;\n\n    reference dereference() const\n    {\n        return reference(m_index, *m_it);\n    }\n\n    bool equal(const indexed_iterator& other) const\n    {\n        return m_it == other.m_it;\n    }\n\n    void increment()\n    {\n        ++m_index;\n        ++m_it;\n    }\n\n    void decrement()\n    {\n        BOOST_ASSERT_MSG(m_index > 0, \"indexed Iterator out of bounds\");\n        --m_index;\n        --m_it;\n    }\n\n    void advance(index_type n)\n    {\n        m_index += n;\n        BOOST_ASSERT_MSG(m_index >= 0, \"indexed Iterator out of bounds\");\n        m_it += n;\n    }\n\n    difference_type distance_to(const indexed_iterator& other) const\n    {\n        return other.m_it - m_it;\n    }\n\n    wrapped m_it;\n    index_type m_index;\n};\n\ntemplate<typename SinglePassRange>\nstruct indexed_range\n    : iterator_range<\n        indexed_iterator<\n            typename range_iterator<SinglePassRange>::type\n        >\n    >\n{\n    typedef iterator_range<\n        indexed_iterator<\n            typename range_iterator<SinglePassRange>::type\n        >\n    > base_t;\n\n    BOOST_RANGE_CONCEPT_ASSERT((\n        boost::SinglePassRangeConcept<SinglePassRange>));\npublic:\n    typedef indexed_iterator<\n        typename range_iterator<SinglePassRange>::type\n    > iterator;\n\n    // Constructor for non-random access iterators.\n    // This sets the end iterator index to i despite this being incorrect it\n    // is never observable since bidirectional iterators are demoted to\n    // forward iterators.\n    indexed_range(\n        typename base_t::difference_type i,\n        SinglePassRange& r,\n        single_pass_traversal_tag\n        )\n        : base_t(iterator(boost::begin(r), i),\n                 iterator(boost::end(r), i))\n    {\n    }\n\n    indexed_range(\n        typename base_t::difference_type i,\n        SinglePassRange& r,\n        random_access_traversal_tag\n        )\n        : base_t(iterator(boost::begin(r), i),\n                 iterator(boost::end(r), i + boost::size(r)))\n    {\n    }\n};\n\n    } // namespace range_detail \n\n    using range_detail::indexed_range;\n\n    namespace adaptors\n    {\n\ntemplate<class SinglePassRange>\ninline indexed_range<SinglePassRange>\noperator|(SinglePassRange& r, indexed e)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((\n        boost::SinglePassRangeConcept<SinglePassRange>\n    ));\n    return indexed_range<SinglePassRange>(\n                e.val, r,\n                typename range_traversal<SinglePassRange>::type());\n}\n\ntemplate<class SinglePassRange>\ninline indexed_range<const SinglePassRange>\noperator|(const SinglePassRange& r, indexed e)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((\n        boost::SinglePassRangeConcept<const SinglePassRange>\n    ));\n    return indexed_range<const SinglePassRange>(\n                e.val, r,\n                typename range_traversal<const SinglePassRange>::type());\n}\n\ntemplate<class SinglePassRange>\ninline indexed_range<SinglePassRange>\nindex(\n    SinglePassRange& rng,\n    typename range_difference<SinglePassRange>::type index_value = 0)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((\n        boost::SinglePassRangeConcept<SinglePassRange>\n    ));\n    return indexed_range<SinglePassRange>(\n                index_value, rng,\n                typename range_traversal<SinglePassRange>::type());\n}\n\ntemplate<class SinglePassRange>\ninline indexed_range<const SinglePassRange>\nindex(\n    const SinglePassRange& rng,\n    typename range_difference<const SinglePassRange>::type index_value = 0)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((\n        boost::SinglePassRangeConcept<SinglePassRange>\n    ));\n    return indexed_range<const SinglePassRange>(\n                index_value, rng,\n                typename range_traversal<const SinglePassRange>::type());\n}\n\n    } // namespace adaptors\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/indirected.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_INDIRECTED_HPP\n#define BOOST_RANGE_ADAPTOR_INDIRECTED_HPP\n\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/iterator/indirect_iterator.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< class R >\n        struct indirected_range :\n            public boost::iterator_range<\n                        boost::indirect_iterator<\n                            BOOST_DEDUCED_TYPENAME range_iterator<R>::type\n                        >\n                    >\n        {\n        private:\n            typedef boost::iterator_range<\n                        boost::indirect_iterator<\n                            BOOST_DEDUCED_TYPENAME range_iterator<R>::type\n                        >\n                    >\n                base;\n\n        public:\n            explicit indirected_range( R& r )\n                : base( r )\n            { }\n        };\n\n        struct indirect_forwarder {};\n\n        template< class SinglePassRange >\n        inline indirected_range<SinglePassRange>\n        operator|( SinglePassRange& r, indirect_forwarder )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            return indirected_range<SinglePassRange>( r );\n        }\n\n        template< class SinglePassRange >\n        inline indirected_range<const SinglePassRange>\n        operator|( const SinglePassRange& r, indirect_forwarder )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            return indirected_range<const SinglePassRange>( r );\n        }\n\n    } // 'range_detail'\n\n    using range_detail::indirected_range;\n\n    namespace adaptors\n    {\n        namespace\n        {\n            const range_detail::indirect_forwarder indirected =\n                                            range_detail::indirect_forwarder();\n        }\n\n        template<class SinglePassRange>\n        inline indirected_range<SinglePassRange>\n        indirect(SinglePassRange& rng)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n            return indirected_range<SinglePassRange>(rng);\n        }\n\n        template<class SinglePassRange>\n        inline indirected_range<const SinglePassRange>\n        indirect(const SinglePassRange& rng)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            return indirected_range<const SinglePassRange>(rng);\n        }\n    } // 'adaptors'\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/map.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_MAP_HPP\n#define BOOST_RANGE_ADAPTOR_MAP_HPP\n\n#include <boost/range/adaptor/transformed.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/reference.hpp>\n#include <boost/range/concepts.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        struct map_keys_forwarder {};\n        struct map_values_forwarder {};\n\n        template< class Map >\n        struct select_first\n        {\n            typedef BOOST_DEDUCED_TYPENAME range_reference<const Map>::type argument_type;\n            typedef const BOOST_DEDUCED_TYPENAME range_value<const Map>::type::first_type& result_type;\n\n            result_type operator()( argument_type r ) const\n            {\n                return r.first;\n            }\n        };\n\n        template< class Map >\n        struct select_second_mutable\n        {\n            typedef BOOST_DEDUCED_TYPENAME range_reference<Map>::type argument_type;\n            typedef BOOST_DEDUCED_TYPENAME range_value<Map>::type::second_type& result_type;\n\n            result_type operator()( argument_type r ) const\n            {\n                return r.second;\n            }\n        };\n\n        template< class Map >\n        struct select_second_const\n        {\n            typedef BOOST_DEDUCED_TYPENAME range_reference<const Map>::type argument_type;\n            typedef const BOOST_DEDUCED_TYPENAME range_value<const Map>::type::second_type& result_type;\n\n            result_type operator()( argument_type r ) const\n            {\n                return r.second;\n            }\n        };\n\n        template<class StdPairRng>\n        class select_first_range\n            : public transformed_range<\n                        select_first<StdPairRng>,\n                        const StdPairRng>\n        {\n            typedef transformed_range<select_first<StdPairRng>, const StdPairRng> base;\n        public:\n            typedef select_first<StdPairRng> transform_fn_type;\n            typedef const StdPairRng source_range_type;\n\n            select_first_range(transform_fn_type fn, source_range_type& rng)\n                : base(fn, rng)\n            {\n            }\n\n            select_first_range(const base& other) : base(other) {}\n        };\n\n        template<class StdPairRng>\n        class select_second_mutable_range\n            : public transformed_range<\n                        select_second_mutable<StdPairRng>,\n                        StdPairRng>\n        {\n            typedef transformed_range<select_second_mutable<StdPairRng>, StdPairRng> base;\n        public:\n            typedef select_second_mutable<StdPairRng> transform_fn_type;\n            typedef StdPairRng source_range_type;\n\n            select_second_mutable_range(transform_fn_type fn, source_range_type& rng)\n                : base(fn, rng)\n            {\n            }\n\n            select_second_mutable_range(const base& other) : base(other) {}\n        };\n\n        template<class StdPairRng>\n        class select_second_const_range\n            : public transformed_range<\n                        select_second_const<StdPairRng>,\n                        const StdPairRng>\n        {\n            typedef transformed_range<select_second_const<StdPairRng>, const StdPairRng> base;\n        public:\n            typedef select_second_const<StdPairRng> transform_fn_type;\n            typedef const StdPairRng source_range_type;\n\n            select_second_const_range(transform_fn_type fn, source_range_type& rng)\n                : base(fn, rng)\n            {\n            }\n\n            select_second_const_range(const base& other) : base(other) {}\n        };\n\n        template< class StdPairRng >\n        inline select_first_range<StdPairRng>\n        operator|( const StdPairRng& r, map_keys_forwarder )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const StdPairRng>));\n\n            return operator|( r,\n                boost::adaptors::transformed( select_first<StdPairRng>() ) );\n        }\n\n        template< class StdPairRng >\n        inline select_second_mutable_range<StdPairRng>\n        operator|( StdPairRng& r, map_values_forwarder )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<StdPairRng>));\n\n            return operator|( r,\n                boost::adaptors::transformed( select_second_mutable<StdPairRng>() ) );\n        }\n\n        template< class StdPairRng >\n        inline select_second_const_range<StdPairRng>\n        operator|( const StdPairRng& r, map_values_forwarder )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const StdPairRng>));\n\n            return operator|( r,\n                boost::adaptors::transformed( select_second_const<StdPairRng>() ) );\n        }\n\n    } // 'range_detail'\n\n    using range_detail::select_first_range;\n    using range_detail::select_second_mutable_range;\n    using range_detail::select_second_const_range;\n\n    namespace adaptors\n    {\n        namespace\n        {\n            const range_detail::map_keys_forwarder map_keys =\n                                            range_detail::map_keys_forwarder();\n\n            const range_detail::map_values_forwarder map_values =\n                                           range_detail::map_values_forwarder();\n        }\n\n        template<class StdPairRange>\n        inline select_first_range<StdPairRange>\n        keys(const StdPairRange& rng)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const StdPairRange>));\n\n            return select_first_range<StdPairRange>(\n                range_detail::select_first<StdPairRange>(), rng );\n        }\n\n        template<class StdPairRange>\n        inline select_second_const_range<StdPairRange>\n        values(const StdPairRange& rng)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const StdPairRange>));\n\n            return select_second_const_range<StdPairRange>(\n                range_detail::select_second_const<StdPairRange>(), rng );\n        }\n\n        template<class StdPairRange>\n        inline select_second_mutable_range<StdPairRange>\n        values(StdPairRange& rng)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<StdPairRange>));\n\n            return select_second_mutable_range<StdPairRange>(\n                range_detail::select_second_mutable<StdPairRange>(), rng );\n        }\n    } // 'adaptors'\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/replaced.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2007. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_REPLACED_IMPL_HPP_INCLUDED\n#define BOOST_RANGE_ADAPTOR_REPLACED_IMPL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/range/adaptor/argument_fwd.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n#include <boost/iterator/transform_iterator.hpp>\n#include <boost/optional/optional.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< class Value >\n        class replace_value\n        {\n        public:\n            typedef const Value& result_type;\n            typedef const Value& first_argument_type;\n\n            // Rationale:\n            // The default constructor is required to allow the transform\n            // iterator to properly model the iterator concept.\n            replace_value()\n            {\n            }\n\n            replace_value(const Value& from, const Value& to)\n                :   m_impl(data(from, to))\n            {\n            }\n\n            const Value& operator()(const Value& x) const\n            {\n                return (x == m_impl->m_from) ? m_impl->m_to : x;\n            }\n\n        private:\n            struct data\n            {\n                data(const Value& from, const Value& to)\n                    : m_from(from)\n                    , m_to(to)\n                {\n                }\n\n                Value m_from;\n                Value m_to;\n            };\n            boost::optional<data> m_impl;\n        };\n\n        template< class R >\n        class replaced_range :\n            public boost::iterator_range<\n                boost::transform_iterator<\n                    replace_value< BOOST_DEDUCED_TYPENAME range_value<R>::type >,\n                    BOOST_DEDUCED_TYPENAME range_iterator<R>::type > >\n        {\n        private:\n            typedef replace_value< BOOST_DEDUCED_TYPENAME range_value<R>::type > Fn;\n\n            typedef boost::iterator_range<\n                boost::transform_iterator<\n                    replace_value< BOOST_DEDUCED_TYPENAME range_value<R>::type >,\n                    BOOST_DEDUCED_TYPENAME range_iterator<R>::type > > base_t;\n\n        public:\n            typedef BOOST_DEDUCED_TYPENAME range_value<R>::type value_type;\n\n            replaced_range( R& r, value_type from, value_type to )\n                : base_t( make_transform_iterator( boost::begin(r), Fn(from, to) ),\n                          make_transform_iterator( boost::end(r), Fn(from, to) ) )\n            { }\n        };\n\n        template< class T >\n        class replace_holder : public holder2<T>\n        {\n        public:\n            replace_holder( const T& from, const T& to )\n                : holder2<T>(from, to)\n            { }\n        private:\n            // not assignable\n            void operator=(const replace_holder&);\n        };\n\n        template< class SinglePassRange >\n        inline replaced_range<SinglePassRange>\n        operator|(\n            SinglePassRange& r,\n            const replace_holder<\n                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            return replaced_range<SinglePassRange>(r, f.val1, f.val2);\n        }\n\n        template< class SinglePassRange >\n        inline replaced_range<const SinglePassRange>\n        operator|(\n            const SinglePassRange& r,\n            const replace_holder<\n                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            return replaced_range<const SinglePassRange>(r, f.val1, f.val2);\n        }\n    } // 'range_detail'\n\n    using range_detail::replaced_range;\n\n    namespace adaptors\n    {\n        namespace\n        {\n            const range_detail::forwarder2<range_detail::replace_holder>\n                replaced =\n                    range_detail::forwarder2<range_detail::replace_holder>();\n        }\n\n        template<class SinglePassRange>\n        inline replaced_range<SinglePassRange>\n        replace(SinglePassRange& rng,\n                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type from,\n                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type to)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            return replaced_range<SinglePassRange>(rng, from, to);\n        }\n\n        template<class SinglePassRange>\n        inline replaced_range<const SinglePassRange>\n        replace(const SinglePassRange& rng,\n                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type from,\n                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type to)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            return replaced_range<const SinglePassRange>(rng, from ,to);\n        }\n\n    } // 'adaptors'\n} // 'boost'\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/replaced_if.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2007. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_REPLACED_IF_IMPL_HPP_INCLUDED\n#define BOOST_RANGE_ADAPTOR_REPLACED_IF_IMPL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/range/adaptor/argument_fwd.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n#include <boost/iterator/transform_iterator.hpp>\n#include <boost/optional/optional.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< class Pred, class Value >\n        class replace_value_if\n        {\n        public:\n            typedef const Value& result_type;\n            typedef const Value& first_argument_type;\n\n            // Rationale:\n            // required to allow the iterator to be default constructible.\n            replace_value_if()\n            {\n            }\n\n            replace_value_if(const Pred& pred, const Value& to)\n                : m_impl(data(pred, to))\n            {\n            }\n\n            const Value& operator()(const Value& x) const\n            {\n                return m_impl->m_pred(x) ? m_impl->m_to : x;\n            }\n\n        private:\n            struct data\n            {\n                data(const Pred& p, const Value& t)\n                    : m_pred(p), m_to(t)\n                {\n                }\n\n                Pred  m_pred;\n                Value m_to;\n            };\n            boost::optional<data> m_impl;\n        };\n\n        template< class Pred, class R >\n        class replaced_if_range :\n            public boost::iterator_range<\n                boost::transform_iterator<\n                    replace_value_if< Pred, BOOST_DEDUCED_TYPENAME range_value<R>::type >,\n                    BOOST_DEDUCED_TYPENAME range_iterator<R>::type > >\n        {\n        private:\n            typedef replace_value_if< Pred, BOOST_DEDUCED_TYPENAME range_value<R>::type > Fn;\n\n            typedef boost::iterator_range<\n                boost::transform_iterator<\n                    replace_value_if< Pred, BOOST_DEDUCED_TYPENAME range_value<R>::type >,\n                    BOOST_DEDUCED_TYPENAME range_iterator<R>::type > > base_t;\n\n        public:\n            typedef BOOST_DEDUCED_TYPENAME range_value<R>::type value_type;\n\n            replaced_if_range( R& r, const Pred& pred, value_type to )\n                : base_t( make_transform_iterator( boost::begin(r), Fn(pred, to) ),\n                          make_transform_iterator( boost::end(r), Fn(pred, to) ) )\n            { }\n        };\n\n        template< class Pred, class T >\n        class replace_if_holder\n        {\n        public:\n            replace_if_holder( const Pred& pred, const T& to )\n                : m_pred(pred), m_to(to)\n            { }\n\n            const Pred& pred() const { return m_pred; }\n            const T& to() const { return m_to; }\n\n        private:\n            Pred m_pred;\n            T m_to;\n        };\n\n        template< class Pred, class SinglePassRange >\n        inline replaced_if_range<Pred, SinglePassRange>\n        operator|(\n            SinglePassRange& r,\n            const replace_if_holder<\n                Pred,\n                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            return replaced_if_range<Pred, SinglePassRange>(\n                r, f.pred(), f.to());\n        }\n\n        template< class Pred, class SinglePassRange >\n        inline replaced_if_range<Pred, const SinglePassRange>\n        operator|(\n            const SinglePassRange& r,\n            const replace_if_holder<\n                Pred,\n                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            return replaced_if_range<Pred, const SinglePassRange>(\n                r, f.pred(), f.to());\n        }\n    } // 'range_detail'\n\n    using range_detail::replaced_if_range;\n\n    namespace adaptors\n    {\n        namespace\n        {\n            const range_detail::forwarder2TU<range_detail::replace_if_holder>\n                replaced_if =\n                    range_detail::forwarder2TU<range_detail::replace_if_holder>();\n        }\n\n        template<class Pred, class SinglePassRange>\n        inline replaced_if_range<Pred, SinglePassRange>\n        replace_if(SinglePassRange& rng, Pred pred,\n                   BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type to)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            return range_detail::replaced_if_range<Pred, SinglePassRange>(\n                rng, pred, to);\n        }\n\n        template<class Pred, class SinglePassRange>\n        inline replaced_if_range<Pred, const SinglePassRange>\n        replace_if(\n            const SinglePassRange& rng,\n            Pred pred,\n            BOOST_DEDUCED_TYPENAME range_value<const SinglePassRange>::type to)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            return range_detail::replaced_if_range<Pred, const SinglePassRange>(\n                rng, pred, to);\n        }\n    } // 'adaptors'\n\n} // 'boost'\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/reversed.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_REVERSED_HPP\n#define BOOST_RANGE_ADAPTOR_REVERSED_HPP\n\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/iterator/reverse_iterator.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< class R >\n        struct reversed_range : \n            public boost::iterator_range< \n                      boost::reverse_iterator<\n                        BOOST_DEDUCED_TYPENAME range_iterator<R>::type \n                                              >\n                                         >\n        {\n        private:\n            typedef boost::iterator_range< \n                      boost::reverse_iterator<\n                        BOOST_DEDUCED_TYPENAME range_iterator<R>::type \n                                              >\n                                         >\n                base;\n            \n        public:\n            typedef boost::reverse_iterator<BOOST_DEDUCED_TYPENAME range_iterator<R>::type> iterator;\n\n            explicit reversed_range( R& r ) \n                : base( iterator(boost::end(r)), iterator(boost::begin(r)) )\n            { }\n        };\n\n        struct reverse_forwarder {};\n        \n        template< class BidirectionalRange >\n        inline reversed_range<BidirectionalRange> \n        operator|( BidirectionalRange& r, reverse_forwarder )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                BidirectionalRangeConcept<BidirectionalRange>));\n\n            return reversed_range<BidirectionalRange>( r );\n        }\n\n        template< class BidirectionalRange >\n        inline reversed_range<const BidirectionalRange> \n        operator|( const BidirectionalRange& r, reverse_forwarder )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                BidirectionalRangeConcept<const BidirectionalRange>));\n\n            return reversed_range<const BidirectionalRange>( r ); \n        }\n        \n    } // 'range_detail'\n    \n    using range_detail::reversed_range;\n\n    namespace adaptors\n    { \n        namespace\n        {\n            const range_detail::reverse_forwarder reversed = \n                                            range_detail::reverse_forwarder();\n        }\n        \n        template<class BidirectionalRange>\n        inline reversed_range<BidirectionalRange>\n        reverse(BidirectionalRange& rng)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                BidirectionalRangeConcept<BidirectionalRange>));\n\n            return reversed_range<BidirectionalRange>(rng);\n        }\n        \n        template<class BidirectionalRange>\n        inline reversed_range<const BidirectionalRange>\n        reverse(const BidirectionalRange& rng)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                BidirectionalRangeConcept<const BidirectionalRange>));\n\n            return reversed_range<const BidirectionalRange>(rng);\n        }\n    } // 'adaptors'\n    \n} // 'boost'\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/sliced.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_SLICED_HPP\n#define BOOST_RANGE_ADAPTOR_SLICED_HPP\n\n#include <boost/range/adaptor/argument_fwd.hpp>\n#include <boost/range/size_type.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/concepts.hpp>\n\nnamespace boost\n{\n    namespace adaptors\n    {\n        struct sliced\n        {\n            sliced(std::size_t t_, std::size_t u_)\n                : t(t_), u(u_) {}\n            std::size_t t;\n            std::size_t u;\n        };\n\n        template< class RandomAccessRange >\n        class sliced_range : public boost::iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type >\n        {\n            typedef boost::iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type > base_t;\n        public:\n            template<typename Rng, typename T, typename U>\n            sliced_range(Rng& rng, T t, U u)\n                : base_t(boost::next(boost::begin(rng), t),\n                         boost::next(boost::begin(rng), u))\n            {\n            }\n        };\n\n        template< class RandomAccessRange >\n        inline sliced_range<RandomAccessRange>\n        slice( RandomAccessRange& rng, std::size_t t, std::size_t u )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                RandomAccessRangeConcept<RandomAccessRange>));\n\n            BOOST_ASSERT( t <= u && \"error in slice indices\" );\n            BOOST_ASSERT( static_cast<std::size_t>(boost::size(rng)) >= u &&\n                          \"second slice index out of bounds\" );\n\n            return sliced_range<RandomAccessRange>(rng, t, u);\n        }\n\n        template< class RandomAccessRange >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type >\n        slice( const RandomAccessRange& rng, std::size_t t, std::size_t u )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                RandomAccessRangeConcept<const RandomAccessRange>));\n\n            BOOST_ASSERT( t <= u && \"error in slice indices\" );\n            BOOST_ASSERT( static_cast<std::size_t>(boost::size(rng)) >= u &&\n                          \"second slice index out of bounds\" );\n\n            return sliced_range<const RandomAccessRange>(rng, t, u);\n        }\n\n        template< class RandomAccessRange >\n        inline sliced_range<RandomAccessRange>\n        operator|( RandomAccessRange& r, const sliced& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                RandomAccessRangeConcept<RandomAccessRange>));\n\n            return sliced_range<RandomAccessRange>( r, f.t, f.u );\n        }\n\n        template< class RandomAccessRange >\n        inline sliced_range<const RandomAccessRange>\n        operator|( const RandomAccessRange& r, const sliced& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                RandomAccessRangeConcept<const RandomAccessRange>));\n\n            return sliced_range<const RandomAccessRange>( r, f.t, f.u );\n        }\n\n    } // namespace adaptors\n    using adaptors::sliced_range;\n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/strided.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2007. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ADAPTOR_STRIDED_HPP_INCLUDED\n#define BOOST_RANGE_ADAPTOR_STRIDED_HPP_INCLUDED\n\n#include <boost/range/adaptor/argument_fwd.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <iterator>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        // strided_iterator for wrapping a forward traversal iterator\n        template<class BaseIterator, class Category>\n        class strided_iterator\n            : public iterator_facade<\n                strided_iterator<BaseIterator, Category>\n                , typename iterator_value<BaseIterator>::type\n                , forward_traversal_tag\n                , typename iterator_reference<BaseIterator>::type\n                , typename iterator_difference<BaseIterator>::type\n            >\n        {\n            friend class ::boost::iterator_core_access;\n\n            typedef iterator_facade<\n                strided_iterator<BaseIterator, Category>\n                , typename iterator_value<BaseIterator>::type\n                , forward_traversal_tag\n                , typename iterator_reference<BaseIterator>::type\n                , typename iterator_difference<BaseIterator>::type\n            > super_t;\n\n        public:\n            typedef typename super_t::difference_type difference_type;\n            typedef typename super_t::reference reference;\n            typedef BaseIterator base_iterator;\n            typedef std::forward_iterator_tag iterator_category;\n\n            strided_iterator()\n                : m_it()\n                , m_last()\n                , m_stride()\n            {\n            }\n\n            strided_iterator(base_iterator   it,\n                             base_iterator   last,\n                             difference_type stride)\n                : m_it(it)\n                , m_last(last)\n                , m_stride(stride)\n            {\n            }\n\n            template<class OtherIterator>\n            strided_iterator(\n                const strided_iterator<OtherIterator, Category>& other,\n                typename enable_if_convertible<\n                    OtherIterator,\n                    base_iterator\n                >::type* = 0\n            )\n                : m_it(other.base())\n                , m_last(other.base_end())\n                , m_stride(other.get_stride())\n            {\n            }\n\n            base_iterator base() const\n            {\n                return m_it;\n            }\n\n            base_iterator base_end() const\n            {\n                return m_last;\n            }\n\n            difference_type get_stride() const\n            {\n                return m_stride;\n            }\n\n        private:\n            void increment()\n            {\n                for (difference_type i = 0;\n                        (m_it != m_last) && (i < m_stride); ++i)\n                {\n                    ++m_it;\n                }\n            }\n\n            reference dereference() const\n            {\n                return *m_it;\n            }\n\n            template<class OtherIterator>\n            bool equal(\n                const strided_iterator<OtherIterator, Category>& other,\n                typename enable_if_convertible<\n                    OtherIterator,\n                    base_iterator\n                >::type* = 0) const\n            {\n                return m_it == other.m_it;\n            }\n\n            base_iterator m_it;\n            base_iterator m_last;\n            difference_type m_stride;\n        };\n\n        // strided_iterator for wrapping a bidirectional iterator\n        template<class BaseIterator>\n        class strided_iterator<BaseIterator, bidirectional_traversal_tag>\n            : public iterator_facade<\n                strided_iterator<BaseIterator, bidirectional_traversal_tag>\n                , typename iterator_value<BaseIterator>::type\n                , bidirectional_traversal_tag\n                , typename iterator_reference<BaseIterator>::type\n                , typename iterator_difference<BaseIterator>::type\n            >\n        {\n            friend class ::boost::iterator_core_access;\n\n            typedef iterator_facade<\n                strided_iterator<BaseIterator, bidirectional_traversal_tag>\n                , typename iterator_value<BaseIterator>::type\n                , bidirectional_traversal_tag\n                , typename iterator_reference<BaseIterator>::type\n                , typename iterator_difference<BaseIterator>::type\n            > super_t;\n        public:\n            typedef typename super_t::difference_type difference_type;\n            typedef typename super_t::reference reference;\n            typedef BaseIterator base_iterator;\n            typedef typename boost::make_unsigned<difference_type>::type\n                        size_type;\n            typedef std::bidirectional_iterator_tag iterator_category;\n\n            strided_iterator()\n                : m_it()\n                , m_offset()\n                , m_index()\n                , m_stride()\n            {\n            }\n\n            strided_iterator(base_iterator   it,\n                             size_type       index,\n                             difference_type stride)\n                : m_it(it)\n                , m_offset()\n                , m_index(index)\n                , m_stride(stride)\n            {\n                if (stride && ((m_index % stride) != 0))\n                    m_index += (stride - (m_index % stride));\n            }\n\n            template<class OtherIterator>\n            strided_iterator(\n                const strided_iterator<\n                    OtherIterator,\n                    bidirectional_traversal_tag\n                >& other,\n                typename enable_if_convertible<\n                    OtherIterator,\n                    base_iterator\n                >::type* = 0\n            )\n                : m_it(other.base())\n                , m_offset(other.get_offset())\n                , m_index(other.get_index())\n                , m_stride(other.get_stride())\n            {\n            }\n\n            base_iterator base() const\n            {\n                return m_it;\n            }\n\n            difference_type get_offset() const\n            {\n                return m_offset;\n            }\n\n            size_type get_index() const\n            {\n                return m_index;\n            }\n\n            difference_type get_stride() const\n            {\n                return m_stride;\n            }\n\n        private:\n            void increment()\n            {\n                m_offset += m_stride;\n            }\n\n            void decrement()\n            {\n                m_offset -= m_stride;\n            }\n\n            reference dereference() const\n            {\n                update();\n                return *m_it;\n            }\n\n            void update() const\n            {\n                std::advance(m_it, m_offset);\n                m_index += m_offset;\n                m_offset = 0;\n            }\n\n            template<class OtherIterator>\n            bool equal(\n                const strided_iterator<\n                    OtherIterator,\n                    bidirectional_traversal_tag\n                >& other,\n                typename enable_if_convertible<\n                    OtherIterator,\n                    base_iterator\n                >::type* = 0) const\n            {\n                return (m_index + m_offset) ==\n                            (other.get_index() + other.get_offset());\n            }\n\n            mutable base_iterator m_it;\n            mutable difference_type m_offset;\n            mutable size_type m_index;\n            difference_type m_stride;\n        };\n\n        // strided_iterator implementation for wrapping a random access iterator\n        template<class BaseIterator>\n        class strided_iterator<BaseIterator, random_access_traversal_tag>\n            : public iterator_facade<\n                strided_iterator<BaseIterator, random_access_traversal_tag>\n                , typename iterator_value<BaseIterator>::type\n                , random_access_traversal_tag\n                , typename iterator_reference<BaseIterator>::type\n                , typename iterator_difference<BaseIterator>::type\n            >\n        {\n            friend class ::boost::iterator_core_access;\n\n            typedef iterator_facade<\n                strided_iterator<BaseIterator, random_access_traversal_tag>\n                , typename iterator_value<BaseIterator>::type\n                , random_access_traversal_tag\n                , typename iterator_reference<BaseIterator>::type\n                , typename iterator_difference<BaseIterator>::type\n            > super_t;\n        public:\n            typedef typename super_t::difference_type difference_type;\n            typedef typename super_t::reference reference;\n            typedef BaseIterator base_iterator;\n            typedef std::random_access_iterator_tag iterator_category;\n\n            strided_iterator()\n                : m_it()\n                , m_first()\n                , m_index(0)\n                , m_stride()\n            {\n            }\n\n            strided_iterator(\n                base_iterator   first,\n                base_iterator   it,\n                difference_type stride\n            )\n                : m_it(it)\n                , m_first(first)\n                , m_index(stride ? (it - first) : difference_type())\n                , m_stride(stride)\n            {\n                if (stride && ((m_index % stride) != 0))\n                    m_index += (stride - (m_index % stride));\n            }\n\n            template<class OtherIterator>\n            strided_iterator(\n                const strided_iterator<\n                    OtherIterator,\n                    random_access_traversal_tag\n                >& other,\n                typename enable_if_convertible<\n                    OtherIterator,\n                    base_iterator\n                >::type* = 0\n            )\n                : m_it(other.base())\n                , m_first(other.base_begin())\n                , m_index(other.get_index())\n                , m_stride(other.get_stride())\n            {\n            }\n\n            base_iterator base_begin() const\n            {\n                return m_first;\n            }\n\n            base_iterator base() const\n            {\n                return m_it;\n            }\n\n            difference_type get_stride() const\n            {\n                return m_stride;\n            }\n\n            difference_type get_index() const\n            {\n                return m_index;\n            }\n\n        private:\n            void increment()\n            {\n                m_index += m_stride;\n            }\n\n            void decrement()\n            {\n                m_index -= m_stride;\n            }\n\n            void advance(difference_type offset)\n            {\n                m_index += (m_stride * offset);\n            }\n\n            // Implementation detail: only update the actual underlying iterator\n            // at the point of dereference. This is done so that the increment\n            // and decrement can overshoot the valid sequence as is required\n            // by striding. Since we can do all comparisons just with the index\n            // simply, and all dereferences must be within the valid range.\n            void update() const\n            {\n                m_it = m_first + m_index;\n            }\n\n            template<class OtherIterator>\n            difference_type distance_to(\n                const strided_iterator<\n                    OtherIterator,\n                    random_access_traversal_tag\n                >& other,\n                typename enable_if_convertible<\n                            OtherIterator, base_iterator>::type* = 0) const\n            {\n                BOOST_ASSERT((other.m_index - m_index) % m_stride == difference_type());\n                return (other.m_index - m_index) / m_stride;\n            }\n\n            template<class OtherIterator>\n            bool equal(\n                const strided_iterator<\n                    OtherIterator,\n                    random_access_traversal_tag\n                >& other,\n                typename enable_if_convertible<\n                            OtherIterator, base_iterator>::type* = 0) const\n            {\n                return m_index == other.m_index;\n            }\n\n            reference dereference() const\n            {\n                update();\n                return *m_it;\n            }\n\n        private:\n            mutable base_iterator m_it;\n            base_iterator m_first;\n            difference_type m_index;\n            difference_type m_stride;\n        };\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<Rng>::type,\n            forward_traversal_tag\n        >\n        make_begin_strided_iterator(\n            Rng& rng,\n            Difference stride,\n            forward_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<Rng>::type,\n                forward_traversal_tag\n            >(boost::begin(rng), boost::end(rng), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<const Rng>::type,\n            forward_traversal_tag\n        >\n        make_begin_strided_iterator(\n            const Rng& rng,\n            Difference stride,\n            forward_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<const Rng>::type,\n                forward_traversal_tag\n            >(boost::begin(rng), boost::end(rng), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<Rng>::type,\n            forward_traversal_tag\n        >\n        make_end_strided_iterator(\n            Rng& rng,\n            Difference stride,\n            forward_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<Rng>::type,\n                forward_traversal_tag\n            >(boost::end(rng), boost::end(rng), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<const Rng>::type,\n            forward_traversal_tag\n        >\n        make_end_strided_iterator(\n            const Rng& rng,\n            Difference stride,\n            forward_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<const Rng>::type,\n                forward_traversal_tag\n            >(boost::end(rng), boost::end(rng), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<Rng>::type,\n            bidirectional_traversal_tag\n        >\n        make_begin_strided_iterator(\n            Rng& rng,\n            Difference stride,\n            bidirectional_traversal_tag)\n        {\n            typedef typename range_difference<Rng>::type difference_type;\n\n            return strided_iterator<\n                typename range_iterator<Rng>::type,\n                bidirectional_traversal_tag\n            >(boost::begin(rng), difference_type(), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<const Rng>::type,\n            bidirectional_traversal_tag\n        >\n        make_begin_strided_iterator(\n            const Rng& rng,\n            Difference stride,\n            bidirectional_traversal_tag)\n        {\n            typedef typename range_difference<const Rng>::type difference_type;\n\n            return strided_iterator<\n                typename range_iterator<const Rng>::type,\n                bidirectional_traversal_tag\n            >(boost::begin(rng), difference_type(), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<Rng>::type,\n            bidirectional_traversal_tag\n        >\n        make_end_strided_iterator(\n            Rng& rng,\n            Difference stride,\n            bidirectional_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<Rng>::type,\n                bidirectional_traversal_tag\n            >(boost::end(rng), boost::size(rng), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<const Rng>::type,\n            bidirectional_traversal_tag\n        >\n        make_end_strided_iterator(\n            const Rng& rng,\n            Difference stride,\n            bidirectional_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<const Rng>::type,\n                bidirectional_traversal_tag\n            >(boost::end(rng), boost::size(rng), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<Rng>::type,\n            random_access_traversal_tag\n        >\n        make_begin_strided_iterator(\n            Rng& rng,\n            Difference stride,\n            random_access_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<Rng>::type,\n                random_access_traversal_tag\n            >(boost::begin(rng), boost::begin(rng), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<const Rng>::type,\n            random_access_traversal_tag\n        >\n        make_begin_strided_iterator(\n            const Rng& rng,\n            Difference stride,\n            random_access_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<const Rng>::type,\n                random_access_traversal_tag\n            >(boost::begin(rng), boost::begin(rng), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<Rng>::type,\n            random_access_traversal_tag\n        >\n        make_end_strided_iterator(\n            Rng& rng,\n            Difference stride,\n            random_access_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<Rng>::type,\n                random_access_traversal_tag\n            >(boost::begin(rng), boost::end(rng), stride);\n        }\n\n        template<class Rng, class Difference> inline\n        strided_iterator<\n            typename range_iterator<const Rng>::type,\n            random_access_traversal_tag\n        >\n        make_end_strided_iterator(\n            const Rng& rng,\n            Difference stride,\n            random_access_traversal_tag)\n        {\n            return strided_iterator<\n                typename range_iterator<const Rng>::type,\n                random_access_traversal_tag\n            >(boost::begin(rng), boost::end(rng), stride);\n        }\n\n        template<\n            class Rng,\n            class Category =\n                typename iterators::pure_iterator_traversal<\n                    typename range_iterator<Rng>::type\n                >::type\n        >\n        class strided_range\n            : public iterator_range<\n                range_detail::strided_iterator<\n                    typename range_iterator<Rng>::type,\n                    Category\n                >\n            >\n        {\n            typedef range_detail::strided_iterator<\n                typename range_iterator<Rng>::type,\n                Category\n            > iter_type;\n            typedef iterator_range<iter_type> super_t;\n        public:\n            template<class Difference>\n            strided_range(Difference stride, Rng& rng)\n                : super_t(\n                    range_detail::make_begin_strided_iterator(\n                        rng, stride,\n                        typename iterator_traversal<\n                            typename range_iterator<Rng>::type\n                        >::type()),\n                    range_detail::make_end_strided_iterator(\n                        rng, stride,\n                        typename iterator_traversal<\n                            typename range_iterator<Rng>::type\n                        >::type()))\n            {\n                BOOST_ASSERT( stride >= 0 );\n            }\n        };\n\n        template<class Difference>\n        class strided_holder : public holder<Difference>\n        {\n        public:\n            explicit strided_holder(Difference value)\n                : holder<Difference>(value)\n            {\n            }\n        };\n\n        template<class Rng, class Difference>\n        inline strided_range<Rng>\n        operator|(Rng& rng, const strided_holder<Difference>& stride)\n        {\n            return strided_range<Rng>(stride.val, rng);\n        }\n\n        template<class Rng, class Difference>\n        inline strided_range<const Rng>\n        operator|(const Rng& rng, const strided_holder<Difference>& stride)\n        {\n            return strided_range<const Rng>(stride.val, rng);\n        }\n\n    } // namespace range_detail\n\n    using range_detail::strided_range;\n\n    namespace adaptors\n    {\n\n        namespace\n        {\n            const range_detail::forwarder<range_detail::strided_holder>\n                strided = range_detail::forwarder<\n                            range_detail::strided_holder>();\n        }\n\n        template<class Range, class Difference>\n        inline strided_range<Range>\n        stride(Range& rng, Difference step)\n        {\n            return strided_range<Range>(step, rng);\n        }\n\n        template<class Range, class Difference>\n        inline strided_range<const Range>\n        stride(const Range& rng, Difference step)\n        {\n            return strided_range<const Range>(step, rng);\n        }\n\n    } // namespace 'adaptors'\n} // namespace 'boost'\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/tokenized.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_TOKENIZED_HPP\n#define BOOST_RANGE_ADAPTOR_TOKENIZED_HPP\n\n#include <boost/regex.hpp>\n#include <boost/range/iterator_range.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\n        template< class R >\n        struct tokenized_range : \n            public boost::iterator_range< \n                      boost::regex_token_iterator< \n                          BOOST_DEDUCED_TYPENAME range_iterator<R>::type \n                                              >\n                                         >\n        {\n        private:\n            typedef           \n                boost::regex_token_iterator< \n                          BOOST_DEDUCED_TYPENAME range_iterator<R>::type \n                                            >\n                regex_iter;\n            \n            typedef BOOST_DEDUCED_TYPENAME regex_iter::regex_type \n                regex_type;\n        \n            typedef boost::iterator_range<regex_iter> \n                base;\n\n        public:\n            template< class Regex, class Submatch, class Flag >\n            tokenized_range( R& r, const Regex& re, const Submatch& sub, Flag f )\n              : base( regex_iter( boost::begin(r), boost::end(r), \n                                  regex_type(re), sub, f ),\n                      regex_iter() )\n            { }\n        };\n\n        template< class T, class U, class V >\n        struct regex_holder\n        {\n            T  re;\n            U  sub;\n            V  f;\n\n            regex_holder( const T& rex, const U& subm, V flag ) :\n                re(rex), sub(subm), f(flag)\n            { }\n        private:\n            // Not assignable\n            void operator=(const regex_holder&);\n        };\n\n        struct regex_forwarder\n        {           \n            template< class Regex >\n            regex_holder<Regex,int,regex_constants::match_flag_type>\n            operator()( const Regex& re, \n                        int submatch = 0,    \n                        regex_constants::match_flag_type f = \n                            regex_constants::match_default ) const\n            {\n                return regex_holder<Regex,int,\n                           regex_constants::match_flag_type>( re, submatch, f );\n            }\n             \n            template< class Regex, class Submatch >\n            regex_holder<Regex,Submatch,regex_constants::match_flag_type> \n            operator()( const Regex& re, \n                        const Submatch& sub, \n                        regex_constants::match_flag_type f = \n                            regex_constants::match_default ) const\n            {\n                return regex_holder<Regex,Submatch,\n                           regex_constants::match_flag_type>( re, sub, f ); \n            }\n        };\n        \n        template< class BidirectionalRng, class R, class S, class F >\n        inline tokenized_range<BidirectionalRng> \n        operator|( BidirectionalRng& r, \n                   const regex_holder<R,S,F>& f )\n        {\n            return tokenized_range<BidirectionalRng>( r, f.re, f.sub, f.f );   \n        }\n\n        template< class BidirectionalRng, class R, class S, class F  >\n        inline tokenized_range<const BidirectionalRng> \n        operator|( const BidirectionalRng& r, \n                   const regex_holder<R,S,F>& f )\n        {\n            return tokenized_range<const BidirectionalRng>( r, f.re, f.sub, f.f );\n        }\n        \n    } // 'range_detail'\n\n    using range_detail::tokenized_range;\n\n    namespace adaptors\n    { \n        namespace\n        {\n            const range_detail::regex_forwarder tokenized = \n                    range_detail::regex_forwarder();\n        }\n        \n        template<class BidirectionalRange, class Regex, class Submatch, class Flag>\n        inline tokenized_range<BidirectionalRange>\n        tokenize(BidirectionalRange& rng, const Regex& reg, const Submatch& sub, Flag f)\n        {\n            return tokenized_range<BidirectionalRange>(rng, reg, sub, f);\n        }\n        \n        template<class BidirectionalRange, class Regex, class Submatch, class Flag>\n        inline tokenized_range<const BidirectionalRange>\n        tokenize(const BidirectionalRange& rng, const Regex& reg, const Submatch& sub, Flag f)\n        {\n            return tokenized_range<const BidirectionalRange>(rng, reg, sub, f);\n        }\n    } // 'adaptors'\n    \n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/transformed.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_TRANSFORMED_HPP\n#define BOOST_RANGE_ADAPTOR_TRANSFORMED_HPP\n\n#include <boost/range/adaptor/argument_fwd.hpp>\n#include <boost/range/detail/default_constructible_unary_fn.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/iterator/transform_iterator.hpp>\n#include <boost/utility/result_of.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        // A type generator to produce the transform_iterator type conditionally\n        // including a wrapped predicate as appropriate.\n        template<typename P, typename It>\n        struct transform_iterator_gen\n        {\n            typedef transform_iterator<\n                typename default_constructible_unary_fn_gen<\n                    P,\n                    typename transform_iterator<P, It>::reference\n                >::type,\n                It\n            > type;\n        };\n\n        template< class F, class R >\n        struct transformed_range :\n            public boost::iterator_range<\n                typename transform_iterator_gen<\n                    F, typename range_iterator<R>::type>::type>\n        {\n        private:\n            typedef typename transform_iterator_gen<\n                F, typename range_iterator<R>::type>::type transform_iter_t;\n\n            typedef boost::iterator_range<transform_iter_t> base;\n\n        public:\n            typedef typename default_constructible_unary_fn_gen<\n                F,\n                typename transform_iterator<\n                    F,\n                    typename range_iterator<R>::type\n                >::reference\n            >::type transform_fn_type;\n\n            typedef R source_range_type;\n\n            transformed_range(transform_fn_type f, R& r)\n                : base(transform_iter_t(boost::begin(r), f),\n                       transform_iter_t(boost::end(r), f))\n            {\n            }\n        };\n\n        template< class T >\n        struct transform_holder : holder<T>\n        {\n            transform_holder( T r ) : holder<T>(r)\n            {\n            }\n        };\n\n        template< class SinglePassRange, class UnaryFunction >\n        inline transformed_range<UnaryFunction,SinglePassRange>\n        operator|( SinglePassRange& r,\n                   const transform_holder<UnaryFunction>& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            return transformed_range<UnaryFunction,SinglePassRange>( f.val, r );\n        }\n\n        template< class SinglePassRange, class UnaryFunction >\n        inline transformed_range<UnaryFunction, const SinglePassRange>\n        operator|( const SinglePassRange& r,\n                   const transform_holder<UnaryFunction>& f )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n           return transformed_range<UnaryFunction, const SinglePassRange>(\n               f.val, r);\n        }\n\n    } // 'range_detail'\n\n    using range_detail::transformed_range;\n\n    namespace adaptors\n    {\n        namespace\n        {\n            const range_detail::forwarder<range_detail::transform_holder>\n                    transformed =\n                      range_detail::forwarder<range_detail::transform_holder>();\n        }\n\n        template<class UnaryFunction, class SinglePassRange>\n        inline transformed_range<UnaryFunction, SinglePassRange>\n        transform(SinglePassRange& rng, UnaryFunction fn)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            return transformed_range<UnaryFunction, SinglePassRange>(fn, rng);\n        }\n\n        template<class UnaryFunction, class SinglePassRange>\n        inline transformed_range<UnaryFunction, const SinglePassRange>\n        transform(const SinglePassRange& rng, UnaryFunction fn)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            return transformed_range<UnaryFunction, const SinglePassRange>(\n                fn, rng);\n        }\n    } // 'adaptors'\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/type_erased.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ADAPTOR_TYPE_ERASED_HPP_INCLUDED\n#define BOOST_RANGE_ADAPTOR_TYPE_ERASED_HPP_INCLUDED\n\n#include <boost/range/reference.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/any_range.hpp>\n#include <boost/range/concepts.hpp>\n\nnamespace boost\n{\n    namespace adaptors\n    {\n        template<\n            class Value = use_default\n          , class Traversal = use_default\n          , class Reference = use_default\n          , class Difference = use_default\n          , class Buffer = use_default\n        >\n        struct type_erased\n        {\n        };\n\n        template<\n            class SinglePassRange\n          , class Value\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        typename any_range_type_generator<\n            SinglePassRange\n          , Value\n          , Traversal\n          , Reference\n          , Difference\n          , Buffer\n        >::type\n        operator|(SinglePassRange& rng,\n                  type_erased<\n                        Value\n                      , Traversal\n                      , Reference\n                      , Difference\n                      , Buffer\n                    >)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            typedef typename any_range_type_generator<\n                SinglePassRange\n              , Value\n              , Traversal\n              , Reference\n              , Difference\n              , Buffer\n            >::type range_type;\n            return range_type(boost::begin(rng), boost::end(rng));\n        }\n\n        template<\n            class SinglePassRange\n          , class Value\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        typename any_range_type_generator<\n            const SinglePassRange\n          , Value\n          , Traversal\n          , Reference\n          , Difference\n          , Buffer\n        >::type\n        operator|(const SinglePassRange& rng,\n                  type_erased<\n                            Value\n                          , Traversal\n                          , Reference\n                          , Difference\n                          , Buffer\n                    >)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            typedef typename any_range_type_generator<\n                const SinglePassRange\n              , Value\n              , Traversal\n              , Reference\n              , Difference\n              , Buffer\n            >::type range_type;\n            return range_type(boost::begin(rng), boost::end(rng));\n        }\n\n        template<\n            class SinglePassRange\n          , class Value\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        typename any_range_type_generator<\n            SinglePassRange\n          , Value\n          , Traversal\n          , Reference\n          , Difference\n          , Buffer\n        >::type\n        type_erase(SinglePassRange& rng\n                 , type_erased<\n                            Value\n                          , Traversal\n                          , Reference\n                          , Difference\n                          , Buffer\n                    > = type_erased<>()\n                )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<SinglePassRange>));\n\n            typedef typename any_range_type_generator<\n                SinglePassRange\n              , Value\n              , Traversal\n              , Reference\n              , Difference\n              , Buffer\n            >::type range_type;\n\n            return range_type(boost::begin(rng), boost::end(rng));\n        }\n\n        template<\n            class SinglePassRange\n          , class Value\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        typename any_range_type_generator<\n            const SinglePassRange\n          , Value\n          , Traversal\n          , Reference\n          , Difference\n          , Buffer\n        >::type\n        type_erase(const SinglePassRange& rng\n                 , type_erased<\n                            Value\n                          , Traversal\n                          , Reference\n                          , Difference\n                          , Buffer\n                    > = type_erased<>()\n                )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n            typedef typename any_range_type_generator<\n                const SinglePassRange\n              , Value\n              , Traversal\n              , Reference\n              , Difference\n              , Buffer\n            >::type range_type;\n\n            return range_type(boost::begin(rng), boost::end(rng));\n        }\n    }\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptor/uniqued.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_UNIQUED_IMPL_HPP\n#define BOOST_RANGE_ADAPTOR_UNIQUED_IMPL_HPP\n\n#include <boost/range/adaptor/adjacent_filtered.hpp>\n#include <boost/range/concepts.hpp>\n\nnamespace boost\n{\n\n    namespace range_detail\n    {\n        struct unique_forwarder { };\n\n        struct unique_not_equal_to\n        {\n            typedef bool result_type;\n\n            template< class T >\n            bool operator()( const T& l, const T& r ) const\n            {\n                return !(l == r);\n            }\n        };\n\n        template<class ForwardRng>\n        class uniqued_range : public adjacent_filtered_range<unique_not_equal_to, ForwardRng, true>\n        {\n            typedef adjacent_filtered_range<unique_not_equal_to, ForwardRng, true> base;\n        public:\n            explicit uniqued_range(ForwardRng& rng)\n                : base(unique_not_equal_to(), rng)\n            {\n            }\n        };\n\n        template< class ForwardRng >\n        inline uniqued_range<ForwardRng>\n        operator|( ForwardRng& r,\n                   unique_forwarder )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));\n            return uniqued_range<ForwardRng>(r);\n        }\n\n        template< class ForwardRng >\n        inline uniqued_range<const ForwardRng>\n        operator|( const ForwardRng& r,\n                   unique_forwarder )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));\n            return uniqued_range<const ForwardRng>(r);\n        }\n\n    } // 'range_detail'\n\n    using range_detail::uniqued_range;\n\n    namespace adaptors\n    {\n        namespace\n        {\n            const range_detail::unique_forwarder uniqued =\n                       range_detail::unique_forwarder();\n        }\n\n        template<class ForwardRange>\n        inline uniqued_range<ForwardRange>\n        unique(ForwardRange& rng)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n            return uniqued_range<ForwardRange>(rng);\n        }\n\n        template<class ForwardRange>\n        inline uniqued_range<const ForwardRange>\n        unique(const ForwardRange& rng)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT((\n                ForwardRangeConcept<const ForwardRange>));\n\n            return uniqued_range<const ForwardRange>(rng);\n        }\n    } // 'adaptors'\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/adaptors.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2007.\n//  Copyright Thorsten Ottosen 2006.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTORS_HPP\n#define BOOST_RANGE_ADAPTORS_HPP\n\n#include <boost/range/adaptor/adjacent_filtered.hpp>\n#include <boost/range/adaptor/copied.hpp>\n#include <boost/range/adaptor/filtered.hpp>\n#include <boost/range/adaptor/formatted.hpp>\n#include <boost/range/adaptor/indexed.hpp>\n#include <boost/range/adaptor/indirected.hpp>\n#include <boost/range/adaptor/map.hpp>\n#include <boost/range/adaptor/replaced.hpp>\n#include <boost/range/adaptor/replaced_if.hpp>\n#include <boost/range/adaptor/reversed.hpp>\n#include <boost/range/adaptor/sliced.hpp>\n#include <boost/range/adaptor/strided.hpp>\n#include <boost/range/adaptor/tokenized.hpp>\n#include <boost/range/adaptor/transformed.hpp>\n#include <boost/range/adaptor/uniqued.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/adjacent_find.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_ADJACENT_FIND_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_ADJACENT_FIND_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function adjacent_find\n///\n/// range-based version of the adjacent_find std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate< typename ForwardRange >\ninline typename range_iterator<ForwardRange>::type\nadjacent_find(ForwardRange & rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    return std::adjacent_find(boost::begin(rng),boost::end(rng));\n}\n\n/// \\overload\ntemplate< typename ForwardRange >\ninline typename range_iterator<const ForwardRange>::type\nadjacent_find(const ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    return std::adjacent_find(boost::begin(rng),boost::end(rng));\n}\n\n/// \\overload\ntemplate< typename ForwardRange, typename BinaryPredicate >\ninline typename range_iterator<ForwardRange>::type\nadjacent_find(ForwardRange & rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,\n        typename range_value<ForwardRange>::type,\n        typename range_value<ForwardRange>::type>));\n    return std::adjacent_find(boost::begin(rng),boost::end(rng),pred);\n}\n\n/// \\overload\ntemplate< typename ForwardRange, typename BinaryPredicate >\ninline typename range_iterator<const ForwardRange>::type\nadjacent_find(const ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,\n        typename range_value<const ForwardRange>::type,\n        typename range_value<const ForwardRange>::type>));\n    return std::adjacent_find(boost::begin(rng),boost::end(rng),pred);\n}\n\n//  range_return overloads\n\n/// \\overload\ntemplate< range_return_value re, typename ForwardRange >\ninline typename range_return<ForwardRange,re>::type\nadjacent_find(ForwardRange & rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    return range_return<ForwardRange,re>::\n        pack(std::adjacent_find(boost::begin(rng),boost::end(rng)),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, typename ForwardRange >\ninline typename range_return<const ForwardRange,re>::type\nadjacent_find(const ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    return range_return<const ForwardRange,re>::\n        pack(std::adjacent_find(boost::begin(rng),boost::end(rng)),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, typename ForwardRange, typename BinaryPredicate >\ninline typename range_return<ForwardRange,re>::type\nadjacent_find(ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,\n        typename range_value<ForwardRange>::type,\n        typename range_value<ForwardRange>::type>));\n    return range_return<ForwardRange,re>::\n        pack(std::adjacent_find(boost::begin(rng),boost::end(rng),pred),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, typename ForwardRange, typename BinaryPredicate >\ninline typename range_return<const ForwardRange,re>::type\nadjacent_find(const ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    return range_return<const ForwardRange,re>::\n        pack(std::adjacent_find(boost::begin(rng),boost::end(rng),pred),\n             rng);\n}\n\n    } // namespace range\n    using range::adjacent_find;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/binary_search.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_BINARY_SEARCH_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_BINARY_SEARCH_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function binary_search\n///\n/// range-based version of the binary_search std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class ForwardRange, class Value>\ninline bool binary_search(const ForwardRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::binary_search(boost::begin(rng), boost::end(rng), val);\n}\n\n/// \\overload\ntemplate<class ForwardRange, class Value, class BinaryPredicate>\ninline bool binary_search(const ForwardRange& rng, const Value& val,\n                          BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::binary_search(boost::begin(rng), boost::end(rng), val, pred);\n}\n\n    } // namespace range\n    using range::binary_search;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/copy.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_COPY_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_COPY_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function copy\n///\n/// range-based version of the copy std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\n/// \\pre OutputIterator is a model of the OutputIteratorConcept\ntemplate< class SinglePassRange, class OutputIterator >\ninline OutputIterator copy(const SinglePassRange& rng, OutputIterator out)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return std::copy(boost::begin(rng),boost::end(rng),out);\n}\n\n    } // namespace range\n    using range::copy;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/copy_backward.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_COPY_BACKWARD_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_COPY_BACKWARD_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function copy_backward\n///\n/// range-based version of the copy_backwards std algorithm\n///\n/// \\pre BidirectionalRange is a model of the BidirectionalRangeConcept\n/// \\pre BidirectionalTraversalWriteableIterator is a model of the BidirectionalIteratorConcept\n/// \\pre BidirectionalTraversalWriteableIterator is a model of the WriteableIteratorConcept\ntemplate< class BidirectionalRange, class BidirectionalTraversalWriteableIterator >\ninline BidirectionalTraversalWriteableIterator\ncopy_backward(const BidirectionalRange& rng,\n              BidirectionalTraversalWriteableIterator out)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    return std::copy_backward(boost::begin(rng), boost::end(rng), out);\n}\n\n    } // namespace range\n    using range::copy_backward;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/count.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_COUNT_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_COUNT_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/difference_type.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function count\n///\n/// range-based version of the count std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\ntemplate< class SinglePassRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_difference<SinglePassRange>::type\ncount(SinglePassRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));\n    return std::count(boost::begin(rng), boost::end(rng), val);\n}\n\n/// \\overload\ntemplate< class SinglePassRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_difference<SinglePassRange const>::type\ncount(const SinglePassRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return std::count(boost::begin(rng), boost::end(rng), val);\n}\n\n    } // namespace range\n    using range::count;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/count_if.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_COUNT_IF_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_COUNT_IF_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/difference_type.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function count_if\n///\n/// range-based version of the count_if std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\n/// \\pre UnaryPredicate is a model of the UnaryPredicateConcept\ntemplate< class SinglePassRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME boost::range_difference<SinglePassRange>::type\ncount_if(SinglePassRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));\n    return std::count_if(boost::begin(rng), boost::end(rng), pred);\n}\n\n/// \\overload\ntemplate< class SinglePassRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME boost::range_difference<const SinglePassRange>::type\ncount_if(const SinglePassRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return std::count_if(boost::begin(rng), boost::end(rng), pred);\n}\n\n    } // namespace range\n    using range::count_if;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/equal.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EQUAL_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EQUAL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <iterator>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        // An implementation of equality comparison that is optimized for iterator\n        // traversal categories less than RandomAccessTraversal.\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2,\n                  class IteratorCategoryTag1,\n                  class IteratorCategoryTag2 >\n        inline bool equal_impl( SinglePassTraversalReadableIterator1 first1,\n                                SinglePassTraversalReadableIterator1 last1,\n                                SinglePassTraversalReadableIterator2 first2,\n                                SinglePassTraversalReadableIterator2 last2,\n                                IteratorCategoryTag1,\n                                IteratorCategoryTag2 )\n        {\n            for (;;)\n            {\n                // If we have reached the end of the left range then this is\n                // the end of the loop. They are equal if and only if we have\n                // simultaneously reached the end of the right range.\n                if (first1 == last1)\n                    return first2 == last2;\n\n                // If we have reached the end of the right range at this line\n                // it indicates that the right range is shorter than the left\n                // and hence the result is false.\n                if (first2 == last2)\n                    return false;\n\n                // continue looping if and only if the values are equal\n                if (*first1 != *first2)\n                    break;\n\n                ++first1;\n                ++first2;\n            }\n\n            // Reaching this line in the algorithm indicates that a value\n            // inequality has been detected.\n            return false;\n        }\n\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2,\n                  class IteratorCategoryTag1,\n                  class IteratorCategoryTag2,\n                  class BinaryPredicate >\n        inline bool equal_impl( SinglePassTraversalReadableIterator1 first1,\n                                SinglePassTraversalReadableIterator1 last1,\n                                SinglePassTraversalReadableIterator2 first2,\n                                SinglePassTraversalReadableIterator2 last2,\n                                BinaryPredicate                      pred,\n                                IteratorCategoryTag1,\n                                IteratorCategoryTag2 )\n        {\n            for (;;)\n            {\n                // If we have reached the end of the left range then this is\n                // the end of the loop. They are equal if and only if we have\n                // simultaneously reached the end of the right range.\n                if (first1 == last1)\n                    return first2 == last2;\n\n                // If we have reached the end of the right range at this line\n                // it indicates that the right range is shorter than the left\n                // and hence the result is false.\n                if (first2 == last2)\n                    return false;\n\n                // continue looping if and only if the values are equal\n                if (!pred(*first1, *first2))\n                    break;\n\n                ++first1;\n                ++first2;\n            }\n\n            // Reaching this line in the algorithm indicates that a value\n            // inequality has been detected.\n            return false;\n        }\n\n        // An implementation of equality comparison that is optimized for\n        // random access iterators.\n        template< class RandomAccessTraversalReadableIterator1,\n                  class RandomAccessTraversalReadableIterator2 >\n        inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1,\n                                RandomAccessTraversalReadableIterator1 last1,\n                                RandomAccessTraversalReadableIterator2 first2,\n                                RandomAccessTraversalReadableIterator2 last2,\n                                std::random_access_iterator_tag,\n                                std::random_access_iterator_tag )\n        {\n            return ((last1 - first1) == (last2 - first2))\n                && std::equal(first1, last1, first2);\n        }\n\n        template< class RandomAccessTraversalReadableIterator1,\n                  class RandomAccessTraversalReadableIterator2,\n                  class BinaryPredicate >\n        inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1,\n                                RandomAccessTraversalReadableIterator1 last1,\n                                RandomAccessTraversalReadableIterator2 first2,\n                                RandomAccessTraversalReadableIterator2 last2,\n                                BinaryPredicate                        pred,\n                                std::random_access_iterator_tag,\n                                std::random_access_iterator_tag )\n        {\n            return ((last1 - first1) == (last2 - first2))\n                && std::equal(first1, last1, first2, pred);\n        }\n\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2 >\n        inline bool equal( SinglePassTraversalReadableIterator1 first1,\n                           SinglePassTraversalReadableIterator1 last1,\n                           SinglePassTraversalReadableIterator2 first2,\n                           SinglePassTraversalReadableIterator2 last2 )\n        {\n            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1;\n            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2;\n\n            return equal_impl(first1, last1, first2, last2, tag1, tag2);\n        }\n\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2,\n                  class BinaryPredicate >\n        inline bool equal( SinglePassTraversalReadableIterator1 first1,\n                           SinglePassTraversalReadableIterator1 last1,\n                           SinglePassTraversalReadableIterator2 first2,\n                           SinglePassTraversalReadableIterator2 last2,\n                           BinaryPredicate                      pred )\n        {\n            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1;\n            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2;\n\n            return equal_impl(first1, last1, first2, last2, pred, tag1, tag2);\n        }\n\n    } // namespace range_detail\n\n    namespace range\n    {\n\n        /// \\brief template function equal\n        ///\n        /// range-based version of the equal std algorithm\n        ///\n        /// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n        /// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n        /// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\n        template< class SinglePassRange1, class SinglePassRange2 >\n        inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2 )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n            return ::boost::range_detail::equal(\n                ::boost::begin(rng1), ::boost::end(rng1),\n                ::boost::begin(rng2), ::boost::end(rng2) );\n        }\n\n        /// \\overload\n        template< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >\n        inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2,\n                           BinaryPredicate pred )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n            return ::boost::range_detail::equal(\n                ::boost::begin(rng1), ::boost::end(rng1),\n                ::boost::begin(rng2), ::boost::end(rng2),\n                pred);\n        }\n\n    } // namespace range\n    using ::boost::range::equal;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/equal_range.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EQUAL_RANGE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EQUAL_RANGE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function equal_range\n///\n/// range-based version of the equal_range std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre SortPredicate is a model of the BinaryPredicateConcept\ntemplate<class ForwardRange, class Value>\ninline std::pair<\n        BOOST_DEDUCED_TYPENAME boost::range_iterator<ForwardRange>::type,\n        BOOST_DEDUCED_TYPENAME boost::range_iterator<ForwardRange>::type\n       >\nequal_range(ForwardRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::equal_range(boost::begin(rng), boost::end(rng), val);\n}\n\n/// \\overload\ntemplate<class ForwardRange, class Value>\ninline std::pair<\n        BOOST_DEDUCED_TYPENAME boost::range_iterator<const ForwardRange>::type,\n        BOOST_DEDUCED_TYPENAME boost::range_iterator<const ForwardRange>::type\n       >\nequal_range(const ForwardRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::equal_range(boost::begin(rng), boost::end(rng), val);\n}\n\n/// \\overload\ntemplate<class ForwardRange, class Value, class SortPredicate>\ninline std::pair<\n        BOOST_DEDUCED_TYPENAME boost::range_iterator<ForwardRange>::type,\n        BOOST_DEDUCED_TYPENAME boost::range_iterator<ForwardRange>::type\n       >\nequal_range(ForwardRange& rng, const Value& val, SortPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::equal_range(boost::begin(rng), boost::end(rng), val, pred);\n}\n\n/// \\overload\ntemplate<class ForwardRange, class Value, class SortPredicate>\ninline std::pair<\n        BOOST_DEDUCED_TYPENAME boost::range_iterator<const ForwardRange>::type,\n        BOOST_DEDUCED_TYPENAME boost::range_iterator<const ForwardRange>::type\n       >\nequal_range(const ForwardRange& rng, const Value& val, SortPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::equal_range(boost::begin(rng), boost::end(rng), val, pred);\n}\n\n    } // namespace range\n    using range::equal_range;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/fill.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_FILL_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_FILL_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function fill\n///\n/// range-based version of the fill std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\ntemplate< class ForwardRange, class Value >\ninline ForwardRange& fill(ForwardRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    std::fill(boost::begin(rng), boost::end(rng), val);\n    return rng;\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Value >\ninline const ForwardRange& fill(const ForwardRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    std::fill(boost::begin(rng), boost::end(rng), val);\n    return rng;\n}\n\n    } // namespace range\n    using range::fill;\n}\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/fill_n.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_FILL_N_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_FILL_N_HPP_INCLUDED\n\n#include <boost/assert.hpp>\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function fill_n\n///\n/// range-based version of the fill_n std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre n <= std::distance(boost::begin(rng), boost::end(rng))\ntemplate< class ForwardRange, class Size, class Value >\ninline ForwardRange& fill_n(ForwardRange& rng, Size n, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    BOOST_ASSERT( static_cast<Size>(std::distance(boost::begin(rng), boost::end(rng))) >= n );\n    std::fill_n(boost::begin(rng), n, val);\n    return rng;\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Size, class Value >\ninline const ForwardRange& fill_n(const ForwardRange& rng, Size n, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    BOOST_ASSERT( static_cast<Size>(std::distance(boost::begin(rng), boost::end(rng))) >= n );\n    std::fill_n(boost::begin(rng), n, val);\n    return rng;\n}\n\n    } // namespace range\n    using range::fill_n;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/find.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_FIND_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_FIND_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function find\n///\n/// range-based version of the find std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\ntemplate< class SinglePassRange, class Value >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<SinglePassRange>,\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type\n>::type\nfind( SinglePassRange& rng, const Value& val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));\n    return std::find(boost::begin(rng), boost::end(rng), val);\n}\n\n/// \\overload\ntemplate< class SinglePassRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange>::type\nfind( const SinglePassRange& rng, const Value& val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return std::find(boost::begin(rng), boost::end(rng), val);\n}\n\n// range_return overloads\n\n/// \\overload\ntemplate< range_return_value re, class SinglePassRange, class Value >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<SinglePassRange>,\n    BOOST_DEDUCED_TYPENAME range_return<SinglePassRange,re>::type\n>::type\nfind( SinglePassRange& rng, const Value& val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));\n    return range_return<SinglePassRange,re>::\n        pack(std::find(boost::begin(rng), boost::end(rng), val),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class SinglePassRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange,re>::type\nfind( const SinglePassRange& rng, const Value& val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return range_return<const SinglePassRange,re>::\n        pack(std::find(boost::begin(rng), boost::end(rng), val),\n             rng);\n}\n\n    } // namespace range\n    using range::find;\n}\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/find_end.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_FIND_END_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_FIND_END_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function find_end\n///\n/// range-based version of the find_end std algorithm\n///\n/// \\pre ForwardRange1 is a model of the ForwardRangeConcept\n/// \\pre ForwardRange2 is a model of the ForwardRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate< class ForwardRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange1>,\n    BOOST_DEDUCED_TYPENAME range_iterator< ForwardRange1 >::type\n>::type\nfind_end(ForwardRange1 & rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return std::find_end(boost::begin(rng1),boost::end(rng1),\n                         boost::begin(rng2),boost::end(rng2));\n}\n\n/// \\overload\ntemplate< class ForwardRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME range_iterator< const ForwardRange1 >::type\nfind_end(const ForwardRange1 & rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return std::find_end(boost::begin(rng1),boost::end(rng1),\n                         boost::begin(rng2),boost::end(rng2));\n}\n\n/// \\overload\ntemplate< class ForwardRange1, class ForwardRange2, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange1>,\n    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange1>::type\n>::type\nfind_end(ForwardRange1 & rng1, const ForwardRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return std::find_end(boost::begin(rng1),boost::end(rng1),\n                         boost::begin(rng2),boost::end(rng2),pred);\n}\n\n/// \\overload\ntemplate< class ForwardRange1, class ForwardRange2, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange1>::type\nfind_end(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return std::find_end(boost::begin(rng1),boost::end(rng1),\n                         boost::begin(rng2),boost::end(rng2),pred);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange1>,\n    BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type\n>::type\nfind_end(ForwardRange1& rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return range_return<ForwardRange1,re>::\n        pack(std::find_end(boost::begin(rng1), boost::end(rng1),\n                           boost::begin(rng2), boost::end(rng2)),\n             rng1);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type\nfind_end(const ForwardRange1& rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return range_return<const ForwardRange1,re>::\n        pack(std::find_end(boost::begin(rng1), boost::end(rng1),\n                           boost::begin(rng2), boost::end(rng2)),\n             rng1);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange1, class ForwardRange2,\n          class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange1>,\n    BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type\n>::type\nfind_end(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return range_return<ForwardRange1,re>::\n        pack(std::find_end(boost::begin(rng1), boost::end(rng1),\n                           boost::begin(rng2), boost::end(rng2), pred),\n             rng1);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange1, class ForwardRange2,\n          class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type\nfind_end(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return range_return<const ForwardRange1,re>::\n        pack(std::find_end(boost::begin(rng1), boost::end(rng1),\n                           boost::begin(rng2), boost::end(rng2), pred),\n             rng1);\n}\n\n    } // namespace range\n    using range::find_end;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/find_first_of.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_FIND_FIRST_OF_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_FIND_FIRST_OF_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function find_first_of\n///\n/// range-based version of the find_first_of std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre ForwardRange2 is a model of the ForwardRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate< class SinglePassRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<SinglePassRange1>,\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type\n>::type\nfind_first_of(SinglePassRange1 & rng1, ForwardRange2 const & rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return std::find_first_of(boost::begin(rng1),boost::end(rng1),\n                              boost::begin(rng2),boost::end(rng2));\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type\nfind_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return std::find_first_of(boost::begin(rng1),boost::end(rng1),\n                              boost::begin(rng2),boost::end(rng2));\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class ForwardRange2, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<SinglePassRange1>,\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type\n>::type\nfind_first_of(SinglePassRange1 & rng1, ForwardRange2 const & rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return std::find_first_of(boost::begin(rng1),boost::end(rng1),\n                              boost::begin(rng2),boost::end(rng2),pred);\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class ForwardRange2, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type\nfind_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return std::find_first_of(boost::begin(rng1),boost::end(rng1),\n                              boost::begin(rng2),boost::end(rng2),pred);\n}\n\n// range return overloads\n/// \\overload\ntemplate< range_return_value re, class SinglePassRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<SinglePassRange1>,\n    BOOST_DEDUCED_TYPENAME range_return<SinglePassRange1,re>::type\n>::type\nfind_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return range_return<SinglePassRange1,re>::\n        pack(std::find_first_of(boost::begin(rng1), boost::end(rng1),\n                                boost::begin(rng2), boost::end(rng2)),\n             rng1);\n}\n\n/// \\overload\ntemplate< range_return_value re, class SinglePassRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange1,re>::type\nfind_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return range_return<const SinglePassRange1,re>::\n        pack(std::find_first_of(boost::begin(rng1), boost::end(rng1),\n                                boost::begin(rng2), boost::end(rng2)),\n             rng1);\n}\n\n/// \\overload\ntemplate< range_return_value re, class SinglePassRange1, class ForwardRange2,\n          class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<SinglePassRange1>,\n    BOOST_DEDUCED_TYPENAME range_return<SinglePassRange1,re>::type\n>::type\nfind_first_of(SinglePassRange1 & rng1, const ForwardRange2& rng2,\n              BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return range_return<SinglePassRange1,re>::\n        pack(std::find_first_of(boost::begin(rng1), boost::end(rng1),\n                                boost::begin(rng2), boost::end(rng2), pred),\n             rng1);\n}\n\n/// \\overload\ntemplate< range_return_value re, class SinglePassRange1, class ForwardRange2,\n          class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange1,re>::type\nfind_first_of(const SinglePassRange1 & rng1, const ForwardRange2& rng2,\n              BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n\n    return range_return<const SinglePassRange1,re>::\n        pack(std::find_first_of(boost::begin(rng1), boost::end(rng1),\n                                boost::begin(rng2), boost::end(rng2), pred),\n             rng1);\n}\n\n    } // namespace range\n    using range::find_first_of;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/find_if.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_FIND_IF_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_FIND_IF_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function find_if\n///\n/// range-based version of the find_if std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\n/// \\pre UnaryPredicate is a model of the UnaryPredicateConcept\ntemplate< class SinglePassRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<SinglePassRange>,\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type\n>::type\nfind_if( SinglePassRange& rng, UnaryPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));\n    return std::find_if(boost::begin(rng), boost::end(rng), pred);\n}\n\n/// \\overload\ntemplate< class SinglePassRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange>::type\nfind_if( const SinglePassRange& rng, UnaryPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return std::find_if(boost::begin(rng), boost::end(rng), pred);\n}\n\n// range_return overloads\n\n/// \\overload\ntemplate< range_return_value re, class SinglePassRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<SinglePassRange>,\n    BOOST_DEDUCED_TYPENAME range_return<SinglePassRange,re>::type\n>::type\nfind_if( SinglePassRange& rng, UnaryPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));\n    return range_return<SinglePassRange,re>::\n        pack(std::find_if(boost::begin(rng), boost::end(rng), pred),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class SinglePassRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange,re>::type\nfind_if( const SinglePassRange& rng, UnaryPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return range_return<const SinglePassRange,re>::\n        pack(std::find_if(boost::begin(rng), boost::end(rng), pred),\n             rng);\n}\n\n    } // namespace range\n    using range::find_if;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/for_each.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_FOR_EACH_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_FOR_EACH_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/ref.hpp>\n#include <algorithm>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)\n#include <xutility>\n#endif\n\nnamespace boost\n{\n    namespace range\n    {\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)\n        namespace for_each_detail\n        {\n            template<typename Iterator, typename UnaryFunction>\n            inline UnaryFunction\n            for_each_impl(Iterator first, Iterator last, UnaryFunction fun,\n                          typename ::boost::enable_if<\n                            is_reference_wrapper<UnaryFunction>,\n                            void\n                          >::type* = 0)\n            {\n                    typedef typename std::_Get_unchecked_type<Iterator>::type\n                                unchecked_iterator;\n\n                    unchecked_iterator unchecked_last = std::_Unchecked(last);\n                    for (unchecked_iterator unchecked_first = std::_Unchecked(first); first != last; ++first)\n                            fun.get()(*unchecked_first);\n\n                    return fun;\n            }\n\n            template<typename Iterator, typename UnaryFunction>\n            inline UnaryFunction\n            for_each_impl(Iterator first, Iterator last, UnaryFunction fn,\n                          typename disable_if<\n                            is_reference_wrapper<UnaryFunction>,\n                            void\n                          >::type* = 0)\n            {\n                return std::for_each<Iterator, UnaryFunction>(first, last, fn);\n            }\n        }\n#endif\n\n/// \\brief template function for_each\n///\n/// range-based version of the for_each std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\n/// \\pre UnaryFunction is a model of the UnaryFunctionConcept\ntemplate< class SinglePassRange, class UnaryFunction >\ninline UnaryFunction for_each(SinglePassRange & rng, UnaryFunction fun)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));\n    \n#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)\n        return for_each_detail::for_each_impl<\n                typename range_iterator<SinglePassRange>::type,\n                UnaryFunction\n        >(boost::begin(rng), boost::end(rng), fun);\n#else\n    return std::for_each<\n        BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type,\n        UnaryFunction\n    >(boost::begin(rng),boost::end(rng),fun);\n#endif    \n}\n\n/// \\overload\ntemplate< class SinglePassRange, class UnaryFunction >\ninline UnaryFunction for_each(const SinglePassRange& rng, UnaryFunction fun)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    \n#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)\n        return for_each_detail::for_each_impl<\n                typename range_iterator<const SinglePassRange>::type,\n                UnaryFunction\n        >(boost::begin(rng), boost::end(rng), fun);\n#else    \n    return std::for_each<\n        BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange>::type,\n        UnaryFunction\n    >(boost::begin(rng), boost::end(rng), fun);\n#endif    \n}\n\n    } // namespace range\n    using range::for_each;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/generate.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_GENERATE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_GENERATE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n/// \\brief template function generate\n///\n/// range-based version of the generate std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre Generator is a model of the UnaryFunctionConcept\ntemplate< class ForwardRange, class Generator >\ninline ForwardRange& generate( ForwardRange& rng, Generator gen )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    std::generate(boost::begin(rng), boost::end(rng), gen);\n    return rng;\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Generator >\ninline const ForwardRange& generate( const ForwardRange& rng, Generator gen )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    std::generate(boost::begin(rng), boost::end(rng), gen);\n    return rng;\n}\n\n    } // namespace range\n    using range::generate;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/heap_algorithm.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_HEAP_ALGORITHM_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_HEAP_ALGORITHM_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function push_heap\n///\n/// range-based version of the push_heap std algorithm\n///\n/// \\pre RandomAccessRange is a model of the RandomAccessRangeConcept\n/// \\pre Compare is a model of the BinaryPredicateConcept\ntemplate<class RandomAccessRange>\ninline RandomAccessRange& push_heap(RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::push_heap(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange>\ninline const RandomAccessRange& push_heap(const RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::push_heap(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Compare>\ninline RandomAccessRange& push_heap(RandomAccessRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::push_heap(boost::begin(rng), boost::end(rng), comp_pred);\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Compare>\ninline const RandomAccessRange& push_heap(const RandomAccessRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::push_heap(boost::begin(rng), boost::end(rng), comp_pred);\n    return rng;\n}\n\n/// \\brief template function pop_heap\n///\n/// range-based version of the pop_heap std algorithm\n///\n/// \\pre RandomAccessRange is a model of the RandomAccessRangeConcept\n/// \\pre Compare is a model of the BinaryPredicateConcept\ntemplate<class RandomAccessRange>\ninline RandomAccessRange& pop_heap(RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::pop_heap(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange>\ninline const RandomAccessRange& pop_heap(const RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::pop_heap(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Compare>\ninline RandomAccessRange& pop_heap(RandomAccessRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::pop_heap(boost::begin(rng), boost::end(rng), comp_pred);\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Compare>\ninline const RandomAccessRange& pop_heap(const RandomAccessRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::pop_heap(boost::begin(rng), boost::end(rng), comp_pred);\n    return rng;\n}\n\n/// \\brief template function make_heap\n///\n/// range-based version of the make_heap std algorithm\n///\n/// \\pre RandomAccessRange is a model of the RandomAccessRangeConcept\n/// \\pre Compare is a model of the BinaryPredicateConcept\ntemplate<class RandomAccessRange>\ninline RandomAccessRange& make_heap(RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::make_heap(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange>\ninline const RandomAccessRange& make_heap(const RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::make_heap(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Compare>\ninline RandomAccessRange& make_heap(RandomAccessRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::make_heap(boost::begin(rng), boost::end(rng), comp_pred);\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Compare>\ninline const RandomAccessRange& make_heap(const RandomAccessRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::make_heap(boost::begin(rng), boost::end(rng), comp_pred);\n    return rng;\n}\n\n/// \\brief template function sort_heap\n///\n/// range-based version of the sort_heap std algorithm\n///\n/// \\pre RandomAccessRange is a model of the RandomAccessRangeConcept\n/// \\pre Compare is a model of the BinaryPredicateConcept\ntemplate<class RandomAccessRange>\ninline RandomAccessRange& sort_heap(RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::sort_heap(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange>\ninline const RandomAccessRange& sort_heap(const RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::sort_heap(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Compare>\ninline RandomAccessRange& sort_heap(RandomAccessRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::sort_heap(boost::begin(rng), boost::end(rng), comp_pred);\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Compare>\ninline const RandomAccessRange& sort_heap(const RandomAccessRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::sort_heap(boost::begin(rng), boost::end(rng), comp_pred);\n    return rng;\n}\n\n    } // namespace range\n    using range::push_heap;\n    using range::pop_heap;\n    using range::make_heap;\n    using range::sort_heap;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/inplace_merge.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_INPLACE_MERGE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_INPLACE_MERGE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function inplace_merge\n///\n/// range-based version of the inplace_merge std algorithm\n///\n/// \\pre BidirectionalRange is a model of the BidirectionalRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class BidirectionalRange>\ninline BidirectionalRange& inplace_merge(BidirectionalRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type middle)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));\n    std::inplace_merge(boost::begin(rng), middle, boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class BidirectionalRange>\ninline const BidirectionalRange& inplace_merge(const BidirectionalRange& rng,\n    BOOST_DEDUCED_TYPENAME boost::range_iterator<const BidirectionalRange>::type middle)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    std::inplace_merge(boost::begin(rng), middle, boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class BidirectionalRange, class BinaryPredicate>\ninline BidirectionalRange& inplace_merge(BidirectionalRange& rng,\n    BOOST_DEDUCED_TYPENAME boost::range_iterator<BidirectionalRange>::type middle,\n    BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));\n    std::inplace_merge(boost::begin(rng), middle, boost::end(rng), pred);\n    return rng;\n}\n\n/// \\overload\ntemplate<class BidirectionalRange, class BinaryPredicate>\ninline const BidirectionalRange& inplace_merge(const BidirectionalRange& rng,\n    BOOST_DEDUCED_TYPENAME boost::range_iterator<const BidirectionalRange>::type middle,\n    BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    std::inplace_merge(boost::begin(rng), middle, boost::end(rng), pred);\n    return rng;\n}\n\n    } // namespace range\n    using range::inplace_merge;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/lexicographical_compare.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_LEXICOGRAPHICAL_COMPARE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_LEXICOGRAPHICAL_COMPARE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function lexicographic_compare\n///\n/// range-based version of the lexicographic_compare std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\ntemplate<class SinglePassRange1, class SinglePassRange2>\ninline bool lexicographical_compare(const SinglePassRange1& rng1,\n                                    const SinglePassRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::lexicographical_compare(\n        boost::begin(rng1), boost::end(rng1),\n        boost::begin(rng2), boost::end(rng2));\n}\n\n/// \\overload\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class BinaryPredicate>\ninline bool lexicographical_compare(const SinglePassRange1& rng1,\n                                    const SinglePassRange2& rng2,\n                                    BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::lexicographical_compare(\n        boost::begin(rng1), boost::end(rng1),\n        boost::begin(rng2), boost::end(rng2), pred);\n}\n\n    } // namespace range\n    using range::lexicographical_compare;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/lower_bound.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_LOWER_BOUND_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_LOWER_BOUND_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function lower_bound\n///\n/// range-based version of the lower_bound std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\ntemplate< class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange>,\n    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\n>::type\nlower_bound( ForwardRange& rng, Value val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::lower_bound(boost::begin(rng), boost::end(rng), val);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nlower_bound( const ForwardRange& rng, Value val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::lower_bound(boost::begin(rng), boost::end(rng), val);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Value, class SortPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange>,\n    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\n>::type\nlower_bound( ForwardRange& rng, Value val, SortPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::lower_bound(boost::begin(rng), boost::end(rng), val, pred);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Value, class SortPredicate >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nlower_bound( const ForwardRange& rng, Value val, SortPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::lower_bound(boost::begin(rng), boost::end(rng), val, pred);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange>,\n    BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\n>::type\nlower_bound( ForwardRange& rng, Value val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::\n        pack(std::lower_bound(boost::begin(rng), boost::end(rng), val),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nlower_bound( const ForwardRange& rng, Value val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::\n        pack(std::lower_bound(boost::begin(rng), boost::end(rng), val),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value, class SortPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange>,\n    BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\n>::type\nlower_bound( ForwardRange& rng, Value val, SortPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::\n        pack(std::lower_bound(boost::begin(rng), boost::end(rng), val, pred),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value, class SortPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nlower_bound( const ForwardRange& rng, Value val, SortPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::\n        pack(std::lower_bound(boost::begin(rng), boost::end(rng), val, pred),\n             rng);\n}\n\n    } // namespace range\n    using range::lower_bound;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/max_element.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_MAX_ELEMENT_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_MAX_ELEMENT_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function max_element\n///\n/// range-based version of the max_element std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class ForwardRange>\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\nmax_element(ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::max_element(boost::begin(rng), boost::end(rng));\n}\n\n/// \\overload\ntemplate<class ForwardRange>\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nmax_element(const ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::max_element(boost::begin(rng), boost::end(rng));\n}\n\n/// \\overload\ntemplate<class ForwardRange, class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\nmax_element(ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::max_element(boost::begin(rng), boost::end(rng), pred);\n}\n\n/// \\overload\ntemplate<class ForwardRange, class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nmax_element(const ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::max_element(boost::begin(rng), boost::end(rng), pred);\n}\n\n// range_return overloads\n\n/// \\overload\ntemplate<range_return_value re, class ForwardRange>\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nmax_element(ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::pack(\n        std::max_element(boost::begin(rng), boost::end(rng)),\n        rng);\n}\n\n/// \\overload\ntemplate<range_return_value re, class ForwardRange>\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nmax_element(const ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::pack(\n        std::max_element(boost::begin(rng), boost::end(rng)),\n        rng);\n}\n\n/// \\overload\ntemplate<range_return_value re, class ForwardRange, class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nmax_element(ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::pack(\n        std::max_element(boost::begin(rng), boost::end(rng), pred),\n        rng);\n}\n\n/// \\overload\ntemplate<range_return_value re, class ForwardRange, class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nmax_element(const ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::pack(\n        std::max_element(boost::begin(rng), boost::end(rng), pred),\n        rng);\n}\n\n    } // namespace range\n    using range::max_element;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/merge.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_MERGE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_MERGE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function merge\n///\n/// range-based version of the merge std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\n///\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator>\ninline OutputIterator merge(const SinglePassRange1& rng1,\n                            const SinglePassRange2& rng2,\n                            OutputIterator          out)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::merge(boost::begin(rng1), boost::end(rng1),\n                      boost::begin(rng2), boost::end(rng2), out);\n}\n\n/// \\overload\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator, class BinaryPredicate>\ninline OutputIterator merge(const SinglePassRange1& rng1,\n                            const SinglePassRange2& rng2,\n                            OutputIterator          out,\n                            BinaryPredicate         pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::merge(boost::begin(rng1), boost::end(rng1),\n                      boost::begin(rng2), boost::end(rng2), out, pred);\n}\n\n    } // namespace range\n    using range::merge;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/min_element.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_MIN_ELEMENT_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_MIN_ELEMENT_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function min_element\n///\n/// range-based version of the min_element std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class ForwardRange>\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\nmin_element(ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::min_element(boost::begin(rng), boost::end(rng));\n}\n\n/// \\overload\ntemplate<class ForwardRange>\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nmin_element(const ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::min_element(boost::begin(rng), boost::end(rng));\n}\n\n/// \\overload\ntemplate<class ForwardRange, class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\nmin_element(ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::min_element(boost::begin(rng), boost::end(rng), pred);\n}\n\n/// \\overload\ntemplate<class ForwardRange, class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nmin_element(const ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::min_element(boost::begin(rng), boost::end(rng), pred);\n}\n\n// range_return overloads\n\n/// \\overload\ntemplate<range_return_value re, class ForwardRange>\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nmin_element(ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::pack(\n        std::min_element(boost::begin(rng), boost::end(rng)),\n        rng);\n}\n\n/// \\overload\ntemplate<range_return_value re, class ForwardRange>\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nmin_element(const ForwardRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::pack(\n        std::min_element(boost::begin(rng), boost::end(rng)),\n        rng);\n}\n\n/// \\overload\ntemplate<range_return_value re, class ForwardRange, class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nmin_element(ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::pack(\n        std::min_element(boost::begin(rng), boost::end(rng), pred),\n        rng);\n}\n\n/// \\overload\ntemplate<range_return_value re, class ForwardRange, class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nmin_element(const ForwardRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::pack(\n        std::min_element(boost::begin(rng), boost::end(rng), pred),\n        rng);\n}\n\n    } // namespace range\n    using range::min_element;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/mismatch.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_MISMATCH_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_MISMATCH_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/difference_type.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2 >\n        inline std::pair<SinglePassTraversalReadableIterator1,\n                         SinglePassTraversalReadableIterator2>\n        mismatch_impl(SinglePassTraversalReadableIterator1 first1,\n                      SinglePassTraversalReadableIterator1 last1,\n                      SinglePassTraversalReadableIterator2 first2,\n                      SinglePassTraversalReadableIterator2 last2)\n        {\n            while (first1 != last1 && first2 != last2 && *first1 == *first2)\n            {\n                ++first1;\n                ++first2;\n            }\n            return std::pair<SinglePassTraversalReadableIterator1,\n                             SinglePassTraversalReadableIterator2>(first1, first2);\n        }\n\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2,\n                  class BinaryPredicate >\n        inline std::pair<SinglePassTraversalReadableIterator1,\n                         SinglePassTraversalReadableIterator2>\n        mismatch_impl(SinglePassTraversalReadableIterator1 first1,\n                      SinglePassTraversalReadableIterator1 last1,\n                      SinglePassTraversalReadableIterator2 first2,\n                      SinglePassTraversalReadableIterator2 last2,\n                      BinaryPredicate pred)\n        {\n            while (first1 != last1 && first2 != last2 && pred(*first1, *first2))\n            {\n                ++first1;\n                ++first2;\n            }\n            return std::pair<SinglePassTraversalReadableIterator1,\n                             SinglePassTraversalReadableIterator2>(first1, first2);\n        }\n    } // namespace range_detail\n\n    namespace range\n    {\n/// \\brief template function mismatch\n///\n/// range-based version of the mismatch std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline std::pair<\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type >\nmismatch(SinglePassRange1& rng1, const SinglePassRange2 & rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n    return ::boost::range_detail::mismatch_impl(\n        ::boost::begin(rng1), ::boost::end(rng1),\n        ::boost::begin(rng2), ::boost::end(rng2));\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline std::pair<\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type,\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type >\nmismatch(const SinglePassRange1& rng1, const SinglePassRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n    return ::boost::range_detail::mismatch_impl(\n        ::boost::begin(rng1), ::boost::end(rng1),\n        ::boost::begin(rng2), ::boost::end(rng2));\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline std::pair<\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type >\nmismatch(SinglePassRange1& rng1, SinglePassRange2 & rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));\n\n    return ::boost::range_detail::mismatch_impl(\n        ::boost::begin(rng1), ::boost::end(rng1),\n        ::boost::begin(rng2), ::boost::end(rng2));\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline std::pair<\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type,\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type >\nmismatch(const SinglePassRange1& rng1, SinglePassRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));\n\n    return ::boost::range_detail::mismatch_impl(\n        ::boost::begin(rng1), ::boost::end(rng1),\n        ::boost::begin(rng2), ::boost::end(rng2));\n}\n\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >\ninline std::pair<\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type >\nmismatch(SinglePassRange1& rng1, const SinglePassRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n    return ::boost::range_detail::mismatch_impl(\n        ::boost::begin(rng1), ::boost::end(rng1),\n        ::boost::begin(rng2), ::boost::end(rng2), pred);\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >\ninline std::pair<\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type,\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type >\nmismatch(const SinglePassRange1& rng1, const SinglePassRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n    return ::boost::range_detail::mismatch_impl(\n        ::boost::begin(rng1), ::boost::end(rng1),\n        ::boost::begin(rng2), ::boost::end(rng2), pred);\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >\ninline std::pair<\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type >\nmismatch(SinglePassRange1& rng1, SinglePassRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));\n\n    return ::boost::range_detail::mismatch_impl(\n        ::boost::begin(rng1), ::boost::end(rng1),\n        ::boost::begin(rng2), ::boost::end(rng2), pred);\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >\ninline std::pair<\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type,\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type >\nmismatch(const SinglePassRange1& rng1, SinglePassRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));\n\n    return ::boost::range_detail::mismatch_impl(\n        ::boost::begin(rng1), ::boost::end(rng1),\n        ::boost::begin(rng2), ::boost::end(rng2), pred);\n}\n\n    } // namespace range\n    using range::mismatch;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/nth_element.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_NTH_ELEMENT_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_NTH_ELEMENT_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function nth_element\n///\n/// range-based version of the nth_element std algorithm\n///\n/// \\pre RandomAccessRange is a model of the RandomAccessRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class RandomAccessRange>\ninline RandomAccessRange& nth_element(RandomAccessRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type nth)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::nth_element(boost::begin(rng), nth, boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange>\ninline const RandomAccessRange& nth_element(const RandomAccessRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type nth)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::nth_element(boost::begin(rng), nth, boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class BinaryPredicate>\ninline RandomAccessRange& nth_element(RandomAccessRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type nth,\n    BinaryPredicate sort_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::nth_element(boost::begin(rng), nth, boost::end(rng), sort_pred);\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class BinaryPredicate>\ninline const RandomAccessRange& nth_element(const RandomAccessRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type nth,\n    BinaryPredicate sort_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::nth_element(boost::begin(rng), nth, boost::end(rng), sort_pred);\n    return rng;\n}\n\n    } // namespace range\n    using range::nth_element;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/partial_sort.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_PARTIAL_SORT_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_PARTIAL_SORT_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function partial_sort\n///\n/// range-based version of the partial_sort std algorithm\n///\n/// \\pre RandomAccessRange is a model of the RandomAccessRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class RandomAccessRange>\ninline RandomAccessRange& partial_sort(RandomAccessRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type middle)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::partial_sort(boost::begin(rng), middle, boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange>\ninline const RandomAccessRange& partial_sort(const RandomAccessRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type middle)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::partial_sort(boost::begin(rng), middle, boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class BinaryPredicate>\ninline RandomAccessRange& partial_sort(RandomAccessRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type middle,\n    BinaryPredicate sort_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::partial_sort(boost::begin(rng), middle, boost::end(rng),\n                        sort_pred);\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class BinaryPredicate>\ninline const RandomAccessRange& partial_sort(const RandomAccessRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type middle,\n    BinaryPredicate sort_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::partial_sort(boost::begin(rng), middle, boost::end(rng),\n                        sort_pred);\n    return rng;\n}\n\n    } // namespace range\n    using range::partial_sort;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/partial_sort_copy.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_PARTIAL_SORT_COPY_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_PARTIAL_SORT_COPY_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/value_type.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function partial_sort_copy\n///\n/// range-based version of the partial_sort_copy std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\n/// \\pre RandomAccessRange is a model of the Mutable_RandomAccessRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class SinglePassRange, class RandomAccessRange>\ninline BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type\npartial_sort_copy(const SinglePassRange& rng1, RandomAccessRange& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));\n\n    return std::partial_sort_copy(boost::begin(rng1), boost::end(rng1),\n        boost::begin(rng2), boost::end(rng2));\n}\n\n/// \\overload\ntemplate<class SinglePassRange, class RandomAccessRange>\ninline BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type\npartial_sort_copy(const SinglePassRange& rng1, const RandomAccessRange& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));\n\n    return std::partial_sort_copy(boost::begin(rng1), boost::end(rng1),\n        boost::begin(rng2), boost::end(rng2));\n}\n\n/// \\overload\ntemplate<class SinglePassRange, class RandomAccessRange,\n         class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type\npartial_sort_copy(const SinglePassRange& rng1, RandomAccessRange& rng2,\n    BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));\n\n    return std::partial_sort_copy(boost::begin(rng1), boost::end(rng1),\n        boost::begin(rng2), boost::end(rng2), pred);\n}\n\n/// \\overload\ntemplate<class SinglePassRange, class RandomAccessRange,\n         class BinaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type\npartial_sort_copy(const SinglePassRange& rng1, const RandomAccessRange& rng2,\n    BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));\n\n    return std::partial_sort_copy(boost::begin(rng1), boost::end(rng1),\n        boost::begin(rng2), boost::end(rng2), pred);\n}\n\n    } // namespace range\n    using range::partial_sort_copy;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/partition.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_PARTITION__HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_PARTITION__HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function partition\n///\n/// range-based version of the partition std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\ntemplate<class ForwardRange, class UnaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\npartition(ForwardRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::partition(boost::begin(rng),boost::end(rng),pred);\n}\n\n/// \\overload\ntemplate<class ForwardRange, class UnaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\npartition(const ForwardRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::partition(boost::begin(rng),boost::end(rng),pred);\n}\n\n// range_return overloads\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange,\n          class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\npartition(ForwardRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return boost::range_return<ForwardRange,re>::\n        pack(std::partition(boost::begin(rng), boost::end(rng), pred), rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange,\n          class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\npartition(const ForwardRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return boost::range_return<const ForwardRange,re>::\n        pack(std::partition(boost::begin(rng), boost::end(rng), pred), rng);\n}\n\n    } // namespace range\n    using range::partition;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/permutation.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_PERMUTATION_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_PERMUTATION_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function next_permutation\n///\n/// range-based version of the next_permutation std algorithm\n///\n/// \\pre BidirectionalRange is a model of the BidirectionalRangeConcept\n/// \\pre Compare is a model of the BinaryPredicateConcept\ntemplate<class BidirectionalRange>\ninline bool next_permutation(BidirectionalRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));\n    return std::next_permutation(boost::begin(rng), boost::end(rng));\n}\n\n/// \\overload\ntemplate<class BidirectionalRange>\ninline bool next_permutation(const BidirectionalRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    return std::next_permutation(boost::begin(rng), boost::end(rng));\n}\n\n/// \\overload\ntemplate<class BidirectionalRange, class Compare>\ninline bool next_permutation(BidirectionalRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));\n    return std::next_permutation(boost::begin(rng), boost::end(rng),\n                                 comp_pred);\n}\n\n/// \\overload\ntemplate<class BidirectionalRange, class Compare>\ninline bool next_permutation(const BidirectionalRange& rng,\n                             Compare                   comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    return std::next_permutation(boost::begin(rng), boost::end(rng),\n                                 comp_pred);\n}\n\n/// \\brief template function prev_permutation\n///\n/// range-based version of the prev_permutation std algorithm\n///\n/// \\pre BidirectionalRange is a model of the BidirectionalRangeConcept\n/// \\pre Compare is a model of the BinaryPredicateConcept\ntemplate<class BidirectionalRange>\ninline bool prev_permutation(BidirectionalRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));\n    return std::prev_permutation(boost::begin(rng), boost::end(rng));\n}\n\n/// \\overload\ntemplate<class BidirectionalRange>\ninline bool prev_permutation(const BidirectionalRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    return std::prev_permutation(boost::begin(rng), boost::end(rng));\n}\n\n/// \\overload\ntemplate<class BidirectionalRange, class Compare>\ninline bool prev_permutation(BidirectionalRange& rng, Compare comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));\n    return std::prev_permutation(boost::begin(rng), boost::end(rng),\n                                 comp_pred);\n}\n\n/// \\overload\ntemplate<class BidirectionalRange, class Compare>\ninline bool prev_permutation(const BidirectionalRange& rng,\n                             Compare                   comp_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    return std::prev_permutation(boost::begin(rng), boost::end(rng),\n                                 comp_pred);\n}\n\n    } // namespace range\n    using range::next_permutation;\n    using range::prev_permutation;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/random_shuffle.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_RANDOM_SHUFFLE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_RANDOM_SHUFFLE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function random_shuffle\n///\n/// range-based version of the random_shuffle std algorithm\n///\n/// \\pre RandomAccessRange is a model of the RandomAccessRangeConcept\n/// \\pre Generator is a model of the UnaryFunctionConcept\ntemplate<class RandomAccessRange>\ninline RandomAccessRange& random_shuffle(RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::random_shuffle(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange>\ninline const RandomAccessRange& random_shuffle(const RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::random_shuffle(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Generator>\ninline RandomAccessRange& random_shuffle(RandomAccessRange& rng, Generator& gen)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::random_shuffle(boost::begin(rng), boost::end(rng), gen);\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class Generator>\ninline const RandomAccessRange& random_shuffle(const RandomAccessRange& rng, Generator& gen)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::random_shuffle(boost::begin(rng), boost::end(rng), gen);\n    return rng;\n}\n\n    } // namespace range\n    using range::random_shuffle;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/remove.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REMOVE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REMOVE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function remove\n///\n/// range-based version of the remove std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\ntemplate< class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\nremove(ForwardRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::remove(boost::begin(rng),boost::end(rng),val);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nremove(const ForwardRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::remove(boost::begin(rng),boost::end(rng),val);\n}\n\n// range_return overloads\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nremove(ForwardRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::pack(\n        std::remove(boost::begin(rng), boost::end(rng), val),\n        rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nremove(const ForwardRange& rng, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::pack(\n        std::remove(boost::begin(rng), boost::end(rng), val),\n        rng);\n}\n\n    } // namespace range\n    using range::remove;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/remove_copy.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REMOVE_COPY_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REMOVE_COPY_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function remove_copy\n///\n/// range-based version of the remove_copy std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\n/// \\pre OutputIterator is a model of the OutputIteratorConcept\n/// \\pre Value is a model of the EqualityComparableConcept\n/// \\pre Objects of type Value can be compared for equality with objects of\n/// InputIterator's value type.\ntemplate< class SinglePassRange, class OutputIterator, class Value >\ninline OutputIterator\nremove_copy(const SinglePassRange& rng, OutputIterator out_it, const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return std::remove_copy(boost::begin(rng), boost::end(rng), out_it, val);\n}\n\n    } // namespace range\n    using range::remove_copy;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/remove_copy_if.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REMOVE_COPY_IF_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REMOVE_COPY_IF_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    /// \\brief template function remove_copy_if\n    ///\n    /// range-based version of the remove_copy_if std algorithm\n    ///\n    /// \\pre SinglePassRange is a model of the SinglePassRangeConcept\n    /// \\pre OutputIterator is a model of the OutputIteratorConcept\n    /// \\pre Predicate is a model of the PredicateConcept\n    /// \\pre InputIterator's value type is convertible to Predicate's argument type\n    /// \\pre out_it is not an iterator in the range rng\n    template< class SinglePassRange, class OutputIterator, class Predicate >\n    inline OutputIterator\n    remove_copy_if(const SinglePassRange& rng, OutputIterator out_it, Predicate pred)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n        return std::remove_copy_if(boost::begin(rng), boost::end(rng), out_it, pred);\n    }\n}\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/remove_if.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REMOVE_IF_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REMOVE_IF_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function remove_if\n///\n/// range-based version of the remove_if std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre UnaryPredicate is a model of the UnaryPredicateConcept\ntemplate< class ForwardRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME boost::range_iterator<ForwardRange>::type\nremove_if(ForwardRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::remove_if(boost::begin(rng), boost::end(rng), pred);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME boost::range_iterator<const ForwardRange>::type\nremove_if(const ForwardRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::remove_if(boost::begin(rng), boost::end(rng), pred);\n}\n\n// range_return overloads\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nremove_if(ForwardRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::pack(\n        std::remove_if(boost::begin(rng), boost::end(rng), pred),\n        rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class UnaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nremove_if(const ForwardRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::pack(\n        std::remove_if(boost::begin(rng), boost::end(rng), pred),\n        rng);\n}\n\n    } // namespace range\n    using range::remove_if;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/replace.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REPLACE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REPLACE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function replace\n///\n/// range-based version of the replace std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\ntemplate< class ForwardRange, class Value >\ninline ForwardRange&\nreplace(ForwardRange& rng, const Value& what,\n        const Value& with_what)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    std::replace(boost::begin(rng), boost::end(rng), what, with_what);\n    return rng;\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Value >\ninline const ForwardRange&\nreplace(const ForwardRange& rng, const Value& what,\n        const Value& with_what)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    std::replace(boost::begin(rng), boost::end(rng), what, with_what);\n    return rng;\n}\n\n    } // namespace range\n    using range::replace;\n} // namespace boost;\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/replace_copy.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REPLACE_COPY_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REPLACE_COPY_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function replace_copy\n///\n/// range-based version of the replace_copy std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\ntemplate< class ForwardRange, class OutputIterator, class Value >\ninline OutputIterator\nreplace_copy(const ForwardRange& rng, OutputIterator out_it, const Value& what,\n        const Value& with_what)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::replace_copy(boost::begin(rng), boost::end(rng), out_it,\n        what, with_what);\n}\n\n    } // namespace range\n    using range::replace_copy;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/replace_copy_if.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REPLACE_COPY_IF_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REPLACE_COPY_IF_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function replace_copy_if\n///\n/// range-based version of the replace_copy_if std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre Predicate is a model of the PredicateConcept\n/// \\pre Value is convertible to Predicate's argument type\n/// \\pre Value is Assignable\n/// \\pre Value is convertible to a type in OutputIterator's set of value types.\ntemplate< class ForwardRange, class OutputIterator, class Predicate, class Value >\ninline OutputIterator\nreplace_copy_if(const ForwardRange& rng, OutputIterator out_it, Predicate pred,\n        const Value& with_what)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::replace_copy_if(boost::begin(rng), boost::end(rng), out_it,\n        pred, with_what);\n}\n\n    } // namespace range\n    using range::replace_copy_if;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/replace_if.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REPLACE_IF_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REPLACE_IF_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function replace_if\n///\n/// range-based version of the replace_if std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre UnaryPredicate is a model of the UnaryPredicateConcept\ntemplate< class ForwardRange, class UnaryPredicate, class Value >\ninline ForwardRange&\n    replace_if(ForwardRange& rng, UnaryPredicate pred,\n               const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    std::replace_if(boost::begin(rng), boost::end(rng), pred, val);\n    return rng;\n}\n\n/// \\overload\ntemplate< class ForwardRange, class UnaryPredicate, class Value >\ninline const ForwardRange&\n    replace_if(const ForwardRange& rng, UnaryPredicate pred,\n               const Value& val)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    std::replace_if(boost::begin(rng), boost::end(rng), pred, val);\n    return rng;\n}\n\n    } // namespace range\n    using range::replace_if;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/reverse.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REVERSE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REVERSE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function reverse\n///\n/// range-based version of the reverse std algorithm\n///\n/// \\pre BidirectionalRange is a model of the BidirectionalRangeConcept\ntemplate<class BidirectionalRange>\ninline BidirectionalRange& reverse(BidirectionalRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));\n    std::reverse(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class BidirectionalRange>\ninline const BidirectionalRange& reverse(const BidirectionalRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    std::reverse(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n    } // namespace range\n    using range::reverse;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/reverse_copy.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_REVERSE_COPY_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_REVERSE_COPY_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/iterator/iterator_concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function reverse_copy\n///\n/// range-based version of the reverse_copy std algorithm\n///\n/// \\pre BidirectionalRange is a model of the BidirectionalRangeConcept\ntemplate<class BidirectionalRange, class OutputIterator>\ninline OutputIterator reverse_copy(const BidirectionalRange& rng, OutputIterator out)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    return std::reverse_copy(boost::begin(rng), boost::end(rng), out);\n}\n\n    } // namespace range\n    using range::reverse_copy;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/rotate.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_ROTATE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_ROTATE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function rotate\n///\n/// range-based version of the rotate std algorithm\n///\n/// \\pre Rng meets the requirements for a Forward range\ntemplate<class ForwardRange>\ninline ForwardRange& rotate(ForwardRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type middle)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    std::rotate(boost::begin(rng), middle, boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class ForwardRange>\ninline const ForwardRange& rotate(const ForwardRange& rng,\n    BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type middle)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    std::rotate(boost::begin(rng), middle, boost::end(rng));\n    return rng;\n}\n\n    } // namespace range\n    using range::rotate;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/rotate_copy.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_ROTATE_COPY_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_ROTATE_COPY_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/iterator.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n    /// \\brief template function rotate\n    ///\n    /// range-based version of the rotate std algorithm\n    ///\n    /// \\pre Rng meets the requirements for a Forward range\n    template<typename ForwardRange, typename OutputIterator>\n    inline OutputIterator rotate_copy(\n        const ForwardRange&                                             rng,\n        BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type middle,\n        OutputIterator                                                  target\n        )\n    {\n        BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n        return std::rotate_copy(boost::begin(rng), middle, boost::end(rng), target);\n    }\n\n    } // namespace range\n    using range::rotate_copy;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/search.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_SEARCH_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_SEARCH_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function search\n///\n/// range-based version of the search std algorithm\n///\n/// \\pre ForwardRange1 is a model of the ForwardRangeConcept\n/// \\pre ForwardRange2 is a model of the ForwardRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate< class ForwardRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange1>::type\nsearch(ForwardRange1& rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n    return std::search(boost::begin(rng1),boost::end(rng1),\n                       boost::begin(rng2),boost::end(rng2));\n}\n\n/// \\overload\ntemplate< class ForwardRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange1>::type\nsearch(const ForwardRange1& rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n    return std::search(boost::begin(rng1), boost::end(rng1),\n                       boost::begin(rng2), boost::end(rng2));\n}\n\n/// \\overload\ntemplate< class ForwardRange1, class ForwardRange2, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange1>::type\nsearch(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n    return std::search(boost::begin(rng1),boost::end(rng1),\n                       boost::begin(rng2),boost::end(rng2),pred);\n}\n\n/// \\overload\ntemplate< class ForwardRange1, class ForwardRange2, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange1>::type\nsearch(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n    return std::search(boost::begin(rng1), boost::end(rng1),\n                       boost::begin(rng2), boost::end(rng2), pred);\n}\n\n// range_return overloads\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type\nsearch(ForwardRange1& rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n    return range_return<ForwardRange1,re>::\n        pack(std::search(boost::begin(rng1),boost::end(rng1),\n                         boost::begin(rng2),boost::end(rng2)),\n             rng1);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange1, class ForwardRange2 >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type\nsearch(const ForwardRange1& rng1, const ForwardRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n    return range_return<const ForwardRange1,re>::\n        pack(std::search(boost::begin(rng1),boost::end(rng1),\n                         boost::begin(rng2),boost::end(rng2)),\n             rng1);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange1, class ForwardRange2,\n          class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type\nsearch(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n    return range_return<ForwardRange1,re>::\n        pack(std::search(boost::begin(rng1),boost::end(rng1),\n                         boost::begin(rng2),boost::end(rng2),pred),\n             rng1);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange1, class ForwardRange2,\n          class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type\nsearch(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));\n    return range_return<const ForwardRange1,re>::\n        pack(std::search(boost::begin(rng1),boost::end(rng1),\n                         boost::begin(rng2),boost::end(rng2),pred),\n             rng1);\n}\n\n    } // namespace range\n    using range::search;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/search_n.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_SEARCH_N_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_SEARCH_N_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <boost/range/value_type.hpp>\n#include <iterator>\n#include <algorithm>\n\nnamespace boost\n{\n\nnamespace range_detail\n{\n    // Rationale: search_n is implemented rather than delegate to\n    // the standard library implementation because some standard\n    // library implementations are broken eg. MSVC.\n\n    // search_n forward iterator version\n    template<typename ForwardIterator, typename Integer, typename Value>\n    inline ForwardIterator\n    search_n_impl(ForwardIterator first, ForwardIterator last, Integer count,\n                  const Value& value, std::forward_iterator_tag)\n    {\n        first = std::find(first, last, value);\n        while (first != last)\n        {\n            typename std::iterator_traits<ForwardIterator>::difference_type n = count;\n            ForwardIterator i = first;\n            ++i;\n            while (i != last && n != 1 && *i==value)\n            {\n                ++i;\n                --n;\n            }\n            if (n == 1)\n                return first;\n            if (i == last)\n                return last;\n            first = std::find(++i, last, value);\n        }\n        return last;\n    }\n\n    // search_n random-access iterator version\n    template<typename RandomAccessIterator, typename Integer, typename Value>\n    inline RandomAccessIterator\n    search_n_impl(RandomAccessIterator first, RandomAccessIterator last,\n                  Integer count, const Value& value,\n                  std::random_access_iterator_tag)\n    {\n        typedef typename std::iterator_traits<RandomAccessIterator>::difference_type difference_t;\n\n        difference_t tail_size = last - first;\n        const difference_t pattern_size = count;\n\n        if (tail_size < pattern_size)\n            return last;\n\n        const difference_t skip_offset = pattern_size - 1;\n        RandomAccessIterator look_ahead = first + skip_offset;\n        tail_size -= pattern_size;\n\n        while (1)\n        {\n            // look_ahead here is pointing to the last element of the\n            // next possible match\n            while (!(*look_ahead == value)) // skip loop...\n            {\n                if (tail_size < pattern_size)\n                    return last; // no match\n                look_ahead += pattern_size;\n                tail_size -= pattern_size;\n            }\n            difference_t remainder = skip_offset;\n            for (RandomAccessIterator back_track = look_ahead - 1;\n                    *back_track == value; --back_track)\n            {\n                if (--remainder == 0)\n                {\n                    return look_ahead - skip_offset; // matched\n                }\n            }\n            if (remainder > tail_size)\n                return last; // no match\n            look_ahead += remainder;\n            tail_size -= remainder;\n        }\n\n        return last;\n    }\n\n    // search_n for forward iterators using a binary predicate\n    // to determine a match\n    template<typename ForwardIterator, typename Integer, typename Value,\n             typename BinaryPredicate>\n    inline ForwardIterator\n    search_n_pred_impl(ForwardIterator first, ForwardIterator last,\n                       Integer count, const Value& value,\n                       BinaryPredicate pred, std::forward_iterator_tag)\n    {\n        typedef typename std::iterator_traits<ForwardIterator>::difference_type difference_t;\n\n        while (first != last && !static_cast<bool>(pred(*first, value)))\n            ++first;\n\n        while (first != last)\n        {\n            difference_t n = count;\n            ForwardIterator i = first;\n            ++i;\n            while (i != last && n != 1 && static_cast<bool>(pred(*i, value)))\n            {\n                ++i;\n                --n;\n            }\n            if (n == 1)\n                return first;\n            if (i == last)\n                return last;\n            first = ++i;\n            while (first != last && !static_cast<bool>(pred(*first, value)))\n                ++first;\n        }\n        return last;\n    }\n\n    // search_n for random-access iterators using a binary predicate\n    // to determine a match\n    template<typename RandomAccessIterator, typename Integer,\n             typename Value, typename BinaryPredicate>\n    inline RandomAccessIterator\n    search_n_pred_impl(RandomAccessIterator first, RandomAccessIterator last,\n                       Integer count, const Value& value,\n                       BinaryPredicate pred, std::random_access_iterator_tag)\n    {\n        typedef typename std::iterator_traits<RandomAccessIterator>::difference_type difference_t;\n\n        difference_t tail_size = last - first;\n        const difference_t pattern_size = count;\n\n        if (tail_size < pattern_size)\n            return last;\n\n        const difference_t skip_offset = pattern_size - 1;\n        RandomAccessIterator look_ahead = first + skip_offset;\n        tail_size -= pattern_size;\n\n        while (1)\n        {\n            // look_ahead points to the last element of the next\n            // possible match\n            while (!static_cast<bool>(pred(*look_ahead, value))) // skip loop\n            {\n                if (tail_size < pattern_size)\n                    return last; // no match\n                look_ahead += pattern_size;\n                tail_size -= pattern_size;\n            }\n            difference_t remainder = skip_offset;\n            for (RandomAccessIterator back_track = look_ahead - 1;\n                    pred(*back_track, value); --back_track)\n            {\n                if (--remainder == 0)\n                    return look_ahead -= skip_offset; // success\n            }\n            if (remainder > tail_size)\n            {\n                return last; // no match\n            }\n            look_ahead += remainder;\n            tail_size -= remainder;\n        }\n    }\n\n    template<typename ForwardIterator, typename Integer, typename Value>\n    inline ForwardIterator\n    search_n_impl(ForwardIterator first, ForwardIterator last,\n                  Integer count, const Value& value)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((ForwardIteratorConcept<ForwardIterator>));\n        BOOST_RANGE_CONCEPT_ASSERT((EqualityComparableConcept<Value>));\n        BOOST_RANGE_CONCEPT_ASSERT((EqualityComparableConcept<typename std::iterator_traits<ForwardIterator>::value_type>));\n        //BOOST_RANGE_CONCEPT_ASSERT((EqualityComparableConcept2<typename std::iterator_traits<ForwardIterator>::value_type, Value>));\n\n        typedef typename std::iterator_traits<ForwardIterator>::iterator_category cat_t;\n\n        if (count <= 0)\n            return first;\n        if (count == 1)\n            return std::find(first, last, value);\n        return range_detail::search_n_impl(first, last, count, value, cat_t());\n    }\n\n    template<typename ForwardIterator, typename Integer, typename Value,\n             typename BinaryPredicate>\n    inline ForwardIterator\n    search_n_pred_impl(ForwardIterator first, ForwardIterator last,\n                       Integer count, const Value& value,\n                       BinaryPredicate pred)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((ForwardIteratorConcept<ForwardIterator>));\n        BOOST_RANGE_CONCEPT_ASSERT((\n            BinaryPredicateConcept<\n                BinaryPredicate,\n                typename std::iterator_traits<ForwardIterator>::value_type,\n                Value>\n            ));\n\n        typedef typename std::iterator_traits<ForwardIterator>::iterator_category cat_t;\n\n        if (count <= 0)\n            return first;\n        if (count == 1)\n        {\n            while (first != last && !static_cast<bool>(pred(*first, value)))\n                ++first;\n            return first;\n        }\n        return range_detail::search_n_pred_impl(first, last, count,\n                                                value, pred, cat_t());\n    }\n} // namespace range_detail\n\nnamespace range {\n\n/// \\brief template function search\n///\n/// range-based version of the search std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\n/// \\pre Integer is an integral type\n/// \\pre Value is a model of the EqualityComparableConcept\n/// \\pre ForwardRange's value type is a model of the EqualityComparableConcept\n/// \\pre Object's of ForwardRange's value type can be compared for equality with Objects of type Value\ntemplate< class ForwardRange, class Integer, class Value >\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\nsearch_n(ForwardRange& rng, Integer count, const Value& value)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    return range_detail::search_n_impl(boost::begin(rng),boost::end(rng), count, value);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Integer, class Value >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nsearch_n(const ForwardRange& rng, Integer count, const Value& value)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRange>));\n    return range_detail::search_n_impl(boost::begin(rng), boost::end(rng), count, value);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Integer, class Value,\n          class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\nsearch_n(ForwardRange& rng, Integer count, const Value& value,\n         BinaryPredicate binary_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,\n        BOOST_DEDUCED_TYPENAME range_value<ForwardRange>::type, const Value&>));\n    return range_detail::search_n_pred_impl(boost::begin(rng), boost::end(rng),\n        count, value, binary_pred);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Integer, class Value,\n          class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nsearch_n(const ForwardRange& rng, Integer count, const Value& value,\n         BinaryPredicate binary_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRange>));\n    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,\n        BOOST_DEDUCED_TYPENAME range_value<const ForwardRange>::type, const Value&>));\n    return range_detail::search_n_pred_impl(boost::begin(rng), boost::end(rng),\n        count, value, binary_pred);\n}\n\n// range_return overloads\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Integer,\n          class Value >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nsearch_n(ForwardRange& rng, Integer count, const Value& value)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    return range_return<ForwardRange,re>::\n        pack(range_detail::search_n_impl(boost::begin(rng),boost::end(rng),\n                           count, value),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Integer,\n          class Value >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nsearch_n(const ForwardRange& rng, Integer count, const Value& value)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRange>));\n    return range_return<const ForwardRange,re>::\n        pack(range_detail::search_n_impl(boost::begin(rng), boost::end(rng),\n                           count, value),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Integer,\n          class Value, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nsearch_n(ForwardRange& rng, Integer count, const Value& value,\n         BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));\n    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,\n        BOOST_DEDUCED_TYPENAME range_value<ForwardRange>::type,\n        const Value&>));\n    return range_return<ForwardRange,re>::\n        pack(range_detail::search_n_pred_impl(boost::begin(rng),\n                                              boost::end(rng),\n                           count, value, pred),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Integer,\n          class Value, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nsearch_n(const ForwardRange& rng, Integer count, const Value& value,\n         BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRange>));\n    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,\n        BOOST_DEDUCED_TYPENAME range_value<const ForwardRange>::type,\n        const Value&>));\n    return range_return<const ForwardRange,re>::\n        pack(range_detail::search_n_pred_impl(boost::begin(rng),\n                                              boost::end(rng),\n                           count, value, pred),\n             rng);\n}\n\n    } // namespace range\n    using range::search_n;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/set_algorithm.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_SET_ALGORITHM_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_SET_ALGORITHM_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function includes\n///\n/// range-based version of the includes std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class SinglePassRange1, class SinglePassRange2>\ninline bool includes(const SinglePassRange1& rng1,\n                     const SinglePassRange2& rng2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::includes(boost::begin(rng1),boost::end(rng1),\n                         boost::begin(rng2),boost::end(rng2));\n}\n\n/// \\overload\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class BinaryPredicate>\ninline bool includes(const SinglePassRange1& rng1,\n                     const SinglePassRange2& rng2,\n                     BinaryPredicate         pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::includes(boost::begin(rng1), boost::end(rng1),\n                         boost::begin(rng2), boost::end(rng2), pred);\n}\n\n/// \\brief template function set_union\n///\n/// range-based version of the set_union std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator>\ninline OutputIterator set_union(const SinglePassRange1& rng1,\n                                const SinglePassRange2& rng2,\n                                OutputIterator          out)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::set_union(boost::begin(rng1), boost::end(rng1),\n                          boost::begin(rng2), boost::end(rng2), out);\n}\n\n/// \\overload\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator, class BinaryPredicate>\ninline OutputIterator set_union(const SinglePassRange1& rng1,\n                                const SinglePassRange2& rng2,\n                                OutputIterator          out,\n                                BinaryPredicate         pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::set_union(boost::begin(rng1), boost::end(rng1),\n                          boost::begin(rng2), boost::end(rng2), out, pred);\n}\n\n/// \\brief template function set_intersection\n///\n/// range-based version of the set_intersection std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator>\ninline OutputIterator set_intersection(const SinglePassRange1& rng1,\n                                       const SinglePassRange2& rng2,\n                                       OutputIterator          out)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::set_intersection(boost::begin(rng1), boost::end(rng1),\n                                 boost::begin(rng2), boost::end(rng2), out);\n}\n\n/// \\overload\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator, class BinaryPredicate>\ninline OutputIterator set_intersection(const SinglePassRange1& rng1,\n                                       const SinglePassRange2& rng2,\n                                       OutputIterator          out,\n                                       BinaryPredicate         pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::set_intersection(boost::begin(rng1), boost::end(rng1),\n                                 boost::begin(rng2), boost::end(rng2),\n                                 out, pred);\n}\n\n/// \\brief template function set_difference\n///\n/// range-based version of the set_difference std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator>\ninline OutputIterator set_difference(const SinglePassRange1& rng1,\n                                     const SinglePassRange2& rng2,\n                                     OutputIterator out)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::set_difference(boost::begin(rng1), boost::end(rng1),\n                               boost::begin(rng2), boost::end(rng2), out);\n}\n\n/// \\overload\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator, class BinaryPredicate>\ninline OutputIterator set_difference(const SinglePassRange1& rng1,\n                                     const SinglePassRange2& rng2,\n                                     OutputIterator          out,\n                                     BinaryPredicate         pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::set_difference(\n        boost::begin(rng1), boost::end(rng1),\n        boost::begin(rng2), boost::end(rng2), out, pred);\n}\n\n/// \\brief template function set_symmetric_difference\n///\n/// range-based version of the set_symmetric_difference std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator>\ninline OutputIterator\nset_symmetric_difference(const SinglePassRange1& rng1,\n                         const SinglePassRange2& rng2,\n                         OutputIterator          out)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::set_symmetric_difference(boost::begin(rng1), boost::end(rng1),\n                                         boost::begin(rng2), boost::end(rng2), out);\n}\n\n/// \\overload\ntemplate<class SinglePassRange1, class SinglePassRange2,\n         class OutputIterator, class BinaryPredicate>\ninline OutputIterator\nset_symmetric_difference(const SinglePassRange1& rng1,\n                         const SinglePassRange2& rng2,\n                         OutputIterator          out,\n                         BinaryPredicate         pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n    return std::set_symmetric_difference(\n        boost::begin(rng1), boost::end(rng1),\n        boost::begin(rng2), boost::end(rng2), out, pred);\n}\n\n    } // namespace range\n    using range::includes;\n    using range::set_union;\n    using range::set_intersection;\n    using range::set_difference;\n    using range::set_symmetric_difference;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/sort.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_SORT_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_SORT_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function sort\n///\n/// range-based version of the sort std algorithm\n///\n/// \\pre RandomAccessRange is a model of the RandomAccessRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class RandomAccessRange>\ninline RandomAccessRange& sort(RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::sort(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange>\ninline const RandomAccessRange& sort(const RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::sort(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class BinaryPredicate>\ninline RandomAccessRange& sort(RandomAccessRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::sort(boost::begin(rng), boost::end(rng), pred);\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class BinaryPredicate>\ninline const RandomAccessRange& sort(const RandomAccessRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::sort(boost::begin(rng), boost::end(rng), pred);\n    return rng;\n}\n\n    } // namespace range\n    using range::sort;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/stable_partition.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_STABLE_PARTITION_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_STABLE_PARTITION_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function stable_partition\n///\n/// range-based version of the stable_partition std algorithm\n///\n/// \\pre BidirectionalRange is a model of the BidirectionalRangeConcept\n/// \\pre UnaryPredicate is a model of the UnaryPredicateConcept\ntemplate<class BidirectionalRange, class UnaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type\nstable_partition(BidirectionalRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));\n    return std::stable_partition(boost::begin(rng), boost::end(rng), pred);\n}\n\n/// \\overload\ntemplate<class BidirectionalRange, class UnaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_iterator<const BidirectionalRange>::type\nstable_partition(const BidirectionalRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    return std::stable_partition(boost::begin(rng),boost::end(rng),pred);\n}\n\n// range_return overloads\ntemplate<range_return_value re, class BidirectionalRange, class UnaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_return<BidirectionalRange,re>::type\nstable_partition(BidirectionalRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));\n    return range_return<BidirectionalRange,re>::pack(\n        std::stable_partition(boost::begin(rng), boost::end(rng), pred),\n        rng);\n}\n\n/// \\overload\ntemplate<range_return_value re, class BidirectionalRange, class UnaryPredicate>\ninline BOOST_DEDUCED_TYPENAME range_return<const BidirectionalRange,re>::type\nstable_partition(const BidirectionalRange& rng, UnaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));\n    return range_return<const BidirectionalRange,re>::pack(\n        std::stable_partition(boost::begin(rng),boost::end(rng),pred),\n        rng);\n}\n\n    } // namespace range\n    using range::stable_partition;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/stable_sort.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_STABLE_SORT_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_STABLE_SORT_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function stable_sort\n///\n/// range-based version of the stable_sort std algorithm\n///\n/// \\pre RandomAccessRange is a model of the RandomAccessRangeConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate<class RandomAccessRange>\ninline RandomAccessRange& stable_sort(RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::stable_sort(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange>\ninline const RandomAccessRange& stable_sort(const RandomAccessRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::stable_sort(boost::begin(rng), boost::end(rng));\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class BinaryPredicate>\ninline RandomAccessRange& stable_sort(RandomAccessRange& rng, BinaryPredicate sort_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));\n    std::stable_sort(boost::begin(rng), boost::end(rng), sort_pred);\n    return rng;\n}\n\n/// \\overload\ntemplate<class RandomAccessRange, class BinaryPredicate>\ninline const RandomAccessRange& stable_sort(const RandomAccessRange& rng, BinaryPredicate sort_pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));\n    std::stable_sort(boost::begin(rng), boost::end(rng), sort_pred);\n    return rng;\n}\n\n    } // namespace range\n    using range::stable_sort;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/swap_ranges.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_SWAP_RANGES_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_SWAP_RANGES_HPP_INCLUDED\n\n#include <boost/assert.hpp>\n#include <boost/concept_check.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/iterator.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template<class Iterator1, class Iterator2>\n        void swap_ranges_impl(Iterator1 it1, Iterator1 last1,\n                              Iterator2 it2, Iterator2 last2,\n                              single_pass_traversal_tag,\n                              single_pass_traversal_tag)\n        {\n            ignore_unused_variable_warning(last2);\n            for (; it1 != last1; ++it1, ++it2)\n            {\n                BOOST_ASSERT( it2 != last2 );\n                std::iter_swap(it1, it2);\n            }\n        }\n\n        template<class Iterator1, class Iterator2>\n        void swap_ranges_impl(Iterator1 it1, Iterator1 last1,\n                              Iterator2 it2, Iterator2 last2,\n                              random_access_traversal_tag,\n                              random_access_traversal_tag)\n        {\n            ignore_unused_variable_warning(last2);\n            BOOST_ASSERT( last2 - it2 >= last1 - it1 );\n            std::swap_ranges(it1, last1, it2);\n        }\n\n        template<class Iterator1, class Iterator2>\n        void swap_ranges_impl(Iterator1 first1, Iterator1 last1,\n                              Iterator2 first2, Iterator2 last2)\n        {\n            swap_ranges_impl(first1, last1, first2, last2,\n                BOOST_DEDUCED_TYPENAME iterator_traversal<Iterator1>::type(),\n                BOOST_DEDUCED_TYPENAME iterator_traversal<Iterator2>::type());\n        }\n    } // namespace range_detail\n\n    namespace range\n    {\n\n/// \\brief template function swap_ranges\n///\n/// range-based version of the swap_ranges std algorithm\n///\n/// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n/// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline SinglePassRange2&\nswap_ranges(SinglePassRange1& range1, SinglePassRange2& range2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<SinglePassRange1>));\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<SinglePassRange2>));\n\n    boost::range_detail::swap_ranges_impl(\n        boost::begin(range1), boost::end(range1),\n        boost::begin(range2), boost::end(range2));\n\n    return range2;\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline SinglePassRange2&\nswap_ranges(const SinglePassRange1& range1, SinglePassRange2& range2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange1>));\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<SinglePassRange2>));\n\n    boost::range_detail::swap_ranges_impl(\n        boost::begin(range1), boost::end(range1),\n        boost::begin(range2), boost::end(range2));\n\n    return range2;\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline const SinglePassRange2&\nswap_ranges(SinglePassRange1& range1, const SinglePassRange2& range2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<SinglePassRange1>));\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange2>));\n\n    boost::range_detail::swap_ranges_impl(\n        boost::begin(range1), boost::end(range1),\n        boost::begin(range2), boost::end(range2));\n\n    return range2;\n}\n\n/// \\overload\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline const SinglePassRange2&\nswap_ranges(const SinglePassRange1& range1, const SinglePassRange2& range2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange1>));\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange2>));\n\n    boost::range_detail::swap_ranges_impl(\n        boost::begin(range1), boost::end(range1),\n        boost::begin(range2), boost::end(range2));\n\n    return range2;\n}\n\n    } // namespace range\n    using range::swap_ranges;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/transform.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_TRANSFORM_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_TRANSFORM_HPP_INCLUDED\n\n#include <boost/assert.hpp>\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n        /// \\brief template function transform\n        ///\n        /// range-based version of the transform std algorithm\n        ///\n        /// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n        /// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n        /// \\pre OutputIterator is a model of the OutputIteratorConcept\n        /// \\pre UnaryOperation is a model of the UnaryFunctionConcept\n        /// \\pre BinaryOperation is a model of the BinaryFunctionConcept\n        template< class SinglePassRange1,\n                  class OutputIterator,\n                  class UnaryOperation >\n        inline OutputIterator\n        transform(const SinglePassRange1& rng,\n                  OutputIterator          out,\n                  UnaryOperation          fun)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n            return std::transform(boost::begin(rng),boost::end(rng),out,fun);\n        }\n\n    } // namespace range\n\n    namespace range_detail\n    {\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2,\n                  class OutputIterator,\n                  class BinaryFunction >\n        inline OutputIterator\n        transform_impl(SinglePassTraversalReadableIterator1 first1,\n                       SinglePassTraversalReadableIterator1 last1,\n                       SinglePassTraversalReadableIterator2 first2,\n                       SinglePassTraversalReadableIterator2 last2,\n                       OutputIterator                       out,\n                       BinaryFunction                       fn)\n        {\n            for (; first1 != last1 && first2 != last2; ++first1, ++first2)\n            {\n                *out = fn(*first1, *first2);\n                ++out;\n            }\n            return out;\n        }\n    }\n\n    namespace range\n    {\n\n        /// \\overload\n        template< class SinglePassRange1,\n                  class SinglePassRange2,\n                  class OutputIterator,\n                  class BinaryOperation >\n        inline OutputIterator\n        transform(const SinglePassRange1& rng1,\n                  const SinglePassRange2& rng2,\n                  OutputIterator          out,\n                  BinaryOperation         fun)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n            return boost::range_detail::transform_impl(\n                        boost::begin(rng1), boost::end(rng1),\n                        boost::begin(rng2), boost::end(rng2),\n                        out, fun);\n        }\n\n    } // namespace range\n    using range::transform;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/unique.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_UNIQUE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_UNIQUE_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function unique\n///\n/// range-based version of the unique std algorithm\n///\n/// \\pre Rng meets the requirements for a Forward range\ntemplate< range_return_value re, class ForwardRange >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nunique( ForwardRange& rng )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::\n        pack( std::unique( boost::begin(rng),\n                           boost::end(rng)), rng );\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nunique( const ForwardRange& rng )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::\n        pack( std::unique( boost::begin(rng),\n                           boost::end(rng)), rng );\n}\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\nunique( ForwardRange& rng, BinaryPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::\n        pack(std::unique(boost::begin(rng), boost::end(rng), pred),\n             rng);\n}\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nunique( const ForwardRange& rng, BinaryPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::\n        pack(std::unique(boost::begin(rng), boost::end(rng), pred),\n             rng);\n}\n\n/// \\overload\ntemplate< class ForwardRange >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange, return_begin_found>::type\nunique( ForwardRange& rng )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return ::boost::range::unique<return_begin_found>(rng);\n}\n/// \\overload\ntemplate< class ForwardRange >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange, return_begin_found>::type\nunique( const ForwardRange& rng )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return ::boost::range::unique<return_begin_found>(rng);\n}\n/// \\overload\ntemplate< class ForwardRange, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<ForwardRange, return_begin_found>::type\nunique( ForwardRange& rng, BinaryPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return ::boost::range::unique<return_begin_found>(rng, pred);\n}\n/// \\overload\ntemplate< class ForwardRange, class BinaryPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange, return_begin_found>::type\nunique( const ForwardRange& rng, BinaryPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return ::boost::range::unique<return_begin_found>(rng, pred);\n}\n\n    } // namespace range\n    using range::unique;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/unique_copy.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_UNIQUE_COPY_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_UNIQUE_COPY_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function unique_copy\n///\n/// range-based version of the unique_copy std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\n/// \\pre OutputIterator is a model of the OutputIteratorConcept\n/// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\ntemplate< class SinglePassRange, class OutputIterator >\ninline OutputIterator\nunique_copy( const SinglePassRange& rng, OutputIterator out_it )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return std::unique_copy(boost::begin(rng), boost::end(rng), out_it);\n}\n/// \\overload\ntemplate< class SinglePassRange, class OutputIterator, class BinaryPredicate >\ninline OutputIterator\nunique_copy( const SinglePassRange& rng, OutputIterator out_it,\n             BinaryPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    return std::unique_copy(boost::begin(rng), boost::end(rng), out_it, pred);\n}\n\n    } // namespace range\n    using range::unique_copy;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm/upper_bound.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_UPPER_BOUND_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_UPPER_BOUND_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function upper_bound\n///\n/// range-based version of the upper_bound std algorithm\n///\n/// \\pre ForwardRange is a model of the ForwardRangeConcept\ntemplate< class ForwardRange, class Value >\ninline\nBOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange>,\n    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\n>::type\nupper_bound( ForwardRange& rng, Value val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::upper_bound(boost::begin(rng), boost::end(rng), val);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Value >\nBOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nupper_bound( const ForwardRange& rng, Value val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::upper_bound(boost::begin(rng), boost::end(rng), val);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Value, class SortPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange>,\n    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\n>::type\nupper_bound( ForwardRange& rng, Value val, SortPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return std::upper_bound(boost::begin(rng), boost::end(rng), val, pred);\n}\n\n/// \\overload\ntemplate< class ForwardRange, class Value, class SortPredicate >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type\nupper_bound( const ForwardRange& rng, Value val, SortPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return std::upper_bound(boost::begin(rng), boost::end(rng), val, pred);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange>,\n    BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\n>::type\nupper_bound( ForwardRange& rng, Value val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::\n        pack(std::upper_bound(boost::begin(rng), boost::end(rng), val),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nupper_bound( const ForwardRange& rng, Value val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::\n        pack(std::upper_bound(boost::begin(rng), boost::end(rng), val),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value,\n          class SortPredicate >\ninline BOOST_DEDUCED_TYPENAME disable_if<\n    is_const<ForwardRange>,\n    BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type\n>::type\nupper_bound( ForwardRange& rng, Value val, SortPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    return range_return<ForwardRange,re>::\n        pack(std::upper_bound(boost::begin(rng), boost::end(rng), val, pred),\n             rng);\n}\n\n/// \\overload\ntemplate< range_return_value re, class ForwardRange, class Value,\n          class SortPredicate >\ninline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type\nupper_bound( const ForwardRange& rng, Value val, SortPredicate pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    return range_return<const ForwardRange,re>::\n        pack(std::upper_bound(boost::begin(rng), boost::end(rng), val, pred),\n             rng);\n}\n\n    } // namespace range\n    using range::upper_bound;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm.hpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n/// \\file algorithm.hpp\n///   Includes the range-based versions of the algorithms in the\n///   C++ standard header file <algorithm>\n//\n/////////////////////////////////////////////////////////////////////////////\n\n// Copyright 2009 Neil Groves.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// Acknowledgements:\n// This code uses combinations of ideas, techniques and code snippets\n// from: Thorsten Ottosen, Eric Niebler, Jeremy Siek,\n// and Vladimir Prus'\n//\n// The original mutating algorithms that served as the first version\n// were originally written by Vladimir Prus'\n// <ghost@cs.msu.su> code from Boost Wiki\n\n#if defined(_MSC_VER)\n#pragma once\n#endif\n\n#ifndef BOOST_RANGE_ALGORITHM_HPP_INCLUDED_01012009\n#define BOOST_RANGE_ALGORITHM_HPP_INCLUDED_01012009\n\n#include <boost/range/concepts.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/detail/range_return.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <boost/next_prior.hpp>\n#include <algorithm>\n\n// Non-mutating algorithms\n#include <boost/range/algorithm/adjacent_find.hpp>\n#include <boost/range/algorithm/count.hpp>\n#include <boost/range/algorithm/count_if.hpp>\n#include <boost/range/algorithm/equal.hpp>\n#include <boost/range/algorithm/for_each.hpp>\n#include <boost/range/algorithm/find.hpp>\n#include <boost/range/algorithm/find_end.hpp>\n#include <boost/range/algorithm/find_first_of.hpp>\n#include <boost/range/algorithm/find_if.hpp>\n#include <boost/range/algorithm/lexicographical_compare.hpp>\n#include <boost/range/algorithm/mismatch.hpp>\n#include <boost/range/algorithm/search.hpp>\n#include <boost/range/algorithm/search_n.hpp>\n\n// Mutating algorithms\n#include <boost/range/algorithm/copy.hpp>\n#include <boost/range/algorithm/copy_backward.hpp>\n#include <boost/range/algorithm/fill.hpp>\n#include <boost/range/algorithm/fill_n.hpp>\n#include <boost/range/algorithm/generate.hpp>\n#include <boost/range/algorithm/inplace_merge.hpp>\n#include <boost/range/algorithm/merge.hpp>\n#include <boost/range/algorithm/nth_element.hpp>\n#include <boost/range/algorithm/partial_sort.hpp>\n#include <boost/range/algorithm/partial_sort_copy.hpp>\n#include <boost/range/algorithm/partition.hpp>\n#include <boost/range/algorithm/random_shuffle.hpp>\n#include <boost/range/algorithm/remove.hpp>\n#include <boost/range/algorithm/remove_copy.hpp>\n#include <boost/range/algorithm/remove_copy_if.hpp>\n#include <boost/range/algorithm/remove_if.hpp>\n#include <boost/range/algorithm/replace.hpp>\n#include <boost/range/algorithm/replace_copy.hpp>\n#include <boost/range/algorithm/replace_copy_if.hpp>\n#include <boost/range/algorithm/replace_if.hpp>\n#include <boost/range/algorithm/reverse.hpp>\n#include <boost/range/algorithm/reverse_copy.hpp>\n#include <boost/range/algorithm/rotate.hpp>\n#include <boost/range/algorithm/rotate_copy.hpp>\n#include <boost/range/algorithm/sort.hpp>\n#include <boost/range/algorithm/stable_partition.hpp>\n#include <boost/range/algorithm/stable_sort.hpp>\n#include <boost/range/algorithm/transform.hpp>\n#include <boost/range/algorithm/unique.hpp>\n#include <boost/range/algorithm/unique_copy.hpp>\n\n// Binary search\n#include <boost/range/algorithm/binary_search.hpp>\n#include <boost/range/algorithm/equal_range.hpp>\n#include <boost/range/algorithm/lower_bound.hpp>\n#include <boost/range/algorithm/upper_bound.hpp>\n\n// Set operations of sorted ranges\n#include <boost/range/algorithm/set_algorithm.hpp>\n\n// Heap operations\n#include <boost/range/algorithm/heap_algorithm.hpp>\n\n// Minimum and Maximum\n#include <boost/range/algorithm/max_element.hpp>\n#include <boost/range/algorithm/min_element.hpp>\n\n// Permutations\n#include <boost/range/algorithm/permutation.hpp>\n\n#endif // include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext/copy_n.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_COPY_N_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_COPY_N_HPP_INCLUDED\n\n#include <boost/assert.hpp>\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/distance.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function copy\n///\n/// range-based version of the copy std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\n/// \\pre OutputIterator is a model of the OutputIteratorConcept\n/// \\pre 0 <= n <= distance(rng)\ntemplate< class SinglePassRange, class Size, class OutputIterator >\ninline OutputIterator copy_n(const SinglePassRange& rng, Size n, OutputIterator out)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));\n    BOOST_ASSERT( n <= static_cast<Size>(::boost::distance(rng)) );\n    BOOST_ASSERT( n >= static_cast<Size>(0) );\n\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange>::type source = ::boost::begin(rng);\n\n    for (Size i = 0; i < n; ++i, ++out, ++source)\n        *out = *source;\n\n    return out;\n}\n\n    } // namespace range\n    using ::boost::range::copy_n;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext/erase.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EXT_ERASE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EXT_ERASE_HPP_INCLUDED\n\n#include <boost/range/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/assert.hpp>\n\nnamespace boost\n{\n    namespace range\n    {\n\ntemplate< class Container >\ninline Container& erase( Container& on,\n      iterator_range<BOOST_DEDUCED_TYPENAME Container::iterator> to_erase )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<Container> ));\n    on.erase( boost::begin(to_erase), boost::end(to_erase) );\n    return on;\n}\n\ntemplate< class Container, class T >\ninline Container& remove_erase( Container& on, const T& val )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<Container> ));\n    on.erase(\n        std::remove(boost::begin(on), boost::end(on), val),\n        boost::end(on));\n    return on;\n}\n\ntemplate< class Container, class Pred >\ninline Container& remove_erase_if( Container& on, Pred pred )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<Container> ));\n    on.erase(\n        std::remove_if(boost::begin(on), boost::end(on), pred),\n        boost::end(on));\n    return on;\n}\n\n    } // namespace range\n    using range::erase;\n    using range::remove_erase;\n    using range::remove_erase_if;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext/for_each.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EXT_FOR_EACH_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EXT_FOR_EACH_HPP_INCLUDED\n\n#include <boost/range/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/assert.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template<class InputIterator1, class InputIterator2, class Fn2>\n        inline Fn2 for_each_impl(InputIterator1 first1, InputIterator1 last1,\n                                 InputIterator2 first2, InputIterator2 last2,\n                                 Fn2 fn)\n        {\n            for (; first1 != last1 && first2 != last2; ++first1, ++first2)\n            {\n                fn(*first1, *first2);\n            }\n            return fn;\n        }\n    }\n\n    namespace range\n    {\n        template<class SinglePassRange1, class SinglePassRange2, class Fn2>\n        inline Fn2 for_each(const SinglePassRange1& rng1, const SinglePassRange2& rng2, Fn2 fn)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n            return ::boost::range_detail::for_each_impl(\n                ::boost::begin(rng1), ::boost::end(rng1),\n                ::boost::begin(rng2), ::boost::end(rng2), fn);\n        }\n\n        template<class SinglePassRange1, class SinglePassRange2, class Fn2>\n        inline Fn2 for_each(const SinglePassRange1& rng1, SinglePassRange2& rng2, Fn2 fn)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));\n\n            return ::boost::range_detail::for_each_impl(\n                ::boost::begin(rng1), ::boost::end(rng1),\n                ::boost::begin(rng2), ::boost::end(rng2), fn);\n        }\n\n        template<class SinglePassRange1, class SinglePassRange2, class Fn2>\n        inline Fn2 for_each(SinglePassRange1& rng1, const SinglePassRange2& rng2, Fn2 fn)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n            return ::boost::range_detail::for_each_impl(\n                ::boost::begin(rng1), ::boost::end(rng1),\n                ::boost::begin(rng2), ::boost::end(rng2), fn);\n        }\n\n        template<class SinglePassRange1, class SinglePassRange2, class Fn2>\n        inline Fn2 for_each(SinglePassRange1& rng1, SinglePassRange2& rng2, Fn2 fn)\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));\n\n            return ::boost::range_detail::for_each_impl(\n                ::boost::begin(rng1), ::boost::end(rng1),\n                ::boost::begin(rng2), ::boost::end(rng2), fn);\n        }\n    } // namespace range\n    using range::for_each;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext/insert.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EXT_INSERT_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EXT_INSERT_HPP_INCLUDED\n\n#include <boost/range/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/assert.hpp>\n\nnamespace boost\n{\n    namespace range\n    {\n\ntemplate< class Container, class Range >\ninline Container& insert( Container& on,\n                          BOOST_DEDUCED_TYPENAME Container::iterator before,\n                          const Range& from )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<Container> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<Range> ));\n    on.insert( before, boost::begin(from), boost::end(from) );\n    return on;\n}\n\ntemplate< class Container, class Range >\ninline Container& insert( Container& on, const Range& from )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<Container> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<Range> ));\n    on.insert(boost::begin(from), boost::end(from));\n}\n\n    } // namespace range\n    using range::insert;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext/iota.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EXT_IOTA_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EXT_IOTA_HPP_INCLUDED\n\n#include <boost/range/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost\n{\n    namespace range\n    {\n\ntemplate< class ForwardRange, class Value >\ninline ForwardRange& iota( ForwardRange& rng, Value x )\n{\n    BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));\n    typedef BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type iterator_t;\n\n    iterator_t last_target = ::boost::end(rng);\n    for (iterator_t target = ::boost::begin(rng); target != last_target; ++target, ++x)\n        *target = x;\n\n    return rng;\n}\n\ntemplate< class ForwardRange, class Value >\ninline const ForwardRange& iota( const ForwardRange& rng, Value x )\n{\n    BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));\n    typedef BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type iterator_t;\n    \n    iterator_t last_target = ::boost::end(rng);\n    for (iterator_t target = ::boost::begin(rng); target != last_target; ++target, ++x)\n        *target = x;\n    \n    return rng;\n}\n\n    } // namespace range\n    using range::iota;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext/is_sorted.hpp",
    "content": "//  Copyright Bryce Lelbach 2010\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EXT_IS_SORTED_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EXT_IS_SORTED_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/detail/is_sorted.hpp>\n#include <algorithm>\n\nnamespace boost\n{\n    namespace range\n    {\n\n/// \\brief template function is_sorted\n///\n/// range-based version of the is_sorted std algorithm\n///\n/// \\pre SinglePassRange is a model of the SinglePassRangeConcept\ntemplate<class SinglePassRange>\ninline bool is_sorted(const SinglePassRange& rng)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));\n    BOOST_RANGE_CONCEPT_ASSERT((LessThanComparableConcept<BOOST_DEDUCED_TYPENAME\n      range_value<const SinglePassRange>::type>));\n    return ::boost::detail::is_sorted(boost::begin(rng), boost::end(rng));\n}\n\n/// \\overload\ntemplate<class SinglePassRange, class BinaryPredicate>\ninline bool is_sorted(const SinglePassRange& rng, BinaryPredicate pred)\n{\n    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));\n    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,\n      BOOST_DEDUCED_TYPENAME range_value<const SinglePassRange>::type,\n      BOOST_DEDUCED_TYPENAME range_value<const SinglePassRange>::type>));\n    return ::boost::detail::is_sorted(boost::begin(rng), boost::end(rng), pred);\n}\n\n    } // namespace range\n\nusing range::is_sorted;\n\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext/overwrite.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EXT_OVERWRITE_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EXT_OVERWRITE_HPP_INCLUDED\n\n#include <boost/range/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/assert.hpp>\n\nnamespace boost\n{\n    namespace range\n    {\n\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline void overwrite( const SinglePassRange1& from, SinglePassRange2& to )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));\n\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type\n        i = boost::begin(from), e = boost::end(from);\n\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type\n        out = boost::begin(to);\n\n#ifndef NDEBUG\n    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type\n        last_out = boost::end(to);\n#endif\n\n    for( ; i != e; ++out, ++i )\n    {\n#ifndef NDEBUG\n        BOOST_ASSERT( out != last_out\n            && \"out of bounds in boost::overwrite()\" );\n#endif\n        *out = *i;\n    }\n}\n\ntemplate< class SinglePassRange1, class SinglePassRange2 >\ninline void overwrite( const SinglePassRange1& from, const SinglePassRange2& to )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type\n        i = boost::begin(from), e = boost::end(from);\n\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type\n        out = boost::begin(to);\n\n#ifndef NDEBUG\n    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type\n        last_out = boost::end(to);\n#endif\n\n    for( ; i != e; ++out, ++i )\n    {\n#ifndef NDEBUG\n        BOOST_ASSERT( out != last_out\n            && \"out of bounds in boost::overwrite()\" );\n#endif\n        *out = *i;\n    }\n}\n\n    } // namespace range\n    using range::overwrite;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext/push_back.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EXT_PUSH_BACK_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EXT_PUSH_BACK_HPP_INCLUDED\n\n#include <boost/range/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/detail/implementation_help.hpp>\n#include <boost/assert.hpp>\n\nnamespace boost\n{\n    namespace range\n    {\n\ntemplate< class Container, class Range >\ninline Container& push_back( Container& on, const Range& from )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<Container> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const Range> ));\n    BOOST_ASSERT_MSG(!range_detail::is_same_object(on, from),\n        \"cannot copy from a container to itself\");\n    on.insert( on.end(), boost::begin(from), boost::end(from) );\n    return on;\n}\n\n    } // namespace range\n    using range::push_back;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext/push_front.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EXT_PUSH_FRONT_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EXT_PUSH_FRONT_HPP_INCLUDED\n\n#include <boost/range/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/detail/implementation_help.hpp>\n#include <boost/assert.hpp>\n\nnamespace boost\n{\n    namespace range\n    {\n\ntemplate< class Container, class Range >\ninline Container& push_front( Container& on, const Range& from )\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<Container> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const Range> ));\n    BOOST_ASSERT_MSG(!range_detail::is_same_object(on, from),\n        \"cannot copy from a container to itself\");\n    on.insert( on.begin(), boost::begin(from), boost::end(from) );\n    return on;\n}\n\n    } // namespace range\n    using range::push_front;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/algorithm_ext.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2007. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  Copyright Thorsten Ottosen 2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EXT_HPP\n#define BOOST_RANGE_ALGORITHM_EXT_HPP\n\n#include <boost/range/algorithm_ext/copy_n.hpp>\n#include <boost/range/algorithm_ext/for_each.hpp>\n#include <boost/range/algorithm_ext/is_sorted.hpp>\n#include <boost/range/algorithm_ext/iota.hpp>\n#include <boost/range/algorithm_ext/overwrite.hpp>\n#include <boost/range/algorithm_ext/push_back.hpp>\n#include <boost/range/algorithm_ext/push_front.hpp>\n#include <boost/range/algorithm_ext/insert.hpp>\n#include <boost/range/algorithm_ext/erase.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/any_range.hpp",
    "content": "//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ANY_RANGE_HPP_INCLUDED\n#define BOOST_RANGE_ANY_RANGE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n#include <boost/range/detail/any_iterator.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/reference.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/iterator_range_core.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        // If T is use_default, return the result of Default, otherwise\n        // return T.\n        //\n        // This is an implementation artifact used to pick intelligent default\n        // values when the user specified boost::use_default as a template\n        // parameter.\n        template<\n            class T,\n            class Default\n        >\n        struct any_range_default_help\n            : mpl::eval_if<\n                is_same<T, use_default>\n              , Default\n              , mpl::identity<T>\n            >\n        {\n        };\n\n        template<\n            class WrappedRange\n          , class Value\n          , class Reference\n        >\n        struct any_range_value_type\n        {\n# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY\n            typedef typename any_range_default_help<\n                    Value\n                  , mpl::eval_if<\n                        is_same<Reference, use_default>\n                      , range_value<\n                            typename remove_const<WrappedRange>\n                        ::type>\n                      , remove_reference<Reference>\n                    >\n                >::type type;\n# else\n            typedef typename any_range_default_help<\n                Value\n              , range_value<\n                    typename remove_const<WrappedRange>\n                ::type>\n            >::type type;\n# endif\n        };\n\n        template<\n            class Value\n          , class Traversal\n          , class Reference = Value&\n          , class Difference = std::ptrdiff_t\n          , class Buffer = use_default\n        >\n        class any_range\n            : public iterator_range<\n                        any_iterator<\n                            Value\n                          , Traversal\n                          , Reference\n                          , Difference\n                          , typename any_range_default_help<\n                                Buffer\n                              , mpl::identity<any_iterator_default_buffer>\n                            >::type\n                        >\n                    >\n        {\n            typedef iterator_range<\n                        any_iterator<\n                            Value\n                          , Traversal\n                          , Reference\n                          , Difference\n                          , typename any_range_default_help<\n                                Buffer\n                              , mpl::identity<any_iterator_default_buffer>\n                            >::type\n                        >\n                    > base_type;\n\n            struct enabler {};\n            struct disabler {};\n        public:\n            any_range()\n            {\n            }\n\n            any_range(const any_range& other)\n                : base_type(other)\n            {\n            }\n\n            template<class WrappedRange>\n            any_range(WrappedRange& wrapped_range)\n            : base_type(boost::begin(wrapped_range),\n                        boost::end(wrapped_range))\n            {\n            }\n\n            template<class WrappedRange>\n            any_range(const WrappedRange& wrapped_range)\n            : base_type(boost::begin(wrapped_range),\n                        boost::end(wrapped_range))\n            {\n            }\n\n            template<\n                class OtherValue\n              , class OtherTraversal\n              , class OtherReference\n              , class OtherDifference\n            >\n            any_range(const any_range<\n                                OtherValue\n                              , OtherTraversal\n                              , OtherReference\n                              , OtherDifference\n                              , Buffer\n                            >& other)\n            : base_type(boost::begin(other), boost::end(other))\n            {\n            }\n\n            template<class Iterator>\n            any_range(Iterator first, Iterator last)\n                : base_type(first, last)\n            {\n            }\n        };\n\n        template<\n            class WrappedRange\n          , class Value = use_default\n          , class Traversal = use_default\n          , class Reference = use_default\n          , class Difference = use_default\n          , class Buffer = use_default\n        >\n        struct any_range_type_generator\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<WrappedRange> ));\n            typedef any_range<\n                typename any_range_value_type<\n                    WrappedRange\n                  , Value\n                  , typename any_range_default_help<\n                        Reference\n                      , range_reference<WrappedRange>\n                    >::type\n                >::type\n              , typename any_range_default_help<\n                            Traversal\n                          , iterator_traversal<\n                                typename range_iterator<WrappedRange>::type\n                            >\n                        >::type\n              , typename any_range_default_help<\n                    Reference\n                  , range_reference<WrappedRange>\n                >::type\n              , typename any_range_default_help<\n                    Difference\n                  , range_difference<WrappedRange>\n                >::type\n              , typename any_range_default_help<\n                    Buffer\n                  , mpl::identity<any_iterator_default_buffer>\n                >::type\n            > type;\n        };\n    } // namespace range_detail\n\n    using range_detail::any_range;\n    using range_detail::any_range_type_generator;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/as_array.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_AS_ARRAY_HPP\n#define BOOST_RANGE_AS_ARRAY_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/detail/str_types.hpp>\n\nnamespace boost\n{\n\n    template< class R >\n    inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<R>::type > \n    as_array( R& r )\n    {\n        return boost::make_iterator_range( r );\n    }\n\n#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n    template< class Range >\n    inline boost::iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type > \n    as_array( const Range& r )\n    {\n        return boost::make_iterator_range( r );\n    }\n    \n#endif\n    \n}\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/as_literal.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_AS_LITERAL_HPP\n#define BOOST_RANGE_AS_LITERAL_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#include <boost/range/detail/as_literal.hpp>\n#else\n\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/detail/str_types.hpp>\n\n#include <boost/detail/workaround.hpp>\n\n#include <cstring>\n#ifndef BOOST_NO_CWCHAR\n#include <cwchar>\n#endif\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        inline std::size_t length( const char* s )\n        {\n            return strlen( s );\n        }\n\n#ifndef BOOST_NO_CWCHAR\n        inline std::size_t length( const wchar_t* s )\n        {\n            return wcslen( s );\n        }\n#endif\n\n        //\n        // Remark: the compiler cannot choose between T* and T[sz]\n        // overloads, so we must put the T* internal to the\n        // unconstrained version.\n        //\n\n        inline bool is_char_ptr( char* )\n        {\n            return true;\n        }\n\n        inline bool is_char_ptr( const char* )\n        {\n            return true;\n        }\n\n#ifndef BOOST_NO_CWCHAR\n        inline bool is_char_ptr( wchar_t* )\n        {\n            return true;\n        }\n\n        inline bool is_char_ptr( const wchar_t* )\n        {\n            return true;\n        }\n#endif\n\n        template< class T >\n        inline long is_char_ptr( const T& /* r */ )\n        {\n            return 0L;\n        }\n\n        template< class T >\n        inline iterator_range<T*>\n        make_range( T* const r, bool )\n        {\n            return iterator_range<T*>( r, r + length(r) );\n        }\n\n        template< class T >\n        inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<T>::type>\n        make_range( T& r, long )\n        {\n            return boost::make_iterator_range( r );\n        }\n\n    }\n\n    template< class Range >\n    inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<Range>::type>\n    as_literal( Range& r )\n    {\n        return range_detail::make_range( r, range_detail::is_char_ptr(r) );\n    }\n\n    template< class Range >\n    inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type>\n    as_literal( const Range& r )\n    {\n        return range_detail::make_range( r, range_detail::is_char_ptr(r) );\n    }\n\n    template< class Char, std::size_t sz >\n    inline iterator_range<Char*> as_literal( Char (&arr)[sz] )\n    {\n        return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );\n    }\n\n    template< class Char, std::size_t sz >\n    inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )\n    {\n        return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );\n    }\n}\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/atl.hpp",
    "content": "#ifndef BOOST_RANGE_ATL_HPP\n#define BOOST_RANGE_ATL_HPP\n\n\n\n\n// Boost.Range ATL Extension\n//\n// Copyright Shunsuke Sogame 2005-2006.\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n\n\n\n// config\n//\n\n\n#include <atldef.h> // _ATL_VER\n\n\n#if !defined(BOOST_RANGE_ATL_NO_COLLECTIONS)\n    #if (_ATL_VER < 0x0700)\n        #define BOOST_RANGE_ATL_NO_COLLECTIONS\n    #endif\n#endif\n\n\n#if !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX)\n    #if (_ATL_VER < 0x0700) // dubious\n        #define BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX\n    #endif\n#endif\n\n\n// forward declarations\n//\n\n\n#include <basetyps.h> // IID\n\n\nnamespace ATL {\n\n\n#if !defined(BOOST_RANGE_ATL_NO_COLLECTIONS)\n\n\n    // arrays\n    //\n    template< class E, class ETraits >\n    class CAtlArray;\n\n    template< class E >\n    class CAutoPtrArray;\n\n    template< class I, const IID *piid >\n    class CInterfaceArray;\n\n\n    // lists\n    //\n    template< class E, class ETraits >\n    class CAtlList;\n\n    template< class E >\n    class CAutoPtrList;\n\n    template< class E, class Allocator >\n    class CHeapPtrList;\n\n    template< class I, const IID *piid >\n    class CInterfaceList;\n\n\n    // maps\n    //\n    template< class K, class V, class KTraits, class VTraits >\n    class CAtlMap;\n\n    template< class K, class V, class KTraits, class VTraits >\n    class CRBTree;\n\n    template< class K, class V, class KTraits, class VTraits >\n    class CRBMap;\n\n    template< class K, class V, class KTraits, class VTraits >\n    class CRBMultiMap;\n\n\n    // strings\n    //\n#if !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLESTRING)\n    template< class BaseType, bool t_bMFCDLL >\n    class CSimpleStringT;\n#else\n    template< class BaseType >\n    class CSimpleStringT;\n#endif\n\n    template< class BaseType, class StringTraits >\n    class CStringT;\n\n    template< class StringType, int t_nChars >\n    class CFixedStringT;\n\n    template< class BaseType, const int t_nSize >\n    class CStaticString;\n\n\n#endif // !defined(BOOST_RANGE_ATL_NO_COLLECTIONS)\n\n\n    // simples\n    //\n#if !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX)\n\n    template< class T, class TEqual >\n    class CSimpleArray;\n\n    template< class TKey, class TVal, class TEqual >\n    class CSimpleMap;\n\n#else\n\n    template< class T >\n    class CSimpleArray;\n\n    template< class T >\n    class CSimpleValArray;\n\n    template< class TKey, class TVal >\n    class CSimpleMap;\n\n#endif // !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX)\n\n\n    // pointers\n    //\n    template< class E >\n    class CAutoPtr;\n\n    template< class T >\n    class CComPtr;\n\n    template< class T, const IID *piid >\n    class CComQIPtr;\n\n    template< class E, class Allocator >\n    class CHeapPtr;\n\n    template< class T >\n    class CAdapt;\n\n\n} // namespace ATL\n\n\n\n\n// indirect_iterator customizations\n//\n\n\n#include <boost/mpl/identity.hpp>\n#include <boost/pointee.hpp>\n\n\nnamespace boost {\n\n\n    template< class E >\n    struct pointee< ATL::CAutoPtr<E> > :\n        mpl::identity<E>\n    { };\n\n    template< class T >\n    struct pointee< ATL::CComPtr<T> > :\n        mpl::identity<T>\n    { };\n\n    template< class T, const IID *piid >\n    struct pointee< ATL::CComQIPtr<T, piid> > :\n        mpl::identity<T>\n    { };\n\n    template< class E, class Allocator >\n    struct pointee< ATL::CHeapPtr<E, Allocator> > :\n        mpl::identity<E>\n    { };\n\n    template< class T >\n    struct pointee< ATL::CAdapt<T> > :\n        pointee<T>\n    { };\n\n\n} // namespace boost\n\n\n\n\n// extended customizations\n//\n\n\n#include <boost/iterator/indirect_iterator.hpp>\n#include <boost/iterator/zip_iterator.hpp>\n#include <boost/range/detail/microsoft.hpp>\n#include <boost/tuple/tuple.hpp>\n#include <atlbase.h> // CComBSTR\n\n\nnamespace boost { namespace range_detail_microsoft {\n\n\n#if !defined(BOOST_RANGE_ATL_NO_COLLECTIONS)\n\n\n    // arrays\n    //\n\n    struct atl_array_functions :\n        array_functions\n    {\n        template< class Iterator, class X >\n        Iterator end(X& x) // redefine\n        {\n            return x.GetData() + x.GetCount(); // no 'GetSize()'\n        }\n    };\n\n\n    template< class E, class ETraits >\n    struct customization< ATL::CAtlArray<E, ETraits> > :\n        atl_array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef E val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n\n    template< class E >\n    struct customization< ATL::CAutoPtrArray<E> > :\n        atl_array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            // ATL::CAutoPtr/CHeapPtr is no assignable.\n            typedef ATL::CAutoPtr<E> val_t;\n            typedef val_t *miter_t;\n            typedef val_t const *citer_t;\n\n            typedef indirect_iterator<miter_t> mutable_iterator;\n            typedef indirect_iterator<citer_t> const_iterator;\n        };\n    };\n\n\n    template< class I, const IID *piid >\n    struct customization< ATL::CInterfaceArray<I, piid> > :\n        atl_array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef ATL::CComQIPtr<I, piid> val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n\n    template< class E, class ETraits >\n    struct customization< ATL::CAtlList<E, ETraits> > :\n        list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef E val_t;\n\n            typedef list_iterator<X, val_t> mutable_iterator;\n            typedef list_iterator<X const, val_t const> const_iterator;\n        };\n    };\n\n\n    struct indirected_list_functions\n    {\n        template< class Iterator, class X >\n        Iterator begin(X& x)\n        {\n            typedef typename Iterator::base_type base_t; // == list_iterator\n            return Iterator(base_t(x, x.GetHeadPosition()));\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            typedef typename Iterator::base_type base_t;\n            return Iterator(base_t(x, POSITION(0)));\n        }\n    };\n\n\n    template< class E >\n    struct customization< ATL::CAutoPtrList<E> > :\n        indirected_list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef ATL::CAutoPtr<E> val_t;\n            typedef list_iterator<X, val_t> miter_t;\n            typedef list_iterator<X const, val_t const> citer_t;\n\n            typedef indirect_iterator<miter_t> mutable_iterator;\n            typedef indirect_iterator<citer_t> const_iterator;\n        };\n    };\n\n\n    template< class E, class Allocator >\n    struct customization< ATL::CHeapPtrList<E, Allocator> > :\n        indirected_list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef ATL::CHeapPtr<E, Allocator> val_t;\n            typedef list_iterator<X, val_t> miter_t;\n            typedef list_iterator<X const, val_t const> citer_t;\n\n            typedef indirect_iterator<miter_t> mutable_iterator;\n            typedef indirect_iterator<citer_t> const_iterator;\n        };\n    };\n\n\n    template< class I, const IID *piid >\n    struct customization< ATL::CInterfaceList<I, piid> > :\n        list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef ATL::CComQIPtr<I, piid> val_t;\n\n            typedef list_iterator<X, val_t> mutable_iterator;\n            typedef list_iterator<X const, val_t const> const_iterator;\n        };\n    };\n\n\n    // maps\n    //\n\n    struct atl_rb_tree_tag\n    { };\n\n    template< >\n    struct customization< atl_rb_tree_tag > :\n        indirected_list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef typename X::CPair val_t;\n\n            typedef list_iterator<X, val_t *, val_t *> miter_t;\n            typedef list_iterator<X const, val_t const *, val_t const *> citer_t;\n            \n            typedef indirect_iterator<miter_t> mutable_iterator;\n            typedef indirect_iterator<citer_t> const_iterator;\n        };\n    };\n\n\n    template< class K, class V, class KTraits, class VTraits >\n    struct customization< ATL::CAtlMap<K, V, KTraits, VTraits> > :\n        customization< atl_rb_tree_tag >\n    {\n        template< class Iterator, class X >\n        Iterator begin(X& x) // redefine\n        {\n            typedef typename Iterator::base_type base_t; // == list_iterator\n            return Iterator(base_t(x, x.GetStartPosition())); // no 'GetHeadPosition'\n        }\n    };\n\n\n    // strings\n    //\n\n    struct atl_string_tag\n    { };\n\n    template< >\n    struct customization< atl_string_tag >\n    {\n        template< class X >\n        struct meta\n        {\n            typedef typename X::PXSTR mutable_iterator;\n            typedef typename X::PCXSTR const_iterator;\n        };\n\n        template< class Iterator, class X >\n        typename mutable_<Iterator, X>::type begin(X& x)\n        {\n            return x.GetBuffer(0);\n        }\n\n        template< class Iterator, class X >\n        Iterator begin(X const& x)\n        {\n            return x.GetString();\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return begin<Iterator>(x) + x.GetLength();\n        }\n    };\n\n\n    template< class BaseType, const int t_nSize >\n    struct customization< ATL::CStaticString<BaseType, t_nSize> >\n    {\n        template< class X >\n        struct meta\n        {\n            typedef BaseType const *mutable_iterator;\n            typedef mutable_iterator const_iterator;\n        };\n\n        template< class Iterator, class X >\n        Iterator begin(X const& x)\n        {\n            return x;\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X const& x)\n        {\n            return begin<Iterator>(x) + X::GetLength();\n        }\n    };\n\n\n#endif // !defined(BOOST_RANGE_ATL_NO_COLLECTIONS)\n\n\n    template< >\n    struct customization< ATL::CComBSTR >\n    {\n        template< class X >\n        struct meta\n        {\n            typedef OLECHAR *mutable_iterator;\n            typedef OLECHAR const *const_iterator;\n        };\n\n        template< class Iterator, class X >\n        Iterator begin(X& x)\n        {\n            return x.operator BSTR();\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return begin<Iterator>(x) + x.Length();\n        }\n    };\n\n\n    // simples\n    //\n\n#if !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX)\n    template< class T, class TEqual >\n    struct customization< ATL::CSimpleArray<T, TEqual> > :\n#else\n    template< class T >\n    struct customization< ATL::CSimpleArray<T> > :\n#endif\n        array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef T val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n\n#if defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX)\n\n    template< class T >\n    struct customization< ATL::CSimpleValArray<T> > :\n        array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef T val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n#endif // defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX)\n\n\n#if !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX)\n    template< class TKey, class TVal, class TEqual >\n    struct customization< ATL::CSimpleMap<TKey, TVal, TEqual> >\n#else\n    template< class TKey, class TVal >\n    struct customization< ATL::CSimpleMap<TKey, TVal> >\n#endif\n    {\n        template< class X >\n        struct meta\n        {\n            typedef TKey k_val_t;\n            typedef k_val_t *k_miter_t;\n            typedef k_val_t const *k_citer_t;\n\n            typedef TVal v_val_t;\n            typedef v_val_t *v_miter_t;\n            typedef v_val_t const *v_citer_t;\n\n            // Topic:\n            // 'std::pair' can't contain references\n            // because of reference to reference problem.\n\n            typedef zip_iterator< tuple<k_miter_t, v_miter_t> > mutable_iterator;\n            typedef zip_iterator< tuple<k_citer_t, v_citer_t> > const_iterator;\n        };\n\n        template< class Iterator, class X >\n        Iterator begin(X& x)\n        {\n            return Iterator(boost::make_tuple(x.m_aKey, x.m_aVal));\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return Iterator(boost::make_tuple(x.m_aKey + x.GetSize(), x.m_aVal + x.GetSize()));\n        }\n    };\n\n\n} } // namespace boost::range_detail_microsoft\n\n\n\n\n// range customizations\n//\n\n\n#if !defined(BOOST_RANGE_ATL_NO_COLLECTIONS)\n\n\n    // arrays\n    //\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CAtlArray, 2\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CAutoPtrArray, 1\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CInterfaceArray, (class)(const IID *)\n    )\n\n\n    // lists\n    //\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CAtlList, 2\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CAutoPtrList, 1\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CHeapPtrList, 2\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CInterfaceList, (class)(const IID *)\n    )\n\n\n    //maps\n    //\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CAtlMap, 4\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::atl_rb_tree_tag,\n        (ATL, BOOST_PP_NIL), CRBTree, 4\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::atl_rb_tree_tag,\n        (ATL, BOOST_PP_NIL), CRBMap, 4\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::atl_rb_tree_tag,\n        (ATL, BOOST_PP_NIL), CRBMultiMap, 4\n    )\n\n\n    // strings\n    //\n    #if !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLESTRING)\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n            boost::range_detail_microsoft::atl_string_tag,\n            (ATL, BOOST_PP_NIL), CSimpleStringT, (class)(bool)\n        )\n    #else\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n            boost::range_detail_microsoft::atl_string_tag,\n            (ATL, BOOST_PP_NIL), CSimpleStringT, 1\n        )\n    #endif\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::atl_string_tag,\n        (ATL, BOOST_PP_NIL), CStringT, 2\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::atl_string_tag,\n        (ATL, BOOST_PP_NIL), CFixedStringT, (class)(int)\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CStaticString, (class)(const int)\n    )\n\n\n#endif // !defined(BOOST_RANGE_ATL_NO_COLLECTIONS)\n\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    (ATL, BOOST_PP_NIL), CComBSTR\n)\n\n\n// simples\n//\n#if !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX)\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CSimpleArray, 2\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CSimpleMap, 3\n    )\n\n#else\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CSimpleArray, 1\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CSimpleMap, 2\n    )\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        (ATL, BOOST_PP_NIL), CSimpleValArray, 1\n    )\n\n#endif // !defined(BOOST_RANGE_ATL_HAS_OLD_CSIMPLE_XXX)\n\n\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/begin.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_BEGIN_HPP\n#define BOOST_RANGE_BEGIN_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#include <boost/range/detail/begin.hpp>\n#else\n\n#include <boost/range/iterator.hpp>\n\nnamespace boost\n{\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\nnamespace range_detail\n{\n#endif\n\n    //////////////////////////////////////////////////////////////////////\n    // primary template\n    //////////////////////////////////////////////////////////////////////\n\n    template< typename C >\n    inline BOOST_DEDUCED_TYPENAME range_iterator<C>::type\n    range_begin( C& c )\n    {\n        //\n        // If you get a compile-error here, it is most likely because\n        // you have not implemented range_begin() properly in\n        // the namespace of C\n        //\n        return c.begin();\n    }\n\n    //////////////////////////////////////////////////////////////////////\n    // pair\n    //////////////////////////////////////////////////////////////////////\n\n    template< typename Iterator >\n    inline Iterator range_begin( const std::pair<Iterator,Iterator>& p )\n    {\n        return p.first;\n    }\n\n    template< typename Iterator >\n    inline Iterator range_begin( std::pair<Iterator,Iterator>& p )\n    {\n        return p.first;\n    }\n\n    //////////////////////////////////////////////////////////////////////\n    // array\n    //////////////////////////////////////////////////////////////////////\n\n    //\n    // May this be discarded? Or is it needed for bad compilers?\n    //\n    template< typename T, std::size_t sz >\n    inline const T* range_begin( const T (&a)[sz] )\n    {\n        return a;\n    }\n\n    template< typename T, std::size_t sz >\n    inline T* range_begin( T (&a)[sz] )\n    {\n        return a;\n    }\n\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n} // namespace 'range_detail'\n#endif\n\n// Use a ADL namespace barrier to avoid ambiguity with other unqualified\n// calls. This is particularly important with C++0x encouraging\n// unqualified calls to begin/end.\nnamespace range_adl_barrier\n{\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_iterator<T>::type begin( T& r )\n{\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n    using namespace range_detail;\n#endif\n    return range_begin( r );\n}\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type begin( const T& r )\n{\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n    using namespace range_detail;\n#endif\n    return range_begin( r );\n}\n\n    } // namespace range_adl_barrier\n} // namespace boost\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\nnamespace boost\n{\n    namespace range_adl_barrier\n    {\n        template< class T >\n        inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type\n        const_begin( const T& r )\n        {\n            return boost::range_adl_barrier::begin( r );\n        }\n    } // namespace range_adl_barrier\n\n    using namespace range_adl_barrier;\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/category.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_CATEGORY_HPP\n#define BOOST_RANGE_CATEGORY_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n\nnamespace boost\n{\n    template< class T >\n    struct range_category : iterator_category< typename range_iterator<T>::type >\n    { };\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/combine.hpp",
    "content": "//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_COMBINE_HPP\n#define BOOST_RANGE_COMBINE_HPP\n\n#include <boost/config.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/iterator/zip_iterator.hpp>\n\nnamespace boost\n{\n    namespace range\n    {\n\ntemplate<typename IterTuple>\nclass combined_range\n        : public iterator_range<zip_iterator<IterTuple> >\n{\n    typedef iterator_range<zip_iterator<IterTuple> > base;\npublic:\n    combined_range(IterTuple first, IterTuple last)\n        : base(first, last)\n    {\n    }\n};\n\n    } // namespace range\n} // namespace boost\n\n#if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) || \\\n    defined(BOOST_NO_CXX11_DECLTYPE) || \\\n    defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || \\\n    defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n#   include <boost/range/detail/combine_cxx03.hpp>\n#else\n#   include <boost/range/detail/combine_cxx11.hpp>\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/concepts.hpp",
    "content": "// Boost.Range library concept checks\n//\n//  Copyright Neil Groves 2009. Use, modification and distribution\n//  are subject to the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  Copyright Daniel Walker 2006. Use, modification and distribution\n//  are subject to the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_CONCEPTS_HPP\n#define BOOST_RANGE_CONCEPTS_HPP\n\n#include <boost/concept_check.hpp>\n#include <boost/iterator/iterator_concepts.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/detail/misc_concept.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\n/*!\n * \\file\n * \\brief Concept checks for the Boost Range library.\n *\n * The structures in this file may be used in conjunction with the\n * Boost Concept Check library to insure that the type of a function\n * parameter is compatible with a range concept. If not, a meaningful\n * compile time error is generated. Checks are provided for the range\n * concepts related to iterator traversal categories. For example, the\n * following line checks that the type T models the ForwardRange\n * concept.\n *\n * \\code\n * BOOST_CONCEPT_ASSERT((ForwardRangeConcept<T>));\n * \\endcode\n *\n * A different concept check is required to ensure writeable value\n * access. For example to check for a ForwardRange that can be written\n * to, the following code is required.\n *\n * \\code\n * BOOST_CONCEPT_ASSERT((WriteableForwardRangeConcept<T>));\n * \\endcode\n *\n * \\see http://www.boost.org/libs/range/doc/range.html for details\n * about range concepts.\n * \\see http://www.boost.org/libs/iterator/doc/iterator_concepts.html\n * for details about iterator concepts.\n * \\see http://www.boost.org/libs/concept_check/concept_check.htm for\n * details about concept checks.\n */\n\nnamespace boost {\n\n    namespace range_detail {\n\n#ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n\n// List broken compiler versions here:\n#ifndef __clang__\n    #ifdef __GNUC__\n        // GNUC 4.2 has strange issues correctly detecting compliance with the Concepts\n        // hence the least disruptive approach is to turn-off the concept checking for\n        // this version of the compiler.\n        #if __GNUC__ == 4 && __GNUC_MINOR__ == 2\n            #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0\n        #endif\n    #endif\n\n    #ifdef __GCCXML__\n        // GCC XML, unsurprisingly, has the same issues\n        #if __GCCXML_GNUC__ == 4 && __GCCXML_GNUC_MINOR__ == 2\n            #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0\n        #endif\n    #endif\n#endif\n\n    #ifdef __BORLANDC__\n        #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0\n    #endif\n\n    #ifdef __PATHCC__\n        #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0\n    #endif\n\n// Default to using the concept asserts unless we have defined it off\n// during the search for black listed compilers.\n    #ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 1\n    #endif\n\n#endif\n\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n    #define BOOST_RANGE_CONCEPT_ASSERT( x ) BOOST_CONCEPT_ASSERT( x )\n#else\n    #define BOOST_RANGE_CONCEPT_ASSERT( x )\n#endif\n\n        // Rationale for the inclusion of redefined iterator concept\n        // classes:\n        //\n        // The Range algorithms often do not require that the iterators are\n        // Assignable or default constructable, but the correct standard\n        // conformant iterators do require the iterators to be a model of the\n        // Assignable concept.\n        // Iterators that contains a functor that is not assignable therefore\n        // are not correct models of the standard iterator concepts,\n        // despite being adequate for most algorithms. An example of this\n        // use case is the combination of the boost::adaptors::filtered\n        // class with a boost::lambda::bind generated functor.\n        // Ultimately modeling the range concepts using composition\n        // with the Boost.Iterator concepts would render the library\n        // incompatible with many common Boost.Lambda expressions.\n        template<class Iterator>\n        struct IncrementableIteratorConcept : CopyConstructible<Iterator>\n        {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n            typedef BOOST_DEDUCED_TYPENAME iterator_traversal<Iterator>::type traversal_category;\n\n            BOOST_RANGE_CONCEPT_ASSERT((\n                Convertible<\n                    traversal_category,\n                    incrementable_traversal_tag\n                >));\n\n            BOOST_CONCEPT_USAGE(IncrementableIteratorConcept)\n            {\n                ++i;\n                (void)i++;\n            }\n        private:\n            Iterator i;\n#endif\n        };\n\n        template<class Iterator>\n        struct SinglePassIteratorConcept\n            : IncrementableIteratorConcept<Iterator>\n            , EqualityComparable<Iterator>\n        {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n            BOOST_RANGE_CONCEPT_ASSERT((\n                Convertible<\n                    BOOST_DEDUCED_TYPENAME SinglePassIteratorConcept::traversal_category,\n                    single_pass_traversal_tag\n                >));\n\n            BOOST_CONCEPT_USAGE(SinglePassIteratorConcept)\n            {\n                Iterator i2(++i);\n                boost::ignore_unused_variable_warning(i2);\n\n                // deliberately we are loose with the postfix version for the single pass\n                // iterator due to the commonly poor adherence to the specification means that\n                // many algorithms would be unusable, whereas actually without the check they\n                // work\n                (void)(i++);\n\n                BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference r1(*i);\n                boost::ignore_unused_variable_warning(r1);\n\n                BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference r2(*(++i));\n                boost::ignore_unused_variable_warning(r2);\n            }\n        private:\n            Iterator i;\n#endif\n        };\n\n        template<class Iterator>\n        struct ForwardIteratorConcept\n            : SinglePassIteratorConcept<Iterator>\n            , DefaultConstructible<Iterator>\n        {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n            typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::difference_type difference_type;\n\n            BOOST_MPL_ASSERT((is_integral<difference_type>));\n            BOOST_MPL_ASSERT_RELATION(std::numeric_limits<difference_type>::is_signed, ==, true);\n\n            BOOST_RANGE_CONCEPT_ASSERT((\n                Convertible<\n                    BOOST_DEDUCED_TYPENAME ForwardIteratorConcept::traversal_category,\n                    forward_traversal_tag\n                >));\n\n            BOOST_CONCEPT_USAGE(ForwardIteratorConcept)\n            {\n                // See the above note in the SinglePassIteratorConcept about the handling of the\n                // postfix increment. Since with forward and better iterators there is no need\n                // for a proxy, we can sensibly require that the dereference result\n                // is convertible to reference.\n                Iterator i2(i++);\n                boost::ignore_unused_variable_warning(i2);\n                BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference r(*(i++));\n                boost::ignore_unused_variable_warning(r);\n            }\n        private:\n            Iterator i;\n#endif\n         };\n\n         template<class Iterator>\n         struct BidirectionalIteratorConcept\n             : ForwardIteratorConcept<Iterator>\n         {\n #if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n             BOOST_RANGE_CONCEPT_ASSERT((\n                 Convertible<\n                     BOOST_DEDUCED_TYPENAME BidirectionalIteratorConcept::traversal_category,\n                     bidirectional_traversal_tag\n                 >));\n\n             BOOST_CONCEPT_USAGE(BidirectionalIteratorConcept)\n             {\n                 --i;\n                 (void)i--;\n             }\n         private:\n             Iterator i;\n #endif\n         };\n\n         template<class Iterator>\n         struct RandomAccessIteratorConcept\n             : BidirectionalIteratorConcept<Iterator>\n         {\n #if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n             BOOST_RANGE_CONCEPT_ASSERT((\n                 Convertible<\n                     BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::traversal_category,\n                     random_access_traversal_tag\n                 >));\n\n             BOOST_CONCEPT_USAGE(RandomAccessIteratorConcept)\n             {\n                 i += n;\n                 i = i + n;\n                 i = n + i;\n                 i -= n;\n                 i = i - n;\n                 n = i - j;\n             }\n         private:\n             BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::difference_type n;\n             Iterator i;\n             Iterator j;\n #endif\n         };\n\n    } // namespace range_detail\n\n    //! Check if a type T models the SinglePassRange range concept.\n    template<class T>\n    struct SinglePassRangeConcept\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        // A few compilers don't like the rvalue reference T types so just\n        // remove it.\n        typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type Rng;\n\n        typedef BOOST_DEDUCED_TYPENAME range_iterator<\n            Rng const\n        >::type const_iterator;\n\n        typedef BOOST_DEDUCED_TYPENAME range_iterator<Rng>::type iterator;\n\n        BOOST_RANGE_CONCEPT_ASSERT((\n                range_detail::SinglePassIteratorConcept<iterator>));\n\n        BOOST_RANGE_CONCEPT_ASSERT((\n                range_detail::SinglePassIteratorConcept<const_iterator>));\n\n        BOOST_CONCEPT_USAGE(SinglePassRangeConcept)\n        {\n            // This has been modified from assigning to this->i\n            // (where i was a member variable) to improve\n            // compatibility with Boost.Lambda\n            iterator i1 = boost::begin(*m_range);\n            iterator i2 = boost::end(*m_range);\n\n            boost::ignore_unused_variable_warning(i1);\n            boost::ignore_unused_variable_warning(i2);\n\n            const_constraints(*m_range);\n        }\n\n    private:\n        void const_constraints(const Rng& const_range)\n        {\n            const_iterator ci1 = boost::begin(const_range);\n            const_iterator ci2 = boost::end(const_range);\n\n            boost::ignore_unused_variable_warning(ci1);\n            boost::ignore_unused_variable_warning(ci2);\n        }\n\n       // Rationale:\n       // The type of m_range is T* rather than T because it allows\n       // T to be an abstract class. The other obvious alternative of\n       // T& produces a warning on some compilers.\n       Rng* m_range;\n#endif\n    };\n\n    //! Check if a type T models the ForwardRange range concept.\n    template<class T>\n    struct ForwardRangeConcept : SinglePassRangeConcept<T>\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept<BOOST_DEDUCED_TYPENAME ForwardRangeConcept::iterator>));\n        BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept<BOOST_DEDUCED_TYPENAME ForwardRangeConcept::const_iterator>));\n#endif\n    };\n\n    template<class T>\n    struct WriteableRangeConcept\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        typedef BOOST_DEDUCED_TYPENAME range_iterator<T>::type iterator;\n\n        BOOST_CONCEPT_USAGE(WriteableRangeConcept)\n        {\n            *i = v;\n        }\n    private:\n        iterator i;\n        BOOST_DEDUCED_TYPENAME range_value<T>::type v;\n#endif\n    };\n\n    //! Check if a type T models the WriteableForwardRange range concept.\n    template<class T>\n    struct WriteableForwardRangeConcept\n        : ForwardRangeConcept<T>\n        , WriteableRangeConcept<T>\n    {\n    };\n\n    //! Check if a type T models the BidirectionalRange range concept.\n    template<class T>\n    struct BidirectionalRangeConcept : ForwardRangeConcept<T>\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        BOOST_RANGE_CONCEPT_ASSERT((range_detail::BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::iterator>));\n        BOOST_RANGE_CONCEPT_ASSERT((range_detail::BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::const_iterator>));\n#endif\n    };\n\n    //! Check if a type T models the WriteableBidirectionalRange range concept.\n    template<class T>\n    struct WriteableBidirectionalRangeConcept\n        : BidirectionalRangeConcept<T>\n        , WriteableRangeConcept<T>\n    {\n    };\n\n    //! Check if a type T models the RandomAccessRange range concept.\n    template<class T>\n    struct RandomAccessRangeConcept : BidirectionalRangeConcept<T>\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        BOOST_RANGE_CONCEPT_ASSERT((range_detail::RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::iterator>));\n        BOOST_RANGE_CONCEPT_ASSERT((range_detail::RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::const_iterator>));\n#endif\n    };\n\n    //! Check if a type T models the WriteableRandomAccessRange range concept.\n    template<class T>\n    struct WriteableRandomAccessRangeConcept\n        : RandomAccessRangeConcept<T>\n        , WriteableRangeConcept<T>\n    {\n    };\n\n} // namespace boost\n\n#endif // BOOST_RANGE_CONCEPTS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/config.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_CONFIG_HPP\n#define BOOST_RANGE_CONFIG_HPP\n\n#include <boost/detail/workaround.hpp>\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/config.hpp>\n\n#ifdef BOOST_RANGE_DEDUCED_TYPENAME\n#error \"macro already defined!\"\n#endif\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n# define BOOST_RANGE_DEDUCED_TYPENAME typename\n#else\n#define BOOST_RANGE_DEDUCED_TYPENAME BOOST_DEDUCED_TYPENAME\n#endif\n\n#ifdef BOOST_RANGE_NO_ARRAY_SUPPORT\n#error \"macro already defined!\"\n#endif\n\n#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 )\n#define BOOST_RANGE_NO_ARRAY_SUPPORT 1\n#endif\n\n#ifdef BOOST_RANGE_NO_ARRAY_SUPPORT\n#define BOOST_RANGE_ARRAY_REF() (boost_range_array)\n#define BOOST_RANGE_NO_STATIC_ASSERT\n#else\n#define BOOST_RANGE_ARRAY_REF() (&boost_range_array)\n#endif\n\n#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))\n#  define BOOST_RANGE_UNUSED __attribute__((unused))\n#else\n#  define BOOST_RANGE_UNUSED\n#endif\n\n\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/const_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_CONST_ITERATOR_HPP\n#define BOOST_RANGE_CONST_ITERATOR_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n\n#include <boost/range/range_fwd.hpp>\n#include <boost/range/detail/extract_optional_type.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <cstddef>\n#include <utility>\n\nnamespace boost\n{\n    //////////////////////////////////////////////////////////////////////////\n    // default\n    //////////////////////////////////////////////////////////////////////////\n    \n    namespace range_detail\n    {\n\nBOOST_RANGE_EXTRACT_OPTIONAL_TYPE( const_iterator )\n\ntemplate< typename C >\nstruct range_const_iterator\n        : extract_const_iterator<C>\n{};\n\n//////////////////////////////////////////////////////////////////////////\n// pair\n//////////////////////////////////////////////////////////////////////////\n\ntemplate< typename Iterator >\nstruct range_const_iterator<std::pair<Iterator,Iterator> >\n{\n    typedef Iterator type;\n};\n\n//////////////////////////////////////////////////////////////////////////\n// array\n//////////////////////////////////////////////////////////////////////////\n\ntemplate< typename T, std::size_t sz >\nstruct range_const_iterator< T[sz] >\n{\n    typedef const T* type;\n};\n\n    } // namespace range_detail\n\ntemplate<typename C, typename Enabler=void>\nstruct range_const_iterator\n        : range_detail::range_const_iterator<\n            BOOST_DEDUCED_TYPENAME remove_reference<C>::type\n        >\n{\n};\n\n} // namespace boost\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/const_reverse_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_CONST_REVERSE_ITERATOR_HPP\n#define BOOST_RANGE_CONST_REVERSE_ITERATOR_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/reverse_iterator.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\nnamespace boost\n{\n    //\n    // This interface is deprecated, use range_reverse_iterator<const T>\n    //\n    \n    template< typename C >\n    struct range_const_reverse_iterator\n            : range_reverse_iterator<\n                const BOOST_DEDUCED_TYPENAME remove_reference<C>::type>\n    { };\n    \n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/counting_range.hpp",
    "content": "//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_COUNTING_RANGE_HPP_INCLUDED\n#define BOOST_RANGE_COUNTING_RANGE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#if BOOST_MSVC >= 1400\n#pragma warning(push)\n#pragma warning(disable : 4244)\n#endif\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/iterator/counting_iterator.hpp>\n\nnamespace boost\n{\n    template<class Value>\n    inline iterator_range<counting_iterator<Value> >\n    counting_range(Value first, Value last)\n    {\n        typedef counting_iterator<Value> counting_iterator_t;\n        typedef iterator_range<counting_iterator_t> result_t;\n        return result_t(counting_iterator_t(first),\n                        counting_iterator_t(last));\n    }\n\n    template<class Range>\n    inline iterator_range<\n        counting_iterator<\n            BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type\n        >\n    >\n    counting_range(const Range& rng)\n    {\n        typedef counting_iterator<\n            BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type\n        > counting_iterator_t;\n\n        typedef iterator_range<counting_iterator_t> result_t;\n\n        return result_t(counting_iterator_t(boost::begin(rng)),\n                        counting_iterator_t(boost::end(rng)));\n    }\n\n    template<class Range>\n    inline iterator_range<\n        counting_iterator<\n            BOOST_DEDUCED_TYPENAME range_iterator<Range>::type\n        >\n    >\n    counting_range(Range& rng)\n    {\n        typedef counting_iterator<\n            BOOST_DEDUCED_TYPENAME range_iterator<Range>::type\n        > counting_iterator_t;\n\n        typedef iterator_range<counting_iterator_t> result_t;\n\n        return result_t(counting_iterator_t(boost::begin(rng)),\n                        counting_iterator_t(boost::end(rng)));\n    }\n} // namespace boost\n\n#if BOOST_MSVC >= 1400\n#pragma warning(pop)\n#endif\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/any_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_ANY_ITERATOR_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_ANY_ITERATOR_HPP_INCLUDED\n\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/or.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/range/detail/any_iterator_buffer.hpp>\n#include <boost/range/detail/any_iterator_interface.hpp>\n#include <boost/range/detail/any_iterator_wrapper.hpp>\n#include <boost/utility/enable_if.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        // metafunction to determine if T is a const reference\n        template<class T>\n        struct is_const_reference\n        {\n            typedef typename mpl::and_<\n                typename is_reference<T>::type,\n                typename is_const<\n                    typename remove_reference<T>::type\n                >::type\n            >::type type;\n        };\n\n        // metafunction to determine if T is a mutable reference\n        template<class T>\n        struct is_mutable_reference\n        {\n            typedef typename mpl::and_<\n                typename is_reference<T>::type,\n                typename mpl::not_<\n                    typename is_const<\n                        typename remove_reference<T>::type\n                    >::type\n                >::type\n            >::type type;\n        };\n\n        // metafunction to evaluate if a source 'reference' can be\n        // converted to a target 'reference' as a value.\n        //\n        // This is true, when the target reference type is actually\n        // not a reference, and the source reference is convertible\n        // to the target type.\n        template<class SourceReference, class TargetReference>\n        struct is_convertible_to_value_as_reference\n        {\n            typedef typename mpl::and_<\n                typename mpl::not_<\n                    typename is_reference<TargetReference>::type\n                >::type\n              , typename is_convertible<\n                    SourceReference\n                  , TargetReference\n                >::type\n            >::type type;\n        };\n\n        template<\n            class Value\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer = any_iterator_default_buffer\n        >\n        class any_iterator;\n\n        // metafunction to determine if SomeIterator is an\n        // any_iterator.\n        //\n        // This is the general implementation which evaluates to false.\n        template<class SomeIterator>\n        struct is_any_iterator\n            : mpl::bool_<false>\n        {\n        };\n\n        // specialization of is_any_iterator to return true for\n        // any_iterator classes regardless of template parameters.\n        template<\n            class Value\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct is_any_iterator<\n            any_iterator<\n                Value\n              , Traversal\n              , Reference\n              , Difference\n              , Buffer\n            >\n        >\n            : mpl::bool_<true>\n        {\n        };\n    } // namespace range_detail\n\n    namespace iterators\n    {\n    namespace detail\n    {\n        // Rationale:\n        // These are specialized since the iterator_facade versions lack\n        // the requisite typedefs to allow wrapping to determine the types\n        // if a user copy constructs from a postfix increment.\n\n        template<\n            class Value\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        class postfix_increment_proxy<\n                    range_detail::any_iterator<\n                        Value\n                      , Traversal\n                      , Reference\n                      , Difference\n                      , Buffer\n                    >\n                >\n        {\n            typedef range_detail::any_iterator<\n                Value\n              , Traversal\n              , Reference\n              , Difference\n              , Buffer\n            > any_iterator_type;\n\n        public:\n            typedef Value value_type;\n            typedef typename std::iterator_traits<any_iterator_type>::iterator_category iterator_category;\n            typedef Difference difference_type;\n            typedef typename iterator_pointer<any_iterator_type>::type pointer;\n            typedef Reference reference;\n\n            explicit postfix_increment_proxy(any_iterator_type const& x)\n                : stored_value(*x)\n            {}\n\n            value_type&\n            operator*() const\n            {\n                return this->stored_value;\n            }\n        private:\n            mutable value_type stored_value;\n        };\n\n        template<\n            class Value\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        class writable_postfix_increment_proxy<\n                    range_detail::any_iterator<\n                        Value\n                      , Traversal\n                      , Reference\n                      , Difference\n                      , Buffer\n                    >\n                >\n        {\n            typedef range_detail::any_iterator<\n                        Value\n                      , Traversal\n                      , Reference\n                      , Difference\n                      , Buffer\n                    > any_iterator_type;\n         public:\n            typedef Value value_type;\n            typedef typename std::iterator_traits<any_iterator_type>::iterator_category iterator_category;\n            typedef Difference difference_type;\n            typedef typename iterator_pointer<any_iterator_type>::type pointer;\n            typedef Reference reference;\n\n            explicit writable_postfix_increment_proxy(any_iterator_type const& x)\n              : stored_value(*x)\n              , stored_iterator(x)\n            {}\n\n            // Dereferencing must return a proxy so that both *r++ = o and\n            // value_type(*r++) can work.  In this case, *r is the same as\n            // *r++, and the conversion operator below is used to ensure\n            // readability.\n            writable_postfix_increment_proxy const&\n            operator*() const\n            {\n                return *this;\n            }\n\n            // Provides readability of *r++\n            operator value_type&() const\n            {\n                return stored_value;\n            }\n\n            // Provides writability of *r++\n            template <class T>\n            T const& operator=(T const& x) const\n            {\n                *this->stored_iterator = x;\n                return x;\n            }\n\n            // This overload just in case only non-const objects are writable\n            template <class T>\n            T& operator=(T& x) const\n            {\n                *this->stored_iterator = x;\n                return x;\n            }\n\n            // Provides X(r++)\n            operator any_iterator_type const&() const\n            {\n                return stored_iterator;\n            }\n\n         private:\n            mutable value_type stored_value;\n            any_iterator_type stored_iterator;\n        };\n\n    } //namespace detail\n    } //namespace iterators\n\n    namespace range_detail\n    {\n        template<\n            class Value\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        class any_iterator\n            : public iterator_facade<\n                        any_iterator<\n                            Value\n                          , Traversal\n                          , Reference\n                          , Difference\n                          , Buffer\n                        >\n                    , Value\n                    , Traversal\n                    , Reference\n                    , Difference\n                >\n        {\n            template<\n                class OtherValue\n              , class OtherTraversal\n              , class OtherReference\n              , class OtherDifference\n              , class OtherBuffer\n            >\n            friend class any_iterator;\n\n            struct enabler {};\n            struct disabler {};\n\n            typedef typename any_iterator_interface_type_generator<\n                Traversal\n              , Reference\n              , Difference\n              , Buffer\n            >::type abstract_base_type;\n\n            typedef iterator_facade<\n                        any_iterator<\n                            Value\n                          , Traversal\n                          , Reference\n                          , Difference\n                          , Buffer\n                        >\n                      , Value\n                      , Traversal\n                      , Reference\n                      , Difference\n                  > base_type;\n\n            typedef Buffer buffer_type;\n\n        public:\n            typedef typename base_type::value_type value_type;\n            typedef typename base_type::reference reference;\n            typedef typename base_type::difference_type difference_type;\n\n            // Default constructor\n            any_iterator()\n                : m_impl(0) {}\n\n            // Simple copy construction without conversion\n            any_iterator(const any_iterator& other)\n                : base_type(other)\n                , m_impl(other.m_impl\n                            ? other.m_impl->clone(m_buffer)\n                            : 0)\n            {\n            }\n\n            // Simple assignment operator without conversion\n            any_iterator& operator=(const any_iterator& other)\n            {\n                if (this != &other)\n                {\n                    if (m_impl)\n                        m_impl->~abstract_base_type();\n                    m_buffer.deallocate();\n                    m_impl = 0;\n                    if (other.m_impl)\n                        m_impl = other.m_impl->clone(m_buffer);\n                }\n                return *this;\n            }\n\n            // Implicit conversion from another any_iterator where the\n            // conversion is from a non-const reference to a const reference\n            template<\n                class OtherValue\n              , class OtherTraversal\n              , class OtherReference\n              , class OtherDifference\n            >\n            any_iterator(const any_iterator<\n                                OtherValue,\n                                OtherTraversal,\n                                OtherReference,\n                                OtherDifference,\n                                Buffer\n                            >& other,\n                         typename ::boost::enable_if<\n                            typename mpl::and_<\n                                typename is_mutable_reference<OtherReference>::type,\n                                typename is_const_reference<Reference>::type\n                            >::type,\n                            enabler\n                        >::type* = 0\n                    )\n                : m_impl(other.m_impl\n                            ? other.m_impl->clone_const_ref(m_buffer)\n                         : 0\n                        )\n            {\n            }\n\n            // Implicit conversion from another any_iterator where the\n            // reference types of the source and the target are references\n            // that are either both const, or both non-const.\n            template<\n                class OtherValue\n              , class OtherTraversal\n              , class OtherReference\n              , class OtherDifference\n            >\n            any_iterator(const any_iterator<\n                                OtherValue\n                              , OtherTraversal\n                              , OtherReference\n                              , OtherDifference\n                              , Buffer\n                            >& other,\n                         typename ::boost::enable_if<\n                            typename mpl::or_<\n                                typename mpl::and_<\n                                    typename is_mutable_reference<OtherReference>::type,\n                                    typename is_mutable_reference<Reference>::type\n                                >::type,\n                                typename mpl::and_<\n                                    typename is_const_reference<OtherReference>::type,\n                                    typename is_const_reference<Reference>::type\n                                >::type\n                            >::type,\n                            enabler\n                        >::type* = 0\n                        )\n                : m_impl(other.m_impl\n                            ? other.m_impl->clone(m_buffer)\n                         : 0\n                        )\n            {\n            }\n\n            // Implicit conversion to an any_iterator that uses a value for\n            // the reference type.\n            template<\n                class OtherValue\n              , class OtherTraversal\n              , class OtherReference\n              , class OtherDifference\n            >\n            any_iterator(const any_iterator<\n                                OtherValue\n                              , OtherTraversal\n                              , OtherReference\n                              , OtherDifference\n                              , Buffer\n                            >& other,\n                        typename ::boost::enable_if<\n                            typename is_convertible_to_value_as_reference<\n                                        OtherReference\n                                      , Reference\n                                    >::type,\n                            enabler\n                        >::type* = 0\n                        )\n                : m_impl(other.m_impl\n                            ? other.m_impl->clone_reference_as_value(m_buffer)\n                            : 0\n                            )\n            {\n            }\n\n            any_iterator clone() const\n            {\n                any_iterator result;\n                if (m_impl)\n                    result.m_impl = m_impl->clone(result.m_buffer);\n                return result;\n            }\n\n            any_iterator<\n                Value\n              , Traversal\n              , typename abstract_base_type::const_reference\n              , Difference\n              , Buffer\n            >\n            clone_const_ref() const\n            {\n                typedef any_iterator<\n                    Value\n                  , Traversal\n                  , typename abstract_base_type::const_reference\n                  , Difference\n                  , Buffer\n                > result_type;\n\n                result_type result;\n\n                if (m_impl)\n                    result.m_impl = m_impl->clone_const_ref(result.m_buffer);\n\n                return result;\n            }\n\n            // implicit conversion and construction from type-erasure-compatible\n            // iterators\n            template<class WrappedIterator>\n            explicit any_iterator(\n                const WrappedIterator& wrapped_iterator,\n                typename disable_if<\n                    typename is_any_iterator<WrappedIterator>::type\n                  , disabler\n                >::type* = 0\n                )\n            {\n                typedef typename any_iterator_wrapper_type_generator<\n                            WrappedIterator\n                          , Traversal\n                          , Reference\n                          , Difference\n                          , Buffer\n                        >::type wrapper_type;\n\n                void* ptr = m_buffer.allocate(sizeof(wrapper_type));\n                m_impl = new(ptr) wrapper_type(wrapped_iterator);\n            }\n\n            ~any_iterator()\n            {\n                // manually run the destructor, the deallocation is automatically\n                // handled by the any_iterator_small_buffer base class.\n                if (m_impl)\n                    m_impl->~abstract_base_type();\n            }\n\n        private:\n            friend class ::boost::iterator_core_access;\n\n            Reference dereference() const\n            {\n                BOOST_ASSERT( m_impl );\n                return m_impl->dereference();\n            }\n\n            bool equal(const any_iterator& other) const\n            {\n                return (m_impl == other.m_impl)\n                    || (m_impl && other.m_impl && m_impl->equal(*other.m_impl));\n            }\n\n            void increment()\n            {\n                BOOST_ASSERT( m_impl );\n                m_impl->increment();\n            }\n\n            void decrement()\n            {\n                BOOST_ASSERT( m_impl );\n                m_impl->decrement();\n            }\n\n            Difference distance_to(const any_iterator& other) const\n            {\n                return m_impl && other.m_impl\n                    ? m_impl->distance_to(*other.m_impl)\n                    : 0;\n            }\n\n            void advance(Difference offset)\n            {\n                BOOST_ASSERT( m_impl );\n                m_impl->advance(offset);\n            }\n\n            any_iterator& swap(any_iterator& other)\n            {\n                BOOST_ASSERT( this != &other );\n                // grab a temporary copy of the other iterator\n                any_iterator tmp(other);\n\n                // deallocate the other iterator, taking care to obey the\n                // class-invariants in-case of exceptions later\n                if (other.m_impl)\n                {\n                    other.m_impl->~abstract_base_type();\n                    other.m_buffer.deallocate();\n                    other.m_impl = 0;\n                }\n\n                // If this is a non-null iterator then we need to put\n                // a clone of this iterators implementation into the other\n                // iterator.\n                // We can't just swap because of the small buffer optimization.\n                if (m_impl)\n                {\n                    other.m_impl = m_impl->clone(other.m_buffer);\n                    m_impl->~abstract_base_type();\n                    m_buffer.deallocate();\n                    m_impl = 0;\n                }\n\n                // assign to this instance a clone of the temporarily held\n                // tmp which represents the input other parameter at the\n                // start of execution of this function.\n                if (tmp.m_impl)\n                    m_impl = tmp.m_impl->clone(m_buffer);\n\n                return *this;\n            }\n\n            buffer_type m_buffer;\n            abstract_base_type* m_impl;\n        };\n\n    } // namespace range_detail\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/any_iterator_buffer.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_ANY_ITERATOR_BUFFER_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_ANY_ITERATOR_BUFFER_HPP_INCLUDED\n\n#include <boost/array.hpp>\n#include <boost/assert.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/noncopyable.hpp>\n\nnamespace boost\n{\n    template<std::size_t StackBufferSize>\n    class any_iterator_buffer\n        : noncopyable\n    {\n        BOOST_STATIC_ASSERT(( StackBufferSize > 0 ));\n    public:\n        any_iterator_buffer()\n            : m_ptr()\n        {\n        }\n\n        ~any_iterator_buffer()\n        {\n            delete [] m_ptr;\n        }\n\n        void* allocate(std::size_t bytes)\n        {\n            BOOST_ASSERT( !m_ptr );\n            if (bytes <= StackBufferSize)\n                return m_buffer.data();\n\n            m_ptr = new char[bytes];\n            return m_ptr;\n        }\n\n        void deallocate()\n        {\n            delete [] m_ptr;\n            m_ptr = 0;\n        }\n\n    private:\n        // Rationale:\n        // Do not use inheritance from noncopyable because this causes\n        // the concepts to erroneous detect the derived any_iterator\n        // as noncopyable.\n        any_iterator_buffer(const any_iterator_buffer&);\n        void operator=(const any_iterator_buffer&);\n\n        char* m_ptr;\n        boost::array<char, StackBufferSize> m_buffer;\n    };\n\n    class any_iterator_heap_only_buffer\n        : noncopyable\n    {\n    public:\n        any_iterator_heap_only_buffer()\n            : m_ptr()\n        {\n        }\n\n        ~any_iterator_heap_only_buffer()\n        {\n            delete [] m_ptr;\n        }\n\n        void* allocate(std::size_t bytes)\n        {\n            BOOST_ASSERT( !m_ptr );\n            m_ptr = new char[bytes];\n            return m_ptr;\n        }\n\n        void deallocate()\n        {\n            delete [] m_ptr;\n            m_ptr = 0;\n        }\n\n    private:\n        char* m_ptr;\n    };\n\n    template<std::size_t StackBufferSize>\n    class any_iterator_stack_only_buffer\n    {\n        BOOST_STATIC_ASSERT(( StackBufferSize > 0 ));\n    public:\n        void* allocate(std::size_t bytes)\n        {\n            BOOST_ASSERT( bytes <= m_buffer.size() );\n            return m_buffer.data();\n        }\n\n        void deallocate()\n        {\n        }\n\n    private:\n        boost::array<char, StackBufferSize> m_buffer;\n    };\n\n    typedef any_iterator_buffer<64> any_iterator_default_buffer;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/any_iterator_interface.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_ANY_ITERATOR_INTERFACE_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_ANY_ITERATOR_INTERFACE_HPP_INCLUDED\n\n#include <boost/range/detail/any_iterator_buffer.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template<class T>\n        struct const_reference_type_generator\n        {\n            typedef typename mpl::if_<\n                typename is_reference<T>::type,\n                typename add_const<\n                    typename remove_reference<T>::type\n                >::type&,\n                T\n            >::type type;\n        };\n\n        template<class T>\n        struct mutable_reference_type_generator\n        {\n            typedef typename mpl::if_<\n                typename mpl::and_<\n                    typename is_const<T>::type,\n                    typename mpl::not_<typename is_reference<T>::type>::type\n                >::type,\n                T,\n                typename add_reference<T>::type\n            >::type type;\n        };\n\n        template<\n            class Reference\n          , class Buffer\n        >\n        struct any_incrementable_iterator_interface\n        {\n            typedef typename mutable_reference_type_generator<\n                Reference\n            >::type reference;\n\n            typedef typename const_reference_type_generator<\n                Reference\n            >::type const_reference;\n\n            typedef typename remove_const<\n                typename remove_reference<Reference>::type\n            >::type reference_as_value_type;\n\n            typedef Buffer buffer_type;\n\n            virtual ~any_incrementable_iterator_interface() {}\n\n            virtual any_incrementable_iterator_interface*\n                        clone(buffer_type& buffer) const = 0;\n\n            virtual any_incrementable_iterator_interface<const_reference, Buffer>*\n                        clone_const_ref(buffer_type& buffer) const = 0;\n\n            virtual any_incrementable_iterator_interface<reference_as_value_type, Buffer>*\n                        clone_reference_as_value(buffer_type& buffer) const = 0;\n\n            virtual void increment() = 0;\n        };\n\n        template<\n            class Reference\n          , class Buffer\n        >\n        struct any_single_pass_iterator_interface\n            : any_incrementable_iterator_interface<Reference, Buffer>\n        {\n            typedef typename any_incrementable_iterator_interface<Reference, Buffer>::reference reference;\n            typedef typename any_incrementable_iterator_interface<Reference, Buffer>::const_reference const_reference;\n            typedef typename any_incrementable_iterator_interface<Reference, Buffer>::buffer_type buffer_type;\n            typedef typename any_incrementable_iterator_interface<Reference, Buffer>::reference_as_value_type reference_as_value_type;\n\n            virtual any_single_pass_iterator_interface*\n                        clone(buffer_type& buffer) const = 0;\n\n            virtual any_single_pass_iterator_interface<const_reference, Buffer>*\n                        clone_const_ref(buffer_type& buffer) const = 0;\n\n            virtual any_single_pass_iterator_interface<reference_as_value_type, Buffer>*\n                        clone_reference_as_value(buffer_type& buffer) const = 0;\n\n            virtual reference dereference() const = 0;\n\n            virtual bool equal(const any_single_pass_iterator_interface& other) const = 0;\n        };\n\n        template<\n            class Reference\n          , class Buffer\n        >\n        struct any_forward_iterator_interface\n            : any_single_pass_iterator_interface<Reference, Buffer>\n        {\n            typedef typename any_single_pass_iterator_interface<Reference, Buffer>::reference reference;\n            typedef typename any_single_pass_iterator_interface<Reference, Buffer>::const_reference const_reference;\n            typedef typename any_single_pass_iterator_interface<Reference, Buffer>::buffer_type buffer_type;\n            typedef typename any_single_pass_iterator_interface<Reference, Buffer>::reference_as_value_type reference_as_value_type;\n\n            virtual any_forward_iterator_interface*\n                        clone(buffer_type& buffer) const = 0;\n\n            virtual any_forward_iterator_interface<const_reference, Buffer>*\n                        clone_const_ref(buffer_type& buffer) const = 0;\n\n            virtual any_forward_iterator_interface<reference_as_value_type, Buffer>*\n                        clone_reference_as_value(buffer_type& buffer) const = 0;\n        };\n\n        template<\n            class Reference\n          , class Buffer\n        >\n        struct any_bidirectional_iterator_interface\n            : any_forward_iterator_interface<Reference, Buffer>\n        {\n            typedef typename any_forward_iterator_interface<Reference, Buffer>::reference reference;\n            typedef typename any_forward_iterator_interface<Reference, Buffer>::const_reference const_reference;\n            typedef typename any_forward_iterator_interface<Reference, Buffer>::buffer_type buffer_type;\n            typedef typename any_forward_iterator_interface<Reference, Buffer>::reference_as_value_type reference_as_value_type;\n\n            virtual any_bidirectional_iterator_interface*\n                        clone(buffer_type& buffer) const = 0;\n\n            virtual any_bidirectional_iterator_interface<const_reference, Buffer>*\n                        clone_const_ref(buffer_type& buffer) const = 0;\n\n            virtual any_bidirectional_iterator_interface<reference_as_value_type, Buffer>*\n                        clone_reference_as_value(buffer_type& buffer) const = 0;\n\n            virtual void decrement() = 0;\n        };\n\n        template<\n            class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_random_access_iterator_interface\n            : any_bidirectional_iterator_interface<\n                    Reference\n                  , Buffer\n                >\n        {\n            typedef typename any_bidirectional_iterator_interface<Reference, Buffer>::reference reference;\n            typedef typename any_bidirectional_iterator_interface<Reference, Buffer>::const_reference const_reference;\n            typedef typename any_bidirectional_iterator_interface<Reference, Buffer>::buffer_type buffer_type;\n            typedef typename any_bidirectional_iterator_interface<Reference, Buffer>::reference_as_value_type reference_as_value_type;\n            typedef Difference difference_type;\n\n            virtual any_random_access_iterator_interface*\n                        clone(buffer_type& buffer) const = 0;\n\n            virtual any_random_access_iterator_interface<const_reference, Difference, Buffer>*\n                        clone_const_ref(buffer_type& buffer) const = 0;\n\n            virtual any_random_access_iterator_interface<reference_as_value_type, Difference, Buffer>*\n                        clone_reference_as_value(buffer_type& buffer) const = 0;\n\n            virtual void advance(Difference offset) = 0;\n\n            virtual Difference distance_to(const any_random_access_iterator_interface& other) const = 0;\n        };\n\n        template<\n            class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_interface_type_generator;\n\n        template<\n            class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_interface_type_generator<\n                    incrementable_traversal_tag\n                  , Reference\n                  , Difference\n                  , Buffer\n                >\n        {\n            typedef any_incrementable_iterator_interface<Reference, Buffer> type;\n        };\n\n        template<\n            class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_interface_type_generator<\n                    single_pass_traversal_tag\n                  , Reference\n                  , Difference\n                  , Buffer\n                >\n        {\n            typedef any_single_pass_iterator_interface<Reference, Buffer> type;\n        };\n\n        template<\n            class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_interface_type_generator<\n                    forward_traversal_tag\n                  , Reference\n                  , Difference\n                  , Buffer\n                >\n        {\n            typedef any_forward_iterator_interface<Reference, Buffer> type;\n        };\n\n        template<\n            class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_interface_type_generator<\n                    bidirectional_traversal_tag\n                  , Reference\n                  , Difference\n                  , Buffer\n                >\n        {\n            typedef any_bidirectional_iterator_interface<Reference, Buffer> type;\n        };\n\n        template<\n            class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_interface_type_generator<\n                    random_access_traversal_tag\n                  , Reference\n                  , Difference\n                  , Buffer\n                >\n        {\n            typedef any_random_access_iterator_interface<\n                        Reference\n                      , Difference\n                      , Buffer\n                    > type;\n        };\n\n    } // namespace range_detail\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/any_iterator_wrapper.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_ANY_ITERATOR_WRAPPER_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_ANY_ITERATOR_WRAPPER_HPP_INCLUDED\n\n#include <boost/cast.hpp>\n#include <boost/range/config.hpp>\n#include <boost/range/detail/any_iterator_interface.hpp>\n#include <boost/range/concepts.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template<typename TargetT, typename SourceT>\n        TargetT& polymorphic_ref_downcast(SourceT& source)\n        {\n#ifdef BOOST_NO_RTTI\n            return static_cast<TargetT&>(source);\n#else\n            return *boost::polymorphic_downcast<TargetT*>(&source);\n#endif\n        }\n\n        template<class Reference, class T>\n        Reference dereference_cast(T& x)\n        {\n            return static_cast<Reference>(x);\n        }\n        template<class Reference, class T>\n        Reference dereference_cast(const T& x)\n        {\n            return static_cast<Reference>(const_cast<T&>(x));\n        }\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Buffer\n        >\n        class any_incrementable_iterator_wrapper\n            : public any_incrementable_iterator_interface<\n                        Reference\n                      , Buffer\n                    >\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( IncrementableIteratorConcept<WrappedIterator> ));\n        public:\n            typedef WrappedIterator wrapped_type;\n\n            BOOST_STATIC_ASSERT(( is_convertible<\n                                    typename iterator_reference<WrappedIterator>::type\n                                  , Reference\n                                  >::value ));\n\n            any_incrementable_iterator_wrapper()\n                : m_it()\n            {}\n\n            explicit any_incrementable_iterator_wrapper(wrapped_type it)\n                : m_it(it)\n            {}\n\n        // any_incrementable_iterator implementation\n            virtual any_incrementable_iterator_wrapper* clone(\n                typename any_incrementable_iterator_wrapper::buffer_type& buffer\n                ) const\n            {\n                return new (buffer.allocate(sizeof(*this)))\n                                any_incrementable_iterator_wrapper(m_it);\n            }\n\n            virtual any_incrementable_iterator_wrapper<\n                        WrappedIterator\n                      , typename any_incrementable_iterator_wrapper::const_reference\n                      , Buffer\n                    >* clone_const_ref(\n                        typename any_incrementable_iterator_wrapper::buffer_type& buffer\n                ) const\n            {\n                typedef any_incrementable_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_incrementable_iterator_wrapper::const_reference\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual any_incrementable_iterator_wrapper<\n                        WrappedIterator\n                      , typename any_incrementable_iterator_wrapper::reference_as_value_type\n                      , Buffer\n                    >* clone_reference_as_value(\n                        typename any_incrementable_iterator_wrapper::buffer_type& buffer\n                ) const\n            {\n                typedef any_incrementable_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_incrementable_iterator_wrapper::reference_as_value_type\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual void increment()\n            {\n                ++m_it;\n            }\n\n         private:\n            wrapped_type m_it;\n        };\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Buffer\n        >\n        class any_single_pass_iterator_wrapper\n            : public any_single_pass_iterator_interface<\n                        Reference\n                      , Buffer\n                    >\n        {\n            struct disabler {};\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassIteratorConcept<WrappedIterator> ));\n            typedef any_single_pass_iterator_interface<\n                Reference,\n                Buffer\n            > base_type;\n\n        public:\n            typedef typename base_type::reference reference;\n\n            any_single_pass_iterator_wrapper()\n                : m_it()\n            {}\n\n            explicit any_single_pass_iterator_wrapper(const WrappedIterator& it)\n                : m_it(it)\n            {}\n        // any_single_pass_iterator_interface<Reference> implementation\n            virtual any_single_pass_iterator_wrapper* clone(\n                typename any_single_pass_iterator_wrapper::buffer_type& buffer\n                ) const\n            {\n                return new (buffer.allocate(sizeof(*this)))\n                            any_single_pass_iterator_wrapper(m_it);\n            }\n\n            virtual any_single_pass_iterator_wrapper<\n                WrappedIterator\n              , typename any_single_pass_iterator_wrapper::const_reference\n              , Buffer\n            >* clone_const_ref(\n                   typename any_single_pass_iterator_wrapper::buffer_type& buffer\n                   ) const\n            {\n                typedef any_single_pass_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_single_pass_iterator_wrapper::const_reference\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual any_single_pass_iterator_wrapper<\n                WrappedIterator\n              , typename any_single_pass_iterator_wrapper::reference_as_value_type\n              , Buffer\n            >* clone_reference_as_value(\n                typename any_single_pass_iterator_wrapper::buffer_type& buffer\n                ) const\n            {\n                typedef any_single_pass_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_single_pass_iterator_wrapper::reference_as_value_type\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual void increment()\n            {\n                ++m_it;\n            }\n\n            virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const\n            {\n                return m_it == range_detail::polymorphic_ref_downcast<const any_single_pass_iterator_wrapper>(other).m_it;\n            }\n\n            virtual reference dereference() const\n            {\n                return dereference_cast<reference>(*m_it);\n            }\n\n        private:\n            WrappedIterator m_it;\n        };\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Buffer\n        >\n        class any_forward_iterator_wrapper\n            : public any_forward_iterator_interface<\n                        Reference\n                      , Buffer\n                    >\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( ForwardIteratorConcept<WrappedIterator> ));\n            typedef any_forward_iterator_interface<\n                Reference,\n                Buffer\n            > base_type;\n\n        public:\n            typedef typename base_type::reference reference;\n\n            any_forward_iterator_wrapper()\n                : m_it()\n            {}\n\n            explicit any_forward_iterator_wrapper(const WrappedIterator& it)\n                : m_it(it)\n            {}\n\n            // any_forward_iterator_interface<Reference> implementation\n            virtual any_forward_iterator_wrapper* clone(\n                typename any_forward_iterator_wrapper::buffer_type& buffer\n                ) const\n            {\n                return new (buffer.allocate(sizeof(*this)))\n                                any_forward_iterator_wrapper(m_it);\n            }\n\n            virtual any_forward_iterator_wrapper<\n                        WrappedIterator\n                      , typename any_forward_iterator_wrapper::const_reference\n                      , Buffer\n                    >* clone_const_ref(\n                            typename any_forward_iterator_wrapper::buffer_type& buffer\n                        ) const\n            {\n                typedef any_forward_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_forward_iterator_wrapper::const_reference\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual any_forward_iterator_wrapper<\n                        WrappedIterator\n                      , typename any_forward_iterator_wrapper::reference_as_value_type\n                      , Buffer\n                    >* clone_reference_as_value(\n                            typename any_forward_iterator_wrapper::buffer_type& buffer\n                    ) const\n            {\n                typedef any_forward_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_forward_iterator_wrapper::reference_as_value_type\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual void increment()\n            {\n                ++m_it;\n            }\n\n            virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const\n            {\n                return m_it == range_detail::polymorphic_ref_downcast<const any_forward_iterator_wrapper>(other).m_it;\n            }\n\n            virtual reference dereference() const\n            {\n                return dereference_cast<reference>(*m_it);\n            }\n        private:\n            WrappedIterator m_it;\n        };\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Buffer\n        >\n        class any_bidirectional_iterator_wrapper\n            : public any_bidirectional_iterator_interface<\n                        Reference\n                      , Buffer\n                    >\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalIteratorConcept<WrappedIterator> ));\n            typedef any_bidirectional_iterator_interface<\n                Reference,\n                Buffer\n            > base_type;\n\n        public:\n            typedef typename base_type::reference reference;\n\n            any_bidirectional_iterator_wrapper()\n                : m_it()\n            {\n            }\n\n            explicit any_bidirectional_iterator_wrapper(const WrappedIterator& it)\n                : m_it(it)\n            {\n            }\n\n            virtual any_bidirectional_iterator_wrapper* clone(\n                typename any_bidirectional_iterator_wrapper::buffer_type& buffer\n                ) const\n            {\n                return new (buffer.allocate(sizeof(*this)))\n                            any_bidirectional_iterator_wrapper(*this);\n            }\n\n            virtual any_bidirectional_iterator_wrapper<\n                        WrappedIterator\n                      , typename any_bidirectional_iterator_wrapper::const_reference\n                      , Buffer\n                    >* clone_const_ref(\n                           typename any_bidirectional_iterator_wrapper::buffer_type& buffer\n                       ) const\n            {\n                typedef any_bidirectional_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_bidirectional_iterator_wrapper::const_reference\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual any_bidirectional_iterator_wrapper<\n                        WrappedIterator\n                      , typename any_bidirectional_iterator_wrapper::reference_as_value_type\n                      , Buffer\n                    >* clone_reference_as_value(\n                           typename any_bidirectional_iterator_wrapper::buffer_type& buffer\n                       ) const\n            {\n                typedef any_bidirectional_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_bidirectional_iterator_wrapper::reference_as_value_type\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual void increment()\n            {\n                ++m_it;\n            }\n\n            virtual void decrement()\n            {\n                --m_it;\n            }\n\n            virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const\n            {\n                return m_it == range_detail::polymorphic_ref_downcast<const any_bidirectional_iterator_wrapper>(other).m_it;\n            }\n\n            virtual reference dereference() const\n            {\n                return dereference_cast<reference>(*m_it);\n            }\n\n        private:\n            WrappedIterator m_it;\n        };\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        class any_random_access_iterator_wrapper\n            : public any_random_access_iterator_interface<\n                            Reference\n                          , Difference\n                          , Buffer\n                        >\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessIteratorConcept<WrappedIterator> ));\n            typedef any_random_access_iterator_interface<\n                Reference,\n                Difference,\n                Buffer\n            > base_type;\n\n        public:\n            typedef typename base_type::reference reference;\n            typedef Difference difference_type;\n\n            any_random_access_iterator_wrapper()\n                : m_it()\n            {\n            }\n\n            explicit any_random_access_iterator_wrapper(const WrappedIterator& other)\n                : m_it(other)\n            {\n            }\n\n            virtual any_random_access_iterator_wrapper* clone(\n                    typename any_random_access_iterator_wrapper::buffer_type& buffer\n                ) const\n            {\n                return new (buffer.allocate(sizeof(*this)))\n                                any_random_access_iterator_wrapper(*this);\n            }\n\n            virtual any_random_access_iterator_wrapper<\n                        WrappedIterator\n                      , typename any_random_access_iterator_wrapper::const_reference\n                      , Difference\n                      , Buffer\n                    >* clone_const_ref(\n                           typename any_random_access_iterator_wrapper::buffer_type& buffer\n                           ) const\n            {\n                typedef any_random_access_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_random_access_iterator_wrapper::const_reference\n                          , Difference\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual any_random_access_iterator_wrapper<\n                        WrappedIterator\n                      , typename any_random_access_iterator_wrapper::reference_as_value_type\n                      , Difference\n                      , Buffer\n                    >* clone_reference_as_value(\n                           typename any_random_access_iterator_wrapper::buffer_type& buffer\n                           ) const\n            {\n                typedef any_random_access_iterator_wrapper<\n                            WrappedIterator\n                          , typename any_random_access_iterator_wrapper::reference_as_value_type\n                          , Difference\n                          , Buffer\n                        > result_type;\n\n                return new (buffer.allocate(sizeof(result_type)))\n                            result_type(m_it);\n            }\n\n            virtual void increment()\n            {\n                ++m_it;\n            }\n\n            virtual bool equal(const any_single_pass_iterator_interface<Reference, Buffer>& other) const\n            {\n                return m_it == range_detail::polymorphic_ref_downcast<const any_random_access_iterator_wrapper>(other).m_it;\n            }\n\n            virtual void decrement()\n            {\n                --m_it;\n            }\n\n            virtual void advance(Difference offset)\n            {\n                m_it += offset;\n            }\n\n            virtual reference dereference() const\n            {\n                return dereference_cast<reference>(*m_it);\n            }\n\n            virtual Difference distance_to(const any_random_access_iterator_interface<Reference, Difference, Buffer>& other) const\n            {\n                return range_detail::polymorphic_ref_downcast<const any_random_access_iterator_wrapper>(other).m_it - m_it;\n            }\n\n        private:\n            WrappedIterator m_it;\n        };\n\n        template<\n            class WrappedIterator\n          , class Traversal\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_wrapper_type_generator;\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_wrapper_type_generator<\n            WrappedIterator\n          , incrementable_traversal_tag\n          , Reference\n          , Difference\n          , Buffer\n        >\n        {\n            typedef any_incrementable_iterator_wrapper<\n                        WrappedIterator\n                      , Reference\n                      , Buffer\n                    > type;\n        };\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_wrapper_type_generator<\n            WrappedIterator\n          , single_pass_traversal_tag\n          , Reference\n          , Difference\n          , Buffer\n        >\n        {\n            typedef any_single_pass_iterator_wrapper<\n                        WrappedIterator\n                      , Reference\n                      , Buffer\n                > type;\n        };\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_wrapper_type_generator<\n            WrappedIterator\n          , forward_traversal_tag\n          , Reference\n          , Difference\n          , Buffer\n        >\n        {\n            typedef any_forward_iterator_wrapper<\n                WrappedIterator\n              , Reference\n              , Buffer\n            > type;\n        };\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_wrapper_type_generator<\n            WrappedIterator\n          , bidirectional_traversal_tag\n          , Reference\n          , Difference\n          , Buffer\n        >\n        {\n            typedef any_bidirectional_iterator_wrapper<\n                WrappedIterator\n              , Reference\n              , Buffer\n            > type;\n        };\n\n        template<\n            class WrappedIterator\n          , class Reference\n          , class Difference\n          , class Buffer\n        >\n        struct any_iterator_wrapper_type_generator<\n            WrappedIterator\n          , random_access_traversal_tag\n          , Reference\n          , Difference\n          , Buffer\n        >\n        {\n            typedef any_random_access_iterator_wrapper<\n                WrappedIterator\n              , Reference\n              , Difference\n              , Buffer\n            > type;\n        };\n\n    } // namespace range_detail\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/as_literal.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_AS_LITERAL_HPP\n#define BOOST_RANGE_DETAIL_AS_LITERAL_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/detail/detail_str.hpp>\n#include <boost/range/iterator_range.hpp>\n\nnamespace boost\n{\n    template< class Range >\n    inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<Range>::type> \n    as_literal( Range& r )\n    {\n        return ::boost::make_iterator_range( ::boost::range_detail::str_begin(r),\n                                             ::boost::range_detail::str_end(r) );\n    }\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/begin.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_BEGIN_HPP\n#define BOOST_RANGE_DETAIL_BEGIN_HPP\n\n#include <boost/config.hpp> // BOOST_MSVC\n#include <boost/detail/workaround.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/detail/common.hpp>\n\nnamespace boost\n{\n\n    namespace range_detail\n    {\n        template< typename T >\n        struct range_begin;\n\n        //////////////////////////////////////////////////////////////////////\n        // default\n        //////////////////////////////////////////////////////////////////////\n\n        template<>\n        struct range_begin<std_container_>\n        {\n            template< typename C >\n            static BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type fun( C& c )\n            {\n                return c.begin();\n            };\n        };\n\n        //////////////////////////////////////////////////////////////////////\n        // pair\n        //////////////////////////////////////////////////////////////////////\n\n        template<>\n        struct range_begin<std_pair_>\n        {\n            template< typename P >\n            static BOOST_RANGE_DEDUCED_TYPENAME range_iterator<P>::type fun( const P& p )\n            {\n                return p.first;\n            }\n        };\n\n        //////////////////////////////////////////////////////////////////////\n        // array\n        //////////////////////////////////////////////////////////////////////\n\n        template<>\n        struct range_begin<array_>\n        {\n            template<typename T>\n            static BOOST_RANGE_DEDUCED_TYPENAME range_value<T>::type* fun(T& t)\n            {\n                return t;\n            }\n        };\n\n    } // namespace 'range_detail'\n\n    namespace range_adl_barrier\n    {\n        template< typename C >\n        inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type\n        begin( C& c )\n        {\n            return range_detail::range_begin< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );\n        }\n    }\n} // namespace 'boost'\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/collection_traits.hpp",
    "content": "//  Boost string_algo library collection_traits.hpp header file  -------------//\n\n//  Copyright Pavol Droba 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// (C) Copyright Thorsten Ottosen 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// (C) Copyright Jeremy Siek 2001. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  Original idea of container traits was proposed by Jeremy Siek and\n//  Thorsten Ottosen. This implementation is lightweighted version\n//  of container_traits adapter for usage with string_algo library\n\n#ifndef BOOST_RANGE_STRING_COLLECTION_TRAITS_HPP\n#define BOOST_RANGE_STRING_COLLECTION_TRAITS_HPP\n\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/mpl/eval_if.hpp>\n\n// Implementation\n#include <boost/range/detail/collection_traits_detail.hpp>\n\n/*! \\file\n    Defines collection_traits class and related free-standing functions.\n    This facility is used to unify the access to different types of collections.\n    It allows the algorithms in the library to work with STL collections, c-style\n    array, null-terminated c-strings (and more) using the same interface.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  collection_traits template class -----------------------------------------//\n        \n        //! collection_traits class\n        /*!\n            Collection traits provide uniform access to different types of \n            collections. This functionality allows to write generic algorithms\n            which work with several different kinds of collections.\n\n            Currently following collection types are supported:\n                - containers with STL compatible container interface ( see ContainerConcept )\n                    ( i.e. \\c std::vector<>, \\c std::list<>, \\c std::string<> ... )\n                - c-style array \n                   ( \\c char[10], \\c int[15] ... )\n                - null-terminated c-strings\n                    ( \\c char*, \\c wchar_T* )\n                - std::pair of iterators \n                    ( i.e \\c std::pair<vector<int>::iterator,vector<int>::iterator> )\n\n            Collection traits provide an external collection interface operations.\n            All are accessible using free-standing functions.\n\n            The following operations are supported:\n                - \\c size()\n                - \\c empty()\n                - \\c begin()\n                - \\c end()\n\n            Container traits have somewhat limited functionality on compilers not\n            supporting partial template specialization and partial template ordering.\n        */\n        template< typename T >\n        struct collection_traits\n        {\n        private:\n            typedef typename ::boost::mpl::eval_if<\n                    ::boost::algorithm::detail::is_pair<T>, \n                        detail::pair_container_traits_selector<T>,\n                        typename ::boost::mpl::eval_if<\n                        ::boost::is_array<T>, \n                            detail::array_container_traits_selector<T>,\n                            typename ::boost::mpl::eval_if<\n                            ::boost::is_pointer<T>,\n                                detail::pointer_container_traits_selector<T>,\n                                detail::default_container_traits_selector<T>\n                            >\n                        > \n                >::type container_helper_type;\n        public:\n            //! Function type       \n            typedef container_helper_type function_type;        \n            //! Value type\n            typedef typename\n                container_helper_type::value_type value_type;\n            //! Size type\n            typedef typename\n                container_helper_type::size_type size_type;\n            //! Iterator type\n            typedef typename\n                container_helper_type::iterator iterator;\n            //! Const iterator type\n            typedef typename\n                container_helper_type::const_iterator const_iterator;\n            //! Result iterator type ( iterator of const_iterator, depending on the constness of the container )\n            typedef typename\n                container_helper_type::result_iterator result_iterator;\n            //! Difference type\n            typedef typename\n                container_helper_type::difference_type difference_type;\n\n        }; // 'collection_traits'\n\n//  collection_traits metafunctions -----------------------------------------//\n\n        //! Container value_type trait\n        /*!\n            Extract the type of elements contained in a container\n        */\n        template< typename C >\n        struct value_type_of\n        {\n            typedef typename collection_traits<C>::value_type type;\n        };\n        \n        //! Container difference trait\n        /*!\n            Extract the container's difference type\n        */\n        template< typename C >\n        struct difference_type_of\n        {\n            typedef typename collection_traits<C>::difference_type type;\n        };\n\n        //! Container iterator trait\n        /*!\n            Extract the container's iterator type\n        */\n        template< typename C >\n        struct iterator_of\n        {\n            typedef typename collection_traits<C>::iterator type;\n        };\n\n        //! Container const_iterator trait\n        /*!\n            Extract the container's const_iterator type\n        */\n        template< typename C >\n        struct const_iterator_of\n        {\n            typedef typename collection_traits<C>::const_iterator type;\n        };\n\n\n        //! Container result_iterator\n        /*!\n            Extract the container's result_iterator type. This type maps to \\c C::iterator\n            for mutable container and \\c C::const_iterator for const containers.\n        */\n        template< typename C >\n        struct result_iterator_of\n        {\n            typedef typename collection_traits<C>::result_iterator type;\n        };\n\n//  collection_traits related functions -----------------------------------------//\n\n        //! Free-standing size() function\n        /*!\n            Get the size of the container. Uses collection_traits.\n        */\n        template< typename C >\n        inline typename collection_traits<C>::size_type\n        size( const C& c )\n        {\n            return collection_traits<C>::function_type::size( c ); \n        }\n\n        //! Free-standing empty() function\n        /*!\n            Check whether the container is empty. Uses container traits.\n        */\n        template< typename C >\n        inline bool empty( const C& c )\n        {\n            return collection_traits<C>::function_type::empty( c );\n        }\n\n#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        //! Free-standing begin() function\n        /*!\n            Get the begin iterator of the container. Uses collection_traits.\n        */\n        template< typename C >\n        inline typename collection_traits<C>::iterator\n        begin( C& c )\n        {\n            return collection_traits<C>::function_type::begin( c ); \n        }\n\n        //! Free-standing begin() function\n        /*!\n            \\overload\n        */\n        template< typename C >\n        inline typename collection_traits<C>::const_iterator\n        begin( const C& c )\n        {\n            return collection_traits<C>::function_type::begin( c ); \n        }\n\n        //! Free-standing end() function\n        /*!\n            Get the begin iterator of the container. Uses collection_traits.\n        */\n        template< typename C >\n        inline typename collection_traits<C>::iterator\n        end( C& c )\n        {\n            return collection_traits<C>::function_type::end( c );\n        }\n\n        //! Free-standing end() function\n        /*!\n            \\overload           \n        */\n        template< typename C >\n        inline typename collection_traits<C>::const_iterator\n        end( const C& c )\n        {\n            return collection_traits<C>::function_type::end( c );\n        }\n\n#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        //! Free-standing begin() function\n        /*!\n            \\overload\n        */\n        template< typename C >\n        inline typename collection_traits<C>::result_iterator\n        begin( C& c )\n        {\n            return collection_traits<C>::function_type::begin( c );\n        }\n\n        //! Free-standing end() function\n        /*!\n            \\overload\n        */\n        template< typename C >\n        inline typename collection_traits<C>::result_iterator\n        end( C& c )\n        {\n            return collection_traits<C>::function_type::end( c );\n        }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n    } // namespace algorithm\n} // namespace boost\n\n#endif // BOOST_STRING_COLLECTION_TRAITS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/collection_traits_detail.hpp",
    "content": "//  Boost string_algo library collection_traits.hpp header file  -----------------------//\n\n//  Copyright Pavol Droba 2002-2003. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for updates, documentation, and revision history.\n\n#ifndef BOOST_RANGE_STRING_DETAIL_COLLECTION_TRAITS_HPP\n#define BOOST_RANGE_STRING_DETAIL_COLLECTION_TRAITS_HPP\n\n#include <cstddef>\n#include <string>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/vector.hpp>\n#include <boost/mpl/fold.hpp>\n#include <boost/detail/iterator.hpp>\n\n// Container traits implementation ---------------------------------------------------------\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n// Default collection traits -----------------------------------------------------------------\n\n            // Default collection helper \n            /*\n                Wraps std::container compliant containers\n            */\n            template< typename ContainerT >     \n            struct default_container_traits\n            {\n                typedef typename ContainerT::value_type value_type;\n                typedef typename ContainerT::iterator iterator;\n                typedef typename ContainerT::const_iterator const_iterator;\n                typedef typename\n                    ::boost::mpl::if_< ::boost::is_const<ContainerT>,\n                        const_iterator,\n                        iterator \n                    >::type result_iterator;\n                typedef typename ContainerT::difference_type difference_type;\n                typedef typename ContainerT::size_type size_type;\n                \n                // static operations\n                template< typename C >\n                static size_type size( const C& c )\n                {\n                    return c.size();\n                }\n\n                template< typename C >\n                static bool empty( const C& c )\n                {\n                    return c.empty();\n                }\n\n#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n                template< typename C >\n                static iterator begin( C& c )\n                {\n                    return c.begin();\n                }\n\n                template< typename C >\n                static const_iterator begin( const C& c )\n                {\n                    return c.begin();\n                }\n\n                template< typename C >\n                static iterator end( C& c )\n                {\n                    return c.end();\n                }\n\n                template< typename C >\n                static const_iterator end( const C& c )\n                {\n                    return c.end();\n                }\n\n#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n                template< typename C >\n                static result_iterator begin( C& c )\n                {\n                    return c.begin();\n                }\n\n                template< typename C >\n                static result_iterator end( C& c )\n                {\n                    return c.end();\n                }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING    \n\n            }; \n\n            template<typename T>\n            struct default_container_traits_selector\n            {\n                typedef default_container_traits<T> type;\n            };\n\n// Pair container traits ---------------------------------------------------------------------\n\n            typedef double yes_type;\n            typedef char no_type;\n\n            // pair selector\n            template< typename T, typename U >\n            yes_type is_pair_impl( const std::pair<T,U>* );\n            no_type is_pair_impl( ... );\n\n            template<typename T> struct is_pair\n            {\n            private:\n                static T* t;\n            public:\n                BOOST_STATIC_CONSTANT( bool, value=\n                    sizeof(is_pair_impl(t))==sizeof(yes_type) );\n            };\n\n            // pair helper\n            template< typename PairT >\n            struct pair_container_traits\n            {\n                typedef typename PairT::first_type element_type;\n\n                typedef typename ::boost::detail::\n                    iterator_traits<element_type>::value_type value_type;\n                typedef std::size_t size_type;\n                typedef typename ::boost::detail::\n                    iterator_traits<element_type>::difference_type difference_type;\n\n                typedef element_type iterator;\n                typedef element_type const_iterator;\n                typedef element_type result_iterator;\n\n                // static operations\n                template< typename P >\n                static size_type size( const P& p )\n                {\n                    difference_type diff = std::distance( p.first, p.second );\n                    if ( diff < 0 ) \n                        return 0;\n                    else\n                        return diff;\n                }\n\n                template< typename P >\n                static bool empty( const P& p )\n                {\n                    return p.first==p.second;\n                }\n\n                template< typename P > \n                static const_iterator begin( const P& p )\n                {\n                    return p.first;\n                }\n\n                template< typename P >\n                static const_iterator end( const P& p )\n                {\n                    return p.second;\n                }\n            }; // 'pair_container_helper'\n\n            template<typename T>\n            struct pair_container_traits_selector\n            {\n                typedef pair_container_traits<T> type;\n            };\n\n// Array container traits ---------------------------------------------------------------\n\n            // array traits ( partial specialization )\n            template< typename T >\n            struct array_traits;\n\n            template< typename T, std::size_t sz >\n            struct array_traits<T[sz]>\n            {\n                // typedef\n                typedef T* iterator;\n                typedef const T* const_iterator;\n                typedef T value_type;\n                typedef std::size_t size_type;\n                typedef std::ptrdiff_t difference_type;\n\n                // size of the array ( static );\n                BOOST_STATIC_CONSTANT( size_type, array_size = sz );\n            };\n\n            \n            // array length resolving\n            /*\n                Lenght of string contained in a static array could\n                be different from the size of the array.\n                For string processing we need the length without\n                terminating 0.\n\n                Therefore, the length is calculated for char and wchar_t\n                using char_traits, rather then simply returning\n                the array size.\n            */\n            template< typename T >\n            struct array_length_selector\n            {\n                template< typename TraitsT >\n                struct array_length\n                {\n                    typedef typename\n                        TraitsT::size_type size_type;\n\n                    BOOST_STATIC_CONSTANT(\n                        size_type,\n                        array_size=TraitsT::array_size );\n\n                    template< typename A >\n                    static size_type length( const A& )\n                    {\n                        return array_size;\n                    }\n\n                    template< typename A >\n                    static bool empty( const A& )\n                    {\n                        return array_size==0;\n                    }\n                };\n            };\n\n            // specialization for char\n            template<>\n            struct array_length_selector<char>\n            {\n                template< typename TraitsT >\n                struct array_length\n                {\n                    typedef typename\n                        TraitsT::size_type size_type;\n\n                    template< typename A >\n                    static size_type length( const A& a )\n                    {\n                        if ( a==0 ) \n                            return 0;\n                        else\n                            return std::char_traits<char>::length(a);\n                    }\n                    \n                    template< typename A >\n                    static bool empty( const A& a )\n                    {\n                        return a==0 || a[0]==0;\n                    }\n                };\n            };\n\n            // specialization for wchar_t\n            template<>\n            struct array_length_selector<wchar_t>\n            {\n                template< typename TraitsT >\n                struct array_length\n                {\n                    typedef typename\n                        TraitsT::size_type size_type;\n\n                    template< typename A >\n                    static size_type length( const A& a )\n                    {\n                        if ( a==0 ) \n                            return 0;\n                        else\n                            return std::char_traits<wchar_t>::length(a);\n                    }\n\n                    template< typename A >\n                    static bool empty( const A& a )\n                    {\n                        return a==0 || a[0]==0;\n                    }\n                };\n            };\n\n            template< typename T >\n            struct array_container_traits\n            {\n            private:\n                // resolve array traits\n                typedef array_traits<T> traits_type;\n\n            public:\n                typedef typename\n                    traits_type::value_type value_type;\n                typedef typename\n                    traits_type::iterator iterator;\n                typedef typename\n                    traits_type::const_iterator const_iterator;\n                typedef typename\n                    traits_type::size_type size_type;\n                typedef typename\n                    traits_type::difference_type difference_type;\n\n                typedef typename\n                    ::boost::mpl::if_< ::boost::is_const<T>,\n                        const_iterator,\n                        iterator \n                    >::type result_iterator;\n                \n            private:\n                // resolve array size\n                typedef typename\n                    ::boost::remove_cv<value_type>::type char_type;\n                typedef typename\n                    array_length_selector<char_type>::\n                        BOOST_NESTED_TEMPLATE array_length<traits_type> array_length_type;\n\n            public:\n                BOOST_STATIC_CONSTANT( size_type, array_size = traits_type::array_size );\n\n                // static operations\n                template< typename A >\n                static size_type size( const A& a )\n                {\n                    return array_length_type::length(a);\n                }\n\n                template< typename A >\n                static bool empty( const A& a )\n                {\n                    return array_length_type::empty(a);\n                }\n                \n\n#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n                template< typename A >\n                static iterator begin( A& a )\n                {\n                    return a;\n                }\n\n                template< typename A >\n                static const_iterator begin( const A& a )\n                {\n                    return a;\n                }\n\n                template< typename A >\n                static iterator end( A& a )\n                {\n                    return a+array_length_type::length(a);\n                }\n\n                template< typename A >\n                static const_iterator end( const A& a )\n                {\n                    return a+array_length_type::length(a);\n                }\n\n#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n                template< typename A >\n                static result_iterator begin( A& a )\n                {\n                    return a;\n                }\n\n                template< typename A >\n                static result_iterator end( A& a )\n                {\n                    return a+array_length_type::length(a);\n                }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING    \n\n            }; \n\n            template<typename T>\n            struct array_container_traits_selector\n            {\n                typedef array_container_traits<T> type;\n            };\n\n// Pointer container traits ---------------------------------------------------------------\n\n            template<typename T>\n            struct pointer_container_traits\n            {\n                typedef typename\n                    ::boost::remove_pointer<T>::type value_type;\n\n                typedef typename\n                    ::boost::remove_cv<value_type>::type char_type;\n                typedef ::std::char_traits<char_type> char_traits;\n\n                typedef value_type* iterator;\n                typedef const value_type* const_iterator;\n                typedef std::ptrdiff_t difference_type;\n                typedef std::size_t size_type;\n\n                typedef typename\n                    ::boost::mpl::if_< ::boost::is_const<T>,\n                        const_iterator,\n                        iterator \n                    >::type result_iterator;\n\n                // static operations\n                template< typename P >\n                static size_type size( const P& p )\n                {\n                    if ( p==0 ) \n                        return 0;\n                    else\n                        return char_traits::length(p);\n                }\n\n                template< typename P >\n                static bool empty( const P& p )\n                {\n                    return p==0 || p[0]==0;\n                }\n\n#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n                template< typename P >\n                static iterator begin( P& p )\n                {\n                    return p;\n                }\n\n                template< typename P >\n                static const_iterator begin( const P& p )\n                {\n                    return p;\n                }\n\n                template< typename P >\n                static iterator end( P& p )\n                {\n                    if ( p==0 )\n                        return p;\n                    else\n                        return p+char_traits::length(p);\n                }\n\n                template< typename P >\n                static const_iterator end( const P& p )\n                {\n                    if ( p==0 )\n                        return p;\n                    else\n                        return p+char_traits::length(p);\n                }\n\n#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n                template< typename P >\n                static result_iterator begin( P& p )\n                {\n                    return p;\n                }\n\n                template< typename P >\n                static result_iterator end( P& p )\n                {\n                    if ( p==0 )\n                        return p;\n                    else\n                        return p+char_traits::length(p);\n                }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING    \n            }; \n\n            template<typename T>\n            struct pointer_container_traits_selector\n            {\n                typedef pointer_container_traits<T> type;\n            };\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_DETAIL_COLLECTION_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/combine_cxx03.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2014. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_COMBINE_CXX03_HPP\n#define BOOST_RANGE_DETAIL_COMBINE_CXX03_HPP\n\n#ifndef BOOST_RANGE_MIN_COMBINE_ARGS\n#define BOOST_RANGE_MIN_COMBINE_ARGS 2\n#endif\n\n#ifndef BOOST_RANGE_MAX_COMBINE_ARGS\n#define BOOST_RANGE_MAX_COMBINE_ARGS 5\n#endif\n\n#include <boost/config.hpp>\n#include <boost/iterator/zip_iterator.hpp>\n#include <boost/preprocessor/arithmetic/dec.hpp>\n#include <boost/preprocessor/arithmetic/div.hpp>\n#include <boost/preprocessor/arithmetic/mul.hpp>\n#include <boost/preprocessor/control.hpp>\n#include <boost/preprocessor/control/while.hpp>\n#include <boost/preprocessor/facilities/empty.hpp>\n#include <boost/preprocessor/facilities/identity.hpp>\n#include <boost/preprocessor/iteration/local.hpp>\n#include <boost/preprocessor/punctuation/comma.hpp>\n#include <boost/preprocessor/repetition.hpp>\n#include <boost/preprocessor/tuple/elem.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/mpl/transform.hpp>\n#include <boost/utility/result_of.hpp>\n\n#include <vector>\n#include <list>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<typename F, typename T, int SIZE>\nstruct combined_result_impl;\n\ntemplate<typename F, typename T>\nstruct combined_result\n    : combined_result_impl<F, T, tuples::length<T>::value>\n{\n};\n\n#define BOOST_RANGE_combined_element(z, n, data) \\\n    typename tuples::element<n, T>::type\n\n#define BOOST_RANGE_combined_result(z, n, data) \\\n    template<typename F, typename T> \\\n    struct combined_result_impl <F,T,n> \\\n        : result_of<F(BOOST_PP_ENUM(n, BOOST_RANGE_combined_element, ~))> \\\n    { \\\n    };\n\n#define BOOST_PP_LOCAL_MACRO(n) BOOST_RANGE_combined_result(~,n,~)\n\n#define BOOST_PP_LOCAL_LIMITS (BOOST_RANGE_MIN_COMBINE_ARGS, \\\n                               BOOST_RANGE_MAX_COMBINE_ARGS)\n#include BOOST_PP_LOCAL_ITERATE()\n\n#define BOOST_RANGE_combined_get(z, n, data) get<n>(tuple)\n\n#define BOOST_RANGE_combined_unpack(z, n, data) \\\n    template<typename F, typename T> inline \\\n    typename combined_result<F,T>::type \\\n    unpack_(mpl::int_<n>, F f, const T& tuple) \\\n    { \\\n        return f(BOOST_PP_ENUM(n, BOOST_RANGE_combined_get, ~)); \\\n    }\n\n#define BOOST_PP_LOCAL_MACRO(n) BOOST_RANGE_combined_unpack(~,n,~)\n#define BOOST_PP_LOCAL_LIMITS (BOOST_RANGE_MIN_COMBINE_ARGS, \\\n                               BOOST_RANGE_MAX_COMBINE_ARGS)\n#include BOOST_PP_LOCAL_ITERATE()\n\n} // namespace range_detail\n\nnamespace range\n{\n\n#define BOOST_RANGE_combined_seq(z, n, data) boost::data(BOOST_PP_CAT(r,n))\n\n#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES\n\n#include <boost/range/detail/combine_no_rvalue.hpp>\n\n#else // by using rvalue references we avoid requiring 2^n overloads.\n\n#include <boost/range/detail/combine_rvalue.hpp>\n\n#endif\n\n#define BOOST_PP_LOCAL_MACRO(n) BOOST_RANGE_combine(~,n,~)\n#define BOOST_PP_LOCAL_LIMITS (BOOST_RANGE_MIN_COMBINE_ARGS, \\\n                               BOOST_RANGE_MAX_COMBINE_ARGS)\n#include BOOST_PP_LOCAL_ITERATE()\n\n    } // namespace range\n\n    using boost::range::combine;\n\n} // namespace boost\n\n#endif // include guard\n\n#undef BOOST_RANGE_combined_element\n#undef BOOST_RANGE_combined_result\n#undef BOOST_RANGE_combined_get\n#undef BOOST_RANGE_combined_unpack\n#undef BOOST_RANGE_combined_seq\n#undef BOOST_RANGE_combined_exp_pred\n#undef BOOST_RANGE_combined_exp_op\n#undef BOOST_RANGE_combined_exp\n#undef BOOST_RANGE_combined_bitset_pred\n#undef BOOST_RANGE_combined_bitset_op\n#undef BOOST_RANGE_combined_bitset\n#undef BOOST_RANGE_combined_range_iterator\n#undef BOOST_RANGE_combined_args\n#undef BOOST_RANGE_combine_impl\n#undef BOOST_RANGE_combine\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/combine_cxx11.hpp",
    "content": "//  Copyright Neil Groves 2014. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_COMBINE_CXX11_HPP\n#define BOOST_RANGE_DETAIL_COMBINE_CXX11_HPP\n\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/iterator/zip_iterator.hpp>\n\n#include <fstream>\n\nnamespace boost\n{\n    namespace range\n    {\n\ntemplate<typename... Ranges>\nauto combine(Ranges&&... rngs) ->\n    combined_range<decltype(boost::make_tuple(boost::begin(rngs)...))>\n{\n    return combined_range<decltype(boost::make_tuple(boost::begin(rngs)...))>(\n                boost::make_tuple(boost::begin(rngs)...),\n                boost::make_tuple(boost::end(rngs)...));\n}\n\n    } // namespace range\n\nusing range::combine;\n\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/combine_no_rvalue.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2014. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#define BOOST_RANGE_combined_exp_pred(d, data) BOOST_PP_TUPLE_ELEM(3, 0, data)\n\n#define BOOST_RANGE_combined_exp_op(d, data) \\\n ( \\\n    BOOST_PP_DEC( \\\n       BOOST_PP_TUPLE_ELEM(3, 0, data) \\\n    ), \\\n    BOOST_PP_TUPLE_ELEM(3, 1, data), \\\n    BOOST_PP_MUL_D( \\\n       d, \\\n       BOOST_PP_TUPLE_ELEM(3, 2, data), \\\n       BOOST_PP_TUPLE_ELEM(3, 1, data) \\\n    ) \\\n )\n\n#define BOOST_RANGE_combined_exp(x, n) \\\n  BOOST_PP_TUPLE_ELEM(3, 2, \\\n  BOOST_PP_WHILE(BOOST_RANGE_combined_exp_pred, \\\n                 BOOST_RANGE_combined_exp_op, (n, x, 1)))\n\n#define BOOST_RANGE_combined_bitset_pred(n, state) \\\n    BOOST_PP_TUPLE_ELEM(2,1,state)\n\n#define BOOST_RANGE_combined_bitset_op(d, state) \\\n    (BOOST_PP_DIV_D(d, BOOST_PP_TUPLE_ELEM(2,0,state), 2), \\\n     BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2,1,state)))\n\n#define BOOST_RANGE_combined_bitset(i, n) \\\nBOOST_PP_MOD(BOOST_PP_TUPLE_ELEM(2, 0, \\\n      BOOST_PP_WHILE(BOOST_RANGE_combined_bitset_pred, \\\n                     BOOST_RANGE_combined_bitset_op, (i,n))), 2)\n\n#define BOOST_RANGE_combined_range_iterator(z, n, i) \\\n  typename range_iterator< \\\n      BOOST_PP_CAT(R,n)          \\\n      BOOST_PP_IF( \\\n          BOOST_RANGE_combined_bitset(i,n), \\\n          BOOST_PP_IDENTITY(const), \\\n          BOOST_PP_EMPTY)() \\\n  >::type\n\n#define BOOST_RANGE_combined_args(z, n, i) \\\n  BOOST_PP_CAT(R, n) \\\n  BOOST_PP_IF(BOOST_RANGE_combined_bitset(i,n), const&, &)  \\\n  BOOST_PP_CAT(r, n)\n\n#define BOOST_RANGE_combine_impl(z, i, n)\\\n    template<BOOST_PP_ENUM_PARAMS(n, typename R)> \\\n    inline range::combined_range< \\\n        boost::tuple<BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, i)> \\\n    > \\\n    combine(BOOST_PP_ENUM(n, BOOST_RANGE_combined_args, i)) \\\n    { \\\n        typedef tuple< \\\n            BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, i) \\\n        > rng_tuple_t;   \\\n        return range::combined_range<rng_tuple_t>( \\\n            rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, begin)), \\\n            rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, end))); \\\n    }\n\n\n#define BOOST_RANGE_combine(z, n, data) \\\n  BOOST_PP_REPEAT(BOOST_RANGE_combined_exp(2,n), BOOST_RANGE_combine_impl, n)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/combine_rvalue.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2014. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#define BOOST_RANGE_combined_args(z, n, i) \\\n    BOOST_PP_CAT(R, n)&& BOOST_PP_CAT(r, n)\n\n#define BOOST_RANGE_combined_range_iterator(z, n, i) \\\n    typename range_iterator< \\\n        typename remove_reference<BOOST_PP_CAT(R,n)>::type \\\n  >::type\n\n\n#define BOOST_RANGE_combine(z, n, data) \\\n    template <BOOST_PP_ENUM_PARAMS(n, typename R)> \\\n    inline range::combined_range< \\\n        tuple<BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, ~)> \\\n    > \\\n    combine(BOOST_PP_ENUM(n, BOOST_RANGE_combined_args, ~)) \\\n    { \\\n        typedef tuple< \\\n            BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, ~) \\\n        > rng_tuple_t; \\\n        return range::combined_range<rng_tuple_t>( \\\n            rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, begin)), \\\n            rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, end))); \\\n    }\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/common.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_COMMON_HPP\n#define BOOST_RANGE_DETAIL_COMMON_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/detail/sfinae.hpp>\n#include <boost/type_traits/is_void.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/or.hpp>\n#include <cstddef>\n\n//////////////////////////////////////////////////////////////////////////////\n// missing partial specialization  workaround.\n//////////////////////////////////////////////////////////////////////////////\n\nnamespace boost \n{\n    namespace range_detail \n    {        \n        // 1 = std containers\n        // 2 = std::pair\n        // 3 = const std::pair\n        // 4 = array\n        // 5 = const array\n        // 6 = char array\n        // 7 = wchar_t array\n        // 8 = char*\n        // 9 = const char*\n        // 10 = whar_t*\n        // 11 = const wchar_t*\n        // 12 = string\n        \n        typedef mpl::int_<1>::type    std_container_;\n        typedef mpl::int_<2>::type    std_pair_;\n        typedef mpl::int_<3>::type    const_std_pair_;\n        typedef mpl::int_<4>::type    array_;\n        typedef mpl::int_<5>::type    const_array_;\n        typedef mpl::int_<6>::type    char_array_;\n        typedef mpl::int_<7>::type    wchar_t_array_;\n        typedef mpl::int_<8>::type    char_ptr_;\n        typedef mpl::int_<9>::type    const_char_ptr_;\n        typedef mpl::int_<10>::type   wchar_t_ptr_;\n        typedef mpl::int_<11>::type   const_wchar_t_ptr_;\n        typedef mpl::int_<12>::type   string_;\n        \n        template< typename C >\n        struct range_helper\n        {\n            static C* c;\n            static C  ptr;\n\n            BOOST_STATIC_CONSTANT( bool, is_pair_                = sizeof( boost::range_detail::is_pair_impl( c ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_char_ptr_            = sizeof( boost::range_detail::is_char_ptr_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_const_char_ptr_      = sizeof( boost::range_detail::is_const_char_ptr_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_wchar_t_ptr_         = sizeof( boost::range_detail::is_wchar_t_ptr_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_const_wchar_t_ptr_   = sizeof( boost::range_detail::is_const_wchar_t_ptr_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_char_array_          = sizeof( boost::range_detail::is_char_array_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_wchar_t_array_       = sizeof( boost::range_detail::is_wchar_t_array_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_string_              = (boost::mpl::or_<boost::mpl::bool_<is_const_char_ptr_>, boost::mpl::bool_<is_const_wchar_t_ptr_> >::value ));\n            BOOST_STATIC_CONSTANT( bool, is_array_               = boost::is_array<C>::value );\n            \n        };\n        \n        template< typename C >\n        class range\n        {\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_pair_,\n                                                                  boost::range_detail::std_pair_,\n                                                                  void >::type pair_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_array_,\n                                                                    boost::range_detail::array_,\n                                                                    pair_t >::type array_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_string_,\n                                                                    boost::range_detail::string_,\n                                                                    array_t >::type string_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_const_char_ptr_,\n                                                                    boost::range_detail::const_char_ptr_,\n                                                                    string_t >::type const_char_ptr_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_char_ptr_,\n                                                                    boost::range_detail::char_ptr_,\n                                                                    const_char_ptr_t >::type char_ptr_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_const_wchar_t_ptr_,\n                                                                    boost::range_detail::const_wchar_t_ptr_,\n                                                                    char_ptr_t >::type const_wchar_ptr_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_wchar_t_ptr_,\n                                                                    boost::range_detail::wchar_t_ptr_,\n                                                                    const_wchar_ptr_t >::type wchar_ptr_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_wchar_t_array_,\n                                                                    boost::range_detail::wchar_t_array_,\n                                                                    wchar_ptr_t >::type wchar_array_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_char_array_,\n                                                                    boost::range_detail::char_array_,\n                                                                    wchar_array_t >::type char_array_t;\n        public:\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::is_void<char_array_t>::value,\n                                                                    boost::range_detail::std_container_,\n                                                                    char_array_t >::type type;  \n        }; // class 'range' \n    }\n}\n        \n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/default_constructible_unary_fn.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2014. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_DEFAULT_CONSTRUCTIBLE_UNARY_FN_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_DEFAULT_CONSTRUCTIBLE_UNARY_FN_HPP_INCLUDED\n\n#include <boost/optional/optional.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/type_traits/has_trivial_constructor.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<typename F, typename R>\nclass default_constructible_unary_fn_wrapper\n{\npublic:\n    typedef R result_type;\n\n    default_constructible_unary_fn_wrapper()\n    {\n    }\n    default_constructible_unary_fn_wrapper(const F& source)\n        : m_impl(source)\n    {\n    }\n    template<typename Arg>\n    R operator()(const Arg& arg) const\n    {\n        BOOST_ASSERT(m_impl);\n        return (*m_impl)(arg);\n    }\n    template<typename Arg>\n    R operator()(Arg& arg) const\n    {\n        BOOST_ASSERT(m_impl);\n        return (*m_impl)(arg);\n    }\nprivate:\n    boost::optional<F> m_impl;\n};\n\ntemplate<typename F, typename R>\nstruct default_constructible_unary_fn_gen\n{\n    typedef typename boost::mpl::if_<\n        boost::has_trivial_default_constructor<F>,\n        F,\n        default_constructible_unary_fn_wrapper<F,R>\n    >::type type;\n};\n\n    } // namespace range_detail\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/demote_iterator_traversal_tag.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// Acknowledgements:\n// aschoedl supplied a fix to supply the level of interoperability I had\n// originally intended, but failed to implement.\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_DEMOTE_ITERATOR_TRAVERSAL_TAG_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_DEMOTE_ITERATOR_TRAVERSAL_TAG_HPP_INCLUDED\n\n#include <boost/iterator/iterator_categories.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<class IteratorTraversalTag1, class IteratorTraversalTag2>\nstruct inner_demote_iterator_traversal_tag\n{\n};\n\n#define BOOST_DEMOTE_TRAVERSAL_TAG( Tag1, Tag2, ResultTag ) \\\ntemplate<> struct inner_demote_iterator_traversal_tag< Tag1 , Tag2 > \\\n{ \\\n    typedef ResultTag type; \\\n};\n\nBOOST_DEMOTE_TRAVERSAL_TAG( no_traversal_tag, no_traversal_tag,            no_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( no_traversal_tag, incrementable_traversal_tag, no_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( no_traversal_tag, single_pass_traversal_tag,   no_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( no_traversal_tag, forward_traversal_tag,       no_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( no_traversal_tag, bidirectional_traversal_tag, no_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( no_traversal_tag, random_access_traversal_tag, no_traversal_tag )\n\nBOOST_DEMOTE_TRAVERSAL_TAG( incrementable_traversal_tag, no_traversal_tag,            no_traversal_tag            )\nBOOST_DEMOTE_TRAVERSAL_TAG( incrementable_traversal_tag, incrementable_traversal_tag, incrementable_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( incrementable_traversal_tag, single_pass_traversal_tag,   incrementable_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( incrementable_traversal_tag, forward_traversal_tag,       incrementable_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( incrementable_traversal_tag, bidirectional_traversal_tag, incrementable_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( incrementable_traversal_tag, random_access_traversal_tag, incrementable_traversal_tag )\n\nBOOST_DEMOTE_TRAVERSAL_TAG( single_pass_traversal_tag, no_traversal_tag,            no_traversal_tag            )\nBOOST_DEMOTE_TRAVERSAL_TAG( single_pass_traversal_tag, incrementable_traversal_tag, incrementable_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( single_pass_traversal_tag, single_pass_traversal_tag,   single_pass_traversal_tag   )\nBOOST_DEMOTE_TRAVERSAL_TAG( single_pass_traversal_tag, forward_traversal_tag,       single_pass_traversal_tag   )\nBOOST_DEMOTE_TRAVERSAL_TAG( single_pass_traversal_tag, bidirectional_traversal_tag, single_pass_traversal_tag   )\nBOOST_DEMOTE_TRAVERSAL_TAG( single_pass_traversal_tag, random_access_traversal_tag, single_pass_traversal_tag   )\n\nBOOST_DEMOTE_TRAVERSAL_TAG( forward_traversal_tag, no_traversal_tag,            no_traversal_tag            )\nBOOST_DEMOTE_TRAVERSAL_TAG( forward_traversal_tag, incrementable_traversal_tag, incrementable_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( forward_traversal_tag, single_pass_traversal_tag,   single_pass_traversal_tag   )\nBOOST_DEMOTE_TRAVERSAL_TAG( forward_traversal_tag, forward_traversal_tag,       forward_traversal_tag       )\nBOOST_DEMOTE_TRAVERSAL_TAG( forward_traversal_tag, bidirectional_traversal_tag, forward_traversal_tag       )\nBOOST_DEMOTE_TRAVERSAL_TAG( forward_traversal_tag, random_access_traversal_tag, forward_traversal_tag       )\n\nBOOST_DEMOTE_TRAVERSAL_TAG( bidirectional_traversal_tag, no_traversal_tag,            no_traversal_tag            )\nBOOST_DEMOTE_TRAVERSAL_TAG( bidirectional_traversal_tag, incrementable_traversal_tag, incrementable_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( bidirectional_traversal_tag, single_pass_traversal_tag,   single_pass_traversal_tag   )\nBOOST_DEMOTE_TRAVERSAL_TAG( bidirectional_traversal_tag, forward_traversal_tag,       forward_traversal_tag       )\nBOOST_DEMOTE_TRAVERSAL_TAG( bidirectional_traversal_tag, bidirectional_traversal_tag, bidirectional_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( bidirectional_traversal_tag, random_access_traversal_tag, bidirectional_traversal_tag )\n\nBOOST_DEMOTE_TRAVERSAL_TAG( random_access_traversal_tag, no_traversal_tag,            no_traversal_tag            )\nBOOST_DEMOTE_TRAVERSAL_TAG( random_access_traversal_tag, incrementable_traversal_tag, incrementable_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( random_access_traversal_tag, single_pass_traversal_tag,   single_pass_traversal_tag   )\nBOOST_DEMOTE_TRAVERSAL_TAG( random_access_traversal_tag, forward_traversal_tag,       forward_traversal_tag       )\nBOOST_DEMOTE_TRAVERSAL_TAG( random_access_traversal_tag, bidirectional_traversal_tag, bidirectional_traversal_tag )\nBOOST_DEMOTE_TRAVERSAL_TAG( random_access_traversal_tag, random_access_traversal_tag, random_access_traversal_tag )\n\n#undef BOOST_DEMOTE_TRAVERSAL_TAG\n\ntemplate<class IteratorTraversalTag1, class IteratorTraversalTag2>\nstruct demote_iterator_traversal_tag\n    : inner_demote_iterator_traversal_tag<\n        typename boost::iterators::pure_traversal_tag< IteratorTraversalTag1 >::type,\n        typename boost::iterators::pure_traversal_tag< IteratorTraversalTag2 >::type\n      >\n{\n};\n\n    } // namespace range_detail\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/detail_str.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_DETAIL_STR_HPP\n#define BOOST_RANGE_DETAIL_DETAIL_STR_HPP\n\n#include <boost/config.hpp> // BOOST_MSVC\n#include <boost/range/iterator.hpp>\n\nnamespace boost \n{\n    \n    namespace range_detail\n    {\n        //\n        // iterator\n        //\n        \n        template<>\n        struct range_iterator_<char_array_>\n        { \n            template< typename T >\n            struct pts\n            {\n                 typedef BOOST_RANGE_DEDUCED_TYPENAME \n                    remove_extent<T>::type* type;\n            };\n        };\n\n        template<>\n        struct range_iterator_<char_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef char* type; \n            };         \n        };\n\n        template<>\n        struct range_iterator_<const_char_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef const char* type;\n            };         \n        };\n\n        template<>\n        struct range_iterator_<wchar_t_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef wchar_t* type; \n            };         \n        };\n\n        template<>\n        struct range_iterator_<const_wchar_t_ptr_>\n        {\n             template< typename S >\n             struct pts\n             {\n                 typedef const wchar_t* type; \n             };         \n        };\n\n\n        //\n        // const iterator\n        //\n\n        template<>\n        struct range_const_iterator_<char_array_>\n        { \n            template< typename T >\n            struct pts\n            {\n                typedef const BOOST_RANGE_DEDUCED_TYPENAME \n                    remove_extent<T>::type* type;\n            };\n        };\n\n        template<>\n        struct range_const_iterator_<char_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef const char* type; \n            };         \n        };\n\n        template<>\n        struct range_const_iterator_<const_char_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef const char* type; \n            };         \n        };\n\n        template<>\n        struct range_const_iterator_<wchar_t_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef const wchar_t* type; \n            };         \n        };\n\n        template<>\n        struct range_const_iterator_<const_wchar_t_ptr_>\n        {\n             template< typename S >\n             struct pts\n             {\n                 typedef const wchar_t* type; \n             };         \n        };\n    }\n}\n\n#include <boost/range/detail/begin.hpp>\n#include <boost/range/detail/end.hpp>\n#include <boost/range/detail/size_type.hpp>\n#include <boost/range/detail/value_type.hpp>\n#include <boost/range/detail/common.hpp>\n\nnamespace boost \n{\n    \n    namespace range_detail\n    {\n        //\n        // str_begin()\n        //\n        template<>\n        struct range_begin<char_ptr_>\n        {\n            static char* fun( char* s )\n            {\n                return s;\n            }\n        };\n\n        template<>\n        struct range_begin<const_char_ptr_>\n        {\n            static const char* fun( const char* s )\n            {\n                return s;\n            }\n        };\n        \n        template<>\n        struct range_begin<wchar_t_ptr_>\n        {\n            \n            static wchar_t* fun( wchar_t* s )\n            {\n                return s;\n            }\n        };\n\n        template<>\n        struct range_begin<const_wchar_t_ptr_>\n        {\n            static const wchar_t* fun( const wchar_t* s )\n            {\n                return s;\n            }\n        };\n        \n        template< typename C >\n        inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type \n        str_begin( C& c )\n        {\n            return range_detail::range_begin< BOOST_RANGE_DEDUCED_TYPENAME \n                range_detail::range<C>::type >::fun( c );\n        }\n\n        //\n        // str_end()\n        //\n\n        template<>\n        struct range_end<char_array_>\n        {\n            template< typename T, std::size_t sz >\n            static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )\n            {\n                return boost::range_detail::array_end( boost_range_array );\n            }\n        };\n        \n        template<>\n        struct range_end<wchar_t_array_>\n        {\n            template< typename T, std::size_t sz >\n            static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )\n            {\n                return boost::range_detail::array_end( boost_range_array );\n            }\n        };\n        \n        template<>\n        struct range_end<char_ptr_>\n        {\n            static char* fun( char* s )\n            {\n                return boost::range_detail::str_end( s );\n            }\n        };\n\n        template<>\n        struct range_end<const_char_ptr_>\n        {\n            static const char* fun( const char* s )\n            {\n                return boost::range_detail::str_end( s );\n            }\n        };\n\n        template<>\n        struct range_end<wchar_t_ptr_>\n        {\n            static wchar_t* fun( wchar_t* s )\n            {\n                return boost::range_detail::str_end( s );\n            }\n        };\n\n\n        template<>\n        struct range_end<const_wchar_t_ptr_>\n        {\n            static const wchar_t* fun( const wchar_t* s )\n            {\n                return boost::range_detail::str_end( s );\n            }\n        };\n\n        template< typename C >\n        inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type \n        str_end( C& c )\n        {\n            return range_detail::range_end< BOOST_RANGE_DEDUCED_TYPENAME \n                range_detail::range<C>::type >::fun( c );\n        }\n\n        //\n        // size_type\n        //\n\n        template<>\n        struct range_size_type_<char_array_>\n        { \n            template< typename A >\n            struct pts\n            {\n                typedef std::size_t type;\n            };\n        };\n\n        template<>\n        struct range_size_type_<char_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef std::size_t type;\n            };         \n        };\n        \n        template<>\n        struct range_size_type_<const_char_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef std::size_t type;\n            };         \n        };\n        \n        template<>\n        struct range_size_type_<wchar_t_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef std::size_t type;\n            };         \n        };\n        \n        template<>\n        struct range_size_type_<const_wchar_t_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef std::size_t type;\n            };         \n        };  \n\n        //\n        // value_type\n        //\n        \n        template<>\n        struct range_value_type_<char_array_>\n        { \n            template< typename T >\n            struct pts\n            {\n                typedef char type;\n            };\n        };\n\n        template<>\n        struct range_value_type_<char_ptr_>\n        {\n             template< typename S >\n             struct pts\n             {\n                 typedef char type; \n             };         \n        };\n        \n        template<>\n        struct range_value_type_<const_char_ptr_>\n        {\n             template< typename S >\n             struct pts\n             {\n                 typedef const char type;\n             };         \n        };\n        \n        template<>\n        struct range_value_type_<wchar_t_ptr_>\n        {\n             template< typename S >\n             struct pts\n             {\n                 typedef wchar_t type;\n             };         \n        };\n        \n        template<>\n        struct range_value_type_<const_wchar_t_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef const wchar_t type;\n            };         \n        };\n\n    } // namespace 'range_detail'\n\n} // namespace 'boost'\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/difference_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_DIFFERENCE_TYPE_HPP\n#define BOOST_RANGE_DETAIL_DIFFERENCE_TYPE_HPP\n\n#include <boost/range/detail/common.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n\n//////////////////////////////////////////////////////////////////////////////\n// missing partial specialization  workaround.\n//////////////////////////////////////////////////////////////////////////////\n\nnamespace boost \n{\n    namespace range_detail \n    {        \n        template< typename T >\n        struct range_difference_type_;\n\n        template<>\n        struct range_difference_type_<std_container_>\n        {\n            template< typename C >\n            struct pts\n            {\n                typedef BOOST_DEDUCED_TYPENAME C::difference_type type;\n            };\n        };\n\n        template<>\n        struct range_difference_type_<std_pair_>\n        {\n            template< typename P >\n            struct pts\n            {\n                typedef BOOST_RANGE_DEDUCED_TYPENAME boost::iterator_difference< BOOST_DEDUCED_TYPENAME P::first_type>::type type;                \n            };\n        };\n\n        template<>\n        struct range_difference_type_<array_>\n        {\n            template< typename A >\n            struct pts\n            {\n                typedef std::ptrdiff_t type;\n            };\n        };\n\n        template<>\n        struct range_difference_type_<char_array_>\n        { \n            template< typename A >\n            struct pts\n            {\n                typedef std::ptrdiff_t type;\n            };\n        };\n\n        template<>\n        struct range_difference_type_<char_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef std::ptrdiff_t type;\n            };         \n        };\n        \n        template<>\n        struct range_difference_type_<const_char_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef std::ptrdiff_t type;\n            };         \n        };\n        \n        template<>\n        struct range_difference_type_<wchar_t_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef std::ptrdiff_t type;\n            };         \n        };\n        \n        template<>\n        struct range_difference_type_<const_wchar_t_ptr_>\n        {\n            template< typename S >\n            struct pts\n            {\n                typedef std::ptrdiff_t type;\n            };         \n        };\n        \n    } \n    \n    template< typename C >\n    class range_difference\n    {\n        typedef BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type c_type;\n    public:\n        typedef BOOST_RANGE_DEDUCED_TYPENAME range_detail::range_difference_type_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type; \n    };\n\n}\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/empty.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_EMPTY_HPP\n#define BOOST_RANGE_DETAIL_EMPTY_HPP\n\n#include <boost/range/detail/common.hpp>\n\nnamespace boost \n{\n    namespace range_detail\n    {\n        template< typename T >\n        struct range_empty;\n\n        //////////////////////////////////////////////////////////////////////\n        // default\n        //////////////////////////////////////////////////////////////////////\n        \n        template<>\n        struct range_empty<std_container_>\n        {\n            template< typename C >\n            static bool fun( C& c )\n            {\n                return c.empty();\n            };\n        };\n                    \n        //////////////////////////////////////////////////////////////////////\n        // pair\n        //////////////////////////////////////////////////////////////////////\n        \n        template<>\n        struct range_empty<std_pair_>\n        {\n            template< typename P >\n            static bool fun( const P& p )\n            {\n                return p.first == p.second;\n            }\n        };\n \n        //////////////////////////////////////////////////////////////////////\n        // array\n        //////////////////////////////////////////////////////////////////////\n        \n        template<>\n        struct range_empty<array_>\n        {\n            template< typename T, std::size_t sz >\n            static bool fun( T BOOST_ARRAY_REF[sz] )\n            {\n                if( boost_range_array == 0 )\n                    return true;\n                return false;\n            }\n        };\n\n        //////////////////////////////////////////////////////////////////////\n        // string\n        //////////////////////////////////////////////////////////////////////\n        \n        template<>\n        struct range_empty<char_ptr_>\n        {\n            static bool fun( const char* s )\n            {\n                return s == 0 || s[0] == 0;\n            }\n        };\n\n        template<>\n        struct range_empty<const_char_ptr_>\n        {\n            static bool fun( const char* s )\n            {\n                return  s == 0 || s[0] == 0;\n            }\n        };\n\n        template<>\n        struct range_empty<wchar_t_ptr_>\n        {\n            static bool fun( const wchar_t* s )\n            {\n                return  s == 0 || s[0] == 0;\n            }\n        };\n        \n        template<>\n        struct range_empty<const_wchar_t_ptr_>\n        {\n            static bool fun( const wchar_t* s )\n            {\n                return  s == 0 || s[0] == 0;\n            }\n        };\n\n    } // namespace 'range_detail'\n    \n        \n    template< typename C >\n    inline bool \n    empty( const C& c )\n    {\n        return range_detail::range_empty<  BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );\n    }\n\n} // namespace 'boost'\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/end.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_END_HPP\n#define BOOST_RANGE_DETAIL_END_HPP\n\n#include <boost/config.hpp> // BOOST_MSVC\n#include <boost/detail/workaround.hpp>\n\n#include <boost/range/detail/implementation_help.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/detail/common.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< typename T >\n        struct range_end;\n\n        //////////////////////////////////////////////////////////////////////\n        // default\n        //////////////////////////////////////////////////////////////////////\n\n        template<>\n        struct range_end<std_container_>\n        {\n            template< typename C >\n            static BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type\n            fun( C& c )\n            {\n                return c.end();\n            };\n        };\n\n        //////////////////////////////////////////////////////////////////////\n        // pair\n        //////////////////////////////////////////////////////////////////////\n\n        template<>\n        struct range_end<std_pair_>\n        {\n            template< typename P >\n            static BOOST_RANGE_DEDUCED_TYPENAME range_iterator<P>::type\n            fun( const P& p )\n            {\n                return p.second;\n            }\n        };\n\n        //////////////////////////////////////////////////////////////////////\n        // array\n        //////////////////////////////////////////////////////////////////////\n\n        template<>\n        struct range_end<array_>\n        {\n            template<typename T>\n            static BOOST_RANGE_DEDUCED_TYPENAME remove_extent<T>::type* fun(T& t)\n            {\n                return t + remove_extent<T>::size;\n            }\n        };\n\n    } // namespace 'range_detail'\n\n    namespace range_adl_barrier\n    {\n        template< typename C >\n        inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type\n        end( C& c )\n        {\n            return range_detail::range_end< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );\n        }\n    } // namespace range_adl_barrier\n\n} // namespace 'boost'\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/extract_optional_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Arno Schoedl & Neil Groves 2009.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/config.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/mpl/has_xxx.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_HAS_XXX)\n\n// Defines extract_some_typedef<T> which exposes T::some_typedef as\n// extract_some_typedef<T>::type if T::some_typedef exists. Otherwise\n// extract_some_typedef<T> is empty.\n#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef )                          \\\n    BOOST_MPL_HAS_XXX_TRAIT_DEF(a_typedef)                                      \\\n    template< typename  C, bool B = BOOST_PP_CAT(has_, a_typedef)<C>::value >   \\\n    struct BOOST_PP_CAT(extract_, a_typedef)                                    \\\n    {};                                                                         \\\n    template< typename C >                                                      \\\n    struct BOOST_PP_CAT(extract_, a_typedef)< C, true >                         \\\n    {                                                                           \\\n        typedef BOOST_DEDUCED_TYPENAME C::a_typedef type;                       \\\n    };\n\n#else\n\n#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef )                          \\\n    template< typename C >                                                      \\\n    struct BOOST_PP_CAT(extract_, a_typedef)                                    \\\n    {                                                                           \\\n        typedef BOOST_DEDUCED_TYPENAME C::a_typedef type;                       \\\n    };\n\n#endif\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/has_member_size.hpp",
    "content": "// Boost.Range library\n//\n// Copyright Neil Groves 2014.\n//\n// Use, modification and distribution are subject to the Boost Software License,\n// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt).\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_HAS_MEMBER_SIZE_HPP\n#define BOOST_RANGE_DETAIL_HAS_MEMBER_SIZE_HPP\n\n#include <boost/type_traits/is_class.hpp>\n#include <boost/type_traits/is_member_function_pointer.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/cstdint.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<class T>\nclass has_member_size_impl\n{\nprivate:\n    template<class U, U>\n    class check\n    {\n    };\n\n    template<class C>\n    static boost::uint8_t f(check<std::size_t(C::*)(void) const, &C::size>*);\n\n    template<class C>\n    static boost::uint16_t f(...);\n\npublic:\n    static const bool value =\n        (sizeof(f<T>(0)) == sizeof(boost::uint8_t));\n\n    typedef typename mpl::if_c<\n        (sizeof(f<T>(0)) == sizeof(boost::uint8_t)),\n        mpl::true_,\n        mpl::false_\n    >::type type;\n};\n\ntemplate<class T>\nstruct has_member_size\n{\n    typedef typename mpl::and_<\n        typename is_class<T>::type,\n        typename has_member_size_impl<const T>::type\n    >::type type;\n\n    static const bool value =\n        is_class<T>::value && has_member_size_impl<const T>::value;\n};\n\n    } // namespace range_detail\n}// namespace boost\n \n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/implementation_help.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP\n#define BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP\n\n#include <boost/range/config.hpp>\n#include <boost/range/detail/common.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <cstddef>\n#include <string.h>\n\n#ifndef BOOST_NO_CWCHAR\n#include <wchar.h>\n#endif\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template <typename T>\n        inline void boost_range_silence_warning( const T& ) { }\n\n        /////////////////////////////////////////////////////////////////////\n        // end() help\n        /////////////////////////////////////////////////////////////////////\n\n        inline const char* str_end( const char* s, const char* )\n        {\n            return s + strlen( s );\n        }\n\n#ifndef BOOST_NO_CWCHAR\n        inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )\n        {\n            return s + wcslen( s );\n        }\n#else\n        inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )\n        {\n            if( s == 0 || s[0] == 0 )\n                return s;\n            while( *++s != 0 )\n                ;\n            return s;\n        }\n#endif\n\n        template< class Char >\n        inline Char* str_end( Char* s )\n        {\n            return const_cast<Char*>( str_end( s, s ) );\n        }\n\n        template< class T, std::size_t sz >\n        inline T* array_end( T BOOST_RANGE_ARRAY_REF()[sz] )\n        {\n            return boost_range_array + sz;\n        }\n\n        template< class T, std::size_t sz >\n        inline const T* array_end( const T BOOST_RANGE_ARRAY_REF()[sz] )\n        {\n            return boost_range_array + sz;\n        }\n\n        /////////////////////////////////////////////////////////////////////\n        // size() help\n        /////////////////////////////////////////////////////////////////////\n\n        template< class Char >\n        inline std::size_t str_size( const Char* const& s )\n        {\n            return str_end( s ) - s;\n        }\n\n        template< class T, std::size_t sz >\n        inline std::size_t array_size( T BOOST_RANGE_ARRAY_REF()[sz] )\n        {\n            boost_range_silence_warning( boost_range_array );\n            return sz;\n        }\n\n        template< class T, std::size_t sz >\n        inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz] )\n        {\n            boost_range_silence_warning( boost_range_array );\n            return sz;\n        }\n\n        inline bool is_same_address(const void* l, const void* r)\n        {\n            return l == r;\n        }\n\n        template<class T1, class T2>\n        inline bool is_same_object(const T1& l, const T2& r)\n        {\n            return range_detail::is_same_address(&l, &r);\n        }\n\n    } // namespace 'range_detail'\n\n} // namespace 'boost'\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/join_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// Acknowledgements:\n// aschoedl contributed an improvement to the determination\n// of the Reference type parameter.\n//\n// Leonid Gershanovich reported Trac ticket 7376 about the dereference operator\n// requiring identical reference types due to using the ternary if.\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_JOIN_ITERATOR_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_JOIN_ITERATOR_HPP_INCLUDED\n\n#include <iterator>\n#include <boost/assert.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/empty.hpp>\n#include <boost/range/detail/demote_iterator_traversal_tag.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/next_prior.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<typename Iterator1, typename Iterator2>\nstruct join_iterator_link\n{\npublic:\n    join_iterator_link(Iterator1 last1, Iterator2 first2)\n        :    last1(last1)\n        ,    first2(first2)\n    {\n    }\n\n    Iterator1 last1;\n    Iterator2 first2;\n\nprivate:\n    join_iterator_link() /* = delete */ ;\n};\n\nclass join_iterator_begin_tag {};\nclass join_iterator_end_tag {};\n\ntemplate<typename Iterator1\n       , typename Iterator2\n       , typename Reference\n>\nclass join_iterator_union\n{\npublic:\n    typedef Iterator1 iterator1_t;\n    typedef Iterator2 iterator2_t;\n\n    join_iterator_union() {}\n    join_iterator_union(unsigned int /*selected*/, const iterator1_t& it1, const iterator2_t& it2) : m_it1(it1), m_it2(it2) {}\n\n    iterator1_t& it1() { return m_it1; }\n    const iterator1_t& it1() const { return m_it1; }\n\n    iterator2_t& it2() { return m_it2; }\n    const iterator2_t& it2() const { return m_it2; }\n\n    Reference dereference(unsigned int selected) const\n    {\n        if (selected)\n            return *m_it2;\n        return *m_it1;\n    }\n\n    bool equal(const join_iterator_union& other, unsigned int selected) const\n    {\n        return selected\n            ? m_it2 == other.m_it2\n            : m_it1 == other.m_it1;\n    }\n\nprivate:\n    iterator1_t m_it1;\n    iterator2_t m_it2;\n};\n\ntemplate<class Iterator, class Reference>\nclass join_iterator_union<Iterator, Iterator, Reference>\n{\npublic:\n    typedef Iterator iterator1_t;\n    typedef Iterator iterator2_t;\n\n    join_iterator_union() {}\n\n    join_iterator_union(unsigned int selected, const iterator1_t& it1, const iterator2_t& it2)\n        : m_it(selected ? it2 : it1)\n    {\n    }\n\n    iterator1_t& it1() { return m_it; }\n    const iterator1_t& it1() const { return m_it; }\n\n    iterator2_t& it2() { return m_it; }\n    const iterator2_t& it2() const { return m_it; }\n\n    Reference dereference(unsigned int) const\n    {\n        return *m_it;\n    }\n\n    bool equal(const join_iterator_union& other,\n               unsigned int /*selected*/) const\n    {\n        return m_it == other.m_it;\n    }\n\nprivate:\n    iterator1_t m_it;\n};\n\ntemplate<typename Iterator1\n       , typename Iterator2\n       , typename ValueType = typename iterator_value<Iterator1>::type\n       // find least demanding, commonly supported reference type, in the order &, const&, and by-value:\n       , typename Reference = typename mpl::if_c<\n                !is_reference<typename iterator_reference<Iterator1>::type>::value\n             || !is_reference<typename iterator_reference<Iterator2>::type>::value,\n                        typename remove_const<\n                            typename remove_reference<\n                                typename iterator_reference<Iterator1>::type\n                            >::type\n                        >::type,\n                        typename mpl::if_c<\n                            is_const<\n                                typename remove_reference<\n                                    typename iterator_reference<Iterator1>::type\n                                >::type\n                            >::value\n                            || is_const<\n                                typename remove_reference<\n                                    typename iterator_reference<Iterator2>::type\n                                >::type\n                            >::value,\n                            typename add_const<\n                                typename iterator_reference<Iterator1>::type\n                            >::type,\n                            typename iterator_reference<Iterator1>::type\n                        >::type\n                    >::type\n       , typename Traversal = typename demote_iterator_traversal_tag<\n                                  typename iterator_traversal<Iterator1>::type\n                                , typename iterator_traversal<Iterator2>::type>::type\n>\nclass join_iterator\n    : public iterator_facade<join_iterator<Iterator1,Iterator2,ValueType,Reference,Traversal>, ValueType, Traversal, Reference>\n{\n    typedef join_iterator_link<Iterator1, Iterator2> link_t;\n    typedef join_iterator_union<Iterator1, Iterator2, Reference> iterator_union;\npublic:\n    typedef Iterator1 iterator1_t;\n    typedef Iterator2 iterator2_t;\n\n    join_iterator()\n        : m_section(0u)\n        , m_it(0u, iterator1_t(), iterator2_t())\n        , m_link(link_t(iterator1_t(), iterator2_t()))\n    {}\n\n    join_iterator(unsigned int section, Iterator1 current1, Iterator1 last1, Iterator2 first2, Iterator2 current2)\n        : m_section(section)\n        , m_it(section, current1, current2)\n        , m_link(link_t(last1, first2))\n        {\n        }\n\n    template<typename Range1, typename Range2>\n    join_iterator(Range1& r1, Range2& r2, join_iterator_begin_tag)\n        : m_section(boost::empty(r1) ? 1u : 0u)\n        , m_it(boost::empty(r1) ? 1u : 0u, boost::begin(r1), boost::begin(r2))\n        , m_link(link_t(boost::end(r1), boost::begin(r2)))\n    {\n    }\n\n    template<typename Range1, typename Range2>\n    join_iterator(const Range1& r1, const Range2& r2, join_iterator_begin_tag)\n        : m_section(boost::empty(r1) ? 1u : 0u)\n        , m_it(boost::empty(r1) ? 1u : 0u, boost::const_begin(r1), boost::const_begin(r2))\n        , m_link(link_t(boost::const_end(r1), boost::const_begin(r2)))\n    {\n    }\n\n    template<typename Range1, typename Range2>\n    join_iterator(Range1& r1, Range2& r2, join_iterator_end_tag)\n        : m_section(1u)\n        , m_it(1u, boost::end(r1), boost::end(r2))\n        , m_link(link_t(boost::end(r1), boost::begin(r2)))\n    {\n    }\n\n    template<typename Range1, typename Range2>\n    join_iterator(const Range1& r1, const Range2& r2, join_iterator_end_tag)\n        : m_section(1u)\n        , m_it(1u, boost::const_end(r1), boost::const_end(r2))\n        , m_link(link_t(boost::const_end(r1), boost::const_begin(r2)))\n    {\n    }\n\nprivate:\n    void increment()\n    {\n        if (m_section)\n            ++m_it.it2();\n        else\n        {\n            ++m_it.it1();\n            if (m_it.it1() == m_link.last1)\n            {\n                m_it.it2() = m_link.first2;\n                m_section = 1u;\n            }\n        }\n    }\n\n    void decrement()\n    {\n        if (m_section)\n        {\n            if (m_it.it2() == m_link.first2)\n            {\n                m_it.it1() = boost::prior(m_link.last1);\n                m_section = 0u;\n            }\n            else\n                --m_it.it2();\n        }\n        else\n            --m_it.it1();\n    }\n\n    typename join_iterator::reference dereference() const\n    {\n        return m_it.dereference(m_section);\n    }\n\n    bool equal(const join_iterator& other) const\n    {\n        return m_section == other.m_section\n            && m_it.equal(other.m_it, m_section);\n    }\n\n    void advance(typename join_iterator::difference_type offset)\n    {\n        if (m_section)\n            advance_from_range2(offset);\n        else\n            advance_from_range1(offset);\n    }\n\n    typename join_iterator::difference_type distance_to(const join_iterator& other) const\n    {\n        typename join_iterator::difference_type result;\n        if (m_section)\n        {\n            if (other.m_section)\n                result = other.m_it.it2() - m_it.it2();\n            else\n            {\n                result = (m_link.first2 - m_it.it2())\n                       + (other.m_it.it1() - m_link.last1);\n\n                BOOST_ASSERT( result <= 0 );\n            }\n        }\n        else\n        {\n            if (other.m_section)\n            {\n                result = (m_link.last1 - m_it.it1())\n                       + (other.m_it.it2() - m_link.first2);\n            }\n            else\n                result = other.m_it.it1() - m_it.it1();\n        }\n        return result;\n    }\n\n    void advance_from_range2(typename join_iterator::difference_type offset)\n    {\n        typedef typename join_iterator::difference_type difference_t;\n        BOOST_ASSERT( m_section == 1u );\n        if (offset < 0)\n        {\n            difference_t r2_dist = m_link.first2 - m_it.it2();\n            BOOST_ASSERT( r2_dist <= 0 );\n            if (offset >= r2_dist)\n                std::advance(m_it.it2(), offset);\n            else\n            {\n                difference_t r1_dist = offset - r2_dist;\n                BOOST_ASSERT( r1_dist <= 0 );\n                m_it.it1() = m_link.last1 + r1_dist;\n                m_section = 0u;\n            }\n        }\n        else\n            std::advance(m_it.it2(), offset);\n    }\n\n    void advance_from_range1(typename join_iterator::difference_type offset)\n    {\n        typedef typename join_iterator::difference_type difference_t;\n        BOOST_ASSERT( m_section == 0u );\n        if (offset > 0)\n        {\n            difference_t r1_dist = m_link.last1 - m_it.it1();\n            BOOST_ASSERT( r1_dist >= 0 );\n            if (offset < r1_dist)\n                std::advance(m_it.it1(), offset);\n            else\n            {\n                difference_t r2_dist = offset - r1_dist;\n                BOOST_ASSERT( r2_dist >= 0 );\n                m_it.it2() = m_link.first2 + r2_dist;\n                m_section = 1u;\n            }\n        }\n        else\n            std::advance(m_it.it1(), offset);\n    }\n\n    unsigned int m_section;\n    iterator_union m_it;\n    link_t m_link;\n\n    friend class ::boost::iterator_core_access;\n};\n\n    } // namespace range_detail\n\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/microsoft.hpp",
    "content": "#ifndef BOOST_RANGE_DETAIL_MICROSOFT_HPP\n#define BOOST_RANGE_DETAIL_MICROSOFT_HPP\n\n// Boost.Range MFC/ATL Extension\n//\n// Copyright Shunsuke Sogame 2005-2006.\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n\n\n\n// config\n//\n\n\n#include <boost/range/iterator.hpp>\n\n\n#define BOOST_RANGE_DETAIL_MICROSOFT_RANGE_VERSION_1 1\n\n\n#if !defined(BOOST_RANGE_DETAIL_MICROSOFT_RANGE_VERSION_1)\n    #define BOOST_RANGE_DETAIL_MICROSOFT_range_mutable_iterator range_mutable_iterator\n    #define BOOST_RANGE_DETAIL_MICROSOFT_range_begin            range_begin\n    #define BOOST_RANGE_DETAIL_MICROSOFT_range_end              range_end\n#else\n    #define BOOST_RANGE_DETAIL_MICROSOFT_range_mutable_iterator range_mutable_iterator\n    #define BOOST_RANGE_DETAIL_MICROSOFT_range_begin            range_begin\n    #define BOOST_RANGE_DETAIL_MICROSOFT_range_end              range_end\n#endif\n\n\n\n\n// yet another customization way\n//\n\n\n#include <boost/iterator/iterator_traits.hpp> // iterator_difference\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/control/iif.hpp>\n#include <boost/preprocessor/comma_if.hpp>\n#include <boost/preprocessor/detail/is_unary.hpp>\n#include <boost/preprocessor/list/for_each.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/repeat.hpp>\n#include <boost/preprocessor/seq/for_each_i.hpp>\n#include <boost/preprocessor/seq/size.hpp>\n#include <boost/preprocessor/tuple/eat.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/size_type.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/utility/addressof.hpp>\n#include <boost/utility/enable_if.hpp> // disable_if\n\n#if !defined(BOOST_RANGE_DETAIL_MICROSOFT_RANGE_VERSION_1)\n    #include <boost/range/mutable_iterator.hpp>\n#else\n    #include <iterator> // distance\n    #include <boost/range/begin.hpp>\n    #include <boost/range/end.hpp>\n    #include <boost/range/iterator.hpp>\n#endif\n\n\nnamespace boost { namespace range_detail_microsoft {\n\n\n    // customization point\n    //\n\n    template< class Tag >\n    struct customization;\n\n\n    template< class T >\n    struct customization_tag;\n\n\n    struct using_type_as_tag\n    { };\n\n\n    // Topic:\n    // In fact, it is unnecessary for VC++.\n    // VC++'s behavior seems conforming, while GCC fails without this.\n    template< class Iterator, class T >\n    struct mutable_ :\n        disable_if< is_const<T>, Iterator >\n    { };\n\n\n    // helpers\n    //\n\n    template< class Tag, class T >\n    struct customization_tag_of\n    {\n        typedef typename mpl::if_< is_same<using_type_as_tag, Tag>,\n            T,\n            Tag\n        >::type type;\n    };\n\n\n    template< class T >\n    struct customization_of\n    {\n        typedef typename remove_cv<T>::type bare_t;\n        typedef typename customization_tag<bare_t>::type tag_t;\n        typedef customization<tag_t> type;\n    };\n\n\n    template< class T >\n    struct mutable_iterator_of\n    {\n        typedef typename remove_cv<T>::type bare_t;\n        typedef typename customization_of<bare_t>::type cust_t;\n        typedef typename cust_t::template meta<bare_t>::mutable_iterator type;\n    };\n\n\n    template< class T >\n    struct const_iterator_of\n    {\n        typedef typename remove_cv<T>::type bare_t;\n        typedef typename customization_of<bare_t>::type cust_t;\n        typedef typename cust_t::template meta<bare_t>::const_iterator type;\n    };\n\n\n    template< class T >\n    struct size_type_of\n    {\n        typedef typename range_detail_microsoft::mutable_iterator_of<T>::type miter_t;\n        typedef typename iterator_difference<miter_t>::type type;\n    };\n\n\n    template< class T > inline\n    typename mutable_iterator_of<T>::type\n    begin_of(T& x)\n    {\n        typedef typename customization_of<T>::type cust_t;\n        return cust_t().template begin<typename mutable_iterator_of<T>::type>(x);\n    }\n\n\n    template< class T > inline\n    typename const_iterator_of<T>::type\n    begin_of(T const& x)\n    {\n        typedef typename customization_of<T>::type cust_t;\n        return cust_t().template begin<typename const_iterator_of<T>::type>(x);\n    }\n\n\n    template< class T > inline\n    typename mutable_iterator_of<T>::type\n    end_of(T& x)\n    {\n        typedef typename customization_of<T>::type cust_t;\n        return cust_t().template end<typename mutable_iterator_of<T>::type>(x);\n    }\n\n\n    template< class T > inline\n    typename const_iterator_of<T>::type\n    end_of(T const& x)\n    {\n        typedef typename customization_of<T>::type cust_t;\n        return cust_t().template end<typename const_iterator_of<T>::type>(x);\n    }\n\n\n#if defined(BOOST_RANGE_DETAIL_MICROSOFT_RANGE_VERSION_1)\n\n    template< class T > inline\n    typename size_type_of<T>::type\n    size_of(T const& x)\n    {\n        return std::distance(boost::begin(x), boost::end(x));\n    }\n\n#endif\n\n\n    template< class Range >\n    struct compatible_mutable_iterator : \n        BOOST_RANGE_DETAIL_MICROSOFT_range_mutable_iterator<Range>\n    { };\n\n\n} } // namespace boost::range_detail_microsoft\n\n\n#define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_open(NamespaceList) \\\n    BOOST_PP_LIST_FOR_EACH(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_open_op, ~, NamespaceList) \\\n/**/\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_open_op(r, data, elem) \\\n        namespace elem { \\\n    /**/\n\n\n#define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_close(NamespaceList) \\\n    BOOST_PP_LIST_FOR_EACH(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_close_op, ~, NamespaceList) \\\n/**/\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_close_op(r, data, elem) \\\n        } \\\n    /**/\n\n\n#define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_expand_op(r, data, elem) \\\n    :: elem \\\n/**/\n\n\n#define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(Tag, NamespaceList, Name) \\\n    namespace boost { namespace range_detail_microsoft { \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_tag(Tag, BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name)) \\\n    } } \\\n    \\\n    namespace boost { \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_mutable_iterator(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name)) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_const_iterator(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name)) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_size_type(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name)) \\\n    } \\\n    \\\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_open(NamespaceList) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_begin(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name)) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_begin_const(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name)) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_end(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name)) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_end_const(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name)) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_size(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name)) \\\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_close(NamespaceList) \\\n/**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_fullname(NamespaceList, Name) \\\n        BOOST_PP_LIST_FOR_EACH(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_expand_op, ~, NamespaceList) :: Name \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_tag(Tag, Fullname) \\\n        template< > \\\n        struct customization_tag< Fullname > : \\\n            customization_tag_of< Tag, Fullname > \\\n        { }; \\\n    /**/\n\n\n    // metafunctions\n    //\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_mutable_iterator(Fullname) \\\n        template< > \\\n        struct BOOST_RANGE_DETAIL_MICROSOFT_range_mutable_iterator< Fullname > : \\\n            range_detail_microsoft::mutable_iterator_of< Fullname > \\\n        { }; \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_const_iterator(Fullname) \\\n        template< > \\\n        struct range_const_iterator< Fullname > : \\\n            range_detail_microsoft::const_iterator_of< Fullname > \\\n        { }; \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_size_type(Fullname) \\\n        template< > \\\n        struct range_size< Fullname > : \\\n            range_detail_microsoft::size_type_of< Fullname > \\\n        { }; \\\n    /**/\n\n\n    // functions\n    //\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_begin(Fullname) \\\n        inline \\\n        boost::range_detail_microsoft::mutable_iterator_of< Fullname >::type \\\n        BOOST_RANGE_DETAIL_MICROSOFT_range_begin(Fullname& x) \\\n        { \\\n            return boost::range_detail_microsoft::begin_of(x); \\\n        } \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_begin_const(Fullname) \\\n        inline \\\n        boost::range_detail_microsoft::const_iterator_of< Fullname >::type \\\n        BOOST_RANGE_DETAIL_MICROSOFT_range_begin(Fullname const& x) \\\n        { \\\n            return boost::range_detail_microsoft::begin_of(x); \\\n        } \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_end(Fullname) \\\n        inline \\\n        boost::range_detail_microsoft::mutable_iterator_of< Fullname >::type \\\n        BOOST_RANGE_DETAIL_MICROSOFT_range_end(Fullname& x) \\\n        { \\\n            return boost::range_detail_microsoft::end_of(x); \\\n        } \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_end_const(Fullname) \\\n        inline \\\n        boost::range_detail_microsoft::const_iterator_of< Fullname >::type \\\n        BOOST_RANGE_DETAIL_MICROSOFT_range_end(Fullname const& x) \\\n        { \\\n            return boost::range_detail_microsoft::end_of(x); \\\n        } \\\n    /**/\n\n\n    #if !defined(BOOST_RANGE_DETAIL_MICROSOFT_RANGE_VERSION_1)\n\n        #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_size(Fullname) \\\n        /**/\n\n    #else\n\n        #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE_size(Fullname) \\\n            inline \\\n            boost::range_detail_microsoft::size_type_of< Fullname >::type \\\n            boost_range_size(Fullname const& x) \\\n            { \\\n                return boost::range_detail_microsoft::size_of(x); \\\n            } \\\n        /**/\n\n    #endif\n\n\n#define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(Tag, NamespaceList, Name, ParamSeqOrCount) \\\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_impl( \\\n        Tag, NamespaceList, Name, \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_to_param_seq(ParamSeqOrCount) \\\n    ) \\\n/**/\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_to_param_seq(ParamSeqOrCount) \\\n        BOOST_PP_IIF(BOOST_PP_IS_UNARY(ParamSeqOrCount), \\\n            ParamSeqOrCount BOOST_PP_TUPLE_EAT(3), \\\n            BOOST_PP_REPEAT \\\n        )(ParamSeqOrCount, BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_to_param_seq_op, ~) \\\n    /**/\n\n        #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_to_param_seq_op(z, n, _) \\\n            (class) \\\n        /**/\n\n\n#define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_impl(Tag, NamespaceList, Name, ParamSeq) \\\n    namespace boost { namespace range_detail_microsoft { \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_tag( \\\n            Tag, \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq), \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        ) \\\n    } } \\\n    \\\n    namespace boost { \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_mutable_iterator( \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq), \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        ) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_const_iterator( \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq), \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        ) \\\n        \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_size_type( \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq), \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        ) \\\n    } \\\n    \\\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_open(NamespaceList) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_begin( \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq), \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        ) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_begin_const( \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq), \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        ) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_end( \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq), \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        ) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_end_const( \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq), \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        ) \\\n        BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_size( \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq), \\\n            BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        ) \\\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_close(NamespaceList) \\\n/**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params(ParamSeq) \\\n        BOOST_PP_SEQ_FOR_EACH_I(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params_op, ~, ParamSeq) \\\n    /**/\n\n        #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_params_op(r, data, i, elem) \\\n            BOOST_PP_COMMA_IF(i) elem BOOST_PP_CAT(T, i) \\\n        /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_fullname(NamespaceList, Name, ParamSeq) \\\n        BOOST_PP_LIST_FOR_EACH(BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_namespace_expand_op, ~, NamespaceList) \\\n        :: Name < BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(ParamSeq), T) > \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_tag(Tag, Params, Fullname) \\\n        template< Params > \\\n        struct customization_tag< Fullname > : \\\n            customization_tag_of< Tag, Fullname > \\\n        { }; \\\n    /**/\n\n\n    // metafunctions\n    //\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_mutable_iterator(Params, Fullname) \\\n        template< Params > \\\n        struct BOOST_RANGE_DETAIL_MICROSOFT_range_mutable_iterator< Fullname > : \\\n            range_detail_microsoft::mutable_iterator_of< Fullname > \\\n        { }; \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_const_iterator(Params, Fullname) \\\n        template< Params > \\\n        struct range_const_iterator< Fullname > : \\\n            range_detail_microsoft::const_iterator_of< Fullname > \\\n        { }; \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_size_type(Params, Fullname) \\\n        template< Params > \\\n        struct range_size< Fullname > : \\\n            range_detail_microsoft::size_type_of< Fullname > \\\n        { }; \\\n    /**/\n\n\n    // functions\n    //\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_begin(Params, Fullname) \\\n        template< Params > inline \\\n        typename boost::range_detail_microsoft::mutable_iterator_of< Fullname >::type \\\n        BOOST_RANGE_DETAIL_MICROSOFT_range_begin(Fullname& x) \\\n        { \\\n            return boost::range_detail_microsoft::begin_of(x); \\\n        } \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_begin_const(Params, Fullname) \\\n        template< Params > inline \\\n        typename boost::range_detail_microsoft::const_iterator_of< Fullname >::type \\\n        BOOST_RANGE_DETAIL_MICROSOFT_range_begin(Fullname const& x) \\\n        { \\\n            return boost::range_detail_microsoft::begin_of(x); \\\n        } \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_end(Params, Fullname) \\\n        template< Params > inline \\\n        typename boost::range_detail_microsoft::mutable_iterator_of< Fullname >::type \\\n        BOOST_RANGE_DETAIL_MICROSOFT_range_end(Fullname& x) \\\n        { \\\n            return boost::range_detail_microsoft::end_of(x); \\\n        } \\\n    /**/\n\n\n    #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_end_const(Params, Fullname) \\\n        template< Params > inline \\\n        typename boost::range_detail_microsoft::const_iterator_of< Fullname >::type \\\n        BOOST_RANGE_DETAIL_MICROSOFT_range_end(Fullname const& x) \\\n        { \\\n            return boost::range_detail_microsoft::end_of(x); \\\n        } \\\n    /**/\n\n\n    #if !defined(BOOST_RANGE_DETAIL_MICROSOFT_RANGE_VERSION_1)\n\n        #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_size(Params, Fullname) \\\n        /**/\n\n    #else\n\n        #define BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE_size(Params, Fullname) \\\n            template< Params > inline \\\n            typename boost::range_detail_microsoft::size_type_of< Fullname >::type \\\n            boost_range_size(Fullname const& x) \\\n            { \\\n                return boost::range_detail_microsoft::size_of(x); \\\n            } \\\n        /**/\n\n    #endif\n\n\n\n\n// list_iterator and helpers\n//\n\n\n#include <boost/assert.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/type_traits/is_same.hpp>\n\n\n// POSITION's header is undocumented, so is NULL.\n//\nstruct __POSITION; // incomplete, but used as just a pointer.\ntypedef __POSITION *POSITION;\n\n\nnamespace boost { namespace range_detail_microsoft {\n\n\n    template<\n        class ListT,\n        class Value,\n        class Reference,\n        class Traversal\n    >\n    struct list_iterator;\n\n\n    template<\n        class ListT,\n        class Value,\n        class Reference,\n        class Traversal\n    >\n    struct list_iterator_super\n    {\n        typedef typename mpl::if_< is_same<use_default, Reference>,\n            Value&,\n            Reference\n        >::type ref_t;\n\n        typedef typename mpl::if_< is_same<use_default, Traversal>,\n            bidirectional_traversal_tag,\n            Traversal\n        >::type trv_t;\n\n        typedef iterator_facade<\n            list_iterator<ListT, Value, Reference, Traversal>,\n            Value,\n            trv_t,\n            ref_t\n        > type;\n    };\n\n\n    template<\n        class ListT,\n        class Value,\n        class Reference = use_default,\n        class Traversal = use_default\n    >\n    struct list_iterator :\n        list_iterator_super<ListT, Value, Reference, Traversal>::type\n    {\n    private:\n        typedef list_iterator self_t;\n        typedef typename list_iterator_super<ListT, Value, Reference, Traversal>::type super_t;\n        typedef typename super_t::reference ref_t;\n\n    public:\n        explicit list_iterator()\n        { }\n\n        explicit list_iterator(ListT& lst, POSITION pos) :\n            m_plst(boost::addressof(lst)), m_pos(pos)\n        { }\n\n    template< class, class, class, class > friend struct list_iterator;\n        template< class ListT_, class Value_, class Reference_, class Traversal_>\n        list_iterator(list_iterator<ListT_, Value_, Reference_, Traversal_> const& other) :\n            m_plst(other.m_plst), m_pos(other.m_pos)\n        { }\n\n    private:\n        ListT *m_plst;\n        POSITION m_pos;\n\n    friend class iterator_core_access;\n        ref_t dereference() const\n        {\n            BOOST_ASSERT(m_pos != 0 && \"out of range\");\n            return m_plst->GetAt(m_pos);\n        }\n\n        // A    B    C    D    x\n        // Head           Tail NULL(0)\n        //\n        void increment()\n        {\n            BOOST_ASSERT(m_pos != 0 && \"out of range\");\n            m_plst->GetNext(m_pos);\n        }\n\n        void decrement()\n        {\n            if (m_pos == 0) {\n                m_pos = m_plst->GetTailPosition();\n                return;\n            }\n\n            m_plst->GetPrev(m_pos);\n        }\n\n        bool equal(self_t const& other) const\n        {\n            BOOST_ASSERT(m_plst == other.m_plst && \"iterators incompatible\");\n            return m_pos == other.m_pos;\n        }\n    };\n\n\n    // customization helpers\n    //\n\n    struct array_functions\n    {\n        template< class Iterator, class X >\n        Iterator begin(X& x)\n        {\n            return x.GetData();\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return begin<Iterator>(x) + x.GetSize();\n        }\n    };\n\n\n    struct list_functions\n    {\n        template< class Iterator, class X >\n        Iterator begin(X& x)\n        {\n            return Iterator(x, x.GetHeadPosition());\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return Iterator(x, POSITION(0));\n        }\n    };\n\n\n} } // namespace boost::range_detail_microsoft\n\n\n\n\n// test\n//\n\n\n#if defined(BOOST_RANGE_DETAIL_MICROSOFT_TEST)\n\n\n#include <algorithm>\n#include <iterator>\n#include <vector>\n#include <boost/concept_check.hpp>\n#include <boost/next_prior.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/distance.hpp>\n#include <boost/range/empty.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/mutable_iterator.hpp>\n#include <boost/range/rbegin.hpp>\n#include <boost/range/rend.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/type_traits/is_same.hpp>\n\n\nnamespace boost { namespace range_detail_microsoft {\n\n\n    template< class Range1, class Range2 >\n    bool test_equals(Range1 const& rng1, Range2 const& rng2)\n    {\n        return\n            boost::distance(rng1) == boost::distance(rng2) &&\n            std::equal(boost::begin(rng1), boost::end(rng1), boost::begin(rng2))\n        ;\n    }\n\n\n    template< class AssocContainer, class PairT >\n    bool test_find_key_and_mapped(AssocContainer const& ac, PairT const& pa)\n    {\n        typedef typename boost::range_const_iterator<AssocContainer>::type iter_t;\n        for (iter_t it = boost::const_begin(ac), last = boost::const_end(ac); it != last; ++it) {\n            if (it->first == pa.first && it->second == pa.second)\n                return true;\n        }\n\n        return false;\n    }\n\n\n    // test functions\n    //\n\n    template< class Range >\n    bool test_emptiness(Range& )\n    {\n        bool result = true;\n\n        Range emptyRng;\n        result = result && boost::empty(emptyRng);\n\n        return result;\n    }\n\n\n    template< class Range >\n    bool test_trivial(Range& rng)\n    {\n        bool result = true;\n\n        // convertibility check\n        typedef typename range_const_iterator<Range>::type citer_t;\n        citer_t cit = boost::begin(rng);\n        (void)cit; // unused\n\n        // mutability check\n        typedef typename range_value<Range>::type val_t;\n        val_t v = *boost::begin(rng);\n        *boost::begin(rng) = v;\n        result = result && *boost::begin(rng) == v;\n\n        return result;\n    }\n\n\n    template< class Range >\n    bool test_forward(Range& rng)\n    {\n        boost::function_requires< ForwardRangeConcept<Range> >();\n\n        bool result = (test_trivial)(rng);\n\n        typedef typename range_value<Range>::type val_t;\n\n        std::vector<val_t> saved;\n        std::copy(boost::begin(rng), boost::end(rng), std::back_inserter(saved));\n        std::rotate(boost::begin(saved), boost::next(boost::begin(saved)), boost::end(saved));\n\n        std::rotate(boost::begin(rng), boost::next(boost::begin(rng)), boost::end(rng));\n\n        return result && (test_equals)(saved, rng);\n    };\n\n\n    template< class Range >\n    bool test_bidirectional(Range& rng)\n    {\n        boost::function_requires< BidirectionalRangeConcept<Range> >();\n\n        bool result = (test_forward)(rng);\n\n        typedef typename range_value<Range>::type val_t;\n\n        std::vector<val_t> saved;\n        std::copy(boost::begin(rng), boost::end(rng), std::back_inserter(saved));\n\n        result = result && (test_equals)(\n            boost::make_iterator_range(boost::rbegin(saved), boost::rend(saved)),\n            boost::make_iterator_range(boost::rbegin(rng), boost::rend(rng))\n        );\n\n        return result;\n    }\n\n\n    template< class Range >\n    bool test_random_access(Range& rng)\n    {\n        boost::function_requires< RandomAccessRangeConcept<Range> >();\n\n        bool result = (test_bidirectional)(rng);\n\n        typedef typename range_value<Range>::type val_t;\n\n        std::vector<val_t> saved;\n        std::copy(boost::begin(rng), boost::end(rng), std::back_inserter(saved));\n        std::sort(boost::begin(saved), boost::end(saved));\n\n        std::random_shuffle(boost::begin(rng), boost::end(rng));\n        std::sort(boost::begin(rng), boost::end(rng));\n        result = result && (test_equals)(rng, saved);\n\n        std::random_shuffle(boost::begin(rng), boost::end(rng));\n        std::stable_sort(boost::begin(rng), boost::end(rng));\n        result = result && (test_equals)(rng, saved);\n\n        std::random_shuffle(boost::begin(rng), boost::end(rng));\n        std::partial_sort(boost::begin(rng), boost::end(rng), boost::end(rng));\n        result = result && (test_equals)(rng, saved);\n\n        return result;\n    }\n\n\n    // initializer\n    //\n\n    template< class ArrayT, class SampleRange >\n    bool test_init_array(ArrayT& arr, SampleRange const& sample)\n    {\n        typedef typename range_const_iterator<SampleRange>::type iter_t;\n        typedef typename range_value<SampleRange>::type val_t;\n\n        for (iter_t it = boost::const_begin(sample), last = boost::const_end(sample); it != last; ++it) {\n            val_t v = *it; // works around ATL3 CSimpleArray\n            arr.Add(v);\n        }\n\n        return (test_equals)(arr, sample);\n    }\n\n\n    template< class ListT, class SampleRange >\n    bool test_init_list(ListT& lst, SampleRange const& sample)\n    {\n        typedef typename range_const_iterator<SampleRange>::type iter_t;\n\n        for (iter_t it = boost::const_begin(sample), last = boost::const_end(sample); it != last; ++it) {\n            lst.AddTail(*it);\n        }\n\n        return (test_equals)(lst, sample);\n    }\n\n\n    template< class StringT, class SampleRange >\n    bool test_init_string(StringT& str, SampleRange const& sample)\n    {\n        typedef typename range_const_iterator<SampleRange>::type iter_t;\n        typedef typename range_value<SampleRange>::type val_t;\n\n        for (iter_t it = boost::const_begin(sample), last = boost::const_end(sample); it != last; ++it) {\n            str += *it;\n        }\n\n        return (test_equals)(str, sample);\n    }\n\n\n    template< class MapT, class SampleMap >\n    bool test_init_map(MapT& map, SampleMap const& sample)\n    {\n        typedef typename range_const_iterator<SampleMap>::type iter_t;\n\n        for (iter_t it = boost::const_begin(sample), last = boost::const_end(sample); it != last; ++it) {\n            map.SetAt(it->first, it->second);\n        }\n\n        return boost::distance(map) == boost::distance(sample);\n    }\n\n\n    // metafunction test\n    //\n\n    template< class Range, class Iter >\n    struct test_mutable_iter :\n        boost::is_same< typename boost::BOOST_RANGE_DETAIL_MICROSOFT_range_mutable_iterator<Range>::type, Iter >\n    { };\n\n\n    template< class Range, class Iter >\n    struct test_const_iter :\n        boost::is_same< typename boost::range_const_iterator<Range>::type, Iter >\n    { };\n\n\n} } // namespace boost::range_detail_microsoft\n\n\n#endif // defined(BOOST_RANGE_DETAIL_MICROSOFT_TEST)\n\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/misc_concept.hpp",
    "content": "// Boost.Range library concept checks\n//\n//  Copyright Neil Groves 2009. Use, modification and distribution\n//  are subject to the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n#ifndef BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template<typename T1, typename T2>\n        class SameTypeConcept\n        {\n        public:\n            BOOST_CONCEPT_USAGE(SameTypeConcept)\n            {\n                same_type(a,b);\n            }\n        private:\n            template<typename T> void same_type(T,T) {}\n            T1 a;\n            T2 b;\n        };\n    }\n}\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/msvc_has_iterator_workaround.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Eric Niebler 2014. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP\n#define BOOST_RANGE_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP\n# error This file should only be included from <boost/range/mutable_iterator.hpp>\n#endif\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600)\nnamespace boost\n{\nnamespace cb_details\n{\n    template <class Buff, class Traits>\n    struct iterator;\n}\n\nnamespace python\n{\n    template <class Container\n              , class NextPolicies /*= objects::default_iterator_call_policies*/>\n    struct iterator;\n}\n\nnamespace type_erasure\n{\n    template<\n        class Traversal,\n        class T                 /*= _self*/,\n        class Reference         /*= ::boost::use_default*/,\n        class DifferenceType    /*= ::std::ptrdiff_t*/,\n        class ValueType         /*= typename deduced<iterator_value_type<T> >::type*/\n    >\n    struct iterator;\n}\n\nnamespace unordered { namespace iterator_detail\n{\n    template <typename Node>\n    struct iterator;\n}}\n\nnamespace container { namespace container_detail\n{\n    template<class IIterator, bool IsConst>\n    class iterator;\n}}\n\nnamespace spirit { namespace lex { namespace lexertl\n{\n    template <typename Functor>\n    class iterator;\n}}}\n\nnamespace range_detail\n{\n    template <class Buff, class Traits>\n    struct has_iterator< ::boost::cb_details::iterator<Buff, Traits> >\n      : mpl::false_\n    {};\n\n    template <class Buff, class Traits>\n    struct has_iterator< ::boost::cb_details::iterator<Buff, Traits> const>\n      : mpl::false_\n    {};\n\n    template <class Container, class NextPolicies>\n    struct has_iterator< ::boost::python::iterator<Container, NextPolicies> >\n      : mpl::false_\n    {};\n\n    template <class Container, class NextPolicies>\n    struct has_iterator< ::boost::python::iterator<Container, NextPolicies> const>\n      : mpl::false_\n    {};\n\n    template<class Traversal, class T, class Reference, class DifferenceType, class ValueType>\n    struct has_iterator< ::boost::type_erasure::iterator<Traversal, T, Reference, DifferenceType, ValueType> >\n      : mpl::false_\n    {};\n\n    template<class Traversal, class T, class Reference, class DifferenceType, class ValueType>\n    struct has_iterator< ::boost::type_erasure::iterator<Traversal, T, Reference, DifferenceType, ValueType> const>\n      : mpl::false_\n    {};\n\n    template <typename Node>\n    struct has_iterator< ::boost::unordered::iterator_detail::iterator<Node> >\n      : mpl::false_\n    {};\n\n    template <typename Node>\n    struct has_iterator< ::boost::unordered::iterator_detail::iterator<Node> const>\n      : mpl::false_\n    {};\n\n    template<class IIterator, bool IsConst>\n    struct has_iterator< ::boost::container::container_detail::iterator<IIterator, IsConst> >\n      : mpl::false_\n    {};\n\n    template<class IIterator, bool IsConst>\n    struct has_iterator< ::boost::container::container_detail::iterator<IIterator, IsConst> const>\n      : mpl::false_\n    {};\n\n    template <typename Functor>\n    struct has_iterator< ::boost::spirit::lex::lexertl::iterator<Functor> >\n      : mpl::false_\n    {};\n\n    template <typename Functor>\n    struct has_iterator< ::boost::spirit::lex::lexertl::iterator<Functor> const>\n      : mpl::false_\n    {};\n}\n}\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/range_return.hpp",
    "content": "//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_RANGE_RETURN_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_RANGE_RETURN_HPP_INCLUDED\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator_range.hpp>\n\nnamespace boost\n{\n    enum range_return_value\n    {\n        // (*) indicates the most common values\n        return_found,       // only the found resulting iterator (*)\n        return_next,        // next(found) iterator\n        return_prior,       // prior(found) iterator\n        return_begin_found, // [begin, found) range (*)\n        return_begin_next,  // [begin, next(found)) range\n        return_begin_prior, // [begin, prior(found)) range\n        return_found_end,   // [found, end) range (*)\n        return_next_end,    // [next(found), end) range\n        return_prior_end,   // [prior(found), end) range\n        return_begin_end    // [begin, end) range\n    };\n\n    template< class SinglePassRange, range_return_value >\n    struct range_return\n    {\n        typedef boost::iterator_range<\n            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;\n\n        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,\n                         SinglePassRange& rng)\n        {\n            return type(found, boost::end(rng));\n        }\n    };\n\n    template< class SinglePassRange >\n    struct range_return< SinglePassRange, return_found >\n    {\n        typedef BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type type;\n\n        static type pack(type found, SinglePassRange&)\n        {\n            return found;\n        }\n    };\n\n    template< class SinglePassRange >\n    struct range_return< SinglePassRange, return_next >\n    {\n        typedef BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type type;\n\n        static type pack(type found, SinglePassRange& rng)\n        {\n            return found == boost::end(rng)\n                ? found\n                : boost::next(found);\n        }\n    };\n\n    template< class BidirectionalRange >\n    struct range_return< BidirectionalRange, return_prior >\n    {\n        typedef BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type type;\n\n        static type pack(type found, BidirectionalRange& rng)\n        {\n            return found == boost::begin(rng)\n                ? found\n                : boost::prior(found);\n        }\n    };\n\n    template< class SinglePassRange >\n    struct range_return< SinglePassRange, return_begin_found >\n    {\n        typedef boost::iterator_range<\n            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;\n\n        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,\n                         SinglePassRange& rng)\n        {\n            return type(boost::begin(rng), found);\n        }\n    };\n\n    template< class SinglePassRange >\n    struct range_return< SinglePassRange, return_begin_next >\n    {\n        typedef boost::iterator_range<\n            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;\n\n        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,\n                         SinglePassRange& rng)\n        {\n            return type( boost::begin(rng), \n                         found == boost::end(rng) ? found : boost::next(found) );\n        }\n    };\n\n    template< class BidirectionalRange >\n    struct range_return< BidirectionalRange, return_begin_prior >\n    {\n        typedef boost::iterator_range<\n            BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type > type;\n\n        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type found,\n                         BidirectionalRange& rng)\n        {\n            return type( boost::begin(rng),\n                         found == boost::begin(rng) ? found : boost::prior(found) );\n        }\n    };\n\n    template< class SinglePassRange >\n    struct range_return< SinglePassRange, return_found_end >\n    {\n        typedef boost::iterator_range<\n            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;\n\n        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,\n                         SinglePassRange& rng)\n        {\n            return type(found, boost::end(rng));\n        }\n    };\n\n    template< class SinglePassRange >\n    struct range_return< SinglePassRange, return_next_end >\n    {\n        typedef boost::iterator_range<\n            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;\n\n        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,\n                         SinglePassRange& rng)\n        {\n            return type( found == boost::end(rng) ? found : boost::next(found),\n                         boost::end(rng) );\n        }\n    };\n\n    template< class BidirectionalRange >\n    struct range_return< BidirectionalRange, return_prior_end >\n    {\n        typedef boost::iterator_range<\n            BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type > type;\n\n        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type found,\n                         BidirectionalRange& rng)\n        {\n            return type( found == boost::begin(rng) ? found : boost::prior(found),\n                         boost::end(rng) );\n        }\n    };\n\n    template< class SinglePassRange >\n    struct range_return< SinglePassRange, return_begin_end >\n    {\n        typedef boost::iterator_range<\n            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;\n\n        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type,\n                         SinglePassRange& rng)\n        {\n            return type(boost::begin(rng), boost::end(rng));\n        }\n    };\n\n}\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/remove_extent.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Jonathan Turkanis 2005. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n\n#ifndef BOOST_RANGE_DETAIL_REMOVE_BOUNDS_HPP\n#define BOOST_RANGE_DETAIL_REMOVE_BOUNDS_HPP\n\n#include <boost/config.hpp>  // MSVC, NO_INTRINSIC_WCHAR_T, put size_t in std.\n#include <cstddef>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost \n{\n    namespace range_detail\n    {\n        \n        template< typename Case1 = mpl::true_,\n                  typename Type1 = mpl::void_,\n                  typename Case2 = mpl::true_,\n                  typename Type2 = mpl::void_,\n                  typename Case3 = mpl::true_,\n                  typename Type3 = mpl::void_,\n                  typename Case4 = mpl::true_,\n                  typename Type4 = mpl::void_,\n                  typename Case5 = mpl::true_,\n                  typename Type5 = mpl::void_,\n                  typename Case6 = mpl::true_,\n                  typename Type6 = mpl::void_,\n                  typename Case7 = mpl::true_,\n                  typename Type7 = mpl::void_,\n                  typename Case8 = mpl::true_,\n                  typename Type8 = mpl::void_,\n                  typename Case9 = mpl::true_,\n                  typename Type9 = mpl::void_,\n                  typename Case10 = mpl::true_,\n                  typename Type10 = mpl::void_,\n                  typename Case11 = mpl::true_,\n                  typename Type11 = mpl::void_,\n                  typename Case12 = mpl::true_,\n                  typename Type12 = mpl::void_,\n                  typename Case13 = mpl::true_,\n                  typename Type13 = mpl::void_,\n                  typename Case14 = mpl::true_,\n                  typename Type14 = mpl::void_,\n                  typename Case15 = mpl::true_,\n                  typename Type15 = mpl::void_,\n                  typename Case16 = mpl::true_,\n                  typename Type16 = mpl::void_,\n                  typename Case17 = mpl::true_,\n                  typename Type17 = mpl::void_,\n                  typename Case18 = mpl::true_,\n                  typename Type18 = mpl::void_,\n                  typename Case19 = mpl::true_,\n                  typename Type19 = mpl::void_,\n                  typename Case20 = mpl::true_,\n                  typename Type20 = mpl::void_>\n        struct select {\n            typedef typename\n                    mpl::eval_if<\n                        Case1, mpl::identity<Type1>, mpl::eval_if<\n                        Case2, mpl::identity<Type2>, mpl::eval_if<\n                        Case3, mpl::identity<Type3>, mpl::eval_if<\n                        Case4, mpl::identity<Type4>, mpl::eval_if<\n                        Case5, mpl::identity<Type5>, mpl::eval_if<\n                        Case6, mpl::identity<Type6>, mpl::eval_if<\n                        Case7, mpl::identity<Type7>, mpl::eval_if<\n                        Case8, mpl::identity<Type8>, mpl::eval_if<\n                        Case9, mpl::identity<Type9>, mpl::if_<\n                        Case10, Type10, mpl::void_ > > > > > > > > >\n                    >::type result1;\n            typedef typename\n                    mpl::eval_if<\n                        Case11, mpl::identity<Type11>, mpl::eval_if<\n                        Case12, mpl::identity<Type12>, mpl::eval_if<\n                        Case13, mpl::identity<Type13>, mpl::eval_if<\n                        Case14, mpl::identity<Type14>, mpl::eval_if<\n                        Case15, mpl::identity<Type15>, mpl::eval_if<\n                        Case16, mpl::identity<Type16>, mpl::eval_if<\n                        Case17, mpl::identity<Type17>, mpl::eval_if<\n                        Case18, mpl::identity<Type18>, mpl::eval_if<\n                        Case19, mpl::identity<Type19>, mpl::if_<\n                        Case20, Type20, mpl::void_ > > > > > > > > >\n                    > result2;\n            typedef typename    \n                    mpl::eval_if<\n                        is_same<result1, mpl::void_>,\n                        result2,\n                        mpl::identity<result1>\n                    >::type type;\n        };\n\n        template<typename T>\n        struct remove_extent {\n            static T* ar;\n            BOOST_STATIC_CONSTANT(std::size_t, size = sizeof(*ar) / sizeof((*ar)[0]));\n\n            typedef typename\n                    select<\n                        is_same<T, bool[size]>,                  bool,\n                        is_same<T, char[size]>,                  char,\n                        is_same<T, signed char[size]>,           signed char,\n                        is_same<T, unsigned char[size]>,         unsigned char,\n                    #ifndef BOOST_NO_INTRINSIC_WCHAR_T\n                        is_same<T, wchar_t[size]>,               wchar_t,\n                    #endif\n                        is_same<T, short[size]>,                 short,\n                        is_same<T, unsigned short[size]>,        unsigned short,\n                        is_same<T, int[size]>,                   int,\n                        is_same<T, unsigned int[size]>,          unsigned int,\n                        is_same<T, long[size]>,                  long,\n                        is_same<T, unsigned long[size]>,         unsigned long,\n                        is_same<T, float[size]>,                 float,\n                        is_same<T, double[size]>,                double,\n                        is_same<T, long double[size]>,           long double\n                    >::type result1;\n            typedef typename\n                    select<\n                        is_same<T, const bool[size]>,            const bool,\n                        is_same<T, const char[size]>,            const char,\n                        is_same<T, const signed char[size]>,     const signed char,\n                        is_same<T, const unsigned char[size]>,   const unsigned char,\n                    #ifndef BOOST_NO_INTRINSIC_WCHAR_T\n                        is_same<T, const wchar_t[size]>,         const wchar_t,\n                    #endif\n                        is_same<T, const short[size]>,           const short,\n                        is_same<T, const unsigned short[size]>,  const unsigned short,\n                        is_same<T, const int[size]>,             const int,\n                        is_same<T, const unsigned int[size]>,    const unsigned int,\n                        is_same<T, const long[size]>,            const long,\n                        is_same<T, const unsigned long[size]>,   const unsigned long,\n                        is_same<T, const float[size]>,           const float,\n                        is_same<T, const double[size]>,          const double,\n                        is_same<T, const long double[size]>,     const long double\n                    > result2;\n            typedef typename\n                    mpl::eval_if<\n                        is_same<result1, mpl::void_>,\n                        result2,\n                        mpl::identity<result1>\n                    >::type type;\n        };\n\n    } // namespace 'range_detail'\n\n} // namespace 'boost'\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/safe_bool.hpp",
    "content": "//  This header intentionally has no include guards.\n//\n//  Copyright (c) 2010 Neil Groves\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n// This code utilises the experience gained during the evolution of\n// <boost/smart_ptr/operator_bool.hpp>\n#ifndef BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP\n#define BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP\n\n#include <boost/config.hpp>\n#include <boost/range/config.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<class DataMemberPtr>\nclass safe_bool\n{\npublic:\n    typedef safe_bool this_type;\n\n#if (defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570)) || defined(__CINT_)\n    typedef bool unspecified_bool_type;\n    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)\n    {\n        return x;\n    }\n#elif defined(_MANAGED)\n    static void unspecified_bool(this_type***)\n    {\n    }\n    typedef void(*unspecified_bool_type)(this_type***);\n    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)\n    {\n        return x ? unspecified_bool : 0;\n    }\n#elif \\\n    ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \\\n    ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \\\n    ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) )\n\n    typedef bool (this_type::*unspecified_bool_type)() const;\n\n    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)\n    {\n        return x ? &this_type::detail_safe_bool_member_fn : 0;\n    }\nprivate:\n    bool detail_safe_bool_member_fn() const { return false; }\n#else\n    typedef DataMemberPtr unspecified_bool_type;\n    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr p)\n    {\n        return x ? p : 0;\n    }\n#endif\nprivate:\n    safe_bool();\n    safe_bool(const safe_bool&);\n    void operator=(const safe_bool&);\n    ~safe_bool();\n};\n\n    } // namespace range_detail\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/sfinae.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_SFINAE_HPP\n#define BOOST_RANGE_DETAIL_SFINAE_HPP\n\n#include <boost/range/config.hpp>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <utility>\n\n\nnamespace boost \n{\n    namespace range_detail\n    {          \n        using type_traits::yes_type;\n        using type_traits::no_type;\n\n        //////////////////////////////////////////////////////////////////////\n        // string\n        //////////////////////////////////////////////////////////////////////\n        \n        yes_type is_string_impl( const char* const );\n        yes_type is_string_impl( const wchar_t* const );\n        no_type  is_string_impl( ... );\n        \n        template< std::size_t sz >\n        yes_type is_char_array_impl( char BOOST_RANGE_ARRAY_REF()[sz] );\n        template< std::size_t sz >\n        yes_type is_char_array_impl( const char BOOST_RANGE_ARRAY_REF()[sz] );\n        no_type  is_char_array_impl( ... );\n        \n        template< std::size_t sz >\n        yes_type is_wchar_t_array_impl( wchar_t BOOST_RANGE_ARRAY_REF()[sz] );\n        template< std::size_t sz >\n        yes_type is_wchar_t_array_impl( const wchar_t BOOST_RANGE_ARRAY_REF()[sz] );\n        no_type  is_wchar_t_array_impl( ... );\n                                     \n        yes_type is_char_ptr_impl( char* const );\n        no_type  is_char_ptr_impl( ... );\n        \n        yes_type is_const_char_ptr_impl( const char* const );\n        no_type  is_const_char_ptr_impl( ... );\n\n        yes_type is_wchar_t_ptr_impl( wchar_t* const );\n        no_type  is_wchar_t_ptr_impl( ... );\n        \n        yes_type is_const_wchar_t_ptr_impl( const wchar_t* const );\n        no_type  is_const_wchar_t_ptr_impl( ... );\n        \n        //////////////////////////////////////////////////////////////////////\n        // pair\n        //////////////////////////////////////////////////////////////////////\n\n        template< typename Iterator >\n        yes_type is_pair_impl( const std::pair<Iterator,Iterator>* );\n        no_type  is_pair_impl( ... );\n\n        //////////////////////////////////////////////////////////////////////\n        // tags\n        //////////////////////////////////////////////////////////////////////\n\n        struct char_or_wchar_t_array_tag {};\n        \n    } // namespace 'range_detail'\n    \n} // namespace 'boost'\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/size_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_SIZE_TYPE_HPP\n#define BOOST_RANGE_DETAIL_SIZE_TYPE_HPP\n\n#include <boost/range/detail/common.hpp>\n\n//////////////////////////////////////////////////////////////////////////////\n// missing partial specialization  workaround.\n//////////////////////////////////////////////////////////////////////////////\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< typename T >\n        struct range_size_type_\n        {\n            template< typename C >\n            struct pts\n            {\n                typedef std::size_t type;\n            };\n        };\n\n        template<>\n        struct range_size_type_<std_container_>\n        {\n            template< typename C >\n            struct pts\n            {\n                typedef BOOST_RANGE_DEDUCED_TYPENAME C::size_type type;\n            };\n        };\n    }\n\n    template< typename C >\n    class range_size\n    {\n        typedef typename range_detail::range<C>::type c_type;\n    public:\n        typedef typename range_detail::range_size_type_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;\n    };\n}\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/sizer.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_SIZER_HPP\n#define BOOST_RANGE_DETAIL_SIZER_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <cstddef>\n\nnamespace boost \n{\n    //////////////////////////////////////////////////////////////////////\n    // constant array size\n    //////////////////////////////////////////////////////////////////////\n    \n    template< typename T, std::size_t sz >\n    char (& sizer( const T BOOST_RANGE_ARRAY_REF()[sz] ) )[sz];\n    \n    template< typename T, std::size_t sz >\n    char (& sizer( T BOOST_RANGE_ARRAY_REF()[sz] ) )[sz];\n\n} // namespace 'boost'\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/str_types.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_STR_TYPES_HPP\n#define BOOST_RANGE_DETAIL_STR_TYPES_HPP\n\n#include <boost/range/size_type.hpp>\n#include <boost/range/iterator.hpp>\n\nnamespace boost\n{\n    template< class T >\n    struct range_mutable_iterator<T*>\n    {\n        typedef T* type;\n    };\n\n    template< class T >\n    struct range_const_iterator<T*>\n    {\n        typedef const T* type;\n    };\n\n    template< class T >\n    struct range_size<T*>\n    {\n       typedef std::size_t type;\n    };    \n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/detail/value_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_VALUE_TYPE_HPP\n#define BOOST_RANGE_DETAIL_VALUE_TYPE_HPP\n\n#include <boost/range/detail/common.hpp>\n#include <boost/range/detail/remove_extent.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n\n//////////////////////////////////////////////////////////////////////////////\n// missing partial specialization  workaround.\n//////////////////////////////////////////////////////////////////////////////\n\nnamespace boost \n{\n    namespace range_detail \n    {        \n        template< typename T >\n        struct range_value_type_;\n\n        template<>\n        struct range_value_type_<std_container_>\n        {\n            template< typename C >\n            struct pts\n            {\n                typedef BOOST_RANGE_DEDUCED_TYPENAME C::value_type type;\n            };\n        };\n\n        template<>\n        struct range_value_type_<std_pair_>\n        {\n            template< typename P >\n            struct pts\n            {\n                typedef BOOST_RANGE_DEDUCED_TYPENAME boost::iterator_value< BOOST_RANGE_DEDUCED_TYPENAME P::first_type >::type type;\n            };\n        };\n\n        template<>\n        struct range_value_type_<array_>\n        { \n            template< typename T >\n            struct pts\n            {\n                typedef BOOST_DEDUCED_TYPENAME remove_extent<T>::type type;\n            };\n        };\n        \n    } \n    \n    template< typename C >\n    class range_value\n    {\n        typedef BOOST_DEDUCED_TYPENAME range_detail::range<C>::type c_type;\n    public:\n        typedef BOOST_DEDUCED_TYPENAME range_detail::range_value_type_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type; \n    };\n\n}\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/difference_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DIFFERENCE_TYPE_HPP\n#define BOOST_RANGE_DIFFERENCE_TYPE_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/mpl/and.hpp>\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/has_range_iterator.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template< class T, bool B = has_type<range_iterator<T> >::value >\n        struct range_difference\n        { };\n\n        template< class T >\n        struct range_difference<T, true>\n          : iterator_difference<\n                BOOST_DEDUCED_TYPENAME range_iterator<T>::type\n            >\n        { };\n    }\n\n    template< class T >\n    struct range_difference\n      : range_detail::range_difference<BOOST_DEDUCED_TYPENAME remove_reference<T>::type>\n    { };\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/distance.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DISTANCE_HPP\n#define BOOST_RANGE_DISTANCE_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/difference_type.hpp>\n\nnamespace boost \n{\n\n    template< class T >\n    inline BOOST_DEDUCED_TYPENAME range_difference<T>::type \n    distance( const T& r )\n    {\n        return std::distance( boost::begin( r ), boost::end( r ) );\n    }\n\n} // namespace 'boost'\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/empty.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_EMPTY_HPP\n#define BOOST_RANGE_EMPTY_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost \n{ \n\n    template< class T >\n    inline bool empty( const T& r )\n    {\n        return boost::begin( r ) == boost::end( r );\n    }\n\n} // namespace 'boost'\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/end.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_END_HPP\n#define BOOST_RANGE_END_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#include <boost/range/detail/end.hpp>\n#else\n\n#include <boost/range/detail/implementation_help.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n\nnamespace boost\n{\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\nnamespace range_detail\n{\n#endif\n\n        //////////////////////////////////////////////////////////////////////\n        // primary template\n        //////////////////////////////////////////////////////////////////////\n        template< typename C >\n        inline BOOST_DEDUCED_TYPENAME range_iterator<C>::type\n        range_end( C& c )\n        {\n            //\n            // If you get a compile-error here, it is most likely because\n            // you have not implemented range_begin() properly in\n            // the namespace of C\n            //\n            return c.end();\n        }\n\n        //////////////////////////////////////////////////////////////////////\n        // pair\n        //////////////////////////////////////////////////////////////////////\n\n        template< typename Iterator >\n        inline Iterator range_end( const std::pair<Iterator,Iterator>& p )\n        {\n            return p.second;\n        }\n\n        template< typename Iterator >\n        inline Iterator range_end( std::pair<Iterator,Iterator>& p )\n        {\n            return p.second;\n        }\n\n        //////////////////////////////////////////////////////////////////////\n        // array\n        //////////////////////////////////////////////////////////////////////\n\n        template< typename T, std::size_t sz >\n        inline const T* range_end( const T (&a)[sz] )\n        {\n            return range_detail::array_end<T,sz>( a );\n        }\n\n        template< typename T, std::size_t sz >\n        inline T* range_end( T (&a)[sz] )\n        {\n            return range_detail::array_end<T,sz>( a );\n        }\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n} // namespace 'range_detail'\n#endif\n\nnamespace range_adl_barrier\n{\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_iterator<T>::type end( T& r )\n{\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n    using namespace range_detail;\n#endif\n    return range_end( r );\n}\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type end( const T& r )\n{\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n    using namespace range_detail;\n#endif\n    return range_end( r );\n}\n\n    } // namespace range_adl_barrier\n} // namespace 'boost'\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\nnamespace boost\n{\n    namespace range_adl_barrier\n    {\n        template< class T >\n        inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type\n        const_end( const T& r )\n        {\n            return boost::range_adl_barrier::end( r );\n        }\n    } // namespace range_adl_barrier\n    using namespace range_adl_barrier;\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/functions.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_FUNCTIONS_HPP\n#define BOOST_RANGE_FUNCTIONS_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/size.hpp>\n#include <boost/range/distance.hpp>\n#include <boost/range/empty.hpp>\n#include <boost/range/rbegin.hpp>\n#include <boost/range/rend.hpp>\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/has_range_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n// Acknowledgments:\n// Ticket #8341: Arno Schoedl - improved handling of has_range_iterator upon\n// use-cases where T was const.\n#ifndef BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED\n#define BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/has_xxx.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/utility/enable_if.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        BOOST_MPL_HAS_XXX_TRAIT_DEF(type)\n\n        template<class T, class Enabler = void>\n        struct has_range_iterator_impl\n            : boost::mpl::false_\n        {\n        };\n\n        template<class T>\n        struct has_range_iterator_impl<\n            T,\n            BOOST_DEDUCED_TYPENAME ::boost::enable_if<\n                BOOST_DEDUCED_TYPENAME mpl::eval_if<is_const<T>,\n                    has_type<range_const_iterator<\n                                BOOST_DEDUCED_TYPENAME remove_const<T>::type> >,\n                    has_type<range_mutable_iterator<T> >\n                >::type\n            >::type\n        >\n            : boost::mpl::true_\n        {\n        };\n\n        template<class T, class Enabler = void>\n        struct has_range_const_iterator_impl\n            : boost::mpl::false_\n        {\n        };\n\n        template<class T>\n        struct has_range_const_iterator_impl<\n            T,\n            BOOST_DEDUCED_TYPENAME ::boost::enable_if<\n                has_type<range_const_iterator<T> >\n            >::type\n        >\n            : boost::mpl::true_\n        {\n        };\n\n    } // namespace range_detail\n\n    template<class T>\n    struct has_range_iterator\n        : range_detail::has_range_iterator_impl<\n            BOOST_DEDUCED_TYPENAME remove_reference<T>::type>\n    {};\n\n    template<class T>\n    struct has_range_const_iterator\n        : range_detail::has_range_const_iterator_impl<\n            BOOST_DEDUCED_TYPENAME remove_reference<T>::type>\n    {};\n} // namespace boost\n\n#endif // include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/irange.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_IRANGE_HPP_INCLUDED\n#define BOOST_RANGE_IRANGE_HPP_INCLUDED\n\n#include <boost/assert.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/range/iterator_range.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        // integer_iterator is an iterator over an integer sequence that\n        // is bounded only by the limits of the underlying integer\n        // representation.\n        //\n        // This is useful for implementing the irange(first, last)\n        // function.\n        //\n        // Note:\n        // This use of this iterator and irange is appreciably less\n        // performant than the corresponding hand-written integer\n        // loop on many compilers.\n        template<typename Integer>\n        class integer_iterator\n            : public boost::iterator_facade<\n                        integer_iterator<Integer>,\n                        Integer,\n                        boost::random_access_traversal_tag,\n                        Integer,\n                        std::ptrdiff_t\n                    >\n        {\n            typedef boost::iterator_facade<\n                        integer_iterator<Integer>,\n                        Integer,\n                        boost::random_access_traversal_tag,\n                        Integer,\n                        std::ptrdiff_t\n                    > base_t;\n        public:\n            typedef typename base_t::value_type value_type;\n            typedef typename base_t::difference_type difference_type;\n            typedef typename base_t::reference reference;\n            typedef std::random_access_iterator_tag iterator_category;\n\n            integer_iterator() : m_value() {}\n            explicit integer_iterator(value_type x) : m_value(x) {}\n\n        private:\n            void increment()\n            {\n                ++m_value;\n            }\n\n            void decrement()\n            {\n                --m_value;\n            }\n\n            void advance(difference_type offset)\n            {\n                m_value += offset;\n            }\n\n            difference_type distance_to(const integer_iterator& other) const\n            {\n                return is_signed<value_type>::value\n                    ? (other.m_value - m_value)\n                    : (other.m_value >= m_value)\n                        ? static_cast<difference_type>(other.m_value - m_value)\n                        : -static_cast<difference_type>(m_value - other.m_value);\n            }\n\n            bool equal(const integer_iterator& other) const\n            {\n                return m_value == other.m_value;\n            }\n\n            reference dereference() const\n            {\n                return m_value;\n            }\n\n            friend class ::boost::iterator_core_access;\n            value_type m_value;\n        };\n\n        // integer_iterator_with_step is similar in nature to the\n        // integer_iterator but provides the ability to 'move' in\n        // a number of steps specified at construction time.\n        //\n        // The three variable implementation provides the best guarantees\n        // of loop termination upon various combinations of input.\n        //\n        // While this design is less performant than some less\n        // safe alternatives, the use of ranges and iterators to\n        // perform counting will never be optimal anyhow, hence\n        // if optimal performance is desired a hand-coded loop\n        // is the solution.\n        template<typename Integer>\n        class integer_iterator_with_step\n            : public boost::iterator_facade<\n                        integer_iterator_with_step<Integer>,\n                        Integer,\n                        boost::random_access_traversal_tag,\n                        Integer,\n                        std::ptrdiff_t\n                    >\n        {\n            typedef boost::iterator_facade<\n                        integer_iterator_with_step<Integer>,\n                        Integer,\n                        boost::random_access_traversal_tag,\n                        Integer,\n                        std::ptrdiff_t\n                    > base_t;\n        public:\n            typedef typename base_t::value_type value_type;\n            typedef typename base_t::difference_type difference_type;\n            typedef typename base_t::reference reference;\n            typedef std::random_access_iterator_tag iterator_category;\n\n            integer_iterator_with_step(value_type first, difference_type step, value_type step_size)\n                : m_first(first)\n                , m_step(step)\n                , m_step_size(step_size)\n            {\n            }\n\n        private:\n            void increment()\n            {\n                ++m_step;\n            }\n\n            void decrement()\n            {\n                --m_step;\n            }\n\n            void advance(difference_type offset)\n            {\n                m_step += offset;\n            }\n\n            difference_type distance_to(const integer_iterator_with_step& other) const\n            {\n                return other.m_step - m_step;\n            }\n\n            bool equal(const integer_iterator_with_step& other) const\n            {\n                return m_step == other.m_step;\n            }\n\n            reference dereference() const\n            {\n                return m_first + (m_step * m_step_size);\n            }\n\n            friend class ::boost::iterator_core_access;\n            value_type m_first;\n            difference_type m_step;\n            difference_type m_step_size;\n        };\n\n    } // namespace range_detail\n\n    template<typename Integer>\n    class integer_range\n        : public iterator_range< range_detail::integer_iterator<Integer> >\n    {\n        typedef range_detail::integer_iterator<Integer> iterator_t;\n        typedef iterator_range<iterator_t> base_t;\n    public:\n        integer_range(Integer first, Integer last)\n            : base_t(iterator_t(first), iterator_t(last))\n        {\n        }\n    };\n\n    template<typename Integer>\n    class strided_integer_range\n    : public iterator_range< range_detail::integer_iterator_with_step<Integer> >\n    {\n        typedef range_detail::integer_iterator_with_step<Integer> iterator_t;\n        typedef iterator_range<iterator_t> base_t;\n    public:\n        template<typename Iterator>\n        strided_integer_range(Iterator first, Iterator last)\n            : base_t(first, last)\n        {\n        }\n    };\n\n    template<typename Integer>\n    integer_range<Integer>\n    irange(Integer first, Integer last)\n    {\n        BOOST_ASSERT( first <= last );\n        return integer_range<Integer>(first, last);\n    }\n\n    template<typename Integer, typename StepSize>\n    strided_integer_range<Integer>\n        irange(Integer first, Integer last, StepSize step_size)\n    {\n        BOOST_ASSERT( step_size != 0 );\n        BOOST_ASSERT( (step_size > 0) ? (last >= first) : (last <= first) );\n        \n        typedef typename range_detail::integer_iterator_with_step<Integer> iterator_t;\n\n        const std::ptrdiff_t sz = static_cast<std::ptrdiff_t>(step_size >= 0 ? step_size : -step_size);\n        const Integer l = step_size >= 0 ? last : first;\n        const Integer f = step_size >= 0 ? first : last;\n        const std::ptrdiff_t num_steps = (l - f) / sz + ((l - f) % sz ? 1 : 0);\n        BOOST_ASSERT(num_steps >= 0);\n       \n        return strided_integer_range<Integer>(\n            iterator_t(first, 0, step_size),\n            iterator_t(first, num_steps, step_size));\n    }\n\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/istream_range.hpp",
    "content": "//  Copyright Neil Groves 2010. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ISTREAM_RANGE_HPP_INCLUDED\n#define BOOST_RANGE_ISTREAM_RANGE_HPP_INCLUDED\n\n/*!\n * \\file istream_range.hpp\n */\n\n#include <iterator>\n#include <iosfwd>\n#include <boost/config.hpp>\n#include <boost/range/iterator_range.hpp>\n\nnamespace boost\n{\n    namespace range\n    {\n        template<class Type, class Elem, class Traits> inline\n            iterator_range<std::istream_iterator<Type, Elem, Traits> >\n        istream_range(std::basic_istream<Elem, Traits>& in)\n        {\n            return iterator_range<std::istream_iterator<Type, Elem, Traits> >(\n                std::istream_iterator<Type, Elem, Traits>(in),\n                std::istream_iterator<Type, Elem, Traits>());\n        }\n    } // namespace range\n    using range::istream_range;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ITERATOR_HPP\n#define BOOST_RANGE_ITERATOR_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/range_fwd.hpp>\n#include <boost/range/mutable_iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/mpl/eval_if.hpp>\n\nnamespace boost\n{\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)  \n\n    namespace range_detail_vc7_1  \n    {  \n       template< typename C, typename Sig = void(C) >  \n       struct range_iterator  \n       {  \n           typedef BOOST_RANGE_DEDUCED_TYPENAME   \n               mpl::eval_if_c< is_const<C>::value,   \n                               range_const_iterator< typename remove_const<C>::type >,  \n                               range_mutable_iterator<C> >::type type;  \n       };  \n    \n       template< typename C, typename T >  \n       struct range_iterator< C, void(T[]) >  \n       {  \n           typedef T* type;  \n       };       \n    }  \n    \n    template< typename C, typename Enabler=void >\n    struct range_iterator\n    {\n\n        typedef BOOST_RANGE_DEDUCED_TYPENAME  \n               range_detail_vc7_1::range_iterator<C>::type type;  \n\n    };\n\n#else\n\n    template< typename C, typename Enabler=void >\n    struct range_iterator\n      : mpl::if_c<\n            is_const<typename remove_reference<C>::type>::value,\n            range_const_iterator<typename remove_const<typename remove_reference<C>::type>::type>,\n            range_mutable_iterator<typename remove_reference<C>::type>\n        >::type\n    {\n    };\n\n#endif\n\n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/iterator_range.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ITERATOR_RANGE_HPP_INCLUDED\n#define BOOST_RANGE_ITERATOR_RANGE_HPP_INCLUDED\n\n#include \"boost/range/iterator_range_core.hpp\"\n#include \"boost/range/iterator_range_io.hpp\"\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/iterator_range_core.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves & Thorsten Ottosen & Pavol Droba 2003-2004.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n// Credits:\n// 'michel' reported Trac 9072 which included a patch for allowing references\n// to function types.\n//\n#ifndef BOOST_RANGE_ITERATOR_RANGE_CORE_HPP_INCLUDED\n#define BOOST_RANGE_ITERATOR_RANGE_CORE_HPP_INCLUDED\n\n#include <boost/config.hpp> // Define __STL_CONFIG_H, if appropriate.\n#include <boost/detail/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))\n    #pragma warning( push )\n    #pragma warning( disable : 4996 )\n#endif\n\n#include <boost/assert.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/or.hpp>\n#include <boost/type_traits/is_abstract.hpp>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/is_base_and_derived.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/is_function.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/range/functions.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/has_range_iterator.hpp>\n#include <boost/range/algorithm/equal.hpp>\n#include <boost/range/detail/safe_bool.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <iterator>\n#include <algorithm>\n#include <cstddef>\n\n/*! \\file\n    Defines the \\c iterator_class and related functions.\n    \\c iterator_range is a simple wrapper of iterator pair idiom. It provides\n    a rich subset of Container interface.\n*/\n\n\nnamespace boost\n{\n    namespace iterator_range_detail\n    {\n        //\n        // The functions adl_begin and adl_end are implemented in a separate\n        // class for gcc-2.9x\n        //\n        template<class IteratorT>\n        struct iterator_range_impl {\n            template< class ForwardRange >\n            static IteratorT adl_begin( ForwardRange& r )\n            {\n                return IteratorT( boost::begin( r ) );\n            }\n\n            template< class ForwardRange >\n            static IteratorT adl_end( ForwardRange& r )\n            {\n                return IteratorT( boost::end( r ) );\n            }\n        };\n\n        template< class Left, class Right >\n        inline bool less_than( const Left& l, const Right& r )\n        {\n            return std::lexicographical_compare( boost::begin(l),\n                                                 boost::end(l),\n                                                 boost::begin(r),\n                                                 boost::end(r) );\n        }\n        \n        template< class Left, class Right >\n        inline bool greater_than( const Left& l, const Right& r )\n        {\n            return iterator_range_detail::less_than(r,l);\n        }\n        \n        template< class Left, class Right >\n        inline bool less_or_equal_than( const Left& l, const Right& r )\n        {\n            return !iterator_range_detail::less_than(r,l);\n        }\n        \n        template< class Left, class Right >\n        inline bool greater_or_equal_than( const Left& l, const Right& r )\n        {\n            return !iterator_range_detail::less_than(l,r);\n        }\n\n        // This version is maintained since it is used in other boost libraries\n        // such as Boost.Assign\n        template< class Left, class Right >\n        inline bool equal(const Left& l, const Right& r)\n        {\n            return boost::equal(l, r);\n        }\n\nstruct range_tag\n{\n};\n\nstruct const_range_tag\n{\n};\n\nstruct iterator_range_tag\n{\n};\n\ntypedef char (&incrementable_t)[1];\ntypedef char (&bidirectional_t)[2];\ntypedef char (&random_access_t)[3];\n\nincrementable_t test_traversal_tag(boost::incrementable_traversal_tag);\nbidirectional_t test_traversal_tag(boost::bidirectional_traversal_tag);\nrandom_access_t test_traversal_tag(boost::random_access_traversal_tag);\n\ntemplate<std::size_t S>\nstruct pure_iterator_traversal_impl\n{\n    typedef boost::incrementable_traversal_tag type;\n};\n\ntemplate<>\nstruct pure_iterator_traversal_impl<sizeof(bidirectional_t)>\n{\n    typedef boost::bidirectional_traversal_tag type;\n};\n\ntemplate<>\nstruct pure_iterator_traversal_impl<sizeof(random_access_t)>\n{\n    typedef boost::random_access_traversal_tag type;\n};\n\ntemplate<typename IteratorT>\nstruct pure_iterator_traversal\n{\n    typedef\n        BOOST_DEDUCED_TYPENAME iterator_traversal<IteratorT>::type\n    traversal_t;\n    BOOST_STATIC_CONSTANT(\n        std::size_t,\n        traversal_i = sizeof(iterator_range_detail::test_traversal_tag((traversal_t())))\n    );\n    typedef\n        BOOST_DEDUCED_TYPENAME pure_iterator_traversal_impl<traversal_i>::type\n    type;\n};\n\ntemplate<class IteratorT, class TraversalTag>\nclass iterator_range_base\n    : public iterator_range_tag\n{\n    typedef range_detail::safe_bool<\n                IteratorT iterator_range_base<IteratorT, TraversalTag>::*\n    > safe_bool_t;\n\n    typedef iterator_range_base<IteratorT, TraversalTag> type;\n\nprotected:\n    typedef iterator_range_impl<IteratorT> impl;\n\npublic:\n    typedef BOOST_DEDUCED_TYPENAME\n        safe_bool_t::unspecified_bool_type unspecified_bool_type;\n\n    typedef BOOST_DEDUCED_TYPENAME\n        iterator_value<IteratorT>::type value_type;\n\n    typedef BOOST_DEDUCED_TYPENAME\n        iterator_difference<IteratorT>::type difference_type;\n\n    typedef std::size_t size_type; // note: must be unsigned\n\n    // Needed because value-type is the same for\n    // const and non-const iterators\n    typedef BOOST_DEDUCED_TYPENAME\n                iterator_reference<IteratorT>::type reference;\n\n    //! const_iterator type\n    /*!\n        There is no distinction between const_iterator and iterator.\n        These typedefs are provides to fulfill container interface\n    */\n    typedef IteratorT const_iterator;\n    //! iterator type\n    typedef IteratorT iterator;\n\nprotected:\n    iterator_range_base()\n        : m_Begin()\n        , m_End()\n    {\n    }\n\n    template<class Iterator>\n    iterator_range_base(Iterator Begin, Iterator End)\n        : m_Begin(Begin)\n        , m_End(End)\n    {\n    }\n\npublic:\n    IteratorT begin() const\n    {\n        return m_Begin;\n    }\n\n    IteratorT end() const\n    {\n        return m_End;\n    }\n\n    bool empty() const\n    {\n        return m_Begin == m_End;\n    }\n\n    operator unspecified_bool_type() const\n    {\n        return safe_bool_t::to_unspecified_bool(\n                    m_Begin != m_End, &iterator_range_base::m_Begin);\n    }\n\n    bool operator!() const\n    {\n        return empty();\n    }\n\n    bool equal(const iterator_range_base& r) const\n    {\n        return m_Begin == r.m_Begin && m_End == r.m_End;\n    }\n\n   reference front() const\n   {\n       BOOST_ASSERT(!empty());\n       return *m_Begin;\n   }\n\n   void drop_front()\n   {\n       BOOST_ASSERT(!empty());\n       ++m_Begin;\n   }\n\n   void drop_front(difference_type n)\n   {\n       BOOST_ASSERT(n >= difference_type());\n       std::advance(this->m_Begin, n);\n   }\n   \n   // Deprecated\n   void pop_front() { drop_front(); }\n\nprotected:\n    template<class Iterator>\n    void assign(Iterator first, Iterator last)\n    {\n        m_Begin = first;\n        m_End = last;\n    }\n\n    template<class SinglePassRange>\n    void assign(const SinglePassRange& r)\n    {\n        m_Begin = impl::adl_begin(r);\n        m_End = impl::adl_end(r);\n    }\n\n    template<class SinglePassRange>\n    void assign(SinglePassRange& r)\n    {\n        m_Begin = impl::adl_begin(r);\n        m_End = impl::adl_end(r);\n    }\n\n    IteratorT m_Begin;\n    IteratorT m_End;\n};\n\ntemplate<class IteratorT>\nclass iterator_range_base<IteratorT, bidirectional_traversal_tag>\n        : public iterator_range_base<IteratorT, incrementable_traversal_tag>\n{\n    typedef iterator_range_base<IteratorT, incrementable_traversal_tag> base_type;\n\nprotected:\n    iterator_range_base()\n    {\n    }\n\n    template<class Iterator>\n    iterator_range_base(Iterator first, Iterator last)\n        : base_type(first, last)\n    {\n    }\n\npublic:\n    typedef BOOST_DEDUCED_TYPENAME base_type::difference_type difference_type;\n    typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;\n\n    reference back() const\n    {\n        BOOST_ASSERT(!this->empty());\n        return *boost::prior(this->m_End);\n    }\n\n    void drop_back()\n    {\n        BOOST_ASSERT(!this->empty());\n        --this->m_End;\n    }\n\n    void drop_back(difference_type n)\n    {\n        BOOST_ASSERT(n >= difference_type());\n        std::advance(this->m_End, -n);\n    }\n    \n    // Deprecated\n    void pop_back() { drop_back(); }\n};\n\ntemplate<class IteratorT>\nclass iterator_range_base<IteratorT, random_access_traversal_tag>\n        : public iterator_range_base<IteratorT, bidirectional_traversal_tag>\n{\n    typedef iterator_range_base<\n                IteratorT, bidirectional_traversal_tag> base_type;\n\npublic:\n    typedef BOOST_DEDUCED_TYPENAME\n        boost::mpl::if_<\n            boost::mpl::or_<\n                boost::is_abstract<\n                    BOOST_DEDUCED_TYPENAME base_type::value_type\n                >,\n                boost::is_array<\n                    BOOST_DEDUCED_TYPENAME base_type::value_type\n                >,\n                boost::is_function<\n                    BOOST_DEDUCED_TYPENAME base_type::value_type\n                >\n            >,\n            BOOST_DEDUCED_TYPENAME base_type::reference,\n            BOOST_DEDUCED_TYPENAME base_type::value_type\n        >::type abstract_value_type;\n\n    // Rationale:\n    // typedef these here to reduce verbiage in the implementation of this\n    // type.\n    typedef BOOST_DEDUCED_TYPENAME base_type::difference_type difference_type;\n    typedef BOOST_DEDUCED_TYPENAME base_type::size_type size_type;\n    typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;\n\nprotected:\n    iterator_range_base()\n    {\n    }\n\n    template<class Iterator>\n    iterator_range_base(Iterator first, Iterator last)\n        : base_type(first, last)\n    {\n    }\n\npublic:\n    reference operator[](difference_type at) const\n    {\n        BOOST_ASSERT(at >= 0);\n        BOOST_ASSERT(static_cast<typename base_type::size_type>(at) < size());\n        return this->m_Begin[at];\n    }\n\n    //\n    // When storing transform iterators, operator[]()\n    // fails because it returns by reference. Therefore\n    // operator()() is provided for these cases.\n    //\n    abstract_value_type operator()(difference_type at) const\n    {\n        BOOST_ASSERT(at >= 0);\n        BOOST_ASSERT(static_cast<typename base_type::size_type>(at) < size());\n        return this->m_Begin[at];\n    }\n\n    BOOST_DEDUCED_TYPENAME base_type::size_type size() const\n    {\n        return this->m_End - this->m_Begin;\n    }\n};\n\n    }\n\n//  iterator range template class -----------------------------------------//\n\n        //! iterator_range class\n        /*!\n            An \\c iterator_range delimits a range in a sequence by beginning and ending iterators.\n            An iterator_range can be passed to an algorithm which requires a sequence as an input.\n            For example, the \\c toupper() function may be used most frequently on strings,\n            but can also be used on iterator_ranges:\n\n            \\code\n                boost::tolower( find( s, \"UPPERCASE STRING\" ) );\n            \\endcode\n\n            Many algorithms working with sequences take a pair of iterators,\n            delimiting a working range, as an arguments. The \\c iterator_range class is an\n            encapsulation of a range identified by a pair of iterators.\n            It provides a collection interface,\n            so it is possible to pass an instance to an algorithm requiring a collection as an input.\n        */\n        template<class IteratorT>\n        class iterator_range\n            : public iterator_range_detail::iterator_range_base<\n                    IteratorT,\n                    BOOST_DEDUCED_TYPENAME iterator_range_detail::pure_iterator_traversal<IteratorT>::type\n                >\n        {\n            typedef iterator_range_detail::iterator_range_base<\n                    IteratorT,\n                    BOOST_DEDUCED_TYPENAME iterator_range_detail::pure_iterator_traversal<IteratorT>::type\n            > base_type;\n\n            template<class Source>\n            struct is_compatible_range_\n              : is_convertible<\n                    BOOST_DEDUCED_TYPENAME mpl::eval_if<\n                        has_range_iterator<Source>,\n                        range_iterator<Source>,\n                        mpl::identity<void>\n                    >::type,\n                    BOOST_DEDUCED_TYPENAME base_type::iterator\n                >\n            {\n            };\n\n            template<class Source>\n            struct is_compatible_range\n                : mpl::and_<\n                    mpl::not_<\n                        is_convertible<\n                            Source,\n                            BOOST_DEDUCED_TYPENAME base_type::iterator\n                        >\n                    >,\n                    is_compatible_range_<Source>\n                >\n            {\n            };\n\n        protected:\n            typedef iterator_range_detail::iterator_range_impl<IteratorT> impl;\n\n        public:\n            typedef iterator_range<IteratorT> type;\n\n            iterator_range()\n            {\n            }\n\n            template<class Iterator>\n            iterator_range(Iterator first, Iterator last)\n                : base_type(first, last)\n            {\n            }\n\n            template<class SinglePassRange>\n            iterator_range(\n                const SinglePassRange& r,\n                BOOST_DEDUCED_TYPENAME ::boost::enable_if<\n                    is_compatible_range<const SinglePassRange>\n                >::type* = 0\n            )\n                : base_type(impl::adl_begin(r), impl::adl_end(r))\n            {\n            }\n\n            template<class SinglePassRange>\n            iterator_range(\n                SinglePassRange& r,\n                BOOST_DEDUCED_TYPENAME ::boost::enable_if<\n                    is_compatible_range<SinglePassRange>\n                >::type* = 0\n            )\n                : base_type(impl::adl_begin(r), impl::adl_end(r))\n            {\n            }\n\n            template<class SinglePassRange>\n            iterator_range(const SinglePassRange& r,\n                           iterator_range_detail::const_range_tag)\n                : base_type(impl::adl_begin(r), impl::adl_end(r))\n            {\n            }\n\n            template<class SinglePassRange>\n            iterator_range(SinglePassRange& r,\n                           iterator_range_detail::range_tag)\n                : base_type(impl::adl_begin(r), impl::adl_end(r))\n            {\n            }\n\n            template<class Iterator>\n            iterator_range& operator=(const iterator_range<Iterator>& other)\n            {\n                this->assign(other.begin(), other.end());\n                return *this;\n            }\n\n            template<class Iterator>\n            iterator_range& operator=(iterator_range<Iterator>& other)\n            {\n                this->assign(other.begin(), other.end());\n                return *this;\n            }\n\n            template<class SinglePassRange>\n            iterator_range& operator=(SinglePassRange& r)\n            {\n                this->assign(r);\n                return *this;\n            }\n\n            template<class SinglePassRange>\n            iterator_range& operator=(const SinglePassRange& r)\n            {\n                this->assign(r);\n                return *this;\n            }\n\n            iterator_range& advance_begin(\n                BOOST_DEDUCED_TYPENAME base_type::difference_type n)\n            {\n                std::advance(this->m_Begin, n);\n                return *this;\n            }\n\n            iterator_range& advance_end(\n                BOOST_DEDUCED_TYPENAME base_type::difference_type n)\n            {\n                std::advance(this->m_End, n);\n                return *this;\n            }\n\n        protected:\n            //\n            // Allow subclasses an easy way to access the\n            // base type\n            //\n            typedef iterator_range iterator_range_;\n        };\n\n//  iterator range free-standing operators ---------------------------//\n\n        /////////////////////////////////////////////////////////////////////\n        // comparison operators\n        /////////////////////////////////////////////////////////////////////\n\n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator==( const ForwardRange& l, const iterator_range<IteratorT>& r )\n        {\n            return boost::equal( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator!=( const ForwardRange& l, const iterator_range<IteratorT>& r )\n        {\n            return !boost::equal( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator<( const ForwardRange& l, const iterator_range<IteratorT>& r )\n        {\n            return iterator_range_detail::less_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator<=( const ForwardRange& l, const iterator_range<IteratorT>& r )\n        {\n            return iterator_range_detail::less_or_equal_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator>( const ForwardRange& l, const iterator_range<IteratorT>& r )\n        {\n            return iterator_range_detail::greater_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator>=( const ForwardRange& l, const iterator_range<IteratorT>& r )\n        {\n            return iterator_range_detail::greater_or_equal_than( l, r );\n        }\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#else\n        template< class Iterator1T, class Iterator2T >\n        inline bool\n        operator==( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )\n        {\n            return boost::equal( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator==( const iterator_range<IteratorT>& l, const ForwardRange& r )\n        {\n            return boost::equal( l, r );\n        }\n\n\n        template< class Iterator1T, class Iterator2T >\n        inline bool\n        operator!=( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )\n        {\n            return !boost::equal( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator!=( const iterator_range<IteratorT>& l, const ForwardRange& r )\n        {\n            return !boost::equal( l, r );\n        }\n\n\n        template< class Iterator1T, class Iterator2T >\n        inline bool\n        operator<( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )\n        {\n            return iterator_range_detail::less_than( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator<( const iterator_range<IteratorT>& l, const ForwardRange& r )\n        {\n            return iterator_range_detail::less_than( l, r );\n        }\n        \n        template< class Iterator1T, class Iterator2T >\n        inline bool\n        operator<=( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )\n        {\n            return iterator_range_detail::less_or_equal_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator<=( const iterator_range<IteratorT>& l, const ForwardRange& r )\n        {\n            return iterator_range_detail::less_or_equal_than( l, r );\n        }\n        \n        template< class Iterator1T, class Iterator2T >\n        inline bool\n        operator>( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )\n        {\n            return iterator_range_detail::greater_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator>( const iterator_range<IteratorT>& l, const ForwardRange& r )\n        {\n            return iterator_range_detail::greater_than( l, r );\n        }\n        \n        template< class Iterator1T, class Iterator2T >\n        inline bool\n        operator>=( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )\n        {\n            return iterator_range_detail::greater_or_equal_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline BOOST_DEDUCED_TYPENAME boost::enable_if<\n            mpl::not_<boost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,\n            bool\n        >::type\n        operator>=( const iterator_range<IteratorT>& l, const ForwardRange& r )\n        {\n            return iterator_range_detail::greater_or_equal_than( l, r );\n        }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n//  iterator range utilities -----------------------------------------//\n\n        //! iterator_range construct helper\n        /*!\n            Construct an \\c iterator_range from a pair of iterators\n\n            \\param Begin A begin iterator\n            \\param End An end iterator\n            \\return iterator_range object\n        */\n        template< typename IteratorT >\n        inline iterator_range< IteratorT >\n        make_iterator_range( IteratorT Begin, IteratorT End )\n        {\n            return iterator_range<IteratorT>( Begin, End );\n        }\n\n        template<typename IteratorT, typename IntegerT>\n        inline iterator_range<IteratorT>\n        make_iterator_range_n(IteratorT first, IntegerT n)\n        {\n            return iterator_range<IteratorT>(first, boost::next(first, n));\n        }\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        template< typename Range >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n        make_iterator_range( Range& r )\n        {\n            return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n                ( boost::begin( r ), boost::end( r ) );\n        }\n\n#else\n        //! iterator_range construct helper\n        /*!\n            Construct an \\c iterator_range from a \\c Range containing the begin\n            and end iterators.\n        */\n        template< class ForwardRange >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >\n        make_iterator_range( ForwardRange& r )\n        {\n           return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >\n                ( r, iterator_range_detail::range_tag() );\n        }\n\n        template< class ForwardRange >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type >\n        make_iterator_range( const ForwardRange& r )\n        {\n           return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type >\n                ( r, iterator_range_detail::const_range_tag() );\n        }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        namespace iterator_range_detail\n        {\n            template< class Range >\n            inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n            make_range_impl( Range& r,\n                             BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,\n                             BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )\n            {\n                //\n                // Not worth the effort\n                //\n                //if( advance_begin == 0 && advance_end == 0 )\n                //    return make_iterator_range( r );\n                //\n\n                BOOST_DEDUCED_TYPENAME range_iterator<Range>::type\n                    new_begin = boost::begin( r ),\n                    new_end   = boost::end( r );\n                std::advance( new_begin, advance_begin );\n                std::advance( new_end, advance_end );\n                return make_iterator_range( new_begin, new_end );\n            }\n        }\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        template< class Range >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n        make_iterator_range( Range& r,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )\n        {\n            return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );\n        }\n\n#else\n\n        template< class Range >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n        make_iterator_range( Range& r,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )\n        {\n            return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );\n        }\n\n        template< class Range >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type >\n        make_iterator_range( const Range& r,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )\n        {\n            return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );\n        }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        //! copy a range into a sequence\n        /*!\n            Construct a new sequence of the specified type from the elements\n            in the given range\n\n            \\param Range An input range\n            \\return New sequence\n        */\n        template< typename SeqT, typename Range >\n        inline SeqT copy_range( const Range& r )\n        {\n            return SeqT( boost::begin( r ), boost::end( r ) );\n        }\n\n} // namespace 'boost'\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))\n    #pragma warning( pop )\n#endif\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/iterator_range_hash.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2014\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/functional/hash.hpp>\n\nnamespace boost\n{\n\ntemplate<class T>\nstd::size_t hash_value(const iterator_range<T>& rng)\n{\n    return boost::hash_range(rng.begin(), rng.end());\n}\n\n} // namespace boost\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/iterator_range_io.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ITERATOR_RANGE_IO_HPP_INCLUDED\n#define BOOST_RANGE_ITERATOR_RANGE_IO_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))\n    #pragma warning( push )\n    #pragma warning( disable : 4996 )\n#endif\n\n// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch.\n#ifndef BOOST_OLD_IOSTREAMS \n# if defined(__STL_CONFIG_H) && \\\n    !defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \\\n    /**/\n#  define BOOST_OLD_IOSTREAMS\n# endif\n#endif // #ifndef BOOST_OLD_IOSTREAMS\n\n#ifndef _STLP_NO_IOSTREAMS\n# ifndef BOOST_OLD_IOSTREAMS\n#  include <ostream>\n# else\n#  include <ostream.h>\n# endif\n#endif // _STLP_NO_IOSTREAMS\n\n#include <boost/range/iterator_range_core.hpp>\n#include <iterator>\n#include <algorithm>\n#include <cstddef>\n\nnamespace boost\n{\n\n#ifndef _STLP_NO_IOSTREAMS\n# ifndef BOOST_OLD_IOSTREAMS   \n\n        //! iterator_range output operator\n        /*!\n            Output the range to an ostream. Elements are outputted\n            in a sequence without separators.\n        */\n        template< typename IteratorT, typename Elem, typename Traits >\n        inline std::basic_ostream<Elem,Traits>& operator<<( \n                    std::basic_ostream<Elem, Traits>& Os,\n                    const iterator_range<IteratorT>& r )\n        {\n            std::copy( r.begin(), r.end(), \n                       std::ostream_iterator< BOOST_DEDUCED_TYPENAME \n                                              iterator_value<IteratorT>::type, \n                                              Elem, Traits>(Os) );\n            return Os;\n        }\n\n# else\n\n        //! iterator_range output operator\n        /*!\n            Output the range to an ostream. Elements are outputted\n            in a sequence without separators.\n        */\n        template< typename IteratorT >\n        inline std::ostream& operator<<( \n                    std::ostream& Os,\n                    const iterator_range<IteratorT>& r )\n        {\n            std::copy( r.begin(), r.end(), std::ostream_iterator<char>(Os));\n            return Os;\n        }\n\n# endif\n#endif // _STLP_NO_IOSTREAMS\n\n} // namespace boost\n\n#undef BOOST_OLD_IOSTREAMS\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))\n    #pragma warning(pop)\n#endif\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/join.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_JOIN_HPP_INCLUDED\n#define BOOST_RANGE_JOIN_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/range/detail/join_iterator.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/iterator_range.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<class SinglePassRange1, class SinglePassRange2>\nclass joined_type\n{\npublic:\n    typedef iterator_range<\n        range_detail::join_iterator<\n            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,\n            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type,\n            BOOST_DEDUCED_TYPENAME range_value<SinglePassRange1>::type\n        >\n    > type;\n};\n\n    } // namespace range_detail\n\nnamespace range\n{\n\ntemplate<class SinglePassRange1, class SinglePassRange2>\nclass joined_range\n    : public range_detail::joined_type<SinglePassRange1, SinglePassRange2>::type\n{\n    typedef range_detail::join_iterator<\n        BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,\n        BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type,\n        BOOST_DEDUCED_TYPENAME range_value<SinglePassRange1>::type\n        > iterator_t;\n\n    typedef BOOST_DEDUCED_TYPENAME range_detail::joined_type<\n                    SinglePassRange1, SinglePassRange2>::type base_t;\npublic:\n    joined_range(SinglePassRange1& rng1, SinglePassRange2& rng2)\n        : base_t(\n            iterator_t(rng1, rng2, range_detail::join_iterator_begin_tag()),\n            iterator_t(rng1, rng2, range_detail::join_iterator_end_tag())\n        )\n    {\n    }\n};\n\ntemplate<class SinglePassRange1, class SinglePassRange2>\njoined_range<const SinglePassRange1, const SinglePassRange2>\njoin(const SinglePassRange1& r1, const SinglePassRange2& r2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));\n\n    return joined_range<const SinglePassRange1, const SinglePassRange2>(r1, r2);\n}\n\ntemplate<class SinglePassRange1, class SinglePassRange2>\njoined_range<SinglePassRange1, SinglePassRange2>\njoin(SinglePassRange1& r1, SinglePassRange2& r2)\n{\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));\n    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));\n\n    return joined_range<SinglePassRange1, SinglePassRange2>(r1, r2);\n}\n\n} // namespace range\n\nusing ::boost::range::joined_range;\nusing ::boost::range::join;\n\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/metafunctions.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_METAFUNCTIONS_HPP\n#define BOOST_RANGE_METAFUNCTIONS_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/iterator.hpp>\n#include <boost/range/has_range_iterator.hpp>\n#include <boost/range/result_iterator.hpp>\n#include <boost/range/reverse_iterator.hpp>\n#include <boost/range/const_reverse_iterator.hpp>\n#include <boost/range/reverse_result_iterator.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/size_type.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/category.hpp>\n#include <boost/range/reference.hpp>\n#include <boost/range/pointer.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/mfc.hpp",
    "content": "#ifndef BOOST_RANGE_MFC_HPP\n#define BOOST_RANGE_MFC_HPP\n\n\n\n\n// Boost.Range MFC Extension\n//\n// Copyright Shunsuke Sogame 2005-2006.\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n\n\n\n// config\n//\n\n\n#include <afx.h> // _MFC_VER\n\n\n#if !defined(BOOST_RANGE_MFC_NO_CPAIR)\n    #if (_MFC_VER < 0x0700) // dubious\n        #define BOOST_RANGE_MFC_NO_CPAIR\n    #endif\n#endif\n\n\n#if !defined(BOOST_RANGE_MFC_HAS_LEGACY_STRING)\n    #if (_MFC_VER < 0x0700) // dubious\n        #define BOOST_RANGE_MFC_HAS_LEGACY_STRING\n    #endif\n#endif\n\n\n// A const collection of old MFC doesn't return const reference.\n//\n#if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)\n    #if (_MFC_VER < 0x0700) // dubious\n        #define BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF\n    #endif\n#endif\n\n\n\n\n// forward declarations\n//\n\n\ntemplate< class Type, class ArgType >\nclass CArray;\n\ntemplate< class Type, class ArgType >\nclass CList;\n\ntemplate< class Key, class ArgKey, class Mapped, class ArgMapped >\nclass CMap;\n\ntemplate< class BaseClass, class PtrType >\nclass CTypedPtrArray;\n\ntemplate< class BaseClass, class PtrType >\nclass CTypedPtrList;\n\ntemplate< class BaseClass, class KeyPtrType, class MappedPtrType >\nclass CTypedPtrMap;\n\n\n\n\n// extended customizations\n//\n\n\n#include <cstddef> // ptrdiff_t\n#include <utility> // pair\n#include <boost/assert.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/range/atl.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/detail/microsoft.hpp>\n#include <boost/range/end.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/iterator/transform_iterator.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/utility/addressof.hpp>\n#include <afx.h> // legacy CString\n#include <afxcoll.h> // CXXXArray, CXXXList, CMapXXXToXXX\n#include <tchar.h>\n\n\nnamespace boost { namespace range_detail_microsoft {\n\n\n    // mfc_ptr_array_iterator\n    //\n    // 'void **' is not convertible to 'void const **',\n    // so we define...\n    //\n\n    template< class ArrayT, class PtrType >\n    struct mfc_ptr_array_iterator;\n\n    template< class ArrayT, class PtrType >\n    struct mfc_ptr_array_iterator_super\n    {\n        typedef iterator_adaptor<\n            mfc_ptr_array_iterator<ArrayT, PtrType>,\n            std::ptrdiff_t, // Base!\n            PtrType,        // Value\n            random_access_traversal_tag,\n            use_default,\n            std::ptrdiff_t  // Difference\n        > type;\n    };\n\n    template< class ArrayT, class PtrType >\n    struct mfc_ptr_array_iterator :\n        mfc_ptr_array_iterator_super<ArrayT, PtrType>::type\n    {\n    private:\n        typedef mfc_ptr_array_iterator self_t;\n        typedef typename mfc_ptr_array_iterator_super<ArrayT, PtrType>::type super_t;\n        typedef typename super_t::reference ref_t;\n\n    public:\n        explicit mfc_ptr_array_iterator()\n        { }\n\n        explicit mfc_ptr_array_iterator(ArrayT& arr, INT_PTR index) :\n            super_t(index), m_parr(boost::addressof(arr))\n        { }\n\n    template< class, class > friend struct mfc_ptr_array_iterator;\n        template< class ArrayT_, class PtrType_ >\n        mfc_ptr_array_iterator(mfc_ptr_array_iterator<ArrayT_, PtrType_> const& other) :\n            super_t(other.base()), m_parr(other.m_parr)\n        { }\n\n    private:\n        ArrayT *m_parr;\n\n    friend class iterator_core_access;\n        ref_t dereference() const\n        {\n            BOOST_ASSERT(0 <= this->base() && this->base() < m_parr->GetSize() && \"out of range\");\n            return *( m_parr->GetData() + this->base() );\n        }\n\n        bool equal(self_t const& other) const\n        {\n            BOOST_ASSERT(m_parr == other.m_parr && \"iterators incompatible\");\n            return this->base() == other.base();\n        }\n    };\n\n    struct mfc_ptr_array_functions\n    {\n        template< class Iterator, class X >\n        Iterator begin(X& x)\n        {\n            return Iterator(x, 0);\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return Iterator(x, x.GetSize());\n        }\n    };\n\n\n    // arrays\n    //\n\n    template< >\n    struct customization< ::CByteArray > :\n        array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef BYTE val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CDWordArray > :\n        array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef DWORD val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CObArray > :\n        mfc_ptr_array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef mfc_ptr_array_iterator<X, CObject *> mutable_iterator;\n            typedef mfc_ptr_array_iterator<X const, CObject const *> const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CPtrArray > :\n        mfc_ptr_array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef mfc_ptr_array_iterator<X, void *> mutable_iterator;\n            typedef mfc_ptr_array_iterator<X const, void const *> const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CStringArray > :\n        array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef ::CString val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CUIntArray > :\n        array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef UINT val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CWordArray > :\n        array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef WORD val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n\n    // lists\n    //\n\n    template< >\n    struct customization< ::CObList > :\n        list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef list_iterator<X, ::CObject *> mutable_iterator;\n    #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)\n            typedef list_iterator<X const, ::CObject const *> const_iterator;\n    #else\n            typedef list_iterator<X const, ::CObject const * const, ::CObject const * const> const_iterator;\n    #endif\n        };\n    };\n\n\n    template< >\n    struct customization< ::CPtrList > :\n        list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef list_iterator<X, void *> mutable_iterator;\n    #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)\n            typedef list_iterator<X const, void const *> const_iterator;\n    #else\n            typedef list_iterator<X const, void const * const, void const * const> const_iterator;\n    #endif\n        };\n    };\n\n\n    template< >\n    struct customization< ::CStringList > :\n        list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef ::CString val_t;\n\n            typedef list_iterator<X, val_t> mutable_iterator;\n    #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)\n            typedef list_iterator<X const, val_t const> const_iterator;\n    #else\n            typedef list_iterator<X const, val_t const, val_t const> const_iterator;\n    #endif\n        };\n    };\n\n\n    // mfc_map_iterator\n    //\n\n    template< class MapT, class KeyT, class MappedT >\n    struct mfc_map_iterator;\n\n    template< class MapT, class KeyT, class MappedT >\n    struct mfc_map_iterator_super\n    {\n        typedef iterator_facade<\n            mfc_map_iterator<MapT, KeyT, MappedT>,\n            std::pair<KeyT, MappedT>,\n            forward_traversal_tag,\n            std::pair<KeyT, MappedT> const\n        > type;\n    };\n\n    template< class MapT, class KeyT, class MappedT >\n    struct mfc_map_iterator :\n        mfc_map_iterator_super<MapT, KeyT, MappedT>::type\n    {\n    private:\n        typedef mfc_map_iterator self_t;\n        typedef typename mfc_map_iterator_super<MapT, KeyT, MappedT>::type super_t;\n        typedef typename super_t::reference ref_t;\n\n    public:\n        explicit mfc_map_iterator()\n        { }\n\n        explicit mfc_map_iterator(MapT const& map, POSITION pos) :\n            m_pmap(boost::addressof(map)), m_posNext(pos)\n        {\n            increment();\n        }\n\n        explicit mfc_map_iterator(MapT const& map) :\n            m_pmap(&map), m_pos(0) // end iterator\n        { }\n\n    template< class, class, class > friend struct mfc_map_iterator;\n        template< class MapT_, class KeyT_, class MappedT_>\n        mfc_map_iterator(mfc_map_iterator<MapT_, KeyT_, MappedT_> const& other) :\n            m_pmap(other.m_pmap),\n            m_pos(other.m_pos), m_posNext(other.m_posNext),\n            m_key(other.m_key), m_mapped(other.m_mapped)\n        { }\n\n    private:\n        MapT const *m_pmap;\n        POSITION m_pos, m_posNext;\n        KeyT m_key; MappedT m_mapped;\n\n    friend class iterator_core_access;\n        ref_t dereference() const\n        {\n            BOOST_ASSERT(m_pos != 0 && \"out of range\");\n            return std::make_pair(m_key, m_mapped);\n        }\n\n        void increment()\n        {\n            BOOST_ASSERT(m_pos != 0 && \"out of range\");\n\n            if (m_posNext == 0) {\n                m_pos = 0;\n                return;\n            }\n\n            m_pos = m_posNext;\n            m_pmap->GetNextAssoc(m_posNext, m_key, m_mapped);\n        }\n\n        bool equal(self_t const& other) const\n        {\n            BOOST_ASSERT(m_pmap == other.m_pmap && \"iterators incompatible\");\n            return m_pos == other.m_pos;\n        }\n    };\n\n    struct mfc_map_functions\n    {\n        template< class Iterator, class X >\n        Iterator begin(X& x)\n        {\n            return Iterator(x, x.GetStartPosition());\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return Iterator(x);\n        }\n    };\n\n\n#if !defined(BOOST_RANGE_MFC_NO_CPAIR)\n\n\n    // mfc_cpair_map_iterator\n    //\n    // used by ::CMap and ::CMapStringToString\n    //\n\n    template< class MapT, class PairT >\n    struct mfc_cpair_map_iterator;\n\n    template< class MapT, class PairT >\n    struct mfc_pget_map_iterator_super\n    {\n        typedef iterator_facade<\n            mfc_cpair_map_iterator<MapT, PairT>,\n            PairT,\n            forward_traversal_tag\n        > type;\n    };\n\n    template< class MapT, class PairT >\n    struct mfc_cpair_map_iterator :\n        mfc_pget_map_iterator_super<MapT, PairT>::type\n    {\n    private:\n        typedef mfc_cpair_map_iterator self_t;\n        typedef typename mfc_pget_map_iterator_super<MapT, PairT>::type super_t;\n        typedef typename super_t::reference ref_t;\n\n    public:\n        explicit mfc_cpair_map_iterator()\n        { }\n\n        explicit mfc_cpair_map_iterator(MapT& map, PairT *pp) :\n            m_pmap(boost::addressof(map)), m_pp(pp)\n        { }\n\n    template< class, class > friend struct mfc_cpair_map_iterator;\n        template< class MapT_, class PairT_>\n        mfc_cpair_map_iterator(mfc_cpair_map_iterator<MapT_, PairT_> const& other) :\n            m_pmap(other.m_pmap), m_pp(other.m_pp)\n        { }\n\n    private:\n        MapT  *m_pmap;\n        PairT *m_pp;\n\n    friend class iterator_core_access;\n        ref_t dereference() const\n        {\n            BOOST_ASSERT(m_pp != 0 && \"out of range\");\n            return *m_pp;\n        }\n\n        void increment()\n        {\n            BOOST_ASSERT(m_pp != 0 && \"out of range\");\n            m_pp = m_pmap->PGetNextAssoc(m_pp);\n        }\n\n        bool equal(self_t const& other) const\n        {\n            BOOST_ASSERT(m_pmap == other.m_pmap && \"iterators incompatible\");\n            return m_pp == other.m_pp;\n        }\n    };\n\n    struct mfc_cpair_map_functions\n    {\n        template< class Iterator, class X >\n        Iterator begin(X& x)\n        {\n            // Workaround:\n            // Assertion fails if empty.\n            // MFC document is wrong.\n    #if !defined(NDEBUG)\n            if (x.GetCount() == 0) \n                return Iterator(x, 0);\n    #endif\n\n            return Iterator(x, x.PGetFirstAssoc());\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return Iterator(x, 0);\n        }\n    };\n\n\n#endif // !defined(BOOST_RANGE_MFC_NO_CPAIR)\n\n\n    // maps\n    //\n\n    template< >\n    struct customization< ::CMapPtrToWord > :\n        mfc_map_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef void *key_t;\n            typedef WORD mapped_t;\n\n            typedef mfc_map_iterator<X, key_t, mapped_t> mutable_iterator;\n            typedef mutable_iterator const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CMapPtrToPtr > :\n        mfc_map_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef void *key_t;\n            typedef void *mapped_t;\n\n            typedef mfc_map_iterator<X, key_t, mapped_t> mutable_iterator;\n            typedef mutable_iterator const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CMapStringToOb > :\n        mfc_map_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef ::CString key_t;\n            typedef ::CObject *mapped_t;\n\n            typedef mfc_map_iterator<X, key_t, mapped_t> mutable_iterator;\n            typedef mutable_iterator const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CMapStringToPtr > :\n        mfc_map_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef ::CString key_t;\n            typedef void *mapped_t;\n\n            typedef mfc_map_iterator<X, key_t, mapped_t> mutable_iterator;\n            typedef mutable_iterator const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CMapStringToString > :\n    #if !defined(BOOST_RANGE_MFC_NO_CPAIR)\n        mfc_cpair_map_functions\n    #else\n        mfc_map_functions\n    #endif\n    {\n        template< class X >\n        struct meta\n        {\n    #if !defined(BOOST_RANGE_MFC_NO_CPAIR)\n            typedef typename X::CPair pair_t;\n\n            typedef mfc_cpair_map_iterator<X, pair_t> mutable_iterator;\n            typedef mfc_cpair_map_iterator<X const, pair_t const> const_iterator;\n    #else\n            typedef ::CString key_t;\n            typedef ::CString mapped_t;\n\n            typedef mfc_map_iterator<X, key_t, mapped_t> mutable_iterator;\n            typedef mutable_iterator const_iterator;\n    #endif\n        };\n    };\n\n\n    template< >\n    struct customization< ::CMapWordToOb > :\n        mfc_map_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef WORD key_t;\n            typedef ::CObject *mapped_t;\n\n            typedef mfc_map_iterator<X, key_t, mapped_t> mutable_iterator;\n            typedef mutable_iterator const_iterator;\n        };\n    };\n\n\n    template< >\n    struct customization< ::CMapWordToPtr > :\n        mfc_map_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef WORD key_t;\n            typedef void *mapped_t;\n\n            typedef mfc_map_iterator<X, key_t, mapped_t> mutable_iterator;\n            typedef mutable_iterator const_iterator;\n        };\n    };\n\n\n    // templates\n    //\n\n    template< class Type, class ArgType >\n    struct customization< ::CArray<Type, ArgType> > :\n        array_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef Type val_t;\n\n            typedef val_t *mutable_iterator;\n            typedef val_t const *const_iterator;\n        };\n    };\n\n\n    template< class Type, class ArgType >\n    struct customization< ::CList<Type, ArgType> > :\n        list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef Type val_t;\n\n            typedef list_iterator<X, val_t> mutable_iterator;\n    #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)\n            typedef list_iterator<X const, val_t const> const_iterator;\n    #else\n            typedef list_iterator<X const, val_t const, val_t const> const_iterator;\n    #endif\n        };\n    };\n\n\n    template< class Key, class ArgKey, class Mapped, class ArgMapped >\n    struct customization< ::CMap<Key, ArgKey, Mapped, ArgMapped> > :\n    #if !defined(BOOST_RANGE_MFC_NO_CPAIR)\n        mfc_cpair_map_functions\n    #else\n        mfc_map_functions\n    #endif\n    {\n        template< class X >\n        struct meta\n        {\n    #if !defined(BOOST_RANGE_MFC_NO_CPAIR)\n            typedef typename X::CPair pair_t;\n\n            typedef mfc_cpair_map_iterator<X, pair_t> mutable_iterator;\n            typedef mfc_cpair_map_iterator<X const, pair_t const> const_iterator;\n    #else\n            typedef Key key_t;\n            typedef Mapped mapped_t;\n\n            typedef mfc_map_iterator<X, key_t, mapped_t> mutable_iterator;\n            typedef mutable_iterator const_iterator;\n    #endif            \n        };\n    };\n\n\n    template< class BaseClass, class PtrType >\n    struct customization< ::CTypedPtrArray<BaseClass, PtrType> >\n    {\n        template< class X >\n        struct fun\n        {\n            typedef typename remove_pointer<PtrType>::type val_t;\n\n            typedef typename mpl::if_< is_const<X>,\n                val_t const,\n                val_t\n            >::type val_t_;\n\n            typedef val_t_ * const result_type;\n\n            template< class PtrType_ >\n            result_type operator()(PtrType_ p) const\n            {\n                return static_cast<result_type>(p);\n            }\n        };\n\n        template< class X >\n        struct meta\n        {\n            typedef typename compatible_mutable_iterator<BaseClass>::type miter_t;\n            typedef typename range_const_iterator<BaseClass>::type citer_t;\n\n            typedef transform_iterator<fun<X>, miter_t> mutable_iterator;\n            typedef transform_iterator<fun<X const>, citer_t> const_iterator;\n        };\n\n        template< class Iterator, class X >\n        Iterator begin(X& x)\n        {\n            return Iterator(boost::begin<BaseClass>(x), fun<X>());\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return Iterator(boost::end<BaseClass>(x), fun<X>());\n        }\n    };\n\n\n    template< class BaseClass, class PtrType >\n    struct customization< ::CTypedPtrList<BaseClass, PtrType> > :\n        list_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef typename remove_pointer<PtrType>::type val_t;\n\n            // not l-value\n            typedef list_iterator<X, val_t * const, val_t * const> mutable_iterator;\n            typedef list_iterator<X const, val_t const * const, val_t const * const> const_iterator;\n        };\n    };\n\n\n    template< class BaseClass, class KeyPtrType, class MappedPtrType >\n    struct customization< ::CTypedPtrMap<BaseClass, KeyPtrType, MappedPtrType> > :\n        mfc_map_functions\n    {\n        template< class X >\n        struct meta\n        {\n            typedef mfc_map_iterator<X, KeyPtrType, MappedPtrType> mutable_iterator;\n            typedef mutable_iterator const_iterator;\n        };\n    };\n\n\n    // strings\n    //\n\n#if defined(BOOST_RANGE_MFC_HAS_LEGACY_STRING)\n\n    template< >\n    struct customization< ::CString >\n    {\n        template< class X >\n        struct meta\n        {\n            // LPTSTR/LPCTSTR is not always defined in <tchar.h>.\n            typedef TCHAR *mutable_iterator;\n            typedef TCHAR const *const_iterator;\n        };\n\n        template< class Iterator, class X >\n        typename mutable_<Iterator, X>::type begin(X& x)\n        {\n            return x.GetBuffer(0);\n        }\n\n        template< class Iterator, class X >\n        Iterator begin(X const& x)\n        {\n            return x;\n        }\n\n        template< class Iterator, class X >\n        Iterator end(X& x)\n        {\n            return begin<Iterator>(x) + x.GetLength();\n        }\n    };\n\n#endif // defined(BOOST_RANGE_MFC_HAS_LEGACY_STRING)\n\n\n} } // namespace boost::range_detail_microsoft\n\n\n\n\n// range customizations\n//\n\n\n// arrays\n//\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CByteArray\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CDWordArray\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CStringArray\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CUIntArray\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CWordArray\n)\n\n\n// lists\n//\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CObList\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CPtrList\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CStringList\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CObArray\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CPtrArray\n)\n\n\n// maps\n//\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CMapPtrToWord\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CMapPtrToPtr\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CMapStringToOb\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CMapStringToPtr\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CMapStringToString\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CMapWordToOb\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CMapWordToPtr\n)\n\n\n// templates\n//\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CArray, 2\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CList, 2\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CMap, 4\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CTypedPtrArray, 2\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CTypedPtrList, 2\n)\n\nBOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE(\n    boost::range_detail_microsoft::using_type_as_tag,\n    BOOST_PP_NIL, CTypedPtrMap, 3\n)\n\n\n// strings\n//\n#if defined(BOOST_RANGE_MFC_HAS_LEGACY_STRING)\n\n    BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE(\n        boost::range_detail_microsoft::using_type_as_tag,\n        BOOST_PP_NIL, CString\n    )\n\n#endif\n\n\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/mfc_map.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Adam D. Walling 2012. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ADAPTOR_MFC_MAP_HPP\n#define BOOST_RANGE_ADAPTOR_MFC_MAP_HPP\n\n#if !defined(BOOST_RANGE_MFC_NO_CPAIR)\n\n#include <boost/range/mfc.hpp>\n#include <boost/range/adaptor/map.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        // CMap and CMapStringToString range iterators return CPair,\n        // which has a key and value member. Other MFC range iterators\n        // already return adapted std::pair objects. This allows usage\n        // of the map_keys and map_values range adaptors with CMap \n        // and CMapStringToString\n        \n        // CPair has a VALUE value member, and a KEY key member; we will\n        // use VALUE& as the result_type consistent with CMap::operator[]\n        \n        // specialization for CMap \n        template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>\n        struct select_first< CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> >\n        {\n            typedef BOOST_DEDUCED_TYPENAME CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> map_type;\n            typedef BOOST_DEDUCED_TYPENAME range_reference<const map_type>::type argument_type;\n            typedef BOOST_DEDUCED_TYPENAME const KEY& result_type;\n\n            result_type operator()( argument_type r ) const\n            {\n                return r.key;\n            }\n        };\n\n        template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>\n        struct select_second_mutable< CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> >\n        {\n            typedef BOOST_DEDUCED_TYPENAME CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> map_type;\n            typedef BOOST_DEDUCED_TYPENAME range_reference<map_type>::type argument_type;\n            typedef BOOST_DEDUCED_TYPENAME VALUE& result_type;\n\n            result_type operator()( argument_type r ) const\n            {\n                return r.value;\n            }\n        };\n\n        template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>\n        struct select_second_const< CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> >\n        {\n            typedef BOOST_DEDUCED_TYPENAME CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> map_type;\n            typedef BOOST_DEDUCED_TYPENAME range_reference<const map_type>::type argument_type;\n            typedef BOOST_DEDUCED_TYPENAME const VALUE& result_type;\n\n            result_type operator()( argument_type r ) const\n            {\n                return r.value;\n            }\n        };\n\n\n        // specialization for CMapStringToString\n        template<>\n        struct select_first< CMapStringToString >\n        {\n            typedef range_reference<const CMapStringToString>::type argument_type;\n            typedef const CString& result_type;\n\n            result_type operator()( argument_type r ) const\n            {\n                return r.key;\n            }\n        };\n\n        template<>\n        struct select_second_mutable< CMapStringToString >\n        {\n            typedef range_reference<CMapStringToString>::type argument_type;\n            typedef CString& result_type;\n\n            result_type operator()( argument_type r ) const\n            {\n                return r.value;\n            }\n        };\n\n        template<>\n        struct select_second_const< CMapStringToString >\n        {\n            typedef range_reference<const CMapStringToString>::type argument_type;\n            typedef const CString& result_type;\n\n            result_type operator()( argument_type r ) const\n            {\n                return r.value;\n            }\n        };\n    } // 'range_detail'\n} // 'boost'\n\n#endif // !defined(BOOST_RANGE_MFC_NO_CPAIR)\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/mutable_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP\n#define BOOST_RANGE_MUTABLE_ITERATOR_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n\n#include <boost/range/range_fwd.hpp>\n#include <boost/range/detail/extract_optional_type.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <cstddef>\n#include <utility>\n\nnamespace boost\n{\n\n    //////////////////////////////////////////////////////////////////////////\n    // default\n    //////////////////////////////////////////////////////////////////////////\n    \n    namespace range_detail\n    {\n\nBOOST_RANGE_EXTRACT_OPTIONAL_TYPE( iterator )\n\ntemplate< typename C >\nstruct range_mutable_iterator\n        : range_detail::extract_iterator<\n            BOOST_DEDUCED_TYPENAME remove_reference<C>::type>\n{};\n\n//////////////////////////////////////////////////////////////////////////\n// pair\n//////////////////////////////////////////////////////////////////////////\n\ntemplate< typename Iterator >\nstruct range_mutable_iterator< std::pair<Iterator,Iterator> >\n{\n    typedef Iterator type;\n};\n\n//////////////////////////////////////////////////////////////////////////\n// array\n//////////////////////////////////////////////////////////////////////////\n\ntemplate< typename T, std::size_t sz >\nstruct range_mutable_iterator< T[sz] >\n{\n    typedef T* type;\n};\n\n    } // namespace range_detail\n\ntemplate<typename C, typename Enabler=void>\nstruct range_mutable_iterator\n        : range_detail::range_mutable_iterator<\n            BOOST_DEDUCED_TYPENAME remove_reference<C>::type\n        >\n{\n};\n\n} // namespace boost\n\n#include <boost/range/detail/msvc_has_iterator_workaround.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/numeric.hpp",
    "content": "// Copyright 2009-2014 Neil Groves.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// Copyright 2006 Thorsten Ottosen.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// Copyright 2004 Eric Niebler.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//   Contains range-based versions of the numeric std algorithms\n//\n#if defined(_MSC_VER)\n    #pragma once\n#endif\n\n#ifndef BOOST_RANGE_NUMERIC_HPP\n#define BOOST_RANGE_NUMERIC_HPP\n\n#include <boost/config.hpp>\n#include <boost/assert.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/category.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/distance.hpp>\n#include <boost/range/size.hpp>\n#include <numeric>\n\n\nnamespace boost\n{\n    template<class SinglePassRange, class Value>\n    inline Value accumulate(const SinglePassRange& rng, Value init)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((\n            SinglePassRangeConcept<const SinglePassRange>));\n\n        return std::accumulate(boost::begin(rng), boost::end(rng), init);\n    }\n\n    template<class SinglePassRange, class Value, class BinaryOperation>\n    inline Value accumulate(const SinglePassRange& rng, Value init,\n                            BinaryOperation op)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange> ));\n\n        return std::accumulate(boost::begin(rng), boost::end(rng), init, op);\n    }\n\n    namespace range_detail\n    {\n        template<class SinglePassRange1, class SinglePassRange2>\n        inline bool inner_product_precondition(\n            const SinglePassRange1&,\n            const SinglePassRange2&,\n            std::input_iterator_tag,\n            std::input_iterator_tag)\n        {\n            return true;\n        }\n\n        template<class SinglePassRange1, class SinglePassRange2>\n        inline bool inner_product_precondition(\n            const SinglePassRange1& rng1,\n            const SinglePassRange2& rng2,\n            std::forward_iterator_tag,\n            std::forward_iterator_tag)\n        {\n            return boost::size(rng2) >= boost::size(rng1);\n        }\n\n    } // namespace range_detail\n\n    template<\n        class SinglePassRange1,\n        class SinglePassRange2,\n        class Value\n    >\n    inline Value inner_product(\n        const SinglePassRange1& rng1,\n        const SinglePassRange2& rng2,\n        Value                   init)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((\n            SinglePassRangeConcept<const SinglePassRange1>));\n\n        BOOST_RANGE_CONCEPT_ASSERT((\n            SinglePassRangeConcept<const SinglePassRange2>));\n\n        BOOST_ASSERT(\n            range_detail::inner_product_precondition(\n                    rng1, rng2,\n                    typename range_category<const SinglePassRange1>::type(),\n                    typename range_category<const SinglePassRange2>::type()));\n\n        return std::inner_product(\n            boost::begin(rng1), boost::end(rng1),\n            boost::begin(rng2), init);\n    }\n\n    template<\n        class SinglePassRange1,\n        class SinglePassRange2,\n        class Value,\n        class BinaryOperation1,\n        class BinaryOperation2\n    >\n    inline Value inner_product(\n        const SinglePassRange1& rng1,\n        const SinglePassRange2& rng2,\n        Value                   init,\n        BinaryOperation1        op1,\n        BinaryOperation2        op2)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange1>));\n\n        BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange2>));\n\n        BOOST_ASSERT(\n            range_detail::inner_product_precondition(\n                rng1, rng2,\n                typename range_category<const SinglePassRange1>::type(),\n                typename range_category<const SinglePassRange2>::type()));\n\n        return std::inner_product(\n            boost::begin(rng1), boost::end(rng1),\n            boost::begin(rng2), init, op1, op2);\n    }\n\n    template<class SinglePassRange, class OutputIterator>\n    inline OutputIterator partial_sum(const SinglePassRange& rng,\n                                      OutputIterator result)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n        return std::partial_sum(boost::begin(rng), boost::end(rng), result);\n    }\n\n    template<class SinglePassRange, class OutputIterator, class BinaryOperation>\n    inline OutputIterator partial_sum(\n        const SinglePassRange&  rng,\n        OutputIterator          result,\n        BinaryOperation         op)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n        return std::partial_sum(boost::begin(rng), boost::end(rng), result, op);\n    }\n\n    template<class SinglePassRange, class OutputIterator>\n    inline OutputIterator adjacent_difference(\n        const SinglePassRange&  rng,\n        OutputIterator          result)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n        return std::adjacent_difference(boost::begin(rng), boost::end(rng),\n                                        result);\n    }\n\n    template<class SinglePassRange, class OutputIterator, class BinaryOperation>\n    inline OutputIterator adjacent_difference(\n        const SinglePassRange&  rng,\n        OutputIterator          result,\n        BinaryOperation         op)\n    {\n        BOOST_RANGE_CONCEPT_ASSERT((\n                SinglePassRangeConcept<const SinglePassRange>));\n\n        return std::adjacent_difference(boost::begin(rng), boost::end(rng),\n                                        result, op);\n    }\n\n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/pointer.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_POINTER_TYPE_HPP\n#define BOOST_RANGE_POINTER_TYPE_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n\nnamespace boost\n{\n    template< class T >\n    struct range_pointer\n            : iterator_pointer< BOOST_DEDUCED_TYPENAME range_iterator<T>::type >\n    { };\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/range_fwd.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2003-2004.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_RANGE_FWD_HPP_INCLUDED\n#define BOOST_RANGE_RANGE_FWD_HPP_INCLUDED\n\nnamespace boost\n{\n\n// Extension points\n    template<typename C, typename Enabler>\n    struct range_iterator;\n\n    template<typename C, typename Enabler>\n    struct range_mutable_iterator;\n\n    template<typename C, typename Enabler>\n    struct range_const_iterator;\n\n// Core classes\n    template<typename IteratorT>\n    class iterator_range;\n\n    template<typename ForwardRange>\n    class sub_range;\n\n// Meta-functions\n    template<typename T>\n    struct range_category;\n\n    template<typename T>\n    struct range_difference;\n\n    template<typename T>\n    struct range_pointer;\n\n    template<typename T>\n    struct range_reference;\n\n    template<typename T>\n    struct range_reverse_iterator;\n\n    template<typename T>\n    struct range_size;\n\n    template<typename T>\n    struct range_value;\n\n    template<typename T>\n    struct has_range_iterator;\n\n    template<typename T>\n    struct has_range_const_iterator;\n\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/rbegin.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_RBEGIN_HPP\n#define BOOST_RANGE_RBEGIN_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/end.hpp>\n#include <boost/range/reverse_iterator.hpp>\n\nnamespace boost\n{\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\nrbegin( C& c )\n{\n    return BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type( boost::end( c ) );\n}\n\n#else\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\nrbegin( C& c )\n{\n    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\n        iter_type;\n    return iter_type( boost::end( c ) );\n}\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type\nrbegin( const C& c )\n{\n    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type\n        iter_type;\n    return iter_type( boost::end( c ) );\n}\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const T>::type\nconst_rbegin( const T& r )\n{\n    return boost::rbegin( r );\n}\n\n} // namespace 'boost'\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/reference.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_REFERENCE_TYPE_HPP\n#define BOOST_RANGE_REFERENCE_TYPE_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n\nnamespace boost\n{\n    template< class T >\n    struct range_reference : iterator_reference< typename range_iterator<T>::type >\n    { };\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/rend.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_REND_HPP\n#define BOOST_RANGE_REND_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/begin.hpp>\n#include <boost/range/reverse_iterator.hpp>\n\nnamespace boost\n{\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\nrend( C& c )\n{\n    return BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type( boost::begin( c ) );\n}\n\n#else\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\nrend( C& c )\n{\n    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\n               iter_type;\n    return iter_type( boost::begin( c ) );\n}\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type\nrend( const C& c )\n{\n    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type\n        iter_type;\n    return iter_type( boost::begin( c ) );\n}\n\n#endif\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const T>::type\nconst_rend( const T& r )\n{\n    return boost::rend( r );\n}\n\n} // namespace 'boost'\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/result_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_RESULT_ITERATOR_HPP\n#define BOOST_RANGE_RESULT_ITERATOR_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/iterator.hpp>\n\nnamespace boost\n{\n    //\n    // This interface is deprecated, use range_iterator<T>\n    //\n    \n    template< typename C >\n    struct range_result_iterator : range_iterator<C>\n    { };\n    \n} // namespace boost\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/reverse_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_REVERSE_ITERATOR_HPP\n#define BOOST_RANGE_REVERSE_ITERATOR_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/iterator/reverse_iterator.hpp>\n\n\nnamespace boost\n{\n    //////////////////////////////////////////////////////////////////////////\n    // default\n    //////////////////////////////////////////////////////////////////////////\n    \n    template< typename T >\n    struct range_reverse_iterator\n    {\n        typedef reverse_iterator< \n            BOOST_DEDUCED_TYPENAME range_iterator<\n                BOOST_DEDUCED_TYPENAME remove_reference<T>::type>::type > type;\n    };\n    \n\n} // namespace boost\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/reverse_result_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_REVERSE_RESULT_ITERATOR_HPP\n#define BOOST_RANGE_REVERSE_RESULT_ITERATOR_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/reverse_iterator.hpp>\n\nnamespace boost\n{\n    //\n    // This interface is deprecated, use range_reverse_iterator<T>\n    //\n   \n    template< typename C >\n    struct range_reverse_result_iterator : range_reverse_iterator<C>\n    { };\n    \n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/size.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_SIZE_HPP\n#define BOOST_RANGE_SIZE_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/size_type.hpp>\n#include <boost/range/detail/has_member_size.hpp>\n#include <boost/assert.hpp>\n#include <boost/cstdint.hpp>\n#include <boost/utility.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\n        template<class SinglePassRange>\n        inline typename ::boost::enable_if<\n            has_member_size<SinglePassRange>,\n            typename range_size<const SinglePassRange>::type\n        >::type\n        range_calculate_size(const SinglePassRange& rng)\n        {\n            return rng.size();\n        }\n\n        template<class SinglePassRange>\n        inline typename disable_if<\n            has_member_size<SinglePassRange>,\n            typename range_size<const SinglePassRange>::type\n        >::type\n        range_calculate_size(const SinglePassRange& rng)\n        {\n            return std::distance(boost::begin(rng), boost::end(rng));\n        }\n    }\n\n    template<class SinglePassRange>\n    inline typename range_size<const SinglePassRange>::type\n    size(const SinglePassRange& rng)\n    {\n// Very strange things happen on some compilers that have the range concept\n// asserts disabled. This preprocessor condition is clearly redundant on a\n// working compiler but is vital for at least some compilers such as clang 4.2\n// but only on the Mac!\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT == 1\n        BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept<SinglePassRange>));\n#endif\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\n        using namespace range_detail;\n#endif\n\n        return range_calculate_size(rng);\n    }\n\n} // namespace 'boost'\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/size_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_SIZE_TYPE_HPP\n#define BOOST_RANGE_SIZE_TYPE_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/concepts.hpp>\n#include <boost/range/has_range_iterator.hpp>\n\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/make_unsigned.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <cstddef>\n#include <utility>\n\nnamespace boost\n{\n    namespace detail\n    {\n\n        //////////////////////////////////////////////////////////////////////////\n        // default\n        //////////////////////////////////////////////////////////////////////////\n\n        template<typename T>\n        class has_size_type\n        {\n            typedef char no_type;\n            struct yes_type { char dummy[2]; };\n\n            template<typename C>\n            static yes_type test(BOOST_DEDUCED_TYPENAME C::size_type x);\n\n            template<typename C>\n            static no_type test(...);\n\n        public:\n            static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);\n        };\n\n        template<typename C, typename Enabler=void>\n        struct range_size_\n        {\n            typedef BOOST_DEDUCED_TYPENAME make_unsigned<\n                BOOST_DEDUCED_TYPENAME range_difference<C>::type\n            >::type type;\n        };\n\n        template<typename C>\n        struct range_size_<\n            C,\n            BOOST_DEDUCED_TYPENAME ::boost::enable_if<has_size_type<C>, void>::type\n        >\n        {\n            typedef BOOST_DEDUCED_TYPENAME C::size_type type;\n        };\n\n        template<typename C, bool B = range_detail::has_type< range_iterator<C> >::value>\n        struct range_size\n        { };\n\n        template<typename C>\n        struct range_size<C, true>\n          : range_size_<C>\n        { };\n    }\n\n    template< class T >\n    struct range_size :\n        detail::range_size<T>\n    { };\n\n    template< class T >\n    struct range_size<const T > :\n        detail::range_size<T>\n    { };\n\n} // namespace boost\n\n\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/sub_range.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009.\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_SUB_RANGE_HPP\n#define BOOST_RANGE_SUB_RANGE_HPP\n\n#include <boost/detail/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) \n    #pragma warning( push )\n    #pragma warning( disable : 4996 )\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/size_type.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/reference.hpp>\n#include <boost/range/algorithm/equal.hpp>\n#include <boost/assert.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<class ForwardRange, class TraversalTag>\nclass sub_range_base\n        : public iterator_range<\n            BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\n        >\n{\n    typedef iterator_range<\n        BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\n    > base;\n\nprotected:\n    typedef BOOST_DEDUCED_TYPENAME base::iterator_range_ iterator_range_;\n\npublic:\n    typedef BOOST_DEDUCED_TYPENAME range_value<ForwardRange>::type value_type;\n    typedef BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type iterator;\n    typedef BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type const_iterator;\n    typedef BOOST_DEDUCED_TYPENAME range_difference<ForwardRange>::type difference_type;\n    typedef BOOST_DEDUCED_TYPENAME range_size<ForwardRange>::type size_type;\n    typedef BOOST_DEDUCED_TYPENAME range_reference<ForwardRange>::type reference;\n    typedef BOOST_DEDUCED_TYPENAME range_reference<const ForwardRange>::type const_reference;\n\n    sub_range_base()\n    {\n    }\n\n    template<class Iterator>\n    sub_range_base(Iterator first, Iterator last)\n        : base(first, last)\n    {\n    }\n\n    reference front()\n    {\n        return base::front();\n    }\n\n    const_reference front() const\n    {\n        return base::front();\n    }\n};\n\ntemplate<class ForwardRange>\nclass sub_range_base<ForwardRange, bidirectional_traversal_tag>\n        : public sub_range_base<ForwardRange, forward_traversal_tag>\n{\n    typedef sub_range_base<ForwardRange, forward_traversal_tag> base;\npublic:\n    sub_range_base()\n    {\n    }\n\n    template<class Iterator>\n    sub_range_base(Iterator first, Iterator last)\n        : base(first, last)\n    {\n    }\n\n    BOOST_DEDUCED_TYPENAME base::reference back()\n    {\n        return base::back();\n    }\n\n    BOOST_DEDUCED_TYPENAME base::const_reference back() const\n    {\n        return base::back();\n    }\n};\n\ntemplate<class ForwardRange>\nclass sub_range_base<ForwardRange, random_access_traversal_tag>\n        : public sub_range_base<ForwardRange, bidirectional_traversal_tag>\n{\n    typedef sub_range_base<ForwardRange, bidirectional_traversal_tag> base;\n\npublic:\n    sub_range_base()\n    {\n    }\n\n    template<class Iterator>\n    sub_range_base(Iterator first, Iterator last)\n        : base(first, last)\n    {\n    }\n\n    BOOST_DEDUCED_TYPENAME base::reference\n    operator[](BOOST_DEDUCED_TYPENAME base::difference_type n)\n    {\n        return this->begin()[n];\n    }\n\n    BOOST_DEDUCED_TYPENAME base::const_reference\n    operator[](BOOST_DEDUCED_TYPENAME base::difference_type n) const\n    {\n        return this->begin()[n];\n    }\n};\n\n    } // namespace range_detail\n\n    template<class ForwardRange>\n    class sub_range\n        : public range_detail::sub_range_base<\n                ForwardRange,\n                BOOST_DEDUCED_TYPENAME iterator_traversal<\n                    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\n                >::type\n            >\n    {\n        typedef BOOST_DEDUCED_TYPENAME range_iterator<\n            ForwardRange\n        >::type iterator_t;\n\n        typedef range_detail::sub_range_base<\n            ForwardRange,\n            BOOST_DEDUCED_TYPENAME iterator_traversal<\n                BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type\n            >::type\n        > base;\n\n        typedef BOOST_DEDUCED_TYPENAME base::impl impl;\n\n    protected:\n        typedef BOOST_DEDUCED_TYPENAME base::iterator_range_ iterator_range_;\n\n    private:\n        template<class Source>\n        struct is_compatible_range\n            : is_convertible<\n                BOOST_DEDUCED_TYPENAME mpl::eval_if<\n                    has_range_iterator<Source>,\n                    range_iterator<Source>,\n                    mpl::identity<void>\n                >::type,\n                BOOST_DEDUCED_TYPENAME base::iterator\n            >\n        {\n        };\n\n    public:\n        sub_range()\n        { }\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500) ) \n        sub_range(const sub_range& r)\n            : base(impl::adl_begin(const_cast<base&>(static_cast<const base&>(r))),\n                   impl::adl_end(const_cast<base&>(static_cast<const base&>(r))))\n        { }  \n#endif\n\n        template< class ForwardRange2 >\n        sub_range(\n            ForwardRange2& r,\n            BOOST_DEDUCED_TYPENAME ::boost::enable_if<\n                is_compatible_range<ForwardRange2>\n            >::type* = 0\n        )\n        : base(impl::adl_begin(r), impl::adl_end(r))\n        {\n        }\n\n        template< class ForwardRange2 >\n        sub_range(\n            const ForwardRange2& r,\n            BOOST_DEDUCED_TYPENAME ::boost::enable_if<\n                is_compatible_range<const ForwardRange2>\n            >::type* = 0\n        )\n        : base(impl::adl_begin(r), impl::adl_end(r))\n        {\n        }\n\n        BOOST_DEDUCED_TYPENAME base::const_iterator begin() const\n        {\n            return base::begin();\n        }\n\n        BOOST_DEDUCED_TYPENAME base::iterator begin()\n        {\n            return base::begin();\n        }\n\n        BOOST_DEDUCED_TYPENAME base::const_iterator end() const\n        {\n            return base::end();\n        }\n\n        BOOST_DEDUCED_TYPENAME base::iterator end()\n        {\n            return base::end();\n        }\n\n        template< class Iter >\n        sub_range( Iter first, Iter last ) :\n            base( first, last )\n        { }\n\n        template<class ForwardRange2>\n        BOOST_DEDUCED_TYPENAME ::boost::enable_if<\n            is_compatible_range<ForwardRange2>,\n            sub_range&\n        >::type\n        operator=(ForwardRange2& r)\n        {\n            iterator_range_::operator=( r );\n            return *this;\n        }\n\n        template<class ForwardRange2>\n        BOOST_DEDUCED_TYPENAME ::boost::enable_if<\n            is_compatible_range<const ForwardRange2>,\n            sub_range&\n        >::type\n        operator=( const ForwardRange2& r )\n        {\n            iterator_range_::operator=( r );\n            return *this;\n        }   \n\n        sub_range& operator=( const sub_range& r )\n        {\n            iterator_range_::operator=( static_cast<const iterator_range_&>(r) );\n            return *this;            \n        }\n        \n        sub_range& advance_begin(\n            BOOST_DEDUCED_TYPENAME base::difference_type n)\n        {\n            std::advance(this->m_Begin, n);\n            return *this;\n        }\n        \n        sub_range& advance_end(\n            BOOST_DEDUCED_TYPENAME base::difference_type n)\n        {\n            std::advance(this->m_End, n);\n            return *this;\n        }\n    };\n\n} // namespace 'boost'\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) \n    #pragma warning( pop )\n#endif\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/traversal.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2014. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_TRAVERSAL_HPP\n#define BOOST_RANGE_TRAVERSAL_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n\nnamespace boost\n{\n    template<typename SinglePassRange>\n    struct range_traversal\n        : iterator_traversal<typename range_iterator<SinglePassRange>::type>\n    {\n    };\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/range/value_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_VALUE_TYPE_HPP\n#define BOOST_RANGE_VALUE_TYPE_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n\n#include <boost/iterator/iterator_traits.hpp>\n\nnamespace boost\n{\n    template< class T >\n    struct range_value : iterator_value< typename range_iterator<T>::type >\n    { };\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/ref.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Fernandes\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_REF_HPP\n#define BOOST_REF_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/ref.hpp instead.\n\n#include <boost/core/ref.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/shared_ptr.hpp",
    "content": "#ifndef BOOST_SHARED_PTR_HPP_INCLUDED\n#define BOOST_SHARED_PTR_HPP_INCLUDED\n\n//\n//  shared_ptr.hpp\n//\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001-2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation.\n//\n\n#include <boost/smart_ptr/shared_ptr.hpp>\n\n#endif  // #ifndef BOOST_SHARED_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/allocate_shared_array.hpp",
    "content": "/*\n * Copyright (c) 2012-2014 Glen Joseph Fernandes\n * glenfe at live dot com\n *\n * Distributed under the Boost Software License,\n * Version 1.0. (See accompanying file LICENSE_1_0.txt\n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP\n#define BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP\n\n#include <boost/smart_ptr/detail/array_count_impl.hpp>\n#include <boost/smart_ptr/detail/sp_if_array.hpp>\n\nnamespace boost {\n    template<class T, class A>\n    inline typename boost::detail::sp_if_array<T>::type\n    allocate_shared(const A& allocator, std::size_t size) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef boost::detail::ms_init_tag R1;\n        typedef boost::detail::as_allocator<A, T, R1> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        std::size_t n1 = size * boost::detail::array_total<T1>::size;\n        T1* p1 = 0;\n        T2* p2 = 0;\n        D1 d1;\n        A1 a1(allocator, size, &p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n        boost::detail::as_init(allocator, p2, n1);\n#else\n        boost::detail::ms_init(p2, n1);\n#endif\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T, class A>\n    inline typename boost::detail::sp_if_size_array<T>::type\n    allocate_shared(const A& allocator) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef boost::detail::ms_init_tag R1;\n        typedef boost::detail::as_allocator<A, T, R1> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        enum {\n            N = boost::detail::array_total<T>::size\n        };\n        T1* p1 = 0;\n        T2* p2 = 0;\n        D1 d1;\n        A1 a1(allocator, &p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n        boost::detail::as_init(allocator, p2, N);\n#else\n        boost::detail::ms_init(p2, N);\n#endif\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T, class A>\n    inline typename boost::detail::sp_if_array<T>::type\n    allocate_shared(const A& allocator, std::size_t size,\n        const typename boost::detail::array_inner<T>::type& value) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef const T2 T3;\n        typedef boost::detail::ms_init_tag R1;\n        typedef boost::detail::as_allocator<A, T, R1> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        enum {\n            M = boost::detail::array_total<T1>::size\n        };\n        std::size_t n1 = M * size;\n        T1* p1 = 0;\n        T2* p2 = 0;\n        T3* p3 = reinterpret_cast<T3*>(&value);\n        D1 d1;\n        A1 a1(allocator, size, &p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n        boost::detail::as_init<T2, A, M>(allocator, p2, n1, p3);\n#else\n        boost::detail::ms_init<T2, M>(p2, n1, p3);\n#endif\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T, class A>\n    inline typename boost::detail::sp_if_size_array<T>::type\n    allocate_shared(const A& allocator, \n        const typename boost::detail::array_inner<T>::type& value) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef const T2 T3;\n        typedef boost::detail::ms_init_tag R1;\n        typedef boost::detail::as_allocator<A, T, R1> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        enum {\n            N = boost::detail::array_total<T>::size,\n            M = boost::detail::array_total<T1>::size\n        };\n        T1* p1 = 0;\n        T2* p2 = 0;\n        T3* p3 = reinterpret_cast<T3*>(&value);\n        D1 d1;\n        A1 a1(allocator, &p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n        boost::detail::as_init<T2, A, M>(allocator, p2, N, p3);\n#else\n        boost::detail::ms_init<T2,  M>(p2, N, p3);\n#endif\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T, class A>\n    inline typename boost::detail::sp_if_array<T>::type\n    allocate_shared_noinit(const A& allocator, std::size_t size) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef boost::detail::ms_noinit_tag R1;\n        typedef boost::detail::as_allocator<A, T, R1> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        std::size_t n1 = size * boost::detail::array_total<T1>::size;\n        T1* p1 = 0;\n        T2* p2 = 0;\n        D1 d1;\n        A1 a1(allocator, size, &p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n        boost::detail::ms_noinit(p2, n1);\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T, class A>\n    inline typename boost::detail::sp_if_size_array<T>::type\n    allocate_shared_noinit(const A& allocator) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef boost::detail::ms_noinit_tag R1;\n        typedef boost::detail::as_allocator<A, T, R1> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        enum {\n            N = boost::detail::array_total<T>::size\n        };\n        T1* p1 = 0;\n        T2* p2 = 0;\n        D1 d1;\n        A1 a1(allocator, &p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n        boost::detail::ms_noinit(p2, N);\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/bad_weak_ptr.hpp",
    "content": "#ifndef BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED\n#define BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/smart_ptr/bad_weak_ptr.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <exception>\n\n#ifdef __BORLANDC__\n# pragma warn -8026     // Functions with excep. spec. are not expanded inline\n#endif\n\nnamespace boost\n{\n\n// The standard library that comes with Borland C++ 5.5.1, 5.6.4\n// defines std::exception and its members as having C calling\n// convention (-pc). When the definition of bad_weak_ptr\n// is compiled with -ps, the compiler issues an error.\n// Hence, the temporary #pragma option -pc below.\n\n#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564\n# pragma option push -pc\n#endif\n\nclass bad_weak_ptr: public std::exception\n{\npublic:\n\n    virtual char const * what() const throw()\n    {\n        return \"tr1::bad_weak_ptr\";\n    }\n};\n\n#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564\n# pragma option pop\n#endif\n\n} // namespace boost\n\n#ifdef __BORLANDC__\n# pragma warn .8026     // Functions with excep. spec. are not expanded inline\n#endif\n\n#endif  // #ifndef BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/array_allocator.hpp",
    "content": "/*\n * Copyright (c) 2012-2014 Glen Joseph Fernandes \n * glenfe at live dot com\n *\n * Distributed under the Boost Software License, \n * Version 1.0. (See accompanying file LICENSE_1_0.txt \n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_ALLOCATOR_HPP\n#define BOOST_SMART_PTR_DETAIL_ARRAY_ALLOCATOR_HPP\n\n#include <boost/align/align.hpp>\n#include <boost/smart_ptr/detail/array_traits.hpp>\n#include <boost/smart_ptr/detail/array_utility.hpp>\n#include <boost/type_traits/alignment_of.hpp>\n\nnamespace boost {\n    namespace detail {\n        struct ms_init_tag   { };\n        struct ms_noinit_tag { };\n\n        template<class T>\n        struct ms_allocator_state;\n\n        template<class T>\n        struct ms_allocator_state<T[]> {\n            typedef typename array_base<T>::type type;\n\n            ms_allocator_state(std::size_t size_,\n                type** result_)\n                : size(size_ * array_total<T>::size),\n                  result(result_) {\n            }\n\n            std::size_t size;\n\n            union {\n                type** result;\n                type* object;\n            };\n        };\n\n        template<class T, std::size_t N>\n        struct ms_allocator_state<T[N]> {\n            typedef typename array_base<T>::type type;\n\n            ms_allocator_state(type** result_)\n                : result(result_) {\n            }\n\n            enum {\n                size = array_total<T[N]>::size\n            };\n\n            union {\n                type** result;\n                type* object;\n            };\n        };\n\n        template<class A, class T, class R>\n        class as_allocator\n            : public A {\n            template<class A_, class T_, class R_>\n            friend class as_allocator;\n\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n            typedef std::allocator_traits<A> AT;\n            typedef typename AT::template rebind_alloc<char> CA;\n            typedef typename AT::template rebind_traits<char> CT;\n#else\n            typedef typename A::template rebind<char>::other CA;\n#endif\n\n        public:\n            typedef A allocator_type;\n\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n            typedef typename AT::value_type value_type;\n            typedef typename AT::pointer pointer;\n            typedef typename AT::const_pointer const_pointer;\n            typedef typename AT::void_pointer void_pointer;\n            typedef typename AT::const_void_pointer const_void_pointer;\n            typedef typename AT::size_type size_type;\n            typedef typename AT::difference_type difference_type;\n#else\n            typedef typename A::value_type value_type;\n            typedef typename A::pointer pointer;\n            typedef typename A::const_pointer const_pointer;\n            typedef typename A::size_type size_type;\n            typedef typename A::difference_type difference_type;\n            typedef typename A::reference reference;\n            typedef typename A::const_reference const_reference;\n            typedef void* void_pointer;\n            typedef const void* const_void_pointer;\n#endif\n\n            template<class U>\n            struct rebind {\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n                typedef as_allocator<typename AT::\n                    template rebind_alloc<U>, T, R> other;\n#else\n                typedef as_allocator<typename A::\n                    template rebind<U>::other, T, R> other;\n#endif\n            };\n\n            typedef typename array_base<T>::type type;\n\n            as_allocator(const A& allocator_, type** result)\n                : A(allocator_),\n                  data(result) {\n            }\n\n            as_allocator(const A& allocator_, std::size_t size,\n                type** result)\n                : A(allocator_),\n                  data(size, result) {\n            }\n\n            template<class U>\n            as_allocator(const as_allocator<U, T, R>& other)\n                : A(other.allocator()),\n                  data(other.data) {\n            }\n\n            pointer allocate(size_type count, const_void_pointer = 0) {\n                enum {\n                    M = boost::alignment_of<type>::value\n                };\n                std::size_t n1 = count * sizeof(value_type);\n                std::size_t n2 = data.size * sizeof(type);\n                std::size_t n3 = n2 + M;\n                CA ca(allocator());\n                void* p1 = ca.allocate(n1 + n3);\n                void* p2 = static_cast<char*>(p1) + n1;\n                (void)boost::alignment::align(M, n2, p2, n3);\n                *data.result = static_cast<type*>(p2);\n                return static_cast<value_type*>(p1);\n            }\n\n            void deallocate(pointer memory, size_type count) {\n                enum {\n                    M = boost::alignment_of<type>::value\n                };\n                std::size_t n1 = count * sizeof(value_type);\n                std::size_t n2 = data.size * sizeof(type) + M;\n                char* p1 = reinterpret_cast<char*>(memory);\n                CA ca(allocator());\n                ca.deallocate(p1, n1 + n2);\n            }\n\n            const A& allocator() const {\n                return static_cast<const A&>(*this);\n            }\n\n            A& allocator() {\n                return static_cast<A&>(*this);\n            }\n\n            void set(type* memory) {\n                data.object = memory;\n            }\n\n            void operator()() {\n                if (data.object) {\n                    R tag;\n                    release(tag);\n                }\n            }\n\n        private:\n            void release(ms_init_tag) {\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n                as_destroy(allocator(), data.object, data.size);\n#else\n                ms_destroy(data.object, data.size);\n#endif\n            }\n\n            void release(ms_noinit_tag) {\n                ms_destroy(data.object, data.size);\n            }\n\n            ms_allocator_state<T> data;\n        };\n\n        template<class A1, class A2, class T, class R>\n        bool operator==(const as_allocator<A1, T, R>& a1,\n            const as_allocator<A2, T, R>& a2) {\n            return a1.allocator() == a2.allocator();\n        }\n\n        template<class A1, class A2, class T, class R>\n        bool operator!=(const as_allocator<A1, T, R>& a1,\n            const as_allocator<A2, T, R>& a2) {\n            return a1.allocator() != a2.allocator();\n        }\n\n        template<class T, class Y = char>\n        class ms_allocator;\n\n        template<class T, class Y>\n        class ms_allocator {\n            template<class T_, class Y_>\n            friend class ms_allocator;\n\n        public:\n            typedef typename array_base<T>::type type;\n\n            typedef Y value_type;\n            typedef Y* pointer;\n            typedef const Y* const_pointer;\n            typedef std::size_t size_type;\n            typedef std::ptrdiff_t difference_type;\n            typedef Y& reference;\n            typedef const Y& const_reference;\n\n            template<class U>\n            struct rebind {\n                typedef ms_allocator<T, U> other;\n            };\n\n            ms_allocator(type** result)\n                : data(result) {\n            }\n\n            ms_allocator(std::size_t size, type** result)\n                : data(size, result) {\n            }\n\n            template<class U>\n            ms_allocator(const ms_allocator<T, U>& other)\n                : data(other.data) {\n            }\n\n            pointer allocate(size_type count, const void* = 0) {\n                enum {\n                    M = boost::alignment_of<type>::value\n                };\n                std::size_t n1 = count * sizeof(Y);\n                std::size_t n2 = data.size * sizeof(type);\n                std::size_t n3 = n2 + M;\n                void* p1 = ::operator new(n1 + n3);\n                void* p2 = static_cast<char*>(p1) + n1;\n                (void)boost::alignment::align(M, n2, p2, n3);\n                *data.result = static_cast<type*>(p2);\n                return static_cast<Y*>(p1);\n            }\n\n            void deallocate(pointer memory, size_type) {\n                void* p1 = memory;\n                ::operator delete(p1);\n            }\n\n#if defined(BOOST_NO_CXX11_ALLOCATOR)\n            pointer address(reference value) const {\n                return &value;\n            }\n\n            const_pointer address(const_reference value) const {\n                return &value;\n            }\n\n            size_type max_size() const {\n                enum {\n                    N = static_cast<std::size_t>(-1) / sizeof(Y)\n                };\n                return N;\n            }\n\n            void construct(pointer memory, const_reference value) {\n                void* p1 = memory;\n                ::new(p1) Y(value);\n            }\n\n            void destroy(pointer memory) {\n                (void)memory;\n                memory->~Y();\n            }\n#endif\n\n            void set(type* memory) {\n                data.object = memory;\n            }\n\n            void operator()() {\n                if (data.object) {\n                    ms_destroy(data.object, data.size);\n                }\n            }\n\n        private:\n            ms_allocator_state<T> data;\n        };\n\n        template<class T, class Y1, class Y2>\n        bool operator==(const ms_allocator<T, Y1>&,\n            const ms_allocator<T, Y2>&) {\n            return true;\n        }\n\n        template<class T, class Y1, class Y2>\n        bool operator!=(const ms_allocator<T, Y1>&,\n            const ms_allocator<T, Y2>&) {\n            return false;\n        }\n\n        class ms_in_allocator_tag {\n        public:\n            void operator()(const void*) {\n            }\n        };\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/array_count_impl.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Joseph Fernandes \n * glenfe at live dot com\n *\n * Distributed under the Boost Software License, \n * Version 1.0. (See accompanying file LICENSE_1_0.txt \n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP\n#define BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP\n\n#include <boost/smart_ptr/detail/array_allocator.hpp>\n#include <boost/smart_ptr/detail/sp_counted_impl.hpp>\n\nnamespace boost {\n    namespace detail {\n        template<class P, class A>\n        class sp_counted_impl_pda<P, ms_in_allocator_tag, A>\n            : public sp_counted_base {\n            typedef ms_in_allocator_tag D;\n            typedef sp_counted_impl_pda<P, D, A> Y;\n        public:\n            sp_counted_impl_pda(P, D, const A& allocator_)\n                : allocator(allocator_) {\n            }\n\n            virtual void dispose() {\n                allocator();\n            }\n\n            virtual void destroy() {\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n                typedef typename std::allocator_traits<A>::\n                    template rebind_alloc<Y> YA;\n                typedef typename std::allocator_traits<A>::\n                    template rebind_traits<Y> YT;\n#else\n                typedef typename A::template rebind<Y>::other YA;\n#endif\n                YA a1(allocator);\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n                YT::destroy(a1, this);\n                YT::deallocate(a1, this, 1);\n#else\n                this->~Y();\n                a1.deallocate(this, 1);\n#endif                \n            }\n\n            virtual void* get_deleter(const sp_typeinfo&) {\n                return &reinterpret_cast<char&>(allocator);\n            }\n\n            virtual void* get_untyped_deleter() {\n                return &reinterpret_cast<char&>(allocator);\n            }\n\n        private:\n            sp_counted_impl_pda(const sp_counted_impl_pda&);\n            sp_counted_impl_pda& operator=(const sp_counted_impl_pda&);\n\n            A allocator;\n        };\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/array_traits.hpp",
    "content": "/*\n * Copyright (c) 2012-2014 Glen Joseph Fernandes \n * glenfe at live dot com\n *\n * Distributed under the Boost Software License, \n * Version 1.0. (See accompanying file LICENSE_1_0.txt \n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_TRAITS_HPP\n#define BOOST_SMART_PTR_DETAIL_ARRAY_TRAITS_HPP\n\n#include <boost/type_traits/remove_cv.hpp>\n\nnamespace boost {\n    namespace detail {\n        template<class T>\n        struct array_base {\n            typedef typename boost::remove_cv<T>::type type;\n        };\n\n        template<class T>\n        struct array_base<T[]> {\n            typedef typename array_base<T>::type type;\n        };\n\n        template<class T, std::size_t N>\n        struct array_base<T[N]> {\n            typedef typename array_base<T>::type type;\n        };\n\n        template<class T>\n        struct array_total {\n            enum {\n                size = 1\n            };\n        };\n\n        template<class T, std::size_t N>\n        struct array_total<T[N]> {\n            enum {\n                size = N * array_total<T>::size\n            };\n        };\n\n        template<class T>\n        struct array_inner;\n\n        template<class T>\n        struct array_inner<T[]> {\n            typedef T type;\n        };\n\n        template<class T, std::size_t N>\n        struct array_inner<T[N]> {\n            typedef T type;\n        };\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/array_utility.hpp",
    "content": "/*\n * Copyright (c) 2012-2014 Glen Joseph Fernandes\n * glenfe at live dot com\n *\n * Distributed under the Boost Software License,\n * Version 1.0. (See accompanying file LICENSE_1_0.txt\n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_UTILITY_HPP\n#define BOOST_SMART_PTR_DETAIL_ARRAY_UTILITY_HPP\n\n#include <boost/config.hpp>\n#include <boost/type_traits/has_trivial_constructor.hpp>\n#include <boost/type_traits/has_trivial_destructor.hpp>\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n#include <memory>\n#endif\n\nnamespace boost {\n    namespace detail {\n        typedef boost::true_type  ms_is_trivial;\n        typedef boost::false_type ms_no_trivial;\n\n        template<class T>\n        inline void ms_destroy(T*, std::size_t, ms_is_trivial) {\n        }\n\n        template<class T>\n        inline void ms_destroy(T* memory, std::size_t size, ms_no_trivial) {\n            for (std::size_t i = size; i > 0;) {\n                memory[--i].~T();\n            }\n        }\n\n        template<class T>\n        inline void ms_destroy(T* memory, std::size_t size) {\n            boost::has_trivial_destructor<T> trivial;\n            ms_destroy(memory, size, trivial);\n        }\n\n        template<class T>\n        inline void ms_init(T* memory, std::size_t size, ms_is_trivial) {\n            for (std::size_t i = 0; i < size; i++) {\n                void* p1 = memory + i;\n                ::new(p1) T();\n            }\n        }\n\n        template<class T>\n        inline void ms_init(T* memory, std::size_t size, ms_no_trivial) {\n#if !defined(BOOST_NO_EXCEPTIONS)\n            std::size_t i = 0;\n            try {\n                for (; i < size; i++) {\n                    void* p1 = memory + i;\n                    ::new(p1) T();\n                }\n            } catch (...) {\n                ms_destroy(memory, i);\n                throw;\n            }\n#else\n            for (std::size_t i = 0; i < size; i++) {\n                void* p1 = memory + i;\n                ::new(p1) T();\n            }\n#endif\n        }\n\n        template<class T>\n        inline void ms_init(T* memory, std::size_t size) {\n            boost::has_trivial_default_constructor<T> trivial;\n            ms_init(memory, size, trivial);\n        }\n\n        template<class T, std::size_t N>\n        inline void ms_init(T* memory, std::size_t size, const T* list) {\n#if !defined(BOOST_NO_EXCEPTIONS)\n            std::size_t i = 0;\n            try {\n                for (; i < size; i++) {\n                    void* p1 = memory + i;\n                    ::new(p1) T(list[i % N]);\n                }\n            } catch (...) {\n                ms_destroy(memory, i);\n                throw;\n            }\n#else\n            for (std::size_t i = 0; i < size; i++) {\n                void* p1 = memory + i;\n                ::new(p1) T(list[i % N]);\n            }\n#endif\n        }\n\n#if !defined(BOOST_NO_CXX11_ALLOCATOR)\n        template<class T, class A>\n        inline void as_destroy(const A& allocator, T* memory,\n            std::size_t size) {\n            typedef typename std::allocator_traits<A>::\n                template rebind_alloc<T> TA;\n            typedef typename std::allocator_traits<A>::\n                template rebind_traits<T> TT;\n            TA a2(allocator);\n            for (std::size_t i = size; i > 0;) {\n                TT::destroy(a2, &memory[--i]);\n            }\n        }\n\n        template<class T, class A>\n        inline void as_init(const A& allocator, T* memory, std::size_t size,\n            ms_is_trivial) {\n            typedef typename std::allocator_traits<A>::\n                template rebind_alloc<T> TA;\n            typedef typename std::allocator_traits<A>::\n                template rebind_traits<T> TT;\n            TA a2(allocator);\n            for (std::size_t i = 0; i < size; i++) {\n                TT::construct(a2, memory + i);\n            }\n        }\n\n        template<class T, class A>\n        inline void as_init(const A& allocator, T* memory, std::size_t size,\n            ms_no_trivial) {\n            typedef typename std::allocator_traits<A>::\n                template rebind_alloc<T> TA;\n            typedef typename std::allocator_traits<A>::\n                template rebind_traits<T> TT;\n            TA a2(allocator);\n#if !defined(BOOST_NO_EXCEPTIONS)\n            std::size_t i = 0;\n            try {\n                for (; i < size; i++) {\n                    TT::construct(a2, memory + i);\n                }\n            } catch (...) {\n                as_destroy(a2, memory, i);\n                throw;\n            }\n#else\n            for (std::size_t i = 0; i < size; i++) {\n                TT::construct(a2, memory + i);\n            }\n#endif\n        }\n\n        template<class T, class A>\n        inline void as_init(const A& allocator, T* memory, std::size_t size) {\n            boost::has_trivial_default_constructor<T> trivial;\n            as_init(allocator, memory, size, trivial);\n        }\n\n        template<class T, class A, std::size_t N>\n        inline void as_init(const A& allocator, T* memory, std::size_t size,\n            const T* list) {\n            typedef typename std::allocator_traits<A>::\n                template rebind_alloc<T> TA;\n            typedef typename std::allocator_traits<A>::\n                template rebind_traits<T> TT;\n            TA a2(allocator);\n#if !defined(BOOST_NO_EXCEPTIONS)\n            std::size_t i = 0;\n            try {\n                for (; i < size; i++) {\n                    TT::construct(a2, memory + i, list[i % N]);\n                }\n            } catch (...) {\n                as_destroy(a2, memory, i);\n                throw;\n            }\n#else\n            for (std::size_t i = 0; i < size; i++) {\n                TT::construct(a2, memory + i, list[i % N]);\n            }\n#endif\n        }\n#endif\n\n        template<class T>\n        inline void ms_noinit(T*, std::size_t, ms_is_trivial) {\n        }\n\n        template<class T>\n        inline void ms_noinit(T* memory, std::size_t size, ms_no_trivial) {\n#if !defined(BOOST_NO_EXCEPTIONS)\n            std::size_t i = 0;\n            try {\n                for (; i < size; i++) {\n                    void* p1 = memory + i;\n                    ::new(p1) T;\n                }\n            } catch (...) {\n                ms_destroy(memory, i);\n                throw;\n            }\n#else\n            for (std::size_t i = 0; i < size; i++) {\n                void* p1 = memory + i;\n                ::new(p1) T;\n            }\n#endif\n        }\n\n        template<class T>\n        inline void ms_noinit(T* memory, std::size_t size) {\n            boost::has_trivial_default_constructor<T> trivial;\n            ms_noinit(memory, size, trivial);\n        }\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/atomic_count.hpp - thread/SMP safe reference counter\n//\n//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2013 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  typedef <implementation-defined> boost::detail::atomic_count;\n//\n//  atomic_count a(n);\n//\n//    (n is convertible to long)\n//\n//    Effects: Constructs an atomic_count with an initial value of n\n//\n//  a;\n//\n//    Returns: (long) the current value of a\n//    Memory Ordering: acquire\n//\n//  ++a;\n//\n//    Effects: Atomically increments the value of a\n//    Returns: (long) the new value of a\n//    Memory Ordering: acquire/release\n//\n//  --a;\n//\n//    Effects: Atomically decrements the value of a\n//    Returns: (long) the new value of a\n//    Memory Ordering: acquire/release\n//\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/detail/sp_has_sync.hpp>\n\n#if defined( BOOST_AC_DISABLE_THREADS )\n# include <boost/smart_ptr/detail/atomic_count_nt.hpp>\n\n#elif defined( BOOST_AC_USE_STD_ATOMIC )\n# include <boost/smart_ptr/detail/atomic_count_std_atomic.hpp>\n\n#elif defined( BOOST_AC_USE_SPINLOCK )\n# include <boost/smart_ptr/detail/atomic_count_spin.hpp>\n\n#elif defined( BOOST_AC_USE_PTHREADS )\n# include <boost/smart_ptr/detail/atomic_count_pt.hpp>\n\n#elif defined( BOOST_SP_DISABLE_THREADS )\n# include <boost/smart_ptr/detail/atomic_count_nt.hpp>\n\n#elif defined( BOOST_SP_USE_STD_ATOMIC )\n# include <boost/smart_ptr/detail/atomic_count_std_atomic.hpp>\n\n#elif defined( BOOST_SP_USE_SPINLOCK )\n# include <boost/smart_ptr/detail/atomic_count_spin.hpp>\n\n#elif defined( BOOST_SP_USE_PTHREADS )\n# include <boost/smart_ptr/detail/atomic_count_pt.hpp>\n\n#elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 )\n# include <boost/smart_ptr/detail/atomic_count_nt.hpp>\n\n#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) && !defined( __PATHSCALE__ )\n# include <boost/smart_ptr/detail/atomic_count_gcc_x86.hpp>\n\n#elif defined( BOOST_SP_HAS_SYNC )\n# include <boost/smart_ptr/detail/atomic_count_sync.hpp>\n\n#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)\n# include <boost/smart_ptr/detail/atomic_count_win32.hpp>\n\n#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)\n# include <boost/smart_ptr/detail/atomic_count_gcc.hpp>\n\n#elif !defined( BOOST_HAS_THREADS )\n# include <boost/smart_ptr/detail/atomic_count_nt.hpp>\n\n#else\n# include <boost/smart_ptr/detail/atomic_count_spin.hpp>\n\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count_gcc.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED\n\n//\n//  boost/detail/atomic_count_gcc.hpp\n//\n//  atomic_count for GNU libstdc++ v3\n//\n//  http://gcc.gnu.org/onlinedocs/porting/Thread-safety.html\n//\n//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2002 Lars Gullik Bjnnes <larsbj@lyx.org>\n//  Copyright 2003-2005 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#if __GNUC__ * 100 + __GNUC_MINOR__ >= 402\n# include <ext/atomicity.h> \n#else \n# include <bits/atomicity.h>\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n#if defined(__GLIBCXX__) // g++ 3.4+\n\nusing __gnu_cxx::__atomic_add;\nusing __gnu_cxx::__exchange_and_add;\n\n#endif\n\nclass atomic_count\n{\npublic:\n\n    explicit atomic_count( long v ) : value_( v ) {}\n\n    long operator++()\n    {\n        return __exchange_and_add( &value_, +1 ) + 1;\n    }\n\n    long operator--()\n    {\n        return __exchange_and_add( &value_, -1 ) - 1;\n    }\n\n    operator long() const\n    {\n        return __exchange_and_add( &value_, 0 );\n    }\n\nprivate:\n\n    atomic_count(atomic_count const &);\n    atomic_count & operator=(atomic_count const &);\n\n    mutable _Atomic_word value_;\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_X86_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_X86_HPP_INCLUDED\n\n//\n//  boost/detail/atomic_count_gcc_x86.hpp\n//\n//  atomic_count for g++ on 486+/AMD64\n//\n//  Copyright 2007 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass atomic_count\n{\npublic:\n\n    explicit atomic_count( long v ) : value_( static_cast< int >( v ) ) {}\n\n    long operator++()\n    {\n        return atomic_exchange_and_add( &value_, +1 ) + 1;\n    }\n\n    long operator--()\n    {\n        return atomic_exchange_and_add( &value_, -1 ) - 1;\n    }\n\n    operator long() const\n    {\n        return atomic_exchange_and_add( &value_, 0 );\n    }\n\nprivate:\n\n    atomic_count(atomic_count const &);\n    atomic_count & operator=(atomic_count const &);\n\n    mutable int value_;\n\nprivate:\n\n    static int atomic_exchange_and_add( int * pw, int dv )\n    {\n        // int r = *pw;\n        // *pw += dv;\n        // return r;\n\n        int r;\n\n        __asm__ __volatile__\n        (\n            \"lock\\n\\t\"\n            \"xadd %1, %0\":\n            \"+m\"( *pw ), \"=r\"( r ): // outputs (%0, %1)\n            \"1\"( dv ): // inputs (%2 == %1)\n            \"memory\", \"cc\" // clobbers\n        );\n\n        return r;\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_X86_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count_nt.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_NT_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_NT_HPP_INCLUDED\n\n//\n//  boost/detail/atomic_count_nt.hpp\n//\n//  Trivial atomic_count for the single-threaded case\n//\n//  http://gcc.gnu.org/onlinedocs/porting/Thread-safety.html\n//\n//  Copyright 2013 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass atomic_count\n{\npublic:\n\n    explicit atomic_count( long v ): value_( v )\n    {\n    }\n\n    long operator++()\n    {\n        return ++value_;\n    }\n\n    long operator--()\n    {\n        return --value_;\n    }\n\n    operator long() const\n    {\n        return value_;\n    }\n\nprivate:\n\n    atomic_count(atomic_count const &);\n    atomic_count & operator=(atomic_count const &);\n\n    long value_;\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_NT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count_pt.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED\n\n//\n//  boost/detail/atomic_count_pthreads.hpp\n//\n//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/assert.hpp>\n#include <pthread.h>\n\n//\n//  The generic pthread_mutex-based implementation sometimes leads to\n//    inefficiencies. Example: a class with two atomic_count members\n//    can get away with a single mutex.\n//\n//  Users can detect this situation by checking BOOST_AC_USE_PTHREADS.\n//\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass atomic_count\n{\nprivate:\n\n    class scoped_lock\n    {\n    public:\n\n        scoped_lock(pthread_mutex_t & m): m_(m)\n        {\n            BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );\n        }\n\n        ~scoped_lock()\n        {\n            BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );\n        }\n\n    private:\n\n        pthread_mutex_t & m_;\n    };\n\npublic:\n\n    explicit atomic_count(long v): value_(v)\n    {\n        BOOST_VERIFY( pthread_mutex_init( &mutex_, 0 ) == 0 );\n    }\n\n    ~atomic_count()\n    {\n        BOOST_VERIFY( pthread_mutex_destroy( &mutex_ ) == 0 );\n    }\n\n    long operator++()\n    {\n        scoped_lock lock(mutex_);\n        return ++value_;\n    }\n\n    long operator--()\n    {\n        scoped_lock lock(mutex_);\n        return --value_;\n    }\n\n    operator long() const\n    {\n        scoped_lock lock(mutex_);\n        return value_;\n    }\n\nprivate:\n\n    atomic_count(atomic_count const &);\n    atomic_count & operator=(atomic_count const &);\n\n    mutable pthread_mutex_t mutex_;\n    long value_;\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count_solaris.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SOLARIS_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SOLARIS_HPP_INCLUDED\n\n//\n//  boost/detail/atomic_count_solaris.hpp\n//   based on: boost/detail/atomic_count_win32.hpp\n//\n//  Copyright (c) 2001-2005 Peter Dimov\n//  Copyright (c) 2006 Michael van der Westhuizen\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <atomic.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass atomic_count\n{\npublic:\n\n    explicit atomic_count( uint32_t v ): value_( v )\n    {\n    }\n\n    long operator++()\n    {\n        return atomic_inc_32_nv( &value_ );\n    }\n\n    long operator--()\n    {\n        return atomic_dec_32_nv( &value_ );\n    }\n\n    operator uint32_t() const\n    {\n        return static_cast<uint32_t const volatile &>( value_ );\n    }\n\nprivate:\n\n    atomic_count( atomic_count const & );\n    atomic_count & operator=( atomic_count const & );\n\n    uint32_t value_;\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SOLARIS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count_spin.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SPIN_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SPIN_HPP_INCLUDED\n\n//\n//  boost/detail/atomic_count_spin.hpp\n//\n//  Copyright (c) 2013 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/smart_ptr/detail/spinlock_pool.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass atomic_count\n{\nprivate:\n\npublic:\n\n    explicit atomic_count( long v ): value_( v )\n    {\n    }\n\n    long operator++()\n    {\n        spinlock_pool<0>::scoped_lock lock( &value_ );\n        return ++value_;\n    }\n\n    long operator--()\n    {\n        spinlock_pool<0>::scoped_lock lock( &value_ );\n        return --value_;\n    }\n\n    operator long() const\n    {\n        spinlock_pool<0>::scoped_lock lock( &value_ );\n        return value_;\n    }\n\nprivate:\n\n    atomic_count(atomic_count const &);\n    atomic_count & operator=(atomic_count const &);\n\n    long value_;\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SPIN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_STD_ATOMIC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_STD_ATOMIC_HPP_INCLUDED\n\n//\n//  boost/detail/atomic_count_std_atomic.hpp\n//\n//  atomic_count for std::atomic\n//\n//  Copyright 2013 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <atomic>\n#include <cstdint>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass atomic_count\n{\npublic:\n\n    explicit atomic_count( long v ): value_( v )\n    {\n    }\n\n    long operator++()\n    {\n        return value_.fetch_add( 1, std::memory_order_acq_rel ) + 1;\n    }\n\n    long operator--()\n    {\n        return value_.fetch_sub( 1, std::memory_order_acq_rel ) - 1;\n    }\n\n    operator long() const\n    {\n        return value_.load( std::memory_order_acquire );\n    }\n\nprivate:\n\n    atomic_count(atomic_count const &);\n    atomic_count & operator=(atomic_count const &);\n\n    std::atomic_int_least32_t value_;\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_STD_ATOMIC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count_sync.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED\n\n//\n//  boost/detail/atomic_count_sync.hpp\n//\n//  atomic_count for g++ 4.1+\n//\n//  http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html\n//\n//  Copyright 2007 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#if defined( __ia64__ ) && defined( __INTEL_COMPILER )\n# include <ia64intrin.h>\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass atomic_count\n{\npublic:\n\n    explicit atomic_count( long v ) : value_( v ) {}\n\n    long operator++()\n    {\n        return __sync_add_and_fetch( &value_, 1 );\n    }\n\n    long operator--()\n    {\n        return __sync_add_and_fetch( &value_, -1 );\n    }\n\n    operator long() const\n    {\n        return __sync_fetch_and_add( &value_, 0 );\n    }\n\nprivate:\n\n    atomic_count(atomic_count const &);\n    atomic_count & operator=(atomic_count const &);\n\n    mutable long value_;\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count_win32.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/atomic_count_win32.hpp\n//\n//  Copyright (c) 2001-2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/smart_ptr/detail/sp_interlocked.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass atomic_count\n{\npublic:\n\n    explicit atomic_count( long v ): value_( v )\n    {\n    }\n\n    long operator++()\n    {\n        return BOOST_SP_INTERLOCKED_INCREMENT( &value_ );\n    }\n\n    long operator--()\n    {\n        return BOOST_SP_INTERLOCKED_DECREMENT( &value_ );\n    }\n\n    operator long() const\n    {\n        return static_cast<long const volatile &>( value_ );\n    }\n\nprivate:\n\n    atomic_count( atomic_count const & );\n    atomic_count & operator=( atomic_count const & );\n\n    long value_;\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/lightweight_mutex.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/lightweight_mutex.hpp - lightweight mutex\n//\n//  Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  typedef <unspecified> boost::detail::lightweight_mutex;\n//\n//  boost::detail::lightweight_mutex is a header-only implementation of\n//  a subset of the Mutex concept requirements:\n//\n//  http://www.boost.org/doc/html/threads/concepts.html#threads.concepts.Mutex\n//\n//  It maps to a CRITICAL_SECTION on Windows or a pthread_mutex on POSIX.\n//\n\n#include <boost/config.hpp>\n\n#if !defined(BOOST_HAS_THREADS)\n#  include <boost/smart_ptr/detail/lwm_nop.hpp>\n#elif defined(BOOST_HAS_PTHREADS)\n#  include <boost/smart_ptr/detail/lwm_pthreads.hpp>\n#elif defined(BOOST_HAS_WINTHREADS) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)\n#  include <boost/smart_ptr/detail/lwm_win32_cs.hpp>\n#else\n// Use #define BOOST_DISABLE_THREADS to avoid the error\n#  error Unrecognized threading platform\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/lwm_nop.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/lwm_nop.hpp\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass lightweight_mutex\n{\npublic:\n\n    typedef lightweight_mutex scoped_lock;\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/lwm_pthreads.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/lwm_pthreads.hpp\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/assert.hpp>\n#include <pthread.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass lightweight_mutex\n{\nprivate:\n\n    pthread_mutex_t m_;\n\n    lightweight_mutex(lightweight_mutex const &);\n    lightweight_mutex & operator=(lightweight_mutex const &);\n\npublic:\n\n    lightweight_mutex()\n    {\n\n// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init\n\n#if defined(__hpux) && defined(_DECTHREADS_)\n        BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 );\n#else\n        BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 );\n#endif\n    }\n\n    ~lightweight_mutex()\n    {\n        BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 );\n    }\n\n    class scoped_lock;\n    friend class scoped_lock;\n\n    class scoped_lock\n    {\n    private:\n\n        pthread_mutex_t & m_;\n\n        scoped_lock(scoped_lock const &);\n        scoped_lock & operator=(scoped_lock const &);\n\n    public:\n\n        scoped_lock(lightweight_mutex & m): m_(m.m_)\n        {\n            BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );\n        }\n\n        ~scoped_lock()\n        {\n            BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );\n        }\n    };\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/lwm_win32_cs.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/lwm_win32_cs.hpp\n//\n//  Copyright (c) 2002, 2003 Peter Dimov\n//  Copyright (c) Microsoft Corporation 2014\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/predef.h>\n\n#ifdef BOOST_USE_WINDOWS_H\n#  include <windows.h>\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n#ifndef BOOST_USE_WINDOWS_H\n\nstruct critical_section\n{\n    struct critical_section_debug * DebugInfo;\n    long LockCount;\n    long RecursionCount;\n    void * OwningThread;\n    void * LockSemaphore;\n#if defined(_WIN64)\n    unsigned __int64 SpinCount;\n#else\n    unsigned long SpinCount;\n#endif\n};\n\n#if BOOST_PLAT_WINDOWS_RUNTIME\nextern \"C\" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(critical_section *, unsigned long, unsigned long);\n#else\nextern \"C\" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *);\n#endif\nextern \"C\" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);\nextern \"C\" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);\nextern \"C\" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *);\n\n#else\n\ntypedef ::CRITICAL_SECTION critical_section;\n\n#endif // #ifndef BOOST_USE_WINDOWS_H\n\nclass lightweight_mutex\n{\nprivate:\n\n    critical_section cs_;\n\n    lightweight_mutex(lightweight_mutex const &);\n    lightweight_mutex & operator=(lightweight_mutex const &);\n\npublic:\n\n    lightweight_mutex()\n    {\n#if BOOST_PLAT_WINDOWS_RUNTIME\n        InitializeCriticalSectionEx(&cs_, 4000, 0);\n#else\n        InitializeCriticalSection(&cs_);\n#endif\n    }\n\n    ~lightweight_mutex()\n    {\n        DeleteCriticalSection(&cs_);\n    }\n\n    class scoped_lock;\n    friend class scoped_lock;\n\n    class scoped_lock\n    {\n    private:\n\n        lightweight_mutex & m_;\n\n        scoped_lock(scoped_lock const &);\n        scoped_lock & operator=(scoped_lock const &);\n\n    public:\n\n        explicit scoped_lock(lightweight_mutex & m): m_(m)\n        {\n            EnterCriticalSection(&m_.cs_);\n        }\n\n        ~scoped_lock()\n        {\n            LeaveCriticalSection(&m_.cs_);\n        }\n    };\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/operator_bool.hpp",
    "content": "//  This header intentionally has no include guards.\n//\n//  Copyright (c) 2001-2009, 2012 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#if !defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS ) && !defined( BOOST_NO_CXX11_NULLPTR )\\\n    && !(defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x5130))\n\n    explicit operator bool () const BOOST_NOEXCEPT\n    {\n        return px != 0;\n    }\n\n#elif ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570) ) || defined(__CINT__)\n\n    operator bool () const BOOST_NOEXCEPT\n    {\n        return px != 0;\n    }\n\n#elif defined( _MANAGED )\n\n    static void unspecified_bool( this_type*** )\n    {\n    }\n\n    typedef void (*unspecified_bool_type)( this_type*** );\n\n    operator unspecified_bool_type() const BOOST_NOEXCEPT\n    {\n        return px == 0? 0: unspecified_bool;\n    }\n\n#elif \\\n    ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \\\n    ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \\\n    ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) )\n\n    typedef element_type * (this_type::*unspecified_bool_type)() const;\n\n    operator unspecified_bool_type() const BOOST_NOEXCEPT\n    {\n        return px == 0? 0: &this_type::get;\n    }\n\n#else\n\n    typedef element_type * this_type::*unspecified_bool_type;\n\n    operator unspecified_bool_type() const BOOST_NOEXCEPT\n    {\n        return px == 0? 0: &this_type::px;\n    }\n\n#endif\n\n    // operator! is redundant, but some compilers need it\n    bool operator! () const BOOST_NOEXCEPT\n    {\n        return px == 0;\n    }\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/quick_allocator.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/quick_allocator.hpp\n//\n//  Copyright (c) 2003 David Abrahams\n//  Copyright (c) 2003 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/config.hpp>\n\n#include <boost/smart_ptr/detail/lightweight_mutex.hpp>\n#include <boost/type_traits/type_with_alignment.hpp>\n#include <boost/type_traits/alignment_of.hpp>\n\n#include <new>              // ::operator new, ::operator delete\n#include <cstddef>          // std::size_t\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntemplate<unsigned size, unsigned align_> union freeblock\n{\n    typedef typename boost::type_with_alignment<align_>::type aligner_type;\n    aligner_type aligner;\n    char bytes[size];\n    freeblock * next;\n};\n\ntemplate<unsigned size, unsigned align_> struct allocator_impl\n{\n    typedef freeblock<size, align_> block;\n\n    // It may seem odd to use such small pages.\n    //\n    // However, on a typical Windows implementation that uses\n    // the OS allocator, \"normal size\" pages interact with the\n    // \"ordinary\" operator new, slowing it down dramatically.\n    //\n    // 512 byte pages are handled by the small object allocator,\n    // and don't interfere with ::new.\n    //\n    // The other alternative is to use much bigger pages (1M.)\n    //\n    // It is surprisingly easy to hit pathological behavior by\n    // varying the page size. g++ 2.96 on Red Hat Linux 7.2,\n    // for example, passionately dislikes 496. 512 seems OK.\n\n#if defined(BOOST_QA_PAGE_SIZE)\n\n    enum { items_per_page = BOOST_QA_PAGE_SIZE / size };\n\n#else\n\n    enum { items_per_page = 512 / size }; // 1048560 / size\n\n#endif\n\n#ifdef BOOST_HAS_THREADS\n\n    static lightweight_mutex & mutex()\n    {\n        static freeblock< sizeof( lightweight_mutex ), boost::alignment_of< lightweight_mutex >::value > fbm;\n        static lightweight_mutex * pm = new( &fbm ) lightweight_mutex;\n        return *pm;\n    }\n\n    static lightweight_mutex * mutex_init;\n\n#endif\n\n    static block * free;\n    static block * page;\n    static unsigned last;\n\n    static inline void * alloc()\n    {\n#ifdef BOOST_HAS_THREADS\n        lightweight_mutex::scoped_lock lock( mutex() );\n#endif\n        if(block * x = free)\n        {\n            free = x->next;\n            return x;\n        }\n        else\n        {\n            if(last == items_per_page)\n            {\n                // \"Listen to me carefully: there is no memory leak\"\n                // -- Scott Meyers, Eff C++ 2nd Ed Item 10\n                page = ::new block[items_per_page];\n                last = 0;\n            }\n\n            return &page[last++];\n        }\n    }\n\n    static inline void * alloc(std::size_t n)\n    {\n        if(n != size) // class-specific new called for a derived object\n        {\n            return ::operator new(n);\n        }\n        else\n        {\n#ifdef BOOST_HAS_THREADS\n            lightweight_mutex::scoped_lock lock( mutex() );\n#endif\n            if(block * x = free)\n            {\n                free = x->next;\n                return x;\n            }\n            else\n            {\n                if(last == items_per_page)\n                {\n                    page = ::new block[items_per_page];\n                    last = 0;\n                }\n\n                return &page[last++];\n            }\n        }\n    }\n\n    static inline void dealloc(void * pv)\n    {\n        if(pv != 0) // 18.4.1.1/13\n        {\n#ifdef BOOST_HAS_THREADS\n            lightweight_mutex::scoped_lock lock( mutex() );\n#endif\n            block * pb = static_cast<block *>(pv);\n            pb->next = free;\n            free = pb;\n        }\n    }\n\n    static inline void dealloc(void * pv, std::size_t n)\n    {\n        if(n != size) // class-specific delete called for a derived object\n        {\n            ::operator delete(pv);\n        }\n        else if(pv != 0) // 18.4.1.1/13\n        {\n#ifdef BOOST_HAS_THREADS\n            lightweight_mutex::scoped_lock lock( mutex() );\n#endif\n            block * pb = static_cast<block *>(pv);\n            pb->next = free;\n            free = pb;\n        }\n    }\n};\n\n#ifdef BOOST_HAS_THREADS\n\ntemplate<unsigned size, unsigned align_>\n  lightweight_mutex * allocator_impl<size, align_>::mutex_init = &allocator_impl<size, align_>::mutex();\n\n#endif\n\ntemplate<unsigned size, unsigned align_>\n  freeblock<size, align_> * allocator_impl<size, align_>::free = 0;\n\ntemplate<unsigned size, unsigned align_>\n  freeblock<size, align_> * allocator_impl<size, align_>::page = 0;\n\ntemplate<unsigned size, unsigned align_>\n  unsigned allocator_impl<size, align_>::last = allocator_impl<size, align_>::items_per_page;\n\ntemplate<class T>\nstruct quick_allocator: public allocator_impl< sizeof(T), boost::alignment_of<T>::value >\n{\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/shared_count.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/shared_count.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#ifdef __BORLANDC__\n# pragma warn -8027     // Functions containing try are not expanded inline\n#endif\n\n#include <boost/config.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/throw_exception.hpp>\n#include <boost/smart_ptr/bad_weak_ptr.hpp>\n#include <boost/smart_ptr/detail/sp_counted_base.hpp>\n#include <boost/smart_ptr/detail/sp_counted_impl.hpp>\n#include <boost/smart_ptr/detail/sp_disable_deprecated.hpp>\n#include <boost/detail/workaround.hpp>\n// In order to avoid circular dependencies with Boost.TR1\n// we make sure that our include of <memory> doesn't try to\n// pull in the TR1 headers: that's why we use this header \n// rather than including <memory> directly:\n#include <boost/config/no_tr1/memory.hpp>  // std::auto_ptr\n#include <functional>       // std::less\n\n#ifdef BOOST_NO_EXCEPTIONS\n# include <new>              // std::bad_alloc\n#endif\n\n#include <boost/core/addressof.hpp>\n\n#if defined( BOOST_SP_DISABLE_DEPRECATED )\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n#endif\n\nnamespace boost\n{\n\nnamespace movelib\n{\n\n    template< class T, class D > class unique_ptr;\n\n} // namespace movelib\n\nnamespace detail\n{\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n\nint const shared_count_id = 0x2C35F101;\nint const   weak_count_id = 0x298C38A4;\n\n#endif\n\nstruct sp_nothrow_tag {};\n\ntemplate< class D > struct sp_inplace_tag\n{\n};\n\ntemplate< class T > class sp_reference_wrapper\n{ \npublic:\n\n    explicit sp_reference_wrapper( T & t): t_( boost::addressof( t ) )\n    {\n    }\n\n    template< class Y > void operator()( Y * p ) const\n    {\n        (*t_)( p );\n    }\n\nprivate:\n\n    T * t_;\n};\n\ntemplate< class D > struct sp_convert_reference\n{\n    typedef D type;\n};\n\ntemplate< class D > struct sp_convert_reference< D& >\n{\n    typedef sp_reference_wrapper< D > type;\n};\n\nclass weak_count;\n\nclass shared_count\n{\nprivate:\n\n    sp_counted_base * pi_;\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n    int id_;\n#endif\n\n    friend class weak_count;\n\npublic:\n\n    shared_count(): pi_(0) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n    }\n\n    template<class Y> explicit shared_count( Y * p ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n            pi_ = new sp_counted_impl_p<Y>( p );\n        }\n        catch(...)\n        {\n            boost::checked_delete( p );\n            throw;\n        }\n\n#else\n\n        pi_ = new sp_counted_impl_p<Y>( p );\n\n        if( pi_ == 0 )\n        {\n            boost::checked_delete( p );\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif\n    }\n\n#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 )\n    template<class Y, class D> shared_count( Y * p, D d ): pi_(0)\n#else\n    template<class P, class D> shared_count( P p, D d ): pi_(0)\n#endif\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 )\n        typedef Y* P;\n#endif\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n            pi_ = new sp_counted_impl_pd<P, D>(p, d);\n        }\n        catch(...)\n        {\n            d(p); // delete p\n            throw;\n        }\n\n#else\n\n        pi_ = new sp_counted_impl_pd<P, D>(p, d);\n\n        if(pi_ == 0)\n        {\n            d(p); // delete p\n            boost::throw_exception(std::bad_alloc());\n        }\n\n#endif\n    }\n\n#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )\n\n    template< class P, class D > shared_count( P p, sp_inplace_tag<D> ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n            pi_ = new sp_counted_impl_pd< P, D >( p );\n        }\n        catch( ... )\n        {\n            D::operator_fn( p ); // delete p\n            throw;\n        }\n\n#else\n\n        pi_ = new sp_counted_impl_pd< P, D >( p );\n\n        if( pi_ == 0 )\n        {\n            D::operator_fn( p ); // delete p\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif // #ifndef BOOST_NO_EXCEPTIONS\n    }\n\n#endif // !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )\n\n    template<class P, class D, class A> shared_count( P p, D d, A a ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        typedef sp_counted_impl_pda<P, D, A> impl_type;\n\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n        typedef typename std::allocator_traits<A>::template rebind_alloc< impl_type > A2;\n\n#else\n\n        typedef typename A::template rebind< impl_type >::other A2;\n\n#endif\n\n        A2 a2( a );\n\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n            impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );\n            pi_ = pi;\n            std::allocator_traits<A2>::construct( a2, pi, p, d, a );\n\n#else\n\n            pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );\n            ::new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );\n\n#endif\n        }\n        catch(...)\n        {\n            d( p );\n\n            if( pi_ != 0 )\n            {\n                a2.deallocate( static_cast< impl_type* >( pi_ ), 1 );\n            }\n\n            throw;\n        }\n\n#else\n\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n        impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );\n        pi_ = pi;\n\n#else\n\n        pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );\n\n#endif\n\n        if( pi_ != 0 )\n        {\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n            std::allocator_traits<A2>::construct( a2, pi, p, d, a );\n\n#else\n\n            ::new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );\n\n#endif\n        }\n        else\n        {\n            d( p );\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif\n    }\n\n#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )\n\n    template< class P, class D, class A > shared_count( P p, sp_inplace_tag< D >, A a ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        typedef sp_counted_impl_pda< P, D, A > impl_type;\n\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n        typedef typename std::allocator_traits<A>::template rebind_alloc< impl_type > A2;\n\n#else\n\n        typedef typename A::template rebind< impl_type >::other A2;\n\n#endif\n\n        A2 a2( a );\n\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n            impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );\n            pi_ = pi;\n            std::allocator_traits<A2>::construct( a2, pi, p, a );\n\n#else\n\n            pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );\n            ::new( static_cast< void* >( pi_ ) ) impl_type( p, a );\n\n#endif\n        }\n        catch(...)\n        {\n            D::operator_fn( p );\n\n            if( pi_ != 0 )\n            {\n                a2.deallocate( static_cast< impl_type* >( pi_ ), 1 );\n            }\n\n            throw;\n        }\n\n#else\n\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n        impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );\n        pi_ = pi;\n\n#else\n\n        pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );\n\n#endif\n\n        if( pi_ != 0 )\n        {\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n            std::allocator_traits<A2>::construct( a2, pi, p, a );\n\n#else\n\n            ::new( static_cast< void* >( pi_ ) ) impl_type( p, a );\n\n#endif\n        }\n        else\n        {\n            D::operator_fn( p );\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif // #ifndef BOOST_NO_EXCEPTIONS\n    }\n\n#endif // !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )\n\n#ifndef BOOST_NO_AUTO_PTR\n\n    // auto_ptr<Y> is special cased to provide the strong guarantee\n\n    template<class Y>\n    explicit shared_count( std::auto_ptr<Y> & r ): pi_( new sp_counted_impl_p<Y>( r.get() ) )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n#ifdef BOOST_NO_EXCEPTIONS\n\n        if( pi_ == 0 )\n        {\n            boost::throw_exception(std::bad_alloc());\n        }\n\n#endif\n\n        r.release();\n    }\n\n#endif \n\n#if !defined( BOOST_NO_CXX11_SMART_PTR )\n\n    template<class Y, class D>\n    explicit shared_count( std::unique_ptr<Y, D> & r ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        typedef typename sp_convert_reference<D>::type D2;\n\n        D2 d2( r.get_deleter() );\n        pi_ = new sp_counted_impl_pd< typename std::unique_ptr<Y, D>::pointer, D2 >( r.get(), d2 );\n\n#ifdef BOOST_NO_EXCEPTIONS\n\n        if( pi_ == 0 )\n        {\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif\n\n        r.release();\n    }\n\n#endif\n\n    template<class Y, class D>\n    explicit shared_count( boost::movelib::unique_ptr<Y, D> & r ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        typedef typename sp_convert_reference<D>::type D2;\n\n        D2 d2( r.get_deleter() );\n        pi_ = new sp_counted_impl_pd< typename boost::movelib::unique_ptr<Y, D>::pointer, D2 >( r.get(), d2 );\n\n#ifdef BOOST_NO_EXCEPTIONS\n\n        if( pi_ == 0 )\n        {\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif\n\n        r.release();\n    }\n\n    ~shared_count() // nothrow\n    {\n        if( pi_ != 0 ) pi_->release();\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        id_ = 0;\n#endif\n    }\n\n    shared_count(shared_count const & r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        if( pi_ != 0 ) pi_->add_ref_copy();\n    }\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    shared_count(shared_count && r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        r.pi_ = 0;\n    }\n\n#endif\n\n    explicit shared_count(weak_count const & r); // throws bad_weak_ptr when r.use_count() == 0\n    shared_count( weak_count const & r, sp_nothrow_tag ); // constructs an empty *this when r.use_count() == 0\n\n    shared_count & operator= (shared_count const & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n\n        if( tmp != pi_ )\n        {\n            if( tmp != 0 ) tmp->add_ref_copy();\n            if( pi_ != 0 ) pi_->release();\n            pi_ = tmp;\n        }\n\n        return *this;\n    }\n\n    void swap(shared_count & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n        r.pi_ = pi_;\n        pi_ = tmp;\n    }\n\n    long use_count() const // nothrow\n    {\n        return pi_ != 0? pi_->use_count(): 0;\n    }\n\n    bool unique() const // nothrow\n    {\n        return use_count() == 1;\n    }\n\n    bool empty() const // nothrow\n    {\n        return pi_ == 0;\n    }\n\n    friend inline bool operator==(shared_count const & a, shared_count const & b)\n    {\n        return a.pi_ == b.pi_;\n    }\n\n    friend inline bool operator<(shared_count const & a, shared_count const & b)\n    {\n        return std::less<sp_counted_base *>()( a.pi_, b.pi_ );\n    }\n\n    void * get_deleter( sp_typeinfo const & ti ) const\n    {\n        return pi_? pi_->get_deleter( ti ): 0;\n    }\n\n    void * get_untyped_deleter() const\n    {\n        return pi_? pi_->get_untyped_deleter(): 0;\n    }\n};\n\n\nclass weak_count\n{\nprivate:\n\n    sp_counted_base * pi_;\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n    int id_;\n#endif\n\n    friend class shared_count;\n\npublic:\n\n    weak_count(): pi_(0) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(weak_count_id)\n#endif\n    {\n    }\n\n    weak_count(shared_count const & r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(weak_count_id)\n#endif\n    {\n        if(pi_ != 0) pi_->weak_add_ref();\n    }\n\n    weak_count(weak_count const & r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(weak_count_id)\n#endif\n    {\n        if(pi_ != 0) pi_->weak_add_ref();\n    }\n\n// Move support\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    weak_count(weak_count && r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(weak_count_id)\n#endif\n    {\n        r.pi_ = 0;\n    }\n\n#endif\n\n    ~weak_count() // nothrow\n    {\n        if(pi_ != 0) pi_->weak_release();\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        id_ = 0;\n#endif\n    }\n\n    weak_count & operator= (shared_count const & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n\n        if( tmp != pi_ )\n        {\n            if(tmp != 0) tmp->weak_add_ref();\n            if(pi_ != 0) pi_->weak_release();\n            pi_ = tmp;\n        }\n\n        return *this;\n    }\n\n    weak_count & operator= (weak_count const & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n\n        if( tmp != pi_ )\n        {\n            if(tmp != 0) tmp->weak_add_ref();\n            if(pi_ != 0) pi_->weak_release();\n            pi_ = tmp;\n        }\n\n        return *this;\n    }\n\n    void swap(weak_count & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n        r.pi_ = pi_;\n        pi_ = tmp;\n    }\n\n    long use_count() const // nothrow\n    {\n        return pi_ != 0? pi_->use_count(): 0;\n    }\n\n    bool empty() const // nothrow\n    {\n        return pi_ == 0;\n    }\n\n    friend inline bool operator==(weak_count const & a, weak_count const & b)\n    {\n        return a.pi_ == b.pi_;\n    }\n\n    friend inline bool operator<(weak_count const & a, weak_count const & b)\n    {\n        return std::less<sp_counted_base *>()(a.pi_, b.pi_);\n    }\n};\n\ninline shared_count::shared_count( weak_count const & r ): pi_( r.pi_ )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n{\n    if( pi_ == 0 || !pi_->add_ref_lock() )\n    {\n        boost::throw_exception( boost::bad_weak_ptr() );\n    }\n}\n\ninline shared_count::shared_count( weak_count const & r, sp_nothrow_tag ): pi_( r.pi_ )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n{\n    if( pi_ != 0 && !pi_->add_ref_lock() )\n    {\n        pi_ = 0;\n    }\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#if defined( BOOST_SP_DISABLE_DEPRECATED )\n#pragma GCC diagnostic pop\n#endif\n\n#ifdef __BORLANDC__\n# pragma warn .8027     // Functions containing try are not expanded inline\n#endif\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_convertible.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_convertible.hpp\n//\n//  Copyright 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/config.hpp>\n#include <cstddef>\n\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( BOOST_NO_SFINAE )\n# define BOOST_SP_NO_SP_CONVERTIBLE\n#endif\n\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ < 303 )\n# define BOOST_SP_NO_SP_CONVERTIBLE\n#endif\n\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __BORLANDC__ ) && ( __BORLANDC__ < 0x630 )\n# define BOOST_SP_NO_SP_CONVERTIBLE\n#endif\n\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntemplate< class Y, class T > struct sp_convertible\n{\n    typedef char (&yes) [1];\n    typedef char (&no)  [2];\n\n    static yes f( T* );\n    static no  f( ... );\n\n    enum _vt { value = sizeof( (f)( static_cast<Y*>(0) ) ) == sizeof(yes) };\n};\n\ntemplate< class Y, class T > struct sp_convertible< Y, T[] >\n{\n    enum _vt { value = false };\n};\n\ntemplate< class Y, class T > struct sp_convertible< Y[], T[] >\n{\n    enum _vt { value = sp_convertible< Y[1], T[1] >::value };\n};\n\ntemplate< class Y, std::size_t N, class T > struct sp_convertible< Y[N], T[] >\n{\n    enum _vt { value = sp_convertible< Y[1], T[1] >::value };\n};\n\nstruct sp_empty\n{\n};\n\ntemplate< bool > struct sp_enable_if_convertible_impl;\n\ntemplate<> struct sp_enable_if_convertible_impl<true>\n{\n    typedef sp_empty type;\n};\n\ntemplate<> struct sp_enable_if_convertible_impl<false>\n{\n};\n\ntemplate< class Y, class T > struct sp_enable_if_convertible: public sp_enable_if_convertible_impl< sp_convertible< Y, T >::value >\n{\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base.hpp\n//\n//  Copyright 2005-2013 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/detail/sp_has_sync.hpp>\n\n#if defined( __clang__ ) && defined( __has_extension )\n# if __has_extension( __c_atomic__ )\n#   define BOOST_SP_HAS_CLANG_C11_ATOMICS\n# endif\n#endif\n\n#if defined( BOOST_SP_DISABLE_THREADS )\n# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>\n\n#elif defined( BOOST_SP_USE_STD_ATOMIC )\n# include <boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp>\n\n#elif defined( BOOST_SP_USE_SPINLOCK )\n# include <boost/smart_ptr/detail/sp_counted_base_spin.hpp>\n\n#elif defined( BOOST_SP_USE_PTHREADS )\n# include <boost/smart_ptr/detail/sp_counted_base_pt.hpp>\n\n#elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 )\n# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>\n\n#elif defined( BOOST_SP_HAS_CLANG_C11_ATOMICS )\n# include <boost/smart_ptr/detail/sp_counted_base_clang.hpp>\n\n#elif defined( __SNC__ )\n# include <boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp>\n\n#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) && !defined(__PATHSCALE__)\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp>\n\n#elif defined(__HP_aCC) && defined(__ia64)\n# include <boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp>\n\n#elif defined( __GNUC__ ) && defined( __ia64__ ) && !defined( __INTEL_COMPILER ) && !defined(__PATHSCALE__)\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp>\n\n#elif defined( __IBMCPP__ ) && defined( __powerpc )\n# include <boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp>\n\n#elif defined( __MWERKS__ ) && defined( __POWERPC__ )\n# include <boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp>\n\n#elif defined( __GNUC__ ) && ( defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc ) ) && !defined(__PATHSCALE__) && !defined( _AIX )\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp>\n\n#elif defined( __GNUC__ ) && ( defined( __mips__ ) || defined( _mips ) ) && !defined(__PATHSCALE__)\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp>\n\n#elif defined( BOOST_SP_HAS_SYNC )\n# include <boost/smart_ptr/detail/sp_counted_base_sync.hpp>\n\n#elif defined(__GNUC__) && ( defined( __sparcv9 ) || ( defined( __sparcv8 ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 402 ) ) )\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp>\n\n#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined(__CYGWIN__)\n# include <boost/smart_ptr/detail/sp_counted_base_w32.hpp>\n\n#elif defined( _AIX )\n# include <boost/smart_ptr/detail/sp_counted_base_aix.hpp>\n\n#elif !defined( BOOST_HAS_THREADS )\n# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>\n\n#else\n# include <boost/smart_ptr/detail/sp_counted_base_spin.hpp>\n\n#endif\n\n#undef BOOST_SP_HAS_CLANG_C11_ATOMICS\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED\n\n//\n//  detail/sp_counted_base_acc_ia64.hpp - aC++ on HP-UX IA64\n//\n//  Copyright 2007 Baruch Zilber\n//  Copyright 2007 Boris Gubenko\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <machine/sys/inline.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void atomic_increment( int * pw )\n{\n    // ++*pw;\n\n    _Asm_fetchadd(_FASZ_W, _SEM_REL, pw, +1, _LDHINT_NONE);\n} \n\ninline int atomic_decrement( int * pw )\n{\n    // return --*pw;\n\n    int r = static_cast<int>(_Asm_fetchadd(_FASZ_W, _SEM_REL, pw, -1, _LDHINT_NONE));\n    if (1 == r)\n    {\n        _Asm_mf();\n    }\n    \n    return r - 1;\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    // if( *pw != 0 ) ++*pw;\n    // return *pw;\n\n    int v = *pw;\n    \n    for (;;)\n    {\n        if (0 == v)\n        {\n            return 0;\n        }\n        \n        _Asm_mov_to_ar(_AREG_CCV,\n                       v,\n                       (_UP_CALL_FENCE | _UP_SYS_FENCE | _DOWN_CALL_FENCE | _DOWN_SYS_FENCE));\n        int r = static_cast<int>(_Asm_cmpxchg(_SZ_W, _SEM_ACQ, pw, v + 1, _LDHINT_NONE));\n        if (r == v)\n        {\n            return r + 1;\n        }\n        \n        v = r;\n    }\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<int const volatile &>( use_count_ ); // TODO use ld.acq here\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_aix.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_AIX_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_AIX_HPP_INCLUDED\n\n//\n//  detail/sp_counted_base_aix.hpp\n//   based on: detail/sp_counted_base_w32.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//  Copyright 2006 Michael van der Westhuizen\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n//  Thanks to Ben Hitchings for the #weak + (#shared != 0)\n//  formulation\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <builtins.h>\n#include <sys/atomic_op.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void atomic_increment( int32_t* pw )\n{\n    // ++*pw;\n\n    fetch_and_add( pw, 1 );\n}\n\ninline int32_t atomic_decrement( int32_t * pw )\n{\n    // return --*pw;\n\n    int32_t originalValue;\n\n    __lwsync();\n    originalValue = fetch_and_add( pw, -1 );\n    __isync();\n\n    return (originalValue - 1);\n}\n\ninline int32_t atomic_conditional_increment( int32_t * pw )\n{\n    // if( *pw != 0 ) ++*pw;\n    // return *pw;\n\n    int32_t tmp = fetch_and_add( pw, 0 );\n    for( ;; )\n    {\n        if( tmp == 0 ) return 0;\n        if( compare_and_swap( pw, &tmp, tmp + 1 ) ) return (tmp + 1);\n    }\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int32_t use_count_;        // #shared\n    int32_t weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return fetch_and_add( const_cast<int32_t*>(&use_count_), 0 );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_AIX_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_clang.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CLANG_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CLANG_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_counted_base_clang.hpp - __c11 clang intrinsics\n//\n//  Copyright (c) 2007, 2013, 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <boost/cstdint.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntypedef _Atomic( boost::int_least32_t ) atomic_int_least32_t;\n\ninline void atomic_increment( atomic_int_least32_t * pw )\n{\n    __c11_atomic_fetch_add( pw, 1, __ATOMIC_RELAXED );\n}\n\ninline boost::int_least32_t atomic_decrement( atomic_int_least32_t * pw )\n{\n    return __c11_atomic_fetch_sub( pw, 1, __ATOMIC_ACQ_REL );\n}\n\ninline boost::int_least32_t atomic_conditional_increment( atomic_int_least32_t * pw )\n{\n    // long r = *pw;\n    // if( r != 0 ) ++*pw;\n    // return r;\n\n    boost::int_least32_t r = __c11_atomic_load( pw, __ATOMIC_RELAXED );\n\n    for( ;; )\n    {\n        if( r == 0 )\n        {\n            return r;\n        }\n\n        if( __c11_atomic_compare_exchange_weak( pw, &r, r + 1, __ATOMIC_RELAXED, __ATOMIC_RELAXED ) )\n        {\n            return r;\n        }\n    }    \n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    atomic_int_least32_t use_count_;\t// #shared\n    atomic_int_least32_t weak_count_;\t// #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base()\n    {\n        __c11_atomic_init( &use_count_, 1 );\n        __c11_atomic_init( &weak_count_, 1 );\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return __c11_atomic_load( const_cast< atomic_int_least32_t* >( &use_count_ ), __ATOMIC_ACQUIRE );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CLANG_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_cw_ppc.hpp - CodeWarrior on PowerPC\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n//  Thanks to Ben Hitchings for the #weak + (#shared != 0)\n//  formulation\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void atomic_increment( register long * pw )\n{\n    register int a;\n\n    asm\n    {\nloop:\n\n    lwarx   a, 0, pw\n    addi    a, a, 1\n    stwcx.  a, 0, pw\n    bne-    loop\n    }\n}\n\ninline long atomic_decrement( register long * pw )\n{\n    register int a;\n\n    asm\n    {\n    sync\n\nloop:\n\n    lwarx   a, 0, pw\n    addi    a, a, -1\n    stwcx.  a, 0, pw\n    bne-    loop\n\n    isync\n    }\n\n    return a;\n}\n\ninline long atomic_conditional_increment( register long * pw )\n{\n    register int a;\n\n    asm\n    {\nloop:\n\n    lwarx   a, 0, pw\n    cmpwi   a, 0\n    beq     store\n\n    addi    a, a, 1\n\nstore:\n\n    stwcx.  a, 0, pw\n    bne-    loop\n    }\n\n    return a;\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    long use_count_;        // #shared\n    long weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<long const volatile &>( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_X86_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_X86_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_cw_x86.hpp - CodeWarrion on 486+\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//  Copyright 2005 Rene Rivera\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n//  Thanks to Ben Hitchings for the #weak + (#shared != 0)\n//  formulation\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline int atomic_exchange_and_add( int * pw, int dv )\n{\n    // int r = *pw;\n    // *pw += dv;\n    // return r;\n\n    asm\n    {\n        mov esi, [pw]\n        mov eax, dv\n        lock xadd dword ptr [esi], eax\n    }\n}\n\ninline void atomic_increment( int * pw )\n{\n    //atomic_exchange_and_add( pw, 1 );\n\n    asm\n    {\n        mov esi, [pw]\n        lock inc dword ptr [esi]\n    }\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    // int rv = *pw;\n    // if( rv != 0 ) ++*pw;\n    // return rv;\n\n    asm\n    {\n        mov esi, [pw]\n        mov eax, dword ptr [esi]\n    L0:\n        test eax, eax\n        je L1\n        mov ebx, eax\n        inc ebx\n        lock cmpxchg dword ptr [esi], ebx\n        jne L0\n    L1:\n    }\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_exchange_and_add( &use_count_, -1 ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<int const volatile &>( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_X86_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED\n\n//\n//  detail/sp_counted_base_gcc_ia64.hpp - g++ on IA64\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2006 Peter Dimov\n//  Copyright 2005 Ben Hutchings\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void atomic_increment( int * pw )\n{\n    // ++*pw;\n\n    int tmp;\n\n    // No barrier is required here but fetchadd always has an acquire or\n    // release barrier associated with it.  We choose release as it should be\n    // cheaper.\n    __asm__ (\"fetchadd4.rel %0=%1,1\" :\n         \"=r\"(tmp), \"=m\"(*pw) :\n         \"m\"( *pw ));\n}\n\ninline int atomic_decrement( int * pw )\n{\n    // return --*pw;\n\n    int rv;\n\n    __asm__ (\"     fetchadd4.rel %0=%1,-1 ;; \\n\"\n             \"     cmp.eq        p7,p0=1,%0 ;; \\n\"\n             \"(p7) ld4.acq       %0=%1    \" :\n             \"=&r\"(rv), \"=m\"(*pw) :\n             \"m\"( *pw ) :\n             \"p7\");\n\n    return rv;\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    // if( *pw != 0 ) ++*pw;\n    // return *pw;\n\n    int rv, tmp, tmp2;\n\n    __asm__ (\"0:   ld4          %0=%3           ;; \\n\"\n         \"     cmp.eq       p7,p0=0,%0        ;; \\n\"\n         \"(p7) br.cond.spnt 1f                \\n\"\n         \"     mov          ar.ccv=%0         \\n\"\n         \"     add          %1=1,%0           ;; \\n\"\n         \"     cmpxchg4.acq %2=%3,%1,ar.ccv ;; \\n\"\n         \"     cmp.ne       p7,p0=%0,%2       ;; \\n\"\n         \"(p7) br.cond.spnt 0b                \\n\"\n         \"     mov          %0=%1             ;; \\n\"\n         \"1:\" : \n         \"=&r\"(rv), \"=&r\"(tmp), \"=&r\"(tmp2), \"=m\"(*pw) :\n         \"m\"( *pw ) :\n         \"ar.ccv\", \"p7\");\n\n    return rv;\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<int const volatile &>( use_count_ ); // TODO use ld.acq here\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp",
    "content": "#ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED\n#define BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_gcc_mips.hpp - g++ on MIPS\n//\n//  Copyright (c) 2009, Spirent Communications, Inc.\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void atomic_increment( int * pw )\n{\n    // ++*pw;\n\n    int tmp;\n\n    __asm__ __volatile__\n    (\n        \"0:\\n\\t\"\n        \".set push\\n\\t\"\n        \".set mips2\\n\\t\"\n        \"ll %0, %1\\n\\t\"\n        \"addiu %0, 1\\n\\t\"\n        \"sc %0, %1\\n\\t\"\n        \".set pop\\n\\t\"\n        \"beqz %0, 0b\":\n        \"=&r\"( tmp ), \"=m\"( *pw ):\n        \"m\"( *pw )\n    );\n}\n\ninline int atomic_decrement( int * pw )\n{\n    // return --*pw;\n\n    int rv, tmp;\n\n    __asm__ __volatile__\n    (\n        \"0:\\n\\t\"\n        \".set push\\n\\t\"\n        \".set mips2\\n\\t\"\n        \"ll %1, %2\\n\\t\"\n        \"addiu %0, %1, -1\\n\\t\"\n        \"sc %0, %2\\n\\t\"\n        \".set pop\\n\\t\"\n        \"beqz %0, 0b\\n\\t\"\n        \"addiu %0, %1, -1\":\n        \"=&r\"( rv ), \"=&r\"( tmp ), \"=m\"( *pw ):\n        \"m\"( *pw ):\n        \"memory\"\n    );\n\n    return rv;\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    // if( *pw != 0 ) ++*pw;\n    // return *pw;\n\n    int rv, tmp;\n\n    __asm__ __volatile__\n    (\n        \"0:\\n\\t\"\n        \".set push\\n\\t\"\n        \".set mips2\\n\\t\"\n        \"ll %0, %2\\n\\t\"\n        \"beqz %0, 1f\\n\\t\"\n        \"addiu %1, %0, 1\\n\\t\"\n        \"sc %1, %2\\n\\t\"\n        \".set pop\\n\\t\"\n        \"beqz %1, 0b\\n\\t\"\n        \"addiu %0, %0, 1\\n\\t\"\n        \"1:\":\n        \"=&r\"( rv ), \"=&r\"( tmp ), \"=m\"( *pw ):\n        \"m\"( *pw ):\n        \"memory\"\n    );\n\n    return rv;\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<int const volatile &>( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_gcc_ppc.hpp - g++ on PowerPC\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n//  Thanks to Ben Hitchings for the #weak + (#shared != 0)\n//  formulation\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void atomic_increment( int * pw )\n{\n    // ++*pw;\n\n    int tmp;\n\n    __asm__\n    (\n        \"0:\\n\\t\"\n        \"lwarx %1, 0, %2\\n\\t\"\n        \"addi %1, %1, 1\\n\\t\"\n        \"stwcx. %1, 0, %2\\n\\t\"\n        \"bne- 0b\":\n\n        \"=m\"( *pw ), \"=&b\"( tmp ):\n        \"r\"( pw ), \"m\"( *pw ):\n        \"cc\"\n    );\n}\n\ninline int atomic_decrement( int * pw )\n{\n    // return --*pw;\n\n    int rv;\n\n    __asm__ __volatile__\n    (\n        \"sync\\n\\t\"\n        \"0:\\n\\t\"\n        \"lwarx %1, 0, %2\\n\\t\"\n        \"addi %1, %1, -1\\n\\t\"\n        \"stwcx. %1, 0, %2\\n\\t\"\n        \"bne- 0b\\n\\t\"\n        \"isync\":\n\n        \"=m\"( *pw ), \"=&b\"( rv ):\n        \"r\"( pw ), \"m\"( *pw ):\n        \"memory\", \"cc\"\n    );\n\n    return rv;\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    // if( *pw != 0 ) ++*pw;\n    // return *pw;\n\n    int rv;\n\n    __asm__\n    (\n        \"0:\\n\\t\"\n        \"lwarx %1, 0, %2\\n\\t\"\n        \"cmpwi %1, 0\\n\\t\"\n        \"beq 1f\\n\\t\"\n        \"addi %1, %1, 1\\n\\t\"\n        \"1:\\n\\t\"\n        \"stwcx. %1, 0, %2\\n\\t\"\n        \"bne- 0b\":\n\n        \"=m\"( *pw ), \"=&b\"( rv ):\n        \"r\"( pw ), \"m\"( *pw ):\n        \"cc\"\n    );\n\n    return rv;\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<int const volatile &>( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_counted_base_gcc_sparc.hpp - g++ on Sparc V8+\n//\n//  Copyright (c) 2006 Piotr Wyderski\n//  Copyright (c) 2006 Tomas Puverle\n//  Copyright (c) 2006 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  Thanks to Michael van der Westhuizen\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <inttypes.h> // int32_t\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline int32_t compare_and_swap( int32_t * dest_, int32_t compare_, int32_t swap_ )\n{\n    __asm__ __volatile__( \"cas [%1], %2, %0\"\n                        : \"+r\" (swap_)\n                        : \"r\" (dest_), \"r\" (compare_)\n                        : \"memory\" );\n\n    return swap_;\n}\n\ninline int32_t atomic_fetch_and_add( int32_t * pw, int32_t dv )\n{\n    // long r = *pw;\n    // *pw += dv;\n    // return r;\n\n    for( ;; )\n    {\n        int32_t r = *pw;\n\n        if( __builtin_expect((compare_and_swap(pw, r, r + dv) == r), 1) )\n        {\n            return r;\n        }\n    }\n}\n\ninline void atomic_increment( int32_t * pw )\n{\n    atomic_fetch_and_add( pw, 1 );\n}\n\ninline int32_t atomic_decrement( int32_t * pw )\n{\n    return atomic_fetch_and_add( pw, -1 );\n}\n\ninline int32_t atomic_conditional_increment( int32_t * pw )\n{\n    // long r = *pw;\n    // if( r != 0 ) ++*pw;\n    // return r;\n\n    for( ;; )\n    {\n        int32_t r = *pw;\n\n        if( r == 0 )\n        {\n            return r;\n        }\n\n        if( __builtin_expect( ( compare_and_swap( pw, r, r + 1 ) == r ), 1 ) )\n        {\n            return r;\n        }\n    }    \n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int32_t use_count_;        // #shared\n    int32_t weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return const_cast< int32_t const volatile & >( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_gcc_x86.hpp - g++ on 486+ or AMD64\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n//  Thanks to Ben Hitchings for the #weak + (#shared != 0)\n//  formulation\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline int atomic_exchange_and_add( int * pw, int dv )\n{\n    // int r = *pw;\n    // *pw += dv;\n    // return r;\n\n    int r;\n\n    __asm__ __volatile__\n    (\n        \"lock\\n\\t\"\n        \"xadd %1, %0\":\n        \"=m\"( *pw ), \"=r\"( r ): // outputs (%0, %1)\n        \"m\"( *pw ), \"1\"( dv ): // inputs (%2, %3 == %1)\n        \"memory\", \"cc\" // clobbers\n    );\n\n    return r;\n}\n\ninline void atomic_increment( int * pw )\n{\n    //atomic_exchange_and_add( pw, 1 );\n\n    __asm__\n    (\n        \"lock\\n\\t\"\n        \"incl %0\":\n        \"=m\"( *pw ): // output (%0)\n        \"m\"( *pw ): // input (%1)\n        \"cc\" // clobbers\n    );\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    // int rv = *pw;\n    // if( rv != 0 ) ++*pw;\n    // return rv;\n\n    int rv, tmp;\n\n    __asm__\n    (\n        \"movl %0, %%eax\\n\\t\"\n        \"0:\\n\\t\"\n        \"test %%eax, %%eax\\n\\t\"\n        \"je 1f\\n\\t\"\n        \"movl %%eax, %2\\n\\t\"\n        \"incl %2\\n\\t\"\n        \"lock\\n\\t\"\n        \"cmpxchgl %2, %0\\n\\t\"\n        \"jne 0b\\n\\t\"\n        \"1:\":\n        \"=m\"( *pw ), \"=&a\"( rv ), \"=&r\"( tmp ): // outputs (%0, %1, %2)\n        \"m\"( *pw ): // input (%3)\n        \"cc\" // clobbers\n    );\n\n    return rv;\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_exchange_and_add( &use_count_, -1 ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<int const volatile &>( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_nt.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_nt.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    long use_count_;        // #shared\n    long weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        ++use_count_;\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        if( use_count_ == 0 ) return false;\n        ++use_count_;\n        return true;\n    }\n\n    void release() // nothrow\n    {\n        if( --use_count_ == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        ++weak_count_;\n    }\n\n    void weak_release() // nothrow\n    {\n        if( --weak_count_ == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return use_count_;\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_pt.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <boost/assert.hpp>\n#include <pthread.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    long use_count_;        // #shared\n    long weak_count_;       // #weak + (#shared != 0)\n\n    mutable pthread_mutex_t m_;\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init\n\n#if defined(__hpux) && defined(_DECTHREADS_)\n        BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 );\n#else\n        BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 );\n#endif\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n        BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 );\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );\n        ++use_count_;\n        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );\n        bool r = use_count_ == 0? false: ( ++use_count_, true );\n        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );\n        return r;\n    }\n\n    void release() // nothrow\n    {\n        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );\n        long new_use_count = --use_count_;\n        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );\n\n        if( new_use_count == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );\n        ++weak_count_;\n        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );\n    }\n\n    void weak_release() // nothrow\n    {\n        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );\n        long new_weak_count = --weak_count_;\n        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );\n\n        if( new_weak_count == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );\n        long r = use_count_;\n        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );\n\n        return r;\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SNC_PS3_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SNC_PS3_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_counted_base_gcc_sparc.hpp - g++ on Sparc V8+\n//\n//  Copyright (c) 2006 Piotr Wyderski\n//  Copyright (c) 2006 Tomas Puverle\n//  Copyright (c) 2006 Peter Dimov\n//  Copyright (c) 2011 Emil Dotchevski\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  Thanks to Michael van der Westhuizen\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <inttypes.h> // uint32_t\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline uint32_t compare_and_swap( uint32_t * dest_, uint32_t compare_, uint32_t swap_ )\n{\n    return __builtin_cellAtomicCompareAndSwap32(dest_,compare_,swap_);\n}\n\ninline uint32_t atomic_fetch_and_add( uint32_t * pw, uint32_t dv )\n{\n    // long r = *pw;\n    // *pw += dv;\n    // return r;\n\n    for( ;; )\n    {\n        uint32_t r = *pw;\n\n        if( __builtin_expect((compare_and_swap(pw, r, r + dv) == r), 1) )\n        {\n            return r;\n        }\n    }\n}\n\ninline void atomic_increment( uint32_t * pw )\n{\n    (void) __builtin_cellAtomicIncr32( pw );\n}\n\ninline uint32_t atomic_decrement( uint32_t * pw )\n{\n    return __builtin_cellAtomicDecr32( pw );\n}\n\ninline uint32_t atomic_conditional_increment( uint32_t * pw )\n{\n    // long r = *pw;\n    // if( r != 0 ) ++*pw;\n    // return r;\n\n    for( ;; )\n    {\n        uint32_t r = *pw;\n\n        if( r == 0 )\n        {\n            return r;\n        }\n\n        if( __builtin_expect( ( compare_and_swap( pw, r, r + 1 ) == r ), 1 ) )\n        {\n            return r;\n        }\n    }    \n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    uint32_t use_count_;        // #shared\n    uint32_t weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return const_cast< uint32_t const volatile & >( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SNC_PS3_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_solaris.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SOLARIS_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SOLARIS_HPP_INCLUDED\n\n//\n//  detail/sp_counted_base_solaris.hpp\n//   based on: detail/sp_counted_base_w32.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//  Copyright 2006 Michael van der Westhuizen\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n//  Thanks to Ben Hitchings for the #weak + (#shared != 0)\n//  formulation\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <atomic.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    uint32_t use_count_;        // #shared\n    uint32_t weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_inc_32( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        for( ;; )\n        {\n            uint32_t tmp = static_cast< uint32_t const volatile& >( use_count_ );\n            if( tmp == 0 ) return false;\n            if( atomic_cas_32( &use_count_, tmp, tmp + 1 ) == tmp ) return true;\n        }\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_dec_32_nv( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_inc_32( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_dec_32_nv( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<long const volatile &>( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SOLARIS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_spin.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_spin.hpp - spinlock pool atomic emulation\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <boost/smart_ptr/detail/spinlock_pool.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline int atomic_exchange_and_add( int * pw, int dv )\n{\n    spinlock_pool<1>::scoped_lock lock( pw );\n\n    int r = *pw;\n    *pw += dv;\n    return r;\n}\n\ninline void atomic_increment( int * pw )\n{\n    spinlock_pool<1>::scoped_lock lock( pw );\n    ++*pw;\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    spinlock_pool<1>::scoped_lock lock( pw );\n\n    int rv = *pw;\n    if( rv != 0 ) ++*pw;\n    return rv;\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_exchange_and_add( &use_count_, -1 ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        spinlock_pool<1>::scoped_lock lock( &use_count_ );\n        return use_count_;\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_STD_ATOMIC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_STD_ATOMIC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_counted_base_std_atomic.hpp - C++11 std::atomic\n//\n//  Copyright (c) 2007, 2013 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <atomic>\n#include <cstdint>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void atomic_increment( std::atomic_int_least32_t * pw )\n{\n    pw->fetch_add( 1, std::memory_order_relaxed );\n}\n\ninline std::int_least32_t atomic_decrement( std::atomic_int_least32_t * pw )\n{\n    return pw->fetch_sub( 1, std::memory_order_acq_rel );\n}\n\ninline std::int_least32_t atomic_conditional_increment( std::atomic_int_least32_t * pw )\n{\n    // long r = *pw;\n    // if( r != 0 ) ++*pw;\n    // return r;\n\n    std::int_least32_t r = pw->load( std::memory_order_relaxed );\n\n    for( ;; )\n    {\n        if( r == 0 )\n        {\n            return r;\n        }\n\n        if( pw->compare_exchange_weak( r, r + 1, std::memory_order_relaxed, std::memory_order_relaxed ) )\n        {\n            return r;\n        }\n    }    \n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    std::atomic_int_least32_t use_count_;\t// #shared\n    std::atomic_int_least32_t weak_count_;\t// #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return use_count_.load( std::memory_order_acquire );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_STD_ATOMIC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_sync.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_counted_base_sync.hpp - g++ 4.1+ __sync intrinsics\n//\n//  Copyright (c) 2007 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <limits.h>\n\n#if defined( __ia64__ ) && defined( __INTEL_COMPILER )\n# include <ia64intrin.h>\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n#if INT_MAX >= 2147483647\n\ntypedef int sp_int32_t;\n\n#else\n\ntypedef long sp_int32_t;\n\n#endif\n\ninline void atomic_increment( sp_int32_t * pw )\n{\n    __sync_fetch_and_add( pw, 1 );\n}\n\ninline sp_int32_t atomic_decrement( sp_int32_t * pw )\n{\n    return __sync_fetch_and_add( pw, -1 );\n}\n\ninline sp_int32_t atomic_conditional_increment( sp_int32_t * pw )\n{\n    // long r = *pw;\n    // if( r != 0 ) ++*pw;\n    // return r;\n\n    sp_int32_t r = *pw;\n\n    for( ;; )\n    {\n        if( r == 0 )\n        {\n            return r;\n        }\n\n        sp_int32_t r2 = __sync_val_compare_and_swap( pw, r, r + 1 );\n\n        if( r2 == r )\n        {\n            return r;\n        }\n        else\n        {\n            r = r2;\n        }\n    }    \n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    sp_int32_t use_count_;        // #shared\n    sp_int32_t weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return const_cast< sp_int32_t const volatile & >( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_VACPP_PPC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_VACPP_PPC_HPP_INCLUDED\n\n//\n//  detail/sp_counted_base_vacpp_ppc.hpp - xlC(vacpp) on POWER\n//   based on: detail/sp_counted_base_w32.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//  Copyright 2006 Michael van der Westhuizen\n//  Copyright 2012 IBM Corp.\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n//  Thanks to Ben Hitchings for the #weak + (#shared != 0)\n//  formulation\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nextern \"builtin\" void __lwsync(void);\nextern \"builtin\" void __isync(void);\nextern \"builtin\" int __fetch_and_add(volatile int* addr, int val);\nextern \"builtin\" int __compare_and_swap(volatile int*, int*, int);\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void atomic_increment( int *pw )\n{\n   // ++*pw;\n   __lwsync();\n   __fetch_and_add(pw, 1);\n   __isync();\n} \n\ninline int atomic_decrement( int *pw )\n{\n   // return --*pw;\n   __lwsync();\n   int originalValue = __fetch_and_add(pw, -1);\n   __isync();\n\n   return (originalValue - 1);\n}\n\ninline int atomic_conditional_increment( int *pw )\n{\n   // if( *pw != 0 ) ++*pw;\n   // return *pw;\n\n   __lwsync();\n   int v = *const_cast<volatile int*>(pw);\n   for (;;)\n   // loop until state is known\n   {\n      if (v == 0) return 0;\n      if (__compare_and_swap(pw, &v, v + 1))\n      {\n         __isync(); return (v + 1);\n      }\n   }\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n    char pad[64] __attribute__((__aligned__(64)));\n            // pad to prevent false sharing\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return *const_cast<volatile int*>(&use_count_); \n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_VACPP_PPC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_w32.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n//  Thanks to Ben Hitchings for the #weak + (#shared != 0)\n//  formulation\n//\n\n#include <boost/smart_ptr/detail/sp_interlocked.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    long use_count_;        // #shared\n    long weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n    virtual void * get_untyped_deleter() = 0;\n\n    void add_ref_copy()\n    {\n        BOOST_SP_INTERLOCKED_INCREMENT( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        for( ;; )\n        {\n            long tmp = static_cast< long const volatile& >( use_count_ );\n            if( tmp == 0 ) return false;\n\n#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1200 )\n\n            // work around a code generation bug\n\n            long tmp2 = tmp + 1;\n            if( BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp2, tmp ) == tmp2 - 1 ) return true;\n\n#else\n\n            if( BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp + 1, tmp ) == tmp ) return true;\n\n#endif\n        }\n    }\n\n    void release() // nothrow\n    {\n        if( BOOST_SP_INTERLOCKED_DECREMENT( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        BOOST_SP_INTERLOCKED_INCREMENT( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( BOOST_SP_INTERLOCKED_DECREMENT( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<long const volatile &>( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_impl.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_impl.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/config.hpp>\n\n#if defined(BOOST_SP_USE_STD_ALLOCATOR) && defined(BOOST_SP_USE_QUICK_ALLOCATOR)\n# error BOOST_SP_USE_STD_ALLOCATOR and BOOST_SP_USE_QUICK_ALLOCATOR are incompatible.\n#endif\n\n#include <boost/checked_delete.hpp>\n#include <boost/smart_ptr/detail/sp_counted_base.hpp>\n\n#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)\n#include <boost/smart_ptr/detail/quick_allocator.hpp>\n#endif\n\n#if defined(BOOST_SP_USE_STD_ALLOCATOR)\n#include <memory>           // std::allocator\n#endif\n\n#include <cstddef>          // std::size_t\n\nnamespace boost\n{\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n\nvoid sp_scalar_constructor_hook( void * px, std::size_t size, void * pn );\nvoid sp_scalar_destructor_hook( void * px, std::size_t size, void * pn );\n\n#endif\n\nnamespace detail\n{\n\ntemplate<class X> class sp_counted_impl_p: public sp_counted_base\n{\nprivate:\n\n    X * px_;\n\n    sp_counted_impl_p( sp_counted_impl_p const & );\n    sp_counted_impl_p & operator= ( sp_counted_impl_p const & );\n\n    typedef sp_counted_impl_p<X> this_type;\n\npublic:\n\n    explicit sp_counted_impl_p( X * px ): px_( px )\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_constructor_hook( px, sizeof(X), this );\n#endif\n    }\n\n    virtual void dispose() // nothrow\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_destructor_hook( px_, sizeof(X), this );\n#endif\n        boost::checked_delete( px_ );\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & )\n    {\n        return 0;\n    }\n\n    virtual void * get_untyped_deleter()\n    {\n        return 0;\n    }\n\n#if defined(BOOST_SP_USE_STD_ALLOCATOR)\n\n    void * operator new( std::size_t )\n    {\n        return std::allocator<this_type>().allocate( 1, static_cast<this_type *>(0) );\n    }\n\n    void operator delete( void * p )\n    {\n        std::allocator<this_type>().deallocate( static_cast<this_type *>(p), 1 );\n    }\n\n#endif\n\n#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)\n\n    void * operator new( std::size_t )\n    {\n        return quick_allocator<this_type>::alloc();\n    }\n\n    void operator delete( void * p )\n    {\n        quick_allocator<this_type>::dealloc( p );\n    }\n\n#endif\n};\n\n//\n// Borland's Codeguard trips up over the -Vx- option here:\n//\n#ifdef __CODEGUARD__\n# pragma option push -Vx-\n#endif\n\ntemplate<class P, class D> class sp_counted_impl_pd: public sp_counted_base\n{\nprivate:\n\n    P ptr; // copy constructor must not throw\n    D del; // copy constructor must not throw\n\n    sp_counted_impl_pd( sp_counted_impl_pd const & );\n    sp_counted_impl_pd & operator= ( sp_counted_impl_pd const & );\n\n    typedef sp_counted_impl_pd<P, D> this_type;\n\npublic:\n\n    // pre: d(p) must not throw\n\n    sp_counted_impl_pd( P p, D & d ): ptr( p ), del( d )\n    {\n    }\n\n    sp_counted_impl_pd( P p ): ptr( p ), del()\n    {\n    }\n\n    virtual void dispose() // nothrow\n    {\n        del( ptr );\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti )\n    {\n        return ti == BOOST_SP_TYPEID(D)? &reinterpret_cast<char&>( del ): 0;\n    }\n\n    virtual void * get_untyped_deleter()\n    {\n        return &reinterpret_cast<char&>( del );\n    }\n\n#if defined(BOOST_SP_USE_STD_ALLOCATOR)\n\n    void * operator new( std::size_t )\n    {\n        return std::allocator<this_type>().allocate( 1, static_cast<this_type *>(0) );\n    }\n\n    void operator delete( void * p )\n    {\n        std::allocator<this_type>().deallocate( static_cast<this_type *>(p), 1 );\n    }\n\n#endif\n\n#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)\n\n    void * operator new( std::size_t )\n    {\n        return quick_allocator<this_type>::alloc();\n    }\n\n    void operator delete( void * p )\n    {\n        quick_allocator<this_type>::dealloc( p );\n    }\n\n#endif\n};\n\ntemplate<class P, class D, class A> class sp_counted_impl_pda: public sp_counted_base\n{\nprivate:\n\n    P p_; // copy constructor must not throw\n    D d_; // copy constructor must not throw\n    A a_; // copy constructor must not throw\n\n    sp_counted_impl_pda( sp_counted_impl_pda const & );\n    sp_counted_impl_pda & operator= ( sp_counted_impl_pda const & );\n\n    typedef sp_counted_impl_pda<P, D, A> this_type;\n\npublic:\n\n    // pre: d( p ) must not throw\n\n    sp_counted_impl_pda( P p, D & d, A a ): p_( p ), d_( d ), a_( a )\n    {\n    }\n\n    sp_counted_impl_pda( P p, A a ): p_( p ), d_( a ), a_( a )\n    {\n    }\n\n    virtual void dispose() // nothrow\n    {\n        d_( p_ );\n    }\n\n    virtual void destroy() // nothrow\n    {\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n        typedef typename std::allocator_traits<A>::template rebind_alloc< this_type > A2;\n\n#else\n\n        typedef typename A::template rebind< this_type >::other A2;\n\n#endif\n\n        A2 a2( a_ );\n\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n        std::allocator_traits<A2>::destroy( a2, this );\n\n#else\n\n        this->~this_type();\n\n#endif\n\n        a2.deallocate( this, 1 );\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti )\n    {\n        return ti == BOOST_SP_TYPEID( D )? &reinterpret_cast<char&>( d_ ): 0;\n    }\n\n    virtual void * get_untyped_deleter()\n    {\n        return &reinterpret_cast<char&>( d_ );\n    }\n};\n\n#ifdef __CODEGUARD__\n# pragma option pop\n#endif\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_disable_deprecated.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_DISABLE_DEPRECATED_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_DISABLE_DEPRECATED_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/smart_ptr/detail/sp_disable_deprecated.hpp\n//\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/config.hpp>\n\n#if defined( __GNUC__ ) && ( defined( __GXX_EXPERIMENTAL_CXX0X__ ) || ( __cplusplus >= 201103L ) )\n\n# if defined( BOOST_GCC )\n\n#  if BOOST_GCC >= 40600\n#   define BOOST_SP_DISABLE_DEPRECATED\n#  endif\n\n# elif defined( __clang__ ) && defined( __has_warning )\n\n#  if __has_warning( \"-Wdeprecated-declarations\" )\n#   define BOOST_SP_DISABLE_DEPRECATED\n#  endif\n\n# endif\n\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_DISABLE_DEPRECATED_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_forward.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_FORWARD_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_FORWARD_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_forward.hpp\n//\n//  Copyright 2008,2012 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/config.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n#if defined( BOOST_GCC ) && __GNUC__ * 100 + __GNUC_MINOR__ <= 404\n\n// GCC 4.4 supports an outdated version of rvalue references and creates a copy of the forwarded object.\n// This results in warnings 'returning reference to temporary'. Therefore we use a special version similar to std::forward.\ntemplate< class T > T&& sp_forward( T && t ) BOOST_NOEXCEPT\n{\n    return t;\n}\n\n#else\n\ntemplate< class T > T&& sp_forward( T & t ) BOOST_NOEXCEPT\n{\n    return static_cast< T&& >( t );\n}\n\n#endif\n\n#endif\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_FORWARD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_has_sync.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/smart_ptr/detail/sp_has_sync.hpp\n//\n//  Copyright (c) 2008, 2009 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  Defines the BOOST_SP_HAS_SYNC macro if the __sync_* intrinsics\n//  are available.\n//\n\n#ifndef BOOST_SP_NO_SYNC\n\n#if defined( __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 )\n\n# define BOOST_SP_HAS_SYNC\n\n#elif defined( __IBMCPP__ ) && ( __IBMCPP__ >= 1210 )\n\n# define BOOST_SP_HAS_SYNC\n\n#elif defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 )\n\n#define BOOST_SP_HAS_SYNC\n\n#if defined( __arm__ )  || defined( __armel__ )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __hppa ) || defined( __hppa__ )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __m68k__ )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __sh__ )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __sparc__ )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __INTEL_COMPILER ) && !defined( __ia64__ ) && ( __INTEL_COMPILER < 1110 )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined(__PATHSCALE__) && ((__PATHCC__ == 4) && (__PATHCC_MINOR__ < 9)) \n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#endif\n\n#endif // #ifndef BOOST_SP_NO_SYNC\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_if_array.hpp",
    "content": "/*\n * Copyright (c) 2012-2014 Glen Joseph Fernandes \n * glenfe at live dot com\n *\n * Distributed under the Boost Software License, \n * Version 1.0. (See accompanying file LICENSE_1_0.txt \n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_DETAIL_SP_IF_ARRAY_HPP\n#define BOOST_SMART_PTR_DETAIL_SP_IF_ARRAY_HPP\n\n#include <boost/smart_ptr/shared_ptr.hpp>\n\nnamespace boost {\n    namespace detail {\n        template<class T>\n        struct sp_if_array;\n\n        template<class T>\n        struct sp_if_array<T[]> {\n            typedef boost::shared_ptr<T[]> type;\n        };\n\n        template<class T>\n        struct sp_if_size_array;\n\n        template<class T, std::size_t N>\n        struct sp_if_size_array<T[N]> {\n            typedef boost::shared_ptr<T[N]> type;\n        };\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_interlocked.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_INTERLOCKED_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_INTERLOCKED_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/sp_interlocked.hpp\n//\n//  Copyright 2005, 2014 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/config.hpp>\n\n// BOOST_SP_HAS_INTRIN_H\n\n// VC9 has intrin.h, but it collides with <utility>\n#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1600\n\n# define BOOST_SP_HAS_INTRIN_H\n\n// Unlike __MINGW64__, __MINGW64_VERSION_MAJOR is defined by MinGW-w64 for both 32 and 64-bit targets.\n#elif defined( __MINGW64_VERSION_MAJOR )\n\n// MinGW-w64 provides intrin.h for both 32 and 64-bit targets.\n# define BOOST_SP_HAS_INTRIN_H\n\n// Intel C++ on Windows on VC10+ stdlib\n#elif defined( BOOST_INTEL_WIN ) && defined( _CPPLIB_VER ) && _CPPLIB_VER >= 520\n\n# define BOOST_SP_HAS_INTRIN_H\n\n#endif\n\n#if defined( BOOST_USE_WINDOWS_H )\n\n# include <windows.h>\n\n# define BOOST_SP_INTERLOCKED_INCREMENT InterlockedIncrement\n# define BOOST_SP_INTERLOCKED_DECREMENT InterlockedDecrement\n# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE InterlockedExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd\n\n#elif defined( BOOST_USE_INTRIN_H ) || defined( BOOST_SP_HAS_INTRIN_H )\n\n#include <intrin.h>\n\n# define BOOST_SP_INTERLOCKED_INCREMENT _InterlockedIncrement\n# define BOOST_SP_INTERLOCKED_DECREMENT _InterlockedDecrement\n# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE _InterlockedExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd\n\n#elif defined( _WIN32_WCE )\n\n#if _WIN32_WCE >= 0x600\n\nextern \"C\" long __cdecl _InterlockedIncrement( long volatile * );\nextern \"C\" long __cdecl _InterlockedDecrement( long volatile * );\nextern \"C\" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );\nextern \"C\" long __cdecl _InterlockedExchange( long volatile *, long );\nextern \"C\" long __cdecl _InterlockedExchangeAdd( long volatile *, long );\n\n# define BOOST_SP_INTERLOCKED_INCREMENT _InterlockedIncrement\n# define BOOST_SP_INTERLOCKED_DECREMENT _InterlockedDecrement\n# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE _InterlockedExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd\n\n#else\n\n// under Windows CE we still have old-style Interlocked* functions\n\nextern \"C\" long __cdecl InterlockedIncrement( long* );\nextern \"C\" long __cdecl InterlockedDecrement( long* );\nextern \"C\" long __cdecl InterlockedCompareExchange( long*, long, long );\nextern \"C\" long __cdecl InterlockedExchange( long*, long );\nextern \"C\" long __cdecl InterlockedExchangeAdd( long*, long );\n\n# define BOOST_SP_INTERLOCKED_INCREMENT InterlockedIncrement\n# define BOOST_SP_INTERLOCKED_DECREMENT InterlockedDecrement\n# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE InterlockedExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd\n\n#endif\n\n#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )\n\n#if defined( __CLRCALL_PURE_OR_CDECL )\n\nextern \"C\" long __CLRCALL_PURE_OR_CDECL _InterlockedIncrement( long volatile * );\nextern \"C\" long __CLRCALL_PURE_OR_CDECL _InterlockedDecrement( long volatile * );\nextern \"C\" long __CLRCALL_PURE_OR_CDECL _InterlockedCompareExchange( long volatile *, long, long );\nextern \"C\" long __CLRCALL_PURE_OR_CDECL _InterlockedExchange( long volatile *, long );\nextern \"C\" long __CLRCALL_PURE_OR_CDECL _InterlockedExchangeAdd( long volatile *, long );\n\n#else\n\nextern \"C\" long __cdecl _InterlockedIncrement( long volatile * );\nextern \"C\" long __cdecl _InterlockedDecrement( long volatile * );\nextern \"C\" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );\nextern \"C\" long __cdecl _InterlockedExchange( long volatile *, long );\nextern \"C\" long __cdecl _InterlockedExchangeAdd( long volatile *, long );\n\n# if defined( BOOST_MSVC ) && BOOST_MSVC == 1310\n//From MSDN, Visual Studio .NET 2003 spedific: To declare one of the interlocked functions\n//for use as an intrinsic, the function must be declared with the leading underscore and\n//the new function must appear in a #pragma intrinsic statement.\n#  pragma intrinsic( _InterlockedIncrement )\n#  pragma intrinsic( _InterlockedDecrement )\n#  pragma intrinsic( _InterlockedCompareExchange )\n#  pragma intrinsic( _InterlockedExchange )\n#  pragma intrinsic( _InterlockedExchangeAdd )\n# endif\n\n#endif\n\n# define BOOST_SP_INTERLOCKED_INCREMENT _InterlockedIncrement\n# define BOOST_SP_INTERLOCKED_DECREMENT _InterlockedDecrement\n# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE _InterlockedExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd\n\n#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nextern \"C\" __declspec(dllimport) long __stdcall InterlockedIncrement( long volatile * );\nextern \"C\" __declspec(dllimport) long __stdcall InterlockedDecrement( long volatile * );\nextern \"C\" __declspec(dllimport) long __stdcall InterlockedCompareExchange( long volatile *, long, long );\nextern \"C\" __declspec(dllimport) long __stdcall InterlockedExchange( long volatile *, long );\nextern \"C\" __declspec(dllimport) long __stdcall InterlockedExchangeAdd( long volatile *, long );\n\n} // namespace detail\n\n} // namespace boost\n\n# define BOOST_SP_INTERLOCKED_INCREMENT ::boost::detail::InterlockedIncrement\n# define BOOST_SP_INTERLOCKED_DECREMENT ::boost::detail::InterlockedDecrement\n# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE ::boost::detail::InterlockedCompareExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE ::boost::detail::InterlockedExchange\n# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD ::boost::detail::InterlockedExchangeAdd\n\n#else\n\n# error \"Interlocked intrinsics not available\"\n\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_INTERLOCKED_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/sp_nullptr_t.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_NULLPTR_T_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_NULLPTR_T_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_nullptr_t.hpp\n//\n//  Copyright 2013 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/config.hpp>\n#include <cstddef>\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )\n\n    typedef decltype(nullptr) sp_nullptr_t;\n\n#else\n\n    typedef std::nullptr_t sp_nullptr_t;\n\n#endif\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // !defined( BOOST_NO_CXX11_NULLPTR )\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_NULLPTR_T_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/spinlock.hpp\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  struct spinlock\n//  {\n//      void lock();\n//      bool try_lock();\n//      void unlock();\n//\n//      class scoped_lock;\n//  };\n//\n//  #define BOOST_DETAIL_SPINLOCK_INIT <unspecified>\n//\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/detail/sp_has_sync.hpp>\n\n#if defined( BOOST_SP_USE_STD_ATOMIC )\n# if !defined( __clang__ )\n#   include <boost/smart_ptr/detail/spinlock_std_atomic.hpp>\n# else\n//  Clang (at least up to 3.4) can't compile spinlock_pool when\n//  using std::atomic, so substitute the __sync implementation instead.\n#   include <boost/smart_ptr/detail/spinlock_sync.hpp>\n# endif\n\n#elif defined( BOOST_SP_USE_PTHREADS )\n#  include <boost/smart_ptr/detail/spinlock_pt.hpp>\n\n#elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ )\n#  include <boost/smart_ptr/detail/spinlock_gcc_arm.hpp>\n\n#elif defined( BOOST_SP_HAS_SYNC )\n#  include <boost/smart_ptr/detail/spinlock_sync.hpp>\n\n#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)\n#  include <boost/smart_ptr/detail/spinlock_w32.hpp>\n\n#elif defined(BOOST_HAS_PTHREADS)\n#  include <boost/smart_ptr/detail/spinlock_pt.hpp>\n\n#elif !defined(BOOST_HAS_THREADS)\n#  include <boost/smart_ptr/detail/spinlock_nt.hpp>\n\n#else\n#  error Unrecognized threading platform\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock_gcc_arm.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED\n\n//\n//  Copyright (c) 2008, 2011 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/smart_ptr/detail/yield_k.hpp>\n\n#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__)\n\n# define BOOST_SP_ARM_BARRIER \"dmb\"\n# define BOOST_SP_ARM_HAS_LDREX\n\n#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__)\n\n# define BOOST_SP_ARM_BARRIER \"mcr p15, 0, r0, c7, c10, 5\"\n# define BOOST_SP_ARM_HAS_LDREX\n\n#else\n\n# define BOOST_SP_ARM_BARRIER \"\"\n\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass spinlock\n{\npublic:\n\n    int v_;\n\npublic:\n\n    bool try_lock()\n    {\n        int r;\n\n#ifdef BOOST_SP_ARM_HAS_LDREX\n\n        __asm__ __volatile__(\n            \"ldrex %0, [%2]; \\n\"\n            \"cmp %0, %1; \\n\"\n            \"strexne %0, %1, [%2]; \\n\"\n            BOOST_SP_ARM_BARRIER :\n            \"=&r\"( r ): // outputs\n            \"r\"( 1 ), \"r\"( &v_ ): // inputs\n            \"memory\", \"cc\" );\n\n#else\n\n        __asm__ __volatile__(\n            \"swp %0, %1, [%2];\\n\"\n            BOOST_SP_ARM_BARRIER :\n            \"=&r\"( r ): // outputs\n            \"r\"( 1 ), \"r\"( &v_ ): // inputs\n            \"memory\", \"cc\" );\n\n#endif\n\n        return r == 0;\n    }\n\n    void lock()\n    {\n        for( unsigned k = 0; !try_lock(); ++k )\n        {\n            boost::detail::yield( k );\n        }\n    }\n\n    void unlock()\n    {\n        __asm__ __volatile__( BOOST_SP_ARM_BARRIER ::: \"memory\" );\n        *const_cast< int volatile* >( &v_ ) = 0;\n        __asm__ __volatile__( BOOST_SP_ARM_BARRIER ::: \"memory\" );\n    }\n\npublic:\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( spinlock & sp ): sp_( sp )\n        {\n            sp.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\n} // namespace detail\n} // namespace boost\n\n#define BOOST_DETAIL_SPINLOCK_INIT {0}\n\n#undef BOOST_SP_ARM_BARRIER\n#undef BOOST_SP_ARM_HAS_LDREX\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock_nt.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/assert.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass spinlock\n{\npublic:\n\n    bool locked_;\n\npublic:\n\n    inline bool try_lock()\n    {\n        if( locked_ )\n        {\n            return false;\n        }\n        else\n        {\n            locked_ = true;\n            return true;\n        }\n    }\n\n    inline void lock()\n    {\n        BOOST_ASSERT( !locked_ );\n        locked_ = true;\n    }\n\n    inline void unlock()\n    {\n        BOOST_ASSERT( locked_ );\n        locked_ = false;\n    }\n\npublic:\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( spinlock & sp ): sp_( sp )\n        {\n            sp.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\n} // namespace detail\n} // namespace boost\n\n#define BOOST_DETAIL_SPINLOCK_INIT { false }\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock_pool.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/spinlock_pool.hpp\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  spinlock_pool<0> is reserved for atomic<>, when/if it arrives\n//  spinlock_pool<1> is reserved for shared_ptr reference counts\n//  spinlock_pool<2> is reserved for shared_ptr atomic access\n//\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/detail/spinlock.hpp>\n#include <cstddef>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntemplate< int M > class spinlock_pool\n{\nprivate:\n\n    static spinlock pool_[ 41 ];\n\npublic:\n\n    static spinlock & spinlock_for( void const * pv )\n    {\n#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64  \n        std::size_t i = reinterpret_cast< unsigned long long >( pv ) % 41;\n#else  \n        std::size_t i = reinterpret_cast< std::size_t >( pv ) % 41;\n#endif  \n        return pool_[ i ];\n    }\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( void const * pv ): sp_( spinlock_for( pv ) )\n        {\n            sp_.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\ntemplate< int M > spinlock spinlock_pool< M >::pool_[ 41 ] =\n{\n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT\n};\n\n} // namespace detail\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock_pt.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <pthread.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass spinlock\n{\npublic:\n\n    pthread_mutex_t v_;\n\npublic:\n\n    bool try_lock()\n    {\n        return pthread_mutex_trylock( &v_ ) == 0;\n    }\n\n    void lock()\n    {\n        pthread_mutex_lock( &v_ );\n    }\n\n    void unlock()\n    {\n        pthread_mutex_unlock( &v_ );\n    }\n\npublic:\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( spinlock & sp ): sp_( sp )\n        {\n            sp.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\n} // namespace detail\n} // namespace boost\n\n#define BOOST_DETAIL_SPINLOCK_INIT { PTHREAD_MUTEX_INITIALIZER }\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock_std_atomic.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  Copyright (c) 2014 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/smart_ptr/detail/yield_k.hpp>\n#include <atomic>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass spinlock\n{\npublic:\n\n    std::atomic_flag v_;\n\npublic:\n\n    bool try_lock()\n    {\n        return !v_.test_and_set( std::memory_order_acquire );\n    }\n\n    void lock()\n    {\n        for( unsigned k = 0; !try_lock(); ++k )\n        {\n            boost::detail::yield( k );\n        }\n    }\n\n    void unlock()\n    {\n        v_ .clear( std::memory_order_release );\n    }\n\npublic:\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( spinlock & sp ): sp_( sp )\n        {\n            sp.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\n} // namespace detail\n} // namespace boost\n\n#define BOOST_DETAIL_SPINLOCK_INIT { ATOMIC_FLAG_INIT }\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock_sync.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/smart_ptr/detail/yield_k.hpp>\n\n#if defined( __ia64__ ) && defined( __INTEL_COMPILER )\n# include <ia64intrin.h>\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass spinlock\n{\npublic:\n\n    int v_;\n\npublic:\n\n    bool try_lock()\n    {\n        int r = __sync_lock_test_and_set( &v_, 1 );\n        return r == 0;\n    }\n\n    void lock()\n    {\n        for( unsigned k = 0; !try_lock(); ++k )\n        {\n            boost::detail::yield( k );\n        }\n    }\n\n    void unlock()\n    {\n        __sync_lock_release( &v_ );\n    }\n\npublic:\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( spinlock & sp ): sp_( sp )\n        {\n            sp.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\n} // namespace detail\n} // namespace boost\n\n#define BOOST_DETAIL_SPINLOCK_INIT {0}\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock_w32.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/smart_ptr/detail/sp_interlocked.hpp>\n#include <boost/smart_ptr/detail/yield_k.hpp>\n\n// BOOST_COMPILER_FENCE\n\n#if defined(__INTEL_COMPILER)\n\n#define BOOST_COMPILER_FENCE __memory_barrier();\n\n#elif defined( _MSC_VER ) && _MSC_VER >= 1310\n\nextern \"C\" void _ReadWriteBarrier();\n#pragma intrinsic( _ReadWriteBarrier )\n\n#define BOOST_COMPILER_FENCE _ReadWriteBarrier();\n\n#elif defined(__GNUC__)\n\n#define BOOST_COMPILER_FENCE __asm__ __volatile__( \"\" : : : \"memory\" );\n\n#else\n\n#define BOOST_COMPILER_FENCE\n\n#endif\n\n//\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass spinlock\n{\npublic:\n\n    long v_;\n\npublic:\n\n    bool try_lock()\n    {\n        long r = BOOST_SP_INTERLOCKED_EXCHANGE( &v_, 1 );\n\n        BOOST_COMPILER_FENCE\n\n        return r == 0;\n    }\n\n    void lock()\n    {\n        for( unsigned k = 0; !try_lock(); ++k )\n        {\n            boost::detail::yield( k );\n        }\n    }\n\n    void unlock()\n    {\n        BOOST_COMPILER_FENCE\n        *const_cast< long volatile* >( &v_ ) = 0;\n    }\n\npublic:\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( spinlock & sp ): sp_( sp )\n        {\n            sp.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\n} // namespace detail\n} // namespace boost\n\n#define BOOST_DETAIL_SPINLOCK_INIT {0}\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/up_if_array.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Joseph Fernandes \n * glenfe at live dot com\n *\n * Distributed under the Boost Software License, \n * Version 1.0. (See accompanying file LICENSE_1_0.txt \n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_DETAIL_UP_IF_ARRAY_HPP\n#define BOOST_SMART_PTR_DETAIL_UP_IF_ARRAY_HPP\n\n#include <memory>\n\nnamespace boost {\n    namespace detail {\n        template<class T>\n        struct up_if_array;\n\n        template<class T>\n        struct up_if_array<T[]> {\n            typedef std::unique_ptr<T[]> type;\n        };\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/up_if_not_array.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Joseph Fernandes \n * glenfe at live dot com\n *\n * Distributed under the Boost Software License, \n * Version 1.0. (See accompanying file LICENSE_1_0.txt \n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_DETAIL_UP_IF_NOT_ARRAY_HPP\n#define BOOST_SMART_PTR_DETAIL_UP_IF_NOT_ARRAY_HPP\n\n#include <memory>\n\nnamespace boost {\n    namespace detail {\n        template<class T> \n        struct up_if_not_array {\n            typedef std::unique_ptr<T> type;\n        };\n\n        template<class T>\n        struct up_if_not_array<T[]> {\n        };\n\n        template<class T, std::size_t N>\n        struct up_if_not_array<T[N]> {\n        };\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/detail/yield_k.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  yield_k.hpp\n//\n//  Copyright (c) 2008 Peter Dimov\n//  Copyright (c) Microsoft Corporation 2014\n//\n//  void yield( unsigned k );\n//\n//  Typical use:\n//\n//  for( unsigned k = 0; !try_lock(); ++k ) yield( k );\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/config.hpp>\n#include <boost/predef.h>\n\n#if BOOST_PLAT_WINDOWS_RUNTIME\n#include <thread>\n#endif\n\n// BOOST_SMT_PAUSE\n\n#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) )\n\nextern \"C\" void _mm_pause();\n\n#define BOOST_SMT_PAUSE _mm_pause();\n\n#elif defined(__GNUC__) && ( defined(__i386__) || defined(__x86_64__) )\n\n#define BOOST_SMT_PAUSE __asm__ __volatile__( \"rep; nop\" : : : \"memory\" );\n\n#endif\n\n//\n\n#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )\n\n#if defined( BOOST_USE_WINDOWS_H )\n# include <windows.h>\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n#if !defined( BOOST_USE_WINDOWS_H ) && !BOOST_PLAT_WINDOWS_RUNTIME\n#if !BOOST_COMP_CLANG || !defined __MINGW32__\n  extern \"C\" void __stdcall Sleep( unsigned long ms );\n#else\n#include <_mingw.h>\n#if !defined __MINGW64_VERSION_MAJOR\n  extern \"C\" void __stdcall Sleep( unsigned long ms );\n#else\n  extern \"C\" __declspec(dllimport) void __stdcall Sleep( unsigned long ms );\n#endif\n#endif\n#endif\n\ninline void yield( unsigned k )\n{\n    if( k < 4 )\n    {\n    }\n#if defined( BOOST_SMT_PAUSE )\n    else if( k < 16 )\n    {\n        BOOST_SMT_PAUSE\n    }\n#endif\n#if !BOOST_PLAT_WINDOWS_RUNTIME\n    else if( k < 32 )\n    {\n        Sleep( 0 );\n    }\n    else\n    {\n        Sleep( 1 );\n    }\n#else\n    else\n    {\n        // Sleep isn't supported on the Windows Runtime.\n        std::this_thread::yield();\n    }\n#endif\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#elif defined( BOOST_HAS_PTHREADS )\n\n#ifndef _AIX\n#include <sched.h>\n#else\n   // AIX's sched.h defines ::var which sometimes conflicts with Lambda's var\n       extern \"C\" int sched_yield(void);\n#endif\n\n#include <time.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void yield( unsigned k )\n{\n    if( k < 4 )\n    {\n    }\n#if defined( BOOST_SMT_PAUSE )\n    else if( k < 16 )\n    {\n        BOOST_SMT_PAUSE\n    }\n#endif\n    else if( k < 32 || k & 1 )\n    {\n        sched_yield();\n    }\n    else\n    {\n        // g++ -Wextra warns on {} or {0}\n        struct timespec rqtp = { 0, 0 };\n\n        // POSIX says that timespec has tv_sec and tv_nsec\n        // But it doesn't guarantee order or placement\n\n        rqtp.tv_sec = 0;\n        rqtp.tv_nsec = 1000;\n\n        nanosleep( &rqtp, 0 );\n    }\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#else\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void yield( unsigned )\n{\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/enable_shared_from_raw.hpp",
    "content": "#ifndef BOOST_ENABLE_SHARED_FROM_RAW_HPP_INCLUDED\n#define BOOST_ENABLE_SHARED_FROM_RAW_HPP_INCLUDED\n\n//\n//  enable_shared_from_raw.hpp\n//\n//  Copyright 2002, 2009, 2014 Peter Dimov\n//  Copyright 2008-2009 Frank Mori Hess\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/config.hpp>\n#include <boost/shared_ptr.hpp>\n#include <boost/weak_ptr.hpp>\n#include <boost/assert.hpp>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost\n{\ntemplate<typename T> boost::shared_ptr<T> shared_from_raw(T *);\ntemplate<typename T> boost::weak_ptr<T> weak_from_raw(T *);\n\nnamespace detail\n{\ntemplate< class X, class Y > inline void sp_enable_shared_from_this( boost::shared_ptr<X> * ppx, Y const * py, boost::enable_shared_from_raw const * pe );\n\n} // namespace detail\n\nclass enable_shared_from_raw\n{\nprotected:\n\n    enable_shared_from_raw()\n    {\n    }\n\n    enable_shared_from_raw( enable_shared_from_raw const & )\n    {\n    }\n\n    enable_shared_from_raw & operator=( enable_shared_from_raw const & )\n    {\n        return *this;\n    }\n\n    ~enable_shared_from_raw()\n    {\n        BOOST_ASSERT( shared_this_.use_count() <= 1 ); // make sure no dangling shared_ptr objects exist\n    }\n\nprivate:\n\n    void init_if_expired() const\n    {\n        if( weak_this_.expired() )\n        {\n            shared_this_.reset( static_cast<void*>(0), detail::esft2_deleter_wrapper() );\n            weak_this_ = shared_this_;\n        }\n    }\n\n    void init_if_empty() const\n    {\n        if( weak_this_._empty() )\n        {\n            shared_this_.reset( static_cast<void*>(0), detail::esft2_deleter_wrapper() );\n            weak_this_ = shared_this_;\n        }\n    }\n\n#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS\npublic:\n#else\nprivate:\n    template<class Y> friend class shared_ptr;\n    template<typename T> friend boost::shared_ptr<T> shared_from_raw(T *);\n    template<typename T> friend boost::weak_ptr<T> weak_from_raw(T *);\n    template< class X, class Y > friend inline void detail::sp_enable_shared_from_this( boost::shared_ptr<X> * ppx, Y const * py, boost::enable_shared_from_raw const * pe );\n#endif\n\n    shared_ptr<void const volatile> shared_from_this() const\n    {\n        init_if_expired();\n        return shared_ptr<void const volatile>( weak_this_ );\n    }\n\n    shared_ptr<void const volatile> shared_from_this() const volatile\n    {\n        return const_cast< enable_shared_from_raw const * >( this )->shared_from_this();\n    }\n\n    weak_ptr<void const volatile> weak_from_this() const\n    {\n        init_if_empty();\n        return weak_this_;\n    }\n\n    weak_ptr<void const volatile> weak_from_this() const volatile\n    {\n        return const_cast< enable_shared_from_raw const * >( this )->weak_from_this();\n    }\n\n    // Note: invoked automatically by shared_ptr; do not call\n    template<class X, class Y> void _internal_accept_owner( shared_ptr<X> * ppx, Y * py ) const\n    {\n        BOOST_ASSERT( ppx != 0 );\n\n        if( weak_this_.expired() )\n        {\n            weak_this_ = *ppx;\n        }\n        else if( shared_this_.use_count() != 0 )\n        {\n            BOOST_ASSERT( ppx->unique() ); // no weak_ptrs should exist either, but there's no way to check that\n\n            detail::esft2_deleter_wrapper * pd = boost::get_deleter<detail::esft2_deleter_wrapper>( shared_this_ );\n            BOOST_ASSERT( pd != 0 );\n\n            pd->set_deleter( *ppx );\n\n            ppx->reset( shared_this_, ppx->get() );\n            shared_this_.reset();\n        }\n    }\n\n    mutable weak_ptr<void const volatile> weak_this_;\n\nprivate:\n\n    mutable shared_ptr<void const volatile> shared_this_;\n};\n\ntemplate<typename T>\nboost::shared_ptr<T> shared_from_raw(T *p)\n{\n    BOOST_ASSERT(p != 0);\n    return boost::shared_ptr<T>(p->enable_shared_from_raw::shared_from_this(), p);\n}\n\ntemplate<typename T>\nboost::weak_ptr<T> weak_from_raw(T *p)\n{\n    BOOST_ASSERT(p != 0);\n    boost::weak_ptr<T> result;\n    result._internal_aliasing_assign(p->enable_shared_from_raw::weak_from_this(), p);\n    return result;\n}\n\nnamespace detail\n{\n    template< class X, class Y > inline void sp_enable_shared_from_this( boost::shared_ptr<X> * ppx, Y const * py, boost::enable_shared_from_raw const * pe )\n    {\n        if( pe != 0 )\n        {\n            pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) );\n        }\n    }\n} // namepsace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_ENABLE_SHARED_FROM_RAW_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/enable_shared_from_this.hpp",
    "content": "#ifndef BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED\n#define BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED\n\n//\n//  enable_shared_from_this.hpp\n//\n//  Copyright 2002, 2009 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  http://www.boost.org/libs/smart_ptr/enable_shared_from_this.html\n//\n\n#include <boost/smart_ptr/weak_ptr.hpp>\n#include <boost/smart_ptr/shared_ptr.hpp>\n#include <boost/assert.hpp>\n#include <boost/config.hpp>\n\nnamespace boost\n{\n\ntemplate<class T> class enable_shared_from_this\n{\nprotected:\n\n    enable_shared_from_this() BOOST_NOEXCEPT\n    {\n    }\n\n    enable_shared_from_this(enable_shared_from_this const &) BOOST_NOEXCEPT\n    {\n    }\n\n    enable_shared_from_this & operator=(enable_shared_from_this const &) BOOST_NOEXCEPT\n    {\n        return *this;\n    }\n\n    ~enable_shared_from_this() BOOST_NOEXCEPT // ~weak_ptr<T> newer throws, so this call also must not throw\n    {\n    }\n\npublic:\n\n    shared_ptr<T> shared_from_this()\n    {\n        shared_ptr<T> p( weak_this_ );\n        BOOST_ASSERT( p.get() == this );\n        return p;\n    }\n\n    shared_ptr<T const> shared_from_this() const\n    {\n        shared_ptr<T const> p( weak_this_ );\n        BOOST_ASSERT( p.get() == this );\n        return p;\n    }\n\n    weak_ptr<T> weak_from_this() BOOST_NOEXCEPT\n    {\n        return weak_this_;\n    }\n\n    weak_ptr<T const> weak_from_this() const BOOST_NOEXCEPT\n    {\n        return weak_this_;\n    }\n\npublic: // actually private, but avoids compiler template friendship issues\n\n    // Note: invoked automatically by shared_ptr; do not call\n    template<class X, class Y> void _internal_accept_owner( shared_ptr<X> const * ppx, Y * py ) const\n    {\n        if( weak_this_.expired() )\n        {\n            weak_this_ = shared_ptr<T>( *ppx, py );\n        }\n    }\n\nprivate:\n\n    mutable weak_ptr<T> weak_this_;\n};\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/intrusive_ptr.hpp",
    "content": "#ifndef BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED\n#define BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED\n\n//\n//  intrusive_ptr.hpp\n//\n//  Copyright (c) 2001, 2002 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/intrusive_ptr.html for documentation.\n//\n\n#include <boost/config.hpp>\n\n#include <boost/assert.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/smart_ptr/detail/sp_convertible.hpp>\n#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>\n\n#include <boost/config/no_tr1/functional.hpp>           // for std::less\n\n#if !defined(BOOST_NO_IOSTREAM)\n#if !defined(BOOST_NO_IOSFWD)\n#include <iosfwd>               // for std::basic_ostream\n#else\n#include <ostream>\n#endif\n#endif\n\n\nnamespace boost\n{\n\n//\n//  intrusive_ptr\n//\n//  A smart pointer that uses intrusive reference counting.\n//\n//  Relies on unqualified calls to\n//  \n//      void intrusive_ptr_add_ref(T * p);\n//      void intrusive_ptr_release(T * p);\n//\n//          (p != 0)\n//\n//  The object is responsible for destroying itself.\n//\n\ntemplate<class T> class intrusive_ptr\n{\nprivate:\n\n    typedef intrusive_ptr this_type;\n\npublic:\n\n    typedef T element_type;\n\n    intrusive_ptr() BOOST_NOEXCEPT : px( 0 )\n    {\n    }\n\n    intrusive_ptr( T * p, bool add_ref = true ): px( p )\n    {\n        if( px != 0 && add_ref ) intrusive_ptr_add_ref( px );\n    }\n\n#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES)\n\n    template<class U>\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    intrusive_ptr( intrusive_ptr<U> const & rhs, typename boost::detail::sp_enable_if_convertible<U,T>::type = boost::detail::sp_empty() )\n\n#else\n\n    intrusive_ptr( intrusive_ptr<U> const & rhs )\n\n#endif\n    : px( rhs.get() )\n    {\n        if( px != 0 ) intrusive_ptr_add_ref( px );\n    }\n\n#endif\n\n    intrusive_ptr(intrusive_ptr const & rhs): px( rhs.px )\n    {\n        if( px != 0 ) intrusive_ptr_add_ref( px );\n    }\n\n    ~intrusive_ptr()\n    {\n        if( px != 0 ) intrusive_ptr_release( px );\n    }\n\n#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES)\n\n    template<class U> intrusive_ptr & operator=(intrusive_ptr<U> const & rhs)\n    {\n        this_type(rhs).swap(*this);\n        return *this;\n    }\n\n#endif\n\n// Move support\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    intrusive_ptr(intrusive_ptr && rhs) BOOST_NOEXCEPT : px( rhs.px )\n    {\n        rhs.px = 0;\n    }\n\n    intrusive_ptr & operator=(intrusive_ptr && rhs) BOOST_NOEXCEPT\n    {\n        this_type( static_cast< intrusive_ptr && >( rhs ) ).swap(*this);\n        return *this;\n    }\n\n#endif\n\n    intrusive_ptr & operator=(intrusive_ptr const & rhs)\n    {\n        this_type(rhs).swap(*this);\n        return *this;\n    }\n\n    intrusive_ptr & operator=(T * rhs)\n    {\n        this_type(rhs).swap(*this);\n        return *this;\n    }\n\n    void reset() BOOST_NOEXCEPT\n    {\n        this_type().swap( *this );\n    }\n\n    void reset( T * rhs )\n    {\n        this_type( rhs ).swap( *this );\n    }\n\n    void reset( T * rhs, bool add_ref )\n    {\n        this_type( rhs, add_ref ).swap( *this );\n    }\n\n    T * get() const BOOST_NOEXCEPT\n    {\n        return px;\n    }\n\n    T * detach() BOOST_NOEXCEPT\n    {\n        T * ret = px;\n        px = 0;\n        return ret;\n    }\n\n    T & operator*() const\n    {\n        BOOST_ASSERT( px != 0 );\n        return *px;\n    }\n\n    T * operator->() const\n    {\n        BOOST_ASSERT( px != 0 );\n        return px;\n    }\n\n// implicit conversion to \"bool\"\n#include <boost/smart_ptr/detail/operator_bool.hpp>\n\n    void swap(intrusive_ptr & rhs) BOOST_NOEXCEPT\n    {\n        T * tmp = px;\n        px = rhs.px;\n        rhs.px = tmp;\n    }\n\nprivate:\n\n    T * px;\n};\n\ntemplate<class T, class U> inline bool operator==(intrusive_ptr<T> const & a, intrusive_ptr<U> const & b)\n{\n    return a.get() == b.get();\n}\n\ntemplate<class T, class U> inline bool operator!=(intrusive_ptr<T> const & a, intrusive_ptr<U> const & b)\n{\n    return a.get() != b.get();\n}\n\ntemplate<class T, class U> inline bool operator==(intrusive_ptr<T> const & a, U * b)\n{\n    return a.get() == b;\n}\n\ntemplate<class T, class U> inline bool operator!=(intrusive_ptr<T> const & a, U * b)\n{\n    return a.get() != b;\n}\n\ntemplate<class T, class U> inline bool operator==(T * a, intrusive_ptr<U> const & b)\n{\n    return a == b.get();\n}\n\ntemplate<class T, class U> inline bool operator!=(T * a, intrusive_ptr<U> const & b)\n{\n    return a != b.get();\n}\n\n#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96\n\n// Resolve the ambiguity between our op!= and the one in rel_ops\n\ntemplate<class T> inline bool operator!=(intrusive_ptr<T> const & a, intrusive_ptr<T> const & b)\n{\n    return a.get() != b.get();\n}\n\n#endif\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\ntemplate<class T> inline bool operator==( intrusive_ptr<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator==( boost::detail::sp_nullptr_t, intrusive_ptr<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator!=( intrusive_ptr<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\ntemplate<class T> inline bool operator!=( boost::detail::sp_nullptr_t, intrusive_ptr<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\n#endif\n\ntemplate<class T> inline bool operator<(intrusive_ptr<T> const & a, intrusive_ptr<T> const & b)\n{\n    return std::less<T *>()(a.get(), b.get());\n}\n\ntemplate<class T> void swap(intrusive_ptr<T> & lhs, intrusive_ptr<T> & rhs)\n{\n    lhs.swap(rhs);\n}\n\n// mem_fn support\n\ntemplate<class T> T * get_pointer(intrusive_ptr<T> const & p)\n{\n    return p.get();\n}\n\ntemplate<class T, class U> intrusive_ptr<T> static_pointer_cast(intrusive_ptr<U> const & p)\n{\n    return static_cast<T *>(p.get());\n}\n\ntemplate<class T, class U> intrusive_ptr<T> const_pointer_cast(intrusive_ptr<U> const & p)\n{\n    return const_cast<T *>(p.get());\n}\n\ntemplate<class T, class U> intrusive_ptr<T> dynamic_pointer_cast(intrusive_ptr<U> const & p)\n{\n    return dynamic_cast<T *>(p.get());\n}\n\n// operator<<\n\n#if !defined(BOOST_NO_IOSTREAM)\n\n#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) &&  (__GNUC__ < 3) )\n\ntemplate<class Y> std::ostream & operator<< (std::ostream & os, intrusive_ptr<Y> const & p)\n{\n    os << p.get();\n    return os;\n}\n\n#else\n\n// in STLport's no-iostreams mode no iostream symbols can be used\n#ifndef _STLP_NO_IOSTREAMS\n\n# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300 && __SGI_STL_PORT)\n// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL\nusing std::basic_ostream;\ntemplate<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, intrusive_ptr<Y> const & p)\n# else\ntemplate<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, intrusive_ptr<Y> const & p)\n# endif \n{\n    os << p.get();\n    return os;\n}\n\n#endif // _STLP_NO_IOSTREAMS\n\n#endif // __GNUC__ < 3\n\n#endif // !defined(BOOST_NO_IOSTREAM)\n\n// hash_value\n\ntemplate< class T > struct hash;\n\ntemplate< class T > std::size_t hash_value( boost::intrusive_ptr<T> const & p )\n{\n    return boost::hash< T* >()( p.get() );\n}\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/intrusive_ref_counter.hpp",
    "content": "/*\n *          Copyright Andrey Semashev 2007 - 2013.\n * Distributed under the Boost Software License, Version 1.0.\n *    (See accompanying file LICENSE_1_0.txt or copy at\n *          http://www.boost.org/LICENSE_1_0.txt)\n */\n/*!\n * \\file   intrusive_ref_counter.hpp\n * \\author Andrey Semashev\n * \\date   12.03.2009\n *\n * This header contains a reference counter class for \\c intrusive_ptr.\n */\n\n#ifndef BOOST_SMART_PTR_INTRUSIVE_REF_COUNTER_HPP_INCLUDED_\n#define BOOST_SMART_PTR_INTRUSIVE_REF_COUNTER_HPP_INCLUDED_\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/detail/atomic_count.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if defined(_MSC_VER)\n#pragma warning(push)\n// This is a bogus MSVC warning, which is flagged by friend declarations of intrusive_ptr_add_ref and intrusive_ptr_release in intrusive_ref_counter:\n// 'name' : the inline specifier cannot be used when a friend declaration refers to a specialization of a function template\n// Note that there is no inline specifier in the declarations.\n#pragma warning(disable: 4396)\n#endif\n\nnamespace boost {\n\nnamespace sp_adl_block {\n\n/*!\n * \\brief Thread unsafe reference counter policy for \\c intrusive_ref_counter\n *\n * The policy instructs the \\c intrusive_ref_counter base class to implement\n * a reference counter suitable for single threaded use only. Pointers to the same\n * object with this kind of reference counter must not be used by different threads.\n */\nstruct thread_unsafe_counter\n{\n    typedef unsigned int type;\n\n    static unsigned int load(unsigned int const& counter) BOOST_NOEXCEPT\n    {\n        return counter;\n    }\n\n    static void increment(unsigned int& counter) BOOST_NOEXCEPT\n    {\n        ++counter;\n    }\n\n    static unsigned int decrement(unsigned int& counter) BOOST_NOEXCEPT\n    {\n        return --counter;\n    }\n};\n\n/*!\n * \\brief Thread safe reference counter policy for \\c intrusive_ref_counter\n *\n * The policy instructs the \\c intrusive_ref_counter base class to implement\n * a thread-safe reference counter, if the target platform supports multithreading.\n */\nstruct thread_safe_counter\n{\n    typedef boost::detail::atomic_count type;\n\n    static unsigned int load(boost::detail::atomic_count const& counter) BOOST_NOEXCEPT\n    {\n        return static_cast< unsigned int >(static_cast< long >(counter));\n    }\n\n    static void increment(boost::detail::atomic_count& counter) BOOST_NOEXCEPT\n    {\n        ++counter;\n    }\n\n    static unsigned int decrement(boost::detail::atomic_count& counter) BOOST_NOEXCEPT\n    {\n        return --counter;\n    }\n};\n\ntemplate< typename DerivedT, typename CounterPolicyT = thread_safe_counter >\nclass intrusive_ref_counter;\n\ntemplate< typename DerivedT, typename CounterPolicyT >\nvoid intrusive_ptr_add_ref(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT;\ntemplate< typename DerivedT, typename CounterPolicyT >\nvoid intrusive_ptr_release(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT;\n\n/*!\n * \\brief A reference counter base class\n *\n * This base class can be used with user-defined classes to add support\n * for \\c intrusive_ptr. The class contains a reference counter defined by the \\c CounterPolicyT.\n * Upon releasing the last \\c intrusive_ptr referencing the object\n * derived from the \\c intrusive_ref_counter class, operator \\c delete\n * is automatically called on the pointer to the object.\n *\n * The other template parameter, \\c DerivedT, is the user's class that derives from \\c intrusive_ref_counter.\n */\ntemplate< typename DerivedT, typename CounterPolicyT >\nclass intrusive_ref_counter\n{\nprivate:\n    //! Reference counter type\n    typedef typename CounterPolicyT::type counter_type;\n    //! Reference counter\n    mutable counter_type m_ref_counter;\n\npublic:\n    /*!\n     * Default constructor\n     *\n     * \\post <tt>use_count() == 0</tt>\n     */\n    intrusive_ref_counter() BOOST_NOEXCEPT : m_ref_counter(0)\n    {\n    }\n\n    /*!\n     * Copy constructor\n     *\n     * \\post <tt>use_count() == 0</tt>\n     */\n    intrusive_ref_counter(intrusive_ref_counter const&) BOOST_NOEXCEPT : m_ref_counter(0)\n    {\n    }\n\n    /*!\n     * Assignment\n     *\n     * \\post The reference counter is not modified after assignment\n     */\n    intrusive_ref_counter& operator= (intrusive_ref_counter const&) BOOST_NOEXCEPT { return *this; }\n\n    /*!\n     * \\return The reference counter\n     */\n    unsigned int use_count() const BOOST_NOEXCEPT\n    {\n        return CounterPolicyT::load(m_ref_counter);\n    }\n\nprotected:\n    /*!\n     * Destructor\n     */\n    BOOST_DEFAULTED_FUNCTION(~intrusive_ref_counter(), {})\n\n    friend void intrusive_ptr_add_ref< DerivedT, CounterPolicyT >(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT;\n    friend void intrusive_ptr_release< DerivedT, CounterPolicyT >(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT;\n};\n\ntemplate< typename DerivedT, typename CounterPolicyT >\ninline void intrusive_ptr_add_ref(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT\n{\n    CounterPolicyT::increment(p->m_ref_counter);\n}\n\ntemplate< typename DerivedT, typename CounterPolicyT >\ninline void intrusive_ptr_release(const intrusive_ref_counter< DerivedT, CounterPolicyT >* p) BOOST_NOEXCEPT\n{\n    if (CounterPolicyT::decrement(p->m_ref_counter) == 0)\n        delete static_cast< const DerivedT* >(p);\n}\n\n} // namespace sp_adl_block\n\nusing sp_adl_block::intrusive_ref_counter;\nusing sp_adl_block::thread_unsafe_counter;\nusing sp_adl_block::thread_safe_counter;\n\n} // namespace boost\n\n#if defined(_MSC_VER)\n#pragma warning(pop)\n#endif\n\n#endif // BOOST_SMART_PTR_INTRUSIVE_REF_COUNTER_HPP_INCLUDED_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/make_shared.hpp",
    "content": "#ifndef BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED\n#define BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED\n\n//  make_shared.hpp\n//\n//  Copyright (c) 2007, 2008, 2012 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/smart_ptr/make_shared.html\n//  for documentation.\n\n#include <boost/smart_ptr/make_shared_object.hpp>\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_NO_SFINAE )\n# include <boost/smart_ptr/make_shared_array.hpp>\n# include <boost/smart_ptr/allocate_shared_array.hpp>\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/make_shared_array.hpp",
    "content": "/*\n * Copyright (c) 2012-2014 Glen Joseph Fernandes\n * glenfe at live dot com\n *\n * Distributed under the Boost Software License,\n * Version 1.0. (See accompanying file LICENSE_1_0.txt\n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_MAKE_SHARED_ARRAY_HPP\n#define BOOST_SMART_PTR_MAKE_SHARED_ARRAY_HPP\n\n#include <boost/smart_ptr/detail/array_count_impl.hpp>\n#include <boost/smart_ptr/detail/sp_if_array.hpp>\n\nnamespace boost {\n    template<class T>\n    inline typename boost::detail::sp_if_array<T>::type\n    make_shared(std::size_t size) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef boost::detail::ms_allocator<T> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        std::size_t n1 = size * boost::detail::array_total<T1>::size;\n        T1* p1 = 0;\n        T2* p2 = 0;\n        D1 d1;\n        A1 a1(size, &p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n        boost::detail::ms_init(p2, n1);\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T>\n    inline typename boost::detail::sp_if_size_array<T>::type\n    make_shared() {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef boost::detail::ms_allocator<T> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        enum {\n            N = boost::detail::array_total<T>::size\n        };\n        T1* p1 = 0;\n        T2* p2 = 0;\n        D1 d1;\n        A1 a1(&p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n        boost::detail::ms_init(p2, N);\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T>\n    inline typename boost::detail::sp_if_array<T>::type\n    make_shared(std::size_t size,\n        const typename boost::detail::array_inner<T>::type& value) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef const T2 T3;\n        typedef boost::detail::ms_allocator<T> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        enum {\n            M = boost::detail::array_total<T1>::size\n        };\n        std::size_t n1 = M * size;\n        T1* p1 = 0;\n        T2* p2 = 0;\n        T3* p3 = reinterpret_cast<T3*>(&value);\n        D1 d1;\n        A1 a1(size, &p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n        boost::detail::ms_init<T2, M>(p2, n1, p3);\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T>\n    inline typename boost::detail::sp_if_size_array<T>::type\n    make_shared(const typename boost::detail::array_inner<T>::type& value) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef const T2 T3;\n        typedef boost::detail::ms_allocator<T> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        enum {\n            M = boost::detail::array_total<T1>::size,\n            N = boost::detail::array_total<T>::size\n        };\n        T1* p1 = 0;\n        T2* p2 = 0;\n        T3* p3 = reinterpret_cast<T3*>(&value);\n        D1 d1;\n        A1 a1(&p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n        boost::detail::ms_init<T2, M>(p2, N, p3);\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T>\n    inline typename boost::detail::sp_if_array<T>::type\n    make_shared_noinit(std::size_t size) {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef boost::detail::ms_allocator<T> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        std::size_t n1 = size * boost::detail::array_total<T1>::size;\n        T1* p1 = 0;\n        T2* p2 = 0;\n        D1 d1;\n        A1 a1(size, &p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n        boost::detail::ms_noinit(p2, n1);\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n\n    template<class T>\n    inline typename boost::detail::sp_if_size_array<T>::type\n    make_shared_noinit() {\n        typedef typename boost::detail::array_inner<T>::type T1;\n        typedef typename boost::detail::array_base<T1>::type T2;\n        typedef boost::detail::ms_allocator<T> A1;\n        typedef boost::detail::ms_in_allocator_tag D1;\n        enum {\n            N = boost::detail::array_total<T>::size\n        };\n        T1* p1 = 0;\n        T2* p2 = 0;\n        D1 d1;\n        A1 a1(&p2);\n        shared_ptr<T> s1(p1, d1, a1);\n        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());\n        a2->set(0);\n        boost::detail::ms_noinit(p2, N);\n        a2->set(p2);\n        p1 = reinterpret_cast<T1*>(p2);\n        return shared_ptr<T>(s1, p1);\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/make_shared_object.hpp",
    "content": "#ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED\n#define BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED\n\n//  make_shared_object.hpp\n//\n//  Copyright (c) 2007, 2008, 2012 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/smart_ptr/make_shared.html\n//  for documentation.\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/shared_ptr.hpp>\n#include <boost/smart_ptr/detail/sp_forward.hpp>\n#include <boost/type_traits/type_with_alignment.hpp>\n#include <boost/type_traits/alignment_of.hpp>\n#include <cstddef>\n#include <new>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntemplate< std::size_t N, std::size_t A > struct sp_aligned_storage\n{\n    union type\n    {\n        char data_[ N ];\n        typename boost::type_with_alignment< A >::type align_;\n    };\n};\n\ntemplate< class T > class sp_ms_deleter\n{\nprivate:\n\n    typedef typename sp_aligned_storage< sizeof( T ), ::boost::alignment_of< T >::value >::type storage_type;\n\n    bool initialized_;\n    storage_type storage_;\n\nprivate:\n\n    void destroy()\n    {\n        if( initialized_ )\n        {\n#if defined( __GNUC__ )\n\n            // fixes incorrect aliasing warning\n            T * p = reinterpret_cast< T* >( storage_.data_ );\n            p->~T();\n\n#else\n\n            reinterpret_cast< T* >( storage_.data_ )->~T();\n\n#endif\n\n            initialized_ = false;\n        }\n    }\n\npublic:\n\n    sp_ms_deleter() BOOST_NOEXCEPT : initialized_( false )\n    {\n    }\n\n    template<class A> explicit sp_ms_deleter( A const & ) BOOST_NOEXCEPT : initialized_( false )\n    {\n    }\n\n    // optimization: do not copy storage_\n    sp_ms_deleter( sp_ms_deleter const & ) BOOST_NOEXCEPT : initialized_( false )\n    {\n    }\n\n    ~sp_ms_deleter()\n    {\n        destroy();\n    }\n\n    void operator()( T * )\n    {\n        destroy();\n    }\n\n    static void operator_fn( T* ) // operator() can't be static\n    {\n    }\n\n    void * address() BOOST_NOEXCEPT\n    {\n        return storage_.data_;\n    }\n\n    void set_initialized() BOOST_NOEXCEPT\n    {\n        initialized_ = true;\n    }\n};\n\ntemplate< class T, class A > class sp_as_deleter\n{\nprivate:\n\n    typedef typename sp_aligned_storage< sizeof( T ), ::boost::alignment_of< T >::value >::type storage_type;\n\n    storage_type storage_;\n    A a_;\n    bool initialized_;\n\nprivate:\n\n    void destroy()\n    {\n        if( initialized_ )\n        {\n            T * p = reinterpret_cast< T* >( storage_.data_ );\n\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n            std::allocator_traits<A>::destroy( a_, p );\n\n#else\n\n            p->~T();\n\n#endif\n\n            initialized_ = false;\n        }\n    }\n\npublic:\n\n    sp_as_deleter( A const & a ) BOOST_NOEXCEPT : a_( a ), initialized_( false )\n    {\n    }\n\n    // optimization: do not copy storage_\n    sp_as_deleter( sp_as_deleter const & r ) BOOST_NOEXCEPT : a_( r.a_), initialized_( false )\n    {\n    }\n\n    ~sp_as_deleter()\n    {\n        destroy();\n    }\n\n    void operator()( T * )\n    {\n        destroy();\n    }\n\n    static void operator_fn( T* ) // operator() can't be static\n    {\n    }\n\n    void * address() BOOST_NOEXCEPT\n    {\n        return storage_.data_;\n    }\n\n    void set_initialized() BOOST_NOEXCEPT\n    {\n        initialized_ = true;\n    }\n};\n\ntemplate< class T > struct sp_if_not_array\n{\n    typedef boost::shared_ptr< T > type;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class T > struct sp_if_not_array< T[] >\n{\n};\n\n#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )\n\ntemplate< class T, std::size_t N > struct sp_if_not_array< T[N] >\n{\n};\n\n#endif\n\n#endif\n\n} // namespace detail\n\n#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )\n# define BOOST_SP_MSD( T ) boost::detail::sp_inplace_tag< boost::detail::sp_ms_deleter< T > >()\n#else\n# define BOOST_SP_MSD( T ) boost::detail::sp_ms_deleter< T >()\n#endif\n\n// _noinit versions\n\ntemplate< class T > typename boost::detail::sp_if_not_array< T >::type make_shared_noinit()\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T;\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared_noinit( A const & a )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T;\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\n#if !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n// Variadic templates, rvalue reference\n\ntemplate< class T, class... Args > typename boost::detail::sp_if_not_array< T >::type make_shared( Args && ... args )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( boost::detail::sp_forward<Args>( args )... );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class... Args > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, Args && ... args )\n{\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n    typedef typename std::allocator_traits<A>::template rebind_alloc<T> A2;\n    A2 a2( a );\n\n    typedef boost::detail::sp_as_deleter< T, A2 > D;\n\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), boost::detail::sp_inplace_tag<D>(), a2 );\n\n#else\n\n    typedef boost::detail::sp_ms_deleter< T > D;\n\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), boost::detail::sp_inplace_tag<D>(), a );\n\n#endif\n\n    D * pd = static_cast< D* >( pt._internal_get_untyped_deleter() );\n    void * pv = pd->address();\n\n#if !defined( BOOST_NO_CXX11_ALLOCATOR )\n\n    std::allocator_traits<A2>::construct( a2, static_cast< T* >( pv ), boost::detail::sp_forward<Args>( args )... );\n\n#else\n\n    ::new( pv ) T( boost::detail::sp_forward<Args>( args )... );\n\n#endif\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\n#else // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n// Common zero-argument versions\n\ntemplate< class T > typename boost::detail::sp_if_not_array< T >::type make_shared()\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T();\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T();\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n// For example MSVC 10.0\n\ntemplate< class T, class A1 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T(\n        boost::detail::sp_forward<A1>( a1 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( \n        boost::detail::sp_forward<A1>( a1 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T(\n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( \n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T(\n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( \n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T(\n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( \n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T(\n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( \n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5, class A6 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T(\n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 ), \n        boost::detail::sp_forward<A6>( a6 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( \n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 ), \n        boost::detail::sp_forward<A6>( a6 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T(\n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 ), \n        boost::detail::sp_forward<A6>( a6 ), \n        boost::detail::sp_forward<A7>( a7 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( \n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 ), \n        boost::detail::sp_forward<A6>( a6 ), \n        boost::detail::sp_forward<A7>( a7 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T(\n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 ), \n        boost::detail::sp_forward<A6>( a6 ), \n        boost::detail::sp_forward<A7>( a7 ), \n        boost::detail::sp_forward<A8>( a8 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( \n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 ), \n        boost::detail::sp_forward<A6>( a6 ), \n        boost::detail::sp_forward<A7>( a7 ), \n        boost::detail::sp_forward<A8>( a8 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T(\n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 ), \n        boost::detail::sp_forward<A6>( a6 ), \n        boost::detail::sp_forward<A7>( a7 ), \n        boost::detail::sp_forward<A8>( a8 ), \n        boost::detail::sp_forward<A9>( a9 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( \n        boost::detail::sp_forward<A1>( a1 ), \n        boost::detail::sp_forward<A2>( a2 ), \n        boost::detail::sp_forward<A3>( a3 ), \n        boost::detail::sp_forward<A4>( a4 ), \n        boost::detail::sp_forward<A5>( a5 ), \n        boost::detail::sp_forward<A6>( a6 ), \n        boost::detail::sp_forward<A7>( a7 ), \n        boost::detail::sp_forward<A8>( a8 ), \n        boost::detail::sp_forward<A9>( a9 )\n        );\n\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\n#else // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n// C++03 version\n\ntemplate< class T, class A1 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5, class A6 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5, a6 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5, a6 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >\ntypename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\ntemplate< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >\ntypename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )\n{\n    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );\n\n    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );\n\n    void * pv = pd->address();\n\n    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );\n    pd->set_initialized();\n\n    T * pt2 = static_cast< T* >( pv );\n\n    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );\n    return boost::shared_ptr< T >( pt, pt2 );\n}\n\n#endif // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n#endif // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n#undef BOOST_SP_MSD\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/make_unique.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Joseph Fernandes\n * glenfe at live dot com\n *\n * Distributed under the Boost Software License,\n * Version 1.0. (See accompanying file LICENSE_1_0.txt\n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_MAKE_UNIQUE_HPP\n#define BOOST_SMART_PTR_MAKE_UNIQUE_HPP\n\n#include <boost/smart_ptr/make_unique_array.hpp>\n#include <boost/smart_ptr/make_unique_object.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/make_unique_array.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Joseph Fernandes\n * glenfe at live dot com\n *\n * Distributed under the Boost Software License,\n * Version 1.0. (See accompanying file LICENSE_1_0.txt\n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_MAKE_UNIQUE_ARRAY_HPP\n#define BOOST_SMART_PTR_MAKE_UNIQUE_ARRAY_HPP\n\n#include <boost/smart_ptr/detail/up_if_array.hpp>\n#include <boost/smart_ptr/detail/array_traits.hpp>\n\nnamespace boost {\n    template<class T>\n    inline typename boost::detail::up_if_array<T>::type\n    make_unique(std::size_t size) {\n        typedef typename boost::detail::array_inner<T>::type U;\n        return std::unique_ptr<T>(new U[size]());\n    }\n    \n    template<class T>\n    inline typename boost::detail::up_if_array<T>::type\n    make_unique_noinit(std::size_t size) {\n        typedef typename boost::detail::array_inner<T>::type U;\n        return std::unique_ptr<T>(new U[size]);\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/make_unique_object.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Joseph Fernandes\n * glenfe at live dot com\n *\n * Distributed under the Boost Software License,\n * Version 1.0. (See accompanying file LICENSE_1_0.txt\n * or copy at http://boost.org/LICENSE_1_0.txt)\n */\n#ifndef BOOST_SMART_PTR_MAKE_UNIQUE_OBJECT_HPP\n#define BOOST_SMART_PTR_MAKE_UNIQUE_OBJECT_HPP\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/detail/up_if_not_array.hpp>\n#include <boost/type_traits/add_rvalue_reference.hpp>\n#include <utility>\n\nnamespace boost {\n    template<class T>\n    inline typename boost::detail::up_if_not_array<T>::type\n    make_unique() {\n        return std::unique_ptr<T>(new T());\n    }\n\n#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\n    template<class T, class... Args>\n    inline typename boost::detail::up_if_not_array<T>::type\n    make_unique(Args&&... args) {\n        return std::unique_ptr<T>(new T(std::forward<Args>(args)...));\n    }\n#endif\n    \n    template<class T>\n    inline typename boost::detail::up_if_not_array<T>::type\n    make_unique(typename add_rvalue_reference<T>::type value) {\n        return std::unique_ptr<T>(new T(std::move(value)));\n    }\n\n    template<class T>\n    inline typename boost::detail::up_if_not_array<T>::type\n    make_unique_noinit() {\n        return std::unique_ptr<T>(new T);\n    }\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/owner_less.hpp",
    "content": "#ifndef BOOST_SMART_PTR_OWNER_LESS_HPP_INCLUDED\n#define BOOST_SMART_PTR_OWNER_LESS_HPP_INCLUDED\n\n//\n//  owner_less.hpp\n//\n//  Copyright (c) 2008 Frank Mori Hess\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/smart_ptr.htm for documentation.\n//\n\n#include <functional>\n\nnamespace boost\n{\n  template<typename T> class shared_ptr;\n  template<typename T> class weak_ptr;\n\n  namespace detail\n  {\n    template<typename T, typename U>\n      struct generic_owner_less : public std::binary_function<T, T, bool>\n    {\n      bool operator()(const T &lhs, const T &rhs) const\n      {\n        return lhs.owner_before(rhs);\n      }\n      bool operator()(const T &lhs, const U &rhs) const\n      {\n        return lhs.owner_before(rhs);\n      }\n      bool operator()(const U &lhs, const T &rhs) const\n      {\n        return lhs.owner_before(rhs);\n      }\n    };\n  } // namespace detail\n\n  template<typename T> struct owner_less;\n\n  template<typename T>\n    struct owner_less<shared_ptr<T> >:\n    public detail::generic_owner_less<shared_ptr<T>, weak_ptr<T> >\n  {};\n\n  template<typename T>\n    struct owner_less<weak_ptr<T> >:\n    public detail::generic_owner_less<weak_ptr<T>, shared_ptr<T> >\n  {};\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_OWNER_LESS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/scoped_array.hpp",
    "content": "#ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED\n#define BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED\n\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001, 2002 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  http://www.boost.org/libs/smart_ptr/scoped_array.htm\n//\n\n#include <boost/config.hpp>\n#include <boost/assert.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>\n\n#include <boost/detail/workaround.hpp>\n\n#include <cstddef>            // for std::ptrdiff_t\n\nnamespace boost\n{\n\n// Debug hooks\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n\nvoid sp_array_constructor_hook(void * p);\nvoid sp_array_destructor_hook(void * p);\n\n#endif\n\n//  scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to\n//  is guaranteed, either on destruction of the scoped_array or via an explicit\n//  reset(). Use shared_array or std::vector if your needs are more complex.\n\ntemplate<class T> class scoped_array // noncopyable\n{\nprivate:\n\n    T * px;\n\n    scoped_array(scoped_array const &);\n    scoped_array & operator=(scoped_array const &);\n\n    typedef scoped_array<T> this_type;\n\n    void operator==( scoped_array const& ) const;\n    void operator!=( scoped_array const& ) const;\n\npublic:\n\n    typedef T element_type;\n\n    explicit scoped_array( T * p = 0 ) BOOST_NOEXCEPT : px( p )\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_array_constructor_hook( px );\n#endif\n    }\n\n    ~scoped_array() // never throws\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_array_destructor_hook( px );\n#endif\n        boost::checked_array_delete( px );\n    }\n\n    void reset(T * p = 0) // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)\n    {\n        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors\n        this_type(p).swap(*this);\n    }\n\n    T & operator[](std::ptrdiff_t i) const // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)\n    {\n        BOOST_ASSERT( px != 0 );\n        BOOST_ASSERT( i >= 0 );\n        return px[i];\n    }\n\n    T * get() const BOOST_NOEXCEPT\n    {\n        return px;\n    }\n\n// implicit conversion to \"bool\"\n#include <boost/smart_ptr/detail/operator_bool.hpp>\n\n    void swap(scoped_array & b) BOOST_NOEXCEPT\n    {\n        T * tmp = b.px;\n        b.px = px;\n        px = tmp;\n    }\n};\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\ntemplate<class T> inline bool operator==( scoped_array<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator==( boost::detail::sp_nullptr_t, scoped_array<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator!=( scoped_array<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\ntemplate<class T> inline bool operator!=( boost::detail::sp_nullptr_t, scoped_array<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\n#endif\n\ntemplate<class T> inline void swap(scoped_array<T> & a, scoped_array<T> & b) BOOST_NOEXCEPT\n{\n    a.swap(b);\n}\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/scoped_ptr.hpp",
    "content": "#ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED\n#define BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED\n\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001, 2002 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  http://www.boost.org/libs/smart_ptr/scoped_ptr.htm\n//\n\n#include <boost/config.hpp>\n#include <boost/assert.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>\n#include <boost/smart_ptr/detail/sp_disable_deprecated.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifndef BOOST_NO_AUTO_PTR\n# include <memory>          // for std::auto_ptr\n#endif\n\n#if defined( BOOST_SP_DISABLE_DEPRECATED )\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n#endif\n\nnamespace boost\n{\n\n// Debug hooks\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n\nvoid sp_scalar_constructor_hook(void * p);\nvoid sp_scalar_destructor_hook(void * p);\n\n#endif\n\n//  scoped_ptr mimics a built-in pointer except that it guarantees deletion\n//  of the object pointed to, either on destruction of the scoped_ptr or via\n//  an explicit reset(). scoped_ptr is a simple solution for simple needs;\n//  use shared_ptr or std::auto_ptr if your needs are more complex.\n\ntemplate<class T> class scoped_ptr // noncopyable\n{\nprivate:\n\n    T * px;\n\n    scoped_ptr(scoped_ptr const &);\n    scoped_ptr & operator=(scoped_ptr const &);\n\n    typedef scoped_ptr<T> this_type;\n\n    void operator==( scoped_ptr const& ) const;\n    void operator!=( scoped_ptr const& ) const;\n\npublic:\n\n    typedef T element_type;\n\n    explicit scoped_ptr( T * p = 0 ): px( p ) // never throws\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_constructor_hook( px );\n#endif\n    }\n\n#ifndef BOOST_NO_AUTO_PTR\n\n    explicit scoped_ptr( std::auto_ptr<T> p ) BOOST_NOEXCEPT : px( p.release() )\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_constructor_hook( px );\n#endif\n    }\n\n#endif\n\n    ~scoped_ptr() // never throws\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_destructor_hook( px );\n#endif\n        boost::checked_delete( px );\n    }\n\n    void reset(T * p = 0) // never throws\n    {\n        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors\n        this_type(p).swap(*this);\n    }\n\n    T & operator*() const // never throws\n    {\n        BOOST_ASSERT( px != 0 );\n        return *px;\n    }\n\n    T * operator->() const // never throws\n    {\n        BOOST_ASSERT( px != 0 );\n        return px;\n    }\n\n    T * get() const BOOST_NOEXCEPT\n    {\n        return px;\n    }\n\n// implicit conversion to \"bool\"\n#include <boost/smart_ptr/detail/operator_bool.hpp>\n\n    void swap(scoped_ptr & b) BOOST_NOEXCEPT\n    {\n        T * tmp = b.px;\n        b.px = px;\n        px = tmp;\n    }\n};\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\ntemplate<class T> inline bool operator==( scoped_ptr<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator==( boost::detail::sp_nullptr_t, scoped_ptr<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator!=( scoped_ptr<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\ntemplate<class T> inline bool operator!=( boost::detail::sp_nullptr_t, scoped_ptr<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\n#endif\n\ntemplate<class T> inline void swap(scoped_ptr<T> & a, scoped_ptr<T> & b) BOOST_NOEXCEPT\n{\n    a.swap(b);\n}\n\n// get_pointer(p) is a generic way to say p.get()\n\ntemplate<class T> inline T * get_pointer(scoped_ptr<T> const & p) BOOST_NOEXCEPT\n{\n    return p.get();\n}\n\n} // namespace boost\n\n#if defined( BOOST_SP_DISABLE_DEPRECATED )\n#pragma GCC diagnostic pop\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/shared_array.hpp",
    "content": "#ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED\n#define BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED\n\n//\n//  shared_array.hpp\n//\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001, 2002, 2012 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/shared_array.htm for documentation.\n//\n\n#include <boost/config.hpp>   // for broken compiler workarounds\n\n#include <memory>             // TR1 cyclic inclusion fix\n\n#include <boost/assert.hpp>\n#include <boost/checked_delete.hpp>\n\n#include <boost/smart_ptr/shared_ptr.hpp>\n#include <boost/smart_ptr/detail/shared_count.hpp>\n#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>\n#include <boost/detail/workaround.hpp>\n\n#include <cstddef>            // for std::ptrdiff_t\n#include <algorithm>          // for std::swap\n#include <functional>         // for std::less\n\nnamespace boost\n{\n\n//\n//  shared_array\n//\n//  shared_array extends shared_ptr to arrays.\n//  The array pointed to is deleted when the last shared_array pointing to it\n//  is destroyed or reset.\n//\n\ntemplate<class T> class shared_array\n{\nprivate:\n\n    // Borland 5.5.1 specific workarounds\n    typedef checked_array_deleter<T> deleter;\n    typedef shared_array<T> this_type;\n\npublic:\n\n    typedef T element_type;\n\n    shared_array() BOOST_NOEXCEPT : px( 0 ), pn()\n    {\n    }\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\n    shared_array( boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT : px( 0 ), pn()\n    {\n    }\n\n#endif\n\n    template<class Y>\n    explicit shared_array( Y * p ): px( p ), pn( p, checked_array_deleter<Y>() )\n    {\n        boost::detail::sp_assert_convertible< Y[], T[] >();\n    }\n\n    //\n    // Requirements: D's copy constructor must not throw\n    //\n    // shared_array will release p by calling d(p)\n    //\n\n    template<class Y, class D> shared_array( Y * p, D d ): px( p ), pn( p, d )\n    {\n        boost::detail::sp_assert_convertible< Y[], T[] >();\n    }\n\n    // As above, but with allocator. A's copy constructor shall not throw.\n\n    template<class Y, class D, class A> shared_array( Y * p, D d, A a ): px( p ), pn( p, d, a )\n    {\n        boost::detail::sp_assert_convertible< Y[], T[] >();\n    }\n\n//  generated copy constructor, destructor are fine...\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n// ... except in C++0x, move disables the implicit copy\n\n    shared_array( shared_array const & r ) BOOST_NOEXCEPT : px( r.px ), pn( r.pn )\n    {\n    }\n\n    shared_array( shared_array && r ) BOOST_NOEXCEPT : px( r.px ), pn()\n    {\n        pn.swap( r.pn );\n        r.px = 0;\n    }\n\n#endif\n\n    // conversion\n\n    template<class Y>\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    shared_array( shared_array<Y> const & r, typename boost::detail::sp_enable_if_convertible< Y[], T[] >::type = boost::detail::sp_empty() )\n\n#else\n\n    shared_array( shared_array<Y> const & r )\n\n#endif\n    BOOST_NOEXCEPT : px( r.px ), pn( r.pn ) // never throws\n    {\n        boost::detail::sp_assert_convertible< Y[], T[] >();\n    }\n\n    // aliasing\n\n    template< class Y >\n    shared_array( shared_array<Y> const & r, element_type * p ) BOOST_NOEXCEPT : px( p ), pn( r.pn )\n    {\n    }\n\n    // assignment\n\n    shared_array & operator=( shared_array const & r ) BOOST_NOEXCEPT\n    {\n        this_type( r ).swap( *this );\n        return *this;\n    }\n\n#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1400)\n\n    template<class Y>\n    shared_array & operator=( shared_array<Y> const & r ) BOOST_NOEXCEPT\n    {\n        this_type( r ).swap( *this );\n        return *this;\n    }\n\n#endif\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    shared_array & operator=( shared_array && r ) BOOST_NOEXCEPT\n    {\n        this_type( static_cast< shared_array && >( r ) ).swap( *this );\n        return *this;\n    }\n\n    template<class Y>\n    shared_array & operator=( shared_array<Y> && r ) BOOST_NOEXCEPT\n    {\n        this_type( static_cast< shared_array<Y> && >( r ) ).swap( *this );\n        return *this;\n    }\n\n#endif\n\n    void reset() BOOST_NOEXCEPT\n    {\n        this_type().swap( *this );\n    }\n\n    template<class Y> void reset( Y * p ) // Y must be complete\n    {\n        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors\n        this_type( p ).swap( *this );\n    }\n\n    template<class Y, class D> void reset( Y * p, D d )\n    {\n        this_type( p, d ).swap( *this );\n    }\n\n    template<class Y, class D, class A> void reset( Y * p, D d, A a )\n    {\n        this_type( p, d, a ).swap( *this );\n    }\n\n    template<class Y> void reset( shared_array<Y> const & r, element_type * p )\n    {\n        this_type( r, p ).swap( *this );\n    }\n\n    T & operator[] (std::ptrdiff_t i) const // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)\n    {\n        BOOST_ASSERT(px != 0);\n        BOOST_ASSERT(i >= 0);\n        return px[i];\n    }\n    \n    T * get() const BOOST_NOEXCEPT\n    {\n        return px;\n    }\n\n// implicit conversion to \"bool\"\n#include <boost/smart_ptr/detail/operator_bool.hpp>\n\n    bool unique() const BOOST_NOEXCEPT\n    {\n        return pn.unique();\n    }\n\n    long use_count() const BOOST_NOEXCEPT\n    {\n        return pn.use_count();\n    }\n\n    void swap(shared_array<T> & other) BOOST_NOEXCEPT\n    {\n        std::swap(px, other.px);\n        pn.swap(other.pn);\n    }\n\n    void * _internal_get_deleter( boost::detail::sp_typeinfo const & ti ) const\n    {\n        return pn.get_deleter( ti );\n    }\n\nprivate:\n\n    template<class Y> friend class shared_array;\n\n    T * px;                     // contained pointer\n    detail::shared_count pn;    // reference counter\n\n};  // shared_array\n\ntemplate<class T> inline bool operator==(shared_array<T> const & a, shared_array<T> const & b) BOOST_NOEXCEPT\n{\n    return a.get() == b.get();\n}\n\ntemplate<class T> inline bool operator!=(shared_array<T> const & a, shared_array<T> const & b) BOOST_NOEXCEPT\n{\n    return a.get() != b.get();\n}\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\ntemplate<class T> inline bool operator==( shared_array<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator==( boost::detail::sp_nullptr_t, shared_array<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator!=( shared_array<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\ntemplate<class T> inline bool operator!=( boost::detail::sp_nullptr_t, shared_array<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\n#endif\n\ntemplate<class T> inline bool operator<(shared_array<T> const & a, shared_array<T> const & b) BOOST_NOEXCEPT\n{\n    return std::less<T*>()(a.get(), b.get());\n}\n\ntemplate<class T> void swap(shared_array<T> & a, shared_array<T> & b) BOOST_NOEXCEPT\n{\n    a.swap(b);\n}\n\ntemplate< class D, class T > D * get_deleter( shared_array<T> const & p )\n{\n    return static_cast< D * >( p._internal_get_deleter( BOOST_SP_TYPEID(D) ) );\n}\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/shared_ptr.hpp",
    "content": "#ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED\n#define BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED\n\n//\n//  shared_ptr.hpp\n//\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001-2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation.\n//\n\n#include <boost/config.hpp>   // for broken compiler workarounds\n\n// In order to avoid circular dependencies with Boost.TR1\n// we make sure that our include of <memory> doesn't try to\n// pull in the TR1 headers: that's why we use this header \n// rather than including <memory> directly:\n#include <boost/config/no_tr1/memory.hpp>  // std::auto_ptr\n\n#include <boost/assert.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/throw_exception.hpp>\n#include <boost/smart_ptr/detail/shared_count.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/smart_ptr/detail/sp_convertible.hpp>\n#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>\n#include <boost/smart_ptr/detail/sp_disable_deprecated.hpp>\n\n#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)\n#include <boost/smart_ptr/detail/spinlock_pool.hpp>\n#endif\n\n#include <algorithm>            // for std::swap\n#include <functional>           // for std::less\n#include <typeinfo>             // for std::bad_cast\n#include <cstddef>              // for std::size_t\n\n#if !defined(BOOST_NO_IOSTREAM)\n#if !defined(BOOST_NO_IOSFWD)\n#include <iosfwd>               // for std::basic_ostream\n#else\n#include <ostream>\n#endif\n#endif\n\n#if defined( BOOST_SP_DISABLE_DEPRECATED )\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n#endif\n\nnamespace boost\n{\n\ntemplate<class T> class shared_ptr;\ntemplate<class T> class weak_ptr;\ntemplate<class T> class enable_shared_from_this;\nclass enable_shared_from_raw;\n\nnamespace movelib\n{\n\n    template< class T, class D > class unique_ptr;\n\n} // namespace movelib\n\nnamespace detail\n{\n\n// sp_element, element_type\n\ntemplate< class T > struct sp_element\n{\n    typedef T type;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class T > struct sp_element< T[] >\n{\n    typedef T type;\n};\n\n#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )\n\ntemplate< class T, std::size_t N > struct sp_element< T[N] >\n{\n    typedef T type;\n};\n\n#endif\n\n#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n// sp_dereference, return type of operator*\n\ntemplate< class T > struct sp_dereference\n{\n    typedef T & type;\n};\n\ntemplate<> struct sp_dereference< void >\n{\n    typedef void type;\n};\n\n#if !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)\n\ntemplate<> struct sp_dereference< void const >\n{\n    typedef void type;\n};\n\ntemplate<> struct sp_dereference< void volatile >\n{\n    typedef void type;\n};\n\ntemplate<> struct sp_dereference< void const volatile >\n{\n    typedef void type;\n};\n\n#endif // !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class T > struct sp_dereference< T[] >\n{\n    typedef void type;\n};\n\n#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )\n\ntemplate< class T, std::size_t N > struct sp_dereference< T[N] >\n{\n    typedef void type;\n};\n\n#endif\n\n#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n// sp_member_access, return type of operator->\n\ntemplate< class T > struct sp_member_access\n{\n    typedef T * type;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class T > struct sp_member_access< T[] >\n{\n    typedef void type;\n};\n\n#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )\n\ntemplate< class T, std::size_t N > struct sp_member_access< T[N] >\n{\n    typedef void type;\n};\n\n#endif\n\n#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n// sp_array_access, return type of operator[]\n\ntemplate< class T > struct sp_array_access\n{\n    typedef void type;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class T > struct sp_array_access< T[] >\n{\n    typedef T & type;\n};\n\n#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )\n\ntemplate< class T, std::size_t N > struct sp_array_access< T[N] >\n{\n    typedef T & type;\n};\n\n#endif\n\n#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n// sp_extent, for operator[] index check\n\ntemplate< class T > struct sp_extent\n{\n    enum _vt { value = 0 };\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class T, std::size_t N > struct sp_extent< T[N] >\n{\n    enum _vt { value = N };\n};\n\n#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n// enable_shared_from_this support\n\ntemplate< class X, class Y, class T > inline void sp_enable_shared_from_this( boost::shared_ptr<X> const * ppx, Y const * py, boost::enable_shared_from_this< T > const * pe )\n{\n    if( pe != 0 )\n    {\n        pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) );\n    }\n}\n\ntemplate< class X, class Y > inline void sp_enable_shared_from_this( boost::shared_ptr<X> * ppx, Y const * py, boost::enable_shared_from_raw const * pe );\n\n#ifdef _MANAGED\n\n// Avoid C4793, ... causes native code generation\n\nstruct sp_any_pointer\n{\n    template<class T> sp_any_pointer( T* ) {}\n};\n\ninline void sp_enable_shared_from_this( sp_any_pointer, sp_any_pointer, sp_any_pointer )\n{\n}\n\n#else // _MANAGED\n\ninline void sp_enable_shared_from_this( ... )\n{\n}\n\n#endif // _MANAGED\n\n#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_NO_AUTO_PTR )\n\n// rvalue auto_ptr support based on a technique by Dave Abrahams\n\ntemplate< class T, class R > struct sp_enable_if_auto_ptr\n{\n};\n\ntemplate< class T, class R > struct sp_enable_if_auto_ptr< std::auto_ptr< T >, R >\n{\n    typedef R type;\n}; \n\n#endif\n\n// sp_assert_convertible\n\ntemplate< class Y, class T > inline void sp_assert_convertible()\n{\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    // static_assert( sp_convertible< Y, T >::value );\n    typedef char tmp[ sp_convertible< Y, T >::value? 1: -1 ];\n    (void)sizeof( tmp );\n\n#else\n\n    T* p = static_cast< Y* >( 0 );\n    (void)p;\n\n#endif\n}\n\n// pointer constructor helper\n\ntemplate< class T, class Y > inline void sp_pointer_construct( boost::shared_ptr< T > * ppx, Y * p, boost::detail::shared_count & pn )\n{\n    boost::detail::shared_count( p ).swap( pn );\n    boost::detail::sp_enable_shared_from_this( ppx, p, p );\n}\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class T, class Y > inline void sp_pointer_construct( boost::shared_ptr< T[] > * /*ppx*/, Y * p, boost::detail::shared_count & pn )\n{\n    sp_assert_convertible< Y[], T[] >();\n    boost::detail::shared_count( p, boost::checked_array_deleter< T >() ).swap( pn );\n}\n\ntemplate< class T, std::size_t N, class Y > inline void sp_pointer_construct( boost::shared_ptr< T[N] > * /*ppx*/, Y * p, boost::detail::shared_count & pn )\n{\n    sp_assert_convertible< Y[N], T[N] >();\n    boost::detail::shared_count( p, boost::checked_array_deleter< T >() ).swap( pn );\n}\n\n#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n// deleter constructor helper\n\ntemplate< class T, class Y > inline void sp_deleter_construct( boost::shared_ptr< T > * ppx, Y * p )\n{\n    boost::detail::sp_enable_shared_from_this( ppx, p, p );\n}\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class T, class Y > inline void sp_deleter_construct( boost::shared_ptr< T[] > * /*ppx*/, Y * /*p*/ )\n{\n    sp_assert_convertible< Y[], T[] >();\n}\n\ntemplate< class T, std::size_t N, class Y > inline void sp_deleter_construct( boost::shared_ptr< T[N] > * /*ppx*/, Y * /*p*/ )\n{\n    sp_assert_convertible< Y[N], T[N] >();\n}\n\n#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n} // namespace detail\n\n\n//\n//  shared_ptr\n//\n//  An enhanced relative of scoped_ptr with reference counted copy semantics.\n//  The object pointed to is deleted when the last shared_ptr pointing to it\n//  is destroyed or reset.\n//\n\ntemplate<class T> class shared_ptr\n{\nprivate:\n\n    // Borland 5.5.1 specific workaround\n    typedef shared_ptr<T> this_type;\n\npublic:\n\n    typedef typename boost::detail::sp_element< T >::type element_type;\n\n    shared_ptr() BOOST_NOEXCEPT : px( 0 ), pn() // never throws in 1.30+\n    {\n    }\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\n    shared_ptr( boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT : px( 0 ), pn() // never throws\n    {\n    }\n\n#endif\n\n    template<class Y>\n    explicit shared_ptr( Y * p ): px( p ), pn() // Y must be complete\n    {\n        boost::detail::sp_pointer_construct( this, p, pn );\n    }\n\n    //\n    // Requirements: D's copy constructor must not throw\n    //\n    // shared_ptr will release p by calling d(p)\n    //\n\n    template<class Y, class D> shared_ptr( Y * p, D d ): px( p ), pn( p, d )\n    {\n        boost::detail::sp_deleter_construct( this, p );\n    }\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\n    template<class D> shared_ptr( boost::detail::sp_nullptr_t p, D d ): px( p ), pn( p, d )\n    {\n    }\n\n#endif\n\n    // As above, but with allocator. A's copy constructor shall not throw.\n\n    template<class Y, class D, class A> shared_ptr( Y * p, D d, A a ): px( p ), pn( p, d, a )\n    {\n        boost::detail::sp_deleter_construct( this, p );\n    }\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\n    template<class D, class A> shared_ptr( boost::detail::sp_nullptr_t p, D d, A a ): px( p ), pn( p, d, a )\n    {\n    }\n\n#endif\n\n//  generated copy constructor, destructor are fine...\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n// ... except in C++0x, move disables the implicit copy\n\n    shared_ptr( shared_ptr const & r ) BOOST_NOEXCEPT : px( r.px ), pn( r.pn )\n    {\n    }\n\n#endif\n\n    template<class Y>\n    explicit shared_ptr( weak_ptr<Y> const & r ): pn( r.pn ) // may throw\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        // it is now safe to copy r.px, as pn(r.pn) did not throw\n        px = r.px;\n    }\n\n    template<class Y>\n    shared_ptr( weak_ptr<Y> const & r, boost::detail::sp_nothrow_tag )\n    BOOST_NOEXCEPT : px( 0 ), pn( r.pn, boost::detail::sp_nothrow_tag() )\n    {\n        if( !pn.empty() )\n        {\n            px = r.px;\n        }\n    }\n\n    template<class Y>\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    shared_ptr( shared_ptr<Y> const & r, typename boost::detail::sp_enable_if_convertible<Y,T>::type = boost::detail::sp_empty() )\n\n#else\n\n    shared_ptr( shared_ptr<Y> const & r )\n\n#endif\n    BOOST_NOEXCEPT : px( r.px ), pn( r.pn )\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n    }\n\n    // aliasing\n    template< class Y >\n    shared_ptr( shared_ptr<Y> const & r, element_type * p ) BOOST_NOEXCEPT : px( p ), pn( r.pn )\n    {\n    }\n\n#ifndef BOOST_NO_AUTO_PTR\n\n    template<class Y>\n    explicit shared_ptr( std::auto_ptr<Y> & r ): px(r.get()), pn()\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        Y * tmp = r.get();\n        pn = boost::detail::shared_count( r );\n\n        boost::detail::sp_deleter_construct( this, tmp );\n    }\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    template<class Y>\n    shared_ptr( std::auto_ptr<Y> && r ): px(r.get()), pn()\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        Y * tmp = r.get();\n        pn = boost::detail::shared_count( r );\n\n        boost::detail::sp_deleter_construct( this, tmp );\n    }\n\n#elif !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n    template<class Ap>\n    explicit shared_ptr( Ap r, typename boost::detail::sp_enable_if_auto_ptr<Ap, int>::type = 0 ): px( r.get() ), pn()\n    {\n        typedef typename Ap::element_type Y;\n\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        Y * tmp = r.get();\n        pn = boost::detail::shared_count( r );\n\n        boost::detail::sp_deleter_construct( this, tmp );\n    }\n\n#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_NO_AUTO_PTR\n\n#if !defined( BOOST_NO_CXX11_SMART_PTR ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    template< class Y, class D >\n    shared_ptr( std::unique_ptr< Y, D > && r ): px( r.get() ), pn()\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        typename std::unique_ptr< Y, D >::pointer tmp = r.get();\n        pn = boost::detail::shared_count( r );\n\n        boost::detail::sp_deleter_construct( this, tmp );\n    }\n\n#endif\n\n    template< class Y, class D >\n    shared_ptr( boost::movelib::unique_ptr< Y, D > r ): px( r.get() ), pn()\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        typename boost::movelib::unique_ptr< Y, D >::pointer tmp = r.get();\n        pn = boost::detail::shared_count( r );\n\n        boost::detail::sp_deleter_construct( this, tmp );\n    }\n\n    // assignment\n\n    shared_ptr & operator=( shared_ptr const & r ) BOOST_NOEXCEPT\n    {\n        this_type(r).swap(*this);\n        return *this;\n    }\n\n#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1400)\n\n    template<class Y>\n    shared_ptr & operator=(shared_ptr<Y> const & r) BOOST_NOEXCEPT\n    {\n        this_type(r).swap(*this);\n        return *this;\n    }\n\n#endif\n\n#ifndef BOOST_NO_AUTO_PTR\n\n    template<class Y>\n    shared_ptr & operator=( std::auto_ptr<Y> & r )\n    {\n        this_type( r ).swap( *this );\n        return *this;\n    }\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    template<class Y>\n    shared_ptr & operator=( std::auto_ptr<Y> && r )\n    {\n        this_type( static_cast< std::auto_ptr<Y> && >( r ) ).swap( *this );\n        return *this;\n    }\n\n#elif !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n    template<class Ap>\n    typename boost::detail::sp_enable_if_auto_ptr< Ap, shared_ptr & >::type operator=( Ap r )\n    {\n        this_type( r ).swap( *this );\n        return *this;\n    }\n\n#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_NO_AUTO_PTR\n\n#if !defined( BOOST_NO_CXX11_SMART_PTR ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    template<class Y, class D>\n    shared_ptr & operator=( std::unique_ptr<Y, D> && r )\n    {\n        this_type( static_cast< std::unique_ptr<Y, D> && >( r ) ).swap(*this);\n        return *this;\n    }\n\n#endif\n\n    template<class Y, class D>\n    shared_ptr & operator=( boost::movelib::unique_ptr<Y, D> r )\n    {\n        // this_type( static_cast< unique_ptr<Y, D> && >( r ) ).swap( *this );\n\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        typename boost::movelib::unique_ptr< Y, D >::pointer p = r.get();\n\n        shared_ptr tmp;\n\n        tmp.px = p;\n        tmp.pn = boost::detail::shared_count( r );\n\n        boost::detail::sp_deleter_construct( &tmp, p );\n\n        tmp.swap( *this );\n\n        return *this;\n    }\n\n// Move support\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    shared_ptr( shared_ptr && r ) BOOST_NOEXCEPT : px( r.px ), pn()\n    {\n        pn.swap( r.pn );\n        r.px = 0;\n    }\n\n    template<class Y>\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    shared_ptr( shared_ptr<Y> && r, typename boost::detail::sp_enable_if_convertible<Y,T>::type = boost::detail::sp_empty() )\n\n#else\n\n    shared_ptr( shared_ptr<Y> && r )\n\n#endif\n    BOOST_NOEXCEPT : px( r.px ), pn()\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        pn.swap( r.pn );\n        r.px = 0;\n    }\n\n    shared_ptr & operator=( shared_ptr && r ) BOOST_NOEXCEPT\n    {\n        this_type( static_cast< shared_ptr && >( r ) ).swap( *this );\n        return *this;\n    }\n\n    template<class Y>\n    shared_ptr & operator=( shared_ptr<Y> && r ) BOOST_NOEXCEPT\n    {\n        this_type( static_cast< shared_ptr<Y> && >( r ) ).swap( *this );\n        return *this;\n    }\n\n#endif\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\n    shared_ptr & operator=( boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT // never throws\n    {\n        this_type().swap(*this);\n        return *this;\n    }\n\n#endif\n\n    void reset() BOOST_NOEXCEPT // never throws in 1.30+\n    {\n        this_type().swap(*this);\n    }\n\n    template<class Y> void reset( Y * p ) // Y must be complete\n    {\n        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors\n        this_type( p ).swap( *this );\n    }\n\n    template<class Y, class D> void reset( Y * p, D d )\n    {\n        this_type( p, d ).swap( *this );\n    }\n\n    template<class Y, class D, class A> void reset( Y * p, D d, A a )\n    {\n        this_type( p, d, a ).swap( *this );\n    }\n\n    template<class Y> void reset( shared_ptr<Y> const & r, element_type * p )\n    {\n        this_type( r, p ).swap( *this );\n    }\n    \n    // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)\n    typename boost::detail::sp_dereference< T >::type operator* () const\n    {\n        BOOST_ASSERT( px != 0 );\n        return *px;\n    }\n    \n    // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)\n    typename boost::detail::sp_member_access< T >::type operator-> () const \n    {\n        BOOST_ASSERT( px != 0 );\n        return px;\n    }\n    \n    // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)\n    typename boost::detail::sp_array_access< T >::type operator[] ( std::ptrdiff_t i ) const\n    {\n        BOOST_ASSERT( px != 0 );\n        BOOST_ASSERT( i >= 0 && ( i < boost::detail::sp_extent< T >::value || boost::detail::sp_extent< T >::value == 0 ) );\n\n        return static_cast< typename boost::detail::sp_array_access< T >::type >( px[ i ] );\n    }\n\n    element_type * get() const BOOST_NOEXCEPT\n    {\n        return px;\n    }\n\n// implicit conversion to \"bool\"\n#include <boost/smart_ptr/detail/operator_bool.hpp>\n\n    bool unique() const BOOST_NOEXCEPT\n    {\n        return pn.unique();\n    }\n\n    long use_count() const BOOST_NOEXCEPT\n    {\n        return pn.use_count();\n    }\n\n    void swap( shared_ptr & other ) BOOST_NOEXCEPT\n    {\n        std::swap(px, other.px);\n        pn.swap(other.pn);\n    }\n\n    template<class Y> bool owner_before( shared_ptr<Y> const & rhs ) const BOOST_NOEXCEPT\n    {\n        return pn < rhs.pn;\n    }\n\n    template<class Y> bool owner_before( weak_ptr<Y> const & rhs ) const BOOST_NOEXCEPT\n    {\n        return pn < rhs.pn;\n    }\n\n    void * _internal_get_deleter( boost::detail::sp_typeinfo const & ti ) const BOOST_NOEXCEPT\n    {\n        return pn.get_deleter( ti );\n    }\n\n    void * _internal_get_untyped_deleter() const BOOST_NOEXCEPT\n    {\n        return pn.get_untyped_deleter();\n    }\n\n    bool _internal_equiv( shared_ptr const & r ) const BOOST_NOEXCEPT\n    {\n        return px == r.px && pn == r.pn;\n    }\n\n// Tasteless as this may seem, making all members public allows member templates\n// to work in the absence of member template friends. (Matthew Langston)\n\n#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n\nprivate:\n\n    template<class Y> friend class shared_ptr;\n    template<class Y> friend class weak_ptr;\n\n\n#endif\n\n    element_type * px;                 // contained pointer\n    boost::detail::shared_count pn;    // reference counter\n\n};  // shared_ptr\n\ntemplate<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b) BOOST_NOEXCEPT\n{\n    return a.get() == b.get();\n}\n\ntemplate<class T, class U> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<U> const & b) BOOST_NOEXCEPT\n{\n    return a.get() != b.get();\n}\n\n#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96\n\n// Resolve the ambiguity between our op!= and the one in rel_ops\n\ntemplate<class T> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<T> const & b) BOOST_NOEXCEPT\n{\n    return a.get() != b.get();\n}\n\n#endif\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\ntemplate<class T> inline bool operator==( shared_ptr<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator==( boost::detail::sp_nullptr_t, shared_ptr<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() == 0;\n}\n\ntemplate<class T> inline bool operator!=( shared_ptr<T> const & p, boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\ntemplate<class T> inline bool operator!=( boost::detail::sp_nullptr_t, shared_ptr<T> const & p ) BOOST_NOEXCEPT\n{\n    return p.get() != 0;\n}\n\n#endif\n\ntemplate<class T, class U> inline bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b) BOOST_NOEXCEPT\n{\n    return a.owner_before( b );\n}\n\ntemplate<class T> inline void swap(shared_ptr<T> & a, shared_ptr<T> & b) BOOST_NOEXCEPT\n{\n    a.swap(b);\n}\n\ntemplate<class T, class U> shared_ptr<T> static_pointer_cast( shared_ptr<U> const & r ) BOOST_NOEXCEPT\n{\n    (void) static_cast< T* >( static_cast< U* >( 0 ) );\n\n    typedef typename shared_ptr<T>::element_type E;\n\n    E * p = static_cast< E* >( r.get() );\n    return shared_ptr<T>( r, p );\n}\n\ntemplate<class T, class U> shared_ptr<T> const_pointer_cast( shared_ptr<U> const & r ) BOOST_NOEXCEPT\n{\n    (void) const_cast< T* >( static_cast< U* >( 0 ) );\n\n    typedef typename shared_ptr<T>::element_type E;\n\n    E * p = const_cast< E* >( r.get() );\n    return shared_ptr<T>( r, p );\n}\n\ntemplate<class T, class U> shared_ptr<T> dynamic_pointer_cast( shared_ptr<U> const & r ) BOOST_NOEXCEPT\n{\n    (void) dynamic_cast< T* >( static_cast< U* >( 0 ) );\n\n    typedef typename shared_ptr<T>::element_type E;\n\n    E * p = dynamic_cast< E* >( r.get() );\n    return p? shared_ptr<T>( r, p ): shared_ptr<T>();\n}\n\ntemplate<class T, class U> shared_ptr<T> reinterpret_pointer_cast( shared_ptr<U> const & r ) BOOST_NOEXCEPT\n{\n    (void) reinterpret_cast< T* >( static_cast< U* >( 0 ) );\n\n    typedef typename shared_ptr<T>::element_type E;\n\n    E * p = reinterpret_cast< E* >( r.get() );\n    return shared_ptr<T>( r, p );\n}\n\n// get_pointer() enables boost::mem_fn to recognize shared_ptr\n\ntemplate<class T> inline typename shared_ptr<T>::element_type * get_pointer(shared_ptr<T> const & p) BOOST_NOEXCEPT\n{\n    return p.get();\n}\n\n// operator<<\n\n#if !defined(BOOST_NO_IOSTREAM)\n\n#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) &&  (__GNUC__ < 3) )\n\ntemplate<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)\n{\n    os << p.get();\n    return os;\n}\n\n#else\n\n// in STLport's no-iostreams mode no iostream symbols can be used\n#ifndef _STLP_NO_IOSTREAMS\n\n# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300 && __SGI_STL_PORT)\n// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL\nusing std::basic_ostream;\ntemplate<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, shared_ptr<Y> const & p)\n# else\ntemplate<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)\n# endif\n{\n    os << p.get();\n    return os;\n}\n\n#endif // _STLP_NO_IOSTREAMS\n\n#endif // __GNUC__ < 3\n\n#endif // !defined(BOOST_NO_IOSTREAM)\n\n// get_deleter\n\nnamespace detail\n{\n\n#if ( defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3) ) || \\\n    ( defined(__EDG_VERSION__) && BOOST_WORKAROUND(__EDG_VERSION__, <= 238) ) || \\\n    ( defined(__HP_aCC) && BOOST_WORKAROUND(__HP_aCC, <= 33500) )\n\n// g++ 2.9x doesn't allow static_cast<X const *>(void *)\n// apparently EDG 2.38 and HP aCC A.03.35 also don't accept it\n\ntemplate<class D, class T> D * basic_get_deleter(shared_ptr<T> const & p)\n{\n    void const * q = p._internal_get_deleter(BOOST_SP_TYPEID(D));\n    return const_cast<D *>(static_cast<D const *>(q));\n}\n\n#else\n\ntemplate<class D, class T> D * basic_get_deleter( shared_ptr<T> const & p ) BOOST_NOEXCEPT\n{\n    return static_cast<D *>( p._internal_get_deleter(BOOST_SP_TYPEID(D)) );\n}\n\n#endif\n\nclass esft2_deleter_wrapper\n{\nprivate:\n\n    shared_ptr<void const volatile> deleter_;\n\npublic:\n\n    esft2_deleter_wrapper()\n    {\n    }\n\n    template< class T > void set_deleter( shared_ptr<T> const & deleter )\n    {\n        deleter_ = deleter;\n    }\n\n    template<typename D> D* get_deleter() const BOOST_NOEXCEPT\n    {\n        return boost::detail::basic_get_deleter<D>( deleter_ );\n    }\n\n    template< class T> void operator()( T* )\n    {\n        BOOST_ASSERT( deleter_.use_count() <= 1 );\n        deleter_.reset();\n    }\n};\n\n} // namespace detail\n\ntemplate<class D, class T> D * get_deleter( shared_ptr<T> const & p ) BOOST_NOEXCEPT\n{\n    D *del = boost::detail::basic_get_deleter<D>(p);\n\n    if(del == 0)\n    {\n        boost::detail::esft2_deleter_wrapper *del_wrapper = boost::detail::basic_get_deleter<boost::detail::esft2_deleter_wrapper>(p);\n// The following get_deleter method call is fully qualified because\n// older versions of gcc (2.95, 3.2.3) fail to compile it when written del_wrapper->get_deleter<D>()\n        if(del_wrapper) del = del_wrapper->::boost::detail::esft2_deleter_wrapper::get_deleter<D>();\n    }\n\n    return del;\n}\n\n// atomic access\n\n#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)\n\ntemplate<class T> inline bool atomic_is_lock_free( shared_ptr<T> const * /*p*/ ) BOOST_NOEXCEPT\n{\n    return false;\n}\n\ntemplate<class T> shared_ptr<T> atomic_load( shared_ptr<T> const * p )\n{\n    boost::detail::spinlock_pool<2>::scoped_lock lock( p );\n    return *p;\n}\n\ntemplate<class T> inline shared_ptr<T> atomic_load_explicit( shared_ptr<T> const * p, /*memory_order mo*/ int )\n{\n    return atomic_load( p );\n}\n\ntemplate<class T> void atomic_store( shared_ptr<T> * p, shared_ptr<T> r )\n{\n    boost::detail::spinlock_pool<2>::scoped_lock lock( p );\n    p->swap( r );\n}\n\ntemplate<class T> inline void atomic_store_explicit( shared_ptr<T> * p, shared_ptr<T> r, /*memory_order mo*/ int )\n{\n    atomic_store( p, r ); // std::move( r )\n}\n\ntemplate<class T> shared_ptr<T> atomic_exchange( shared_ptr<T> * p, shared_ptr<T> r )\n{\n    boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( p );\n\n    sp.lock();\n    p->swap( r );\n    sp.unlock();\n\n    return r; // return std::move( r )\n}\n\ntemplate<class T> shared_ptr<T> atomic_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> r, /*memory_order mo*/ int )\n{\n    return atomic_exchange( p, r ); // std::move( r )\n}\n\ntemplate<class T> bool atomic_compare_exchange( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w )\n{\n    boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( p );\n\n    sp.lock();\n\n    if( p->_internal_equiv( *v ) )\n    {\n        p->swap( w );\n\n        sp.unlock();\n\n        return true;\n    }\n    else\n    {\n        shared_ptr<T> tmp( *p );\n\n        sp.unlock();\n\n        tmp.swap( *v );\n        return false;\n    }\n}\n\ntemplate<class T> inline bool atomic_compare_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w, /*memory_order success*/ int, /*memory_order failure*/ int )\n{\n    return atomic_compare_exchange( p, v, w ); // std::move( w )\n}\n\n#endif // !defined(BOOST_SP_NO_ATOMIC_ACCESS)\n\n// hash_value\n\ntemplate< class T > struct hash;\n\ntemplate< class T > std::size_t hash_value( boost::shared_ptr<T> const & p ) BOOST_NOEXCEPT\n{\n    return boost::hash< T* >()( p.get() );\n}\n\n} // namespace boost\n\n#if defined( BOOST_SP_DISABLE_DEPRECATED )\n#pragma GCC diagnostic pop\n#endif\n\n#endif  // #ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/smart_ptr/weak_ptr.hpp",
    "content": "#ifndef BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED\n#define BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED\n\n//\n//  weak_ptr.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/weak_ptr.htm for documentation.\n//\n\n#include <memory> // boost.TR1 include order fix\n#include <boost/smart_ptr/detail/shared_count.hpp>\n#include <boost/smart_ptr/shared_ptr.hpp>\n\nnamespace boost\n{\n\ntemplate<class T> class weak_ptr\n{\nprivate:\n\n    // Borland 5.5.1 specific workarounds\n    typedef weak_ptr<T> this_type;\n\npublic:\n\n    typedef typename boost::detail::sp_element< T >::type element_type;\n\n    weak_ptr() BOOST_NOEXCEPT : px(0), pn() // never throws in 1.30+\n    {\n    }\n\n//  generated copy constructor, assignment, destructor are fine...\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n// ... except in C++0x, move disables the implicit copy\n\n    weak_ptr( weak_ptr const & r ) BOOST_NOEXCEPT : px( r.px ), pn( r.pn )\n    {\n    }\n\n    weak_ptr & operator=( weak_ptr const & r ) BOOST_NOEXCEPT\n    {\n        px = r.px;\n        pn = r.pn;\n        return *this;\n    }\n\n#endif\n\n//\n//  The \"obvious\" converting constructor implementation:\n//\n//  template<class Y>\n//  weak_ptr(weak_ptr<Y> const & r): px(r.px), pn(r.pn) // never throws\n//  {\n//  }\n//\n//  has a serious problem.\n//\n//  r.px may already have been invalidated. The px(r.px)\n//  conversion may require access to *r.px (virtual inheritance).\n//\n//  It is not possible to avoid spurious access violations since\n//  in multithreaded programs r.px may be invalidated at any point.\n//\n\n    template<class Y>\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    weak_ptr( weak_ptr<Y> const & r, typename boost::detail::sp_enable_if_convertible<Y,T>::type = boost::detail::sp_empty() )\n\n#else\n\n    weak_ptr( weak_ptr<Y> const & r )\n\n#endif\n    BOOST_NOEXCEPT : px(r.lock().get()), pn(r.pn)\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n    }\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    template<class Y>\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    weak_ptr( weak_ptr<Y> && r, typename boost::detail::sp_enable_if_convertible<Y,T>::type = boost::detail::sp_empty() )\n\n#else\n\n    weak_ptr( weak_ptr<Y> && r )\n\n#endif\n    BOOST_NOEXCEPT : px( r.lock().get() ), pn( static_cast< boost::detail::weak_count && >( r.pn ) )\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n        r.px = 0;\n    }\n\n    // for better efficiency in the T == Y case\n    weak_ptr( weak_ptr && r )\n    BOOST_NOEXCEPT : px( r.px ), pn( static_cast< boost::detail::weak_count && >( r.pn ) )\n    {\n        r.px = 0;\n    }\n\n    // for better efficiency in the T == Y case\n    weak_ptr & operator=( weak_ptr && r ) BOOST_NOEXCEPT\n    {\n        this_type( static_cast< weak_ptr && >( r ) ).swap( *this );\n        return *this;\n    }\n\n\n#endif\n\n    template<class Y>\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    weak_ptr( shared_ptr<Y> const & r, typename boost::detail::sp_enable_if_convertible<Y,T>::type = boost::detail::sp_empty() )\n\n#else\n\n    weak_ptr( shared_ptr<Y> const & r )\n\n#endif\n    BOOST_NOEXCEPT : px( r.px ), pn( r.pn )\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n    }\n\n#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1300)\n\n    template<class Y>\n    weak_ptr & operator=( weak_ptr<Y> const & r ) BOOST_NOEXCEPT\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        px = r.lock().get();\n        pn = r.pn;\n\n        return *this;\n    }\n\n#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )\n\n    template<class Y>\n    weak_ptr & operator=( weak_ptr<Y> && r ) BOOST_NOEXCEPT\n    {\n        this_type( static_cast< weak_ptr<Y> && >( r ) ).swap( *this );\n        return *this;\n    }\n\n#endif\n\n    template<class Y>\n    weak_ptr & operator=( shared_ptr<Y> const & r ) BOOST_NOEXCEPT\n    {\n        boost::detail::sp_assert_convertible< Y, T >();\n\n        px = r.px;\n        pn = r.pn;\n\n        return *this;\n    }\n\n#endif\n\n    shared_ptr<T> lock() const BOOST_NOEXCEPT\n    {\n        return shared_ptr<T>( *this, boost::detail::sp_nothrow_tag() );\n    }\n\n    long use_count() const BOOST_NOEXCEPT\n    {\n        return pn.use_count();\n    }\n\n    bool expired() const BOOST_NOEXCEPT\n    {\n        return pn.use_count() == 0;\n    }\n\n    bool _empty() const // extension, not in std::weak_ptr\n    {\n        return pn.empty();\n    }\n\n    void reset() BOOST_NOEXCEPT // never throws in 1.30+\n    {\n        this_type().swap(*this);\n    }\n\n    void swap(this_type & other) BOOST_NOEXCEPT\n    {\n        std::swap(px, other.px);\n        pn.swap(other.pn);\n    }\n\n    template<typename Y>\n    void _internal_aliasing_assign(weak_ptr<Y> const & r, element_type * px2)\n    {\n        px = px2;\n        pn = r.pn;\n    }\n\n    template<class Y> bool owner_before( weak_ptr<Y> const & rhs ) const BOOST_NOEXCEPT\n    {\n        return pn < rhs.pn;\n    }\n\n    template<class Y> bool owner_before( shared_ptr<Y> const & rhs ) const BOOST_NOEXCEPT\n    {\n        return pn < rhs.pn;\n    }\n\n// Tasteless as this may seem, making all members public allows member templates\n// to work in the absence of member template friends. (Matthew Langston)\n\n#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n\nprivate:\n\n    template<class Y> friend class weak_ptr;\n    template<class Y> friend class shared_ptr;\n\n#endif\n\n    element_type * px;            // contained pointer\n    boost::detail::weak_count pn; // reference counter\n\n};  // weak_ptr\n\ntemplate<class T, class U> inline bool operator<(weak_ptr<T> const & a, weak_ptr<U> const & b) BOOST_NOEXCEPT\n{\n    return a.owner_before( b );\n}\n\ntemplate<class T> void swap(weak_ptr<T> & a, weak_ptr<T> & b) BOOST_NOEXCEPT\n{\n    a.swap(b);\n}\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/static_assert.hpp",
    "content": "//  (C) Copyright John Maddock 2000.\n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/static_assert for documentation.\n\n/*\n Revision history:\n   02 August 2000\n      Initial version.\n*/\n\n#ifndef BOOST_STATIC_ASSERT_HPP\n#define BOOST_STATIC_ASSERT_HPP\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__)\n//\n// This is horrible, but it seems to be the only we can shut up the\n// \"anonymous variadic macros were introduced in C99 [-Wvariadic-macros]\"\n// warning that get spewed out otherwise in non-C++11 mode.\n//\n#pragma GCC system_header\n#endif\n\n#ifndef BOOST_NO_CXX11_STATIC_ASSERT\n#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS\n#     define BOOST_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__)\n#  else\n#     define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert( B, Msg )\n#  endif\n#else\n#     define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )\n#endif\n\n#ifdef __BORLANDC__\n//\n// workaround for buggy integral-constant expression support:\n#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS\n#endif\n\n#if defined(__GNUC__) && (__GNUC__ == 3) && ((__GNUC_MINOR__ == 3) || (__GNUC_MINOR__ == 4))\n// gcc 3.3 and 3.4 don't produce good error messages with the default version:\n#  define BOOST_SA_GCC_WORKAROUND\n#endif\n\n//\n// If the compiler issues warnings about old C style casts,\n// then enable this:\n//\n#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4)))\n#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS\n#     define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) ((__VA_ARGS__) == 0 ? false : true)\n#  else\n#     define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true)\n#  endif\n#else\n#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS\n#     define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) (bool)(__VA_ARGS__)\n#  else\n#     define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)\n#  endif\n#endif\n\n#ifndef BOOST_NO_CXX11_STATIC_ASSERT\n#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS\n#     define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)\n#  else\n#     define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)\n#  endif\n#else\n\nnamespace boost{\n\n// HP aCC cannot deal with missing names for template value parameters\ntemplate <bool x> struct STATIC_ASSERTION_FAILURE;\n\ntemplate <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };\n\n// HP aCC cannot deal with missing names for template value parameters\ntemplate<int x> struct static_assert_test{};\n\n}\n\n//\n// Implicit instantiation requires that all member declarations be\n// instantiated, but that the definitions are *not* instantiated.\n//\n// It's not particularly clear how this applies to enum's or typedefs;\n// both are described as declarations [7.1.3] and [7.2] in the standard,\n// however some compilers use \"delayed evaluation\" of one or more of\n// these when implicitly instantiating templates.  We use typedef declarations\n// by default, but try defining BOOST_USE_ENUM_STATIC_ASSERT if the enum\n// version gets better results from your compiler...\n//\n// Implementation:\n// Both of these versions rely on sizeof(incomplete_type) generating an error\n// message containing the name of the incomplete type.  We use\n// \"STATIC_ASSERTION_FAILURE\" as the type name here to generate\n// an eye catching error message.  The result of the sizeof expression is either\n// used as an enum initialiser, or as a template argument depending which version\n// is in use...\n// Note that the argument to the assert is explicitly cast to bool using old-\n// style casts: too many compilers currently have problems with static_cast\n// when used inside integral constant expressions.\n//\n#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS)\n\n#if defined(BOOST_MSVC) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)\n#define BOOST_STATIC_ASSERT( B ) \\\n   typedef ::boost::static_assert_test<\\\n      sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\\\n         BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)\n#elif defined(BOOST_MSVC)\n#define BOOST_STATIC_ASSERT(...) \\\n   typedef ::boost::static_assert_test<\\\n      sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST (__VA_ARGS__) >)>\\\n         BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)\n#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND))  && defined(BOOST_NO_CXX11_VARIADIC_MACROS)\n// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error \n// instead of warning in case of failure\n# define BOOST_STATIC_ASSERT( B ) \\\n    typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \\\n        [ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >::value ]\n#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND))  && !defined(BOOST_NO_CXX11_VARIADIC_MACROS)\n// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error \n// instead of warning in case of failure\n# define BOOST_STATIC_ASSERT(...) \\\n    typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \\\n        [ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >::value ]\n#elif defined(__sgi)\n// special version for SGI MIPSpro compiler\n#define BOOST_STATIC_ASSERT( B ) \\\n   BOOST_STATIC_CONSTANT(bool, \\\n     BOOST_JOIN(boost_static_assert_test_, __LINE__) = ( B )); \\\n   typedef ::boost::static_assert_test<\\\n     sizeof(::boost::STATIC_ASSERTION_FAILURE< \\\n       BOOST_JOIN(boost_static_assert_test_, __LINE__) >)>\\\n         BOOST_JOIN(boost_static_assert_typedef_, __LINE__)\n#elif BOOST_WORKAROUND(__MWERKS__, <= 0x3003)\n// special version for CodeWarrior <= 8.x\n#define BOOST_STATIC_ASSERT( B ) \\\n   BOOST_STATIC_CONSTANT(int, \\\n     BOOST_JOIN(boost_static_assert_test_, __LINE__) = \\\n       sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) )\n#else\n// generic version\n#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS\n#     define BOOST_STATIC_ASSERT( ... ) \\\n         typedef ::boost::static_assert_test<\\\n            sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >)>\\\n               BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED\n#  else\n#     define BOOST_STATIC_ASSERT( B ) \\\n         typedef ::boost::static_assert_test<\\\n            sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\\\n               BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED\n#  endif\n#endif\n\n#else\n// alternative enum based implementation:\n#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS\n#    define BOOST_STATIC_ASSERT( ... ) \\\n         enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \\\n            = sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( __VA_ARGS__ ) >) }\n#  else\n#    define BOOST_STATIC_ASSERT(B) \\\n         enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \\\n            = sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }\n#  endif\n#endif\n#endif // defined(BOOST_NO_CXX11_STATIC_ASSERT)\n\n#endif // BOOST_STATIC_ASSERT_HPP\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/system/api_config.hpp",
    "content": "//  boost/system/api_config.hpp  -------------------------------------------------------//\n\n//  Copyright Beman Dawes 2003, 2006, 2010\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  See http://www.boost.org/libs/system for documentation.\n\n//--------------------------------------------------------------------------------------//\n\n//  Boost.System calls operating system API functions to implement system error category\n//  functions. Usually there is no question as to which API is to be used.\n//\n//  In the case of MinGW or Cygwin/MinGW, however, both POSIX and Windows API's are\n//  available. Chaos ensues if other code thinks one is in use when Boost.System was\n//  actually built with the other. This header centralizes the API choice and prevents\n//  user definition of API macros, thus elminating the possibility of mismatches and the\n//  need to test configurations with little or no practical value.\n//\n\n//--------------------------------------------------------------------------------------//\n\n#ifndef BOOST_SYSTEM_API_CONFIG_HPP                  \n#define BOOST_SYSTEM_API_CONFIG_HPP\n\n# if defined(BOOST_POSIX_API) || defined(BOOST_WINDOWS_API)\n#   error user defined BOOST_POSIX_API or BOOST_WINDOWS_API not supported\n# endif\n\n//  BOOST_POSIX_API or BOOST_WINDOWS_API specify which API to use\n//    Cygwin/MinGW does not predefine _WIN32.\n//    Standalone MinGW and all other known Windows compilers do predefine _WIN32\n//    Compilers that predefine _WIN32 or __MINGW32__ do so for Windows 64-bit builds too.\n\n# if defined(_WIN32) || defined(__CYGWIN__) // Windows default, including MinGW and Cygwin\n#   define BOOST_WINDOWS_API\n# else\n#   define BOOST_POSIX_API \n# endif\n                                     \n#endif  // BOOST_SYSTEM_API_CONFIG_HPP \n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/system/config.hpp",
    "content": "//  boost/system/config.hpp  -----------------------------------------------------------//\n\n//  Copyright Beman Dawes 2003, 2006\n\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/system for documentation.\n\n#ifndef BOOST_SYSTEM_CONFIG_HPP                  \n#define BOOST_SYSTEM_CONFIG_HPP\n\n#include <boost/config.hpp>\n#include <boost/predef/platform.h>\n#include <boost/system/api_config.hpp>  // for BOOST_POSIX_API or BOOST_WINDOWS_API\n\n// This header implements separate compilation features as described in\n// http://www.boost.org/more/separate_compilation.html\n\n//  normalize macros  ------------------------------------------------------------------//\n\n#if !defined(BOOST_SYSTEM_DYN_LINK) && !defined(BOOST_SYSTEM_STATIC_LINK) \\\n  && !defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_ALL_STATIC_LINK)\n# define BOOST_SYSTEM_STATIC_LINK\n#endif\n\n#if defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_SYSTEM_DYN_LINK)\n# define BOOST_SYSTEM_DYN_LINK \n#elif defined(BOOST_ALL_STATIC_LINK) && !defined(BOOST_SYSTEM_STATIC_LINK)\n# define BOOST_SYSTEM_STATIC_LINK \n#endif\n\n#if defined(BOOST_SYSTEM_DYN_LINK) && defined(BOOST_SYSTEM_STATIC_LINK)\n# error Must not define both BOOST_SYSTEM_DYN_LINK and BOOST_SYSTEM_STATIC_LINK\n#endif\n\n//  enable dynamic or static linking as requested --------------------------------------//\n\n#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SYSTEM_DYN_LINK)\n# if defined(BOOST_SYSTEM_SOURCE)\n#   define BOOST_SYSTEM_DECL BOOST_SYMBOL_EXPORT\n# else \n#   define BOOST_SYSTEM_DECL BOOST_SYMBOL_IMPORT\n# endif\n#else\n# define BOOST_SYSTEM_DECL\n#endif\n\n//  enable automatic library variant selection  ----------------------------------------// \n\n#if !defined(BOOST_SYSTEM_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SYSTEM_NO_LIB)\n//\n// Set the name of our library, this will get undef'ed by auto_link.hpp\n// once it's done with it:\n//\n#define BOOST_LIB_NAME boost_system\n//\n// If we're importing code from a dll, then tell auto_link.hpp about it:\n//\n#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SYSTEM_DYN_LINK)\n#  define BOOST_DYN_LINK\n#endif\n//\n// And include the header that does the work:\n//\n#include <boost/config/auto_link.hpp>\n#endif  // auto-linking disabled\n\n#endif // BOOST_SYSTEM_CONFIG_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/system/cygwin_error.hpp",
    "content": "//  boost/system/cygwin_error.hpp  -------------------------------------------//\n\n//  Copyright Beman Dawes 2007\n\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/system\n\n#ifndef BOOST_CYGWIN_ERROR_HPP\n#define BOOST_CYGWIN_ERROR_HPP\n\n//  This header is effectively empty for compiles on operating systems where\n//  it is not applicable.\n\n# ifdef __CYGWIN__\n\n#include <boost/system/error_code.hpp>\n\nnamespace boost\n{\n  namespace system\n  {\n    //  To construct an error_code after a API error:\n    //\n    //      error_code( errno, system_category() )\n\n    //  User code should use the portable \"posix\" enums for POSIX errors; this\n    //  allows such code to be portable to non-POSIX systems. For the non-POSIX\n    //  errno values that POSIX-based systems typically provide in addition to \n    //  POSIX values, use the system specific enums below.\n\n   namespace cygwin_error\n    {\n      enum cygwin_errno\n      {\n        no_net = ENONET,\n        no_package = ENOPKG,\n        no_share = ENOSHARE\n      };\n    }  // namespace cygwin_error\n\n    template<> struct is_error_code_enum<cygwin_error::cygwin_errno>\n      { static const bool value = true; };\n\n    namespace cygwin_error\n    {\n      inline error_code make_error_code( cygwin_errno e )\n        { return error_code( e, system_category() ); }\n    }\n  }\n}\n\n#endif  // __CYGWIN__\n\n#endif  // BOOST_CYGWIN_ERROR_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/system/detail/error_code.ipp",
    "content": "//  error_code support implementation file  ----------------------------------//\n\n//  Copyright Beman Dawes 2002, 2006\n//  Copyright (c) Microsoft Corporation 2014\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/system\n\n//----------------------------------------------------------------------------//\n\n#include <boost/config/warning_disable.hpp>\n\n#include <boost/system/config.hpp>\n#include <boost/system/error_code.hpp>\n#include <boost/cerrno.hpp>\n#include <vector>\n#include <cstdlib>\n#include <cassert>\n\n#include <cstring> // for strerror/strerror_r\n\n# if defined( BOOST_WINDOWS_API )\n#   include <windows.h>\n#   if !BOOST_PLAT_WINDOWS_RUNTIME\n#     include <boost/system/detail/local_free_on_destruction.hpp>\n#   endif\n#   ifndef ERROR_INCORRECT_SIZE\n#     define ERROR_INCORRECT_SIZE ERROR_BAD_ARGUMENTS\n#   endif\n# endif\n\n//----------------------------------------------------------------------------//\nnamespace boost\n{\n    namespace system\n    {\n\nnamespace\n{\n\n  //  standard error categories  ---------------------------------------------//\n\n  class generic_error_category : public error_category\n  {\n  public:\n    generic_error_category(){}\n    const char *   name() const BOOST_SYSTEM_NOEXCEPT;\n    std::string    message( int ev ) const;\n  };\n\n  class system_error_category : public error_category\n  {\n  public:\n    system_error_category(){}\n    const char *        name() const BOOST_SYSTEM_NOEXCEPT;\n    std::string         message( int ev ) const;\n    error_condition     default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT;\n  };\n\n  //  generic_error_category implementation  ---------------------------------//\n\n  const char * generic_error_category::name() const BOOST_SYSTEM_NOEXCEPT\n  {\n    return \"generic\";\n  }\n\n  std::string generic_error_category::message( int ev ) const\n  {\n    using namespace boost::system::errc;\n#if defined(__PGI)\n      using boost::system::errc::invalid_argument;\n#endif\n\n    static std::string unknown_err( \"Unknown error\" );\n  // strerror_r is preferred because it is always thread safe,\n  // however, we fallback to strerror in certain cases because:\n  //   -- Windows doesn't provide strerror_r.\n  //   -- HP and Sun do provide strerror_r on newer systems, but there is\n  //      no way to tell if is available at runtime and in any case their\n  //      versions of strerror are thread safe anyhow.\n  //   -- Linux only sometimes provides strerror_r.\n  //   -- Tru64 provides strerror_r only when compiled -pthread.\n  //   -- VMS doesn't provide strerror_r, but on this platform, strerror is\n  //      thread safe.\n  # if defined(BOOST_WINDOWS_API) || defined(__hpux) || defined(__sun)\\\n     || (defined(__linux) && (!defined(__USE_XOPEN2K) || defined(BOOST_SYSTEM_USE_STRERROR)))\\\n     || (defined(__osf__) && !defined(_REENTRANT))\\\n     || (defined(__INTEGRITY))\\\n     || (defined(__vms))\\\n     || (defined(__QNXNTO__))\n      const char * c_str = std::strerror( ev );\n      return  c_str\n        ? std::string( c_str )\n        : unknown_err;\n  # else  // use strerror_r\n      char buf[64];\n      char * bp = buf;\n      std::size_t sz = sizeof(buf);\n  #  if defined(__CYGWIN__) || defined(__USE_GNU)\n      // Oddball version of strerror_r\n      const char * c_str = strerror_r( ev, bp, sz );\n      return  c_str\n        ? std::string( c_str )\n        : unknown_err;\n  #  else\n      // POSIX version of strerror_r\n      int result;\n      for (;;)\n      {\n        // strerror_r returns 0 on success, otherwise ERANGE if buffer too small,\n        // invalid_argument if ev not a valid error number\n  #  if defined (__sgi)\n        const char * c_str = strerror( ev );\n        result = 0;\n      return  c_str\n        ? std::string( c_str )\n        : unknown_err;\n  #  else\n        result = strerror_r( ev, bp, sz );\n  #  endif\n        if (result == 0 )\n          break;\n        else\n        {\n  #  if defined(__linux)\n          // Linux strerror_r returns -1 on error, with error number in errno\n          result = errno;\n  #  endif\n          if ( result !=  ERANGE ) break;\n          if ( sz > sizeof(buf) ) std::free( bp );\n          sz *= 2;\n          if ( (bp = static_cast<char*>(std::malloc( sz ))) == 0 )\n            return std::string( \"ENOMEM\" );\n        }\n      }\n      std::string msg;\n#   ifndef BOOST_NO_EXCEPTIONS\n      try\n#   endif\n      {\n        msg = ( ( result == invalid_argument ) ? \"Unknown error\" : bp );\n      }\n\n#   ifndef BOOST_NO_EXCEPTIONS\n      // See ticket #2098\n      catch(...)\n      {\n        // just eat the exception\n      }\n#   endif\n\n      if ( sz > sizeof(buf) ) std::free( bp );\n      sz = 0;\n      return msg;\n  #  endif   // else POSIX version of strerror_r\n  # endif  // else use strerror_r\n  }\n  //  system_error_category implementation  --------------------------------//\n\n  const char * system_error_category::name() const BOOST_SYSTEM_NOEXCEPT\n  {\n    return \"system\";\n  }\n\n  error_condition system_error_category::default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT\n  {\n    using namespace boost::system::errc;\n#if defined(__PGI)\n      using boost::system::errc::invalid_argument;\n#endif\n\n# if defined(BOOST_WINDOWS_API)\n#   if defined(WINAPI_FAMILY) && ((WINAPI_FAMILY & WINAPI_PARTITION_APP) != 0)\n    // When using the Windows Runtime, most system errors are reported as HRESULTs.\n    // We want to map the common Win32 errors to their equivalent error condition,\n    // whether or not they are reported via an HRESULT.\n    if ( ev < 0 ) // Check for failed HRESULTs only.\n      if ( HRESULT_FACILITY( ev ) == FACILITY_WIN32 )\n        ev = HRESULT_CODE( ev );\n#   endif\n# endif\n\n    switch ( ev )\n    {\n    case 0: return make_error_condition( success );\n# if defined(BOOST_POSIX_API)\n    // POSIX-like O/S -> posix_errno decode table  ---------------------------//\n    case E2BIG: return make_error_condition( argument_list_too_long );\n    case EACCES: return make_error_condition( permission_denied );\n    case EADDRINUSE: return make_error_condition( address_in_use );\n    case EADDRNOTAVAIL: return make_error_condition( address_not_available );\n    case EAFNOSUPPORT: return make_error_condition( address_family_not_supported );\n    case EAGAIN: return make_error_condition( resource_unavailable_try_again );\n#   if EALREADY != EBUSY  //  EALREADY and EBUSY are the same on QNX Neutrino\n    case EALREADY: return make_error_condition( connection_already_in_progress );\n#   endif\n    case EBADF: return make_error_condition( bad_file_descriptor );\n    case EBADMSG: return make_error_condition( bad_message );\n    case EBUSY: return make_error_condition( device_or_resource_busy );\n    case ECANCELED: return make_error_condition( operation_canceled );\n    case ECHILD: return make_error_condition( no_child_process );\n    case ECONNABORTED: return make_error_condition( connection_aborted );\n    case ECONNREFUSED: return make_error_condition( connection_refused );\n    case ECONNRESET: return make_error_condition( connection_reset );\n    case EDEADLK: return make_error_condition( resource_deadlock_would_occur );\n    case EDESTADDRREQ: return make_error_condition( destination_address_required );\n    case EDOM: return make_error_condition( argument_out_of_domain );\n    case EEXIST: return make_error_condition( file_exists );\n    case EFAULT: return make_error_condition( bad_address );\n    case EFBIG: return make_error_condition( file_too_large );\n    case EHOSTUNREACH: return make_error_condition( host_unreachable );\n    case EIDRM: return make_error_condition( identifier_removed );\n    case EILSEQ: return make_error_condition( illegal_byte_sequence );\n    case EINPROGRESS: return make_error_condition( operation_in_progress );\n    case EINTR: return make_error_condition( interrupted );\n    case EINVAL: return make_error_condition( invalid_argument );\n    case EIO: return make_error_condition( io_error );\n    case EISCONN: return make_error_condition( already_connected );\n    case EISDIR: return make_error_condition( is_a_directory );\n    case ELOOP: return make_error_condition( too_many_symbolic_link_levels );\n    case EMFILE: return make_error_condition( too_many_files_open );\n    case EMLINK: return make_error_condition( too_many_links );\n    case EMSGSIZE: return make_error_condition( message_size );\n    case ENAMETOOLONG: return make_error_condition( filename_too_long );\n    case ENETDOWN: return make_error_condition( network_down );\n    case ENETRESET: return make_error_condition( network_reset );\n    case ENETUNREACH: return make_error_condition( network_unreachable );\n    case ENFILE: return make_error_condition( too_many_files_open_in_system );\n    case ENOBUFS: return make_error_condition( no_buffer_space );\n    case ENODATA: return make_error_condition( no_message_available );\n    case ENODEV: return make_error_condition( no_such_device );\n    case ENOENT: return make_error_condition( no_such_file_or_directory );\n    case ENOEXEC: return make_error_condition( executable_format_error );\n    case ENOLCK: return make_error_condition( no_lock_available );\n    case ENOLINK: return make_error_condition( no_link );\n    case ENOMEM: return make_error_condition( not_enough_memory );\n    case ENOMSG: return make_error_condition( no_message );\n    case ENOPROTOOPT: return make_error_condition( no_protocol_option );\n    case ENOSPC: return make_error_condition( no_space_on_device );\n    case ENOSR: return make_error_condition( no_stream_resources );\n    case ENOSTR: return make_error_condition( not_a_stream );\n    case ENOSYS: return make_error_condition( function_not_supported );\n    case ENOTCONN: return make_error_condition( not_connected );\n    case ENOTDIR: return make_error_condition( not_a_directory );\n  # if ENOTEMPTY != EEXIST // AIX treats ENOTEMPTY and EEXIST as the same value\n    case ENOTEMPTY: return make_error_condition( directory_not_empty );\n  # endif // ENOTEMPTY != EEXIST\n  # if ENOTRECOVERABLE != ECONNRESET // the same on some Broadcom chips\n    case ENOTRECOVERABLE: return make_error_condition( state_not_recoverable );\n  # endif // ENOTRECOVERABLE != ECONNRESET\n    case ENOTSOCK: return make_error_condition( not_a_socket );\n    case ENOTSUP: return make_error_condition( not_supported );\n    case ENOTTY: return make_error_condition( inappropriate_io_control_operation );\n    case ENXIO: return make_error_condition( no_such_device_or_address );\n  # if EOPNOTSUPP != ENOTSUP\n    case EOPNOTSUPP: return make_error_condition( operation_not_supported );\n  # endif // EOPNOTSUPP != ENOTSUP\n    case EOVERFLOW: return make_error_condition( value_too_large );\n  # if EOWNERDEAD != ECONNABORTED // the same on some Broadcom chips\n    case EOWNERDEAD: return make_error_condition( owner_dead );\n  # endif // EOWNERDEAD != ECONNABORTED\n    case EPERM: return make_error_condition( operation_not_permitted );\n    case EPIPE: return make_error_condition( broken_pipe );\n    case EPROTO: return make_error_condition( protocol_error );\n    case EPROTONOSUPPORT: return make_error_condition( protocol_not_supported );\n    case EPROTOTYPE: return make_error_condition( wrong_protocol_type );\n    case ERANGE: return make_error_condition( result_out_of_range );\n    case EROFS: return make_error_condition( read_only_file_system );\n    case ESPIPE: return make_error_condition( invalid_seek );\n    case ESRCH: return make_error_condition( no_such_process );\n    case ETIME: return make_error_condition( stream_timeout );\n    case ETIMEDOUT: return make_error_condition( timed_out );\n    case ETXTBSY: return make_error_condition( text_file_busy );\n  # if EAGAIN != EWOULDBLOCK\n    case EWOULDBLOCK: return make_error_condition( operation_would_block );\n  # endif // EAGAIN != EWOULDBLOCK\n    case EXDEV: return make_error_condition( cross_device_link );\n  #else\n    // Windows system -> posix_errno decode table  ---------------------------//\n    // see WinError.h comments for descriptions of errors\n    case ERROR_ACCESS_DENIED: return make_error_condition( permission_denied );\n    case ERROR_ALREADY_EXISTS: return make_error_condition( file_exists );\n    case ERROR_BAD_UNIT: return make_error_condition( no_such_device );\n    case ERROR_BUFFER_OVERFLOW: return make_error_condition( filename_too_long );\n    case ERROR_BUSY: return make_error_condition( device_or_resource_busy );\n    case ERROR_BUSY_DRIVE: return make_error_condition( device_or_resource_busy );\n    case ERROR_CANNOT_MAKE: return make_error_condition( permission_denied );\n    case ERROR_CANTOPEN: return make_error_condition( io_error );\n    case ERROR_CANTREAD: return make_error_condition( io_error );\n    case ERROR_CANTWRITE: return make_error_condition( io_error );\n    case ERROR_CURRENT_DIRECTORY: return make_error_condition( permission_denied );\n    case ERROR_DEV_NOT_EXIST: return make_error_condition( no_such_device );\n    case ERROR_DEVICE_IN_USE: return make_error_condition( device_or_resource_busy );\n    case ERROR_DIR_NOT_EMPTY: return make_error_condition( directory_not_empty );\n    case ERROR_DIRECTORY: return make_error_condition( invalid_argument ); // WinError.h: \"The directory name is invalid\"\n    case ERROR_DISK_FULL: return make_error_condition( no_space_on_device );\n    case ERROR_FILE_EXISTS: return make_error_condition( file_exists );\n    case ERROR_FILE_NOT_FOUND: return make_error_condition( no_such_file_or_directory );\n    case ERROR_HANDLE_DISK_FULL: return make_error_condition( no_space_on_device );\n    case ERROR_INVALID_ACCESS: return make_error_condition( permission_denied );\n    case ERROR_INVALID_DRIVE: return make_error_condition( no_such_device );\n    case ERROR_INVALID_FUNCTION: return make_error_condition( function_not_supported );\n    case ERROR_INVALID_HANDLE: return make_error_condition( invalid_argument );\n    case ERROR_INVALID_NAME: return make_error_condition( invalid_argument );\n    case ERROR_LOCK_VIOLATION: return make_error_condition( no_lock_available );\n    case ERROR_LOCKED: return make_error_condition( no_lock_available );\n    case ERROR_NEGATIVE_SEEK: return make_error_condition( invalid_argument );\n    case ERROR_NOACCESS: return make_error_condition( permission_denied );\n    case ERROR_NOT_ENOUGH_MEMORY: return make_error_condition( not_enough_memory );\n    case ERROR_NOT_READY: return make_error_condition( resource_unavailable_try_again );\n    case ERROR_NOT_SAME_DEVICE: return make_error_condition( cross_device_link );\n    case ERROR_OPEN_FAILED: return make_error_condition( io_error );\n    case ERROR_OPEN_FILES: return make_error_condition( device_or_resource_busy );\n    case ERROR_OPERATION_ABORTED: return make_error_condition( operation_canceled );\n    case ERROR_OUTOFMEMORY: return make_error_condition( not_enough_memory );\n    case ERROR_PATH_NOT_FOUND: return make_error_condition( no_such_file_or_directory );\n    case ERROR_READ_FAULT: return make_error_condition( io_error );\n    case ERROR_RETRY: return make_error_condition( resource_unavailable_try_again );\n    case ERROR_SEEK: return make_error_condition( io_error );\n    case ERROR_SHARING_VIOLATION: return make_error_condition( permission_denied );\n    case ERROR_TOO_MANY_OPEN_FILES: return make_error_condition( too_many_files_open );\n    case ERROR_WRITE_FAULT: return make_error_condition( io_error );\n    case ERROR_WRITE_PROTECT: return make_error_condition( permission_denied );\n    case WSAEACCES: return make_error_condition( permission_denied );\n    case WSAEADDRINUSE: return make_error_condition( address_in_use );\n    case WSAEADDRNOTAVAIL: return make_error_condition( address_not_available );\n    case WSAEAFNOSUPPORT: return make_error_condition( address_family_not_supported );\n    case WSAEALREADY: return make_error_condition( connection_already_in_progress );\n    case WSAEBADF: return make_error_condition( bad_file_descriptor );\n    case WSAECONNABORTED: return make_error_condition( connection_aborted );\n    case WSAECONNREFUSED: return make_error_condition( connection_refused );\n    case WSAECONNRESET: return make_error_condition( connection_reset );\n    case WSAEDESTADDRREQ: return make_error_condition( destination_address_required );\n    case WSAEFAULT: return make_error_condition( bad_address );\n    case WSAEHOSTUNREACH: return make_error_condition( host_unreachable );\n    case WSAEINPROGRESS: return make_error_condition( operation_in_progress );\n    case WSAEINTR: return make_error_condition( interrupted );\n    case WSAEINVAL: return make_error_condition( invalid_argument );\n    case WSAEISCONN: return make_error_condition( already_connected );\n    case WSAEMFILE: return make_error_condition( too_many_files_open );\n    case WSAEMSGSIZE: return make_error_condition( message_size );\n    case WSAENAMETOOLONG: return make_error_condition( filename_too_long );\n    case WSAENETDOWN: return make_error_condition( network_down );\n    case WSAENETRESET: return make_error_condition( network_reset );\n    case WSAENETUNREACH: return make_error_condition( network_unreachable );\n    case WSAENOBUFS: return make_error_condition( no_buffer_space );\n    case WSAENOPROTOOPT: return make_error_condition( no_protocol_option );\n    case WSAENOTCONN: return make_error_condition( not_connected );\n    case WSAENOTSOCK: return make_error_condition( not_a_socket );\n    case WSAEOPNOTSUPP: return make_error_condition( operation_not_supported );\n    case WSAEPROTONOSUPPORT: return make_error_condition( protocol_not_supported );\n    case WSAEPROTOTYPE: return make_error_condition( wrong_protocol_type );\n    case WSAETIMEDOUT: return make_error_condition( timed_out );\n    case WSAEWOULDBLOCK: return make_error_condition( operation_would_block );\n  #endif\n    default: return error_condition( ev, system_category() );\n    }\n  }\n\n# if !defined( BOOST_WINDOWS_API )\n\n  std::string system_error_category::message( int ev ) const\n  {\n    return generic_category().message( ev );\n  }\n# else\n\n  std::string system_error_category::message( int ev ) const\n  {\n#if defined(UNDER_CE) || BOOST_PLAT_WINDOWS_RUNTIME || defined(BOOST_NO_ANSI_APIS)\n    std::wstring buf(128, wchar_t());\n    for (;;)\n    {\n        DWORD retval = ::FormatMessageW(\n            FORMAT_MESSAGE_FROM_SYSTEM |\n            FORMAT_MESSAGE_IGNORE_INSERTS,\n            NULL,\n            ev,\n            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\n            &buf[0],\n            buf.size(),\n            NULL\n        );\n        \n        if (retval > 0)\n        {\n            buf.resize(retval);\n            break;\n        }\n        else if ( ::GetLastError() != ERROR_INSUFFICIENT_BUFFER )\n        {\n            return std::string(\"Unknown error\");\n        }\n        else\n        {\n            buf.resize(buf.size() + buf.size() / 2);\n        }\n    }\n    \n    int num_chars = (buf.size() + 1) * 2;\n    LPSTR narrow_buffer = (LPSTR)_alloca( num_chars );\n    if (::WideCharToMultiByte(CP_ACP, 0, buf.c_str(), -1, narrow_buffer, num_chars, NULL, NULL) == 0)\n    {\n        return std::string(\"Unknown error\");\n    }\n\n    std::string str( narrow_buffer );\n#else\n    LPVOID lpMsgBuf = 0;\n    DWORD retval = ::FormatMessageA(\n        FORMAT_MESSAGE_ALLOCATE_BUFFER |\n        FORMAT_MESSAGE_FROM_SYSTEM |\n        FORMAT_MESSAGE_IGNORE_INSERTS,\n        NULL,\n        ev,\n        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\n        (LPSTR) &lpMsgBuf,\n        0,\n        NULL\n    );\n    detail::local_free_on_destruction lfod(lpMsgBuf);\n    if (retval == 0)\n        return std::string(\"Unknown error\");\n\n    std::string str( static_cast<LPCSTR>(lpMsgBuf) );\n# endif\n    while ( str.size()\n      && (str[str.size()-1] == '\\n' || str[str.size()-1] == '\\r') )\n        str.erase( str.size()-1 );\n    if ( str.size() && str[str.size()-1] == '.' )\n      { str.erase( str.size()-1 ); }\n    return str;\n  }\n# endif\n\n} // unnamed namespace\n\n\n# ifndef BOOST_SYSTEM_NO_DEPRECATED\n    BOOST_SYSTEM_DECL error_code throws; // \"throw on error\" special error_code;\n                                         //  note that it doesn't matter if this\n                                         //  isn't initialized before use since\n                                         //  the only use is to take its\n                                         //  address for comparison purposes\n# endif\n\n# ifdef BOOST_ERROR_CODE_HEADER_ONLY\n#   define BOOST_SYSTEM_LINKAGE inline\n# else\n#   define BOOST_SYSTEM_LINKAGE BOOST_SYSTEM_DECL\n# endif\n\n    BOOST_SYSTEM_LINKAGE const error_category & system_category() BOOST_SYSTEM_NOEXCEPT\n    {\n      static const system_error_category  system_category_const;\n      return system_category_const;\n    }\n\n    BOOST_SYSTEM_LINKAGE const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT\n    {\n      static const generic_error_category generic_category_const;\n      return generic_category_const;\n    }\n\n  } // namespace system\n} // namespace boost\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/system/detail/local_free_on_destruction.hpp",
    "content": "//  local_free_on_exit.hpp  ------------------------------------------------------------//\n\n//  Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)\n//  Copyright (c) 2010 Beman Dawes\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n//  This is derived from boost/asio/detail/local_free_on_block_exit.hpp to avoid\n//  a dependency on asio. Thanks to Chris Kohlhoff for pointing it out.\n\n#ifndef BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP\n#define BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP\n\nnamespace boost {\nnamespace system {\nnamespace detail {\n\nclass local_free_on_destruction\n{\npublic:\n  explicit local_free_on_destruction(void* p)\n    : p_(p) {}\n\n  ~local_free_on_destruction()\n  {\n    ::LocalFree(p_);\n  }\n\nprivate:\n  void* p_;\n  local_free_on_destruction(const local_free_on_destruction&);  // = deleted\n  local_free_on_destruction& operator=(const local_free_on_destruction&);  // = deleted\n};\n\n} // namespace detail\n} // namespace system\n} // namespace boost\n\n#endif  // BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/system/error_code.hpp",
    "content": "//  boost/system/error_code.hpp  ---------------------------------------------//\n\n//  Copyright Beman Dawes 2006, 2007\n//  Copyright Christoper Kohlhoff 2007\n\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/system\n\n#ifndef BOOST_ERROR_CODE_HPP\n#define BOOST_ERROR_CODE_HPP\n\n#include <boost/system/config.hpp>\n#include <boost/cstdint.hpp>\n#include <boost/assert.hpp>\n#include <boost/noncopyable.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <ostream>\n#include <string>\n#include <stdexcept>\n#include <functional>\n\n// TODO: undef these macros if not already defined\n#include <boost/cerrno.hpp>\n\n#if !defined(BOOST_POSIX_API) && !defined(BOOST_WINDOWS_API)\n#  error BOOST_POSIX_API or BOOST_WINDOWS_API must be defined\n#endif\n\n#include <boost/config/abi_prefix.hpp> // must be the last #include\n\n#ifndef BOOST_SYSTEM_NOEXCEPT\n#define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT\n#endif\n\nnamespace boost\n{\n  namespace system\n  {\n\n    class error_code;\n    class error_condition;\n\n    //  \"Concept\" helpers  ---------------------------------------------------//\n\n    template< class T >\n    struct is_error_code_enum { static const bool value = false; };\n\n    template< class T >\n    struct is_error_condition_enum { static const bool value = false; };\n\n    //  generic error_conditions  --------------------------------------------//\n\n    namespace errc\n    {\n      enum errc_t\n      {\n        success = 0,\n        address_family_not_supported = EAFNOSUPPORT,\n        address_in_use = EADDRINUSE,\n        address_not_available = EADDRNOTAVAIL,\n        already_connected = EISCONN,\n        argument_list_too_long = E2BIG,\n        argument_out_of_domain = EDOM,\n        bad_address = EFAULT,\n        bad_file_descriptor = EBADF,\n        bad_message = EBADMSG,\n        broken_pipe = EPIPE,\n        connection_aborted = ECONNABORTED,\n        connection_already_in_progress = EALREADY,\n        connection_refused = ECONNREFUSED,\n        connection_reset = ECONNRESET,\n        cross_device_link = EXDEV,\n        destination_address_required = EDESTADDRREQ,\n        device_or_resource_busy = EBUSY,\n        directory_not_empty = ENOTEMPTY,\n        executable_format_error = ENOEXEC,\n        file_exists = EEXIST,\n        file_too_large = EFBIG,\n        filename_too_long = ENAMETOOLONG,\n        function_not_supported = ENOSYS,\n        host_unreachable = EHOSTUNREACH,\n        identifier_removed = EIDRM,\n        illegal_byte_sequence = EILSEQ,\n        inappropriate_io_control_operation = ENOTTY,\n        interrupted = EINTR,\n        invalid_argument = EINVAL,\n        invalid_seek = ESPIPE,\n        io_error = EIO,\n        is_a_directory = EISDIR,\n        message_size = EMSGSIZE,\n        network_down = ENETDOWN,\n        network_reset = ENETRESET,\n        network_unreachable = ENETUNREACH,\n        no_buffer_space = ENOBUFS,\n        no_child_process = ECHILD,\n        no_link = ENOLINK,\n        no_lock_available = ENOLCK,\n        no_message_available = ENODATA,\n        no_message = ENOMSG,\n        no_protocol_option = ENOPROTOOPT,\n        no_space_on_device = ENOSPC,\n        no_stream_resources = ENOSR,\n        no_such_device_or_address = ENXIO,\n        no_such_device = ENODEV,\n        no_such_file_or_directory = ENOENT,\n        no_such_process = ESRCH,\n        not_a_directory = ENOTDIR,\n        not_a_socket = ENOTSOCK,\n        not_a_stream = ENOSTR,\n        not_connected = ENOTCONN,\n        not_enough_memory = ENOMEM,\n        not_supported = ENOTSUP,\n        operation_canceled = ECANCELED,\n        operation_in_progress = EINPROGRESS,\n        operation_not_permitted = EPERM,\n        operation_not_supported = EOPNOTSUPP,\n        operation_would_block = EWOULDBLOCK,\n        owner_dead = EOWNERDEAD,\n        permission_denied = EACCES,\n        protocol_error = EPROTO,\n        protocol_not_supported = EPROTONOSUPPORT,\n        read_only_file_system = EROFS,\n        resource_deadlock_would_occur = EDEADLK,\n        resource_unavailable_try_again = EAGAIN,\n        result_out_of_range = ERANGE,\n        state_not_recoverable = ENOTRECOVERABLE,\n        stream_timeout = ETIME,\n        text_file_busy = ETXTBSY,\n        timed_out = ETIMEDOUT,\n        too_many_files_open_in_system = ENFILE,\n        too_many_files_open = EMFILE,\n        too_many_links = EMLINK,\n        too_many_symbolic_link_levels = ELOOP,\n        value_too_large = EOVERFLOW,\n        wrong_protocol_type = EPROTOTYPE\n      };\n\n    } // namespace errc\n\n# ifndef BOOST_SYSTEM_NO_DEPRECATED\n    namespace posix = errc;\n    namespace posix_error = errc;\n# endif\n\n    template<> struct is_error_condition_enum<errc::errc_t>\n      { static const bool value = true; };\n\n\n    //  ----------------------------------------------------------------------//\n\n    //  Operating system specific interfaces  --------------------------------//\n\n\n    //  The interface is divided into general and system-specific portions to\n    //  meet these requirements:\n    //\n    //  * Code calling an operating system API can create an error_code with\n    //    a single category (system_category), even for POSIX-like operating\n    //    systems that return some POSIX errno values and some native errno\n    //    values. This code should not have to pay the cost of distinguishing\n    //    between categories, since it is not yet known if that is needed.\n    //\n    //  * Users wishing to write system-specific code should be given enums for\n    //    at least the common error cases.\n    //\n    //  * System specific code should fail at compile time if moved to another\n    //    operating system.\n\n    //  The system specific portions of the interface are located in headers\n    //  with names reflecting the operating system. For example,\n    //\n    //       <boost/system/cygwin_error.hpp>\n    //       <boost/system/linux_error.hpp>\n    //       <boost/system/windows_error.hpp>\n    //\n    //  These headers are effectively empty for compiles on operating systems\n    //  where they are not applicable.\n\n    //  ----------------------------------------------------------------------//\n\n    //  class error_category  ------------------------------------------------//\n\n    class error_category : public noncopyable\n    {\n    public:\n      virtual ~error_category(){}\n\n      virtual const char *     name() const BOOST_SYSTEM_NOEXCEPT = 0;\n      virtual std::string      message( int ev ) const = 0;\n      inline virtual error_condition  default_error_condition( int ev ) const  BOOST_SYSTEM_NOEXCEPT;\n      inline virtual bool             equivalent( int code,\n                                           const error_condition & condition ) const  BOOST_SYSTEM_NOEXCEPT;\n      inline virtual bool             equivalent( const error_code & code,\n                                           int condition ) const  BOOST_SYSTEM_NOEXCEPT;\n\n      bool operator==(const error_category & rhs) const BOOST_SYSTEM_NOEXCEPT { return this == &rhs; }\n      bool operator!=(const error_category & rhs) const BOOST_SYSTEM_NOEXCEPT { return this != &rhs; }\n      bool operator<( const error_category & rhs ) const BOOST_SYSTEM_NOEXCEPT\n      {\n        return std::less<const error_category*>()( this, &rhs );\n      }\n    };\n\n    //  predefined error categories  -----------------------------------------//\n\n# ifdef BOOST_ERROR_CODE_HEADER_ONLY\n    inline const error_category &  system_category() BOOST_SYSTEM_NOEXCEPT;\n    inline const error_category &  generic_category() BOOST_SYSTEM_NOEXCEPT;\n#else\n    BOOST_SYSTEM_DECL const error_category &  system_category() BOOST_SYSTEM_NOEXCEPT;\n    BOOST_SYSTEM_DECL const error_category &  generic_category() BOOST_SYSTEM_NOEXCEPT;\n#endif\n    //  deprecated synonyms --------------------------------------------------//\n\n# ifndef BOOST_SYSTEM_NO_DEPRECATED\n    inline const error_category &  get_system_category() { return system_category(); }\n    inline const error_category &  get_generic_category() { return generic_category(); }\n    inline const error_category &  get_posix_category() { return generic_category(); }\n    static const error_category &  posix_category = generic_category();\n    static const error_category &  errno_ecat     = generic_category();\n    static const error_category &  native_ecat    = system_category();\n# endif\n\n    //  class error_condition  -----------------------------------------------//\n\n    //  error_conditions are portable, error_codes are system or library specific\n\n    class error_condition\n    {\n    public:\n\n      // constructors:\n      error_condition() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&generic_category()) {}\n      error_condition( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT : m_val(val), m_cat(&cat) {}\n\n      template <class ErrorConditionEnum>\n        error_condition(ErrorConditionEnum e,\n          typename boost::enable_if<is_error_condition_enum<ErrorConditionEnum> >::type* = 0) BOOST_SYSTEM_NOEXCEPT\n      {\n        *this = make_error_condition(e);\n      }\n\n      // modifiers:\n\n      void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT\n      {\n        m_val = val;\n        m_cat = &cat;\n      }\n\n      template<typename ErrorConditionEnum>\n        typename boost::enable_if<is_error_condition_enum<ErrorConditionEnum>, error_condition>::type &\n          operator=( ErrorConditionEnum val ) BOOST_SYSTEM_NOEXCEPT\n      {\n        *this = make_error_condition(val);\n        return *this;\n      }\n\n      void clear() BOOST_SYSTEM_NOEXCEPT\n      {\n        m_val = 0;\n        m_cat = &generic_category();\n      }\n\n      // observers:\n      int                     value() const BOOST_SYSTEM_NOEXCEPT    { return m_val; }\n      const error_category &  category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }\n      std::string             message() const  { return m_cat->message(value()); }\n\n      typedef void (*unspecified_bool_type)();\n      static void unspecified_bool_true() {}\n\n      operator unspecified_bool_type() const BOOST_SYSTEM_NOEXCEPT  // true if error\n      {\n        return m_val == 0 ? 0 : unspecified_bool_true;\n      }\n\n      bool operator!() const BOOST_SYSTEM_NOEXCEPT  // true if no error\n      {\n        return m_val == 0;\n      }\n\n      // relationals:\n      //  the more symmetrical non-member syntax allows enum\n      //  conversions work for both rhs and lhs.\n      inline friend bool operator==( const error_condition & lhs,\n                                     const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT\n      {\n        return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val;\n      }\n\n      inline friend bool operator<( const error_condition & lhs,\n                                    const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT\n        //  the more symmetrical non-member syntax allows enum\n        //  conversions work for both rhs and lhs.\n      {\n        return lhs.m_cat < rhs.m_cat\n          || (lhs.m_cat == rhs.m_cat && lhs.m_val < rhs.m_val);\n      }\n\n    private:\n      int                     m_val;\n      const error_category *  m_cat;\n\n    };\n\n    //  class error_code  ----------------------------------------------------//\n\n    //  We want error_code to be a value type that can be copied without slicing\n    //  and without requiring heap allocation, but we also want it to have\n    //  polymorphic behavior based on the error category. This is achieved by\n    //  abstract base class error_category supplying the polymorphic behavior,\n    //  and error_code containing a pointer to an object of a type derived\n    //  from error_category.\n    class error_code\n    {\n    public:\n\n      // constructors:\n      error_code() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&system_category()) {}\n      error_code( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT : m_val(val), m_cat(&cat) {}\n\n      template <class ErrorCodeEnum>\n        error_code(ErrorCodeEnum e,\n          typename boost::enable_if<is_error_code_enum<ErrorCodeEnum> >::type* = 0) BOOST_SYSTEM_NOEXCEPT\n      {\n        *this = make_error_code(e);\n      }\n\n      // modifiers:\n      void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT\n      {\n        m_val = val;\n        m_cat = &cat;\n      }\n\n      template<typename ErrorCodeEnum>\n        typename boost::enable_if<is_error_code_enum<ErrorCodeEnum>, error_code>::type &\n          operator=( ErrorCodeEnum val ) BOOST_SYSTEM_NOEXCEPT\n      {\n        *this = make_error_code(val);\n        return *this;\n      }\n\n      void clear() BOOST_SYSTEM_NOEXCEPT\n      {\n        m_val = 0;\n        m_cat = &system_category();\n      }\n\n      // observers:\n      int                     value() const  BOOST_SYSTEM_NOEXCEPT   { return m_val; }\n      const error_category &  category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }\n      error_condition         default_error_condition() const BOOST_SYSTEM_NOEXCEPT  { return m_cat->default_error_condition(value()); }\n      std::string             message() const  { return m_cat->message(value()); }\n\n      typedef void (*unspecified_bool_type)();\n      static void unspecified_bool_true() {}\n\n      operator unspecified_bool_type() const  BOOST_SYSTEM_NOEXCEPT // true if error\n      {\n        return m_val == 0 ? 0 : unspecified_bool_true;\n      }\n\n      bool operator!() const  BOOST_SYSTEM_NOEXCEPT // true if no error\n      {\n        return m_val == 0;\n      }\n\n      // relationals:\n      inline friend bool operator==( const error_code & lhs,\n                                     const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT\n        //  the more symmetrical non-member syntax allows enum\n        //  conversions work for both rhs and lhs.\n      {\n        return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val;\n      }\n\n      inline friend bool operator<( const error_code & lhs,\n                                    const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT\n        //  the more symmetrical non-member syntax allows enum\n        //  conversions work for both rhs and lhs.\n      {\n        return lhs.m_cat < rhs.m_cat\n          || (lhs.m_cat == rhs.m_cat && lhs.m_val < rhs.m_val);\n      }\n\n    private:\n      int                     m_val;\n      const error_category *  m_cat;\n\n    };\n\n    //  predefined error_code object used as \"throw on error\" tag\n# ifndef BOOST_SYSTEM_NO_DEPRECATED\n    BOOST_SYSTEM_DECL extern error_code throws;\n# endif\n\n    //  Moving from a \"throws\" object to a \"throws\" function without breaking\n    //  existing code is a bit of a problem. The workaround is to place the\n    //  \"throws\" function in namespace boost rather than namespace boost::system.\n\n  }  // namespace system\n\n  namespace detail { inline system::error_code * throws() { return 0; } }\n    //  Misuse of the error_code object is turned into a noisy failure by\n    //  poisoning the reference. This particular implementation doesn't\n    //  produce warnings or errors from popular compilers, is very efficient\n    //  (as determined by inspecting generated code), and does not suffer\n    //  from order of initialization problems. In practice, it also seems\n    //  cause user function error handling implementation errors to be detected\n    //  very early in the development cycle.\n\n  inline system::error_code & throws()\n    { return *detail::throws(); }\n\n  namespace system\n  {\n    //  non-member functions  ------------------------------------------------//\n\n    inline bool operator!=( const error_code & lhs,\n                            const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT\n    {\n      return !(lhs == rhs);\n    }\n\n    inline bool operator!=( const error_condition & lhs,\n                            const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT\n    {\n      return !(lhs == rhs);\n    }\n\n    inline bool operator==( const error_code & code,\n                            const error_condition & condition ) BOOST_SYSTEM_NOEXCEPT\n    {\n      return code.category().equivalent( code.value(), condition )\n        || condition.category().equivalent( code, condition.value() );\n    }\n\n    inline bool operator!=( const error_code & lhs,\n                            const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT\n    {\n      return !(lhs == rhs);\n    }\n\n    inline bool operator==( const error_condition & condition,\n                            const error_code & code ) BOOST_SYSTEM_NOEXCEPT\n    {\n      return condition.category().equivalent( code, condition.value() )\n        || code.category().equivalent( code.value(), condition );\n    }\n\n    inline bool operator!=( const error_condition & lhs,\n                            const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT\n    {\n      return !(lhs == rhs);\n    }\n\n    // TODO: both of these may move elsewhere, but the LWG hasn't spoken yet.\n\n    template <class charT, class traits>\n    inline std::basic_ostream<charT,traits>&\n      operator<< (std::basic_ostream<charT,traits>& os, error_code ec)\n    {\n      os << ec.category().name() << ':' << ec.value();\n      return os;\n    }\n\n    inline std::size_t hash_value( const error_code & ec )\n    {\n      return static_cast<std::size_t>(ec.value())\n        + reinterpret_cast<std::size_t>(&ec.category());\n    }\n\n    //  make_* functions for errc::errc_t  -----------------------------//\n\n    namespace errc\n    {\n      //  explicit conversion:\n      inline error_code make_error_code( errc_t e ) BOOST_SYSTEM_NOEXCEPT\n        { return error_code( e, generic_category() ); }\n\n      //  implicit conversion:\n      inline error_condition make_error_condition( errc_t e ) BOOST_SYSTEM_NOEXCEPT\n        { return error_condition( e, generic_category() ); }\n    }\n\n    //  error_category default implementation  -------------------------------//\n\n    error_condition error_category::default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT\n    {\n      return error_condition( ev, *this );\n    }\n\n    bool error_category::equivalent( int code,\n      const error_condition & condition ) const BOOST_SYSTEM_NOEXCEPT\n    {\n      return default_error_condition( code ) == condition;\n    }\n\n    bool error_category::equivalent( const error_code & code,\n      int condition ) const BOOST_SYSTEM_NOEXCEPT\n    {\n      return *this == code.category() && code.value() == condition;\n    }\n\n  } // namespace system\n} // namespace boost\n\n#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas\n\n# ifdef BOOST_ERROR_CODE_HEADER_ONLY\n#   include <boost/system/detail/error_code.ipp>\n# endif\n\n#endif // BOOST_ERROR_CODE_HPP\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/system/linux_error.hpp",
    "content": "//  boost/system/linux_error.hpp  -------------------------------------------//\n\n//  Copyright Beman Dawes 2007\n\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/system\n\n#ifndef BOOST_LINUX_ERROR_HPP\n#define BOOST_LINUX_ERROR_HPP\n\n//  This header is effectively empty for compiles on operating systems where\n//  it is not applicable.\n\n#if defined(linux) || defined(__linux) || defined(__linux__)\n\n#include <boost/system/error_code.hpp>\n\nnamespace boost\n{\n  namespace system\n  {\n    //  To construct an error_code after a API error:\n    //\n    //      error_code( errno, system_category() )\n\n    //  User code should use the portable \"posix\" enums for POSIX errors; this\n    //  allows such code to be portable to non-POSIX systems. For the non-POSIX\n    //  errno values that POSIX-based systems typically provide in addition to \n    //  POSIX values, use the system specific enums below.\n\n    namespace linux_error\n    {\n      enum linux_errno\n      {\n        advertise_error = EADV,\n        bad_exchange = EBADE,\n        bad_file_number = EBADFD,\n        bad_font_format = EBFONT,\n        bad_request_code = EBADRQC,\n        bad_request_descriptor = EBADR,\n        bad_slot = EBADSLT,\n        channel_range = ECHRNG,\n        communication_error = ECOMM,\n        dot_dot_error = EDOTDOT,\n        exchange_full = EXFULL,\n        host_down = EHOSTDOWN,\n        is_named_file_type= EISNAM,\n        key_expired = EKEYEXPIRED,\n        key_rejected = EKEYREJECTED,\n        key_revoked = EKEYREVOKED,\n        level2_halt= EL2HLT,\n        level2_no_syncronized= EL2NSYNC,\n        level3_halt = EL3HLT,\n        level3_reset = EL3RST,\n        link_range = ELNRNG,\n        medium_type = EMEDIUMTYPE,\n        no_anode= ENOANO,\n        no_block_device = ENOTBLK,\n        no_csi = ENOCSI,\n        no_key = ENOKEY,\n        no_medium = ENOMEDIUM,\n        no_network = ENONET,\n        no_package = ENOPKG,\n        not_avail = ENAVAIL,\n        not_named_file_type= ENOTNAM,\n        not_recoverable = ENOTRECOVERABLE,\n        not_unique = ENOTUNIQ,\n        owner_dead = EOWNERDEAD,\n        protocol_no_supported = EPFNOSUPPORT,\n        remote_address_changed = EREMCHG,\n        remote_io_error = EREMOTEIO,\n        remote_object = EREMOTE,\n        restart_needed = ERESTART,\n        shared_library_access = ELIBACC,\n        shared_library_bad = ELIBBAD,\n        shared_library_execute = ELIBEXEC,\n        shared_library_max_ = ELIBMAX,\n        shared_library_section= ELIBSCN,\n        shutdown = ESHUTDOWN,\n        socket_type_not_supported = ESOCKTNOSUPPORT,\n        srmount_error = ESRMNT,\n        stream_pipe_error = ESTRPIPE,\n        too_many_references = ETOOMANYREFS,\n        too_many_users = EUSERS,\n        unattached = EUNATCH,\n        unclean = EUCLEAN\n      };\n    }  // namespace linux_error\n\n# ifndef BOOST_SYSTEM_NO_DEPRECATED\n    namespace Linux = linux_error;\n# endif\n\n    template<> struct is_error_code_enum<linux_error::linux_errno>\n      { static const bool value = true; };\n\n    namespace linux_error\n    {\n      inline error_code make_error_code( linux_errno e )\n        { return error_code( e, system_category() ); }\n    }\n\n  }  // namespace system\n}  // namespace boost \n\n#endif  // Linux\n\n#endif  // BOOST_LINUX_ERROR_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/system/system_error.hpp",
    "content": "//  Boost system_error.hpp  --------------------------------------------------//\n\n//  Copyright Beman Dawes 2006\n\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_SYSTEM_ERROR_HPP\n#define BOOST_SYSTEM_ERROR_HPP\n\n#include <string>\n#include <stdexcept>\n#include <cassert>\n#include <boost/system/error_code.hpp>\n\nnamespace boost\n{\n  namespace system\n  {\n    //  class system_error  ------------------------------------------------------------//\n\n    class BOOST_SYMBOL_VISIBLE system_error : public std::runtime_error\n    // BOOST_SYMBOL_VISIBLE is needed by GCC to ensure system_error thrown from a shared\n    // library can be caught. See svn.boost.org/trac/boost/ticket/3697\n    {\n    public:\n      system_error( error_code ec )\n          : std::runtime_error(\"\"), m_error_code(ec) {}\n\n      system_error( error_code ec, const std::string & what_arg )\n          : std::runtime_error(what_arg), m_error_code(ec) {}\n\n      system_error( error_code ec, const char* what_arg )\n          : std::runtime_error(what_arg), m_error_code(ec) {}\n\n      system_error( int ev, const error_category & ecat )\n          : std::runtime_error(\"\"), m_error_code(ev,ecat) {}\n\n      system_error( int ev, const error_category & ecat,\n        const std::string & what_arg )\n          : std::runtime_error(what_arg), m_error_code(ev,ecat) {}\n\n      system_error( int ev, const error_category & ecat,\n        const char * what_arg )\n          : std::runtime_error(what_arg), m_error_code(ev,ecat) {}\n\n      virtual ~system_error() throw() {}\n\n      const error_code &  code() const throw() { return m_error_code; }\n      const char *        what() const throw();\n\n    private:\n      error_code           m_error_code;\n      mutable std::string  m_what;\n    };\n\n    //  implementation  ------------------------------------------------------//\n\n    inline const char * system_error::what() const throw()\n    // see http://www.boost.org/more/error_handling.html for lazy build rationale\n    {\n      if ( m_what.empty() )\n      {\n#ifndef BOOST_NO_EXCEPTIONS\n        try\n#endif\n        {\n          m_what = this->std::runtime_error::what();\n          if ( !m_what.empty() ) m_what += \": \";\n          m_what += m_error_code.message();\n        }\n#ifndef BOOST_NO_EXCEPTIONS\n        catch (...) { return std::runtime_error::what(); }\n#endif\n      }\n      return m_what.c_str();\n    }\n\n  } // namespace system\n} // namespace boost\n\n#endif // BOOST_SYSTEM_ERROR_HPP\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/system/windows_error.hpp",
    "content": "//  boost/system/windows_error.hpp  ------------------------------------------//\n\n//  Copyright Beman Dawes 2007\n\n//  Distributed under the Boost Software License, Version 1.0. (See accompanying\n//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/system\n\n#ifndef BOOST_WINDOWS_ERROR_HPP\n#define BOOST_WINDOWS_ERROR_HPP\n\n//  This header is effectively empty for compiles on operating systems where\n//  it is not applicable.\n\n#include <boost/system/config.hpp>\n\n#ifdef BOOST_WINDOWS_API\n\n#include <boost/system/error_code.hpp>\n\n// Neither MinGW or Cygwin versions of winerror.h work if used alone, so on\n// either of those platforms include the full windows.h\n\n#if defined(__MINGW32__) || defined(__CYGWIN__)\n#include <windows.h>\n#else\n#include <winerror.h>\n#endif\n\nnamespace boost\n{\n  namespace system\n  {\n\n    //  Microsoft Windows  ---------------------------------------------------//\n\n    //  To construct an error_code after a API error:\n    //\n    //      error_code( ::GetLastError(), system_category() )\n\n    namespace windows_error\n    {\n      enum windows_error_code\n      {\n        success = 0,\n        // These names and values are based on Windows winerror.h\n        invalid_function = ERROR_INVALID_FUNCTION,\n        file_not_found = ERROR_FILE_NOT_FOUND,\n        path_not_found = ERROR_PATH_NOT_FOUND,\n        too_many_open_files = ERROR_TOO_MANY_OPEN_FILES,\n        access_denied = ERROR_ACCESS_DENIED,\n        invalid_handle = ERROR_INVALID_HANDLE,\n        arena_trashed = ERROR_ARENA_TRASHED,\n        not_enough_memory = ERROR_NOT_ENOUGH_MEMORY,\n        invalid_block = ERROR_INVALID_BLOCK,\n        bad_environment = ERROR_BAD_ENVIRONMENT,\n        bad_format = ERROR_BAD_FORMAT,\n        invalid_access = ERROR_INVALID_ACCESS,\n        outofmemory = ERROR_OUTOFMEMORY,\n        invalid_drive = ERROR_INVALID_DRIVE,\n        current_directory = ERROR_CURRENT_DIRECTORY,\n        not_same_device = ERROR_NOT_SAME_DEVICE,\n        no_more_files = ERROR_NO_MORE_FILES,\n        write_protect = ERROR_WRITE_PROTECT,\n        bad_unit = ERROR_BAD_UNIT,\n        not_ready = ERROR_NOT_READY,\n        bad_command = ERROR_BAD_COMMAND,\n        crc = ERROR_CRC,\n        bad_length = ERROR_BAD_LENGTH,\n        seek = ERROR_SEEK,\n        not_dos_disk = ERROR_NOT_DOS_DISK,\n        sector_not_found = ERROR_SECTOR_NOT_FOUND,\n        out_of_paper = ERROR_OUT_OF_PAPER,\n        write_fault = ERROR_WRITE_FAULT,\n        read_fault = ERROR_READ_FAULT,\n        gen_failure = ERROR_GEN_FAILURE,\n        sharing_violation = ERROR_SHARING_VIOLATION,\n        lock_violation = ERROR_LOCK_VIOLATION,\n        wrong_disk = ERROR_WRONG_DISK,\n        sharing_buffer_exceeded = ERROR_SHARING_BUFFER_EXCEEDED,\n        handle_eof = ERROR_HANDLE_EOF,\n        handle_disk_full= ERROR_HANDLE_DISK_FULL,\n        rem_not_list = ERROR_REM_NOT_LIST,\n        dup_name = ERROR_DUP_NAME,\n        bad_net_path = ERROR_BAD_NETPATH,\n        network_busy = ERROR_NETWORK_BUSY,\n        // ...\n        file_exists = ERROR_FILE_EXISTS,\n        cannot_make = ERROR_CANNOT_MAKE,\n        // ...\n        broken_pipe = ERROR_BROKEN_PIPE,\n        open_failed = ERROR_OPEN_FAILED,\n        buffer_overflow = ERROR_BUFFER_OVERFLOW,\n        disk_full= ERROR_DISK_FULL,\n        // ...\n        lock_failed = ERROR_LOCK_FAILED,\n        busy = ERROR_BUSY,\n        cancel_violation = ERROR_CANCEL_VIOLATION,\n        already_exists = ERROR_ALREADY_EXISTS\n        // ...\n\n        // TODO: add more Windows errors\n      };\n\n    }  // namespace windows\n\n# ifndef BOOST_SYSTEM_NO_DEPRECATED\n    namespace windows = windows_error;\n# endif\n\n    template<> struct is_error_code_enum<windows_error::windows_error_code>\n      { static const bool value = true; };\n\n    namespace windows_error\n    {\n      inline error_code make_error_code( windows_error_code e )\n        { return error_code( e, system_category() ); }\n    }\n\n  }  // namespace system\n}  // namespace boost\n\n#endif  // BOOST_WINDOWS_API\n\n#endif  // BOOST_WINDOWS_ERROR_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/throw_exception.hpp",
    "content": "#ifndef UUID_AA15E74A856F11E08B8D93F24824019B\n#define UUID_AA15E74A856F11E08B8D93F24824019B\n#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/throw_exception.hpp\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, Inc.\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  http://www.boost.org/libs/utility/throw_exception.html\n//\n\n#include <boost/detail/workaround.hpp>\n#include <boost/config.hpp>\n#include <exception>\n\n#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x593) )\n# define BOOST_EXCEPTION_DISABLE\n#endif\n\n#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1310 )\n# define BOOST_EXCEPTION_DISABLE\n#endif\n\n#if !defined( BOOST_EXCEPTION_DISABLE )\n# include <boost/exception/exception.hpp>\n#if !defined(BOOST_THROW_EXCEPTION_CURRENT_FUNCTION)\n# include <boost/current_function.hpp>\n# define BOOST_THROW_EXCEPTION_CURRENT_FUNCTION BOOST_CURRENT_FUNCTION\n#endif\n# define BOOST_THROW_EXCEPTION(x) ::boost::exception_detail::throw_exception_(x,BOOST_THROW_EXCEPTION_CURRENT_FUNCTION,__FILE__,__LINE__)\n#else\n# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)\n#endif\n\nnamespace boost\n{\n#ifdef BOOST_NO_EXCEPTIONS\n\nvoid throw_exception( std::exception const & e ); // user defined\n\n#else\n\ninline void throw_exception_assert_compatibility( std::exception const & ) { }\n\ntemplate<class E> BOOST_NORETURN inline void throw_exception( E const & e )\n{\n    //All boost exceptions are required to derive from std::exception,\n    //to ensure compatibility with BOOST_NO_EXCEPTIONS.\n    throw_exception_assert_compatibility(e);\n\n#ifndef BOOST_EXCEPTION_DISABLE\n    throw enable_current_exception(enable_error_info(e));\n#else\n    throw e;\n#endif\n}\n\n#endif\n\n#if !defined( BOOST_EXCEPTION_DISABLE )\n    namespace\n    exception_detail\n    {\n        template <class E>\n        BOOST_NORETURN\n        void\n        throw_exception_( E const & x, char const * current_function, char const * file, int line )\n        {\n            boost::throw_exception(\n                set_info(\n                    set_info(\n                        set_info(\n                            enable_error_info(x),\n                            throw_function(current_function)),\n                        throw_file(file)),\n                    throw_line(line)));\n        }\n    }\n#endif\n} // namespace boost\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/token_functions.hpp",
    "content": "// Boost token_functions.hpp  ------------------------------------------------//\n\n// Copyright John R. Bandela 2001.\n\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// See http://www.boost.org/libs/tokenizer/ for documentation.\n\n// Revision History:\n// 01 Oct 2004   Joaquin M Lopez Munoz\n//      Workaround for a problem with string::assign in msvc-stlport\n// 06 Apr 2004   John Bandela\n//      Fixed a bug involving using char_delimiter with a true input iterator\n// 28 Nov 2003   Robert Zeh and John Bandela\n//      Converted into \"fast\" functions that avoid using += when\n//      the supplied iterator isn't an input_iterator; based on\n//      some work done at Archelon and a version that was checked into\n//      the boost CVS for a short period of time.\n// 20 Feb 2002   John Maddock\n//      Removed using namespace std declarations and added\n//      workaround for BOOST_NO_STDC_NAMESPACE (the library\n//      can be safely mixed with regex).\n// 06 Feb 2002   Jeremy Siek\n//      Added char_separator.\n// 02 Feb 2002   Jeremy Siek\n//      Removed tabs and a little cleanup.\n\n\n#ifndef BOOST_TOKEN_FUNCTIONS_JRB120303_HPP_\n#define BOOST_TOKEN_FUNCTIONS_JRB120303_HPP_\n\n#include <vector>\n#include <stdexcept>\n#include <string>\n#include <cctype>\n#include <algorithm> // for find_if\n#include <boost/config.hpp>\n#include <boost/assert.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/throw_exception.hpp>\n#if !defined(BOOST_NO_CWCTYPE)\n#include <cwctype>\n#endif\n\n//\n// the following must not be macros if we are to prefix them\n// with std:: (they shouldn't be macros anyway...)\n//\n#ifdef ispunct\n#  undef ispunct\n#endif\n#ifdef iswpunct\n#  undef iswpunct\n#endif\n#ifdef isspace\n#  undef isspace\n#endif\n#ifdef iswspace\n#  undef iswspace\n#endif\n//\n// fix namespace problems:\n//\n#ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std{\n using ::ispunct;\n using ::isspace;\n#if !defined(BOOST_NO_CWCTYPE)\n using ::iswpunct;\n using ::iswspace;\n#endif\n}\n#endif\n\nnamespace boost{\n  //===========================================================================\n  // The escaped_list_separator class. Which is a model of TokenizerFunction\n  // An escaped list is a super-set of what is commonly known as a comma\n  // separated value (csv) list.It is separated into fields by a comma or\n  // other character. If the delimiting character is inside quotes, then it is\n  // counted as a regular character.To allow for embedded quotes in a field,\n  // there can be escape sequences using the \\ much like C.\n  // The role of the comma, the quotation mark, and the escape\n  // character (backslash \\), can be assigned to other characters.\n\n  struct escaped_list_error : public std::runtime_error{\n    escaped_list_error(const std::string& what_arg):std::runtime_error(what_arg) { }\n  };\n\n\n// The out of the box GCC 2.95 on cygwin does not have a char_traits class.\n// MSVC does not like the following typename\n  template <class Char,\n    class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type >\n  class escaped_list_separator {\n\n  private:\n    typedef std::basic_string<Char,Traits> string_type;\n    struct char_eq {\n      Char e_;\n      char_eq(Char e):e_(e) { }\n      bool operator()(Char c) {\n        return Traits::eq(e_,c);\n      }\n    };\n    string_type  escape_;\n    string_type  c_;\n    string_type  quote_;\n    bool last_;\n\n    bool is_escape(Char e) {\n      char_eq f(e);\n      return std::find_if(escape_.begin(),escape_.end(),f)!=escape_.end();\n    }\n    bool is_c(Char e) {\n      char_eq f(e);\n      return std::find_if(c_.begin(),c_.end(),f)!=c_.end();\n    }\n    bool is_quote(Char e) {\n      char_eq f(e);\n      return std::find_if(quote_.begin(),quote_.end(),f)!=quote_.end();\n    }\n    template <typename iterator, typename Token>\n    void do_escape(iterator& next,iterator end,Token& tok) {\n      if (++next == end)\n        BOOST_THROW_EXCEPTION(escaped_list_error(std::string(\"cannot end with escape\")));\n      if (Traits::eq(*next,'n')) {\n        tok+='\\n';\n        return;\n      }\n      else if (is_quote(*next)) {\n        tok+=*next;\n        return;\n      }\n      else if (is_c(*next)) {\n        tok+=*next;\n        return;\n      }\n      else if (is_escape(*next)) {\n        tok+=*next;\n        return;\n      }\n      else\n        BOOST_THROW_EXCEPTION(escaped_list_error(std::string(\"unknown escape sequence\")));\n    }\n\n    public:\n\n    explicit escaped_list_separator(Char  e = '\\\\',\n                                    Char c = ',',Char  q = '\\\"')\n      : escape_(1,e), c_(1,c), quote_(1,q), last_(false) { }\n\n    escaped_list_separator(string_type e, string_type c, string_type q)\n      : escape_(e), c_(c), quote_(q), last_(false) { }\n\n    void reset() {last_=false;}\n\n    template <typename InputIterator, typename Token>\n    bool operator()(InputIterator& next,InputIterator end,Token& tok) {\n      bool bInQuote = false;\n      tok = Token();\n\n      if (next == end) {\n        if (last_) {\n          last_ = false;\n          return true;\n        }\n        else\n          return false;\n      }\n      last_ = false;\n      for (;next != end;++next) {\n        if (is_escape(*next)) {\n          do_escape(next,end,tok);\n        }\n        else if (is_c(*next)) {\n          if (!bInQuote) {\n            // If we are not in quote, then we are done\n            ++next;\n            // The last character was a c, that means there is\n            // 1 more blank field\n            last_ = true;\n            return true;\n          }\n          else tok+=*next;\n        }\n        else if (is_quote(*next)) {\n          bInQuote=!bInQuote;\n        }\n        else {\n          tok += *next;\n        }\n      }\n      return true;\n    }\n  };\n\n  //===========================================================================\n  // The classes here are used by offset_separator and char_separator to implement\n  // faster assigning of tokens using assign instead of +=\n\n  namespace tokenizer_detail {\n  //===========================================================================\n  // Tokenizer was broken for wide character separators, at least on Windows, since\n  // CRT functions isspace etc only expect values in [0, 0xFF]. Debug build asserts\n  // if higher values are passed in. The traits extension class should take care of this.\n  // Assuming that the conditional will always get optimized out in the function\n  // implementations, argument types are not a problem since both forms of character classifiers\n  // expect an int.\n\n#if !defined(BOOST_NO_CWCTYPE)\n  template<typename traits, int N>\n  struct traits_extension_details : public traits {\n    typedef typename traits::char_type char_type;\n    static bool isspace(char_type c)\n    {\n       return std::iswspace(c) != 0;\n    }\n    static bool ispunct(char_type c)\n    {\n       return std::iswpunct(c) != 0;\n    }\n  };\n\n  template<typename traits>\n  struct traits_extension_details<traits, 1> : public traits {\n    typedef typename traits::char_type char_type;\n    static bool isspace(char_type c)\n    {\n       return std::isspace(c) != 0;\n    }\n    static bool ispunct(char_type c)\n    {\n       return std::ispunct(c) != 0;\n    }\n  };\n#endif\n\n\n  // In case there is no cwctype header, we implement the checks manually.\n  // We make use of the fact that the tested categories should fit in ASCII.\n  template<typename traits>\n  struct traits_extension : public traits {\n    typedef typename traits::char_type char_type;\n    static bool isspace(char_type c)\n    {\n#if !defined(BOOST_NO_CWCTYPE)\n      return traits_extension_details<traits, sizeof(char_type)>::isspace(c);\n#else\n      return static_cast< unsigned >(c) <= 255 && std::isspace(c) != 0;\n#endif\n    }\n\n    static bool ispunct(char_type c)\n    {\n#if !defined(BOOST_NO_CWCTYPE)\n      return traits_extension_details<traits, sizeof(char_type)>::ispunct(c);\n#else\n      return static_cast< unsigned >(c) <= 255 && std::ispunct(c) != 0;\n#endif\n    }\n  };\n\n  // The assign_or_plus_equal struct contains functions that implement\n  // assign, +=, and clearing based on the iterator type.  The\n  // generic case does nothing for plus_equal and clearing, while\n  // passing through the call for assign.\n  //\n  // When an input iterator is being used, the situation is reversed.\n  // The assign method does nothing, plus_equal invokes operator +=,\n  // and the clearing method sets the supplied token to the default\n  // token constructor's result.\n  //\n\n  template<class IteratorTag>\n  struct assign_or_plus_equal {\n    template<class Iterator, class Token>\n    static void assign(Iterator b, Iterator e, Token &t) {\n      t.assign(b, e);\n    }\n\n    template<class Token, class Value>\n    static void plus_equal(Token &, const Value &) { }\n\n    // If we are doing an assign, there is no need for the\n    // the clear.\n    //\n    template<class Token>\n    static void clear(Token &) { }\n  };\n\n  template <>\n  struct assign_or_plus_equal<std::input_iterator_tag> {\n    template<class Iterator, class Token>\n    static void assign(Iterator , Iterator , Token &) { }\n    template<class Token, class Value>\n    static void plus_equal(Token &t, const Value &v) {\n      t += v;\n    }\n    template<class Token>\n    static void clear(Token &t) {\n      t = Token();\n    }\n  };\n\n\n  template<class Iterator>\n  struct pointer_iterator_category{\n    typedef std::random_access_iterator_tag type;\n  };\n\n\n  template<class Iterator>\n  struct class_iterator_category{\n    typedef typename Iterator::iterator_category type;\n  };\n\n\n\n  // This portably gets the iterator_tag without partial template specialization\n  template<class Iterator>\n    struct get_iterator_category{\n    typedef typename mpl::if_<is_pointer<Iterator>,\n      pointer_iterator_category<Iterator>,\n      class_iterator_category<Iterator>\n    >::type cat;\n\n    typedef typename cat::type iterator_category;\n  };\n\n\n  } // namespace tokenizer_detail\n\n\n  //===========================================================================\n  // The offset_separator class, which is a model of TokenizerFunction.\n  // Offset breaks a string into tokens based on a range of offsets\n\n  class offset_separator {\n  private:\n\n    std::vector<int> offsets_;\n    unsigned int current_offset_;\n    bool wrap_offsets_;\n    bool return_partial_last_;\n\n  public:\n    template <typename Iter>\n    offset_separator(Iter begin, Iter end, bool wrap_offsets = true,\n                     bool return_partial_last = true)\n      : offsets_(begin,end), current_offset_(0),\n        wrap_offsets_(wrap_offsets),\n        return_partial_last_(return_partial_last) { }\n\n    offset_separator()\n      : offsets_(1,1), current_offset_(),\n        wrap_offsets_(true), return_partial_last_(true) { }\n\n    void reset() {\n      current_offset_ = 0;\n    }\n\n    template <typename InputIterator, typename Token>\n    bool operator()(InputIterator& next, InputIterator end, Token& tok)\n    {\n      typedef tokenizer_detail::assign_or_plus_equal<\n        BOOST_DEDUCED_TYPENAME tokenizer_detail::get_iterator_category<\n          InputIterator\n        >::iterator_category\n      > assigner;\n\n      BOOST_ASSERT(!offsets_.empty());\n\n      assigner::clear(tok);\n      InputIterator start(next);\n\n      if (next == end)\n        return false;\n\n      if (current_offset_ == offsets_.size())\n      {\n        if (wrap_offsets_)\n          current_offset_=0;\n        else\n          return false;\n      }\n\n      int c = offsets_[current_offset_];\n      int i = 0;\n      for (; i < c; ++i) {\n        if (next == end)break;\n        assigner::plus_equal(tok,*next++);\n      }\n      assigner::assign(start,next,tok);\n\n      if (!return_partial_last_)\n        if (i < (c-1) )\n          return false;\n\n      ++current_offset_;\n      return true;\n    }\n  };\n\n\n  //===========================================================================\n  // The char_separator class breaks a sequence of characters into\n  // tokens based on the character delimiters (very much like bad old\n  // strtok). A delimiter character can either be kept or dropped. A\n  // kept delimiter shows up as an output token, whereas a dropped\n  // delimiter does not.\n\n  // This class replaces the char_delimiters_separator class. The\n  // constructor for the char_delimiters_separator class was too\n  // confusing and needed to be deprecated. However, because of the\n  // default arguments to the constructor, adding the new constructor\n  // would cause ambiguity, so instead I deprecated the whole class.\n  // The implementation of the class was also simplified considerably.\n\n  enum empty_token_policy { drop_empty_tokens, keep_empty_tokens };\n\n  // The out of the box GCC 2.95 on cygwin does not have a char_traits class.\n  template <typename Char,\n    typename Tr = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type >\n  class char_separator\n  {\n    typedef tokenizer_detail::traits_extension<Tr> Traits;\n    typedef std::basic_string<Char,Tr> string_type;\n  public:\n    explicit\n    char_separator(const Char* dropped_delims,\n                   const Char* kept_delims = 0,\n                   empty_token_policy empty_tokens = drop_empty_tokens)\n      : m_dropped_delims(dropped_delims),\n        m_use_ispunct(false),\n        m_use_isspace(false),\n        m_empty_tokens(empty_tokens),\n        m_output_done(false)\n    {\n      // Borland workaround\n      if (kept_delims)\n        m_kept_delims = kept_delims;\n    }\n\n                // use ispunct() for kept delimiters and isspace for dropped.\n    explicit\n    char_separator()\n      : m_use_ispunct(true),\n        m_use_isspace(true),\n        m_empty_tokens(drop_empty_tokens) { }\n\n    void reset() { }\n\n    template <typename InputIterator, typename Token>\n    bool operator()(InputIterator& next, InputIterator end, Token& tok)\n    {\n      typedef tokenizer_detail::assign_or_plus_equal<\n        BOOST_DEDUCED_TYPENAME tokenizer_detail::get_iterator_category<\n          InputIterator\n        >::iterator_category\n      > assigner;\n\n      assigner::clear(tok);\n\n      // skip past all dropped_delims\n      if (m_empty_tokens == drop_empty_tokens)\n        for (; next != end  && is_dropped(*next); ++next)\n          { }\n\n      InputIterator start(next);\n\n      if (m_empty_tokens == drop_empty_tokens) {\n\n        if (next == end)\n          return false;\n\n\n        // if we are on a kept_delims move past it and stop\n        if (is_kept(*next)) {\n          assigner::plus_equal(tok,*next);\n          ++next;\n        } else\n          // append all the non delim characters\n          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)\n            assigner::plus_equal(tok,*next);\n      }\n      else { // m_empty_tokens == keep_empty_tokens\n\n        // Handle empty token at the end\n        if (next == end)\n        {\n          if (m_output_done == false)\n          {\n            m_output_done = true;\n            assigner::assign(start,next,tok);\n            return true;\n          }\n          else\n            return false;\n        }\n\n        if (is_kept(*next)) {\n          if (m_output_done == false)\n            m_output_done = true;\n          else {\n            assigner::plus_equal(tok,*next);\n            ++next;\n            m_output_done = false;\n          }\n        }\n        else if (m_output_done == false && is_dropped(*next)) {\n          m_output_done = true;\n        }\n        else {\n          if (is_dropped(*next))\n            start=++next;\n          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)\n            assigner::plus_equal(tok,*next);\n          m_output_done = true;\n        }\n      }\n      assigner::assign(start,next,tok);\n      return true;\n    }\n\n  private:\n    string_type m_kept_delims;\n    string_type m_dropped_delims;\n    bool m_use_ispunct;\n    bool m_use_isspace;\n    empty_token_policy m_empty_tokens;\n    bool m_output_done;\n\n    bool is_kept(Char E) const\n    {\n      if (m_kept_delims.length())\n        return m_kept_delims.find(E) != string_type::npos;\n      else if (m_use_ispunct) {\n        return Traits::ispunct(E) != 0;\n      } else\n        return false;\n    }\n    bool is_dropped(Char E) const\n    {\n      if (m_dropped_delims.length())\n        return m_dropped_delims.find(E) != string_type::npos;\n      else if (m_use_isspace) {\n        return Traits::isspace(E) != 0;\n      } else\n        return false;\n    }\n  };\n\n  //===========================================================================\n  // The following class is DEPRECATED, use class char_separators instead.\n  //\n  // The char_delimiters_separator class, which is a model of\n  // TokenizerFunction.  char_delimiters_separator breaks a string\n  // into tokens based on character delimiters. There are 2 types of\n  // delimiters. returnable delimiters can be returned as\n  // tokens. These are often punctuation. nonreturnable delimiters\n  // cannot be returned as tokens. These are often whitespace\n\n  // The out of the box GCC 2.95 on cygwin does not have a char_traits class.\n  template <class Char,\n    class Tr = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type >\n  class char_delimiters_separator {\n  private:\n\n    typedef tokenizer_detail::traits_extension<Tr> Traits;\n    typedef std::basic_string<Char,Tr> string_type;\n    string_type returnable_;\n    string_type nonreturnable_;\n    bool return_delims_;\n    bool no_ispunct_;\n    bool no_isspace_;\n\n    bool is_ret(Char E)const\n    {\n      if (returnable_.length())\n        return  returnable_.find(E) != string_type::npos;\n      else{\n        if (no_ispunct_) {return false;}\n        else{\n          int r = Traits::ispunct(E);\n          return r != 0;\n        }\n      }\n    }\n    bool is_nonret(Char E)const\n    {\n      if (nonreturnable_.length())\n        return  nonreturnable_.find(E) != string_type::npos;\n      else{\n        if (no_isspace_) {return false;}\n        else{\n          int r = Traits::isspace(E);\n          return r != 0;\n        }\n      }\n    }\n\n  public:\n    explicit char_delimiters_separator(bool return_delims = false,\n                                       const Char* returnable = 0,\n                                       const Char* nonreturnable = 0)\n      : returnable_(returnable ? returnable : string_type().c_str()),\n        nonreturnable_(nonreturnable ? nonreturnable:string_type().c_str()),\n        return_delims_(return_delims), no_ispunct_(returnable!=0),\n        no_isspace_(nonreturnable!=0) { }\n\n    void reset() { }\n\n  public:\n\n     template <typename InputIterator, typename Token>\n     bool operator()(InputIterator& next, InputIterator end,Token& tok) {\n     tok = Token();\n\n     // skip past all nonreturnable delims\n     // skip past the returnable only if we are not returning delims\n     for (;next!=end && ( is_nonret(*next) || (is_ret(*next)\n       && !return_delims_ ) );++next) { }\n\n     if (next == end) {\n       return false;\n     }\n\n     // if we are to return delims and we are one a returnable one\n     // move past it and stop\n     if (is_ret(*next) && return_delims_) {\n       tok+=*next;\n       ++next;\n     }\n     else\n       // append all the non delim characters\n       for (;next!=end && !is_nonret(*next) && !is_ret(*next);++next)\n         tok+=*next;\n\n\n     return true;\n   }\n  };\n\n\n} //namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/token_iterator.hpp",
    "content": "// Boost token_iterator.hpp  -------------------------------------------------//\n\n// Copyright John R. Bandela 2001\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// See http://www.boost.org/libs/tokenizer for documentation.\n\n// Revision History:\n// 16 Jul 2003   John Bandela\n//      Allowed conversions from convertible base iterators\n// 03 Jul 2003   John Bandela\n//      Converted to new iterator adapter\n\n\n\n#ifndef BOOST_TOKENIZER_POLICY_JRB070303_HPP_\n#define BOOST_TOKENIZER_POLICY_JRB070303_HPP_\n\n#include <boost/assert.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n#include <boost/iterator/minimum_category.hpp>\n#include <boost/token_functions.hpp>\n#include <utility>\n\nnamespace boost\n{\n  template <class TokenizerFunc, class Iterator, class Type>\n  class token_iterator\n      : public iterator_facade<\n            token_iterator<TokenizerFunc, Iterator, Type>\n          , Type\n          , typename iterators::minimum_category<\n                forward_traversal_tag\n              , typename iterator_traversal<Iterator>::type\n            >::type\n          , const Type&\n        >\n  {\n\n      friend class iterator_core_access;\n\n      TokenizerFunc f_;\n      Iterator begin_;\n      Iterator end_;\n      bool valid_;\n      Type tok_;\n\n      void increment(){\n          BOOST_ASSERT(valid_);\n          valid_ = f_(begin_,end_,tok_);\n      }\n\n      const Type&  dereference() const {\n          BOOST_ASSERT(valid_);\n          return tok_;\n      }\n      template<class Other>\n      bool equal(const Other& a) const{\n          return (a.valid_ && valid_)\n              ?( (a.begin_==begin_) && (a.end_ == end_) )\n              :(a.valid_==valid_);\n\n      }\n\n      void initialize(){\n          if(valid_) return;\n          f_.reset();\n          valid_ = (begin_ != end_)?\n              f_(begin_,end_,tok_):false;\n      }\n  public:\n      token_iterator():begin_(),end_(),valid_(false),tok_() { }\n\n      token_iterator(TokenizerFunc f, Iterator begin, Iterator e = Iterator())\n          : f_(f),begin_(begin),end_(e),valid_(false),tok_(){ initialize(); }\n\n      token_iterator(Iterator begin, Iterator e = Iterator())\n            : f_(),begin_(begin),end_(e),valid_(false),tok_() {initialize();}\n\n      template<class OtherIter>\n      token_iterator(\n            token_iterator<TokenizerFunc, OtherIter,Type> const& t\n            , typename enable_if_convertible<OtherIter, Iterator>::type* = 0)\n            : f_(t.tokenizer_function()),begin_(t.base())\n            ,end_(t.end()),valid_(!t.at_end()),tok_(t.current_token()) {}\n\n      Iterator base()const{return begin_;}\n\n      Iterator end()const{return end_;}\n\n      TokenizerFunc tokenizer_function()const{return f_;}\n\n      Type current_token()const{return tok_;}\n\n      bool at_end()const{return !valid_;}\n\n\n\n\n  };\n    template <\n        class TokenizerFunc = char_delimiters_separator<char>,\n        class Iterator = std::string::const_iterator,\n        class Type = std::string\n    >\n    class token_iterator_generator {\n\n    private:\n    public:\n        typedef token_iterator<TokenizerFunc,Iterator,Type> type;\n    };\n\n\n    // Type has to be first because it needs to be explicitly specified\n    // because there is no way the function can deduce it.\n    template<class Type, class Iterator, class TokenizerFunc>\n        typename token_iterator_generator<TokenizerFunc,Iterator,Type>::type\n    make_token_iterator(Iterator begin, Iterator end,const TokenizerFunc& fun){\n        typedef typename\n            token_iterator_generator<TokenizerFunc,Iterator,Type>::type ret_type;\n        return ret_type(fun,begin,end);\n    }\n\n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/tokenizer.hpp",
    "content": "// Boost tokenizer.hpp  -----------------------------------------------------//\n\n// (c) Copyright Jeremy Siek and John R. Bandela 2001. \n\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// See http://www.boost.org/libs/tokenizer for documenation\n\n// Revision History:\n// 03 Jul 2003   John Bandela\n//      Converted to new iterator adapter\n// 02 Feb 2002   Jeremy Siek\n//      Removed tabs and a little cleanup.\n\n#ifndef BOOST_TOKENIZER_JRB070303_HPP_\n#define BOOST_TOKENIZER_JRB070303_HPP_\n\n#include <boost/token_iterator.hpp>\n\nnamespace boost {\n\n  \n  //===========================================================================\n  // A container-view of a tokenized \"sequence\"\n  template <\n    typename TokenizerFunc = char_delimiters_separator<char>, \n    typename Iterator = std::string::const_iterator,\n    typename Type = std::string\n  >\n  class tokenizer {\n  private:\n    typedef token_iterator_generator<TokenizerFunc,Iterator,Type> TGen;\n        \n    // It seems that MSVC does not like the unqualified use of iterator,\n    // Thus we use iter internally when it is used unqualified and\n    // the users of this class will always qualify iterator.     \n    typedef typename TGen::type iter;\n    \n  public:\n    \n    typedef iter iterator;\n    typedef iter const_iterator;\n    typedef Type value_type;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef value_type* pointer;\n    typedef const pointer const_pointer;\n    typedef void size_type;\n    typedef void difference_type;\n\n    tokenizer(Iterator first, Iterator last,\n              const TokenizerFunc& f = TokenizerFunc()) \n      : first_(first), last_(last), f_(f) { }\n        \n    template <typename Container>\n    tokenizer(const Container& c)\n      : first_(c.begin()), last_(c.end()), f_() { }\n    \n    template <typename Container>\n    tokenizer(const Container& c,const TokenizerFunc& f)\n      : first_(c.begin()), last_(c.end()), f_(f) { }\n    \n    void assign(Iterator first, Iterator last){\n      first_ = first;\n      last_ = last;\n    }\n    \n    void assign(Iterator first, Iterator last, const TokenizerFunc& f){\n      assign(first,last);\n      f_ = f;\n    }\n    \n    template <typename Container>\n    void assign(const Container& c){\n      assign(c.begin(),c.end());\n    }\n    \n    \n    template <typename Container>\n    void assign(const Container& c, const TokenizerFunc& f){\n      assign(c.begin(),c.end(),f);\n    }\n    \n    iter begin() const { return iter(f_,first_,last_); }\n    iter end() const { return iter(f_,last_,last_); }\n        \n  private:\n    Iterator first_;\n    Iterator last_;\n    TokenizerFunc f_;\n  };\n\n\n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/add_const.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ADD_CONST_HPP_INCLUDED\n#define BOOST_TT_ADD_CONST_HPP_INCLUDED\n\n#include <boost/type_traits/detail/config.hpp>\n\nnamespace boost {\n\n// * convert a type T to const type - add_const<T>\n// this is not required since the result is always\n// the same as \"T const\", but it does suppress warnings\n// from some compilers:\n\n#if defined(BOOST_MSVC)\n// This bogus warning will appear when add_const is applied to a\n// const volatile reference because we can't detect const volatile\n// references with MSVC6.\n#   pragma warning(push)\n#   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored\n#endif \n\n   template <class T> struct add_const\n   {\n      typedef T const type;\n   };\n\n#if defined(BOOST_MSVC)\n#   pragma warning(pop)\n#endif \n\n   template <class T> struct add_const<T&>\n   {\n      typedef T& type;\n   };\n\n} // namespace boost\n\n#endif // BOOST_TT_ADD_CONST_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/add_cv.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_ADD_CV_HPP_INCLUDED\n#define BOOST_TT_ADD_CV_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\nnamespace boost {\n\n// * convert a type T to a const volatile type - add_cv<T>\n// this is not required since the result is always\n// the same as \"T const volatile\", but it does suppress warnings\n// from some compilers:\n\n#if defined(BOOST_MSVC)\n// This bogus warning will appear when add_volatile is applied to a\n// const volatile reference because we can't detect const volatile\n// references with MSVC6.\n#   pragma warning(push)\n#   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored\n#endif \n\ntemplate <class T> struct add_cv{ typedef T const volatile type; };\n\n#if defined(BOOST_MSVC)\n#   pragma warning(pop)\n#endif \n\ntemplate <class T> struct add_cv<T&>{ typedef T& type; };\n\n} // namespace boost\n\n#endif // BOOST_TT_ADD_CV_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/add_lvalue_reference.hpp",
    "content": "//  Copyright 2010 John Maddock\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n#ifndef BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP\n#define BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP\n\n#include <boost/type_traits/add_reference.hpp>\n\nnamespace boost{\n\ntemplate <class T> struct add_lvalue_reference\n{\n   typedef typename boost::add_reference<T>::type type; \n};\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <class T> struct add_lvalue_reference<T&&>\n{\n   typedef T& type;\n};\n#endif\n\n}\n\n#endif  // BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/add_pointer.hpp",
    "content": "\n// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ADD_POINTER_HPP_INCLUDED\n#define BOOST_TT_ADD_POINTER_HPP_INCLUDED\n\n#include <boost/type_traits/remove_reference.hpp>\n\nnamespace boost {\n\n#if defined(__BORLANDC__) && (__BORLANDC__ < 0x5A0)\n//\n// For some reason this implementation stops Borlands compiler\n// from dropping cv-qualifiers, it still fails with references\n// to arrays for some reason though (shrug...) (JM 20021104)\n//\ntemplate <typename T>\nstruct add_pointer\n{\n    typedef T* type;\n};\ntemplate <typename T>\nstruct add_pointer<T&>\n{\n    typedef T* type;\n};\ntemplate <typename T>\nstruct add_pointer<T&const>\n{\n    typedef T* type;\n};\ntemplate <typename T>\nstruct add_pointer<T&volatile>\n{\n    typedef T* type;\n};\ntemplate <typename T>\nstruct add_pointer<T&const volatile>\n{\n    typedef T* type;\n};\n\n#else\n\ntemplate <typename T>\nstruct add_pointer\n{\n    typedef typename remove_reference<T>::type no_ref_type;\n    typedef no_ref_type* type;\n};\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_ADD_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/add_reference.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ADD_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_ADD_REFERENCE_HPP_INCLUDED\n\n#include <boost/detail/workaround.hpp>\n#include <boost/config.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\n//\n// We can't filter out rvalue_references at the same level as\n// references or we get ambiguities from msvc:\n//\n\ntemplate <typename T>\nstruct add_reference_impl\n{\n    typedef T& type;\n};\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <typename T>\nstruct add_reference_impl<T&&>\n{\n    typedef T&& type;\n};\n#endif\n\n} // namespace detail\n\ntemplate <class T> struct add_reference\n{\n   typedef typename boost::detail::add_reference_impl<T>::type type;\n};\ntemplate <class T> struct add_reference<T&>\n{\n   typedef T& type;\n};\n\n// these full specialisations are always required:\ntemplate <> struct add_reference<void> { typedef void type; };\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct add_reference<const void> { typedef void type; };\ntemplate <> struct add_reference<const volatile void> { typedef void type; };\ntemplate <> struct add_reference<volatile void> { typedef void type; };\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/add_rvalue_reference.hpp",
    "content": "//  add_rvalue_reference.hpp  ---------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n#ifndef BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP\n#define BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP\n\n#include <boost/config.hpp>\n\n//----------------------------------------------------------------------------//\n\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/is_reference.hpp>\n\n//----------------------------------------------------------------------------//\n//                                                                            //\n//                           C++03 implementation of                          //\n//             20.9.7.2 Reference modifications [meta.trans.ref]              //\n//                          Written by Vicente J. Botet Escriba               //\n//                                                                            //\n// If T names an object or function type then the member typedef type\n// shall name T&&; otherwise, type shall name T. [ Note: This rule reflects\n// the semantics of reference collapsing. For example, when a type T names\n// a type T1&, the type add_rvalue_reference<T>::type is not an rvalue\n// reference. -end note ]\n//----------------------------------------------------------------------------//\n\nnamespace boost {\n\nnamespace type_traits_detail {\n\n    template <typename T, bool b>\n    struct add_rvalue_reference_helper\n    { typedef T   type; };\n\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n    template <typename T>\n    struct add_rvalue_reference_helper<T, true>\n    {\n        typedef T&&   type;\n    };\n#endif\n\n    template <typename T>\n    struct add_rvalue_reference_imp\n    {\n       typedef typename boost::type_traits_detail::add_rvalue_reference_helper\n                  <T, (is_void<T>::value == false && is_reference<T>::value == false) >::type type;\n    };\n\n}\n\ntemplate <class T> struct add_rvalue_reference\n{\n   typedef typename boost::type_traits_detail::add_rvalue_reference_imp<T>::type type;\n};\n\n}  // namespace boost\n\n#endif  // BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/add_volatile.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ADD_VOLATILE_HPP_INCLUDED\n#define BOOST_TT_ADD_VOLATILE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\nnamespace boost {\n\n// * convert a type T to volatile type - add_volatile<T>\n// this is not required since the result is always\n// the same as \"T volatile\", but it does suppress warnings\n// from some compilers:\n\n#if defined(BOOST_MSVC)\n// This bogus warning will appear when add_volatile is applied to a\n// const volatile reference because we can't detect const volatile\n// references with MSVC6.\n#   pragma warning(push)\n#   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored\n#endif \n\ntemplate <class T> struct add_volatile{ typedef T volatile type; };\n\n#if defined(BOOST_MSVC)\n#   pragma warning(pop)\n#endif \n\ntemplate <class T> struct add_volatile<T&>{ typedef T& type; };\n\n} // namespace boost\n\n#endif // BOOST_TT_ADD_VOLATILE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/aligned_storage.hpp",
    "content": "//-----------------------------------------------------------------------------\n// boost aligned_storage.hpp header file\n// See http://www.boost.org for updates, documentation, and revision history.\n//-----------------------------------------------------------------------------\n//\n// Copyright (c) 2002-2003\n// Eric Friedman, Itay Maman\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_TT_ALIGNED_STORAGE_HPP\n#define BOOST_TT_ALIGNED_STORAGE_HPP\n\n#include <cstddef> // for std::size_t\n\n#include \"boost/config.hpp\"\n#include \"boost/detail/workaround.hpp\"\n#include \"boost/type_traits/alignment_of.hpp\"\n#include \"boost/type_traits/type_with_alignment.hpp\"\n#include \"boost/type_traits/is_pod.hpp\"\n#include \"boost/type_traits/conditional.hpp\"\n\nnamespace boost {\n\nnamespace detail { namespace aligned_storage {\n\nBOOST_STATIC_CONSTANT(\n      std::size_t\n    , alignment_of_max_align = ::boost::alignment_of<boost::detail::max_align>::value\n    );\n\n//\n// To be TR1 conforming this must be a POD type:\n//\ntemplate <\n      std::size_t size_\n    , std::size_t alignment_\n>\nstruct aligned_storage_imp\n{\n    union data_t\n    {\n        char buf[size_];\n\n        typename ::boost::type_with_alignment<alignment_>::type align_;\n    } data_;\n    void* address() const { return const_cast<aligned_storage_imp*>(this); }\n};\ntemplate <std::size_t size>\nstruct aligned_storage_imp<size, std::size_t(-1)>\n{\n   union data_t\n   {\n      char buf[size];\n      ::boost::detail::max_align align_;\n   } data_;\n   void* address() const { return const_cast<aligned_storage_imp*>(this); }\n};\n\ntemplate< std::size_t alignment_ >\nstruct aligned_storage_imp<0u,alignment_>\n{\n    /* intentionally empty */\n    void* address() const { return 0; }\n};\n\n}} // namespace detail::aligned_storage\n\ntemplate <\n      std::size_t size_\n    , std::size_t alignment_ = std::size_t(-1)\n>\nclass aligned_storage : \n#ifndef __BORLANDC__\n   private \n#else\n   public\n#endif\n   ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> \n{\n \npublic: // constants\n\n    typedef ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;\n\n    BOOST_STATIC_CONSTANT(\n          std::size_t\n        , size = size_\n        );\n    BOOST_STATIC_CONSTANT(\n          std::size_t\n        , alignment = (\n              alignment_ == std::size_t(-1)\n            ? ::boost::detail::aligned_storage::alignment_of_max_align\n            : alignment_\n            )\n        );\n\nprivate: // noncopyable\n\n    aligned_storage(const aligned_storage&);\n    aligned_storage& operator=(const aligned_storage&);\n\npublic: // structors\n\n    aligned_storage()\n    {\n    }\n\n    ~aligned_storage()\n    {\n    }\n\npublic: // accessors\n\n    void* address()\n    {\n        return static_cast<type*>(this)->address();\n    }\n\n    const void* address() const\n    {\n        return static_cast<const type*>(this)->address();\n    }\n};\n\n//\n// Make sure that is_pod recognises aligned_storage<>::type\n// as a POD (Note that aligned_storage<> itself is not a POD):\n//\ntemplate <std::size_t size_, std::size_t alignment_>\nstruct is_pod< ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> > : public true_type{};\n\n} // namespace boost\n\n#endif // BOOST_ALIGNED_STORAGE_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/alignment_of.hpp",
    "content": "\n//  (C) Copyright John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED\n#define BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <cstddef>\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\n#ifdef BOOST_MSVC\n#   pragma warning(push)\n#   pragma warning(disable: 4121 4512) // alignment is sensitive to packing\n#endif\n#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)\n#pragma option push -Vx- -Ve-\n#endif\n\nnamespace boost {\n\ntemplate <typename T> struct alignment_of;\n\n// get the alignment of some arbitrary type:\nnamespace detail {\n\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4324) // structure was padded due to __declspec(align())\n#endif\ntemplate <typename T>\nstruct alignment_of_hack\n{\n    char c;\n    T t;\n    alignment_of_hack();\n};\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\ntemplate <unsigned A, unsigned S>\nstruct alignment_logic\n{\n    BOOST_STATIC_CONSTANT(std::size_t, value = A < S ? A : S);\n};\n\n\ntemplate< typename T >\nstruct alignment_of_impl\n{\n#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)\n    //\n    // With MSVC both the native __alignof operator\n    // and our own logic gets things wrong from time to time :-(\n    // Using a combination of the two seems to make the most of a bad job:\n    //\n    BOOST_STATIC_CONSTANT(std::size_t, value =\n        (::boost::detail::alignment_logic<\n            sizeof(::boost::detail::alignment_of_hack<T>) - sizeof(T),\n            __alignof(T)\n        >::value));\n#elif !defined(BOOST_ALIGNMENT_OF)\n    BOOST_STATIC_CONSTANT(std::size_t, value =\n        (::boost::detail::alignment_logic<\n            sizeof(::boost::detail::alignment_of_hack<T>) - sizeof(T),\n            sizeof(T)\n        >::value));\n#else\n   //\n   // We put this here, rather than in the definition of\n   // alignment_of below, because MSVC's __alignof doesn't\n   // always work in that context for some unexplained reason.\n   // (See type_with_alignment tests for test cases).\n   //\n   BOOST_STATIC_CONSTANT(std::size_t, value = BOOST_ALIGNMENT_OF(T));\n#endif\n};\n\n} // namespace detail\n\ntemplate <class T> struct alignment_of : public integral_constant<std::size_t, ::boost::detail::alignment_of_impl<T>::value>{};\n\n// references have to be treated specially, assume\n// that a reference is just a special pointer:\ntemplate <typename T> struct alignment_of<T&> : public alignment_of<T*>{};\n\n#ifdef __BORLANDC__\n// long double gives an incorrect value of 10 (!)\n// unless we do this...\nstruct long_double_wrapper{ long double ld; };\ntemplate<> struct alignment_of<long double> : public alignment_of<long_double_wrapper>{};\n#endif\n\n// void has to be treated specially:\ntemplate<> struct alignment_of<void> : integral_constant<std::size_t, 0>{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate<> struct alignment_of<void const> : integral_constant<std::size_t, 0>{};\ntemplate<> struct alignment_of<void const volatile> : integral_constant<std::size_t, 0>{};\ntemplate<> struct alignment_of<void volatile> : integral_constant<std::size_t, 0>{};\n#endif\n\n} // namespace boost\n\n#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)\n#pragma option pop\n#endif\n#ifdef BOOST_MSVC\n#   pragma warning(pop)\n#endif\n\n#endif // BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/alignment_traits.hpp",
    "content": "\n//  (C) Copyright John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ALIGNMENT_TRAITS_HPP_INCLUDED\n#define BOOST_TT_ALIGNMENT_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/alignment_of.hpp>\n#include <boost/type_traits/type_with_alignment.hpp>\n\n#endif // BOOST_TT_ALIGNMENT_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/arithmetic_traits.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  defines traits classes for arithmetic types:\n//  is_void, is_integral, is_float, is_arithmetic, is_fundamental.\n\n#ifndef BOOST_TT_ARITHMETIC_TRAITS_HPP_INCLUDED\n#define BOOST_TT_ARITHMETIC_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_float.hpp>\n#include <boost/type_traits/is_fundamental.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_void.hpp>\n\n#endif // BOOST_TT_ARITHMETIC_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/array_traits.hpp",
    "content": "//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_ARRAY_TRAITS_HPP_INCLUDED\n#define BOOST_TT_ARRAY_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/is_array.hpp>\n\n#endif // BOOST_TT_ARRAY_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/broken_compiler_spec.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_BROKEN_SPEC_HPP_INCLUDED\n#define BOOST_TT_BROKEN_SPEC_HPP_INCLUDED\n\n//\n// This header is deprecated and no longer used by type_traits:\n//\n#if defined(__GNUC__) || defined(_MSC_VER)\n# pragma message(\"NOTE: Use of this header (boost/type_traits/broken_compiler_spec.hpp) is deprecated\")\n#endif\n\n#endif // BOOST_TT_CONFIG_HPP_INCLUDED\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/common_type.hpp",
    "content": "#ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED\n\n//\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/config.hpp>\n#include <boost/type_traits/decay.hpp>\n#include <boost/type_traits/declval.hpp>\n\n#if defined(BOOST_NO_CXX11_DECLTYPE)\n#include <boost/type_traits/detail/common_type_impl.hpp>\n#endif\n\n#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\n#include <boost/type_traits/detail/mp_defer.hpp>\n#endif\n\nnamespace boost\n{\n\n// variadic common_type\n\n#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\n\ntemplate<class... T> struct common_type\n{\n};\n\n#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)\n\ntemplate<class... T> using common_type_t = typename common_type<T...>::type;\n\nnamespace type_traits_detail\n{\n\ntemplate<class T1, class T2, class... T> using common_type_fold = common_type_t<common_type_t<T1, T2>, T...>;\n\n} // namespace type_traits_detail\n\ntemplate<class T1, class T2, class... T>\nstruct common_type<T1, T2, T...>: type_traits_detail::mp_defer<type_traits_detail::common_type_fold, T1, T2, T...>\n{\n};\n\n#else\n\ntemplate<class T1, class T2, class... T>\nstruct common_type<T1, T2, T...>: common_type<typename common_type<T1, T2>::type, T...>\n{\n};\n\n#endif // !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)\n\n#else\n\ntemplate<\n    class T1 = void, class T2 = void, class T3 = void,\n    class T4 = void, class T5 = void, class T6 = void,\n    class T7 = void, class T8 = void, class T9 = void\n>\nstruct common_type: common_type<typename common_type<T1, T2>::type, T3, T4, T5, T6, T7, T8, T9>\n{\n};\n\n#endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\n\n// one argument\n\ntemplate<class T> struct common_type<T>: boost::decay<T>\n{\n};\n\n// two arguments\n\nnamespace type_traits_detail\n{\n\n// binary common_type\n\n#if !defined(BOOST_NO_CXX11_DECLTYPE)\n\n#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\n    \n#if !defined(BOOST_MSVC) || BOOST_MSVC > 1800\n\n// internal compiler error on msvc-12.0\n\ntemplate<class T1, class T2> using builtin_common_type = typename boost::decay<decltype( boost::declval<bool>()? boost::declval<T1>(): boost::declval<T2>() )>::type;\n\ntemplate<class T1, class T2> struct common_type_impl: mp_defer<builtin_common_type, T1, T2>\n{\n};\n\n#else\n\ntemplate<class T1, class T2> using builtin_common_type = decltype( boost::declval<bool>()? boost::declval<T1>(): boost::declval<T2>() );\n\ntemplate<class T1, class T2> struct common_type_impl_2: mp_defer<builtin_common_type, T1, T2>\n{\n};\n\ntemplate<class T1, class T2> using decay_common_type = typename boost::decay<typename common_type_impl_2<T1, T2>::type>::type;\n\ntemplate<class T1, class T2> struct common_type_impl: mp_defer<decay_common_type, T1, T2>\n{\n};\n\n#endif // !defined(BOOST_MSVC) || BOOST_MSVC > 1800\n\n#else\n\ntemplate<class T1, class T2> struct common_type_impl: boost::decay<decltype( boost::declval<bool>()? boost::declval<T1>(): boost::declval<T2>() )>\n{\n};\n\n#endif // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\n\n#endif // #if !defined(BOOST_NO_CXX11_DECLTYPE)\n\n// decay helper\n\ntemplate<class T1, class T2, class T1d = typename boost::decay<T1>::type, class T2d = typename boost::decay<T2>::type> struct common_type_decay_helper: boost::common_type<T1d, T2d>\n{\n};\n\ntemplate<class T1, class T2> struct common_type_decay_helper<T1, T2, T1, T2>: common_type_impl<T1, T2>\n{\n};\n\n} // type_traits_detail\n\ntemplate<class T1, class T2> struct common_type<T1, T2>: type_traits_detail::common_type_decay_helper<T1, T2>\n{\n};\n\n} // namespace boost\n\n#endif // #ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/composite_traits.hpp",
    "content": "//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  defines traits classes for composite types:\n//  is_array, is_pointer, is_reference, is_member_pointer, is_enum, is_union.\n//\n\n#ifndef BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED\n#define BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_member_pointer.hpp>\n#include <boost/type_traits/is_member_function_pointer.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/is_union.hpp>\n\n#endif // BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED\n\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/conditional.hpp",
    "content": "//  (C) Copyright John Maddock 2010.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_CONDITIONAL_HPP_INCLUDED\n#define BOOST_TT_CONDITIONAL_HPP_INCLUDED\n\nnamespace boost {\n\ntemplate <bool b, class T, class U> struct conditional { typedef T type; };\ntemplate <class T, class U> struct conditional<false, T, U> { typedef U type; };\n\n} // namespace boost\n\n\n#endif // BOOST_TT_CONDITIONAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/config.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_OLD_CONFIG_HPP_INCLUDED\n#define BOOST_TT_OLD_CONFIG_HPP_INCLUDED\n\n//\n// This header is deprecated and no longer used by type_traits:\n//\n#if defined(__GNUC__) || defined(_MSC_VER)\n# pragma message(\"NOTE: Use of this header (boost/type_traits/config.hpp) is deprecated\")\n#endif\n\n#endif // BOOST_TT_CONFIG_HPP_INCLUDED\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/conversion_traits.hpp",
    "content": "\n// Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n// Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)\n// Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED\n#define BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/is_convertible.hpp>\n\n#endif // BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/copy_cv.hpp",
    "content": "#ifndef BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED\n\n//\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_volatile.hpp>\n#include <boost/type_traits/conditional.hpp>\n\nnamespace boost\n{\n\ntemplate<class T, class U> struct copy_cv\n{\nprivate:\n\n    typedef typename boost::conditional<boost::is_const<U>::value, typename boost::add_const<T>::type, T>::type CT;\n\npublic:\n\n    typedef typename boost::conditional<boost::is_volatile<U>::value, typename boost::add_volatile<CT>::type, CT>::type type;\n};\n\n} // namespace boost\n\n#endif // #ifndef BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/cv_traits.hpp",
    "content": "//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  defines traits classes for cv-qualified types:\n//  is_const, is_volatile, remove_const, remove_volatile, remove_cv.\n\n#ifndef BOOST_TT_CV_TRAITS_HPP_INCLUDED\n#define BOOST_TT_CV_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_volatile.hpp>\n#include <boost/type_traits/add_cv.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/type_traits/remove_volatile.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n\n#endif // BOOST_TT_CV_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/decay.hpp",
    "content": "//  (C) Copyright John Maddock & Thorsten Ottosen 2005.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_DECAY_HPP_INCLUDED\n#define BOOST_TT_DECAY_HPP_INCLUDED\n\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/is_function.hpp>\n#include <boost/type_traits/remove_bounds.hpp>\n#include <boost/type_traits/add_pointer.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n\nnamespace boost \n{\n\n   namespace detail\n   {\n\n      template <class T, bool Array, bool Function> struct decay_imp { typedef typename remove_cv<T>::type type; };\n      template <class T> struct decay_imp<T, true, false> { typedef typename remove_bounds<T>::type* type; };\n      template <class T> struct decay_imp<T, false, true> { typedef T* type; };\n\n   }\n\n    template< class T >\n    struct decay\n    {\n    private:\n        typedef typename remove_reference<T>::type Ty;\n    public:\n       typedef typename boost::detail::decay_imp<Ty, boost::is_array<Ty>::value, boost::is_function<Ty>::value>::type type;\n    };\n    \n} // namespace boost\n\n\n#endif // BOOST_TT_DECAY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/declval.hpp",
    "content": "//  declval.hpp  -------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n#ifndef BOOST_TYPE_TRAITS_DECLVAL_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_DECLVAL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n//----------------------------------------------------------------------------//\n\n#include <boost/type_traits/add_rvalue_reference.hpp>\n\n//----------------------------------------------------------------------------//\n//                                                                            //\n//                           C++03 implementation of                          //\n//                   20.2.4 Function template declval [declval]               //\n//                          Written by Vicente J. Botet Escriba               //\n//                                                                            //\n// 1 The library provides the function template declval to simplify the\n// definition of expressions which occur as unevaluated operands.\n// 2 Remarks: If this function is used, the program is ill-formed.\n// 3 Remarks: The template parameter T of declval may be an incomplete type.\n// [ Example:\n//\n// template <class To, class From>\n// decltype(static_cast<To>(declval<From>())) convert(From&&);\n//\n// declares a function template convert which only participates in overloading\n// if the type From can be explicitly converted to type To. For another example\n// see class template common_type (20.9.7.6). -end example ]\n//----------------------------------------------------------------------------//\n\nnamespace boost {\n\n    template <typename T>\n    typename add_rvalue_reference<T>::type declval() BOOST_NOEXCEPT; // as unevaluated operand\n\n}  // namespace boost\n\n#endif  // BOOST_TYPE_TRAITS_DECLVAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/bool_trait_def.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n// $Source$\n// $Date$\n// $Revision$\n\n//\n// This header is deprecated and no longer used by type_traits:\n//\n#if defined(__GNUC__) || defined(_MSC_VER)\n# pragma message(\"NOTE: Use of this header (bool_trait_def.hpp) is deprecated\")\n#endif\n\n#include <boost/type_traits/detail/template_arity_spec.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/config.hpp>\n\n//\n// Unfortunately some libraries have started using this header without\n// cleaning up afterwards: so we'd better undef the macros just in case \n// they've been defined already....\n//\n#ifdef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL\n#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL\n#undef BOOST_TT_AUX_BOOL_C_BASE\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2\n#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1\n#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1\n#endif\n\n#ifndef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL\n#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) /**/\n#endif\n\n#ifndef BOOST_TT_AUX_BOOL_C_BASE\n#   define BOOST_TT_AUX_BOOL_C_BASE(C) : public ::boost::integral_constant<bool,C>\n#endif \n\n\n#define BOOST_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \\\ntemplate< typename T > struct trait \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n\\\nBOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \\\n/**/\n\n\n#define BOOST_TT_AUX_BOOL_TRAIT_DEF2(trait,T1,T2,C) \\\ntemplate< typename T1, typename T2 > struct trait \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n\\\nBOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,trait) \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_DEF3(trait,T1,T2,T3,C) \\\ntemplate< typename T1, typename T2, typename T3 > struct trait \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n\\\nBOOST_TT_AUX_TEMPLATE_ARITY_SPEC(3,trait) \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,C) \\\ntemplate<> struct trait< sp > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_SPEC2(trait,sp1,sp2,C) \\\ntemplate<> struct trait< sp1,sp2 > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(trait,sp,C) \\\ntemplate<> struct trait##_impl< sp > \\\n{ \\\npublic:\\\n    BOOST_STATIC_CONSTANT(bool, value = (C)); \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,sp1,sp2,C) \\\ntemplate<> struct trait##_impl< sp1,sp2 > \\\n{ \\\npublic:\\\n    BOOST_STATIC_CONSTANT(bool, value = (C)); \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(param,trait,sp,C) \\\ntemplate< param > struct trait< sp > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,sp,C) \\\ntemplate< param1, param2 > struct trait< sp > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \\\ntemplate< param > struct trait< sp1,sp2 > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(param1,param2,trait,sp1,sp2,C) \\\ntemplate< param1, param2 > struct trait< sp1,sp2 > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \\\ntemplate< param > struct trait##_impl< sp1,sp2 > \\\n{ \\\npublic:\\\n    BOOST_STATIC_CONSTANT(bool, value = (C)); \\\n}; \\\n/**/\n\n#ifndef BOOST_NO_CV_SPECIALIZATIONS\n#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp volatile,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const volatile,value) \\\n    /**/\n#else\n#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \\\n    /**/\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/bool_trait_undef.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n// $Source$\n// $Date$\n// $Revision$\n\n#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL\n#undef BOOST_TT_AUX_BOOL_C_BASE\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF3\n#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1\n#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/common_arithmetic_type.hpp",
    "content": "#ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_ARITHMETIC_TYPE_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_DETAIL_COMMON_ARITHMETIC_TYPE_HPP_INCLUDED\n\n//\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/config.hpp>\n\nnamespace boost\n{\n\nnamespace type_traits_detail\n{\n\ntemplate<int I> struct arithmetic_type;\n\n// Types bool, char, char16_t, char32_t, wchar_t,\n// and the signed and unsigned integer types are\n// collectively called integral types\n\ntemplate<> struct arithmetic_type<1>\n{\n    typedef bool type;\n    typedef char (&result_type) [1];\n};\n\ntemplate<> struct arithmetic_type<2>\n{\n    typedef char type;\n    typedef char (&result_type) [2];\n};\n\ntemplate<> struct arithmetic_type<3>\n{\n    typedef wchar_t type;\n    typedef char (&result_type) [3];\n};\n\n// There are five standard signed integer types:\n// “signed char”, “short int”, “int”, “long int”, and “long long int”.\n\ntemplate<> struct arithmetic_type<4>\n{\n    typedef signed char type;\n    typedef char (&result_type) [4];\n};\n\ntemplate<> struct arithmetic_type<5>\n{\n    typedef short type;\n    typedef char (&result_type) [5];\n};\n\ntemplate<> struct arithmetic_type<6>\n{\n    typedef int type;\n    typedef char (&result_type) [6];\n};\n\ntemplate<> struct arithmetic_type<7>\n{\n    typedef long type;\n    typedef char (&result_type) [7];\n};\n\ntemplate<> struct arithmetic_type<8>\n{\n    typedef boost::long_long_type type;\n    typedef char (&result_type) [8];\n};\n\n// For each of the standard signed integer types, there exists a corresponding\n// (but different) standard unsigned integer type: “unsigned char”, “unsigned short int”,\n// “unsigned int”, “unsigned long int”, and “unsigned long long int”\n\ntemplate<> struct arithmetic_type<9>\n{\n    typedef unsigned char type;\n    typedef char (&result_type) [9];\n};\n\ntemplate<> struct arithmetic_type<10>\n{\n    typedef unsigned short type;\n    typedef char (&result_type) [10];\n};\n\ntemplate<> struct arithmetic_type<11>\n{\n    typedef unsigned int type;\n    typedef char (&result_type) [11];\n};\n\ntemplate<> struct arithmetic_type<12>\n{\n    typedef unsigned long type;\n    typedef char (&result_type) [12];\n};\n\ntemplate<> struct arithmetic_type<13>\n{\n    typedef boost::ulong_long_type type;\n    typedef char (&result_type) [13];\n};\n\n// There are three floating point types: float, double, and long double.\n\ntemplate<> struct arithmetic_type<14>\n{\n    typedef float type;\n    typedef char (&result_type) [14];\n};\n\ntemplate<> struct arithmetic_type<15>\n{\n    typedef double type;\n    typedef char (&result_type) [15];\n};\n\ntemplate<> struct arithmetic_type<16>\n{\n    typedef long double type;\n    typedef char (&result_type) [16];\n};\n\n#if !defined( BOOST_NO_CXX11_CHAR16_T )\n\ntemplate<> struct arithmetic_type<17>\n{\n    typedef char16_t type;\n    typedef char (&result_type) [17];\n};\n\n#endif\n\n#if !defined( BOOST_NO_CXX11_CHAR32_T )\n\ntemplate<> struct arithmetic_type<18>\n{\n    typedef char32_t type;\n    typedef char (&result_type) [18];\n};\n\n#endif\n\n#if defined( BOOST_HAS_INT128 )\n\ntemplate<> struct arithmetic_type<19>\n{\n    typedef boost::int128_type type;\n    typedef char (&result_type) [19];\n};\n\ntemplate<> struct arithmetic_type<20>\n{\n    typedef boost::uint128_type type;\n    typedef char (&result_type) [20];\n};\n\n#endif\n\ntemplate<class T, class U> class common_arithmetic_type\n{\nprivate:\n\n    static arithmetic_type<1>::result_type select( arithmetic_type<1>::type );\n    static arithmetic_type<2>::result_type select( arithmetic_type<2>::type );\n    static arithmetic_type<3>::result_type select( arithmetic_type<3>::type );\n    static arithmetic_type<4>::result_type select( arithmetic_type<4>::type );\n    static arithmetic_type<5>::result_type select( arithmetic_type<5>::type );\n    static arithmetic_type<6>::result_type select( arithmetic_type<6>::type );\n    static arithmetic_type<7>::result_type select( arithmetic_type<7>::type );\n    static arithmetic_type<8>::result_type select( arithmetic_type<8>::type );\n    static arithmetic_type<9>::result_type select( arithmetic_type<9>::type );\n    static arithmetic_type<10>::result_type select( arithmetic_type<10>::type );\n    static arithmetic_type<11>::result_type select( arithmetic_type<11>::type );\n    static arithmetic_type<12>::result_type select( arithmetic_type<12>::type );\n    static arithmetic_type<13>::result_type select( arithmetic_type<13>::type );\n    static arithmetic_type<14>::result_type select( arithmetic_type<14>::type );\n    static arithmetic_type<15>::result_type select( arithmetic_type<15>::type );\n    static arithmetic_type<16>::result_type select( arithmetic_type<16>::type );\n\n#if !defined( BOOST_NO_CXX11_CHAR16_T )\n    static arithmetic_type<17>::result_type select( arithmetic_type<17>::type );\n#endif\n\n#if !defined( BOOST_NO_CXX11_CHAR32_T )\n    static arithmetic_type<18>::result_type select( arithmetic_type<18>::type );\n#endif\n\n#if defined( BOOST_HAS_INT128 )\n    static arithmetic_type<19>::result_type select( arithmetic_type<19>::type );\n    static arithmetic_type<20>::result_type select( arithmetic_type<20>::type );\n#endif\n\n    static bool cond();\n\npublic:\n\n    typedef typename arithmetic_type< sizeof(select( cond()? T(): U() )) >::type type;\n};\n\n} // namespace type_traits_detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_ARITHMETIC_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/common_type_impl.hpp",
    "content": "#ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMPL_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMPL_HPP_INCLUDED\n\n//\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/type_traits/detail/common_arithmetic_type.hpp>\n#include <boost/type_traits/detail/composite_pointer_type.hpp>\n#include <boost/type_traits/detail/composite_member_pointer_type.hpp>\n#include <boost/type_traits/type_identity.hpp>\n#include <boost/type_traits/is_class.hpp>\n#include <boost/type_traits/is_union.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_member_pointer.hpp>\n#include <boost/type_traits/conditional.hpp>\n\nnamespace boost\n{\n\nnamespace type_traits_detail\n{\n\n// the arguments to common_type_impl have already been passed through decay<>\n\ntemplate<class T, class U> struct common_type_impl;\n\n// same type\n\ntemplate<class T> struct common_type_impl<T, T>\n{\n    typedef T type;\n};\n\n// one of the operands is a class type, try conversions in both directions\n\ntemplate<class T, class U> struct ct_class\n{\n    BOOST_STATIC_CONSTANT( bool, ct = boost::is_class<T>::value || boost::is_union<T>::value );\n    BOOST_STATIC_CONSTANT( bool, cu = boost::is_class<U>::value || boost::is_union<U>::value );\n\n    BOOST_STATIC_CONSTANT( bool, value = ct || cu );\n};\n\ntemplate<class T, class U> struct common_type_impl3;\n\ntemplate<class T, class U> struct common_type_class: public boost::conditional<\n\n    boost::is_convertible<T, U>::value && !boost::is_convertible<U, T>::value,\n    boost::type_identity<U>,\n\n    typename boost::conditional<\n\n        boost::is_convertible<U, T>::value && !boost::is_convertible<T, U>::value,\n        boost::type_identity<T>,\n\n        common_type_impl3<T, U>\n    >::type\n>::type\n{\n};\n\ntemplate<class T, class U> struct common_type_impl: public boost::conditional<\n    ct_class<T, U>::value,\n    common_type_class<T, U>,\n    common_type_impl3<T, U> >::type\n{\n};\n\n// pointers\n\ntemplate<class T, class U> struct common_type_impl4;\n\ntemplate<class T, class U> struct common_type_impl3: public boost::conditional<\n    boost::is_pointer<T>::value || boost::is_pointer<U>::value,\n    composite_pointer_type<T, U>,\n    common_type_impl4<T, U> >::type\n{\n};\n\n// pointers to members\n\ntemplate<class T, class U> struct common_type_impl5;\n\ntemplate<class T, class U> struct common_type_impl4: public boost::conditional<\n    boost::is_member_pointer<T>::value || boost::is_member_pointer<U>::value,\n    composite_member_pointer_type<T, U>,\n    common_type_impl5<T, U> >::type\n{\n};\n\n// arithmetic types (including class types w/ conversions to arithmetic and enums)\n\ntemplate<class T, class U> struct common_type_impl5: public common_arithmetic_type<T, U>\n{\n};\n\n} // namespace type_traits_detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/composite_member_pointer_type.hpp",
    "content": "#ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_MEMBER_POINTER_TYPE_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_MEMBER_POINTER_TYPE_HPP_INCLUDED\n\n//\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/type_traits/detail/composite_pointer_type.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/type_traits/is_base_of.hpp>\n#include <boost/type_traits/conditional.hpp>\n#include <boost/config.hpp>\n#include <cstddef>\n\nnamespace boost\n{\n\nnamespace type_traits_detail\n{\n\ntemplate<class T, class U> struct composite_member_pointer_type;\n\n// nullptr_t\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\n#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )\n\ntemplate<class C, class T> struct composite_member_pointer_type<T C::*, decltype(nullptr)>\n{\n    typedef T C::* type;\n};\n\ntemplate<class C, class T> struct composite_member_pointer_type<decltype(nullptr), T C::*>\n{\n    typedef T C::* type;\n};\n\ntemplate<> struct composite_member_pointer_type<decltype(nullptr), decltype(nullptr)>\n{\n    typedef decltype(nullptr) type;\n};\n\n#else\n\ntemplate<class C, class T> struct composite_member_pointer_type<T C::*, std::nullptr_t>\n{\n    typedef T C::* type;\n};\n\ntemplate<class C, class T> struct composite_member_pointer_type<std::nullptr_t, T C::*>\n{\n    typedef T C::* type;\n};\n\ntemplate<> struct composite_member_pointer_type<std::nullptr_t, std::nullptr_t>\n{\n    typedef std::nullptr_t type;\n};\n\n#endif\n\n#endif // !defined( BOOST_NO_CXX11_NULLPTR )\n\ntemplate<class C1, class C2> struct common_member_class;\n\ntemplate<class C> struct common_member_class<C, C>\n{\n    typedef C type;\n};\n\ntemplate<class C1, class C2> struct common_member_class\n{\n    typedef typename boost::conditional<\n\n        boost::is_base_of<C1, C2>::value,\n        C2,\n        typename boost::conditional<boost::is_base_of<C2, C1>::value, C1, void>::type\n\n    >::type type;\n};\n\n//This indirection avoids compilation errors on some older \n//compilers like MSVC 7.1\ntemplate<class CT, class CB>\nstruct common_member_class_pointer_to_member\n{\n    typedef CT CB::* type;\n};\n\ntemplate<class C1, class T1, class C2, class T2> struct composite_member_pointer_type<T1 C1::*, T2 C2::*>\n{\nprivate:\n\n    typedef typename composite_pointer_type<T1*, T2*>::type CPT;\n    typedef typename boost::remove_pointer<CPT>::type CT;\n\n    typedef typename common_member_class<C1, C2>::type CB;\n\npublic:\n\n    typedef typename common_member_class_pointer_to_member<CT, CB>::type type;\n};\n\n} // namespace type_traits_detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_MEMBER_POINTER_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/composite_pointer_type.hpp",
    "content": "#ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_POINTER_TYPE_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_POINTER_TYPE_HPP_INCLUDED\n\n//\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/type_traits/copy_cv.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/is_base_of.hpp>\n#include <boost/config.hpp>\n#include <cstddef>\n\nnamespace boost\n{\n\nnamespace type_traits_detail\n{\n\ntemplate<class T, class U> struct composite_pointer_type;\n\n// same type\n\ntemplate<class T> struct composite_pointer_type<T*, T*>\n{\n    typedef T* type;\n};\n\n// nullptr_t\n\n#if !defined( BOOST_NO_CXX11_NULLPTR )\n\n#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )\n\ntemplate<class T> struct composite_pointer_type<T*, decltype(nullptr)>\n{\n    typedef T* type;\n};\n\ntemplate<class T> struct composite_pointer_type<decltype(nullptr), T*>\n{\n    typedef T* type;\n};\n\ntemplate<> struct composite_pointer_type<decltype(nullptr), decltype(nullptr)>\n{\n    typedef decltype(nullptr) type;\n};\n\n#else\n\ntemplate<class T> struct composite_pointer_type<T*, std::nullptr_t>\n{\n    typedef T* type;\n};\n\ntemplate<class T> struct composite_pointer_type<std::nullptr_t, T*>\n{\n    typedef T* type;\n};\n\ntemplate<> struct composite_pointer_type<std::nullptr_t, std::nullptr_t>\n{\n    typedef std::nullptr_t type;\n};\n\n#endif\n\n#endif // !defined( BOOST_NO_CXX11_NULLPTR )\n\nnamespace detail\n{\n\ntemplate<class T, class U> struct has_common_pointee\n{\nprivate:\n\n    typedef typename boost::remove_cv<T>::type T2;\n    typedef typename boost::remove_cv<U>::type U2;\n\npublic:\n\n    BOOST_STATIC_CONSTANT( bool, value =\n        (boost::is_same<T2, U2>::value)\n        || boost::is_void<T2>::value\n        || boost::is_void<U2>::value\n        || (boost::is_base_of<T2, U2>::value)\n        || (boost::is_base_of<U2, T2>::value) );\n};\n\ntemplate<class T, class U> struct common_pointee\n{\nprivate:\n\n    typedef typename boost::remove_cv<T>::type T2;\n    typedef typename boost::remove_cv<U>::type U2;\n\npublic:\n\n    typedef typename boost::conditional<\n\n        boost::is_same<T2, U2>::value || boost::is_void<T2>::value || boost::is_base_of<T2, U2>::value,\n        typename boost::copy_cv<T, U>::type,\n        typename boost::copy_cv<U, T>::type\n\n    >::type type;\n};\n\ntemplate<class T, class U> struct composite_pointer_impl\n{\nprivate:\n\n    typedef typename boost::remove_cv<T>::type T2;\n    typedef typename boost::remove_cv<U>::type U2;\n\npublic:\n\n    typedef typename boost::copy_cv<typename boost::copy_cv<typename composite_pointer_type<T2, U2>::type const, T>::type, U>::type type;\n};\n\n//Old compilers like MSVC-7.1 have problems using boost::conditional in\n//composite_pointer_type. Partially specializing on has_common_pointee<T, U>::value\n//seems to make their life easier\ntemplate<class T, class U, bool = has_common_pointee<T, U>::value >\nstruct composite_pointer_type_dispatch\n   : common_pointee<T, U>\n{};\n\ntemplate<class T, class U>\nstruct composite_pointer_type_dispatch<T, U, false>\n   : composite_pointer_impl<T, U>\n{};\n\n\n} // detail\n\n\ntemplate<class T, class U> struct composite_pointer_type<T*, U*>\n{\n    typedef typename detail::composite_pointer_type_dispatch<T, U>::type* type;\n};\n\n} // namespace type_traits_detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_POINTER_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/config.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_CONFIG_HPP_INCLUDED\n#define BOOST_TT_CONFIG_HPP_INCLUDED\n\n#ifndef BOOST_CONFIG_HPP\n#include <boost/config.hpp>\n#endif\n#include <boost/version.hpp>\n#include <boost/detail/workaround.hpp>\n\n//\n// whenever we have a conversion function with ellipses\n// it needs to be declared __cdecl to suppress compiler\n// warnings from MS and Borland compilers (this *must*\n// appear before we include is_same.hpp below):\n#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))\n#   define BOOST_TT_DECL __cdecl\n#else\n#   define BOOST_TT_DECL /**/\n#endif\n\n# if (BOOST_WORKAROUND(__MWERKS__, < 0x3000)                         \\\n    || BOOST_WORKAROUND(__IBMCPP__, < 600 )                         \\\n    || BOOST_WORKAROUND(__BORLANDC__, < 0x5A0)                      \\\n    || defined(__ghs)                                               \\\n    || BOOST_WORKAROUND(__HP_aCC, < 60700)           \\\n    || BOOST_WORKAROUND(MPW_CPLUS, BOOST_TESTED_AT(0x890))          \\\n    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)))       \\\n    && defined(BOOST_NO_IS_ABSTRACT)\n\n#   define BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION 1\n\n#endif\n\n#ifndef BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION\n# define BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION 1\n#endif\n\n//\n// define BOOST_TT_TEST_MS_FUNC_SIGS\n// when we want to test __stdcall etc function types with is_function etc\n// (Note, does not work with Borland, even though it does support __stdcall etc):\n//\n#if defined(_MSC_EXTENSIONS) && !defined(__BORLANDC__)\n#  define BOOST_TT_TEST_MS_FUNC_SIGS\n#endif\n\n//\n// define BOOST_TT_NO_CV_FUNC_TEST\n// if tests for cv-qualified member functions don't \n// work in is_member_function_pointer\n//\n#if BOOST_WORKAROUND(__MWERKS__, < 0x3000) || BOOST_WORKAROUND(__IBMCPP__, <= 600)\n#  define BOOST_TT_NO_CV_FUNC_TEST\n#endif\n\n//\n// Macros that have been deprecated, defined here for backwards compatibility:\n//\n#define BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(x)\n#define BOOST_TT_BROKEN_COMPILER_SPEC(x)\n\n#endif // BOOST_TT_CONFIG_HPP_INCLUDED\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/has_binary_operator.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron, Robert Stewart, Steven Watanabe & Roman Perepelitsa.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#include <boost/config.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/type_traits/is_base_of.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/is_fundamental.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\n// cannot include this header without getting warnings of the kind:\n// gcc:\n//    warning: value computed is not used\n//    warning: comparison between signed and unsigned integer expressions\n// msvc:\n//    warning C4018: '<' : signed/unsigned mismatch\n//    warning C4244: '+=' : conversion from 'double' to 'char', possible loss of data\n//    warning C4547: '*' : operator before comma has no effect; expected operator with side-effect\n//    warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)\n//    warning C4804: '<' : unsafe use of type 'bool' in operation\n//    warning C4805: '==' : unsafe mix of type 'bool' and type 'char' in operation\n// cannot find another implementation -> declared as system header to suppress these warnings.\n#if defined(__GNUC__)\n#   pragma GCC system_header\n#elif defined(BOOST_MSVC)\n#   pragma warning ( push )\n#   pragma warning ( disable : 4018 4244 4547 4800 4804 4805 4913)\n#   if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#       pragma warning ( disable : 6334)\n#   endif\n#endif\n\nnamespace boost {\nnamespace detail {\n\n// This namespace ensures that argument-dependent name lookup does not mess things up.\nnamespace BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl) {\n\n// 1. a function to have an instance of type T without requiring T to be default\n// constructible\ntemplate <typename T> T &make();\n\n\n// 2. we provide our operator definition for types that do not have one already\n\n// a type returned from operator BOOST_TT_TRAIT_OP when no such operator is\n// found in the type's own namespace (our own operator is used) so that we have\n// a means to know that our operator was used\nstruct no_operator { };\n\n// this class allows implicit conversions and makes the following operator\n// definition less-preferred than any other such operators that might be found\n// via argument-dependent name lookup\nstruct any { template <class T> any(T const&); };\n\n// when operator BOOST_TT_TRAIT_OP is not available, this one is used\nno_operator operator BOOST_TT_TRAIT_OP (const any&, const any&);\n\n\n// 3. checks if the operator returns void or not\n// conditions: Lhs!=void and Rhs!=void\n\n// we first redefine \"operator,\" so that we have no compilation error if\n// operator BOOST_TT_TRAIT_OP returns void and we can use the return type of\n// (lhs BOOST_TT_TRAIT_OP rhs, returns_void_t()) to deduce if\n// operator BOOST_TT_TRAIT_OP returns void or not:\n// - operator BOOST_TT_TRAIT_OP returns void   -> (lhs BOOST_TT_TRAIT_OP rhs, returns_void_t()) returns returns_void_t\n// - operator BOOST_TT_TRAIT_OP returns !=void -> (lhs BOOST_TT_TRAIT_OP rhs, returns_void_t()) returns int\nstruct returns_void_t { };\ntemplate <typename T> int operator,(const T&, returns_void_t);\ntemplate <typename T> int operator,(const volatile T&, returns_void_t);\n\n// this intermediate trait has member value of type bool:\n// - value==true -> operator BOOST_TT_TRAIT_OP returns void\n// - value==false -> operator BOOST_TT_TRAIT_OP does not return void\ntemplate < typename Lhs, typename Rhs >\nstruct operator_returns_void {\n   // overloads of function returns_void make the difference\n   // yes_type and no_type have different size by construction\n   static ::boost::type_traits::yes_type returns_void(returns_void_t);\n   static ::boost::type_traits::no_type returns_void(int);\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(::boost::type_traits::yes_type)==sizeof(returns_void((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>(),returns_void_t())))));\n};\n\n\n// 4. checks if the return type is Ret or Ret==dont_care\n// conditions: Lhs!=void and Rhs!=void\n\nstruct dont_care { };\n\ntemplate < typename Lhs, typename Rhs, typename Ret, bool Returns_void >\nstruct operator_returns_Ret;\n\ntemplate < typename Lhs, typename Rhs >\nstruct operator_returns_Ret < Lhs, Rhs, dont_care, true > {\n   BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate < typename Lhs, typename Rhs >\nstruct operator_returns_Ret < Lhs, Rhs, dont_care, false > {\n   BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate < typename Lhs, typename Rhs >\nstruct operator_returns_Ret < Lhs, Rhs, void, true > {\n   BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate < typename Lhs, typename Rhs >\nstruct operator_returns_Ret < Lhs, Rhs, void, false > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate < typename Lhs, typename Rhs, typename Ret >\nstruct operator_returns_Ret < Lhs, Rhs, Ret, true > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n// otherwise checks if it is convertible to Ret using the sizeof trick\n// based on overload resolution\n// condition: Ret!=void and Ret!=dont_care and the operator does not return void\ntemplate < typename Lhs, typename Rhs, typename Ret >\nstruct operator_returns_Ret < Lhs, Rhs, Ret, false > {\n   static ::boost::type_traits::yes_type is_convertible_to_Ret(Ret); // this version is preferred for types convertible to Ret\n   static ::boost::type_traits::no_type is_convertible_to_Ret(...); // this version is used otherwise\n\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(is_convertible_to_Ret(make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>()))==sizeof(::boost::type_traits::yes_type)));\n};\n\n\n// 5. checks for operator existence\n// condition: Lhs!=void and Rhs!=void\n\n// checks if our definition of operator BOOST_TT_TRAIT_OP is used or an other\n// existing one;\n// this is done with redefinition of \"operator,\" that returns no_operator or has_operator\nstruct has_operator { };\nno_operator operator,(no_operator, has_operator);\n\ntemplate < typename Lhs, typename Rhs >\nstruct operator_exists {\n   static ::boost::type_traits::yes_type s_check(has_operator); // this version is preferred when operator exists\n   static ::boost::type_traits::no_type s_check(no_operator); // this version is used otherwise\n\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(s_check(((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));\n};\n\n\n// 6. main trait: to avoid any compilation error, this class behaves\n// differently when operator BOOST_TT_TRAIT_OP(Lhs, Rhs) is forbidden by the\n// standard.\n// Forbidden_if is a bool that is:\n// - true when the operator BOOST_TT_TRAIT_OP(Lhs, Rhs) is forbidden by the standard\n//   (would yield compilation error if used)\n// - false otherwise\ntemplate < typename Lhs, typename Rhs, typename Ret, bool Forbidden_if >\nstruct trait_impl1;\n\ntemplate < typename Lhs, typename Rhs, typename Ret >\nstruct trait_impl1 < Lhs, Rhs, Ret, true > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate < typename Lhs, typename Rhs, typename Ret >\nstruct trait_impl1 < Lhs, Rhs, Ret, false > {\n   BOOST_STATIC_CONSTANT(bool,\n      value = (operator_exists < Lhs, Rhs >::value && operator_returns_Ret < Lhs, Rhs, Ret, operator_returns_void < Lhs, Rhs >::value >::value));\n};\n\n// some specializations needs to be declared for the special void case\ntemplate < typename Rhs, typename Ret >\nstruct trait_impl1 < void, Rhs, Ret, false > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate < typename Lhs, typename Ret >\nstruct trait_impl1 < Lhs, void, Ret, false > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate < typename Ret >\nstruct trait_impl1 < void, void, Ret, false > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n// defines some typedef for convenience\ntemplate < typename Lhs, typename Rhs, typename Ret >\nstruct trait_impl {\n   typedef typename ::boost::remove_reference<Lhs>::type Lhs_noref;\n   typedef typename ::boost::remove_reference<Rhs>::type Rhs_noref;\n   typedef typename ::boost::remove_cv<Lhs_noref>::type Lhs_nocv;\n   typedef typename ::boost::remove_cv<Rhs_noref>::type Rhs_nocv;\n   typedef typename ::boost::remove_cv< typename ::boost::remove_reference< typename ::boost::remove_pointer<Lhs_noref>::type >::type >::type Lhs_noptr;\n   typedef typename ::boost::remove_cv< typename ::boost::remove_reference< typename ::boost::remove_pointer<Rhs_noref>::type >::type >::type Rhs_noptr;\n   BOOST_STATIC_CONSTANT(bool, value = (trait_impl1 < Lhs_noref, Rhs_noref, Ret, BOOST_TT_FORBIDDEN_IF >::value));\n};\n\n} // namespace impl\n} // namespace detail\n\n// this is the accessible definition of the trait to end user\ntemplate <class Lhs, class Rhs=Lhs, class Ret=::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care>\nstruct BOOST_TT_TRAIT_NAME : public integral_constant<bool, (::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME, _impl)::trait_impl < Lhs, Rhs, Ret >::value)>{};\n\n} // namespace boost\n\n#if defined(BOOST_MSVC)\n#   pragma warning ( pop )\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/has_postfix_operator.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron, Robert Stewart, Steven Watanabe & Roman Perepelitsa.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#include <boost/config.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_fundamental.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\n// avoid warnings\n#if defined(__GNUC__)\n#   pragma GCC system_header\n#elif defined(BOOST_MSVC)\n#   pragma warning ( push )\n#   pragma warning ( disable : 4244 4913)\n#   if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#       pragma warning ( disable : 6334)\n#   endif\n#endif\n\nnamespace boost {\nnamespace detail {\n\n// This namespace ensures that argument-dependent name lookup does not mess things up.\nnamespace BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl) {\n\n// 1. a function to have an instance of type T without requiring T to be default\n// constructible\ntemplate <typename T> T &make();\n\n\n// 2. we provide our operator definition for types that do not have one already\n\n// a type returned from operator BOOST_TT_TRAIT_OP when no such operator is\n// found in the type's own namespace (our own operator is used) so that we have\n// a means to know that our operator was used\nstruct no_operator { };\n\n// this class allows implicit conversions and makes the following operator\n// definition less-preferred than any other such operators that might be found\n// via argument-dependent name lookup\nstruct any { template <class T> any(T const&); };\n\n// when operator BOOST_TT_TRAIT_OP is not available, this one is used\nno_operator operator BOOST_TT_TRAIT_OP (const any&, int);\n\n\n// 3. checks if the operator returns void or not\n// conditions: Lhs!=void\n\n// we first redefine \"operator,\" so that we have no compilation error if\n// operator BOOST_TT_TRAIT_OP returns void and we can use the return type of\n// (lhs BOOST_TT_TRAIT_OP, returns_void_t()) to deduce if\n// operator BOOST_TT_TRAIT_OP returns void or not:\n// - operator BOOST_TT_TRAIT_OP returns void   -> (lhs BOOST_TT_TRAIT_OP, returns_void_t()) returns returns_void_t\n// - operator BOOST_TT_TRAIT_OP returns !=void -> (lhs BOOST_TT_TRAIT_OP, returns_void_t()) returns int\nstruct returns_void_t { };\ntemplate <typename T> int operator,(const T&, returns_void_t);\ntemplate <typename T> int operator,(const volatile T&, returns_void_t);\n\n// this intermediate trait has member value of type bool:\n// - value==true -> operator BOOST_TT_TRAIT_OP returns void\n// - value==false -> operator BOOST_TT_TRAIT_OP does not return void\ntemplate < typename Lhs >\nstruct operator_returns_void {\n   // overloads of function returns_void make the difference\n   // yes_type and no_type have different size by construction\n   static ::boost::type_traits::yes_type returns_void(returns_void_t);\n   static ::boost::type_traits::no_type returns_void(int);\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(::boost::type_traits::yes_type)==sizeof(returns_void((make<Lhs>() BOOST_TT_TRAIT_OP,returns_void_t())))));\n};\n\n\n// 4. checks if the return type is Ret or Ret==dont_care\n// conditions: Lhs!=void\n\nstruct dont_care { };\n\ntemplate < typename Lhs, typename Ret, bool Returns_void >\nstruct operator_returns_Ret;\n\ntemplate < typename Lhs >\nstruct operator_returns_Ret < Lhs, dont_care, true > {\n   BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate < typename Lhs >\nstruct operator_returns_Ret < Lhs, dont_care, false > {\n   BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate < typename Lhs >\nstruct operator_returns_Ret < Lhs, void, true > {\n   BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate < typename Lhs >\nstruct operator_returns_Ret < Lhs, void, false > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate < typename Lhs, typename Ret >\nstruct operator_returns_Ret < Lhs, Ret, true > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n// otherwise checks if it is convertible to Ret using the sizeof trick\n// based on overload resolution\n// condition: Ret!=void and Ret!=dont_care and the operator does not return void\ntemplate < typename Lhs, typename Ret >\nstruct operator_returns_Ret < Lhs, Ret, false > {\n   static ::boost::type_traits::yes_type is_convertible_to_Ret(Ret); // this version is preferred for types convertible to Ret\n   static ::boost::type_traits::no_type is_convertible_to_Ret(...); // this version is used otherwise\n\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(is_convertible_to_Ret(make<Lhs>() BOOST_TT_TRAIT_OP))==sizeof(::boost::type_traits::yes_type)));\n};\n\n\n// 5. checks for operator existence\n// condition: Lhs!=void\n\n// checks if our definition of operator BOOST_TT_TRAIT_OP is used or an other\n// existing one;\n// this is done with redefinition of \"operator,\" that returns no_operator or has_operator\nstruct has_operator { };\nno_operator operator,(no_operator, has_operator);\n\ntemplate < typename Lhs >\nstruct operator_exists {\n   static ::boost::type_traits::yes_type s_check(has_operator); // this version is preferred when operator exists\n   static ::boost::type_traits::no_type s_check(no_operator); // this version is used otherwise\n\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(s_check(((make<Lhs>() BOOST_TT_TRAIT_OP),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));\n};\n\n\n// 6. main trait: to avoid any compilation error, this class behaves\n// differently when operator BOOST_TT_TRAIT_OP(Lhs) is forbidden by the\n// standard.\n// Forbidden_if is a bool that is:\n// - true when the operator BOOST_TT_TRAIT_OP(Lhs) is forbidden by the standard\n//   (would yield compilation error if used)\n// - false otherwise\ntemplate < typename Lhs, typename Ret, bool Forbidden_if >\nstruct trait_impl1;\n\ntemplate < typename Lhs, typename Ret >\nstruct trait_impl1 < Lhs, Ret, true > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate < typename Lhs, typename Ret >\nstruct trait_impl1 < Lhs, Ret, false > {\n   BOOST_STATIC_CONSTANT(bool,\n      value = (operator_exists < Lhs >::value && operator_returns_Ret < Lhs, Ret, operator_returns_void < Lhs >::value >::value));\n};\n\n// specialization needs to be declared for the special void case\ntemplate < typename Ret >\nstruct trait_impl1 < void, Ret, false > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n// defines some typedef for convenience\ntemplate < typename Lhs, typename Ret >\nstruct trait_impl {\n   typedef typename ::boost::remove_reference<Lhs>::type Lhs_noref;\n   typedef typename ::boost::remove_cv<Lhs_noref>::type Lhs_nocv;\n   typedef typename ::boost::remove_cv< typename ::boost::remove_reference< typename ::boost::remove_pointer<Lhs_noref>::type >::type >::type Lhs_noptr;\n   BOOST_STATIC_CONSTANT(bool, value = (trait_impl1 < Lhs_noref, Ret, BOOST_TT_FORBIDDEN_IF >::value));\n};\n\n} // namespace impl\n} // namespace detail\n\n// this is the accessible definition of the trait to end user\ntemplate <class Lhs, class Ret=::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care>\nstruct BOOST_TT_TRAIT_NAME : public integral_constant<bool, (::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME, _impl)::trait_impl< Lhs, Ret >::value)>{};\n\n} // namespace boost\n\n#if defined(BOOST_MSVC)\n#   pragma warning ( pop )\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/has_prefix_operator.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron, Robert Stewart, Steven Watanabe & Roman Perepelitsa.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#include <boost/config.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_fundamental.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\n// cannot include this header without getting warnings of the kind:\n// gcc:\n//    warning: value computed is not used\n//    warning: comparison between signed and unsigned integer expressions\n// msvc:\n//    warning C4146: unary minus operator applied to unsigned type, result still unsigned\n//    warning C4804: '-' : unsafe use of type 'bool' in operation\n// cannot find another implementation -> declared as system header to suppress these warnings.\n#if defined(__GNUC__)\n#   pragma GCC system_header\n#elif defined(BOOST_MSVC)\n#   pragma warning ( push )\n#   pragma warning ( disable : 4146 4804 4913 4244)\n#   if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#       pragma warning ( disable : 6334)\n#   endif\n#endif\n\n\n\nnamespace boost {\nnamespace detail {\n\n// This namespace ensures that argument-dependent name lookup does not mess things up.\nnamespace BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl) {\n\n// 1. a function to have an instance of type T without requiring T to be default\n// constructible\ntemplate <typename T> T &make();\n\n\n// 2. we provide our operator definition for types that do not have one already\n\n// a type returned from operator BOOST_TT_TRAIT_OP when no such operator is\n// found in the type's own namespace (our own operator is used) so that we have\n// a means to know that our operator was used\nstruct no_operator { };\n\n// this class allows implicit conversions and makes the following operator\n// definition less-preferred than any other such operators that might be found\n// via argument-dependent name lookup\nstruct any { template <class T> any(T const&); };\n\n// when operator BOOST_TT_TRAIT_OP is not available, this one is used\nno_operator operator BOOST_TT_TRAIT_OP (const any&);\n\n\n// 3. checks if the operator returns void or not\n// conditions: Rhs!=void\n\n// we first redefine \"operator,\" so that we have no compilation error if\n// operator BOOST_TT_TRAIT_OP returns void and we can use the return type of\n// (BOOST_TT_TRAIT_OP rhs, returns_void_t()) to deduce if\n// operator BOOST_TT_TRAIT_OP returns void or not:\n// - operator BOOST_TT_TRAIT_OP returns void   -> (BOOST_TT_TRAIT_OP rhs, returns_void_t()) returns returns_void_t\n// - operator BOOST_TT_TRAIT_OP returns !=void -> (BOOST_TT_TRAIT_OP rhs, returns_void_t()) returns int\nstruct returns_void_t { };\ntemplate <typename T> int operator,(const T&, returns_void_t);\ntemplate <typename T> int operator,(const volatile T&, returns_void_t);\n\n// this intermediate trait has member value of type bool:\n// - value==true -> operator BOOST_TT_TRAIT_OP returns void\n// - value==false -> operator BOOST_TT_TRAIT_OP does not return void\ntemplate < typename Rhs >\nstruct operator_returns_void {\n   // overloads of function returns_void make the difference\n   // yes_type and no_type have different size by construction\n   static ::boost::type_traits::yes_type returns_void(returns_void_t);\n   static ::boost::type_traits::no_type returns_void(int);\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(::boost::type_traits::yes_type)==sizeof(returns_void((BOOST_TT_TRAIT_OP make<Rhs>(),returns_void_t())))));\n};\n\n\n// 4. checks if the return type is Ret or Ret==dont_care\n// conditions: Rhs!=void\n\nstruct dont_care { };\n\ntemplate < typename Rhs, typename Ret, bool Returns_void >\nstruct operator_returns_Ret;\n\ntemplate < typename Rhs >\nstruct operator_returns_Ret < Rhs, dont_care, true > {\n   BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate < typename Rhs >\nstruct operator_returns_Ret < Rhs, dont_care, false > {\n   BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate < typename Rhs >\nstruct operator_returns_Ret < Rhs, void, true > {\n   BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate < typename Rhs >\nstruct operator_returns_Ret < Rhs, void, false > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate < typename Rhs, typename Ret >\nstruct operator_returns_Ret < Rhs, Ret, true > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n// otherwise checks if it is convertible to Ret using the sizeof trick\n// based on overload resolution\n// condition: Ret!=void and Ret!=dont_care and the operator does not return void\ntemplate < typename Rhs, typename Ret >\nstruct operator_returns_Ret < Rhs, Ret, false > {\n   static ::boost::type_traits::yes_type is_convertible_to_Ret(Ret); // this version is preferred for types convertible to Ret\n   static ::boost::type_traits::no_type is_convertible_to_Ret(...); // this version is used otherwise\n\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(is_convertible_to_Ret(BOOST_TT_TRAIT_OP make<Rhs>()))==sizeof(::boost::type_traits::yes_type)));\n};\n\n\n// 5. checks for operator existence\n// condition: Rhs!=void\n\n// checks if our definition of operator BOOST_TT_TRAIT_OP is used or an other\n// existing one;\n// this is done with redefinition of \"operator,\" that returns no_operator or has_operator\nstruct has_operator { };\nno_operator operator,(no_operator, has_operator);\n\ntemplate < typename Rhs >\nstruct operator_exists {\n   static ::boost::type_traits::yes_type s_check(has_operator); // this version is preferred when operator exists\n   static ::boost::type_traits::no_type s_check(no_operator); // this version is used otherwise\n\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(s_check(((BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));\n};\n\n\n// 6. main trait: to avoid any compilation error, this class behaves\n// differently when operator BOOST_TT_TRAIT_OP(Rhs) is forbidden by the\n// standard.\n// Forbidden_if is a bool that is:\n// - true when the operator BOOST_TT_TRAIT_OP(Rhs) is forbidden by the standard\n//   (would yield compilation error if used)\n// - false otherwise\ntemplate < typename Rhs, typename Ret, bool Forbidden_if >\nstruct trait_impl1;\n\ntemplate < typename Rhs, typename Ret >\nstruct trait_impl1 < Rhs, Ret, true > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate < typename Rhs, typename Ret >\nstruct trait_impl1 < Rhs, Ret, false > {\n   BOOST_STATIC_CONSTANT(bool,\n      value = (operator_exists < Rhs >::value && operator_returns_Ret < Rhs, Ret, operator_returns_void < Rhs >::value >::value));\n};\n\n// specialization needs to be declared for the special void case\ntemplate < typename Ret >\nstruct trait_impl1 < void, Ret, false > {\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n// defines some typedef for convenience\ntemplate < typename Rhs, typename Ret >\nstruct trait_impl {\n   typedef typename ::boost::remove_reference<Rhs>::type Rhs_noref;\n   typedef typename ::boost::remove_cv<Rhs_noref>::type Rhs_nocv;\n   typedef typename ::boost::remove_cv< typename ::boost::remove_reference< typename ::boost::remove_pointer<Rhs_noref>::type >::type >::type Rhs_noptr;\n   BOOST_STATIC_CONSTANT(bool, value = (trait_impl1 < Rhs_noref, Ret, BOOST_TT_FORBIDDEN_IF >::value));\n};\n\n} // namespace impl\n} // namespace detail\n\n// this is the accessible definition of the trait to end user\ntemplate <class Rhs, class Ret=::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care>\nstruct BOOST_TT_TRAIT_NAME : public integral_constant<bool, (::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME, _impl)::trait_impl < Rhs, Ret >::value)>{};\n\n} // namespace boost\n\n#if defined(BOOST_MSVC)\n#   pragma warning ( pop )\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/ice_and.hpp",
    "content": "//  (C) Copyright John Maddock and Steve Cleary 2000.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED\n#define BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n//\n// This header is deprecated and no longer used by type_traits:\n//\n#if defined(__GNUC__) || defined(_MSC_VER)\n# pragma message(\"NOTE: Use of this header (ice_and.hpp) is deprecated\")\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <bool b1, bool b2, bool b3 = true, bool b4 = true, bool b5 = true, bool b6 = true, bool b7 = true>\nstruct ice_and;\n\ntemplate <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>\nstruct ice_and\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate <>\nstruct ice_and<true, true, true, true, true, true, true>\n{\n    BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/ice_eq.hpp",
    "content": "//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED\n#define BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n//\n// This header is deprecated and no longer used by type_traits:\n//\n#if defined(__GNUC__) || defined(_MSC_VER)\n# pragma message(\"NOTE: Use of this header (ice_eq.hpp) is deprecated\")\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <int b1, int b2>\nstruct ice_eq\n{\n    BOOST_STATIC_CONSTANT(bool, value = (b1 == b2));\n};\n\ntemplate <int b1, int b2>\nstruct ice_ne\n{\n    BOOST_STATIC_CONSTANT(bool, value = (b1 != b2));\n};\n\n#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION\ntemplate <int b1, int b2> bool const ice_eq<b1,b2>::value;\ntemplate <int b1, int b2> bool const ice_ne<b1,b2>::value;\n#endif\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/ice_not.hpp",
    "content": "//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED\n#define BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n//\n// This header is deprecated and no longer used by type_traits:\n//\n#if defined(__GNUC__) || defined(_MSC_VER)\n# pragma message(\"NOTE: Use of this header (ice_not.hpp) is deprecated\")\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <bool b>\nstruct ice_not\n{\n    BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate <>\nstruct ice_not<true>\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/ice_or.hpp",
    "content": "//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED\n#define BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n//\n// This header is deprecated and no longer used by type_traits:\n//\n#if defined(__GNUC__) || defined(_MSC_VER)\n# pragma message(\"NOTE: Use of this header (ice_or.hpp) is deprecated\")\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false>\nstruct ice_or;\n\ntemplate <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>\nstruct ice_or\n{\n    BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate <>\nstruct ice_or<false, false, false, false, false, false, false>\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/is_function_ptr_helper.hpp",
    "content": "\n//  Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n//  Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED\n#define BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED\n\n#if defined(BOOST_TT_PREPROCESSING_MODE)\n//\n// Hide these #include from dependency analysers as\n// these are required in maintenance mode only:\n//\n#define PP1 <boost/preprocessor/iterate.hpp>\n#include PP1\n#undef PP1\n#define PP1 <boost/preprocessor/enum_params.hpp>\n#include PP1\n#undef PP1\n#define PP1 <boost/preprocessor/comma_if.hpp>\n#include PP1\n#undef PP1\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <class R>\nstruct is_function_ptr_helper\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n#if !defined(BOOST_TT_PREPROCESSING_MODE)\n// preprocessor-generated part, don't edit by hand!\n\ntemplate <class R >\nstruct is_function_ptr_helper<R (*)()> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R >\nstruct is_function_ptr_helper<R (*)( ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0>\nstruct is_function_ptr_helper<R (*)( T0)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0>\nstruct is_function_ptr_helper<R (*)( T0 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1>\nstruct is_function_ptr_helper<R (*)( T0 , T1)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1>\nstruct is_function_ptr_helper<R (*)( T0 , T1 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)> { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#else\n\n#undef BOOST_STATIC_CONSTANT\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3, (0, 25, \"boost/type_traits/detail/is_function_ptr_helper.hpp\"))\n#include BOOST_PP_ITERATE()\n\n#endif // BOOST_TT_PREPROCESSING_MODE\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)\n\ntemplate <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_function_ptr_helper<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))> { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_function_ptr_helper<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#endif\n#undef BOOST_PP_COUNTER\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/is_function_ptr_tester.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//  Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED\n#define BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED\n\n#include <boost/type_traits/detail/yes_no_type.hpp>\n\n#if defined(BOOST_TT_PREPROCESSING_MODE)\n//\n// Hide include dependencies from analysers since they're\n// only require in maintenance mode:\n//\n#define PP1 <boost/preprocessor/iterate.hpp>\n#define PP2 <boost/preprocessor/enum_params.hpp>\n#define PP3 <boost/preprocessor/comma_if.hpp>\n#include PP1\n#include PP2\n#include PP3\n#undef PP1\n#undef PP2\n#undef PP3\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\n// Note it is acceptable to use ellipsis here, since the argument will\n// always be a pointer type of some sort (JM 2005/06/04):\nno_type BOOST_TT_DECL is_function_ptr_tester(...);\n\n#if !defined(BOOST_TT_PREPROCESSING_MODE)\n// pre-processed code, don't edit, try GNU cpp with \n// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename\n\ntemplate <class R >\nyes_type is_function_ptr_tester(R (*)());\ntemplate <class R >\nyes_type is_function_ptr_tester(R (*)( ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R >\nyes_type is_function_ptr_tester(R (__stdcall*)());\n#ifndef _MANAGED\ntemplate <class R >\nyes_type is_function_ptr_tester(R (__fastcall*)());\n#endif\ntemplate <class R >\nyes_type is_function_ptr_tester(R (__cdecl*)());\n#endif\ntemplate <class R , class T0 >\nyes_type is_function_ptr_tester(R (*)( T0));\ntemplate <class R , class T0 >\nyes_type is_function_ptr_tester(R (*)( T0 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0));\n#ifndef _MANAGED\ntemplate <class R , class T0 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0));\n#endif\ntemplate <class R , class T0 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0));\n#endif\ntemplate <class R , class T0 , class T1 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1));\ntemplate <class R , class T0 , class T1 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1));\n#endif\ntemplate <class R , class T0 , class T1 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2));\ntemplate <class R , class T0 , class T1 , class T2 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));\n#ifndef _MANAGED\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));\n#endif\n#else\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3, (0, 25, \"boost/type_traits/detail/is_function_ptr_tester.hpp\"))\n#include BOOST_PP_ITERATE()\n\n#endif // BOOST_TT_PREPROCESSING_MODE\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)\n#undef __stdcall\n#undef __fastcall\n#undef __cdecl\n\ntemplate <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));\n@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));\n@#endif\n@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));\n@#ifndef _MANAGED\ntemplate <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));\n@#endif\ntemplate <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_function_ptr_tester(R (__cdecl*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));\n@#endif\n\n#undef BOOST_PP_COUNTER\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//  Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED\n#define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n#if defined(BOOST_TT_PREPROCESSING_MODE)\n//\n// Maintenance mode, hide include dependencies\n// from trackers:\n//\n#define PPI <boost/preprocessor/iterate.hpp>\n#include PPI\n#undef PPI\n#define PPI <boost/preprocessor/enum_params.hpp>\n#include PPI\n#undef PPI\n#define PPI <boost/preprocessor/comma_if.hpp>\n#include PPI\n#undef PPI\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <typename T>\nstruct is_mem_fun_pointer_impl\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n#if !defined(BOOST_TT_PREPROCESSING_MODE)\n// pre-processed code, don't edit, try GNU cpp with \n// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)() > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)( ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)() const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)() volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)() const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)( ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)( ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)( ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) > { BOOST_STATIC_CONSTANT(bool, value = true); };\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#else\n\n#undef BOOST_STATIC_CONSTANT\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3, (0, 25, \"boost/type_traits/detail/is_mem_fun_pointer_impl.hpp\"))\n#include BOOST_PP_ITERATE()\n\n#endif // BOOST_TT_PREPROCESSING_MODE\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#endif\n\n@#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#endif\n@#endif\n\n#undef BOOST_PP_COUNTER\n#endif // BOOST_PP_IS_ITERATING\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//  Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED\n#define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED\n\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/detail/config.hpp>\n\n#if defined(BOOST_TT_PREPROCESSING_MODE)\n//\n// Maintentance mode, hide include dependencies\n// from dependency trackers:\n//\n#define PPI <boost/preprocessor/iterate.hpp>\n#include PPI\n#undef PPI\n#define PPI <boost/preprocessor/enum_params.hpp>\n#include PPI\n#undef PPI\n#define <boost/preprocessor/comma_if.hpp>\n#include PPI\n#undef\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\nno_type BOOST_TT_DECL is_mem_fun_pointer_tester(...);\n\n#if !defined(BOOST_TT_PREPROCESSING_MODE)\n// pre-processed code, don't edit, try GNU cpp with \n// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)());\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() volatile);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const volatile);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...));\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) volatile);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)());\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() volatile);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)());\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() volatile);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const volatile);\n\n#endif\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)());\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() volatile);\n\ntemplate <class R, class T >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const volatile);\n\n#endif\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0));\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) volatile);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const volatile);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...));\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) volatile);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0));\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) volatile);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0));\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) volatile);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0));\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) volatile);\n\ntemplate <class R, class T , class T0 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1));\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) volatile);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...));\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1));\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) volatile);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1));\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) volatile);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1));\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) volatile);\n\ntemplate <class R, class T , class T0 , class T1 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);\n\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);\n\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);\n#ifdef BOOST_TT_TEST_MS_FUNC_SIGS\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);\n\n#ifndef _MANAGED\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);\n\n#endif\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);\n\n#endif\n\n#else\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3, (0, 25, \"boost/type_traits/detail/is_mem_fun_pointer_tester.hpp\"))\n#include BOOST_PP_ITERATE()\n\n#endif // BOOST_TT_PREPROCESSING_MODE\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)\n#undef __stdcall\n#undef __fastcall\n#undef __cdecl\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);\n\n@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile);\n@#endif\n@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS // Other calling conventions used by MS compatible compilers:\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);\n\n@#ifndef _MANAGED\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);\n\n@#endif\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >\nyes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);\n\n@#endif\n\n#undef BOOST_PP_COUNTER\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/mp_defer.hpp",
    "content": "#ifndef BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED\n\n//\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/type_traits/conditional.hpp>\n\nnamespace boost\n{\n\nnamespace type_traits_detail\n{\n\n// mp_valid\n// implementation by Bruno Dutra (by the name is_evaluable)\n\ntemplate<template<class...> class F, class... T>\nstruct mp_valid_impl\n{\n    template<template<class...> class G, class = G<T...>>\n    static boost::true_type check(int);\n\n    template<template<class...> class>\n    static boost::false_type check(...);\n\n    using type = decltype(check<F>(0));\n};\n\ntemplate<template<class...> class F, class... T>\nusing mp_valid = typename mp_valid_impl<F, T...>::type;\n\n// mp_defer\n\nstruct mp_empty\n{\n};\n\ntemplate<template<class...> class F, class... T> struct mp_defer_impl\n{\n    using type = F<T...>;\n};\n\ntemplate<template<class...> class F, class... T> using mp_defer = typename boost::conditional<mp_valid<F, T...>::value, mp_defer_impl<F, T...>, mp_empty>::type;\n\n} // namespace type_traits_detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/template_arity_spec.hpp",
    "content": "// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n//\n// This header is deprecated and no longer used by type_traits:\n//\n#if defined(__GNUC__) || defined(_MSC_VER)\n# pragma message(\"NOTE: Use of this header (template_arity_spec.hpp) is deprecated\")\n#endif\n\n#   define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/detail/yes_no_type.hpp",
    "content": "\n//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  macros and helpers for working with integral-constant-expressions.\n\n#ifndef BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED\n#define BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED\n\nnamespace boost {\nnamespace type_traits {\n\ntypedef char yes_type;\nstruct no_type\n{\n   char padding[8];\n};\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/extent.hpp",
    "content": "\n//  (C) Copyright John Maddock 2005.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_EXTENT_HPP_INCLUDED\n#define BOOST_TT_EXTENT_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost {\n\nnamespace detail{\n\n#if defined( __CODEGEARC__ )\n    // wrap the impl as main trait provides additional MPL lambda support\n    template < typename T, std::size_t N >\n    struct extent_imp {\n        static const std::size_t value = __array_extent(T, N);\n    };\n\n#else\n\ntemplate <class T, std::size_t N>\nstruct extent_imp\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = 0);\n};\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\ntemplate <class T, std::size_t R, std::size_t N>\nstruct extent_imp<T[R], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));\n};\n\ntemplate <class T, std::size_t R, std::size_t N>\nstruct extent_imp<T const[R], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));\n};\n\ntemplate <class T, std::size_t R, std::size_t N>\nstruct extent_imp<T volatile[R], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));\n};\n\ntemplate <class T, std::size_t R, std::size_t N>\nstruct extent_imp<T const volatile[R], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));\n};\n\ntemplate <class T, std::size_t R>\nstruct extent_imp<T[R],0>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = R);\n};\n\ntemplate <class T, std::size_t R>\nstruct extent_imp<T const[R], 0>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = R);\n};\n\ntemplate <class T, std::size_t R>\nstruct extent_imp<T volatile[R], 0>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = R);\n};\n\ntemplate <class T, std::size_t R>\nstruct extent_imp<T const volatile[R], 0>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = R);\n};\n\n#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) && !defined(__MWERKS__)\ntemplate <class T, std::size_t N>\nstruct extent_imp<T[], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));\n};\ntemplate <class T, std::size_t N>\nstruct extent_imp<T const[], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));\n};\ntemplate <class T, std::size_t N>\nstruct extent_imp<T volatile[], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));\n};\ntemplate <class T, std::size_t N>\nstruct extent_imp<T const volatile[], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));\n};\ntemplate <class T>\nstruct extent_imp<T[], 0>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = 0);\n};\ntemplate <class T>\nstruct extent_imp<T const[], 0>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = 0);\n};\ntemplate <class T>\nstruct extent_imp<T volatile[], 0>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = 0);\n};\ntemplate <class T>\nstruct extent_imp<T const volatile[], 0>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = 0);\n};\n#endif\n#endif\n\n#endif  // non-CodeGear implementation\n}   // ::boost::detail\n\ntemplate <class T, std::size_t N = 0>\nstruct extent\n   : public ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value>\n{\n};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/floating_point_promotion.hpp",
    "content": "// Copyright 2005 Alexander Nasonov.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef FILE_boost_type_traits_floating_point_promotion_hpp_INCLUDED\n#define FILE_boost_type_traits_floating_point_promotion_hpp_INCLUDED\n\nnamespace boost {\n\n   template<class T> struct floating_point_promotion { typedef T type; };\n   template<> struct floating_point_promotion<float> { typedef double type; };\n   template<> struct floating_point_promotion<float const> { typedef double const type; };\n   template<> struct floating_point_promotion<float volatile>{ typedef double volatile type; };\n   template<> struct floating_point_promotion<float const volatile> { typedef double const volatile type; };\n\n}\n\n#endif // #ifndef FILE_boost_type_traits_floating_point_promotion_hpp_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/function_traits.hpp",
    "content": "\n//  Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED\n#define BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/is_function.hpp>\n#include <boost/type_traits/add_pointer.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\ntemplate<typename Function> struct function_traits_helper;\n\ntemplate<typename R>\nstruct function_traits_helper<R (*)(void)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 0);\n  typedef R result_type;\n};\n\ntemplate<typename R, typename T1>\nstruct function_traits_helper<R (*)(T1)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 1);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T1 argument_type;\n};\n\ntemplate<typename R, typename T1, typename T2>\nstruct function_traits_helper<R (*)(T1, T2)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 2);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T1 first_argument_type;\n  typedef T2 second_argument_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3>\nstruct function_traits_helper<R (*)(T1, T2, T3)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 3);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 4);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 5);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 6);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 7);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n  typedef T7 arg7_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7, typename T8>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 8);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n  typedef T7 arg7_type;\n  typedef T8 arg8_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7, typename T8, typename T9>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 9);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n  typedef T7 arg7_type;\n  typedef T8 arg8_type;\n  typedef T9 arg9_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7, typename T8, typename T9,\n         typename T10>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 10);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n  typedef T7 arg7_type;\n  typedef T8 arg8_type;\n  typedef T9 arg9_type;\n  typedef T10 arg10_type;\n};\n\n} // end namespace detail\n\ntemplate<typename Function>\nstruct function_traits : \n  public boost::detail::function_traits_helper<typename boost::add_pointer<Function>::type>\n{\n};\n\n}\n\n#endif // BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_bit_and.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_BIT_AND_HPP_INCLUDED\n#define BOOST_TT_HAS_BIT_AND_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_bit_and\n#define BOOST_TT_TRAIT_OP &\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n          )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_bit_and_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_BIT_AND_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_BIT_AND_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_bit_and_assign\n#define BOOST_TT_TRAIT_OP &=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         (\\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n          )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_bit_or.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_BIT_OR_HPP_INCLUDED\n#define BOOST_TT_HAS_BIT_OR_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_bit_or\n#define BOOST_TT_TRAIT_OP |\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n          )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_bit_or_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_BIT_OR_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_BIT_OR_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_bit_or_assign\n#define BOOST_TT_TRAIT_OP |=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n          )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_bit_xor.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_BIT_XOR_HPP_INCLUDED\n#define BOOST_TT_HAS_BIT_XOR_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_bit_xor\n#define BOOST_TT_TRAIT_OP ^\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n         )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_bit_xor_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_BIT_XOR_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_BIT_XOR_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_bit_xor_assign\n#define BOOST_TT_TRAIT_OP ^=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n          )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_complement.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_COMPLEMENT_HPP_INCLUDED\n#define BOOST_TT_HAS_COMPLEMENT_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_complement\n#define BOOST_TT_TRAIT_OP ~\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* pointer */\\\n      ::boost::is_pointer< Rhs_noref >::value || \\\n      /* fundamental non integral */\\\n      (\\\n         ::boost::is_fundamental< Rhs_noref >::value && \\\n         (!  ::boost::is_integral< Rhs_noref >::value )\\\n      )\\\n   )\n\n\n#include <boost/type_traits/detail/has_prefix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_dereference.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_DEREFERENCE_HPP_INCLUDED\n#define BOOST_TT_HAS_DEREFERENCE_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_dereference\n#define BOOST_TT_TRAIT_OP *\n#define BOOST_TT_FORBIDDEN_IF\\\n   /* void* or fundamental */\\\n   (\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_void< Rhs_noptr >::value\\\n      ) || \\\n      ::boost::is_fundamental< Rhs_nocv >::value\\\n   )\n\n\n#include <boost/type_traits/detail/has_prefix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_divides.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_DIVIDES_HPP_INCLUDED\n#define BOOST_TT_HAS_DIVIDES_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_divides\n#define BOOST_TT_TRAIT_OP /\n#define BOOST_TT_FORBIDDEN_IF\\\n   /* pointer with pointer or fundamental */\\\n   (\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ( \\\n            ::boost::is_fundamental< Rhs_nocv >::value || \\\n            ::boost::is_pointer< Rhs_noref >::value\\\n         )\\\n      )||\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ( \\\n            ::boost::is_fundamental< Lhs_nocv >::value || \\\n            ::boost::is_pointer< Lhs_noref >::value\\\n          )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_divides_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_DIVIDES_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_DIVIDES_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_divides_assign\n#define BOOST_TT_TRAIT_OP /=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Lhs==const and Rhs==fundamental */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_const< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and (Rhs==fundamental or Rhs==pointer) */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ( \\\n            ::boost::is_fundamental< Rhs_nocv >::value || \\\n            ::boost::is_pointer< Rhs_noref >::value\\\n          )\\\n      )||\\\n      /* Rhs==pointer and (Lhs==fundamental or Lhs==pointer) */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ( \\\n            ::boost::is_fundamental< Lhs_nocv >::value || \\\n            ::boost::is_pointer< Lhs_noref >::value\\\n          )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_equal_to.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_EQUAL_TO_HPP_INCLUDED\n#define BOOST_TT_HAS_EQUAL_TO_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_equal_to\n#define BOOST_TT_TRAIT_OP ==\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Rhs==pointer and Lhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         (! \\\n            (\\\n               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \\\n               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_void< Lhs_noptr >::value || \\\n               ::boost::is_void< Rhs_noptr >::value\\\n            )\\\n         )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_greater.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_GREATER_HPP_INCLUDED\n#define BOOST_TT_HAS_GREATER_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_greater\n#define BOOST_TT_TRAIT_OP >\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Rhs==pointer and Lhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         (! \\\n            ( \\\n               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \\\n               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_void< Lhs_noptr >::value || \\\n               ::boost::is_void< Rhs_noptr >::value\\\n            )\\\n         )\\\n      )\\\n   )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_greater_equal.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_GREATER_EQUAL_HPP_INCLUDED\n#define BOOST_TT_HAS_GREATER_EQUAL_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_greater_equal\n#define BOOST_TT_TRAIT_OP >=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Rhs==pointer and Lhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         (! \\\n            ( \\\n               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \\\n               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_void< Lhs_noptr >::value || \\\n               ::boost::is_void< Rhs_noptr >::value\\\n            )\\\n         )\\\n      )\\\n   )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_left_shift.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_LEFT_SHIFT_HPP_INCLUDED\n#define BOOST_TT_HAS_LEFT_SHIFT_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_left_shift\n#define BOOST_TT_TRAIT_OP <<\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n         )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_left_shift_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_LEFT_SHIFT_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_LEFT_SHIFT_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_left_shift_assign\n#define BOOST_TT_TRAIT_OP <<=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n         )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_less.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_LESS_HPP_INCLUDED\n#define BOOST_TT_HAS_LESS_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_less\n#define BOOST_TT_TRAIT_OP <\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Rhs==pointer and Lhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         (! \\\n            ( \\\n               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \\\n               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_void< Lhs_noptr >::value || \\\n               ::boost::is_void< Rhs_noptr >::value\\\n            )\\\n         )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_less_equal.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_LESS_EQUAL_HPP_INCLUDED\n#define BOOST_TT_HAS_LESS_EQUAL_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_less_equal\n#define BOOST_TT_TRAIT_OP <=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Rhs==pointer and Lhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         (! \\\n            ( \\\n               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \\\n               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_void< Lhs_noptr >::value || \\\n               ::boost::is_void< Rhs_noptr >::value\\\n            )\\\n         )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_logical_and.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_LOGICAL_AND_HPP_INCLUDED\n#define BOOST_TT_HAS_LOGICAL_AND_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_logical_and\n#define BOOST_TT_TRAIT_OP &&\n#define BOOST_TT_FORBIDDEN_IF\\\n   /* pointer with fundamental non convertible to bool */\\\n   (\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ( \\\n            ::boost::is_fundamental< Rhs_nocv >::value && \\\n            (!  ::boost::is_convertible< Rhs_nocv, bool >::value )\\\n          )\\\n      )||\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ( \\\n            ::boost::is_fundamental< Lhs_nocv >::value && \\\n            (!  ::boost::is_convertible< Lhs_nocv, bool >::value )\\\n         )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_logical_not.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_LOGICAL_NOT_HPP_INCLUDED\n#define BOOST_TT_HAS_LOGICAL_NOT_HPP_INCLUDED\n\n#if defined(__GNUC__) && (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ > 40800)\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wunused-value\"\n#endif\n\n#define BOOST_TT_TRAIT_NAME has_logical_not\n#define BOOST_TT_TRAIT_OP !\n#define BOOST_TT_FORBIDDEN_IF\\\n   false\n\n#include <boost/type_traits/detail/has_prefix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#if defined(__GNUC__) && (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ > 40800)\n#pragma GCC diagnostic pop\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_logical_or.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_LOGICAL_OR_HPP_INCLUDED\n#define BOOST_TT_HAS_LOGICAL_OR_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_logical_or\n#define BOOST_TT_TRAIT_OP ||\n#define BOOST_TT_FORBIDDEN_IF\\\n   /* pointer with fundamental non convertible to bool */\\\n   (\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         (\\\n            ::boost::is_fundamental< Rhs_nocv >::value && \\\n            (!  ::boost::is_convertible< Rhs_nocv, bool >::value )\\\n          )\\\n      )||\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         (\\\n            ::boost::is_fundamental< Lhs_nocv >::value && \\\n            (!  ::boost::is_convertible< Lhs_nocv, bool >::value )\\\n          )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_minus.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_MINUS_HPP_INCLUDED\n#define BOOST_TT_HAS_MINUS_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_minus\n#define BOOST_TT_TRAIT_OP -\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         (!  ::boost::is_integral< Rhs_noref >::value )\\\n      ) || \\\n      /* Lhs==void* and (Rhs==fundamental or Rhs==pointer) */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_void< Lhs_noptr >::value && \\\n         ( \\\n            ::boost::is_fundamental< Rhs_nocv >::value || \\\n            ::boost::is_pointer< Rhs_noref >::value\\\n          )\\\n      ) || \\\n      /* Rhs==void* and (Lhs==fundamental or Lhs==pointer) */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_void< Rhs_noptr >::value && \\\n         (\\\n            ::boost::is_fundamental< Lhs_nocv >::value || \\\n            ::boost::is_pointer< Lhs_noref >::value\\\n          )\\\n      ) ||\\\n      /* Lhs=fundamental and Rhs=pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      ) ||\\\n      /* two different pointers */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         (!  ::boost::is_same< Lhs_nocv, Rhs_nocv >::value )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_minus_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_MINUS_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_MINUS_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_minus_assign\n#define BOOST_TT_TRAIT_OP -=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         (!  ::boost::is_integral< Rhs_noref >::value )\\\n      ) || \\\n      /* Lhs==void* and Rhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_void< Lhs_noptr >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Rhs==void* and Lhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_void< Rhs_noptr >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value\\\n      ) || \\\n      /* Lhs=fundamental and Rhs=pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      ) || \\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      ) || \\\n      /* (Lhs==fundamental or Lhs==pointer) and (Rhs==fundamental or Rhs==pointer) and (Lhs==const) */\\\n      (\\\n         (\\\n            ::boost::is_fundamental< Lhs_nocv >::value || \\\n            ::boost::is_pointer< Lhs_noref >::value\\\n         ) && \\\n         (\\\n            ::boost::is_fundamental< Rhs_nocv >::value || \\\n            ::boost::is_pointer< Rhs_noref >::value\\\n          ) && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_modulus.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_MODULUS_HPP_INCLUDED\n#define BOOST_TT_HAS_MODULUS_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_modulus\n#define BOOST_TT_TRAIT_OP %\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         (\\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n         )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_modulus_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_MODULUS_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_MODULUS_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_modulus_assign\n#define BOOST_TT_TRAIT_OP %=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n         )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_multiplies.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_MULTIPLIES_HPP_INCLUDED\n#define BOOST_TT_HAS_MULTIPLIES_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_multiplies\n#define BOOST_TT_TRAIT_OP *\n#define BOOST_TT_FORBIDDEN_IF\\\n   /* pointer with pointer or fundamental */\\\n   (\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         (\\\n            ::boost::is_fundamental< Rhs_nocv >::value || \\\n            ::boost::is_pointer< Rhs_noref >::value\\\n        )\\\n      )||\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         (\\\n            ::boost::is_fundamental< Lhs_nocv >::value || \\\n            ::boost::is_pointer< Lhs_noref >::value\\\n          )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_multiplies_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_MULTIPLIES_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_MULTIPLIES_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_multiplies_assign\n#define BOOST_TT_TRAIT_OP *=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Lhs==const and Rhs==fundamental */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_const< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and (Rhs==fundamental or Rhs==pointer) */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ( \\\n            ::boost::is_fundamental< Rhs_nocv >::value || \\\n            ::boost::is_pointer< Rhs_noref >::value\\\n         )\\\n      )||\\\n      /* Rhs==pointer and (Lhs==fundamental or Lhs==pointer) */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ( \\\n            ::boost::is_fundamental< Lhs_nocv >::value || \\\n            ::boost::is_pointer< Lhs_noref >::value\\\n          )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_negate.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_NEGATE_HPP_INCLUDED\n#define BOOST_TT_HAS_NEGATE_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_negate\n#define BOOST_TT_TRAIT_OP -\n#define BOOST_TT_FORBIDDEN_IF\\\n   /* pointer */\\\n   ::boost::is_pointer< Rhs_noref >::value\n\n\n#include <boost/type_traits/detail/has_prefix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_new_operator.hpp",
    "content": "\n//  (C) Copyright Runar Undheim, Robert Ramey & John Maddock 2008.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_NEW_OPERATOR_HPP_INCLUDED\n#define BOOST_TT_HAS_NEW_OPERATOR_HPP_INCLUDED\n\n#include <new> // std::nothrow_t\n#include <cstddef> // std::size_t\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if defined(new) \n#  if BOOST_WORKAROUND(BOOST_MSVC, >= 1310)\n#     define BOOST_TT_AUX_MACRO_NEW_DEFINED\n#     pragma push_macro(\"new\")\n#     undef new\n#  else\n#     error \"Sorry but you can't include this header if 'new' is defined as a macro.\"\n#  endif\n#endif\n\nnamespace boost {\nnamespace detail {\n    template <class U, U x> \n    struct test;\n\n    template <typename T>\n    struct has_new_operator_impl {\n        template<class U>\n        static type_traits::yes_type check_sig1(\n            U*, \n            test<\n            void *(*)(std::size_t),\n                &U::operator new\n            >* = NULL\n        );\n        template<class U>\n        static type_traits::no_type check_sig1(...);\n\n        template<class U>\n        static type_traits::yes_type check_sig2(\n            U*, \n            test<\n            void *(*)(std::size_t, const std::nothrow_t&),\n                &U::operator new\n            >* = NULL\n        );\n        template<class U>\n        static type_traits::no_type check_sig2(...);\n\n        template<class U>\n        static type_traits::yes_type check_sig3(\n            U*, \n            test<\n            void *(*)(std::size_t, void*),\n                &U::operator new\n            >* = NULL\n        );\n        template<class U>\n        static type_traits::no_type check_sig3(...);\n\n\n        template<class U>\n        static type_traits::yes_type check_sig4(\n            U*, \n            test<\n            void *(*)(std::size_t),\n                &U::operator new[]\n            >* = NULL\n        );\n        template<class U>\n        static type_traits::no_type check_sig4(...);\n\n        template<class U>\n        static type_traits::yes_type check_sig5(\n            U*, \n            test<\n            void *(*)(std::size_t, const std::nothrow_t&),\n                &U::operator new[]\n            >* = NULL\n        );\n        template<class U>\n        static type_traits::no_type check_sig5(...);\n\n        template<class U>\n        static type_traits::yes_type check_sig6(\n            U*, \n            test<\n            void *(*)(std::size_t, void*),\n                &U::operator new[]\n            >* = NULL\n        );\n        template<class U>\n        static type_traits::no_type check_sig6(...);\n\n        // GCC2 won't even parse this template if we embed the computation\n        // of s1 in the computation of value.\n        #ifdef __GNUC__\n            BOOST_STATIC_CONSTANT(unsigned, s1 = sizeof(has_new_operator_impl<T>::template check_sig1<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s2 = sizeof(has_new_operator_impl<T>::template check_sig2<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s3 = sizeof(has_new_operator_impl<T>::template check_sig3<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s4 = sizeof(has_new_operator_impl<T>::template check_sig4<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s5 = sizeof(has_new_operator_impl<T>::template check_sig5<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s6 = sizeof(has_new_operator_impl<T>::template check_sig6<T>(0)));\n        #else\n            #if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n                #pragma warning(push)\n                #pragma warning(disable:6334)\n            #endif\n\n            BOOST_STATIC_CONSTANT(unsigned, s1 = sizeof(check_sig1<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s2 = sizeof(check_sig2<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s3 = sizeof(check_sig3<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s4 = sizeof(check_sig4<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s5 = sizeof(check_sig5<T>(0)));\n            BOOST_STATIC_CONSTANT(unsigned, s6 = sizeof(check_sig6<T>(0)));\n\n            #if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n                #pragma warning(pop)\n            #endif\n        #endif\n        BOOST_STATIC_CONSTANT(bool, value = \n            (s1 == sizeof(type_traits::yes_type)) ||\n            (s2 == sizeof(type_traits::yes_type)) ||\n            (s3 == sizeof(type_traits::yes_type)) ||\n            (s4 == sizeof(type_traits::yes_type)) ||\n            (s5 == sizeof(type_traits::yes_type)) ||\n            (s6 == sizeof(type_traits::yes_type))\n        );\n    };\n} // namespace detail\n\ntemplate <class T> struct has_new_operator : public integral_constant<bool, ::boost::detail::has_new_operator_impl<T>::value>{};\n\n} // namespace boost\n\n#if defined(BOOST_TT_AUX_MACRO_NEW_DEFINED)\n#  pragma pop_macro(\"new\")\n#endif\n\n#endif // BOOST_TT_HAS_NEW_OPERATOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_not_equal_to.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_NOT_EQUAL_TO_HPP_INCLUDED\n#define BOOST_TT_HAS_NOT_EQUAL_TO_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_not_equal_to\n#define BOOST_TT_TRAIT_OP !=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Rhs==pointer and Lhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         (! \\\n            (\\\n               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \\\n               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \\\n               ::boost::is_void< Lhs_noptr >::value || \\\n               ::boost::is_void< Rhs_noptr >::value\\\n            )\\\n         )\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_nothrow_assign.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n\n#if !defined(BOOST_HAS_NOTHROW_ASSIGN) || defined(BOOST_MSVC) || defined(BOOST_INTEL)\n#include <boost/type_traits/has_trivial_assign.hpp>\n#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n#include <boost/type_traits/declval.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/is_assignable.hpp>\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#endif\n#endif\n#if defined(__GNUC__) || defined(__SUNPRO_CC)\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/is_assignable.hpp>\n#include <boost/type_traits/is_array.hpp>\n#ifdef BOOST_INTEL\n#include <boost/type_traits/is_pod.hpp>\n#endif\n#endif\n\nnamespace boost {\n\n#if !defined(BOOST_HAS_NOTHROW_ASSIGN) && !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n\n   namespace detail\n   {\n      template <class T, bool b1, bool b2> struct has_nothrow_assign_imp{ static const bool value = false; };\n      template <class T>          struct has_nothrow_assign_imp<T, false, true>{ static const bool value = noexcept(boost::declval<typename add_reference<T>::type>() = boost::declval<typename add_reference<T const>::type>()); };\n      template <class T, std::size_t N> struct has_nothrow_assign_imp<T[N], false, true>{ static const bool value = has_nothrow_assign_imp<T, false, true>::value; };\n      template <class T>          struct has_nothrow_assign_imp<T[], false, true>{ static const bool value = has_nothrow_assign_imp<T, false, true>::value; };\n   }\n\n#endif\n\n   template <class T>\n   struct has_nothrow_assign : public integral_constant < bool,\n#ifndef BOOST_HAS_NOTHROW_ASSIGN\n#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n      // Portable C++11 version:\n      detail::has_nothrow_assign_imp<T, \n      (is_const<typename remove_reference<T>::type>::value || is_volatile<typename remove_reference<T>::type>::value || is_reference<T>::value), \n      is_assignable<typename add_reference<T>::type, typename add_reference<const T>::type>::value\n      >::value\n#else\n      ::boost::has_trivial_assign<T>::value\n#endif\n#else\n      BOOST_HAS_NOTHROW_ASSIGN(T)\n#endif\n   > {};\n\ntemplate <class T, std::size_t N> struct has_nothrow_assign <T[N]> : public has_nothrow_assign<T> {};\ntemplate <> struct has_nothrow_assign<void> : public false_type{};\ntemplate <class T> struct has_nothrow_assign<T volatile> : public false_type{};\ntemplate <class T> struct has_nothrow_assign<T&> : public false_type{};\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\ntemplate <class T> struct has_nothrow_assign<T&&> : public false_type{};\n#endif\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct has_nothrow_assign<void const> : public false_type{};\ntemplate <> struct has_nothrow_assign<void const volatile> : public false_type{};\ntemplate <> struct has_nothrow_assign<void volatile> : public false_type{};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_nothrow_constructor.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED\n#define BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\n#ifdef BOOST_HAS_NOTHROW_CONSTRUCTOR\n\n#if defined(BOOST_MSVC) || defined(BOOST_INTEL)\n#include <boost/type_traits/has_trivial_constructor.hpp>\n#endif\n#if defined(__GNUC__ ) || defined(__SUNPRO_CC)\n#include <boost/type_traits/is_default_constructible.hpp>\n#endif\n\nnamespace boost {\n\ntemplate <class T> struct has_nothrow_constructor : public integral_constant<bool, BOOST_HAS_NOTHROW_CONSTRUCTOR(T)>{};\n\n#elif !defined(BOOST_NO_CXX11_NOEXCEPT)\n\n#include <boost/type_traits/is_default_constructible.hpp>\n#include <boost/type_traits/remove_all_extents.hpp>\n\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4197) // top-level volatile in cast is ignored\n#endif\n\nnamespace boost { namespace detail{\n\n   template <class T, bool b> struct has_nothrow_constructor_imp : public boost::integral_constant<bool, false>{};\n   template <class T> struct has_nothrow_constructor_imp<T, true> : public boost::integral_constant<bool, noexcept(T())>{};\n   template <class T, std::size_t N> struct has_nothrow_constructor_imp<T[N], true> : public has_nothrow_constructor_imp<T, true> {};\n}\n\ntemplate <class T> struct has_nothrow_constructor : public detail::has_nothrow_constructor_imp<T, is_default_constructible<T>::value>{};\n\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\n#else\n\n#include <boost/type_traits/has_trivial_constructor.hpp>\n\nnamespace boost {\n\ntemplate <class T> struct has_nothrow_constructor : public ::boost::has_trivial_constructor<T> {};\n\n#endif\n\ntemplate<> struct has_nothrow_constructor<void> : public false_type {};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate<> struct has_nothrow_constructor<void const> : public false_type{};\ntemplate<> struct has_nothrow_constructor<void const volatile> : public false_type{};\ntemplate<> struct has_nothrow_constructor<void volatile> : public false_type{};\n#endif\n\ntemplate <class T> struct has_nothrow_default_constructor : public has_nothrow_constructor<T>{};\n\n} // namespace boost\n\n#endif // BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_nothrow_copy.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED\n#define BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\n#ifdef BOOST_HAS_NOTHROW_COPY\n\n#if defined(BOOST_CLANG) || defined(__GNUC__) || defined(__ghs__) || defined(__CODEGEARC__) || defined(__SUNPRO_CC)\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/is_copy_constructible.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/is_array.hpp>\n#ifdef BOOST_INTEL\n#include <boost/type_traits/is_pod.hpp>\n#endif\n#elif defined(BOOST_MSVC) || defined(BOOST_INTEL)\n#include <boost/type_traits/has_trivial_copy.hpp>\n#include <boost/type_traits/is_array.hpp>\n#ifdef BOOST_INTEL\n#include <boost/type_traits/add_lvalue_reference.hpp>\n#include <boost/type_traits/add_const.hpp>\n#endif\n#endif\n\nnamespace boost {\n\ntemplate <class T> struct has_nothrow_copy_constructor : public integral_constant<bool, BOOST_HAS_NOTHROW_COPY(T)>{};\n\n#elif !defined(BOOST_NO_CXX11_NOEXCEPT)\n\n#include <boost/type_traits/declval.hpp>\n#include <boost/type_traits/is_copy_constructible.hpp>\n\nnamespace boost{\n\nnamespace detail{\n\ntemplate <class T, bool b>\nstruct has_nothrow_copy_constructor_imp : public boost::integral_constant<bool, false>{};\ntemplate <class T>\nstruct has_nothrow_copy_constructor_imp<T, true> : public boost::integral_constant<bool, noexcept(T(boost::declval<const T&>()))>{};\n\n}\n\ntemplate <class T> struct has_nothrow_copy_constructor : public detail::has_nothrow_copy_constructor_imp<T, boost::is_copy_constructible<T>::value>{};\n\n#else\n\n#include <boost/type_traits/has_trivial_copy.hpp>\n\nnamespace boost{\n\ntemplate <class T> struct has_nothrow_copy_constructor : public integral_constant<bool, ::boost::has_trivial_copy<T>::value>{};\n\n#endif\n\ntemplate <> struct has_nothrow_copy_constructor<void> : public false_type{};\ntemplate <class T> struct has_nothrow_copy_constructor<T volatile> : public false_type{};\ntemplate <class T> struct has_nothrow_copy_constructor<T&> : public false_type{};\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) \ntemplate <class T> struct has_nothrow_copy_constructor<T&&> : public false_type{};\n#endif\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct has_nothrow_copy_constructor<void const> : public false_type{};\ntemplate <> struct has_nothrow_copy_constructor<void volatile> : public false_type{};\ntemplate <> struct has_nothrow_copy_constructor<void const volatile> : public false_type{};\n#endif\n\ntemplate <class T> struct has_nothrow_copy : public has_nothrow_copy_constructor<T>{};\n\n} // namespace boost\n\n#endif // BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_nothrow_destructor.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_NOTHROW_DESTRUCTOR_HPP_INCLUDED\n#define BOOST_TT_HAS_NOTHROW_DESTRUCTOR_HPP_INCLUDED\n\n#include <boost/type_traits/has_trivial_destructor.hpp>\n\n#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(__SUNPRO_CC) && !defined(BOOST_MSVC)\n\n#include <boost/type_traits/declval.hpp>\n#include <boost/type_traits/is_destructible.hpp>\n\nnamespace boost{\n\n   namespace detail{\n\n      template <class T, bool b>\n      struct has_nothrow_destructor_imp : public boost::integral_constant<bool, false>{};\n      template <class T>\n      struct has_nothrow_destructor_imp<T, true> : public boost::integral_constant<bool, noexcept(boost::declval<T*&>()->~T())>{};\n\n   }\n\n   template <class T> struct has_nothrow_destructor : public detail::has_nothrow_destructor_imp<T, boost::is_destructible<T>::value>{};\n   template <class T, std::size_t N> struct has_nothrow_destructor<T[N]> : public has_nothrow_destructor<T>{};\n   template <class T> struct has_nothrow_destructor<T&> : public integral_constant<bool, false>{};\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) \n   template <class T> struct has_nothrow_destructor<T&&> : public integral_constant<bool, false>{};\n#endif\n}\n#else\n\nnamespace boost {\n\ntemplate <class T> struct has_nothrow_destructor : public ::boost::has_trivial_destructor<T> {};\n\n} // namespace boost\n\n#endif\n\n#endif // BOOST_TT_HAS_NOTHROW_DESTRUCTOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_operator.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_OPERATOR_HPP_INCLUDED\n#define BOOST_TT_HAS_OPERATOR_HPP_INCLUDED\n\n#include <boost/type_traits/has_bit_and.hpp>\n#include <boost/type_traits/has_bit_and_assign.hpp>\n#include <boost/type_traits/has_bit_or.hpp>\n#include <boost/type_traits/has_bit_or_assign.hpp>\n#include <boost/type_traits/has_bit_xor.hpp>\n#include <boost/type_traits/has_bit_xor_assign.hpp>\n#include <boost/type_traits/has_complement.hpp>\n#include <boost/type_traits/has_dereference.hpp>\n#include <boost/type_traits/has_divides.hpp>\n#include <boost/type_traits/has_divides_assign.hpp>\n#include <boost/type_traits/has_equal_to.hpp>\n#include <boost/type_traits/has_greater.hpp>\n#include <boost/type_traits/has_greater_equal.hpp>\n#include <boost/type_traits/has_left_shift.hpp>\n#include <boost/type_traits/has_left_shift_assign.hpp>\n#include <boost/type_traits/has_less.hpp>\n#include <boost/type_traits/has_less_equal.hpp>\n#include <boost/type_traits/has_logical_and.hpp>\n#include <boost/type_traits/has_logical_not.hpp>\n#include <boost/type_traits/has_logical_or.hpp>\n#include <boost/type_traits/has_minus.hpp>\n#include <boost/type_traits/has_minus_assign.hpp>\n#include <boost/type_traits/has_modulus.hpp>\n#include <boost/type_traits/has_modulus_assign.hpp>\n#include <boost/type_traits/has_multiplies.hpp>\n#include <boost/type_traits/has_multiplies_assign.hpp>\n#include <boost/type_traits/has_negate.hpp>\n#include <boost/type_traits/has_not_equal_to.hpp>\n#include <boost/type_traits/has_plus.hpp>\n#include <boost/type_traits/has_plus_assign.hpp>\n#include <boost/type_traits/has_post_decrement.hpp>\n#include <boost/type_traits/has_post_increment.hpp>\n#include <boost/type_traits/has_pre_decrement.hpp>\n#include <boost/type_traits/has_pre_increment.hpp>\n#include <boost/type_traits/has_right_shift.hpp>\n#include <boost/type_traits/has_right_shift_assign.hpp>\n#include <boost/type_traits/has_unary_minus.hpp>\n#include <boost/type_traits/has_unary_plus.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_plus.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_PLUS_HPP_INCLUDED\n#define BOOST_TT_HAS_PLUS_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_plus\n#define BOOST_TT_TRAIT_OP +\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      ) || \\\n      /* Lhs==void* and Rhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_void< Lhs_noptr >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Rhs==void* and Lhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_void< Rhs_noptr >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         (!  ::boost::is_integral< Rhs_noref >::value )\\\n      ) || \\\n      /* Rhs==pointer and Lhs==fundamental and Lhs!=integral */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         (!  ::boost::is_integral< Lhs_noref >::value )\\\n      )\\\n   )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_plus_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_PLUS_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_PLUS_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_plus_assign\n#define BOOST_TT_TRAIT_OP +=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      ) || \\\n      /* Lhs==void* and Rhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_void< Lhs_noptr >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value\\\n      ) || \\\n      /* Rhs==void* and Lhs==fundamental */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_void< Rhs_noptr >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value\\\n      ) || \\\n      /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         (!  ::boost::is_integral< Rhs_noref >::value )\\\n      ) || \\\n      /* Rhs==pointer and Lhs==fundamental and Lhs!=bool */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         (!  ::boost::is_same< Lhs_nocv, bool >::value )\\\n      ) || \\\n      /* (Lhs==fundamental or Lhs==pointer) and (Rhs==fundamental or Rhs==pointer) and (Lhs==const) */\\\n      (\\\n         (\\\n            ::boost::is_fundamental< Lhs_nocv >::value || \\\n            ::boost::is_pointer< Lhs_noref >::value\\\n          ) && \\\n         ( \\\n            ::boost::is_fundamental< Rhs_nocv >::value || \\\n            ::boost::is_pointer< Rhs_noref >::value\\\n          ) && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_post_decrement.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_POST_DECREMENT_HPP_INCLUDED\n#define BOOST_TT_HAS_POST_DECREMENT_HPP_INCLUDED\n\n#include <boost/type_traits/is_array.hpp>\n\n#define BOOST_TT_TRAIT_NAME has_post_decrement\n#define BOOST_TT_TRAIT_OP --\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* bool */\\\n      ::boost::is_same< bool, Lhs_nocv >::value || \\\n      /* void* */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_void< Lhs_noptr >::value\\\n      ) || \\\n      /* (fundamental or pointer) and const */\\\n      (\\\n         ( \\\n            ::boost::is_fundamental< Lhs_nocv >::value || \\\n            ::boost::is_pointer< Lhs_noref >::value\\\n         ) && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )||\\\n      /* Arrays */ \\\n      ::boost::is_array<Lhs_noref>::value\\\n      )\n\n\n#include <boost/type_traits/detail/has_postfix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_post_increment.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_POST_INCREMENT_HPP_INCLUDED\n#define BOOST_TT_HAS_POST_INCREMENT_HPP_INCLUDED\n\n#include <boost/type_traits/is_array.hpp>\n\n#define BOOST_TT_TRAIT_NAME has_post_increment\n#define BOOST_TT_TRAIT_OP ++\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* bool */\\\n      ::boost::is_same< bool, Lhs_nocv >::value || \\\n      /* void* */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_void< Lhs_noptr >::value\\\n      ) || \\\n      /* (fundamental or pointer) and const */\\\n      (\\\n         ( \\\n            ::boost::is_fundamental< Lhs_nocv >::value || \\\n            ::boost::is_pointer< Lhs_noref >::value\\\n         ) && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )||\\\n      /* Arrays */ \\\n      ::boost::is_array<Lhs_noref>::value\\\n      )\n\n\n#include <boost/type_traits/detail/has_postfix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_pre_decrement.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_PRE_DECREMENT_HPP_INCLUDED\n#define BOOST_TT_HAS_PRE_DECREMENT_HPP_INCLUDED\n\n#include <boost/type_traits/is_array.hpp>\n\n#define BOOST_TT_TRAIT_NAME has_pre_decrement\n#define BOOST_TT_TRAIT_OP --\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* bool */\\\n      ::boost::is_same< bool, Rhs_nocv >::value || \\\n      /* void* */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_void< Rhs_noptr >::value\\\n      ) || \\\n      /* (fundamental or pointer) and const */\\\n      (\\\n         ( \\\n            ::boost::is_fundamental< Rhs_nocv >::value || \\\n            ::boost::is_pointer< Rhs_noref >::value\\\n         ) && \\\n         ::boost::is_const< Rhs_noref >::value\\\n      )||\\\n      /* Arrays */ \\\n      ::boost::is_array<Rhs_noref>::value\\\n      )\n\n\n#include <boost/type_traits/detail/has_prefix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_pre_increment.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_PRE_INCREMENT_HPP_INCLUDED\n#define BOOST_TT_HAS_PRE_INCREMENT_HPP_INCLUDED\n\n#include <boost/type_traits/is_array.hpp>\n\n#define BOOST_TT_TRAIT_NAME has_pre_increment\n#define BOOST_TT_TRAIT_OP ++\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* bool */\\\n      ::boost::is_same< bool, Rhs_nocv >::value || \\\n      /* void* */\\\n      (\\\n         ::boost::is_pointer< Rhs_noref >::value && \\\n         ::boost::is_void< Rhs_noptr >::value\\\n      ) || \\\n      /* (fundamental or pointer) and const */\\\n      (\\\n         ( \\\n            ::boost::is_fundamental< Rhs_nocv >::value || \\\n            ::boost::is_pointer< Rhs_noref >::value\\\n         ) && \\\n         ::boost::is_const< Rhs_noref >::value\\\n      )||\\\n      /* Arrays */ \\\n      ::boost::is_array<Rhs_noref>::value\\\n      )\n\n\n#include <boost/type_traits/detail/has_prefix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_right_shift.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_RIGHT_SHIFT_HPP_INCLUDED\n#define BOOST_TT_HAS_RIGHT_SHIFT_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_right_shift\n#define BOOST_TT_TRAIT_OP >>\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n         )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_right_shift_assign.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_RIGHT_SHIFT_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_RIGHT_SHIFT_ASSIGN_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_right_shift_assign\n#define BOOST_TT_TRAIT_OP >>=\n#define BOOST_TT_FORBIDDEN_IF\\\n   (\\\n      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ( \\\n            (!  ::boost::is_integral< Lhs_noref >::value ) || \\\n            (!  ::boost::is_integral< Rhs_noref >::value )\\\n         )\\\n      )||\\\n      /* Lhs==fundamental and Rhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Rhs==fundamental and Lhs==pointer */\\\n      (\\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_pointer< Lhs_noref >::value\\\n      )||\\\n      /* Lhs==pointer and Rhs==pointer */\\\n      (\\\n         ::boost::is_pointer< Lhs_noref >::value && \\\n         ::boost::is_pointer< Rhs_noref >::value\\\n      )||\\\n      /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\\\n      (\\\n         ::boost::is_fundamental< Lhs_nocv >::value && \\\n         ::boost::is_fundamental< Rhs_nocv >::value && \\\n         ::boost::is_const< Lhs_noref >::value\\\n      )\\\n      )\n\n\n#include <boost/type_traits/detail/has_binary_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_trivial_assign.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED\n\n#include <boost/type_traits/detail/config.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\n#if !defined(BOOST_HAS_TRIVIAL_ASSIGN) || defined(BOOST_MSVC) || defined(__GNUC__) || defined(BOOST_INTEL) || defined(__SUNPRO_CC) || defined(__clang)\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/is_assignable.hpp>\n#endif\n\nnamespace boost {\n\n   template <typename T>\n   struct has_trivial_assign : public integral_constant < bool,\n#ifdef BOOST_HAS_TRIVIAL_ASSIGN\n      BOOST_HAS_TRIVIAL_ASSIGN(T)\n#else\n      ::boost::is_pod<T>::value && !::boost::is_const<T>::value && !::boost::is_volatile<T>::value\n#endif\n   > {};\n\n   template<> struct has_trivial_assign<void> : public false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\n   template<> struct has_trivial_assign<void const> : public false_type{};\n   template<> struct has_trivial_assign<void const volatile> : public false_type{};\n   template<> struct has_trivial_assign<void volatile> : public false_type{};\n#endif\n   template <class T> struct has_trivial_assign<T volatile> : public false_type{};\n   template <class T> struct has_trivial_assign<T&> : public false_type{};\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n   template <class T> struct has_trivial_assign<T&&> : public false_type{};\n#endif\n   // Arrays are not explictly assignable:\n   template <typename T, std::size_t N> struct has_trivial_assign<T[N]> : public false_type{};\n   template <typename T> struct has_trivial_assign<T[]> : public false_type{};\n\n} // namespace boost\n\n#endif // BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_trivial_constructor.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED\n#define BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/is_default_constructible.hpp>\n\n#ifdef BOOST_HAS_TRIVIAL_CONSTRUCTOR\n#ifdef BOOST_HAS_SGI_TYPE_TRAITS\n#include <boost/type_traits/is_same.hpp>\n#elif defined(__GNUC__) || defined(__SUNPRO_CC)\n#include <boost/type_traits/is_volatile.hpp>\n#ifdef BOOST_INTEL\n#include <boost/type_traits/is_pod.hpp>\n#endif\n#endif\n#endif\n\n\n#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 409)) || defined(BOOST_CLANG) || (defined(__SUNPRO_CC) && defined(BOOST_HAS_TRIVIAL_CONSTRUCTOR))\n#include <boost/type_traits/is_default_constructible.hpp>\n#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX && is_default_constructible<T>::value\n#else\n//\n// Mot all compilers, particularly older GCC versions can handle the fix above.\n#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX\n#endif\n\nnamespace boost {\n\ntemplate <typename T> struct has_trivial_constructor\n#ifdef BOOST_HAS_TRIVIAL_CONSTRUCTOR\n   : public integral_constant <bool, ((::boost::is_pod<T>::value || BOOST_HAS_TRIVIAL_CONSTRUCTOR(T)) BOOST_TT_TRIVIAL_CONSTRUCT_FIX)>{};\n#else\n   : public integral_constant <bool, ::boost::is_pod<T>::value>{};\n#endif\n\ntemplate <> struct has_trivial_constructor<void> : public boost::false_type{};\ntemplate <> struct has_trivial_constructor<void const> : public boost::false_type{};\ntemplate <> struct has_trivial_constructor<void const volatile> : public boost::false_type{};\ntemplate <> struct has_trivial_constructor<void volatile> : public boost::false_type{};\n\ntemplate <class T> struct has_trivial_default_constructor : public has_trivial_constructor<T> {};\n\n#undef BOOST_TT_TRIVIAL_CONSTRUCT_FIX\n\n} // namespace boost\n\n#endif // BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_trivial_copy.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED\n#define BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/is_reference.hpp>\n\n#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 409)) || defined(BOOST_CLANG) || (defined(__SUNPRO_CC) && defined(BOOST_HAS_TRIVIAL_COPY))\n#include <boost/type_traits/is_copy_constructible.hpp>\n#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX && is_copy_constructible<T>::value\n#else\n#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX\n#endif\n\n#ifdef BOOST_INTEL\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_lvalue_reference.hpp>\n#endif\n\nnamespace boost {\n\ntemplate <typename T> struct has_trivial_copy \n: public integral_constant<bool, \n#ifdef BOOST_HAS_TRIVIAL_COPY\n   BOOST_HAS_TRIVIAL_COPY(T) BOOST_TT_TRIVIAL_CONSTRUCT_FIX\n#else\n   ::boost::is_pod<T>::value\n#endif\n>{};\n// Arrays are not explicitly copyable:\ntemplate <typename T, std::size_t N> struct has_trivial_copy<T[N]> : public false_type{};\ntemplate <typename T> struct has_trivial_copy<T[]> : public false_type{};\n// Are volatile types ever trivial?  We don't really know, so assume not:\ntemplate <typename T> struct has_trivial_copy<T volatile> : public false_type{};\n\ntemplate <> struct has_trivial_copy<void> : public false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct has_trivial_copy<void const> : public false_type{};\ntemplate <> struct has_trivial_copy<void volatile> : public false_type{};\ntemplate <> struct has_trivial_copy<void const volatile> : public false_type{};\n#endif\n\ntemplate <class T> struct has_trivial_copy<T&> : public false_type{};\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) \ntemplate <class T> struct has_trivial_copy<T&&> : public false_type{};\n#endif\n\ntemplate <class T> struct has_trivial_copy_constructor : public has_trivial_copy<T>{};\n\n#undef BOOST_TT_TRIVIAL_CONSTRUCT_FIX\n\n} // namespace boost\n\n#endif // BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_trivial_destructor.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED\n#define BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\n#ifdef BOOST_HAS_TRIVIAL_DESTRUCTOR\n\n#if defined(BOOST_INTEL) || defined(BOOST_MSVC)\n#include <boost/type_traits/is_pod.hpp>\n#endif\n#ifdef BOOST_HAS_SGI_TYPE_TRAITS\n#include <boost/type_traits/is_same.hpp>\n#endif\n\n#if defined(__GNUC__) || defined(__clang) || defined(__SUNPRO_CC)\n#include <boost/type_traits/is_destructible.hpp>\n#endif\n\nnamespace boost {\n\ntemplate <typename T> struct has_trivial_destructor : public integral_constant<bool, BOOST_HAS_TRIVIAL_DESTRUCTOR(T)>{};\n#else\n#include <boost/type_traits/is_pod.hpp>\n\nnamespace boost{\n\ntemplate <typename T> struct has_trivial_destructor : public integral_constant<bool, ::boost::is_pod<T>::value>{};\n#endif\n\ntemplate <> struct has_trivial_destructor<void> : public false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct has_trivial_destructor<void const> : public false_type{};\ntemplate <> struct has_trivial_destructor<void const volatile> : public false_type{};\ntemplate <> struct has_trivial_destructor<void volatile> : public false_type{};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_trivial_move_assign.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  (C) Copyright Eric Friedman 2002-2003.\n//  (C) Copyright Antony Polukhin 2013.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED\n#define BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\n#if !defined(BOOST_HAS_TRIVIAL_MOVE_ASSIGN) || defined(BOOST_MSVC) || defined(BOOST_INTEL)\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#ifdef BOOST_MSVC\n#include <boost/type_traits/is_reference.hpp>\n#endif\n#endif\n\n#if defined(__GNUC__) || defined(__clang)\n#include <boost/type_traits/is_assignable.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#endif\n\n#ifdef __SUNPRO_CC\n#include <boost/type_traits/is_assignable.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#if __cplusplus >= 201103\n#define SOLARIS_EXTRA_CHECK && is_assignable<typename remove_const<T>::type&, typename remove_const<T>::type&&>::value\n#endif\n#endif\n\n#ifndef SOLARIS_EXTRA_CHECK\n#define SOLARIS_EXTRA_CHECK\n#endif\n\nnamespace boost{\n\ntemplate <typename T>\nstruct has_trivial_move_assign : public integral_constant<bool,\n#ifdef BOOST_HAS_TRIVIAL_MOVE_ASSIGN\n   BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T)\n#else\n   ::boost::is_pod<T>::value && !::boost::is_const<T>::value && !::boost::is_volatile<T>::value SOLARIS_EXTRA_CHECK\n#endif\n   > {};\n\ntemplate <> struct has_trivial_move_assign<void> : public false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct has_trivial_move_assign<void const> : public false_type{};\ntemplate <> struct has_trivial_move_assign<void const volatile> : public false_type{};\ntemplate <> struct has_trivial_move_assign<void volatile> : public false_type{};\n#endif\ntemplate <class T> struct has_trivial_move_assign<T&> : public false_type{};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <class T> struct has_trivial_move_assign<T&&> : public false_type{};\n#endif\n// Array types are not assignable:\ntemplate <class T, std::size_t N> struct has_trivial_move_assign<T[N]> : public false_type{};\ntemplate <class T> struct has_trivial_move_assign<T[]> : public false_type{};\n\n} // namespace boost\n\n#undef SOLARIS_EXTRA_CHECK\n\n#endif // BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_trivial_move_constructor.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  (C) Copyright Eric Friedman 2002-2003.\n//  (C) Copyright Antony Polukhin 2013.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED\n#define BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\n#ifdef BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR\n\n#if defined(BOOST_MSVC) || defined(BOOST_INTEL)\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#endif\n\n#if defined(__GNUC__) || defined(__clang)\n#include <boost/type_traits/is_constructible.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#endif\n\n\nnamespace boost {\n\ntemplate <typename T> struct has_trivial_move_constructor : public integral_constant<bool, BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T)>{};\n\n#else\n\n#ifdef __SUNPRO_CC\n#include <boost/type_traits/is_constructible.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#if __cplusplus >= 201103\n#define SOLARIS_EXTRA_CHECK && is_constructible<typename remove_const<T>::type, typename remove_const<T>::type&&>::value\n#endif\n#endif\n\n#ifndef SOLARIS_EXTRA_CHECK\n#define SOLARIS_EXTRA_CHECK\n#endif\n\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n\nnamespace boost {\n\ntemplate <typename T> struct has_trivial_move_constructor \n   : public integral_constant<bool, ::boost::is_pod<T>::value && !::boost::is_volatile<T>::value SOLARIS_EXTRA_CHECK>{};\n\n#undef SOLARIS_EXTRA_CHECK\n\n#endif\n\ntemplate <> struct has_trivial_move_constructor<void> : public false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct has_trivial_move_constructor<void const> : public false_type{};\ntemplate <> struct has_trivial_move_constructor<void volatile> : public false_type{};\ntemplate <> struct has_trivial_move_constructor<void const volatile> : public false_type{};\n#endif\n// What should we do with reference types??? The standard seems to suggest these are trivial, even if the thing they reference is not:\ntemplate <class T> struct has_trivial_move_constructor<T&> : public true_type{};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <class T> struct has_trivial_move_constructor<T&&> : public true_type{};\n#endif\n// Arrays can not be explicitly copied:\ntemplate <class T, std::size_t N> struct has_trivial_move_constructor<T[N]> : public false_type{};\ntemplate <class T> struct has_trivial_move_constructor<T[]> : public false_type{};\n\n} // namespace boost\n\n#endif // BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_unary_minus.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_UNARY_MINUS_HPP_INCLUDED\n#define BOOST_TT_HAS_UNARY_MINUS_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_unary_minus\n#define BOOST_TT_TRAIT_OP -\n#define BOOST_TT_FORBIDDEN_IF\\\n   /* pointer */\\\n   ::boost::is_pointer< Rhs_noref >::value\n\n\n#include <boost/type_traits/detail/has_prefix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_unary_plus.hpp",
    "content": "//  (C) Copyright 2009-2011 Frederic Bron.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_UNARY_PLUS_HPP_INCLUDED\n#define BOOST_TT_HAS_UNARY_PLUS_HPP_INCLUDED\n\n#define BOOST_TT_TRAIT_NAME has_unary_plus\n#define BOOST_TT_TRAIT_OP +\n#define BOOST_TT_FORBIDDEN_IF\\\n   false\n\n#include <boost/type_traits/detail/has_prefix_operator.hpp>\n\n#undef BOOST_TT_TRAIT_NAME\n#undef BOOST_TT_TRAIT_OP\n#undef BOOST_TT_FORBIDDEN_IF\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/has_virtual_destructor.hpp",
    "content": "\n//  (C) Copyright John Maddock 2005.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_HAS_VIRTUAL_DESTRUCTOR_HPP_INCLUDED\n#define BOOST_TT_HAS_VIRTUAL_DESTRUCTOR_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n#ifdef BOOST_HAS_VIRTUAL_DESTRUCTOR\n   template <class T> struct has_virtual_destructor : public integral_constant<bool, BOOST_HAS_VIRTUAL_DESTRUCTOR(T)>{};\n#else\n   template <class T> struct has_virtual_destructor : public integral_constant<bool, false>{};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/ice.hpp",
    "content": "\n//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  macros and helpers for working with integral-constant-expressions.\n\n#ifndef BOOST_TT_ICE_HPP_INCLUDED\n#define BOOST_TT_ICE_HPP_INCLUDED\n\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n#include <boost/type_traits/detail/ice_and.hpp>\n#include <boost/type_traits/detail/ice_not.hpp>\n#include <boost/type_traits/detail/ice_eq.hpp>\n\n#endif // BOOST_TT_ICE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/integral_constant.hpp",
    "content": "//  (C) Copyright John Maddock 2015. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP\n#define BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if (BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \\\n   || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n   || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \\\n   || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \\\n   || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) )\n\n\nnamespace boost{\n   namespace mpl\n   {\n      template <bool B> struct bool_;\n      template <class I, I val> struct integral_c;\n      struct integral_c_tag;\n   }\n}\n\n#else\n\nnamespace mpl_{\n\n   template <bool B> struct bool_;\n   template <class I, I val> struct integral_c;\n   struct integral_c_tag;\n}\n\nnamespace boost\n{\n   namespace mpl\n   {\n      using ::mpl_::bool_;\n      using ::mpl_::integral_c;\n      using ::mpl_::integral_c_tag;\n   }\n}\n\n#endif\n\nnamespace boost{\n\n   template <class T, T val>\n   struct integral_constant\n   {\n      typedef mpl::integral_c_tag tag;\n      typedef T value_type;\n      typedef integral_constant<T, val> type;\n      static const T value = val;\n      //\n      // This helper function is just to disable type-punning \n      // warnings from GCC:\n      //\n      template <class U>\n      static U& dereference(U* p) { return *p; }\n\n      operator const mpl::integral_c<T, val>& ()const\n      {\n         static const char data[sizeof(long)] = { 0 };\n         return dereference(reinterpret_cast<const mpl::integral_c<T, val>*>(&data));\n      }\n      BOOST_CONSTEXPR operator T()const { return val; }\n   };\n\n   template <class T, T val>\n   T const integral_constant<T, val>::value;\n      \n   template <bool val>\n   struct integral_constant<bool, val>\n   {\n      typedef mpl::integral_c_tag tag;\n      typedef bool value_type;\n      typedef integral_constant<bool, val> type;\n      static const bool value = val;\n      //\n      // This helper function is just to disable type-punning \n      // warnings from GCC:\n      //\n      template <class T>\n      static T& dereference(T* p) { return *p; }\n\n      operator const mpl::bool_<val>& ()const\n      {\n         static const char data = 0;\n         return dereference(reinterpret_cast<const mpl::bool_<val>*>(&data));\n      }\n      BOOST_CONSTEXPR operator bool()const { return val; }\n   };\n\n   template <bool val>\n   bool const integral_constant<bool, val>::value;\n\n   typedef integral_constant<bool, true> true_type;\n   typedef integral_constant<bool, false> false_type;\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/integral_promotion.hpp",
    "content": "// Copyright 2005 Alexander Nasonov.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef FILE_boost_type_traits_integral_promotion_hpp_INCLUDED\n#define FILE_boost_type_traits_integral_promotion_hpp_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n\nnamespace boost {\n\nnamespace type_traits { namespace detail {\n\n// 4.5/2\ntemplate <class T> struct need_promotion : public boost::is_enum<T> {};\n\n// 4.5/1\ntemplate<> struct need_promotion<char              > : public true_type {};\ntemplate<> struct need_promotion<signed char       > : public true_type {};\ntemplate<> struct need_promotion<unsigned char     > : public true_type {};\ntemplate<> struct need_promotion<signed short int  > : public true_type {};\ntemplate<> struct need_promotion<unsigned short int> : public true_type {};\n\n\n// Specializations for non-standard types.\n// Type is promoted if it's smaller then int.\n\n#define BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(T) \\\n    template<> struct need_promotion<T>          \\\n        : public integral_constant<bool, (sizeof(T) < sizeof(int))> {};\n\n// Same set of integral types as in boost/type_traits/is_integral.hpp.\n// Please, keep in sync.\n#if (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \\\n    || (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300))\n// TODO: common macro for this #if. Or better yet, PP SEQ of non-standard types.\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(__int8          )\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int8 )\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(__int16         )\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int16)\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(__int32         )\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int32)\n#ifdef __BORLANDC__\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int64)\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(         __int64)\n#endif\n#endif\n\n#if defined(BOOST_HAS_LONG_LONG)\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(boost::ulong_long_type)\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(boost::long_long_type )\n#elif defined(BOOST_HAS_MS_INT64)\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int64)\nBOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(         __int64)\n#endif\n\n#undef BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE\n\n\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\n// 4.5/2\ntemplate<> struct need_promotion<wchar_t> : public true_type {};\n#endif\n\n// 4.5/3 (integral bit-field) is not supported.\n\n// 4.5/4\ntemplate<> struct need_promotion<bool> : public true_type {};\n\n\n// Get promoted type by index and cv qualifiers.\n\ntemplate<int Index, int IsConst, int IsVolatile> struct promote_from_index;\n\n#define BOOST_TT_AUX_PROMOTE_FROM_INDEX(N,T)                                   \\\n    template<> struct promote_from_index<N,0,0> { typedef T type; };           \\\n    template<> struct promote_from_index<N,0,1> { typedef T volatile type; };  \\\n    template<> struct promote_from_index<N,1,0> { typedef T const type; };     \\\n    template<> struct promote_from_index<N,1,1> { typedef T const volatile type; };\n\n\nBOOST_TT_AUX_PROMOTE_FROM_INDEX(1, int          )\nBOOST_TT_AUX_PROMOTE_FROM_INDEX(2, unsigned int )\nBOOST_TT_AUX_PROMOTE_FROM_INDEX(3, long         )\nBOOST_TT_AUX_PROMOTE_FROM_INDEX(4, unsigned long)\n\n\n// WARNING: integral promotions to non-standard types\n// long long and __int64 are not defined by the standard.\n// Additional specialisations and overloads shouldn't\n// introduce ambiguity, though.\n\n#if defined(BOOST_HAS_LONG_LONG)\nBOOST_TT_AUX_PROMOTE_FROM_INDEX(5, boost::long_long_type )\nBOOST_TT_AUX_PROMOTE_FROM_INDEX(6, boost::ulong_long_type)\n#elif defined(BOOST_HAS_MS_INT64)\nBOOST_TT_AUX_PROMOTE_FROM_INDEX(7, __int64         )\nBOOST_TT_AUX_PROMOTE_FROM_INDEX(8, unsigned __int64)\n#endif\n\n#undef BOOST_TT_AUX_PROMOTE_FROM_INDEX\n\n\n// Define BOOST_TT_AUX_PROMOTED_INDEX_TESTER:\n#if !defined(BOOST_MSVC)\n\ntemplate<int N>\nstruct sized_type_for_promotion\n{\n    typedef char (&type)[N];\n};\n\n#define BOOST_TT_AUX_PROMOTED_INDEX_TESTER(I,T) \\\n    sized_type_for_promotion<I>::type promoted_index_tester(T);\n\n#else\n\n#define BOOST_TT_AUX_PROMOTED_INDEX_TESTER(I,T) \\\n    char (&promoted_index_tester(T))[I];\n\n#endif\n\nBOOST_TT_AUX_PROMOTED_INDEX_TESTER(1, int          )\nBOOST_TT_AUX_PROMOTED_INDEX_TESTER(2, unsigned int )\nBOOST_TT_AUX_PROMOTED_INDEX_TESTER(3, long         )\nBOOST_TT_AUX_PROMOTED_INDEX_TESTER(4, unsigned long)\n\n#if defined(BOOST_HAS_LONG_LONG)\nBOOST_TT_AUX_PROMOTED_INDEX_TESTER(5, boost::long_long_type )\nBOOST_TT_AUX_PROMOTED_INDEX_TESTER(6, boost::ulong_long_type)\n#elif defined(BOOST_HAS_MS_INT64)\nBOOST_TT_AUX_PROMOTED_INDEX_TESTER(7, __int64         )\nBOOST_TT_AUX_PROMOTED_INDEX_TESTER(8, unsigned __int64)\n#endif\n\n#undef BOOST_TT_AUX_PROMOTED_INDEX_TESTER\n\n\n// Get an index of promoted type for type T.\n// Precondition: need_promotion<T>\ntemplate<class T>\nstruct promoted_index\n{\n    static T testee; // undefined\n    BOOST_STATIC_CONSTANT(int, value = sizeof(promoted_index_tester(+testee)) );\n    // Unary plus promotes testee                    LOOK HERE ---> ^\n};\n\ntemplate<class T>\nstruct integral_promotion_impl\n{\n    typedef BOOST_DEDUCED_TYPENAME promote_from_index<\n        (boost::type_traits::detail::promoted_index<T>::value)\n      , (boost::is_const<T>::value)\n      , (boost::is_volatile<T>::value)\n      >::type type;\n};\n\ntemplate<class T, bool b> struct integral_promotion { typedef T type; };\ntemplate<class T> struct integral_promotion<T, true> : public integral_promotion_impl<T>{};\n\n} }\n\ntemplate <class T> struct integral_promotion\n{\nprivate:\n   typedef boost::type_traits::detail::need_promotion<typename remove_cv<T>::type> tag_type;\npublic:\n   typedef typename boost::type_traits::detail::integral_promotion<T, tag_type::value>::type type;\n};\n\n}\n\n#endif // #ifndef FILE_boost_type_traits_integral_promotion_hpp_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/intrinsics.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_INTRINSICS_HPP_INCLUDED\n#define BOOST_TT_INTRINSICS_HPP_INCLUDED\n\n#ifndef BOOST_TT_DISABLE_INTRINSICS\n\n#include <boost/config.hpp>\n\n#ifndef BOOST_TT_CONFIG_HPP_INCLUDED\n#include <boost/type_traits/detail/config.hpp>\n#endif\n\n//\n// Helper macros for builtin compiler support.\n// If your compiler has builtin support for any of the following\n// traits concepts, then redefine the appropriate macros to pick\n// up on the compiler support:\n//\n// (these should largely ignore cv-qualifiers)\n// BOOST_IS_UNION(T) should evaluate to true if T is a union type\n// BOOST_IS_POD(T) should evaluate to true if T is a POD type\n// BOOST_IS_EMPTY(T) should evaluate to true if T is an empty class type (and not a union)\n// BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) should evaluate to true if \"T x;\" has no effect\n// BOOST_HAS_TRIVIAL_COPY(T) should evaluate to true if T(t) <==> memcpy\n// BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) should evaluate to true if T(boost::move(t)) <==> memcpy\n// BOOST_HAS_TRIVIAL_ASSIGN(T) should evaluate to true if t = u <==> memcpy\n// BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) should evaluate to true if t = boost::move(u) <==> memcpy\n// BOOST_HAS_TRIVIAL_DESTRUCTOR(T) should evaluate to true if ~T() has no effect\n// BOOST_HAS_NOTHROW_CONSTRUCTOR(T) should evaluate to true if \"T x;\" can not throw\n// BOOST_HAS_NOTHROW_COPY(T) should evaluate to true if T(t) can not throw\n// BOOST_HAS_NOTHROW_ASSIGN(T) should evaluate to true if t = u can not throw\n// BOOST_HAS_VIRTUAL_DESTRUCTOR(T) should evaluate to true T has a virtual destructor\n// BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T) should evaluate to true if T has a non-throwing move constructor.\n// BOOST_IS_NOTHROW_MOVE_ASSIGN(T) should evaluate to true if T has a non-throwing move assignment operator.\n//\n// The following can also be defined: when detected our implementation is greatly simplified.\n//\n// BOOST_IS_ABSTRACT(T) true if T is an abstract type\n// BOOST_IS_BASE_OF(T,U) true if T is a base class of U\n// BOOST_IS_CLASS(T) true if T is a class type (and not a union)\n// BOOST_IS_CONVERTIBLE(T,U) true if T is convertible to U\n// BOOST_IS_ENUM(T) true is T is an enum\n// BOOST_IS_POLYMORPHIC(T) true if T is a polymorphic type\n// BOOST_ALIGNMENT_OF(T) should evaluate to the alignment requirements of type T.\n//\n// define BOOST_TT_DISABLE_INTRINSICS to prevent any intrinsics being used (mostly used when testing)\n//\n\n#ifdef BOOST_HAS_SGI_TYPE_TRAITS\n    // Hook into SGI's __type_traits class, this will pick up user supplied\n    // specializations as well as SGI - compiler supplied specializations.\n#   include <boost/type_traits/is_same.hpp>\n#   ifdef __NetBSD__\n      // There are two different versions of type_traits.h on NetBSD on Spark\n      // use an implicit include via algorithm instead, to make sure we get\n      // the same version as the std lib:\n#     include <algorithm>\n#   else\n#    include <type_traits.h>\n#   endif\n#   define BOOST_IS_POD(T) ::boost::is_same< typename ::__type_traits<T>::is_POD_type, ::__true_type>::value\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_default_constructor, ::__true_type>::value\n#   define BOOST_HAS_TRIVIAL_COPY(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_copy_constructor, ::__true_type>::value\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_assignment_operator, ::__true_type>::value\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_destructor, ::__true_type>::value\n\n#   ifdef __sgi\n#      define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#   endif\n#endif\n\n#if defined(__MSL_CPP__) && (__MSL_CPP__ >= 0x8000)\n    // Metrowerks compiler is acquiring intrinsic type traits support\n    // post version 8.  We hook into the published interface to pick up\n    // user defined specializations as well as compiler intrinsics as \n    // and when they become available:\n#   include <msl_utility>\n#   define BOOST_IS_UNION(T) BOOST_STD_EXTENSION_NAMESPACE::is_union<T>::value\n#   define BOOST_IS_POD(T) BOOST_STD_EXTENSION_NAMESPACE::is_POD<T>::value\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_default_ctor<T>::value\n#   define BOOST_HAS_TRIVIAL_COPY(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_copy_ctor<T>::value\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_assignment<T>::value\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_dtor<T>::value\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if (defined(BOOST_MSVC) && defined(BOOST_MSVC_FULL_VER) && (BOOST_MSVC_FULL_VER >=140050215))\\\n         || (defined(BOOST_INTEL) && defined(_MSC_VER) && (_MSC_VER >= 1500))\n//\n// Note that even though these intrinsics rely on other type traits classes\n// we do not #include those here as it produces cyclic dependencies and\n// can cause the intrinsics to not even be used at all!\n//\n#   define BOOST_IS_UNION(T) __is_union(T)\n#   define BOOST_IS_POD(T) (__is_pod(T) && __has_trivial_constructor(T))\n#   define BOOST_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) || ( ::boost::is_pod<T>::value && ! ::boost::is_const<T>::value && !::boost::is_volatile<T>::value))\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) || ::boost::is_pod<T>::value)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) || ::boost::has_trivial_constructor<T>::value)\n#if !defined(BOOST_INTEL)\n#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) || ::boost::has_trivial_copy<T>::value) && !is_array<T>::value)\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) || ::boost::is_pod<T>::value)\n#elif (_MSC_VER >= 1900)\n#   define BOOST_HAS_NOTHROW_COPY(T) ((__is_nothrow_constructible(T, typename add_lvalue_reference<typename add_const<T>::type>::type)) && !is_array<T>::value)\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__is_trivially_constructible(T, typename add_lvalue_reference<typename add_const<T>::type>::type))\n#endif\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) || ::boost::has_trivial_assign<T>::value)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n\n#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)\n#   define BOOST_IS_CLASS(T) __is_class(T)\n#   define BOOST_IS_CONVERTIBLE(T,U) ((__is_convertible_to(T,U) || (is_same<T,U>::value && !is_function<U>::value)) && !__is_abstract(U))\n#   define BOOST_IS_ENUM(T) __is_enum(T)\n//  This one fails if the default alignment has been changed with /Zp:\n//  #   define BOOST_ALIGNMENT_OF(T) __alignof(T)\n\n#   if defined(_MSC_VER) && (_MSC_VER >= 1700)\n#       define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) ((__has_trivial_move_constructor(T) || boost::is_pod<T>::value) && ! ::boost::is_volatile<T>::value && ! ::boost::is_reference<T>::value)\n#       define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) ((__has_trivial_move_assign(T) || boost::is_pod<T>::value) && ! ::boost::is_const<T>::value && !::boost::is_volatile<T>::value && ! ::boost::is_reference<T>::value)\n#   endif\n#ifndef BOOST_NO_CXX11_FINAL\n//  This one doesn't quite always do the right thing on older VC++ versions\n//  we really need it when the final keyword is supporyted though:\n#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n#endif\n#if _MSC_FULL_VER >= 180020827\n#   define BOOST_IS_NOTHROW_MOVE_ASSIGN(T) (__is_nothrow_assignable(T&, T&&))\n#   define BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T) (__is_nothrow_constructible(T, T&&))\n#endif\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(__DMC__) && (__DMC__ >= 0x848)\n// For Digital Mars C++, www.digitalmars.com\n#   define BOOST_IS_UNION(T) (__typeinfo(T) & 0x400)\n#   define BOOST_IS_POD(T) (__typeinfo(T) & 0x800)\n#   define BOOST_IS_EMPTY(T) (__typeinfo(T) & 0x1000)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__typeinfo(T) & 0x10)\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__typeinfo(T) & 0x20)\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__typeinfo(T) & 0x40)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__typeinfo(T) & 0x8)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__typeinfo(T) & 0x80)\n#   define BOOST_HAS_NOTHROW_COPY(T) (__typeinfo(T) & 0x100)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__typeinfo(T) & 0x200)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) (__typeinfo(T) & 0x4)\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(BOOST_CLANG) && defined(__has_feature) && !defined(__CUDACC__)\n//\n// Note that these intrinsics are disabled for the CUDA meta-compiler as it appears\n// to not support them, even though the underlying clang compiler does so.\n// This is a rubbish fix as it basically stops type traits from working correctly, \n// but maybe the best we can do for now.  See https://svn.boost.org/trac/boost/ticket/10694\n//\n//\n// Note that even though these intrinsics rely on other type traits classes\n// we do not #include those here as it produces cyclic dependencies and\n// can cause the intrinsics to not even be used at all!\n//\n#   include <cstddef>\n\n#   if __has_feature(is_union)\n#     define BOOST_IS_UNION(T) __is_union(T)\n#   endif\n#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_pod)\n#     define BOOST_IS_POD(T) __is_pod(T)\n#   endif\n#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_empty)\n#     define BOOST_IS_EMPTY(T) __is_empty(T)\n#   endif\n#   if __has_feature(has_trivial_constructor)\n#     define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)\n#   endif\n#   if __has_feature(has_trivial_copy)\n#     define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value)\n#   endif\n#   if __has_feature(has_trivial_assign)\n#     define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value && is_assignable<T&, const T&>::value)\n#   endif\n#   if __has_feature(has_trivial_destructor)\n#     define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T)  && is_destructible<T>::value)\n#   endif\n#   if __has_feature(has_nothrow_constructor)\n#     define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) && is_default_constructible<T>::value)\n#   endif\n#   if __has_feature(has_nothrow_copy)\n#     define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value && is_copy_constructible<T>::value)\n#   endif\n#   if __has_feature(has_nothrow_assign)\n#     define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value && is_assignable<T&, const T&>::value)\n#   endif\n#   if __has_feature(has_virtual_destructor)\n#     define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n#   endif\n#   if __has_feature(is_abstract)\n#     define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   endif\n#   if __has_feature(is_base_of)\n#     define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)\n#   endif\n#   if __has_feature(is_class)\n#     define BOOST_IS_CLASS(T) __is_class(T)\n#   endif\n#   if __has_feature(is_convertible_to)\n#     define BOOST_IS_CONVERTIBLE(T,U) __is_convertible_to(T,U)\n#   endif\n#   if __has_feature(is_enum)\n#     define BOOST_IS_ENUM(T) __is_enum(T)\n#   endif\n#   if __has_feature(is_polymorphic)\n#     define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n#   endif\n#   if __has_feature(has_trivial_move_constructor)\n#     define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) (__has_trivial_move_constructor(T)  && is_constructible<T, T&&>::value && !::boost::is_volatile<T>::value)\n#   endif\n#   if __has_feature(has_trivial_move_assign)\n#     define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) (__has_trivial_move_assign(T) && is_assignable<T&, T&&>::value && !::boost::is_volatile<T>::value)\n#   endif\n#   if (!defined(unix) && !defined(__unix__)) || defined(__LP64__) || !defined(__GNUC__)\n// GCC sometimes lies about alignment requirements\n// of type double on 32-bit unix platforms, use the\n// old implementation instead in that case:\n#     define BOOST_ALIGNMENT_OF(T) __alignof(T)\n#   endif\n#   if __has_feature(is_final)\n#     define BOOST_IS_FINAL(T) __is_final(T)\n#   endif\n\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) && !defined(BOOST_CLANG)\n//\n// Note that even though these intrinsics rely on other type traits classes\n// we do not #include those here as it produces cyclic dependencies and\n// can cause the intrinsics to not even be used at all!\n//\n\n#ifdef BOOST_INTEL\n#  define BOOST_INTEL_TT_OPTS || is_pod<T>::value\n#else\n#  define BOOST_INTEL_TT_OPTS\n#endif\n\n#   define BOOST_IS_UNION(T) __is_union(T)\n#   define BOOST_IS_POD(T) __is_pod(T)\n#   define BOOST_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ((__has_trivial_constructor(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile<T>::value)\n#   define BOOST_HAS_TRIVIAL_COPY(T) ((__has_trivial_copy(T) BOOST_INTEL_TT_OPTS) && !is_reference<T>::value)\n#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile<T>::value && ! ::boost::is_const<T>::value && is_assignable<T&, const T&>::value)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_INTEL_TT_OPTS && is_destructible<T>::value)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) && is_default_constructible<T>::value BOOST_INTEL_TT_OPTS)\n#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value && is_copy_constructible<T>::value)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_const<T>::value && is_assignable<T&, const T&>::value)\n#else\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile<T>::value && ! ::boost::is_const<T>::value)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_INTEL_TT_OPTS)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) BOOST_INTEL_TT_OPTS)\n#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value && !is_array<T>::value)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_const<T>::value && !is_array<T>::value)\n#endif\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n\n#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)\n#   define BOOST_IS_CLASS(T) __is_class(T)\n#   define BOOST_IS_ENUM(T) __is_enum(T)\n#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n#   if (!defined(unix) && !defined(__unix__)) || defined(__LP64__)\n      // GCC sometimes lies about alignment requirements\n      // of type double on 32-bit unix platforms, use the\n      // old implementation instead in that case:\n#     define BOOST_ALIGNMENT_OF(T) __alignof__(T)\n#   endif\n#   if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))\n#     define BOOST_IS_FINAL(T) __is_final(T)\n#   endif\n\n#   if (__GNUC__ >= 5) && (__cplusplus >= 201103)\n#     define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) (__is_trivially_assignable(T&, T&&) && is_assignable<T&, T&&>::value && !::boost::is_volatile<T>::value)\n#     define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) (__is_trivially_constructible(T, T&&) && is_constructible<T, T&&>::value && !::boost::is_volatile<T>::value)\n#   endif\n\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130)\n#   define BOOST_IS_UNION(T) __oracle_is_union(T)\n#   define BOOST_IS_POD(T) (__oracle_is_pod(T) && !is_function<T>::value)\n#   define BOOST_IS_EMPTY(T) __oracle_is_empty(T)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__oracle_has_trivial_constructor(T) && ! ::boost::is_volatile<T>::value)\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__oracle_has_trivial_copy(T) && !is_reference<T>::value)\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__oracle_has_trivial_assign(T) || __oracle_is_trivial(T)) && ! ::boost::is_volatile<T>::value && ! ::boost::is_const<T>::value && is_assignable<T&, const T&>::value)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__oracle_has_trivial_destructor(T) && is_destructible<T>::value)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) ((__oracle_has_nothrow_constructor(T) || __oracle_has_trivial_constructor(T) || __oracle_is_trivial(T)) && is_default_constructible<T>::value)\n//  __oracle_has_nothrow_copy appears to behave the same as __oracle_has_nothrow_assign, disabled for now:\n//#   define BOOST_HAS_NOTHROW_COPY(T) ((__oracle_has_nothrow_copy(T) || __oracle_has_trivial_copy(T) || __oracle_is_trivial(T)) && !is_volatile<T>::value && !is_reference<T>::value && is_copy_constructible<T>::value)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__oracle_has_nothrow_assign(T) || __oracle_has_trivial_assign(T) || __oracle_is_trivial(T)) && !is_volatile<T>::value && !is_const<T>::value && is_assignable<T&, const T&>::value)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __oracle_has_virtual_destructor(T)\n\n#   define BOOST_IS_ABSTRACT(T) __oracle_is_abstract(T)\n//#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)\n#   define BOOST_IS_CLASS(T) __oracle_is_class(T)\n#   define BOOST_IS_ENUM(T) __oracle_is_enum(T)\n#   define BOOST_IS_POLYMORPHIC(T) __oracle_is_polymorphic(T)\n#   define BOOST_ALIGNMENT_OF(T) __alignof__(T)\n#   define BOOST_IS_FINAL(T) __oracle_is_final(T)\n\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600)\n#   include <boost/type_traits/is_same.hpp>\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_volatile.hpp>\n\n#   define BOOST_IS_UNION(T) __is_union(T)\n#   define BOOST_IS_POD(T) __is_pod(T)\n#   define BOOST_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value)\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)\n#   define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n\n#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)\n#   define BOOST_IS_CLASS(T) __is_class(T)\n#   define BOOST_IS_ENUM(T) __is_enum(T)\n#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n#   define BOOST_ALIGNMENT_OF(T) __alignof__(T)\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n# if defined(__CODEGEARC__)\n#   include <boost/type_traits/is_same.hpp>\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_volatile.hpp>\n#   include <boost/type_traits/is_void.hpp>\n\n#   define BOOST_IS_UNION(T) __is_union(T)\n#   define BOOST_IS_POD(T) __is_pod(T)\n#   define BOOST_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T))\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T) && !is_reference<T>::value)\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T))\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T))\n#   define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy_constructor(T) && !is_volatile<T>::value && !is_reference<T>::value)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n\n#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_void<T>::value && !is_void<U>::value)\n#   define BOOST_IS_CLASS(T) __is_class(T)\n#   define BOOST_IS_CONVERTIBLE(T,U) (__is_convertible(T,U) || is_void<U>::value)\n#   define BOOST_IS_ENUM(T) __is_enum(T)\n#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n#   define BOOST_ALIGNMENT_OF(T) alignof(T)\n\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#endif // BOOST_TT_DISABLE_INTRINSICS\n\n#endif // BOOST_TT_INTRINSICS_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_abstract.hpp",
    "content": "#ifndef BOOST_TT_IS_ABSTRACT_CLASS_HPP\n#define BOOST_TT_IS_ABSTRACT_CLASS_HPP\n\n#if defined(_MSC_VER)\n# pragma once\n#endif\n\n/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8\n// is_abstract_class.hpp:\n//\n//  (C) Copyright 2002 Rani Sharoni (rani_sharoni@hotmail.com) and Robert Ramey\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//  \n//  See http://www.boost.org for updates, documentation, and revision history.\n//\n\n// Compile type discovery whether given type is abstract class or not.\n//\n//   Requires DR 337 to be supported by compiler\n//   (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#337).\n//\n//\n// Believed (Jan 2004) to work on:\n//  - GCC 3.4\n//  - VC++ 7.1\n//  - compilers with new EDG frontend (Intel C++ 7, Comeau 4.3.2)\n//\n// Doesn't work on:\n//  - VC++6, VC++7.0 and less\n//  - GCC 3.3.X and less\n//  - Borland C++ 6 and less\n//      \n//\n// History:\n//  - Originally written by Rani Sharoni, see\n//    http://groups.google.com/groups?selm=df893da6.0207110613.75b2fe90%40posting.google.com\n//    At this time supported by EDG (Intel C++ 7, Comeau 4.3.2) and VC7.1.\n//  - Adapted and added into Boost.Serialization library by Robert Ramey \n//    (starting with submission #10).\n//  - Jan 2004: GCC 3.4 fixed to support DR337 (Giovanni Bajo).\n//  - Jan 2004: modified to be part of Boost.TypeTraits (Pavel Vozenilek).\n//  - Nov 2004: Christoph Ludwig found that the implementation did not work with\n//              template types and gcc-3.4 or VC7.1, fix due to Christoph Ludwig\n//              and John Maddock.\n//  - Dec 2004: Added new config macro BOOST_NO_IS_ABSTRACT which causes the template\n//              to degrade gracefully, rather than trash the compiler (John Maddock).\n//\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#ifndef BOOST_IS_ABSTRACT\n#include <boost/static_assert.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/is_class.hpp>\n#ifdef BOOST_NO_IS_ABSTRACT\n#include <boost/type_traits/is_polymorphic.hpp>\n#endif\n#endif\n\nnamespace boost {\n\nnamespace detail{\n\n#ifdef BOOST_IS_ABSTRACT\ntemplate <class T>\nstruct is_abstract_imp\n{\n   BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_ABSTRACT(T));\n};\n#elif !defined(BOOST_NO_IS_ABSTRACT)\ntemplate<class T>\nstruct is_abstract_imp2\n{\n   // Deduction fails if T is void, function type, \n   // reference type (14.8.2/2)or an abstract class type \n   // according to review status issue #337\n   //\n   template<class U>\n   static type_traits::no_type check_sig(U (*)[1]);\n   template<class U>\n   static type_traits::yes_type check_sig(...);\n   //\n   // T must be a complete type, further if T is a template then\n   // it must be instantiated in order for us to get the right answer:\n   //\n   BOOST_STATIC_ASSERT(sizeof(T) != 0);\n\n   // GCC2 won't even parse this template if we embed the computation\n   // of s1 in the computation of value.\n#ifdef __GNUC__\n   BOOST_STATIC_CONSTANT(std::size_t, s1 = sizeof(is_abstract_imp2<T>::template check_sig<T>(0)));\n#else\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(push)\n#pragma warning(disable:6334)\n#endif\n   BOOST_STATIC_CONSTANT(std::size_t, s1 = sizeof(check_sig<T>(0)));\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(pop)\n#endif\n#endif\n    \n   BOOST_STATIC_CONSTANT(bool, value = \n      (s1 == sizeof(type_traits::yes_type)));\n};\n\ntemplate <bool v>\nstruct is_abstract_select\n{\n   template <class T>\n   struct rebind\n   {\n      typedef is_abstract_imp2<T> type;\n   };\n};\ntemplate <>\nstruct is_abstract_select<false>\n{\n   template <class T>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <class T>\nstruct is_abstract_imp\n{\n   typedef is_abstract_select< ::boost::is_class<T>::value> selector;\n   typedef typename selector::template rebind<T> binder;\n   typedef typename binder::type type;\n\n   BOOST_STATIC_CONSTANT(bool, value = type::value);\n};\n\n#endif\n}\n\n#ifndef BOOST_NO_IS_ABSTRACT\ntemplate <class T> struct is_abstract : public integral_constant<bool, ::boost::detail::is_abstract_imp<T>::value> {};\n#else\ntemplate <class T> struct is_abstract : public integral_constant<bool, ::boost::detail::is_polymorphic_imp<T>::value> {};\n#endif\n\n} // namespace boost\n\n#endif //BOOST_TT_IS_ABSTRACT_CLASS_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_arithmetic.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED\n#define BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED\n\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_floating_point.hpp>\n\nnamespace boost {\n\ntemplate <class T>\nstruct is_arithmetic : public integral_constant<bool, is_integral<T>::value || is_floating_point<T>::value> {};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_array.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n// Some fixes for is_array are based on a newsgroup posting by Jonathan Lundquist.\n\n\n#ifndef BOOST_TT_IS_ARRAY_HPP_INCLUDED\n#define BOOST_TT_IS_ARRAY_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n#include <cstddef>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\n   template <class T> struct is_array : public integral_constant<bool, __is_array(T)> {};\n#else\n   template <class T> struct is_array : public false_type {};\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\n   template <class T, std::size_t N> struct is_array<T[N]> : public true_type {};\n   template <class T, std::size_t N> struct is_array<T const[N]> : public true_type{};\n   template <class T, std::size_t N> struct is_array<T volatile[N]> : public true_type{};\n   template <class T, std::size_t N> struct is_array<T const volatile[N]> : public true_type{};\n#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n   template <class T> struct is_array<T[]> : public true_type{};\n   template <class T> struct is_array<T const[]> : public true_type{};\n   template <class T> struct is_array<T const volatile[]> : public true_type{};\n   template <class T> struct is_array<T volatile[]> : public true_type{};\n#endif\n#endif\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_ARRAY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_assignable.hpp",
    "content": "\n//  (C) Copyright John Maddock 2015.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED\n#define BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost{\n\n   template <class T, class U = T> struct is_assignable;\n\n}\n\n#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800)\n\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/declval.hpp>\n\nnamespace boost{\n\n   namespace detail{\n\n      struct is_assignable_imp\n      {\n         template<typename T, typename U, typename = decltype(boost::declval<T>() = boost::declval<U>())>\n         static boost::type_traits::yes_type test(int);\n\n         template<typename, typename>\n         static boost::type_traits::no_type test(...);\n      };\n\n   }\n\n   template <class T, class U> struct is_assignable : public integral_constant<bool, sizeof(detail::is_assignable_imp::test<T, U>(0)) == sizeof(boost::type_traits::yes_type)>{};\n   template <class T, std::size_t N, class U> struct is_assignable<T[N], U> : public is_assignable<T, U>{};\n   template <class T, std::size_t N, class U> struct is_assignable<T(&)[N], U> : public is_assignable<T&, U>{};\n   template <class T, class U> struct is_assignable<T[], U> : public is_assignable<T, U>{};\n   template <class T, class U> struct is_assignable<T(&)[], U> : public is_assignable<T&, U>{};\n   template <class U> struct is_assignable<void, U> : public integral_constant<bool, false>{};\n   template <class U> struct is_assignable<void const, U> : public integral_constant<bool, false>{};\n   template <class U> struct is_assignable<void volatile, U> : public integral_constant<bool, false>{};\n   template <class U> struct is_assignable<void const volatile, U> : public integral_constant<bool, false>{};\n\n#else\n\n#include <boost/type_traits/has_trivial_assign.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\nnamespace boost{\n\n   // We don't know how to implement this:\n   template <class T, class U> struct is_assignable : public integral_constant<bool, false>{};\n   template <class T, class U> struct is_assignable<T&, U> : public integral_constant<bool, is_pod<T>::value && is_pod<typename remove_reference<U>::type>::value>{};\n   template <class T, class U> struct is_assignable<const T&, U> : public integral_constant<bool, false>{};\n   template <class U> struct is_assignable<void, U> : public integral_constant<bool, false>{};\n   template <class U> struct is_assignable<void const, U> : public integral_constant<bool, false>{};\n   template <class U> struct is_assignable<void volatile, U> : public integral_constant<bool, false>{};\n   template <class U> struct is_assignable<void const volatile, U> : public integral_constant<bool, false>{};\n   /*\n   template <> struct is_assignable<void, void> : public integral_constant<bool, false>{};\n   template <> struct is_assignable<void const, void const> : public integral_constant<bool, false>{};\n   template <> struct is_assignable<void volatile, void volatile> : public integral_constant<bool, false>{};\n   template <> struct is_assignable<void const volatile, void const volatile> : public integral_constant<bool, false>{};\n   */\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_base_and_derived.hpp",
    "content": "\n//  (C) Copyright Rani Sharoni 2003.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n \n#ifndef BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED\n#define BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#ifndef BOOST_IS_BASE_OF\n#include <boost/type_traits/is_class.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/config.hpp>\n#include <boost/static_assert.hpp>\n#endif\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\n#ifndef BOOST_IS_BASE_OF\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581)) \\\n && !BOOST_WORKAROUND(__SUNPRO_CC , <= 0x540) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243) \\\n && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n\n                             // The EDG version number is a lower estimate.\n                             // It is not currently known which EDG version\n                             // exactly fixes the problem.\n\n/*************************************************************************\n\nThis version detects ambiguous base classes and private base classes\ncorrectly, and was devised by Rani Sharoni.\n\nExplanation by Terje Slettebo and Rani Sharoni.\n\nLet's take the multiple base class below as an example, and the following\nwill also show why there's not a problem with private or ambiguous base\nclass:\n\nstruct B {};\nstruct B1 : B {};\nstruct B2 : B {};\nstruct D : private B1, private B2 {};\n\nis_base_and_derived<B, D>::value;\n\nFirst, some terminology:\n\nSC  - Standard conversion\nUDC - User-defined conversion\n\nA user-defined conversion sequence consists of an SC, followed by an UDC,\nfollowed by another SC. Either SC may be the identity conversion.\n\nWhen passing the default-constructed Host object to the overloaded check_sig()\nfunctions (initialization 8.5/14/4/3), we have several viable implicit\nconversion sequences:\n\nFor \"static no_type check_sig(B const volatile *, int)\" we have the conversion\nsequences:\n\nC -> C const (SC - Qualification Adjustment) -> B const volatile* (UDC)\nC -> D const volatile* (UDC) -> B1 const volatile* / B2 const volatile* ->\n     B const volatile* (SC - Conversion)\n\nFor \"static yes_type check_sig(D const volatile *, T)\" we have the conversion\nsequence:\n\nC -> D const volatile* (UDC)\n\nAccording to 13.3.3.1/4, in context of user-defined conversion only the\nstandard conversion sequence is considered when selecting the best viable\nfunction, so it only considers up to the user-defined conversion. For the\nfirst function this means choosing between C -> C const and C -> C, and it\nchooses the latter, because it's a proper subset (13.3.3.2/3/2) of the\nformer. Therefore, we have:\n\nC -> D const volatile* (UDC) -> B1 const volatile* / B2 const volatile* ->\n     B const volatile* (SC - Conversion)\nC -> D const volatile* (UDC)\n\nHere, the principle of the \"shortest subsequence\" applies again, and it\nchooses C -> D const volatile*. This shows that it doesn't even need to\nconsider the multiple paths to B, or accessibility, as that possibility is\neliminated before it could possibly cause ambiguity or access violation.\n\nIf D is not derived from B, it has to choose between C -> C const -> B const\nvolatile* for the first function, and C -> D const volatile* for the second\nfunction, which are just as good (both requires a UDC, 13.3.3.2), had it not\nbeen for the fact that \"static no_type check_sig(B const volatile *, int)\" is\nnot templated, which makes C -> C const -> B const volatile* the best choice\n(13.3.3/1/4), resulting in \"no\".\n\nAlso, if Host::operator B const volatile* hadn't been const, the two\nconversion sequences for \"static no_type check_sig(B const volatile *, int)\", in\nthe case where D is derived from B, would have been ambiguous.\n\nSee also\nhttp://groups.google.com/groups?selm=df893da6.0301280859.522081f7%40posting.\ngoogle.com and links therein.\n\n*************************************************************************/\n\ntemplate <typename B, typename D>\nstruct bd_helper\n{\n   //\n   // This VC7.1 specific workaround stops the compiler from generating\n   // an internal compiler error when compiling with /vmg (thanks to\n   // Aleksey Gurtovoy for figuring out the workaround).\n   //\n#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)\n    template <typename T>\n    static type_traits::yes_type check_sig(D const volatile *, T);\n    static type_traits::no_type  check_sig(B const volatile *, int);\n#else\n    static type_traits::yes_type check_sig(D const volatile *, long);\n    static type_traits::no_type  check_sig(B const volatile * const&, int);\n#endif\n};\n\ntemplate<typename B, typename D>\nstruct is_base_and_derived_impl2\n{\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(push)\n#pragma warning(disable:6334)\n#endif\n    //\n    // May silently do the wrong thing with incomplete types\n    // unless we trap them here:\n    //\n    BOOST_STATIC_ASSERT(sizeof(B) != 0);\n    BOOST_STATIC_ASSERT(sizeof(D) != 0);\n\n    struct Host\n    {\n#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)\n        operator B const volatile *() const;\n#else\n        operator B const volatile * const&() const;\n#endif\n        operator D const volatile *();\n    };\n\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof(bd_helper<B,D>::check_sig(Host(), 0)) == sizeof(type_traits::yes_type));\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(pop)\n#endif\n};\n\n#else\n\n//\n// broken version:\n//\ntemplate<typename B, typename D>\nstruct is_base_and_derived_impl2\n{\n    BOOST_STATIC_CONSTANT(bool, value =\n        (::boost::is_convertible<D*,B*>::value));\n};\n\n#define BOOST_BROKEN_IS_BASE_AND_DERIVED\n\n#endif\n\ntemplate <typename B, typename D>\nstruct is_base_and_derived_impl3\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate <bool ic1, bool ic2, bool iss>\nstruct is_base_and_derived_select\n{\n   template <class T, class U>\n   struct rebind\n   {\n      typedef is_base_and_derived_impl3<T,U> type;\n   };\n};\n\ntemplate <>\nstruct is_base_and_derived_select<true,true,false>\n{\n   template <class T, class U>\n   struct rebind\n   {\n      typedef is_base_and_derived_impl2<T,U> type;\n   };\n};\n\ntemplate <typename B, typename D>\nstruct is_base_and_derived_impl\n{\n    typedef typename remove_cv<B>::type ncvB;\n    typedef typename remove_cv<D>::type ncvD;\n\n    typedef is_base_and_derived_select<\n       ::boost::is_class<B>::value,\n       ::boost::is_class<D>::value,\n       ::boost::is_same<ncvB,ncvD>::value> selector;\n    typedef typename selector::template rebind<ncvB,ncvD> binder;\n    typedef typename binder::type bound_type;\n\n    BOOST_STATIC_CONSTANT(bool, value = bound_type::value);\n};\n#else\ntemplate <typename B, typename D>\nstruct is_base_and_derived_impl\n{\n    typedef typename remove_cv<B>::type ncvB;\n    typedef typename remove_cv<D>::type ncvD;\n\n    BOOST_STATIC_CONSTANT(bool, value = (BOOST_IS_BASE_OF(B,D) && ! ::boost::is_same<ncvB,ncvD>::value));\n};\n#endif\n} // namespace detail\n\ntemplate <class Base, class Derived> struct is_base_and_derived\n   : public integral_constant<bool, (::boost::detail::is_base_and_derived_impl<Base, Derived>::value)> {};\n\ntemplate <class Base, class Derived> struct is_base_and_derived<Base&, Derived> : public false_type{};\ntemplate <class Base, class Derived> struct is_base_and_derived<Base, Derived&> : public false_type{};\ntemplate <class Base, class Derived> struct is_base_and_derived<Base&, Derived&> : public false_type{};\n\n#if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))\ntemplate <class Base> struct is_base_and_derived<Base, Base> : public true_type{};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_base_of.hpp",
    "content": "\n//  (C) Copyright Rani Sharoni 2003-2005.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n \n#ifndef BOOST_TT_IS_BASE_OF_HPP_INCLUDED\n#define BOOST_TT_IS_BASE_OF_HPP_INCLUDED\n\n#include <boost/type_traits/is_base_and_derived.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_class.hpp>\n\nnamespace boost {\n\n   namespace detail{\n      template <class B, class D>\n      struct is_base_of_imp\n      {\n          typedef typename remove_cv<B>::type ncvB;\n          typedef typename remove_cv<D>::type ncvD;\n          BOOST_STATIC_CONSTANT(bool, value = (\n            (::boost::detail::is_base_and_derived_impl<ncvB,ncvD>::value) ||\n            (::boost::is_same<ncvB,ncvD>::value && ::boost::is_class<ncvB>::value)));\n      };\n   }\n\n   template <class Base, class Derived> struct is_base_of\n      : public integral_constant<bool, (::boost::detail::is_base_of_imp<Base, Derived>::value)> {};\n\n   template <class Base, class Derived> struct is_base_of<Base, Derived&> : false_type{};\n   template <class Base, class Derived> struct is_base_of<Base&, Derived&> : false_type{};\n   template <class Base, class Derived> struct is_base_of<Base&, Derived> : false_type{};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_base_of_tr1.hpp",
    "content": "\n//  (C) Copyright Rani Sharoni 2003-2005.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n \n#ifndef BOOST_TT_IS_BASE_OF_TR1_HPP_INCLUDED\n#define BOOST_TT_IS_BASE_OF_TR1_HPP_INCLUDED\n\n#include <boost/type_traits/is_base_and_derived.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_class.hpp>\n\nnamespace boost { namespace tr1{\n\n   namespace detail{\n      template <class B, class D>\n      struct is_base_of_imp\n      {\n          typedef typename remove_cv<B>::type ncvB;\n          typedef typename remove_cv<D>::type ncvD;\n          BOOST_STATIC_CONSTANT(bool, value = ((::boost::detail::is_base_and_derived_impl<ncvB,ncvD>::value) || (::boost::is_same<ncvB,ncvD>::value)));\n      };\n   }\n\n   template <class Base, class Derived> struct is_base_of\n      : public integral_constant<bool, (::boost::tr1::detail::is_base_of_imp<Base, Derived>::value)>{};\n\n   template <class Base, class Derived> struct is_base_of<Base, Derived&> : public false_type{};\n   template <class Base, class Derived> struct is_base_of<Base&, Derived&> : public false_type{};\n   template <class Base, class Derived> struct is_base_of<Base&, Derived> : public false_type{};\n\n} } // namespace boost\n\n#endif // BOOST_TT_IS_BASE_OF_TR1_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_class.hpp",
    "content": "//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000-2003.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_CLASS_HPP_INCLUDED\n#define BOOST_TT_IS_CLASS_HPP_INCLUDED\n\n#include <boost/type_traits/detail/config.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#ifndef BOOST_IS_CLASS\n#   include <boost/type_traits/is_union.hpp>\n\n#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#else\n#   include <boost/type_traits/is_scalar.hpp>\n#   include <boost/type_traits/is_array.hpp>\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_void.hpp>\n#   include <boost/type_traits/is_function.hpp>\n#endif\n\n#endif // BOOST_IS_CLASS\n\nnamespace boost {\n\nnamespace detail {\n\n#ifndef BOOST_IS_CLASS\n#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n\n// This is actually the conforming implementation which works with\n// abstract classes.  However, enough compilers have trouble with\n// it that most will use the one in\n// boost/type_traits/object_traits.hpp. This implementation\n// actually works with VC7.0, but other interactions seem to fail\n// when we use it.\n\n// is_class<> metafunction due to Paul Mensonides\n// (leavings@attbi.com). For more details:\n// http://groups.google.com/groups?hl=en&selm=000001c1cc83%24e154d5e0%247772e50c%40c161550a&rnum=1\n#if defined(__GNUC__)  && !defined(__EDG_VERSION__)\n\ntemplate <class U> ::boost::type_traits::yes_type is_class_tester(void(U::*)(void));\ntemplate <class U> ::boost::type_traits::no_type is_class_tester(...);\n\ntemplate <typename T>\nstruct is_class_impl\n{\n\n    BOOST_STATIC_CONSTANT(bool, value =\n            sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type)\n            && ! ::boost::is_union<T>::value\n        );\n};\n\n#else\n\ntemplate <typename T>\nstruct is_class_impl\n{\n    template <class U> static ::boost::type_traits::yes_type is_class_tester(void(U::*)(void));\n    template <class U> static ::boost::type_traits::no_type is_class_tester(...);\n\n    BOOST_STATIC_CONSTANT(bool, value =\n            sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type)\n            && ! ::boost::is_union<T>::value\n        );\n};\n\n#endif\n\n#else\n\ntemplate <typename T>\nstruct is_class_impl\n{\n    BOOST_STATIC_CONSTANT(bool, value =\n        ! ::boost::is_union<T>::value >::value\n        && ! ::boost::is_scalar<T>::value\n        && ! ::boost::is_array<T>::value\n        && ! ::boost::is_reference<T>::value\n        && ! ::boost::is_void<T>::value\n        && ! ::boost::is_function<T>::value\n        );\n};\n\n# endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n# else // BOOST_IS_CLASS\ntemplate <typename T>\nstruct is_class_impl\n{\n    BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_CLASS(T));\n};\n# endif // BOOST_IS_CLASS\n\n} // namespace detail\n\ntemplate <class T> struct is_class : public integral_constant<bool, ::boost::detail::is_class_impl<T>::value> {};\n# ifdef __EDG_VERSION__\ntemplate <class T> struct is_class<const T> : public is_class<T>{};\ntemplate <class T> struct is_class<const volatile T> : public is_class<T>{};\ntemplate <class T> struct is_class<volatile T> : public is_class<T>{};\n# endif\n    \n} // namespace boost\n\n#endif // BOOST_TT_IS_CLASS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_complex.hpp",
    "content": "//  (C) Copyright John Maddock 2007. \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_COMPLEX_HPP\n#define BOOST_TT_IS_COMPLEX_HPP\n\n#include <complex>\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n   template <class T> struct is_complex : public false_type {};\n   template <class T> struct is_complex<const T > : public is_complex<T>{};\n   template <class T> struct is_complex<volatile const T > : public is_complex<T>{};\n   template <class T> struct is_complex<volatile T > : public is_complex<T>{};\n   template <class T> struct is_complex<std::complex<T> > : public true_type{};\n\n} // namespace boost\n\n#endif //BOOST_TT_IS_COMPLEX_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_compound.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_COMPOUND_HPP_INCLUDED\n#define BOOST_TT_IS_COMPOUND_HPP_INCLUDED\n\n#include <boost/type_traits/is_fundamental.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\n   template <class T> struct is_compound : public integral_constant<bool, __is_compound(T)> {};\n#else\n   template <class T> struct is_compound : public integral_constant<bool, ! ::boost::is_fundamental<T>::value> {};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_COMPOUND_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_const.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_CONST_HPP_INCLUDED\n#define BOOST_TT_IS_CONST_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\n\n   template <class T>\n   struct is_const : public integral_constant<bool, __is_const(T)> {};\n\n#else\n\n   template <class T>\n   struct is_const : public false_type {};\n   template <class T> struct is_const<T const> : public true_type{};\n   template <class T, size_t N> struct is_const<T const[N]> : public true_type{};\n   template <class T> struct is_const<T const[]> : public true_type{};\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_CONST_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_constructible.hpp",
    "content": "\n//  (C) Copyright John Maddock 2015.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_CONSTRUCTIBLE_HPP_INCLUDED\n#define BOOST_TT_IS_CONSTRUCTIBLE_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40500)\n\n#include <boost/type_traits/is_destructible.hpp>\n#include <boost/type_traits/is_default_constructible.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/declval.hpp>\n\nnamespace boost{\n\n   namespace detail{\n\n      struct is_constructible_imp\n      {\n         template<typename T, typename ...TheArgs, typename = decltype(T(boost::declval<TheArgs>()...))>\n         static boost::type_traits::yes_type test(int);\n         template<typename, typename...>\n         static boost::type_traits::no_type test(...);\n\n         template<typename T, typename Arg, typename = decltype(::new T(boost::declval<Arg>()))>\n         static boost::type_traits::yes_type test1(int);\n         template<typename, typename>\n         static boost::type_traits::no_type test1(...);\n\n         template <typename T>\n         static boost::type_traits::yes_type ref_test(T);\n         template <typename T>\n         static boost::type_traits::no_type ref_test(...);\n      };\n\n   }\n\n   template <class T, class ...Args> struct is_constructible : public integral_constant<bool, sizeof(detail::is_constructible_imp::test<T, Args...>(0)) == sizeof(boost::type_traits::yes_type)>{};\n   template <class T, class Arg> struct is_constructible<T, Arg> : public integral_constant<bool, is_destructible<T>::value && sizeof(detail::is_constructible_imp::test1<T, Arg>(0)) == sizeof(boost::type_traits::yes_type)>{};\n   template <class Ref, class Arg> struct is_constructible<Ref&, Arg> : public integral_constant<bool, sizeof(detail::is_constructible_imp::ref_test<Ref&>(boost::declval<Arg>())) == sizeof(boost::type_traits::yes_type)>{};\n   template <class Ref, class Arg> struct is_constructible<Ref&&, Arg> : public integral_constant<bool, sizeof(detail::is_constructible_imp::ref_test<Ref&&>(boost::declval<Arg>())) == sizeof(boost::type_traits::yes_type)>{};\n\n   template <> struct is_constructible<void> : public false_type{};\n   template <> struct is_constructible<void const> : public false_type{};\n   template <> struct is_constructible<void const volatile> : public false_type{};\n   template <> struct is_constructible<void volatile> : public false_type{};\n\n   template <class T> struct is_constructible<T> : public is_default_constructible<T>{};\n\n#else\n\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/is_default_constructible.hpp>\n\nnamespace boost{\n\n   // We don't know how to implement this:\n   template <class T, class U = void> struct is_constructible : public is_convertible<U, T>{};\n   template <class T> struct is_constructible<T, void> : public is_default_constructible<T>{};\n   template <> struct is_constructible<void, void> : public false_type{};\n   template <> struct is_constructible<void const, void> : public false_type{};\n   template <> struct is_constructible<void const volatile, void> : public false_type{};\n   template <> struct is_constructible<void volatile, void> : public false_type{};\n   template <class Ref> struct is_constructible<Ref&, void> : public false_type{};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n   template <class Ref> struct is_constructible<Ref&&, void> : public false_type{};\n#endif\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_CONSTRUCTIBLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_convertible.hpp",
    "content": "\n// Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n// Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)\n// Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED\n#define BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#ifndef BOOST_IS_CONVERTIBLE\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/detail/config.hpp>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_void.hpp>\n#if !defined(BOOST_NO_IS_ABSTRACT)\n#include <boost/type_traits/is_abstract.hpp>\n#endif\n#include <boost/type_traits/add_lvalue_reference.hpp>\n#include <boost/type_traits/add_rvalue_reference.hpp>\n#include <boost/type_traits/is_function.hpp>\n\n#if defined(__MWERKS__)\n#include <boost/type_traits/remove_reference.hpp>\n#endif\n#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)\n#  include <boost/type_traits/declval.hpp>\n#endif\n#elif defined(BOOST_MSVC) || defined(BOOST_INTEL)\n#include <boost/type_traits/is_function.hpp>\n#include <boost/type_traits/is_same.hpp>\n#endif // BOOST_IS_CONVERTIBLE\n\nnamespace boost {\n\n#ifndef BOOST_IS_CONVERTIBLE\n\n// is one type convertible to another?\n//\n// there are multiple versions of the is_convertible\n// template, almost every compiler seems to require its\n// own version.\n//\n// Thanks to Andrei Alexandrescu for the original version of the\n// conversion detection technique!\n//\n\nnamespace detail {\n\n#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !(defined(BOOST_GCC) && (BOOST_GCC < 40700))\n\n   // This is a C++11 conforming version, place this first and use it wherever possible:\n\n#  define BOOST_TT_CXX11_IS_CONVERTIBLE\n\n   template <class A, class B, class C>\n   struct or_helper\n   {\n      static const bool value = (A::value || B::value || C::value);\n   };\n\n   template<typename From, typename To, bool b = or_helper<boost::is_void<From>, boost::is_function<To>, boost::is_array<To> >::value>\n   struct is_convertible_basic_impl\n   {\n      // Nothing converts to function or array, but void converts to void:\n      static const bool value = is_void<To>::value; \n   };\n\n   template<typename From, typename To>\n   class is_convertible_basic_impl<From, To, false>\n   {\n      typedef char one;\n      typedef int  two;\n\n      template<typename To1>\n      static void test_aux(To1);\n\n      template<typename From1, typename To1>\n      static decltype(test_aux<To1>(boost::declval<From1>()), one()) test(int);\n\n      template<typename, typename>\n      static two test(...);\n\n   public:\n      static const bool value = sizeof(test<From, To>(0)) == 1;\n   };\n\n#elif defined(__BORLANDC__) && (__BORLANDC__ < 0x560)\n//\n// special version for Borland compilers\n// this version breaks when used for some\n// UDT conversions:\n//\ntemplate <typename From, typename To>\nstruct is_convertible_impl\n{\n#pragma option push -w-8074\n    // This workaround for Borland breaks the EDG C++ frontend,\n    // so we only use it for Borland.\n    template <typename T> struct checker\n    {\n        static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);\n        static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(T);\n    };\n\n    static typename add_lvalue_reference<From>::type  _m_from;\n    static bool const value = sizeof( checker<To>::_m_check(_m_from) )\n        == sizeof(::boost::type_traits::yes_type);\n#pragma option pop\n};\n\n#elif defined(__GNUC__) || defined(__BORLANDC__) && (__BORLANDC__ < 0x600)\n// special version for gcc compiler + recent Borland versions\n// note that this does not pass UDT's through (...)\n\nstruct any_conversion\n{\n    template <typename T> any_conversion(const volatile T&);\n    template <typename T> any_conversion(const T&);\n    template <typename T> any_conversion(volatile T&);\n    template <typename T> any_conversion(T&);\n};\n\ntemplate <typename T> struct checker\n{\n    static boost::type_traits::no_type _m_check(any_conversion ...);\n    static boost::type_traits::yes_type _m_check(T, int);\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl\n{\n    typedef typename add_lvalue_reference<From>::type lvalue_type;\n    typedef typename add_rvalue_reference<From>::type rvalue_type;\n    static lvalue_type _m_from;\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 6)))\n    static bool const value =\n        sizeof( boost::detail::checker<To>::_m_check(static_cast<rvalue_type>(_m_from), 0) )\n        == sizeof(::boost::type_traits::yes_type);\n#else\n    static bool const value =\n        sizeof( boost::detail::checker<To>::_m_check(_m_from, 0) )\n        == sizeof(::boost::type_traits::yes_type);\n#endif\n};\n\n#elif (defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 245) && !defined(__ICL)) \\\n      || defined(__IBMCPP__) || defined(__HP_aCC)\n//\n// This is *almost* an ideal world implementation as it doesn't rely\n// on undefined behaviour by passing UDT's through (...).\n// Unfortunately it doesn't quite pass all the tests for most compilers (sigh...)\n// Enable this for your compiler if is_convertible_test.cpp will compile it...\n//\n// Note we do not enable this for VC7.1, because even though it passes all the\n// type_traits tests it is known to cause problems when instantiation occurs\n// deep within the instantiation tree :-(\n//\nstruct any_conversion\n{\n    template <typename T> any_conversion(const volatile T&);\n    template <typename T> any_conversion(const T&);\n    template <typename T> any_conversion(volatile T&);\n    // we need this constructor to catch references to functions\n    // (which can not be cv-qualified):\n    template <typename T> any_conversion(T&);\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl\n{\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int);\n    typedef typename add_lvalue_reference<From>::type lvalue_type;\n    typedef typename add_rvalue_reference<From>::type rvalue_type; \n    static lvalue_type _m_from;\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(static_cast<rvalue_type>(_m_from), 0) ) == sizeof(::boost::type_traits::yes_type)\n        );\n#else\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(_m_from, 0) ) == sizeof(::boost::type_traits::yes_type)\n        );\n#endif\n};\n\n#elif defined(__DMC__)\n\nstruct any_conversion\n{\n    template <typename T> any_conversion(const volatile T&);\n    template <typename T> any_conversion(const T&);\n    template <typename T> any_conversion(volatile T&);\n    // we need this constructor to catch references to functions\n    // (which can not be cv-qualified):\n    template <typename T> any_conversion(T&);\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl\n{\n    // Using '...' doesn't always work on Digital Mars. This version seems to.\n    template <class T>\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion,  float, T);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int, int);\n    typedef typename add_lvalue_reference<From>::type lvalue_type;\n    typedef typename add_rvalue_reference<From>::type rvalue_type;\n    static lvalue_type _m_from;\n\n    // Static constants sometime cause the conversion of _m_from to To to be\n    // called. This doesn't happen with an enum.\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n    enum { value =\n        sizeof( _m_check(static_cast<rvalue_type>(_m_from), 0, 0) ) == sizeof(::boost::type_traits::yes_type)\n        };\n#else\n    enum { value =\n        sizeof( _m_check(_m_from, 0, 0) ) == sizeof(::boost::type_traits::yes_type)\n        };\n#endif\n};\n\n#elif defined(__MWERKS__)\n// \n// CW works with the technique implemented above for EDG, except when From\n// is a function type (or a reference to such a type), in which case\n// any_conversion won't be accepted as a valid conversion. We detect this\n// exceptional situation and channel it through an alternative algorithm.\n//\n\ntemplate <typename From, typename To,bool FromIsFunctionRef>\nstruct is_convertible_basic_impl_aux;\n\nstruct any_conversion\n{\n    template <typename T> any_conversion(const volatile T&);\n    template <typename T> any_conversion(const T&);\n    template <typename T> any_conversion(volatile T&);\n    template <typename T> any_conversion(T&);\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl_aux<From,To,false /*FromIsFunctionRef*/>\n{\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int);\n    typedef typename add_lvalue_reference<From>::type lvalue_type;\n    typedef typename add_rvalue_reference<From>::type rvalue_type; \n    static lvalue_type _m_from;\n\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(static_cast<rvalue_type>(_m_from), 0) ) == sizeof(::boost::type_traits::yes_type)\n        );\n#else\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(_m_from, 0) ) == sizeof(::boost::type_traits::yes_type)\n        );\n#endif\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl_aux<From,To,true /*FromIsFunctionRef*/>\n{\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To);\n    typedef typename add_lvalue_reference<From>::type lvalue_type;\n    typedef typename add_rvalue_reference<From>::type rvalue_type;\n    static lvalue_type _m_from;\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(static_cast<rvalue_type>(_m_from)) ) == sizeof(::boost::type_traits::yes_type)\n        );\n#else\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type)\n        );\n#endif\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl:\n  is_convertible_basic_impl_aux<\n    From,To,\n    ::boost::is_function<typename ::boost::remove_reference<From>::type>::value\n  >\n{};\n\n#else\n//\n// This version seems to work pretty well for a wide spectrum of compilers,\n// however it does rely on undefined behaviour by passing UDT's through (...).\n//\n\n//Workaround for old compilers like MSVC 7.1 to avoid\n//forming a reference to an array of unknown bound\ntemplate <typename From>\nstruct is_convertible_basic_impl_add_lvalue_reference\n   : add_lvalue_reference<From>\n{};\n\ntemplate <typename From>\nstruct is_convertible_basic_impl_add_lvalue_reference<From[]>\n{\n    typedef From type [];\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl\n{\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To);\n    typedef typename is_convertible_basic_impl_add_lvalue_reference<From>::type lvalue_type;\n    static lvalue_type _m_from;\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4244)\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(disable:6334)\n#endif\n#endif\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n    typedef typename add_rvalue_reference<From>::type rvalue_type; \n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(static_cast<rvalue_type>(_m_from)) ) == sizeof(::boost::type_traits::yes_type)\n        );\n#else\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type)\n        );\n#endif\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n};\n\n#endif // is_convertible_impl\n\n#if defined(__DMC__)\n// As before, a static constant sometimes causes errors on Digital Mars.\ntemplate <typename From, typename To>\nstruct is_convertible_impl\n{\n    enum { \n       value = ( ::boost::detail::is_convertible_basic_impl<From,To>::value && ! ::boost::is_array<To>::value && ! ::boost::is_function<To>::value) \n    };\n};\n#elif !defined(__BORLANDC__) || __BORLANDC__ > 0x551\ntemplate <typename From, typename To>\nstruct is_convertible_impl\n{\n   BOOST_STATIC_CONSTANT(bool, value = ( ::boost::detail::is_convertible_basic_impl<From, To>::value && !::boost::is_array<To>::value && !::boost::is_function<To>::value));\n};\n#endif\n\ntemplate <bool trivial1, bool trivial2, bool abstract_target>\nstruct is_convertible_impl_select\n{\n   template <class From, class To>\n   struct rebind\n   {\n      typedef is_convertible_impl<From, To> type;\n   };\n};\n\ntemplate <>\nstruct is_convertible_impl_select<true, true, false>\n{\n   template <class From, class To>\n   struct rebind\n   {\n      typedef true_type type;\n   };\n};\n\ntemplate <>\nstruct is_convertible_impl_select<false, false, true>\n{\n   template <class From, class To>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <>\nstruct is_convertible_impl_select<true, false, true>\n{\n   template <class From, class To>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_impl_dispatch_base\n{\n#if !BOOST_WORKAROUND(__HP_aCC, < 60700)\n   typedef is_convertible_impl_select< \n      ::boost::is_arithmetic<From>::value, \n      ::boost::is_arithmetic<To>::value,\n#if !defined(BOOST_NO_IS_ABSTRACT) && !defined(BOOST_TT_CXX11_IS_CONVERTIBLE)\n      // We need to filter out abstract types, only if we don't have a strictly conforming C++11 version:\n      ::boost::is_abstract<To>::value\n#else\n      false\n#endif\n   > selector;\n#else\n   typedef is_convertible_impl_select<false, false, false> selector;\n#endif\n   typedef typename selector::template rebind<From, To> isc_binder;\n   typedef typename isc_binder::type type;\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_impl_dispatch \n   : public is_convertible_impl_dispatch_base<From, To>::type\n{};\n\n//\n// Now add the full and partial specialisations\n// for void types, these are common to all the\n// implementation above:\n//\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\n\ntemplate <> struct is_convertible_impl_dispatch<void, void> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void, void const> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void, void const volatile> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void, void volatile> : public true_type{};\n\ntemplate <> struct is_convertible_impl_dispatch<void const, void> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void const, void const> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void const, void const volatile> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void const, void volatile> : public true_type{};\n\ntemplate <> struct is_convertible_impl_dispatch<void const volatile, void> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void const volatile, void const> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void const volatile, void const volatile> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void const volatile, void volatile> : public true_type{};\n\ntemplate <> struct is_convertible_impl_dispatch<void volatile, void> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void volatile, void const> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void volatile, void const volatile> : public true_type{};\ntemplate <> struct is_convertible_impl_dispatch<void volatile, void volatile> : public true_type{};\n\n#else\ntemplate <> struct is_convertible_impl_dispatch<void, void> : public true_type{};\n#endif // BOOST_NO_CV_VOID_SPECIALIZATIONS\n\ntemplate <class To> struct is_convertible_impl_dispatch<void, To> : public false_type{};\ntemplate <class From> struct is_convertible_impl_dispatch<From, void> : public false_type{};\n\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <class To> struct is_convertible_impl_dispatch<void const, To> : public false_type{};\ntemplate <class From> struct is_convertible_impl_dispatch<From, void const> : public false_type{};\ntemplate <class To> struct is_convertible_impl_dispatch<void const volatile, To> : public false_type{};\ntemplate <class From> struct is_convertible_impl_dispatch<From, void const volatile> : public false_type{};\ntemplate <class To> struct is_convertible_impl_dispatch<void volatile, To> : public false_type{};\ntemplate <class From> struct is_convertible_impl_dispatch<From, void volatile> : public false_type{};\n#endif\n\n} // namespace detail\n\ntemplate <class From, class To> \nstruct is_convertible : public integral_constant<bool, ::boost::detail::is_convertible_impl_dispatch<From, To>::value> {};\n\n#else\n\ntemplate <class From, class To>\nstruct is_convertible : public integral_constant<bool, BOOST_IS_CONVERTIBLE(From, To)> {};\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_copy_assignable.hpp",
    "content": "//  (C) Copyright Ion Gaztanaga 2014.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_COPY_ASSIGNABLE_HPP_INCLUDED\n#define BOOST_TT_IS_COPY_ASSIGNABLE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/is_base_and_derived.hpp>\n#include <boost/noncopyable.hpp>\n\n#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_CXX11_DECLTYPE) \\\n   && !defined(BOOST_INTEL_CXX_VERSION) && \\\n      !(defined(BOOST_MSVC) && _MSC_VER == 1800)\n#define BOOST_TT_CXX11_IS_COPY_ASSIGNABLE\n#include <boost/type_traits/declval.hpp>\n#else\n   //For compilers without decltype\n   #include <boost/type_traits/is_const.hpp>\n   #include <boost/type_traits/is_array.hpp>\n   #include <boost/type_traits/add_reference.hpp>\n   #include <boost/type_traits/remove_reference.hpp>\n#endif\n\nnamespace boost {\n\nnamespace detail{\n\ntemplate <bool DerivedFromNoncopyable, class T>\nstruct is_copy_assignable_impl2 {\n\n// Intel compiler has problems with SFINAE for copy constructors and deleted functions:\n//\n// error: function *function_name* cannot be referenced -- it is a deleted function\n// static boost::type_traits::yes_type test(T1&, decltype(T1(boost::declval<T1&>()))* = 0);\n//                                                        ^ \n//\n// MSVC 12.0 (Visual 2013) has problems when the copy constructor has been deleted. See:\n// https://connect.microsoft.com/VisualStudio/feedback/details/800328/std-is-copy-constructible-is-broken\n#if defined(BOOST_TT_CXX11_IS_COPY_ASSIGNABLE)\n    typedef boost::type_traits::yes_type yes_type;\n    typedef boost::type_traits::no_type  no_type;\n\n    template <class U>\n    static decltype(::boost::declval<U&>() = ::boost::declval<const U&>(), yes_type() ) test(int);\n\n    template <class>\n    static no_type test(...);\n\n    static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);\n\n#else\n    static BOOST_DEDUCED_TYPENAME boost::add_reference<T>::type produce();\n\n    template <class T1>\n    static boost::type_traits::no_type test(T1&, typename T1::boost_move_no_copy_constructor_or_assign* = 0);\n\n    static boost::type_traits::yes_type test(...);\n    // If you see errors like this:\n    //\n    //      `'T::operator=(const T&)' is private`\n    //      `boost/type_traits/is_copy_assignable.hpp:NN:M: error: within this context`\n    //\n    // then you are trying to call that macro for a structure defined like that:\n    //\n    //      struct T {\n    //          ...\n    //      private:\n    //          T & operator=(const T &);\n    //          ...\n    //      };\n    //\n    // To fix that you must modify your structure:\n    //\n    //      // C++03 and C++11 version\n    //      struct T: private boost::noncopyable {\n    //          ...\n    //      private:\n    //          T & operator=(const T &);\n    //          ...\n    //      };\n    //\n    //      // C++11 version\n    //      struct T {\n    //          ...\n    //      private:\n    //          T& operator=(const T &) = delete;\n    //          ...\n    //      };\n    BOOST_STATIC_CONSTANT(bool, value = (\n            sizeof(test(produce())) == sizeof(boost::type_traits::yes_type)\n    ));\n   #endif\n};\n\ntemplate <class T>\nstruct is_copy_assignable_impl2<true, T> {\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate <class T>\nstruct is_copy_assignable_impl {\n\n#if !defined(BOOST_TT_CXX11_IS_COPY_ASSIGNABLE)\n    //For compilers without decltype, at least return false on const types, arrays\n    //types derived from boost::noncopyable and types defined as BOOST_MOVEABLE_BUT_NOT_COPYABLE\n    typedef BOOST_DEDUCED_TYPENAME boost::remove_reference<T>::type unreferenced_t;\n    BOOST_STATIC_CONSTANT(bool, value = (\n        boost::detail::is_copy_assignable_impl2<\n            boost::is_base_and_derived<boost::noncopyable, T>::value\n            || boost::is_const<unreferenced_t>::value || boost::is_array<unreferenced_t>::value\n            ,T\n        >::value\n    ));\n    #else\n    BOOST_STATIC_CONSTANT(bool, value = (\n        boost::detail::is_copy_assignable_impl2<\n            boost::is_base_and_derived<boost::noncopyable, T>::value,T\n        >::value\n    ));\n    #endif\n};\n\n} // namespace detail\n\ntemplate <class T> struct is_copy_assignable : public integral_constant<bool, ::boost::detail::is_copy_assignable_impl<T>::value>{};\ntemplate <> struct is_copy_assignable<void> : public false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct is_copy_assignable<void const> : public false_type{};\ntemplate <> struct is_copy_assignable<void const volatile> : public false_type{};\ntemplate <> struct is_copy_assignable<void volatile> : public false_type{};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_COPY_ASSIGNABLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_copy_constructible.hpp",
    "content": "//  (C) Copyright Antony Polukhin 2013.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED\n#define BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40900)\n\n#include <boost/type_traits/is_constructible.hpp>\n\n#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1800)\n\nnamespace boost {\n\ntemplate <class T> struct is_copy_constructible : public boost::is_constructible<T, const T&>{};\n\ntemplate <> struct is_copy_constructible<void> : public false_type{};\ntemplate <> struct is_copy_constructible<void const> : public false_type{};\ntemplate <> struct is_copy_constructible<void const volatile> : public false_type{};\ntemplate <> struct is_copy_constructible<void volatile> : public false_type{};\n\n} // namespace boost\n\n#else\n//\n// Special version for VC12 which has a problem when a base class (such as non_copyable) has a deleted\n// copy constructor.  In this case the compiler thinks there really is a copy-constructor and tries to\n// instantiate the deleted member.  std::is_copy_constructible has the same issue (or at least returns\n// an incorrect value, which just defers the issue into the users code) as well.  We can at least fix\n// boost::non_copyable as a base class as a special case:\n//\n#include <boost/type_traits/is_base_and_derived.hpp>\n#include <boost/noncopyable.hpp>\n\nnamespace boost {\n\n   namespace detail\n   {\n\n      template <class T, bool b> struct is_copy_constructible_imp : public boost::is_constructible<T, const T&>{};\n      template <class T> struct is_copy_constructible_imp<T, true> : public false_type{};\n\n   }\n\n   template <class T> struct is_copy_constructible : public detail::is_copy_constructible_imp<T, is_base_and_derived<boost::noncopyable, T>::value>{};\n\n   template <> struct is_copy_constructible<void> : public false_type{};\n   template <> struct is_copy_constructible<void const> : public false_type{};\n   template <> struct is_copy_constructible<void const volatile> : public false_type{};\n   template <> struct is_copy_constructible<void volatile> : public false_type{};\n\n} // namespace boost\n\n#endif\n\n#else\n\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/is_base_and_derived.hpp>\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/type_traits/is_rvalue_reference.hpp>\n#include <boost/type_traits/declval.hpp>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/declval.hpp>\n#include <boost/noncopyable.hpp>\n\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4181)\n#endif\n\nnamespace boost {\n\n   namespace detail{\n\n      template <bool DerivedFromNoncopyable, class T>\n      struct is_copy_constructible_impl2 {\n\n         // Intel compiler has problems with SFINAE for copy constructors and deleted functions:\n         //\n         // error: function *function_name* cannot be referenced -- it is a deleted function\n         // static boost::type_traits::yes_type test(T1&, decltype(T1(boost::declval<T1&>()))* = 0);\n         //                                                        ^ \n         //\n         // MSVC 12.0 (Visual 2013) has problems when the copy constructor has been deleted. See:\n         // https://connect.microsoft.com/VisualStudio/feedback/details/800328/std-is-copy-constructible-is-broken\n#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_INTEL_CXX_VERSION) && !(defined(BOOST_MSVC) && _MSC_VER == 1800)\n\n#ifdef BOOST_NO_CXX11_DECLTYPE\n         template <class T1>\n         static boost::type_traits::yes_type test(const T1&, boost::mpl::int_<sizeof(T1(boost::declval<const T1&>()))>* = 0);\n#else\n         template <class T1>\n         static boost::type_traits::yes_type test(const T1&, decltype(T1(boost::declval<const T1&>()))* = 0);\n#endif\n\n         static boost::type_traits::no_type test(...);\n#else\n         template <class T1>\n         static boost::type_traits::no_type test(const T1&, typename T1::boost_move_no_copy_constructor_or_assign* = 0);\n         static boost::type_traits::yes_type test(...);\n#endif\n\n         // If you see errors like this:\n         //\n         //      `'T::T(const T&)' is private`\n         //      `boost/type_traits/is_copy_constructible.hpp:68:5: error: within this context`\n         //\n         // then you are trying to call that macro for a structure defined like that:\n         //\n         //      struct T {\n         //          ...\n         //      private:\n         //          T(const T &);\n         //          ...\n         //      };\n         //\n         // To fix that you must modify your structure:\n         //\n         //      // C++03 and C++11 version\n         //      struct T: private boost::noncopyable {\n         //          ...\n         //      private:\n         //          T(const T &);\n         //          ...\n         //      };\n         //\n         //      // C++11 version\n         //      struct T {\n         //          ...\n         //      private:\n         //          T(const T &) = delete;\n         //          ...\n         //      };\n         BOOST_STATIC_CONSTANT(bool, value = (\n            sizeof(test(\n            boost::declval<BOOST_DEDUCED_TYPENAME boost::add_reference<T const>::type>()\n            )) == sizeof(boost::type_traits::yes_type)\n            &&\n            !boost::is_rvalue_reference<T>::value\n            && !boost::is_array<T>::value\n            ));\n      };\n\n      template <class T>\n      struct is_copy_constructible_impl2<true, T> {\n         BOOST_STATIC_CONSTANT(bool, value = false);\n      };\n\n      template <class T>\n      struct is_copy_constructible_impl {\n\n         BOOST_STATIC_CONSTANT(bool, value = (\n            boost::detail::is_copy_constructible_impl2<\n            boost::is_base_and_derived<boost::noncopyable, T>::value,\n            T\n            >::value\n            ));\n      };\n\n   } // namespace detail\n\n   template <class T> struct is_copy_constructible : public integral_constant<bool, ::boost::detail::is_copy_constructible_impl<T>::value>{};\n   template <> struct is_copy_constructible<void> : public false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\n   template <> struct is_copy_constructible<void const> : public false_type{};\n   template <> struct is_copy_constructible<void volatile> : public false_type{};\n   template <> struct is_copy_constructible<void const volatile> : public false_type{};\n#endif\n\n} // namespace boost\n\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\n#endif\n\n#endif // BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_default_constructible.hpp",
    "content": "\n//  (C) Copyright John Maddock 2015.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED\n#define BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40500)\n\n#include <boost/type_traits/detail/yes_no_type.hpp>\n\nnamespace boost{\n\n   namespace detail{\n\n      struct is_default_constructible_imp\n      {\n         template<typename _Tp, typename = decltype(_Tp())>\n         static boost::type_traits::yes_type test(int);\n\n         template<typename>\n         static boost::type_traits::no_type test(...);\n      };\n\n   }\n\n   template <class T> struct is_default_constructible : public integral_constant<bool, sizeof(detail::is_default_constructible_imp::test<T>(0)) == sizeof(boost::type_traits::yes_type)>{};\n   template <class T, std::size_t N> struct is_default_constructible<T[N]> : public is_default_constructible<T>{};\n   template <class T> struct is_default_constructible<T[]> : public is_default_constructible<T>{};\n   template <class T> struct is_default_constructible<T&> : public integral_constant<bool, false>{};\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) \n   template <class T> struct is_default_constructible<T&&> : public integral_constant<bool, false>{};\n#endif\n   template <> struct is_default_constructible<void> : public integral_constant<bool, false>{};\n   template <> struct is_default_constructible<void const> : public integral_constant<bool, false>{};\n   template <> struct is_default_constructible<void volatile> : public integral_constant<bool, false>{};\n   template <> struct is_default_constructible<void const volatile> : public integral_constant<bool, false>{};\n\n#else\n\n#include <boost/type_traits/is_pod.hpp>\n\nnamespace boost{\n\n   // We don't know how to implement this, note we can not use has_trivial_constructor here\n   // because the correct implementation of that trait requires this one:\n   template <class T> struct is_default_constructible : public is_pod<T>{};\n   template <> struct is_default_constructible<void> : public integral_constant<bool, false>{};\n   template <> struct is_default_constructible<void const> : public integral_constant<bool, false>{};\n   template <> struct is_default_constructible<void volatile> : public integral_constant<bool, false>{};\n   template <> struct is_default_constructible<void const volatile> : public integral_constant<bool, false>{};\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_destructible.hpp",
    "content": "\n//  (C) Copyright John Maddock 2015.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED\n#define BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800)\n\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/declval.hpp>\n\nnamespace boost{\n\n   namespace detail{\n\n      struct is_destructible_imp\n      {\n         template<typename T, typename = decltype(boost::declval<T&>().~T())>\n         static boost::type_traits::yes_type test(int);\n         template<typename>\n         static boost::type_traits::no_type test(...);\n      };\n\n   }\n\n   template <class T> struct is_destructible : public integral_constant<bool, sizeof(detail::is_destructible_imp::test<T>(0)) == sizeof(boost::type_traits::yes_type)>{};\n\n#else\n\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/is_class.hpp>\n\nnamespace boost{\n\n   // We don't know how to implement this:\n   template <class T> struct is_destructible : public integral_constant<bool, is_pod<T>::value || is_class<T>::value>{};\n#endif\n\n   template <> struct is_destructible<void> : public false_type{};\n   template <> struct is_destructible<void const> : public false_type{};\n   template <> struct is_destructible<void volatile> : public false_type{};\n   template <> struct is_destructible<void const volatile> : public false_type{};\n   template <class T> struct is_destructible<T&> : public is_destructible<T>{};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\n   template <class T> struct is_destructible<T&&> : public is_destructible<T>{};\n#endif\n   template <class T, std::size_t N> struct is_destructible<T[N]> : public is_destructible<T>{};\n   template <class T> struct is_destructible<T[]> : public is_destructible<T>{};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_empty.hpp",
    "content": "\n// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_EMPTY_HPP_INCLUDED\n#define BOOST_TT_IS_EMPTY_HPP_INCLUDED\n\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/detail/config.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_class.hpp>\n#include <boost/type_traits/add_reference.hpp>\n\n#ifndef BOOST_INTERNAL_IS_EMPTY\n#define BOOST_INTERNAL_IS_EMPTY(T) false\n#else\n#define BOOST_INTERNAL_IS_EMPTY(T) BOOST_IS_EMPTY(T)\n#endif\n\nnamespace boost {\n\nnamespace detail {\n\n\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4624) // destructor could not be generated\n#endif\n\ntemplate <typename T>\nstruct empty_helper_t1 : public T\n{\n    empty_helper_t1();  // hh compiler bug workaround\n    int i[256];\nprivate:\n   // suppress compiler warnings:\n   empty_helper_t1(const empty_helper_t1&);\n   empty_helper_t1& operator=(const empty_helper_t1&);\n};\n\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\nstruct empty_helper_t2 { int i[256]; };\n\n#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)\n\ntemplate <typename T, bool is_a_class = false>\nstruct empty_helper\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate <typename T>\nstruct empty_helper<T, true>\n{\n    BOOST_STATIC_CONSTANT(\n        bool, value = (sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2))\n        );\n};\n\ntemplate <typename T>\nstruct is_empty_impl\n{\n    typedef typename remove_cv<T>::type cvt;\n    BOOST_STATIC_CONSTANT(\n        bool, \n        value = ( ::boost::detail::empty_helper<cvt,::boost::is_class<T>::value>::value || BOOST_INTERNAL_IS_EMPTY(cvt)));\n};\n\n#else // __BORLANDC__\n\ntemplate <typename T, bool is_a_class, bool convertible_to_int>\nstruct empty_helper\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate <typename T>\nstruct empty_helper<T, true, false>\n{\n    BOOST_STATIC_CONSTANT(bool, value = (\n        sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2)\n        ));\n};\n\ntemplate <typename T>\nstruct is_empty_impl\n{\n   typedef typename remove_cv<T>::type cvt;\n   typedef typename add_reference<T>::type r_type;\n\n   BOOST_STATIC_CONSTANT(\n       bool, value = (\n              ::boost::detail::empty_helper<\n                  cvt\n                , ::boost::is_class<T>::value\n                , ::boost::is_convertible< r_type,int>::value\n              >::value || BOOST_INTERNAL_IS_EMPTY(cvt));\n};\n\n#endif // __BORLANDC__\n\n} // namespace detail\n\ntemplate <class T> struct is_empty : integral_constant<bool, ::boost::detail::is_empty_impl<T>::value> {};\n\n} // namespace boost\n\n#undef BOOST_INTERNAL_IS_EMPTY\n\n#endif // BOOST_TT_IS_EMPTY_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_enum.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_ENUM_HPP_INCLUDED\n#define BOOST_TT_IS_ENUM_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#ifndef BOOST_IS_ENUM\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/is_array.hpp>\n#ifdef __GNUC__\n#include <boost/type_traits/is_function.hpp>\n#endif\n#include <boost/type_traits/detail/config.hpp>\n#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) \n#  include <boost/type_traits/is_class.hpp>\n#  include <boost/type_traits/is_union.hpp>\n#endif\n#endif\n\nnamespace boost {\n\n#ifndef BOOST_IS_ENUM\n#if !(defined(__BORLANDC__) && (__BORLANDC__ <= 0x551))\n\nnamespace detail {\n\n#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) \n\ntemplate <typename T>\nstruct is_class_or_union\n{\n   BOOST_STATIC_CONSTANT(bool, value = ::boost::is_class<T>::value || ::boost::is_union<T>::value);\n};\n\n#else\n\ntemplate <typename T>\nstruct is_class_or_union\n{\n# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))// we simply can't detect it this way.\n    BOOST_STATIC_CONSTANT(bool, value = false);\n# else\n    template <class U> static ::boost::type_traits::yes_type is_class_or_union_tester(void(U::*)(void));\n\n#  if BOOST_WORKAROUND(__MWERKS__, <= 0x3000) // no SFINAE\n    static ::boost::type_traits::no_type is_class_or_union_tester(...);\n    BOOST_STATIC_CONSTANT(\n        bool, value = sizeof(is_class_or_union_tester(0)) == sizeof(::boost::type_traits::yes_type));\n#  else\n    template <class U>\n    static ::boost::type_traits::no_type is_class_or_union_tester(...);\n    BOOST_STATIC_CONSTANT(\n        bool, value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(::boost::type_traits::yes_type));\n#  endif\n# endif\n};\n#endif\n\nstruct int_convertible\n{\n    int_convertible(int);\n};\n\n// Don't evaluate convertibility to int_convertible unless the type\n// is non-arithmetic. This suppresses warnings with GCC.\ntemplate <bool is_typename_arithmetic_or_reference = true>\nstruct is_enum_helper\n{\n    template <typename T> struct type\n    {\n        BOOST_STATIC_CONSTANT(bool, value = false);\n    };\n};\n\ntemplate <>\nstruct is_enum_helper<false>\n{\n    template <typename T> struct type\n    {\n       static const bool value = ::boost::is_convertible<typename boost::add_reference<T>::type, ::boost::detail::int_convertible>::value;\n    };\n};\n\ntemplate <typename T> struct is_enum_impl\n{\n   //typedef ::boost::add_reference<T> ar_t;\n   //typedef typename ar_t::type r_type;\n\n#if defined(__GNUC__)\n\n#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n    \n   // We MUST check for is_class_or_union on conforming compilers in\n   // order to correctly deduce that noncopyable types are not enums\n   // (dwa 2002/04/15)...\n   BOOST_STATIC_CONSTANT(bool, selector =\n           ::boost::is_arithmetic<T>::value\n         || ::boost::is_reference<T>::value\n         || ::boost::is_function<T>::value\n         || is_class_or_union<T>::value\n         || is_array<T>::value);\n#else\n   // ...however, not checking is_class_or_union on non-conforming\n   // compilers prevents a dependency recursion.\n   BOOST_STATIC_CONSTANT(bool, selector =\n           ::boost::is_arithmetic<T>::value\n         || ::boost::is_reference<T>::value\n         || ::boost::is_function<T>::value\n         || is_array<T>::value);\n#endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n\n#else // !defined(__GNUC__):\n    \n   BOOST_STATIC_CONSTANT(bool, selector =\n           ::boost::is_arithmetic<T>::value\n         || ::boost::is_reference<T>::value\n         || is_class_or_union<T>::value\n         || is_array<T>::value);\n    \n#endif\n\n#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)\n    typedef ::boost::detail::is_enum_helper<\n          ::boost::detail::is_enum_impl<T>::selector\n        > se_t;\n#else\n    typedef ::boost::detail::is_enum_helper<selector> se_t;\n#endif\n\n    typedef typename se_t::template type<T> helper;\n    BOOST_STATIC_CONSTANT(bool, value = helper::value);\n};\n\n} // namespace detail\n\ntemplate <class T> struct is_enum : public integral_constant<bool, ::boost::detail::is_enum_impl<T>::value> {};\n\n#else // __BORLANDC__\n//\n// buggy is_convertible prevents working\n// implementation of is_enum:\ntemplate <class T> struct is_enum : public integral_constant<bool, false> {};\n\n#endif\n\n#else // BOOST_IS_ENUM\n\ntemplate <class T> struct is_enum : public integral_constant<bool, BOOST_IS_ENUM(T)> {};\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_ENUM_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_final.hpp",
    "content": "\n//  Copyright (c) 2014 Agustin Berge\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_FINAL_HPP_INCLUDED\n#define BOOST_TT_IS_FINAL_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#ifdef BOOST_IS_FINAL\n#include <boost/type_traits/remove_cv.hpp>\n#endif\n\nnamespace boost {\n\n#ifdef BOOST_IS_FINAL\ntemplate <class T> struct is_final : public integral_constant<bool, BOOST_IS_FINAL(typename remove_cv<T>::type)> {};\n#else\ntemplate <class T> struct is_final : public integral_constant<bool, false> {};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_FINAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_float.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED\n\n// should be the last #include\n#include <boost/type_traits/is_floating_point.hpp>\n\nnamespace boost {\n\n//* is a type T a floating-point type described in the standard (3.9.1p8)\n   template <class T> struct is_float : public is_floating_point<T> {};\n} // namespace boost\n\n#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_floating_point.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n//* is a type T a floating-point type described in the standard (3.9.1p8)\n   template <class T> struct is_floating_point : public false_type{};\n   template <class T> struct is_floating_point<const T> : public is_floating_point<T>{};\n   template <class T> struct is_floating_point<volatile const T> : public is_floating_point<T>{};\n   template <class T> struct is_floating_point<volatile T> : public is_floating_point<T>{};\n   template<> struct is_floating_point<float> : public true_type{};\n   template<> struct is_floating_point<double> : public true_type{};\n   template<> struct is_floating_point<long double> : public true_type{};\n   \n#if defined(BOOST_HAS_FLOAT128)\n   template<> struct is_floating_point<__float128> : public true_type{};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_function.hpp",
    "content": "\n//  Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n//  Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_FUNCTION_HPP_INCLUDED\n#define BOOST_TT_IS_FUNCTION_HPP_INCLUDED\n\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/detail/config.hpp>\n\n#if !defined(BOOST_TT_TEST_MS_FUNC_SIGS)\n#   include <boost/type_traits/detail/is_function_ptr_helper.hpp>\n#else\n#   include <boost/type_traits/detail/is_function_ptr_tester.hpp>\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#endif\n\n// is a type a function?\n// Please note that this implementation is unnecessarily complex:\n// we could just use !is_convertible<T*, const volatile void*>::value,\n// except that some compilers erroneously allow conversions from\n// function pointers to void*.\n\nnamespace boost {\n\n#if !defined( __CODEGEARC__ )\n\nnamespace detail {\n\n#if !defined(BOOST_TT_TEST_MS_FUNC_SIGS)\ntemplate<bool is_ref = true>\nstruct is_function_chooser\n{\n   template< typename T > struct result_\n      : public false_type {};\n};\n\ntemplate <>\nstruct is_function_chooser<false>\n{\n    template< typename T > struct result_\n        : public ::boost::type_traits::is_function_ptr_helper<T*> {};\n};\n\ntemplate <typename T>\nstruct is_function_impl\n    : public is_function_chooser< ::boost::is_reference<T>::value >\n        ::BOOST_NESTED_TEMPLATE result_<T>\n{\n};\n\n#else\n\ntemplate <typename T>\nstruct is_function_impl\n{\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(push)\n#pragma warning(disable:6334)\n#endif\n    static T* t;\n    BOOST_STATIC_CONSTANT(\n        bool, value = sizeof(::boost::type_traits::is_function_ptr_tester(t))\n        == sizeof(::boost::type_traits::yes_type)\n        );\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(pop)\n#endif\n};\n\ntemplate <typename T>\nstruct is_function_impl<T&> : public false_type\n{};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <typename T>\nstruct is_function_impl<T&&> : public false_type\n{};\n#endif\n\n#endif\n\n} // namespace detail\n\n#endif // !defined( __CODEGEARC__ )\n\n#if defined( __CODEGEARC__ )\ntemplate <class T> struct is_function : integral_constant<bool, __is_function(T)> {};\n#else\ntemplate <class T> struct is_function : integral_constant<bool, ::boost::detail::is_function_impl<T>::value> {};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <class T> struct is_function<T&&> : public false_type {};\n#endif\n#endif\n} // namespace boost\n\n#endif // BOOST_TT_IS_FUNCTION_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_fundamental.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED\n#define BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED\n\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_void.hpp>\n\nnamespace boost {\n\n//* is a type T a fundamental type described in the standard (3.9.1)\n#if defined( __CODEGEARC__ )\ntemplate <class T> struct is_fundamental : public integral_constant<bool, __is_fundamental(T)> {};\n#else\ntemplate <class T> struct is_fundamental : public integral_constant<bool, ::boost::is_arithmetic<T>::value || ::boost::is_void<T>::value> {};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_integral.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_INTEGRAL_HPP_INCLUDED\n#define BOOST_TT_IS_INTEGRAL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\n   template <class T>\n   struct is_integral : public integral_constant<bool, __is_integral(T)> {};\n#else\n\ntemplate <class T> struct is_integral : public false_type {};\ntemplate <class T> struct is_integral<const T> : public is_integral<T> {};\ntemplate <class T> struct is_integral<volatile const T> : public is_integral<T>{};\ntemplate <class T> struct is_integral<volatile T> : public is_integral<T>{};\n\n//* is a type T an [cv-qualified-] integral type described in the standard (3.9.1p3)\n// as an extension we include long long, as this is likely to be added to the\n// standard at a later date\ntemplate<> struct is_integral<unsigned char> : public true_type {};\ntemplate<> struct is_integral<unsigned short> : public true_type{};\ntemplate<> struct is_integral<unsigned int> : public true_type{};\ntemplate<> struct is_integral<unsigned long> : public true_type{};\n\ntemplate<> struct is_integral<signed char> : public true_type{};\ntemplate<> struct is_integral<short> : public true_type{};\ntemplate<> struct is_integral<int> : public true_type{};\ntemplate<> struct is_integral<long> : public true_type{};\n\ntemplate<> struct is_integral<char> : public true_type{};\ntemplate<> struct is_integral<bool> : public true_type{};\n\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\n// If the following line fails to compile and you're using the Intel\n// compiler, see http://lists.boost.org/MailArchives/boost-users/msg06567.php,\n// and define BOOST_NO_INTRINSIC_WCHAR_T on the command line.\ntemplate<> struct is_integral<wchar_t> : public true_type{};\n#endif\n\n// Same set of integral types as in boost/type_traits/integral_promotion.hpp.\n// Please, keep in sync. -- Alexander Nasonov\n#if (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \\\n    || (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300))\ntemplate<> struct is_integral<unsigned __int8> : public true_type{};\ntemplate<> struct is_integral<unsigned __int16> : public true_type{};\ntemplate<> struct is_integral<unsigned __int32> : public true_type{};\ntemplate<> struct is_integral<__int8> : public true_type{};\ntemplate<> struct is_integral<__int16> : public true_type{};\ntemplate<> struct is_integral<__int32> : public true_type{};\n#ifdef __BORLANDC__\ntemplate<> struct is_integral<unsigned __int64> : public true_type{};\ntemplate<> struct is_integral<__int64> : public true_type{};\n#endif\n#endif\n\n# if defined(BOOST_HAS_LONG_LONG)\ntemplate<> struct is_integral< ::boost::ulong_long_type> : public true_type{};\ntemplate<> struct is_integral< ::boost::long_long_type> : public true_type{};\n#elif defined(BOOST_HAS_MS_INT64)\ntemplate<> struct is_integral<unsigned __int64> : public true_type{};\ntemplate<> struct is_integral<__int64> : public true_type{};\n#endif\n        \n#ifdef BOOST_HAS_INT128\ntemplate<> struct is_integral<boost::int128_type> : public true_type{};\ntemplate<> struct is_integral<boost::uint128_type> : public true_type{};\n#endif\n#ifndef BOOST_NO_CXX11_CHAR16_T\ntemplate<> struct is_integral<char16_t> : public true_type{};\n#endif\n#ifndef BOOST_NO_CXX11_CHAR32_T\ntemplate<> struct is_integral<char32_t> : public true_type{};\n#endif\n\n#endif  // non-CodeGear implementation\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_INTEGRAL_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_lvalue_reference.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_lvalue_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\n   template <class T> struct is_lvalue_reference : public integral_constant<bool, __is_reference(T)>{};\n#else\n\n   template <class T> struct is_lvalue_reference : public false_type{};\n   template <class T> struct is_lvalue_reference<T&> : public true_type{};\n\n#if  defined(BOOST_ILLEGAL_CV_REFERENCES)\n// these are illegal specialisations; cv-qualifies applied to\n// references have no effect according to [8.3.2p1],\n// C++ Builder requires them though as it treats cv-qualified\n// references as distinct types...\n   template <class T> struct is_lvalue_reference<T&const> : public true_type{};\n   template <class T> struct is_lvalue_reference<T&volatile> : public true_type{};\n   template <class T> struct is_lvalue_reference<T&const volatile> : public true_type{};\n#endif\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_member_function_pointer.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n#define BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n\n#include <boost/type_traits/detail/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)\n   //\n   // Note: we use the \"workaround\" version for MSVC because it works for \n   // __stdcall etc function types, where as the partial specialisation\n   // version does not do so.\n   //\n#   include <boost/type_traits/detail/is_mem_fun_pointer_impl.hpp>\n#   include <boost/type_traits/remove_cv.hpp>\n#   include <boost/type_traits/integral_constant.hpp>\n#else\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_array.hpp>\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#   include <boost/type_traits/detail/is_mem_fun_pointer_tester.hpp>\n#endif\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\ntemplate <class T> struct is_member_function_pointer : public integral_constant<bool, __is_member_function_pointer( T )> {};\n#elif !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)\n\ntemplate <class T> struct is_member_function_pointer \n   : public ::boost::integral_constant<bool, ::boost::type_traits::is_mem_fun_pointer_impl<typename remove_cv<T>::type>::value>{};\n\n#else\n\nnamespace detail {\n\n#ifndef __BORLANDC__\n\ntemplate <bool>\nstruct is_mem_fun_pointer_select\n{\n   template <class T> struct result_ : public false_type{};\n};\n\ntemplate <>\nstruct is_mem_fun_pointer_select<false>\n{\n    template <typename T> struct result_\n    {\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(push)\n#pragma warning(disable:6334)\n#endif\n        static T* make_t;\n        typedef result_<T> self_type;\n\n        BOOST_STATIC_CONSTANT(\n            bool, value = (\n                1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(self_type::make_t))\n            ));\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(pop)\n#endif\n    };\n};\n\ntemplate <typename T>\nstruct is_member_function_pointer_impl\n    : public is_mem_fun_pointer_select< \n      ::boost::is_reference<T>::value || ::boost::is_array<T>::value>::template result_<T>{};\n\ntemplate <typename T>\nstruct is_member_function_pointer_impl<T&> : public false_type{};\n\n#else // Borland C++\n\ntemplate <typename T>\nstruct is_member_function_pointer_impl\n{\n   static T* m_t;\n   BOOST_STATIC_CONSTANT(\n              bool, value =\n               (1 == sizeof(type_traits::is_mem_fun_pointer_tester(m_t))) );\n};\n\ntemplate <typename T>\nstruct is_member_function_pointer_impl<T&>\n{\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n#endif\n\ntemplate<> struct is_member_function_pointer_impl<void> : public false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate<> struct is_member_function_pointer_impl<void const> : public false_type{};\ntemplate<> struct is_member_function_pointer_impl<void const volatile> : public false_type{};\ntemplate<> struct is_member_function_pointer_impl<void volatile> : public false_type{};\n#endif\n\n} // namespace detail\n\ntemplate <class T>\nstruct is_member_function_pointer\n   : public integral_constant<bool, ::boost::detail::is_member_function_pointer_impl<T>::value>{};\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_member_object_pointer.hpp",
    "content": "\n//  (C) Copyright John Maddock 2005.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_MEMBER_OBJECT_POINTER_HPP_INCLUDED\n#define BOOST_TT_IS_MEMBER_OBJECT_POINTER_HPP_INCLUDED\n\n#include <boost/type_traits/is_member_pointer.hpp>\n#include <boost/type_traits/is_member_function_pointer.hpp>\n\nnamespace boost {\n\ntemplate <class T> struct is_member_object_pointer \n   : public integral_constant<bool, \n   ::boost::is_member_pointer<T>::value && !::boost::is_member_function_pointer<T>::value>{};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_member_pointer.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED\n#define BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED\n\n#include <boost/detail/workaround.hpp>\n#include <boost/type_traits/is_member_function_pointer.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\ntemplate <class T> struct is_member_pointer : public integral_constant<bool, __is_member_pointer(T)>{};\n#else\ntemplate <class T> struct is_member_pointer : public integral_constant<bool, ::boost::is_member_function_pointer<T>::value>{};\ntemplate <class T, class U> struct is_member_pointer<U T::* > : public true_type{};\n\n#if !BOOST_WORKAROUND(__MWERKS__,<=0x3003) && !BOOST_WORKAROUND(__IBMCPP__, <=600)\ntemplate <class T, class U> struct is_member_pointer<U T::*const> : public true_type{};\ntemplate <class T, class U> struct is_member_pointer<U T::*const volatile> : public true_type{};\ntemplate <class T, class U> struct is_member_pointer<U T::*volatile> : public true_type{};\n#endif\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_assignable.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  (C) Copyright Eric Friedman 2002-2003.\n//  (C) Copyright Antony Polukhin 2013.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_NOTHROW_MOVE_ASSIGNABLE_HPP_INCLUDED\n#define BOOST_TT_IS_NOTHROW_MOVE_ASSIGNABLE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/has_trivial_move_assign.hpp>\n#include <boost/type_traits/has_nothrow_assign.hpp>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/declval.hpp>\n\nnamespace boost {\n\n#ifdef BOOST_IS_NOTHROW_MOVE_ASSIGN\n\ntemplate <class T>\nstruct is_nothrow_move_assignable : public integral_constant<bool, BOOST_IS_NOTHROW_MOVE_ASSIGN(T)>{};\ntemplate <class T> struct is_nothrow_move_assignable<T const> : public false_type{};\ntemplate <class T> struct is_nothrow_move_assignable<T volatile> : public false_type{};\ntemplate <class T> struct is_nothrow_move_assignable<T const volatile> : public false_type{};\ntemplate <class T> struct is_nothrow_move_assignable<T&> : public false_type{};\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) \ntemplate <class T> struct is_nothrow_move_assignable<T&&> : public false_type{};\n#endif\n\n#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR)\n\nnamespace detail{\n\ntemplate <class T, class Enable = void>\nstruct false_or_cpp11_noexcept_move_assignable: public ::boost::false_type {};\n\ntemplate <class T>\nstruct false_or_cpp11_noexcept_move_assignable <\n        T,\n        typename ::boost::enable_if_c<sizeof(T) && BOOST_NOEXCEPT_EXPR(::boost::declval<T&>() = ::boost::declval<T>())>::type\n    > : public ::boost::integral_constant<bool, BOOST_NOEXCEPT_EXPR(::boost::declval<T&>() = ::boost::declval<T>())>\n{};\n\n}\n\ntemplate <class T>\nstruct is_nothrow_move_assignable : public integral_constant<bool, ::boost::detail::false_or_cpp11_noexcept_move_assignable<T>::value>{};\n\ntemplate <class T> struct is_nothrow_move_assignable<T const> : public ::boost::false_type {};\ntemplate <class T> struct is_nothrow_move_assignable<T const volatile> : public ::boost::false_type{};\ntemplate <class T> struct is_nothrow_move_assignable<T volatile> : public ::boost::false_type{};\ntemplate <class T> struct is_nothrow_move_assignable<T&> : public ::boost::false_type{};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <class T> struct is_nothrow_move_assignable<T&&> : public ::boost::false_type{};\n#endif\n\n#else\n\ntemplate <class T>\nstruct is_nothrow_move_assignable : public integral_constant<bool,\n   (::boost::has_trivial_move_assign<T>::value || ::boost::has_nothrow_assign<T>::value) &&  ! ::boost::is_array<T>::value>{};\n\n#endif\n\n\ntemplate <> struct is_nothrow_move_assignable<void> : public false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct is_nothrow_move_assignable<void const> : public false_type{};\ntemplate <> struct is_nothrow_move_assignable<void const volatile> : public false_type{};\ntemplate <> struct is_nothrow_move_assignable<void volatile> : public false_type{};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_NOTHROW_MOVE_ASSIGNABLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_constructible.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  (C) Copyright Eric Friedman 2002-2003.\n//  (C) Copyright Antony Polukhin 2013.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_NOTHROW_MOVE_CONSTRUCTIBLE_HPP_INCLUDED\n#define BOOST_TT_IS_NOTHROW_MOVE_CONSTRUCTIBLE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifdef BOOST_IS_NOTHROW_MOVE_CONSTRUCT\n\nnamespace boost {\n\ntemplate <class T>\nstruct is_nothrow_move_constructible : public integral_constant<bool, BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T)>{};\n\ntemplate <class T> struct is_nothrow_move_constructible<volatile T> : public ::boost::false_type {};\ntemplate <class T> struct is_nothrow_move_constructible<const volatile T> : public ::boost::false_type{};\n\n#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40700)\n\n#include <boost/type_traits/declval.hpp>\n#include <boost/utility/enable_if.hpp>\n\nnamespace boost{ namespace detail{\n\ntemplate <class T, class Enable = void>\nstruct false_or_cpp11_noexcept_move_constructible: public ::boost::false_type {};\n\ntemplate <class T>\nstruct false_or_cpp11_noexcept_move_constructible <\n        T,\n        typename ::boost::enable_if_c<sizeof(T) && BOOST_NOEXCEPT_EXPR(T(::boost::declval<T>()))>::type\n    > : public ::boost::integral_constant<bool, BOOST_NOEXCEPT_EXPR(T(::boost::declval<T>()))>\n{};\n\n}\n\ntemplate <class T> struct is_nothrow_move_constructible\n   : public integral_constant<bool, ::boost::detail::false_or_cpp11_noexcept_move_constructible<T>::value>{};\n\ntemplate <class T> struct is_nothrow_move_constructible<volatile T> : public ::boost::false_type {};\ntemplate <class T> struct is_nothrow_move_constructible<const volatile T> : public ::boost::false_type{};\ntemplate <class T, std::size_t N> struct is_nothrow_move_constructible<T[N]> : public ::boost::false_type{};\ntemplate <class T> struct is_nothrow_move_constructible<T[]> : public ::boost::false_type{};\n\n#else\n\n#include <boost/type_traits/has_trivial_move_constructor.hpp>\n#include <boost/type_traits/has_nothrow_copy.hpp>\n#include <boost/type_traits/is_array.hpp>\n\nnamespace boost{\n\ntemplate <class T>\nstruct is_nothrow_move_constructible\n   : public integral_constant<bool,\n   (::boost::has_trivial_move_constructor<T>::value || ::boost::has_nothrow_copy<T>::value) && !::boost::is_array<T>::value>\n{};\n\n#endif\n\ntemplate <> struct is_nothrow_move_constructible<void> : false_type{};\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct is_nothrow_move_constructible<void const> : false_type{};\ntemplate <> struct is_nothrow_move_constructible<void volatile> : false_type{};\ntemplate <> struct is_nothrow_move_constructible<void const volatile> : false_type{};\n#endif\n// References are always trivially constructible, even if the thing they reference is not:\ntemplate <class T> struct is_nothrow_move_constructible<T&> : public ::boost::true_type{};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <class T> struct is_nothrow_move_constructible<T&&> : public ::boost::true_type{};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_NOTHROW_MOVE_CONSTRUCTIBLE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_object.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_OBJECT_HPP_INCLUDED\n#define BOOST_TT_IS_OBJECT_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/is_function.hpp>\n\nnamespace boost {\n\ntemplate <class T> struct is_object\n   : public \n      integral_constant<\n         bool, \n         ! ::boost::is_reference<T>::value && ! ::boost::is_void<T>::value && ! ::boost::is_function<T>::value > \n{};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_OBJECT_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_pod.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_POD_HPP_INCLUDED\n#define BOOST_TT_IS_POD_HPP_INCLUDED\n\n#include <boost/type_traits/detail/config.hpp>\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/is_scalar.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n\n#ifdef __SUNPRO_CC\n#include <boost/type_traits/is_function.hpp>\n#endif\n\n#include <cstddef>\n\n#ifndef BOOST_IS_POD\n#define BOOST_INTERNAL_IS_POD(T) false\n#else\n#define BOOST_INTERNAL_IS_POD(T) BOOST_IS_POD(T)\n#endif\n\nnamespace boost {\n\n// forward declaration, needed by 'is_pod_array_helper' template below\ntemplate< typename T > struct is_POD;\n\ntemplate <typename T> struct is_pod\n: public integral_constant<bool, ::boost::is_scalar<T>::value || ::boost::is_void<T>::value || BOOST_INTERNAL_IS_POD(T)>\n{};\n\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\ntemplate <typename T, std::size_t sz> struct is_pod<T[sz]> : public is_pod<T>{};\n#endif\n\n\n// the following help compilers without partial specialization support:\ntemplate<> struct is_pod<void> : public true_type{};\n\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate<> struct is_pod<void const> : public true_type{};\ntemplate<> struct is_pod<void const volatile> : public true_type{};\ntemplate<> struct is_pod<void volatile> : public true_type{};\n#endif\n\ntemplate<class T> struct is_POD : public is_pod<T>{};\n\n} // namespace boost\n\n#undef BOOST_INTERNAL_IS_POD\n\n#endif // BOOST_TT_IS_POD_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_pointer.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_POINTER_HPP_INCLUDED\n#define BOOST_TT_IS_POINTER_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\ntemplate <class T> struct is_pointer : public integral_constant<bool, __is_pointer(T)>{};\n#else\ntemplate <class T> struct is_pointer : public false_type{};\ntemplate <class T> struct is_pointer<T*> : public true_type{};\ntemplate <class T> struct is_pointer<T*const> : public true_type{};\ntemplate <class T> struct is_pointer<T*const volatile> : public true_type{};\ntemplate <class T> struct is_pointer<T*volatile> : public true_type{};\n\n#ifdef BOOST_MSVC\ntemplate <class T> struct is_pointer<T const> : public is_pointer<T>{};\ntemplate <class T> struct is_pointer<T const volatile> : public is_pointer<T>{};\ntemplate <class T> struct is_pointer<T volatile> : public is_pointer<T>{};\n#endif\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_polymorphic.hpp",
    "content": "//  (C) Copyright John Maddock 2000. \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_POLYMORPHIC_HPP\n#define BOOST_TT_IS_POLYMORPHIC_HPP\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#ifndef BOOST_IS_POLYMORPHIC\n#include <boost/type_traits/is_class.hpp>\n#endif\n#include <boost/detail/workaround.hpp>\n\n#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700)\n#pragma warning(push)\n#pragma warning(disable:4250)\n#endif\n\nnamespace boost{\n\n#ifndef BOOST_IS_POLYMORPHIC\n\nnamespace detail{\n\ntemplate <class T>\nstruct is_polymorphic_imp1\n{\n# if BOOST_WORKAROUND(__MWERKS__, <= 0x2407) // CWPro7 should return false always.\n    typedef char d1, (&d2)[2];\n# else \n   struct d1 : public T\n   {\n      d1();\n#  if !defined(__GNUC__) // this raises warnings with some classes, and buys nothing with GCC\n      ~d1()throw();\n#  endif \n      char padding[256];\n   private:\n      // keep some picky compilers happy:\n      d1(const d1&);\n      d1& operator=(const d1&);\n   };\n   struct d2 : public T\n   {\n      d2();\n      virtual ~d2()throw();\n#  if !defined(BOOST_MSVC) && !defined(__ICL)\n      // for some reason this messes up VC++ when T has virtual bases,\n      // probably likewise for compilers that use the same ABI:\n      struct unique{};\n      virtual void unique_name_to_boost5487629(unique*);\n#  endif\n      char padding[256];\n   private:\n      // keep some picky compilers happy:\n      d2(const d2&);\n      d2& operator=(const d2&);\n   };\n# endif \n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(d2) == sizeof(d1)));\n};\n\ntemplate <class T> struct is_polymorphic_imp1<T const> : public is_polymorphic_imp1<T>{};\ntemplate <class T> struct is_polymorphic_imp1<T const volatile> : public is_polymorphic_imp1<T>{};\ntemplate <class T> struct is_polymorphic_imp1<T volatile> : public is_polymorphic_imp1<T>{};\n\ntemplate <class T>\nstruct is_polymorphic_imp2\n{\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate <bool is_class>\nstruct is_polymorphic_selector\n{\n   template <class T>\n   struct rebind\n   {\n      typedef is_polymorphic_imp2<T> type;\n   };\n};\n\ntemplate <>\nstruct is_polymorphic_selector<true>\n{\n   template <class T>\n   struct rebind\n   {\n      typedef is_polymorphic_imp1<T> type;\n   };\n};\n\ntemplate <class T>\nstruct is_polymorphic_imp\n{\n   typedef is_polymorphic_selector< ::boost::is_class<T>::value> selector;\n   typedef typename selector::template rebind<T> binder;\n   typedef typename binder::type imp_type;\n   BOOST_STATIC_CONSTANT(bool, value = imp_type::value);\n};\n\n} // namespace detail\n\ntemplate <class T> struct is_polymorphic : public integral_constant<bool, ::boost::detail::is_polymorphic_imp<T>::value> {};\n\n#else // BOOST_IS_POLYMORPHIC\n\ntemplate <class T> struct is_polymorphic : public integral_constant<bool, BOOST_IS_POLYMORPHIC(T)> {};\n\n#endif\n\n} // namespace boost\n\n#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700)\n#pragma warning(pop)\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_reference.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000, 2010. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n\n#include <boost/type_traits/is_lvalue_reference.hpp>\n#include <boost/type_traits/is_rvalue_reference.hpp>\n\nnamespace boost {\n\ntemplate <class T> struct is_reference \n   : public \n   integral_constant<\n      bool, \n      ::boost::is_lvalue_reference<T>::value || ::boost::is_rvalue_reference<T>::value>\n{};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_rvalue_reference.hpp",
    "content": "\n//  (C) John Maddock 2010. \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_RVALUE_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_IS_RVALUE_REFERENCE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\ntemplate <class T> struct is_rvalue_reference : public false_type {};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <class T> struct is_rvalue_reference<T&&> : public true_type {};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_same.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_SAME_HPP_INCLUDED\n#define BOOST_TT_IS_SAME_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n\n   template <class T, class U> struct is_same : public false_type {};\n   template <class T> struct is_same<T,T> : public true_type {};\n#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)\n// without this, Borland's compiler gives the wrong answer for\n// references to arrays:\n   template <class T> struct is_same<T&, T&> : public true_type{};\n#endif\n\n\n} // namespace boost\n\n#endif  // BOOST_TT_IS_SAME_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_scalar.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_SCALAR_HPP_INCLUDED\n#define BOOST_TT_IS_SCALAR_HPP_INCLUDED\n\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_member_pointer.hpp>\n#include <boost/config.hpp>\n\nnamespace boost {\n\ntemplate <typename T>\nstruct is_scalar\n   : public integral_constant<bool, ::boost::is_arithmetic<T>::value || ::boost::is_enum<T>::value || ::boost::is_pointer<T>::value || ::boost::is_member_pointer<T>::value>\n{};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_SCALAR_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_signed.hpp",
    "content": "\n//  (C) Copyright John Maddock 2005.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_SIGNED_HPP_INCLUDED\n#define BOOST_TT_IS_SIGNED_HPP_INCLUDED\n\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <climits>\n\nnamespace boost {\n\n#if !defined( __CODEGEARC__ )\n\n#if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1310) && \\\n    !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) &&\\\n    !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\n\nnamespace detail{\n\ntemplate <class T>\nstruct is_signed_values\n{\n   //\n   // Note that we cannot use BOOST_STATIC_CONSTANT here, using enum's\n   // rather than \"real\" static constants simply doesn't work or give\n   // the correct answer.\n   //\n   typedef typename remove_cv<T>::type no_cv_t;\n   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));\n   static const no_cv_t zero = (static_cast<no_cv_t>(0));\n};\n\ntemplate <class T>\nstruct is_signed_helper\n{\n   typedef typename remove_cv<T>::type no_cv_t;\n   BOOST_STATIC_CONSTANT(bool, value = (!(::boost::detail::is_signed_values<T>::minus_one  > boost::detail::is_signed_values<T>::zero)));\n};\n\ntemplate <bool integral_type>\nstruct is_signed_select_helper\n{\n   template <class T>\n   struct rebind\n   {\n      typedef is_signed_helper<T> type;\n   };\n};\n\ntemplate <>\nstruct is_signed_select_helper<false>\n{\n   template <class T>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <class T>\nstruct is_signed_impl\n{\n   typedef ::boost::detail::is_signed_select_helper< ::boost::is_integral<T>::value || ::boost::is_enum<T>::value> selector;\n   typedef typename selector::template rebind<T> binder;\n   typedef typename binder::type type;\n   BOOST_STATIC_CONSTANT(bool, value = type::value);\n};\n\n}\n\ntemplate <class T> struct is_signed : public integral_constant<bool, boost::detail::is_signed_impl<T>::value> {};\n\n#else\n\ntemplate <class T> struct is_signed : public false_type{};\n\n#endif\n\n#else //defined( __CODEGEARC__ )\n   template <class T> struct is_signed : public integral_constant<bool, __is_signed(T)>{};\n#endif\n\ntemplate <> struct is_signed<signed char> : public true_type{};\ntemplate <> struct is_signed<const signed char> : public true_type{};\ntemplate <> struct is_signed<volatile signed char> : public true_type{};\ntemplate <> struct is_signed<const volatile signed char> : public true_type{};\ntemplate <> struct is_signed<short> : public true_type{};\ntemplate <> struct is_signed<const short> : public true_type{};\ntemplate <> struct is_signed<volatile short> : public true_type{};\ntemplate <> struct is_signed<const volatile short> : public true_type{};\ntemplate <> struct is_signed<int> : public true_type{};\ntemplate <> struct is_signed<const int> : public true_type{};\ntemplate <> struct is_signed<volatile int> : public true_type{};\ntemplate <> struct is_signed<const volatile int> : public true_type{};\ntemplate <> struct is_signed<long> : public true_type{};\ntemplate <> struct is_signed<const long> : public true_type{};\ntemplate <> struct is_signed<volatile long> : public true_type{};\ntemplate <> struct is_signed<const volatile long> : public true_type{};\n\ntemplate <> struct is_signed<unsigned char> : public false_type{};\ntemplate <> struct is_signed<const unsigned char> : public false_type{};\ntemplate <> struct is_signed<volatile unsigned char> : public false_type{};\ntemplate <> struct is_signed<const volatile unsigned char> : public false_type{};\ntemplate <> struct is_signed<unsigned short> : public false_type{};\ntemplate <> struct is_signed<const unsigned short> : public false_type{};\ntemplate <> struct is_signed<volatile unsigned short> : public false_type{};\ntemplate <> struct is_signed<const volatile unsigned short> : public false_type{};\ntemplate <> struct is_signed<unsigned int> : public false_type{};\ntemplate <> struct is_signed<const unsigned int> : public false_type{};\ntemplate <> struct is_signed<volatile unsigned int> : public false_type{};\ntemplate <> struct is_signed<const volatile unsigned int> : public false_type{};\ntemplate <> struct is_signed<unsigned long> : public false_type{};\ntemplate <> struct is_signed<const unsigned long> : public false_type{};\ntemplate <> struct is_signed<volatile unsigned long> : public false_type{};\ntemplate <> struct is_signed<const volatile unsigned long> : public false_type{};\n#ifdef BOOST_HAS_LONG_LONG\ntemplate <> struct is_signed< ::boost::long_long_type> : public true_type{};\ntemplate <> struct is_signed<const ::boost::long_long_type> : public true_type{};\ntemplate <> struct is_signed<volatile ::boost::long_long_type> : public true_type{};\ntemplate <> struct is_signed<const volatile ::boost::long_long_type> : public true_type{};\n\ntemplate <> struct is_signed< ::boost::ulong_long_type> : public false_type{};\ntemplate <> struct is_signed<const ::boost::ulong_long_type> : public false_type{};\ntemplate <> struct is_signed<volatile ::boost::ulong_long_type> : public false_type{};\ntemplate <> struct is_signed<const volatile ::boost::ulong_long_type> : public false_type{};\n#endif\n#if defined(CHAR_MIN) \n#if CHAR_MIN != 0\ntemplate <> struct is_signed<char> : public true_type{};\ntemplate <> struct is_signed<const char> : public true_type{};\ntemplate <> struct is_signed<volatile char> : public true_type{};\ntemplate <> struct is_signed<const volatile char> : public true_type{};\n#else\ntemplate <> struct is_signed<char> : public false_type{};\ntemplate <> struct is_signed<const char> : public false_type{};\ntemplate <> struct is_signed<volatile char> : public false_type{};\ntemplate <> struct is_signed<const volatile char> : public false_type{};\n#endif\n#endif\n#if defined(WCHAR_MIN) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)\n#if WCHAR_MIN != 0\ntemplate <> struct is_signed<wchar_t> : public true_type{};\ntemplate <> struct is_signed<const wchar_t> : public true_type{};\ntemplate <> struct is_signed<volatile wchar_t> : public true_type{};\ntemplate <> struct is_signed<const volatile wchar_t> : public true_type{};\n#else\ntemplate <> struct is_signed<wchar_t> : public false_type{};\ntemplate <> struct is_signed<const wchar_t> : public false_type{};\ntemplate <> struct is_signed<volatile wchar_t> : public false_type{};\ntemplate <> struct is_signed<const volatile wchar_t> : public false_type{};\n#endif\n#endif\n} // namespace boost\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_stateless.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_STATELESS_HPP_INCLUDED\n#define BOOST_TT_IS_STATELESS_HPP_INCLUDED\n\n#include <boost/type_traits/has_trivial_constructor.hpp>\n#include <boost/type_traits/has_trivial_copy.hpp>\n#include <boost/type_traits/has_trivial_destructor.hpp>\n#include <boost/type_traits/is_class.hpp>\n#include <boost/type_traits/is_empty.hpp>\n#include <boost/config.hpp>\n\nnamespace boost {\n\ntemplate <typename T>\nstruct is_stateless\n : public integral_constant<bool,  \n      (::boost::has_trivial_constructor<T>::value\n      && ::boost::has_trivial_copy<T>::value\n      && ::boost::has_trivial_destructor<T>::value\n      && ::boost::is_class<T>::value\n      && ::boost::is_empty<T>::value)>\n{};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_STATELESS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_union.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_UNION_HPP_INCLUDED\n#define BOOST_TT_IS_UNION_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n#ifdef BOOST_IS_UNION\ntemplate <class T> struct is_union : public integral_constant<bool, BOOST_IS_UNION(T)> {};\n#else\ntemplate <class T> struct is_union : public integral_constant<bool, false> {};\n#endif\n\ntemplate <class T> struct is_union<T const> : public is_union<T>{};\ntemplate <class T> struct is_union<T volatile const> : public is_union<T>{};\ntemplate <class T> struct is_union<T volatile> : public is_union<T>{};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_UNION_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_unsigned.hpp",
    "content": "\n//  (C) Copyright John Maddock 2005.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_UNSIGNED_HPP_INCLUDED\n#define BOOST_TT_IS_UNSIGNED_HPP_INCLUDED\n\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n\n#include <climits>\n\nnamespace boost {\n\n#if !defined( __CODEGEARC__ )\n\n#if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1310) &&\\\n    !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) &&\\\n    !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\n\nnamespace detail{\n\ntemplate <class T>\nstruct is_unsigned_values\n{\n   //\n   // Note that we cannot use BOOST_STATIC_CONSTANT here, using enum's\n   // rather than \"real\" static constants simply doesn't work or give\n   // the correct answer.\n   //\n   typedef typename remove_cv<T>::type no_cv_t;\n   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));\n   static const no_cv_t zero = (static_cast<no_cv_t>(0));\n};\n\ntemplate <class T>\nstruct is_ununsigned_helper\n{\n   BOOST_STATIC_CONSTANT(bool, value = (::boost::detail::is_unsigned_values<T>::minus_one > ::boost::detail::is_unsigned_values<T>::zero));\n};\n\ntemplate <bool integral_type>\nstruct is_unsigned_select_helper\n{\n   template <class T>\n   struct rebind\n   {\n      typedef is_ununsigned_helper<T> type;\n   };\n};\n\ntemplate <>\nstruct is_unsigned_select_helper<false>\n{\n   template <class T>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <class T>\nstruct is_unsigned\n{\n   typedef ::boost::detail::is_unsigned_select_helper< ::boost::is_integral<T>::value || ::boost::is_enum<T>::value > selector;\n   typedef typename selector::template rebind<T> binder;\n   typedef typename binder::type type;\n   BOOST_STATIC_CONSTANT(bool, value = type::value);\n};\n\n} // namespace detail\n\ntemplate <class T> struct is_unsigned : public integral_constant<bool, boost::detail::is_unsigned<T>::value> {};\n\n#else\n\ntemplate <class T> struct is_unsigned : public false_type{};\n\n#endif\n\n#else // defined( __CODEGEARC__ )\ntemplate <class T> struct is_unsigned : public integral_constant<bool, __is_unsigned(T)> {};\n#endif\n\ntemplate <> struct is_unsigned<unsigned char> : public true_type{};\ntemplate <> struct is_unsigned<const unsigned char> : public true_type{};\ntemplate <> struct is_unsigned<volatile unsigned char> : public true_type{};\ntemplate <> struct is_unsigned<const volatile unsigned char> : public true_type{};\ntemplate <> struct is_unsigned<unsigned short> : public true_type{};\ntemplate <> struct is_unsigned<const unsigned short> : public true_type{};\ntemplate <> struct is_unsigned<volatile unsigned short> : public true_type{};\ntemplate <> struct is_unsigned<const volatile unsigned short> : public true_type{};\ntemplate <> struct is_unsigned<unsigned int> : public true_type{};\ntemplate <> struct is_unsigned<const unsigned int> : public true_type{};\ntemplate <> struct is_unsigned<volatile unsigned int> : public true_type{};\ntemplate <> struct is_unsigned<const volatile unsigned int> : public true_type{};\ntemplate <> struct is_unsigned<unsigned long> : public true_type{};\ntemplate <> struct is_unsigned<const unsigned long> : public true_type{};\ntemplate <> struct is_unsigned<volatile unsigned long> : public true_type{};\ntemplate <> struct is_unsigned<const volatile unsigned long> : public true_type{};\n\ntemplate <> struct is_unsigned<signed char> : public false_type{};\ntemplate <> struct is_unsigned<const signed char> : public false_type{};\ntemplate <> struct is_unsigned<volatile signed char> : public false_type{};\ntemplate <> struct is_unsigned<const volatile signed char> : public false_type{};\ntemplate <> struct is_unsigned< short> : public false_type{};\ntemplate <> struct is_unsigned<const  short> : public false_type{};\ntemplate <> struct is_unsigned<volatile  short> : public false_type{};\ntemplate <> struct is_unsigned<const volatile  short> : public false_type{};\ntemplate <> struct is_unsigned< int> : public false_type{};\ntemplate <> struct is_unsigned<const  int> : public false_type{};\ntemplate <> struct is_unsigned<volatile  int> : public false_type{};\ntemplate <> struct is_unsigned<const volatile  int> : public false_type{};\ntemplate <> struct is_unsigned< long> : public false_type{};\ntemplate <> struct is_unsigned<const  long> : public false_type{};\ntemplate <> struct is_unsigned<volatile  long> : public false_type{};\ntemplate <> struct is_unsigned<const volatile  long> : public false_type{};\n#ifdef BOOST_HAS_LONG_LONG\ntemplate <> struct is_unsigned< ::boost::ulong_long_type> : public true_type{};\ntemplate <> struct is_unsigned<const ::boost::ulong_long_type> : public true_type{};\ntemplate <> struct is_unsigned<volatile ::boost::ulong_long_type> : public true_type{};\ntemplate <> struct is_unsigned<const volatile ::boost::ulong_long_type> : public true_type{};\n\ntemplate <> struct is_unsigned< ::boost::long_long_type> : public false_type{};\ntemplate <> struct is_unsigned<const ::boost::long_long_type> : public false_type{};\ntemplate <> struct is_unsigned<volatile ::boost::long_long_type> : public false_type{};\ntemplate <> struct is_unsigned<const volatile ::boost::long_long_type> : public false_type{};\n#endif\n#if defined(CHAR_MIN) \n#if CHAR_MIN == 0\ntemplate <> struct is_unsigned<char> : public true_type{};\ntemplate <> struct is_unsigned<const char> : public true_type{};\ntemplate <> struct is_unsigned<volatile char> : public true_type{};\ntemplate <> struct is_unsigned<const volatile char> : public true_type{};\n#else\ntemplate <> struct is_unsigned<char> : public false_type{};\ntemplate <> struct is_unsigned<const char> : public false_type{};\ntemplate <> struct is_unsigned<volatile char> : public false_type{};\ntemplate <> struct is_unsigned<const volatile char> : public false_type{};\n#endif\n#endif\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && defined(WCHAR_MIN)\n#if WCHAR_MIN == 0\ntemplate <> struct is_unsigned<wchar_t> : public true_type{};\ntemplate <> struct is_unsigned<const wchar_t> : public true_type{};\ntemplate <> struct is_unsigned<volatile wchar_t> : public true_type{};\ntemplate <> struct is_unsigned<const volatile wchar_t> : public true_type{};\n#else\ntemplate <> struct is_unsigned<wchar_t> : public false_type{};\ntemplate <> struct is_unsigned<const wchar_t> : public false_type{};\ntemplate <> struct is_unsigned<volatile wchar_t> : public false_type{};\ntemplate <> struct is_unsigned<const volatile wchar_t> : public false_type{};\n#endif\n#endif\n} // namespace boost\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_virtual_base_of.hpp",
    "content": "//  (C) Copyright Daniel Frey and Robert Ramey 2009.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n \n#ifndef BOOST_TT_IS_VIRTUAL_BASE_OF_HPP_INCLUDED\n#define BOOST_TT_IS_VIRTUAL_BASE_OF_HPP_INCLUDED\n\n#include <boost/type_traits/is_base_of.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost {\nnamespace detail {\n\n\n#ifdef BOOST_MSVC\n#pragma warning( push )\n#pragma warning( disable : 4584 4250)\n#elif defined(__GNUC__) && (__GNUC__ >= 4)\n#pragma GCC system_header\n#endif\n\ntemplate<typename Base, typename Derived, typename tag>\nstruct is_virtual_base_of_impl\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate<typename Base, typename Derived>\nstruct is_virtual_base_of_impl<Base, Derived, true_type>\n{\n   union max_align\n   {\n      unsigned u;\n      unsigned long ul;\n      void* v;\n      double d;\n      long double ld;\n#ifndef BOOST_NO_LONG_LONG\n      long long ll;\n#endif\n   };\n#ifdef __BORLANDC__\n    struct boost_type_traits_internal_struct_X : public virtual Derived, public virtual Base \n    {\n       boost_type_traits_internal_struct_X();\n       boost_type_traits_internal_struct_X(const boost_type_traits_internal_struct_X&);\n       boost_type_traits_internal_struct_X& operator=(const boost_type_traits_internal_struct_X&);\n       ~boost_type_traits_internal_struct_X()throw();\n       max_align data[4];\n    };\n    struct boost_type_traits_internal_struct_Y : public virtual Derived \n    {\n       boost_type_traits_internal_struct_Y();\n       boost_type_traits_internal_struct_Y(const boost_type_traits_internal_struct_Y&);\n       boost_type_traits_internal_struct_Y& operator=(const boost_type_traits_internal_struct_Y&);\n       ~boost_type_traits_internal_struct_Y()throw();\n       max_align data[4];\n    };\n#else\n    struct boost_type_traits_internal_struct_X : public Derived, virtual Base \n    {\n       boost_type_traits_internal_struct_X();\n       boost_type_traits_internal_struct_X(const boost_type_traits_internal_struct_X&);\n       boost_type_traits_internal_struct_X& operator=(const boost_type_traits_internal_struct_X&);\n       ~boost_type_traits_internal_struct_X()throw();\n       max_align data[16];\n    };\n    struct boost_type_traits_internal_struct_Y : public Derived \n    {\n       boost_type_traits_internal_struct_Y();\n       boost_type_traits_internal_struct_Y(const boost_type_traits_internal_struct_Y&);\n       boost_type_traits_internal_struct_Y& operator=(const boost_type_traits_internal_struct_Y&);\n       ~boost_type_traits_internal_struct_Y()throw();\n       max_align data[16];\n    };\n#endif\n    BOOST_STATIC_CONSTANT(bool, value = (sizeof(boost_type_traits_internal_struct_X)==sizeof(boost_type_traits_internal_struct_Y)));\n};\n\ntemplate<typename Base, typename Derived>\nstruct is_virtual_base_of_impl2\n{\n   typedef boost::integral_constant<bool, (boost::is_base_of<Base, Derived>::value && ! boost::is_same<Base, Derived>::value)> tag_type;\n   typedef is_virtual_base_of_impl<Base, Derived, tag_type> imp;\n   BOOST_STATIC_CONSTANT(bool, value = imp::value);\n};\n\n#ifdef BOOST_MSVC\n#pragma warning( pop )\n#endif\n\n} // namespace detail\n\ntemplate <class Base, class Derived> struct is_virtual_base_of : public integral_constant<bool, (::boost::detail::is_virtual_base_of_impl2<Base, Derived>::value)>{};\n\ntemplate <class Base, class Derived> struct is_virtual_base_of<Base&, Derived> : public false_type{};\ntemplate <class Base, class Derived> struct is_virtual_base_of<Base, Derived&> : public false_type{};\ntemplate <class Base, class Derived> struct is_virtual_base_of<Base&, Derived&> : public false_type{};\n\n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_void.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_VOID_HPP_INCLUDED\n#define BOOST_TT_IS_VOID_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\ntemplate <class T>\nstruct is_void : public false_type {};\n\ntemplate<> struct is_void<void> : public true_type {};\ntemplate<> struct is_void<const void> : public true_type{};\ntemplate<> struct is_void<const volatile void> : public true_type{};\ntemplate<> struct is_void<volatile void> : public true_type{};\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_VOID_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/is_volatile.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_VOLATILE_HPP_INCLUDED\n#define BOOST_TT_IS_VOLATILE_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\n\n   template <class T>\n   struct is_volatile : public integral_constant<bool, __is_volatile(T)> {};\n\n#else\n\n   template <class T>\n   struct is_volatile : public false_type {};\n   template <class T> struct is_volatile<T volatile> : public true_type{};\n   template <class T, size_t N> struct is_volatile<T volatile[N]> : public true_type{};\n   template <class T> struct is_volatile<T volatile[]> : public true_type{};\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_VOLATILE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/make_signed.hpp",
    "content": "\n//  (C) Copyright John Maddock 2007.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_MAKE_SIGNED_HPP_INCLUDED\n#define BOOST_TT_MAKE_SIGNED_HPP_INCLUDED\n\n#include <boost/type_traits/conditional.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_signed.hpp>\n#include <boost/type_traits/is_unsigned.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_volatile.hpp>\n#include <boost/static_assert.hpp>\n\nnamespace boost {\n\ntemplate <class T>\nstruct make_signed\n{\nprivate:\n   BOOST_STATIC_ASSERT_MSG(( ::boost::is_integral<T>::value || ::boost::is_enum<T>::value), \"The template argument to make_signed must be an integer or enum type.\");\n   BOOST_STATIC_ASSERT_MSG(!(::boost::is_same<typename remove_cv<T>::type, bool>::value), \"The template argument to make_signed must not be the type bool.\");\n\n   typedef typename remove_cv<T>::type t_no_cv;\n   typedef typename conditional<\n      (::boost::is_signed<T>::value\n      && ::boost::is_integral<T>::value\n      && ! ::boost::is_same<t_no_cv, char>::value\n      && ! ::boost::is_same<t_no_cv, wchar_t>::value\n      && ! ::boost::is_same<t_no_cv, bool>::value),\n      T,\n      typename conditional<\n         (::boost::is_integral<T>::value\n         && ! ::boost::is_same<t_no_cv, char>::value\n         && ! ::boost::is_same<t_no_cv, wchar_t>::value\n         && ! ::boost::is_same<t_no_cv, bool>::value),\n         typename conditional<\n            is_same<t_no_cv, unsigned char>::value,\n            signed char,\n            typename conditional<\n               is_same<t_no_cv, unsigned short>::value,\n               signed short,\n               typename conditional<\n                  is_same<t_no_cv, unsigned int>::value,\n                  int,\n                  typename conditional<\n                     is_same<t_no_cv, unsigned long>::value,\n                     long,\n#if defined(BOOST_HAS_LONG_LONG)\n#ifdef BOOST_HAS_INT128\n                     typename conditional<\n                        sizeof(t_no_cv) == sizeof(boost::long_long_type), \n                        boost::long_long_type, \n                        boost::int128_type\n                     >::type\n#else\n                     boost::long_long_type\n#endif\n#elif defined(BOOST_HAS_MS_INT64)\n                     __int64\n#else\n                     long\n#endif\n                  >::type\n               >::type\n            >::type\n         >::type,\n         // Not a regular integer type:\n         typename conditional<\n            sizeof(t_no_cv) == sizeof(unsigned char),\n            signed char,\n            typename conditional<\n               sizeof(t_no_cv) == sizeof(unsigned short),\n               signed short,\n               typename conditional<\n                  sizeof(t_no_cv) == sizeof(unsigned int),\n                  int,\n                  typename conditional<\n                     sizeof(t_no_cv) == sizeof(unsigned long),\n                     long,\n#if defined(BOOST_HAS_LONG_LONG)\n#ifdef BOOST_HAS_INT128\n                     typename conditional<\n                        sizeof(t_no_cv) == sizeof(boost::long_long_type), \n                        boost::long_long_type, \n                        boost::int128_type\n                     >::type\n#else\n                     boost::long_long_type\n#endif\n#elif defined(BOOST_HAS_MS_INT64)\n                     __int64\n#else\n                     long\n#endif\n                  >::type\n               >::type\n            >::type\n         >::type\n      >::type\n   >::type base_integer_type;\n   \n   // Add back any const qualifier:\n   typedef typename conditional<\n      is_const<T>::value,\n      typename add_const<base_integer_type>::type,\n      base_integer_type\n   >::type const_base_integer_type;\npublic:\n   // Add back any volatile qualifier:\n   typedef typename conditional<\n      is_volatile<T>::value,\n      typename add_volatile<const_base_integer_type>::type,\n      const_base_integer_type\n   >::type type;\n};\n\n} // namespace boost\n\n#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/make_unsigned.hpp",
    "content": "\n//  (C) Copyright John Maddock 2007.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED\n#define BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED\n\n#include <boost/type_traits/conditional.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_signed.hpp>\n#include <boost/type_traits/is_unsigned.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_volatile.hpp>\n#include <boost/static_assert.hpp>\n\nnamespace boost {\n\ntemplate <class T>\nstruct make_unsigned\n{\nprivate:\n   BOOST_STATIC_ASSERT_MSG((::boost::is_integral<T>::value || ::boost::is_enum<T>::value), \"The template argument to make_unsigned must be an integer or enum type.\");\n   BOOST_STATIC_ASSERT_MSG((! ::boost::is_same<typename remove_cv<T>::type, bool>::value), \"The template argument to make_unsigned must not be the type bool\");\n\n   typedef typename remove_cv<T>::type t_no_cv;\n   typedef typename conditional<\n      (::boost::is_unsigned<T>::value && ::boost::is_integral<T>::value \n      && ! ::boost::is_same<t_no_cv, char>::value\n      && ! ::boost::is_same<t_no_cv, wchar_t>::value\n      && ! ::boost::is_same<t_no_cv, bool>::value),\n      T,\n      typename conditional<\n         (::boost::is_integral<T>::value \n         && ! ::boost::is_same<t_no_cv, char>::value\n         && ! ::boost::is_same<t_no_cv, wchar_t>::value\n         && ! ::boost::is_same<t_no_cv, bool>::value),\n         typename conditional<\n            is_same<t_no_cv, signed char>::value,\n            unsigned char,\n            typename conditional<\n               is_same<t_no_cv, short>::value,\n               unsigned short,\n               typename conditional<\n                  is_same<t_no_cv, int>::value,\n                  unsigned int,\n                  typename conditional<\n                     is_same<t_no_cv, long>::value,\n                     unsigned long,\n#if defined(BOOST_HAS_LONG_LONG)\n#ifdef BOOST_HAS_INT128\n                     typename conditional<\n                        sizeof(t_no_cv) == sizeof(boost::ulong_long_type), \n                        boost::ulong_long_type, \n                        boost::uint128_type\n                     >::type\n#else\n                     boost::ulong_long_type\n#endif\n#elif defined(BOOST_HAS_MS_INT64)\n                     unsigned __int64\n#else\n                     unsigned long\n#endif\n                  >::type\n               >::type\n            >::type\n         >::type,\n         // Not a regular integer type:\n         typename conditional<\n            sizeof(t_no_cv) == sizeof(unsigned char),\n            unsigned char,\n            typename conditional<\n               sizeof(t_no_cv) == sizeof(unsigned short),\n               unsigned short,\n               typename conditional<\n                  sizeof(t_no_cv) == sizeof(unsigned int),\n                  unsigned int,\n                  typename conditional<\n                     sizeof(t_no_cv) == sizeof(unsigned long),\n                     unsigned long,\n#if defined(BOOST_HAS_LONG_LONG)\n#ifdef BOOST_HAS_INT128\n                     typename conditional<\n                        sizeof(t_no_cv) == sizeof(boost::ulong_long_type), \n                        boost::ulong_long_type, \n                        boost::uint128_type\n                     >::type\n#else\n                     boost::ulong_long_type\n#endif\n#elif defined(BOOST_HAS_MS_INT64)\n                     unsigned __int64\n#else\n                     unsigned long\n#endif\n                  >::type\n               >::type\n            >::type\n         >::type\n      >::type\n   >::type base_integer_type;\n   \n   // Add back any const qualifier:\n   typedef typename conditional<\n      is_const<T>::value,\n      typename add_const<base_integer_type>::type,\n      base_integer_type\n   >::type const_base_integer_type;\npublic:\n   // Add back any volatile qualifier:\n   typedef typename conditional<\n      is_volatile<T>::value,\n      typename add_volatile<const_base_integer_type>::type,\n      const_base_integer_type\n   >::type type;\n};\n\n} // namespace boost\n\n#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/object_traits.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  defines object traits classes:\n//  is_object, is_scalar, is_class, is_compound, is_pod, \n//  has_trivial_constructor, has_trivial_copy, has_trivial_assign, \n//  has_trivial_destructor, is_empty.\n//\n\n#ifndef BOOST_TT_OBJECT_TRAITS_HPP_INLCUDED\n#define BOOST_TT_OBJECT_TRAITS_HPP_INLCUDED\n\n#include <boost/type_traits/has_trivial_assign.hpp>\n#include <boost/type_traits/has_trivial_constructor.hpp>\n#include <boost/type_traits/has_trivial_copy.hpp>\n#include <boost/type_traits/has_trivial_destructor.hpp>\n#include <boost/type_traits/has_nothrow_constructor.hpp>\n#include <boost/type_traits/has_nothrow_copy.hpp>\n#include <boost/type_traits/has_nothrow_assign.hpp>\n#include <boost/type_traits/is_base_and_derived.hpp>\n#include <boost/type_traits/is_class.hpp>\n#include <boost/type_traits/is_compound.hpp>\n#include <boost/type_traits/is_empty.hpp>\n#include <boost/type_traits/is_object.hpp>\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/is_scalar.hpp>\n#include <boost/type_traits/is_stateless.hpp>\n\n#endif // BOOST_TT_OBJECT_TRAITS_HPP_INLCUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/promote.hpp",
    "content": "// Copyright 2005 Alexander Nasonov.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef FILE_boost_type_traits_promote_hpp_INCLUDED\n#define FILE_boost_type_traits_promote_hpp_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/integral_promotion.hpp>\n#include <boost/type_traits/floating_point_promotion.hpp>\n\nnamespace boost {\n\ntemplate<class T> struct promote : public integral_promotion<typename floating_point_promotion<T>::type>{};\n\n}\n\n#endif // #ifndef FILE_boost_type_traits_promote_hpp_INCLUDED\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/rank.hpp",
    "content": "\n//  (C) Copyright John Maddock 2005.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_RANK_HPP_INCLUDED\n#define BOOST_TT_RANK_HPP_INCLUDED\n\n#include <boost/type_traits/integral_constant.hpp>\n\nnamespace boost {\n\n#if !defined( __CODEGEARC__ )\n\nnamespace detail{\n\ntemplate <class T, std::size_t N>\nstruct rank_imp\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = N);\n};\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\ntemplate <class T, std::size_t R, std::size_t N>\nstruct rank_imp<T[R], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));\n};\n\ntemplate <class T, std::size_t R, std::size_t N>\nstruct rank_imp<T const[R], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));\n};\n\ntemplate <class T, std::size_t R, std::size_t N>\nstruct rank_imp<T volatile[R], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));\n};\n\ntemplate <class T, std::size_t R, std::size_t N>\nstruct rank_imp<T const volatile[R], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));\n};\n\n#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\ntemplate <class T, std::size_t N>\nstruct rank_imp<T[], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));\n};\ntemplate <class T, std::size_t N>\nstruct rank_imp<T const[], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));\n};\ntemplate <class T, std::size_t N>\nstruct rank_imp<T volatile[], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));\n};\ntemplate <class T, std::size_t N>\nstruct rank_imp<T const volatile[], N>\n{\n   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));\n};\n#endif\n#endif\n}\n\n#endif // !defined( __CODEGEARC__ )\n\n#if defined( __CODEGEARC__ )\ntemplate <class T> struct rank : public integral_constant<std::size_t, __array_rank(T)>{};\n#else\ntemplate <class T> struct rank : public integral_constant<std::size_t, (::boost::detail::rank_imp<T, 0>::value)>{};\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/reference_traits.hpp",
    "content": "//  (C) Copyright David Abrahams Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000-2002.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_REFERENCE_TRAITS_HPP_INCLUDED\n#define BOOST_TT_REFERENCE_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/is_reference.hpp>\n\n#endif // BOOST_TT_REFERENCE_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/remove_all_extents.hpp",
    "content": "\n//  (C) Copyright John Maddock 2005.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_REMOVE_ALL_EXTENTS_HPP_INCLUDED\n#define BOOST_TT_REMOVE_ALL_EXTENTS_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <cstddef>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost {\n\ntemplate <class T> struct remove_all_extents{ typedef T type; };\n\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\ntemplate <class T, std::size_t N> struct remove_all_extents<T[N]> : public remove_all_extents<T>{};\ntemplate <class T, std::size_t N> struct remove_all_extents<T const[N]> : public remove_all_extents<T const>{};\ntemplate <class T, std::size_t N> struct remove_all_extents<T volatile[N]> : public remove_all_extents<T volatile>{};\ntemplate <class T, std::size_t N> struct remove_all_extents<T const volatile[N]> : public remove_all_extents<T const volatile>{};\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\ntemplate <class T> struct remove_all_extents<T[]> : public remove_all_extents<T>{};\ntemplate <class T> struct remove_all_extents<T const[]> : public remove_all_extents<T const>{};\ntemplate <class T> struct remove_all_extents<T volatile[]> : public remove_all_extents<T volatile>{};\ntemplate <class T> struct remove_all_extents<T const volatile[]> : public remove_all_extents<T const volatile>{};\n#endif\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/remove_bounds.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED\n#define BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED\n\n#include <boost/type_traits/remove_extent.hpp>\n\nnamespace boost \n{\n\ntemplate <class T> struct remove_bounds : public remove_extent<T> {};\n\n} // namespace boost\n\n#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/remove_const.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_REMOVE_CONST_HPP_INCLUDED\n#define BOOST_TT_REMOVE_CONST_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <cstddef>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost {\n\n   //  convert a type T to a non-cv-qualified type - remove_const<T>\n   template <class T> struct remove_const{ typedef T type; };\n   template <class T> struct remove_const<T const>{ typedef T type; };\n\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\n   template <class T, std::size_t N> struct remove_const<T const[N]>{ typedef T type[N]; };\n#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n   template <class T> struct remove_const<T const[]>{ typedef T type[]; };\n#endif\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_REMOVE_CONST_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/remove_cv.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_REMOVE_CV_HPP_INCLUDED\n#define BOOST_TT_REMOVE_CV_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n#include <cstddef>\n\nnamespace boost {\n\n   //  convert a type T to a non-cv-qualified type - remove_cv<T>\ntemplate <class T> struct remove_cv{ typedef T type; };\ntemplate <class T> struct remove_cv<T const>{ typedef T type;  };\ntemplate <class T> struct remove_cv<T volatile>{ typedef T type; };\ntemplate <class T> struct remove_cv<T const volatile>{ typedef T type; };\n\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\ntemplate <class T, std::size_t N> struct remove_cv<T const[N]>{ typedef T type[N]; };\ntemplate <class T, std::size_t N> struct remove_cv<T const volatile[N]>{ typedef T type[N]; };\ntemplate <class T, std::size_t N> struct remove_cv<T volatile[N]>{ typedef T type[N]; };\n#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\ntemplate <class T> struct remove_cv<T const[]>{ typedef T type[]; };\ntemplate <class T> struct remove_cv<T const volatile[]>{ typedef T type[]; };\ntemplate <class T> struct remove_cv<T volatile[]>{ typedef T type[]; };\n#endif\n#endif\n\n\n} // namespace boost\n\n#endif // BOOST_TT_REMOVE_CV_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/remove_extent.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_REMOVE_EXTENT_HPP_INCLUDED\n#define BOOST_TT_REMOVE_EXTENT_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n#include <cstddef>\n\nnamespace boost {\n\ntemplate <class T> struct remove_extent{ typedef T type; };\n\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\ntemplate <typename T, std::size_t N> struct remove_extent<T[N]> { typedef T type; };\ntemplate <typename T, std::size_t N> struct remove_extent<T const[N]> { typedef T const type; };\ntemplate <typename T, std::size_t N> struct remove_extent<T volatile [N]> { typedef T volatile type; };\ntemplate <typename T, std::size_t N> struct remove_extent<T const volatile [N]> { typedef T const volatile type; };\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\ntemplate <typename T> struct remove_extent<T[]> { typedef T type; };\ntemplate <typename T> struct remove_extent<T const[]> { typedef T const type; };\ntemplate <typename T> struct remove_extent<T volatile[]> { typedef T volatile type; };\ntemplate <typename T> struct remove_extent<T const volatile[]> { typedef T const volatile type; };\n#endif\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/remove_pointer.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_REMOVE_POINTER_HPP_INCLUDED\n#define BOOST_TT_REMOVE_POINTER_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n#if defined(BOOST_MSVC)\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#endif\n\nnamespace boost {\n\n#ifdef BOOST_MSVC\n\nnamespace detail{\n\n   //\n   // We need all this crazy indirection because a type such as:\n   //\n   // T (*const)(U)\n   //\n   // Does not bind to a <T*> or <T*const> partial specialization with VC10 and earlier\n   //\n   template <class T> \n   struct remove_pointer_imp\n   {\n      typedef T type;\n   };\n\n   template <class T> \n   struct remove_pointer_imp<T*>\n   {\n      typedef T type;\n   };\n\n   template <class T, bool b> \n   struct remove_pointer_imp3\n   {\n      typedef typename remove_pointer_imp<typename boost::remove_cv<T>::type>::type type;\n   };\n\n   template <class T> \n   struct remove_pointer_imp3<T, false>\n   {\n      typedef T type;\n   };\n\n   template <class T> \n   struct remove_pointer_imp2\n   {\n      typedef typename remove_pointer_imp3<T, ::boost::is_pointer<T>::value>::type type;\n   };\n}\n\ntemplate <class T> struct remove_pointer{ typedef typename boost::detail::remove_pointer_imp2<T>::type type; };\n\n#else\n\ntemplate <class T> struct remove_pointer{ typedef T type; };\ntemplate <class T> struct remove_pointer<T*>{ typedef T type; };\ntemplate <class T> struct remove_pointer<T*const>{ typedef T type; };\ntemplate <class T> struct remove_pointer<T*volatile>{ typedef T type; };\ntemplate <class T> struct remove_pointer<T*const volatile>{ typedef T type; };\n\n#endif\n\n} // namespace boost\n\n#endif // BOOST_TT_REMOVE_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/remove_reference.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost {\n\n\nnamespace detail{\n//\n// We can't filter out rvalue_references at the same level as\n// references or we get ambiguities from msvc:\n//\ntemplate <class T>\nstruct remove_rvalue_ref\n{\n   typedef T type;\n};\n#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES\ntemplate <class T>\nstruct remove_rvalue_ref<T&&>\n{\n   typedef T type;\n};\n#endif\n\n} // namespace detail\n\ntemplate <class T> struct remove_reference{ typedef typename boost::detail::remove_rvalue_ref<T>::type type; };\ntemplate <class T> struct remove_reference<T&>{ typedef T type; };\n\n#if defined(BOOST_ILLEGAL_CV_REFERENCES)\n// these are illegal specialisations; cv-qualifies applied to\n// references have no effect according to [8.3.2p1],\n// C++ Builder requires them though as it treats cv-qualified\n// references as distinct types...\ntemplate <class T> struct remove_reference<T&const>{ typedef T type; };\ntemplate <class T> struct remove_reference<T&volatile>{ typedef T type; };\ntemplate <class T> struct remove_reference<T&const volatile>{ typedef T type; };\n#endif\n\n\n} // namespace boost\n\n#endif // BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/remove_volatile.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED\n#define BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n#include <cstddef>\n\nnamespace boost {\n\n   //  convert a type T to a non-cv-qualified type - remove_volatile<T>\n   template <class T> struct remove_volatile{ typedef T type; };\n   template <class T> struct remove_volatile<T volatile>{ typedef T type; };\n\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\n   template <class T, std::size_t N> struct remove_volatile<T volatile[N]>{ typedef T type[N]; };\n#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n   template <class T> struct remove_volatile<T volatile[]>{ typedef T type[]; };\n#endif\n#endif\n\n\n} // namespace boost\n\n#endif // BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/same_traits.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  defines is_same:\n\n#ifndef BOOST_TT_SAME_TRAITS_HPP_INCLUDED\n#define BOOST_TT_SAME_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/is_same.hpp>\n\n#endif  // BOOST_TT_SAME_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/transform_traits.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  defines traits classes for transforming one type to another:\n//  remove_reference, add_reference, remove_bounds, remove_pointer.\n//\n\n#ifndef BOOST_TT_TRANSFORM_TRAITS_HPP_INCLUDED\n#define BOOST_TT_TRANSFORM_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/add_pointer.hpp>\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/type_traits/remove_bounds.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n\n#endif // BOOST_TT_TRANSFORM_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/type_identity.hpp",
    "content": "#ifndef BOOST_TYPE_TRAITS_TYPE_IDENTITY_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_TYPE_IDENTITY_HPP_INCLUDED\n\n//\n//  Copyright 2015 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\nnamespace boost\n{\n\ntemplate<class T> struct type_identity\n{\n    typedef T type;\n};\n\n} // namespace boost\n\n#endif // #ifndef BOOST_TYPE_TRAITS_TYPE_IDENTITY_HPP_INCLUDED\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/type_traits/type_with_alignment.hpp",
    "content": "//  (C) Copyright John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED\n#define BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED\n\n#include <boost/type_traits/alignment_of.hpp>\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/config.hpp>\n#include <cstddef>\n#include <boost/detail/workaround.hpp>\n\n#ifdef BOOST_MSVC\n#   pragma warning(push)\n#   pragma warning(disable: 4121) // alignment is sensitive to packing\n#endif\n\n#ifdef _MSC_VER\n#include <boost/type_traits/conditional.hpp>\n#endif\n\nnamespace boost {\n   namespace detail{\n\n#ifndef __BORLANDC__\n\n      union max_align\n      {\n         char c;\n         short s;\n         int i;\n         long l;\n#ifndef BOOST_NO_LONG_LONG\n         boost::long_long_type ll;\n#endif\n#ifdef BOOST_HAS_INT128\n         boost::int128_type i128;\n#endif\n         float f;\n         double d;\n         long double ld;\n#ifdef BOOST_HAS_FLOAT128\n         __float128 f128;\n#endif\n      };\n\ntemplate <std::size_t Target, bool check> struct long_double_alignment{ typedef long double type; };\ntemplate <std::size_t Target> struct long_double_alignment<Target, false>{ typedef boost::detail::max_align type; };\n\ntemplate <std::size_t Target, bool check> struct double_alignment{ typedef double type; };\ntemplate <std::size_t Target> struct double_alignment<Target, false>{ typedef typename long_double_alignment<Target, boost::alignment_of<long double>::value >= Target>::type type; };\n\n#ifndef BOOST_NO_LONG_LONG\ntemplate <std::size_t Target, bool check> struct long_long_alignment{ typedef boost::long_long_type type; };\ntemplate <std::size_t Target> struct long_long_alignment<Target, false>{ typedef typename double_alignment<Target, boost::alignment_of<double>::value >= Target>::type type; };\n#endif\n\ntemplate <std::size_t Target, bool check> struct long_alignment{ typedef long type; };\n#ifndef BOOST_NO_LONG_LONG\ntemplate <std::size_t Target> struct long_alignment<Target, false>{ typedef typename long_long_alignment<Target, boost::alignment_of<boost::long_long_type>::value >= Target>::type type; };\n#else\ntemplate <std::size_t Target> struct long_alignment<Target, false>{ typedef typename double_alignment<Target, boost::alignment_of<double>::value >= Target>::type type; };\n#endif\n\ntemplate <std::size_t Target, bool check> struct int_alignment{ typedef int type; };\ntemplate <std::size_t Target> struct int_alignment<Target, false>{ typedef typename long_alignment<Target, boost::alignment_of<long>::value >= Target>::type type; };\n\ntemplate <std::size_t Target, bool check> struct short_alignment{ typedef short type; };\ntemplate <std::size_t Target> struct short_alignment<Target, false>{ typedef typename int_alignment<Target, boost::alignment_of<int>::value >= Target>::type type; };\n\ntemplate <std::size_t Target, bool check> struct char_alignment{ typedef char type; };\ntemplate <std::size_t Target> struct char_alignment<Target, false>{ typedef typename short_alignment<Target, boost::alignment_of<short>::value >= Target>::type type; };\n\n}\n\ntemplate <std::size_t Align>\nstruct type_with_alignment \n{\n   typedef typename boost::detail::char_alignment<Align, boost::alignment_of<char>::value >= Align>::type type;\n};\n\n#if (defined(__GNUC__) || (defined (__SUNPRO_CC) &&  (__SUNPRO_CC >= 0x5130)) || defined(__clang__)) && !defined(BOOST_TT_DISABLE_INTRINSICS)\nnamespace tt_align_ns {\nstruct __attribute__((__aligned__(2))) a2 {};\nstruct __attribute__((__aligned__(4))) a4 {};\nstruct __attribute__((__aligned__(8))) a8 {};\nstruct __attribute__((__aligned__(16))) a16 {};\nstruct __attribute__((__aligned__(32))) a32 {};\nstruct __attribute__((__aligned__(64))) a64 {};\nstruct __attribute__((__aligned__(128))) a128 {};\n}\n\ntemplate<> struct type_with_alignment<1>  { public: typedef char type; };\ntemplate<> struct type_with_alignment<2>  { public: typedef tt_align_ns::a2 type; };\ntemplate<> struct type_with_alignment<4>  { public: typedef tt_align_ns::a4 type; };\ntemplate<> struct type_with_alignment<8>  { public: typedef tt_align_ns::a8 type; };\ntemplate<> struct type_with_alignment<16> { public: typedef tt_align_ns::a16 type; };\ntemplate<> struct type_with_alignment<32> { public: typedef tt_align_ns::a32 type; };\ntemplate<> struct type_with_alignment<64> { public: typedef tt_align_ns::a64 type; };\ntemplate<> struct type_with_alignment<128> { public: typedef tt_align_ns::a128 type; };\n\ntemplate<> struct is_pod< ::boost::tt_align_ns::a2> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a4> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a8> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a16> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a32> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a64> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a128> : public true_type{};\n\n#endif\n#if (defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))) && !defined(BOOST_TT_DISABLE_INTRINSICS)\n//\n// MSVC supports types which have alignments greater than the normal\n// maximum: these are used for example in the types __m64 and __m128\n// to provide types with alignment requirements which match the SSE\n// registers.  Therefore we extend type_with_alignment<> to support\n// such types, however, we have to be careful to use a builtin type\n// whenever possible otherwise we break previously working code:\n// see http://article.gmane.org/gmane.comp.lib.boost.devel/173011\n// for an example and test case.  Thus types like a8 below will\n// be used *only* if the existing implementation can't provide a type\n// with suitable alignment.  This does mean however, that type_with_alignment<>\n// may return a type which cannot be passed through a function call\n// by value (and neither can any type containing such a type like\n// Boost.Optional).  However, this only happens when we have no choice \n// in the matter because no other \"ordinary\" type is available.\n//\nnamespace tt_align_ns {\nstruct __declspec(align(8)) a8 { \n   char m[8]; \n   typedef a8 type;\n};\nstruct __declspec(align(16)) a16 { \n   char m[16]; \n   typedef a16 type;\n};\nstruct __declspec(align(32)) a32 { \n   char m[32]; \n   typedef a32 type;\n};\nstruct __declspec(align(64)) a64 \n{ \n   char m[64]; \n   typedef a64 type;\n};\nstruct __declspec(align(128)) a128 { \n   char m[128]; \n   typedef a128 type;\n};\n}\n\ntemplate<> struct type_with_alignment<8>  \n{ \n   typedef boost::conditional<\n      ::boost::alignment_of<boost::detail::max_align>::value < 8,\n      tt_align_ns::a8,\n      boost::detail::char_alignment<8, false> >::type t1;\npublic: \n   typedef t1::type type;\n};\ntemplate<> struct type_with_alignment<16> \n{ \n   typedef boost::conditional<\n      ::boost::alignment_of<boost::detail::max_align>::value < 16,\n      tt_align_ns::a16,\n      boost::detail::char_alignment<16, false> >::type t1;\npublic: \n   typedef t1::type type;\n};\ntemplate<> struct type_with_alignment<32> \n{ \n   typedef boost::conditional<\n      ::boost::alignment_of<boost::detail::max_align>::value < 32,\n      tt_align_ns::a32,\n      boost::detail::char_alignment<32, false> >::type t1;\npublic: \n   typedef t1::type type;\n};\ntemplate<> struct type_with_alignment<64> {\n   typedef boost::conditional<\n      ::boost::alignment_of<boost::detail::max_align>::value < 64,\n      tt_align_ns::a64,\n      boost::detail::char_alignment<64, false> >::type t1;\npublic: \n   typedef t1::type type;\n};\ntemplate<> struct type_with_alignment<128> {\n   typedef boost::conditional<\n      ::boost::alignment_of<boost::detail::max_align>::value < 128,\n      tt_align_ns::a128,\n      boost::detail::char_alignment<128, false> >::type t1;\npublic: \n   typedef t1::type type;\n};\n\ntemplate<> struct is_pod< ::boost::tt_align_ns::a8> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a16> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a32> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a64> : public true_type{};\ntemplate<> struct is_pod< ::boost::tt_align_ns::a128> : public true_type{};\n\n#endif\n\n#else\n\n//\n// Borland specific version, we have this for two reasons:\n// 1) The version above doesn't always compile (with the new test cases for example)\n// 2) Because of Borlands #pragma option we can create types with alignments that are\n//    greater that the largest aligned builtin type.\n\nnamespace tt_align_ns{\n#pragma option push -a16\nstruct a2{ short s; };\nstruct a4{ int s; };\nstruct a8{ double s; };\nstruct a16{ long double s; };\n#pragma option pop\n}\n\nnamespace detail {\n\ntypedef ::boost::tt_align_ns::a16 max_align;\n\n}\n//#if ! BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))\ntemplate <> struct is_pod< ::boost::tt_align_ns::a2> : public true_type{};\ntemplate <> struct is_pod< ::boost::tt_align_ns::a4> : public true_type{};\ntemplate <> struct is_pod< ::boost::tt_align_ns::a8> : public true_type{};\ntemplate <> struct is_pod< ::boost::tt_align_ns::a16> : public true_type{};\n//#endif\n\ntemplate <std::size_t N> struct type_with_alignment\n{\n   // We should never get to here, but if we do use the maximally\n   // aligned type:\n   // BOOST_STATIC_ASSERT(0);\n   typedef tt_align_ns::a16 type;\n};\ntemplate <> struct type_with_alignment<1>{ typedef char type; };\ntemplate <> struct type_with_alignment<2>{ typedef tt_align_ns::a2 type; };\ntemplate <> struct type_with_alignment<4>{ typedef tt_align_ns::a4 type; };\ntemplate <> struct type_with_alignment<8>{ typedef tt_align_ns::a8 type; };\ntemplate <> struct type_with_alignment<16>{ typedef tt_align_ns::a16 type; };\n\n#endif\n\n} // namespace boost\n\n#ifdef BOOST_MSVC\n#   pragma warning(pop)\n#endif\n\n#endif // BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/addressof.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Fernandes\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_UTILITY_ADDRESSOF_HPP\n#define BOOST_UTILITY_ADDRESSOF_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/addressof.hpp instead.\n\n#include <boost/core/addressof.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/base_from_member.hpp",
    "content": "//  boost utility/base_from_member.hpp header file  --------------------------//\n\n//  Copyright 2001, 2003, 2004, 2012 Daryle Walker.  Use, modification, and\n//  distribution are subject to the Boost Software License, Version 1.0.  (See\n//  accompanying file LICENSE_1_0.txt or a copy at\n//  <http://www.boost.org/LICENSE_1_0.txt>.)\n\n//  See <http://www.boost.org/libs/utility/> for the library's home page.\n\n#ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP\n#define BOOST_UTILITY_BASE_FROM_MEMBER_HPP\n\n#include <boost/config.hpp>\n#include <boost/preprocessor/arithmetic/inc.hpp>\n#include <boost/preprocessor/repetition/enum_binary_params.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/repeat_from_to.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/utility/enable_if.hpp>\n\n\n//  Base-from-member arity configuration macro  ------------------------------//\n\n// The following macro determines how many arguments will be in the largest\n// constructor template of base_from_member.  Constructor templates will be\n// generated from one argument to this maximum.  Code from other files can read\n// this number if they need to always match the exact maximum base_from_member\n// uses.  The maximum constructor length can be changed by overriding the\n// #defined constant.  Make sure to apply the override, if any, for all source\n// files during project compiling for consistency.\n\n// Contributed by Jonathan Turkanis\n\n#ifndef BOOST_BASE_FROM_MEMBER_MAX_ARITY\n#define BOOST_BASE_FROM_MEMBER_MAX_ARITY  10\n#endif\n\n\n//  An iteration of a constructor template for base_from_member  -------------//\n\n// A macro that should expand to:\n//     template < typename T1, ..., typename Tn >\n//     base_from_member( T1 x1, ..., Tn xn )\n//         : member( x1, ..., xn )\n//         {}\n// This macro should only persist within this file.\n\n#define BOOST_PRIVATE_CTR_DEF( z, n, data )                            \\\n    template < BOOST_PP_ENUM_PARAMS(n, typename T) >                   \\\n    explicit base_from_member( BOOST_PP_ENUM_BINARY_PARAMS(n, T, x) )  \\\n        : member( BOOST_PP_ENUM_PARAMS(n, x) )                         \\\n        {}                                                             \\\n    /**/\n\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n//  Type-unmarking class template  -------------------------------------------//\n\n// Type-trait to get the raw type, i.e. the type without top-level reference nor\n// cv-qualification, from a type expression.  Mainly for function arguments, any\n// reference part is stripped first.\n\n// Contributed by Daryle Walker\n\ntemplate < typename T >\nstruct remove_cv_ref\n{\n    typedef typename ::boost::remove_cv<typename\n     ::boost::remove_reference<T>::type>::type  type;\n\n};  // boost::detail::remove_cv_ref\n\n//  Unmarked-type comparison class template  ---------------------------------//\n\n// Type-trait to check if two type expressions have the same raw type.\n\n// Contributed by Daryle Walker, based on a work-around by Luc Danton\n\ntemplate < typename T, typename U >\nstruct is_related\n    : public ::boost::is_same<\n     typename ::boost::detail::remove_cv_ref<T>::type,\n     typename ::boost::detail::remove_cv_ref<U>::type >\n{};\n\n//  Enable-if-on-unidentical-unmarked-type class template  -------------------//\n\n// Enable-if on the first two type expressions NOT having the same raw type.\n\n// Contributed by Daryle Walker, based on a work-around by Luc Danton\n\n#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES\ntemplate<typename ...T>\nstruct enable_if_unrelated\n    : public ::boost::enable_if_c<true>\n{};\n\ntemplate<typename T, typename U, typename ...U2>\nstruct enable_if_unrelated<T, U, U2...>\n    : public ::boost::disable_if< ::boost::detail::is_related<T, U> >\n{};\n#endif\n\n}  // namespace boost::detail\n\n\n//  Base-from-member class template  -----------------------------------------//\n\n// Helper to initialize a base object so a derived class can use this\n// object in the initialization of another base class.  Used by\n// Dietmar Kuehl from ideas by Ron Klatcho to solve the problem of a\n// base class needing to be initialized by a member.\n\n// Contributed by Daryle Walker\n\ntemplate < typename MemberType, int UniqueID = 0 >\nclass base_from_member\n{\nprotected:\n    MemberType  member;\n\n#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \\\n    !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \\\n    !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && \\\n    !(defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 4))\n    template <typename ...T, typename EnableIf = typename\n     ::boost::detail::enable_if_unrelated<base_from_member, T...>::type>\n    explicit BOOST_CONSTEXPR base_from_member( T&& ...x )\n        BOOST_NOEXCEPT_IF( BOOST_NOEXCEPT_EXPR(::new ((void*) 0) MemberType(\n         static_cast<T&&>(x)... )) )  // no std::is_nothrow_constructible...\n        : member( static_cast<T&&>(x)... )     // ...nor std::forward needed\n        {}\n#else\n    base_from_member()\n        : member()\n        {}\n\n    BOOST_PP_REPEAT_FROM_TO( 1, BOOST_PP_INC(BOOST_BASE_FROM_MEMBER_MAX_ARITY),\n     BOOST_PRIVATE_CTR_DEF, _ )\n#endif\n\n};  // boost::base_from_member\n\ntemplate < typename MemberType, int UniqueID >\nclass base_from_member<MemberType&, UniqueID>\n{\nprotected:\n    MemberType& member;\n\n    explicit BOOST_CONSTEXPR base_from_member( MemberType& x )\n        BOOST_NOEXCEPT\n        : member( x )\n        {}\n\n};  // boost::base_from_member\n\n}  // namespace boost\n\n\n// Undo any private macros\n#undef BOOST_PRIVATE_CTR_DEF\n\n\n#endif  // BOOST_UTILITY_BASE_FROM_MEMBER_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/binary.hpp",
    "content": "/*=============================================================================\n    Copyright (c) 2005 Matthew Calabrese\n\n    Use, modification and distribution is subject to the Boost Software\n    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n    http://www.boost.org/LICENSE_1_0.txt)\n==============================================================================*/\n\n#ifndef BOOST_UTILITY_BINARY_HPP\n#define BOOST_UTILITY_BINARY_HPP\n\n/*=============================================================================\n\n    Binary Literal Utility\n    ______________________\n\n\n    The following code works by converting the input bit pattern into a\n    Boost.Preprocessor sequence, then converting groupings of 3 bits each into\n    the corresponding octal digit, and finally concatenating all of the digits\n    together along with a leading zero. This yields a standard octal literal\n    with the desired value as specified in bits.\n\n==============================================================================*/\n\n#include <boost/preprocessor/control/deduce_d.hpp>\n#include <boost/preprocessor/facilities/identity.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/seq/cat.hpp>\n#include <boost/preprocessor/seq/transform.hpp>\n#include <boost/preprocessor/arithmetic/mod.hpp>\n#include <boost/preprocessor/seq/size.hpp>\n#include <boost/preprocessor/facilities/empty.hpp>\n#include <boost/preprocessor/control/while.hpp>\n\n#define BOOST_BINARY( bit_groupings )                                          \\\n  BOOST_BINARY_LITERAL_D( BOOST_PP_DEDUCE_D(), bit_groupings ) \n\n#define BOOST_BINARY_U( bit_groupings )                                        \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, U ) \n\n#define BOOST_BINARY_L( bit_groupings )                                        \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, L ) \n\n#define BOOST_BINARY_UL( bit_groupings )                                       \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, UL ) \n\n#define BOOST_BINARY_LU( bit_groupings )                                       \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LU ) \n\n#define BOOST_BINARY_LL( bit_groupings )                                       \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LL ) \n\n#define BOOST_BINARY_ULL( bit_groupings )                                      \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, ULL ) \n\n#define BOOST_BINARY_LLU( bit_groupings )                                      \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LLU ) \n\n#define BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, suffix )                 \\\n  BOOST_SUFFIXED_BINARY_LITERAL_D( BOOST_PP_DEDUCE_D(), bit_groupings, suffix ) \n\n#define BOOST_SUFFIXED_BINARY_LITERAL_D( d, bit_groupings, suffix )            \\\n  BOOST_PP_CAT( BOOST_BINARY_LITERAL_D( d, bit_groupings ), suffix ) \n\n#define BOOST_BINARY_LITERAL_D( d, bit_groupings )                             \\\n  BOOST_PP_SEQ_CAT                                                             \\\n  ( (0) BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings )  \\\n  ) \n\n#define BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings )  \\\n  BOOST_PP_SEQ_TRANSFORM                                                       \\\n  ( BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION                                     \\\n  , BOOST_PP_NIL                                                               \\\n  , BOOST_PP_IDENTITY( BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE )()\\\n    ( BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE                                    \\\n      (                                                                        \\\n        d                                                                      \\\n      , BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings )    \\\n      )                                                                        \\\n    )                                                                          \\\n  ) \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE( bit_sequence )   \\\n  BOOST_PP_CAT                                                                 \\\n  ( BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1 bit_sequence      \\\n  , END_BIT                                                                    \\\n  ) \n\n#define BOOST_DETAIL_BITS_PER_OCTIT 3\n\n#define BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE( d, incomplete_nibble_sequence ) \\\n  BOOST_PP_CAT                                                                 \\\n  ( BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_                            \\\n  , BOOST_PP_MOD_D( d                                                          \\\n                  , BOOST_PP_SEQ_SIZE( incomplete_nibble_sequence )            \\\n                  , BOOST_DETAIL_BITS_PER_OCTIT                                \\\n                  )                                                            \\\n  )                                                                            \\\n  incomplete_nibble_sequence \n\n#define BOOST_DETAIL_FIXED_COMPL( bit )                                        \\\n  BOOST_PP_CAT( BOOST_DETAIL_FIXED_COMPL_, bit )\n\n#define BOOST_DETAIL_FIXED_COMPL_0 1 \n\n#define BOOST_DETAIL_FIXED_COMPL_1 0 \n\n#define BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings )    \\\n  BOOST_PP_EMPTY                                                               \\\n  BOOST_PP_CAT( BOOST_PP_WHILE_, d )                                           \\\n  ( BOOST_DETAIL_BINARY_LITERAL_PREDICATE                                      \\\n  , BOOST_DETAIL_BINARY_LITERAL_OPERATION                                      \\\n  , bit_groupings ()                                                           \\\n  ) \n\n#define BOOST_DETAIL_BINARY_LITERAL_PREDICATE( d, state )                      \\\n  BOOST_DETAIL_FIXED_COMPL( BOOST_DETAIL_IS_NULLARY_ARGS( state ) ) \n\n#define BOOST_DETAIL_BINARY_LITERAL_OPERATION( d, state )                      \\\n  BOOST_DETAIL_SPLIT_AND_SWAP                                                  \\\n  ( BOOST_PP_CAT( BOOST_DETAIL_BINARY_LITERAL_ELEMENT_, state ) ) \n\n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION( s, dummy_param, tuple )        \\\n  BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL tuple \n\n#define BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL( bit2, bit1, bit0 )               \\\n  BOOST_DETAIL_TRIPLE_TO_OCTAL_ ## bit2 ## bit1 ## bit0 \n\n#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_1 (0)(0)\n#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_2 (0)\n#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_0  \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1END_BIT  \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1( bit )        \\\n  ( ( bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2 \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2( bit )        \\\n  bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3 \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3( bit )        \\\n  bit ) ) BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1 \n\n#define BOOST_DETAIL_SPLIT_AND_SWAP( params )                                  \\\n  BOOST_PP_IDENTITY( BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS )()( params )\n\n#define BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS( first_param, second_param )        \\\n  second_param first_param \n\n#define BOOST_DETAIL_LEFT_OF_COMMA( params )                                   \\\n  BOOST_PP_IDENTITY( BOOST_DETAIL_FIRST_MACRO_PARAM )()( params ) \n\n#define BOOST_DETAIL_FIRST_MACRO_PARAM( first_param, second_param )            \\\n  first_param \n\n/* Begin derived concepts from Chaos by Paul Mensonides */\n\n#define BOOST_DETAIL_IS_NULLARY_ARGS( param )                                  \\\n  BOOST_DETAIL_LEFT_OF_COMMA                                                   \\\n  ( BOOST_PP_CAT( BOOST_DETAIL_IS_NULLARY_ARGS_R_                              \\\n                , BOOST_DETAIL_IS_NULLARY_ARGS_C param                         \\\n                )                                                              \\\n  ) \n\n#define BOOST_DETAIL_IS_NULLARY_ARGS_C()                                       \\\n  1 \n\n#define BOOST_DETAIL_IS_NULLARY_ARGS_R_1                                       \\\n  1, BOOST_PP_NIL \n\n#define BOOST_DETAIL_IS_NULLARY_ARGS_R_BOOST_DETAIL_IS_NULLARY_ARGS_C          \\\n  0, BOOST_PP_NIL \n\n/* End derived concepts from Chaos by Paul Mensonides */\n\n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_000 0 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_001 1 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_010 2 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_011 3 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_100 4 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_101 5 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_110 6 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_111 7 \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0 (0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1 (1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000 (0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001 (0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010 (0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011 (0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100 (1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101 (1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110 (1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111 (1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000 (0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001 (0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010 (0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011 (0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100 (0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101 (0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110 (0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111 (0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000 (1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001 (1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010 (1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011 (1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100 (1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101 (1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110 (1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111 (1)(1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000 (0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001 (0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010 (0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011 (0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100 (0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101 (0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110 (0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111 (0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000 (0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001 (0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010 (0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011 (0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100 (0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101 (0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110 (0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111 (0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000 (1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001 (1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010 (1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011 (1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100 (1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101 (1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110 (1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111 (1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000 (1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001 (1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010 (1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011 (1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100 (1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101 (1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110 (1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111 (1)(1)(1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000000 (0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000001 (0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000010 (0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000011 (0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000100 (0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000101 (0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000110 (0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000111 (0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001000 (0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001001 (0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001010 (0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001011 (0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001100 (0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001101 (0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001110 (0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001111 (0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010000 (0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010001 (0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010010 (0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010011 (0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010100 (0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010101 (0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010110 (0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010111 (0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011000 (0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011001 (0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011010 (0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011011 (0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011100 (0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011101 (0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011110 (0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011111 (0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100000 (1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100001 (1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100010 (1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100011 (1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100100 (1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100101 (1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100110 (1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100111 (1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101000 (1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101001 (1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101010 (1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101011 (1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101100 (1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101101 (1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101110 (1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101111 (1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110000 (1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110001 (1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110010 (1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110011 (1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110100 (1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110101 (1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110110 (1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110111 (1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111000 (1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111001 (1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111010 (1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111011 (1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111100 (1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111101 (1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111110 (1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111111 (1)(1)(1)(1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000000 (0)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000001 (0)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000010 (0)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000011 (0)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000100 (0)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000101 (0)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000110 (0)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000111 (0)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001000 (0)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001001 (0)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001010 (0)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001011 (0)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001100 (0)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001101 (0)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001110 (0)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001111 (0)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010000 (0)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010001 (0)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010010 (0)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010011 (0)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010100 (0)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010101 (0)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010110 (0)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010111 (0)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011000 (0)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011001 (0)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011010 (0)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011011 (0)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011100 (0)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011101 (0)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011110 (0)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011111 (0)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100000 (0)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100001 (0)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100010 (0)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100011 (0)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100100 (0)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100101 (0)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100110 (0)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100111 (0)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101000 (0)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101001 (0)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101010 (0)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101011 (0)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101100 (0)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101101 (0)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101110 (0)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101111 (0)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110000 (0)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110001 (0)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110010 (0)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110011 (0)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110100 (0)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110101 (0)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110110 (0)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110111 (0)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111000 (0)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111001 (0)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111010 (0)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111011 (0)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111100 (0)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111101 (0)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111110 (0)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111111 (0)(1)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000000 (1)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000001 (1)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000010 (1)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000011 (1)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000100 (1)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000101 (1)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000110 (1)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000111 (1)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001000 (1)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001001 (1)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001010 (1)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001011 (1)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001100 (1)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001101 (1)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001110 (1)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001111 (1)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010000 (1)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010001 (1)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010010 (1)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010011 (1)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010100 (1)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010101 (1)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010110 (1)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010111 (1)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011000 (1)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011001 (1)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011010 (1)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011011 (1)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011100 (1)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011101 (1)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011110 (1)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011111 (1)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100000 (1)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100001 (1)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100010 (1)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100011 (1)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100100 (1)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100101 (1)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100110 (1)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100111 (1)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101000 (1)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101001 (1)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101010 (1)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101011 (1)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101100 (1)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101101 (1)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101110 (1)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101111 (1)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110000 (1)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110001 (1)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110010 (1)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110011 (1)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110100 (1)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110101 (1)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110110 (1)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110111 (1)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111000 (1)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111001 (1)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111010 (1)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111011 (1)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111100 (1)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111101 (1)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111110 (1)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111111 (1)(1)(1)(1)(1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000000 (0)(0)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000001 (0)(0)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000010 (0)(0)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000011 (0)(0)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000100 (0)(0)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000101 (0)(0)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000110 (0)(0)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000111 (0)(0)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001000 (0)(0)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001001 (0)(0)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001010 (0)(0)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001011 (0)(0)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001100 (0)(0)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001101 (0)(0)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001110 (0)(0)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001111 (0)(0)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010000 (0)(0)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010001 (0)(0)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010010 (0)(0)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010011 (0)(0)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010100 (0)(0)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010101 (0)(0)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010110 (0)(0)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010111 (0)(0)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011000 (0)(0)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011001 (0)(0)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011010 (0)(0)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011011 (0)(0)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011100 (0)(0)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011101 (0)(0)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011110 (0)(0)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011111 (0)(0)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100000 (0)(0)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100001 (0)(0)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100010 (0)(0)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100011 (0)(0)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100100 (0)(0)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100101 (0)(0)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100110 (0)(0)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100111 (0)(0)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101000 (0)(0)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101001 (0)(0)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101010 (0)(0)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101011 (0)(0)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101100 (0)(0)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101101 (0)(0)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101110 (0)(0)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101111 (0)(0)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110000 (0)(0)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110001 (0)(0)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110010 (0)(0)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110011 (0)(0)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110100 (0)(0)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110101 (0)(0)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110110 (0)(0)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110111 (0)(0)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111000 (0)(0)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111001 (0)(0)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111010 (0)(0)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111011 (0)(0)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111100 (0)(0)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111101 (0)(0)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111110 (0)(0)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111111 (0)(0)(1)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000000 (0)(1)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000001 (0)(1)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000010 (0)(1)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000011 (0)(1)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000100 (0)(1)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000101 (0)(1)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000110 (0)(1)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000111 (0)(1)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001000 (0)(1)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001001 (0)(1)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001010 (0)(1)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001011 (0)(1)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001100 (0)(1)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001101 (0)(1)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001110 (0)(1)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001111 (0)(1)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010000 (0)(1)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010001 (0)(1)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010010 (0)(1)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010011 (0)(1)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010100 (0)(1)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010101 (0)(1)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010110 (0)(1)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010111 (0)(1)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011000 (0)(1)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011001 (0)(1)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011010 (0)(1)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011011 (0)(1)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011100 (0)(1)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011101 (0)(1)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011110 (0)(1)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011111 (0)(1)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100000 (0)(1)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100001 (0)(1)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100010 (0)(1)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100011 (0)(1)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100100 (0)(1)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100101 (0)(1)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100110 (0)(1)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100111 (0)(1)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101000 (0)(1)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101001 (0)(1)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101010 (0)(1)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101011 (0)(1)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101100 (0)(1)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101101 (0)(1)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101110 (0)(1)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101111 (0)(1)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110000 (0)(1)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110001 (0)(1)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110010 (0)(1)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110011 (0)(1)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110100 (0)(1)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110101 (0)(1)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110110 (0)(1)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110111 (0)(1)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111000 (0)(1)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111001 (0)(1)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111010 (0)(1)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111011 (0)(1)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111100 (0)(1)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111101 (0)(1)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111110 (0)(1)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111111 (0)(1)(1)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000000 (1)(0)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000001 (1)(0)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000010 (1)(0)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000011 (1)(0)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000100 (1)(0)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000101 (1)(0)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000110 (1)(0)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000111 (1)(0)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001000 (1)(0)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001001 (1)(0)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001010 (1)(0)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001011 (1)(0)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001100 (1)(0)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001101 (1)(0)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001110 (1)(0)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001111 (1)(0)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010000 (1)(0)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010001 (1)(0)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010010 (1)(0)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010011 (1)(0)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010100 (1)(0)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010101 (1)(0)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010110 (1)(0)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010111 (1)(0)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011000 (1)(0)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011001 (1)(0)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011010 (1)(0)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011011 (1)(0)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011100 (1)(0)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011101 (1)(0)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011110 (1)(0)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011111 (1)(0)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100000 (1)(0)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100001 (1)(0)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100010 (1)(0)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100011 (1)(0)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100100 (1)(0)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100101 (1)(0)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100110 (1)(0)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100111 (1)(0)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101000 (1)(0)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101001 (1)(0)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101010 (1)(0)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101011 (1)(0)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101100 (1)(0)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101101 (1)(0)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101110 (1)(0)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101111 (1)(0)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110000 (1)(0)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110001 (1)(0)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110010 (1)(0)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110011 (1)(0)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110100 (1)(0)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110101 (1)(0)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110110 (1)(0)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110111 (1)(0)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111000 (1)(0)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111001 (1)(0)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111010 (1)(0)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111011 (1)(0)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111100 (1)(0)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111101 (1)(0)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111110 (1)(0)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111111 (1)(0)(1)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000000 (1)(1)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000001 (1)(1)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000010 (1)(1)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000011 (1)(1)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000100 (1)(1)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000101 (1)(1)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000110 (1)(1)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000111 (1)(1)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001000 (1)(1)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001001 (1)(1)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001010 (1)(1)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001011 (1)(1)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001100 (1)(1)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001101 (1)(1)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001110 (1)(1)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001111 (1)(1)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010000 (1)(1)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010001 (1)(1)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010010 (1)(1)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010011 (1)(1)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010100 (1)(1)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010101 (1)(1)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010110 (1)(1)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010111 (1)(1)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011000 (1)(1)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011001 (1)(1)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011010 (1)(1)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011011 (1)(1)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011100 (1)(1)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011101 (1)(1)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011110 (1)(1)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011111 (1)(1)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100000 (1)(1)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100001 (1)(1)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100010 (1)(1)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100011 (1)(1)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100100 (1)(1)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100101 (1)(1)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100110 (1)(1)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100111 (1)(1)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101000 (1)(1)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101001 (1)(1)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101010 (1)(1)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101011 (1)(1)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101100 (1)(1)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101101 (1)(1)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101110 (1)(1)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101111 (1)(1)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110000 (1)(1)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110001 (1)(1)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110010 (1)(1)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110011 (1)(1)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110100 (1)(1)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110101 (1)(1)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110110 (1)(1)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110111 (1)(1)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111000 (1)(1)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111001 (1)(1)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111010 (1)(1)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111011 (1)(1)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111100 (1)(1)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111101 (1)(1)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111110 (1)(1)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111111 (1)(1)(1)(1)(1)(1)(1)(1), \n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/compare_pointees.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP\n#define BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP\n\n#include<functional>\n\nnamespace boost {\n\n// template<class OP> bool equal_pointees(OP const& x, OP const& y);\n// template<class OP> struct equal_pointees_t;\n//\n// Being OP a model of OptionalPointee (either a pointer or an optional):\n//\n// If both x and y have valid pointees, returns the result of (*x == *y)\n// If only one has a valid pointee, returns false.\n// If none have valid pointees, returns true.\n// No-throw\ntemplate<class OptionalPointee>\ninline\nbool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y )\n{\n  return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;\n}\n\ntemplate<class OptionalPointee>\nstruct equal_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>\n{\n  bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const\n    { return equal_pointees(x,y) ; }\n} ;\n\n// template<class OP> bool less_pointees(OP const& x, OP const& y);\n// template<class OP> struct less_pointees_t;\n//\n// Being OP a model of OptionalPointee (either a pointer or an optional):\n//\n// If y has not a valid pointee, returns false.\n// ElseIf x has not a valid pointee, returns true.\n// ElseIf both x and y have valid pointees, returns the result of (*x < *y)\n// No-throw\ntemplate<class OptionalPointee>\ninline\nbool less_pointees ( OptionalPointee const& x, OptionalPointee const& y )\n{\n  return !y ? false : ( !x ? true : (*x) < (*y) ) ;\n}\n\ntemplate<class OptionalPointee>\nstruct less_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>\n{\n  bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const\n    { return less_pointees(x,y) ; }\n} ;\n\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/declval.hpp",
    "content": "//  declval.hpp  -------------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n#ifndef BOOST_UTILITY_DECLVAL_HPP\n#define BOOST_UTILITY_DECLVAL_HPP\n\n#include <boost/type_traits/declval.hpp>\n\n#endif  // BOOST_UTILITY_DECLVAL_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/detail/in_place_factory_prefix.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n// Copyright (C) 2007, Tobias Schwinger.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_04APR2007_HPP\n#define BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_04APR2007_HPP\n\n#include <new>\n#include <cstddef>\n#include <boost/config.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/punctuation/paren.hpp>\n#include <boost/preprocessor/iteration/iterate.hpp>\n#include <boost/preprocessor/repetition/repeat.hpp>\n#include <boost/preprocessor/repetition/enum.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/enum_binary_params.hpp>\n#include <boost/preprocessor/repetition/enum_trailing_params.hpp>\n\n#define BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT(z,n,_) BOOST_PP_CAT(m_a,n) BOOST_PP_LPAREN() BOOST_PP_CAT(a,n) BOOST_PP_RPAREN()\n#define BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL(z,n,_) BOOST_PP_CAT(A,n) const& BOOST_PP_CAT(m_a,n);\n\n#define BOOST_MAX_INPLACE_FACTORY_ARITY 10\n\n#undef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_04APR2007_HPP\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/detail/in_place_factory_suffix.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n// Copyright (C) 2007, Tobias Schwinger.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_04APR2007_HPP\n#define BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_04APR2007_HPP\n\n#undef BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT\n#undef BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL\n#undef BOOST_MAX_INPLACE_FACTORY_ARITY\n\n#undef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_04APR2007_HPP\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/detail/result_of_iterate.hpp",
    "content": "// Boost result_of library\n\n//  Copyright Douglas Gregor 2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  Copyright Daniel Walker, Eric Niebler, Michel Morin 2008-2012.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or\n//  copy at http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org/libs/utility\n#if !defined(BOOST_PP_IS_ITERATING)\n# error Boost result_of - do not include this file!\n#endif\n\n// CWPro8 requires an argument in a function type specialization\n#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3002)) && BOOST_PP_ITERATION() == 0\n# define BOOST_RESULT_OF_ARGS void\n#else\n# define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)\n#endif\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\ntemplate<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct tr1_result_of<F(BOOST_RESULT_OF_ARGS)>\n    : mpl::if_<\n          mpl::or_< is_pointer<F>, is_member_function_pointer<F> >\n        , boost::detail::tr1_result_of_impl<\n            typename remove_cv<F>::type,\n            typename remove_cv<F>::type(BOOST_RESULT_OF_ARGS),\n            (boost::detail::has_result_type<F>::value)>\n        , boost::detail::tr1_result_of_impl<\n            F,\n            F(BOOST_RESULT_OF_ARGS),\n            (boost::detail::has_result_type<F>::value)> >::type { };\n#endif\n\n#ifdef BOOST_RESULT_OF_USE_DECLTYPE\ntemplate<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct result_of<F(BOOST_RESULT_OF_ARGS)>\n    : detail::cpp0x_result_of<F(BOOST_RESULT_OF_ARGS)> { };\n#endif // BOOST_RESULT_OF_USE_DECLTYPE\n\n#ifdef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK\ntemplate<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct result_of<F(BOOST_RESULT_OF_ARGS)>\n    : mpl::if_<mpl::or_<detail::has_result_type<F>, detail::has_result<F> >,\n               tr1_result_of<F(BOOST_RESULT_OF_ARGS)>,\n               detail::cpp0x_result_of<F(BOOST_RESULT_OF_ARGS)> >::type { };\n#endif // BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK\n\n#if defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK)\n\nnamespace detail {\n\ntemplate<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct cpp0x_result_of<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))>\n    : mpl::if_<\n          is_member_function_pointer<F>\n        , detail::tr1_result_of_impl<\n            typename remove_cv<F>::type,\n            typename remove_cv<F>::type(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), false\n          >\n        , detail::cpp0x_result_of_impl<\n              F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))\n          >\n      >::type\n{};\n\n#ifdef BOOST_NO_SFINAE_EXPR\n\ntemplate<typename F>\nstruct BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION());\n\ntemplate<typename R BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), typename T)>\nstruct BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION())<R(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T))> {\n    R operator()(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)) const;\n    typedef result_of_private_type const &(*pfn_t)(...);\n    operator pfn_t() const volatile;\n};\n\ntemplate<typename F>\nstruct BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION());\n\ntemplate<typename F>\nstruct BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION())<F *>\n  : BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION())<F>\n{};\n\ntemplate<typename F>\nstruct BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION())<F &>\n  : BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION())<F>\n{};\n\ntemplate<typename F>\nstruct BOOST_PP_CAT(result_of_select_call_wrapper_type_, BOOST_PP_ITERATION())\n  : mpl::eval_if<\n        is_class<typename remove_reference<F>::type>,\n        result_of_wrap_callable_class<F>,\n        mpl::identity<BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION())<typename remove_cv<F>::type> >\n    >\n{};\n\ntemplate<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), typename T)>\nstruct BOOST_PP_CAT(result_of_is_callable_, BOOST_PP_ITERATION()) {\n    typedef typename BOOST_PP_CAT(result_of_select_call_wrapper_type_, BOOST_PP_ITERATION())<F>::type wrapper_t;\n    static const bool value = (\n        sizeof(result_of_no_type) == sizeof(detail::result_of_is_private_type(\n            (boost::declval<wrapper_t>()(BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), boost::declval<T, >() BOOST_PP_INTERCEPT)), result_of_weird_type())\n        ))\n    );\n    typedef mpl::bool_<value> type;\n};\n\ntemplate<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), true>\n    : lazy_enable_if<\n          BOOST_PP_CAT(result_of_is_callable_, BOOST_PP_ITERATION())<F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), T)>\n        , cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), false>\n      >\n{};\n\ntemplate<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), false>\n{\n  typedef decltype(\n    boost::declval<F>()(\n      BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), boost::declval<T, >() BOOST_PP_INTERCEPT)\n    )\n  ) type;\n};\n\n#else // BOOST_NO_SFINAE_EXPR\n\ntemplate<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)),\n                            typename result_of_always_void<decltype(\n                                boost::declval<F>()(\n                                    BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), boost::declval<T, >() BOOST_PP_INTERCEPT)\n                                )\n                            )>::type> {\n  typedef decltype(\n    boost::declval<F>()(\n      BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), boost::declval<T, >() BOOST_PP_INTERCEPT)\n    )\n  ) type;\n};\n\n#endif // BOOST_NO_SFINAE_EXPR\n\n} // namespace detail\n\n#else // defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK)\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\ntemplate<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct result_of<F(BOOST_RESULT_OF_ARGS)>\n    : tr1_result_of<F(BOOST_RESULT_OF_ARGS)> { };\n#endif\n\n#endif // defined(BOOST_RESULT_OF_USE_DECLTYPE)\n\n#undef BOOST_RESULT_OF_ARGS\n\n#if BOOST_PP_ITERATION() >= 1\n\nnamespace detail {\n\ntemplate<typename R,  typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct tr1_result_of_impl<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>\n{\n  typedef R type;\n};\n\ntemplate<typename R,  typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct tr1_result_of_impl<R (&)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>\n{\n  typedef R type;\n};\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\ntemplate<typename R, typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct tr1_result_of_impl<R (T0::*)\n                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T)),\n                 FArgs, false>\n{\n  typedef R type;\n};\n\ntemplate<typename R, typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct tr1_result_of_impl<R (T0::*)\n                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))\n                     const,\n                 FArgs, false>\n{\n  typedef R type;\n};\n\ntemplate<typename R, typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct tr1_result_of_impl<R (T0::*)\n                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))\n                     volatile,\n                 FArgs, false>\n{\n  typedef R type;\n};\n\ntemplate<typename R, typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>\nstruct tr1_result_of_impl<R (T0::*)\n                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))\n                     const volatile,\n                 FArgs, false>\n{\n  typedef R type;\n};\n#endif\n\n}\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/empty_deleter.hpp",
    "content": "/*\n *          Copyright Andrey Semashev 2007 - 2013.\n * Distributed under the Boost Software License, Version 1.0.\n *    (See accompanying file LICENSE_1_0.txt or copy at\n *          http://www.boost.org/LICENSE_1_0.txt)\n */\n\n/*!\n * \\file   empty_deleter.hpp\n * \\author Andrey Semashev\n * \\date   22.04.2007\n *\n * This header contains an \\c empty_deleter implementation. This is an empty\n * function object that receives a pointer and does nothing with it.\n * Such empty deletion strategy may be convenient, for example, when\n * constructing <tt>shared_ptr</tt>s that point to some object that should not be\n * deleted (i.e. a variable on the stack or some global singleton, like <tt>std::cout</tt>).\n */\n\n#ifndef BOOST_UTILITY_EMPTY_DELETER_HPP\n#define BOOST_UTILITY_EMPTY_DELETER_HPP\n\n#include <boost/config.hpp>\n#include <boost/core/null_deleter.hpp>\n\n#ifdef BOOST_HAS_PRAGMA_ONCE\n#pragma once\n#endif\n\n#if defined(__GNUC__)\n#pragma message \"This header is deprecated, use boost/core/null_deleter.hpp instead.\"\n#elif defined(_MSC_VER)\n#pragma message(\"This header is deprecated, use boost/core/null_deleter.hpp instead.\")\n#endif\n\nnamespace boost {\n\n//! A deprecated name for \\c null_deleter\ntypedef null_deleter empty_deleter;\n\n} // namespace boost\n\n#endif // BOOST_UTILITY_EMPTY_DELETER_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/enable_if.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Fernandes\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_UTILITY_ENABLE_IF_HPP\n#define BOOST_UTILITY_ENABLE_IF_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/enable_if.hpp instead.\n\n#include <boost/core/enable_if.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/explicit_operator_bool.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Fernandes\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_UTILITY_EXPLICIT_OPERATOR_BOOL_HPP\n#define BOOST_UTILITY_EXPLICIT_OPERATOR_BOOL_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/explicit_operator_bool.hpp instead.\n\n#include <boost/core/explicit_operator_bool.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/identity_type.hpp",
    "content": "\n// Copyright (C) 2009-2012 Lorenzo Caminiti\n// Distributed under the Boost Software License, Version 1.0\n// (see accompanying file LICENSE_1_0.txt or a copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n// Home at http://www.boost.org/libs/utility/identity_type\n\n/** @file\nWrap type expressions with round parenthesis so they can be passed to macros\neven if they contain commas.\n*/\n\n#ifndef BOOST_IDENTITY_TYPE_HPP_\n#define BOOST_IDENTITY_TYPE_HPP_\n\n#include <boost/type_traits/function_traits.hpp>\n\n/**\n@brief This macro allows to wrap the specified type expression within extra\nround parenthesis so the type can be passed as a single macro parameter even if\nit contains commas (not already wrapped within round parenthesis).\n\n@Params\n@Param{parenthesized_type,\nThe type expression to be passed as macro parameter wrapped by a single set\nof round parenthesis <c>(...)</c>.\nThis type expression can contain an arbitrary number of commas.\n}\n@EndParams\n\nThis macro works on any C++03 compiler (it does not use variadic macros).\n\nThis macro must be prefixed by <c>typename</c> when used within templates.\nNote that the compiler will not be able to automatically determine function\ntemplate parameters when they are wrapped with this macro (these parameters\nneed to be explicitly specified when calling the function template).\n\nOn some compilers (like GCC), using this macro on abstract types requires to\nadd and remove a reference to the specified type.\n*/\n#define BOOST_IDENTITY_TYPE(parenthesized_type) \\\n    /* must NOT prefix this with `::` to work with parenthesized syntax */ \\\n    boost::function_traits< void parenthesized_type >::arg1_type\n\n#endif // #include guard\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/in_place_factory.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n// Copyright (C) 2007, Tobias Schwinger.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP\n#ifndef BOOST_PP_IS_ITERATING\n\n#include <boost/utility/detail/in_place_factory_prefix.hpp>\n\nnamespace boost {\n\nclass in_place_factory_base {} ;\n\n#define  BOOST_PP_ITERATION_LIMITS (0, BOOST_MAX_INPLACE_FACTORY_ARITY)\n#define  BOOST_PP_FILENAME_1 <boost/utility/in_place_factory.hpp>\n#include BOOST_PP_ITERATE()\n\n} // namespace boost\n\n#include <boost/utility/detail/in_place_factory_suffix.hpp>\n\n#define BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP\n#else\n#define N BOOST_PP_ITERATION()\n\n#if N\ntemplate< BOOST_PP_ENUM_PARAMS(N, class A) >\n#endif\nclass BOOST_PP_CAT(in_place_factory,N)\n  : \n  public in_place_factory_base\n{\npublic:\n\n  explicit BOOST_PP_CAT(in_place_factory,N)\n      ( BOOST_PP_ENUM_BINARY_PARAMS(N,A,const& a) )\n#if N > 0\n    : BOOST_PP_ENUM(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT, _)\n#endif\n  {}\n\n  template<class T>\n  void* apply(void* address) const\n  {\n    return new(address) T( BOOST_PP_ENUM_PARAMS(N, m_a) );\n  }\n\n  template<class T>\n  void* apply(void* address, std::size_t n) const\n  {\n    for(char* next = address = this->BOOST_NESTED_TEMPLATE apply<T>(address);\n        !! --n;)\n      this->BOOST_NESTED_TEMPLATE apply<T>(next = next+sizeof(T));\n    return address; \n  }\n\n  BOOST_PP_REPEAT(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL, _)\n};\n\n#if N > 0\ntemplate< BOOST_PP_ENUM_PARAMS(N, class A) >\ninline BOOST_PP_CAT(in_place_factory,N)< BOOST_PP_ENUM_PARAMS(N, A) >\nin_place( BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& a) )\n{\n  return BOOST_PP_CAT(in_place_factory,N)< BOOST_PP_ENUM_PARAMS(N, A) >\n      ( BOOST_PP_ENUM_PARAMS(N, a) );\n}\n#else\ninline in_place_factory0 in_place()\n{\n  return in_place_factory0();\n}\n#endif\n\n#undef N\n#endif\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/result_of.hpp",
    "content": "// Boost result_of library\n\n//  Copyright Douglas Gregor 2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org/libs/utility\n#ifndef BOOST_RESULT_OF_HPP\n#define BOOST_RESULT_OF_HPP\n\n#include <boost/config.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/iteration/iterate.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/enum_trailing_params.hpp>\n#include <boost/preprocessor/repetition/enum_binary_params.hpp>\n#include <boost/preprocessor/repetition/enum_shifted_params.hpp>\n#include <boost/preprocessor/facilities/intercept.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/mpl/has_xxx.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/or.hpp>\n#include <boost/type_traits/is_class.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_member_function_pointer.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/utility/declval.hpp>\n#include <boost/utility/enable_if.hpp>\n\n#ifndef BOOST_RESULT_OF_NUM_ARGS\n#  define BOOST_RESULT_OF_NUM_ARGS 16\n#endif\n\n// Use the decltype-based version of result_of by default if the compiler\n// supports N3276 <http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf>.\n// The user can force the choice by defining BOOST_RESULT_OF_USE_DECLTYPE,\n// BOOST_RESULT_OF_USE_TR1, or BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK but not more than one!\n#if (defined(BOOST_RESULT_OF_USE_DECLTYPE) && defined(BOOST_RESULT_OF_USE_TR1)) || \\\n    (defined(BOOST_RESULT_OF_USE_DECLTYPE) && defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK)) || \\\n    (defined(BOOST_RESULT_OF_USE_TR1) && defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK))\n#  error More than one of BOOST_RESULT_OF_USE_DECLTYPE, BOOST_RESULT_OF_USE_TR1 and \\\n  BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK cannot be defined at the same time.\n#endif\n\n#if defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK) && defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE)\n#  error Cannot fallback to decltype if BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE is not defined.\n#endif\n\n#ifndef BOOST_RESULT_OF_USE_TR1\n#  ifndef BOOST_RESULT_OF_USE_DECLTYPE\n#    ifndef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK\n#      ifndef BOOST_NO_CXX11_DECLTYPE_N3276 // this implies !defined(BOOST_NO_CXX11_DECLTYPE)\n#        define BOOST_RESULT_OF_USE_DECLTYPE\n#      else\n#        define BOOST_RESULT_OF_USE_TR1\n#      endif\n#    endif\n#  endif\n#endif\n\nnamespace boost {\n\ntemplate<typename F> struct result_of;\ntemplate<typename F> struct tr1_result_of; // a TR1-style implementation of result_of\n\n#if !defined(BOOST_NO_SFINAE)\nnamespace detail {\n\nBOOST_MPL_HAS_XXX_TRAIT_DEF(result_type)\n\n// Work around a nvcc bug by only defining has_result when it's needed.\n#ifdef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK\nBOOST_MPL_HAS_XXX_TEMPLATE_DEF(result)\n#endif\n\ntemplate<typename F, typename FArgs, bool HasResultType> struct tr1_result_of_impl;\n\ntemplate<typename F> struct cpp0x_result_of;\n\n#ifdef BOOST_NO_SFINAE_EXPR\n\n// There doesn't seem to be any other way to turn this off such that the presence of\n// the user-defined operator,() below doesn't cause spurious warning all over the place,\n// so unconditionally turn it off.\n#if BOOST_MSVC\n#  pragma warning(disable: 4913) // user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used\n#endif\n\nstruct result_of_private_type {};\n\nstruct result_of_weird_type {\n  friend result_of_private_type operator,(result_of_private_type, result_of_weird_type);\n};\n\ntypedef char result_of_yes_type;      // sizeof(result_of_yes_type) == 1\ntypedef char (&result_of_no_type)[2]; // sizeof(result_of_no_type)  == 2\n\ntemplate<typename T>\nresult_of_no_type result_of_is_private_type(T const &);\nresult_of_yes_type result_of_is_private_type(result_of_private_type);\n\ntemplate<typename C>\nstruct result_of_callable_class : C {\n    result_of_callable_class();\n    typedef result_of_private_type const &(*pfn_t)(...);\n    operator pfn_t() const volatile;\n};\n\ntemplate<typename C>\nstruct result_of_wrap_callable_class {\n  typedef result_of_callable_class<C> type;\n};\n\ntemplate<typename C>\nstruct result_of_wrap_callable_class<C const> {\n  typedef result_of_callable_class<C> const type;\n};\n\ntemplate<typename C>\nstruct result_of_wrap_callable_class<C volatile> {\n  typedef result_of_callable_class<C> volatile type;\n};\n\ntemplate<typename C>\nstruct result_of_wrap_callable_class<C const volatile> {\n  typedef result_of_callable_class<C> const volatile type;\n};\n\ntemplate<typename C>\nstruct result_of_wrap_callable_class<C &> {\n  typedef typename result_of_wrap_callable_class<C>::type &type;\n};\n\ntemplate<typename F, bool TestCallability = true> struct cpp0x_result_of_impl;\n\n#else // BOOST_NO_SFINAE_EXPR\n\ntemplate<typename T>\nstruct result_of_always_void\n{\n  typedef void type;\n};\n\ntemplate<typename F, typename Enable = void> struct cpp0x_result_of_impl {};\n\n#endif // BOOST_NO_SFINAE_EXPR\n\ntemplate<typename F>\nstruct result_of_void_impl\n{\n  typedef void type;\n};\n\ntemplate<typename R>\nstruct result_of_void_impl<R (*)(void)>\n{\n  typedef R type;\n};\n\ntemplate<typename R>\nstruct result_of_void_impl<R (&)(void)>\n{\n  typedef R type;\n};\n\n// Determine the return type of a function pointer or pointer to member.\ntemplate<typename F, typename FArgs>\nstruct result_of_pointer\n  : tr1_result_of_impl<typename remove_cv<F>::type, FArgs, false> { };\n\ntemplate<typename F, typename FArgs>\nstruct tr1_result_of_impl<F, FArgs, true>\n{\n  typedef typename F::result_type type;\n};\n\ntemplate<typename FArgs>\nstruct is_function_with_no_args : mpl::false_ {};\n\ntemplate<typename F>\nstruct is_function_with_no_args<F(void)> : mpl::true_ {};\n\ntemplate<typename F, typename FArgs>\nstruct result_of_nested_result : F::template result<FArgs>\n{};\n\ntemplate<typename F, typename FArgs>\nstruct tr1_result_of_impl<F, FArgs, false>\n  : mpl::if_<is_function_with_no_args<FArgs>,\n             result_of_void_impl<F>,\n             result_of_nested_result<F, FArgs> >::type\n{};\n\n} // end namespace detail\n\n#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_RESULT_OF_NUM_ARGS,<boost/utility/detail/result_of_iterate.hpp>))\n#include BOOST_PP_ITERATE()\n\n#else\n#  define BOOST_NO_RESULT_OF 1\n#endif\n\n}\n\n#endif // BOOST_RESULT_OF_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/string_ref.hpp",
    "content": "/*\n   Copyright (c) Marshall Clow 2012-2015.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n    For more information, see http://www.boost.org\n\n    Based on the StringRef implementation in LLVM (http://llvm.org) and\n    N3422 by Jeffrey Yasskin\n        http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html\n\n*/\n\n#ifndef BOOST_STRING_REF_HPP\n#define BOOST_STRING_REF_HPP\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/utility/string_ref_fwd.hpp>\n#include <boost/throw_exception.hpp>\n\n#include <cstddef>\n#include <stdexcept>\n#include <algorithm>\n#include <iterator>\n#include <string>\n#include <iosfwd>\n\nnamespace boost {\n\n    namespace detail {\n    //  A helper functor because sometimes we don't have lambdas\n        template <typename charT, typename traits>\n        class string_ref_traits_eq {\n        public:\n            string_ref_traits_eq ( charT ch ) : ch_(ch) {}\n            bool operator () ( charT val ) const { return traits::eq ( ch_, val ); }\n            charT ch_;\n            };\n        }\n\n    template<typename charT, typename traits>\n    class basic_string_ref {\n    public:\n        // types\n        typedef charT value_type;\n        typedef const charT* pointer;\n        typedef const charT& reference;\n        typedef const charT& const_reference;\n        typedef pointer const_iterator; // impl-defined\n        typedef const_iterator iterator;\n        typedef std::reverse_iterator<const_iterator> const_reverse_iterator;\n        typedef const_reverse_iterator reverse_iterator;\n        typedef std::size_t size_type;\n        typedef std::ptrdiff_t difference_type;\n        static BOOST_CONSTEXPR_OR_CONST size_type npos = size_type(-1);\n\n        // construct/copy\n        BOOST_CONSTEXPR basic_string_ref ()\n            : ptr_(NULL), len_(0) {}\n\n        BOOST_CONSTEXPR basic_string_ref (const basic_string_ref &rhs)\n            : ptr_(rhs.ptr_), len_(rhs.len_) {}\n\n        basic_string_ref& operator=(const basic_string_ref &rhs) {\n            ptr_ = rhs.ptr_;\n            len_ = rhs.len_;\n            return *this;\n            }\n\n        basic_string_ref(const charT* str)\n            : ptr_(str), len_(traits::length(str)) {}\n\n        template<typename Allocator>\n        basic_string_ref(const std::basic_string<charT, traits, Allocator>& str)\n            : ptr_(str.data()), len_(str.length()) {}\n\n        BOOST_CONSTEXPR basic_string_ref(const charT* str, size_type len)\n            : ptr_(str), len_(len) {}\n\n#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n        template<typename Allocator>\n        explicit operator std::basic_string<charT, traits, Allocator>() const {\n            return std::basic_string<charT, traits, Allocator> ( begin(), end());\n            }\n#endif\n\n        std::basic_string<charT, traits> to_string () const {\n            return std::basic_string<charT, traits> ( begin(), end());\n            }\n\n        // iterators\n        BOOST_CONSTEXPR const_iterator   begin() const { return ptr_; }\n        BOOST_CONSTEXPR const_iterator  cbegin() const { return ptr_; }\n        BOOST_CONSTEXPR const_iterator     end() const { return ptr_ + len_; }\n        BOOST_CONSTEXPR const_iterator    cend() const { return ptr_ + len_; }\n                const_reverse_iterator  rbegin() const { return const_reverse_iterator (end()); }\n                const_reverse_iterator crbegin() const { return const_reverse_iterator (end()); }\n                const_reverse_iterator    rend() const { return const_reverse_iterator (begin()); }\n                const_reverse_iterator   crend() const { return const_reverse_iterator (begin()); }\n\n        // capacity\n        BOOST_CONSTEXPR size_type size()     const { return len_; }\n        BOOST_CONSTEXPR size_type length()   const { return len_; }\n        BOOST_CONSTEXPR size_type max_size() const { return len_; }\n        BOOST_CONSTEXPR bool empty()         const { return len_ == 0; }\n\n        // element access\n        BOOST_CONSTEXPR const charT& operator[](size_type pos) const { return ptr_[pos]; }\n\n        const charT& at(size_t pos) const {\n            if ( pos >= len_ )\n                BOOST_THROW_EXCEPTION( std::out_of_range ( \"boost::string_ref::at\" ) );\n            return ptr_[pos];\n            }\n\n        BOOST_CONSTEXPR const charT& front() const { return ptr_[0]; }\n        BOOST_CONSTEXPR const charT& back()  const { return ptr_[len_-1]; }\n        BOOST_CONSTEXPR const charT* data()  const { return ptr_; }\n\n        // modifiers\n        void clear() { len_ = 0; }\n        void remove_prefix(size_type n) {\n            if ( n > len_ )\n                n = len_;\n            ptr_ += n;\n            len_ -= n;\n            }\n\n        void remove_suffix(size_type n) {\n            if ( n > len_ )\n                n = len_;\n            len_ -= n;\n            }\n\n\n        // basic_string_ref string operations\n        basic_string_ref substr(size_type pos, size_type n=npos) const {\n            if ( pos > size())\n                BOOST_THROW_EXCEPTION( std::out_of_range ( \"string_ref::substr\" ) );\n            if ( n == npos || pos + n > size())\n                n = size () - pos;\n            return basic_string_ref ( data() + pos, n );\n            }\n\n        int compare(basic_string_ref x) const {\n            const int cmp = traits::compare ( ptr_, x.ptr_, (std::min)(len_, x.len_));\n            return cmp != 0 ? cmp : ( len_ == x.len_ ? 0 : len_ < x.len_ ? -1 : 1 );\n            }\n\n        bool starts_with(charT c) const { return !empty() && traits::eq ( c, front()); }\n        bool starts_with(basic_string_ref x) const {\n            return len_ >= x.len_ && traits::compare ( ptr_, x.ptr_, x.len_ ) == 0;\n            }\n\n        bool ends_with(charT c) const { return !empty() && traits::eq ( c, back()); }\n        bool ends_with(basic_string_ref x) const {\n            return len_ >= x.len_ && traits::compare ( ptr_ + len_ - x.len_, x.ptr_, x.len_ ) == 0;\n            }\n\n        size_type find(basic_string_ref s) const {\n            const_iterator iter = std::search ( this->cbegin (), this->cend (),\n                                                s.cbegin (), s.cend (), traits::eq );\n            return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter );\n            }\n\n        size_type find(charT c) const {\n            const_iterator iter = std::find_if ( this->cbegin (), this->cend (),\n                                    detail::string_ref_traits_eq<charT, traits> ( c ));\n            return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter );\n            }\n\n        size_type rfind(basic_string_ref s) const {\n            const_reverse_iterator iter = std::search ( this->crbegin (), this->crend (),\n                                                s.crbegin (), s.crend (), traits::eq );\n            return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter );\n            }\n\n        size_type rfind(charT c) const {\n            const_reverse_iterator iter = std::find_if ( this->crbegin (), this->crend (),\n                                    detail::string_ref_traits_eq<charT, traits> ( c ));\n            return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter );\n            }\n\n        size_type find_first_of(charT c) const { return  find (c); }\n        size_type find_last_of (charT c) const { return rfind (c); }\n\n        size_type find_first_of(basic_string_ref s) const {\n            const_iterator iter = std::find_first_of\n                ( this->cbegin (), this->cend (), s.cbegin (), s.cend (), traits::eq );\n            return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter );\n            }\n\n        size_type find_last_of(basic_string_ref s) const {\n            const_reverse_iterator iter = std::find_first_of\n                ( this->crbegin (), this->crend (), s.cbegin (), s.cend (), traits::eq );\n            return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter);\n            }\n\n        size_type find_first_not_of(basic_string_ref s) const {\n            const_iterator iter = find_not_of ( this->cbegin (), this->cend (), s );\n            return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter );\n            }\n\n        size_type find_first_not_of(charT c) const {\n            for ( const_iterator iter = this->cbegin (); iter != this->cend (); ++iter )\n                if ( !traits::eq ( c, *iter ))\n                    return std::distance ( this->cbegin (), iter );\n            return npos;\n            }\n\n        size_type find_last_not_of(basic_string_ref s) const {\n            const_reverse_iterator iter = find_not_of ( this->crbegin (), this->crend (), s );\n            return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter );\n            }\n\n        size_type find_last_not_of(charT c) const {\n            for ( const_reverse_iterator iter = this->crbegin (); iter != this->crend (); ++iter )\n                if ( !traits::eq ( c, *iter ))\n                    return reverse_distance ( this->crbegin (), iter );\n            return npos;\n            }\n\n    private:\n        template <typename r_iter>\n        size_type reverse_distance ( r_iter first, r_iter last ) const {\n            return len_ - 1 - std::distance ( first, last );\n            }\n\n        template <typename Iterator>\n        Iterator find_not_of ( Iterator first, Iterator last, basic_string_ref s ) const {\n            for ( ; first != last ; ++first )\n                if ( 0 == traits::find ( s.ptr_, s.len_, *first ))\n                    return first;\n            return last;\n            }\n\n\n\n        const charT *ptr_;\n        std::size_t len_;\n        };\n\n\n//  Comparison operators\n//  Equality\n    template<typename charT, typename traits>\n    inline bool operator==(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {\n        if ( x.size () != y.size ()) return false;\n        return x.compare(y) == 0;\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator==(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {\n        return x == basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator==(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) == y;\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator==(basic_string_ref<charT, traits> x, const charT * y) {\n        return x == basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator==(const charT * x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) == y;\n        }\n\n//  Inequality\n    template<typename charT, typename traits>\n    inline bool operator!=(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {\n        if ( x.size () != y.size ()) return true;\n        return x.compare(y) != 0;\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator!=(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {\n        return x != basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator!=(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) != y;\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator!=(basic_string_ref<charT, traits> x, const charT * y) {\n        return x != basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator!=(const charT * x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) != y;\n        }\n\n//  Less than\n    template<typename charT, typename traits>\n    inline bool operator<(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {\n        return x.compare(y) < 0;\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator<(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {\n        return x < basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator<(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) < y;\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator<(basic_string_ref<charT, traits> x, const charT * y) {\n        return x < basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator<(const charT * x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) < y;\n        }\n\n//  Greater than\n    template<typename charT, typename traits>\n    inline bool operator>(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {\n        return x.compare(y) > 0;\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator>(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {\n        return x > basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator>(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) > y;\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator>(basic_string_ref<charT, traits> x, const charT * y) {\n        return x > basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator>(const charT * x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) > y;\n        }\n\n//  Less than or equal to\n    template<typename charT, typename traits>\n    inline bool operator<=(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {\n        return x.compare(y) <= 0;\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator<=(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {\n        return x <= basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator<=(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) <= y;\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator<=(basic_string_ref<charT, traits> x, const charT * y) {\n        return x <= basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator<=(const charT * x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) <= y;\n        }\n\n//  Greater than or equal to\n    template<typename charT, typename traits>\n    inline bool operator>=(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {\n        return x.compare(y) >= 0;\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator>=(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {\n        return x >= basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits, typename Allocator>\n    inline bool operator>=(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) >= y;\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator>=(basic_string_ref<charT, traits> x, const charT * y) {\n        return x >= basic_string_ref<charT, traits>(y);\n        }\n\n    template<typename charT, typename traits>\n    inline bool operator>=(const charT * x, basic_string_ref<charT, traits> y) {\n        return basic_string_ref<charT, traits>(x) >= y;\n        }\n\n    namespace detail {\n\n        template<class charT, class traits>\n        inline void insert_fill_chars(std::basic_ostream<charT, traits>& os, std::size_t n) {\n            enum { chunk_size = 8 };\n            charT fill_chars[chunk_size];\n            std::fill_n(fill_chars, static_cast< std::size_t >(chunk_size), os.fill());\n            for (; n >= chunk_size && os.good(); n -= chunk_size)\n                os.write(fill_chars, static_cast< std::size_t >(chunk_size));\n            if (n > 0 && os.good())\n                os.write(fill_chars, n);\n            }\n\n        template<class charT, class traits>\n        void insert_aligned(std::basic_ostream<charT, traits>& os, const basic_string_ref<charT,traits>& str) {\n            const std::size_t size = str.size();\n            const std::size_t alignment_size = static_cast< std::size_t >(os.width()) - size;\n            const bool align_left = (os.flags() & std::basic_ostream<charT, traits>::adjustfield) == std::basic_ostream<charT, traits>::left;\n            if (!align_left) {\n                detail::insert_fill_chars(os, alignment_size);\n                if (os.good())\n                    os.write(str.data(), size);\n                }\n            else {\n                os.write(str.data(), size);\n                if (os.good())\n                    detail::insert_fill_chars(os, alignment_size);\n                }\n            }\n\n        } // namespace detail\n\n    // Inserter\n    template<class charT, class traits>\n    inline std::basic_ostream<charT, traits>&\n    operator<<(std::basic_ostream<charT, traits>& os, const basic_string_ref<charT,traits>& str) {\n        if (os.good()) {\n            const std::size_t size = str.size();\n            const std::size_t w = static_cast< std::size_t >(os.width());\n            if (w <= size)\n                os.write(str.data(), size);\n            else\n                detail::insert_aligned(os, str);\n            os.width(0);\n            }\n        return os;\n        }\n\n#if 0\n    // numeric conversions\n    //\n    //  These are short-term implementations.\n    //  In a production environment, I would rather avoid the copying.\n    //\n    inline int stoi (string_ref str, size_t* idx=0, int base=10) {\n        return std::stoi ( std::string(str), idx, base );\n        }\n\n    inline long stol (string_ref str, size_t* idx=0, int base=10) {\n        return std::stol ( std::string(str), idx, base );\n        }\n\n    inline unsigned long stoul (string_ref str, size_t* idx=0, int base=10) {\n        return std::stoul ( std::string(str), idx, base );\n        }\n\n    inline long long stoll (string_ref str, size_t* idx=0, int base=10) {\n        return std::stoll ( std::string(str), idx, base );\n        }\n\n    inline unsigned long long stoull (string_ref str, size_t* idx=0, int base=10) {\n        return std::stoull ( std::string(str), idx, base );\n        }\n\n    inline float stof (string_ref str, size_t* idx=0) {\n        return std::stof ( std::string(str), idx );\n        }\n\n    inline double stod (string_ref str, size_t* idx=0) {\n        return std::stod ( std::string(str), idx );\n        }\n\n    inline long double stold (string_ref str, size_t* idx=0)  {\n        return std::stold ( std::string(str), idx );\n        }\n\n    inline int  stoi (wstring_ref str, size_t* idx=0, int base=10) {\n        return std::stoi ( std::wstring(str), idx, base );\n        }\n\n    inline long stol (wstring_ref str, size_t* idx=0, int base=10) {\n        return std::stol ( std::wstring(str), idx, base );\n        }\n\n    inline unsigned long stoul (wstring_ref str, size_t* idx=0, int base=10) {\n        return std::stoul ( std::wstring(str), idx, base );\n        }\n\n    inline long long stoll (wstring_ref str, size_t* idx=0, int base=10) {\n        return std::stoll ( std::wstring(str), idx, base );\n        }\n\n    inline unsigned long long stoull (wstring_ref str, size_t* idx=0, int base=10) {\n        return std::stoull ( std::wstring(str), idx, base );\n        }\n\n    inline float  stof (wstring_ref str, size_t* idx=0) {\n        return std::stof ( std::wstring(str), idx );\n        }\n\n    inline double stod (wstring_ref str, size_t* idx=0) {\n        return std::stod ( std::wstring(str), idx );\n        }\n\n    inline long double stold (wstring_ref str, size_t* idx=0) {\n        return std::stold ( std::wstring(str), idx );\n        }\n#endif\n\n}\n\n#if 0\nnamespace std {\n    // Hashing\n    template<> struct hash<boost::string_ref>;\n    template<> struct hash<boost::u16string_ref>;\n    template<> struct hash<boost::u32string_ref>;\n    template<> struct hash<boost::wstring_ref>;\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/string_ref_fwd.hpp",
    "content": "/*\n   Copyright (c) Marshall Clow 2012-2012.\n\n   Distributed under the Boost Software License, Version 1.0. (See accompanying\n   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n    For more information, see http://www.boost.org\n\n    Based on the StringRef implementation in LLVM (http://llvm.org) and\n    N3422 by Jeffrey Yasskin\n        http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html\n\n*/\n\n#ifndef BOOST_STRING_REF_FWD_HPP\n#define BOOST_STRING_REF_FWD_HPP\n\n#include <boost/config.hpp>\n#include <string>\n\nnamespace boost {\n\n    template<typename charT, typename traits = std::char_traits<charT> > class basic_string_ref;\n    typedef basic_string_ref<char,     std::char_traits<char> >        string_ref;\n    typedef basic_string_ref<wchar_t,  std::char_traits<wchar_t> >    wstring_ref;\n\n#ifndef BOOST_NO_CXX11_CHAR16_T\n    typedef basic_string_ref<char16_t, std::char_traits<char16_t> > u16string_ref;\n#endif\n\n#ifndef BOOST_NO_CXX11_CHAR32_T\n    typedef basic_string_ref<char32_t, std::char_traits<char32_t> > u32string_ref;\n#endif\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/swap.hpp",
    "content": "/*\n * Copyright (c) 2014 Glen Fernandes\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n */\n\n#ifndef BOOST_UTILITY_SWAP_HPP\n#define BOOST_UTILITY_SWAP_HPP\n\n// The header file at this path is deprecated;\n// use boost/core/swap.hpp instead.\n\n#include <boost/core/swap.hpp>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/typed_in_place_factory.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n// Copyright (C) 2007, Tobias Schwinger.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_UTILITY_TYPED_INPLACE_FACTORY_04APR2007_HPP\n#ifndef BOOST_PP_IS_ITERATING\n\n#include <boost/utility/detail/in_place_factory_prefix.hpp>\n\nnamespace boost {\n\nclass typed_in_place_factory_base {} ;\n\n#define  BOOST_PP_ITERATION_LIMITS (0, BOOST_MAX_INPLACE_FACTORY_ARITY)\n#define  BOOST_PP_FILENAME_1 <boost/utility/typed_in_place_factory.hpp>\n#include BOOST_PP_ITERATE()\n\n} // namespace boost\n\n#include <boost/utility/detail/in_place_factory_suffix.hpp>\n\n#define BOOST_UTILITY_TYPED_INPLACE_FACTORY_04APR2007_HPP\n#else \n#define N BOOST_PP_ITERATION()\n\ntemplate< class T BOOST_PP_ENUM_TRAILING_PARAMS(N,class A) >\nclass BOOST_PP_CAT(typed_in_place_factory,N) \n  : \n  public typed_in_place_factory_base\n{\npublic:\n\n  typedef T value_type;\n\n  explicit BOOST_PP_CAT(typed_in_place_factory,N) \n      ( BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& a) )\n#if N > 0\n    : BOOST_PP_ENUM(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT, _)\n#endif\n  {}\n\n  void* apply (void* address) const\n  {\n    return new(address) T( BOOST_PP_ENUM_PARAMS(N, m_a) );\n  }\n\n  void* apply (void* address, std::size_t n) const\n  {\n    for(void* next = address = this->apply(address); !! --n;)\n      this->apply(next = static_cast<char *>(next) + sizeof(T));\n    return address; \n  }\n\n  BOOST_PP_REPEAT(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL, _)\n};\n\ntemplate< class T BOOST_PP_ENUM_TRAILING_PARAMS(N, class A) >\ninline BOOST_PP_CAT(typed_in_place_factory,N)<\n    T BOOST_PP_ENUM_TRAILING_PARAMS(N, A) >\nin_place( BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& a) )\n{\n  return BOOST_PP_CAT(typed_in_place_factory,N)< \n      T BOOST_PP_ENUM_TRAILING_PARAMS(N, A) >( BOOST_PP_ENUM_PARAMS(N, a) );\n}\n\n#undef N\n#endif\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility/value_init.hpp",
    "content": "// (C) Copyright 2002-2008, Fernando Luis Cacciola Carballal.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// 21 Ago 2002 (Created) Fernando Cacciola\n// 24 Dec 2007 (Refactored and worked around various compiler bugs) Fernando Cacciola, Niels Dekker\n// 23 May 2008 (Fixed operator= const issue, added initialized_value) Niels Dekker, Fernando Cacciola\n// 21 Ago 2008 (Added swap) Niels Dekker, Fernando Cacciola\n// 20 Feb 2009 (Fixed logical const-ness issues) Niels Dekker, Fernando Cacciola\n// 03 Apr 2010 (Added initialized<T>, suggested by Jeffrey Hellrung, fixing #3472) Niels Dekker\n// 30 May 2010 (Made memset call conditional, fixing #3869) Niels Dekker\n//\n#ifndef BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP\n#define BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP\n\n// Note: The implementation of boost::value_initialized had to deal with the\n// fact that various compilers haven't fully implemented value-initialization.\n// The constructor of boost::value_initialized<T> works around these compiler\n// issues, by clearing the bytes of T, before constructing the T object it\n// contains. More details on these issues are at libs/utility/value_init.htm\n\n#include <boost/aligned_storage.hpp>\n#include <boost/config.hpp> // For BOOST_NO_COMPLETE_VALUE_INITIALIZATION.\n#include <boost/detail/workaround.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/type_traits/cv_traits.hpp>\n#include <boost/type_traits/alignment_of.hpp>\n#include <boost/swap.hpp>\n#include <cstring>\n#include <new>\n\n#ifdef BOOST_MSVC\n#pragma warning(push)\n// It is safe to ignore the following warning from MSVC 7.1 or higher:\n// \"warning C4351: new behavior: elements of array will be default initialized\"\n#pragma warning(disable: 4351)\n// It is safe to ignore the following MSVC warning, which may pop up when T is \n// a const type: \"warning C4512: assignment operator could not be generated\".\n#pragma warning(disable: 4512)\n#endif\n\n#ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n  // Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED \n  // suggests that a workaround should be applied, because of compiler issues \n  // regarding value-initialization.\n  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED\n#endif\n\n// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND\n// switches the value-initialization workaround either on or off.\n#ifndef BOOST_DETAIL_VALUE_INIT_WORKAROUND\n  #ifdef BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED\n  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 1\n  #else\n  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 0\n  #endif\n#endif\n\nnamespace boost {\n\ntemplate<class T>\nclass initialized\n{\n  private :\n    struct wrapper\n    {\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))\n      typename\n#endif \n      remove_const<T>::type data;\n\n      BOOST_GPU_ENABLED\n      wrapper()\n      :\n      data()\n      {\n      }\n\n      BOOST_GPU_ENABLED\n      wrapper(T const & arg)\n      :\n      data(arg)\n      {\n      }\n    };\n\n    mutable\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))\n      typename\n#endif \n      aligned_storage<sizeof(wrapper), alignment_of<wrapper>::value>::type x;\n\n    BOOST_GPU_ENABLED\n    wrapper * wrapper_address() const\n    {\n      return static_cast<wrapper *>( static_cast<void*>(&x));\n    }\n\n  public :\n\n    BOOST_GPU_ENABLED\n    initialized()\n    {\n#if BOOST_DETAIL_VALUE_INIT_WORKAROUND\n      std::memset(&x, 0, sizeof(x));\n#endif\n      new (wrapper_address()) wrapper();\n    }\n\n    BOOST_GPU_ENABLED\n    initialized(initialized const & arg)\n    {\n      new (wrapper_address()) wrapper( static_cast<wrapper const &>(*(arg.wrapper_address())));\n    }\n\n    BOOST_GPU_ENABLED\n    explicit initialized(T const & arg)\n    {\n      new (wrapper_address()) wrapper(arg);\n    }\n\n    BOOST_GPU_ENABLED\n    initialized & operator=(initialized const & arg)\n    {\n      // Assignment is only allowed when T is non-const.\n      BOOST_STATIC_ASSERT( ! is_const<T>::value );\n      *wrapper_address() = static_cast<wrapper const &>(*(arg.wrapper_address()));\n      return *this;\n    }\n\n    BOOST_GPU_ENABLED\n    ~initialized()\n    {\n      wrapper_address()->wrapper::~wrapper();\n    }\n\n    BOOST_GPU_ENABLED\n    T const & data() const\n    {\n      return wrapper_address()->data;\n    }\n\n    BOOST_GPU_ENABLED\n    T& data()\n    {\n      return wrapper_address()->data;\n    }\n\n    BOOST_GPU_ENABLED\n    void swap(initialized & arg)\n    {\n      ::boost::swap( this->data(), arg.data() );\n    }\n\n    BOOST_GPU_ENABLED\n    operator T const &() const\n    {\n      return wrapper_address()->data;\n    }\n\n    BOOST_GPU_ENABLED\n    operator T&()\n    {\n      return wrapper_address()->data;\n    }\n\n} ;\n\ntemplate<class T>\nBOOST_GPU_ENABLED\nT const& get ( initialized<T> const& x )\n{\n  return x.data() ;\n}\n\ntemplate<class T>\nBOOST_GPU_ENABLED\nT& get ( initialized<T>& x )\n{\n  return x.data() ;\n}\n\ntemplate<class T>\nBOOST_GPU_ENABLED\nvoid swap ( initialized<T> & lhs, initialized<T> & rhs )\n{\n  lhs.swap(rhs) ;\n}\n\ntemplate<class T>\nclass value_initialized\n{\n  private :\n\n    // initialized<T> does value-initialization by default.\n    initialized<T> m_data;\n\n  public :\n    \n    BOOST_GPU_ENABLED\n    value_initialized()\n    :\n    m_data()\n    { }\n    \n    BOOST_GPU_ENABLED\n    T const & data() const\n    {\n      return m_data.data();\n    }\n\n    BOOST_GPU_ENABLED\n    T& data()\n    {\n      return m_data.data();\n    }\n\n    BOOST_GPU_ENABLED\n    void swap(value_initialized & arg)\n    {\n      m_data.swap(arg.m_data);\n    }\n\n    BOOST_GPU_ENABLED\n    operator T const &() const\n    {\n      return m_data;\n    }\n\n    BOOST_GPU_ENABLED\n    operator T&()\n    {\n      return m_data;\n    }\n} ;\n\n\ntemplate<class T>\nBOOST_GPU_ENABLED\nT const& get ( value_initialized<T> const& x )\n{\n  return x.data() ;\n}\n\ntemplate<class T>\nBOOST_GPU_ENABLED\nT& get ( value_initialized<T>& x )\n{\n  return x.data() ;\n}\n\ntemplate<class T>\nBOOST_GPU_ENABLED\nvoid swap ( value_initialized<T> & lhs, value_initialized<T> & rhs )\n{\n  lhs.swap(rhs) ;\n}\n\n\nclass initialized_value_t\n{\n  public :\n    \n    template <class T> BOOST_GPU_ENABLED operator T() const\n    {\n      return initialized<T>().data();\n    }\n};\n\ninitialized_value_t const initialized_value = {} ;\n\n\n} // namespace boost\n\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/utility.hpp",
    "content": "//  Boost utility.hpp header file  -------------------------------------------//\n\n//  Copyright 1999-2003 Aleksey Gurtovoy.  Use, modification, and distribution are\n//  subject to the Boost Software License, Version 1.0.  (See accompanying file\n//  LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)\n\n//  See <http://www.boost.org/libs/utility/> for the library's home page.\n\n#ifndef BOOST_UTILITY_HPP\n#define BOOST_UTILITY_HPP\n\n#include <boost/utility/addressof.hpp>\n#include <boost/utility/base_from_member.hpp>\n#include <boost/utility/binary.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/utility/identity_type.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/next_prior.hpp>\n#include <boost/noncopyable.hpp>\n\n#endif  // BOOST_UTILITY_HPP\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost/version.hpp",
    "content": "//  Boost version.hpp configuration header file  ------------------------------//\n\n//  (C) Copyright John maddock 1999. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/config for documentation\n\n#ifndef BOOST_VERSION_HPP\n#define BOOST_VERSION_HPP\n\n//\n//  Caution: this is the only Boost header that is guaranteed\n//  to change with every Boost release. Including this header\n//  will cause a recompile every time a new Boost version is\n//  used.\n//\n//  BOOST_VERSION % 100 is the patch level\n//  BOOST_VERSION / 100 % 1000 is the minor version\n//  BOOST_VERSION / 100000 is the major version\n\n#define BOOST_VERSION 106000\n\n//\n//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION\n//  but as a *string* in the form \"x_y[_z]\" where x is the major version\n//  number, y is the minor version number, and z is the patch level if not 0.\n//  This is used by <config/auto_link.hpp> to select which library version to link to.\n\n#define BOOST_LIB_VERSION \"1_60\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost.props",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup />\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)lib\\3rdParty\\boost;$(SolutionDir)lib\\3rdParty\\boost\\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(SolutionDir)lib\\3rdParty\\boost\\$(PlatformTarget)\\$(PlatformToolset)\\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>libboost_filesystem-vc$(PlatformToolsetVersion)-mt-1_60.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup />\n</Project>"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/boost/boost_d.props",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup />\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)lib\\3rdParty\\boost;$(SolutionDir)lib\\3rdParty\\boost\\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(SolutionDir)lib\\3rdParty\\boost\\$(PlatformTarget)\\$(PlatformToolset)\\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>libboost_filesystem-vc$(PlatformToolsetVersion)-mt-gd-1_60.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup />\n</Project>"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/CMakeLists.txt",
    "content": "#\n# This is a CMake makefile.  You can find the cmake utility and\n# information about it at http://www.cmake.org\n#\n\n# setting this makes CMake allow normal looking if else statements\nSET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)\n\ncmake_minimum_required(VERSION 2.4)\n\n# Suppress cmake warnings about changes in new versions.\nif(COMMAND cmake_policy) \n   cmake_policy(SET CMP0003 NEW) \nendif()\n\nadd_definitions(-DDLIB_HAVE_SSE2)\nadd_definitions(-DDLIB_HAVE_SSE3)\nadd_definitions(-DDLIB_HAVE_SSE41)\n\n# make macros that can add #define directives to the entire project.  Not just \n# to the dlib library itself.  I.e. to dlib and to any projects that depend\n# on dlib.\nmacro ( add_global_define def_name )\n   if (NOT CMAKE_CXX_FLAGS MATCHES \"-D${def_name}\")\n      set (CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -D${def_name}\" \n         CACHE STRING \"Flags used by the compiler during all C++ builds.\" \n         FORCE)\n   endif ()\nendmacro()\nmacro ( remove_global_define def_name )\n   if (CMAKE_CXX_FLAGS MATCHES \" -D${def_name}\")\n      string (REGEX REPLACE \" -D${def_name}\" \"\" temp_var ${CMAKE_CXX_FLAGS}) \n      set (CMAKE_CXX_FLAGS \"${temp_var}\" \n         CACHE STRING \"Flags used by the compiler during all C++ builds.\" \n         FORCE)\n   endif ()\nendmacro()\n\n\n# Make sure ENABLE_ASSERTS is defined for debug builds\nif (NOT CMAKE_CXX_FLAGS_DEBUG MATCHES \"-DENABLE_ASSERTS\")\n   set (CMAKE_CXX_FLAGS_DEBUG \"${CMAKE_CXX_FLAGS_DEBUG} -DENABLE_ASSERTS\" \n      CACHE STRING \"Flags used by the compiler during C++ debug builds.\" \n      FORCE)\nendif ()\n\n\n# Don't try to call add_library(dlib) and setup dlib's stuff if it has already\n# been done by some other part of the current cmake project.  We do this\n# because it avoids getting warnings/errors about cmake policy CMP0002.  This\n# happens when a project tries to call add_subdirectory() on dlib more than\n# once.  This most often happens when the top level of a project depends on two\n# or more other things which both depend on dlib. \nif (NOT TARGET dlib)\n\n   set (DLIB_ISO_CPP_ONLY_STR \n   \"Enable this if you don't want to compile any non-ISO C++ code (i.e. you don't use any of the API Wrappers)\" )\n   set (DLIB_NO_GUI_SUPPORT_STR \n   \"Enable this if you don't want to compile any of the dlib GUI code\" )\n   set (DLIB_ENABLE_STACK_TRACE_STR \n   \"Enable this if you want to turn on the DLIB_STACK_TRACE macros\" )\n   set (DLIB_ENABLE_ASSERTS_STR \n   \"Enable this if you want to turn on the DLIB_ASSERT macro\" )\n   set (DLIB_USE_BLAS_STR\n   \"Disable this if you don't want to use a BLAS library\" )\n   set (DLIB_USE_LAPACK_STR\n   \"Disable this if you don't want to use a LAPACK library\" )\n   set (DLIB_LINK_WITH_LIBPNG_STR\n   \"Disable this if you don't want to link against libpng\" )\n   set (DLIB_LINK_WITH_LIBJPEG_STR\n   \"Disable this if you don't want to link against libjpeg\" )\n   set (DLIB_LINK_WITH_SQLITE3_STR\n   \"Disable this if you don't want to link against sqlite3\" )\n   set (DLIB_LINK_WITH_FFTW_STR\n   \"Disable this if you don't want to link against fftw\" )\n\n   option(DLIB_ISO_CPP_ONLY ${DLIB_ISO_CPP_ONLY_STR} OFF)\n   option(DLIB_NO_GUI_SUPPORT ${DLIB_NO_GUI_SUPPORT_STR} OFF)\n   option(DLIB_ENABLE_STACK_TRACE ${DLIB_ENABLE_STACK_TRACE_STR} OFF)\n   option(DLIB_ENABLE_ASSERTS ${DLIB_ENABLE_ASSERTS_STR} OFF)\n   option(DLIB_USE_BLAS ${DLIB_USE_BLAS_STR} ON)\n   option(DLIB_USE_LAPACK ${DLIB_USE_LAPACK_STR} ON)\n   option(DLIB_LINK_WITH_LIBPNG ${DLIB_LINK_WITH_LIBPNG_STR} ON)\n   option(DLIB_LINK_WITH_LIBJPEG ${DLIB_LINK_WITH_LIBJPEG_STR} ON)\n   option(DLIB_LINK_WITH_SQLITE3 ${DLIB_LINK_WITH_SQLITE3_STR} ON)\n   option(DLIB_LINK_WITH_FFTW ${DLIB_LINK_WITH_FFTW_STR} ON)\n\n   set(source_files \n         include/dlib/base64/base64_kernel_1.cpp\n         include/dlib/bigint/bigint_kernel_1.cpp\n         include/dlib/bigint/bigint_kernel_2.cpp\n         include/dlib/bit_stream/bit_stream_kernel_1.cpp\n         include/dlib/entropy_decoder/entropy_decoder_kernel_1.cpp\n         include/dlib/entropy_decoder/entropy_decoder_kernel_2.cpp\n         include/dlib/entropy_encoder/entropy_encoder_kernel_1.cpp\n         include/dlib/entropy_encoder/entropy_encoder_kernel_2.cpp\n         include/dlib/md5/md5_kernel_1.cpp\n         include/dlib/tokenizer/tokenizer_kernel_1.cpp\n         include/dlib/unicode/unicode.cpp\n         include/dlib/data_io/image_dataset_metadata.cpp)\n\n   if (DLIB_ISO_CPP_ONLY)\n      add_library(dlib STATIC ${source_files} )\n   else()\n\n      set(source_files ${source_files}\n         include/dlib/sockets/sockets_kernel_1.cpp\n         include/dlib/bsp/bsp.cpp\n         include/dlib/dir_nav/dir_nav_kernel_1.cpp\n         include/dlib/dir_nav/dir_nav_kernel_2.cpp\n         include/dlib/dir_nav/dir_nav_extensions.cpp\n         include/dlib/linker/linker_kernel_1.cpp\n         include/dlib/logger/extra_logger_headers.cpp\n         include/dlib/logger/logger_kernel_1.cpp\n         include/dlib/logger/logger_config_file.cpp\n         include/dlib/misc_api/misc_api_kernel_1.cpp\n         include/dlib/misc_api/misc_api_kernel_2.cpp\n         include/dlib/sockets/sockets_extensions.cpp\n         include/dlib/sockets/sockets_kernel_2.cpp\n         include/dlib/sockstreambuf/sockstreambuf.cpp\n         include/dlib/sockstreambuf/sockstreambuf_unbuffered.cpp\n         include/dlib/server/server_kernel.cpp\n         include/dlib/server/server_iostream.cpp\n         include/dlib/server/server_http.cpp\n         include/dlib/threads/multithreaded_object_extension.cpp\n         include/dlib/threads/threaded_object_extension.cpp\n         include/dlib/threads/threads_kernel_1.cpp\n         include/dlib/threads/threads_kernel_2.cpp\n         include/dlib/threads/threads_kernel_shared.cpp\n         include/dlib/threads/thread_pool_extension.cpp\n         include/dlib/timer/timer.cpp\n         include/dlib/stack_trace.cpp\n         )\n\n      # we want to link to the right stuff depending on our platform.  \n      if (WIN32 AND NOT CYGWIN) ###############################################################################\n         if (DLIB_NO_GUI_SUPPORT)\n            set (dlib_needed_libraries ws2_32)\n         else()\n            set (dlib_needed_libraries ws2_32 comctl32 gdi32 imm32)\n         endif()\n      elseif(APPLE) ############################################################################\n         find_library(pthreadlib pthread)\n         set (dlib_needed_libraries ${pthreadlib})\n\n         if (NOT DLIB_NO_GUI_SUPPORT)\n            find_library(xlib X11)\n            # make sure X11 is in the include path\n            find_path(xlib_path Xlib.h\n               PATHS \n               /Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/include\n               PATH_SUFFIXES X11\n               )\n            if (xlib AND xlib_path)\n               get_filename_component(x11_path ${xlib_path} PATH CACHE)\n               include_directories(${x11_path})\n               set(dlib_needed_libraries ${dlib_needed_libraries} ${xlib} )\n            else()\n               message(\" *****************************************************************************\")\n               message(\" *** DLIB GUI SUPPORT DISABLED BECAUSE X11 DEVELOPMENT LIBRARIES NOT FOUND ***\")\n               message(\" *** Make sure libx11-dev is installed if you want GUI support             ***\")\n               message(\" *****************************************************************************\")\n               set(DLIB_NO_GUI_SUPPORT ON CACHE STRING ${DLIB_NO_GUI_SUPPORT_STR} FORCE )\n            endif()\n         endif()\n\n         mark_as_advanced(pthreadlib xlib xlib_path x11_path)\n      else () ##################################################################################\n         find_library(pthreadlib pthread)\n         set (dlib_needed_libraries ${pthreadlib})\n\n         # link to the nsl library if it exists.  this is something you need sometimes \n         find_library(nsllib nsl)\n         if (nsllib)\n            set (dlib_needed_libraries ${dlib_needed_libraries} ${nsllib})\n         endif ()\n\n         # link to the socket library if it exists.  this is something you need on solaris\n         find_library(socketlib socket)\n         if (socketlib)\n            set (dlib_needed_libraries ${dlib_needed_libraries} ${socketlib})\n         endif ()\n\n         if (NOT DLIB_NO_GUI_SUPPORT)\n            include(FindX11)\n            if (X11_FOUND)\n               include_directories(${X11_INCLUDE_DIR})\n               set (dlib_needed_libraries ${dlib_needed_libraries} ${X11_LIBRARIES})\n            else()\n               message(\" *****************************************************************************\")\n               message(\" *** DLIB GUI SUPPORT DISABLED BECAUSE X11 DEVELOPMENT LIBRARIES NOT FOUND ***\")\n               message(\" *** Make sure libx11-dev is installed if you want GUI support             ***\")\n               message(\" *****************************************************************************\")\n               set(DLIB_NO_GUI_SUPPORT ON CACHE STRING ${DLIB_NO_GUI_SUPPORT_STR} FORCE )\n            endif()\n         endif()\n\n         mark_as_advanced(nsllib pthreadlib socketlib)\n      endif () ##################################################################################\n\n      if (NOT DLIB_NO_GUI_SUPPORT)\n         set(source_files ${source_files}\n            include/dlib/gui_widgets/fonts.cpp\n            include/dlib/gui_widgets/widgets.cpp\n            include/dlib/gui_widgets/drawable.cpp\n            include/dlib/gui_widgets/canvas_drawing.cpp\n            include/dlib/gui_widgets/style.cpp\n            include/dlib/gui_widgets/base_widgets.cpp\n            include/dlib/gui_core/gui_core_kernel_1.cpp\n            include/dlib/gui_core/gui_core_kernel_2.cpp\n            )\n      endif()\n\n\n      if (DLIB_LINK_WITH_LIBPNG)\n         # try to find libpng \n         set(ZLIB_FIND_QUIETLY ON)\n         set(PNG_FIND_QUIETLY ON)\n         include(FindPNG)\n         if (PNG_FOUND)\n            include_directories(${PNG_INCLUDE_DIR})\n            set (dlib_needed_libraries ${dlib_needed_libraries} ${PNG_LIBRARY})\n         else()\n            # If we can't find libpng then statically compile it in.\n            include_directories(external/libpng external/zlib)\n            set(source_files ${source_files}\n               include/dlib/external/libpng/png.c\n               include/dlib/external/libpng/pngerror.c\n               include/dlib/external/libpng/pngget.c\n               include/dlib/external/libpng/pngmem.c\n               include/dlib/external/libpng/pngpread.c\n               include/dlib/external/libpng/pngread.c\n               include/dlib/external/libpng/pngrio.c\n               include/dlib/external/libpng/pngrtran.c\n               include/dlib/external/libpng/pngrutil.c\n               include/dlib/external/libpng/pngset.c\n               include/dlib/external/libpng/pngtrans.c\n               include/dlib/external/libpng/pngwio.c\n               include/dlib/external/libpng/pngwrite.c\n               include/dlib/external/libpng/pngwtran.c\n               include/dlib/external/libpng/pngwutil.c\n               include/dlib/external/zlib/adler32.c\n               include/dlib/external/zlib/compress.c\n               include/dlib/external/zlib/crc32.c\n               include/dlib/external/zlib/deflate.c\n               include/dlib/external/zlib/gzclose.c\n               include/dlib/external/zlib/gzlib.c\n               include/dlib/external/zlib/gzread.c\n               include/dlib/external/zlib/gzwrite.c\n               include/dlib/external/zlib/infback.c\n               include/dlib/external/zlib/inffast.c\n               include/dlib/external/zlib/inflate.c\n               include/dlib/external/zlib/inftrees.c\n               include/dlib/external/zlib/trees.c\n               include/dlib/external/zlib/uncompr.c\n               include/dlib/external/zlib/zutil.c\n               )\n         endif()\n         set(source_files ${source_files}\n            include/dlib/image_loader/png_loader.cpp\n            include/dlib/image_saver/save_png.cpp\n            )\n      endif()\n\n      if (DLIB_LINK_WITH_LIBJPEG)\n         # try to find libjpeg \n         include(FindJPEG)\n         if (JPEG_FOUND)\n            include_directories(${JPEG_INCLUDE_DIR})\n            set (dlib_needed_libraries ${dlib_needed_libraries} ${JPEG_LIBRARY})\n         else()\n            # If we can't find libjpeg then statically compile it in.\n            include_directories(external/libjpeg)\n            set(source_files ${source_files}\n                  include/dlib/external/libjpeg/jcomapi.cpp\n                  include/dlib/external/libjpeg/jdapimin.cpp\n                  include/dlib/external/libjpeg/jdapistd.cpp\n                  include/dlib/external/libjpeg/jdatasrc.cpp\n                  include/dlib/external/libjpeg/jdcoefct.cpp\n                  include/dlib/external/libjpeg/jdcolor.cpp\n                  include/dlib/external/libjpeg/jddctmgr.cpp\n                  include/dlib/external/libjpeg/jdhuff.cpp\n                  include/dlib/external/libjpeg/jdinput.cpp\n                  include/dlib/external/libjpeg/jdmainct.cpp\n                  include/dlib/external/libjpeg/jdmarker.cpp\n                  include/dlib/external/libjpeg/jdmaster.cpp\n                  include/dlib/external/libjpeg/jdmerge.cpp\n                  include/dlib/external/libjpeg/jdphuff.cpp\n                  include/dlib/external/libjpeg/jdpostct.cpp\n                  include/dlib/external/libjpeg/jdsample.cpp\n                  include/dlib/external/libjpeg/jerror.cpp\n                  include/dlib/external/libjpeg/jidctflt.cpp\n                  include/dlib/external/libjpeg/jidctfst.cpp\n                  include/dlib/external/libjpeg/jidctint.cpp\n                  include/dlib/external/libjpeg/jidctred.cpp\n                  include/dlib/external/libjpeg/jmemmgr.cpp\n                  include/dlib/external/libjpeg/jmemnobs.cpp\n                  include/dlib/external/libjpeg/jquant1.cpp\n                  include/dlib/external/libjpeg/jquant2.cpp\n                  include/dlib/external/libjpeg/jutils.cpp  )\n         endif()\n         set(source_files ${source_files}\n            include/dlib/image_loader/jpeg_loader.cpp\n            )\n      endif()\n\n\n      if (DLIB_USE_BLAS OR DLIB_USE_LAPACK)\n         # Try to find BLAS and LAPACK \n         include(cmake_find_blas.txt)\n\n         if (DLIB_USE_BLAS)\n            if (blas_found)\n               set (dlib_needed_libraries ${dlib_needed_libraries} ${blas_libraries})\n            else()\n               set(DLIB_USE_BLAS OFF CACHE STRING ${DLIB_USE_BLAS_STR} FORCE )\n            endif()\n         endif()\n\n         if (DLIB_USE_LAPACK)\n            if (lapack_found)\n               set (dlib_needed_libraries ${dlib_needed_libraries} ${lapack_libraries})\n            else()\n               set(DLIB_USE_LAPACK OFF CACHE STRING ${DLIB_USE_LAPACK_STR} FORCE )\n            endif()\n         endif()\n      endif()\n\n\n\n      if (DLIB_LINK_WITH_SQLITE3)\n         find_library(sqlite sqlite3)\n         # make sure sqlite3.h is in the include path\n         find_path(sqlite_path sqlite3.h)\n         if (sqlite AND sqlite_path)\n            get_filename_component(sqlite_path2 ${sqlite_path} PATH CACHE)\n            include_directories(${sqlite_path2})\n            set(dlib_needed_libraries ${dlib_needed_libraries} ${sqlite} )\n         else()\n            set(DLIB_LINK_WITH_SQLITE3 OFF CACHE STRING ${DLIB_LINK_WITH_SQLITE3_STR} FORCE )\n         endif()\n         mark_as_advanced(sqlite sqlite_path sqlite_path2)\n      endif()\n\n\n\n      if (DLIB_LINK_WITH_FFTW)\n         find_library(fftw fftw3)\n         # make sure fftw3.h is in the include path\n         find_path(fftw_path fftw3.h)\n         if (fftw AND fftw_path)\n            get_filename_component(fftw_path2 ${fftw_path} PATH CACHE)\n            include_directories(${fftw_path2})\n            set(dlib_needed_libraries ${dlib_needed_libraries} ${fftw} )\n         else()\n            set(DLIB_LINK_WITH_FFTW OFF CACHE STRING ${DLIB_LINK_WITH_SQLITE3_STR} FORCE )\n         endif()\n         mark_as_advanced(fftw fftw_path fftw_path2)\n      endif()\n\n\n      add_library(dlib STATIC ${source_files} )\n      target_link_libraries(dlib ${dlib_needed_libraries} )\n\n   endif ()  ##### end of if NOT DLIB_ISO_CPP_ONLY ##########################################################\n\n\n   #test for some things that really should be true about the compiler\n   include(TestForSTDNamespace)\n   include(TestForANSIStreamHeaders)\n\n\n   if (DLIB_LINK_WITH_LIBPNG AND NOT DLIB_ISO_CPP_ONLY)\n      add_global_define(DLIB_PNG_SUPPORT)\n   else()\n      remove_global_define(DLIB_PNG_SUPPORT)\n   endif()\n\n   if (DLIB_LINK_WITH_LIBJPEG AND NOT DLIB_ISO_CPP_ONLY)\n      add_global_define(DLIB_JPEG_SUPPORT)\n   else()\n      remove_global_define(DLIB_JPEG_SUPPORT)\n   endif()\n\n   if (DLIB_LINK_WITH_FFTW AND NOT DLIB_ISO_CPP_ONLY)\n      add_global_define(DLIB_USE_FFTW)\n   else()\n      remove_global_define(DLIB_USE_FFTW)\n   endif()\n\n\n   if (DLIB_USE_BLAS AND blas_found)\n      add_global_define(DLIB_USE_BLAS)\n   else()\n      remove_global_define(DLIB_USE_BLAS)\n   endif()\n\n   if (DLIB_USE_LAPACK AND lapack_found)\n      add_global_define(DLIB_USE_LAPACK)\n   else()\n      remove_global_define(DLIB_USE_LAPACK)\n   endif()\n\n\n   if (DLIB_ISO_CPP_ONLY)\n      add_global_define(DLIB_ISO_CPP_ONLY)\n   else()\n      remove_global_define(DLIB_ISO_CPP_ONLY)\n   endif()\n\n\n   if (DLIB_NO_GUI_SUPPORT)\n      add_global_define(DLIB_NO_GUI_SUPPORT)\n   else()\n      remove_global_define(DLIB_NO_GUI_SUPPORT)\n   endif()\n\n   if (DLIB_ENABLE_STACK_TRACE)\n      add_global_define(DLIB_ENABLE_STACK_TRACE)\n   else()\n      remove_global_define(DLIB_ENABLE_STACK_TRACE)\n   endif()\n\n\n   if (DLIB_ENABLE_ASSERTS)\n      add_global_define(ENABLE_ASSERTS)\n   else()\n      remove_global_define(ENABLE_ASSERTS)\n   endif()\n\n\nendif()"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/LICENSE.txt",
    "content": "Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE."
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/README.txt",
    "content": " \n                           dlib C++ library\n\nThis project is a modern C++ library with a focus on portability \nand program correctness. It strives to be easy to use right and \nhard to use wrong. Thus, it comes with extensive documentation and \nthorough debugging modes. The library provides a platform abstraction \nlayer for common tasks such as interfacing with network services, \nhandling threads, or creating graphical user interfaces. Additionally, \nthe library implements many useful algorithms such as data compression \nroutines, linked lists, binary search trees, linear algebra and matrix \nutilities, machine learning algorithms, XML and text parsing, and many \nother general utilities.\n\nDocumentation:  \n  There should be HTML documentation accompanying this library.  But\n  if there isn't you can download it from http://dlib.net\n\nInstallation:\n  To use this library all you have to do is extract the library \n  somewhere, make sure the folder *containing* the dlib folder is in \n  your include path, and finally add dlib/all/source.cpp to your \n  project.\n\n  An example makefile that uses this library can be found here: \n  dlib/test/makefile. It is the makefile used to build the regression \n  test suite for this library. There is also a CMake makefile that \n  builds the regression test suite at dlib/test/CMakeLists.txt and \n  another CMake makefile that builds all the example programs in\n  the examples folder.\n\n  For further information see the accompanying HTML documentation or\n  visit http://dlib.net\n\nThe license for this library can be found in LICENSE.txt.  But the\nlong and short of the license is that you can use this code however\nyou like, even in closed source commercial software.\n\nVersion: 18.10\nDate:    Thu Aug 28 19:47:14 EDT 2014\nMercurial Revision ID: 5a14394843c0\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/cmake_find_blas.txt",
    "content": "#\n# This is a CMake makefile.  You can find the cmake utility and\n# information about it at http://www.cmake.org\n#\n#\n# This cmake file tries to find installed BLAS and LAPACK libraries.  \n# It looks for an installed copy of the Intel MKL library first and then\n# attempts to find some other BLAS and LAPACK libraries if you don't have \n# the Intel MKL.\n#\n#  blas_found        - True if BLAS is available\n#  lapack_found      - True if LAPACK is available\n#  blas_libraries    - link against these to use BLAS library \n#  lapack_libraries  - link against these to use LAPACK library \n\n# setting this makes CMake allow normal looking if else statements\nSET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)\n\nSET(blas_found 0)\nSET(lapack_found 0)\n\n\nif (UNIX)\n    message(STATUS \"Searching for BLAS and LAPACK\")\n\n    include(CheckTypeSize)\n    check_type_size( \"void*\" SIZE_OF_VOID_PTR)\n\n    if (SIZE_OF_VOID_PTR EQUAL 8)\n        set( mkl_search_path\n            /opt/intel/mkl/*/lib/em64t\n            /opt/intel/mkl/lib/intel64\n            /opt/intel/lib/intel64\n            )\n\n        find_library(mkl_intel mkl_intel_lp64 ${mkl_search_path})\n    else()\n        set( mkl_search_path\n            /opt/intel/mkl/*/lib/32\n            /opt/intel/mkl/lib/ia32\n            /opt/intel/lib/ia32\n            )\n\n        find_library(mkl_intel mkl_intel ${mkl_search_path})\n    endif()\n\n   include(CheckLibraryExists)\n\n\n   # Search for the needed libraries from the MKL.  We will try to link against the mkl_rt\n   # file first since this way avoids linking bugs in some cases.\n   find_library(mkl_rt mkl_rt ${mkl_search_path})\n   mark_as_advanced(  mkl_rt )\n   # if we found the MKL \n   if ( mkl_rt)\n      set(blas_libraries  ${mkl_rt} )\n      set(lapack_libraries  ${mkl_rt} )\n      set(blas_found 1)\n      set(lapack_found 1)\n      set(found_intel_mkl 1)\n      message(STATUS \"Found Intel MKL BLAS/LAPACK library\")\n   endif()\n\n\n\n   if (NOT found_intel_mkl)\n      # Search for the needed libraries from the MKL.  This time try looking for a different\n      # set of MKL files and try to link against those.\n      find_library(mkl_core mkl_core ${mkl_search_path})\n      find_library(mkl_thread mkl_intel_thread ${mkl_search_path})\n      find_library(mkl_iomp iomp5 ${mkl_search_path})\n      find_library(mkl_pthread pthread ${mkl_search_path})\n\n      mark_as_advanced( mkl_intel mkl_core mkl_thread mkl_iomp mkl_pthread)\n      # If we found the MKL \n      if (mkl_intel AND mkl_core AND mkl_thread AND mkl_iomp AND mkl_pthread)\n         set(blas_libraries ${mkl_intel} ${mkl_core} ${mkl_thread} ${mkl_iomp} ${mkl_pthread})\n         set(lapack_libraries ${mkl_intel} ${mkl_core} ${mkl_thread} ${mkl_iomp} ${mkl_pthread})\n         set(blas_found 1)\n         set(lapack_found 1)\n         set(found_intel_mkl 1)\n         message(STATUS \"Found Intel MKL BLAS/LAPACK library\")\n      endif()\n   endif()\n\n\n   # try to find some other LAPACK libraries if we didn't find the MKL\n   set(extra_paths\n        /usr/lib64\n        /usr/lib64/atlas-sse3\n        /usr/lib64/atlas-sse2\n        /usr/lib64/atlas\n        /usr/lib\n        /usr/lib/atlas-sse3\n        /usr/lib/atlas-sse2\n        /usr/lib/atlas)\n\n\n   if (NOT lapack_found)\n      find_library(lapack_lib NAMES lapack lapack-3 PATHS ${extra_paths})\n      if (lapack_lib)\n         set(lapack_libraries ${lapack_lib})\n         set(lapack_found 1)\n         message(STATUS \"Found LAPACK library\")\n      endif()\n      mark_as_advanced( lapack_lib)\n   endif()\n\n   \n   # try to find some other BLAS libraries if we didn't find the MKL\n   \n   if (NOT blas_found)\n      find_library(atlas_lib atlas PATHS ${extra_paths})\n      find_library(cblas_lib cblas PATHS ${extra_paths})\n      if (atlas_lib AND cblas_lib)\n         set(blas_libraries ${atlas_lib} ${cblas_lib})\n         set(blas_found 1)\n         message(STATUS \"Found ATLAS BLAS library\")\n      endif()\n      mark_as_advanced( atlas_lib cblas_lib)\n   endif()\n\n\n   if (NOT blas_found)\n      find_library(cblas_lib cblas PATHS ${extra_paths})\n      if (cblas_lib)\n         set(blas_libraries ${cblas_lib})\n         set(blas_found 1)\n         message(STATUS \"Found CBLAS library\")\n      endif()\n      mark_as_advanced( cblas_lib)\n   endif()\n\n   \n   if (NOT blas_found)\n      find_library(generic_blas blas PATHS ${extra_paths})\n      if (generic_blas)\n         set(blas_libraries ${generic_blas})\n         set(blas_found 1)\n         message(STATUS \"Found BLAS library\")\n      endif()\n      mark_as_advanced( generic_blas)\n   endif()\n\n\n\n\n   # Make sure we really found a CBLAS library.  That is, it needs to expose\n   # the proper cblas link symbols.  So here we test if one of them is present\n   # and assume everything is good if it is. Note that we don't do this check if\n   # we found the Intel MKL since for some reason CHECK_FUNCTION_EXISTS doesn't work\n   # with it.  But it's fine since the MKL should always have cblas.\n   if (blas_found AND NOT found_intel_mkl)\n      INCLUDE (CheckFunctionExists)\n      set(CMAKE_REQUIRED_LIBRARIES ${blas_libraries})\n      CHECK_FUNCTION_EXISTS(cblas_ddot HAVE_CBLAS)\n      if (NOT HAVE_CBLAS)\n         message(STATUS \"BLAS library does not have cblas symbols, so dlib will not use BLAS or LAPACK\")\n         set(blas_found 0)\n         set(lapack_found 0)\n      endif()\n   endif()\n\n\n   if (NOT blas_found)\n      message(\" *****************************************************************************\")\n      message(\" *** No BLAS library found so using dlib's built in BLAS.  However, if you ***\")\n      message(\" *** install an optimized BLAS such as openblas or the Intel MKL your code ***\")\n      message(\" *** will run faster.  On Ubuntu you can install openblas by executing:    ***\")\n      message(\" ***    sudo apt-get install libopenblas-dev liblapack-dev                 ***\")\n      message(\" *****************************************************************************\")\n   endif()\n\nelseif(WIN32 AND NOT MINGW)\n    message(STATUS \"Searching for BLAS and LAPACK\")\n\n    include(CheckTypeSize)\n    check_type_size( \"void*\" SIZE_OF_VOID_PTR)\n    if (SIZE_OF_VOID_PTR EQUAL 8)\n        set( mkl_search_path\n            \"C:/Program Files (x86)/Intel/Composer XE/mkl/lib/intel64\"\n            \"C:/Program Files (x86)/Intel/Composer XE/compiler/lib/intel64\"\n            \"C:/Program Files/Intel/Composer XE/mkl/lib/intel64\"\n            \"C:/Program Files/Intel/Composer XE/compiler/lib/intel64\"\n            )\n        find_library(mkl_intel  mkl_intel_lp64 ${mkl_search_path})\n    else()\n        set( mkl_search_path\n            \"C:/Program Files (x86)/Intel/Composer XE/mkl/lib/ia32\"\n            \"C:/Program Files (x86)/Intel/Composer XE/compiler/lib/ia32\"\n            \"C:/Program Files/Intel/Composer XE/mkl/lib/ia32\"\n            \"C:/Program Files/Intel/Composer XE/compiler/lib/ia32\"\n            )\n        find_library(mkl_intel  mkl_intel_c ${mkl_search_path})\n    endif()\n\n\n    # Search for the needed libraries from the MKL.  \n    find_library(mkl_core mkl_core ${mkl_search_path})\n    find_library(mkl_thread mkl_intel_thread ${mkl_search_path})\n    find_library(mkl_iomp libiomp5md ${mkl_search_path})\n\n    mark_as_advanced( mkl_intel mkl_core mkl_thread  mkl_iomp)\n    # If we found the MKL \n    if (mkl_intel AND mkl_core AND mkl_thread AND mkl_iomp )\n        set(blas_libraries ${mkl_intel} ${mkl_core} ${mkl_thread} ${mkl_iomp}  )\n        set(lapack_libraries ${mkl_intel} ${mkl_core} ${mkl_thread} ${mkl_iomp} )\n        set(blas_found 1)\n        set(lapack_found 1)\n        message(STATUS \"Found Intel MKL BLAS/LAPACK library\")\n\n        if (MSVC)\n            # need to set /bigobj when statically linking with the MKL on\n            # visual studio or it doesn't work right.\n            if (NOT CMAKE_CXX_FLAGS MATCHES \"/bigobj\")\n                set (CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} /bigobj\" \n                    CACHE STRING \"Flags used by the compiler during all C++ builds.\" \n                    FORCE)\n            endif ()\n        endif()\n    endif()\n\n\nendif()\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/dlib.props",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)lib\\3rdParty\\dlib\\include\\dlib\\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n  </ItemDefinitionGroup>\n</Project>"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/dlib.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"include\\dlib\\all\\source.cpp\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGUID>{B47A5F12-2567-44E9-AE49-35763EC82149}</ProjectGUID>\n    <Keyword>Win32Proj</Keyword>\n    <Platform>Win32</Platform>\n    <ProjectName>dlib</ProjectName>\n    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <CharacterSet>Unicode</CharacterSet>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <CharacterSet>Unicode</CharacterSet>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <CharacterSet>Unicode</CharacterSet>\n    <PlatformToolset>v140</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseOfMfc>false</UseOfMfc>\n    <CharacterSet>Unicode</CharacterSet>\n    <PlatformToolset>v140</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"..\\tbb\\tbb_d.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"..\\tbb\\tbb_d.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"..\\tbb\\tbb.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"..\\tbb\\tbb.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup>\n    <_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(ProjectDir)$(Configuration)\\</IntDir>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">dlib</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">dlib</TargetName>\n    <TargetExt Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">.lib</TargetExt>\n    <TargetExt Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">.lib</TargetExt>\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Configuration)\\</OutDir>\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(ProjectDir)$(Configuration)\\</IntDir>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(ProjectName)</TargetName>\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(ProjectName)</TargetName>\n    <TargetExt Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">.lib</TargetExt>\n    <TargetExt Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">.lib</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)dlib/include/dlib/..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <CompileAs>CompileAsCpp</CompileAs>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <ExceptionHandling>Sync</ExceptionHandling>\n      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>\n      <Optimization>Disabled</Optimization>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <RuntimeTypeInfo>true</RuntimeTypeInfo>\n      <WarningLevel>Level3</WarningLevel>\n      <PreprocessorDefinitions>DLIB_NO_GUI_SUPPORT;WIN32;_WINDOWS;_DEBUG;ENABLE_ASSERTS;DLIB_HAVE_SSE2;DLIB_HAVE_SSE3;DLIB_HAVE_SSE41;CMAKE_INTDIR=\"Debug\";%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AssemblerListingLocation>Debug</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n    </ClCompile>\n    <Lib>\n      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)dlib/include/dlib/..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <CompileAs>CompileAsCpp</CompileAs>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>\n      <ExceptionHandling>Sync</ExceptionHandling>\n      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>\n      <Optimization>Disabled</Optimization>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <RuntimeTypeInfo>true</RuntimeTypeInfo>\n      <WarningLevel>Level3</WarningLevel>\n      <PreprocessorDefinitions>DLIB_NO_GUI_SUPPORT;WIN64;_WINDOWS;_DEBUG;ENABLE_ASSERTS;DLIB_HAVE_SSE2;DLIB_HAVE_SSE3;DLIB_HAVE_SSE41;CMAKE_INTDIR=\"Debug\";%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AssemblerListingLocation>Debug</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n    </ClCompile>\n    <Lib>\n      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)dlib/include/dlib/..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <CompileAs>CompileAsCpp</CompileAs>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <ExceptionHandling>Sync</ExceptionHandling>\n      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\n      <Optimization>Full</Optimization>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <RuntimeTypeInfo>true</RuntimeTypeInfo>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>\n      </DebugInformationFormat>\n      <PreprocessorDefinitions>DLIB_NO_GUI_SUPPORT;WIN32;_WINDOWS;NDEBUG;DLIB_HAVE_SSE2;DLIB_HAVE_SSE3;DLIB_HAVE_SSE41;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>WIN32;_WINDOWS;DLIB_PNG_SUPPORT;DLIB_JPEG_SUPPORT;NDEBUG;DLIB_HAVE_SSE2;DLIB_HAVE_SSE3;DLIB_HAVE_SSE41;CMAKE_INTDIR=\\\"Release\\\";%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>$(SolutionDir)/dlib/..;$(SolutionDir)/dlib/external/libpng;$(SolutionDir)/dlib/external/zlib;$(SolutionDir)/dlib/external/libjpeg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ResourceCompile>\n    <Midl>\n      <AdditionalIncludeDirectories>$(SolutionDir)/dlib/..;$(SolutionDir)/dlib/external/libpng;$(SolutionDir)/dlib/external/zlib;$(SolutionDir)/dlib/external/libjpeg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <OutputDirectory>$(IntDir)</OutputDirectory>\n      <HeaderFileName>%(Filename).h</HeaderFileName>\n      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>\n      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>\n      <ProxyFileName>%(Filename)_p.c</ProxyFileName>\n    </Midl>\n    <Lib>\n      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)dlib/include/dlib/..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <CompileAs>CompileAsCpp</CompileAs>\n      <EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>\n      <ExceptionHandling>Sync</ExceptionHandling>\n      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\n      <Optimization>Full</Optimization>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <RuntimeTypeInfo>true</RuntimeTypeInfo>\n      <WarningLevel>Level3</WarningLevel>\n      <DebugInformationFormat>\n      </DebugInformationFormat>\n      <PreprocessorDefinitions>DLIB_NO_GUI_SUPPORT;WIN64;_WINDOWS;NDEBUG;DLIB_HAVE_SSE2;DLIB_HAVE_SSE3;DLIB_HAVE_SSE41;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n    </ClCompile>\n    <ResourceCompile>\n      <PreprocessorDefinitions>WIN32;_WINDOWS;DLIB_PNG_SUPPORT;DLIB_JPEG_SUPPORT;NDEBUG;DLIB_HAVE_SSE2;DLIB_HAVE_SSE3;DLIB_HAVE_SSE41;CMAKE_INTDIR=\\\"Release\\\";%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>$(SolutionDir)/dlib/..;$(SolutionDir)/dlib/external/libpng;$(SolutionDir)/dlib/external/zlib;$(SolutionDir)/dlib/external/libjpeg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ResourceCompile>\n    <Midl>\n      <AdditionalIncludeDirectories>$(SolutionDir)/dlib/..;$(SolutionDir)/dlib/external/libpng;$(SolutionDir)/dlib/external/zlib;$(SolutionDir)/dlib/external/libjpeg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <OutputDirectory>$(IntDir)</OutputDirectory>\n      <HeaderFileName>%(Filename).h</HeaderFileName>\n      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>\n      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>\n      <ProxyFileName>%(Filename)_p.c</ProxyFileName>\n    </Midl>\n    <Lib>\n      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\n    </Lib>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/add_python_module",
    "content": "# This is a CMake file that sets up the add_python_module() macro.  This macro\n# lets you easily make python modules that use dlib.  \n#\n# The macro takes the module name as its first argument and then a list of\n# source files to compile into the module.  See ../tools/python/CMakeLists.txt\n# for an example.\n#\n# It also sets up a macro called install_${module_name}_to() where\n# ${module_name} is whatever you named your module.  This install_*_to() macro\n# takes a folder name and creates an install target that will copy the compiled\n# python module to that folder when you run \"make install\".  Note that the path\n# given to install_*_to() is relative to your CMakeLists.txt file.\n\n\n\n# A list of various paths you need to search on windows since people install\n# boost in a bunch of different places.\nset(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} \n        \"C:/local/boost_1_*\"\n        \"C:/Program Files (x86)/boost/boost_1_*\"  \n        \"C:/Program Files/boost/boost_1_*\")\nset(BOOST_LIBRARYDIR \"C:/local/boost_1_*/lib32-msvc-*\")\n\n\n\n#SET(Boost_USE_STATIC_LIBS OFF)\n#SET(Boost_USE_MULTITHREADED ON)\n#SET(Boost_USE_STATIC_RUNTIME OFF)\nset(Boost_NO_BOOST_CMAKE ON)\n\nFIND_PACKAGE(Boost 1.41.0 COMPONENTS python REQUIRED)\nFIND_PACKAGE(PythonLibs 2.6 REQUIRED)\n\nif (WIN32 AND NOT Boost_LIBRARIES)\n    message(FATAL_ERROR \"We couldn't find the right version of boost python.  If you installed boost and you are still \"\n            \"getting this error then you might have installed a version of boost that was compiled with a different \"\n            \"version of visual studio than the one you are using.  So you have to make sure that the version of \"\n            \"visual studio is the same version that was used to compile the copy of boost you are using.\")\nendif()\n\n\nINCLUDE_DIRECTORIES(\"${Boost_INCLUDE_DIRS}\")\nif (PYTHON_INCLUDE_PATH)\n   INCLUDE_DIRECTORIES(\"${PYTHON_INCLUDE_PATH}\" )\nelse()\n   INCLUDE_DIRECTORIES(\"${PYTHON_INCLUDE_DIRS}\" )\nendif()\n\nif (CMAKE_COMPILER_IS_GNUCXX)\n   add_definitions(\"-fPIC\")\nendif()\n\n# include dlib so we can link against it\nstring(REGEX REPLACE \"add_python_module$\" \"\" dlib_path ${CMAKE_CURRENT_LIST_FILE})\ninclude(${dlib_path}/cmake)\n\n# We put the extra _ on the end of the name just so it's possible to\n# have a module name of dlib and not get a conflict with the target named\n# dlib in ../dlib/cmake.  We use the target OUPUT_NAME property to ensure the\n# output name is set to what the user asked for (i.e. no _).\nmacro(add_python_module module_name module_sources )\n   ADD_LIBRARY(${module_name}_ SHARED ${module_sources} ${ARGN} )\n   TARGET_LINK_LIBRARIES(${module_name}_ ${Boost_LIBRARIES} ${PYTHON_LIBRARIES}  dlib)\n   if(WIN32 AND NOT CYGWIN)\n      SET_TARGET_PROPERTIES( ${module_name}_\n         PROPERTIES\n         PREFIX \"\"\n         SUFFIX \".pyd\"\n         OUTPUT_NAME ${module_name}\n         )\n   elseif(CYGWIN)\n      SET_TARGET_PROPERTIES( ${module_name}_\n         PROPERTIES\n         PREFIX \"\"\n         SUFFIX \".dll\"\n         OUTPUT_NAME ${module_name}\n         )\n   else()\n      SET_TARGET_PROPERTIES( ${module_name}_\n         PROPERTIES\n         PREFIX \"\"\n         SUFFIX \".so\"\n         OUTPUT_NAME ${module_name}\n         )\n   endif()\n\n   macro(install_${module_name}_to path)\n       # Determine the path to our CMakeLists.txt file.\n       string(REGEX REPLACE \"CMakeLists.txt$\" \"\" base_path ${CMAKE_CURRENT_LIST_FILE})\n       INSTALL(TARGETS ${module_name}_ \n            DESTINATION \"${base_path}/${path}\"\n           )\n\n       # On windows we will usually need to have the boost-python .dll files in the same folder or\n       # you will get an error about how they can't be found.  So copy the boost .dll files along with\n       # your module to the install folder to avoid this.\n       if (WIN32)\n           list(GET Boost_LIBRARIES 1 boostlibs1)\n           list(GET Boost_LIBRARIES 3 boostlibs2)\n           string(REGEX REPLACE \".lib$\" \".dll\" boostdlls1 ${boostlibs1})\n           string(REGEX REPLACE \".lib$\" \".dll\" boostdlls2 ${boostlibs2})\n           INSTALL(FILES ${boostdlls1} ${boostdlls2} \n                DESTINATION \"${base_path}/${path}\"\n                )\n       endif()\n   endmacro()\n\nendmacro()\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/algs.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ALGs_\n#define DLIB_ALGs_\n\n// this file contains miscellaneous stuff                      \n\n\n#ifdef _MSC_VER\n// Disable the following warnings for Visual Studio\n\n// this is to disable the \"'this' : used in base member initializer list\"\n// warning you get from some of the GUI objects since all the objects\n// require that their parent class be passed into their constructor. \n// In this case though it is totally safe so it is ok to disable this warning.\n#pragma warning(disable : 4355)\n\n// This is a warning you get sometimes when Visual Studio performs a Koenig Lookup. \n// This is a bug in visual studio.  It is a totally legitimate thing to \n// expect from a compiler. \n#pragma warning(disable : 4675)\n\n// This is a warning you get from visual studio 2005 about things in the standard C++\n// library being \"deprecated.\"  I checked the C++ standard and it doesn't say jack \n// about any of them (I checked the searchable PDF).   So this warning is total Bunk.\n#pragma warning(disable : 4996)\n\n// This is a warning you get from visual studio 2003:\n//    warning C4345: behavior change: an object of POD type constructed with an initializer \n//    of the form () will be default-initialized.\n// I love it when this compiler gives warnings about bugs in previous versions of itself. \n#pragma warning(disable : 4345)\n\n\n// Disable warnings about conversion from size_t to unsigned long and long.\n#pragma warning(disable : 4267)\n\n// Disable warnings about conversion from double to float  \n#pragma warning(disable : 4244)\n#pragma warning(disable : 4305)\n\n// Disable \"warning C4180: qualifier applied to function type has no meaning; ignored\".\n// This warning happens often in generic code that works with functions and isn't useful.\n#pragma warning(disable : 4180)\n\n#endif\n\n#ifdef __BORLANDC__\n// Disable the following warnings for the Borland Compilers\n//\n// These warnings just say that the compiler is refusing to inline functions with\n// loops or try blocks in them.  \n//\n#pragma option -w-8027\n#pragma option -w-8026 \n#endif\n\n#include <string>       // for the exceptions\n\n#ifdef __CYGWIN__\nnamespace std\n{\n   typedef std::basic_string<wchar_t> wstring;\n}\n#endif\n\n#include \"platform.h\"\n#include \"windows_magic.h\"\n\n\n#include <algorithm>    // for std::swap\n#include <new>          // for std::bad_alloc\n#include <cstdlib>\n#include <limits> // for std::numeric_limits for is_finite()\n#include \"assert.h\"\n#include \"error.h\"\n#include \"noncopyable.h\"\n#include \"enable_if.h\"\n#include \"uintn.h\"\n#include \"numeric_constants.h\"\n#include \"memory_manager_stateless/memory_manager_stateless_kernel_1.h\" // for the default memory manager\n\n\n\n// ----------------------------------------------------------------------------------------\n/*!A _dT !*/\n\ntemplate <typename charT>\ninline charT _dTcast (const char a, const wchar_t b);\ntemplate <>\ninline char _dTcast<char> (const char a, const wchar_t ) { return a; }\ntemplate <>\ninline wchar_t _dTcast<wchar_t> (const char , const wchar_t b) { return b; }\n\ntemplate <typename charT>\ninline const charT* _dTcast ( const char* a, const wchar_t* b);\ntemplate <>\ninline const char* _dTcast<char> ( const char* a, const wchar_t* ) { return a; }\ntemplate <>\ninline const wchar_t* _dTcast<wchar_t> ( const char* , const wchar_t* b) { return b; }\n\n\n#define _dT(charT,str) _dTcast<charT>(str,L##str) \n/*!\n    requires\n        - charT == char or wchar_t\n        - str == a string or character literal\n    ensures\n        - returns the literal in the form of a charT type literal.\n!*/\n\n// ----------------------------------------------------------------------------------------\n\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A default_memory_manager\n\n        This memory manager just calls new and delete directly.  \n\n    !*/\n    typedef memory_manager_stateless_kernel_1<char> default_memory_manager;\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A swap !*/\n    // make swap available in the dlib namespace\n    using std::swap;\n\n// ----------------------------------------------------------------------------------------\n\n    /*!\n        Here is where I define my return codes.  It is \n        important that they all be < 0.\n    !*/\n\n    enum general_return_codes\n    {\n        TIMEOUT     = -1,\n        WOULDBLOCK  = -2,\n        OTHER_ERROR = -3,\n        SHUTDOWN    = -4,\n        PORTINUSE   = -5\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline unsigned long square_root (\n        unsigned long value\n    )\n    /*!\n        requires\n            - value <= 2^32 - 1\n        ensures\n            - returns the square root of value.  if the square root is not an\n              integer then it will be rounded up to the nearest integer.\n    !*/\n    {\n        unsigned long x;\n\n        // set the initial guess for what the root is depending on \n        // how big value is\n        if (value < 3)\n            return value;\n        else if (value < 4096) // 12\n            x = 45;\n        else if (value < 65536) // 16\n            x = 179;\n        else if (value < 1048576) // 20\n            x = 717;\n        else if (value < 16777216) // 24\n            x = 2867;\n        else if (value < 268435456) // 28\n            x = 11469;\n        else   // 32\n            x = 45875;\n\n\n\n        // find the root\n        x = (x + value/x)>>1;\n        x = (x + value/x)>>1;\n        x = (x + value/x)>>1;\n        x = (x + value/x)>>1;\n\n\n\n        if (x*x < value)\n            return x+1;\n        else\n            return x;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >    \n    void median (\n        T& one,\n        T& two,\n        T& three\n    );\n    /*!\n        requires\n            - T implements operator< \n            - T is swappable by a global swap()\n        ensures\n            - #one is the median \n            - #one, #two, and #three is some permutation of one, two, and three.  \n    !*/\n    \n    \n    template <\n        typename T\n        >\n    void median (\n        T& one,\n        T& two,\n        T& three\n    )    \n    {    \n        using std::swap;\n        using dlib::swap;\n\n        if ( one < two )\n        {\n            // one < two\n            if ( two < three )\n            {\n                // one < two < three : two\n                swap(one,two);\n                \n            }\n            else\n            {\n                // one < two >= three\n                if ( one < three)\n                {\n                    // three\n                    swap(three,one);\n                }\n            }\n            \n        }\n        else\n        {\n            // one >= two\n            if ( three < one )\n            {\n                // three <= one >= two\n                if ( three < two )\n                {\n                    // two\n                    swap(two,one);\n                }\n                else\n                {\n                    // three\n                    swap(three,one);\n                }\n            }\n        }        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace relational_operators\n    {\n        template <\n            typename A,\n            typename B\n            >\n        bool operator> (\n            const A& a,\n            const B& b\n        ) { return b < a; }\n\n    // ---------------------------------\n\n        template <\n            typename A,\n            typename B\n            >\n        bool operator!= (\n            const A& a,\n            const B& b\n        ) { return !(a == b); }\n\n    // ---------------------------------\n\n        template <\n            typename A,\n            typename B\n            >\n        bool operator<= (\n            const A& a,\n            const B& b\n        ) { return !(b < a); }\n\n    // ---------------------------------\n\n        template <\n            typename A,\n            typename B\n            >\n        bool operator>= (\n            const A& a,\n            const B& b\n        ) { return !(a < b); }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void exchange (\n        T& a,\n        T& b\n    )\n    /*!\n        This function does the exact same thing that global swap does and it does it by\n        just calling swap.  But a lot of compilers have problems doing a Koenig Lookup\n        and the fact that this has a different name (global swap has the same name as\n        the member functions called swap) makes them compile right.\n\n        So this is a workaround but not too ugly of one.  But hopefully I get get\n        rid of this in a few years.  So this function is already deprecated. \n\n        This also means you should NOT use this function in your own code unless\n        you have to support an old buggy compiler that benefits from this hack.\n    !*/\n    {\n        using std::swap;\n        using dlib::swap;\n        swap(a,b);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_pointer_type\n\n        This is a template where is_pointer_type<T>::value == true when T is a pointer \n        type and false otherwise.\n    !*/\n\n    template <\n        typename T\n        >\n    class is_pointer_type\n    {\n    public:\n        enum { value = false };\n    private:\n        is_pointer_type();\n    };\n\n    template <\n        typename T\n        >\n    class is_pointer_type<T*>\n    {\n    public:\n        enum { value = true };\n    private:\n        is_pointer_type();\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_const_type\n\n        This is a template where is_const_type<T>::value == true when T is a const \n        type and false otherwise.\n    !*/\n\n    template <typename T>\n    struct is_const_type\n    {\n        static const bool value = false;\n    };\n    template <typename T>\n    struct is_const_type<const T>\n    {\n        static const bool value = true;\n    };\n    template <typename T>\n    struct is_const_type<const T&>\n    {\n        static const bool value = true;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_reference_type \n\n        This is a template where is_reference_type<T>::value == true when T is a reference \n        type and false otherwise.\n    !*/\n\n    template <typename T>\n    struct is_reference_type\n    {\n        static const bool value = false;\n    };\n\n    template <typename T> struct is_reference_type<const T&> { static const bool value = true; };\n    template <typename T> struct is_reference_type<T&> { static const bool value = true; };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_same_type \n\n        This is a template where is_same_type<T,U>::value == true when T and U are the\n        same type and false otherwise.   \n    !*/\n\n    template <\n        typename T,\n        typename U\n        >\n    class is_same_type\n    {\n    public:\n        enum {value = false};\n    private:\n        is_same_type();\n    };\n\n    template <typename T>\n    class is_same_type<T,T>\n    {\n    public:\n        enum {value = true};\n    private:\n        is_same_type();\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_float_type\n\n        This is a template that can be used to determine if a type is one of the built\n        int floating point types (i.e. float, double, or long double).\n    !*/\n\n    template < typename T > struct is_float_type  { const static bool value = false; };\n    template <> struct is_float_type<float>       { const static bool value = true; };\n    template <> struct is_float_type<double>      { const static bool value = true; };\n    template <> struct is_float_type<long double> { const static bool value = true; };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_convertible\n\n        This is a template that can be used to determine if one type is convertible \n        into another type.\n\n        For example:\n            is_convertible<int,float>::value == true    // because ints are convertible to floats\n            is_convertible<int*,float>::value == false  // because int pointers are NOT convertible to floats\n    !*/\n\n    template <typename from, typename to>\n    struct is_convertible\n    {\n        struct yes_type { char a; };\n        struct no_type { yes_type a[2]; };\n        static const from& from_helper();\n        static yes_type test(to);\n        static no_type test(...);\n        const static bool value = sizeof(test(from_helper())) == sizeof(yes_type);\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_same_object \n\n        This is a templated function which checks if both of its arguments are actually\n        references to the same object.  It returns true if they are and false otherwise.\n\n    !*/\n\n    // handle the case where T and U are unrelated types.\n    template < typename T, typename U >\n    typename disable_if_c<is_convertible<T*, U*>::value || is_convertible<U*,T*>::value, bool>::type\n    is_same_object (\n        const T& a, \n        const U& b\n    ) \n    { \n        return ((void*)&a == (void*)&b); \n    }\n\n    // handle the case where T and U are related types because their pointers can be\n    // implicitly converted into one or the other.  E.g. a derived class and its base class. \n    // Or where both T and U are just the same type.  This way we make sure that if there is a\n    // valid way to convert between these two pointer types then we will take that route rather\n    // than the void* approach used otherwise.\n    template < typename T, typename U >\n    typename enable_if_c<is_convertible<T*, U*>::value || is_convertible<U*,T*>::value, bool>::type\n    is_same_object (\n        const T& a, \n        const U& b\n    ) \n    { \n        return (&a == &b); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_unsigned_type \n\n        This is a template where is_unsigned_type<T>::value == true when T is an unsigned\n        scalar type and false when T is a signed scalar type.\n    !*/\n    template <\n        typename T\n        >\n    struct is_unsigned_type\n    {\n        static const bool value = static_cast<T>((static_cast<T>(0)-static_cast<T>(1))) > 0;\n    };\n    template <> struct is_unsigned_type<long double> { static const bool value = false; };\n    template <> struct is_unsigned_type<double>      { static const bool value = false; };\n    template <> struct is_unsigned_type<float>       { static const bool value = false; };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_signed_type \n\n        This is a template where is_signed_type<T>::value == true when T is a signed\n        scalar type and false when T is an unsigned scalar type.\n    !*/\n    template <\n        typename T\n        >\n    struct is_signed_type\n    {\n        static const bool value = !is_unsigned_type<T>::value;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class copy_functor\n    {\n    public:\n        void operator() (\n            const T& source, \n            T& destination\n        ) const\n        {\n            destination = source;\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A static_switch\n\n        To use this template you give it some number of boolean expressions and it\n        tells you which one of them is true.   If more than one of them is true then\n        it causes a compile time error.\n\n        for example:\n            static_switch<1 + 1 == 2, 4 - 1 == 4>::value == 1  // because the first expression is true\n            static_switch<1 + 1 == 3, 4 == 4>::value == 2      // because the second expression is true\n            static_switch<1 + 1 == 3, 4 == 5>::value == 0      // 0 here because none of them are true \n            static_switch<1 + 1 == 2, 4 == 4>::value == compiler error  // because more than one expression is true \n    !*/\n\n    template < bool v1 = 0, bool v2 = 0, bool v3 = 0, bool v4 = 0, bool v5 = 0,\n               bool v6 = 0, bool v7 = 0, bool v8 = 0, bool v9 = 0, bool v10 = 0, \n               bool v11 = 0, bool v12 = 0, bool v13 = 0, bool v14 = 0, bool v15 = 0 >\n    struct static_switch; \n\n    template <> struct static_switch<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0> { const static int value = 0; };\n    template <> struct static_switch<1,0,0,0,0,0,0,0,0,0,0,0,0,0,0> { const static int value = 1; };\n    template <> struct static_switch<0,1,0,0,0,0,0,0,0,0,0,0,0,0,0> { const static int value = 2; };\n    template <> struct static_switch<0,0,1,0,0,0,0,0,0,0,0,0,0,0,0> { const static int value = 3; };\n    template <> struct static_switch<0,0,0,1,0,0,0,0,0,0,0,0,0,0,0> { const static int value = 4; };\n    template <> struct static_switch<0,0,0,0,1,0,0,0,0,0,0,0,0,0,0> { const static int value = 5; };\n    template <> struct static_switch<0,0,0,0,0,1,0,0,0,0,0,0,0,0,0> { const static int value = 6; };\n    template <> struct static_switch<0,0,0,0,0,0,1,0,0,0,0,0,0,0,0> { const static int value = 7; };\n    template <> struct static_switch<0,0,0,0,0,0,0,1,0,0,0,0,0,0,0> { const static int value = 8; };\n    template <> struct static_switch<0,0,0,0,0,0,0,0,1,0,0,0,0,0,0> { const static int value = 9; };\n    template <> struct static_switch<0,0,0,0,0,0,0,0,0,1,0,0,0,0,0> { const static int value = 10; };\n    template <> struct static_switch<0,0,0,0,0,0,0,0,0,0,1,0,0,0,0> { const static int value = 11; };\n    template <> struct static_switch<0,0,0,0,0,0,0,0,0,0,0,1,0,0,0> { const static int value = 12; };\n    template <> struct static_switch<0,0,0,0,0,0,0,0,0,0,0,0,1,0,0> { const static int value = 13; };\n    template <> struct static_switch<0,0,0,0,0,0,0,0,0,0,0,0,0,1,0> { const static int value = 14; };\n    template <> struct static_switch<0,0,0,0,0,0,0,0,0,0,0,0,0,0,1> { const static int value = 15; };\n\n// ----------------------------------------------------------------------------------------\n    /*!A is_built_in_scalar_type\n        \n        This is a template that allows you to determine if the given type is a built\n        in scalar type such as an int, char, float, short, etc.\n\n        For example, is_built_in_scalar_type<char>::value == true\n        For example, is_built_in_scalar_type<std::string>::value == false \n    !*/\n\n    template <typename T> struct is_built_in_scalar_type        { const static bool value = false; };\n\n    template <> struct is_built_in_scalar_type<float>           { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<double>          { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<long double>     { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<short>           { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<int>             { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<long>            { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<unsigned short>  { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<unsigned int>    { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<unsigned long>   { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<uint64>          { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<int64>           { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<char>            { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<signed char>     { const static bool value = true; };\n    template <> struct is_built_in_scalar_type<unsigned char>   { const static bool value = true; };\n    // Don't define one for wchar_t when using a version of visual studio\n    // older than 8.0 (visual studio 2005) since before then they improperly set\n    // wchar_t to be a typedef rather than its own type as required by the C++ \n    // standard.\n#if !defined(_MSC_VER) || _NATIVE_WCHAR_T_DEFINED\n    template <> struct is_built_in_scalar_type<wchar_t>         { const static bool value = true; };\n#endif\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename T\n        >\n    typename enable_if<is_built_in_scalar_type<T>,bool>::type is_finite (\n        const T& value\n    )\n    /*!\n        requires\n            - value must be some kind of scalar type such as int or double\n        ensures\n            - returns true if value is a finite value (e.g. not infinity or NaN) and false\n              otherwise.\n    !*/\n    {\n        if (is_float_type<T>::value)\n            return -std::numeric_limits<T>::infinity() < value && value < std::numeric_limits<T>::infinity();\n        else\n            return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A promote \n        \n        This is a template that takes one of the built in scalar types and gives you another\n        scalar type that should be big enough to hold sums of values from the original scalar \n        type.  The new scalar type will also always be signed.\n\n        For example, promote<uint16>::type == int32\n    !*/\n\n    template <typename T, size_t s = sizeof(T)> struct promote;\n    template <typename T> struct promote<T,1> { typedef int32 type; };\n    template <typename T> struct promote<T,2> { typedef int32 type; };\n    template <typename T> struct promote<T,4> { typedef int64 type; };\n    template <typename T> struct promote<T,8> { typedef int64 type; };\n\n    template <> struct promote<float,sizeof(float)>             { typedef double type; };\n    template <> struct promote<double,sizeof(double)>           { typedef double type; };\n    template <> struct promote<long double,sizeof(long double)> { typedef long double type; };\n\n// ----------------------------------------------------------------------------------------\n    \n    /*!A assign_zero_if_built_in_scalar_type\n\n        This function assigns its argument the value of 0 if it is a built in scalar\n        type according to the is_built_in_scalar_type<> template.  If it isn't a\n        built in scalar type then it does nothing.\n    !*/\n\n    template <typename T> inline typename disable_if<is_built_in_scalar_type<T>,void>::type assign_zero_if_built_in_scalar_type (T&){}\n    template <typename T> inline typename enable_if<is_built_in_scalar_type<T>,void>::type assign_zero_if_built_in_scalar_type (T& a){a=0;}\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A basic_type\n\n        This is a template that takes a type and strips off any const, volatile, or reference\n        qualifiers and gives you back the basic underlying type.  So for example:\n\n        basic_type<const int&>::type == int\n    !*/\n\n    template <typename T> struct basic_type { typedef T type; };\n    template <typename T> struct basic_type<const T> { typedef T type; };\n    template <typename T> struct basic_type<const T&> { typedef T type; };\n    template <typename T> struct basic_type<volatile const T&> { typedef T type; };\n    template <typename T> struct basic_type<T&> { typedef T type; };\n    template <typename T> struct basic_type<volatile T&> { typedef T type; };\n    template <typename T> struct basic_type<volatile T> { typedef T type; };\n    template <typename T> struct basic_type<volatile const T> { typedef T type; };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    T put_in_range (\n        const T& a, \n        const T& b, \n        const T& val\n    )\n    /*!\n        requires\n            - T is a type that looks like double, float, int, or so forth\n        ensures\n            - if (val is within the range [a,b]) then\n                - returns val\n            - else \n                - returns the end of the range [a,b] that is closest to val\n    !*/\n    {\n        if (a < b)\n        {\n            if (val < a)\n                return a;\n            else if (val > b)\n                return b;\n        }\n        else\n        {\n            if (val < b)\n                return b;\n            else if (val > a)\n                return a;\n        }\n\n        return val;\n    }\n\n    // overload for double \n    inline double put_in_range(const double& a, const double& b, const double& val)\n    { return put_in_range<double>(a,b,val); }\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A tabs \n\n        This is a template to compute the absolute value a number at compile time.\n\n        For example,\n            abs<-4>::value == 4\n            abs<4>::value == 4\n    !*/\n\n        template <long x, typename enabled=void>\n        struct tabs { const static long value = x; };\n        template <long x>\n        struct tabs<x,typename enable_if_c<(x < 0)>::type> { const static long value = -x; };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A tmax\n\n        This is a template to compute the max of two values at compile time\n\n        For example,\n            abs<4,7>::value == 7\n    !*/\n\n        template <long x, long y, typename enabled=void>\n        struct tmax { const static long value = x; };\n        template <long x, long y>\n        struct tmax<x,y,typename enable_if_c<(y > x)>::type> { const static long value = y; };\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A tmin \n\n        This is a template to compute the min of two values at compile time\n\n        For example,\n            abs<4,7>::value == 4\n    !*/\n\n        template <long x, long y, typename enabled=void>\n        struct tmin { const static long value = x; };\n        template <long x, long y>\n        struct tmin<x,y,typename enable_if_c<(y < x)>::type> { const static long value = y; };\n\n    // ----------------------------------------------------------------------------------------\n\n#define DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(testname, returnT, funct_name, args)                        \\\n    struct _two_bytes_##testname { char a[2]; };                                                       \\\n    template < typename T, returnT (T::*funct)args >                                                   \\\n    struct _helper_##testname { typedef char type; };                                                  \\\n    template <typename T>                                                                              \\\n    static char _has_##testname##_helper( typename _helper_##testname<T,&T::funct_name >::type ) { return 0;} \\\n    template <typename T>                                                                              \\\n    static _two_bytes_##testname _has_##testname##_helper(int) { return _two_bytes_##testname();}             \\\n    template <typename T> struct _##testname##workaroundbug {                                          \\\n                const static unsigned long U = sizeof(_has_##testname##_helper<T>('a')); };            \\\n    template <typename T, unsigned long U = _##testname##workaroundbug<T>::U >                         \\\n    struct testname      { static const bool value = false; };                                         \\\n    template <typename T>                                                                              \\\n    struct testname<T,1> { static const bool value = true; };\n    /*!A DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST\n\n        The DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST() macro is used to define traits templates\n        that tell you if a class has a certain member function.  For example, to make a\n        test to see if a class has a public method with the signature void print(int) you\n        would say:\n            DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(has_print, void, print, (int))\n\n        Then you can check if a class, T, has this method by looking at the boolean value:\n            has_print<T>::value \n        which will be true if the member function is in the T class.\n\n        Note that you can test for member functions taking no arguments by simply passing\n        in empty () like so:\n            DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(has_print, void, print, ())\n        This would test for a member of the form:\n            void print().\n\n        To test for const member functions you would use a statement such as this:\n            DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(has_print, void, print, ()const)\n        This would test for a member of the form: \n            void print() const.\n\n        To test for const templated member functions you would use a statement such as this:\n            DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(has_print, void, template print<int>, ())\n        This would test for a member of the form: \n            template <typename T> void print().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_function \n        \n        This is a template that allows you to determine if the given type is a function.\n\n        For example,\n            void funct();\n\n            is_built_in_scalar_type<funct>::value == true\n            is_built_in_scalar_type<int>::value == false \n    !*/\n\n    template <typename T> struct is_function { static const bool value = false; };\n    template <typename T> \n    struct is_function<T (void)> { static const bool value = true; };\n    template <typename T, typename A0> \n    struct is_function<T (A0)> { static const bool value = true; };\n    template <typename T, typename A0, typename A1> \n    struct is_function<T (A0, A1)> { static const bool value = true; };\n    template <typename T, typename A0, typename A1, typename A2> \n    struct is_function<T (A0, A1, A2)> { static const bool value = true; };\n    template <typename T, typename A0, typename A1, typename A2, typename A3> \n    struct is_function<T (A0, A1, A2, A3)> { static const bool value = true; };\n    template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4> \n    struct is_function<T (A0, A1, A2, A3, A4)> { static const bool value = true; };\n    template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4,\n                          typename A5> \n    struct is_function<T (A0,A1,A2,A3,A4,A5)> { static const bool value = true; };\n    template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4,\n                          typename A5, typename A6> \n    struct is_function<T (A0,A1,A2,A3,A4,A5,A6)> { static const bool value = true; };\n    template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4,\n                          typename A5, typename A6, typename A7> \n    struct is_function<T (A0,A1,A2,A3,A4,A5,A6,A7)> { static const bool value = true; };\n    template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4,\n                          typename A5, typename A6, typename A7, typename A8> \n    struct is_function<T (A0,A1,A2,A3,A4,A5,A6,A7,A8)> { static const bool value = true; };\n    template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4,\n                          typename A5, typename A6, typename A7, typename A8, typename A9> \n    struct is_function<T (A0,A1,A2,A3,A4,A5,A6,A7,A8,A9)> { static const bool value = true; };\n\n\n    template <typename T> class funct_wrap0\n    {\n    public:\n        funct_wrap0(T (&f_)()):f(f_){}\n        T operator()() const { return f(); }\n    private:\n        T (&f)();\n    };\n    template <typename T, typename A0> class funct_wrap1\n    {\n    public:\n        funct_wrap1(T (&f_)(A0)):f(f_){}\n        T operator()(A0 a0) const { return f(a0); }\n    private:\n        T (&f)(A0);\n    };\n    template <typename T, typename A0, typename A1> class funct_wrap2\n    {\n    public:\n        funct_wrap2(T (&f_)(A0,A1)):f(f_){}\n        T operator()(A0 a0, A1 a1) const { return f(a0,a1); }\n    private:\n        T (&f)(A0,A1);\n    };\n    template <typename T, typename A0, typename A1, typename A2> class funct_wrap3\n    {\n    public:\n        funct_wrap3(T (&f_)(A0,A1,A2)):f(f_){}\n        T operator()(A0 a0, A1 a1, A2 a2) const { return f(a0,a1,a2); }\n    private:\n        T (&f)(A0,A1,A2);\n    };\n    template <typename T, typename A0, typename A1, typename A2, typename A3> class funct_wrap4\n    {\n    public:\n        funct_wrap4(T (&f_)(A0,A1,A2,A3)):f(f_){}\n        T operator()(A0 a0, A1 a1, A2 a2, A3 a3) const { return f(a0,a1,a2,a3); }\n    private:\n        T (&f)(A0,A1,A2,A3);\n    };\n    template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4> class funct_wrap5\n    {\n    public:\n        funct_wrap5(T (&f_)(A0,A1,A2,A3,A4)):f(f_){}\n        T operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const { return f(a0,a1,a2,a3,a4); }\n    private:\n        T (&f)(A0,A1,A2,A3,A4);\n    };\n\n    /*!A wrap_function \n        \n        This is a template that allows you to turn a global function into a \n        function object.  The reason for this template's existance is so you can\n        do stuff like this:\n            \n            template <typename T>\n            void call_funct(const T& funct)\n            {  cout << funct(); }\n\n            std::string test() { return \"asdfasf\"; }\n\n            int main()\n            {\n                call_funct(wrap_function(test));\n            }\n\n        The above code doesn't work right on some compilers if you don't\n        use wrap_function.  \n    !*/\n\n    template <typename T>\n    funct_wrap0<T> wrap_function(T (&f)()) { return funct_wrap0<T>(f); }\n    template <typename T, typename A0>\n    funct_wrap1<T,A0> wrap_function(T (&f)(A0)) { return funct_wrap1<T,A0>(f); }\n    template <typename T, typename A0, typename A1>\n    funct_wrap2<T,A0,A1> wrap_function(T (&f)(A0, A1)) { return funct_wrap2<T,A0,A1>(f); }\n    template <typename T, typename A0, typename A1, typename A2>\n    funct_wrap3<T,A0,A1,A2> wrap_function(T (&f)(A0, A1, A2)) { return funct_wrap3<T,A0,A1,A2>(f); }\n    template <typename T, typename A0, typename A1, typename A2, typename A3>\n    funct_wrap4<T,A0,A1,A2,A3> wrap_function(T (&f)(A0, A1, A2, A3)) { return funct_wrap4<T,A0,A1,A2,A3>(f); }\n    template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4>\n    funct_wrap5<T,A0,A1,A2,A3,A4> wrap_function(T (&f)(A0, A1, A2, A3, A4)) { return funct_wrap5<T,A0,A1,A2,A3,A4>(f); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <unsigned long bSIZE>\n    class stack_based_memory_block : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple container for a block of memory\n                of bSIZE bytes.  This memory block is located on the stack\n                and properly aligned to hold any kind of object.\n        !*/\n    public:\n        static const unsigned long size = bSIZE;\n\n        stack_based_memory_block(): data(mem.data) {}\n\n        void* get () { return data; }\n        /*!\n            ensures\n                - returns a pointer to the block of memory contained in this object\n        !*/\n\n        const void* get () const { return data; }\n        /*!\n            ensures\n                - returns a pointer to the block of memory contained in this object\n        !*/\n\n    private:\n\n        // You obviously can't have a block of memory that has zero bytes in it.\n        COMPILE_TIME_ASSERT(bSIZE > 0);\n        \n        union mem_block\n        {\n            // All of this garbage is to make sure this union is properly aligned \n            // (a union is always aligned such that everything in it would be properly\n            // aligned.  So the assumption here is that one of these objects has \n            // a large enough alignment requirement to satisfy any object this\n            // block of memory might be cast into).\n            void* void_ptr;\n            int integer;\n            struct {\n                void (stack_based_memory_block::*callback)();\n                stack_based_memory_block* o; \n            } stuff;\n            long double more_stuff;\n\n            uint64 var1;\n            uint32 var2;\n            double var3;\n\n            char data[size]; \n        } mem;\n\n        // The reason for having this variable is that doing it this way avoids\n        // warnings from gcc about violations of strict-aliasing rules.\n        void* const data; \n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ALGs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/all/source.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ALL_SOURCe_\n#define DLIB_ALL_SOURCe_\n\n// ISO C++ code\n#include \"../base64/base64_kernel_1.cpp\"\n//#include \"../bigint/bigint_kernel_1.cpp\"\n//#include \"../bigint/bigint_kernel_2.cpp\"\n#include \"../bit_stream/bit_stream_kernel_1.cpp\"\n#include \"../entropy_decoder/entropy_decoder_kernel_1.cpp\"\n#include \"../entropy_decoder/entropy_decoder_kernel_2.cpp\"\n#include \"../entropy_encoder/entropy_encoder_kernel_1.cpp\"\n#include \"../entropy_encoder/entropy_encoder_kernel_2.cpp\"\n//#include \"../md5/md5_kernel_1.cpp\"\n#include \"../tokenizer/tokenizer_kernel_1.cpp\"\n//#include \"../unicode/unicode.cpp\"\n//#include \"../data_io/image_dataset_metadata.cpp\"\n\n#ifndef DLIB_ISO_CPP_ONLY\n// Code that depends on OS specific APIs\n\n// include this first so that it can disable the older version\n// of the winsock API when compiled in windows.\n#include \"../sockets/sockets_kernel_1.cpp\"\n//#include \"../bsp/bsp.cpp\"\n\n//#include \"../dir_nav/dir_nav_kernel_1.cpp\"\n//#include \"../dir_nav/dir_nav_kernel_2.cpp\"\n//#include \"../dir_nav/dir_nav_extensions.cpp\"\n//#include \"../linker/linker_kernel_1.cpp\"\n//#include \"../logger/extra_logger_headers.cpp\"\n//#include \"../logger/logger_kernel_1.cpp\"\n//#include \"../logger/logger_config_file.cpp\"\n#include \"../misc_api/misc_api_kernel_1.cpp\"\n#include \"../misc_api/misc_api_kernel_2.cpp\"\n#include \"../sockets/sockets_extensions.cpp\"\n#include \"../sockets/sockets_kernel_2.cpp\"\n#include \"../sockstreambuf/sockstreambuf.cpp\"\n#include \"../sockstreambuf/sockstreambuf_unbuffered.cpp\"\n//#include \"../server/server_kernel.cpp\"\n//#include \"../server/server_iostream.cpp\"\n//#include \"../server/server_http.cpp\"\n//#include \"../threads/multithreaded_object_extension.cpp\"\n#include \"../threads/threaded_object_extension.cpp\"\n#include \"../threads/threads_kernel_1.cpp\"\n#include \"../threads/threads_kernel_2.cpp\"\n#include \"../threads/threads_kernel_shared.cpp\"\n//#include \"../threads/thread_pool_extension.cpp\"\n#include \"../timer/timer.cpp\"\n//#include \"../stack_trace.cpp\"\n\n#ifdef DLIB_PNG_SUPPORT\n#include \"../image_loader/png_loader.cpp\"\n#include \"../image_saver/save_png.cpp\"\n#endif\n\n#ifdef DLIB_JPEG_SUPPORT\n#include \"../image_loader/jpeg_loader.cpp\"\n#endif\n\n#ifndef DLIB_NO_GUI_SUPPORT\n#include \"../gui_widgets/fonts.cpp\"\n#include \"../gui_widgets/widgets.cpp\"\n#include \"../gui_widgets/drawable.cpp\"\n#include \"../gui_widgets/canvas_drawing.cpp\"\n#include \"../gui_widgets/style.cpp\"\n#include \"../gui_widgets/base_widgets.cpp\"\n#include \"../gui_core/gui_core_kernel_1.cpp\"\n#include \"../gui_core/gui_core_kernel_2.cpp\"\n#endif // DLIB_NO_GUI_SUPPORT\n\n#endif // DLIB_ISO_CPP_ONLY\n\n#endif // DLIB_ALL_SOURCe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/all_console.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ALL_CONSOLe_\n#define DLIB_ALL_CONSOLe_\n\n#error \"This file has been replaced.  Instead you should add dlib/all/source.cpp to your project\"\n\n#endif // DLIB_ALL_CONSOLe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/all_gui.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ALL_GUi_\n#define DLIB_ALL_GUi_\n\n#error \"This file has been replaced.  Instead you should add dlib/all/source.cpp to your project\"\n\n#endif // DLIB_ALL_GUi_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_AnY_H_\n#define DLIB_AnY_H_\n\n#include \"any_abstract.h\"\n#include \"../smart_pointers.h\"\n#include <typeinfo>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class bad_any_cast : public std::bad_cast \n    {\n    public:\n          virtual const char * what() const throw()\n          {\n              return \"bad_any_cast\";\n          }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class any\n    {\n\n    public:\n\n        any()\n        {\n        }\n\n        any (\n            const any& item\n        )\n        {\n            if (item.data)\n            {\n                item.data->copy_to(data);\n            }\n        }\n\n        template <typename T>\n        any (\n            const T& item\n        )\n        {\n            typedef typename basic_type<T>::type U;\n            data.reset(new derived<U>(item));\n        }\n\n        void clear (\n        )\n        {\n            data.reset();\n        }\n\n        template <typename T>\n        bool contains (\n        ) const\n        {\n            typedef typename basic_type<T>::type U;\n            return dynamic_cast<derived<U>*>(data.get()) != 0;\n        }\n\n        bool is_empty(\n        ) const\n        {\n            return data.get() == 0;\n        }\n\n        template <typename T>\n        T& cast_to(\n        ) \n        {\n            typedef typename basic_type<T>::type U;\n            derived<U>* d = dynamic_cast<derived<U>*>(data.get());\n            if (d == 0)\n            {\n                throw bad_any_cast();\n            }\n\n            return d->item;\n        }\n\n        template <typename T>\n        const T& cast_to(\n        ) const\n        {\n            typedef typename basic_type<T>::type U;\n            derived<U>* d = dynamic_cast<derived<U>*>(data.get());\n            if (d == 0)\n            {\n                throw bad_any_cast();\n            }\n\n            return d->item;\n        }\n\n        template <typename T>\n        T& get(\n        ) \n        {\n            typedef typename basic_type<T>::type U;\n            derived<U>* d = dynamic_cast<derived<U>*>(data.get());\n            if (d == 0)\n            {\n                d = new derived<U>();\n                data.reset(d);\n            }\n\n            return d->item;\n        }\n\n        any& operator= (\n            const any& item\n        )\n        {\n            any(item).swap(*this);\n            return *this;\n        }\n\n        void swap (\n            any& item\n        )\n        {\n            data.swap(item.data);\n        }\n\n    private:\n\n        struct base\n        {\n            virtual ~base() {}\n\n            virtual void copy_to (\n                scoped_ptr<base>& dest\n            ) const = 0;\n        };\n\n        template <typename T>\n        struct derived : public base\n        {\n            T item;\n            derived() {}\n            derived(const T& val) : item(val) {}\n\n            virtual void copy_to (\n                scoped_ptr<base>& dest\n            ) const\n            {\n                dest.reset(new derived<T>(item));\n            }\n        };\n\n        scoped_ptr<base> data;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        any& a,\n        any& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T> T& any_cast(any& a) { return a.cast_to<T>(); }\n    template <typename T> const T& any_cast(const any& a) { return a.cast_to<T>(); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#endif // DLIB_AnY_H_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_AnY_ABSTRACT_H_\n#ifdef DLIB_AnY_ABSTRACT_H_\n\n#include <typeinfo>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class bad_any_cast : public std::bad_cast \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is the exception class used by the any object.\n                It is used to indicate when someone attempts to cast an any\n                object into a type which isn't contained in the any object.\n        !*/\n\n    public:\n          virtual const char* what() const throw() { return \"bad_any_cast\"; }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class any\n    {\n        /*!\n            INITIAL VALUE\n                - is_empty() == true\n                - for all T: contains<T>() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is basically a type-safe version of a void*.  In particular,\n                it is a container which can contain only one object but the object may\n                be of any type.  \n\n                It is somewhat like the type_safe_union except you don't have to declare \n                the set of possible content types beforehand.  So in some sense this is \n                like a less type-strict version of the type_safe_union.\n        !*/\n\n    public:\n\n        any(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        any (\n            const any& item\n        );\n        /*!\n            ensures\n                - copies the state of item into *this.  \n                - Note that *this and item will contain independent copies of the\n                  contents of item.  That is, this function performs a deep\n                  copy and therefore does not result in *this containing\n                  any kind of reference to item.\n        !*/\n\n        template < typename T >\n        any (\n            const T& item\n        );\n        /*!\n            ensures\n                - #contains<T>() == true\n                - #cast_to<T>() == item\n                  (i.e. a copy of item will be stored in *this)\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - #*this will have its default value.  I.e. #is_empty() == true\n        !*/\n\n        template <typename T>\n        bool contains (\n        ) const;\n        /*!\n            ensures\n                - if (this object currently contains an object of type T) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool is_empty(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains any kind of object) then\n                    - returns false \n                - else\n                    - returns true \n        !*/\n\n        template <typename T>\n        T& cast_to(\n        );\n        /*!\n            ensures\n                - if (contains<T>() == true) then\n                    - returns a non-const reference to the object contained within *this\n                - else\n                    - throws bad_any_cast\n        !*/\n\n        template <typename T>\n        const T& cast_to(\n        ) const;\n        /*!\n            ensures\n                - if (contains<T>() == true) then\n                    - returns a const reference to the object contained within *this\n                - else\n                    - throws bad_any_cast\n        !*/\n\n        template <typename T>\n        T& get(\n        );\n        /*!\n            ensures\n                - #is_empty() == false\n                - #contains<T>() == true\n                - if (contains<T>() == true)\n                    - returns a non-const reference to the object contained in *this.\n                - else\n                    - Constructs an object of type T inside *this\n                    - Any previous object stored in this any object is destructed and its\n                      state is lost.\n                    - returns a non-const reference to the newly created T object.\n        !*/\n\n        any& operator= (\n            const any& item\n        );\n        /*!\n            ensures\n                - copies the state of item into *this.  \n                - Note that *this and item will contain independent copies of the\n                  contents of item.  That is, this function performs a deep\n                  copy and therefore does not result in *this containing\n                  any kind of reference to item.\n        !*/\n\n        void swap (\n            any& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n                - does not invalidate pointers or references to the object contained \n                  inside *this or item.  Moreover, a pointer or reference to the object in \n                  *this will now refer to the contents of #item and vice versa.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        any& a,\n        any& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        > \n    T& any_cast(\n        any& a\n    ) { return a.cast_to<T>(); }\n    /*!\n        ensures\n            - returns a.cast_to<T>()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        > \n    const T& any_cast(\n        const any& a\n    ) { return a.cast_to<T>(); }\n    /*!\n        ensures\n            - returns a.cast_to<T>()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AnY_ABSTRACT_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any_decision_function.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_AnY_DECISION_FUNCTION_Hh_\n#define DLIB_AnY_DECISION_FUNCTION_Hh_\n\n#include \"any.h\"\n#include \"../smart_pointers.h\"\n\n#include \"any_decision_function_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type_,\n        typename result_type_ = double\n        >\n    class any_decision_function\n    {\n\n    public:\n\n        typedef sample_type_ sample_type;\n        typedef result_type_ result_type;\n        typedef default_memory_manager mem_manager_type;\n\n        any_decision_function()\n        {\n        }\n\n        any_decision_function (\n            const any_decision_function& item\n        )\n        {\n            if (item.data)\n            {\n                item.data->copy_to(data);\n            }\n        }\n\n        template <typename T>\n        any_decision_function (\n            const T& item\n        )\n        {\n            typedef typename basic_type<T>::type U;\n            data.reset(new derived<U>(item));\n        }\n\n        void clear (\n        )\n        {\n            data.reset();\n        }\n\n        template <typename T>\n        bool contains (\n        ) const\n        {\n            typedef typename basic_type<T>::type U;\n            return dynamic_cast<derived<U>*>(data.get()) != 0;\n        }\n\n        bool is_empty(\n        ) const\n        {\n            return data.get() == 0;\n        }\n\n        result_type operator() (\n            const sample_type& item\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_empty() == false,\n                \"\\t result_type any_decision_function::operator()\"\n                << \"\\n\\t You can't call operator() on an empty any_decision_function\"\n                << \"\\n\\t this: \" << this\n                );\n\n            return data->evaluate(item);\n        }\n\n        template <typename T>\n        T& cast_to(\n        ) \n        {\n            typedef typename basic_type<T>::type U;\n            derived<U>* d = dynamic_cast<derived<U>*>(data.get());\n            if (d == 0)\n            {\n                throw bad_any_cast();\n            }\n\n            return d->item;\n        }\n\n        template <typename T>\n        const T& cast_to(\n        ) const\n        {\n            typedef typename basic_type<T>::type U;\n            derived<U>* d = dynamic_cast<derived<U>*>(data.get());\n            if (d == 0)\n            {\n                throw bad_any_cast();\n            }\n\n            return d->item;\n        }\n\n        template <typename T>\n        T& get(\n        ) \n        {\n            typedef typename basic_type<T>::type U;\n            derived<U>* d = dynamic_cast<derived<U>*>(data.get());\n            if (d == 0)\n            {\n                d = new derived<U>();\n                data.reset(d);\n            }\n\n            return d->item;\n        }\n\n        any_decision_function& operator= (\n            const any_decision_function& item\n        )\n        {\n            any_decision_function(item).swap(*this);\n            return *this;\n        }\n\n        void swap (\n            any_decision_function& item\n        )\n        {\n            data.swap(item.data);\n        }\n\n    private:\n\n        struct base\n        {\n            virtual ~base() {}\n\n            virtual void copy_to (\n                scoped_ptr<base>& dest\n            ) const = 0;\n\n            virtual result_type evaluate (\n                const sample_type& samp\n            ) const = 0;\n        };\n\n        template <typename T>\n        struct derived : public base\n        {\n            T item;\n            derived() {}\n            derived(const T& val) : item(val) {}\n\n            virtual void copy_to (\n                scoped_ptr<base>& dest\n            ) const\n            {\n                dest.reset(new derived<T>(item));\n            }\n\n            virtual result_type evaluate (\n                const sample_type& samp\n            ) const \n            {\n                return item(samp);\n            }\n        };\n\n        scoped_ptr<base> data;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type,\n        typename result_type\n        >\n    inline void swap (\n        any_decision_function<sample_type, result_type>& a,\n        any_decision_function<sample_type, result_type>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename V> \n    T& any_cast(any_decision_function<U,V>& a) { return a.template cast_to<T>(); }\n\n    template <typename T, typename U, typename V> \n    const T& any_cast(const any_decision_function<U,V>& a) { return a.template cast_to<T>(); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#endif // DLIB_AnY_DECISION_FUNCTION_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any_decision_function_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_AnY_DECISION_FUNCTION_ABSTRACT_H_\n#ifdef DLIB_AnY_DECISION_FUNCTION_ABSTRACT_H_\n\n#include \"any_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type_,\n        typename result_type_ = double\n        >\n    class any_decision_function\n    {\n        /*!\n            INITIAL VALUE\n                - is_empty() == true\n                - for all T: contains<T>() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a version of dlib::any that is restricted to containing \n                elements which are some kind of function object with an operator() with \n                the following signature: \n                    result_type operator()(const sample_type&) const\n\n                It is intended to be used to contain dlib::decision_function objects and\n                other types which represent learned decision functions.  It allows you\n                to write code which contains and processes these decision functions\n                without needing to know the specific types of decision functions used.\n        !*/\n\n    public:\n\n        typedef sample_type_ sample_type;\n        typedef result_type_ result_type;\n        typedef default_memory_manager mem_manager_type;\n\n        any_decision_function(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        any_decision_function (\n            const any_decision_function& item\n        );\n        /*!\n            ensures\n                - copies the state of item into *this.  \n                - Note that *this and item will contain independent copies of the\n                  contents of item.  That is, this function performs a deep\n                  copy and therefore does not result in *this containing\n                  any kind of reference to item.\n        !*/\n\n        template < typename T >\n        any_decision_function (\n            const T& item\n        );\n        /*!\n            ensures\n                - #contains<T>() == true\n                - #cast_to<T>() == item\n                  (i.e. a copy of item will be stored in *this)\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - #*this will have its default value.  I.e. #is_empty() == true\n        !*/\n\n        template <typename T>\n        bool contains (\n        ) const;\n        /*!\n            ensures\n                - if (this object currently contains an object of type T) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool is_empty(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains any kind of object) then\n                    - returns false \n                - else\n                    - returns true\n        !*/\n\n        result_type operator() (\n            const sample_type& item\n        ) const;\n        /*!\n            requires\n                - is_empty() == false\n            ensures\n                - Let F denote the function object contained within *this.  Then\n                  this function performs:\n                    return F(item)\n        !*/\n\n        template <typename T>\n        T& cast_to(\n        );\n        /*!\n            ensures\n                - if (contains<T>() == true) then\n                    - returns a non-const reference to the object contained within *this\n                - else\n                    - throws bad_any_cast\n        !*/\n\n        template <typename T>\n        const T& cast_to(\n        ) const;\n        /*!\n            ensures\n                - if (contains<T>() == true) then\n                    - returns a const reference to the object contained within *this\n                - else\n                    - throws bad_any_cast\n        !*/\n\n        template <typename T>\n        T& get(\n        );\n        /*!\n            ensures\n                - #is_empty() == false\n                - #contains<T>() == true\n                - if (contains<T>() == true)\n                    - returns a non-const reference to the object contained in *this.\n                - else\n                    - Constructs an object of type T inside *this\n                    - Any previous object stored in this any_decision_function object is destructed and its\n                      state is lost.\n                    - returns a non-const reference to the newly created T object.\n        !*/\n\n        any_decision_function& operator= (\n            const any_decision_function& item\n        );\n        /*!\n            ensures\n                - copies the state of item into *this.  \n                - Note that *this and item will contain independent copies of the\n                  contents of item.  That is, this function performs a deep\n                  copy and therefore does not result in *this containing\n                  any kind of reference to item.\n        !*/\n\n        void swap (\n            any_decision_function& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type,\n        typename result_type\n        >\n    inline void swap (\n        any_decision_function<sample_type,result_type>& a,\n        any_decision_function<sample_type,result_type>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename sample_type,\n        typename result_type\n        > \n    T& any_cast(\n        any_decision_function<sample_type,result_type>& a\n    ) { return a.cast_to<T>(); }\n    /*!\n        ensures\n            - returns a.cast_to<T>()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename sample_type,\n        typename result_type\n        > \n    const T& any_cast(\n        const any_decision_function<sample_type,result_type>& a\n    ) { return a.cast_to<T>(); }\n    /*!\n        ensures\n            - returns a.cast_to<T>()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AnY_DECISION_FUNCTION_ABSTRACT_H_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any_function.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_AnY_FUNCTION_Hh_\n#define DLIB_AnY_FUNCTION_Hh_\n\n#include \"any.h\"\n#include \"../smart_pointers.h\"\n\n#include \"any_function_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct sig_traits {};\n\n    template <\n        typename T\n        >\n    struct sig_traits<T ()> \n    { \n        typedef T result_type; \n        typedef void arg1_type; \n        typedef void arg2_type; \n        typedef void arg3_type; \n        typedef void arg4_type; \n        typedef void arg5_type; \n        typedef void arg6_type; \n        typedef void arg7_type; \n        typedef void arg8_type; \n        typedef void arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 0;\n    };\n\n    template <\n        typename T,\n        typename A1\n        >\n    struct sig_traits<T (A1)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef void arg2_type; \n        typedef void arg3_type; \n        typedef void arg4_type; \n        typedef void arg5_type; \n        typedef void arg6_type; \n        typedef void arg7_type; \n        typedef void arg8_type; \n        typedef void arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 1;\n    };\n\n    template <\n        typename T,\n        typename A1, typename A2\n        >\n    struct sig_traits<T (A1,A2)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef A2 arg2_type; \n        typedef void arg3_type; \n        typedef void arg4_type; \n        typedef void arg5_type; \n        typedef void arg6_type; \n        typedef void arg7_type; \n        typedef void arg8_type; \n        typedef void arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 2;\n    };\n\n    template <\n        typename T,\n        typename A1, typename A2, typename A3\n        >\n    struct sig_traits<T (A1,A2,A3)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef A2 arg2_type; \n        typedef A3 arg3_type; \n        typedef void arg4_type; \n        typedef void arg5_type; \n        typedef void arg6_type; \n        typedef void arg7_type; \n        typedef void arg8_type; \n        typedef void arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 3;\n    };\n\n    template <\n        typename T,\n        typename A1, typename A2, typename A3,\n        typename A4\n        >\n    struct sig_traits<T (A1,A2,A3,A4)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef A2 arg2_type; \n        typedef A3 arg3_type; \n        typedef A4 arg4_type; \n        typedef void arg5_type; \n        typedef void arg6_type; \n        typedef void arg7_type; \n        typedef void arg8_type; \n        typedef void arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 4;\n    };\n\n    template <\n        typename T,\n        typename A1, typename A2, typename A3,\n        typename A4, typename A5\n        >\n    struct sig_traits<T (A1,A2,A3,A4,A5)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef A2 arg2_type; \n        typedef A3 arg3_type; \n        typedef A4 arg4_type; \n        typedef A5 arg5_type; \n        typedef void arg6_type; \n        typedef void arg7_type; \n        typedef void arg8_type; \n        typedef void arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 5;\n    };\n\n    template <\n        typename T,\n        typename A1, typename A2, typename A3,\n        typename A4, typename A5, typename A6\n        >\n    struct sig_traits<T (A1,A2,A3,A4,A5,A6)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef A2 arg2_type; \n        typedef A3 arg3_type; \n        typedef A4 arg4_type; \n        typedef A5 arg5_type; \n        typedef A6 arg6_type; \n        typedef void arg7_type; \n        typedef void arg8_type; \n        typedef void arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 6;\n    };\n\n    template <\n        typename T,\n        typename A1, typename A2, typename A3,\n        typename A4, typename A5, typename A6,\n        typename A7\n        >\n    struct sig_traits<T (A1,A2,A3,A4,A5,A6,A7)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef A2 arg2_type; \n        typedef A3 arg3_type; \n        typedef A4 arg4_type; \n        typedef A5 arg5_type; \n        typedef A6 arg6_type; \n        typedef A7 arg7_type; \n        typedef void arg8_type; \n        typedef void arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 7;\n    };\n\n    template <\n        typename T,\n        typename A1, typename A2, typename A3,\n        typename A4, typename A5, typename A6,\n        typename A7, typename A8\n        >\n    struct sig_traits<T (A1,A2,A3,A4,A5,A6,A7,A8)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef A2 arg2_type; \n        typedef A3 arg3_type; \n        typedef A4 arg4_type; \n        typedef A5 arg5_type; \n        typedef A6 arg6_type; \n        typedef A7 arg7_type; \n        typedef A8 arg8_type; \n        typedef void arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 8;\n    };\n\n    template <\n        typename T,\n        typename A1, typename A2, typename A3,\n        typename A4, typename A5, typename A6,\n        typename A7, typename A8, typename A9\n        >\n    struct sig_traits<T (A1,A2,A3,A4,A5,A6,A7,A8,A9)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef A2 arg2_type; \n        typedef A3 arg3_type; \n        typedef A4 arg4_type; \n        typedef A5 arg5_type; \n        typedef A6 arg6_type; \n        typedef A7 arg7_type; \n        typedef A8 arg8_type; \n        typedef A9 arg9_type; \n        typedef void arg10_type; \n\n        const static unsigned long num_args = 9;\n    };\n\n    template <\n        typename T,\n        typename A1, typename A2, typename A3,\n        typename A4, typename A5, typename A6,\n        typename A7, typename A8, typename A9,\n        typename A10\n        >\n    struct sig_traits<T (A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)> \n    { \n        typedef T result_type; \n        typedef A1 arg1_type; \n        typedef A2 arg2_type; \n        typedef A3 arg3_type; \n        typedef A4 arg4_type; \n        typedef A5 arg5_type; \n        typedef A6 arg6_type; \n        typedef A7 arg7_type; \n        typedef A8 arg8_type; \n        typedef A9 arg9_type; \n        typedef A10 arg10_type; \n\n        const static unsigned long num_args = 10;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename function_type, \n        // These arguments are used to control the overloading.  A user should\n        // not mess with them.  \n        typename Enabled = void,\n        unsigned long Num_args = sig_traits<function_type>::num_args\n        >\n    class any_function\n    {\n    private:\n        any_function() {}\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        An error on this line means you are trying to use a function signature\n        with more than the supported number of arguments.  The current version\n        of dlib only supports up to 10 arguments.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n    };\n\n\n    // The following preprocessor commands build the various overloaded versions\n    // of any_function for different numbers of commands and void vs. non-void return\n    // types.\n\n//  0 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST\n#define DLIB_ANY_FUNCTION_ARGS \n#define DLIB_ANY_FUNCTION_NUM_ARGS 0\n#include \"any_function_impl2.h\"\n\n//  1 argument\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1\n#define DLIB_ANY_FUNCTION_ARGS a1\n#define DLIB_ANY_FUNCTION_NUM_ARGS 1\n#include \"any_function_impl2.h\"\n\n//  2 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1, arg2_type a2\n#define DLIB_ANY_FUNCTION_ARGS a1,a2\n#define DLIB_ANY_FUNCTION_NUM_ARGS 2\n#include \"any_function_impl2.h\"\n\n//  3 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1, arg2_type a2, arg3_type a3\n#define DLIB_ANY_FUNCTION_ARGS a1,a2,a3\n#define DLIB_ANY_FUNCTION_NUM_ARGS 3\n#include \"any_function_impl2.h\"\n\n//  4 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4\n#define DLIB_ANY_FUNCTION_ARGS a1,a2,a3,a4\n#define DLIB_ANY_FUNCTION_NUM_ARGS 4\n#include \"any_function_impl2.h\"\n\n//  5 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, \\\n                                   arg5_type a5\n#define DLIB_ANY_FUNCTION_ARGS a1,a2,a3,a4,a5\n#define DLIB_ANY_FUNCTION_NUM_ARGS 5\n#include \"any_function_impl2.h\"\n\n//  6 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, \\\n                                   arg5_type a5, arg6_type a6\n#define DLIB_ANY_FUNCTION_ARGS a1,a2,a3,a4,a5,a6\n#define DLIB_ANY_FUNCTION_NUM_ARGS 6\n#include \"any_function_impl2.h\"\n\n//  7 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, \\\n                                   arg5_type a5, arg6_type a6, arg7_type a7\n#define DLIB_ANY_FUNCTION_ARGS a1,a2,a3,a4,a5,a6,a7\n#define DLIB_ANY_FUNCTION_NUM_ARGS 7\n#include \"any_function_impl2.h\"\n\n//  8 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, \\\n                                   arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8\n#define DLIB_ANY_FUNCTION_ARGS a1,a2,a3,a4,a5,a6,a7,a8\n#define DLIB_ANY_FUNCTION_NUM_ARGS 8\n#include \"any_function_impl2.h\"\n\n//  9 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, \\\n                                   arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8, \\\n                                   arg9_type a9\n#define DLIB_ANY_FUNCTION_ARGS a1,a2,a3,a4,a5,a6,a7,a8,a9\n#define DLIB_ANY_FUNCTION_NUM_ARGS 9\n#include \"any_function_impl2.h\"\n\n//  10 arguments\n#define DLIB_ANY_FUNCTION_ARG_LIST arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, \\\n                                   arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8, \\\n                                   arg9_type a9, arg10_type a10\n#define DLIB_ANY_FUNCTION_ARGS a1,a2,a3,a4,a5,a6,a7,a8,a9,a10\n#define DLIB_ANY_FUNCTION_NUM_ARGS 10 \n#include \"any_function_impl2.h\"\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename function_type>\n    inline void swap (\n        any_function<function_type>& a,\n        any_function<function_type>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename function_type> \n    T& any_cast(any_function<function_type>& a) { return a.template cast_to<T>(); }\n\n    template <typename T, typename function_type> \n    const T& any_cast(const any_function<function_type>& a) { return a.template cast_to<T>(); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AnY_FUNCTION_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any_function_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_AnY_FUNCTION_ABSTRACT_H_\n#ifdef DLIB_AnY_FUNCTION_ABSTRACT_H_\n\n#include \"any_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename function_type\n        >\n    class any_function\n    {\n        /*!\n            REQUIREMENTS ON function_type\n                This type should be a function signature.  Some examples are:\n                    void (int,int)  // a function returning nothing and taking two ints\n                    void ()         // a function returning nothing and taking no arguments\n                    char (double&)  // a function returning a char and taking a reference to a double\n\n                The number of arguments in the function must be no greater than 10.\n\n            INITIAL VALUE\n                - is_empty() == true\n                - for all T: contains<T>() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a version of dlib::any that is restricted to containing \n                elements which are some kind of function object with an operator() which\n                matches the function signature defined by function_type.\n\n\n                Here is an example:\n                    #include <iostream>\n                    #include <string>\n                    #include \"dlib/any.h\"\n                    using namespace std;\n                    void print_message(string str) { cout << str << endl; }\n\n                    int main()\n                    {\n                        dlib::any_function<void(string)> f;\n                        f = print_message;\n                        f(\"hello world\"); // calls print_message(\"hello world\")\n                    }\n\n                Note that any_function objects can be used to store general function \n                objects (i.e. defined by a class with an overloaded operator()) in\n                addition to regular global functions.  \n        !*/\n\n    public:\n\n        // This is the type of object returned by function_type functions.\n        typedef result_type_for_function_type result_type;\n        // Typedefs defining the argument types.  If an argument does not exist\n        // then it is set to void.\n        typedef type_of_first_argument_in_funct_type  arg1_type;\n        typedef type_of_second_argument_in_funct_type arg2_type;\n        ...\n        typedef type_of_last_argument_in_funct_type   arg10_type;\n        const static unsigned long num_args = total_number_of_non_void_arguments;\n\n        any_function(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        any_function (\n            const any_function& item\n        );\n        /*!\n            ensures\n                - copies the state of item into *this.  \n                - Note that *this and item will contain independent copies of the\n                  contents of item.  That is, this function performs a deep\n                  copy and therefore does not result in *this containing\n                  any kind of reference to item.\n        !*/\n\n        template < typename T >\n        any_function (\n            const T& item\n        );\n        /*!\n            ensures\n                - #contains<T>() == true\n                - #cast_to<T>() == item\n                  (i.e. a copy of item will be stored in *this)\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - #*this will have its default value.  I.e. #is_empty() == true\n        !*/\n\n        template <typename T>\n        bool contains (\n        ) const;\n        /*!\n            ensures\n                - if (this object currently contains an object of type T) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool is_empty(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains any kind of object) then\n                    - returns false \n                - else\n                    - returns true \n        !*/\n\n        bool is_set (\n        ) const;\n        /*!\n            ensures\n                - returns !is_empty()\n        !*/\n\n        result_type operator() (\n        ) const;\n        /*!\n            requires\n                - is_empty() == false\n                - the signature defined by function_type takes no arguments\n            ensures\n                - Let F denote the function object contained within *this.  Then\n                  this function performs:\n                    return F()\n                  or if result_type is void then this function performs:\n                    F()\n        !*/\n\n        result_type operator() (\n            const arg1_type& a1\n        ) const;\n        /*!\n            requires\n                - is_empty() == false\n                - the signature defined by function_type takes one argument\n            ensures\n                - Let F denote the function object contained within *this.  Then\n                  this function performs:\n                    return F(a1)\n                  or if result_type is void then this function performs:\n                    F(a1)\n        !*/\n\n        result_type operator() (\n            const arg1_type& a1,\n            const arg2_type& a2\n        ) const;\n        /*!\n            requires\n                - is_empty() == false\n                - the signature defined by function_type takes two arguments\n            ensures\n                - Let F denote the function object contained within *this.  Then\n                  this function performs:\n                    return F(a1,a2)\n                  or if result_type is void then this function performs:\n                    F(a1,a2)\n        !*/\n\n        /* !!!!!!!!!  NOTE  !!!!!!!!!\n\n           In addition to the above, operator() is defined for up to 10 arguments.\n           They are not listed here because it would clutter the documentation. \n\n           !!!!!!!!!  NOTE  !!!!!!!!!  */\n\n        template <typename T>\n        T& cast_to(\n        );\n        /*!\n            ensures\n                - if (contains<T>() == true) then\n                    - returns a non-const reference to the object contained within *this\n                - else\n                    - throws bad_any_cast\n        !*/\n\n        template <typename T>\n        const T& cast_to(\n        ) const;\n        /*!\n            ensures\n                - if (contains<T>() == true) then\n                    - returns a const reference to the object contained within *this\n                - else\n                    - throws bad_any_cast\n        !*/\n\n        template <typename T>\n        T& get(\n        );\n        /*!\n            ensures\n                - #is_empty() == false\n                - #contains<T>() == true\n                - if (contains<T>() == true)\n                    - returns a non-const reference to the object contained in *this.\n                - else\n                    - Constructs an object of type T inside *this\n                    - Any previous object stored in this any_function object is destructed and its\n                      state is lost.\n                    - returns a non-const reference to the newly created T object.\n        !*/\n\n        any_function& operator= (\n            const any_function& item\n        );\n        /*!\n            ensures\n                - copies the state of item into *this.  \n                - Note that *this and item will contain independent copies of the\n                  contents of item.  That is, this function performs a deep\n                  copy and therefore does not result in *this containing\n                  any kind of reference to item.\n        !*/\n\n        void swap (\n            any_function& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename function_type\n        >\n    inline void swap (\n        any_function<function_type>& a,\n        any_function<function_type>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename function_type\n        > \n    T& any_cast(\n        any_function<function_type>& a\n    ) { return a.cast_to<T>(); }\n    /*!\n        ensures\n            - returns a.cast_to<T>()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename function_type\n        > \n    const T& any_cast(\n        const any_function<function_type>& a\n    ) { return a.cast_to<T>(); }\n    /*!\n        ensures\n            - returns a.cast_to<T>()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AnY_FUNCTION_ABSTRACT_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any_function_impl.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ANY_FUNCTION_RETURN\n#error \"You aren't supposed to directly #include this file.  #include <dlib/any.h> instead.\"  \n#endif\n\n#ifdef _MSC_VER\n// When using visual studio 2012, disable the warning \"warning C4180: qualifier applied to function type has no meaning; ignored\"\n// that you get about some template expansions applying & to function types. \n#pragma warning(disable : 4180)\n#endif\n\n#ifdef DLIB_ANY_FUNCTION_RETURN\n\n// This file contains the body of the any_function class.  We use the\n// preprocessor to generate many different versions.  There are \n// versions which return a value and those which return void.  For\n// each of these types there are versions with differing numbers\n// of arguments. \n\npublic:\ntypedef typename sig_traits<function_type>::result_type result_type;\ntypedef typename sig_traits<function_type>::arg1_type arg1_type;\ntypedef typename sig_traits<function_type>::arg2_type arg2_type;\ntypedef typename sig_traits<function_type>::arg3_type arg3_type;\ntypedef typename sig_traits<function_type>::arg4_type arg4_type;\ntypedef typename sig_traits<function_type>::arg5_type arg5_type;\ntypedef typename sig_traits<function_type>::arg6_type arg6_type;\ntypedef typename sig_traits<function_type>::arg7_type arg7_type;\ntypedef typename sig_traits<function_type>::arg8_type arg8_type;\ntypedef typename sig_traits<function_type>::arg9_type arg9_type;\ntypedef typename sig_traits<function_type>::arg10_type arg10_type;\nconst static unsigned long num_args = sig_traits<function_type>::num_args;\n\nany_function()\n{\n}\n\nany_function (\n    const any_function& item\n)\n{\n    if (item.data)\n    {\n        item.data->copy_to(data);\n    }\n}\n\ntemplate <typename T>\nany_function (\n    const T& item\n)\n{\n    typedef typename basic_type<T>::type U;\n    data.reset(new derived<U,function_type>(item));\n}\n\nvoid clear (\n)\n{\n    data.reset();\n}\n\ntemplate <typename T>\nbool contains (\n) const\n{\n    typedef typename basic_type<T>::type U;\n    return dynamic_cast<derived<U,function_type>*>(data.get()) != 0;\n}\n\nbool is_empty(\n) const\n{\n    return data.get() == 0;\n}\n\nbool is_set(\n) const\n{\n    return !is_empty();\n}\n\ntemplate <typename T>\nT& cast_to(\n) \n{\n    typedef typename basic_type<T>::type U;\n    derived<U,function_type>* d = dynamic_cast<derived<U,function_type>*>(data.get());\n    if (d == 0)\n    {\n        throw bad_any_cast();\n    }\n\n    return d->item;\n}\n\ntemplate <typename T>\nconst T& cast_to(\n) const\n{\n    typedef typename basic_type<T>::type U;\n    derived<U,function_type>* d = dynamic_cast<derived<U,function_type>*>(data.get());\n    if (d == 0)\n    {\n        throw bad_any_cast();\n    }\n\n    return d->item;\n}\n\ntemplate <typename T>\nT& get(\n) \n{\n    typedef typename basic_type<T>::type U;\n    derived<U,function_type>* d = dynamic_cast<derived<U,function_type>*>(data.get());\n    if (d == 0)\n    {\n        d = new derived<U,function_type>();\n        data.reset(d);\n    }\n\n    return d->item;\n}\n\nany_function& operator= (\n    const any_function& item\n)\n{\n    any_function(item).swap(*this);\n    return *this;\n}\n\nvoid swap (\n    any_function& item\n)\n{\n    data.swap(item.data);\n}\n\nresult_type operator()(DLIB_ANY_FUNCTION_ARG_LIST) const \n{ validate(); DLIB_ANY_FUNCTION_RETURN data->evaluate(DLIB_ANY_FUNCTION_ARGS); }\n/* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n    If you are getting an error on the above line then it means you\n    have attempted to call a dlib::any_function but you have supplied \n    arguments which don't match the function signature used by the\n    dlib::any_function. \n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n\nprivate:\n\nvoid validate () const\n{\n    // make sure requires clause is not broken\n    DLIB_ASSERT(is_empty() == false,\n        \"\\t result_type any_function::operator()\"\n        << \"\\n\\t You can't call operator() on an empty any_function\"\n        << \"\\n\\t this: \" << this\n        );\n}\n\n\ntemplate <typename FT>\nstruct Tbase\n{\n    virtual ~Tbase() {}\n    virtual result_type evaluate () const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1\n    >\nstruct Tbase<T (A1)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate ( A1) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1, typename A2\n    >\nstruct Tbase<T (A1,A2)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate (A1,A2) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1, typename A2, typename A3\n    >\nstruct Tbase<T (A1,A2,A3)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate (A1,A2,A3) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1, typename A2, typename A3,\n    typename A4\n    >\nstruct Tbase<T (A1,A2,A3,A4)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate (A1,A2,A3,A4) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1, typename A2, typename A3,\n    typename A4, typename A5\n    >\nstruct Tbase<T (A1,A2,A3,A4,A5)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate (A1,A2,A3,A4,A5) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1, typename A2, typename A3,\n    typename A4, typename A5, typename A6\n    >\nstruct Tbase<T (A1,A2,A3,A4,A5,A6)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate (A1,A2,A3,A4,A5,A6) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1, typename A2, typename A3,\n    typename A4, typename A5, typename A6,\n    typename A7\n    >\nstruct Tbase<T (A1,A2,A3,A4,A5,A6,A7)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate (A1,A2,A3,A4,A5,A6,A7) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1, typename A2, typename A3,\n    typename A4, typename A5, typename A6,\n    typename A7, typename A8\n    >\nstruct Tbase<T (A1,A2,A3,A4,A5,A6,A7,A8)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate (A1,A2,A3,A4,A5,A6,A7,A8) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1, typename A2, typename A3,\n    typename A4, typename A5, typename A6,\n    typename A7, typename A8, typename A9\n    >\nstruct Tbase<T (A1,A2,A3,A4,A5,A6,A7,A8,A9)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate (A1,A2,A3,A4,A5,A6,A7,A8,A9) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntemplate <\n    typename T, \n    typename A1, typename A2, typename A3,\n    typename A4, typename A5, typename A6,\n    typename A7, typename A8, typename A9,\n    typename A10\n    >\nstruct Tbase<T (A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>\n{\n    virtual ~Tbase() {}\n    virtual T evaluate (A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const = 0;\n    virtual void copy_to ( scoped_ptr<Tbase>& dest) const = 0;\n};\n\ntypedef Tbase<function_type> base;\n\n// -----------------------------------------------\n\n// Some templates to help deal with the weirdness of storing C function types (rather than pointer to functions).\n// Basically, we make sure things always get turned into function pointers even if the user gives a function reference.\ntemplate <typename T, typename enabled = void>\nstruct funct_type { typedef T type; };\ntemplate <typename T>\nstruct funct_type<T, typename enable_if<is_function<T> >::type> { typedef T* type; };\n\ntemplate <typename T>\nstatic typename enable_if<is_function<T>,const T*>::type copy (const T& item) { return &item; }\ntemplate <typename T>\nstatic typename disable_if<is_function<T>,const T&>::type copy (const T& item) { return item; }\n\ntemplate <typename T, typename U>\nstatic typename enable_if<is_function<T>,const T&>::type deref (const U& item) { return *item; }\ntemplate <typename T, typename U>\nstatic typename disable_if<is_function<T>,const T&>::type deref (const U& item) { return item; }\n\n// -----------------------------------------------\n\n#define DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE               \\\n    typename funct_type<T>::type item;                      \\\n    derived() {}                                            \\\n    derived(const T& val) : item(copy(val)) {}              \\\n    virtual void copy_to ( scoped_ptr<base>& dest) const    \\\n    { dest.reset(new derived(deref<T>(item))); }\n\ntemplate <typename T, typename FT>\nstruct derived : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n    ) const { DLIB_ANY_FUNCTION_RETURN item(); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1>\nstruct derived<T,result_type (A1)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1, typename A2>\nstruct derived<T,result_type (A1,A2)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1, A2 a2\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1,a2); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1, typename A2, typename A3>\nstruct derived<T,result_type (A1,A2,A3)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1, A2 a2, A3 a3\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1,a2,a3); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1, typename A2, typename A3,\n                      typename A4>\nstruct derived<T,result_type (A1,A2,A3,A4)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1, A2 a2, A3 a3, A4 a4\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1,a2,a3,a4); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1, typename A2, typename A3,\n                      typename A4, typename A5>\nstruct derived<T,result_type (A1,A2,A3,A4,A5)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1, A2 a2, A3 a3, A4 a4, A5 a5\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1,a2,a3,a4,a5); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1, typename A2, typename A3,\n                      typename A4, typename A5, typename A6>\nstruct derived<T,result_type (A1,A2,A3,A4,A5,A6)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1,a2,a3,a4,a5,a6); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1, typename A2, typename A3,\n                      typename A4, typename A5, typename A6,\n                      typename A7>\nstruct derived<T,result_type (A1,A2,A3,A4,A5,A6,A7)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1,a2,a3,a4,a5,a6,a7); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1, typename A2, typename A3,\n                      typename A4, typename A5, typename A6,\n                      typename A7, typename A8>\nstruct derived<T,result_type (A1,A2,A3,A4,A5,A6,A7,A8)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1,a2,a3,a4,a5,a6,a7,a8); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1, typename A2, typename A3,\n                      typename A4, typename A5, typename A6,\n                      typename A7, typename A8, typename A9>\nstruct derived<T,result_type (A1,A2,A3,A4,A5,A6,A7,A8,A9)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1,a2,a3,a4,a5,a6,a7,a8,a9); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\ntemplate <typename T, typename A1, typename A2, typename A3,\n                      typename A4, typename A5, typename A6,\n                      typename A7, typename A8, typename A9,\n                      typename A10>\nstruct derived<T,result_type (A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)> : public base\n{\n    DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n    virtual result_type evaluate (\n        A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10\n    ) const { DLIB_ANY_FUNCTION_RETURN item(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); }\n    /* !!!!!!!!    ERRORS ON THE ABOVE LINE    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n        If you are getting an error on the above line then it means you\n        have attempted to assign a function or function object to a\n        dlib::any_function but the signatures of the source and\n        destination functions don't match.\n    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n};\n\nscoped_ptr<base> data;\n\n#undef DLIB_ANY_FUNCTION_DERIVED_BOILERPLATE\n\n#endif // DLIB_ANY_FUNCTION_RETURN\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any_function_impl2.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ANY_FUNCTION_ARG_LIST\n#error \"You aren't supposed to directly #include this file.  #include <dlib/any.h> instead.\"  \n#endif\n\n#ifdef DLIB_ANY_FUNCTION_ARG_LIST \n\n// The case where function_type has a non-void return type\n    template <typename function_type, typename Enabled>\n    class any_function<function_type, Enabled, DLIB_ANY_FUNCTION_NUM_ARGS>\n    {\n#define DLIB_ANY_FUNCTION_RETURN return\n#include \"any_function_impl.h\"\n#undef DLIB_ANY_FUNCTION_RETURN\n\n    private:\n        // You get a compiler error about this function being private if you try to assign\n        // or copy between any_functions with different types.  You must only copy between\n        // any_functions that represent functions with the same signature.\n        template <typename T, typename U> any_function(const any_function<T,U>&);\n    };\n\n// The case where function_type has a void return type\n    template <typename function_type>\n    class any_function<function_type, typename sig_traits<function_type>::type, DLIB_ANY_FUNCTION_NUM_ARGS>\n    {\n#define DLIB_ANY_FUNCTION_RETURN \n#include \"any_function_impl.h\"\n#undef DLIB_ANY_FUNCTION_RETURN\n\n    private:\n        // You get a compiler error about this function being private if you try to assign\n        // or copy between any_functions with different types.  You must only copy between\n        // any_functions that represent functions with the same signature.\n        template <typename T> any_function(const any_function<T>&);\n    };\n\n#undef DLIB_ANY_FUNCTION_ARG_LIST\n#undef DLIB_ANY_FUNCTION_ARGS\n#undef DLIB_ANY_FUNCTION_NUM_ARGS\n\n#endif // DLIB_ANY_FUNCTION_ARG_LIST\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_AnY_TRAINER_H_\n#define DLIB_AnY_TRAINER_H_\n\n#include \"any.h\"\n#include \"../smart_pointers.h\"\n\n#include \"any_decision_function.h\"\n\n#include \"any_trainer_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type_,\n        typename scalar_type_ = double\n        >\n    class any_trainer\n    {\n    public:\n        typedef sample_type_ sample_type;\n        typedef scalar_type_ scalar_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef any_decision_function<sample_type, scalar_type> trained_function_type;\n\n\n        any_trainer()\n        {\n        }\n\n        any_trainer (\n            const any_trainer& item\n        )\n        {\n            if (item.data)\n            {\n                item.data->copy_to(data);\n            }\n        }\n\n        template <typename T>\n        any_trainer (\n            const T& item\n        )\n        {\n            typedef typename basic_type<T>::type U;\n            data.reset(new derived<U>(item));\n        }\n\n        void clear (\n        )\n        {\n            data.reset();\n        }\n\n        template <typename T>\n        bool contains (\n        ) const\n        {\n            typedef typename basic_type<T>::type U;\n            return dynamic_cast<derived<U>*>(data.get()) != 0;\n        }\n\n        bool is_empty(\n        ) const\n        {\n            return data.get() == 0;\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& samples,\n            const std::vector<scalar_type>& labels\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_empty() == false,\n                \"\\t trained_function_type any_trainer::train()\"\n                << \"\\n\\t You can't call train() on an empty any_trainer\"\n                << \"\\n\\t this: \" << this\n                );\n\n            return data->train(samples, labels);\n        }\n\n        template <typename T>\n        T& cast_to(\n        ) \n        {\n            typedef typename basic_type<T>::type U;\n            derived<U>* d = dynamic_cast<derived<U>*>(data.get());\n            if (d == 0)\n            {\n                throw bad_any_cast();\n            }\n\n            return d->item;\n        }\n\n        template <typename T>\n        const T& cast_to(\n        ) const\n        {\n            typedef typename basic_type<T>::type U;\n            derived<U>* d = dynamic_cast<derived<U>*>(data.get());\n            if (d == 0)\n            {\n                throw bad_any_cast();\n            }\n\n            return d->item;\n        }\n\n        template <typename T>\n        T& get(\n        ) \n        {\n            typedef typename basic_type<T>::type U;\n            derived<U>* d = dynamic_cast<derived<U>*>(data.get());\n            if (d == 0)\n            {\n                d = new derived<U>();\n                data.reset(d);\n            }\n\n            return d->item;\n        }\n\n        any_trainer& operator= (\n            const any_trainer& item\n        )\n        {\n            any_trainer(item).swap(*this);\n            return *this;\n        }\n\n        void swap (\n            any_trainer& item\n        )\n        {\n            data.swap(item.data);\n        }\n\n    private:\n\n        struct base\n        {\n            virtual ~base() {}\n\n            virtual trained_function_type train (\n                const std::vector<sample_type>& samples,\n                const std::vector<scalar_type>& labels\n            ) const = 0;\n\n            virtual void copy_to (\n                scoped_ptr<base>& dest\n            ) const = 0;\n        };\n\n        template <typename T>\n        struct derived : public base\n        {\n            T item;\n            derived() {}\n            derived(const T& val) : item(val) {}\n\n            virtual void copy_to (\n                scoped_ptr<base>& dest\n            ) const\n            {\n                dest.reset(new derived<T>(item));\n            }\n\n            virtual trained_function_type train (\n                const std::vector<sample_type>& samples,\n                const std::vector<scalar_type>& labels\n            ) const\n            {\n                return item.train(samples, labels);\n            }\n        };\n\n        scoped_ptr<base> data;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type,\n        typename scalar_type\n        >\n    inline void swap (\n        any_trainer<sample_type,scalar_type>& a,\n        any_trainer<sample_type,scalar_type>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename V> \n    T& any_cast(any_trainer<U,V>& a) { return a.template cast_to<T>(); }\n\n    template <typename T, typename U, typename V> \n    const T& any_cast(const any_trainer<U,V>& a) { return a.template cast_to<T>(); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#endif // DLIB_AnY_TRAINER_H_\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any/any_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_AnY_TRAINER_ABSTRACT_H_\n#ifdef DLIB_AnY_TRAINER_ABSTRACT_H_\n\n#include \"any_abstract.h\"\n#include \"../algs.h\"\n#include \"any_decision_function_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type_,\n        typename scalar_type_ = double\n        >\n    class any_trainer\n    {\n        /*!\n            INITIAL VALUE\n                - is_empty() == true\n                - for all T: contains<T>() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a version of dlib::any that is restricted to containing \n                elements which are some kind of object with a .train() method compatible \n                with the following signature: \n\n                    decision_function train(\n                        const std::vector<sample_type>& samples,\n                        const std::vector<scalar_type>& labels\n                    ) const\n\n                    Where decision_function is a type capable of being stored in an\n                    any_decision_function<sample_type,scalar_type> object.\n\n                any_trainer is intended to be used to contain objects such as the svm_nu_trainer\n                and other similar types which represent supervised machine learning algorithms.   \n                It allows you to write code which contains and processes these trainer objects \n                without needing to know the specific types of trainer objects used.\n        !*/\n\n    public:\n\n        typedef sample_type_ sample_type;\n        typedef scalar_type_ scalar_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef any_decision_function<sample_type, scalar_type> trained_function_type;\n\n        any_trainer(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        any_trainer (\n            const any_trainer& item\n        );\n        /*!\n            ensures\n                - copies the state of item into *this.  \n                - Note that *this and item will contain independent copies of the\n                  contents of item.  That is, this function performs a deep\n                  copy and therefore does not result in *this containing\n                  any kind of reference to item.\n        !*/\n\n        template < typename T >\n        any_trainer (\n            const T& item\n        );\n        /*!\n            ensures\n                - #contains<T>() == true\n                - #cast_to<T>() == item\n                  (i.e. a copy of item will be stored in *this)\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - #*this will have its default value.  I.e. #is_empty() == true\n        !*/\n\n        template <typename T>\n        bool contains (\n        ) const;\n        /*!\n            ensures\n                - if (this object currently contains an object of type T) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool is_empty(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains any kind of object) then\n                    - returns false \n                - else\n                    - returns true\n        !*/\n\n        trained_function_type train (\n            const std::vector<sample_type>& samples,\n            const std::vector<scalar_type>& labels\n        ) const\n        /*!\n            requires\n                - is_empty() == false\n            ensures\n                - Let TRAINER denote the object contained within *this.  Then\n                  this function performs:\n                    return TRAINER.train(samples, labels)\n        !*/\n\n        template <typename T>\n        T& cast_to(\n        );\n        /*!\n            ensures\n                - if (contains<T>() == true) then\n                    - returns a non-const reference to the object contained within *this\n                - else\n                    - throws bad_any_cast\n        !*/\n\n        template <typename T>\n        const T& cast_to(\n        ) const;\n        /*!\n            ensures\n                - if (contains<T>() == true) then\n                    - returns a const reference to the object contained within *this\n                - else\n                    - throws bad_any_cast\n        !*/\n\n        template <typename T>\n        T& get(\n        );\n        /*!\n            ensures\n                - #is_empty() == false\n                - #contains<T>() == true\n                - if (contains<T>() == true)\n                    - returns a non-const reference to the object contained in *this.\n                - else\n                    - Constructs an object of type T inside *this\n                    - Any previous object stored in this any_trainer object is destructed and its\n                      state is lost.\n                    - returns a non-const reference to the newly created T object.\n        !*/\n\n        any_trainer& operator= (\n            const any_trainer& item\n        );\n        /*!\n            ensures\n                - copies the state of item into *this.  \n                - Note that *this and item will contain independent copies of the\n                  contents of item.  That is, this function performs a deep\n                  copy and therefore does not result in *this containing\n                  any kind of reference to item.\n        !*/\n\n        void swap (\n            any_trainer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type,\n        typename scalar_type\n        >\n    inline void swap (\n        any_trainer<sample_type,scalar_type>& a,\n        any_trainer<sample_type,scalar_type>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename sample_type,\n        typename scalar_type\n        > \n    T& any_cast(\n        any_trainer<sample_type,scalar_type>& a\n    ) { return a.cast_to<T>(); }\n    /*!\n        ensures\n            - returns a.cast_to<T>()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename sample_type,\n        typename scalar_type\n        > \n    const T& any_cast(\n        const any_trainer<sample_type,scalar_type>& a\n    ) { return a.cast_to<T>(); }\n    /*!\n        ensures\n            - returns a.cast_to<T>()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AnY_TRAINER_ABSTRACT_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/any.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_AnY_\n#define DLIB_AnY_\n\n#include \"any/any.h\"\n#include \"any/any_trainer.h\"\n#include \"any/any_decision_function.h\"\n#include \"any/any_function.h\"\n\n#endif // DLIB_AnY_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array/array_kernel.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ARRAY_KERNEl_2_\n#define DLIB_ARRAY_KERNEl_2_\n\n#include \"array_kernel_abstract.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../sort.h\"\n#include \"../is_kind.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager \n        >\n    class array : public enumerable<T>\n    {\n\n        /*!\n            INITIAL VALUE\n                - array_size == 0    \n                - max_array_size == 0\n                - array_elements == 0\n                - pos == 0\n                - last_pos == 0\n                - _at_start == true\n\n            CONVENTION\n                - array_size == size() \n                - max_array_size == max_size() \n                - if (max_array_size > 0)\n                    - array_elements == pointer to max_array_size elements of type T\n                - else\n                    - array_elements == 0\n\n                - if (array_size > 0) \n                    - last_pos == array_elements + array_size - 1\n                - else\n                    - last_pos == 0\n\n\n                - at_start() == _at_start \n                - current_element_valid() == pos != 0\n                - if (current_element_valid()) then\n                    - *pos == element()\n        !*/\n\n    public:\n\n        // These typedefs are here for backwards compatibility with old versions of dlib.\n        typedef array kernel_1a;\n        typedef array kernel_1a_c;\n        typedef array kernel_2a;\n        typedef array kernel_2a_c;\n        typedef array sort_1a;\n        typedef array sort_1a_c;\n        typedef array sort_1b;\n        typedef array sort_1b_c;\n        typedef array sort_2a;\n        typedef array sort_2a_c;\n        typedef array sort_2b;\n        typedef array sort_2b_c;\n        typedef array expand_1a;\n        typedef array expand_1a_c;\n        typedef array expand_1b;\n        typedef array expand_1b_c;\n        typedef array expand_1c;\n        typedef array expand_1c_c;\n        typedef array expand_1d;\n        typedef array expand_1d_c;\n\n\n\n\n        typedef T type;\n        typedef T value_type;\n        typedef mem_manager mem_manager_type;\n\n        array (\n        ) :\n            array_size(0),\n            max_array_size(0),\n            array_elements(0),\n            pos(0),\n            last_pos(0),\n            _at_start(true)\n        {}\n\n        explicit array (\n            unsigned long new_size\n        ) :\n            array_size(0),\n            max_array_size(0),\n            array_elements(0),\n            pos(0),\n            last_pos(0),\n            _at_start(true)\n        {\n            resize(new_size);\n        }\n\n        ~array (\n        ); \n\n        void clear (\n        );\n\n        inline const T& operator[] (\n            unsigned long pos\n        ) const;\n\n        inline T& operator[] (\n            unsigned long pos\n        );\n\n        void set_size (\n            unsigned long size\n        );\n\n        inline unsigned long max_size(\n        ) const;\n\n        void set_max_size(\n            unsigned long max\n        );\n\n        void swap (\n            array& item\n        );\n\n        // functions from the enumerable interface\n        inline unsigned long size (\n        ) const;\n\n        inline bool at_start (\n        ) const;\n\n        inline void reset (\n        ) const;\n\n        bool current_element_valid (\n        ) const;\n\n        inline const T& element (\n        ) const;\n\n        inline T& element (\n        );\n\n        bool move_next (\n        ) const;\n\n        void sort (\n        );\n\n        void resize (\n            unsigned long new_size\n        );\n\n        const T& back (\n        ) const;\n\n        T& back (\n        );\n\n        void pop_back (\n        );\n\n        void pop_back (\n            T& item\n        );\n\n        void push_back (\n            T& item\n        );\n\n        typedef T* iterator;\n        typedef const T* const_iterator;\n        iterator                begin()                         { return array_elements; }\n        const_iterator          begin() const                   { return array_elements; }\n        iterator                end()                           { return array_elements+array_size; }\n        const_iterator          end() const                     { return array_elements+array_size; }\n\n    private:\n\n        typename mem_manager::template rebind<T>::other pool;\n\n        // data members\n        unsigned long array_size;\n        unsigned long max_array_size;\n        T* array_elements;\n\n        mutable T* pos;\n        T* last_pos;\n        mutable bool _at_start;\n\n        // restricted functions\n        array(array<T>&);        // copy constructor\n        array<T>& operator=(array<T>&);    // assignment operator        \n\n    };\n\n    template <\n        typename T,\n        typename mem_manager \n        >\n    inline void swap (\n        array<T,mem_manager>& a, \n        array<T,mem_manager>& b \n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void serialize (\n        const array<T,mem_manager>& item,  \n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.max_size(),out);\n            serialize(item.size(),out);\n\n            for (unsigned long i = 0; i < item.size(); ++i)\n                serialize(item[i],out);\n        }\n        catch (serialization_error e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type array\"); \n        }\n    }\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        array<T,mem_manager>& item,  \n        std::istream& in\n    )\n    {\n        try\n        {\n            unsigned long max_size, size;\n            deserialize(max_size,in);\n            deserialize(size,in);\n            item.set_max_size(max_size);\n            item.set_size(size);\n            for (unsigned long i = 0; i < size; ++i)\n                deserialize(item[i],in);\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type array\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    array<T,mem_manager>::\n    ~array (\n    )\n    {\n        if (array_elements)\n        {\n            pool.deallocate_array(array_elements);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    clear (\n    )\n    {\n        reset();\n        last_pos = 0;\n        array_size = 0;\n        if (array_elements)\n        {\n            pool.deallocate_array(array_elements);\n        }\n        array_elements = 0;\n        max_array_size = 0;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& array<T,mem_manager>::\n    operator[] (\n        unsigned long pos\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( pos < this->size() , \n            \"\\tconst T& array::operator[]\"\n            << \"\\n\\tpos must < size()\" \n            << \"\\n\\tpos: \" << pos \n            << \"\\n\\tsize(): \" << this->size()\n            << \"\\n\\tthis: \" << this\n            );\n\n        return array_elements[pos];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& array<T,mem_manager>::\n    operator[] (\n        unsigned long pos\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( pos < this->size() , \n            \"\\tT& array::operator[]\"\n            << \"\\n\\tpos must be < size()\" \n            << \"\\n\\tpos: \" << pos \n            << \"\\n\\tsize(): \" << this->size()\n            << \"\\n\\tthis: \" << this\n            );\n\n        return array_elements[pos];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    set_size (\n        unsigned long size\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( size <= this->max_size() ),\n            \"\\tvoid array::set_size\"\n            << \"\\n\\tsize must be <= max_size()\"\n            << \"\\n\\tsize: \" << size \n            << \"\\n\\tmax size: \" << this->max_size()\n            << \"\\n\\tthis: \" << this\n            );\n\n        reset();\n        array_size = size;\n        if (size > 0)\n            last_pos = array_elements + size - 1;\n        else\n            last_pos = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    unsigned long array<T,mem_manager>::\n    size (\n    ) const\n    {\n        return array_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    set_max_size(\n        unsigned long max\n    )\n    {\n        reset();\n        array_size = 0;\n        last_pos = 0;\n        if (max != 0)\n        {\n            // if new max size is different\n            if (max != max_array_size)\n            {\n                if (array_elements)\n                {\n                    pool.deallocate_array(array_elements);\n                }\n                // try to get more memroy\n                try { array_elements = pool.allocate_array(max); }\n                catch (...) { array_elements = 0;  max_array_size = 0; throw; }\n                max_array_size = max;\n            }\n\n        }\n        // if the array is being made to be zero\n        else\n        {\n            if (array_elements)\n                pool.deallocate_array(array_elements);\n            max_array_size = 0;\n            array_elements = 0;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    unsigned long array<T,mem_manager>::\n    max_size (\n    ) const\n    {\n        return max_array_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    swap (\n        array<T,mem_manager>& item\n    )\n    {\n        unsigned long    array_size_temp        = item.array_size;\n        unsigned long    max_array_size_temp    = item.max_array_size;\n        T*               array_elements_temp    = item.array_elements;\n\n        item.array_size         = array_size;\n        item.max_array_size     = max_array_size;\n        item.array_elements     = array_elements;\n\n        array_size        = array_size_temp;\n        max_array_size    = max_array_size_temp;\n        array_elements    = array_elements_temp;\n\n        exchange(_at_start,item._at_start);\n        exchange(pos,item.pos);\n        exchange(last_pos,item.last_pos);\n        pool.swap(item.pool);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//           enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool array<T,mem_manager>::\n    at_start (\n    ) const\n    {\n        return _at_start;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    reset (\n    ) const\n    {\n        _at_start = true;\n        pos = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool array<T,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return pos != 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& array<T,mem_manager>::\n    element (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(this->current_element_valid(),\n            \"\\tconst T& array::element()\"\n            << \"\\n\\tThe current element must be valid if you are to access it.\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        return *pos;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& array<T,mem_manager>::\n    element (\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(this->current_element_valid(),\n            \"\\tT& array::element()\"\n            << \"\\n\\tThe current element must be valid if you are to access it.\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        return *pos;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool array<T,mem_manager>::\n    move_next (\n    ) const\n    {\n        if (!_at_start)\n        {\n            if (pos < last_pos)\n            {\n                ++pos;\n                return true;\n            }\n            else\n            {\n                pos = 0;\n                return false;\n            }\n        }\n        else\n        {\n            _at_start = false;\n            if (array_size > 0)\n            {\n                pos = array_elements;\n                return true;\n            }\n            else\n            {\n                return false;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                              Yet more functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    sort (\n    )\n    {\n        if (this->size() > 1)\n        {\n            // call the quick sort function for arrays that is in algs.h\n            dlib::qsort_array(*this,0,this->size()-1);\n        }\n        this->reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    resize (\n        unsigned long new_size\n    )\n    {\n        if (this->max_size() < new_size)\n        {\n            array temp;\n            temp.set_max_size(new_size);\n            temp.set_size(new_size);\n            for (unsigned long i = 0; i < this->size(); ++i)\n            {\n                exchange((*this)[i],temp[i]);\n            }\n            temp.swap(*this);\n        }\n        else\n        {\n            this->set_size(new_size);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& array<T,mem_manager>::\n    back (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( this->size() > 0 , \n                      \"\\tT& array::back()\"\n                      << \"\\n\\tsize() must be bigger than 0\" \n                      << \"\\n\\tsize(): \" << this->size()\n                      << \"\\n\\tthis:   \" << this\n        );\n\n        return (*this)[this->size()-1];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& array<T,mem_manager>::\n    back (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( this->size() > 0 , \n                      \"\\tconst T& array::back()\"\n                      << \"\\n\\tsize() must be bigger than 0\" \n                      << \"\\n\\tsize(): \" << this->size()\n                      << \"\\n\\tthis:   \" << this\n        );\n\n        return (*this)[this->size()-1];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    pop_back (\n        T& item\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( this->size() > 0 , \n                      \"\\tvoid array::pop_back()\"\n                      << \"\\n\\tsize() must be bigger than 0\" \n                      << \"\\n\\tsize(): \" << this->size()\n                      << \"\\n\\tthis:   \" << this\n        );\n\n        exchange(item,(*this)[this->size()-1]);\n        this->set_size(this->size()-1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    pop_back (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( this->size() > 0 , \n                      \"\\tvoid array::pop_back()\"\n                      << \"\\n\\tsize() must be bigger than 0\" \n                      << \"\\n\\tsize(): \" << this->size()\n                      << \"\\n\\tthis:   \" << this\n        );\n\n        this->set_size(this->size()-1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array<T,mem_manager>::\n    push_back (\n        T& item\n    ) \n    {\n        if (this->max_size() == this->size())\n        {\n            // double the size of the array\n            array temp;\n            temp.set_max_size(this->size()*2 + 1);\n            temp.set_size(this->size()+1);\n            for (unsigned long i = 0; i < this->size(); ++i)\n            {\n                exchange((*this)[i],temp[i]);\n            }\n            exchange(item,temp[temp.size()-1]);\n            temp.swap(*this);\n        }\n        else\n        {\n            this->set_size(this->size()+1);\n            exchange(item,(*this)[this->size()-1]);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename MM>\n    struct is_array <array<T,MM> >  \n    {\n        const static bool value = true;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ARRAY_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array/array_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ARRAY_KERNEl_ABSTRACT_\n#ifdef DLIB_ARRAY_KERNEl_ABSTRACT_\n\n#include \"../interfaces/enumerable.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager \n        >\n    class array : public enumerable<T>\n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T must have a default constructor.\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                front(), back(), swap(), max_size(), set_size(), and operator[] \n                functions do not invalidate pointers or references to internal data.\n                All other functions have no such guarantee.\n\n            INITIAL VALUE\n                size() == 0    \n                max_size() == 0\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the elements of the array in the\n                order (*this)[0], (*this)[1], (*this)[2], ...\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an ordered 1-dimensional array of items, \n                each item is associated with an integer value.  The items are \n                numbered from 0 though size() - 1 and the operator[] functions \n                run in constant time.  \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n        !*/\n        \n        public:\n\n            typedef T type;\n            typedef T value_type;\n            typedef mem_manager mem_manager_type;\n\n            array (\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n            !*/\n\n            explicit array (\n                unsigned long new_size\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                    - #size() == new_size\n                    - #max_size() == new_size\n                    - All elements of the array will have initial values for their type.\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n            !*/\n\n            ~array (\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear (\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if this exception is thrown then the array object is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            const T& operator[] (\n                unsigned long pos\n            ) const;\n            /*!\n                requires\n                    - pos < size()\n                ensures\n                    - returns a const reference to the element at position pos\n            !*/\n            \n            T& operator[] (\n                unsigned long pos\n            );\n            /*!\n                requires\n                    - pos < size()\n                ensures\n                    - returns a non-const reference to the element at position pos\n            !*/\n\n            void set_size (\n                unsigned long size\n            );\n            /*!\n                requires\n                    - size <= max_size()\n                ensures\n                    - #size() == size\n                    - any element with index between 0 and size - 1 which was in the \n                      array before the call to set_size() retains its value and index.\n                      All other elements have undetermined (but valid for their type) \n                      values.  (e.g. this object might buffer old T objects and reuse \n                      them without reinitializing them between calls to set_size())\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        may throw this exception if there is not enough memory and \n                        if it does throw then the call to set_size() has no effect    \n            !*/\n\n            unsigned long max_size(\n            ) const;\n            /*!\n                ensures\n                    - returns the maximum size of *this\n            !*/\n\n            void set_max_size(\n                unsigned long max\n            );\n            /*!\n                ensures\n                    - #max_size() == max\n                    - #size() == 0\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        may throw this exception if there is not enough \n                        memory and if it does throw then max_size() == 0    \n            !*/\n\n            void swap (\n                array<T>& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n            \n            void sort (\n            );\n            /*!\n                requires\n                    - T must be a type with that is comparable via operator<\n                ensures\n                    - for all elements in #*this the ith element is <= the i+1 element\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        data may be lost if sort() throws\n            !*/\n\n            void resize (\n                unsigned long new_size\n            );\n            /*!\n                ensures\n                    - #size() == new_size\n                    - #max_size() == max(new_size,max_size())\n                    - for all i < size() && i < new_size:\n                        - #(*this)[i] == (*this)[i]\n                          (i.e. All the original elements of *this which were at index\n                          values less than new_size are unmodified.)\n                    - for all valid i >= size():\n                        - #(*this)[i] has an undefined value\n                          (i.e. any new elements of the array have an undefined value)\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                       If an exception is thrown then it has no effect on *this.\n            !*/\n\n            \n            const T& back (\n            ) const;\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - returns a const reference to (*this)[size()-1]\n            !*/\n\n            T& back (\n            );\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - returns a non-const reference to (*this)[size()-1]\n            !*/\n\n            void pop_back (\n                T& item\n            );\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - #size() == size() - 1\n                    - swaps (*this)[size()-1] into item\n                    - All elements with an index less than size()-1 are \n                      unmodified by this operation.\n            !*/\n\n            void pop_back (\n            );\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - #size() == size() - 1\n                    - All elements with an index less than size()-1 are \n                      unmodified by this operation.\n            !*/\n\n            void push_back (\n                T& item\n            );\n            /*!\n                ensures\n                    - #size() == size()+1\n                    - swaps item into (*this)[#size()-1] \n                    - #back() == item\n                    - #item has some undefined value (whatever happens to \n                      get swapped out of the array)\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                       If an exception is thrown then it has no effect on *this.\n            !*/\n\n            typedef T* iterator;\n            typedef const T* const_iterator;\n\n            iterator begin(\n            );\n            /*!\n                ensures\n                    - returns an iterator that points to the first element in this array or\n                      end() if the array is empty.\n            !*/\n\n            const_iterator begin(\n            ) const;\n            /*!\n                ensures\n                    - returns a const iterator that points to the first element in this\n                      array or end() if the array is empty.\n            !*/\n\n            iterator end(\n            );\n            /*!\n                ensures\n                    - returns an iterator that points to one past the end of the array.\n            !*/\n\n            const_iterator end(\n            ) const;\n            /*!\n                ensures\n                    - returns a const iterator that points to one past the end of the\n                      array.\n            !*/\n\n        private:\n\n            // restricted functions\n            array(array<T>&);        // copy constructor\n            array<T>& operator=(array<T>&);    // assignment operator        \n\n    };\n\n    template <\n        typename T\n        >\n    inline void swap (\n        array<T>& a, \n        array<T>& b \n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T\n        >\n    void serialize (\n        const array<T>& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    template <\n        typename T \n        >\n    void deserialize (\n        array<T>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n}\n\n#endif // DLIB_ARRAY_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array/array_tools.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ARRAY_tOOLS_H_\n#define DLIB_ARRAY_tOOLS_H_\n\n#include \"../assert.h\"\n#include \"array_tools_abstract.h\"\n\nnamespace dlib\n{\n    template <typename T>\n    void split_array (\n        T& a,\n        T& b,\n        double frac\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 <= frac && frac <= 1,\n            \"\\t void split_array()\"\n            << \"\\n\\t frac must be between 0 and 1.\"\n            << \"\\n\\t frac: \" << frac\n            );\n\n        const unsigned long asize = static_cast<unsigned long>(a.size()*frac);\n        const unsigned long bsize = a.size()-asize;\n\n        b.resize(bsize);\n        for (unsigned long i = 0; i < b.size(); ++i)\n        {\n            swap(b[i], a[i+asize]);\n        }\n        a.resize(asize);\n    }\n}\n\n#endif // DLIB_ARRAY_tOOLS_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array/array_tools_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ARRAY_tOOLS_ABSTRACT_H_\n#ifdef DLIB_ARRAY_tOOLS_ABSTRACT_H_\n\n#include \"array_kernel_abstract.h\"\n\nnamespace dlib\n{\n    template <typename T>\n    void split_array (\n        T& a,\n        T& b,\n        double frac\n    );\n    /*!\n        requires\n            - 0 <= frac <= 1\n            - T must be an array type such as dlib::array or std::vector\n        ensures\n            - This function takes the elements of a and splits them into two groups.  The\n              first group remains in a and the second group is put into b.  The ordering of\n              elements in a is preserved.  In particular, concatenating #a with #b will\n              reproduce the original contents of a.\n            - The elements in a are moved around using global swap().  So they must be\n              swappable, but do not need to be copyable.\n            - #a.size() == floor(a.size()*frac)\n            - #b.size() == a.size()-#a.size()\n    !*/\n}\n\n#endif // DLIB_ARRAY_tOOLS_ABSTRACT_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ARRAy_\n#define DLIB_ARRAy_\n\n#include \"array/array_kernel.h\"\n#include \"array/array_tools.h\"\n\n#endif // DLIB_ARRAy_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array2d/array2d_generic_image.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ARRAY2D_GENERIC_iMAGE_Hh_\n#define DLIB_ARRAY2D_GENERIC_iMAGE_Hh_\n\n#include \"array2d_kernel.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n    template <typename T, typename mm>\n    struct image_traits<array2d<T,mm> >\n    {\n        typedef T pixel_type;\n    };\n\n    template <typename T, typename mm>\n    inline long num_rows( const array2d<T,mm>& img) { return img.nr(); }\n    template <typename T, typename mm>\n    inline long num_columns( const array2d<T,mm>& img) { return img.nc(); }\n\n    template <typename T, typename mm>\n    inline void set_image_size(\n        array2d<T,mm>& img,\n        long rows,\n        long cols \n    ) { img.set_size(rows,cols); }\n\n    template <typename T, typename mm>\n    inline void* image_data(\n        array2d<T,mm>& img\n    )\n    {\n        if (img.size() != 0)\n            return &img[0][0];\n        else\n            return 0;\n    }\n\n    template <typename T, typename mm>\n    inline const void* image_data(\n        const array2d<T,mm>& img\n    )\n    {\n        if (img.size() != 0)\n            return &img[0][0];\n        else\n            return 0;\n    }\n\n    template <typename T, typename mm>\n    inline long width_step(\n        const array2d<T,mm>& img\n    ) \n    { \n        return img.width_step(); \n    }\n\n}\n\n#endif // DLIB_ARRAY2D_GENERIC_iMAGE_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array2d/array2d_kernel.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ARRAY2D_KERNEl_1_\n#define DLIB_ARRAY2D_KERNEl_1_\n\n#include \"array2d_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../serialize.h\"\n#include \"../geometry/rectangle.h\"\n\nnamespace dlib\n{\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager\n        >\n    class array2d : public enumerable<T>\n    {\n\n        /*!\n            INITIAL VALUE\n                - nc_ == 0 \n                - nr_ == 0 \n                - data == 0 \n                - at_start_ == true\n                - cur == 0\n                - last == 0\n\n            CONVENTION\n                - nc_ == nc() \n                - nr_ == nc() \n                - if (data != 0) then\n                    - last == a pointer to the last element in the data array\n                    - data == pointer to an array of nc_*nr_ T objects \n                - else\n                    - nc_ == 0\n                    - nr_ == 0\n                    - data == 0\n                    - last == 0\n\n\n                - nr_ * nc_ == size()\n                - if (cur == 0) then\n                    - current_element_valid() == false\n                - else \n                    - current_element_valid() == true\n                    - *cur == element()\n\n                - at_start_ == at_start()      \n        !*/\n\n\n        class row_helper;\n    public:\n\n        // These typedefs are here for backwards compatibility with older versions of dlib.\n        typedef array2d kernel_1a;\n        typedef array2d kernel_1a_c;\n         \n        typedef T type;\n        typedef mem_manager mem_manager_type;\n\n        // -----------------------------------\n\n        class row \n        {\n            /*!\n                CONVENTION\n                    - nc_ == nc()\n                    - for all x < nc_:\n                        - (*this)[x] == data[x]\n            !*/\n\n            friend class array2d;\n            friend class row_helper;\n\n        public:\n            long nc (\n            ) const { return nc_; }\n\n            const T& operator[] (\n                long column\n            ) const \n            { \n                // make sure requires clause is not broken\n                DLIB_ASSERT(column < nc() && column >= 0,\n                    \"\\tconst T& array2d::operator[](long column) const\"\n                    << \"\\n\\tThe column index given must be less than the number of columns.\"\n                    << \"\\n\\tthis:    \" << this\n                    << \"\\n\\tcolumn:  \" << column \n                    << \"\\n\\tnc(): \" << nc()\n                );\n\n                return data[column]; \n            }\n\n            T& operator[] (\n                long column\n            ) \n            { \n                // make sure requires clause is not broken\n                DLIB_ASSERT(column < nc() && column >= 0,\n                    \"\\tT& array2d::operator[](long column)\"\n                    << \"\\n\\tThe column index given must be less than the number of columns.\"\n                    << \"\\n\\tthis:    \" << this\n                    << \"\\n\\tcolumn:  \" << column \n                    << \"\\n\\tnc(): \" << nc()\n                );\n\n                return data[column]; \n            }\n\n        private:\n\n            row(T* data_, long cols) : data(data_), nc_(cols) {}\n\n            T* data; \n            long nc_;\n\n\n            // restricted functions\n            row(){}\n            row& operator=(row&);\n        };\n\n        // -----------------------------------\n\n        array2d (\n        ) : \n            data(0),\n            nc_(0),\n            nr_(0),\n            cur(0),\n            last(0),\n            at_start_(true)\n        {\n        }\n\n        array2d(\n            long rows,\n            long cols\n        ) : \n            data(0),\n            nc_(0),\n            nr_(0),\n            cur(0),\n            last(0),\n            at_start_(true)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT((cols >= 0 && rows >= 0),\n                        \"\\t array2d::array2d(long rows, long cols)\"\n                        << \"\\n\\t The array2d can't have negative rows or columns.\"\n                        << \"\\n\\t this: \" << this\n                        << \"\\n\\t cols: \" << cols \n                        << \"\\n\\t rows: \" << rows \n            );\n\n            set_size(rows,cols);\n        }\n\n        virtual ~array2d (\n        ) { clear(); }\n\n        long nc (\n        ) const { return nc_; }\n\n        long nr (\n        ) const { return nr_; }\n\n        row operator[] (\n            long row_\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(row_ < nr() && row_ >= 0,\n                \"\\trow array2d::operator[](long row_)\"\n                << \"\\n\\tThe row index given must be less than the number of rows.\"\n                << \"\\n\\tthis:     \" << this\n                << \"\\n\\trow_:      \" << row_ \n                << \"\\n\\tnr(): \" << nr()\n                );\n\n            return row(data+row_*nc_, nc_);\n        }\n\n        const row operator[] (\n            long row_\n        ) const \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(row_ < nr() && row_ >= 0,\n                \"\\tconst row array2d::operator[](long row_) const\"\n                << \"\\n\\tThe row index given must be less than the number of rows.\"\n                << \"\\n\\tthis:     \" << this\n                << \"\\n\\trow_:      \" << row_ \n                << \"\\n\\tnr(): \" << nr()\n            );\n\n            return row(data+row_*nc_, nc_);\n        }\n\n        void swap (\n            array2d& item\n        )\n        {\n            exchange(data,item.data);\n            exchange(nr_,item.nr_);\n            exchange(nc_,item.nc_);\n            exchange(at_start_,item.at_start_);\n            exchange(cur,item.cur);\n            exchange(last,item.last);\n            pool.swap(item.pool);\n        }\n\n        void clear (\n        )\n        {\n            if (data != 0)\n            {\n                pool.deallocate_array(data);\n                nc_ = 0;\n                nr_ = 0;\n                data = 0;\n                at_start_ = true;\n                cur = 0;\n                last = 0;\n            }\n        }\n\n        void set_size (\n            long rows,\n            long cols\n        );\n\n        bool at_start (\n        ) const { return at_start_; }\n\n        void reset (\n        ) const { at_start_ = true; cur = 0; }\n\n        bool current_element_valid (\n        ) const { return (cur != 0); }\n\n        const T& element (\n        ) const \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_element_valid() == true,\n                \"\\tconst T& array2d::element()()\"\n                << \"\\n\\tYou can only call element() when you are at a valid one.\"\n                << \"\\n\\tthis:    \" << this\n            );\n\n            return *cur; \n        }\n\n        T& element (\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_element_valid() == true,\n                         \"\\tT& array2d::element()()\"\n                         << \"\\n\\tYou can only call element() when you are at a valid one.\"\n                         << \"\\n\\tthis:    \" << this\n            );\n\n            return *cur; \n        }\n\n        bool move_next (\n        ) const\n        {\n            if (cur != 0)\n            {\n                if (cur != last)\n                {\n                    ++cur;\n                    return true;\n                }\n                cur = 0;\n                return false;\n            }\n            else if (at_start_)\n            {\n                cur = data;\n                at_start_ = false;\n                return (data != 0);\n            }\n            else\n            {\n                return false;\n            }\n        }\n\n        unsigned long size (\n        ) const { return static_cast<unsigned long>(nc_ * nr_); }\n\n        long width_step (\n        ) const\n        {\n            return nc_*sizeof(T);\n        }\n\n    private:\n\n\n        T* data;\n        long nc_;\n        long nr_;\n\n        typename mem_manager::template rebind<T>::other pool;\n        mutable T* cur;\n        T* last;\n        mutable bool at_start_;\n\n        // restricted functions\n        array2d(array2d&);        // copy constructor\n        array2d& operator=(array2d&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        array2d<T,mem_manager>& a, \n        array2d<T,mem_manager>& b \n    ) { a.swap(b); }   \n\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void serialize (\n        const array2d<T,mem_manager>& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            // The reason the serialization is a little funny is because we are trying to\n            // maintain backwards compatibility with an older serialization format used by\n            // dlib while also encoding things in a way that lets the array2d and matrix\n            // objects have compatible serialization formats.\n            serialize(-item.nr(),out);\n            serialize(-item.nc(),out);\n\n            item.reset();\n            while (item.move_next())\n                serialize(item.element(),out);\n            item.reset();\n        }\n        catch (serialization_error e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type array2d\"); \n        }\n    }\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        array2d<T,mem_manager>& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            long nr, nc;\n            deserialize(nr,in);\n            deserialize(nc,in);\n\n            // this is the newer serialization format\n            if (nr < 0 || nc < 0)\n            {\n                nr *= -1;\n                nc *= -1;\n            }\n            else\n            {\n                std::swap(nr,nc);\n            }\n\n            item.set_size(nr,nc);\n\n            while (item.move_next())\n                deserialize(item.element(),in); \n            item.reset();\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type array2d\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void array2d<T,mem_manager>::\n    set_size (\n        long rows,\n        long cols\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT((cols >= 0 && rows >= 0) ,\n               \"\\tvoid array2d::set_size(long rows, long cols)\"\n               << \"\\n\\tThe array2d can't have negative rows or columns.\"\n               << \"\\n\\tthis: \" << this\n               << \"\\n\\tcols: \" << cols \n               << \"\\n\\trows: \" << rows \n        );\n\n        // set the enumerator back at the start\n        at_start_ = true;\n        cur = 0;\n\n        // don't do anything if we are already the right size.\n        if (nc_ == cols && nr_ == rows)\n        {\n            return;\n        }\n\n        nc_ = cols;\n        nr_ = rows;\n\n        // free any existing memory\n        if (data != 0)\n        {\n            pool.deallocate_array(data);\n            data = 0;\n        }\n\n        // now setup this object to have the new size\n        try\n        {\n            if (nr_ > 0)\n            {\n                data = pool.allocate_array(nr_*nc_);\n                last = data + nr_*nc_ - 1;\n            }\n        }\n        catch (...)\n        {\n            if (data)\n                pool.deallocate_array(data);\n\n            data = 0;\n            nc_ = 0;\n            nr_ = 0;\n            last = 0;\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename MM>\n    struct is_array2d <array2d<T,MM> >  \n    {\n        const static bool value = true;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ARRAY2D_KERNEl_1_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array2d/array2d_kernel_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ARRAY2D_KERNEl_ABSTRACT_\n#ifdef DLIB_ARRAY2D_KERNEl_ABSTRACT_\n\n#include \"../interfaces/enumerable.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include \"../geometry/rectangle_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager \n        >\n    class array2d : public enumerable<T>\n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T must have a default constructor.\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                No member functions in this object will invalidate pointers\n                or references to internal data except for the set_size()\n                and clear() member functions.\n\n            INITIAL VALUE\n                nr() == 0\n                nc() == 0\n                \n            ENUMERATION ORDER\n                The enumerator will iterate over the elements of the array starting\n                with row 0 and then proceeding to row 1 and so on.  Each row will be\n                fully enumerated before proceeding on to the next row and the elements\n                in a row will be enumerated beginning with the 0th column, then the 1st \n                column and so on.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a 2-Dimensional array of objects of \n                type T. \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n\n\n                Finally, note that this object stores its data contiguously and in \n                row major order.  Moreover, there is no padding at the end of each row.\n                This means that its width_step() value is always equal to sizeof(type)*nc().  \n        !*/\n\n\n    public:\n\n        // ----------------------------------------\n\n        typedef T type;\n        typedef mem_manager mem_manager_type;\n         \n        // ----------------------------------------\n\n        class row \n        {\n            /*!\n                POINTERS AND REFERENCES TO INTERNAL DATA\n                    No member functions in this object will invalidate pointers\n                    or references to internal data.\n\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents a row of Ts in an array2d object.\n            !*/\n        public:\n            long nc (\n            ) const;\n            /*!\n                ensures\n                    - returns the number of columns in this row\n            !*/\n\n            const T& operator[] (\n                long column\n            ) const;\n            /*!\n                requires\n                    - 0 <= column < nc()\n                ensures\n                    - returns a const reference to the T in the given column \n            !*/\n\n            T& operator[] (\n                long column\n            );\n            /*!\n                requires\n                    - 0 <= column < nc()\n                ensures\n                    - returns a non-const reference to the T in the given column \n            !*/\n\n        private:\n            // restricted functions\n            row();\n            row& operator=(row&);\n        };\n\n        // ----------------------------------------\n\n        array2d (\n        );\n        /*!\n            ensures \n                - #*this is properly initialized\n            throws\n                - std::bad_alloc \n        !*/\n\n        array2d (\n            long rows,\n            long cols \n        );\n        /*!\n            requires\n                - rows >= 0 && cols >= 0\n            ensures\n                - #nc() == cols\n                - #nr() == rows\n                - #at_start() == true\n                - all elements in this array have initial values for their type\n            throws\n                - std::bad_alloc \n        !*/\n\n        virtual ~array2d (\n        ); \n        /*!\n            ensures\n                - all resources associated with *this has been released\n        !*/\n        \n        void clear (\n        );\n        /*!\n            ensures\n                - #*this has an initial value for its type\n        !*/\n\n        long nc (\n        ) const;\n        /*!\n            ensures\n                - returns the number of elements there are in a row.  i.e. returns\n                  the number of columns in *this\n        !*/\n\n        long nr (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in *this\n        !*/\n\n        void set_size (\n            long rows,\n            long cols\n        );\n        /*!\n            requires\n                - rows >= 0 && cols >= 0\n            ensures\n                - #nc() == cols\n                - #nr() == rows\n                - #at_start() == true\n                - if (the call to set_size() doesn't change the dimensions of this array) then\n                    - all elements in this array retain their values from before this function was called\n                - else\n                    - all elements in this array have initial values for their type\n            throws\n                - std::bad_alloc \n                    If this exception is thrown then #*this will have an initial\n                    value for its type.\n        !*/\n\n        row operator[] (\n            long row_index\n        );\n        /*!\n            requires\n                - 0 <= row_index < nr()\n            ensures\n                - returns a non-const row of nc() elements that represents the \n                  given row_index'th row in *this.\n        !*/\n\n        const row operator[] (\n            long row_index\n        ) const;\n        /*!\n            requires\n                - 0 <= row_index < nr()\n            ensures\n                - returns a const row of nc() elements that represents the \n                  given row_index'th row in *this.\n        !*/\n\n        void swap (\n            array2d& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n        long width_step (\n        ) const;\n        /*!\n            ensures\n                - returns the size of one row of the image, in bytes.  \n                  More precisely, return a number N such that:\n                  (char*)&item[0][0] + N == (char*)&item[1][0].\n                - for dlib::array2d objects, the returned value\n                  is always equal to sizeof(type)*nc().  However,\n                  other objects which implement dlib::array2d style\n                  interfaces might have padding at the ends of their\n                  rows and therefore might return larger numbers.\n                  An example of such an object is the dlib::cv_image.\n        !*/\n\n    private:\n\n        // restricted functions\n        array2d(array2d&);        // copy constructor\n        array2d& operator=(array2d&);    // assignment operator\n\n    };\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        array2d<T,mem_manager>& a, \n        array2d<T,mem_manager>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void serialize (\n        const array2d<T,mem_manager>& item, \n        std::ostream& out \n    );   \n    /*!\n        Provides serialization support.  Note that the serialization formats used by the\n        dlib::matrix and dlib::array2d objects are compatible.  That means you can load the\n        serialized data from one into another and it will work properly.\n    !*/\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        array2d<T,mem_manager>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n}\n\n#endif // DLIB_ARRAY2D_KERNEl_ABSTRACT_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array2d/serialize_pixel_overloads.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ARRAY2D_SERIALIZE_PIXEL_OvERLOADS_Hh_\n#define DLIB_ARRAY2D_SERIALIZE_PIXEL_OvERLOADS_Hh_\n\n#include \"array2d_kernel.h\"\n#include \"../pixel.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*\n        This file contains overloads of the serialize functions for array2d object\n        for the case where they contain simple 8bit POD pixel types.  In these\n        cases we can perform a much faster serialization by writing data in chunks\n        instead of one pixel at a time (this avoids a lot of function call overhead\n        inside the iostreams).\n    */\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename mem_manager\n        >\n    void serialize (\n        const array2d<rgb_pixel,mem_manager>& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            // The reason the serialization is a little funny is because we are trying to\n            // maintain backwards compatibility with an older serialization format used by\n            // dlib while also encoding things in a way that lets the array2d and matrix\n            // objects have compatible serialization formats.\n            serialize(-item.nr(),out);\n            serialize(-item.nc(),out);\n\n            COMPILE_TIME_ASSERT(sizeof(rgb_pixel) == 3);\n            \n            if (item.size() != 0)\n                out.write((char*)&item[0][0], sizeof(rgb_pixel)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type array2d\"); \n        }\n    }\n\n    template <\n        typename mem_manager\n        >\n    void deserialize (\n        array2d<rgb_pixel,mem_manager>& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            COMPILE_TIME_ASSERT(sizeof(rgb_pixel) == 3);\n\n            long nr, nc;\n            deserialize(nr,in);\n            deserialize(nc,in);\n\n            // this is the newer serialization format\n            if (nr < 0 || nc < 0)\n            {\n                nr *= -1;\n                nc *= -1;\n            }\n            else\n            {\n                std::swap(nr,nc);\n            }\n\n            item.set_size(nr,nc);\n\n            if (item.size() != 0)\n                in.read((char*)&item[0][0], sizeof(rgb_pixel)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type array2d\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename mem_manager\n        >\n    void serialize (\n        const array2d<bgr_pixel,mem_manager>& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            // The reason the serialization is a little funny is because we are trying to\n            // maintain backwards compatibility with an older serialization format used by\n            // dlib while also encoding things in a way that lets the array2d and matrix\n            // objects have compatible serialization formats.\n            serialize(-item.nr(),out);\n            serialize(-item.nc(),out);\n\n            COMPILE_TIME_ASSERT(sizeof(bgr_pixel) == 3);\n\n            if (item.size() != 0)\n                out.write((char*)&item[0][0], sizeof(bgr_pixel)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type array2d\"); \n        }\n    }\n\n    template <\n        typename mem_manager\n        >\n    void deserialize (\n        array2d<bgr_pixel,mem_manager>& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            COMPILE_TIME_ASSERT(sizeof(bgr_pixel) == 3);\n\n            long nr, nc;\n            deserialize(nr,in);\n            deserialize(nc,in);\n\n            // this is the newer serialization format\n            if (nr < 0 || nc < 0)\n            {\n                nr *= -1;\n                nc *= -1;\n            }\n            else\n            {\n                std::swap(nr,nc);\n            }\n\n\n            item.set_size(nr,nc);\n\n            if (item.size() != 0)\n                in.read((char*)&item[0][0], sizeof(bgr_pixel)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type array2d\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename mem_manager\n        >\n    void serialize (\n        const array2d<hsi_pixel,mem_manager>& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            // The reason the serialization is a little funny is because we are trying to\n            // maintain backwards compatibility with an older serialization format used by\n            // dlib while also encoding things in a way that lets the array2d and matrix\n            // objects have compatible serialization formats.\n            serialize(-item.nr(),out);\n            serialize(-item.nc(),out);\n\n            COMPILE_TIME_ASSERT(sizeof(hsi_pixel) == 3);\n\n            if (item.size() != 0)\n                out.write((char*)&item[0][0], sizeof(hsi_pixel)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type array2d\"); \n        }\n    }\n\n    template <\n        typename mem_manager\n        >\n    void deserialize (\n        array2d<hsi_pixel,mem_manager>& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            COMPILE_TIME_ASSERT(sizeof(hsi_pixel) == 3);\n\n            long nr, nc;\n            deserialize(nr,in);\n            deserialize(nc,in);\n\n            // this is the newer serialization format\n            if (nr < 0 || nc < 0)\n            {\n                nr *= -1;\n                nc *= -1;\n            }\n            else\n            {\n                std::swap(nr,nc);\n            }\n\n\n            item.set_size(nr,nc);\n\n            if (item.size() != 0)\n                in.read((char*)&item[0][0], sizeof(hsi_pixel)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type array2d\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename mem_manager\n        >\n    void serialize (\n        const array2d<rgb_alpha_pixel,mem_manager>& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            // The reason the serialization is a little funny is because we are trying to\n            // maintain backwards compatibility with an older serialization format used by\n            // dlib while also encoding things in a way that lets the array2d and matrix\n            // objects have compatible serialization formats.\n            serialize(-item.nr(),out);\n            serialize(-item.nc(),out);\n\n            COMPILE_TIME_ASSERT(sizeof(rgb_alpha_pixel) == 4);\n\n            if (item.size() != 0)\n                out.write((char*)&item[0][0], sizeof(rgb_alpha_pixel)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type array2d\"); \n        }\n    }\n\n    template <\n        typename mem_manager\n        >\n    void deserialize (\n        array2d<rgb_alpha_pixel,mem_manager>& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            COMPILE_TIME_ASSERT(sizeof(rgb_alpha_pixel) == 4);\n\n            long nr, nc;\n            deserialize(nr,in);\n            deserialize(nc,in);\n\n            // this is the newer serialization format\n            if (nr < 0 || nc < 0)\n            {\n                nr *= -1;\n                nc *= -1;\n            }\n            else\n            {\n                std::swap(nr,nc);\n            }\n\n\n            item.set_size(nr,nc);\n\n            if (item.size() != 0)\n                in.read((char*)&item[0][0], sizeof(rgb_alpha_pixel)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type array2d\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename mem_manager\n        >\n    void serialize (\n        const array2d<unsigned char,mem_manager>& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            // The reason the serialization is a little funny is because we are trying to\n            // maintain backwards compatibility with an older serialization format used by\n            // dlib while also encoding things in a way that lets the array2d and matrix\n            // objects have compatible serialization formats.\n            serialize(-item.nr(),out);\n            serialize(-item.nc(),out);\n\n            if (item.size() != 0)\n                out.write((char*)&item[0][0], sizeof(unsigned char)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type array2d\"); \n        }\n    }\n\n    template <\n        typename mem_manager\n        >\n    void deserialize (\n        array2d<unsigned char,mem_manager>& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            long nr, nc;\n            deserialize(nr,in);\n            deserialize(nc,in);\n            // this is the newer serialization format\n            if (nr < 0 || nc < 0)\n            {\n                nr *= -1;\n                nc *= -1;\n            }\n            else\n            {\n                std::swap(nr,nc);\n            }\n\n\n            item.set_size(nr,nc);\n\n            if (item.size() != 0)\n                in.read((char*)&item[0][0], sizeof(unsigned char)*item.size());\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type array2d\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ARRAY2D_SERIALIZE_PIXEL_OvERLOADS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/array2d.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ARRAY2d_ \n#define DLIB_ARRAY2d_\n\n\n#include \"array2d/array2d_kernel.h\"\n#include \"array2d/serialize_pixel_overloads.h\"\n#include \"array2d/array2d_generic_image.h\"\n\n#endif // DLIB_ARRAY2d_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/assert.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ASSERt_\n#define DLIB_ASSERt_\n\n#include \"config.h\"\n#include <sstream>\n#include <iosfwd>\n#include \"error.h\"\n\n// -----------------------------\n\n// Use some stuff from boost here\n//  (C) Copyright John Maddock 2001 - 2003.\n//  (C) Copyright Darin Adler 2001.\n//  (C) Copyright Peter Dimov 2001.\n//  (C) Copyright Bill Kempf 2002.\n//  (C) Copyright Jens Maurer 2002.\n//  (C) Copyright David Abrahams 2002 - 2003.\n//  (C) Copyright Gennaro Prota 2003.\n//  (C) Copyright Eric Friedman 2003.\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef BOOST_JOIN\n#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )\n#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)\n#define BOOST_DO_JOIN2( X, Y ) X##Y\n#endif\n\n// -----------------------------\n\nnamespace dlib\n{\n    template <bool value> struct compile_time_assert;\n    template <> struct compile_time_assert<true> { enum {value=1};  };\n\n    template <typename T, typename U> struct assert_are_same_type;\n    template <typename T> struct assert_are_same_type<T,T> {enum{value=1};};\n    template <typename T, typename U> struct assert_are_not_same_type {enum{value=1}; };\n    template <typename T> struct assert_are_not_same_type<T,T> {};\n}\n\n\n// gcc 4.8 will warn about unused typedefs.  But we use typedefs in some of the compile\n// time assert macros so we need to make it not complain about them \"not being used\".\n#ifdef __GNUC__\n#define DLIB_NO_WARN_UNUSED __attribute__ ((unused))\n#else\n#define DLIB_NO_WARN_UNUSED \n#endif\n\n#define COMPILE_TIME_ASSERT(expression) \\\n        DLIB_NO_WARN_UNUSED typedef char BOOST_JOIN(DLIB_CTA, __LINE__)[::dlib::compile_time_assert<(bool)(expression)>::value] \n\n#define ASSERT_ARE_SAME_TYPE(type1, type2) \\\n        DLIB_NO_WARN_UNUSED typedef char BOOST_JOIN(DLIB_AAST, __LINE__)[::dlib::assert_are_same_type<type1,type2>::value] \n\n#define ASSERT_ARE_NOT_SAME_TYPE(type1, type2) \\\n        DLIB_NO_WARN_UNUSED typedef char BOOST_JOIN(DLIB_AANST, __LINE__)[::dlib::assert_are_not_same_type<type1,type2>::value] \n\n// -----------------------------\n\n#if defined DLIB_DISABLE_ASSERTS\n    // if DLIB_DISABLE_ASSERTS is on then never enable DLIB_ASSERT no matter what.\n    #undef ENABLE_ASSERTS\n#endif\n\n#if !defined(DLIB_DISABLE_ASSERTS) && ( defined DEBUG || defined _DEBUG)\n    // make sure ENABLE_ASSERTS is defined if we are indeed using them.\n    #ifndef ENABLE_ASSERTS\n        #define ENABLE_ASSERTS\n    #endif\n#endif\n\n// -----------------------------\n\n#ifdef __GNUC__\n// There is a bug in version 4.4.5 of GCC on Ubuntu which causes GCC to segfault\n// when __PRETTY_FUNCTION__ is used within certain templated functions.  So just\n// don't use it with this version of GCC.\n#  if !(__GNUC__ == 4 && __GNUC_MINOR__ == 4 && __GNUC_PATCHLEVEL__ == 5)\n#    define DLIB_FUNCTION_NAME __PRETTY_FUNCTION__\n#  else\n#    define DLIB_FUNCTION_NAME \"unknown function\" \n#  endif\n#elif defined(_MSC_VER)\n#define DLIB_FUNCTION_NAME __FUNCSIG__\n#else\n#define DLIB_FUNCTION_NAME \"unknown function\" \n#endif\n\n#define DLIB_CASSERT(_exp,_message)                                              \\\n    {if ( !(_exp) )                                                         \\\n    {                                                                       \\\n        dlib_assert_breakpoint();                                           \\\n        std::ostringstream dlib_o_out;                                       \\\n        dlib_o_out << \"\\n\\nError detected at line \" << __LINE__ << \".\\n\";    \\\n        dlib_o_out << \"Error detected in file \" << __FILE__ << \".\\n\";      \\\n        dlib_o_out << \"Error detected in function \" << DLIB_FUNCTION_NAME << \".\\n\\n\";      \\\n        dlib_o_out << \"Failing expression was \" << #_exp << \".\\n\";           \\\n        dlib_o_out << std::boolalpha << _message << \"\\n\";                    \\\n        throw dlib::fatal_error(dlib::EBROKEN_ASSERT,dlib_o_out.str());      \\\n    }}                                                                      \n\n\n#ifdef ENABLE_ASSERTS \n    #define DLIB_ASSERT(_exp,_message) DLIB_CASSERT(_exp,_message)\n    #define DLIB_IF_ASSERT(exp) exp\n#else\n    #define DLIB_ASSERT(_exp,_message)\n    #define DLIB_IF_ASSERT(exp) \n#endif\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A DLIB_ASSERT_HAS_STANDARD_LAYOUT \n    \n        This macro is meant to cause a compiler error if a type doesn't have a simple\n        memory layout (like a C struct). In particular, types with simple layouts are\n        ones which can be copied via memcpy().\n        \n        \n        This was called a POD type in C++03 and in C++0x we are looking to check if \n        it is a \"standard layout type\".  Once we can use C++0x we can change this macro \n        to something that uses the std::is_standard_layout type_traits class.  \n        See: http://www2.research.att.com/~bs/C++0xFAQ.html#PODs\n    !*/\n    // Use the fact that in C++03 you can't put non-PODs into a union.\n#define DLIB_ASSERT_HAS_STANDARD_LAYOUT(type)   \\\n    union  BOOST_JOIN(DAHSL_,__LINE__) { type TYPE_NOT_STANDARD_LAYOUT; };  \\\n    DLIB_NO_WARN_UNUSED typedef char BOOST_JOIN(DAHSL2_,__LINE__)[sizeof(BOOST_JOIN(DAHSL_,__LINE__))]; \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n// breakpoints\nextern \"C\"\n{\n    inline void dlib_assert_breakpoint(\n    ) {}\n    /*!\n        ensures\n            - this function does nothing \n              It exists just so you can put breakpoints on it in a debugging tool.\n              It is called only when an DLIB_ASSERT or DLIB_CASSERT fails and is about to\n              throw an exception.\n    !*/\n}\n\n// -----------------------------\n\n#include \"stack_trace.h\"\n\n#endif // DLIB_ASSERt_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/base64/base64_kernel_1.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BASE64_KERNEL_1_CPp_\n#define DLIB_BASE64_KERNEL_1_CPp_\n\n#include \"base64_kernel_1.h\"\n#include <iostream>\n#include <sstream>\n#include <climits>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    base64::line_ending_type base64::\n    line_ending (\n    ) const\n    {\n        return eol_style;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base64::\n    set_line_ending (\n        line_ending_type eol_style_\n    )\n    {\n        eol_style = eol_style_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    base64::\n    base64 (\n    ) : \n        encode_table(0),\n        decode_table(0),\n        bad_value(100),\n        eol_style(LF)\n    {\n        try\n        {\n            encode_table = new char[64];\n            decode_table = new unsigned char[UCHAR_MAX];\n        }\n        catch (...)\n        {\n            if (encode_table) delete [] encode_table;\n            if (decode_table) delete [] decode_table;\n            throw;\n        }\n\n        // now set up the tables with the right stuff\n        encode_table[0] = 'A';\n        encode_table[17] = 'R';\n        encode_table[34] = 'i';\n        encode_table[51] = 'z';\n\n        encode_table[1] = 'B';\n        encode_table[18] = 'S';\n        encode_table[35] = 'j';\n        encode_table[52] = '0';\n\n        encode_table[2] = 'C';\n        encode_table[19] = 'T';\n        encode_table[36] = 'k';\n        encode_table[53] = '1';\n\n        encode_table[3] = 'D';\n        encode_table[20] = 'U';\n        encode_table[37] = 'l';\n        encode_table[54] = '2';\n\n        encode_table[4] = 'E';\n        encode_table[21] = 'V';\n        encode_table[38] = 'm';\n        encode_table[55] = '3';\n\n        encode_table[5] = 'F';\n        encode_table[22] = 'W';\n        encode_table[39] = 'n';\n        encode_table[56] = '4';\n\n        encode_table[6] = 'G';\n        encode_table[23] = 'X';\n        encode_table[40] = 'o';\n        encode_table[57] = '5';\n\n        encode_table[7] = 'H';\n        encode_table[24] = 'Y';\n        encode_table[41] = 'p';\n        encode_table[58] = '6';\n\n        encode_table[8] = 'I';\n        encode_table[25] = 'Z';\n        encode_table[42] = 'q';\n        encode_table[59] = '7';\n\n        encode_table[9] = 'J';\n        encode_table[26] = 'a';\n        encode_table[43] = 'r';\n        encode_table[60] = '8';\n\n        encode_table[10] = 'K';\n        encode_table[27] = 'b';\n        encode_table[44] = 's';\n        encode_table[61] = '9';\n\n        encode_table[11] = 'L';\n        encode_table[28] = 'c';\n        encode_table[45] = 't';\n        encode_table[62] = '+';\n\n        encode_table[12] = 'M';\n        encode_table[29] = 'd';\n        encode_table[46] = 'u';\n        encode_table[63] = '/';\n\n        encode_table[13] = 'N';\n        encode_table[30] = 'e';\n        encode_table[47] = 'v';\n\n        encode_table[14] = 'O';\n        encode_table[31] = 'f';\n        encode_table[48] = 'w';\n\n        encode_table[15] = 'P';\n        encode_table[32] = 'g';\n        encode_table[49] = 'x';\n\n        encode_table[16] = 'Q';\n        encode_table[33] = 'h';\n        encode_table[50] = 'y';\n\n\n\n        // we can now fill out the decode_table by using the encode_table\n        for (int i = 0; i < UCHAR_MAX; ++i)\n        {\n            decode_table[i] = bad_value;\n        }\n        for (unsigned char i = 0; i < 64; ++i)\n        {\n            decode_table[(unsigned char)encode_table[i]] = i;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    base64::\n    ~base64 (\n    )\n    {\n        delete [] encode_table;\n        delete [] decode_table;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base64::\n    encode (\n        std::istream& in_,\n        std::ostream& out_\n    ) const\n    {\n        using namespace std;\n        streambuf& in = *in_.rdbuf();\n        streambuf& out = *out_.rdbuf();\n\n        unsigned char inbuf[3];\n        unsigned char outbuf[4];\n        streamsize status = in.sgetn(reinterpret_cast<char*>(&inbuf),3);\n\n        unsigned char c1, c2, c3, c4, c5, c6;\n\n        int counter = 19;\n\n        // while we haven't hit the end of the input stream\n        while (status != 0)\n        {\n            if (counter == 0)\n            {\n                counter = 19;\n                // write a newline\n                char ch;\n                switch (eol_style)\n                {\n                    case CR:\n                        ch = '\\r';\n                        if (out.sputn(&ch,1)!=1)\n                            throw std::ios_base::failure(\"error occured in the base64 object\");\n                        break;\n                    case LF:\n                        ch = '\\n';\n                        if (out.sputn(&ch,1)!=1)\n                            throw std::ios_base::failure(\"error occured in the base64 object\");\n                        break;\n                    case CRLF:\n                        ch = '\\r';\n                        if (out.sputn(&ch,1)!=1)\n                            throw std::ios_base::failure(\"error occured in the base64 object\");\n                        ch = '\\n';\n                        if (out.sputn(&ch,1)!=1)\n                            throw std::ios_base::failure(\"error occured in the base64 object\");\n                        break;\n                    default:\n                        DLIB_CASSERT(false,\"this should never happen\");\n                }\n            }\n            --counter;\n\n            if (status == 3)\n            {\n                // encode the bytes in inbuf to base64 and write them to the output stream\n                c1 = inbuf[0]&0xfc;\n                c2 = inbuf[0]&0x03;\n                c3 = inbuf[1]&0xf0;\n                c4 = inbuf[1]&0x0f;\n                c5 = inbuf[2]&0xc0;\n                c6 = inbuf[2]&0x3f;\n\n                outbuf[0] = c1>>2;\n                outbuf[1] = (c2<<4)|(c3>>4);\n                outbuf[2] = (c4<<2)|(c5>>6);\n                outbuf[3] = c6;\n\n\n                outbuf[0] = encode_table[outbuf[0]];\n                outbuf[1] = encode_table[outbuf[1]];\n                outbuf[2] = encode_table[outbuf[2]];\n                outbuf[3] = encode_table[outbuf[3]];\n\n                // write the encoded bytes to the output stream\n                if (out.sputn(reinterpret_cast<char*>(&outbuf),4)!=4)\n                {\n                    throw std::ios_base::failure(\"error occured in the base64 object\");\n                }\n\n                // get 3 more input bytes\n                status = in.sgetn(reinterpret_cast<char*>(&inbuf),3);\n                continue;\n            }\n            else if (status == 2)\n            {\n                // we are at the end of the input stream and need to add some padding\n\n                // encode the bytes in inbuf to base64 and write them to the output stream\n                c1 = inbuf[0]&0xfc;\n                c2 = inbuf[0]&0x03;\n                c3 = inbuf[1]&0xf0;\n                c4 = inbuf[1]&0x0f;\n                c5 = 0;\n\n                outbuf[0] = c1>>2;\n                outbuf[1] = (c2<<4)|(c3>>4);\n                outbuf[2] = (c4<<2)|(c5>>6);\n                outbuf[3] = '=';\n\n                outbuf[0] = encode_table[outbuf[0]];\n                outbuf[1] = encode_table[outbuf[1]];\n                outbuf[2] = encode_table[outbuf[2]];\n\n                // write the encoded bytes to the output stream\n                if (out.sputn(reinterpret_cast<char*>(&outbuf),4)!=4)\n                {\n                    throw std::ios_base::failure(\"error occured in the base64 object\");\n                }\n\n\n                break;\n            }\n            else // in this case status must be 1 \n            {\n                // we are at the end of the input stream and need to add some padding\n\n                // encode the bytes in inbuf to base64 and write them to the output stream\n                c1 = inbuf[0]&0xfc;\n                c2 = inbuf[0]&0x03;\n                c3 = 0;\n\n                outbuf[0] = c1>>2;\n                outbuf[1] = (c2<<4)|(c3>>4);\n                outbuf[2] = '=';\n                outbuf[3] = '=';\n\n                outbuf[0] = encode_table[outbuf[0]];\n                outbuf[1] = encode_table[outbuf[1]];\n\n\n                // write the encoded bytes to the output stream\n                if (out.sputn(reinterpret_cast<char*>(&outbuf),4)!=4)\n                {\n                    throw std::ios_base::failure(\"error occured in the base64 object\");\n                }\n\n                break;\n            }\n        } // while (status != 0)\n        \n\n        // make sure the stream buffer flushes to its I/O channel\n        out.pubsync();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base64::\n    decode (\n        std::istream& in_,\n        std::ostream& out_\n    ) const\n    {\n        using namespace std;\n        streambuf& in = *in_.rdbuf();\n        streambuf& out = *out_.rdbuf();\n\n        unsigned char inbuf[4];\n        unsigned char outbuf[3];\n        int inbuf_pos = 0;\n        streamsize status = in.sgetn(reinterpret_cast<char*>(inbuf),1);\n\n        // only count this character if it isn't some kind of filler\n        if (status == 1 && decode_table[inbuf[0]] != bad_value )\n            ++inbuf_pos;\n\n        unsigned char c1, c2, c3, c4, c5, c6;\n        streamsize outsize;\n\n        // while we haven't hit the end of the input stream\n        while (status != 0)\n        {\n            // if we have 4 valid characters\n            if (inbuf_pos == 4)\n            {\n                inbuf_pos = 0;\n\n                // this might be the end of the encoded data so we need to figure out if \n                // there was any padding applied.\n                outsize = 3;\n                if (inbuf[3] == '=')\n                {\n                    if (inbuf[2] == '=')\n                        outsize = 1;\n                    else\n                        outsize = 2;\n                }\n\n                // decode the incoming characters\n                inbuf[0] = decode_table[inbuf[0]];\n                inbuf[1] = decode_table[inbuf[1]];\n                inbuf[2] = decode_table[inbuf[2]];\n                inbuf[3] = decode_table[inbuf[3]];\n\n\n                // now pack these guys into bytes rather than 6 bit chunks\n                c1 = inbuf[0]<<2;\n                c2 = inbuf[1]>>4;\n                c3 = inbuf[1]<<4;\n                c4 = inbuf[2]>>2;\n                c5 = inbuf[2]<<6;\n                c6 = inbuf[3];\n\n                outbuf[0] = c1|c2;\n                outbuf[1] = c3|c4;\n                outbuf[2] = c5|c6;\n\n\n                // write the encoded bytes to the output stream\n                if (out.sputn(reinterpret_cast<char*>(&outbuf),outsize)!=outsize)\n                {\n                    throw std::ios_base::failure(\"error occured in the base64 object\");\n                }\n            }\n\n            // get more input characters \n            status = in.sgetn(reinterpret_cast<char*>(inbuf + inbuf_pos),1);\n            // only count this character if it isn't some kind of filler \n            if ((decode_table[inbuf[inbuf_pos]] != bad_value || inbuf[inbuf_pos] == '=') && \n                status != 0)\n                ++inbuf_pos;\n        } // while (status != 0)\n        \n        if (inbuf_pos != 0)\n        {\n            ostringstream sout;\n            sout << inbuf_pos << \" extra characters were found at the end of the encoded data.\"\n                << \"  This may indicate that the data stream has been truncated.\";\n            // this happens if we hit EOF in the middle of decoding a 24bit block.\n            throw decode_error(sout.str());\n        }\n\n        // make sure the stream buffer flushes to its I/O channel\n        out.pubsync();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BASE64_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/base64/base64_kernel_1.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BASE64_KERNEl_1_\n#define DLIB_BASE64_KERNEl_1_\n\n#include \"../algs.h\"\n#include \"base64_kernel_abstract.h\"\n#include <iosfwd>\n\nnamespace dlib\n{\n\n    class base64 \n    {\n        /*!\n            INITIAL VALUE\n                - bad_value == 100\n                - encode_table == a pointer to an array of 64 chars\n                - where x is a 6 bit value the following is true:\n                    - encode_table[x] == the base64 encoding of x\n                - decode_table == a pointer to an array of UCHAR_MAX chars\n                - where x is any char value:\n                    - if (x is a valid character in the base64 coding scheme) then\n                        - decode_table[x] == the 6 bit value that x encodes\n                    - else\n                        - decode_table[x] == bad_value \n\n            CONVENTION\n                - The state of this object never changes so just refer to its\n                  initial value.\n                  \n\n        !*/\n\n    public:\n        // this is here for backwards compatibility with older versions of dlib.\n        typedef base64 kernel_1a;\n\n        class decode_error : public dlib::error { public:\n        decode_error( const std::string& e) : error(e) {}};\n\n        base64 (\n        );\n\n        virtual ~base64 (\n        );\n\n        enum line_ending_type\n        {\n            CR,  // i.e. \"\\r\"\n            LF,  // i.e. \"\\n\"\n            CRLF // i.e. \"\\r\\n\"\n        };\n\n        line_ending_type line_ending (\n        ) const;\n\n        void set_line_ending (\n            line_ending_type eol_style_\n        );\n\n        void encode (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n\n        void decode (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n\n    private:\n\n        char* encode_table;\n        unsigned char* decode_table;\n        const unsigned char bad_value;\n        line_ending_type eol_style;\n\n        // restricted functions\n        base64(base64&);        // copy constructor\n        base64& operator=(base64&);    // assignment operator\n\n    };   \n   \n}\n\n#ifdef NO_MAKEFILE\n#include \"base64_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_BASE64_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/base64/base64_kernel_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BASE64_KERNEl_ABSTRACT_\n#ifdef DLIB_BASE64_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n#include <iosfwd>\n\nnamespace dlib\n{\n\n    class base64 \n    {\n        /*!\n            INITIAL VALUE\n                - line_ending() == LF\n\n            WHAT THIS OBJECT REPRESENTS\n                This object consists of the two functions encode and decode.\n                These functions allow you to encode and decode data to and from\n                the Base64 Content-Transfer-Encoding defined in section 6.8 of\n                rfc2045.\n        !*/\n\n    public:\n\n        class decode_error : public dlib::error {};\n\n        base64 (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~base64 (\n        );\n        /*!\n            ensures\n                - all memory associated with *this has been released\n        !*/\n\n        enum line_ending_type\n        {\n            CR,  // i.e. \"\\r\"\n            LF,  // i.e. \"\\n\"\n            CRLF // i.e. \"\\r\\n\"\n        };\n\n        line_ending_type line_ending (\n        ) const;\n        /*!\n            ensures\n                - returns the type of end of line bytes the encoder\n                  will use when encoding data to base64 blocks.  Note that\n                  the ostream object you use might apply some sort of transform\n                  to line endings as well.  For example, C++ ofstream objects\n                  usually convert '\\n' into whatever a normal newline is for\n                  your platform unless you open a file in binary mode.  But\n                  aside from file streams the ostream objects usually don't\n                  modify the data you pass to them.\n        !*/\n\n        void set_line_ending (\n            line_ending_type eol_style\n        );\n        /*!\n            ensures\n                - #line_ending() == eol_style\n        !*/\n\n        void encode (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n        /*!\n            ensures\n                - reads all data from in (until EOF is reached) and encodes it\n                  and writes it to out\n            throws\n                - std::ios_base::failure\n                    if there was a problem writing to out then this exception will \n                    be thrown.                      \n                - any other exception\n                    this exception may be thrown if there is any other problem                    \n        !*/\n\n        void decode (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n        /*!\n            ensures\n                - reads data from in (until EOF is reached) and decodees it \n                  and writes it to out. \n            throws\n                - std::ios_base::failure\n                    if there was a problem writing to out then this exception will \n                    be thrown.           \n                - decode_error\n                    if an error was detected in the encoded data that prevented\n                    it from being correctly decoded then this exception is \n                    thrown.  \n                - any other exception\n                    this exception may be thrown if there is any other problem                    \n        !*/\n\n    private:\n\n        // restricted functions\n        base64(base64&);        // copy constructor\n        base64& operator=(base64&);    // assignment operator\n\n    };   \n   \n}\n\n#endif // DLIB_BASE64_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/base64.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BASe64_\n#define DLIB_BASe64_\n\n#include \"base64/base64_kernel_1.h\"\n\n#endif // DLIB_BASe64_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bayes_utils/bayes_utils.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BAYES_UTILs_\n#define DLIB_BAYES_UTILs_\n\n#include \"bayes_utils_abstract.h\"\n\n#include \"../string.h\"\n#include \"../map.h\"\n#include \"../matrix.h\"\n#include \"../rand.h\"\n#include \"../array.h\"\n#include \"../set.h\"\n#include \"../algs.h\"\n#include \"../noncopyable.h\"\n#include \"../smart_pointers.h\"\n#include \"../graph.h\"\n#include <vector>\n#include <algorithm>\n#include <ctime>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class assignment \n    {\n    public:\n\n        assignment()\n        {\n        }\n\n        assignment(\n            const assignment& a\n        )\n        {\n            a.reset();\n            while (a.move_next())\n            {\n                unsigned long idx = a.element().key();\n                unsigned long value = a.element().value();\n                vals.add(idx,value);\n            }\n        }\n\n        assignment& operator = (\n            const assignment& rhs\n        )\n        {\n            if (this == &rhs)\n                return *this;\n\n            assignment(rhs).swap(*this);\n            return *this;\n        }\n\n        void clear()\n        {\n            vals.clear();\n        }\n\n        bool operator < (\n            const assignment& item\n        ) const \n        {  \n            if (size() < item.size())\n                return true;\n            else if (size() > item.size())\n                return false;\n\n            reset();\n            item.reset();\n            while (move_next())\n            {\n                item.move_next();\n                if (element().key() < item.element().key())\n                    return true;\n                else if (element().key() > item.element().key())\n                    return false;\n                else if (element().value() < item.element().value())\n                    return true;\n                else if (element().value() > item.element().value())\n                    return false;\n            }\n\n            return false;\n        }\n\n        bool has_index (\n            unsigned long idx\n        ) const\n        {\n            return vals.is_in_domain(idx);\n        }\n\n        void add (\n            unsigned long idx,\n            unsigned long value = 0\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( has_index(idx) == false ,\n                         \"\\tvoid assignment::add(idx)\"\n                         << \"\\n\\tYou can't add the same index to an assignment object more than once\"\n                         << \"\\n\\tidx:  \" << idx \n                         << \"\\n\\tthis: \" << this\n            );\n\n            vals.add(idx, value);\n        }\n\n        unsigned long& operator[] (\n            const long idx\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( has_index(idx) == true ,\n                         \"\\tunsigned long assignment::operator[](idx)\"\n                         << \"\\n\\tYou can't access an index value if it isn't already in the object\"\n                         << \"\\n\\tidx:  \" << idx \n                         << \"\\n\\tthis: \" << this\n            );\n\n            return vals[idx];\n        }\n\n        const unsigned long& operator[] (\n            const long idx\n        ) const\n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( has_index(idx) == true ,\n                         \"\\tunsigned long assignment::operator[](idx)\"\n                         << \"\\n\\tYou can't access an index value if it isn't already in the object\"\n                         << \"\\n\\tidx:  \" << idx \n                         << \"\\n\\tthis: \" << this\n            );\n\n            return vals[idx];\n        }\n\n        void swap (\n            assignment& item\n        )\n        {\n            vals.swap(item.vals);\n        }\n\n        void remove (\n            unsigned long idx\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( has_index(idx) == true ,\n                         \"\\tunsigned long assignment::remove(idx)\"\n                         << \"\\n\\tYou can't remove an index value if it isn't already in the object\"\n                         << \"\\n\\tidx:  \" << idx \n                         << \"\\n\\tthis: \" << this\n            );\n\n            vals.destroy(idx);\n        }\n\n        unsigned long size() const { return vals.size(); }\n\n        void reset() const { vals.reset(); }\n\n        bool move_next() const { return vals.move_next(); }\n\n        map_pair<unsigned long, unsigned long>& element() \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_element_valid() == true,\n                        \"\\tmap_pair<unsigned long,unsigned long>& assignment::element()\"\n                        << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                        << \"\\n\\tthis: \" << this\n            );\n            return vals.element(); \n        }\n\n        const map_pair<unsigned long, unsigned long>& element() const \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_element_valid() == true,\n                        \"\\tconst map_pair<unsigned long,unsigned long>& assignment::element() const\"\n                        << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                        << \"\\n\\tthis: \" << this\n            );\n\n            return vals.element(); \n        }\n\n        bool at_start() const { return vals.at_start(); }\n\n        bool current_element_valid() const { return vals.current_element_valid(); }\n\n        friend inline void serialize (\n            const assignment& item,\n            std::ostream& out \n        )   \n        {\n            serialize(item.vals, out);\n        }\n\n        friend inline void deserialize (\n            assignment& item,\n            std::istream& in\n        )\n        {\n            deserialize(item.vals, in);\n        }\n\n    private:\n        mutable dlib::map<unsigned long, unsigned long>::kernel_1b_c vals;\n    };\n\n    inline std::ostream& operator << (\n        std::ostream& out,\n        const assignment& a\n    )\n    {\n        a.reset();\n        out << \"(\";\n        if (a.move_next())\n            out << a.element().key() << \":\" << a.element().value();\n\n        while (a.move_next())\n        {\n            out << \", \" << a.element().key() << \":\" << a.element().value();\n        }\n\n        out << \")\";\n        return out;\n    }\n\n\n    inline void swap (\n        assignment& a,\n        assignment& b\n    )\n    {\n        a.swap(b);\n    }\n\n\n// ------------------------------------------------------------------------\n\n    class joint_probability_table \n    {\n        /*!\n            INITIAL VALUE\n                - table.size() == 0\n\n            CONVENTION\n                - size() == table.size()\n                - probability(a) == table[a]\n        !*/\n    public:\n\n        joint_probability_table (\n            const joint_probability_table& t\n        )\n        {\n            t.reset();\n            while (t.move_next())\n            {\n                assignment a = t.element().key();\n                double p = t.element().value();\n                set_probability(a,p);\n            }\n        }\n\n        joint_probability_table() {}\n\n        joint_probability_table& operator= (\n            const joint_probability_table& rhs\n        )\n        {\n            if (this == &rhs)\n                return *this;\n            joint_probability_table(rhs).swap(*this);\n            return *this;\n        }\n\n        void set_probability (\n            const assignment& a,\n            double p\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0.0 <= p && p <= 1.0,\n                        \"\\tvoid& joint_probability_table::set_probability(a,p)\"\n                        << \"\\n\\tyou have given an invalid probability value\"\n                        << \"\\n\\tp:    \" << p \n                        << \"\\n\\ta:    \" << a \n                        << \"\\n\\tthis: \" << this\n            );\n\n            if (table.is_in_domain(a))\n            {\n                table[a] = p;\n            }\n            else\n            {\n                assignment temp(a);\n                table.add(temp,p);\n            }\n        }\n\n        bool has_entry_for (\n            const assignment& a\n        ) const\n        {\n            return table.is_in_domain(a);\n        }\n\n        void add_probability (\n            const assignment& a,\n            double p\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0.0 <= p && p <= 1.0,\n                        \"\\tvoid& joint_probability_table::add_probability(a,p)\"\n                        << \"\\n\\tyou have given an invalid probability value\"\n                        << \"\\n\\tp:    \" << p \n                        << \"\\n\\ta:    \" << a \n                        << \"\\n\\tthis: \" << this\n            );\n\n            if (table.is_in_domain(a))\n            {\n                table[a] += p;\n                if (table[a] > 1.0)\n                    table[a] = 1.0;\n            }\n            else\n            {\n                assignment temp(a);\n                table.add(temp,p);\n            }\n        }\n\n        double probability (\n            const assignment& a\n        ) const\n        {\n            return table[a];\n        }\n\n        void clear()\n        {\n            table.clear();\n        }\n\n        unsigned long size () const { return table.size(); }\n        bool move_next() const { return table.move_next(); }\n        void reset() const { table.reset(); }\n        map_pair<assignment,double>& element() \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_element_valid() == true,\n                        \"\\tmap_pair<assignment,double>& joint_probability_table::element()\"\n                        << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                        << \"\\n\\tthis: \" << this\n            );\n\n            return table.element(); \n        }\n\n        const map_pair<assignment,double>& element() const \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_element_valid() == true,\n                        \"\\tconst map_pair<assignment,double>& joint_probability_table::element() const\"\n                        << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                        << \"\\n\\tthis: \" << this\n            );\n\n            return table.element(); \n        }\n\n        bool at_start() const { return table.at_start(); }\n\n        bool current_element_valid() const { return table.current_element_valid(); }\n\n\n        template <typename T>\n        void marginalize (\n            const T& vars,\n            joint_probability_table& out\n        ) const\n        {\n            out.clear();\n            double p;\n            reset();\n            while (move_next())\n            {\n                assignment a;\n                const assignment& asrc = element().key();\n                p = element().value();\n\n                asrc.reset();\n                while (asrc.move_next())\n                {\n                    if (vars.is_member(asrc.element().key()))\n                        a.add(asrc.element().key(), asrc.element().value());\n                }\n\n                out.add_probability(a,p);\n            }\n        }\n\n        void marginalize (\n            const unsigned long var,\n            joint_probability_table& out\n        ) const\n        {\n            out.clear();\n            double p;\n            reset();\n            while (move_next())\n            {\n                assignment a;\n                const assignment& asrc = element().key();\n                p = element().value();\n\n                asrc.reset();\n                while (asrc.move_next())\n                {\n                    if (var == asrc.element().key())\n                        a.add(asrc.element().key(), asrc.element().value());\n                }\n\n                out.add_probability(a,p);\n            }\n        }\n\n        void normalize (\n        )\n        {\n            double sum = 0;\n\n            reset();\n            while (move_next())\n                sum += element().value();\n\n            reset();\n            while (move_next())\n                element().value() /= sum;\n        }\n\n        void swap (\n            joint_probability_table& item\n        )\n        {\n            table.swap(item.table);\n        }\n\n        friend inline void serialize (\n            const joint_probability_table& item,\n            std::ostream& out \n        )   \n        {\n            serialize(item.table, out);\n        }\n\n        friend inline void deserialize (\n            joint_probability_table& item,\n            std::istream& in\n        )\n        {\n            deserialize(item.table, in);\n        }\n\n    private:\n\n        dlib::map<assignment, double >::kernel_1b_c table;\n    };\n\n    inline void swap (\n        joint_probability_table& a,\n        joint_probability_table& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    class conditional_probability_table : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                - table.size() == 0\n\n            CONVENTION\n                - if (table.is_in_domain(ps) && value < num_vals && table[ps](value) >= 0) then\n                    - has_entry_for(value,ps) == true\n                    - probability(value,ps) == table[ps](value)\n                - else\n                    - has_entry_for(value,ps) == false \n\n                - num_values() == num_vals\n        !*/\n    public:\n\n        conditional_probability_table()\n        {\n            clear();\n        }\n\n        void set_num_values (\n            unsigned long num\n        )\n        {\n            num_vals = num;\n            table.clear();\n        }\n\n        bool has_entry_for (\n            unsigned long value,\n            const assignment& ps\n        ) const\n        {\n            if (table.is_in_domain(ps) && value < num_vals && table[ps](value) >= 0)\n                return true;\n            else\n                return false;\n        }\n\n        unsigned long num_values (\n        ) const { return num_vals; }\n\n        void set_probability (\n            unsigned long value,\n            const assignment& ps,\n            double p\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( value < num_values() && 0.0 <= p && p <= 1.0 ,\n                         \"\\tvoid conditional_probability_table::set_probability()\"\n                         << \"\\n\\tinvalid arguments to set_probability\"\n                         << \"\\n\\tvalue: \" << value \n                         << \"\\n\\tnum_values(): \" << num_values()\n                         << \"\\n\\tp:     \" << p \n                         << \"\\n\\tps:    \" << ps \n                         << \"\\n\\tthis:  \" << this\n            );\n\n            if (table.is_in_domain(ps))\n            {\n                table[ps](value) = p;\n            }\n            else\n            {\n                matrix<double,1> dist(num_vals);\n                set_all_elements(dist,-1);\n                dist(value) = p;\n                assignment temp(ps);\n                table.add(temp,dist);\n            }\n        }\n\n        double probability(\n            unsigned long value,\n            const assignment& ps \n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( value < num_values() && has_entry_for(value,ps) ,\n                         \"\\tvoid conditional_probability_table::probability()\"\n                         << \"\\n\\tinvalid arguments to probability\"\n                         << \"\\n\\tvalue:        \" << value \n                         << \"\\n\\tnum_values(): \" << num_values() \n                         << \"\\n\\tps:           \" << ps \n                         << \"\\n\\tthis:         \" << this\n            );\n\n            return table[ps](value);\n        }\n\n        void clear()\n        {\n            table.clear();\n            num_vals = 0;\n        }\n\n        void empty_table ()\n        {\n            table.clear();\n        }\n\n        void swap (\n            conditional_probability_table& item \n        ) \n        { \n            exchange(num_vals, item.num_vals);\n            table.swap(item.table);\n        }\n\n        friend inline void serialize (\n            const conditional_probability_table& item,\n            std::ostream& out \n        )   \n        {\n            serialize(item.table, out);\n            serialize(item.num_vals, out);\n        }\n\n        friend inline void deserialize (\n            conditional_probability_table& item,\n            std::istream& in\n        )\n        {\n            deserialize(item.table, in);\n            deserialize(item.num_vals, in);\n        }\n\n    private:\n        dlib::map<assignment, matrix<double,1> >::kernel_1b_c table;\n        unsigned long num_vals;\n    };\n\n    inline void swap (\n        conditional_probability_table& a,\n        conditional_probability_table& b\n    ) { a.swap(b); }\n\n// ------------------------------------------------------------------------\n\n    class bayes_node : noncopyable\n    {\n    public:\n        bayes_node ()\n        {\n            is_instantiated = false;\n            value_ = 0;\n        }\n\n        unsigned long value (\n        ) const { return value_;}\n\n        void set_value (\n            unsigned long new_value\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( new_value < table().num_values(),\n                         \"\\tvoid bayes_node::set_value(new_value)\"\n                         << \"\\n\\tnew_value must be less than the number of possible values for this node\"\n                         << \"\\n\\tnew_value:            \" << new_value \n                         << \"\\n\\ttable().num_values(): \" << table().num_values() \n                         << \"\\n\\tthis:                 \" << this\n            );\n\n            value_ = new_value;\n        }\n\n        conditional_probability_table& table (\n        ) { return table_; }\n\n        const conditional_probability_table& table (\n        ) const { return table_; }\n\n        bool is_evidence (\n        ) const { return is_instantiated; }\n\n        void set_as_nonevidence (\n        ) { is_instantiated = false; }\n\n        void set_as_evidence (\n        ) { is_instantiated = true; }\n\n        void swap (\n            bayes_node& item \n        ) \n        { \n            exchange(value_, item.value_);\n            exchange(is_instantiated, item.is_instantiated);\n            table_.swap(item.table_);\n        }\n\n        friend inline void serialize (\n            const bayes_node& item,\n            std::ostream& out \n        )   \n        {\n            serialize(item.value_, out);\n            serialize(item.is_instantiated, out);\n            serialize(item.table_, out);\n        }\n\n        friend inline void deserialize (\n            bayes_node& item,\n            std::istream& in\n        )\n        {\n            deserialize(item.value_, in);\n            deserialize(item.is_instantiated, in);\n            deserialize(item.table_, in);\n        }\n\n    private:\n\n        unsigned long value_; \n        bool is_instantiated;\n        conditional_probability_table table_;\n    };\n\n    inline void swap (\n        bayes_node& a,\n        bayes_node& b\n    ) { a.swap(b); }\n\n// ------------------------------------------------------------------------\n\n    namespace bayes_node_utils\n    {\n\n        template <typename T>\n        unsigned long node_num_values (\n            const T& bn,\n            unsigned long n\n        )  \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes(),\n                         \"\\tvoid bayes_node_utils::node_num_values(bn, n)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n            );\n\n            return bn.node(n).data.table().num_values(); \n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        void set_node_value (\n            T& bn,\n            unsigned long n,\n            unsigned long val\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes() && val < node_num_values(bn,n),\n                         \"\\tvoid bayes_node_utils::set_node_value(bn, n, val)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tval:                   \" << val \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n                         << \"\\n\\tnode_num_values(bn,n): \" << node_num_values(bn,n) \n            );\n\n            bn.node(n).data.set_value(val); \n        }\n\n    // ----------------------------------------------------------------------------------------\n        template <typename T>\n        unsigned long node_value (\n            const T& bn,\n            unsigned long n\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes(),\n                         \"\\tunsigned long bayes_node_utils::node_value(bn, n)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n            );\n\n            return bn.node(n).data.value();\n        }\n    // ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        bool node_is_evidence (\n            const T& bn,\n            unsigned long n\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes(),\n                         \"\\tbool bayes_node_utils::node_is_evidence(bn, n)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n            );\n\n            return bn.node(n).data.is_evidence();\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        void set_node_as_evidence (\n            T& bn,\n            unsigned long n\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes(),\n                         \"\\tvoid bayes_node_utils::set_node_as_evidence(bn, n)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n            );\n\n            bn.node(n).data.set_as_evidence(); \n        }\n\n    // ----------------------------------------------------------------------------------------\n        template <typename T>\n        void set_node_as_nonevidence (\n            T& bn,\n            unsigned long n\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes(),\n                         \"\\tvoid bayes_node_utils::set_node_as_nonevidence(bn, n)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n            );\n\n            bn.node(n).data.set_as_nonevidence(); \n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        void set_node_num_values (\n            T& bn,\n            unsigned long n,\n            unsigned long num\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes(),\n                         \"\\tvoid bayes_node_utils::set_node_num_values(bn, n, num)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n            );\n\n            bn.node(n).data.table().set_num_values(num); \n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        double node_probability (\n            const T& bn,\n            unsigned long n,\n            unsigned long value,\n            const assignment& parents \n        ) \n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes() && value < node_num_values(bn,n),\n                         \"\\tdouble bayes_node_utils::node_probability(bn, n, value, parents)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tvalue:                 \" << value \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n                         << \"\\n\\tnode_num_values(bn,n): \" << node_num_values(bn,n) \n            );\n\n            DLIB_ASSERT( parents.size() == bn.node(n).number_of_parents(),\n                         \"\\tdouble bayes_node_utils::node_probability(bn, n, value, parents)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                             \" << n \n                         << \"\\n\\tparents.size():                \" << parents.size()\n                         << \"\\n\\tb.node(n).number_of_parents(): \" << bn.node(n).number_of_parents()\n            );\n\n#ifdef ENABLE_ASSERTS\n            parents.reset();\n            while (parents.move_next())\n            {\n                const unsigned long x = parents.element().key();\n                DLIB_ASSERT( bn.has_edge(x, n),\n                             \"\\tdouble bayes_node_utils::node_probability(bn, n, value, parents)\"\n                             << \"\\n\\tInvalid arguments to this function\"\n                             << \"\\n\\tn: \" << n \n                             << \"\\n\\tx: \" << x \n                );\n                DLIB_ASSERT( parents[x] < node_num_values(bn,x),\n                             \"\\tdouble bayes_node_utils::node_probability(bn, n, value, parents)\"\n                             << \"\\n\\tInvalid arguments to this function\"\n                             << \"\\n\\tn:                     \" << n \n                             << \"\\n\\tx:                     \" << x \n                             << \"\\n\\tparents[x]:            \" << parents[x] \n                             << \"\\n\\tnode_num_values(bn,x): \" << node_num_values(bn,x) \n                );\n            }\n#endif\n\n            return bn.node(n).data.table().probability(value, parents);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        void set_node_probability (\n            T& bn,\n            unsigned long n,\n            unsigned long value,\n            const assignment& parents,\n            double p\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes() && value < node_num_values(bn,n),\n                         \"\\tvoid bayes_node_utils::set_node_probability(bn, n, value, parents, p)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tp:                     \" << p \n                         << \"\\n\\tvalue:                 \" << value \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n                         << \"\\n\\tnode_num_values(bn,n): \" << node_num_values(bn,n) \n            );\n\n            DLIB_ASSERT( parents.size() == bn.node(n).number_of_parents(),\n                         \"\\tvoid bayes_node_utils::set_node_probability(bn, n, value, parents, p)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                             \" << n \n                         << \"\\n\\tp:                             \" << p \n                         << \"\\n\\tparents.size():                \" << parents.size()\n                         << \"\\n\\tbn.node(n).number_of_parents(): \" << bn.node(n).number_of_parents()\n            );\n\n            DLIB_ASSERT( 0.0 <= p && p <= 1.0,\n                         \"\\tvoid bayes_node_utils::set_node_probability(bn, n, value, parents, p)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn: \" << n \n                         << \"\\n\\tp: \" << p \n            );\n\n#ifdef ENABLE_ASSERTS\n            parents.reset();\n            while (parents.move_next())\n            {\n                const unsigned long x = parents.element().key();\n                DLIB_ASSERT( bn.has_edge(x, n),\n                             \"\\tvoid bayes_node_utils::set_node_probability(bn, n, value, parents, p)\"\n                             << \"\\n\\tInvalid arguments to this function\"\n                             << \"\\n\\tn: \" << n \n                             << \"\\n\\tx: \" << x \n                );\n                DLIB_ASSERT( parents[x] < node_num_values(bn,x),\n                             \"\\tvoid bayes_node_utils::set_node_probability(bn, n, value, parents, p)\"\n                             << \"\\n\\tInvalid arguments to this function\"\n                             << \"\\n\\tn:                     \" << n \n                             << \"\\n\\tx:                     \" << x \n                             << \"\\n\\tparents[x]:            \" << parents[x] \n                             << \"\\n\\tnode_num_values(bn,x): \" << node_num_values(bn,x) \n                );\n            }\n#endif\n\n            bn.node(n).data.table().set_probability(value,parents,p);\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        const assignment node_first_parent_assignment (\n            const T& bn,\n            unsigned long n\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes(),\n                         \"\\tconst assignment bayes_node_utils::node_first_parent_assignment(bn, n)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n            );\n\n            assignment a;\n            const unsigned long num_parents = bn.node(n).number_of_parents();\n            for (unsigned long i = 0; i < num_parents; ++i)\n            {\n                a.add(bn.node(n).parent(i).index(), 0);\n            }\n            return a;\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        bool node_next_parent_assignment (\n            const T& bn,\n            unsigned long n,\n            assignment& a\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes(),\n                         \"\\tbool bayes_node_utils::node_next_parent_assignment(bn, n, a)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n            );\n\n            DLIB_ASSERT( a.size() == bn.node(n).number_of_parents(),\n                         \"\\tbool bayes_node_utils::node_next_parent_assignment(bn, n, a)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                             \" << n \n                         << \"\\n\\ta.size():                      \" << a.size()\n                         << \"\\n\\tbn.node(n).number_of_parents(): \" << bn.node(n).number_of_parents()\n            );\n\n#ifdef ENABLE_ASSERTS\n            a.reset();\n            while (a.move_next())\n            {\n                const unsigned long x = a.element().key();\n                DLIB_ASSERT( bn.has_edge(x, n),\n                             \"\\tbool bayes_node_utils::node_next_parent_assignment(bn, n, a)\"\n                             << \"\\n\\tInvalid arguments to this function\"\n                             << \"\\n\\tn: \" << n \n                             << \"\\n\\tx: \" << x \n                );\n                DLIB_ASSERT( a[x] < node_num_values(bn,x),\n                             \"\\tbool bayes_node_utils::node_next_parent_assignment(bn, n, a)\"\n                             << \"\\n\\tInvalid arguments to this function\"\n                             << \"\\n\\tn:                     \" << n \n                             << \"\\n\\tx:                     \" << x \n                             << \"\\n\\ta[x]:                  \" << a[x] \n                             << \"\\n\\tnode_num_values(bn,x): \" << node_num_values(bn,x) \n                );\n            }\n#endif\n\n            // basically this loop just adds 1 to the assignment but performs\n            // carries if necessary\n            for (unsigned long p = 0; p < a.size(); ++p)\n            {\n                const unsigned long pindex = bn.node(n).parent(p).index();\n                a[pindex] += 1;\n\n                // if we need to perform a carry\n                if (a[pindex] >= node_num_values(bn,pindex))\n                {\n                    a[pindex] = 0;\n                }\n                else\n                {\n                    // no carry necessary so we are done\n                    return true;\n                }\n            }\n\n            // we got through the entire loop which means a carry propagated all the way out\n            // so there must not be any more valid assignments left\n            return false;\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        bool node_cpt_filled_out (\n            const T& bn,\n            unsigned long n\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT( n < bn.number_of_nodes(),\n                         \"\\tbool bayes_node_utils::node_cpt_filled_out(bn, n)\"\n                         << \"\\n\\tInvalid arguments to this function\"\n                         << \"\\n\\tn:                     \" << n \n                         << \"\\n\\tbn.number_of_nodes():  \" << bn.number_of_nodes() \n            );\n\n            const unsigned long num_values = node_num_values(bn,n);\n\n\n            const conditional_probability_table& table = bn.node(n).data.table();\n\n            // now loop over all the possible parent assignments for this node\n            assignment a(node_first_parent_assignment(bn,n));\n            do\n            {\n                double sum = 0;\n                // make sure that this assignment has an entry for all the values this node can take one\n                for (unsigned long value = 0; value < num_values; ++value)\n                {\n                    if (table.has_entry_for(value,a) == false)\n                        return false;\n                    else\n                        sum += table.probability(value,a);\n                }\n\n                // check if the sum of probabilities equals 1 as it should\n                if (std::abs(sum-1.0) > 1e-5)\n                    return false;\n            } while (node_next_parent_assignment(bn,n,a));\n\n            return true;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class bayesian_network_gibbs_sampler : noncopyable\n    {\n    public:\n\n        bayesian_network_gibbs_sampler ()\n        {\n            rnd.set_seed(cast_to_string(std::time(0)));\n        }\n\n\n        template <\n            typename T\n            >\n        void sample_graph (\n            T& bn\n        )\n        {\n            using namespace bayes_node_utils;\n            for (unsigned long n = 0; n < bn.number_of_nodes(); ++n)\n            {\n                if (node_is_evidence(bn, n))\n                    continue;\n\n                samples.set_size(node_num_values(bn,n)); \n                // obtain the probability distribution for this node\n                for (long i = 0; i < samples.nc(); ++i)\n                {\n                    set_node_value(bn, n, i);\n                    samples(i) = node_probability(bn, n);\n\n                    for (unsigned long j = 0; j < bn.node(n).number_of_children(); ++j)\n                        samples(i) *= node_probability(bn, bn.node(n).child(j).index());\n                }\n\n                //normalize samples\n                samples /= sum(samples);\n\n\n                // select a random point in the probability distribution\n                double prob = rnd.get_random_double();\n\n                // now find the point in the distribution this probability corresponds to\n                long j;\n                for (j = 0; j < samples.nc()-1; ++j)\n                {\n                    if (prob <= samples(j))\n                        break;\n                    else\n                        prob -= samples(j);\n                }\n\n                set_node_value(bn, n, j);\n            }\n        }\n\n\n    private:\n\n        template <\n            typename T\n            >\n        double node_probability (\n            const T& bn,\n            unsigned long n \n        ) \n        /*!\n            requires\n                - n < bn.number_of_nodes()\n            ensures\n                - computes the probability of node n having its current value given\n                  the current values of its parents in the network bn\n        !*/\n        {\n            v.clear();\n            for (unsigned long i = 0; i < bn.node(n).number_of_parents(); ++i)\n            {\n                v.add(bn.node(n).parent(i).index(), bn.node(n).parent(i).data.value());\n            }\n            return bn.node(n).data.table().probability(bn.node(n).data.value(), v);\n        }\n\n        assignment v;\n\n        dlib::rand rnd;\n        matrix<double,1> samples; \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    namespace bayesian_network_join_tree_helpers\n    {\n        class bnjt\n        {\n            /*!\n                this object is the base class used in this pimpl idiom\n            !*/\n        public:\n            virtual ~bnjt() {}\n\n            virtual const matrix<double,1> probability(\n                unsigned long idx\n            )  const = 0;\n        };\n\n        template <typename T, typename U>\n        class bnjt_impl : public bnjt\n        {\n            /*!\n                This object is the implementation in the pimpl idiom\n            !*/\n\n        public:\n\n            bnjt_impl (\n                const T& bn,\n                const U& join_tree\n            )\n            {\n                create_bayesian_network_join_tree(bn, join_tree, join_tree_values);\n\n                cliques.resize(bn.number_of_nodes());\n\n                // figure out which cliques contain each node\n                for (unsigned long i = 0; i < cliques.size(); ++i)\n                {\n                    // find the smallest clique that contains node with index i\n                    unsigned long smallest_clique = 0;\n                    unsigned long size = std::numeric_limits<unsigned long>::max();\n\n                    for (unsigned long n = 0; n < join_tree.number_of_nodes(); ++n)\n                    {\n                        if (join_tree.node(n).data.is_member(i) && join_tree.node(n).data.size() < size)\n                        {\n                            size = join_tree.node(n).data.size();\n                            smallest_clique = n;\n                        }\n                    }\n\n                    cliques[i] = smallest_clique;\n                }\n            }\n\n            virtual const matrix<double,1> probability(\n                unsigned long idx\n            ) const \n            {\n                join_tree_values.node(cliques[idx]).data.marginalize(idx, table);\n                table.normalize();\n                var.clear();\n                var.add(idx);\n                dist.set_size(table.size());\n\n                // read the probabilities out of the table and into the row matrix\n                for (unsigned long i = 0; i < table.size(); ++i)\n                {\n                    var[idx] = i;\n                    dist(i) = table.probability(var); \n                }\n\n                return dist;\n            }\n\n        private:\n\n            graph< joint_probability_table, joint_probability_table >::kernel_1a_c join_tree_values;\n            array<unsigned long> cliques;\n            mutable joint_probability_table table;\n            mutable assignment var;\n            mutable matrix<double,1> dist;\n           \n\n        // ----------------------------------------------------------------------------------------\n\n            template <typename set_type, typename node_type>\n            bool set_contains_all_parents_of_node (\n                const set_type& set,\n                const node_type& node\n            )\n            {\n                for (unsigned long i = 0; i < node.number_of_parents(); ++i)\n                {\n                    if (set.is_member(node.parent(i).index()) == false)\n                        return false;\n                }\n                return true;\n            }\n\n        // ----------------------------------------------------------------------------------------\n\n            template <\n                typename V\n                >\n            void pass_join_tree_message (\n                const U& join_tree,\n                V& bn_join_tree ,\n                unsigned long from,\n                unsigned long to\n            )\n            {\n                using namespace bayes_node_utils;\n                const typename U::edge_type& e = edge(join_tree, from, to);\n                typename V::edge_type& old_s = edge(bn_join_tree, from, to);\n\n                typedef typename V::edge_type joint_prob_table;\n\n                joint_prob_table new_s;\n                bn_join_tree.node(from).data.marginalize(e, new_s);\n\n                joint_probability_table temp(new_s);\n                // divide new_s by old_s and store the result in temp.\n                // if old_s is empty then that is the same as if it was all 1s\n                // so we don't have to do this if that is the case.\n                if (old_s.size() > 0)\n                {\n                    temp.reset();\n                    old_s.reset();\n                    while (temp.move_next())\n                    {\n                        old_s.move_next();\n                        if (old_s.element().value() != 0)\n                            temp.element().value()  /= old_s.element().value();\n                    }\n                }\n\n                // now multiply temp by d and store the results in d\n                joint_probability_table& d = bn_join_tree.node(to).data;\n                d.reset();\n                while (d.move_next())\n                {\n                    assignment a; \n                    const assignment& asrc = d.element().key();\n                    asrc.reset();\n                    while (asrc.move_next())\n                    {\n                        if (e.is_member(asrc.element().key()))\n                            a.add(asrc.element().key(), asrc.element().value());\n                    }\n\n                    d.element().value() *= temp.probability(a);\n\n                }\n\n                // store new_s in old_s\n                new_s.swap(old_s);\n\n            }\n\n        // ----------------------------------------------------------------------------------------\n\n            template <\n                typename V\n                >\n            void create_bayesian_network_join_tree (\n                const T& bn,\n                const U& join_tree,\n                V& bn_join_tree \n            )\n            /*!\n                requires\n                    - bn is a proper bayesian network\n                    - join_tree is the join tree for that bayesian network\n                ensures\n                    - bn_join_tree == the output of the join tree algorithm for bayesian network inference.  \n                      So each node in this graph contains a joint_probability_table for the clique\n                      in the corresponding node in the join_tree graph.\n            !*/\n            {\n                using namespace bayes_node_utils;\n                bn_join_tree.clear();\n                copy_graph_structure(join_tree, bn_join_tree);\n\n                // we need to keep track of which node is \"in\" each clique for the purposes of \n                // initializing the tables in each clique.  So this vector will be used to do that\n                // and a value of join_tree.number_of_nodes() means that the node with \n                // that index is unassigned.\n                std::vector<unsigned long> node_assigned_to(bn.number_of_nodes(),join_tree.number_of_nodes());\n\n                // populate evidence with all the evidence node indices and their values\n                dlib::map<unsigned long, unsigned long>::kernel_1b_c evidence;\n                for (unsigned long i = 0; i < bn.number_of_nodes(); ++i)\n                {\n                    if (node_is_evidence(bn, i))\n                    {\n                        unsigned long idx = i;\n                        unsigned long value = node_value(bn, i);\n                        evidence.add(idx,value);\n                    }\n                }\n\n\n                // initialize the bn join tree\n                for (unsigned long i = 0; i < join_tree.number_of_nodes(); ++i)\n                {\n                    bool contains_evidence = false;\n                    std::vector<unsigned long> indices;\n                    assignment value;\n\n                    // loop over all the nodes in this clique in the join tree.  In this loop \n                    // we are making an assignment with all the values of the nodes it represents set to 0\n                    join_tree.node(i).data.reset();\n                    while (join_tree.node(i).data.move_next())\n                    {\n                        const unsigned long idx = join_tree.node(i).data.element();\n                        indices.push_back(idx);\n                        value.add(idx);\n\n                        if (evidence.is_in_domain(join_tree.node(i).data.element()))\n                            contains_evidence = true;\n                    }\n\n                    // now loop over all possible combinations of values that the nodes this \n                    // clique in the join tree can take on.  We do this by counting by one through all\n                    // legal values\n                    bool more_assignments = true;\n                    while (more_assignments)\n                    {\n                        bn_join_tree.node(i).data.set_probability(value,1);\n\n                        // account for any evidence\n                        if (contains_evidence)\n                        {\n                            // loop over all the nodes in this cluster\n                            for (unsigned long j = 0; j < indices.size(); ++j)\n                            {\n                                // if the current node is an evidence node\n                                if (evidence.is_in_domain(indices[j]))\n                                {\n                                    const unsigned long idx = indices[j];\n                                    const unsigned long evidence_value = evidence[idx];\n                                    if (value[idx] != evidence_value)\n                                        bn_join_tree.node(i).data.set_probability(value , 0);\n                                }\n                            }\n                        }\n\n\n                        // now check if any of the nodes in this cluster also have their parents in this cluster\n                        join_tree.node(i).data.reset();\n                        while (join_tree.node(i).data.move_next())\n                        {\n                            const unsigned long idx = join_tree.node(i).data.element();\n                            // if this clique contains all the parents of this node and also hasn't\n                            // been assigned to another clique\n                            if (set_contains_all_parents_of_node(join_tree.node(i).data,  bn.node(idx)) && \n                                (i == node_assigned_to[idx] || node_assigned_to[idx] == join_tree.number_of_nodes()) )\n                            {\n                                // note that this node is now assigned to this clique \n                                node_assigned_to[idx] = i;\n                                // node idx has all its parents in the cluster\n                                assignment parent_values;\n                                for (unsigned long j = 0; j < bn.node(idx).number_of_parents(); ++j)\n                                {\n                                    const unsigned long pidx = bn.node(idx).parent(j).index();\n                                    parent_values.add(pidx, value[pidx]);\n                                }\n\n                                double temp = bn_join_tree.node(i).data.probability(value);\n                                bn_join_tree.node(i).data.set_probability(value, temp * node_probability(bn, idx, value[idx], parent_values));\n\n                            }\n                        }\n\n\n                        // now advance the value variable to its next possible state if there is one\n                        more_assignments = false;\n                        value.reset();\n                        while (value.move_next())\n                        {\n                            value.element().value() += 1;\n                            // if overflow\n                            if (value.element().value() == node_num_values(bn, value.element().key()))\n                            {\n                                value.element().value() = 0;\n                            }\n                            else\n                            {\n                                more_assignments = true;\n                                break;\n                            }\n                        }\n\n                    } // end while (more_assignments) \n                } \n\n\n\n\n                // the tree is now initialized.  Now all we need to do is perform the propagation and\n                // we are done\n                dlib::array<dlib::set<unsigned long>::compare_1b_c> remaining_msg_to_send;\n                dlib::array<dlib::set<unsigned long>::compare_1b_c> remaining_msg_to_receive;\n                remaining_msg_to_receive.resize(join_tree.number_of_nodes());\n                remaining_msg_to_send.resize(join_tree.number_of_nodes());\n                for (unsigned long i = 0; i < remaining_msg_to_receive.size(); ++i)\n                {\n                    for (unsigned long j = 0; j < join_tree.node(i).number_of_neighbors(); ++j)\n                    {\n                        const unsigned long idx = join_tree.node(i).neighbor(j).index();\n                        unsigned long temp;\n                        temp = idx; remaining_msg_to_receive[i].add(temp);\n                        temp = idx; remaining_msg_to_send[i].add(temp);\n                    }\n                }\n\n                // now remaining_msg_to_receive[i] contains all the nodes that node i hasn't yet received\n                // a message from.\n                // we will consider node 0 to be the root node.\n\n\n                bool message_sent = true;\n                std::vector<unsigned long>::iterator iter;\n                while (message_sent)\n                {\n                    message_sent = false;\n                    for (unsigned long i = 1; i < remaining_msg_to_send.size(); ++i)\n                    {\n                        // if node i hasn't sent any messages but has received all but one then send a message to the one\n                        // node who hasn't sent i a message\n                        if (remaining_msg_to_send[i].size() == join_tree.node(i).number_of_neighbors() && remaining_msg_to_receive[i].size() == 1)\n                        {\n                            unsigned long to;\n                            // get the last remaining thing from this set\n                            remaining_msg_to_receive[i].remove_any(to);\n\n                            // send the message\n                            pass_join_tree_message(join_tree, bn_join_tree, i, to);\n\n                            // record that we sent this message\n                            remaining_msg_to_send[i].destroy(to);\n                            remaining_msg_to_receive[to].destroy(i);\n\n                            // put to back in since we still need to receive it\n                            remaining_msg_to_receive[i].add(to);\n                            message_sent = true;\n                        }\n                        else if (remaining_msg_to_receive[i].size() == 0 && remaining_msg_to_send[i].size() > 0)\n                        {\n                            unsigned long to;\n                            remaining_msg_to_send[i].remove_any(to);\n                            remaining_msg_to_receive[to].destroy(i);\n                            pass_join_tree_message(join_tree, bn_join_tree, i, to);\n                            message_sent = true;\n                        }\n                    }\n\n                    if (remaining_msg_to_receive[0].size() == 0)\n                    {\n                        // send a message to all of the root nodes neighbors unless we have already sent out he messages\n                        while (remaining_msg_to_send[0].size() > 0)\n                        {\n                            unsigned long to;\n                            remaining_msg_to_send[0].remove_any(to);\n                            remaining_msg_to_receive[to].destroy(0);\n                            pass_join_tree_message(join_tree, bn_join_tree, 0, to);\n                            message_sent = true;\n                        }\n                    }\n\n\n                }\n\n            }\n\n        };\n    }\n\n    class bayesian_network_join_tree : noncopyable\n    {\n        /*!\n            use the pimpl idiom to push the template arguments from the class level to the\n            constructor level\n        !*/\n\n    public:\n\n        template <\n            typename T,\n            typename U\n            >\n        bayesian_network_join_tree (\n            const T& bn,\n            const U& join_tree\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( bn.number_of_nodes() > 0 ,\n                        \"\\tbayesian_network_join_tree::bayesian_network_join_tree(bn,join_tree)\"\n                        << \"\\n\\tYou have given an invalid bayesian network\"\n                        << \"\\n\\tthis:              \" << this\n                    );\n\n            DLIB_ASSERT( is_join_tree(bn, join_tree) == true ,\n                        \"\\tbayesian_network_join_tree::bayesian_network_join_tree(bn,join_tree)\"\n                        << \"\\n\\tYou have given an invalid join tree for the supplied bayesian network\"\n                        << \"\\n\\tthis:              \" << this\n                    );\n            DLIB_ASSERT( graph_contains_length_one_cycle(bn) == false,\n                        \"\\tbayesian_network_join_tree::bayesian_network_join_tree(bn,join_tree)\"\n                        << \"\\n\\tYou have given an invalid bayesian network\"\n                        << \"\\n\\tthis:              \" << this\n                    );\n            DLIB_ASSERT( graph_is_connected(bn) == true,\n                        \"\\tbayesian_network_join_tree::bayesian_network_join_tree(bn,join_tree)\"\n                        << \"\\n\\tYou have given an invalid bayesian network\"\n                        << \"\\n\\tthis:              \" << this\n                    );\n\n#ifdef ENABLE_ASSERTS\n            for (unsigned long i = 0; i < bn.number_of_nodes(); ++i)\n            {\n                DLIB_ASSERT(bayes_node_utils::node_cpt_filled_out(bn,i) == true,\n                        \"\\tbayesian_network_join_tree::bayesian_network_join_tree(bn,join_tree)\"\n                        << \"\\n\\tYou have given an invalid bayesian network. \"\n                        << \"\\n\\tYou must finish filling out the conditional_probability_table of node \" << i\n                        << \"\\n\\tthis:              \" << this\n                    );\n            }\n#endif\n\n            impl.reset(new bayesian_network_join_tree_helpers::bnjt_impl<T,U>(bn, join_tree));\n            num_nodes = bn.number_of_nodes();\n        }\n\n        const matrix<double,1> probability(\n            unsigned long idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( idx < number_of_nodes() ,\n                        \"\\tconst matrix<double,1> bayesian_network_join_tree::probability(idx)\"\n                        << \"\\n\\tYou have specified an invalid node index\"\n                        << \"\\n\\tidx:               \" << idx \n                        << \"\\n\\tnumber_of_nodes(): \" << number_of_nodes() \n                        << \"\\n\\tthis:              \" << this\n                    );\n\n            return impl->probability(idx);\n        }\n\n        unsigned long number_of_nodes (\n        ) const { return num_nodes; }\n\n        void swap (\n            bayesian_network_join_tree& item\n        )\n        {\n            exchange(num_nodes, item.num_nodes);\n            impl.swap(item.impl);\n        }\n\n    private:\n\n        scoped_ptr<bayesian_network_join_tree_helpers::bnjt> impl;\n        unsigned long num_nodes;\n\n    };\n\n    inline void swap (\n        bayesian_network_join_tree& a,\n        bayesian_network_join_tree& b\n    ) { a.swap(b); }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_BAYES_UTILs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bayes_utils/bayes_utils_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BAYES_UTILs_ABSTRACT_\n#ifdef DLIB_BAYES_UTILs_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"../noncopyable.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../serialize.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class assignment : public enumerable<map_pair<unsigned long, unsigned long> >\n    {\n        /*!\n            INITIAL VALUE\n                - size() == 0\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the entries in the assignment in \n                ascending order according to index values.  (i.e. the elements are \n                enumerated in sorted order according to the value of their keys)\n\n            WHAT THIS OBJECT REPRESENTS\n                This object models an assignment of random variables to particular values.\n                It is used with the joint_probability_table and conditional_probability_table\n                objects to represent assignments of various random variables to actual values.\n\n                So for example, if you had a joint_probability_table that represented the\n                following table:\n                    P(A = 0, B = 0) = 0.2\n                    P(A = 0, B = 1) = 0.3\n                    P(A = 1, B = 0) = 0.1\n                    P(A = 1, B = 1) = 0.4\n\n                    Also lets define an enum so we have concrete index numbers for A and B\n                    enum { A = 0, B = 1};\n\n                Then you could query the value of P(A=1, B=0) as follows:\n                    assignment a;\n                    a.set(A, 1);\n                    a.set(B, 0);\n                    // and now it is the case that:\n                    table.probability(a) == 0.1 \n                    a[A] == 1\n                    a[B] == 0\n\n\n                Also note that when enumerating the elements of an assignment object\n                the key() refers to the index and the value() refers to the value at that\n                index. For example: \n\n                // assume a is an assignment object\n                a.reset();\n                while (a.move_next())\n                {\n                    // in this loop it is always the case that:\n                    // a[a.element().key()] == a.element().value()\n                }\n        !*/\n\n    public:\n\n        assignment(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        assignment(\n            const assignment& a\n        );\n        /*!\n            ensures\n                - #*this is a copy of a\n        !*/\n\n        assignment& operator = (\n            const assignment& rhs\n        );\n        /*!\n            ensures\n                - #*this is a copy of rhs\n                - returns *this\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - this object has been returned to its initial value\n        !*/\n\n        bool operator < (\n            const assignment& item\n        ) const;\n        /*!\n            ensures\n                - The exact functioning of this operator is undefined.  The only guarantee\n                  is that it establishes a total ordering on all possible assignment objects.\n                  In other words, this operator makes it so that you can use assignment\n                  objects in the associative containers but otherwise isn't of any \n                  particular use.\n        !*/\n\n        bool has_index (\n            unsigned long idx\n        ) const;\n        /*!\n            ensures\n                - if (this assignment object has an entry for index idx) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void add (\n            unsigned long idx,\n            unsigned long value = 0\n        );\n        /*!\n            requires\n                - has_index(idx) == false\n            ensures\n                - #has_index(idx) == true \n                - #(*this)[idx] == value \n        !*/\n\n        void remove (\n            unsigned long idx\n        );\n        /*!\n            requires\n                - has_index(idx) == true \n            ensures\n                - #has_index(idx) == false \n        !*/\n\n        unsigned long& operator[] (\n            const long idx\n        );\n        /*!\n            requires\n                - has_index(idx) == true\n            ensures\n                - returns a reference to the value associated with index idx\n        !*/\n\n        const unsigned long& operator[] (\n            const long idx\n        ) const;\n        /*!\n            requires\n                - has_index(idx) == true\n            ensures\n                - returns a const reference to the value associated with index idx\n        !*/\n\n        void swap (\n            assignment& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n    inline void swap (\n        assignment& a,\n        assignment& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n    std::ostream& operator << (\n        std::ostream& out,\n        const assignment& a\n    );\n    /*!\n        ensures\n            - writes a to the given output stream in the following format:\n              (index1:value1, index2:value2, ..., indexN:valueN)\n    !*/\n\n    void serialize (\n        const assignment& item,\n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        assignment& item,\n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ------------------------------------------------------------------------\n\n    class joint_probability_table : public enumerable<map_pair<assignment, double> >\n    {\n        /*!\n            INITIAL VALUE\n                - size() == 0\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the entries in the probability table \n                in no particular order but they will all be visited.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object models a joint probability table.  That is, it models\n                the function p(X).  So this object models the probability of a particular\n                set of variables (referred to as X).\n        !*/\n\n    public:\n\n        joint_probability_table(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        joint_probability_table (\n            const joint_probability_table& t\n        );\n        /*!\n            ensures\n                - this object is a copy of t\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - this object has its initial value\n        !*/\n\n        joint_probability_table& operator= (\n            const joint_probability_table& rhs\n        );\n        /*!\n            ensures\n                - this object is a copy of rhs\n                - returns a reference to *this\n        !*/\n\n        bool has_entry_for (\n            const assignment& a\n        ) const;\n        /*!\n            ensures\n                - if (this joint_probability_table has an entry for p(X = a)) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void set_probability (\n            const assignment& a,\n            double p\n        );\n        /*!\n            requires\n                - 0 <= p <= 1\n            ensures\n                - if (has_entry_for(a) == false) then\n                    - #size() == size() + 1\n                - #probability(a) == p\n                - #has_entry_for(a) == true\n        !*/\n\n        void add_probability (\n            const assignment& a,\n            double p\n        );\n        /*!\n            requires\n                - 0 <= p <= 1\n            ensures\n                - if (has_entry_for(a) == false) then\n                    - #size() == size() + 1\n                    - #probability(a) == p\n                - else\n                    - #probability(a) == min(probability(a) + p, 1.0)\n                      (i.e. does a saturating add)\n                - #has_entry_for(a) == true\n        !*/\n\n        const double probability (\n            const assignment& a\n        ) const;\n        /*!\n            ensures\n                - returns the probability p(X == a)\n        !*/\n\n        template <\n            typename T\n            >\n        void marginalize (\n            const T& vars,\n            joint_probability_table& output_table\n        ) const;\n        /*!\n            requires\n                - T is an implementation of set/set_kernel_abstract.h\n            ensures\n                - marginalizes *this by summing over all variables not in vars.  The\n                  result is stored in output_table.  \n        !*/\n\n        void marginalize (\n            const unsigned long var,\n            joint_probability_table& output_table\n        ) const;\n        /*!\n            ensures\n                - is identical to calling the above marginalize() function with a set\n                  that contains only var.  Or in other words, performs a marginalization\n                  with just one variable var.  So that output_table will contain a table giving\n                  the marginal probability of var all by itself.\n        !*/\n\n        void normalize (\n        );\n        /*!\n            ensures\n                - let sum == the sum of all the probabilities in this table\n                - after normalize() has finished it will be the case that the sum of all\n                  the entries in this table is 1.0.  This is accomplished by dividing all\n                  the entries by the sum described above.\n        !*/\n\n        void swap (\n            joint_probability_table& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n    inline void swap (\n        joint_probability_table& a,\n        joint_probability_table& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n    void serialize (\n        const joint_probability_table& item,\n        std::ostream& out \n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    void deserialize (\n        joint_probability_table& item,\n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class conditional_probability_table : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                - num_values() == 0\n                - has_value_for(x, y) == false for all values of x and y\n\n            WHAT THIS OBJECT REPRESENTS\n                This object models a conditional probability table.  That is, it models\n                the function p( X | parents).  So this object models the conditional \n                probability of a particular variable (referred to as X) given another set \n                of variables (referred to as parents).  \n        !*/\n\n    public:\n\n        conditional_probability_table(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - this object has its initial value\n        !*/\n\n        void empty_table (\n        );\n        /*!\n            ensures\n                - for all possible v and p:\n                    - #has_entry_for(v,p) == false\n                  (i.e. this function clears out the table when you call it but doesn't \n                  change the value of num_values())\n        !*/\n\n        void set_num_values (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #num_values() == num\n                - for all possible v and p:\n                    - #has_entry_for(v,p) == false\n                  (i.e. this function clears out the table when you call it)\n        !*/\n\n        unsigned long num_values (\n        ) const; \n        /*!\n            ensures\n                - This object models the probability table p(X | parents).  This\n                  function returns the number of values X can take on.\n        !*/\n\n        bool has_entry_for (\n            unsigned long value,\n            const assignment& ps\n        ) const;\n        /*!\n            ensures\n                - if (this conditional_probability_table has an entry for p(X = value, parents = ps)) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void set_probability (\n            unsigned long value,\n            const assignment& ps,\n            double p\n        );\n        /*!\n            requires\n                - value < num_values()\n                - 0 <= p <= 1\n            ensures\n                - #probability(ps, value) == p\n                - #has_entry_for(value, ps) == true\n        !*/\n\n        double probability(\n            unsigned long value,\n            const assignment& ps\n        ) const;\n        /*!\n            requires\n                - value < num_values()\n                - has_entry_for(value, ps) == true\n            ensures\n                - returns the probability p( X = value | parents = ps). \n        !*/\n\n        void swap (\n            conditional_probability_table& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n    };\n\n    inline void swap (\n        conditional_probability_table& a,\n        conditional_probability_table& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n    void serialize (\n        const conditional_probability_table& item,\n        std::ostream& out \n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    void deserialize (\n        conditional_probability_table& item,\n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ------------------------------------------------------------------------\n// ------------------------------------------------------------------------\n// ------------------------------------------------------------------------\n\n    class bayes_node : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                - is_evidence() == false\n                - value() == 0\n                - table().num_values() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a node in a bayesian network.  It is\n                intended to be used inside the dlib::directed_graph object to\n                represent bayesian networks.\n        !*/\n\n    public:\n        bayes_node (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        unsigned long value (\n        ) const;\n        /*!\n            ensures\n                - returns the current value of this node\n        !*/\n\n        void set_value (\n            unsigned long new_value\n        );\n        /*!\n            requires\n                - new_value < table().num_values()\n            ensures\n                - #value() == new_value\n        !*/\n\n        conditional_probability_table& table (\n        );\n        /*!\n            ensures\n                - returns a reference to the conditional_probability_table associated with this node\n        !*/\n\n        const conditional_probability_table& table (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the conditional_probability_table associated with this \n                  node.\n        !*/\n\n        bool is_evidence (\n        ) const;\n        /*!\n            ensures\n                - if (this is an evidence node) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void set_as_nonevidence (\n        );\n        /*!\n            ensures\n                - #is_evidence() == false\n        !*/\n\n        void set_as_evidence (\n        );\n        /*!\n            ensures\n                - #is_evidence() == true \n        !*/\n\n        void swap (\n            bayes_node& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n    inline void swap (\n        bayes_node& a,\n        bayes_node& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n    void serialize (\n        const bayes_node& item,\n        std::ostream& out \n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    void deserialize (\n        bayes_node& item,\n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    /*\n        The following group of functions are convenience functions for manipulating \n        bayes_node objects while they are inside a directed_graph.   These functions\n        also have additional requires clauses that, in debug mode, will protect you\n        from attempts to manipulate a bayesian network in an inappropriate way.\n    */\n\n    namespace bayes_node_utils\n    {\n\n        template <\n            typename T\n            >\n        void set_node_value (\n            T& bn,\n            unsigned long n,\n            unsigned long val\n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n                - val < node_num_values(bn, n)\n            ensures\n                - #bn.node(n).data.value() = val\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        unsigned long node_value (\n            const T& bn,\n            unsigned long n\n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n            ensures\n                - returns bn.node(n).data.value()\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        bool node_is_evidence (\n            const T& bn,\n            unsigned long n\n        ); \n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n            ensures\n                - returns bn.node(n).data.is_evidence()\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        void set_node_as_evidence (\n            T& bn,\n            unsigned long n\n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n            ensures\n                - executes: bn.node(n).data.set_as_evidence()\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        void set_node_as_nonevidence (\n            T& bn,\n            unsigned long n\n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n            ensures\n                - executes: bn.node(n).data.set_as_nonevidence()\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        void set_node_num_values (\n            T& bn,\n            unsigned long n,\n            unsigned long num\n        ); \n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n            ensures\n                - #bn.node(n).data.table().num_values() == num\n                  (i.e. sets the number of different values this node can take)\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        unsigned long node_num_values (\n            const T& bn,\n            unsigned long n\n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n            ensures\n                - returns bn.node(n).data.table().num_values() \n                  (i.e. returns the number of different values this node can take)\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        const double node_probability (\n            const T& bn,\n            unsigned long n,\n            unsigned long value,\n            const assignment& parents \n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n                - value < node_num_values(bn,n)\n                - parents.size() == bn.node(n).number_of_parents()\n                - if (parents.has_index(x)) then\n                    - bn.has_edge(x, n)\n                    - parents[x] < node_num_values(bn,x)\n            ensures\n                - returns bn.node(n).data.table().probability(value, parents)\n                  (i.e. returns the probability of node n having the given value when\n                  its parents have the given assignment)\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        const double set_node_probability (\n            const T& bn,\n            unsigned long n,\n            unsigned long value,\n            const assignment& parents,\n            double p\n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n                - value < node_num_values(bn,n)\n                - 0 <= p <= 1\n                - parents.size() == bn.node(n).number_of_parents()\n                - if (parents.has_index(x)) then\n                    - bn.has_edge(x, n)\n                    - parents[x] < node_num_values(bn,x)\n            ensures\n                - #bn.node(n).data.table().probability(value, parents) == p\n                  (i.e. sets the probability of node n having the given value when\n                  its parents have the given assignment to the probability p)\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        const assignment node_first_parent_assignment (\n            const T& bn,\n            unsigned long n\n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n            ensures\n                - returns an assignment A such that:\n                    - A.size() == bn.node(n).number_of_parents()\n                    - if (P is a parent of bn.node(n)) then\n                        - A.has_index(P)\n                        - A[P] == 0\n                    - I.e. this function returns an assignment that contains all\n                      the parents of the given node.  Also, all the values of each\n                      parent in the assignment is set to zero.\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        bool node_next_parent_assignment (\n            const T& bn,\n            unsigned long n,\n            assignment& A\n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n                - A.size() == bn.node(n).number_of_parents()\n                - if (A.has_index(x)) then\n                    - bn.has_edge(x, n)\n                    - A[x] < node_num_values(bn,x)\n            ensures\n                - The behavior of this function is defined by the following code:\n                  assignment a(node_first_parent_assignment(bn,n);\n                  do {\n                    // this loop loops over all possible parent assignments\n                    // of the node bn.node(n).  Each time through the loop variable a\n                    // will be the next assignment.\n                  } while (node_next_parent_assignment(bn,n,a))\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        bool node_cpt_filled_out (\n            const T& bn,\n            unsigned long n\n        );\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n                - n < bn.number_of_nodes()\n            ensures\n                - if (the conditional_probability_table bn.node(n).data.table() is\n                  fully filled out for this node) then\n                    - returns true\n                    - This means that each parent assignment for the given node\n                      along with all possible values of this node shows up in the\n                      table.\n                    - It also means that all the probabilities conditioned on the\n                      same parent assignment sum to 1.0\n                - else\n                    - returns false\n        !*/\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class bayesian_network_gibbs_sampler : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                This object has no state\n\n            WHAT THIS OBJECT REPRESENTS\n                This object performs Markov Chain Monte Carlo sampling of a bayesian\n                network using the Gibbs sampling technique. \n\n                Note that this object is limited to only bayesian networks that \n                don't contain deterministic nodes.  That is, incorrect results may\n                be computed if this object is used when the bayesian network contains \n                any nodes that have a probability of 1 in their conditional probability\n                tables for any event.  So don't use this object for networks with \n                deterministic nodes.\n        !*/\n    public:\n\n        bayesian_network_gibbs_sampler (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        template <\n            typename T\n            >\n        void sample_graph (\n            T& bn\n        )\n        /*!\n            requires\n                - T is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - T::type == bayes_node\n            ensures\n                - modifies randomly (via the Gibbs sampling technique) samples all the nodes\n                  in the network and updates their values with the newly sampled values\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class bayesian_network_join_tree : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an implementation of the join tree algorithm\n                for inference in bayesian networks.  It doesn't have any mutable state.\n                To you use you just give it a directed_graph that contains a bayesian \n                network and a graph object that contains that networks corresponding\n                join tree.  Then you may query this object to determine the probabilities\n                of any variables in the original bayesian network.\n        !*/\n\n    public:\n\n        template <\n            typename bn_type,\n            typename join_tree_type \n            >\n        bayesian_network_join_tree (\n            const bn_type& bn,\n            const join_tree_type& join_tree\n        );\n        /*!\n            requires\n                - bn_type is an implementation of directed_graph/directed_graph_kernel_abstract.h\n                - bn_type::type == bayes_node\n                - join_tree_type is an implementation of graph/graph_kernel_abstract.h\n                - join_tree_type::type is an implementation of set/set_compare_abstract.h and\n                  this set type contains unsigned long objects. \n                - join_tree_type::edge_type is an implementation of set/set_compare_abstract.h and\n                  this set type contains unsigned long objects. \n                - is_join_tree(bn, join_tree) == true\n                - bn == a valid bayesian network with all its conditional probability tables\n                  filled out\n                - for all valid n:\n                    - node_cpt_filled_out(bn,n) == true\n                - graph_contains_length_one_cycle(bn) == false\n                - graph_is_connected(bn) == true\n                - bn.number_of_nodes() > 0\n            ensures\n                - this object is properly initialized\n        !*/\n\n        unsigned long number_of_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of nodes in the bayesian network that this\n                  object was instantiated from.\n        !*/\n\n        const matrix<double,1> probability(\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - returns the probability distribution for the node with index idx that was in the bayesian \n                  network that *this was instantiated from.  Let D represent this distribution, then:\n                    - D.nc() == the number of values the node idx ranges over\n                    - D.nr() == 1 \n                    - D(i) == the probability of node idx taking on the value i \n        !*/\n\n        void swap (\n            bayesian_network_join_tree& item\n        );\n        /*!\n            ensures\n                - swaps *this with item\n        !*/\n\n    };\n\n    inline void swap (\n        bayesian_network_join_tree& a,\n        bayesian_network_join_tree& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BAYES_UTILs_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bayes_utils.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BAYES_UTILs_H_\n#define DLIB_BAYES_UTILs_H_ \n\n#include \"bayes_utils/bayes_utils.h\"\n\n#endif // DLIB_BAYES_UTILs_H_ \n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bigint/bigint_kernel_1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIGINT_KERNEL_1_CPp_\n#define DLIB_BIGINT_KERNEL_1_CPp_\n#include \"bigint_kernel_1.h\"\n\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member/friend function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1::\n    bigint_kernel_1 (\n    ) :\n        slack(25),\n        data(new data_record(slack))\n    {}\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1::\n    bigint_kernel_1 (\n        uint32 value\n    ) :\n        slack(25),\n        data(new data_record(slack))\n    {\n        *(data->number) = static_cast<uint16>(value&0xFFFF);\n        *(data->number+1) = static_cast<uint16>((value>>16)&0xFFFF);\n        if (*(data->number+1) != 0)\n            data->digits_used = 2;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1::\n    bigint_kernel_1 (\n        const bigint_kernel_1& item\n    ) :\n        slack(25),\n        data(item.data)\n    {\n        data->references += 1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1::\n    ~bigint_kernel_1 (\n    )\n    {\n        if (data->references == 1)\n        {\n            delete data;\n        }\n        else\n        {\n            data->references -= 1;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 bigint_kernel_1::\n    operator+ (\n        const bigint_kernel_1& rhs\n    ) const\n    {\n        data_record* temp = new data_record (\n                    std::max(rhs.data->digits_used,data->digits_used) + slack\n                    );\n        long_add(data,rhs.data,temp);\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator+= (\n        const bigint_kernel_1& rhs\n    )\n    {\n        // if there are other references to our data\n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(std::max(data->digits_used,rhs.data->digits_used)+slack);\n            data->references -= 1;   \n            long_add(data,rhs.data,temp);\n            data = temp;\n        }\n        // if data is not big enough for the result\n        else if (data->size <= std::max(data->digits_used,rhs.data->digits_used))\n        {\n            data_record* temp = new data_record(std::max(data->digits_used,rhs.data->digits_used)+slack);\n            long_add(data,rhs.data,temp);\n            delete data;\n            data = temp;\n        }\n        // there is enough size and no references\n        else\n        {\n            long_add(data,rhs.data,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 bigint_kernel_1::\n    operator- (\n        const bigint_kernel_1& rhs\n    ) const\n    {\n        data_record* temp = new data_record (\n                    data->digits_used + slack\n                    );\n        long_sub(data,rhs.data,temp);\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator-= (\n        const bigint_kernel_1& rhs\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            long_sub(data,rhs.data,temp);\n            data = temp;\n        }\n        else\n        {\n            long_sub(data,rhs.data,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 bigint_kernel_1::\n    operator* (\n        const bigint_kernel_1& rhs\n    ) const\n    {\n        data_record* temp = new data_record (\n                    data->digits_used + rhs.data->digits_used + slack\n                    );\n        long_mul(data,rhs.data,temp);\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator*= (\n        const bigint_kernel_1& rhs\n    )\n    {\n        // create a data_record to store the result of the multiplication in\n        data_record* temp = new data_record(rhs.data->digits_used+data->digits_used+slack);        \n        long_mul(data,rhs.data,temp);\n\n        // if there are other references to data\n        if (data->references != 1)\n        {\n            data->references -= 1;\n        }\n        else\n        {\n            delete data;\n        }\n        data = temp;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 bigint_kernel_1::\n    operator/ (\n        const bigint_kernel_1& rhs\n    ) const\n    {\n        data_record* temp = new data_record(data->digits_used+slack);\n        data_record* remainder;\n        try {\n            remainder = new data_record(data->digits_used+slack);           \n        } catch (...) { delete temp; throw; }\n\n        long_div(data,rhs.data,temp,remainder);\n        delete remainder;\n    \n\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator/= (\n        const bigint_kernel_1& rhs\n    )\n    {\n\n        data_record* temp = new data_record(data->digits_used+slack);\n        data_record* remainder;\n        try {\n            remainder = new data_record(data->digits_used+slack);\n        } catch (...) { delete temp; throw; }    \n\n        long_div(data,rhs.data,temp,remainder);\n\n        // check if there are other references to data\n        if (data->references != 1)\n        {\n            data->references -= 1;\n        }\n        // if there are no references to data then it must be deleted\n        else\n        {\n            delete data;\n        }\n        data = temp;\n        delete remainder;\n\n        \n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 bigint_kernel_1::\n    operator% (\n        const bigint_kernel_1& rhs\n    ) const\n    {\n        data_record* temp = new data_record(data->digits_used+slack);\n        data_record* remainder;\n        try {\n            remainder = new data_record(data->digits_used+slack);\n        } catch (...) { delete temp; throw; }\n\n        long_div(data,rhs.data,temp,remainder);\n        delete temp;\n        return bigint_kernel_1(remainder,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator%= (\n        const bigint_kernel_1& rhs\n    )\n    {\n        data_record* temp = new data_record(data->digits_used+slack);\n        data_record* remainder;\n        try {\n            remainder = new data_record(data->digits_used+slack);\n        } catch (...) { delete temp; throw; }\n\n        long_div(data,rhs.data,temp,remainder);\n\n        // check if there are other references to data\n        if (data->references != 1)\n        {\n            data->references -= 1;\n        }\n        // if there are no references to data then it must be deleted\n        else\n        {\n            delete data;\n        }\n        data = remainder;\n        delete temp;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bigint_kernel_1::\n    operator < (\n        const bigint_kernel_1& rhs\n    ) const\n    {\n        return is_less_than(data,rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bigint_kernel_1::\n    operator == (\n        const bigint_kernel_1& rhs\n    ) const\n    {\n        return is_equal_to(data,rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator= (\n        const bigint_kernel_1& rhs\n    )\n    {\n        if (this == &rhs)\n            return *this;\n\n        // if we have the only reference to our data then delete it\n        if (data->references == 1)\n        {\n            delete data;\n            data = rhs.data;\n            data->references += 1;\n        }\n        else\n        {\n            data->references -= 1;\n            data = rhs.data;\n            data->references += 1;\n        }\n\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::ostream& operator<< (\n        std::ostream& out_,\n        const bigint_kernel_1& rhs\n    )\n    {\n        std::ostream out(out_.rdbuf());\n\n        typedef bigint_kernel_1 bigint;\n        \n        bigint::data_record* temp = new bigint::data_record(*rhs.data,0);\n\n\n\n        // get a char array big enough to hold the number in ascii format\n        char* str;\n        try {\n            str = new char[(rhs.data->digits_used)*5+10];\n        } catch (...) { delete temp; throw; }\n\n        char* str_start = str;\n        str += (rhs.data->digits_used)*5+9;\n        *str = 0; --str;\n\n\n        uint16 remainder;\n        rhs.short_div(temp,10000,temp,remainder);\n\n        // pull the digits out of remainder\n        char a = remainder % 10 + '0';\n        remainder /= 10;\n        char b = remainder % 10 + '0';\n        remainder /= 10;\n        char c = remainder % 10 + '0';\n        remainder /= 10;\n        char d = remainder % 10 + '0';\n        remainder /= 10;\n\n\n        *str = a; --str;\n        *str = b; --str;\n        *str = c; --str;\n        *str = d; --str;\n\n\n        // keep looping until temp represents zero\n        while (temp->digits_used != 1 || *(temp->number) != 0)\n        {            \n            rhs.short_div(temp,10000,temp,remainder);\n\n            // pull the digits out of remainder\n            char a = remainder % 10 + '0';\n            remainder /= 10;\n            char b = remainder % 10 + '0';\n            remainder /= 10;\n            char c = remainder % 10 + '0';\n            remainder /= 10;\n            char d = remainder % 10 + '0';\n            remainder /= 10;\n\n            *str = a; --str;\n            *str = b; --str;\n            *str = c; --str;\n            *str = d; --str;              \n        }\n\n        // throw away and extra leading zeros\n        ++str;\n        if (*str == '0')\n            ++str;\n        if (*str == '0')\n            ++str;\n        if (*str == '0')\n            ++str;\n\n\n        \n\n        out << str;\n        delete [] str_start;\n        delete temp;\n        return out_;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::istream& operator>> (\n        std::istream& in_,\n        bigint_kernel_1& rhs\n    )\n    {\n        std::istream in(in_.rdbuf());\n\n        // ignore any leading whitespaces\n        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == '\\n')\n        {\n            in.get();\n        }\n\n        // if the first digit is not an integer then this is an error\n        if ( !(in.peek() >= '0' && in.peek() <= '9'))\n        {\n            in_.clear(std::ios::failbit);\n            return in_;\n        }\n\n        int num_read;\n        bigint_kernel_1 temp;\n        do\n        {\n\n            // try to get 4 chars from in\n            num_read = 1;\n            char a = 0;\n            char b = 0; \n            char c = 0;\n            char d = 0;\n\n            if (in.peek() >= '0' && in.peek() <= '9')\n            {\n                num_read *= 10;\n                a = in.get();\n            }\n            if (in.peek() >= '0' && in.peek() <= '9')\n            {\n                num_read *= 10;\n                b = in.get();\n            }\n            if (in.peek() >= '0' && in.peek() <= '9')\n            {\n                num_read *= 10;\n                c = in.get();\n            }\n            if (in.peek() >= '0' && in.peek() <= '9')\n            {\n                num_read *= 10;\n                d = in.get();\n            }\n            \n            // merge the for digits into an uint16\n            uint16 num = 0;\n            if (a != 0)\n            {\n                num = a - '0';\n            }\n            if (b != 0)\n            {\n                num *= 10;\n                num += b - '0';\n            }\n            if (c != 0)\n            {\n                num *= 10;\n                num += c - '0';\n            }\n            if (d != 0)\n            {\n                num *= 10;\n                num += d - '0';\n            }\n\n\n            if (num_read != 1)\n            {\n                // shift the digits in temp left by the number of new digits we just read\n                temp *= num_read;\n                // add in new digits\n                temp += num;\n            }\n\n        } while (num_read == 10000);\n\n\n        rhs = temp;\n        return in_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator+ (\n        uint16 lhs,\n        const bigint_kernel_1& rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (rhs.data->digits_used+rhs.slack);\n\n        rhs.short_add(rhs.data,lhs,temp);\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator+ (\n        const bigint_kernel_1& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (lhs.data->digits_used+lhs.slack);\n\n        lhs.short_add(lhs.data,rhs,temp);\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator+= (\n        uint16 rhs\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;    \n            short_add(data,rhs,temp);\n            data = temp;\n        }\n        // or if we need to enlarge data then do so\n        else if (data->digits_used == data->size)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            short_add(data,rhs,temp);\n            delete data;\n            data = temp;\n        }\n        // or if there is plenty of space and no references\n        else\n        {\n            short_add(data,rhs,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator- (\n        uint16 lhs,\n        const bigint_kernel_1& rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        bigint::data_record* temp = new bigint::data_record(rhs.slack);\n\n        *(temp->number) = lhs - *(rhs.data->number);\n\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator- (\n        const bigint_kernel_1& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (lhs.data->digits_used+lhs.slack);\n\n        lhs.short_sub(lhs.data,rhs,temp);\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator-= (\n        uint16 rhs\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            short_sub(data,rhs,temp);\n            data = temp;\n        }\n        else\n        {\n            short_sub(data,rhs,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator* (\n        uint16 lhs,\n        const bigint_kernel_1& rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (rhs.data->digits_used+rhs.slack);\n\n        rhs.short_mul(rhs.data,lhs,temp);\n        return bigint_kernel_1(temp,0);        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator* (\n        const bigint_kernel_1& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (lhs.data->digits_used+lhs.slack);\n\n        lhs.short_mul(lhs.data,rhs,temp);\n        return bigint_kernel_1(temp,0);  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator*= (\n        uint16 rhs\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            short_mul(data,rhs,temp);\n            data = temp;\n        }\n        // or if we need to enlarge data\n        else if (data->digits_used == data->size)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            short_mul(data,rhs,temp);\n            delete data;\n            data = temp;\n        }\n        else\n        {\n            short_mul(data,rhs,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator/ (\n        uint16 lhs,\n        const bigint_kernel_1& rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        bigint::data_record* temp = new bigint::data_record(rhs.slack);\n\n        // if rhs might not be bigger than lhs\n        if (rhs.data->digits_used == 1)\n        {\n            *(temp->number) = lhs/ *(rhs.data->number);\n        }\n        \n        return bigint_kernel_1(temp,0);  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator/ (\n        const bigint_kernel_1& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (lhs.data->digits_used+lhs.slack);\n\n        uint16 remainder;\n        lhs.short_div(lhs.data,rhs,temp,remainder);\n        return bigint_kernel_1(temp,0);  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator/= (\n        uint16 rhs\n    )\n    {\n        uint16 remainder;\n        // if there are other references to this data\n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            short_div(data,rhs,temp,remainder);    \n            data = temp;\n        }\n        else\n        {\n            short_div(data,rhs,data,remainder);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator% (\n        uint16 lhs,\n        const bigint_kernel_1& rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        // temp is zero by default\n        bigint::data_record* temp = new bigint::data_record(rhs.slack);\n\n        if (rhs.data->digits_used == 1)\n        {\n            // if rhs is just an uint16 inside then perform the modulus\n            *(temp->number) = lhs % *(rhs.data->number);\n        }\n        else\n        {\n            // if rhs is bigger than lhs then the answer is lhs\n            *(temp->number) = lhs;\n        }\n        \n        return bigint_kernel_1(temp,0);  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 operator% (\n        const bigint_kernel_1& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_1 bigint;\n        bigint::data_record* temp = new bigint::data_record(lhs.data->digits_used+lhs.slack);\n\n        uint16 remainder;\n\n        lhs.short_div(lhs.data,rhs,temp,remainder);\n        temp->digits_used = 1;\n        *(temp->number) = remainder;\n        return bigint_kernel_1(temp,0);          \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator%= (\n        uint16 rhs\n    )\n    {\n        uint16 remainder;\n        // if there are other references to this data\n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            short_div(data,rhs,temp,remainder);\n            data = temp;\n        }\n        else\n        {\n            short_div(data,rhs,data,remainder);\n        }\n\n        data->digits_used = 1;\n        *(data->number) = remainder;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool operator < (\n        uint16 lhs,\n        const bigint_kernel_1& rhs\n    )\n    {\n        return (rhs.data->digits_used > 1 || lhs < *(rhs.data->number) );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool operator < (\n        const bigint_kernel_1& lhs,\n        uint16 rhs\n    )\n    {\n        return (lhs.data->digits_used == 1 && *(lhs.data->number) < rhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool operator == (\n        const bigint_kernel_1& lhs,\n        uint16 rhs\n    )\n    {\n        return (lhs.data->digits_used == 1 && *(lhs.data->number) == rhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool operator == (\n        uint16 lhs,\n        const bigint_kernel_1& rhs\n    )\n    {\n        return (rhs.data->digits_used == 1 && *(rhs.data->number) == lhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator= (\n        uint16 rhs\n    )\n    {\n        // check if there are other references to our data\n        if (data->references != 1)\n        {\n            data->references -= 1;\n            try {\n                data = new data_record(slack);\n            } catch (...) { data->references += 1; throw; }\n        }\n        else\n        {\n            data->digits_used = 1;\n        }\n        \n        *(data->number) = rhs;\n\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator++ (\n    )\n    {\n        // if there are other references to this data then make a copy of it\n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            increment(data,temp);\n            data = temp;\n        }\n        // or if we need to enlarge data then do so\n        else if (data->digits_used == data->size)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            increment(data,temp);\n            delete data;\n            data = temp;\n        }\n        else\n        {\n            increment(data,data);\n        }\n\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 bigint_kernel_1::\n    operator++ (\n        int\n    )\n    {\n        data_record* temp; // this is the copy of temp we will return in the end\n         \n        data_record* temp2 = new data_record(data->digits_used+slack);\n        increment(data,temp2);\n        \n        temp = data;\n        data = temp2;\n\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_1& bigint_kernel_1::\n    operator-- (\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            decrement(data,temp);\n            data = temp;\n        }\n        else\n        {\n            decrement(data,data);\n        }\n\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_1 bigint_kernel_1::\n    operator-- (\n        int\n    )\n    {\n        data_record* temp; // this is the copy of temp we will return in the end\n         \n        data_record* temp2 = new data_record(data->digits_used+slack);\n        decrement(data,temp2);\n        \n        temp = data;\n        data = temp2;\n\n        return bigint_kernel_1(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    short_add (\n        const data_record* data,        \n        uint16 value,\n        data_record* result\n    ) const\n    {\n        // put value into the carry part of temp\n        uint32 temp = value;\n        temp <<= 16;\n\n        \n        const uint16* number = data->number;\n        const uint16* end = number + data->digits_used; // one past the end of number\n        uint16* r = result->number;\n\n        while (number != end)\n        {\n            // add *number and the current carry\n            temp = *number + (temp>>16);\n            // put the low word of temp into *r\n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++number;\n            ++r;\n        }\n\n        // if there is a final carry\n        if ((temp>>16) != 0)\n        {\n            result->digits_used = data->digits_used + 1;\n            // store the carry in the most significant digit of the result\n            *r = static_cast<uint16>(temp>>16); \n        }\n        else\n        {\n            result->digits_used = data->digits_used;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    short_sub (\n        const data_record* data,        \n        uint16 value,\n        data_record* result\n    ) const\n    {\n        \n\n        const uint16* number = data->number;\n        const uint16* end = number + data->digits_used - 1;\n        uint16* r = result->number;\n\n        uint32 temp = *number - value;\n\n        // put the low word of temp into *data \n        *r = static_cast<uint16>(temp & 0xFFFF);\n\n        \n        while (number != end)\n        {\n            ++number;\n            ++r;\n\n            // subtract the carry from *number \n            temp = *number - (temp>>31);\n\n            // put the low word of temp into *r \n            *r = static_cast<uint16>(temp & 0xFFFF);\n        }\n\n        // if we lost a digit in the subtraction\n        if (*r == 0)\n        {\n            if (data->digits_used == 1)\n                result->digits_used = 1;\n            else\n                result->digits_used = data->digits_used - 1;\n        }\n        else\n        {\n            result->digits_used = data->digits_used;\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    short_mul (\n        const data_record* data,        \n        uint16 value,\n        data_record* result\n    ) const\n    {\n        \n        uint32 temp = 0;\n\n\n        const uint16* number = data->number;        \n        uint16* r = result->number;\n        const uint16* end = r + data->digits_used;\n\n\n\n        while ( r != end)\n        {\n\n            // multiply *data and value and add in the carry\n            temp = *number*(uint32)value + (temp>>16);\n\n            // put the low word of temp into *data\n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++number;\n            ++r;\n        }\n\n        // if there is a final carry\n        if ((temp>>16) != 0)\n        {\n            result->digits_used = data->digits_used + 1;\n            // put the final carry into the most significant digit of the result\n            *r = static_cast<uint16>(temp>>16);\n        }\n        else\n        {\n            result->digits_used = data->digits_used;\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    short_div (\n        const data_record* data,        \n        uint16 value,   \n        data_record* result,\n        uint16& rem\n    ) const\n    {\n        \n        uint16 remainder = 0;\n        uint32 temp;\n\n        \n\n        const uint16* number = data->number + data->digits_used - 1;\n        const uint16* end = number - data->digits_used;\n        uint16* r = result->number + data->digits_used - 1;\n\n\n        // if we are losing a digit in this division\n        if (*number < value)\n        {\n            if (data->digits_used == 1)\n                result->digits_used = 1;\n            else\n                result->digits_used = data->digits_used - 1;\n        }\n        else\n        {\n            result->digits_used = data->digits_used;\n        }\n\n\n        // perform the actual division\n        while (number != end)\n        {\n           \n            temp = *number + (((uint32)remainder)<<16);\n\n            *r = static_cast<uint16>(temp/value);\n            remainder = static_cast<uint16>(temp%value);\n\n            --number;\n            --r;\n        }\n\n        rem = remainder;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    long_add (\n        const data_record* lhs,\n        const data_record* rhs,\n        data_record* result\n    ) const\n    {\n        // put value into the carry part of temp\n        uint32 temp=0;        \n\n        uint16* min_num;  // the number with the least digits used\n        uint16* max_num;  // the number with the most digits used\n        uint16* min_end;  // one past the end of min_num\n        uint16* max_end;  // one past the end of max_num\n        uint16* r = result->number;\n\n        uint32 max_digits_used;\n        if (lhs->digits_used < rhs->digits_used)\n        {\n            max_digits_used = rhs->digits_used;\n            min_num = lhs->number;\n            max_num = rhs->number;\n            min_end = min_num + lhs->digits_used;\n            max_end = max_num + rhs->digits_used;\n        }\n        else\n        {\n            max_digits_used = lhs->digits_used;\n            min_num = rhs->number;\n            max_num = lhs->number;\n            min_end = min_num + rhs->digits_used;\n            max_end = max_num + lhs->digits_used;\n        }\n\n        \n\n\n        while (min_num != min_end)\n        {\n            // add *min_num, *max_num and the current carry\n            temp = *min_num + *max_num + (temp>>16);\n            // put the low word of temp into *r\n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++min_num;\n            ++max_num;\n            ++r;\n        }\n\n\n        while (max_num != max_end)\n        {\n            // add *max_num and the current carry\n            temp = *max_num + (temp>>16);\n            // put the low word of temp into *r\n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++max_num;\n            ++r;\n        }        \n\n        // check if there was a final carry\n        if ((temp>>16) != 0)\n        {\n            result->digits_used = max_digits_used + 1;\n            // put the carry into the most significant digit in the result\n            *r = static_cast<uint16>(temp>>16);\n        }\n        else\n        {\n            result->digits_used = max_digits_used;\n        }\n\n        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    long_sub (\n        const data_record* lhs,\n        const data_record* rhs,\n        data_record* result\n    ) const\n    {\n\n\n        const uint16* number1 = lhs->number;\n        const uint16* number2 = rhs->number;\n        const uint16* end = number2 + rhs->digits_used;\n        uint16* r = result->number;\n\n\n\n        uint32 temp =0;\n\n        \n        while (number2 != end)\n        {\n\n            // subtract *number2 from *number1 and then subtract any carry\n            temp = *number1 - *number2 - (temp>>31);\n\n            // put the low word of temp into *r \n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++number1;\n            ++number2;\n            ++r;\n        }\n\n        end = lhs->number + lhs->digits_used;\n        while (number1 != end)\n        {\n\n            // subtract the carry from *number1 \n            temp = *number1 - (temp>>31);\n\n            // put the low word of temp into *r \n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++number1;\n            ++r;\n        }\n\n        result->digits_used = lhs->digits_used;\n        // adjust the number of digits used appropriately \n        --r;\n        while (*r == 0 && result->digits_used > 1)\n        {\n            --r;\n            --result->digits_used;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    long_div (\n        const data_record* lhs,\n        const data_record* rhs,\n        data_record* result,\n        data_record* remainder\n    ) const\n    {\n        // zero result\n        result->digits_used = 1;\n        *(result->number) = 0;\n\n        uint16* a;\n        uint16* b;\n        uint16* end;\n\n        // copy lhs into remainder\n        remainder->digits_used = lhs->digits_used;\n        a = remainder->number;\n        end = a + remainder->digits_used;\n        b = lhs->number;\n        while (a != end)\n        {\n            *a = *b;\n            ++a;\n            ++b;\n        }\n\n\n        // if rhs is bigger than lhs then result == 0 and remainder == lhs\n        // so then we can quit right now\n        if (is_less_than(lhs,rhs))\n        {\n            return;            \n        }\n\n\n        // make a temporary number\n        data_record temp(lhs->digits_used + slack);\n\n\n        // shift rhs left until it is one shift away from being larger than lhs and\n        // put the number of left shifts necessary into shifts\n        uint32 shifts; \n        shifts = (lhs->digits_used - rhs->digits_used) * 16;\n\n        shift_left(rhs,&temp,shifts);\n\n\n        // while (lhs > temp)\n        while (is_less_than(&temp,lhs))\n        {\n            shift_left(&temp,&temp,1);\n            ++shifts;\n        }\n        // make sure lhs isn't smaller than temp\n        while (is_less_than(lhs,&temp))\n        {\n            shift_right(&temp,&temp);\n            --shifts;\n        }\n\n        \n        \n        // we want to execute the loop shifts +1 times\n        ++shifts;\n        while (shifts != 0)\n        {\n            shift_left(result,result,1);\n            // if (temp <= remainder)\n            if (!is_less_than(remainder,&temp))\n            {\n                long_sub(remainder,&temp,remainder);\n                \n                // increment result\n                uint16* r = result->number;\n                uint16* end = r + result->digits_used;\n                while (true)\n                {\n                    ++(*r);\n                    // if there was no carry then we are done\n                    if (*r != 0)\n                        break;\n\n                    ++r;\n\n                    // if we hit the end of r and there is still a carry then\n                    // the next digit of r is 1 and there is one more digit used\n                    if (r == end)\n                    {\n                        *r = 1;\n                        ++(result->digits_used);\n                        break;\n                    }\n                }\n            }\n            shift_right(&temp,&temp);\n            --shifts;\n        }\n        \n        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    long_mul (\n        const data_record* lhs,\n        const data_record* rhs,\n        data_record* result\n    ) const\n    {\n        // make result be zero\n        result->digits_used = 1;\n        *(result->number) = 0;\n        \n\n        const data_record* aa;\n        const data_record* bb;\n\n        if (lhs->digits_used < rhs->digits_used)\n        {\n            // make copies of lhs and rhs and give them an appropriate amount of\n            // extra memory so there won't be any overflows\n            aa = lhs;\n            bb = rhs;\n        }\n        else\n        {\n            // make copies of lhs and rhs and give them an appropriate amount of\n            // extra memory so there won't be any overflows\n            aa = rhs;\n            bb = lhs;\n        }\n        // this is where we actually copy lhs and rhs\n        data_record b(*bb,aa->digits_used+slack); // the larger(approximately) of lhs and rhs\n\n\n        uint32 shift_value = 0;\n        uint16* anum = aa->number;\n        uint16* end = anum + aa->digits_used;\n        while (anum != end )\n        {\n            uint16 bit = 0x0001;\n \n            for (int i = 0; i < 16; ++i)\n            {\n                // if the specified bit of a is 1\n                if ((*anum & bit) != 0)\n                {\n                    shift_left(&b,&b,shift_value);\n                    shift_value = 0;\n                    long_add(&b,result,result);\n                }\n                ++shift_value;\n                bit <<= 1;\n            }\n\n            ++anum;                        \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    shift_left (\n        const data_record* data,\n        data_record* result,\n        uint32 shift_amount\n    ) const\n    {\n        uint32 offset = shift_amount/16;\n        shift_amount &= 0xf;  // same as shift_amount %= 16;\n\n        uint16* r = result->number + data->digits_used + offset; // result\n        uint16* end = data->number;\n        uint16* s = end + data->digits_used; // source\n        const uint32 temp = 16 - shift_amount;\n\n        *r = (*(--s) >> temp);\n        // set the number of digits used in the result\n        // if the upper bits from *s were zero then don't count this first word\n        if (*r == 0)\n        {\n            result->digits_used = data->digits_used + offset;\n        }\n        else\n        {\n            result->digits_used = data->digits_used + offset + 1;\n        }\n        --r;\n\n        while (s != end)\n        {\n            *r = ((*s << shift_amount) | ( *(s-1) >> temp));\n            --r;\n            --s;\n        }\n        *r = *s << shift_amount;\n\n        // now zero the rest of the result\n        end = result->number;\n        while (r != end)\n            *(--r) = 0;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    shift_right (\n        const data_record* data,\n        data_record* result\n    ) const\n    {\n\n            uint16* r = result->number; // result\n            uint16* s = data->number; // source\n            uint16* end = s + data->digits_used - 1;\n\n            while (s != end)\n            {\n                *r = (*s >> 1) | (*(s+1) << 15);\n                ++r;\n                ++s;\n            }\n            *r = *s >> 1;\n\n\n            // calculate the new number for digits_used\n            if (*r == 0)\n            {\n                if (data->digits_used != 1)\n                    result->digits_used = data->digits_used - 1;\n                else\n                    result->digits_used = 1;\n            }\n            else\n            {\n                result->digits_used = data->digits_used;\n            }\n  \n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bigint_kernel_1::\n    is_less_than (\n        const data_record* lhs,\n        const data_record* rhs\n    ) const\n    {\n        uint32 lhs_digits_used = lhs->digits_used;\n        uint32 rhs_digits_used = rhs->digits_used;\n\n        // if lhs is definitely less than rhs\n        if (lhs_digits_used < rhs_digits_used )\n            return true;\n        // if lhs is definitely greater than rhs\n        else if (lhs_digits_used > rhs_digits_used)\n            return false;\n        else \n        {\n            uint16* end = lhs->number;\n            uint16* l = end         + lhs_digits_used;\n            uint16* r = rhs->number + rhs_digits_used;\n            \n            while (l != end)\n            {\n                --l;\n                --r;\n                if (*l < *r)\n                    return true;\n                else if (*l > *r)\n                    return false;\n            }\n\n            // at this point we know that they are equal\n            return false;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bigint_kernel_1::\n    is_equal_to (\n        const data_record* lhs,\n        const data_record* rhs\n    ) const\n    {\n        // if lhs and rhs are definitely not equal\n        if (lhs->digits_used != rhs->digits_used )\n        {\n            return false;\n        }\n        else \n        {            \n            uint16* l = lhs->number;\n            uint16* r = rhs->number;\n            uint16* end = l + lhs->digits_used;\n            \n            while (l != end)\n            {\n                if (*l != *r)\n                    return false;\n                ++l;\n                ++r;\n            }\n\n            // at this point we know that they are equal\n            return true;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    increment (\n        const data_record* source,\n        data_record* dest\n    ) const\n    {\n        uint16* s = source->number;\n        uint16* d = dest->number;\n        uint16* end = s + source->digits_used;\n        while (true)\n        {\n            *d = *s + 1;\n\n            // if there was no carry then break out of the loop\n            if (*d != 0)\n            {\n                dest->digits_used = source->digits_used;\n\n                // copy the rest of the digits over to d\n                ++d; ++s;\n                while (s != end)\n                {\n                    *d = *s;\n                    ++d;\n                    ++s;\n                }\n\n                break;\n            }\n            \n\n            ++s;            \n\n            // if we have hit the end of s and there was a carry up to this point\n            // then just make the next digit 1 and add one to the digits used\n            if (s == end)\n            {\n                ++d;\n                dest->digits_used = source->digits_used + 1;\n                *d = 1;\n                break;\n            }\n\n            ++d;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_1::\n    decrement (\n        const data_record* source,\n        data_record* dest\n    ) const\n    {\n        uint16* s = source->number;\n        uint16* d = dest->number;\n        uint16* end = s + source->digits_used;\n        while (true)\n        {\n            *d = *s - 1;\n\n            // if there was no carry then break out of the loop\n            if (*d != 0xFFFF)\n            {\n                // if we lost a digit in the subtraction \n                if (*d == 0 && s+1 == end)\n                {\n                    if (source->digits_used == 1)\n                        dest->digits_used = 1;\n                    else\n                        dest->digits_used = source->digits_used - 1;\n                }\n                else\n                {\n                    dest->digits_used = source->digits_used;\n                }\n                break;\n            }\n            else\n            {\n                ++d;\n                ++s;\n            }\n\n        }\n\n        // copy the rest of the digits over to d\n        ++d;\n        ++s;\n        while (s != end)\n        {\n            *d = *s;\n            ++d;\n            ++s;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif // DLIB_BIGINT_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bigint/bigint_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIGINT_KERNEl_1_\n#define DLIB_BIGINT_KERNEl_1_\n\n#include \"bigint_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../uintn.h\"\n#include <iosfwd>\n\nnamespace dlib\n{\n    \n    using namespace dlib::relational_operators; // defined in algs.h\n\n    class bigint_kernel_1 \n    {\n        /*!\n            INITIAL VALUE\n                slack               == 25\n                data->number[0]     == 0 \n                data->size          == slack \n                data->references    == 1 \n                data->digits_used   == 1\n                \n\n            CONVENTION\n                slack  == the number of extra digits placed into the number when it is \n                    created.  the slack value should never be less than 1\n\n                data->number == pointer to an array of data->size uint16s.\n                    data represents a string of base 65535 numbers with data[0] being\n                    the least significant bit and data[data->digits_used-1] being the most \n                    significant\n\n\n                NOTE: In the comments I will consider a word to be a 16 bit value\n\n\n                data->digits_used == the number of significant digits in the number.\n                    data->digits_used tells us the number of used elements in the \n                    data->number array so everything beyond data->number[data->digits_used-1] \n                    is undefined\n\n                data->references == the number of bigint_kernel_1 objects which refer\n                    to this data_record\n\n\n\n        !*/\n\n\n        struct data_record\n        {\n\n\n            explicit data_record(\n                uint32 size_\n            ) : \n                size(size_),\n                number(new uint16[size_]),\n                references(1),\n                digits_used(1)\n            {*number = 0;}\n            /*!\n                ensures\n                    - initializes *this to represent zero\n            !*/\n\n            data_record(\n                const data_record& item,\n                uint32 additional_size\n            ) :\n                size(item.digits_used + additional_size),\n                number(new uint16[size]),\n                references(1),\n                digits_used(item.digits_used)\n            {\n                uint16* source = item.number;\n                uint16* dest = number;\n                uint16* end = source + digits_used;\n                while (source != end)\n                {\n                    *dest = *source;\n                    ++dest;\n                    ++source;\n                }\n            }\n            /*!\n                ensures\n                    - *this is a copy of item except with \n                      size == item.digits_used + additional_size\n            !*/\n\n            ~data_record(\n            )\n            {\n                delete [] number;\n            }\n\n\n            const uint32 size;\n            uint16* number;\n            uint32 references;            \n            uint32 digits_used;\n\n        private:\n            // no copy constructor\n            data_record ( data_record&);\n        };\n\n\n\n        // note that the second parameter is just there \n        // to resolve the ambiguity between this constructor and \n        // bigint_kernel_1(uint32)\n        explicit bigint_kernel_1 (\n            data_record* data_, int\n        ): slack(25),data(data_) {}\n        /*!\n            ensures\n                - *this is initialized with data_ as its data member\n        !*/\n\n\n    public:\n\n        bigint_kernel_1 (\n        );\n\n        bigint_kernel_1 (\n            uint32 value\n        );\n\n        bigint_kernel_1 (\n            const bigint_kernel_1& item\n        );\n\n        virtual ~bigint_kernel_1 (\n        );\n\n        const bigint_kernel_1 operator+ (\n            const bigint_kernel_1& rhs\n        ) const;\n\n        bigint_kernel_1& operator+= (\n            const bigint_kernel_1& rhs\n        );\n\n        const bigint_kernel_1 operator- (\n            const bigint_kernel_1& rhs\n        ) const;\n\n        bigint_kernel_1& operator-= (\n            const bigint_kernel_1& rhs\n        );\n\n        const bigint_kernel_1 operator* (\n            const bigint_kernel_1& rhs\n        ) const;\n\n        bigint_kernel_1& operator*= (\n            const bigint_kernel_1& rhs\n        );\n\n        const bigint_kernel_1 operator/ (\n            const bigint_kernel_1& rhs\n        ) const;\n\n        bigint_kernel_1& operator/= (\n            const bigint_kernel_1& rhs\n        );\n\n        const bigint_kernel_1 operator% (\n            const bigint_kernel_1& rhs\n        ) const;\n\n        bigint_kernel_1& operator%= (\n            const bigint_kernel_1& rhs\n        );\n\n        bool operator < (\n            const bigint_kernel_1& rhs\n        ) const;\n\n        bool operator == (\n            const bigint_kernel_1& rhs\n        ) const;\n\n        bigint_kernel_1& operator= (\n            const bigint_kernel_1& rhs\n        );\n\n        friend std::ostream& operator<< (\n            std::ostream& out,\n            const bigint_kernel_1& rhs\n        );\n\n        friend std::istream& operator>> (\n            std::istream& in,\n            bigint_kernel_1& rhs\n        );\n\n        bigint_kernel_1& operator++ (\n        );\n\n        const bigint_kernel_1 operator++ (\n            int\n        );\n\n        bigint_kernel_1& operator-- (\n        );\n\n        const bigint_kernel_1 operator-- (\n            int\n        );\n\n        friend const bigint_kernel_1 operator+ (\n            uint16 lhs,\n            const bigint_kernel_1& rhs\n        );\n\n        friend const bigint_kernel_1 operator+ (\n            const bigint_kernel_1& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_1& operator+= (\n            uint16 rhs\n        );\n\n        friend const bigint_kernel_1 operator- (\n            uint16 lhs,\n            const bigint_kernel_1& rhs\n        );\n\n        friend const bigint_kernel_1 operator- (\n            const bigint_kernel_1& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_1& operator-= (\n            uint16 rhs\n        );\n\n        friend const bigint_kernel_1 operator* (\n            uint16 lhs,\n            const bigint_kernel_1& rhs\n        );\n\n        friend const bigint_kernel_1 operator* (\n            const bigint_kernel_1& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_1& operator*= (\n            uint16 rhs\n        );\n\n        friend const bigint_kernel_1 operator/ (\n            uint16 lhs,\n            const bigint_kernel_1& rhs\n        );\n\n        friend const bigint_kernel_1 operator/ (\n            const bigint_kernel_1& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_1& operator/= (\n            uint16 rhs\n        );\n\n        friend const bigint_kernel_1 operator% (\n            uint16 lhs,\n            const bigint_kernel_1& rhs\n        );\n\n        friend const bigint_kernel_1 operator% (\n            const bigint_kernel_1& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_1& operator%= (\n            uint16 rhs\n        );\n\n        friend bool operator < (\n            uint16 lhs,\n            const bigint_kernel_1& rhs\n        );\n\n        friend bool operator < (\n            const bigint_kernel_1& lhs,\n            uint16 rhs\n        );\n\n        friend bool operator == (\n            const bigint_kernel_1& lhs,\n            uint16 rhs\n        );\n\n        friend bool operator == (\n            uint16 lhs,\n            const bigint_kernel_1& rhs\n        );\n\n        bigint_kernel_1& operator= (\n            uint16 rhs\n        );\n\n\n        void swap (\n            bigint_kernel_1& item\n        ) { data_record* temp = data; data = item.data; item.data = temp; }\n\n\n    private:\n\n        void long_add (\n            const data_record* lhs,\n            const data_record* rhs,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - result->size >= max(lhs->digits_used,rhs->digits_used) + 1\n            ensures\n                - result == lhs + rhs\n        !*/\n\n        void long_sub (\n            const data_record* lhs,\n            const data_record* rhs,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - lhs >= rhs \n                - result->size >= lhs->digits_used\n            ensures\n                - result == lhs - rhs\n        !*/\n\n        void long_div (\n            const data_record* lhs,\n            const data_record* rhs,\n            data_record* result,\n            data_record* remainder\n        ) const;\n        /*!\n            requires \n                - rhs != 0 \n                - result->size >= lhs->digits_used \n                - remainder->size >= lhs->digits_used \n                - each parameter is unique (i.e. lhs != result, lhs != remainder, etc.)\n            ensures\n                - result == lhs / rhs\n                - remainder == lhs % rhs\n        !*/\n\n        void long_mul (\n            const data_record* lhs,\n            const data_record* rhs,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - result->size >= lhs->digits_used + rhs->digits_used \n                - result != lhs \n                - result != rhs\n            ensures\n                - result == lhs * rhs\n        !*/\n\n        void short_add (\n            const data_record* data,\n            uint16 value,\n            data_record* result            \n        ) const;\n        /*!\n            requires\n                - result->size >= data->size + 1\n            ensures\n                - result == data + value\n        !*/\n\n        void short_sub (\n            const data_record* data,\n            uint16 value,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - data >= value \n                - result->size >= data->digits_used\n            ensures\n                - result == data - value\n        !*/\n\n        void short_mul (\n            const data_record* data,\n            uint16 value,\n            data_record* result            \n        ) const;\n        /*!\n            requires\n                - result->size >= data->digits_used + 1\n            ensures\n                - result == data * value\n        !*/\n\n        void short_div (\n            const data_record* data,            \n            uint16 value,\n            data_record* result,\n            uint16& remainder\n        ) const;\n        /*!\n            requires\n                - value != 0 \n                - result->size >= data->digits_used\n            ensures\n                - result = data*value \n                - remainder = data%value\n        !*/\n\n        void shift_left (\n            const data_record* data,\n            data_record* result,\n            uint32 shift_amount\n        ) const;\n        /*!\n            requires\n                - result->size >= data->digits_used + shift_amount/8 + 1\n            ensures\n                - result == data << shift_amount\n        !*/\n\n        void shift_right (\n            const data_record* data,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - result->size >= data->digits_used \n            ensures\n                - result == data >> 1\n        !*/\n\n        bool is_less_than (\n            const data_record* lhs,\n            const data_record* rhs\n        ) const;\n        /*! \n            ensures\n                - returns true if lhs < rhs \n                - returns false otherwise\n        !*/ \n\n        bool is_equal_to (\n            const data_record* lhs,\n            const data_record* rhs\n        ) const;\n        /*!\n            ensures\n                - returns true if lhs == rhs \n                - returns false otherwise\n        !*/\n\n        void increment (\n            const data_record* source,\n            data_record* dest\n        ) const;\n        /*!\n            requires\n                - dest->size >= source->digits_used + 1\n            ensures\n                - dest = source + 1\n        !*/\n\n        void decrement (\n            const data_record* source,\n            data_record* dest\n        ) const;\n        /*!\n            requires\n                source != 0\n            ensuers\n                dest = source - 1\n        !*/\n\n        // member data\n        const uint32 slack;\n        data_record* data;     \n        \n        \n\n    };\n\n    inline void swap (\n        bigint_kernel_1& a,\n        bigint_kernel_1& b\n    ) { a.swap(b); }\n\n    inline void serialize (\n        const bigint_kernel_1& item, \n        std::ostream& out\n    )\n    { \n        std::ios::fmtflags oldflags = out.flags();  \n        out.flags(); \n        out << item << ' '; \n        out.flags(oldflags); \n        if (!out) throw serialization_error(\"Error serializing object of type bigint_kernel_c\"); \n    }   \n\n    inline void deserialize (\n        bigint_kernel_1& item, \n        std::istream& in\n    ) \n    { \n        std::ios::fmtflags oldflags = in.flags();  \n        in.flags(); \n        in >> item; in.flags(oldflags); \n        if (in.get() != ' ')\n        {\n            item = 0;\n            throw serialization_error(\"Error deserializing object of type bigint_kernel_c\"); \n        }\n    }   \n\n}\n\n#ifdef NO_MAKEFILE\n#include \"bigint_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_BIGINT_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bigint/bigint_kernel_2.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIGINT_KERNEL_2_CPp_\n#define DLIB_BIGINT_KERNEL_2_CPp_\n#include \"bigint_kernel_2.h\"\n\n#include <iostream>\n#include <cmath>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member/friend function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2::\n    bigint_kernel_2 (\n    ) :\n        slack(25),\n        data(new data_record(slack))\n    {}\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2::\n    bigint_kernel_2 (\n        uint32 value\n    ) :\n        slack(25),\n        data(new data_record(slack))\n    {\n        *(data->number) = static_cast<uint16>(value&0xFFFF);\n        *(data->number+1) = static_cast<uint16>((value>>16)&0xFFFF);\n        if (*(data->number+1) != 0)\n            data->digits_used = 2;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2::\n    bigint_kernel_2 (\n        const bigint_kernel_2& item\n    ) :\n        slack(25),\n        data(item.data)\n    {\n        data->references += 1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2::\n    ~bigint_kernel_2 (\n    )\n    {\n        if (data->references == 1)\n        {\n            delete data;\n        }\n        else\n        {\n            data->references -= 1;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 bigint_kernel_2::\n    operator+ (\n        const bigint_kernel_2& rhs\n    ) const\n    {\n        data_record* temp = new data_record (\n                    std::max(rhs.data->digits_used,data->digits_used) + slack\n                    );\n        long_add(data,rhs.data,temp);\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator+= (\n        const bigint_kernel_2& rhs\n    )\n    {\n        // if there are other references to our data\n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(std::max(data->digits_used,rhs.data->digits_used)+slack);\n            data->references -= 1;   \n            long_add(data,rhs.data,temp);\n            data = temp;\n        }\n        // if data is not big enough for the result\n        else if (data->size <= std::max(data->digits_used,rhs.data->digits_used))\n        {\n            data_record* temp = new data_record(std::max(data->digits_used,rhs.data->digits_used)+slack);\n            long_add(data,rhs.data,temp);\n            delete data;\n            data = temp;\n        }\n        // there is enough size and no references\n        else\n        {\n            long_add(data,rhs.data,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 bigint_kernel_2::\n    operator- (\n        const bigint_kernel_2& rhs\n    ) const\n    {\n        data_record* temp = new data_record (\n                    data->digits_used + slack\n                    );\n        long_sub(data,rhs.data,temp);\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator-= (\n        const bigint_kernel_2& rhs\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            long_sub(data,rhs.data,temp);\n            data = temp;\n        }\n        else\n        {\n            long_sub(data,rhs.data,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 bigint_kernel_2::\n    operator* (\n        const bigint_kernel_2& rhs\n    ) const\n    {\n        data_record* temp = new data_record (\n                    data->digits_used + rhs.data->digits_used + slack\n                    );\n        long_mul(data,rhs.data,temp);\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator*= (\n        const bigint_kernel_2& rhs\n    )\n    {\n        // create a data_record to store the result of the multiplication in\n        data_record* temp = new data_record(rhs.data->digits_used+data->digits_used+slack);        \n        long_mul(data,rhs.data,temp);\n\n        // if there are other references to data\n        if (data->references != 1)\n        {\n            data->references -= 1;\n        }\n        else\n        {\n            delete data;\n        }\n        data = temp;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 bigint_kernel_2::\n    operator/ (\n        const bigint_kernel_2& rhs\n    ) const\n    {\n        data_record* temp = new data_record(data->digits_used+slack);\n        data_record* remainder;\n        try {\n            remainder = new data_record(data->digits_used+slack);           \n        } catch (...) { delete temp; throw; }\n\n        long_div(data,rhs.data,temp,remainder);\n        delete remainder;\n    \n\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator/= (\n        const bigint_kernel_2& rhs\n    )\n    {\n\n        data_record* temp = new data_record(data->digits_used+slack);\n        data_record* remainder;\n        try {\n            remainder = new data_record(data->digits_used+slack);\n        } catch (...) { delete temp; throw; }    \n\n        long_div(data,rhs.data,temp,remainder);\n\n        // check if there are other references to data\n        if (data->references != 1)\n        {\n            data->references -= 1;\n        }\n        // if there are no references to data then it must be deleted\n        else\n        {\n            delete data;\n        }\n        data = temp;\n        delete remainder;\n\n        \n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 bigint_kernel_2::\n    operator% (\n        const bigint_kernel_2& rhs\n    ) const\n    {\n        data_record* temp = new data_record(data->digits_used+slack);\n        data_record* remainder;\n        try {\n            remainder = new data_record(data->digits_used+slack);\n        } catch (...) { delete temp; throw; }\n\n        long_div(data,rhs.data,temp,remainder);\n        delete temp;\n        return bigint_kernel_2(remainder,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator%= (\n        const bigint_kernel_2& rhs\n    )\n    {\n        data_record* temp = new data_record(data->digits_used+slack);\n        data_record* remainder;\n        try {\n            remainder = new data_record(data->digits_used+slack);\n        } catch (...) { delete temp; throw; }\n\n        long_div(data,rhs.data,temp,remainder);\n\n        // check if there are other references to data\n        if (data->references != 1)\n        {\n            data->references -= 1;\n        }\n        // if there are no references to data then it must be deleted\n        else\n        {\n            delete data;\n        }\n        data = remainder;\n        delete temp;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bigint_kernel_2::\n    operator < (\n        const bigint_kernel_2& rhs\n    ) const\n    {\n        return is_less_than(data,rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bigint_kernel_2::\n    operator == (\n        const bigint_kernel_2& rhs\n    ) const\n    {\n        return is_equal_to(data,rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator= (\n        const bigint_kernel_2& rhs\n    )\n    {\n        if (this == &rhs)\n            return *this;\n\n        // if we have the only reference to our data then delete it\n        if (data->references == 1)\n        {\n            delete data;\n            data = rhs.data;\n            data->references += 1;\n        }\n        else\n        {\n            data->references -= 1;\n            data = rhs.data;\n            data->references += 1;\n        }\n\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::ostream& operator<< (\n        std::ostream& out_,\n        const bigint_kernel_2& rhs\n    )\n    {\n        std::ostream out(out_.rdbuf());\n\n        typedef bigint_kernel_2 bigint;\n        \n        bigint::data_record* temp = new bigint::data_record(*rhs.data,0);\n\n\n\n        // get a char array big enough to hold the number in ascii format\n        char* str;\n        try {\n            str = new char[(rhs.data->digits_used)*5+10];\n        } catch (...) { delete temp; throw; }\n\n        char* str_start = str;\n        str += (rhs.data->digits_used)*5+9;\n        *str = 0; --str;\n\n\n        uint16 remainder;\n        rhs.short_div(temp,10000,temp,remainder);\n\n        // pull the digits out of remainder\n        char a = remainder % 10 + '0';\n        remainder /= 10;\n        char b = remainder % 10 + '0';\n        remainder /= 10;\n        char c = remainder % 10 + '0';\n        remainder /= 10;\n        char d = remainder % 10 + '0';\n        remainder /= 10;\n\n\n        *str = a; --str;\n        *str = b; --str;\n        *str = c; --str;\n        *str = d; --str;\n\n\n        // keep looping until temp represents zero\n        while (temp->digits_used != 1 || *(temp->number) != 0)\n        {            \n            rhs.short_div(temp,10000,temp,remainder);\n\n            // pull the digits out of remainder\n            char a = remainder % 10 + '0';\n            remainder /= 10;\n            char b = remainder % 10 + '0';\n            remainder /= 10;\n            char c = remainder % 10 + '0';\n            remainder /= 10;\n            char d = remainder % 10 + '0';\n            remainder /= 10;\n\n            *str = a; --str;\n            *str = b; --str;\n            *str = c; --str;\n            *str = d; --str;              \n        }\n\n        // throw away and extra leading zeros\n        ++str;\n        if (*str == '0')\n            ++str;\n        if (*str == '0')\n            ++str;\n        if (*str == '0')\n            ++str;\n\n\n        \n\n        out << str;\n        delete [] str_start;\n        delete temp;\n        return out_;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::istream& operator>> (\n        std::istream& in_,\n        bigint_kernel_2& rhs\n    )\n    {\n        std::istream in(in_.rdbuf());\n\n        // ignore any leading whitespaces\n        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == '\\n')\n        {\n            in.get();\n        }\n\n        // if the first digit is not an integer then this is an error\n        if ( !(in.peek() >= '0' && in.peek() <= '9'))\n        {\n            in_.clear(std::ios::failbit);\n            return in_;\n        }\n\n        int num_read;\n        bigint_kernel_2 temp;\n        do\n        {\n\n            // try to get 4 chars from in\n            num_read = 1;\n            char a = 0;\n            char b = 0; \n            char c = 0;\n            char d = 0;\n\n            if (in.peek() >= '0' && in.peek() <= '9')\n            {\n                num_read *= 10;\n                a = in.get();\n            }\n            if (in.peek() >= '0' && in.peek() <= '9')\n            {\n                num_read *= 10;\n                b = in.get();\n            }\n            if (in.peek() >= '0' && in.peek() <= '9')\n            {\n                num_read *= 10;\n                c = in.get();\n            }\n            if (in.peek() >= '0' && in.peek() <= '9')\n            {\n                num_read *= 10;\n                d = in.get();\n            }\n            \n            // merge the for digits into an uint16\n            uint16 num = 0;\n            if (a != 0)\n            {\n                num = a - '0';\n            }\n            if (b != 0)\n            {\n                num *= 10;\n                num += b - '0';\n            }\n            if (c != 0)\n            {\n                num *= 10;\n                num += c - '0';\n            }\n            if (d != 0)\n            {\n                num *= 10;\n                num += d - '0';\n            }\n\n\n            if (num_read != 1)\n            {\n                // shift the digits in temp left by the number of new digits we just read\n                temp *= num_read;\n                // add in new digits\n                temp += num;\n            }\n\n        } while (num_read == 10000);\n\n\n        rhs = temp;\n        return in_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator+ (\n        uint16 lhs,\n        const bigint_kernel_2& rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (rhs.data->digits_used+rhs.slack);\n\n        rhs.short_add(rhs.data,lhs,temp);\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator+ (\n        const bigint_kernel_2& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (lhs.data->digits_used+lhs.slack);\n\n        lhs.short_add(lhs.data,rhs,temp);\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator+= (\n        uint16 rhs\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;    \n            short_add(data,rhs,temp);\n            data = temp;\n        }\n        // or if we need to enlarge data then do so\n        else if (data->digits_used == data->size)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            short_add(data,rhs,temp);\n            delete data;\n            data = temp;\n        }\n        // or if there is plenty of space and no references\n        else\n        {\n            short_add(data,rhs,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator- (\n        uint16 lhs,\n        const bigint_kernel_2& rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        bigint::data_record* temp = new bigint::data_record(rhs.slack);\n\n        *(temp->number) = lhs - *(rhs.data->number);\n\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator- (\n        const bigint_kernel_2& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (lhs.data->digits_used+lhs.slack);\n\n        lhs.short_sub(lhs.data,rhs,temp);\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator-= (\n        uint16 rhs\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            short_sub(data,rhs,temp);\n            data = temp;\n        }\n        else\n        {\n            short_sub(data,rhs,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator* (\n        uint16 lhs,\n        const bigint_kernel_2& rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (rhs.data->digits_used+rhs.slack);\n\n        rhs.short_mul(rhs.data,lhs,temp);\n        return bigint_kernel_2(temp,0);        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator* (\n        const bigint_kernel_2& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (lhs.data->digits_used+lhs.slack);\n\n        lhs.short_mul(lhs.data,rhs,temp);\n        return bigint_kernel_2(temp,0);  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator*= (\n        uint16 rhs\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            short_mul(data,rhs,temp);\n            data = temp;\n        }\n        // or if we need to enlarge data\n        else if (data->digits_used == data->size)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            short_mul(data,rhs,temp);\n            delete data;\n            data = temp;\n        }\n        else\n        {\n            short_mul(data,rhs,data);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator/ (\n        uint16 lhs,\n        const bigint_kernel_2& rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        bigint::data_record* temp = new bigint::data_record(rhs.slack);\n\n        // if rhs might not be bigger than lhs\n        if (rhs.data->digits_used == 1)\n        {\n            *(temp->number) = lhs/ *(rhs.data->number);\n        }\n        \n        return bigint_kernel_2(temp,0);  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator/ (\n        const bigint_kernel_2& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        bigint::data_record* temp = new bigint::data_record\n                (lhs.data->digits_used+lhs.slack);\n\n        uint16 remainder;\n        lhs.short_div(lhs.data,rhs,temp,remainder);\n        return bigint_kernel_2(temp,0);  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator/= (\n        uint16 rhs\n    )\n    {\n        uint16 remainder;\n        // if there are other references to this data\n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            short_div(data,rhs,temp,remainder);    \n            data = temp;\n        }\n        else\n        {\n            short_div(data,rhs,data,remainder);\n        }\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator% (\n        uint16 lhs,\n        const bigint_kernel_2& rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        // temp is zero by default\n        bigint::data_record* temp = new bigint::data_record(rhs.slack);\n\n        if (rhs.data->digits_used == 1)\n        {\n            // if rhs is just an uint16 inside then perform the modulus\n            *(temp->number) = lhs % *(rhs.data->number);\n        }\n        else\n        {\n            // if rhs is bigger than lhs then the answer is lhs\n            *(temp->number) = lhs;\n        }\n        \n        return bigint_kernel_2(temp,0);  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 operator% (\n        const bigint_kernel_2& lhs,\n        uint16 rhs\n    )\n    {\n        typedef bigint_kernel_2 bigint;\n        bigint::data_record* temp = new bigint::data_record(lhs.data->digits_used+lhs.slack);\n\n        uint16 remainder;\n\n        lhs.short_div(lhs.data,rhs,temp,remainder);\n        temp->digits_used = 1;\n        *(temp->number) = remainder;\n        return bigint_kernel_2(temp,0);          \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator%= (\n        uint16 rhs\n    )\n    {\n        uint16 remainder;\n        // if there are other references to this data\n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            short_div(data,rhs,temp,remainder);\n            data = temp;\n        }\n        else\n        {\n            short_div(data,rhs,data,remainder);\n        }\n\n        data->digits_used = 1;\n        *(data->number) = remainder;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool operator < (\n        uint16 lhs,\n        const bigint_kernel_2& rhs\n    )\n    {\n        return (rhs.data->digits_used > 1 || lhs < *(rhs.data->number) );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool operator < (\n        const bigint_kernel_2& lhs,\n        uint16 rhs\n    )\n    {\n        return (lhs.data->digits_used == 1 && *(lhs.data->number) < rhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool operator == (\n        const bigint_kernel_2& lhs,\n        uint16 rhs\n    )\n    {\n        return (lhs.data->digits_used == 1 && *(lhs.data->number) == rhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool operator == (\n        uint16 lhs,\n        const bigint_kernel_2& rhs\n    )\n    {\n        return (rhs.data->digits_used == 1 && *(rhs.data->number) == lhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator= (\n        uint16 rhs\n    )\n    {\n        // check if there are other references to our data\n        if (data->references != 1)\n        {\n            data->references -= 1;\n            try {\n                data = new data_record(slack);\n            } catch (...) { data->references += 1; throw; }\n        }\n        else\n        {\n            data->digits_used = 1;\n        }\n        \n        *(data->number) = rhs;\n\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator++ (\n    )\n    {\n        // if there are other references to this data then make a copy of it\n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            increment(data,temp);\n            data = temp;\n        }\n        // or if we need to enlarge data then do so\n        else if (data->digits_used == data->size)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            increment(data,temp);\n            delete data;\n            data = temp;\n        }\n        else\n        {\n            increment(data,data);\n        }\n\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 bigint_kernel_2::\n    operator++ (\n        int\n    )\n    {\n        data_record* temp; // this is the copy of temp we will return in the end\n         \n        data_record* temp2 = new data_record(data->digits_used+slack);\n        increment(data,temp2);\n        \n        temp = data;\n        data = temp2;\n\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bigint_kernel_2& bigint_kernel_2::\n    operator-- (\n    )\n    {\n        // if there are other references to this data \n        if (data->references != 1)\n        {\n            data_record* temp = new data_record(data->digits_used+slack);\n            data->references -= 1;\n            decrement(data,temp);\n            data = temp;\n        }\n        else\n        {\n            decrement(data,data);\n        }\n\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const bigint_kernel_2 bigint_kernel_2::\n    operator-- (\n        int\n    )\n    {\n        data_record* temp; // this is the copy of temp we will return in the end\n         \n        data_record* temp2 = new data_record(data->digits_used+slack);\n        decrement(data,temp2);\n        \n        temp = data;\n        data = temp2;\n\n        return bigint_kernel_2(temp,0);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    short_add (\n        const data_record* data,        \n        uint16 value,\n        data_record* result\n    ) const\n    {\n        // put value into the carry part of temp\n        uint32 temp = value;\n        temp <<= 16;\n\n        \n        const uint16* number = data->number;\n        const uint16* end = number + data->digits_used; // one past the end of number\n        uint16* r = result->number;\n\n        while (number != end)\n        {\n            // add *number and the current carry\n            temp = *number + (temp>>16);\n            // put the low word of temp into *r\n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++number;\n            ++r;\n        }\n\n        // if there is a final carry\n        if ((temp>>16) != 0)\n        {\n            result->digits_used = data->digits_used + 1;\n            // store the carry in the most significant digit of the result\n            *r = static_cast<uint16>(temp>>16); \n        }\n        else\n        {\n            result->digits_used = data->digits_used;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    short_sub (\n        const data_record* data,        \n        uint16 value,\n        data_record* result\n    ) const\n    {\n        \n\n        const uint16* number = data->number;\n        const uint16* end = number + data->digits_used - 1;\n        uint16* r = result->number;\n\n        uint32 temp = *number - value;\n\n        // put the low word of temp into *data \n        *r = static_cast<uint16>(temp & 0xFFFF);\n\n        \n        while (number != end)\n        {\n            ++number;\n            ++r;\n\n            // subtract the carry from *number \n            temp = *number - (temp>>31);\n\n            // put the low word of temp into *r \n            *r = static_cast<uint16>(temp & 0xFFFF);\n        }\n\n        // if we lost a digit in the subtraction\n        if (*r == 0)\n        {\n            if (data->digits_used == 1)\n                result->digits_used = 1;\n            else\n                result->digits_used = data->digits_used - 1;\n        }\n        else\n        {\n            result->digits_used = data->digits_used;\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    short_mul (\n        const data_record* data,        \n        uint16 value,\n        data_record* result\n    ) const\n    {\n        \n        uint32 temp = 0;\n\n\n        const uint16* number = data->number;        \n        uint16* r = result->number;\n        const uint16* end = r + data->digits_used;\n\n\n\n        while ( r != end)\n        {\n\n            // multiply *data and value and add in the carry\n            temp = *number*(uint32)value + (temp>>16);\n\n            // put the low word of temp into *data\n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++number;\n            ++r;\n        }\n\n        // if there is a final carry\n        if ((temp>>16) != 0)\n        {\n            result->digits_used = data->digits_used + 1;\n            // put the final carry into the most significant digit of the result\n            *r = static_cast<uint16>(temp>>16);\n        }\n        else\n        {\n            result->digits_used = data->digits_used;\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    short_div (\n        const data_record* data,        \n        uint16 value,   \n        data_record* result,\n        uint16& rem\n    ) const\n    {\n        \n        uint16 remainder = 0;\n        uint32 temp;\n\n        \n\n        const uint16* number = data->number + data->digits_used - 1;\n        const uint16* end = number - data->digits_used;\n        uint16* r = result->number + data->digits_used - 1;\n\n\n        // if we are losing a digit in this division\n        if (*number < value)\n        {\n            if (data->digits_used == 1)\n                result->digits_used = 1;\n            else\n                result->digits_used = data->digits_used - 1;\n        }\n        else\n        {\n            result->digits_used = data->digits_used;\n        }\n\n\n        // perform the actual division\n        while (number != end)\n        {\n           \n            temp = *number + (((uint32)remainder)<<16);\n\n            *r = static_cast<uint16>(temp/value);\n            remainder = static_cast<uint16>(temp%value);\n\n            --number;\n            --r;\n        }\n\n        rem = remainder;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    long_add (\n        const data_record* lhs,\n        const data_record* rhs,\n        data_record* result\n    ) const\n    {\n        // put value into the carry part of temp\n        uint32 temp=0;        \n\n        uint16* min_num;  // the number with the least digits used\n        uint16* max_num;  // the number with the most digits used\n        uint16* min_end;  // one past the end of min_num\n        uint16* max_end;  // one past the end of max_num\n        uint16* r = result->number;\n\n        uint32 max_digits_used;\n        if (lhs->digits_used < rhs->digits_used)\n        {\n            max_digits_used = rhs->digits_used;\n            min_num = lhs->number;\n            max_num = rhs->number;\n            min_end = min_num + lhs->digits_used;\n            max_end = max_num + rhs->digits_used;\n        }\n        else\n        {\n            max_digits_used = lhs->digits_used;\n            min_num = rhs->number;\n            max_num = lhs->number;\n            min_end = min_num + rhs->digits_used;\n            max_end = max_num + lhs->digits_used;\n        }\n\n        \n\n\n        while (min_num != min_end)\n        {\n            // add *min_num, *max_num and the current carry\n            temp = *min_num + *max_num + (temp>>16);\n            // put the low word of temp into *r\n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++min_num;\n            ++max_num;\n            ++r;\n        }\n\n\n        while (max_num != max_end)\n        {\n            // add *max_num and the current carry\n            temp = *max_num + (temp>>16);\n            // put the low word of temp into *r\n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++max_num;\n            ++r;\n        }        \n\n        // check if there was a final carry\n        if ((temp>>16) != 0)\n        {\n            result->digits_used = max_digits_used + 1;\n            // put the carry into the most significant digit in the result\n            *r = static_cast<uint16>(temp>>16);\n        }\n        else\n        {\n            result->digits_used = max_digits_used;\n        }\n\n        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    long_sub (\n        const data_record* lhs,\n        const data_record* rhs,\n        data_record* result\n    ) const\n    {\n\n\n        const uint16* number1 = lhs->number;\n        const uint16* number2 = rhs->number;\n        const uint16* end = number2 + rhs->digits_used;\n        uint16* r = result->number;\n\n\n\n        uint32 temp =0;\n\n        \n        while (number2 != end)\n        {\n\n            // subtract *number2 from *number1 and then subtract any carry\n            temp = *number1 - *number2 - (temp>>31);\n\n            // put the low word of temp into *r \n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++number1;\n            ++number2;\n            ++r;\n        }\n\n        end = lhs->number + lhs->digits_used;\n        while (number1 != end)\n        {\n\n            // subtract the carry from *number1 \n            temp = *number1 - (temp>>31);\n\n            // put the low word of temp into *r \n            *r = static_cast<uint16>(temp & 0xFFFF);\n\n            ++number1;\n            ++r;\n        }\n\n        result->digits_used = lhs->digits_used;\n        // adjust the number of digits used appropriately \n        --r;\n        while (*r == 0 && result->digits_used > 1)\n        {\n            --r;\n            --result->digits_used;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    long_div (\n        const data_record* lhs,\n        const data_record* rhs,\n        data_record* result,\n        data_record* remainder\n    ) const\n    {\n        // zero result\n        result->digits_used = 1;\n        *(result->number) = 0;\n\n        uint16* a;\n        uint16* b;\n        uint16* end;\n\n        // copy lhs into remainder\n        remainder->digits_used = lhs->digits_used;\n        a = remainder->number;\n        end = a + remainder->digits_used;\n        b = lhs->number;\n        while (a != end)\n        {\n            *a = *b;\n            ++a;\n            ++b;\n        }\n\n\n        // if rhs is bigger than lhs then result == 0 and remainder == lhs\n        // so then we can quit right now\n        if (is_less_than(lhs,rhs))\n        {\n            return;            \n        }\n\n\n        // make a temporary number\n        data_record temp(lhs->digits_used + slack);\n\n\n        // shift rhs left until it is one shift away from being larger than lhs and\n        // put the number of left shifts necessary into shifts\n        uint32 shifts; \n        shifts = (lhs->digits_used - rhs->digits_used) * 16;\n\n        shift_left(rhs,&temp,shifts);\n\n\n        // while (lhs > temp)\n        while (is_less_than(&temp,lhs))\n        {\n            shift_left(&temp,&temp,1);\n            ++shifts;\n        }\n        // make sure lhs isn't smaller than temp\n        while (is_less_than(lhs,&temp))\n        {\n            shift_right(&temp,&temp);\n            --shifts;\n        }\n\n        \n        \n        // we want to execute the loop shifts +1 times\n        ++shifts;\n        while (shifts != 0)\n        {\n            shift_left(result,result,1);\n            // if (temp <= remainder)\n            if (!is_less_than(remainder,&temp))\n            {\n                long_sub(remainder,&temp,remainder);\n                \n                // increment result\n                uint16* r = result->number;\n                uint16* end = r + result->digits_used;\n                while (true)\n                {\n                    ++(*r);\n                    // if there was no carry then we are done\n                    if (*r != 0)\n                        break;\n\n                    ++r;\n\n                    // if we hit the end of r and there is still a carry then\n                    // the next digit of r is 1 and there is one more digit used\n                    if (r == end)\n                    {\n                        *r = 1;\n                        ++(result->digits_used);\n                        break;\n                    }\n                }\n            }\n            shift_right(&temp,&temp);\n            --shifts;\n        }\n        \n        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    long_mul (\n        const data_record* lhs,\n        const data_record* rhs,\n        data_record* result\n    ) const\n    {\n        // if one of the numbers is small then use this simple but O(n^2) algorithm\n        if (std::min(lhs->digits_used, rhs->digits_used) < 10)\n        {\n            // make result be zero\n            result->digits_used = 1;\n            *(result->number) = 0;\n\n\n            const data_record* aa;\n            const data_record* bb;\n\n            if (lhs->digits_used < rhs->digits_used)\n            {\n                // make copies of lhs and rhs and give them an appropriate amount of\n                // extra memory so there won't be any overflows\n                aa = lhs;\n                bb = rhs;\n            }\n            else\n            {\n                // make copies of lhs and rhs and give them an appropriate amount of\n                // extra memory so there won't be any overflows\n                aa = rhs;\n                bb = lhs;\n            }\n\n            // copy the larger(approximately) of lhs and rhs into b\n            data_record b(*bb,aa->digits_used+slack); \n\n\n            uint32 shift_value = 0;\n            uint16* anum = aa->number;\n            uint16* end = anum + aa->digits_used;\n            while (anum != end )\n            {\n                uint16 bit = 0x0001;\n\n                for (int i = 0; i < 16; ++i)\n                {\n                    // if the specified bit of a is 1\n                    if ((*anum & bit) != 0)\n                    {\n                        shift_left(&b,&b,shift_value);\n                        shift_value = 0;\n                        long_add(&b,result,result);\n                    }\n                    ++shift_value;\n                    bit <<= 1;\n                }\n\n                ++anum;                        \n            }\n        }\n        else  // else if both lhs and rhs are large then use the more complex \n              // O(n*logn) algorithm\n        {\n            uint32 size = 1;\n            // make size a power of 2\n            while (size < (lhs->digits_used + rhs->digits_used)*2)  \n            {\n                size *= 2;\n            }\n\n            // allocate some temporary space so we can do the FFT\n            ct* a = new ct[size];\n            ct* b; try {b = new ct[size]; } catch (...) { delete [] a; throw; }\n\n            // load lhs into the a array.  We are breaking the input number into \n            // 8bit chunks for the purpose of using this fft algorithm.  The reason \n            // for this is so that we have smaller numbers coming out of the final \n            // ifft.  This helps avoid overflow.\n            for (uint32 i = 0; i < lhs->digits_used; ++i)\n            {\n                a[i*2] = ct((t)(lhs->number[i]&0xFF),0);\n                a[i*2+1] = ct((t)(lhs->number[i]>>8),0);\n            }\n            for (uint32 i = lhs->digits_used*2; i < size; ++i)\n            {\n                a[i] = 0;\n            }\n\n            // load rhs into the b array\n            for (uint32 i = 0; i < rhs->digits_used; ++i)\n            {\n                b[i*2] = ct((t)(rhs->number[i]&0xFF),0);\n                b[i*2+1] = ct((t)(rhs->number[i]>>8),0);\n            }\n            for (uint32 i = rhs->digits_used*2; i < size; ++i)\n            {\n                b[i] = 0;\n            }\n\n            // perform the forward fft of a and b\n            fft(a,size);\n            fft(b,size);\n\n            const double l = 1.0/size;\n\n            // do the pointwise multiply of a and b and also apply the scale\n            // factor in this loop too.\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                a[i] = l*a[i]*b[i];\n            }\n\n            // Now compute the inverse fft of the pointwise multiplication of a and b.  \n            // This is basically the result.  We just have to take care of any carries \n            // that should happen.\n            ifft(a,size);\n\n            // loop over the result and propagate any carries that need to take place.  \n            // We will also be moving the resulting numbers into result->number at \n            // the same time.\n            uint64 carry = 0;\n            result->digits_used = 0;\n            int zeros = 0;\n            const uint32 len = lhs->digits_used + rhs->digits_used;\n            for (unsigned long i = 0; i < len; ++i)\n            {\n                uint64 num1 = static_cast<uint64>(std::floor(a[i*2].real()+0.5));\n                num1 += carry;\n                carry = 0;\n                if (num1 > 255)\n                {\n                    carry = num1 >> 8;\n                    num1 = (num1&0xFF);\n                }\n\n                uint64 num2 = static_cast<uint64>(std::floor(a[i*2+1].real()+0.5));\n                num2 += carry;\n                carry = 0;\n                if (num2 > 255)\n                {\n                    carry = num2 >> 8;\n                    num2 = (num2&0xFF);\n                }\n\n                // put the new number into its final place\n                num1 = (num2<<8) | num1;\n                result->number[i] = static_cast<uint16>(num1);\n\n                // keep track of the number of leading zeros\n                if (num1 == 0)\n                    ++zeros;\n                else\n                    zeros = 0;\n                ++(result->digits_used);\n            }\n\n            // adjust digits_used so that it reflects the actual number\n            // of non-zero digits in our representation.\n            result->digits_used -= zeros;\n\n            // if the result was zero then adjust the result accordingly\n            if (result->digits_used == 0)\n            {\n                // make result be zero\n                result->digits_used = 1;\n                *(result->number) = 0;\n            }\n\n            // free all the temporary buffers\n            delete [] a;\n            delete [] b;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    shift_left (\n        const data_record* data,\n        data_record* result,\n        uint32 shift_amount\n    ) const\n    {\n        uint32 offset = shift_amount/16;\n        shift_amount &= 0xf;  // same as shift_amount %= 16;\n\n        uint16* r = result->number + data->digits_used + offset; // result\n        uint16* end = data->number;\n        uint16* s = end + data->digits_used; // source\n        const uint32 temp = 16 - shift_amount;\n\n        *r = (*(--s) >> temp);\n        // set the number of digits used in the result\n        // if the upper bits from *s were zero then don't count this first word\n        if (*r == 0)\n        {\n            result->digits_used = data->digits_used + offset;\n        }\n        else\n        {\n            result->digits_used = data->digits_used + offset + 1;\n        }\n        --r;\n\n        while (s != end)\n        {\n            *r = ((*s << shift_amount) | ( *(s-1) >> temp));\n            --r;\n            --s;\n        }\n        *r = *s << shift_amount;\n\n        // now zero the rest of the result\n        end = result->number;\n        while (r != end)\n            *(--r) = 0;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    shift_right (\n        const data_record* data,\n        data_record* result\n    ) const\n    {\n\n            uint16* r = result->number; // result\n            uint16* s = data->number; // source\n            uint16* end = s + data->digits_used - 1;\n\n            while (s != end)\n            {\n                *r = (*s >> 1) | (*(s+1) << 15);\n                ++r;\n                ++s;\n            }\n            *r = *s >> 1;\n\n\n            // calculate the new number for digits_used\n            if (*r == 0)\n            {\n                if (data->digits_used != 1)\n                    result->digits_used = data->digits_used - 1;\n                else\n                    result->digits_used = 1;\n            }\n            else\n            {\n                result->digits_used = data->digits_used;\n            }\n  \n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bigint_kernel_2::\n    is_less_than (\n        const data_record* lhs,\n        const data_record* rhs\n    ) const\n    {\n        uint32 lhs_digits_used = lhs->digits_used;\n        uint32 rhs_digits_used = rhs->digits_used;\n\n        // if lhs is definitely less than rhs\n        if (lhs_digits_used < rhs_digits_used )\n            return true;\n        // if lhs is definitely greater than rhs\n        else if (lhs_digits_used > rhs_digits_used)\n            return false;\n        else \n        {\n            uint16* end = lhs->number;\n            uint16* l = end         + lhs_digits_used;\n            uint16* r = rhs->number + rhs_digits_used;\n            \n            while (l != end)\n            {\n                --l;\n                --r;\n                if (*l < *r)\n                    return true;\n                else if (*l > *r)\n                    return false;\n            }\n\n            // at this point we know that they are equal\n            return false;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bigint_kernel_2::\n    is_equal_to (\n        const data_record* lhs,\n        const data_record* rhs\n    ) const\n    {\n        // if lhs and rhs are definitely not equal\n        if (lhs->digits_used != rhs->digits_used )\n        {\n            return false;\n        }\n        else \n        {            \n            uint16* l = lhs->number;\n            uint16* r = rhs->number;\n            uint16* end = l + lhs->digits_used;\n            \n            while (l != end)\n            {\n                if (*l != *r)\n                    return false;\n                ++l;\n                ++r;\n            }\n\n            // at this point we know that they are equal\n            return true;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    increment (\n        const data_record* source,\n        data_record* dest\n    ) const\n    {\n        uint16* s = source->number;\n        uint16* d = dest->number;\n        uint16* end = s + source->digits_used;\n        while (true)\n        {\n            *d = *s + 1;\n\n            // if there was no carry then break out of the loop\n            if (*d != 0)\n            {\n                dest->digits_used = source->digits_used;\n\n                // copy the rest of the digits over to d\n                ++d; ++s;\n                while (s != end)\n                {\n                    *d = *s;\n                    ++d;\n                    ++s;\n                }\n\n                break;\n            }\n            \n\n            ++s;            \n\n            // if we have hit the end of s and there was a carry up to this point\n            // then just make the next digit 1 and add one to the digits used\n            if (s == end)\n            {\n                ++d;\n                dest->digits_used = source->digits_used + 1;\n                *d = 1;\n                break;\n            }\n\n            ++d;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    decrement (\n        const data_record* source,\n        data_record* dest\n    ) const\n    {\n        uint16* s = source->number;\n        uint16* d = dest->number;\n        uint16* end = s + source->digits_used;\n        while (true)\n        {\n            *d = *s - 1;\n\n            // if there was no carry then break out of the loop\n            if (*d != 0xFFFF)\n            {\n                // if we lost a digit in the subtraction \n                if (*d == 0 && s+1 == end)\n                {\n                    if (source->digits_used == 1)\n                        dest->digits_used = 1;\n                    else\n                        dest->digits_used = source->digits_used - 1;\n                }\n                else\n                {\n                    dest->digits_used = source->digits_used;\n                }\n                break;\n            }\n            else\n            {\n                ++d;\n                ++s;\n            }\n\n        }\n\n        // copy the rest of the digits over to d\n        ++d;\n        ++s;\n        while (s != end)\n        {\n            *d = *s;\n            ++d;\n            ++s;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    fft (\n        ct* data, \n        unsigned long len\n    ) const \n    {\n        const t pi2 = -2.0*3.1415926535897932384626433832795028841971693993751;\n\n        const unsigned long half = len/2;\n\n        std::vector<ct> twiddle_factors;\n        twiddle_factors.resize(half);\n\n        // compute the complex root of unity w\n        const t temp = pi2/len;\n        ct w = ct(std::cos(temp),std::sin(temp));\n\n        ct w_pow = 1;\n\n        // compute the twiddle factors\n        for (std::vector<ct>::size_type j = 0; j < twiddle_factors.size(); ++j)\n        {\n            twiddle_factors[j] = w_pow; \n            w_pow *= w;\n        }\n\n        ct a, b;\n\n        // now compute the decimation in frequency.  This first\n        // outer loop loops log2(len) number of times\n        unsigned long skip = 1;\n        for (unsigned long step = half; step != 0; step >>= 1)\n        {\n            // do blocks of butterflies in this loop\n            for (unsigned long j = 0; j < len; j += step*2)\n            {\n                // do step butterflies\n                for (unsigned long k = 0; k < step; ++k)\n                {\n                    const unsigned long a_idx = j+k;\n                    const unsigned long b_idx = j+k+step;\n                    a = data[a_idx] + data[b_idx];\n                    b = (data[a_idx] - data[b_idx])*twiddle_factors[k*skip];\n                    data[a_idx] = a;\n                    data[b_idx] = b;\n                }\n            }\n            skip *= 2;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bigint_kernel_2::\n    ifft(\n        ct* data, \n        unsigned long len\n    ) const \n    {\n        const t pi2 = 2.0*3.1415926535897932384626433832795028841971693993751;\n\n        const unsigned long half = len/2;\n\n        std::vector<ct> twiddle_factors;\n        twiddle_factors.resize(half);\n\n        // compute the complex root of unity w\n        const t temp = pi2/len;\n        ct w = ct(std::cos(temp),std::sin(temp));\n\n        ct w_pow = 1;\n\n        // compute the twiddle factors\n        for (std::vector<ct>::size_type j = 0; j < twiddle_factors.size(); ++j)\n        {\n            twiddle_factors[j] = w_pow; \n            w_pow *= w;\n        }\n\n        ct a, b;\n\n        // now compute the inverse decimation in frequency.  This first\n        // outer loop loops log2(len) number of times\n        unsigned long skip = half;\n        for (unsigned long step = 1; step <= half; step <<= 1)\n        {\n            // do blocks of butterflies in this loop\n            for (unsigned long j = 0; j < len; j += step*2)\n            {\n                // do step butterflies\n                for (unsigned long k = 0; k < step; ++k)\n                {\n                    const unsigned long a_idx = j+k;\n                    const unsigned long b_idx = j+k+step;\n                    data[b_idx] *= twiddle_factors[k*skip];\n                    a = data[a_idx] + data[b_idx];\n                    b = data[a_idx] - data[b_idx];\n                    data[a_idx] = a;\n                    data[b_idx] = b;\n                }\n            }\n            skip /= 2;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif // DLIB_BIGINT_KERNEL_2_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bigint/bigint_kernel_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIGINT_KERNEl_2_\n#define DLIB_BIGINT_KERNEl_2_\n\n#include \"bigint_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../uintn.h\"\n#include <iosfwd>\n#include <cmath>\n#include <complex>\n#include <vector>\n\nnamespace dlib\n{\n    \n    using namespace dlib::relational_operators; // defined in algs.h\n\n    class bigint_kernel_2 \n    {\n        /*!\n            INITIAL VALUE\n                slack               == 25\n                data->number[0]     == 0 \n                data->size          == slack \n                data->references    == 1 \n                data->digits_used   == 1\n                \n\n            CONVENTION\n                slack  == the number of extra digits placed into the number when it is \n                    created.  the slack value should never be less than 1\n\n                data->number == pointer to an array of data->size uint16s.\n                    data represents a string of base 65535 numbers with data[0] being\n                    the least significant bit and data[data->digits_used-1] being the most \n                    significant\n\n\n                NOTE: In the comments I will consider a word to be a 16 bit value\n\n\n                data->digits_used == the number of significant digits in the number.\n                    data->digits_used tells us the number of used elements in the \n                    data->number array so everything beyond data->number[data->digits_used-1] \n                    is undefined\n\n                data->references == the number of bigint_kernel_2 objects which refer\n                    to this data_record\n        !*/\n\n\n        struct data_record\n        {\n\n\n            explicit data_record(\n                uint32 size_\n            ) : \n                size(size_),\n                number(new uint16[size_]),\n                references(1),\n                digits_used(1)\n            {*number = 0;}\n            /*!\n                ensures\n                    - initializes *this to represent zero\n            !*/\n\n            data_record(\n                const data_record& item,\n                uint32 additional_size\n            ) :\n                size(item.digits_used + additional_size),\n                number(new uint16[size]),\n                references(1),\n                digits_used(item.digits_used)\n            {\n                uint16* source = item.number;\n                uint16* dest = number;\n                uint16* end = source + digits_used;\n                while (source != end)\n                {\n                    *dest = *source;\n                    ++dest;\n                    ++source;\n                }\n            }\n            /*!\n                ensures\n                    - *this is a copy of item except with \n                      size == item.digits_used + additional_size\n            !*/\n\n            ~data_record(\n            )\n            {\n                delete [] number;\n            }\n\n\n            const uint32 size;\n            uint16* number;\n            uint32 references;            \n            uint32 digits_used;\n\n        private:\n            // no copy constructor\n            data_record ( data_record&);\n        };\n\n\n        // note that the second parameter is just there \n        // to resolve the ambiguity between this constructor and \n        // bigint_kernel_2(uint32)\n        explicit bigint_kernel_2 (\n            data_record* data_, int\n        ): slack(25),data(data_) {}\n        /*!\n            ensures\n                - *this is initialized with data_ as its data member\n        !*/\n\n    public:\n\n        bigint_kernel_2 (\n        );\n\n        bigint_kernel_2 (\n            uint32 value\n        );\n\n        bigint_kernel_2 (\n            const bigint_kernel_2& item\n        );\n\n        virtual ~bigint_kernel_2 (\n        );\n\n        const bigint_kernel_2 operator+ (\n            const bigint_kernel_2& rhs\n        ) const;\n\n        bigint_kernel_2& operator+= (\n            const bigint_kernel_2& rhs\n        );\n\n        const bigint_kernel_2 operator- (\n            const bigint_kernel_2& rhs\n        ) const;\n\n        bigint_kernel_2& operator-= (\n            const bigint_kernel_2& rhs\n        );\n\n        const bigint_kernel_2 operator* (\n            const bigint_kernel_2& rhs\n        ) const;\n\n        bigint_kernel_2& operator*= (\n            const bigint_kernel_2& rhs\n        );\n\n        const bigint_kernel_2 operator/ (\n            const bigint_kernel_2& rhs\n        ) const;\n\n        bigint_kernel_2& operator/= (\n            const bigint_kernel_2& rhs\n        );\n\n        const bigint_kernel_2 operator% (\n            const bigint_kernel_2& rhs\n        ) const;\n\n        bigint_kernel_2& operator%= (\n            const bigint_kernel_2& rhs\n        );\n\n        bool operator < (\n            const bigint_kernel_2& rhs\n        ) const;\n\n        bool operator == (\n            const bigint_kernel_2& rhs\n        ) const;\n\n        bigint_kernel_2& operator= (\n            const bigint_kernel_2& rhs\n        );\n\n        friend std::ostream& operator<< (\n            std::ostream& out,\n            const bigint_kernel_2& rhs\n        );\n\n        friend std::istream& operator>> (\n            std::istream& in,\n            bigint_kernel_2& rhs\n        );\n\n        bigint_kernel_2& operator++ (\n        );\n\n        const bigint_kernel_2 operator++ (\n            int\n        );\n\n        bigint_kernel_2& operator-- (\n        );\n\n        const bigint_kernel_2 operator-- (\n            int\n        );\n\n        friend const bigint_kernel_2 operator+ (\n            uint16 lhs,\n            const bigint_kernel_2& rhs\n        );\n\n        friend const bigint_kernel_2 operator+ (\n            const bigint_kernel_2& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_2& operator+= (\n            uint16 rhs\n        );\n\n        friend const bigint_kernel_2 operator- (\n            uint16 lhs,\n            const bigint_kernel_2& rhs\n        );\n\n        friend const bigint_kernel_2 operator- (\n            const bigint_kernel_2& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_2& operator-= (\n            uint16 rhs\n        );\n\n        friend const bigint_kernel_2 operator* (\n            uint16 lhs,\n            const bigint_kernel_2& rhs\n        );\n\n        friend const bigint_kernel_2 operator* (\n            const bigint_kernel_2& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_2& operator*= (\n            uint16 rhs\n        );\n\n        friend const bigint_kernel_2 operator/ (\n            uint16 lhs,\n            const bigint_kernel_2& rhs\n        );\n\n        friend const bigint_kernel_2 operator/ (\n            const bigint_kernel_2& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_2& operator/= (\n            uint16 rhs\n        );\n\n        friend const bigint_kernel_2 operator% (\n            uint16 lhs,\n            const bigint_kernel_2& rhs\n        );\n\n        friend const bigint_kernel_2 operator% (\n            const bigint_kernel_2& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_2& operator%= (\n            uint16 rhs\n        );\n\n        friend bool operator < (\n            uint16 lhs,\n            const bigint_kernel_2& rhs\n        );\n\n        friend bool operator < (\n            const bigint_kernel_2& lhs,\n            uint16 rhs\n        );\n\n        friend bool operator == (\n            const bigint_kernel_2& lhs,\n            uint16 rhs\n        );\n\n        friend bool operator == (\n            uint16 lhs,\n            const bigint_kernel_2& rhs\n        );\n\n        bigint_kernel_2& operator= (\n            uint16 rhs\n        );\n\n\n        void swap (\n            bigint_kernel_2& item\n        ) { data_record* temp = data; data = item.data; item.data = temp; }\n\n\n    private:\n\n        typedef double t;\n        typedef std::complex<t> ct;\n\n        void fft(\n            ct* data, \n            unsigned long len\n        ) const;\n        /*!\n            requires\n                - len == x^n for some integer n (i.e. len is a power of 2)\n                - len > 0\n            ensures\n                - #data == the FT decimation in frequency of data\n        !*/\n\n        void ifft(\n            ct* data, \n            unsigned long len\n        ) const;\n        /*!\n            requires\n                - len == x^n for some integer n (i.e. len is a power of 2)\n                - len > 0\n            ensures\n                - #data == the inverse decimation in frequency of data. \n                  (i.e. the inverse of what fft(data,len,-1) does to data)\n        !*/\n\n        void long_add (\n            const data_record* lhs,\n            const data_record* rhs,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - result->size >= max(lhs->digits_used,rhs->digits_used) + 1\n            ensures\n                - result == lhs + rhs\n        !*/\n\n        void long_sub (\n            const data_record* lhs,\n            const data_record* rhs,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - lhs >= rhs \n                - result->size >= lhs->digits_used\n            ensures\n                - result == lhs - rhs\n        !*/\n\n        void long_div (\n            const data_record* lhs,\n            const data_record* rhs,\n            data_record* result,\n            data_record* remainder\n        ) const;\n        /*!\n            requires \n                - rhs != 0 \n                - result->size >= lhs->digits_used \n                - remainder->size >= lhs->digits_used \n                - each parameter is unique (i.e. lhs != result, lhs != remainder, etc.)\n            ensures\n                - result == lhs / rhs\n                - remainder == lhs % rhs\n        !*/\n\n        void long_mul (\n            const data_record* lhs,\n            const data_record* rhs,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - result->size >= lhs->digits_used + rhs->digits_used \n                - result != lhs \n                - result != rhs\n            ensures\n                - result == lhs * rhs\n        !*/\n\n        void short_add (\n            const data_record* data,\n            uint16 value,\n            data_record* result            \n        ) const;\n        /*!\n            requires\n                - result->size >= data->size + 1\n            ensures\n                - result == data + value\n        !*/\n\n        void short_sub (\n            const data_record* data,\n            uint16 value,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - data >= value \n                - result->size >= data->digits_used\n            ensures\n                - result == data - value\n        !*/\n\n        void short_mul (\n            const data_record* data,\n            uint16 value,\n            data_record* result            \n        ) const;\n        /*!\n            requires\n                - result->size >= data->digits_used + 1\n            ensures\n                - result == data * value\n        !*/\n\n        void short_div (\n            const data_record* data,            \n            uint16 value,\n            data_record* result,\n            uint16& remainder\n        ) const;\n        /*!\n            requires\n                - value != 0 \n                - result->size >= data->digits_used\n            ensures\n                - result = data*value \n                - remainder = data%value\n        !*/\n\n        void shift_left (\n            const data_record* data,\n            data_record* result,\n            uint32 shift_amount\n        ) const;\n        /*!\n            requires\n                - result->size >= data->digits_used + shift_amount/8 + 1\n            ensures\n                - result == data << shift_amount\n        !*/\n\n        void shift_right (\n            const data_record* data,\n            data_record* result\n        ) const;\n        /*!\n            requires\n                - result->size >= data->digits_used \n            ensures\n                - result == data >> 1\n        !*/\n\n        bool is_less_than (\n            const data_record* lhs,\n            const data_record* rhs\n        ) const;\n        /*! \n            ensures\n                - returns true if lhs < rhs \n                - returns false otherwise\n        !*/ \n\n        bool is_equal_to (\n            const data_record* lhs,\n            const data_record* rhs\n        ) const;\n        /*!\n            ensures\n                - returns true if lhs == rhs \n                - returns false otherwise\n        !*/\n\n        void increment (\n            const data_record* source,\n            data_record* dest\n        ) const;\n        /*!\n            requires\n                - dest->size >= source->digits_used + 1\n            ensures\n                - dest = source + 1\n        !*/\n\n        void decrement (\n            const data_record* source,\n            data_record* dest\n        ) const;\n        /*!\n            requires\n                source != 0\n            ensuers\n                dest = source - 1\n        !*/\n\n        // member data\n        const uint32 slack;\n        data_record* data;     \n        \n        \n\n    };\n\n    inline void swap (\n        bigint_kernel_2& a,\n        bigint_kernel_2& b\n    ) { a.swap(b); }\n\n    inline void serialize (\n        const bigint_kernel_2& item, \n        std::ostream& out\n    )\n    { \n        std::ios::fmtflags oldflags = out.flags();  \n        out.flags(); \n        out << item << ' '; \n        out.flags(oldflags); \n        if (!out) throw serialization_error(\"Error serializing object of type bigint_kernel_c\"); \n    }   \n\n    inline void deserialize (\n        bigint_kernel_2& item, \n        std::istream& in\n    ) \n    { \n        std::ios::fmtflags oldflags = in.flags();  \n        in.flags(); \n        in >> item; in.flags(oldflags); \n        if (in.get() != ' ')\n        {\n            item = 0;\n            throw serialization_error(\"Error deserializing object of type bigint_kernel_c\"); \n        }\n    }   \n\n}\n\n#ifdef NO_MAKEFILE\n#include \"bigint_kernel_2.cpp\"\n#endif\n\n#endif // DLIB_BIGINT_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bigint/bigint_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BIGINT_KERNEl_ABSTRACT_\n#ifdef DLIB_BIGINT_KERNEl_ABSTRACT_\n\n#include <iosfwd>\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n    using namespace dlib::relational_operators; // defined in algs.h\n\n    class bigint \n    {\n        /*!\n            INITIAL VALUE\n                *this == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an arbitrary precision unsigned integer\n\n                the following operators are supported:\n                operator +\n                operator +=\n                operator -\n                operator -=\n                operator *\n                operator *=\n                operator /\n                operator /=\n                operator %\n                operator %=\n                operator ==\n                operator <\n                operator =\n                operator << (for writing to ostreams)\n                operator >> (for reading from istreams)\n                operator++       // pre increment\n                operator++(int)  // post increment\n                operator--       // pre decrement\n                operator--(int)  // post decrement\n\n\n                the other comparason operators(>, !=, <=, and >=) are \n                available and come from the templates in dlib::relational_operators\n\n            THREAD SAFETY\n                bigint may be reference counted so it is very unthread safe.\n                use with care in a multithreaded program\n\n        !*/\n\n    public:\n\n        bigint (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n                    if this is thrown the bigint will be unusable but \n                    will not leak memory\n        !*/\n\n        bigint (\n            uint32 value\n        );\n        /*!\n            requires\n                - value <= (2^32)-1\n            ensures\n                - #*this is properly initialized\n                - #*this == value\n            throws\n                - std::bad_alloc\n                    if this is thrown the bigint will be unusable but \n                    will not leak memory\n        !*/\n\n        bigint (\n            const bigint& item\n        );\n        /*!\n            ensures\n                - #*this is properly initialized \n                - #*this == value\n            throws\n                - std::bad_alloc\n                    if this is thrown the bigint will be unusable but \n                    will not leak memory\n        !*/\n\n        virtual ~bigint (\n        );\n        /*!\n            ensures\n                - all resources associated with #*this have been released\n        !*/\n\n        const bigint operator+ (\n            const bigint& rhs\n        ) const;\n        /*!\n            ensures\n                - returns the result of adding rhs to *this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator+= (\n            const bigint& rhs\n        );\n        /*!\n            ensures\n                - #*this == *this + rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect                                        \n        !*/\n\n        const bigint operator- (\n            const bigint& rhs\n        ) const;\n        /*!\n            requires\n                - *this >= rhs\n            ensures\n                - returns the result of subtracting rhs from *this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator-= (\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - *this >= rhs            \n            ensures\n                - #*this == *this - rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        const bigint operator* (\n            const bigint& rhs\n        ) const;\n        /*!\n            ensures\n                - returns the result of multiplying *this and rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator*= (\n            const bigint& rhs\n        );\n        /*!\n            ensures\n                - #*this == *this * rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        const bigint operator/ (\n            const bigint& rhs\n        ) const;\n        /*!\n            requires\n                - rhs != 0\n            ensures\n                - returns the result of dividing *this by rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator/= (\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - rhs != 0\n            ensures\n                - #*this == *this / rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        const bigint operator% (\n            const bigint& rhs\n        ) const;\n        /*!\n            requires\n                - rhs != 0\n            ensures\n                - returns the result of *this mod rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator%= (\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - rhs != 0\n            ensures\n                - #*this == *this % rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bool operator < (\n            const bigint& rhs\n        ) const;\n        /*!\n            ensures\n                - returns true if *this is less than rhs \n                - returns false otherwise\n        !*/\n\n        bool operator == (\n            const bigint& rhs\n        ) const;\n        /*!\n            ensures\n                - returns true if *this and rhs represent the same number \n                - returns false otherwise\n        !*/\n\n        bigint& operator= (\n            const bigint& rhs\n        );\n        /*!\n            ensures\n                - #*this == rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n\n        friend std::ostream& operator<< (\n            std::ostream& out,\n            const bigint& rhs\n        );\n        /*!\n            ensures\n                - the number in *this has been written to #out as a base ten number\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect (nothing\n                    is written to out)\n        !*/\n\n        friend std::istream& operator>> (\n            std::istream& in,\n            bigint& rhs\n        );\n        /*!\n            ensures\n                - reads a number from in and puts it into #*this \n                - if (there is no positive base ten number on the input stream ) then \n                    - #in.fail() == true\n            throws\n                - std::bad_alloc\n                    if this function throws the value in rhs is undefined and some\n                    characters may have been read from in.  rhs is still usable though,\n                    its value is just unknown.\n        !*/\n\n\n        bigint& operator++ (\n        );\n        /*!\n            ensures\n                - #*this == *this + 1 \n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        const bigint operator++ (\n            int\n        );\n        /*!\n            ensures\n                - #*this == *this + 1\n                - returns *this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator-- (\n        );\n        /*! \n            requires\n                - *this != 0\n            ensures\n                - #*this == *this - 1\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        const bigint operator-- (\n            int\n        );\n        /*!\n            requires\n                - *this != 0\n            ensures\n                - #*this == *this - 1\n                - returns *this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        void swap (\n            bigint& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n\n        // ------------------------------------------------------------------\n        // ----    The following functions are identical to the above   -----\n        // ----  but take uint16 as one of their arguments. They  ---\n        // ----  exist only to allow for a more efficient implementation  ---\n        // ------------------------------------------------------------------\n\n\n        friend const bigint operator+ (\n            uint16 lhs,\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - lhs <= 65535\n            ensures\n                - returns the result of adding rhs to lhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        friend const bigint operator+ (\n            const bigint& lhs,\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs <= 65535\n            ensures\n                - returns the result of adding rhs to lhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator+= (\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs <= 65535\n            ensures\n                - #*this == *this + rhs                \n                - returns #this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        friend const bigint operator- (\n            uint16 lhs,\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - lhs >= rhs \n                - lhs <= 65535\n            ensures\n                - returns the result of subtracting rhs from lhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        friend const bigint operator- (\n            const bigint& lhs,\n            uint16 rhs\n        );\n        /*!\n            requires\n                - lhs >= rhs \n                - rhs <= 65535\n            ensures\n                - returns the result of subtracting rhs from lhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator-= (\n            uint16 rhs\n        );\n        /*!\n            requires\n                - *this >= rhs \n                - rhs <= 65535\n            ensures\n                - #*this == *this - rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        friend const bigint operator* (\n            uint16 lhs,\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - lhs <= 65535\n            ensures\n                - returns the result of multiplying lhs and rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        friend const bigint operator* (\n            const bigint& lhs,\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs <= 65535\n            ensures\n                - returns the result of multiplying lhs and rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator*= (\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs <= 65535\n            ensures\n                - #*this == *this * rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        friend const bigint operator/ (\n            uint16 lhs,\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - rhs != 0 \n                - lhs <= 65535\n            ensures\n                - returns the result of dividing lhs by rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        friend const bigint operator/ (\n            const bigint& lhs,\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs != 0 \n                - rhs <= 65535\n            ensures\n                - returns the result of dividing lhs by rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator/= (\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs != 0 \n                - rhs <= 65535\n            ensures\n                - #*this == *this / rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        friend const bigint operator% (\n            uint16 lhs,\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - rhs != 0 \n                - lhs <= 65535\n            ensures\n                - returns the result of lhs mod rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        friend const bigint operator% (\n            const bigint& lhs,\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs != 0 \n                - rhs <= 65535\n            ensures\n                - returns the result of lhs mod rhs\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n        bigint& operator%= (\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs != 0 \n                - rhs <= 65535\n            ensures\n                - #*this == *this % rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n\n        friend bool operator < (\n            uint16 lhs,\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - lhs <= 65535\n            ensures\n                - returns true if lhs is less than rhs \n                - returns false otherwise\n        !*/\n\n        friend bool operator < (\n            const bigint& lhs,\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs <= 65535\n            ensures\n                - returns true if lhs is less than rhs \n                - returns false otherwise\n        !*/\n\n        friend bool operator == (\n            const bigint& lhs,\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs <= 65535\n            ensures\n                - returns true if lhs and rhs represent the same number \n                - returns false otherwise\n        !*/\n\n        friend bool operator == (\n            uint16 lhs,\n            const bigint& rhs\n        );\n        /*!\n            requires\n                - lhs <= 65535\n            ensures\n                - returns true if lhs and rhs represent the same number \n                - returns false otherwise\n        !*/\n\n        bigint& operator= (\n            uint16 rhs\n        );\n        /*!\n            requires\n                - rhs <= 65535\n            ensures\n                - #*this == rhs\n                - returns #*this\n            throws\n                - std::bad_alloc\n                    if this function throws then it has no effect\n        !*/\n\n    };   \n   \n    inline void swap (\n        bigint& a, \n        bigint& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    void serialize (\n        const bigint& item, \n        std::istream& in\n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        bigint& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n}\n\n#endif // DLIB_BIGINT_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bigint/bigint_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIGINT_KERNEl_C_\n#define DLIB_BIGINT_KERNEl_C_\n\n#include \"bigint_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    class bigint_kernel_c \n    {\n        bigint_base data;\n\n        explicit bigint_kernel_c (\n            const bigint_base& item\n        ) : data(item) {}\n\n    public:\n\n\n        bigint_kernel_c (\n        );\n\n        bigint_kernel_c (\n            uint32 value\n        );\n\n        bigint_kernel_c (\n            const bigint_kernel_c<bigint_base>& item\n        );\n\n        ~bigint_kernel_c (\n        );\n\n        const bigint_kernel_c<bigint_base> operator+ (\n            const bigint_kernel_c<bigint_base>& rhs\n        ) const;\n\n        bigint_kernel_c<bigint_base>& operator+= (\n            const bigint_kernel_c<bigint_base>& rhs\n        );\n\n        const bigint_kernel_c<bigint_base> operator- (\n            const bigint_kernel_c<bigint_base>& rhs\n        ) const;\n        bigint_kernel_c<bigint_base>& operator-= (\n            const bigint_kernel_c<bigint_base>& rhs\n        );\n\n        const bigint_kernel_c<bigint_base> operator* (\n            const bigint_kernel_c<bigint_base>& rhs\n        ) const;\n\n        bigint_kernel_c<bigint_base>& operator*= (\n            const bigint_kernel_c<bigint_base>& rhs\n        );\n\n        const bigint_kernel_c<bigint_base> operator/ (\n            const bigint_kernel_c<bigint_base>& rhs\n        ) const;\n\n        bigint_kernel_c<bigint_base>& operator/= (\n            const bigint_kernel_c<bigint_base>& rhs\n        );\n\n        const bigint_kernel_c<bigint_base> operator% (\n            const bigint_kernel_c<bigint_base>& rhs\n        ) const;\n\n        bigint_kernel_c<bigint_base>& operator%= (\n            const bigint_kernel_c<bigint_base>& rhs\n        );\n\n        bool operator < (\n            const bigint_kernel_c<bigint_base>& rhs\n        ) const;\n\n        bool operator == (\n            const bigint_kernel_c<bigint_base>& rhs\n        ) const;\n\n        bigint_kernel_c<bigint_base>& operator= (\n            const bigint_kernel_c<bigint_base>& rhs\n        );\n\n        template <typename T>\n        friend std::ostream& operator<< (\n            std::ostream& out,\n            const bigint_kernel_c<T>& rhs\n        );\n\n        template <typename T>\n        friend std::istream& operator>>  (\n            std::istream& in,\n            bigint_kernel_c<T>& rhs\n        );\n\n        bigint_kernel_c<bigint_base>& operator++ (\n        );\n\n        const bigint_kernel_c<bigint_base> operator++ (\n            int\n        );\n\n        bigint_kernel_c<bigint_base>& operator-- (\n        );\n\n        const bigint_kernel_c<bigint_base> operator-- (\n            int\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator+  (\n            uint16 lhs,\n            const bigint_kernel_c<T>& rhs\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator+  (\n            const bigint_kernel_c<T>& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_c<bigint_base>& operator+= (\n            uint16 rhs\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator-  (\n            uint16 lhs,\n            const bigint_kernel_c<T>& rhs\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator-  (\n            const bigint_kernel_c<T>& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_c<bigint_base>& operator-= (\n            uint16 rhs\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator*  (\n            uint16 lhs,\n            const bigint_kernel_c<T>& rhs\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator*  (\n            const bigint_kernel_c<T>& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_c<bigint_base>& operator*= (\n            uint16 rhs\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator/  (\n            uint16 lhs,\n            const bigint_kernel_c<T>& rhs\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator/  (\n            const bigint_kernel_c<T>& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_c<bigint_base>& operator/= (\n            uint16 rhs\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator%  (\n            uint16 lhs,\n            const bigint_kernel_c<T>& rhs\n        );\n\n        template <typename T>\n        friend const bigint_kernel_c<T> operator%  (\n            const bigint_kernel_c<T>& lhs,\n            uint16 rhs\n        );\n\n        bigint_kernel_c<bigint_base>& operator%= (\n            uint16 rhs\n        );\n\n        template <typename T>\n        friend bool operator <  (\n            uint16 lhs,\n            const bigint_kernel_c<T>& rhs\n        );\n\n        template <typename T>\n        friend bool operator <  (\n            const bigint_kernel_c<T>& lhs,\n            uint16 rhs\n        );\n\n        template <typename T>\n        friend bool operator ==  (\n            const bigint_kernel_c<T>& lhs,\n            uint16 rhs\n        );\n\n        template <typename T>\n        friend bool operator ==  (\n            uint16 lhs,\n            const bigint_kernel_c<T>& rhs\n        );\n\n        bigint_kernel_c<bigint_base>& operator= (\n            uint16 rhs\n        );\n\n\n        void swap (\n            bigint_kernel_c<bigint_base>& item\n        ) { data.swap(item.data); }\n\n    };\n\n    template <\n        typename bigint_base\n        >\n    void swap (\n        bigint_kernel_c<bigint_base>& a,\n        bigint_kernel_c<bigint_base>& b\n    ) { a.swap(b); }\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    inline void serialize (\n        const bigint_kernel_c<bigint_base>& item, \n        std::ostream& out\n    )\n    { \n        std::ios::fmtflags oldflags = out.flags();  \n        out.flags(); \n        out << item << ' '; \n        out.flags(oldflags); \n        if (!out) throw serialization_error(\"Error serializing object of type bigint_kernel_c\"); \n    }   \n\n    template <\n        typename bigint_base\n        >\n    inline void deserialize (\n        bigint_kernel_c<bigint_base>& item, \n        std::istream& in\n    ) \n    { \n        std::ios::fmtflags oldflags = in.flags();  \n        in.flags(); \n        in >> item; in.flags(oldflags); \n        if (in.get() != ' ') \n        {\n            item = 0;\n            throw serialization_error(\"Error deserializing object of type bigint_kernel_c\"); \n        }\n    }   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>::\n    bigint_kernel_c (\n    )\n    {}\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>::\n    bigint_kernel_c (\n        uint32 value\n    ) : \n        data(value)\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( value <= 0xFFFFFFFF ,\n            \"\\tbigint::bigint(uint16)\"\n            << \"\\n\\t value must be <= (2^32)-1\"\n            << \"\\n\\tthis:  \" << this\n            << \"\\n\\tvalue:   \" << value\n            );        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>::\n    bigint_kernel_c (\n        const bigint_kernel_c<bigint_base>& item\n    ) :\n        data(item.data)\n    {}\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>::\n    ~bigint_kernel_c (\n    )\n    {}\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> bigint_kernel_c<bigint_base>::\n    operator+ (\n        const bigint_kernel_c<bigint_base>& rhs\n    ) const\n    {\n        return bigint_kernel_c<bigint_base>(data + rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator+= (\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        data += rhs.data;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> bigint_kernel_c<bigint_base>::\n    operator- (\n        const bigint_kernel_c<bigint_base>& rhs\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(*this < rhs),\n            \"\\tconst bigint bigint::operator-(const bigint&)\"\n            << \"\\n\\t *this should not be less than rhs\"\n            << \"\\n\\tthis:  \" << this\n            << \"\\n\\t*this: \" << *this \n            << \"\\n\\trhs:   \" << rhs\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(data-rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator-= (\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(*this < rhs),\n            \"\\tbigint& bigint::operator-=(const bigint&)\"\n            << \"\\n\\t *this should not be less than rhs\"\n            << \"\\n\\tthis:  \" << this\n            << \"\\n\\t*this: \" << *this \n            << \"\\n\\trhs:   \" << rhs\n            );\n\n        // call the real function\n        data -= rhs.data;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> bigint_kernel_c<bigint_base>::\n    operator* (\n        const bigint_kernel_c<bigint_base>& rhs\n    ) const\n    {\n        return bigint_kernel_c<bigint_base>(data * rhs.data );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator*= (\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        data *= rhs.data;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> bigint_kernel_c<bigint_base>::\n    operator/ (\n        const bigint_kernel_c<bigint_base>& rhs\n    ) const\n    {\n        //make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0),\n            \"\\tconst bigint bigint::operator/(const bigint&)\"\n            << \"\\n\\t can't divide by zero\"\n            << \"\\n\\tthis:  \" << this\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(data/rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator/= (\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0),\n            \"\\tbigint& bigint::operator/=(const bigint&)\"\n            << \"\\n\\t can't divide by zero\"\n            << \"\\n\\tthis:  \" << this\n            );\n\n        // call the real function\n        data /= rhs.data;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> bigint_kernel_c<bigint_base>::\n    operator% (\n        const bigint_kernel_c<bigint_base>& rhs\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0),\n            \"\\tconst bigint bigint::operator%(const bigint&)\"\n            << \"\\n\\t can't divide by zero\"\n            << \"\\n\\tthis:  \" << this\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(data%rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator%= (\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0),\n            \"\\tbigint& bigint::operator%=(const bigint&)\"\n            << \"\\n\\t can't divide by zero\"\n            << \"\\n\\tthis:  \" << this\n            );\n\n        // call the real function\n        data %= rhs.data;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bool bigint_kernel_c<bigint_base>::\n    operator < (\n        const bigint_kernel_c<bigint_base>& rhs\n    ) const\n    {\n        return data < rhs.data;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bool bigint_kernel_c<bigint_base>::\n    operator == (\n        const bigint_kernel_c<bigint_base>& rhs\n    ) const\n    {\n        return data == rhs.data;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator= (\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        data = rhs.data;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    std::ostream& operator<< (\n        std::ostream& out,\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        out << rhs.data;\n        return out;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    std::istream& operator>> (\n        std::istream& in,\n        bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        in >> rhs.data;\n        return in;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator++ (\n    )\n    {\n        ++data;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> bigint_kernel_c<bigint_base>::\n    operator++ (\n        int\n    )\n    {\n        return bigint_kernel_c<bigint_base>(data++);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator-- (\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(*this == 0),\n            \"\\tbigint& bigint::operator--()\"\n            << \"\\n\\t *this to subtract from *this it must not be zero to begin with\"\n            << \"\\n\\tthis:  \" << this\n            );\n\n        // call the real function\n        --data;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> bigint_kernel_c<bigint_base>::\n    operator-- (\n        int\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(*this == 0),\n            \"\\tconst bigint bigint::operator--(int)\"\n            << \"\\n\\t *this to subtract from *this it must not be zero to begin with\"\n            << \"\\n\\tthis:  \" << this\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(data--);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator+ (\n        uint16 l,\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        uint32 lhs = l;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( lhs <= 65535,\n            \"\\tconst bigint operator+(uint16, const bigint&)\"\n            << \"\\n\\t lhs must be <= 65535\"\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        return bigint_kernel_c<bigint_base>(static_cast<uint16>(lhs)+rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator+ (\n        const bigint_kernel_c<bigint_base>& lhs,\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( rhs <= 65535,\n            \"\\tconst bigint operator+(const bigint&, uint16)\"\n            << \"\\n\\t rhs must be <= 65535\"\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        return bigint_kernel_c<bigint_base>(lhs.data+static_cast<uint16>(rhs));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator+= (\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( rhs <= 65535,\n            \"\\tbigint& bigint::operator+=(uint16)\"\n            << \"\\n\\t rhs must be <= 65535\"\n            << \"\\n\\tthis:  \" << this\n            << \"\\n\\t*this: \" << *this \n            << \"\\n\\trhs:   \" << rhs\n            );\n\n        data += rhs;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator- (\n        uint16 l,\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        uint32 lhs = l;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(static_cast<uint16>(lhs) < rhs) && lhs <= 65535,\n            \"\\tconst bigint operator-(uint16,const bigint&)\"\n            << \"\\n\\t lhs must be greater than or equal to rhs and lhs <= 65535\"\n            << \"\\n\\tlhs:   \" << lhs\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\t&lhs:  \" << &lhs\n            << \"\\n\\t&rhs:  \" << &rhs\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(static_cast<uint16>(lhs)-rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator- (\n        const bigint_kernel_c<bigint_base>& lhs,\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(lhs < static_cast<uint16>(rhs)) && rhs <= 65535,\n            \"\\tconst bigint operator-(const bigint&,uint16)\"\n            << \"\\n\\t lhs must be greater than or equal to rhs and rhs <= 65535\"\n            << \"\\n\\tlhs:   \" << lhs\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\t&lhs:  \" << &lhs\n            << \"\\n\\t&rhs:  \" << &rhs\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(lhs.data-static_cast<uint16>(rhs));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator-= (\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(*this < static_cast<uint16>(rhs)) && rhs <= 65535,\n            \"\\tbigint& bigint::operator-=(uint16)\"\n            << \"\\n\\t *this must not be less than rhs and rhs <= 65535\"\n            << \"\\n\\tthis:  \" << this\n            << \"\\n\\t*this: \" << *this\n            << \"\\n\\trhs:   \" << rhs\n            );\n\n        // call the real function\n        data -= static_cast<uint16>(rhs);\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator* (\n        uint16 l,\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        uint32 lhs = l;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( lhs <= 65535,\n            \"\\tconst bigint operator*(uint16, const bigint&)\"\n            << \"\\n\\t lhs must be <= 65535\"\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        return bigint_kernel_c<bigint_base>(lhs*rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator* (\n        const bigint_kernel_c<bigint_base>& lhs,\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( rhs <= 65535,\n            \"\\tconst bigint operator*(const bigint&, uint16)\"\n            << \"\\n\\t rhs must be <= 65535\"\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        return bigint_kernel_c<bigint_base>(lhs.data*rhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator*= (\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( rhs <= 65535,\n            \"\\t bigint bigint::operator*=(uint16)\"\n            << \"\\n\\t rhs must be <= 65535\"\n            << \"\\n\\tthis:  \" << this\n            << \"\\n\\t*this: \" << *this \n            << \"\\n\\trhs:   \" << rhs\n            );\n\n        data *= static_cast<uint16>(rhs);\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator/ (\n        uint16 l,\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        uint32 lhs = l;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0) && lhs <= 65535,\n            \"\\tconst bigint operator/(uint16,const bigint&)\"\n            << \"\\n\\t you can't divide by zero and lhs <= 65535\"\n            << \"\\n\\t&lhs:  \" << &lhs\n            << \"\\n\\t&rhs:  \" << &rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(lhs/rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator/ (\n        const bigint_kernel_c<bigint_base>& lhs,\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0) && rhs <= 65535,\n            \"\\tconst bigint operator/(const bigint&,uint16)\"\n            << \"\\n\\t you can't divide by zero and rhs <= 65535\"\n            << \"\\n\\t&lhs:  \" << &lhs\n            << \"\\n\\t&rhs:  \" << &rhs\n            << \"\\n\\trhs:   \" << rhs\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(lhs.data/static_cast<uint16>(rhs));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator/= (\n        uint16 rhs\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0) && static_cast<uint32>(rhs) <= 65535,\n            \"\\tbigint& bigint::operator/=(uint16)\"\n            << \"\\n\\t you can't divide by zero and rhs must be <= 65535\"\n            << \"\\n\\tthis:  \" << this\n            << \"\\n\\trhs:   \" << rhs\n            );\n\n        // call the real function\n        data /= rhs;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator% (\n        uint16 lhs,\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0) && static_cast<uint32>(lhs) <= 65535,\n            \"\\tconst bigint operator%(uint16,const bigint&)\"\n            << \"\\n\\t you can't divide by zero and lhs must be <= 65535\"\n            << \"\\n\\t&lhs:  \" << &lhs\n            << \"\\n\\t&rhs:  \" << &rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(lhs%rhs.data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    const bigint_kernel_c<bigint_base> operator% (\n        const bigint_kernel_c<bigint_base>& lhs,\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0) && rhs <= 65535,\n            \"\\tconst bigint operator%(const bigint&,uint16)\"\n            << \"\\n\\t you can't divide by zero and rhs must be <= 65535\"\n            << \"\\n\\t&lhs:  \" << &lhs\n            << \"\\n\\t&rhs:  \" << &rhs\n            << \"\\n\\trhs:   \" << rhs\n            );\n\n        // call the real function\n        return bigint_kernel_c<bigint_base>(lhs.data%static_cast<uint16>(rhs));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator%= (\n        uint16 r\n    )\n    {\n\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !(rhs == 0) && rhs <= 65535,\n            \"\\tbigint& bigint::operator%=(uint16)\"\n            << \"\\n\\t you can't divide by zero and rhs must be <= 65535\"\n            << \"\\n\\tthis:  \" << this\n            << \"\\n\\trhs:   \" << rhs\n            );\n\n        // call the real function\n        data %= rhs;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bool operator < (\n        uint16 l,\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        uint32 lhs = l;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( lhs <= 65535,\n            \"\\tbool operator<(uint16, const bigint&)\"\n            << \"\\n\\t lhs must be <= 65535\"\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        return static_cast<uint16>(lhs) < rhs.data;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bool operator < (\n        const bigint_kernel_c<bigint_base>& lhs,\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( rhs <= 65535,\n            \"\\tbool operator<(const bigint&, uint16)\"\n            << \"\\n\\t rhs must be <= 65535\"\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        return lhs.data < static_cast<uint16>(rhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bool operator == (\n        const bigint_kernel_c<bigint_base>& lhs,\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( rhs <= 65535,\n            \"\\tbool operator==(const bigint&, uint16)\"\n            << \"\\n\\t rhs must be <= 65535\"\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        return lhs.data == static_cast<uint16>(rhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bool operator == (\n        uint16 l,\n        const bigint_kernel_c<bigint_base>& rhs\n    )\n    {\n        uint32 lhs = l;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( lhs <= 65535,\n            \"\\tbool operator==(uint16, const bigint&)\"\n            << \"\\n\\t lhs must be <= 65535\"\n            << \"\\n\\trhs:   \" << rhs\n            << \"\\n\\tlhs:   \" << lhs\n            );\n\n        return static_cast<uint16>(lhs) == rhs.data;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bigint_base\n        >\n    bigint_kernel_c<bigint_base>& bigint_kernel_c<bigint_base>::\n    operator= (\n        uint16 r\n    )\n    {\n        uint32 rhs = r;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( rhs <= 65535,\n            \"\\tbigint bigint::operator=(uint16)\"\n            << \"\\n\\t rhs must be <= 65535\"\n            << \"\\n\\t*this:  \" << *this\n            << \"\\n\\tthis:   \" << this\n            << \"\\n\\tlhs:    \" << rhs\n            );\n\n        data = static_cast<uint16>(rhs);\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BIGINT_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bigint.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIGINt_\n#define DLIB_BIGINt_\n\n#include \"bigint/bigint_kernel_1.h\"\n#include \"bigint/bigint_kernel_2.h\"\n#include \"bigint/bigint_kernel_c.h\"\n\n\n\n\nnamespace dlib\n{\n\n\n    class bigint\n    {\n        bigint() {}\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     bigint_kernel_1\n                    kernel_1a;\n        typedef     bigint_kernel_c<kernel_1a>\n                    kernel_1a_c;\n          \n        // kernel_2a        \n        typedef     bigint_kernel_2\n                    kernel_2a;\n        typedef     bigint_kernel_c<kernel_2a>\n                    kernel_2a_c;\n          \n\n    };\n}\n\n#endif // DLIB_BIGINt_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/binary_search_tree/binary_search_tree_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINARY_SEARCH_TREE_KERNEl_1_\n#define DLIB_BINARY_SEARCH_TREE_KERNEl_1_\n\n#include \"binary_search_tree_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include <cstdlib>\n#include <functional>\n\nnamespace dlib \n{\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare = std::less<domain>\n        >\n    class binary_search_tree_kernel_1 : public enumerable<map_pair<domain,range> >,\n                                        public asc_pair_remover<domain,range,compare>\n    {\n\n        /*!\n            INITIAL VALUE\n                tree_size == 0\n                tree_root == 0\n                tree_height == 0\n                at_start_ == true\n                current_element == 0\n                stack == array of 50 node pointers\n                stack_pos == 0\n\n\n            CONVENTION\n                tree_size   == size()\n                tree_height == height()\n\n                stack[stack_pos-1] == pop()\n\n                current_element_valid() == (current_element != 0)\n                if (current_element_valid()) then\n                    element() == current_element->d and current_element->r\n                at_start_ == at_start()\n                if (current_element != 0 && current_element != tree_root) then\n                    stack[stack_pos-1] == the parent of the node pointed to by current_element\n\n                if (tree_size != 0)\n                    tree_root == pointer to the root node of the binary search tree\n                else\n                    tree_root == 0\n\n\n                for all nodes:\n                {\n                    left points to the left subtree or 0 if there is no left subtree and\n                    right points to the right subtree or 0 if there is no right subtree and\n                    all elements in a left subtree are <= the root and\n                    all elements in a right subtree are >= the root and\n                    d is the item in the domain of *this contained in the node\n                    r is the item in the range of *this contained in the node\n                    balance:\n                        balance == 0 if both subtrees have the same height\n                        balance == -1 if the left subtree has a height that is greater \n                                   than the height of the right subtree by 1\n                        balance == 1 if the right subtree has a height that is greater \n                                   than the height of the left subtree by 1\n                    for all trees:\n                        the height of the left and right subtrees differ by at most one\n                }\n\n        !*/\n    \n        class node\n        {\n        public:\n            node* left;\n            node* right;\n            domain d;\n            range r;\n            signed char balance;\n        };\n\n        class mpair : public map_pair<domain,range>\n        {\n        public:\n            const domain* d;\n            range* r;\n\n            const domain& key( \n            ) const { return *d; }\n\n            const range& value(\n            ) const { return *r; }\n\n            range& value(\n            ) { return *r; }\n        };\n\n   \n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef compare compare_type;\n            typedef mem_manager mem_manager_type;\n\n            binary_search_tree_kernel_1(\n            ) :\n                tree_size(0),\n                tree_root(0),\n                current_element(0),\n                tree_height(0),\n                at_start_(true),\n                stack_pos(0),\n                stack(ppool.allocate_array(50))\n            {\n            }\n\n            virtual ~binary_search_tree_kernel_1(\n            ); \n    \n            inline void clear(\n            );\n\n            inline short height (\n            ) const;\n\n            inline unsigned long count (\n                const domain& item\n            ) const;\n\n            inline void add (\n                domain& d,\n                range& r\n            );\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n\n            void destroy (\n                const domain& item\n            );\n\n            inline const range* operator[] (\n                const domain& item\n            ) const;\n\n            inline range* operator[] (\n                const domain& item\n            );\n\n            inline void swap (\n                binary_search_tree_kernel_1& item\n            );\n\n            // function from the asc_pair_remover interface\n            void remove_any (\n                domain& d,\n                range& r\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            bool current_element_valid (\n            ) const;\n\n            const map_pair<domain,range>& element (\n            ) const;\n\n            map_pair<domain,range>& element (\n            );\n\n            bool move_next (\n            ) const;\n\n            void remove_last_in_order (\n                domain& d,\n                range& r\n            );\n\n            void remove_current_element (\n                domain& d,\n                range& r\n            );\n\n            void position_enumerator (\n                const domain& d\n            ) const;\n\n        private:\n\n\n            inline void rotate_left (\n                node*& t\n            );\n            /*!\n                requires\n                    - t->balance == 2 \n                    - t->right->balance == 0 or 1 \n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - #t is still a binary search tree \n                    - #t->balance is between 1 and -1 \n                    - #t now has a height smaller by 1 if #t->balance == 0\n            !*/\n\n            inline void rotate_right (\n                node*& t\n            );\n            /*!\n                requires\n                    - t->balance == -2 \n                    - t->left->balance == 0 or -1 \n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - #t is still a binary search tree \n                    - #t->balance is between 1 and -1 \n                    - #t now has a height smaller by 1 if #t->balance == 0\n\n            !*/\n\n            inline void double_rotate_right (\n                node*& t\n            );\n            /*!\n                requires\n                    - t->balance == -2 \n                    - t->left->balance == 1 \n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - #t is still a binary search tree \n                    - #t now has a balance of 0 \n                    - #t now has a height smaller by 1             \n            !*/\n\n            inline void double_rotate_left (\n                node*& t\n            );\n            /*!\n                requires\n                    - t->balance == 2 \n                    - t->right->balance == -1 \n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - #t is still a binary search tree \n                    - #t now has a balance of 0 \n                    - #t now has a height smaller by 1\n            !*/\n\n            bool remove_biggest_element_in_tree (\n                node*& t,\n                domain& d,\n                range& r\n            );\n            /*!\n                requires\n                    - t != 0  (i.e. there must be something in the tree to remove) \n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - the biggest node in t has been removed \n                    - the biggest node domain element in t has been put into #d \n                    - the biggest node range element in t has been put into #r\n                    - #t is still a binary search tree \n                    - returns false if the height of the tree has not changed \n                    - returns true if the height of the tree has shrunk by one\n            !*/\n\n            bool remove_least_element_in_tree (\n                node*& t,\n                domain& d,\n                range& r\n            );\n            /*!\n                requires\n                    - t != 0  (i.e. there must be something in the tree to remove) \n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - the least node in t has been removed \n                    - the least node domain element in t has been put into #d \n                    - the least node range element in t has been put into #r\n                    - #t is still a binary search tree \n                    - returns false if the height of the tree has not changed \n                    - returns true if the height of the tree has shrunk by one\n            !*/\n\n            bool add_to_tree (\n                node*& t,\n                domain& d,\n                range& r\n            );\n            /*!\n                requires\n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - the mapping (d --> r) has been added to #t \n                    - #d and #r have initial values for their types\n                    - #t is still a binary search tree \n                    - returns false if the height of the tree has not changed \n                    - returns true if the height of the tree has grown by one\n            !*/\n\n            bool remove_from_tree (\n                node*& t,\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n            /*!\n                requires\n                    - return_reference(t,d) != 0\n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - #d_copy is equivalent to d                                    \n                    - an element in t equivalent to d has been removed and swapped \n                      into #d_copy and its associated range object has been \n                      swapped into #r\n                    - #t is still a binary search tree                                     \n                    - returns false if the height of the tree has not changed \n                    - returns true if the height of the tree has shrunk by one\n            !*/\n\n            bool remove_from_tree (\n                node*& t,\n                const domain& item\n            );\n            /*!\n                requires\n                    - return_reference(t,item) != 0\n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - an element in t equivalent to item has been removed                      \n                    - #t is still a binary search tree                                     \n                    - returns false if the height of the tree has not changed \n                    - returns true if the height of the tree has shrunk by one\n            !*/\n\n            const range* return_reference (\n                const node* t,\n                const domain& d\n            ) const;\n            /*!\n                ensures\n                    - if (there is a domain element equivalent to d in t) then\n                        - returns a pointer to the element in the range equivalent to d\n                    - else\n                        - returns 0\n            !*/\n\n            range* return_reference (\n                node* t,\n                const domain& d\n            );\n            /*!\n                ensures\n                    - if (there is a domain element equivalent to d in t) then\n                        - returns a pointer to the element in the range equivalent to d\n                    - else\n                        - returns 0\n            !*/\n\n\n            inline bool keep_node_balanced (\n                node*& t\n            );\n            /*!\n                requires\n                    - t != 0 \n                    - t == reference to the pointer in t's parent node that points to t\n                ensures\n                    - if (t->balance is < 1 or > 1) then \n                        - keep_node_balanced() will ensure that #t->balance == 0, -1, or 1\n                    - #t is still a binary search tree\n                    - returns true if it made the tree one height shorter \n                    - returns false if it didn't change the height\n            !*/\n\n\n            unsigned long get_count (\n                const domain& item,\n                node* tree_root\n            ) const;\n            /*!\n                requires\n                    - tree_root == the root of a binary search tree or 0\n                ensures\n                    - if (tree_root == 0) then\n                        - returns 0\n                    - else\n                        - returns the number of elements in tree_root that are \n                          equivalent to item\n            !*/\n\n\n            void delete_tree (\n                node* t\n            );\n            /*!\n                requires\n                    - t != 0\n                ensures\n                    - deallocates the node pointed to by t and all of t's left and right children\n            !*/\n\n\n            void push (\n                node* n\n            ) const { stack[stack_pos] = n; ++stack_pos; }\n            /*!\n                ensures\n                    - pushes n onto the stack\n            !*/\n            \n\n            node* pop (\n            ) const { --stack_pos; return stack[stack_pos]; }\n            /*!\n                ensures\n                    - pops the top of the stack and returns it\n            !*/\n\n\n\n            bool fix_stack (\n                node* t,\n                unsigned char depth = 0\n            );\n            /*!\n                requires\n                    - current_element != 0\n                    - depth == 0\n                    - t == tree_root\n                ensures\n                    - makes the stack contain the correct set of parent pointers.\n                      also adjusts stack_pos so it is correct.\n                    - #t is still a binary search tree                                     \n            !*/\n\n            bool remove_current_element_from_tree (\n                node*& t,\n                domain& d,\n                range& r,\n                unsigned long cur_stack_pos = 1\n            ); \n            /*!\n                requires\n                    - t == tree_root\n                    - cur_stack_pos == 1\n                    - current_element != 0\n                ensures\n                    - removes the data in the node given by current_element and swaps it into \n                      #d and #r.  \n                    - #t is still a binary search tree                                     \n                    - the enumerator is advances on to the next element but its stack is \n                      potentially corrupted.  so you must call fix_stack(tree_root) to fix\n                      it.\n                    - returns false if the height of the tree has not changed \n                    - returns true if the height of the tree has shrunk by one\n            !*/\n\n\n            // data members\n\n            mutable mpair p;\n            unsigned long tree_size;            \n            node* tree_root;\n            mutable node* current_element;            \n            typename mem_manager::template rebind<node>::other pool;\n            typename mem_manager::template rebind<node*>::other ppool;\n            short tree_height;\n            mutable bool at_start_;\n            mutable unsigned char stack_pos;\n            mutable node** stack;\n            compare comp; \n\n            // restricted functions\n            binary_search_tree_kernel_1(binary_search_tree_kernel_1&);        \n            binary_search_tree_kernel_1& operator=(binary_search_tree_kernel_1&); \n\n\n    };\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    inline void swap (\n        binary_search_tree_kernel_1<domain,range,mem_manager,compare>& a, \n        binary_search_tree_kernel_1<domain,range,mem_manager,compare>& b \n    ) { a.swap(b); }\n\n\n\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void deserialize (\n        binary_search_tree_kernel_1<domain,range,mem_manager,compare>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            domain d;\n            range r;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(d,in);\n                deserialize(r,in);\n                item.add(d,r);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type binary_search_tree_kernel_1\"); \n        }\n    }\n\n\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    ~binary_search_tree_kernel_1 (\n    )\n    {\n        ppool.deallocate_array(stack);\n        if (tree_size != 0)\n        {\n            delete_tree(tree_root);\n        }        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    clear (\n    )\n    {\n        if (tree_size > 0)\n        {\n            delete_tree(tree_root);\n            tree_root = 0;\n            tree_size = 0;\n            tree_height = 0;\n        }\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    unsigned long binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    size (\n    ) const\n    {\n        return tree_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    short binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    height (\n    ) const\n    {\n        return tree_height;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    unsigned long binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    count (\n        const domain& item\n    ) const\n    {\n        return get_count(item,tree_root);        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    add (\n        domain& d,\n        range& r\n    ) \n    {\n        tree_height += add_to_tree(tree_root,d,r);\n        ++tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    remove (\n        const domain& d,\n        domain& d_copy,\n        range& r\n    ) \n    {\n        tree_height -= remove_from_tree(tree_root,d,d_copy,r);\n        --tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    destroy (\n        const domain& item\n    ) \n    {\n        tree_height -= remove_from_tree(tree_root,item);\n        --tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    remove_any (\n        domain& d,\n        range& r\n    ) \n    {\n        tree_height -= remove_least_element_in_tree(tree_root,d,r);\n        --tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    range* binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    operator[] (\n        const domain& item\n    ) \n    {\n        return return_reference(tree_root,item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    const range* binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    operator[] (\n        const domain& item\n    ) const\n    {\n        return return_reference(tree_root,item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    swap (\n        binary_search_tree_kernel_1<domain,range,mem_manager,compare>& item\n    ) \n    {\n        pool.swap(item.pool);\n        ppool.swap(item.ppool);\n        exchange(p,item.p);\n        exchange(stack,item.stack);\n        exchange(stack_pos,item.stack_pos);\n        exchange(comp,item.comp);\n        \n\n        node* tree_root_temp            = item.tree_root;\n        unsigned long tree_size_temp    = item.tree_size;\n        short tree_height_temp          = item.tree_height;\n        node* current_element_temp      = item.current_element;\n        bool at_start_temp              = item.at_start_;\n\n        item.tree_root   = tree_root;\n        item.tree_size   = tree_size;\n        item.tree_height = tree_height;\n        item.current_element = current_element;\n        item.at_start_   = at_start_;\n\n        tree_root   = tree_root_temp;\n        tree_size   = tree_size_temp;\n        tree_height = tree_height_temp;\n        current_element = current_element_temp;\n        at_start_   = at_start_temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    remove_last_in_order (\n        domain& d,\n        range& r\n    )\n    {\n        tree_height -= remove_biggest_element_in_tree(tree_root,d,r);\n        --tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    remove_current_element (\n        domain& d,\n        range& r\n    )\n    {\n        tree_height -= remove_current_element_from_tree(tree_root,d,r);\n        --tree_size;\n\n        // fix the enumerator stack if we need to\n        if (current_element)\n            fix_stack(tree_root);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    position_enumerator (\n        const domain& d\n    ) const\n    {\n        // clear the enumerator state and make sure the stack is empty\n        reset();\n        at_start_ = false;\n        node* t = tree_root;\n        bool went_left = false;\n        while (t != 0)\n        {\n            if ( comp(d , t->d) )\n            {\n                push(t);\n                // if item is on the left then look in left\n                t = t->left;\n                went_left = true;\n            }\n            else if (comp(t->d , d))\n            {\n                push(t);\n                // if item is on the right then look in right\n                t = t->right;\n                went_left = false;\n            }\n            else\n            {\n                current_element = t;\n                return;\n            }\n        }\n\n        // if we didn't find any matches but there might be something after the\n        // d in this tree.\n        if (stack_pos > 0)\n        {\n            current_element = pop();\n            // if we went left from this node then this node is the next\n            // biggest.\n            if (went_left)\n            {\n                return;\n            }\n            else\n            {\n                move_next();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    at_start (\n    ) const\n    {\n        return at_start_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    reset (\n    ) const\n    {\n        at_start_ = true;\n        current_element = 0;\n        stack_pos = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    current_element_valid (\n    ) const\n    {\n        return (current_element != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    const map_pair<domain,range>& binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    element (\n    ) const\n    {\n        p.d = &(current_element->d);\n        p.r = &(current_element->r);\n        return p;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    map_pair<domain,range>& binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    element (\n    )\n    {\n        p.d = &(current_element->d);\n        p.r = &(current_element->r);\n        return p;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    move_next (\n    ) const\n    {\n        // if we haven't started iterating yet\n        if (at_start_)\n        {\n            at_start_ = false;\n            if (tree_size == 0)\n            {\n                return false;\n            }\n            else\n            {                    \n                // find the first element in the tree\n                current_element = tree_root;\n                node* temp = current_element->left;\n                while (temp != 0)\n                {\n                    push(current_element);\n                    current_element = temp;\n                    temp = current_element->left;\n                }\n                return true;\n            }\n        }\n        else\n        {\n            if (current_element == 0)\n            {\n                return false;\n            }\n            else\n            {\n                node* temp;\n                bool went_up;  // true if we went up the tree from a child node to parent\n                bool from_left = false; // true if we went up and were coming from a left child node\n                // find the next element in the tree\n                if (current_element->right != 0)\n                {\n                    // go right and down    \n                    temp = current_element;\n                    push(current_element);\n                    current_element = temp->right;\n                    went_up = false;\n                }\n                else\n                {\n                    // go up to the parent if we can\n                    if (current_element == tree_root)\n                    {\n                        // in this case we have iterated over all the element of the tree\n                        current_element = 0;\n                        return false;\n                    }\n                    went_up = true;\n                    node* parent = pop();\n\n\n                    from_left = (parent->left == current_element);\n                    // go up to parent\n                    current_element = parent;\n                }\n\n\n                while (true)\n                {\n                    if (went_up)\n                    {\n                        if (from_left)\n                        {\n                            // in this case we have found the next node\n                            break;\n                        }\n                        else\n                        {\n                            if (current_element == tree_root)\n                            {\n                                // in this case we have iterated over all the elements\n                                // in the tree\n                                current_element = 0;\n                                return false;\n                            }\n                            // we should go up\n                            node* parent = pop();\n                            from_left = (parent->left == current_element);                            \n                            current_element = parent;\n                        }\n                    }\n                    else\n                    {\n                        // we just went down to a child node\n                        if (current_element->left != 0)\n                        {\n                            // go left\n                            went_up = false;\n                            temp = current_element;\n                            push(current_element);\n                            current_element = temp->left;\n                        }\n                        else\n                        {\n                            // if there is no left child then we have found the next node\n                            break;\n                        }\n                    }\n                }\n\n                return true;               \n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    delete_tree (\n        node* t\n    ) \n    {\n        if (t->left != 0)\n            delete_tree(t->left);\n        if (t->right != 0)\n            delete_tree(t->right);\n        pool.deallocate(t);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    rotate_left (\n        node*& t\n    ) \n    {\n\n        // set the new balance numbers\n        if (t->right->balance == 1)\n        {\n            t->balance = 0;\n            t->right->balance = 0;\n        }\n        else\n        {\n            t->balance = 1;\n            t->right->balance = -1;            \n        }\n\n        // perform the rotation\n        node* temp = t->right;\n        t->right = temp->left;\n        temp->left = t;\n        t = temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    rotate_right (\n        node*& t\n    ) \n    {\n        // set the new balance numbers\n        if (t->left->balance == -1)\n        {\n            t->balance = 0;\n            t->left->balance = 0;\n        }\n        else\n        {\n            t->balance = -1;\n            t->left->balance = 1;            \n        }\n\n        // preform the rotation\n        node* temp = t->left;\n        t->left = temp->right;\n        temp->right = t;\n        t = temp;    \n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    double_rotate_right (\n        node*& t\n    )\n    {\n\n        node* temp = t;\n        t = t->left->right;\n        \n        temp->left->right = t->left;\n        t->left = temp->left;\n\n        temp->left = t->right;\n        t->right = temp;\n\n        if (t->balance < 0)\n        {  \n            t->left->balance = 0;\n            t->right->balance = 1;\n        }\n        else if (t->balance > 0)\n        {\n            t->left->balance = -1;\n            t->right->balance = 0;\n        }\n        else \n        {\n            t->left->balance = 0;\n            t->right->balance = 0;\n        }\n        t->balance = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    double_rotate_left (\n        node*& t\n    )\n    {\n        node* temp = t;\n        t = t->right->left;\n        \n        temp->right->left = t->right;\n        t->right = temp->right;\n\n        temp->right = t->left;\n        t->left = temp;\n\n        if (t->balance < 0)\n        {  \n            t->left->balance = 0;\n            t->right->balance = 1;\n        }\n        else if (t->balance > 0)\n        {\n            t->left->balance = -1;\n            t->right->balance = 0;\n        }\n        else \n        {\n            t->left->balance = 0;\n            t->right->balance = 0;\n        }\n\n        t->balance = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    remove_biggest_element_in_tree (\n        node*& t,\n        domain& d,\n        range& r\n    ) \n    {\n        // make a reference to the current node so we don't have to dereference a \n        // pointer a bunch of times\n        node& tree = *t;\n\n        // if the right tree is an empty tree\n        if ( tree.right == 0)\n        {\n            // swap nodes domain and range elements into d and r\n            exchange(d,tree.d);\n            exchange(r,tree.r);\n\n            // plug hole left by removing this node\n            t = tree.left;\n\n            // delete the node that was just removed\n            pool.deallocate(&tree);    \n\n            // return that the height of this part of the tree has decreased\n            return true;\n        }\n        else\n        {\n\n            // keep going right\n\n            // if remove made the tree one height shorter\n            if ( remove_biggest_element_in_tree(tree.right,d,r) ) \n            {\n                // if this caused the current tree to strink then report that\n                if ( tree.balance == 1)\n                {\n                    --tree.balance;\n                    return true;\n                }\n                else\n                {\n                    --tree.balance;\n                    return keep_node_balanced(t);\n                }                \n            }\n\n            return false;            \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    remove_least_element_in_tree (\n        node*& t,\n        domain& d,\n        range& r\n    ) \n    {\n        // make a reference to the current node so we don't have to dereference a \n        // pointer a bunch of times\n        node& tree = *t;\n\n        // if the left tree is an empty tree\n        if ( tree.left == 0)\n        {\n            // swap nodes domain and range elements into d and r\n            exchange(d,tree.d);\n            exchange(r,tree.r);\n\n            // plug hole left by removing this node\n            t = tree.right;\n\n            // delete the node that was just removed\n            pool.deallocate(&tree);    \n\n            // return that the height of this part of the tree has decreased\n            return true;\n        }\n        else\n        {\n\n            // keep going left\n\n            // if remove made the tree one height shorter\n            if ( remove_least_element_in_tree(tree.left,d,r) ) \n            {\n                // if this caused the current tree to strink then report that\n                if ( tree.balance == -1)\n                {\n                    ++tree.balance;\n                    return true;\n                }\n                else\n                {\n                    ++tree.balance;\n                    return keep_node_balanced(t);\n                }                \n            }\n\n            return false;            \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    add_to_tree (\n        node*& t,\n        domain& d,\n        range& r\n    ) \n    {\n\n        // if found place to add\n        if (t == 0)\n        {\n            // create a node to add new item into\n            t = pool.allocate(); \n\n            // make a reference to the current node so we don't have to dereference a \n            // pointer a bunch of times\n            node& tree = *t;\n\n\n            // set left and right pointers to NULL to indicate that there are no \n            // left or right subtrees\n            tree.left = 0;\n            tree.right = 0;\n            tree.balance = 0;\n\n            // put d and r into t\n            exchange(tree.d,d);\n            exchange(tree.r,r);\n\n            // indicate that the height of this tree has increased\n            return true;\n        }\n        else  // keep looking for a place to add the new item\n        {\n            // make a reference to the current node so we don't have to dereference \n            // a pointer a bunch of times\n            node& tree = *t;\n            signed char old_balance = tree.balance;\n\n            // add the new item to whatever subtree it should go into\n            if (comp( d , tree.d) )\n                tree.balance -= add_to_tree(tree.left,d,r);\n            else\n                tree.balance += add_to_tree(tree.right,d,r);\n\n\n            // if the tree was balanced to start with\n            if (old_balance == 0)\n            {\n                // if its not balanced anymore then it grew in height\n                if (tree.balance != 0)\n                    return true;\n                else\n                    return false;\n            }\n            else\n            {\n                // if the tree is now balanced then it didn't grow\n                if (tree.balance == 0)\n                {\n                    return false;\n                }\n                else\n                {\n                    // if the tree needs to be balanced\n                    if (tree.balance != old_balance)\n                    {\n                        return !keep_node_balanced(t);\n                    }\n                    // if there has been no change in the heights\n                    else\n                    {\n                        return false;\n                    }\n                }\n            }\n        }\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    fix_stack (\n        node* t,\n        unsigned char depth \n    ) \n    {\n        // if we found the node we were looking for\n        if (t == current_element)\n        {\n            stack_pos = depth;\n            return true;\n        }\n        else if (t == 0)\n        {\n            return false;\n        }\n\n        if (!( comp(t->d , current_element->d)))\n        {\n            // go left\n            if (fix_stack(t->left,depth+1))\n            {\n                stack[depth] = t;\n                return true;\n            }            \n        }\n        if (!(comp(current_element->d , t->d)))\n        {\n            // go right\n            if (fix_stack(t->right,depth+1))\n            {\n                stack[depth] = t;\n                return true;\n            }            \n        }\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    remove_current_element_from_tree (\n        node*& t,\n        domain& d,\n        range& r,\n        unsigned long cur_stack_pos \n    ) \n    {\n        // make a reference to the current node so we don't have to dereference \n        // a pointer a bunch of times\n        node& tree = *t;\n\n        // if we found the node we were looking for\n        if (t == current_element)\n        {\n\n            // swap nodes domain and range elements into d_copy and r\n            exchange(d,tree.d);\n            exchange(r,tree.r);\n\n            // if there is no left node\n            if (tree.left == 0)\n            {\n                // move the enumerator on to the next element before we mess with the \n                // tree\n                move_next();\n\n                // plug hole left by removing this node and free memory\n                t = tree.right;  // plug hole with right subtree\n                \n                // delete old node\n                pool.deallocate(&tree);  \n\n                // indicate that the height has changed\n                return true;\n            }\n            // if there is no right node\n            else if (tree.right == 0)\n            {\n                // move the enumerator on to the next element before we mess with the \n                // tree\n                move_next();\n\n                // plug hole left by removing this node and free memory\n                t = tree.left;  // plug hole with left subtree\n\n                // delete old node\n                pool.deallocate(&tree);  \n\n                // indicate that the height of this tree has changed\n                return true;\n            }\n            // if there are both a left and right sub node\n            else\n            {\n\n                // in this case the next current element is going to get swapped back\n                // into this t node.\n                current_element = t;\n\n                // get an element that can replace the one being removed and do this \n                // if it made the right subtree shrink by one\n                if (remove_least_element_in_tree(tree.right,tree.d,tree.r))\n                {\n                    // adjust the tree height\n                    --tree.balance;\n\n                    // if the height of the current tree has dropped by one\n                    if (tree.balance == 0)\n                    {\n                        return true;\n                    }\n                    else\n                    {\n                        return keep_node_balanced(t);\n                    }\n                }\n                // else this remove did not effect the height of this tree\n                else\n                {\n                    return false;\n                }\n\n            }\n\n        }\n        else if (  (cur_stack_pos < stack_pos && stack[cur_stack_pos] == tree.left) || \n                    tree.left == current_element )\n        {\n            // go left\n            if (tree.balance == -1)\n            {\n                int balance = tree.balance;\n                balance += remove_current_element_from_tree(tree.left,d,r,cur_stack_pos+1);\n                tree.balance = balance;\n                return !tree.balance;\n            }\n            else\n            {\n                int balance = tree.balance;\n                balance += remove_current_element_from_tree(tree.left,d,r,cur_stack_pos+1);\n                tree.balance = balance;\n                return keep_node_balanced(t);\n            }\n        }\n        else if (  (cur_stack_pos < stack_pos && stack[cur_stack_pos] == tree.right) || \n                    tree.right == current_element )\n        {\n            // go right\n            if (tree.balance == 1)\n            {\n                int balance = tree.balance;\n                balance -= remove_current_element_from_tree(tree.right,d,r,cur_stack_pos+1);\n                tree.balance = balance;\n                return !tree.balance;\n            }\n            else\n            {\n                int balance = tree.balance;\n                balance -= remove_current_element_from_tree(tree.right,d,r,cur_stack_pos+1);\n                tree.balance = balance;\n                return keep_node_balanced(t);\n            }\n        }\n        \n        // this return should never happen but do it anyway to suppress compiler warnings\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    remove_from_tree (\n        node*& t,\n        const domain& d,\n        domain& d_copy,\n        range& r\n    ) \n    {\n        // make a reference to the current node so we don't have to dereference \n        // a pointer a bunch of times\n        node& tree = *t;\n\n        // if item is on the left\n        if (comp(d , tree.d))\n        {\n            // if the left side of the tree has the greatest height\n            if (tree.balance == -1)\n            {\n                int balance = tree.balance;\n                balance += remove_from_tree(tree.left,d,d_copy,r);\n                tree.balance = balance;\n                return !tree.balance;\n            }\n            else\n            {\n                int balance = tree.balance;\n                balance += remove_from_tree(tree.left,d,d_copy,r);\n                tree.balance = balance;\n                return keep_node_balanced(t);\n            }\n             \n        }\n        // if item is on the right\n        else if (comp(tree.d , d))\n        {\n\n            // if the right side of the tree has the greatest height\n            if (tree.balance == 1)\n            {\n                int balance = tree.balance;\n                balance -= remove_from_tree(tree.right,d,d_copy,r);\n                tree.balance = balance;\n                return !tree.balance;\n            }\n            else\n            {\n                int balance = tree.balance;\n                balance -= remove_from_tree(tree.right,d,d_copy,r);\n                tree.balance = balance;\n                return keep_node_balanced(t);\n            }\n        }\n        // if item is found\n        else \n        {\n\n            // swap nodes domain and range elements into d_copy and r\n            exchange(d_copy,tree.d);\n            exchange(r,tree.r);\n\n            // if there is no left node\n            if (tree.left == 0)\n            {\n\n                // plug hole left by removing this node and free memory\n                t = tree.right;  // plug hole with right subtree\n                \n                // delete old node\n                pool.deallocate(&tree);  \n\n                // indicate that the height has changed\n                return true;\n            }\n            // if there is no right node\n            else if (tree.right == 0)\n            {\n\n                // plug hole left by removing this node and free memory\n                t = tree.left;  // plug hole with left subtree\n\n                // delete old node\n                pool.deallocate(&tree);  \n\n                // indicate that the height of this tree has changed\n                return true;\n            }\n            // if there are both a left and right sub node\n            else\n            {\n\n                // get an element that can replace the one being removed and do this \n                // if it made the right subtree shrink by one\n                if (remove_least_element_in_tree(tree.right,tree.d,tree.r))\n                {\n                    // adjust the tree height\n                    --tree.balance;\n\n                    // if the height of the current tree has dropped by one\n                    if (tree.balance == 0)\n                    {\n                        return true;\n                    }\n                    else\n                    {\n                        return keep_node_balanced(t);\n                    }\n                }\n                // else this remove did not effect the height of this tree\n                else\n                {\n                    return false;\n                }\n\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    remove_from_tree (\n        node*& t,\n        const domain& d\n    ) \n    {\n        // make a reference to the current node so we don't have to dereference \n        // a pointer a bunch of times\n        node& tree = *t;\n\n        // if item is on the left\n        if (comp(d , tree.d))\n        {\n            // if the left side of the tree has the greatest height\n            if (tree.balance == -1)\n            {\n                int balance = tree.balance;\n                balance += remove_from_tree(tree.left,d);\n                tree.balance = balance;\n                return !tree.balance;\n            }\n            else\n            {\n                int balance = tree.balance;\n                balance += remove_from_tree(tree.left,d);\n                tree.balance = balance;\n                return keep_node_balanced(t);\n            }\n             \n        }\n        // if item is on the right\n        else if (comp(tree.d , d))\n        {\n\n            // if the right side of the tree has the greatest height\n            if (tree.balance == 1)\n            {\n                int balance = tree.balance;\n                balance -= remove_from_tree(tree.right,d);\n                tree.balance = balance;\n                return !tree.balance;\n            }\n            else\n            {\n                int balance = tree.balance;\n                balance -= remove_from_tree(tree.right,d);\n                tree.balance = balance;\n                return keep_node_balanced(t);\n            }\n        }\n        // if item is found\n        else \n        {\n\n            // if there is no left node\n            if (tree.left == 0)\n            {\n\n                // plug hole left by removing this node and free memory\n                t = tree.right;  // plug hole with right subtree\n                \n                // delete old node\n                pool.deallocate(&tree);  \n\n                // indicate that the height has changed\n                return true;\n            }\n            // if there is no right node\n            else if (tree.right == 0)\n            {\n\n                // plug hole left by removing this node and free memory\n                t = tree.left;  // plug hole with left subtree\n\n                // delete old node\n                pool.deallocate(&tree);  \n\n                // indicate that the height of this tree has changed\n                return true;\n            }\n            // if there are both a left and right sub node\n            else\n            {\n\n                // get an element that can replace the one being removed and do this \n                // if it made the right subtree shrink by one\n                if (remove_least_element_in_tree(tree.right,tree.d,tree.r))\n                {\n                    // adjust the tree height\n                    --tree.balance;\n\n                    // if the height of the current tree has dropped by one\n                    if (tree.balance == 0)\n                    {\n                        return true;\n                    }\n                    else\n                    {\n                        return keep_node_balanced(t);\n                    }\n                }\n                // else this remove did not effect the height of this tree\n                else\n                {\n                    return false;\n                }\n\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    range* binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    return_reference (\n        node* t,\n        const domain& d\n    ) \n    {\n        while (t != 0)\n        {\n\n            if ( comp(d , t->d ))\n            {\n                // if item is on the left then look in left\n                t = t->left;\n            }\n            else if (comp(t->d , d))\n            {\n                // if item is on the right then look in right\n                t = t->right;\n            }\n            else\n            {\n                // if it's found then return a reference to it\n                return &(t->r);\n            }\n        }\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    const range* binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    return_reference (\n        const node* t,\n        const domain& d\n    ) const\n    {\n        while (t != 0)\n        {\n\n            if ( comp(d , t->d) )\n            {\n                // if item is on the left then look in left\n                t = t->left;\n            }\n            else if (comp(t->d , d))\n            {\n                // if item is on the right then look in right\n                t = t->right;\n            }\n            else\n            {\n                // if it's found then return a reference to it\n                return &(t->r);\n            }\n        }\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    bool binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    keep_node_balanced (\n        node*& t\n    )\n    {\n        // make a reference to the current node so we don't have to dereference \n        // a pointer a bunch of times\n        node& tree = *t;\n \n        // if tree does not need to be balanced then return false\n        if (tree.balance == 0)\n            return false;\n\n\n        // if tree needs to be rotated left\n        if (tree.balance == 2)\n        {\n            if (tree.right->balance >= 0)\n                rotate_left(t);\n            else\n                double_rotate_left(t);\n        }\n        // else if the tree needs to be rotated right\n        else if (tree.balance == -2)\n        {\n            if (tree.left->balance <= 0)\n                rotate_right(t);\n            else\n                double_rotate_right(t);\n        }\n   \n\n        if (t->balance == 0)\n            return true;\n        else\n            return false; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    unsigned long binary_search_tree_kernel_1<domain,range,mem_manager,compare>::\n    get_count (\n        const domain& d,\n        node* tree_root\n    ) const\n    {\n        if (tree_root != 0)\n        {\n            if (comp(d , tree_root->d))\n            {\n                // go left\n                return get_count(d,tree_root->left);                \n            }\n            else if (comp(tree_root->d , d))\n            {\n                // go right\n                return get_count(d,tree_root->right);\n            }\n            else\n            {\n                // go left and right to look for more matches\n                return   get_count(d,tree_root->left) \n                       + get_count(d,tree_root->right) \n                       + 1;\n            }\n        }\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BINARY_SEARCH_TREE_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/binary_search_tree/binary_search_tree_kernel_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINARY_SEARCH_TREE_KERNEl_2_\n#define DLIB_BINARY_SEARCH_TREE_KERNEl_2_\n\n#include \"binary_search_tree_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include <functional>\n\nnamespace dlib \n{\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare = std::less<domain>\n        >\n    class binary_search_tree_kernel_2 : public enumerable<map_pair<domain,range> >,\n                                        public asc_pair_remover<domain,range,compare>\n    {\n\n        /*!\n            INITIAL VALUE\n                NIL == pointer to a node that represents a leaf\n                tree_size == 0\n                tree_root == NIL     \n                at_start == true\n                current_element == 0\n\n\n            CONVENTION\n                current_element_valid() == (current_element != 0)\n                if (current_element_valid()) then\n                    element() == current_element->d and current_element->r\n                at_start_ == at_start()\n\n\n                tree_size   == size()\n\n                NIL == pointer to a node that represents a leaf\n\n                if (tree_size != 0)\n                    tree_root == pointer to the root node of the binary search tree\n                else\n                    tree_root == NIL\n\n                tree_root->color == black                    \n                Every leaf is black and all leafs are the NIL node.\n                The number of black nodes in any path from the root to a leaf is the \n                same. \n\n                for all nodes:\n                {\n                    - left points to the left subtree or NIL if there is no left subtree  \n                    - right points to the right subtree or NIL if there is no right \n                      subtree                                                             \n                    - parent points to the parent node or NIL if the node is the root     \n                    - ordering of nodes is determined by comparing each node's d member  \n                    - all elements in a left subtree are <= the node                      \n                    - all elements in a right subtree are >= the node                     \n                    - color == red or black                                               \n                    - if (color == red)                                                   \n                        - the node's children are black\n                }\n\n        !*/\n    \n        class node\n        {\n        public:            \n            node* left;\n            node* right;\n            node* parent;\n            domain d;\n            range r;\n            char color;\n        };\n\n        class mpair : public map_pair<domain,range>\n        {\n        public:\n            const domain* d;\n            range* r;\n\n            const domain& key( \n            ) const { return *d; }\n\n            const range& value(\n            ) const { return *r; }\n\n            range& value(\n            ) { return *r; }\n        };\n        \n     \n        const static char red = 0;\n        const static char black = 1;\n\n\n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef compare compare_type;\n            typedef mem_manager mem_manager_type;\n\n            binary_search_tree_kernel_2(\n            ) :\n                NIL(pool.allocate()),\n                tree_size(0),\n                tree_root(NIL),\n                current_element(0),\n                at_start_(true)\n            {\n                NIL->color = black;\n                NIL->left = 0;\n                NIL->right = 0;\n                NIL->parent = 0;\n            }\n\n            virtual ~binary_search_tree_kernel_2(\n            ); \n    \n            inline void clear(\n            );\n\n            inline short height (\n            ) const;\n\n            inline unsigned long count (\n                const domain& d\n            ) const;\n\n            inline void add (\n                domain& d,\n                range& r\n            );\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n\n            void destroy (\n                const domain& d\n            );\n\n            void remove_any (\n                domain& d,\n                range& r\n            );\n\n            inline const range* operator[] (\n                const domain& item\n            ) const;\n\n            inline range* operator[] (\n                const domain& item\n            );\n\n            inline void swap (\n                binary_search_tree_kernel_2& item\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            bool current_element_valid (\n            ) const;\n\n            const map_pair<domain,range>& element (\n            ) const;\n\n            map_pair<domain,range>& element (\n            );\n\n            bool move_next (\n            ) const;\n\n            void remove_last_in_order (\n                domain& d,\n                range& r\n            );\n\n            void remove_current_element (\n                domain& d,\n                range& r\n            );\n\n            void position_enumerator (\n                const domain& d\n            ) const;\n\n        private:\n\n            inline void rotate_left (\n                node* t\n            );\n            /*!\n                requires\n                    - t != NIL \n                    - t->right != NIL\n                ensures\n                    - performs a left rotation around t and its right child\n            !*/\n\n            inline void rotate_right (\n                node* t\n            );\n            /*!\n                requires\n                    - t != NIL \n                    - t->left != NIL\n                ensures\n                    - performs a right rotation around t and its left child\n            !*/\n\n            inline void double_rotate_right (\n                node* t\n            );\n            /*!\n                requires\n                    - t != NIL \n                    - t->left != NIL \n                    - t->left->right != NIL \n                    - double_rotate_right() is only called in fix_after_add()\n                ensures\n                    - performs a left rotation around t->left \n                    - then performs a right rotation around t\n            !*/\n\n            inline void double_rotate_left (\n                node* t\n            );\n            /*!\n                requires\n                    - t != NIL \n                    - t->right != NIL \n                    - t->right->left != NIL \n                    - double_rotate_left() is only called in fix_after_add()\n                ensures\n                    - performs a right rotation around t->right \n                    - then performs a left rotation around t\n            !*/\n\n            void remove_biggest_element_in_tree (\n                node* t,\n                domain& d,\n                range& r\n            );\n            /*!\n                requires\n                    - t != NIL  (i.e. there must be something in the tree to remove)\n                ensures\n                    - the biggest node in t has been removed \n                    - the biggest node element in t has been put into #d and #r \n                    - #t is still a binary search tree \n            !*/\n\n            bool remove_least_element_in_tree (\n                node* t,\n                domain& d,\n                range& r\n            );\n            /*!\n                requires\n                    - t != NIL  (i.e. there must be something in the tree to remove)\n                ensures\n                    - the least node in t has been removed \n                    - the least node element in t has been put into #d and #r \n                    - #t is still a binary search tree \n                    - if (the node that was removed was the one pointed to by current_element) then\n                        - returns true\n                    - else\n                        - returns false\n            !*/\n\n            void add_to_tree (\n                node* t,\n                domain& d,\n                range& r\n            );\n            /*!\n                requires\n                    - t != NIL\n                ensures\n                    - d and r are now in #t\n                    - there is a mapping from d to r in #t\n                    - #d and #r have initial values for their types\n                    - #t is still a binary search tree \n            !*/\n\n            void remove_from_tree (\n                node* t,\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n            /*!\n                requires\n                    - return_reference(t,d) != 0\n                ensures\n                    - #d_copy is equivalent to d                                     \n                    - the first element in t equivalent to d that is encountered when searching down the tree\n                      from t has been removed and swapped into #d_copy.  Also, the associated range element \n                      has been removed and swapped into #r.\n                    - if (the node that got removed wasn't current_element) then\n                        - adjusts the current_element pointer if the data in the node that it points to gets moved.\n                    - else\n                        - the value of current_element is now invalid\n                    - #t is still a binary search tree \n            !*/\n\n            void remove_from_tree (\n                node* t,\n                const domain& d\n            );\n            /*!\n                requires\n                    - return_reference(t,d) != 0\n                ensures                                  \n                    - an element in t equivalent to d has been removed                \n                    - #t is still a binary search tree \n            !*/\n\n            const range* return_reference (\n                const node* t,\n                const domain& d\n            ) const;\n            /*!\n                ensures\n                    - if (there is a domain element equivalent to d in t) then\n                        - returns a pointer to the element in the range equivalent to d\n                    - else\n                        - returns 0\n            !*/\n\n            range* return_reference (\n                node* t,\n                const domain& d\n            );\n            /*!\n                ensures\n                    - if (there is a domain element equivalent to d in t) then\n                        - returns a pointer to the element in the range equivalent to d\n                    - else\n                        - returns 0\n            !*/\n\n            void fix_after_add (\n                node* t\n            );\n            /*!\n                requires\n                    - t == pointer to the node just added\n                    - t->color == red \n                    - t->parent != NIL (t must not be the root)\n                    - fix_after_add() is only called after a new node has been added\n                      to t\n                ensures\n                    - fixes any deviations from the CONVENTION caused by adding a node\n            !*/\n\n            void fix_after_remove (\n                node* t\n            );\n            /*!\n                requires\n                    - t == pointer to the only child of the node that was spliced out \n                    - fix_after_remove() is only called after a node has been removed\n                      from t\n                    - the color of the spliced out node was black\n                ensures\n                    - fixes any deviations from the CONVENTION causes by removing a node\n            !*/            \n\n\n            short tree_height (\n                node* t\n            ) const;\n            /*!\n                ensures\n                    - returns the number of nodes in the longest path from the root of the \n                      tree to a leaf\n            !*/\n\n            void delete_tree (\n                node* t\n            );\n            /*!\n                requires\n                    - t == root of binary search tree\n                    - t != NIL\n                ensures\n                    - deletes all nodes in t except for NIL\n            !*/\n\n            unsigned long get_count (\n                const domain& item,\n                node* tree_root\n            ) const;\n            /*!\n                requires\n                    - tree_root == the root of a binary search tree or NIL\n                ensures\n                    - if (tree_root == NIL) then\n                        - returns 0\n                    - else\n                        - returns the number of elements in tree_root that are \n                          equivalent to item\n            !*/\n\n\n\n            // data members\n            typename mem_manager::template rebind<node>::other pool;\n            node* NIL;\n            unsigned long tree_size;\n            node* tree_root;\n            mutable node* current_element;\n            mutable bool at_start_;\n            mutable mpair p;\n            compare comp;\n\n            \n\n            // restricted functions\n            binary_search_tree_kernel_2(binary_search_tree_kernel_2&);        \n            binary_search_tree_kernel_2& operator=(binary_search_tree_kernel_2&);\n\n\n    };\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    inline void swap (\n        binary_search_tree_kernel_2<domain,range,mem_manager,compare>& a, \n        binary_search_tree_kernel_2<domain,range,mem_manager,compare>& b \n    ) { a.swap(b); }\n\n\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >   \n    void deserialize (\n        binary_search_tree_kernel_2<domain,range,mem_manager,compare>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            domain d;\n            range r;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(d,in);\n                deserialize(r,in);\n                item.add(d,r);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type binary_search_tree_kernel_2\"); \n        }\n    }\n\n\n\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    ~binary_search_tree_kernel_2 (\n    )\n    {     \n        if (tree_root != NIL)\n            delete_tree(tree_root);\n        pool.deallocate(NIL);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    clear (\n    )\n    {\n        if (tree_size > 0)\n        {\n            delete_tree(tree_root);\n            tree_root = NIL;\n            tree_size = 0;\n        }\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    unsigned long binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    size (\n    ) const\n    {\n        return tree_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    short binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    height (\n    ) const\n    {\n        return tree_height(tree_root);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    unsigned long binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    count (\n        const domain& item\n    ) const\n    {\n        return get_count(item,tree_root);        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    add (\n        domain& d,\n        range& r\n    ) \n    {\n        if (tree_size == 0)\n        {\n            tree_root = pool.allocate();\n            tree_root->color = black;\n            tree_root->left = NIL;\n            tree_root->right = NIL;\n            tree_root->parent = NIL;\n            exchange(tree_root->d,d);\n            exchange(tree_root->r,r);\n        }\n        else \n        {\n            add_to_tree(tree_root,d,r);\n        }\n        ++tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    remove (\n        const domain& d,\n        domain& d_copy,\n        range& r\n    ) \n    {\n        remove_from_tree(tree_root,d,d_copy,r);\n        --tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    destroy (\n        const domain& item\n    ) \n    {\n        remove_from_tree(tree_root,item);\n        --tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    remove_any (\n        domain& d,\n        range& r\n    ) \n    {\n        remove_least_element_in_tree(tree_root,d,r);\n        --tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    range* binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    operator[] (\n        const domain& d\n    ) \n    {\n        return return_reference(tree_root,d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    const range* binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    operator[] (\n        const domain& d\n    ) const\n    {\n        return return_reference(tree_root,d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    swap (\n        binary_search_tree_kernel_2<domain,range,mem_manager,compare>& item\n    ) \n    {\n        pool.swap(item.pool);\n        \n        exchange(p,item.p);\n        exchange(comp,item.comp);\n\n        node* tree_root_temp            = item.tree_root;\n        unsigned long tree_size_temp    = item.tree_size;\n        node* const NIL_temp            = item.NIL;\n        node* current_element_temp      = item.current_element;\n        bool at_start_temp              = item.at_start_;\n        \n        item.tree_root                  = tree_root;\n        item.tree_size                  = tree_size;\n        item.NIL                        = NIL;\n        item.current_element            = current_element;\n        item.at_start_                  = at_start_;\n        \n        tree_root                       = tree_root_temp;\n        tree_size                       = tree_size_temp;\n        NIL                             = NIL_temp;\n        current_element                 = current_element_temp;\n        at_start_                       = at_start_temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    remove_last_in_order (\n        domain& d,\n        range& r\n    )\n    {\n        remove_biggest_element_in_tree(tree_root,d,r);\n        --tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    remove_current_element (\n        domain& d,\n        range& r\n    )\n    {\n        node* t = current_element;\n        move_next();\n        remove_from_tree(t,t->d,d,r);\n        --tree_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    position_enumerator (\n        const domain& d\n    ) const\n    {\n        // clear the enumerator state and make sure the stack is empty\n        reset();\n        at_start_ = false;\n        node* t = tree_root;\n        node* parent = NIL;\n        bool went_left = false;\n        while (t != NIL)\n        {\n            if ( comp(d , t->d ))\n            {\n                // if item is on the left then look in left\n                parent = t;\n                t = t->left;\n                went_left = true;\n            }\n            else if (comp(t->d , d))\n            {\n                // if item is on the right then look in right\n                parent = t;\n                t = t->right;\n                went_left = false;\n            }\n            else\n            {\n                current_element = t;\n                return;\n            }\n        }\n\n        // if we didn't find any matches but there might be something after the\n        // d in this tree.\n        if (parent != NIL)\n        {\n            current_element = parent;\n            // if we went left from this node then this node is the next\n            // biggest.\n            if (went_left)\n            {\n                return;\n            }\n            else\n            {\n                move_next();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    bool binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    at_start (\n    ) const\n    {\n        return at_start_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    reset (\n    ) const\n    {\n        at_start_ = true;\n        current_element = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    bool binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    current_element_valid (\n    ) const\n    {\n        return (current_element != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    const map_pair<domain,range>& binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    element (\n    ) const\n    {\n        p.d = &(current_element->d);\n        p.r = &(current_element->r);\n        return p;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    map_pair<domain,range>& binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    element (\n    )\n    {\n        p.d = &(current_element->d);\n        p.r = &(current_element->r);\n        return p;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    bool binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    move_next (\n    ) const\n    {\n        // if we haven't started iterating yet\n        if (at_start_)\n        {\n            at_start_ = false;\n            if (tree_size == 0)\n            {\n                return false;\n            }\n            else\n            {\n                // find the first element in the tree\n                current_element = tree_root;\n                node* temp = current_element->left;\n                while (temp != NIL)\n                {\n                    current_element = temp;\n                    temp = current_element->left;\n                }\n                return true;\n            }\n        }\n        else\n        {\n            if (current_element == 0)\n            {\n                return false;\n            }\n            else\n            {\n                bool went_up;  // true if we went up the tree from a child node to parent\n                bool from_left = false; // true if we went up and were coming from a left child node\n                // find the next element in the tree\n                if (current_element->right != NIL)\n                {\n                    // go right and down                    \n                    current_element = current_element->right;\n                    went_up = false;\n                }\n                else\n                {\n                    went_up = true;\n                    node* parent = current_element->parent;\n                    if (parent == NIL)\n                    {\n                        // in this case we have iterated over all the element of the tree\n                        current_element = 0;\n                        return false;\n                    }\n\n                    from_left = (parent->left == current_element);\n                    // go up to parent\n                    current_element = parent;\n                }\n\n\n                while (true)\n                {\n                    if (went_up)\n                    {\n                        if (from_left)\n                        {\n                            // in this case we have found the next node\n                            break;\n                        }\n                        else\n                        {\n                            // we should go up\n                            node* parent = current_element->parent;\n                            from_left = (parent->left == current_element);                            \n                            current_element = parent;\n                            if (current_element == NIL)\n                            {\n                                // in this case we have iterated over all the elements\n                                // in the tree\n                                current_element = 0;\n                                return false;\n                            }\n                        }\n                    }\n                    else\n                    {\n                        // we just went down to a child node\n                        if (current_element->left != NIL)\n                        {\n                            // go left\n                            went_up = false;\n                            current_element = current_element->left;\n                        }\n                        else\n                        {\n                            // if there is no left child then we have found the next node\n                            break;\n                        }\n                    }\n                }\n\n                return true;               \n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    delete_tree (\n        node* t\n    )  \n    {\n        if (t->left != NIL)\n            delete_tree(t->left);\n        if (t->right != NIL)\n            delete_tree(t->right);\n        pool.deallocate(t);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    rotate_left (\n        node* t\n    ) \n    {\n\n        // perform the rotation\n        node* temp = t->right;\n        t->right = temp->left;\n        if (temp->left != NIL)\n            temp->left->parent = t;\n        temp->left = t;\n        temp->parent = t->parent;\n\n\n        if (t == tree_root)\n            tree_root = temp;\n        else \n        {\n            // if t was on the left\n            if (t->parent->left == t)\n                t->parent->left = temp;\n            else\n                t->parent->right = temp;\n        }\n\n        t->parent = temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    rotate_right (\n        node* t\n    ) \n    {\n        // perform the rotation\n        node* temp = t->left;\n        t->left = temp->right;\n        if (temp->right != NIL)\n            temp->right->parent = t;\n        temp->right = t;\n        temp->parent = t->parent;\n\n        if (t == tree_root)\n            tree_root = temp;\n        else \n        {\n            // if t is a left child\n            if (t->parent->left == t)\n                t->parent->left = temp;\n            else\n                t->parent->right = temp;\n        }\n\n        t->parent = temp;\n    }\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    double_rotate_right (\n        node* t\n    )\n    {\n\n        // preform the rotation\n        node& temp = *(t->left->right);\n        t->left = temp.right;\n        temp.right->parent = t;\n        temp.left->parent = temp.parent;\n        temp.parent->right = temp.left;\n        temp.parent->parent = &temp;\n        temp.right = t;\n        temp.left = temp.parent;\n        temp.parent = t->parent;  \n\n\n        if (tree_root == t)\n            tree_root = &temp;\n        else\n        {\n            // t is a left child\n            if (t->parent->left == t)\n                t->parent->left = &temp;\n            else\n                t->parent->right = &temp;\n        }\n        t->parent = &temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    double_rotate_left (\n        node* t\n    )\n    {\n\n\n        // preform the rotation\n        node& temp = *(t->right->left);\n        t->right = temp.left;\n        temp.left->parent = t;\n        temp.right->parent = temp.parent;\n        temp.parent->left = temp.right;\n        temp.parent->parent = &temp;\n        temp.left = t;\n        temp.right = temp.parent;\n        temp.parent = t->parent;  \n\n\n        if (tree_root == t)\n            tree_root = &temp;\n        else\n        {\n            // t is a left child\n            if (t->parent->left == t)\n                t->parent->left = &temp;\n            else\n                t->parent->right = &temp;\n        }\n        t->parent = &temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    remove_biggest_element_in_tree (\n        node* t,\n        domain& d,\n        range& r\n    ) \n    {\n\n        node* next = t->right;\n        node* child;  // the child node of the one we will slice out\n\n        if (next == NIL)\n        {\n            // need to determine if t is a right or left child\n            if (t->parent->right == t)\n                child = t->parent->right = t->left;\n            else\n                child = t->parent->left = t->left;\n\n            // update tree_root if necessary\n            if (t == tree_root)\n                tree_root = child;\n        }\n        else\n        {\n            // find the least node\n            do \n            {\n                t = next;\n                next = next->right;\n            } while (next != NIL);\n            // t is a right child\n            child = t->parent->right = t->left;\n\n        }\n        \n        // swap the item from this node into d and r\n        exchange(d,t->d);\n        exchange(r,t->r);\n\n        // plug hole right by removing this node\n        child->parent = t->parent;\n\n        // keep the red-black properties true\n        if (t->color == black)\n            fix_after_remove(child);\n\n        // free the memory for this removed node\n        pool.deallocate(t);        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    bool binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    remove_least_element_in_tree (\n        node* t,\n        domain& d,\n        range& r\n    ) \n    {\n\n        node* next = t->left;\n        node* child;  // the child node of the one we will slice out\n\n        if (next == NIL)\n        {\n            // need to determine if t is a left or right child\n            if (t->parent->left == t)\n                child = t->parent->left = t->right;\n            else\n                child = t->parent->right = t->right;\n\n            // update tree_root if necessary\n            if (t == tree_root)\n                tree_root = child;\n        }\n        else\n        {\n            // find the least node\n            do \n            {\n                t = next;\n                next = next->left;\n            } while (next != NIL);\n            // t is a left child\n            child = t->parent->left = t->right;\n\n        }\n        \n        // swap the item from this node into d and r\n        exchange(d,t->d);\n        exchange(r,t->r);\n\n        // plug hole left by removing this node\n        child->parent = t->parent;\n\n        // keep the red-black properties true\n        if (t->color == black)\n            fix_after_remove(child);\n\n        bool rvalue = (t == current_element);\n        // free the memory for this removed node\n        pool.deallocate(t);        \n        return rvalue;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    add_to_tree (\n        node* t,\n        domain& d,\n        range& r\n    ) \n    {\n        // parent of the current node\n        node* parent;\n\n        // find a place to add node\n        while (true)\n        {\n            parent = t;\n            // if item should be put on the left then go left\n            if (comp(d , t->d))\n            {\n                t = t->left;\n                if (t == NIL)\n                {\n                    t = parent->left = pool.allocate();\n                    break;\n                }\n            }\n            // if item should be put on the right then go right\n            else\n            {\n                t = t->right;\n                if (t == NIL)\n                {\n                    t = parent->right = pool.allocate();\n                    break;\n                }\n            }\n        }\n\n        // t is now the node where we will add item and\n        // parent is the parent of t\n\n        t->parent = parent;\n        t->left = NIL;\n        t->right = NIL;\n        t->color = red;\n        exchange(t->d,d);\n        exchange(t->r,r);\n\n\n        // keep the red-black properties true\n        fix_after_add(t);\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    remove_from_tree (\n        node* t,\n        const domain& d,\n        domain& d_copy,\n        range& r\n    ) \n    {\n        while (true)\n        {\n            if ( comp(d , t->d) )\n            {\n                // if item is on the left then look in left\n                t = t->left;\n            }\n            else if (comp(t->d , d))\n            {\n                // if item is on the right then look in right\n                t = t->right;\n            }\n            else\n            {\n                // found the node we want to remove\n\n                // swap out the item into d_copy and r\n                exchange(d_copy,t->d);\n                exchange(r,t->r);\n\n                if (t->left == NIL)\n                {\n                    // if there is no left subtree\n\n                    node* parent = t->parent;\n                    \n                    // plug hole with right subtree\n\n\n                    // if t is on the left\n                    if (parent->left == t)\n                        parent->left = t->right;  \n                    else\n                        parent->right = t->right;\n                    t->right->parent = parent;\n\n                    // update tree_root if necessary\n                    if (t == tree_root)\n                        tree_root = t->right;\n\n                    if (t->color == black)\n                        fix_after_remove(t->right);\n\n                    // delete old node\n                    pool.deallocate(t);  \n                }\n                else if (t->right == NIL)\n                {\n                    // if there is no right subtree\n\n                    node* parent = t->parent;\n                    \n                    // plug hole with left subtree\n                    if (parent->left == t)\n                        parent->left = t->left;  \n                    else\n                        parent->right = t->left;\n                    t->left->parent = parent;\n\n                    // update tree_root if necessary\n                    if (t == tree_root)\n                        tree_root = t->left;\n\n                    if (t->color == black)\n                        fix_after_remove(t->left);\n\n                    // delete old node\n                    pool.deallocate(t);\n                }\n                else\n                {\n                    // if there is both a left and right subtree\n                    // get an element to fill this node now that its been swapped into \n                    // item_copy\n                    if (remove_least_element_in_tree(t->right,t->d,t->r))\n                    {\n                        // the node removed was the one pointed to by current_element so we\n                        // need to update it so that it points to the right spot.\n                        current_element = t;\n                    }\n                }\n\n                // quit loop\n                break;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    remove_from_tree (\n        node* t,\n        const domain& d\n    ) \n    {\n        while (true)\n        {\n            if ( comp(d , t->d) )\n            {\n                // if item is on the left then look in left\n                t = t->left;\n            }\n            else if (comp(t->d , d))\n            {\n                // if item is on the right then look in right\n                t = t->right;\n            }\n            else\n            {\n                // found the node we want to remove\n\n\n                if (t->left == NIL)\n                {\n                    // if there is no left subtree\n\n                    node* parent = t->parent;\n                    \n                    // plug hole with right subtree\n\n\n                    if (parent->left == t)\n                        parent->left = t->right;  \n                    else\n                        parent->right = t->right;\n                    t->right->parent = parent;\n\n                    // update tree_root if necessary\n                    if (t == tree_root)\n                        tree_root = t->right;\n\n                    if (t->color == black)\n                        fix_after_remove(t->right);\n\n                    // delete old node\n                    pool.deallocate(t);  \n                }\n                else if (t->right == NIL)\n                {\n                    // if there is no right subtree\n\n                    node* parent = t->parent;\n                    \n                    // plug hole with left subtree\n                    if (parent->left == t)\n                        parent->left = t->left;  \n                    else\n                        parent->right = t->left;\n                    t->left->parent = parent;\n\n                    // update tree_root if necessary\n                    if (t == tree_root)\n                        tree_root = t->left;\n\n                    if (t->color == black)\n                        fix_after_remove(t->left);\n\n                    // delete old node\n                    pool.deallocate(t);\n                }\n                else\n                {\n                    // if there is both a left and right subtree\n                    // get an element to fill this node now that its been swapped into \n                    // item_copy\n                    remove_least_element_in_tree(t->right,t->d,t->r);\n\n                }\n\n                // quit loop\n                break;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    range* binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    return_reference (\n        node* t,\n        const domain& d\n    ) \n    {\n        while (t != NIL)\n        {\n            if ( comp(d , t->d ))\n            {\n                // if item is on the left then look in left\n                t = t->left;\n            }\n            else if (comp(t->d , d))\n            {\n                // if item is on the right then look in right\n                t = t->right;\n            }\n            else\n            {\n                // if it's found then return a reference to it\n                return &(t->r);\n            }\n        }\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    const range* binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    return_reference (\n        const node* t,\n        const domain& d\n    ) const\n    {\n        while (t != NIL)\n        {\n            if ( comp(d , t->d) )\n            {\n                // if item is on the left then look in left\n                t = t->left;\n            }\n            else if (comp(t->d , d))\n            {\n                // if item is on the right then look in right\n                t = t->right;\n            }\n            else\n            {\n                // if it's found then return a reference to it\n                return &(t->r);\n            }\n        }\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    fix_after_add (\n        node* t\n    )\n    {\n\n        while (t->parent->color == red)\n        {\n            node& grandparent = *(t->parent->parent);\n\n            // if both t's parent and its sibling are red \n            if (grandparent.left->color == grandparent.right->color)\n            {\n                grandparent.color = red;\n                grandparent.left->color = black;\n                grandparent.right->color = black;\n                t = &grandparent;\n            }\n            else\n            {\n                // if t is a left child\n                if (t == t->parent->left)\n                {\n                    // if t's parent is a left child\n                    if (t->parent == grandparent.left)\n                    {\n                        grandparent.color = red;\n                        grandparent.left->color = black;\n                        rotate_right(&grandparent);\n                    }\n                    // if t's parent is a right child\n                    else\n                    {\n                        t->color = black;\n                        grandparent.color = red;\n                        double_rotate_left(&grandparent);\n                    }\n                }\n                // if t is a right child\n                else\n                {\n                    // if t's parent is a left child\n                    if (t->parent == grandparent.left)\n                    {\n                        t->color = black;\n                        grandparent.color = red;                        \n                        double_rotate_right(&grandparent);\n                    }\n                    // if t's parent is a right child\n                    else\n                    {\n                        grandparent.color = red;\n                        grandparent.right->color = black;\n                        rotate_left(&grandparent);\n                    }\n                }\n                break;\n            }\n        }\n        tree_root->color = black;\n    }       \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    fix_after_remove (\n        node* t\n    )\n    {\n\n        while (t != tree_root && t->color == black)\n        {\n            if (t->parent->left == t)\n            {\n                node* sibling = t->parent->right;\n                if (sibling->color == red)\n                {\n                    sibling->color = black;\n                    t->parent->color = red;\n                    rotate_left(t->parent);\n                    sibling = t->parent->right;\n                }\n\n                if (sibling->left->color == black && sibling->right->color == black)\n                {\n                    sibling->color = red;\n                    t = t->parent;\n                }\n                else\n                {\n                    if (sibling->right->color == black)\n                    {\n                        sibling->left->color = black;\n                        sibling->color = red;\n                        rotate_right(sibling);\n                        sibling = t->parent->right;\n                    }\n\n                    sibling->color = t->parent->color;\n                    t->parent->color = black;\n                    sibling->right->color = black;\n                    rotate_left(t->parent);\n                    t = tree_root;\n\n                }\n\n\n            }\n            else\n            {\n\n                node* sibling = t->parent->left;\n                if (sibling->color == red)\n                {\n                    sibling->color = black;\n                    t->parent->color = red;\n                    rotate_right(t->parent);\n                    sibling = t->parent->left;\n                }\n\n                if (sibling->left->color == black && sibling->right->color == black)\n                {\n                    sibling->color = red;\n                    t = t->parent;\n                }\n                else\n                {\n                    if (sibling->left->color == black)\n                    {\n                        sibling->right->color = black;\n                        sibling->color = red;\n                        rotate_left(sibling);\n                        sibling = t->parent->left;\n                    }\n\n                    sibling->color = t->parent->color;\n                    t->parent->color = black;\n                    sibling->left->color = black;\n                    rotate_right(t->parent);\n                    t = tree_root;\n\n                }\n\n\n            }\n\n        }\n        t->color = black;\n    \n    }         \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    short binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    tree_height (\n        node* t\n    ) const\n    {\n        if (t == NIL)\n            return 0;\n\n        short height1 = tree_height(t->left);\n        short height2 = tree_height(t->right);        \n        if (height1 > height2)\n            return height1 + 1;\n        else\n            return height2 + 1;\n    }       \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    unsigned long binary_search_tree_kernel_2<domain,range,mem_manager,compare>::\n    get_count (\n        const domain& d,\n        node* tree_root\n    ) const\n    {\n        if (tree_root != NIL)\n        {\n            if (comp(d , tree_root->d))\n            {\n                // go left\n                return get_count(d,tree_root->left);                \n            }\n            else if (comp(tree_root->d , d))\n            {\n                // go right\n                return get_count(d,tree_root->right);\n            }\n            else\n            {\n                // go left and right to look for more matches\n                return   get_count(d,tree_root->left) \n                       + get_count(d,tree_root->right) \n                       + 1;\n            }\n        }\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BINARY_SEARCH_TREE_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/binary_search_tree/binary_search_tree_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BINARY_SEARCH_TREE_KERNEl_ABSTRACT_\n#ifdef DLIB_BINARY_SEARCH_TREE_KERNEl_ABSTRACT_\n\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include <functional>\n\nnamespace dlib \n{\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<domain>\n        >\n    class binary_search_tree : public enumerable<map_pair<domain,range> >, \n                               public asc_pair_remover<domain,range,compare>\n    {\n\n        /*!\n            REQUIREMENTS ON domain\n                domain must be comparable by compare where compare is a functor compatible with std::less and\n                domain is swappable by a global swap() and             \n                domain must have a default constructor\n\n            REQUIREMENTS ON range\n                range is swappable by a global swap() and\n                range must have a default constructor\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap(), count(), height(),  and operator[] functions \n                do not invalidate pointers or references to internal data.\n\n                position_enumerator() invalidates pointers or references to \n                data returned by element() and only by element() (i.e. pointers and\n                references returned by operator[] are still valid).\n\n                All other functions have no such guarantees.\n\n            INITIAL VALUE\n                size() == 0\n                height() == 0\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the domain (and each associated\n                range element) elements in ascending order according to the compare functor.  \n                (i.e. the elements are enumerated in sorted order)              \n\n            WHAT THIS OBJECT REPRESENTS\n                this object represents a data dictionary that is built on top of some \n                kind of binary search tree.  It maps objects of type domain to objects\n                of type range.  \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n                    \n                NOTE:\n                    definition of equivalent:\n                    a is equivalent to b if\n                    a < b == false and\n                    b < a == false\n        !*/\n\n\n    public:\n\n        typedef domain domain_type;\n        typedef range range_type;\n        typedef compare compare_type;\n        typedef mem_manager mem_manager_type;\n\n        binary_search_tree(\n        );\n        /*!\n            ensures \n                - #*this is properly initialized\n            throws\n                - std::bad_alloc or any exception thrown by domain's or range's \n                  constructor.\n        !*/\n\n        virtual ~binary_search_tree(\n        ); \n        /*!\n            ensures\n                - all memory associated with *this has been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc or any exception thrown by domain's or range's \n                  constructor.\n                    if this exception is thrown then *this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        short height (\n        ) const;\n        /*!\n            ensures\n                - returns the number of elements in the longest path from the root \n                  of the tree to a leaf\n        !*/\n\n        unsigned long count (\n            const domain& d\n        ) const;\n        /*!\n            ensures\n                - returns the number of elements in the domain of *this that are \n                  equivalent to d\n        !*/ \n\n        void add (\n            domain& d,\n            range& r\n        );\n        /*!\n            requires    \n                - &d != &r (i.e. d and r cannot be the same variable)\n            ensures             \n                - adds a mapping between d and r to *this\n                - if (count(d) == 0) then\n                    - #*(*this)[d] == r\n                - else\n                    - #(*this)[d] != 0\n                - #d and #r have initial values for their types\n                - #count(d) == count(d) + 1\n                - #at_start() == true\n                - #size() == size() + 1\n            throws  \n                - std::bad_alloc or any exception thrown by domain's or range's \n                  constructor.\n                    if add() throws then it has no effect\n        !*/\n\n        void remove (\n            const domain& d,\n            domain& d_copy,\n            range& r\n        );\n        /*!\n            requires\n                - (*this)[d] != 0 \n                - &d != &r (i.e. d and r cannot be the same variable) \n                - &d != &d_copy (i.e. d and d_copy cannot be the same variable) \n                - &r != &d_copy (i.e. r and d_copy cannot be the same variable) \n            ensures\n                - some element in the domain of *this that is equivalent to d has\n                  been removed and swapped into #d_copy.  Additionally, its \n                  associated range element has been removed and swapped into #r.\n                - #count(d) == count(d) - 1\n                - #size() == size() - 1\n                - #at_start() == true  \n        !*/\n\n        void destroy (\n            const domain& d\n        );\n        /*!\n            requires\n                - (*this)[d] != 0 \n            ensures\n                - an element in the domain of *this equivalent to d has been removed.  \n                  The element in the range of *this associated with d has also been \n                  removed.\n                - #count(d) == count(d) - 1\n                - #size() == size() - 1\n                - #at_start() == true  \n        !*/\n\n        void remove_last_in_order (\n            domain& d,\n            range& r\n        );\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - the last/biggest (according to the compare functor) element in the domain of *this has\n                  been removed and swapped into #d.  The element in the range of *this\n                  associated with #d has also been removed and swapped into #r.\n                - #count(#d) == count(#d) - 1\n                - #size() == size() - 1\n                - #at_start() == true\n        !*/\n\n        void remove_current_element (\n            domain& d,\n            range& r\n        );\n        /*!\n            requires\n                - current_element_valid() == true\n            ensures\n                - the current element given by element() has been removed and swapped into d and r.\n                - #d == element().key()\n                - #r == element().value()\n                - #count(#d) == count(#d) - 1\n                - #size() == size() - 1\n                - moves the enumerator to the next element.  If element() was the last \n                  element in enumeration order then #current_element_valid() == false \n                  and #at_start() == false.\n        !*/\n\n        void position_enumerator (\n            const domain& d\n        ) const;\n        /*!\n            ensures\n                - #at_start() == false\n                - if (count(d) > 0) then\n                    - #element().key() == d\n                - else if (there are any items in the domain of *this that are bigger than \n                  d according to the compare functor) then\n                    - #element().key() == the smallest item in the domain of *this that is\n                      bigger than d according to the compare functor.\n                - else\n                    - #current_element_valid() == false\n        !*/\n\n        const range* operator[] (\n            const domain& d\n        ) const;\n        /*!\n            ensures\n                - if (there is an element in the domain equivalent to d) then\n                    - returns a pointer to an element in the range of *this that\n                      is associated with an element in the domain of *this \n                      equivalent to d.\n                - else\n                    - returns 0\n        !*/\n\n        range* operator[] (\n            const domain& d\n        );\n        /*!\n            ensures\n                - if (there is an element in the domain equivalent to d) then\n                    - returns a pointer to an element in the range of *this that\n                      is associated with an element in the domain of *this \n                      equivalent to d.\n                - else\n                    - returns 0\n        !*/\n\n        void swap (\n            binary_search_tree& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    private:\n\n        // restricted functions\n        binary_search_tree(binary_search_tree&);      \n        binary_search_tree& operator=(binary_search_tree&);\n\n    };\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    inline void swap (\n        binary_search_tree<domain,range,mem_manager,compare>& a, \n        binary_search_tree<domain,range,mem_manager,compare>& b \n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void deserialize (\n        binary_search_tree<domain,range,mem_manager,compare>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_BINARY_SEARCH_TREE_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/binary_search_tree/binary_search_tree_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINARY_SEARCH_TREE_KERNEl_C_\n#define DLIB_BINARY_SEARCH_TREE_KERNEl_C_\n\n#include \"../interfaces/map_pair.h\"\n#include \"binary_search_tree_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib \n{\n\n    template <\n        typename bst_base\n        >\n    class binary_search_tree_kernel_c : public bst_base\n    {\n        typedef typename bst_base::domain_type domain;\n        typedef typename bst_base::range_type range;\n\n        public:\n\n            binary_search_tree_kernel_c () {}\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n\n            void destroy (\n                const domain& d\n            );\n\n            void add (\n                domain& d,\n                range& r\n            );\n\n            void remove_any (\n                domain& d,\n                range& r\n            );\n\n            const map_pair<domain, range>& element(\n            ) const\n            {\n                DLIB_CASSERT(this->current_element_valid() == true,\n                    \"\\tconst map_pair<domain,range>& binary_search_tree::element() const\"\n                    << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                    << \"\\n\\tthis: \" << this\n                );\n\n                return bst_base::element();\n            }\n\n            map_pair<domain, range>& element(\n            )\n            {\n                DLIB_CASSERT(this->current_element_valid() == true,\n                    \"\\tmap_pair<domain,range>& binary_search_tree::element()\"\n                    << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                    << \"\\n\\tthis: \" << this\n                );\n\n                return bst_base::element();\n            }\n\n            void remove_last_in_order (\n                domain& d,\n                range& r\n            );\n\n            void remove_current_element (\n                domain& d,\n                range& r\n            );\n\n\n    };\n\n\n    template <\n        typename bst_base\n        >\n    inline void swap (\n        binary_search_tree_kernel_c<bst_base>& a, \n        binary_search_tree_kernel_c<bst_base>& b \n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bst_base\n        >\n    void binary_search_tree_kernel_c<bst_base>::\n    add (\n        domain& d,\n        range& r\n    )\n    {\n        DLIB_CASSERT( static_cast<const void*>(&d) != static_cast<void*>(&r),\n            \"\\tvoid binary_search_tree::add\"\n            << \"\\n\\tyou can't call add() and give the same object to both parameters.\"\n            << \"\\n\\tthis:       \" << this\n            << \"\\n\\t&d:         \" << &d\n            << \"\\n\\t&r:         \" << &r\n            << \"\\n\\tsize():     \" << this->size()\n            );\n\n        bst_base::add(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bst_base\n        >\n    void binary_search_tree_kernel_c<bst_base>::\n    destroy (\n        const domain& d\n    )\n    {\n        DLIB_CASSERT(this->operator[](d) != 0,\n            \"\\tvoid binary_search_tree::destroy\"\n            << \"\\n\\tthe element must be in the tree for it to be removed\"\n            << \"\\n\\tthis:    \" << this\n            << \"\\n\\t&d:      \" << &d \n            );\n\n        bst_base::destroy(d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bst_base\n        >\n    void binary_search_tree_kernel_c<bst_base>::\n    remove (\n        const domain& d,\n        domain& d_copy,\n        range& r\n    )\n    {\n        DLIB_CASSERT(this->operator[](d) != 0 &&\n                (static_cast<const void*>(&d) != static_cast<void*>(&d_copy)) &&\n                (static_cast<const void*>(&d) != static_cast<void*>(&r)) &&\n                (static_cast<const void*>(&r) != static_cast<void*>(&d_copy)),\n            \"\\tvoid binary_search_tree::remove\"\n            << \"\\n\\tthe element must be in the tree for it to be removed\"\n            << \"\\n\\tthis:       \" << this\n            << \"\\n\\t&d:         \" << &d \n            << \"\\n\\t&d_copy:    \" << &d_copy\n            << \"\\n\\t&r:         \" << &r\n            );\n\n        bst_base::remove(d,d_copy,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bst_base\n        >\n    void binary_search_tree_kernel_c<bst_base>::\n    remove_any(\n        domain& d,\n        range& r\n    )\n    {\n        DLIB_CASSERT(this->size() != 0 && \n            (static_cast<const void*>(&d) != static_cast<void*>(&r)),\n            \"\\tvoid binary_search_tree::remove_any\"\n            << \"\\n\\ttree must not be empty if something is going to be removed\"\n            << \"\\n\\tthis: \" << this\n            << \"\\n\\t&d:   \" << &d\n            << \"\\n\\t&r:   \" << &r\n            );\n\n        bst_base::remove_any(d,r);\n    }\n \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bst_base\n        >\n    void binary_search_tree_kernel_c<bst_base>::\n    remove_last_in_order (\n        domain& d,\n        range& r\n    )\n    {\n        DLIB_CASSERT(this->size() > 0, \n            \"\\tvoid binary_search_tree::remove_last_in_order()\"\n            << \"\\n\\tyou can't remove an element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        bst_base::remove_last_in_order(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bst_base\n        >\n    void binary_search_tree_kernel_c<bst_base>::\n    remove_current_element (\n        domain& d,\n        range& r\n    ) \n    {\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tvoid binary_search_tree::remove_current_element()\"\n            << \"\\n\\tyou can't remove the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        bst_base::remove_current_element(d,r);\n    }\n\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BINARY_SEARCH_TREE_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/binary_search_tree.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINARY_SEARCH_TREe_\n#define DLIB_BINARY_SEARCH_TREe_\n\n\n#include \"binary_search_tree/binary_search_tree_kernel_1.h\"\n#include \"binary_search_tree/binary_search_tree_kernel_2.h\"\n#include \"binary_search_tree/binary_search_tree_kernel_c.h\"\n\n\n#include \"algs.h\"\n#include <functional>\n\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<domain>\n        >\n    class binary_search_tree\n    {\n        binary_search_tree() {}\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     binary_search_tree_kernel_1<domain,range,mem_manager,compare>    \n                    kernel_1a;\n        typedef     binary_search_tree_kernel_c<kernel_1a>\n                    kernel_1a_c;\n\n\n        // kernel_2a        \n        typedef     binary_search_tree_kernel_2<domain,range,mem_manager,compare>    \n                    kernel_2a;\n        typedef     binary_search_tree_kernel_c<kernel_2a>\n                    kernel_2a_c;\n\n    };\n}\n\n#endif // DLIB_BINARY_SEARCH_TREe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bit_stream/bit_stream_kernel_1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIT_STREAM_KERNEL_1_CPp_\n#define DLIB_BIT_STREAM_KERNEL_1_CPp_\n\n\n#include \"bit_stream_kernel_1.h\"\n#include \"../algs.h\"\n\n#include <iostream>\n\nnamespace dlib\n{\n\n    inline void swap (\n        bit_stream_kernel_1& a, \n        bit_stream_kernel_1& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void bit_stream_kernel_1::\n    clear (\n    )\n    {\n        if (write_mode)\n        {\n            write_mode = false;\n\n            // flush output buffer\n            if (buffer_size > 0)\n            {\n                buffer <<= 8 - buffer_size;\n                osp->write(reinterpret_cast<char*>(&buffer),1);\n            }\n        }\n        else\n            read_mode = false;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bit_stream_kernel_1::\n    set_input_stream (\n        std::istream& is\n    )\n    {\n        isp = &is;\n        read_mode = true;\n\n        buffer_size = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bit_stream_kernel_1::\n    set_output_stream (\n        std::ostream& os\n    )\n    {\n        osp = &os;\n        write_mode = true;\n\n        buffer_size = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bit_stream_kernel_1::\n    close (\n    )\n    {\n        if (write_mode)\n        {\n            write_mode = false;\n\n            // flush output buffer\n            if (buffer_size > 0)\n            {\n                buffer <<= 8 - buffer_size;\n                osp->write(reinterpret_cast<char*>(&buffer),1);\n            }\n        }\n        else\n            read_mode = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bit_stream_kernel_1::\n    is_in_write_mode (\n    ) const\n    {\n        return write_mode;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bit_stream_kernel_1::\n    is_in_read_mode (\n    ) const\n    {\n        return read_mode;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bit_stream_kernel_1::\n    write (\n        int bit\n    )\n    {\n        // flush buffer if necessary\n        if (buffer_size == 8)\n        {\n            buffer <<= 8 - buffer_size;\n            if (osp->rdbuf()->sputn(reinterpret_cast<char*>(&buffer),1) == 0)\n            {\n                throw std::ios_base::failure(\"error occured in the bit_stream object\");\n            }\n\n            buffer_size = 0;\n        }\n\n        ++buffer_size;\n        buffer <<= 1;\n        buffer += static_cast<unsigned char>(bit);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bit_stream_kernel_1::\n    read (\n        int& bit\n    )\n    {\n        // get new byte if necessary\n        if (buffer_size == 0)\n        {\n            if (isp->rdbuf()->sgetn(reinterpret_cast<char*>(&buffer), 1) == 0)\n            {\n                // if we didn't read anything then return false\n                return false;\n            }\n\n            buffer_size = 8;\n        }\n\n        // put the most significant bit from buffer into bit\n        bit = static_cast<int>(buffer >> 7);\n\n        // shift out the bit that was just read\n        buffer <<= 1;\n        --buffer_size;\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bit_stream_kernel_1::\n    swap (\n        bit_stream_kernel_1& item\n    )\n    {\n\n        std::istream*   isp_temp            = item.isp;\n        std::ostream*   osp_temp            = item.osp;\n        bool            write_mode_temp     = item.write_mode;\n        bool            read_mode_temp      = item.read_mode;\n        unsigned char   buffer_temp         = item.buffer;\n        unsigned short  buffer_size_temp    = item.buffer_size;\n\n        item.isp            = isp;\n        item.osp            = osp;\n        item.write_mode     = write_mode;\n        item.read_mode      = read_mode;\n        item.buffer         = buffer;\n        item.buffer_size    = buffer_size;\n\n\n        isp             = isp_temp;\n        osp             = osp_temp;\n        write_mode      = write_mode_temp;\n        read_mode       = read_mode_temp;\n        buffer          = buffer_temp;\n        buffer_size     = buffer_size_temp;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif // DLIB_BIT_STREAM_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bit_stream/bit_stream_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIT_STREAM_KERNEl_1_\n#define DLIB_BIT_STREAM_KERNEl_1_\n\n#include \"bit_stream_kernel_abstract.h\"\n#include <iosfwd>\n\nnamespace dlib\n{\n\n    class bit_stream_kernel_1\n    {\n\n        /*!\n            INITIAL VALUE\n                write_mode          == false\n                read_mode           == false    \n\n            CONVENTION\n                write_mode          == is_in_write_mode()\n                read_mode           == is_in_read_mode()\n\n                if (write_mode)\n                {\n                    osp             == pointer to an ostream object\n                    buffer          == the low order bits of buffer are the bits to be \n                                       written\n                    buffer_size     == the number of low order bits in buffer that are \n                                       bits that should be written\n                    the lowest order bit is the last bit entered by the user\n                }\n\n                if (read_mode)\n                {\n                    isp             == pointer to an istream object\n                    buffer          == the high order bits of buffer are the bits \n                                       waiting to be read by the user\n                    buffer_size     == the number of high order bits in buffer that \n                                       are bits that are waiting to be read\n                    the highest order bit is the next bit to give to the user\n                }\n        !*/\n\n\n    public:\n\n        bit_stream_kernel_1 (\n        ) :\n            write_mode(false),\n            read_mode(false)\n        {}\n\n        virtual ~bit_stream_kernel_1 (\n        )\n        {}\n\n        void clear (\n        );\n\n        void set_input_stream (\n            std::istream& is\n        );\n\n        void set_output_stream (\n            std::ostream& os\n        );\n\n        void close (\n        );\n\n        inline bool is_in_write_mode (\n        ) const;\n\n        inline bool is_in_read_mode (\n        ) const;\n\n        inline void write (\n            int bit\n        );\n\n        bool read (\n            int& bit\n        );\n\n        void swap (\n            bit_stream_kernel_1& item\n        );\n\n        private:\n\n            // member data\n            std::istream* isp;\n            std::ostream* osp;\n            bool write_mode;\n            bool read_mode;\n            unsigned char buffer;\n            unsigned short buffer_size;\n            \n            // restricted functions\n            bit_stream_kernel_1(bit_stream_kernel_1&);        // copy constructor\n            bit_stream_kernel_1& operator=(bit_stream_kernel_1&);  // assignment operator\n\n    };\n\n    inline void swap (\n        bit_stream_kernel_1& a, \n        bit_stream_kernel_1& b\n    );\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"bit_stream_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_BIT_STREAM_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bit_stream/bit_stream_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BIT_STREAM_KERNEl_ABSTRACT_\n#ifdef DLIB_BIT_STREAM_KERNEl_ABSTRACT_\n\n#include <iosfwd>\n\nnamespace dlib\n{\n\n    class bit_stream\n    {\n\n        /*!\n            INITIAL VALUE\n                is_in_write_mode()  == false\n                is_in_read_mode()   == false\n\n            WHAT THIS OBJECT REPRESENTS\n                this object is a middle man between a user and the iostream classes.\n                it allows single bits to be read/written easily to/from \n                the iostream classes  \n\n            BUFFERING:\n                This object will only read/write single bytes at a time from/to the \n                iostream objects. Any buffered bits still in the bit_stream object \n                when it is closed or destructed are lost if it is in read mode.  If \n                it is in write mode then any remaining bits are guaranteed to be \n                written to the output stream by the time it is closed or destructed.\n        !*/\n\n\n    public:\n\n        bit_stream (\n        );\n        /*!\n            ensures \n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~bit_stream (\n        );\n        /*!\n            ensures\n                - all memory associated with *this has been released\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc\n                    if this exception is thrown then *this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n\n        void set_input_stream (\n            std::istream& is\n        );\n        /*!\n            requires\n                - is_in_write_mode() == false                 \n                - is_in_read_mode() == false                  \n                - is is ready to give input\n            ensures \n                - #is_in_write_mode() == false                 \n                - #is_in_read_mode() == true                   \n                - #*this will now be reading from is\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_output_stream (\n            std::ostream& os\n        );\n        /*!\n            requires\n                - is_in_write_mode() == false         \n                - is_in_read_mode() == false          \n                - os is ready to take output\n            ensures \n                - #is_in_write_mode() == true          \n                - #is_in_read_mode() == false          \n                - #*this will now write to os\n            throws\n                - std::bad_alloc\n        !*/\n        \n\n\n        void close (\n        );\n        /*!\n            requires\n                - is_in_write_mode() == true || is_in_read_mode() == true\n            ensures\n                - #is_in_write_mode() == false \n                - #is_in_read_mode()  == false \n        !*/\n\n        bool is_in_write_mode (\n        ) const;\n        /*!\n            ensures\n                - returns true if *this is associated with an output stream object\n                - returns false otherwise\n        !*/\n\n        bool is_in_read_mode (\n        ) const;\n        /*!\n            ensures\n                - returns true if *this is associated with an input stream object\n                - returns false otherwise\n        !*/\n\n        void write (\n            int bit\n        );\n        /*!\n            requires\n                - is_in_write_mode() == true \n                - bit == 0 || bit == 1\n            ensures\n                - bit will be written to the ostream object associated with *this\n            throws\n                - std::ios_base::failure\n                    if (there was a problem writing to the output stream) then\n                    this exception will be thrown.  #*this will be unusable until\n                    clear() is called and succeeds\n                - any other exception\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        bool read (\n            int& bit\n        );\n        /*!\n            requires\n                - is_in_read_mode() == true \n            ensures\n                - the next bit has been read and placed into #bit \n                - returns true if the read was successful, else false \n                  (ex. false if EOF has been reached)\n            throws\n                - any exception\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void swap (\n            bit_stream& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n        private:\n\n            // restricted functions\n            bit_stream(bit_stream&);        // copy constructor\n            bit_stream& operator=(bit_stream&);    // assignment operator\n\n    };\n\n    inline void swap (\n        bit_stream& a, \n        bit_stream& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_BIT_STREAM_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bit_stream/bit_stream_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIT_STREAM_KERNEl_C_\n#define DLIB_BIT_STREAM_KERNEl_C_\n\n#include \"bit_stream_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <iosfwd>\n\nnamespace dlib\n{\n\n    template <\n        typename bit_stream_base // implements bit_stream/bit_stream_kernel_abstract.h\n        >\n    class bit_stream_kernel_c : public bit_stream_base\n    {\n    public:\n\n\n        void set_input_stream (\n            std::istream& is\n        );\n\n        void set_output_stream (\n            std::ostream& os\n        );\n\n        void close (\n        );\n\n        void write (\n            int bit\n        );\n\n        bool read (\n            int& bit\n        );\n\n    };\n\n    template <\n        typename bit_stream_base\n        >\n    inline void swap (\n        bit_stream_kernel_c<bit_stream_base>& a, \n        bit_stream_kernel_c<bit_stream_base>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bit_stream_base\n        >\n    void bit_stream_kernel_c<bit_stream_base>:: \n    set_input_stream (\n        std::istream& is\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( this->is_in_write_mode() == false ) && ( this->is_in_read_mode() == false ), \n            \"\\tvoid bit_stream::set_intput_stream\"\n            << \"\\n\\tbit_stream must not be in write or read mode\" \n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        bit_stream_base::set_input_stream(is);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bit_stream_base\n        >\n    void bit_stream_kernel_c<bit_stream_base>:: \n    set_output_stream (\n        std::ostream& os\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( this->is_in_write_mode() == false ) && ( this->is_in_read_mode() == false ), \n            \"\\tvoid bit_stream::set_output_stream\"\n            << \"\\n\\tbit_stream must not be in write or read mode\" \n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        bit_stream_base::set_output_stream(os);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bit_stream_base\n        >\n    void bit_stream_kernel_c<bit_stream_base>:: \n    close (\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( this->is_in_write_mode() == true ) || ( this->is_in_read_mode() == true ), \n            \"\\tvoid bit_stream::close\"\n            << \"\\n\\tyou can't close a bit_stream that isn't open\" \n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        bit_stream_base::close();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bit_stream_base\n        >\n    void bit_stream_kernel_c<bit_stream_base>:: \n    write (\n        int bit\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( this->is_in_write_mode() == true ) && ( bit == 0 || bit == 1 ), \n            \"\\tvoid bit_stream::write\"\n            << \"\\n\\tthe bit stream bust be in write mode and bit must be either 1 or 0\" \n            << \"\\n\\tis_in_write_mode() == \" << this->is_in_write_mode()\n            << \"\\n\\tbit == \" << bit\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        bit_stream_base::write(bit);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bit_stream_base\n        >\n    bool bit_stream_kernel_c<bit_stream_base>:: \n    read (\n        int& bit\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( this->is_in_read_mode() == true ), \n            \"\\tbool bit_stream::read\"\n            << \"\\n\\tyou can't read from a bit_stream that isn't in read mode\" \n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return bit_stream_base::read(bit);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BIT_STREAM_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bit_stream/bit_stream_multi_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIT_STREAM_MULTi_1_\n#define DLIB_BIT_STREAM_MULTi_1_\n\n#include \"bit_stream_multi_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename bit_stream_base\n        >\n    class bit_stream_multi_1 : public bit_stream_base\n    {\n\n    public:\n\n        void multi_write (\n            unsigned long data,\n            int num_to_write\n        );\n\n        int multi_read (\n            unsigned long& data,\n            int num_to_read\n        );\n\n    };\n\n    template <\n        typename bit_stream_base\n        >\n    inline void swap (\n        bit_stream_multi_1<bit_stream_base>& a, \n        bit_stream_multi_1<bit_stream_base>& b \n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bit_stream_base\n        >\n    void bit_stream_multi_1<bit_stream_base>:: \n    multi_write (\n        unsigned long data,\n        int num_to_write\n    )\n    {\n        // move the first bit into the most significant position\n        data <<= 32 - num_to_write;\n\n        for (int i = 0; i < num_to_write; ++i)\n        {\n            // write the first bit from data\n            this->write(static_cast<char>(data >> 31));\n\n            // shift the next bit into position\n            data <<= 1;\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bit_stream_base\n        >\n    int bit_stream_multi_1<bit_stream_base>:: \n    multi_read (\n        unsigned long& data,\n        int num_to_read\n    )\n    {\n        int bit, i;\n        data = 0;\n        for (i = 0; i < num_to_read; ++i)\n        {\n\n            // get a bit\n            if (this->read(bit) == false)\n                break;\n\n            // shift data to make room for this new bit\n            data <<= 1;\n\n            // put bit into the least significant position in data\n            data += static_cast<unsigned long>(bit);\n\n        }\n\n        return i;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BIT_STREAM_MULTi_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bit_stream/bit_stream_multi_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BIT_STREAM_MULTi_ABSTRACT_\n#ifdef DLIB_BIT_STREAM_MULTi_ABSTRACT_\n\n#include \"bit_stream_kernel_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename bit_stream_base  \n        >\n    class bit_stream_multi : public bit_stream_base\n    {\n\n        /*!\n            REQUIREMENTS ON BIT_STREAM_BASE\n                it is an implementation of bit_stream/bit_stream_kernel_abstract.h\n\n      \n            WHAT THIS EXTENSION DOES FOR BIT_STREAM\n                this gives a bit_stream object the ability to read/write multible bits \n                at a time\n        !*/\n\n\n        public:\n\n        void multi_write (\n            unsigned long data,\n            int num_to_write\n        );\n        /*!\n            requires\n                - is_in_write_mode() == true \n                - 0 <= num_to_write <= 32\n            ensures\n                - num_to_write low order bits from data will be written to the ostream \n                - object associated with *this\n                  example: if data is 10010 then the bits will be written in the \n                  order 1,0,0,1,0\n        !*/\n\n\n        int multi_read (\n            unsigned long& data,\n            int num_to_read\n        );\n        /*!\n            requires\n                - is_in_read_mode() == true \n                - 0 <= num_to_read <= 32\n            ensures\n                - tries to read num_to_read bits into the low order end of #data       \n                  example:  if the incoming bits were 10010 then data would end \n                  up with 10010 as its low order bits\n                - all of the bits in #data not filled in by multi_read() are zero             \n                - returns the number of bits actually read into #data\n        !*/\n\n    };\n\n    template <\n        typename bit_stream_base\n        >\n    inline void swap (\n        bit_stream_multi<bit_stream_base>& a, \n        bit_stream_multi<bit_stream_base>& b \n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_BIT_STREAM_MULTi_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bit_stream/bit_stream_multi_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIT_STREAM_MULTi_C_\n#define DLIB_BIT_STREAM_MULTi_C_\n\n#include \"bit_stream_multi_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n    template <\n        typename bit_stream_base // implements bit_stream/bit_stream_multi_abstract.h\n        >\n    class bit_stream_multi_c : public bit_stream_base\n    {\n    public:\n\n        void multi_write (\n            unsigned long data,\n            int num_to_write\n        );\n\n        int multi_read (\n            unsigned long& data,\n            int num_to_read\n        );\n\n    };\n\n    template <\n        typename bit_stream_base\n        >\n    inline void swap (\n        bit_stream_multi_c<bit_stream_base>& a, \n        bit_stream_multi_c<bit_stream_base>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bit_stream_base\n        >\n    void bit_stream_multi_c<bit_stream_base>:: \n    multi_write (\n        unsigned long data,\n        int num_to_write\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (this->is_in_write_mode() == true) && (num_to_write >= 0 && num_to_write <=32), \n            \"\\tvoid bit_stream::write\"\n            << \"\\n\\tthe bit stream bust be in write mode and\"\n            << \"\\n\\tnum_to_write must be between 0 and 32 inclusive\" \n            << \"\\n\\tnum_to_write == \" << num_to_write\n            << \"\\n\\tis_in_write_mode() == \" << this->is_in_write_mode()\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        bit_stream_base::multi_write(data,num_to_write);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename bit_stream_base\n        >\n    int bit_stream_multi_c<bit_stream_base>:: \n    multi_read (\n        unsigned long& data,\n        int num_to_read\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( this->is_in_read_mode() == true && ( num_to_read >= 0 && num_to_read <=32 ) ), \n            \"\\tvoid bit_stream::read\"\n            << \"\\n\\tyou can't read from a bit_stream that isn't in read mode and\" \n            << \"\\n\\tnum_to_read must be between 0 and 32 inclusive\"\n            << \"\\n\\tnum_to_read == \" << num_to_read\n            << \"\\n\\tis_in_read_mode() == \" << this->is_in_read_mode()\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return bit_stream_base::multi_read(data,num_to_read);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BIT_STREAM_MULTi_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bit_stream.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BIT_STREAm_\n#define DLIB_BIT_STREAm_\n\n#include \"bit_stream/bit_stream_kernel_1.h\"\n#include \"bit_stream/bit_stream_kernel_c.h\"\n\n#include \"bit_stream/bit_stream_multi_1.h\"\n#include \"bit_stream/bit_stream_multi_c.h\"\n\nnamespace dlib\n{\n\n\n    class bit_stream\n    {\n        bit_stream() {}\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     bit_stream_kernel_1    \n                    kernel_1a;\n        typedef     bit_stream_kernel_c<kernel_1a >\n                    kernel_1a_c;\n\n        //---------- extensions ------------\n\n        \n        // multi_1 extend kernel_1a\n        typedef     bit_stream_multi_1<kernel_1a>\n                    multi_1a;\n        typedef     bit_stream_multi_c<bit_stream_multi_1<kernel_1a_c> >\n                    multi_1a_c;\n\n    };\n}\n\n#endif // DLIB_BIT_STREAm_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bound_function_pointer/bound_function_pointer_kernel_1.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BOUND_FUNCTION_POINTER_KERNEl_1_\n#define DLIB_BOUND_FUNCTION_POINTER_KERNEl_1_\n\n#include \"../algs.h\"\n#include \"../member_function_pointer.h\"\n#include \"bound_function_pointer_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace bfp1_helpers\n    {\n        template <typename T> struct strip { typedef T type; };\n        template <typename T> struct strip<T&> { typedef T type; };\n\n    // ------------------------------------------------------------------------------------\n\n        class bound_function_helper_base_base\n        {\n        public:\n            virtual ~bound_function_helper_base_base(){}\n            virtual void call() const = 0;\n            virtual bool is_set() const = 0;\n            virtual void clone(void* ptr) const = 0;\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T1, typename T2, typename T3, typename T4>\n        class bound_function_helper_base : public bound_function_helper_base_base\n        {\n        public:\n            bound_function_helper_base():arg1(0), arg2(0), arg3(0), arg4(0) {}\n\n            typename strip<T1>::type* arg1;\n            typename strip<T2>::type* arg2;\n            typename strip<T3>::type* arg3;\n            typename strip<T4>::type* arg4;\n\n\n            member_function_pointer<T1,T2,T3,T4> mfp;\n        };\n\n    // ----------------\n\n        template <typename F, typename T1 = void, typename T2 = void, typename T3 = void, typename T4 = void>\n        class bound_function_helper : public bound_function_helper_base<T1,T2,T3,T4>\n        {\n        public:\n            void call() const\n            {\n                (*fp)(*this->arg1, *this->arg2, *this->arg3, *this->arg4);\n            }\n\n            typename strip<F>::type* fp;\n        };\n\n        template <typename T1, typename T2, typename T3, typename T4>\n        class bound_function_helper<void,T1,T2,T3,T4> : public bound_function_helper_base<T1,T2,T3,T4>\n        {\n        public:\n            void call() const\n            {\n                if (this->mfp)    this->mfp(*this->arg1, *this->arg2, *this->arg3, *this->arg4);\n                else if (fp) fp(*this->arg1, *this->arg2, *this->arg3, *this->arg4);\n            }\n\n            void (*fp)(T1, T2, T3, T4);\n        };\n\n    // ----------------\n\n        template <typename F>\n        class bound_function_helper<F,void,void,void,void> : public bound_function_helper_base<void,void,void,void>\n        {\n        public:\n            void call() const\n            {\n                (*fp)();\n            }\n\n            typename strip<F>::type* fp;\n        };\n\n        template <>\n        class bound_function_helper<void,void,void,void,void> : public bound_function_helper_base<void,void,void,void>\n        {\n        public:\n            void call() const\n            {\n                if (this->mfp)    this->mfp();\n                else if (fp) fp();\n            }\n\n            void (*fp)();\n        };\n\n    // ----------------\n\n        template <typename F, typename T1>\n        class bound_function_helper<F,T1,void,void,void> : public bound_function_helper_base<T1,void,void,void>\n        {\n        public:\n            void call() const\n            {\n                (*fp)(*this->arg1);\n            }\n\n            typename strip<F>::type* fp;\n        };\n\n        template <typename T1>\n        class bound_function_helper<void,T1,void,void,void> : public bound_function_helper_base<T1,void,void,void>\n        {\n        public:\n            void call() const\n            {\n                if (this->mfp)    this->mfp(*this->arg1);\n                else if (fp) fp(*this->arg1);\n            }\n\n            void (*fp)(T1);\n        };\n\n    // ----------------\n\n        template <typename F, typename T1, typename T2>\n        class bound_function_helper<F,T1,T2,void,void> : public bound_function_helper_base<T1,T2,void,void>\n        {\n        public:\n            void call() const\n            {\n                (*fp)(*this->arg1, *this->arg2);\n            }\n\n            typename strip<F>::type* fp;\n        };\n\n        template <typename T1, typename T2>\n        class bound_function_helper<void,T1,T2,void,void> : public bound_function_helper_base<T1,T2,void,void>\n        {\n        public:\n            void call() const\n            {\n                if (this->mfp)    this->mfp(*this->arg1, *this->arg2);\n                else if (fp) fp(*this->arg1, *this->arg2);\n            }\n\n            void (*fp)(T1, T2);\n        };\n\n    // ----------------\n\n        template <typename F, typename T1, typename T2, typename T3>\n        class bound_function_helper<F,T1,T2,T3,void> : public bound_function_helper_base<T1,T2,T3,void>\n        {\n        public:\n            void call() const\n            {\n                (*fp)(*this->arg1, *this->arg2, *this->arg3);\n            }\n\n            typename strip<F>::type* fp;\n        };\n\n        template <typename T1, typename T2, typename T3>\n        class bound_function_helper<void,T1,T2,T3,void> : public bound_function_helper_base<T1,T2,T3,void>\n        {\n        public:\n\n            void call() const\n            {\n                if (this->mfp)    this->mfp(*this->arg1, *this->arg2, *this->arg3);\n                else if (fp) fp(*this->arg1, *this->arg2, *this->arg3);\n            }\n\n            void (*fp)(T1, T2, T3);\n        };\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        class bound_function_helper_T : public T\n        {\n        public:\n            bound_function_helper_T(){ this->fp = 0;}\n\n            bool is_set() const\n            {\n                return this->fp != 0 || this->mfp.is_set();\n            }\n\n            template <unsigned long mem_size>\n            void safe_clone(stack_based_memory_block<mem_size>& buf)\n            {\n                // This is here just to validate the assumption that our block of memory we have made\n                // in bf_memory is the right size to store the data for this object.  If you\n                // get a compiler error on this line then email me :)\n                COMPILE_TIME_ASSERT(sizeof(bound_function_helper_T) <= mem_size);\n                clone(buf.get());\n            }\n\n            void clone   (void* ptr) const  \n            { \n                bound_function_helper_T* p = new(ptr) bound_function_helper_T(); \n                p->arg1 = this->arg1;\n                p->arg2 = this->arg2;\n                p->arg3 = this->arg3;\n                p->arg4 = this->arg4;\n                p->fp = this->fp;\n                p->mfp = this->mfp;\n            }\n        };\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class bound_function_pointer\n    {\n        typedef bfp1_helpers::bound_function_helper_T<bfp1_helpers::bound_function_helper<void,int> > bf_null_type;\n\n    public:\n\n        // These typedefs are here for backwards compatibility with previous versions of\n        // dlib.\n        typedef bound_function_pointer kernel_1a;\n        typedef bound_function_pointer kernel_1a_c;\n\n\n        bound_function_pointer (\n        ) { bf_null_type().safe_clone(bf_memory); }\n\n        bound_function_pointer ( \n            const bound_function_pointer& item\n        ) { item.bf()->clone(bf_memory.get()); }\n\n        ~bound_function_pointer()\n        { destroy_bf_memory(); }\n\n        bound_function_pointer& operator= (\n            const bound_function_pointer& item\n        ) { bound_function_pointer(item).swap(*this); return *this; }\n\n        void clear (\n        ) { bound_function_pointer().swap(*this); }\n\n        bool is_set (\n        ) const\n        {\n            return bf()->is_set();\n        }\n\n        void swap (\n            bound_function_pointer& item\n        )\n        {\n            // make a temp copy of item\n            bound_function_pointer temp(item);\n\n            // destory the stuff in item\n            item.destroy_bf_memory();\n            // copy *this into item\n            bf()->clone(item.bf_memory.get());\n\n            // destory the stuff in this \n            destroy_bf_memory();\n            // copy temp into *this\n            temp.bf()->clone(bf_memory.get());\n        }\n\n        void operator() (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_set() == true ,\n                \"\\tvoid bound_function_pointer::operator()\"\n                << \"\\n\\tYou must call set() before you can use this function\"\n                << \"\\n\\tthis: \" << this\n            );\n\n            bf()->call();\n        }\n\n    private:\n        struct dummy{ void nonnull() {}};\n        typedef void (dummy::*safe_bool)();\n\n    public:\n        operator safe_bool () const { return is_set() ? &dummy::nonnull : 0; }\n        bool operator!() const { return !is_set(); }\n\n    // -------------------------------------------\n    //      set function object overloads\n    // -------------------------------------------\n\n        template <typename F>\n        void set (\n            F& function_object\n        )\n        {\n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<F> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.fp = &function_object;\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename F, typename A1 >\n        void set (\n            F& function_object,\n            A1& arg1\n        )\n        {\n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<F,A1> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.fp = &function_object;\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename F, typename A1, typename A2 >\n        void set (\n            F& function_object,\n            A1& arg1,\n            A2& arg2\n        )\n        {\n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<F,A1,A2> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.fp = &function_object;\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename F, typename A1, typename A2, typename A3 >\n        void set (\n            F& function_object,\n            A1& arg1,\n            A2& arg2,\n            A3& arg3\n        )\n        {\n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<F,A1,A2,A3> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.arg3 = &arg3;\n            temp.fp = &function_object;\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename F, typename A1, typename A2, typename A3, typename A4>\n        void set (\n            F& function_object,\n            A1& arg1,\n            A2& arg2,\n            A3& arg3,\n            A4& arg4\n        )\n        {\n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<F,A1,A2,A3,A4> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.arg3 = &arg3;\n            temp.arg4 = &arg4;\n            temp.fp = &function_object;\n\n            temp.safe_clone(bf_memory);\n        }\n\n    // -------------------------------------------\n    //      set mfp overloads\n    // -------------------------------------------\n\n        template <typename T>\n        void set (\n            T& object,\n            void (T::*funct)()\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename T >\n        void set (\n            const T& object,\n            void (T::*funct)()const\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n    // -------------------------------------------\n\n        template <typename T, typename T1, typename A1 >\n        void set (\n            T& object,\n            void (T::*funct)(T1),\n            A1& arg1\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename T, typename T1, typename A1 >\n        void set (\n            const T& object,\n            void (T::*funct)(T1)const,\n            A1& arg1\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n    // ----------------\n\n        template <typename T, typename T1, typename A1,\n        typename T2, typename A2>\n        void set (\n            T& object,\n            void (T::*funct)(T1, T2),\n            A1& arg1,\n            A2& arg2\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1,T2> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename T, typename T1, typename A1,\n        typename T2, typename A2>\n        void set (\n            const T& object,\n            void (T::*funct)(T1, T2)const,\n            A1& arg1,\n            A2& arg2\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1,T2> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n    // ----------------\n\n        template <typename T, typename T1, typename A1,\n        typename T2, typename A2,\n        typename T3, typename A3>\n        void set (\n            T& object,\n            void (T::*funct)(T1, T2, T3),\n            A1& arg1,\n            A2& arg2,\n            A3& arg3\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1,T2,T3> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.arg3 = &arg3;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename T, typename T1, typename A1,\n        typename T2, typename A2,\n        typename T3, typename A3>\n        void set (\n            const T& object,\n            void (T::*funct)(T1, T2, T3)const,\n            A1& arg1,\n            A2& arg2,\n            A3& arg3\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1,T2,T3> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.arg3 = &arg3;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n    // ----------------\n\n        template <typename T, typename T1, typename A1,\n        typename T2, typename A2,\n        typename T3, typename A3,\n        typename T4, typename A4>\n        void set (\n            T& object,\n            void (T::*funct)(T1, T2, T3, T4),\n            A1& arg1,\n            A2& arg2,\n            A3& arg3,\n            A4& arg4\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1,T2,T3,T4> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.arg3 = &arg3;\n            temp.arg4 = &arg4;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename T, typename T1, typename A1,\n        typename T2, typename A2,\n        typename T3, typename A3,\n        typename T4, typename A4>\n        void set (\n            const T& object,\n            void (T::*funct)(T1, T2, T3, T4)const,\n            A1& arg1,\n            A2& arg2,\n            A3& arg3,\n            A4& arg4\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1,T2,T3,T4> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.arg3 = &arg3;\n            temp.arg4 = &arg4;\n            temp.mfp.set(object,funct);\n\n            temp.safe_clone(bf_memory);\n        }\n\n    // -------------------------------------------\n    //      set fp overloads\n    // -------------------------------------------\n\n        void set (\n            void (*funct)()\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.fp = funct;\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename T1, typename A1>\n        void set (\n            void (*funct)(T1),\n            A1& arg1\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.fp = funct;\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename T1, typename A1,\n        typename T2, typename A2>\n        void set (\n            void (*funct)(T1, T2),\n            A1& arg1,\n            A2& arg2\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1,T2> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.fp = funct;\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename T1, typename A1,\n        typename T2, typename A2,\n        typename T3, typename A3>\n        void set (\n            void (*funct)(T1, T2, T3),\n            A1& arg1,\n            A2& arg2,\n            A3& arg3\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1,T2,T3> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.arg3 = &arg3;\n            temp.fp = funct;\n\n            temp.safe_clone(bf_memory);\n        }\n\n        template <typename T1, typename A1,\n        typename T2, typename A2,\n        typename T3, typename A3,\n        typename T4, typename A4>\n        void set (\n            void (*funct)(T1, T2, T3, T4),\n            A1& arg1,\n            A2& arg2,\n            A3& arg3,\n            A4& arg4\n        )\n        {\n            using namespace bfp1_helpers;\n            destroy_bf_memory();\n            typedef bound_function_helper_T<bound_function_helper<void,T1,T2,T3,T4> > bf_helper_type;\n\n            bf_helper_type temp;\n            temp.arg1 = &arg1;\n            temp.arg2 = &arg2;\n            temp.arg3 = &arg3;\n            temp.arg4 = &arg4;\n            temp.fp = funct;\n\n            temp.safe_clone(bf_memory);\n        }\n\n    // -------------------------------------------\n\n    private:\n\n        stack_based_memory_block<sizeof(bf_null_type)> bf_memory;\n\n        void destroy_bf_memory (\n        )\n        {\n            // Honestly, this probably doesn't even do anything but I'm putting\n            // it here just for good measure.\n            bf()->~bound_function_helper_base_base();\n        }\n\n        bfp1_helpers::bound_function_helper_base_base*       bf ()       \n        { return static_cast<bfp1_helpers::bound_function_helper_base_base*>(bf_memory.get()); }\n\n        const bfp1_helpers::bound_function_helper_base_base* bf () const \n        { return static_cast<const bfp1_helpers::bound_function_helper_base_base*>(bf_memory.get()); }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        bound_function_pointer& a,\n        bound_function_pointer& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BOUND_FUNCTION_POINTER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bound_function_pointer/bound_function_pointer_kernel_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BOUND_FUNCTION_POINTER_KERNEl_ABSTRACT_\n#ifdef DLIB_BOUND_FUNCTION_POINTER_KERNEl_ABSTRACT_\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class bound_function_pointer\n    {\n        /*!\n            INITIAL VALUE\n                is_set() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a function with all its arguments bound to \n                specific objects.  For example:\n\n                    void test(int& var) { var = var+1; }\n\n                    bound_function_pointer funct;\n\n                    int a = 4; \n                    funct.set(test,a); // bind the variable a to the first argument of the test() function \n\n                    // at this point a == 4\n                    funct();\n                    // after funct() is called a == 5\n        !*/\n\n    public:\n\n        bound_function_pointer (  \n        );\n        /*!\n            ensures                \n                - #*this is properly initialized\n        !*/\n\n        bound_function_pointer(\n            const bound_function_pointer& item\n        );\n        /*!\n            ensures\n                - *this == item\n        !*/\n\n        ~bound_function_pointer (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        bound_function_pointer& operator=(\n            const bound_function_pointer& item\n        );\n        /*!\n            ensures\n                - *this == item\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n        !*/\n\n        bool is_set (\n        ) const;\n        /*!\n            ensures\n                - if (this->set() has been called) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        operator some_undefined_pointer_type (\n        ) const;\n        /*!\n            ensures\n                - if (is_set()) then\n                    - returns a non 0 value\n                - else\n                    - returns a 0 value\n        !*/\n\n        bool operator! (\n        ) const;\n        /*!\n            ensures\n                - returns !is_set()\n        !*/\n\n        void operator () (\n        ) const;\n        /*!\n            requires\n                - is_set() == true\n            ensures\n                - calls the bound function on the object(s) specified by the last \n                  call to this->set()\n            throws\n                - any exception thrown by the function specified by\n                  the previous call to this->set().\n                    If any of these exceptions are thrown then the call to this \n                    function will have no effect on *this.                  \n        !*/\n\n        void swap (\n            bound_function_pointer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n        // ----------------------\n\n        template <typename F>\n        void set (\n            F& function_object\n        );\n        /*!\n            requires\n                - function_object() is a valid expression \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call function_object()\n                  (This seems pointless but it is a useful base case)\n        !*/\n\n        template < typename T>\n        void set (\n            T& object,\n            void (T::*funct)()\n        );\n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)()\n        !*/\n\n        template < typename T>\n        void set (\n            const T& object,\n            void (T::*funct)()const\n        );\n        /*!\n            requires\n                - funct == a valid bound function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)()\n        !*/\n\n        void set (\n            void (*funct)()\n        );\n        /*!\n            requires\n                - funct == a valid function pointer \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call funct()\n        !*/\n\n        // ----------------------\n\n        template <typename F, typename A1 >\n        void set (\n            F& function_object,\n            A1& arg1\n        );\n        /*!\n            requires\n                - function_object(arg1) is a valid expression \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call function_object(arg1)\n        !*/\n\n        template < typename T, typename T1, typename A1 >\n        void set (\n            T& object,\n            void (T::*funct)(T1),\n            A1& arg1\n        );\n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)(arg1)\n        !*/\n\n        template < typename T, typename T1, typename A1 >\n        void set (\n            const T& object,\n            void (T::*funct)(T1)const,\n            A1& arg1\n        );\n        /*!\n            requires\n                - funct == a valid bound function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)(arg1)\n        !*/\n\n        template <typename T1, typename A1>\n        void set (\n            void (*funct)(T1),\n            A1& arg1\n        );\n        /*!\n            requires\n                - funct == a valid function pointer \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call funct(arg1)\n        !*/\n\n        // ----------------------\n        template <typename F, typename A1, typename A2 >\n        void set (\n            F& function_object,\n            A1& arg1,\n            A2& arg2\n        );\n        /*!\n            requires\n                - function_object(arg1,arg2) is a valid expression \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call function_object(arg1,arg2)\n        !*/\n\n        template < typename T, typename T1, typename A1,\n                               typename T2, typename A2>\n        void set (\n            T& object,\n            void (T::*funct)(T1,T2),\n            A1& arg1,\n            A2& arg2\n        );\n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)(arg1,arg2)\n        !*/\n\n        template < typename T, typename T1, typename A1, \n                               typename T2, typename A2>\n        void set (\n            const T& object,\n            void (T::*funct)(T1,T2)const,\n            A1& arg1,\n            A2& arg2\n        );\n        /*!\n            requires\n                - funct == a valid bound function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)(arg1,arg2)\n        !*/\n\n        template <typename T1, typename A1,\n                  typename T2, typename A2>\n        void set (\n            void (*funct)(T1,T2),\n            A1& arg1,\n            A2& arg2\n        );\n        /*!\n            requires\n                - funct == a valid function pointer \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call funct(arg1,arg2)\n        !*/\n\n        // ----------------------\n\n        template <typename F, typename A1, typename A2, typename A3 >\n        void set (\n            F& function_object,\n            A1& arg1,\n            A2& arg2,\n            A3& arg3\n        );\n        /*!\n            requires\n                - function_object(arg1,arg2,arg3) is a valid expression \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call function_object(arg1,arg2,arg3)\n        !*/\n\n        template < typename T, typename T1, typename A1,\n                               typename T2, typename A2,\n                               typename T3, typename A3>\n        void set (\n            T& object,\n            void (T::*funct)(T1,T2,T3),\n            A1& arg1,\n            A2& arg2,\n            A3& arg3\n        );\n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)(arg1,arg2,arg3)\n        !*/\n\n        template < typename T, typename T1, typename A1,\n                               typename T2, typename A2,\n                               typename T3, typename A3>\n        void set (\n            const T& object,\n            void (T::*funct)(T1,T2,T3)const,\n            A1& arg1,\n            A2& arg2,\n            A3& arg3\n        );\n        /*!\n            requires\n                - funct == a valid bound function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)(arg1,arg2,arg3)\n        !*/\n\n        template <typename T1, typename A1,\n                  typename T2, typename A2,\n                  typename T3, typename A3>\n        void set (\n            void (*funct)(T1,T2,T3),\n            A1& arg1,\n            A2& arg2,\n            A3& arg3\n        );\n        /*!\n            requires\n                - funct == a valid function pointer \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call funct(arg1,arg2,arg3)\n        !*/\n\n        // ----------------------\n\n        template <typename F, typename A1, typename A2, typename A3, typename A4>\n        void set (\n            F& function_object,\n            A1& arg1,\n            A2& arg2,\n            A3& arg3,\n            A4& arg4\n        );\n        /*!\n            requires\n                - function_object(arg1,arg2,arg3,arg4) is a valid expression \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call function_object(arg1,arg2,arg3,arg4)\n        !*/\n\n        template < typename T, typename T1, typename A1,\n                               typename T2, typename A2,\n                               typename T3, typename A3,\n                               typename T4, typename A4>\n        void set (\n            T& object,\n            void (T::*funct)(T1,T2,T3,T4),\n            A1& arg1,\n            A2& arg2,\n            A3& arg3,\n            A4& arg4\n        );\n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)(arg1,arg2,arg3,arg4)\n        !*/\n\n        template < typename T, typename T1, typename A1,\n                               typename T2, typename A2,\n                               typename T3, typename A3,\n                               typename T4, typename A4>\n        void set (\n            const T& object,\n            void (T::*funct)(T1,T2,T3,T4)const,\n            A1& arg1,\n            A2& arg2,\n            A3& arg3,\n            A4& arg4\n        );\n        /*!\n            requires\n                - funct == a valid bound function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*funct)(arg1,arg2,arg3,arg4)\n        !*/\n\n        template <typename T1, typename A1,\n                  typename T2, typename A2,\n                  typename T3, typename A3,\n                  typename T4, typename A4>\n        void set (\n            void (*funct)(T1,T2,T3,T4),\n            A1& arg1,\n            A2& arg2,\n            A3& arg3,\n            A4& arg4\n        );\n        /*!\n            requires\n                - funct == a valid function pointer \n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call funct(arg1,arg2,arg3,arg4)\n        !*/\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        bound_function_pointer& a,\n        bound_function_pointer& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BOUND_FUNCTION_POINTER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bound_function_pointer.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BOUND_FUNCTION_POINTEr_\n#define DLIB_BOUND_FUNCTION_POINTEr_\n\n#include \"bound_function_pointer/bound_function_pointer_kernel_1.h\"\n\n#endif // DLIB_BOUND_FUNCTION_POINTEr_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bridge/bridge.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BRIDGe_Hh_\n#define DLIB_BRIDGe_Hh_\n\n#include \"bridge_abstract.h\"\n#include <string>\n#include \"../pipe.h\"\n#include \"../threads.h\"\n#include \"../smart_pointers.h\"\n#include \"../serialize.h\"\n#include \"../sockets.h\"\n#include \"../sockstreambuf.h\"\n#include \"../logger.h\"\n#include \"../algs.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n\n    struct connect_to_ip_and_port\n    {\n        connect_to_ip_and_port (\n            const std::string& ip_,\n            unsigned short port_\n        ): ip(ip_), port(port_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_ip_address(ip) && port != 0,\n                \"\\t connect_to_ip_and_port()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t ip:   \" << ip \n                << \"\\n\\t port: \" << port\n                << \"\\n\\t this: \" << this\n                );\n        }\n\n    private:\n        friend class bridge;\n        const std::string ip;\n        const unsigned short port;\n    };\n\n    inline connect_to_ip_and_port connect_to (\n        const network_address& addr\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(addr.port != 0,\n            \"\\t connect_to_ip_and_port()\"\n            << \"\\n\\t The TCP port to connect to can't be 0.\"\n            << \"\\n\\t addr.port: \" << addr.port\n            );\n\n        if (is_ip_address(addr.host_address))\n        {\n            return connect_to_ip_and_port(addr.host_address, addr.port);\n        }\n        else\n        {\n            std::string ip;\n            if(hostname_to_ip(addr.host_address,ip))\n                throw socket_error(ERESOLVE,\"unable to resolve '\" + addr.host_address + \"' in connect_to()\");\n\n            return connect_to_ip_and_port(ip, addr.port);\n        }\n    }\n\n    struct listen_on_port\n    {\n        listen_on_port(\n            unsigned short port_\n        ) : port(port_) \n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( port != 0,\n                \"\\t listen_on_port()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t port: \" << port\n                << \"\\n\\t this: \" << this\n                );\n        }\n\n    private:\n        friend class bridge;\n        const unsigned short port;\n    };\n\n    template <typename pipe_type>\n    struct bridge_transmit_decoration\n    {\n        bridge_transmit_decoration ( \n            pipe_type& p_\n        ) : p(p_) {}\n\n    private:\n        friend class bridge;\n        pipe_type& p;\n    };\n\n    template <typename pipe_type>\n    bridge_transmit_decoration<pipe_type> transmit ( pipe_type& p) { return bridge_transmit_decoration<pipe_type>(p); }\n\n    template <typename pipe_type>\n    struct bridge_receive_decoration\n    {\n        bridge_receive_decoration ( \n            pipe_type& p_\n        ) : p(p_) {}\n\n    private:\n        friend class bridge;\n        pipe_type& p;\n    };\n\n    template <typename pipe_type>\n    bridge_receive_decoration<pipe_type> receive ( pipe_type& p) { return bridge_receive_decoration<pipe_type>(p); }\n\n// ----------------------------------------------------------------------------------------\n\n    struct bridge_status\n    {\n        bridge_status() : is_connected(false), foreign_port(0){}\n\n        bool is_connected;\n        unsigned short foreign_port;\n        std::string foreign_ip;\n    };\n\n    inline void serialize ( const bridge_status& , std::ostream& )\n    {\n        throw serialization_error(\"It is illegal to serialize bridge_status objects.\");\n    }\n\n    inline void deserialize ( bridge_status& , std::istream& )\n    {\n        throw serialization_error(\"It is illegal to serialize bridge_status objects.\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        class impl_bridge_base\n        {\n        public:\n\n            virtual ~impl_bridge_base() {}\n\n            virtual bridge_status get_bridge_status (\n            ) const = 0;\n        };\n\n        template <\n            typename transmit_pipe_type,\n            typename receive_pipe_type\n            >\n        class impl_bridge : public impl_bridge_base, private noncopyable, private multithreaded_object\n        {\n            /*!\n                CONVENTION\n                    - if (list) then\n                        - this object is supposed to be listening on the list object for incoming\n                          connections when not connected.\n                    - else\n                        - this object is supposed to be attempting to connect to ip:port when\n                          not connected.\n\n                    - get_bridge_status() == current_bs\n            !*/\n        public:\n\n            impl_bridge (\n                unsigned short listen_port,\n                transmit_pipe_type* transmit_pipe_,\n                receive_pipe_type* receive_pipe_\n            ) :\n                s(m),\n                receive_thread_active(false),\n                transmit_thread_active(false),\n                port(0),\n                transmit_pipe(transmit_pipe_),\n                receive_pipe(receive_pipe_),\n                dlog(\"dlib.bridge\"),\n                keepalive_code(0),\n                message_code(1)\n            {\n                int status = create_listener(list, listen_port);\n                if (status == PORTINUSE)\n                {\n                    std::ostringstream sout;\n                    sout << \"Error, the port \" << listen_port << \" is already in use.\";\n                    throw socket_error(EPORT_IN_USE, sout.str());\n                }\n                else if (status == OTHER_ERROR)\n                {\n                    throw socket_error(\"Unable to create listening socket for an unknown reason.\");\n                }\n\n                register_thread(*this, &impl_bridge::transmit_thread);\n                register_thread(*this, &impl_bridge::receive_thread);\n                register_thread(*this, &impl_bridge::connect_thread);\n\n                start();\n            }\n\n            impl_bridge (\n                const std::string ip_,\n                unsigned short port_,\n                transmit_pipe_type* transmit_pipe_,\n                receive_pipe_type* receive_pipe_\n            ) :\n                s(m),\n                receive_thread_active(false),\n                transmit_thread_active(false),\n                port(port_),\n                ip(ip_),\n                transmit_pipe(transmit_pipe_),\n                receive_pipe(receive_pipe_),\n                dlog(\"dlib.bridge\"),\n                keepalive_code(0),\n                message_code(1)\n            {\n                register_thread(*this, &impl_bridge::transmit_thread);\n                register_thread(*this, &impl_bridge::receive_thread);\n                register_thread(*this, &impl_bridge::connect_thread);\n\n                start();\n            }\n\n            ~impl_bridge()\n            {\n                // tell the threads to terminate\n                stop();\n\n                // save current pipe enabled status so we can restore it to however\n                // it was before this destructor ran.\n                bool transmit_enabled = true;\n                bool receive_enabled = true;\n\n                // make any calls blocked on a pipe return immediately.\n                if (transmit_pipe)\n                {\n                    transmit_enabled = transmit_pipe->is_dequeue_enabled();\n                    transmit_pipe->disable_dequeue();\n                }\n                if (receive_pipe)\n                {\n                    receive_enabled = receive_pipe->is_enqueue_enabled();\n                    receive_pipe->disable_enqueue();\n                }\n\n                {\n                    auto_mutex lock(m);\n                    s.broadcast();\n                    // Shutdown the connection if we have one.  This will cause\n                    // all blocked I/O calls to return an error.\n                    if (con)\n                        con->shutdown();\n                }\n\n                // wait for all the threads to terminate.\n                wait();\n\n                if (transmit_pipe && transmit_enabled)\n                    transmit_pipe->enable_dequeue();\n                if (receive_pipe && receive_enabled)\n                    receive_pipe->enable_enqueue();\n            }\n\n            bridge_status get_bridge_status (\n            ) const\n            {\n                auto_mutex lock(current_bs_mutex);\n                return current_bs;\n            }\n\n        private:\n\n\n            template <typename pipe_type>\n            typename enable_if<is_convertible<bridge_status, typename pipe_type::type> >::type  enqueue_bridge_status (\n                pipe_type* p,\n                const bridge_status& status\n            )\n            {\n                if (p)\n                {\n                    typename pipe_type::type temp(status);\n                    p->enqueue(temp);\n                }\n            }\n\n            template <typename pipe_type>\n            typename disable_if<is_convertible<bridge_status, typename pipe_type::type> >::type  enqueue_bridge_status (\n                pipe_type* ,\n                const bridge_status& \n            )\n            {\n            }\n\n            void connect_thread (\n            )\n            {\n                while (!should_stop())\n                {\n                    auto_mutex lock(m);\n                    int status = OTHER_ERROR;\n                    if (list)\n                    {\n                        do\n                        {\n                            status = list->accept(con, 1000);\n                        } while (status == TIMEOUT && !should_stop());\n                    }\n                    else\n                    {\n                        status = create_connection(con, port, ip);\n                    }\n                    \n                    if (should_stop())\n                        break;\n\n                    if (status != 0)\n                    {\n                        // The last connection attempt failed.  So pause for a little bit before making another attempt.\n                        s.wait_or_timeout(2000);\n                        continue;\n                    }\n\n                    dlog << LINFO << \"Established new connection to \" << con->get_foreign_ip() << \":\" << con->get_foreign_port() << \".\";\n\n                    bridge_status temp_bs;\n                    {   auto_mutex lock(current_bs_mutex);\n                        current_bs.is_connected = true;\n                        current_bs.foreign_port = con->get_foreign_port();\n                        current_bs.foreign_ip = con->get_foreign_ip();\n                        temp_bs = current_bs;\n                    }\n                    enqueue_bridge_status(receive_pipe, temp_bs);\n\n\n                    receive_thread_active = true;\n                    transmit_thread_active = true;\n\n                    s.broadcast();\n\n                    // Wait for the transmit and receive threads to end before we continue.\n                    // This way we don't invalidate the con pointer while it is in use.\n                    while (receive_thread_active || transmit_thread_active)\n                        s.wait();\n\n\n                    dlog << LINFO << \"Closed connection to \" << con->get_foreign_ip() << \":\" << con->get_foreign_port() << \".\";\n                    {   auto_mutex lock(current_bs_mutex);\n                        current_bs.is_connected = false;\n                        current_bs.foreign_port = con->get_foreign_port();\n                        current_bs.foreign_ip = con->get_foreign_ip();\n                        temp_bs = current_bs;\n                    }\n                    enqueue_bridge_status(receive_pipe, temp_bs);\n                }\n\n            }\n\n\n            void receive_thread (\n            )\n            {\n                while (true)\n                {\n                    // wait until we have a connection\n                    {   auto_mutex lock(m);\n                        while (!receive_thread_active && !should_stop())\n                        {\n                            s.wait();\n                        }\n\n                        if (should_stop())\n                            break;\n                    }\n\n\n\n                    try\n                    {\n                        if (receive_pipe)\n                        {\n                            sockstreambuf buf(con);\n                            std::istream in(&buf);\n                            typename receive_pipe_type::type item;\n                            // This isn't necessary but doing it avoids a warning about\n                            // item being uninitialized sometimes.\n                            assign_zero_if_built_in_scalar_type(item);\n\n                            while (in.peek() != EOF)\n                            {\n                                unsigned char code;\n                                in.read((char*)&code, sizeof(code));\n                                if (code == message_code)\n                                {\n                                    deserialize(item, in);\n                                    receive_pipe->enqueue(item);\n                                }\n                            }\n                        }\n                        else\n                        {\n                            // Since we don't have a receive pipe to put messages into we will\n                            // just read the bytes from the connection and ignore them.\n                            char buf[1000];\n                            while (con->read(buf, sizeof(buf)) > 0) ;\n                        }\n                    }\n                    catch (std::bad_alloc& )\n                    {\n                        dlog << LERROR << \"std::bad_alloc thrown while deserializing message from \" \n                            << con->get_foreign_ip() << \":\" << con->get_foreign_port();\n                    }\n                    catch (dlib::serialization_error& e)\n                    {\n                        dlog << LERROR << \"dlib::serialization_error thrown while deserializing message from \" \n                            << con->get_foreign_ip() << \":\" << con->get_foreign_port() \n                            << \".\\nThe exception error message is: \\n\" << e.what();\n                    }\n                    catch (std::exception& e)\n                    {\n                        dlog << LERROR << \"std::exception thrown while deserializing message from \" \n                            << con->get_foreign_ip() << \":\" << con->get_foreign_port() \n                            << \".\\nThe exception error message is: \\n\" << e.what();\n                    }\n\n\n\n\n                    con->shutdown();\n                    auto_mutex lock(m);\n                    receive_thread_active = false;\n                    s.broadcast();\n                }\n\n                auto_mutex lock(m);\n                receive_thread_active = false;\n                s.broadcast();\n            }\n\n            void transmit_thread (\n            )\n            {\n                while (true)\n                {\n                    // wait until we have a connection\n                    {   auto_mutex lock(m);\n                        while (!transmit_thread_active && !should_stop())\n                        {\n                            s.wait();\n                        }\n\n                        if (should_stop())\n                            break;\n                    }\n\n\n\n                    try\n                    {\n                        sockstreambuf buf(con);\n                        std::ostream out(&buf);\n                        typename transmit_pipe_type::type item;\n                        // This isn't necessary but doing it avoids a warning about\n                        // item being uninitialized sometimes.\n                        assign_zero_if_built_in_scalar_type(item);\n\n\n                        while (out)\n                        {\n                            bool dequeue_timed_out = false;\n                            if (transmit_pipe )\n                            {\n                                if (transmit_pipe->dequeue_or_timeout(item,1000))\n                                {\n                                    out.write((char*)&message_code, sizeof(message_code));\n                                    serialize(item, out);\n                                    if (transmit_pipe->size() == 0)\n                                        out.flush();\n\n                                    continue;\n                                }\n\n                                dequeue_timed_out = (transmit_pipe->is_enabled() && transmit_pipe->is_dequeue_enabled());\n                            }\n\n                            // Pause for about a second.  Note that we use a wait_or_timeout() call rather \n                            // than sleep() here because we want to wake up immediately if this object is \n                            // being destructed rather than hang for a second.\n                            if (!dequeue_timed_out)\n                            {\n                                auto_mutex lock(m);\n                                if (should_stop())\n                                    break;\n\n                                s.wait_or_timeout(1000);\n                            }\n                            // Just send the keepalive byte periodically so we can\n                            // tell if the connection is alive. \n                            out.write((char*)&keepalive_code, sizeof(keepalive_code));\n                            out.flush();\n                        }\n                    }\n                    catch (std::bad_alloc& )\n                    {\n                        dlog << LERROR << \"std::bad_alloc thrown while serializing message to \" \n                            << con->get_foreign_ip() << \":\" << con->get_foreign_port();\n                    }\n                    catch (dlib::serialization_error& e)\n                    {\n                        dlog << LERROR << \"dlib::serialization_error thrown while serializing message to \" \n                            << con->get_foreign_ip() << \":\" << con->get_foreign_port() \n                            << \".\\nThe exception error message is: \\n\" << e.what();\n                    }\n                    catch (std::exception& e)\n                    {\n                        dlog << LERROR << \"std::exception thrown while serializing message to \" \n                            << con->get_foreign_ip() << \":\" << con->get_foreign_port() \n                            << \".\\nThe exception error message is: \\n\" << e.what();\n                    }\n\n\n\n\n                    con->shutdown();\n                    auto_mutex lock(m);\n                    transmit_thread_active = false;\n                    s.broadcast();\n                }\n\n                auto_mutex lock(m);\n                transmit_thread_active = false;\n                s.broadcast();\n            }\n\n            mutex m;\n            signaler s;\n            bool receive_thread_active;\n            bool transmit_thread_active;\n            scoped_ptr<connection> con;\n            scoped_ptr<listener> list;\n            const unsigned short port;\n            const std::string ip;\n            transmit_pipe_type* const transmit_pipe;\n            receive_pipe_type* const receive_pipe;\n            logger dlog;\n            const unsigned char keepalive_code;\n            const unsigned char message_code;\n\n            mutex current_bs_mutex;\n            bridge_status current_bs;\n        };\n    }\n\n\n// ----------------------------------------------------------------------------------------\n\n    class bridge : noncopyable\n    {\n    public:\n\n        bridge () {}\n\n        template < typename T, typename U, typename V >\n        bridge (\n            T network_parameters,\n            U pipe1,\n            V pipe2 \n        ) { reconfigure(network_parameters,pipe1,pipe2); }\n\n        template < typename T, typename U>\n        bridge (\n            T network_parameters,\n            U pipe \n        ) { reconfigure(network_parameters,pipe); }\n\n\n        void clear (\n        )\n        {\n            pimpl.reset();\n        }\n\n        template < typename T, typename R >\n        void reconfigure (\n            listen_on_port network_parameters,\n            bridge_transmit_decoration<T> transmit_pipe,\n            bridge_receive_decoration<R> receive_pipe\n        ) { pimpl.reset(); pimpl.reset(new impl::impl_bridge<T,R>(network_parameters.port, &transmit_pipe.p, &receive_pipe.p)); }\n\n        template < typename T, typename R >\n        void reconfigure (\n            listen_on_port network_parameters,\n            bridge_receive_decoration<R> receive_pipe,\n            bridge_transmit_decoration<T> transmit_pipe\n        ) { pimpl.reset(); pimpl.reset(new impl::impl_bridge<T,R>(network_parameters.port, &transmit_pipe.p, &receive_pipe.p)); }\n\n        template < typename T >\n        void reconfigure (\n            listen_on_port network_parameters,\n            bridge_transmit_decoration<T> transmit_pipe\n        ) { pimpl.reset(); pimpl.reset(new impl::impl_bridge<T,T>(network_parameters.port, &transmit_pipe.p, 0)); }\n\n        template < typename R >\n        void reconfigure (\n            listen_on_port network_parameters,\n            bridge_receive_decoration<R> receive_pipe\n        ) { pimpl.reset(); pimpl.reset(new impl::impl_bridge<R,R>(network_parameters.port, 0, &receive_pipe.p)); }\n\n\n\n\n        template < typename T, typename R >\n        void reconfigure (\n            connect_to_ip_and_port network_parameters,\n            bridge_transmit_decoration<T> transmit_pipe,\n            bridge_receive_decoration<R> receive_pipe\n        ) { pimpl.reset(); pimpl.reset(new impl::impl_bridge<T,R>(network_parameters.ip, network_parameters.port, &transmit_pipe.p, &receive_pipe.p)); }\n\n        template < typename T, typename R >\n        void reconfigure (\n            connect_to_ip_and_port network_parameters,\n            bridge_receive_decoration<R> receive_pipe,\n            bridge_transmit_decoration<T> transmit_pipe\n        ) { pimpl.reset(); pimpl.reset(new impl::impl_bridge<T,R>(network_parameters.ip, network_parameters.port, &transmit_pipe.p, &receive_pipe.p)); }\n\n        template < typename R >\n        void reconfigure (\n            connect_to_ip_and_port network_parameters,\n            bridge_receive_decoration<R> receive_pipe\n        ) { pimpl.reset(); pimpl.reset(new impl::impl_bridge<R,R>(network_parameters.ip, network_parameters.port, 0, &receive_pipe.p)); }\n\n        template < typename T >\n        void reconfigure (\n            connect_to_ip_and_port network_parameters,\n            bridge_transmit_decoration<T> transmit_pipe\n        ) { pimpl.reset(); pimpl.reset(new impl::impl_bridge<T,T>(network_parameters.ip, network_parameters.port, &transmit_pipe.p, 0)); }\n\n\n        bridge_status get_bridge_status (\n        ) const\n        {\n            if (pimpl)\n                return pimpl->get_bridge_status();\n            else\n                return bridge_status();\n        }\n\n    private:\n\n        scoped_ptr<impl::impl_bridge_base> pimpl;\n    };\n\n// ---------------------------------------------------------------------------------------- \n\n}\n\n#endif // DLIB_BRIDGe_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bridge/bridge_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BRIDGe_ABSTRACT_\n#ifdef DLIB_BRIDGe_ABSTRACT_\n\n#include <string>\n#include \"../pipe/pipe_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n\n    struct connect_to_ip_and_port\n    {\n        connect_to_ip_and_port (\n            const std::string& ip,\n            unsigned short port\n        );\n        /*!\n            requires\n                - is_ip_address(ip) == true\n                - port != 0\n            ensures\n                - this object will represent a request to make a TCP connection\n                  to the given IP address and port number.\n        !*/\n    };\n\n    connect_to_ip_and_port connect_to (\n        const network_address& addr\n    );\n    /*!\n        requires\n            - addr.port != 0\n        ensures\n            - converts the given network_address object into a connect_to_ip_and_port\n              object.\n    !*/\n\n    struct listen_on_port\n    {\n        listen_on_port(\n            unsigned short port\n        );\n        /*!\n            requires\n                - port != 0\n            ensures\n                - this object will represent a request to listen on the given\n                  port number for incoming TCP connections.\n        !*/\n    };\n\n    template <\n        typename pipe_type\n        >\n    bridge_transmit_decoration<pipe_type> transmit ( \n        pipe_type& p\n    ); \n    /*!\n        requires\n            - pipe_type is some kind of dlib::pipe object\n            - the objects in the pipe must be serializable\n        ensures\n            - Adds a type decoration to the given pipe, marking it as a transmit pipe, and \n              then returns it.  \n    !*/\n\n    template <\n        typename pipe_type\n        >\n    bridge_receive_decoration<pipe_type> receive ( \n        pipe_type& p\n    );\n    /*!\n        requires\n            - pipe_type is some kind of dlib::pipe object\n            - the objects in the pipe must be serializable\n        ensures\n            - Adds a type decoration to the given pipe, marking it as a receive pipe, and \n              then returns it.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    struct bridge_status\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This simple struct represents the state of a bridge object.  A\n                bridge is either connected or not.  If it is connected then it\n                is connected to a foreign host with an IP address and port number\n                as indicated by this object.\n        !*/\n        \n        bridge_status(\n        ); \n        /*!\n            ensures\n                - #is_connected == false\n                - #foreign_port == 0\n                - #foreign_ip == \"\"\n        !*/\n\n        bool is_connected;\n        unsigned short foreign_port;\n        std::string foreign_ip;\n    };\n\n// ---------------------------------------------------------------------------------------- \n\n    class bridge : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for bridging a dlib::pipe object between\n                two network connected applications.  \n\n\n                Note also that this object contains a dlib::logger object\n                which will log various events taking place inside a bridge.\n                If you want to see these log messages then enable the logger\n                named \"dlib.bridge\".\n\n            \n            BRIDGE PROTOCOL DETAILS\n                The bridge object creates a single TCP connection between\n                two applications.  Whenever it sends an object from a pipe\n                over a TCP connection it sends a byte with the value 1 followed \n                immediately by the serialized copy of the object from the pipe. \n                The serialization is performed by calling the global serialize()\n                function.  \n\n                Additionally, a bridge object will periodically send bytes with\n                a value of 0 to ensure the TCP connection remains alive.  These\n                are just read and ignored.  \n        !*/\n\n    public:\n\n        bridge (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n                - #get_bridge_status().is_connected == false\n        !*/\n\n        template <typename T, typename U, typename V>\n        bridge (\n            T network_parameters,\n            U pipe1,\n            V pipe2 \n        ); \n        /*!\n            requires\n                - T is of type connect_to_ip_and_port or listen_on_port\n                - U and V are of type bridge_transmit_decoration or bridge_receive_decoration,\n                  however, U and V must be of different types (i.e. one is a receive type and \n                  another a transmit type).\n            ensures\n                - this object is properly initialized\n                - performs: reconfigure(network_parameters, pipe1, pipe2)\n                  (i.e. using this constructor is identical to using the default constructor \n                  and then calling reconfigure())\n        !*/\n\n        template <typename T, typename U>\n        bridge (\n            T network_parameters,\n            U pipe \n        ); \n        /*!\n            requires\n                - T is of type connect_to_ip_and_port or listen_on_port\n                - U is of type bridge_transmit_decoration or bridge_receive_decoration.\n            ensures\n                - this object is properly initialized\n                - performs: reconfigure(network_parameters, pipe)\n                  (i.e. using this constructor is identical to using the default constructor \n                  and then calling reconfigure())\n        !*/\n\n        ~bridge (\n        );\n        /*!\n            ensures\n                - blocks until all resources associated with this object have been destroyed.\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - returns this object to its default constructed state.  That is, it will\n                  be inactive, neither maintaining a connection nor attempting to acquire one.\n                - Any active connections or listening sockets will be closed.\n        !*/\n\n        bridge_status get_bridge_status (\n        ) const;\n        /*!\n            ensures\n                - returns the current status of this bridge object. In particular, returns \n                  an object BS such that:\n                    - BS.is_connected == true if and only if the bridge has an active TCP \n                      connection to another computer.\n                    - if (BS.is_connected) then\n                        - BS.foreign_ip == the IP address of the remote host we are connected to.\n                        - BS.foreign_port == the port number on the remote host we are connected to.\n                    - else if (the bridge has previously been connected to a remote host but hasn't been \n                               reconfigured or cleared since) then\n                        - BS.foreign_ip == the IP address of the remote host we were connected to.\n                        - BS.foreign_port == the port number on the remote host we were connected to.\n                    - else\n                        - BS.foreign_ip == \"\"\n                        - BS.foreign_port == 0\n        !*/\n\n\n\n        template < typename T, typename R >\n        void reconfigure (\n            listen_on_port network_parameters,\n            bridge_transmit_decoration<T> transmit_pipe,\n            bridge_receive_decoration<R> receive_pipe\n        ); \n        /*!\n            ensures\n                - This object will begin listening on the port specified by network_parameters\n                  for incoming TCP connections.  Any previous bridge state is cleared out.\n                - Onces a connection is established we will:\n                    - Stop accepting new connections.\n                    - Begin dequeuing objects from the transmit pipe and serializing them over \n                      the TCP connection.\n                    - Begin deserializing objects from the TCP connection and enqueueing them \n                      onto the receive pipe.\n                - if (the current TCP connection is lost) then \n                    - This object goes back to listening for a new connection.\n                - if (the receive pipe can contain bridge_status objects) then\n                    - Whenever the bridge's status changes the updated bridge_status will be\n                      enqueued onto the receive pipe unless the change was a TCP disconnect \n                      resulting from a user calling reconfigure(), clear(), or destructing this \n                      bridge.  The status contents are defined by get_bridge_status().\n            throws\n                - socket_error\n                  This exception is thrown if we are unable to open the listening socket.\n        !*/\n        template < typename T, typename R >\n        void reconfigure (\n            listen_on_port network_parameters,\n            bridge_receive_decoration<R> receive_pipe,\n            bridge_transmit_decoration<T> transmit_pipe\n        ); \n        /*!\n            ensures\n                - performs reconfigure(network_parameters, transmit_pipe, receive_pipe)\n        !*/\n        template < typename T >\n        void reconfigure (\n            listen_on_port network_parameters,\n            bridge_transmit_decoration<T> transmit_pipe\n        );\n        /*!\n            ensures\n                - This function is identical to the above two reconfigure() functions \n                  except that there is no receive pipe.\n        !*/\n        template < typename R >\n        void reconfigure (\n            listen_on_port network_parameters,\n            bridge_receive_decoration<R> receive_pipe\n        );\n        /*!\n            ensures\n                - This function is identical to the above three reconfigure() functions \n                  except that there is no transmit pipe.\n        !*/\n\n\n\n        template <typename T, typename R>\n        void reconfigure (\n            connect_to_ip_and_port network_parameters,\n            bridge_transmit_decoration<T> transmit_pipe,\n            bridge_receive_decoration<R> receive_pipe\n        ); \n        /*!\n            ensures\n                - This object will begin making TCP connection attempts to the IP address and port \n                  specified by network_parameters.  Any previous bridge state is cleared out.\n                - Onces a connection is established we will:\n                    - Stop attempting new connections.\n                    - Begin dequeuing objects from the transmit pipe and serializing them over \n                      the TCP connection.\n                    - Begin deserializing objects from the TCP connection and enqueueing them \n                      onto the receive pipe.\n                - if (the current TCP connection is lost) then \n                    - This object goes back to attempting to make a TCP connection with the\n                      IP address and port specified by network_parameters.\n                - if (the receive pipe can contain bridge_status objects) then\n                    - Whenever the bridge's status changes the updated bridge_status will be\n                      enqueued onto the receive pipe unless the change was a TCP disconnect \n                      resulting from a user calling reconfigure(), clear(), or destructing this \n                      bridge.  The status contents are defined by get_bridge_status().\n        !*/\n        template <typename T, typename R>\n        void reconfigure (\n            connect_to_ip_and_port network_parameters,\n            bridge_receive_decoration<R> receive_pipe,\n            bridge_transmit_decoration<T> transmit_pipe\n        ); \n        /*!\n            ensures\n                - performs reconfigure(network_parameters, transmit_pipe, receive_pipe)\n        !*/\n        template <typename T>\n        void reconfigure (\n            connect_to_ip_and_port network_parameters,\n            bridge_transmit_decoration<T> transmit_pipe\n        );\n        /*!\n            ensures\n                - This function is identical to the above two reconfigure() functions \n                  except that there is no receive pipe.\n        !*/\n        template <typename R>\n        void reconfigure (\n            connect_to_ip_and_port network_parameters,\n            bridge_receive_decoration<R> receive_pipe\n        );\n        /*!\n            ensures\n                - This function is identical to the above three reconfigure() functions \n                  except that there is no transmit pipe.\n        !*/\n\n    };\n\n// ---------------------------------------------------------------------------------------- \n\n}\n\n#endif // DLIB_BRIDGe_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bridge.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BRIdGE_\n#define DLIB_BRIdGE_ \n\n\n#include \"bridge/bridge.h\"\n\n#endif // DLIB_BRIdGE_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bsp/bsp.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BSP_CPph_\n#define DLIB_BSP_CPph_\n\n#include \"bsp.h\"\n#include <stack>\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    namespace impl1\n    {\n\n        void connect_all (\n            map_id_to_con& cons,\n            const std::vector<network_address>& hosts,\n            unsigned long node_id\n        )\n        {\n            cons.clear();\n            for (unsigned long i = 0; i < hosts.size(); ++i)\n            {\n                scoped_ptr<bsp_con> con(new bsp_con(hosts[i]));\n                dlib::serialize(node_id, con->stream); // tell the other end our node_id\n                unsigned long id = i+1;\n                cons.add(id, con);\n            }\n        }\n\n        void connect_all_hostinfo (\n            map_id_to_con& cons,\n            const std::vector<hostinfo>& hosts,\n            unsigned long node_id,\n            std::string& error_string \n        )\n        {\n            cons.clear();\n            for (unsigned long i = 0; i < hosts.size(); ++i)\n            {\n                try\n                {\n                    scoped_ptr<bsp_con> con(new bsp_con(hosts[i].addr));\n                    dlib::serialize(node_id, con->stream); // tell the other end our node_id\n                    con->stream.flush();\n                    unsigned long id = hosts[i].node_id;\n                    cons.add(id, con);\n                }\n                catch (std::exception&)\n                {\n                    std::ostringstream sout;\n                    sout << \"Could not connect to \" << hosts[i].addr;\n                    error_string = sout.str();\n                    break;\n                }\n            }\n        }\n\n\n        void send_out_connection_orders (\n            map_id_to_con& cons,\n            const std::vector<network_address>& hosts\n        )\n        {\n            // tell everyone their node ids\n            cons.reset();\n            while (cons.move_next())\n            {\n                dlib::serialize(cons.element().key(), cons.element().value()->stream);\n            }\n\n            // now tell them who to connect to\n            std::vector<hostinfo> targets; \n            for (unsigned long i = 0; i < hosts.size(); ++i)\n            {\n                hostinfo info(hosts[i], i+1);\n\n                dlib::serialize(targets, cons[info.node_id]->stream);\n                targets.push_back(info);\n\n                // let the other host know how many incoming connections to expect\n                const unsigned long num = hosts.size()-targets.size();\n                dlib::serialize(num, cons[info.node_id]->stream);\n                cons[info.node_id]->stream.flush();\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl2\n    {\n        // These control bytes are sent before each message between nodes.  Note that many\n        // of these are only sent between the control node (node 0) and the other nodes.\n        // This is because the controller node is responsible for handling the\n        // synchronization that needs to happen when all nodes block on calls to\n        // receive_data()\n        // at the same time.\n\n        // denotes a normal content message.\n        const static char MESSAGE_HEADER            = 0; \n\n        // sent to the controller node when someone receives a message via receive_data().\n        const static char GOT_MESSAGE               = 1; \n\n        // sent to the controller node when someone sends a message via send().\n        const static char SENT_MESSAGE              = 2; \n\n        // sent to the controller node when someone enters a call to receive_data()\n        const static char IN_WAITING_STATE          = 3; \n\n        // broadcast when a node terminates itself. \n        const static char NODE_TERMINATE            = 5; \n\n        // broadcast by the controller node when it determines that all nodes are blocked\n        // on calls to receive_data() and there aren't any messages in flight.  This is also\n        // what makes us go to the next epoch.\n        const static char SEE_ALL_IN_WAITING_STATE  = 6; \n\n        // This isn't ever transmitted between nodes.  It is used internally to indicate\n        // that an error occurred.\n        const static char READ_ERROR                = 7;\n\n    // ------------------------------------------------------------------------------------\n\n        void read_thread (\n            impl1::bsp_con* con,\n            unsigned long node_id,\n            unsigned long sender_id,\n            impl1::thread_safe_message_queue& msg_buffer\n        )\n        {\n            try\n            {\n                while(true)\n                {\n                    impl1::msg_data msg;\n                    deserialize(msg.msg_type, con->stream);\n                    msg.sender_id = sender_id;\n\n                    if (msg.msg_type == MESSAGE_HEADER)\n                    {\n                        msg.data.reset(new std::vector<char>);\n                        deserialize(msg.epoch, con->stream);\n                        deserialize(*msg.data, con->stream);\n                    }\n\n                    msg_buffer.push_and_consume(msg);\n\n                    if (msg.msg_type == NODE_TERMINATE)\n                        break;\n                }\n            }\n            catch (std::exception& e)\n            {\n                impl1::msg_data msg;\n                msg.data.reset(new std::vector<char>);\n                vectorstream sout(*msg.data);\n                sout << \"An exception was thrown while attempting to receive a message from processing node \" << sender_id << \".\\n\";\n                sout << \"  Sending processing node address:   \" << con->con->get_foreign_ip() << \":\" << con->con->get_foreign_port() << std::endl;\n                sout << \"  Receiving processing node address: \" << con->con->get_local_ip() << \":\" << con->con->get_local_port() << std::endl;\n                sout << \"  Receiving processing node id:      \" << node_id << std::endl;\n                sout << \"  Error message in the exception:    \" << e.what() << std::endl;\n\n                msg.sender_id = sender_id;\n                msg.msg_type = READ_ERROR;\n\n                msg_buffer.push_and_consume(msg);\n            }\n            catch (...)\n            {\n                impl1::msg_data msg;\n                msg.data.reset(new std::vector<char>);\n                vectorstream sout(*msg.data);\n                sout << \"An exception was thrown while attempting to receive a message from processing node \" << sender_id << \".\\n\";\n                sout << \"  Sending processing node address:   \" << con->con->get_foreign_ip() << \":\" << con->con->get_foreign_port() << std::endl;\n                sout << \"  Receiving processing node address: \" << con->con->get_local_ip() << \":\" << con->con->get_local_port() << std::endl;\n                sout << \"  Receiving processing node id:      \" << node_id << std::endl;\n\n                msg.sender_id = sender_id;\n                msg.msg_type = READ_ERROR;\n\n                msg_buffer.push_and_consume(msg);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n    \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                          IMPLEMENTATION OF bsp_context OBJECT MEMBERS\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void bsp_context::\n    close_all_connections_gracefully(\n    )\n    {\n        if (node_id() != 0)\n        {\n            _cons.reset();\n            while (_cons.move_next())\n            {\n                // tell the other end that we are intentionally dropping the connection\n                serialize(impl2::NODE_TERMINATE,_cons.element().value()->stream);\n                _cons.element().value()->stream.flush();\n            }\n        }\n\n        impl1::msg_data msg;\n        // now wait for all the other nodes to terminate\n        while (num_terminated_nodes < _cons.size() )\n        {\n            if (node_id() == 0 && num_waiting_nodes + num_terminated_nodes == _cons.size() && outstanding_messages == 0)\n            {\n                num_waiting_nodes = 0;\n                broadcast_byte(impl2::SEE_ALL_IN_WAITING_STATE);\n                ++current_epoch;\n            }\n\n            if (!msg_buffer.pop(msg))\n                throw dlib::socket_error(\"Error reading from msg_buffer in dlib::bsp_context.\");\n\n            if (msg.msg_type == impl2::NODE_TERMINATE)\n            {\n                ++num_terminated_nodes;\n                _cons[msg.sender_id]->terminated = true;\n            }\n            else if (msg.msg_type == impl2::READ_ERROR)\n            {\n                throw dlib::socket_error(msg.data_to_string());\n            }\n            else if (msg.msg_type == impl2::MESSAGE_HEADER)\n            {\n                throw dlib::socket_error(\"A BSP node received a message after it has terminated.\");\n            }\n            else if (msg.msg_type == impl2::GOT_MESSAGE)\n            {\n                --num_waiting_nodes;\n                --outstanding_messages;\n            }\n            else if (msg.msg_type == impl2::SENT_MESSAGE)\n            {\n                ++outstanding_messages;\n            }\n            else if (msg.msg_type == impl2::IN_WAITING_STATE)\n            {\n                ++num_waiting_nodes;\n            }\n        }\n\n        if (node_id() == 0)\n        {\n            _cons.reset();\n            while (_cons.move_next())\n            {\n                // tell the other end that we are intentionally dropping the connection\n                serialize(impl2::NODE_TERMINATE,_cons.element().value()->stream);\n                _cons.element().value()->stream.flush();\n            }\n\n            if (outstanding_messages != 0)\n            {\n                std::ostringstream sout;\n                sout << \"A BSP job was allowed to terminate before all sent messages have been received.\\n\";\n                sout << \"There are at least \" << outstanding_messages << \" messages still in flight.   Make sure all sent messages\\n\";\n                sout << \"have a corresponding call to receive().\";\n                throw dlib::socket_error(sout.str());\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bsp_context::\n    ~bsp_context()\n    {\n        _cons.reset();\n        while (_cons.move_next())\n        {\n            _cons.element().value()->con->shutdown();\n        }\n\n        msg_buffer.disable();\n\n        // this will wait for all the threads to terminate\n        threads.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bsp_context::\n    bsp_context(\n        unsigned long node_id_,\n        impl1::map_id_to_con& cons_\n    ) :\n        outstanding_messages(0),\n        num_waiting_nodes(0),\n        num_terminated_nodes(0),\n        current_epoch(1),\n        _cons(cons_),\n        _node_id(node_id_)\n    {\n        // spawn a bunch of read threads, one for each connection\n        _cons.reset();\n        while (_cons.move_next())\n        {\n            scoped_ptr<thread_function> ptr(new thread_function(&impl2::read_thread,\n                                                                _cons.element().value().get(),\n                                                                _node_id,\n                                                                _cons.element().key(),\n                                                                ref(msg_buffer)));\n            threads.push_back(ptr);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bsp_context::\n    receive_data (\n        shared_ptr<std::vector<char> >& item,\n        unsigned long& sending_node_id\n    ) \n    {\n        notify_control_node(impl2::IN_WAITING_STATE);\n\n        while (true)\n        {\n            // If there aren't any nodes left to give us messages then return right now.\n            // We need to check the msg_buffer size to make sure there aren't any\n            // unprocessed message there.  Recall that this can happen because status\n            // messages always jump to the front of the message buffer.  So we might have\n            // learned about the node terminations before processing their messages for us.\n            if (num_terminated_nodes == _cons.size() && msg_buffer.size() == 0)\n            {\n                return false;\n            }\n\n            // if all running nodes are currently blocking forever on receive_data()\n            if (node_id() == 0 && outstanding_messages == 0 && num_terminated_nodes + num_waiting_nodes == _cons.size())\n            {\n                num_waiting_nodes = 0;\n                broadcast_byte(impl2::SEE_ALL_IN_WAITING_STATE);\n\n                // Note that the reason we have this epoch counter is so we can tell if a\n                // sent message is from before or after one of these \"all nodes waiting\"\n                // synchronization events.  If we didn't have the epoch count we would have\n                // a race condition where one node gets the SEE_ALL_IN_WAITING_STATE\n                // message before others and then sends out a message to another node\n                // before that node got the SEE_ALL_IN_WAITING_STATE message.  Then that\n                // node would think the normal message came before SEE_ALL_IN_WAITING_STATE\n                // which would be bad.\n                ++current_epoch;\n                return false;\n            }\n\n            impl1::msg_data data;\n            if (!msg_buffer.pop(data, current_epoch))\n                throw dlib::socket_error(\"Error reading from msg_buffer in dlib::bsp_context.\");\n\n\n            switch(data.msg_type)\n            {\n                case impl2::MESSAGE_HEADER: {\n                    item = data.data;\n                    sending_node_id = data.sender_id;\n                    notify_control_node(impl2::GOT_MESSAGE);\n                    return true;\n                } break;\n\n                case impl2::IN_WAITING_STATE: {\n                    ++num_waiting_nodes;\n                } break;\n\n                case impl2::GOT_MESSAGE: {\n                    --outstanding_messages;\n                    --num_waiting_nodes;\n                } break;\n\n                case impl2::SENT_MESSAGE: {\n                    ++outstanding_messages;\n                } break;\n\n                case impl2::NODE_TERMINATE: {\n                    ++num_terminated_nodes;\n                    _cons[data.sender_id]->terminated = true;\n                } break;\n\n                case impl2::SEE_ALL_IN_WAITING_STATE: {\n                    ++current_epoch;\n                    return false;\n                } break;\n\n                case impl2::READ_ERROR: {\n                    throw dlib::socket_error(data.data_to_string());\n                } break;\n\n                default: {\n                    throw dlib::socket_error(\"Unknown message received by dlib::bsp_context\");\n                } break;\n            } // end switch()\n        } // end while (true)\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bsp_context::\n    notify_control_node (\n        char val\n    )\n    {\n        if (node_id() == 0)\n        {\n            using namespace impl2;\n            switch(val)\n            {\n                case SENT_MESSAGE: {\n                    ++outstanding_messages;\n                } break;\n\n                case GOT_MESSAGE: {\n                    --outstanding_messages;\n                } break;\n\n                case IN_WAITING_STATE: {\n                    // nothing to do in this case\n                } break;\n\n                default:\n                    DLIB_CASSERT(false,\"This should never happen\");\n            }\n        }\n        else\n        {\n            serialize(val, _cons[0]->stream);\n            _cons[0]->stream.flush();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bsp_context::\n    broadcast_byte (\n        char val\n    )\n    {\n        for (unsigned long i = 0; i < number_of_nodes(); ++i)\n        {\n            // don't send to yourself or to terminated nodes\n            if (i == node_id() || _cons[i]->terminated)\n                continue;\n\n            serialize(val, _cons[i]->stream);\n            _cons[i]->stream.flush();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bsp_context::\n    send_data(\n        const std::vector<char>& item,\n        unsigned long target_node_id\n    ) \n    {\n        using namespace impl2;\n        if (_cons[target_node_id]->terminated)\n            throw socket_error(\"Attempt to send a message to a node that has terminated.\");\n\n        serialize(MESSAGE_HEADER, _cons[target_node_id]->stream);\n        serialize(current_epoch, _cons[target_node_id]->stream);\n        serialize(item, _cons[target_node_id]->stream);\n        _cons[target_node_id]->stream.flush();\n\n        notify_control_node(SENT_MESSAGE);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BSP_CPph_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bsp/bsp.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BsP_Hh_\n#define DLIB_BsP_Hh_\n\n#include \"bsp_abstract.h\"\n#include \"../sockets.h\"\n#include \"../array.h\"\n#include \"../smart_pointers.h\"\n#include \"../sockstreambuf.h\"\n#include \"../string.h\"\n#include \"../serialize.h\"\n#include \"../map.h\"\n#include \"../ref.h\"\n#include \"../vectorstream.h\"\n#include <queue>\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl1\n    {\n        inline void null_notify(\n            unsigned short\n        ) {}\n\n        struct bsp_con\n        {\n            bsp_con(\n                const network_address& dest\n            ) : \n                con(connect(dest)),\n                buf(con),\n                stream(&buf),\n                terminated(false)\n            {\n                con->disable_nagle();\n            }\n\n            bsp_con(\n               scoped_ptr<connection>& conptr \n            ) : \n                buf(conptr),\n                stream(&buf),\n                terminated(false)\n            {\n                // make sure we own the connection\n                conptr.swap(con);\n\n                con->disable_nagle();\n            }\n\n            scoped_ptr<connection> con;\n            sockstreambuf buf;\n            std::iostream stream;\n            bool terminated;\n        };\n\n        typedef dlib::map<unsigned long, scoped_ptr<bsp_con> >::kernel_1a_c map_id_to_con;\n\n        void connect_all (\n            map_id_to_con& cons,\n            const std::vector<network_address>& hosts,\n            unsigned long node_id\n        );\n        /*!\n            ensures\n                - creates connections to all the given hosts and stores them into cons\n        !*/\n\n        void send_out_connection_orders (\n            map_id_to_con& cons,\n            const std::vector<network_address>& hosts\n        );\n\n    // ------------------------------------------------------------------------------------\n\n        struct hostinfo\n        {\n            hostinfo() {}\n            hostinfo (\n                const network_address& addr_,\n                unsigned long node_id_\n            ) : \n                addr(addr_),\n                node_id(node_id_)\n            {\n            }\n\n            network_address addr;\n            unsigned long node_id;\n        };\n\n        inline void serialize (\n            const hostinfo& item,\n            std::ostream& out\n        )\n        {\n            dlib::serialize(item.addr, out);\n            dlib::serialize(item.node_id, out);\n        }\n\n        inline void deserialize (\n            hostinfo& item,\n            std::istream& in\n        )\n        {\n            dlib::deserialize(item.addr, in);\n            dlib::deserialize(item.node_id, in);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void connect_all_hostinfo (\n            map_id_to_con& cons,\n            const std::vector<hostinfo>& hosts,\n            unsigned long node_id,\n            std::string& error_string \n        );\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename port_notify_function_type\n        >\n        void listen_and_connect_all(\n            unsigned long& node_id,\n            map_id_to_con& cons,\n            unsigned short port,\n            port_notify_function_type port_notify_function\n        )\n        {\n            cons.clear();\n            scoped_ptr<listener> list;\n            const int status = create_listener(list, port);\n            if (status == PORTINUSE)\n            {\n                throw socket_error(\"Unable to create listening port \" + cast_to_string(port) +\n                                   \".  The port is already in use\");\n            }\n            else if (status != 0)\n            {\n                throw socket_error(\"Unable to create listening port \" + cast_to_string(port) );\n            }\n\n            port_notify_function(list->get_listening_port());\n\n            scoped_ptr<connection> con;\n            if (list->accept(con))\n            {\n                throw socket_error(\"Error occurred while accepting new connection\");\n            }\n\n            scoped_ptr<bsp_con> temp(new bsp_con(con));\n\n            unsigned long remote_node_id;\n            dlib::deserialize(remote_node_id, temp->stream);\n            dlib::deserialize(node_id, temp->stream);\n            std::vector<hostinfo> targets; \n            dlib::deserialize(targets, temp->stream);\n            unsigned long num_incoming_connections;\n            dlib::deserialize(num_incoming_connections, temp->stream);\n\n            cons.add(remote_node_id,temp);\n\n            // make a thread that will connect to all the targets\n            map_id_to_con cons2;\n            std::string error_string;\n            thread_function thread(connect_all_hostinfo, dlib::ref(cons2), dlib::ref(targets), node_id, dlib::ref(error_string));\n            if (error_string.size() != 0)\n                throw socket_error(error_string);\n\n            // accept any incoming connections\n            for (unsigned long i = 0; i < num_incoming_connections; ++i)\n            {\n                // If it takes more than 10 seconds for the other nodes to connect to us\n                // then something has gone horribly wrong and it almost certainly will\n                // never connect at all.  So just give up if that happens.\n                const unsigned long timeout_milliseconds = 10000;\n                if (list->accept(con, timeout_milliseconds))\n                {\n                    throw socket_error(\"Error occurred while accepting new connection\");\n                }\n\n                temp.reset(new bsp_con(con));\n\n                dlib::deserialize(remote_node_id, temp->stream);\n                cons.add(remote_node_id,temp);\n            }\n\n\n            // put all the connections created by the thread into cons\n            thread.wait();\n            while (cons2.size() > 0)\n            {\n                unsigned long id;\n                scoped_ptr<bsp_con> temp;\n                cons2.remove_any(id,temp);\n                cons.add(id,temp);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        struct msg_data\n        {\n            shared_ptr<std::vector<char> > data;\n            unsigned long sender_id;\n            char msg_type;\n            dlib::uint64 epoch;\n\n            msg_data() : sender_id(0xFFFFFFFF), msg_type(-1), epoch(0) {}\n\n            std::string data_to_string() const\n            {\n                if (data && data->size() != 0)\n                    return std::string(&(*data)[0], data->size());\n                else\n                    return \"\";\n            }\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        class thread_safe_message_queue : noncopyable\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This is a simple message queue for msg_data objects.  Note that it\n                    has the special property that, while messages will generally leave\n                    the queue in the order they are inserted, any message with a smaller\n                    epoch value will always be popped out first.  But for all messages\n                    with equal epoch values the queue functions as a normal FIFO queue.\n            !*/\n        private:\n            struct msg_wrap\n            {\n                msg_wrap(\n                    const msg_data& data_,\n                    const dlib::uint64& sequence_number_\n                ) : data(data_), sequence_number(sequence_number_) {}\n\n                msg_wrap() : sequence_number(0){}\n\n                msg_data data;\n                dlib::uint64 sequence_number;\n\n                // Make it so that when msg_wrap objects are in a std::priority_queue,\n                // messages with a smaller epoch number always come first.  Then, within an\n                // epoch, messages are ordered by their sequence number (so smaller first\n                // there as well).\n                bool operator<(const msg_wrap& item) const\n                {\n                    if (data.epoch < item.data.epoch)\n                    {\n                        return false;\n                    }\n                    else if (data.epoch > item.data.epoch)\n                    {\n                        return true;\n                    }\n                    else\n                    {\n                        if (sequence_number < item.sequence_number)\n                            return false;\n                        else\n                            return true;\n                    }\n                }\n            };\n\n        public:\n            thread_safe_message_queue() : sig(class_mutex),disabled(false),next_seq_num(1) {}\n\n            ~thread_safe_message_queue()\n            {\n                disable();\n            }\n\n            void disable()\n            {\n                auto_mutex lock(class_mutex);\n                disabled = true;\n                sig.broadcast();\n            }\n\n            unsigned long size() const \n            { \n                auto_mutex lock(class_mutex);\n                return data.size(); \n            }\n\n            void push_and_consume( msg_data& item)\n            {\n                auto_mutex lock(class_mutex);\n                data.push(msg_wrap(item, next_seq_num++));\n                // do this here so that we don't have to worry about different threads touching the shared_ptr.\n                item.data.reset(); \n                sig.signal();\n            }\n\n            bool pop ( \n                msg_data& item\n            )\n            /*!\n                ensures\n                    - if (this function returns true) then\n                        - #item == the next thing from the queue\n                    - else\n                        - this object is disabled\n            !*/\n            {\n                auto_mutex lock(class_mutex);\n                while (data.size() == 0 && !disabled)\n                    sig.wait();\n\n                if (disabled)\n                    return false;\n\n                item = data.top().data;\n                data.pop();\n\n                return true;\n            }\n\n            bool pop ( \n                msg_data& item,\n                const dlib::uint64& max_epoch\n            )\n            /*!\n                ensures\n                    - if (this function returns true) then\n                        - #item == the next thing from the queue that has an epoch <= max_epoch\n                    - else\n                        - this object is disabled\n            !*/\n            {\n                auto_mutex lock(class_mutex);\n                while ((data.size() == 0 || data.top().data.epoch > max_epoch) && !disabled)\n                    sig.wait();\n\n                if (disabled)\n                    return false;\n\n                item = data.top().data;\n                data.pop();\n\n                return true;\n            }\n\n        private:\n            std::priority_queue<msg_wrap> data;\n            dlib::mutex class_mutex;\n            dlib::signaler sig;\n            bool disabled;\n            dlib::uint64 next_seq_num;\n        };\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class bsp_context : noncopyable\n    {\n\n    public:\n\n        template <typename T>\n        void send(\n            const T& item,\n            unsigned long target_node_id\n        ) \n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(target_node_id < number_of_nodes() &&\n                        target_node_id != node_id(),\n                \"\\t void bsp_context::send()\"\n                << \"\\n\\t Invalid arguments were given to this function.\"\n                << \"\\n\\t target_node_id:    \" << target_node_id\n                << \"\\n\\t node_id():         \" << node_id()\n                << \"\\n\\t number_of_nodes(): \" << number_of_nodes()\n                << \"\\n\\t this: \" << this\n                );\n\n            std::vector<char> buf;\n            vectorstream sout(buf);\n            serialize(item, sout);\n            send_data(buf, target_node_id);\n        }\n\n        template <typename T>\n        void broadcast (\n            const T& item\n        ) \n        {\n            std::vector<char> buf;\n            vectorstream sout(buf);\n            serialize(item, sout);\n            for (unsigned long i = 0; i < number_of_nodes(); ++i)\n            {\n                // Don't send to yourself.\n                if (i == node_id())\n                    continue;\n\n                send_data(buf, i);\n            }\n        }\n\n        unsigned long node_id (\n        ) const { return _node_id; }\n\n        unsigned long number_of_nodes (\n        ) const { return _cons.size()+1; }\n\n        void receive (\n        )\n        {\n            unsigned long id;\n            shared_ptr<std::vector<char> > temp;\n            if (receive_data(temp,id))\n                throw dlib::socket_error(\"Call to bsp_context::receive() got an unexpected message.\");\n        }\n\n        template <typename T>\n        void receive (\n            T& item\n        ) \n        {\n            if(!try_receive(item))\n                throw dlib::socket_error(\"bsp_context::receive(): no messages to receive, all nodes currently blocked.\");\n        }\n\n        template <typename T>\n        bool try_receive (\n            T& item\n        ) \n        {\n            unsigned long sending_node_id;\n            return try_receive(item, sending_node_id);\n        }\n\n        template <typename T>\n        void receive (\n            T& item,\n            unsigned long& sending_node_id\n        ) \n        {\n            if(!try_receive(item, sending_node_id))\n                throw dlib::socket_error(\"bsp_context::receive(): no messages to receive, all nodes currently blocked.\");\n        }\n\n        template <typename T>\n        bool try_receive (\n            T& item,\n            unsigned long& sending_node_id\n        ) \n        {\n            shared_ptr<std::vector<char> > temp;\n            if (receive_data(temp, sending_node_id))\n            {\n                vectorstream sin(*temp);\n                deserialize(item, sin);\n                if (sin.peek() != EOF)\n                    throw serialization_error(\"deserialize() did not consume all bytes produced by serialize().  \"\n                                              \"This probably means you are calling a receive method with a different type \"\n                                              \"of object than the one which was sent.\");\n                return true;\n            }\n            else\n            {\n                return false;\n            }\n        }\n\n        ~bsp_context();\n\n    private:\n\n        bsp_context();\n\n        bsp_context(\n            unsigned long node_id_,\n            impl1::map_id_to_con& cons_\n        );\n\n        void close_all_connections_gracefully();\n        /*!\n            ensures\n                - closes all the connections to other nodes and lets them know that\n                  we are terminating normally rather than as the result of some kind\n                  of error.\n        !*/\n\n        bool receive_data (\n            shared_ptr<std::vector<char> >& item,\n            unsigned long& sending_node_id\n        );\n\n\n        void notify_control_node (\n            char val\n        );\n\n        void broadcast_byte (\n            char val\n        );\n\n        void send_data(\n            const std::vector<char>& item,\n            unsigned long target_node_id\n        );\n        /*!\n            requires\n                - target_node_id < number_of_nodes()\n                - target_node_id != node_id()\n            ensures\n                - sends a copy of item to the node with the given id.\n        !*/\n\n\n\n\n        unsigned long outstanding_messages;\n        unsigned long num_waiting_nodes;\n        unsigned long num_terminated_nodes;\n        dlib::uint64 current_epoch;\n\n        impl1::thread_safe_message_queue msg_buffer;\n\n        impl1::map_id_to_con& _cons;\n        const unsigned long _node_id;\n        array<scoped_ptr<thread_function> > threads;\n\n    // -----------------------------------\n\n        template <\n            typename funct_type\n            >\n        friend void bsp_connect (\n            const std::vector<network_address>& hosts,\n            funct_type funct\n        );\n\n        template <\n            typename funct_type,\n            typename ARG1\n            >\n        friend void bsp_connect (\n            const std::vector<network_address>& hosts,\n            funct_type funct,\n            ARG1 arg1\n        );\n\n        template <\n            typename funct_type,\n            typename ARG1,\n            typename ARG2\n            >\n        friend void bsp_connect (\n            const std::vector<network_address>& hosts,\n            funct_type funct,\n            ARG1 arg1,\n            ARG2 arg2\n        );\n\n        template <\n            typename funct_type,\n            typename ARG1,\n            typename ARG2,\n            typename ARG3\n            >\n        friend void bsp_connect (\n            const std::vector<network_address>& hosts,\n            funct_type funct,\n            ARG1 arg1,\n            ARG2 arg2,\n            ARG3 arg3\n        );\n\n        template <\n            typename funct_type,\n            typename ARG1,\n            typename ARG2,\n            typename ARG3,\n            typename ARG4\n            >\n        friend void bsp_connect (\n            const std::vector<network_address>& hosts,\n            funct_type funct,\n            ARG1 arg1,\n            ARG2 arg2,\n            ARG3 arg3,\n            ARG4 arg4\n        );\n\n    // -----------------------------------\n\n        template <\n            typename port_notify_function_type,\n            typename funct_type\n            >\n        friend void bsp_listen_dynamic_port (\n            unsigned short listening_port,\n            port_notify_function_type port_notify_function,\n            funct_type funct\n        );\n\n        template <\n            typename port_notify_function_type,\n            typename funct_type,\n            typename ARG1\n            >\n        friend void bsp_listen_dynamic_port (\n            unsigned short listening_port,\n            port_notify_function_type port_notify_function,\n            funct_type funct,\n            ARG1 arg1\n        );\n\n        template <\n            typename port_notify_function_type,\n            typename funct_type,\n            typename ARG1,\n            typename ARG2\n            >\n        friend void bsp_listen_dynamic_port (\n            unsigned short listening_port,\n            port_notify_function_type port_notify_function,\n            funct_type funct,\n            ARG1 arg1,\n            ARG2 arg2\n        );\n\n        template <\n            typename port_notify_function_type,\n            typename funct_type,\n            typename ARG1,\n            typename ARG2,\n            typename ARG3\n            >\n        friend void bsp_listen_dynamic_port (\n            unsigned short listening_port,\n            port_notify_function_type port_notify_function,\n            funct_type funct,\n            ARG1 arg1,\n            ARG2 arg2,\n            ARG3 arg3\n        );\n\n        template <\n            typename port_notify_function_type,\n            typename funct_type,\n            typename ARG1,\n            typename ARG2,\n            typename ARG3,\n            typename ARG4\n            >\n        friend void bsp_listen_dynamic_port (\n            unsigned short listening_port,\n            port_notify_function_type port_notify_function,\n            funct_type funct,\n            ARG1 arg1,\n            ARG2 arg2,\n            ARG3 arg3,\n            ARG4 arg4\n        );\n\n    // -----------------------------------\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct\n    )\n    {\n        impl1::map_id_to_con cons;\n        const unsigned long node_id = 0;\n        connect_all(cons, hosts, node_id);\n        send_out_connection_orders(cons, hosts);\n        bsp_context obj(node_id, cons);\n        funct(obj);\n        obj.close_all_connections_gracefully();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct,\n        ARG1 arg1\n    )\n    {\n        impl1::map_id_to_con cons;\n        const unsigned long node_id = 0;\n        connect_all(cons, hosts, node_id);\n        send_out_connection_orders(cons, hosts);\n        bsp_context obj(node_id, cons);\n        funct(obj,arg1);\n        obj.close_all_connections_gracefully();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2\n    )\n    {\n        impl1::map_id_to_con cons;\n        const unsigned long node_id = 0;\n        connect_all(cons, hosts, node_id);\n        send_out_connection_orders(cons, hosts);\n        bsp_context obj(node_id, cons);\n        funct(obj,arg1,arg2);\n        obj.close_all_connections_gracefully();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3\n    )\n    {\n        impl1::map_id_to_con cons;\n        const unsigned long node_id = 0;\n        connect_all(cons, hosts, node_id);\n        send_out_connection_orders(cons, hosts);\n        bsp_context obj(node_id, cons);\n        funct(obj,arg1,arg2,arg3);\n        obj.close_all_connections_gracefully();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3,\n        typename ARG4\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3,\n        ARG4 arg4\n    )\n    {\n        impl1::map_id_to_con cons;\n        const unsigned long node_id = 0;\n        connect_all(cons, hosts, node_id);\n        send_out_connection_orders(cons, hosts);\n        bsp_context obj(node_id, cons);\n        funct(obj,arg1,arg2,arg3,arg4);\n        obj.close_all_connections_gracefully();\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(listening_port != 0,\n            \"\\t void bsp_listen()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            );\n\n        bsp_listen_dynamic_port(listening_port, impl1::null_notify, funct);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct,\n        ARG1 arg1\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(listening_port != 0,\n            \"\\t void bsp_listen()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            );\n\n        bsp_listen_dynamic_port(listening_port, impl1::null_notify, funct, arg1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(listening_port != 0,\n            \"\\t void bsp_listen()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            );\n\n        bsp_listen_dynamic_port(listening_port, impl1::null_notify, funct, arg1, arg2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(listening_port != 0,\n            \"\\t void bsp_listen()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            );\n\n        bsp_listen_dynamic_port(listening_port, impl1::null_notify, funct, arg1, arg2, arg3);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3,\n        typename ARG4\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3,\n        ARG4 arg4\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(listening_port != 0,\n            \"\\t void bsp_listen()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            );\n\n        bsp_listen_dynamic_port(listening_port, impl1::null_notify, funct, arg1, arg2, arg3, arg4);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct\n    )\n    {\n        impl1::map_id_to_con cons;\n        unsigned long node_id;\n        listen_and_connect_all(node_id, cons, listening_port, port_notify_function);\n        bsp_context obj(node_id, cons);\n        funct(obj);\n        obj.close_all_connections_gracefully();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type,\n        typename ARG1\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct,\n        ARG1 arg1\n    )\n    {\n        impl1::map_id_to_con cons;\n        unsigned long node_id;\n        listen_and_connect_all(node_id, cons, listening_port, port_notify_function);\n        bsp_context obj(node_id, cons);\n        funct(obj,arg1);\n        obj.close_all_connections_gracefully();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type,\n        typename ARG1,\n        typename ARG2\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2\n    )\n    {\n        impl1::map_id_to_con cons;\n        unsigned long node_id;\n        listen_and_connect_all(node_id, cons, listening_port, port_notify_function);\n        bsp_context obj(node_id, cons);\n        funct(obj,arg1,arg2);\n        obj.close_all_connections_gracefully();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3\n    )\n    {\n        impl1::map_id_to_con cons;\n        unsigned long node_id;\n        listen_and_connect_all(node_id, cons, listening_port, port_notify_function);\n        bsp_context obj(node_id, cons);\n        funct(obj,arg1,arg2,arg3);\n        obj.close_all_connections_gracefully();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3,\n        typename ARG4\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3,\n        ARG4 arg4\n    )\n    {\n        impl1::map_id_to_con cons;\n        unsigned long node_id;\n        listen_and_connect_all(node_id, cons, listening_port, port_notify_function);\n        bsp_context obj(node_id, cons);\n        funct(obj,arg1,arg2,arg3,arg4);\n        obj.close_all_connections_gracefully();\n    }\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"bsp.cpp\"\n#endif\n\n#endif // DLIB_BsP_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bsp/bsp_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BsP_ABSTRACT_Hh_\n#ifdef DLIB_BsP_ABSTRACT_Hh_\n\n#include \"../noncopyable.h\"\n#include \"../sockets/sockets_extensions_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class bsp_context : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a tool used to implement algorithms using the Bulk Synchronous\n                Parallel (BSP) computing model.  A BSP algorithm is composed of a number of\n                processing nodes, each executing in parallel.  The general flow of\n                execution in each processing node is the following:\n                    1. Do work locally on some data.\n                    2. Send some messages to other nodes.\n                    3. Receive messages from other nodes.\n                    4. Go to step 1 or terminate if complete.\n\n                To do this, each processing node needs an API used to send and receive\n                messages.  This API is implemented by the bsp_connect object which provides\n                these services to a BSP node.  \n\n                Note that BSP processing nodes are spawned using the bsp_connect() and\n                bsp_listen() routines defined at the bottom of this file.  For example, to\n                start a BSP algorithm consisting of N processing nodes, you would make N-1\n                calls to bsp_listen() and one call to bsp_connect().  The call to\n                bsp_connect() then initiates the computation on all nodes.\n\n                Finally, note that there is no explicit barrier synchronization function\n                you call at the end of step 3.  Instead, you can simply call a method such\n                as try_receive() until it returns false.  That is, the bsp_context's\n                receive methods incorporate a barrier synchronization that happens once all\n                the BSP nodes are blocked on receive calls and there are no more messages\n                in flight. \n\n\n            THREAD SAFETY\n                This object is not thread-safe.  In particular, you should only ever have\n                one thread that works with an instance of this object.  This means that,\n                for example, you should not spawn sub-threads from within a BSP processing\n                node and have them invoke methods on this object.  Instead, you should only\n                invoke this object's methods from within the BSP processing node's main\n                thread (i.e. the thread that executes the user supplied function funct()).\n        !*/\n\n    public:\n\n        template <typename T>\n        void send(\n            const T& item,\n            unsigned long target_node_id\n        );\n        /*!\n            requires\n                - item is serializable \n                - target_node_id < number_of_nodes()\n                - target_node_id != node_id()\n            ensures\n                - sends a copy of item to the node with the given id.\n            throws\n                - dlib::socket_error:\n                    This exception is thrown if there is an error which prevents us from\n                    delivering the message to the given node.  One way this might happen is\n                    if the target node has already terminated its execution or has lost\n                    network connectivity. \n        !*/\n\n        template <typename T>\n        void broadcast (\n            const T& item\n        );\n        /*!\n            ensures\n                - item is serializable\n                - sends a copy of item to all other processing nodes.   \n            throws\n                - dlib::socket_error\n                    This exception is thrown if there is an error which prevents us from\n                    delivering a message to one of the other nodes.  This might happen, for\n                    example, if one of the nodes has terminated its execution or has lost\n                    network connectivity.\n        !*/\n\n        unsigned long node_id (\n        ) const; \n        /*!\n            ensures\n                - Returns the id of the current processing node.  That is, \n                  returns a number N such that:\n                    - N < number_of_nodes()\n                    - N == the node id of the processing node that called node_id().  This\n                      is a number that uniquely identifies the processing node.\n        !*/\n\n        unsigned long number_of_nodes (\n        ) const; \n        /*!\n            ensures\n                - returns the number of processing nodes participating in the BSP\n                  computation.\n        !*/\n\n        template <typename T>\n        bool try_receive (\n            T& item\n        );\n        /*!\n            requires\n                - item is serializable\n            ensures\n                - if (this function returns true) then\n                    - #item == the next message which was sent to the calling processing\n                      node.\n                - else\n                    - The following must have been true for this function to return false:\n                        - All other nodes were blocked on calls to receive(),\n                          try_receive(), or have terminated.\n                        - There were not any messages in flight between any nodes.  \n                        - That is, if all the nodes had continued to block on receive\n                          methods then they all would have blocked forever.  Therefore,\n                          this function only returns false once there are no more messages\n                          to process by any node and there is no possibility of more being\n                          generated until control is returned to the callers of receive\n                          methods. \n                    - When one BSP node's receive method returns because of the above\n                      conditions then all of them will also return.  That is, it is NOT the\n                      case that just a subset of BSP nodes unblock.  Moreover, they all\n                      unblock at the same time.  \n            throws\n                - dlib::socket_error:\n                    This exception is thrown if some error occurs which prevents us from\n                    communicating with other processing nodes.\n                - dlib::serialization_error or any exception thrown by the global\n                  deserialize(T) routine:\n                    This is thrown if there is a problem in deserialize().  This might\n                    happen if the message sent doesn't match the type T expected by\n                    try_receive().\n        !*/\n\n        template <typename T>\n        void receive (\n            T& item\n        );\n        /*!\n            requires\n                - item is serializable\n            ensures\n                - #item == the next message which was sent to the calling processing\n                  node.\n                - This function is just a wrapper around try_receive() that throws an\n                  exception if a message is not received (i.e. if try_receive() returns\n                  false).\n            throws\n                - dlib::socket_error:\n                    This exception is thrown if some error occurs which prevents us from\n                    communicating with other processing nodes or if there was not a message\n                    to receive.\n                - dlib::serialization_error or any exception thrown by the global\n                  deserialize(T) routine:\n                    This is thrown if there is a problem in deserialize().  This might\n                    happen if the message sent doesn't match the type T expected by\n                    receive().\n        !*/\n\n        template <typename T>\n        bool try_receive (\n            T& item,\n            unsigned long& sending_node_id\n        ); \n        /*!\n            requires\n                - item is serializable\n            ensures\n                - if (this function returns true) then\n                    - #item == the next message which was sent to the calling processing\n                      node.\n                    - #sending_node_id == the node id of the node that sent this message.\n                    - #sending_node_id < number_of_nodes()\n                - else\n                    - The following must have been true for this function to return false:\n                        - All other nodes were blocked on calls to receive(),\n                          try_receive(), or have terminated.\n                        - There were not any messages in flight between any nodes.  \n                        - That is, if all the nodes had continued to block on receive\n                          methods then they all would have blocked forever.  Therefore,\n                          this function only returns false once there are no more messages\n                          to process by any node and there is no possibility of more being\n                          generated until control is returned to the callers of receive\n                          methods. \n                    - When one BSP node's receive method returns because of the above\n                      conditions then all of them will also return.  That is, it is NOT the\n                      case that just a subset of BSP nodes unblock.  Moreover, they all\n                      unblock at the same time.  \n            throws\n                - dlib::socket_error:\n                    This exception is thrown if some error occurs which prevents us from\n                    communicating with other processing nodes.\n                - dlib::serialization_error or any exception thrown by the global\n                  deserialize(T) routine:\n                    This is thrown if there is a problem in deserialize().  This might\n                    happen if the message sent doesn't match the type T expected by\n                    try_receive().\n        !*/\n\n        template <typename T>\n        void receive (\n            T& item,\n            unsigned long& sending_node_id\n        ); \n        /*!\n            requires\n                - item is serializable\n            ensures\n                - #item == the next message which was sent to the calling processing node.\n                - #sending_node_id == the node id of the node that sent this message.\n                - #sending_node_id < number_of_nodes()\n                - This function is just a wrapper around try_receive() that throws an\n                  exception if a message is not received (i.e. if try_receive() returns\n                  false).\n            throws\n                - dlib::socket_error:\n                    This exception is thrown if some error occurs which prevents us from\n                    communicating with other processing nodes or if there was not a message\n                    to receive.\n                - dlib::serialization_error or any exception thrown by the global\n                  deserialize(T) routine:\n                    This is thrown if there is a problem in deserialize().  This might\n                    happen if the message sent doesn't match the type T expected by\n                    receive().\n        !*/\n\n        void receive (\n        );\n        /*!\n            ensures\n                - Waits for the following to all be true:\n                    - All other nodes were blocked on calls to receive(), try_receive(), or\n                      have terminated.\n                    - There are not any messages in flight between any nodes.  \n                    - That is, if all the nodes had continued to block on receive methods\n                      then they all would have blocked forever.  Therefore, this function\n                      only returns once there are no more messages to process by any node\n                      and there is no possibility of more being generated until control is\n                      returned to the callers of receive methods. \n                - When one BSP node's receive method returns because of the above\n                  conditions then all of them will also return.  That is, it is NOT the\n                  case that just a subset of BSP nodes unblock.  Moreover, they all unblock\n                  at the same time.  \n            throws\n                - dlib::socket_error:\n                    This exception is thrown if some error occurs which prevents us from\n                    communicating with other processing nodes or if a message is received\n                    before this function would otherwise return.\n\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function spawns a BSP job consisting of hosts.size()+1 processing nodes.\n            - The processing node with a node ID of 0 will run locally on the machine\n              calling bsp_connect().  In particular, this node will execute funct(CONTEXT),\n              which is expected to carry out this node's portion of the BSP computation.\n            - The other processing nodes are executed on the hosts indicated by the input\n              argument.  In particular, this function interprets hosts as a list addresses\n              identifying machines running the bsp_listen() or bsp_listen_dynamic_port()\n              routines.  \n            - This call to bsp_connect() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct,\n        ARG1 arg1\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function spawns a BSP job consisting of hosts.size()+1 processing nodes.\n            - The processing node with a node ID of 0 will run locally on the machine\n              calling bsp_connect().  In particular, this node will execute funct(CONTEXT,arg1),\n              which is expected to carry out this node's portion of the BSP computation.\n            - The other processing nodes are executed on the hosts indicated by the input\n              argument.  In particular, this function interprets hosts as a list addresses\n              identifying machines running the bsp_listen() or bsp_listen_dynamic_port()\n              routines.  \n            - This call to bsp_connect() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1,arg2) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function spawns a BSP job consisting of hosts.size()+1 processing nodes.\n            - The processing node with a node ID of 0 will run locally on the machine\n              calling bsp_connect().  In particular, this node will execute funct(CONTEXT,arg1,arg2),\n              which is expected to carry out this node's portion of the BSP computation.\n            - The other processing nodes are executed on the hosts indicated by the input\n              argument.  In particular, this function interprets hosts as a list addresses\n              identifying machines running the bsp_listen() or bsp_listen_dynamic_port()\n              routines.  \n            - This call to bsp_connect() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1,arg2,arg3) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function spawns a BSP job consisting of hosts.size()+1 processing nodes.\n            - The processing node with a node ID of 0 will run locally on the machine\n              calling bsp_connect().  In particular, this node will execute funct(CONTEXT,arg1,arg2,arg3),\n              which is expected to carry out this node's portion of the BSP computation.\n            - The other processing nodes are executed on the hosts indicated by the input\n              argument.  In particular, this function interprets hosts as a list addresses\n              identifying machines running the bsp_listen() or bsp_listen_dynamic_port()\n              routines.  \n            - This call to bsp_connect() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3,\n        typename ARG4\n        >\n    void bsp_connect (\n        const std::vector<network_address>& hosts,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3,\n        ARG4 arg4\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1,arg2,arg3,arg4) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function spawns a BSP job consisting of hosts.size()+1 processing nodes.\n            - The processing node with a node ID of 0 will run locally on the machine\n              calling bsp_connect().  In particular, this node will execute funct(CONTEXT,arg1,arg2,arg3,arg4),\n              which is expected to carry out this node's portion of the BSP computation.\n            - The other processing nodes are executed on the hosts indicated by the input\n              argument.  In particular, this function interprets hosts as a list addresses\n              identifying machines running the bsp_listen() or bsp_listen_dynamic_port()\n              routines.  \n            - This call to bsp_connect() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct\n    );\n    /*!\n        requires\n            - listening_port != 0\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT) will be executed and it will\n              then be able to participate in the BSP computation as one of the processing\n              nodes.  \n            - This function will listen on TCP port listening_port for a connection from\n              bsp_connect().  Once the connection is established, it will close the\n              listening port so it is free for use by other applications.  The connection\n              and BSP computation will continue uninterrupted.\n            - This call to bsp_listen() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct,\n        ARG1 arg1\n    );\n    /*!\n        requires\n            - listening_port != 0\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT,arg1) will be executed and it will\n              then be able to participate in the BSP computation as one of the processing\n              nodes.  \n            - This function will listen on TCP port listening_port for a connection from\n              bsp_connect().  Once the connection is established, it will close the\n              listening port so it is free for use by other applications.  The connection\n              and BSP computation will continue uninterrupted.\n            - This call to bsp_listen() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2\n    );\n    /*!\n        requires\n            - listening_port != 0\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1,arg2) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT,arg1,arg2) will be executed and\n              it will then be able to participate in the BSP computation as one of the\n              processing nodes.  \n            - This function will listen on TCP port listening_port for a connection from\n              bsp_connect().  Once the connection is established, it will close the\n              listening port so it is free for use by other applications.  The connection\n              and BSP computation will continue uninterrupted.\n            - This call to bsp_listen() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3\n    );\n    /*!\n        requires\n            - listening_port != 0\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1,arg2,arg3) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT,arg1,arg2,arg3) will be\n              executed and it will then be able to participate in the BSP computation as\n              one of the processing nodes.  \n            - This function will listen on TCP port listening_port for a connection from\n              bsp_connect().  Once the connection is established, it will close the\n              listening port so it is free for use by other applications.  The connection\n              and BSP computation will continue uninterrupted.\n            - This call to bsp_listen() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3,\n        typename ARG4\n        >\n    void bsp_listen (\n        unsigned short listening_port,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3,\n        ARG4 arg4\n    );\n    /*!\n        requires\n            - listening_port != 0\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1,arg2,arg3,arg4) must be a valid expression \n                  (i.e. funct must be a function or function object)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT,arg1,arg2,arg3,arg4) will be\n              executed and it will then be able to participate in the BSP computation as\n              one of the processing nodes.  \n            - This function will listen on TCP port listening_port for a connection from\n              bsp_connect().  Once the connection is established, it will close the\n              listening port so it is free for use by other applications.  The connection\n              and BSP computation will continue uninterrupted.\n            - This call to bsp_listen() blocks until the BSP computation has completed on\n              all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT) must be a valid expression \n                  (i.e. funct must be a function or function object)\n            - port_notify_function((unsigned short) 1234) must be a valid expression\n              (i.e. port_notify_function() must be a function or function object taking an \n              unsigned short)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT) will be executed and it will\n              then be able to participate in the BSP computation as one of the processing\n              nodes.  \n            - if (listening_port != 0) then\n                - This function will listen on TCP port listening_port for a connection\n                  from bsp_connect().  \n            - else\n                - An available TCP port number is automatically selected and this function\n                  will listen on it for a connection from bsp_connect(). \n            - Once a listening port is opened, port_notify_function() is called with the\n              port number used.  This provides a mechanism to find out what listening port\n              has been used if it is automatically selected.  It also allows you to find\n              out when the routine has begun listening for an incoming connection from\n              bsp_connect().\n            - Once a connection is established, we will close the listening port so it is\n              free for use by other applications.  The connection and BSP computation will\n              continue uninterrupted.\n            - This call to bsp_listen_dynamic_port() blocks until the BSP computation has\n              completed on all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type,\n        typename ARG1\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct,\n        ARG1 arg1\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1) must be a valid expression \n                  (i.e. funct must be a function or function object)\n            - port_notify_function((unsigned short) 1234) must be a valid expression\n              (i.e. port_notify_function() must be a function or function object taking an \n              unsigned short)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT,arg1) will be executed and it\n              will then be able to participate in the BSP computation as one of the\n              processing nodes.  \n            - if (listening_port != 0) then\n                - This function will listen on TCP port listening_port for a connection\n                  from bsp_connect().  \n            - else\n                - An available TCP port number is automatically selected and this function\n                  will listen on it for a connection from bsp_connect(). \n            - Once a listening port is opened, port_notify_function() is called with the\n              port number used.  This provides a mechanism to find out what listening port\n              has been used if it is automatically selected.  It also allows you to find\n              out when the routine has begun listening for an incoming connection from\n              bsp_connect().\n            - Once a connection is established, we will close the listening port so it is\n              free for use by other applications.  The connection and BSP computation will\n              continue uninterrupted.\n            - This call to bsp_listen_dynamic_port() blocks until the BSP computation has\n              completed on all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type,\n        typename ARG1,\n        typename ARG2\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1,arg2) must be a valid expression \n                  (i.e. funct must be a function or function object)\n            - port_notify_function((unsigned short) 1234) must be a valid expression\n              (i.e. port_notify_function() must be a function or function object taking an \n              unsigned short)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT,arg1,arg2) will be executed and\n              it will then be able to participate in the BSP computation as one of the\n              processing nodes.  \n            - if (listening_port != 0) then\n                - This function will listen on TCP port listening_port for a connection\n                  from bsp_connect().  \n            - else\n                - An available TCP port number is automatically selected and this function\n                  will listen on it for a connection from bsp_connect(). \n            - Once a listening port is opened, port_notify_function() is called with the\n              port number used.  This provides a mechanism to find out what listening port\n              has been used if it is automatically selected.  It also allows you to find\n              out when the routine has begun listening for an incoming connection from\n              bsp_connect().\n            - Once a connection is established, we will close the listening port so it is\n              free for use by other applications.  The connection and BSP computation will\n              continue uninterrupted.\n            - This call to bsp_listen_dynamic_port() blocks until the BSP computation has\n              completed on all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1,arg2,arg3) must be a valid expression \n                  (i.e. funct must be a function or function object)\n            - port_notify_function((unsigned short) 1234) must be a valid expression\n              (i.e. port_notify_function() must be a function or function object taking an \n              unsigned short)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT,arg1,arg2,arg3) will be\n              executed and it will then be able to participate in the BSP computation as\n              one of the processing nodes.  \n            - if (listening_port != 0) then\n                - This function will listen on TCP port listening_port for a connection\n                  from bsp_connect().  \n            - else\n                - An available TCP port number is automatically selected and this function\n                  will listen on it for a connection from bsp_connect(). \n            - Once a listening port is opened, port_notify_function() is called with the\n              port number used.  This provides a mechanism to find out what listening port\n              has been used if it is automatically selected.  It also allows you to find\n              out when the routine has begun listening for an incoming connection from\n              bsp_connect().\n            - Once a connection is established, we will close the listening port so it is\n              free for use by other applications.  The connection and BSP computation will\n              continue uninterrupted.\n            - This call to bsp_listen_dynamic_port() blocks until the BSP computation has\n              completed on all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename port_notify_function_type,\n        typename funct_type,\n        typename ARG1,\n        typename ARG2,\n        typename ARG3,\n        typename ARG4\n        >\n    void bsp_listen_dynamic_port (\n        unsigned short listening_port,\n        port_notify_function_type port_notify_function,\n        funct_type funct,\n        ARG1 arg1,\n        ARG2 arg2,\n        ARG3 arg3,\n        ARG4 arg4\n    );\n    /*!\n        requires\n            - let CONTEXT be an instance of a bsp_context object.  Then:\n                - funct(CONTEXT,arg1,arg2,arg3,arg4) must be a valid expression \n                  (i.e. funct must be a function or function object)\n            - port_notify_function((unsigned short) 1234) must be a valid expression\n              (i.e. port_notify_function() must be a function or function object taking an \n              unsigned short)\n        ensures\n            - This function listens for a connection from the bsp_connect() routine.  Once\n              this connection is established, funct(CONTEXT,arg1,arg2,arg3,arg4) will be\n              executed and it will then be able to participate in the BSP computation as\n              one of the processing nodes.  \n            - if (listening_port != 0) then\n                - This function will listen on TCP port listening_port for a connection\n                  from bsp_connect().  \n            - else\n                - An available TCP port number is automatically selected and this function\n                  will listen on it for a connection from bsp_connect(). \n            - Once a listening port is opened, port_notify_function() is called with the\n              port number used.  This provides a mechanism to find out what listening port\n              has been used if it is automatically selected.  It also allows you to find\n              out when the routine has begun listening for an incoming connection from\n              bsp_connect().\n            - Once a connection is established, we will close the listening port so it is\n              free for use by other applications.  The connection and BSP computation will\n              continue uninterrupted.\n            - This call to bsp_listen_dynamic_port() blocks until the BSP computation has\n              completed on all processing nodes.\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is an error which prevents the BSP\n                job from executing.  \n            - Any exception thrown by funct() will be propagated out of this call to\n              bsp_connect().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BsP_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/bsp.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BSPh_\n#define DLIB_BSPh_ \n\n\n#include \"bsp/bsp.h\"\n\n#endif // DLIB_BSPh_ \n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/byte_orderer/byte_orderer_kernel_1.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BYTE_ORDEREr_KERNEL_1_ \n#define DLIB_BYTE_ORDEREr_KERNEL_1_ \n\n#include \"byte_orderer_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    class byte_orderer \n    {\n        /*!\n            INITIAL VALUE\n                - if (this machine is little endian) then\n                    - little_endian == true\n                - else\n                    - little_endian == false\n\n            CONVENTION\n                - host_is_big_endian() == !little_endian\n                - host_is_little_endian() == little_endian\n\n                - if (this machine is little endian) then\n                    - little_endian == true\n                - else\n                    - little_endian == false\n\n\n        !*/\n\n\n    public:\n\n        // this is here for backwards compatibility with older versions of dlib.\n        typedef byte_orderer kernel_1a;\n\n        byte_orderer (        \n        )\n        {\n            // This will probably never be false but if it is then it means chars are not 8bits\n            // on this system.  Which is a problem for this object.\n            COMPILE_TIME_ASSERT(sizeof(short) >= 2);\n\n            unsigned long temp = 1;\n            unsigned char* ptr = reinterpret_cast<unsigned char*>(&temp);\n            if (*ptr == 1)\n                little_endian = true;\n            else\n                little_endian = false;\n        }\n\n        virtual ~byte_orderer (\n        ){}\n\n        bool host_is_big_endian (\n        ) const { return !little_endian; }\n\n        bool host_is_little_endian (\n        ) const { return little_endian; }\n\n        template <\n            typename T\n            >\n        inline void host_to_network (\n            T& item\n        ) const\n        { if (little_endian) flip(item); }\n\n        template <\n            typename T\n            >\n        inline void network_to_host (\n            T& item\n        ) const { if (little_endian) flip(item); }\n\n        template <\n            typename T\n            >\n        void host_to_big (\n            T& item\n        ) const { if (little_endian) flip(item); }\n\n        template <\n            typename T\n            >\n        void big_to_host (\n            T& item\n        ) const { if (little_endian) flip(item); }\n\n        template <\n            typename T\n            >\n        void host_to_little (\n            T& item\n        ) const { if (!little_endian) flip(item); }\n\n        template <\n            typename T\n            >\n        void little_to_host (\n            T& item\n        ) const { if (!little_endian) flip(item); }\n\n\n    private:\n\n        template <\n            typename T,\n            size_t size\n            >\n        inline void flip (\n            T (&array)[size]\n        ) const\n        /*!\n            ensures\n                - flips the bytes in every element of this array\n        !*/\n        {\n            for (size_t i = 0; i < size; ++i)\n            {\n                flip(array[i]);\n            }\n        }\n\n        template <\n            typename T\n            >\n        inline void flip (\n            T& item\n        ) const\n        /*!\n            ensures\n                - reverses the byte ordering in item\n        !*/\n        {\n            DLIB_ASSERT_HAS_STANDARD_LAYOUT(T);\n\n            T value;\n\n            // If you are getting this as an error then you are probably using\n            // this object wrong.  If you think you aren't then send me (Davis) an\n            // email and I'll either set you straight or change/remove this check so\n            // your stuff works :)\n            COMPILE_TIME_ASSERT(sizeof(T) <= sizeof(long double));\n\n            // If you are getting a compile error on this line then it means T is\n            // a pointer type.  It doesn't make any sense to byte swap pointers\n            // since they have no meaning outside the context of their own process.\n            // So you probably just forgot to dereference that pointer before passing\n            // it to this function  :)\n            COMPILE_TIME_ASSERT(is_pointer_type<T>::value == false);\n\n\n            const size_t size = sizeof(T);\n            unsigned char* const ptr = reinterpret_cast<unsigned char*>(&item);\n            unsigned char* const ptr_temp = reinterpret_cast<unsigned char*>(&value);\n            for (size_t i = 0; i < size; ++i)\n                ptr_temp[size-i-1] = ptr[i];\n\n            item = value;\n        }\n\n        bool little_endian;\n    };    \n\n    // make flip not do anything at all for chars\n    template <> inline void byte_orderer::flip<char> ( char& ) const {} \n    template <> inline void byte_orderer::flip<unsigned char> ( unsigned char& ) const {} \n    template <> inline void byte_orderer::flip<signed char> ( signed char& ) const {} \n}\n\n#endif // DLIB_BYTE_ORDEREr_KERNEL_1_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/byte_orderer/byte_orderer_kernel_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BYTE_ORDEREr_ABSTRACT_ \n#ifdef DLIB_BYTE_ORDEREr_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    class byte_orderer \n    {\n        /*!\n            INITIAL VALUE\n                This object has no state.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object simply provides a mechanism to convert data from a\n                host machine's own byte ordering to big or little endian and to \n                also do the reverse.\n\n                It also provides a pair of functions to convert to/from network byte\n                order where network byte order is big endian byte order.  This pair of\n                functions does the exact same thing as the host_to_big() and big_to_host()\n                functions and is provided simply so that client code can use the most \n                self documenting name appropriate.\n\n                Also note that this object is capable of correctly flipping the contents \n                of arrays when the arrays are declared on the stack.  e.g.  You can  \n                say things like:\n                int array[10]; \n                bo.host_to_network(array);\n        !*/\n\n    public:\n\n        byte_orderer (        \n        );\n        /*!\n            ensures                \n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~byte_orderer (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        bool host_is_big_endian (\n        ) const;\n        /*!\n            ensures\n                - if (the host computer is a big endian machine) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool host_is_little_endian (\n        ) const;\n        /*!\n            ensures\n                - if (the host computer is a little endian machine) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        template <\n            typename T\n            >\n        void host_to_network (\n            T& item\n        ) const;\n        /*!\n            ensures\n                - #item == the value of item converted from host byte order \n                  to network byte order.\n        !*/\n\n        template <\n            typename T\n            >\n        void network_to_host (\n            T& item\n        ) const;\n        /*!\n            ensures\n                - #item == the value of item converted from network byte order\n                  to host byte order.\n        !*/\n\n        template <\n            typename T\n            >\n        void host_to_big (\n            T& item\n        ) const;\n        /*!\n            ensures\n                - #item == the value of item converted from host byte order \n                  to big endian byte order.\n        !*/\n\n        template <\n            typename T\n            >\n        void big_to_host (\n            T& item\n        ) const;\n        /*!\n            ensures\n                - #item == the value of item converted from big endian byte order\n                  to host byte order.\n        !*/\n\n        template <\n            typename T\n            >\n        void host_to_little (\n            T& item\n        ) const;\n        /*!\n            ensures\n                - #item == the value of item converted from host byte order \n                  to little endian byte order.\n        !*/\n\n        template <\n            typename T\n            >\n        void little_to_host (\n            T& item\n        ) const;\n        /*!\n            ensures\n                - #item == the value of item converted from little endian byte order\n                  to host byte order.\n        !*/\n\n    };    \n}\n\n#endif // DLIB_BYTE_ORDEREr_ABSTRACT_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/byte_orderer.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BYTE_ORDEREr_ \n#define DLIB_BYTE_ORDEREr_ \n\n\n#include \"byte_orderer/byte_orderer_kernel_1.h\"\n\n#endif // DLIB_BYTE_ORDEREr_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cassert",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/clustering/chinese_whispers.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CHINESE_WHISPErS_Hh_\n#define DLIB_CHINESE_WHISPErS_Hh_\n\n#include \"chinese_whispers_abstract.h\"\n#include <vector>\n#include \"../rand.h\"\n#include \"../graph_utils/edge_list_graphs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    inline unsigned long chinese_whispers (\n        const std::vector<ordered_sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const unsigned long num_iterations,\n        dlib::rand& rnd\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_ordered_by_index(edges),\n                    \"\\t unsigned long chinese_whispers()\"\n                    << \"\\n\\t Invalid inputs were given to this function\"\n        );\n\n        labels.clear();\n        if (edges.size() == 0)\n            return 0;\n\n        std::vector<std::pair<unsigned long, unsigned long> > neighbors;\n        find_neighbor_ranges(edges, neighbors);\n\n        // Initialize the labels, each node gets a different label.\n        labels.resize(neighbors.size());\n        for (unsigned long i = 0; i < labels.size(); ++i)\n            labels[i] = i;\n\n\n        for (unsigned long iter = 0; iter < neighbors.size()*num_iterations; ++iter)\n        {\n            // Pick a random node.\n            const unsigned long idx = rnd.get_random_64bit_number()%neighbors.size();\n\n            // Count how many times each label happens amongst our neighbors.\n            std::map<unsigned long, double> labels_to_counts;\n            const unsigned long end = neighbors[idx].second;\n            for (unsigned long i = neighbors[idx].first; i != end; ++i)\n            {\n                labels_to_counts[labels[edges[i].index2()]] += edges[i].distance();\n            }\n\n            // find the most common label\n            std::map<unsigned long, double>::iterator i;\n            double best_score = -std::numeric_limits<double>::infinity();\n            unsigned long best_label = labels[idx];\n            for (i = labels_to_counts.begin(); i != labels_to_counts.end(); ++i)\n            {\n                if (i->second > best_score)\n                {\n                    best_score = i->second;\n                    best_label = i->first;\n                }\n            }\n\n            labels[idx] = best_label;\n        }\n\n\n        // Remap the labels into a contiguous range.  First we find the\n        // mapping.\n        std::map<unsigned long,unsigned long> label_remap;\n        for (unsigned long i = 0; i < labels.size(); ++i)\n        {\n            const unsigned long next_id = label_remap.size();\n            if (label_remap.count(labels[i]) == 0)\n                label_remap[labels[i]] = next_id;\n        }\n        // now apply the mapping to all the labels.\n        for (unsigned long i = 0; i < labels.size(); ++i)\n        {\n            labels[i] = label_remap[labels[i]];\n        }\n\n        return label_remap.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline unsigned long chinese_whispers (\n        const std::vector<sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const unsigned long num_iterations,\n        dlib::rand& rnd\n    )\n    {\n        std::vector<ordered_sample_pair> oedges;\n        convert_unordered_to_ordered(edges, oedges);\n        std::sort(oedges.begin(), oedges.end(), &order_by_index<ordered_sample_pair>);\n\n        return chinese_whispers(oedges, labels, num_iterations, rnd);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline unsigned long chinese_whispers (\n        const std::vector<sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const unsigned long num_iterations = 100\n    )\n    {\n        dlib::rand rnd;\n        return chinese_whispers(edges, labels, num_iterations, rnd);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline unsigned long chinese_whispers (\n        const std::vector<ordered_sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const unsigned long num_iterations = 100\n    )\n    {\n        dlib::rand rnd;\n        return chinese_whispers(edges, labels, num_iterations, rnd);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CHINESE_WHISPErS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/clustering/chinese_whispers_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CHINESE_WHISPErS_ABSTRACT_Hh_\n#ifdef DLIB_CHINESE_WHISPErS_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../rand.h\"\n#include \"../graph_utils/ordered_sample_pair_abstract.h\"\n#include \"../graph_utils/sample_pair_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long chinese_whispers (\n        const std::vector<ordered_sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const unsigned long num_iterations,\n        dlib::rand& rnd\n    );\n    /*!\n        requires\n            - is_ordered_by_index(edges) == true\n        ensures\n            - This function implements the graph clustering algorithm described in the\n              paper: Chinese Whispers - an Efficient Graph Clustering Algorithm and its\n              Application to Natural Language Processing Problems by Chris Biemann.\n            - Interprets edges as a directed graph.  That is, it contains the edges on the\n              said graph and the ordered_sample_pair::distance() values define the edge\n              weights (larger values indicating a stronger edge connection between the\n              nodes).  If an edge has a distance() value of infinity then it is considered\n              a \"must link\" edge.\n            - returns the number of clusters found.\n            - #labels.size() == max_index_plus_one(edges)\n            - for all valid i:\n                - #labels[i] == the cluster ID of the node with index i in the graph.  \n                - 0 <= #labels[i] < the number of clusters found\n                  (i.e. cluster IDs are assigned contiguously and start at 0) \n            - Duplicate edges are interpreted as if there had been just one edge with a\n              distance value equal to the sum of all the duplicate edge's distance values.\n            - The algorithm performs exactly num_iterations passes over the graph before\n              terminating.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long chinese_whispers (\n        const std::vector<sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const unsigned long num_iterations,\n        dlib::rand& rnd\n    );\n    /*!\n        ensures\n            - This function is identical to the above chinese_whispers() routine except\n              that it operates on a vector of sample_pair objects instead of\n              ordered_sample_pairs.  Therefore, this is simply a convenience routine.  In\n              particular, it is implemented by transforming the given edges into\n              ordered_sample_pairs and then calling the chinese_whispers() routine defined\n              above.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long chinese_whispers (\n        const std::vector<ordered_sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const unsigned long num_iterations = 100\n    );\n    /*!\n        requires\n            - is_ordered_by_index(edges) == true\n        ensures\n            - performs: return chinese_whispers(edges, labels, num_iterations, rnd)\n              where rnd is a default initialized dlib::rand object.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long chinese_whispers (\n        const std::vector<sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const unsigned long num_iterations = 100\n    );\n    /*!\n        ensures\n            - performs: return chinese_whispers(edges, labels, num_iterations, rnd)\n              where rnd is a default initialized dlib::rand object.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CHINESE_WHISPErS_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/clustering/modularity_clustering.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MODULARITY_ClUSTERING__H__\n#define DLIB_MODULARITY_ClUSTERING__H__\n\n#include \"modularity_clustering_abstract.h\"\n#include \"../sparse_vector.h\"\n#include \"../graph_utils/edge_list_graphs.h\"\n#include \"../matrix.h\"\n#include \"../rand.h\"\n\nnamespace dlib\n{\n\n// -----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline double newman_cluster_split (\n            dlib::rand& rnd,\n            const std::vector<ordered_sample_pair>& edges,\n            const matrix<double,0,1>& node_degrees, // k from the Newman paper\n            const matrix<double,0,1>& Bdiag,        // diag(B) from the Newman paper\n            const double& edge_sum,                 // m from the Newman paper\n            matrix<double,0,1>& labels,\n            const double eps,\n            const unsigned long max_iterations\n        )\n        /*!\n            requires\n                - node_degrees.size() == max_index_plus_one(edges)\n                - Bdiag.size() == max_index_plus_one(edges)\n                - edges must be sorted according to order_by_index()\n            ensures\n                - This routine splits a graph into two subgraphs using the Newman \n                  clustering method.  \n                - returns the modularity obtained when the graph is split according\n                  to the contents of #labels. \n                - #labels.size() == node_degrees.size()\n                - for all valid i: #labels(i) == -1 or +1\n                - if (this function returns 0) then\n                    - all the labels are equal, i.e. the graph is not split.\n        !*/\n        {\n            // Scale epsilon so that it is relative to the expected value of an element of a\n            // unit vector of length node_degrees.size().\n            const double power_iter_eps = eps * std::sqrt(1.0/node_degrees.size());\n\n            // Make a random unit vector and put in labels.\n            labels.set_size(node_degrees.size());\n            for (long i = 0; i < labels.size(); ++i)\n                labels(i) = rnd.get_random_gaussian();\n            labels /= length(labels);\n\n            matrix<double,0,1> Bv, Bv_unit;\n\n            // Do the power iteration for a while.\n            double eig = -1;\n            double offset = 0;\n            while (eig < 0)\n            {\n\n                // any number larger than power_iter_eps\n                double iteration_change = power_iter_eps*2+1; \n                for (unsigned long i = 0; i < max_iterations && iteration_change > power_iter_eps; ++i) \n                {\n                    sparse_matrix_vector_multiply(edges, labels, Bv);\n                    Bv -= dot(node_degrees, labels)/(2*edge_sum) * node_degrees;\n\n                    if (offset != 0)\n                    {\n                        Bv -= offset*labels;\n                    }\n\n\n                    const double len = length(Bv);\n                    if (len != 0)\n                    {\n                        Bv_unit = Bv/len;\n                        iteration_change = max(abs(labels-Bv_unit));\n                        labels.swap(Bv_unit);\n                    }\n                    else\n                    {\n                        // Had a bad time, pick another random vector and try it with the\n                        // power iteration.\n                        for (long i = 0; i < labels.size(); ++i)\n                            labels(i) = rnd.get_random_gaussian();\n                    }\n                }\n\n                eig = dot(Bv,labels);\n                // we will repeat this loop if the largest eigenvalue is negative\n                offset = eig;\n            }\n\n\n            for (long i = 0; i < labels.size(); ++i)\n            {\n                if (labels(i) > 0)\n                    labels(i) = 1;\n                else\n                    labels(i) = -1;\n            }\n\n\n            // compute B*labels, store result in Bv.\n            sparse_matrix_vector_multiply(edges, labels, Bv);\n            Bv -= dot(node_degrees, labels)/(2*edge_sum) * node_degrees;\n\n            // Do some label refinement.  In this step we swap labels if it\n            // improves the modularity score.\n            bool flipped_label = true;\n            while(flipped_label)\n            {\n                flipped_label = false;\n                unsigned long idx = 0;\n                for (long i = 0; i < labels.size(); ++i)\n                {\n                    const double val = -2*labels(i);\n                    const double increase = 4*Bdiag(i) + 2*val*Bv(i);\n\n                    // if there is an increase in modularity for swapping this label\n                    if (increase > 0)\n                    {\n                        labels(i) *= -1;\n                        while (idx < edges.size() && edges[idx].index1() == (unsigned long)i)\n                        {\n                            const long j = edges[idx].index2();\n                            Bv(j) += val*edges[idx].distance();\n                            ++idx;\n                        }\n\n                        Bv -= (val*node_degrees(i)/(2*edge_sum))*node_degrees;\n\n                        flipped_label = true;\n                    }\n                    else\n                    {\n                        while (idx < edges.size() && edges[idx].index1() == (unsigned long)i)\n                        {\n                            ++idx;\n                        }\n                    }\n                }\n            }\n\n\n            const double modularity = dot(Bv, labels)/(4*edge_sum);\n\n            return modularity;\n        }\n\n    // -------------------------------------------------------------------------------------\n\n        inline unsigned long newman_cluster_helper (\n            dlib::rand& rnd,\n            const std::vector<ordered_sample_pair>& edges,\n            const matrix<double,0,1>& node_degrees, // k from the Newman paper\n            const matrix<double,0,1>& Bdiag,        // diag(B) from the Newman paper\n            const double& edge_sum,                 // m from the Newman paper\n            std::vector<unsigned long>& labels,\n            double modularity_threshold,\n            const double eps,\n            const unsigned long max_iterations\n        )\n        /*!\n            ensures\n                - returns the number of clusters the data was split into\n        !*/\n        {\n            matrix<double,0,1> l;\n            const double modularity = newman_cluster_split(rnd,edges,node_degrees,Bdiag,edge_sum,l,eps,max_iterations);\n\n\n            // We need to collapse the node index values down to contiguous values.  So\n            // we use the following two vectors to contain the mappings from input index\n            // values to their corresponding index values in each split.\n            std::vector<unsigned long> left_idx_map(node_degrees.size());\n            std::vector<unsigned long> right_idx_map(node_degrees.size());\n\n            // figure out how many nodes went into each side of the split.\n            unsigned long num_left_split = 0;\n            unsigned long num_right_split = 0;\n            for (long i = 0; i < l.size(); ++i)\n            {\n                if (l(i) > 0)\n                {\n                    left_idx_map[i] = num_left_split;\n                    ++num_left_split;\n                }\n                else\n                {\n                    right_idx_map[i] = num_right_split;\n                    ++num_right_split;\n                }\n            }\n\n            // do a recursive split if it will improve the modularity.\n            if (modularity > modularity_threshold && num_left_split > 0 && num_right_split > 0)\n            {\n\n                // split the node_degrees and Bdiag matrices into left and right split parts\n                matrix<double,0,1> left_node_degrees(num_left_split);\n                matrix<double,0,1> right_node_degrees(num_right_split);\n                matrix<double,0,1> left_Bdiag(num_left_split);\n                matrix<double,0,1> right_Bdiag(num_right_split);\n                for (long i = 0; i < l.size(); ++i)\n                {\n                    if (l(i) > 0)\n                    {\n                        left_node_degrees(left_idx_map[i]) = node_degrees(i);\n                        left_Bdiag(left_idx_map[i]) = Bdiag(i);\n                    }\n                    else\n                    {\n                        right_node_degrees(right_idx_map[i]) = node_degrees(i);\n                        right_Bdiag(right_idx_map[i]) = Bdiag(i);\n                    }\n                }\n\n\n                // put the edges from one side of the split into split_edges\n                std::vector<ordered_sample_pair> split_edges;\n                modularity_threshold = 0;\n                for (unsigned long k = 0; k < edges.size(); ++k)\n                {\n                    const unsigned long i = edges[k].index1();\n                    const unsigned long j = edges[k].index2();\n                    const double d = edges[k].distance();\n                    if (l(i) > 0 && l(j) > 0)\n                    {\n                        split_edges.push_back(ordered_sample_pair(left_idx_map[i], left_idx_map[j], d));\n                        modularity_threshold += d;\n                    }\n                }\n                modularity_threshold -= sum(left_node_degrees*sum(left_node_degrees))/(2*edge_sum);\n                modularity_threshold /= 4*edge_sum;\n\n                unsigned long num_left_clusters;\n                std::vector<unsigned long> left_labels;\n                num_left_clusters = newman_cluster_helper(rnd,split_edges,left_node_degrees,left_Bdiag,\n                                                          edge_sum,left_labels,modularity_threshold,\n                                                          eps, max_iterations);\n\n                // now load the other side into split_edges and cluster it as well\n                split_edges.clear();\n                modularity_threshold = 0;\n                for (unsigned long k = 0; k < edges.size(); ++k)\n                {\n                    const unsigned long i = edges[k].index1();\n                    const unsigned long j = edges[k].index2();\n                    const double d = edges[k].distance();\n                    if (l(i) < 0 && l(j) < 0)\n                    {\n                        split_edges.push_back(ordered_sample_pair(right_idx_map[i], right_idx_map[j], d));\n                        modularity_threshold += d;\n                    }\n                }\n                modularity_threshold -= sum(right_node_degrees*sum(right_node_degrees))/(2*edge_sum);\n                modularity_threshold /= 4*edge_sum;\n\n                unsigned long num_right_clusters;\n                std::vector<unsigned long> right_labels;\n                num_right_clusters = newman_cluster_helper(rnd,split_edges,right_node_degrees,right_Bdiag,\n                                                           edge_sum,right_labels,modularity_threshold,\n                                                           eps, max_iterations);\n\n                // Now merge the labels from the two splits.\n                labels.resize(node_degrees.size());\n                for (unsigned long i = 0; i < labels.size(); ++i)\n                {\n                    // if this node was in the left split\n                    if (l(i) > 0)\n                    {\n                        labels[i] = left_labels[left_idx_map[i]];\n                    }\n                    else // if this node was in the right split\n                    {\n                        labels[i] = right_labels[right_idx_map[i]] + num_left_clusters;\n                    }\n                }\n\n\n                return num_left_clusters + num_right_clusters;\n            }\n            else\n            {\n                labels.assign(node_degrees.size(),0);\n                return 1;\n            }\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline unsigned long newman_cluster (\n        const std::vector<ordered_sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const double eps = 1e-4,\n        const unsigned long max_iterations = 2000\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_ordered_by_index(edges),\n                    \"\\t unsigned long newman_cluster()\"\n                    << \"\\n\\t Invalid inputs were given to this function\"\n        );\n\n        labels.clear();\n        if (edges.size() == 0)\n            return 0;\n\n        const unsigned long num_nodes = max_index_plus_one(edges);\n\n        // compute the node_degrees vector, edge_sum value, and diag(B).\n        matrix<double,0,1> node_degrees(num_nodes);\n        matrix<double,0,1> Bdiag(num_nodes);\n        Bdiag = 0;\n        double edge_sum = 0;\n        node_degrees = 0;\n        for (unsigned long i = 0; i < edges.size(); ++i)\n        {\n            node_degrees(edges[i].index1()) += edges[i].distance();\n            edge_sum += edges[i].distance();\n            if (edges[i].index1() == edges[i].index2())\n                Bdiag(edges[i].index1()) += edges[i].distance();\n        }\n        edge_sum /= 2;\n        Bdiag -= squared(node_degrees)/(2*edge_sum);\n\n\n        dlib::rand rnd;\n        return impl::newman_cluster_helper(rnd,edges,node_degrees,Bdiag,edge_sum,labels,0,eps,max_iterations);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline unsigned long newman_cluster (\n        const std::vector<sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const double eps = 1e-4,\n        const unsigned long max_iterations = 2000\n    )\n    {\n        std::vector<ordered_sample_pair> oedges;\n        convert_unordered_to_ordered(edges, oedges);\n        std::sort(oedges.begin(), oedges.end(), &order_by_index<ordered_sample_pair>);\n\n        return newman_cluster(oedges, labels, eps, max_iterations);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline std::vector<unsigned long> remap_labels (\n            const std::vector<unsigned long>& labels,\n            unsigned long& num_labels\n        )\n        /*!\n            ensures\n                - This function takes labels and produces a mapping which maps elements of\n                  labels into the most compact range in [0, max] as possible.  In particular,\n                  there won't be any unused integers in the mapped range.\n                - #num_labels == the number of distinct values in labels.\n                - returns a vector V such that:\n                    - V.size() == labels.size()\n                    - max(mat(V))+1 == num_labels.\n                    - for all valid i,j:\n                        - if (labels[i] == labels[j]) then\n                            - V[i] == V[j]\n                        - else\n                            - V[i] != V[j]\n        !*/\n        {\n            std::map<unsigned long, unsigned long> temp;\n            for (unsigned long i = 0; i < labels.size(); ++i)\n            {\n                if (temp.count(labels[i]) == 0)\n                {\n                    const unsigned long next = temp.size();\n                    temp[labels[i]] = next;\n                }\n            }\n\n            num_labels = temp.size();\n\n            std::vector<unsigned long> result(labels.size());\n            for (unsigned long i = 0; i < labels.size(); ++i)\n            {\n                result[i] = temp[labels[i]];\n            }\n            return result;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double modularity (\n        const std::vector<sample_pair>& edges,\n        const std::vector<unsigned long>& labels\n    )\n    {\n        const unsigned long num_nodes = max_index_plus_one(edges);\n        // make sure requires clause is not broken\n        DLIB_ASSERT(labels.size() == num_nodes,\n                    \"\\t double modularity()\"\n                    << \"\\n\\t Invalid inputs were given to this function\"\n        );\n\n        unsigned long num_labels;\n        const std::vector<unsigned long>& labels_ = dlib::impl::remap_labels(labels,num_labels);\n\n        std::vector<double> cluster_sums(num_labels,0);\n        std::vector<double> k(num_nodes,0);\n\n        double Q = 0;\n        double m = 0;\n        for (unsigned long i = 0; i < edges.size(); ++i)\n        {\n            const unsigned long n1 = edges[i].index1();\n            const unsigned long n2 = edges[i].index2();\n            k[n1] += edges[i].distance();\n            if (n1 != n2)\n                k[n2] += edges[i].distance();\n\n            if (n1 != n2)\n                m += edges[i].distance();\n            else\n                m += edges[i].distance()/2;\n\n            if (labels_[n1] == labels_[n2])\n            {\n                if (n1 != n2)\n                    Q += 2*edges[i].distance();\n                else\n                    Q += edges[i].distance();\n            }\n        }\n\n        if (m == 0)\n            return 0;\n\n        for (unsigned long i = 0; i < labels_.size(); ++i)\n        {\n            cluster_sums[labels_[i]] += k[i];\n        }\n\n        for (unsigned long i = 0; i < labels_.size(); ++i)\n        {\n            Q -= k[i]*cluster_sums[labels_[i]]/(2*m);\n        }\n\n        return 1.0/(2*m)*Q;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double modularity (\n        const std::vector<ordered_sample_pair>& edges,\n        const std::vector<unsigned long>& labels\n    )\n    {\n        const unsigned long num_nodes = max_index_plus_one(edges);\n        // make sure requires clause is not broken\n        DLIB_ASSERT(labels.size() == num_nodes,\n                    \"\\t double modularity()\"\n                    << \"\\n\\t Invalid inputs were given to this function\"\n        );\n\n\n        unsigned long num_labels;\n        const std::vector<unsigned long>& labels_ = dlib::impl::remap_labels(labels,num_labels);\n\n        std::vector<double> cluster_sums(num_labels,0);\n        std::vector<double> k(num_nodes,0);\n\n        double Q = 0;\n        double m = 0;\n        for (unsigned long i = 0; i < edges.size(); ++i)\n        {\n            const unsigned long n1 = edges[i].index1();\n            const unsigned long n2 = edges[i].index2();\n            k[n1] += edges[i].distance();\n            m += edges[i].distance();\n            if (labels_[n1] == labels_[n2])\n            {\n                Q += edges[i].distance();\n            }\n        }\n\n        if (m == 0)\n            return 0;\n\n        for (unsigned long i = 0; i < labels_.size(); ++i)\n        {\n            cluster_sums[labels_[i]] += k[i];\n        }\n\n        for (unsigned long i = 0; i < labels_.size(); ++i)\n        {\n            Q -= k[i]*cluster_sums[labels_[i]]/m;\n        }\n\n        return 1.0/m*Q;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MODULARITY_ClUSTERING__H__\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/clustering/modularity_clustering_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MODULARITY_ClUSTERING_ABSTRACT_Hh_\n#ifdef DLIB_MODULARITY_ClUSTERING_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../graph_utils/ordered_sample_pair_abstract.h\"\n#include \"../graph_utils/sample_pair_abstract.h\"\n\nnamespace dlib\n{\n\n// -----------------------------------------------------------------------------------------\n\n    double modularity (\n        const std::vector<sample_pair>& edges,\n        const std::vector<unsigned long>& labels\n    );\n    /*!\n        requires\n            - labels.size() == max_index_plus_one(edges)\n            - for all valid i:\n                - 0 <= edges[i].distance() < std::numeric_limits<double>::infinity()\n        ensures\n            - Interprets edges as an undirected graph.  That is, it contains the edges on\n              the said graph and the sample_pair::distance() values define the edge weights\n              (larger values indicating a stronger edge connection between the nodes).\n            - This function returns the modularity value obtained when the given input\n              graph is broken into subgraphs according to the contents of labels.  In\n              particular, we say that two nodes with indices i and j are in the same\n              subgraph or community if and only if labels[i] == labels[j].\n            - Duplicate edges are interpreted as if there had been just one edge with a\n              distance value equal to the sum of all the duplicate edge's distance values.\n            - See the paper Modularity and community structure in networks by M. E. J. Newman\n              for a detailed definition.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    double modularity (\n        const std::vector<ordered_sample_pair>& edges,\n        const std::vector<unsigned long>& labels\n    );\n    /*!\n        requires\n            - labels.size() == max_index_plus_one(edges)\n            - for all valid i:\n                - 0 <= edges[i].distance() < std::numeric_limits<double>::infinity()\n        ensures\n            - Interprets edges as a directed graph.  That is, it contains the edges on the\n              said graph and the ordered_sample_pair::distance() values define the edge\n              weights (larger values indicating a stronger edge connection between the\n              nodes).  Note that, generally, modularity is only really defined for\n              undirected graphs.  Therefore, the \"directed graph\" given to this function\n              should have symmetric edges between all nodes.  The reason this function is\n              provided at all is because sometimes a vector of ordered_sample_pair objects\n              is a useful representation of an undirected graph.\n            - This function returns the modularity value obtained when the given input\n              graph is broken into subgraphs according to the contents of labels.  In\n              particular, we say that two nodes with indices i and j are in the same\n              subgraph or community if and only if labels[i] == labels[j].\n            - Duplicate edges are interpreted as if there had been just one edge with a\n              distance value equal to the sum of all the duplicate edge's distance values.\n            - See the paper Modularity and community structure in networks by M. E. J. Newman\n              for a detailed definition.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long newman_cluster (\n        const std::vector<ordered_sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const double eps = 1e-4,\n        const unsigned long max_iterations = 2000\n    );\n    /*!\n        requires\n            - is_ordered_by_index(edges) == true\n            - for all valid i:\n                - 0 <= edges[i].distance() < std::numeric_limits<double>::infinity()\n        ensures\n            - This function performs the clustering algorithm described in the paper\n              Modularity and community structure in networks by M. E. J. Newman.  \n            - This function interprets edges as a graph and attempts to find the labeling\n              that maximizes modularity(edges, #labels).   \n            - returns the number of clusters found.\n            - #labels.size() == max_index_plus_one(edges)\n            - for all valid i:\n                - #labels[i] == the cluster ID of the node with index i in the graph.  \n                - 0 <= #labels[i] < the number of clusters found\n                  (i.e. cluster IDs are assigned contiguously and start at 0) \n            - The main computation of the algorithm is involved in finding an eigenvector\n              of a certain matrix.  To do this, we use the power iteration.  In particular,\n              each time we try to find an eigenvector we will let the power iteration loop\n              at most max_iterations times or until it reaches an accuracy of eps.\n              Whichever comes first.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long newman_cluster (\n        const std::vector<sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const double eps = 1e-4,\n        const unsigned long max_iterations = 2000\n    );\n    /*!\n        requires\n            - for all valid i:\n                - 0 <= edges[i].distance() < std::numeric_limits<double>::infinity()\n        ensures\n            - This function is identical to the above newman_cluster() routine except that\n              it operates on a vector of sample_pair objects instead of\n              ordered_sample_pairs.  Therefore, this is simply a convenience routine.  In\n              particular, it is implemented by transforming the given edges into\n              ordered_sample_pairs and then calling the newman_cluster() routine defined\n              above.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MODULARITY_ClUSTERING_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/clustering.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CLuSTERING_\n#define DLIB_CLuSTERING_\n\n#include \"clustering/modularity_clustering.h\"\n#include \"clustering/chinese_whispers.h\"\n#include \"svm/kkmeans.h\"\n\n#endif // DLIB_CLuSTERING_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmake",
    "content": "\n# Don't add dlib if it's already been added to the cmake project\nif (NOT TARGET dlib)\n\n    # Determine the path to dlib.\n    string(REGEX REPLACE \"cmake$\" \"\" dlib_path ${CMAKE_CURRENT_LIST_FILE})\n\n    if (CMAKE_COMPILER_IS_GNUCXX)\n        # By default, g++ won't warn or error if you forget to return a value in a\n        # function which requires you to do so.  This option makes it give a warning\n        # for doing this. \n        add_definitions(\"-Wreturn-type\")\n    endif()\n\n    # Setup some options to allow a user to enable SSE and AVX instruction use.  \n    if (CMAKE_COMPILER_IS_GNUCXX OR \"${CMAKE_CXX_COMPILER_ID}\" STREQUAL \"Clang\" \n                                 OR \"${CMAKE_CXX_COMPILER_ID}\" STREQUAL \"GNU\"\n                                 OR \"${CMAKE_CXX_COMPILER_ID}\" STREQUAL \"Intel\")\n        option(USE_SSE2_INSTRUCTIONS \"Compile your program with SSE2 instructions\" OFF)\n        option(USE_SSE4_INSTRUCTIONS \"Compile your program with SSE4 instructions\" OFF)\n        option(USE_AVX_INSTRUCTIONS  \"Compile your program with AVX instructions\"  OFF)\n        if(USE_AVX_INSTRUCTIONS)\n            add_definitions(-mavx)\n        elseif (USE_SSE4_INSTRUCTIONS)\n            add_definitions(-msse4)\n        elseif(USE_SSE2_INSTRUCTIONS)\n            add_definitions(-msse2)\n        endif()\n    elseif (MSVC OR \"${CMAKE_CXX_COMPILER_ID}\" STREQUAL \"MSVC\") # else if using Visual Studio \n        # Use SSE2 by default when using Visual Studio.\n        option(USE_SSE2_INSTRUCTIONS \"Compile your program with SSE2 instructions\" ON)\n        # Visual Studio 2005 didn't support SSE4 \n        if (NOT MSVC80)\n            option(USE_SSE4_INSTRUCTIONS \"Compile your program with SSE4 instructions\" OFF)\n        endif()\n        # Visual Studio 2005 and 2008 didn't support AVX\n        if (NOT MSVC80 AND NOT MSVC90)\n            option(USE_AVX_INSTRUCTIONS  \"Compile your program with AVX instructions\"  OFF)\n        endif() \n        include(CheckTypeSize)\n        check_type_size( \"void*\" SIZE_OF_VOID_PTR)\n        if(USE_AVX_INSTRUCTIONS)\n            add_definitions(/arch:AVX)\n        elseif (USE_SSE4_INSTRUCTIONS)\n            # Visual studio doesn't have an /arch:SSE2 flag when building in 64 bit modes.\n            # So only give it when we are doing a 32 bit build.\n            if (SIZE_OF_VOID_PTR EQUAL 4)\n                add_definitions(/arch:SSE2)  \n            endif()\n            add_definitions(-DDLIB_HAVE_SSE2)\n            add_definitions(-DDLIB_HAVE_SSE3)\n            add_definitions(-DDLIB_HAVE_SSE41)\n        elseif(USE_SSE2_INSTRUCTIONS)\n            # Visual studio doesn't have an /arch:SSE2 flag when building in 64 bit modes.\n            # So only give it when we are doing a 32 bit build.\n            if (SIZE_OF_VOID_PTR EQUAL 4)\n                add_definitions(/arch:SSE2)\n            endif()\n            add_definitions(-DDLIB_HAVE_SSE2)\n        endif()\n    endif()\n\n\n    # Add folder containing dlib to the include search path.\n    INCLUDE_DIRECTORIES(${dlib_path}/..)\n\n    # This is really optional, but nice.  It will make sure the build mode \n    # created by cmake is always release by default.\n    include(${dlib_path}/release_build_by_default)\n\n    add_subdirectory(${dlib_path} dlib_build)\nendif()\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmd_line_parser/cmd_line_parser_check_1.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CMD_LINE_PARSER_CHECk_1_\n#define DLIB_CMD_LINE_PARSER_CHECk_1_ \n\n#include \"cmd_line_parser_kernel_abstract.h\"\n#include <sstream>\n#include <string>\n#include \"../string.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n    template <\n        typename clp_base\n        >\n    class cmd_line_parser_check_1 : public clp_base\n    {\n\n        /*!\n            This extension doesn't add any state.\n\n        !*/\n\n\n    public:\n        typedef typename clp_base::char_type char_type;\n        typedef typename clp_base::string_type string_type;\n\n    // ------------------------------------------------------------------------------------\n\n        class cmd_line_check_error : public dlib::error \n        {\n            friend class cmd_line_parser_check_1;\n\n            cmd_line_check_error(\n                error_type t,\n                const string_type& opt_,\n                const string_type& arg_ \n            ) :\n                dlib::error(t),\n                opt(opt_),\n                opt2(),\n                arg(arg_),\n                required_opts()\n            { set_info_string(); }\n\n            cmd_line_check_error(\n                error_type t,\n                const string_type& opt_,\n                const string_type& opt2_,\n                int  // this is just to make this constructor different from the one above\n            ) :\n                dlib::error(t),\n                opt(opt_),\n                opt2(opt2_),\n                arg(),\n                required_opts()\n            { set_info_string(); }\n\n            cmd_line_check_error (\n                error_type t,\n                const string_type& opt_,\n                const std::vector<string_type>& vect\n            ) :\n                dlib::error(t),\n                opt(opt_),\n                opt2(),\n                arg(),\n                required_opts(vect)\n            { set_info_string(); }\n\n            cmd_line_check_error(\n                error_type t,\n                const string_type& opt_\n            ) :\n                dlib::error(t),\n                opt(opt_),\n                opt2(),\n                arg(),\n                required_opts()\n            { set_info_string(); }\n\n            ~cmd_line_check_error() throw() {}\n\n            void set_info_string (\n            )\n            {\n                std::ostringstream sout;\n                switch (type)\n                {\n                    case EINVALID_OPTION_ARG:\n                        sout << \"Command line error: '\" << narrow(arg) << \"' is not a valid argument to \" \n                             << \"the '\" << narrow(opt) << \"' option.\";\n                        break;\n                    case EMISSING_REQUIRED_OPTION:\n                        if (required_opts.size() == 1)\n                        {\n                            sout << \"Command line error: The '\" << narrow(opt) << \"' option requires the presence of \"\n                                 << \"the '\" << required_opts[0] << \"' option.\";\n                        }\n                        else\n                        {\n                            sout << \"Command line error: The '\" << narrow(opt) << \"' option requires the presence of \"\n                                 << \"one of the following options: \";\n                            for (unsigned long i = 0; i < required_opts.size(); ++i)\n                            {\n                                if (i == required_opts.size()-2)\n                                    sout << \"'\" << required_opts[i] << \"' or \";\n                                else if (i == required_opts.size()-1)\n                                    sout << \"'\" << required_opts[i] << \"'.\";\n                                else\n                                    sout << \"'\" << required_opts[i] << \"', \";\n                            }\n                        }\n                        break;\n                    case EINCOMPATIBLE_OPTIONS:\n                        sout << \"Command line error: The '\" << narrow(opt) << \"' and '\" << narrow(opt2) \n                            << \"' options cannot be given together on the command line.\";\n                        break;\n                    case EMULTIPLE_OCCURANCES:\n                        sout << \"Command line error: The '\" << narrow(opt) << \"' option can only \"\n                             << \"be given on the command line once.\";\n                        break;\n                    default:\n                        sout << \"Command line error.\";\n                        break;\n                }\n                const_cast<std::string&>(info) = wrap_string(sout.str(),0,0);\n            }\n\n        public:\n            const string_type opt;\n            const string_type opt2;\n            const string_type arg; \n            const std::vector<string_type> required_opts; \n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        void check_option_arg_type (\n            const string_type& option_name\n        ) const;\n\n        template <\n            typename T\n            >\n        void check_option_arg_range (\n            const string_type& option_name,\n            const T& first,\n            const T& last\n        ) const;\n\n        template <\n            typename T,\n            size_t length\n            >\n        void check_option_arg_range (\n            const string_type& option_name,\n            const T (&arg_set)[length]\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_option_arg_range (\n            const string_type& option_name,\n            const char_type* (&arg_set)[length]\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_incompatible_options (\n            const char_type* (&option_set)[length]\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_one_time_options (\n            const char_type* (&option_set)[length]\n        ) const;\n\n        void check_incompatible_options (\n            const string_type& option_name1,\n            const string_type& option_name2\n        ) const;\n\n        void check_sub_option (\n            const string_type& parent_option,\n            const string_type& sub_option\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_sub_options (\n            const string_type& parent_option,\n            const char_type* (&sub_option_set)[length]\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_sub_options (\n            const char_type* (&parent_option_set)[length],\n            const string_type& sub_option\n        ) const;\n\n        template <\n            size_t parent_length,\n            size_t sub_length\n            >\n        void check_sub_options (\n            const char_type* (&parent_option_set)[parent_length],\n            const char_type* (&sub_option_set)[sub_length]\n        ) const;\n    };\n\n    template <\n        typename clp_base\n        >\n    inline void swap (\n        cmd_line_parser_check_1<clp_base>& a, \n        cmd_line_parser_check_1<clp_base>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    template <typename T>\n    void cmd_line_parser_check_1<clp_base>::\n    check_option_arg_type (\n        const string_type& option_name\n    ) const\n    {\n        try\n        {\n            const typename clp_base::option_type& opt = this->option(option_name);\n            const unsigned long number_of_arguments = opt.number_of_arguments();\n            const unsigned long count = opt.count();\n            for (unsigned long i = 0; i < number_of_arguments; ++i)\n            {\n                for (unsigned long j = 0; j < count; ++j)\n                {\n                    string_cast<T>(opt.argument(i,j));\n                }\n            }\n        }\n        catch (string_cast_error& e)\n        {\n            throw cmd_line_check_error(EINVALID_OPTION_ARG,option_name,e.info);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    template <typename T>\n    void cmd_line_parser_check_1<clp_base>::\n    check_option_arg_range (\n        const string_type& option_name,\n        const T& first,\n        const T& last\n    ) const\n    {\n        try\n        {\n            const typename clp_base::option_type& opt = this->option(option_name);\n            const unsigned long number_of_arguments = opt.number_of_arguments();\n            const unsigned long count = opt.count();\n            for (unsigned long i = 0; i < number_of_arguments; ++i)\n            {\n                for (unsigned long j = 0; j < count; ++j)\n                {\n                    T temp(string_cast<T>(opt.argument(i,j)));\n                    if (temp < first || last < temp)\n                    {\n                        throw cmd_line_check_error(\n                            EINVALID_OPTION_ARG,\n                            option_name,\n                            opt.argument(i,j)\n                        );\n                    }\n                }\n            }\n        }\n        catch (string_cast_error& e)\n        {\n            throw cmd_line_check_error(EINVALID_OPTION_ARG,option_name,e.info);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base> \n    template < typename T, size_t length >\n    void cmd_line_parser_check_1<clp_base>::\n    check_option_arg_range (\n        const string_type& option_name,\n        const T (&arg_set)[length]\n    ) const\n    {\n        try\n        {\n            const typename clp_base::option_type& opt = this->option(option_name);\n            const unsigned long number_of_arguments = opt.number_of_arguments();\n            const unsigned long count = opt.count();\n            for (unsigned long i = 0; i < number_of_arguments; ++i)\n            {\n                for (unsigned long j = 0; j < count; ++j)\n                {\n                    T temp(string_cast<T>(opt.argument(i,j)));\n                    size_t k = 0;\n                    for (; k < length; ++k)\n                    {\n                        if (arg_set[k] == temp)\n                            break;\n                    }\n                    if (k == length)\n                    {\n                        throw cmd_line_check_error(\n                            EINVALID_OPTION_ARG,\n                            option_name,\n                            opt.argument(i,j)\n                        );\n                    }\n                }\n            }\n        }\n        catch (string_cast_error& e)\n        {\n            throw cmd_line_check_error(EINVALID_OPTION_ARG,option_name,e.info);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    template < size_t length >\n    void cmd_line_parser_check_1<clp_base>::\n    check_option_arg_range (\n        const string_type& option_name,\n        const char_type* (&arg_set)[length]\n    ) const\n    {\n        const typename clp_base::option_type& opt = this->option(option_name);\n        const unsigned long number_of_arguments = opt.number_of_arguments();\n        const unsigned long count = opt.count();\n        for (unsigned long i = 0; i < number_of_arguments; ++i)\n        {\n            for (unsigned long j = 0; j < count; ++j)\n            {\n                size_t k = 0;\n                for (; k < length; ++k)\n                {\n                    if (arg_set[k] == opt.argument(i,j))\n                        break;\n                }\n                if (k == length)\n                {\n                    throw cmd_line_check_error(\n                        EINVALID_OPTION_ARG,\n                        option_name,\n                        opt.argument(i,j)\n                    );\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    template < size_t length >\n    void cmd_line_parser_check_1<clp_base>::\n    check_incompatible_options (\n        const char_type* (&option_set)[length]\n    ) const\n    {\n        for (size_t i = 0; i < length; ++i)\n        {\n            for (size_t j = i+1; j < length; ++j)\n            {\n                if (this->option(option_set[i]).count() > 0 &&\n                    this->option(option_set[j]).count() > 0 )\n                {\n                    throw cmd_line_check_error(\n                        EINCOMPATIBLE_OPTIONS,\n                        option_set[i],\n                        option_set[j],\n                        0 // this argument has no meaning and is only here to make this\n                        // call different from the other constructor\n                    );\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    void cmd_line_parser_check_1<clp_base>::\n    check_incompatible_options (\n        const string_type& option_name1,\n        const string_type& option_name2\n    ) const\n    {\n        if (this->option(option_name1).count() > 0 &&\n            this->option(option_name2).count() > 0 )\n        {\n            throw cmd_line_check_error(\n                EINCOMPATIBLE_OPTIONS,\n                option_name1,\n                option_name2,\n                0 // this argument has no meaning and is only here to make this\n                // call different from the other constructor\n            );\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    void cmd_line_parser_check_1<clp_base>::\n    check_sub_option (\n        const string_type& parent_option,\n        const string_type& sub_option\n    ) const\n    {\n        if (this->option(parent_option).count() == 0)\n        {\n            if (this->option(sub_option).count() != 0)\n            {\n                std::vector<string_type> vect;\n                vect.resize(1);\n                vect[0] = parent_option;\n                throw cmd_line_check_error( EMISSING_REQUIRED_OPTION, sub_option, vect);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    template < size_t length >\n    void cmd_line_parser_check_1<clp_base>::\n    check_sub_options (\n        const string_type& parent_option,\n        const char_type* (&sub_option_set)[length]\n    ) const\n    {\n        if (this->option(parent_option).count() == 0)\n        {\n            size_t i = 0;\n            for (; i < length; ++i)\n            {\n                if (this->option(sub_option_set[i]).count() > 0)\n                    break;\n            }\n            if (i != length)\n            {\n                std::vector<string_type> vect;\n                vect.resize(1);\n                vect[0] = parent_option;\n                throw cmd_line_check_error( EMISSING_REQUIRED_OPTION, sub_option_set[i], vect);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    template < size_t length > \n    void cmd_line_parser_check_1<clp_base>::\n    check_sub_options (\n        const char_type* (&parent_option_set)[length],\n        const string_type& sub_option\n    ) const\n    {\n        // first check if the sub_option is present\n        if (this->option(sub_option).count() > 0)\n        {\n            // now check if any of the parents are present\n            bool parents_present = false;\n            for (size_t i = 0; i < length; ++i)\n            {\n                if (this->option(parent_option_set[i]).count() > 0)\n                {\n                    parents_present = true;\n                    break;\n                }\n            }\n\n            if (!parents_present)\n            {\n                std::vector<string_type> vect(parent_option_set, parent_option_set+length);\n                throw cmd_line_check_error( EMISSING_REQUIRED_OPTION, sub_option, vect);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    template < size_t parent_length, size_t sub_length > \n    void cmd_line_parser_check_1<clp_base>::\n    check_sub_options (\n        const char_type* (&parent_option_set)[parent_length],\n        const char_type* (&sub_option_set)[sub_length]\n    ) const\n    {\n        // first check if any of the parent options are present\n        bool parents_present = false;\n        for (size_t i = 0; i < parent_length; ++i)\n        {\n            if (this->option(parent_option_set[i]).count() > 0)\n            {\n                parents_present = true;\n                break;\n            }\n        }\n\n        if (!parents_present)\n        {\n            // none of these sub options should be present\n            size_t i = 0;\n            for (; i < sub_length; ++i)\n            {\n                if (this->option(sub_option_set[i]).count() > 0)\n                    break;\n            }\n            if (i != sub_length)\n            {\n                std::vector<string_type> vect(parent_option_set, parent_option_set+parent_length);\n                throw cmd_line_check_error( EMISSING_REQUIRED_OPTION, sub_option_set[i], vect);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_base>\n    template < size_t length >\n    void cmd_line_parser_check_1<clp_base>::\n    check_one_time_options (\n        const char_type* (&option_set)[length]\n    ) const\n    {\n        size_t i = 0;\n        for (; i < length; ++i)\n        {\n            if (this->option(option_set[i]).count() > 1)\n                break;\n        }\n        if (i != length)\n        {\n            throw cmd_line_check_error(\n                EMULTIPLE_OCCURANCES,\n                option_set[i] \n            );\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CMD_LINE_PARSER_CHECk_1_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmd_line_parser/cmd_line_parser_check_c.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CMD_LINE_PARSER_CHECk_C_\n#define DLIB_CMD_LINE_PARSER_CHECk_C_\n\n#include \"cmd_line_parser_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <string>\n#include \"../interfaces/cmd_line_parser_option.h\"\n#include \"../string.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename clp_check\n        >\n    class cmd_line_parser_check_c : public clp_check\n    {\n        public:\n\n        typedef typename clp_check::char_type char_type;\n        typedef typename clp_check::string_type string_type;\n\n        template <\n            typename T\n            >\n        void check_option_arg_type (\n            const string_type& option_name\n        ) const;\n\n        template <\n            typename T\n            >\n        void check_option_arg_range (\n            const string_type& option_name,\n            const T& first,\n            const T& last\n        ) const;\n\n        template <\n            typename T,\n            size_t length\n            >\n        void check_option_arg_range (\n            const string_type& option_name,\n            const T (&arg_set)[length]\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_option_arg_range (\n            const string_type& option_name,\n            const char_type* (&arg_set)[length]\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_incompatible_options (\n            const char_type* (&option_set)[length]\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_one_time_options (\n            const char_type* (&option_set)[length]\n        ) const;\n\n        void check_incompatible_options (\n            const string_type& option_name1,\n            const string_type& option_name2\n        ) const;\n\n        void check_sub_option (\n            const string_type& parent_option,\n            const string_type& sub_option\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_sub_options (\n            const string_type& parent_option,\n            const char_type* (&sub_option_set)[length]\n        ) const;\n\n        template <\n            size_t length\n            >\n        void check_sub_options (\n            const char_type* (&parent_option_set)[length],\n            const string_type& sub_option\n        ) const;\n\n        template <\n            size_t parent_length,\n            size_t sub_length\n            >\n        void check_sub_options (\n            const char_type* (&parent_option_set)[parent_length],\n            const char_type* (&sub_option_set)[sub_length]\n        ) const;\n    };\n\n\n    template <\n        typename clp_check\n        >\n    inline void swap (\n        cmd_line_parser_check_c<clp_check>& a, \n        cmd_line_parser_check_c<clp_check>& b \n    ) { a.swap(b); } \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    template <typename T>\n    void cmd_line_parser_check_c<clp_check>::\n    check_option_arg_type (\n        const string_type& option_name\n    ) const\n    {\n        COMPILE_TIME_ASSERT(is_pointer_type<T>::value == false);\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(option_name),\n               \"\\tvoid cmd_line_parser_check::check_option_arg_type()\"\n            << \"\\n\\tYou must have already parsed the command line and option_name must be valid.\"\n            << \"\\n\\tthis:                           \" << this\n            << \"\\n\\toption_is_defined(option_name): \" << ((this->option_is_defined(option_name))?\"true\":\"false\")\n            << \"\\n\\tparsed_line():                  \" << ((this->parsed_line())?\"true\":\"false\")\n            << \"\\n\\toption_name:                    \" << option_name \n            );\n\n        clp_check::template check_option_arg_type<T>(option_name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    template <typename T>\n    void cmd_line_parser_check_c<clp_check>::\n    check_option_arg_range (\n        const string_type& option_name,\n        const T& first,\n        const T& last\n    ) const\n    {\n        COMPILE_TIME_ASSERT(is_pointer_type<T>::value == false);\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(option_name) &&\n                 first <= last,\n               \"\\tvoid cmd_line_parser_check::check_option_arg_range()\"\n            << \"\\n\\tSee the requires clause for this function.\"\n            << \"\\n\\tthis:                           \" << this\n            << \"\\n\\toption_is_defined(option_name): \" << ((this->option_is_defined(option_name))?\"true\":\"false\")\n            << \"\\n\\tparsed_line():                  \" << ((this->parsed_line())?\"true\":\"false\")\n            << \"\\n\\toption_name:                    \" << option_name \n            << \"\\n\\tfirst:                          \" << first \n            << \"\\n\\tlast:                           \" << last \n            );\n\n        clp_check::check_option_arg_range(option_name,first,last);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check> \n    template < typename T, size_t length >\n    void cmd_line_parser_check_c<clp_check>::\n    check_option_arg_range (\n        const string_type& option_name,\n        const T (&arg_set)[length]\n    ) const\n    {\n        COMPILE_TIME_ASSERT(is_pointer_type<T>::value == false);\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(option_name), \n               \"\\tvoid cmd_line_parser_check::check_option_arg_range()\"\n            << \"\\n\\tSee the requires clause for this function.\"\n            << \"\\n\\tthis:                           \" << this\n            << \"\\n\\toption_is_defined(option_name): \" << ((this->option_is_defined(option_name))?\"true\":\"false\")\n            << \"\\n\\tparsed_line():                  \" << ((this->parsed_line())?\"true\":\"false\")\n            << \"\\n\\toption_name:                    \" << option_name \n            );\n\n        clp_check::check_option_arg_range(option_name,arg_set);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    template < size_t length >\n    void cmd_line_parser_check_c<clp_check>::\n    check_option_arg_range (\n        const string_type& option_name,\n        const char_type* (&arg_set)[length]\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(option_name), \n               \"\\tvoid cmd_line_parser_check::check_option_arg_range()\"\n            << \"\\n\\tSee the requires clause for this function.\"\n            << \"\\n\\tthis:                           \" << this\n            << \"\\n\\toption_is_defined(option_name): \" << ((this->option_is_defined(option_name))?\"true\":\"false\")\n            << \"\\n\\tparsed_line():                  \" << ((this->parsed_line())?\"true\":\"false\")\n            << \"\\n\\toption_name:                    \" << option_name \n            );\n\n        clp_check::check_option_arg_range(option_name,arg_set);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    template < size_t length >\n    void cmd_line_parser_check_c<clp_check>::\n    check_incompatible_options (\n        const char_type* (&option_set)[length]\n    ) const\n    {\n        // make sure requires clause is not broken\n        for (size_t i = 0; i < length; ++i)\n        {\n            DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(option_set[i]), \n                     \"\\tvoid cmd_line_parser_check::check_incompatible_options()\"\n                     << \"\\n\\tSee the requires clause for this function.\"\n                     << \"\\n\\tthis:                             \" << this\n                     << \"\\n\\toption_is_defined(option_set[i]): \" << ((this->option_is_defined(option_set[i]))?\"true\":\"false\")\n                     << \"\\n\\tparsed_line():                    \" << ((this->parsed_line())?\"true\":\"false\")\n                     << \"\\n\\toption_set[i]:                    \" << option_set[i] \n                     << \"\\n\\ti:                                \" << static_cast<unsigned long>(i) \n            );\n\n        }\n        clp_check::check_incompatible_options(option_set);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    void cmd_line_parser_check_c<clp_check>::\n    check_incompatible_options (\n        const string_type& option_name1,\n        const string_type& option_name2\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(option_name1) &&\n                 this->option_is_defined(option_name2), \n               \"\\tvoid cmd_line_parser_check::check_incompatible_options()\"\n            << \"\\n\\tSee the requires clause for this function.\"\n            << \"\\n\\tthis:                            \" << this\n            << \"\\n\\toption_is_defined(option_name1): \" << ((this->option_is_defined(option_name1))?\"true\":\"false\")\n            << \"\\n\\toption_is_defined(option_name2): \" << ((this->option_is_defined(option_name2))?\"true\":\"false\")\n            << \"\\n\\tparsed_line():                   \" << ((this->parsed_line())?\"true\":\"false\")\n            << \"\\n\\toption_name1:                    \" << option_name1 \n            << \"\\n\\toption_name2:                    \" << option_name2 \n            );\n\n        clp_check::check_incompatible_options(option_name1,option_name2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    void cmd_line_parser_check_c<clp_check>::\n    check_sub_option (\n        const string_type& parent_option,\n        const string_type& sub_option\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(parent_option) &&\n                      this->option_is_defined(sub_option), \n                 \"\\tvoid cmd_line_parser_check::check_sub_option()\"\n                 << \"\\n\\tSee the requires clause for this function.\"\n                 << \"\\n\\tthis:                             \" << this\n                 << \"\\n\\tparsed_line():                    \" << this->parsed_line()\n                 << \"\\n\\toption_is_defined(parent_option): \" << this->option_is_defined(parent_option)\n                 << \"\\n\\toption_is_defined(sub_option):    \" << this->option_is_defined(sub_option)\n                 << \"\\n\\tparent_option:                    \" << parent_option \n                 << \"\\n\\tsub_option:                       \" << sub_option \n        );\n        clp_check::check_sub_option(parent_option,sub_option);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    template < size_t length >\n    void cmd_line_parser_check_c<clp_check>::\n    check_sub_options (\n        const string_type& parent_option,\n        const char_type* (&sub_option_set)[length]\n    ) const\n    {\n        // make sure requires clause is not broken\n        for (size_t i = 0; i < length; ++i)\n        {\n            DLIB_CASSERT( this->option_is_defined(sub_option_set[i]), \n                     \"\\tvoid cmd_line_parser_check::check_sub_options()\"\n                     << \"\\n\\tSee the requires clause for this function.\"\n                     << \"\\n\\tthis:                                 \" << this\n                     << \"\\n\\toption_is_defined(sub_option_set[i]): \" \n                         << ((this->option_is_defined(sub_option_set[i]))?\"true\":\"false\")\n                     << \"\\n\\tsub_option_set[i]:                    \" << sub_option_set[i] \n                     << \"\\n\\ti:                                    \" << static_cast<unsigned long>(i) \n            );\n\n        }\n\n        DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(parent_option), \n                 \"\\tvoid cmd_line_parser_check::check_sub_options()\"\n                 << \"\\n\\tSee the requires clause for this function.\"\n                 << \"\\n\\tthis:                             \" << this\n                 << \"\\n\\toption_is_defined(parent_option): \" << ((this->option_is_defined(parent_option))?\"true\":\"false\")\n                 << \"\\n\\tparsed_line():                    \" << ((this->parsed_line())?\"true\":\"false\")\n                 << \"\\n\\tparent_option:                    \" << parent_option \n        );\n        clp_check::check_sub_options(parent_option,sub_option_set);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    template < size_t length >\n    void cmd_line_parser_check_c<clp_check>::\n    check_sub_options (\n        const char_type* (&parent_option_set)[length],\n        const string_type& sub_option\n    ) const\n    {\n        // make sure requires clause is not broken\n        for (size_t i = 0; i < length; ++i)\n        {\n            DLIB_CASSERT( this->option_is_defined(parent_option_set[i]), \n                     \"\\tvoid cmd_line_parser_check::check_sub_options()\"\n                     << \"\\n\\tSee the requires clause for this function.\"\n                     << \"\\n\\tthis:                                    \" << this\n                     << \"\\n\\toption_is_defined(parent_option_set[i]): \" \n                         << ((this->option_is_defined(parent_option_set[i]))?\"true\":\"false\")\n                     << \"\\n\\tparent_option_set[i]:                    \" << parent_option_set[i] \n                     << \"\\n\\ti:                                       \" << static_cast<unsigned long>(i) \n            );\n\n        }\n\n        DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(sub_option), \n                 \"\\tvoid cmd_line_parser_check::check_sub_options()\"\n                 << \"\\n\\tSee the requires clause for this function.\"\n                 << \"\\n\\tthis:                          \" << this\n                 << \"\\n\\toption_is_defined(sub_option): \" << ((this->option_is_defined(sub_option))?\"true\":\"false\")\n                 << \"\\n\\tparsed_line():                 \" << ((this->parsed_line())?\"true\":\"false\")\n                 << \"\\n\\tsub_option:                    \" << sub_option \n        );\n        clp_check::check_sub_options(parent_option_set,sub_option);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    template < size_t parent_length, size_t sub_length > \n    void cmd_line_parser_check_c<clp_check>::\n    check_sub_options (\n        const char_type* (&parent_option_set)[parent_length],\n        const char_type* (&sub_option_set)[sub_length]\n    ) const\n    {\n        // make sure requires clause is not broken\n        for (size_t i = 0; i < sub_length; ++i)\n        {\n            DLIB_CASSERT( this->option_is_defined(sub_option_set[i]), \n                     \"\\tvoid cmd_line_parser_check::check_sub_options()\"\n                     << \"\\n\\tSee the requires clause for this function.\"\n                     << \"\\n\\tthis:                                 \" << this\n                     << \"\\n\\toption_is_defined(sub_option_set[i]): \" \n                         << ((this->option_is_defined(sub_option_set[i]))?\"true\":\"false\")\n                     << \"\\n\\tsub_option_set[i]:                    \" << sub_option_set[i] \n                     << \"\\n\\ti:                                    \" << static_cast<unsigned long>(i) \n            );\n        }\n\n        for (size_t i = 0; i < parent_length; ++i)\n        {\n            DLIB_CASSERT( this->option_is_defined(parent_option_set[i]), \n                     \"\\tvoid cmd_line_parser_check::check_parent_options()\"\n                     << \"\\n\\tSee the requires clause for this function.\"\n                     << \"\\n\\tthis:                                    \" << this\n                     << \"\\n\\toption_is_defined(parent_option_set[i]): \" \n                         << ((this->option_is_defined(parent_option_set[i]))?\"true\":\"false\")\n                     << \"\\n\\tparent_option_set[i]:                    \" << parent_option_set[i] \n                     << \"\\n\\ti:                                       \" << static_cast<unsigned long>(i)\n            );\n        }\n\n\n\n        DLIB_CASSERT( this->parsed_line() == true , \n                 \"\\tvoid cmd_line_parser_check::check_sub_options()\"\n                 << \"\\n\\tYou must have parsed the command line before you call this function.\"\n                 << \"\\n\\tthis:                             \" << this\n                 << \"\\n\\tparsed_line():                    \" << ((this->parsed_line())?\"true\":\"false\")\n        );\n\n        clp_check::check_sub_options(parent_option_set,sub_option_set);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename clp_check>\n    template < size_t length >\n    void cmd_line_parser_check_c<clp_check>::\n    check_one_time_options (\n        const char_type* (&option_set)[length]\n    ) const\n    {\n        // make sure requires clause is not broken\n        for (size_t i = 0; i < length; ++i)\n        {\n            DLIB_CASSERT( this->parsed_line() == true && this->option_is_defined(option_set[i]), \n                     \"\\tvoid cmd_line_parser_check::check_one_time_options()\"\n                     << \"\\n\\tSee the requires clause for this function.\"\n                     << \"\\n\\tthis:                             \" << this\n                     << \"\\n\\toption_is_defined(option_set[i]): \" << ((this->option_is_defined(option_set[i]))?\"true\":\"false\")\n                     << \"\\n\\tparsed_line():                    \" << ((this->parsed_line())?\"true\":\"false\")\n                     << \"\\n\\toption_set[i]:                    \" << option_set[i] \n                     << \"\\n\\ti:                                \" << static_cast<unsigned long>(i)\n            );\n\n        }\n        clp_check::check_one_time_options(option_set);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CMD_LINE_PARSER_CHECk_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmd_line_parser/cmd_line_parser_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CMD_LINE_PARSER_KERNEl_1_\n#define DLIB_CMD_LINE_PARSER_KERNEl_1_\n\n#include \"cmd_line_parser_kernel_abstract.h\"\n#include \"../algs.h\"\n#include <string>\n#include <sstream>\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/cmd_line_parser_option.h\"\n#include \"../assert.h\"\n#include \"../string.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    class cmd_line_parser_kernel_1 : public enumerable<cmd_line_parser_option<charT> >\n    {\n        /*!\n            REQUIREMENTS ON map\n                is an implementation of map/map_kernel_abstract.h \n                is instantiated to map items of type std::basic_string<charT> to void*     \n\n            REQUIREMENTS ON sequence\n                is an implementation of sequence/sequence_kernel_abstract.h and\n                is instantiated with std::basic_string<charT>\n\n            REQUIREMENTS ON sequence2\n                is an implementation of sequence/sequence_kernel_abstract.h and\n                is instantiated with std::basic_string<charT>*\n\n            INITIAL VALUE\n                options.size()   == 0\n                argv.size()      == 0\n                have_parsed_line == false\n\n            CONVENTION\n                have_parsed_line           == parsed_line()\n                argv[index]                == operator[](index)\n                argv.size()                == number_of_arguments()\n                *((option_t*)options[name])  == option(name)\n                options.is_in_domain(name) == option_is_defined(name)\n        !*/\n\n\n\n\n    public:\n\n        typedef charT char_type;\n        typedef std::basic_string<charT> string_type;\n        typedef cmd_line_parser_option<charT> option_type;\n\n        // exception class\n        class cmd_line_parse_error : public dlib::error \n        { \n            void set_info_string (\n            )\n            {\n                std::ostringstream sout;\n                switch (type)\n                {\n                    case EINVALID_OPTION:\n                        sout << \"Command line error: '\" << narrow(item) << \"' is not a valid option.\";\n                        break;\n                    case ETOO_FEW_ARGS:\n                        if (num > 1)\n                        {\n                            sout << \"Command line error: The '\" << narrow(item) << \"' option requires \" << num \n                                << \" arguments.\"; \n                        }\n                        else\n                        {\n                            sout << \"Command line error: The '\" << narrow(item) << \"' option requires \" << num \n                                << \" argument.\"; \n                        }\n                        break;\n                    case ETOO_MANY_ARGS:\n                        sout << \"Command line error: The '\" << narrow(item) << \"' option does not take any arguments.\\n\";\n                        break;\n                    default:\n                        sout << \"Command line error.\";\n                        break;\n                }\n                const_cast<std::string&>(info) = wrap_string(sout.str(),0,0);\n            }\n\n        public: \n            cmd_line_parse_error(\n                error_type t,\n                const std::basic_string<charT>& _item\n            ) :\n                dlib::error(t),\n                item(_item),\n                num(0)\n            { set_info_string();}\n\n            cmd_line_parse_error(\n                error_type t,\n                const std::basic_string<charT>& _item,\n                unsigned long _num\n            ) :\n                dlib::error(t),\n                item(_item),\n                num(_num)\n            { set_info_string();}\n\n            cmd_line_parse_error(\n            ) :\n                dlib::error(),\n                item(),\n                num(0)\n            { set_info_string();}\n\n            ~cmd_line_parse_error() throw() {}\n\n            const std::basic_string<charT> item;\n            const unsigned long num;\n        };\n\n\n    private:\n\n        class option_t : public cmd_line_parser_option<charT>\n        {\n            /*!\n                INITIAL VALUE\n                    options.size()      == 0\n\n                CONVENTION\n                    name_                == name()\n                    description_         == description()\n                    number_of_arguments_ == number_of_arguments()\n                    options[N][arg]      == argument(arg,N)\n                    num_present          == count()                    \n            !*/\n\n            friend class cmd_line_parser_kernel_1<charT,map,sequence,sequence2>;\n\n        public:\n\n            const std::basic_string<charT>& name (\n            ) const { return name_; }\n\n            const std::basic_string<charT>& group_name (\n            ) const { return group_name_; }\n\n            const std::basic_string<charT>& description (\n            ) const { return description_; }\n\n            unsigned long number_of_arguments( \n            ) const { return number_of_arguments_; }\n\n            unsigned long count (\n            ) const { return num_present; }\n\n            const std::basic_string<charT>& argument (\n                unsigned long arg,\n                unsigned long N\n            ) const\n            {  \n                // make sure requires clause is not broken\n                DLIB_CASSERT( N < count() && arg < number_of_arguments(),\n                    \"\\tconst string_type& cmd_line_parser_option::argument(unsigned long,unsigned long)\"\n                    << \"\\n\\tInvalid arguments were given to this function.\"\n                    << \"\\n\\tthis:                  \" << this\n                    << \"\\n\\tN:                     \" << N\n                    << \"\\n\\targ:                   \" << arg \n                    << \"\\n\\tname():                \" << narrow(name())\n                    << \"\\n\\tcount():               \" << count()\n                    << \"\\n\\tnumber_of_arguments(): \" << number_of_arguments()\n                    );\n\n                return options[N][arg]; \n            }\n\n        protected:\n\n            option_t (\n            ) : \n                num_present(0)\n            {}\n\n            ~option_t()\n            {\n                clear();\n            }\n\n        private:\n\n            void clear()\n            /*!\n                ensures\n                    - #count() == 0\n                    - clears everything out of options and frees memory\n            !*/\n            {\n                for (unsigned long i = 0; i < options.size(); ++i)\n                {\n                    delete [] options[i];\n                }\n                options.clear();\n                num_present = 0;\n            }\n\n            // data members\n            std::basic_string<charT> name_;\n            std::basic_string<charT> group_name_;\n            std::basic_string<charT> description_;\n            sequence2 options;\n            unsigned long number_of_arguments_;\n            unsigned long num_present;\n\n\n\n            // restricted functions\n            option_t(option_t&);        // copy constructor\n            option_t& operator=(option_t&);    // assignment operator\n        };\n\n    // --------------------------\n\n    public:\n\n        cmd_line_parser_kernel_1 (\n        );\n\n        virtual ~cmd_line_parser_kernel_1 (\n        );\n\n        void clear(\n        );\n\n        void parse (\n            int argc,\n            const charT** argv\n        );\n\n        void parse (\n            int argc,\n            charT** argv\n        )\n        {\n            parse(argc, const_cast<const charT**>(argv));\n        }\n\n        bool parsed_line(\n        ) const;\n\n        bool option_is_defined (\n            const string_type& name\n        ) const;\n\n        void add_option (\n            const string_type& name,\n            const string_type& description,\n            unsigned long number_of_arguments = 0\n        );\n\n        void set_group_name (\n            const string_type& group_name\n        );\n\n        string_type get_group_name (\n        ) const { return group_name; }\n\n        const cmd_line_parser_option<charT>& option (\n            const string_type& name\n        ) const;\n\n        unsigned long number_of_arguments( \n        ) const;\n\n        const string_type& operator[] (\n            unsigned long index\n        ) const;\n\n        void swap (\n            cmd_line_parser_kernel_1& item\n        );\n\n        // functions from the enumerable interface\n        bool at_start (\n        ) const { return options.at_start(); }\n\n        void reset (\n        ) const { options.reset(); }\n\n        bool current_element_valid (\n        ) const { return options.current_element_valid(); }\n\n        const cmd_line_parser_option<charT>& element (\n        ) const { return *static_cast<cmd_line_parser_option<charT>*>(options.element().value()); }\n\n        cmd_line_parser_option<charT>& element (\n        ) { return *static_cast<cmd_line_parser_option<charT>*>(options.element().value()); }\n\n        bool move_next (\n        ) const { return options.move_next(); }\n\n        unsigned long size (\n        ) const { return options.size(); }\n\n    private:\n\n        // data members\n        map options;\n        sequence argv;\n        bool have_parsed_line;\n        string_type group_name;\n\n        // restricted functions\n        cmd_line_parser_kernel_1(cmd_line_parser_kernel_1&);        // copy constructor\n        cmd_line_parser_kernel_1& operator=(cmd_line_parser_kernel_1&);    // assignment operator\n\n    };   \n   \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    inline void swap (\n        cmd_line_parser_kernel_1<charT,map,sequence,sequence2>& a, \n        cmd_line_parser_kernel_1<charT,map,sequence,sequence2>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    cmd_line_parser_kernel_1 (\n    ) :\n        have_parsed_line(false)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    ~cmd_line_parser_kernel_1 (\n    ) \n    {\n        // delete all option_t objects in options\n        options.reset();\n        while (options.move_next())\n        {\n            delete static_cast<option_t*>(options.element().value());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    void cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    clear(\n    )\n    {\n        have_parsed_line = false;\n        argv.clear();\n\n\n        // delete all option_t objects in options\n        options.reset();\n        while (options.move_next())\n        {\n            delete static_cast<option_t*>(options.element().value());\n        }\n        options.clear();\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    void cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    parse (\n        int argc_,\n        const charT** argv\n    )\n    {\n        using namespace std;\n\n        // make sure there aren't any arguments hanging around from the last time\n        // parse was called\n        this->argv.clear();\n\n        // make sure that the options have been cleared of any arguments since\n        // the last time parse() was called\n        if (have_parsed_line)\n        {\n            options.reset();\n            while (options.move_next())\n            {\n                static_cast<option_t*>(options.element().value())->clear();                \n            }\n            options.reset();\n        }\n\n        // this tells us if we have seen -- on the command line all by itself\n        // or not.  \n        bool escape = false;\n\n        const unsigned long argc = static_cast<unsigned long>(argc_);\n        try \n        {     \n\n            for (unsigned long i = 1; i < argc; ++i)\n            {            \n                if (argv[i][0] == _dT(charT,'-') && !escape)\n                {\n                    // we are looking at the start of an option                \n\n                    // --------------------------------------------------------------------\n                    if (argv[i][1] == _dT(charT,'-'))\n                    {\n                        // we are looking at the start of a \"long named\" option\n                        string_type temp = &argv[i][2];\n                        string_type first_argument;\n                        typename string_type::size_type pos = temp.find_first_of(_dT(charT,'='));\n                        // This variable will be 1 if there is an argument supplied via the = sign\n                        // and 0 otherwise.\n                        unsigned long extra_argument = 0;\n                        if (pos != string_type::npos)\n                        {\n                            // there should be an extra argument\n                            extra_argument = 1;\n                            first_argument = temp.substr(pos+1);\n                            temp = temp.substr(0,pos);\n                        }\n\n                        // make sure this name is defined\n                        if (!options.is_in_domain(temp))\n                        {\n                            // the long name is not a valid option                            \n                            if (argv[i][2] == _dT(charT,'\\0'))\n                            {\n                                // there was nothing after the -- on the command line\n                                escape = true;\n                                continue;\n                            }\n                            else\n                            {\n                                // there was something after the command line but it \n                                // wasn't a valid option\n                                throw cmd_line_parse_error(EINVALID_OPTION,temp);\n                            }                            \n                        }\n                        \n\n                        option_t* o = static_cast<option_t*>(options[temp]);\n\n                        // check the number of arguments after this option and make sure\n                        // it is correct\n                        if (argc + extra_argument <= o->number_of_arguments() + i) \n                        {\n                            // there are too few arguments\n                            throw cmd_line_parse_error(ETOO_FEW_ARGS,temp,o->number_of_arguments());    \n                        }\n                        if (extra_argument && first_argument.size() == 0 ) \n                        {\n                            // if there would be exactly the right number of arguments if \n                            // the first_argument wasn't empty\n                            if (argc == o->number_of_arguments() + i)\n                                throw cmd_line_parse_error(ETOO_FEW_ARGS,temp,o->number_of_arguments());    \n                            else\n                            {\n                                // in this case we just ignore the trailing = and parse everything\n                                // the same.\n                                extra_argument = 0;\n                            }\n                        }\n                        // you can't force an option that doesn't have any arguments to take\n                        // one by using the --option=arg syntax\n                        if (extra_argument == 1 && o->number_of_arguments() == 0)\n                        {\n                            throw cmd_line_parse_error(ETOO_MANY_ARGS,temp);\n                        }\n                        \n\n\n\n\n\n                        // at this point we know that the option is ok and we should\n                        // populate its options object\n                        if (o->number_of_arguments() > 0)\n                        {\n\n                            string_type* stemp = new string_type[o->number_of_arguments()];\n                            unsigned long j = 0;\n\n                            // add the argument after the = sign if one is present\n                            if (extra_argument)\n                            {\n                                stemp[0] = first_argument;\n                                ++j;\n                            }\n\n                            for (; j < o->number_of_arguments(); ++j)\n                            {                            \n                                stemp[j] = argv[i+j+1-extra_argument];\n                            }\n                            o->options.add(o->options.size(),stemp);\n                        }\n                        o->num_present += 1;\n\n\n                        // adjust the value of i to account for the arguments to \n                        // this option\n                        i += o->number_of_arguments() - extra_argument;\n                    }\n                    // --------------------------------------------------------------------\n                    else\n                    {\n                        // we are looking at the start of a list of a single char options\n\n                        // make sure there is something in this string other than -\n                        if (argv[i][1] == _dT(charT,'\\0'))\n                        {\n                            throw cmd_line_parse_error();                            \n                        }\n\n                        string_type temp = &argv[i][1];\n                        const typename string_type::size_type num = temp.size();\n                        for (unsigned long k = 0; k < num; ++k)\n                        {\n                            string_type name;\n                            // Doing this instead of name = temp[k] seems to avoid a bug in g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2\n                            // which results in name[0] having the wrong value.\n                            name.resize(1);\n                            name[0] = temp[k];\n\n\n                            // make sure this name is defined\n                            if (!options.is_in_domain(name))\n                            {\n                                // the name is not a valid option\n                                throw cmd_line_parse_error(EINVALID_OPTION,name);\n                            }\n\n                            option_t* o = static_cast<option_t*>(options[name]);\n\n                            // if there are chars immediately following this option\n                            int delta = 0;\n                            if (num != k+1)\n                            {\n                                delta = 1;\n                            }\n\n                            // check the number of arguments after this option and make sure\n                            // it is correct                            \n                            if (argc + delta <= o->number_of_arguments() + i)\n                            {\n                                // there are too few arguments\n                                std::ostringstream sout;\n                                throw cmd_line_parse_error(ETOO_FEW_ARGS,name,o->number_of_arguments());    \n                            }\n\n                            \n                            o->num_present += 1;\n\n                            // at this point we know that the option is ok and we should\n                            // populate its options object\n                            if (o->number_of_arguments() > 0)\n                            {\n                                string_type* stemp = new string_type[o->number_of_arguments()];\n                                if (delta == 1)\n                                {\n                                    temp = &argv[i][2+k];\n                                    k = (unsigned long)num;  // this ensures that the argument to this \n                                              // option isn't going to be treated as a \n                                              // list of options\n                                    \n                                    stemp[0] = temp;\n                                }\n                                for (unsigned long j = 0; j < o->number_of_arguments()-delta; ++j)\n                                {\n                                    stemp[j+delta] = argv[i+j+1];\n                                }\n                                o->options.add(o->options.size(),stemp);\n\n                                // adjust the value of i to account for the arguments to \n                                // this option\n                                i += o->number_of_arguments()-delta;\n                            }\n                        } // for (unsigned long k = 0; k < num; ++k)\n                    }\n                    // --------------------------------------------------------------------\n\n                }\n                else\n                {\n                    // this is just a normal argument\n                    string_type temp = argv[i];\n                    this->argv.add(this->argv.size(),temp);             \n                }\n\n            }\n            have_parsed_line = true;\n\n        }\n        catch (...)\n        {\n            have_parsed_line = false;\n\n            // clear all the option objects\n            options.reset();\n            while (options.move_next())\n            {\n                static_cast<option_t*>(options.element().value())->clear();                \n            }\n            options.reset();\n\n            throw;            \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    bool cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    parsed_line(\n    ) const\n    {\n        return have_parsed_line;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    bool cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    option_is_defined (\n        const string_type& name\n    ) const\n    {\n        return options.is_in_domain(name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    void cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    set_group_name (\n        const string_type& group_name_\n    )\n    {\n        group_name = group_name_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    void cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    add_option (\n        const string_type& name,\n        const string_type& description,\n        unsigned long number_of_arguments\n    )\n    {\n        option_t* temp = new option_t;\n        try\n        { \n            temp->name_ = name;\n            temp->group_name_ = group_name;\n            temp->description_ = description;\n            temp->number_of_arguments_ = number_of_arguments;\n            void* t = temp;\n            string_type n(name);\n            options.add(n,t); \n        }catch (...) { delete temp; throw;}\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    const cmd_line_parser_option<charT>& cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    option (\n        const string_type& name\n    ) const\n    {\n        return *static_cast<cmd_line_parser_option<charT>*>(options[name]);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    unsigned long cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    number_of_arguments( \n    ) const\n    {\n        return argv.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    const std::basic_string<charT>& cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    operator[] (\n        unsigned long index\n    ) const\n    {\n        return argv[index];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename map,\n        typename sequence,\n        typename sequence2\n        >\n    void cmd_line_parser_kernel_1<charT,map,sequence,sequence2>::\n    swap (\n        cmd_line_parser_kernel_1<charT,map,sequence,sequence2>& item\n    )\n    {\n        options.swap(item.options);\n        argv.swap(item.argv);\n        exchange(have_parsed_line,item.have_parsed_line);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CMD_LINE_PARSER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmd_line_parser/cmd_line_parser_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CMD_LINE_PARSER_KERNEl_ABSTRACT_\n#ifdef DLIB_CMD_LINE_PARSER_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n#include <string>\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/cmd_line_parser_option.h\"\n#include <vector>\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename charT\n        >\n    class cmd_line_parser : public enumerable<cmd_line_parser_option<charT> >\n    {\n        /*!\n            REQUIREMENTS ON charT\n                Must be an integral type suitable for storing characters.  (e.g. char\n                or wchar_t)\n\n            INITIAL VALUE\n                - parsed_line() == false\n                - option_is_defined(x) == false, for all values of x\n                - get_group_name() == \"\"\n\n            ENUMERATION ORDER   \n                The enumerator will enumerate over all the options defined in *this \n                in alphebetical order according to the name of the option.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                parsed_line(), option_is_defined(), option(), number_of_arguments(),\n                operator[](), and swap() functions do not invalidate pointers or \n                references to internal data.  All other functions have no such guarantee.\n\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a command line parser. \n                The command lines must match the following BNF.  \n\n                command_line     ::= <program_name> { <options> | <arg> } [ -- {<word>} ]\n                program_name     ::= <word>\n                arg              ::= any <word> that does not start with - \n                option_arg       ::= <sword> \n                option_name      ::= <char>                \n                long_option_name ::= <char> {<char> | - }\n                options          ::= <bword> - <option_name> {<option_name>}  {<option_arg>}  |\n                                     <bword> -- <long_option_name> [=<option_arg>] {<bword> <option_arg>}\n                char             ::= any character other than - or =\n                word             ::= any string from argv where argv is the second \n                                     parameter to main() \n                sword            ::= any suffix of a string from argv where argv is the \n                                     second parameter to main() \n                bword            ::= This is an empty string which denotes the begining of a \n                                     <word>.\n\n\n                Options with arguments:\n                    An option with N arguments will consider the next N swords to be\n                    its arguments. \n\n                    so for example, if we have an option o that expects 2 arguments \n                    then the following are a few legal examples:\n\n                        program -o arg1 arg2 general_argument\n                        program -oarg1 arg2 general_argument\n\n                    arg1 and arg2 are associated with the option o and general_argument\n                    is not.\n\n                Arguments not associated with an option:\n                    An argument that is not associated with an option is considered a\n                    general command line argument and is indexed by operator[] defined\n                    by the cmd_line_parser object.  Additionally, if the string\n                    \"--\" appears in the command line all by itself then all words\n                    following it are considered to be general command line arguments.\n\n\n                    Consider the following two examples involving a command line and \n                    a cmd_line_parser object called parser.\n\n                    Example 1:\n                        command line: program general_arg1 -o arg1 arg2 general_arg2\n                        Then the following is true (assuming the o option is defined\n                        and takes 2 arguments).\n\n                        parser[0] == \"general_arg1\"\n                        parser[1] == \"general_arg2\"\n                        parser.number_of_arguments() == 2\n                        parser.option(\"o\").argument(0) == \"arg1\"\n                        parser.option(\"o\").argument(1) == \"arg2\"\n                        parser.option(\"o\").count() == 1\n\n                    Example 2:\n                        command line: program general_arg1 -- -o arg1 arg2 general_arg2\n                        Then the following is true (the -- causes everything following \n                        it to be treated as a general argument).\n                        \n                        parser[0] == \"general_arg1\"\n                        parser[1] == \"-o\"\n                        parser[2] == \"arg1\"\n                        parser[3] == \"arg2\"\n                        parser[4] == \"general_arg2\"\n                        parser.number_of_arguments() == 5\n                        parser.option(\"o\").count() == 0\n        !*/\n\n    public:\n\n        typedef charT char_type;\n        typedef std::basic_string<charT> string_type;\n        typedef cmd_line_parser_option<charT> option_type;\n\n        // exception class\n        class cmd_line_parse_error : public dlib::error \n        {\n            /*!\n                GENERAL\n                    This exception is thrown if there is an error detected in a \n                    command line while it is being parsed.  You can consult this \n                    object's type and item members to determine the nature of the \n                    error. (note that the type member is inherited from dlib::error).\n\n                INTERPRETING THIS EXCEPTION\n                    - if (type == EINVALID_OPTION) then\n                        - There was an undefined option on the command line\n                        - item == The invalid option that was on the command line\n                    - if (type == ETOO_FEW_ARGS) then\n                        - An option was given on the command line but it was not\n                          supplied with the required number of arguments.\n                        - item == The name of this option.\n                        - num == The number of arguments expected by this option.\n                    - if (type == ETOO_MANY_ARGS) then\n                        - An option was given on the command line such as --option=arg\n                          but this option doesn't take any arguments.\n                        - item == The name of this option.\n            !*/\n        public:\n            const std::basic_string<charT> item;\n            const unsigned long num;\n        };\n\n    // --------------------------\n\n        cmd_line_parser (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~cmd_line_parser (\n        );\n        /*!\n            ensures\n                 - all memory associated with *this has been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void parse (\n            int argc,\n            const charT** argv\n        );\n        /*!\n            requires                \n                - argv == an array of strings that was obtained from the second argument \n                          of the function main().\n                          (i.e. argv[0] should be the <program> token, argv[1] should be\n                          an <options> or <arg> token, etc.)\n                - argc == the number of strings in argv\n            ensures\n                - parses the command line given by argc and argv \n                - #parsed_line() == true\n                - #at_start() == true\n            throws\n                - std::bad_alloc\n                    if this exception is thrown then #*this is unusable until clear()\n                    is called successfully\n                - cmd_line_parse_error\n                    This exception is thrown if there is an error parsing the command line.\n                    If this exception is thrown then #parsed_line() == false and all \n                    options will have their count() set to 0 but otherwise there will \n                    be no effect (i.e. all registered options will remain registered).\n        !*/\n\n        void parse (\n            int argc,\n            charT** argv\n        );\n        /*!\n            This just calls this->parse(argc,argv) and performs the necessary const_cast\n            on argv.\n        !*/\n\n        bool parsed_line(\n        ) const;\n        /*!\n            ensures\n                - returns true if parse() has been called successfully \n                - returns false otherwise\n        !*/\n\n        bool option_is_defined (\n            const string_type& name\n        ) const;\n        /*!\n            ensures\n                - returns true if the option has been added to the parser object \n                  by calling add_option(name). \n                - returns false otherwise\n        !*/\n\n        void add_option (\n            const string_type& name,\n            const string_type& description,\n            unsigned long number_of_arguments = 0\n        );\n        /*!\n            requires\n                - parsed_line() == false \n                - option_is_defined(name) == false \n                - name does not contain any ' ', '\\t', '\\n', or '=' characters\n                - name[0] != '-'\n                - name.size() > 0\n            ensures\n                - #option_is_defined(name) == true \n                - #at_start() == true\n                - #option(name).count() == 0\n                - #option(name).description() == description \n                - #option(name).number_of_arguments() == number_of_arguments\n                - #option(name).group_name() == get_group_name()\n            throws\n                - std::bad_alloc\n                    if this exception is thrown then the add_option() function has no \n                    effect\n        !*/\n\n        const option_type& option (\n            const string_type& name\n        ) const;\n        /*! \n            requires\n                - option_is_defined(name) == true\n            ensures\n                - returns the option specified by name\n        !*/ \n\n        unsigned long number_of_arguments( \n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n            ensures\n                - returns the number of arguments present in the command line.\n                  This count does not include options or their arguments.  Only \n                  arguments unrelated to any option are counted.\n        !*/\n\n        const string_type& operator[] (\n            unsigned long N\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - N < number_of_arguments()\n            ensures\n                - returns the Nth command line argument\n        !*/\n\n        void swap (\n            cmd_line_parser& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n        void print_options (\n            std::basic_ostream<char_type>& out\n        ) const;\n        /*!\n            ensures\n                - prints all the command line options to out.\n                - #at_start() == true\n            throws                \n                - any exception.\n                    if an exception is thrown then #at_start() == true but otherwise  \n                    it will have no effect on the state of #*this.\n        !*/\n\n        void print_options (\n        ) const;\n        /*!\n            ensures\n                - prints all the command line options to cout.\n                - #at_start() == true\n            throws                \n                - any exception.\n                    if an exception is thrown then #at_start() == true but otherwise  \n                    it will have no effect on the state of #*this.\n        !*/\n\n        string_type get_group_name (\n        ) const;\n        /*!\n            ensures\n                - returns the current group name.  This is the group new options will be\n                  added into when added via add_option().  \n                - The group name of an option is used by print_options().  In particular,\n                  it groups all options with the same group name together and displays them\n                  under a title containing the text of the group name.  This allows you to\n                  group similar options together in the output of print_options().\n                - A group name of \"\" (i.e. the empty string) means that no group name is\n                  set.\n        !*/\n\n        void set_group_name (\n            const string_type& group_name\n        );\n        /*!\n            ensures\n                - #get_group_name() == group_name\n        !*/\n\n    // -------------------------------------------------------------\n    //                    Input Validation Tools\n    // -------------------------------------------------------------\n\n        class cmd_line_check_error : public dlib::error \n        {\n            /*!\n                This is the exception thrown by the check_*() routines if they find a\n                command line error.  The interpretation of the member variables is defined\n                below in each check_*() routine.\n            !*/\n\n        public:\n            const string_type opt;\n            const string_type opt2;\n            const string_type arg; \n            const std::vector<string_type> required_opts; \n        };\n\n        template <\n            typename T\n            >\n        void check_option_arg_type (\n            const string_type& option_name\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - option_is_defined(option_name) == true\n                - T is not a pointer type\n            ensures\n                - all the arguments for the given option are convertible\n                  by string_cast<T>() to an object of type T.\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied. \n                    The exception's members will be set as follows:\n                        - type == EINVALID_OPTION_ARG\n                        - opt == option_name\n                        - arg == the text of the offending argument\n        !*/\n\n        template <\n            typename T\n            >\n        void check_option_arg_range (\n            const string_type& option_name,\n            const T& first,\n            const T& last\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - option_is_defined(option_name) == true\n                - first <= last\n                - T is not a pointer type\n            ensures\n                - all the arguments for the given option are convertible\n                  by string_cast<T>() to an object of type T and the resulting value is\n                  in the range first to last inclusive.\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EINVALID_OPTION_ARG\n                        - opt == option_name\n                        - arg == the text of the offending argument\n        !*/\n\n        template <\n            typename T,\n            size_t length\n            >\n        void check_option_arg_range (\n            const string_type& option_name,\n            const T (&arg_set)[length]\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - option_is_defined(option_name) == true\n                - T is not a pointer type\n            ensures\n                - for each argument to the given option:\n                    - this argument is convertible by string_cast<T>() to an object of\n                      type T and the resulting value is equal to some element in the\n                      arg_set array.\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EINVALID_OPTION_ARG\n                        - opt == option_name\n                        - arg == the text of the offending argument\n        !*/\n\n        template <\n            size_t length\n            >\n        void check_option_arg_range (\n            const string_type& option_name,\n            const char_type* (&arg_set)[length]\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - option_is_defined(option_name) == true\n            ensures\n                - for each argument to the given option:\n                    - there is a string in the arg_set array that is equal to this argument.\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EINVALID_OPTION_ARG\n                        - opt == option_name\n                        - arg == the text of the offending argument\n        !*/\n\n        template <\n            size_t length\n            >\n        void check_one_time_options (\n            const char_type* (&option_set)[length]\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - for all valid i:\n                    - option_is_defined(option_set[i]) == true\n            ensures\n                - all the options in the option_set array occur at most once on the\n                  command line.\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EMULTIPLE_OCCURANCES \n                        - opt == the option that occurred more than once on the command line. \n        !*/\n\n        void check_incompatible_options (\n            const string_type& option_name1,\n            const string_type& option_name2\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - option_is_defined(option_name1) == true\n                - option_is_defined(option_name2) == true\n            ensures\n                - option(option_name1).count() == 0 || option(option_name2).count() == 0\n                  (i.e. at most, only one of the options is currently present)\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EINCOMPATIBLE_OPTIONS \n                        - opt == option_name1 \n                        - opt2 == option_name2 \n        !*/\n\n        template <\n            size_t length\n            >\n        void check_incompatible_options (\n            const char_type* (&option_set)[length]\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - for all valid i:\n                    - option_is_defined(option_set[i]) == true\n            ensures\n                - At most only one of the options in the array option_set has a count()\n                  greater than 0.  (i.e. at most, only one of the options is currently present)\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EINCOMPATIBLE_OPTIONS \n                        - opt == One of the incompatible options found.\n                        - opt2 == The next incompatible option found.\n        !*/\n\n        void check_sub_option (\n            const string_type& parent_option,\n            const string_type& sub_option\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - option_is_defined(parent_option) == true\n                - option_is_defined(sub_option) == true\n            ensures\n                - if (option(parent_option).count() == 0) then\n                    - option(sub_option).count() == 0\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EMISSING_REQUIRED_OPTION \n                        - opt == sub_option. \n                        - required_opts == a vector that contains only parent_option. \n        !*/\n\n        template <\n            size_t length\n            >\n        void check_sub_options (\n            const char_type* (&parent_option_set)[length],\n            const string_type& sub_option\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - option_is_defined(sub_option) == true\n                - for all valid i:\n                    - option_is_defined(parent_option_set[i] == true\n            ensures\n                - if (option(sub_option).count() > 0) then\n                    - At least one of the options in the array parent_option_set has a count()\n                      greater than 0. (i.e. at least one of the options in parent_option_set\n                      is currently present)\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EMISSING_REQUIRED_OPTION \n                        - opt == the first option from the sub_option that is present. \n                        - required_opts == a vector containing everything from parent_option_set.\n        !*/\n\n        template <\n            size_t length\n            >\n        void check_sub_options (\n            const string_type& parent_option,\n            const char_type* (&sub_option_set)[length]\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - option_is_defined(parent_option) == true\n                - for all valid i:\n                    - option_is_defined(sub_option_set[i]) == true\n            ensures\n                - if (option(parent_option).count() == 0) then\n                    - for all valid i:\n                        - option(sub_option_set[i]).count() == 0\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EMISSING_REQUIRED_OPTION \n                        - opt == the first option from the sub_option_set that is present.\n                        - required_opts == a vector that contains only parent_option. \n        !*/\n\n        template <\n            size_t parent_length,\n            size_t sub_length\n            >\n        void check_sub_options (\n            const char_type* (&parent_option_set)[parent_length],\n            const char_type* (&sub_option_set)[sub_length]\n        ) const;\n        /*!\n            requires\n                - parsed_line() == true\n                - for all valid i:\n                    - option_is_defined(parent_option_set[i] == true\n                - for all valid j:\n                    - option_is_defined(sub_option_set[j]) == true\n            ensures\n                - for all valid j:\n                    - if (option(sub_option_set[j]).count() > 0) then\n                        - At least one of the options in the array parent_option_set has a count()\n                          greater than 0. (i.e. at least one of the options in parent_option_set\n                          is currently present)\n            throws\n                - std::bad_alloc\n                - cmd_line_check_error\n                    This exception is thrown if the ensures clause could not be satisfied.\n                    The exception's members will be set as follows:\n                        - type == EMISSING_REQUIRED_OPTION \n                        - opt == the first option from the sub_option_set that is present. \n                        - required_opts == a vector containing everything from parent_option_set.\n        !*/\n\n\n    private:\n\n        // restricted functions\n        cmd_line_parser(cmd_line_parser&);        // copy constructor\n        cmd_line_parser& operator=(cmd_line_parser&);    // assignment operator\n\n    };   \n\n// -----------------------------------------------------------------------------------------\n\n    typedef cmd_line_parser<char>    command_line_parser;\n    typedef cmd_line_parser<wchar_t> wcommand_line_parser;\n   \n// -----------------------------------------------------------------------------------------\n\n    template <\n        typename charT\n        >\n    inline void swap (\n        cmd_line_parser<charT>& a, \n        cmd_line_parser<charT>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n// -----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CMD_LINE_PARSER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmd_line_parser/cmd_line_parser_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CMD_LINE_PARSER_KERNEl_C_\n#define DLIB_CMD_LINE_PARSER_KERNEl_C_\n\n#include \"cmd_line_parser_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <string>\n#include \"../interfaces/cmd_line_parser_option.h\"\n#include \"../string.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename clp_base\n        >\n    class cmd_line_parser_kernel_c : public clp_base\n    {\n    public:\n\n        typedef typename clp_base::char_type char_type;\n        typedef typename clp_base::string_type string_type;\n        typedef typename clp_base::option_type option_type;\n\n        void add_option (\n            const string_type& name,\n            const string_type& description,\n            unsigned long number_of_arguments = 0\n        );\n\n        const option_type& option (\n            const string_type& name\n        ) const;\n\n        unsigned long number_of_arguments( \n        ) const;\n\n        const option_type& element (\n        ) const;\n\n        option_type& element (\n        );\n\n        const string_type& operator[] (\n            unsigned long N\n        ) const;\n\n    };\n\n\n    template <\n        typename clp_base\n        >\n    inline void swap (\n        cmd_line_parser_kernel_c<clp_base>& a, \n        cmd_line_parser_kernel_c<clp_base>& b \n    ) { a.swap(b); } \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename clp_base\n        >\n    const typename clp_base::string_type& cmd_line_parser_kernel_c<clp_base>::\n    operator[] (\n        unsigned long N\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->parsed_line() == true && N < number_of_arguments(),\n                 \"\\tvoid cmd_line_parser::operator[](unsigned long N)\"\n                 << \"\\n\\tYou must specify a valid index N and the parser must have run already.\"\n                 << \"\\n\\tthis:                      \" << this\n                 << \"\\n\\tN:                         \" << N\n                 << \"\\n\\tparsed_line():             \" << this->parsed_line()\n                 << \"\\n\\tnumber_of_arguments():     \" << number_of_arguments()\n        );\n\n        return clp_base::operator[](N);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename clp_base\n        >\n    void cmd_line_parser_kernel_c<clp_base>::\n    add_option (\n        const string_type& name,\n        const string_type& description,\n        unsigned long number_of_arguments\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->parsed_line() == false &&\n                 name.size() > 0 &&\n                 this->option_is_defined(name) == false &&\n                 name.find_first_of(_dT(char_type,\" \\t\\n=\")) == string_type::npos &&\n                 name[0] != '-',\n                 \"\\tvoid cmd_line_parser::add_option(const string_type&,const string_type&,unsigned long)\"\n                 << \"\\n\\tsee the requires clause of add_option()\"\n                 << \"\\n\\tthis:                   \" << this\n                 << \"\\n\\tname.size():            \" << static_cast<unsigned long>(name.size())\n                 << \"\\n\\tname:                  \\\"\" << narrow(name) << \"\\\"\"\n                 << \"\\n\\tparsed_line():          \" << (this->parsed_line()? \"true\" : \"false\")\n                 << \"\\n\\tis_option_defined(\\\"\" << narrow(name) << \"\\\"): \" << (this->option_is_defined(name)? \"true\" : \"false\")\n        );\n\n        clp_base::add_option(name,description,number_of_arguments);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename clp_base\n        >\n    const typename clp_base::option_type& cmd_line_parser_kernel_c<clp_base>::\n    option (\n        const string_type& name\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->option_is_defined(name) == true,\n                 \"\\toption cmd_line_parser::option(const string_type&)\"\n                 << \"\\n\\tto get an option it must be defined by a call to add_option()\"\n                 << \"\\n\\tthis:   \" << this\n                 << \"\\n\\tname:  \\\"\" << narrow(name) << \"\\\"\"\n        );\n\n        return clp_base::option(name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename clp_base\n        >\n    unsigned long cmd_line_parser_kernel_c<clp_base>::\n    number_of_arguments( \n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->parsed_line() == true ,\n                 \"\\tunsigned long cmd_line_parser::number_of_arguments()\"\n                 << \"\\n\\tyou must parse the command line before you can find out how many arguments it has\"\n                 << \"\\n\\tthis:            \" << this\n        );\n\n        return clp_base::number_of_arguments();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename clp_base\n        >\n    const typename clp_base::option_type& cmd_line_parser_kernel_c<clp_base>::\n    element (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n                \"\\tconst cmd_line_parser_option& cmd_line_parser::element()\"\n                << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        return clp_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename clp_base\n        >\n    typename clp_base::option_type& cmd_line_parser_kernel_c<clp_base>::\n    element (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n                \"\\tcmd_line_parser_option& cmd_line_parser::element()\"\n                << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        return clp_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CMD_LINE_PARSER_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmd_line_parser/cmd_line_parser_print_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CMD_LINE_PARSER_PRINt_1_\n#define DLIB_CMD_LINE_PARSER_PRINt_1_\n\n#include \"cmd_line_parser_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../string.h\"\n#include <iostream>\n#include <string>\n#include <sstream>\n#include <map>\n#include \"../smart_pointers.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename clp_base \n        >\n    class cmd_line_parser_print_1 : public clp_base\n    {\n\n        public:\n\n            void print_options (\n                std::basic_ostream<typename clp_base::char_type>& out\n            ) const;\n\n            void print_options (\n            ) const\n            {\n                print_options(std::cout);\n            }\n\n    };\n\n    template <\n        typename clp_base\n        >\n    inline void swap (\n        cmd_line_parser_print_1<clp_base>& a, \n        cmd_line_parser_print_1<clp_base>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename clp_base\n        >\n    void cmd_line_parser_print_1<clp_base>::\n    print_options (\n        std::basic_ostream<typename clp_base::char_type>& out\n    ) const\n    {\n        typedef typename clp_base::char_type ct;\n        typedef std::basic_string<ct> string;\n        typedef typename string::size_type size_type;\n\n        typedef std::basic_ostringstream<ct> ostringstream;\n\n        try\n        {\n\n\n            size_type max_len = 0; \n            this->reset();\n\n            // this loop here is just the bottom loop but without the print statements.\n            // I'm doing this to figure out what len should be.\n            while (this->move_next())\n            {\n                size_type len = 0; \n                len += 3;\n                if (this->element().name().size() > 1)\n                {\n                    ++len;\n                }\n                len += this->element().name().size();\n\n                if (this->element().number_of_arguments() == 1)\n                {\n                    len += 6;\n                }\n                else\n                {\n                    for (unsigned long i = 0; i < this->element().number_of_arguments(); ++i)\n                    {\n                        len += 7;\n                        if (i+1 > 9)\n                            ++len;\n                    }\n                }\n\n                len += 3;\n                if (len < 33)\n                    max_len = std::max(max_len,len);\n            }\n\n\n            // Make a separate ostringstream for each option group.  We are going to write\n            // the output for each group to a separate ostringstream so that we can keep\n            // them grouped together in the final output.\n            std::map<string,shared_ptr<ostringstream> > groups;\n            this->reset();\n            while(this->move_next())\n            {\n                if (!groups[this->element().group_name()])\n                    groups[this->element().group_name()].reset(new ostringstream);\n            }\n\n\n\n\n            this->reset();\n\n            while (this->move_next())\n            {\n                ostringstream& sout = *groups[this->element().group_name()];\n\n                size_type len = 0; \n                sout << _dT(ct,\"\\n  -\");\n                len += 3;\n                if (this->element().name().size() > 1)\n                {\n                    sout << _dT(ct,\"-\");\n                    ++len;\n                }\n                sout << this->element().name();\n                len += this->element().name().size();\n\n                if (this->element().number_of_arguments() == 1)\n                {\n                    sout << _dT(ct,\" <arg>\");\n                    len += 6;\n                }\n                else\n                {\n                    for (unsigned long i = 0; i < this->element().number_of_arguments(); ++i)\n                    {\n                        sout << _dT(ct,\" <arg\") << i+1 << _dT(ct,\">\");\n                        len += 7;\n                        if (i+1 > 9)\n                            ++len;\n                    }\n                }\n\n                sout << _dT(ct,\"   \");\n                len += 3;\n\n                while (len < max_len)\n                {\n                    ++len;\n                    sout << _dT(ct,\" \");\n                }\n\n                const unsigned long ml = static_cast<unsigned long>(max_len);\n                // now print the description but make it wrap around nicely if it \n                // is to long to fit on one line.\n                if (len <= max_len)\n                    sout << wrap_string(this->element().description(),0,ml);\n                else\n                    sout << _dT(ct,\"\\n\") << wrap_string(this->element().description(),ml,ml);\n            }\n\n            // Only print out a generic Options: group name if there is an unnamed option\n            // present.\n            if (groups.count(string()) == 1)\n                out << _dT(ct,\"Options:\");\n\n            // Now print everything out\n            typename std::map<string,shared_ptr<ostringstream> >::iterator i;\n            for (i = groups.begin(); i != groups.end(); ++i)\n            {\n                // print the group name if we have one\n                if (i->first.size() != 0)\n                {\n                    if (i != groups.begin())\n                        out << _dT(ct,\"\\n\\n\");\n                    out << i->first << _dT(ct,\":\");\n                }\n\n                // print the options in the group\n                out << i->second->str();\n            }\n            out << _dT(ct,\"\\n\\n\");\n            this->reset();\n        }\n        catch (...)\n        {\n            this->reset();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CMD_LINE_PARSER_PRINt_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmd_line_parser/get_option.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GET_OPTiON_Hh_\n#define DLIB_GET_OPTiON_Hh_\n\n#include \"get_option_abstract.h\"\n#include \"../string.h\"\n#include \"../is_kind.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class option_parse_error : public error\n    {\n    public:\n        option_parse_error(const std::string& option_string, const std::string& str):\n            error(EOPTION_PARSE,\"Error parsing argument for option '\" + option_string + \"', offending string is '\" + str + \"'.\") {}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename config_reader_type, typename T>\n    T impl_config_reader_get_option (\n        const config_reader_type& cr,\n        const std::string& option_name,\n        const std::string& full_option_name,\n        T default_value\n    )\n    {\n        std::string::size_type pos = option_name.find_first_of(\".\");\n        if (pos == std::string::npos)\n        {\n            if (cr.is_key_defined(option_name))\n            {\n                try{ return string_cast<T>(cr[option_name]); }\n                catch (string_cast_error&) { throw option_parse_error(full_option_name, cr[option_name]); }\n            }\n        }\n        else\n        {\n            std::string block_name = option_name.substr(0,pos);\n            if (cr.is_block_defined(block_name))\n            {\n                return impl_config_reader_get_option(cr.block(block_name), \n                                                     option_name.substr(pos+1),\n                                                     full_option_name,\n                                                     default_value);\n            }\n        }\n\n        return default_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename cr_type, typename T>\n    typename enable_if<is_config_reader<cr_type>,T>::type get_option (\n        const cr_type& cr,\n        const std::string& option_name,\n        T default_value\n    )\n    {\n        return impl_config_reader_get_option(cr, option_name, option_name, default_value);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename parser_type, typename T>\n    typename disable_if<is_config_reader<parser_type>,T>::type get_option (\n        const parser_type& parser,\n        const std::string& option_name,\n        T default_value\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( parser.option_is_defined(option_name) == true &&\n                     parser.option(option_name).number_of_arguments() == 1,\n            \"\\t T get_option()\"\n            << \"\\n\\t option_name: \" << option_name\n            << \"\\n\\t parser.option_is_defined(option_name):            \" << parser.option_is_defined(option_name)\n            << \"\\n\\t parser.option(option_name).number_of_arguments(): \" << parser.option(option_name).number_of_arguments()\n            );\n\n        if (parser.option(option_name))\n        {\n            try\n            {\n                default_value = string_cast<T>(parser.option(option_name).argument()); \n            }\n            catch (string_cast_error&) \n            { \n                throw option_parse_error(option_name, parser.option(option_name).argument()); \n            }\n        }\n        return default_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename parser_type, typename cr_type, typename T>\n    typename disable_if<is_config_reader<parser_type>,T>::type get_option (\n        const parser_type& parser,\n        const cr_type& cr,\n        const std::string& option_name,\n        T default_value\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( parser.option_is_defined(option_name) == true &&\n                     parser.option(option_name).number_of_arguments() == 1,\n            \"\\t T get_option()\"\n            << \"\\n\\t option_name: \" << option_name\n            << \"\\n\\t parser.option_is_defined(option_name):            \" << parser.option_is_defined(option_name)\n            << \"\\n\\t parser.option(option_name).number_of_arguments(): \" << parser.option(option_name).number_of_arguments()\n            );\n\n        if (parser.option(option_name))\n            return get_option(parser, option_name, default_value); \n        else\n            return get_option(cr, option_name, default_value);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename parser_type, typename cr_type, typename T>\n    typename disable_if<is_config_reader<parser_type>,T>::type get_option (\n        const cr_type& cr,\n        const parser_type& parser,\n        const std::string& option_name,\n        T default_value\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( parser.option_is_defined(option_name) == true &&\n                     parser.option(option_name).number_of_arguments() == 1,\n            \"\\t T get_option()\"\n            << \"\\n\\t option_name: \" << option_name\n            << \"\\n\\t parser.option_is_defined(option_name):            \" << parser.option_is_defined(option_name)\n            << \"\\n\\t parser.option(option_name).number_of_arguments(): \" << parser.option(option_name).number_of_arguments()\n            );\n\n        if (parser.option(option_name))\n            return get_option(parser, option_name, default_value); \n        else\n            return get_option(cr, option_name, default_value);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    inline std::string get_option (\n        const T& cr,\n        const std::string& option_name,\n        const char* default_value\n    )\n    {\n        return get_option(cr, option_name, std::string(default_value));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline std::string get_option (\n        const T& parser,\n        const U& cr,\n        const std::string& option_name,\n        const char* default_value\n    )\n    {\n        return get_option(parser, cr, option_name, std::string(default_value));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GET_OPTiON_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmd_line_parser/get_option_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_GET_OPTiON_ABSTRACT_Hh_\n#ifdef DLIB_GET_OPTiON_ABSTRACT_Hh_\n\n#inclue <string>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class option_parse_error : public error \n    { \n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is the exception thrown by the get_option() functions.  It is\n                thrown when the option string given by a command line parser or\n                config reader can't be converted into the type T.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_type, \n        typename T\n        >\n    T get_option (\n        const config_reader_type& cr,\n        const std::string& option_name,\n        T default_value\n    );\n    /*!\n        requires\n            - T is a type which can be read from an input stream\n            - config_reader_type == an implementation of config_reader/config_reader_kernel_abstract.h\n        ensures\n            - option_name is used to index into the given config_reader.  \n            - if (cr contains an entry corresponding to option_name) then\n                - converts the string value in cr corresponding to option_name into\n                  an object of type T and returns it.\n            - else\n                - returns default_value\n            - The scheme for indexing into cr based on option_name is best\n              understood by looking at a few examples:\n                - an option name of \"name\" corresponds to cr[\"name\"]\n                - an option name of \"block1.name\" corresponds to cr.block(\"block1\")[\"name\"]\n                - an option name of \"block1.block2.name\" corresponds to cr.block(\"block1\").block(\"block2\")[\"name\"]\n        throws\n            - option_parse_error\n              This exception is thrown if we attempt but fail to convert the string value\n              in cr into an object of type T.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename command_line_parser_type,\n        typename T\n        >\n    T get_option (\n        const command_line_parser_type& parser,\n        const std::string& option_name,\n        T default_value\n    );\n    /*!\n        requires\n            - parser.option_is_defined(option_name) == true\n            - parser.option(option_name).number_of_arguments() == 1   \n            - T is a type which can be read from an input stream\n            - command_line_parser_type == an implementation of cmd_line_parser/cmd_line_parser_kernel_abstract.h\n        ensures\n            - if (parser.option(option_name)) then \n                - converts parser.option(option_name).argument() into an object\n                  of type T and returns it.  That is, the string argument to this\n                  command line option is converted into a T and returned.\n            - else\n                - returns default_value\n        throws\n            - option_parse_error\n              This exception is thrown if we attempt but fail to convert the string\n              argument into an object of type T.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename command_line_parser_type, \n        typename config_reader_type, \n        typename T\n        >\n    T get_option (\n        const command_line_parser_type& parser,\n        const config_reader_type& cr,\n        const std::string& option_name,\n        T default_value\n    );\n    /*!\n        requires\n            - parser.option_is_defined(option_name) == true\n            - parser.option(option_name).number_of_arguments() == 1   \n            - T is a type which can be read from an input stream\n            - command_line_parser_type == an implementation of cmd_line_parser/cmd_line_parser_kernel_abstract.h\n            - config_reader_type == an implementation of config_reader/config_reader_kernel_abstract.h\n        ensures\n            - if (parser.option(option_name)) then \n                - returns get_option(parser, option_name, default_value)\n            - else\n                - returns get_option(cr, option_name, default_value)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename command_line_parser_type, \n        typename config_reader_type, \n        typename T\n        >\n    T get_option (\n        const config_reader_type& cr,\n        const command_line_parser_type& parser,\n        const std::string& option_name,\n        T default_value\n    );\n    /*!\n        requires\n            - parser.option_is_defined(option_name) == true\n            - parser.option(option_name).number_of_arguments() == 1   \n            - T is a type which can be read from an input stream\n            - command_line_parser_type == an implementation of cmd_line_parser/cmd_line_parser_kernel_abstract.h\n            - config_reader_type == an implementation of config_reader/config_reader_kernel_abstract.h\n        ensures\n            - if (parser.option(option_name)) then \n                - returns get_option(parser, option_name, default_value)\n            - else\n                - returns get_option(cr, option_name, default_value)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GET_OPTiON_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cmd_line_parser.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CMD_LINE_PARSEr_\n#define DLIB_CMD_LINE_PARSEr_\n\n#include \"cmd_line_parser/cmd_line_parser_kernel_1.h\"\n#include \"cmd_line_parser/cmd_line_parser_kernel_c.h\"\n#include \"cmd_line_parser/cmd_line_parser_print_1.h\"\n#include \"cmd_line_parser/cmd_line_parser_check_1.h\"\n#include \"cmd_line_parser/cmd_line_parser_check_c.h\"\n#include <string>\n#include \"cmd_line_parser/get_option.h\"\n\n#include \"map.h\"\n#include \"sequence.h\"\n\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT\n        >\n    class impl_cmd_line_parser\n    {\n        /*!\n            This class is basically just a big templated typedef for building \n            a complete command line parser type out of all the parts it needs.\n        !*/\n\n        impl_cmd_line_parser() {}\n\n        typedef typename sequence<std::basic_string<charT> >::kernel_2a sequence_2a;\n        typedef typename sequence<std::basic_string<charT>*>::kernel_2a psequence_2a;\n        typedef typename map<std::basic_string<charT>,void*>::kernel_1a map_1a_string;\n\n    public:\n        \n        typedef cmd_line_parser_kernel_1<charT,map_1a_string,sequence_2a,psequence_2a> kernel_1a;\n        typedef cmd_line_parser_kernel_c<kernel_1a> kernel_1a_c;\n        typedef cmd_line_parser_print_1<kernel_1a_c> print_1a_c;\n        typedef cmd_line_parser_check_c<cmd_line_parser_check_1<print_1a_c> > check_1a_c;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT\n        >\n    class cmd_line_parser : public impl_cmd_line_parser<charT>::check_1a_c\n    {\n    public:\n\n        // These typedefs are here for backwards compatibility with previous versions of dlib.\n        typedef cmd_line_parser kernel_1a;\n        typedef cmd_line_parser kernel_1a_c;\n        typedef cmd_line_parser print_1a;\n        typedef cmd_line_parser print_1a_c;\n        typedef cmd_line_parser check_1a;\n        typedef cmd_line_parser check_1a_c;\n    };\n\n    template <\n        typename charT \n        >\n    inline void swap (\n        cmd_line_parser<charT>& a, \n        cmd_line_parser<charT>& b \n    ) { a.swap(b); } \n\n// ----------------------------------------------------------------------------------------\n\n    typedef cmd_line_parser<char> command_line_parser;\n    typedef cmd_line_parser<wchar_t> wcommand_line_parser;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CMD_LINE_PARSEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/compress_stream/compress_stream_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_COMPRESS_STREAM_KERNEl_1_\n#define DLIB_COMPRESS_STREAM_KERNEl_1_\n\n#include \"../algs.h\"\n#include <iostream>\n#include <streambuf>\n#include <cstdio>\n#include \"compress_stream_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename fce,\n        typename fcd,\n        typename crc32\n        >\n    class compress_stream_kernel_1\n    {\n        /*!\n            REQUIREMENTS ON fce\n                is an implementation of entropy_encoder_model/entropy_encoder_model_kernel_abstract.h\n                the alphabet_size of fce must be 257.\n                fce and fcd share the same kernel number.\n\n            REQUIREMENTS ON fcd\n                is an implementation of entropy_decoder_model/entropy_decoder_model_kernel_abstract.h\n                the alphabet_size of fcd must be 257.\n                fce and fcd share the same kernel number.\n\n            REQUIREMENTS ON crc32\n                is an implementation of crc32/crc32_kernel_abstract.h\n\n\n\n            INITIAL VALUE\n                this object has no state\n\n            CONVENTION\n                this object has no state\n        !*/\n\n        const static unsigned long eof_symbol = 256;\n\n    public:\n\n        class decompression_error : public dlib::error \n        { \n            public: \n                decompression_error(\n                    const char* i\n                ) :\n                    dlib::error(std::string(i))\n                {}\n\n                decompression_error(\n                    const std::string& i\n                ) :\n                    dlib::error(i)\n                {}\n        };\n\n\n        compress_stream_kernel_1 (\n        )\n        {}\n\n        ~compress_stream_kernel_1 (\n        )\n        {}\n\n        void compress (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n\n        void decompress (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n\n    private:\n\n        // restricted functions\n        compress_stream_kernel_1(compress_stream_kernel_1&);        // copy constructor\n        compress_stream_kernel_1& operator=(compress_stream_kernel_1&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename fce,\n        typename fcd,\n        typename crc32\n        >\n    void compress_stream_kernel_1<fce,fcd,crc32>::\n    compress (\n        std::istream& in_,\n        std::ostream& out_\n    ) const\n    {\n        std::streambuf::int_type temp;\n\n        std::streambuf& in = *in_.rdbuf();\n\n        typename fce::entropy_encoder_type coder;\n        coder.set_stream(out_);\n\n        fce model(coder);\n\n        crc32 crc;\n\n        unsigned long count = 0;\n\n        while (true)\n        {\n            // write out a known value every 20000 symbols\n            if (count == 20000)\n            {\n                count = 0;\n                coder.encode(1500,1501,8000);\n            }\n            ++count;\n\n            // get the next character\n            temp = in.sbumpc();\n\n            // if we have hit EOF then encode the marker symbol\n            if (temp != EOF)  \n            {\n                // encode the symbol\n                model.encode(static_cast<unsigned long>(temp));\n                crc.add(static_cast<unsigned char>(temp));\n                continue;\n            }\n            else\n            {\n                model.encode(eof_symbol);\n\n                // now write the checksum\n                unsigned long checksum = crc.get_checksum();\n                unsigned char byte1 = static_cast<unsigned char>((checksum>>24)&0xFF);\n                unsigned char byte2 = static_cast<unsigned char>((checksum>>16)&0xFF);\n                unsigned char byte3 = static_cast<unsigned char>((checksum>>8)&0xFF);\n                unsigned char byte4 = static_cast<unsigned char>((checksum)&0xFF);\n\n                model.encode(byte1);\n                model.encode(byte2);\n                model.encode(byte3);\n                model.encode(byte4);\n\n                break;\n            }\n        }      \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename fce,\n        typename fcd,\n        typename crc32\n        >\n    void compress_stream_kernel_1<fce,fcd,crc32>::\n    decompress (\n        std::istream& in_,\n        std::ostream& out_\n    ) const\n    {\n\n        std::streambuf& out = *out_.rdbuf();\n\n        typename fcd::entropy_decoder_type coder;\n        coder.set_stream(in_);\n\n        fcd model(coder);\n\n        unsigned long symbol;\n        unsigned long count = 0;\n\n        crc32 crc;\n\n        // decode until we hit the marker symbol\n        while (true)\n        {\n            // make sure this is the value we expect\n            if (count == 20000)\n            {\n                if (coder.get_target(8000) != 1500)\n                {\n                    throw decompression_error(\"Error detected in compressed data stream.\");\n                }\n                count = 0;\n                coder.decode(1500,1501);\n            }\n            ++count;\n\n            // decode the next symbol\n            model.decode(symbol);\n            if (symbol != eof_symbol)\n            {\n                crc.add(static_cast<unsigned char>(symbol));\n                // write this symbol to out\n                if (out.sputc(static_cast<char>(symbol)) != static_cast<int>(symbol))\n                {\n                    throw std::ios::failure(\"error occurred in compress_stream_kernel_1::decompress\");\n                }\n                continue;\n            }\n            else\n            {\n                // we read eof from the encoded data.  now we just have to check the checksum and we are done.\n                unsigned char byte1;\n                unsigned char byte2;\n                unsigned char byte3;\n                unsigned char byte4;\n\n                model.decode(symbol); byte1 = static_cast<unsigned char>(symbol);\n                model.decode(symbol); byte2 = static_cast<unsigned char>(symbol);\n                model.decode(symbol); byte3 = static_cast<unsigned char>(symbol);\n                model.decode(symbol); byte4 = static_cast<unsigned char>(symbol);\n\n                unsigned long checksum = byte1;\n                checksum <<= 8;\n                checksum |= byte2;\n                checksum <<= 8;\n                checksum |= byte3;\n                checksum <<= 8;\n                checksum |= byte4;\n\n                if (checksum != crc.get_checksum())\n                    throw decompression_error(\"Error detected in compressed data stream.\");\n\n                break;\n            }\n        } // while (true)\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_COMPRESS_STREAM_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/compress_stream/compress_stream_kernel_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_COMPRESS_STREAM_KERNEl_2_\n#define DLIB_COMPRESS_STREAM_KERNEl_2_\n\n#include \"../algs.h\"\n#include <iostream>\n#include <streambuf>\n#include \"compress_stream_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename fce,\n        typename fcd,\n        typename lz77_buffer,\n        typename sliding_buffer,\n        typename fce_length,\n        typename fcd_length,\n        typename fce_index,\n        typename fcd_index,\n        typename crc32\n        >\n    class compress_stream_kernel_2\n    {\n        /*!\n            REQUIREMENTS ON fce\n                is an implementation of entropy_encoder_model/entropy_encoder_model_kernel_abstract.h\n                the alphabet_size of fce must be 257.\n                fce and fcd share the same kernel number.\n\n            REQUIREMENTS ON fcd\n                is an implementation of entropy_decoder_model/entropy_decoder_model_kernel_abstract.h\n                the alphabet_size of fcd must be 257.\n                fce and fcd share the same kernel number.\n\n            REQUIREMENTS ON lz77_buffer\n                is an implementation of lz77_buffer/lz77_buffer_kernel_abstract.h\n\n            REQUIREMENTS ON sliding_buffer\n                is an implementation of sliding_buffer/sliding_buffer_kernel_abstract.h\n                is instantiated with T = unsigned char\n\n            REQUIREMENTS ON fce_length\n                is an implementation of entropy_encoder_model/entropy_encoder_model_kernel_abstract.h\n                the alphabet_size of fce must be 513.  This will be used to encode the length of lz77 matches.\n                fce_length and fcd share the same kernel number.\n\n            REQUIREMENTS ON fcd_length\n                is an implementation of entropy_decoder_model/entropy_decoder_model_kernel_abstract.h\n                the alphabet_size of fcd must be 513.  This will be used to decode the length of lz77 matches.\n                fce_length and fcd share the same kernel number.\n\n            REQUIREMENTS ON fce_index\n                is an implementation of entropy_encoder_model/entropy_encoder_model_kernel_abstract.h\n                the alphabet_size of fce must be 32257.  This will be used to encode the index of lz77 matches.\n                fce_index and fcd share the same kernel number.\n\n            REQUIREMENTS ON fcd_index\n                is an implementation of entropy_decoder_model/entropy_decoder_model_kernel_abstract.h\n                the alphabet_size of fcd must be 32257.  This will be used to decode the index of lz77 matches.\n                fce_index and fcd share the same kernel number.\n\n            REQUIREMENTS ON crc32\n                is an implementation of crc32/crc32_kernel_abstract.h\n\n            INITIAL VALUE\n                this object has no state\n\n            CONVENTION\n                this object has no state\n        !*/\n\n        const static unsigned long eof_symbol = 256;\n\n    public:\n\n        class decompression_error : public dlib::error \n        { \n            public: \n                decompression_error(\n                    const char* i\n                ) :\n                    dlib::error(std::string(i))\n                {}\n\n                decompression_error(\n                    const std::string& i\n                ) :\n                    dlib::error(i)\n                {}\n        };\n\n\n        compress_stream_kernel_2 (\n        )\n        {}\n\n        ~compress_stream_kernel_2 (\n        )\n        {}\n\n        void compress (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n\n        void decompress (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n\n    private:\n\n        // restricted functions\n        compress_stream_kernel_2(compress_stream_kernel_2&);        // copy constructor\n        compress_stream_kernel_2& operator=(compress_stream_kernel_2&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename fce,\n        typename fcd,\n        typename lz77_buffer,\n        typename sliding_buffer,\n        typename fce_length,\n        typename fcd_length,\n        typename fce_index,\n        typename fcd_index,\n        typename crc32\n        >\n    void compress_stream_kernel_2<fce,fcd,lz77_buffer,sliding_buffer,fce_length,fcd_length,fce_index,fcd_index,crc32>::\n    compress (\n        std::istream& in_,\n        std::ostream& out_\n    ) const\n    {\n        std::streambuf::int_type temp;\n\n        std::streambuf& in = *in_.rdbuf();\n\n        typename fce::entropy_encoder_type coder;\n        coder.set_stream(out_);\n\n        fce model(coder);\n        fce_length model_length(coder);\n        fce_index model_index(coder);\n\n        const unsigned long LOOKAHEAD_LIMIT = 512; \n        lz77_buffer buffer(15,LOOKAHEAD_LIMIT);\n        \n        crc32 crc;\n      \n\n        unsigned long count = 0;\n\n        unsigned long lz77_count = 1;  // number of times we used lz77 to encode\n        unsigned long ppm_count = 1;   // number of times we used ppm to encode\n\n\n        while (true)\n        {\n            // write out a known value every 20000 symbols\n            if (count == 20000)\n            {\n                count = 0;\n                coder.encode(150,151,400);\n            }\n            ++count;\n\n            // try to fill the lookahead buffer\n            if (buffer.get_lookahead_buffer_size() < buffer.get_lookahead_buffer_limit())\n            {\n                temp = in.sbumpc();\n                while (temp != EOF)\n                {\n                    crc.add(static_cast<unsigned char>(temp));\n                    buffer.add(static_cast<unsigned char>(temp));\n                    if (buffer.get_lookahead_buffer_size() == buffer.get_lookahead_buffer_limit())\n                        break;\n                    temp = in.sbumpc();\n                }\n            }\n\n            // compute the sum of ppm_count and lz77_count but make sure\n            // it is less than 65536\n            unsigned long sum = ppm_count + lz77_count;\n            if (sum >= 65536)\n            {\n                ppm_count >>= 1;                    \n                lz77_count >>= 1;\n                ppm_count |= 1;\n                lz77_count |= 1;\n                sum = ppm_count+lz77_count;                    \n            }\n\n            // if there are still more symbols in the lookahead buffer to encode\n            if (buffer.get_lookahead_buffer_size() > 0)  \n            {\n                unsigned long match_index, match_length;\n                buffer.find_match(match_index,match_length,6);\n                if (match_length != 0)\n                {\n                  \n                    // signal the decoder that we are using lz77\n                    coder.encode(0,lz77_count,sum);\n                    ++lz77_count;\n                    \n                    // encode the index and length pair\n                    model_index.encode(match_index);                   \n                    model_length.encode(match_length);                   \n\n                }\n                else\n                {\n\n                    // signal the decoder that we are using ppm \n                    coder.encode(lz77_count,sum,sum);\n                    ++ppm_count;\n\n                    // encode the symbol using the ppm model\n                    model.encode(buffer.lookahead_buffer(0));\n                    buffer.shift_buffers(1);                    \n                }\n            }\n            else\n            {\n                // signal the decoder that we are using ppm \n                coder.encode(lz77_count,sum,sum);\n                \n\n                model.encode(eof_symbol);\n                // now write the checksum\n                unsigned long checksum = crc.get_checksum();\n                unsigned char byte1 = static_cast<unsigned char>((checksum>>24)&0xFF);\n                unsigned char byte2 = static_cast<unsigned char>((checksum>>16)&0xFF);\n                unsigned char byte3 = static_cast<unsigned char>((checksum>>8)&0xFF);\n                unsigned char byte4 = static_cast<unsigned char>((checksum)&0xFF);\n\n                model.encode(byte1);\n                model.encode(byte2);\n                model.encode(byte3);\n                model.encode(byte4);\n\n                break;      \n            }\n        } // while (true)        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename fce,\n        typename fcd,\n        typename lz77_buffer,\n        typename sliding_buffer,\n        typename fce_length,\n        typename fcd_length,\n        typename fce_index,\n        typename fcd_index,\n        typename crc32\n        >\n    void compress_stream_kernel_2<fce,fcd,lz77_buffer,sliding_buffer,fce_length,fcd_length,fce_index,fcd_index,crc32>::\n    decompress (\n        std::istream& in_,\n        std::ostream& out_\n    ) const\n    {\n\n        std::streambuf& out = *out_.rdbuf();\n\n        typename fcd::entropy_decoder_type coder;\n        coder.set_stream(in_);\n\n        fcd model(coder);\n        fcd_length model_length(coder);\n        fcd_index model_index(coder);\n\n        unsigned long symbol;\n        unsigned long count = 0;\n\n        sliding_buffer buffer;\n        buffer.set_size(15);\n\n        // Initialize the buffer to all zeros.  There is no algorithmic reason to\n        // do this.  But doing so avoids a warning from valgrind so that is why\n        // I'm doing this.\n        for (unsigned long i = 0; i < buffer.size(); ++i)\n              buffer[i] = 0;\n\n        crc32 crc;\n        \n        unsigned long lz77_count = 1;  // number of times we used lz77 to encode\n        unsigned long ppm_count = 1;   // number of times we used ppm to encode\n        bool next_block_lz77;\n\n\n        // decode until we hit the marker symbol\n        while (true)\n        {\n            // make sure this is the value we expect\n            if (count == 20000)\n            {\n                if (coder.get_target(400) != 150)\n                {\n                    throw decompression_error(\"Error detected in compressed data stream.\");\n                }\n                count = 0;\n                coder.decode(150,151);\n            }\n            ++count;\n\n\n            // compute the sum of ppm_count and lz77_count but make sure\n            // it is less than 65536\n            unsigned long sum = ppm_count + lz77_count;\n            if (sum >= 65536)\n            {\n                ppm_count >>= 1;                    \n                lz77_count >>= 1;\n                ppm_count |= 1;\n                lz77_count |= 1;\n                sum = ppm_count+lz77_count;                    \n            }\n\n            // check if we are decoding a lz77 or ppm block\n            if (coder.get_target(sum) < lz77_count)\n            {\n                coder.decode(0,lz77_count);\n                next_block_lz77 = true;\n                ++lz77_count;\n            }\n            else\n            {\n                coder.decode(lz77_count,sum);\n                next_block_lz77 = false;\n                ++ppm_count;\n            }\n\n\n            if (next_block_lz77)\n            {\n                \n                unsigned long match_length, match_index;\n                // decode the match index\n                model_index.decode(match_index);\n\n                // decode the match length\n                model_length.decode(match_length);\n\n                \n                match_index += match_length;\n                buffer.rotate_left(match_length);\n                for (unsigned long i = 0; i < match_length; ++i)\n                {\n                    unsigned char ch = buffer[match_index-i];\n                    buffer[match_length-i-1] = ch;\n\n                    crc.add(ch);\n                    // write this ch to out\n                    if (out.sputc(static_cast<char>(ch)) != static_cast<int>(ch))\n                    {\n                        throw std::ios::failure(\"error occurred in compress_stream_kernel_2::decompress\");\n                    }\n                }\n                \n            }\n            else\n            {\n\n                // decode the next symbol\n                model.decode(symbol);\n                if (symbol != eof_symbol)\n                {\n                    buffer.rotate_left(1);\n                    buffer[0] = static_cast<unsigned char>(symbol);\n                    \n\n                    crc.add(static_cast<unsigned char>(symbol));\n                    // write this symbol to out\n                    if (out.sputc(static_cast<char>(symbol)) != static_cast<int>(symbol))\n                    {\n                        throw std::ios::failure(\"error occurred in compress_stream_kernel_2::decompress\");\n                    }\n                }\n                else\n                {\n                    // this was the eof marker symbol so we are done.  now check the checksum\n\n                    // now get the checksum and make sure it matches\n                    unsigned char byte1;\n                    unsigned char byte2;\n                    unsigned char byte3;\n                    unsigned char byte4;\n\n                    model.decode(symbol); byte1 = static_cast<unsigned char>(symbol);\n                    model.decode(symbol); byte2 = static_cast<unsigned char>(symbol);\n                    model.decode(symbol); byte3 = static_cast<unsigned char>(symbol);\n                    model.decode(symbol); byte4 = static_cast<unsigned char>(symbol);\n\n                    unsigned long checksum = byte1;\n                    checksum <<= 8;\n                    checksum |= byte2;\n                    checksum <<= 8;\n                    checksum |= byte3;\n                    checksum <<= 8;\n                    checksum |= byte4;\n\n                    if (checksum != crc.get_checksum())\n                        throw decompression_error(\"Error detected in compressed data stream.\");\n\n                    break;\n                }\n            }\n\n        } // while (true)\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_COMPRESS_STREAM_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/compress_stream/compress_stream_kernel_3.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_COMPRESS_STREAM_KERNEl_3_\n#define DLIB_COMPRESS_STREAM_KERNEl_3_\n\n#include \"../algs.h\"\n#include \"compress_stream_kernel_abstract.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename lzp_buf,\n        typename crc32,\n        unsigned long buffer_size\n        >\n    class compress_stream_kernel_3\n    {\n        /*!\n            REQUIREMENTS ON lzp_buf\n                is an implementation of lzp_buffer/lzp_buffer_kernel_abstract.h\n\n            REQUIREMENTS ON buffer_size\n                10 < buffer_size < 32\n\n            REQUIREMENTS ON crc32\n                is an implementation of crc32/crc32_kernel_abstract.h\n\n\n            INITIAL VALUE\n                this object has no state\n\n            CONVENTION\n                this object has no state\n\n\n                This implementation uses the lzp_buffer and writes out matches\n                in a byte aligned format.\n\n        !*/\n\n\n    public:\n\n        class decompression_error : public dlib::error \n        { \n            public: \n                decompression_error(\n                    const char* i\n                ) :\n                    dlib::error(std::string(i))\n                {}\n\n                decompression_error(\n                    const std::string& i\n                ) :\n                    dlib::error(i)\n                {}\n        };\n\n\n        compress_stream_kernel_3 (\n        )\n        {\n            COMPILE_TIME_ASSERT(10 < buffer_size && buffer_size < 32);\n        }\n\n        ~compress_stream_kernel_3 (\n        )\n        {}\n\n        void compress (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n\n        void decompress (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n\n\n\n    private:\n\n        inline void write (\n            unsigned char symbol\n        ) const\n        { \n            if (out->sputn(reinterpret_cast<char*>(&symbol),1)==0)\n                throw std::ios_base::failure(\"error writing to output stream in compress_stream_kernel_3\");        \n        }\n\n        inline void decode (\n            unsigned char& symbol,\n            unsigned char& flag\n        ) const\n        { \n            if (count == 0)\n            {\n                if (((size_t)in->sgetn(reinterpret_cast<char*>(buffer),sizeof(buffer)))!=sizeof(buffer))\n                    throw decompression_error(\"Error detected in compressed data stream.\");\n                count = 8;\n            }\n            --count;\n            symbol = buffer[8-count];\n            flag = buffer[0] >> 7; \n            buffer[0] <<= 1;\n        }\n\n        inline void encode (\n            unsigned char symbol,\n            unsigned char flag\n        ) const\n        /*!\n            requires\n                - 0 <= flag <= 1\n            ensures\n                - writes symbol with the given one bit flag\n        !*/\n        { \n            // add this symbol and flag to the buffer            \n            ++count;\n            buffer[0] <<= 1;\n            buffer[count] = symbol;\n            buffer[0] |= flag;\n\n            if (count == 8)\n            {\n                if (((size_t)out->sputn(reinterpret_cast<char*>(buffer),sizeof(buffer)))!=sizeof(buffer))\n                    throw std::ios_base::failure(\"error writing to output stream in compress_stream_kernel_3\");        \n                count = 0;\n                buffer[0] = 0;\n            }\n        }\n\n        void clear (\n        ) const\n        /*!\n            ensures\n                - resets the buffers\n        !*/\n        {\n            count = 0;\n        }\n\n        void flush (\n        ) const\n        /*!\n            ensures\n                - flushes any data in the buffers to out\n        !*/\n        {\n            if (count != 0)\n            {\n                buffer[0] <<= (8-count);\n                if (((size_t)out->sputn(reinterpret_cast<char*>(buffer),sizeof(buffer)))!=sizeof(buffer))\n                    throw std::ios_base::failure(\"error writing to output stream in compress_stream_kernel_3\");        \n            }\n        }\n\n        mutable unsigned int count;\n        // count tells us how many bytes are buffered in buffer and how many flag\n        // bit are currently in buffer[0]\n        mutable unsigned char buffer[9];  \n        // buffer[0] holds the flag bits to be writen.\n        // the rest of the buffer holds the bytes to be writen.\n\n        mutable std::streambuf* in;\n        mutable std::streambuf* out;\n\n        // restricted functions\n        compress_stream_kernel_3(compress_stream_kernel_3<lzp_buf,crc32,buffer_size>&);        // copy constructor\n        compress_stream_kernel_3<lzp_buf,crc32,buffer_size>& operator=(compress_stream_kernel_3<lzp_buf,crc32,buffer_size>&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lzp_buf,\n        typename crc32,\n        unsigned long buffer_size\n        >\n    void compress_stream_kernel_3<lzp_buf,crc32,buffer_size>::\n    compress (\n        std::istream& in_,\n        std::ostream& out_\n    ) const\n    {\n        in = in_.rdbuf();\n        out = out_.rdbuf();\n        clear();\n\n        crc32 crc;\n     \n        lzp_buf buffer(buffer_size);\n\n        std::streambuf::int_type temp = in->sbumpc();\n        unsigned long index;\n        unsigned char symbol;\n        unsigned char length;\n\n        while (temp != EOF)\n        {\n            symbol = static_cast<unsigned char>(temp);\n            if (buffer.predict_match(index))\n            {\n                if (buffer[index] == symbol)\n                {\n                    // this is a match so we must find out how long it is\n                    length = 1;\n                                        \n                    buffer.add(symbol);\n                    crc.add(symbol);\n\n                    temp = in->sbumpc();\n                    while (length < 255)\n                    {\n                        if (temp == EOF)\n                        {                          \n                            break;\n                        }\n                        else if (static_cast<unsigned long>(length) >= index)\n                        {\n                            break;\n                        }\n                        else if (static_cast<unsigned char>(temp) == buffer[index])\n                        {\n                            ++length;\n                            buffer.add(static_cast<unsigned char>(temp));\n                            crc.add(static_cast<unsigned char>(temp));\n                            temp = in->sbumpc();\n                        }\n                        else\n                        {\n                            break;\n                        }\n                    }                        \n\n                    encode(length,1);\n                }\n                else\n                {\n                    // this is also not a match\n                    encode(symbol,0);\n                    buffer.add(symbol);\n                    crc.add(symbol);\n\n                    // get the next symbol\n                    temp = in->sbumpc();\n                }\n            }\n            else\n            {\n                // there wasn't a match so just write this symbol\n                encode(symbol,0);\n                buffer.add(symbol);\n                crc.add(symbol);\n\n                // get the next symbol\n                temp = in->sbumpc();\n            }\n        }\n\n        // use a match of zero length to indicate EOF\n        encode(0,1);\n\n        // now write the checksum\n        unsigned long checksum = crc.get_checksum();\n        unsigned char byte1 = static_cast<unsigned char>((checksum>>24)&0xFF);\n        unsigned char byte2 = static_cast<unsigned char>((checksum>>16)&0xFF);\n        unsigned char byte3 = static_cast<unsigned char>((checksum>>8)&0xFF);\n        unsigned char byte4 = static_cast<unsigned char>((checksum)&0xFF);\n\n        encode(byte1,0);\n        encode(byte2,0);\n        encode(byte3,0);\n        encode(byte4,0);\n\n        flush();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lzp_buf,\n        typename crc32,\n        unsigned long buffer_size\n        >\n    void compress_stream_kernel_3<lzp_buf,crc32,buffer_size>::\n    decompress (\n        std::istream& in_,\n        std::ostream& out_\n    ) const\n    { \n        in = in_.rdbuf();\n        out = out_.rdbuf();\n        clear();\n     \n        crc32 crc;\n\n        lzp_buf buffer(buffer_size);\n\n\n        unsigned long index = 0;\n        unsigned char symbol;\n        unsigned char length;\n        unsigned char flag;\n\n        decode(symbol,flag);\n        while (flag == 0 || symbol != 0)\n        {\n            buffer.predict_match(index);\n\n            if (flag == 1)\n            {\n                length = symbol;\n                do \n                {\n                    --length;\n                    symbol = buffer[index];\n                    write(symbol);\n                    buffer.add(symbol);   \n                    crc.add(symbol);                    \n                } while (length != 0);\n            }\n            else\n            {\n                // this is just a literal\n                write(symbol);\n                buffer.add(symbol);\n                crc.add(symbol);\n            }\n            decode(symbol,flag);\n        }\n\n\n        // now get the checksum and make sure it matches\n        unsigned char byte1;\n        unsigned char byte2;\n        unsigned char byte3;\n        unsigned char byte4;\n\n        decode(byte1,flag);\n        if (flag != 0)\n            throw decompression_error(\"Error detected in compressed data stream.\");\n        decode(byte2,flag);\n        if (flag != 0)\n            throw decompression_error(\"Error detected in compressed data stream.\");\n        decode(byte3,flag);\n        if (flag != 0)\n            throw decompression_error(\"Error detected in compressed data stream.\");\n        decode(byte4,flag);\n        if (flag != 0)\n            throw decompression_error(\"Error detected in compressed data stream.\");\n\n        unsigned long checksum = byte1;\n        checksum <<= 8;\n        checksum |= byte2;\n        checksum <<= 8;\n        checksum |= byte3;\n        checksum <<= 8;\n        checksum |= byte4;\n\n        if (checksum != crc.get_checksum())\n            throw decompression_error(\"Error detected in compressed data stream.\");\n \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_COMPRESS_STREAM_KERNEl_3_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/compress_stream/compress_stream_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_COMPRESS_STREAM_KERNEl_ABSTRACT_\n#ifdef DLIB_COMPRESS_STREAM_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n#include <iosfwd>\n\nnamespace dlib\n{\n\n    class compress_stream \n    {\n        /*!\n            INITIAL VALUE\n                This object does not have any state associated with it.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object consists of the two functions compress and decompress.\n                These functions allow you to compress and decompress data.\n        !*/\n\n    public:\n\n        class decompression_error : public dlib::error {};\n\n        compress_stream (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~compress_stream (\n        );\n        /*!\n            ensures\n                - all memory associated with *this has been released\n        !*/\n\n\n        void compress (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n        /*!\n            ensures\n                - reads all data from in (until EOF is reached) and compresses it\n                  and writes it to out\n            throws\n                - std::ios_base::failure\n                    if there was a problem writing to out then this exception will \n                    be thrown.                      \n                - any other exception\n                    this exception may be thrown if there is any other problem                    \n        !*/\n\n\n        void decompress (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n        /*!\n            ensures\n                - reads data from in, decompresses it and writes it to out.  note that\n                  it stops reading data from in when it encounters the end of the \n                  compressed data, not when it encounters EOF. \n            throws\n                - std::ios_base::failure\n                    if there was a problem writing to out then this exception will \n                    be thrown.           \n                - decompression_error\n                    if an error was detected in the compressed data that prevented\n                    it from being correctly decompressed then this exception is \n                    thrown.  \n                - any other exception\n                    this exception may be thrown if there is any other problem                    \n        !*/\n\n\n    private:\n\n        // restricted functions\n        compress_stream(compress_stream&);        // copy constructor\n        compress_stream& operator=(compress_stream&);    // assignment operator\n\n    };   \n   \n}\n\n#endif // DLIB_COMPRESS_STREAM_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/compress_stream.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_COMPRESS_STREAm_\n#define DLIB_COMPRESS_STREAm_\n\n#include \"compress_stream/compress_stream_kernel_1.h\"\n#include \"compress_stream/compress_stream_kernel_2.h\"\n#include \"compress_stream/compress_stream_kernel_3.h\"\n\n#include \"conditioning_class.h\"\n#include \"entropy_encoder.h\"\n#include \"entropy_decoder.h\"\n\n#include \"entropy_encoder_model.h\"\n#include \"entropy_decoder_model.h\"\n#include \"lz77_buffer.h\"\n#include \"sliding_buffer.h\"\n#include \"lzp_buffer.h\"\n#include \"crc32.h\"\n\n\nnamespace dlib\n{\n\n    class compress_stream\n    {\n        compress_stream() {}\n\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_1b fce1;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_1b fcd1;\n\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_2b fce2;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_2b fcd2;\n\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_3b fce3;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_3b fcd3;\n\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_4a fce4a;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_4a fcd4a;\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_4b fce4b;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_4b fcd4b;\n\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_5a fce5a;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_5a fcd5a;\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_5b fce5b;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_5b fcd5b;\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_5c fce5c;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_5c fcd5c;\n\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_6a fce6;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_6a fcd6;\n\n\n        typedef entropy_encoder_model<257,entropy_encoder::kernel_2a>::kernel_2d fce2d;\n        typedef entropy_decoder_model<257,entropy_decoder::kernel_2a>::kernel_2d fcd2d;\n\n        typedef sliding_buffer<unsigned char>::kernel_1a sliding_buffer1;\n        typedef lz77_buffer::kernel_2a lz77_buffer2a;\n\n\n        typedef lzp_buffer::kernel_1a lzp_buf_1;\n        typedef lzp_buffer::kernel_2a lzp_buf_2;\n\n\n        typedef entropy_encoder_model<513,entropy_encoder::kernel_2a>::kernel_1b fce_length;\n        typedef entropy_decoder_model<513,entropy_decoder::kernel_2a>::kernel_1b fcd_length;\n\n        typedef entropy_encoder_model<65534,entropy_encoder::kernel_2a>::kernel_1b fce_length_2;\n        typedef entropy_decoder_model<65534,entropy_decoder::kernel_2a>::kernel_1b fcd_length_2;\n\n\n        typedef entropy_encoder_model<32257,entropy_encoder::kernel_2a>::kernel_1b fce_index;\n        typedef entropy_decoder_model<32257,entropy_decoder::kernel_2a>::kernel_1b fcd_index;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef      compress_stream_kernel_1 <fce1,fcd1,crc32::kernel_1a>\n                     kernel_1a;\n   \n        // kernel_1b        \n        typedef      compress_stream_kernel_1 <fce2,fcd2,crc32::kernel_1a>\n                     kernel_1b;\n\n        // kernel_1c        \n        typedef      compress_stream_kernel_1 <fce3,fcd3,crc32::kernel_1a>\n                     kernel_1c;\n\n        // kernel_1da        \n        typedef      compress_stream_kernel_1 <fce4a,fcd4a,crc32::kernel_1a>\n                     kernel_1da;\n\n        // kernel_1ea        \n        typedef      compress_stream_kernel_1 <fce5a,fcd5a,crc32::kernel_1a>\n                     kernel_1ea;\n\n        // kernel_1db        \n        typedef      compress_stream_kernel_1 <fce4b,fcd4b,crc32::kernel_1a>\n                     kernel_1db;\n\n        // kernel_1eb        \n        typedef      compress_stream_kernel_1 <fce5b,fcd5b,crc32::kernel_1a>\n                     kernel_1eb;\n\n        // kernel_1ec        \n        typedef      compress_stream_kernel_1 <fce5c,fcd5c,crc32::kernel_1a>\n                     kernel_1ec;\n\n\n\n\n        // kernel_2a        \n        typedef      compress_stream_kernel_2 <fce2,fcd2,lz77_buffer2a,sliding_buffer1,fce_length,fcd_length,fce_index,fcd_index,crc32::kernel_1a>\n                     kernel_2a;\n\n\n\n\n        // kernel_3a        \n        typedef      compress_stream_kernel_3 <lzp_buf_1,crc32::kernel_1a,16>\n                     kernel_3a;\n        // kernel_3b        \n        typedef      compress_stream_kernel_3 <lzp_buf_2,crc32::kernel_1a,16>\n                     kernel_3b;\n   \n\n    };\n}\n\n#endif // DLIB_COMPRESS_STREAm_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/conditioning_class/conditioning_class_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONDITIONING_CLASS_KERNEl_1_\n#define DLIB_CONDITIONING_CLASS_KERNEl_1_\n\n#include \"conditioning_class_kernel_abstract.h\"\n#include \"../assert.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size\n        >\n    class conditioning_class_kernel_1 \n    {\n        /*!\n            INITIAL VALUE\n                total == 1\n                counts == pointer to an array of alphabet_size unsigned shorts\n                for all i except i == alphabet_size-1: counts[i] == 0\n                counts[alphabet_size-1] == 1\n\n            CONVENTION\n                counts == pointer to an array of alphabet_size unsigned shorts\n                get_total() == total\n                get_count(symbol) == counts[symbol]\n\n                LOW_COUNT(symbol) == sum of counts[0] though counts[symbol-1]\n                                     or 0 if symbol == 0\n\n                get_memory_usage() == global_state.memory_usage\n        !*/\n\n    public:\n\n        class global_state_type\n        {\n        public:\n            global_state_type () : memory_usage(0) {}\n        private:\n            unsigned long memory_usage;\n\n            friend class conditioning_class_kernel_1<alphabet_size>;\n        };\n\n        conditioning_class_kernel_1 (\n            global_state_type& global_state_\n        );\n\n        ~conditioning_class_kernel_1 (\n        );\n\n        void clear(\n        );\n\n        bool increment_count (\n            unsigned long symbol,\n            unsigned short amount = 1\n        );\n\n        unsigned long get_count (\n            unsigned long symbol\n        ) const;\n\n        unsigned long get_total (\n        ) const;\n        \n        unsigned long get_range (\n            unsigned long symbol,\n            unsigned long& low_count,\n            unsigned long& high_count,\n            unsigned long& total_count\n        ) const;\n\n        void get_symbol (\n            unsigned long target,\n            unsigned long& symbol,            \n            unsigned long& low_count,\n            unsigned long& high_count\n        ) const;\n\n        unsigned long get_memory_usage (\n        ) const;\n\n        global_state_type& get_global_state (\n        );\n\n        static unsigned long get_alphabet_size (\n        );\n\n\n    private:\n\n        // restricted functions\n        conditioning_class_kernel_1(conditioning_class_kernel_1<alphabet_size>&);        // copy constructor\n        conditioning_class_kernel_1& operator=(conditioning_class_kernel_1<alphabet_size>&);    // assignment operator\n\n        // data members\n        unsigned short total;\n        unsigned short* counts;\n        global_state_type& global_state;\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    conditioning_class_kernel_1<alphabet_size>::\n    conditioning_class_kernel_1 (\n        global_state_type& global_state_\n    ) :\n        total(1),\n        counts(new unsigned short[alphabet_size]),\n        global_state(global_state_)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65536 );\n\n        unsigned short* start = counts;\n        unsigned short* end = counts+alphabet_size-1;\n        while (start != end)\n        {\n            *start = 0;\n            ++start;\n        }\n        *start = 1;\n\n        // update memory usage\n        global_state.memory_usage += sizeof(unsigned short)*alphabet_size + \n                                     sizeof(conditioning_class_kernel_1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    conditioning_class_kernel_1<alphabet_size>::\n    ~conditioning_class_kernel_1 (\n    )\n    {\n        delete [] counts;\n        // update memory usage\n        global_state.memory_usage -= sizeof(unsigned short)*alphabet_size + \n                                     sizeof(conditioning_class_kernel_1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    void conditioning_class_kernel_1<alphabet_size>::\n    clear(\n    )\n    {\n        total = 1;\n        unsigned short* start = counts;\n        unsigned short* end = counts+alphabet_size-1;\n        while (start != end)\n        {\n            *start = 0;\n            ++start;\n        }\n        *start = 1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_1<alphabet_size>::\n    get_memory_usage(\n    ) const\n    {\n        return global_state.memory_usage;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    typename conditioning_class_kernel_1<alphabet_size>::global_state_type& conditioning_class_kernel_1<alphabet_size>::\n    get_global_state(\n    )\n    {\n        return global_state;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    bool conditioning_class_kernel_1<alphabet_size>::\n    increment_count (\n        unsigned long symbol,\n        unsigned short amount\n    )\n    {        \n        // if we are going over a total of 65535 then scale down all counts by 2\n        if (static_cast<unsigned long>(total)+static_cast<unsigned long>(amount) >= 65536)\n        {\n            total = 0;\n            unsigned short* start = counts;\n            unsigned short* end = counts+alphabet_size;\n            while (start != end)\n            {\n                *start >>= 1;\n                total += *start;\n                ++start;\n            }    \n            // make sure it is at least one\n            if (counts[alphabet_size-1]==0)\n            {\n                ++total;\n                counts[alphabet_size-1] = 1;\n            }\n        }\n        counts[symbol] += amount;\n        total += amount;\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_1<alphabet_size>::\n    get_count (\n        unsigned long symbol\n    ) const\n    {\n        return counts[symbol];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_1<alphabet_size>::\n    get_alphabet_size (        \n    ) \n    {\n        return alphabet_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_1<alphabet_size>::\n    get_total (\n    ) const\n    {\n        return total;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_1<alphabet_size>::\n    get_range (\n        unsigned long symbol,\n        unsigned long& low_count,\n        unsigned long& high_count,\n        unsigned long& total_count\n    ) const\n    {\n        if (counts[symbol] == 0)\n            return 0;\n\n        total_count = total;\n        \n        const unsigned short* start = counts;\n        const unsigned short* end = counts+symbol;\n        unsigned short high_count_temp = *start;\n        while (start != end)\n        {\n            ++start;\n            high_count_temp += *start;            \n        }  \n        low_count = high_count_temp - *start;\n        high_count = high_count_temp;\n        return *start;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    void conditioning_class_kernel_1<alphabet_size>::\n    get_symbol (\n        unsigned long target,\n        unsigned long& symbol,            \n        unsigned long& low_count,\n        unsigned long& high_count\n    ) const\n    {\n        unsigned long high_count_temp = *counts;\n        const unsigned short* start = counts;        \n        while (target >= high_count_temp)\n        {\n            ++start;\n            high_count_temp += *start;            \n        } \n\n        low_count = high_count_temp - *start;\n        high_count = high_count_temp;\n        symbol = static_cast<unsigned long>(start-counts);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CONDITIONING_CLASS_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/conditioning_class/conditioning_class_kernel_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONDITIONING_CLASS_KERNEl_2_\n#define DLIB_CONDITIONING_CLASS_KERNEl_2_\n\n#include \"conditioning_class_kernel_abstract.h\"\n#include \"../assert.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size\n        >\n    class conditioning_class_kernel_2 \n    {\n        /*!\n            INITIAL VALUE\n                total == 1\n                symbols == pointer to array of alphabet_size data structs\n                for all i except i == alphabet_size-1: symbols[i].count == 0\n                                                       symbols[i].left_count == 0\n\n                symbols[alphabet_size-1].count == 1\n                symbols[alpahbet_size-1].left_count == 0\n\n            CONVENTION\n                symbols == pointer to array of alphabet_size data structs\n                get_total() == total\n                get_count(symbol) == symbols[symbol].count\n\n                symbols is organized as a tree with symbols[0] as the root.\n\n                the left subchild of symbols[i] is symbols[i*2+1] and\n                the right subchild is symbols[i*2+2].\n                the partent of symbols[i] == symbols[(i-1)/2]\n\n                symbols[i].left_count == the sum of the counts of all the\n                                         symbols to the left of symbols[i]\n\n                get_memory_usage() == global_state.memory_usage                                         \n        !*/\n\n    public:\n\n        class global_state_type\n        {\n        public:\n            global_state_type () : memory_usage(0) {}\n        private:\n            unsigned long memory_usage;\n\n            friend class conditioning_class_kernel_2<alphabet_size>;\n        };\n\n        conditioning_class_kernel_2 (\n            global_state_type& global_state_\n        );\n\n        ~conditioning_class_kernel_2 (\n        );\n\n        void clear(\n        );\n\n        bool increment_count (\n            unsigned long symbol,\n            unsigned short amount = 1\n        );\n\n        unsigned long get_count (\n            unsigned long symbol\n        ) const;\n\n        inline unsigned long get_total (\n        ) const;\n        \n        unsigned long get_range (\n            unsigned long symbol,\n            unsigned long& low_count,\n            unsigned long& high_count,\n            unsigned long& total_count\n        ) const;\n\n        void get_symbol (\n            unsigned long target,\n            unsigned long& symbol,            \n            unsigned long& low_count,\n            unsigned long& high_count\n        ) const;\n\n        unsigned long get_memory_usage (\n        ) const;\n\n        global_state_type& get_global_state (\n        );\n\n        static unsigned long get_alphabet_size (\n        );\n\n    private:\n\n        // restricted functions\n        conditioning_class_kernel_2(conditioning_class_kernel_2<alphabet_size>&);        // copy constructor\n        conditioning_class_kernel_2& operator=(conditioning_class_kernel_2<alphabet_size>&);    // assignment operator\n\n        // data members\n        unsigned short total;\n        struct data\n        {\n            unsigned short count;\n            unsigned short left_count;\n        };\n\n        data* symbols;\n        global_state_type& global_state;\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    conditioning_class_kernel_2<alphabet_size>::\n    conditioning_class_kernel_2 (\n        global_state_type& global_state_\n    ) :\n        total(1),\n        symbols(new data[alphabet_size]),\n        global_state(global_state_)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65536 );\n\n        data* start = symbols;\n        data* end = symbols + alphabet_size-1;\n        \n        while (start != end)\n        {            \n            start->count = 0;            \n            start->left_count = 0;\n            ++start;\n        }\n\n        start->count = 1;\n        start->left_count = 0;\n\n\n        // update the left_counts for the symbol alphabet_size-1\n        unsigned short temp;\n        unsigned long symbol = alphabet_size-1;\n        while (symbol != 0)\n        {\n            // temp will be 1 if symbol is odd, 0 if it is even\n            temp = static_cast<unsigned short>(symbol&0x1);\n\n            // set symbol to its parent\n            symbol = (symbol-1)>>1;\n            \n            // note that all left subchidren are odd and also that \n            // if symbol was a left subchild then we want to increment\n            // its parents left_count \n            if (temp)\n                ++symbols[symbol].left_count;\n        }\n\n        global_state.memory_usage += sizeof(data)*alphabet_size + \n                                     sizeof(conditioning_class_kernel_2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    conditioning_class_kernel_2<alphabet_size>::\n    ~conditioning_class_kernel_2 (\n    )\n    {\n        delete [] symbols;\n        global_state.memory_usage -= sizeof(data)*alphabet_size + \n                                     sizeof(conditioning_class_kernel_2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    void conditioning_class_kernel_2<alphabet_size>::\n    clear(\n    )\n    {\n        data* start = symbols;\n        data* end = symbols + alphabet_size-1;\n        \n        total = 1;\n\n        while (start != end)\n        {            \n            start->count = 0;            \n            start->left_count = 0;\n            ++start;\n        }\n\n        start->count = 1;\n        start->left_count = 0;\n\n        // update the left_counts \n        unsigned short temp;\n        unsigned long symbol = alphabet_size-1;\n        while (symbol != 0)\n        {\n            // temp will be 1 if symbol is odd, 0 if it is even\n            temp = static_cast<unsigned short>(symbol&0x1);\n\n            // set symbol to its parent\n            symbol = (symbol-1)>>1;\n            \n            // note that all left subchidren are odd and also that \n            // if symbol was a left subchild then we want to increment\n            // its parents left_count \n            symbols[symbol].left_count += temp;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_2<alphabet_size>::\n    get_memory_usage(\n    ) const\n    {\n        return global_state.memory_usage;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    typename conditioning_class_kernel_2<alphabet_size>::global_state_type& conditioning_class_kernel_2<alphabet_size>::\n    get_global_state(\n    )\n    {\n        return global_state;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    bool conditioning_class_kernel_2<alphabet_size>::\n    increment_count (\n        unsigned long symbol,\n        unsigned short amount\n    )\n    {        \n        // if we need to renormalize then do so\n        if (static_cast<unsigned long>(total)+static_cast<unsigned long>(amount) >= 65536)\n        {\n            unsigned long s;\n            unsigned short temp;\n            for (unsigned short i = 0; i < alphabet_size-1; ++i)\n            {\n                s = i;\n\n                // divide the count for this symbol by 2                \n                symbols[i].count >>= 1;\n                \n                symbols[i].left_count = 0;\n\n                // bubble this change up though the tree                \n                while (s != 0)\n                {\n                    // temp will be 1 if symbol is odd, 0 if it is even\n                    temp = static_cast<unsigned short>(s&0x1);\n\n                    // set s to its parent\n                    s = (s-1)>>1;\n                    \n                    // note that all left subchidren are odd and also that \n                    // if s was a left subchild then we want to increment\n                    // its parents left_count \n                    if (temp)\n                        symbols[s].left_count += symbols[i].count;\n                }   \n            }\n\n            // update symbols alphabet_size-1\n            {\n                s = alphabet_size-1;\n\n                // divide alphabet_size-1 symbol by 2 if it's > 1\n                if (symbols[alphabet_size-1].count > 1)\n                    symbols[alphabet_size-1].count >>= 1;\n                \n                // bubble this change up though the tree                \n                while (s != 0)\n                {\n                    // temp will be 1 if symbol is odd, 0 if it is even\n                    temp = static_cast<unsigned short>(s&0x1);\n\n                    // set s to its parent\n                    s = (s-1)>>1;\n                    \n                    // note that all left subchidren are odd and also that \n                    // if s was a left subchild then we want to increment\n                    // its parents left_count \n                    if (temp)\n                        symbols[s].left_count += symbols[alphabet_size-1].count;\n                }   \n            }        \n            \n\n\n\n\n\n            // calculate the new total\n            total = 0;\n            unsigned long m = 0;\n            while (m < alphabet_size)\n            {\n                total += symbols[m].count + symbols[m].left_count;\n                m = (m<<1) + 2;        \n            }\n            \n        }\n\n        \n\n\n        // increment the count for the specified symbol      \n        symbols[symbol].count += amount;;\n        total += amount;\n\n        \n        unsigned short temp;\n        while (symbol != 0)\n        {\n            // temp will be 1 if symbol is odd, 0 if it is even\n            temp = static_cast<unsigned short>(symbol&0x1);\n\n            // set symbol to its parent\n            symbol = (symbol-1)>>1;\n            \n            // note that all left subchidren are odd and also that \n            // if symbol was a left subchild then we want to increment\n            // its parents left_count \n            if (temp)\n                symbols[symbol].left_count += amount;\n        }\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_2<alphabet_size>::\n    get_count (\n        unsigned long symbol\n    ) const\n    {\n        return symbols[symbol].count;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_2<alphabet_size>::\n    get_alphabet_size (        \n    ) \n    {\n        return alphabet_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_2<alphabet_size>::\n    get_total (\n    ) const\n    {\n        return total;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_2<alphabet_size>::\n    get_range (\n        unsigned long symbol,\n        unsigned long& low_count,\n        unsigned long& high_count,\n        unsigned long& total_count\n    ) const\n    {\n        if (symbols[symbol].count == 0)\n            return 0;\n\n        unsigned long current = symbol;\n        total_count = total;\n        unsigned long high_count_temp = 0;\n        bool came_from_right = true;\n        while (true)\n        {                        \n            if (came_from_right)\n            {\n                high_count_temp += symbols[current].count + symbols[current].left_count;\n            }\n\n            // note that if current is even then it is a right child\n            came_from_right = !(current&0x1);\n\n            if (current == 0)\n                break;\n\n            // set current to its parent\n            current = (current-1)>>1 ;\n        }\n\n\n        low_count = high_count_temp - symbols[symbol].count;\n        high_count = high_count_temp;\n\n        return symbols[symbol].count;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    void conditioning_class_kernel_2<alphabet_size>::\n    get_symbol (\n        unsigned long target,\n        unsigned long& symbol,            \n        unsigned long& low_count,\n        unsigned long& high_count\n    ) const\n    {\n        unsigned long current = 0;\n        unsigned long low_count_temp = 0;\n        \n        while (true)\n        {\n            if (static_cast<unsigned short>(target) < symbols[current].left_count)\n            {\n                // we should go left\n                current = (current<<1) + 1;\n            }\n            else \n            {\n                target -= symbols[current].left_count;\n                low_count_temp += symbols[current].left_count;\n                if (static_cast<unsigned short>(target) < symbols[current].count)\n                {\n                    // we have found our target\n                    symbol = current;\n                    high_count = low_count_temp + symbols[current].count;\n                    low_count = low_count_temp;\n                    break;\n                }\n                else\n                {   \n                    // go right\n                    target -= symbols[current].count;\n                    low_count_temp += symbols[current].count;\n                    current = (current<<1) + 2;\n                }\n            }\n\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CONDITIONING_CLASS_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/conditioning_class/conditioning_class_kernel_3.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONDITIONING_CLASS_KERNEl_3_\n#define DLIB_CONDITIONING_CLASS_KERNEl_3_\n\n#include \"conditioning_class_kernel_abstract.h\"\n#include \"../assert.h\"\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size\n        >\n    class conditioning_class_kernel_3 \n    {\n        /*!\n            INITIAL VALUE\n                total == 1\n                counts == pointer to an array of alphabet_size data structs                \n                for all i except i == 0: counts[i].count == 0\n                counts[0].count == 1\n                counts[0].symbol == alphabet_size-1\n                for all i except i == alphabet_size-1:  counts[i].present == false\n                counts[alphabet_size-1].present == true\n\n            CONVENTION\n                counts == pointer to an array of alphabet_size data structs\n                get_total() == total\n                get_count(symbol) == counts[x].count where \n                                     counts[x].symbol == symbol\n\n\n                LOW_COUNT(symbol) == sum of counts[0].count though counts[x-1].count\n                                     where counts[x].symbol == symbol\n                                     if (counts[0].symbol == symbol) LOW_COUNT(symbol)==0\n\n\n                if (counts[i].count == 0) then\n                    counts[i].symbol == undefined value\n\n                if (symbol has a nonzero count) then\n                    counts[symbol].present == true\n\n                get_memory_usage() == global_state.memory_usage\n        !*/\n\n    public:\n\n        class global_state_type\n        {\n        public:\n            global_state_type () : memory_usage(0) {}\n        private:\n            unsigned long memory_usage;\n\n            friend class conditioning_class_kernel_3<alphabet_size>;\n        };\n\n        conditioning_class_kernel_3 (\n            global_state_type& global_state_\n        );\n\n        ~conditioning_class_kernel_3 (\n        );\n\n        void clear(\n        );\n\n        bool increment_count (\n            unsigned long symbol,\n            unsigned short amount = 1\n        );\n\n        unsigned long get_count (\n            unsigned long symbol\n        ) const;\n\n        unsigned long get_total (\n        ) const;\n        \n        unsigned long get_range (\n            unsigned long symbol,\n            unsigned long& low_count,\n            unsigned long& high_count,\n            unsigned long& total_count\n        ) const;\n\n        void get_symbol (\n            unsigned long target,\n            unsigned long& symbol,            \n            unsigned long& low_count,\n            unsigned long& high_count\n        ) const;\n\n        unsigned long get_memory_usage (\n        ) const;\n\n        global_state_type& get_global_state (\n        );\n\n        static unsigned long get_alphabet_size (\n        );\n\n    private:\n\n        // restricted functions\n        conditioning_class_kernel_3(conditioning_class_kernel_3<alphabet_size>&);        // copy constructor\n        conditioning_class_kernel_3& operator=(conditioning_class_kernel_3<alphabet_size>&);    // assignment operator\n\n        struct data\n        {\n            unsigned short count;\n            unsigned short symbol;\n            bool present;\n        };\n\n        // data members\n        unsigned short total;\n        data* counts;\n        global_state_type& global_state;\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    conditioning_class_kernel_3<alphabet_size>::\n    conditioning_class_kernel_3 (\n        global_state_type& global_state_\n    ) :\n        total(1),\n        counts(new data[alphabet_size]),\n        global_state(global_state_)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65536 );\n\n        data* start = counts;\n        data* end = counts+alphabet_size;\n        start->count = 1;\n        start->symbol = alphabet_size-1;\n        start->present = false;\n        ++start;\n        while (start != end)\n        {\n            start->count = 0;\n            start->present = false;\n            ++start;\n        }        \n        counts[alphabet_size-1].present = true;\n\n        // update memory usage\n        global_state.memory_usage += sizeof(data)*alphabet_size + \n                                     sizeof(conditioning_class_kernel_3);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    conditioning_class_kernel_3<alphabet_size>::\n    ~conditioning_class_kernel_3 (\n    )\n    {\n        delete [] counts;\n        // update memory usage\n        global_state.memory_usage -= sizeof(data)*alphabet_size + \n                                     sizeof(conditioning_class_kernel_3);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    void conditioning_class_kernel_3<alphabet_size>::\n    clear(\n    )\n    {\n        total = 1;\n        data* start = counts;\n        data* end = counts+alphabet_size;\n        start->count = 1;\n        start->symbol = alphabet_size-1;\n        start->present = false;\n        ++start;\n        while (start != end)\n        {\n            start->count = 0;\n            start->present = false;\n            ++start;\n        }        \n        counts[alphabet_size-1].present = true; \n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    typename conditioning_class_kernel_3<alphabet_size>::global_state_type& conditioning_class_kernel_3<alphabet_size>::\n    get_global_state(\n    )\n    {\n        return global_state;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_3<alphabet_size>::\n    get_memory_usage(\n    ) const\n    {\n        return global_state.memory_usage;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    bool conditioning_class_kernel_3<alphabet_size>::\n    increment_count (\n        unsigned long symbol,\n        unsigned short amount\n    )\n    {        \n        // if we are going over a total of 65535 then scale down all counts by 2\n        if (static_cast<unsigned long>(total)+static_cast<unsigned long>(amount) >= 65536)\n        {\n            total = 0;\n            data* start = counts;\n            data* end = counts+alphabet_size;\n            \n            while (start != end)\n            {\n                if (start->count == 1)\n                {\n                    if (start->symbol == alphabet_size-1)\n                    {\n                        // this symbol must never be zero so we will leave its count at 1\n                        ++total;\n                    }\n                    else\n                    {\n                        start->count = 0;\n                        counts[start->symbol].present = false;\n                    }\n                }\n                else\n                {\n                    start->count >>= 1;\n                    total += start->count;\n                }\n \n                ++start;\n            }  \n        }\n\n\n        data* start = counts;   \n        data* swap_spot = counts;\n\n        if (counts[symbol].present)\n        {\n            while (true)\n            {                \n                if (start->symbol == symbol && start->count!=0)\n                {                \n                    unsigned short temp = start->count + amount;\n\n                    start->symbol = swap_spot->symbol;\n                    start->count = swap_spot->count;\n\n                    swap_spot->symbol = static_cast<unsigned short>(symbol);                \n                    swap_spot->count  = temp;\n                    break;\n                }\n                \n                if ( (start->count) < (swap_spot->count))\n                {\n                    swap_spot = start;\n                }\n\n\n                ++start;\n            }\n        }\n        else\n        {\n            counts[symbol].present = true;\n            while (true)\n            {\n                if (start->count == 0)\n                {\n                    start->symbol = swap_spot->symbol;\n                    start->count = swap_spot->count;\n                    \n                    swap_spot->symbol = static_cast<unsigned short>(symbol);                \n                    swap_spot->count  = amount;\n                    break;\n                }\n                    \n                if ((start->count) < (swap_spot->count))\n                {\n                    swap_spot = start;\n                }\n\n                ++start;\n            }\n        }\n        \n        total += amount;\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_3<alphabet_size>::\n    get_count (\n        unsigned long symbol\n    ) const\n    {\n        if (counts[symbol].present == false)\n            return 0;\n\n        data* start = counts;        \n        while (start->symbol != symbol)\n        {\n            ++start;\n        }\n        return start->count;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_3<alphabet_size>::\n    get_alphabet_size (        \n    ) \n    {\n        return alphabet_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_3<alphabet_size>::\n    get_total (\n    ) const\n    {\n        return total;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    unsigned long conditioning_class_kernel_3<alphabet_size>::\n    get_range (\n        unsigned long symbol,\n        unsigned long& low_count,\n        unsigned long& high_count,\n        unsigned long& total_count\n    ) const\n    {\n        if (counts[symbol].present == false)\n            return 0;\n\n        total_count = total;\n        unsigned long low_count_temp = 0;\n        data* start = counts;        \n        while (start->symbol != symbol)\n        {\n            low_count_temp += start->count;\n            ++start;\n        } \n\n        low_count = low_count_temp;\n        high_count = low_count_temp + start->count;\n        return start->count;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size\n        >\n    void conditioning_class_kernel_3<alphabet_size>::\n    get_symbol (\n        unsigned long target,\n        unsigned long& symbol,            \n        unsigned long& low_count,\n        unsigned long& high_count\n    ) const\n    {\n        unsigned long high_count_temp = counts->count;\n        const data* start = counts;        \n        while (target >= high_count_temp)\n        {\n            ++start;\n            high_count_temp += start->count;\n        } \n\n        low_count = high_count_temp - start->count;\n        high_count = high_count_temp;\n        symbol = static_cast<unsigned long>(start->symbol);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CONDITIONING_CLASS_KERNEl_3_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/conditioning_class/conditioning_class_kernel_4.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONDITIONING_CLASS_KERNEl_4_\n#define DLIB_CONDITIONING_CLASS_KERNEl_4_\n\n#include \"conditioning_class_kernel_abstract.h\"\n#include \"../assert.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    class conditioning_class_kernel_4 \n    {\n        /*!\n            REQUIREMENTS ON pool_size\n                pool_size > 0\n                this will be the number of nodes contained in our memory pool\n\n            REQUIREMENTS ON mem_manager\n                mem_manager is an implementation of memory_manager/memory_manager_kernel_abstract.h\n\n            INITIAL VALUE\n                total == 1\n                escapes == 1\n                next == 0\n                \n            CONVENTION                \n                get_total() == total\n                get_count(alphabet_size-1) == escapes\n\n                if (next != 0) then\n                    next == pointer to the start of a linked list and the linked list\n                            is terminated by a node with a next pointer of 0.\n\n                get_count(symbol) == node::count for the node where node::symbol==symbol \n                                     or 0 if no such node currently exists.\n\n                if (there is a node for the symbol) then\n                    LOW_COUNT(symbol) == the sum of all node's counts in the linked list\n                    up to but not including the node for the symbol.\n\n                get_memory_usage() == global_state.memory_usage\n        !*/\n\n\n        struct node\n        {\n            unsigned short symbol;\n            unsigned short count;\n            node* next;\n        };\n\n    public:\n\n        class global_state_type\n        {\n        public:\n            global_state_type (\n            ) : \n                memory_usage(pool_size*sizeof(node)+sizeof(global_state_type))\n                {}\n        private:\n            unsigned long memory_usage;\n\n            typename mem_manager::template rebind<node>::other pool;\n\n            friend class conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>;\n        };\n\n        conditioning_class_kernel_4 (\n            global_state_type& global_state_\n        );\n\n        ~conditioning_class_kernel_4 (\n        );\n\n        void clear(\n        );\n\n        bool increment_count (\n            unsigned long symbol,\n            unsigned short amount = 1\n        );\n\n        unsigned long get_count (\n            unsigned long symbol\n        ) const;\n\n        inline unsigned long get_total (\n        ) const;\n        \n        unsigned long get_range (\n            unsigned long symbol,\n            unsigned long& low_count,\n            unsigned long& high_count,\n            unsigned long& total_count\n        ) const;\n\n        void get_symbol (\n            unsigned long target,\n            unsigned long& symbol,            \n            unsigned long& low_count,\n            unsigned long& high_count\n        ) const;\n\n        unsigned long get_memory_usage (\n        ) const;\n\n        global_state_type& get_global_state (\n        );\n\n        static unsigned long get_alphabet_size (\n        );\n\n\n    private:\n\n        void half_counts (\n        );\n        /*!\n            ensures\n                - divides all counts by 2 but ensures that escapes is always at least 1\n        !*/\n\n        // restricted functions\n        conditioning_class_kernel_4(conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>&);        // copy constructor\n        conditioning_class_kernel_4& operator=(conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>&);    // assignment operator\n\n        // data members\n        unsigned short total;\n        unsigned short escapes;\n        node* next;\n        global_state_type& global_state;\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    conditioning_class_kernel_4 (\n        global_state_type& global_state_\n    ) :\n        total(1),\n        escapes(1),\n        next(0),\n        global_state(global_state_)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65536 );\n\n        // update memory usage\n        global_state.memory_usage += sizeof(conditioning_class_kernel_4);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    ~conditioning_class_kernel_4 (\n    )\n    {\n        clear();\n        // update memory usage\n        global_state.memory_usage -= sizeof(conditioning_class_kernel_4);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    void conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    clear(\n    )\n    {\n        total = 1;\n        escapes = 1;\n        while (next)\n        {\n            node* temp = next;\n            next = next->next;\n            global_state.pool.deallocate(temp);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    unsigned long conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    get_memory_usage(\n    ) const\n    {\n        return global_state.memory_usage;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    typename conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::global_state_type& conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    get_global_state(\n    )\n    {\n        return global_state;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    bool conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    increment_count (\n        unsigned long symbol,\n        unsigned short amount\n    )\n    {        \n        if (symbol == alphabet_size-1)\n        {\n            // make sure we won't cause any overflow\n            if (total >= 65536 - amount )                        \n                half_counts();\n\n            escapes += amount;\n            total += amount;\n            return true;\n        }\n\n        \n        // find the symbol and increment it or add a new node to the list\n        if (next)\n        {\n            node* temp = next;\n            node* previous = 0;\n            while (true)\n            {\n                if (temp->symbol == static_cast<unsigned short>(symbol))\n                {\n                    // make sure we won't cause any overflow\n                    if (total >= 65536 - amount )                        \n                        half_counts();\n                    \n                    // we have found the symbol\n                    total += amount;\n                    temp->count += amount;\n\n                    // if this node now has a count greater than its parent node\n                    if (previous && temp->count > previous->count)\n                    {\n                        // swap the nodes so that the nodes will be in semi-sorted order\n                        swap(temp->count,previous->count);\n                        swap(temp->symbol,previous->symbol);\n                    }\n                    return true;\n                }\n                else if (temp->next == 0)\n                {\n                    // we did not find the symbol so try to add it to the list\n                    if (global_state.pool.get_number_of_allocations() < pool_size)\n                    {\n                        // make sure we won't cause any overflow\n                        if (total >= 65536 - amount )                        \n                            half_counts();\n\n                        node* t = global_state.pool.allocate();\n                        t->next = 0;\n                        t->symbol = static_cast<unsigned short>(symbol);\n                        t->count = amount;\n                        temp->next = t;\n                        total += amount;\n                        return true;\n                    }\n                    else\n                    {\n                        // no memory left\n                        return false;\n                    }\n                }\n                else if (temp->count == 0)\n                {\n                    // remove nodes that have a zero count\n                    if (previous)\n                    {\n                        previous->next = temp->next;\n                        node* t = temp;\n                        temp = temp->next;\n                        global_state.pool.deallocate(t);\n                    }\n                    else\n                    {\n                        next = temp->next;\n                        node* t = temp;\n                        temp = temp->next;\n                        global_state.pool.deallocate(t);\n                    }\n                }\n                else\n                {\n                    previous = temp;\n                    temp = temp->next;\n                }\n            } // while (true)\n        }\n        // if there aren't any nodes in the list yet then do this instead\n        else\n        {\n            if (global_state.pool.get_number_of_allocations() < pool_size)\n            {\n                // make sure we won't cause any overflow\n                if (total >= 65536 - amount )                        \n                    half_counts();\n\n                next = global_state.pool.allocate();\n                next->next = 0;\n                next->symbol = static_cast<unsigned short>(symbol);\n                next->count = amount;\n                total += amount;\n                return true;\n            }\n            else\n            {\n                // no memory left\n                return false;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    unsigned long conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    get_count (\n        unsigned long symbol\n    ) const\n    {\n        if (symbol == alphabet_size-1)\n        { \n            return escapes;\n        }\n        else\n        {\n            node* temp = next;\n            while (temp)\n            {\n                if (temp->symbol == symbol)\n                    return temp->count;\n                temp = temp->next;\n            }\n            return 0;\n        }        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    unsigned long conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    get_alphabet_size (        \n    ) \n    {\n        return alphabet_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    unsigned long conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    get_total (\n    ) const\n    {\n        return total;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    unsigned long conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    get_range (\n        unsigned long symbol,\n        unsigned long& low_count,\n        unsigned long& high_count,\n        unsigned long& total_count\n    ) const\n    {   \n        if (symbol != alphabet_size-1)\n        {\n            node* temp = next;\n            unsigned long low = 0;\n            while (temp)\n            {\n                if (temp->symbol == static_cast<unsigned short>(symbol))\n                {\n                    high_count = temp->count + low;\n                    low_count = low;                \n                    total_count = total;\n                    return temp->count;\n                }\n                low += temp->count;\n                temp = temp->next;\n            }\n            return 0;\n        }\n        else\n        {\n            total_count = total;\n            high_count = total;\n            low_count = total-escapes;\n            return escapes;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    void conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    get_symbol (\n        unsigned long target,\n        unsigned long& symbol,            \n        unsigned long& low_count,\n        unsigned long& high_count\n    ) const\n    {\n        node* temp = next;\n        unsigned long high = 0;\n        while (true)\n        {\n            if (temp != 0)\n            {\n                high += temp->count;\n                if (target < high)\n                {\n                    symbol = temp->symbol;\n                    high_count = high;\n                    low_count = high - temp->count;\n                    return;\n                }\n                temp = temp->next;\n            }\n            else\n            {\n                // this must be the escape symbol\n                symbol = alphabet_size-1;\n                low_count = total-escapes;\n                high_count = total;\n                return;\n            }            \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n\n    template <\n        unsigned long alphabet_size,\n        unsigned long pool_size,\n        typename mem_manager\n        >\n    void conditioning_class_kernel_4<alphabet_size,pool_size,mem_manager>::\n    half_counts (\n    ) \n    {\n        total = 0;\n        if (escapes > 1)\n            escapes >>= 1;\n\n        //divide all counts by 2\n        node* temp = next;\n        while (temp)\n        {\n            temp->count >>= 1;\n            total += temp->count;\n            temp = temp->next;\n        }\n        total += escapes;\n    }\n\n// ----------------------------------------------------------------------------------------\n \n}\n\n#endif // DLIB_CONDITIONING_CLASS_KERNEl_4_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/conditioning_class/conditioning_class_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CONDITIONING_CLASS_KERNEl_ABSTRACT_\n#ifdef DLIB_CONDITIONING_CLASS_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size\n        >\n    class conditioning_class \n    {\n        /*!\n            REQUIREMENTS ON alphabet_size\n                1 < alphabet_size < 65536\n\n            INITIAL VALUE\n                get_total() == 1\n                get_count(X) == 0 : for all valid values of X except alphabet_size-1\n                get_count(alphabet_size-1) == 1\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a conditioning class used for arithmetic style\n                compression.  It maintains the cumulative counts which are needed\n                by the entropy_coder and entropy_decoder objects.\n\n                At any moment a conditioning_class object represents a set of \n                alphabet_size symbols.  Each symbol is associated with an integer \n                called its count.  \n\n                All symbols start out with a count of zero except for alphabet_size-1.\n                This last symbol will always have a count of at least one.  It is\n                intended to be used as an escape into a lower context when coding\n                and so it must never have a zero probability or the decoder won't\n                be able to identify the escape symbol.\n\n            NOTATION:\n                Let MAP(i) be a function which maps integers to symbols.  MAP(i) is\n                one to one and onto.  Its domain is 1 to alphabet_size inclusive.\n               \n                Let RMAP(s) be the inverse of MAP(i).  \n                 ( i.e.  RMAP(MAP(i)) == i  and  MAP(RMAP(s)) == s  )\n\n                Let COUNT(i) give the count for the symbol MAP(i).  \n                 ( i.e.  COUNT(i) == get_count(MAP(i)) )\n              \n\n                Let LOW_COUNT(s) == the sum of COUNT(x) for x == 1 to x == RMAP(s)-1\n                  (note that the sum of COUNT(x) for x == 1 to x == 0 is 0)\n                Let HIGH_COUNT(s) == LOW_COUNT(s) + get_count(s)    \n\n\n\n                Basically what this is saying is just that you shoudln't assume you know\n                what order the symbols are placed in when calculating the cumulative\n                sums.  The specific mapping provided by the MAP() function is unspecified.  \n\n            THREAD SAFETY\n                This object can be used safely in a multithreaded program as long as the \n                global state is not shared between conditioning classes which run on \n                different threads.  \n\n            GLOBAL_STATE_TYPE\n                The global_state_type obejct allows instances of the conditioning_class\n                object to share any kind of global state the implementer desires. \n                However, the global_state_type object exists primarily to facilitate the \n                sharing of a memory pool between many instances of a conditioning_class \n                object.  But note that it is not required that there be any kind of \n                memory pool at all, it is just a possibility.\n        !*/\n\n    public:\n\n        class global_state_type \n        {\n            global_state_type (\n            );\n            /*!\n                ensures\n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc\n            !*/\n\n            // my contents are implementation specific.               \n        };\n\n        conditioning_class (\n            global_state_type& global_state\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - &#get_global_state() == &global_state\n            throws\n                - std::bad_alloc\n        !*/\n\n        ~conditioning_class (\n        );\n        /*!\n            ensures\n                - all memory associated with *this has been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc\n        !*/\n\n        bool increment_count (\n            unsigned long symbol,\n            unsigned short amount = 1\n        );\n        /*!\n            requires\n                - 0 <= symbol < alphabet_size\n                - 0 < amount < 32768\n            ensures\n                - if (sufficient memory is available to complete this operation) then\n                    - returns true\n                    - if (get_total()+amount < 65536) then \n                        - #get_count(symbol) == get_count(symbol) + amount\n                    - else\n                        - #get_count(symbol) == get_count(symbol)/2 + amount\n                        - if (get_count(alphabet_size-1) == 1) then\n                            - #get_count(alphabet_size-1) == 1\n                        - else\n                            - #get_count(alphabet_size-1) == get_count(alphabet_size-1)/2\n                        - for all X where (X != symbol)&&(X != alpahbet_size-1): \n                          #get_count(X) == get_count(X)/2  \n                - else\n                    - returns false\n        !*/\n\n        unsigned long get_count (\n            unsigned long symbol\n        ) const;\n        /*!\n            requires \n                - 0 <= symbol < alphabet_size\n            ensures\n                - returns the count for the specified symbol\n        !*/\n\n        unsigned long get_total (\n        ) const;\n        /*!\n            ensures\n                - returns the sum of get_count(X) for all valid values of X\n                  (i.e. returns the sum of the counts for all the symbols)\n        !*/\n\n        unsigned long get_range (\n            unsigned long symbol,\n            unsigned long& low_count,\n            unsigned long& high_count,\n            unsigned long& total_count\n        ) const;\n        /*!\n            requires\n                - 0 <= symbol < alphabet_size\n            ensures                \n                - returns get_count(symbol)\n                - if (get_count(symbol) != 0) then\n                    - #total_count == get_total()\n                    - #low_count   == LOW_COUNT(symbol)\n                    - #high_count  == HIGH_COUNT(symbol)\n                    - #low_count < #high_count <= #total_count                \n        !*/\n\n        void get_symbol (\n            unsigned long target,\n            unsigned long& symbol,            \n            unsigned long& low_count,\n            unsigned long& high_count\n        ) const;\n        /*!\n            requires\n                - 0 <= target < get_total()\n            ensures\n                - LOW_COUNT(#symbol) <= target < HIGH_COUNT(#symbol)\n                - #low_count   == LOW_COUNT(#symbol)\n                - #high_count  == HIGH_COUNT(#symbol)\n                - #low_count < #high_count <= get_total()\n        !*/\n\n        global_state_type& get_global_state (\n        );\n        /*! \n            ensures\n                - returns a reference to the global state used by *this\n        !*/\n\n        unsigned long get_memory_usage (\n        ) const;\n        /*!\n            ensures \n                - returns the number of bytes of memory allocated by all conditioning_class\n                  objects that share the global state given by get_global_state()\n        !*/\n\n        static unsigned long get_alphabet_size (\n        );\n        /*!\n            ensures\n                - returns alphabet_size\n        !*/\n\n    private:\n\n        // restricted functions\n        conditioning_class(conditioning_class<alphabet_size>&);        // copy constructor\n        conditioning_class<alphabet_size>& operator=(conditioning_class<alphabet_size>&);    // assignment operator\n\n    };   \n\n}\n\n#endif // DLIB_CONDITIONING_CLASS_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/conditioning_class/conditioning_class_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONDITIONING_CLASS_KERNEl_C_\n#define DLIB_CONDITIONING_CLASS_KERNEl_C_\n\n#include \"conditioning_class_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename cc_base\n        >\n    class conditioning_class_kernel_c : public cc_base\n    {\n        const unsigned long alphabet_size;\n\n    public:\n\n        conditioning_class_kernel_c (\n            typename cc_base::global_state_type& global_state\n            ) : cc_base(global_state),alphabet_size(cc_base::get_alphabet_size()) {}\n\n        bool increment_count (\n            unsigned long symbol,\n            unsigned short amount = 1\n        );\n\n        unsigned long get_count (\n            unsigned long symbol\n        ) const;\n\n        unsigned long get_range (\n            unsigned long symbol,\n            unsigned long& low_count,\n            unsigned long& high_count,\n            unsigned long& total_count\n        ) const;\n\n        void get_symbol (\n            unsigned long target,\n            unsigned long& symbol,            \n            unsigned long& low_count,\n            unsigned long& high_count\n        ) const;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename cc_base\n        >\n    bool conditioning_class_kernel_c<cc_base>::\n    increment_count (\n        unsigned long symbol,\n        unsigned short amount\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(symbol < alphabet_size &&\n                0 < amount && amount < 32768,\n                \"\\tvoid conditioning_class::increment_count()\"\n                << \"\\n\\tthe symbol must be in the range 0 to alphabet_size-1. and\"\n                << \"\\n\\tamount must be in the range 1 to 32767\"\n                << \"\\n\\talphabet_size: \" << alphabet_size\n                << \"\\n\\tsymbol:        \" << symbol\n                << \"\\n\\tamount:        \" << amount\n                << \"\\n\\tthis:          \" << this\n        );\n\n        // call the real function\n        return cc_base::increment_count(symbol,amount);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename cc_base\n        >\n    unsigned long conditioning_class_kernel_c<cc_base>::\n    get_count (\n        unsigned long symbol\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(symbol < alphabet_size,\n                \"\\tvoid conditioning_class::get_count()\"\n                << \"\\n\\tthe symbol must be in the range 0 to alphabet_size-1\"\n                << \"\\n\\talphabet_size: \" << alphabet_size\n                << \"\\n\\tsymbol:        \" << symbol\n                << \"\\n\\tthis:          \" << this\n        );\n\n        // call the real function\n        return cc_base::get_count(symbol);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename cc_base\n        >\n    unsigned long conditioning_class_kernel_c<cc_base>::\n    get_range (\n        unsigned long symbol,\n        unsigned long& low_count,\n        unsigned long& high_count,\n        unsigned long& total_count\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(symbol < alphabet_size,\n                \"\\tvoid conditioning_class::get_range()\"\n                << \"\\n\\tthe symbol must be in the range 0 to alphabet_size-1\"\n                << \"\\n\\talphabet_size: \" << alphabet_size\n                << \"\\n\\tsymbol:        \" << symbol\n                << \"\\n\\tthis:          \" << this\n        );\n\n        // call the real function\n        return cc_base::get_range(symbol,low_count,high_count,total_count);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename cc_base\n        >\n    void conditioning_class_kernel_c<cc_base>::\n    get_symbol (\n        unsigned long target,\n        unsigned long& symbol,            \n        unsigned long& low_count,\n        unsigned long& high_count\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( target < this->get_total(),\n                 \"\\tvoid conditioning_class::get_symbol()\"\n                 << \"\\n\\tthe target must be in the range 0 to get_total()-1\"\n                 << \"\\n\\tget_total(): \" << this->get_total()\n                 << \"\\n\\ttarget:       \" << target\n                 << \"\\n\\tthis:         \" << this\n        );\n\n        // call the real function\n        cc_base::get_symbol(target,symbol,low_count,high_count);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CONDITIONING_CLASS_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/conditioning_class.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONDITIONING_CLASs_\n#define DLIB_CONDITIONING_CLASs_\n\n#include \"conditioning_class/conditioning_class_kernel_1.h\"\n#include \"conditioning_class/conditioning_class_kernel_2.h\"\n#include \"conditioning_class/conditioning_class_kernel_3.h\"\n#include \"conditioning_class/conditioning_class_kernel_4.h\"\n#include \"conditioning_class/conditioning_class_kernel_c.h\"\n\n\n#include \"memory_manager.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size\n        >\n    class conditioning_class\n    {\n        conditioning_class() {}\n\n        typedef memory_manager<char>::kernel_2b mm;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef      conditioning_class_kernel_1<alphabet_size>\n                     kernel_1a;\n        typedef      conditioning_class_kernel_c<kernel_1a>\n                     kernel_1a_c;\n\n        // kernel_2a        \n        typedef      conditioning_class_kernel_2<alphabet_size>\n                     kernel_2a;\n        typedef      conditioning_class_kernel_c<kernel_2a>\n                     kernel_2a_c;\n          \n        // kernel_3a        \n        typedef      conditioning_class_kernel_3<alphabet_size>\n                     kernel_3a;\n        typedef      conditioning_class_kernel_c<kernel_3a>\n                     kernel_3a_c;\n          \n\n        // -------- kernel_4 ---------\n\n        // kernel_4a        \n        typedef      conditioning_class_kernel_4<alphabet_size,10000,mm>\n                     kernel_4a;\n        typedef      conditioning_class_kernel_c<kernel_4a>\n                     kernel_4a_c;\n\n        // kernel_4b        \n        typedef      conditioning_class_kernel_4<alphabet_size,100000,mm>\n                     kernel_4b;\n        typedef      conditioning_class_kernel_c<kernel_4b>\n                     kernel_4b_c;\n\n        // kernel_4c        \n        typedef      conditioning_class_kernel_4<alphabet_size,1000000,mm>\n                     kernel_4c;\n        typedef      conditioning_class_kernel_c<kernel_4c>\n                     kernel_4c_c;\n\n        // kernel_4d        \n        typedef      conditioning_class_kernel_4<alphabet_size,10000000,mm>\n                     kernel_4d;\n        typedef      conditioning_class_kernel_c<kernel_4d>\n                     kernel_4d_c;\n\n    };\n}\n\n#endif // DLIB_CONDITIONING_CLASS_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/config.h",
    "content": "\n\n// If you are compiling dlib as a shared library and installing it somewhere on your system\n// then it is important that any programs that use dlib agree on the state of the\n// DLIB_ASSERT statements (i.e. they are either always on or always off).  Therefore,\n// uncomment one of the following lines to force all DLIB_ASSERTs to either always on or\n// always off.  If you don't define one of these two macros then DLIB_ASSERT will toggle\n// automatically depending on the state of certain other macros, which is not what you want\n// when creating a shared library.\n//#define ENABLE_ASSERTS       // asserts always enabled \n//#define DLIB_DISABLE_ASSERTS // asserts always disabled \n\n\n\n// You should also consider telling dlib to link against libjpeg, libpng, fftw, and a BLAS\n// and LAPACK library.  To do this you need to uncomment the following #defines.\n// #define DLIB_JPEG_SUPPORT\n// #define DLIB_PNG_SUPPORT\n// #define DLIB_USE_FFTW\n// #define DLIB_USE_BLAS\n// #define DLIB_USE_LAPACK\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/config_reader/config_reader_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONFIG_READER_KERNEl_1_\n#define DLIB_CONFIG_READER_KERNEl_1_\n\n#include \"config_reader_kernel_abstract.h\"\n#include <string>\n#include <iostream>\n#include <sstream>\n#include <fstream>\n#include \"../algs.h\"\n#include \"../stl_checked/std_vector_c.h\"\n\n#ifndef DLIB_ISO_CPP_ONLY\n#include \"config_reader_thread_safe_1.h\"\n#endif\n\nnamespace dlib\n{\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    class config_reader_kernel_1 \n    {\n\n        /*!                \n            REQUIREMENTS ON map_string_string\n                is an implementation of map/map_kernel_abstract.h that maps std::string to std::string\n\n            REQUIREMENTS ON map_string_void \n                is an implementation of map/map_kernel_abstract.h that maps std::string to void*\n\n            REQUIREMENTS ON tokenizer\n                is an implementation of tokenizer/tokenizer_kernel_abstract.h \n\n            CONVENTION\n                key_table.is_in_domain(x) == is_key_defined(x)\n                block_table.is_in_domain(x) == is_block_defined(x)\n\n                key_table[x] == operator[](x)\n                block_table[x] == (void*)&block(x)\n        !*/\n        \n    public:\n\n        // These two typedefs are defined for backwards compatibility with older versions of dlib.\n        typedef config_reader_kernel_1 kernel_1a;\n#ifndef DLIB_ISO_CPP_ONLY\n        typedef config_reader_thread_safe_1<\n            config_reader_kernel_1,\n            map_string_void \n            > thread_safe_1a;\n#endif // DLIB_ISO_CPP_ONLY\n\n\n        config_reader_kernel_1();\n\n        class config_reader_error : public dlib::error \n        {\n            friend class config_reader_kernel_1;\n            config_reader_error(\n                unsigned long ln, \n                bool r = false\n            ) : \n                dlib::error(ECONFIG_READER),\n                line_number(ln), \n                redefinition(r)\n            {\n                std::ostringstream sout;\n                sout << \"Error in config_reader while parsing at line number \" << line_number << \".\";\n                if (redefinition)\n                    sout << \"\\nThe identifier on this line has already been defined in this scope.\";\n                const_cast<std::string&>(info) = sout.str();\n            }\n        public:\n            const unsigned long line_number;\n            const bool redefinition;\n        };\n\n        class file_not_found : public dlib::error \n        {\n            friend class config_reader_kernel_1;\n            file_not_found(\n                const std::string& file_name_\n            ) : \n                dlib::error(ECONFIG_READER, \"Error in config_reader, unable to open file \" + file_name_),\n                file_name(file_name_)\n            {}\n\n            ~file_not_found() throw() {}\n\n        public:\n            const std::string file_name;\n        };\n\n        class config_reader_access_error : public dlib::error\n        {\n        public:\n            config_reader_access_error(\n                const std::string& block_name_,\n                const std::string& key_name_\n            ) : \n                dlib::error(ECONFIG_READER),\n                block_name(block_name_), \n                key_name(key_name_)\n            {\n                std::ostringstream sout;\n                sout << \"Error in config_reader.\\n\";\n                if (block_name.size() > 0)\n                    sout << \"   A block with the name '\" << block_name << \"' was expected but not found.\";\n                else if (key_name.size() > 0)\n                    sout << \"   A key with the name '\" << key_name << \"' was expected but not found.\";\n\n                const_cast<std::string&>(info) = sout.str();\n            }\n\n            ~config_reader_access_error() throw() {}\n            const std::string block_name;\n            const std::string key_name;\n        };\n\n        config_reader_kernel_1(\n            const std::string& config_file \n        );\n\n        config_reader_kernel_1(\n            std::istream& in\n        );\n\n        virtual ~config_reader_kernel_1(\n        ); \n\n        void clear (\n        );\n\n        void load_from (\n            std::istream& in\n        );\n\n        void load_from (\n            const std::string& config_file\n        );\n\n        bool is_key_defined (\n            const std::string& key\n        ) const;\n\n        bool is_block_defined (\n            const std::string& name\n        ) const;\n\n        typedef config_reader_kernel_1 this_type;\n        const this_type& block (\n            const std::string& name\n        ) const;\n\n        const std::string& operator[] (\n            const std::string& key\n        ) const;\n\n        template <\n            typename queue_of_strings\n            >\n        void get_keys (\n            queue_of_strings& keys\n        ) const;\n\n        template <\n            typename alloc \n            >\n        void get_keys (\n            std::vector<std::string,alloc>& keys\n        ) const;\n\n        template <\n            typename alloc \n            >\n        void get_keys (\n            std_vector_c<std::string,alloc>& keys\n        ) const;\n\n        template <\n            typename queue_of_strings\n            >\n        void get_blocks (\n            queue_of_strings& blocks\n        ) const;\n\n        template <\n            typename alloc \n            >\n        void get_blocks (\n            std::vector<std::string,alloc>& blocks\n        ) const;\n\n        template <\n            typename alloc \n            >\n        void get_blocks (\n            std_vector_c<std::string,alloc>& blocks\n        ) const;\n\n    private:\n\n        static void parse_config_file (\n            config_reader_kernel_1& cr,\n            tokenizer& tok,\n            unsigned long& line_number,\n            const bool top_of_recursion = true\n        );\n        /*!\n            requires\n                - line_number == 1\n                - cr == *this\n                - top_of_recursion == true\n            ensures\n                - parses the data coming from tok and puts it into cr.\n            throws\n                - config_reader_error\n        !*/\n\n        map_string_string key_table;\n        map_string_void block_table;\n\n        // restricted functions\n        config_reader_kernel_1(config_reader_kernel_1&);     \n        config_reader_kernel_1& operator=(config_reader_kernel_1&);\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    config_reader_kernel_1(\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    clear(\n    )\n    {\n        // free all our blocks\n        block_table.reset();\n        while (block_table.move_next())\n        {\n            delete static_cast<config_reader_kernel_1*>(block_table.element().value());\n        }\n        block_table.clear();\n        key_table.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    load_from(\n        std::istream& in\n    )\n    {\n        clear();\n\n        tokenizer tok;\n        tok.set_stream(in);\n        tok.set_identifier_token(\n            tok.lowercase_letters() + tok.uppercase_letters(),\n            tok.lowercase_letters() + tok.uppercase_letters() + tok.numbers() + \"_-.\"\n        );\n\n        unsigned long line_number = 1;\n        try\n        {\n            parse_config_file(*this,tok,line_number);\n        }\n        catch (...)\n        {\n            clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    load_from(\n        const std::string& config_file\n    )\n    {\n        clear();\n        std::ifstream fin(config_file.c_str());\n        if (!fin)\n            throw file_not_found(config_file);\n\n        load_from(fin);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    config_reader_kernel_1(\n        std::istream& in\n    )\n    {\n        load_from(in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    config_reader_kernel_1(\n        const std::string& config_file\n    )\n    {\n        load_from(config_file);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    parse_config_file(\n        config_reader_kernel_1<map_string_string,map_string_void,tokenizer>& cr,\n        tokenizer& tok,\n        unsigned long& line_number,\n        const bool top_of_recursion\n    )\n    {\n        int type;\n        std::string token;\n        bool in_comment = false;\n        bool seen_identifier = false;\n        std::string identifier;\n        while (true)\n        {\n            tok.get_token(type,token);\n            // ignore white space\n            if (type == tokenizer::WHITE_SPACE)\n                continue;\n\n            // basically ignore end of lines\n            if (type == tokenizer::END_OF_LINE)\n            {\n                ++line_number;\n                in_comment = false;\n                continue;\n            }\n\n            // we are in a comment still so ignore this\n            if (in_comment)\n                continue;\n\n            // if this is the start of a comment\n            if (type == tokenizer::CHAR && token[0] == '#')\n            {\n                in_comment = true;\n                continue;\n            }\n\n            // if this is the case then we have just finished parsing a block so we should\n            // quit this function\n            if ( (type == tokenizer::CHAR && token[0] == '}' && !top_of_recursion) ||\n                 (type == tokenizer::END_OF_FILE && top_of_recursion) )\n            {\n                break;\n            }\n\n            if (seen_identifier)\n            {\n                seen_identifier = false;\n                // the next character should be either a '=' or a '{'\n                if (type != tokenizer::CHAR || (token[0] != '=' && token[0] != '{'))\n                    throw config_reader_error(line_number);\n                \n                if (token[0] == '=')\n                {\n                    // we should parse the value out now\n                    // first discard any white space\n                    if (tok.peek_type() == tokenizer::WHITE_SPACE)\n                        tok.get_token(type,token);\n\n                    std::string value;\n                    type = tok.peek_type();\n                    token = tok.peek_token();\n                    while (true)\n                    {\n                        if (type == tokenizer::END_OF_FILE || type == tokenizer::END_OF_LINE)\n                            break;\n\n                        if (type == tokenizer::CHAR && token[0] == '\\\\')\n                        {\n                            tok.get_token(type,token);\n                            if (tok.peek_type() == tokenizer::CHAR && \n                                tok.peek_token()[0] == '#')\n                            {\n                                tok.get_token(type,token);\n                                value += '#';\n                            }\n                            else if (tok.peek_type() == tokenizer::CHAR && \n                                tok.peek_token()[0] == '}')\n                            {\n                                tok.get_token(type,token);\n                                value += '}';\n                            }\n                            else\n                            {\n                                value += '\\\\';\n                            }\n                        }\n                        else if (type == tokenizer::CHAR && \n                                 (token[0] == '#' || token[0] == '}'))\n                        {\n                            break;\n                        }\n                        else\n                        {\n                            value += token;\n                            tok.get_token(type,token);\n                        }\n                        type = tok.peek_type();\n                        token = tok.peek_token();\n                    } // while(true)\n\n                    // strip of any tailing white space from value\n                    std::string::size_type pos = value.find_last_not_of(\" \\t\\r\\n\");\n                    if (pos == std::string::npos)\n                        value.clear();\n                    else\n                        value.erase(pos+1);\n\n                    // make sure this key isn't already in the key_table\n                    if (cr.key_table.is_in_domain(identifier))\n                        throw config_reader_error(line_number,true);\n\n                    // add this key/value pair to the key_table\n                    cr.key_table.add(identifier,value);\n\n                }\n                else  // when token[0] == '{'\n                {\n                    // make sure this identifier isn't already in the block_table\n                    if (cr.block_table.is_in_domain(identifier))\n                        throw config_reader_error(line_number,true);\n\n                    config_reader_kernel_1* new_cr = new config_reader_kernel_1;\n                    void* vtemp = new_cr;\n                    try { cr.block_table.add(identifier,vtemp); }\n                    catch (...) { delete new_cr; throw; }\n\n                    // now parse this block \n                    parse_config_file(*new_cr,tok,line_number,false);\n                }\n            }\n            else\n            {\n                // the next thing should be an identifier but if it isn't this is an error\n                if (type != tokenizer::IDENTIFIER)\n                    throw config_reader_error(line_number);\n\n                seen_identifier = true;\n                identifier = token;\n            }\n        } // while (true) \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    ~config_reader_kernel_1(\n    ) \n    {\n        clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    bool config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    is_key_defined (\n        const std::string& key\n    ) const\n    {\n        return key_table.is_in_domain(key);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    bool config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    is_block_defined (\n        const std::string& name\n    ) const\n    {\n        return block_table.is_in_domain(name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename mss,\n        typename msv,\n        typename tokenizer\n        >\n    const config_reader_kernel_1<mss,msv,tokenizer>& config_reader_kernel_1<mss,msv,tokenizer>::\n    block (\n        const std::string& name\n    ) const\n    {\n        if (is_block_defined(name) == false)\n        {\n            throw config_reader_access_error(name,\"\");\n        }\n\n        return *static_cast<config_reader_kernel_1*>(block_table[name]);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    const std::string& config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    operator[] (\n        const std::string& key\n    ) const\n    {\n        if (is_key_defined(key) == false)\n        {\n            throw config_reader_access_error(\"\",key);\n        }\n\n        return key_table[key];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    template <\n        typename queue_of_strings\n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    get_keys (\n        queue_of_strings& keys\n    ) const\n    {\n        keys.clear();\n        key_table.reset();\n        std::string temp;\n        while (key_table.move_next())\n        {\n            temp = key_table.element().key();\n            keys.enqueue(temp);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    template <\n        typename alloc \n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    get_keys (\n        std::vector<std::string,alloc>& keys\n    ) const\n    {\n        keys.clear();\n        key_table.reset();\n        while (key_table.move_next())\n        {\n            keys.push_back(key_table.element().key());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    template <\n        typename alloc \n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    get_keys (\n        std_vector_c<std::string,alloc>& keys\n    ) const\n    {\n        keys.clear();\n        key_table.reset();\n        while (key_table.move_next())\n        {\n            keys.push_back(key_table.element().key());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    template <\n        typename queue_of_strings\n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    get_blocks (\n        queue_of_strings& blocks\n    ) const\n    {\n        blocks.clear();\n        block_table.reset();\n        std::string temp;\n        while (block_table.move_next())\n        {\n            temp = block_table.element().key();\n            blocks.enqueue(temp);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    template <\n        typename alloc \n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    get_blocks (\n        std::vector<std::string,alloc>& blocks\n    ) const\n    {\n        blocks.clear();\n        block_table.reset();\n        while (block_table.move_next())\n        {\n            blocks.push_back(block_table.element().key());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_string_string,\n        typename map_string_void,\n        typename tokenizer\n        >\n    template <\n        typename alloc \n        >\n    void config_reader_kernel_1<map_string_string,map_string_void,tokenizer>::\n    get_blocks (\n        std_vector_c<std::string,alloc>& blocks\n    ) const\n    {\n        blocks.clear();\n        block_table.reset();\n        while (block_table.move_next())\n        {\n            blocks.push_back(block_table.element().key());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CONFIG_READER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/config_reader/config_reader_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CONFIG_READER_KERNEl_ABSTRACT_\n#ifdef DLIB_CONFIG_READER_KERNEl_ABSTRACT_\n\n#include <string>\n#include <iosfwd>\n\nnamespace dlib\n{\n\n    class config_reader \n    {\n\n        /*!                \n            INITIAL VALUE\n                - there aren't any keys defined for this object\n                - there aren't any blocks defined for this object\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                The destructor, clear(), and load_from() invalidate pointers\n                and references to internal data.  All other functions are guaranteed\n                to NOT invalidate pointers or references to internal data.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents something which is intended to be used to read\n                text configuration files that are defined by the following EBNF (with\n                config_file as the starting symbol):\n            \n                config_file    = block;\n                block          = { key_value_pair | sub_block };\n                key_value_pair = key_name, \"=\", value;\n                sub_block      = block_name, \"{\", block, \"}\";\n\n                key_name       = identifier;\n                block_name     = identifier;\n                value          = matches any string of text that ends with a newline character, # or }.  \n                                 note that the trailing newline, # or } is not part of the value though.\n                identifier     = Any string that matches the following regular expression:\n                                 [a-zA-Z][a-zA-Z0-9_-\\.]*\n                                 i.e. Any string that starts with a letter and then is continued\n                                 with any number of letters, numbers, _ . or - characters.\n\n                Whitespace and comments are ignored.  A comment is text that starts with # (but not \\#\n                since the \\ escapes the # so that you can have a # symbol in a value if you want) and \n                ends in a new line.  You can also escape a } (e.g. \"\\}\") if you want to have one in a \n                value.\n\n                Note that in a value the leading and trailing white spaces are stripped off but any \n                white space inside the value is preserved.\n\n                Also note that all key_names and block_names within a block syntax group must be unique \n                but don't have to be globally unique.  I.e. different blocks can reuse names. \n\n                EXAMPLE CONFIG FILES:\n\n                    Example 1:\n                        #comment.  This line is ignored because it starts with #\n\n                        #here we have key1 which will have the value of \"my value\"\n                        key1 = my value \n\n                        another_key=  another value  # this is another key called \"another_key\" with\n                                                     # a value of \"another value\"\n\n                        # this key's value is the empty string.  I.e. \"\"\n                        key2=\n\n                    Example 2:\n                        #this example illustrates the use of blocks\n                        some_key = blah blah\n\n                        # now here is a block\n                        our_block\n                        {\n                            # here we can define some keys and values that are local to this block.\n                            a_key = something\n                            foo = bar\n                            some_key = more stuff  # note that it is ok to name our key this even though\n                                                   # there is a key called some_key above.  This is because\n                                                   # we are doing so inside a different block\n                        }\n\n                        another_block { foo = bar2 }  # this block has only one key and is all on a single line\n        !*/\n    \n    public:\n\n        // exception classes\n        class config_reader_error : public dlib::error \n        {\n            /*!\n                GENERAL\n                    This exception is thrown if there is an error while parsing the\n                    config file.  The type member of this exception will be set\n                    to ECONFIG_READER.\n\n                INTERPRETING THIS EXCEPTION\n                    - line_number == the line number the parser was at when the \n                      error occurred.\n                    - if (redefinition) then\n                        - The key or block name on line line_number has already\n                          been defined in this scope which is an error.\n                    - else\n                        - Some other general syntax error was detected\n            !*/\n        public:\n            const unsigned long line_number;\n            const bool redefinition;\n        };\n\n        class file_not_found : public dlib::error \n        {\n            /*!\n                GENERAL\n                    This exception is thrown if the config file can't be opened for\n                    some reason.  The type member of this exception will be set\n                    to ECONFIG_READER.\n\n                INTERPRETING THIS EXCEPTION\n                    - file_name == the name of the config file which we failed to open\n            !*/\n        public:\n            const std::string file_name;\n        };\n\n\n        class config_reader_access_error : public dlib::error\n        {\n            /*!\n                GENERAL\n                    This exception is thrown if you try to access a key or\n                    block that doesn't exist inside a config reader.  The type \n                    member of this exception will be set to ECONFIG_READER.\n            !*/\n        public:\n            config_reader_access_error(\n                const std::string& block_name_,\n                const std::string& key_name_\n            );\n            /*!\n                ensures\n                    - #block_name == block_name_\n                    - #key_name == key_name_\n            !*/\n\n            const std::string block_name;\n            const std::string key_name;\n        };\n\n    // --------------------------\n\n        config_reader(\n        );\n        /*!\n            ensures \n                - #*this is properly initialized\n                - This object will not have any keys or blocks defined in it.  \n            throws\n                - std::bad_alloc\n                - config_reader_error\n        !*/\n\n        config_reader(\n            std::istream& in\n        );\n        /*!\n            ensures \n                - #*this is properly initialized\n                - reads the config file to parse from the given input stream,\n                  parses it and loads this object up with all the sub blocks and\n                  key/value pairs it finds.\n                - before the load is performed, the previous state of the config file\n                  reader is erased.  So after the load the config file reader will contain\n                  only information from the given config file.\n                - This object will represent the top most block of the config file.\n            throws\n                - std::bad_alloc\n                - config_reader_error\n        !*/\n\n        config_reader(\n            const std::string& config_file \n        );\n        /*!\n            ensures \n                - #*this is properly initialized\n                - parses the config file named by the config_file string.  Specifically, \n                  parses it and loads this object up with all the sub blocks and\n                  key/value pairs it finds in the file.\n                - before the load is performed, the previous state of the config file\n                  reader is erased.  So after the load the config file reader will contain\n                  only information from the given config file.\n                - This object will represent the top most block of the config file.\n            throws\n                - std::bad_alloc\n                - config_reader_error\n                - file_not_found\n        !*/\n\n        virtual ~config_reader(\n        ); \n        /*!\n            ensures\n                - all memory associated with *this has been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc \n                    If this exception is thrown then *this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void load_from (\n            std::istream& in\n        );\n        /*!\n            ensures \n                - reads the config file to parse from the given input stream,\n                  parses it and loads this object up with all the sub blocks and\n                  key/value pairs it finds.\n                - before the load is performed, the previous state of the config file\n                  reader is erased.  So after the load the config file reader will contain\n                  only information from the given config file.\n                - *this will represent the top most block of the config file contained\n                  in the input stream in.\n            throws\n                - std::bad_alloc \n                    If this exception is thrown then *this is unusable \n                    until clear() is called and succeeds\n                - config_reader_error\n                    If this exception is thrown then this object will\n                    revert to its initial value.\n        !*/\n\n        void load_from (\n            const std::string& config_file\n        );\n        /*!\n            ensures \n                - parses the config file named by the config_file string.  Specifically, \n                  parses it and loads this object up with all the sub blocks and\n                  key/value pairs it finds in the file.  \n                - before the load is performed, the previous state of the config file\n                  reader is erased.  So after the load the config file reader will contain\n                  only information from the given config file.\n                - This object will represent the top most block of the config file.\n            throws\n                - std::bad_alloc \n                    If this exception is thrown then *this is unusable \n                    until clear() is called and succeeds\n                - config_reader_error\n                    If this exception is thrown then this object will\n                    revert to its initial value.\n                - file_not_found\n                    If this exception is thrown then this object will\n                    revert to its initial value.\n        !*/\n\n        bool is_key_defined (\n            const std::string& key_name\n        ) const;\n        /*!\n            ensures\n                - if (there is a key with the given name defined within this config_reader's block) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool is_block_defined (\n            const std::string& block_name\n        ) const;\n        /*!\n            ensures\n                - if (there is a sub block with the given name defined within this config_reader's block) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        typedef config_reader this_type;\n        const this_type& block (\n            const std::string& block_name\n        ) const;\n        /*!\n            ensures\n                - if (is_block_defined(block_name) == true) then\n                    - returns a const reference to the config_reader that represents the given named sub block\n                - else\n                    - throws config_reader_access_error\n            throws\n                - config_reader_access_error\n                    if this exception is thrown then its block_name field will be set to the\n                    given block_name string.\n        !*/\n\n        const std::string& operator[] (\n            const std::string& key_name\n        ) const;\n        /*!\n            ensures\n                - if (is_key_defined(key_name) == true) then\n                    - returns a const reference to the value string associated with the given key in \n                      this config_reader's block.\n                - else\n                    - throws config_reader_access_error\n            throws\n                - config_reader_access_error\n                    if this exception is thrown then its key_name field will be set to the\n                    given key_name string.\n        !*/\n\n        template <\n            typename queue_of_strings\n            >\n        void get_keys (\n            queue_of_strings& keys\n        ) const;\n        /*!\n            requires\n                - queue_of_strings is an implementation of queue/queue_kernel_abstract.h \n                  with T set to std::string, or std::vector<std::string>, or \n                  dlib::std_vector_c<std::string>\n            ensures \n                - #keys == a collection containing all the keys defined in this config_reader's block.\n                  (i.e. for all strings str in keys it is the case that is_key_defined(str) == true)\n        !*/\n\n        template <\n            typename queue_of_strings\n            >\n        void get_blocks (\n            queue_of_strings& blocks\n        ) const;\n        /*!\n            requires\n                - queue_of_strings is an implementation of queue/queue_kernel_abstract.h \n                  with T set to std::string, or std::vector<std::string>, or \n                  dlib::std_vector_c<std::string>\n            ensures \n                - #blocks == a collection containing the names of all the blocks defined in this \n                  config_reader's block.\n                  (i.e. for all strings str in blocks it is the case that is_block_defined(str) == true)\n        !*/\n\n    private:\n\n        // restricted functions\n        config_reader(config_reader&);        // copy constructor\n        config_reader& operator=(config_reader&);    // assignment operator\n\n    };\n\n}\n\n#endif // DLIB_CONFIG_READER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/config_reader/config_reader_thread_safe_1.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONFIG_READER_THREAD_SAFe_\n#define DLIB_CONFIG_READER_THREAD_SAFe_\n\n#include \"config_reader_kernel_abstract.h\"\n#include <string>\n#include <iostream>\n#include <sstream>\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../threads.h\"\n#include \"config_reader_thread_safe_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    class config_reader_thread_safe_1 \n    {\n\n        /*!                \n            CONVENTION\n                - get_mutex() == *m\n                - *cr == the config reader being extended\n                - block_table[x] == (void*)&block(x)\n                - block_table.size() == the number of blocks in *cr\n                - block_table[key] == a config_reader_thread_safe_1 that contains &cr.block(key)\n                - if (own_pointers) then\n                    - this object owns the m and cr pointers and should delete them when destructed \n        !*/\n        \n    public:\n\n        config_reader_thread_safe_1 (\n            const config_reader_base* base,\n            rmutex* m_\n        );\n\n        config_reader_thread_safe_1();\n\n        typedef typename config_reader_base::config_reader_error config_reader_error;\n        typedef typename config_reader_base::config_reader_access_error config_reader_access_error;\n\n        config_reader_thread_safe_1(\n            std::istream& in\n        );\n\n        config_reader_thread_safe_1(\n            const std::string& config_file \n        );\n\n        virtual ~config_reader_thread_safe_1(\n        ); \n\n        void clear (\n        );\n\n        void load_from (\n            std::istream& in\n        );\n\n        void load_from (\n            const std::string& config_file \n        );\n\n        bool is_key_defined (\n            const std::string& key\n        ) const;\n\n        bool is_block_defined (\n            const std::string& name\n        ) const;\n\n        typedef config_reader_thread_safe_1 this_type;\n        const this_type& block (\n            const std::string& name\n        ) const;\n\n        const std::string& operator[] (\n            const std::string& key\n        ) const;\n\n        template <\n            typename queue_of_strings\n            >\n        void get_keys (\n            queue_of_strings& keys\n        ) const;\n\n        template <\n            typename queue_of_strings\n            >\n        void get_blocks (\n            queue_of_strings& blocks\n        ) const;\n\n        inline const rmutex& get_mutex (\n        ) const;\n\n    private:\n\n        void fill_block_table (\n        );\n        /*!\n            ensures\n                - block_table.size() == the number of blocks in cr \n                - block_table[key] == a config_reader_thread_safe_1 that contains &cr.block(key)\n        !*/\n\n        rmutex* m;\n        config_reader_base* cr;\n        map_string_void block_table;\n        const bool own_pointers;\n\n        // restricted functions\n        config_reader_thread_safe_1(config_reader_thread_safe_1&);     \n        config_reader_thread_safe_1& operator=(config_reader_thread_safe_1&);\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    config_reader_thread_safe_1(\n        const config_reader_base* base,\n        rmutex* m_\n    ) :\n        m(m_),\n        cr(const_cast<config_reader_base*>(base)),\n        own_pointers(false)\n    {\n        fill_block_table();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    config_reader_thread_safe_1(\n    ) :\n        m(0),\n        cr(0),\n        own_pointers(true)\n    {\n        try\n        {\n            m = new rmutex;\n            cr = new config_reader_base;\n        }\n        catch (...)\n        {\n            if (m) delete m;\n            if (cr) delete cr;\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    void config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    clear(\n    )\n    {\n        auto_mutex M(*m);\n        cr->clear();\n        fill_block_table();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    void config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    load_from(\n        std::istream& in\n    )\n    {\n        auto_mutex M(*m);\n        cr->load_from(in);\n        fill_block_table();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    void config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    load_from(\n        const std::string& config_file\n    )\n    {\n        auto_mutex M(*m);\n        cr->load_from(config_file);\n        fill_block_table();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    config_reader_thread_safe_1(\n        std::istream& in\n    ) :\n        m(0),\n        cr(0),\n        own_pointers(true)\n    {\n        try\n        {\n            m = new rmutex;\n            cr = new config_reader_base(in);\n            fill_block_table();\n        }\n        catch (...)\n        {\n            if (m) delete m;\n            if (cr) delete cr;\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    config_reader_thread_safe_1(\n        const std::string& config_file\n    ) :\n        m(0),\n        cr(0),\n        own_pointers(true)\n    {\n        try\n        {\n            m = new rmutex;\n            cr = new config_reader_base(config_file);\n            fill_block_table();\n        }\n        catch (...)\n        {\n            if (m) delete m;\n            if (cr) delete cr;\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    ~config_reader_thread_safe_1(\n    ) \n    {\n        if (own_pointers)\n        {\n            delete m;\n            delete cr;\n        }\n\n        // clear out the block table\n        block_table.reset();\n        while (block_table.move_next())\n        {\n            delete static_cast<config_reader_thread_safe_1*>(block_table.element().value());\n        }\n        block_table.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    bool config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    is_key_defined (\n        const std::string& key\n    ) const\n    {\n        auto_mutex M(*m);\n        return cr->is_key_defined(key);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    bool config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    is_block_defined (\n        const std::string& name\n    ) const\n    {\n        auto_mutex M(*m);\n        return cr->is_block_defined(name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    const config_reader_thread_safe_1<config_reader_base,map_string_void>& config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    block (\n        const std::string& name\n    ) const\n    {\n        auto_mutex M(*m);\n        if (block_table.is_in_domain(name) == false)\n        {\n            throw config_reader_access_error(name,\"\");\n        }\n\n        return *static_cast<config_reader_thread_safe_1*>(block_table[name]);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    const std::string& config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    operator[] (\n        const std::string& key\n    ) const\n    {\n        auto_mutex M(*m);\n        return (*cr)[key];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    template <\n        typename queue_of_strings\n        >\n    void config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    get_keys (\n        queue_of_strings& keys\n    ) const\n    {\n        auto_mutex M(*m);\n        cr->get_keys(keys);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    template <\n        typename queue_of_strings\n        >\n    void config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    get_blocks (\n        queue_of_strings& blocks\n    ) const\n    {\n        auto_mutex M(*m);\n        cr->get_blocks(blocks);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    const rmutex& config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    get_mutex (\n    ) const\n    {\n        return *m;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//      private member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename config_reader_base,\n        typename map_string_void\n        >\n    void config_reader_thread_safe_1<config_reader_base,map_string_void>::\n    fill_block_table (\n    ) \n    {\n        using namespace std;\n        // first empty out the block table\n        block_table.reset();\n        while (block_table.move_next())\n        {\n            delete static_cast<config_reader_thread_safe_1*>(block_table.element().value());\n        }\n        block_table.clear();\n\n        std::vector<std::string> blocks;\n        cr->get_blocks(blocks);\n\n        // now fill the block table up to match what is in cr\n        for (unsigned long i = 0; i < blocks.size(); ++i)\n        {\n            config_reader_thread_safe_1* block = new config_reader_thread_safe_1(&cr->block(blocks[i]),m);\n            void* temp = block;\n            block_table.add(blocks[i],temp);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CONFIG_READER_THREAD_SAFe_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/config_reader/config_reader_thread_safe_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CONFIG_READER_THREAD_SAFe_ABSTRACT_\n#ifdef DLIB_CONFIG_READER_THREAD_SAFe_ABSTRACT_\n\n#include <string>\n#include <iosfwd>\n#include \"config_reader_kernel_abstract.h\"\n#include \"../threads/threads_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    class config_reader_thread_safe \n    {\n\n        /*!                \n            WHAT THIS EXTENSION DOES FOR config_reader \n                This object extends a normal config_reader by simply wrapping all \n                its member functions inside mutex locks to make it safe to use\n                in a threaded program.  \n\n                So this object provides an interface identical to the one defined\n                in the config_reader/config_reader_kernel_abstract.h file except that\n                the rmutex returned by get_mutex() is always locked when this \n                object's member functions are called.\n        !*/\n    \n    public:\n\n        const rmutex& get_mutex (\n        ) const;\n        /*!\n            ensures\n                - returns the rmutex used to make this object thread safe.  i.e. returns\n                  the rmutex that is locked when this object's functions are called.\n        !*/\n\n    };\n\n}\n\n#endif // DLIB_CONFIG_READER_THREAD_SAFe_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/config_reader.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONFIG_READEr_\n#define DLIB_CONFIG_READEr_\n\n#include \"config_reader/config_reader_kernel_1.h\"\n#include \"map.h\"\n#include \"tokenizer.h\"\n#include \"cmd_line_parser/get_option.h\"\n\n#include \"algs.h\"\n#include \"is_kind.h\"\n\n\nnamespace dlib\n{\n\n    typedef config_reader_kernel_1<\n        map<std::string,std::string>::kernel_1b,\n        map<std::string,void*>::kernel_1b,\n        tokenizer::kernel_1a\n        > config_reader;\n\n    template <> struct is_config_reader<config_reader> { const static bool value = true; };\n\n#ifndef DLIB_ISO_CPP_ONLY\n    typedef config_reader_thread_safe_1<\n        config_reader,\n        map<std::string,void*>::kernel_1b\n        > config_reader_thread_safe;\n\n    template <> struct is_config_reader<config_reader_thread_safe> { const static bool value = true; };\n#endif // DLIB_ISO_CPP_ONLY\n\n\n}\n\n#endif // DLIB_CONFIG_READEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/console_progress_indicator.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CONSOLE_PROGRESS_INDiCATOR_Hh_\n#define DLIB_CONSOLE_PROGRESS_INDiCATOR_Hh_\n\n#include <ctime>\n#include <cmath>\n#include <limits>\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class console_progress_indicator\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for reporting how long a task will take\n                to complete.  \n\n                For example, consider the following bit of code:\n\n                    console_progress_indicator pbar(100)\n                    for (int i = 1; i <= 100; ++i)\n                    {\n                        pbar.print_status(i);\n                        long_running_operation();\n                    }\n\n                The above code will print a message to the console each iteration\n                which shows how much time is remaining until the loop terminates.\n        !*/\n\n    public:\n\n        inline explicit console_progress_indicator (\n            double target_value \n        ); \n        /*!\n            ensures\n                - #target() == target_value\n        !*/\n\n        inline void reset (\n            double target_value\n        );\n        /*!\n            ensures\n                - #target() == target_value\n                - performs the equivalent of:\n                    *this = console_progress_indicator(target_value)\n                    (i.e. resets this object with a new target value)\n\n        !*/\n\n        inline double target (\n        ) const;\n        /*!\n            ensures\n                - This object attempts to measure how much time is\n                  left until we reach a certain targeted value.  This\n                  function returns that targeted value.\n        !*/\n\n        inline bool print_status (\n            double cur\n        );\n        /*!\n            ensures\n                - print_status() assumes it is called with values which are linearly \n                  approaching target().  It will attempt to predict how much time is \n                  remaining until cur becomes equal to target().\n                - prints a status message to the screen which indicates how much\n                  more time is left until cur is equal to target()\n                - This function throttles the printing so that at most 1 message is printed\n                  each second.  Note that it won't print anything to the screen until about\n                  one second has elapsed.  This means that the first call to print_status()\n                  never prints to the screen.\n                - This function returns true if it prints to the screen and false\n                  otherwise. \n        !*/\n\n    private:\n\n        double target_val;\n\n        time_t start_time;\n        double first_val;\n        double seen_first_val;\n        time_t last_time;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                               IMPLEMENTATION DETAILS\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    console_progress_indicator::\n    console_progress_indicator (\n        double target_value \n    ) :\n        target_val(target_value),\n        start_time(0),\n        first_val(0),\n        seen_first_val(false),\n        last_time(0)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool console_progress_indicator::\n    print_status (\n        double cur\n    )\n    {\n        const time_t cur_time = std::time(0);\n\n        // if this is the first time print_status has been called\n        // then collect some information and exit.  We will print status\n        // on the next call.\n        if (!seen_first_val)\n        {\n            start_time = cur_time;\n            last_time = cur_time;\n            first_val = cur;\n            seen_first_val = true;\n            return false;\n        }\n\n        if (cur_time != last_time)\n        {\n            last_time = cur_time;\n            double delta_t = static_cast<double>(cur_time - start_time);\n            double delta_val = std::abs(cur - first_val);\n\n            // don't do anything if cur is equal to first_val\n            if (delta_val < std::numeric_limits<double>::epsilon())\n                return false;\n\n            double seconds = delta_t/delta_val * std::abs(target_val - cur);\n\n            std::ios::fmtflags oldflags = std::cout.flags();  \n            std::cout.flags(); \n            std::cout.setf(std::ios::fixed,std::ios::floatfield);\n            std::streamsize ss;\n\n            if (seconds < 60)\n            {\n                ss = std::cout.precision(0); \n                std::cout << \"Time remaining: \" << seconds << \" seconds.                        \\r\" << std::flush;\n            }\n            else if (seconds < 60*60)\n            {\n                ss = std::cout.precision(2); \n                std::cout << \"Time remaining: \" << seconds/60 << \" minutes.                        \\r\" << std::flush;\n            }\n            else \n            {\n                ss = std::cout.precision(2); \n                std::cout << \"Time remaining: \" << seconds/60/60 << \" hours.                        \\r\" << std::flush;\n            }\n\n            // restore previous output flags and precision settings\n            std::cout.flags(oldflags); \n            std::cout.precision(ss); \n\n            return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double console_progress_indicator::\n    target (\n    ) const\n    {\n        return target_val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void console_progress_indicator::\n    reset (\n        double target_value\n    ) \n    {\n        *this = console_progress_indicator(target_value);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CONSOLE_PROGRESS_INDiCATOR_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cpp_pretty_printer/cpp_pretty_printer_kernel_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CPP_PRETTY_PRINTER_KERNEl_1_\n#define DLIB_CPP_PRETTY_PRINTER_KERNEl_1_\n\n#include <string>\n#include <iostream>\n#include <sstream>\n#include \"cpp_pretty_printer_kernel_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename stack,\n        typename tok\n        >\n    class cpp_pretty_printer_kernel_1 \n    {\n        /*!\n            REQUIREMENTS ON stack\n                must be an implementation of stack/stack_kernel_abstract.h and\n                stack::type == unsigned long\n\n            REQUIREMENTS ON tok\n                must be an implementation of tokenizer/tokenizer_kernel_abstract.h\n\n            INFO\n                This implementation applies a color scheme, turns include directives \n                such as #include \"file.h\" into links to file.h.html, and it also puts \n                HTML anchor points on function and class declarations.\n        !*/\n\n    public:\n\n        cpp_pretty_printer_kernel_1 (        \n        );\n\n        virtual ~cpp_pretty_printer_kernel_1 (\n        );\n\n        void print (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& title\n        ) const;\n\n        void print_and_number (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& title\n        ) const;\n\n    private:\n\n        const std::string htmlify (\n            const std::string& str\n        ) const;\n        /*!\n            ensures\n                - str == str but with any '<' replaced with '&lt;', any '>' replaced\n                  with '&gt;', and any '&' replaced with '&amp;'\n        !*/\n\n        // data members\n        mutable tok t;\n\n        void number (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n        /*!\n            ensures\n                - prints in to out and adds line numbers\n        !*/\n\n        // restricted functions\n        cpp_pretty_printer_kernel_1(const cpp_pretty_printer_kernel_1&);        // copy constructor\n        cpp_pretty_printer_kernel_1& operator=(const cpp_pretty_printer_kernel_1&);    // assignment operator\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    cpp_pretty_printer_kernel_1<stack,tok>::\n    cpp_pretty_printer_kernel_1 (        \n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    cpp_pretty_printer_kernel_1<stack,tok>::\n    ~cpp_pretty_printer_kernel_1 (\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    void cpp_pretty_printer_kernel_1<stack,tok>::\n    print (\n        std::istream& in,\n        std::ostream& out,\n        const std::string& title\n    ) const\n    {\n        using namespace std;\n\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_1::print\");\n\n        t.set_stream(in);\n\n        out << \"<html><!-- \" \n            << \"Created using the cpp_pretty_printer from the dlib C++ library.  See http://dlib.net for updates.\" \n            << \" --><head><title>\" << title << \"</title></head><body bgcolor='white'><pre>\\n\";\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_1::print\");\n\n        unsigned long scope = 0; // counts the number of new scopes we have entered \n                        // since we were at a scope where functions can be declared\n\n        bool recently_seen_class_keyword = false;\n            // true if we have seen the keywords class, struct, or enum and\n            // we have not seen any identifiers or { characters\n\n        bool recently_seen_include = false;\n            // true if we have seen the #include keyword and have not seen double\n            // quoted text or >\n\n        bool recently_seen_new_scope = false;  \n            // true if we have seen the keywords class, namespace, or struct and\n            // we have not seen the characters {, ), or ; since then\n\n        bool recently_seen_paren = false;\n            // true if we have seen a ) and we have only seen white_space or comments since\n\n        bool in_initialization_list = false;\n            // true if we have seen a ) followed by any white space or comments and then\n            // followed by a : (in scope==0 with recently_seen_preprocessor==false) and we \n            // have not yet seen the character { or ;\n\n        bool recently_seen_preprocessor = false;\n            // true if we have seen the #pragma or #if or #define or #elif keywords and have \n            // not seen an end of line.\n\n        bool recently_seen_extern = false;\n            // true if we have seen the extern keyword and haven't seen a ; or { yet.\n\n        unsigned long paren_count = 0; \n            // this is the number of ( we have seen minus the number of ) we have\n            // seen.\n            \n\n        int type;\n        stack scopes; // a stack to hold old scopes\n        string token, temp;\n        t.get_token(type,token);\n        while (type != tok::END_OF_FILE)\n        {\n            switch (type)\n            {\n            case tok::IDENTIFIER: // ------------------------------------------\n                if ( recently_seen_class_keyword)\n                {\n                    // this might be a class name so check if there is a \n                    // ; or identifier or * or & coming up.\n                    type = t.peek_type();\n                    temp.clear();\n                    if (type == tok::WHITE_SPACE)\n                    {\n                        t.get_token(type,temp);\n                        if (temp.find_first_of(\"\\n\\r\") != string::npos)\n                            recently_seen_preprocessor = false;\n                    }\n                    if (t.peek_token() != \";\" && t.peek_type() != tok::IDENTIFIER &&\n                        t.peek_token() != \"*\" && t.peek_token() != \"&\")\n                    {\n                        // this is the name of a class or struct in a class or\n                        // struct declaration.\n                        out << \"<b><a name='\" << token << \"'></a>\" << token << \"</b>\" << temp;\n                    }\n                    else\n                    {\n                        out << token << temp;\n                    }\n                }\n                else if ( !in_initialization_list &&\n                     !recently_seen_preprocessor )\n                {\n                    // this might be a function name so check if there is a \n                    // ( coming up.\n                    type = t.peek_type();\n                    temp.clear();\n                    if (type == tok::WHITE_SPACE)\n                    {\n                        t.get_token(type,temp);\n                        type = t.peek_type();\n                    }\n                    if (type == tok::OTHER && t.peek_token() == \"(\")\n                    {\n                        if (scope == 0 && paren_count == 0)\n                        {\n                            // this is a function definition or prototype\n                            out << \"<b><a name='\" << token << \"'></a>\" << token << \"</b>\" << temp;\n                        }\n                        else\n                        {\n                            // this is a function call (probably) \n                            out << \"<font color='#BB00BB'>\" << token << \"</font>\" << temp;\n                        }\n                    }\n                    else\n                    {\n                        out << token << temp;\n                    }\n                }\n                else\n                {\n                    out << token;\n                }\n                \n\n\n                recently_seen_class_keyword = false;\n                recently_seen_paren = false;\n                break;\n\n            case tok::KEYWORD: // ---------------------------------------------\n                if (scope == 0 && token == \"operator\")\n                {\n                    // Doing this is sort of weird since operator is really a keyword\n                    // but I just like how this looks.\n                    out << \"<b><a name='\" << token << \"'></a>\" << token << \"</b>\";\n                }\n                // this isn't a keyword if it is something like #include <new>\n                else if ( token == \"true\" || token == \"false\")\n                {\n                    // color 'true' and 'false' the same way we color numbers\n                    out << \"<font color='#979000'>\" << token << \"</font>\";\n                }\n                else if (!recently_seen_include) \n                {\n                    // This is a normal keyword\n                    if (token == \"char\" || token == \"unsigned\" || token == \"signed\" ||\n                        token == \"short\" || token == \"int\" || token == \"long\" || \n                        token == \"float\" || token == \"double\" || token == \"bool\" ||\n                        token == \"void\" || token == \"size_t\" || token == \"wchar_t\")\n                    {\n                        out << \"<font color='#0000FF'><u>\" << token << \"</u></font>\";\n                    }\n                    else\n                    {\n                        out << \"<font color='#0000FF'>\" << token << \"</font>\";\n                    }\n                }\n                else\n                {\n                    out << token;\n                }\n\n                if (token == \"#include\") \n                {\n                    recently_seen_include = true;\n                }\n                else if (token == \"class\")\n                {\n                    recently_seen_new_scope = true;\n                    recently_seen_class_keyword = true;\n                }\n                else if (token == \"namespace\")\n                {\n                    recently_seen_new_scope = true;\n                }\n                else if (token == \"enum\")\n                {\n                    recently_seen_class_keyword = true;\n                }\n                else if (token == \"struct\")\n                {\n                    recently_seen_new_scope = true;\n                    recently_seen_class_keyword = true;\n                }\n                else if (token == \"#pragma\" || token == \"#if\" || token == \"#define\" || token == \"#elif\")\n                {\n                    recently_seen_preprocessor = true;\n                }\n                else if (token == \"extern\")\n                {\n                    recently_seen_extern = true;\n                }\n                recently_seen_paren = false;\n                break;\n\n            case tok::COMMENT: // ---------------------------------------------\n                {\n                    // if this is a special anchor comment\n                    if (token.size() > 4 &&\n                        token[0] == '/' &&\n                        token[1] == '*' &&\n                        token[2] == '!' &&\n                        token[3] == 'A' &&\n                        token[4] == ' '\n                    )\n                    {\n                        temp = token;\n                        istringstream sin(token);\n                        sin >> temp;\n                        sin >> temp;\n                        sin.get();\n                        // if there was still more stuff in the token then we are ok.\n                        if (sin)\n                            out << \"<a name='\" << temp << \"'/>\";\n                    }\n                    out << \"<font color='#009900'>\" << htmlify(token) << \"</font>\";\n                }\n                break;\n\n            case tok::SINGLE_QUOTED_TEXT: // ----------------------------------\n                {\n                    out << \"<font color='#FF0000'>\" << htmlify(token) << \"</font>\";\n                    recently_seen_paren = false;\n                }\n                break;\n\n            case tok::NUMBER: // -----------------------------------------\n                {\n                    out << \"<font color='#979000'>\" << token << \"</font>\";\n                    recently_seen_include = false;\n                }\n                break;\n\n            case tok::WHITE_SPACE: // -----------------------------------------\n                {\n                    out << token;\n                    if (token.find_first_of(\"\\n\\r\") != string::npos)\n                        recently_seen_preprocessor = false;\n                }\n                break;\n\n            case tok::DOUBLE_QUOTED_TEXT: // ----------------------------------\n                {\n                    if (recently_seen_include)\n                    {\n                        // this is the name of an included file\n                        recently_seen_include = false;\n                        out << \"<a style='text-decoration:none' href='\" << htmlify(token) << \".html'>\" << htmlify(token) << \"</a>\";                \n                    }\n                    else\n                    {\n                        // this is just a normal quoted string\n                        out << \"<font color='#CC0000'>\" << htmlify(token) << \"</font>\";\n                    }\n                    recently_seen_paren = false;\n                }\n                break;\n\n            case tok::OTHER: // -----------------------------------------------               \n                switch (token[0])\n                {\n                case '{':\n                    out << \"<b>{</b>\";  \n                    // if we are entering a new scope\n                    if (recently_seen_new_scope || recently_seen_extern)\n                    {\n                        recently_seen_new_scope = false;\n                        scopes.push(scope);\n                        scope = 0;\n                    }\n                    else\n                    {\n                        ++scope;\n                    }\n                    in_initialization_list = false;\n                    recently_seen_paren = false;\n                    recently_seen_class_keyword = false;\n                    recently_seen_extern = false;\n                    break;\n                case '}':\n                    out << \"<b>}</b>\";\n                    if (scope > 0)\n                    {\n                        --scope;\n                    }\n                    else if (scopes.size())\n                    {\n                        scopes.pop(scope);\n                    }\n                    recently_seen_paren = false;\n                    break;\n\n                case ':':\n                    out << ':';\n                    if (recently_seen_paren && scope == 0 && \n                        recently_seen_preprocessor == false)\n                    {\n                        in_initialization_list = true;\n                    }\n                    recently_seen_paren = false;\n                    break;\n\n                case ';': \n                    out << ';';\n                    recently_seen_new_scope = false;\n                    recently_seen_paren = false;\n                    recently_seen_extern = false;\n                    break;\n\n                case ')':\n                    out << \"<font face='Lucida Console'>)</font>\";\n                    recently_seen_paren = true;\n                    recently_seen_new_scope = false;\n                    --paren_count;\n                    break;\n\n                case '(':\n                    out << \"<font face='Lucida Console'>(</font>\";\n                    recently_seen_paren = false;\n                    ++paren_count;\n                    break;\n\n                case '>':\n                    recently_seen_include = false;\n                    out << \"<font color='#5555FF'>&gt;</font>\";\n                    recently_seen_paren = false;\n                    break;\n\n                case '<':\n                    out << \"<font color='#5555FF'>&lt;</font>\";\n                    recently_seen_paren = false;\n                    break;\n\n                case '&':\n                    out << \"<font color='#5555FF'>&amp;</font>\";\n                    recently_seen_paren = false;\n                    break;\n\n                case '=':\n                case '+':\n                case '-':\n                case '/':\n                case '*':\n                case '!':\n                case '|':\n                case '%':\n                    out << \"<font color='#5555FF'>\" << token << \"</font>\";\n                    recently_seen_paren = false;\n                    break;\n\n                default:\n                    out << token;\n                    recently_seen_paren = false;\n                    break;\n\n                } // switch (token[0])\n                break;\n\n            } // switch (type)\n\n            t.get_token(type,token);\n        } // while (type != tok::END_OF_FILE)\n\n\n        out << \"\\n</pre></body></html>\";\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_1::print\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    void cpp_pretty_printer_kernel_1<stack,tok>::\n    print_and_number (\n        std::istream& in,\n        std::ostream& out,\n        const std::string& title\n    ) const\n    {\n        using namespace std;\n        ostringstream sout;\n        print(in,sout,title);\n        istringstream sin(sout.str());\n        number(sin,out);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    void cpp_pretty_printer_kernel_1<stack,tok>::\n    number (\n        std::istream& in,\n        std::ostream& out\n    ) const\n    {\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_1::number\");\n\n        std::string space = \"&nbsp;&nbsp;&nbsp;\";\n        std::ios::int_type ch;\n        unsigned long count = 1;\n        while ((ch=in.get()) != EOF)\n        {\n            if (ch != '\\n')\n            {\n                out << (char)ch;    \n            }\n            else\n            {\n                out << \"\\n<font color='555555'>\" << count << \" </font> \" + space;\n                ++count;\n                if (count == 10)\n                    space = \"&nbsp;&nbsp;\";\n                if (count == 100)\n                    space = \"&nbsp;\";\n                if (count == 1000)\n                    space = \"\";            \n            }\n        }\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_1::number\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    const std::string cpp_pretty_printer_kernel_1<stack,tok>::\n    htmlify (\n        const std::string& str\n    ) const\n    {\n        std::string::size_type i;\n        std::string temp;\n        for (i = 0; i < str.size(); ++i)\n        {\n            if (str[i] == '<')\n                temp += \"&lt;\";\n            else if (str[i] == '>')\n                temp += \"&gt;\";\n            else if (str[i] == '&')\n                temp += \"&amp;\";\n            else\n                temp += str[i];\n        }\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CPP_PRETTY_PRINTER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cpp_pretty_printer/cpp_pretty_printer_kernel_2.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CPP_PRETTY_PRINTER_KERNEl_2_\n#define DLIB_CPP_PRETTY_PRINTER_KERNEl_2_\n\n#include <string>\n#include <iostream>\n#include <sstream>\n#include \"cpp_pretty_printer_kernel_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename stack,\n        typename tok\n        >\n    class cpp_pretty_printer_kernel_2 \n    {\n        /*!\n            REQUIREMENTS ON stack\n                must be an implementation of stack/stack_kernel_abstract.h and\n                stack::type == unsigned long\n\n            REQUIREMENTS ON tok\n                must be an implementation of tokenizer/tokenizer_kernel_abstract.h\n\n            INFO\n                This implementation applies a black and white color scheme suitable \n                for printing on a black and white printer.  It also places the document \n                title prominently at the top of the pretty printed source file.\n        !*/\n\n    public:\n\n        cpp_pretty_printer_kernel_2 (        \n        );\n\n        virtual ~cpp_pretty_printer_kernel_2 (\n        );\n\n        void print (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& title\n        ) const;\n\n        void print_and_number (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& title\n        ) const;\n\n    private:\n\n        // data members\n        mutable tok t;\n\n        const std::string htmlify (\n            const std::string& str\n        ) const;\n        /*!\n            ensures\n                - str == str but with any '<' replaced with '&lt;', any '>' replaced\n                  with '&gt;', and any '&' replaced with '&amp;'\n        !*/\n\n        void number (\n            std::istream& in,\n            std::ostream& out\n        ) const;\n        /*!\n            ensures\n                - prints in to out and adds line numbers\n        !*/\n\n        // restricted functions\n        cpp_pretty_printer_kernel_2(const cpp_pretty_printer_kernel_2&);        // copy constructor\n        cpp_pretty_printer_kernel_2& operator=(const cpp_pretty_printer_kernel_2&);    // assignment operator\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    cpp_pretty_printer_kernel_2<stack,tok>::\n    cpp_pretty_printer_kernel_2 (        \n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    cpp_pretty_printer_kernel_2<stack,tok>::\n    ~cpp_pretty_printer_kernel_2 (\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    void cpp_pretty_printer_kernel_2<stack,tok>::\n    print (\n        std::istream& in,\n        std::ostream& out,\n        const std::string& title\n    ) const\n    {\n        using namespace std;\n\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_2::print\");\n\n        t.set_stream(in);\n\n        out << \"<html><!-- \"\n            << \"Created using the cpp_pretty_printer from the dlib C++ library.  See http://dlib.net for updates.\" \n            << \" --><head>\"\n            << \"<title>\" << title << \"</title></head><body bgcolor='white'>\"\n            << \"<h1><center>\" << title << \"</center></h1><pre>\\n\"\n            << \"<font style='font-size:9pt' face='Lucida Console'>\\n\";\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_2::print\");\n\n        unsigned long scope = 0; // counts the number of new scopes we have entered \n                        // since we were at a scope where functions can be declared\n\n        bool recently_seen_class_keyword = false;\n            // true if we have seen the keywords class or struct and\n            // we have not seen any identifiers or { characters\n\n        bool recently_seen_include = false;\n            // true if we have seen the #include keyword and have not seen double\n            // quoted text or >\n\n        bool recently_seen_new_scope = false;  \n            // true if we have seen the keywords class, namespace, or struct and\n            // we have not seen the characters {, ), or ; since then\n\n        bool recently_seen_paren = false;\n            // true if we have seen a ) and we have only seen white_space or comments since\n\n        bool in_initialization_list = false;\n            // true if we have seen a ) followed by any white space or comments and then\n            // followed by a : (in scope==0 with recently_seen_preprocessor==false) and we \n            // have not yet seen the character { or ;\n\n        bool recently_seen_preprocessor = false;\n            // true if we have seen the #pragma or #if or #define or #elif keyword and \n            // have not seen an identifier.\n\n\n        bool recently_seen_extern = false;\n            // true if we have seen the extern keyword and haven't yet seen a \n            // { or ; character.\n\n        unsigned long paren_count = 0; \n            // this is the number of ( we have seen minus the number of ) we have\n            // seen.\n            \n\n        int type;\n        stack scopes; // a stack to hold old scopes\n        string token, temp;\n        t.get_token(type,token);\n        while (type != tok::END_OF_FILE)\n        {\n            switch (type)\n            {\n            case tok::IDENTIFIER: // ------------------------------------------\n                if ( recently_seen_class_keyword)\n                {\n                    // this might be a class name so check if there is a \n                    // ; or identifier or * or &amp; coming up.\n                    type = t.peek_type();\n                    temp.clear();\n                    if (type == tok::WHITE_SPACE)\n                    {\n                        t.get_token(type,temp);\n                        if (temp.find_first_of(\"\\n\\r\") != string::npos)\n                            recently_seen_preprocessor = false;\n                    }\n                    if (t.peek_token() != \";\" && t.peek_type() != tok::IDENTIFIER &&\n                        t.peek_token() != \"*\" && t.peek_token() != \"&amp;\")\n                    {\n                        // this is the name of a class or struct in a class or\n                        // struct declaration.\n                        out << \"<b><i>\" << token << \"</i></b>\" << temp;\n                    }\n                    else\n                    {\n                        out << token << temp;\n                    }\n                }\n                else if ( !in_initialization_list &&\n                     !recently_seen_preprocessor &&\n                     scope == 0 &&\n                     paren_count == 0)\n                {\n                    // this might be a function name so check if there is a \n                    // ( coming up.\n                    type = t.peek_type();\n                    temp.clear();\n                    if (type == tok::WHITE_SPACE)\n                    {\n                        t.get_token(type,temp);\n                        type = t.peek_type();\n                    }\n                    if (type == tok::OTHER && t.peek_token() == \"(\")\n                    {\n                        // this is a function definition or prototype\n                        out << \"<b><i>\" << token << \"</i></b>\" << temp;\n                    }\n                    else\n                    {\n                        out << token << temp;\n                    }\n                }\n                else\n                {\n                    out << token;\n                }\n                \n\n\n                recently_seen_class_keyword = false;\n                recently_seen_paren = false;\n                break;\n\n            case tok::KEYWORD: // ---------------------------------------------\n                if (scope == 0 && token == \"operator\")\n                {\n                    // Doing this is sort of weird since operator is really a keyword\n                    // but I just like how this looks.\n                    out << \"<b><i>\" << token << \"</i></b>\";\n                }\n                // this isn't a keyword if it is something like #include <new>\n                else if (!recently_seen_include) \n                {\n                    // This is a normal keyword\n                    out << \"<u><font face='Fixedsys'>\" << token << \"</font></u>\";\n                }\n                else\n                {\n                    out << token;\n                }\n\n                if (token == \"#include\") \n                {\n                    recently_seen_include = true;\n                }\n                else if (token == \"class\")\n                {\n                    recently_seen_new_scope = true;\n                    recently_seen_class_keyword = true;\n                }\n                else if (token == \"namespace\")\n                {\n                    recently_seen_new_scope = true;\n                }\n                else if (token == \"struct\")\n                {\n                    recently_seen_new_scope = true;\n                    recently_seen_class_keyword = true;\n                }\n                else if (token == \"#pragma\" || token == \"#define\" || token == \"#elif\" || token == \"#if\")\n                {\n                    recently_seen_preprocessor = true;\n                }\n                else if (token == \"extern\")\n                {\n                    recently_seen_extern = true;\n                }\n                recently_seen_paren = false;\n                break;\n\n            case tok::COMMENT: // ---------------------------------------------\n                {\n                    out << \"<font face='Courier New'>\" << htmlify(token) << \"</font>\";\n                }\n                break;\n\n            case tok::SINGLE_QUOTED_TEXT: // ----------------------------------\n                {\n                    out << htmlify(token);\n                    recently_seen_paren = false;\n                }\n                break;\n\n            case tok::WHITE_SPACE: // -----------------------------------------\n                {\n                    out << token;\n                    if (token.find_first_of(\"\\n\\r\") != string::npos)\n                        recently_seen_preprocessor = false;\n                }\n                break;\n\n            case tok::DOUBLE_QUOTED_TEXT: // ----------------------------------\n                {                    \n                    out << htmlify(token);\n                    recently_seen_paren = false;\n                    recently_seen_include = false;\n                }\n                break;\n\n            case tok::NUMBER:\n            case tok::OTHER: // -----------------------------------------------               \n                switch (token[0])\n                {\n                case '{':\n                    out << \"<b>{</b>\";  \n                    // if we are entering a new scope\n                    if (recently_seen_new_scope || recently_seen_extern)\n                    {\n                        recently_seen_new_scope = false;\n                        scopes.push(scope);\n                        scope = 0;\n                    }\n                    else\n                    {\n                        ++scope;\n                    }\n                    in_initialization_list = false;\n                    recently_seen_paren = false;\n                    recently_seen_class_keyword = false;\n                    recently_seen_extern = false;\n                    break;\n                case '}':\n                    out << \"<b>}</b>\";\n                    if (scope > 0)\n                    {\n                        --scope;\n                    }\n                    else if (scopes.size())\n                    {\n                        scopes.pop(scope);\n                    }\n                    recently_seen_paren = false;\n                    break;\n\n                case ':':\n                    out << ':';\n                    if (recently_seen_paren && scope == 0 &&\n                        recently_seen_preprocessor == false)\n                    {\n                        in_initialization_list = true;\n                    }\n                    recently_seen_paren = false;\n                    break;\n\n                case ';': \n                    out << ';';\n                    recently_seen_new_scope = false;\n                    recently_seen_paren = false;\n                    recently_seen_extern = false;\n                    break;\n\n                case ')':\n                    out << ')';\n                    recently_seen_paren = true;\n                    recently_seen_new_scope = false;\n                    --paren_count;\n                    break;\n\n                case '(':\n                    out << '(';\n                    recently_seen_paren = false;\n                    ++paren_count;\n                    break;\n\n                case '>':\n                    recently_seen_include = false;\n                    out << \"&gt;\";\n                    recently_seen_paren = true;\n                    break;\n\n                case '<':\n                    out << \"&lt;\";\n                    recently_seen_paren = true;\n                    break;\n\n                case '&':\n                    out << \"&amp;\";\n                    recently_seen_paren = true;\n                    break;\n\n                default:\n                    out << token;\n                    recently_seen_paren = false;\n                    if (token == \"&gt;\")\n                        recently_seen_include = false;\n                    break;\n\n                } // switch (token[0])\n                break;\n\n            } // switch (type)\n\n            t.get_token(type,token);\n        } // while (type != tok::END_OF_FILE)\n\n\n        out << \"</font></pre></body></html>\";\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_2::print\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    void cpp_pretty_printer_kernel_2<stack,tok>::\n    print_and_number (\n        std::istream& in,\n        std::ostream& out,\n        const std::string& title\n    ) const\n    {\n        using namespace std;\n        ostringstream sout;\n        print(in,sout,title);\n        istringstream sin(sout.str());\n        number(sin,out);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    void cpp_pretty_printer_kernel_2<stack,tok>::\n    number (\n        std::istream& in,\n        std::ostream& out\n    ) const\n    {\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_2::number\");\n\n        std::string space = \"&nbsp;&nbsp;&nbsp;\";\n        std::ios::int_type ch;\n        unsigned long count = 1;\n        while ((ch=in.get()) != EOF)\n        {\n            if (ch != '\\n')\n            {\n                out << (char)ch;    \n            }\n            else\n            {\n                out << \"\\n<i><font face='Courier New'>\" << count << \" </font></i> \" + space;\n                ++count;\n                if (count == 10)\n                    space = \"&nbsp;&nbsp;\";\n                if (count == 100)\n                    space = \"&nbsp;\";\n                if (count == 1000)\n                    space = \"\";            \n            }\n        }\n        if (!out)\n            throw std::ios::failure(\"error occurred in cpp_pretty_printer_kernel_2::number\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack,\n        typename tok\n        >\n    const std::string cpp_pretty_printer_kernel_2<stack,tok>::\n    htmlify (\n        const std::string& str\n    ) const\n    {\n        std::string::size_type i;\n        std::string temp;\n        for (i = 0; i < str.size(); ++i)\n        {\n            if (str[i] == '<')\n                temp += \"&lt;\";\n            else if (str[i] == '>')\n                temp += \"&gt;\";\n            else if (str[i] == '&')\n                temp += \"&amp;\";\n            else\n                temp += str[i];\n        }\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CPP_PRETTY_PRINTER_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cpp_pretty_printer/cpp_pretty_printer_kernel_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CPP_PRETTY_PRINTER_KERNEl_ABSTRACT_\n#ifdef DLIB_CPP_PRETTY_PRINTER_KERNEl_ABSTRACT_\n\n#include <string>\n#include <ioswfd>\n\nnamespace dlib\n{\n\n    class cpp_pretty_printer \n    {\n        /*!\n            INITIAL VALUE\n                This object does not have any state associated with it.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an HTML pretty printer for C++ source code. \n\n        !*/\n\n    public:\n\n        cpp_pretty_printer (        \n        );\n        /*!\n            ensures                \n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~cpp_pretty_printer (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        void print (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& title\n        ) const;\n        /*!\n            ensures\n                - treats data from in as C++ source code and pretty prints it in\n                  HTML and writes it to out.\n                - The title of the HTML document writen to out will be title\n            throws\n                - std::ios_base::failure\n                    If there was a problem writing to out then this exception will \n                    be thrown.                      \n                - any other exception\n                    This exception may be thrown if there is any other problem. \n        !*/\n\n        void print_and_number (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& title\n        ) const;\n        /*!\n            ensures\n                - treats data from in as C++ source code and pretty prints it in\n                  HTML with line numbers and writes it to out.\n                - The title of the HTML document writen to out will be title\n            throws\n                - std::ios_base::failure\n                    If there was a problem writing to out then this exception will \n                    be thrown.                      \n                - any other exception\n                    This exception may be thrown if there is any other problem. \n        !*/\n\n    private:\n\n        // restricted functions\n        cpp_pretty_printer(const cpp_pretty_printer&);        // copy constructor\n        cpp_pretty_printer& operator=(const cpp_pretty_printer&);    // assignment operator\n\n    };    \n\n}\n\n#endif // DLIB_CPP_PRETTY_PRINTER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cpp_pretty_printer.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CPP_PRETTY_PRINTEr_\n#define DLIB_CPP_PRETTY_PRINTEr_\n\n\n#include \"cpp_pretty_printer/cpp_pretty_printer_kernel_1.h\"\n#include \"cpp_pretty_printer/cpp_pretty_printer_kernel_2.h\"\n#include \"cpp_tokenizer.h\"\n#include \"stack.h\"\n\nnamespace dlib\n{\n\n    class cpp_pretty_printer\n    {\n        cpp_pretty_printer() {}\n\n\n        typedef stack<unsigned long>::kernel_1a stack;\n        typedef cpp_tokenizer::kernel_1a tok;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     cpp_pretty_printer_kernel_1<stack,tok>\n                    kernel_1a;\n\n        // kernel_2a        \n        typedef     cpp_pretty_printer_kernel_2<stack,tok>\n                    kernel_2a;\n\n    };\n}\n\n#endif // DLIB_CPP_PRETTY_PRINTEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cpp_tokenizer/cpp_tokenizer_kernel_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CPP_TOKENIZER_KERNEl_1_\n#define DLIB_CPP_TOKENIZER_KERNEl_1_\n\n#include <string>\n#include <iostream>\n#include \"cpp_tokenizer_kernel_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    namespace cpp_tok_kernel_1_helper\n    {\n        struct token_text_pair\n        {\n            std::string token;\n            int type;\n        };        \n\n    }\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    class cpp_tokenizer_kernel_1 \n    {\n        /*!\n            REQUIREMENTS ON tok\n                tok must be an implementation of tokenizer/tokenizer_kernel_abstract.h\n\n            REQUIREMENTS ON queue\n                queue must be an implementation of queue/queue_kernel_abstract.h\n                and must have T==cpp_tok_kernel_1_helper::token_text_pair\n\n            REQUIREMENTS ON set\n                set must be an implemention of set/set_kernel_abstract.h or\n                hash_set/hash_set_kernel_abstract.h and must have T==std::string.\n\n            INITIAL VALUE\n                - keywords == a set of all the C++ keywords\n                - tokenizer.stream_is_set() == false\n                - buffer.size() == 0\n                - tokenizer.get_identifier_head() == \"$_\" + tokenizer.lowercase_letters() + \n                  tokenizer.uppercase_letters()\n                - tokenizer.get_identifier_body() == \"$_\" + tokenizer.lowercase_letters() + \n                  tokenizer.uppercase_letters() + tokenizer.numbers()\n                - have_peeked == false\n\n\n            CONVENTION                  \n                - tokenizer.stream_is_set() == stream_is_set()\n                - tokenizer.get_stream() == get_stream()\n                - keywords == a set of all the C++ keywords\n\n                - tokenizer.get_identifier_head() == \"$_\" + tokenizer.lowercase_letters() + \n                  tokenizer.uppercase_letters()\n                - tokenizer.get_identifier_body() == \"$_\" + tokenizer.lowercase_letters() + \n                  tokenizer.uppercase_letters() + tokenizer.numbers()\n\n                - buffer == a queue of tokens.  This is where we put tokens \n                  we gathered early due to looking ahead.\n\n\n                - if (have_peeked) then\n                    - next_token == the next token to be returned from get_token()\n                    - next_type == the type of token in peek_token\n      !*/\n\n        typedef cpp_tok_kernel_1_helper::token_text_pair token_text_pair;\n\n    public:\n\n        enum \n        {\n            END_OF_FILE,\n            KEYWORD,\n            COMMENT,\n            SINGLE_QUOTED_TEXT,\n            DOUBLE_QUOTED_TEXT,\n            IDENTIFIER,\n            OTHER,\n            NUMBER,\n            WHITE_SPACE\n        };\n\n        cpp_tokenizer_kernel_1 (        \n        );\n\n        virtual ~cpp_tokenizer_kernel_1 (\n        );\n\n        void clear(\n        );\n\n        void set_stream (\n            std::istream& in\n        );\n\n        bool stream_is_set (\n        ) const;\n\n        std::istream& get_stream (\n        ) const;\n\n        void get_token (\n            int& type,\n            std::string& token\n        );\n\n        int peek_type (\n        ) const;\n\n        const std::string& peek_token (\n        ) const;\n\n        void swap (\n            cpp_tokenizer_kernel_1<tok,queue,set>& item\n        );\n\n    private:\n\n        void buffer_token(\n            int type,\n            const std::string& token\n        )\n        /*!\n            ensures\n                - stores the token and its type into buffer\n        !*/\n        {\n            token_text_pair temp;\n            temp.token = token;\n            temp.type = type;\n            buffer.enqueue(temp);\n        }\n\n        void buffer_token(\n            int type,\n            char token\n        )\n        /*!\n            ensures\n                - stores the token and its type into buffer\n        !*/\n        {\n            token_text_pair temp;\n            temp.token = token;\n            temp.type = type;\n            buffer.enqueue(temp);\n        }\n\n        // restricted functions\n        cpp_tokenizer_kernel_1(const cpp_tokenizer_kernel_1<tok,queue,set>&);        // copy constructor\n        cpp_tokenizer_kernel_1<tok,queue,set>& operator=(const cpp_tokenizer_kernel_1<tok,queue,set>&);    // assignment operator\n\n        // data members\n        set keywords;\n        queue buffer;\n        tok tokenizer;\n\n        mutable std::string next_token;\n        mutable int next_type;\n        mutable bool have_peeked;\n\n\n    };    \n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    inline void swap (\n        cpp_tokenizer_kernel_1<tok,queue,set>& a, \n        cpp_tokenizer_kernel_1<tok,queue,set>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    cpp_tokenizer_kernel_1<tok,queue,set>::\n    cpp_tokenizer_kernel_1(        \n    ) :\n        have_peeked(false)\n    {\n        // add C++ keywords to keywords\n        std::string temp;\n        temp = \"#include\";              keywords.add(temp);\n        temp = \"__asm\";                 keywords.add(temp);\n        temp = \"_asm\";                  keywords.add(temp);        \n        temp = \"if\";                    keywords.add(temp);\n        temp = \"int\";                   keywords.add(temp);\n        temp = \"else\";                  keywords.add(temp);\n        temp = \"template\";              keywords.add(temp);\n        temp = \"void\";                  keywords.add(temp);\n        temp = \"false\";                 keywords.add(temp);\n        temp = \"class\";                 keywords.add(temp);\n        temp = \"public\";                keywords.add(temp);\n        temp = \"while\";                 keywords.add(temp);\n        temp = \"bool\";                  keywords.add(temp);\n        temp = \"new\";                   keywords.add(temp);\n        temp = \"delete\";                keywords.add(temp);\n        temp = \"true\";                  keywords.add(temp);\n        temp = \"typedef\";               keywords.add(temp);\n        temp = \"const\";                 keywords.add(temp);\n        temp = \"virtual\";               keywords.add(temp);\n        temp = \"inline\";                keywords.add(temp);\n        temp = \"for\";                   keywords.add(temp);\n        temp = \"break\";                 keywords.add(temp);\n        temp = \"struct\";                keywords.add(temp);\n        temp = \"float\";                 keywords.add(temp);\n        temp = \"case\";                  keywords.add(temp);\n        temp = \"enum\";                  keywords.add(temp);\n        temp = \"this\";                  keywords.add(temp);\n        temp = \"typeid\";                keywords.add(temp);\n        temp = \"double\";                keywords.add(temp);\n        temp = \"char\";                  keywords.add(temp);\n        temp = \"typename\";              keywords.add(temp);\n        temp = \"signed\";                keywords.add(temp);\n        temp = \"friend\";                keywords.add(temp);\n        temp = \"wint_t\";                keywords.add(temp);\n        temp = \"default\";               keywords.add(temp);\n        temp = \"asm\";                   keywords.add(temp);\n        temp = \"reinterpret_cast\";      keywords.add(temp);\n        temp = \"#define\";               keywords.add(temp);\n        temp = \"do\";                    keywords.add(temp);\n        temp = \"continue\";              keywords.add(temp);\n        temp = \"auto\";                  keywords.add(temp);\n        temp = \"unsigned\";              keywords.add(temp);\n        temp = \"size_t\";                keywords.add(temp);\n        temp = \"#undef\";                keywords.add(temp);\n        temp = \"#pragma\";               keywords.add(temp);\n        temp = \"namespace\";             keywords.add(temp);\n        temp = \"private\";               keywords.add(temp);\n        temp = \"#endif\";                keywords.add(temp);\n        temp = \"catch\";                 keywords.add(temp);\n        temp = \"#else\";                 keywords.add(temp);\n        temp = \"register\";              keywords.add(temp);\n        temp = \"volatile\";              keywords.add(temp);\n        temp = \"const_cast\";            keywords.add(temp);\n        temp = \"#end\";                  keywords.add(temp);\n        temp = \"mutable\";               keywords.add(temp);\n        temp = \"static_cast\";           keywords.add(temp);\n        temp = \"wchar_t\";               keywords.add(temp);\n        temp = \"#if\";                   keywords.add(temp);\n        temp = \"protected\";             keywords.add(temp);\n        temp = \"throw\";                 keywords.add(temp);\n        temp = \"using\";                 keywords.add(temp);\n        temp = \"dynamic_cast\";          keywords.add(temp);\n        temp = \"#ifdef\";                keywords.add(temp);\n        temp = \"return\";                keywords.add(temp);\n        temp = \"short\";                 keywords.add(temp);\n        temp = \"#error\";                keywords.add(temp);\n        temp = \"#line\";                 keywords.add(temp);\n        temp = \"explicit\";              keywords.add(temp);\n        temp = \"union\";                 keywords.add(temp);\n        temp = \"#ifndef\";               keywords.add(temp);\n        temp = \"try\";                   keywords.add(temp);\n        temp = \"sizeof\";                keywords.add(temp);\n        temp = \"goto\";                  keywords.add(temp);\n        temp = \"long\";                  keywords.add(temp);\n        temp = \"#elif\";                 keywords.add(temp);\n        temp = \"static\";                keywords.add(temp);\n        temp = \"operator\";              keywords.add(temp);  \n        temp = \"switch\";                keywords.add(temp);\n        temp = \"extern\";                keywords.add(temp);\n\n\n        // set the tokenizer's IDENTIFIER token for C++ identifiers\n        tokenizer.set_identifier_token(\n            \"$_\" + tokenizer.lowercase_letters() + tokenizer.uppercase_letters(),\n            \"$_\" + tokenizer.lowercase_letters() + tokenizer.uppercase_letters() + \n            tokenizer.numbers()\n            );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    cpp_tokenizer_kernel_1<tok,queue,set>::\n    ~cpp_tokenizer_kernel_1 (\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    void cpp_tokenizer_kernel_1<tok,queue,set>::\n    clear(\n    )\n    {\n        tokenizer.clear();\n        buffer.clear();\n        have_peeked = false;\n\n        // set the tokenizer's IDENTIFIER token for C++ identifiers\n        tokenizer.set_identifier_token(\n            \"$_\" + tokenizer.lowercase_letters() + tokenizer.uppercase_letters(),\n            \"$_\" + tokenizer.lowercase_letters() + tokenizer.uppercase_letters() + \n            tokenizer.numbers()\n            );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    void cpp_tokenizer_kernel_1<tok,queue,set>::\n    set_stream (\n        std::istream& in\n    )\n    {\n        tokenizer.set_stream(in);\n        buffer.clear();\n        have_peeked = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    bool cpp_tokenizer_kernel_1<tok,queue,set>::\n    stream_is_set (\n    ) const\n    {\n        return tokenizer.stream_is_set();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    std::istream& cpp_tokenizer_kernel_1<tok,queue,set>::\n    get_stream (\n    ) const\n    {\n        return tokenizer.get_stream();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    void cpp_tokenizer_kernel_1<tok,queue,set>::\n    get_token (\n        int& type,\n        std::string& token\n    )\n    {\n        using namespace std;\n\n        if (!have_peeked)\n        {\n\n            if (buffer.size() > 0)\n            {\n                // just return what is in the buffer\n                token_text_pair temp;\n                buffer.dequeue(temp);\n                type = temp.type;\n                token = temp.token;\n                return;\n            }\n\n            tokenizer.get_token(type,token);\n\n            switch (type)\n            {\n            case tok::END_OF_FILE:\n                {\n                    type = END_OF_FILE;\n                } break;\n\n            case tok::END_OF_LINE:\n            case tok::WHITE_SPACE:\n                {\n                    type = tokenizer.peek_type();\n                    if (type == tok::END_OF_LINE || type == tok::WHITE_SPACE)\n                    {\n                        std::string temp;\n                        do\n                        {\n                            tokenizer.get_token(type,temp);\n                            token += temp;\n                            type = tokenizer.peek_type();\n                        }while (type == tok::END_OF_LINE || type == tok::WHITE_SPACE);\n                    }\n                    type = WHITE_SPACE;\n\n                } break;\n\n            case tok::NUMBER:\n                {\n                    // this could be a hex number such as 0xa33.  we should check for this.\n                    if (tokenizer.peek_type() == tok::IDENTIFIER && token == \"0\" && \n                        (tokenizer.peek_token()[0] == 'x' || tokenizer.peek_token()[0] == 'X'))\n                    {\n                        // this is a hex number so accumulate all the numbers and identifiers that follow\n                        // because they have to be part of the number\n                        std::string temp;\n                        tokenizer.get_token(type,temp);\n                        token = \"0\" + temp; \n\n                        // get the rest of the hex number\n                        while (tokenizer.peek_type() == tok::IDENTIFIER ||\n                               tokenizer.peek_type() == tok::NUMBER\n                               )\n                        {\n                            tokenizer.get_token(type,temp);\n                            token += temp;\n                        }\n\n                    }\n                    // or this could be a floating point value or something with an 'e' or 'E' in it.\n                    else if ((tokenizer.peek_type() == tok::CHAR && tokenizer.peek_token()[0] == '.') ||\n                             (tokenizer.peek_type() == tok::IDENTIFIER && std::tolower(tokenizer.peek_token()[0]) == 'e'))\n                    {\n                        std::string temp;\n                        tokenizer.get_token(type,temp);\n                        token += temp;\n                        // now get the rest of the floating point value\n                        while (tokenizer.peek_type() == tok::IDENTIFIER ||\n                               tokenizer.peek_type() == tok::NUMBER\n                               )\n                        {\n                            tokenizer.get_token(type,temp);\n                            token += temp;\n                        }\n                    }\n                    type = NUMBER;\n\n                } break;\n\n            case tok::IDENTIFIER:\n                {\n                    if (keywords.is_member(token))\n                    {\n                        type = KEYWORD;\n                    }\n                    else\n                    {\n                        type = IDENTIFIER;\n                    }\n                } break;\n\n            case tok::CHAR:            \n                type = OTHER;\n                switch (token[0])\n                {\n                case '#':\n                    {\n                        // this might be a preprocessor keyword so we should check the\n                        // next token\n                        if (tokenizer.peek_type() == tok::IDENTIFIER && \n                            keywords.is_member('#'+tokenizer.peek_token()))\n                        {\n                            tokenizer.get_token(type,token);\n                            token = '#' + token;\n                            type = KEYWORD;\n                        }\n                        else\n                        {\n                            token = '#';\n                            type = OTHER;\n                        }\n                    }\n                    break;\n\n                case '\"':\n                    {\n                        string temp;                    \n                        tokenizer.get_token(type,token);\n                        while (type != tok::END_OF_FILE)\n                        {\n                            // if this is the end of the quoted string\n                            if (type == tok::CHAR && token[0] == '\"' &&\n                                (temp.size() == 0 || temp[temp.size()-1] != '\\\\' ||\n                                (temp.size() > 1 && temp[temp.size()-2] == '\\\\') ))\n                            {\n                                buffer_token(DOUBLE_QUOTED_TEXT,temp);                         \n                                buffer_token(OTHER,\"\\\"\");\n                                break;\n                            }\n                            else\n                            {\n                                temp += token;\n                            }\n                            tokenizer.get_token(type,token);\n                        }\n\n\n                        type = OTHER;\n                        token = '\"';\n                    } break;\n\n                case '\\'':\n                    {\n                        string temp;                    \n                        tokenizer.get_token(type,token);\n                        if (type == tok::CHAR && token[0] == '\\\\')\n                        {\n                            temp += '\\\\';\n                            tokenizer.get_token(type,token);\n                        }\n                        temp += token;\n                        buffer_token(SINGLE_QUOTED_TEXT,temp);\n\n                        // The next character should be a ' so take it out and put it in\n                        // the buffer.\n                        tokenizer.get_token(type,token);\n                        buffer_token(OTHER,token);\n\n                        type = OTHER;\n                        token = '\\'';\n                    } break;\n\n                case '/':\n                    {                \n                        // look ahead to see if this is the start of a comment\n                        if (tokenizer.peek_type() == tok::CHAR)\n                        {\n                            if (tokenizer.peek_token()[0] == '/')\n                            {\n                                tokenizer.get_token(type,token);\n                                // this is the start of a line comment\n                                token = \"//\";\n                                string temp;                    \n                                tokenizer.get_token(type,temp);\n                                while (type != tok::END_OF_FILE)\n                                {\n                                    // if this is the end of the comment\n                                    if (type == tok::END_OF_LINE && \n                                        token[token.size()-1] != '\\\\' )\n                                    {\n                                        token += '\\n';\n                                        break;\n                                    }\n                                    else\n                                    {\n                                        token += temp;\n                                    }\n                                    tokenizer.get_token(type,temp);\n                                }\n                                type = COMMENT;\n\n                            }\n                            else if (tokenizer.peek_token()[0] == '*')\n                            {\n                                tokenizer.get_token(type,token);\n                                // this is the start of a block comment\n                                token = \"/*\";\n                                string temp;                    \n                                tokenizer.get_token(type,temp);\n                                while (type != tok::END_OF_FILE)\n                                {\n                                    // if this is the end of the comment\n                                    if (type == tok::CHAR && temp[0] == '/' &&\n                                        token[token.size()-1] == '*')\n                                    {\n                                        token += '/';\n                                        break;\n                                    }\n                                    else\n                                    {\n                                        token += temp;\n                                    }\n                                    tokenizer.get_token(type,temp);\n                                }  \n                                type = COMMENT;                       \n                            }\n                        }\n                    } break;\n\n                default:\n                    break;\n                } // switch (token[0])\n            } // switch (type)\n        }\n        else\n        {\n            // if we get this far it means we have peeked so we should \n            // return the peek data.\n            type = next_type;\n            token = next_token;\n            have_peeked = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    int cpp_tokenizer_kernel_1<tok,queue,set>::\n    peek_type (\n    ) const\n    {\n        const_cast<cpp_tokenizer_kernel_1<tok,queue,set>*>(this)->get_token(next_type,next_token);\n        have_peeked = true;\n        return next_type;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    const std::string& cpp_tokenizer_kernel_1<tok,queue,set>::\n    peek_token (\n    ) const\n    {\n        const_cast<cpp_tokenizer_kernel_1<tok,queue,set>*>(this)->get_token(next_type,next_token);\n        have_peeked = true;\n        return next_token;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tok,\n        typename queue,\n        typename set\n        >\n    void cpp_tokenizer_kernel_1<tok,queue,set>::\n    swap (\n        cpp_tokenizer_kernel_1& item\n    )\n    {\n        tokenizer.swap(item.tokenizer);\n        buffer.swap(item.buffer);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CPP_TOKENIZER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cpp_tokenizer/cpp_tokenizer_kernel_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CPP_TOKENIZER_KERNEl_ABSTRACT_\n#ifdef DLIB_CPP_TOKENIZER_KERNEl_ABSTRACT_\n\n#include <string>\n#include <ioswfd>\n\nnamespace dlib\n{\n\n    class cpp_tokenizer \n    {\n        /*!\n            INITIAL VALUE\n                stream_is_set() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple tokenizer for C++ source code. \n\n            BUFFERING\n                This object is allowed to buffer data from the input stream.\n                Thus if you clear it or switch streams (via calling set_stream())\n                any buffered data will be lost.\n\n            TOKENS\n                When picking out tokens the cpp_tokenizer will always extract the \n                longest token it can.  For example, if faced with the string \n                \"AAA\" it will consider the three As to be a single IDENTIFIER \n                token not three smaller IDENTIFIER tokens.\n\n                Also note that no characters in the input stream are discarded.\n                They will all be returned in the text of some token.  \n                Additionally, each character will never be returned more than once.  \n                This means that if you concatenated all returned tokens it would exactly\n                reproduce the contents of the input stream.\n\n                The tokens are defined as follows:\n\n                END_OF_FILE\n                    This token represents the end of file.  It doesn't have any\n                    actual characters associated with it.\n\n                KEYWORD\n                    This token matches a C++ keyword.  (This includes the preprocessor\n                    directives).\n\n                COMMENT\n                    This token matches a C++ comment.\n\n                SINGLE_QUOTED_TEXT\n                    This token matches the text of any single quoted literal.\n                    For example, 'a' would be a match and the text of this token\n                    would be the single character a.\n\n                DOUBLE_QUOTED_TEXT  \n                    This token matches the text of any double quoted string.\n                    For example, \"C++\" would be a match and the text of this token\n                    would be the three character string C++.\n\n                WHITE_SPACE\n                    This is a multi character token.  It is defined as a sequence of\n                    one or more spaces, carrage returns, newlines, and tabs.  I.e. It \n                    is composed of characters from the following string \" \\r\\n\\t\".\n\n                IDENTIFIER\n                    This token matches any C++ identifier that isn't matched by any \n                    of the above tokens.   (A C++ identifier being a string matching\n                    the regular expression [_$a-zA-Z][_$a-zA-Z0-9]*).\n\n                NUMBER\n                    This token matches any C++ numerical constant.\n\n                OTHER\n                    This matches anything that isn't part of one of the above tokens. \n                    It is always a single character. \n        !*/\n\n    public:\n\n        enum \n        {\n            END_OF_FILE,\n            KEYWORD,\n            COMMENT,\n            SINGLE_QUOTED_TEXT,\n            DOUBLE_QUOTED_TEXT,\n            IDENTIFIER,\n            OTHER,\n            NUMBER,\n            WHITE_SPACE\n        };\n\n        cpp_tokenizer (        \n        );\n        /*!\n            ensures                \n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~cpp_tokenizer (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc\n                    If this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds.\n        !*/\n\n        void set_stream (\n            std::istream& in\n        );\n        /*!\n            ensures\n                - #*this will read data from in and tokenize it\n                - #stream_is_set() == true\n                - #get_stream() == in\n        !*/\n\n        bool stream_is_set (\n        ) const;\n        /*!\n            ensures\n                - returns true if a stream has been associated with *this by calling\n                  set_stream()\n        !*/\n\n        std::istream& get_stream (\n        ) const;\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - returns a reference to the istream object that *this is reading \n                  from.\n        !*/\n\n        void get_token (\n            int& type,\n            std::string& token\n        );\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - #token == the next token from the input stream get_stream()\n                - #type == the type of the token in #token\n            throws\n                - bad_alloc\n                    If this exception is thrown then the call to this function will \n                    have no effect on *this but the values of #type and #token will be \n                    undefined.  Additionally, some characters may have been read\n                    from the stream get_stream() and lost.\n        !*/\n\n        int peek_type (\n        ) const;\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - returns the type of the token that will be returned from\n                  the next call to get_token()\n            throws\n                - bad_alloc\n                    If this exception is thrown then the call to this function will \n                    have no effect on *this.  However, some characters may have been \n                    read from the stream get_stream() and lost.\n        !*/\n\n        const std::string& peek_token (\n        ) const;\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - returns the text of the token that will be returned from\n                  the next call to get_token()\n            throws\n                - bad_alloc\n                    If this exception is thrown then the call to this function will \n                    have no effect on *this.  However, some characters may have been \n                    read from the stream get_stream() and lost.\n        !*/\n\n        void swap (\n            cpp_tokenizer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    private:\n\n        // restricted functions\n        cpp_tokenizer(const cpp_tokenizer&);        // copy constructor\n        cpp_tokenizer& operator=(const cpp_tokenizer&);    // assignment operator\n\n    };    \n\n    inline void swap (\n        cpp_tokenizer& a, \n        cpp_tokenizer& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_CPP_TOKENIZER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cpp_tokenizer/cpp_tokenizer_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CPP_TOKENIZER_KERNEl_C_\n#define DLIB_CPP_TOKENIZER_KERNEl_C_\n\n#include \"cpp_tokenizer_kernel_abstract.h\"\n#include \"../assert.h\"\n#include <string>\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename tokenizer\n        >\n    class cpp_tokenizer_kernel_c : public tokenizer\n    {\n        \n        public:\n            std::istream& get_stream (\n            ) const;\n\n            void get_token (\n                int& type,\n                std::string& token\n            );\n\n            int peek_type (\n            ) const;\n\n            const std::string& peek_token (\n            ) const;\n\n    };\n\n    template <\n        typename tokenizer\n        >\n    inline void swap (\n        cpp_tokenizer_kernel_c<tokenizer>& a, \n        cpp_tokenizer_kernel_c<tokenizer>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tokenizer\n        >\n    std::istream& cpp_tokenizer_kernel_c<tokenizer>::\n    get_stream (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tstd::istream& cpp_tokenizer::get_stream()\"\n            << \"\\n\\tyou must set a stream for this object before you can get it\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return tokenizer::get_stream();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tokenizer\n        >\n    const std::string& cpp_tokenizer_kernel_c<tokenizer>::\n    peek_token (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tconst std::string& cpp_tokenizer::peek_token()\"\n            << \"\\n\\tyou must set a stream for this object before you can peek at what it contains\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return tokenizer::peek_token();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tokenizer\n        >\n    int cpp_tokenizer_kernel_c<tokenizer>::\n    peek_type (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tint cpp_tokenizer::peek_type()\"\n            << \"\\n\\tyou must set a stream for this object before you can peek at what it contains\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return tokenizer::peek_type();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tokenizer\n        >\n    void cpp_tokenizer_kernel_c<tokenizer>::\n    get_token (\n        int& type,\n        std::string& token\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tvoid cpp_tokenizer::get_token()\"\n            << \"\\n\\tyou must set a stream for this object before you can get tokens from it.\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        tokenizer::get_token(type,token);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TOKENIZER_KERNEl_C_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cpp_tokenizer.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CPP_TOKENIZEr_\n#define DLIB_CPP_TOKENIZEr_\n\n#include <string>\n#include \"cpp_tokenizer/cpp_tokenizer_kernel_1.h\"\n#include \"cpp_tokenizer/cpp_tokenizer_kernel_c.h\"\n#include \"tokenizer.h\"\n#include \"queue.h\"\n#include \"set.h\"\n\nnamespace dlib\n{\n\n    class cpp_tokenizer\n    {\n        cpp_tokenizer() {}\n\n\n        typedef set<std::string>::kernel_1a set;\n        typedef queue<cpp_tok_kernel_1_helper::token_text_pair>::kernel_2a queue;\n        typedef tokenizer::kernel_1a tok;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     cpp_tokenizer_kernel_1<tok,queue,set>\n                    kernel_1a;\n        typedef     cpp_tokenizer_kernel_c<kernel_1a>\n                    kernel_1a_c;\n          \n\n    };\n}\n\n#endif // DLIB_CPP_TOKENIZEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/crc32/crc32_kernel_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CRC32_KERNEl_1_\n#define DLIB_CRC32_KERNEl_1_\n\n#include \"../algs.h\"\n#include <string>\n#include \"crc32_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    class crc32 \n    {\n        /*!\n            INITIAL VALUE\n                checksum == 0xFFFFFFFF\n                table == crc table\n\n            CONVENTION\n                get_checksum() == checksum ^ 0xFFFFFFFF\n                table == crc table\n        !*/\n\n    public:\n\n        // this is here for backwards compatibility with older versions of dlib.\n        typedef crc32 kernel_1a;\n\n        inline crc32 (        \n        );\n\n        inline crc32 (        \n            const std::string& item\n        );\n\n        inline virtual ~crc32 (\n        );\n\n        inline void clear(\n        );\n\n        inline void add (\n            unsigned char item\n        );\n\n        inline void add (\n            const std::string& item\n        );\n\n        inline unsigned long get_checksum (\n        ) const;\n\n        inline void swap (\n            crc32& item\n        );\n\n        inline crc32& operator=(\n            const crc32&\n        );  \n\n    private:\n\n        inline void fill_crc_table(\n        );\n\n        unsigned long checksum;\n        unsigned long table[256];\n\n\n    };    \n\n    inline void swap (\n        crc32& a, \n        crc32& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void crc32::\n    fill_crc_table (\n    )\n    {\n        unsigned long temp;\n\n        // fill out the crc table\n        for (unsigned long i = 0; i < 256; ++i)\n        {\n            temp = i;\n            for (unsigned long j = 0; j < 8; ++j)\n            {\n                if (temp&1)\n                    temp = (temp>>1)^0xedb88320;\n                else\n                    temp >>= 1;\n            }\n            table[i] = temp;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    crc32::\n    crc32 (        \n    )\n    {\n        checksum = 0xFFFFFFFF;\n        fill_crc_table();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    crc32::\n    crc32 (        \n        const std::string& item\n    )\n    {\n        checksum = 0xFFFFFFFF;\n        fill_crc_table();\n        add(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    crc32::\n    ~crc32 (\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void crc32::\n    clear(\n    )\n    {\n        checksum = 0xFFFFFFFF;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void crc32::\n    add (\n        unsigned char item\n    )\n    {\n        checksum = (checksum>>8) ^ table[(checksum^item) & 0xFF];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void crc32::\n    add (\n        const std::string& item\n    )\n    {\n        for (std::string::size_type i = 0; i < item.size(); ++i)\n            checksum = (checksum>>8) ^ table[(checksum^item[i]) & 0xFF];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long crc32::\n    get_checksum (\n    ) const\n    {\n        return checksum ^ 0xFFFFFFFF;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void crc32::\n    swap (\n        crc32& item\n    )\n    {\n        exchange(checksum,item.checksum);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    crc32& crc32::\n    operator=(\n        const crc32& item\n    )\n    {\n        checksum = item.checksum;\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CRC32_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/crc32/crc32_kernel_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CRC32_KERNEl_ABSTRACT_\n#ifdef DLIB_CRC32_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n#include <string>\n\nnamespace dlib\n{\n\n    class crc32 \n    {\n        /*!\n            INITIAL VALUE\n                The current checksum covers zero bytes. \n                get_checksum() == 0x00000000\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents the CRC32 algorithm for calculating\n                checksums.  \n        !*/\n\n    public:\n\n        crc32 (        \n        );\n        /*!\n            ensures                \n                - #*this is properly initialized\n        !*/\n\n        crc32 (        \n            const std::string& item\n        );\n        /*!\n            ensures                \n                - #*this is properly initialized\n                - calls this->add(item).\n                  (i.e. Using this constructor is the same as using the default \n                  constructor and then calling add() on item)\n        !*/\n\n        virtual ~crc32 (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n        !*/\n\n        void add (\n            unsigned char item\n        );\n        /*!\n            ensures\n                - #get_checksum() == The checksum of all items added to *this previously\n                  concatenated with item.\n        !*/\n\n        void add (\n            const std::string& item\n        );\n        /*!\n            ensures\n                - #get_checksum() == The checksum of all items added to *this previously\n                  concatenated with item.\n        !*/\n\n        unsigned long get_checksum (\n        ) const;\n        /*!\n            ensures\n                - returns the current checksum\n        !*/\n\n        void swap (\n            crc32& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    };    \n\n    void swap (\n        crc32& a, \n        crc32& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_CRC32_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/crc32.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CRc32_\n#define DLIB_CRc32_\n\n\n#include \"crc32/crc32_kernel_1.h\"\n\n#endif // DLIB_CRc32_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/cstring",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/data_io/image_dataset_metadata.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGE_DAtASET_METADATA_CPPh_\n#define DLIB_IMAGE_DAtASET_METADATA_CPPh_\n\n#include \"image_dataset_metadata.h\"\n\n#include <fstream>\n#include <sstream>\n#include \"../compress_stream.h\"\n#include \"../base64.h\"\n#include \"../xml_parser.h\"\n#include \"../string.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    namespace image_dataset_metadata\n    {\n\n    // ------------------------------------------------------------------------------------\n\n        const std::string get_decoded_string();\n        void create_image_metadata_stylesheet_file(const std::string& main_filename)\n        {\n            std::string path;\n            std::string::size_type pos = main_filename.find_last_of(\"/\\\\\");\n            if (pos != std::string::npos)\n                path = main_filename.substr(0,pos+1);\n\n            std::ofstream fout((path + \"image_metadata_stylesheet.xsl\").c_str());\n            if (!fout)\n                throw dlib::error(\"ERROR: Unable to open image_metadata_stylesheet.xsl for writing.\");\n\n            fout << get_decoded_string();\n\n            if (!fout)\n                throw dlib::error(\"ERROR: Unable to write to image_metadata_stylesheet.xsl.\");\n        }\n\n        void save_image_dataset_metadata (\n            const dataset& meta,\n            const std::string& filename\n        )\n        {\n            create_image_metadata_stylesheet_file(filename);\n\n            const std::vector<image>& images = meta.images;\n\n            std::ofstream fout(filename.c_str());\n            if (!fout)\n                throw dlib::error(\"ERROR: Unable to open \" + filename + \" for writing.\");\n\n            fout << \"<?xml version='1.0' encoding='ISO-8859-1'?>\\n\";\n            fout << \"<?xml-stylesheet type='text/xsl' href='image_metadata_stylesheet.xsl'?>\\n\";\n            fout << \"<dataset>\\n\";\n            fout << \"<name>\" << meta.name << \"</name>\\n\";\n            fout << \"<comment>\" << meta.comment << \"</comment>\\n\";\n            fout << \"<images>\\n\";\n            for (unsigned long i = 0; i < images.size(); ++i)\n            {\n                fout << \"  <image file='\" << images[i].filename << \"'>\\n\";\n\n                // save all the boxes\n                for (unsigned long j = 0; j < images[i].boxes.size(); ++j)\n                {\n                    const box& b = images[i].boxes[j];\n                    fout << \"    <box top='\" << b.rect.top() << \"' \"\n                                 << \"left='\" << b.rect.left() << \"' \"\n                                << \"width='\" << b.rect.width() << \"' \"\n                               << \"height='\" << b.rect.height() << \"'\";\n                    if (b.difficult)\n                        fout << \" difficult='\" << b.difficult << \"'\";\n                    if (b.truncated)\n                        fout << \" truncated='\" << b.truncated << \"'\";\n                    if (b.occluded)\n                        fout << \" occluded='\" << b.occluded << \"'\";\n                    if (b.ignore)\n                        fout << \" ignore='\" << b.ignore << \"'\";\n                    if (b.angle != 0)\n                        fout << \" angle='\" << b.angle << \"'\";\n\n                    if (b.has_label() || b.parts.size() != 0)\n                    {\n                        fout << \">\\n\";\n\n                        if (b.has_label())\n                            fout << \"      <label>\" << b.label << \"</label>\\n\";\n                        \n                        // save all the parts\n                        std::map<std::string,point>::const_iterator itr;\n                        for (itr = b.parts.begin(); itr != b.parts.end(); ++itr)\n                        {\n                            fout << \"      <part name='\"<< itr->first << \"' x='\"<< itr->second.x() <<\"' y='\"<< itr->second.y() <<\"'/>\\n\";\n                        }\n\n                        fout << \"    </box>\\n\";\n                    }\n                    else\n                    {\n                        fout << \"/>\\n\";\n                    }\n                }\n\n\n\n                fout << \"  </image>\\n\";\n\n                if (!fout)\n                    throw dlib::error(\"ERROR: Unable to write to \" + filename + \".\");\n            }\n            fout << \"</images>\\n\";\n            fout << \"</dataset>\";\n        }\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        class doc_handler : public document_handler\n        {\n            std::vector<std::string> ts;\n            image temp_image;\n            box temp_box;\n\n            dataset& meta;\n\n        public:\n\n            doc_handler(\n                dataset& metadata_\n            ):\n                meta(metadata_) \n            {}\n\n\n            virtual void start_document (\n            )\n            {\n                meta = dataset();\n                ts.clear();\n                temp_image = image();\n                temp_box = box();\n            }\n\n            virtual void end_document (\n            )\n            {\n            }\n\n            virtual void start_element ( \n                const unsigned long line_number,\n                const std::string& name,\n                const dlib::attribute_list& atts\n            )\n            {\n                try\n                {\n                    if (ts.size() == 0) \n                    {\n                        if (name != \"dataset\")\n                        {\n                            std::ostringstream sout;\n                            sout << \"Invalid XML document.  Root tag must be <dataset>.  Found <\" << name << \"> instead.\";\n                            throw dlib::error(sout.str());\n                        }\n                        else\n                        {\n                            ts.push_back(name);\n                            return;\n                        }\n                    }\n\n\n                    if (name == \"box\")\n                    {\n                        if (atts.is_in_list(\"top\")) temp_box.rect.top() = sa = atts[\"top\"];\n                        else throw dlib::error(\"<box> missing required attribute 'top'\");\n\n                        if (atts.is_in_list(\"left\")) temp_box.rect.left() = sa = atts[\"left\"];\n                        else throw dlib::error(\"<box> missing required attribute 'left'\");\n\n                        if (atts.is_in_list(\"width\")) temp_box.rect.right() = sa = atts[\"width\"];\n                        else throw dlib::error(\"<box> missing required attribute 'width'\");\n\n                        if (atts.is_in_list(\"height\")) temp_box.rect.bottom() = sa = atts[\"height\"];\n                        else throw dlib::error(\"<box> missing required attribute 'height'\");\n\n                        if (atts.is_in_list(\"difficult\")) temp_box.difficult = sa = atts[\"difficult\"];\n                        if (atts.is_in_list(\"truncated\")) temp_box.truncated = sa = atts[\"truncated\"];\n                        if (atts.is_in_list(\"occluded\"))  temp_box.occluded  = sa = atts[\"occluded\"];\n                        if (atts.is_in_list(\"ignore\"))  temp_box.ignore  = sa = atts[\"ignore\"];\n                        if (atts.is_in_list(\"angle\"))  temp_box.angle  = sa = atts[\"angle\"];\n\n                        temp_box.rect.bottom() += temp_box.rect.top()-1;\n                        temp_box.rect.right() += temp_box.rect.left()-1;\n                    }\n                    else if (name == \"part\" && ts.back() == \"box\")\n                    {\n                        point temp;\n                        if (atts.is_in_list(\"x\")) temp.x() = sa = atts[\"x\"];\n                        else throw dlib::error(\"<part> missing required attribute 'x'\");\n\n                        if (atts.is_in_list(\"y\")) temp.y() = sa = atts[\"y\"];\n                        else throw dlib::error(\"<part> missing required attribute 'y'\");\n\n                        if (atts.is_in_list(\"name\")) \n                        {\n                            if (temp_box.parts.count(atts[\"name\"])==0)\n                            {\n                                temp_box.parts[atts[\"name\"]] = temp;\n                            }\n                            else\n                            {\n                                throw dlib::error(\"<part> with name '\" + atts[\"name\"] + \"' is defined more than one time in a single box.\");\n                            }\n                        }\n                        else \n                        {\n                            throw dlib::error(\"<part> missing required attribute 'name'\");\n                        }\n                    }\n                    else if (name == \"image\")\n                    {\n                        temp_image.boxes.clear();\n\n                        if (atts.is_in_list(\"file\")) temp_image.filename = atts[\"file\"];\n                        else throw dlib::error(\"<image> missing required attribute 'file'\");\n                    }\n\n                    ts.push_back(name);\n                }\n                catch (error& e)\n                {\n                    throw dlib::error(\"Error on line \" + cast_to_string(line_number) + \": \" + e.what());\n                }\n            }\n\n            virtual void end_element ( \n                const unsigned long ,\n                const std::string& name\n            )\n            {\n                ts.pop_back();\n                if (ts.size() == 0)\n                    return;\n\n                if (name == \"box\" && ts.back() == \"image\")\n                {\n                    temp_image.boxes.push_back(temp_box);\n                    temp_box = box();\n                }\n                else if (name == \"image\" && ts.back() == \"images\")\n                {\n                    meta.images.push_back(temp_image);\n                    temp_image = image();\n                }\n            }\n\n            virtual void characters ( \n                const std::string& data\n            )\n            {\n                if (ts.size() == 2 && ts[1] == \"name\")\n                {\n                    meta.name = trim(data);\n                }\n                else if (ts.size() == 2 && ts[1] == \"comment\")\n                {\n                    meta.comment = trim(data);\n                }\n                else if (ts.size() >= 2 && ts[ts.size()-1] == \"label\" && \n                                           ts[ts.size()-2] == \"box\")\n                {\n                    temp_box.label = trim(data);\n                }\n            }\n\n            virtual void processing_instruction (\n                const unsigned long ,\n                const std::string& ,\n                const std::string& \n            )\n            {\n            }\n        };\n\n    // ----------------------------------------------------------------------------------------\n\n        class xml_error_handler : public error_handler\n        {\n        public:\n            virtual void error (\n                const unsigned long \n            ) { }\n\n            virtual void fatal_error (\n                const unsigned long line_number\n            )\n            {\n                std::ostringstream sout;\n                sout << \"There is a fatal error on line \" << line_number << \" so parsing will now halt.\";\n                throw dlib::error(sout.str());\n            }\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        void load_image_dataset_metadata (\n            dataset& meta,\n            const std::string& filename\n        )\n        {\n            xml_error_handler eh;\n            doc_handler dh(meta);\n\n            std::ifstream fin(filename.c_str());\n            if (!fin)\n                throw dlib::error(\"ERROR: unable to open \" + filename + \" for reading.\");\n\n            xml_parser parser;\n            parser.add_document_handler(dh);\n            parser.add_error_handler(eh);\n            parser.parse(fin);\n        }\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        // This function returns the contents of the file 'images.xsl'\n        const std::string get_decoded_string()\n        {\n            dlib::base64 base64_coder;\n            dlib::compress_stream::kernel_1ea compressor;\n            std::ostringstream sout;\n            std::istringstream sin;\n\n            // The base64 encoded data from the file 'image_metadata_stylesheet.xsl' we want to decode and return.\n            sout << \"PFWfgmWfCHr1DkV63lbjjeY2dCc2FbHDOVh0Kd7dkvaOfRYrOG24f0x77/5iMVq8FtE3UBxtGwSd\";\n            sout << \"1ZHOHRSHgieNoeBv8ssJQ75RRxYtFKRY3OTPX5eKQoCN9jUaUnHnR4QZtEHgmKqXSs50Yrdd+2Ah\";\n            sout << \"gNyarPZCiR6nvqNvCjtP2MP5FxleqNf8Fylatm2KdsXmrv5K87LYVN7i7JMkmZ++cTXYSOxDmxZi\";\n            sout << \"OiCH8funXUdF9apDW547gCjz9HOQUI6dkz5dYUeFjfp6dFugpnaJyyprFLKq048Qk7+QiL4CNF/G\";\n            sout << \"7e0VpBw8dMpiyRNi2fSQGSZGfIAUQKKT6+rPwQoRH2spdjsdXVWj4XQAqBX87nmqMnqjMhn/Vd1s\";\n            sout << \"W5aoC0drwRGu3Xe3gn9vBL8hBkRXcJvEy6q/lb9bYnsLemhE5Zp/+nTmTBjfT9UFYLcsmgsjON9M\";\n            sout << \"gbE5Q8tCa+WXXXsVP1ai5tLU3G1RUjctr/VtV55PKl2xKjjgb4zDldHKrKFQ23NkQR94PFHG25WM\";\n            sout << \"a/VSFVSzLJWdeV/SK3uDq/zUdwQ1JohWp2i+0vJuTXNGCmyT3zHxqtue3HcEw7OpGIDQ+EN0nPCV\";\n            sout << \"90Seu55zuS14zuWdRfXln3/g/hiA7Jj72Ah8Kiz3F3gwCfFbyFaMDYTbT4sda0fDkx1M9sKJ2pN8\";\n            sout << \"3Jd7T8SU+Rk2/oDc8RuTTbFaRvulLWHfdLGPuIJpLT7FUkxGpdlIvxPypjGf0wVA8kgcYGgoKLIX\";\n            sout << \"uUgWFEvqwDJtxvOYVApV2foeOMgfw53TRiFDqwxmaYC41gB32cGgKYuC90mmqGY1MWAD0KLl5+bF\";\n            sout << \"GQiRmckXmDmowK5cxibnB5nTyJX1LmXaqkHFFNGPfidznTHoSqtlAF4wnCyBMuCAdgJgC0AF5gr4\";\n            sout << \"1KNWDg042CVs3li6Nep6G9arGOkEcL7vWamNC9vvkYwOWidjDFqINBxEWGTRQCyG9RDzPX2dckEh\";\n            sout << \"jWYwrXDOFyBNbac16Yym1ftn322+sE+RnaXq9WIoTGnrK/A1paSzdCjpfiIAAizaRnwoa6Ue9xnZ\";\n            sout << \"HvSSQetmzyOErvK6IOWu2VwvqO3aOC28RP63JEztmiT7pF+Zl0NMHVWgW13WejABamVXvjDAlMSA\";\n            sout << \"iBKSBqTuyC0YbuNk14G2MfQE0pg1QrAHhOi9u2KsTRN56381lxxqAhEEGvI/h+ONsveGuuDjXgcy\";\n            sout << \"wvObjIKOawnh820yMrPBzDOx/ExSJtwqbWXBc0MGZxLXA3OgfeKsoaGB/OSB3AznJd40B1ktnmXO\";\n            sout << \"pThos8Tl3Cs6xxFdFhob0vf3ml6WumTtNnAA\";\n\n\n\n            // Put the data into the istream sin\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decode the base64 text into its compressed binary form\n            base64_coder.decode(sin,sout);\n            sin.clear();\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decompress the data into its original form\n            compressor.decompress(sin,sout);\n\n            // Return the decoded and decompressed data\n            return sout.str();\n        }\n\n\n    }\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_IMAGE_DAtASET_METADATA_CPPh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/data_io/image_dataset_metadata.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGE_DAtASET_METADATA_Hh_\n#define DLIB_IMAGE_DAtASET_METADATA_Hh_\n\n#include <string>\n#include <vector>\n#include \"../geometry.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    namespace image_dataset_metadata\n    {\n\n    // ------------------------------------------------------------------------------------\n\n        struct box\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents an annotated rectangular area of an image.  \n                    It is typically used to mark the location of an object such as a \n                    person, car, etc.\n\n                    The main variable of interest is rect.  It gives the location of \n                    the box.  All the other variables are optional.\n            !*/\n\n            box(\n            ) : \n                difficult(false),\n                truncated(false),\n                occluded(false),\n                ignore(false),\n                angle(0)\n            {}\n\n            box (\n                const rectangle& rect_\n            ) : \n                rect(rect_), \n                difficult(false),\n                truncated(false),\n                occluded(false),\n                ignore(false),\n                angle(0)\n            {}\n\n            rectangle rect;\n\n            std::map<std::string,point> parts;\n\n            // optional fields\n            std::string label;\n            bool difficult;\n            bool truncated;\n            bool occluded;\n            bool ignore;\n\n            // The angle of the object in radians.  Positive values indicate that the\n            // object at the center of the box is rotated clockwise by angle radians.  A\n            // value of 0 would indicate that the object is in its \"standard\" upright pose.\n            // Therefore, to make the object appear upright we would have to rotate the\n            // image counter-clockwise by angle radians.\n            double angle; \n\n            bool has_label() const { return label.size() != 0; }\n            /*!\n                ensures\n                    - returns true if label metadata is present and false otherwise.\n            !*/\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        struct image\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents an annotated image.   \n            !*/\n\n            image() {}\n            image(const std::string& f) : filename(f) {}\n\n            std::string filename;\n            std::vector<box> boxes;\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        struct dataset\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents a labeled set of images.  In particular, it\n                    contains the filename for each image as well as annotated boxes.\n            !*/\n\n            std::vector<image> images;\n            std::string comment;\n            std::string name;\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        void save_image_dataset_metadata (\n            const dataset& meta,\n            const std::string& filename\n        );\n        /*!\n            ensures\n                - Writes the contents of the meta object to a file with the given\n                  filename.  The file will be in an XML format.\n            throws\n                - dlib::error \n                  This exception is thrown if there is an error which prevents\n                  this function from succeeding.\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        void load_image_dataset_metadata (\n            dataset& meta,\n            const std::string& filename\n        );\n        /*!\n            ensures\n                - Attempts to interpret filename as a file containing XML formatted data\n                  as produced by the save_image_dataset_metadata() function.  Then\n                  meta is loaded with the contents of the file.\n            throws\n                - dlib::error \n                  This exception is thrown if there is an error which prevents\n                  this function from succeeding.\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n    }\n}\n\n// ----------------------------------------------------------------------------------------\n\n#ifdef NO_MAKEFILE\n#include \"image_dataset_metadata.cpp\"\n#endif\n\n#endif // DLIB_IMAGE_DAtASET_METADATA_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/data_io/libsvm_io.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LIBSVM_iO_Hh_\n#define DLIB_LIBSVM_iO_Hh_\n\n#include \"libsvm_io_abstract.h\"\n\n#include <fstream>\n#include <string>\n#include <utility>\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../string.h\"\n#include \"../svm/sparse_vector.h\"\n#include <vector>\n\nnamespace dlib\n{\n    struct sample_data_io_error : public error\n    {\n        sample_data_io_error(const std::string& message): error(message) {}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename sample_type, typename label_type, typename alloc1, typename alloc2>\n    void load_libsvm_formatted_data (\n        const std::string& file_name,\n        std::vector<sample_type, alloc1>& samples,\n        std::vector<label_type, alloc2>& labels\n    )\n    {\n        using namespace std;\n        typedef typename sample_type::value_type pair_type;\n        typedef typename basic_type<typename pair_type::first_type>::type key_type;\n        typedef typename pair_type::second_type value_type;\n\n        // You must use unsigned integral key types in your sparse vectors\n        COMPILE_TIME_ASSERT(is_unsigned_type<key_type>::value);\n\n        samples.clear();\n        labels.clear();\n\n        ifstream fin(file_name.c_str());\n\n        if (!fin)\n            throw sample_data_io_error(\"Unable to open file \" + file_name);\n\n        string line;\n        istringstream sin;\n        key_type key;\n        value_type value;\n        label_type label;\n        sample_type sample;\n        long line_num = 0;\n        while (fin.peek() != EOF)\n        {\n            ++line_num;\n            getline(fin, line);\n\n            string::size_type pos = line.find_first_not_of(\" \\t\\r\\n\");\n\n            // ignore empty lines or comment lines\n            if (pos == string::npos || line[pos] == '#')\n                continue;\n\n            sin.clear();\n            sin.str(line);\n            sample.clear();\n\n            sin >> label;\n\n            if (!sin)\n                throw sample_data_io_error(\"On line: \" + cast_to_string(line_num) + \", error while reading file \" + file_name );\n\n            // eat whitespace\n            sin >> ws;\n\n            while (sin.peek() != EOF && sin.peek() != '#')\n            {\n\n                sin >> key >> ws;\n\n                // ignore what should be a : character\n                if (sin.get() != ':')\n                    throw sample_data_io_error(\"On line: \" + cast_to_string(line_num) + \", error while reading file \" + file_name);\n\n                sin >> value >> ws;\n\n                if (sin && value != 0)\n                {\n                    sample.insert(sample.end(), make_pair(key, value));\n                }\n            }\n\n            samples.push_back(sample);\n            labels.push_back(label);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename sample_type, typename alloc>\n    typename enable_if<is_const_type<typename sample_type::value_type::first_type> >::type \n    fix_nonzero_indexing (\n        std::vector<sample_type,alloc>& samples\n    )\n    {\n        typedef typename sample_type::value_type pair_type;\n        typedef typename basic_type<typename pair_type::first_type>::type key_type;\n\n        if (samples.size() == 0)\n            return;\n\n        // figure out the min index value\n        key_type min_idx = samples[0].begin()->first;\n        for (unsigned long i = 0; i < samples.size(); ++i)\n            min_idx = std::min(min_idx, samples[i].begin()->first);\n\n        // Now adjust all the samples so that their min index value is zero.\n        if (min_idx != 0)\n        {\n            sample_type temp;\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                // copy samples[i] into temp but make sure it has a min index of zero.\n                temp.clear();\n                typename sample_type::iterator j;\n                for (j = samples[i].begin(); j != samples[i].end(); ++j)\n                {\n                    temp.insert(temp.end(), std::make_pair(j->first-min_idx, j->second));\n                }\n\n                // replace the current sample with temp.\n                samples[i].swap(temp);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// If the \"first\" values in the std::pair objects are not const then we can modify them \n// directly and that is what this version of fix_nonzero_indexing() does.\n    template <typename sample_type, typename alloc>\n    typename disable_if<is_const_type<typename sample_type::value_type::first_type> >::type \n    fix_nonzero_indexing (\n        std::vector<sample_type,alloc>& samples\n    )\n    {\n        typedef typename sample_type::value_type pair_type;\n        typedef typename basic_type<typename pair_type::first_type>::type key_type;\n\n        if (samples.size() == 0)\n            return;\n\n        // figure out the min index value\n        key_type min_idx = samples[0].begin()->first;\n        for (unsigned long i = 0; i < samples.size(); ++i)\n            min_idx = std::min(min_idx, samples[i].begin()->first);\n\n        // Now adjust all the samples so that their min index value is zero.\n        if (min_idx != 0)\n        {\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                typename sample_type::iterator j;\n                for (j = samples[i].begin(); j != samples[i].end(); ++j)\n                {\n                    j->first -= min_idx;\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n// This is an overload for sparse vectors\n    template <typename sample_type, typename label_type, typename alloc1, typename alloc2>\n    typename disable_if<is_matrix<sample_type>,void>::type save_libsvm_formatted_data (\n        const std::string& file_name,\n        const std::vector<sample_type, alloc1>& samples,\n        const std::vector<label_type, alloc2>& labels\n    )\n    {\n        typedef typename sample_type::value_type pair_type;\n        typedef typename basic_type<typename pair_type::first_type>::type key_type;\n\n        // You must use unsigned integral key types in your sparse vectors\n        COMPILE_TIME_ASSERT(is_unsigned_type<key_type>::value);\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(samples.size() == labels.size(),\n            \"\\t void save_libsvm_formatted_data()\"\n            << \"\\n\\t You have to have labels for each sample and vice versa\"\n            << \"\\n\\t samples.size(): \" << samples.size()\n            << \"\\n\\t labels.size():  \" << labels.size()\n            );\n\n\n        using namespace std;\n        ofstream fout(file_name.c_str());\n        fout.precision(14);\n\n        if (!fout)\n            throw sample_data_io_error(\"Unable to open file \" + file_name);\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            fout << labels[i];\n\n            for (typename sample_type::const_iterator j = samples[i].begin(); j != samples[i].end(); ++j)\n            {\n                if (j->second != 0)\n                    fout << \" \" << j->first << \":\" << j->second;\n            }\n            fout << \"\\n\";\n\n            if (!fout)\n                throw sample_data_io_error(\"Error while writing to file \" + file_name);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// This is an overload for dense vectors\n    template <typename sample_type, typename label_type, typename alloc1, typename alloc2>\n    typename enable_if<is_matrix<sample_type>,void>::type save_libsvm_formatted_data (\n        const std::string& file_name,\n        const std::vector<sample_type, alloc1>& samples,\n        const std::vector<label_type, alloc2>& labels\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(samples.size() == labels.size(),\n            \"\\t void save_libsvm_formatted_data()\"\n            << \"\\n\\t You have to have labels for each sample and vice versa\"\n            << \"\\n\\t samples.size(): \" << samples.size()\n            << \"\\n\\t labels.size():  \" << labels.size()\n            );\n\n        using namespace std;\n        ofstream fout(file_name.c_str());\n        fout.precision(14);\n\n        if (!fout)\n            throw sample_data_io_error(\"Unable to open file \" + file_name);\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            fout << labels[i];\n\n            for (long j = 0; j < samples[i].size(); ++j)\n            {\n                if (samples[i](j) != 0)\n                    fout << \" \" << j << \":\" << samples[i](j);\n            }\n            fout << \"\\n\";\n\n            if (!fout)\n                throw sample_data_io_error(\"Error while writing to file \" + file_name);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LIBSVM_iO_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/data_io/libsvm_io_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LIBSVM_iO_ABSTRACT_Hh_\n#ifdef DLIB_LIBSVM_iO_ABSTRACT_Hh_\n\n#include <fstream>\n#include <string>\n#include <utility>\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include <vector>\n\nnamespace dlib\n{\n    struct sample_data_io_error : public error\n    {\n        /*!\n            This is the exception class used by the file IO functions defined below.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type, \n        typename label_type, \n        typename alloc1, \n        typename alloc2\n        >\n    void load_libsvm_formatted_data (\n        const std::string& file_name,\n        std::vector<sample_type, alloc1>& samples,\n        std::vector<label_type, alloc2>& labels\n    );\n    /*!\n        requires\n            - sample_type must be an STL container\n            - sample_type::value_type == std::pair<T,U> where T is some kind of \n              unsigned integral type\n        ensures\n            - attempts to read a file of the given name that should contain libsvm\n              formatted data.  We turn the data into sparse vectors and store it\n              in samples\n            - #labels.size() == #samples.size()\n            - for all valid i: #labels[i] is the label for #samples[i]\n        throws\n            - sample_data_io_error\n                This exception is thrown if there is any problem loading data from file\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type,\n        typename label_type,\n        typename alloc1,\n        typename alloc2\n        >\n    void save_libsvm_formatted_data (\n        const std::string& file_name,\n        const std::vector<sample_type, alloc1>& samples,\n        const std::vector<label_type, alloc2>& labels\n    );\n    /*!\n        requires\n            - sample_type must be an STL container\n            - sample_type::value_type == std::pair<T,U> where T is some kind of \n              unsigned integral type\n            - samples.size() == labels.size()\n        ensures\n            - saves the data to the given file in libsvm format\n        throws\n            - sample_data_io_error\n                This exception is thrown if there is any problem saving data to file\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type, \n        typename label_type, \n        typename alloc1, \n        typename alloc2\n        >\n    void save_libsvm_formatted_data (\n        const std::string& file_name,\n        const std::vector<sample_type, alloc1>& samples,\n        const std::vector<label_type, alloc2>& labels\n    );\n    /*!\n        requires\n            - sample_type == a dense matrix (i.e. dlib::matrix)\n            - for all valid i: is_vector(samples[i]) == true\n            - samples.size() == labels.size()\n        ensures\n            - saves the data to the given file in libsvm format\n        throws\n            - sample_data_io_error\n                This exception is thrown if there is any problem saving data to file\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename sample_type, typename alloc>\n    void fix_nonzero_indexing (\n        std::vector<sample_type,alloc>& samples\n    );\n    /*!\n        requires\n            - samples must only contain valid sparse vectors.  The definition of\n              a sparse vector can be found at the top of dlib/svm/sparse_vector_abstract.h\n        ensures\n            - Adjusts the sparse vectors in samples so that they are zero-indexed.  \n              Or in other words, assume the smallest used index value in any of the sparse \n              vectors is N.  Then this function subtracts N from all the index values in \n              samples.  This is useful, for example, if you load a libsvm formatted datafile \n              with features indexed from 1 rather than 0 and you would like to fix this.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LIBSVM_iO_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/data_io/load_image_dataset.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LOAD_IMAGE_DaTASET_Hh_\n#define DLIB_LOAD_IMAGE_DaTASET_Hh_\n\n#include \"load_image_dataset_abstract.h\"\n#include \"../misc_api.h\"\n#include \"../dir_nav.h\"\n#include \"../image_io.h\"\n#include \"../array.h\"\n#include <vector>\n#include \"../geometry.h\"\n#include \"image_dataset_metadata.h\"\n#include <string>\n#include <set>\n#include \"../image_processing/full_object_detection.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class image_dataset_file\n    {\n    public:\n        image_dataset_file(const std::string& filename)\n        {\n            _skip_empty_images = false;\n            _have_parts = false;\n            _filename = filename;\n        }\n\n        image_dataset_file boxes_match_label(\n            const std::string& label\n        ) const\n        {\n            image_dataset_file temp(*this);\n            temp._labels.insert(label);\n            return temp;\n        }\n\n        image_dataset_file skip_empty_images(\n        ) const\n        {\n            image_dataset_file temp(*this);\n            temp._skip_empty_images = true;\n            return temp;\n        }\n\n        image_dataset_file boxes_have_parts(\n        ) const\n        {\n            image_dataset_file temp(*this);\n            temp._have_parts = true;\n            return temp;\n        }\n\n        bool should_load_box (\n            const image_dataset_metadata::box& box\n        ) const\n        {\n            if (_have_parts && box.parts.size() == 0)\n                return false;\n            if (_labels.size() == 0)\n                return true;\n            if (_labels.count(box.label) != 0)\n                return true;\n            return false;\n        }\n\n        const std::string& get_filename() const { return _filename; }\n        bool should_skip_empty_images() const { return _skip_empty_images; }\n        bool should_boxes_have_parts() const { return _have_parts; }\n        const std::set<std::string>& get_selected_box_labels() const { return _labels; }\n\n    private:\n        std::string _filename;\n        std::set<std::string> _labels;\n        bool _skip_empty_images;\n        bool _have_parts;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<rectangle> >& object_locations,\n        const image_dataset_file& source\n    )\n    {\n        images.clear();\n        object_locations.clear();\n        const std::string old_working_dir = get_current_dir();\n\n        std::vector<std::vector<rectangle> > ignored_rects;\n\n        using namespace dlib::image_dataset_metadata;\n        dataset data;\n        load_image_dataset_metadata(data, source.get_filename());\n\n        // Set the current directory to be the one that contains the\n        // metadata file. We do this because the file might contain\n        // file paths which are relative to this folder.\n        set_current_dir(get_parent_directory(file(source.get_filename())));\n\n\n\n\n        image_type img;\n        std::vector<rectangle> rects, ignored;\n        for (unsigned long i = 0; i < data.images.size(); ++i)\n        {\n            rects.clear();\n            ignored.clear();\n            for (unsigned long j = 0; j < data.images[i].boxes.size(); ++j)\n            {\n                if (source.should_load_box(data.images[i].boxes[j]))\n                {\n                    if (data.images[i].boxes[j].ignore)\n                        ignored.push_back(data.images[i].boxes[j].rect);\n                    else\n                        rects.push_back(data.images[i].boxes[j].rect);\n                }\n            }\n\n            if (!source.should_skip_empty_images() || rects.size() != 0)\n            {\n                object_locations.push_back(rects);\n                ignored_rects.push_back(ignored);\n                load_image(img, data.images[i].filename);\n                images.push_back(img);\n            }\n        }\n\n        set_current_dir(old_working_dir);\n        return ignored_rects;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// ******* THIS FUNCTION IS DEPRECATED, you should use another version of load_image_dataset() *******\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<rectangle> >& object_locations,\n        const std::string& filename,\n        const std::string& label,\n        bool skip_empty_images = false\n    )\n    {\n        image_dataset_file f(filename);\n        if (label.size() != 0)\n            f = f.boxes_match_label(label);\n        if (skip_empty_images)\n            f = f.skip_empty_images();\n        return load_image_dataset(images, object_locations, f);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<rectangle> >& object_locations,\n        const std::string& filename\n    )\n    {\n        return load_image_dataset(images, object_locations, image_dataset_file(filename));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<full_object_detection> >& object_locations,\n        const image_dataset_file& source,\n        std::vector<std::string>& parts_list\n    )\n    {\n        parts_list.clear();\n        images.clear();\n        object_locations.clear();\n        const std::string old_working_dir = get_current_dir();\n\n        using namespace dlib::image_dataset_metadata;\n        dataset data;\n        load_image_dataset_metadata(data, source.get_filename());\n\n        // Set the current directory to be the one that contains the\n        // metadata file. We do this because the file might contain\n        // file paths which are relative to this folder.\n        set_current_dir(get_parent_directory(file(source.get_filename())));\n\n\n        std::set<std::string> all_parts;\n\n        // find out what parts are being used in the dataset.  Store results in all_parts.\n        for (unsigned long i = 0; i < data.images.size(); ++i)\n        {\n            for (unsigned long j = 0; j < data.images[i].boxes.size(); ++j)\n            {\n                if (source.should_load_box(data.images[i].boxes[j]))\n                {\n                    const std::map<std::string,point>& parts = data.images[i].boxes[j].parts;\n                    std::map<std::string,point>::const_iterator itr;\n\n                    for (itr = parts.begin(); itr != parts.end(); ++itr)\n                    {\n                        all_parts.insert(itr->first);\n                    }\n                }\n            }\n        }\n\n        // make a mapping between part names and the integers [0, all_parts.size())\n        std::map<std::string,int> parts_idx;\n        for (std::set<std::string>::iterator i = all_parts.begin(); i != all_parts.end(); ++i)\n        {\n            parts_idx[*i] = parts_list.size();\n            parts_list.push_back(*i);\n        }\n\n        std::vector<std::vector<rectangle> > ignored_rects;\n        std::vector<rectangle> ignored;\n        image_type img;\n        std::vector<full_object_detection> object_dets;\n        for (unsigned long i = 0; i < data.images.size(); ++i)\n        {\n            object_dets.clear();\n            ignored.clear();\n            for (unsigned long j = 0; j < data.images[i].boxes.size(); ++j)\n            {\n                if (source.should_load_box(data.images[i].boxes[j]))\n                {\n                    if (data.images[i].boxes[j].ignore)\n                    {\n                        ignored.push_back(data.images[i].boxes[j].rect);\n                    }\n                    else\n                    {\n                        std::vector<point> partlist(parts_idx.size(), OBJECT_PART_NOT_PRESENT);\n\n                        // populate partlist with all the parts present in this box.\n                        const std::map<std::string,point>& parts = data.images[i].boxes[j].parts;\n                        std::map<std::string,point>::const_iterator itr;\n                        for (itr = parts.begin(); itr != parts.end(); ++itr)\n                        {\n                            partlist[parts_idx[itr->first]] = itr->second;\n                        }\n\n                        object_dets.push_back(full_object_detection(data.images[i].boxes[j].rect, partlist));\n                    }\n                }\n            }\n\n            if (!source.should_skip_empty_images() || object_dets.size() != 0)\n            {\n                object_locations.push_back(object_dets);\n                ignored_rects.push_back(ignored);\n                load_image(img, data.images[i].filename);\n                images.push_back(img);\n            }\n        }\n\n        set_current_dir(old_working_dir);\n\n        return ignored_rects;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<full_object_detection> >& object_locations,\n        const image_dataset_file& source \n    )\n    {\n        std::vector<std::string> parts_list;\n        return load_image_dataset(images, object_locations, source, parts_list);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<full_object_detection> >& object_locations,\n        const std::string& filename\n    )\n    {\n        std::vector<std::string> parts_list;\n        return load_image_dataset(images, object_locations, image_dataset_file(filename), parts_list);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LOAD_IMAGE_DaTASET_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/data_io/load_image_dataset_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LOAD_IMAGE_DaTASET_ABSTRACT_Hh_\n#ifdef DLIB_LOAD_IMAGE_DaTASET_ABSTRACT_Hh_\n\n#include \"image_dataset_metadata.h\"\n#include \"../array/array_kernel_abstract.h\"\n#include <string>\n#include <vector>\n#include \"../image_processing/full_object_detection_abstract.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class image_dataset_file\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool used to tell the load_image_dataset() functions which\n                boxes and images to load from an XML based image dataset file.  By default,\n                this object tells load_image_dataset() to load all images and object boxes.\n        !*/\n\n    public:\n        image_dataset_file(\n            const std::string& filename\n        );\n        /*!\n            ensures\n                - #get_filename() == filename\n                - #should_skip_empty_images() == false\n                - #get_selected_box_labels().size() == 0\n                  This means that, initially, all boxes will be loaded.  Therefore, for all\n                  possible boxes B we have:\n                    - #should_load_box(B) == true\n        !*/\n\n        const std::string& get_filename(\n        ) const;\n        /*!\n            ensures\n                - returns the name of the XML image dataset metadata file given to this\n                  object's constructor.\n        !*/\n        \n        bool should_skip_empty_images(\n        ) const;\n        /*!\n            ensures\n                - returns true if we are supposed to skip images that don't have any boxes\n                  to load when loading an image dataset using load_image_dataset().\n        !*/\n\n        image_dataset_file boxes_match_label(\n            const std::string& label\n        ) const;\n        /*!\n            ensures\n                - returns a copy of *this that is identical in all respects to *this except\n                  that label will be included in the labels set (i.e. the set returned by\n                  get_selected_box_labels()).\n        !*/\n\n        const std::set<std::string>& get_selected_box_labels(\n        ) const;\n        /*!\n            ensures\n                - returns the set of box labels currently selected by the should_load_box()\n                  method.  Note that if the set is empty then we select all boxes.\n        !*/\n\n        image_dataset_file skip_empty_images(\n        ) const;\n        /*!\n            ensures\n                - returns a copy of *this that is identical in all respects to *this except\n                  that #should_skip_empty_images() == true.\n        !*/\n\n        bool should_boxes_have_parts(\n        ) const; \n        /*!\n            ensures\n                - returns true if boxes must have some parts defined for them to be loaded.\n        !*/\n\n        image_dataset_file boxes_have_parts(\n        ) const;\n        /*!\n            ensures\n                - returns a copy of *this that is identical in all respects to *this except\n                  that #should_boxes_have_parts() == true.\n        !*/\n\n        bool should_load_box (\n            const image_dataset_metadata::box& box\n        ) const;\n        /*!\n            ensures\n                - returns true if we are supposed to load the given box from an image\n                  dataset XML file.  In particular, if should_load_box() returns false then\n                  the load_image_dataset() routines will not return the box at all, neither\n                  in the ignore rectangles list or in the primary object_locations vector.\n                  The behavior of this function is defined as follows:\n                    - if (should_boxes_have_parts() && boxes.parts.size() == 0) then\n                        - returns false\n                    - else if (get_selected_box_labels().size() == 0) then\n                        - returns true\n                    - else if (get_selected_box_labels().count(box.label) != 0) then\n                        - returns true\n                    - else\n                        - returns false\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<rectangle> >& object_locations,\n        const image_dataset_file& source\n    );\n    /*!\n        requires\n            - image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_type::type> is defined  \n        ensures\n            - This routine loads the images and their associated object boxes from the\n              image metadata file indicated by source.get_filename().  This metadata file\n              should be in the XML format used by the save_image_dataset_metadata() routine.\n            - #images.size() == The number of images loaded from the metadata file.  This\n              is all the images listed in the file unless source.should_skip_empty_images()\n              is set to true.\n            - #images.size() == #object_locations.size()\n            - This routine is capable of loading any image format which can be read by the\n              load_image() routine.\n            - let IGNORED_RECTS denote the vector returned from this function.\n            - IGNORED_RECTS.size() == #object_locations.size()\n            - IGNORED_RECTS == a list of the rectangles which have the \"ignore\" flag set to\n              true in the input XML file.\n            - for all valid i:  \n                - #images[i] == a copy of the i-th image from the dataset.\n                - #object_locations[i] == a vector of all the rectangles associated with\n                  #images[i].  These are the rectangles for which source.should_load_box()\n                  returns true and are also not marked as \"ignore\" in the XML file.\n                - IGNORED_RECTS[i] == A vector of all the rectangles associated with #images[i] \n                  that are marked as \"ignore\" but not discarded by source.should_load_box().\n                - if (source.should_skip_empty_images() == true) then\n                    - #object_locations[i].size() != 0\n                      (i.e. we won't load images that don't end up having any object locations)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<rectangle> >& object_locations,\n        const std::string& filename\n    );\n    /*!\n        requires\n            - image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_type::type> is defined  \n        ensures\n            - performs: return load_image_dataset(images, object_locations, image_dataset_file(filename));\n              (i.e. it ignores box labels and therefore loads all the boxes in the dataset)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<full_object_detection> >& object_locations,\n        const image_dataset_file& source,\n        std::vector<std::string>& parts_list\n    );\n    /*!\n        requires\n            - image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_type::type> is defined  \n        ensures\n            - This routine loads the images and their associated object locations from the\n              image metadata file indicated by source.get_filename().  This metadata file\n              should be in the XML format used by the save_image_dataset_metadata() routine.\n            - The difference between this function and the version of load_image_dataset()\n              defined above is that this version will also load object part information and\n              thus fully populates the full_object_detection objects.\n            - #images.size() == The number of images loaded from the metadata file.  This\n              is all the images listed in the file unless source.should_skip_empty_images()\n              is set to true.\n            - #images.size() == #object_locations.size()\n            - This routine is capable of loading any image format which can be read\n              by the load_image() routine.\n            - #parts_list == a vector that contains the list of object parts found in the\n              input file and loaded into object_locations.\n            - #parts_list is in lexicographic sorted order.\n            - let IGNORED_RECTS denote the vector returned from this function.\n            - IGNORED_RECTS.size() == #object_locations.size()\n            - IGNORED_RECTS == a list of the rectangles which have the \"ignore\" flag set to\n              true in the input XML file.\n            - for all valid i:  \n                - #images[i] == a copy of the i-th image from the dataset.\n                - #object_locations[i] == a vector of all the rectangles associated with\n                  #images[i].  These are the rectangles for which source.should_load_box()\n                  returns true and are also not marked as \"ignore\" in the XML file.\n                - IGNORED_RECTS[i] == A vector of all the rectangles associated with #images[i] \n                  that are marked as \"ignore\" but not discarded by source.should_load_box().\n                - if (source.should_skip_empty_images() == true) then\n                    - #object_locations[i].size() != 0\n                      (i.e. we won't load images that don't end up having any object locations)\n                - for all valid j:\n                    - #object_locations[i][j].num_parts() == #parts_list.size()\n                    - for all valid k:\n                        - #object_locations[i][j].part(k) == the location of the part\n                          with name #parts_list[k] or OBJECT_PART_NOT_PRESENT if the\n                          part was not indicated for object #object_locations[i][j].\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<full_object_detection> >& object_locations,\n        const image_dataset_file& source \n    );\n    /*!\n        requires\n            - image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_type::type> is defined  \n        ensures\n            - performs: return load_image_dataset(images, object_locations, source, parts_list);\n              (i.e. this function simply calls the above function and discards the output\n              parts_list.  So it is just a convenience function you can call if you don't\n              care about getting the parts list.)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename MM\n        >\n    std::vector<std::vector<rectangle> > load_image_dataset (\n        array<image_type,MM>& images,\n        std::vector<std::vector<full_object_detection> >& object_locations,\n        const std::string& filename\n    );\n    /*!\n        requires\n            - image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_type::type> is defined  \n        ensures\n            - performs: return load_image_dataset(images, object_locations, image_dataset_file(filename));\n              (i.e. it ignores box labels and therefore loads all the boxes in the dataset)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LOAD_IMAGE_DaTASET_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/data_io.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DATA_Io_HEADER\n#define DLIB_DATA_Io_HEADER\n\n#include \"data_io/libsvm_io.h\"\n#include \"data_io/image_dataset_metadata.h\"\n\n#ifndef DLIB_ISO_CPP_ONLY\n#include \"data_io/load_image_dataset.h\"\n#endif\n\n#endif // DLIB_DATA_Io_HEADER\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/dir_nav_extensions.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIR_NAV_EXTENSIONs_CPP_\n#define DLIB_DIR_NAV_EXTENSIONs_CPP_\n\n#include \"dir_nav_extensions.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace implementation_details\n    {\n        void get_all_sub_dirs (\n            const directory& top_of_tree,\n            unsigned long max_depth,\n            std::vector<directory>& result,\n            std::vector<directory>& temp\n        )\n        {\n            if (max_depth > 0)\n            {\n                top_of_tree.get_dirs(temp);\n                const unsigned long start = result.size();\n                result.insert(result.end(), temp.begin(), temp.end());\n                const unsigned long end = start + temp.size();\n\n                for (unsigned long i = start; i < end; ++i)\n                {\n                    get_all_sub_dirs(result[i], max_depth-1, result, temp);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool file_exists (\n        const std::string& filename\n    )\n    {\n        try\n        {\n            dlib::file temp(filename);\n            return true;\n        }\n        catch (file::file_not_found&)\n        {\n            return false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    directory get_parent_directory (\n        const directory& dir\n    )\n    {\n        return dir.get_parent();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    directory get_parent_directory (\n        const file& f\n    )\n    {\n        if (f.full_name().size() == 0)\n            return directory();\n\n        std::string::size_type pos = f.full_name().find_last_of(\"\\\\/\");\n        \n        if (pos == std::string::npos)\n            return directory();\n\n        return directory(f.full_name().substr(0,pos));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DIR_NAV_EXTENSIONs_CPP_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/dir_nav_extensions.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIR_NAV_EXTENSIONs_H_\n#define DLIB_DIR_NAV_EXTENSIONs_H_\n\n#include <string>\n#include <vector>\n#include <algorithm>\n#include \"dir_nav_extensions_abstract.h\"\n#include \"../dir_nav.h\"\n#include \"../string.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    bool file_exists (\n        const std::string& filename\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    namespace implementation_details\n    {\n        void get_all_sub_dirs (\n            const directory& top_of_tree,\n            unsigned long max_depth,\n            std::vector<directory>& result,\n            std::vector<directory>& temp\n        );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    const std::vector<file> get_files_in_directory_tree (\n        const directory& top_of_tree,\n        const T& add_file,\n        unsigned long max_depth = 30\n    )\n    {\n        std::vector<file> result, temp;\n        std::vector<directory> dirs, dirs_temp;\n        dirs.push_back(top_of_tree);\n\n        // get all the directories in the tree first\n        implementation_details::get_all_sub_dirs(top_of_tree, max_depth, dirs, dirs_temp);\n\n        // now just loop over all the directories and pick out the files we want to keep\n        for (unsigned long d = 0; d < dirs.size(); ++d)\n        {\n            dirs[d].get_files(temp);\n\n            // pick out the members of temp that we should keep\n            for (unsigned long i = 0; i < temp.size(); ++i)\n            {\n                if (add_file(temp[i]))\n                    result.push_back(temp[i]);\n            }\n        }\n\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class match_ending\n    {\n\n    public:\n        match_ending ( \n            const std::string& ending_\n        ) : ending(ending_) {}\n\n        bool operator() (\n            const file& f\n        ) const\n        {\n            // if the ending is bigger than f's name then it obviously doesn't match\n            if (ending.size() > f.name().size())\n                return false;\n\n            // now check if the actual characters that make up the end of the file name \n            // matches what is in ending.\n            return std::equal(ending.begin(), ending.end(), f.name().end()-ending.size());\n        }\n\n    private:\n        std::string ending;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class match_endings\n    {\n\n    public:\n        match_endings ( \n            const std::string& endings_\n        ) \n        {\n            const std::vector<std::string>& s = split(endings_);\n            for (unsigned long i = 0; i < s.size(); ++i)\n            {\n                endings.push_back(match_ending(s[i]));\n            }\n        }\n\n        bool operator() (\n            const file& f\n        ) const\n        {\n            for (unsigned long i = 0; i < endings.size(); ++i)\n            {\n                if (endings[i](f))\n                    return true;\n            }\n\n            return false;\n        }\n\n    private:\n        std::vector<match_ending> endings;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class match_all\n    {\n    public:\n        bool operator() (\n            const file& \n        ) const { return true; }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    directory get_parent_directory (\n        const directory& dir\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    directory get_parent_directory (\n        const file& f\n    );\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"dir_nav_extensions.cpp\"\n#endif\n\n#endif // DLIB_DIR_NAV_EXTENSIONs_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/dir_nav_extensions_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_DIR_NAV_EXTENSIONs_ABSTRACT_\n#ifdef DLIB_DIR_NAV_EXTENSIONs_ABSTRACT_\n\n#include <string>\n#include <vector>\n#include \"dir_nav_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    bool file_exists (\n        const std::string& filename\n    );\n    /*!\n        ensures\n            - if (a file with the given filename exists) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    const std::vector<file> get_files_in_directory_tree (\n        const directory& top_of_tree,\n        const T& add_file,\n        unsigned long max_depth = 30\n    );\n    /*!\n        requires\n            - add_file must be a function object with the following prototype:\n                bool add_file (file f);\n        ensures\n            - performs a recursive search through the directory top_of_tree and all\n              its sub-directories (up to the given max depth).  All files in these\n              directories are examined by passing them to add_file() and if it \n              returns true then they will be included in the returned std::vector<file>\n              object.\n            - Note that a max_depth of 0 means that only the files in the directory\n              top_of_tree will be considered.  A depth of 1 means that only files in \n              top_of_tree and its immediate sub-directories will be considered.  And\n              so on...\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class match_ending\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple function object that can be used with the\n                above get_files_in_directory_tree() function.  This object\n                just looks for files with a certain ending.\n        !*/\n\n    public:\n        match_ending ( \n            const std::string& ending\n        );\n        /*!\n            ensures\n                - this object will be a function that checks if a file has a \n                  name that ends with the given ending string.\n        !*/\n\n        bool operator() (\n            const file& f\n        ) const;\n        /*!\n            ensures\n                - if (the file f has a name that ends with the ending string given\n                  to this object's constructor) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class match_endings\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple function object that can be used with the\n                above get_files_in_directory_tree() function.  This object\n                allows you to look for files with a number of different \n                endings.\n        !*/\n\n    public:\n        match_endings ( \n            const std::string& ending_list\n        );\n        /*!\n            ensures\n                - ending_list is interpreted as a whitespace separated list\n                  of file endings. \n                - this object will be a function that checks if a file has a \n                  name that ends with one of the strings in ending_list.\n        !*/\n\n        bool operator() (\n            const file& f\n        ) const;\n        /*!\n            ensures\n                - if (the file f has a name that ends with one of the ending strings \n                  given to this object's constructor) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class match_all\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple function object that can be used with the\n                above get_files_in_directory_tree() function.  This object\n                matches all files. \n        !*/\n\n    public:\n        bool operator() (\n            const file& f\n        ) const;\n        /*!\n            ensures\n                - returns true\n                  (i.e. this function doesn't do anything.  It just says it\n                  matches all files no matter what)\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    directory get_parent_directory (\n        const directory& dir\n    );\n    /*!\n        ensures\n            - returns the parent directory of dir.  In particular, this\n              function returns the value of dir.get_parent()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    directory get_parent_directory (\n        const file& f\n    );\n    /*!\n        ensures\n            - if (f.full_name() != \"\") then\n                - returns the directory which contains the given file\n            - else\n                - returns a default initialized directory (i.e. directory())\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DIR_NAV_EXTENSIONs_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/dir_nav_kernel_1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIR_NAV_KERNEL_1_CPp_\n#define DLIB_DIR_NAV_KERNEL_1_CPp_\n#include \"../platform.h\"\n\n#ifdef WIN32\n\n#include \"dir_nav_kernel_1.h\"\n#include \"../string.h\"\n\n\n#ifdef __BORLANDC__\n// Apparently the borland compiler doesn't define this.\n#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)\n#endif\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // file object implementation\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void file::\n    init (\n        const std::string& name\n    )\n    {\n        using namespace std;\n\n\n        char buf[3000];\n        char* str;\n        if (GetFullPathNameA(name.c_str(),sizeof(buf),buf,&str) == 0)\n        {\n            // the file was not found\n            throw file_not_found(\"Unable to find file \" + name);\n        }\n        state.full_name = buf;\n        \n\n        string::size_type pos = state.full_name.find_last_of(directory::get_separator());\n        if (pos == string::npos)\n        {\n            // no valid full path has no separator characters.  \n            throw file_not_found(\"Unable to find file \" + name);\n        }\n        state.name = state.full_name.substr(pos+1);\n\n\n        // now find the size of this file\n        WIN32_FIND_DATAA data;\n        HANDLE ffind = FindFirstFileA(state.full_name.c_str(), &data);\n        if (ffind == INVALID_HANDLE_VALUE ||\n            (data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) != 0)\n        {\n            throw file_not_found(\"Unable to find file \" + name);                \n        }\n        else\n        {\n            uint64 temp = data.nFileSizeHigh;            \n            temp <<= 32;\n            temp |= data.nFileSizeLow;\n            state.file_size = temp;\n            FindClose(ffind);\n        } \n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool file::\n    operator == (\n        const file& rhs\n    ) const \n    { \n        using namespace std;\n\n        if (state.full_name.size() != rhs.state.full_name.size())\n            return false;\n        \n        // compare the strings but ignore the case because file names\n        // are not case sensitive on windows\n        return tolower(state.full_name) == tolower(rhs.state.full_name);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // directory object implementation\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void directory::\n    init (\n        const std::string& name\n    )\n    {\n        using namespace std;\n\n        \n        char buf[3000];\n        char* str;\n        if (GetFullPathNameA(name.c_str(),sizeof(buf),buf,&str) == 0)\n        {\n            // the directory was not found\n            throw dir_not_found(\"Unable to find directory \" + name);\n        }\n        state.full_name = buf;\n  \n        \n        const char sep = get_separator();\n        if (is_root_path(state.full_name) == false)\n        {\n            // ensure that thre is not a trialing separator\n            if (state.full_name[state.full_name.size()-1] == sep)\n                state.full_name.erase(state.full_name.size()-1);\n\n            // pick out the directory name\n            string::size_type pos = state.full_name.find_last_of(sep);\n            state.name = state.full_name.substr(pos+1);\n        }\n        else\n        {\n            // ensure that there is a trailing separator\n            if (state.full_name[state.full_name.size()-1] != sep)\n                state.full_name += sep;\n        }\n\n\n        // now check that this is actually a valid directory\n        DWORD attribs = GetFileAttributesA(state.full_name.c_str());\n        if (attribs == INVALID_FILE_ATTRIBUTES ||\n            (attribs&FILE_ATTRIBUTE_DIRECTORY) == 0)\n        {\n            // the directory was not found\n            throw dir_not_found(\"Unable to find directory \" + name);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    char directory::\n    get_separator (\n    ) \n    {\n        return '\\\\';\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool directory::\n    operator == (\n        const directory& rhs\n    ) const \n    { \n        using namespace std;\n\n        if (state.full_name.size() != rhs.state.full_name.size())\n            return false;\n\n        // compare the strings but ignore the case because file names\n        // are not case sensitive on windows\n        return tolower(state.full_name) == tolower(rhs.state.full_name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const directory directory::\n    get_parent (\n    ) const\n    {\n        using namespace std;\n        // if *this is the root then just return *this\n        if (is_root())\n        {\n            return *this;\n        }\n        else\n        {\n            directory temp;\n\n            const char sep = get_separator();\n\n            string::size_type pos = state.full_name.find_last_of(sep);\n            temp.state.full_name = state.full_name.substr(0,pos);\n\n            if ( is_root_path(temp.state.full_name))\n            {\n                temp.state.full_name += sep;\n            }\n            else\n            {\n                pos = temp.state.full_name.find_last_of(sep);\n                if (pos != string::npos)\n                {\n                    temp.state.name = temp.state.full_name.substr(pos+1);\n                }\n                else\n                {\n                    temp.state.full_name += sep;\n                }\n            }\n            return temp;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool directory::\n    is_root_path (\n        const std::string& path\n    ) const\n    {\n        using namespace std;\n        const char sep = get_separator();\n        bool root_path = false;\n        if (path.size() > 2 && path[0] == sep && path[1] == sep)\n        {\n            // in this case this is a windows share path\n            string::size_type pos = path.find_first_of(sep,2);\n            if (pos != string::npos)\n            {                \n                pos = path.find_first_of(sep,pos+1);\n\n                if (pos == string::npos && path[path.size()-1] != sep)\n                    root_path = true;\n                else if (pos == path.size()-1)\n                    root_path = true;\n            }\n\n        }\n        else if ( (path.size() == 2 || path.size() == 3) && path[1] == ':')\n        {\n            // if this is a valid windows path then it must be a root path\n            root_path = true;\n        }\n\n        return root_path;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // WIN32\n\n#endif // DLIB_DIR_NAV_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/dir_nav_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIR_NAV_KERNEl_1_\n#define DLIB_DIR_NAV_KERNEl_1_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n#include \"../platform.h\"\n\n\n#include \"dir_nav_kernel_abstract.h\"\n#include <string>\n#include \"../uintn.h\"\n#include \"../algs.h\"\n\n#include \"../windows_magic.h\"\n#include <windows.h>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../enable_if.h\"\n#include \"../queue.h\"\n\nnamespace dlib\n{\n\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // file object    \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    class file\n    {\n        /*!\n            INITIAL VALUES\n                state.name        == name()\n                state.full_name   == full_name()\n                state.file_size   == size()\n\n            CONVENTION\n                state.name        == name()\n                state.full_name   == full_name()\n                state.file_size   == size()\n\n        !*/\n\n        friend class directory;\n\n        struct data\n        {\n            uint64 file_size;\n            std::string name;\n            std::string full_name;\n        };\n\n\n        void init ( const std::string& name);\n\n    public:\n\n        struct private_constructor{};\n        inline file (\n            const std::string& name,\n            const std::string& full_name,\n            const uint64 file_size,\n            private_constructor\n        )\n        {\n            state.file_size = file_size;\n            state.name = name;\n            state.full_name = full_name;\n        }\n\n\n\n\n        class file_not_found : public error { \n            public: file_not_found(const std::string& s): error(s){}\n        };\n        \n        inline file (\n        )\n        {\n            state.file_size = 0;\n        }\n\n        file (\n            const std::string& name\n        ) { init(name); }\n\n        file (\n            const char* name\n        ) { init(name); }\n\n        inline const std::string& name (\n        ) const { return state.name; }\n\n        inline  const std::string& full_name (\n        ) const { return state.full_name; }\n\n        operator std::string (\n        ) const { return full_name(); }\n\n        inline uint64 size (\n        ) const { return state.file_size; }\n\n        bool operator == (\n            const file& rhs\n        ) const;\n\n        bool operator != (\n            const file& rhs\n        ) const { return !(*this == rhs); }\n\n        inline bool operator < (\n            const file& item\n        ) const { return full_name() < item.full_name(); }\n\n        inline void swap (\n            file& item\n        ) \n        { \n            exchange(state,item.state); \n        }\n\n    private:\n\n        data state;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // directory object    \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n       \n    class directory\n    {\n        /*!\n            INITIAL VALUES\n                state.name        == name()\n                state.full_name   == full_name()\n\n            CONVENTION\n                state.name        == name()\n                state.full_name   == full_name()\n                is_root()          == state.name.size() == 0\n\n        !*/\n\n        void init (const std::string& name);\n\n    public:\n\n        struct data\n        {\n            std::string name;\n            std::string full_name;\n        };\n\n\n        /*\n            The reason we don't just make this constructor actually\n            private is because doing it this way avoids a bug that \n            sometimes occurs in visual studio 7.1.  The bug has \n            something to do with templated friend functions \n            such as the get_filesystem_roots() function below if \n            it was declared as a friend template of this class. \n        */\n        struct private_constructor{};\n        inline directory (\n            const std::string& name,\n            const std::string& full_name,\n            private_constructor \n        )\n        {\n            state.name = name;\n            state.full_name = full_name;\n        }\n\n\n        class dir_not_found : public error {\n            public: dir_not_found(const std::string& s):error(s){}\n        };\n        class listing_error : public error {\n            public: listing_error(const std::string& s):error(s){}\n        };\n        \n        inline directory (\n        )\n        {\n        }\n\n        directory (\n            const std::string& name\n        ) { init(name); }\n\n        directory (\n            const char* name\n        ) { init(name); }\n\n\n        static char get_separator (\n        );\n\n\n        template <\n            typename queue_of_files\n            >\n        void get_files (\n            queue_of_files& files\n        ) const;\n\n        template <\n            typename queue_of_dirs\n            >\n        void get_dirs (\n            queue_of_dirs& dirs\n        ) const;\n\n        std::vector<file> get_files (\n        ) const\n        {\n            std::vector<file> temp_vector;\n            get_files(temp_vector);\n            return temp_vector;\n        }\n\n        std::vector<directory> get_dirs (\n        ) const\n        {\n            std::vector<directory> temp_vector;\n            get_dirs(temp_vector);\n            return temp_vector;\n        }\n\n        const directory get_parent (\n        ) const;\n       \n        inline bool is_root (\n        ) const { return state.name.size() == 0; }\n\n        inline const std::string& name (\n        ) const { return state.name; }\n\n        inline const std::string& full_name (\n        ) const { return state.full_name; }\n\n        operator std::string (\n        ) const { return full_name(); }\n\n        bool operator == (\n            const directory& rhs\n        ) const;\n\n        bool operator != (\n            const directory& rhs\n        ) const { return !(*this == rhs); }\n\n        inline bool operator < (\n            const directory& item\n        ) const { return full_name() < item.full_name(); }\n\n        inline void swap (\n            directory& item\n        ) \n        { \n            exchange(state,item.state); \n        }\n\n    private:\n\n        // member data\n        data state;\n\n        bool is_root_path (\n            const std::string& path\n        ) const;\n        /*!\n            ensures\n                - returns true if path is a root path.  \n                  Note that this function considers root paths that don't\n                  have a trailing separator to also be valid.\n        !*/\n\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::ostream& operator<< (\n        std::ostream& out,\n        const directory& item\n    ) { out << (std::string)item; return out; }\n\n    inline std::ostream& operator<< (\n        std::ostream& out,\n        const file& item\n    ) { out << (std::string)item; return out; }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_dir\n        >\n    typename disable_if<is_std_vector<queue_of_dir>,void>::type get_filesystem_roots (\n        queue_of_dir& roots\n    )\n    {\n        roots.clear();\n        const DWORD mask = GetLogicalDrives();\n        DWORD bit = 1;\n        char buf[] = \"A:\\\\\";\n\n        do\n        {\n            if (mask & bit)\n            {\n                directory dir(\"\",buf,directory::private_constructor());\n                roots.enqueue(dir);\n            }\n            bit <<= 1;\n            ++buf[0];\n        } while (buf[0] != 'Z');\n    }\n\n    template <\n        typename queue_of_dir\n        >\n    typename enable_if<is_std_vector<queue_of_dir>,void>::type get_filesystem_roots (\n        queue_of_dir& roots\n    )\n    {\n        roots.clear();\n        const DWORD mask = GetLogicalDrives();\n        DWORD bit = 1;\n        char buf[] = \"A:\\\\\";\n\n        do\n        {\n            if (mask & bit)\n            {\n                directory dir(\"\",buf,directory::private_constructor());\n                roots.push_back(dir);\n            }\n            bit <<= 1;\n            ++buf[0];\n        } while (buf[0] != 'Z');\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        file& a, \n        file& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        directory& a, \n        directory& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // templated member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_files\n        >\n    typename disable_if<is_std_vector<queue_of_files>,void>::type \n    directory_helper_get_files (\n        const directory::data& state,\n        queue_of_files& files\n    ) \n    {\n        using namespace std;\n        typedef directory::listing_error listing_error;\n        typedef file::private_constructor private_constructor;\n\n        files.clear();\n        if (state.full_name.size() == 0)\n            throw listing_error(\"This directory object currently doesn't represent any directory.\");\n\n        HANDLE ffind = INVALID_HANDLE_VALUE;\n        try\n        {\n            WIN32_FIND_DATAA data;\n            string path = state.full_name;\n            // ensure that the path ends with a separator\n            if (path[path.size()-1] != directory::get_separator())\n                path += directory::get_separator();\n            \n            ffind = FindFirstFileA((path+\"*\").c_str(), &data);\n            if (ffind == INVALID_HANDLE_VALUE)\n            {\n                throw listing_error(\"Unable to list the contents of \" + state.full_name);\n            }\n\n\n            bool no_more_files = false;\n            do\n            {\n                if ((data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) == 0)\n                {\n                    uint64 file_size = data.nFileSizeHigh;                                   \n                    file_size <<= 32;\n                    file_size |= data.nFileSizeLow;\n                    // this is a file so add it to the queue\n                    file temp(data.cFileName,path+data.cFileName,file_size, private_constructor());\n                    files.enqueue(temp);\n                }\n\n                if (FindNextFileA(ffind,&data) == 0)\n                {\n                    // an error occurred\n                    if ( GetLastError() == ERROR_NO_MORE_FILES)\n                    {\n                        // there are no more files\n                        no_more_files = true;\n                    }\n                    else\n                    {\n                        // there was an error\n                        throw listing_error(\"Unable to list the contents of \" + state.full_name);\n                    }  \n                }\n            } while (no_more_files == false);\n\n            FindClose(ffind); \n            ffind = INVALID_HANDLE_VALUE;\n        }\n        catch (...)\n        {\n            if (ffind != INVALID_HANDLE_VALUE)\n                FindClose(ffind);    \n            files.clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_files\n        >\n    typename enable_if<is_std_vector<queue_of_files>,void>::type \n    directory_helper_get_files (\n        const directory::data& state,\n        queue_of_files& files\n    ) \n    {\n        queue<file>::kernel_2a temp_files;\n        directory_helper_get_files(state,temp_files);\n\n        files.clear();\n\n        // copy the queue of files into the vector\n        temp_files.reset();\n        while (temp_files.move_next())\n        {\n            files.push_back(temp_files.element());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_files\n        >\n    void directory::\n    get_files (\n        queue_of_files& files\n    ) const\n    {\n        // the reason for this indirection here is because it avoids a bug in\n        // the mingw version of gcc\n        directory_helper_get_files(state,files);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_dirs\n        >\n    typename disable_if<is_std_vector<queue_of_dirs>,void>::type \n    directory_helper_get_dirs (\n        const directory::data& state,\n        queue_of_dirs& dirs\n    ) \n    {\n        using namespace std;\n        typedef directory::listing_error listing_error;\n        typedef directory::private_constructor private_constructor;\n\n        dirs.clear();\n        if (state.full_name.size() == 0)\n            throw listing_error(\"This directory object currently doesn't represent any directory.\");\n\n        HANDLE dfind = INVALID_HANDLE_VALUE;\n        try\n        {\n            WIN32_FIND_DATAA data;\n            string path = state.full_name;\n            // ensure that the path ends with a separator\n            if (path[path.size()-1] != directory::get_separator())\n                path += directory::get_separator();\n            \n            dfind = FindFirstFileA((path+\"*\").c_str(), &data);\n            if (dfind == INVALID_HANDLE_VALUE)\n            {\n                throw listing_error(\"Unable to list the contents of \" + state.full_name);\n            }\n\n\n            bool no_more_files = false;\n            do\n            {\n                string tname(data.cFileName);\n                if ((data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) != 0 &&\n                    tname != \".\" &&\n                    tname != \"..\")\n                {\n                    // this is a directory so add it to the queue\n                    directory temp(tname,path+tname,private_constructor());\n                    dirs.enqueue(temp);\n                }\n\n                if (FindNextFileA(dfind,&data) == 0)\n                {\n                    // an error occurred\n                    if ( GetLastError() == ERROR_NO_MORE_FILES)\n                    {\n                        // there are no more files\n                        no_more_files = true;\n                    }\n                    else\n                    {\n                        // there was an error\n                        throw listing_error(\"Unable to list the contents of \" + state.full_name);\n                    }  \n                }\n            } while (no_more_files == false);\n\n            FindClose(dfind);  \n            dfind = INVALID_HANDLE_VALUE;\n        }\n        catch (...)\n        {         \n            if (dfind != INVALID_HANDLE_VALUE)\n                FindClose(dfind);\n            dirs.clear();\n            throw;\n        }\n\n    }\n \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_dirs\n        >\n    typename enable_if<is_std_vector<queue_of_dirs>,void>::type \n    directory_helper_get_dirs (\n        const directory::data& state,\n        queue_of_dirs& dirs\n    ) \n    {\n        queue<directory>::kernel_2a temp_dirs;\n        directory_helper_get_dirs(state,temp_dirs);\n\n        dirs.clear();\n\n        // copy the queue of dirs into the vector\n        temp_dirs.reset();\n        while (temp_dirs.move_next())\n        {\n            dirs.push_back(temp_dirs.element());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_dirs\n        >\n    void directory::\n    get_dirs (\n        queue_of_dirs& dirs\n    ) const\n    {\n        // the reason for this indirection here is because it avoids a bug in\n        // the mingw version of gcc\n        directory_helper_get_dirs(state,dirs);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#ifdef NO_MAKEFILE\n#include \"dir_nav_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_DIR_NAV_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/dir_nav_kernel_2.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIR_NAV_KERNEL_2_CPp_\n#define DLIB_DIR_NAV_KERNEL_2_CPp_\n\n#include \"../platform.h\"\n\n#ifdef POSIX\n\n\n#include \"dir_nav_kernel_2.h\"\n\n\n\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // file object implementation\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void file::\n    init (\n        const std::string& name\n    )\n    {\n        using namespace std;\n\n\n\n        char buf[PATH_MAX];\n        if (realpath(name.c_str(),buf) == 0)\n        {\n            // the file was not found\n            throw file_not_found(\"Unable to find file \" + name);\n        }\n        state.full_name = buf;\n\n\n        string::size_type pos = state.full_name.find_last_of(directory::get_separator());\n        if (pos == string::npos)\n        {\n            // no valid full path has no separtor characters.  \n            throw file_not_found(\"Unable to find file \" + name);\n        }\n        state.name = state.full_name.substr(pos+1);\n\n\n        // now find the size of this file\n        struct stat64 buffer;\n        if (::stat64(state.full_name.c_str(), &buffer) ||\n            S_ISDIR(buffer.st_mode))\n        {\n            // there was an error during the call to stat64 or\n            // name is actually a directory\n            throw file_not_found(\"Unable to find file \" + name);\n        }\n        else\n        {\n            state.file_size = static_cast<uint64>(buffer.st_size);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool file::\n    operator == (\n        const file& rhs\n    ) const \n    { \n        using namespace std;\n        if (state.full_name.size() == 0 && rhs.state.full_name.size() == 0)\n            return true;\n\n        // These files might have different names but actually represent the same\n        // file due to the presence of symbolic links.\n        char buf[PATH_MAX];\n        string left, right;\n        if (realpath(state.full_name.c_str(),buf) == 0)\n            return false;    \n        left = buf;\n\n        if (realpath(rhs.state.full_name.c_str(),buf) == 0)\n            return false;    \n        right = buf;\n\n        return (left == right);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // directory object implementation\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void directory::\n    init (\n        const std::string& name\n    )\n    {\n        using namespace std;\n\n        \n        char buf[PATH_MAX];\n        if (realpath(name.c_str(),buf) == 0)\n        {\n            // the directory was not found\n            throw dir_not_found(\"Unable to find directory \" + name);\n        }\n        state.full_name = buf;\n  \n        \n        const char sep = get_separator();\n        if (is_root_path(state.full_name) == false)\n        {\n            // ensure that thre is not a trialing separator\n            if (state.full_name[state.full_name.size()-1] == sep)\n                state.full_name.erase(state.full_name.size()-1);\n\n            // pick out the directory name\n            string::size_type pos = state.full_name.find_last_of(sep);\n            state.name = state.full_name.substr(pos+1);\n        }\n        else\n        {\n            // ensure that there is a trailing separator\n            if (state.full_name[state.full_name.size()-1] != sep)\n                state.full_name += sep;\n        }\n\n\n        struct stat64 buffer;\n        // now check that this is actually a valid directory\n        if (::stat64(state.full_name.c_str(),&buffer))\n        {\n            // the directory was not found\n            throw dir_not_found(\"Unable to find directory \" + name);\n        }\n        else if (S_ISDIR(buffer.st_mode) == 0)\n        {\n            // It is not a directory\n            throw dir_not_found(\"Unable to find directory \" + name);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    char directory::\n    get_separator (\n    ) \n    {\n        return '/';\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool directory::\n    operator == (\n        const directory& rhs\n    ) const \n    { \n        using namespace std;\n        if (state.full_name.size() == 0 && rhs.state.full_name.size() == 0)\n            return true;\n\n        // These directories might have different names but actually represent the same\n        // directory due to the presence of symbolic links.\n        char buf[PATH_MAX];\n        string left, right;\n        if (realpath(state.full_name.c_str(),buf) == 0)\n            return false;    \n        left = buf;\n\n        if (realpath(rhs.state.full_name.c_str(),buf) == 0)\n            return false;    \n        right = buf;\n\n        return (left == right);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const directory directory::\n    get_parent (\n    ) const\n    {\n        using namespace std;\n        // if *this is the root then just return *this\n        if (is_root())\n        {\n            return *this;\n        }\n        else\n        {\n            directory temp;\n\n            const char sep = get_separator();\n\n            string::size_type pos = state.full_name.find_last_of(sep);\n            temp.state.full_name = state.full_name.substr(0,pos);\n\n            if ( is_root_path(temp.state.full_name))\n            {\n                temp.state.full_name += sep;\n            }\n            else\n            {\n                pos = temp.state.full_name.find_last_of(sep);\n                if (pos != string::npos)\n                {\n                    temp.state.name = temp.state.full_name.substr(pos+1);\n                }\n                else\n                {\n                    temp.state.full_name += sep;\n                }\n            }\n            return temp;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool directory::\n    is_root_path (\n        const std::string& path\n    ) const\n    {\n        const char sep = get_separator();\n        if (path.size() == 1 && path[0] == sep)\n            return true;\n        else\n            return false;   \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // POSIX\n\n#endif // DLIB_DIR_NAV_KERNEL_2_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/dir_nav_kernel_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIR_NAV_KERNEl_2_\n#define DLIB_DIR_NAV_KERNEl_2_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n\n#include \"dir_nav_kernel_abstract.h\"\n\n#include <string>\n#include \"../uintn.h\"\n#include \"../algs.h\"\n\n#include <sys/types.h>\n#include <dirent.h>\n#include <libgen.h>\n#include <limits.h>\n#include <unistd.h>\n#include <sys/stat.h>\n#include <errno.h>\n#include <stdlib.h>\n\n#if !defined(__USE_LARGEFILE64 ) && !defined(_LARGEFILE64_SOURCE)\n#define stat64 stat\n#endif\n\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../enable_if.h\"\n#include \"../queue.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // file object    \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    class file\n    {\n        /*!\n            INITIAL VALUES\n                state.name        == name()\n                state.full_name   == full_name()\n                state.file_size   == size()\n\n            CONVENTION\n                state.name        == name()\n                state.full_name   == full_name()\n                state.file_size   == size()\n\n        !*/\n\n        friend class directory;\n\n        struct data\n        {\n            uint64 file_size;\n            std::string name;\n            std::string full_name;\n        };\n\n        void init(const std::string& name);\n\n    public:\n\n        struct private_constructor{};\n        inline file (\n            const std::string& name,\n            const std::string& full_name,\n            const uint64 file_size,\n            private_constructor\n        )\n        {\n            state.file_size = file_size;\n            state.name = name;\n            state.full_name = full_name;\n        }\n\n\n        class file_not_found : public error { \n            public: file_not_found(const std::string& s): error(s){}\n        };\n        \n        inline file (\n        )\n        {\n            state.file_size = 0;\n        }\n\n        file (\n            const std::string& name\n        ) { init(name); }\n\n        file (\n            const char* name\n        ) { init(name); }\n\n        inline const std::string& name (\n        ) const { return state.name; }\n\n        inline  const std::string& full_name (\n        ) const { return state.full_name; }\n\n        inline uint64 size (\n        ) const { return state.file_size; }\n\n        operator std::string (\n        ) const { return full_name(); }\n\n        bool operator == (\n            const file& rhs\n        ) const;\n\n        bool operator != (\n            const file& rhs\n        ) const { return !(*this == rhs); }\n\n        inline bool operator < (\n            const file& item\n        ) const { return full_name() < item.full_name(); }\n\n        inline void swap (\n            file& item\n        ) \n        { \n            exchange(state,item.state); \n        }\n\n    private:\n\n        // member data\n        data state;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // directory object    \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n       \n    class directory\n    {\n        /*!\n            INITIAL VALUES\n                state.name        == name()\n                state.full_name   == full_name()\n\n            CONVENTION\n                state.name        == name()\n                state.full_name   == full_name()\n                is_root()          == state.name.size() == 0\n\n        !*/\n\n        void init(const std::string& name);\n\n    public:\n        struct private_constructor{};\n        inline directory (\n            const std::string& name,\n            const std::string& full_name,\n            private_constructor\n        )\n        {\n            state.name = name;\n            state.full_name = full_name;\n        }\n\n        struct data\n        {\n            std::string name;\n            std::string full_name;\n        };\n\n        class dir_not_found : public error {\n            public: dir_not_found(const std::string& s):error(s){}\n        };\n        class listing_error : public error {\n            public: listing_error(const std::string& s):error(s){}\n        };\n        \n        inline directory (\n        )\n        {\n        }\n\n        directory (\n            const std::string& name\n        ) { init(name); }\n\n        directory (\n            const char* name\n        ) { init(name); }\n\n        static char get_separator (\n        );\n\n        template <\n            typename queue_of_files\n            >\n        void get_files (\n            queue_of_files& files\n        ) const;\n\n        template <\n            typename queue_of_dirs\n            >\n        void get_dirs (\n            queue_of_dirs& dirs\n        ) const;\n\n        std::vector<file> get_files (\n        ) const\n        {\n            std::vector<file> temp_vector;\n            get_files(temp_vector);\n            return temp_vector;\n        }\n\n        std::vector<directory> get_dirs (\n        ) const\n        {\n            std::vector<directory> temp_vector;\n            get_dirs(temp_vector);\n            return temp_vector;\n        }\n\n        const directory get_parent (\n        ) const;\n       \n        inline bool is_root (\n        ) const { return state.name.size() == 0; }\n\n        inline const std::string& name (\n        ) const { return state.name; }\n\n        inline const std::string& full_name (\n        ) const { return state.full_name; }\n\n        operator std::string (\n        ) const { return full_name(); }\n\n        bool operator == (\n            const directory& rhs\n        ) const;\n\n        bool operator != (\n            const directory& rhs\n        ) const { return !(*this == rhs); }\n\n        inline bool operator < (\n            const directory& item\n        ) const { return full_name() < item.full_name(); }\n\n        inline void swap (\n            directory& item\n        ) \n        { \n            exchange(state,item.state); \n        }\n\n    private:\n\n        // member data\n        data state;\n\n        bool is_root_path (\n            const std::string& path\n        ) const;\n        /*!\n            ensures\n                - returns true if path is a root path.  \n                  Note that this function considers root paths that don't\n                  have a trailing separator to also be valid.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::ostream& operator<< (\n        std::ostream& out,\n        const directory& item\n    ) { out << (std::string)item; return out; }\n\n    inline std::ostream& operator<< (\n        std::ostream& out,\n        const file& item\n    ) { out << (std::string)item; return out; }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        file& a, \n        file& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        directory& a, \n        directory& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // templated member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_files\n        >\n    typename disable_if<is_std_vector<queue_of_files>,void>::type\n    directory_helper_get_files (\n        const directory::data& state,\n        queue_of_files& files\n    ) \n    {\n        using namespace std;\n\n        files.clear();\n        if (state.full_name.size() == 0)\n            throw directory::listing_error(\"This directory object currently doesn't represent any directory.\");\n\n        DIR* ffind = 0;\n        struct dirent* data;\n        struct stat64 buffer;\n\n        try\n        {\n            string path = state.full_name;\n            // ensure that the path ends with a separator\n            if (path[path.size()-1] != directory::get_separator())\n                path += directory::get_separator();\n\n            // get a handle to something we can search with\n            ffind = opendir(state.full_name.c_str());\n            if (ffind == 0)\n            {\n                throw directory::listing_error(\"Unable to list the contents of \" + state.full_name);\n            }\n\n            while(true)\n            {\n                errno = 0;\n                if ( (data = readdir(ffind)) == 0)\n                {                    \n                    // there was an error or no more files\n                    if ( errno == 0)\n                    {\n                        // there are no more files\n                        break;\n                    }\n                    else\n                    {\n                        // there was an error\n                        throw directory::listing_error(\"Unable to list the contents of \" + state.full_name);\n                    }                \n                }\n\n                uint64 file_size;\n                // get a stat64 structure so we can see if this is a file\n                if (::stat64((path+data->d_name).c_str(), &buffer) != 0)\n                {\n                    // this might be a broken symbolic link.  We can check by calling\n                    // readlink and seeing if it finds anything.  \n                    char buf[PATH_MAX];\n                    ssize_t temp = readlink((path+data->d_name).c_str(),buf,sizeof(buf));\n                    if (temp == -1)                    \n                        throw directory::listing_error(\"Unable to list the contents of \" + state.full_name);\n                    else\n                        file_size = static_cast<uint64>(temp);\n                }\n                else\n                {\n                    file_size = static_cast<uint64>(buffer.st_size);\n                }\n\n                if (S_ISDIR(buffer.st_mode) == 0)\n                {\n                    // this is actually a file\n                    file temp(\n                        data->d_name,\n                        path+data->d_name,\n                        file_size,\n                        file::private_constructor()\n                        );\n                    files.enqueue(temp);\n                }\n            } // while (true)\n\n            if (ffind != 0)\n            {\n                while (closedir(ffind))\n                {\n                    if (errno != EINTR)\n                        break;\n                }\n                ffind = 0;\n            }\n\n        }\n        catch (...)\n        {\n            if (ffind != 0)\n            {\n                while (closedir(ffind))\n                {\n                    if (errno != EINTR)\n                        break;\n                }\n                ffind = 0;\n            }\n            files.clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_files\n        >\n    typename enable_if<is_std_vector<queue_of_files>,void>::type \n    directory_helper_get_files (\n        const directory::data& state,\n        queue_of_files& files\n    ) \n    {\n        queue<file>::kernel_2a temp_files;\n        directory_helper_get_files(state,temp_files);\n\n        files.clear();\n\n        // copy the queue of files into the vector\n        temp_files.reset();\n        while (temp_files.move_next())\n        {\n            files.push_back(temp_files.element());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_files\n        >\n    void directory::\n    get_files (\n        queue_of_files& files\n    ) const\n    {\n        // the reason for this indirection here is because it avoids a bug in\n        // the cygwin version of gcc\n        directory_helper_get_files(state,files);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_dirs\n        >\n    typename disable_if<is_std_vector<queue_of_dirs>,void>::type \n    directory_helper_get_dirs (\n        const directory::data& state,\n        queue_of_dirs& dirs\n    ) \n    {\n        using namespace std;\n\n        dirs.clear();\n        if (state.full_name.size() == 0)\n            throw directory::listing_error(\"This directory object currently doesn't represent any directory.\");\n\n        DIR* ffind = 0;\n        struct dirent* data;\n        struct stat64 buffer;\n\n        try\n        {\n            string path = state.full_name;\n            // ensure that the path ends with a separator\n            if (path[path.size()-1] != directory::get_separator())\n                path += directory::get_separator();\n\n            // get a handle to something we can search with\n            ffind = opendir(state.full_name.c_str());\n            if (ffind == 0)\n            {\n                throw directory::listing_error(\"Unable to list the contents of \" + state.full_name);\n            }\n\n            while(true)\n            {\n                errno = 0;\n                if ( (data = readdir(ffind)) == 0)\n                {                    \n                    // there was an error or no more files\n                    if ( errno == 0)\n                    {\n                        // there are no more files\n                        break;\n                    }\n                    else\n                    {\n                        // there was an error\n                        throw directory::listing_error(\"Unable to list the contents of \" + state.full_name);\n                    }                \n                }\n\n                // get a stat64 structure so we can see if this is a file\n                if (::stat64((path+data->d_name).c_str(), &buffer) != 0)\n                {\n                    // just assume this isn't a directory.  It is probably a broken\n                    // symbolic link.\n                    continue;\n                }\n\n                string dtemp(data->d_name);\n                if (S_ISDIR(buffer.st_mode) &&\n                    dtemp != \".\" &&\n                    dtemp != \"..\" )\n                {\n                    // this is a directory so add it to dirs\n                    directory temp(dtemp,path+dtemp, directory::private_constructor());\n                    dirs.enqueue(temp);\n                }\n            } // while (true)\n\n            if (ffind != 0)\n            {\n                while (closedir(ffind))\n                {\n                    if (errno != EINTR)\n                        break;\n                }\n                ffind = 0;\n            }\n\n        }\n        catch (...)\n        {\n            if (ffind != 0)\n            {\n                while (closedir(ffind))\n                {\n                    if (errno != EINTR)\n                        break;\n                }\n                ffind = 0;\n            }\n            dirs.clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_dirs\n        >\n    typename enable_if<is_std_vector<queue_of_dirs>,void>::type \n    directory_helper_get_dirs (\n        const directory::data& state,\n        queue_of_dirs& dirs\n    ) \n    {\n        queue<directory>::kernel_2a temp_dirs;\n        directory_helper_get_dirs(state,temp_dirs);\n\n        dirs.clear();\n\n        // copy the queue of dirs into the vector\n        temp_dirs.reset();\n        while (temp_dirs.move_next())\n        {\n            dirs.push_back(temp_dirs.element());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <\n        typename queue_of_dirs\n        >\n    void directory::\n    get_dirs (\n        queue_of_dirs& dirs\n    ) const\n    {\n        // the reason for this indirection here is because it avoids a bug in\n        // the cygwin version of gcc\n        directory_helper_get_dirs(state,dirs);\n    }\n \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_dir\n        >\n    typename disable_if<is_std_vector<queue_of_dir>,void>::type get_filesystem_roots (\n        queue_of_dir& roots\n    )\n    {\n        roots.clear();\n        directory dir(\"/\");\n        roots.enqueue(dir);\n    }\n\n    template <\n        typename queue_of_dir\n        >\n    typename enable_if<is_std_vector<queue_of_dir>,void>::type get_filesystem_roots (\n        std::vector<directory>& roots\n    )\n    {\n        roots.clear();\n        directory dir(\"/\");\n        roots.push_back(dir);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#ifdef NO_MAKEFILE\n#include \"dir_nav_kernel_2.cpp\"\n#endif\n\n#endif // DLIB_DIR_NAV_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/dir_nav_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_DIR_NAV_KERNEl_ABSTRACT_\n#ifdef DLIB_DIR_NAV_KERNEl_ABSTRACT_\n\n#include <string>\n#include <vector>\n#include \"../uintn.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*!\n        GENERAL WARNING\n            Don't call any of these functions or make any of these objects \n            before main() has been entered.   That means no instances\n            of file or directory at the global scope.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_of_dir\n        >\n    void get_filesystem_roots (\n        queue_of_dir& roots\n    );\n    /*!\n        requires\n            - queue_of_dirs == an implementation of queue/queue_kernel_abstract.h with T \n              set to directory or a std::vector<directory> or dlib::std_vector_c<directory>.\n        ensures\n            - #roots == a queue containing directories that represent all the roots \n              of the filesystem on this machine.   (e.g. in windows you have c:\\, d:\\ \n              etc.)\n        throws\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // file object    \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    class file\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a file.\n\n                Note that the size of a file is determined at the time the file\n                object is constructed.  Thus if a file changes sizes after its\n                file object has been created its file object's size() method\n                will not reflect the new file size.    \n        !*/\n\n    public:\n\n        class file_not_found : public error {};\n        \n        file (\n        );\n        /*!\n            ensures\n                - #*this has been properly initialized\n                - #name() == \"\"\n                - #full_name() == \"\"\n                - #size() == 0\n                - #*this does not represent any file\n            throws  \n                - std::bad_alloc\n        !*/\n\n        file (\n            const std::string& name\n        );\n        /*!\n            ensures\n                - #*this has been properly initialized \n                - #*this represents the file given by name\n                  Note that name can be a fully qualified path or just a path\n                  relative to the current working directory.  Also, any symbolic \n                  links in name will be resolved.\n            throws  \n                - std::bad_alloc\n                - file_not_found\n                    This exception is thrown if the file can not be found or\n                    accessed.                    \n        !*/\n\n        file (\n            const char* name\n        );\n        /*!\n            ensures\n                - this function is identical to file(const std::string& name)\n        !*/\n\n        file (\n            const file& item\n        );\n        /*!\n            ensures\n                - #*this == item\n            throws  \n                - std::bad_alloc\n        !*/\n\n        ~file (\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        const std::string& name (\n        ) const;\n        /*!\n            ensures\n                - returns the name of the file.  This is full_name() minus \n                  the path to the file.            \n        !*/\n\n        const std::string& full_name (\n        ) const;\n        /*!\n            ensures\n                - returns the fully qualified name for the file represented by *this \n        !*/\n\n        uint64 size (\n        ) const;\n        /*!\n            ensures\n                - returns the size of this file in bytes.\n        !*/\n\n        operator std::string (\n        ) const; \n        /*!\n            ensures\n                - returns full_name()\n                  (i.e. provides an implicit conversion to string from dlib::file)\n        !*/\n\n        file& operator= (\n            const file& rhs\n        );\n        /*!\n            ensures\n                - #*this == rhs\n        !*/\n\n        bool operator == (\n            const file& rhs\n        ) const;\n        /*!\n            ensures\n                - if (*this and rhs represent the same file) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool operator != (\n            const file& rhs\n        ) const;\n        /*!\n            ensures\n                - if (*this and rhs represent the same file) then\n                    - returns false \n                - else\n                    - returns true \n        !*/\n\n        bool operator < (\n            const file& item\n        ) const;\n        /*!\n            ensures\n                - if (full_name() < item.full_name()) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void swap (\n            file& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // directory object    \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    class directory\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a directory in a file system.  It gives\n                the ability to traverse a directory tree.  \n\n                Note that the directories . and .. are not returned by get_dirs() \n        !*/\n\n    public:\n\n        class dir_not_found : public error {};\n        class listing_error : public error {};\n        \n        directory (\n        );\n        /*!\n            ensures\n                - #*this has been properly initialized\n                - #full_name() == \"\"\n                - #name() == \"\"\n                - #is_root() == true\n                - #*this does not represent any directory\n            throws  \n                - std::bad_alloc\n        !*/\n\n        directory (\n            const std::string& name\n        );\n        /*!\n            ensures\n                - #*this has been properly initialized \n                - #*this represents the directory given by name.\n                  Note that name can be a fully qualified path or just a path\n                  relative to the current working directory. Also, any symbolic \n                  links in name will be resolved.\n            throws  \n                - std::bad_alloc\n                - dir_not_found\n                    This exception is thrown if the directory can not be found or\n                    accessed.    \n        !*/\n\n        directory (\n            const char* name\n        );\n        /*!\n            ensures\n                - this function is identical to directory(const std::string& name)\n        !*/\n\n        directory (\n            const directory& item\n        );\n        /*!\n            ensures\n                - #*this == item\n            throws  \n                - std::bad_alloc\n        !*/\n\n        ~directory (\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        static char get_separator (\n        );\n        /*!\n            ensures\n                - returns the character used to separate directories and file names in a\n                  path.  (i.e.  \\ on windows and / in unix)\n        !*/\n\n        template <\n            typename queue_of_files\n            >\n        void get_files (\n            queue_of_files& files\n        ) const;\n        /*!\n            requires\n                - queue_of_files == an implementation of queue/queue_kernel_abstract.h with T \n                  set to file or a std::vector<file> or dlib::std_vector_c<file>.\n            ensures\n                - #files == A queue containing all the files present in this directory.\n                  (Note that symbolic links will not have been resolved in the names \n                  of the returned files.)\n                - #files.size() == the number of files in this directory\n            throws \n                - bad_alloc\n                    If this exception is thrown then the call to get_files() has\n                    no effect on *this and #files is unusable until files.clear()\n                    is called and succeeds.\n                - listing_error\n                    This exception is thrown if listing access has been denied to this\n                    directory or if some error occurred that prevented us from successfully\n                    getting the contents of this directory.       \n                    If this exception is thrown then the call to get_files() has\n                    no effect on *this and #files.size()==0.         \n        !*/\n\n        std::vector<file> get_files (\n        ) const;\n        /*!\n            ensures\n                - This function simply calls get_files(temp_vector) and then returns temp_vector.\n        !*/\n\n        template <\n            typename queue_of_dirs\n            >\n        void get_dirs (\n            queue_of_dirs& dirs\n        ) const;\n        /*!\n            requires\n                - queue_of_dirs == an implementation of queue/queue_kernel_abstract.h with T \n                  set to directory or a std::vector<directory> or dlib::std_vector_c<directory>.\n            ensures\n                - #dirs == a queue containing all the directories present in this directory.\n                  (note that symbolic links will not have been resolved in the names \n                  of the returned directories.)\n                - #dirs.size() == the number of subdirectories in this directory\n            throws \n                - bad_alloc\n                    If this exception is thrown then the call to get_files() has\n                    no effect on *this and #files is unusable until files.clear()\n                    is called and succeeds.\n                - listing_error\n                    This exception is thrown if listing access has been denied to this\n                    directory or if some error occurred that prevented us from successfully\n                    getting the contents of this directory.\n                    If this exception is thrown then the call to get_dirs() has\n                    no effect on *this and #dirs.size()==0.\n        !*/\n\n        std::vector<directory> get_dirs (\n        ) const;\n        /*!\n            ensures\n                - This function simply calls get_dirs(temp_vector) and then returns temp_vector.\n        !*/\n\n        bool is_root (\n        ) const;\n        /*!\n            ensures\n                - if (*this represents the root of this directory tree) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        const directory get_parent (\n        ) const;\n        /*!\n            ensures\n                - if (is_root()) then\n                    - returns a copy of *this                    \n                - else\n                    - returns the parent directory of *this                    \n            throws\n                - bad_alloc\n                    If this exception is thrown then the call to get_parent() will\n                    have no effect.\n        !*/\n\n        const std::string& name (\n        ) const;\n        /*!\n            ensures\n                - if (is_root()) then\n                    - returns \"\"\n                - else\n                    - returns the name of the directory.  This is full_name() minus \n                      the path to the directory.           \n        !*/\n\n        const std::string& full_name (\n        ) const;\n        /*!\n            ensures\n                - returns the fully qualified directory name for *this \n                - if (is_root()) then\n                    - the last character of #full_name() is get_separator()\n                - else\n                    - the last character of #full_name() is NOT get_separator()\n        !*/\n\n        operator std::string (\n        ) const; \n        /*!\n            ensures\n                - returns full_name()\n                  (i.e. provides an implicit conversion to string from dlib::directory)\n        !*/\n\n        directory& operator= (\n            const directory& rhs\n        );\n        /*!\n            ensures\n                - #*this == rhs\n        !*/\n\n        bool operator == (\n            const directory& rhs\n        ) const;\n        /*!\n            ensures\n                - if (*this and rhs represent the same directory) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool operator != (\n            const directory& rhs\n        ) const;\n        /*!\n            ensures\n                - if (*this and rhs represent the same directory) then\n                    - returns false \n                - else\n                    - returns true \n        !*/\n\n        bool operator < (\n            const directory& item\n        ) const;\n        /*!\n            ensures\n                - if (full_name() < item.full_name()) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void swap (\n            directory& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::ostream& operator<< (\n        std::ostream& out,\n        const directory& item\n    );\n    /*!\n        ensures\n            - performs: out << item.full_name()\n            - returns out\n    !*/\n\n    inline std::ostream& operator<< (\n        std::ostream& out,\n        const file& item\n    );\n    /*!\n        ensures\n            - performs: out << item.full_name()\n            - returns out\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        file& a, \n        file& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function for file objects\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void swap (\n        directory& a, \n        directory& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function for directory objects\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DIR_NAV_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/posix.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIR_NAV_KERNEl_1_\n#include \"dir_nav_kernel_2.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav/windows.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIR_NAV_KERNEl_2_\n#include \"dir_nav_kernel_1.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dir_nav.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIR_NAv_\n#define DLIB_DIR_NAv_\n\n\n#include \"platform.h\"\n\n\n#ifdef WIN32\n#include \"dir_nav/windows.h\"\n#endif\n\n#ifndef WIN32\n#include \"dir_nav/posix.h\"\n#endif\n\n#include \"dir_nav/dir_nav_extensions.h\"\n\n#endif // DLIB_DIR_NAv_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/directed_graph/directed_graph_kernel_1.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIRECTED_GRAPH_KERNEl_1_\n#define DLIB_DIRECTED_GRAPH_KERNEl_1_\n\n#include \"../serialize.h\"\n#include \"../noncopyable.h\"\n#include \"../std_allocator.h\"\n#include \"../smart_pointers.h\"\n#include \"../algs.h\"\n#include <vector>\n#include \"directed_graph_kernel_abstract.h\"\n#include \"../is_kind.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename node_type, typename directed_graph, bool is_checked>\n    struct directed_graph_checker_helper \n    { \n        /*!\n            This object is used to check preconditions based on the value of is_checked\n        !*/\n\n        static void check_parent_edge (\n            unsigned long edge_index,\n            const node_type& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(edge_index < self.number_of_parents(),\n                         \"\\tnode_type& directed_graph::node_type::parent_edge(edge_index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tedge_index:          \" << edge_index \n                         << \"\\n\\tnumber_of_parents(): \" << self.number_of_parents() \n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n\n        static void check_child_edge (\n            unsigned long edge_index,\n            const node_type& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(edge_index < self.number_of_children(),\n                         \"\\tnode_type& directed_graph::node_type::child_edge(edge_index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tedge_index:           \" << edge_index \n                         << \"\\n\\tnumber_of_children(): \" << self.number_of_children() \n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n\n        static void check_parent (\n            unsigned long edge_index,\n            const node_type& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(edge_index < self.number_of_parents(),\n                         \"\\tnode_type& directed_graph::node_type::parent(edge_index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tedge_index:          \" << edge_index \n                         << \"\\n\\tnumber_of_parents(): \" << self.number_of_parents() \n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n\n        static void check_child (\n            unsigned long edge_index,\n            const node_type& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(edge_index < self.number_of_children(),\n                         \"\\tnode_type& directed_graph::node_type::child(edge_index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tedge_index:           \" << edge_index \n                         << \"\\n\\tnumber_of_children(): \" << self.number_of_children() \n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n\n        static void check_node (\n            unsigned long index,\n            const directed_graph& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(index < self.number_of_nodes(),\n                         \"\\tnode_type& directed_graph::node(index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tindex:             \" << index \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes()\n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n\n        static void check_has_edge (\n            unsigned long parent_node_index,\n            unsigned long child_node_index,\n            const directed_graph& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(parent_node_index < self.number_of_nodes() &&\n                         child_node_index < self.number_of_nodes(),\n                         \"\\tvoid directed_graph::has_edge(parent_node_index, child_node_index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tparent_node_index: \" << parent_node_index \n                         << \"\\n\\tchild_node_index:  \" << child_node_index \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes() \n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n\n        static void check_add_edge (\n            unsigned long parent_node_index,\n            unsigned long child_node_index,\n            const directed_graph& self\n        )\n        {\n            DLIB_CASSERT(parent_node_index < self.number_of_nodes() &&\n                         child_node_index < self.number_of_nodes(),\n                         \"\\tvoid directed_graph::add_edge(parent_node_index, child_node_index)\" \n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tparent_node_index: \" << parent_node_index \n                         << \"\\n\\tchild_node_index:  \" << child_node_index \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes()\n                         << \"\\n\\tthis:              \" << &self\n            );\n\n            DLIB_CASSERT( self.has_edge(parent_node_index, child_node_index) == false,\n                          \"\\tvoid directed_graph::add_edge(parent_node_index, child_node_index)\"\n                          << \"\\n\\tYou can't add an edge if it already exists in the graph\"\n                          << \"\\n\\tparent_node_index: \" << parent_node_index \n                          << \"\\n\\tchild_node_index:  \" << child_node_index \n                          << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes() \n                          << \"\\n\\tthis:              \" << &self\n            );\n\n        }\n\n        static void check_remove_edge (\n            unsigned long parent_node_index,\n            unsigned long child_node_index,\n            const directed_graph& self\n        )\n        {\n            DLIB_CASSERT(parent_node_index < self.number_of_nodes() &&\n                         child_node_index < self.number_of_nodes(),\n                         \"\\tvoid directed_graph::remove_edge(parent_node_index, child_node_index)\" \n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tparent_node_index: \" << parent_node_index \n                         << \"\\n\\tchild_node_index:  \" << child_node_index \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes()\n                         << \"\\n\\tthis:              \" << &self\n            );\n\n            DLIB_CASSERT( self.has_edge(parent_node_index, child_node_index) == true,\n                          \"\\tvoid directed_graph::remove_edge(parent_node_index, child_node_index)\"\n                          << \"\\n\\tYou can't remove an edge if it isn't in the graph\"\n                          << \"\\n\\tparent_node_index: \" << parent_node_index \n                          << \"\\n\\tchild_node_index:  \" << child_node_index \n                          << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes()\n                          << \"\\n\\tthis:              \" << &self\n            );\n\n        }\n\n        static void check_remove_node (\n            unsigned long index,\n            const directed_graph& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(index < self.number_of_nodes(),\n                         \"\\tvoid directed_graph::remove_node(index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tindex:             \" << index \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes() \n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n    };\n\n    template <typename node_type, typename directed_graph>\n    struct directed_graph_checker_helper <node_type, directed_graph, false>\n    { \n        static inline void check_parent ( unsigned long , const node_type&) { }\n        static inline void check_child ( unsigned long , const node_type& ) { }\n        static inline void check_parent_edge ( unsigned long , const node_type&) { }\n        static inline void check_child_edge ( unsigned long , const node_type& ) { }\n        static inline void check_node ( unsigned long , const directed_graph& ) { }\n        static inline void check_has_edge ( unsigned long , unsigned long , const directed_graph& ) { }\n        static inline void check_add_edge ( unsigned long , unsigned long , const directed_graph& ) { }\n        static inline void check_remove_edge ( unsigned long , unsigned long , const directed_graph& ) { }\n        static inline void check_remove_node ( unsigned long , const directed_graph& ) { }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E = char,\n        typename mem_manager = default_memory_manager,\n        bool is_checked = true \n        >\n    class directed_graph_kernel_1 : noncopyable\n    {\n\n        /*!\n            INITIAL VALUE\n                - nodes.size() == 0\n\n            CONVENTION\n                - nodes.size() == number_of_nodes()\n                - for all valid i:\n                    - *nodes[i] == node(i)\n                    - nodes[i]->parents.size() == nodes[i]->number_of_parents(i)\n                    - nodes[i]->children.size() == nodes[i]->number_of_children(i)\n                    - nodes[i]->edge_parents.size() == nodes[i]->number_of_parents(i)\n                    - nodes[i]->edge_children.size() == nodes[i]->number_of_children(i)\n                    - nodes[i]->idx == i == nodes[i]->index()\n                    - for all valid p:\n                        - nodes[i]->parents[p] == pointer to the p'th parent node of i\n                        - *nodes[i]->parents[p] == nodes[i]->parent(p)\n                        - *nodes[i]->edge_parents[p] == nodes[i]->parent_edge(p)\n                    - for all valid c:\n                        - nodes[i]->children[c] == pointer to the c'th child node of i\n                        - *nodes[i]->children[c] == nodes[i]->child(c)\n                        - *nodes[i]->edge_children[c] == nodes[i]->child_edge(c)\n        !*/\n\n    public:\n        struct node_type;\n\n    private:\n        typedef directed_graph_checker_helper<node_type, directed_graph_kernel_1, is_checked> checker;\n\n\n    public:\n\n        typedef T type;\n        typedef E edge_type;\n        typedef mem_manager mem_manager_type;\n\n        template <typename Tr, typename Er, typename MMr>\n        struct rebind {\n            typedef directed_graph_kernel_1<Tr,Er,MMr> other;\n        };\n\n        directed_graph_kernel_1(\n        ) {}\n\n        virtual ~directed_graph_kernel_1(\n        ) {}\n\n        void clear(\n        ) { nodes.clear(); }\n\n        void set_number_of_nodes (\n            unsigned long new_size\n        );\n\n        unsigned long number_of_nodes (\n        ) const { return nodes.size(); }\n\n        node_type& node (\n            unsigned long index\n        ) { checker::check_node(index,*this); return *nodes[index]; }\n\n        const node_type& node (\n            unsigned long index\n        ) const { checker::check_node(index,*this); return *nodes[index]; }\n\n        bool has_edge (\n            unsigned long parent_node_index,\n            unsigned long child_node_index\n        ) const;\n\n        void add_edge (\n            unsigned long parent_node_index,\n            unsigned long child_node_index\n        );\n\n        void remove_edge (\n            unsigned long parent_node_index,\n            unsigned long child_node_index\n        );\n\n        unsigned long add_node (\n        );\n\n        void remove_node (\n            unsigned long index\n        );\n\n        void swap (\n            directed_graph_kernel_1& item\n        ) { nodes.swap(item.nodes); }\n\n    private:\n\n\n    public:\n\n        struct node_type\n        {\n            T data;\n            typedef directed_graph_kernel_1 graph_type;\n\n            unsigned long index(\n            ) const { return idx; }\n\n            unsigned long number_of_parents (\n            ) const { return parents.size(); }\n\n            unsigned long number_of_children (\n            ) const { return children.size(); }\n\n            const node_type& parent (\n                unsigned long edge_index\n            ) const { checker::check_parent(edge_index,*this);  return *parents[edge_index]; }\n\n            node_type& parent (\n                unsigned long edge_index\n            ) { checker::check_parent(edge_index,*this);  return *parents[edge_index]; }\n\n            const node_type& child (\n                unsigned long edge_index\n            ) const { checker::check_child(edge_index,*this);  return *children[edge_index]; }\n\n            node_type& child (\n                unsigned long edge_index\n            ) { checker::check_child(edge_index,*this);  return *children[edge_index]; }\n\n            const E& parent_edge (\n                unsigned long edge_index\n            ) const { checker::check_parent_edge(edge_index,*this);  return *edge_parents[edge_index]; }\n\n            E& parent_edge (\n                unsigned long edge_index\n            ) { checker::check_parent_edge(edge_index,*this);  return *edge_parents[edge_index]; }\n\n            const E& child_edge (\n                unsigned long edge_index\n            ) const { checker::check_child_edge(edge_index,*this);  return *edge_children[edge_index]; }\n\n            E& child_edge (\n                unsigned long edge_index\n            ) { checker::check_child_edge(edge_index,*this);  return *edge_children[edge_index]; }\n\n        private:\n            friend class directed_graph_kernel_1;\n            typedef std_allocator<node_type*,mem_manager> alloc_type;\n            typedef std_allocator<shared_ptr<E>,mem_manager> alloc_edge_type;\n            std::vector<node_type*,alloc_type> parents;\n            std::vector<node_type*,alloc_type> children;\n            std::vector<shared_ptr<E>,alloc_edge_type> edge_parents;\n            std::vector<shared_ptr<E>,alloc_edge_type> edge_children;\n            unsigned long idx;\n        };\n\n    private:\n\n        typedef std_allocator<shared_ptr<node_type>,mem_manager> alloc_type;\n        typedef std::vector<shared_ptr<node_type>, alloc_type> vector_type;\n        vector_type nodes;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    struct is_directed_graph<directed_graph_kernel_1<T,E,mem_manager, is_checked> >\n    {\n        static const bool value = true; \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    inline void swap (\n        directed_graph_kernel_1<T,E,mem_manager,is_checked>& a, \n        directed_graph_kernel_1<T,E,mem_manager,is_checked>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void serialize (\n        const directed_graph_kernel_1<T,E,mem_manager,is_checked>& item,\n        std::ostream& out \n    )   \n    {\n        try\n        {\n            serialize(item.number_of_nodes(), out);\n\n            // serialize each node\n            for (unsigned long i = 0; i < item.number_of_nodes(); ++i)\n            {\n                serialize(item.node(i).data, out);\n\n                // serialize all the child edges\n                serialize(item.node(i).number_of_children(), out);\n                for (unsigned long c = 0; c < item.node(i).number_of_children(); ++c)\n                {\n                    serialize(item.node(i).child(c).index(), out);\n                    serialize(item.node(i).child_edge(c), out);\n                }\n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing object of type directed_graph_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void deserialize (\n        directed_graph_kernel_1<T,E,mem_manager,is_checked>& item,\n        std::istream& in\n    )   \n    {\n        try\n        {\n            unsigned long size;\n            deserialize(size, in);\n\n            item.clear();\n            item.set_number_of_nodes(size);\n\n            // deserialize each node\n            for (unsigned long i = 0; i < item.number_of_nodes(); ++i)\n            {\n                deserialize(item.node(i).data, in);\n\n                unsigned long num_children;\n                deserialize(num_children, in);\n\n                // Add all the edges going to this nodes children nodes\n                for (unsigned long c = 0; c < num_children; ++c)\n                {\n                    unsigned long child_index;\n                    deserialize(child_index, in);\n\n                    item.add_edge(i, child_index);\n\n                    // find the edge we just added\n                    for (unsigned long j = 0; j < item.node(i).number_of_children(); ++j)\n                    {\n                        if (item.node(i).child(j).index() == child_index)\n                        {\n                            deserialize(item.node(i).child_edge(j), in);\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing object of type directed_graph_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                             member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void directed_graph_kernel_1<T,E,mem_manager,is_checked>::\n    set_number_of_nodes (\n        unsigned long new_size\n    )\n    {\n        try\n        {\n            nodes.resize(new_size);\n            for (unsigned long i = 0; i < nodes.size(); ++i)\n            {\n                nodes[i].reset(new node_type);\n                nodes[i]->idx = i;\n            }\n        }\n        catch (...)\n        {\n            clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    bool directed_graph_kernel_1<T,E,mem_manager,is_checked>::\n    has_edge (\n        unsigned long parent_node_index,\n        unsigned long child_node_index\n    ) const\n    {\n        checker::check_has_edge(parent_node_index, child_node_index, *this);\n\n        node_type& n = *nodes[parent_node_index];\n\n        // search all the child nodes to see if there is a link to the right node\n        for (unsigned long i = 0; i < n.children.size(); ++i)\n        {\n            if (n.children[i]->idx == child_node_index)\n                return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void directed_graph_kernel_1<T,E,mem_manager,is_checked>::\n    add_edge (\n        unsigned long parent_node_index,\n        unsigned long child_node_index\n    )\n    {\n        checker::check_add_edge(parent_node_index, child_node_index, *this);\n        try\n        {\n            node_type& p = *nodes[parent_node_index];\n            node_type& c = *nodes[child_node_index];\n\n            p.children.push_back(&c);\n            c.parents.push_back(&p);\n\n            p.edge_children.push_back(shared_ptr<E>(new E));\n            c.edge_parents.push_back(p.edge_children.back());\n        }\n        catch (...)\n        {\n            clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void directed_graph_kernel_1<T,E,mem_manager,is_checked>::\n    remove_edge (\n        unsigned long parent_node_index,\n        unsigned long child_node_index\n    )\n    {\n        checker::check_remove_edge(parent_node_index, child_node_index, *this);\n\n        node_type& p = *nodes[parent_node_index];\n        node_type& c = *nodes[child_node_index];\n\n        // remove the record of the link from the parent node\n        unsigned long pos = static_cast<unsigned long>(find( p.children.begin(),\n                                  p.children.end(),\n                                  &c) - p.children.begin());\n        p.children.erase(p.children.begin()+pos);\n        p.edge_children.erase(p.edge_children.begin()+pos);\n\n        // remove the record of the link from the child node\n        pos = static_cast<unsigned long>(find( c.parents.begin(),\n                  c.parents.end(),\n                  &p) - c.parents.begin());\n        c.parents.erase(c.parents.begin() + pos);\n        c.edge_parents.erase(c.edge_parents.begin() + pos);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    unsigned long directed_graph_kernel_1<T,E,mem_manager,is_checked>::\n    add_node (\n    )\n    {\n        try\n        {\n            shared_ptr<node_type> n(new node_type);\n            n->idx = nodes.size();\n            nodes.push_back(n);\n            return n->idx;\n        }\n        catch (...)\n        {\n            clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void directed_graph_kernel_1<T,E,mem_manager,is_checked>::\n    remove_node (\n        unsigned long index\n    )\n    {\n        checker::check_remove_node(index,*this);\n\n        node_type& n = *nodes[index];\n\n        // remove all edges pointing to this node from its parents \n        for (unsigned long i = 0; i < n.parents.size(); ++i)\n        {\n            // remove the edge from this specific parent\n            unsigned long pos = static_cast<unsigned long>(find(n.parents[i]->children.begin(), \n                     n.parents[i]->children.end(), \n                     &n) - n.parents[i]->children.begin());\n\n            n.parents[i]->children.erase(n.parents[i]->children.begin() + pos);\n            n.parents[i]->edge_children.erase(n.parents[i]->edge_children.begin() + pos);\n        }\n\n        // remove all edges pointing to this node from its children \n        for (unsigned long i = 0; i < n.children.size(); ++i)\n        {\n            // remove the edge from this specific child \n            unsigned long pos = static_cast<unsigned long>(find(n.children[i]->parents.begin(),\n                     n.children[i]->parents.end(),\n                     &n) - n.children[i]->parents.begin());\n\n            n.children[i]->parents.erase(n.children[i]->parents.begin() + pos);\n            n.children[i]->edge_parents.erase(n.children[i]->edge_parents.begin() + pos);\n        }\n\n        // now remove this node by replacing it with the last node in the nodes vector\n        nodes[index] = nodes[nodes.size()-1];\n\n        // update the index for the node we just moved\n        nodes[index]->idx = index;\n\n        // now remove the duplicated node at the end of the vector\n        nodes.pop_back();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DIRECTED_GRAPH_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/directed_graph/directed_graph_kernel_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_DIRECTED_GRAPH_KERNEl_ABSTRACT_\n#ifdef DLIB_DIRECTED_GRAPH_KERNEl_ABSTRACT_\n\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include \"../noncopyable.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename E = char,\n        typename mem_manager = default_memory_manager \n        >\n    class directed_graph : noncopyable\n    {\n\n        /*!\n            REQUIREMENTS ON T \n                T must be swappable by a global swap() and\n                T must have a default constructor\n\n            REQUIREMENTS ON E \n                E must be swappable by a global swap() and\n                E must have a default constructor\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                The only time pointers or references to nodes or edges become invalid is when\n                they reference nodes or edges that have been removed from a graph.\n\n            INITIAL VALUE\n                number_of_nodes() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a directed graph which is a set of nodes with directed\n                edges connecting various nodes.  \n\n                In this object if there is a directed edge from a node A to a node B then I say \n                that A is the parent of B and B is the child of A.\n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n        !*/\n\n    public:\n\n        typedef T type;\n        typedef E edge_type;\n        typedef mem_manager mem_manager_type;\n\n        template <typename Tr, typename Er, typename MMr>\n        struct rebind {\n            typedef directed_graph<Tr,Er,MMr> other;\n        };\n\n        directed_graph(\n        );\n        /*!\n            ensures \n                - #*this is properly initialized\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n        !*/\n\n        virtual ~directed_graph(\n        ); \n        /*!\n            ensures\n                - all resources associated with *this has been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                  If this exception is thrown then *this is unusable \n                  until clear() is called and succeeds\n        !*/\n\n        void set_number_of_nodes (\n            unsigned long new_size\n        );\n        /*!\n            ensures\n                - #number_of_nodes() == new_size\n                - for all i < new_size:\n                    - number_of_parents(i) == 0\n                    - number_of_children(i) == 0\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        unsigned long number_of_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of nodes in this graph\n        !*/\n\n        struct node_type\n        {\n            T data;\n            typedef directed_graph graph_type;\n\n            unsigned long index(\n            ) const;\n            /*!\n                ensures\n                    - let G be the graph that contains the node *this\n                    - returns a number N such that G.node(N) == *this\n                      (i.e. returns the index of this node in the graph)\n            !*/\n\n            unsigned long number_of_parents (\n            ) const;\n            /*!\n                ensures\n                    - returns the number of parents of this node \n            !*/\n\n            unsigned long number_of_children (\n            ) const;\n            /*!\n                ensures\n                    - returns the number of children of this node \n            !*/\n\n            const node_type& parent (\n                unsigned long edge_index\n            ) const;\n            /*!\n                requires\n                    - edge_index < number_of_parents()\n                ensures\n                    - returns a const reference to the edge_index'th parent of *this\n            !*/\n\n            node_type& parent (\n                unsigned long edge_index\n            );\n            /*!\n                requires\n                    - edge_index < number_of_parents()\n                ensures\n                    - returns a non-const reference to the edge_index'th parent of *this\n            !*/\n\n            const node_type& child (\n                unsigned long edge_index\n            ) const;\n            /*!\n                requires\n                    - edge_index < number_of_children()\n                ensures\n                    - returns a const reference to the edge_index'th child of *this\n            !*/\n\n            node_type& child (\n                unsigned long edge_index\n            );\n            /*!\n                requires\n                    - edge_index < number_of_children()\n                ensures\n                    - returns a non-const reference to the edge_index'th child of *this\n            !*/\n\n            const E& parent_edge (\n                unsigned long edge_index\n            ) const;\n            /*!\n                requires\n                    - edge_index < number_of_parents()\n                ensures\n                    - returns a const reference to the edge_index'th edge data for the\n                      edge connecting to node this->parent(edge_index)\n            !*/\n\n            E& parent_edge (\n                unsigned long edge_index\n            );\n            /*!\n                requires\n                    - edge_index < number_of_parents()\n                ensures\n                    - returns a non-const reference to the edge_index'th edge data for the\n                      edge connecting to node this->parent(edge_index)\n            !*/\n\n            const E& child_edge (\n                unsigned long edge_index\n            ) const;\n            /*!\n                requires\n                    - edge_index < number_of_children()\n                ensures\n                    - returns a const reference to the edge_index'th edge data for the\n                      edge connecting to node this->child(edge_index)\n            !*/\n\n            E& child_edge (\n                unsigned long edge_index\n            );\n            /*!\n                requires\n                    - edge_index < number_of_children()\n                ensures\n                    - returns a non-const reference to the edge_index'th edge data for the\n                      edge connecting to node this->child(edge_index)\n            !*/\n        };\n\n        node_type& node (\n            unsigned long index\n        );\n        /*!\n            requires\n                - index < number_of_nodes()\n            ensures\n                - returns a non-const reference to the node with the given index\n        !*/\n\n        const node_type& node (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < number_of_nodes()\n            ensures\n                - returns a const reference to the node with the given index\n        !*/\n\n        bool has_edge (\n            unsigned long parent_node_index,\n            unsigned long child_node_index\n        ) const;\n        /*!\n            requires\n                - parent_node_index < number_of_nodes()\n                - child_node_index < number_of_nodes()\n            ensures\n                - if (there is an edge leading from node(parent_node_index) to\n                  node(child_node_index)) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void add_edge (\n            unsigned long parent_node_index,\n            unsigned long child_node_index\n        );\n        /*!\n            requires\n                - parent_node_index < number_of_nodes()\n                - child_node_index < number_of_nodes()\n                - has_edge(parent_node_index, child_node_index) == false\n            ensures\n                - #has_edge(parent_node_index, child_node_index) == true \n            throws\n                - std::bad_alloc \n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        void remove_edge (\n            unsigned long parent_node_index,\n            unsigned long child_node_index\n        );\n        /*!\n            requires\n                - parent_node_index < number_of_nodes()\n                - child_node_index < number_of_nodes()\n                - has_edge(parent_node_index, child_node_index) == true \n            ensures\n                - #has_edge(parent_node_index, child_node_index) == false \n            throws\n                - std::bad_alloc \n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        unsigned long add_node (\n        );\n        /*!\n            ensures\n                - does not change the index number of existing nodes\n                - adds a node with index N == number_of_nodes() such that:\n                    - #node(N).number_of_parents() == 0 \n                    - #node(N).number_of_children() == 0 \n                    - #number_of_nodes() == number_of_nodes() + 1\n                    - returns N  \n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        void remove_node (\n            unsigned long index\n        );\n        /*!\n            requires\n                - index < number_of_nodes()\n            ensures\n                - removes the node with the given index from the graph. \n                - removes all edges linking the removed node to the rest\n                  of the graph.\n                - the remaining node indexes are remapped so that they remain\n                  contiguous.  (This means that for all valid N, node(N) doesn't\n                  necessarily reference the same node as #node(N))\n                - #number_of_nodes() == number_of_nodes() - 1\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        void swap (\n            directed_graph& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    };\n\n    template <\n        typename T, \n        typename mem_manager\n        >\n    inline void swap (\n        directed_graph<T,mem_manager>& a, \n        directed_graph<T,mem_manager>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void serialize (\n        const directed_graph<T,mem_manager>& item,\n        std::ostream& out \n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        directed_graph<T,mem_manager>& item,\n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n}\n\n#endif // DLIB_DIRECTED_GRAPH_KERNEl_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/directed_graph.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DIRECTED_GRAPh_\n#define DLIB_DIRECTED_GRAPh_\n\n#include \"directed_graph/directed_graph_kernel_1.h\"\n\n#include \"algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename E = char,\n        typename mem_manager = default_memory_manager\n        >\n    class directed_graph \n    {\n        directed_graph() {}\n    public:\n                \n\n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     directed_graph_kernel_1<T,E,mem_manager,false>    \n                    kernel_1a;\n        typedef     directed_graph_kernel_1<T,E,mem_manager,true>    \n                    kernel_1a_c;\n \n    };\n}\n\n#endif // DLIB_DIRECTED_GRAPh_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/disjoint_subsets/disjoint_subsets.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DISJOINT_SUBsETS_Hh_\n#define DLIB_DISJOINT_SUBsETS_Hh_\n\n#include \"disjoint_subsets_abstract.h\"\n#include <vector>\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class disjoint_subsets\n    {\n    public:\n\n        void clear (\n        )\n        {\n            items.clear();\n        }\n\n        void set_size (\n            unsigned long new_size\n        )\n        {\n            items.resize(new_size);\n            for (unsigned long i = 0; i < items.size(); ++i)\n            {\n                items[i].parent = i;\n                items[i].rank = 0;\n            }\n        }\n\n        unsigned long size (\n        ) const\n        {\n            return items.size();\n        }\n\n        unsigned long find_set (\n            unsigned long item \n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(item < size(), \n                \"\\t unsigned long disjoint_subsets::find_set()\"\n                << \"\\n\\t item must be less than size()\"\n                << \"\\n\\t item: \" << item \n                << \"\\n\\t size(): \" << size() \n                << \"\\n\\t this: \" << this\n                );\n\n            if (items[item].parent == item)\n            {\n                return item;\n            }\n            else\n            {\n                // find root of item\n                unsigned long x = item;\n                do\n                {\n                    x = items[x].parent;\n                } while (items[x].parent != x);\n\n                // do path compression\n                const unsigned long root = x;\n                x = item;\n                while (items[x].parent != x)\n                {\n                    const unsigned long prev = x;\n                    x = items[x].parent;\n                    items[prev].parent = root;\n                }\n\n                return root;\n            }\n        }\n\n        unsigned long merge_sets (\n            unsigned long a,\n            unsigned long b\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(a != b &&\n                        a < size() &&\n                        b < size() && \n                        find_set(a) == a &&\n                        find_set(b) == b,\n                \"\\t unsigned long disjoint_subsets::merge_sets(a,b)\"\n                << \"\\n\\t invalid arguments were given to this function\"\n                << \"\\n\\t a: \" << a \n                << \"\\n\\t b: \" << b \n                << \"\\n\\t size(): \" << size() \n                << \"\\n\\t find_set(a): \" << find_set(a) \n                << \"\\n\\t find_set(b): \" << find_set(b) \n                << \"\\n\\t this: \" << this\n                );\n\n            if (items[a].rank > items[b].rank)\n            {\n                items[b].parent = a;\n                return a;\n            }\n            else\n            {\n                items[a].parent = b;\n                if (items[a].rank == items[b].rank)\n                {\n                    items[b].rank = items[b].rank + 1;\n                }\n                return b;\n            }\n        }\n\n    private:\n\n        /*\n            See the book Introduction to Algorithms by Cormen, Leiserson, Rivest and Stein\n            for a discussion of how this algorithm works.\n        */\n\n        struct data\n        {\n            unsigned long rank;\n            unsigned long parent;\n        };\n\n        mutable std::vector<data> items;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DISJOINT_SUBsETS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/disjoint_subsets/disjoint_subsets_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_DISJOINT_SUBsETS_ABSTRACT_Hh_\n#ifdef DLIB_DISJOINT_SUBsETS_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class disjoint_subsets\n    {\n        /*!\n            INITIAL VALUE\n                - size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a set of integers which is partitioned into\n                a number of disjoint subsets.  It supports the two fundamental operations\n                of finding which subset a particular integer belongs to as well as \n                merging subsets.\n        !*/\n    public:\n\n        void clear (\n        );\n        /*!\n            ensures\n                - #size() == 0\n                - returns this object to its initial value\n        !*/\n\n        void set_size (\n            unsigned long new_size\n        );\n        /*!\n            ensures\n                - #size() == new_size\n                - for all valid i:\n                    - #find_set(i) == i\n                      (i.e. this object contains new_size subsets, each containing exactly one element)\n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns the total number of integer elements represented\n                  by this object.  \n        !*/\n\n        unsigned long find_set (\n            unsigned long item \n        ) const;\n        /*!\n            requires\n                - item < size()\n            ensures\n                - Each disjoint subset can be represented by any of its elements (since \n                  the sets are all disjoint).  In particular, for each subset we define \n                  a special \"representative element\" which is used to represent it.  \n                  Therefore, this function returns the representative element for the \n                  set which contains item.\n                - find_set(find_set(item)) == find_set(item)\n                - Note that if A and B are both elements of the same subset then we always\n                  have find_set(A) == find_set(B).  \n        !*/\n\n        unsigned long merge_sets (\n            unsigned long a,\n            unsigned long b\n        );\n        /*!\n            requires\n                - a != b\n                - a < size()\n                - b < size()\n                - find_set(a) == a\n                  (i.e. a is the representative element of some set)\n                - find_set(b) == b\n                  (i.e. b is the representative element of some set)\n            ensures\n                - #find_set(a) == #find_set(b)\n                  (i.e. merges the set's containing a and b)\n                - returns #find_set(a)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DISJOINT_SUBsETS_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/disjoint_subsets.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DISJOINt_SUBSETS_\n#define DLIB_DISJOINt_SUBSETS_\n\n\n#include \"disjoint_subsets/disjoint_subsets.h\"\n\n#endif // DLIB_DISJOINt_SUBSETS_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/dlib_include_path_tutorial.txt",
    "content": "#error \"Don't put the dlib folder in your include path\"\n/*\n  You are getting this error because you have added the dlib folder to your\n  compiler's include search path.  \n\n  You should *NOT* add the dlib folder itself to your compiler's include path. \n  Doing so will cause the build to fail because of name collisions (such as \n  dlib/string.h and string.h from the standard library). Instead you should \n  add the folder that contains the dlib folder to your include search path \n  and then use include statements of the form #include <dlib/queue.h> or\n  #include \"dlib/queue.h\".  This will ensure that everything builds correctly.\n\n  XCode:\n  \tThe XCode IDE often puts all folders that it knows about into \n\tthe compiler search path.  So if you are using XCode then either \n\tdon't drag the whole dlib folder into the project or alternatively \n\tmodify your XCode project settings to not auto-add all folders to \n\tthe include path.  Instead just make sure that the dlib folder is \n\titself inside a folder in your include path.  \n*/\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/enable_if.h",
    "content": "// Boost enable_if library\n\n// Copyright 2003 (C) The Trustees of Indiana University.\n\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n//    Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)\n//             Jeremiah Willcock (jewillco at osl.iu.edu)\n//             Andrew Lumsdaine (lums at osl.iu.edu)\n\n#ifndef DLIB_BOOST_UTILITY_ENABLE_IF_HPP\n#define DLIB_BOOST_UTILITY_ENABLE_IF_HPP\n\n\n#ifndef BOOST_UTILITY_ENABLE_IF_HPP\n#define BOOST_UTILITY_ENABLE_IF_HPP\n\n// Even the definition of enable_if causes problems on some compilers,\n// so it's macroed out for all compilers that do not support SFINAE\n\n#ifndef BOOST_NO_SFINAE\n\nnamespace boost\n{\n \n  template <bool B, class T = void>\n  struct enable_if_c {\n    typedef T type;\n  };\n\n  template <class T>\n  struct enable_if_c<false, T> {};\n\n  template <class Cond, class T = void> \n  struct enable_if : public enable_if_c<Cond::value, T> {};\n\n  template <bool B, class T>\n  struct lazy_enable_if_c {\n    typedef typename T::type type;\n  };\n\n  template <class T>\n  struct lazy_enable_if_c<false, T> {};\n\n  template <class Cond, class T> \n  struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};\n\n\n  template <bool B, class T = void>\n  struct disable_if_c {\n    typedef T type;\n  };\n\n  template <class T>\n  struct disable_if_c<true, T> {};\n\n  template <class Cond, class T = void> \n  struct disable_if : public disable_if_c<Cond::value, T> {};\n\n  template <bool B, class T>\n  struct lazy_disable_if_c {\n    typedef typename T::type type;\n  };\n\n  template <class T>\n  struct lazy_disable_if_c<true, T> {};\n\n  template <class Cond, class T> \n  struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};\n\n} // namespace boost\n\n#else\n\nnamespace boost \n{\n\n  namespace detail { typedef void enable_if_default_T; }\n\n  template <typename T>\n  struct enable_if_does_not_work_on_this_compiler;\n\n  template <bool B, class T = detail::enable_if_default_T>\n  struct enable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T> \n  struct disable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T> \n  struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T> \n  struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct enable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct disable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct lazy_enable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct lazy_disable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n} // namespace boost\n\n#endif // BOOST_NO_SFINAE\n\n#endif // BOOST_UTILITY_ENABLE_IF_HPP\n\nnamespace dlib\n{\n  using boost::enable_if_c;\n  using boost::enable_if_c;\n  using boost::enable_if;\n  using boost::lazy_enable_if_c;\n  using boost::lazy_enable_if_c;\n  using boost::lazy_enable_if;\n  using boost::disable_if_c;\n  using boost::disable_if_c;\n  using boost::disable_if;\n  using boost::lazy_disable_if_c;\n  using boost::lazy_disable_if_c;\n  using boost::lazy_disable_if;\n}\n\n#endif // DLIB_BOOST_UTILITY_ENABLE_IF_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder/entropy_decoder_kernel_1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_KERNEL_1_CPp_\n#define DLIB_ENTROPY_DECODER_KERNEL_1_CPp_\n#include \"entropy_decoder_kernel_1.h\"\n#include <iostream>\n#include <streambuf>\n#include <sstream>\n\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    entropy_decoder_kernel_1::\n    entropy_decoder_kernel_1(\n    ) :\n        initial_low(0x00000001),\n        initial_high(0xffffffff),\n        in(0),\n        low(initial_low),\n        high(initial_high),\n        buf(0),\n        buf_used(0),\n        target(0x00000000),\n        r(0)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    entropy_decoder_kernel_1::\n    ~entropy_decoder_kernel_1 (\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_decoder_kernel_1::\n    clear(\n    )\n    {\n        in       = 0;\n        buf_used = 0;\n        buf      = 0;\n        r        = 0;\n        low      = initial_low;\n        high     = initial_high;\n        target   = 0x00000000;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_decoder_kernel_1::\n    set_stream (\n        std::istream& in_\n    )\n    {\n        buf_used = 0;\n        buf      = 0;\n        r        = 0;\n        low      = initial_low;\n        high     = initial_high;\n        target   = 0x00000000;\n\n        in = &in_;\n        streambuf = in_.rdbuf();\n\n\n\n        unsigned char ch;\n\n        \n        streambuf->sgetn((char*)&ch,1);\n        target = ch;\n        \n        target <<= 8;\n        if (streambuf->sgetn((char*)&ch,1))\n            target += ch;\n\n\n        target <<= 8;\n        if (streambuf->sgetn((char*)&ch,1))\n            target += ch;\n\n\n        target <<= 8;\n        if (streambuf->sgetn((char*)&ch,1))\n            target += ch;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool entropy_decoder_kernel_1::\n    stream_is_set (\n    ) const\n    {\n        if (in != 0)\n            return true;\n        else\n            return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::istream& entropy_decoder_kernel_1::\n    get_stream (\n    ) const\n    {\n        return *in;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_decoder_kernel_1::\n    decode (\n        uint32 low_count,\n        uint32 high_count\n    )\n    {\n        // note that we must subtract 1 to preserve the convention that\n        // high == the real upper range - 1\n        high = low + r*high_count - 1;\n        low = low + r*low_count;\n        r = 0;\n\n\n\n        while (true)\n        {\n\n            // if the highest order bit in high and low is the same\n            if ( low >= 0x80000000 || high < 0x80000000)\n            {\n                // make sure buf isn't empty\n                if (buf_used == 0)\n                {\n                    buf_used = 8;\n                    if (streambuf->sgetn(reinterpret_cast<char*>(&buf),1)==0)\n                    {\n                        // if there isn't anything else in the streambuffer then just\n                        // make buf zero.  \n                        buf = 0;      \n                    }\n                }\n\n                // we will be taking one bit from buf to replace the one we threw away\n                --buf_used;\n\n                // roll off the bit in target\n                target <<= 1;  \n\n                // roll off the bit\n                high <<= 1;\n                low <<= 1;                \n                high |= 1;  // note that it is ok to add one to high here because\n                            // of the convention that high == real upper range - 1.\n                            // so that means that if we want to shift the upper range\n                            // left by one then we must shift a one into high also\n                            // since real upper range == high + 0.999999999...\n\n                // make sure low is never zero\n                if (low == 0)\n                    low = 1;\n\n                  // take a bit from buf to fill in the one we threw away                \n                target += (buf>>buf_used)&0x01;   \n            }\n            // if the distance between high and low is small and there aren't\n            // any bits we can roll off then round low up or high down.\n            else if (high-low < 0x10000)\n            {\n                if (high == 0x80000000)\n                    high = 0x7fffffff;\n                else\n                    low = 0x80000000;\n            }\n            else\n            {\n                break;\n            }\n        } // while (true)\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool entropy_decoder_kernel_1::\n    get_target_called (        \n    ) const\n    {           \n        return (r != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    uint32 entropy_decoder_kernel_1::\n    get_target (\n        uint32 total\n    ) \n    {   \n        // note that we must add one because of the convention that\n        // high == the real upper range minus 1\n        r = (high-low+1)/total;                   \n        uint32 temp = (target-low)/r;\n        if (temp < total)\n            return temp;\n        else\n            return total-1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif // DLIB_ENTROPY_DECODER_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder/entropy_decoder_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_KERNEl_1_\n#define DLIB_ENTROPY_DECODER_KERNEl_1_\n\n#include \"../algs.h\"\n#include \"entropy_decoder_kernel_abstract.h\"\n#include <iosfwd>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n    class entropy_decoder_kernel_1 \n    {\n        /*!\n            GENERAL NOTES\n                this decoder is implemented using arithmetic coding\n\n            INITIAL VALUE\n                in       == 0\n                buf_used == 0\n                buf      == 0\n                initial_low      == 0x00000001  (slightly more than zero)\n                initial_high     == 0xffffffff  (slightly less than one, 0.99999999976717)\n                target   == 0x00000000  (zero)\n                low      == initial_low\n                high     == initial_high\n                r        == 0\n\n            CONVENTION\n                if (in != 0)\n                    *in       == get_stream()\n                    true      == stream_is_set()\n                    streambuf == in->rdbuf()\n                else\n                    false   == stream_is_set()\n\n                buf      == used to hold fractional byte values which are fed to target.  \n                buf_used == the number of low order bits in buf that are currently \n                            in use\n                low      == the low end of the range used for arithmetic encoding.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so it is\n                            always in the range [0,1)\n\n                            low is also never allowed to be zero to avoid overflow\n                            in the calculation (high-low+1)/total.\n\n                high     == the high end of the range - 1 used for arithmetic encoding.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so when we\n                            interpret high as a real number then it is always in the\n                            range [0,1)\n\n                            the range for arithmetic encoding is always \n                            [low,high + 0.9999999...)   the 0.9999999... is why\n                            high == real upper range - 1\n\n                target  ==  32 bits of the fraction produced from an arithmetic encoder.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so it is\n                            always in the range [0,1)      \n\n                r       ==  the value (high-low+1)/total from the last call to \n                            get_target() or 0 if get_target_called() should be false\n\n                get_target_called() == (r != 0)\n\n        !*/\n\n    public:\n\n        entropy_decoder_kernel_1 (\n        );\n\n        virtual ~entropy_decoder_kernel_1 (\n        );\n\n        void clear(\n        );\n\n        void set_stream (\n            std::istream& in\n        );\n\n        bool stream_is_set (\n        ) const;\n\n        std::istream& get_stream (\n        ) const;\n\n        void decode (\n            uint32 low_count,\n            uint32 high_count\n        );\n\n        bool get_target_called (\n        ) const;\n\n        uint32 get_target (\n            uint32 total\n        );\n\n    private:\n\n        // restricted functions\n        entropy_decoder_kernel_1(entropy_decoder_kernel_1&);        // copy constructor\n        entropy_decoder_kernel_1& operator=(entropy_decoder_kernel_1&);    // assignment operator\n\n        // data members\n        const uint32 initial_low;\n        const uint32 initial_high;\n        std::istream* in;\n        uint32 low;\n        uint32 high;\n        unsigned char buf; \n        uint32 buf_used; \n        uint32 target;\n        uint32 r;\n        std::streambuf* streambuf;\n\n    };   \n\n}\n\n#ifdef NO_MAKEFILE\n#include \"entropy_decoder_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_ENTROPY_DECODER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder/entropy_decoder_kernel_2.cpp",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_KERNEL_2_CPp_\n#define DLIB_ENTROPY_DECODER_KERNEL_2_CPp_\n#include \"entropy_decoder_kernel_2.h\"\n#include <iostream>\n#include <streambuf>\n#include <sstream>\n\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    entropy_decoder_kernel_2::\n    entropy_decoder_kernel_2(\n    ) :\n        initial_low(0x00000001),\n        initial_high(0xffffffff),\n        in(0),\n        low(initial_low),\n        high(initial_high),\n        target(0x00000000),\n        r(0)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    entropy_decoder_kernel_2::\n    ~entropy_decoder_kernel_2 (\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_decoder_kernel_2::\n    clear(\n    )\n    {\n        in       = 0;\n        r        = 0;\n        low      = initial_low;\n        high     = initial_high;\n        target   = 0x00000000;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_decoder_kernel_2::\n    set_stream (\n        std::istream& in_\n    )\n    {\n        r        = 0;\n        low      = initial_low;\n        high     = initial_high;\n        target   = 0x00000000;\n\n        in = &in_;\n        streambuf = in_.rdbuf();\n\n\n\n        unsigned char ch;\n\n        \n        streambuf->sgetn((char*)&ch,1);\n        target = ch;\n        \n        target <<= 8;\n        if (streambuf->sgetn((char*)&ch,1))\n            target += ch;\n\n\n        target <<= 8;\n        if (streambuf->sgetn((char*)&ch,1))\n            target += ch;\n\n\n        target <<= 8;\n        if (streambuf->sgetn((char*)&ch,1))\n            target += ch;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool entropy_decoder_kernel_2::\n    stream_is_set (\n    ) const\n    {\n        if (in != 0)\n            return true;\n        else\n            return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::istream& entropy_decoder_kernel_2::\n    get_stream (\n    ) const\n    {\n        return *in;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_decoder_kernel_2::\n    decode (\n        uint32 low_count,\n        uint32 high_count\n    )\n    {\n        // note that we must subtract 1 to preserve the convention that\n        // high == the real upper range - 1\n        high = low + r*high_count - 1;\n        low = low + r*low_count;\n        r = 0;\n\n\n        while (true )\n        {\n\n            // if high and low don't have the same 8 high order bits\n            if ((high&0xFF000000) != (low&0xFF000000)) \n            {   \n                // if the distance between high and low is small and there aren't\n                // any bits we can roll off then force high and low to have common high \n                // order bits.\n                if ((high-low < 0x10000))\n                {\n                    if (high-low > 0x1000)\n                    {\n                        high>>=1;\n                        low>>=1;\n                        high = low = high+low;\n                        high += 0xFF;\n                        low -= 0xFF;\n                    } \n                    else /**/\n                    {\n                        high>>=1;\n                        low>>=1;\n                        high = low = high+low;\n                    }\n                }\n                else\n                {\n                    // there are no bits to roll off and high and low are not\n                    // too close so just quit the loop\n                    break;\n                }\n                \n            }  \n            // else if there are 8 bits we can roll off\n            else\n            {\n                unsigned char buf;\n                if (streambuf->sgetn(reinterpret_cast<char*>(&buf),1)==0)\n                {\n                    // if there isn't anything else in the streambuffer then just\n                    // make buf zero.  \n                    buf = 0;      \n                }\n\n                // also roll off the bits in target\n                target <<= 8;  \n\n                // roll off the bits\n                high <<= 8;\n                low <<= 8;             \n                high |= 0xFF;  // note that it is ok to add 0xFF to high here because\n                            // of the convention that high == real upper range - 1.\n                            // so that means that if we want to shift the upper range\n                            // left by one then we must shift a one into high also\n                            // since real upper range == high + 0.999999999...\n\n                // make sure low is never zero\n                if (low == 0)\n                    low = 1;\n        \n\n                // put the new bits into target            \n                target |= static_cast<uint32>(buf);               \n            }\n\n        } // while (true)\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool entropy_decoder_kernel_2::\n    get_target_called (        \n    ) const\n    {           \n        return (r != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    uint32 entropy_decoder_kernel_2::\n    get_target (\n        uint32 total\n    ) \n    {   \n        // note that we must add one because of the convention that\n        // high == the real upper range minus 1\n        r = (high-low+1)/total;   \n        uint32 temp = (target-low)/r;\n        if (temp < total)\n            return temp;\n        else\n            return total-1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif // DLIB_ENTROPY_DECODER_KERNEL_2_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder/entropy_decoder_kernel_2.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_KERNEl_2_\n#define DLIB_ENTROPY_DECODER_KERNEl_2_\n\n#include \"../algs.h\"\n#include \"entropy_decoder_kernel_abstract.h\"\n#include <iosfwd>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n    class entropy_decoder_kernel_2 \n    {\n        /*!\n            GENERAL NOTES\n                this decoder is implemented using \"range\" coding\n\n            INITIAL VALUE\n                in       == 0\n                initial_low      == 0x00000001  (slightly more than zero)\n                initial_high     == 0xffffffff  (slightly less than one, 0.99999999976717)\n                target   == 0x00000000  (zero)\n                low      == initial_low\n                high     == initial_high\n                r        == 0\n\n            CONVENTION\n                if (in != 0)\n                    *in       == get_stream()\n                    true      == stream_is_set()\n                    streambuf == in->rdbuf()\n                else\n                    false   == stream_is_set()\n\n\n                low      == the low end of the range used for arithmetic encoding.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so it is\n                            always in the range [0,1)\n\n                            low is also never allowed to be zero to avoid overflow\n                            in the calculation (high-low+1)/total.\n\n                high     == the high end of the range - 1 used for arithmetic encoding.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so when we\n                            interpret high as a real number then it is always in the\n                            range [0,1)\n\n                            the range for arithmetic encoding is always \n                            [low,high + 0.9999999...)   the 0.9999999... is why\n                            high == real upper range - 1\n\n                target  ==  32 bits of the fraction produced from an arithmetic encoder.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so it is\n                            always in the range [0,1)      \n\n                r       ==  the value (high-low+1)/total from the last call to \n                            get_target() or 0 if get_target_called() should be false\n\n                get_target_called() == (r != 0)\n\n        !*/\n\n    public:\n\n        entropy_decoder_kernel_2 (\n        );\n\n        virtual ~entropy_decoder_kernel_2 (\n        );\n\n        void clear(\n        );\n\n        void set_stream (\n            std::istream& in\n        );\n\n        bool stream_is_set (\n        ) const;\n\n        std::istream& get_stream (\n        ) const;\n\n        void decode (\n            uint32 low_count,\n            uint32 high_count\n        );\n\n        bool get_target_called (\n        ) const;\n\n        uint32 get_target (\n            uint32 total\n        );\n\n    private:\n\n        // restricted functions\n        entropy_decoder_kernel_2(entropy_decoder_kernel_2&);        // copy constructor\n        entropy_decoder_kernel_2& operator=(entropy_decoder_kernel_2&);    // assignment operator\n\n        // data members\n        const uint32 initial_low;\n        const uint32 initial_high;\n        std::istream* in;\n        uint32 low;\n        uint32 high;\n        uint32 target;\n        uint32 r;\n        std::streambuf* streambuf;\n\n    };   \n   \n\n}\n\n#ifdef NO_MAKEFILE\n#include \"entropy_decoder_kernel_2.cpp\"\n#endif\n\n#endif // DLIB_ENTROPY_DECODER_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder/entropy_decoder_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ENTROPY_DECODER_KERNEl_ABSTRACT_\n#ifdef DLIB_ENTROPY_DECODER_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n#include <iosfwd>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n    class entropy_decoder \n    {\n        /*!\n            INITIAL VALUE\n                stream_is_set() == false\n                get_target_called() == false\n\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an entropy decoder (could be implemented as an \n                arithmetic decoder for example).    \n                \n                Note that all implementations of entropy_encoder and entropy_decoder \n                are paired. This means that if you use entropy_encoder_kernel_n to \n                encode something then you must use the corresponding \n                entropy_decoder_kernel_n to decode it.\n\n\n                WHERE IS EOF?\n                It is important to note that this object will not give any indication\n                that is has hit the end of the input stream when it occurs.  It is\n                up to you to use some kind of coding scheme to detect this in the\n                compressed data stream.\n\n                Another important thing to know is that decode() must be called\n                exactly the same number of times as encode() and with the same values\n                supplied for TOTAL, high_count, and low_count.  Doing this ensures\n                that the decoder consumes exactly all the bytes from the input \n                stream that were written by the entropy_encoder.\n\n            NOTATION:              \n                At any moment each symbol has a certain probability of appearing in \n                the input stream.  These probabilities may change as each symbol is \n                decoded and the probability model is updated accordingly.\n\n\n                - Before considering current symbol:\n\n                let P(i) be a function which gives the probability of seeing the ith  \n                symbol of an N symbol alphabet. Note that P(i) refers to the probability \n                of seeing the ith symbol WITHOUT considering the symbol currently given \n                by get_target(TOTAL).  ( The domain of P(i) is from 0 to N-1. )\n                \n                for each i: P(i) == COUNT/TOTAL where COUNT and TOTAL are integers\n                and TOTAL is the same number for all P(i) but COUNT may vary.\n                   \n                let LOW_COUNT(i)  be the sum of all P(x)*TOTAL from x == 0 to x == i-1\n                  (note that LOW_COUNT(0) == 0)\n                let HIGH_COUNT(i) be the sum of all P(x)*TOTAL from x == 0 to x == i\n\n\n                - After considering current symbol:\n\n                let #P(i) be a function which gives the probability of seeing the ith\n                symbol after we have updated our probability model to take the symbol\n                given by get_target(TOTAL) into account.\n\n                for each i: #P(i) == #COUNT/#TOTAL where #COUNT and #TOTAL are integers \n                and #TOTAL is the same number for all #P(i) but #COUNT may vary.\n        !*/\n\n    public:\n\n        entropy_decoder (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~entropy_decoder (\n        );\n        /*!\n            ensures\n                - all memory associated with *this has been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n                - if (stream_is_set())\n                    - clears any state accumulated in *this from decoding data from \n                      the stream get_stream()\n            throws\n                - any exception\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void set_stream (\n            std::istream& in\n        );\n        /*!\n            ensures\n                - #*this will read data from in and decode it\n                - #stream_is_set() == true\n                - #get_target() == a number representing the first symbol from in\n                - #get_target_called() == false\n                - if (stream_is_set())\n                    - clears any state accumulated in *this from decoding data from \n                      the stream get_stream()\n            throws\n                - any exception\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        bool stream_is_set (\n        ) const;\n        /*!\n            ensures\n                - returns true if a stream has been associated with *this by calling\n                  set_stream()\n        !*/\n\n        std::istream& get_stream (\n        ) const;\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - returns a reference to the istream object that *this is reading \n                  encoded data from\n        !*/\n\n\n        void decode (\n            uint32 low_count,\n            uint32 high_count\n        );\n        /*!\n            requires\n                - get_target_called() == true\n                - stream_is_set()     == true\n                - low_count  == LOW_COUNT(S) where S is the symbol represented \n                  by get_target(TOTAL)\n                - high_count == HIGH_COUNT(S) where S is the symbol represented \n                  by get_target(TOTAL)\n                - low_count  <= get_target(TOTAL) < high_count <= TOTAL                      \n            ensures\n                - #get_target(#TOTAL) == a number which represents the next symbol\n                - #get_target_called() == false\n            throws\n                - any exception\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        bool get_target_called (\n        ) const;\n        /*!\n            ensures\n                - returns true if get_target() has been called and since then decode()\n                  and set_stream() have not been called\n                - returns false otherwise\n        !*/\n\n        uint32 get_target (\n            uint32 total\n        );\n        /*!\n            requires \n                - 0 < total < 65536 (2^16)     \n                - total == TOTAL\n                - stream_is_set() == true\n            ensures\n                - in the next call to decode() the value of TOTAL will be\n                  considered to be total\n                - #get_target_called() == true\n                - returns a number N such that:\n                    - N is in the range 0 to total - 1\n                    - N represents a symbol S where\n                      LOW_COUNT(S) <= N < HIGH_COUNT(S)\n            throws\n                - any exception\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n    private:\n\n        // restricted functions\n        entropy_decoder(entropy_decoder&);        // copy constructor\n        entropy_decoder& operator=(entropy_decoder&);    // assignment operator\n\n    };   \n   \n}\n\n#endif // DLIB_ENTROPY_DECODER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder/entropy_decoder_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_KERNEl_C_\n#define DLIB_ENTROPY_DECODER_KERNEl_C_\n\n#include \"entropy_decoder_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename decoder\n        >\n    class entropy_decoder_kernel_c : public decoder\n    {\n        \n        public:\n            std::istream& get_stream (\n            ) const;\n\n            void decode (\n                uint32 low_count,\n                uint32 high_count\n            );\n\n            uint32 get_target (\n                uint32 total\n            );\n\n    private:\n        uint32 _get_target;\n        uint32 TOTAL;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename decoder\n        >\n    std::istream& entropy_decoder_kernel_c<decoder>::\n    get_stream (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tstd::istream& entropy_decoder::get_stream()\"\n            << \"\\n\\tyou must set a stream for this object before you can get it\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return decoder::get_stream();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename decoder\n        >\n    void entropy_decoder_kernel_c<decoder>::\n    decode (\n        uint32 low_count,\n        uint32 high_count\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (low_count <= _get_target) && (_get_target < high_count) && \n                (high_count <= TOTAL) &&\n                (this->stream_is_set() == true) && (this->get_target_called() == true),\n            \"\\tvoid entropy_decoder::decode()\"\n            << \"\\n\\tRefer to the ensures clause for this function for further information.\"\n            << \"\\n\\tNote that _get_target refers to get_target(TOTAL)\" \n            << \"\\n\\tthis:                \" << this\n            << \"\\n\\tlow_count:           \" << low_count\n            << \"\\n\\thigh_count:          \" << high_count\n            << \"\\n\\tTOTAL:               \" << TOTAL\n            << \"\\n\\tget_target(TOTAL):   \" << _get_target\n            << \"\\n\\tis_stream_set():     \" << (this->stream_is_set() ? \"true\" : \"false\" )\n            << \"\\n\\tget_target_called(): \" << (this->get_target_called() ? \"true\" : \"false\" )\n            );\n\n        // call the real function\n        decoder::decode(low_count,high_count);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename decoder\n        >\n    uint32 entropy_decoder_kernel_c<decoder>::\n    get_target (\n        uint32 total\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (total > 0) && (total < 65536) && (this->stream_is_set() == true),\n            \"\\tvoid entropy_decoder::get_target()\"\n            << \"\\n\\tyou must set a stream for this object before you can get the \"\n            << \"\\n\\rnext target.\"\n            << \"\\n\\tthis: \" << this\n            << \"\\n\\ttotal: \" << total\n            );\n\n        // call the real function\n        _get_target = decoder::get_target(total);\n        TOTAL = total;\n        return _get_target;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODEr_\n#define DLIB_ENTROPY_DECODEr_\n\n#include \"entropy_decoder/entropy_decoder_kernel_1.h\"\n#include \"entropy_decoder/entropy_decoder_kernel_2.h\"\n#include \"entropy_decoder/entropy_decoder_kernel_c.h\"\n\n\n\n\nnamespace dlib\n{\n\n\n    class entropy_decoder\n    {\n        entropy_decoder() {}\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     entropy_decoder_kernel_1\n                    kernel_1a;\n        typedef     entropy_decoder_kernel_c<kernel_1a>\n                    kernel_1a_c;\n          \n\n        // kernel_2a        \n        typedef     entropy_decoder_kernel_2\n                    kernel_2a;\n        typedef     entropy_decoder_kernel_c<kernel_2a>\n                    kernel_2a_c;\n          \n\n    };\n}\n\n#endif // DLIB_ENTROPY_DECODEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder_model/entropy_decoder_model_kernel_1.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_MODEL_KERNEl_1_\n#define DLIB_ENTROPY_DECODER_MODEL_KERNEl_1_\n\n#include \"../algs.h\"\n#include \"entropy_decoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc\n        >\n    class entropy_decoder_model_kernel_1 \n    {\n        /*!\n            REQUIREMENTS ON cc\n                cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                cc::get_alphabet_size() == alphabet_size+1\n\n            INITIAL VALUE\n                Initially this object's finite context model is empty\n\n            CONVENTION\n                &get_entropy_decoder() == coder\n                &order_0.get_global_state() == &gs\n\n                This is an order-0 model. The last symbol in the order-0 context is \n                an escape into the order minus 1 context.           \n        !*/\n\n    public:\n\n        typedef entropy_decoder entropy_decoder_type;\n\n        entropy_decoder_model_kernel_1 (\n            entropy_decoder& coder\n        );\n\n        virtual ~entropy_decoder_model_kernel_1 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void decode (\n            unsigned long& symbol\n        );\n\n        entropy_decoder& get_entropy_decoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        entropy_decoder& coder;\n        typename cc::global_state_type gs;\n        cc order_0;\n\n        // restricted functions\n        entropy_decoder_model_kernel_1(entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc>&);        // copy constructor\n        entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc>& operator=(entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc\n        >\n    entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc>::\n    entropy_decoder_model_kernel_1 (\n        entropy_decoder& coder_\n    ) : \n        coder(coder_),\n        order_0(gs)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc\n        >\n    entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc>::\n    ~entropy_decoder_model_kernel_1 (\n    )\n    {\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc\n        >\n    void entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc>::\n    clear(\n    )\n    {\n        order_0.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc\n        >\n    void entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc>::\n    decode (\n        unsigned long& symbol\n    )\n    {\n        unsigned long current_symbol, low_count, high_count, target;\n\n        // look in the order-0 context\n        target = coder.get_target(order_0.get_total());\n        order_0.get_symbol(target,current_symbol,low_count,high_count);\n\n\n        // have coder decode the next symbol\n        coder.decode(low_count,high_count);\n\n        // if current_symbol is not an escape from the order-0 context\n        if (current_symbol != alphabet_size)\n        {\n            // update the count for this symbol\n            order_0.increment_count(current_symbol,2);\n\n            symbol = current_symbol;\n            return;\n        }\n\n        // update the count for the escape symbol\n        order_0.increment_count(alphabet_size);\n\n\n        // go into the order minus one context\n        target = coder.get_target(alphabet_size);\n        coder.decode(target,target+1);\n\n\n        // update the count for this symbol in the order-0 context\n        order_0.increment_count(target,2);\n\n        symbol = target;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n  \n}\n\n#endif // DLIB_ENTROPY_DECODER_MODEL_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder_model/entropy_decoder_model_kernel_2.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_MODEL_KERNEl_2_\n#define DLIB_ENTROPY_DECODER_MODEL_KERNEl_2_\n\n#include \"../algs.h\"\n#include \"entropy_decoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename ccbig\n        >\n    class entropy_decoder_model_kernel_2 \n    {\n        /*!\n            REQUIREMENTS ON cc\n                cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                cc::get_alphabet_size() == alphabet_size+1\n                this will be used for the order-0 context\n\n            REQUIREMENTS ON ccbig\n                ccbig is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                ccbig::get_alphabet_size() == alphabet_size+1\n                this will be used for the order-1 context\n\n            INITIAL VALUE\n                Initially this object's finite context model is empty\n                previous_symbol == 0\n\n            CONVENTION\n                &get_entropy_decoder() == coder\n                &order_0.get_global_state() == &gs\n                &order_1[i]->get_global_state() == &gsbig\n\n\n                This is an order-1-0 model. The last symbol in the order-0 and order-1\n                context is an escape into the lower context.        \n\n                previous_symbol == the last symbol seen\n        !*/\n\n    public:\n\n        typedef entropy_decoder entropy_decoder_type;\n\n        entropy_decoder_model_kernel_2 (\n            entropy_decoder& coder\n        );\n\n        virtual ~entropy_decoder_model_kernel_2 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void decode (\n            unsigned long& symbol\n        );\n\n        entropy_decoder& get_entropy_decoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        entropy_decoder& coder;\n        typename cc::global_state_type gs;\n        typename ccbig::global_state_type gsbig;\n        cc order_0;\n        ccbig* order_1[alphabet_size];\n        unsigned long previous_symbol;\n\n\n        // restricted functions\n        entropy_decoder_model_kernel_2(entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc,ccbig>&);        // copy constructor\n        entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc,ccbig>& operator=(entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc,ccbig>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename ccbig\n        >\n    entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc,ccbig>::\n    entropy_decoder_model_kernel_2 (\n        entropy_decoder& coder_\n    ) : \n        coder(coder_),\n        order_0(gs),\n        previous_symbol(0)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535);\n\n        unsigned long i;\n        try\n        {\n            for (i = 0; i < alphabet_size; ++i)\n            {\n                order_1[i] = new ccbig(gsbig);\n            }\n        }\n        catch (...)\n        {\n            for (unsigned long j = 0; j < i; ++j)\n            {\n                delete order_1[j];\n            }\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename ccbig\n        >\n    entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc,ccbig>::\n    ~entropy_decoder_model_kernel_2 (\n    )\n    {\n        for (unsigned long i = 0; i < alphabet_size; ++i)\n        {\n            delete order_1[i];\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename ccbig\n        >\n    void entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc,ccbig>::\n    clear(\n    )\n    {\n        previous_symbol = 0;\n        order_0.clear();\n        for (unsigned long i = 0; i < alphabet_size; ++i)\n        {\n            order_1[i]->clear();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename ccbig\n        >\n    void entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc,ccbig>::\n    decode (\n        unsigned long& symbol\n    )\n    {\n        unsigned long current_symbol, low_count, high_count, target;\n\n        // look in the order-1 context\n        target = coder.get_target(order_1[previous_symbol]->get_total());\n        order_1[previous_symbol]->get_symbol(target,current_symbol,low_count,high_count);\n\n        // have the coder decode the next symbol\n        coder.decode(low_count,high_count);\n\n        // if the current_symbol is not an escape from the order-1 context\n        if (current_symbol != alphabet_size)\n        {\n            symbol = current_symbol;\n            order_1[previous_symbol]->increment_count(current_symbol,2);\n            previous_symbol = current_symbol;\n            return;\n        }\n            \n        // since this is an escape to order-0 we should increment\n        // the escape symbol\n        order_1[previous_symbol]->increment_count(alphabet_size);\n\n\n\n        // look in the order-0 context\n        target = coder.get_target(order_0.get_total());\n        order_0.get_symbol(target,current_symbol,low_count,high_count);\n\n        // have coder decode the next symbol\n        coder.decode(low_count,high_count);\n\n        // if current_symbol is not an escape from the order-0 context\n        if (current_symbol != alphabet_size)\n        {\n            // update the count for this symbol            \n            order_1[previous_symbol]->increment_count(current_symbol,2);\n            order_0.increment_count(current_symbol,2);\n\n            symbol = current_symbol;\n            previous_symbol = current_symbol;\n            return;\n        }\n\n        // update the count for the escape symbol\n        order_0.increment_count(current_symbol);\n\n\n        // go into the order minus one context\n        target = coder.get_target(alphabet_size);\n        coder.decode(target,target+1);\n\n\n        // update the count for this symbol             \n        order_1[previous_symbol]->increment_count(target,2);\n        order_0.increment_count(target,2);\n\n        symbol = target;\n        previous_symbol = target;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n  \n}\n\n#endif // DLIB_ENTROPY_DECODER_MODEL_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder_model/entropy_decoder_model_kernel_3.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_MODEL_KERNEl_3_\n#define DLIB_ENTROPY_DECODER_MODEL_KERNEl_3_\n\n#include \"../algs.h\"\n#include \"entropy_decoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename cc_high\n        >\n    class entropy_decoder_model_kernel_3 \n    {\n        /*!\n            REQUIREMENTS ON cc\n                cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                cc::get_alphabet_size() == alphabet_size+1\n\n            REQUIREMENTS ON cc_high\n                cc_high is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                cc_high::get_alphabet_size() == alphabet_size+1\n\n            INITIAL VALUE\n                - Initially this object's finite context model is empty\n                - previous_symbol == 0\n                - previous_symbol2 == 0\n                - order_1 == pointer to an array of alphabet_size elements\n                - order_2 == pointer to an array of alphabet_size*alphabet_size elements\n                - for all values of i: order_2[i] == 0\n\n            CONVENTION\n                &get_entropy_encoder() == coder\n                &order_0.get_global_state() == &gs\n                &order_1[i]->get_global_state() == &gs\n\n                if (order_2[i] != 0) then\n                    &order_2[i]->get_global_state() == &gs_high\n\n                This is an order-2-1-0 model. The last symbol in the order-2, order-1 and \n                order-0 contexts is an escape into the lower context.\n\n                previous_symbol == the last symbol seen\n                previous_symbol2 == the symbol we saw before previous_symbol\n        !*/\n\n    public:\n\n        typedef entropy_decoder entropy_decoder_type;\n\n        entropy_decoder_model_kernel_3 (\n            entropy_decoder& coder\n        );\n\n        virtual ~entropy_decoder_model_kernel_3 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void decode (\n            unsigned long& symbol\n        );\n\n        entropy_decoder& get_entropy_decoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        entropy_decoder& coder;\n        typename cc::global_state_type gs;\n        typename cc_high::global_state_type gs_high;\n        cc order_0;\n        cc** order_1;\n        unsigned long previous_symbol;\n        cc_high** order_2;\n        unsigned long previous_symbol2;\n\n        // restricted functions\n        entropy_decoder_model_kernel_3(entropy_decoder_model_kernel_3&);        // copy constructor\n        entropy_decoder_model_kernel_3& operator=(entropy_decoder_model_kernel_3&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename cc_high\n        >\n    entropy_decoder_model_kernel_3<alphabet_size,entropy_decoder,cc,cc_high>::\n    entropy_decoder_model_kernel_3 (\n        entropy_decoder& coder_\n    ) : \n        coder(coder_),\n        order_0(gs),\n        order_1(0),\n        previous_symbol(0),\n        order_2(0),\n        previous_symbol2(0)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535);\n\n        try\n        {\n            order_1 = new cc*[alphabet_size];\n            order_2 = new cc_high*[alphabet_size*alphabet_size];\n        }\n        catch (...)\n        {\n            if (order_1) delete [] order_1;\n            if (order_2) delete [] order_2;\n            throw;\n        }\n\n\n        unsigned long i;\n\n        for (i = 0; i < alphabet_size*alphabet_size; ++i)\n        {\n            order_2[i] = 0;\n        }\n\n        try\n        {\n            for (i = 0; i < alphabet_size; ++i)\n            {\n                order_1[i] = new cc(gs);\n            }\n        }\n        catch (...)\n        {\n            for (unsigned long j = 0; j < i; ++j)\n            {\n                delete order_1[j];\n            }\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename cc_high\n        >\n    entropy_decoder_model_kernel_3<alphabet_size,entropy_decoder,cc,cc_high>::\n    ~entropy_decoder_model_kernel_3 (\n    )\n    {\n        for (unsigned long i = 0; i < alphabet_size; ++i)\n        {\n            delete order_1[i];\n        }\n\n        for (unsigned long i = 0; i < alphabet_size*alphabet_size; ++i)\n        {\n            if (order_2[i] != 0)\n                delete order_2[i];\n        }\n        delete [] order_1;\n        delete [] order_2;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename cc_high\n        >\n    void entropy_decoder_model_kernel_3<alphabet_size,entropy_decoder,cc,cc_high>::\n    clear(\n    )\n    {\n        previous_symbol = 0;\n        previous_symbol2 = 0;\n        order_0.clear();\n        for (unsigned long i = 0; i < alphabet_size; ++i)\n        {\n            order_1[i]->clear();\n        }\n\n        for (unsigned long i = 0; i < alphabet_size*alphabet_size; ++i)\n        {\n            if (order_2[i] != 0)\n            {\n                delete order_2[i];\n                order_2[i] = 0;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        typename cc,\n        typename cc_high\n        >\n    void entropy_decoder_model_kernel_3<alphabet_size,entropy_decoder,cc,cc_high>::\n    decode (\n        unsigned long& symbol\n    )\n    {\n        unsigned long current_symbol, low_count, high_count, target;\n\n\n        // look in the order-2 context        \n        unsigned long temp = previous_symbol + (previous_symbol2 * alphabet_size);\n        if (order_2[temp] != 0)\n        {\n            target = coder.get_target(order_2[temp]->get_total());\n            order_2[temp]->get_symbol(target,current_symbol,low_count,high_count);\n\n            // have the coder decode the next symbol\n            coder.decode(low_count,high_count);\n\n            // if the current_symbol is not an escape from the order-2 context\n            if (current_symbol != alphabet_size)\n            {\n                symbol = current_symbol;\n                order_2[temp]->increment_count(current_symbol,2);\n                previous_symbol2 = previous_symbol;\n                previous_symbol = current_symbol;\n                return;\n            }\n\n            // since this is an escape to order-1 we should increment\n            // the escape symbol\n            order_2[temp]->increment_count(alphabet_size);\n        }\n        else\n        {\n            order_2[temp] = new cc_high(gs_high);\n        }\n        \n\n\n\n\n\n        // look in the order-1 context\n        target = coder.get_target(order_1[previous_symbol]->get_total());\n        order_1[previous_symbol]->get_symbol(target,current_symbol,low_count,high_count);\n\n        // have the coder decode the next symbol\n        coder.decode(low_count,high_count);\n\n        // if the current_symbol is not an escape from the order-1 context\n        if (current_symbol != alphabet_size)\n        {\n            symbol = current_symbol;\n            order_2[temp]->increment_count(current_symbol,2);\n            order_1[previous_symbol]->increment_count(current_symbol,2);            \n            previous_symbol2 = previous_symbol;\n            previous_symbol = current_symbol;\n            return;\n        }\n            \n        // since this is an escape to order-0 we should increment\n        // the escape symbol\n        order_1[previous_symbol]->increment_count(alphabet_size);\n\n\n\n        // look in the order-0 context\n        target = coder.get_target(order_0.get_total());\n        order_0.get_symbol(target,current_symbol,low_count,high_count);\n\n        // have coder decode the next symbol\n        coder.decode(low_count,high_count);\n\n        // if current_symbol is not an escape from the order-0 context\n        if (current_symbol != alphabet_size)\n        {\n            // update the count for this symbol\n            order_2[temp]->increment_count(current_symbol,2);            \n            order_1[previous_symbol]->increment_count(current_symbol,2);\n            order_0.increment_count(current_symbol,2);\n            \n\n            symbol = current_symbol;\n            previous_symbol2 = previous_symbol;\n            previous_symbol = current_symbol;\n            return;\n        }\n\n        // update the count for the escape symbol\n        order_0.increment_count(current_symbol);\n\n\n        // go into the order minus one context\n        target = coder.get_target(alphabet_size);\n        coder.decode(target,target+1);\n\n\n        // update the count for this symbol \n        order_2[temp]->increment_count(target,2);            \n        order_1[previous_symbol]->increment_count(target,2);\n        order_0.increment_count(target,2);\n        \n\n        symbol = target;\n        previous_symbol2 = previous_symbol;\n        previous_symbol = target;\n    \n       \n    }\n\n// ----------------------------------------------------------------------------------------\n  \n}\n\n#endif // DLIB_ENTROPY_DECODER_MODEL_KERNEl_3_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder_model/entropy_decoder_model_kernel_4.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_MODEL_KERNEl_4_\n#define DLIB_ENTROPY_DECODER_MODEL_KERNEl_4_\n\n#include \"../algs.h\"\n#include \"entropy_decoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\n\nnamespace dlib\n{\n\n    namespace edmk4\n    {\n        struct node\n        {            \n            node* next;\n            node* child_context;\n            node* parent_context;\n\n            unsigned short symbol;\n            unsigned short count;\n            unsigned short total;\n            unsigned short escapes;\n        };\n    }\n\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    class entropy_decoder_model_kernel_4 \n    {\n        /*!\n            REQUIREMENTS ON total_nodes\n                - 4096 < total_nodes\n                - this is the total number of nodes that we will use in the tree\n\n            REQUIREMENTS ON order\n                - 0 <= order\n                - this is the maximum depth-1 the tree will be allowed to go (note \n                  that the root level is depth 0).  \n\n\n            GENERAL NOTES\n                This implementation follows more or less the implementation \n                strategy laid out by Alistair Moffat in his paper\n                Implementing the PPM data compression scheme.  Published in IEEE \n                Transactions on Communications, 38(11):1917-1921, 1990.\n\n                The escape method used will be method D. \n\n\n            INITIAL VALUE\n                - root == pointer to an array of total_nodes nodes\n                - next_node == 1\n                - cur == root\n                - cur_order = 0\n                - root->next == 0\n                - root->parent_context == 0\n                - root->child_context == 0\n                - root->escapes == 0\n                - root->total == 0\n                - stack_size == 0\n\n            CONVENTION\n                - pop() == stack[stack_size-1] \n                - &get_entropy_decoder() == coder\n                - root == pointer to an array of total_nodes nodes.\n                  this is also the root of the tree.\n\n                - if (next_node < total_nodes) then\n                    - next_node == the next node in root that has not yet been allocated                                \n\n\n                - root->next == 0\n                - root->parent_context == 0\n              \n\n                - for every node in the tree:\n                  {\n                    - NOTATION: \n                        - The \"context\" of a node is the string of symbols seen\n                          when you go from the root of the tree down (down though\n                          child context pointers) to the node, including the symbol at \n                          the node itself.  (note that the context of the root node \n                          is \"\" or the empty string)\n                        - A set of nodes is in the same \"context set\" if all the node's\n                          contexts are of length n and all the node's contexts share\n                          the same prefix of length n-1.\n                        - The \"child context set\" of a node is a set of nodes with\n                          contexts that are one symbol longer and prefixed by the node's \n                          context.  For example, if a node has a context \"abc\" then the \n                          nodes for contexts \"abca\", \"abcb\", \"abcc\", etc. are all in \n                          the child context set of the node.\n                        - The \"parent context\" of a node is the context that is one \n                          symbol shorter than the node's context and includes the \n                          symbol in the node.  So the parent context of a node with \n                          context \"abcd\" would be the context \"bcd\".\n\n\n                    - if (next != 0) then \n                        - next == pointer to the next node in the same context set\n                    - if (child_context != 0) then\n                        - child_context == pointer to the first node of the child \n                          context set for this node.\n                    - if (parent_context != 0) then\n                        - parent_context == pointer to the parent context of this node.\n                    - else\n                        - this node is the root node of the tree\n                  \n\n                    - if (this is not the root node) then\n                        - symbol == the symbol represented with this node\n                        - count == the number of times this symbol has been seen in its\n                          parent context.\n                    - else\n                        - the root doesn't have a symbol.  i.e. the context for the\n                          root node is \"\" or the empty string.\n\n                    - total == The sum of the counts of all the nodes \n                      in the child context set + escapes. \n                    - escapes == the escape count for the context represented\n                      by the node.\n                }\n\n\n                - cur_order < order\n                - cur_order == the depth of the node cur in the tree.\n                  (note that the root node has depth 0)\n                - cur == pointer to the node in the tree who's context matches\n                  the most recent symbols we have seen.\n\n\n        !*/\n\n        typedef edmk4::node node;\n\n    public:\n\n        typedef entropy_decoder entropy_decoder_type;\n\n        entropy_decoder_model_kernel_4 (\n            entropy_decoder& coder\n        );\n\n        virtual ~entropy_decoder_model_kernel_4 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void decode (\n            unsigned long& symbol\n        );\n\n        entropy_decoder& get_entropy_decoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n\n        inline void push (\n            edmk4::node* n\n        );\n        /*!\n            requires\n                - stack_size <= order\n            ensures\n                - #pop() == n\n        !*/\n\n        inline edmk4::node* pop (\n        );\n        /*!\n            requires\n                - stack_size > 0\n            ensures\n                - returns the node at the top of the stack\n        !*/\n\n        inline edmk4::node* allocate_node (\n        );\n        /*!\n            requires\n                - space_left() == true\n            ensures\n                - returns a pointer to a new node\n        !*/\n\n        inline void destroy_tree (\n        );\n        /*!\n            ensures\n                - deallocates all nodes except the root\n                - #root->child_context == 0\n                - #root->escapes == 0\n                - #root->total == 0\n                - #cur == root\n                - #cur_order == 0\n                - #stack_size == 0\n        !*/\n\n\n        inline bool space_left (\n        ) const;\n        /*!\n            ensures\n                - returns true if there is at least 1 free node left.\n                - returns false otherwise\n        !*/\n\n    \n        inline void scale_counts (\n            node* n\n        );\n        /*!\n            ensures\n                - divides all the counts in the child context set of n by 2.\n                - none of the nodes in the child context set will have a count of 0\n        !*/\n\n\n        entropy_decoder& coder;\n        unsigned long next_node;        \n        node* root;\n        node* cur;\n        unsigned long cur_order;\n        node* stack[order+1];\n        unsigned long stack_size;\n\n        // restricted functions\n        entropy_decoder_model_kernel_4(entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>&);        // copy constructor\n        entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>& operator=(entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    entropy_decoder_model_kernel_4 (\n        entropy_decoder& coder_\n    ) : \n        coder(coder_),\n        next_node(1),\n        cur_order(0),\n        stack_size(0)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535);\n        COMPILE_TIME_ASSERT( 4096 < total_nodes );\n\n        root = new node[total_nodes];  \n        cur = root;\n\n        root->child_context = 0;\n        root->escapes = 0;\n        root->next = 0;\n        root->parent_context = 0;\n        root->total = 0; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    ~entropy_decoder_model_kernel_4 (\n    )\n    {\n        delete [] root;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    clear(\n    )\n    {\n        destroy_tree();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    decode (\n        unsigned long& symbol\n    )\n    {        \n        node* temp = cur;\n        cur = 0;\n        unsigned long low_count, high_count, total_count;\n        unsigned long target;\n        node* new_node = 0;\n\n        // local_order will track the level of temp in the tree\n        unsigned long local_order = cur_order;\n\n\n        while (true)\n        {            \n            high_count = 0;\n            if (space_left())\n            {\n                total_count = temp->total;\n                \n                if (total_count > 0)\n                {\n                    // check if we need to scale the counts\n                    if (total_count > 10000)\n                    {\n                        scale_counts(temp);\n                        total_count = temp->total;\n                    }\n\n                    target = coder.get_target(total_count);\n\n                    // find either the symbol we are looking for or the \n                    // end of the context set\n                    node* n = temp->child_context;\n                    node* last = 0;   \n                    while (true)\n                    {\n                        high_count += n->count;\n                        \n                        if (high_count > target || n->next == 0)\n                            break;\n                        last = n;\n                        n = n->next;\n                    }             \n\n                    low_count = high_count - n->count;\n             \n                    // if we found the symbol\n                    if (high_count > target)\n                    {\n                        if (new_node != 0)\n                        {\n                            new_node->parent_context = n;                            \n                        }\n\n                        symbol = n->symbol;\n            \n                        coder.decode(low_count,high_count);\n                        n->count += 8;\n                        temp->total += 8;\n\n                        // move this node to the front \n                        if (last)\n                        {\n                            last->next = n->next;\n                            n->next = temp->child_context;\n                            temp->child_context = n;\n                        }\n\n\n                        if (cur == 0)\n                        {\n                            if (local_order < order)\n                            {\n                                cur_order = local_order+1;\n                                cur = n;\n                            }  \n                            else\n                            {\n                                cur = n->parent_context;\n                                cur_order = local_order;\n                            }\n                        }\n\n                        break;                    \n                     \n                    }\n                    // if we hit the end of the context set without finding the symbol\n                    else\n                    {   \n                        if (new_node != 0)\n                        {\n                            new_node->parent_context = allocate_node();\n                            new_node = new_node->parent_context;\n                        }\n                        else\n                        {\n                            new_node = allocate_node();\n                        }\n\n                        n->next = new_node;\n\n                        // get the escape code\n                        coder.decode(high_count,total_count);\n                    }\n                        \n                } \n                else // if (total_count == 0)\n                {\n                    // this means that temp->child_context == 0 so we should make\n                    // a new node here.\n                    if (new_node != 0)\n                    {\n                        new_node->parent_context = allocate_node();\n                        new_node = new_node->parent_context;\n                    }\n                    else\n                    {\n                        new_node = allocate_node();\n                    }\n\n                    temp->child_context = new_node;\n                }\n\n                if (cur == 0 && local_order < order)\n                {\n                    cur = new_node;\n                    cur_order = local_order+1;\n                }\n\n                // fill out the new node\n                new_node->child_context = 0;\n                new_node->count = 4;\n                new_node->escapes = 0;\n                new_node->next = 0;\n                push(new_node);\n                new_node->total = 0;\n                temp->escapes += 4;\n                temp->total += 8;\n\n              \n                if (temp != root)\n                {\n                    temp = temp->parent_context;\n                    --local_order;\n                    continue;\n                }\n\n                // since this is the root we are going to the order-(-1) context\n                // so we can just take care of that here.\n                target = coder.get_target(alphabet_size);\n                new_node->parent_context = root;\n                coder.decode(target,target+1);\n                symbol = target;\n\n                if (cur == 0)\n                {\n                    cur = root;\n                    cur_order = 0;\n                }                    \n                break;               \n            }\n            else \n            {\n                // there isn't enough space so we should rebuild the tree\n                destroy_tree();\n                temp = cur;\n                local_order = cur_order;\n                cur = 0;        \n                new_node = 0;\n            }\n        } // while (true)\n\n        while (stack_size > 0)\n        {\n            pop()->symbol = static_cast<unsigned short>(symbol);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    edmk4::node* entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    allocate_node (\n    )    \n    {\n        node* temp;\n        temp = root + next_node;\n        ++next_node;\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    destroy_tree (\n    )\n    {        \n        next_node = 1;\n        root->child_context = 0;\n        root->escapes = 0;\n        root->total = 0;\n        cur = root;\n        cur_order = 0;\n        stack_size = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    bool entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    space_left (\n    ) const\n    {\n        return (next_node < total_nodes);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    push (\n        edmk4::node* n\n    )\n    {\n        stack[stack_size] = n;\n        ++stack_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    edmk4::node* entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    pop (\n    )\n    {   \n        --stack_size;\n        return stack[stack_size];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,total_nodes,order>::\n    scale_counts (\n        node* temp\n    )\n    {\n        if (temp->escapes > 1)\n            temp->escapes >>= 1;\n        temp->total = temp->escapes;\n\n        node* n = temp->child_context;\n        while (n != 0)\n        {\n            if (n->count > 1)\n                n->count >>= 1;\n\n            temp->total += n->count;\n            n = n->next;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_DECODER_MODEL_KERNEl_4_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder_model/entropy_decoder_model_kernel_5.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_MODEL_KERNEl_5_\n#define DLIB_ENTROPY_DECODER_MODEL_KERNEl_5_\n\n#include \"../algs.h\"\n#include \"entropy_decoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\n\nnamespace dlib\n{\n\n    namespace edmk5\n    {\n        struct node\n        {            \n            node* next;\n            node* child_context;\n            node* parent_context;\n\n            unsigned short symbol;\n            unsigned short count;\n            unsigned short total;\n            unsigned short escapes;\n        };\n    }\n\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    class entropy_decoder_model_kernel_5 \n    {\n        /*!\n            REQUIREMENTS ON total_nodes\n                - 4096 < total_nodes\n                - this is the total number of nodes that we will use in the tree\n\n            REQUIREMENTS ON order\n                - 0 <= order\n                - this is the maximum depth-1 the tree will be allowed to go (note \n                  that the root level is depth 0).  \n\n\n            GENERAL NOTES\n                This implementation follows more or less the implementation \n                strategy laid out by Alistair Moffat in his paper\n                Implementing the PPM data compression scheme.  Published in IEEE \n                Transactions on Communications, 38(11):1917-1921, 1990.\n\n                The escape method used will be method D. \n\n                This also uses Dmitry Shkarin's Information Inheritance scheme.\n                (described in \"PPM: one step to practicality\" and \"Improving the \n                Efficiency of the PPM Algorithm\")\n\n\n            INITIAL VALUE\n                - root == pointer to an array of total_nodes nodes\n                - next_node == 1\n                - cur == root\n                - cur_order = 0\n                - root->next == 0\n                - root->parent_context == 0\n                - root->child_context == 0\n                - root->escapes == 0\n                - root->total == 0\n                - stack_size == 0\n                - exc_used == false\n                - for all i: exc[i] == 0\n\n            CONVENTION\n                - exc_used == something_is_excluded()\n                - pop() == stack[stack_size-1].n and stack[stack_size-1].nc\n                - is_excluded(symbol) == bit symbol&0x1F from exc[symbol>>5]\n                - &get_entropy_decoder() == coder\n                - root == pointer to an array of total_nodes nodes.\n                  this is also the root of the tree.\n                - if (next_node < total_nodes) then\n                    - next_node == the next node in root that has not yet been allocated                                \n\n                - root->next == 0\n                - root->parent_context == 0\n              \n\n                - for every node in the tree:\n                  {\n                    - NOTATION: \n                        - The \"context\" of a node is the string of symbols seen\n                          when you go from the root of the tree down (down though\n                          child context pointers) to the node, including the symbol at \n                          the node itself.  (note that the context of the root node \n                          is \"\" or the empty string)\n                        - A set of nodes is in the same \"context set\" if all the node's\n                          contexts are of length n and all the node's contexts share\n                          the same prefix of length n-1.\n                        - The \"child context set\" of a node is a set of nodes with\n                          contexts that are one symbol longer and prefixed by the node's \n                          context.  For example, if a node has a context \"abc\" then the \n                          nodes for contexts \"abca\", \"abcb\", \"abcc\", etc. are all in \n                          the child context set of the node.\n                        - The \"parent context\" of a node is the context that is one \n                          symbol shorter than the node's context and includes the \n                          symbol in the node.  So the parent context of a node with \n                          context \"abcd\" would be the context \"bcd\".\n\n\n                    - if (next != 0) then \n                        - next == pointer to the next node in the same context set\n                    - if (child_context != 0) then\n                        - child_context == pointer to the first node of the child \n                          context set for this node.\n                        - escapes > 0 \n                    - if (parent_context != 0) then\n                        - parent_context == pointer to the parent context of this node.\n                    - else\n                        - this node is the root node of the tree\n                  \n\n                    - if (this is not the root node) then\n                        - symbol == the symbol represented with this node\n                        - count == the number of times this symbol has been seen in its\n                          parent context.\n                    - else\n                        - the root doesn't have a symbol.  i.e. the context for the\n                          root node is \"\" or the empty string.\n\n                    - total == The sum of the counts of all the nodes \n                      in the child context set + escapes. \n                    - escapes == the escape count for the context represented\n                      by the node.\n                    - count > 0\n                }\n\n\n                - cur_order < order\n                - cur_order == the depth of the node cur in the tree.\n                  (note that the root node has depth 0)\n                - cur == pointer to the node in the tree who's context matches\n                  the most recent symbols we have seen.\n\n\n        !*/\n\n        typedef edmk5::node node;\n\n    public:\n\n        typedef entropy_decoder entropy_decoder_type;\n\n        entropy_decoder_model_kernel_5 (\n            entropy_decoder& coder\n        );\n\n        virtual ~entropy_decoder_model_kernel_5 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void decode (\n            unsigned long& symbol\n        );\n\n        entropy_decoder& get_entropy_decoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n\n        inline void push (\n            node* n,\n            node* nc\n        );\n        /*!\n            requires\n                - stack_size < order\n            ensures\n                - #pop(a,b): a == n && b == nc\n        !*/\n\n        inline void pop (\n            node*& n,\n            node*& nc\n        );\n        /*!\n            requires\n                - stack_size > 0\n            ensures\n                - returns the two nodes at the top of the stack\n        !*/\n\n        inline edmk5::node* allocate_node (\n        );\n        /*!\n            requires\n                - space_left() == true\n            ensures\n                - returns a pointer to a new node\n        !*/\n\n        inline bool space_left (\n        ) const;\n        /*!\n            ensures\n                - returns true if there is at least 1 free node left.\n                - returns false otherwise\n        !*/\n\n        inline void exclude (\n            unsigned short symbol\n        );\n        /*!\n            ensures\n                - #is_excluded(symbol) == true\n                - #something_is_excluded() == true\n        !*/\n\n        inline bool is_excluded (\n            unsigned short symbol\n        );\n        /*!\n            ensures\n                - if (symbol has been excluded) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        inline bool something_is_excluded (\n        );\n        /*!\n            ensures\n                - returns true if some symbol has been excluded.\n                  returns false otherwise\n        !*/\n\n        inline void clear_exclusions (\n        );\n        /*!\n            ensures\n                - for all symbols #is_excluded(symbol) == false\n                - #something_is_excluded() == false\n        !*/\n\n        inline void scale_counts (\n            node* n\n        );\n        /*!\n            ensures\n                - divides all the counts in the child context set of n by 2.\n                - none of the nodes in the child context set will have a count of 0\n        !*/\n\n        struct nodes\n        {\n            node* n;\n            node* nc;\n        };\n\n        entropy_decoder& coder;\n        unsigned long next_node;        \n        node* root;\n        node* cur;\n        unsigned long cur_order;\n        unsigned long exc[alphabet_size/32+1];\n        nodes stack[order+1];\n        unsigned long stack_size;\n        bool exc_used;\n\n        // restricted functions\n        entropy_decoder_model_kernel_5(entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>&);        // copy constructor\n        entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>& operator=(entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    entropy_decoder_model_kernel_5 (\n        entropy_decoder& coder_\n    ) : \n        coder(coder_),\n        next_node(1),\n        cur_order(0),\n        stack_size(0)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535);\n        COMPILE_TIME_ASSERT( 4096 < total_nodes );\n\n        root = new node[total_nodes];  \n        cur = root;\n\n        root->child_context = 0;\n        root->escapes = 0;\n        root->next = 0;\n        root->parent_context = 0;\n        root->total = 0; \n\n        clear_exclusions();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    ~entropy_decoder_model_kernel_5 (\n    )\n    {\n        delete [] root;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    clear(\n    )\n    {\n        next_node = 1;\n        root->child_context = 0;\n        root->escapes = 0;\n        root->total = 0;\n        cur = root;\n        cur_order = 0;\n        stack_size = 0;\n\n        clear_exclusions();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    decode (\n        unsigned long& symbol\n    )\n    {        \n        node* temp = cur;\n        cur = 0;\n        unsigned long low_count, high_count, total_count;\n        unsigned long target;\n        node* new_node = 0;\n\n        // local_order will track the level of temp in the tree\n        unsigned long local_order = cur_order;\n\n\n        unsigned short c; // c == t(a|sk)\n        unsigned short t; // t == T(sk)\n\n\n        if (something_is_excluded())\n            clear_exclusions();\n\n        while (true)\n        {            \n            high_count = 0;\n            if (space_left())\n            {\n                total_count = temp->total;\n                \n                if (total_count > 0)\n                {\n                    // check if we need to scale the counts\n                    if (total_count > 10000)\n                    {\n                        scale_counts(temp);\n                        total_count = temp->total;\n                    }\n\n                    if (something_is_excluded())\n                    {\n                        node* n = temp->child_context;\n                        total_count = temp->escapes;\n                        while (true)\n                        {\n                            if (is_excluded(n->symbol) == false)\n                            {\n                                total_count += n->count;\n                            }\n                            if (n->next == 0)\n                                break;\n                            n = n->next;\n                        }\n                    }\n                   \n\n\n                    target = coder.get_target(total_count);\n\n                    // find either the symbol we are looking for or the \n                    // end of the context set\n                    node* n = temp->child_context;\n                    node* last = 0;   \n                    while (true)\n                    {\n                        if (is_excluded(n->symbol) == false)\n                        {\n                            high_count += n->count;\n                            exclude(n->symbol);\n                        }\n\n                        \n                        if (high_count > target || n->next == 0)\n                            break;\n                        last = n;\n                        n = n->next;\n                    }             \n\n\n                    // if we found the symbol\n                    if (high_count > target)\n                    {\n                        low_count = high_count - n->count;\n\n                        if (new_node != 0)\n                        {\n                            new_node->parent_context = n;                            \n                        }\n\n                        symbol = n->symbol;\n            \n                        coder.decode(low_count,high_count);\n                        c = n->count += 8;\n                        t = temp->total += 8;\n\n\n                        // move this node to the front \n                        if (last)\n                        {\n                            last->next = n->next;\n                            n->next = temp->child_context;\n                            temp->child_context = n;\n                        }\n\n                        if (cur == 0)\n                        {\n                            if (local_order < order)\n                            {\n                                cur_order = local_order+1;\n                                cur = n;\n                            }  \n                            else\n                            {\n                                cur = n->parent_context;\n                                cur_order = local_order;\n                            }\n                        }\n\n                        break;\n                     \n                     \n                    }\n                    // if we hit the end of the context set without finding the symbol\n                    else\n                    {   \n                        if (new_node != 0)\n                        {\n                            new_node->parent_context = allocate_node();\n                            new_node = new_node->parent_context;\n                        }\n                        else\n                        {\n                            new_node = allocate_node();\n                        }\n\n                        n->next = new_node;\n\n                        // get the escape code\n                        coder.decode(high_count,total_count);\n                    }\n                        \n                } \n                else // if (total_count == 0)\n                {\n                    // this means that temp->child_context == 0 so we should make\n                    // a new node here.\n                    if (new_node != 0)\n                    {\n                        new_node->parent_context = allocate_node();\n                        new_node = new_node->parent_context;\n                    }\n                    else\n                    {\n                        new_node = allocate_node();\n                    }\n\n                    temp->child_context = new_node;\n                }\n\n                if (cur == 0 && local_order < order)\n                {\n                    cur = new_node;\n                    cur_order = local_order+1;\n                }\n\n                // fill out the new node\n                new_node->child_context = 0;\n                new_node->escapes = 0;\n                new_node->next = 0;\n                push(new_node,temp);\n                new_node->total = 0;\n\n\n              \n                if (temp != root)\n                {\n                    temp = temp->parent_context;\n                    --local_order;\n                    continue;\n                }\n                \n                t = 2056;\n                c = 8;\n\n                // since this is the root we are going to the order-(-1) context\n                // so we can just take care of that here.\n                target = coder.get_target(alphabet_size);\n                new_node->parent_context = root;\n                coder.decode(target,target+1);\n                symbol = target;\n\n                if (cur == 0)\n                {\n                    cur = root;\n                    cur_order = 0;\n                }\n                break;                          \n            }\n            else \n            {\n                // there isn't enough space so we should rebuild the tree                \n                clear();\n                temp = cur;\n                local_order = cur_order;\n                cur = 0;   \n                new_node = 0;\n            }\n        } // while (true)\n\n        // initialize the counts and symbol for any new nodes we have added\n        // to the tree.\n        node* n, *nc;\n        while (stack_size > 0)\n        {            \n            pop(n,nc);        \n\n            n->symbol = static_cast<unsigned short>(symbol);\n\n            // if nc is not a determnistic context\n            if (nc->total)\n            {\n                unsigned long temp2 = t-c+nc->total - nc->escapes - nc->escapes;\n                unsigned long temp = nc->total;\n                temp *= c;\n                temp /= (temp2|1); // this oring by 1 is just to make sure that temp2 is never zero\n                temp += 2;\n                if (temp > 50000) temp = 50000;\n                n->count = static_cast<unsigned short>(temp);\n\n               \n                nc->escapes += 4;\n                nc->total += static_cast<unsigned short>(temp) + 4;\n            }\n            else\n            {\n                n->count = 3 + 5*(c)/(t-c);\n\n                nc->escapes = 4;\n                nc->total = n->count + 4;\n            }\n        \n            while (nc->total > 10000)\n            {\n                scale_counts(nc);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    edmk5::node* entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    allocate_node (\n    )    \n    {\n        node* temp;\n        temp = root + next_node;\n        ++next_node;\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    bool entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    space_left (\n    ) const\n    {\n        return (next_node < total_nodes);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    exclude (\n        unsigned short symbol\n    )\n    {\n        exc_used = true;\n        unsigned long temp = 1;\n        temp <<= symbol&0x1F;\n        exc[symbol>>5] |= temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    bool entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    is_excluded (\n        unsigned short symbol\n    )\n    {\n        unsigned long temp = 1;\n        temp <<= symbol&0x1F;\n        return ((exc[symbol>>5]&temp) != 0);     \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    clear_exclusions (\n    )\n    {\n        exc_used = false;\n        for (unsigned long i = 0; i < alphabet_size/32+1; ++i)\n        {\n            exc[i] = 0;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    push (\n        node* n,\n        node* nc\n    )\n    {\n        stack[stack_size].n = n;\n        stack[stack_size].nc = nc;\n        ++stack_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    pop (\n        node*& n,\n        node*& nc\n    )\n    {   \n        --stack_size;\n        n = stack[stack_size].n;\n        nc = stack[stack_size].nc;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    bool entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    something_is_excluded (\n    )\n    {\n        return exc_used;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,total_nodes,order>::\n    scale_counts (\n        node* temp\n    )\n    {\n        if (temp->escapes > 1)\n            temp->escapes >>= 1;\n        temp->total = temp->escapes;\n\n        node* n = temp->child_context;\n        while (n != 0)\n        {\n            if (n->count > 1)\n                n->count >>= 1;\n\n            temp->total += n->count;\n            n = n->next;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_DECODER_MODEL_KERNEl_5_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder_model/entropy_decoder_model_kernel_6.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_MODEL_KERNEl_6_\n#define DLIB_ENTROPY_DECODER_MODEL_KERNEl_6_\n\n#include \"../algs.h\"\n#include \"entropy_decoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder\n        >\n    class entropy_decoder_model_kernel_6 \n    {\n        /*!\n            INITIAL VALUE\n                This object has no state\n\n            CONVENTION\n                &get_entropy_decoder() == coder\n                \n                This is an order-(-1) model.  So it doesn't really do anything.\n                Every symbol has the same probability.\n        !*/\n\n    public:\n\n        typedef entropy_decoder entropy_decoder_type;\n\n        entropy_decoder_model_kernel_6 (\n            entropy_decoder& coder\n        );\n\n        virtual ~entropy_decoder_model_kernel_6 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void decode (\n            unsigned long& symbol\n        );\n\n        entropy_decoder& get_entropy_decoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        entropy_decoder& coder;\n\n        // restricted functions\n        entropy_decoder_model_kernel_6(entropy_decoder_model_kernel_6<alphabet_size,entropy_decoder>&);        // copy constructor\n        entropy_decoder_model_kernel_6<alphabet_size,entropy_decoder>& operator=(entropy_decoder_model_kernel_6<alphabet_size,entropy_decoder>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder\n        >\n    entropy_decoder_model_kernel_6<alphabet_size,entropy_decoder>::\n    entropy_decoder_model_kernel_6 (\n        entropy_decoder& coder_\n    ) : \n        coder(coder_)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder\n        >\n    entropy_decoder_model_kernel_6<alphabet_size,entropy_decoder>::\n    ~entropy_decoder_model_kernel_6 (\n    )\n    {\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder\n        >\n    void entropy_decoder_model_kernel_6<alphabet_size,entropy_decoder>::\n    clear(\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder\n        >\n    void entropy_decoder_model_kernel_6<alphabet_size,entropy_decoder>::\n    decode (\n        unsigned long& symbol\n    )\n    {\n        unsigned long target;\n\n        target = coder.get_target(alphabet_size);\n        coder.decode(target,target+1);\n\n        symbol = target;\n    }\n\n// ----------------------------------------------------------------------------------------\n  \n}\n\n#endif // DLIB_ENTROPY_DECODER_MODEL_KERNEl_6_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder_model/entropy_decoder_model_kernel_abstract.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ENTROPY_DECODER_MODEL_KERNEl_ABSTRACT_\n#ifdef DLIB_ENTROPY_DECODER_MODEL_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder\n        >\n    class entropy_decoder_model \n    {\n        /*!\n            REQUIREMENTS ON alphabet_size\n                1 < alphabet_size < 65535\n\n            REQUIREMENTS ON entropy_decoder\n                is an implementation of entropy_decoder/entropy_decoder_kernel_abstract.h\n\n            INITIAL VALUE\n                Initially this object is at some predefined empty or ground state.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents some kind of statistical model.  You\n                can use it to read symbols from an entropy_decoder and it will calculate\n                the cumulative counts/probabilities and manage contexts for you.\n\n                Note that all implementations of entropy_encoder_model and \n                entropy_decoder_model are paired. This means that if you use \n                entropy_encoder_model_kernel_n to encode something then you must \n                use the corresponding entropy_decoder_model_kernel_n to decode it.\n\n                Also note that this object does not perform any buffering of symbols.  It\n                reads them from its associated entropy_decoder simply as it needs them.\n                This makes it safe to use multiple entropy_decoder_model objects with\n                a single entropy_decoder without them trampling each other.\n        !*/\n\n    public:\n\n        typedef entropy_decoder entropy_decoder_type;\n\n        entropy_decoder_model (\n            entropy_decoder& coder\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - &#get_entropy_decoder() == &coder\n            throws\n                - any exception\n        !*/\n\n        virtual ~entropy_decoder_model (\n        );\n        /*!\n            ensures\n                - all memory associated with *this has been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n                - does not modify get_entropy_decoder()\n            throws\n                - any exception\n                    if this exception is thrown then *this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void decode (\n            unsigned long& symbol\n        );\n        /*!\n            ensures\n                - decodes the next symbol\n                - #symbol == the next symbol\n                - #symbol < alphabet_size                \n            throws\n                - any exception\n                    If this exception is thrown then #*this is unusable until \n                    clear() is called and succeeds.\n        !*/\n        \n        entropy_decoder& get_entropy_decoder (\n        );\n        /*!\n            ensures\n                - returns a reference to the entropy_decoder used by *this\n        !*/\n\n        static unsigned long get_alphabet_size (\n        );\n        /*!\n            ensures\n                - returns alphabet_size\n        !*/\n\n    private:\n\n        // restricted functions\n        entropy_decoder_model(entropy_decoder_model<alphabet_size>&);        // copy constructor\n        entropy_decoder_model<alphabet_size>& operator=(entropy_decoder_model<alphabet_size>&);    // assignment operator\n\n    };   \n\n}\n\n#endif // DLIB_ENTROPY_DECODER_MODEL_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_decoder_model.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_DECODER_MODEl_\n#define DLIB_ENTROPY_DECODER_MODEl_\n\n#include \"entropy_decoder_model/entropy_decoder_model_kernel_1.h\"\n#include \"entropy_decoder_model/entropy_decoder_model_kernel_2.h\"\n#include \"entropy_decoder_model/entropy_decoder_model_kernel_3.h\"\n#include \"entropy_decoder_model/entropy_decoder_model_kernel_4.h\"\n#include \"entropy_decoder_model/entropy_decoder_model_kernel_5.h\"\n#include \"entropy_decoder_model/entropy_decoder_model_kernel_6.h\"\n\n#include \"conditioning_class.h\"\n#include \"memory_manager.h\"\n\nnamespace dlib\n{\n\n    \n    template <\n        unsigned long alphabet_size,\n        typename entropy_decoder\n        >\n    class entropy_decoder_model\n    {\n        entropy_decoder_model() {}\n\n        typedef typename conditioning_class<alphabet_size+1>::kernel_1a cc1;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_2a cc2;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_3a cc3;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_4a cc4a;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_4b cc4b;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_4c cc4c;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_4d cc4d;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1        \n        typedef     entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc1>\n                    kernel_1a;\n    \n        typedef     entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc2>\n                    kernel_1b;\n\n        typedef     entropy_decoder_model_kernel_1<alphabet_size,entropy_decoder,cc3>\n                    kernel_1c;\n\n        // --------------------\n\n        // kernel_2      \n        typedef     entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc1,cc1>\n                    kernel_2a;\n    \n        typedef     entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc2,cc2>\n                    kernel_2b;\n\n        typedef     entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc3,cc3>\n                    kernel_2c;\n\n        typedef     entropy_decoder_model_kernel_2<alphabet_size,entropy_decoder,cc2,cc4b>\n                    kernel_2d;\n\n        // --------------------\n\n        // kernel_3       \n        typedef     entropy_decoder_model_kernel_3<alphabet_size,entropy_decoder,cc1,cc4b>\n                    kernel_3a;\n    \n        typedef     entropy_decoder_model_kernel_3<alphabet_size,entropy_decoder,cc2,cc4b>\n                    kernel_3b;\n\n        typedef     entropy_decoder_model_kernel_3<alphabet_size,entropy_decoder,cc3,cc4b>\n                    kernel_3c;\n\n        // --------------------\n\n        // kernel_4       \n        typedef     entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,200000,4>\n                    kernel_4a;\n        typedef     entropy_decoder_model_kernel_4<alphabet_size,entropy_decoder,1000000,5>\n                    kernel_4b;\n\n\n        // --------------------\n\n        // kernel_5       \n        typedef     entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,200000,4>\n                    kernel_5a;\n        typedef     entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,1000000,5>\n                    kernel_5b;\n        typedef     entropy_decoder_model_kernel_5<alphabet_size,entropy_decoder,2500000,7>\n                    kernel_5c;\n\n\n        // --------------------\n\n        // kernel_6       \n        typedef     entropy_decoder_model_kernel_6<alphabet_size,entropy_decoder>\n                    kernel_6a;\n\n\n    };\n}\n\n#endif // DLIB_ENTROPY_DECODER_MODEl_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder/entropy_encoder_kernel_1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_KERNEL_1_CPp_\n#define DLIB_ENTROPY_ENCODER_KERNEL_1_CPp_\n#include \"entropy_encoder_kernel_1.h\"\n#include <iostream>\n#include <streambuf>\n\nnamespace dlib\n{\n\n\n// ----------------------------------------------------------------------------------------\n\n    entropy_encoder_kernel_1::\n    entropy_encoder_kernel_1(\n    ) :\n        initial_low(0x00000001),\n        initial_high(0xffffffff),\n        out(0),\n        low(initial_low),\n        high(initial_high),\n        buf(0),\n        buf_used(0)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    entropy_encoder_kernel_1::\n    ~entropy_encoder_kernel_1 (\n    )\n    {\n        try {\n            if (out != 0)\n            {\n                flush();\n            }\n        } catch (...) {}\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_encoder_kernel_1::\n    clear(\n    )\n    {\n        if (out != 0)\n        {\n            flush();\n        }\n        out = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_encoder_kernel_1::\n    set_stream (\n        std::ostream& out_\n    )\n    {\n        if (out != 0)\n        {\n            // if a stream is currently set then flush the buffers to it before\n            // we switch to the new stream\n            flush();\n        }\n    \n        out = &out_;\n        streambuf = out_.rdbuf();\n\n        // reset the encoder state\n        buf_used = 0;\n        buf = 0;\n        low = initial_low;\n        high = initial_high;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool entropy_encoder_kernel_1::\n    stream_is_set (\n    ) const\n    {\n        if (out != 0)\n            return true;\n        else\n            return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::ostream& entropy_encoder_kernel_1::\n    get_stream (\n    ) const\n    {\n        return *out;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_encoder_kernel_1::\n    encode (\n        uint32 low_count,\n        uint32 high_count,\n        uint32 total\n    )\n    {\n        // note that we must add one because of the convention that\n        // high == the real upper range minus 1\n        uint32 r = (high-low+1)/total;                 \n\n        // note that we must subtract 1 to preserve the convention that\n        // high == the real upper range - 1\n        high = low + r*high_count-1;\n        low = low + r*low_count;\n\n\n        while (true)\n        {\n\n            // if the highest order bit in high and low is the same\n            if ( low >= 0x80000000 || high < 0x80000000)\n            {              \n                // if buf is full then write it out\n                if (buf_used == 8)\n                {\n                    if (streambuf->sputn(reinterpret_cast<char*>(&buf),1)==0)\n                    {\n                        throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n                    }\n                    buf = 0;\n                    buf_used = 0;\n                }   \n\n\n                // write the high order bit from low into buf\n                buf <<= 1;\n                ++buf_used;                \n                if (low&0x80000000)\n                    buf |= 0x1;\n\n                // roll off the bit we just wrote to buf\n                low <<= 1;                \n                high <<= 1;  \n                high |= 1;     // note that it is ok to add one to high here because\n                            // of the convention that high == real upper range - 1.\n                            // so that means that if we want to shift the upper range\n                            // left by one then we must shift a one into high also\n                            // since real upper range == high + 0.999999999...\n\n                // make sure low is never zero\n                if (low == 0)\n                    low = 1;\n            }\n            // if the distance between high and low is small and there aren't\n            // any bits we can roll off then round low up or high down.\n            else if (high-low < 0x10000)\n            {\n                if (high == 0x80000000)\n                    high = 0x7fffffff;\n                else\n                    low = 0x80000000;\n            }\n            else\n            {\n                break;\n            }\n        } // while (true)\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_encoder_kernel_1::\n    flush (\n    )\n    {\n        // flush the next 4 or 5 bytes that are buffered\n        // thats whatever is contained in buf and then all of low plus any extra \n        // bits needed to pad that to be an even 4 or 5 bytes\n\n\n        if (buf_used != 8)\n        {\n            buf <<= (8-buf_used);   \n            buf |= static_cast<unsigned char>(low>>(24+buf_used));         \n            low <<= (8-buf_used);\n        }\n\n        if (streambuf->sputn(reinterpret_cast<char*>(&buf),1) == 0)\n            throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n\n\n\n        buf = static_cast<unsigned char>((low >> 24)&0xFF);\n        if (streambuf->sputn(reinterpret_cast<char*>(&buf),1) == 0)\n            throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n\n\n\n\n        buf = static_cast<unsigned char>((low >> 16)&0xFF);\n        if (streambuf->sputn(reinterpret_cast<char*>(&buf),1)==0)\n            throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n\n\n\n        buf = static_cast<unsigned char>((low >> 8)&0xFF);\n        if (streambuf->sputn(reinterpret_cast<char*>(&buf),1)==0)\n            throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n\n\n\n        if (buf_used != 0)\n        {\n            buf = static_cast<unsigned char>((low)&0xFF);\n            if (streambuf->sputn(reinterpret_cast<char*>(&buf),1)==0)\n                throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n        }\n    \n\n        \n        // make sure the stream buffer flushes to its I/O channel\n        streambuf->pubsync();\n\n\n        // reset the encoder state\n        buf_used = 0;\n        buf = 0;\n        low = initial_low;\n        high = initial_high;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif // DLIB_ENTROPY_ENCODER_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder/entropy_encoder_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_KERNEl_1_\n#define DLIB_ENTROPY_ENCODER_KERNEl_1_\n\n#include \"../algs.h\"\n#include \"entropy_encoder_kernel_abstract.h\"\n#include <iosfwd>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n    class entropy_encoder_kernel_1 \n    {\n        /*!\n            GENERAL NOTES\n                this encoder is implemented using arithmetic coding\n\n            INITIAL VALUE\n                out      == 0\n                buf_used == 0\n                buf      == 0\n                initial_low      == 0x00000001  (slightly more than zero)\n                initial_high     == 0xffffffff  (slightly less than one, 0.99999999976717)\n                low      == initial_low\n                high     == initial_high\n\n            CONVENTION\n                if (out != 0)\n                    *out      == get_stream()\n                    true      == stream_is_set()\n                    streambuf == out->rdbuf()\n                else\n                    false     == stream_is_set()\n\n                buf      == used to accumulate bits before writing them to out.  \n                buf_used == the number of low order bits in buf that are currently \n                            in use\n                low      == the low end of the range used for arithmetic encoding.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so it is\n                            always in the range [0,1)\n\n                            low is also never allowed to be zero to avoid overflow\n                            in the calculation (high-low+1)/total.\n\n                high     == the high end of the range - 1 used for arithmetic encoding.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so when we\n                            interpret high as a real number then it is always in the\n                            range [0,1)\n\n                            the range for arithmetic encoding is always \n                            [low,high + 0.9999999...)   the 0.9999999... is why\n                            high == real upper range - 1         \n \n        !*/\n\n    public:\n\n        entropy_encoder_kernel_1 (\n        );\n\n        virtual ~entropy_encoder_kernel_1 (\n        );\n\n        void clear(\n        );\n\n        void set_stream (\n            std::ostream& out\n        );\n\n        bool stream_is_set (\n        ) const;\n\n        std::ostream& get_stream (\n        ) const;\n\n        void encode (\n            uint32 low_count,\n            uint32 high_count,\n            uint32 total\n        );\n\n    private:\n\n        void flush ( \n        );\n        /*!\n            requires\n                out != 0 (i.e.  there is a stream object to flush the data to \n        !*/\n\n        // restricted functions\n        entropy_encoder_kernel_1(entropy_encoder_kernel_1&);        // copy constructor\n        entropy_encoder_kernel_1& operator=(entropy_encoder_kernel_1&);    // assignment operator\n\n        // data members\n        const uint32 initial_low;\n        const uint32 initial_high;\n        std::ostream* out;\n        uint32 low;\n        uint32 high;\n        unsigned char buf; \n        uint32 buf_used; \n        std::streambuf* streambuf;\n\n    };   \n   \n}\n\n#ifdef NO_MAKEFILE\n#include \"entropy_encoder_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_ENTROPY_ENCODER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder/entropy_encoder_kernel_2.cpp",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_KERNEL_2_CPp_\n#define DLIB_ENTROPY_ENCODER_KERNEL_2_CPp_\n#include \"entropy_encoder_kernel_2.h\"\n#include <iostream>\n#include <streambuf>\n\nnamespace dlib\n{\n\n\n// ----------------------------------------------------------------------------------------\n\n    entropy_encoder_kernel_2::\n    entropy_encoder_kernel_2(\n    ) :\n        initial_low(0x00000001),\n        initial_high(0xffffffff),\n        out(0),\n        low(initial_low),\n        high(initial_high)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    entropy_encoder_kernel_2::\n    ~entropy_encoder_kernel_2 (\n    )\n    {\n        try {\n            if (out != 0)\n            {\n                flush();\n            }\n        } catch (...) {}\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_encoder_kernel_2::\n    clear(\n    )\n    {\n        if (out != 0)\n        {\n            flush();\n        }\n        out = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_encoder_kernel_2::\n    set_stream (\n        std::ostream& out_\n    )\n    {\n        if (out != 0)\n        {\n            // if a stream is currently set then flush the buffers to it before\n            // we switch to the new stream\n            flush();\n        }\n    \n        out = &out_;\n        streambuf = out_.rdbuf();\n\n        // reset the encoder state\n        low = initial_low;\n        high = initial_high;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool entropy_encoder_kernel_2::\n    stream_is_set (\n    ) const\n    {\n        if (out != 0)\n            return true;\n        else\n            return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::ostream& entropy_encoder_kernel_2::\n    get_stream (\n    ) const\n    {\n        return *out;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_encoder_kernel_2::\n    encode (\n        uint32 low_count,\n        uint32 high_count,\n        uint32 total\n    )\n    {\n        // note that we must add one because of the convention that\n        // high == the real upper range minus 1\n        uint32 r = (high-low+1)/total;                 \n\n        // note that we must subtract 1 to preserve the convention that\n        // high == the real upper range - 1\n        high = low + r*high_count-1;\n        low = low + r*low_count;\n\n\n\n        while (true )\n        {\n\n            // if high and low don't have the same 8 high order bits\n            if ((high&0xFF000000) != (low&0xFF000000)) \n            {   \n                // if the distance between high and low is small and there aren't\n                // any bits we can roll off then force high and low to have common high \n                // order bits.\n                if ((high-low < 0x10000))\n                {\n                    if (high-low > 0x1000)\n                    {\n                        high>>=1;\n                        low>>=1;\n                        high = low = high+low;\n                        high += 0xFF;\n                        low -= 0xFF;\n                    } \n                    else /**/\n                    {\n                        high>>=1;\n                        low>>=1;\n                        high = low = high+low;\n                    }\n                }\n                else\n                {\n                    // there are no bits to roll off and high and low are not\n                    // too close so just quit the loop\n                    break;\n                }\n                \n            }  \n            // else if there are 8 bits we can roll off\n            else\n            {\n                // write the 8 high order bits from low into buf\n                unsigned char buf = static_cast<unsigned char>(low>>24);\n\n\n                // roll off the bits we just wrote to buf\n                high <<= 8;  \n                low <<= 8;               \n                high |= 0xFF;  // note that it is ok to add 0xFF to high here because\n                            // of the convention that high == real upper range - 1.\n                            // so that means that if we want to shift the upper range\n                            // left by one then we must shift a one into high also\n                            // since real upper range == high + 0.999999999...\n\n                // make sure low is never zero\n                if (low == 0)\n                    low = 1;\n\n                // write buf to the output stream\n                if (streambuf->sputn(reinterpret_cast<char*>(&buf),1)==0)\n                {\n                    throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n                }                   \n                \n            } \n\n        } // while (true)\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void entropy_encoder_kernel_2::\n    flush (\n    )\n    {\n\n        // flush low to the output stream\n\n\n        unsigned char buf;\n\n\n        buf = static_cast<unsigned char>((low >> 24)&0xFF);\n        if (streambuf->sputn(reinterpret_cast<char*>(&buf),1) == 0)\n            throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n\n\n\n\n        buf = static_cast<unsigned char>((low >> 16)&0xFF);\n        if (streambuf->sputn(reinterpret_cast<char*>(&buf),1)==0)\n            throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n\n\n\n        buf = static_cast<unsigned char>((low >> 8)&0xFF);\n        if (streambuf->sputn(reinterpret_cast<char*>(&buf),1)==0)\n            throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n\n\n        buf = static_cast<unsigned char>((low)&0xFF);\n        if (streambuf->sputn(reinterpret_cast<char*>(&buf),1)==0)\n            throw std::ios_base::failure(\"error occured in the entropy_encoder object\");\n        \n    \n\n        \n        // make sure the stream buffer flushes to its I/O channel\n        streambuf->pubsync();\n\n\n        // reset the encoder state\n        low = initial_low;\n        high = initial_high;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif // DLIB_ENTROPY_ENCODER_KERNEL_2_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder/entropy_encoder_kernel_2.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_KERNEl_2_\n#define DLIB_ENTROPY_ENCODER_KERNEl_2_\n\n#include \"../algs.h\"\n#include \"entropy_encoder_kernel_abstract.h\"\n#include <iosfwd>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n    class entropy_encoder_kernel_2 \n    {\n        /*!\n            GENERAL NOTES\n                this encoder is implemented using \"range\" coding\n\n            INITIAL VALUE\n                out      == 0\n                initial_low      == 0x00000001  (slightly more than zero)\n                initial_high     == 0xffffffff  (slightly less than one, 0.99999999976717)\n                low      == initial_low\n                high     == initial_high\n\n            CONVENTION\n                if (out != 0)\n                    *out      == get_stream()\n                    true      == stream_is_set()\n                    streambuf == out->rdbuf()\n                else\n                    false     == stream_is_set()\n\n\n                low      == the low end of the range used for arithmetic encoding.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so it is\n                            always in the range [0,1)\n\n                            low is also never allowed to be zero to avoid overflow\n                            in the calculation (high-low+1)/total.\n\n                high     == the high end of the range - 1 used for arithmetic encoding.\n                            this number is used as a 32bit fixed point real number. \n                            the point is fixed just before the first bit, so when we\n                            interpret high as a real number then it is always in the\n                            range [0,1)\n\n                            the range for arithmetic encoding is always \n                            [low,high + 0.9999999...)   the 0.9999999... is why\n                            high == real upper range - 1         \n         !*/\n\n    public:\n\n        entropy_encoder_kernel_2 (\n        );\n\n        virtual ~entropy_encoder_kernel_2 (\n        );\n\n        void clear(\n        );\n\n        void set_stream (\n            std::ostream& out\n        );\n\n        bool stream_is_set (\n        ) const;\n\n        std::ostream& get_stream (\n        ) const;\n\n        void encode (\n            uint32 low_count,\n            uint32 high_count,\n            uint32 total\n        );\n\n    private:\n\n        void flush ( \n        );\n        /*!\n            requires\n                out != 0 (i.e.  there is a stream object to flush the data to \n        !*/\n\n        // restricted functions\n        entropy_encoder_kernel_2(entropy_encoder_kernel_2&);        // copy constructor\n        entropy_encoder_kernel_2& operator=(entropy_encoder_kernel_2&);    // assignment operator\n\n        // data members\n        const uint32 initial_low;\n        const uint32 initial_high;\n        std::ostream* out;\n        uint32 low;\n        uint32 high;\n        std::streambuf* streambuf;\n\n    };   \n\n}\n\n#ifdef NO_MAKEFILE\n#include \"entropy_encoder_kernel_2.cpp\"\n#endif\n\n#endif // DLIB_ENTROPY_ENCODER_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder/entropy_encoder_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ENTROPY_ENCODER_KERNEl_ABSTRACT_\n#ifdef DLIB_ENTROPY_ENCODER_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n#include <iosfwd>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n    class entropy_encoder \n    {\n        /*!\n            INITIAL VALUE\n                stream_is_set() == false\n\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an entropy encoder (could be implemented as an \n                arithmetic encoder for example).      \n                \n                Note that all implementations of entropy_encoder and entropy_decoder \n                are paired. This means that if you use entropy_encoder_kernel_n to \n                encode something then you must use the corresponding \n                entropy_decoder_kernel_n to decode it.\n\n            NOTATION:              \n                At any moment each symbol has a certain probability of appearing in \n                the input stream.  These probabilities may change as each symbol is \n                encountered and the probability model is updated accordingly.\n\n\n                let P(i) be a function which gives the probability of seeing the ith \n                symbol of an N symbol alphabet BEFORE the probability model is updated\n                to account for the current symbol.  ( The domain of P(i) is from 0 to N-1. )\n\n                for each i: P(i) == COUNT/TOTAL where COUNT and TOTAL are integers.\n                and TOTAL is the same number for all P(i) but COUNT may vary.\n                   \n                let LOW_COUNT(i)  be the sum of all P(x)*TOTAL from x == 0 to x == i-1\n                  (note that LOW_COUNT(0) == 0)\n                let HIGH_COUNT(i) be the sum of all P(x)*TOTAL from x == 0 to x == i\n        !*/\n\n    public:\n\n        entropy_encoder (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~entropy_encoder (\n        );\n        /*!\n            ensures\n                - all memory associated with *this has been released\n                - if (stream_is_set()) then\n                    - any buffered data in *this will be written to get_stream() \n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n                - if (stream_is_set()) then\n                    - any buffered data in *this will be written to get_stream() \n                    - clears any memory of all previous calls to encode() from #*this\n            throws\n                - std::ios_base::failure\n                    if (stream_is_set() && there was a problem writing to get_stream())\n                    then this exception will be thrown.  #*this will be unusable until\n                    clear() is called and succeeds\n                - any other exception\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n\n        void set_stream (\n            std::ostream& out\n        );\n        /*!\n            ensures\n                - #get_stream()    == out\n                - #stream_is_set() == true\n                - if (stream_is_set()) then\n                    - any buffered data in *this will be written to get_stream() \n                    - clears any memory of all previous calls to encode() from #*this\n            throws\n                - std::ios_base::failure\n                    if (stream_is_set() && there was a problem writing to get_stream())\n                    then this exception will be thrown.  #*this will be unusable until\n                    clear() is called and succeeds\n                - any other exception\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        bool stream_is_set (\n        ) const;\n        /*!\n            ensures\n                - returns true if a stream has been associated with *this by calling\n                  set_stream()\n        !*/\n\n        std::ostream& get_stream (\n        ) const;\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - returns a reference to the ostream object that *this writes its \n                  encoded data to\n        !*/\n\n        void encode (\n            uint32 low_count,\n            uint32 high_count,\n            uint32 total\n        );\n        /*!\n            requires\n                - 0 < total <  65536 (2^16)\n                - total == TOTAL\n                - low_count < high_count <= total    \n                - stream_is_set() == true\n            ensures\n                - encodes the symbol S where: \n                    - LOW_COUNT(S)  == low_count\n                    - HIGH_COUNT(S) == high_count\n            throws\n                - std::ios_base::failure\n                    if (there was a problem writing to get_stream()) then\n                    this exception will be thrown.  #*this will be unusable until\n                    clear() is called and succeeds\n                - any other exception\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n\n    private:\n\n        // restricted functions\n        entropy_encoder(entropy_encoder&);        // copy constructor\n        entropy_encoder& operator=(entropy_encoder&);    // assignment operator\n\n    };   \n   \n}\n\n#endif // DLIB_ENTROPY_ENCODER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder/entropy_encoder_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_KERNEl_C_\n#define DLIB_ENTROPY_ENCODER_KERNEl_C_\n\n#include \"entropy_encoder_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename encoder\n        >\n    class entropy_encoder_kernel_c : public encoder\n    {\n        \n        public:\n            std::ostream& get_stream (\n            ) const;\n\n            void encode (\n                uint32 low_count,\n                uint32 high_count,\n                uint32 total\n            );\n\n            void flush (\n            );\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename encoder\n        >\n    std::ostream& entropy_encoder_kernel_c<encoder>::\n    get_stream (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tstd::ostream& entropy_encoder::get_stream()\"\n            << \"\\n\\tyou must set a stream for this object before you can get it\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return encoder::get_stream();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename encoder\n        >\n    void entropy_encoder_kernel_c<encoder>::\n    encode (\n        uint32 low_count,\n        uint32 high_count,\n        uint32 total\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (0 < total) && (total < 65536) && (low_count < high_count) && (high_count <= total) &&\n                (this->stream_is_set() == true),\n            \"\\tvoid entropy_encoder::encode()\"\n            << \"\\n\\trefer to the ensures clause for this function for further information\"\n            << \"\\n\\tthis:            \" << this\n            << \"\\n\\ttotal:           \" << total\n            << \"\\n\\tlow_count:       \" << low_count\n            << \"\\n\\thigh_count:      \" << high_count\n            << \"\\n\\tis_stream_set(): \" << (this->stream_is_set() ? \"true\" : \"false\" )\n            );\n\n        // call the real function\n        encoder::encode(low_count,high_count,total);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename encoder\n        >\n    void entropy_encoder_kernel_c<encoder>::\n    flush (\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tvoid entropy_encoder::flush()\"\n            << \"\\n\\tyou must set a stream for this object before you can flush to it\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        encoder::flush();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODEr_\n#define DLIB_ENTROPY_ENCODEr_\n\n#include \"entropy_encoder/entropy_encoder_kernel_1.h\"\n#include \"entropy_encoder/entropy_encoder_kernel_2.h\"\n#include \"entropy_encoder/entropy_encoder_kernel_c.h\"\n\n\n\n\nnamespace dlib\n{\n\n\n    class entropy_encoder\n    {\n        entropy_encoder() {}\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     entropy_encoder_kernel_1\n                    kernel_1a;\n        typedef     entropy_encoder_kernel_c<kernel_1a>\n                    kernel_1a_c;\n          \n\n        // kernel_2a        \n        typedef     entropy_encoder_kernel_2\n                    kernel_2a;\n        typedef     entropy_encoder_kernel_c<kernel_2a>\n                    kernel_2a_c;\n\n    };\n}\n\n#endif // DLIB_ENTROPY_ENCODEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder_model/entropy_encoder_model_kernel_1.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_1_\n#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_1_\n\n#include \"../algs.h\"\n#include \"entropy_encoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc\n        >\n    class entropy_encoder_model_kernel_1 \n    {\n        /*!\n            REQUIREMENTS ON cc\n                cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                cc::get_alphabet_size() == alphabet_size+1\n\n            INITIAL VALUE\n                Initially this object's finite context model is empty\n\n            CONVENTION\n                &get_entropy_encoder() == coder\n                &order_0.get_global_state() == &gs\n\n                This is an order-0 model. The last symbol in the order-0 context is \n                an escape into the order minus 1 context.\n        !*/\n\n    public:\n\n        typedef entropy_encoder entropy_encoder_type;\n\n        entropy_encoder_model_kernel_1 (\n            entropy_encoder& coder\n        );\n\n        virtual ~entropy_encoder_model_kernel_1 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void encode (\n            unsigned long symbol\n        );\n\n        entropy_encoder& get_entropy_encoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        entropy_encoder& coder;\n        typename cc::global_state_type gs;\n        cc order_0;\n\n        // restricted functions\n        entropy_encoder_model_kernel_1(entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>&);        // copy constructor\n        entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>& operator=(entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc\n        >\n    entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>::\n    entropy_encoder_model_kernel_1 (\n        entropy_encoder& coder_\n    ) : \n        coder(coder_),\n        order_0(gs)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc\n        >\n    entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>::\n    ~entropy_encoder_model_kernel_1 (\n    )\n    {\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc\n        >\n    void entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>::\n    clear(\n    )\n    {\n        order_0.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc\n        >\n    void entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>::\n    encode (\n        unsigned long symbol\n    )\n    {\n        unsigned long low_count = 0, high_count = 0, total_count = 0;\n\n        // if we have seen this symbol in the order-0 context\n        if (order_0.get_range(symbol,low_count,high_count,total_count))\n        {\n            // update the count for this symbol\n            order_0.increment_count(symbol,2);\n            // encode this symbol\n            coder.encode(low_count,high_count,total_count);                \n            return;\n        }\n    \n        // if we are here then the symbol does not appear in the order-0 context\n\n        \n        // since we have never seen the current symbol in this context\n        // escape from order-0 context\n        order_0.get_range(alphabet_size,low_count,high_count,total_count);\n        coder.encode(low_count,high_count,total_count);\n        // increment the count for the escape symbol\n        order_0.increment_count(alphabet_size);  \n\n        // update the count for this symbol\n        order_0.increment_count(symbol,2);\n\n        // use order minus one context\n        coder.encode(symbol,symbol+1,alphabet_size);\n        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder_model/entropy_encoder_model_kernel_2.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_2_\n#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_2_\n\n#include \"../algs.h\"\n#include \"entropy_encoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename ccbig\n        >\n    class entropy_encoder_model_kernel_2 \n    {\n        /*!\n            REQUIREMENTS ON cc\n                cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                cc::get_alphabet_size() == alphabet_size+1\n                this will be used for the order-0 context\n\n            REQUIREMENTS ON ccbig\n                ccbig is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                ccbig::get_alphabet_size() == alphabet_size+1\n                this will be used for the order-1 context\n\n            INITIAL VALUE\n                Initially this object's finite context model is empty\n                previous_symbol == 0\n\n            CONVENTION\n                &get_entropy_encoder() == coder\n                &order_0.get_global_state() == &gs\n                &order_1[i]->get_global_state() == &gsbig\n\n\n                This is an order-1-0 model. The last symbol in the order-0 and order-1\n                context is an escape into the lower context.\n\n                previous_symbol == the last symbol seen                \n        !*/\n\n    public:\n\n        typedef entropy_encoder entropy_encoder_type;\n\n        entropy_encoder_model_kernel_2 (\n            entropy_encoder& coder\n        );\n\n        virtual ~entropy_encoder_model_kernel_2 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void encode (\n            unsigned long symbol\n        );\n\n        entropy_encoder& get_entropy_encoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        entropy_encoder& coder;\n        typename cc::global_state_type gs;\n        typename ccbig::global_state_type gsbig;\n        cc order_0;\n        ccbig* order_1[alphabet_size];\n        unsigned long previous_symbol;\n        \n\n        // restricted functions\n        entropy_encoder_model_kernel_2(entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>&);        // copy constructor\n        entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>& operator=(entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename ccbig\n        >\n    entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>::\n    entropy_encoder_model_kernel_2 (\n        entropy_encoder& coder_\n    ) : \n        coder(coder_),\n        order_0(gs),\n        previous_symbol(0)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );\n\n        unsigned long i;\n        try\n        {\n            for (i = 0; i < alphabet_size; ++i)\n            {\n                order_1[i] = new ccbig(gsbig);\n            }\n        }\n        catch (...)\n        {\n            for (unsigned long j = 0; j < i; ++j)\n            {\n                delete order_1[j];\n            }\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename ccbig\n        >\n    entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>::\n    ~entropy_encoder_model_kernel_2 (\n    )\n    {\n        for (unsigned long i = 0; i < alphabet_size; ++i)\n        {           \n            delete order_1[i];\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename ccbig\n        >\n    void entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>::\n    clear(\n    )\n    {\n        previous_symbol = 0;\n        order_0.clear();\n        for (unsigned long i = 0; i < alphabet_size; ++i)\n        {\n            order_1[i]->clear();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename ccbig\n        >\n    void entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>::\n    encode (\n        unsigned long symbol\n    )\n    {\n        unsigned long low_count = 0, high_count = 0, total_count = 0;\n\n\n        ccbig& context = *order_1[previous_symbol];\n\n        // if we have seen this symbol in the order-1 context\n        if (context.get_range(symbol,low_count,high_count,total_count))\n        {\n            // update the count for this symbol\n            context.increment_count(symbol,2);\n            // encode this symbol\n            coder.encode(low_count,high_count,total_count);\n            previous_symbol = symbol;\n            return;\n        }       \n\n        // we didn't find the symbol in the order-1 context so we must escape to a \n        // lower context.\n\n        // escape to the order-0 context\n        context.get_range(alphabet_size,low_count,high_count,total_count);\n        coder.encode(low_count,high_count,total_count);\n\n\n        // increment counts for the escape symbol and the current symbol\n        context.increment_count(alphabet_size);\n        context.increment_count(symbol,2);\n        \n        previous_symbol = symbol;\n\n\n\n\n\n        // if we have seen this symbol in the order-0 context\n        if (order_0.get_range(symbol,low_count,high_count,total_count))\n        {\n            // update the count for this symbol\n            order_0.increment_count(symbol,2);\n            // encode this symbol\n            coder.encode(low_count,high_count,total_count);                \n            return;\n        }\n    \n        // if we are here then the symbol does not appear in the order-0 context\n\n        \n        // since we have never seen the current symbol in this context\n        // escape from order-0 context\n        order_0.get_range(alphabet_size,low_count,high_count,total_count);\n        coder.encode(low_count,high_count,total_count);\n        // increment the count for the escape symbol\n        order_0.increment_count(alphabet_size);  \n\n        // update the count for this symbol\n        order_0.increment_count(symbol,2);\n\n        // use order minus one context\n        coder.encode(symbol,symbol+1,alphabet_size);\n        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder_model/entropy_encoder_model_kernel_3.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_3_\n#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_3_\n\n#include \"../algs.h\"\n#include \"entropy_encoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename cc_high\n        >\n    class entropy_encoder_model_kernel_3 \n    {\n        /*!\n            REQUIREMENTS ON cc\n                cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                cc::get_alphabet_size() == alphabet_size+1\n\n            REQUIREMENTS ON cc_high\n                cc_high is an implementation of conditioning_class/conditioning_class_kernel_abstract.h\n                cc_high::get_alphabet_size() == alphabet_size+1\n\n            INITIAL VALUE\n                - Initially this object's finite context model is empty\n                - previous_symbol == 0\n                - previous_symbol2 == 0\n                - order_1 == pointer to an array of alphabet_size elements\n                - order_2 == pointer to an array of alphabet_size*alphabet_size elements\n                - order_2[i] == 0\n\n            CONVENTION\n                &get_entropy_encoder() == coder\n                &order_0.get_global_state() == &gs\n                &order_1[i]->get_global_state() == &gs\n\n                if (order_2[i] != 0) then\n                    &order_2[i]->get_global_state() == &gs_high\n\n                This is an order-2-1-0 model. The last symbol in the order-2, order-1 and \n                order-0 contexts is an escape into the lower context.\n\n                previous_symbol == the last symbol seen\n                previous_symbol2 == the symbol we saw before previous_symbol\n        !*/\n\n    public:\n\n        typedef entropy_encoder entropy_encoder_type;\n\n        entropy_encoder_model_kernel_3 (\n            entropy_encoder& coder\n        );\n\n        virtual ~entropy_encoder_model_kernel_3 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void encode (\n            unsigned long symbol\n        );\n\n        entropy_encoder& get_entropy_encoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        entropy_encoder& coder;\n        typename cc::global_state_type gs;\n        typename cc_high::global_state_type gs_high;\n        cc order_0;\n        cc** order_1;\n        unsigned long previous_symbol;\n        cc_high** order_2;\n        unsigned long previous_symbol2;\n        \n\n        // restricted functions\n        entropy_encoder_model_kernel_3(entropy_encoder_model_kernel_3&);        // copy constructor\n        entropy_encoder_model_kernel_3& operator=(entropy_encoder_model_kernel_3&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename cc_high\n        >\n    entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc,cc_high>::\n    entropy_encoder_model_kernel_3 (\n        entropy_encoder& coder_\n    ) : \n        coder(coder_),\n        order_0(gs),\n        order_1(0),\n        previous_symbol(0),\n        order_2(0),\n        previous_symbol2(0)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );\n\n        try\n        {\n            order_1 = new cc*[alphabet_size];\n            order_2 = new cc_high*[alphabet_size*alphabet_size];\n        }\n        catch (...)\n        {\n            if (order_1) delete [] order_1;\n            if (order_2) delete [] order_2;\n            throw;\n        }\n\n        unsigned long i;\n\n        for (i = 0; i < (alphabet_size*alphabet_size); ++i)\n        {\n            order_2[i] = 0;\n        }\n\n        try\n        {\n            for (i = 0; i < alphabet_size; ++i)\n            {\n                order_1[i] = new cc(gs);\n            }\n        }\n        catch (...)\n        {\n            for (unsigned long j = 0; j < i; ++j)\n            {\n                delete order_1[j];\n            }\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename cc_high\n        >\n    entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc,cc_high>::\n    ~entropy_encoder_model_kernel_3 (\n    )\n    {\n        for (unsigned long i = 0; i < alphabet_size; ++i)\n        {           \n            delete order_1[i];\n        }\n\n        for (unsigned long i = 0; i < alphabet_size*alphabet_size; ++i)\n        {\n            if (order_2[i] != 0)\n                delete order_2[i];\n        }\n        delete [] order_1;\n        delete [] order_2;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename cc_high\n        >\n    void entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc,cc_high>::\n    clear(\n    )\n    {\n        previous_symbol = 0;\n        previous_symbol2 = 0;\n        order_0.clear();\n        for (unsigned long i = 0; i < alphabet_size; ++i)\n        {\n            order_1[i]->clear();\n        }\n\n        for (unsigned long i = 0; i < alphabet_size*alphabet_size; ++i)\n        {\n            if (order_2[i] != 0)\n            {\n                delete order_2[i];\n                order_2[i] = 0;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        typename cc,\n        typename cc_high\n        >\n    void entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc,cc_high>::\n    encode (\n        unsigned long symbol\n    )\n    {\n        unsigned long low_count = 0, high_count = 0, total_count = 0;\n\n        \n        // order-2 context stuff\n        {\n            unsigned long temp = previous_symbol + (previous_symbol2 * alphabet_size);\n            previous_symbol2 = previous_symbol;\n\n            if (order_2[temp] != 0)\n            {\n                if (order_2[temp]->get_range(symbol,low_count,high_count,total_count))\n                {\n                    // there was an entry for this symbol in this context\n\n                    // update the count for this symbol\n                    order_2[temp]->increment_count(symbol,2);\n                    // encode this symbol\n                    coder.encode(low_count,high_count,total_count);\n                    previous_symbol = symbol;\n                    return;\n                }\n\n                // there was no entry for this symbol in this context so we must\n                // escape to order-1\n\n                // escape to the order-1 context\n                order_2[temp]->get_range(alphabet_size,low_count,high_count,total_count);\n                coder.encode(low_count,high_count,total_count);\n\n                // increment the count for the escape symbol\n                order_2[temp]->increment_count(alphabet_size);\n                \n            }\n            else\n            {                \n                order_2[temp] = new cc_high(gs_high);\n\n                // in this case the decoder knows to escape to order-1 because \n                // there was no conditioning_class object in this context yet.\n                // so we don't need to actually write the escape symbol\n            }            \n\n            // update the count for this symbol in this context\n            order_2[temp]->increment_count(symbol,2);\n        }\n\n\n\n\n        // order-1 context stuff\n        {\n            cc& context = *order_1[previous_symbol];\n\n            // if we have seen this symbol in the order-1 context\n            if (context.get_range(symbol,low_count,high_count,total_count))\n            {\n                // update the count for this symbol\n                context.increment_count(symbol,2);\n                // encode this symbol\n                coder.encode(low_count,high_count,total_count);\n                previous_symbol = symbol;\n                return;\n            }       \n\n            // we didn't find the symbol in the order-1 context so we must escape to a \n            // lower context.\n\n            // escape to the order-0 context\n            context.get_range(alphabet_size,low_count,high_count,total_count);\n            coder.encode(low_count,high_count,total_count);\n\n\n            // increment counts for the escape symbol and the current symbol\n            context.increment_count(alphabet_size);\n            context.increment_count(symbol,2);\n        }\n        \n        previous_symbol = symbol;\n\n\n\n\n\n        // if we have seen this symbol in the order-0 context\n        if (order_0.get_range(symbol,low_count,high_count,total_count))\n        {\n            // update the count for this symbol\n            order_0.increment_count(symbol,2);\n            // encode this symbol\n            coder.encode(low_count,high_count,total_count);                \n            return;\n        }\n    \n        // if we are here then the symbol does not appear in the order-0 context\n\n        \n        // since we have never seen the current symbol in this context\n        // escape from order-0 context\n        order_0.get_range(alphabet_size,low_count,high_count,total_count);\n        coder.encode(low_count,high_count,total_count);\n        // increment the count for the escape symbol\n        order_0.increment_count(alphabet_size);  \n\n        // update the count for this symbol\n        order_0.increment_count(symbol,2);\n\n        // use order minus one context\n        coder.encode(symbol,symbol+1,alphabet_size);\n        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_3_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder_model/entropy_encoder_model_kernel_4.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_4_\n#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_4_\n\n#include \"../algs.h\"\n#include \"entropy_encoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\n\n\nnamespace dlib\n{\n\n    namespace eemk4\n    {\n        struct node\n        {            \n            node* next;\n            node* child_context;\n            node* parent_context;\n\n            unsigned short symbol;\n            unsigned short count;\n            unsigned short total;\n            unsigned short escapes;\n        };\n    }\n\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    class entropy_encoder_model_kernel_4 \n    {\n        /*!\n            REQUIREMENTS ON total_nodes\n                - 4096 < total_nodes\n                - this is the total number of nodes that we will use in the tree\n\n            REQUIREMENTS ON order\n                - 0 <= order\n                - this is the maximum depth-1 the tree will be allowed to go (note \n                  that the root level is depth 0).  \n\n            GENERAL NOTES\n                This implementation follows more or less the implementation \n                strategy laid out by Alistair Moffat in his paper\n                Implementing the PPM data compression scheme.  Published in IEEE \n                Transactions on Communications, 38(11):1917-1921, 1990.\n\n                The escape method used will be method D. \n\n\n            INITIAL VALUE\n                - root == pointer to an array of total_nodes nodes\n                - next_node == 1\n                - cur == root\n                - cur_order = 0\n                - root->next == 0\n                - root->parent_context == 0\n                - root->child_context == 0\n                - root->escapes == 0\n                - root->total == 0\n\n            CONVENTION\n                - &get_entropy_encoder() == coder\n                - root == pointer to an array of total_nodes nodes.\n                  this is also the root of the tree.\n\n                - if (next_node < total_nodes) then\n                    - next_node == the next node in root that has not yet been allocated                                \n\n                - root->next == 0\n                - root->parent_context == 0\n              \n\n                - for every node in the tree:\n                  {\n                    - NOTATION: \n                        - The \"context\" of a node is the string of symbols seen\n                          when you go from the root of the tree down (down though\n                          child context pointers) to the node, including the symbol at \n                          the node itself.  (note that the context of the root node \n                          is \"\" or the empty string)\n                        - A set of nodes is in the same \"context set\" if all the node's\n                          contexts are of length n and all the node's contexts share\n                          the same prefix of length n-1.\n                        - The \"child context set\" of a node is a set of nodes with\n                          contexts that are one symbol longer and prefixed by the node's \n                          context.  For example, if a node has a context \"abc\" then the \n                          nodes for contexts \"abca\", \"abcb\", \"abcc\", etc. are all in \n                          the child context set of the node.\n                        - The \"parent context\" of a node is the context that is one \n                          symbol shorter than the node's context and includes the \n                          symbol in the node.  So the parent context of a node with \n                          context \"abcd\" would be the context \"bcd\".\n\n\n                    - if (next != 0) then \n                        - next == pointer to the next node in the same context set\n                    - if (child_context != 0) then\n                        - child_context == pointer to the first node of the child \n                          context set for this node.\n                    - if (parent_context != 0) then\n                        - parent_context == pointer to the parent context of this node.\n                    - else\n                        - this node is the root node of the tree\n                  \n\n                    - if (this is not the root node) then\n                        - symbol == the symbol represented with this node\n                        - count == the number of times this symbol has been seen in its\n                          parent context.\n                    - else\n                        - the root doesn't have a symbol.  i.e. the context for the\n                          root node is \"\" or the empty string.\n\n                    - total == The sum of the counts of all the nodes \n                      in the child context set + escapes. \n                    - escapes == the escape count for the context represented\n                      by the node.\n                }\n\n\n                - cur_order < order\n                - cur_order == the depth of the node cur in the tree.\n                  (note that the root node has depth 0)\n                - cur == pointer to the node in the tree who's context matches\n                  the most recent symbols we have seen.\n\n\n        !*/\n\n        typedef eemk4::node node;\n\n\n    public:\n\n        typedef entropy_encoder entropy_encoder_type;\n\n        entropy_encoder_model_kernel_4 (\n            entropy_encoder& coder\n        );\n\n        virtual ~entropy_encoder_model_kernel_4 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void encode (\n            unsigned long symbol\n        );\n\n        entropy_encoder& get_entropy_encoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        inline eemk4::node* allocate_node (\n        );\n        /*!\n            requires\n                - space_left() == true\n            ensures\n                - returns a pointer to a new node\n        !*/\n\n        inline void destroy_tree (\n        );\n        /*!\n            ensures\n                - deallocates all nodes except the root\n                - #root->child_context == 0\n                - #root->escapes == 0\n                - #root->total == 0\n                - #cur == root\n                - #cur_order == 0\n        !*/\n\n\n        inline bool space_left (\n        ) const;\n        /*!\n            ensures\n                - returns true if there is at least 1 free node left.\n                - returns false otherwise\n        !*/\n\n\n        inline void scale_counts (\n            node* n\n        );\n        /*!\n            ensures\n                - divides all the counts in the child context set of n by 2.\n                - none of the nodes in the child context set will have a count of 0\n        !*/\n\n\n        unsigned long next_node;        \n        entropy_encoder& coder;\n        node* root;\n        node* cur;\n        unsigned long cur_order;\n\n        \n        // restricted functions\n        entropy_encoder_model_kernel_4(entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>&);        // copy constructor\n        entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>& operator=(entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::\n    entropy_encoder_model_kernel_4 (\n        entropy_encoder& coder_\n    ) : \n        next_node(1),\n        coder(coder_),\n        cur_order(0)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );\n        COMPILE_TIME_ASSERT( 4096 < total_nodes );\n\n        root = new node[total_nodes];  \n        cur = root;\n\n        root->child_context = 0;\n        root->escapes = 0;\n        root->next = 0;\n        root->parent_context = 0;\n        root->total = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::\n    ~entropy_encoder_model_kernel_4 (\n    )\n    {\n        delete [] root;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::\n    clear(\n    )\n    {\n        destroy_tree();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::\n    encode (\n        unsigned long sym\n    )\n    {\n        unsigned short symbol = static_cast<unsigned short>(sym);\n        node* temp = cur;\n        cur = 0;\n        unsigned short low_count, high_count, total_count;\n        node* new_node = 0;\n\n        // local_order will track the level of temp in the tree\n        unsigned long local_order = cur_order;\n\n        while (true)\n        {            \n            high_count = 0;\n            if (space_left())\n            {\n                total_count = temp->total;\n                \n                if (total_count > 0)\n                {\n                    // check if we need to scale the counts\n                    if (total_count > 10000)\n                    {\n                        scale_counts(temp);\n                        total_count = temp->total;\n                    }\n\n                    // find either the symbol we are looking for or the \n                    // end of the context set\n                    node* n = temp->child_context;\n                    node* last = 0;   \n                    while (true)\n                    {\n                        high_count += n->count;\n                        \n                        if (n->symbol == symbol || n->next == 0)\n                            break;\n                        last = n;\n                        n = n->next;\n                    }             \n\n                    low_count = high_count - n->count;\n\n                    // if we found the symbol\n                    if (n->symbol == symbol)\n                    {\n                        if (new_node != 0)\n                        {\n                            new_node->parent_context = n;                            \n                        }\n\n                        coder.encode(low_count,high_count,total_count);\n                        n->count += 8;\n                        temp->total += 8;\n\n\n                        // move this node to the front \n                        if (last)\n                        {\n                            last->next = n->next;\n                            n->next = temp->child_context;\n                            temp->child_context = n;\n                        }\n\n\n                        if (cur == 0)\n                        {\n                            if (local_order < order)\n                            {\n                                cur_order = local_order+1;\n                                cur = n;\n                            }  \n                            else\n                            {\n                                cur = n->parent_context;\n                                cur_order = local_order;\n                            }\n                        }\n\n                        break;\n                    \n                    }\n                    // if we hit the end of the context set without finding the symbol\n                    else\n                    {   \n                        if (new_node != 0)\n                        {\n                            new_node->parent_context = allocate_node();\n                            new_node = new_node->parent_context;\n                        }\n                        else\n                        {\n                            new_node = allocate_node();\n                        }\n\n                        n->next = new_node;\n\n                        // write an escape to a lower context\n                        coder.encode(high_count,total_count,total_count);\n                    }\n                        \n                } \n                else // if (total_count == 0)\n                {\n                    // this means that temp->child_context == 0 so we should make\n                    // a new node here.\n                    if (new_node != 0)\n                    {\n                        new_node->parent_context = allocate_node();\n                        new_node = new_node->parent_context;\n                    }\n                    else\n                    {\n                        new_node = allocate_node();\n                    }\n\n                    temp->child_context = new_node;\n                }\n\n                if (cur == 0 && local_order < order)\n                {\n                    cur = new_node;\n                    cur_order = local_order+1;\n                }\n\n                // fill out the new node\n                new_node->child_context = 0;\n                new_node->count = 4;\n                new_node->escapes = 0;\n                new_node->next = 0;\n                new_node->symbol = static_cast<unsigned short>(symbol);\n                new_node->total = 0;\n                temp->escapes += 4;\n                temp->total += 8;\n\n              \n                if (temp != root)\n                {\n                    temp = temp->parent_context;\n                    --local_order;\n                    continue;\n                }\n\n                // since this is the root we are going to the order-(-1) context\n                // so we can just take care of that here.\n                new_node->parent_context = root;\n                coder.encode(symbol,symbol+1,alphabet_size);\n\n                if (cur == 0)\n                {\n                    cur = root;\n                    cur_order = 0;\n                }\n                break;\n            }\n            else \n            {\n                // there isn't enough space so we should rebuild the tree\n                destroy_tree();\n                temp = cur;\n                local_order = cur_order;\n                cur = 0;                  \n                new_node = 0;\n            }\n        } // while (true)\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    eemk4::node* entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::\n    allocate_node (\n    )    \n    {\n        node* temp;\n        temp = root + next_node;\n        ++next_node;\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::\n    destroy_tree (\n    )\n    {        \n        next_node = 1;\n        root->child_context = 0;\n        root->escapes = 0;\n        root->total = 0;\n        cur = root;\n        cur_order = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    bool entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::\n    space_left (\n    ) const\n    {\n        return (next_node < total_nodes);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::\n    scale_counts (\n        node* temp\n    )\n    {\n        if (temp->escapes > 1)\n            temp->escapes >>= 1;\n        temp->total = temp->escapes;\n\n        node* n = temp->child_context;\n        while (n != 0)\n        {\n            if (n->count > 1)\n                n->count >>= 1;\n\n            temp->total += n->count;\n            n = n->next;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_4_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder_model/entropy_encoder_model_kernel_5.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_5_\n#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_5_\n\n#include \"../algs.h\"\n#include \"entropy_encoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\n\n\nnamespace dlib\n{\n\n    namespace eemk5\n    {\n        struct node\n        {            \n            node* next;\n            node* child_context;\n            node* parent_context;\n\n            unsigned short symbol;\n            unsigned short count;\n            unsigned short total;\n            unsigned short escapes;\n        };\n    }\n\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    class entropy_encoder_model_kernel_5 \n    {\n        /*!\n            REQUIREMENTS ON total_nodes\n                - 4096 < total_nodes\n                - this is the total number of nodes that we will use in the tree\n\n            REQUIREMENTS ON order\n                - 0 <= order\n                - this is the maximum depth-1 the tree will be allowed to go (note \n                  that the root level is depth 0).  \n\n            GENERAL NOTES\n                This implementation follows more or less the implementation \n                strategy laid out by Alistair Moffat in his paper\n                Implementing the PPM data compression scheme.  Published in IEEE \n                Transactions on Communications, 38(11):1917-1921, 1990.\n\n                The escape method used will be method D. \n\n                This also uses Dmitry Shkarin's Information Inheritance scheme.\n                (described in \"PPM: one step to practicality\" and \"Improving the \n                Efficiency of the PPM Algorithm\")\n\n\n            INITIAL VALUE\n                - root == pointer to an array of total_nodes nodes\n                - next_node == 1\n                - cur == root\n                - cur_order = 0\n                - root->next == 0\n                - root->parent_context == 0\n                - root->child_context == 0\n                - root->escapes == 0\n                - root->total == 0\n                - stack_size == 0\n                - exc_used == false\n                - for all i: exc[i] == 0\n\n            CONVENTION\n                - pop() == stack[stack_size-1].n and stack[stack_size-1].nc\n                - exc_used == something_is_excluded()\n                - is_excluded(symbol) == bit symbol&0x1F from exc[symbol>>5]\n                - &get_entropy_encoder() == coder\n                - root == pointer to an array of total_nodes nodes.\n                  this is also the root of the tree.\n                - if (next_node < total_nodes) then\n                    - next_node == the next node in root that has not yet been allocated                                \n\n                - root->next == 0\n                - root->parent_context == 0\n              \n\n                - for every node in the tree:\n                  {\n                    - NOTATION: \n                        - The \"context\" of a node is the string of symbols seen\n                          when you go from the root of the tree down (down though\n                          child context pointers) to the node, including the symbol at \n                          the node itself.  (note that the context of the root node \n                          is \"\" or the empty string)\n                        - A set of nodes is in the same \"context set\" if all the node's\n                          contexts are of length n and all the node's contexts share\n                          the same prefix of length n-1.\n                        - The \"child context set\" of a node is a set of nodes with\n                          contexts that are one symbol longer and prefixed by the node's \n                          context.  For example, if a node has a context \"abc\" then the \n                          nodes for contexts \"abca\", \"abcb\", \"abcc\", etc. are all in \n                          the child context set of the node.\n                        - The \"parent context\" of a node is the context that is one \n                          symbol shorter than the node's context and includes the \n                          symbol in the node.  So the parent context of a node with \n                          context \"abcd\" would be the context \"bcd\".\n\n\n                    - if (next != 0) then \n                        - next == pointer to the next node in the same context set\n                    - if (child_context != 0) then\n                        - child_context == pointer to the first node of the child \n                          context set for this node.\n                        - escapes > 0\n                    - if (parent_context != 0) then\n                        - parent_context == pointer to the parent context of this node.\n                    - else\n                        - this node is the root node of the tree\n                  \n\n                    - if (this is not the root node) then\n                        - symbol == the symbol represented with this node\n                        - count == the number of times this symbol has been seen in its\n                          parent context.\n                    - else\n                        - the root doesn't have a symbol.  i.e. the context for the\n                          root node is \"\" or the empty string.\n\n                    - total == The sum of the counts of all the nodes \n                      in the child context set + escapes. \n                    - escapes == the escape count for the context represented\n                      by the node.                   \n                    - count > 0                    \n                }\n\n\n                - cur_order < order\n                - cur_order == the depth of the node cur in the tree.\n                  (note that the root node has depth 0)\n                - cur == pointer to the node in the tree who's context matches\n                  the most recent symbols we have seen.\n\n\n        !*/\n\n        typedef eemk5::node node;\n\n\n    public:\n\n        typedef entropy_encoder entropy_encoder_type;\n\n        entropy_encoder_model_kernel_5 (\n            entropy_encoder& coder\n        );\n\n        virtual ~entropy_encoder_model_kernel_5 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void encode (\n            unsigned long symbol\n        );\n\n        entropy_encoder& get_entropy_encoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        inline eemk5::node* allocate_node (\n        );\n        /*!\n            requires\n                - space_left() == true\n            ensures\n                - returns a pointer to a new node\n        !*/\n\n        inline bool space_left (\n        ) const;\n        /*!\n            ensures\n                - returns true if there is at least 1 free node left.\n                - returns false otherwise\n        !*/\n\n        inline void exclude (\n            unsigned short symbol\n        );\n        /*!\n            ensures\n                - #is_excluded(symbol) == true\n                - #something_is_excluded() == true\n        !*/\n\n        inline bool something_is_excluded (\n        );\n        /*!\n            ensures\n                - returns true if some symbol has been excluded.\n                  returns false otherwise\n        !*/\n\n        inline bool is_excluded (\n            unsigned short symbol\n        );\n        /*!\n            ensures\n                - if (symbol has been excluded) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        inline void clear_exclusions (\n        );\n        /*!\n            ensures\n                - for all symbols #is_excluded(symbol) == false\n                - #something_is_excluded() == true\n        !*/\n\n        inline void scale_counts (\n            node* n\n        );\n        /*!\n            ensures\n                - divides all the counts in the child context set of n by 2.\n                - none of the nodes in the child context set will have a count of 0\n        !*/\n\n        inline void push (\n            node* n,\n            node* nc\n        );\n        /*!\n            requires\n                - stack_size < order\n            ensures\n                - #pop(a,b): a == n && b == nc\n        !*/\n\n        inline void pop (\n            node*& n,\n            node*& nc\n        );\n        /*!\n            requires\n                - stack_size > 0\n            ensures\n                - returns the two nodes at the top of the stack\n        !*/\n\n        struct nodes\n        {\n            node* n;\n            node* nc;\n        };\n\n        unsigned long next_node;        \n        entropy_encoder& coder;\n        node* root;\n        node* cur;\n        unsigned long cur_order;\n        unsigned long exc[alphabet_size/32+1];\n        bool exc_used;\n        nodes stack[order+1];\n        unsigned long stack_size;\n        \n        // restricted functions\n        entropy_encoder_model_kernel_5(entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>&);        // copy constructor\n        entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>& operator=(entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    entropy_encoder_model_kernel_5 (\n        entropy_encoder& coder_\n    ) : \n        next_node(1),\n        coder(coder_),\n        cur_order(0),\n        stack_size(0) \n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );\n        COMPILE_TIME_ASSERT( 4096 < total_nodes );\n\n        root = new node[total_nodes];  \n        cur = root;\n\n        root->child_context = 0;\n        root->escapes = 0;\n        root->next = 0;\n        root->parent_context = 0;\n        root->total = 0;\n\n        clear_exclusions();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    ~entropy_encoder_model_kernel_5 (\n    )\n    {\n        delete [] root;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    clear(\n    )\n    {\n        next_node = 1;\n        root->child_context = 0;\n        root->escapes = 0;\n        root->total = 0;\n        cur = root;\n        cur_order = 0;\n        stack_size = 0;\n\n        clear_exclusions();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    encode (\n        unsigned long sym\n    )\n    {\n        unsigned short symbol = static_cast<unsigned short>(sym);\n        node* temp = cur;\n        cur = 0;\n        unsigned short low_count, high_count, total_count;\n        node* new_node = 0;\n\n        // local_order will track the level of temp in the tree\n        unsigned long local_order = cur_order;\n\n\n        unsigned short c; // c == t(a|sk)\n        unsigned short t; // t == T(sk)\n\n \n        if (something_is_excluded())\n            clear_exclusions();\n\n        while (true)\n        {\n            low_count = 0;\n            high_count = 0;\n            if (space_left())\n            {\n                total_count = temp->total;\n                \n                if (total_count > 0)\n                {\n                    // check if we need to scale the counts\n                    if (total_count > 10000)\n                    {\n                        scale_counts(temp);\n                        total_count = temp->total;\n                    }\n\n\n                    // find the symbol we are looking for and put a pointer to it\n                    // into found_symbol.  If it isn't found then found_symbol == 0.\n                    // also, low_count and high_count will be correctly set.\n                    node* n = temp->child_context;\n                    node* found_symbol = 0;\n                    node* last = 0;\n                    if (something_is_excluded())\n                    {\n                        node* templast = 0;\n                        while (true)\n                        {\n                            if (is_excluded(n->symbol) == false)\n                            {\n                                exclude(n->symbol);\n                                if (found_symbol == 0)\n                                {\n                                    high_count += n->count;\n                                    if (n->symbol == symbol)\n                                    {\n                                        found_symbol = n;\n                                        last = templast;\n                                        low_count = high_count - n->count;\n                                    }\n                                }\n                            }\n                            else\n                            {\n                                total_count -= n->count;\n                            }\n                            \n                            if (n->next == 0)\n                                break;\n                            templast = n;\n                            n = n->next;\n                        }                         \n                    }\n                    else\n                    {\n                        while (true)\n                        {\n                            high_count += n->count;\n                            exclude(n->symbol);\n                           \n                            if (n->symbol == symbol)\n                            {\n                                found_symbol = n;\n                                low_count = high_count - n->count;\n                                break;\n                            }\n\n                            if (n->next == 0)\n                                break;\n                            last = n;\n                            n = n->next;\n                        }   \n                    }\n\n\n\n\n\n                    // if we found the symbol\n                    if (found_symbol)\n                    {\n                        n = found_symbol;\n                        if (new_node != 0)\n                        {\n                            new_node->parent_context = found_symbol;\n                        }\n\n\n                        coder.encode(low_count,high_count,total_count);\n                        c = n->count += 8;\n                        t = temp->total += 8;\n\n                        // move this node to the front \n                        if (last)\n                        {\n                            last->next = n->next;\n                            n->next = temp->child_context;\n                            temp->child_context = n;\n                        }\n\n\n                        if (cur == 0)\n                        {\n                            if (local_order >= order)\n                            {\n                                cur = n->parent_context;\n                                cur_order = local_order;\n                            }  \n                            else\n                            {\n                                cur_order = local_order+1;\n                                cur = n;\n                            }\n                        }\n\n                        break;\n                \n                    }\n                    // if we hit the end of the context set without finding the symbol\n                    else\n                    {   \n                        // finish excluding all the symbols\n                        while (n->next)\n                        {\n                            exclude(n->symbol);\n                            n = n->next;\n                        }\n\n                        if (new_node != 0)\n                        {\n                            new_node->parent_context = allocate_node();\n                            new_node = new_node->parent_context;\n                        }\n                        else\n                        {\n                            new_node = allocate_node();\n                        }\n\n                        n->next = new_node;\n\n                        // write an escape to a lower context\n                        coder.encode(high_count,total_count,total_count);\n                    }\n                        \n                } \n                else // if (total_count == 0)\n                {\n                    // this means that temp->child_context == 0 so we should make\n                    // a new node here.\n                    if (new_node != 0)\n                    {\n                        new_node->parent_context = allocate_node();\n                        new_node = new_node->parent_context;\n                    }\n                    else\n                    {\n                        new_node = allocate_node();\n                    }\n\n                    temp->child_context = new_node;\n                }\n\n                if (cur == 0 && local_order < order)\n                {\n                    cur = new_node;\n                    cur_order = local_order+1;\n                }\n\n                // fill out the new node\n                new_node->child_context = 0;\n                new_node->escapes = 0;\n                new_node->next = 0;           \n                new_node->total = 0;\n                push(new_node,temp);\n              \n                if (temp != root)\n                {\n                    temp = temp->parent_context;\n                    --local_order;\n                    continue; \n                }\n                \n                t = 2056;\n                c = 8;\n\n                // since this is the root we are going to the order-(-1) context\n                // so we can just take care of that here.\n                new_node->parent_context = root;\n                coder.encode(symbol,symbol+1,alphabet_size);\n\n                if (cur == 0)\n                {\n                    cur = root;\n                    cur_order = 0;\n                }\n                break;\n            }\n            else \n            {\n                // there isn't enough space so we should throw away the tree\n                clear();\n                temp = cur;\n                local_order = cur_order;\n                cur = 0;      \n                new_node = 0;\n            }\n        } // while (true)\n\n\n        // initialize the counts and symbol for any new nodes we have added\n        // to the tree.\n        node* n, *nc;\n        while (stack_size > 0)\n        {            \n            pop(n,nc);        \n\n            n->symbol = static_cast<unsigned short>(symbol);\n\n            // if nc is not a determnistic context\n            if (nc->total)\n            {\n                unsigned long temp2 = t-c+nc->total - nc->escapes - nc->escapes;\n                unsigned long temp = nc->total;\n                temp *= c;\n                temp /= (temp2|1); // this oring by 1 is just to make sure that temp2 is never zero\n                temp += 2;\n                if (temp > 50000) temp = 50000;\n                n->count = static_cast<unsigned short>(temp);\n\n               \n                nc->escapes += 4;\n                nc->total += static_cast<unsigned short>(temp) + 4;\n            }\n            else\n            {\n                n->count = 3 + 5*(c)/(t-c);\n\n                nc->escapes = 4;\n                nc->total = n->count + 4;\n            }\n        \n            while (nc->total > 10000)\n            {\n                scale_counts(nc);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    eemk5::node* entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    allocate_node (\n    )    \n    {\n        node* temp;\n        temp = root + next_node;\n        ++next_node;\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    bool entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    space_left (\n    ) const\n    {\n        return (next_node < total_nodes);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    exclude (\n        unsigned short symbol\n    )\n    {\n        exc_used = true;\n        unsigned long temp = 1;\n        temp <<= symbol&0x1F;\n        exc[symbol>>5] |= temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    bool entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    is_excluded (\n        unsigned short symbol\n    )\n    {\n        unsigned long temp = 1;\n        temp <<= symbol&0x1F;\n        return ((exc[symbol>>5]&temp) != 0);     \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    clear_exclusions (\n    )\n    {\n        exc_used = false;\n        for (unsigned long i = 0; i < alphabet_size/32+1; ++i)\n        {\n            exc[i] = 0;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    bool entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    something_is_excluded (\n    )\n    {\n        return exc_used;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    push (\n        node* n,\n        node* nc\n    )\n    {\n        stack[stack_size].n = n;\n        stack[stack_size].nc = nc;\n        ++stack_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    pop (\n        node*& n,\n        node*& nc\n    )\n    {   \n        --stack_size;\n        n = stack[stack_size].n;\n        nc = stack[stack_size].nc;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder,\n        unsigned long total_nodes,\n        unsigned long order\n        >\n    void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::\n    scale_counts (\n        node* temp\n    )\n    {\n        if (temp->escapes > 1)\n            temp->escapes >>= 1;\n        temp->total = temp->escapes;\n\n        node* n = temp->child_context;\n        while (n != 0)\n        {\n            if (n->count > 1)\n                n->count >>= 1;\n\n            temp->total += n->count;\n            n = n->next;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_5_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder_model/entropy_encoder_model_kernel_6.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_6_\n#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_6_\n\n#include \"../algs.h\"\n#include \"entropy_encoder_model_kernel_abstract.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder \n        >\n    class entropy_encoder_model_kernel_6 \n    {\n        /*!\n            INITIAL VALUE\n                Initially this object's finite context model is empty\n\n            CONVENTION\n                &get_entropy_encoder() == coder\n           \n                This is an order-(-1) model.  So it doesn't really do anything.\n                Every symbol has the same probability.\n        !*/\n\n    public:\n\n        typedef entropy_encoder entropy_encoder_type;\n\n        entropy_encoder_model_kernel_6 (\n            entropy_encoder& coder\n        );\n\n        virtual ~entropy_encoder_model_kernel_6 (\n        );\n        \n        inline void clear(\n        );\n\n        inline void encode (\n            unsigned long symbol\n        );\n\n        entropy_encoder& get_entropy_encoder (\n        ) { return coder; }\n\n        static unsigned long get_alphabet_size (\n        ) { return alphabet_size; }\n\n    private:\n\n        entropy_encoder& coder;\n\n        // restricted functions\n        entropy_encoder_model_kernel_6(entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>&);        // copy constructor\n        entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>& operator=(entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>&);    // assignment operator\n\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder \n        >\n    entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>::\n    entropy_encoder_model_kernel_6 (\n        entropy_encoder& coder_\n    ) : \n        coder(coder_)\n    {\n        COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder \n        >\n    entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>::\n    ~entropy_encoder_model_kernel_6 (\n    )\n    {\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder \n        >\n    void entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>::\n    clear(\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder \n        >\n    void entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>::\n    encode (\n        unsigned long symbol\n    )\n    {\n        // use order minus one context\n        coder.encode(symbol,symbol+1,alphabet_size);  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_6_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder_model/entropy_encoder_model_kernel_abstract.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_ABSTRACT_\n#ifdef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder\n        >\n    class entropy_encoder_model \n    {\n        /*!\n            REQUIREMENTS ON alphabet_size\n                1 < alphabet_size < 65535\n\n            REQUIREMENTS ON entropy_encoder\n                is an implementation of entropy_encoder/entropy_encoder_kernel_abstract.h\n\n            INITIAL VALUE\n                Initially this object is at some predefined empty or ground state.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents some kind of statistical model.  You\n                can use it to write symbols to an entropy_encoder and it will calculate\n                the cumulative counts/probabilities and manage contexts for you.\n\n                Note that all implementations of entropy_encoder_model and \n                entropy_decoder_model are paired. This means that if you use \n                entropy_encoder_model_kernel_n to encode something then you must \n                use the corresponding entropy_decoder_model_kernel_n to decode it.\n\n                Also note that this object does not perform any buffering of symbols.  It\n                writes them to its associated entropy_encoder immediately.\n                This makes it safe to use multiple entropy_encoder_model objects with\n                a single entropy_encoder without them trampling each other.\n        !*/\n\n    public:\n\n        typedef entropy_encoder entropy_encoder_type;\n    \n        entropy_encoder_model (\n            entropy_encoder& coder\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - &#get_entropy_encoder() == &coder\n            throws\n                - any exception\n        !*/\n\n        virtual ~entropy_encoder_model (\n        );\n        /*!\n            ensures\n                - all memory associated with *this has been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n                - does not modify get_entropy_encoder()\n            throws\n                - any exception\n                    if this exception is thrown then *this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void encode (\n            unsigned long symbol\n        );\n        /*!\n            requires\n                - symbol < alphabet_size\n            ensures\n                - encodes and writes the symbol to get_entropy_encoder().\n                  This also means that there is no internal buffering.  symbol is\n                  written immediately to the entropy_encoder.\n            throws\n                - any exception\n                    If this exception is thrown then #*this is unusable until \n                    clear() is called and succeeds.\n        !*/\n\n        entropy_encoder& get_entropy_encoder (\n        );\n        /*!\n            ensures\n                - returns a reference to the entropy_encoder used by *this\n        !*/\n\n        static unsigned long get_alphabet_size (\n        );\n        /*!\n            ensures\n                - returns alphabet_size\n        !*/\n\n    private:\n\n        // restricted functions\n        entropy_encoder_model(entropy_encoder_model<alphabet_size,entropy_encoder>&);        // copy constructor\n        entropy_encoder_model<alphabet_size,entropy_encoder>& operator=(entropy_encoder_model<alphabet_size,entropy_encoder>&);    // assignment operator\n\n    };   \n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder_model/entropy_encoder_model_kernel_c.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_C_\n#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_C_\n\n#include \"entropy_encoder_model_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename eem_base\n        >\n    class entropy_encoder_model_kernel_c : public eem_base\n    {\n        const unsigned long alphabet_size;\n        typedef typename eem_base::entropy_encoder_type entropy_encoder;\n        \n        public:\n\n            entropy_encoder_model_kernel_c (\n                entropy_encoder& coder\n            ) : eem_base(coder), alphabet_size(eem_base::get_alphabet_size()) {}\n\n            void encode (\n                unsigned long symbol\n            );\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename eem_base\n        >\n    void entropy_encoder_model_kernel_c<eem_base>::\n    encode (\n        unsigned long symbol\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(symbol < alphabet_size,\n            \"\\tvoid entropy_encoder_model::encode()\"\n            << \"\\n\\tthe symbol must be in the range 0 to alphabet_size-1\"\n            << \"\\n\\talphabet_size: \" << alphabet_size\n            << \"\\n\\tsymbol:        \" << symbol\n            << \"\\n\\tthis:          \" << this\n            );\n\n        // call the real function\n        eem_base::encode(symbol);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/entropy_encoder_model.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENTROPY_ENCODER_MODEl_\n#define DLIB_ENTROPY_ENCODER_MODEl_\n\n#include \"entropy_encoder_model/entropy_encoder_model_kernel_1.h\"\n#include \"entropy_encoder_model/entropy_encoder_model_kernel_2.h\"\n#include \"entropy_encoder_model/entropy_encoder_model_kernel_3.h\"\n#include \"entropy_encoder_model/entropy_encoder_model_kernel_4.h\"\n#include \"entropy_encoder_model/entropy_encoder_model_kernel_5.h\"\n#include \"entropy_encoder_model/entropy_encoder_model_kernel_6.h\"\n#include \"entropy_encoder_model/entropy_encoder_model_kernel_c.h\"\n\n#include \"conditioning_class.h\"\n#include \"memory_manager.h\"\n#include \"sliding_buffer.h\"\n\n\nnamespace dlib\n{\n\n    \n    template <\n        unsigned long alphabet_size,\n        typename entropy_encoder\n        >\n    class entropy_encoder_model\n    {\n        entropy_encoder_model() {}\n\n        typedef typename conditioning_class<alphabet_size+1>::kernel_1a cc1;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_2a cc2;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_3a cc3;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_4a cc4a;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_4b cc4b;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_4c cc4c;\n        typedef typename conditioning_class<alphabet_size+1>::kernel_4d cc4d;\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1        \n        typedef     entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc1>\n                    kernel_1a;\n        typedef     entropy_encoder_model_kernel_c<kernel_1a>\n                    kernel_1a_c;\n    \n        typedef     entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc2>\n                    kernel_1b;\n        typedef     entropy_encoder_model_kernel_c<kernel_1b>\n                    kernel_1b_c;\n\n        typedef     entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc3>\n                    kernel_1c;\n        typedef     entropy_encoder_model_kernel_c<kernel_1c>\n                    kernel_1c_c;\n\n        // --------------------\n\n        // kernel_2        \n        typedef     entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc1,cc1>\n                    kernel_2a;\n        typedef     entropy_encoder_model_kernel_c<kernel_2a>\n                    kernel_2a_c;\n    \n        typedef     entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc2,cc2>\n                    kernel_2b;\n        typedef     entropy_encoder_model_kernel_c<kernel_2b>\n                    kernel_2b_c;\n\n        typedef     entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc3,cc3>\n                    kernel_2c;\n        typedef     entropy_encoder_model_kernel_c<kernel_2c>\n                    kernel_2c_c;\n\n        typedef     entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc2,cc4b>\n                    kernel_2d;\n        typedef     entropy_encoder_model_kernel_c<kernel_2d>\n                    kernel_2d_c;\n\n        // --------------------\n\n        // kernel_3        \n        typedef     entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc1,cc4b>\n                    kernel_3a;\n        typedef     entropy_encoder_model_kernel_c<kernel_3a>\n                    kernel_3a_c;\n    \n        typedef     entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc2,cc4b>\n                    kernel_3b;\n        typedef     entropy_encoder_model_kernel_c<kernel_3b>\n                    kernel_3b_c;\n\n        typedef     entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc3,cc4b>\n                    kernel_3c;\n        typedef     entropy_encoder_model_kernel_c<kernel_3c>\n                    kernel_3c_c;\n\n        // --------------------\n\n        // kernel_4        \n        typedef     entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,200000,4>\n                    kernel_4a;\n        typedef     entropy_encoder_model_kernel_c<kernel_4a>\n                    kernel_4a_c;\n\n        typedef     entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,1000000,5>\n                    kernel_4b;\n        typedef     entropy_encoder_model_kernel_c<kernel_4b>\n                    kernel_4b_c;\n\n        // --------------------\n\n        // kernel_5        \n        typedef     entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,200000,4>\n                    kernel_5a;\n        typedef     entropy_encoder_model_kernel_c<kernel_5a>\n                    kernel_5a_c;\n\n        typedef     entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,1000000,5>\n                    kernel_5b;\n        typedef     entropy_encoder_model_kernel_c<kernel_5b>\n                    kernel_5b_c;\n\n        typedef     entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,2500000,7>\n                    kernel_5c;\n        typedef     entropy_encoder_model_kernel_c<kernel_5c>\n                    kernel_5c_c;\n    \n        // --------------------\n\n        // kernel_6        \n        typedef     entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>\n                    kernel_6a;\n        typedef     entropy_encoder_model_kernel_c<kernel_6a>\n                    kernel_6a_c;\n\n\n    \n    };\n}\n\n#endif // DLIB_ENTROPY_ENCODER_MODEl_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/error.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ERROr_ \n#define DLIB_ERROr_ \n\n#include <string>\n#include <new>          // for std::bad_alloc\n#include <iostream>\n#include <cassert>\n#include <cstdlib>\n#include <exception>\n\n// -------------------------------\n// ------ exception classes ------\n// -------------------------------\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    enum error_type\n    {       \n        EPORT_IN_USE,  \n        ETIMEOUT,     \n        ECONNECTION, \n        ELISTENER, \n        ERESOLVE,     \n        EMONITOR,   \n        ECREATE_THREAD,    \n        ECREATE_MUTEX,    \n        ECREATE_SIGNALER,\n        EUNSPECIFIED,   \n        EGENERAL_TYPE1,\n        EGENERAL_TYPE2,  \n        EGENERAL_TYPE3,  \n        EINVALID_OPTION,\n        ETOO_FEW_ARGS,\n        ETOO_MANY_ARGS,\n        ESOCKET,\n        ETHREAD,\n        EGUI,\n        EFATAL,\n        EBROKEN_ASSERT,\n        EIMAGE_LOAD,\n        EDIR_CREATE,\n        EINCOMPATIBLE_OPTIONS,\n        EMISSING_REQUIRED_OPTION,\n        EINVALID_OPTION_ARG,\n        EMULTIPLE_OCCURANCES,\n        ECONFIG_READER,\n        EIMAGE_SAVE,\n        ECAST_TO_STRING,\n        ESTRING_CAST,\n        EUTF8_TO_UTF32,\n        EOPTION_PARSE\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    // the base exception class\n    class error : public std::exception\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is the base exception class for the dlib library.  i.e. all \n                exceptions in this library inherit from this class.\n        !*/\n\n    public:\n        error(\n            error_type t,\n            const std::string& a\n        ): info(a), type(t) {}\n        /*!\n            ensures\n                - #type == t\n                - #info == a\n        !*/\n\n        error(\n            error_type t\n        ): type(t) {}\n        /*!\n            ensures\n                - #type == t\n                - #info == \"\"\n        !*/\n\n        error(\n            const std::string& a\n        ): info(a), type(EUNSPECIFIED) {}\n        /*!\n            ensures\n                - #type == EUNSPECIFIED\n                - #info == a\n        !*/\n\n        error(\n        ): type(EUNSPECIFIED) {}\n        /*!\n            ensures\n                - #type == EUNSPECIFIED\n                - #info == \"\"\n        !*/\n\n        virtual ~error(\n        ) throw() {}\n        /*!\n            ensures\n                - does nothing\n        !*/\n\n        const char* what(\n        ) const throw()\n        /*!\n            ensures\n                - if (info.size() != 0) then\n                    - returns info.c_str()\n                - else\n                    - returns type_to_string(type)\n        !*/\n        {\n            if (info.size() > 0)\n                return info.c_str(); \n            else\n                return type_to_string();\n        }\n\n        const char* type_to_string (\n        ) const throw()\n        /*!\n            ensures\n                - returns a string that names the contents of the type member.\n        !*/\n        {\n            if ( type == EPORT_IN_USE) return \"EPORT_IN_USE\";\n            else if ( type == ETIMEOUT) return \"ETIMEOUT\";\n            else if ( type == ECONNECTION) return \"ECONNECTION\"; \n            else if ( type == ELISTENER) return \"ELISTENER\"; \n            else if ( type == ERESOLVE) return \"ERESOLVE\";     \n            else if ( type == EMONITOR) return \"EMONITOR\";   \n            else if ( type == ECREATE_THREAD) return \"ECREATE_THREAD\";    \n            else if ( type == ECREATE_MUTEX) return \"ECREATE_MUTEX\";    \n            else if ( type == ECREATE_SIGNALER) return \"ECREATE_SIGNALER\";\n            else if ( type == EUNSPECIFIED) return \"EUNSPECIFIED\";   \n            else if ( type == EGENERAL_TYPE1) return \"EGENERAL_TYPE1\";\n            else if ( type == EGENERAL_TYPE2) return \"EGENERAL_TYPE2\";  \n            else if ( type == EGENERAL_TYPE3) return \"EGENERAL_TYPE3\";  \n            else if ( type == EINVALID_OPTION) return \"EINVALID_OPTION\";\n            else if ( type == ETOO_FEW_ARGS) return \"ETOO_FEW_ARGS\";\n            else if ( type == ETOO_MANY_ARGS) return \"ETOO_MANY_ARGS\";\n            else if ( type == ESOCKET) return \"ESOCKET\";\n            else if ( type == ETHREAD) return \"ETHREAD\";\n            else if ( type == EGUI) return \"EGUI\";\n            else if ( type == EFATAL) return \"EFATAL\";\n            else if ( type == EBROKEN_ASSERT) return \"EBROKEN_ASSERT\";\n            else if ( type == EIMAGE_LOAD) return \"EIMAGE_LOAD\";\n            else if ( type == EDIR_CREATE) return \"EDIR_CREATE\";\n            else if ( type == EINCOMPATIBLE_OPTIONS) return \"EINCOMPATIBLE_OPTIONS\";\n            else if ( type == EMISSING_REQUIRED_OPTION) return \"EMISSING_REQUIRED_OPTION\";\n            else if ( type == EINVALID_OPTION_ARG) return \"EINVALID_OPTION_ARG\";\n            else if ( type == EMULTIPLE_OCCURANCES) return \"EMULTIPLE_OCCURANCES\";\n            else if ( type == ECONFIG_READER) return \"ECONFIG_READER\";\n            else if ( type == EIMAGE_SAVE) return \"EIMAGE_SAVE\";\n            else if ( type == ECAST_TO_STRING) return \"ECAST_TO_STRING\";\n            else if ( type == ESTRING_CAST) return \"ESTRING_CAST\";\n            else if ( type == EUTF8_TO_UTF32) return \"EUTF8_TO_UTF32\";\n            else if ( type == EOPTION_PARSE) return \"EOPTION_PARSE\";\n            else return \"undefined error type\";\n        }\n\n        const std::string info;  // info about the error\n        const error_type type; // the type of the error\n\n    private:\n        const error& operator=(const error&);\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class fatal_error : public error\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                As the name says, this object represents some kind of fatal error.  \n                That is, it represents an unrecoverable error and any program that\n                throws this exception is, by definition, buggy and needs to be fixed.\n\n                Note that a fatal_error exception can only be thrown once.  The second\n                time an application attempts to construct a fatal_error it will be \n                immediately aborted and an error message will be printed to std::cerr. \n                The reason for this is because the first fatal_error was apparently ignored\n                so the second fatal_error is going to make itself impossible to ignore \n                by calling abort.  The lesson here is that you should not try to ignore \n                fatal errors.\n\n                This is also the exception thrown by the DLIB_ASSERT and DLIB_CASSERT macros.\n        !*/\n\n    public:\n        fatal_error(\n            error_type t,\n            const std::string& a\n        ): error(t,a) {check_for_previous_fatal_errors();}\n        /*!\n            ensures\n                - #type == t\n                - #info == a\n        !*/\n\n        fatal_error(\n            error_type t\n        ): error(t) {check_for_previous_fatal_errors();}\n        /*!\n            ensures\n                - #type == t\n                - #info == \"\"\n        !*/\n\n        fatal_error(\n            const std::string& a\n        ): error(EFATAL,a) {check_for_previous_fatal_errors();}\n        /*!\n            ensures\n                - #type == EFATAL\n                - #info == a\n        !*/\n\n        fatal_error(\n        ): error(EFATAL) {check_for_previous_fatal_errors();}\n        /*!\n            ensures\n                - #type == EFATAL\n                - #info == \"\"\n        !*/\n\n    private:\n\n        static inline char* message ()\n        { \n            static char buf[2000];\n            buf[1999] = '\\0'; // just to be extra safe\n            return buf;\n        }\n\n        static inline void dlib_fatal_error_terminate (\n        )\n        {\n            std::cerr << \"\\n**************************** FATAL ERROR DETECTED ****************************\";\n            std::cerr << message() << std::endl;\n            std::cerr << \"******************************************************************************\\n\" << std::endl;\n        }\n\n        void check_for_previous_fatal_errors()\n        {\n            static bool is_first_fatal_error = true;\n            if (is_first_fatal_error == false)\n            {\n                std::cerr << \"\\n\\n ************************** FATAL ERROR DETECTED ************************** \" << std::endl;\n                std::cerr << \" ************************** FATAL ERROR DETECTED ************************** \" << std::endl;\n                std::cerr << \" ************************** FATAL ERROR DETECTED ************************** \\n\" << std::endl;\n                std::cerr << \"Two fatal errors have been detected, the first was inappropriately ignored. \\n\"\n                          << \"To prevent further fatal errors from being ignored this application will be \\n\"\n                          << \"terminated immediately and you should go fix this buggy program.\\n\\n\"\n                          << \"The error message from this fatal error was:\\n\" << this->what() << \"\\n\\n\" << std::endl;\n                using namespace std;\n                assert(false);\n                abort();\n            }\n            else\n            {\n                // copy the message into the fixed message buffer so that it can be recalled by dlib_fatal_error_terminate\n                // if needed.\n                char* msg = message();\n                unsigned long i;\n                for (i = 0; i < 2000-1 && i < this->info.size(); ++i)\n                    msg[i] = info[i];\n                msg[i] = '\\0';\n\n                // set this termination handler so that if the user doesn't catch this dlib::fatal_error that is being\n                // thrown then it will eventually be printed to standard error\n                std::set_terminate(&dlib_fatal_error_terminate);\n            }\n            is_first_fatal_error = false;\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class gui_error : public error\n    {\n    public:\n        gui_error(\n            error_type t,\n            const std::string& a\n        ): error(t,a) {}\n        /*!\n            ensures\n                - #type == t\n                - #info == a\n        !*/\n\n        gui_error(\n            error_type t\n        ): error(t) {}\n        /*!\n            ensures\n                - #type == t\n                - #info == \"\"\n        !*/\n\n        gui_error(\n            const std::string& a\n        ): error(EGUI,a) {}\n        /*!\n            ensures\n                - #type == EGUI \n                - #info == a\n        !*/\n\n        gui_error(\n        ): error(EGUI) {}\n        /*!\n            ensures\n                - #type == EGUI\n                - #info == \"\"\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class socket_error : public error\n    {\n    public:\n        socket_error(\n            error_type t,\n            const std::string& a\n        ): error(t,a) {}\n        /*!\n            ensures\n                - #type == t\n                - #info == a\n        !*/\n\n        socket_error(\n            error_type t\n        ): error(t) {}\n        /*!\n            ensures\n                - #type == t\n                - #info == \"\"\n        !*/\n\n        socket_error(\n            const std::string& a\n        ): error(ESOCKET,a) {}\n        /*!\n            ensures\n                - #type == ESOCKET\n                - #info == a\n        !*/\n\n        socket_error(\n        ): error(ESOCKET) {}\n        /*!\n            ensures\n                - #type == ESOCKET\n                - #info == \"\"\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class thread_error : public error\n    {\n    public:\n        thread_error(\n            error_type t,\n            const std::string& a\n        ): error(t,a) {}\n        /*!\n            ensures\n                - #type == t\n                - #info == a\n        !*/\n\n        thread_error(\n            error_type t\n        ): error(t) {}\n        /*!\n            ensures\n                - #type == t\n                - #info == \"\"\n        !*/\n\n        thread_error(\n            const std::string& a\n        ): error(ETHREAD,a) {}\n        /*!\n            ensures\n                - #type == ETHREAD\n                - #info == a\n        !*/\n\n        thread_error(\n        ): error(ETHREAD) {}\n        /*!\n            ensures\n                - #type == ETHREAD\n                - #info == \"\"\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ERROr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/filtering/kalman_filter.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_KALMAN_FiLTER_Hh_\n#define DLIB_KALMAN_FiLTER_Hh_\n\n#include \"kalman_filter_abstract.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long states,\n        long measurements\n        >\n    class kalman_filter\n    {\n    public:\n\n        kalman_filter()\n        {\n            H = 0;\n            A = 0;\n            Q = 0;\n            R = 0;\n            x = 0;\n            xb = 0;\n            P = identity_matrix<double>(states);\n            got_first_meas = false;\n        }\n\n        void set_observation_model ( const matrix<double,measurements,states>& H_) { H = H_; }\n        void set_transition_model  ( const matrix<double,states,states>& A_) { A = A_; }\n        void set_process_noise     ( const matrix<double,states,states>& Q_) { Q = Q_; }\n        void set_measurement_noise ( const matrix<double,measurements,measurements>& R_) { R = R_; }\n        void set_estimation_error_covariance( const matrix<double,states,states>& P_) { P = P_; }\n\n        const matrix<double,measurements,states>& get_observation_model (\n        ) const { return H; }\n\n        const matrix<double,states,states>& get_transition_model (\n        ) const { return A; }\n\n        const matrix<double,states,states>& get_process_noise (\n        ) const { return Q; }\n\n        const matrix<double,measurements,measurements>& get_measurement_noise (\n        ) const { return R; }\n\n        void update (\n        )\n        {\n            // propagate estimation error covariance forward\n            P = A*P*trans(A) + Q;\n\n            // propagate state forward\n            x = xb;\n            xb = A*x;\n        }\n\n        void update (const matrix<double,measurements,1>& z)\n        {\n            // propagate estimation error covariance forward\n            P = A*P*trans(A) + Q;\n\n            // compute Kalman gain matrix\n            const matrix<double,states,measurements> K = P*trans(H)*pinv(H*P*trans(H) + R);\n\n            if (got_first_meas)\n            {\n                const matrix<double,measurements,1> res = z - H*xb;\n                // correct the current state estimate\n                x = xb + K*res;\n            }\n            else\n            {\n                // Since we don't have a previous state estimate at the start of filtering,\n                // we will just set the current state to whatever is indicated by the measurement\n                x = pinv(H)*z; \n                got_first_meas = true;\n            }\n\n            // propagate state forward in time\n            xb = A*x;\n\n            // update estimation error covariance since we got a measurement.\n            P = (identity_matrix<double,states>() - K*H)*P;\n        }\n\n        const matrix<double,states,1>& get_current_state(\n        ) const\n        {\n            return x;\n        }\n\n        const matrix<double,states,1>& get_predicted_next_state(\n        ) const\n        {\n            return xb;\n        }\n\n        const matrix<double,states,states>& get_current_estimation_error_covariance(\n        ) const\n        {\n            return P;\n        }\n\n        friend inline void serialize(const kalman_filter& item, std::ostream& out)\n        {\n            int version = 1;\n            serialize(version, out);\n            serialize(item.got_first_meas, out);\n            serialize(item.x, out);\n            serialize(item.xb, out);\n            serialize(item.P, out);\n            serialize(item.H, out);\n            serialize(item.A, out);\n            serialize(item.Q, out);\n            serialize(item.R, out);\n        }\n\n        friend inline void deserialize(kalman_filter& item, std::istream& in)\n        {\n            int version = 0;\n            deserialize(version, in);\n            if (version != 1)\n                throw dlib::serialization_error(\"Unknown version number found while deserializing kalman_filter object.\");\n\n            deserialize(item.got_first_meas, in);\n            deserialize(item.x, in);\n            deserialize(item.xb, in);\n            deserialize(item.P, in);\n            deserialize(item.H, in);\n            deserialize(item.A, in);\n            deserialize(item.Q, in);\n            deserialize(item.R, in);\n        }\n\n    private:\n\n        bool got_first_meas;\n        matrix<double,states,1> x, xb;\n        matrix<double,states,states> P;\n\n        matrix<double,measurements,states> H;\n        matrix<double,states,states> A;\n        matrix<double,states,states> Q;\n        matrix<double,measurements,measurements> R;\n\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KALMAN_FiLTER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/filtering/kalman_filter_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_KALMAN_FiLTER_ABSTRACT_Hh_\n#ifdef DLIB_KALMAN_FiLTER_ABSTRACT_Hh_\n\n#include \"../serialize.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long states,\n        long measurements\n        >\n    class kalman_filter\n    {\n        /*!\n            REQUIREMENTS ON states\n                states > 0\n\n            REQUIREMENTS ON measurements \n                measurements > 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements the Kalman filter, which is a tool for \n                recursively estimating the state of a process given measurements\n                related to that process.  To use this tool you will have to \n                be familiar with the workings of the Kalman filter.  An excellent\n                introduction can be found in the paper:\n                    An Introduction to the Kalman Filter\n                    by Greg Welch and Gary Bishop\n\n        !*/\n\n    public:\n\n        kalman_filter(\n        );\n        /*!\n            - #get_observation_model()    == 0\n            - #get_transition_model()     == 0\n            - #get_process_noise()        == 0\n            - #get_measurement_noise()    == 0\n            - #get_current_state()        == 0\n            - #get_predicted_next_state() == 0\n            - #get_current_estimation_error_covariance() == the identity matrix\n        !*/\n\n        void set_observation_model ( \n            const matrix<double,measurements,states>& H\n        );\n        /*!\n            ensures\n                - #get_observation_model() == H\n        !*/\n\n        void set_transition_model  ( \n            const matrix<double,states,states>& A\n        );\n        /*!\n            ensures\n                - #get_transition_model() == A\n        !*/\n\n        void set_process_noise     ( \n            const matrix<double,states,states>& Q\n        );\n        /*!\n            ensures\n                - #get_process_noise() == Q\n        !*/\n\n        void set_measurement_noise ( \n            const matrix<double,measurements,measurements>& R\n        );\n        /*!\n            ensures\n                - #get_measurement_noise() == R\n        !*/\n\n        void set_estimation_error_covariance ( \n            const matrix<double,states,states>& P\n        ); \n        /*!\n            ensures\n                - #get_current_estimation_error_covariance() == P\n                  (Note that you should only set this before you start filtering\n                  since the Kalman filter will maintain the value of P on its own.\n                  So only set this during initialization unless you are sure you\n                  understand what you are doing.)\n        !*/\n\n        const matrix<double,measurements,states>& get_observation_model (\n        ) const;\n        /*!\n            ensures\n                - Returns the matrix \"H\" which relates process states x to measurements z.\n                  The relation is linear, therefore, z = H*x.  That is, multiplying a\n                  state by H gives the measurement you expect to observe for that state.\n        !*/\n\n        const matrix<double,states,states>& get_transition_model (\n        ) const;\n        /*!\n            ensures\n                - Returns the matrix \"A\" which determines how process states change over time.\n                  The relation is linear, therefore, given a state vector x, the value you\n                  expect it to have at the next time step is A*x.\n        !*/\n\n        const matrix<double,states,states>& get_process_noise (\n        ) const;\n        /*!\n            ensures\n                - returns the process noise covariance matrix.  You can think of this\n                  covariance matrix as a measure of how wrong the assumption of\n                  linear state transitions is. \n        !*/\n\n        const matrix<double,measurements,measurements>& get_measurement_noise (\n        ) const;\n        /*!\n            ensures\n                - returns the measurement noise covariance matrix.  That is, when we\n                  measure a state x we only obtain H*x corrupted by Gaussian noise.\n                  The measurement noise is the covariance matrix of this Gaussian\n                  noise which corrupts our measurements.\n        !*/\n\n        void update (\n        );\n        /*!\n            ensures\n                - propagates the current state estimate forward in time one\n                  time step.  In particular:\n                    - #get_current_state() == get_predicted_next_state()\n                    - #get_predicted_next_state() == get_transition_model()*get_current_state()\n                    - #get_current_estimation_error_covariance() == the propagated value of this covariance matrix\n        !*/\n\n        void update (\n            const matrix<double,measurements,1>& z\n        );\n        /*!\n            ensures\n                - propagates the current state estimate forward in time one time step.  \n                  Also applies a correction based on the given measurement z.  In particular:\n                    - #get_current_state(), #get_predicted_next_state(), and\n                      #get_current_estimation_error_covariance() are updated using the\n                      Kalman filter method based on the new measurement in z.\n        !*/\n\n        const matrix<double,states,1>& get_current_state(\n        ) const;\n        /*!\n            ensures\n                - returns the current estimate of the state of the process.  This\n                  estimate is based on all the measurements supplied to the update()\n                  method.\n        !*/\n\n        const matrix<double,states,1>& get_predicted_next_state(\n        ) const;\n        /*!\n            ensures\n                - returns the next expected value of the process state.  \n                - Specifically, returns get_transition_model()*get_current_state()\n                  \n        !*/\n\n        const matrix<double,states,states>& get_current_estimation_error_covariance(\n        ) const;\n        /*!\n            ensures\n                - returns the current state error estimation covariance matrix.  \n                  This matrix captures our uncertainty about the value of get_current_state().\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const kalman_filter& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        kalman_filter& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KALMAN_FiLTER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/filtering/rls_filter.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RLS_FiLTER_Hh_\n#define DLIB_RLS_FiLTER_Hh_\n\n#include \"rls_filter_abstract.h\"\n#include \"../svm/rls.h\"\n#include <vector>\n#include \"../matrix.h\"\n#include \"../sliding_buffer.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class rls_filter\n    {\n        /*!\n            CONVENTION\n                - data.size() == the number of variables in a measurement \n                - data[i].size() == data[j].size() for all i and j.  \n                - data[i].size() == get_window_size() \n                - data[i][0] == most recent measurement of i-th variable given to update.\n                - data[i].back() == oldest measurement of i-th variable given to update \n                  (or zero if we haven't seen this much data yet).\n\n                - if (count <= 2) then\n                    - count == number of times update(z) has been called\n        !*/\n    public:\n\n        rls_filter()\n        {\n            size = 5;\n            count = 0;\n            filter = rls(0.8, 100);\n        }\n\n        explicit rls_filter (\n            unsigned long size_,\n            double forget_factor = 0.8,\n            double C = 100\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < forget_factor && forget_factor <= 1 &&\n                        0 < C && size_ >= 2,\n                \"\\t rls_filter::rls_filter()\"\n                << \"\\n\\t invalid arguments were given to this function\"\n                << \"\\n\\t forget_factor: \" << forget_factor \n                << \"\\n\\t C:     \" << C \n                << \"\\n\\t size_: \" << size_\n                << \"\\n\\t this: \" << this\n                );\n\n            size = size_;\n            count = 0;\n            filter = rls(forget_factor, C);\n        }\n\n        double get_c(\n        ) const\n        {\n            return filter.get_c();\n        }\n\n        double get_forget_factor(\n        ) const\n        {\n            return filter.get_forget_factor();\n        }\n\n        unsigned long get_window_size (\n        ) const\n        {\n            return size;\n        }\n\n        void update (\n        )\n        {\n            if (filter.get_w().size() == 0)\n                return;\n\n            for (unsigned long i = 0; i < data.size(); ++i)\n            {\n                // Put old predicted value into the circular buffer as if it was \n                // the measurement we just observed.  But don't update the rls filter.\n                data[i].push_front(next(i));\n            }\n\n            // predict next state\n            for (long i = 0; i < next.size(); ++i)\n                next(i) = filter(mat(data[i]));\n        }\n\n        template <typename EXP>\n        void update (\n            const matrix_exp<EXP>& z\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(z) == true &&\n                        z.size() != 0 &&\n                        (get_predicted_next_state().size()==0 || z.size()==get_predicted_next_state().size()),\n                \"\\t void rls_filter::update(z)\"\n                << \"\\n\\t invalid arguments were given to this function\"\n                << \"\\n\\t is_col_vector(z): \" << is_col_vector(z) \n                << \"\\n\\t z.size():         \" << z.size()\n                << \"\\n\\t get_predicted_next_state().size(): \" << get_predicted_next_state().size()\n                << \"\\n\\t this: \" << this\n                );\n\n            // initialize data if necessary \n            if (data.size() == 0)\n            {\n                data.resize(z.size());\n                for (long i = 0; i < z.size(); ++i)\n                    data[i].assign(size, 0);\n            }\n\n\n            for (unsigned long i = 0; i < data.size(); ++i)\n            {\n                // Once there is some stuff in the circular buffer, start\n                // showing it to the rls filter so it can do its thing.\n                if (count >= 2)\n                {\n                    filter.train(mat(data[i]), z(i));\n                }\n\n                // keep track of the measurements in our circular buffer\n                data[i].push_front(z(i));\n            }\n\n            // Don't bother with the filter until we have seen two samples\n            if (count >= 2)\n            {\n                // predict next state\n                for (long i = 0; i < z.size(); ++i)\n                    next(i) = filter(mat(data[i]));\n            }\n            else\n            {\n                // Use current measurement as the next state prediction\n                // since we don't know any better at this point.\n                ++count;\n                next = matrix_cast<double>(z);\n            }\n        }\n\n        const matrix<double,0,1>& get_predicted_next_state(\n        )\n        {\n            return next;\n        }\n\n        friend inline void serialize(const rls_filter& item, std::ostream& out)\n        {\n            int version = 1;\n            serialize(version, out);\n            serialize(item.count, out);\n            serialize(item.size, out);\n            serialize(item.filter, out);\n            serialize(item.next, out);\n            serialize(item.data, out);\n        }\n\n        friend inline void deserialize(rls_filter& item, std::istream& in)\n        {\n            int version = 0;\n            deserialize(version, in);\n            if (version != 1)\n                throw dlib::serialization_error(\"Unknown version number found while deserializing rls_filter object.\");\n\n            deserialize(item.count, in);\n            deserialize(item.size, in);\n            deserialize(item.filter, in);\n            deserialize(item.next, in);\n            deserialize(item.data, in);\n        }\n\n    private:\n\n        unsigned long count;\n        unsigned long size;\n        rls filter;\n        matrix<double,0,1> next;\n        std::vector<circular_buffer<double> > data;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RLS_FiLTER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/filtering/rls_filter_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RLS_FiLTER_ABSTRACT_Hh_\n#ifdef DLIB_RLS_FiLTER_ABSTRACT_Hh_\n\n#include \"../svm/rls_abstract.h\"\n#include \"../matrix/matrix_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class rls_filter\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for doing time series prediction using linear \n                recursive least squares.  In particular, this object takes a sequence \n                of points from the user and, at each step, attempts to predict the \n                value of the next point.  \n\n                To accomplish this, this object maintains a fixed size buffer of recent \n                points.  Each prediction is a linear combination of the points in this \n                history buffer.  It uses the recursive least squares algorithm to \n                determine how to best combine the contents of the history buffer to\n                predict each point.  Therefore, each time update() is called with\n                a point, recursive least squares updates the linear combination weights,\n                and then it inserts the point into the history buffer.  After that, the \n                next prediction is based on these updated weights and the current history \n                buffer.\n        !*/\n\n    public:\n\n        rls_filter(\n        );\n        /*!\n            ensures\n                - #get_window_size() == 5\n                - #get_forget_factor() == 0.8\n                - #get_c() == 100\n                - #get_predicted_next_state().size() == 0\n        !*/\n\n        explicit rls_filter (\n            unsigned long size,\n            double forget_factor = 0.8,\n            double C = 100\n        );\n        /*!\n            requires\n                - 0 < forget_factor <= 1\n                - 0 < C\n                - size >= 2\n            ensures\n                - #get_window_size() == size\n                - #get_forget_factor() == forget_factor\n                - #get_c() == C\n                - #get_predicted_next_state().size() == 0\n        !*/\n\n        double get_c(\n        ) const;\n        /*!\n            ensures\n                - returns the regularization parameter.  It is the parameter that determines \n                  the trade-off between trying to fit the data points given to update() or \n                  allowing more errors but hopefully improving the generalization of the \n                  predictions.  Larger values encourage exact fitting while smaller values \n                  of C may encourage better generalization. \n        !*/\n\n        double get_forget_factor(\n        ) const;\n        /*!\n            ensures\n                - This object uses exponential forgetting in its implementation of recursive \n                  least squares.  Therefore, this function returns the \"forget factor\". \n                - if (get_forget_factor() == 1) then\n                    - In this case, exponential forgetting is disabled.\n                    - The recursive least squares algorithm will implicitly take all previous\n                      calls to update(z) into account when estimating the optimal weights for\n                      linearly combining the history buffer into a prediction of the next point.\n                - else\n                    - Old calls to update(z) are eventually forgotten.  That is, the smaller\n                      the forget factor, the less recursive least squares will care about \n                      attempting to find linear combination weights which would have make \n                      good predictions on old points.  It will care more about fitting recent \n                      points.  This is appropriate if the statistical properties of the time \n                      series we are modeling are not constant.\n        !*/\n\n        unsigned long get_window_size (\n        ) const;\n        /*!\n            ensures\n                - returns the size of the history buffer.  This is the number of points which\n                  are linearly combine to make the predictions returned by get_predicted_next_state().\n        !*/\n\n        void update (\n        );\n        /*!\n            ensures\n                - Propagates the prediction forward in time.\n                - In particular, the value in get_predicted_next_state() is inserted\n                  into the history buffer and then the next prediction is estimated \n                  based on this updated history buffer.\n                - #get_predicted_next_state() == the prediction for the next point\n                  in the time series.\n        !*/\n\n        template <typename EXP>\n        void update (\n            const matrix_exp<EXP>& z\n        );\n        /*!\n            requires\n                - is_col_vector(z) == true\n                - z.size() != 0\n                - if (get_predicted_next_state().size() != 0) then\n                    - z.size() == get_predicted_next_state().size()\n                      (i.e. z must be the same size as all the previous z values given\n                      to this function)\n            ensures\n                - Updates the state of this filter based on the current measurement in z. \n                - In particular, the filter weights are updated and z is inserted into\n                  the history buffer.  Then the next prediction is estimated based on \n                  these updated weights and history buffer.\n                - #get_predicted_next_state() == the prediction for the next point\n                  in the time series.\n                - #get_predicted_next_state().size() == z.size()\n        !*/\n\n        const matrix<double,0,1>& get_predicted_next_state(\n        );\n        /*!\n            ensures\n                - returns the estimate of the next point we will observe in the\n                  time series data.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const rls_filter& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        rls_filter& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n\n}\n\n#endif // DLIB_RLS_FiLTER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/filtering.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FILTERiNG_HEADER\n#define DLIB_FILTERiNG_HEADER\n\n#include \"filtering/kalman_filter.h\"\n#include \"filtering/rls_filter.h\"\n\n#endif // DLIB_FILTERiNG_HEADER\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/float_details.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FLOAT_DEtAILS_Hh_\n#define DLIB_FLOAT_DEtAILS_Hh_\n\n#include <math.h>\n#include \"algs.h\"\n#include <limits> \n\nnamespace dlib\n{\n    struct float_details\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for converting floating point numbers into an\n                explicit integer representation and then also converting back.  In\n                particular, a float_details object represents a floating point number with\n                a 64 bit mantissa and 16 bit exponent.  These are stored in the public\n                fields of the same names.\n\n                The main use of this object is to convert floating point values into a\n                known uniform representation so they can be serialized to an output stream.\n                This allows dlib serialization code to work on any system, regardless of\n                the floating point representation used by the hardware.  It also means\n                that, for example, a double can be serialized and then deserialized into a\n                float and it will perform the appropriate conversion.\n\n\n                In more detail, this object represents a floating point value equal to\n                mantissa*pow(2,exponent), except when exponent takes on any of the\n                following special values: \n                    - is_inf\n                    - is_ninf\n                    - is_nan\n                These values are used to indicate that the floating point value should be\n                either infinity, negative infinity, or not-a-number respectively.\n        !*/\n\n        float_details(\n            int64 man,\n            int16 exp\n        ) : mantissa(man), exponent(exp) {}\n        /*!\n            ensures\n                - #mantissa == man\n                - #exponent == exp\n        !*/\n\n        float_details() :\n            mantissa(0), exponent(0)\n        {}\n        /*!\n            ensures\n                - this object represents a floating point value of 0\n        !*/\n\n        float_details ( const double&      val) { *this = val; }\n        float_details ( const float&       val) { *this = val; }\n        float_details ( const long double& val) { *this = val; }\n        /*!\n            ensures\n                - converts the given value into a float_details representation.  This \n                  means that converting #*this back into a floating point number should\n                  recover the input val.\n        !*/\n\n        float_details& operator= ( const double&      val) { convert_from_T(val); return *this; }\n        float_details& operator= ( const float&       val) { convert_from_T(val); return *this; }\n        float_details& operator= ( const long double& val) { convert_from_T(val); return *this; }\n        /*!\n            ensures\n                - converts the given value into a float_details representation.  This \n                  means that converting #*this back into a floating point number should\n                  recover the input val.\n        !*/\n\n        operator double      () const { return convert_to_T<double>(); }\n        operator float       () const { return convert_to_T<float>(); }\n        operator long double () const { return convert_to_T<long double>(); }\n        /*!\n            ensures\n                - converts the contents of this float_details object into a floating point number.\n        !*/\n\n        const static int16 is_inf  = 32000;\n        const static int16 is_ninf = 32001;\n        const static int16 is_nan  = 32002;\n\n        int64 mantissa;\n        int16 exponent;\n\n\n    private:\n\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                  IMPLEMENTATION DETAILS \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n\n\n\n        double      _frexp(double      v, int* e) const { return frexp(v,e); }\n        float       _frexp(float       v, int* e) const { return frexpf(v,e); }\n\n        double      _ldexp(double      v, int e) const { return ldexp(v,e); }\n        float       _ldexp(float       v, int e) const { return ldexpf(v,e); }\n\n#ifdef __CYGWIN__\n        // frexpl and ldexpl aren't available on cygwin so just use the double version.\n        long double _frexp(long double v, int* e) const { return _frexp((double)v,e); }\n        long double _ldexp(long double v, int e) const { return _ldexp((double)v,e); }\n#else\n        long double _frexp(long double v, int* e) const { return frexpl(v,e); }\n        long double _ldexp(long double v, int e) const { return ldexpl(v,e); }\n#endif\n\n        template <typename T>\n        void convert_from_T (\n            const T& val\n        )\n        {\n            mantissa = 0;\n\n            const int digits = dlib::tmin<std::numeric_limits<T>::digits, 63>::value;\n\n            if (val == std::numeric_limits<T>::infinity())\n            {\n                exponent = is_inf;\n            }\n            else if (val == -std::numeric_limits<T>::infinity())\n            {\n                exponent = is_ninf;\n            }\n            else if (val < std::numeric_limits<T>::infinity())\n            {\n                int exp;\n                mantissa = static_cast<int64>(_frexp(val, &exp)*(((uint64)1)<<digits));\n                exponent = exp - digits;\n\n                // Compact the representation a bit by shifting off any low order bytes \n                // which are zero in the mantissa.  This makes the numbers in mantissa and\n                // exponent generally smaller which can make serialization and other things\n                // more efficient in some cases.\n                for (int i = 0; i < 8 && ((mantissa&0xFF)==0); ++i)\n                {\n                    mantissa >>= 8;\n                    exponent += 8;\n                }\n            }\n            else\n            {\n                exponent = is_nan;\n            }\n        }\n\n        template <typename T>\n        T convert_to_T (\n        ) const\n        {\n            if (exponent < is_inf)\n                return _ldexp((T)mantissa, exponent);\n            else if (exponent == is_inf)\n                return std::numeric_limits<T>::infinity();\n            else if (exponent == is_ninf)\n                return -std::numeric_limits<T>::infinity();\n            else\n                return std::numeric_limits<T>::quiet_NaN();\n        }\n\n    };\n\n}\n\n#endif // DLIB_FLOAT_DEtAILS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/fstream",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/general_hash/count_bits.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_COUNT_BiTS_Hh_\n#define DLIB_COUNT_BiTS_Hh_\n\n#include \"../algs.h\"\n#include <climits>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    T count_bits (\n        T v\n    )\n    /*!\n        requires\n            - T is an unsigned integral type\n        ensures\n            - returns the number of bits in v which are set to 1.\n    !*/\n    {\n        COMPILE_TIME_ASSERT(is_unsigned_type<T>::value && sizeof(T) <= 8);\n\n        // This bit of bit trickery is from:\n        // http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSet64\n\n        v = v - ((v >> 1) & (T)~(T)0/3);                           \n        v = (v & (T)~(T)0/15*3) + ((v >> 2) & (T)~(T)0/15*3);      \n        v = (v + (v >> 4)) & (T)~(T)0/255*15;                      \n        return (T)(v * ((T)~(T)0/255)) >> (sizeof(T) - 1) * CHAR_BIT; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    T hamming_distance (\n        const T& a,\n        const T& b\n    )\n    /*!\n        requires\n            - T is an unsigned integral type\n        ensures\n            - returns the number of bits which differ between a and b.\n    !*/\n    {\n        return count_bits(a^b);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_COUNT_BiTS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/general_hash/count_bits_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_COUNT_BiTS_ABSTRACT_Hh_\n#ifdef DLIB_COUNT_BiTS_ABSTRACT_Hh_\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    T count_bits (\n        T v\n    );\n    /*!\n        requires\n            - T is an unsigned integral type\n        ensures\n            - returns the number of bits in v which are set to 1.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    T hamming_distance (\n        const T& a,\n        const T& b\n    );\n    /*!\n        requires\n            - T is an unsigned integral type\n        ensures\n            - returns the number of bits which differ between a and b.  (I.e. returns\n              count_bits(a^b).)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_COUNT_BiTS_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/general_hash/general_hash.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GENERAL_HASh_\n#define DLIB_GENERAL_HASh_\n\n\n#include <string>\n#include \"hash.h\"\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------- provide a general hashing function object ----------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class general_hash\n    {\n    public:\n        inline unsigned long operator() (\n            const T& item\n        ) const;\n    };\n    /*!\n        Note that the default behavior of general hash is to attempt to cast\n        an object of type T to an unsigned long and use that as the hash.\n\n        REQUIREMENTS ON general_hash\n            - must have a default constructor\n            - must be a function object which overloads operator() as follows:\n              unsigned long operator()(const T& item)             \n            - must take item, compute a hash number and return it \n            - must not throw\n            - must define the hash in such a way that all equivalent objects have \n              the same hash.  where equivalent means the following:\n                  definition of equivalent:\n                  a is equivalent to b if\n                  a < b == false and\n                  b < a == false\n    !*/\n\n// ---------------\n\n    template <\n        typename T\n        >\n    unsigned long general_hash<T>:: \n    operator() (\n        const T& item\n    ) const\n    {\n        // hash any types that have a conversion to uint64 \n        return hash(static_cast<uint64>(item));\n    }\n\n\n// ---------------\n\n    // std::string hash\n    template <>\n    inline unsigned long general_hash<std::string>:: \n    operator() (\n        const std::string& item\n    ) const\n    {\n        return hash(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GENERAL_HASh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/general_hash/hash.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HAsH_Hh_ \n#define DLIB_HAsH_Hh_ \n\n#include \"hash_abstract.h\"\n#include <vector>\n#include <string>\n#include <map>\n#include \"murmur_hash3.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 hash (\n        const std::string& item,\n        uint32 seed = 0\n    )\n    {\n        if (item.size() == 0)\n            return 0;\n        else\n            return murmur_hash3(&item[0], sizeof(item[0])*item.size(), seed);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 hash (\n        const std::wstring& item,\n        uint32 seed = 0\n    )\n    {\n        if (item.size() == 0)\n            return 0;\n        else\n            return murmur_hash3(&item[0], sizeof(item[0])*item.size(), seed);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    uint32 hash (\n        const std::vector<T,alloc>& item,\n        uint32 seed = 0\n    )\n    {\n        DLIB_ASSERT_HAS_STANDARD_LAYOUT(T);\n\n        if (item.size() == 0)\n            return 0;\n        else\n            return murmur_hash3(&item[0], sizeof(T)*item.size(), seed);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename alloc>\n    uint32 hash (\n        const std::vector<std::pair<T,U>,alloc>& item,\n        uint32 seed = 0\n    )\n    {\n        DLIB_ASSERT_HAS_STANDARD_LAYOUT(T);\n        DLIB_ASSERT_HAS_STANDARD_LAYOUT(U);\n\n        if (item.size() == 0)\n            return 0;\n        else\n            return murmur_hash3(&item[0], sizeof(item[0])*item.size(), seed);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename comp, typename alloc>\n    uint32 hash (\n        const std::map<T,U,comp,alloc>& item,\n        uint32 seed = 0\n    )\n    {\n        return hash(std::vector<std::pair<T,U> >(item.begin(), item.end()), seed);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 hash (\n        uint32 val,\n        uint32 seed = 0\n    )\n    {\n        return murmur_hash3_2(val,seed);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 hash (\n        uint64 val,\n        uint32 seed = 0\n    )\n    {\n        return static_cast<uint32>(murmur_hash3_128bit_3(val,seed,0).first);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 hash (\n        const std::pair<uint64,uint64>& item,\n        uint32 seed = 0\n    )\n    {\n        return static_cast<uint32>(murmur_hash3_128bit_3(item.first,item.second,seed).first);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 hash (\n        const std::pair<uint32,uint32>& item,\n        uint32 seed = 0\n    )\n    {\n        return murmur_hash3_3(item.first,item.second,seed);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    uint32 hash (\n        const std::pair<T,U>& item,\n        uint32 seed = 0\n    )\n    {\n        return hash(item.first, seed) ^ hash(item.second, seed+1); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HAsH_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/general_hash/hash_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_HAsH_ABSTRACT_Hh_\n#ifdef DLIB_HAsH_ABSTRACT_Hh_ \n\n#include \"murmur_hash3_abstract.h\"\n#include <vector>\n#include <string>\n#include <map>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    uint32 hash (\n        const std::string& item,\n        uint32 seed = 0\n    );\n    /*!\n        ensures\n            - returns a 32bit hash of the data stored in item.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. hash(item,0) should generally not be equal to hash(item,1))\n            - uses the murmur_hash3() routine to compute the actual hash.\n            - This routine will always give the same hash value when presented\n              with the same input string.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    uint32 hash (\n        const std::wstring& item,\n        uint32 seed = 0\n    );\n    /*!\n        ensures\n            - returns a 32bit hash of the data stored in item.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. hash(item,0) should generally not be equal to hash(item,1))\n            - uses the murmur_hash3() routine to compute the actual hash.\n            - Note that if the memory layout of the elements in item change between\n              hardware platforms then hash() will give different outputs.  If you want\n              hash() to always give the same output for the same input then you must \n              ensure that elements of item always have the same layout in memory.\n              Typically this means using fixed width types and performing byte swapping\n              to account for endianness before passing item to hash().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    uint32 hash (\n        const std::vector<T,alloc>& item,\n        uint32 seed = 0\n    );\n    /*!\n        requires\n            - T is a standard layout type (e.g. a POD type like int, float, \n              or a simple struct).\n        ensures\n            - returns a 32bit hash of the data stored in item.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. hash(item,0) should generally not be equal to hash(item,1))\n            - uses the murmur_hash3() routine to compute the actual hash.\n            - Note that if the memory layout of the elements in item change between\n              hardware platforms then hash() will give different outputs.  If you want\n              hash() to always give the same output for the same input then you must \n              ensure that elements of item always have the same layout in memory.\n              Typically this means using fixed width types and performing byte swapping\n              to account for endianness before passing item to hash().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename alloc>\n    uint32 hash (\n        const std::vector<std::pair<T,U>,alloc>& item,\n        uint32 seed = 0\n    );\n    /*!\n        requires\n            - T and U are standard layout types (e.g. POD types like int, float, \n              or simple structs).\n        ensures\n            - returns a 32bit hash of the data stored in item.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. hash(item,0) should generally not be equal to hash(item,1))\n            - uses the murmur_hash3() routine to compute the actual hash.\n            - Note that if the memory layout of the elements in item change between\n              hardware platforms then hash() will give different outputs.  If you want\n              hash() to always give the same output for the same input then you must \n              ensure that elements of item always have the same layout in memory.\n              Typically this means using fixed width types and performing byte swapping\n              to account for endianness before passing item to hash().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename comp, typename alloc>\n    uint32 hash (\n        const std::map<T,U,comp,alloc>& item,\n        uint32 seed = 0\n    );\n    /*!\n        requires\n            - T and U are standard layout types (e.g. POD types like int, float, \n              or simple structs).\n        ensures\n            - returns a 32bit hash of the data stored in item.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. hash(item,0) should generally not be equal to hash(item,1))\n            - uses the murmur_hash3() routine to compute the actual hash.\n            - Note that if the memory layout of the elements in item change between\n              hardware platforms then hash() will give different outputs.  If you want\n              hash() to always give the same output for the same input then you must \n              ensure that elements of item always have the same layout in memory.\n              Typically this means using fixed width types and performing byte swapping\n              to account for endianness before passing item to hash().  However, since\n              you can't modify the keys in a map you may have to copy it into a \n              std::vector and then work from there.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 hash (\n        uint32 item,\n        uint32 seed = 0\n    );\n    /*!\n        ensures\n            - returns a 32bit hash of the data stored in item.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. hash(item,0) should generally not be equal to hash(item,1))\n            - uses the murmur_hash3_2() routine to compute the actual hash.\n            - This routine will always give the same hash value when presented\n              with the same input.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 hash (\n        uint64 item,\n        uint32 seed = 0\n    );\n    /*!\n        ensures\n            - returns a 32bit hash of the data stored in item.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. hash(item,0) should generally not be equal to hash(item,1))\n            - uses the murmur_hash3_128bit_3() routine to compute the actual hash.\n            - This routine will always give the same hash value when presented\n              with the same input.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    uint32 hash (\n        const std::pair<T,U>& item,\n        uint32 seed = 0\n    );\n    /*!\n        requires\n            - hash() is defined for objects of type T and U\n        ensures\n            - returns a 32bit hash of the data stored in item.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. hash(item,0) should generally not be equal to hash(item,1))\n            - if (calling hash() on items of type T and U is always guaranteed to give the\n              same hash values when presented with the same input) then\n                - This routine will always give the same hash value when presented\n                  with the same input.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HAsH_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/general_hash/murmur_hash3.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MURMUR_HAsH_3_Hh_ \n#define DLIB_MURMUR_HAsH_3_Hh_ \n\n#include \"murmur_hash3_abstract.h\"\n#include \"../uintn.h\"\n#include <utility>\n#include <string.h>\n\nnamespace dlib\n{\n    //-----------------------------------------------------------------------------\n    // The original MurmurHash3 code was written by Austin Appleby, and is placed \n    // in the public domain. The author hereby disclaims copyright to this source code.\n    // The code in this particular file was modified by Davis E. King.  In\n    // particular, endian-swapping was added along with some other minor code\n    // changes like avoiding strict aliasing violations.\n\n\n    //-----------------------------------------------------------------------------\n    // Platform-specific functions and macros\n\n    // Microsoft Visual Studio\n\n#if defined(_MSC_VER)\n\n#define DLIB_FORCE_INLINE\t__forceinline\n\n#include <stdlib.h>\n\n#define DLIB_ROTL32(x,y)\t_rotl(x,y)\n#define DLIB_ROTL64(x,y)\t_rotl64(x,y)\n\n#define DLIB_BIG_CONSTANT(x) (x)\n\n    // Other compilers\n\n#else\t// defined(_MSC_VER)\n\n#define\tDLIB_FORCE_INLINE __attribute__((always_inline)) inline \n\n    inline uint32 murmur_rotl32 ( uint32 x, int8 r )\n    {\n        return (x << r) | (x >> (32 - r));\n    }\n\n    inline uint64 murmur_rotl64 ( uint64 x, int8 r )\n    {\n        return (x << r) | (x >> (64 - r));\n    }\n\n#define\tDLIB_ROTL32(x,y)\tdlib::murmur_rotl32(x,y)\n#define DLIB_ROTL64(x,y)\tdlib::murmur_rotl64(x,y)\n\n#define DLIB_BIG_CONSTANT(x) (x##LLU)\n\n#endif // !defined(_MSC_VER)\n\n// ----------------------------------------------------------------------------------------\n    // Block read - if your platform needs to do endian-swapping or can only\n    // handle aligned reads, do the conversion here\n\n    DLIB_FORCE_INLINE uint32 murmur_getblock ( const uint32 * p, int i )\n    {\n        // The reason we do a memcpy() here instead of simply returning p[i] is because\n        // doing it this way avoids violations of the strict aliasing rule when all these\n        // functions are inlined into the user's code.\n        uint32 temp;\n        memcpy(&temp, p+i, 4);\n        return temp;\n    }\n\n    DLIB_FORCE_INLINE uint32 murmur_getblock_byte_swap ( const uint32 * p, int i )\n    {\n        union \n        {\n            uint8 bytes[4];\n            uint32 val;\n        } temp;\n\n        const uint8* pp = reinterpret_cast<const uint8*>(p + i);\n        temp.bytes[0] = pp[3];\n        temp.bytes[1] = pp[2];\n        temp.bytes[2] = pp[1];\n        temp.bytes[3] = pp[0];\n\n        return temp.val;\n    }\n\n    DLIB_FORCE_INLINE uint64 murmur_getblock ( const uint64 * p, int i )\n    {\n        // The reason we do a memcpy() here instead of simply returning p[i] is because\n        // doing it this way avoids violations of the strict aliasing rule when all these\n        // functions are inlined into the user's code.\n        uint64 temp;\n        memcpy(&temp, p+i, 8);\n        return temp;\n    }\n\n    DLIB_FORCE_INLINE uint64 murmur_getblock_byte_swap ( const uint64 * p, int i )\n    {\n        union \n        {\n            uint8 bytes[8];\n            uint64 val;\n        } temp;\n\n        const uint8* pp = reinterpret_cast<const uint8*>(p + i);\n        temp.bytes[0] = pp[7];\n        temp.bytes[1] = pp[6];\n        temp.bytes[2] = pp[5];\n        temp.bytes[3] = pp[4];\n        temp.bytes[4] = pp[3];\n        temp.bytes[5] = pp[2];\n        temp.bytes[6] = pp[1];\n        temp.bytes[7] = pp[0];\n\n        return temp.val;\n    }\n\n// ----------------------------------------------------------------------------------------\n    // Finalization mix - force all bits of a hash block to avalanche\n\n    DLIB_FORCE_INLINE uint32 murmur_fmix ( uint32 h )\n    {\n        h ^= h >> 16;\n        h *= 0x85ebca6b;\n        h ^= h >> 13;\n        h *= 0xc2b2ae35;\n        h ^= h >> 16;\n\n        return h;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    DLIB_FORCE_INLINE uint64 murmur_fmix ( uint64 k )\n    {\n        k ^= k >> 33;\n        k *= DLIB_BIG_CONSTANT(0xff51afd7ed558ccd);\n        k ^= k >> 33;\n        k *= DLIB_BIG_CONSTANT(0xc4ceb9fe1a85ec53);\n        k ^= k >> 33;\n\n        return k;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 murmur_hash3 ( \n        const void * key, \n        const int len, \n        const uint32 seed = 0\n    )\n    {\n        const uint8 * data = (const uint8*)key;\n        const int nblocks = len / 4;\n\n        uint32 h1 = seed;\n\n        uint32 c1 = 0xcc9e2d51;\n        uint32 c2 = 0x1b873593;\n\n        //----------\n        // body\n\n        const uint32 * blocks = (const uint32 *)(data + nblocks*4);\n\n        bool is_little_endian = true;\n        uint32 endian_test = 1;\n        if (*reinterpret_cast<unsigned char*>(&endian_test) != 1)\n            is_little_endian = false;\n\n\n        if (is_little_endian)\n        {\n            for(int i = -nblocks; i; i++)\n            {\n                uint32 k1 = murmur_getblock(blocks,i);\n\n                k1 *= c1;\n                k1 = DLIB_ROTL32(k1,15);\n                k1 *= c2;\n\n                h1 ^= k1;\n                h1 = DLIB_ROTL32(h1,13); \n                h1 = h1*5+0xe6546b64;\n            }\n        }\n        else\n        {\n            for(int i = -nblocks; i; i++)\n            {\n                uint32 k1 = murmur_getblock_byte_swap(blocks,i);\n\n                k1 *= c1;\n                k1 = DLIB_ROTL32(k1,15);\n                k1 *= c2;\n\n                h1 ^= k1;\n                h1 = DLIB_ROTL32(h1,13); \n                h1 = h1*5+0xe6546b64;\n            }\n        }\n\n        //----------\n        // tail\n\n        const uint8 * tail = (const uint8*)(data + nblocks*4);\n\n        uint32 k1 = 0;\n\n        switch(len & 3)\n        {\n            case 3: k1 ^= tail[2] << 16;\n            case 2: k1 ^= tail[1] << 8;\n            case 1: k1 ^= tail[0];\n                    k1 *= c1; k1 = DLIB_ROTL32(k1,15); k1 *= c2; h1 ^= k1;\n        };\n\n        //----------\n        // finalization\n\n        h1 ^= len;\n\n        h1 = murmur_fmix(h1);\n\n        return h1;\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 murmur_hash3_2 ( \n        const uint32 v1,\n        const uint32 v2 \n    )\n    {\n        uint32 h1 = v2;\n\n        uint32 c1 = 0xcc9e2d51;\n        uint32 c2 = 0x1b873593;\n\n        //----------\n        // body\n\n\n        uint32 k1 = v1;\n\n        k1 *= c1;\n        k1 = DLIB_ROTL32(k1,15);\n        k1 *= c2;\n\n        h1 ^= k1;\n        h1 = DLIB_ROTL32(h1,13); \n        h1 = h1*5+0xe6546b64;\n\n\n        //----------\n        // finalization\n\n        h1 ^= 4; // =^ by length in bytes\n\n        h1 = murmur_fmix(h1);\n\n        return h1;\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 murmur_hash3_3 ( \n        const uint32 v1,\n        const uint32 v2, \n        const uint32 v3 \n    )\n    {\n\n        uint32 h1 = v3;\n\n        uint32 c1 = 0xcc9e2d51;\n        uint32 c2 = 0x1b873593;\n\n        //----------\n        // body\n\n\n        uint32 k1 = v1;\n\n        k1 *= c1;\n        k1 = DLIB_ROTL32(k1,15);\n        k1 *= c2;\n\n        h1 ^= k1;\n        h1 = DLIB_ROTL32(h1,13); \n        h1 = h1*5+0xe6546b64;\n\n        k1 = v2;\n        k1 *= c1;\n        k1 = DLIB_ROTL32(k1,15);\n        k1 *= c2;\n\n        h1 ^= k1;\n        h1 = DLIB_ROTL32(h1,13); \n        h1 = h1*5+0xe6546b64;\n\n        //----------\n        // finalization\n\n        h1 ^= 8; // =^ by length in bytes\n\n        h1 = murmur_fmix(h1);\n\n        return h1;\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    inline std::pair<uint64,uint64> murmur_hash3_128bit ( \n        const void* key, \n        const int len,\n        const uint32 seed = 0\n    )\n    {\n        const uint8 * data = (const uint8*)key;\n        const int nblocks = len / 16;\n\n        uint64 h1 = seed;\n        uint64 h2 = seed;\n\n        uint64 c1 = DLIB_BIG_CONSTANT(0x87c37b91114253d5);\n        uint64 c2 = DLIB_BIG_CONSTANT(0x4cf5ad432745937f);\n\n        //----------\n        // body\n\n        const uint64 * blocks = (const uint64 *)(data);\n\n        bool is_little_endian = true;\n        uint32 endian_test = 1;\n        if (*reinterpret_cast<unsigned char*>(&endian_test) != 1)\n            is_little_endian = false;\n\n\n        if (is_little_endian)\n        {\n            for(int i = 0; i < nblocks; i++)\n            {\n                uint64 k1 = murmur_getblock(blocks,i*2+0);\n                uint64 k2 = murmur_getblock(blocks,i*2+1);\n\n                k1 *= c1; k1  = DLIB_ROTL64(k1,31); k1 *= c2; h1 ^= k1;\n\n                h1 = DLIB_ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;\n\n                k2 *= c2; k2  = DLIB_ROTL64(k2,33); k2 *= c1; h2 ^= k2;\n\n                h2 = DLIB_ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;\n            }\n        }\n        else\n        {\n            for(int i = 0; i < nblocks; i++)\n            {\n                uint64 k1 = murmur_getblock_byte_swap(blocks,i*2+0);\n                uint64 k2 = murmur_getblock_byte_swap(blocks,i*2+1);\n\n                k1 *= c1; k1  = DLIB_ROTL64(k1,31); k1 *= c2; h1 ^= k1;\n\n                h1 = DLIB_ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;\n\n                k2 *= c2; k2  = DLIB_ROTL64(k2,33); k2 *= c1; h2 ^= k2;\n\n                h2 = DLIB_ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;\n            }\n        }\n\n        //----------\n        // tail\n\n        const uint8 * tail = (const uint8*)(data + nblocks*16);\n\n        uint64 k1 = 0;\n        uint64 k2 = 0;\n\n        switch(len & 15)\n        {\n            case 15: k2 ^= uint64(tail[14]) << 48;\n            case 14: k2 ^= uint64(tail[13]) << 40;\n            case 13: k2 ^= uint64(tail[12]) << 32;\n            case 12: k2 ^= uint64(tail[11]) << 24;\n            case 11: k2 ^= uint64(tail[10]) << 16;\n            case 10: k2 ^= uint64(tail[ 9]) << 8;\n            case  9: k2 ^= uint64(tail[ 8]) << 0;\n                     k2 *= c2; k2  = DLIB_ROTL64(k2,33); k2 *= c1; h2 ^= k2;\n\n            case  8: k1 ^= uint64(tail[ 7]) << 56;\n            case  7: k1 ^= uint64(tail[ 6]) << 48;\n            case  6: k1 ^= uint64(tail[ 5]) << 40;\n            case  5: k1 ^= uint64(tail[ 4]) << 32;\n            case  4: k1 ^= uint64(tail[ 3]) << 24;\n            case  3: k1 ^= uint64(tail[ 2]) << 16;\n            case  2: k1 ^= uint64(tail[ 1]) << 8;\n            case  1: k1 ^= uint64(tail[ 0]) << 0;\n                     k1 *= c1; k1  = DLIB_ROTL64(k1,31); k1 *= c2; h1 ^= k1;\n        };\n\n        //----------\n        // finalization\n\n        h1 ^= len; h2 ^= len;\n\n        h1 += h2;\n        h2 += h1;\n\n        h1 = murmur_fmix(h1);\n        h2 = murmur_fmix(h2);\n\n        h1 += h2;\n        h2 += h1;\n\n        return std::make_pair(h1,h2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::pair<uint64,uint64> murmur_hash3_128bit ( \n        const uint32& v1, \n        const uint32& v2, \n        const uint32& v3, \n        const uint32& v4 \n    )\n    {\n        uint64 h1 = 0;\n        uint64 h2 = 0;\n\n        const uint64 c1 = DLIB_BIG_CONSTANT(0x87c37b91114253d5);\n        const uint64 c2 = DLIB_BIG_CONSTANT(0x4cf5ad432745937f);\n\n        //----------\n        // body\n\n        uint64 k1 = (static_cast<uint64>(v2)<<32)|v1; \n        uint64 k2 = (static_cast<uint64>(v4)<<32)|v3; \n\n        k1 *= c1; k1  = DLIB_ROTL64(k1,31); k1 *= c2;\n\n        h1 = DLIB_ROTL64(k1,27); h1 = h1*5+0x52dce729;\n\n        k2 *= c2; k2  = DLIB_ROTL64(k2,33); k2 *= c1; \n\n        h2 = DLIB_ROTL64(k2,31); h2 += h1; h2 = h2*5+0x38495ab5;\n\n        //----------\n        // finalization\n\n        h1 ^= 16; h2 ^= 16;\n\n        h1 += h2;\n        h2 += h1;\n\n        h1 = murmur_fmix(h1);\n        h2 = murmur_fmix(h2);\n\n        h1 += h2;\n        h2 += h1;\n\n        return std::make_pair(h1,h2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::pair<uint64,uint64> murmur_hash3_128bit_3 ( \n        uint64 k1, \n        uint64 k2,\n        uint64 k3 \n    )\n    {\n        uint64 h1 = k3;\n        uint64 h2 = k3;\n\n        const uint64 c1 = DLIB_BIG_CONSTANT(0x87c37b91114253d5);\n        const uint64 c2 = DLIB_BIG_CONSTANT(0x4cf5ad432745937f);\n\n        //----------\n        // body\n\n        k1 *= c1; k1  = DLIB_ROTL64(k1,31); k1 *= c2; h1 ^= k1;\n\n        h1 = DLIB_ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;\n\n        k2 *= c2; k2  = DLIB_ROTL64(k2,33); k2 *= c1; h2 ^= k2;\n\n        h2 = DLIB_ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;\n\n        //----------\n        // finalization\n\n        h1 ^= 16; h2 ^= 16;\n\n        h1 += h2;\n        h2 += h1;\n\n        h1 = murmur_fmix(h1);\n        h2 = murmur_fmix(h2);\n\n        h1 += h2;\n        h2 += h1;\n\n        return std::make_pair(h1,h2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MURMUR_HAsH_3_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/general_hash/murmur_hash3_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MURMUR_HAsH_3_ABSTRACT_Hh_ \n#ifdef DLIB_MURMUR_HAsH_3_ABSTRACT_Hh_ \n\n#include \"../uintn.h\"\n#include <utility>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    uint32 murmur_hash3 ( \n        const void* key, \n        const int len, \n        const uint32 seed = 0\n    );\n    /*!\n        requires\n            - key == a pointer to a block of memory len bytes long\n        ensures\n            - returns a 32bit hash of the len bytes pointed to by key.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. murmur_hash3(key,len,0) should generally not be equal to murmur_hash3(key,len,1))\n            - This function is machine architecture agnostic and should always give the same\n              hash value when presented with the same inputs.\n            - This hashing algorithm is Austin Appleby's excellent MurmurHash3_x86_32.  \n              See: http://code.google.com/p/smhasher/\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 murmur_hash3_2 ( \n        const uint32 v1,\n        const uint32 v2 \n    );\n    /*!\n        ensures\n            - returns a 32bit hash of the two integers given to this function.  \n            - This function is machine architecture agnostic and should always give the same\n              hash value when presented with the same inputs.\n            - This hashing algorithm is Austin Appleby's excellent MurmurHash3_x86_32.  \n              See: http://code.google.com/p/smhasher/\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline uint32 murmur_hash3_3 ( \n        const uint32 v1,\n        const uint32 v2,\n        const uint32 v3 \n    );\n    /*!\n        ensures\n            - returns a 32bit hash of the three integers given to this function.  \n            - This function is machine architecture agnostic and should always give the same\n              hash value when presented with the same inputs.\n            - This hashing algorithm is Austin Appleby's excellent MurmurHash3_x86_32.  \n              See: http://code.google.com/p/smhasher/\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    std::pair<uint64,uint64> murmur_hash3_128bit ( \n        const void* key, \n        const int len,\n        const uint32 seed = 0\n    );\n    /*!\n        requires\n            - key == a pointer to a block of memory len bytes long\n        ensures\n            - returns a 128bit hash (as two 64bit numbers) of the len bytes pointed to by key.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. murmur_hash3_128bit(key,len,0) should generally not be equal to \n              murmur_hash3_128bit(key,len,1))\n            - This function is machine architecture agnostic and should always give the same\n              hash value when presented with the same inputs.\n            - This hashing algorithm is Austin Appleby's excellent MurmurHash3_x64_128.  \n              See: http://code.google.com/p/smhasher/\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    std::pair<uint64,uint64> murmur_hash3_128bit ( \n        const uint32& v1, \n        const uint32& v2, \n        const uint32& v3, \n        const uint32& v4 \n    );\n    /*!\n        ensures\n            - returns a 128bit hash (as two 64bit numbers) of the 4 integers given to this\n              function. \n            - This function is machine architecture agnostic and should always give the\n              same hash value when presented with the same inputs.\n            - This hashing algorithm is Austin Appleby's excellent MurmurHash3_x64_128.  \n              See: http://code.google.com/p/smhasher/\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    std::pair<uint64,uint64> murmur_hash3_128bit_3 ( \n        uint64 k1, \n        uint64 k2,\n        uint64 k3 \n    );\n    /*!\n        ensures\n            - returns a 128bit hash (as two 64bit numbers) of the 3 integers given to this\n              function. \n            - This function is machine architecture agnostic and should always give the\n              same hash value when presented with the same inputs.\n            - This hashing algorithm is Austin Appleby's excellent MurmurHash3_x64_128.  \n              See: http://code.google.com/p/smhasher/\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MURMUR_HAsH_3_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/general_hash/random_hashing.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RANDOM_HAsHING_Hh_ \n#define DLIB_RANDOM_HAsHING_Hh_ \n\n#include \"random_hashing_abstract.h\"\n#include \"murmur_hash3.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    inline double uniform_random_hash (\n        const uint64& k1,\n        const uint64& k2,\n        const uint64& k3\n    )\n    {\n        const std::pair<uint64,uint64> h = murmur_hash3_128bit_3(k1,k2,k3);\n        const uint64 mask = DLIB_BIG_CONSTANT(0xFFFFFFFFFF); \n        const double max = mask+1;\n        return static_cast<double>(h.first&mask)/max;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double gaussian_random_hash (\n        const uint64& k1,\n        const uint64& k2,\n        const uint64& k3\n    )\n    {\n        const std::pair<uint64,uint64> h = murmur_hash3_128bit_3(k1,k2,k3);\n\n        const static unsigned int max = 4096;\n\n        const static float logvals[max] = { \n        4.079f, 3.905f, 3.8f, 3.723f, 3.663f, 3.613f, 3.57f, 3.532f, 3.499f, 3.468f, \n        3.441f, 3.416f, 3.392f, 3.37f, 3.35f, 3.33f, 3.312f, 3.295f, 3.278f, 3.263f, \n        3.248f, 3.233f, 3.219f, 3.206f, 3.193f, 3.181f, 3.169f, 3.158f, 3.147f, 3.136f, \n        3.125f, 3.115f, 3.105f, 3.096f, 3.086f, 3.077f, 3.068f, 3.059f, 3.051f, 3.043f, \n        3.035f, 3.027f, 3.019f, 3.011f, 3.004f, 2.996f, 2.989f, 2.982f, 2.975f, 2.968f, \n        2.962f, 2.955f, 2.949f, 2.942f, 2.936f, 2.93f, 2.924f, 2.918f, 2.912f, 2.906f, \n        2.901f, 2.895f, 2.89f, 2.884f, 2.879f, 2.873f, 2.868f, 2.863f, 2.858f, 2.853f, \n        2.848f, 2.843f, 2.838f, 2.833f, 2.829f, 2.824f, 2.819f, 2.815f, 2.81f, 2.806f, \n        2.801f, 2.797f, 2.792f, 2.788f, 2.784f, 2.78f, 2.776f, 2.771f, 2.767f, 2.763f, \n        2.759f, 2.755f, 2.751f, 2.748f, 2.744f, 2.74f, 2.736f, 2.732f, 2.729f, 2.725f, \n        2.721f, 2.718f, 2.714f, 2.71f, 2.707f, 2.703f, 2.7f, 2.697f, 2.693f, 2.69f, \n        2.686f, 2.683f, 2.68f, 2.676f, 2.673f, 2.67f, 2.667f, 2.663f, 2.66f, 2.657f, \n        2.654f, 2.651f, 2.648f, 2.645f, 2.642f, 2.639f, 2.636f, 2.633f, 2.63f, 2.627f, \n        2.624f, 2.621f, 2.618f, 2.615f, 2.612f, 2.61f, 2.607f, 2.604f, 2.601f, 2.599f, \n        2.596f, 2.593f, 2.59f, 2.588f, 2.585f, 2.582f, 2.58f, 2.577f, 2.574f, 2.572f, \n        2.569f, 2.567f, 2.564f, 2.562f, 2.559f, 2.557f, 2.554f, 2.552f, 2.549f, 2.547f, \n        2.544f, 2.542f, 2.539f, 2.537f, 2.534f, 2.532f, 2.53f, 2.527f, 2.525f, 2.523f, \n        2.52f, 2.518f, 2.516f, 2.513f, 2.511f, 2.509f, 2.507f, 2.504f, 2.502f, 2.5f, \n        2.498f, 2.495f, 2.493f, 2.491f, 2.489f, 2.487f, 2.485f, 2.482f, 2.48f, 2.478f, \n        2.476f, 2.474f, 2.472f, 2.47f, 2.468f, 2.466f, 2.464f, 2.462f, 2.459f, 2.457f, \n        2.455f, 2.453f, 2.451f, 2.449f, 2.447f, 2.445f, 2.443f, 2.441f, 2.439f, 2.437f, \n        2.436f, 2.434f, 2.432f, 2.43f, 2.428f, 2.426f, 2.424f, 2.422f, 2.42f, 2.418f, \n        2.416f, 2.415f, 2.413f, 2.411f, 2.409f, 2.407f, 2.405f, 2.404f, 2.402f, 2.4f, \n        2.398f, 2.396f, 2.394f, 2.393f, 2.391f, 2.389f, 2.387f, 2.386f, 2.384f, 2.382f, \n        2.38f, 2.379f, 2.377f, 2.375f, 2.373f, 2.372f, 2.37f, 2.368f, 2.367f, 2.365f, \n        2.363f, 2.361f, 2.36f, 2.358f, 2.356f, 2.355f, 2.353f, 2.352f, 2.35f, 2.348f, \n        2.347f, 2.345f, 2.343f, 2.342f, 2.34f, 2.338f, 2.337f, 2.335f, 2.334f, 2.332f, \n        2.331f, 2.329f, 2.327f, 2.326f, 2.324f, 2.323f, 2.321f, 2.32f, 2.318f, 2.316f, \n        2.315f, 2.313f, 2.312f, 2.31f, 2.309f, 2.307f, 2.306f, 2.304f, 2.303f, 2.301f, \n        2.3f, 2.298f, 2.297f, 2.295f, 2.294f, 2.292f, 2.291f, 2.289f, 2.288f, 2.286f, \n        2.285f, 2.284f, 2.282f, 2.281f, 2.279f, 2.278f, 2.276f, 2.275f, 2.274f, 2.272f, \n        2.271f, 2.269f, 2.268f, 2.266f, 2.265f, 2.264f, 2.262f, 2.261f, 2.259f, 2.258f, \n        2.257f, 2.255f, 2.254f, 2.253f, 2.251f, 2.25f, 2.248f, 2.247f, 2.246f, 2.244f, \n        2.243f, 2.242f, 2.24f, 2.239f, 2.238f, 2.236f, 2.235f, 2.234f, 2.232f, 2.231f, \n        2.23f, 2.228f, 2.227f, 2.226f, 2.225f, 2.223f, 2.222f, 2.221f, 2.219f, 2.218f, \n        2.217f, 2.215f, 2.214f, 2.213f, 2.212f, 2.21f, 2.209f, 2.208f, 2.207f, 2.205f, \n        2.204f, 2.203f, 2.202f, 2.2f, 2.199f, 2.198f, 2.197f, 2.195f, 2.194f, 2.193f, \n        2.192f, 2.19f, 2.189f, 2.188f, 2.187f, 2.185f, 2.184f, 2.183f, 2.182f, 2.181f, \n        2.179f, 2.178f, 2.177f, 2.176f, 2.175f, 2.173f, 2.172f, 2.171f, 2.17f, 2.169f, \n        2.168f, 2.166f, 2.165f, 2.164f, 2.163f, 2.162f, 2.16f, 2.159f, 2.158f, 2.157f, \n        2.156f, 2.155f, 2.154f, 2.152f, 2.151f, 2.15f, 2.149f, 2.148f, 2.147f, 2.146f, \n        2.144f, 2.143f, 2.142f, 2.141f, 2.14f, 2.139f, 2.138f, 2.136f, 2.135f, 2.134f, \n        2.133f, 2.132f, 2.131f, 2.13f, 2.129f, 2.128f, 2.126f, 2.125f, 2.124f, 2.123f, \n        2.122f, 2.121f, 2.12f, 2.119f, 2.118f, 2.117f, 2.116f, 2.114f, 2.113f, 2.112f, \n        2.111f, 2.11f, 2.109f, 2.108f, 2.107f, 2.106f, 2.105f, 2.104f, 2.103f, 2.102f, \n        2.101f, 2.1f, 2.099f, 2.097f, 2.096f, 2.095f, 2.094f, 2.093f, 2.092f, 2.091f, \n        2.09f, 2.089f, 2.088f, 2.087f, 2.086f, 2.085f, 2.084f, 2.083f, 2.082f, 2.081f, \n        2.08f, 2.079f, 2.078f, 2.077f, 2.076f, 2.075f, 2.074f, 2.073f, 2.072f, 2.071f, \n        2.07f, 2.069f, 2.068f, 2.067f, 2.066f, 2.065f, 2.064f, 2.063f, 2.062f, 2.061f, \n        2.06f, 2.059f, 2.058f, 2.057f, 2.056f, 2.055f, 2.054f, 2.053f, 2.052f, 2.051f, \n        2.05f, 2.049f, 2.048f, 2.047f, 2.046f, 2.045f, 2.044f, 2.043f, 2.042f, 2.041f, \n        2.04f, 2.039f, 2.038f, 2.037f, 2.036f, 2.036f, 2.035f, 2.034f, 2.033f, 2.032f, \n        2.031f, 2.03f, 2.029f, 2.028f, 2.027f, 2.026f, 2.025f, 2.024f, 2.023f, 2.022f, \n        2.021f, 2.02f, 2.02f, 2.019f, 2.018f, 2.017f, 2.016f, 2.015f, 2.014f, 2.013f, \n        2.012f, 2.011f, 2.01f, 2.009f, 2.008f, 2.008f, 2.007f, 2.006f, 2.005f, 2.004f, \n        2.003f, 2.002f, 2.001f, 2.0f, 1.999f, 1.998f, 1.998f, 1.997f, 1.996f, 1.995f, \n        1.994f, 1.993f, 1.992f, 1.991f, 1.99f, 1.99f, 1.989f, 1.988f, 1.987f, 1.986f, \n        1.985f, 1.984f, 1.983f, 1.982f, 1.982f, 1.981f, 1.98f, 1.979f, 1.978f, 1.977f, \n        1.976f, 1.975f, 1.975f, 1.974f, 1.973f, 1.972f, 1.971f, 1.97f, 1.969f, 1.969f, \n        1.968f, 1.967f, 1.966f, 1.965f, 1.964f, 1.963f, 1.963f, 1.962f, 1.961f, 1.96f, \n        1.959f, 1.958f, 1.957f, 1.957f, 1.956f, 1.955f, 1.954f, 1.953f, 1.952f, 1.952f, \n        1.951f, 1.95f, 1.949f, 1.948f, 1.947f, 1.947f, 1.946f, 1.945f, 1.944f, 1.943f, \n        1.942f, 1.942f, 1.941f, 1.94f, 1.939f, 1.938f, 1.937f, 1.937f, 1.936f, 1.935f, \n        1.934f, 1.933f, 1.933f, 1.932f, 1.931f, 1.93f, 1.929f, 1.928f, 1.928f, 1.927f, \n        1.926f, 1.925f, 1.924f, 1.924f, 1.923f, 1.922f, 1.921f, 1.92f, 1.92f, 1.919f, \n        1.918f, 1.917f, 1.916f, 1.916f, 1.915f, 1.914f, 1.913f, 1.912f, 1.912f, 1.911f, \n        1.91f, 1.909f, 1.908f, 1.908f, 1.907f, 1.906f, 1.905f, 1.904f, 1.904f, 1.903f, \n        1.902f, 1.901f, 1.901f, 1.9f, 1.899f, 1.898f, 1.897f, 1.897f, 1.896f, 1.895f, \n        1.894f, 1.894f, 1.893f, 1.892f, 1.891f, 1.89f, 1.89f, 1.889f, 1.888f, 1.887f, \n        1.887f, 1.886f, 1.885f, 1.884f, 1.884f, 1.883f, 1.882f, 1.881f, 1.88f, 1.88f, \n        1.879f, 1.878f, 1.877f, 1.877f, 1.876f, 1.875f, 1.874f, 1.874f, 1.873f, 1.872f, \n        1.871f, 1.871f, 1.87f, 1.869f, 1.868f, 1.868f, 1.867f, 1.866f, 1.865f, 1.865f, \n        1.864f, 1.863f, 1.862f, 1.862f, 1.861f, 1.86f, 1.859f, 1.859f, 1.858f, 1.857f, \n        1.857f, 1.856f, 1.855f, 1.854f, 1.854f, 1.853f, 1.852f, 1.851f, 1.851f, 1.85f, \n        1.849f, 1.848f, 1.848f, 1.847f, 1.846f, 1.846f, 1.845f, 1.844f, 1.843f, 1.843f, \n        1.842f, 1.841f, 1.84f, 1.84f, 1.839f, 1.838f, 1.838f, 1.837f, 1.836f, 1.835f, \n        1.835f, 1.834f, 1.833f, 1.833f, 1.832f, 1.831f, 1.83f, 1.83f, 1.829f, 1.828f, \n        1.828f, 1.827f, 1.826f, 1.825f, 1.825f, 1.824f, 1.823f, 1.823f, 1.822f, 1.821f, \n        1.821f, 1.82f, 1.819f, 1.818f, 1.818f, 1.817f, 1.816f, 1.816f, 1.815f, 1.814f, \n        1.814f, 1.813f, 1.812f, 1.811f, 1.811f, 1.81f, 1.809f, 1.809f, 1.808f, 1.807f, \n        1.807f, 1.806f, 1.805f, 1.805f, 1.804f, 1.803f, 1.802f, 1.802f, 1.801f, 1.8f, \n        1.8f, 1.799f, 1.798f, 1.798f, 1.797f, 1.796f, 1.796f, 1.795f, 1.794f, 1.794f, \n        1.793f, 1.792f, 1.792f, 1.791f, 1.79f, 1.79f, 1.789f, 1.788f, 1.787f, 1.787f, \n        1.786f, 1.785f, 1.785f, 1.784f, 1.783f, 1.783f, 1.782f, 1.781f, 1.781f, 1.78f, \n        1.779f, 1.779f, 1.778f, 1.777f, 1.777f, 1.776f, 1.775f, 1.775f, 1.774f, 1.773f, \n        1.773f, 1.772f, 1.771f, 1.771f, 1.77f, 1.769f, 1.769f, 1.768f, 1.767f, 1.767f, \n        1.766f, 1.766f, 1.765f, 1.764f, 1.764f, 1.763f, 1.762f, 1.762f, 1.761f, 1.76f, \n        1.76f, 1.759f, 1.758f, 1.758f, 1.757f, 1.756f, 1.756f, 1.755f, 1.754f, 1.754f, \n        1.753f, 1.752f, 1.752f, 1.751f, 1.751f, 1.75f, 1.749f, 1.749f, 1.748f, 1.747f, \n        1.747f, 1.746f, 1.745f, 1.745f, 1.744f, 1.743f, 1.743f, 1.742f, 1.742f, 1.741f, \n        1.74f, 1.74f, 1.739f, 1.738f, 1.738f, 1.737f, 1.736f, 1.736f, 1.735f, 1.735f, \n        1.734f, 1.733f, 1.733f, 1.732f, 1.731f, 1.731f, 1.73f, 1.729f, 1.729f, 1.728f, \n        1.728f, 1.727f, 1.726f, 1.726f, 1.725f, 1.724f, 1.724f, 1.723f, 1.723f, 1.722f, \n        1.721f, 1.721f, 1.72f, 1.719f, 1.719f, 1.718f, 1.718f, 1.717f, 1.716f, 1.716f, \n        1.715f, 1.715f, 1.714f, 1.713f, 1.713f, 1.712f, 1.711f, 1.711f, 1.71f, 1.71f, \n        1.709f, 1.708f, 1.708f, 1.707f, 1.706f, 1.706f, 1.705f, 1.705f, 1.704f, 1.703f, \n        1.703f, 1.702f, 1.702f, 1.701f, 1.7f, 1.7f, 1.699f, 1.699f, 1.698f, 1.697f, \n        1.697f, 1.696f, 1.696f, 1.695f, 1.694f, 1.694f, 1.693f, 1.692f, 1.692f, 1.691f, \n        1.691f, 1.69f, 1.689f, 1.689f, 1.688f, 1.688f, 1.687f, 1.686f, 1.686f, 1.685f, \n        1.685f, 1.684f, 1.683f, 1.683f, 1.682f, 1.682f, 1.681f, 1.68f, 1.68f, 1.679f, \n        1.679f, 1.678f, 1.678f, 1.677f, 1.676f, 1.676f, 1.675f, 1.675f, 1.674f, 1.673f, \n        1.673f, 1.672f, 1.672f, 1.671f, 1.67f, 1.67f, 1.669f, 1.669f, 1.668f, 1.667f, \n        1.667f, 1.666f, 1.666f, 1.665f, 1.665f, 1.664f, 1.663f, 1.663f, 1.662f, 1.662f, \n        1.661f, 1.66f, 1.66f, 1.659f, 1.659f, 1.658f, 1.658f, 1.657f, 1.656f, 1.656f, \n        1.655f, 1.655f, 1.654f, 1.653f, 1.653f, 1.652f, 1.652f, 1.651f, 1.651f, 1.65f, \n        1.649f, 1.649f, 1.648f, 1.648f, 1.647f, 1.647f, 1.646f, 1.645f, 1.645f, 1.644f, \n        1.644f, 1.643f, 1.643f, 1.642f, 1.641f, 1.641f, 1.64f, 1.64f, 1.639f, 1.639f, \n        1.638f, 1.637f, 1.637f, 1.636f, 1.636f, 1.635f, 1.635f, 1.634f, 1.633f, 1.633f, \n        1.632f, 1.632f, 1.631f, 1.631f, 1.63f, 1.629f, 1.629f, 1.628f, 1.628f, 1.627f, \n        1.627f, 1.626f, 1.625f, 1.625f, 1.624f, 1.624f, 1.623f, 1.623f, 1.622f, 1.622f, \n        1.621f, 1.62f, 1.62f, 1.619f, 1.619f, 1.618f, 1.618f, 1.617f, 1.617f, 1.616f, \n        1.615f, 1.615f, 1.614f, 1.614f, 1.613f, 1.613f, 1.612f, 1.612f, 1.611f, 1.61f, \n        1.61f, 1.609f, 1.609f, 1.608f, 1.608f, 1.607f, 1.607f, 1.606f, 1.605f, 1.605f, \n        1.604f, 1.604f, 1.603f, 1.603f, 1.602f, 1.602f, 1.601f, 1.6f, 1.6f, 1.599f, \n        1.599f, 1.598f, 1.598f, 1.597f, 1.597f, 1.596f, 1.596f, 1.595f, 1.594f, 1.594f, \n        1.593f, 1.593f, 1.592f, 1.592f, 1.591f, 1.591f, 1.59f, 1.59f, 1.589f, 1.588f, \n        1.588f, 1.587f, 1.587f, 1.586f, 1.586f, 1.585f, 1.585f, 1.584f, 1.584f, 1.583f, \n        1.582f, 1.582f, 1.581f, 1.581f, 1.58f, 1.58f, 1.579f, 1.579f, 1.578f, 1.578f, \n        1.577f, 1.577f, 1.576f, 1.576f, 1.575f, 1.574f, 1.574f, 1.573f, 1.573f, 1.572f, \n        1.572f, 1.571f, 1.571f, 1.57f, 1.57f, 1.569f, 1.569f, 1.568f, 1.567f, 1.567f, \n        1.566f, 1.566f, 1.565f, 1.565f, 1.564f, 1.564f, 1.563f, 1.563f, 1.562f, 1.562f, \n        1.561f, 1.561f, 1.56f, 1.56f, 1.559f, 1.558f, 1.558f, 1.557f, 1.557f, 1.556f, \n        1.556f, 1.555f, 1.555f, 1.554f, 1.554f, 1.553f, 1.553f, 1.552f, 1.552f, 1.551f, \n        1.551f, 1.55f, 1.55f, 1.549f, 1.549f, 1.548f, 1.547f, 1.547f, 1.546f, 1.546f, \n        1.545f, 1.545f, 1.544f, 1.544f, 1.543f, 1.543f, 1.542f, 1.542f, 1.541f, 1.541f, \n        1.54f, 1.54f, 1.539f, 1.539f, 1.538f, 1.538f, 1.537f, 1.537f, 1.536f, 1.536f, \n        1.535f, 1.534f, 1.534f, 1.533f, 1.533f, 1.532f, 1.532f, 1.531f, 1.531f, 1.53f, \n        1.53f, 1.529f, 1.529f, 1.528f, 1.528f, 1.527f, 1.527f, 1.526f, 1.526f, 1.525f, \n        1.525f, 1.524f, 1.524f, 1.523f, 1.523f, 1.522f, 1.522f, 1.521f, 1.521f, 1.52f, \n        1.52f, 1.519f, 1.519f, 1.518f, 1.518f, 1.517f, 1.517f, 1.516f, 1.516f, 1.515f, \n        1.515f, 1.514f, 1.514f, 1.513f, 1.512f, 1.512f, 1.511f, 1.511f, 1.51f, 1.51f, \n        1.509f, 1.509f, 1.508f, 1.508f, 1.507f, 1.507f, 1.506f, 1.506f, 1.505f, 1.505f, \n        1.504f, 1.504f, 1.503f, 1.503f, 1.502f, 1.502f, 1.501f, 1.501f, 1.5f, 1.5f, \n        1.499f, 1.499f, 1.498f, 1.498f, 1.497f, 1.497f, 1.496f, 1.496f, 1.495f, 1.495f, \n        1.494f, 1.494f, 1.493f, 1.493f, 1.492f, 1.492f, 1.491f, 1.491f, 1.49f, 1.49f, \n        1.489f, 1.489f, 1.488f, 1.488f, 1.487f, 1.487f, 1.486f, 1.486f, 1.485f, 1.485f, \n        1.484f, 1.484f, 1.483f, 1.483f, 1.482f, 1.482f, 1.481f, 1.481f, 1.48f, 1.48f, \n        1.48f, 1.479f, 1.479f, 1.478f, 1.478f, 1.477f, 1.477f, 1.476f, 1.476f, 1.475f, \n        1.475f, 1.474f, 1.474f, 1.473f, 1.473f, 1.472f, 1.472f, 1.471f, 1.471f, 1.47f, \n        1.47f, 1.469f, 1.469f, 1.468f, 1.468f, 1.467f, 1.467f, 1.466f, 1.466f, 1.465f, \n        1.465f, 1.464f, 1.464f, 1.463f, 1.463f, 1.462f, 1.462f, 1.461f, 1.461f, 1.46f, \n        1.46f, 1.459f, 1.459f, 1.458f, 1.458f, 1.458f, 1.457f, 1.457f, 1.456f, 1.456f, \n        1.455f, 1.455f, 1.454f, 1.454f, 1.453f, 1.453f, 1.452f, 1.452f, 1.451f, 1.451f, \n        1.45f, 1.45f, 1.449f, 1.449f, 1.448f, 1.448f, 1.447f, 1.447f, 1.446f, 1.446f, \n        1.445f, 1.445f, 1.444f, 1.444f, 1.444f, 1.443f, 1.443f, 1.442f, 1.442f, 1.441f, \n        1.441f, 1.44f, 1.44f, 1.439f, 1.439f, 1.438f, 1.438f, 1.437f, 1.437f, 1.436f, \n        1.436f, 1.435f, 1.435f, 1.434f, 1.434f, 1.434f, 1.433f, 1.433f, 1.432f, 1.432f, \n        1.431f, 1.431f, 1.43f, 1.43f, 1.429f, 1.429f, 1.428f, 1.428f, 1.427f, 1.427f, \n        1.426f, 1.426f, 1.425f, 1.425f, 1.424f, 1.424f, 1.424f, 1.423f, 1.423f, 1.422f, \n        1.422f, 1.421f, 1.421f, 1.42f, 1.42f, 1.419f, 1.419f, 1.418f, 1.418f, 1.417f, \n        1.417f, 1.416f, 1.416f, 1.416f, 1.415f, 1.415f, 1.414f, 1.414f, 1.413f, 1.413f, \n        1.412f, 1.412f, 1.411f, 1.411f, 1.41f, 1.41f, 1.409f, 1.409f, 1.409f, 1.408f, \n        1.408f, 1.407f, 1.407f, 1.406f, 1.406f, 1.405f, 1.405f, 1.404f, 1.404f, 1.403f, \n        1.403f, 1.402f, 1.402f, 1.402f, 1.401f, 1.401f, 1.4f, 1.4f, 1.399f, 1.399f, \n        1.398f, 1.398f, 1.397f, 1.397f, 1.396f, 1.396f, 1.395f, 1.395f, 1.395f, 1.394f, \n        1.394f, 1.393f, 1.393f, 1.392f, 1.392f, 1.391f, 1.391f, 1.39f, 1.39f, 1.389f, \n        1.389f, 1.389f, 1.388f, 1.388f, 1.387f, 1.387f, 1.386f, 1.386f, 1.385f, 1.385f, \n        1.384f, 1.384f, 1.383f, 1.383f, 1.383f, 1.382f, 1.382f, 1.381f, 1.381f, 1.38f, \n        1.38f, 1.379f, 1.379f, 1.378f, 1.378f, 1.378f, 1.377f, 1.377f, 1.376f, 1.376f, \n        1.375f, 1.375f, 1.374f, 1.374f, 1.373f, 1.373f, 1.373f, 1.372f, 1.372f, 1.371f, \n        1.371f, 1.37f, 1.37f, 1.369f, 1.369f, 1.368f, 1.368f, 1.367f, 1.367f, 1.367f, \n        1.366f, 1.366f, 1.365f, 1.365f, 1.364f, 1.364f, 1.363f, 1.363f, 1.362f, 1.362f, \n        1.362f, 1.361f, 1.361f, 1.36f, 1.36f, 1.359f, 1.359f, 1.358f, 1.358f, 1.358f, \n        1.357f, 1.357f, 1.356f, 1.356f, 1.355f, 1.355f, 1.354f, 1.354f, 1.353f, 1.353f, \n        1.353f, 1.352f, 1.352f, 1.351f, 1.351f, 1.35f, 1.35f, 1.349f, 1.349f, 1.349f, \n        1.348f, 1.348f, 1.347f, 1.347f, 1.346f, 1.346f, 1.345f, 1.345f, 1.344f, 1.344f, \n        1.344f, 1.343f, 1.343f, 1.342f, 1.342f, 1.341f, 1.341f, 1.34f, 1.34f, 1.34f, \n        1.339f, 1.339f, 1.338f, 1.338f, 1.337f, 1.337f, 1.336f, 1.336f, 1.336f, 1.335f, \n        1.335f, 1.334f, 1.334f, 1.333f, 1.333f, 1.332f, 1.332f, 1.332f, 1.331f, 1.331f, \n        1.33f, 1.33f, 1.329f, 1.329f, 1.328f, 1.328f, 1.328f, 1.327f, 1.327f, 1.326f, \n        1.326f, 1.325f, 1.325f, 1.324f, 1.324f, 1.324f, 1.323f, 1.323f, 1.322f, 1.322f, \n        1.321f, 1.321f, 1.32f, 1.32f, 1.32f, 1.319f, 1.319f, 1.318f, 1.318f, 1.317f, \n        1.317f, 1.316f, 1.316f, 1.316f, 1.315f, 1.315f, 1.314f, 1.314f, 1.313f, 1.313f, \n        1.312f, 1.312f, 1.312f, 1.311f, 1.311f, 1.31f, 1.31f, 1.309f, 1.309f, 1.309f, \n        1.308f, 1.308f, 1.307f, 1.307f, 1.306f, 1.306f, 1.305f, 1.305f, 1.305f, 1.304f, \n        1.304f, 1.303f, 1.303f, 1.302f, 1.302f, 1.302f, 1.301f, 1.301f, 1.3f, 1.3f, \n        1.299f, 1.299f, 1.298f, 1.298f, 1.298f, 1.297f, 1.297f, 1.296f, 1.296f, 1.295f, \n        1.295f, 1.295f, 1.294f, 1.294f, 1.293f, 1.293f, 1.292f, 1.292f, 1.291f, 1.291f, \n        1.291f, 1.29f, 1.29f, 1.289f, 1.289f, 1.288f, 1.288f, 1.288f, 1.287f, 1.287f, \n        1.286f, 1.286f, 1.285f, 1.285f, 1.285f, 1.284f, 1.284f, 1.283f, 1.283f, 1.282f, \n        1.282f, 1.281f, 1.281f, 1.281f, 1.28f, 1.28f, 1.279f, 1.279f, 1.278f, 1.278f, \n        1.278f, 1.277f, 1.277f, 1.276f, 1.276f, 1.275f, 1.275f, 1.275f, 1.274f, 1.274f, \n        1.273f, 1.273f, 1.272f, 1.272f, 1.272f, 1.271f, 1.271f, 1.27f, 1.27f, 1.269f, \n        1.269f, 1.269f, 1.268f, 1.268f, 1.267f, 1.267f, 1.266f, 1.266f, 1.266f, 1.265f, \n        1.265f, 1.264f, 1.264f, 1.263f, 1.263f, 1.263f, 1.262f, 1.262f, 1.261f, 1.261f, \n        1.26f, 1.26f, 1.26f, 1.259f, 1.259f, 1.258f, 1.258f, 1.257f, 1.257f, 1.257f, \n        1.256f, 1.256f, 1.255f, 1.255f, 1.254f, 1.254f, 1.254f, 1.253f, 1.253f, 1.252f, \n        1.252f, 1.251f, 1.251f, 1.251f, 1.25f, 1.25f, 1.249f, 1.249f, 1.248f, 1.248f, \n        1.248f, 1.247f, 1.247f, 1.246f, 1.246f, 1.245f, 1.245f, 1.245f, 1.244f, 1.244f, \n        1.243f, 1.243f, 1.242f, 1.242f, 1.242f, 1.241f, 1.241f, 1.24f, 1.24f, 1.239f, \n        1.239f, 1.239f, 1.238f, 1.238f, 1.237f, 1.237f, 1.237f, 1.236f, 1.236f, 1.235f, \n        1.235f, 1.234f, 1.234f, 1.234f, 1.233f, 1.233f, 1.232f, 1.232f, 1.231f, 1.231f, \n        1.231f, 1.23f, 1.23f, 1.229f, 1.229f, 1.228f, 1.228f, 1.228f, 1.227f, 1.227f, \n        1.226f, 1.226f, 1.226f, 1.225f, 1.225f, 1.224f, 1.224f, 1.223f, 1.223f, 1.223f, \n        1.222f, 1.222f, 1.221f, 1.221f, 1.22f, 1.22f, 1.22f, 1.219f, 1.219f, 1.218f, \n        1.218f, 1.218f, 1.217f, 1.217f, 1.216f, 1.216f, 1.215f, 1.215f, 1.215f, 1.214f, \n        1.214f, 1.213f, 1.213f, 1.212f, 1.212f, 1.212f, 1.211f, 1.211f, 1.21f, 1.21f, \n        1.21f, 1.209f, 1.209f, 1.208f, 1.208f, 1.207f, 1.207f, 1.207f, 1.206f, 1.206f, \n        1.205f, 1.205f, 1.204f, 1.204f, 1.204f, 1.203f, 1.203f, 1.202f, 1.202f, 1.202f, \n        1.201f, 1.201f, 1.2f, 1.2f, 1.199f, 1.199f, 1.199f, 1.198f, 1.198f, 1.197f, \n        1.197f, 1.197f, 1.196f, 1.196f, 1.195f, 1.195f, 1.194f, 1.194f, 1.194f, 1.193f, \n        1.193f, 1.192f, 1.192f, 1.192f, 1.191f, 1.191f, 1.19f, 1.19f, 1.189f, 1.189f, \n        1.189f, 1.188f, 1.188f, 1.187f, 1.187f, 1.187f, 1.186f, 1.186f, 1.185f, 1.185f, \n        1.184f, 1.184f, 1.184f, 1.183f, 1.183f, 1.182f, 1.182f, 1.182f, 1.181f, 1.181f, \n        1.18f, 1.18f, 1.179f, 1.179f, 1.179f, 1.178f, 1.178f, 1.177f, 1.177f, 1.177f, \n        1.176f, 1.176f, 1.175f, 1.175f, 1.175f, 1.174f, 1.174f, 1.173f, 1.173f, 1.172f, \n        1.172f, 1.172f, 1.171f, 1.171f, 1.17f, 1.17f, 1.17f, 1.169f, 1.169f, 1.168f, \n        1.168f, 1.167f, 1.167f, 1.167f, 1.166f, 1.166f, 1.165f, 1.165f, 1.165f, 1.164f, \n        1.164f, 1.163f, 1.163f, 1.163f, 1.162f, 1.162f, 1.161f, 1.161f, 1.16f, 1.16f, \n        1.16f, 1.159f, 1.159f, 1.158f, 1.158f, 1.158f, 1.157f, 1.157f, 1.156f, 1.156f, \n        1.156f, 1.155f, 1.155f, 1.154f, 1.154f, 1.153f, 1.153f, 1.153f, 1.152f, 1.152f, \n        1.151f, 1.151f, 1.151f, 1.15f, 1.15f, 1.149f, 1.149f, 1.149f, 1.148f, 1.148f, \n        1.147f, 1.147f, 1.146f, 1.146f, 1.146f, 1.145f, 1.145f, 1.144f, 1.144f, 1.144f, \n        1.143f, 1.143f, 1.142f, 1.142f, 1.142f, 1.141f, 1.141f, 1.14f, 1.14f, 1.139f, \n        1.139f, 1.139f, 1.138f, 1.138f, 1.137f, 1.137f, 1.137f, 1.136f, 1.136f, 1.135f, \n        1.135f, 1.135f, 1.134f, 1.134f, 1.133f, 1.133f, 1.133f, 1.132f, 1.132f, 1.131f, \n        1.131f, 1.13f, 1.13f, 1.13f, 1.129f, 1.129f, 1.128f, 1.128f, 1.128f, 1.127f, \n        1.127f, 1.126f, 1.126f, 1.126f, 1.125f, 1.125f, 1.124f, 1.124f, 1.124f, 1.123f, \n        1.123f, 1.122f, 1.122f, 1.121f, 1.121f, 1.121f, 1.12f, 1.12f, 1.119f, 1.119f, \n        1.119f, 1.118f, 1.118f, 1.117f, 1.117f, 1.117f, 1.116f, 1.116f, 1.115f, 1.115f, \n        1.115f, 1.114f, 1.114f, 1.113f, 1.113f, 1.113f, 1.112f, 1.112f, 1.111f, 1.111f, \n        1.11f, 1.11f, 1.11f, 1.109f, 1.109f, 1.108f, 1.108f, 1.108f, 1.107f, 1.107f, \n        1.106f, 1.106f, 1.106f, 1.105f, 1.105f, 1.104f, 1.104f, 1.104f, 1.103f, 1.103f, \n        1.102f, 1.102f, 1.102f, 1.101f, 1.101f, 1.1f, 1.1f, 1.099f, 1.099f, 1.099f, \n        1.098f, 1.098f, 1.097f, 1.097f, 1.097f, 1.096f, 1.096f, 1.095f, 1.095f, 1.095f, \n        1.094f, 1.094f, 1.093f, 1.093f, 1.093f, 1.092f, 1.092f, 1.091f, 1.091f, 1.091f, \n        1.09f, 1.09f, 1.089f, 1.089f, 1.089f, 1.088f, 1.088f, 1.087f, 1.087f, 1.086f, \n        1.086f, 1.086f, 1.085f, 1.085f, 1.084f, 1.084f, 1.084f, 1.083f, 1.083f, 1.082f, \n        1.082f, 1.082f, 1.081f, 1.081f, 1.08f, 1.08f, 1.08f, 1.079f, 1.079f, 1.078f, \n        1.078f, 1.078f, 1.077f, 1.077f, 1.076f, 1.076f, 1.076f, 1.075f, 1.075f, 1.074f, \n        1.074f, 1.074f, 1.073f, 1.073f, 1.072f, 1.072f, 1.072f, 1.071f, 1.071f, 1.07f, \n        1.07f, 1.069f, 1.069f, 1.069f, 1.068f, 1.068f, 1.067f, 1.067f, 1.067f, 1.066f, \n        1.066f, 1.065f, 1.065f, 1.065f, 1.064f, 1.064f, 1.063f, 1.063f, 1.063f, 1.062f, \n        1.062f, 1.061f, 1.061f, 1.061f, 1.06f, 1.06f, 1.059f, 1.059f, 1.059f, 1.058f, \n        1.058f, 1.057f, 1.057f, 1.057f, 1.056f, 1.056f, 1.055f, 1.055f, 1.055f, 1.054f, \n        1.054f, 1.053f, 1.053f, 1.053f, 1.052f, 1.052f, 1.051f, 1.051f, 1.05f, 1.05f, \n        1.05f, 1.049f, 1.049f, 1.048f, 1.048f, 1.048f, 1.047f, 1.047f, 1.046f, 1.046f, \n        1.046f, 1.045f, 1.045f, 1.044f, 1.044f, 1.044f, 1.043f, 1.043f, 1.042f, 1.042f, \n        1.042f, 1.041f, 1.041f, 1.04f, 1.04f, 1.04f, 1.039f, 1.039f, 1.038f, 1.038f, \n        1.038f, 1.037f, 1.037f, 1.036f, 1.036f, 1.036f, 1.035f, 1.035f, 1.034f, 1.034f, \n        1.034f, 1.033f, 1.033f, 1.032f, 1.032f, 1.032f, 1.031f, 1.031f, 1.03f, 1.03f, \n        1.03f, 1.029f, 1.029f, 1.028f, 1.028f, 1.028f, 1.027f, 1.027f, 1.026f, 1.026f, \n        1.026f, 1.025f, 1.025f, 1.024f, 1.024f, 1.023f, 1.023f, 1.023f, 1.022f, 1.022f, \n        1.021f, 1.021f, 1.021f, 1.02f, 1.02f, 1.019f, 1.019f, 1.019f, 1.018f, 1.018f, \n        1.017f, 1.017f, 1.017f, 1.016f, 1.016f, 1.015f, 1.015f, 1.015f, 1.014f, 1.014f, \n        1.013f, 1.013f, 1.013f, 1.012f, 1.012f, 1.011f, 1.011f, 1.011f, 1.01f, 1.01f, \n        1.009f, 1.009f, 1.009f, 1.008f, 1.008f, 1.007f, 1.007f, 1.007f, 1.006f, 1.006f, \n        1.005f, 1.005f, 1.005f, 1.004f, 1.004f, 1.003f, 1.003f, 1.003f, 1.002f, 1.002f, \n        1.001f, 1.001f, 1.001f, 1.0f, 0.9997f, 0.9993f, 0.9989f, 0.9985f, 0.9981f, 0.9977f, \n        0.9973f, 0.9969f, 0.9965f, 0.9961f, 0.9957f, 0.9953f, 0.9949f, 0.9945f, 0.9941f, 0.9937f, \n        0.9933f, 0.9929f, 0.9925f, 0.9921f, 0.9917f, 0.9913f, 0.9909f, 0.9905f, 0.9901f, 0.9897f, \n        0.9893f, 0.9889f, 0.9885f, 0.9881f, 0.9877f, 0.9873f, 0.9869f, 0.9865f, 0.9861f, 0.9856f, \n        0.9852f, 0.9848f, 0.9844f, 0.984f, 0.9836f, 0.9832f, 0.9828f, 0.9824f, 0.982f, 0.9816f, \n        0.9812f, 0.9808f, 0.9804f, 0.98f, 0.9796f, 0.9792f, 0.9788f, 0.9784f, 0.978f, 0.9776f, \n        0.9772f, 0.9768f, 0.9764f, 0.976f, 0.9756f, 0.9752f, 0.9748f, 0.9744f, 0.974f, 0.9736f, \n        0.9732f, 0.9728f, 0.9724f, 0.972f, 0.9716f, 0.9712f, 0.9707f, 0.9703f, 0.9699f, 0.9695f, \n        0.9691f, 0.9687f, 0.9683f, 0.9679f, 0.9675f, 0.9671f, 0.9667f, 0.9663f, 0.9659f, 0.9655f, \n        0.9651f, 0.9647f, 0.9643f, 0.9639f, 0.9635f, 0.9631f, 0.9627f, 0.9623f, 0.9619f, 0.9615f, \n        0.9611f, 0.9607f, 0.9603f, 0.9599f, 0.9595f, 0.9591f, 0.9587f, 0.9583f, 0.9579f, 0.9574f, \n        0.957f, 0.9566f, 0.9562f, 0.9558f, 0.9554f, 0.955f, 0.9546f, 0.9542f, 0.9538f, 0.9534f, \n        0.953f, 0.9526f, 0.9522f, 0.9518f, 0.9514f, 0.951f, 0.9506f, 0.9502f, 0.9498f, 0.9494f, \n        0.949f, 0.9486f, 0.9482f, 0.9478f, 0.9474f, 0.947f, 0.9466f, 0.9462f, 0.9457f, 0.9453f, \n        0.9449f, 0.9445f, 0.9441f, 0.9437f, 0.9433f, 0.9429f, 0.9425f, 0.9421f, 0.9417f, 0.9413f, \n        0.9409f, 0.9405f, 0.9401f, 0.9397f, 0.9393f, 0.9389f, 0.9385f, 0.9381f, 0.9377f, 0.9373f, \n        0.9369f, 0.9365f, 0.9361f, 0.9356f, 0.9352f, 0.9348f, 0.9344f, 0.934f, 0.9336f, 0.9332f, \n        0.9328f, 0.9324f, 0.932f, 0.9316f, 0.9312f, 0.9308f, 0.9304f, 0.93f, 0.9296f, 0.9292f, \n        0.9288f, 0.9284f, 0.928f, 0.9276f, 0.9272f, 0.9267f, 0.9263f, 0.9259f, 0.9255f, 0.9251f, \n        0.9247f, 0.9243f, 0.9239f, 0.9235f, 0.9231f, 0.9227f, 0.9223f, 0.9219f, 0.9215f, 0.9211f, \n        0.9207f, 0.9203f, 0.9199f, 0.9195f, 0.9191f, 0.9186f, 0.9182f, 0.9178f, 0.9174f, 0.917f, \n        0.9166f, 0.9162f, 0.9158f, 0.9154f, 0.915f, 0.9146f, 0.9142f, 0.9138f, 0.9134f, 0.913f, \n        0.9126f, 0.9122f, 0.9118f, 0.9113f, 0.9109f, 0.9105f, 0.9101f, 0.9097f, 0.9093f, 0.9089f, \n        0.9085f, 0.9081f, 0.9077f, 0.9073f, 0.9069f, 0.9065f, 0.9061f, 0.9057f, 0.9053f, 0.9049f, \n        0.9044f, 0.904f, 0.9036f, 0.9032f, 0.9028f, 0.9024f, 0.902f, 0.9016f, 0.9012f, 0.9008f, \n        0.9004f, 0.9f, 0.8996f, 0.8992f, 0.8988f, 0.8983f, 0.8979f, 0.8975f, 0.8971f, 0.8967f, \n        0.8963f, 0.8959f, 0.8955f, 0.8951f, 0.8947f, 0.8943f, 0.8939f, 0.8935f, 0.8931f, 0.8926f, \n        0.8922f, 0.8918f, 0.8914f, 0.891f, 0.8906f, 0.8902f, 0.8898f, 0.8894f, 0.889f, 0.8886f, \n        0.8882f, 0.8878f, 0.8873f, 0.8869f, 0.8865f, 0.8861f, 0.8857f, 0.8853f, 0.8849f, 0.8845f, \n        0.8841f, 0.8837f, 0.8833f, 0.8829f, 0.8825f, 0.882f, 0.8816f, 0.8812f, 0.8808f, 0.8804f, \n        0.88f, 0.8796f, 0.8792f, 0.8788f, 0.8784f, 0.878f, 0.8775f, 0.8771f, 0.8767f, 0.8763f, \n        0.8759f, 0.8755f, 0.8751f, 0.8747f, 0.8743f, 0.8739f, 0.8735f, 0.873f, 0.8726f, 0.8722f, \n        0.8718f, 0.8714f, 0.871f, 0.8706f, 0.8702f, 0.8698f, 0.8694f, 0.869f, 0.8685f, 0.8681f, \n        0.8677f, 0.8673f, 0.8669f, 0.8665f, 0.8661f, 0.8657f, 0.8653f, 0.8649f, 0.8644f, 0.864f, \n        0.8636f, 0.8632f, 0.8628f, 0.8624f, 0.862f, 0.8616f, 0.8612f, 0.8607f, 0.8603f, 0.8599f, \n        0.8595f, 0.8591f, 0.8587f, 0.8583f, 0.8579f, 0.8575f, 0.857f, 0.8566f, 0.8562f, 0.8558f, \n        0.8554f, 0.855f, 0.8546f, 0.8542f, 0.8538f, 0.8533f, 0.8529f, 0.8525f, 0.8521f, 0.8517f, \n        0.8513f, 0.8509f, 0.8505f, 0.85f, 0.8496f, 0.8492f, 0.8488f, 0.8484f, 0.848f, 0.8476f, \n        0.8472f, 0.8467f, 0.8463f, 0.8459f, 0.8455f, 0.8451f, 0.8447f, 0.8443f, 0.8439f, 0.8434f, \n        0.843f, 0.8426f, 0.8422f, 0.8418f, 0.8414f, 0.841f, 0.8406f, 0.8401f, 0.8397f, 0.8393f, \n        0.8389f, 0.8385f, 0.8381f, 0.8377f, 0.8372f, 0.8368f, 0.8364f, 0.836f, 0.8356f, 0.8352f, \n        0.8348f, 0.8343f, 0.8339f, 0.8335f, 0.8331f, 0.8327f, 0.8323f, 0.8319f, 0.8314f, 0.831f, \n        0.8306f, 0.8302f, 0.8298f, 0.8294f, 0.8289f, 0.8285f, 0.8281f, 0.8277f, 0.8273f, 0.8269f, \n        0.8265f, 0.826f, 0.8256f, 0.8252f, 0.8248f, 0.8244f, 0.824f, 0.8235f, 0.8231f, 0.8227f, \n        0.8223f, 0.8219f, 0.8215f, 0.821f, 0.8206f, 0.8202f, 0.8198f, 0.8194f, 0.819f, 0.8185f, \n        0.8181f, 0.8177f, 0.8173f, 0.8169f, 0.8165f, 0.816f, 0.8156f, 0.8152f, 0.8148f, 0.8144f, \n        0.814f, 0.8135f, 0.8131f, 0.8127f, 0.8123f, 0.8119f, 0.8114f, 0.811f, 0.8106f, 0.8102f, \n        0.8098f, 0.8094f, 0.8089f, 0.8085f, 0.8081f, 0.8077f, 0.8073f, 0.8068f, 0.8064f, 0.806f, \n        0.8056f, 0.8052f, 0.8047f, 0.8043f, 0.8039f, 0.8035f, 0.8031f, 0.8026f, 0.8022f, 0.8018f, \n        0.8014f, 0.801f, 0.8005f, 0.8001f, 0.7997f, 0.7993f, 0.7989f, 0.7984f, 0.798f, 0.7976f, \n        0.7972f, 0.7968f, 0.7963f, 0.7959f, 0.7955f, 0.7951f, 0.7947f, 0.7942f, 0.7938f, 0.7934f, \n        0.793f, 0.7926f, 0.7921f, 0.7917f, 0.7913f, 0.7909f, 0.7904f, 0.79f, 0.7896f, 0.7892f, \n        0.7888f, 0.7883f, 0.7879f, 0.7875f, 0.7871f, 0.7866f, 0.7862f, 0.7858f, 0.7854f, 0.7849f, \n        0.7845f, 0.7841f, 0.7837f, 0.7833f, 0.7828f, 0.7824f, 0.782f, 0.7816f, 0.7811f, 0.7807f, \n        0.7803f, 0.7799f, 0.7794f, 0.779f, 0.7786f, 0.7782f, 0.7777f, 0.7773f, 0.7769f, 0.7765f, \n        0.776f, 0.7756f, 0.7752f, 0.7748f, 0.7743f, 0.7739f, 0.7735f, 0.7731f, 0.7726f, 0.7722f, \n        0.7718f, 0.7714f, 0.7709f, 0.7705f, 0.7701f, 0.7697f, 0.7692f, 0.7688f, 0.7684f, 0.7679f, \n        0.7675f, 0.7671f, 0.7667f, 0.7662f, 0.7658f, 0.7654f, 0.765f, 0.7645f, 0.7641f, 0.7637f, \n        0.7632f, 0.7628f, 0.7624f, 0.762f, 0.7615f, 0.7611f, 0.7607f, 0.7602f, 0.7598f, 0.7594f, \n        0.759f, 0.7585f, 0.7581f, 0.7577f, 0.7572f, 0.7568f, 0.7564f, 0.756f, 0.7555f, 0.7551f, \n        0.7547f, 0.7542f, 0.7538f, 0.7534f, 0.7529f, 0.7525f, 0.7521f, 0.7516f, 0.7512f, 0.7508f, \n        0.7504f, 0.7499f, 0.7495f, 0.7491f, 0.7486f, 0.7482f, 0.7478f, 0.7473f, 0.7469f, 0.7465f, \n        0.746f, 0.7456f, 0.7452f, 0.7447f, 0.7443f, 0.7439f, 0.7434f, 0.743f, 0.7426f, 0.7421f, \n        0.7417f, 0.7413f, 0.7408f, 0.7404f, 0.74f, 0.7395f, 0.7391f, 0.7387f, 0.7382f, 0.7378f, \n        0.7374f, 0.7369f, 0.7365f, 0.7361f, 0.7356f, 0.7352f, 0.7348f, 0.7343f, 0.7339f, 0.7335f, \n        0.733f, 0.7326f, 0.7321f, 0.7317f, 0.7313f, 0.7308f, 0.7304f, 0.73f, 0.7295f, 0.7291f, \n        0.7287f, 0.7282f, 0.7278f, 0.7273f, 0.7269f, 0.7265f, 0.726f, 0.7256f, 0.7252f, 0.7247f, \n        0.7243f, 0.7238f, 0.7234f, 0.723f, 0.7225f, 0.7221f, 0.7216f, 0.7212f, 0.7208f, 0.7203f, \n        0.7199f, 0.7195f, 0.719f, 0.7186f, 0.7181f, 0.7177f, 0.7173f, 0.7168f, 0.7164f, 0.7159f, \n        0.7155f, 0.7151f, 0.7146f, 0.7142f, 0.7137f, 0.7133f, 0.7128f, 0.7124f, 0.712f, 0.7115f, \n        0.7111f, 0.7106f, 0.7102f, 0.7098f, 0.7093f, 0.7089f, 0.7084f, 0.708f, 0.7075f, 0.7071f, \n        0.7066f, 0.7062f, 0.7058f, 0.7053f, 0.7049f, 0.7044f, 0.704f, 0.7035f, 0.7031f, 0.7027f, \n        0.7022f, 0.7018f, 0.7013f, 0.7009f, 0.7004f, 0.7f, 0.6995f, 0.6991f, 0.6986f, 0.6982f, \n        0.6978f, 0.6973f, 0.6969f, 0.6964f, 0.696f, 0.6955f, 0.6951f, 0.6946f, 0.6942f, 0.6937f, \n        0.6933f, 0.6928f, 0.6924f, 0.6919f, 0.6915f, 0.691f, 0.6906f, 0.6901f, 0.6897f, 0.6892f, \n        0.6888f, 0.6883f, 0.6879f, 0.6874f, 0.687f, 0.6865f, 0.6861f, 0.6856f, 0.6852f, 0.6847f, \n        0.6843f, 0.6838f, 0.6834f, 0.6829f, 0.6825f, 0.682f, 0.6816f, 0.6811f, 0.6807f, 0.6802f, \n        0.6798f, 0.6793f, 0.6789f, 0.6784f, 0.678f, 0.6775f, 0.6771f, 0.6766f, 0.6762f, 0.6757f, \n        0.6752f, 0.6748f, 0.6743f, 0.6739f, 0.6734f, 0.673f, 0.6725f, 0.6721f, 0.6716f, 0.6711f, \n        0.6707f, 0.6702f, 0.6698f, 0.6693f, 0.6689f, 0.6684f, 0.668f, 0.6675f, 0.667f, 0.6666f, \n        0.6661f, 0.6657f, 0.6652f, 0.6648f, 0.6643f, 0.6638f, 0.6634f, 0.6629f, 0.6625f, 0.662f, \n        0.6615f, 0.6611f, 0.6606f, 0.6602f, 0.6597f, 0.6592f, 0.6588f, 0.6583f, 0.6579f, 0.6574f, \n        0.6569f, 0.6565f, 0.656f, 0.6556f, 0.6551f, 0.6546f, 0.6542f, 0.6537f, 0.6532f, 0.6528f, \n        0.6523f, 0.6519f, 0.6514f, 0.6509f, 0.6505f, 0.65f, 0.6495f, 0.6491f, 0.6486f, 0.6481f, \n        0.6477f, 0.6472f, 0.6468f, 0.6463f, 0.6458f, 0.6454f, 0.6449f, 0.6444f, 0.644f, 0.6435f, \n        0.643f, 0.6426f, 0.6421f, 0.6416f, 0.6412f, 0.6407f, 0.6402f, 0.6397f, 0.6393f, 0.6388f, \n        0.6383f, 0.6379f, 0.6374f, 0.6369f, 0.6365f, 0.636f, 0.6355f, 0.6351f, 0.6346f, 0.6341f, \n        0.6336f, 0.6332f, 0.6327f, 0.6322f, 0.6318f, 0.6313f, 0.6308f, 0.6303f, 0.6299f, 0.6294f, \n        0.6289f, 0.6285f, 0.628f, 0.6275f, 0.627f, 0.6266f, 0.6261f, 0.6256f, 0.6251f, 0.6247f, \n        0.6242f, 0.6237f, 0.6232f, 0.6228f, 0.6223f, 0.6218f, 0.6213f, 0.6208f, 0.6204f, 0.6199f, \n        0.6194f, 0.6189f, 0.6185f, 0.618f, 0.6175f, 0.617f, 0.6165f, 0.6161f, 0.6156f, 0.6151f, \n        0.6146f, 0.6142f, 0.6137f, 0.6132f, 0.6127f, 0.6122f, 0.6117f, 0.6113f, 0.6108f, 0.6103f, \n        0.6098f, 0.6093f, 0.6089f, 0.6084f, 0.6079f, 0.6074f, 0.6069f, 0.6064f, 0.606f, 0.6055f, \n        0.605f, 0.6045f, 0.604f, 0.6035f, 0.603f, 0.6026f, 0.6021f, 0.6016f, 0.6011f, 0.6006f, \n        0.6001f, 0.5996f, 0.5992f, 0.5987f, 0.5982f, 0.5977f, 0.5972f, 0.5967f, 0.5962f, 0.5957f, \n        0.5952f, 0.5948f, 0.5943f, 0.5938f, 0.5933f, 0.5928f, 0.5923f, 0.5918f, 0.5913f, 0.5908f, \n        0.5903f, 0.5898f, 0.5894f, 0.5889f, 0.5884f, 0.5879f, 0.5874f, 0.5869f, 0.5864f, 0.5859f, \n        0.5854f, 0.5849f, 0.5844f, 0.5839f, 0.5834f, 0.5829f, 0.5824f, 0.5819f, 0.5814f, 0.5809f, \n        0.5804f, 0.5799f, 0.5794f, 0.5789f, 0.5784f, 0.5779f, 0.5774f, 0.5769f, 0.5764f, 0.5759f, \n        0.5754f, 0.5749f, 0.5744f, 0.5739f, 0.5734f, 0.5729f, 0.5724f, 0.5719f, 0.5714f, 0.5709f, \n        0.5704f, 0.5699f, 0.5694f, 0.5689f, 0.5684f, 0.5679f, 0.5674f, 0.5669f, 0.5664f, 0.5659f, \n        0.5654f, 0.5649f, 0.5644f, 0.5639f, 0.5633f, 0.5628f, 0.5623f, 0.5618f, 0.5613f, 0.5608f, \n        0.5603f, 0.5598f, 0.5593f, 0.5588f, 0.5582f, 0.5577f, 0.5572f, 0.5567f, 0.5562f, 0.5557f, \n        0.5552f, 0.5547f, 0.5541f, 0.5536f, 0.5531f, 0.5526f, 0.5521f, 0.5516f, 0.5511f, 0.5505f, \n        0.55f, 0.5495f, 0.549f, 0.5485f, 0.548f, 0.5474f, 0.5469f, 0.5464f, 0.5459f, 0.5454f, \n        0.5448f, 0.5443f, 0.5438f, 0.5433f, 0.5428f, 0.5422f, 0.5417f, 0.5412f, 0.5407f, 0.5402f, \n        0.5396f, 0.5391f, 0.5386f, 0.5381f, 0.5375f, 0.537f, 0.5365f, 0.536f, 0.5354f, 0.5349f, \n        0.5344f, 0.5339f, 0.5333f, 0.5328f, 0.5323f, 0.5317f, 0.5312f, 0.5307f, 0.5302f, 0.5296f, \n        0.5291f, 0.5286f, 0.528f, 0.5275f, 0.527f, 0.5264f, 0.5259f, 0.5254f, 0.5248f, 0.5243f, \n        0.5238f, 0.5232f, 0.5227f, 0.5222f, 0.5216f, 0.5211f, 0.5206f, 0.52f, 0.5195f, 0.5189f, \n        0.5184f, 0.5179f, 0.5173f, 0.5168f, 0.5162f, 0.5157f, 0.5152f, 0.5146f, 0.5141f, 0.5135f, \n        0.513f, 0.5124f, 0.5119f, 0.5114f, 0.5108f, 0.5103f, 0.5097f, 0.5092f, 0.5086f, 0.5081f, \n        0.5075f, 0.507f, 0.5064f, 0.5059f, 0.5053f, 0.5048f, 0.5043f, 0.5037f, 0.5032f, 0.5026f, \n        0.502f, 0.5015f, 0.5009f, 0.5004f, 0.4998f, 0.4993f, 0.4987f, 0.4982f, 0.4976f, 0.4971f, \n        0.4965f, 0.496f, 0.4954f, 0.4948f, 0.4943f, 0.4937f, 0.4932f, 0.4926f, 0.492f, 0.4915f, \n        0.4909f, 0.4904f, 0.4898f, 0.4892f, 0.4887f, 0.4881f, 0.4875f, 0.487f, 0.4864f, 0.4859f, \n        0.4853f, 0.4847f, 0.4842f, 0.4836f, 0.483f, 0.4825f, 0.4819f, 0.4813f, 0.4807f, 0.4802f, \n        0.4796f, 0.479f, 0.4785f, 0.4779f, 0.4773f, 0.4767f, 0.4762f, 0.4756f, 0.475f, 0.4744f, \n        0.4739f, 0.4733f, 0.4727f, 0.4721f, 0.4716f, 0.471f, 0.4704f, 0.4698f, 0.4692f, 0.4687f, \n        0.4681f, 0.4675f, 0.4669f, 0.4663f, 0.4657f, 0.4652f, 0.4646f, 0.464f, 0.4634f, 0.4628f, \n        0.4622f, 0.4616f, 0.461f, 0.4605f, 0.4599f, 0.4593f, 0.4587f, 0.4581f, 0.4575f, 0.4569f, \n        0.4563f, 0.4557f, 0.4551f, 0.4545f, 0.4539f, 0.4533f, 0.4527f, 0.4521f, 0.4515f, 0.451f, \n        0.4504f, 0.4498f, 0.4491f, 0.4485f, 0.4479f, 0.4473f, 0.4467f, 0.4461f, 0.4455f, 0.4449f, \n        0.4443f, 0.4437f, 0.4431f, 0.4425f, 0.4419f, 0.4413f, 0.4407f, 0.4401f, 0.4394f, 0.4388f, \n        0.4382f, 0.4376f, 0.437f, 0.4364f, 0.4358f, 0.4351f, 0.4345f, 0.4339f, 0.4333f, 0.4327f, \n        0.4321f, 0.4314f, 0.4308f, 0.4302f, 0.4296f, 0.4289f, 0.4283f, 0.4277f, 0.4271f, 0.4264f, \n        0.4258f, 0.4252f, 0.4246f, 0.4239f, 0.4233f, 0.4227f, 0.422f, 0.4214f, 0.4208f, 0.4201f, \n        0.4195f, 0.4189f, 0.4182f, 0.4176f, 0.4169f, 0.4163f, 0.4157f, 0.415f, 0.4144f, 0.4137f, \n        0.4131f, 0.4125f, 0.4118f, 0.4112f, 0.4105f, 0.4099f, 0.4092f, 0.4086f, 0.4079f, 0.4073f, \n        0.4066f, 0.406f, 0.4053f, 0.4047f, 0.404f, 0.4034f, 0.4027f, 0.402f, 0.4014f, 0.4007f, \n        0.4001f, 0.3994f, 0.3987f, 0.3981f, 0.3974f, 0.3967f, 0.3961f, 0.3954f, 0.3947f, 0.3941f, \n        0.3934f, 0.3927f, 0.3921f, 0.3914f, 0.3907f, 0.39f, 0.3894f, 0.3887f, 0.388f, 0.3873f, \n        0.3866f, 0.386f, 0.3853f, 0.3846f, 0.3839f, 0.3832f, 0.3825f, 0.3819f, 0.3812f, 0.3805f, \n        0.3798f, 0.3791f, 0.3784f, 0.3777f, 0.377f, 0.3763f, 0.3756f, 0.3749f, 0.3742f, 0.3735f, \n        0.3728f, 0.3721f, 0.3714f, 0.3707f, 0.37f, 0.3693f, 0.3686f, 0.3679f, 0.3672f, 0.3665f, \n        0.3657f, 0.365f, 0.3643f, 0.3636f, 0.3629f, 0.3622f, 0.3614f, 0.3607f, 0.36f, 0.3593f, \n        0.3585f, 0.3578f, 0.3571f, 0.3564f, 0.3556f, 0.3549f, 0.3542f, 0.3534f, 0.3527f, 0.352f, \n        0.3512f, 0.3505f, 0.3497f, 0.349f, 0.3483f, 0.3475f, 0.3468f, 0.346f, 0.3453f, 0.3445f, \n        0.3438f, 0.343f, 0.3422f, 0.3415f, 0.3407f, 0.34f, 0.3392f, 0.3384f, 0.3377f, 0.3369f, \n        0.3361f, 0.3354f, 0.3346f, 0.3338f, 0.3331f, 0.3323f, 0.3315f, 0.3307f, 0.3299f, 0.3292f, \n        0.3284f, 0.3276f, 0.3268f, 0.326f, 0.3252f, 0.3244f, 0.3236f, 0.3228f, 0.3221f, 0.3213f, \n        0.3205f, 0.3196f, 0.3188f, 0.318f, 0.3172f, 0.3164f, 0.3156f, 0.3148f, 0.314f, 0.3132f, \n        0.3123f, 0.3115f, 0.3107f, 0.3099f, 0.309f, 0.3082f, 0.3074f, 0.3065f, 0.3057f, 0.3049f, \n        0.304f, 0.3032f, 0.3023f, 0.3015f, 0.3007f, 0.2998f, 0.2989f, 0.2981f, 0.2972f, 0.2964f, \n        0.2955f, 0.2946f, 0.2938f, 0.2929f, 0.292f, 0.2912f, 0.2903f, 0.2894f, 0.2885f, 0.2877f, \n        0.2868f, 0.2859f, 0.285f, 0.2841f, 0.2832f, 0.2823f, 0.2814f, 0.2805f, 0.2796f, 0.2787f, \n        0.2778f, 0.2768f, 0.2759f, 0.275f, 0.2741f, 0.2732f, 0.2722f, 0.2713f, 0.2704f, 0.2694f, \n        0.2685f, 0.2675f, 0.2666f, 0.2656f, 0.2647f, 0.2637f, 0.2628f, 0.2618f, 0.2608f, 0.2599f, \n        0.2589f, 0.2579f, 0.2569f, 0.256f, 0.255f, 0.254f, 0.253f, 0.252f, 0.251f, 0.25f, \n        0.249f, 0.248f, 0.2469f, 0.2459f, 0.2449f, 0.2439f, 0.2428f, 0.2418f, 0.2408f, 0.2397f, \n        0.2387f, 0.2376f, 0.2365f, 0.2355f, 0.2344f, 0.2333f, 0.2323f, 0.2312f, 0.2301f, 0.229f, \n        0.2279f, 0.2268f, 0.2257f, 0.2246f, 0.2235f, 0.2223f, 0.2212f, 0.2201f, 0.2189f, 0.2178f, \n        0.2166f, 0.2155f, 0.2143f, 0.2132f, 0.212f, 0.2108f, 0.2096f, 0.2084f, 0.2072f, 0.206f, \n        0.2048f, 0.2036f, 0.2023f, 0.2011f, 0.1999f, 0.1986f, 0.1974f, 0.1961f, 0.1948f, 0.1935f, \n        0.1923f, 0.191f, 0.1896f, 0.1883f, 0.187f, 0.1857f, 0.1843f, 0.183f, 0.1816f, 0.1802f, \n        0.1789f, 0.1775f, 0.1761f, 0.1747f, 0.1732f, 0.1718f, 0.1703f, 0.1689f, 0.1674f, 0.1659f, \n        0.1644f, 0.1629f, 0.1614f, 0.1599f, 0.1583f, 0.1567f, 0.1551f, 0.1535f, 0.1519f, 0.1503f, \n        0.1486f, 0.147f, 0.1453f, 0.1436f, 0.1418f, 0.1401f, 0.1383f, 0.1365f, 0.1347f, 0.1329f, \n        0.131f, 0.1291f, 0.1272f, 0.1252f, 0.1233f, 0.1213f, 0.1192f, 0.1171f, 0.115f, 0.1129f, \n        0.1107f, 0.1084f, 0.1061f, 0.1038f, 0.1014f, 0.09894f, 0.09643f, 0.09385f, 0.0912f, 0.08847f, \n        0.08566f, 0.08275f, 0.07974f, 0.0766f, 0.07334f, 0.06992f, 0.06633f, 0.06253f, 0.05849f, 0.05415f, \n        0.04943f, 0.0442f, 0.03828f, 0.03125f, 0.0221f, -0.0f};\n\t\t\n\t\tconst static float cosvals[max] = { \n        1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.9999f, 0.9999f, 0.9999f, 0.9999f,\n        0.9999f, 0.9998f, 0.9998f, 0.9998f, 0.9997f, 0.9997f, 0.9997f, 0.9996f, 0.9996f, 0.9995f, \n        0.9995f, 0.9994f, 0.9994f, 0.9993f, 0.9993f, 0.9992f, 0.9991f, 0.9991f, 0.999f, 0.9989f, \n        0.9989f, 0.9988f, 0.9987f, 0.9986f, 0.9986f, 0.9985f, 0.9984f, 0.9983f, 0.9982f, 0.9981f, \n        0.998f, 0.9979f, 0.9978f, 0.9977f, 0.9976f, 0.9975f, 0.9974f, 0.9973f, 0.9972f, 0.9971f, \n        0.9969f, 0.9968f, 0.9967f, 0.9966f, 0.9964f, 0.9963f, 0.9962f, 0.996f, 0.9959f, 0.9958f, \n        0.9956f, 0.9955f, 0.9953f, 0.9952f, 0.995f, 0.9949f, 0.9947f, 0.9946f, 0.9944f, 0.9942f, \n        0.9941f, 0.9939f, 0.9937f, 0.9936f, 0.9934f, 0.9932f, 0.993f, 0.9929f, 0.9927f, 0.9925f, \n        0.9923f, 0.9921f, 0.9919f, 0.9917f, 0.9915f, 0.9913f, 0.9911f, 0.9909f, 0.9907f, 0.9905f, \n        0.9903f, 0.9901f, 0.9898f, 0.9896f, 0.9894f, 0.9892f, 0.989f, 0.9887f, 0.9885f, 0.9883f, \n        0.988f, 0.9878f, 0.9875f, 0.9873f, 0.9871f, 0.9868f, 0.9866f, 0.9863f, 0.9861f, 0.9858f, \n        0.9855f, 0.9853f, 0.985f, 0.9847f, 0.9845f, 0.9842f, 0.9839f, 0.9837f, 0.9834f, 0.9831f, \n        0.9828f, 0.9825f, 0.9823f, 0.982f, 0.9817f, 0.9814f, 0.9811f, 0.9808f, 0.9805f, 0.9802f, \n        0.9799f, 0.9796f, 0.9793f, 0.9789f, 0.9786f, 0.9783f, 0.978f, 0.9777f, 0.9774f, 0.977f, \n        0.9767f, 0.9764f, 0.976f, 0.9757f, 0.9754f, 0.975f, 0.9747f, 0.9743f, 0.974f, 0.9736f, \n        0.9733f, 0.9729f, 0.9726f, 0.9722f, 0.9719f, 0.9715f, 0.9711f, 0.9708f, 0.9704f, 0.97f, \n        0.9697f, 0.9693f, 0.9689f, 0.9685f, 0.9681f, 0.9678f, 0.9674f, 0.967f, 0.9666f, 0.9662f, \n        0.9658f, 0.9654f, 0.965f, 0.9646f, 0.9642f, 0.9638f, 0.9634f, 0.963f, 0.9625f, 0.9621f, \n        0.9617f, 0.9613f, 0.9609f, 0.9604f, 0.96f, 0.9596f, 0.9591f, 0.9587f, 0.9583f, 0.9578f, \n        0.9574f, 0.9569f, 0.9565f, 0.956f, 0.9556f, 0.9551f, 0.9547f, 0.9542f, 0.9538f, 0.9533f, \n        0.9528f, 0.9524f, 0.9519f, 0.9514f, 0.951f, 0.9505f, 0.95f, 0.9495f, 0.949f, 0.9486f, \n        0.9481f, 0.9476f, 0.9471f, 0.9466f, 0.9461f, 0.9456f, 0.9451f, 0.9446f, 0.9441f, 0.9436f, \n        0.9431f, 0.9426f, 0.9421f, 0.9415f, 0.941f, 0.9405f, 0.94f, 0.9395f, 0.9389f, 0.9384f, \n        0.9379f, 0.9373f, 0.9368f, 0.9363f, 0.9357f, 0.9352f, 0.9346f, 0.9341f, 0.9335f, 0.933f, \n        0.9324f, 0.9319f, 0.9313f, 0.9308f, 0.9302f, 0.9296f, 0.9291f, 0.9285f, 0.9279f, 0.9274f, \n        0.9268f, 0.9262f, 0.9256f, 0.925f, 0.9245f, 0.9239f, 0.9233f, 0.9227f, 0.9221f, 0.9215f, \n        0.9209f, 0.9203f, 0.9197f, 0.9191f, 0.9185f, 0.9179f, 0.9173f, 0.9167f, 0.9161f, 0.9154f, \n        0.9148f, 0.9142f, 0.9136f, 0.913f, 0.9123f, 0.9117f, 0.9111f, 0.9104f, 0.9098f, 0.9092f, \n        0.9085f, 0.9079f, 0.9072f, 0.9066f, 0.9059f, 0.9053f, 0.9046f, 0.904f, 0.9033f, 0.9027f, \n        0.902f, 0.9013f, 0.9007f, 0.9f, 0.8993f, 0.8987f, 0.898f, 0.8973f, 0.8966f, 0.896f, \n        0.8953f, 0.8946f, 0.8939f, 0.8932f, 0.8925f, 0.8918f, 0.8911f, 0.8904f, 0.8897f, 0.889f, \n        0.8883f, 0.8876f, 0.8869f, 0.8862f, 0.8855f, 0.8848f, 0.8841f, 0.8834f, 0.8826f, 0.8819f, \n        0.8812f, 0.8805f, 0.8797f, 0.879f, 0.8783f, 0.8775f, 0.8768f, 0.8761f, 0.8753f, 0.8746f, \n        0.8738f, 0.8731f, 0.8723f, 0.8716f, 0.8708f, 0.8701f, 0.8693f, 0.8686f, 0.8678f, 0.867f, \n        0.8663f, 0.8655f, 0.8647f, 0.864f, 0.8632f, 0.8624f, 0.8616f, 0.8609f, 0.8601f, 0.8593f, \n        0.8585f, 0.8577f, 0.8569f, 0.8561f, 0.8554f, 0.8546f, 0.8538f, 0.853f, 0.8522f, 0.8514f, \n        0.8505f, 0.8497f, 0.8489f, 0.8481f, 0.8473f, 0.8465f, 0.8457f, 0.8449f, 0.844f, 0.8432f, \n        0.8424f, 0.8416f, 0.8407f, 0.8399f, 0.8391f, 0.8382f, 0.8374f, 0.8365f, 0.8357f, 0.8349f, \n        0.834f, 0.8332f, 0.8323f, 0.8315f, 0.8306f, 0.8298f, 0.8289f, 0.828f, 0.8272f, 0.8263f, \n        0.8255f, 0.8246f, 0.8237f, 0.8228f, 0.822f, 0.8211f, 0.8202f, 0.8193f, 0.8185f, 0.8176f, \n        0.8167f, 0.8158f, 0.8149f, 0.814f, 0.8131f, 0.8123f, 0.8114f, 0.8105f, 0.8096f, 0.8087f, \n        0.8078f, 0.8068f, 0.8059f, 0.805f, 0.8041f, 0.8032f, 0.8023f, 0.8014f, 0.8005f, 0.7995f, \n        0.7986f, 0.7977f, 0.7968f, 0.7958f, 0.7949f, 0.794f, 0.793f, 0.7921f, 0.7912f, 0.7902f, \n        0.7893f, 0.7883f, 0.7874f, 0.7865f, 0.7855f, 0.7846f, 0.7836f, 0.7827f, 0.7817f, 0.7807f, \n        0.7798f, 0.7788f, 0.7779f, 0.7769f, 0.7759f, 0.775f, 0.774f, 0.773f, 0.772f, 0.7711f, \n        0.7701f, 0.7691f, 0.7681f, 0.7671f, 0.7662f, 0.7652f, 0.7642f, 0.7632f, 0.7622f, 0.7612f, \n        0.7602f, 0.7592f, 0.7582f, 0.7572f, 0.7562f, 0.7552f, 0.7542f, 0.7532f, 0.7522f, 0.7512f, \n        0.7502f, 0.7491f, 0.7481f, 0.7471f, 0.7461f, 0.7451f, 0.744f, 0.743f, 0.742f, 0.741f, \n        0.7399f, 0.7389f, 0.7379f, 0.7368f, 0.7358f, 0.7347f, 0.7337f, 0.7327f, 0.7316f, 0.7306f, \n        0.7295f, 0.7285f, 0.7274f, 0.7264f, 0.7253f, 0.7242f, 0.7232f, 0.7221f, 0.7211f, 0.72f, \n        0.7189f, 0.7179f, 0.7168f, 0.7157f, 0.7147f, 0.7136f, 0.7125f, 0.7114f, 0.7104f, 0.7093f, \n        0.7082f, 0.7071f, 0.706f, 0.7049f, 0.7038f, 0.7028f, 0.7017f, 0.7006f, 0.6995f, 0.6984f, \n        0.6973f, 0.6962f, 0.6951f, 0.694f, 0.6929f, 0.6918f, 0.6907f, 0.6895f, 0.6884f, 0.6873f, \n        0.6862f, 0.6851f, 0.684f, 0.6828f, 0.6817f, 0.6806f, 0.6795f, 0.6784f, 0.6772f, 0.6761f, \n        0.675f, 0.6738f, 0.6727f, 0.6716f, 0.6704f, 0.6693f, 0.6681f, 0.667f, 0.6659f, 0.6647f, \n        0.6636f, 0.6624f, 0.6613f, 0.6601f, 0.659f, 0.6578f, 0.6567f, 0.6555f, 0.6543f, 0.6532f, \n        0.652f, 0.6508f, 0.6497f, 0.6485f, 0.6473f, 0.6462f, 0.645f, 0.6438f, 0.6427f, 0.6415f, \n        0.6403f, 0.6391f, 0.6379f, 0.6368f, 0.6356f, 0.6344f, 0.6332f, 0.632f, 0.6308f, 0.6296f, \n        0.6284f, 0.6273f, 0.6261f, 0.6249f, 0.6237f, 0.6225f, 0.6213f, 0.6201f, 0.6189f, 0.6176f, \n        0.6164f, 0.6152f, 0.614f, 0.6128f, 0.6116f, 0.6104f, 0.6092f, 0.6079f, 0.6067f, 0.6055f, \n        0.6043f, 0.6031f, 0.6018f, 0.6006f, 0.5994f, 0.5982f, 0.5969f, 0.5957f, 0.5945f, 0.5932f, \n        0.592f, 0.5908f, 0.5895f, 0.5883f, 0.587f, 0.5858f, 0.5846f, 0.5833f, 0.5821f, 0.5808f, \n        0.5796f, 0.5783f, 0.5771f, 0.5758f, 0.5746f, 0.5733f, 0.572f, 0.5708f, 0.5695f, 0.5683f, \n        0.567f, 0.5657f, 0.5645f, 0.5632f, 0.5619f, 0.5607f, 0.5594f, 0.5581f, 0.5568f, 0.5556f, \n        0.5543f, 0.553f, 0.5517f, 0.5505f, 0.5492f, 0.5479f, 0.5466f, 0.5453f, 0.544f, 0.5428f, \n        0.5415f, 0.5402f, 0.5389f, 0.5376f, 0.5363f, 0.535f, 0.5337f, 0.5324f, 0.5311f, 0.5298f, \n        0.5285f, 0.5272f, 0.5259f, 0.5246f, 0.5233f, 0.522f, 0.5207f, 0.5194f, 0.518f, 0.5167f, \n        0.5154f, 0.5141f, 0.5128f, 0.5115f, 0.5102f, 0.5088f, 0.5075f, 0.5062f, 0.5049f, 0.5035f, \n        0.5022f, 0.5009f, 0.4996f, 0.4982f, 0.4969f, 0.4956f, 0.4942f, 0.4929f, 0.4916f, 0.4902f, \n        0.4889f, 0.4876f, 0.4862f, 0.4849f, 0.4835f, 0.4822f, 0.4808f, 0.4795f, 0.4781f, 0.4768f, \n        0.4755f, 0.4741f, 0.4727f, 0.4714f, 0.47f, 0.4687f, 0.4673f, 0.466f, 0.4646f, 0.4633f, \n        0.4619f, 0.4605f, 0.4592f, 0.4578f, 0.4564f, 0.4551f, 0.4537f, 0.4523f, 0.451f, 0.4496f, \n        0.4482f, 0.4469f, 0.4455f, 0.4441f, 0.4427f, 0.4414f, 0.44f, 0.4386f, 0.4372f, 0.4359f, \n        0.4345f, 0.4331f, 0.4317f, 0.4303f, 0.4289f, 0.4276f, 0.4262f, 0.4248f, 0.4234f, 0.422f, \n        0.4206f, 0.4192f, 0.4178f, 0.4164f, 0.415f, 0.4136f, 0.4122f, 0.4108f, 0.4094f, 0.408f, \n        0.4066f, 0.4052f, 0.4038f, 0.4024f, 0.401f, 0.3996f, 0.3982f, 0.3968f, 0.3954f, 0.394f, \n        0.3926f, 0.3912f, 0.3898f, 0.3883f, 0.3869f, 0.3855f, 0.3841f, 0.3827f, 0.3813f, 0.3798f, \n        0.3784f, 0.377f, 0.3756f, 0.3742f, 0.3727f, 0.3713f, 0.3699f, 0.3685f, 0.367f, 0.3656f, \n        0.3642f, 0.3628f, 0.3613f, 0.3599f, 0.3585f, 0.357f, 0.3556f, 0.3542f, 0.3527f, 0.3513f, \n        0.3499f, 0.3484f, 0.347f, 0.3455f, 0.3441f, 0.3427f, 0.3412f, 0.3398f, 0.3383f, 0.3369f, \n        0.3354f, 0.334f, 0.3326f, 0.3311f, 0.3297f, 0.3282f, 0.3268f, 0.3253f, 0.3239f, 0.3224f, \n        0.321f, 0.3195f, 0.318f, 0.3166f, 0.3151f, 0.3137f, 0.3122f, 0.3108f, 0.3093f, 0.3078f, \n        0.3064f, 0.3049f, 0.3035f, 0.302f, 0.3005f, 0.2991f, 0.2976f, 0.2962f, 0.2947f, 0.2932f, \n        0.2918f, 0.2903f, 0.2888f, 0.2873f, 0.2859f, 0.2844f, 0.2829f, 0.2815f, 0.28f, 0.2785f, \n        0.277f, 0.2756f, 0.2741f, 0.2726f, 0.2711f, 0.2697f, 0.2682f, 0.2667f, 0.2652f, 0.2638f, \n        0.2623f, 0.2608f, 0.2593f, 0.2578f, 0.2563f, 0.2549f, 0.2534f, 0.2519f, 0.2504f, 0.2489f, \n        0.2474f, 0.246f, 0.2445f, 0.243f, 0.2415f, 0.24f, 0.2385f, 0.237f, 0.2355f, 0.234f, \n        0.2326f, 0.2311f, 0.2296f, 0.2281f, 0.2266f, 0.2251f, 0.2236f, 0.2221f, 0.2206f, 0.2191f, \n        0.2176f, 0.2161f, 0.2146f, 0.2131f, 0.2116f, 0.2101f, 0.2086f, 0.2071f, 0.2056f, 0.2041f, \n        0.2026f, 0.2011f, 0.1996f, 0.1981f, 0.1966f, 0.1951f, 0.1936f, 0.1921f, 0.1906f, 0.1891f, \n        0.1876f, 0.1861f, 0.1845f, 0.183f, 0.1815f, 0.18f, 0.1785f, 0.177f, 0.1755f, 0.174f, \n        0.1725f, 0.171f, 0.1695f, 0.1679f, 0.1664f, 0.1649f, 0.1634f, 0.1619f, 0.1604f, 0.1589f, \n        0.1573f, 0.1558f, 0.1543f, 0.1528f, 0.1513f, 0.1498f, 0.1482f, 0.1467f, 0.1452f, 0.1437f, \n        0.1422f, 0.1407f, 0.1391f, 0.1376f, 0.1361f, 0.1346f, 0.1331f, 0.1315f, 0.13f, 0.1285f, \n        0.127f, 0.1255f, 0.1239f, 0.1224f, 0.1209f, 0.1194f, 0.1178f, 0.1163f, 0.1148f, 0.1133f, \n        0.1117f, 0.1102f, 0.1087f, 0.1072f, 0.1056f, 0.1041f, 0.1026f, 0.1011f, 0.09954f, 0.09802f, \n        0.09649f, 0.09496f, 0.09344f, 0.09191f, 0.09038f, 0.08885f, 0.08733f, 0.0858f, 0.08427f, 0.08274f, \n        0.08121f, 0.07968f, 0.07815f, 0.07662f, 0.07509f, 0.07356f, 0.07203f, 0.0705f, 0.06897f, 0.06744f, \n        0.06591f, 0.06438f, 0.06285f, 0.06132f, 0.05979f, 0.05826f, 0.05673f, 0.0552f, 0.05366f, 0.05213f, \n        0.0506f, 0.04907f, 0.04754f, 0.046f, 0.04447f, 0.04294f, 0.04141f, 0.03987f, 0.03834f, 0.03681f, \n        0.03527f, 0.03374f, 0.03221f, 0.03067f, 0.02914f, 0.02761f, 0.02607f, 0.02454f, 0.02301f, 0.02147f, \n        0.01994f, 0.01841f, 0.01687f, 0.01534f, 0.01381f, 0.01227f, 0.01074f, 0.009204f, 0.00767f, 0.006136f, \n        0.004602f, 0.003068f, 0.001534f, 6.123e-17f, -0.001534f, -0.003068f, -0.004602f, -0.006136f, -0.00767f, -0.009204f, \n        -0.01074f, -0.01227f, -0.01381f, -0.01534f, -0.01687f, -0.01841f, -0.01994f, -0.02147f, -0.02301f, -0.02454f, \n        -0.02607f, -0.02761f, -0.02914f, -0.03067f, -0.03221f, -0.03374f, -0.03527f, -0.03681f, -0.03834f, -0.03987f, \n        -0.04141f, -0.04294f, -0.04447f, -0.046f, -0.04754f, -0.04907f, -0.0506f, -0.05213f, -0.05366f, -0.0552f, \n        -0.05673f, -0.05826f, -0.05979f, -0.06132f, -0.06285f, -0.06438f, -0.06591f, -0.06744f, -0.06897f, -0.0705f, \n        -0.07203f, -0.07356f, -0.07509f, -0.07662f, -0.07815f, -0.07968f, -0.08121f, -0.08274f, -0.08427f, -0.0858f, \n        -0.08733f, -0.08885f, -0.09038f, -0.09191f, -0.09344f, -0.09496f, -0.09649f, -0.09802f, -0.09954f, -0.1011f, \n        -0.1026f, -0.1041f, -0.1056f, -0.1072f, -0.1087f, -0.1102f, -0.1117f, -0.1133f, -0.1148f, -0.1163f, \n        -0.1178f, -0.1194f, -0.1209f, -0.1224f, -0.1239f, -0.1255f, -0.127f, -0.1285f, -0.13f, -0.1315f, \n        -0.1331f, -0.1346f, -0.1361f, -0.1376f, -0.1391f, -0.1407f, -0.1422f, -0.1437f, -0.1452f, -0.1467f, \n        -0.1482f, -0.1498f, -0.1513f, -0.1528f, -0.1543f, -0.1558f, -0.1573f, -0.1589f, -0.1604f, -0.1619f, \n        -0.1634f, -0.1649f, -0.1664f, -0.1679f, -0.1695f, -0.171f, -0.1725f, -0.174f, -0.1755f, -0.177f, \n        -0.1785f, -0.18f, -0.1815f, -0.183f, -0.1845f, -0.1861f, -0.1876f, -0.1891f, -0.1906f, -0.1921f, \n        -0.1936f, -0.1951f, -0.1966f, -0.1981f, -0.1996f, -0.2011f, -0.2026f, -0.2041f, -0.2056f, -0.2071f, \n        -0.2086f, -0.2101f, -0.2116f, -0.2131f, -0.2146f, -0.2161f, -0.2176f, -0.2191f, -0.2206f, -0.2221f, \n        -0.2236f, -0.2251f, -0.2266f, -0.2281f, -0.2296f, -0.2311f, -0.2326f, -0.234f, -0.2355f, -0.237f, \n        -0.2385f, -0.24f, -0.2415f, -0.243f, -0.2445f, -0.246f, -0.2474f, -0.2489f, -0.2504f, -0.2519f, \n        -0.2534f, -0.2549f, -0.2563f, -0.2578f, -0.2593f, -0.2608f, -0.2623f, -0.2638f, -0.2652f, -0.2667f, \n        -0.2682f, -0.2697f, -0.2711f, -0.2726f, -0.2741f, -0.2756f, -0.277f, -0.2785f, -0.28f, -0.2815f, \n        -0.2829f, -0.2844f, -0.2859f, -0.2873f, -0.2888f, -0.2903f, -0.2918f, -0.2932f, -0.2947f, -0.2962f, \n        -0.2976f, -0.2991f, -0.3005f, -0.302f, -0.3035f, -0.3049f, -0.3064f, -0.3078f, -0.3093f, -0.3108f, \n        -0.3122f, -0.3137f, -0.3151f, -0.3166f, -0.318f, -0.3195f, -0.321f, -0.3224f, -0.3239f, -0.3253f, \n        -0.3268f, -0.3282f, -0.3297f, -0.3311f, -0.3326f, -0.334f, -0.3354f, -0.3369f, -0.3383f, -0.3398f, \n        -0.3412f, -0.3427f, -0.3441f, -0.3455f, -0.347f, -0.3484f, -0.3499f, -0.3513f, -0.3527f, -0.3542f, \n        -0.3556f, -0.357f, -0.3585f, -0.3599f, -0.3613f, -0.3628f, -0.3642f, -0.3656f, -0.367f, -0.3685f, \n        -0.3699f, -0.3713f, -0.3727f, -0.3742f, -0.3756f, -0.377f, -0.3784f, -0.3798f, -0.3813f, -0.3827f, \n        -0.3841f, -0.3855f, -0.3869f, -0.3883f, -0.3898f, -0.3912f, -0.3926f, -0.394f, -0.3954f, -0.3968f, \n        -0.3982f, -0.3996f, -0.401f, -0.4024f, -0.4038f, -0.4052f, -0.4066f, -0.408f, -0.4094f, -0.4108f, \n        -0.4122f, -0.4136f, -0.415f, -0.4164f, -0.4178f, -0.4192f, -0.4206f, -0.422f, -0.4234f, -0.4248f, \n        -0.4262f, -0.4276f, -0.4289f, -0.4303f, -0.4317f, -0.4331f, -0.4345f, -0.4359f, -0.4372f, -0.4386f, \n        -0.44f, -0.4414f, -0.4427f, -0.4441f, -0.4455f, -0.4469f, -0.4482f, -0.4496f, -0.451f, -0.4523f, \n        -0.4537f, -0.4551f, -0.4564f, -0.4578f, -0.4592f, -0.4605f, -0.4619f, -0.4633f, -0.4646f, -0.466f, \n        -0.4673f, -0.4687f, -0.47f, -0.4714f, -0.4727f, -0.4741f, -0.4755f, -0.4768f, -0.4781f, -0.4795f, \n        -0.4808f, -0.4822f, -0.4835f, -0.4849f, -0.4862f, -0.4876f, -0.4889f, -0.4902f, -0.4916f, -0.4929f, \n        -0.4942f, -0.4956f, -0.4969f, -0.4982f, -0.4996f, -0.5009f, -0.5022f, -0.5035f, -0.5049f, -0.5062f, \n        -0.5075f, -0.5088f, -0.5102f, -0.5115f, -0.5128f, -0.5141f, -0.5154f, -0.5167f, -0.518f, -0.5194f, \n        -0.5207f, -0.522f, -0.5233f, -0.5246f, -0.5259f, -0.5272f, -0.5285f, -0.5298f, -0.5311f, -0.5324f, \n        -0.5337f, -0.535f, -0.5363f, -0.5376f, -0.5389f, -0.5402f, -0.5415f, -0.5428f, -0.544f, -0.5453f, \n        -0.5466f, -0.5479f, -0.5492f, -0.5505f, -0.5517f, -0.553f, -0.5543f, -0.5556f, -0.5568f, -0.5581f, \n        -0.5594f, -0.5607f, -0.5619f, -0.5632f, -0.5645f, -0.5657f, -0.567f, -0.5683f, -0.5695f, -0.5708f, \n        -0.572f, -0.5733f, -0.5746f, -0.5758f, -0.5771f, -0.5783f, -0.5796f, -0.5808f, -0.5821f, -0.5833f, \n        -0.5846f, -0.5858f, -0.587f, -0.5883f, -0.5895f, -0.5908f, -0.592f, -0.5932f, -0.5945f, -0.5957f, \n        -0.5969f, -0.5982f, -0.5994f, -0.6006f, -0.6018f, -0.6031f, -0.6043f, -0.6055f, -0.6067f, -0.6079f, \n        -0.6092f, -0.6104f, -0.6116f, -0.6128f, -0.614f, -0.6152f, -0.6164f, -0.6176f, -0.6189f, -0.6201f, \n        -0.6213f, -0.6225f, -0.6237f, -0.6249f, -0.6261f, -0.6273f, -0.6284f, -0.6296f, -0.6308f, -0.632f, \n        -0.6332f, -0.6344f, -0.6356f, -0.6368f, -0.6379f, -0.6391f, -0.6403f, -0.6415f, -0.6427f, -0.6438f, \n        -0.645f, -0.6462f, -0.6473f, -0.6485f, -0.6497f, -0.6508f, -0.652f, -0.6532f, -0.6543f, -0.6555f, \n        -0.6567f, -0.6578f, -0.659f, -0.6601f, -0.6613f, -0.6624f, -0.6636f, -0.6647f, -0.6659f, -0.667f, \n        -0.6681f, -0.6693f, -0.6704f, -0.6716f, -0.6727f, -0.6738f, -0.675f, -0.6761f, -0.6772f, -0.6784f, \n        -0.6795f, -0.6806f, -0.6817f, -0.6828f, -0.684f, -0.6851f, -0.6862f, -0.6873f, -0.6884f, -0.6895f, \n        -0.6907f, -0.6918f, -0.6929f, -0.694f, -0.6951f, -0.6962f, -0.6973f, -0.6984f, -0.6995f, -0.7006f, \n        -0.7017f, -0.7028f, -0.7038f, -0.7049f, -0.706f, -0.7071f, -0.7082f, -0.7093f, -0.7104f, -0.7114f, \n        -0.7125f, -0.7136f, -0.7147f, -0.7157f, -0.7168f, -0.7179f, -0.7189f, -0.72f, -0.7211f, -0.7221f, \n        -0.7232f, -0.7242f, -0.7253f, -0.7264f, -0.7274f, -0.7285f, -0.7295f, -0.7306f, -0.7316f, -0.7327f, \n        -0.7337f, -0.7347f, -0.7358f, -0.7368f, -0.7379f, -0.7389f, -0.7399f, -0.741f, -0.742f, -0.743f, \n        -0.744f, -0.7451f, -0.7461f, -0.7471f, -0.7481f, -0.7491f, -0.7502f, -0.7512f, -0.7522f, -0.7532f, \n        -0.7542f, -0.7552f, -0.7562f, -0.7572f, -0.7582f, -0.7592f, -0.7602f, -0.7612f, -0.7622f, -0.7632f, \n        -0.7642f, -0.7652f, -0.7662f, -0.7671f, -0.7681f, -0.7691f, -0.7701f, -0.7711f, -0.772f, -0.773f, \n        -0.774f, -0.775f, -0.7759f, -0.7769f, -0.7779f, -0.7788f, -0.7798f, -0.7807f, -0.7817f, -0.7827f, \n        -0.7836f, -0.7846f, -0.7855f, -0.7865f, -0.7874f, -0.7883f, -0.7893f, -0.7902f, -0.7912f, -0.7921f, \n        -0.793f, -0.794f, -0.7949f, -0.7958f, -0.7968f, -0.7977f, -0.7986f, -0.7995f, -0.8005f, -0.8014f, \n        -0.8023f, -0.8032f, -0.8041f, -0.805f, -0.8059f, -0.8068f, -0.8078f, -0.8087f, -0.8096f, -0.8105f, \n        -0.8114f, -0.8123f, -0.8131f, -0.814f, -0.8149f, -0.8158f, -0.8167f, -0.8176f, -0.8185f, -0.8193f, \n        -0.8202f, -0.8211f, -0.822f, -0.8228f, -0.8237f, -0.8246f, -0.8255f, -0.8263f, -0.8272f, -0.828f, \n        -0.8289f, -0.8298f, -0.8306f, -0.8315f, -0.8323f, -0.8332f, -0.834f, -0.8349f, -0.8357f, -0.8365f, \n        -0.8374f, -0.8382f, -0.8391f, -0.8399f, -0.8407f, -0.8416f, -0.8424f, -0.8432f, -0.844f, -0.8449f, \n        -0.8457f, -0.8465f, -0.8473f, -0.8481f, -0.8489f, -0.8497f, -0.8505f, -0.8514f, -0.8522f, -0.853f, \n        -0.8538f, -0.8546f, -0.8554f, -0.8561f, -0.8569f, -0.8577f, -0.8585f, -0.8593f, -0.8601f, -0.8609f, \n        -0.8616f, -0.8624f, -0.8632f, -0.864f, -0.8647f, -0.8655f, -0.8663f, -0.867f, -0.8678f, -0.8686f, \n        -0.8693f, -0.8701f, -0.8708f, -0.8716f, -0.8723f, -0.8731f, -0.8738f, -0.8746f, -0.8753f, -0.8761f, \n        -0.8768f, -0.8775f, -0.8783f, -0.879f, -0.8797f, -0.8805f, -0.8812f, -0.8819f, -0.8826f, -0.8834f, \n        -0.8841f, -0.8848f, -0.8855f, -0.8862f, -0.8869f, -0.8876f, -0.8883f, -0.889f, -0.8897f, -0.8904f, \n        -0.8911f, -0.8918f, -0.8925f, -0.8932f, -0.8939f, -0.8946f, -0.8953f, -0.896f, -0.8966f, -0.8973f, \n        -0.898f, -0.8987f, -0.8993f, -0.9f, -0.9007f, -0.9013f, -0.902f, -0.9027f, -0.9033f, -0.904f, \n        -0.9046f, -0.9053f, -0.9059f, -0.9066f, -0.9072f, -0.9079f, -0.9085f, -0.9092f, -0.9098f, -0.9104f, \n        -0.9111f, -0.9117f, -0.9123f, -0.913f, -0.9136f, -0.9142f, -0.9148f, -0.9154f, -0.9161f, -0.9167f, \n        -0.9173f, -0.9179f, -0.9185f, -0.9191f, -0.9197f, -0.9203f, -0.9209f, -0.9215f, -0.9221f, -0.9227f, \n        -0.9233f, -0.9239f, -0.9245f, -0.925f, -0.9256f, -0.9262f, -0.9268f, -0.9274f, -0.9279f, -0.9285f, \n        -0.9291f, -0.9296f, -0.9302f, -0.9308f, -0.9313f, -0.9319f, -0.9324f, -0.933f, -0.9335f, -0.9341f, \n        -0.9346f, -0.9352f, -0.9357f, -0.9363f, -0.9368f, -0.9373f, -0.9379f, -0.9384f, -0.9389f, -0.9395f, \n        -0.94f, -0.9405f, -0.941f, -0.9415f, -0.9421f, -0.9426f, -0.9431f, -0.9436f, -0.9441f, -0.9446f, \n        -0.9451f, -0.9456f, -0.9461f, -0.9466f, -0.9471f, -0.9476f, -0.9481f, -0.9486f, -0.949f, -0.9495f, \n        -0.95f, -0.9505f, -0.951f, -0.9514f, -0.9519f, -0.9524f, -0.9528f, -0.9533f, -0.9538f, -0.9542f, \n        -0.9547f, -0.9551f, -0.9556f, -0.956f, -0.9565f, -0.9569f, -0.9574f, -0.9578f, -0.9583f, -0.9587f, \n        -0.9591f, -0.9596f, -0.96f, -0.9604f, -0.9609f, -0.9613f, -0.9617f, -0.9621f, -0.9625f, -0.963f, \n        -0.9634f, -0.9638f, -0.9642f, -0.9646f, -0.965f, -0.9654f, -0.9658f, -0.9662f, -0.9666f, -0.967f, \n        -0.9674f, -0.9678f, -0.9681f, -0.9685f, -0.9689f, -0.9693f, -0.9697f, -0.97f, -0.9704f, -0.9708f, \n        -0.9711f, -0.9715f, -0.9719f, -0.9722f, -0.9726f, -0.9729f, -0.9733f, -0.9736f, -0.974f, -0.9743f, \n        -0.9747f, -0.975f, -0.9754f, -0.9757f, -0.976f, -0.9764f, -0.9767f, -0.977f, -0.9774f, -0.9777f, \n        -0.978f, -0.9783f, -0.9786f, -0.9789f, -0.9793f, -0.9796f, -0.9799f, -0.9802f, -0.9805f, -0.9808f, \n        -0.9811f, -0.9814f, -0.9817f, -0.982f, -0.9823f, -0.9825f, -0.9828f, -0.9831f, -0.9834f, -0.9837f, \n        -0.9839f, -0.9842f, -0.9845f, -0.9847f, -0.985f, -0.9853f, -0.9855f, -0.9858f, -0.9861f, -0.9863f, \n        -0.9866f, -0.9868f, -0.9871f, -0.9873f, -0.9875f, -0.9878f, -0.988f, -0.9883f, -0.9885f, -0.9887f, \n        -0.989f, -0.9892f, -0.9894f, -0.9896f, -0.9898f, -0.9901f, -0.9903f, -0.9905f, -0.9907f, -0.9909f, \n        -0.9911f, -0.9913f, -0.9915f, -0.9917f, -0.9919f, -0.9921f, -0.9923f, -0.9925f, -0.9927f, -0.9929f, \n        -0.993f, -0.9932f, -0.9934f, -0.9936f, -0.9937f, -0.9939f, -0.9941f, -0.9942f, -0.9944f, -0.9946f, \n        -0.9947f, -0.9949f, -0.995f, -0.9952f, -0.9953f, -0.9955f, -0.9956f, -0.9958f, -0.9959f, -0.996f, \n        -0.9962f, -0.9963f, -0.9964f, -0.9966f, -0.9967f, -0.9968f, -0.9969f, -0.9971f, -0.9972f, -0.9973f, \n        -0.9974f, -0.9975f, -0.9976f, -0.9977f, -0.9978f, -0.9979f, -0.998f, -0.9981f, -0.9982f, -0.9983f, \n        -0.9984f, -0.9985f, -0.9986f, -0.9986f, -0.9987f, -0.9988f, -0.9989f, -0.9989f, -0.999f, -0.9991f, \n        -0.9991f, -0.9992f, -0.9993f, -0.9993f, -0.9994f, -0.9994f, -0.9995f, -0.9995f, -0.9996f, -0.9996f, \n        -0.9997f, -0.9997f, -0.9997f, -0.9998f, -0.9998f, -0.9998f, -0.9999f, -0.9999f, -0.9999f, -0.9999f, \n        -0.9999f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f,\n        -1.0f, -1.0f, -1.0f, -1.0f, -0.9999f, -0.9999f, -0.9999f, -0.9999f, -0.9999f, -0.9998f,\n        -0.9998f, -0.9998f, -0.9997f, -0.9997f, -0.9997f, -0.9996f, -0.9996f, -0.9995f, -0.9995f, -0.9994f, \n        -0.9994f, -0.9993f, -0.9993f, -0.9992f, -0.9991f, -0.9991f, -0.999f, -0.9989f, -0.9989f, -0.9988f, \n        -0.9987f, -0.9986f, -0.9986f, -0.9985f, -0.9984f, -0.9983f, -0.9982f, -0.9981f, -0.998f, -0.9979f, \n        -0.9978f, -0.9977f, -0.9976f, -0.9975f, -0.9974f, -0.9973f, -0.9972f, -0.9971f, -0.9969f, -0.9968f, \n        -0.9967f, -0.9966f, -0.9964f, -0.9963f, -0.9962f, -0.996f, -0.9959f, -0.9958f, -0.9956f, -0.9955f, \n        -0.9953f, -0.9952f, -0.995f, -0.9949f, -0.9947f, -0.9946f, -0.9944f, -0.9942f, -0.9941f, -0.9939f, \n        -0.9937f, -0.9936f, -0.9934f, -0.9932f, -0.993f, -0.9929f, -0.9927f, -0.9925f, -0.9923f, -0.9921f, \n        -0.9919f, -0.9917f, -0.9915f, -0.9913f, -0.9911f, -0.9909f, -0.9907f, -0.9905f, -0.9903f, -0.9901f, \n        -0.9898f, -0.9896f, -0.9894f, -0.9892f, -0.989f, -0.9887f, -0.9885f, -0.9883f, -0.988f, -0.9878f, \n        -0.9875f, -0.9873f, -0.9871f, -0.9868f, -0.9866f, -0.9863f, -0.9861f, -0.9858f, -0.9855f, -0.9853f, \n        -0.985f, -0.9847f, -0.9845f, -0.9842f, -0.9839f, -0.9837f, -0.9834f, -0.9831f, -0.9828f, -0.9825f, \n        -0.9823f, -0.982f, -0.9817f, -0.9814f, -0.9811f, -0.9808f, -0.9805f, -0.9802f, -0.9799f, -0.9796f, \n        -0.9793f, -0.9789f, -0.9786f, -0.9783f, -0.978f, -0.9777f, -0.9774f, -0.977f, -0.9767f, -0.9764f, \n        -0.976f, -0.9757f, -0.9754f, -0.975f, -0.9747f, -0.9743f, -0.974f, -0.9736f, -0.9733f, -0.9729f, \n        -0.9726f, -0.9722f, -0.9719f, -0.9715f, -0.9711f, -0.9708f, -0.9704f, -0.97f, -0.9697f, -0.9693f, \n        -0.9689f, -0.9685f, -0.9681f, -0.9678f, -0.9674f, -0.967f, -0.9666f, -0.9662f, -0.9658f, -0.9654f, \n        -0.965f, -0.9646f, -0.9642f, -0.9638f, -0.9634f, -0.963f, -0.9625f, -0.9621f, -0.9617f, -0.9613f, \n        -0.9609f, -0.9604f, -0.96f, -0.9596f, -0.9591f, -0.9587f, -0.9583f, -0.9578f, -0.9574f, -0.9569f, \n        -0.9565f, -0.956f, -0.9556f, -0.9551f, -0.9547f, -0.9542f, -0.9538f, -0.9533f, -0.9528f, -0.9524f, \n        -0.9519f, -0.9514f, -0.951f, -0.9505f, -0.95f, -0.9495f, -0.949f, -0.9486f, -0.9481f, -0.9476f, \n        -0.9471f, -0.9466f, -0.9461f, -0.9456f, -0.9451f, -0.9446f, -0.9441f, -0.9436f, -0.9431f, -0.9426f, \n        -0.9421f, -0.9415f, -0.941f, -0.9405f, -0.94f, -0.9395f, -0.9389f, -0.9384f, -0.9379f, -0.9373f, \n        -0.9368f, -0.9363f, -0.9357f, -0.9352f, -0.9346f, -0.9341f, -0.9335f, -0.933f, -0.9324f, -0.9319f, \n        -0.9313f, -0.9308f, -0.9302f, -0.9296f, -0.9291f, -0.9285f, -0.9279f, -0.9274f, -0.9268f, -0.9262f, \n        -0.9256f, -0.925f, -0.9245f, -0.9239f, -0.9233f, -0.9227f, -0.9221f, -0.9215f, -0.9209f, -0.9203f, \n        -0.9197f, -0.9191f, -0.9185f, -0.9179f, -0.9173f, -0.9167f, -0.9161f, -0.9154f, -0.9148f, -0.9142f, \n        -0.9136f, -0.913f, -0.9123f, -0.9117f, -0.9111f, -0.9104f, -0.9098f, -0.9092f, -0.9085f, -0.9079f, \n        -0.9072f, -0.9066f, -0.9059f, -0.9053f, -0.9046f, -0.904f, -0.9033f, -0.9027f, -0.902f, -0.9013f, \n        -0.9007f, -0.9f, -0.8993f, -0.8987f, -0.898f, -0.8973f, -0.8966f, -0.896f, -0.8953f, -0.8946f, \n        -0.8939f, -0.8932f, -0.8925f, -0.8918f, -0.8911f, -0.8904f, -0.8897f, -0.889f, -0.8883f, -0.8876f, \n        -0.8869f, -0.8862f, -0.8855f, -0.8848f, -0.8841f, -0.8834f, -0.8826f, -0.8819f, -0.8812f, -0.8805f, \n        -0.8797f, -0.879f, -0.8783f, -0.8775f, -0.8768f, -0.8761f, -0.8753f, -0.8746f, -0.8738f, -0.8731f, \n        -0.8723f, -0.8716f, -0.8708f, -0.8701f, -0.8693f, -0.8686f, -0.8678f, -0.867f, -0.8663f, -0.8655f, \n        -0.8647f, -0.864f, -0.8632f, -0.8624f, -0.8616f, -0.8609f, -0.8601f, -0.8593f, -0.8585f, -0.8577f, \n        -0.8569f, -0.8561f, -0.8554f, -0.8546f, -0.8538f, -0.853f, -0.8522f, -0.8514f, -0.8505f, -0.8497f, \n        -0.8489f, -0.8481f, -0.8473f, -0.8465f, -0.8457f, -0.8449f, -0.844f, -0.8432f, -0.8424f, -0.8416f, \n        -0.8407f, -0.8399f, -0.8391f, -0.8382f, -0.8374f, -0.8365f, -0.8357f, -0.8349f, -0.834f, -0.8332f, \n        -0.8323f, -0.8315f, -0.8306f, -0.8298f, -0.8289f, -0.828f, -0.8272f, -0.8263f, -0.8255f, -0.8246f, \n        -0.8237f, -0.8228f, -0.822f, -0.8211f, -0.8202f, -0.8193f, -0.8185f, -0.8176f, -0.8167f, -0.8158f, \n        -0.8149f, -0.814f, -0.8131f, -0.8123f, -0.8114f, -0.8105f, -0.8096f, -0.8087f, -0.8078f, -0.8068f, \n        -0.8059f, -0.805f, -0.8041f, -0.8032f, -0.8023f, -0.8014f, -0.8005f, -0.7995f, -0.7986f, -0.7977f, \n        -0.7968f, -0.7958f, -0.7949f, -0.794f, -0.793f, -0.7921f, -0.7912f, -0.7902f, -0.7893f, -0.7883f, \n        -0.7874f, -0.7865f, -0.7855f, -0.7846f, -0.7836f, -0.7827f, -0.7817f, -0.7807f, -0.7798f, -0.7788f, \n        -0.7779f, -0.7769f, -0.7759f, -0.775f, -0.774f, -0.773f, -0.772f, -0.7711f, -0.7701f, -0.7691f, \n        -0.7681f, -0.7671f, -0.7662f, -0.7652f, -0.7642f, -0.7632f, -0.7622f, -0.7612f, -0.7602f, -0.7592f, \n        -0.7582f, -0.7572f, -0.7562f, -0.7552f, -0.7542f, -0.7532f, -0.7522f, -0.7512f, -0.7502f, -0.7491f, \n        -0.7481f, -0.7471f, -0.7461f, -0.7451f, -0.744f, -0.743f, -0.742f, -0.741f, -0.7399f, -0.7389f, \n        -0.7379f, -0.7368f, -0.7358f, -0.7347f, -0.7337f, -0.7327f, -0.7316f, -0.7306f, -0.7295f, -0.7285f, \n        -0.7274f, -0.7264f, -0.7253f, -0.7242f, -0.7232f, -0.7221f, -0.7211f, -0.72f, -0.7189f, -0.7179f, \n        -0.7168f, -0.7157f, -0.7147f, -0.7136f, -0.7125f, -0.7114f, -0.7104f, -0.7093f, -0.7082f, -0.7071f, \n        -0.706f, -0.7049f, -0.7038f, -0.7028f, -0.7017f, -0.7006f, -0.6995f, -0.6984f, -0.6973f, -0.6962f, \n        -0.6951f, -0.694f, -0.6929f, -0.6918f, -0.6907f, -0.6895f, -0.6884f, -0.6873f, -0.6862f, -0.6851f, \n        -0.684f, -0.6828f, -0.6817f, -0.6806f, -0.6795f, -0.6784f, -0.6772f, -0.6761f, -0.675f, -0.6738f, \n        -0.6727f, -0.6716f, -0.6704f, -0.6693f, -0.6681f, -0.667f, -0.6659f, -0.6647f, -0.6636f, -0.6624f, \n        -0.6613f, -0.6601f, -0.659f, -0.6578f, -0.6567f, -0.6555f, -0.6543f, -0.6532f, -0.652f, -0.6508f, \n        -0.6497f, -0.6485f, -0.6473f, -0.6462f, -0.645f, -0.6438f, -0.6427f, -0.6415f, -0.6403f, -0.6391f, \n        -0.6379f, -0.6368f, -0.6356f, -0.6344f, -0.6332f, -0.632f, -0.6308f, -0.6296f, -0.6284f, -0.6273f, \n        -0.6261f, -0.6249f, -0.6237f, -0.6225f, -0.6213f, -0.6201f, -0.6189f, -0.6176f, -0.6164f, -0.6152f, \n        -0.614f, -0.6128f, -0.6116f, -0.6104f, -0.6092f, -0.6079f, -0.6067f, -0.6055f, -0.6043f, -0.6031f, \n        -0.6018f, -0.6006f, -0.5994f, -0.5982f, -0.5969f, -0.5957f, -0.5945f, -0.5932f, -0.592f, -0.5908f, \n        -0.5895f, -0.5883f, -0.587f, -0.5858f, -0.5846f, -0.5833f, -0.5821f, -0.5808f, -0.5796f, -0.5783f, \n        -0.5771f, -0.5758f, -0.5746f, -0.5733f, -0.572f, -0.5708f, -0.5695f, -0.5683f, -0.567f, -0.5657f, \n        -0.5645f, -0.5632f, -0.5619f, -0.5607f, -0.5594f, -0.5581f, -0.5568f, -0.5556f, -0.5543f, -0.553f, \n        -0.5517f, -0.5505f, -0.5492f, -0.5479f, -0.5466f, -0.5453f, -0.544f, -0.5428f, -0.5415f, -0.5402f, \n        -0.5389f, -0.5376f, -0.5363f, -0.535f, -0.5337f, -0.5324f, -0.5311f, -0.5298f, -0.5285f, -0.5272f, \n        -0.5259f, -0.5246f, -0.5233f, -0.522f, -0.5207f, -0.5194f, -0.518f, -0.5167f, -0.5154f, -0.5141f, \n        -0.5128f, -0.5115f, -0.5102f, -0.5088f, -0.5075f, -0.5062f, -0.5049f, -0.5035f, -0.5022f, -0.5009f, \n        -0.4996f, -0.4982f, -0.4969f, -0.4956f, -0.4942f, -0.4929f, -0.4916f, -0.4902f, -0.4889f, -0.4876f, \n        -0.4862f, -0.4849f, -0.4835f, -0.4822f, -0.4808f, -0.4795f, -0.4781f, -0.4768f, -0.4755f, -0.4741f, \n        -0.4727f, -0.4714f, -0.47f, -0.4687f, -0.4673f, -0.466f, -0.4646f, -0.4633f, -0.4619f, -0.4605f, \n        -0.4592f, -0.4578f, -0.4564f, -0.4551f, -0.4537f, -0.4523f, -0.451f, -0.4496f, -0.4482f, -0.4469f, \n        -0.4455f, -0.4441f, -0.4427f, -0.4414f, -0.44f, -0.4386f, -0.4372f, -0.4359f, -0.4345f, -0.4331f, \n        -0.4317f, -0.4303f, -0.4289f, -0.4276f, -0.4262f, -0.4248f, -0.4234f, -0.422f, -0.4206f, -0.4192f, \n        -0.4178f, -0.4164f, -0.415f, -0.4136f, -0.4122f, -0.4108f, -0.4094f, -0.408f, -0.4066f, -0.4052f, \n        -0.4038f, -0.4024f, -0.401f, -0.3996f, -0.3982f, -0.3968f, -0.3954f, -0.394f, -0.3926f, -0.3912f, \n        -0.3898f, -0.3883f, -0.3869f, -0.3855f, -0.3841f, -0.3827f, -0.3813f, -0.3798f, -0.3784f, -0.377f, \n        -0.3756f, -0.3742f, -0.3727f, -0.3713f, -0.3699f, -0.3685f, -0.367f, -0.3656f, -0.3642f, -0.3628f, \n        -0.3613f, -0.3599f, -0.3585f, -0.357f, -0.3556f, -0.3542f, -0.3527f, -0.3513f, -0.3499f, -0.3484f, \n        -0.347f, -0.3455f, -0.3441f, -0.3427f, -0.3412f, -0.3398f, -0.3383f, -0.3369f, -0.3354f, -0.334f, \n        -0.3326f, -0.3311f, -0.3297f, -0.3282f, -0.3268f, -0.3253f, -0.3239f, -0.3224f, -0.321f, -0.3195f, \n        -0.318f, -0.3166f, -0.3151f, -0.3137f, -0.3122f, -0.3108f, -0.3093f, -0.3078f, -0.3064f, -0.3049f, \n        -0.3035f, -0.302f, -0.3005f, -0.2991f, -0.2976f, -0.2962f, -0.2947f, -0.2932f, -0.2918f, -0.2903f, \n        -0.2888f, -0.2873f, -0.2859f, -0.2844f, -0.2829f, -0.2815f, -0.28f, -0.2785f, -0.277f, -0.2756f, \n        -0.2741f, -0.2726f, -0.2711f, -0.2697f, -0.2682f, -0.2667f, -0.2652f, -0.2638f, -0.2623f, -0.2608f, \n        -0.2593f, -0.2578f, -0.2563f, -0.2549f, -0.2534f, -0.2519f, -0.2504f, -0.2489f, -0.2474f, -0.246f, \n        -0.2445f, -0.243f, -0.2415f, -0.24f, -0.2385f, -0.237f, -0.2355f, -0.234f, -0.2326f, -0.2311f, \n        -0.2296f, -0.2281f, -0.2266f, -0.2251f, -0.2236f, -0.2221f, -0.2206f, -0.2191f, -0.2176f, -0.2161f, \n        -0.2146f, -0.2131f, -0.2116f, -0.2101f, -0.2086f, -0.2071f, -0.2056f, -0.2041f, -0.2026f, -0.2011f, \n        -0.1996f, -0.1981f, -0.1966f, -0.1951f, -0.1936f, -0.1921f, -0.1906f, -0.1891f, -0.1876f, -0.1861f, \n        -0.1845f, -0.183f, -0.1815f, -0.18f, -0.1785f, -0.177f, -0.1755f, -0.174f, -0.1725f, -0.171f, \n        -0.1695f, -0.1679f, -0.1664f, -0.1649f, -0.1634f, -0.1619f, -0.1604f, -0.1589f, -0.1573f, -0.1558f, \n        -0.1543f, -0.1528f, -0.1513f, -0.1498f, -0.1482f, -0.1467f, -0.1452f, -0.1437f, -0.1422f, -0.1407f, \n        -0.1391f, -0.1376f, -0.1361f, -0.1346f, -0.1331f, -0.1315f, -0.13f, -0.1285f, -0.127f, -0.1255f, \n        -0.1239f, -0.1224f, -0.1209f, -0.1194f, -0.1178f, -0.1163f, -0.1148f, -0.1133f, -0.1117f, -0.1102f, \n        -0.1087f, -0.1072f, -0.1056f, -0.1041f, -0.1026f, -0.1011f, -0.09954f, -0.09802f, -0.09649f, -0.09496f, \n        -0.09344f, -0.09191f, -0.09038f, -0.08885f, -0.08733f, -0.0858f, -0.08427f, -0.08274f, -0.08121f, -0.07968f, \n        -0.07815f, -0.07662f, -0.07509f, -0.07356f, -0.07203f, -0.0705f, -0.06897f, -0.06744f, -0.06591f, -0.06438f, \n        -0.06285f, -0.06132f, -0.05979f, -0.05826f, -0.05673f, -0.0552f, -0.05366f, -0.05213f, -0.0506f, -0.04907f, \n        -0.04754f, -0.046f, -0.04447f, -0.04294f, -0.04141f, -0.03987f, -0.03834f, -0.03681f, -0.03527f, -0.03374f, \n        -0.03221f, -0.03067f, -0.02914f, -0.02761f, -0.02607f, -0.02454f, -0.02301f, -0.02147f, -0.01994f, -0.01841f, \n        -0.01687f, -0.01534f, -0.01381f, -0.01227f, -0.01074f, -0.009204f, -0.00767f, -0.006136f, -0.004602f, -0.003068f, \n        -0.001534f, -1.837e-16f, 0.001534f, 0.003068f, 0.004602f, 0.006136f, 0.00767f, 0.009204f, 0.01074f, 0.01227f, \n        0.01381f, 0.01534f, 0.01687f, 0.01841f, 0.01994f, 0.02147f, 0.02301f, 0.02454f, 0.02607f, 0.02761f, \n        0.02914f, 0.03067f, 0.03221f, 0.03374f, 0.03527f, 0.03681f, 0.03834f, 0.03987f, 0.04141f, 0.04294f, \n        0.04447f, 0.046f, 0.04754f, 0.04907f, 0.0506f, 0.05213f, 0.05366f, 0.0552f, 0.05673f, 0.05826f, \n        0.05979f, 0.06132f, 0.06285f, 0.06438f, 0.06591f, 0.06744f, 0.06897f, 0.0705f, 0.07203f, 0.07356f, \n        0.07509f, 0.07662f, 0.07815f, 0.07968f, 0.08121f, 0.08274f, 0.08427f, 0.0858f, 0.08733f, 0.08885f, \n        0.09038f, 0.09191f, 0.09344f, 0.09496f, 0.09649f, 0.09802f, 0.09954f, 0.1011f, 0.1026f, 0.1041f, \n        0.1056f, 0.1072f, 0.1087f, 0.1102f, 0.1117f, 0.1133f, 0.1148f, 0.1163f, 0.1178f, 0.1194f, \n        0.1209f, 0.1224f, 0.1239f, 0.1255f, 0.127f, 0.1285f, 0.13f, 0.1315f, 0.1331f, 0.1346f, \n        0.1361f, 0.1376f, 0.1391f, 0.1407f, 0.1422f, 0.1437f, 0.1452f, 0.1467f, 0.1482f, 0.1498f, \n        0.1513f, 0.1528f, 0.1543f, 0.1558f, 0.1573f, 0.1589f, 0.1604f, 0.1619f, 0.1634f, 0.1649f, \n        0.1664f, 0.1679f, 0.1695f, 0.171f, 0.1725f, 0.174f, 0.1755f, 0.177f, 0.1785f, 0.18f, \n        0.1815f, 0.183f, 0.1845f, 0.1861f, 0.1876f, 0.1891f, 0.1906f, 0.1921f, 0.1936f, 0.1951f, \n        0.1966f, 0.1981f, 0.1996f, 0.2011f, 0.2026f, 0.2041f, 0.2056f, 0.2071f, 0.2086f, 0.2101f, \n        0.2116f, 0.2131f, 0.2146f, 0.2161f, 0.2176f, 0.2191f, 0.2206f, 0.2221f, 0.2236f, 0.2251f, \n        0.2266f, 0.2281f, 0.2296f, 0.2311f, 0.2326f, 0.234f, 0.2355f, 0.237f, 0.2385f, 0.24f, \n        0.2415f, 0.243f, 0.2445f, 0.246f, 0.2474f, 0.2489f, 0.2504f, 0.2519f, 0.2534f, 0.2549f, \n        0.2563f, 0.2578f, 0.2593f, 0.2608f, 0.2623f, 0.2638f, 0.2652f, 0.2667f, 0.2682f, 0.2697f, \n        0.2711f, 0.2726f, 0.2741f, 0.2756f, 0.277f, 0.2785f, 0.28f, 0.2815f, 0.2829f, 0.2844f, \n        0.2859f, 0.2873f, 0.2888f, 0.2903f, 0.2918f, 0.2932f, 0.2947f, 0.2962f, 0.2976f, 0.2991f, \n        0.3005f, 0.302f, 0.3035f, 0.3049f, 0.3064f, 0.3078f, 0.3093f, 0.3108f, 0.3122f, 0.3137f, \n        0.3151f, 0.3166f, 0.318f, 0.3195f, 0.321f, 0.3224f, 0.3239f, 0.3253f, 0.3268f, 0.3282f, \n        0.3297f, 0.3311f, 0.3326f, 0.334f, 0.3354f, 0.3369f, 0.3383f, 0.3398f, 0.3412f, 0.3427f, \n        0.3441f, 0.3455f, 0.347f, 0.3484f, 0.3499f, 0.3513f, 0.3527f, 0.3542f, 0.3556f, 0.357f, \n        0.3585f, 0.3599f, 0.3613f, 0.3628f, 0.3642f, 0.3656f, 0.367f, 0.3685f, 0.3699f, 0.3713f, \n        0.3727f, 0.3742f, 0.3756f, 0.377f, 0.3784f, 0.3798f, 0.3813f, 0.3827f, 0.3841f, 0.3855f, \n        0.3869f, 0.3883f, 0.3898f, 0.3912f, 0.3926f, 0.394f, 0.3954f, 0.3968f, 0.3982f, 0.3996f, \n        0.401f, 0.4024f, 0.4038f, 0.4052f, 0.4066f, 0.408f, 0.4094f, 0.4108f, 0.4122f, 0.4136f, \n        0.415f, 0.4164f, 0.4178f, 0.4192f, 0.4206f, 0.422f, 0.4234f, 0.4248f, 0.4262f, 0.4276f, \n        0.4289f, 0.4303f, 0.4317f, 0.4331f, 0.4345f, 0.4359f, 0.4372f, 0.4386f, 0.44f, 0.4414f, \n        0.4427f, 0.4441f, 0.4455f, 0.4469f, 0.4482f, 0.4496f, 0.451f, 0.4523f, 0.4537f, 0.4551f, \n        0.4564f, 0.4578f, 0.4592f, 0.4605f, 0.4619f, 0.4633f, 0.4646f, 0.466f, 0.4673f, 0.4687f, \n        0.47f, 0.4714f, 0.4727f, 0.4741f, 0.4755f, 0.4768f, 0.4781f, 0.4795f, 0.4808f, 0.4822f, \n        0.4835f, 0.4849f, 0.4862f, 0.4876f, 0.4889f, 0.4902f, 0.4916f, 0.4929f, 0.4942f, 0.4956f, \n        0.4969f, 0.4982f, 0.4996f, 0.5009f, 0.5022f, 0.5035f, 0.5049f, 0.5062f, 0.5075f, 0.5088f, \n        0.5102f, 0.5115f, 0.5128f, 0.5141f, 0.5154f, 0.5167f, 0.518f, 0.5194f, 0.5207f, 0.522f, \n        0.5233f, 0.5246f, 0.5259f, 0.5272f, 0.5285f, 0.5298f, 0.5311f, 0.5324f, 0.5337f, 0.535f, \n        0.5363f, 0.5376f, 0.5389f, 0.5402f, 0.5415f, 0.5428f, 0.544f, 0.5453f, 0.5466f, 0.5479f, \n        0.5492f, 0.5505f, 0.5517f, 0.553f, 0.5543f, 0.5556f, 0.5568f, 0.5581f, 0.5594f, 0.5607f, \n        0.5619f, 0.5632f, 0.5645f, 0.5657f, 0.567f, 0.5683f, 0.5695f, 0.5708f, 0.572f, 0.5733f, \n        0.5746f, 0.5758f, 0.5771f, 0.5783f, 0.5796f, 0.5808f, 0.5821f, 0.5833f, 0.5846f, 0.5858f, \n        0.587f, 0.5883f, 0.5895f, 0.5908f, 0.592f, 0.5932f, 0.5945f, 0.5957f, 0.5969f, 0.5982f, \n        0.5994f, 0.6006f, 0.6018f, 0.6031f, 0.6043f, 0.6055f, 0.6067f, 0.6079f, 0.6092f, 0.6104f, \n        0.6116f, 0.6128f, 0.614f, 0.6152f, 0.6164f, 0.6176f, 0.6189f, 0.6201f, 0.6213f, 0.6225f, \n        0.6237f, 0.6249f, 0.6261f, 0.6273f, 0.6284f, 0.6296f, 0.6308f, 0.632f, 0.6332f, 0.6344f, \n        0.6356f, 0.6368f, 0.6379f, 0.6391f, 0.6403f, 0.6415f, 0.6427f, 0.6438f, 0.645f, 0.6462f, \n        0.6473f, 0.6485f, 0.6497f, 0.6508f, 0.652f, 0.6532f, 0.6543f, 0.6555f, 0.6567f, 0.6578f, \n        0.659f, 0.6601f, 0.6613f, 0.6624f, 0.6636f, 0.6647f, 0.6659f, 0.667f, 0.6681f, 0.6693f, \n        0.6704f, 0.6716f, 0.6727f, 0.6738f, 0.675f, 0.6761f, 0.6772f, 0.6784f, 0.6795f, 0.6806f, \n        0.6817f, 0.6828f, 0.684f, 0.6851f, 0.6862f, 0.6873f, 0.6884f, 0.6895f, 0.6907f, 0.6918f, \n        0.6929f, 0.694f, 0.6951f, 0.6962f, 0.6973f, 0.6984f, 0.6995f, 0.7006f, 0.7017f, 0.7028f, \n        0.7038f, 0.7049f, 0.706f, 0.7071f, 0.7082f, 0.7093f, 0.7104f, 0.7114f, 0.7125f, 0.7136f, \n        0.7147f, 0.7157f, 0.7168f, 0.7179f, 0.7189f, 0.72f, 0.7211f, 0.7221f, 0.7232f, 0.7242f, \n        0.7253f, 0.7264f, 0.7274f, 0.7285f, 0.7295f, 0.7306f, 0.7316f, 0.7327f, 0.7337f, 0.7347f, \n        0.7358f, 0.7368f, 0.7379f, 0.7389f, 0.7399f, 0.741f, 0.742f, 0.743f, 0.744f, 0.7451f, \n        0.7461f, 0.7471f, 0.7481f, 0.7491f, 0.7502f, 0.7512f, 0.7522f, 0.7532f, 0.7542f, 0.7552f, \n        0.7562f, 0.7572f, 0.7582f, 0.7592f, 0.7602f, 0.7612f, 0.7622f, 0.7632f, 0.7642f, 0.7652f, \n        0.7662f, 0.7671f, 0.7681f, 0.7691f, 0.7701f, 0.7711f, 0.772f, 0.773f, 0.774f, 0.775f, \n        0.7759f, 0.7769f, 0.7779f, 0.7788f, 0.7798f, 0.7807f, 0.7817f, 0.7827f, 0.7836f, 0.7846f, \n        0.7855f, 0.7865f, 0.7874f, 0.7883f, 0.7893f, 0.7902f, 0.7912f, 0.7921f, 0.793f, 0.794f, \n        0.7949f, 0.7958f, 0.7968f, 0.7977f, 0.7986f, 0.7995f, 0.8005f, 0.8014f, 0.8023f, 0.8032f, \n        0.8041f, 0.805f, 0.8059f, 0.8068f, 0.8078f, 0.8087f, 0.8096f, 0.8105f, 0.8114f, 0.8123f, \n        0.8131f, 0.814f, 0.8149f, 0.8158f, 0.8167f, 0.8176f, 0.8185f, 0.8193f, 0.8202f, 0.8211f, \n        0.822f, 0.8228f, 0.8237f, 0.8246f, 0.8255f, 0.8263f, 0.8272f, 0.828f, 0.8289f, 0.8298f, \n        0.8306f, 0.8315f, 0.8323f, 0.8332f, 0.834f, 0.8349f, 0.8357f, 0.8365f, 0.8374f, 0.8382f, \n        0.8391f, 0.8399f, 0.8407f, 0.8416f, 0.8424f, 0.8432f, 0.844f, 0.8449f, 0.8457f, 0.8465f, \n        0.8473f, 0.8481f, 0.8489f, 0.8497f, 0.8505f, 0.8514f, 0.8522f, 0.853f, 0.8538f, 0.8546f, \n        0.8554f, 0.8561f, 0.8569f, 0.8577f, 0.8585f, 0.8593f, 0.8601f, 0.8609f, 0.8616f, 0.8624f, \n        0.8632f, 0.864f, 0.8647f, 0.8655f, 0.8663f, 0.867f, 0.8678f, 0.8686f, 0.8693f, 0.8701f, \n        0.8708f, 0.8716f, 0.8723f, 0.8731f, 0.8738f, 0.8746f, 0.8753f, 0.8761f, 0.8768f, 0.8775f, \n        0.8783f, 0.879f, 0.8797f, 0.8805f, 0.8812f, 0.8819f, 0.8826f, 0.8834f, 0.8841f, 0.8848f, \n        0.8855f, 0.8862f, 0.8869f, 0.8876f, 0.8883f, 0.889f, 0.8897f, 0.8904f, 0.8911f, 0.8918f, \n        0.8925f, 0.8932f, 0.8939f, 0.8946f, 0.8953f, 0.896f, 0.8966f, 0.8973f, 0.898f, 0.8987f, \n        0.8993f, 0.9f, 0.9007f, 0.9013f, 0.902f, 0.9027f, 0.9033f, 0.904f, 0.9046f, 0.9053f, \n        0.9059f, 0.9066f, 0.9072f, 0.9079f, 0.9085f, 0.9092f, 0.9098f, 0.9104f, 0.9111f, 0.9117f, \n        0.9123f, 0.913f, 0.9136f, 0.9142f, 0.9148f, 0.9154f, 0.9161f, 0.9167f, 0.9173f, 0.9179f, \n        0.9185f, 0.9191f, 0.9197f, 0.9203f, 0.9209f, 0.9215f, 0.9221f, 0.9227f, 0.9233f, 0.9239f, \n        0.9245f, 0.925f, 0.9256f, 0.9262f, 0.9268f, 0.9274f, 0.9279f, 0.9285f, 0.9291f, 0.9296f, \n        0.9302f, 0.9308f, 0.9313f, 0.9319f, 0.9324f, 0.933f, 0.9335f, 0.9341f, 0.9346f, 0.9352f, \n        0.9357f, 0.9363f, 0.9368f, 0.9373f, 0.9379f, 0.9384f, 0.9389f, 0.9395f, 0.94f, 0.9405f, \n        0.941f, 0.9415f, 0.9421f, 0.9426f, 0.9431f, 0.9436f, 0.9441f, 0.9446f, 0.9451f, 0.9456f, \n        0.9461f, 0.9466f, 0.9471f, 0.9476f, 0.9481f, 0.9486f, 0.949f, 0.9495f, 0.95f, 0.9505f, \n        0.951f, 0.9514f, 0.9519f, 0.9524f, 0.9528f, 0.9533f, 0.9538f, 0.9542f, 0.9547f, 0.9551f, \n        0.9556f, 0.956f, 0.9565f, 0.9569f, 0.9574f, 0.9578f, 0.9583f, 0.9587f, 0.9591f, 0.9596f, \n        0.96f, 0.9604f, 0.9609f, 0.9613f, 0.9617f, 0.9621f, 0.9625f, 0.963f, 0.9634f, 0.9638f, \n        0.9642f, 0.9646f, 0.965f, 0.9654f, 0.9658f, 0.9662f, 0.9666f, 0.967f, 0.9674f, 0.9678f, \n        0.9681f, 0.9685f, 0.9689f, 0.9693f, 0.9697f, 0.97f, 0.9704f, 0.9708f, 0.9711f, 0.9715f, \n        0.9719f, 0.9722f, 0.9726f, 0.9729f, 0.9733f, 0.9736f, 0.974f, 0.9743f, 0.9747f, 0.975f, \n        0.9754f, 0.9757f, 0.976f, 0.9764f, 0.9767f, 0.977f, 0.9774f, 0.9777f, 0.978f, 0.9783f, \n        0.9786f, 0.9789f, 0.9793f, 0.9796f, 0.9799f, 0.9802f, 0.9805f, 0.9808f, 0.9811f, 0.9814f, \n        0.9817f, 0.982f, 0.9823f, 0.9825f, 0.9828f, 0.9831f, 0.9834f, 0.9837f, 0.9839f, 0.9842f, \n        0.9845f, 0.9847f, 0.985f, 0.9853f, 0.9855f, 0.9858f, 0.9861f, 0.9863f, 0.9866f, 0.9868f, \n        0.9871f, 0.9873f, 0.9875f, 0.9878f, 0.988f, 0.9883f, 0.9885f, 0.9887f, 0.989f, 0.9892f, \n        0.9894f, 0.9896f, 0.9898f, 0.9901f, 0.9903f, 0.9905f, 0.9907f, 0.9909f, 0.9911f, 0.9913f, \n        0.9915f, 0.9917f, 0.9919f, 0.9921f, 0.9923f, 0.9925f, 0.9927f, 0.9929f, 0.993f, 0.9932f, \n        0.9934f, 0.9936f, 0.9937f, 0.9939f, 0.9941f, 0.9942f, 0.9944f, 0.9946f, 0.9947f, 0.9949f, \n        0.995f, 0.9952f, 0.9953f, 0.9955f, 0.9956f, 0.9958f, 0.9959f, 0.996f, 0.9962f, 0.9963f, \n        0.9964f, 0.9966f, 0.9967f, 0.9968f, 0.9969f, 0.9971f, 0.9972f, 0.9973f, 0.9974f, 0.9975f, \n        0.9976f, 0.9977f, 0.9978f, 0.9979f, 0.998f, 0.9981f, 0.9982f, 0.9983f, 0.9984f, 0.9985f, \n        0.9986f, 0.9986f, 0.9987f, 0.9988f, 0.9989f, 0.9989f, 0.999f, 0.9991f, 0.9991f, 0.9992f, \n        0.9993f, 0.9993f, 0.9994f, 0.9994f, 0.9995f, 0.9995f, 0.9996f, 0.9996f, 0.9997f, 0.9997f, \n        0.9997f, 0.9998f, 0.9998f, 0.9998f, 0.9999f, 0.9999f, 0.9999f, 0.9999f, 0.9999f, 1.0f,\n        1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f};\n\n\t\tconst static uint64 mask = max-1; \n        return logvals[h.first&mask]*cosvals[h.second&mask];\n\n        // Note that we are just using the Box–Muller transform to compute the result.  In\n        // particular, we are doing this (where u1 and u2 are uniform random variables in\n        // the range [0,1]): \n        //    return sqrt(-2*log(u1)) * cos(2*PI*u2);\n        // It is just that we use table lookups to avoid calling sqrt(), log() and cos().\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RANDOM_HAsHING_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/general_hash/random_hashing_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RANDOM_HAsHING_ABSTRACT_Hh_ \n#ifdef DLIB_RANDOM_HAsHING_ABSTRACT_Hh_ \n\n#include \"random_hashing_abstract.h\"\n#include \"murmur_hash3.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    double uniform_random_hash (\n        const uint64& k1,\n        const uint64& k2,\n        const uint64& k3\n    );\n    /*!\n        ensures\n            - This function uses hashing to generate uniform random values in the range [0,1).\n            - To define this function precisely, assume we have an arbitrary sequence of\n              input triplets.  Then calling uniform_random_hash() on each of them should\n              result in a sequence of double values that look like numbers sampled\n              independently and uniformly at random from the interval [0,1).  This is true\n              even if there is some simple pattern in the inputs.  For example, (0,0,0),\n              (1,0,0), (2,0,0), (3,0,0), etc.\n            - This function is deterministic.  That is, the same output is always returned\n              when given the same input.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    double gaussian_random_hash (\n        const uint64& k1,\n        const uint64& k2,\n        const uint64& k3\n    );\n    /*!\n        ensures\n            - This function uses hashing to generate Gaussian distributed random values\n              with mean 0 and variance 1.  \n            - To define this function precisely, assume we have an arbitrary sequence of\n              input triplets.  Then calling gaussian_random_hash() on each of them should\n              result in a sequence of double values that look like numbers sampled\n              independently from a standard normal distribution.  This is true even if\n              there is some simple pattern in the inputs.  For example, (0,0,0), (1,0,0),\n              (2,0,0), (3,0,0), etc.\n            - This function is deterministic.  That is, the same output is always returned\n              when given the same input.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RANDOM_HAsHING_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/geometry/border_enumerator.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BORDER_EnUMERATOR_H_\n#define DLIB_BORDER_EnUMERATOR_H_\n\n#include \"border_enumerator_abstract.h\"\n#include \"rectangle.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class border_enumerator\n    {\n    public:\n        border_enumerator(\n        ) \n        {\n            reset();\n        }\n\n        border_enumerator(\n            const rectangle& rect_,\n            unsigned long border_size\n        ) : \n            rect(rect_),\n            inner_rect(shrink_rect(rect_, border_size))\n        {\n            reset();\n        }\n\n        border_enumerator(\n            const rectangle& rect_,\n            const rectangle& non_border_region\n        ) : \n            rect(rect_),\n            inner_rect(non_border_region.intersect(rect))\n        {\n            reset();\n        }\n\n        void reset (\n        ) \n        {\n            // make the four rectangles that surround inner_rect and intersect them\n            // with rect.\n            bleft   = rect.intersect(rectangle(std::numeric_limits<long>::min(),\n                                               std::numeric_limits<long>::min(),\n                                               inner_rect.left()-1,\n                                               std::numeric_limits<long>::max()));\n\n            bright  = rect.intersect(rectangle(inner_rect.right()+1,\n                                               std::numeric_limits<long>::min(),\n                                               std::numeric_limits<long>::max(),\n                                               std::numeric_limits<long>::max()));\n\n            btop    = rect.intersect(rectangle(inner_rect.left(),\n                                               std::numeric_limits<long>::min(),\n                                               inner_rect.right(),\n                                               inner_rect.top()-1));\n\n            bbottom = rect.intersect(rectangle(inner_rect.left(),\n                                               inner_rect.bottom()+1,\n                                               inner_rect.right(),\n                                               std::numeric_limits<long>::max()));\n\n            p = bleft.tl_corner();\n            p.x() -= 1;\n\n            mode = atleft;\n        }\n\n        bool at_start (\n        ) const\n        {\n            point temp = bleft.tl_corner();\n            temp.x() -=1;\n            return temp == p;\n        }\n\n        bool current_element_valid(\n        ) const\n        {\n            return rect.contains(p);\n        }\n\n        bool move_next()\n        {\n            if (mode == atleft)\n            {\n                if (advance_point(bleft, p))\n                    return true;\n                    \n                mode = attop;\n                p = btop.tl_corner();\n                p.x() -= 1;\n            }\n            if (mode == attop)\n            {\n                if (advance_point(btop, p))\n                    return true;\n                    \n                mode = atright;\n                p = bright.tl_corner();\n                p.x() -= 1;\n            }\n            if (mode == atright)\n            {\n                if (advance_point(bright, p))\n                    return true;\n                    \n                mode = atbottom;\n                p = bbottom.tl_corner();\n                p.x() -= 1;\n            }\n\n            if (advance_point(bbottom, p))\n                return true;\n\n            // put p outside rect since there are no more points to enumerate\n            p = rect.br_corner();\n            p.x() += 1;\n                    \n            return false;\n        }\n\n        unsigned long size (\n        ) const\n        {\n            return rect.area() - inner_rect.area();\n        }\n\n        const point& element (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_element_valid(),\n                \"\\t point border_enumerator::element()\"\n                << \"\\n\\t This function can't be called unless the element is valid.\"\n                << \"\\n\\t this: \" << this\n                );\n\n            return p;\n        }\n\n    private:\n\n        bool advance_point (\n            const rectangle& r,\n            point& p\n        ) const\n        {\n            p.x() += 1;\n            if (p.x() > r.right())\n            {\n                p.x() = r.left();\n                p.y() += 1;\n            }\n\n            return r.contains(p);\n        }\n\n        point p;\n        rectangle rect;\n        rectangle inner_rect;  // the non-border regions of rect\n\n        enum emode\n        {\n            atleft,\n            atright,\n            atbottom,\n            attop\n        };\n\n        emode mode;\n\n        rectangle btop, bleft, bright, bbottom;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BORDER_EnUMERATOR_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/geometry/border_enumerator_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BORDER_EnUMERATOR_ABSTRACT_H_\n#ifdef DLIB_BORDER_EnUMERATOR_ABSTRACT_H_\n\n#include \"rectangle_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class border_enumerator\n    {\n        /*!\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                All operations on this object other than calling element() invalidate\n                pointers and references to internal data.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is an enumerator over the border points of a rectangle.\n        !*/\n    public:\n\n        border_enumerator(\n        ); \n        /*!\n            ensures\n                - #move_next() == false\n                  (i.e. this object is \"empty\" and won't enumerate anything)\n                - current_element_valid() == false \n                - at_start() == true\n                - size() == 0\n        !*/\n\n        border_enumerator(\n            const rectangle& rect,\n            unsigned long border_size\n        );\n        /*!\n            ensures\n                - This object will enumerate over the border points which are inside rect\n                  but within border_size of the edge.  For example, if border_size == 1\n                  then it enumerates over the single point wide strip of points all around\n                  the interior edge of rect.\n                - current_element_valid() == false \n                - at_start() == true\n                - size() == rect.area() - shrink_rect(rect,border_size).area()\n                  (i.e. the number of points in the border area of rect)\n        !*/\n\n        border_enumerator(\n            const rectangle& rect,\n            const rectangle& non_border_region\n        );\n        /*!\n            ensures\n                - This object will enumerate over all points which are in rect but\n                  not in non_border_region.  \n                - current_element_valid() == false \n                - at_start() == true\n                - size() == rect.area() - rect.intersect(non_border_region).area() \n        !*/\n\n        bool at_start (\n        ) const;\n        /*!\n            ensures\n                - returns true if *this represents one position before the first point \n                  (this would also make the current element invalid) else returns false                \n        !*/\n\n        void reset (\n        ); \n        /*!\n            ensures\n                - #current_element_valid() == false \n                - #at_start() == true\n        !*/\n\n        bool current_element_valid(\n        ) const;\n        /*!\n            ensures\n                - returns true if we are currently at a valid element else\n                  returns false \n        !*/\n\n        bool move_next(\n        );\n        /*!\n            ensures\n                - moves to the next element.  i.e. #element() will now \n                  return the next border point. \n                - the return value will be equal to #current_element_valid() \n                - #at_start() == false \n\n                - returns true if there is another element \n                - returns false if there are no more elements in the container\n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of border points\n        !*/\n\n        const point& element (\n        ) const;\n        /*!\n            requires\n                - current_element_valid() == true\n            ensures\n                - returns the current border point\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BORDER_EnUMERATOR_ABSTRACT_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/geometry/point_transforms.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_POINT_TrANSFORMS_H_\n#define DLIB_POINT_TrANSFORMS_H_\n\n#include \"point_transforms_abstract.h\"\n#include \"../algs.h\"\n#include \"vector.h\"\n#include \"../matrix.h\"\n#include \"../matrix/matrix_la.h\"\n#include \"../optimization/optimization.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class point_rotator\n    {\n    public:\n        point_rotator (\n        )\n        {\n            sin_angle = 0;\n            cos_angle = 1;\n        }\n\n        point_rotator (\n            const double& angle\n        )\n        {\n            sin_angle = std::sin(angle);\n            cos_angle = std::cos(angle);\n        }\n\n        template <typename T>\n        const dlib::vector<T,2> operator() (\n            const dlib::vector<T,2>& p\n        ) const\n        {\n            double x = cos_angle*p.x() - sin_angle*p.y();\n            double y = sin_angle*p.x() + cos_angle*p.y();\n\n            return dlib::vector<double,2>(x,y);\n        }\n\n        const matrix<double,2,2> get_m(\n        ) const \n        { \n            matrix<double,2,2> temp;\n            temp = cos_angle, -sin_angle,\n                   sin_angle, cos_angle;\n            return temp; \n        }\n\n        inline friend void serialize (const point_rotator& item, std::ostream& out)\n        {\n            serialize(item.sin_angle, out);\n            serialize(item.cos_angle, out);\n        }\n\n        inline friend void deserialize (point_rotator& item, std::istream& in)\n        {\n            deserialize(item.sin_angle, in);\n            deserialize(item.cos_angle, in);\n        }\n\n    private:\n        double sin_angle;\n        double cos_angle;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class point_transform\n    {\n    public:\n\n        point_transform (\n        )\n        {\n            sin_angle = 0;\n            cos_angle = 1;\n            translate.x() = 0;\n            translate.y() = 0;\n        }\n\n        point_transform (\n            const double& angle,\n            const dlib::vector<double,2>& translate_\n        )\n        {\n            sin_angle = std::sin(angle);\n            cos_angle = std::cos(angle);\n            translate = translate_;\n        }\n\n        template <typename T>\n        const dlib::vector<T,2> operator() (\n            const dlib::vector<T,2>& p\n        ) const\n        {\n            double x = cos_angle*p.x() - sin_angle*p.y();\n            double y = sin_angle*p.x() + cos_angle*p.y();\n\n            return dlib::vector<double,2>(x,y) + translate;\n        }\n\n        const matrix<double,2,2> get_m(\n        ) const \n        { \n            matrix<double,2,2> temp;\n            temp = cos_angle, -sin_angle,\n                   sin_angle, cos_angle;\n            return temp; \n        }\n\n        const dlib::vector<double,2> get_b(\n        ) const { return translate; }\n\n        inline friend void serialize (const point_transform& item, std::ostream& out)\n        {\n            serialize(item.sin_angle, out);\n            serialize(item.cos_angle, out);\n            serialize(item.translate, out);\n        }\n\n        inline friend void deserialize (point_transform& item, std::istream& in)\n        {\n            deserialize(item.sin_angle, in);\n            deserialize(item.cos_angle, in);\n            deserialize(item.translate, in);\n        }\n\n    private:\n        double sin_angle;\n        double cos_angle;\n        dlib::vector<double,2> translate;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class point_transform_affine\n    {\n    public:\n\n        point_transform_affine (\n        )\n        {\n            m = identity_matrix<double>(2);\n            b.x() = 0;\n            b.y() = 0;\n        }\n\n        point_transform_affine (\n            const matrix<double,2,2>& m_,\n            const dlib::vector<double,2>& b_\n        ) :m(m_), b(b_)\n        {\n        }\n\n        const dlib::vector<double,2> operator() (\n            const dlib::vector<double,2>& p\n        ) const\n        {\n            return m*p + b;\n        }\n\n        const matrix<double,2,2>& get_m(\n        ) const { return m; }\n\n        const dlib::vector<double,2>& get_b(\n        ) const { return b; }\n\n        inline friend void serialize (const point_transform_affine& item, std::ostream& out)\n        {\n            serialize(item.m, out);\n            serialize(item.b, out);\n        }\n\n        inline friend void deserialize (point_transform_affine& item, std::istream& in)\n        {\n            deserialize(item.m, in);\n            deserialize(item.b, in);\n        }\n\n    private:\n        matrix<double,2,2> m;\n        dlib::vector<double,2> b;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline point_transform_affine inv (\n        const point_transform_affine& trans\n    )\n    {\n        matrix<double,2,2> im = inv(trans.get_m());\n        return point_transform_affine(im, -im*trans.get_b());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    point_transform_affine find_affine_transform (\n        const std::vector<dlib::vector<T,2> >& from_points,\n        const std::vector<dlib::vector<T,2> >& to_points\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(from_points.size() == to_points.size() &&\n                    from_points.size() >= 3,\n            \"\\t point_transform_affine find_affine_transform(from_points, to_points)\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t from_points.size(): \" << from_points.size()\n            << \"\\n\\t to_points.size():   \" << to_points.size()\n            );\n\n        matrix<double,3,0> P(3, from_points.size());\n        matrix<double,2,0> Q(2, from_points.size());\n\n        for (unsigned long i = 0; i < from_points.size(); ++i)\n        {\n            P(0,i) = from_points[i].x();\n            P(1,i) = from_points[i].y();\n            P(2,i) = 1;\n\n            Q(0,i) = to_points[i].x();\n            Q(1,i) = to_points[i].y();\n        }\n\n        const matrix<double,2,3> m = Q*pinv(P);\n        return point_transform_affine(subm(m,0,0,2,2), colm(m,2));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    point_transform_affine find_similarity_transform (\n        const std::vector<dlib::vector<T,2> >& from_points,\n        const std::vector<dlib::vector<T,2> >& to_points\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(from_points.size() == to_points.size() &&\n                    from_points.size() >= 2,\n            \"\\t point_transform_affine find_similarity_transform(from_points, to_points)\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t from_points.size(): \" << from_points.size()\n            << \"\\n\\t to_points.size():   \" << to_points.size()\n            );\n\n        // We use the formulas from the paper: Least-squares estimation of transformation\n        // parameters between two point patterns by Umeyama.  They are equations 34 through\n        // 42.\n\n        dlib::vector<double,2> mean_from, mean_to;\n        double sigma_from = 0, sigma_to = 0;\n        matrix<double,2,2> cov;\n        cov = 0;\n\n        for (unsigned long i = 0; i < from_points.size(); ++i)\n        {\n            mean_from += from_points[i];\n            mean_to += to_points[i];\n        }\n        mean_from /= from_points.size();\n        mean_to   /= from_points.size();\n\n        for (unsigned long i = 0; i < from_points.size(); ++i)\n        {\n            sigma_from += length_squared(from_points[i] - mean_from);\n            sigma_to += length_squared(to_points[i] - mean_to);\n            cov += (to_points[i] - mean_to)*trans(from_points[i] - mean_from);\n        }\n\n        sigma_from /= from_points.size();\n        sigma_to   /= from_points.size();\n        cov        /= from_points.size();\n\n        matrix<double,2,2> u, v, s, d;\n        svd(cov, u,d,v);\n        s = identity_matrix(cov);\n        if (det(cov) < 0)\n        {\n            if (d(1,1) < d(0,0))\n                s(1,1) = -1;\n            else\n                s(0,0) = -1;\n        }\n\n        matrix<double,2,2> r = u*s*trans(v);\n        double c = 1; \n        if (sigma_from != 0)\n            c = 1.0/sigma_from * trace(d*s);\n        vector<double,2> t = mean_to - c*r*mean_from;\n\n        return point_transform_affine(c*r, t);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class point_transform_projective\n    {\n    public:\n\n        point_transform_projective (\n        )\n        {\n            m = identity_matrix<double>(3);\n        }\n\n        point_transform_projective (\n            const matrix<double,3,3>& m_\n        ) :m(m_)\n        {\n        }\n        \n        point_transform_projective (\n            const point_transform_affine& tran\n        ) \n        {\n            set_subm(m, 0,0, 2,2) = tran.get_m();\n            set_subm(m, 0,2, 2,1) = tran.get_b();\n            m(2,0) = 0;\n            m(2,1) = 0;\n            m(2,2) = 1;\n        }\n        \n\n        const dlib::vector<double,2> operator() (\n            const dlib::vector<double,2>& p\n        ) const\n        {\n            dlib::vector<double,3> temp(p);\n            temp.z() = 1;\n            temp = m*temp;\n            if (temp.z() != 0)\n                temp = temp/temp.z();\n            return temp;\n        }\n\n        const matrix<double,3,3>& get_m(\n        ) const { return m; }\n\n        inline friend void serialize (const point_transform_projective& item, std::ostream& out)\n        {\n            serialize(item.m, out);\n        }\n\n        inline friend void deserialize (point_transform_projective& item, std::istream& in)\n        {\n            deserialize(item.m, in);\n        }\n\n    private:\n        matrix<double,3,3> m;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline point_transform_projective inv (\n        const point_transform_projective& trans\n    )\n    {\n        return point_transform_projective(inv(trans.get_m()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl_proj\n    {\n\n        inline point_transform_projective find_projective_transform_basic (\n            const std::vector<dlib::vector<double,2> >& from_points,\n            const std::vector<dlib::vector<double,2> >& to_points\n        )\n        /*!\n            ensures\n                - Uses the system of equations approach to finding a projective transform.\n                  This is \"Method 3\" from Estimating Projective Transformation Matrix by\n                  Zhengyou Zhang. \n                - It should be emphasized that the find_projective_transform_basic()\n                  routine, which uses the most popular method for finding projective\n                  transformations, doesn't really work well when the minimum error solution\n                  doesn't have zero error.  In this case, it can deviate by a large amount\n                  from the proper minimum mean squared error transformation.  Therefore,\n                  our overall strategy will be to use the solution from\n                  find_projective_transform_basic() as a starting point for a BFGS based\n                  non-linear optimizer which will optimize the correct mean squared error\n                  criterion.\n        !*/\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(from_points.size() == to_points.size() &&\n                from_points.size() >= 4,\n                \"\\t point_transform_projective find_projective_transform_basic(from_points, to_points)\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n                << \"\\n\\t from_points.size(): \" << from_points.size()\n                << \"\\n\\t to_points.size():   \" << to_points.size()\n            );\n\n            matrix<double,9,9> accum, u, v;\n            matrix<double,9,1> w;\n            matrix<double,2,9> B;\n            accum = 0;\n            B = 0;\n            for (unsigned long i = 0; i < from_points.size(); ++i)\n            {\n                dlib::vector<double,3> f = from_points[i];\n                f.z() = 1;\n                dlib::vector<double,3> t = to_points[i];\n                t.z() = 1;\n\n                set_subm(B,0,0,1,3) = t.y()*trans(f);\n                set_subm(B,1,0,1,3) =       trans(f);\n\n                set_subm(B,0,3,1,3) = -t.x()*trans(f);\n                set_subm(B,1,6,1,3) = -t.x()*trans(f);\n\n                accum += trans(B)*B;\n            }\n\n            svd2(true, false, accum, u, w, v);\n            long j = index_of_min(w);\n\n            return point_transform_projective(reshape(colm(u,j),3,3)); \n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        struct obj\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This is the objective function we really want to minimize when looking\n                    for a transformation matrix.  That is, we would like the transformed\n                    points to be as close as possible to their \"to\" points.  Here,\n                    closeness is measured using Euclidean distance.\n\n            !*/\n            obj(\n                const std::vector<dlib::vector<double,2> >& from_points_,\n                const std::vector<dlib::vector<double,2> >& to_points_\n            ) : \n                from_points(from_points_) ,\n                to_points(to_points_)\n            {}\n            const std::vector<dlib::vector<double,2> >& from_points;\n            const std::vector<dlib::vector<double,2> >& to_points;\n\n            double operator() (\n                const matrix<double,9,1>& p\n            ) const\n            {\n                point_transform_projective tran(reshape(p,3,3));\n\n                double sum = 0;\n                for (unsigned long i = 0; i < from_points.size(); ++i)\n                {\n                    sum += length_squared(tran(from_points[i]) - to_points[i]);\n                }\n                return sum;\n            }\n        };\n\n        struct obj_der\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This is the derivative of obj.\n            !*/\n\n            obj_der(\n                const std::vector<dlib::vector<double,2> >& from_points_,\n                const std::vector<dlib::vector<double,2> >& to_points_\n            ) : \n                from_points(from_points_) ,\n                to_points(to_points_)\n            {}\n            const std::vector<dlib::vector<double,2> >& from_points;\n            const std::vector<dlib::vector<double,2> >& to_points;\n\n            matrix<double,9,1> operator() (\n                const matrix<double,9,1>& p\n            ) const\n            {\n                const matrix<double,3,3> H = reshape(p,3,3);\n\n                matrix<double,3,3> grad;\n                grad = 0;\n                for (unsigned long i = 0; i < from_points.size(); ++i)\n                {\n                    dlib::vector<double,3> from, to;\n                    from = from_points[i];\n                    from.z() = 1;\n                    to = to_points[i];\n                    to.z() = 1;\n\n                    matrix<double,3,1> w = H*from;\n                    const double scale = (w(2) != 0) ? (1.0/w(2)) : (1);\n                    w *= scale;\n                    matrix<double,3,1> residual = (w-to)*2*scale;\n\n                    grad(0,0) += from.x()*residual(0);\n                    grad(0,1) += from.y()*residual(0);\n                    grad(0,2) +=          residual(0);\n\n                    grad(1,0) += from.x()*residual(1);\n                    grad(1,1) += from.y()*residual(1);\n                    grad(1,2) +=          residual(1);\n\n                    grad(2,0) += -(from.x()*w(0)*residual(0) + from.x()*w(1)*residual(1));\n                    grad(2,1) += -(from.y()*w(0)*residual(0) + from.y()*w(1)*residual(1));\n                    grad(2,2) += -(         w(0)*residual(0) +          w(1)*residual(1));\n\n                }\n                return reshape_to_column_vector(grad);\n            }\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline point_transform_projective find_projective_transform (\n        const std::vector<dlib::vector<double,2> >& from_points,\n        const std::vector<dlib::vector<double,2> >& to_points\n    )\n    {\n        using namespace impl_proj;\n        // make sure requires clause is not broken\n        DLIB_ASSERT(from_points.size() == to_points.size() &&\n                    from_points.size() >= 4,\n            \"\\t point_transform_projective find_projective_transform(from_points, to_points)\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t from_points.size(): \" << from_points.size()\n            << \"\\n\\t to_points.size():   \" << to_points.size()\n            );\n\n\n        // Find a candidate projective transformation.  Also, find the best affine\n        // transform and then compare it with the projective transform estimated using the\n        // direct SVD method.  Use whichever one works better as the starting point for a\n        // BFGS based optimizer.  If the best solution has large mean squared error and is\n        // also close to affine then find_projective_transform_basic() might give a very\n        // bad initial guess.  So also checking for a good affine transformation can\n        // produce a much better final result in many cases.\n        point_transform_projective tran1 = find_projective_transform_basic(from_points, to_points);\n        point_transform_affine tran2 = find_affine_transform(from_points, to_points);\n\n        // check which is best\n        double error1 = 0;\n        double error2 = 0;\n        for (unsigned long i = 0; i < from_points.size(); ++i)\n        {\n            error1 += length_squared(tran1(from_points[i])-to_points[i]);\n            error2 += length_squared(tran2(from_points[i])-to_points[i]);\n        }\n        matrix<double,9,1> params; \n        // Pick the minimum error solution among the two so far.\n        if (error1 < error2)\n            params = reshape_to_column_vector(tran1.get_m());\n        else\n            params = reshape_to_column_vector(point_transform_projective(tran2).get_m());\n\n\n        // Now refine the transformation matrix so that we can be sure we have\n        // at least a local minimizer.\n        obj o(from_points, to_points);\n        obj_der der(from_points, to_points);\n        find_min(bfgs_search_strategy(),\n                objective_delta_stop_strategy(1e-6,100),\n                o,\n                der,\n                params,\n                0);\n\n        return point_transform_projective(reshape(params,3,3)); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    const dlib::vector<T,2> rotate_point (\n        const dlib::vector<T,2>& center,\n        const dlib::vector<T,2>& p,\n        double angle\n    )\n    {\n        point_rotator rot(angle);\n        return rot(p-center)+center;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline matrix<double,2,2> rotation_matrix (\n         double angle\n    )\n    {\n        const double ca = std::cos(angle);\n        const double sa = std::sin(angle);\n\n        matrix<double,2,2> m;\n        m = ca, -sa,\n            sa, ca;\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_POINT_TrANSFORMS_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/geometry/point_transforms_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_POINT_TrANSFORMS_ABSTRACT_Hh_\n#ifdef DLIB_POINT_TrANSFORMS_ABSTRACT_Hh_\n\n#include \"../matrix/matrix_abstract.h\"\n#include \"vector_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class point_transform_affine\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an object that takes 2D points or vectors and \n                applies an affine transformation to them.\n        !*/\n    public:\n\n        point_transform_affine (\n        );\n        /*!\n            ensures\n                - This object will perform the identity transform.  That is, given a point\n                  as input it will return the same point as output.\n        !*/\n\n        point_transform_affine (\n            const matrix<double,2,2>& m,\n            const dlib::vector<double,2>& b\n        );\n        /*!\n            ensures\n                - #get_m() == m\n                - #get_b() == b\n                - When (*this)(p) is invoked it will return a point P such that:\n                    - P == m*p + b\n        !*/\n\n        const dlib::vector<double,2> operator() (\n            const dlib::vector<double,2>& p\n        ) const;\n        /*!\n            ensures\n                - applies the affine transformation defined by this object's constructor\n                  to p and returns the result.\n        !*/\n\n        const matrix<double,2,2>& get_m(\n        ) const;\n        /*!\n            ensures\n                - returns the transformation matrix used by this object.\n        !*/\n\n        const dlib::vector<double,2>& get_b(\n        ) const;\n        /*!\n            ensures\n                - returns the offset vector used by this object.\n        !*/\n\n    };\n\n    void serialize   (const point_transform_affine& item, std::ostream& out);\n    void deserialize (point_transform_affine& item, std::istream& in);\n    /*!\n        provides serialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    point_transform_affine inv (\n        const point_transform_affine& trans\n    );\n    /*!\n        ensures\n            - If trans is an invertible transformation then this function returns a new\n              transformation that is the inverse of trans. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    point_transform_affine find_affine_transform (\n        const std::vector<dlib::vector<T,2> >& from_points,\n        const std::vector<dlib::vector<T,2> >& to_points\n    );\n    /*!\n        requires\n            - from_points.size() == to_points.size()\n            - from_points.size() >= 3\n        ensures\n            - returns a point_transform_affine object, T, such that for all valid i:\n                length(T(from_points[i]) - to_points[i])\n              is minimized as often as possible.  That is, this function finds the affine\n              transform that maps points in from_points to points in to_points.  If no\n              affine transform exists which performs this mapping exactly then the one\n              which minimizes the mean squared error is selected.  Additionally, if many\n              equally good transformations exist, then the transformation with the smallest\n              squared parameters is selected (i.e. if you wrote the transformation as a\n              matrix then we say we select the transform with minimum Frobenius norm among\n              all possible solutions).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    point_transform_affine find_similarity_transform (\n        const std::vector<dlib::vector<T,2> >& from_points,\n        const std::vector<dlib::vector<T,2> >& to_points\n    );\n    /*!\n        requires\n            - from_points.size() == to_points.size()\n            - from_points.size() >= 2\n        ensures\n            - This function is just like find_affine_transform() except it finds the best\n              similarity transform instead of a full affine transform.  This means that it\n              optimizes over only the space of rotations, scale changes, and translations.\n              So for example, if you mapped the 3 vertices of a triangle through a\n              similarity transform then the output would still be the same triangle.\n              However, the triangle itself may be larger or smaller, rotated, or at a\n              different location in the coordinate system.  This is not the case for a\n              general affine transform which can stretch points in ways that cause, for\n              example, an equilateral triangle to turn into an isosceles triangle.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class point_transform_projective\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an object that takes 2D points or vectors and \n                applies a projective transformation to them.\n        !*/\n\n    public:\n\n        point_transform_projective (\n        );\n        /*!\n            ensures\n                - This object will perform the identity transform.  That is, given a point\n                  as input it will return the same point as output.\n        !*/\n\n        point_transform_projective (\n            const matrix<double,3,3>& m\n        );\n        /*!\n            ensures\n                - #get_m() == m\n        !*/\n\n        point_transform_projective (\n            const point_transform_affine& tran\n        );\n        /*!\n            ensures\n                - This object will perform exactly the same transformation as the given\n                  affine transform.\n        !*/\n\n        const dlib::vector<double,2> operator() (\n            const dlib::vector<double,2>& p\n        ) const;\n        /*!\n            ensures\n                - Applies the projective transformation defined by this object's constructor\n                  to p and returns the result.  To define this precisely:\n                    - let p_h == the point p in homogeneous coordinates.  That is:\n                        - p_h.x() == p.x()\n                        - p_h.y() == p.y()\n                        - p_h.z() == 1 \n                    - let x == get_m()*p_h \n                    - Then this function returns the value x/x.z()\n        !*/\n\n        const matrix<double,3,3>& get_m(\n        ) const;\n        /*!\n            ensures\n                - returns the transformation matrix used by this object.\n        !*/\n\n    };\n\n    void serialize   (const point_transform_projective& item, std::ostream& out);\n    void deserialize (point_transform_projective& item, std::istream& in);\n    /*!\n        provides serialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    point_transform_projective inv (\n        const point_transform_projective& trans\n    );\n    /*!\n        ensures\n            - If trans is an invertible transformation then this function returns a new\n              transformation that is the inverse of trans. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    point_transform_projective find_projective_transform (\n        const std::vector<dlib::vector<double,2> >& from_points,\n        const std::vector<dlib::vector<double,2> >& to_points\n    );\n    /*!\n        requires\n            - from_points.size() == to_points.size()\n            - from_points.size() >= 4\n        ensures\n            - returns a point_transform_projective object, T, such that for all valid i:\n                length(T(from_points[i]) - to_points[i])\n              is minimized as often as possible.  That is, this function finds the projective\n              transform that maps points in from_points to points in to_points.  If no\n              projective transform exists which performs this mapping exactly then the one\n              which minimizes the mean squared error is selected. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class point_transform\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an object that takes 2D points or vectors and \n                rotates them around the origin by a given angle and then\n                translates them.\n        !*/\n    public:\n\n        point_transform (\n        );\n        /*!\n            ensures\n                - This object will perform the identity transform.  That is, given a point\n                  as input it will return the same point as output.\n        !*/\n\n        point_transform (\n            const double& angle,\n            const dlib::vector<double,2>& translate\n        )\n        /*!\n            ensures\n                - When (*this)(p) is invoked it will return a point P such that:\n                    - P is the point p rotated counter-clockwise around the origin \n                      angle radians and then shifted by having translate added to it.\n                      (Note that this is counter clockwise with respect to the normal\n                      coordinate system with positive y going up and positive x going\n                      to the right)\n        !*/\n\n        template <typename T>\n        const dlib::vector<T,2> operator() (\n            const dlib::vector<T,2>& p\n        ) const;\n        /*!\n            ensures\n                - rotates p, then translates it and returns the result.  The output\n                  of this function is therefore equal to get_m()*p + get_b().\n        !*/\n\n        const matrix<double,2,2> get_m(\n        ) const;\n        /*!\n            ensures\n                - returns the transformation matrix used by this object.\n        !*/\n\n        const dlib::vector<double,2> get_b(\n        ) const;\n        /*!\n            ensures\n                - returns the offset vector used by this object.\n        !*/\n\n    };\n\n    void serialize   (const point_transform& item, std::ostream& out);\n    void deserialize (point_transform& item, std::istream& in);\n    /*!\n        provides serialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class point_rotator\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an object that takes 2D points or vectors and \n                rotates them around the origin by a given angle.\n        !*/\n    public:\n\n        point_rotator (\n        );\n        /*!\n            ensures\n                - This object will perform the identity transform.  That is, given a point\n                  as input it will return the same point as output.\n        !*/\n\n        point_rotator (\n            const double& angle\n        );\n        /*!\n            ensures\n                - When (*this)(p) is invoked it will return a point P such that:\n                    - P is the point p rotated counter-clockwise around the origin \n                      angle radians.\n                      (Note that this is counter clockwise with respect to the normal\n                      coordinate system with positive y going up and positive x going\n                      to the right)\n        !*/\n\n        template <typename T>\n        const dlib::vector<T,2> operator() (\n            const dlib::vector<T,2>& p\n        ) const;\n        /*!\n            ensures\n                - rotates p and returns the result. The output of this function is\n                  therefore equal to get_m()*p.\n        !*/\n\n        const matrix<double,2,2> get_m(\n        ) const;\n        /*!\n            ensures\n                - returns the transformation matrix used by this object.\n        !*/\n    };\n\n    void serialize   (const point_rotator& item, std::ostream& out);\n    void deserialize (point_rotator& item, std::istream& in);\n    /*!\n        provides serialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    const dlib::vector<T,2> rotate_point (\n        const dlib::vector<T,2> center,\n        const dlib::vector<T,2> p,\n        double angle\n    );\n    /*!\n        ensures\n            - returns a point P such that:\n                - P is the point p rotated counter-clockwise around the given\n                  center point by angle radians.\n                  (Note that this is counter clockwise with respect to the normal\n                  coordinate system with positive y going up and positive x going\n                  to the right)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    matrix<double,2,2> rotation_matrix (\n         double angle\n    );\n    /*!\n        ensures\n            - returns a rotation matrix which rotates points around the origin in a\n              counter-clockwise direction by angle radians.\n              (Note that this is counter clockwise with respect to the normal\n              coordinate system with positive y going up and positive x going\n              to the right)\n              Or in other words, this function returns a matrix M such that, given a\n              point P, M*P gives a point which is P rotated by angle radians around\n              the origin in a counter-clockwise direction.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_POINT_TrANSFORMS_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/geometry/rectangle.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RECTANGLe_\n#define DLIB_RECTANGLe_\n\n#include \"rectangle_abstract.h\"\n#include \"../algs.h\"\n#include <algorithm>\n#include <iostream>\n#include \"../serialize.h\"\n#include \"vector.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n    \n    class rectangle\n    {\n        /*!\n            INITIAL VALUE\n                The initial value of this object is defined by its constructor.\n\n            CONVENTION\n                left() == l\n                top() == t\n                right() == r\n                bottom() == b\n        !*/\n\n    public:\n\n        rectangle (\n            long l_,\n            long t_,\n            long r_,\n            long b_\n        ) :\n            l(l_),\n            t(t_),\n            r(r_),\n            b(b_)\n        {}\n\n        rectangle (\n            unsigned long w,\n            unsigned long h\n        ) :\n            l(0),\n            t(0),\n            r(static_cast<long>(w)-1),\n            b(static_cast<long>(h)-1)\n        {\n            DLIB_ASSERT((w > 0 && h > 0) || (w == 0 && h == 0),\n                \"\\trectangle(width,height)\"\n                << \"\\n\\twidth and height must be > 0 or both == 0\"\n                << \"\\n\\twidth:  \" << w \n                << \"\\n\\theight: \" << h \n                << \"\\n\\tthis: \" << this\n                );\n        }\n\n        rectangle (\n            const point& p\n        ) :\n            l(p.x()),\n            t(p.y()),\n            r(p.x()),\n            b(p.y())\n        {\n        }\n\n        rectangle (\n            const point& p1,\n            const point& p2\n        )\n        {\n            *this = rectangle(p1) + rectangle(p2);\n        }\n\n        template <typename T>\n        rectangle (\n            const vector<T,2>& p1,\n            const vector<T,2>& p2\n        )\n        {\n            *this = rectangle(p1) + rectangle(p2);\n        }\n\n        rectangle (\n        ) :\n            l(0),\n            t(0),\n            r(-1),\n            b(-1)\n        {}\n\n        long top (\n        ) const { return t; }\n\n        long& top (\n        ) { return t; }\n\n        void set_top (\n            long top_\n        ) { t = top_; }\n\n        long left (\n        ) const { return l; }\n\n        long& left (\n        ) { return l; }\n\n        void set_left (\n            long left_\n        ) { l = left_; }\n\n        long right (\n        ) const { return r; }\n\n        long& right (\n        ) { return r; }\n\n        void set_right (\n            long right_\n        ) { r = right_; }\n\n        long bottom (\n        ) const { return b; }\n\n        long& bottom (\n        ) { return b; }\n\n        void set_bottom (\n            long bottom_\n        ) { b = bottom_; }\n\n        const point tl_corner (\n        ) const { return point(left(), top()); }\n\n        const point bl_corner (\n        ) const { return point(left(), bottom()); } \n\n        const point tr_corner (\n        ) const { return point(right(), top()); }\n\n        const point br_corner (\n        ) const { return point(right(), bottom()); }\n       \n        unsigned long width (\n        ) const \n        { \n            if (is_empty())\n                return 0;\n            else\n                return r - l + 1; \n        }\n\n        unsigned long height (\n        ) const \n        { \n            if (is_empty())\n                return 0;\n            else\n                return b - t + 1; \n        }\n\n        unsigned long area (\n        ) const\n        {\n            return width()*height();\n        }\n\n        bool is_empty (\n        ) const { return (t > b || l > r); }\n\n        rectangle operator + (\n            const rectangle& rhs\n        ) const\n        {\n            if (rhs.is_empty())\n                return *this;\n            else if (is_empty())\n                return rhs;\n\n            return rectangle (\n                std::min(l,rhs.l),\n                std::min(t,rhs.t),\n                std::max(r,rhs.r),\n                std::max(b,rhs.b)\n                );\n        }\n\n        rectangle intersect (\n            const rectangle& rhs\n        ) const\n        {\n            return rectangle (\n                std::max(l,rhs.l),\n                std::max(t,rhs.t),\n                std::min(r,rhs.r),\n                std::min(b,rhs.b)\n                );\n        }\n\n        bool contains (\n            const point& p\n        ) const\n        {\n            if (p.x() < l || p.x() > r || p.y() < t || p.y() > b)\n                return false;\n            return true;\n        }\n\n        bool contains (\n            long x,\n            long y\n        ) const\n        {\n            if (x < l || x > r || y < t || y > b)\n                return false;\n            return true;\n        }\n\n        bool contains (\n            const rectangle& rect\n        ) const\n        {\n            return (rect + *this == *this);\n        }\n\n        rectangle& operator+= (\n            const point& p \n        )\n        {\n            *this = *this + rectangle(p);\n            return *this;\n        }\n\n        rectangle& operator+= (\n            const rectangle& rect\n        )\n        {\n            *this = *this + rect;\n            return *this;\n        }\n\n        bool operator== (\n            const rectangle& rect \n        ) const \n        {\n            return (l == rect.l) && (t == rect.t) && (r == rect.r) && (b == rect.b);\n        }\n\n        bool operator!= (\n            const rectangle& rect \n        ) const \n        {\n            return !(*this == rect);\n        }\n\n    private:\n        long l;\n        long t;\n        long r;\n        long b;   \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const rectangle& item, \n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.left(),out); \n            serialize(item.top(),out); \n            serialize(item.right(),out); \n            serialize(item.bottom(),out); \n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing an object of type rectangle\");\n        }\n    }\n\n    inline void deserialize (\n        rectangle& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            deserialize(item.left(),in); \n            deserialize(item.top(),in); \n            deserialize(item.right(),in); \n            deserialize(item.bottom(),in); \n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing an object of type rectangle\");\n        }\n    }\n\n    inline std::ostream& operator<< (\n        std::ostream& out, \n        const rectangle& item \n    )   \n    {\n        out << \"[(\" << item.left() << \", \" << item.top() << \") (\" << item.right() << \", \" << item.bottom() << \")]\";\n        return out;\n    }\n\n    inline std::istream& operator>>(\n        std::istream& in, \n        rectangle& item \n    )\n    {\n        // ignore any whitespace\n        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == '\\r' || in.peek() == '\\n')\n            in.get();\n        // now eat the leading '[' character\n        if (in.get() != '[')\n        {\n            in.setstate(in.rdstate() | std::ios::failbit);\n            return in;\n        }\n\n        point p1, p2;\n        in >> p1;\n        in >> p2;\n        item = rectangle(p1) + rectangle(p2);\n\n        // ignore any whitespace\n        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == '\\r' || in.peek() == '\\n')\n            in.get();\n        // now eat the trailing ']' character\n        if (in.get() != ']')\n        {\n            in.setstate(in.rdstate() | std::ios::failbit);\n        }\n        return in;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle centered_rect (\n        long x,\n        long y,\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        rectangle result;\n        result.set_left ( x - static_cast<long>(width) / 2 );\n        result.set_top ( y - static_cast<long>(height) / 2 );\n        result.set_right ( result.left() + width - 1 );\n        result.set_bottom ( result.top() + height - 1 );\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle intersect (\n        const rectangle& a,\n        const rectangle& b\n    ) { return a.intersect(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    inline unsigned long area (\n        const rectangle& a\n    ) { return a.area(); }\n\n// ----------------------------------------------------------------------------------------\n\n    inline point center (\n        const dlib::rectangle& rect\n    )\n    {\n        point temp(rect.left() + rect.right() + 1,\n                   rect.top() + rect.bottom() + 1);\n\n        if (temp.x() < 0)\n            temp.x() -= 1;\n\n        if (temp.y() < 0)\n            temp.y() -= 1;\n\n        return temp/2;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline dlib::vector<double,2> dcenter (\n        const dlib::rectangle& rect\n    )\n    {\n        dlib::vector<double,2> temp(rect.left() + rect.right(),\n                                    rect.top() + rect.bottom());\n\n        return temp/2.0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline long distance_to_rect_edge (\n        const rectangle& rect,\n        const point& p\n    )\n    {\n        using std::max;\n        using std::min;\n        using std::abs;\n\n        const long dist_x = min(abs(p.x()-rect.left()), abs(p.x()-rect.right()));\n        const long dist_y = min(abs(p.y()-rect.top()),  abs(p.y()-rect.bottom()));\n\n        if (rect.contains(p))\n            return min(dist_x,dist_y);\n        else if (rect.left() <= p.x() && p.x() <= rect.right())\n            return dist_y;\n        else if (rect.top() <= p.y() && p.y() <= rect.bottom())\n            return dist_x;\n        else\n            return dist_x + dist_y;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const point nearest_point (\n        const rectangle& rect,\n        const point& p\n    )\n    {\n        point temp(p);\n        if (temp.x() < rect.left())\n            temp.x() = rect.left();\n        else if (temp.x() > rect.right())\n            temp.x() = rect.right();\n\n        if (temp.y() < rect.top())\n            temp.y() = rect.top();\n        else if (temp.y() > rect.bottom())\n            temp.y() = rect.bottom();\n\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle centered_rect (\n        const point& p,\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        return centered_rect(p.x(),p.y(),width,height);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle centered_rect (\n        const rectangle& rect,\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        return centered_rect((rect.left()+rect.right())/2,  (rect.top()+rect.bottom())/2, width, height);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle shrink_rect (\n        const rectangle& rect,\n        long num \n    )\n    {\n        return rectangle(rect.left()+num, rect.top()+num, rect.right()-num, rect.bottom()-num);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle grow_rect (\n        const rectangle& rect,\n        long num \n    )\n    {\n        return shrink_rect(rect, -num);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle shrink_rect (\n        const rectangle& rect,\n        long width,\n        long height\n    )\n    {\n        return rectangle(rect.left()+width, rect.top()+height, rect.right()-width, rect.bottom()-height);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle grow_rect (\n        const rectangle& rect,\n        long width,\n        long height\n    )\n    {\n        return shrink_rect(rect, -width, -height);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle translate_rect (\n        const rectangle& rect,\n        const point& p\n    )\n    {\n        rectangle result;\n        result.set_top ( rect.top() + p.y() );\n        result.set_bottom ( rect.bottom() + p.y() );\n        result.set_left ( rect.left() + p.x() );\n        result.set_right ( rect.right() + p.x() );\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle translate_rect (\n        const rectangle& rect,\n        long x,\n        long y\n    )\n    {\n        rectangle result;\n        result.set_top ( rect.top() + y );\n        result.set_bottom ( rect.bottom() + y );\n        result.set_left ( rect.left() + x );\n        result.set_right ( rect.right() + x );\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle resize_rect (\n        const rectangle& rect,\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        return rectangle(rect.left(),rect.top(), \n                         rect.left()+width-1,\n                         rect.top()+height-1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle resize_rect_width (\n        const rectangle& rect,\n        unsigned long width\n    )\n    {\n        return rectangle(rect.left(),rect.top(), \n                         rect.left()+width-1,\n                         rect.bottom());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle resize_rect_height (\n        const rectangle& rect,\n        unsigned long height \n    )\n    {\n        return rectangle(rect.left(),rect.top(), \n                         rect.right(),\n                         rect.top()+height-1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle move_rect (\n        const rectangle& rect,\n        const point& p\n    )\n    {\n        return rectangle(p.x(), p.y(), p.x()+rect.width()-1, p.y()+rect.height()-1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle move_rect (\n        const rectangle& rect,\n        long x,\n        long y \n    )\n    {\n        return rectangle(x, y, x+rect.width()-1, y+rect.height()-1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle set_aspect_ratio (\n        const rectangle& rect,\n        double ratio\n    )\n    {\n        DLIB_ASSERT(ratio > 0,\n            \"\\t rectangle set_aspect_ratio()\"\n            << \"\\n\\t ratio: \" << ratio \n            );\n\n        // aspect ratio is w/h\n\n        // we need to find the rectangle that is nearest to rect in area but\n        // with an aspect ratio of ratio.\n\n        // w/h == ratio\n        // w*h == rect.area()\n\n        if (ratio >= 1)\n        {\n            const long h = static_cast<long>(std::sqrt(rect.area()/ratio) + 0.5);\n            const long w = static_cast<long>(h*ratio + 0.5);\n            return centered_rect(rect, w, h);\n        }\n        else\n        {\n            const long w = static_cast<long>(std::sqrt(rect.area()*ratio) + 0.5);\n            const long h = static_cast<long>(w/ratio + 0.5);\n            return centered_rect(rect, w, h);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T \n        >\n    inline const rectangle get_rect (\n        const T& m\n    )\n    {\n        return rectangle(0, 0, num_columns(m)-1, num_rows(m)-1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle operator+ (\n        const rectangle& r,\n        const point& p\n    )\n    {\n        return r + rectangle(p);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle operator+ (\n        const point& p,\n        const rectangle& r\n    )\n    {\n        return r + rectangle(p);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\nnamespace std\n{\n    /*!\n        Define std::less<rectangle> so that you can use rectangles in the associative containers.\n    !*/\n    template<>\n    struct less<dlib::rectangle> : public binary_function<dlib::rectangle ,dlib::rectangle,bool>\n    {\n        inline bool operator() (const dlib::rectangle& a, const dlib::rectangle& b) const\n        { \n            if      (a.left() < b.left()) return true;\n            else if (a.left() > b.left()) return false;\n            else if (a.top() < b.top()) return true;\n            else if (a.top() > b.top()) return false;\n            else if (a.right() < b.right()) return true;\n            else if (a.right() > b.right()) return false;\n            else if (a.bottom() < b.bottom()) return true;\n            else if (a.bottom() > b.bottom()) return false;\n            else                    return false;\n        }\n    };\n}\n\n#endif // DLIB_RECTANGLe_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/geometry/rectangle_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RECTANGLe_ABSTRACT_\n#ifdef DLIB_RECTANGLe_ABSTRACT_\n\n#include \"vector_abstract.h\"\n#include <iostream>\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    class rectangle\n    {\n        /*!\n            INITIAL VALUE\n                The initial value of this object is defined by its constructor.                \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a rectangular region inside a Cartesian \n                coordinate system.  The region is the rectangle with its top \n                left corner at position (left(),top()) and its bottom right corner \n                at (right(),bottom()).\n\n                Note that the origin of the coordinate system, i.e. (0,0), is located\n                at the upper left corner.  That is, points such as (1,1) or (3,5) \n                represent locations that are below and to the right of the origin.\n\n                Also note that rectangles where top() > bottom() or left() > right() \n                represent empty rectangles.\n        !*/\n\n    public:\n\n        rectangle (\n            const rectangle& rect\n        );\n        /*!\n            ensures\n                - #*this represents the same rectangle as rect\n        !*/\n\n        rectangle (\n        );\n        /*!\n            ensures\n                - #left() == 0\n                - #top() == 0\n                - #right() == -1 \n                - #bottom() == -1 \n                - #is_empty() == true\n        !*/\n\n        rectangle (\n            long left_,\n            long top_,\n            long right_,\n            long bottom_\n        );\n        /*!\n            ensures\n                - #left() == left_\n                - #top() == top_\n                - #right() == right_\n                - #bottom() == bottom_\n        !*/\n\n        rectangle (\n            unsigned long width_,\n            unsigned long height_\n        );\n        /*!\n            requires\n                - (width_ > 0 && height_ > 0) || (width_ == 0 && height_ == 0)\n            ensures\n                - #left() == 0  \n                - #top() == 0\n                - #width() == width_\n                - #height() == height_\n        !*/\n\n        rectangle (\n            const point& p\n        );\n        /*!\n            ensures\n                - #left()   == p.x()\n                - #top()    == p.y()\n                - #right()  == p.x()\n                - #bottom() == p.y()\n        !*/\n\n        template <typename T>\n        rectangle (\n            const vector<T,2>& p1,\n            const vector<T,2>& p2\n        );\n        /*!\n            ensures\n                - #*this == rectangle(p1) + rectangle(p2)\n        !*/\n\n        long left (\n        ) const;\n        /*!\n            ensures\n                - returns the x coordinate for the left side of this rectangle\n        !*/\n\n        long& left (\n        );\n        /*!\n            ensures\n                - returns a non-const reference to the x coordinate for the left side \n                  of this rectangle\n        !*/\n\n        void set_left (\n            long left_\n        );\n        /*!\n            ensures\n                - #left() == left_\n        !*/\n\n        long top (\n        ) const;\n        /*!\n            ensures\n                - returns the y coordinate for the top of this rectangle\n        !*/\n\n        long& top (\n        );\n        /*!\n            ensures\n                - returns a non-const reference to the y coordinate for the \n                  top of this rectangle\n        !*/\n\n        void set_top (\n            long top_\n        );\n        /*!\n            ensures\n                - #top() == top_\n        !*/\n\n        long right (\n        ) const;\n        /*!\n            ensures\n                - returns the x coordinate for the right side of this rectangle\n        !*/\n\n        long& right (\n        );\n        /*!\n            ensures\n                - returns a non-const reference to the x coordinate for the right \n                  side of this rectangle\n        !*/\n\n        void set_right (\n            long right_\n        );\n        /*!\n            ensures\n                - #right() == right_\n        !*/\n\n        long bottom (\n        ) const;\n        /*!\n            ensures\n                - returns the y coordinate for the bottom of this rectangle\n        !*/\n       \n        long& bottom (\n        );\n        /*!\n            ensures\n                - returns a non-const reference to the y coordinate for the bottom \n                  of this rectangle\n        !*/\n       \n        void set_bottom (\n            long bottom_\n        );\n        /*!\n            ensures\n                - #bottom() == bottom_\n        !*/\n\n        const point tl_corner (\n        ) const;\n        /*!\n            ensures\n                - returns point(left(), top()) \n                  (i.e. returns the top left corner point for this rectangle)\n        !*/\n\n        const point bl_corner (\n        ) const;\n        /*!\n            ensures\n                - returns point(left(), bottom()) \n                  (i.e. returns the bottom left corner point for this rectangle)\n        !*/\n\n        const point tr_corner (\n        ) const;\n        /*!\n            ensures\n                - returns point(right(), top()) \n                  (i.e. returns the top right corner point for this rectangle)\n        !*/\n\n        const point br_corner (\n        ) const;\n        /*!\n            ensures\n                - returns point(right(), bottom()) \n                  (i.e. returns the bottom right corner point for this rectangle)\n        !*/\n\n        bool is_empty (\n        ) const;\n        /*!\n            ensures\n                - if (top() > bottom() || left() > right()) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        unsigned long width (\n        ) const;\n        /*!\n            ensures\n                - if (is_empty()) then\n                    - returns 0\n                - else\n                    - returns the width of this rectangle.\n                      (i.e. right() - left() + 1)\n        !*/\n\n        unsigned long height (\n        ) const;\n        /*!\n            ensures\n                - if (is_empty()) then\n                    - returns 0\n                - else\n                    - returns the height of this rectangle.\n                      (i.e. bottom() - top() + 1)\n        !*/\n\n        unsigned long area (\n        ) const;\n        /*!\n            ensures\n                - returns width()*height()\n        !*/\n\n        rectangle operator + (\n            const rectangle& rhs\n        ) const;\n        /*!\n            ensures\n                - if (rhs.is_empty() == false && this->is_empty() == false) then\n                    - returns the smallest rectangle that contains both *this and \n                      rhs.\n                - if (rhs.is_empty() == true && this->is_empty() == false) then\n                    - returns *this\n                - if (rhs.is_empty() == false && this->is_empty() == true) then\n                    - returns rhs\n                - if (rhs.is_empty() == true && this->is_empty() == true) then\n                    - returns a rectangle that has is_empty() == true\n        !*/\n\n        rectangle intersect (\n            const rectangle& rhs\n        ) const;\n        /*!\n            ensures\n                - if (there is a region of intersection between *this and rhs) then\n                    - returns a rectangle that represents the intersection of *this \n                      and rhs.\n                - else\n                    - returns a rectangle where is_empty() == true\n        !*/\n\n        bool contains (\n            long x,\n            long y\n        ) const;\n        /*!\n            ensures\n                - if (the point (x,y) is contained in this rectangle) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool contains (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - if (the point (p.x(),p.y()) is contained in this rectangle) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool contains (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - if (rect + *this == *this) then\n                    - returns true\n                      (i.e. returns true if *this contains the given rectangle)\n                - else\n                    - returns false\n        !*/\n\n        rectangle& operator= (\n            const rectangle& rect\n        );\n        /*!\n            ensures\n                - #*this represents the same rectangle as rect\n                - returns #*this\n        !*/\n\n        rectangle& operator+= (\n            const rectangle& rect\n        );\n        /*!\n            ensures\n                - #*this == *this + rect \n                - returns #*this\n        !*/\n\n        bool operator== (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - if (top() == rect.top() && left() == rect.left() &&\n                      right() == rect.right() && bottom() == rect.bottom()) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool operator!= (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns !(*this == rect)\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const rectangle& item, \n        std::ostream& out\n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        rectangle& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    std::ostream& operator<< (\n        std::ostream& out, \n        const rectangle& item \n    );   \n    /*!\n        ensures\n            - writes item to out in the form \"[(left, top) (right, bottom)]\"\n    !*/\n\n    std::istream& operator>>(\n        std::istream& in, \n        rectangle& item \n    );   \n    /*!\n        ensures\n            - reads a rectangle from the input stream in and stores it in #item.\n              The data in the input stream should be of the form [(left, top) (right, bottom)]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    point center (\n        const dlib::rectangle& rect\n    );\n    /*!\n        ensures\n            - returns the center of the given rectangle\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    dlib::vector<double,2> dcenter (\n        const dlib::rectangle& rect\n    );\n    /*!\n        ensures\n            - returns the center of the given rectangle using a real valued vector.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle centered_rect (\n        const point& p,\n        unsigned long width,\n        unsigned long height\n    );\n    /*!\n        ensures\n            - returns a rectangle R such that:\n                - center(R) == p\n                - if (width == 0 || height == 0)\n                    - R.width() == 0 \n                    - R.height() == 0 \n                - else\n                    - R.width() == width\n                    - R.height() == height \n                - R.tl_corner() == point(p.x()-width/2, p.y()-height/2)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle centered_rect (\n        long x,\n        long y,\n        unsigned long width,\n        unsigned long height\n    );\n    /*!\n        ensures\n            - returns a rectangle R such that:\n                - center(R) == p\n                - if (width == 0 || height == 0)\n                    - R.width() == 0 \n                    - R.height() == 0 \n                - else\n                    - R.width() == width\n                    - R.height() == height \n                - R.tl_corner() == point(x-width/2, y-height/2)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle centered_rect (\n        const rectangle& rect,\n        unsigned long width,\n        unsigned long height\n    );\n    /*!\n        ensures\n            - returns centered_rect( (rect.tl_corner() + rect.br_corner())/2, width, height)\n              (i.e. returns a rectangle centered on rect but with the given width\n              and height)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle set_aspect_ratio (\n        const rectangle& rect,\n        double ratio\n    );\n    /*!\n        requires\n            - ratio > 0\n        ensures\n            - This function reshapes the given rectangle so that it has the given aspect\n              ratio.  In particular, this means we return a rectangle R such that the\n              following equations are as true as possible:\n                - R.width()/R.height() == ratio\n                - R.area() == rect.area()\n                - center(rect) == center(R)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle intersect (\n        const rectangle& a,\n        const rectangle& b\n    );\n    /*!\n        ensures\n            - returns a.intersect(b)\n              (i.e. returns a rectangle representing the intersection of a and b)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline unsigned long area (\n        const rectangle& a\n    );\n    /*!\n        ensures\n            - returns a.area()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle shrink_rect (\n        const rectangle& rect,\n        long num \n    );\n    /*!\n        ensures\n            - returns rectangle(rect.left()+num, rect.top()+num, rect.right()-num, rect.bottom()-num)\n              (i.e. shrinks the given rectangle by shrinking its border by num)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle grow_rect (\n        const rectangle& rect,\n        long num \n    );\n    /*!\n        ensures\n            - return shrink_rect(rect, -num)\n              (i.e. grows the given rectangle by expanding its border by num)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle shrink_rect (\n        const rectangle& rect,\n        long width,\n        long height\n    );\n    /*!\n        ensures\n            - returns rectangle(rect.left()+width, rect.top()+height, rect.right()-width, rect.bottom()-height)\n              (i.e. shrinks the given rectangle by shrinking its left and right borders by width\n              and its top and bottom borders by height. )\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline const rectangle grow_rect (\n        const rectangle& rect,\n        long width,\n        long height\n    );\n    /*!\n        ensures\n            - return shrink_rect(rect, -width, -height)\n              (i.e. grows the given rectangle by expanding its border)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle translate_rect (\n        const rectangle& rect,\n        const point& p\n    );\n    /*!\n        ensures\n            - returns a rectangle R such that:\n                - R.left()   == rect.left()   + p.x()\n                - R.right()  == rect.right()  + p.x()\n                - R.top()    == rect.top()    + p.y()\n                - R.bottom() == rect.bottom() + p.y()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle translate_rect (\n        const rectangle& rect,\n        long x,\n        long y\n    );\n    /*!\n        ensures\n            - returns a rectangle R such that:\n                - R.left()   == rect.left()   + x\n                - R.right()  == rect.right()  + x\n                - R.top()    == rect.top()    + y\n                - R.bottom() == rect.bottom() + y\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle resize_rect (\n        const rectangle& rect,\n        unsigned long width,\n        unsigned long height\n    );\n    /*!\n        ensures\n            - returns a rectangle R such that:\n                - if (width == 0 || height == 0)\n                    - R.width() == 0 \n                    - R.height() == 0 \n                - else\n                    - R.width() == width\n                    - R.height() == height \n                - R.left() == rect.left() \n                - R.top() == rect.top() \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle resize_rect_width (\n        const rectangle& rect,\n        unsigned long width\n    );\n    /*!\n        ensures\n            - returns a rectangle R such that:\n                - R.width() == width\n                - R.left() == rect.left() \n                - R.top() == rect.top() \n                - R.bottom() == rect.bottom() \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle resize_rect_height (\n        const rectangle& rect,\n        unsigned long height \n    );\n    /*!\n        ensures\n            - returns a rectangle R such that:\n                - R.height() == height \n                - R.left() == rect.left() \n                - R.top() == rect.top() \n                - R.right() == rect.right() \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle move_rect (\n        const rectangle& rect,\n        const point& p\n    );\n    /*!\n        ensures\n            - returns a rectangle R such that:\n                - R.width() == rect.width() \n                - R.height() == rect.height() \n                - R.left() == p.x()\n                - R.top() == p.y() \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle move_rect (\n        const rectangle& rect,\n        long x,\n        long y \n    );\n    /*!\n        ensures\n            - returns a rectangle R such that:\n                - R.width() == rect.width() \n                - R.height() == rect.height() \n                - R.left() == x \n                - R.top() == y \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline const point nearest_point (\n        const rectangle& rect,\n        const point& p\n    );\n    /*!\n        ensures\n            - if (rect.contains(p)) then\n                - returns p\n            - else\n                - returns the point in rect that is closest to p\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline long distance_to_rect_edge (\n        const rectangle& rect,\n        const point& p\n    );\n    /*!\n        ensures\n            - returns the Manhattan distance between the edge of rect and p.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T \n        >\n    const rectangle get_rect (\n        const T& m\n    );\n    /*!\n        requires\n            - It must be possible to determine the number of \"rows\" and \"columns\" in m.\n              Either by calling num_rows(m) and num_columns(m) or by calling m.nr() and\n              m.nc() to obtain the number of rows and columns respectively.  Moreover,\n              these routines should return longs.\n        ensures\n            - returns rectangle(0, 0, num_columns(m)-1, num_rows(m)-1)\n              (i.e. assuming T represents some kind of rectangular grid, such as\n              the dlib::matrix or dlib::array2d objects, this function returns the\n              bounding rectangle for that gridded object.)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle operator+ (\n        const rectangle& r,\n        const point& p\n    );\n    /*!\n        ensures\n            - returns r + rectangle(p)\n              (i.e. returns the rectangle that contains both r and p)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle operator+ (\n        const point& p,\n        const rectangle& r\n    );\n    /*!\n        ensures\n            - returns r + rectangle(p)\n              (i.e. returns the rectangle that contains both r and p)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\nnamespace std\n{\n    /*!\n        Define std::less<rectangle> so that you can use rectangles in the associative containers.\n    !*/\n    template<>\n    struct less<dlib::rectangle> : public binary_function<dlib::rectangle,dlib::rectangle,bool>\n    {\n        inline bool operator() (const dlib::rectangle& a, const dlib::rectangle& b) const\n        { \n            if      (a.left() < b.left()) return true;\n            else if (a.left() > b.left()) return false;\n            else if (a.top() < b.top()) return true;\n            else if (a.top() > b.top()) return false;\n            else if (a.right() < b.right()) return true;\n            else if (a.right() > b.right()) return false;\n            else if (a.bottom() < b.bottom()) return true;\n            else if (a.bottom() > b.bottom()) return false;\n            else                    return false;\n        }\n    };\n}\n\n#endif // DLIB_RECTANGLe_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/geometry/vector.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_VECTOr_H_\n#define DLIB_VECTOr_H_\n\n#include <cmath>\n#include \"vector_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include <functional>\n#include <iostream>\n#include \"../matrix/matrix.h\"\n#include <limits>\n\n#if defined(_MSC_VER) && _MSC_VER < 1400\n// Despite my efforts to disabuse visual studio of its usual nonsense I can't find a \n// way to make this warning go away without just disabling it.   This is the warning:\n//   dlib\\geometry\\vector.h(129) : warning C4805: '==' : unsafe mix of type 'std::numeric_limits<_Ty>::is_integer' and type 'bool' in operation\n// \n#pragma warning(disable:4805)\n#endif\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        long NR = 3\n        >\n    class vector;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename enabled = void> \n    struct vect_promote;\n\n    template <typename T, typename U, bool res = (sizeof(T) <= sizeof(U))>\n    struct largest_type\n    {\n        typedef T type;\n    };\n    template <typename T, typename U>\n    struct largest_type<T,U,true>\n    {\n        typedef U type;\n    };\n\n    template <typename T, typename U> \n    struct vect_promote<T,U, typename enable_if_c<std::numeric_limits<T>::is_integer == std::numeric_limits<U>::is_integer>::type> \n    { \n        // If both T and U are both either integral or non-integral then just\n        // use the biggest one\n        typedef typename largest_type<T,U>::type type;\n    };\n\n    template <typename T, typename U> \n    struct vect_promote<T,U, typename enable_if_c<std::numeric_limits<T>::is_integer != std::numeric_limits<U>::is_integer>::type> \n    { \n        typedef double type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    // This insanity here is to work around a bug in visual studio 8.   These two rebind\n    // structures are actually declared at a few points in this file because just having the\n    // one declaration here isn't enough for visual studio.  It takes the three spread around\n    // to avoid all its bugs. \n    template <typename T, long N>\n    struct vc_rebind\n    {\n        typedef vector<T,N> type;\n    };\n    template <typename T, typename U, long N>\n    struct vc_rebind_promote\n    {\n        typedef vector<typename vect_promote<T,U>::type,N> type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename enabled = void>\n    struct vector_assign_helper\n    {\n        template <long NR>\n        static void assign (\n            vector<T,2>& dest,\n            const vector<U,NR>& src\n        )\n        {\n            dest.x() = static_cast<T>(src.x());\n            dest.y() = static_cast<T>(src.y());\n        }\n\n        template <long NR>\n        static void assign (\n            vector<T,3>& dest,\n            const vector<U,NR>& src\n        )\n        {\n            dest.x() = static_cast<T>(src.x());\n            dest.y() = static_cast<T>(src.y());\n            dest.z() = static_cast<T>(src.z());\n        }\n\n        template <typename EXP>\n        static void assign (\n            vector<T,2>& dest,\n            const matrix_exp<EXP>& m\n        )\n        {\n            T x = static_cast<T>(m(0));\n            T y = static_cast<T>(m(1));\n            dest.x() = x;\n            dest.y() = y;\n        }\n\n        template <typename EXP>\n        static void assign (\n            vector<T,3>& dest,\n            const matrix_exp<EXP>& m\n        )\n        {\n            T x = static_cast<T>(m(0));\n            T y = static_cast<T>(m(1));\n            T z = static_cast<T>(m(2));\n\n            dest.x() = x;\n            dest.y() = y;\n            dest.z() = z;\n        }\n    };\n\n    // This is an overload for the case where you are converting from a floating point\n    // type to an integral type.  These overloads make sure values are rounded to \n    // the nearest integral value.\n    template <typename T, typename U>\n    struct vector_assign_helper<T,U, typename enable_if_c<std::numeric_limits<T>::is_integer == true && \n                                                          std::numeric_limits<U>::is_integer == false>::type>\n    {\n        template <long NR>\n        static void assign (\n            vector<T,2>& dest,\n            const vector<U,NR>& src\n        )\n        {\n            dest.x() = static_cast<T>(std::floor(src.x() + 0.5));\n            dest.y() = static_cast<T>(std::floor(src.y() + 0.5));\n        }\n\n        template <long NR>\n        static void assign (\n            vector<T,3>& dest,\n            const vector<U,NR>& src\n        )\n        {\n            dest.x() = static_cast<T>(std::floor(src.x() + 0.5));\n            dest.y() = static_cast<T>(std::floor(src.y() + 0.5));\n            dest.z() = static_cast<T>(std::floor(src.z() + 0.5));\n        }\n\n        template <typename EXP>\n        static void assign (\n            vector<T,3>& dest,\n            const matrix_exp<EXP>& m\n        )\n        {\n            dest.x() = static_cast<T>(std::floor(m(0) + 0.5));\n            dest.y() = static_cast<T>(std::floor(m(1) + 0.5));\n            dest.z() = static_cast<T>(std::floor(m(2) + 0.5));\n        }\n\n        template <typename EXP>\n        static void assign (\n            vector<T,2>& dest,\n            const matrix_exp<EXP>& m\n        )\n        {\n            dest.x() = static_cast<T>(std::floor(m(0) + 0.5));\n            dest.y() = static_cast<T>(std::floor(m(1) + 0.5));\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class vector<T,3> : public matrix<T,3,1>\n    {\n        /*!\n            INITIAL VALUE\n                - x() == 0\n                - y() == 0\n                - z() == 0\n\n            CONVENTION\n                - (*this)(0) == x() \n                - (*this)(1) == y() \n                - (*this)(2) == z() \n\n        !*/\n\n        // This insanity here is to work around a bug in visual studio 8.  \n        template <typename V, long N>\n        struct vc_rebind\n        {\n            typedef vector<V,N> type;\n        };\n            template <typename V, typename U, long N>\n        struct vc_rebind_promote\n        {\n            typedef vector<typename vect_promote<V,U>::type,N> type;\n        };\n\n    public:\n\n        typedef T type;\n        \n        vector (\n        ) \n        {\n            x() = 0;\n            y() = 0;\n            z() = 0;\n        }\n\n        // ---------------------------------------\n\n        vector (\n            const T _x,\n            const T _y,\n            const T _z\n        ) \n        {\n            x() = _x;\n            y() = _y;\n            z() = _z;\n        }\n\n        // ---------------------------------------\n\n        vector (\n            const vector& item\n        ) : matrix<T,3,1>(item)\n        {\n        }\n\n        // ---------------------------------------\n\n        template <typename U>\n        vector (\n            const vector<U,2>& item\n        )\n        {\n            // Do this so that we get the appropriate rounding depending on the relative\n            // type of T and U.\n            vector<T,2> temp(item);\n            x() = temp.x();\n            y() = temp.y();\n            z() = 0;\n        }\n\n        // ---------------------------------------\n\n        vector (\n            const vector<T,2>& item\n        )\n        {\n            x() = item.x();\n            y() = item.y();\n            z() = 0;\n        }\n\n        // ---------------------------------------\n\n        template <typename U>\n        vector (\n            const vector<U,3>& item\n        )\n        {\n            (*this) = item;\n        }\n\n        // ---------------------------------------\n\n        template <typename EXP>\n        vector ( const matrix_exp<EXP>& m)\n        {\n            (*this) = m;\n        }\n\n        // ---------------------------------------\n\n        template <typename EXP>\n        vector& operator = (\n            const matrix_exp<EXP>& m\n        )\n        {\n            // you can only assign vectors with 3 elements to a dlib::vector<T,3> object\n            COMPILE_TIME_ASSERT(EXP::NR*EXP::NC == 3 || EXP::NR*EXP::NC == 0);\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT((m.nr() == 1 || m.nc() == 1) && (m.size() == 3),\n                \"\\t vector(const matrix_exp& m)\"\n                << \"\\n\\t the given matrix is of the wrong size\"\n                << \"\\n\\t m.nr():   \" << m.nr() \n                << \"\\n\\t m.nc():   \" << m.nc() \n                << \"\\n\\t m.size(): \" << m.size() \n                << \"\\n\\t this: \" << this\n                );\n\n            vector_assign_helper<T, typename EXP::type>::assign(*this, m);\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long N>\n        vector& operator = (\n            const vector<U,N>& item\n        )\n        {\n            vector_assign_helper<T,U>::assign(*this, item);\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector& operator= (\n            const vector& item\n        )\n        {\n            x() = item.x();\n            y() = item.y();\n            z() = item.z();\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        double length(\n        ) const \n        { \n            return std::sqrt((double)(x()*x() + y()*y() + z()*z())); \n        }\n\n        // ---------------------------------------\n\n        typename vc_rebind<double,3>::type normalize (\n        ) const \n        {\n            const double tmp = std::sqrt((double)(x()*x() + y()*y() + z()*z()));\n            return vector<double,3> ( x()/tmp,\n                                      y()/tmp,\n                                      z()/tmp\n            );\n        }\n\n        // ---------------------------------------\n\n        T& x (\n        ) \n        { \n            return (*this)(0);\n        }\n\n        // ---------------------------------------\n\n        T& y (\n        ) \n        { \n            return (*this)(1);\n        }\n\n        // ---------------------------------------\n\n        T& z (\n        ) \n        { \n            return (*this)(2);\n        }\n\n        // ---------------------------------------\n\n        const T& x (\n        ) const\n        { \n            return (*this)(0);\n        }\n\n        // ---------------------------------------\n\n        const T& y (\n        ) const \n        { \n            return (*this)(1);\n        }\n\n        // ---------------------------------------\n\n        const T& z (\n        ) const\n        { \n            return (*this)(2);\n        }\n\n        // ---------------------------------------\n\n        T dot (\n            const vector& rhs\n        ) const \n        { \n            return x()*rhs.x() + y()*rhs.y() + z()*rhs.z();\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long N>\n        typename vect_promote<T,U>::type dot (\n            const vector<U,N>& rhs\n        ) const \n        { \n            return x()*rhs.x() + y()*rhs.y() + z()*rhs.z();\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long N>\n        typename vc_rebind_promote<T,U,3>::type cross (\n            const vector<U,N>& rhs\n        ) const\n        {\n            typedef vector<typename vect_promote<T,U>::type,3> ret_type;\n\n            return ret_type (\n                y()*rhs.z() - z()*rhs.y(),\n                z()*rhs.x() - x()*rhs.z(),\n                x()*rhs.y() - y()*rhs.x()\n                );\n        }\n\n        // ---------------------------------------\n\n        vector& operator += (\n            const vector& rhs\n        )\n        {\n            x() += rhs.x();\n            y() += rhs.y();\n            z() += rhs.z();\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector& operator -= (\n            const vector& rhs\n        )\n        {\n            x() -= rhs.x();\n            y() -= rhs.y();\n            z() -= rhs.z();\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector& operator /= (\n            const T& rhs\n        )\n        {\n            x() /= rhs;\n            y() /= rhs;\n            z() /= rhs;\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector& operator *= (\n            const T& rhs\n        )\n        {\n            x() *= rhs;\n            y() *= rhs;\n            z() *= rhs;\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector operator - (\n        ) const\n        {\n            return vector(-x(), -y(), -z());\n        }\n\n        // ---------------------------------------\n\n        template <typename U>\n        typename vc_rebind_promote<T,U,3>::type operator / (\n            const U& val\n        ) const\n        {\n            typedef vector<typename vect_promote<T,U>::type,3> ret_type;\n            return ret_type(x()/val, y()/val, z()/val);\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long NR2>\n        bool operator== (\n            const vector<U,NR2>& rhs\n        ) const\n        {\n            return x()==rhs.x() && y()==rhs.y() && z()==rhs.z();\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long NR2>\n        bool operator!= (\n            const vector<U,NR2>& rhs\n        ) const\n        {\n            return !(*this == rhs);\n        }\n\n        // ---------------------------------------\n\n        void swap (\n            vector& item\n        )\n        {\n            dlib::exchange(x(), item.x());\n            dlib::exchange(y(), item.y());\n            dlib::exchange(z(), item.z());\n        }\n\n        // ---------------------------------------\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class vector<T,2> : public matrix<T,2,1>\n    {\n        /*!\n            INITIAL VALUE\n                - x() == 0\n                - y() == 0\n\n            CONVENTION\n                - (*this)(0) == x() \n                - (*this)(1) == y() \n                - z() == 0\n        !*/\n\n        // This insanity here is to work around a bug in visual studio 8.  \n        template <typename V, long N>\n        struct vc_rebind\n        {\n            typedef vector<V,N> type;\n        };\n            template <typename V, typename U, long N>\n        struct vc_rebind_promote\n        {\n            typedef vector<typename vect_promote<V,U>::type,N> type;\n        };\n\n\n    public:\n\n        typedef T type;\n        \n        vector (\n        ) \n        {\n            x() = 0;\n            y() = 0;\n        }\n\n        // ---------------------------------------\n\n        vector (\n            const T _x,\n            const T _y\n        ) \n        {\n            x() = _x;\n            y() = _y;\n        }\n\n        // ---------------------------------------\n\n        template <typename U>\n        vector (\n            const vector<U,3>& item\n        )\n        {\n            // Do this so that we get the appropriate rounding depending on the relative\n            // type of T and U.\n            vector<T,3> temp(item);\n            x() = temp.x();\n            y() = temp.y();\n        }\n\n        // ---------------------------------------\n\n        vector (\n            const vector& item\n        ) : matrix<T,2,1>(item)\n        {\n        }\n\n        // ---------------------------------------\n\n        vector (\n            const vector<T,3>& item\n        )\n        {\n            x() = item.x();\n            y() = item.y();\n        }\n\n        // ---------------------------------------\n\n        template <typename U>\n        vector (\n            const vector<U,2>& item\n        )\n        {\n            (*this) = item;\n        }\n\n        // ---------------------------------------\n\n        template <typename EXP>\n        vector ( const matrix_exp<EXP>& m)\n        {\n            (*this) = m;\n        }\n\n        // ---------------------------------------\n\n        template <typename EXP>\n        vector& operator = (\n            const matrix_exp<EXP>& m\n        )\n        {\n            // you can only assign vectors with 2 elements to a dlib::vector<T,2> object\n            COMPILE_TIME_ASSERT(EXP::NR*EXP::NC == 2 || EXP::NR*EXP::NC == 0);\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT((m.nr() == 1 || m.nc() == 1) && (m.size() == 2),\n                \"\\t vector(const matrix_exp& m)\"\n                << \"\\n\\t the given matrix is of the wrong size\"\n                << \"\\n\\t m.nr():   \" << m.nr() \n                << \"\\n\\t m.nc():   \" << m.nc() \n                << \"\\n\\t m.size(): \" << m.size() \n                << \"\\n\\t this: \" << this\n                );\n\n            vector_assign_helper<T, typename EXP::type>::assign(*this, m);\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long N>\n        vector& operator = (\n            const vector<U,N>& item\n        )\n        {\n            vector_assign_helper<T,U>::assign(*this, item);\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector& operator= (\n            const vector& item\n        )\n        {\n            x() = item.x();\n            y() = item.y();\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        double length(\n        ) const \n        { \n            return std::sqrt((double)(x()*x() + y()*y())); \n        }\n\n        // ---------------------------------------\n\n\n        typename vc_rebind<double,2>::type normalize (\n        ) const \n        {\n            const double tmp = std::sqrt((double)(x()*x() + y()*y()));\n            return vector<double,2> ( x()/tmp,\n                         y()/tmp\n            );\n        }\n\n        // ---------------------------------------\n\n        T& x (\n        ) \n        { \n            return (*this)(0);\n        }\n\n        // ---------------------------------------\n\n        T& y (\n        ) \n        { \n            return (*this)(1);\n        }\n\n        // ---------------------------------------\n\n        const T& x (\n        ) const\n        { \n            return (*this)(0);\n        }\n\n        // ---------------------------------------\n\n        const T& y (\n        ) const \n        { \n            return (*this)(1);\n        }\n\n        // ---------------------------------------\n\n        const T z (\n        ) const\n        {\n            return 0;\n        }\n\n        // ---------------------------------------\n\n        T dot (\n            const vector& rhs\n        ) const \n        { \n            return x()*rhs.x() + y()*rhs.y();\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long N>\n        typename vect_promote<T,U>::type dot (\n            const vector<U,N>& rhs\n        ) const \n        { \n            return x()*rhs.x() + y()*rhs.y() + z()*rhs.z();\n        }\n\n        // ---------------------------------------\n\n        vector& operator += (\n            const vector& rhs\n        )\n        {\n            x() += rhs.x();\n            y() += rhs.y();\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector& operator -= (\n            const vector& rhs\n        )\n        {\n            x() -= rhs.x();\n            y() -= rhs.y();\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector& operator /= (\n            const T& rhs\n        )\n        {\n            x() /= rhs;\n            y() /= rhs;\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector& operator *= (\n            const T& rhs\n        )\n        {\n            x() *= rhs;\n            y() *= rhs;\n            return *this;\n        }\n\n        // ---------------------------------------\n\n        vector operator - (\n        ) const\n        {\n            return vector(-x(), -y());\n        }\n\n        // ---------------------------------------\n\n        template <typename U>\n        typename vc_rebind_promote<T,U,2>::type operator / (\n            const U& val\n        ) const\n        {\n            typedef vector<typename vect_promote<T,U>::type,2> ret_type;\n            return ret_type(x()/val, y()/val);\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long NR2>\n        bool operator== (\n            const vector<U,NR2>& rhs\n        ) const\n        {\n            return x()==rhs.x() && y()==rhs.y() && z()==rhs.z();\n        }\n\n        // ---------------------------------------\n\n        bool operator== (\n            const vector& rhs\n        ) const\n        {\n            return x()==rhs.x() && y()==rhs.y();\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long NR2>\n        bool operator!= (\n            const vector<U,NR2>& rhs\n        ) const\n        {\n            return !(*this == rhs);\n        }\n\n        // ---------------------------------------\n\n        bool operator!= (\n            const vector& rhs\n        ) const\n        {\n            return !(*this == rhs);\n        }\n\n        // ---------------------------------------\n\n        void swap (\n            vector& item\n        )\n        {\n            dlib::exchange(x(), item.x());\n            dlib::exchange(y(), item.y());\n        }\n\n        // ---------------------------------------\n\n        template <typename U, long N>\n        typename vc_rebind_promote<T,U,3>::type cross (\n            const vector<U,N>& rhs\n        ) const\n        {\n            typedef vector<typename vect_promote<T,U>::type,3> ret_type;\n            return ret_type (\n                y()*rhs.z(),\n                - x()*rhs.z(),\n                x()*rhs.y() - y()*rhs.x()\n                );\n        }\n\n        // ---------------------------------------\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline const typename vc_rebind_promote<T,U,2>::type operator+ (\n        const vector<T,2>& lhs,\n        const vector<U,2>& rhs \n    )\n    {\n        typedef typename vc_rebind_promote<T,U,2>::type ret_type;\n        return ret_type(lhs.x()+rhs.x(), lhs.y()+rhs.y());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline const typename vc_rebind_promote<T,U,3>::type operator+ (\n        const vector<T,3>& lhs,\n        const vector<U,3>& rhs \n    )\n    {\n        typedef typename vc_rebind_promote<T,U,3>::type ret_type;\n        return ret_type(lhs.x()+rhs.x(), lhs.y()+rhs.y(), lhs.z()+rhs.z());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline const typename vc_rebind_promote<T,U,3>::type operator+ (\n        const vector<T,2>& lhs,\n        const vector<U,3>& rhs \n    )\n    {\n        typedef typename vc_rebind_promote<T,U,3>::type ret_type;\n        return ret_type(lhs.x()+rhs.x(), lhs.y()+rhs.y(), rhs.z());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline const typename vc_rebind_promote<T,U,3>::type operator+ (\n        const vector<T,3>& lhs,\n        const vector<U,2>& rhs \n    )\n    {\n        typedef typename vc_rebind_promote<T,U,3>::type ret_type;\n        return ret_type(lhs.x()+rhs.x(), lhs.y()+rhs.y(), lhs.z());\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline const typename vc_rebind_promote<T,U,2>::type operator- (\n        const vector<T,2>& lhs,\n        const vector<U,2>& rhs \n    )\n    {\n        typedef typename vc_rebind_promote<T,U,2>::type ret_type;\n        return ret_type(lhs.x()-rhs.x(), lhs.y()-rhs.y());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline const typename vc_rebind_promote<T,U,3>::type operator- (\n        const vector<T,3>& lhs,\n        const vector<U,3>& rhs \n    )\n    {\n        typedef typename vc_rebind_promote<T,U,3>::type ret_type;\n        return ret_type(lhs.x()-rhs.x(), lhs.y()-rhs.y(), lhs.z()-rhs.z());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline const typename vc_rebind_promote<T,U,3>::type operator- (\n        const vector<T,2>& lhs,\n        const vector<U,3>& rhs \n    )\n    {\n        typedef typename vc_rebind_promote<T,U,3>::type ret_type;\n        return ret_type(lhs.x()-rhs.x(), lhs.y()-rhs.y(), -rhs.z());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline const typename vc_rebind_promote<T,U,3>::type operator- (\n        const vector<T,3>& lhs,\n        const vector<U,2>& rhs \n    )\n    {\n        typedef typename vc_rebind_promote<T,U,3>::type ret_type;\n        return ret_type(lhs.x()-rhs.x(), lhs.y()-rhs.y(), lhs.z());\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline typename disable_if<is_matrix<U>, const typename vc_rebind_promote<T,U,2>::type >::type operator* (\n        const vector<T,2>& v,\n        const U& s\n    )\n    {\n        typedef typename vc_rebind_promote<T,U,2>::type ret_type;\n        return ret_type(v.x()*s, v.y()*s);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline typename disable_if<is_matrix<U>, const typename vc_rebind_promote<T,U,2>::type >::type operator* (\n        const U& s,\n        const vector<T,2>& v\n    )\n    {\n        typedef typename vc_rebind_promote<T,U,2>::type ret_type;\n        return ret_type(v.x()*s, v.y()*s);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline typename disable_if<is_matrix<U>, const typename vc_rebind_promote<T,U,3>::type >::type operator* (\n        const vector<T,3>& v,\n        const U& s\n    )\n    {\n        typedef typename vc_rebind_promote<T,U,3>::type ret_type;\n        return ret_type(v.x()*s, v.y()*s, v.z()*s);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    inline typename disable_if<is_matrix<U>, const typename vc_rebind_promote<T,U,3>::type >::type operator* (\n        const U& s,\n        const vector<T,3>& v\n    )\n    {\n        typedef typename vc_rebind_promote<T,U,3>::type ret_type;\n        return ret_type(v.x()*s, v.y()*s, v.z()*s);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T, long NR>\n    inline void swap (\n        vector<T,NR> & a, \n        vector<T,NR> & b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T>\n    inline void serialize (\n        const vector<T,3>& item,  \n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.x(),out);\n            serialize(item.y(),out);\n            serialize(item.z(),out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type vector\"); \n        }\n    }\n\n    template<typename T>\n    inline void deserialize (\n        vector<T,3>& item,  \n        std::istream& in\n    )\n    {\n        try\n        {\n            deserialize(item.x(),in);\n            deserialize(item.y(),in);\n            deserialize(item.z(),in);\n        }\n        catch (serialization_error& e)\n        { \n            item.x() = 0;\n            item.y() = 0;\n            item.z() = 0;\n            throw serialization_error(e.info + \"\\n   while deserializing object of type vector\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T>\n    inline void serialize (\n        const vector<T,2>& item,  \n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.x(),out);\n            serialize(item.y(),out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type vector\"); \n        }\n    }\n\n    template<typename T>\n    inline void deserialize (\n        vector<T,2>& item,  \n        std::istream& in\n    )\n    {\n        try\n        {\n            deserialize(item.x(),in);\n            deserialize(item.y(),in);\n        }\n        catch (serialization_error& e)\n        { \n            item.x() = 0;\n            item.y() = 0;\n            throw serialization_error(e.info + \"\\n   while deserializing object of type vector\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T>\n    std::ostream& operator<< (\n        std::ostream& out, \n        const vector<T,3>& item \n    )\n    {\n        out << \"(\" << item.x() << \", \" << item.y() << \", \" << item.z() << \")\";\n        return out;\n    }\n\n    template<typename T>\n    std::istream& operator>>(\n        std::istream& in, \n        vector<T,3>& item \n    )   \n    {\n\n        // eat all the crap up to the '(' \n        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == '\\r' || in.peek() == '\\n')\n            in.get();\n\n        // there should be a '(' if not then this is an error\n        if (in.get() != '(')\n        {\n            in.setstate(in.rdstate() | std::ios::failbit);\n            return in;\n        }\n\n        // eat all the crap up to the first number \n        while (in.peek() == ' ' || in.peek() == '\\t')\n            in.get();\n        in >> item.x();\n\n        if (!in.good())\n            return in;\n              \n        // eat all the crap up to the next number\n        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == ',')\n            in.get();\n        in >> item.y();\n\n        if (!in.good())\n            return in;\n              \n        // eat all the crap up to the next number\n        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == ',')\n            in.get();\n        in >> item.z();\n\n        if (!in.good())\n            return in;\n              \n        // eat all the crap up to the ')'\n        while (in.peek() == ' ' || in.peek() == '\\t')\n            in.get();\n\n        // there should be a ')' if not then this is an error\n        if (in.get() != ')')\n            in.setstate(in.rdstate() | std::ios::failbit);\n        return in;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    template<typename T>\n    std::ostream& operator<< (\n        std::ostream& out, \n        const vector<T,2>& item \n    )\n    {\n        out << \"(\" << item.x() << \", \" << item.y() << \")\";\n        return out;\n    }\n\n    template<typename T>\n    std::istream& operator>>(\n        std::istream& in, \n        vector<T,2>& item \n    )   \n    {\n\n        // eat all the crap up to the '(' \n        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == '\\r' || in.peek() == '\\n')\n            in.get();\n\n        // there should be a '(' if not then this is an error\n        if (in.get() != '(')\n        {\n            in.setstate(in.rdstate() | std::ios::failbit);\n            return in;\n        }\n\n        // eat all the crap up to the first number \n        while (in.peek() == ' ' || in.peek() == '\\t')\n            in.get();\n        in >> item.x();\n\n        if (!in.good())\n            return in;\n              \n        // eat all the crap up to the next number\n        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == ',')\n            in.get();\n        in >> item.y();\n\n        if (!in.good())\n            return in;\n              \n        // eat all the crap up to the ')'\n        while (in.peek() == ' ' || in.peek() == '\\t')\n            in.get();\n\n        // there should be a ')' if not then this is an error\n        if (in.get() != ')')\n            in.setstate(in.rdstate() | std::ios::failbit);\n        return in;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    typedef vector<long,2> point;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\nnamespace std\n{\n    /*!\n        Define std::less<vector<T,3> > so that you can use vectors in the associative containers.\n    !*/\n    template<typename T>\n    struct less<dlib::vector<T,3> > : public binary_function<dlib::vector<T,3> ,dlib::vector<T,3> ,bool>\n    {\n        inline bool operator() (const dlib::vector<T,3> & a, const dlib::vector<T,3> & b) const\n        { \n            if      (a.x() < b.x()) return true;\n            else if (a.x() > b.x()) return false;\n            else if (a.y() < b.y()) return true;\n            else if (a.y() > b.y()) return false;\n            else if (a.z() < b.z()) return true;\n            else if (a.z() > b.z()) return false;\n            else                    return false;\n        }\n    };\n\n    /*!\n        Define std::less<vector<T,2> > so that you can use vector<T,2>s in the associative containers.\n    !*/\n    template<typename T>\n    struct less<dlib::vector<T,2> > : public binary_function<dlib::vector<T,2> ,dlib::vector<T,2> ,bool>\n    {\n        inline bool operator() (const dlib::vector<T,2> & a, const dlib::vector<T,2> & b) const\n        { \n            if      (a.x() < b.x()) return true;\n            else if (a.x() > b.x()) return false;\n            else if (a.y() < b.y()) return true;\n            else if (a.y() > b.y()) return false;\n            else                    return false;\n        }\n    };\n}\n\n#if defined(_MSC_VER) && _MSC_VER < 1400\n// turn this warning back on\n#pragma warning(default:4805)\n#endif\n\n#endif // DLIB_VECTOr_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/geometry/vector_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_VECTOR_ABSTRACT_\n#ifdef DLIB_VECTOR_ABSTRACT_\n\n#include \"../serialize.h\"\n#include <functional>\n#include <iostream>\n#include \"../matrix/matrix_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename T,\n        long NR = 3\n        >\n    class vector : public matrix<T,NR,1>\n    {\n        /*!\n            REQUIREMENTS ON T\n                T should be some object that provides an interface that is \n                compatible with double, float, int, long and the like.\n\n            REQUIREMENTS ON NR\n                NR == 3 || NR == 2\n\n            INITIAL VALUE\n                x() == 0 \n                y() == 0 \n                z() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a three dimensional vector.  If NR == 2 then\n                this object is limited to representing points on the XY plane where\n                Z is set to 0.\n\n                Also note that this object performs the appropriate integer and \n                floating point conversions and promotions when vectors of mixed\n                type are used together.  For example:\n                    vector<int,3> vi;\n                    vector<double,2> vd;\n                    vd + vi == a vector<double,3> object type since that is what\n                               is needed to contain the result of vi+vd without\n                               any loss of information.\n        !*/\n\n    public:\n\n        typedef T type;\n        \n        vector (\n        );\n        /*!\n            ensures\n               - #*this has been properly initialized\n        !*/\n\n        vector (\n            const T _x,\n            const T _y,\n            const T _z\n        );\n        /*!\n            requires\n                - NR == 3\n            ensures\n                - #x() == _x \n                - #y() == _y \n                - #z() == _z \n        !*/\n\n        vector (\n            const T _x,\n            const T _y\n        );\n        /*!\n            requires\n                - NR == 2\n            ensures\n                - #x() == _x \n                - #y() == _y \n                - #z() == 0\n        !*/\n\n        template <typename U, long NRv>\n        vector (\n            const vector<U,NRv>& v\n        );\n        /*!\n            ensures\n                - Initializes *this with the contents of v and does any rounding if necessary and also \n                  takes care of converting between 2 and 3 dimensional vectors.\n                - if (U is a real valued type like float or double and T is an integral type like long) then\n                    - if (NR == 3) then\n                        - #x() == floor(v.x() + 0.5)\n                        - #y() == floor(v.y() + 0.5)\n                        - #z() == floor(v.z() + 0.5)\n                    - else // NR == 2\n                        - #x() == floor(v.x() + 0.5)\n                        - #y() == floor(v.y() + 0.5)\n                        - #z() == 0\n                - else\n                    - if (NR == 3) then\n                        - #x() == v.x() \n                        - #y() == v.y() \n                        - #z() == v.z() \n                    - else // NR == 2\n                        - #x() == v.x() \n                        - #y() == v.y() \n                        - #z() == 0\n        !*/\n\n        template <typename EXP>\n        vector ( \n            const matrix_exp<EXP>& m\n        );\n        /*!\n            requires\n                - m.size() == NR\n                - m.nr() == 1 || m.nc() == 1 (i.e. m must be a row or column matrix)\n            ensures\n                - Initializes *this with the contents of m and does any rounding if necessary and also \n                  takes care of converting between 2 and 3 dimensional vectors.\n                - if (m contains real valued values like float or double and T is an integral type like long) then\n                    - #x() == floor(m(0) + 0.5)\n                    - #y() == floor(m(1) + 0.5)\n                    - if (NR == 3) then\n                        - #z() == floor(m(2) + 0.5)\n                    - else\n                        - #z() == 0\n                - else\n                    - #x() == m(0)\n                    - #y() == m(1)\n                    - if (NR == 3) then\n                        - #z() == m(2)\n                    - else\n                        - #z() == 0\n        !*/\n\n        ~vector (\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n\n        double length(\n        ) const;\n        /*!\n            ensures\n                - returns the length of the vector\n        !*/\n\n        T& x (\n        );\n        /*!\n            ensures\n                - returns a reference to the x component of the vector\n        !*/\n\n        T& y (\n        );\n        /*!\n            ensures\n                - returns a reference to the y component of the vector\n        !*/\n\n        T& z (\n        );\n        /*!\n            requires\n                - NR == 3 (this function actually doesn't exist when NR != 3)\n            ensures\n                - returns a reference to the z component of the vector\n        !*/\n\n        const T& x (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the x component of the vector\n        !*/\n\n        const T& y (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the y component of the vector\n        !*/\n\n        const T& z (\n        ) const;\n        /*!\n            ensures\n                - if (NR == 3) then\n                    - returns a const reference to the z component of the vector\n                - else\n                    - return 0\n                      (there isn't really a z in this case so we just return 0)\n        !*/\n\n        T dot (\n            const vector& rhs\n        ) const;\n        /*!\n            ensures\n                - returns the result of the dot product between *this and rhs\n        !*/\n\n        vector<T,3> cross (\n            const vector& rhs\n        ) const;\n        /*!\n            ensures\n                - returns the result of the cross product between *this and rhs\n        !*/\n\n        vector<double,NR> normalize (\n        ) const;\n        /*!\n            ensures\n                - returns a vector with length() == 1 and in the same direction as *this\n        !*/\n\n        vector operator+ (\n            const vector& rhs\n        ) const;\n        /*!\n            ensures\n                - returns the result of adding *this to rhs\n        !*/\n\n        vector operator- (\n            const vector& rhs\n        ) const;\n        /*!\n            ensures\n                - returns the result of subtracting rhs from *this\n        !*/\n\n        vector operator- (\n        ) const;\n        /*!\n            ensures\n                - returns -1*(*this) \n        !*/\n\n        vector operator/ (\n            const T rhs\n        ) const;\n        /*!\n            ensures\n                - returns the result of dividing *this by rhs \n        !*/\n\n        vector& operator= (\n            const vector& rhs\n        );\n        /*!\n            ensures\n                - #x() == rhs.x() \n                - #y() == rhs.y() \n                - #z() == rhs.z()\n                - returns #*this\n        !*/\n\n        vector& operator += (\n            const vector& rhs\n        );\n        /*!\n            ensures\n                - #*this == *this + rhs\n                - returns #*this\n        !*/\n\n        vector& operator -= (\n            const vector& rhs\n        );\n        /*!\n            ensures\n                - #*this == *this - rhs\n                - returns #*this\n        !*/\n\n        vector& operator *= (\n            const T rhs\n        );\n        /*!\n            ensures\n                - #*this == *this * rhs\n                - returns #*this\n        !*/\n\n        vector& operator /= (\n            const T rhs\n        );\n        /*!\n            ensures\n                - #*this == *this / rhs\n                - returns #*this\n        !*/\n\n        template <typename U, long NR2>\n        bool operator== (\n            const vector<U,NR2>& rhs\n        ) const;\n        /*!\n            ensures\n                - if (x() == rhs.x() && y() == rhs.y() && z() == rhs.z()) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        template <typename U, long NR2>\n        bool operator!= (\n            const vector<U,NR2>& rhs\n        ) const;\n        /*!\n            ensures\n                - returns !((*this) == rhs)\n        !*/\n\n        void swap (\n            vector& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T, typename U, long NR>\n    vector operator* (\n        const vector<T,NR> & lhs,\n        const U rhs\n    );\n    /*!\n        ensures\n            - returns the result of multiplying the scalar rhs by lhs\n    !*/\n    \n    template<typename T, typename U, long NR>\n    vector operator* (\n        const U lhs,\n        const vector<T,NR> & rhs   \n    );\n    /*! \n        ensures\n            - returns the result of multiplying the scalar lhs by rhs\n    !*/\n\n    template<typename T, long NR>\n    inline void swap (\n        vector<T,NR> & a, \n        vector<T,NR> & b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template<typename T, long NR>\n    void serialize (\n        const vector<T,NR>& item, \n        std::ostream& out\n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    template<typename T, long NR>\n    void deserialize (\n        vector<T,NR>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    template<typename T>\n    std::ostream& operator<< (\n        std::ostream& out, \n        const vector<T,3>& item \n    );   \n    /*!\n        ensures\n            - writes item to out in the form \"(x, y, z)\"\n    !*/\n\n    template<typename T>\n    std::istream& operator>>(\n        std::istream& in, \n        vector<T,3>& item \n    );   \n    /*!\n        ensures\n            - reads a vector from the input stream in and stores it in #item.\n              The data in the input stream should be of the form (x, y, z)\n    !*/\n\n    template<typename T>\n    std::ostream& operator<< (\n        std::ostream& out, \n        const vector<T,2>& item \n    );   \n    /*!\n        ensures\n            - writes item to out in the form \"(x, y)\"\n    !*/\n\n    template<typename T>\n    std::istream& operator>>(\n        std::istream& in, \n        vector<T,2>& item \n    );   \n    /*!\n        ensures\n            - reads a vector from the input stream in and stores it in #item.\n              The data in the input stream should be of the form (x, y)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A point\n        This is just a typedef of the vector object. \n    !*/\n\n    typedef vector<long,2> point;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\nnamespace std\n{\n    /*!\n        Define std::less<vector<T,3> > so that you can use vectors in the associative containers.\n    !*/\n    template<typename T>\n    struct less<dlib::vector<T,3> > : public binary_function<dlib::vector<T,3> ,dlib::vector<T,3> ,bool>\n    {\n        inline bool operator() (const dlib::vector<T,3> & a, const dlib::vector<T,3> & b) const\n        { \n            if      (a.x() < b.x()) return true;\n            else if (a.x() > b.x()) return false;\n            else if (a.y() < b.y()) return true;\n            else if (a.y() > b.y()) return false;\n            else if (a.z() < b.z()) return true;\n            else if (a.z() > b.z()) return false;\n            else                    return false;\n        }\n    };\n\n    /*!\n        Define std::less<vector<T,2> > so that you can use vector<T,2>s in the associative containers.\n    !*/\n    template<typename T>\n    struct less<dlib::vector<T,2> > : public binary_function<dlib::vector<T,2> ,dlib::vector<T,2> ,bool>\n    {\n        inline bool operator() (const dlib::vector<T,2> & a, const dlib::vector<T,2> & b) const\n        { \n            if      (a.x() < b.x()) return true;\n            else if (a.x() > b.x()) return false;\n            else if (a.y() < b.y()) return true;\n            else if (a.y() > b.y()) return false;\n            else                    return false;\n        }\n    };\n}\n\n#endif // DLIB_VECTOR_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/geometry.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GEOMETRy_HEADER\n#define DLIB_GEOMETRy_HEADER\n\n#include \"geometry/rectangle.h\"\n#include \"geometry/vector.h\"\n#include \"geometry/border_enumerator.h\"\n#include \"geometry/point_transforms.h\"\n\n#endif // DLIB_GEOMETRy_HEADER\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph/graph_kernel_1.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GRAPH_KERNEl_1_\n#define DLIB_GRAPH_KERNEl_1_\n\n#include \"../serialize.h\"\n#include \"../noncopyable.h\"\n#include \"../std_allocator.h\"\n#include \"../smart_pointers.h\"\n#include \"../algs.h\"\n#include <vector>\n#include \"graph_kernel_abstract.h\"\n#include \"../is_kind.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename node_type, typename graph, bool is_checked>\n    struct graph_checker_helper \n    { \n        /*!\n            This object is used to check preconditions based on the value of is_checked\n        !*/\n\n        static void check_neighbor (\n            unsigned long edge_index,\n            const node_type& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(edge_index < self.number_of_neighbors(),\n                         \"\\tnode_type& graph::node_type::neighbor(edge_index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tedge_index:            \" << edge_index \n                         << \"\\n\\tnumber_of_neighbors(): \" << self.number_of_neighbors() \n                         << \"\\n\\tthis:                  \" << &self\n            );\n        }\n\n        static void check_edge (\n            unsigned long edge_index,\n            const node_type& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(edge_index < self.number_of_neighbors(),\n                         \"\\tE& graph::node_type::edge(edge_index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tedge_index:            \" << edge_index \n                         << \"\\n\\tnumber_of_neighbors(): \" << self.number_of_neighbors() \n                         << \"\\n\\tthis:                  \" << &self\n            );\n        }\n\n        static void check_node (\n            unsigned long index,\n            const graph& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(index < self.number_of_nodes(),\n                         \"\\tnode_type& graph::node(index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tindex:             \" << index \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes()\n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n\n        static void check_has_edge (\n            unsigned long node_index1,\n            unsigned long node_index2,\n            const graph& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(node_index1 < self.number_of_nodes() &&\n                         node_index2 < self.number_of_nodes(),\n                         \"\\tvoid graph::has_edge(node_index1, node_index2)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tnode_index1:       \" << node_index1 \n                         << \"\\n\\tnode_index2:       \" << node_index2 \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes() \n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n\n        static void check_add_edge (\n            unsigned long node_index1,\n            unsigned long node_index2,\n            const graph& self\n        )\n        {\n            DLIB_CASSERT(node_index1 < self.number_of_nodes() &&\n                         node_index2 < self.number_of_nodes(),\n                         \"\\tvoid graph::add_edge(node_index1, node_index2)\" \n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tnode_index1:       \" << node_index1 \n                         << \"\\n\\tnode_index2:       \" << node_index2 \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes()\n                         << \"\\n\\tthis:              \" << &self\n            );\n\n            DLIB_CASSERT( self.has_edge(node_index1, node_index2) == false,\n                          \"\\tvoid graph::add_edge(node_index1, node_index2)\"\n                          << \"\\n\\tYou can't add an edge if it already exists in the graph\"\n                          << \"\\n\\tnode_index1:       \" << node_index1 \n                          << \"\\n\\tnode_index2:       \" << node_index2 \n                          << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes() \n                          << \"\\n\\tthis:              \" << &self\n            );\n\n        }\n\n        static void check_remove_edge (\n            unsigned long node_index1,\n            unsigned long node_index2,\n            const graph& self\n        )\n        {\n            DLIB_CASSERT(node_index1 < self.number_of_nodes() &&\n                         node_index2 < self.number_of_nodes(),\n                         \"\\tvoid graph::remove_edge(node_index1, node_index2)\" \n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tnode_index1:       \" << node_index1 \n                         << \"\\n\\tnode_index2:       \" << node_index2 \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes()\n                         << \"\\n\\tthis:              \" << &self\n            );\n\n            DLIB_CASSERT( self.has_edge(node_index1, node_index2) == true,\n                          \"\\tvoid graph::remove_edge(node_index1, node_index2)\"\n                          << \"\\n\\tYou can't remove an edge if it isn't in the graph\"\n                          << \"\\n\\tnode_index1:       \" << node_index1 \n                          << \"\\n\\tnode_index2:       \" << node_index2 \n                          << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes()\n                          << \"\\n\\tthis:              \" << &self\n            );\n\n        }\n\n        static void check_remove_node (\n            unsigned long index,\n            const graph& self\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(index < self.number_of_nodes(),\n                         \"\\tvoid graph::remove_node(index)\"\n                         << \"\\n\\tYou have specified an invalid index\"\n                         << \"\\n\\tindex:             \" << index \n                         << \"\\n\\tnumber_of_nodes(): \" << self.number_of_nodes() \n                         << \"\\n\\tthis:              \" << &self\n            );\n        }\n    };\n\n    template <typename node_type, typename graph>\n    struct graph_checker_helper <node_type, graph, false>\n    { \n        static inline void check_edge ( unsigned long , const node_type& ) { }\n        static inline void check_neighbor ( unsigned long , const node_type& ) { }\n        static inline void check_node ( unsigned long , const graph& ) { }\n        static inline void check_has_edge ( unsigned long , unsigned long , const graph& ) { }\n        static inline void check_add_edge ( unsigned long , unsigned long , const graph& ) { }\n        static inline void check_remove_edge ( unsigned long , unsigned long , const graph& ) { }\n        static inline void check_remove_node ( unsigned long , const graph& ) { }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E = char,\n        typename mem_manager = default_memory_manager,\n        bool is_checked = true \n        >\n    class graph_kernel_1 : noncopyable\n    {\n\n        /*!\n            INITIAL VALUE\n                - nodes.size() == 0\n\n            CONVENTION\n                - nodes.size() == number_of_nodes()\n                - for all valid i:\n                    - *nodes[i] == node(i)\n                    - nodes[i]->neighbors.size() == nodes[i]->number_of_neighbors(i)\n                    - nodes[i]->idx == i == nodes[i]->index()\n                    - for all valid n:\n                        - nodes[i]->neighbors[n] == pointer to the n'th parent node of i\n                        - *nodes[i]->neighbors[n] == node(i).neighbor(n)\n                        - *nodes[i]->edges[n] == node(i).edge(n)\n        !*/\n\n    public:\n        struct node_type;\n\n    private:\n        typedef graph_checker_helper<node_type, graph_kernel_1, is_checked> checker;\n\n\n    public:\n\n        typedef T type;\n        typedef E edge_type;\n        typedef mem_manager mem_manager_type;\n\n        graph_kernel_1(\n        ) {}\n\n        virtual ~graph_kernel_1(\n        ) {}\n\n        void clear(\n        ) { nodes.clear(); }\n\n        void set_number_of_nodes (\n            unsigned long new_size\n        );\n\n        unsigned long number_of_nodes (\n        ) const { return nodes.size(); }\n\n        node_type& node (\n            unsigned long index\n        ) { checker::check_node(index,*this); return *nodes[index]; }\n\n        const node_type& node (\n            unsigned long index\n        ) const { checker::check_node(index,*this); return *nodes[index]; }\n\n        bool has_edge (\n            unsigned long node_index1,\n            unsigned long node_index2\n        ) const;\n\n        void add_edge (\n            unsigned long node_index1,\n            unsigned long node_index2\n        );\n\n        void remove_edge (\n            unsigned long node_index1,\n            unsigned long node_index2\n        );\n\n        unsigned long add_node (\n        );\n\n        void remove_node (\n            unsigned long index\n        );\n\n        void swap (\n            graph_kernel_1& item\n        ) { nodes.swap(item.nodes); }\n\n    public:\n\n        struct node_type\n        {\n            T data;\n            typedef graph_kernel_1 graph_type;\n\n            unsigned long index(\n            ) const { return idx; }\n\n            unsigned long number_of_neighbors (\n            ) const { return neighbors.size(); }\n\n            const node_type& neighbor (\n                unsigned long edge_index\n            ) const { checker::check_neighbor(edge_index,*this);  return *neighbors[edge_index]; }\n\n            node_type& neighbor (\n                unsigned long edge_index\n            ) { checker::check_neighbor(edge_index,*this);  return *neighbors[edge_index]; }\n\n            const E& edge (\n                unsigned long edge_index\n            ) const { checker::check_edge(edge_index,*this);  return *edges[edge_index]; }\n\n            E& edge (\n                unsigned long edge_index\n            ) { checker::check_edge(edge_index,*this);  return *edges[edge_index]; }\n\n        private:\n            friend class graph_kernel_1;\n            typedef std_allocator<node_type*,mem_manager> alloc_type;\n            typedef std_allocator<shared_ptr<E>,mem_manager> alloc_edge_type;\n            std::vector<node_type*,alloc_type> neighbors;\n            std::vector<shared_ptr<E>,alloc_edge_type> edges;\n            unsigned long idx;\n        };\n\n    private:\n\n        typedef std_allocator<shared_ptr<node_type>,mem_manager> alloc_type;\n        typedef std::vector<shared_ptr<node_type>, alloc_type> vector_type;\n        vector_type nodes;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename E, \n        typename mem_manager,\n        bool is_checked\n        >\n    inline void swap (\n        graph_kernel_1<T,E,mem_manager,is_checked>& a, \n        graph_kernel_1<T,E,mem_manager,is_checked>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename E, \n        typename mem_manager,\n        bool is_checked\n        >\n    struct is_graph<graph_kernel_1<T,E,mem_manager, is_checked> >\n    {\n        static const bool value = true; \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void serialize (\n        const graph_kernel_1<T,E,mem_manager,is_checked>& item,\n        std::ostream& out \n    )   \n    {\n        try\n        {\n            serialize(item.number_of_nodes(), out);\n\n            // serialize each node\n            for (unsigned long i = 0; i < item.number_of_nodes(); ++i)\n            {\n                serialize(item.node(i).data, out);\n\n                // serialize all the edges\n                for (unsigned long n = 0; n < item.node(i).number_of_neighbors(); ++n)\n                {\n                    // only serialize edges that we haven't already serialized \n                    if (item.node(i).neighbor(n).index() >= i)\n                    {\n                        serialize(item.node(i).neighbor(n).index(), out);\n                        serialize(item.node(i).edge(n), out);\n                    }\n                }\n                const unsigned long stop_mark = 0xFFFFFFFF;\n                serialize(stop_mark, out);\n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing object of type graph_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void deserialize (\n        graph_kernel_1<T,E,mem_manager,is_checked>& item,\n        std::istream& in\n    )   \n    {\n        try\n        {\n            unsigned long size;\n            deserialize(size, in);\n\n            item.clear();\n            item.set_number_of_nodes(size);\n\n            // deserialize each node\n            for (unsigned long i = 0; i < item.number_of_nodes(); ++i)\n            {\n                deserialize(item.node(i).data, in);\n\n                const unsigned long stop_mark = 0xFFFFFFFF;\n                // Add all the edges going to this node's neighbors\n                unsigned long index;\n                deserialize(index, in);\n                while (index != stop_mark)\n                {\n                    item.add_edge(i, index);\n                    // find the edge\n                    unsigned long j = 0;\n                    for (j = 0; j < item.node(i).number_of_neighbors(); ++j)\n                        if (item.node(i).neighbor(j).index() == index)\n                            break;\n\n                    deserialize(item.node(i).edge(j), in);\n                    deserialize(index, in);\n                }\n\n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing object of type graph_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                             member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void graph_kernel_1<T,E,mem_manager,is_checked>::\n    set_number_of_nodes (\n        unsigned long new_size\n    )\n    {\n        try\n        {\n            nodes.resize(new_size);\n            for (unsigned long i = 0; i < nodes.size(); ++i)\n            {\n                nodes[i].reset(new node_type);\n                nodes[i]->idx = i;\n            }\n        }\n        catch (...)\n        {\n            clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    bool graph_kernel_1<T,E,mem_manager,is_checked>::\n    has_edge (\n        unsigned long node_index1,\n        unsigned long node_index2\n    ) const\n    {\n        checker::check_has_edge(node_index1, node_index2, *this);\n\n        node_type& n = *nodes[node_index1];\n\n        // search all the child nodes to see if there is a link to the right node\n        for (unsigned long i = 0; i < n.neighbors.size(); ++i)\n        {\n            if (n.neighbors[i]->idx == node_index2)\n                return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void graph_kernel_1<T,E,mem_manager,is_checked>::\n    add_edge (\n        unsigned long node_index1,\n        unsigned long node_index2\n    )\n    {\n        checker::check_add_edge(node_index1, node_index2, *this);\n        try\n        {\n            node_type& n1 = *nodes[node_index1];\n            node_type& n2 = *nodes[node_index2];\n\n            n1.neighbors.push_back(&n2);\n\n            shared_ptr<E> e(new E);\n            n1.edges.push_back(e);\n\n            // don't add this twice if this is an edge from node_index1 back to itself\n            if (node_index1 != node_index2)\n            {\n                n2.neighbors.push_back(&n1);\n                n2.edges.push_back(e);\n            }\n        }\n        catch (...)\n        {\n            clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void graph_kernel_1<T,E,mem_manager,is_checked>::\n    remove_edge (\n        unsigned long node_index1,\n        unsigned long node_index2\n    )\n    {\n        checker::check_remove_edge(node_index1, node_index2, *this);\n\n        node_type& n1 = *nodes[node_index1];\n        node_type& n2 = *nodes[node_index2];\n\n        // remove the record of the link from n1 \n        unsigned long pos = static_cast<unsigned long>(find(n1.neighbors.begin(), n1.neighbors.end(), &n2) - n1.neighbors.begin());\n        n1.neighbors.erase(n1.neighbors.begin() + pos); \n        n1.edges.erase(n1.edges.begin() + pos); \n\n        // check if this is an edge that goes from node_index1 back to itself\n        if (node_index1 != node_index2)\n        {\n            // remove the record of the link from n2 \n            unsigned long pos = static_cast<unsigned long>(find(n2.neighbors.begin(), n2.neighbors.end(), &n1) - n2.neighbors.begin());\n            n2.neighbors.erase(n2.neighbors.begin() + pos); \n            n2.edges.erase(n2.edges.begin() + pos); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    unsigned long graph_kernel_1<T,E,mem_manager,is_checked>::\n    add_node (\n    )\n    {\n        try\n        {\n            shared_ptr<node_type> n(new node_type);\n            n->idx = nodes.size();\n            nodes.push_back(n);\n            return n->idx;\n        }\n        catch (...)\n        {\n            clear();\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager,\n        bool is_checked\n        >\n    void graph_kernel_1<T,E,mem_manager,is_checked>::\n    remove_node (\n        unsigned long index\n    )\n    {\n        checker::check_remove_node(index,*this);\n\n        node_type& n = *nodes[index];\n\n        // remove all edges pointing to this node from its neighbors \n        for (unsigned long i = 0; i < n.neighbors.size(); ++i)\n        {\n            // remove the edge from this specific parent\n            unsigned long pos = static_cast<unsigned long>(find(n.neighbors[i]->neighbors.begin(), n.neighbors[i]->neighbors.end(), &n) - \n                                n.neighbors[i]->neighbors.begin());\n            n.neighbors[i]->neighbors.erase(n.neighbors[i]->neighbors.begin() + pos); \n            n.neighbors[i]->edges.erase(n.neighbors[i]->edges.begin() + pos); \n        }\n\n        // now remove this node by replacing it with the last node in the nodes vector\n        nodes[index] = nodes[nodes.size()-1];\n\n        // update the index for the node we just moved\n        nodes[index]->idx = index;\n\n        // now remove the duplicated node at the end of the vector\n        nodes.pop_back();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GRAPH_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph/graph_kernel_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_GRAPH_KERNEl_ABSTRACT_\n#ifdef DLIB_GRAPH_KERNEl_ABSTRACT_\n\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include \"../noncopyable.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename E = char,\n        typename mem_manager = default_memory_manager \n        >\n    class graph : noncopyable\n    {\n\n        /*!\n            REQUIREMENTS ON T \n                T must be swappable by a global swap() and\n                T must have a default constructor\n\n            REQUIREMENTS ON E \n                E must be swappable by a global swap() and\n                E must have a default constructor\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                The only time pointers or references to nodes or edges become invalid is when\n                they reference nodes or edges that have been removed from a graph.\n\n            INITIAL VALUE\n                number_of_nodes() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an undirected graph which is a set of nodes with undirected\n                edges connecting various nodes.  \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n        !*/\n\n    public:\n\n        typedef T type;\n        typedef E edge_type;\n        typedef mem_manager mem_manager_type;\n\n        graph(\n        );\n        /*!\n            ensures \n                - #*this is properly initialized\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n        !*/\n\n        virtual ~graph(\n        ); \n        /*!\n            ensures\n                - all resources associated with *this has been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                  If this exception is thrown then *this is unusable \n                  until clear() is called and succeeds\n        !*/\n\n        void set_number_of_nodes (\n            unsigned long new_size\n        );\n        /*!\n            ensures\n                - #number_of_nodes() == new_size\n                - for all i < new_size:\n                    - number_of_neighbors(i) == 0\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        unsigned long number_of_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of nodes in this graph\n        !*/\n\n        struct node_type\n        {\n            T data;\n            typedef graph graph_type;\n\n            unsigned long index(\n            ) const;\n            /*!\n                ensures\n                    - let G be the graph that contains the node *this\n                    - returns a number N such that G.node(N) == *this\n                      (i.e. returns the index of this node in the graph)\n            !*/\n\n            unsigned long number_of_neighbors (\n            ) const;\n            /*!\n                ensures\n                    - returns the number of nodes in this graph that are\n                      adjacent to this node.  I.e. the number of nodes\n                      that are directly connected to this node via an edge. \n            !*/\n\n            const node_type& neighbor (\n                unsigned long edge_index\n            ) const;\n            /*!\n                requires\n                    - edge_index < number_of_neighbors()\n                ensures\n                    - returns a const reference to the edge_index'th neighbor of *this\n            !*/\n\n            node_type& neighbor (\n                unsigned long edge_index\n            );\n            /*!\n                requires\n                    - edge_index < number_of_neighbors()\n                ensures\n                    - returns a non-const reference to the edge_index'th neighbor of *this\n            !*/\n\n            const E& edge (\n                unsigned long edge_index\n            ) const;\n            /*!\n                requires\n                    - edge_index < number_of_neighbors()\n                ensures\n                    - returns a const reference to the edge_index'th edge data for the\n                      edge connecting to neighbor this->neighbor(edge_index)\n            !*/\n\n            E& edge (\n                unsigned long edge_index\n            );\n            /*!\n                requires\n                    - edge_index < number_of_neighbors()\n                ensures\n                    - returns a non-const reference to the edge_index'th edge data for the\n                      edge connecting to neighbor this->neighbor(edge_index)\n            !*/\n\n        };\n\n        node_type& node (\n            unsigned long index\n        );\n        /*!\n            requires\n                - index < number_of_nodes()\n            ensures\n                - returns a non-const reference to the node with the given index\n        !*/\n\n        const node_type& node (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < number_of_nodes()\n            ensures\n                - returns a const reference to the node with the given index\n        !*/\n\n        bool has_edge (\n            unsigned long node_index1,\n            unsigned long node_index2 \n        ) const;\n        /*!\n            requires\n                - node_index1 < number_of_nodes()\n                - node_index2 < number_of_nodes()\n            ensures\n                - if (there is an edge connecting node(node_index1) and node(node_index2)) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void add_edge (\n            unsigned long node_index1,\n            unsigned long node_index2\n        );\n        /*!\n            requires\n                - node_index1 < number_of_nodes()\n                - node_index2 < number_of_nodes()\n                - has_edge(node_index1, node_index2) == false\n            ensures\n                - #has_edge(node_index1, node_index2) == true \n            throws\n                - std::bad_alloc \n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        void remove_edge (\n            unsigned long node_index1,\n            unsigned long node_index2\n        );\n        /*!\n            requires\n                - node_index1 < number_of_nodes()\n                - node_index2 < number_of_nodes()\n                - has_edge(node_index1, node_index2) == true \n            ensures\n                - #has_edge(node_index1, node_index2) == false \n            throws\n                - std::bad_alloc \n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        unsigned long add_node (\n        );\n        /*!\n            ensures\n                - does not change the index number of existing nodes\n                - adds a node with index N == number_of_nodes() such that:\n                    - #node(N).number_of_neighbors() == 0 \n                    - #number_of_nodes() == number_of_nodes() + 1\n                    - returns N  \n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        void remove_node (\n            unsigned long index\n        );\n        /*!\n            requires\n                - index < number_of_nodes()\n            ensures\n                - removes the node with the given index from the graph. \n                - removes all edges linking the removed node to the rest\n                  of the graph.\n                - the remaining node indexes are remapped so that they remain\n                  contiguous.  (This means that for all valid N, node(N) doesn't\n                  necessarily reference the same node as #node(N))\n                - #number_of_nodes() == number_of_nodes() - 1\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                  If this exception is thrown then this object reverts back \n                  to its initial state.\n        !*/\n\n        void swap (\n            graph& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    };\n\n    template <\n        typename T, \n        typename E, \n        typename mem_manager\n        >\n    inline void swap (\n        graph<T,E,mem_manager>& a, \n        graph<T,E,mem_manager>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager\n        >\n    void serialize (\n        const graph<T,E,mem_manager>& item,\n        std::ostream& out \n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    template <\n        typename T,\n        typename E,\n        typename mem_manager\n        >\n    void deserialize (\n        graph<T,E,mem_manager>& item,\n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n}\n\n#endif // DLIB_GRAPH_KERNEl_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GRAPh_\n#define DLIB_GRAPh_\n\n#include \"graph/graph_kernel_1.h\"\n\n#include \"algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename E = char,\n        typename mem_manager = default_memory_manager \n        >\n    class graph \n    {\n        graph() {}\n    public:\n                \n\n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     graph_kernel_1<T,E,mem_manager,false>    \n                    kernel_1a;\n        typedef     graph_kernel_1<T,E,mem_manager,true>    \n                    kernel_1a_c;\n \n    };\n}\n\n#endif // DLIB_GRAPh_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_cuts/find_max_factor_graph_potts.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FIND_MAX_FACTOR_GRAPH_PoTTS_Hh_\n#define DLIB_FIND_MAX_FACTOR_GRAPH_PoTTS_Hh_\n\n#include \"find_max_factor_graph_potts_abstract.h\"\n#include \"../matrix.h\"\n#include \"min_cut.h\"\n#include \"general_potts_problem.h\"\n#include \"../algs.h\"\n#include \"../graph_utils.h\"\n#include \"../array2d.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n\n        template <\n            typename potts_problem,\n            typename T = void\n            >\n        class flows_container\n        {\n            /*\n                This object notionally represents a matrix of flow values.  It's\n                overloaded to represent this matrix efficiently though.  In this case\n                it represents the matrix using a sparse representation.\n            */\n\n            typedef typename potts_problem::value_type edge_type;\n            std::vector<std::vector<edge_type> > flows;\n        public:\n\n            void setup(\n                const potts_problem& p\n            )\n            {\n                flows.resize(p.number_of_nodes());\n                for (unsigned long i = 0; i < flows.size(); ++i)\n                {\n                    flows[i].resize(p.number_of_neighbors(i));\n                }\n            }\n\n            edge_type& operator() (\n                const long r,\n                const long c\n            ) { return flows[r][c]; }\n\n            const edge_type& operator() (\n                const long r,\n                const long c\n            ) const { return flows[r][c]; }\n        };\n\n// ----------------------------------------------------------------------------------------\n\n        template <\n            typename potts_problem\n            >\n        class flows_container<potts_problem, \n                              typename enable_if_c<potts_problem::max_number_of_neighbors!=0>::type>\n        {\n            /*\n                This object notionally represents a matrix of flow values.  It's\n                overloaded to represent this matrix efficiently though.  In this case\n                it represents the matrix using a dense representation.\n\n            */\n            typedef typename potts_problem::value_type edge_type;\n            const static unsigned long max_number_of_neighbors = potts_problem::max_number_of_neighbors;\n            matrix<edge_type,0,max_number_of_neighbors> flows;\n        public:\n\n            void setup(\n                const potts_problem& p\n            )\n            {\n                flows.set_size(p.number_of_nodes(), max_number_of_neighbors);\n            }\n\n            edge_type& operator() (\n                const long r,\n                const long c\n            ) { return flows(r,c); }\n\n            const edge_type& operator() (\n                const long r,\n                const long c\n            ) const { return flows(r,c); }\n        };\n\n// ----------------------------------------------------------------------------------------\n\n        template <\n            typename potts_problem \n            >\n        class potts_flow_graph \n        {\n        public:\n            typedef typename potts_problem::value_type edge_type;\n        private:\n            /*!\n                This is a utility class used by dlib::min_cut to convert a potts_problem \n                into the kind of flow graph expected by the min_cut object's main block\n                of code.\n\n                Within this object, we will use the convention that one past \n                potts_problem::number_of_nodes() is the source node and two past is \n                the sink node.\n            !*/\n\n            potts_problem& g;\n\n            // flows(i,j) == the flow from node id i to it's jth neighbor\n            flows_container<potts_problem> flows;\n            // source_flows(i,0) == flow from source to node i, \n            // source_flows(i,1) == flow from node i to source\n            matrix<edge_type,0,2> source_flows;\n\n            // sink_flows(i,0) == flow from sink to node i, \n            // sink_flows(i,1) == flow from node i to sink\n            matrix<edge_type,0,2> sink_flows;\n\n            node_label source_label, sink_label;\n        public:\n\n            potts_flow_graph(\n                potts_problem& g_\n            ) : g(g_)\n            {\n                flows.setup(g);\n\n                source_flows.set_size(g.number_of_nodes(), 2);\n                sink_flows.set_size(g.number_of_nodes(), 2);\n                source_flows = 0;\n                sink_flows = 0;\n\n                source_label = FREE_NODE;\n                sink_label = FREE_NODE;\n\n                // setup flows based on factor potentials\n                for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n                {\n                    const edge_type temp = g.factor_value(i);\n                    if (temp < 0)\n                        source_flows(i,0) = -temp;\n                    else\n                        sink_flows(i,1) = temp;\n\n                    for (unsigned long j = 0; j < g.number_of_neighbors(i); ++j)\n                    {\n                        flows(i,j) = g.factor_value_disagreement(i, g.get_neighbor(i,j));\n                    }\n                }\n            }\n\n            class out_edge_iterator\n            {\n                friend class potts_flow_graph;\n                unsigned long idx; // base node idx\n                unsigned long cnt; // count over the neighbors of idx\n            public:\n\n                out_edge_iterator(\n                ):idx(0),cnt(0){}\n\n                out_edge_iterator(\n                    unsigned long idx_,\n                    unsigned long cnt_\n                ):idx(idx_),cnt(cnt_)\n                {}\n\n                bool operator!= (\n                    const out_edge_iterator& item\n                ) const { return cnt != item.cnt; }\n\n                out_edge_iterator& operator++(\n                )\n                {\n                    ++cnt;\n                    return *this;\n                }\n            };\n\n            class in_edge_iterator\n            {\n                friend class potts_flow_graph;\n                unsigned long idx; // base node idx\n                unsigned long cnt; // count over the neighbors of idx\n            public:\n\n                in_edge_iterator(\n                ):idx(0),cnt(0)  \n                {}\n\n\n                in_edge_iterator(\n                    unsigned long idx_,\n                    unsigned long cnt_\n                ):idx(idx_),cnt(cnt_)\n                {}\n\n                bool operator!= (\n                    const in_edge_iterator& item\n                ) const { return cnt != item.cnt; }\n\n                in_edge_iterator& operator++(\n                )\n                {\n                    ++cnt;\n                    return *this;\n                }\n            };\n\n            unsigned long number_of_nodes (\n            ) const { return g.number_of_nodes() + 2; }\n\n            out_edge_iterator out_begin(\n                const unsigned long& it\n            ) const { return out_edge_iterator(it, 0); }\n\n            in_edge_iterator in_begin(\n                const unsigned long& it\n            ) const { return in_edge_iterator(it, 0); }\n\n            out_edge_iterator out_end(\n                const unsigned long& it\n            ) const \n            { \n                if (it >= g.number_of_nodes())\n                    return out_edge_iterator(it, g.number_of_nodes()); \n                else\n                    return out_edge_iterator(it, g.number_of_neighbors(it)+2); \n            }\n\n            in_edge_iterator in_end(\n                const unsigned long& it\n            ) const \n            { \n                if (it >= g.number_of_nodes())\n                    return in_edge_iterator(it, g.number_of_nodes()); \n                else\n                    return in_edge_iterator(it, g.number_of_neighbors(it)+2); \n            }\n\n\n            template <typename iterator_type>\n            unsigned long node_id (\n                const iterator_type& it\n            ) const \n            { \n                // if this isn't an iterator over the source or sink nodes\n                if (it.idx < g.number_of_nodes())\n                {\n                    const unsigned long num = g.number_of_neighbors(it.idx);\n                    if (it.cnt < num)\n                        return g.get_neighbor(it.idx, it.cnt); \n                    else if (it.cnt == num)\n                        return g.number_of_nodes();\n                    else\n                        return g.number_of_nodes()+1;\n                }\n                else\n                {\n                    return it.cnt;\n                }\n            }\n\n\n            edge_type get_flow (\n                const unsigned long& it1,     \n                const unsigned long& it2\n            ) const\n            {\n                if (it1 >= g.number_of_nodes())\n                {\n                    // if it1 is the source\n                    if (it1 == g.number_of_nodes())\n                    {\n                        return source_flows(it2,0);\n                    }\n                    else // if it1 is the sink\n                    {\n                        return sink_flows(it2,0);\n                    }\n                }\n                else if (it2 >= g.number_of_nodes())\n                {\n                    // if it2 is the source\n                    if (it2 == g.number_of_nodes())\n                    {\n                        return source_flows(it1,1);\n                    }\n                    else // if it2 is the sink\n                    {\n                        return sink_flows(it1,1);\n                    }\n                }\n                else\n                {\n                    return flows(it1, g.get_neighbor_idx(it1, it2));\n                }\n\n            }\n\n            edge_type get_flow (\n                const out_edge_iterator& it\n            ) const\n            {\n                if (it.idx < g.number_of_nodes())\n                {\n                    const unsigned long num = g.number_of_neighbors(it.idx);\n                    if (it.cnt < num)\n                        return flows(it.idx, it.cnt);\n                    else if (it.cnt == num)\n                        return source_flows(it.idx,1);\n                    else\n                        return sink_flows(it.idx,1);\n                }\n                else\n                {\n                    // if it.idx is the source\n                    if (it.idx == g.number_of_nodes())\n                    {\n                        return source_flows(it.cnt,0);\n                    }\n                    else // if it.idx is the sink\n                    {\n                        return sink_flows(it.cnt,0);\n                    }\n                }\n            }\n\n            edge_type get_flow (\n                const in_edge_iterator& it\n            ) const\n            {\n                return get_flow(node_id(it), it.idx); \n            }\n\n            void adjust_flow (\n                const unsigned long& it1,     \n                const unsigned long& it2,     \n                const edge_type& value\n            )\n            {\n                if (it1 >= g.number_of_nodes())\n                {\n                    // if it1 is the source\n                    if (it1 == g.number_of_nodes())\n                    {\n                        source_flows(it2,0) += value;\n                        source_flows(it2,1) -= value;\n                    }\n                    else // if it1 is the sink\n                    {\n                        sink_flows(it2,0) += value;\n                        sink_flows(it2,1) -= value;\n                    }\n                }\n                else if (it2 >= g.number_of_nodes())\n                {\n                    // if it2 is the source\n                    if (it2 == g.number_of_nodes())\n                    {\n                        source_flows(it1,1) += value;\n                        source_flows(it1,0) -= value;\n                    }\n                    else // if it2 is the sink\n                    {\n                        sink_flows(it1,1) += value;\n                        sink_flows(it1,0) -= value;\n                    }\n                }\n                else\n                {\n                    flows(it1, g.get_neighbor_idx(it1, it2)) += value;\n                    flows(it2, g.get_neighbor_idx(it2, it1)) -= value;\n                }\n\n            }\n\n            void set_label (\n                const unsigned long& it,\n                node_label value\n            )\n            {\n                if (it < g.number_of_nodes())\n                    g.set_label(it, value);\n                else if (it == g.number_of_nodes())\n                    source_label = value;\n                else \n                    sink_label = value;\n            }\n\n            node_label get_label (\n                const unsigned long& it\n            ) const\n            {\n                if (it < g.number_of_nodes())\n                    return g.get_label(it);\n                if (it == g.number_of_nodes())\n                    return source_label;\n                else\n                    return sink_label;\n            }\n\n        };\n\n// ----------------------------------------------------------------------------------------\n\n        template <\n            typename label_image_type,\n            typename image_potts_model\n            >\n        class potts_grid_problem \n        {\n            label_image_type& label_img;\n            long nc;\n            long num_nodes;\n            unsigned char* labels;\n            const image_potts_model& model;\n\n        public:\n            const static unsigned long max_number_of_neighbors = 4;\n\n            potts_grid_problem (\n                label_image_type& label_img_,\n                const image_potts_model& image_potts_model_\n            ) : \n                label_img(label_img_),\n                model(image_potts_model_)\n            {\n                num_nodes = model.nr()*model.nc();\n                nc = model.nc();\n                labels = &label_img[0][0];\n            }\n\n            unsigned long number_of_nodes (\n            ) const { return num_nodes; }\n\n            unsigned long number_of_neighbors (\n                unsigned long \n            ) const \n            { \n                return 4;\n            }\n\n            unsigned long get_neighbor_idx (\n                long node_id1,\n                long node_id2\n            ) const\n            {\n                long diff = node_id2-node_id1;\n                if (diff > nc)\n                    diff -= (long)number_of_nodes();\n                else if (diff < -nc)\n                    diff += (long)number_of_nodes();\n\n                if (diff == 1) \n                    return 0;\n                else if (diff == -1)\n                    return 1;\n                else if (diff == nc)\n                    return 2;\n                else\n                    return 3;\n            }\n\n            unsigned long get_neighbor (\n                long node_id,\n                long idx\n            ) const\n            {\n                switch(idx)\n                {\n                    case 0: \n                        {\n                            long temp = node_id+1;\n                            if (temp < (long)number_of_nodes())\n                                return temp;\n                            else\n                                return temp - (long)number_of_nodes();\n                        }\n                    case 1: \n                        {\n                            long temp = node_id-1;\n                            if (node_id >= 1)\n                                return temp;\n                            else\n                                return temp + (long)number_of_nodes();\n                        }\n                    case 2: \n                        {\n                            long temp = node_id+nc;\n                            if (temp < (long)number_of_nodes())\n                                return temp;\n                            else\n                                return temp - (long)number_of_nodes();\n                        }\n                    case 3: \n                        {\n                            long temp = node_id-nc;\n                            if (node_id >= nc)\n                                return temp;\n                            else\n                                return temp + (long)number_of_nodes();\n                        }\n                }\n                return 0;\n            }\n\n            void set_label (\n                const unsigned long& idx,\n                node_label value\n            )\n            {\n                *(labels+idx) = value;\n            }\n\n            node_label get_label (\n                const unsigned long& idx\n            ) const\n            {\n                return *(labels+idx);\n            }\n\n            typedef typename image_potts_model::value_type value_type;\n\n            value_type factor_value (unsigned long idx) const\n            {\n                return model.factor_value(idx);\n            }\n\n            value_type factor_value_disagreement (unsigned long idx1, unsigned long idx2) const\n            {\n                return model.factor_value_disagreement(idx1,idx2);\n            }\n\n        };\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename potts_model\n        >\n    typename potts_model::value_type potts_model_score (\n        const potts_model& prob\n    )\n    {\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < prob.number_of_nodes(); ++i)\n        {\n            for (unsigned long jj = 0; jj < prob.number_of_neighbors(i); ++jj)\n            {\n                unsigned long j = prob.get_neighbor(i,jj);\n                DLIB_ASSERT(prob.factor_value_disagreement(i,j) >= 0,\n                    \"\\t value_type potts_model_score(prob)\"\n                    << \"\\n\\t Invalid inputs were given to this function.\" \n                    << \"\\n\\t i: \" << i \n                    << \"\\n\\t j: \" << j \n                    << \"\\n\\t prob.factor_value_disagreement(i,j): \" << prob.factor_value_disagreement(i,j)\n                    );\n                DLIB_ASSERT(prob.factor_value_disagreement(i,j) == prob.factor_value_disagreement(j,i),\n                    \"\\t value_type potts_model_score(prob)\"\n                    << \"\\n\\t Invalid inputs were given to this function.\" \n                    << \"\\n\\t i: \" << i \n                    << \"\\n\\t j: \" << j \n                    << \"\\n\\t prob.factor_value_disagreement(i,j): \" << prob.factor_value_disagreement(i,j)\n                    << \"\\n\\t prob.factor_value_disagreement(j,i): \" << prob.factor_value_disagreement(j,i)\n                    );\n            }\n        }\n#endif \n\n        typename potts_model::value_type score = 0;\n        for (unsigned long i = 0; i < prob.number_of_nodes(); ++i)\n        {\n            const bool label = (prob.get_label(i)!=0);\n            if (label)\n                score += prob.factor_value(i);\n        }\n\n        for (unsigned long i = 0; i < prob.number_of_nodes(); ++i)\n        {\n            for (unsigned long n = 0; n < prob.number_of_neighbors(i); ++n)\n            {\n                const unsigned long idx2 = prob.get_neighbor(i,n);\n                const bool label_i = (prob.get_label(i)!=0);\n                const bool label_idx2 = (prob.get_label(idx2)!=0);\n                if (label_i != label_idx2 && i < idx2)\n                    score -= prob.factor_value_disagreement(i, idx2);\n            }\n        }\n\n        return score;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type \n        >\n    typename graph_type::edge_type potts_model_score (\n        const graph_type& g,\n        const std::vector<node_label>& labels\n    )\n    {\n        DLIB_ASSERT(graph_contains_length_one_cycle(g) == false,\n                    \"\\t edge_type potts_model_score(g,labels)\"\n                    << \"\\n\\t Invalid inputs were given to this function.\" \n                    );\n        typedef typename graph_type::edge_type edge_type;\n        typedef typename graph_type::type type;\n\n        // The edges and node's have to use the same type to represent factor weights!\n        COMPILE_TIME_ASSERT((is_same_type<edge_type, type>::value == true));\n\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n        {\n            for (unsigned long jj = 0; jj < g.node(i).number_of_neighbors(); ++jj)\n            {\n                unsigned long j = g.node(i).neighbor(jj).index();\n                DLIB_ASSERT(edge(g,i,j) >= 0,\n                    \"\\t edge_type potts_model_score(g,labels)\"\n                    << \"\\n\\t Invalid inputs were given to this function.\" \n                    << \"\\n\\t i: \" << i \n                    << \"\\n\\t j: \" << j \n                    << \"\\n\\t edge(g,i,j): \" << edge(g,i,j)\n                    );\n            }\n        }\n#endif \n\n        typename graph_type::edge_type score = 0;\n        for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n        {\n            const bool label = (labels[i]!=0);\n            if (label)\n                score += g.node(i).data;\n        }\n\n        for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n        {\n            for (unsigned long n = 0; n < g.node(i).number_of_neighbors(); ++n)\n            {\n                const unsigned long idx2 = g.node(i).neighbor(n).index();\n                const bool label_i = (labels[i]!=0);\n                const bool label_idx2 = (labels[idx2]!=0);\n                if (label_i != label_idx2 && i < idx2)\n                    score -= g.node(i).edge(n);\n            }\n        }\n\n        return score;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename potts_grid_problem,\n        typename mem_manager\n        >\n    typename potts_grid_problem::value_type potts_model_score (\n        const potts_grid_problem& prob,\n        const array2d<node_label,mem_manager>& labels\n    )\n    {\n        DLIB_ASSERT(prob.nr() == labels.nr() && prob.nc() == labels.nc(),\n            \"\\t value_type potts_model_score(prob,labels)\"\n            << \"\\n\\t Invalid inputs were given to this function.\" \n            << \"\\n\\t prob.nr(): \" << labels.nr()\n            << \"\\n\\t prob.nc(): \" << labels.nc()\n            );\n        typedef array2d<node_label,mem_manager> image_type;\n        // This const_cast is ok because the model object won't actually modify labels\n        dlib::impl::potts_grid_problem<image_type,potts_grid_problem> model(const_cast<image_type&>(labels),prob);\n        return potts_model_score(model);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename potts_model\n        >\n    void find_max_factor_graph_potts (\n        potts_model& prob\n    )\n    {\n#ifdef ENABLE_ASSERTS\n        for (unsigned long node_i = 0; node_i < prob.number_of_nodes(); ++node_i)\n        {\n            for (unsigned long jj = 0; jj < prob.number_of_neighbors(node_i); ++jj)\n            {\n                unsigned long node_j = prob.get_neighbor(node_i,jj);\n                DLIB_ASSERT(prob.get_neighbor_idx(node_j,node_i) < prob.number_of_neighbors(node_j),\n                    \"\\t void find_max_factor_graph_potts(prob)\"\n                    << \"\\n\\t The supplied potts problem defines an invalid graph.\" \n                    << \"\\n\\t node_i: \" << node_i \n                    << \"\\n\\t node_j: \" << node_j \n                    << \"\\n\\t prob.get_neighbor_idx(node_j,node_i): \" << prob.get_neighbor_idx(node_j,node_i)\n                    << \"\\n\\t prob.number_of_neighbors(node_j):     \" << prob.number_of_neighbors(node_j)\n                            );\n\n                DLIB_ASSERT(prob.get_neighbor_idx(node_i,prob.get_neighbor(node_i,jj)) == jj,\n                    \"\\t void find_max_factor_graph_potts(prob)\"\n                    << \"\\n\\t The get_neighbor_idx() and get_neighbor() functions must be inverses of each other.\" \n                    << \"\\n\\t node_i: \" << node_i \n                    << \"\\n\\t jj:     \" << jj\n                    << \"\\n\\t prob.get_neighbor(node_i,jj): \" << prob.get_neighbor(node_i,jj)\n                    << \"\\n\\t prob.get_neighbor_idx(node_i,prob.get_neighbor(node_i,jj)): \" << prob.get_neighbor_idx(node_i,node_j)\n                            );\n\n                DLIB_ASSERT(prob.get_neighbor(node_j,prob.get_neighbor_idx(node_j,node_i))==node_i,\n                    \"\\t void find_max_factor_graph_potts(prob)\"\n                    << \"\\n\\t The get_neighbor_idx() and get_neighbor() functions must be inverses of each other.\" \n                    << \"\\n\\t node_i: \" << node_i \n                    << \"\\n\\t node_j: \" << node_j \n                    << \"\\n\\t prob.get_neighbor_idx(node_j,node_i): \" << prob.get_neighbor_idx(node_j,node_i)\n                    << \"\\n\\t prob.get_neighbor(node_j,prob.get_neighbor_idx(node_j,node_i)): \" << prob.get_neighbor(node_j,prob.get_neighbor_idx(node_j,node_i))\n                            );\n\n                DLIB_ASSERT(prob.factor_value_disagreement(node_i,node_j) >= 0,\n                    \"\\t void find_max_factor_graph_potts(prob)\"\n                    << \"\\n\\t Invalid inputs were given to this function.\" \n                    << \"\\n\\t node_i: \" << node_i \n                    << \"\\n\\t node_j: \" << node_j \n                    << \"\\n\\t prob.factor_value_disagreement(node_i,node_j): \" << prob.factor_value_disagreement(node_i,node_j)\n                    );\n                DLIB_ASSERT(prob.factor_value_disagreement(node_i,node_j) == prob.factor_value_disagreement(node_j,node_i),\n                    \"\\t void find_max_factor_graph_potts(prob)\"\n                    << \"\\n\\t Invalid inputs were given to this function.\" \n                    << \"\\n\\t node_i: \" << node_i \n                    << \"\\n\\t node_j: \" << node_j \n                    << \"\\n\\t prob.factor_value_disagreement(node_i,node_j): \" << prob.factor_value_disagreement(node_i,node_j)\n                    << \"\\n\\t prob.factor_value_disagreement(node_j,node_i): \" << prob.factor_value_disagreement(node_j,node_i)\n                    );\n            }\n        }\n#endif \n        COMPILE_TIME_ASSERT(is_signed_type<typename potts_model::value_type>::value);\n        min_cut mc;\n        dlib::impl::potts_flow_graph<potts_model> pfg(prob);\n        mc(pfg, prob.number_of_nodes(), prob.number_of_nodes()+1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type \n        >\n    void find_max_factor_graph_potts (\n        const graph_type& g,\n        std::vector<node_label>& labels\n    )\n    {\n        DLIB_ASSERT(graph_contains_length_one_cycle(g) == false,\n                    \"\\t void find_max_factor_graph_potts(g,labels)\"\n                    << \"\\n\\t Invalid inputs were given to this function.\" \n                    );\n        typedef typename graph_type::edge_type edge_type;\n        typedef typename graph_type::type type;\n\n        // The edges and node's have to use the same type to represent factor weights!\n        COMPILE_TIME_ASSERT((is_same_type<edge_type, type>::value == true));\n        COMPILE_TIME_ASSERT(is_signed_type<edge_type>::value);\n\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n        {\n            for (unsigned long jj = 0; jj < g.node(i).number_of_neighbors(); ++jj)\n            {\n                unsigned long j = g.node(i).neighbor(jj).index();\n                DLIB_ASSERT(edge(g,i,j) >= 0,\n                    \"\\t void find_max_factor_graph_potts(g,labels)\"\n                    << \"\\n\\t Invalid inputs were given to this function.\" \n                    << \"\\n\\t i: \" << i \n                    << \"\\n\\t j: \" << j \n                    << \"\\n\\t edge(g,i,j): \" << edge(g,i,j)\n                    );\n            }\n        }\n#endif \n\n        dlib::impl::general_potts_problem<graph_type> gg(g, labels);\n        find_max_factor_graph_potts(gg);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename potts_grid_problem,\n        typename mem_manager\n        >\n    void find_max_factor_graph_potts (\n        const potts_grid_problem& prob,\n        array2d<node_label,mem_manager>& labels\n    )\n    {\n        typedef array2d<node_label,mem_manager> image_type;\n        labels.set_size(prob.nr(), prob.nc());\n        dlib::impl::potts_grid_problem<image_type,potts_grid_problem> model(labels,prob);\n        find_max_factor_graph_potts(model);\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    namespace impl\n    {\n        template <\n            typename pixel_type1,\n            typename pixel_type2,\n            typename model_type\n            >\n        struct potts_grid_image_pair_model\n        {\n            const pixel_type1* data1;\n            const pixel_type2* data2;\n            const model_type& model;\n            const long nr_;\n            const long nc_;\n            template <typename image_type1, typename image_type2>\n            potts_grid_image_pair_model(\n                const model_type& model_,\n                const image_type1& img1,\n                const image_type2& img2\n            ) :\n                model(model_),\n                nr_(img1.nr()),\n                nc_(img1.nc())\n            {\n                data1 = &img1[0][0];\n                data2 = &img2[0][0];\n            }\n\n            typedef typename model_type::value_type value_type;\n\n            long nr() const { return nr_; }\n            long nc() const { return nc_; }\n\n            value_type factor_value (\n                unsigned long idx\n            ) const \n            {\n                return model.factor_value(*(data1 + idx), *(data2 + idx));\n            }\n\n            value_type factor_value_disagreement (\n                unsigned long idx1,\n                unsigned long idx2\n            ) const \n            {\n                return model.factor_value_disagreement(*(data1 + idx1), *(data1 + idx2));\n            }\n        };\n\n    // ---------------------------------------------------------------------------------------- \n\n        template <\n            typename image_type,\n            typename model_type\n            >\n        struct potts_grid_image_single_model\n        {\n            const typename image_type::type* data1;\n            const model_type& model;\n            const long nr_;\n            const long nc_;\n            potts_grid_image_single_model(\n                const model_type& model_,\n                const image_type& img1\n            ) :\n                model(model_),\n                nr_(img1.nr()),\n                nc_(img1.nc())\n            {\n                data1 = &img1[0][0];\n            }\n\n            typedef typename model_type::value_type value_type;\n\n            long nr() const { return nr_; }\n            long nc() const { return nc_; }\n\n            value_type factor_value (\n                unsigned long idx\n            ) const \n            {\n                return model.factor_value(*(data1 + idx));\n            }\n\n            value_type factor_value_disagreement (\n                unsigned long idx1,\n                unsigned long idx2\n            ) const \n            {\n                return model.factor_value_disagreement(*(data1 + idx1), *(data1 + idx2));\n            }\n        };\n\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    template <\n        typename pair_image_model,\n        typename pixel_type1,\n        typename pixel_type2,\n        typename mem_manager\n        >\n    impl::potts_grid_image_pair_model<pixel_type1, pixel_type2, pair_image_model> make_potts_grid_problem (\n        const pair_image_model& model,\n        const array2d<pixel_type1,mem_manager>& img1,\n        const array2d<pixel_type2,mem_manager>& img2\n    )\n    {\n        DLIB_ASSERT(get_rect(img1) == get_rect(img2),\n            \"\\t potts_grid_problem make_potts_grid_problem()\"\n            << \"\\n\\t Invalid inputs were given to this function.\" \n            << \"\\n\\t get_rect(img1): \" << get_rect(img1)\n            << \"\\n\\t get_rect(img2): \" << get_rect(img2)\n            );\n        typedef impl::potts_grid_image_pair_model<pixel_type1, pixel_type2, pair_image_model> potts_type;\n        return potts_type(model,img1,img2);\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    template <\n        typename single_image_model,\n        typename pixel_type,\n        typename mem_manager\n        >\n    impl::potts_grid_image_single_model<array2d<pixel_type,mem_manager>, single_image_model> make_potts_grid_problem (\n        const single_image_model& model,\n        const array2d<pixel_type,mem_manager>& img\n    )\n    {\n        typedef impl::potts_grid_image_single_model<array2d<pixel_type,mem_manager>, single_image_model> potts_type;\n        return potts_type(model,img);\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n}\n\n#endif // DLIB_FIND_MAX_FACTOR_GRAPH_PoTTS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_cuts/find_max_factor_graph_potts_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FIND_MAX_FACTOR_GRAPH_PoTTS_ABSTRACT_Hh_\n#ifdef DLIB_FIND_MAX_FACTOR_GRAPH_PoTTS_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n#include \"min_cut_abstract.h\"\n#include \"../graph_utils.h\"\n#include \"../array2d/array2d_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class potts_problem \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a boolean valued factor graph or graphical model \n                that can be efficiently operated on using graph cuts.  In particular, this \n                object defines the interface a MAP problem on a factor graph must \n                implement if it is to be solved using the find_max_factor_graph_potts() \n                routine defined at the bottom of this file.  \n\n                Note that there is no dlib::potts_problem object.  What you are looking \n                at here is simply the interface definition for a Potts problem.  You must \n                implement your own version of this object for the problem you wish to \n                solve and then pass it to the find_max_factor_graph_potts() routine.\n\n                Note also that a factor graph should not have any nodes which are \n                neighbors with themselves.  Additionally, the graph is undirected. This\n                mean that if A is a neighbor of B then B must be a neighbor of A for\n                the MAP problem to be valid.\n        !*/\n\n    public:\n\n        unsigned long number_of_nodes (\n        ) const; \n        /*!\n            ensures\n                - returns the number of nodes in the factor graph.  Or in other words, \n                  returns the number of variables in the MAP problem/Potts model.\n        !*/\n\n        unsigned long number_of_neighbors (\n            unsigned long idx\n        ) const; \n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - returns the number of neighbors of node idx.\n        !*/\n\n        // This is an optional variable which specifies a number that is always\n        // greater than or equal to number_of_neighbors(idx).  If you don't know\n        // the value at compile time then either don't include max_number_of_neighbors \n        // in your potts_problem object or set it to 0.\n        const static unsigned long max_number_of_neighbors = 0; \n\n        unsigned long get_neighbor (\n            unsigned long idx,\n            unsigned long n \n        ) const;\n        /*!\n            requires\n                - idx < number_of_nodes()\n                - n < number_of_neighbors(idx)\n            ensures\n                - returns the node index value of the n-th neighbor of \n                  the node with index value idx.\n                - The neighbor relationship is reciprocal.  That is, if \n                  get_neighbor(A,i)==B then there is a value of j such \n                  that get_neighbor(B,j)==A.\n                - A node is never its own neighbor.  That is, there is\n                  no i such that get_neighbor(idx,i)==idx.\n        !*/\n\n        unsigned long get_neighbor_idx (\n            unsigned long idx1,\n            unsigned long idx2\n        ) const;\n        /*!\n            requires\n                - idx1 < number_of_nodes()\n                - idx2 < number_of_nodes()\n            ensures\n                - This function is basically the inverse of get_neighbor().\n                - returns a number IDX such that:\n                    - get_neighbor(idx1,IDX) == idx2\n                    - IDX < number_of_neighbors(idx1)\n        !*/\n\n        void set_label (\n            const unsigned long& idx,\n            node_label value\n        );\n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - #get_label(idx) == value\n        !*/\n\n        node_label get_label (\n            const unsigned long& idx\n        ) const;\n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - returns the current label for the idx-th node.  This is a value which is\n                  0 if the node's label is false and is any other value if it is true.  \n\n                  Note that this value is not used by factor_value() or factor_value_disagreement().\n                  It is simply here to provide a mechanism for find_max_factor_graph_potts()\n                  to return its labeled result.  Additionally, the reason it returns a \n                  node_label rather than a bool is because doing it this way facilitates \n                  use of a graph cut algorithm for the solution of the MAP problem.  For \n                  more of an explanation you should read the paper referenced by the min_cut\n                  object.\n        !*/\n\n        // This typedef should be for a type like int or double.  It\n        // must also be capable of representing signed values.\n        typedef an_integer_or_real_type value_type;\n\n        value_type factor_value (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - returns a value which indicates how \"good\" it is to assign the idx-th\n                  node the label of true.  The larger the value, the more desirable it is \n                  to give it this label.  Similarly, a negative value indicates that it is\n                  better to give the node a label of false.\n                - It is valid for the returned value to be positive or negative infinity.  \n                  A value of positive infinity indicates that the idx-th node must be labeled\n                  true while negative infinity means it must be labeled false.\n        !*/\n\n        value_type factor_value_disagreement (\n            unsigned long idx1, \n            unsigned long idx2\n        ) const;\n        /*!\n            requires\n                - idx1 < number_of_nodes()\n                - idx2 < number_of_nodes()\n                - idx1 != idx2\n                - the idx1-th node and idx2-th node are neighbors in the graph.  That is, \n                  get_neighbor(idx1,i)==idx2 for some value of i.\n            ensures\n                - returns a number >= 0.  This is the penalty for giving node idx1 and idx2\n                  different labels.  Larger values indicate a larger penalty.\n                - this function is symmetric.  That is, it is true that: \n                  factor_value_disagreement(i,j) == factor_value_disagreement(j,i)\n                - It is valid for the returned value to be positive infinity.  Returning\n                  infinity indicates that the idx1-th and idx2-th nodes must share the same \n                  label.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class potts_grid_problem \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a specialization of a potts_problem to the case where\n                the graph is a regular grid where each node is connected to its four\n                neighbors.  An example of this is an image where each pixel is a node\n                and is connected to its four immediate neighboring pixels.  Therefore,\n                this object defines the interface this special kind of MAP problem\n                must implement if it is to be solved by the find_max_factor_graph_potts(potts_grid_problem,array2d)\n                routine defined at the end of this file.\n\n\n                Note that all nodes always have four neighbors, even nodes on the edge\n                of the graph.  This is because these border nodes are connected to\n                the border nodes on the other side of the graph.  That is, the graph\n                \"wraps\" around at the borders.  \n        !*/\n\n    public:\n\n        // This typedef should be for a type like int or double.  It\n        // must also be capable of representing signed values.\n        typedef an_integer_or_real_type value_type;\n\n        long nr(\n        ) const; \n        /*!\n            ensures\n                - returns the number of rows in the grid\n        !*/\n\n        long nc(\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns in the grid\n        !*/\n\n        value_type factor_value (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < nr()*nc()\n            ensures\n                - The grid is represented in row-major-order format.  Therefore, idx\n                  identifies a node according to its position in the row-major-order \n                  representation of the grid graph.  Or in other words, idx corresponds\n                  to the following row and column location in the graph:\n                    - row == idx/nc()\n                    - col == idx%nc()\n                - returns a value which indicates how \"good\" it is to assign the idx-th \n                  node the label of true.  The larger the value, the more desirable it is \n                  to give it this label.  Similarly, a negative value indicates that it is\n                  better to give the node a label of false.\n                - It is valid for the returned value to be positive or negative infinity.  \n                  A value of positive infinity indicates that the idx-th node must be labeled\n                  true while negative infinity means it must be labeled false.\n        !*/\n\n        value_type factor_value_disagreement (\n            unsigned long idx1,\n            unsigned long idx2\n        ) const;\n        /*!\n            requires\n                - idx1 < nr()*nc()\n                - idx2 < nr()*nc()\n                - idx1 != idx2\n                - the idx1-th node and idx2-th node are neighbors in the grid graph.  \n            ensures\n                - The grid is represented in row-major-order format.  Therefore, idx1 and \n                  idx2 identify nodes according to their positions in the row-major-order \n                  representation of the grid graph.  For example, idx1 corresponds\n                  to the following row and column location in the graph:\n                    - row == idx1/nc()\n                    - col == idx1%nc()\n                - returns a number >= 0.  This is the penalty for giving node idx1 and idx2\n                  different labels.  Larger values indicate a larger penalty.\n                - this function is symmetric.  That is, it is true that: \n                  factor_value_disagreement(i,j) == factor_value_disagreement(j,i)\n                - It is valid for the returned value to be positive infinity.  Returning\n                  infinity indicates that the idx1-th and idx2-th nodes must share the same \n                  label.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename potts_problem\n        >\n    typename potts_problem::value_type potts_model_score (\n        const potts_problem& prob \n    );\n    /*!\n        requires\n            - potts_problem == an object with an interface compatible with the potts_problem \n              object defined at the top of this file.\n            - for all valid i and j:\n                - prob.factor_value_disagreement(i,j) >= 0\n                - prob.factor_value_disagreement(i,j) == prob.factor_value_disagreement(j,i)\n        ensures\n            - computes the model score for the given potts_problem.  We define this\n              precisely below:\n                - let L(i) == the boolean label of the i-th variable in prob.  Or in other \n                  words, L(i) == (prob.get_label(i) != 0).\n                - let F == the sum of values of prob.factor_value(i) for only i values\n                  where L(i) == true.\n                - Let D == the sum of values of prob.factor_value_disagreement(i,j) \n                  for only i and j values which meet the following conditions:\n                    - i and j are neighbors in the graph defined by prob, that is,\n                      it is valid to call prob.factor_value_disagreement(i,j).\n                    - L(i) != L(j)\n                    - i < j\n                      (i.e. We want to make sure to only count the edge between i and j once)\n\n                - Then this function returns F - D\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type \n        >\n    typename graph_type::edge_type potts_model_score (\n        const graph_type& g,\n        const std::vector<node_label>& labels\n    );\n    /*!\n        requires\n            - graph_type is an implementation of dlib/graph/graph_kernel_abstract.h\n            - graph_type::edge_type is some signed type such as int or double\n            - graph_type::type must be the same type as graph_type::edge_type \n            - graph_contains_length_one_cycle(g) == false\n            - for all valid i and j:\n                - edge(g,i,j) >= 0\n        ensures\n            - This function does the same thing as the version of potts_model_score()\n              defined above, except that this version operates on a dlib::graph\n              instead of a potts_problem object.\n            - computes the model score for the given graph and labeling.  We define this\n              precisely below:\n                - let L(i) == the boolean label of the i-th variable in g.  Or in other \n                  words, L(i) == (labels[i] != 0).\n                - let F == the sum of values of g.node(i).data for only i values\n                  where L(i) == true.\n                - Let D == the sum of values of edge(g,i,j) for only i and j \n                  values which meet the following conditions:\n                    - i and j are neighbors in the graph defined by g, that is,\n                      it is valid to call edge(g,i,j).\n                    - L(i) != L(j)\n                    - i < j\n                      (i.e. We want to make sure to only count the edge between i and j once)\n\n                - Then this function returns F - D\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename potts_grid_problem,\n        typename mem_manager\n        >\n    typename potts_grid_problem::value_type potts_model_score (\n        const potts_grid_problem& prob,\n        const array2d<node_label,mem_manager>& labels\n    );\n    /*!\n        requires\n            - prob.nr() == labels.nr()\n            - prob.nc() == labels.nc()\n            - potts_grid_problem == an object with an interface compatible with the \n              potts_grid_problem object defined above.\n            - for all valid i and j:\n                - prob.factor_value_disagreement(i,j) >= 0\n                - prob.factor_value_disagreement(i,j) == prob.factor_value_disagreement(j,i)\n        ensures\n            - computes the model score for the given potts_grid_problem.  We define this\n              precisely below:\n                - let L(i) == the boolean label of the i-th variable in prob.  Or in other \n                  words, L(i) == (labels[i/labels.nc()][i%labels.nc()] != 0).\n                - let F == the sum of values of prob.factor_value(i) for only i values\n                  where L(i) == true.\n                - Let D == the sum of values of prob.factor_value_disagreement(i,j) \n                  for only i and j values which meet the following conditions:\n                    - i and j are neighbors in the graph defined by prob, that is,\n                      it is valid to call prob.factor_value_disagreement(i,j).\n                    - L(i) != L(j)\n                    - i < j\n                      (i.e. We want to make sure to only count the edge between i and j once)\n\n                - Then this function returns F - D\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename potts_problem\n        >\n    void find_max_factor_graph_potts (\n        potts_problem& prob \n    );\n    /*!\n        requires\n            - potts_problem == an object with an interface compatible with the potts_problem \n              object defined at the top of this file.\n            - for all valid i and j:\n                - prob.factor_value_disagreement(i,j) >= 0\n                - prob.factor_value_disagreement(i,j) == prob.factor_value_disagreement(j,i)\n        ensures\n            - This function is a tool for exactly solving the MAP problem in a Potts\n              model.  In particular, this means that this function finds the assignments \n              to all the labels in prob which maximizes potts_model_score(#prob).\n            - The optimal labels are stored in #prob.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type \n        >\n    void find_max_factor_graph_potts (\n        const graph_type& g,\n        std::vector<node_label>& labels\n    );\n    /*!\n        requires\n            - graph_type is an implementation of dlib/graph/graph_kernel_abstract.h\n            - graph_type::edge_type is some signed type such as int or double\n            - graph_type::type must be the same type as graph_type::edge_type \n            - graph_contains_length_one_cycle(g) == false\n            - for all valid i and j:\n                - edge(g,i,j) >= 0\n        ensures\n            - This routine simply converts g into a potts_problem and calls the\n              version of find_max_factor_graph_potts() defined above on it.  Therefore,\n              this routine is just a convenience wrapper that lets you use a dlib::graph\n              to represent a potts problem.  This means that this function maximizes \n              the value of potts_model_score(g, #labels).\n            - #labels.size() == g.number_of_nodes() \n            - for all valid i:  \n                - #labels[i] == the optimal label for g.node(i)\n            - The correspondence between g and a potts_problem is the following:\n                - the factor_value() for a node is stored in g.node(i).data.\n                - the factor_value_disagreement(i,j) is stored in edge(g,i,j).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename potts_grid_problem,\n        typename mem_manager\n        >\n    void find_max_factor_graph_potts (\n        const potts_grid_problem& prob,\n        array2d<node_label,mem_manager>& labels\n    );\n    /*!\n        requires\n            - potts_grid_problem == an object with an interface compatible with the \n              potts_grid_problem object defined above.\n            - for all valid i and j:\n                - prob.factor_value_disagreement(i,j) >= 0\n                - prob.factor_value_disagreement(i,j) == prob.factor_value_disagreement(j,i)\n        ensures\n            - This routine solves a version of a potts problem where the graph is a\n              regular grid where each node is connected to its four immediate neighbors.\n              In particular, this means that this function finds the assignments \n              to all the labels in prob which maximizes potts_model_score(prob,#labels).\n            - The optimal labels are stored in #labels.\n            - #labels.nr() == prob.nr()\n            - #labels.nc() == prob.nc()\n    !*/\n\n// ---------------------------------------------------------------------------------------- \n// ---------------------------------------------------------------------------------------- \n//    The following functions and interface definitions are convenience routines for use \n//    with the potts grid problem version of find_max_factor_graph_potts() defined above.\n// ---------------------------------------------------------------------------------------- \n// ---------------------------------------------------------------------------------------- \n\n    struct single_image_model \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines a slightly more convenient interface for creating\n                potts_grid_problems which operate on an image.  In this case, the goal \n                is to assign a binary label to each pixel in an image.  In particular, \n                this object defines the interface used by the make_potts_grid_problem() \n                routine defined below. \n\n                In the following comments, we will refer to the image supplied to \n                make_potts_grid_problem() as IMG.\n        !*/\n\n        // This typedef should be for a type like int or double.  It\n        // must also be capable of representing signed values.\n        typedef an_integer_or_real_type value_type;\n\n        template <typename pixel_type>\n        value_type factor_value (\n            const pixel_type& v\n        ) const;\n        /*!\n            requires\n                - v is a pixel value from IMG.\n            ensures\n                - returns a value which indicates how \"good\" it is to assign the location\n                  in IMG corresponding to v with the label of true.  The larger the value, \n                  the more desirable it is to give it this label.  Similarly, a negative \n                  value indicates that it is better to give the node a label of false.\n                - It is valid for the returned value to be positive or negative infinity.  \n                  A value of positive infinity indicates that the pixel must be labeled\n                  true while negative infinity means it must be labeled false.\n        !*/\n\n        template <typename pixel_type>\n        value_type factor_value_disagreement (\n            const pixel_type& v1,\n            const pixel_type& v2 \n        ) const;\n        /*!\n            requires\n                - v1 and v2 are pixel values from neighboring pixels in the IMG image.\n            ensures\n                - returns a number >= 0.  This is the penalty for giving neighboring pixels \n                  with values v1 and v2 different labels.  Larger values indicate a larger \n                  penalty.\n                - this function is symmetric.  That is, it is true that: \n                  factor_value_disagreement(i,j) == factor_value_disagreement(j,i)\n                - It is valid for the returned value to be positive infinity.  Returning\n                  infinity indicates that the idx1-th and idx2-th nodes must share the same \n                  label.\n        !*/\n    };\n\n// ---------------------------------------------------------------------------------------- \n\n    struct pair_image_model \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines a slightly more convenient interface for creating\n                potts_grid_problems which operate on a pair of identically sized images.\n                In this case, the goal is to assign a label to each pixel in the first\n                image of the pair.  In particular, this object defines the interface\n                used by the make_potts_grid_problem() routine defined below. \n\n                In the following comments, we will refer to the two images supplied to \n                make_potts_grid_problem() as IMG1 and IMG2.  The goal of the potts\n                problem will be to assign labels to each pixel in IMG1 (IMG2 is\n                not labeled, it is simply used as a place to keep auxiliary data).\n        !*/\n\n        // This typedef should be for a type like int or double.  It\n        // must also be capable of representing signed values.\n        typedef an_integer_or_real_type value_type;\n\n        template <typename pixel_type1, typename pixel_type2>\n        value_type factor_value (\n            const pixel_type1& v1,\n            const pixel_type2& v2 \n        ) const;\n        /*!\n            requires\n                - v1 and v2 are corresponding pixels from IMG1 and IMG2 respectively.\n                  That is, both pixel values have the same coordinates in the images.\n                  So for example, if v1 is the value of IMG1[4][5] then v2 is the value\n                  of IMG2[4][5].\n            ensures\n                - returns a value which indicates how \"good\" it is to assign the location\n                  in IMG1 corresponding to v1 with the label of true.  The larger the value, \n                  the more desirable it is to give it this label.  Similarly, a negative \n                  value indicates that it is better to give the node a label of false.\n                - It is valid for the returned value to be positive or negative infinity.  \n                  A value of positive infinity indicates that the pixel must be labeled\n                  true while negative infinity means it must be labeled false.\n        !*/\n\n        template <typename pixel_type>\n        value_type factor_value_disagreement (\n            const pixel_type& v1,\n            const pixel_type& v2 \n        ) const;\n        /*!\n            requires\n                - v1 and v2 are pixel values from neighboring pixels in the IMG1 image.\n            ensures\n                - returns a number >= 0.  This is the penalty for giving neighboring pixels \n                  with values v1 and v2 different labels.  Larger values indicate a larger \n                  penalty.\n                - this function is symmetric.  That is, it is true that: \n                  factor_value_disagreement(i,j) == factor_value_disagreement(j,i)\n                - It is valid for the returned value to be positive infinity.  Returning\n                  infinity indicates that the idx1-th and idx2-th nodes must share the same \n                  label.\n        !*/\n    };\n\n// ---------------------------------------------------------------------------------------- \n\n    template <\n        typename single_image_model,\n        typename pixel_type,\n        typename mem_manager\n        >\n    potts_grid_problem make_potts_grid_problem (\n        const single_image_model& model,\n        const array2d<pixel_type,mem_manager>& img\n    );\n    /*!\n        requires\n            - single_image_model == an object with an interface compatible with the \n              single_image_model object defined above.\n            - for all valid i and j:\n                - model.factor_value_disagreement(i,j) >= 0\n                - model.factor_value_disagreement(i,j) == model.factor_value_disagreement(j,i)\n        ensures\n            - returns a potts_grid_problem which can be solved using the \n              find_max_factor_graph_potts(prob,array2d) routine defined above.  That is,\n              given an image to store the labels, the following statement would solve the \n              potts problem defined by the given model and image:\n                find_max_factor_graph_potts(make_potts_grid_problem(model,img),labels);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pair_image_model,\n        typename pixel_type1,\n        typename pixel_type2,\n        typename mem_manager\n        >\n    potts_grid_problem make_potts_grid_problem (\n        const pair_image_model& model,\n        const array2d<pixel_type1,mem_manager>& img1,\n        const array2d<pixel_type2,mem_manager>& img2\n    );\n    /*!\n        requires\n            - get_rect(img1) == get_rect(img2)\n              (i.e. img1 and img2 have the same dimensions)\n            - pair_image_model == an object with an interface compatible with the \n              pair_image_model object defined above.\n            - for all valid i and j:\n                - model.factor_value_disagreement(i,j) >= 0\n                - model.factor_value_disagreement(i,j) == model.factor_value_disagreement(j,i)\n        ensures\n            - returns a potts_grid_problem which can be solved using the \n              find_max_factor_graph_potts(prob,array2d) routine defined above.  That is,\n              given an image to store the labels, the following statement would solve the \n              potts problem defined by the given model and pair of images:\n                find_max_factor_graph_potts(make_potts_grid_problem(model,img1,img2),labels);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FIND_MAX_FACTOR_GRAPH_PoTTS_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_cuts/general_flow_graph.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GENERAL_FLOW_GRaPH_Hh_\n#define DLIB_GENERAL_FLOW_GRaPH_Hh_\n\n#include \"../graph_utils.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n\n        template <\n            typename directed_graph_type\n            >\n        class general_flow_graph \n        {\n            /*!\n                this is a utility class used by dlib::min_cut to convert a directed_graph\n                into the kind of flow graph expected by the min_cut object's main block\n                of code.\n            !*/\n\n            directed_graph_type& g;\n\n            typedef typename directed_graph_type::node_type node_type;\n            typedef typename directed_graph_type::type node_label;\n\n        public:\n\n            general_flow_graph(\n                directed_graph_type& g_\n            ) : g(g_)\n            {\n            }\n\n            class out_edge_iterator\n            {\n                friend class general_flow_graph;\n                unsigned long idx; // base node idx\n                unsigned long cnt; // count over the neighbors of idx\n            public:\n\n                out_edge_iterator(\n                ):idx(0),cnt(0) {}\n\n                out_edge_iterator(\n                    unsigned long idx_,\n                    unsigned long cnt_\n                ):idx(idx_),cnt(cnt_)\n                {}\n\n                bool operator!= (\n                    const out_edge_iterator& item\n                ) const { return cnt != item.cnt; }\n\n                out_edge_iterator& operator++(\n                )\n                {\n                    ++cnt;\n                    return *this;\n                }\n            };\n\n            class in_edge_iterator\n            {\n\n                friend class general_flow_graph;\n                unsigned long idx; // base node idx\n                unsigned long cnt; // count over the neighbors of idx\n            public:\n\n                in_edge_iterator(\n                ):idx(0),cnt(0) {}\n\n                in_edge_iterator(\n                    unsigned long idx_,\n                    unsigned long cnt_\n                ):idx(idx_),cnt(cnt_)\n                {}\n\n                bool operator!= (\n                    const in_edge_iterator& item\n                ) const { return cnt != item.cnt; }\n\n                in_edge_iterator& operator++(\n                )\n                {\n                    ++cnt;\n                    return *this;\n                }\n            };\n\n            unsigned long number_of_nodes (\n            ) const { return g.number_of_nodes(); }\n\n            out_edge_iterator out_begin(\n                const unsigned long& it\n            ) const { return out_edge_iterator(it, 0); }\n\n            in_edge_iterator in_begin(\n                const unsigned long& it\n            ) const { return in_edge_iterator(it, 0); }\n\n            out_edge_iterator out_end(\n                const unsigned long& it\n            ) const { return out_edge_iterator(it, g.node(it).number_of_children()); }\n\n            in_edge_iterator in_end(\n                const unsigned long& it\n            ) const { return in_edge_iterator(it, g.node(it).number_of_parents()); }\n\n            unsigned long node_id (\n                const out_edge_iterator& it\n            ) const { return g.node(it.idx).child(it.cnt).index(); }\n            unsigned long node_id (\n                const in_edge_iterator& it\n            ) const { return g.node(it.idx).parent(it.cnt).index(); }\n\n            typedef typename directed_graph_type::edge_type edge_type;\n\n            edge_type get_flow (const unsigned long& it1,     const unsigned long& it2) const\n            {\n                return edge(g, it1, it2);\n            }\n            edge_type get_flow (const out_edge_iterator& it) const\n            {\n                return g.node(it.idx).child_edge(it.cnt);\n            }\n            edge_type get_flow (const in_edge_iterator& it) const\n            {\n                return g.node(it.idx).parent_edge(it.cnt);\n            }\n\n            void adjust_flow (\n                const unsigned long& it1,\n                const unsigned long& it2,\n                const edge_type& value\n            )\n            {\n                edge(g, it1, it2) += value;\n                edge(g, it2, it1) -= value;\n            }\n\n            void set_label (\n                const unsigned long& it,\n                node_label value\n            )\n            {\n                g.node(it).data = value;\n            }\n\n            node_label get_label (\n                const unsigned long& it\n            ) const\n            {\n                return g.node(it).data;\n            }\n\n        };\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GENERAL_FLOW_GRaPH_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_cuts/general_potts_problem.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GENERAL_POTTS_PRoBLEM_Hh_\n#define DLIB_GENERAL_POTTS_PRoBLEM_Hh_\n\n#include \"../graph_utils.h\"\n#include \"min_cut.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename graph_type\n            >\n        class general_potts_problem \n        {\n\n            const graph_type& g;\n            std::vector<node_label>& labels;\n        public:\n            general_potts_problem (\n                const graph_type& g_,\n                std::vector<node_label>& labels_\n            ) : g(g_), labels(labels_)\n            {\n                labels.resize(g.number_of_nodes());\n            }\n\n            unsigned long number_of_nodes (\n            ) const { return g.number_of_nodes(); }\n\n            unsigned long number_of_neighbors (\n                unsigned long idx\n            ) const { return g.node(idx).number_of_neighbors(); }\n\n            unsigned long get_neighbor (\n                unsigned long idx,\n                unsigned long n \n            ) const { return g.node(idx).neighbor(n).index(); }\n\n            unsigned long get_neighbor_idx (\n                unsigned long idx1,\n                unsigned long idx2\n            ) const\n            {\n                for (unsigned long i = 0; i < g.node(idx1).number_of_neighbors(); ++i)\n                {\n                    if (g.node(idx1).neighbor(i).index() == idx2)\n                        return i;\n                }\n\n                // This should never ever execute\n                return 0;\n            }\n\n            void set_label (\n                const unsigned long& idx,\n                node_label value\n            )\n            {\n                labels[idx] = value;\n            }\n\n            node_label get_label (\n                const unsigned long& idx\n            ) const { return labels[idx]; }\n\n            typedef typename graph_type::edge_type value_type;\n\n            value_type factor_value (\n                unsigned long idx\n            ) const\n            {\n                return g.node(idx).data;\n            }\n\n            value_type factor_value_disagreement (\n                unsigned long idx1, \n                unsigned long idx2\n            ) const\n            {\n                return edge(g, idx1, idx2);\n            }\n\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GENERAL_POTTS_PRoBLEM_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_cuts/graph_labeler.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GRAPH_LaBELER_Hh_\n#define DLIB_GRAPH_LaBELER_Hh_\n\n#include \"graph_labeler_abstract.h\"\n#include \"../matrix.h\"\n#include \"../string.h\"\n#include <vector>\n#include \"find_max_factor_graph_potts.h\"\n#include \"../svm/sparse_vector.h\"\n#include \"../graph.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    class graph_labeler \n    {\n\n    public:\n\n        typedef std::vector<bool> label_type;\n        typedef label_type result_type;\n\n        graph_labeler()\n        {\n        }\n\n        graph_labeler(\n            const vector_type& edge_weights_,\n            const vector_type& node_weights_\n        ) : \n            edge_weights(edge_weights_),\n            node_weights(node_weights_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(edge_weights.size() == 0 || min(edge_weights) >= 0,\n                    \"\\t graph_labeler::graph_labeler()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t min(edge_weights): \" << min(edge_weights)\n                    << \"\\n\\t this:              \" << this\n                    );\n        }\n\n        const vector_type& get_edge_weights (\n        ) const { return edge_weights; }\n\n        const vector_type& get_node_weights (\n        ) const { return node_weights; }\n\n        template <typename graph_type>\n        void operator() (\n            const graph_type& sample,\n            std::vector<bool>& labels \n        ) const\n        {\n            // make sure requires clause is not broken\n#ifdef ENABLE_ASSERTS\n            DLIB_ASSERT(graph_contains_length_one_cycle(sample) == false,\n                        \"\\t void graph_labeler::operator()\"\n                        << \"\\n\\t Invalid inputs were given to this function.\"\n                        << \"\\n\\t get_edge_weights().size(): \" << get_edge_weights().size()\n                        << \"\\n\\t get_node_weights().size(): \" << get_node_weights().size()\n                        << \"\\n\\t graph_contains_length_one_cycle(sample): \" << graph_contains_length_one_cycle(sample)\n                        << \"\\n\\t this:                      \" << this\n                    );\n            for (unsigned long i = 0; i < sample.number_of_nodes(); ++i)\n            {\n                if (is_matrix<vector_type>::value &&\n                    is_matrix<typename graph_type::type>::value)\n                {\n                    // check that dot() is legal.\n                    DLIB_ASSERT((unsigned long)get_node_weights().size() == (unsigned long)sample.node(i).data.size(),\n                                \"\\t void graph_labeler::operator()\"\n                                << \"\\n\\t The size of the node weight vector must match the one in the node.\"\n                                << \"\\n\\t get_node_weights().size():  \" << get_node_weights().size()\n                                << \"\\n\\t sample.node(i).data.size(): \" << sample.node(i).data.size()\n                                << \"\\n\\t i: \" << i \n                                << \"\\n\\t this:              \" << this\n                            );\n                }\n\n                for (unsigned long n = 0; n < sample.node(i).number_of_neighbors(); ++n)\n                {\n                    if (is_matrix<vector_type>::value &&\n                        is_matrix<typename graph_type::edge_type>::value)\n                    {\n                        // check that dot() is legal.\n                        DLIB_ASSERT((unsigned long)get_edge_weights().size() == (unsigned long)sample.node(i).edge(n).size(),\n                                    \"\\t void graph_labeler::operator()\"\n                                    << \"\\n\\t The size of the edge weight vector must match the one in graph's edge.\"\n                                    << \"\\n\\t get_edge_weights().size():  \" << get_edge_weights().size()\n                                    << \"\\n\\t sample.node(i).edge(n).size(): \" << sample.node(i).edge(n).size()\n                                    << \"\\n\\t i: \" << i \n                                    << \"\\n\\t this:              \" << this\n                        );\n                    }\n\n                    DLIB_ASSERT(sample.node(i).edge(n).size() == 0 || min(sample.node(i).edge(n)) >= 0,\n                                \"\\t void graph_labeler::operator()\"\n                                << \"\\n\\t No edge vectors are allowed to have negative elements.\"\n                                << \"\\n\\t min(sample.node(i).edge(n)): \" << min(sample.node(i).edge(n))\n                                << \"\\n\\t i:    \" << i \n                                << \"\\n\\t n:    \" << n \n                                << \"\\n\\t this: \" << this\n                    );\n                }\n            }\n#endif\n\n\n            graph<double,double>::kernel_1a g; \n            copy_graph_structure(sample, g);\n            for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n            {\n                g.node(i).data = dot(node_weights, sample.node(i).data);\n\n                for (unsigned long n = 0; n < g.node(i).number_of_neighbors(); ++n)\n                {\n                    const unsigned long j = g.node(i).neighbor(n).index();\n                    // Don't compute an edge weight more than once. \n                    if (i < j)\n                    {\n                        g.node(i).edge(n) = dot(edge_weights, sample.node(i).edge(n));\n                    }\n                }\n\n            }\n\n            labels.clear();\n            std::vector<node_label> temp;\n            find_max_factor_graph_potts(g, temp);\n            for (unsigned long i = 0; i < temp.size(); ++i)\n            {\n                if (temp[i] != 0)\n                    labels.push_back(true);\n                else\n                    labels.push_back(false);\n            }\n        }\n\n        template <typename graph_type>\n        std::vector<bool> operator() (\n            const graph_type& sample \n        ) const\n        {\n            std::vector<bool> temp;\n            (*this)(sample, temp);\n            return temp;\n        }\n\n    private:\n\n        vector_type edge_weights;\n        vector_type node_weights;\n    };\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    void serialize (\n        const graph_labeler<vector_type>& item,\n        std::ostream& out\n    )\n    {\n        int version = 1;\n        serialize(version, out);\n        serialize(item.get_edge_weights(), out);\n        serialize(item.get_node_weights(), out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    void deserialize (\n        graph_labeler<vector_type>& item,\n        std::istream& in \n    )\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 1)\n        {\n            throw dlib::serialization_error(\"While deserializing graph_labeler, found unexpected version number of \" + \n                                            cast_to_string(version) + \".\");\n        }\n\n        vector_type edge_weights, node_weights;\n        deserialize(edge_weights, in);\n        deserialize(node_weights, in);\n\n        item = graph_labeler<vector_type>(edge_weights, node_weights);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GRAPH_LaBELER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_cuts/graph_labeler_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_GRAPH_LaBELER_ABSTRACT_Hh_\n#ifdef DLIB_GRAPH_LaBELER_ABSTRACT_Hh_\n\n#include \"find_max_factor_graph_potts_abstract.h\"\n#include \"../graph/graph_kernel_abstract.h\"\n#include \"../matrix/matrix_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    class graph_labeler \n    {\n        /*!\n            REQUIREMENTS ON vector_type\n                - vector_type is a dlib::matrix capable of representing column \n                  vectors or it is a sparse vector type as defined in dlib/svm/sparse_vector_abstract.h.  \n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for labeling each node in a graph with a value \n                of true or false, subject to a labeling consistency constraint between \n                nodes that share an edge.  In particular, this object is useful for \n                representing a graph labeling model learned via some machine learning \n                method.\n                \n                To elaborate, suppose we have a graph we want to label.  Moreover, \n                suppose we can assign a score to each node which represents how much \n                we want to label the node as true, and we also have scores for each \n                edge which represent how much we wanted the nodes sharing the edge to \n                have the same label.  If we could do this then we could find the optimal \n                labeling using the find_max_factor_graph_potts() routine.  Therefore, \n                the graph_labeler is just an object which contains the necessary data \n                to compute these score functions and then call find_max_factor_graph_potts().  \n                Additionally, this object uses linear functions to represent these score \n                functions.    \n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call the const members of this object from multiple\n                    threads.  This is because the const members are purely read-only\n                    operations.  However, any operation that modifies a graph_labeler is\n                    not threadsafe.\n        !*/\n\n    public:\n\n        typedef std::vector<bool> label_type;\n        typedef label_type result_type;\n\n        graph_labeler(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n                - #get_node_weights() == an initial value of type vector_type.\n                - #get_edge_weights() == an initial value of type vector_type.\n        !*/\n\n        graph_labeler(\n            const vector_type& edge_weights,\n            const vector_type& node_weights\n        );\n        /*!\n            requires\n                - min(edge_weights) >= 0\n            ensures\n                - #get_edge_weights() == edge_weights\n                - #get_node_weights() == node_weights\n        !*/\n\n        const vector_type& get_edge_weights (\n        ) const; \n        /*!\n            ensures\n                - Recall that the score function for an edge is a linear function of\n                  the vector stored at that edge.  This means there is some vector, E,\n                  which we dot product with the vector in the graph to compute the \n                  score.  Therefore, this function returns that E vector which defines \n                  the edge score function.\n        !*/\n\n        const vector_type& get_node_weights (\n        ) const; \n        /*!\n            ensures\n                - Recall that the score function for a node is a linear function of\n                  the vector stored in that node.  This means there is some vector, W, \n                  which we dot product with the vector in the graph to compute the score.  \n                  Therefore, this function returns that W vector which defines the node \n                  score function.\n        !*/\n\n        template <typename graph_type>\n        void operator() (\n            const graph_type& sample,\n            std::vector<bool>& labels \n        ) const;\n        /*!\n            requires\n                - graph_type is an implementation of dlib/graph/graph_kernel_abstract.h\n                - graph_type::type and graph_type::edge_type must be either matrix objects\n                  capable of representing column vectors or some kind of sparse vector\n                  type as defined in dlib/svm/sparse_vector_abstract.h.\n                - graph_contains_length_one_cycle(sample) == false\n                - for all valid i and j:\n                    - min(edge(sample,i,j)) >= 0\n                    - it must be legal to call dot(edge(sample,i,j), get_edge_weights())\n                    - it must be legal to call dot(sample.node(i).data, get_node_weights())\n            ensures\n                - Computes a labeling for each node in the given graph and stores the result\n                  in #labels.  \n                - #labels.size() == sample.number_of_nodes()\n                - for all valid i:\n                    - #labels[i] == the label of the node sample.node(i).\n                - The labels are computed by creating a graph, G, with scalar values on each node \n                  and edge.  The scalar values are calculated according to the following:\n                    - for all valid i:\n                        - G.node(i).data == dot(get_node_weights(), sample.node(i).data)\n                    - for all valid i and j:\n                        - edge(G,i,j) == dot(get_edge_weights(), edge(sample,i,j))\n                  Then the labels are computed by calling find_max_factor_graph_potts(G,#labels).\n        !*/\n\n        template <typename graph_type>\n        std::vector<bool> operator() (\n            const graph_type& sample \n        ) const;\n        /*!\n            requires\n                - graph_type is an implementation of dlib/graph/graph_kernel_abstract.h\n                - graph_contains_length_one_cycle(sample) == false\n                - for all valid i and j:\n                    - min(edge(sample,i,j)) >= 0\n                    - it must be legal to call dot(edge(sample,i,j), get_edge_weights())\n                    - it must be legal to call dot(sample.node(i).data, get_node_weights())\n            ensures\n                - Performs (*this)(sample, labels); return labels;\n                  (i.e. This is just another version of the above operator() routine\n                  but instead of returning the labels via the second argument, it\n                  returns them as the normal return value).\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    void serialize (\n        const graph_labeler<vector_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    void deserialize (\n        graph_labeler<vector_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GRAPH_LaBELER_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_cuts/min_cut.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MIN_CuT_Hh_\n#define DLIB_MIN_CuT_Hh_\n\n#include \"min_cut_abstract.h\"\n#include \"../matrix.h\"\n#include \"general_flow_graph.h\"\n#include \"../is_kind.h\"\n\n#include <iostream>\n#include <fstream>\n#include <deque>\n\n\n// ----------------------------------------------------------------------------------------\n\n\nnamespace dlib\n{\n\n    typedef unsigned char node_label;\n\n// ----------------------------------------------------------------------------------------\n\n    const node_label SOURCE_CUT = 0;\n    const node_label SINK_CUT = 254;\n    const node_label FREE_NODE = 255;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename flow_graph>\n    typename disable_if<is_directed_graph<flow_graph>,typename flow_graph::edge_type>::type \n    graph_cut_score (\n        const flow_graph& g\n    )\n    {\n        typedef typename flow_graph::edge_type edge_weight_type;\n        edge_weight_type score = 0;\n        typedef typename flow_graph::out_edge_iterator out_edge_iterator;\n        for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n        {\n            if (g.get_label(i) != SOURCE_CUT)\n                continue;\n\n            for (out_edge_iterator n = g.out_begin(i); n != g.out_end(i); ++n)\n            {\n                if (g.get_label(g.node_id(n)) != SOURCE_CUT)\n                {\n                    score += g.get_flow(n);\n                }\n            }\n        }\n\n        return score;\n    }\n\n    template <typename directed_graph>\n    typename enable_if<is_directed_graph<directed_graph>,typename directed_graph::edge_type>::type \n    graph_cut_score (\n        const directed_graph& g\n    )\n    {\n        return graph_cut_score(dlib::impl::general_flow_graph<const directed_graph>(g));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class min_cut\n    {\n\n    public:\n\n        min_cut()\n        {\n        }\n\n        min_cut( const min_cut& )\n        {\n            // Intentionally left empty since all the member variables\n            // don't logically contribute to the state of this object.\n            // This copy constructor is here to explicitly avoid the overhead\n            // of copying these transient variables.  \n        }\n\n        template <\n            typename directed_graph\n            >\n        typename enable_if<is_directed_graph<directed_graph> >::type operator() (\n            directed_graph& g,\n            const unsigned long source_node,\n            const unsigned long sink_node\n        ) const\n        {\n            DLIB_ASSERT(graph_contains_length_one_cycle(g) == false,\n                        \"\\t void min_cut::operator()\"\n                        << \"\\n\\t Invalid arguments were given to this function.\"\n                        );\n            DLIB_ASSERT(graph_has_symmetric_edges(g) == true,\n                        \"\\t void min_cut::operator()\"\n                        << \"\\n\\t Invalid arguments were given to this function.\"\n                        );\n\n            dlib::impl::general_flow_graph<directed_graph> temp(g);\n            (*this)(temp, source_node, sink_node);\n        }\n\n        template <\n            typename flow_graph\n            >\n        typename disable_if<is_directed_graph<flow_graph> >::type operator() (\n            flow_graph& g,\n            const unsigned long source_node,\n            const unsigned long sink_node\n        ) const\n        {\n#ifdef ENABLE_ASSERTS\n            DLIB_ASSERT(source_node != sink_node &&\n                        source_node < g.number_of_nodes() &&\n                        sink_node < g.number_of_nodes(),\n                    \"\\t void min_cut::operator()\"\n                    << \"\\n\\t Invalid arguments were given to this function.\"\n                    << \"\\n\\t g.number_of_nodes(): \" << g.number_of_nodes() \n                    << \"\\n\\t source_node: \" << source_node \n                    << \"\\n\\t sink_node:   \" << sink_node \n                    << \"\\n\\t this:   \" << this\n            );\n\n            for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n            {\n                typename flow_graph::out_edge_iterator j, end = g.out_end(i);\n                for (j = g.out_begin(i); j != end; ++j)\n                {\n                    const unsigned long jj = g.node_id(j);\n                    DLIB_ASSERT(g.get_flow(i,jj) >= 0,\n                                \"\\t void min_cut::operator()\"\n                                << \"\\n\\t Invalid inputs were given to this function.\" \n                                << \"\\n\\t i: \"<< i \n                                << \"\\n\\t jj: \"<< jj\n                                << \"\\n\\t g.get_flow(i,jj): \"<< g.get_flow(i,jj)\n                                << \"\\n\\t this: \"<< this\n                                );\n\n                }\n            }\n#endif\n            parent.clear();\n            active.clear();\n            orphans.clear();\n\n            typedef typename flow_graph::edge_type edge_type;\n            COMPILE_TIME_ASSERT(is_signed_type<edge_type>::value);\n\n            typedef typename flow_graph::out_edge_iterator out_edge_iterator;\n            typedef typename flow_graph::in_edge_iterator in_edge_iterator;\n\n            // initialize labels\n            for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n                g.set_label(i, FREE_NODE);\n\n            g.set_label(source_node, SOURCE_CUT);\n            g.set_label(sink_node, SINK_CUT);\n\n            // used to indicate \"no parent\"\n            const unsigned long nil = g.number_of_nodes();\n\n            parent.assign(g.number_of_nodes(), nil);\n\n            time = 1;\n            dist.assign(g.number_of_nodes(), 0);\n            ts.assign(g.number_of_nodes(), time);\n\n            active.push_back(source_node);\n            active.push_back(sink_node);\n\n\n            in_edge_iterator in_begin = g.in_begin(active[0]);\n            out_edge_iterator out_begin = g.out_begin(active[0]);\n\n            unsigned long source_side, sink_side;\n            while (grow(g,source_side,sink_side, in_begin, out_begin))\n            {\n                ++time;\n                ts[source_node] = time;\n                ts[sink_node] = time;\n\n                augment(g, source_node, sink_node, source_side, sink_side);\n                adopt(g, source_node, sink_node);\n            }\n\n        }\n\n\n    private:\n\n        unsigned long distance_to_origin (\n            const unsigned long nil,\n            unsigned long p,\n            unsigned long \n        ) const\n        {\n            unsigned long start = p;\n            unsigned long count = 0;\n            while (p != nil)\n            {\n                if (ts[p] == time)\n                {\n                    count += dist[p];\n\n                    unsigned long count_down = count;\n                    // adjust the dist and ts for the nodes on this path.\n                    while (start != p)\n                    {\n                        ts[start] = time;\n                        dist[start] = count_down;\n                        --count_down;\n                        start = parent[start];\n                    }\n\n                    return count;\n                }\n                p = parent[p];\n                ++count;\n            }\n\n            return std::numeric_limits<unsigned long>::max();\n        }\n\n        template <typename flow_graph>\n        void adopt (\n            flow_graph& g,\n            const unsigned long source,\n            const unsigned long sink\n        ) const\n        {\n            typedef typename flow_graph::out_edge_iterator out_edge_iterator;\n            typedef typename flow_graph::in_edge_iterator in_edge_iterator;\n\n            // used to indicate \"no parent\"\n            const unsigned long nil = g.number_of_nodes();\n\n            while (orphans.size() > 0)\n            {\n                const unsigned long p = orphans.back();\n                orphans.pop_back();\n\n                const unsigned char label_p = g.get_label(p);\n\n                // Try to find a valid parent for p.\n                if (label_p == SOURCE_CUT)\n                {\n                    const in_edge_iterator begin(g.in_begin(p));\n                    const in_edge_iterator end(g.in_end(p));\n                    unsigned long best_dist = std::numeric_limits<unsigned long>::max();\n                    unsigned long best_node = 0;\n                    for(in_edge_iterator q = begin; q != end; ++q)\n                    {\n                        const unsigned long id = g.node_id(q);\n\n                        if (g.get_label(id) != label_p || g.get_flow(q) <= 0 )\n                            continue;\n\n                        unsigned long temp = distance_to_origin(nil, id,source);\n                        if (temp < best_dist)\n                        {\n                            best_dist = temp;\n                            best_node = id;\n                        }\n\n                    }\n                    if (best_dist != std::numeric_limits<unsigned long>::max())\n                    {\n                        parent[p] = best_node;\n                        dist[p] = dist[best_node] + 1;\n                        ts[p] = time;\n                    }\n\n                    // if we didn't find a parent for p\n                    if (parent[p] == nil)\n                    {\n                        for(in_edge_iterator q = begin; q != end; ++q)\n                        {\n                            const unsigned long id = g.node_id(q);\n\n                            if (g.get_label(id) != SOURCE_CUT)\n                                continue;\n\n                            if (g.get_flow(q) > 0)\n                                active.push_back(id);\n\n                            if (parent[id] == p)\n                            {\n                                parent[id] = nil;\n                                orphans.push_back(id);\n                            }\n                        }\n                        g.set_label(p, FREE_NODE);\n                    }\n                }\n                else\n                {\n                    unsigned long best_node = 0;\n                    unsigned long best_dist = std::numeric_limits<unsigned long>::max();\n                    const out_edge_iterator begin(g.out_begin(p));\n                    const out_edge_iterator end(g.out_end(p));\n                    for(out_edge_iterator q = begin; q != end; ++q)\n                    {\n                        const unsigned long id = g.node_id(q);\n                        if (g.get_label(id) != label_p || g.get_flow(q) <= 0)\n                            continue;\n\n                        unsigned long temp = distance_to_origin(nil, id,sink);\n\n                        if (temp < best_dist)\n                        {\n                            best_dist = temp;\n                            best_node = id;\n                        }\n                    }\n\n                    if (best_dist != std::numeric_limits<unsigned long>::max())\n                    {\n                        parent[p] = best_node;\n                        dist[p] = dist[best_node] + 1;\n                        ts[p] = time;\n                    }\n\n                    // if we didn't find a parent for p\n                    if (parent[p] == nil)\n                    {\n                        for(out_edge_iterator q = begin; q != end; ++q)\n                        {\n                            const unsigned long id = g.node_id(q);\n\n                            if (g.get_label(id) != SINK_CUT)\n                                continue;\n\n                            if (g.get_flow(q) > 0)\n                                active.push_back(id);\n\n                            if (parent[id] == p)\n                            {\n                                parent[id] = nil;\n                                orphans.push_back(id);\n                            }\n                        }\n\n                        g.set_label(p, FREE_NODE);\n                    }\n                }\n\n                \n            }\n\n        }\n\n        template <typename flow_graph>\n        void augment (\n            flow_graph& g,\n            const unsigned long& source,\n            const unsigned long& sink,\n            const unsigned long& source_side, \n            const unsigned long& sink_side\n        ) const\n        {\n            typedef typename flow_graph::edge_type edge_type;\n\n            // used to indicate \"no parent\"\n            const unsigned long nil = g.number_of_nodes();\n\n            unsigned long s = source_side;\n            unsigned long t = sink_side;\n            edge_type min_cap = g.get_flow(s,t);\n\n            // find the bottleneck capacity on the current path.\n\n            // check from source_side back to the source for the min capacity link.\n            t = s;\n            while (t != source)\n            {\n                s = parent[t];\n                const edge_type temp = g.get_flow(s, t);\n                if (temp < min_cap)\n                {\n                    min_cap = temp;\n                }\n                t = s;\n            }\n\n            // check from sink_side back to the sink for the min capacity link\n            s = sink_side;\n            while (s != sink)\n            {\n                t = parent[s];\n                const edge_type temp = g.get_flow(s, t);\n                if (temp < min_cap)\n                {\n                    min_cap = temp;\n                }\n                s = t;\n            }\n\n\n            // now push the max possible amount of flow though the path\n            s = source_side;\n            t = sink_side;\n            g.adjust_flow(t,s, min_cap);\n\n            // trace back towards the source\n            t = s;\n            while (t != source)\n            {\n                s = parent[t];\n                g.adjust_flow(t,s, min_cap);\n                if (g.get_flow(s,t) <= 0)\n                {\n                    parent[t] = nil;\n                    orphans.push_back(t);\n                }\n\n                t = s;\n            }\n\n            // trace back towards the sink \n            s = sink_side;\n            while (s != sink)\n            {\n                t = parent[s];\n                g.adjust_flow(t,s, min_cap);\n                if (g.get_flow(s,t) <= 0)\n                {\n                    parent[s] = nil;\n                    orphans.push_back(s);\n                }\n                s = t;\n            }\n        }\n\n        template <typename flow_graph>\n        bool grow (\n            flow_graph& g,\n            unsigned long& source_side, \n            unsigned long& sink_side,\n            typename flow_graph::in_edge_iterator& in_begin,\n            typename flow_graph::out_edge_iterator& out_begin\n        ) const\n        /*!\n            ensures\n                - if (an augmenting path was found) then \n                    - returns true\n                    - (#source_side, #sink_side) == the point where the two trees meet.\n                      #source_side is part of the source tree and #sink_side is part of\n                      the sink tree.\n                - else\n                    - returns false\n        !*/\n        {\n            typedef typename flow_graph::out_edge_iterator out_edge_iterator;\n            typedef typename flow_graph::in_edge_iterator in_edge_iterator;\n\n\n            while (active.size() != 0)\n            {\n                // pick an active node\n                const unsigned long A = active[0];\n\n                const unsigned char label_A = g.get_label(A);\n\n                // process its neighbors\n                if (label_A == SOURCE_CUT)\n                {\n                    const out_edge_iterator out_end = g.out_end(A);\n                    for(out_edge_iterator& i = out_begin; i != out_end; ++i)\n                    {\n                        if (g.get_flow(i) > 0)\n                        {\n                            const unsigned long id = g.node_id(i);\n                            const unsigned char label_i = g.get_label(id); \n                            if (label_i == FREE_NODE)\n                            {\n                                active.push_back(id);\n                                g.set_label(id,SOURCE_CUT);\n                                parent[id] = A;\n                                ts[id] = ts[A];\n                                dist[id] = dist[A] + 1;\n                            }\n                            else if (label_A != label_i)\n                            {\n                                source_side = A;\n                                sink_side = id;\n                                return true;\n                            }\n                            else if (is_closer(A, id))\n                            {\n                                parent[id] = A;\n                                ts[id] = ts[A];\n                                dist[id] = dist[A] + 1;\n                            }\n                        }\n                    }\n                }\n                else if (label_A == SINK_CUT)\n                {\n                    const in_edge_iterator in_end = g.in_end(A);\n                    for(in_edge_iterator& i = in_begin; i != in_end; ++i)\n                    {\n                        if (g.get_flow(i) > 0)\n                        {\n                            const unsigned long id = g.node_id(i);\n                            const unsigned char label_i = g.get_label(id); \n                            if (label_i == FREE_NODE)\n                            {\n                                active.push_back(id);\n                                g.set_label(id,SINK_CUT);\n                                parent[id] = A;\n                                ts[id] = ts[A];\n                                dist[id] = dist[A] + 1;\n                            }\n                            else if (label_A != label_i)\n                            {\n                                sink_side = A;\n                                source_side = id;\n                                return true;\n                            }\n                            else if (is_closer(A, id))\n                            {\n                                parent[id] = A;\n                                ts[id] = ts[A];\n                                dist[id] = dist[A] + 1;\n                            }\n                        }\n                    }\n                }\n\n                active.pop_front();\n                if (active.size() != 0)\n                {\n                    in_begin = g.in_begin(active[0]);\n                    out_begin = g.out_begin(active[0]);\n                }\n            }\n\n            return false;\n        }\n\n        inline bool is_closer (\n            unsigned long p,\n            unsigned long q\n        ) const\n        {\n            // return true if p is closer to a terminal than q\n            return ts[q] <= ts[p] && dist[q] > dist[p];\n        }\n\n        mutable std::vector<uint32> dist;\n        mutable std::vector<uint32> ts;\n        mutable uint32 time;\n        mutable std::vector<unsigned long> parent;\n\n        mutable std::deque<unsigned long> active;\n        mutable std::vector<unsigned long> orphans;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_MIN_CuT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_cuts/min_cut_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MIN_CuT_ABSTRACT_Hh_\n#ifdef DLIB_MIN_CuT_ABSTRACT_Hh_\n\n#include \"../graph_utils.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    /*!A node_label\n        The node_label type is the type used to label which part of a graph cut\n        a node is on.  It is used by all the graph cut tools.  The three possible\n        values of a node label are SOURCE_CUT, SINK_CUT, or FREE_NODE.\n    !*/\n\n    typedef unsigned char node_label;\n    const node_label SOURCE_CUT = 0;\n    const node_label SINK_CUT = 254;\n    const node_label FREE_NODE = 255;\n\n// ----------------------------------------------------------------------------------------\n\n    class flow_graph \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a flow capacity graph for use with the\n                min_cut algorithm defined below.  In particular, this object\n                is a kind of directed graph where the edge weights specify the\n                flow capacities.\n\n                Note that there is no dlib::flow_graph object.  What you are\n                looking at here is simply the interface definition for a graph \n                which can be used with the min_cut algorithm.  You must implement \n                your own version of this object for the graph you wish to work with \n                and then pass it to the min_cut::operator() routine.\n\n                It's also worth pointing out that this graph has symmetric edge \n                connections.  That is, if there is an edge from node A to node B\n                then there must also be an edge from node B to node A.\n        !*/\n\n    public:\n\n        class out_edge_iterator\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This is a simple forward iterator for iterating over the neighbors\n                    of a node in the graph.  It also represents the fact that the neighbors \n                    are on the end of an outgoing edge.  That is, the edge represents\n                    the amount of flow which can flow towards the neighbor.\n            !*/\n\n        public:\n            out_edge_iterator(\n            );\n            /*!\n                ensures\n                    - constructs an iterator in an undefined state.  It can't\n                      be used until assigned with a valid iterator.\n            !*/\n\n            out_edge_iterator(\n                const out_edge_iterator& item\n            );\n            /*!\n                ensures\n                    - #*this is a copy of item\n            !*/\n\n            out_edge_iterator& operator=(\n                const out_edge_iterator& item\n            );\n            /*!\n                ensures\n                    - #*this is a copy of item\n                    - returns #*this\n            !*/\n\n            bool operator!= (\n                const out_edge_iterator& item\n            ) const;\n            /*!\n                requires\n                    - *this and item are iterators over the neighbors for the\n                      same node.  \n                ensures\n                    - returns false if *this and item both reference the same\n                      node in the graph and true otherwise.\n            !*/\n\n            out_edge_iterator& operator++(\n            );\n            /*!\n                ensures\n                    - advances *this to the next neighbor node.\n                    - returns a reference to the updated *this\n                      (i.e. this is the ++object form of the increment operator) \n            !*/\n        };\n\n        class in_edge_iterator\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This is a simple forward iterator for iterating over the neighbors\n                    of a node in the graph.  It also represents the fact that the neighbors \n                    are on the end of an incoming edge.  That is, the edge represents\n                    the amount of flow which can flow out of the neighbor node.\n            !*/\n\n        public:\n\n            in_edge_iterator(\n            );\n            /*!\n                ensures\n                    - constructs an iterator in an undefined state.  It can't\n                      be used until assigned with a valid iterator.\n            !*/\n\n            in_edge_iterator(\n                const in_edge_iterator& item\n            );\n            /*!\n                ensures\n                    - #*this is a copy of item\n            !*/\n\n            in_edge_iterator& operator=(\n                const in_edge_iterator& item\n            );\n            /*!\n                ensures\n                    - #*this is a copy of item\n                    - returns #*this\n            !*/\n\n            bool operator!= (\n                const in_edge_iterator& item\n            ) const;\n            /*!\n                requires\n                    - *this and item are iterators over the neighbors for the\n                      same node.  \n                ensures\n                    - returns false if *this and item both reference the same\n                      node in the graph and true otherwise.\n            !*/\n\n            in_edge_iterator& operator++(\n            );\n            /*!\n                ensures\n                    - advances *this to the next neighbor node.\n                    - returns a reference to the updated *this\n                      (i.e. this is the ++object form of the increment operator) \n            !*/\n        };\n\n\n\n        unsigned long number_of_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of nodes in the graph.  \n        !*/\n\n        out_edge_iterator out_begin(\n            const unsigned long& idx\n        ) const;\n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - returns an iterator pointing to the first neighboring node of\n                  the idx-th node.  If no such node exists then returns out_end(idx).\n                - The returned iterator also represents the directed edge going from \n                  node idx to the neighbor.\n        !*/\n\n        in_edge_iterator in_begin(\n            const unsigned long& idx\n        ) const;\n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - returns an iterator pointing to the first neighboring node of\n                  the idx-th node.  If no such node exists then returns in_end(idx).\n                - The returned iterator also represents the directed edge going from \n                  the neighbor to node idx.\n        !*/\n\n        out_edge_iterator out_end(\n            const unsigned long& idx \n        ) const;\n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - returns an iterator to one past the last neighboring node of\n                  the idx-th node.\n        !*/\n\n        in_edge_iterator in_end(\n            const unsigned long& idx \n        ) const; \n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - returns an iterator to one past the last neighboring node of\n                  the idx-th node.\n        !*/\n\n\n        unsigned long node_id (\n            const out_edge_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator (i.e. it must be in the range [out_begin(idx), out_end(idx))\n                  for some valid idx)\n            ensures\n                - returns a number IDX such that:\n                    - 0 <= IDX < number_of_nodes()\n                    - IDX == The index which uniquely identifies the node pointed to by the\n                      iterator it.  This number can be used with any member function in this\n                      object which expect a node index.  (e.g. get_label(IDX) == the label for the\n                      node pointed to by it)\n        !*/\n\n        unsigned long node_id (\n            const in_edge_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator (i.e. it must be in the range [in_begin(idx), in_end(idx))\n                  for some valid idx)\n            ensures\n                - returns a number IDX such that:\n                    - 0 <= IDX < number_of_nodes()\n                    - IDX == The index which uniquely identifies the node pointed to by the\n                      iterator it.  This number can be used with any member function in this\n                      object which expect a node index.  (e.g. get_label(IDX) == the label for the\n                      node pointed to by it)\n        !*/\n\n        // This typedef should be for a type like int or double.  It\n        // must also be capable of representing signed values.\n        typedef an_integer_or_real_type edge_type;\n\n        edge_type get_flow (\n            const unsigned long& idx1,     \n            const unsigned long& idx2 \n        ) const;\n        /*!\n            requires\n                - idx1 < number_of_nodes()\n                - idx2 < number_of_nodes()\n                - idx1 and idx2 are neighbors in the graph\n            ensures\n                - returns the residual flow capacity from the idx1-th node to the idx2-th node.\n                - It is valid for this function to return a floating point value of infinity.\n                  This value means this edge has an unlimited capacity.\n        !*/\n\n        edge_type get_flow (\n            const out_edge_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator (i.e. it must be in the range [out_begin(idx), out_end(idx))\n                  for some valid idx)\n            ensures\n                - let IDX = node_id(it)\n                - it represents the directed edge from a node, call it H, to the node IDX. Therefore,\n                  this function returns get_flow(H,IDX)\n                - It is valid for this function to return a floating point value of infinity.\n                  This value means this edge has an unlimited capacity.\n        !*/\n\n        edge_type get_flow (\n            const in_edge_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator (i.e. it must be in the range [in_begin(idx), in_end(idx))\n                  for some valid idx)\n            ensures\n                - let IDX = node_id(it)\n                - it represents the directed edge from node IDX to another node, call it H. Therefore,\n                  this function returns get_flow(IDX,H)\n                - It is valid for this function to return a floating point value of infinity.\n                  This value means this edge has an unlimited capacity.\n        !*/\n\n        void adjust_flow (\n            const unsigned long& idx1,\n            const unsigned long& idx2,\n            const edge_type& value\n        );\n        /*!\n            requires\n                - idx1 < number_of_nodes()\n                - idx2 < number_of_nodes()\n                - idx1 and idx2 are neighbors in the graph\n            ensures\n                - #get_flow(idx1,idx2) == get_flow(idx1,idx2) + value\n                - #get_flow(idx2,idx1) == get_flow(idx2,idx1) - value\n        !*/\n\n        void set_label (\n            const unsigned long& idx,\n            node_label value\n        );\n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - #get_label(idx) == value\n        !*/\n\n        node_label get_label (\n            const unsigned long& idx\n        ) const;\n        /*!\n            requires\n                - idx < number_of_nodes()\n            ensures\n                - returns the label for the idx-th node in the graph.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename flow_graph\n        >\n    typename flow_graph::edge_type graph_cut_score (\n        const flow_graph& g\n    );\n    /*!\n        requires\n            - flow_graph == an object with an interface compatible with the flow_graph\n              object defined at the top of this file, or, an implementation of \n              dlib/directed_graph/directed_graph_kernel_abstract.h.\n        ensures\n            - returns the sum of the outgoing flows from nodes with a label of SOURCE_CUT \n              to nodes with a label != SOURCE_CUT.  Note that for a directed_graph object,\n              the labels are stored in the node's data field.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class min_cut\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a function object which can be used to find the min cut\n                on a graph.\n\n                The implementation is based on the method described in the following\n                paper:\n                    An Experimental Comparison of Min-Cut/Max-Flow Algorithms for\n                    Energy Minimization in Vision, by Yuri Boykov and Vladimir Kolmogorov, \n                    in PAMI 2004.\n\n        !*/\n\n    public:\n\n        min_cut(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        template <\n            typename flow_graph\n            >\n        void operator() (\n            flow_graph& g,\n            const unsigned long source_node,\n            const unsigned long sink_node\n        ) const;\n        /*!\n            requires\n                - flow_graph == an object with an interface compatible with the flow_graph\n                  object defined at the top of this file.\n                - source_node != sink_node\n                - source_node < g.number_of_nodes()\n                - sink_node < g.number_of_nodes()\n                - for all valid i and j:\n                    - g.get_flow(i,j) >= 0\n                      (i.e. all the flow capacities/edge weights are non-negative)\n                - g does not contain any self loops.  That is, no nodes are neighbors with\n                  themselves.\n            ensures\n                - Finds the minimum cut on the given graph.  That is, this function finds\n                  a labeling of nodes in g such that graph_cut_score(g) would be minimized.  Note \n                  that the flow values in #g are modified by this algorithm so if you want \n                  to obtain the min cut score you must call min_cut::operator(), then copy \n                  the flow values back into #g, and then call graph_cut_score(#g).  But in most \n                  cases you don't care about the value of the min cut score, rather, you \n                  just want the labels in #g.\n                - #g.get_label(source_node) == SOURCE_CUT \n                - #g.get_label(sink_node) == SINK_CUT \n                - for all valid i:\n                    - #g.get_label(i) == SOURCE_CUT, SINK_CUT, or FREE_NODE\n                    - if (#g.get_label(i) == SOURCE_CUT) then\n                        - The minimum cut of g places node i into the source side of the cut.\n                    - if (#g.get_label(i) == SINK_CUT) then\n                        - The minimum cut of g places node i into the sink side of the cut.\n                    - if (#g.get_label(i) == FREE_NODE) then\n                        - Node i can be labeled SOURCE_CUT or SINK_CUT.  Both labelings\n                          result in the same cut score.  \n                - When interpreting g as a graph of flow capacities from the source_node \n                  to the sink_node we can say that the min cut problem is equivalent to\n                  the max flow problem.  This equivalent problem is to find out how to push \n                  as much \"flow\" from the source node to the sink node as possible.  \n                  Upon termination, #g will contain the final flow residuals in addition to \n                  the graph cut labels.  That is, for all valid i and j:\n                    - #g.get_flow(i,j) == the residual flow capacity left after the max \n                      possible amount of flow is passing from the source node to the sink\n                      node.  For example, this means that #g.get_flow(i,j) == 0 whenever \n                      node i is in the SOURCE_CUT and j is in the SINK_CUT. \n                    - #g.get_flow(i,j) >= 0\n        !*/\n\n        template <\n            typename directed_graph\n            >\n        void operator() (\n            directed_graph& g,\n            const unsigned long source_node,\n            const unsigned long sink_node\n        ) const;\n        /*!\n            requires\n                - directed_graph == an implementation of dlib/directed_graph/directed_graph_kernel_abstract.h \n                - directed_graph::type == node_label\n                - directed_graph::edge_type == and integer or double type\n                - source_node != sink_node\n                - source_node < g.number_of_nodes()\n                - sink_node < g.number_of_nodes()\n                - for all valid i and j:\n                    - edge(g,i,j) >= 0\n                      (i.e. all the flow capacities/edge weights are positive)\n                - graph_contains_length_one_cycle(g) == false \n                - graph_has_symmetric_edges(g) == true\n            ensures\n                - This routine simply converts g into a flow graph and calls the version\n                  of operator() defined above.  Note that the conversion is done in O(1)\n                  time, it's just an interface adaptor. \n                - edge weights in g correspond to network flows while the .data field of\n                  each node in g corresponds to the graph node labels.  \n                - upon termination, the flows and labels in g will have been modified\n                  as described in the above operator() routine.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MIN_CuT_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_cuts.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GRAPH_CUTs_HEADER_\n#define DLIB_GRAPH_CUTs_HEADER_\n\n#include \"graph_cuts/min_cut.h\"\n#include \"graph_cuts/general_flow_graph.h\"\n#include \"graph_cuts/find_max_factor_graph_potts.h\"\n#include \"graph_cuts/graph_labeler.h\"\n\n#endif // DLIB_GRAPH_CUTs_HEADER_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/edge_list_graphs.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_EDGE_LIST_GrAPHS_Hh_\n#define DLIB_EDGE_LIST_GrAPHS_Hh_\n\n#include \"edge_list_graphs_abstract.h\"\n#include <limits>\n#include <vector>\n#include \"../string.h\"\n#include \"../rand.h\"\n#include <algorithm>\n#include \"sample_pair.h\"\n#include \"ordered_sample_pair.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_duplicate_edges (\n        vector_type& pairs\n    )\n    {\n        typedef typename vector_type::value_type T;\n        if (pairs.size() > 0)\n        {\n            // sort pairs so that we can avoid duplicates in the loop below\n            std::sort(pairs.begin(), pairs.end(), &order_by_index<T>);\n\n            // now put edges into temp while avoiding duplicates\n            vector_type temp;\n            temp.reserve(pairs.size());\n            temp.push_back(pairs[0]);\n            for (unsigned long i = 1; i < pairs.size(); ++i)\n            {\n                if (pairs[i] != pairs[i-1])\n                {\n                    temp.push_back(pairs[i]);\n                }\n            }\n\n            temp.swap(pairs);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename iterator>\n        iterator iterator_of_worst (\n            iterator begin,\n            const iterator& end\n        ) \n        /*!\n            ensures\n                - returns an iterator that points to the element in the given range \n                  that has the biggest distance \n        !*/\n        {\n            double dist = begin->distance();\n            iterator worst = begin;\n            for (; begin != end; ++begin)\n            {\n                if (begin->distance() > dist)\n                {\n                    dist = begin->distance();\n                    worst = begin;\n                }\n            }\n\n            return worst;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename distance_function_type,\n        typename alloc,\n        typename T\n        >\n    void find_percent_shortest_edges_randomly (\n        const vector_type& samples,\n        const distance_function_type& dist_funct,\n        const double percent,\n        const unsigned long num,\n        const T& random_seed,\n        std::vector<sample_pair, alloc>& out\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( 0 < percent && percent <= 1 &&\n                    num > 0,\n            \"\\t void find_percent_shortest_edges_randomly()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t samples.size(): \" << samples.size()\n            << \"\\n\\t percent:        \" << percent \n            << \"\\n\\t num:            \" << num \n            );\n\n        out.clear();\n\n        if (samples.size() <= 1)\n        {\n            return;\n        }\n\n        std::vector<sample_pair, alloc> edges;\n        edges.reserve(num);\n\n        dlib::rand rnd;\n        rnd.set_seed(cast_to_string(random_seed));\n\n        // randomly sample a bunch of edges\n        for (unsigned long i = 0; i < num; ++i)\n        {\n            const unsigned long idx1 = rnd.get_random_32bit_number()%samples.size();\n            const unsigned long idx2 = rnd.get_random_32bit_number()%samples.size();\n            if (idx1 != idx2)\n            {\n                const double dist = dist_funct(samples[idx1], samples[idx2]);\n                if (dist < std::numeric_limits<double>::infinity())\n                {\n                    edges.push_back(sample_pair(idx1, idx2, dist));\n                }\n            }\n        }\n\n\n        // now put edges into out while avoiding duplicates\n        if (edges.size() > 0)\n        {\n            remove_duplicate_edges(edges);\n\n            // now sort all the edges by distance and take the percent with the smallest distance\n            std::sort(edges.begin(), edges.end(), &order_by_distance<sample_pair>);\n\n            const unsigned long out_size = std::min<unsigned long>((unsigned long)(num*percent), edges.size());\n            out.assign(edges.begin(), edges.begin() + out_size);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename distance_function_type,\n        typename alloc,\n        typename T\n        >\n    void find_approximate_k_nearest_neighbors (\n        const vector_type& samples,\n        const distance_function_type& dist_funct,\n        const unsigned long k,\n        unsigned long num,\n        const T& random_seed,\n        std::vector<sample_pair, alloc>& out\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( num > 0 && k > 0,\n            \"\\t void find_approximate_k_nearest_neighbors()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t samples.size(): \" << samples.size()\n            << \"\\n\\t k:              \" << k  \n            << \"\\n\\t num:            \" << num \n            );\n\n        out.clear();\n\n        if (samples.size() <= 1)\n        {\n            return;\n        }\n\n        // we add each edge twice in the following loop.  So multiply num by 2 to account for that.\n        num *= 2;\n\n        std::vector<ordered_sample_pair> edges;\n        edges.reserve(num);\n        std::vector<sample_pair, alloc> temp;\n        temp.reserve(num);\n\n        dlib::rand rnd;\n        rnd.set_seed(cast_to_string(random_seed));\n\n        // randomly sample a bunch of edges\n        for (unsigned long i = 0; i < num; ++i)\n        {\n            const unsigned long idx1 = rnd.get_random_32bit_number()%samples.size();\n            const unsigned long idx2 = rnd.get_random_32bit_number()%samples.size();\n            if (idx1 != idx2)\n            {\n                const double dist = dist_funct(samples[idx1], samples[idx2]);\n                if (dist < std::numeric_limits<double>::infinity())\n                {\n                    edges.push_back(ordered_sample_pair(idx1, idx2, dist));\n                    edges.push_back(ordered_sample_pair(idx2, idx1, dist));\n                }\n            }\n        }\n\n        std::sort(edges.begin(), edges.end(), &order_by_index<ordered_sample_pair>);\n\n        std::vector<ordered_sample_pair>::iterator beg, itr;\n        // now copy edges into temp when they aren't duplicates and also only move in the k shortest for\n        // each index.\n        itr = edges.begin();\n        while (itr != edges.end())\n        {\n            // first find the bounding range for all the edges connected to node itr->index1()\n            beg = itr; \n            while (itr != edges.end() && itr->index1() == beg->index1())\n                ++itr;\n\n            // If the node has more than k edges then sort them by distance so that\n            // we will end up with the k best.\n            if (static_cast<unsigned long>(itr - beg) > k)\n            {\n                std::sort(beg, itr, &order_by_distance_and_index<ordered_sample_pair>);\n            }\n\n            // take the k best unique edges from the range [beg,itr)\n            temp.push_back(sample_pair(beg->index1(), beg->index2(), beg->distance()));\n            unsigned long prev_index2 = beg->index2();\n            ++beg;\n            unsigned long count = 1;\n            for (; beg != itr && count < k; ++beg)\n            {\n                if (beg->index2() != prev_index2)\n                {\n                    temp.push_back(sample_pair(beg->index1(), beg->index2(), beg->distance()));\n                    ++count;\n                }\n                prev_index2 = beg->index2();\n            }\n        }\n\n\n        remove_duplicate_edges(temp);\n        temp.swap(out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename distance_function_type,\n        typename alloc\n        >\n    void find_k_nearest_neighbors (\n        const vector_type& samples,\n        const distance_function_type& dist_funct,\n        const unsigned long k,\n        std::vector<sample_pair, alloc>& out\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(k > 0,\n            \"\\t void find_k_nearest_neighbors()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t samples.size(): \" << samples.size()\n            << \"\\n\\t k:              \" << k \n            );\n\n        out.clear();\n\n        if (samples.size() <= 1)\n        {\n            return;\n        }\n\n        using namespace impl;\n        std::vector<sample_pair> edges;\n\n        // Initialize all the edges to an edge with an invalid index\n        edges.resize(samples.size()*k, \n                     sample_pair(samples.size(),samples.size(),std::numeric_limits<double>::infinity()));\n\n        // Hold the length for the longest edge for each node.  Initially they are all infinity.\n        std::vector<double> worst_dists(samples.size(), std::numeric_limits<double>::infinity());\n\n        std::vector<sample_pair>::iterator begin_i, end_i, begin_j, end_j, itr;\n        begin_i = edges.begin();\n        end_i = begin_i + k;\n\n        // Loop over all combinations of samples.   We will maintain the iterator ranges so that\n        // within the inner for loop we have:\n        //   [begin_i, end_i) == the range in edges that contains neighbors of samples[i]\n        //   [begin_j, end_j) == the range in edges that contains neighbors of samples[j]\n        for (unsigned long i = 0; i+1 < samples.size(); ++i)\n        {\n            begin_j = begin_i;\n            end_j = end_i;\n\n            for (unsigned long j = i+1; j < samples.size(); ++j)\n            {\n                begin_j += k;\n                end_j += k;\n\n                const double dist = dist_funct(samples[i], samples[j]);\n\n                if (dist < worst_dists[i])\n                {\n                    *iterator_of_worst(begin_i, end_i) = sample_pair(i, j, dist);\n                    worst_dists[i] = iterator_of_worst(begin_i, end_i)->distance();\n                }\n\n                if (dist < worst_dists[j])\n                {\n                    *iterator_of_worst(begin_j, end_j) = sample_pair(i, j, dist);\n                    worst_dists[j] = iterator_of_worst(begin_j, end_j)->distance();\n                }\n            }\n\n            begin_i += k;\n            end_i += k;\n        }\n\n        // sort the edges so that duplicate edges will be adjacent\n        std::sort(edges.begin(), edges.end(), &order_by_index<sample_pair>);\n\n        // if the first edge is valid \n        if (edges[0].index1() < samples.size())\n        {\n            // now put edges into out while avoiding duplicates and any remaining invalid edges.\n            out.reserve(edges.size());\n            out.push_back(edges[0]);\n            for (unsigned long i = 1; i < edges.size(); ++i)\n            {\n                // if we hit an invalid edge then we can stop\n                if (edges[i].index1() >= samples.size())\n                    break;\n\n                // if this isn't a duplicate edge\n                if (edges[i] != edges[i-1])\n                {\n                    out.push_back(edges[i]);\n                }\n            }\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    bool contains_duplicate_pairs (\n        const vector_type& pairs\n    )\n    {\n        typedef typename vector_type::value_type T;\n        vector_type temp(pairs);\n        std::sort(temp.begin(), temp.end(), &order_by_index<T>);\n\n        for (unsigned long i = 1; i < temp.size(); ++i)\n        {\n            // if we found a duplicate\n            if (temp[i-1] == temp[i])\n                return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    typename enable_if_c<(is_same_type<sample_pair, typename vector_type::value_type>::value ||\n                          is_same_type<ordered_sample_pair, typename vector_type::value_type>::value),\n                          unsigned long>::type\n    max_index_plus_one (\n        const vector_type& pairs\n    )\n    {\n        if (pairs.size() == 0)\n        {\n            return 0;\n        }\n        else\n        {\n            unsigned long max_idx = 0;\n            for (unsigned long i = 0; i < pairs.size(); ++i)\n            {\n                if (pairs[i].index1() > max_idx)\n                    max_idx = pairs[i].index1();\n                if (pairs[i].index2() > max_idx)\n                    max_idx = pairs[i].index2();\n            }\n\n            return max_idx + 1;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_long_edges (\n        vector_type& pairs,\n        double distance_threshold\n    )\n    {\n        vector_type temp;\n        temp.reserve(pairs.size());\n\n        // add all the pairs shorter than the given threshold into temp\n        for (unsigned long i = 0; i < pairs.size(); ++i)\n        {\n            if (pairs[i].distance() <= distance_threshold)\n                temp.push_back(pairs[i]);\n        }\n\n        // move temp into the output vector\n        temp.swap(pairs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_short_edges (\n        vector_type& pairs,\n        double distance_threshold\n    )\n    {\n        vector_type temp;\n        temp.reserve(pairs.size());\n\n        // add all the pairs longer than the given threshold into temp\n        for (unsigned long i = 0; i < pairs.size(); ++i)\n        {\n            if (pairs[i].distance() >= distance_threshold)\n                temp.push_back(pairs[i]);\n        }\n\n        // move temp into the output vector\n        temp.swap(pairs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_percent_longest_edges (\n        vector_type& pairs,\n        double percent \n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( 0 <= percent && percent < 1,\n            \"\\t void remove_percent_longest_edges()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t percent:        \" << percent \n            );\n\n        typedef typename vector_type::value_type T;\n        std::sort(pairs.begin(), pairs.end(), &order_by_distance<T>);\n\n        const unsigned long num = static_cast<unsigned long>((1.0-percent)*pairs.size());\n\n        // pick out the num shortest pairs\n        vector_type temp(pairs.begin(), pairs.begin() + num);\n\n        // move temp into the output vector\n        temp.swap(pairs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_percent_shortest_edges (\n        vector_type& pairs,\n        double percent \n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( 0 <= percent && percent < 1,\n            \"\\t void remove_percent_shortest_edges()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t percent:        \" << percent \n            );\n\n        typedef typename vector_type::value_type T;\n        std::sort(pairs.rbegin(), pairs.rend(), &order_by_distance<T>);\n\n        const unsigned long num = static_cast<unsigned long>((1.0-percent)*pairs.size());\n\n        // pick out the num shortest pairs\n        vector_type temp(pairs.begin(), pairs.begin() + num);\n\n        // move temp into the output vector\n        temp.swap(pairs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    bool is_ordered_by_index (\n        const vector_type& edges\n    )\n    {\n        for (unsigned long i = 1; i < edges.size(); ++i)\n        {\n            if (order_by_index(edges[i], edges[i-1]))\n                return false;\n        }\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename alloc1, \n        typename alloc2\n        >\n    void find_neighbor_ranges (\n        const std::vector<ordered_sample_pair,alloc1>& edges,\n        std::vector<std::pair<unsigned long, unsigned long>,alloc2>& neighbors\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_ordered_by_index(edges),\n                    \"\\t void find_neighbor_ranges()\"\n                    << \"\\n\\t Invalid inputs were given to this function\"\n        );\n\n\n        // setup neighbors so that [neighbors[i].first, neighbors[i].second) is the range\n        // within edges that contains all node i's edges.\n        const unsigned long num_nodes = max_index_plus_one(edges);\n        neighbors.assign(num_nodes, std::make_pair(0,0));\n        unsigned long cur_node = 0;\n        unsigned long start_idx = 0;\n        for (unsigned long i = 0; i < edges.size(); ++i)\n        {\n            if (edges[i].index1() != cur_node)\n            {\n                neighbors[cur_node] = std::make_pair(start_idx, i);\n                start_idx = i;\n                cur_node = edges[i].index1();\n            }\n        }\n        if (neighbors.size() != 0)\n            neighbors[cur_node] = std::make_pair(start_idx, (unsigned long)edges.size());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename alloc1, \n        typename alloc2\n        >\n    void convert_unordered_to_ordered (\n        const std::vector<sample_pair,alloc1>& edges,\n        std::vector<ordered_sample_pair,alloc2>& out_edges\n    )\n    {\n        out_edges.clear();\n        out_edges.reserve(edges.size()*2);\n        for (unsigned long i = 0; i < edges.size(); ++i)\n        {\n            out_edges.push_back(ordered_sample_pair(edges[i].index1(), edges[i].index2(), edges[i].distance()));\n            if (edges[i].index1() != edges[i].index2())\n                out_edges.push_back(ordered_sample_pair(edges[i].index2(), edges[i].index1(), edges[i].distance()));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_EDGE_LIST_GrAPHS_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/edge_list_graphs_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_EDGE_LIST_GrAPHS_ABSTRACT_Hh_\n#ifdef DLIB_EDGE_LIST_GrAPHS_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../string.h\"\n#include \"sample_pair_abstract.h\"\n#include \"ordered_sample_pair_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename distance_function_type,\n        typename alloc,\n        typename T\n        >\n    void find_percent_shortest_edges_randomly (\n        const vector_type& samples,\n        const distance_function_type& dist_funct,\n        const double percent,\n        const unsigned long num,\n        const T& random_seed,\n        std::vector<sample_pair, alloc>& out\n    );\n    /*!\n        requires\n            - 0 < percent <= 1\n            - num > 0\n            - random_seed must be convertible to a string by dlib::cast_to_string()\n            - dist_funct(samples[i], samples[j]) must be a valid expression that evaluates\n              to a floating point number \n        ensures\n            - This function randomly samples the space of pairs of integers between\n              0 and samples.size()-1 inclusive.  For each of these pairs, (i,j), a\n              sample_pair is created as follows:    \n                sample_pair(i, j, dist_funct(samples[i], samples[j]))\n              num such sample_pair objects are generated, duplicates and pairs with distance\n              values == infinity are removed, and then the top percent of them with the \n              smallest distance are stored into out.  \n            - #out.size() <= num*percent \n            - contains_duplicate_pairs(#out) == false\n            - for all valid i:\n                - #out[i].distance() == dist_funct(samples[#out[i].index1()], samples[#out[i].index2()])\n                - #out[i].distance() < std::numeric_limits<double>::infinity()\n            - random_seed is used to seed the random number generator used by this \n              function.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename distance_function_type,\n        typename alloc,\n        typename T\n        >\n    void find_approximate_k_nearest_neighbors (\n        const vector_type& samples,\n        const distance_function_type& dist_funct,\n        const unsigned long k,\n        const unsigned long num,\n        const T& random_seed,\n        std::vector<sample_pair, alloc>& out\n    );\n    /*!\n        requires\n            - k > 0\n            - num > 0\n            - random_seed must be convertible to a string by dlib::cast_to_string()\n            - dist_funct(samples[i], samples[j]) must be a valid expression that evaluates\n              to a floating point number \n        ensures\n            - This function computes an approximate form of k nearest neighbors. As num grows \n              larger the output of this function converges to the output of the \n              find_k_nearest_neighbors() function defined below.\n            - Specifically, this function randomly samples the space of pairs of integers between\n              0 and samples.size()-1 inclusive.  For each of these pairs, (i,j), a\n              sample_pair is created as follows:    \n                sample_pair(i, j, dist_funct(samples[i], samples[j]))\n              num such sample_pair objects are generated and then exact k-nearest-neighbors\n              is performed amongst these sample_pairs and the results are stored into #out.\n              Note that samples with an infinite distance between them are considered to \n              be not connected at all.\n            - contains_duplicate_pairs(#out) == false\n            - for all valid i:\n                - #out[i].distance() == dist_funct(samples[#out[i].index1()], samples[#out[i].index2()])\n                - #out[i].distance() < std::numeric_limits<double>::infinity()\n            - random_seed is used to seed the random number generator used by this \n              function.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename distance_function_type,\n        typename alloc\n        >\n    void find_k_nearest_neighbors (\n        const vector_type& samples,\n        const distance_function_type& dist_funct,\n        const unsigned long k,\n        std::vector<sample_pair, alloc>& out\n    );\n    /*!\n        requires\n            - k > 0\n            - dist_funct(samples[i], samples[j]) must be a valid expression that evaluates\n              to a floating point number \n        ensures\n            - #out == a set of sample_pair objects that represent all the k nearest \n              neighbors in samples according to the given distance function dist_funct.  \n              Note that samples with an infinite distance between them are considered to \n              be not connected at all.\n            - for all valid i:\n                - #out[i].distance() == dist_funct(samples[#out[i].index1()], samples[#out[i].index2()])\n                - #out[i].distance() < std::numeric_limits<double>::infinity()\n            - contains_duplicate_pairs(#out) == false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    bool contains_duplicate_pairs (\n        const vector_type& pairs\n    );\n    /*!\n        requires\n            - vector_type == a type with an interface compatible with std::vector and it\n              must in turn contain objects with an interface compatible with\n              dlib::sample_pair or dlib::ordered_sample_pair.\n        ensures\n            - if (pairs contains any elements that are equal according to operator==) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    unsigned long max_index_plus_one (\n        const vector_type& pairs\n    );\n    /*!\n        requires\n            - vector_type == a type with an interface compatible with std::vector and it\n              must in turn contain objects with an interface compatible with\n              dlib::sample_pair or dlib::ordered_sample_pair.\n        ensures\n            - if (pairs.size() == 0) then\n                - returns 0\n            - else\n                - returns a number N such that: \n                    - for all i:  pairs[i].index1()   <  N && pairs[i].index2()   <  N\n                    - for some j: pairs[j].index1()+1 == N || pairs[j].index2()+1 == N\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_long_edges (\n        vector_type& pairs,\n        double distance_threshold\n    );\n    /*!\n        requires\n            - vector_type == a type with an interface compatible with std::vector and it\n              must in turn contain objects with an interface compatible with\n              dlib::sample_pair or dlib::ordered_sample_pair.\n        ensures\n            - Removes all elements of pairs that have a distance value greater than the\n              given threshold.\n            - #pairs.size() <= pairs.size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_short_edges (\n        vector_type& pairs,\n        double distance_threshold\n    );\n    /*!\n        requires\n            - vector_type == a type with an interface compatible with std::vector and it\n              must in turn contain objects with an interface compatible with\n              dlib::sample_pair or dlib::ordered_sample_pair.\n        ensures\n            - Removes all elements of pairs that have a distance value less than the\n              given threshold.\n            - #pairs.size() <= pairs.size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_percent_longest_edges (\n        vector_type& pairs,\n        double percent \n    );\n    /*!\n        requires\n            - 0 <= percent < 1\n            - vector_type == a type with an interface compatible with std::vector and it\n              must in turn contain objects with an interface compatible with\n              dlib::sample_pair or dlib::ordered_sample_pair.\n        ensures\n            - Removes the given upper percentage of the longest edges in pairs.  I.e.\n              this function removes the long edges from pairs.\n            - #pairs.size() == (1-percent)*pairs.size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_percent_shortest_edges (\n        vector_type& pairs,\n        double percent \n    );\n    /*!\n        requires\n            - 0 <= percent < 1\n            - vector_type == a type with an interface compatible with std::vector and it\n              must in turn contain objects with an interface compatible with\n              dlib::sample_pair or dlib::ordered_sample_pair.\n        ensures\n            - Removes the given upper percentage of the shortest edges in pairs.  I.e.\n              this function removes the short edges from pairs.\n            - #pairs.size() == (1-percent)*pairs.size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    void remove_duplicate_edges (\n        vector_type& pairs\n    );\n    /*!\n        requires\n            - vector_type == a type with an interface compatible with std::vector and it\n              must in turn contain objects with an interface compatible with\n              dlib::sample_pair or dlib::ordered_sample_pair.\n        ensures\n            - Removes any duplicate edges from pairs.  That is, for all elements of pairs,\n              A and B, such that A == B, only one of A or B will be in pairs after this\n              function terminates.\n            - #pairs.size() <= pairs.size()\n            - is_ordered_by_index(#pairs) == true\n            - contains_duplicate_pairs(#pairs) == false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    bool is_ordered_by_index (\n        const vector_type& edges\n    );\n    /*!\n        requires\n            - vector_type == a type with an interface compatible with std::vector and it\n              must in turn contain objects with an interface compatible with\n              dlib::sample_pair or dlib::ordered_sample_pair.\n        ensures\n            - returns true if and only if the contents of edges are in sorted order\n              according to order_by_index().  That is, we return true if calling\n              std::stable_sort(edges.begin(), edges.end(), &order_by_index<T>) would not\n              change the ordering of elements of edges.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename alloc1, \n        typename alloc2\n        >\n    void find_neighbor_ranges (\n        const std::vector<ordered_sample_pair,alloc1>& edges,\n        std::vector<std::pair<unsigned long, unsigned long>,alloc2>& neighbors\n    );\n    /*!\n        requires\n            - is_ordered_by_index(edges) == true\n              (i.e. edges is sorted so that all the edges for a particular node are grouped\n              together)\n        ensures\n            - This function takes a graph, represented by its list of edges, and finds the\n              ranges that contain the edges for each node in the graph.  In particular,\n              #neighbors[i] will tell you which edges correspond to the ith node in the\n              graph.\n            - #neighbors.size() == max_index_plus_one(edges)\n              (i.e. neighbors will have an entry for each node in the graph defined by the\n              list of edges)\n            - for all valid i:\n                - all elements of edges such that their index1() value == i are in the\n                  range [neighbors[i].first, neighbors[i].second).  That is, for all k such\n                  that neighbors[i].first <= k < neighbors[i].second:\n                    - edges[k].index1() == i.\n                    - all edges outside this range have an index1() value != i\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename alloc1, \n        typename alloc2\n        >\n    void convert_unordered_to_ordered (\n        const std::vector<sample_pair,alloc1>& edges,\n        std::vector<ordered_sample_pair,alloc2>& out_edges\n    );\n    /*!\n        ensures\n            - interprets edges a defining an undirected graph. \n            - This function populates out_edges with a directed graph that represents the\n              same graph as the one in edges.  In particular, this means that for all valid\n              i we have the following:\n                - if (edges[i].index1() != edges[i].index2()) then\n                    - #out_edges contains two edges corresponding to edges[i].  They\n                      represent the two directions of this edge.  The distance value from\n                      edges[i] is also copied into the output edges.\n                - else\n                    - #out_edges contains one edge corresponding to edges[i] since this is\n                      a self edge.  The distance value from edges[i] is also copied into\n                      the output edge.\n            - max_index_plus_one(edges) == max_index_plus_one(#out_edges) \n              (i.e. both graphs have the same number of nodes)\n            - In all but the most trivial cases, we will have is_ordered_by_index(#out_edges) == false\n            - contains_duplicate_pairs(#out_edges) == contains_duplicate_pairs(edges)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_EDGE_LIST_GrAPHS_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/find_k_nearest_neighbors_lsh.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FIND_K_NEAREST_NEIGHBOrS_LSH_Hh_\n#define DLIB_FIND_K_NEAREST_NEIGHBOrS_LSH_Hh_\n\n#include \"find_k_nearest_neighbors_lsh_abstract.h\"\n#include \"../threads.h\"\n#include \"../lsh/hashes.h\"\n#include <vector>\n#include <queue>\n#include \"sample_pair.h\"\n#include \"edge_list_graphs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        struct compare_sample_pair_with_distance \n        {\n            inline bool operator() (const sample_pair& a, const sample_pair& b) const\n            { \n                return a.distance() < b.distance();\n            }\n        };\n\n        template <\n            typename vector_type,\n            typename hash_function_type\n            >\n        class hash_block\n        {\n        public:\n            hash_block(\n                const vector_type& samples_,\n                const hash_function_type& hash_funct_,\n                std::vector<typename hash_function_type::result_type>& hashes_\n            ) : \n                samples(samples_),\n                hash_funct(hash_funct_),\n                hashes(hashes_)\n            {}\n\n            void operator() (long i) const\n            {\n                hashes[i] = hash_funct(samples[i]);\n            }\n\n            const vector_type& samples;\n            const hash_function_type& hash_funct;\n            std::vector<typename hash_function_type::result_type>& hashes;\n        };\n\n        template <\n            typename vector_type,\n            typename distance_function_type,\n            typename hash_function_type,\n            typename alloc\n            >\n        class scan_find_k_nearest_neighbors_lsh\n        {\n        public:\n            scan_find_k_nearest_neighbors_lsh (\n                const vector_type& samples_,\n                const distance_function_type& dist_funct_,\n                const hash_function_type& hash_funct_,\n                const unsigned long k_,\n                std::vector<sample_pair, alloc>& edges_,\n                const unsigned long k_oversample_,\n                const std::vector<typename hash_function_type::result_type>& hashes_\n            ) :\n                samples(samples_),\n                dist_funct(dist_funct_),\n                hash_funct(hash_funct_),\n                k(k_),\n                edges(edges_),\n                k_oversample(k_oversample_),\n                hashes(hashes_)\n            {\n                edges.clear();\n                edges.reserve(samples.size()*k/2);\n            }\n\n            mutex m;\n            const vector_type& samples;\n            const distance_function_type& dist_funct;\n            const hash_function_type& hash_funct;\n            const unsigned long k;\n            std::vector<sample_pair, alloc>& edges;\n            const unsigned long k_oversample;\n            const std::vector<typename hash_function_type::result_type>& hashes;\n\n            void operator() (unsigned long i) const\n            {\n                const unsigned long k_hash = k*k_oversample;\n\n                std::priority_queue<std::pair<unsigned long, unsigned long> > best_hashes;\n                std::priority_queue<sample_pair, std::vector<sample_pair>, dlib::impl::compare_sample_pair_with_distance> best_samples;\n                unsigned long worst_distance = std::numeric_limits<unsigned long>::max();\n                // scan over the hashes and find the best matches for hashes[i]\n                for (unsigned long j = 0; j < hashes.size(); ++j)\n                {\n                    if (i == j) \n                        continue;\n\n                    const unsigned long dist = hash_funct.distance(hashes[i], hashes[j]);\n                    if (dist < worst_distance || best_hashes.size() < k_hash)\n                    {\n                        if (best_hashes.size() >= k_hash)\n                            best_hashes.pop();\n                        best_hashes.push(std::make_pair(dist, j));\n                        worst_distance = best_hashes.top().first;\n                    }\n                }\n\n                // Now figure out which of the best_hashes are actually the k best matches\n                // according to dist_funct()\n                while (best_hashes.size() != 0)\n                {\n                    const unsigned long j = best_hashes.top().second;\n                    best_hashes.pop();\n\n                    const double dist = dist_funct(samples[i], samples[j]);\n                    if (dist < std::numeric_limits<double>::infinity())\n                    {\n                        if (best_samples.size() >= k)\n                            best_samples.pop();\n                        best_samples.push(sample_pair(i,j,dist));\n                    }\n                }\n\n                // Finally, now put the k best matches according to dist_funct() into edges\n                auto_mutex lock(m);\n                while (best_samples.size() != 0)\n                {\n                    edges.push_back(best_samples.top());\n                    best_samples.pop();\n                }\n            }\n        };\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename hash_function_type\n        >\n    void hash_samples (\n        const vector_type& samples,\n        const hash_function_type& hash_funct,\n        const unsigned long num_threads,\n        std::vector<typename hash_function_type::result_type>& hashes\n    )\n    {\n        hashes.resize(samples.size());\n\n        typedef impl::hash_block<vector_type,hash_function_type> block_type;\n        block_type temp(samples, hash_funct, hashes);\n        parallel_for(num_threads, 0, samples.size(), temp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename distance_function_type,\n        typename hash_function_type,\n        typename alloc\n        >\n    void find_k_nearest_neighbors_lsh (\n        const vector_type& samples,\n        const distance_function_type& dist_funct,\n        const hash_function_type& hash_funct,\n        const unsigned long k,\n        const unsigned long num_threads,\n        std::vector<sample_pair, alloc>& edges,\n        const unsigned long k_oversample = 20 \n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(k > 0 && k_oversample > 0,\n            \"\\t void find_k_nearest_neighbors_lsh()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t samples.size(): \" << samples.size()\n            << \"\\n\\t k:              \" << k \n            << \"\\n\\t k_oversample:   \" << k_oversample \n            );\n\n        edges.clear();\n\n        if (samples.size() <= 1)\n        {\n            return;\n        }\n\n        typedef typename hash_function_type::result_type hash_type;\n        std::vector<hash_type> hashes;\n        hash_samples(samples, hash_funct, num_threads, hashes);\n\n        typedef impl::scan_find_k_nearest_neighbors_lsh<vector_type, distance_function_type,hash_function_type,alloc> scan_type;\n        scan_type temp(samples, dist_funct, hash_funct, k, edges, k_oversample, hashes);\n        parallel_for(num_threads, 0, hashes.size(), temp);\n\n        remove_duplicate_edges(edges);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FIND_K_NEAREST_NEIGHBOrS_LSH_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/find_k_nearest_neighbors_lsh_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FIND_K_NEAREST_NEIGHBOrS_LSH_ABSTRACT_Hh_\n#ifdef DLIB_FIND_K_NEAREST_NEIGHBOrS_LSH_ABSTRACT_Hh_\n\n#include \"../lsh/hashes_abstract.h\"\n#include \"sample_pair_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename hash_function_type\n        >\n    void hash_samples (\n        const vector_type& samples,\n        const hash_function_type& hash_funct,\n        const unsigned long num_threads,\n        std::vector<typename hash_function_type::result_type>& hashes\n    );\n    /*!\n        requires\n            - hash_funct() is threadsafe.  This means that it must be safe for multiple\n              threads to invoke the member functions of hash_funct() at the same time.\n            - vector_type is any container that looks like a std::vector or dlib::array.\n            - hash_funct must be a function object with an interface compatible with the\n              objects defined in dlib/lsh/hashes_abstract.h.  In particular, hash_funct\n              must be capable of hashing the elements in the samples vector.\n        ensures\n            - This function hashes all the elements in samples and stores the results in\n              hashes.  It will also use num_threads concurrent threads to do this.  You\n              should set this value equal to the number of processing cores on your\n              computer for maximum speed.\n            - #hashes.size() == 0\n            - for all valid i:\n                - #hashes[i] = hash_funct(samples[i])\n                  (i.e. #hashes[i] will contain the hash of samples[i])\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type,\n        typename distance_function_type,\n        typename hash_function_type,\n        typename alloc\n        >\n    void find_k_nearest_neighbors_lsh (\n        const vector_type& samples,\n        const distance_function_type& dist_funct,\n        const hash_function_type& hash_funct,\n        const unsigned long k,\n        const unsigned long num_threads,\n        std::vector<sample_pair, alloc>& edges,\n        const unsigned long k_oversample = 20 \n    );\n    /*!\n        requires\n            - hash_funct and dist_funct are threadsafe.  This means that it must be safe\n              for multiple threads to invoke the member functions of these objects at the\n              same time.\n            - k > 0\n            - k_oversample > 0\n            - dist_funct(samples[i], samples[j]) must be a valid expression that evaluates\n              to a floating point number \n            - vector_type is any container that looks like a std::vector or dlib::array.\n            - hash_funct must be a function object with an interface compatible with the\n              objects defined in dlib/lsh/hashes_abstract.h.  In particular, hash_funct\n              must be capable of hashing the elements in the samples vector.\n        ensures\n            - This function computes an approximate form of a k nearest neighbors graph of\n              the elements in samples.  In particular, the way it works is that it first\n              hashes all elements in samples using the provided locality sensitive hash\n              function hash_funct().  Then it performs an exact k nearest neighbors on the\n              hashes which can be done very quickly.  For each of these neighbors we\n              compute the true distance using dist_funct() and the k nearest neighbors for\n              each sample are stored into #edges.  \n            - Note that samples with an infinite distance between them are considered to be\n              not connected at all. Therefore, we exclude edges with such distances from\n              being output.\n            - for all valid i:\n                - #edges[i].distance() == dist_funct(samples[#edges[i].index1()], samples[#edges[i].index2()])\n                - #edges[i].distance() < std::numeric_limits<double>::infinity()\n            - contains_duplicate_pairs(#edges) == false\n            - This function will use num_threads concurrent threads of processing.  You\n              should set this value equal to the number of processing cores on your\n              computer for maximum speed.\n            - The hash based k nearest neighbor step is approximate, however, you can\n              improve the output accuracy by using a larger k value for this first step.\n              Therefore, this function finds k*k_oversample nearest neighbors during the\n              first hashing based step. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FIND_K_NEAREST_NEIGHBOrS_LSH_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/function_objects.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MR_FUNCTION_ObJECTS_Hh_\n#define DLIB_MR_FUNCTION_ObJECTS_Hh_\n\n#include \"function_objects_abstract.h\"\n#include \"../matrix.h\"\n#include \"../svm/sparse_vector.h\"\n#include <cmath>\n#include <limits>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct squared_euclidean_distance\n    {\n        squared_euclidean_distance (\n        ) : \n            lower(0),\n            upper(std::numeric_limits<double>::infinity())\n        {}\n\n        squared_euclidean_distance (\n            const double l,\n            const double u\n        ) :\n            lower(l),\n            upper(u)\n        {}\n\n        const double lower;\n        const double upper;\n\n        template <typename sample_type>\n        double operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            const double len = length_squared(a-b);\n            if (lower <= len && len <= upper)\n                return len;\n            else\n                return std::numeric_limits<double>::infinity();\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct cosine_distance \n    {\n        template <typename sample_type>\n        double operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            const double temp = length(a)*length(b);\n            if (temp == 0)\n                return 0;\n            else\n                return 1-dot(a,b)/temp;\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct negative_dot_product_distance \n    {\n        template <typename sample_type>\n        double operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return -dot(a,b);\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct use_weights_of_one \n    {\n        template <typename edge_type>\n        double operator() (\n            const edge_type&\n        ) const\n        { \n            return 1;\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct use_gaussian_weights \n    {\n        use_gaussian_weights (\n        ) \n        {\n            gamma = 0.1;\n        }\n\n        use_gaussian_weights (\n            double g\n        )\n        {\n            gamma = g;\n        }\n\n        double gamma;\n\n        template <typename edge_type>\n        double operator() (\n            const edge_type& e\n        ) const\n        { \n            return std::exp(-gamma*e.distance());\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MR_FUNCTION_ObJECTS_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/function_objects_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MR_FUNCTION_ObJECTS_ABSTRACT_Hh_\n#ifdef DLIB_MR_FUNCTION_ObJECTS_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n#include <cmath>\n#include \"../svm/sparse_vector_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct squared_euclidean_distance\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple function object that computes squared euclidean distance\n                between two dlib::matrix objects. \n\n            THREAD SAFETY\n                This object has no mutable members.  Therefore, it is safe to call\n                operator() on a single instance of this object simultaneously from multiple\n                threads.\n        !*/\n\n        squared_euclidean_distance (\n        );\n        /*!\n            ensures\n                - #lower == 0\n                - #upper == std::numeric_limits<double>::infinity()\n        !*/\n\n        squared_euclidean_distance (\n            const double l,\n            const double u\n        );\n        /*!\n            ensures\n                - #lower == l\n                - #upper == u  \n        !*/\n\n        const double lower;\n        const double upper;\n\n        template <typename sample_type>\n        double operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - sample_type should be a kind of dlib::matrix \n            ensures\n                - let LEN = length_squared(a-b)\n                - if (lower <= LEN <= upper) then\n                    - returns LEN\n                - else\n                    - returns std::numeric_limits<double>::infinity()\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct cosine_distance \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple function object that computes the cosine of the angle\n                between two vectors and returns 1 - this quantity.   Moreover, this object\n                works for both sparse and dense vectors.\n\n            THREAD SAFETY\n                This object has no mutable members.  Therefore, it is safe to call\n                operator() on a single instance of this object simultaneously from multiple\n                threads.\n        !*/\n\n        template <typename sample_type>\n        double operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - sample_type is a dense vector (e.g. a dlib::matrix) or a sparse\n                  vector as defined at the top of dlib/svm/sparse_vector_abstract.h\n            ensures\n                - let theta = the angle between a and b.  \n                - returns 1 - cos(theta)\n                  (e.g. this function returns 0 when a and b have an angle of 0 between\n                  each other, 1 if they have a 90 degree angle, and a maximum of 2 if the\n                  vectors have a 180 degree angle between each other).\n                - zero length vectors are considered to have angles of 0 between all other\n                  vectors.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct negative_dot_product_distance \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple function object that computes the dot product between two\n                vectors and returns the negation of this value.  Moreover, this object\n                works for both sparse and dense vectors.\n\n            THREAD SAFETY\n                This object has no mutable members.  Therefore, it is safe to call\n                operator() on a single instance of this object simultaneously from multiple\n                threads.\n        !*/\n\n        template <typename sample_type>\n        double operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - sample_type is a dense vector (e.g. a dlib::matrix) or a sparse\n                  vector as defined at the top of dlib/svm/sparse_vector_abstract.h\n            ensures\n                - returns -dot(a,b)\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct use_weights_of_one \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple function object that takes a single argument\n                and always returns 1 \n\n            THREAD SAFETY\n                This object has no mutable members.  Therefore, it is safe to call\n                operator() on a single instance of this object simultaneously from multiple\n                threads.\n        !*/\n\n        template <typename edge_type>\n        double operator() (\n            const edge_type&\n        ) const;\n        /*!\n            ensures\n                - returns 1\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct use_gaussian_weights \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple function object that takes a single argument\n                which should be an object similar to dlib::sample_pair.  \n\n            THREAD SAFETY\n                This object has no mutable members.  Therefore, it is safe to call\n                operator() on a single instance of this object simultaneously from multiple\n                threads.\n        !*/\n\n        use_gaussian_weights (\n        );\n        /*!\n            ensures\n                - #gamma == 0.1\n        !*/\n\n        use_gaussian_weights (\n            double g\n        );\n        /*!\n            ensures\n                - #gamma == g\n        !*/\n\n        double gamma;\n\n        template <typename edge_type>\n        double operator() (\n            const edge_type& e\n        ) const;\n        /*!\n            requires\n                - e.distance() must be a valid expression that returns a number\n                  (e.g. edge_type might be dlib::sample_pair)\n            ensures\n                - returns std::exp(-gamma*e.distance());\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MR_FUNCTION_ObJECTS_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/graph_utils.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GRAPH_UTILs_\n#define DLIB_GRAPH_UTILs_\n\n#include \"../algs.h\"\n#include <vector>\n#include \"graph_utils_abstract.h\"\n#include \"../is_kind.h\"\n#include \"../enable_if.h\"\n#include <algorithm>\n#include \"../set.h\"\n#include \"../memory_manager.h\"\n#include \"../set_utils.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename enable_if<is_graph<T>,typename T::edge_type>::type& edge(\n        T& g, \n        unsigned long idx_i, \n        unsigned long idx_j\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(g.has_edge(idx_i,idx_j) == true,\n            \"\\tT::edge_type& edge(g, idx_i, idx_j)\"\n            << \"\\n\\t you have requested an invalid edge\"\n            << \"\\n\\t idx_i: \" << idx_i\n            << \"\\n\\t idx_j: \" << idx_j \n            );\n\n        for (unsigned long i = 0; i < g.node(idx_i).number_of_neighbors(); ++i)\n        {\n            if (g.node(idx_i).neighbor(i).index() == idx_j)\n                return g.node(idx_i).edge(i);\n        }\n\n        // put this here just so compilers don't complain about a lack of\n        // a return here\n        DLIB_CASSERT(false,\n            \"\\tT::edge_type& edge(g, idx_i, idx_j)\"\n            << \"\\n\\t you have requested an invalid edge\"\n            << \"\\n\\t idx_i: \" << idx_i\n            << \"\\n\\t idx_j: \" << idx_j \n            );\n    }\n\n    template <typename T>\n    const typename enable_if<is_graph<T>,typename T::edge_type>::type& edge(\n        const T& g,  \n        unsigned long idx_i,\n        unsigned long idx_j\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(g.has_edge(idx_i,idx_j) == true,\n            \"\\tT::edge_type& edge(g, idx_i, idx_j)\"\n            << \"\\n\\t you have requested an invalid edge\"\n            << \"\\n\\t idx_i: \" << idx_i\n            << \"\\n\\t idx_j: \" << idx_j \n            );\n\n        for (unsigned long i = 0; i < g.node(idx_i).number_of_neighbors(); ++i)\n        {\n            if (g.node(idx_i).neighbor(i).index() == idx_j)\n                return g.node(idx_i).edge(i);\n        }\n\n        // put this here just so compilers don't complain about a lack of\n        // a return here\n        DLIB_CASSERT(false,\n            \"\\tT::edge_type& edge(g, idx_i, idx_j)\"\n            << \"\\n\\t you have requested an invalid edge\"\n            << \"\\n\\t idx_i: \" << idx_i\n            << \"\\n\\t idx_j: \" << idx_j \n            );\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <typename T>\n    typename enable_if<is_directed_graph<T>,typename T::edge_type>::type& edge(\n        T& g, \n        unsigned long parent_idx, \n        unsigned long child_idx \n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(g.has_edge(parent_idx,child_idx) == true,\n            \"\\t T::edge_type& edge(g, parent_idx, child_idx)\"\n            << \"\\n\\t you have requested an invalid edge\"\n            << \"\\n\\t parent_idx: \" << parent_idx\n            << \"\\n\\t child_idx: \" << child_idx \n            );\n\n        for (unsigned long i = 0; i < g.node(parent_idx).number_of_children(); ++i)\n        {\n            if (g.node(parent_idx).child(i).index() == child_idx)\n                return g.node(parent_idx).child_edge(i);\n        }\n\n        // put this here just so compilers don't complain about a lack of\n        // a return here\n        DLIB_CASSERT(false,\n            \"\\t T::edge_type& edge(g, parent_idx, child_idx)\"\n            << \"\\n\\t you have requested an invalid edge\"\n            << \"\\n\\t parent_idx: \" << parent_idx\n            << \"\\n\\t child_idx: \" << child_idx \n            );\n    }\n\n    template <typename T>\n    const typename enable_if<is_directed_graph<T>,typename T::edge_type>::type& edge(\n        const T& g,  \n        unsigned long parent_idx, \n        unsigned long child_idx \n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(g.has_edge(parent_idx,child_idx) == true,\n            \"\\t T::edge_type& edge(g, parent_idx, child_idx)\"\n            << \"\\n\\t you have requested an invalid edge\"\n            << \"\\n\\t parent_idx: \" << parent_idx\n            << \"\\n\\t child_idx: \" << child_idx \n            );\n\n        for (unsigned long i = 0; i < g.node(parent_idx).number_of_children(); ++i)\n        {\n            if (g.node(parent_idx).child(i).index() == child_idx)\n                return g.node(parent_idx).child_edge(i);\n        }\n\n        // put this here just so compilers don't complain about a lack of\n        // a return here\n        DLIB_ASSERT(false,\n            \"\\t T::edge_type& edge(g, parent_idx, child_idx)\"\n            << \"\\n\\t you have requested an invalid edge\"\n            << \"\\n\\t parent_idx: \" << parent_idx\n            << \"\\n\\t child_idx: \" << child_idx \n            );\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    namespace graph_helpers \n    {\n        template <typename T, typename U>\n        inline bool is_same_object (\n            const T& a,\n            const U& b\n        )\n        {\n            if (is_same_type<const T,const U>::value == false)\n                return false;\n            if ((void*)&a == (void*)&b)\n                return true;\n            else\n                return false;\n        }\n\n        template <\n            typename T\n            >\n        bool search_for_directed_cycles (\n            const T& node,\n            std::vector<bool>& visited,\n            std::vector<bool>& temp\n        )\n        /*!\n            requires\n                - visited.size() >= number of nodes in the graph that contains the given node \n                - temp.size() >= number of nodes in the graph that contains the given node \n                - for all i in temp: \n                    - temp[i] == false\n            ensures\n                - checks the connected subgraph containing the given node for directed cycles\n                  and returns true if any are found and false otherwise.\n                - for all nodes N in the connected subgraph containing the given node:\n                    - #visited[N.index()] == true\n                - for all i in temp: \n                    - #temp[i] == false\n        !*/\n        {\n            if (temp[node.index()] == true)\n                return true;\n\n            visited[node.index()] = true;\n            temp[node.index()] = true;\n\n            for (unsigned long i = 0; i < node.number_of_children(); ++i)\n            {\n                if (search_for_directed_cycles(node.child(i), visited, temp))\n                    return true;\n            }\n                \n            temp[node.index()] = false;\n\n            return false;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        typename enable_if<is_directed_graph<typename T::graph_type>,bool>::type search_for_undirected_cycles (\n            const T& node,\n            std::vector<bool>& visited,\n            unsigned long prev = std::numeric_limits<unsigned long>::max()\n        )\n        /*!\n            requires\n                - visited.size() >= number of nodes in the graph that contains the given node \n                - for all nodes N in the connected subgraph containing the given node:\n                    - visited[N.index] == false\n            ensures\n                - checks the connected subgraph containing the given node for directed cycles\n                  and returns true if any are found and false otherwise.\n                - for all nodes N in the connected subgraph containing the given node:\n                    - #visited[N.index()] == true\n        !*/\n        {\n            using namespace std;\n            if (visited[node.index()] == true)\n                return true;\n\n            visited[node.index()] = true;\n\n            for (unsigned long i = 0; i < node.number_of_children(); ++i)\n            {\n                if (node.child(i).index() != prev && \n                    search_for_undirected_cycles(node.child(i), visited, node.index()))\n                    return true;\n            }\n                \n            for (unsigned long i = 0; i < node.number_of_parents(); ++i)\n            {\n                if (node.parent(i).index() != prev && \n                    search_for_undirected_cycles(node.parent(i), visited, node.index()))\n                    return true;\n            }\n\n            return false;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        typename enable_if<is_graph<typename T::graph_type>,bool>::type search_for_undirected_cycles (\n            const T& node,\n            std::vector<bool>& visited,\n            unsigned long prev = std::numeric_limits<unsigned long>::max()\n        )\n        /*!\n            requires\n                - visited.size() >= number of nodes in the graph that contains the given node \n                - for all nodes N in the connected subgraph containing the given node:\n                    - visited[N.index] == false\n            ensures\n                - checks the connected subgraph containing the given node for directed cycles\n                  and returns true if any are found and false otherwise.\n                - for all nodes N in the connected subgraph containing the given node:\n                    - #visited[N.index()] == true\n        !*/\n        {\n            using namespace std;\n            if (visited[node.index()] == true)\n                return true;\n\n            visited[node.index()] = true;\n\n            for (unsigned long i = 0; i < node.number_of_neighbors(); ++i)\n            {\n                if (node.neighbor(i).index() != prev && \n                    search_for_undirected_cycles(node.neighbor(i), visited, node.index()))\n                    return true;\n            }\n                \n            return false;\n        }\n\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type1,\n        typename graph_type2\n        >\n    typename enable_if<is_graph<graph_type1> >::type copy_graph_structure (\n        const graph_type1& src,\n        graph_type2& dest\n    )\n    {\n        COMPILE_TIME_ASSERT(is_graph<graph_type1>::value);\n        COMPILE_TIME_ASSERT(is_graph<graph_type2>::value);\n        if (graph_helpers::is_same_object(src,dest))\n            return;\n\n        dest.clear();\n        dest.set_number_of_nodes(src.number_of_nodes());\n\n        // copy all the edges from src into dest \n        for (unsigned long i = 0; i < src.number_of_nodes(); ++i)\n        {\n            for (unsigned long j = 0; j < src.node(i).number_of_neighbors(); ++j)\n            {\n                const unsigned long nidx = src.node(i).neighbor(j).index();\n                if (nidx >= i)\n                {\n                    dest.add_edge(i,nidx);\n                }\n            }\n        }\n    }\n\n    template <\n        typename graph_type1,\n        typename graph_type2\n        >\n    typename enable_if<is_directed_graph<graph_type1> >::type copy_graph_structure (\n        const graph_type1& src,\n        graph_type2& dest\n    )\n    {\n        COMPILE_TIME_ASSERT(is_directed_graph<graph_type1>::value);\n        COMPILE_TIME_ASSERT(is_directed_graph<graph_type2>::value || is_graph<graph_type2>::value );\n        if (graph_helpers::is_same_object(src,dest))\n            return;\n\n        dest.clear();\n        dest.set_number_of_nodes(src.number_of_nodes());\n\n        // copy all the edges from src into dest \n        for (unsigned long i = 0; i < src.number_of_nodes(); ++i)\n        {\n            for (unsigned long j = 0; j < src.node(i).number_of_children(); ++j)\n            {\n                const unsigned long nidx = src.node(i).child(j).index();\n                if (dest.has_edge(i,nidx) == false)\n                {\n                    dest.add_edge(i,nidx);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type1,\n        typename graph_type2\n        >\n    typename enable_if<is_graph<graph_type1> >::type copy_graph (\n        const graph_type1& src,\n        graph_type2& dest\n    )\n    {\n        COMPILE_TIME_ASSERT(is_graph<graph_type1>::value);\n        COMPILE_TIME_ASSERT(is_graph<graph_type2>::value);\n        if (graph_helpers::is_same_object(src,dest))\n            return;\n\n        copy_graph_structure(src,dest);\n\n        // copy all the node and edge content \n        for (unsigned long i = 0; i < src.number_of_nodes(); ++i)\n        {\n            dest.node(i).data = src.node(i).data;\n\n            for (unsigned long j = 0; j < src.node(i).number_of_neighbors(); ++j)\n            {\n                const unsigned long nidx = src.node(i).neighbor(j).index();\n                if (nidx >= i)\n                {\n                    dest.node(i).edge(j) = src.node(i).edge(j);\n                }\n            }\n        }\n    }\n\n    template <\n        typename graph_type1,\n        typename graph_type2\n        >\n    typename enable_if<is_directed_graph<graph_type1> >::type copy_graph (\n        const graph_type1& src,\n        graph_type2& dest\n    )\n    {\n        COMPILE_TIME_ASSERT(is_directed_graph<graph_type1>::value);\n        COMPILE_TIME_ASSERT(is_directed_graph<graph_type2>::value);\n        if (graph_helpers::is_same_object(src,dest))\n            return;\n\n        copy_graph_structure(src,dest);\n\n        // copy all the node and edge content \n        for (unsigned long i = 0; i < src.number_of_nodes(); ++i)\n        {\n            dest.node(i).data = src.node(i).data;\n            for (unsigned long j = 0; j < src.node(i).number_of_children(); ++j)\n            {\n                dest.node(i).child_edge(j) = src.node(i).child_edge(j);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename S\n        >\n    typename enable_if<is_graph<typename T::graph_type> >::type find_connected_nodes (\n    const T& n,\n    S& visited\n    )\n    {\n        if (visited.is_member(n.index()) == false)\n        {\n            unsigned long temp = n.index();\n            visited.add(temp);\n\n            for (unsigned long i = 0; i < n.number_of_neighbors(); ++i)\n                find_connected_nodes(n.neighbor(i), visited);\n        }\n    }\n\n    template <\n        typename T,\n        typename S\n        >\n    typename enable_if<is_directed_graph<typename T::graph_type> >::type find_connected_nodes (\n    const T& n,\n    S& visited\n    )\n    {\n        if (visited.is_member(n.index()) == false)\n        {\n            unsigned long temp = n.index();\n            visited.add(temp);\n\n            for (unsigned long i = 0; i < n.number_of_parents(); ++i)\n                find_connected_nodes(n.parent(i), visited);\n            for (unsigned long i = 0; i < n.number_of_children(); ++i)\n                find_connected_nodes(n.child(i), visited);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T \n        >\n    bool graph_is_connected (\n        const T& g\n    )\n    {\n        if (g.number_of_nodes() == 0)\n            return true;\n\n        set<unsigned long>::kernel_1b_c visited;\n        find_connected_nodes(g.node(0), visited);\n        return (visited.size() == g.number_of_nodes());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool graph_has_symmetric_edges (\n        const T& graph\n    )\n    {\n        for (unsigned long i = 0; i < graph.number_of_nodes(); ++i)\n        {\n            for (unsigned long j = 0; j < graph.node(i).number_of_children(); ++j)\n            {\n                const unsigned long jj = graph.node(i).child(j).index();\n                // make sure every edge from a parent to a child has an edge linking back\n                if (graph.has_edge(jj,i) == false)\n                    return false;\n            }\n\n            for (unsigned long j = 0; j < graph.node(i).number_of_parents(); ++j)\n            {\n                const unsigned long jj = graph.node(i).parent(j).index();\n                // make sure every edge from a child to a parent has an edge linking back\n                if (graph.has_edge(i,jj) == false)\n                    return false;\n            }\n        }\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename T\n        >\n    bool graph_contains_directed_cycle (\n        const T& graph\n    )\n    {\n        using namespace std;\n        using namespace graph_helpers;\n        std::vector<bool> visited(graph.number_of_nodes(), false);\n        std::vector<bool> temp(graph.number_of_nodes(), false);\n\n        while (true)\n        {\n            // find the first node that hasn't been visited yet\n            unsigned long i;\n            for (i = 0; i < visited.size(); ++i)\n            {\n                if (visited[i] == false)\n                    break;\n            }\n\n            // if we didn't find any non-visited nodes then we are done\n            if (i == visited.size())\n                return false;\n\n            if (search_for_directed_cycles(graph.node(i), visited, temp))\n                return true;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool graph_contains_undirected_cycle (\n        const T& graph\n    )\n    {\n        using namespace std;\n        using namespace graph_helpers;\n        std::vector<bool> visited(graph.number_of_nodes(), false);\n\n        while (true)\n        {\n            // find the first node that hasn't been visited yet\n            unsigned long i;\n            for (i = 0; i < visited.size(); ++i)\n            {\n                if (visited[i] == false)\n                    break;\n            }\n\n            // if we didn't find any non-visited nodes then we are done\n            if (i == visited.size())\n                return false;\n\n            if (search_for_undirected_cycles(graph.node(i), visited))\n                return true;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename directed_graph_type,\n        typename graph_type\n        >\n    void create_moral_graph (\n        const directed_graph_type& g,\n        graph_type& moral_graph\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(graph_contains_directed_cycle(g) == false,\n            \"\\tvoid create_moral_graph(g, moral_graph)\"\n            << \"\\n\\tYou can only make moral graphs if g doesn't have directed cycles\"\n            );\n        COMPILE_TIME_ASSERT(is_graph<graph_type>::value);\n        COMPILE_TIME_ASSERT(is_directed_graph<directed_graph_type>::value);\n\n        copy_graph_structure(g, moral_graph);\n\n        // now marry all the parents (i.e. add edges between parent nodes)\n        for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n        {\n            // loop over all combinations of parents of g.node(i)\n            for (unsigned long j = 0; j < g.node(i).number_of_parents(); ++j)\n            {\n                for (unsigned long k = 0; k < g.node(i).number_of_parents(); ++k)\n                {\n                    const unsigned long p1 = g.node(i).parent(j).index();\n                    const unsigned long p2 = g.node(i).parent(k).index();\n                    if (p1 == p2)\n                        continue;\n\n                    if (moral_graph.has_edge(p1,p2) == false)\n                        moral_graph.add_edge(p1,p2);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type,\n        typename sets_of_int\n        >\n    bool is_clique (\n        const graph_type& g,\n        const sets_of_int& clique\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(graph_contains_length_one_cycle(g) == false,\n            \"\\tvoid is_clique(g, clique)\"\n            << \"\\n\\tinvalid graph\"\n            );\n#ifdef ENABLE_ASSERTS\n        clique.reset();\n        while (clique.move_next())\n        {\n            const unsigned long x = clique.element();\n            DLIB_ASSERT( x < g.number_of_nodes(), \n                \"\\tvoid is_clique(g, clique)\"\n                << \"\\n\\tthe clique set contained an invalid node index\"\n                << \"\\n\\tx:                   \" << x \n                << \"\\n\\tg.number_of_nodes(): \" << g.number_of_nodes()\n                );\n        }\n#endif\n\n        COMPILE_TIME_ASSERT(is_graph<graph_type>::value);\n\n        std::vector<unsigned long> v;\n        v.reserve(clique.size());\n        clique.reset();\n        while (clique.move_next())\n        {\n            v.push_back(clique.element());\n        }\n\n        for (unsigned long i = 0; i < v.size(); ++i)\n        {\n            for (unsigned long j = 0; j < v.size(); ++j)\n            {\n                if (v[i] == v[j])\n                    continue;\n                if (g.has_edge(v[i], v[j]) == false)\n                    return false;\n            }\n        }\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type,\n        typename sets_of_int\n        >\n    bool is_maximal_clique (\n        const graph_type& g,\n        const sets_of_int& clique\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(graph_contains_length_one_cycle(g) == false,\n            \"\\tvoid is_maximal_clique(g, clique)\"\n            << \"\\n\\tinvalid graph\"\n            );\n        DLIB_ASSERT(is_clique(g,clique) == true,\n            \"\\tvoid is_maximal_clique(g, clique)\"\n            << \"\\n\\tinvalid graph\"\n            );\n#ifdef ENABLE_ASSERTS\n        clique.reset();\n        while (clique.move_next())\n        {\n            const unsigned long x = clique.element();\n            DLIB_ASSERT( x < g.number_of_nodes(), \n                \"\\tvoid is_maximal_clique(g, clique)\"\n                << \"\\n\\tthe clique set contained an invalid node index\"\n                << \"\\n\\tx:                   \" << x \n                << \"\\n\\tg.number_of_nodes(): \" << g.number_of_nodes()\n                );\n        }\n#endif\n\n        COMPILE_TIME_ASSERT(is_graph<graph_type>::value);\n\n        if (clique.size() == 0)\n            return true;\n\n        // get an element in the clique and make sure that\n        // none of its neighbors that aren't in the clique are connected \n        // to all the elements of the clique.\n        clique.reset();\n        clique.move_next();\n        const unsigned long idx = clique.element();\n\n        for (unsigned long i = 0; i < g.node(idx).number_of_neighbors(); ++i)\n        {\n            const unsigned long n = g.node(idx).neighbor(i).index();\n            if (clique.is_member(n))\n                continue;\n\n            // now loop over all the clique members and make sure they don't all\n            // share an edge with node n\n            bool all_share_edge = true;\n            clique.reset();\n            while (clique.move_next())\n            {\n                if (g.has_edge(clique.element(), n) == false)\n                {\n                    all_share_edge = false;\n                    break;\n                }\n            }\n\n            if (all_share_edge == true)\n                return false;\n        }\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    typename enable_if<is_directed_graph<T>,bool>::type graph_contains_length_one_cycle (\n        const T& graph\n    )\n    {\n        for (unsigned long i = 0; i < graph.number_of_nodes(); ++i)\n        {\n            // make sure none of this guys children are actually itself\n            for (unsigned long n = 0; n < graph.node(i).number_of_children(); ++n)\n            {\n                if (graph.node(i).child(n).index() == i)\n                    return true;\n            }\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    typename enable_if<is_graph<T>,bool>::type graph_contains_length_one_cycle (\n        const T& graph\n    )\n    {\n        for (unsigned long i = 0; i < graph.number_of_nodes(); ++i)\n        {\n            // make sure none of this guys neighbors are actually itself\n            for (unsigned long n = 0; n < graph.node(i).number_of_neighbors(); ++n)\n            {\n                if (graph.node(i).neighbor(n).index() == i)\n                    return true;\n            }\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace graph_helpers\n    {\n        struct pair\n        {\n            unsigned long index;\n            unsigned long num_neighbors;\n\n            bool operator< (const pair& p) const { return num_neighbors < p.num_neighbors; }\n        };\n\n        template <\n            typename T,\n            typename S,\n            typename V\n            >\n        void search_graph_for_triangulate (\n            const T& n,\n            S& visited,\n            V& order_visited\n        )\n        {\n            // base case of recursion.  stop when we hit a node we have\n            // already visited.\n            if (visited.is_member(n.index()))\n                return;\n\n            // record that we have visited this node\n            order_visited.push_back(n.index());\n            unsigned long temp = n.index();\n            visited.add(temp);\n\n            // we want to visit all the neighbors of this node but do\n            // so by visiting the nodes with the most neighbors first.  So\n            // lets make a vector that lists the nodes in the order we \n            // want to visit them\n            std::vector<pair> neighbors;\n            for (unsigned long i = 0; i < n.number_of_neighbors(); ++i)\n            {\n                pair p;\n                p.index = i;\n                p.num_neighbors = n.neighbor(i).number_of_neighbors();\n                neighbors.push_back(p);\n            }\n\n            // now sort the neighbors array so that the neighbors with the\n            // most neighbors come first.\n            std::sort(neighbors.rbegin(), neighbors.rend());\n\n            // now visit all the nodes\n            for (unsigned long i = 0; i < neighbors.size(); ++i)\n            {\n                search_graph_for_triangulate(n.neighbor(neighbors[i].index), visited, order_visited);\n            }\n        }\n    } // end namespace graph_helpers\n\n    template <\n        typename graph_type,\n        typename set_of_sets_of_int\n        >\n    void triangulate_graph_and_find_cliques (\n        graph_type& g,\n        set_of_sets_of_int& cliques\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(graph_contains_length_one_cycle(g) == false,\n            \"\\tvoid triangulate_graph_and_find_cliques(g, cliques)\"\n            << \"\\n\\tInvalid graph\"\n            );\n        DLIB_ASSERT(graph_is_connected(g) == true,\n            \"\\tvoid triangulate_graph_and_find_cliques(g, cliques)\"\n            << \"\\n\\tInvalid graph\"\n            );\n\n        COMPILE_TIME_ASSERT(is_graph<graph_type>::value);\n\n\n        using namespace graph_helpers;\n        using namespace std;\n        typedef typename set_of_sets_of_int::type set_of_int;\n\n        cliques.clear();\n\n        // first we find the node with the most neighbors\n        unsigned long max_index = 0;\n        unsigned long num_neighbors = 0;\n        for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n        {\n            if (g.node(i).number_of_neighbors() > num_neighbors)\n            {\n                max_index = i;\n                num_neighbors = g.node(i).number_of_neighbors();\n            }\n        }\n\n        // now we do a depth first search of the entire graph starting\n        // with the node we just found.  We record the order in which\n        // we visit each node in the vector order_visited.\n        std::vector<unsigned long> order_visited;\n        set_of_int visited;\n        search_graph_for_triangulate(g.node(max_index), visited, order_visited);\n\n        set_of_int clique;\n\n        // now add edges to the graph to make it triangulated  \n        while (visited.size() > 0)\n        {\n            // we are going to enumerate over the nodes in the reverse of the\n            // order in which they were visited.  So get the last node out.\n            const unsigned long idx = order_visited.back();\n            order_visited.pop_back();\n            visited.destroy(idx);\n\n            // as a start add this node to our current clique\n            unsigned long temp = idx;\n            clique.clear();\n            clique.add(temp);\n\n            // now we want to make a clique that contains node g.node(idx) and\n            // all of its neighbors that are still recorded in the visited set \n            // (except for neighbors that have only one edge).\n            for (unsigned long i = 0; i < g.node(idx).number_of_neighbors(); ++i)\n            {\n                // get the index of the i'th neighbor\n                unsigned long nidx = g.node(idx).neighbor(i).index();\n\n                // add it to the clique if it is still in visited and it isn't\n                // a node with only one neighbor\n                if (visited.is_member(nidx) == true && \n                    g.node(nidx).number_of_neighbors() != 1)\n                {\n                    // add edges between this new node and all the nodes \n                    // that are already in the clique\n                    clique.reset();\n                    while (clique.move_next())\n                    {\n                        if (g.has_edge(nidx, clique.element()) == false)\n                            g.add_edge(nidx, clique.element());\n                    }\n\n                    // now also record that we added this node to the clique\n                    clique.add(nidx);\n                }\n            }\n\n            if (cliques.is_member(clique) == false && is_maximal_clique(g,clique) )\n            {\n                cliques.add(clique);\n            }\n\n            // now it is possible that we are missing some cliques of size 2 since\n            // above we didn't add nodes with only one edge to any of our cliques.\n            // Now lets make sure all these nodes are accounted for\n            for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n            {\n                clique.clear();\n                if (g.node(i).number_of_neighbors() == 1)\n                {\n                    unsigned long temp = i;\n                    clique.add(temp);\n                    temp = g.node(i).neighbor(0).index();\n                    clique.add(temp);\n\n                    if (cliques.is_member(clique) == false)\n                        cliques.add(clique);\n                }\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type,\n        typename join_tree_type\n        >\n    void create_join_tree (\n        const graph_type& g,\n        join_tree_type& join_tree\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(graph_contains_length_one_cycle(g) == false,\n            \"\\tvoid create_join_tree(g, join_tree)\"\n            << \"\\n\\tInvalid graph\"\n            );\n        DLIB_ASSERT(graph_is_connected(g) == true,\n            \"\\tvoid create_join_tree(g, join_tree)\"\n            << \"\\n\\tInvalid graph\"\n            );\n\n        COMPILE_TIME_ASSERT(is_graph<graph_type>::value);\n        COMPILE_TIME_ASSERT(is_graph<join_tree_type>::value);\n\n\n\n        typedef typename join_tree_type::type set_of_int;\n        typedef typename join_tree_type::edge_type set_of_int_edge;\n        typedef typename set<set_of_int>::kernel_1b_c set_of_sets_of_int;\n\n        copy_graph_structure(g, join_tree);\n\n        // don't even bother in this case\n        if (g.number_of_nodes() == 0)\n            return;\n\n        set_of_sets_of_int cliques;\n        set_of_int s;\n\n        triangulate_graph_and_find_cliques(join_tree, cliques);\n\n        join_tree.set_number_of_nodes(cliques.size());\n\n        // copy the cliques into each of the nodes of tree\n        for (unsigned long i = 0; i < join_tree.number_of_nodes(); ++i)\n        {\n            cliques.remove_any(s);\n            s.swap(join_tree.node(i).data);\n        }\n\n        set_of_int_edge e;\n\n        // add all possible edges to the join_tree\n        for (unsigned long i = 0; i < join_tree.number_of_nodes(); ++i)\n        {\n            for (unsigned long j = i+1; j < join_tree.number_of_nodes(); ++j)\n            {\n                set_intersection(\n                    join_tree.node(i).data,\n                    join_tree.node(j).data,\n                    e);\n\n                if (e.size() > 0)\n                {\n                    join_tree.add_edge(i,j);\n                    edge(join_tree,i,j).swap(e);\n                }\n            }\n        }\n\n        // now we just need to remove the unnecessary edges so that we get a \n        // proper join tree\n        s.clear();\n        set_of_int& good = s; // rename s to something slightly more meaningful\n        // good will contain nodes that have been \"approved\"\n        unsigned long n = 0;\n        good.add(n);\n\n        std::vector<unsigned long> vtemp;\n\n        while (good.size() < join_tree.number_of_nodes())\n        {\n            // figure out which of the neighbors of nodes in good has the best edge\n            unsigned long best_bad_idx = 0;\n            unsigned long best_good_idx = 0;\n            unsigned long best_overlap = 0;\n            good.reset();\n            while (good.move_next())\n            {\n                // loop over all the neighbors of the current node in good\n                for (unsigned long i = 0; i < join_tree.node(good.element()).number_of_neighbors(); ++i)\n                {\n                    const unsigned long idx = join_tree.node(good.element()).neighbor(i).index();\n                    if (!good.is_member(idx))\n                    {\n                        const unsigned long overlap = join_tree.node(good.element()).edge(i).size();\n\n                        if (overlap > best_overlap)\n                        {\n                            best_overlap = overlap;\n                            best_bad_idx = idx;\n                            best_good_idx = good.element();\n                        }\n                    }\n                }\n            }\n\n            // now remove all the edges from best_bad_idx to the nodes in good except for the\n            // edge to best_good_idx.\n            for (unsigned long i = 0; i < join_tree.node(best_bad_idx).number_of_neighbors(); ++i)\n            {\n                const unsigned long idx = join_tree.node(best_bad_idx).neighbor(i).index();\n                if (idx != best_good_idx && good.is_member(idx))\n                {\n                    vtemp.push_back(idx);\n                }\n            }\n\n            for (unsigned long i = 0; i < vtemp.size(); ++i)\n                join_tree.remove_edge(vtemp[i], best_bad_idx);\n\n            vtemp.clear();\n\n\n            // and finally add this bad index into the good set\n            good.add(best_bad_idx);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace graph_helpers\n    {\n        template <\n            typename T,\n            typename U\n            >\n        bool validate_join_tree (\n            const T& n,\n            U& deads,\n            unsigned long parent = 0xffffffff\n        )\n        /*!\n            this function makes sure that a join tree satisfies the following criterion for paths starting at the given node:\n                - for all valid i and j such that i and j are both < #join_tree.number_of_nodes()\n                    - let X be the set of numbers that is contained in both #join_tree.node(i).data\n                      and #join_tree.node(j).data\n                    - It is the case that all nodes on the unique path between #join_tree.node(i)\n                      and #join_tree.node(j) contain the numbers from X in their sets.\n\n            returns true if validation passed and false if there is a problem with the tree\n        !*/\n        {\n            n.data.reset();\n            while (n.data.move_next())\n            {\n                if (deads.is_member(n.data.element()))\n                    return false;\n            }\n\n\n            for (unsigned long i = 0; i < n.number_of_neighbors(); ++i)\n            {\n                if (n.neighbor(i).index() == parent)\n                    continue;\n\n                // add anything to dead stuff\n                n.data.reset();\n                while (n.data.move_next())\n                {\n                    if (n.neighbor(i).data.is_member(n.data.element()) == false)\n                    {\n                        unsigned long temp = n.data.element();\n                        deads.add(temp);\n                    }\n                }\n\n                if (validate_join_tree(n.neighbor(i), deads, n.index()) == false)\n                    return false;\n\n                // remove this nodes stuff from dead stuff\n                n.data.reset();\n                while (n.data.move_next())\n                {\n                    if (n.neighbor(i).data.is_member(n.data.element()) == false)\n                    {\n                        unsigned long temp = n.data.element();\n                        deads.destroy(temp);\n                    }\n                }\n            }\n\n            return true;\n        }\n    }\n\n    template <\n        typename graph_type,\n        typename join_tree_type\n        >\n    bool is_join_tree (\n        const graph_type& g,\n        const join_tree_type& join_tree\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(graph_contains_length_one_cycle(g) == false,\n            \"\\tvoid create_join_tree(g, join_tree)\"\n            << \"\\n\\tInvalid graph\"\n            );\n        DLIB_ASSERT(graph_is_connected(g) == true,\n            \"\\tvoid create_join_tree(g, join_tree)\"\n            << \"\\n\\tInvalid graph\"\n            );\n\n        COMPILE_TIME_ASSERT(is_graph<graph_type>::value || is_directed_graph<graph_type>::value);\n        COMPILE_TIME_ASSERT(is_graph<join_tree_type>::value);\n\n\n        if (graph_contains_undirected_cycle(join_tree))\n            return false;\n\n        if (graph_is_connected(join_tree) == false)\n            return false;\n\n        // verify that the path condition of the join tree is valid\n        for (unsigned long i = 0; i < join_tree.number_of_nodes(); ++i)\n        {\n            typename join_tree_type::type deads;\n            if (graph_helpers::validate_join_tree(join_tree.node(i), deads) == false)\n                return false;\n        }\n\n        typename join_tree_type::edge_type e;\n        typename join_tree_type::edge_type all;\n        // now make sure that the edges contain correct intersections\n        for (unsigned long i = 0; i < join_tree.number_of_nodes(); ++i)\n        {\n            set_union(all,join_tree.node(i).data, all);\n            for (unsigned long j = 0; j < join_tree.node(i).number_of_neighbors(); ++j)\n            {\n                set_intersection(join_tree.node(i).data,\n                                 join_tree.node(i).neighbor(j).data,\n                                 e);\n\n                if (!(e == join_tree.node(i).edge(j)))\n                    return false;\n            }\n        }\n\n        // and finally check that all the nodes in g show up in the join tree \n        if (all.size() != g.number_of_nodes())\n            return false;\n        all.reset();\n        while (all.move_next())\n        {\n            if (all.element() >= g.number_of_nodes())\n                return false;\n        }\n\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GRAPH_UTILs_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/graph_utils_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_GRAPH_UTILs_ABSTRACT_\n#ifdef DLIB_GRAPH_UTILs_ABSTRACT_\n\n#include \"../directed_graph.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    typename T::edge_type& edge(\n        T& g,  \n        unsigned long i, \n        unsigned long j\n    );\n    /*!\n        requires\n            - T is an implementation of graph/graph_kernel_abstract.h \n            - g.has_edge(i,j)\n        ensures\n            - returns a reference to the edge data for the edge connecting nodes i and j\n              (i.e. returns g.node(i).edge(x) such that g.node(i).neighbor(x).index() == j)\n    !*/\n\n    template <\n        typename T\n        >\n    typename const T::edge_type& edge(\n        const T& g,  \n        unsigned long i, \n        unsigned long j\n    );\n    /*!\n        requires\n            - T is an implementation of graph/graph_kernel_abstract.h \n            - g.has_edge(i,j)\n        ensures\n            - returns a const reference to the edge data for the edge connecting nodes i and j\n              (i.e. returns g.node(i).edge(x) such that g.node(i).neighbor(x).index() == j)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    typename T::edge_type& edge(\n        T& g,  \n        unsigned long parent_idx, \n        unsigned long child_idx \n    );\n    /*!\n        requires\n            - T is an implementation of directed_graph/directed_graph_kernel_abstract.h \n            - g.has_edge(parent_idx,child_idx)\n        ensures\n            - returns a reference to the edge data for the directed edge connecting parent\n              node g.node(parent_idx) to child node g.node(child_idx).\n    !*/\n\n    template <\n        typename T\n        >\n    typename const T::edge_type& edge(\n        const T& g,  \n        unsigned long parent_idx, \n        unsigned long child_idx \n    );\n    /*!\n        requires\n            - T is an implementation of directed_graph/directed_graph_kernel_abstract.h \n            - g.has_edge(parent_idx,child_idx)\n        ensures\n            - returns a const reference to the edge data for the directed edge connecting \n              parent node g.node(parent_idx) to child node g.node(child_idx).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool graph_has_symmetric_edges (\n        const T& graph\n    );\n    /*!\n        requires\n            - T is an implementation of directed_graph/directed_graph_kernel_abstract.h \n        ensures\n            - if (All nodes have either 0 edges between them or 2 edges between them.  \n              That is, if there is an edge pointing from node A to node B then there is\n              also an edge from B to A) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool graph_contains_directed_cycle (\n        const T& graph\n    );\n    /*!\n        requires\n            - T is an implementation of directed_graph/directed_graph_kernel_abstract.h \n        ensures\n            - if (there is a directed cycle in the given graph) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool graph_contains_undirected_cycle (\n        const T& graph\n    );\n    /*!\n        requires\n            - T is an implementation of directed_graph/directed_graph_kernel_abstract.h or\n              T is an implementation of graph/graph_kernel_abstract.h\n        ensures\n            - if (there is an undirected cycle in the given graph) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool graph_contains_length_one_cycle (\n        const T& graph\n    );\n    /*!\n        requires\n            - T is an implementation of directed_graph/directed_graph_kernel_abstract.h or\n              T is an implementation of graph/graph_kernel_abstract.h\n        ensures\n            - if (it is the case that graph.has_edge(i,i) == true for some i) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename src_type,\n        typename dest_type \n        >\n    void copy_graph_structure (\n        const src_type& src,\n        dest_type& dest\n    );\n    /*!\n        requires\n            - src_type is an implementation of directed_graph/directed_graph_kernel_abstract.h or\n              src_type is an implementation of graph/graph_kernel_abstract.h\n            - dest_type is an implementation of directed_graph/directed_graph_kernel_abstract.h or\n              dest_type is an implementation of graph/graph_kernel_abstract.h\n            - dest_type is not a directed_graph when src_type is a graph\n        ensures\n            - this function copies the graph structure from src into dest\n            - #dest.number_of_nodes() == src.number_of_nodes()\n            - for all valid i: #dest.node(i).item has an initial value for its type\n            - for all valid i and j:\n                - if (src.has_edge(i,j) == true) then\n                    - #dest.has_edge(i,j) == true\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename src_type,\n        typename dest_type \n        >\n    void copy_graph (\n        const src_type& src,\n        dest_type& dest\n    );\n    /*!\n        requires\n            - src_type is an implementation of directed_graph/directed_graph_kernel_abstract.h or\n              src_type is an implementation of graph/graph_kernel_abstract.h\n            - dest_type is an implementation of directed_graph/directed_graph_kernel_abstract.h or\n              dest_type is an implementation of graph/graph_kernel_abstract.h\n            - src_type and dest_type are both the same kind of graph.  That is, they\n              are either both directed or both undirected.\n            - the node and edge data in the graphs are copyable via operator=().\n        ensures\n            - #dest is a complete duplicate of src.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename directed_graph_type,\n        typename graph_type\n        >\n    void create_moral_graph (\n        const directed_graph_type& g,\n        graph_type& moral_graph\n    );\n    /*!\n        requires\n            - directed_graph_type is an implementation of directed_graph/directed_graph_kernel_abstract.h\n            - graph_type is an implementation of graph/graph_kernel_abstract.h\n            - graph_contains_directed_cycle(g) == false\n        ensures\n            - #moral_graph == the moralized version of the directed graph g\n            - #moral_graph.number_of_nodes() == g.number_of_nodes()\n            - for all valid i and j:\n                - if (g.has_edge(i,j) == true) then\n                    - #moral_graph.has_edge(i,j) == true\n                      (i.e. all the edges that are in g are also in moral_graph)\n            - for all valid i:\n                - for all pairs p1 and p2 such that p1 != p2 and g.node(p1) and g.node(p2) are both\n                  parents of node g.node(i):\n                    - #moral_graph.has_edge(p1,p2) == true\n                      (i.e. all the parents of a node are connected in the moral graph)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename S\n        >\n    void find_connected_nodes (\n        const T& n,\n        S& visited\n    );\n    /*!\n        requires\n            - T is a node_type from an implementation of directed_graph/directed_graph_kernel_abstract.h or\n              T is a node_type from an implementation of graph/graph_kernel_abstract.h\n            - S is an implementation of set/set_kernel_abstract.h\n        ensures\n            - let G be the graph that contains node n\n            - #visited.is_member(n.index()) == true\n            - for all i such that there is an undirected path from n to G.node(i):\n                - #visited.is_member(i) == true\n            - for all i such that visited.is_member(i):\n                - #visited.is_member(i) == true\n                  (i.e. this function doesn't remove anything from visited.  So if\n                  it contains stuff when you call this function then it will still\n                  contain those things once the function ends)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T \n        >\n    bool graph_is_connected (\n        const T& g\n    );\n    /*!\n        requires\n            - T is an implementation of directed_graph/directed_graph_kernel_abstract.h or\n              T is an implementation of graph/graph_kernel_abstract.h\n        ensures\n            - every node in g has an undirected path to every other node in g.  \n              I.e. g is a connected graph\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type,\n        typename sets_of_int\n        >\n    bool is_clique (\n        const graph_type& g,\n        const sets_of_int& clique\n    );\n    /*!\n        requires\n            - graph_type is an implementation of graph/graph_kernel_abstract.h\n            - sets_of_int is an implementation of set/set_kernel_abstract.h\n              and it contains unsigned long objects. \n            - graph_contains_length_one_cycle(g) == false\n            - for all x such that clique.is_member(x):\n                - x < g.number_of_nodes()\n        ensures\n            - if (it is true that for all i and j such that clique.is_member(i) and \n              clique.is_member(j) then g.has_edge(i,j) == true) then\n                - returns true\n            - else\n                - returns false\n            - if (clique.size() == 0) then\n                - returns true\n                  (this is just a special case of the above condition)\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type,\n        typename sets_of_int\n        >\n    bool is_maximal_clique (\n        const graph_type& g,\n        const sets_of_int& clique\n    );\n    /*!\n        requires\n            - graph_type is an implementation of graph/graph_kernel_abstract.h\n            - sets_of_int is an implementation of set/set_kernel_abstract.h\n              and it contains unsigned long objects. \n            - graph_contains_length_one_cycle(g) == false\n            - for all x such that clique.is_member(x):\n                - x < g.number_of_nodes()\n            - is_clique(g,clique) == true\n        ensures\n            - if (there is no x such that clique.is_member(x) == false \n              and g.has_edge(i,x) for all i such that cliques.is_member(i)) then\n                - returns true\n            - else\n                - returns false\n            - if (clique.size() == 0) then\n                - returns true\n                  (this is just a special case of the above condition)\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type,\n        typename set_of_sets_of_int\n        >\n    void triangulate_graph_and_find_cliques (\n        graph_type& g,\n        set_of_sets_of_int& cliques\n    );\n    /*!\n        requires\n            - graph_type is an implementation of graph/graph_kernel_abstract.h\n            - set_of_sets_of_int is an implementation of set/set_kernel_abstract.h\n              and it contains another set object which is comparable by operator< and\n              itself contains unsigned long objects.  \n              (e.g. set<set<unsigned long>::compare_1a>::kernel_1a)\n            - graph_contains_length_one_cycle(g) == false\n            - graph_is_connected(g) == true\n        ensures\n            - #g.number_of_nodes() == g.number_of_nodes()\n            - all this function does to g is add edges to it until g becomes a \n              chordal graph where a chordal graph is a graph where each cycle\n              in the graph of 4 or more nodes has an edge joining two nodes\n              that are not adjacent in the cycle. \n            - #cliques.size() == the number of maximal cliques in the graph #g\n            - for all valid sets S such that #cliques.is_member(S):\n                - for all valid integers i and j such that S.is_member(i) == true\n                  and S.is_member(j) == true and i != j:\n                    - #g.has_edge(i,j) == true\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type,\n        typename join_tree_type\n        >\n    bool is_join_tree (\n        const graph_type& g,\n        const join_tree_type& join_tree\n    );\n    /*!\n        requires\n            - graph_type is an implementation of directed_graph/directed_graph_kernel_abstract.h or\n              graph_type is an implementation of graph/graph_kernel_abstract.h\n            - join_tree_type is an implementation of graph/graph_kernel_abstract.h\n            - join_tree_type::type is an implementation of set/set_compare_abstract.h and\n              this set type contains unsigned long objects. \n            - join_tree_type::edge_type is an implementation of set/set_compare_abstract.h and\n              this set type contains unsigned long objects. \n            - graph_contains_length_one_cycle(g) == false\n            - graph_is_connected(g) == true\n        ensures\n            - if (join_tree is a valid join tree of graph g.  That is, join_tree is a \n              tree decomposition of g) then\n                - returns true\n            - else\n                - returns false\n\n            - a join tree of graph g is defined as follows: \n                - graph_contains_undirected_cycle(join_tree) == false\n                - graph_is_connected(join_tree) == true\n                - for all valid i:\n                    - join_tree.node(i).item == a non-empty set containing node indexes \n                      from g.  That is, this set contains all the nodes from g that are\n                      in this cluster in the join tree\n                - for all valid i and j such that i and j are both < join_tree.number_of_nodes()\n                    - let X be the set of numbers that is contained in both join_tree.node(i).item\n                      and join_tree.node(j).item\n                    - It is the case that all nodes on the unique path between join_tree.node(i)\n                      and join_tree.node(j) contain the numbers from X in their sets.\n                    - edge(join_tree,i,j) == a set containing the intersection of \n                      join_tree.node(i).item and join_tree.node(j).item\n                - the node index for every node in g appears in some node in join_tree at \n                  least once.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type,\n        typename join_tree_type\n        >\n    void create_join_tree (\n        const graph_type& g,\n        join_tree_type& join_tree\n    );\n    /*!\n        requires\n            - graph_type is an implementation of graph/graph_kernel_abstract.h\n            - join_tree_type is an implementation of graph/graph_kernel_abstract.h\n            - join_tree_type::type is an implementation of set/set_compare_abstract.h and\n              this set type contains unsigned long objects. \n            - join_tree_type::edge_type is an implementation of set/set_compare_abstract.h and\n              this set type contains unsigned long objects. \n            - graph_contains_length_one_cycle(g) == false\n            - graph_is_connected(g) == true\n        ensures\n            - #is_join_tree(g, join_tree) == true\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GRAPH_UTILs_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/ordered_sample_pair.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ORDERED_SAMPLE_PaIR_Hh_\n#define DLIB_ORDERED_SAMPLE_PaIR_Hh_\n\n#include \"ordered_sample_pair_abstract.h\"\n#include <limits>\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class ordered_sample_pair \n    {\n    public:\n        ordered_sample_pair(\n        ) : \n            _index1(0),\n            _index2(0)\n        {\n            _distance = 1;\n        }\n\n        ordered_sample_pair (\n            const unsigned long idx1,\n            const unsigned long idx2\n        )\n        {\n            _distance = 1;\n            _index1 = idx1;\n            _index2 = idx2;\n        }\n\n        ordered_sample_pair (\n            const unsigned long idx1,\n            const unsigned long idx2,\n            const double dist\n        )\n        {\n            _distance = dist;\n            _index1 = idx1;\n            _index2 = idx2;\n        }\n\n        const unsigned long& index1 (\n        ) const { return _index1; }\n\n        const unsigned long& index2 (\n        ) const { return _index2; }\n\n        const double& distance (\n        ) const { return _distance; }\n\n    private:\n        unsigned long _index1;\n        unsigned long _index2;\n        double _distance;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool operator == (\n        const ordered_sample_pair& a,\n        const ordered_sample_pair& b\n    ) \n    {\n        return a.index1() == b.index1() && a.index2() == b.index2();\n    }\n\n    inline bool operator != (\n        const ordered_sample_pair& a,\n        const ordered_sample_pair& b\n    ) \n    {\n        return !(a == b); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const ordered_sample_pair& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.index1(),out);\n            serialize(item.index2(),out);\n            serialize(item.distance(),out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type ordered_sample_pair\"); \n        }\n    }\n\n    inline void deserialize (\n        ordered_sample_pair& item,\n        std::istream& in \n    )\n    {\n        try\n        {\n            unsigned long idx1, idx2;\n            double dist;\n\n            deserialize(idx1,in);\n            deserialize(idx2,in);\n            deserialize(dist,in);\n            item = ordered_sample_pair(idx1, idx2, dist);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type ordered_sample_pair\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ORDERED_SAMPLE_PaIR_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/ordered_sample_pair_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ORDERED_SAMPLE_PaIR_ABSTRACT_Hh_\n#ifdef DLIB_ORDERED_SAMPLE_PaIR_ABSTRACT_Hh_\n\n#include <limits>\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class ordered_sample_pair \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is intended to represent an edge in a directed graph which has\n                data samples at its vertices.  So it contains two integers (index1 and\n                index2) which represent the identifying indices of the samples at the ends\n                of an edge.  \n\n                This object also contains a double which can be used for any purpose.\n        !*/\n\n    public:\n        ordered_sample_pair(\n        );\n        /*!\n            ensures\n                - #index1() == 0\n                - #index2() == 0\n                - #distance() == 1 \n        !*/\n\n        ordered_sample_pair (\n            const unsigned long idx1,\n            const unsigned long idx2\n        );\n        /*!\n            ensures\n                - #index1() == idx1\n                - #index2() == idx2\n                - #distance() == 1 \n        !*/\n\n        ordered_sample_pair (\n            const unsigned long idx1,\n            const unsigned long idx2,\n            const double dist\n        );\n        /*!\n            ensures\n                - #index1() == idx1\n                - #index2() == idx2\n                - #distance() == dist\n        !*/\n\n        const unsigned long& index1 (\n        ) const; \n        /*!\n            ensures\n                - returns the first index value stored in this object \n        !*/\n\n        const unsigned long& index2 (\n        ) const; \n        /*!\n            ensures\n                - returns the second index value stored in this object \n        !*/\n\n        const double& distance (\n        ) const;\n        /*!\n            ensures\n                - returns the floating point number stored in this object\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool operator == (\n        const ordered_sample_pair& a,\n        const ordered_sample_pair& b\n    );\n    /*!\n        ensures\n            - returns a.index1() == b.index1() && a.index2() == b.index2();\n              I.e. returns true if a and b both represent the same pair and false otherwise.  \n              Note that the distance field is not involved in this comparison.\n    !*/\n\n    inline bool operator != (\n        const ordered_sample_pair& a,\n        const ordered_sample_pair& b\n    );\n    /*!\n        ensures\n            - returns !(a == b)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const ordered_sample_pair& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    inline void deserialize (\n        ordered_sample_pair& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ORDERED_SAMPLE_PaIR_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/sample_pair.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SAMPLE_PaIR_Hh_\n#define DLIB_SAMPLE_PaIR_Hh_\n\n#include \"sample_pair_abstract.h\"\n#include <limits>\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class sample_pair \n    {\n    public:\n        sample_pair(\n        ) : \n            _index1(0),\n            _index2(0)\n        {\n            _distance = 1;\n        }\n\n        sample_pair (\n            const unsigned long idx1,\n            const unsigned long idx2\n        )\n        {\n            _distance = 1;\n            if (idx1 < idx2)\n            {\n                _index1 = idx1;\n                _index2 = idx2;\n            }\n            else\n            {\n                _index1 = idx2;\n                _index2 = idx1;\n            }\n        }\n\n        sample_pair (\n            const unsigned long idx1,\n            const unsigned long idx2,\n            const double dist\n        )\n        {\n            _distance = dist;\n            if (idx1 < idx2)\n            {\n                _index1 = idx1;\n                _index2 = idx2;\n            }\n            else\n            {\n                _index1 = idx2;\n                _index2 = idx1;\n            }\n        }\n\n        const unsigned long& index1 (\n        ) const { return _index1; }\n\n        const unsigned long& index2 (\n        ) const { return _index2; }\n\n        const double& distance (\n        ) const { return _distance; }\n\n    private:\n        unsigned long _index1;\n        unsigned long _index2;\n        double _distance;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    inline bool order_by_index (\n        const T& a,\n        const T& b\n    )\n    {\n        return a.index1() < b.index1() || (a.index1() == b.index1() && a.index2() < b.index2());\n    }\n\n    template <typename T>\n    inline bool order_by_distance (\n        const T& a,\n        const T& b\n    )\n    {\n        return a.distance() < b.distance();\n    }\n\n    template <typename T>\n    inline bool order_by_descending_distance (\n        const T& a,\n        const T& b\n    )\n    {\n        return a.distance() > b.distance();\n    }\n\n    template <typename T>\n    bool order_by_distance_and_index (\n        const T& a,\n        const T& b\n    )\n    { \n        return a.distance() < b.distance() || (a.distance() == b.distance() && order_by_index(a,b)); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool operator == (\n        const sample_pair& a,\n        const sample_pair& b\n    ) \n    {\n        return a.index1() == b.index1() && a.index2() == b.index2();\n    }\n\n    inline bool operator != (\n        const sample_pair& a,\n        const sample_pair& b\n    ) \n    {\n        return !(a == b); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const sample_pair& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.index1(),out);\n            serialize(item.index2(),out);\n            serialize(item.distance(),out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type sample_pair\"); \n        }\n    }\n\n    inline void deserialize (\n        sample_pair& item,\n        std::istream& in \n    )\n    {\n        try\n        {\n            unsigned long idx1, idx2;\n            double dist;\n\n            deserialize(idx1,in);\n            deserialize(idx2,in);\n            deserialize(dist,in);\n            item = sample_pair(idx1, idx2, dist);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type sample_pair\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SAMPLE_PaIR_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils/sample_pair_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SAMPLE_PaIR_ABSTRACT_Hh_\n#ifdef DLIB_SAMPLE_PaIR_ABSTRACT_Hh_\n\n#include <limits>\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class sample_pair \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is intended to represent an edge in an undirected graph \n                which has data samples at its vertices.  So it contains two integers\n                (index1 and index2) which represent the identifying indices of \n                the samples at the ends of an edge.  Note that this object enforces\n                the constraint that index1 <= index2.  This has the effect of \n                making the edges undirected since a sample_pair is incapable\n                of representing a single edge in more than one way.  That is,\n                sample_pair(i,j) == sample_pair(j,i) for any value of i and j.\n\n                This object also contains a double which can be used for any purpose.\n        !*/\n\n    public:\n        sample_pair(\n        );\n        /*!\n            ensures\n                - #index1() == 0\n                - #index2() == 0\n                - #distance() == 1 \n        !*/\n\n        sample_pair (\n            const unsigned long idx1,\n            const unsigned long idx2\n        );\n        /*!\n            ensures\n                - #index1() == min(idx1,idx2)\n                - #index2() == max(idx1,idx2)\n                - #distance() == 1 \n        !*/\n\n        sample_pair (\n            const unsigned long idx1,\n            const unsigned long idx2,\n            const double dist\n        );\n        /*!\n            ensures\n                - #index1() == min(idx1,idx2)\n                - #index2() == max(idx1,idx2)\n                - #distance() == dist\n        !*/\n\n        const unsigned long& index1 (\n        ) const; \n        /*!\n            ensures\n                - returns the first index value stored in this object \n        !*/\n\n        const unsigned long& index2 (\n        ) const; \n        /*!\n            ensures\n                - returns the second index value stored in this object \n        !*/\n\n        const double& distance (\n        ) const;\n        /*!\n            ensures\n                - returns the floating point number stored in this object\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    bool order_by_index (\n        const T& a,\n        const T& b\n    ) { return a.index1() < b.index1() || (a.index1() == b.index1() && a.index2() < b.index2()); }\n    /*!\n        requires\n            - T is a type with an interface compatible with sample_pair.\n        ensures\n            - provides a total ordering of sample_pair objects that will cause pairs that are \n              equal to be adjacent when sorted.  So for example, this function can be used\n              with std::sort() to first sort a sequence of sample_pair objects and then\n              find duplicate edges.\n    !*/\n\n    template <typename T>\n    bool order_by_distance (\n        const T& a,\n        const T& b\n    ) { return a.distance() < b.distance(); }\n    /*!\n        requires\n            - T is a type with an interface compatible with sample_pair.\n        ensures\n            - provides a total ordering of sample_pair objects that causes pairs with \n              smallest distance to be the first in a sorted list.  This function can be\n              used with std::sort().\n    !*/\n\n    template <typename T>\n    bool order_by_descending_distance (\n        const T& a,\n        const T& b\n    ) { return a.distance() > b.distance(); }\n    /*!\n        requires\n            - T is a type with an interface compatible with sample_pair.\n        ensures\n            - provides a total ordering of sample_pair objects that causes pairs with \n              largest distance to be the first in a sorted list.  This function can be\n              used with std::sort().\n    !*/\n\n    template <typename T>\n    bool order_by_distance_and_index (\n        const T& a,\n        const T& b\n    ) { return a.distance() < b.distance() || (a.distance() == b.distance() && order_by_index(a,b)); }\n    /*!\n        requires\n            - T is a type with an interface compatible with sample_pair.\n        ensures\n            - provides a total ordering of sample_pair objects that causes pairs with\n              smallest distance to be the first in a sorted list but also orders samples\n              with equal distances according to order_by_index().  This function can be\n              used with std::sort().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool operator == (\n        const sample_pair& a,\n        const sample_pair& b\n    );\n    /*!\n        ensures\n            - returns a.index1() == b.index1() && a.index2() == b.index2();\n              I.e. returns true if a and b both represent the same pair and false otherwise.  \n              Note that the distance field is not involved in this comparison.\n    !*/\n\n    inline bool operator != (\n        const sample_pair& a,\n        const sample_pair& b\n    );\n    /*!\n        ensures\n            - returns !(a == b)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const sample_pair& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    inline void deserialize (\n        sample_pair& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SAMPLE_PaIR_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GRAPH_UTILs_H_\n#define DLIB_GRAPH_UTILs_H_ \n\n#include \"graph_utils/graph_utils.h\"\n#include \"graph_utils/edge_list_graphs.h\"\n#include \"graph_utils/function_objects.h\"\n\n#endif // DLIB_GRAPH_UTILs_H_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/graph_utils_threaded.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GRAPH_UTILs_THREADED_H_\n#define DLIB_GRAPH_UTILs_THREADED_H_ \n\n#include \"graph_utils.h\"\n#include \"graph_utils/find_k_nearest_neighbors_lsh.h\"\n\n#endif // DLIB_GRAPH_UTILs_THREADED_H_ \n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_core/gui_core_kernel_1.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GUI_CORE_KERNEL_1_CPp_\n#define DLIB_GUI_CORE_KERNEL_1_CPp_\n#include \"../platform.h\"\n\n#ifdef WIN32\n\n#include \"gui_core_kernel_1.h\"\n\n// tell visual studio to link to the libraries we need if we are\n// in fact using visual studio\n#ifdef _MSC_VER\n#pragma comment (lib, \"gdi32.lib\")\n#pragma comment (lib, \"comctl32.lib\")\n#pragma comment (lib, \"user32.lib\")\n#pragma comment (lib, \"imm32.lib\")\n#endif\n\n\n#include <sstream>\n#include \"../threads.h\"\n#include \"../assert.h\"\n#include \"../queue.h\"\n#include \"../sync_extension.h\"\n#include \"../queue.h\"\n#include \"../logger.h\"\n#include <cmath>\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace gui_core_kernel_1_globals\n    {\n\n\n        struct user_event_type\n        {\n            HWND w;\n            void* p;\n            int i;\n        };\n\n        typedef sync_extension<binary_search_tree<HWND,base_window*>::kernel_1a>::kernel_1a window_table_type;\n        typedef sync_extension<queue<user_event_type,memory_manager<char>::kernel_1b>::kernel_2a_c>::kernel_1a queue_of_user_events;\n\n\n        enum USER_OFFSETS\n        {\n            CREATE_WINDOW,\n            DESTROY_WINDOW,\n            SET_ACTIVE_WINDOW,\n            QUIT_EVENT_HANDLER_THREAD,\n            USER_EVENTS_READY,\n            CALL_MOVE_WINDOW,\n            SHOW_WINDOW_SHOW,\n            SHOW_WINDOW_HIDE,\n            CALL_SET_WINDOW_TITLE\n        };\n\n    // ----------------------------------------------------------------------------------------\n\n        const shared_ptr_thread_safe<dlib::mutex>& global_mutex()\n        {\n            static shared_ptr_thread_safe<dlib::mutex> m(new dlib::mutex);\n            return m;\n        }\n\n        class event_handler_thread : public threaded_object\n        {\n        public:\n\n            enum et_state\n            {\n                uninitialized,\n                initialized,\n                failure_to_init \n            };\n            \n            et_state status;\n\n            queue_of_user_events user_events;\n            queue_of_user_events user_events_temp;\n            logger dlog;\n\n            HINSTANCE hInstance;\n            HWND helper_window;    \n            const TCHAR* window_class_name;\n\n            bool quit_windows_loop;\n            bool set_window_title_done;\n            std::wstring window_title;\n            bool move_window_done;\n            HWND move_window_hwnd;\n            int move_window_width;\n            int move_window_height;\n            int move_window_x;\n            int move_window_y;\n            bool request_new_window;\n            DWORD dwStyle;\n            HWND new_window;\n            bool in_ime_composition;\n            bool event_thread_started;\n            // the window_table.get_mutex() mutex locks the above 11 variables\n\n\n            // this variable holds a mapping from window handles to the base_window\n            // objects which represent them.  Note that this objects mutex is always locked\n            // when inside the event loop.\n            window_table_type window_table;\n            rsignaler window_close_signaler;\n            rsignaler et_signaler;\n\n            // note that this is the thread that will perform all the event\n            // processing.\n            thread_id_type event_thread_id;\n\n            shared_ptr_thread_safe<dlib::mutex> reference_to_global_mutex;\n\n            event_handler_thread(\n            ) :\n                dlog(\"dlib.gui_core\"),\n                hInstance(0),\n                helper_window(0),\n                window_class_name(TEXT (\"w3049u6qc2d94thw9m34f4we0gvwa3-tgkser0-b9gm 05\")),\n                quit_windows_loop(false),\n                set_window_title_done(true),\n                move_window_done(true),\n                move_window_hwnd(0),\n                move_window_width(0),\n                move_window_height(0),\n                move_window_x(0),\n                move_window_y(0),\n                request_new_window(false),\n                dwStyle(0),\n                new_window(0),\n                in_ime_composition(false),\n                event_thread_started(false),\n                window_close_signaler(window_table.get_mutex()),\n                et_signaler(window_table.get_mutex()),\n                reference_to_global_mutex(global_mutex())\n            {\n                status = uninitialized;\n            }\n\n            void start_event_thread (\n            )\n            /*!\n                we can't call this function from this objects constructor because \n                starting the event thread in windows involves sending messages to the\n                WndProc() and that requires this object to be fully constructed.\n            !*/\n            {\n\n                if (event_thread_started == false)\n                {\n                    auto_mutex M(window_table.get_mutex());\n                    if (event_thread_started == false)\n                    {\n                        event_thread_started = true;\n                        // start up the event handler thread\n                        start();\n\n                        // wait for the event thread to get up and running\n                        while (status == uninitialized)\n                            et_signaler.wait();\n\n                        if (status == failure_to_init)\n                            throw gui_error(\"Failed to start event thread\");\n                    }\n                }\n            }\n\n            ~event_handler_thread ()\n            {\n                using namespace gui_core_kernel_1_globals;\n                \n                if (is_alive())\n                {\n                    if (PostMessage(helper_window,WM_USER+QUIT_EVENT_HANDLER_THREAD,0,0)==0)\n                    {\n                        dlog << LWARN << \"Unable to schedule function for execution in event handling thread.\";\n                        // No point calling wait() here since the thread isn't going to\n                        // terminate gracefully in this case.  So we just let the program\n                        // end as it will and hope for the best.\n                    } \n                    else\n                    {\n                        // wait for the event handler thread to terminate.\n                        wait();\n                    }\n                }\n\n            }\n\n        private:\n\n            void thread (\n            )\n            {\n                event_thread_id = get_thread_id();\n\n                hInstance = GetModuleHandle(NULL);\n                if (hInstance == NULL)\n                {\n                    dlog << LFATAL << \"Error gathering needed resources\";\n\n                    // signal that an error has occurred\n                    window_table.get_mutex().lock();\n                    status = failure_to_init;\n                    et_signaler.broadcast();\n                    window_table.get_mutex().unlock();\n                    return;\n                }\n\n                // register the main window class\n                WNDCLASS     wndclass ;\n\n                wndclass.style         = CS_DBLCLKS;\n                wndclass.lpfnWndProc   = dlib::gui_core_kernel_1_globals::WndProc ;\n                wndclass.cbClsExtra    = 0 ;\n                wndclass.cbWndExtra    = 0 ;\n                wndclass.hInstance     = hInstance ;\n                wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;\n                wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;\n                wndclass.hbrBackground = 0;\n                wndclass.lpszMenuName  = NULL ;\n                wndclass.lpszClassName = window_class_name ;\n\n                if (!RegisterClass (&wndclass))  \n                {\n                    dlog << LFATAL << \"Error registering window class\";\n\n                    // signal that an error has occurred\n                    window_table.get_mutex().lock();\n                    status = failure_to_init;\n                    et_signaler.broadcast();\n                    window_table.get_mutex().unlock();\n                    return;\n                }\n\n\n                // make the helper window that is used to trigger events in the\n                // event handler loop from other threads\n                TCHAR nothing[] = TEXT(\"\");\n                helper_window = CreateWindow(window_class_name,nothing,WS_DISABLED,0,0,0,0,HWND_MESSAGE,NULL,hInstance,NULL);\n                if (helper_window == NULL)\n                {\n                    dlog << LFATAL << \"Error gathering needed resources\";\n\n                    // signal that an error has occurred\n                    window_table.get_mutex().lock();\n                    status = failure_to_init;\n                    et_signaler.broadcast();\n                    window_table.get_mutex().unlock();\n                    return;\n                }\n\n                // signal that the event thread is now up and running\n                window_table.get_mutex().lock();\n                status = initialized;\n                et_signaler.broadcast();\n                window_table.get_mutex().unlock();\n\n                // start the event handler loop.   \n                /*\n                    A note about this quit_windows_loop thing.  If the user is holding \n                    the mouse button down on the title bar of a window it will cause\n                    the PostQuitMessage() function to be ignored!!  This extra bool \n                    is a work around to prevent that from happening.\n                */\n                MSG msg;\n                while (GetMessage (&msg, NULL, 0, 0) && \n                       quit_windows_loop == false)\n                {\n                    TranslateMessage (&msg) ;\n                    DispatchMessage (&msg) ;\n                } \n            }\n        };\n\n        // Do all this just to make sure global_mutex() is initialized at program start\n        // and thus hopefully before any threads have the chance to startup and call\n        // global_data() concurrently.\n        struct call_global_mutex { call_global_mutex() { global_mutex(); } };\n        static call_global_mutex call_global_mutex_instance;\n\n        const shared_ptr_thread_safe<event_handler_thread>& global_data()\n        {\n            auto_mutex M(*global_mutex());\n            static shared_ptr_thread_safe<event_handler_thread> p;\n            if (p.get() == 0)\n            {\n                p.reset(new event_handler_thread());\n                M.unlock();\n                p->start_event_thread();\n            }\n            return p;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        struct ebh_param\n        {\n            std::string text;\n            std::string title;\n        };\n\n        static void error_box_helper(void* param)\n        {\n            ebh_param& p = *static_cast<ebh_param*>(param);\n#ifdef UNICODE\n            MessageBox (NULL,  convert_mbstring_to_wstring(p.text).c_str(), \n                        convert_mbstring_to_wstring(p.title).c_str(), MB_OK|MB_ICONERROR|MB_SYSTEMMODAL \n                        ); \n#else\n            MessageBox (NULL,  p.text.c_str(), \n                        p.title.c_str(), MB_OK|MB_ICONERROR|MB_SYSTEMMODAL \n                        ); \n#endif\n            delete &p;\n        }\n\n        static void error_box (\n            const char* title,\n            const char* text,\n            bool nonblocking = false\n        )\n        {\n            try\n            {\n                if (nonblocking)\n                {\n                    ebh_param* param = new ebh_param;\n                    param->text = text;\n                    param->title = title;\n                    dlib::create_new_thread(error_box_helper,param);\n                }\n                else\n                {\n#ifdef UNICODE\n                    MessageBox (NULL, convert_mbstring_to_wstring(text).c_str(), \n                                convert_mbstring_to_wstring(title).c_str(), \n                                MB_OK|MB_ICONERROR|MB_SYSTEMMODAL \n                                ); \n#else\n                    MessageBox (NULL,  text, \n                                title, MB_OK|MB_ICONERROR|MB_SYSTEMMODAL \n                                ); \n#endif\n                }\n            }\n            catch (...)\n            {\n                // we are totally screwed if this happens so just quit\n                exit(0);\n            }\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        static bool map_keys (\n            unsigned long keycode,\n            bool shift,\n            bool caps,\n            unsigned long& result,\n            bool& is_printable\n        )\n        /*!\n            requires\n                - if (shift was down for this key) then\n                    - shift == true\n                - if (caps lock was on for this key) then\n                    - caps == true\n                - keycode == the keycode from windows that we are to process\n                - keycode < keyboard_keys_size\n            ensures\n                - if (this key should be ignored) then\n                    - returns false\n                - else\n                    - returns true\n                    - #is_printable == true if result is a printable ascii character\n                    - #result == the keycode converted into the proper number to tbe \n                      returned by the event handler.\n        !*/\n        {\n            is_printable = true;\n\n            if (keycode <= '9' && keycode >= '0')\n            {\n                result = keycode;\n                if (shift)\n                {\n                    switch (result)\n                    {\n                    case '0': result = ')'; break;\n                    case '1': result = '!'; break;\n                    case '2': result = '@'; break;\n                    case '3': result = '#'; break;\n                    case '4': result = '$'; break;\n                    case '5': result = '%'; break;\n                    case '6': result = '^'; break;\n                    case '7': result = '&'; break;\n                    case '8': result = '*'; break;\n                    case '9': result = '('; break;\n                    }\n                }\n            }\n            else if (keycode <= 'Z' && keycode >= 'A')\n            {\n                result = keycode;\n\n                // make the result lower case if we need to.\n                if ((shift && caps) || (!caps && !shift))\n                    result = result - 'A' + 'a';               \n            }\n            else\n            {\n                switch (keycode)\n                {\n                case VK_BACK:   \n                    is_printable = false;\n                    result = base_window::KEY_BACKSPACE; \n                    break;\n\n                case VK_SHIFT:\n                    is_printable = false;\n                    result = base_window::KEY_SHIFT;\n                    break;\n\n                case VK_CONTROL:\n                    is_printable = false;\n                    result = base_window::KEY_CTRL;\n                    break;\n\n                case VK_MENU:\n                    is_printable = false;\n                    result = base_window::KEY_ALT;\n                    break;\n\n                case VK_PAUSE:\n                    is_printable = false;\n                    result = base_window::KEY_PAUSE;\n                    break;\n\n                case VK_CAPITAL:\n                    is_printable = false;\n                    result = base_window::KEY_CAPS_LOCK;\n                    break;\n\n                case VK_ESCAPE:\n                    is_printable = false;\n                    result = base_window::KEY_ESC;\n                    break;\n\n                case VK_PRIOR:\n                    is_printable = false;\n                    result = base_window::KEY_PAGE_UP;\n                    break;\n\n                case VK_NEXT:\n                    is_printable = false;\n                    result = base_window::KEY_PAGE_DOWN;\n                    break;\n\n                case VK_END:\n                    is_printable = false;\n                    result = base_window::KEY_END;\n                    break;\n\n                case VK_HOME:\n                    is_printable = false;\n                    result = base_window::KEY_HOME;\n                    break;\n\n                case VK_LEFT:\n                    is_printable = false;\n                    result = base_window::KEY_LEFT;\n                    break;\n\n                case VK_RIGHT:\n                    is_printable = false;\n                    result = base_window::KEY_RIGHT;\n                    break;\n\n                case VK_UP:\n                    is_printable = false;\n                    result = base_window::KEY_UP;\n                    break;\n\n                case VK_DOWN:\n                    is_printable = false;\n                    result = base_window::KEY_DOWN;\n                    break;\n\n                case VK_INSERT:\n                    is_printable = false;\n                    result = base_window::KEY_INSERT;\n                    break;\n\n                case VK_DELETE:\n                    is_printable = false;\n                    result = base_window::KEY_DELETE;\n                    break;\n\n                case 0x91:\n                    is_printable = false;\n                    result = base_window::KEY_SCROLL_LOCK;\n                    break;\n\n                case VK_F1:\n                    is_printable = false;\n                    result = base_window::KEY_F1;\n                    break;\n\n                case VK_F2:\n                    is_printable = false;\n                    result = base_window::KEY_F2;\n                    break;\n\n                case VK_F3:\n                    is_printable = false;\n                    result = base_window::KEY_F3;\n                    break;\n\n                case VK_F4:\n                    is_printable = false;\n                    result = base_window::KEY_F4;\n                    break;\n\n                case VK_F5:\n                    is_printable = false;\n                    result = base_window::KEY_F5;\n                    break;\n\n                case VK_F6:\n                    is_printable = false;\n                    result = base_window::KEY_F6;\n                    break;\n\n                case VK_F7:\n                    is_printable = false;\n                    result = base_window::KEY_F7;\n                    break;\n\n                case VK_F8:\n                    is_printable = false;\n                    result = base_window::KEY_F8;\n                    break;\n\n                case VK_F9:\n                    is_printable = false;\n                    result = base_window::KEY_F9;\n                    break;\n\n                case VK_F10:\n                    is_printable = false;\n                    result = base_window::KEY_F10;\n                    break;\n\n                case VK_F11:\n                    is_printable = false;\n                    result = base_window::KEY_F11;\n                    break;\n\n                case VK_F12:\n                    is_printable = false;\n                    result = base_window::KEY_F12;\n                    break;\n      \n\n                case VK_SPACE:  result = ' ';  break;                \n                case VK_TAB:    result = '\\t'; break;\n                case VK_RETURN: result = '\\n'; break;\n                case VK_NUMPAD0:  result = '0';  break;\n                case VK_NUMPAD1:  result = '1';  break;\n                case VK_NUMPAD2:  result = '2';  break;\n                case VK_NUMPAD3:  result = '3';  break;\n                case VK_NUMPAD4:  result = '4';  break;\n                case VK_NUMPAD5:  result = '5';  break;\n                case VK_NUMPAD6:  result = '6';  break;\n                case VK_NUMPAD7:  result = '7';  break;\n                case VK_NUMPAD8:  result = '8';  break;\n                case VK_NUMPAD9:  result = '9';  break;\n\n                case VK_MULTIPLY:   result = '*';  break;\n                case VK_ADD:        result = '+';  break;\n                case VK_SUBTRACT:   result = '-';  break;\n                case VK_DECIMAL:    result = '.';  break;\n                case VK_DIVIDE:     result = '/';  break;\n\n                case VK_OEM_1:\n                    if (shift)  result = ':';\n                    else        result = ';';\n                    break;\n\n                case VK_OEM_PLUS:\n                    if (shift)  result = '+';\n                    else        result = '=';\n                    break;\n\n                case VK_OEM_COMMA:\n                    if (shift)  result = '<';\n                    else        result = ',';\n                    break;\n\n                case VK_OEM_MINUS:\n                    if (shift)  result = '_';\n                    else        result = '-';\n                    break;\n\n                case VK_OEM_PERIOD:\n                    if (shift)  result = '>';\n                    else        result = '.';\n                    break;\n\n                case VK_OEM_2:\n                    if (shift)  result = '?';\n                    else        result = '/';\n                    break;\n\n                case VK_OEM_3:\n                    if (shift)  result = '~';\n                    else        result = '`';\n                    break;\n\n                case VK_OEM_4:\n                    if (shift)  result = '{';\n                    else        result = '[';\n                    break;\n\n                case VK_OEM_5:\n                    if (shift)  result = '|';\n                    else        result = '\\\\';\n                    break;\n\n                case VK_OEM_6:\n                    if (shift)  result = '}';\n                    else        result = ']';\n                    break;\n\n                case VK_OEM_7:\n                    if (shift)  result = '\"';\n                    else        result = '\\'';\n                    break;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        LRESULT CALLBACK WndProc (  \n            HWND hwnd, \n            UINT message, \n            WPARAM wParam, \n            LPARAM lParam\n        )\n        {        \n            using namespace gui_core_kernel_1_globals;\n            // Make the event processing thread have a priority slightly above normal.\n            // This makes the GUI smother if you do heavy processing in other threads.\n            HANDLE hand = OpenThread(THREAD_ALL_ACCESS,FALSE,GetCurrentThreadId());\n            SetThreadPriority(hand,THREAD_PRIORITY_ABOVE_NORMAL);\n            CloseHandle(hand);\n\n            shared_ptr_thread_safe<event_handler_thread> globals(global_data());\n\n            window_table_type& window_table = globals->window_table;\n            HWND& helper_window = globals->helper_window;\n\n            auto_mutex M(window_table.get_mutex());\n\n            try\n            {\n                std::vector<unsigned char> bitmap_buffer;\n\n                bool is_double = false;\n                unsigned long btn = base_window::NONE;\n\n                switch (message)\n                {\n                    case WM_USER+QUIT_EVENT_HANDLER_THREAD:\n                        if (hwnd == helper_window)\n                        {                            \n                            globals->quit_windows_loop = true;\n                            PostQuitMessage(0); \n                        }\n                        return 0;\n\n                    case WM_USER+DESTROY_WINDOW:\n                        if (hwnd == helper_window)\n                        {                            \n                            DestroyWindow((HWND)wParam);\n                        }\n                        return 0;\n\n                    case WM_USER+CALL_MOVE_WINDOW:\n                        if (hwnd == helper_window)\n                        {\n                            MoveWindow(\n                                globals->move_window_hwnd,\n                                globals->move_window_x,\n                                globals->move_window_y,\n                                globals->move_window_width,\n                                globals->move_window_height,\n                                TRUE);\n                            globals->move_window_done = true;\n                            globals->et_signaler.broadcast();\n                        }\n                        return 0;\n\n                    case WM_USER+USER_EVENTS_READY:\n                        if (hwnd == helper_window)\n                        {\n                            // this is the signal to look in the user_events queue \n                            globals->user_events.lock();\n                            globals->user_events.swap(globals->user_events_temp);\n                            globals->user_events.unlock();\n                            globals->user_events_temp.reset();\n                            // now dispatch all these user events\n                            while (globals->user_events_temp.move_next())\n                            {\n                                base_window** win_ = window_table[globals->user_events_temp.element().w];\n                                base_window* win;\n                                // if this window exists in the window table then dispatch\n                                // its event.\n                                if (win_)\n                                {\n                                    win = *win_;\n                                    win->on_user_event(\n                                        globals->user_events_temp.element().p,\n                                        globals->user_events_temp.element().i\n                                    );\n                                }\n                            }\n                            globals->user_events_temp.clear();\n                        }\n                        return 0;\n\n                    case WM_USER+SET_ACTIVE_WINDOW:\n                        if (hwnd == helper_window)\n                        {                            \n                            SetActiveWindow((HWND)wParam);\n                        }\n                        return 0;\n\n                    case WM_USER+SHOW_WINDOW_SHOW:\n                        if (hwnd == helper_window)\n                        {                            \n                            ShowWindow((HWND)wParam,SW_SHOW);\n                            BringWindowToTop((HWND)wParam);\n                        }\n                        return 0;\n\n                    case WM_USER+SHOW_WINDOW_HIDE:\n                        if (hwnd == helper_window)\n                        {                            \n                            ShowWindow((HWND)wParam,SW_HIDE);\n                        }\n                        return 0;\n\n                    case WM_USER+CALL_SET_WINDOW_TITLE:\n                        if (hwnd == helper_window)\n                        {                            \n                            SetWindowTextW((HWND)wParam,globals->window_title.c_str());\n                            globals->set_window_title_done = true;\n                            globals->et_signaler.broadcast();\n                        }\n                        return 0;\n\n\n                    case WM_USER+CREATE_WINDOW:\n                        if (hwnd == helper_window)\n                        {                 \n\n                            // if this is stupposed to be a popup window then do the popup window thing\n                            if (globals->dwStyle == WS_CHILD)\n                            {\n                                TCHAR nothing[] = TEXT(\"\");\n                                globals->new_window = CreateWindowEx (WS_EX_TOOLWINDOW,globals->window_class_name, nothing,\n                                    globals->dwStyle,\n                                    CW_USEDEFAULT, CW_USEDEFAULT,\n                                    CW_USEDEFAULT, CW_USEDEFAULT,\n                                    helper_window, NULL, globals->hInstance, NULL);\n                                SetParent(globals->new_window,NULL);\n                            }\n                            else\n                            {\n                                TCHAR nothing[] = TEXT(\"\");\n                                globals->new_window = CreateWindow (globals->window_class_name, nothing,\n                                    globals->dwStyle,\n                                    CW_USEDEFAULT, CW_USEDEFAULT,\n                                    CW_USEDEFAULT, CW_USEDEFAULT,\n                                    NULL, NULL, globals->hInstance, NULL);\n                            }\n                            // use the helper_window to indicate that CreateWindow failed\n                            if (globals->new_window == NULL)\n                                globals->new_window = helper_window;\n                            globals->et_signaler.broadcast();\n                        }\n                        return 0;\n\n                    case WM_SYSKEYDOWN:\n                    case WM_KEYDOWN:\n                        {\n                            if (globals->in_ime_composition) break;\n\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n\n                            unsigned long state = 0;\n\n                            bool shift = ((GetKeyState(VK_SHIFT)&0x8000)!=0);\n                            bool ctrl = ((GetKeyState(VK_CONTROL)&0x8000)!=0);\n                            bool caps = ((GetKeyState(VK_CAPITAL)&0x0001)!=0);\n                            if(shift)\n                                state = base_window::KBD_MOD_SHIFT;\n                            if(ctrl)\n                                state |= base_window::KBD_MOD_CONTROL;\n                            if(caps)\n                                state |= base_window::KBD_MOD_CAPS_LOCK;\n                            if((GetKeyState(VK_MENU)&0x8000)!=0)\n                                state |= base_window::KBD_MOD_ALT;\n                            if((GetKeyState(VK_NUMLOCK)&0x0001)!=0)\n                                state |= base_window::KBD_MOD_NUM_LOCK;\n                            if((GetKeyState(VK_SCROLL)&0x0001)!=0)\n                                state |= base_window::KBD_MOD_SCROLL_LOCK;\n\n\n                            bool is_printable;\n                            unsigned long result;\n\n                            if (map_keys(wParam,shift,caps,result,is_printable))\n                            {\n                                // signal the keyboard event\n                                win->on_keydown(result,is_printable,state);\n                            }\n                           \n                        }\n                        break;\n\n                        // treat the user releasing the mouse button on the non client area (e.g. the title bar)\n                        // like focus being lost since that is what X11 does\n                    case WM_NCLBUTTONUP:\n                    case WM_NCMBUTTONUP:\n                    case WM_NCRBUTTONUP:\n                    case WM_SETFOCUS:\n                        {\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n\n                            // signal that the window is gaining focus \n                            win->on_focus_gained();\n                        }\n                        break;\n\n                        // treat the user clicking on the non client area (e.g. the title bar)\n                        // like focus being lost since that is what X11 does\n                    case WM_NCLBUTTONDBLCLK:\n                    case WM_NCMBUTTONDBLCLK:\n                    case WM_NCRBUTTONDBLCLK:\n                    case WM_NCLBUTTONDOWN:\n                    case WM_NCMBUTTONDOWN:\n                    case WM_NCRBUTTONDOWN:\n                    case WM_KILLFOCUS:\n                        {\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n\n                            // signal that the window is gaining focus \n                            win->on_focus_lost();\n                        }\n                        break;\n\n                    case WM_SIZE:\n                        {\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n\n\n                            // signal that the window has been resized\n                            win->on_window_resized();\n                           \n                        }\n                        return 0;\n\n                    case WM_MOVE:\n                        {\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n\n\n                            // signal that the window has moved \n                            win->on_window_moved();\n                           \n                        }\n                        return 0;\n\n                    case WM_MOUSELEAVE:\n                        {\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n\n\n                            // signal that the mouse has left the window\n                            if (win->mouse_in)\n                            {\n                                win->on_mouse_leave();\n                                win->mouse_in = false;\n                            }\n                           \n                        }\n                        return 0;\n\n                    case WM_MOUSEWHEEL:\n                        {\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n\n                            unsigned long state = 0;\n                            if (wParam & MK_CONTROL)\n                                state |= base_window::CONTROL;\n                            if (wParam & MK_LBUTTON)\n                                state |= base_window::LEFT;\n                            if (wParam & MK_MBUTTON)\n                                state |= base_window::MIDDLE;\n                            if (wParam & MK_RBUTTON)\n                                state |= base_window::RIGHT;\n                            if (wParam & MK_SHIFT)\n                                state |= base_window::SHIFT;\n\n                            // signal the mouse wheel event\n                            if (GET_WHEEL_DELTA_WPARAM(wParam) > 0)\n                            {\n                                win->on_wheel_up(state);                                \n                            }\n                            else\n                            {\n                                win->on_wheel_down(state);\n                            }\n                           \n                        }\n                        return 0;\n\n                    case WM_LBUTTONUP:\n                        btn = base_window::LEFT;\n                    case WM_MBUTTONUP:\n                        if (btn == base_window::NONE)\n                            btn = base_window::MIDDLE;\n                    case WM_RBUTTONUP:\n                        if (btn == base_window::NONE)\n                            btn = base_window::RIGHT;\n                        {        \n                            // release the mouse capture if the user isn't holding any\n                            // other mouse buttons\n                            if (!((wParam & MK_LBUTTON) | (wParam & MK_MBUTTON) | (wParam & MK_RBUTTON)))\n                                ReleaseCapture();\n\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n\n                            unsigned long state = 0;\n                            if (wParam & MK_CONTROL)\n                                state |= base_window::CONTROL;\n                            if (wParam & MK_LBUTTON)\n                                state |= base_window::LEFT;\n                            if (wParam & MK_MBUTTON)\n                                state |= base_window::MIDDLE;\n                            if (wParam & MK_RBUTTON)\n                                state |= base_window::RIGHT;\n                            if (wParam & MK_SHIFT)\n                                state |= base_window::SHIFT;\n                            \n                            // remove the clicked button from the state\n                            state &= (~btn);\n\n                            // signal the mouse click\n                            win->on_mouse_up(btn,state,GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam));\n                           \n                        }\n                        return 0;\n\n\n\n                    case WM_LBUTTONDBLCLK:\n                        if (btn == base_window::NONE)\n                            btn = base_window::LEFT;\n                    case WM_MBUTTONDBLCLK:\n                        if (btn == base_window::NONE)\n                            btn = base_window::MIDDLE;\n                    case WM_RBUTTONDBLCLK:\n                        if (btn == base_window::NONE)\n                            btn = base_window::RIGHT;\n                        is_double = true;\n                    case WM_LBUTTONDOWN:\n                        if (btn == base_window::NONE)\n                            btn = base_window::LEFT;\n                    case WM_MBUTTONDOWN:\n                        if (btn == base_window::NONE)\n                            btn = base_window::MIDDLE;\n                    case WM_RBUTTONDOWN:\n                        if (btn == base_window::NONE)\n                            btn = base_window::RIGHT;\n                        {\n                            SetCapture(hwnd);\n\n\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n                            \n                            unsigned long state = 0;\n                            if (wParam & MK_CONTROL)\n                                state |= base_window::CONTROL;\n                            if (wParam & MK_LBUTTON)\n                                state |= base_window::LEFT;\n                            if (wParam & MK_MBUTTON)\n                                state |= base_window::MIDDLE;\n                            if (wParam & MK_RBUTTON)\n                                state |= base_window::RIGHT;\n                            if (wParam & MK_SHIFT)\n                                state |= base_window::SHIFT;\n\n                            // remove the clicked button from the state\n                            state &= (~btn);\n\n                            // signal the mouse click\n                            win->on_mouse_down(btn,state,GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam),is_double);\n                           \n                        }\n                        return 0;\n\n                    case WM_MOUSEMOVE:\n                        {\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n                            \n                            unsigned long state = 0;\n                            bool mouse_button_down = false;\n                            if (wParam & MK_CONTROL)\n                                state |= base_window::CONTROL;\n                            if (wParam & MK_LBUTTON)\n                            {\n                                state |= base_window::LEFT;\n                                mouse_button_down = true;\n                            }\n                            if (wParam & MK_MBUTTON)\n                            {\n                                mouse_button_down = true;\n                                state |= base_window::MIDDLE;\n                            }\n                            if (wParam & MK_RBUTTON)\n                            {\n                                state |= base_window::RIGHT;\n                                mouse_button_down = true;\n                            }\n                            if (wParam & MK_SHIFT)\n                                state |= base_window::SHIFT;\n\n                            // signal the mouse movement if this mouse event isn't identical to the\n                            // last one we got\n                            if ( GET_X_LPARAM(lParam) != win->prevx || \n                                 GET_Y_LPARAM(lParam) != win->prevy || \n                                 state != win->prev_state)\n                            {\n                                win->on_mouse_move(state,GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam));\n                            }\n                           \n                            // save the event data into the prev* member variables\n                            win->prevx = GET_X_LPARAM(lParam);\n                            win->prevy = GET_Y_LPARAM(lParam);\n                            win->prev_state = state;\n\n                            // The following block of code checks if the mouse is moving\n                            // into or out of the window.\n                            if (mouse_button_down == false)\n                            {\n                                // if there isn't any mouse button down then the fact that\n                                // we are getting a mouse move message means it is in the\n                                // window\n                                if (win->mouse_in == false)\n                                {\n                                    win->on_mouse_enter();\n                                    win->mouse_in = true;\n\n                                    // set the tracker for the mouse\n                                    TRACKMOUSEEVENT tm;\n                                    tm.hwndTrack = hwnd;\n                                    tm.cbSize = sizeof(tm);\n                                    tm.dwFlags = TME_LEAVE;\n                                    _TrackMouseEvent(&tm);\n                                }\n                            }\n                            else if (win->mouse_in)\n                            {\n                                // check if the mouse is currently outside the window\n                                const long mouse_x = GET_X_LPARAM(lParam);\n                                const long mouse_y = GET_Y_LPARAM(lParam);\n                                if (mouse_x < 0 || mouse_y < 0)\n                                {\n                                    // the mouse is not in the window\n                                    win->mouse_in = false;\n                                    win->on_mouse_leave();\n                                }\n                                else\n                                {\n                                    unsigned long width, height;\n                                    win->get_size(width,height);  \n                                    if (mouse_x >= static_cast<long>(width) || \n                                        mouse_y >= static_cast<long>(height))\n                                    {\n                                        // the mouse is not in the window\n                                        win->mouse_in = false;\n                                        win->on_mouse_leave();\n                                    }\n                                }\n                            }\n                            else if (win->mouse_in == false)\n                            {\n                                // at this point we know that the mouse is moving around\n                                // with some of its buttons down.  So it might be outside the window.\n                                // get the window size and see if the mouse is outside\n                                // it.\n                                const long mouse_x = GET_X_LPARAM(lParam);\n                                const long mouse_y = GET_Y_LPARAM(lParam);\n                                unsigned long width, height;\n                                win->get_size(width,height);  \n                                if (mouse_x < static_cast<long>(width) && \n                                    mouse_y < static_cast<long>(height) &&\n                                    mouse_x >= 0 &&\n                                    mouse_y >= 0)\n                                {\n                                    // The mouse has gone inside the window\n                                    win->mouse_in = true;\n                                    win->on_mouse_enter();\n\n                                    // set the tracker for the mouse\n                                    TRACKMOUSEEVENT tm;\n                                    tm.hwndTrack = hwnd;\n                                    tm.cbSize = sizeof(tm);\n                                    tm.dwFlags = TME_LEAVE;\n                                    _TrackMouseEvent(&tm);\n                                }\n                               \n                            }\n\n\n                        }\n                        return 0;\n\n                    case WM_PAINT :\n                        {     \n\n                            PAINTSTRUCT ps;\n                            HDC   hdc = NULL;\n\n                            hdc = BeginPaint (hwnd, &ps) ;\n\n                            try\n                            {\n                                base_window** win_ = window_table[hwnd];\n                                base_window* win;\n                                if (win_)\n                                    win = *win_;\n                                else\n                                    break;\n\n\n\n\n                                LONG x = ps.rcPaint.left;\n                                LONG y = ps.rcPaint.top;\n                                LONG width = ps.rcPaint.right - x;\n                                LONG height = ps.rcPaint.bottom - y;\n                        \n                                if (width != 0 && height != 0)\n                                {\n\n                                    BITMAPINFO bmap_info;\n                                    bmap_info.bmiColors[0].rgbBlue = 0;\n                                    bmap_info.bmiColors[0].rgbGreen = 0;\n                                    bmap_info.bmiColors[0].rgbRed = 0;\n                                    bmap_info.bmiColors[0].rgbReserved = 0;\n                                    bmap_info.bmiHeader.biSize = sizeof(bmap_info.bmiHeader);\n                                    bmap_info.bmiHeader.biWidth = width;\n                                    bmap_info.bmiHeader.biHeight = -1*height;\n                                    bmap_info.bmiHeader.biPlanes = 1;\n                                    bmap_info.bmiHeader.biBitCount = 24;\n                                    bmap_info.bmiHeader.biCompression = BI_RGB;\n                                    bmap_info.bmiHeader.biSizeImage = 0;\n                                    bmap_info.bmiHeader.biXPelsPerMeter = 0;\n                                    bmap_info.bmiHeader.biYPelsPerMeter = 0;\n                                    bmap_info.bmiHeader.biClrUsed = 0;\n                                    bmap_info.bmiHeader.biClrImportant = 0;\n\n\n\n                                    unsigned char* bitmap ;\n                                    unsigned long size;\n                                    unsigned long padding = 0;\n                                    if ((width*3)%sizeof(LONG) != 0)\n                                    {\n                                        padding = sizeof(LONG) - (width*3)%sizeof(LONG);\n                                        size = (width*3+padding)*height;\n                                    }\n                                    else\n                                    {\n                                        size = width*height*3;\n                                    }\n\n                                    if (bitmap_buffer.size() < size)\n                                        bitmap_buffer.resize(size);\n                                    bitmap = &bitmap_buffer[0];                         \n\n                                    canvas bits(bitmap,padding,x,y,x+width-1,y+height-1);\n\n\n\n                                    win->paint(bits);\n\n\n                                    \n                                    SetDIBitsToDevice (\n                                        hdc,\n                                        ps.rcPaint.left,\n                                        ps.rcPaint.top,\n                                        width,\n                                        height,\n                                        0,\n                                        0,\n                                        0,\n                                        height,\n                                        bitmap,\n                                        &bmap_info,\n                                        DIB_RGB_COLORS\n                                        );\n                                }\n\n                                EndPaint (hwnd, &ps) ;    \n\n                            }\n                            catch (...)\n                            {\n                                // make sure EndPaint is called even if an exception\n                                // is thrown.\n                                if (hdc != NULL)\n                                    EndPaint (hwnd, &ps);    \n                                throw;\n                            }\n                        }   \n                        return 0 ;\n\n                    case  WM_ERASEBKGND:\n                        return 1;\n\n\n\n\n                    case WM_CLOSE:\n                        {\n                            base_window** win_ = window_table[hwnd];\n                            base_window* win;\n                            if (win_)\n                                win = *win_;\n                            else\n                                break;\n                            \n  \n                            // signal that the window is being closed                                \n                            if (win->on_window_close() == base_window::DO_NOT_CLOSE_WINDOW)\n                            {\n                                DLIB_ASSERT(win->has_been_destroyed == false,\n                                    \"\\tYou called close_window() inside the on_window_close() event but\" \n                                    << \"\\n\\tthen returned DO_NOT_CLOSE_WINDOW.  You can do one or the other but not both.\"\n                                    << \"\\n\\tthis:     \" << win \n                                    );\n                                // this happens if the on_window_close() callback\n                                // tells us to ignore the close event.  \n                                return 0;\n                            }\n                            else\n                            {\n                                if (window_table[hwnd])\n                                {\n                                    window_table.destroy(hwnd);\n                                    win->has_been_destroyed = true;\n                                    win->hwnd = 0;\n                                    globals->window_close_signaler.broadcast();\n                                }\n                                else\n                                {\n                                    // in this case the window must have self destructed by\n                                    // calling delete this;\n                                    return 0;\n                                }\n                            }\n                          \n                        }\n                        return DefWindowProc (hwnd, message, wParam, lParam);\n\n                    case WM_IME_STARTCOMPOSITION:\n                        globals->in_ime_composition = true;\n                        break;\n\n                    case WM_IME_COMPOSITION:\n                        {\n                        globals->in_ime_composition = false;\n                        base_window** win_ = window_table[hwnd];\n                        base_window* win;\n                        if (win_)\n                            win = *win_;\n                        else\n                            break;\n                        HIMC hImc = ImmGetContext(hwnd);\n                        if (lParam & GCS_RESULTSTR){\n                            WCHAR wc;\n                            LONG bufbyte = ImmGetCompositionStringW(hImc, GCS_RESULTSTR, &wc, 0);\n                            if (bufbyte != IMM_ERROR_NODATA && bufbyte != IMM_ERROR_GENERAL){\n                                bufbyte += sizeof(WCHAR);\n\n\n                                WCHAR *buf = new WCHAR[bufbyte / sizeof(WCHAR)];\n                                ImmGetCompositionStringW(hImc, GCS_RESULTSTR, buf, bufbyte);\n                                buf[bufbyte / sizeof(WCHAR) - 1] = L'\\0';\n\n                                // signal the putstring event\n                                win->on_string_put(std::wstring(buf));\n                                delete [] buf;\n                            }\n                        }\n                        ImmReleaseContext(hwnd, hImc);\n                        }\n                        break;\n\n                    default:\n                        break;\n\n                } // switch (message)\n\n            \n            }\n            catch (std::exception& e)\n            {\n                error_box(\"Exception thrown in event handler\",e.what());\n                globals->quit_windows_loop = true; \n            }\n            catch (...)\n            {\n                error_box(\"Exception thrown in event handler\",\"Unknown Exception type.\");\n                globals->quit_windows_loop = true; \n            }\n\n            return DefWindowProc (hwnd, message, wParam, lParam) ;\n\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        void show_window (\n            HWND hwnd\n        )\n        {\n            using namespace gui_core_kernel_1_globals;\n            PostMessage(global_data()->helper_window,WM_USER+SHOW_WINDOW_SHOW,(WPARAM)hwnd,0);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        void hide_window (\n            HWND hwnd\n        )\n        {\n            using namespace gui_core_kernel_1_globals;\n            PostMessage(global_data()->helper_window,WM_USER+SHOW_WINDOW_HIDE,(WPARAM)hwnd,0);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        void give_window_focus (\n            HWND hwnd\n        )\n        /*!\n            ensures\n                - calls SetActiveWindow(hwnd) from the event handling thread.\n        !*/\n        {\n            using namespace gui_core_kernel_1_globals;\n            PostMessage(global_data()->helper_window,WM_USER+SET_ACTIVE_WINDOW,(WPARAM)hwnd,0);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        void destroy_window (\n            HWND hwnd\n        )\n        /*!\n            ensures\n                - calls DestroyWindow(hwnd) from the event handling thread.  \n        !*/\n        {\n            using namespace gui_core_kernel_1_globals;\n            PostMessage(global_data()->helper_window,WM_USER+DESTROY_WINDOW,(WPARAM)hwnd,0);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        HWND make_window (\n            DWORD dwStyle_\n        )\n        /*!\n            ensures\n                - creates a window by calling CreateWindow and passes on the \n                  dwStyle argument.  \n                - returns the HWND that is returned by CreateWindow\n                - ensures that CreateWindow is called from the event handler thread\n                - if (it was unable to create a window) then\n                    - returns NULL or helper_window\n        !*/\n        {   \n            using namespace gui_core_kernel_1_globals;\n            shared_ptr_thread_safe<event_handler_thread> globals(global_data());\n            // if we are running in the event handling thread then just call\n            // CreateWindow directly\n            if (get_thread_id() == globals->event_thread_id)\n            {\n                // if this is stupposed to be a popup window then do the popup window thing\n                if (dwStyle_ == WS_CHILD)\n                {\n                    TCHAR nothing[] = TEXT(\"\");\n                    HWND tmp = CreateWindowEx (WS_EX_TOOLWINDOW|WS_EX_TOPMOST, globals->window_class_name, nothing,\n                            dwStyle_,\n                            CW_USEDEFAULT, CW_USEDEFAULT,\n                            CW_USEDEFAULT, CW_USEDEFAULT,\n                            globals->helper_window, NULL, globals->hInstance, NULL);\n                    SetParent(tmp,NULL);\n                    return tmp;\n                }\n                else\n                {\n                    TCHAR nothing[] = TEXT(\"\");\n                    return CreateWindow (globals->window_class_name, nothing,\n                            dwStyle_,\n                            CW_USEDEFAULT, CW_USEDEFAULT,\n                            CW_USEDEFAULT, CW_USEDEFAULT,\n                            NULL, NULL, globals->hInstance, NULL);\n                }\n            }\n            else\n            {\n                auto_mutex M(globals->window_table.get_mutex());\n                // wait for our chance to make a new window request\n                while (globals->request_new_window)\n                    globals->et_signaler.wait();\n\n\n                globals->dwStyle = dwStyle_;\n                if (PostMessage(globals->helper_window,WM_USER+CREATE_WINDOW,0,0)==0)\n                {\n                    throw gui_error(\"Unable to schedule function for execution in event handling thread.\");\n                } \n\n                // wait for our request to be serviced\n                while (globals->new_window == NULL)\n                    globals->et_signaler.wait();\n\n                HWND temp = globals->new_window;\n                globals->new_window = NULL;\n                globals->request_new_window = false;\n                globals->et_signaler.broadcast();\n\n                // if make_window() returns the helper_window then it means it failed\n                // to make a new window\n                if (temp == globals->helper_window)\n                    temp = NULL;\n\n                return temp;\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n\n    } // end namespace gui_core_kernel_1_globals\n\n// ----------------------------------------------------------------------------------------\n\n    void canvas::\n    fill (\n        unsigned char red_,\n        unsigned char green_,\n        unsigned char blue_\n    ) const\n    {\n        const unsigned long red = red_;\n        const unsigned long green = green_;\n        const unsigned long blue = blue_;\n\n        const LONG block1 = (blue<<24) | (red<<16) | (green<<8) | blue;\n        const LONG block2 = (green<<24) | (blue<<16) | (red<<8) | green;\n        const LONG block3 = (red<<24) | (green<<16) | (blue<<8) | red;\n\n        // remember that row_width is a multiple of 4 because windows\n        // requires that all bitmaps have row widths that are multiples of 4.\n        unsigned long size = row_width/4;\n        for (unsigned long i = 0; i < height_; ++i)\n        {\n            unsigned long padding = size%3;                \n            LONG* start = reinterpret_cast<LONG*>(bits+row_width*i);\n            LONG* end = reinterpret_cast<LONG*>(start) + size - padding;\n            while (start != end)\n            {\n                *start = block1;\n                ++start;\n                *start = block2;\n                ++start;\n                *start = block3;\n                ++start;\n            }\n            if (padding)\n            {\n                *start = block1;\n                ++start;\n                --padding;\n            }\n            if (padding)\n            {\n                *start = block2;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    trigger_user_event (\n        void* p,\n        int i\n    )\n    {\n        using namespace gui_core_kernel_1_globals;\n\n        user_event_type e;\n        e.w = hwnd;\n        e.p = p;\n        e.i = i;\n        {\n            auto_mutex M(globals->user_events.get_mutex());\n            globals->user_events.enqueue(e);\n        }\n        \n        if (PostMessage(globals->helper_window,WM_USER+USER_EVENTS_READY,0,0)==0)\n        {\n            throw gui_error(\"Unable to schedule function for execution in event handling thread.\");\n        } \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    base_window::\n    base_window (\n        bool resizable,\n        bool undecorated \n    ) :\n        globals(gui_core_kernel_1_globals::global_data()),\n        has_been_destroyed(false),\n        prevx(-1),\n        prevy(-1),\n        prev_state(0),\n        wm(globals->window_table.get_mutex())\n    {\n        using namespace gui_core_kernel_1_globals;\n        DLIB_ASSERT(!(undecorated == true && resizable == true),\n            \"\\tbase_window::base_window()\"\n            << \"\\n\\tThere is no such thing as an undecorated window that is resizable by the user.\"\n            << \"\\n\\tthis:     \" << this\n            );\n\n        if (resizable)   \n            style = WS_OVERLAPPEDWINDOW;                \n        else if (undecorated)\n            style = WS_CHILD;\n        else\n            style = WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^ WS_MAXIMIZEBOX;\n\n        hwnd = gui_core_kernel_1_globals::make_window(style);                \n\n        if (hwnd == NULL)\n            throw gui_error(\"unable to create base_window\");\n\n        auto_mutex M(wm);\n\n        mouse_in = false;\n\n        HWND temp = hwnd;\n        base_window* ttemp = this;\n        globals->window_table.add(temp,ttemp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    base_window::\n    ~base_window (\n    )\n    {\n        using namespace gui_core_kernel_1_globals;\n        close_window();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    close_window (\n    )\n    {\n        using namespace gui_core_kernel_1_globals;\n        auto_mutex M(wm);\n        if (has_been_destroyed == false)\n        {\n            // do this just to make sure no one tries to call this window's\n            // calbacks.\n            globals->window_table.destroy(hwnd);\n            gui_core_kernel_1_globals::destroy_window(hwnd);\n            hwnd = 0;\n            has_been_destroyed = true;\n            globals->window_close_signaler.broadcast();\n        }  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    wait_until_closed (\n    ) const\n    {\n        using namespace gui_core_kernel_1_globals;\n        auto_mutex M(wm);\n        while (has_been_destroyed == false)\n            globals->window_close_signaler.wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool base_window::\n    is_closed (\n    ) const\n    {\n        auto_mutex M(wm);\n        return has_been_destroyed;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    set_title (\n        const std::string &title\n    )\n    {\n        set_title(convert_mbstring_to_wstring(title));\n    }\n\n    void base_window::\n    set_title (\n        const ustring &title\n    )\n    {\n        set_title(convert_utf32_to_wstring(title));\n    }\n\n    void base_window::\n    set_title (\n        const std::wstring& title\n    )\n    {\n        using namespace gui_core_kernel_1_globals;\n        \n        auto_mutex M(wm);\n        if (has_been_destroyed == true)\n            return;\n\n\n        // call the SetWindowText function with our arguments but make sure it is from \n        // the event thread.  We have to do this because the SetWindowText() apparently blocks\n        // until something happens in the event thread so we have to \n        // do this to avoid possible deadlocks.\n        if (get_thread_id() == globals->event_thread_id)\n        {\n            SetWindowTextW(hwnd,title.c_str());\n        }\n        else\n        {\n            globals->window_title = title;\n            globals->set_window_title_done = false;\n\n            if (PostMessage(globals->helper_window,WM_USER+CALL_SET_WINDOW_TITLE,(WPARAM)hwnd,0)==0)\n            {\n                throw gui_error(\"Unable to schedule SetWindowText function for execution in event handling thread.\");\n            } \n\n            // wait for any SetWindowText() calls to finish\n            while (globals->set_window_title_done == false)\n                globals->et_signaler.wait();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    show (\n    )    \n    {\n        using namespace gui_core_kernel_1_globals;\n        auto_mutex M(wm);\n        if (has_been_destroyed == true)\n            return;\n\n        show_window(hwnd);\n        if (style != WS_CHILD)\n            give_window_focus(hwnd);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    hide(\n    )    \n    {\n        using namespace gui_core_kernel_1_globals;\n        auto_mutex M(wm);\n        if (has_been_destroyed == true)\n            return;\n\n        hide_window(hwnd);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    set_size (\n        int width_,\n        int height_\n    )\n    {\n        using namespace gui_core_kernel_1_globals;\n        auto_mutex M(wm);\n        if (has_been_destroyed == true)\n            return;\n\n        if (get_thread_id() == globals->event_thread_id)\n        {\n            RECT info;\n            GetWindowRect(hwnd,&info);\n\n            int x = info.left;\n            int y = info.top;\n            int width;\n            int height;\n\n            RECT rect;\n            rect.top = 0;\n            rect.left = 0;\n            rect.bottom = height_;\n            rect.right = width_;\n            AdjustWindowRectEx(&rect,style,FALSE,0);\n\n            width = std::abs(rect.right - rect.left);\n            height = std::abs(rect.bottom - rect.top);\n\n            MoveWindow(\n                hwnd,\n                x,\n                y,\n                width,\n                height,\n                TRUE);\n        }\n        else\n        {\n            RECT info;\n            GetWindowRect(hwnd,&info);\n\n            int x = info.left;\n            int y = info.top;\n            int width;\n            int height;\n\n            RECT rect;\n            rect.top = 0;\n            rect.left = 0;\n            rect.bottom = height_;\n            rect.right = width_;\n            AdjustWindowRectEx(&rect,style,FALSE,0);\n\n            width = std::abs(rect.right - rect.left);\n            height = std::abs(rect.bottom - rect.top);\n\n            // call the MoveWindow function with our arguments.  We \n            // have to do this because the MoveWindow() apparently blocks\n            // until something happens in the event thread so we have to \n            // do this to avoid possible deadlocks.\n            globals->move_window_hwnd = hwnd;\n            globals->move_window_x = x;\n            globals->move_window_y = y;\n            globals->move_window_width = width;\n            globals->move_window_height = height;\n            globals->move_window_done = false;\n\n            if (PostMessage(globals->helper_window,WM_USER+CALL_MOVE_WINDOW,0,0)==0)\n            {\n                throw gui_error(\"Unable to schedule MoveWindow function for execution in event handling thread.\");\n            } \n\n            // wait for any MoveWindow calls to finish\n            while (globals->move_window_done == false)\n                globals->et_signaler.wait();\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    set_pos (\n        long x_,\n        long y_\n    )\n    {\n        using namespace gui_core_kernel_1_globals;\n        auto_mutex M(wm);\n        if (has_been_destroyed == true)\n            return;\n\n        if (get_thread_id() == globals->event_thread_id)\n        {\n            RECT info;\n            GetWindowRect(hwnd,&info);\n            int width = info.right - info.left;\n            int height = info.bottom - info.top;\n\n            MoveWindow(\n                hwnd,\n                x_,\n                y_,\n                width,\n                height,\n                TRUE);\n\n        }\n        else\n        {\n            RECT info;\n            GetWindowRect(hwnd,&info);\n            int width = info.right - info.left;\n            int height = info.bottom - info.top;\n\n\n\n            // call the MoveWindow function with our arguments.  We \n            // have to do this because the MoveWindow() apparently blocks\n            // until something happens in the event thread so we have to \n            // do this to avoid possible deadlocks.\n            globals->move_window_hwnd = hwnd;\n            globals->move_window_x = x_;\n            globals->move_window_y = y_;\n            globals->move_window_width = width;\n            globals->move_window_height = height;\n            globals->move_window_done = false;\n\n            if (PostMessage(globals->helper_window,WM_USER+CALL_MOVE_WINDOW,0,0)==0)\n            {\n                throw gui_error(\"Unable to schedule MoveWindow function for execution in event handling thread.\");\n            } \n\n            // wait for any MoveWindow calls to finish\n            while (globals->move_window_done == false)\n                globals->et_signaler.wait();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    get_pos (\n        long& x_,\n        long& y_\n    )\n    {\n        auto_mutex M(wm);\n        x_ = 0;\n        y_ = 0;\n        if (has_been_destroyed == true)\n            return;\n\n        POINT p;\n        p.x = 0;\n        p.y = 0;\n        ClientToScreen(hwnd,&p);\n\n        x_ = p.x;\n        y_ = p.y;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    get_display_size (\n        unsigned long& width,\n        unsigned long& height\n    ) const\n    {\n        auto_mutex M(wm);\n        width = 0;\n        height = 0;\n        if (has_been_destroyed == true)\n            return;\n\n\n        RECT rc;\n        GetWindowRect(hwnd, &rc);\n\n        HMONITOR hMonitor;\n        MONITORINFO mi;\n        //\n        // get the nearest monitor to the passed rect.\n        //\n        hMonitor = MonitorFromRect(&rc, MONITOR_DEFAULTTONEAREST);\n\n        //\n        // get the work area or entire monitor rect.\n        //\n        mi.cbSize = sizeof(mi);\n        GetMonitorInfo(hMonitor, &mi);\n\n        rc = mi.rcMonitor;\n\n        width = static_cast<unsigned long>(rc.right - rc.left);\n        height = static_cast<unsigned long>(rc.bottom - rc.top);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    get_size (\n        unsigned long& width,\n        unsigned long& height\n    ) const\n    {\n        auto_mutex M(wm);\n        width = 0;\n        height = 0;\n        if (has_been_destroyed == true)\n            return;\n\n\n        RECT r;\n        GetClientRect(hwnd,&r);\n\n        width = r.right - r.left;\n        height = r.bottom - r.top;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    invalidate_rectangle (\n        const rectangle& rect\n    )\n    {\n        auto_mutex M(wm);\n        if (rect.is_empty() == false && !has_been_destroyed)\n        {\n            RECT info;\n            info.top = rect.top();\n            info.left = rect.left();\n            info.right = rect.right()+1;\n            info.bottom = rect.bottom()+1;\n\n            InvalidateRect(hwnd,&info,FALSE);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    set_im_pos (\n        long x,\n        long y\n    )\n    {\n        auto_mutex M(wm);\n        if (has_been_destroyed == true)\n            return;\n\n        HIMC hImc = ImmGetContext(hwnd);\n\n        COMPOSITIONFORM cf;\n        cf.dwStyle = CFS_POINT;\n        cf.ptCurrentPos.x = x;\n        cf.ptCurrentPos.y = y;\n        ImmSetCompositionWindow(hImc, &cf);\n        ImmReleaseContext(hwnd, hImc);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void put_on_clipboard (\n        const std::string& str\n    )\n    {\n        put_on_clipboard(convert_mbstring_to_wstring(str));\n    }\n\n    void put_on_clipboard (\n        const dlib::ustring& str\n    )\n    {\n        put_on_clipboard(convert_utf32_to_wstring(str));\n    }\n\n    void put_on_clipboard (\n        const std::wstring& str\n    )\n    {\n        using namespace gui_core_kernel_1_globals;\n        using namespace std;\n\n        shared_ptr_thread_safe<event_handler_thread> globals(global_data());\n\n        if (OpenClipboard(globals->helper_window))\n        {\n            EmptyClipboard();\n            auto_mutex M(globals->window_table.get_mutex());\n\n            const unsigned long newlines = count(str.begin(),str.end(),L'\\n');\n\n            HGLOBAL mem = GlobalAlloc(GMEM_MOVEABLE,(str.size()+newlines+1)*sizeof(wchar_t));\n            if (mem != NULL)\n            {\n                wchar_t* buf = reinterpret_cast<wchar_t*>(GlobalLock(mem));\n\n                if (buf != NULL)\n                {\n                    // copy str into buf while also replacing all the \\n with \\r\\n\n                    for (wstring::size_type i = 0; i < str.size(); ++i)\n                    {\n                        if (str[i] != L'\\n')\n                        {\n                            *buf = str[i];\n                            ++buf;\n                        }\n                        else\n                        {\n                            *buf = L'\\r';\n                            ++buf;\n                            *buf = L'\\n';\n                            ++buf;\n                        }\n                    }\n                    *buf = L'\\0';\n                    GlobalUnlock(mem);\n                    SetClipboardData(CF_UNICODETEXT,mem);\n                }\n            }\n            CloseClipboard();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void get_from_clipboard (\n        std::string& str\n    )\n    {\n        std::wstring wstr;\n        get_from_clipboard(wstr);\n        str = convert_wstring_to_mbstring(wstr);\n    }\n\n    void get_from_clipboard (\n        dlib::ustring& str\n    )\n    {\n        std::wstring wstr;\n        get_from_clipboard(wstr);\n        str = convert_wstring_to_utf32(wstr);\n    }\n\n    void get_from_clipboard (\n        std::wstring& str\n    )\n    {\n        using namespace gui_core_kernel_1_globals;\n        using namespace std;\n        shared_ptr_thread_safe<event_handler_thread> globals(global_data());\n\n        auto_mutex M(globals->window_table.get_mutex());\n        if (OpenClipboard(globals->helper_window))\n        {\n\n            HANDLE data = GetClipboardData(CF_UNICODETEXT);\n            if (data != NULL)\n            {\n                wchar_t* buf = reinterpret_cast<wchar_t*>(GlobalLock(data));\n                if (buf != 0)\n                {\n                    str.clear();\n\n                    // copy the data from buf into str while also removing any '\\r' \n                    // characters.\n                    while (*buf != L'\\0')\n                    {\n                        if (*buf != L'\\r')\n                            str += *buf;\n                        ++buf;\n                    }\n\n                    GlobalUnlock(data);\n                }\n                else\n                {\n                    Beep(500,500);\n                }\n            }\n\n            CloseClipboard();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#endif // WIN32\n\n#endif // DLIB_GUI_CORE_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_core/gui_core_kernel_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki \n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GUI_CORE_KERNEl_1_\n#define DLIB_GUI_CORE_KERNEl_1_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n#ifdef DLIB_NO_GUI_SUPPORT\n#error \"DLIB_NO_GUI_SUPPORT is defined so you can't use the GUI code.  Turn DLIB_NO_GUI_SUPPORT off if you want to use it.\"\n#endif\n\n#include <string>\n#include \"../windows_magic.h\"\n\n\n#include <windows.h>\n#include <winuser.h>\n#include <windowsx.h>\n#include <commctrl.h>\n\n#include \"gui_core_kernel_abstract.h\"\n\n#ifdef _MSC_VER\n// Disable the following warnings for Visual Studio\n//\n// These two warnings have to do with converting points to and from the LONG\n// type.  But both these types are 32 bits in windows so it is fine.\n#pragma warning(disable: 4244; disable: 4312)\n#endif \n\n#include \"../algs.h\"\n#include \"../sync_extension.h\"\n#include \"../binary_search_tree.h\"\n#include \"../threads.h\"\n#include \"../geometry/rectangle.h\"\n#include \"../assert.h\"\n#include \"../queue.h\"\n#include \"../pixel.h\"\n#include \"../unicode.h\"\n#include \"../smart_pointers_thread_safe.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class base_window;\n    namespace gui_core_kernel_1_globals\n    {\n\n        LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);\n        class event_handler_thread;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class canvas : public rectangle\n    {\n    public:\n        struct pixel\n        {\n            unsigned char blue;\n            unsigned char green;\n            unsigned char red;\n        };\n\n        ~canvas() { }\n\n        inline pixel* operator[] (\n            unsigned long row\n        ) const\n        {\n            DLIB_ASSERT(row < height(),\n                \"\\tpixel* canvas::operator[]\"\n                << \"\\n\\tyou have to give a row that is less than the height()\"\n                << \"\\n\\tthis:     \" << this\n                << \"\\n\\trow:      \" << row \n                << \"\\n\\theight(): \" << height() \n                );\n            unsigned char* temp = bits + row_width*row;\n            return reinterpret_cast<pixel*>(temp);\n        }\n\n        void fill (\n            unsigned char red_,\n            unsigned char green_,\n            unsigned char blue_\n        ) const;\n\n    private:\n\n        friend LRESULT CALLBACK gui_core_kernel_1_globals::WndProc (HWND, UINT, WPARAM, LPARAM);\n\n        canvas (\n            unsigned char* bits_,\n            unsigned long padding_,\n            unsigned long left_,\n            unsigned long top_,            \n            unsigned long right_,            \n            unsigned long bottom_\n        ) : \n            rectangle(left_,top_,right_,bottom_),\n            bits(bits_),\n            width_(width()),\n            height_(height()),\n            row_width(width_*3+padding_)\n        {}\n\n        // restricted functions\n        canvas();        // normal constructor\n        canvas(canvas&);        // copy constructor\n        canvas& operator=(canvas&);    // assignment operator    \n\n        unsigned char* const bits;\n        const unsigned long width_;\n        const unsigned long height_;\n        const unsigned long row_width;\n    };\n\n    template <>\n    struct pixel_traits<canvas::pixel>\n    {\n        const static bool rgb  = true;\n        const static bool rgb_alpha  = false;\n        const static bool grayscale = false;\n        const static bool hsi = false;\n        const static long num = 3;\n        typedef unsigned char basic_pixel_type;\n        static basic_pixel_type min() { return 0;}\n        static basic_pixel_type max() { return 255;}\n        const static bool is_unsigned = true;\n        const static bool has_alpha = false;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void put_on_clipboard (\n        const std::string& str\n    );\n\n    void put_on_clipboard (\n        const std::wstring& str\n    );\n\n    void put_on_clipboard (\n        const dlib::ustring& str\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    void get_from_clipboard (\n        std::string& str\n    );\n\n    void get_from_clipboard (\n        std::wstring& str\n    );\n\n    void get_from_clipboard (\n        dlib::ustring& str\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    class base_window\n    {\n        friend LRESULT CALLBACK gui_core_kernel_1_globals::WndProc (HWND, UINT, WPARAM, LPARAM);\n        shared_ptr_thread_safe<gui_core_kernel_1_globals::event_handler_thread> globals;\n\n        HWND hwnd;\n        DWORD style;\n        bool has_been_destroyed;\n\n        // This is true if the mouse is in this window.  false otherwise.\n        // also note that this variable is only accessed from the event handling thread\n        // (except for being initialized below in the constructor, but that is inside\n        // the window_table mutex so it doesn't matter).\n        bool mouse_in;\n\n        // this is a copy of the last inputs we sent to the on_mouse_move() event.\n        long prevx;\n        long prevy;\n        unsigned long prev_state;\n\n    protected:\n        const rmutex& wm;\n\n    public:\n\n        base_window (\n            bool resizable = true,\n            bool undecorated = false\n        );\n\n        virtual ~base_window (\n        );\n\n        void close_window (\n        );\n\n        bool is_closed (\n        ) const;\n\n        void set_title (\n            const std::string& title\n        );\n\n        void set_title (\n            const std::wstring& title\n        );\n\n        void set_title (\n            const ustring& title\n        );\n\n        virtual void show (\n        );    \n\n        virtual void hide(\n        );    \n\n        void set_size (\n            int width_,\n            int height_\n        );\n\n        void set_pos (\n            long x_,\n            long y_\n        );\n\n        void get_pos (\n            long& x_,\n            long& y_\n        );\n\n        void get_size (\n            unsigned long& width,\n            unsigned long& height\n        ) const;\n\n        void get_display_size (\n            unsigned long& width,\n            unsigned long& height\n        ) const;\n\n        void invalidate_rectangle (\n            const rectangle& rect\n        );\n\n        void trigger_user_event (\n            void* p,\n            int i\n        );\n\n        void wait_until_closed (\n        ) const;\n\n        void set_im_pos (\n            long x_,\n            long y_\n        );\n\n        enum on_close_return_code\n        {\n            DO_NOT_CLOSE_WINDOW,\n            CLOSE_WINDOW\n        };\n\n        enum mouse_state_masks\n        {\n            NONE = 0,\n            LEFT = 1,\n            RIGHT = 2,\n            MIDDLE = 4,\n            SHIFT = 8,\n            CONTROL = 16\n        };\n\n        enum keyboard_state_masks\n        {\n            KBD_MOD_NONE = 0,\n            KBD_MOD_SHIFT = 1,\n            KBD_MOD_CONTROL = 2,\n            KBD_MOD_ALT = 4,\n            KBD_MOD_META = 8,\n            KBD_MOD_CAPS_LOCK = 16,\n            KBD_MOD_NUM_LOCK = 32,\n            KBD_MOD_SCROLL_LOCK = 64\n        };\n\n        enum non_printable_keyboard_keys\n        {\n            KEY_BACKSPACE,\n            KEY_SHIFT,\n            KEY_CTRL,\n            KEY_ALT,\n            KEY_PAUSE,\n            KEY_CAPS_LOCK,\n            KEY_ESC,\n            KEY_PAGE_UP,\n            KEY_PAGE_DOWN,\n            KEY_END,\n            KEY_HOME,\n            KEY_LEFT,           // This is the left arrow key\n            KEY_RIGHT,          // This is the right arrow key\n            KEY_UP,             // This is the up arrow key\n            KEY_DOWN,           // This is the down arrow key\n            KEY_INSERT,\n            KEY_DELETE,\n            KEY_SCROLL_LOCK,\n  \n            // Function Keys\n            KEY_F1,\n            KEY_F2,\n            KEY_F3,\n            KEY_F4,\n            KEY_F5,\n            KEY_F6,\n            KEY_F7,\n            KEY_F8,\n            KEY_F9,\n            KEY_F10,\n            KEY_F11,\n            KEY_F12\n        };\n\n    protected:\n\n        virtual on_close_return_code on_window_close(\n        ){return CLOSE_WINDOW;}\n\n        virtual void on_user_event (\n            void* ,\n            int \n        ){}\n\n        virtual void on_window_resized(\n        ){}\n        \n        virtual void on_window_moved(\n        ){}\n\n        virtual void on_mouse_down (\n            unsigned long ,\n            unsigned long ,\n            long ,\n            long ,\n            bool \n        ){}\n\n        virtual void on_mouse_up (\n            unsigned long ,\n            unsigned long ,\n            long ,\n            long \n        ){}\n\n        virtual void on_mouse_move (\n            unsigned long ,\n            long ,\n            long \n        ){}\n\n        virtual void on_mouse_leave (\n        ){}\n\n        virtual void on_mouse_enter (\n        ){}\n\n        virtual void on_wheel_up (\n            unsigned long \n        ){}\n\n        virtual void on_wheel_down (\n            unsigned long \n        ){}\n\n        virtual void on_focus_gained (\n        ){}\n\n        virtual void on_focus_lost (\n        ){}\n\n        virtual void on_keydown (\n            unsigned long ,          \n            bool ,\n            unsigned long \n        ){}\n            \n        virtual void on_string_put (\n            const std::wstring&\n        ){}\n\n    private:\n\n        virtual void paint (\n            const canvas& \n        ) =0;\n\n        base_window(base_window&);        // copy constructor\n        base_window& operator=(base_window&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#ifdef NO_MAKEFILE\n#include \"gui_core_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_GUI_CORE_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_core/gui_core_kernel_2.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GUI_CORE_KERNEL_2_CPp_\n#define DLIB_GUI_CORE_KERNEL_2_CPp_\n#include \"../platform.h\"\n\n#ifdef POSIX\n\n#include \"gui_core_kernel_2.h\"\n\n\n#include <X11/Xlib.h>\n#include <X11/Xutil.h>\n#include <X11/keysym.h>\n#include <X11/Xlocale.h>\n#include <X11/XKBlib.h>\n#include <poll.h>\n#include <iostream>\n#include \"../assert.h\"\n#include \"../queue.h\"\n#include <cstring>\n#include <cmath>\n#include <X11/Xatom.h>\n#include \"../sync_extension.h\"\n#include \"../logger.h\"\n#include <vector>\n#include <set>\n#include \"../smart_pointers_thread_safe.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace gui_core_kernel_2_globals\n    {\n        void init_keyboard_mod_masks();\n        struct user_event_type\n        {\n            Window w;\n            void* p;\n            int i;\n        };\n\n        typedef sync_extension<queue<user_event_type,memory_manager<char>::kernel_1b>::kernel_2a_c>::kernel_1a queue_of_user_events;\n\n        typedef sync_extension<binary_search_tree<Window,base_window*>::kernel_1a>::kernel_1a \n            window_table_type;\n\n    // ----------------------------------------------------------------------------------------\n\n        const shared_ptr_thread_safe<dlib::mutex>& global_mutex()\n        {\n            static shared_ptr_thread_safe<dlib::mutex> m(new dlib::mutex);\n            return m;\n        }\n\n        class event_handler_thread : public threaded_object\n        {\n        public:\n\n            enum et_state\n            {\n                uninitialized,\n                initialized,\n                failure_to_init \n            };\n\n            et_state status;\n            logger dlog;\n\n\n            int depth;\n            Display* disp;\n            XIM xim;\n            XIMStyle xim_style;\n            Screen* screen;\n\n            Atom delete_window; \n            Window exit_window;\n            std::wstring clipboard;\n\n            int alt_mask;\n            int meta_mask;\n            int num_lock_mask;\n            int scroll_lock_mask;\n\n            // the mutex in this object is the global mutex used to protect everything\n            // in the gui_core and gui_widgets components.\n            window_table_type window_table;\n\n            rsignaler window_close_signaler;\n            rsignaler et_signaler;\n\n            queue_of_user_events user_events;\n            queue_of_user_events user_events_temp;\n\n            shared_ptr_thread_safe<dlib::mutex> reference_to_global_mutex;\n\n            event_handler_thread(\n            ) :\n                dlog(\"dlib.gui_core\"),\n                depth(0),\n                disp(0),\n                xim(0),\n                screen(0),\n                alt_mask(0),\n                meta_mask(0),\n                num_lock_mask(0),\n                scroll_lock_mask(0),\n                window_close_signaler(window_table.get_mutex()),\n                et_signaler(window_table.get_mutex()),\n                reference_to_global_mutex(global_mutex())\n            {\n                auto_mutex M(window_table.get_mutex());\n\n                status = uninitialized;\n\n                // start up the event handler thread\n                start();\n\n                // wait for the event thread to get up and running\n                while (status == uninitialized)\n                    et_signaler.wait();\n\n                if (status == failure_to_init)\n                    throw gui_error(\"Failed to initialize X11 resources\");\n\n                init_keyboard_mod_masks();\n            }\n\n            ~event_handler_thread ()\n            {\n                \n                if (is_alive())\n                {\n                    \n                    if (status != failure_to_init)\n                    {\n                        XConfigureEvent event;\n                        event.type = ConfigureNotify;\n                        event.send_event = True;\n                        event.display = disp;\n                        event.window = exit_window;\n                        event.x = 1;\n                        XFlush(disp);\n                        XPutBackEvent(disp,reinterpret_cast<XEvent*>(&event));\n                        XFlush(disp);\n\n                        // This should cause XNextEvent() to unblock so that it will see \n                        // this ConfigureNotify event we are putting onto the event queue.\n                        XSendEvent(disp,exit_window,False,0,reinterpret_cast<XEvent*>(&event));\n                        XFlush(disp);\n\n                        wait();\n\n                        if (xim != NULL)\n                        {\n                            XCloseIM(xim);\n                        }\n\n                        XCloseDisplay(disp);\n\n\n                    }\n                    else\n                    {\n\n                        wait();\n                    }\n                }\n\n\n            }\n\n        private:\n\n            void thread (\n            )\n            {\n                using namespace std;\n                using namespace dlib;\n                try\n                {\n\n                    // You are supposed to call this if using XLib in a threaded program.  Note\n                    // however that at one point I noticed that calling this causes a dead-lock \n                    // when using XIM.  But I can't reproduce that anymore and not calling it \n                    // sometimes causes XCloseDisplay() to hang.\n                    if (XInitThreads() == 0)\n                    {\n                        dlog << LFATAL << \"Unable to initialize threading support.\";\n                        // signal that an error has occurred\n                        window_table.get_mutex().lock();\n                        status = failure_to_init;\n                        et_signaler.broadcast();\n                        window_table.get_mutex().unlock();\n                        return;\n                    }\n\n                    window_table.get_mutex().lock();\n                    disp = XOpenDisplay(NULL);\n                    window_table.get_mutex().unlock();\n                    if (disp == 0)\n                    {\n                        window_table.get_mutex().lock();\n                        disp = XOpenDisplay(\":0.0\");\n                        window_table.get_mutex().unlock();\n                        if (disp == 0)\n                        {\n                            dlog << LFATAL << \"Unable to connect to the X display.\";\n                            // signal that an error has occurred\n                            window_table.get_mutex().lock();\n                            status = failure_to_init;\n                            et_signaler.broadcast();\n                            window_table.get_mutex().unlock();\n                            return;\n                        }\n                    }\n\n                    window_table.get_mutex().lock();\n                    screen = DefaultScreenOfDisplay(disp);\n                    depth = DefaultDepthOfScreen(screen);\n                    delete_window = XInternAtom(disp,\"WM_DELETE_WINDOW\",1); \n                    window_table.get_mutex().unlock();\n\n                    xim = NULL;\n                    // I'm disabling XIM usage all together because calling XSetICValues()\n                    // in set_im_pos() randomly hangs the application (on Ubuntu 13.10 at\n                    // least).    \n                    /*\n                    window_table.get_mutex().lock();\n                    std::string saved_locale(setlocale (LC_CTYPE, NULL));\n                    if (setlocale( LC_CTYPE, \"\" ) && XSupportsLocale() && XSetLocaleModifiers(\"\"))\n                        xim = XOpenIM(disp, NULL, NULL, NULL);\n                    else\n                        setlocale( LC_CTYPE, saved_locale.c_str() );\n                    window_table.get_mutex().unlock();\n                    */\n                    if (xim)\n                    {\n                        const static XIMStyle preedit_styles[] =\n                            {XIMPreeditPosition, XIMPreeditNothing, XIMPreeditNone, 0};\n                        const static XIMStyle status_styles[] =\n                            {XIMStatusNothing, XIMStatusNone, 0};\n                        xim_style = 0;\n\n                        XIMStyles *xim_styles;\n                        window_table.get_mutex().lock();\n\n                        XGetIMValues (xim, XNQueryInputStyle, &xim_styles, (const void*)NULL);\n                        window_table.get_mutex().unlock();\n                        std::set<XIMStyle> xims;\n                        for (int i = 0; i < xim_styles->count_styles; ++i){\n                            xims.insert(xim_styles->supported_styles[i]);\n                        }\n                        for (int j = 0; status_styles[j]; ++j){\n                            for (int i = 0; preedit_styles[i]; ++i){\n                                xim_style = (status_styles[j] | preedit_styles[i]);\n                                if (xims.count(xim_style)) break;\n                            }\n                            if (xim_style) break;\n                        }\n                        XFree(xim_styles);\n                    }\n\n                    // make this window just so we can send messages to it and trigger\n                    // events in the event thread\n                    XSetWindowAttributes attr;\n                    window_table.get_mutex().lock();\n                    exit_window = XCreateWindow(\n                        disp,\n                        DefaultRootWindow(disp),\n                        0,\n                        0,\n                        10,  // this is the default width of a window\n                        10,  // this is the default width of a window\n                        0,\n                        depth,\n                        InputOutput,\n                        CopyFromParent,\n                        0,\n                        &attr\n                    );\n                    window_table.get_mutex().unlock();\n\n                    // signal that the event thread is now up and running\n                    window_table.get_mutex().lock();\n                    status = initialized;\n                    et_signaler.broadcast();\n                    window_table.get_mutex().unlock();\n\n                    // start the event handler\n                    event_handler();\n                }\n                catch (std::exception& e)\n                {\n                    cout << \"\\nEXCEPTION THROWN: \\n\" << e.what() << endl;\n                    abort();\n                }\n                catch (...)\n                {\n                    cout << \"UNKNOWN EXCEPTION THROWN.\\n\" << endl;\n                    abort();\n                }\n            }\n\n            void event_handler();\n            void init_keyboard_mod_masks();\n        };\n\n        struct x11_base_windowstuff\n        {\n            Window hwnd;\n            Time last_click_time;\n            XIC xic;\n            XFontSet fs;\n            shared_ptr_thread_safe<event_handler_thread> globals;\n        };\n\n        // Do all this just to make sure global_mutex() is initialized at program start\n        // and thus hopefully before any threads have the chance to startup and call\n        // global_data() concurrently.\n        struct call_global_mutex { call_global_mutex() { global_mutex(); } };\n        static call_global_mutex call_global_mutex_instance;\n\n        const shared_ptr_thread_safe<event_handler_thread>& global_data()\n        {\n            auto_mutex M(*global_mutex());\n            static shared_ptr_thread_safe<event_handler_thread> p;\n            if (p.get() == 0)\n                p.reset(new event_handler_thread());\n            return p;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        Bool XCheckIfEventPredicate (\n            Display* ,\n            XEvent* event,\n            XPointer arg\n        )\n        /*!\n            ensures\n                - if (event is an Expose event for the window pointed to by arg) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n        {\n            if (event->type == Expose)\n            {\n                XExposeEvent* e = reinterpret_cast<XExposeEvent*>(event);\n                Window* win= reinterpret_cast<Window*>(arg);\n                if (e->window == *win)\n                {\n                    return 1;\n                }\n            }\n            return 0;\n        }\n\n    // ----------------------------------------------------------------------------------------\n    \n        static bool map_keys (\n            KeySym keycode,\n            bool ,\n            bool ,\n            unsigned long& result,\n            bool& is_printable\n        )\n        /*!\n            requires\n                - if (shift was down for this key) then\n                    - shift == true\n                - if (caps lock was on for this key) then\n                    - caps == true\n                - keycode == the keycode from windows that we are to process\n                - keycode < keyboard_keys_size\n            ensures\n                - if (this key should be ignored) then\n                    - returns false\n                - else\n                    - returns true\n                    - #is_printable == true if result is a printable ascii character\n                    - #result == the keycode converted into the proper number to tbe \n                      returned by the event handler.\n        !*/\n        {\n            is_printable = true;\n            if ((keycode <= 'z' && keycode >= 'a') || \n                (keycode <= 'Z' && keycode >= 'A') || \n                (keycode <= '9' && keycode >= '0'))\n            {\n                result = keycode;\n            }\n            else\n            {\n                is_printable = false;\n                switch (keycode)\n                {\n                case XK_Home:   result = base_window::KEY_HOME; break;\n                case XK_Left:   result = base_window::KEY_LEFT; break;\n                case XK_Right:  result = base_window::KEY_RIGHT; break;\n                case XK_Down:   result = base_window::KEY_DOWN; break;\n                case XK_Up:     result = base_window::KEY_UP; break;\n                case XK_Prior:  result = base_window::KEY_PAGE_UP; break;\n                case XK_Next:   result = base_window::KEY_PAGE_DOWN;     break;\n                case XK_End:    result = base_window::KEY_END; break;\n                case XK_Escape:    result = base_window::KEY_ESC; break;\n                \n                case XK_KP_Delete:    result = base_window::KEY_DELETE; break;\n                case XK_KP_Prior:    result = base_window::KEY_PAGE_UP; break;\n                case XK_KP_Next:    result = base_window::KEY_PAGE_DOWN; break;\n\n\n                case XK_F1:    result = base_window::KEY_F1; break;\n                case XK_F2:    result = base_window::KEY_F2; break;\n                case XK_F3:    result = base_window::KEY_F3; break;\n                case XK_F4:    result = base_window::KEY_F4; break;\n                case XK_F5:    result = base_window::KEY_F5; break;\n                case XK_F6:    result = base_window::KEY_F6; break;\n                case XK_F7:    result = base_window::KEY_F7; break;\n                case XK_F8:    result = base_window::KEY_F8; break;\n                case XK_F9:    result = base_window::KEY_F9; break;\n                case XK_F10:    result = base_window::KEY_F10; break;\n                case XK_F11:    result = base_window::KEY_F11; break;\n                case XK_F12:    result = base_window::KEY_F12; break;\n                    \n                    \n                case XK_Shift_L:    result = base_window::KEY_SHIFT; break;\n                case XK_Shift_R:    result = base_window::KEY_SHIFT; break;\n                case XK_Control_L:    result = base_window::KEY_CTRL; break;\n                case XK_Control_R:    result = base_window::KEY_CTRL; break;\n                case XK_Caps_Lock:    result = base_window::KEY_CAPS_LOCK; break;\n                case XK_Alt_L:    result = base_window::KEY_ALT; break;\n                case XK_Alt_R:    result = base_window::KEY_ALT; break;\n\n                    \n                case XK_BackSpace:    result = base_window::KEY_BACKSPACE; break;\n                case XK_Delete:    result = base_window::KEY_DELETE; break;\n                case XK_Scroll_Lock:    result = base_window::KEY_SCROLL_LOCK; break;\n                case XK_Pause:    result = base_window::KEY_PAUSE; break;\n                case XK_Insert:    result = base_window::KEY_INSERT; break;\n                case XK_KP_Insert:    result = base_window::KEY_INSERT; break;\n\n\n\n\n                case XK_exclam:    \n                    is_printable = true;\n                    result = '!'; break;\n                case XK_quotedbl:    \n                    is_printable = true;\n                    result = '\"'; break;\n                case XK_numbersign:    \n                    is_printable = true;\n                    result = '#'; break;\n                case XK_dollar:    \n                    is_printable = true;\n                    result = '$'; break;\n                case XK_percent:    \n                    is_printable = true;\n                    result = '%'; break;\n                case XK_ampersand:    \n                    is_printable = true;\n                    result = '&'; break;\n                case XK_apostrophe:    \n                    is_printable = true;\n                    result = '\\''; break;\n                case XK_parenleft:    \n                    is_printable = true;\n                    result = '('; break;\n                case XK_parenright:    \n                    is_printable = true;\n                    result = ')'; break;\n                case XK_asterisk:    \n                    is_printable = true;\n                    result = '*'; break;\n                case XK_plus:    \n                    is_printable = true;\n                    result = '+'; break;\n                case XK_comma:    \n                    is_printable = true;\n                    result = ','; break;\n                case XK_minus:    \n                    is_printable = true;\n                    result = '-'; break;\n                case XK_period:    \n                    is_printable = true;\n                    result = '.'; break;\n                case XK_slash:    \n                    is_printable = true;\n                    result = '/'; break;\n                case XK_colon:    \n                    is_printable = true;\n                    result = ':'; break;\n                case XK_semicolon:    \n                    is_printable = true;\n                    result = ';'; break;\n                case XK_less:    \n                    is_printable = true;\n                    result = '<'; break;\n                case XK_equal:    \n                    is_printable = true;\n                    result = '='; break;\n                case XK_greater:    \n                    is_printable = true;\n                    result = '>'; break;\n                case XK_question:    \n                    is_printable = true;\n                    result = '?'; break;\n                case XK_at:    \n                    is_printable = true;\n                    result = '@'; break;\n                case XK_grave:    \n                    is_printable = true;\n                    result = '`'; break;\n                case XK_underscore:    \n                    is_printable = true;\n                    result = '_'; break;\n                case XK_asciicircum:    \n                    is_printable = true;\n                    result = '^'; break;\n                case XK_bracketleft:    \n                    is_printable = true;\n                    result = '['; break;\n                case XK_backslash:    \n                    is_printable = true;\n                    result = '\\\\'; break;\n                case XK_bracketright:    \n                    is_printable = true;\n                    result = ']'; break;\n                case XK_asciitilde:    \n                    is_printable = true;\n                    result = '~'; break;\n                case XK_braceleft:    \n                    is_printable = true;\n                    result = '{'; break;\n                case XK_bar:    \n                    is_printable = true;\n                    result = '|'; break;\n                case XK_braceright:    \n                    is_printable = true;\n                    result = '}'; break;\n            \n\n\n\n                case XK_space:    \n                    is_printable = true;\n                    result = ' '; break;\n                case XK_Return:    \n                    is_printable = true;\n                    result = '\\n'; break;\n                case XK_Tab:    \n                    is_printable = true;\n                    result = '\\t'; break;\n                case XK_KP_Divide: \n                    is_printable = true;\n                    result = '/'; break;\n                case XK_KP_Decimal: \n                    is_printable = true;\n                    result = '.'; break;\n                case XK_KP_Subtract: \n                    is_printable = true;\n                    result = '-'; break;\n                case XK_KP_Add: \n                    is_printable = true;\n                    result = '+'; break;\n                case XK_KP_Multiply: \n                    is_printable = true;\n                    result = '*'; break;\n                case XK_KP_Equal: \n                    is_printable = true;\n                    result = '='; break;\n\n                case XK_KP_0: \n                    is_printable = true;\n                    result = '0'; break;\n                case XK_KP_1: \n                    is_printable = true;\n                    result = '1'; break;\n                case XK_KP_2: \n                    is_printable = true;\n                    result = '2'; break;\n                case XK_KP_3: \n                    is_printable = true;\n                    result = '3'; break;\n                case XK_KP_4: \n                    is_printable = true;\n                    result = '4'; break;\n                case XK_KP_5: \n                    is_printable = true;\n                    result = '5'; break;\n                case XK_KP_6: \n                    is_printable = true;\n                    result = '6'; break;\n                case XK_KP_7: \n                    is_printable = true;\n                    result = '7'; break;\n                case XK_KP_8: \n                    is_printable = true;\n                    result = '8'; break;\n                case XK_KP_9: \n                    is_printable = true;\n                    result = '9'; break;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        void event_handler_thread::\n        event_handler (\n        )\n        /*!\n            ensures\n                - will handle all events and event dispatching            \n        !*/\n        {       \n            try\n            {\n                std::vector<unsigned char> bitmap_buffer;\n                bool quit_event_loop = false;\n                while (quit_event_loop == false)\n                {\n                    // get a lock on the window_table's mutex\n                    auto_mutex window_table_locker(window_table.get_mutex());\n\n                    XEvent ev;                \n                    memset(&ev, 0, sizeof(ev));\n                    while (XPending(disp) == 0){\n                        window_table.get_mutex().unlock();\n                        // wait until receiving X11 next event\n                        struct pollfd pfd;\n                        pfd.fd = ConnectionNumber(disp);\n                        pfd.events = POLLIN | POLLPRI;\n                        poll(&pfd, 1, -1);  \n                        \n                        window_table.get_mutex().lock();\n                    }\n                    XNextEvent(disp,&ev);\n\n                    // pass events to input method.\n                    // if this event is needed by input method, XFilterEvent returns True\n                    if (XFilterEvent(&ev, None) == True){\n                        continue;\n                    }\n\n                    // if this event is for one of the windows in the window_table\n                    // then get that window out of the table and put it into win.\n                    XAnyEvent* _ae = reinterpret_cast<XAnyEvent*>(&ev);\n                    base_window** win_ = window_table[_ae->window];\n                    base_window* win = 0;\n                    if (win_)\n                        win = *win_;\n\n\n                    // ignore messages for unmapped windows\n                    if (ev.type != MapNotify && win != 0) \n                    {\n                        if (win->is_mapped == false)\n                           continue;\n                    }\n\n\n                    switch (ev.type)\n                    {\n\n                    case SelectionRequest:\n                        {\n                            Atom a_ct = XInternAtom(disp, \"COMPOUND_TEXT\", False);\n                            XSelectionRequestEvent* req = reinterpret_cast<XSelectionRequestEvent*>(&ev.xselectionrequest);\n                            XEvent respond;\n\n                            if (req->target == XA_STRING)\n                            {\n                                XChangeProperty (disp,\n                                                 req->requestor,\n                                                 req->property,\n                                                 XA_STRING,\n                                                 8,\n                                                 PropModeReplace,\n                                                 reinterpret_cast<const unsigned char*>(convert_wstring_to_mbstring(clipboard).c_str()),\n                                                 clipboard.size()+1);\n                                respond.xselection.property=req->property;\n                            }\n                            else if (req->target == a_ct)\n                            {\n                                XChangeProperty (disp,\n                                                 req->requestor,\n                                                 req->property,\n                                                 a_ct,\n                                                 sizeof(wchar_t)*8,\n                                                 PropModeReplace,\n                                                 reinterpret_cast<const unsigned char*>(clipboard.c_str()),\n                                                 clipboard.size()+1);\n                                respond.xselection.property=req->property;\n                            }\n                            else \n                            {\n                                respond.xselection.property= None;\n                            }\n                            respond.xselection.type= SelectionNotify;\n                            respond.xselection.display= req->display;\n                            respond.xselection.requestor= req->requestor;\n                            respond.xselection.selection=req->selection;\n                            respond.xselection.target= req->target;\n                            respond.xselection.time = req->time;\n                            XSendEvent (disp, req->requestor,0,0,&respond);\n                            XFlush (disp);\n\n                        } break;\n\n                    case MapNotify:\n                        {\n                            if (win == 0)\n                                break;\n\n                            win->is_mapped = true;\n\n                            if (win->resizable == false)\n                            {\n                                XSizeHints* hints = XAllocSizeHints();\n                                hints->flags = PMinSize|PMaxSize;\n                                hints->min_width = win->width;\n                                hints->max_width = win->width;\n                                hints->max_height = win->height; \n                                hints->min_height = win->height; \n                                XSetNormalHints(disp,win->x11_stuff.hwnd,hints);\n                                XFree(hints);\n                            }\n\n\n\n                            if (win->has_been_resized)\n                            {\n                                XResizeWindow(disp,win->x11_stuff.hwnd,win->width,win->height);\n                                win->has_been_resized = false;\n                                win->on_window_resized();\n                            }\n\n                            if (win->has_been_moved)\n                            {\n                                XMoveWindow(disp,win->x11_stuff.hwnd,win->x,win->y);\n                                win->has_been_moved = false;\n                                win->on_window_moved();\n                            }\n                            XFlush(disp);\n\n\n                        } break;\n\n\n                    case KeyPress:\n                        {\n                            XKeyPressedEvent* e = reinterpret_cast<XKeyPressedEvent*>(&ev);\n\n                            if (win == 0)\n                                break;\n\n                            unsigned long state = 0;\n                            bool shift = ((e->state & ShiftMask)!=0);\n                            bool ctrl = ((e->state & ControlMask)!=0);\n                            bool caps = ((e->state & LockMask)!=0);\n                            if(shift)\n                                state |= base_window::KBD_MOD_SHIFT;\n                            if(ctrl)\n                                state |= base_window::KBD_MOD_CONTROL;\n                            if(caps)\n                                state |= base_window::KBD_MOD_CAPS_LOCK;\n                            if((e->state & alt_mask)!=0)\n                                state |= base_window::KBD_MOD_ALT;\n                            if((e->state & meta_mask)!=0)\n                                state |= base_window::KBD_MOD_META;\n                            if((e->state & num_lock_mask)!=0)\n                                state |= base_window::KBD_MOD_NUM_LOCK;\n                            if((e->state & scroll_lock_mask)!=0)\n                                state |= base_window::KBD_MOD_SCROLL_LOCK;\n\n                            KeySym key;\n                            Status status;\n\n                            if (win->x11_stuff.xic) {\n                                std::wstring wstr;\n                                wstr.resize(2);\n                                int len = XwcLookupString(win->x11_stuff.xic,e,&wstr[0],wstr.size(),&key,&status);\n                                if (status == XBufferOverflow){\n                                    wstr.resize(len);\n                                    len = XwcLookupString(win->x11_stuff.xic,e,&wstr[0],wstr.size(),&key,&status);\n                                }\n                                if (status == XLookupChars){\n                                    win->on_string_put(wstr);\n                                }\n                            } else {\n                                char buffer[2];\n                                XLookupString(e, buffer, sizeof(buffer), &key, NULL);\n                                status = XLookupKeySym;\n                            }\n\n                            if (status == XLookupKeySym || status == XLookupBoth){\n\n                                bool is_printable;\n                                unsigned long result;\n\n                                if (map_keys(key,shift,caps,result,is_printable))\n                                {\n                                    // signal the keyboard event\n                                    win->on_keydown(result,is_printable,state);\n                                }\n                            }\n                            \n                        } break;\n\n                    case FocusIn:\n                        {\n                            if (win == 0)\n                                break;\n\n                            // signal the focus event \n                            win->on_focus_gained();\n                        } break;\n\n                    case FocusOut:\n                        {\n                            if (win == 0)\n                                break;\n\n                            // signal the focus event \n                            win->on_focus_lost();\n                        } break;\n\n                    case ButtonPress:\n                    case ButtonRelease:\n                        {\n                            XButtonEvent* e = reinterpret_cast<XButtonEvent*>(&ev);\n\n                            if (win == 0)\n                                break;\n\n                            unsigned long btn = base_window::NONE;\n                            if (e->button == Button1)\n                                btn = base_window::LEFT;\n                            else if (e->button == Button3)\n                                btn = base_window::RIGHT;\n                            else if (e->button == Button2)\n                                btn = base_window::MIDDLE;\n\n                            unsigned long state = 0;\n                            if (e->state & ControlMask)\n                                state |= base_window::CONTROL;\n                            if (e->state & Button1Mask)\n                                state |= base_window::LEFT;\n                            if (e->state & Button2Mask)\n                                state |= base_window::MIDDLE;\n                            if (e->state & Button3Mask)\n                                state |= base_window::RIGHT;\n                            if (e->state & ShiftMask)\n                                state |= base_window::SHIFT;\n\n                            // only send the event if this is a button we support\n                            if (btn != (unsigned long)base_window::NONE)\n                            {\n\n\n                                if (ev.type == ButtonPress)\n                                {\n                                    bool is_double_click = false;\n                                    if (win->last_click_button == btn &&\n                                        std::abs((long)win->last_click_x - (long)e->x) < 5 &&\n                                        std::abs((long)win->last_click_y - (long)e->y) < 5 &&\n                                        e->time - win->x11_stuff.last_click_time <= 400)\n                                    {\n                                        // this is a double click\n                                        is_double_click = true;\n                                        // set this to make sure the next click can't be\n                                        // interpreted as a double click\n                                        win->last_click_button = base_window::NONE;\n                                    }\n                                    else\n                                    {\n                                        win->last_click_button = btn;\n                                        win->last_click_x = e->x;\n                                        win->last_click_y = e->y;\n                                        win->x11_stuff.last_click_time = e->time;\n                                    }\n\n                                    // remove the clicked button from the state\n                                    state &= (~btn);\n                                    win->on_mouse_down(btn,state,e->x,e->y,is_double_click);\n\n                                }\n                                else\n                                {\n                                    // remove the clicked button from the state\n                                    state &= (~btn);\n                                    win->on_mouse_up(btn,state,e->x,e->y);\n                                }\n                            }\n                            else if (e->button == Button4 && ev.type == ButtonPress)\n                            {\n                                win->on_wheel_up(state);\n                            }\n                            else if (e->button == Button5 && ev.type == ButtonPress)\n                            {\n                                win->on_wheel_down(state);\n                            }\n                            \n                        } break;\n \n                    case LeaveNotify:\n                        {\n                            if (win == 0)\n                                break;\n\n                            win->on_mouse_leave();\n                            \n                        } break;\n\n                    case EnterNotify:\n                        {\n                            if (win == 0)\n                                break;\n\n                            win->on_mouse_enter();\n                        } break;\n\n                    case MotionNotify:\n                        {\n                            XMotionEvent* e = reinterpret_cast<XMotionEvent*>(&ev);\n\n                            if (win == 0)\n                                break;\n\n                            unsigned long state = 0;\n                            if (e->state & ControlMask)\n                                state |= base_window::CONTROL;\n                            if (e->state & Button1Mask)\n                                state |= base_window::LEFT;\n                            if (e->state & Button2Mask)\n                                state |= base_window::MIDDLE;\n                            if (e->state & Button3Mask)\n                                state |= base_window::RIGHT;\n                            if (e->state & ShiftMask)\n                                state |= base_window::SHIFT;\n\n                            win->on_mouse_move(state,e->x,e->y);\n                            \n                        } break;\n\n                    case ConfigureNotify:\n                        {\n                            XConfigureEvent* e = reinterpret_cast<XConfigureEvent*>(&ev);\n                            if (e->window == exit_window)\n                            {\n                                // this is the signal to quit the event handler\n                                quit_event_loop = true;\n                                break;\n                            }\n\n                            if (win == 0)\n                                break;\n\n                            if (win->width != e->width ||\n                                win->height != e->height ||\n                                win->has_been_resized)\n                            {\n                                win->has_been_resized = false;\n                                // this is a resize\n                                win->width = e->width;\n                                win->height = e->height;\n                                win->on_window_resized();\n                            }\n                            if (win->x != e->x ||\n                                win->y != e->y ||\n                                win->has_been_moved)\n                            {\n                                win->has_been_moved = false;\n                                // this is a move\n                                win->x = e->x;\n                                win->y = e->y;\n                                win->on_window_moved();\n                            }\n                            \n                        } break;\n\n                    case ClientMessage:\n                        {\n                            XClientMessageEvent* e = reinterpret_cast<XClientMessageEvent*>(&ev);\n                            if ((Atom)e->data.l[0] == delete_window)\n                            {\n                                if (win == 0)\n                                    break;\n\n\n                                if (win->on_window_close() == base_window::DO_NOT_CLOSE_WINDOW)\n                                {\n                                    DLIB_ASSERT(win->has_been_destroyed == false,\n                                        \"\\tYou called close_window() inside the on_window_close() event but\" \n                                        << \"\\n\\tthen returned DO_NOT_CLOSE_WINDOW.  You can do one or the other but not both.\"\n                                        << \"\\n\\tthis:     \" << win \n                                        );\n                                    // the client has decided not to close the window\n                                    // after all\n                                }\n                                else\n                                {                                \n                                    if (window_table[e->window])\n                                    {\n                                        window_table.destroy(e->window);\n                                        XDestroyWindow(disp,e->window);\n                                        win->has_been_destroyed = true;\n                                        window_close_signaler.broadcast();\n                                    }\n                                    else\n                                    {\n                                        // in this case the window must have self destructed by\n                                        // calling delete this;  so we don't have to do anything.\n                                    }\n                                }\n                            }\n                        } break;\n\n                    case Expose:\n                        {\n                            XExposeEvent* e = reinterpret_cast<XExposeEvent*>(&ev);\n\n                            if (win == 0)\n                                break;\n\n                            // take all the expose events for this window out\n                            XEvent etemp;\n                            int x = e->x;\n                            int y = e->y;\n                            int width = e->width;\n                            int height = e->height;  \n\n\n\n                            // What we are doing here with this loop is we are combining\n                            // all of the Expose events for this window that are \n                            // currently in the queue.  \n                            while (XCheckIfEvent(disp,&etemp,XCheckIfEventPredicate,reinterpret_cast<XPointer>(&(e->window))))\n                            {\n                                XExposeEvent* e2 = reinterpret_cast<XExposeEvent*>(&etemp);\n                                if (e2->x < x)\n                                {\n                                    width += x - e2->x;\n                                    x = e2->x;                                \n                                }\n                                if (e2->y < y)\n                                {\n                                    height += y - e2->y;\n                                    y = e2->y;\n                                }\n                                if (e2->width + e2->x > width + x)\n                                {\n                                    width = e2->width + e2->x - x;\n                                }\n                                if (e2->height + e2->y > height + y)\n                                {\n                                    height = e2->height + e2->y - y;\n                                }                                \n                            }\n\n                            // I'm not sure if this sort of thing can happen but\n                            // if it does then just ignore this entire event.\n                            if (width == 0 || height == 0)\n                            {\n                                break;\n                            }\n\n                            if (bitmap_buffer.size() < static_cast<unsigned long>(width*height*4))\n                                bitmap_buffer.resize(width*height*4);\n\n                            unsigned char* const bitmap = &bitmap_buffer[0];\n                            unsigned char* const end = bitmap + width*height*4;\n\n                            unsigned char* temp;\n                            canvas c(bitmap,x,y,x+width-1,y+height-1);\n\n\n                            win->paint(c);\n\n                            // the user might have called win->close_window() and if they did\n                            // then just stop right here.  We don't want to paint the window.\n                            if (win->has_been_destroyed)\n                                break;\n\n                            // if the color depth we are working with isn't 24bits then we need\n                            // to transform our image into whatever it is supposed to be.\n                            if (depth != 24)\n                            {\n                                // convert this image into an 8 bit image\n                                unsigned int red_bits = 0;\n                                unsigned int green_bits = 0;\n                                unsigned int blue_bits = 0;\n                                if (depth != 16)\n                                {\n                                    unsigned int bits = depth/3;\n                                    unsigned int extra = depth%3;\n                                    red_bits = bits;\n                                    green_bits = bits;\n                                    blue_bits = bits;\n                                    if (extra)\n                                    {\n                                        ++red_bits;\n                                        --extra;\n                                    }\n                                    if (extra)\n                                    {\n                                        ++green_bits;\n                                    }\n                                }\n                                else if (depth == 16)\n                                {\n                                    red_bits = 5;\n                                    green_bits = 6;\n                                    blue_bits = 5;\n                                }\n\n                                if (depth == 16) \n                                { \n                                    temp = bitmap;\n                                    unsigned char *red, *green, *blue;\n                                    while (temp != end)\n                                    {\n                                        blue = temp;\n                                        ++temp;\n                                        green = temp;\n                                        ++temp;\n                                        red = temp;\n                                        ++temp;\n                                        ++temp;\n\n                                        const unsigned long r = static_cast<unsigned long>(*red)>>(8-red_bits);\n                                        const unsigned long g = static_cast<unsigned long>(*green)>>(8-green_bits);\n                                        const unsigned long b = static_cast<unsigned long>(*blue)>>(8-blue_bits);\n\n                                        unsigned long color = (r<<(depth-red_bits))| (g<<(depth-red_bits-green_bits))| b;\n\n                                        *blue  = (color>>0)&0xFF;\n                                        *green = (color>>8)&0xFF;\n                                    }\n                                }\n                                else if (depth < 24)\n                                {\n                                    temp = bitmap;\n                                    unsigned char *red, *green, *blue;\n                                    while (temp != end)\n                                    {\n                                        blue = temp;\n                                        ++temp;\n                                        green = temp;\n                                        ++temp;\n                                        red = temp;\n                                        ++temp;\n                                        ++temp;\n\n                                        const unsigned long r = static_cast<unsigned long>(*red)>>(8-red_bits);\n                                        const unsigned long g = static_cast<unsigned long>(*green)>>(8-green_bits);\n                                        const unsigned long b = static_cast<unsigned long>(*blue)>>(8-blue_bits);\n\n                                        unsigned long color = (b<<(depth-blue_bits))| (g<<(depth-blue_bits-green_bits))| r;\n\n                                        *blue  = (color>>0)&0xFF;\n                                        *green = (color>>8)&0xFF;\n                                        *red   = (color>>16)&0xFF;\n                                    }\n                                }\n                                else if (depth > 24)\n                                {\n                                    temp = bitmap;\n                                    unsigned char *red, *green, *blue, *four;\n                                    while (temp != end)\n                                    {\n                                        blue = temp;\n                                        ++temp;\n                                        green = temp;\n                                        ++temp;\n                                        red = temp;\n                                        ++temp;\n                                        four = temp;\n                                        ++temp;\n\n                                        const unsigned long r = static_cast<unsigned long>(*red)<<(red_bits-8);\n                                        const unsigned long g = static_cast<unsigned long>(*green)<<(green_bits-8);\n                                        const unsigned long b = static_cast<unsigned long>(*blue)<<(blue_bits-8);\n\n                                        unsigned long color = (b<<(depth-blue_bits))| (g<<(depth-blue_bits-green_bits))| r;\n\n                                        *blue  = (color>>0)&0xFF;\n                                        *green = (color>>8)&0xFF;\n                                        *red   = (color>>16)&0xFF;\n                                        *four  = (color>>24)&0xFF;\n                                    }\n                                }\n                            } // if (depth != 24)\n\n\n\n                            XImage img;\n                            memset(&img,0,sizeof(img));\n                            img.width = width;\n                            img.height = height;\n                            img.depth = depth;\n                            img.data = reinterpret_cast<char*>(bitmap);\n                            img.bitmap_bit_order = LSBFirst;\n                            img.byte_order = LSBFirst;\n                            img.format = ZPixmap;\n                            img.bitmap_pad = 32;\n                            img.bitmap_unit = 32;\n                            img.bits_per_pixel = 32;\n\n\n                            XInitImage(&img);\n\n                            GC gc = XCreateGC(disp, e->window, 0, NULL);\n\n                            XPutImage(disp,e->window,gc,&img,0,0,x,y,width,height);\n\n                            XFreeGC(disp,gc);\n                        } break;\n                    } // switch (ev.type)\n                }\n            }\n            catch (std::exception& e)\n            {\n                dlog << LFATAL << \"Exception thrown in event handler: \" << e.what();\n            }\n            catch (...)\n            {\n                dlog << LFATAL << \"Unknown exception thrown in event handler.\";\n            }\n        }\n \n    // ----------------------------------------------------------------------------------------\n\n\n        int index_to_modmask(unsigned long n)\n        {\n            switch ( n )\n            {\n                case 0:\n                    return Mod1Mask;\n                case 1:\n                    return Mod2Mask;\n                case 2:\n                    return Mod3Mask;\n                case 3:\n                    return Mod4Mask;\n            }\n            return Mod5Mask;\n        }\n\n        void event_handler_thread::\n        init_keyboard_mod_masks()\n        {\n            XModifierKeymap* map = XGetModifierMapping( disp );\n            KeyCode* codes = map->modifiermap + map->max_keypermod * Mod1MapIndex;\n            for (int n = 0; n < 5 * map->max_keypermod; n++ )\n            {\n                if ( codes[n] == 0 )\n                    continue;\n                switch(XkbKeycodeToKeysym( disp, codes[n], 0, 0 ))\n                {\n                    case XK_Alt_L:\n                        alt_mask = index_to_modmask(n / map->max_keypermod);\n                        continue;\n                    case XK_Alt_R:\n                        if(alt_mask == 0)\n                            alt_mask = index_to_modmask(n / map->max_keypermod);\n                        continue;\n                    case XK_Meta_L:\n                    case XK_Meta_R:\n                        meta_mask = index_to_modmask(n / map->max_keypermod);\n                        continue;\n                    case XK_Scroll_Lock:\n                        scroll_lock_mask = index_to_modmask(n / map->max_keypermod);\n                        continue;\n                    case XK_Num_Lock:\n                        num_lock_mask = index_to_modmask(n / map->max_keypermod);\n                    default:\n                        continue;\n                }\n            }\n            XFreeModifiermap( map );\n            if ( alt_mask == 0 )\n            {\n                dlog << LWARN << \"Search for Alt-key faild.\";\n                if ( meta_mask != 0 )\n                    alt_mask = meta_mask;\n                else\n                    alt_mask = Mod1Mask; // resort to guessing\n            }\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n\n\n\n\n    } // namespace gui_core_kernel_2_globals\n\n// ----------------------------------------------------------------------------------------\n\n    void canvas::\n    fill (\n        unsigned char red_,\n        unsigned char green_,\n        unsigned char blue_\n    ) const\n    {\n        pixel pixel_value;\n        pixel_value.red = red_;\n        pixel_value.green = green_;\n        pixel_value.blue = blue_;\n        pixel_value._padding = 0;\n\n        pixel* start = reinterpret_cast<pixel*>(bits);\n        pixel* end = start + width_*height_;\n\n        while (start != end)\n        {\n            *start = pixel_value;\n            ++start;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void put_on_clipboard (\n        const std::string& str\n    )\n    {\n        put_on_clipboard(convert_mbstring_to_wstring(str));\n    }\n\n    void put_on_clipboard (\n        const dlib::ustring& str\n    )\n    {\n        put_on_clipboard(convert_utf32_to_wstring(str));\n    }\n\n    void put_on_clipboard (\n        const std::wstring& str\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n\n        shared_ptr_thread_safe<event_handler_thread> globals(global_data());\n\n        auto_mutex M(globals->window_table.get_mutex());\n        globals->clipboard = str.c_str();\n\n        XSetSelectionOwner(globals->disp,XA_PRIMARY,globals->exit_window,CurrentTime);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    Bool clip_peek_helper (\n        Display*,\n        XEvent* event,\n        XPointer \n    )\n    {\n        if ( event->type == SelectionNotify)\n        {\n            return True;\n        }\n        else\n        {\n            return False;\n        }\n    }\n\n    void get_from_clipboard (\n        std::string& str\n    )\n    {\n        std::wstring wstr;\n        get_from_clipboard(wstr);\n        str = convert_wstring_to_mbstring(wstr);\n    }\n\n    void get_from_clipboard (\n        dlib::ustring& str\n    )\n    {\n        std::wstring wstr;\n        get_from_clipboard(wstr);\n        str = convert_wstring_to_utf32(wstr);\n    }\n\n    void get_from_clipboard (\n        std::wstring& str\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        shared_ptr_thread_safe<event_handler_thread> globals(global_data());\n\n        auto_mutex M(globals->window_table.get_mutex());\n        str.clear();\n        unsigned char *data = 0;\n        wchar_t **plist = 0;\n        Window sown;\n        Atom  type;\n        int format, result;\n        unsigned long len, bytes_left, dummy;\n        XEvent e;\n\n        try\n        {\n            Atom atom_ct = XInternAtom(globals->disp, \"COMPOUND_TEXT\", False);\n            sown = XGetSelectionOwner (globals->disp, XA_PRIMARY);\n            if (sown == globals->exit_window)\n            {\n                // if we are copying from ourselfs then don't fool with the Xwindows junk.\n                str = globals->clipboard.c_str();\n            }\n            else if (sown != None)\n            {\n                // request that the selection be copied into the XA_PRIMARY property\n                // of the exit_window.  It doesn't matter what window we put it in \n                // so long as it is one under the control of this process and exit_window\n                // is easy to use here so that is what I'm using.\n                XConvertSelection (globals->disp, XA_PRIMARY, atom_ct, XA_PRIMARY,\n                                   globals->exit_window, CurrentTime);\n\n                // This will wait until we get a SelectionNotify event which should happen\n                // really soon.\n                XPeekIfEvent(globals->disp,&e,clip_peek_helper,0);\n\n                // See how much data we got\n                XGetWindowProperty (globals->disp, globals->exit_window, \n                                    XA_PRIMARY,    // Tricky..\n                                    0, 0,         // offset - len\n                                    0,        // Delete 0==FALSE\n                                    AnyPropertyType,  //flag\n                                    &type,        // return type\n                                    &format,      // return format\n                                    &len, &bytes_left,  //that \n                                    &data);             \n                if (data)\n                {\n                    XFree(data);\n                    data = 0;\n                }\n                if (bytes_left > 0 && type == atom_ct)\n                {\n                    XTextProperty p;\n                    result = XGetWindowProperty (globals->disp, globals->exit_window, \n                                                 XA_PRIMARY, 0,bytes_left,0,\n                                                 AnyPropertyType, &p.encoding,&p.format,\n                                                 &p.nitems, &dummy, &p.value);\n                    if (result == Success && p.encoding == atom_ct)\n                    {\n                        int n;\n                        XwcTextPropertyToTextList(globals->disp, &p, &plist, &n);\n                        str = plist[0];\n                    }\n                    if (plist)\n                    {\n                        XwcFreeStringList(plist);\n                        plist = 0;\n                    }\n                }\n            }\n        }\n        catch (...)\n        {\n            if (data) \n                XFree(data);\n            if (plist)\n            {\n                XwcFreeStringList(plist);\n                plist = 0;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace gui_core_kernel_2_globals\n    {\n        void trigger_user_event_threadproc (\n            void*\n        )\n        {\n            shared_ptr_thread_safe<event_handler_thread> globals(global_data());\n            auto_mutex M(globals->window_table.get_mutex());\n\n            globals->user_events.lock();\n            globals->user_events.swap(globals->user_events_temp);\n            globals->user_events.unlock();\n\n\n            globals->user_events_temp.reset();\n            // now dispatch all these user events\n            while (globals->user_events_temp.move_next())\n            {\n                base_window** win_ = globals->window_table[globals->user_events_temp.element().w];\n                base_window* win;\n                // if this window exists in the window table then dispatch\n                // its event.\n                if (win_)\n                {\n                    win = *win_;\n                    win->on_user_event(\n                        globals->user_events_temp.element().p,\n                        globals->user_events_temp.element().i\n                    );\n                }\n            }\n            globals->user_events_temp.clear();\n        }\n    }\n\n    void base_window::\n    trigger_user_event (\n        void* p,\n        int i\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        user_event_type e;\n        e.w = x11_stuff.hwnd;\n        e.p = p;\n        e.i = i;\n        {\n            shared_ptr_thread_safe<event_handler_thread> globals(global_data());\n            auto_mutex M(globals->user_events.get_mutex());\n            globals->user_events.enqueue(e);\n\n            // we only need to start a thread to deal with this if there isn't already\n            // one out working on the queue\n            if (globals->user_events.size() == 1)\n                create_new_thread (trigger_user_event_threadproc,0);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    base_window::\n    base_window (\n        bool resizable_,\n        bool undecorated\n    ) :\n        x11_stuff(*(new gui_core_kernel_2_globals::x11_base_windowstuff)),\n        is_mapped(false),\n        resizable(resizable_),\n        has_been_destroyed(false),\n        has_been_resized(false),\n        has_been_moved(false),\n        wm(gui_core_kernel_2_globals::global_data()->window_table.get_mutex())\n    {\n        DLIB_ASSERT(!(undecorated == true && resizable_ == true),\n            \"\\tbase_window::base_window()\"\n            << \"\\n\\tThere is no such thing as an undecorated window that is resizable by the user.\"\n            << \"\\n\\tthis:     \" << this\n            );\n        using namespace gui_core_kernel_2_globals;\n\n        auto_mutex M(wm);\n\n        x11_stuff.globals = global_data();\n        \n        x11_stuff.last_click_time = 0;\n        last_click_x = 0;\n        last_click_y = 0;\n        last_click_button = NONE;\n\n        XSetWindowAttributes attr;\n        memset(&attr,'\\0',sizeof(attr));\n\n        unsigned long valuemask = 0;\n        if (undecorated)\n        {\n            attr.override_redirect = True;\n            valuemask = CWOverrideRedirect;\n        }\n\n\n        x11_stuff.hwnd = XCreateWindow(\n                        x11_stuff.globals->disp,\n                        DefaultRootWindow(x11_stuff.globals->disp),\n                        0,\n                        0,\n                        10,  // this is the default width of a window\n                        10,  // this is the default width of a window\n                        0,\n                        x11_stuff.globals->depth,\n                        InputOutput,\n                        CopyFromParent,\n                        valuemask,\n                        &attr\n                        );\n\n        x11_stuff.xic = NULL;\n        if (x11_stuff.globals->xim)\n        {\n            XVaNestedList   xva_nlist;\n            XPoint          xpoint;\n\n            char **mlist;\n            int mcount;\n            char *def_str;\n            char fontset[256];\n            const long native_font_height = 12;\n            sprintf(fontset, \"-*-*-medium-r-normal--%lu-*-*-*-\", native_font_height);\n            x11_stuff.fs = XCreateFontSet(x11_stuff.globals->disp, fontset, &mlist, &mcount, &def_str);\n            xpoint.x = 0;\n            xpoint.y = 0;\n            xva_nlist = XVaCreateNestedList(0, XNSpotLocation, &xpoint, XNFontSet, x11_stuff.fs, (const void*)NULL);\n            x11_stuff.xic = XCreateIC(\n                x11_stuff.globals->xim,\n                XNInputStyle, x11_stuff.globals->xim_style,\n                XNClientWindow, x11_stuff.hwnd,\n                XNPreeditAttributes, xva_nlist,\n                (const void*)NULL\n                );\n            XFree(xva_nlist);\n            XFreeStringList(mlist);\n        }\n\n        Window temp = x11_stuff.hwnd;\n        base_window* ttemp = this;\n        x11_stuff.globals->window_table.add(temp,ttemp);\n        \n        // query event mask required by input method\n        unsigned long event_xim = 0;\n        if (x11_stuff.xic)\n             XGetICValues( x11_stuff.xic, XNFilterEvents, &event_xim, (const void*)NULL );\n        \n        XSelectInput(\n            x11_stuff.globals->disp,\n            x11_stuff.hwnd,\n            StructureNotifyMask|ExposureMask|ButtonPressMask|ButtonReleaseMask|\n            PointerMotionMask|LeaveWindowMask|EnterWindowMask|KeyPressMask|\n            KeyReleaseMask| FocusChangeMask | event_xim\n            );\n\n        XSetWMProtocols(\n            x11_stuff.globals->disp,\n            x11_stuff.hwnd,\n            &x11_stuff.globals->delete_window,\n            1\n            );\n\n\n        // these are just default values\n        x = 0;\n        y = 0;\n        width = 10;\n        height = 10;\n\n        if (resizable == false)\n        {\n            XSizeHints* hints = XAllocSizeHints();\n            hints->flags = PMinSize|PMaxSize;\n            hints->min_width = width;\n            hints->max_width = width;\n            hints->max_height = height; \n            hints->min_height = height; \n            XSetNormalHints(x11_stuff.globals->disp,x11_stuff.hwnd,hints);\n            XFree(hints);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    base_window::\n    ~base_window (\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        close_window();\n\n        if (x11_stuff.globals->xim != NULL)\n        {\n            XDestroyIC(x11_stuff.xic);\n            x11_stuff.xic = 0;\n            XFreeFontSet(x11_stuff.globals->disp,x11_stuff.fs);\n        }\n\n        delete &x11_stuff;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    close_window (\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex M(wm);\n        if (has_been_destroyed == false)\n        {\n            has_been_destroyed = true;\n\n            x11_stuff.globals->window_table.destroy(x11_stuff.hwnd);           \n\n            XDestroyWindow(x11_stuff.globals->disp,x11_stuff.hwnd);\n            x11_stuff.hwnd = 0;\n            x11_stuff.globals->window_close_signaler.broadcast();\n        }   \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool base_window::\n    is_closed (\n    ) const\n    {\n        auto_mutex M(wm);\n        return has_been_destroyed;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    set_title (\n        const std::string& title_\n    )\n    {\n        set_title(convert_mbstring_to_wstring(title_));\n    }\n\n    void base_window::\n    set_title (\n        const ustring& title_\n    )\n    {\n        set_title(convert_utf32_to_wstring(title_));\n    }\n\n    void base_window::\n    set_title (\n        const std::wstring& title_\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex M(wm);\n        if (has_been_destroyed == true)\n            return;\n\n        // I'm pretty sure the pointer won't be modified even though\n        // it isn't const anymore.\n        wchar_t *title = const_cast<wchar_t *>(title_.c_str());\n        XTextProperty property;\n        XwcTextListToTextProperty(x11_stuff.globals->disp,&title,1,XStdICCTextStyle, &property);\n        XSetWMName(x11_stuff.globals->disp,x11_stuff.hwnd,&property);\n        XFree(property.value);\n        XFlush(x11_stuff.globals->disp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    show (\n    )    \n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex M(wm);\n        if (has_been_destroyed == true)\n            return;\n\n        XMapRaised(x11_stuff.globals->disp,x11_stuff.hwnd);\n        XFlush(x11_stuff.globals->disp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    wait_until_closed (\n    ) const\n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex M(wm);\n        while (has_been_destroyed == false)\n            x11_stuff.globals->window_close_signaler.wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    hide (\n    )    \n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex M(wm);\n        if (has_been_destroyed == true)\n            return;\n\n        XUnmapWindow(x11_stuff.globals->disp,x11_stuff.hwnd);\n        XFlush(x11_stuff.globals->disp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    set_size (\n        int width_,\n        int height_\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex a(wm);\n        if (has_been_destroyed == true)\n            return;\n\n\n        // do some sanity checking on these values\n        if (width_ < 1)\n            width_ = 1;\n        if (height_ < 1)\n            height_ = 1;\n\n        width = width_;\n        height = height_;\n        has_been_resized = true;\n\n        if (resizable == false)\n        {\n            XSizeHints* hints = XAllocSizeHints();\n            hints->flags = PMinSize|PMaxSize;\n            hints->min_width = width;\n            hints->max_width = width;\n            hints->max_height = height; \n            hints->min_height = height; \n            XSetNormalHints(x11_stuff.globals->disp,x11_stuff.hwnd,hints);\n            XFree(hints);\n        }\n\n        XResizeWindow(x11_stuff.globals->disp,x11_stuff.hwnd,width,height);\n        \n        XFlush(x11_stuff.globals->disp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    set_pos (\n        long x_,\n        long y_\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex a(wm);\n        if (has_been_destroyed == true)\n            return;\n\n\n        x = x_;\n        y = y_;\n\n        has_been_moved = true;\n\n        XMoveWindow(x11_stuff.globals->disp,x11_stuff.hwnd,x,y);\n        XFlush(x11_stuff.globals->disp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    get_pos (\n        long& x_,\n        long& y_\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex a(wm);\n        x_ = 0;\n        y_ = 0;\n        if (has_been_destroyed == true)\n            return;\n\n        // we can't really trust the values we have for x and y because some window managers\n        // will have reported bogus values back in the ConfigureNotify event.  So just to be\n        // on the safe side we will use XTranslateCoordinates() \n        int rx, ry;\n        Window desktop_window = DefaultRootWindow(x11_stuff.globals->disp);\n        Window junk;\n        XTranslateCoordinates(x11_stuff.globals->disp,x11_stuff.hwnd,desktop_window,0,0,&rx, &ry, &junk);\n        x_ = rx;\n        y_ = ry;\n        x = rx;\n        y = ry;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    get_size (\n        unsigned long& width_,\n        unsigned long& height_\n    ) const\n    {\n        auto_mutex M(wm);\n        width_ = 0;\n        height_ = 0;\n        if (has_been_destroyed == true)\n            return;\n\n\n        width_ = width;\n        height_ = height;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    get_display_size (\n        unsigned long& width_,\n        unsigned long& height_\n    ) const\n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex M(wm);\n        width_ = 0;\n        height_ = 0;\n        if (has_been_destroyed == true)\n            return;\n\n        int screen_number = XScreenNumberOfScreen(x11_stuff.globals->screen);\n        width_ = DisplayWidth(x11_stuff.globals->disp, screen_number);\n        height_ = DisplayHeight(x11_stuff.globals->disp, screen_number);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    invalidate_rectangle (\n        const rectangle& rect\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex a(wm);\n        if (is_mapped == false)\n            return;\n\n        if (rect.is_empty() == false && !has_been_destroyed)\n        {\n            const long x = rect.left();\n            const long y = rect.top();\n            const unsigned long width = rect.width();\n            const unsigned long height = rect.height();\n            \n            XClearArea(x11_stuff.globals->disp,x11_stuff.hwnd,x,y,width,height,1);\n            XFlush(x11_stuff.globals->disp);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void base_window::\n    set_im_pos (\n        long x,\n        long y\n    )\n    {\n        using namespace gui_core_kernel_2_globals;\n        auto_mutex a(wm);\n        if (has_been_destroyed == true)\n            return;\n\n        if (!x11_stuff.xic || !(x11_stuff.globals->xim_style & XIMPreeditPosition)) return;\n\n        XVaNestedList   xva_nlist;\n        XPoint          xpoint;\n\n        xpoint.x = x;\n        xpoint.y = y;\n\n        xva_nlist = XVaCreateNestedList(0, XNSpotLocation, &xpoint, (const void*)NULL);\n        XSetICValues(x11_stuff.xic, XNPreeditAttributes, xva_nlist, (const void*)NULL);\n        XFree(xva_nlist);\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // POSIX\n\n#endif // DLIB_GUI_CORE_KERNEL_2_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_core/gui_core_kernel_2.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GUI_CORE_KERNEl_2_\n#define DLIB_GUI_CORE_KERNEl_2_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n#ifdef DLIB_NO_GUI_SUPPORT\n#error \"DLIB_NO_GUI_SUPPORT is defined so you can't use the GUI code.  Turn DLIB_NO_GUI_SUPPORT off if you want to use it.\"\n#error \"Also make sure you have libx11-dev installed on your system\"\n#endif\n\n#include <string>\n\n#include \"gui_core_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../threads.h\"\n#include \"../geometry/rectangle.h\"\n#include \"../binary_search_tree.h\"\n#include <string.h>\n#include \"../pixel.h\"\n#include \"../unicode.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace gui_core_kernel_2_globals\n    {\n        class event_handler_thread;\n        void trigger_user_event_threadproc (void*);\n\n        // This is a forward declaration for a struct that contains any \n        // X11 variables.  This allows me to avoid having any dlib header files\n        // include the X11 headers.  Which in turn speeds build times and simplifies\n        // build setups.\n        struct x11_base_windowstuff;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void put_on_clipboard (\n        const std::string& str\n    );\n\n    void put_on_clipboard (\n        const std::wstring& str\n    );\n\n    void put_on_clipboard (\n        const dlib::ustring& str\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    void get_from_clipboard (\n        std::string& str\n    );\n\n    void get_from_clipboard (\n        std::wstring& str\n    );\n\n    void get_from_clipboard (\n        dlib::ustring& str\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    class canvas : public rectangle\n    {\n    public:\n        struct pixel\n        {\n            unsigned char blue;\n            unsigned char green;\n            unsigned char red;\n        private:\n            friend class canvas;\n            unsigned char _padding;\n        };\n\n        ~canvas() {}\n\n        inline pixel* operator[] (\n            unsigned long row\n        ) const\n        {\n            DLIB_ASSERT(row < height(),\n                \"\\tpixel* canvas::operator[]\"\n                << \"\\n\\tyou have to give a row that is less than the height()\"\n                << \"\\n\\tthis:     \" << this\n                << \"\\n\\trow:      \" << row \n                << \"\\n\\theight(): \" << height() \n                );\n            unsigned char* temp = bits + row_width*row;\n            return reinterpret_cast<pixel*>(temp);\n        }\n\n        void fill (\n            unsigned char red_,\n            unsigned char green_,\n            unsigned char blue_\n        ) const;\n\n    private:\n\n        friend class gui_core_kernel_2_globals::event_handler_thread;\n\n\n        canvas (\n            unsigned char* bits_,\n            unsigned long left_,\n            unsigned long top_,            \n            unsigned long right_,            \n            unsigned long bottom_   \n        ) : \n            rectangle(left_,top_,right_,bottom_),\n            bits(bits_),\n            width_(width()),\n            height_(height()),\n            row_width(width_*4)\n        {}\n\n        // restricted functions\n        canvas();        // normal constructor\n        canvas(canvas&);        // copy constructor\n        canvas& operator=(canvas&);    // assignment operator    \n\n        unsigned char* const bits;\n        const unsigned long width_;\n        const unsigned long height_;\n        const unsigned long row_width;\n    };\n\n    template <>\n    struct pixel_traits<canvas::pixel>\n    {\n        const static bool rgb  = true;\n        const static bool rgb_alpha  = false;\n        const static bool grayscale = false;\n        const static bool hsi = false;\n        const static long num = 3;\n        typedef unsigned char basic_pixel_type;\n        static basic_pixel_type min() { return 0;}\n        static basic_pixel_type max() { return 255;}\n        const static bool is_unsigned = true;\n        const static bool has_alpha = false;\n    };\n\n// -----------------\n\n    class base_window\n    {\n        friend class gui_core_kernel_2_globals::event_handler_thread;\n        friend void gui_core_kernel_2_globals::trigger_user_event_threadproc (void*);\n\n    public:\n\n        enum  mouse_state_masks\n        {\n            NONE = 0,\n            LEFT = 1,\n            RIGHT = 2,\n            MIDDLE = 4,\n            SHIFT = 8,\n            CONTROL = 16\n        };\n\n        enum keyboard_state_masks\n        {\n            KBD_MOD_NONE = 0,\n            KBD_MOD_SHIFT = 1,\n            KBD_MOD_CONTROL = 2,\n            KBD_MOD_ALT = 4,\n            KBD_MOD_META = 8,\n            KBD_MOD_CAPS_LOCK = 16,\n            KBD_MOD_NUM_LOCK = 32,\n            KBD_MOD_SCROLL_LOCK = 64\n        };\n\n        enum on_close_return_code\n        {\n            DO_NOT_CLOSE_WINDOW,\n            CLOSE_WINDOW\n        };\n\n        enum non_printable_keyboard_keys\n        {\n            KEY_BACKSPACE,\n            KEY_SHIFT,\n            KEY_CTRL,\n            KEY_ALT,\n            KEY_PAUSE,\n            KEY_CAPS_LOCK,\n            KEY_ESC,\n            KEY_PAGE_UP,\n            KEY_PAGE_DOWN,\n            KEY_END,\n            KEY_HOME,\n            KEY_LEFT,           // This is the left arrow key\n            KEY_RIGHT,          // This is the right arrow key\n            KEY_UP,             // This is the up arrow key\n            KEY_DOWN,           // This is the down arrow key\n            KEY_INSERT,\n            KEY_DELETE,\n            KEY_SCROLL_LOCK,\n  \n            // Function Keys\n            KEY_F1,\n            KEY_F2,\n            KEY_F3,\n            KEY_F4,\n            KEY_F5,\n            KEY_F6,\n            KEY_F7,\n            KEY_F8,\n            KEY_F9,\n            KEY_F10,\n            KEY_F11,\n            KEY_F12\n        };\n\n    private:\n\n        gui_core_kernel_2_globals::x11_base_windowstuff& x11_stuff;\n\n        int x, y, width, height;\n        bool is_mapped;\n\n        const bool resizable;\n        bool has_been_destroyed;\n        bool has_been_resized;  // true if someone called set_size() and the on_window_resized() event \n                                // hasn't yet occurred.\n        bool has_been_moved;    // true if someone called set_pos() and the on_window_moved() event\n                                // hasn't yet occurred.\n\n\n        // The following 3 variables (and x11_stuff.last_click_time) are only accessed from the \n        // event handling loop (except for being initialized below). They record the last \n        // mouse click event details.\n        long last_click_x, last_click_y;\n        unsigned long last_click_button;\n\n\n    protected:\n        const rmutex& wm; \n\n    public:\n\n        base_window (\n            bool resizable_ = true,\n            bool undecorated = false\n        );\n\n        virtual ~base_window (\n        );\n\n        void close_window (\n        );\n\n        void wait_until_closed (\n        ) const;\n\n        void set_im_pos (\n            long x_,\n            long y_\n        );\n\n        bool is_closed (\n        ) const;\n\n        void set_title (\n            const std::string& title_\n        );\n\n        void set_title (\n            const std::wstring& title_\n        );\n\n        void set_title (\n            const dlib::ustring& title_\n        );\n\n        virtual void show (\n        );    \n\n        virtual void hide(\n        );    \n\n        void set_size (\n            int width_,\n            int height_\n        );\n\n        void set_pos (\n            long x_,\n            long y_\n        );\n\n        void get_pos (\n            long& x_,\n            long& y_\n        );\n\n        void get_size (\n            unsigned long& width_,\n            unsigned long& height_\n        ) const;\n\n        void get_display_size (\n            unsigned long& width,\n            unsigned long& height\n        ) const;\n\n        void invalidate_rectangle (\n            const rectangle& rect\n        );\n\n        void trigger_user_event (\n            void* p,\n            int i\n        );\n\n    protected:\n\n        virtual on_close_return_code on_window_close(\n        ){return CLOSE_WINDOW;}\n\n        virtual void on_window_resized(\n        ){}\n\n        virtual void on_window_moved(\n        ){}\n        virtual void on_user_event (\n            void* ,\n            int \n        ){}\n\n        virtual void on_mouse_down (\n            unsigned long ,\n            unsigned long ,\n            long ,\n            long ,\n            bool \n        ){}\n\n        virtual void on_mouse_up (\n            unsigned long ,\n            unsigned long ,\n            long ,\n            long \n        ){}\n\n        virtual void on_mouse_move (\n            unsigned long ,\n            long ,\n            long \n        ){}\n\n        virtual void on_mouse_leave (\n        ){}\n\n        virtual void on_mouse_enter (\n        ){}\n\n        virtual void on_wheel_up (\n            unsigned long \n        ){}\n\n        virtual void on_wheel_down (\n            unsigned long \n        ){}\n\n        virtual void on_focus_gained (\n        ){}\n\n        virtual void on_focus_lost (\n        ){}\n\n        virtual void on_keydown (\n            unsigned long ,            \n            bool ,\n            unsigned long \n        ){}\n\n        virtual void on_string_put (\n            const std::wstring&\n        ){}\n\n    private:\n\n        virtual void paint (\n            const canvas& c\n        ) =0;\n\n\n\n        base_window(base_window&);        // copy constructor\n        base_window& operator=(base_window&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n\n}\n\n\n#ifdef NO_MAKEFILE\n#include \"gui_core_kernel_2.cpp\"\n#endif\n\n#endif // DLIB_GUI_CORE_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_core/gui_core_kernel_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_GUI_CORE_KERNEl_ABSTRACT_\n#ifdef DLIB_GUI_CORE_KERNEl_ABSTRACT_\n\n#include <string>\n#include \"../algs.h\"\n#include \"../geometry/rectangle_abstract.h\"\n#include \"../unicode/unicode_abstract.h\"\n\nnamespace dlib\n{\n\n    /*!\n        OVERVIEW:\n            This is a set of objects and functions which provide a very basic\n            framework for manipulating windows.  It is intended to provide a \n            portable interface which can be used to build a more complex windowing \n            toolkit.\n\n        EXCEPTIONS\n            Do not let an exception leave any of the base_window event handlers. \n            The results of doing so are undefined.\n\n        THREAD SAFETY\n            Event Handlers\n                All event handlers are executed in a special event handling thread. \n                This means that you must not do anything that will take a long time or\n                block while in an event handler.  Doing so will freeze all event \n                processing.  \n                \n                Also, don't rely on get_thread_id() always returning the same ID from\n                inside event handlers.\n\n            canvas\n                Never access a canvas object outside of the paint() callback\n                that supplied it.  Only access a canvas object from the event \n                handling thread.  After the paint() event handler has returned do \n                not access that canvas object again.\n\n            base_window\n                All methods for this class are thread safe.  You may call them \n                from any thread and do not need to serialize access.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void put_on_clipboard (\n        const std::string& str\n    );\n    /*!\n        ensures\n            - posts the contents of str to the system clipboard\n        throws\n            - std::bad_alloc\n            - dlib::gui_error\n            - dlib::thread_error\n    !*/\n\n    // overloads for wide character strings\n    void put_on_clipboard (const std::wstring& str);\n    void put_on_clipboard (const dlib::ustring& str);\n\n// ----------------------------------------------------------------------------------------\n\n    void get_from_clipboard (\n        std::string& str\n    );\n    /*!\n        ensures\n            - if (there is string data on the system clipboard) then\n                - #str == the data from the clipboard\n            - else\n                - #str == \"\"\n        throws\n            - std::bad_alloc\n            - dlib::gui_error\n            - dlib::thread_error\n    !*/\n\n    // overloads for wide character strings\n    void get_from_clipboard (std::wtring& str);\n    void get_from_clipboard (dlib::utring& str);\n\n// ----------------------------------------------------------------------------------------\n\n\n    class canvas : public rectangle\n    {\n        /*!\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                All functions of this object may invalidate pointers and references\n                to internal data.  \n\n            INITIAL VALUE\n                The initial value of each pixel is undefined.  \n                is_empty() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a rectangular area of a window that you \n                can draw on. \n\n                Each pixel can be accessed with the following syntax:\n                    canvas_instance[y][x].red   == the red value for this pixel\n                    canvas_instance[y][x].blue  == the blue value for this pixel\n                    canvas_instance[y][x].green == the green value for this pixel\n\n                The origin, i.e. (0,0), of the x,y coordinate plane of the canvas is in \n                the upper left corner of the canvas.  Note that the upper left corner \n                of the canvas appears at the point (left(),top()) in its window.\n        !*/\n\n    public:\n\n        struct pixel\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents a single pixel.  Each pixel's value\n                    ranges from 0 to 255 with 0 indicating that the color is not\n                    present in the pixel at all and 255 indicating that the color\n                    is present in the pixel with maximum intensity.\n\n                    Note that the structure, order, and size of of this struct are \n                    implementation dependent.  It will always contain fields called \n                    red, green, and blue but they may not be in that order and there \n                    may be padding.  \n\n                    Also note that pixel_traits<> is defined for this pixel type,\n                    thus you can use it in assign_pixel() calls.\n            !*/\n            unsigned char red;\n            unsigned char green;\n            unsigned char blue;\n        };\n\n\n        pixel* operator[] (\n            unsigned long row\n        ) const;\n        /*!\n            requires\n                - row < height()\n            ensures\n                - returns an array of width() pixel structs that represents the given\n                  row of pixels in the canvas.  \n        !*/\n\n        void fill (\n            unsigned char red,\n            unsigned char green,\n            unsigned char blue\n        ) const;\n        /*!\n            ensures\n                - for all valid values of x and y:\n                    - (#*this)[y][x].red = red\n                    - (#*this)[y][x].green = green\n                    - (#*this)[y][x].blue = blue\n        !*/\n            \n    private:\n\n        // restricted functions\n        canvas();        // normal constructor\n        canvas(canvas&);        // copy constructor\n        canvas& operator=(canvas&);    // assignment operator    \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class base_window\n    {\n\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a window on the desktop.  A window has a \"client \n                area\" that is a region of the screen that you can draw whatever you like \n                on.  You implement the paint() callback and use the canvas object to do \n                this drawing.\n\n            INITIAL STATE\n                - The initial state of the window is to be hidden.  This means you need\n                  to call show() to make it appear.\n                - is_closed() == false\n\n            paint() callback:\n                This is where you will do all your drawing.  It is triggered when\n                part of the window needs to be drawn/redrawn.\n\n            mouse events:\n                It is important to note a few things about the mouse events.  First,\n                the on_mouse_move() event is not triggered for each pixel the mouse crosses\n                but rather its frequency and precision is implementation dependent.  \n                \n                Second, it is possible that a mouse button may be depressed but the \n                corresponding button release event does not go to the window.  For instance, \n                if the mouse is outside the window and some other application jumps to the \n                top it is possible that the new application will receive any mouse button \n                release events rather than the original window.  But the point is that \n                you should not rely on always getting a button up event for every button\n                down event.\n\n            keydown event:\n                Note that the existence of a typematic action (holding down a key\n                and having it start to repeat itself after a moment) for each key is\n                totally implementation dependent.  So don't rely on it for any key\n                and conversely don't assume it isn't present either.  \n\n            The base_window::wm mutex\n                This is a reference to a global rmutex.  All instances of base_window make\n                reference to the same global rmutex.  It is used to synchronize access to \n                the base_window to make it thread safe.  It is also always locked before \n                an event handler is called.\n        !*/\n\n    public:\n\n        enum on_close_return_code\n        {\n            DO_NOT_CLOSE_WINDOW,\n            CLOSE_WINDOW\n        };\n\n        enum mouse_state_masks\n        {\n            /*!\n                These constants represent the various buttons referenced by\n                mouse events.\n            !*/\n            NONE = 0,\n            LEFT = 1,\n            RIGHT = 2,\n            MIDDLE = 4,\n            SHIFT = 8,\n            CONTROL = 16\n        };\n\n        enum keyboard_state_masks\n        {\n            /*!\n                These constants represent the various modifier buttons that\n                could be in effect during a key press on the keyboard\n            !*/\n            KBD_MOD_NONE = 0,\n            KBD_MOD_SHIFT = 1,\n            KBD_MOD_CONTROL = 2,\n            KBD_MOD_ALT = 4,\n            KBD_MOD_META = 8,\n            KBD_MOD_CAPS_LOCK = 16,\n            KBD_MOD_NUM_LOCK = 32,\n            KBD_MOD_SCROLL_LOCK = 64\n        };\n\n        enum non_printable_keyboard_keys\n        {\n            KEY_BACKSPACE,\n            KEY_SHIFT,\n            KEY_CTRL,\n            KEY_ALT,\n            KEY_PAUSE,\n            KEY_CAPS_LOCK,\n            KEY_ESC,\n            KEY_PAGE_UP,\n            KEY_PAGE_DOWN,\n            KEY_END,\n            KEY_HOME,\n            KEY_LEFT,           // This is the left arrow key\n            KEY_RIGHT,          // This is the right arrow key\n            KEY_UP,             // This is the up arrow key\n            KEY_DOWN,           // This is the down arrow key\n            KEY_INSERT,\n            KEY_DELETE,\n            KEY_SCROLL_LOCK,\n  \n            // Function Keys\n            KEY_F1,\n            KEY_F2,\n            KEY_F3,\n            KEY_F4,\n            KEY_F5,\n            KEY_F6,\n            KEY_F7,\n            KEY_F8,\n            KEY_F9,\n            KEY_F10,\n            KEY_F11,\n            KEY_F12\n        };\n\n        base_window (\n            bool resizable = true,\n            bool undecorated = false\n        );\n        /*!\n            requires\n                - if (undecorated == true) then\n                    - resizable == false\n            ensures\n                - #*this has been properly initialized \n                - if (resizable == true) then \n                    - this window will be resizable by the user\n                - else \n                    - this window will not be resizable by the user\n                - if (undecorated == true) then\n                    - this window will not have any graphical elements outside\n                      of its drawable area or appear in the system task bar. It\n                      also won't take the input focus from other windows.\n                      (it is suitable for making things such as popup menus)\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                - dlib::gui_error\n                    This exception is thrown if there is an error while \n                    creating this window.\n        !*/\n\n        virtual ~base_window (\n        );\n        /*!\n            ensures\n                - does NOT trigger the on_window_close() event\n                - all resources associated with *this have been released                \n                - closes this window\n        !*/\n\n        void close_window (\n        );\n        /*!\n            ensures\n                - #is_closed() == true\n                  (i.e. permanently closes this window.  The window is removed from the \n                  screen and no more events will be dispatched to this window. )\n                - does NOT trigger the on_window_close() event\n        !*/\n\n        void wait_until_closed (\n        ) const;\n        /*!\n            ensures\n                - blocks until is_closed() == true \n        !*/\n\n        bool is_closed (\n        ) const;\n        /*!\n            ensures\n                - returns true if this window has been closed, false otherwise.\n                  (Note that closed windows do not receive any callbacks at all.\n                   They are also not visible on the screen.)\n        !*/\n\n        void set_title (\n            const std::string& title\n        );\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - sets the title of the window\n        !*/\n\n        void set_title (\n            const std::wstring& title\n        );\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - sets the title of the window\n        !*/\n\n        void set_title (\n            const dlib::ustring& title\n        );\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - sets the title of the window\n        !*/\n\n        virtual void show (\n        );\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - this window will appear on the screen\n        !*/\n\n        virtual void hide(\n        );\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - the window does not appear on the screen\n        !*/\n\n        void set_size (\n            int width,\n            int height\n        );\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - The width of the client area of this window is at least width\n                      pixels.\n                    - The height of the client area of this window is at least height\n                      pixels.\n                    - if (the window wasn't already this size) then\n                        - triggers the on_window_resized() callback\n        !*/\n\n        void set_pos (\n            long x,\n            long y\n        );\n        /*!\n            ensures \n                - if (is_closed() == false) then\n                    - sets the upper left corner of this window to the position (x,y) \n                      on the desktop.  Note that the origin (0,0) is at the upper left\n                      corner of the desktop.\n        !*/\n\n        void get_pos (\n            long& x,\n            long& y\n        ) const;\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - #x == the x coordinate of the upper left corner of the client area of\n                      this window.\n                    - #y == the y coordinate of the upper left corner of the client area of\n                      this window.\n                    - i.e. the point (#x,#y) on the desktop is coincident with the point\n                      (0,0) in the client area of this window.\n                - else\n                    - #x == 0\n                    - #y == 0\n        !*/\n\n        void get_size (\n            unsigned long& width,\n            unsigned long& height\n        ) const;\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - #width == the width of the client area of this window in pixels\n                    - #height == the height of the client area of this window in pixels\n                - else\n                    - #width == 0\n                    - #height == 0\n        !*/\n\n        void get_display_size (\n            unsigned long& width,\n            unsigned long& height\n        ) const;\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - #width == the width in pixels of the display device that contains this window \n                    - #height == the height in pixels of the display device that contains this window \n                - else\n                    - #width == 0\n                    - #height == 0\n        !*/\n\n        void invalidate_rectangle (\n            const rectangle& rect\n        );\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - causes the area of this window defined by rect to become invalid.\n                      This means that a paint() message will be dispatched to repaint\n                      this area of the window.  Note that it is possible that the \n                      resulting paint() message may include a bigger rectangle than\n                      the one defined by rect.\n        !*/\n\n        void trigger_user_event (\n            void* p,\n            int i\n        );\n        /*!\n            ensures\n                - will never block (even if some other thread has a lock on the\n                  global mutex referenced by wm.)\n                - if (is_closed() == false) then\n                    - causes the on_user_event() event to be called with \n                      the given arguments.\n        !*/\n\n        void set_im_pos (\n            long x_,\n            long y_\n        );\n        /*!\n            ensures\n                - if (is_closed() == false) then\n                    - sets the left-top position of input method rectangle used\n                      for wide character input methods.\n        !*/\n\n    protected:\n        const rmutex& wm;\n\n        // let the window close by default\n        virtual on_close_return_code on_window_close(\n        ){return CLOSE_WINDOW;}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when the user attempts to close this window\n                - if (this function returns CLOSE_WINDOW) then\n                    - #is_closed() == true  (i.e. this window will be closed)\n                    - it is safe to call \"delete this;\" inside on_window_close() \n                      if *this was allocated on the heap and no one will try to \n                      access *this anymore.\n                - else\n                    - this window will not be closed and the attempt to close it\n                      by the user will have no effect. \n                    - #is_closed() == false\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_user_event (\n            void* p,\n            int i\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called whenever someone calls trigger_user_event()\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_window_resized(\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when this window is resized\n            ensures\n                - does not change the state of mutex wm\n        !*/\n             \n        // do nothing by default\n        virtual void on_window_moved(\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when this window's position changes \n            ensures\n                - does not change the state of mutex wm\n        !*/\n             \n        // do nothing by default  \n        virtual void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when the user depresses one of the mouse buttons\n                - btn == the button that was depressed. (either LEFT, MIDDLE, or RIGHT)\n                - state == the bitwise OR of the buttons that are currently depressed \n                  excluding the button given by btn. (from the mouse_state_masks enum) \n                - (x,y) == the position of the mouse (relative to the upper left corner\n                  of the window) when this event occurred.  Note that the mouse may be\n                  outside the window.\n                - if (this is the second button press of a double click) then\n                    - is_double_click == true\n                - else\n                    - is_double_click == false\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when the user releases one of the mouse buttons\n                - btn == the button that was released. (either LEFT, MIDDLE, or RIGHT)\n                - state == the bitwise OR of the buttons that are currently depressed\n                  (from the mouse_state_masks enum)\n                - (x,y) == the position of the mouse (relative to the upper left corner\n                  of the window) when this event occurred.  Note that the mouse may be\n                  outside the window.\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when the user moves the mouse\n                - state == the bitwise OR of the buttons that are currently depressed\n                  (from the mouse_state_masks enum)\n                - (x,y) == the position of the mouse (relative to the upper left corner\n                  of the window) when this event occurred. \n                - if (the user is holding down one or more of the mouse buttons) then\n                    - the mouse move events will continue to track the mouse even if\n                      it goes out of the window.  This will continue until the user\n                      releases all the mouse buttons.\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_mouse_leave (\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when the mouse leaves this window\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_mouse_enter (\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when the mouse enters this window\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_focus_gained (\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when this window gains input focus \n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_focus_lost (\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when this window loses input focus \n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_wheel_up (\n            unsigned long state\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called every time the mouse wheel is scrolled up one notch\n                - state == the bitwise OR of the buttons that are currently depressed \n                  (from the mouse_state_masks enum) \n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_wheel_down (\n            unsigned long state\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called every time the mouse wheel is scrolled down one notch\n                - state == the bitwise OR of the buttons that are currently depressed \n                  (from the mouse_state_masks enum) \n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        // do nothing by default\n        virtual void on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when a keyboard key is pressed or if a key is held\n                  down then this is called repeatedly at a certain rate once the\n                  typematic action begins (note that some keys might not have any \n                  typematic action on some platforms).\n                - if (is_printable) then\n                    - key == the character that was pressed. (e.g. 'a', 'b', '1' etc.)\n                    - this is a printable character.  Note that ' ', '\\t', and \n                      '\\n' (this is the return/enter key) are all considered printable.\n                - else\n                    - key == one of the non_printable_keyboard_keys enums.  \n                - state == the bitwise OR of the keyboard modifiers that are currently\n                  depressed (taken from keyboard_state_masks).  \n                - if (key is not in the range 'a' to 'z' or 'A' to 'Z') then\n                    - if (the shift key was down when this key was pressed) then                    \n                        - (state & KBD_MOD_SHIFT) != 0 \n                    - else\n                        - (state & KBD_MOD_SHIFT) == 0 \n                - else\n                    - the state of the shift key is implementation defined\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        virtual void on_string_put (\n            const std::wstring &str\n        ){}\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when a wide/multibyte character input method determines a string\n                  that is being input to the window.\n                - str == the string that is being input\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n    private:\n\n        virtual void paint (\n            const canvas& c\n        ) =0;\n        /*!\n            requires\n                - is_closed() == false\n                - mutex wm is locked\n                - is called when part of the window needs to be repainted for \n                  any reason.\n                - c == a canvas object that represents the invalid area of this\n                  window which needs to be painted.\n            ensures\n                - does not change the state of mutex wm\n        !*/\n\n        base_window(base_window&);        // copy constructor\n        base_window& operator=(base_window&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GUI_CORE_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_core/windows.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GUI_CORE_KERNEl_2_\n#include \"gui_core_kernel_1.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_core/xlib.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GUI_CORE_KERNEl_1_\n#include \"gui_core_kernel_2.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_core.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GUI_CORe_\n#define DLIB_GUI_CORe_\n\n\n#include \"platform.h\"\n\n\n\n#ifdef WIN32\n#include \"gui_core/windows.h\"\n#else\n#include \"gui_core/xlib.h\"\n#endif\n\n\n\n#endif // DLIB_GUI_CORe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/base_widgets.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BASE_WIDGETs_CPP_\n#define DLIB_BASE_WIDGETs_CPP_\n\n#include \"base_widgets.h\"\n#include \"../assert.h\"\n#include <iostream>\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // button object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    set_size (\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        auto_mutex M(m);\n        rectangle min_rect = style->get_min_size(name_,*mfont);\n        // only change the size if it isn't going to be too small to fit the name\n        if (height >= min_rect.height() &&\n            width >= min_rect.width())\n        {\n            rectangle old(rect);\n            rect = resize_rect(rect,width,height);\n            parent.invalidate_rectangle(style->get_invalidation_rect(rect+old));\n            btn_tooltip.set_size(width,height);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    show (\n    )\n    {\n        button_action::show();\n        btn_tooltip.show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    hide (\n    )\n    {\n        button_action::hide();\n        btn_tooltip.hide();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    enable (\n    )\n    {\n        button_action::enable();\n        btn_tooltip.enable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    disable (\n    )\n    {\n        button_action::disable();\n        btn_tooltip.disable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    set_tooltip_text (\n        const std::string& text\n    )\n    {\n        btn_tooltip.set_text(text);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    set_tooltip_text (\n        const std::wstring& text\n    )\n    {\n        btn_tooltip.set_text(text);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    set_tooltip_text (\n        const ustring& text\n    )\n    {\n        btn_tooltip.set_text(text);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string button::\n    tooltip_text (\n    ) const\n    {\n        return btn_tooltip.text();\n    }\n\n    const std::wstring button::\n    tooltip_wtext (\n    ) const\n    {\n        return btn_tooltip.wtext();\n    }\n\n    const dlib::ustring button::\n    tooltip_utext (\n    ) const\n    {\n        return btn_tooltip.utext();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        mfont = f;\n        set_name(name_);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        auto_mutex M(m);\n        button_action::set_pos(x,y);\n        btn_tooltip.set_pos(x,y);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    set_name (\n        const std::string& name\n    )\n    {\n        set_name(convert_mbstring_to_wstring(name));\n    }\n\n    void button::\n    set_name (\n        const std::wstring& name\n    )\n    {\n        set_name(convert_wstring_to_utf32(name));\n    }\n\n    void button::\n    set_name (\n        const ustring& name\n    )\n    {\n        auto_mutex M(m);\n        name_ = name;\n        // do this to get rid of any reference counting that may be present in \n        // the std::string implementation.\n        name_[0] = name_[0];\n\n        rectangle old(rect);\n        rect = move_rect(style->get_min_size(name,*mfont),rect.left(),rect.top());\n        btn_tooltip.set_size(rect.width(),rect.height());\n        \n        parent.invalidate_rectangle(style->get_invalidation_rect(rect+old));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string button::\n    name (\n    ) const\n    {\n        auto_mutex M(m);\n        std::string temp = convert_wstring_to_mbstring(wname());\n        // do this to get rid of any reference counting that may be present in \n        // the std::string implementation.\n        char c = temp[0];\n        temp[0] = c;\n        return temp;\n    }\n\n    const std::wstring button::\n    wname (\n    ) const\n    {\n        auto_mutex M(m);\n        std::wstring temp = convert_utf32_to_wstring(uname());\n        // do this to get rid of any reference counting that may be present in \n        // the std::wstring implementation.\n        wchar_t w = temp[0];\n        temp[0] = w;\n        return temp;\n    }\n\n    const dlib::ustring button::\n    uname (\n    ) const\n    {\n        auto_mutex M(m);\n        dlib::ustring temp = name_;\n        // do this to get rid of any reference counting that may be present in \n        // the dlib::ustring implementation.\n        temp[0] = name_[0];\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    on_button_up (\n        bool mouse_over\n    )\n    {\n        if (mouse_over)                \n        {\n            // this is a valid button click\n            if (event_handler.is_set())\n                event_handler();\n            if (event_handler_self.is_set())\n                event_handler_self(*this);\n        }\n        if (button_up_handler.is_set())\n            button_up_handler(mouse_over);\n        if (button_up_handler_self.is_set())\n            button_up_handler_self(mouse_over,*this);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button::\n    on_button_down (\n    )\n    {\n        if (button_down_handler.is_set())\n            button_down_handler();\n        if (button_down_handler_self.is_set())\n            button_down_handler_self(*this);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // draggable object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    draggable::~draggable() {}\n\n// ----------------------------------------------------------------------------------------\n\n    void draggable::\n    on_mouse_move (\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        if (drag && (state & base_window::LEFT) && enabled && !hidden)\n        {\n            // the user is trying to drag this object.  we should calculate the new\n            // x and y positions for the upper left corner of this object's rectangle\n\n            long new_x = x - this->x;\n            long new_y = y - this->y;\n\n            // make sure these points are inside the draggable area.  \n            if (new_x < area.left())\n                new_x = area.left();\n            if (new_x + static_cast<long>(rect.width()) - 1 > area.right())\n                new_x = area.right() - rect.width() + 1;\n\n            if (new_y + static_cast<long>(rect.height()) - 1 > area.bottom())\n                new_y = area.bottom() - rect.height() + 1;\n            if (new_y < area.top())\n                new_y = area.top();\n\n            // now make the new rectangle for this object\n            rectangle new_rect(\n                new_x,\n                new_y,\n                new_x + rect.width() - 1,\n                new_y + rect.height() - 1\n            );\n\n            // only do anything if this is a new rectangle and it is inside area\n            if (new_rect != rect && area.intersect(new_rect) == new_rect)\n            {\n                parent.invalidate_rectangle(new_rect + rect);\n                rect = new_rect;\n\n                // call the on_drag() event handler\n                on_drag();\n            }\n        }\n        else\n        {\n            drag = false;\n            on_drag_stop();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void draggable::\n    on_mouse_up (\n        unsigned long ,\n        unsigned long state,\n        long ,\n        long \n    )\n    {\n        if (drag && (state & base_window::LEFT) == 0)\n        {\n            drag = false;\n            on_drag_stop();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void draggable::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long ,\n        long x,\n        long y,\n        bool \n    )\n    {\n        if (enabled && !hidden && rect.contains(x,y) && btn == base_window::LEFT)\n        {\n            drag = true;\n            this->x = x - rect.left();\n            this->y = y - rect.top();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // mouse_over_event object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    mouse_over_event::~mouse_over_event() {}\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_over_event::\n    on_mouse_leave (\n    )\n    {\n        if (is_mouse_over_)\n        {\n            is_mouse_over_ = false;\n            on_mouse_not_over();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_over_event::\n    on_mouse_move (\n        unsigned long ,\n        long x,\n        long y\n    )\n    {\n        if (rect.contains(x,y) == false)\n        {\n            if (is_mouse_over_)\n            {\n                is_mouse_over_ = false;\n                on_mouse_not_over();\n            }\n        }\n        else if (is_mouse_over_ == false)\n        {\n            is_mouse_over_ = true;\n            if (enabled && !hidden)\n                on_mouse_over();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool mouse_over_event::\n    is_mouse_over (\n    ) const\n    {\n        // check if the mouse is still really over this button\n        if (is_mouse_over_ && rect.contains(lastx,lasty) == false)\n        {\n            // trigger a user event to call on_mouse_not_over() and repaint this object.\n            // we must do this in another event because someone might call is_mouse_over()\n            // from draw() and you don't want this function to end up calling \n            // parent.invalidate_rectangle().  It would lead to draw() being called over\n            // and over.\n            parent.trigger_user_event((void*)this,drawable::next_free_user_event_number());\n            return false;\n        }\n\n        return is_mouse_over_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_over_event::\n    on_user_event (\n        int num \n    )\n    {\n        if (is_mouse_over_ && num == drawable::next_free_user_event_number())\n        {\n            is_mouse_over_ = false;\n            on_mouse_not_over();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // button_action object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    button_action::~button_action() {}\n\n// ----------------------------------------------------------------------------------------\n\n    void button_action::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long ,\n        long x,\n        long y,\n        bool\n    )\n    {\n        if (enabled && !hidden && btn == base_window::LEFT && rect.contains(x,y))\n        {\n            is_depressed_ = true;\n            seen_click = true;\n            parent.invalidate_rectangle(rect);\n            on_button_down();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button_action::\n    on_mouse_not_over (\n    )\n    {\n        if (is_depressed_)\n        {\n            is_depressed_ = false;\n            parent.invalidate_rectangle(rect);\n            on_button_up(false);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button_action::\n    on_mouse_move (\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        // forward event to the parent class so it can do it's thing as well as us\n        mouse_over_event::on_mouse_move(state,x,y);\n\n        if (enabled == false || hidden == true)\n            return;\n\n\n        if ((state & base_window::LEFT) == 0)\n        {\n            seen_click = false;\n            if (is_depressed_)\n            {\n                is_depressed_ = false;\n                parent.invalidate_rectangle(rect);\n                on_button_up(false);\n            }\n\n            // the left button isn't down so we don't care about anything else\n            return;\n        }\n\n        if (rect.contains(x,y) == false)\n        {\n            if (is_depressed_)\n            {\n                is_depressed_ = false;\n                parent.invalidate_rectangle(rect);\n                on_button_up(false);\n            }\n        }\n        else if (is_depressed_ == false && seen_click)\n        {\n            is_depressed_ = true;\n            parent.invalidate_rectangle(rect);\n            on_button_down();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button_action::\n    on_mouse_up (\n        unsigned long btn,\n        unsigned long,\n        long x,\n        long y\n    )\n    {\n        if (enabled && !hidden && btn == base_window::LEFT)\n        {\n            if (is_depressed_)\n            {\n                is_depressed_ = false;\n                parent.invalidate_rectangle(rect);\n\n                if (rect.contains(x,y))                \n                {\n                    on_button_up(true);\n                }\n                else\n                {\n                    on_button_up(false);\n                }\n            }\n            else if (seen_click && rect.contains(x,y))\n            {\n                // this case here covers the unlikly event that you click on a button,\n                // move the mouse off the button and then move it back very quickly and\n                // release the mouse button.   It is possible that this mouse up event\n                // will occurr before any mouse move event so you might not have set\n                // that the button is depressed yet.\n                \n                // So we should say that this triggers an on_button_down() event and\n                // then an on_button_up(true) event.\n\n                parent.invalidate_rectangle(rect);\n\n                on_button_down();\n                on_button_up(true);\n            }\n\n            seen_click = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool button_action::\n    is_depressed (\n    ) const\n    {\n        // check if the mouse is still really over this button\n        if (enabled && !hidden && is_depressed_ && rect.contains(lastx,lasty) == false)\n        {\n            // trigger a user event to call on_button_up() and repaint this object.\n            // we must do this in another event because someone might call is_depressed()\n            // from draw() and you don't want this function to end up calling \n            // parent.invalidate_rectangle().  It would lead to draw() being called over\n            // and over.\n            parent.trigger_user_event((void*)this,mouse_over_event::next_free_user_event_number());\n            return false;\n        }\n\n        return is_depressed_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void button_action::\n    on_user_event (\n        int num\n    )\n    {\n        // forward event to the parent class so it can do it's thing as well as us\n        mouse_over_event::on_user_event(num);\n\n        if (is_depressed_ && num == mouse_over_event::next_free_user_event_number())\n        {\n            is_depressed_ = false;\n            parent.invalidate_rectangle(rect);\n            on_button_up(false);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // scroll_bar object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    scroll_bar::\n    scroll_bar(  \n        drawable_window& w,\n        bar_orientation orientation \n    ) :\n        drawable(w),\n        b1(w),\n        b2(w),\n        slider(w,*this,&scroll_bar::on_slider_drag),\n        ori(orientation),\n        top_filler(w,*this,&scroll_bar::top_filler_down,&scroll_bar::top_filler_up),\n        bottom_filler(w,*this,&scroll_bar::bottom_filler_down,&scroll_bar::bottom_filler_up),\n        pos(0),\n        max_pos(0),\n        js(10),\n        b1_timer(*this,&scroll_bar::b1_down_t),\n        b2_timer(*this,&scroll_bar::b2_down_t),\n        top_filler_timer(*this,&scroll_bar::top_filler_down_t),\n        bottom_filler_timer(*this,&scroll_bar::bottom_filler_down_t)\n    {\n        set_style(scroll_bar_style_default());\n\n        // don't show the slider when there is no place it can move.\n        slider.hide();\n\n        set_length(100);\n\n        b1.set_button_down_handler(*this,&scroll_bar::b1_down);\n        b2.set_button_down_handler(*this,&scroll_bar::b2_down);\n\n        b1.set_button_up_handler(*this,&scroll_bar::b1_up);\n        b2.set_button_up_handler(*this,&scroll_bar::b2_up);\n        b1.disable();\n        b2.disable();\n        enable_events();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    scroll_bar::\n    ~scroll_bar(\n    )\n    {\n        disable_events();\n        parent.invalidate_rectangle(rect); \n        // wait for all the timers to be stopped\n        b1_timer.stop_and_wait();\n        b2_timer.stop_and_wait();\n        top_filler_timer.stop_and_wait();\n        bottom_filler_timer.stop_and_wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    scroll_bar::bar_orientation scroll_bar::\n    orientation (\n    ) const\n    {\n        auto_mutex M(m);\n        return ori;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    void scroll_bar::\n    set_length (\n        unsigned long length\n    )\n    {\n        auto_mutex M(m);\n        // make the min length be at least 1\n        if (length == 0)\n        {\n            length = 1;\n        }\n\n\n        parent.invalidate_rectangle(rect);\n\n        if (ori == HORIZONTAL)\n        {\n            rect.set_right(rect.left() + length - 1);\n            rect.set_bottom(rect.top() + style->get_width() - 1);\n\n            const long btn_size = style->get_button_length(rect.width(), max_pos);\n\n            b1.set_size(btn_size,style->get_width());\n            b2.set_size(btn_size,style->get_width());\n\n            slider.set_size(get_slider_size(),style->get_width());\n        }\n        else\n        {\n            rect.set_right(rect.left() + style->get_width() - 1);\n            rect.set_bottom(rect.top() + length - 1);\n\n            const long btn_size = style->get_button_length(rect.height(), max_pos);\n\n            b1.set_size(style->get_width(),btn_size);\n            b2.set_size(style->get_width(),btn_size);\n\n            slider.set_size(style->get_width(),get_slider_size());\n        }\n\n        // call this to put everything is in the right spot.\n        set_pos (rect.left(),rect.top());\n\n        if ((b2.get_rect().top() - b1.get_rect().bottom() - 1 <= 8 && ori == VERTICAL) || \n            (b2.get_rect().left() - b1.get_rect().right() - 1 <= 8 && ori == HORIZONTAL) || \n            max_pos == 0)\n        {\n            hide_slider();\n        }\n        else if (enabled && !hidden)\n        {\n            show_slider();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        auto_mutex M(m);\n        drawable::set_pos(x,y);\n\n        b1.set_pos(rect.left(),rect.top());\n        if (ori == HORIZONTAL)\n        {\n            // make the b2 button appear at the end of the scroll_bar\n            b2.set_pos(rect.right()-b2.get_rect().width() + 1,rect.top());\n\n            if (max_pos != 0)\n            {\n                double range = b2.get_rect().left() - b1.get_rect().right() - slider.get_rect().width() - 1;\n                double slider_pos = pos;\n                slider_pos /= max_pos;\n                slider_pos *= range;\n                slider.set_pos(\n                    static_cast<long>(slider_pos)+rect.left() + b1.get_rect().width(),\n                    rect.top()\n                    );\n\n                // move the draggable area for the slider to the new location\n                rectangle area = rect;\n                area.set_left(area.left() + style->get_width());\n                area.set_right(area.right() - style->get_width());\n                slider.set_draggable_area(area);\n\n            }\n\n            \n        }\n        else\n        {\n            // make the b2 button appear at the end of the scroll_bar\n            b2.set_pos(rect.left(), rect.bottom() - b2.get_rect().height() + 1);\n\n            if (max_pos != 0)\n            {\n                double range = b2.get_rect().top() - b1.get_rect().bottom() - slider.get_rect().height() - 1;\n                double slider_pos = pos;\n                slider_pos /= max_pos;\n                slider_pos *= range;\n                slider.set_pos(\n                    rect.left(), \n                    static_cast<long>(slider_pos) + rect.top() + b1.get_rect().height()\n                    );\n\n                // move the draggable area for the slider to the new location\n                rectangle area = rect;\n                area.set_top(area.top() + style->get_width());\n                area.set_bottom(area.bottom() - style->get_width());\n                slider.set_draggable_area(area);\n            }\n        }\n\n        adjust_fillers();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long scroll_bar::\n    get_slider_size (\n    ) const\n    {\n        if (ori == HORIZONTAL)\n            return style->get_slider_length(rect.width(),max_pos);\n        else\n            return style->get_slider_length(rect.height(),max_pos);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    adjust_fillers (\n    )\n    {\n        rectangle top(rect), bottom(rect);\n\n        if (ori == HORIZONTAL)\n        {\n            if (slider.is_hidden())\n            {\n                top.set_left(b1.get_rect().right()+1);\n                top.set_right(b2.get_rect().left()-1);\n                bottom.set_left(1);\n                bottom.set_right(-1);\n            }\n            else\n            {\n                top.set_left(b1.get_rect().right()+1);\n                top.set_right(slider.get_rect().left()-1);\n                bottom.set_left(slider.get_rect().right()+1);\n                bottom.set_right(b2.get_rect().left()-1);\n            }\n        }\n        else\n        {\n            if (slider.is_hidden())\n            {\n                top.set_top(b1.get_rect().bottom()+1);\n                top.set_bottom(b2.get_rect().top()-1);\n                bottom.set_top(1);\n                bottom.set_bottom(-1);\n            }\n            else\n            {\n                top.set_top(b1.get_rect().bottom()+1);\n                top.set_bottom(slider.get_rect().top()-1);\n                bottom.set_top(slider.get_rect().bottom()+1);\n                bottom.set_bottom(b2.get_rect().top()-1);\n            }\n        }\n\n        top_filler.rect = top;\n        bottom_filler.rect = bottom;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    hide_slider (\n    )\n    {\n        rectangle top(rect), bottom(rect);\n        slider.hide();\n        top_filler.disable();\n        bottom_filler.disable();\n        bottom_filler.hide();\n        if (ori == HORIZONTAL)\n        {\n            top.set_left(b1.get_rect().right()+1);\n            top.set_right(b2.get_rect().left()-1);\n        }\n        else\n        {\n            top.set_top(b1.get_rect().bottom()+1);\n            top.set_bottom(b2.get_rect().top()-1);\n        }\n        top_filler.rect = top;\n        bottom_filler.rect = bottom;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    show_slider (\n    )\n    {\n        if ((b2.get_rect().top() - b1.get_rect().bottom() - 1 <= 8 && ori == VERTICAL) || \n            (b2.get_rect().left() - b1.get_rect().right() - 1 <= 8 && ori == HORIZONTAL) || \n            max_pos == 0)\n            return;\n\n        rectangle top(rect), bottom(rect);\n        slider.show();\n        top_filler.enable();\n        bottom_filler.enable();\n        bottom_filler.show();\n        if (ori == HORIZONTAL)\n        {\n            top.set_left(b1.get_rect().right()+1);\n            top.set_right(slider.get_rect().left()-1);\n            bottom.set_left(slider.get_rect().right()+1);\n            bottom.set_right(b2.get_rect().left()-1);\n        }\n        else\n        {\n            top.set_top(b1.get_rect().bottom()+1);\n            top.set_bottom(slider.get_rect().top()-1);\n            bottom.set_top(slider.get_rect().bottom()+1);\n            bottom.set_bottom(b2.get_rect().top()-1);\n        }\n        top_filler.rect = top;\n        bottom_filler.rect = bottom;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long scroll_bar::\n    max_slider_pos (\n    ) const\n    {\n        auto_mutex M(m);\n        return max_pos;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    set_max_slider_pos (\n        long mpos\n    )\n    {\n        auto_mutex M(m);\n        max_pos = mpos;\n        if (pos > mpos)\n            pos = mpos;\n\n        if (ori == HORIZONTAL)\n            set_length(rect.width());\n        else\n            set_length(rect.height());\n\n        if (mpos != 0 && enabled)\n        {\n            b1.enable();\n            b2.enable();\n        }\n        else\n        {\n            b1.disable();\n            b2.disable();\n        }\n             \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    set_slider_pos (\n        long pos\n    )\n    {\n        auto_mutex M(m);\n        if (pos < 0)\n            pos = 0;\n        if (pos > max_pos)\n            pos = max_pos;\n\n        this->pos = pos;\n\n        // move the slider object to its new position\n        set_pos(rect.left(),rect.top());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long scroll_bar::\n    slider_pos (\n    ) const\n    {\n        auto_mutex M(m);\n        return pos;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    on_slider_drag (\n    )\n    {\n        if (ori == HORIZONTAL)\n        {\n            double slider_pos = slider.get_rect().left() - b1.get_rect().right() - 1;\n            double range = b2.get_rect().left() - b1.get_rect().right() - slider.get_rect().width() - 1;\n            slider_pos /= range;\n            slider_pos *= max_pos;\n            pos = static_cast<unsigned long>(slider_pos);\n        }\n        else\n        {\n            double slider_pos = slider.get_rect().top() - b1.get_rect().bottom() - 1;\n            double range = b2.get_rect().top() - b1.get_rect().bottom() - slider.get_rect().height() - 1;\n            slider_pos /= range;\n            slider_pos *= max_pos;\n            pos = static_cast<unsigned long>(slider_pos);\n        }\n\n        adjust_fillers();\n        \n        if (scroll_handler.is_set())\n            scroll_handler();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    draw (\n        const canvas& \n    ) const\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    b1_down (\n    )\n    {\n        if (pos != 0)\n        {\n            set_slider_pos(pos-1);\n            if (scroll_handler.is_set())\n                scroll_handler();\n\n            if (b1_timer.delay_time() == 1000)\n                b1_timer.set_delay_time(500);\n            else\n                b1_timer.set_delay_time(50);\n            b1_timer.start();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    b1_up (\n        bool \n    )\n    {\n        b1_timer.stop();\n        b1_timer.set_delay_time(1000);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    b2_down (\n    )\n    {\n        if (pos != max_pos)\n        {\n            set_slider_pos(pos+1);\n            if (scroll_handler.is_set())\n                scroll_handler();\n\n            if (b2_timer.delay_time() == 1000)\n                b2_timer.set_delay_time(500);\n            else\n                b2_timer.set_delay_time(50);\n            b2_timer.start();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    b2_up (\n        bool \n    )\n    {\n        b2_timer.stop();\n        b2_timer.set_delay_time(1000);\n    }\n        \n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    top_filler_down (\n    )\n    {\n        // ignore this if the mouse is now outside this object.  This could happen\n        // since the timers are also calling this function.\n        if (top_filler.rect.contains(lastx,lasty) == false)\n        {\n            top_filler_up(false);\n            return;\n        }\n\n        if (pos != 0)\n        {\n            if (pos < js)\n            {\n                // if there is less than jump_size() space left then jump the remaining\n                // amount.\n                delayed_set_slider_pos(0);\n            }\n            else\n            {\n                delayed_set_slider_pos(pos-js);\n            }\n\n            if (top_filler_timer.delay_time() == 1000)\n                top_filler_timer.set_delay_time(500);\n            else\n                top_filler_timer.set_delay_time(50);\n            top_filler_timer.start();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    top_filler_up (\n        bool \n    )\n    {\n        top_filler_timer.stop();\n        top_filler_timer.set_delay_time(1000);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    bottom_filler_down (\n    )\n    {\n        // ignore this if the mouse is now outside this object.  This could happen\n        // since the timers are also calling this function.\n        if (bottom_filler.rect.contains(lastx,lasty) == false)\n        {\n            bottom_filler_up(false);\n            return;\n        }\n\n        if (pos != max_pos)\n        {\n            if (max_pos - pos < js)\n            {\n                // if there is less than jump_size() space left then jump the remaining\n                // amount.\n                delayed_set_slider_pos(max_pos);\n            }\n            else\n            {\n                delayed_set_slider_pos(pos+js);\n            }\n\n            if (bottom_filler_timer.delay_time() == 1000)\n                bottom_filler_timer.set_delay_time(500);\n            else\n                bottom_filler_timer.set_delay_time(50);\n            bottom_filler_timer.start();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    bottom_filler_up (\n        bool \n    )\n    {\n        bottom_filler_timer.stop();\n        bottom_filler_timer.set_delay_time(1000);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    set_jump_size (\n        long js_\n    )\n    {\n        auto_mutex M(m);\n        if (js_ < 1)\n            js = 1;\n        else\n            js = js_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long scroll_bar::\n    jump_size (\n    ) const\n    {\n        auto_mutex M(m);\n        return js;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    on_user_event (\n        int i\n    )\n    {\n        switch (i)\n        {\n            case 0:\n                b1_down();\n                break;\n            case 1:\n                b2_down();\n                break;\n            case 2:\n                top_filler_down();\n                break;\n            case 3:\n                bottom_filler_down();\n                break;\n            case 4:\n                // if the position we are supposed to switch the slider too isn't \n                // already set\n                if (delayed_pos != pos)\n                {\n                    set_slider_pos(delayed_pos);\n                    if (scroll_handler.is_set())\n                        scroll_handler();\n                }\n                break;\n            default:\n                break;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    delayed_set_slider_pos (\n        unsigned long dpos\n    ) \n    {\n        delayed_pos = dpos;\n        parent.trigger_user_event(this,4); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    b1_down_t (\n    ) \n    { \n        parent.trigger_user_event(this,0); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    b2_down_t (\n    ) \n    { \n        parent.trigger_user_event(this,1); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    top_filler_down_t (\n    ) \n    { \n        parent.trigger_user_event(this,2); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar::\n    bottom_filler_down_t (\n    ) \n    { \n        parent.trigger_user_event(this,3); \n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                  widget_group object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    empty (\n    ) \n    {  \n        auto_mutex M(m); \n        widgets.clear(); \n        wg_widgets.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    add (\n        drawable& widget,\n        unsigned long x,\n        unsigned long y\n    )\n    {\n        auto_mutex M(m); \n        drawable* w = &widget;\n        relpos rp;\n        rp.x = x;\n        rp.y = y;\n        if (widgets.is_in_domain(w))\n        {\n            widgets[w].x = x;\n            widgets[w].y = y;\n        }\n        else\n        {\n            widgets.add(w,rp);\n        }\n        if (is_hidden())\n            widget.hide();\n        else\n            widget.show();\n\n        if (is_enabled())\n            widget.enable();\n        else\n            widget.disable();\n\n        widget.set_z_order(z_order());\n        widget.set_pos(x+rect.left(),y+rect.top());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    add (\n        widget_group& widget,\n        unsigned long x,\n        unsigned long y\n    )\n    {\n        auto_mutex M(m); \n        drawable& w = widget;\n        add(w, x, y);\n\n        widget_group* wg = &widget;\n        wg_widgets.add(wg);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool widget_group::\n    is_member (\n        const drawable& widget\n    ) const \n    { \n        auto_mutex M(m); \n        drawable* w = const_cast<drawable*>(&widget);\n        return widgets.is_in_domain(w); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    remove (\n        const drawable& widget\n    )\n    {\n        auto_mutex M(m); \n        drawable* w = const_cast<drawable*>(&widget);\n        if (widgets.is_in_domain(w))\n        {\n            widgets.destroy(w);\n\n            // check if we also have an entry in the wg_widgets set and if\n            // so then remove that too\n            widget_group* wg = reinterpret_cast<widget_group*>(w);\n            if (wg_widgets.is_member(wg))\n            {\n                wg_widgets.destroy(wg);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long widget_group::\n    size (\n    ) const \n    {  \n        auto_mutex M(m); \n        return widgets.size(); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        auto_mutex M(m);\n        widgets.reset();\n        while (widgets.move_next())\n        {\n            const unsigned long rx = widgets.element().value().x;\n            const unsigned long ry = widgets.element().value().y;\n            widgets.element().key()->set_pos(x+rx,y+ry);\n        }\n        drawable::set_pos(x,y);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    set_z_order (\n        long order\n    )\n    {\n        auto_mutex M(m);\n        widgets.reset();\n        while (widgets.move_next())\n            widgets.element().key()->set_z_order(order);\n        drawable::set_z_order(order);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    show (\n    )\n    {\n        auto_mutex M(m);\n        widgets.reset();\n        while (widgets.move_next())\n            widgets.element().key()->show();\n        drawable::show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    hide (\n    )\n    {\n        auto_mutex M(m);\n        widgets.reset();\n        while (widgets.move_next())\n            widgets.element().key()->hide();\n        drawable::hide();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    enable (\n    )\n    {\n        auto_mutex M(m);\n        widgets.reset();\n        while (widgets.move_next())\n            widgets.element().key()->enable();\n        drawable::enable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    disable ()\n    {\n        auto_mutex M(m);\n        widgets.reset();\n        while (widgets.move_next())\n            widgets.element().key()->disable();\n        drawable::disable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void widget_group::\n    fit_to_contents (\n    )\n    {\n        auto_mutex M(m);\n\n        // call fit_to_contents on all the widget_groups we contain\n        wg_widgets.reset();\n        while (wg_widgets.move_next())\n            wg_widgets.element()->fit_to_contents();\n\n        // now accumulate a rectangle that contains everything in this widget_group\n        rectangle r;\n        widgets.reset();\n        while (widgets.move_next())\n            r = r + widgets.element().key()->get_rect();\n\n        if (r.is_empty())\n        {\n            // make sure it is still empty after we set it at the correct position \n            r.set_right(rect.left()-1);\n            r.set_bottom(rect.top()-1);\n        }\n\n        r.set_left(rect.left());\n        r.set_top(rect.top());\n        rect = r;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                class popup_menu\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    popup_menu::\n    popup_menu (\n    ) :\n        base_window(false,true),\n        pad(2),\n        item_pad(3),\n        cur_rect(pad,pad,pad-1,pad-1),\n        left_width(0),\n        middle_width(0),\n        selected_item(0),\n        submenu_open(false)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    enable_menu_item (\n        unsigned long idx\n    )\n    {\n        DLIB_ASSERT ( idx < size() ,\n                      \"\\tvoid popup_menu::enable_menu_item()\"\n                      << \"\\n\\tidx:    \" << idx\n                      << \"\\n\\tsize(): \" << size() \n        );\n        auto_mutex M(wm);\n        item_enabled[idx] = true;\n        invalidate_rectangle(cur_rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    disable_menu_item (\n        unsigned long idx\n    )\n    {\n        DLIB_ASSERT ( idx < size() ,\n                      \"\\tvoid popup_menu::enable_menu_item()\"\n                      << \"\\n\\tidx:    \" << idx\n                      << \"\\n\\tsize(): \" << size() \n        );\n        auto_mutex M(wm);\n        item_enabled[idx] = false;\n        invalidate_rectangle(cur_rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long popup_menu::\n    size (\n    ) const\n    { \n        auto_mutex M(wm);\n        return items.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    clear (\n    )\n    {\n        auto_mutex M(wm);\n        hide();\n        cur_rect = rectangle(pad,pad,pad-1,pad-1);\n        win_rect = rectangle();\n        left_width = 0;\n        middle_width = 0;\n        items.clear();\n        item_enabled.clear();\n        left_rects.clear();\n        middle_rects.clear();\n        right_rects.clear();\n        line_rects.clear();\n        submenus.clear();\n        selected_item = 0;\n        submenu_open = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    show (\n    )\n    {\n        auto_mutex M(wm);\n        selected_item = submenus.size();\n        base_window::show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    hide (\n    )\n    {\n        auto_mutex M(wm);\n        // hide ourselves\n        close_submenu();\n        selected_item = submenus.size();\n        base_window::hide();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    select_first_item (\n    )\n    {\n        auto_mutex M(wm);\n        close_submenu();\n        selected_item = items.size();\n        for (unsigned long i = 0; i < items.size(); ++i)\n        {\n            if ((items[i]->has_click_event() || submenus[i]) && item_enabled[i])\n            {\n                selected_item = i;\n                break;\n            }\n        }\n        invalidate_rectangle(cur_rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool popup_menu::\n    forwarded_on_keydown (\n        unsigned long key,\n        bool is_printable,\n        unsigned long state\n    )\n    {\n        auto_mutex M(wm);\n        // do nothing if this popup menu is empty\n        if (items.size() == 0)\n            return false;\n\n\n        // check if the selected item is a submenu\n        if (selected_item != submenus.size() && submenus[selected_item] != 0 && submenu_open)\n        {\n            // send the key to the submenu and return if that menu used the key\n            if (submenus[selected_item]->forwarded_on_keydown(key,is_printable,state) == true)\n                return true;\n        }\n\n        if (key == KEY_UP)\n        {\n            for (unsigned long i = 0; i < items.size(); ++i)\n            {\n                selected_item = (selected_item + items.size() - 1)%items.size();\n                // only stop looking if this one is enabled and has a click event or is a submenu\n                if (item_enabled[selected_item] && (items[selected_item]->has_click_event() || submenus[selected_item]) )\n                    break;\n            }\n            invalidate_rectangle(cur_rect);\n            return true;\n        }\n        else if (key == KEY_DOWN)\n        {\n            for (unsigned long i = 0; i < items.size(); ++i)\n            {\n                selected_item = (selected_item + 1)%items.size();\n                // only stop looking if this one is enabled and has a click event or is a submenu\n                if (item_enabled[selected_item] && (items[selected_item]->has_click_event() || submenus[selected_item]))\n                    break;\n            }\n            invalidate_rectangle(cur_rect);\n            return true;\n        }\n        else if (key == KEY_RIGHT && submenu_open == false && display_selected_submenu())\n        {\n            submenus[selected_item]->select_first_item();\n            return true;\n        }\n        else if (key == KEY_LEFT && selected_item != submenus.size() && \n                 submenus[selected_item] != 0 && submenu_open)\n        {\n            close_submenu();\n            return true;\n        }\n        else if (key == '\\n')\n        {\n            if (selected_item != submenus.size() && (items[selected_item]->has_click_event() || submenus[selected_item]))\n            {\n                const long idx = selected_item;\n                // only hide this popup window if this isn't a submenu\n                if (submenus[idx] == 0)\n                {\n                    hide();\n                    hide_handlers.reset();\n                    while (hide_handlers.move_next())\n                        hide_handlers.element()();\n                }\n                else\n                {\n                    display_selected_submenu();\n                    submenus[idx]->select_first_item();\n                }\n                items[idx]->on_click();\n                return true;\n            }\n        }\n        else if (is_printable)\n        {\n            // check if there is a hotkey for this key\n            for (unsigned long i = 0; i < items.size(); ++i)\n            {\n                if (std::tolower(key) == std::tolower(items[i]->get_hot_key()) && \n                    (items[i]->has_click_event() || submenus[i]) && item_enabled[i] )\n                {\n                    // only hide this popup window if this isn't a submenu\n                    if (submenus[i] == 0)\n                    {\n                        hide();\n                        hide_handlers.reset();\n                        while (hide_handlers.move_next())\n                            hide_handlers.element()();\n                    }\n                    else\n                    {\n                        if (selected_item != items.size())\n                            invalidate_rectangle(line_rects[selected_item]);\n\n                        selected_item = i;\n                        display_selected_submenu();\n                        invalidate_rectangle(line_rects[i]);\n                        submenus[i]->select_first_item();\n                    }\n                    items[i]->on_click();\n                }\n            }\n\n            // always say we use a printable key for hotkeys\n            return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    on_submenu_hide (\n    )\n    {\n        hide();\n        hide_handlers.reset();\n        while (hide_handlers.move_next())\n            hide_handlers.element()();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    on_window_resized(\n    )\n    {\n        invalidate_rectangle(win_rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    on_mouse_up (\n        unsigned long btn,\n        unsigned long,\n        long x,\n        long y\n    )\n    {\n        if (cur_rect.contains(x,y) && btn == LEFT)\n        {\n            // figure out which item this was on \n            for (unsigned long i = 0; i < items.size(); ++i)\n            {\n                if (line_rects[i].contains(x,y) && item_enabled[i] && items[i]->has_click_event())\n                {\n                    // only hide this popup window if this isn't a submenu\n                    if (submenus[i] == 0)\n                    {\n                        hide();\n                        hide_handlers.reset();\n                        while (hide_handlers.move_next())\n                            hide_handlers.element()();\n                    }\n                    items[i]->on_click();\n                    break;\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    on_mouse_move (\n        unsigned long ,\n        long x,\n        long y\n    )\n    {\n        if (cur_rect.contains(x,y))\n        {\n            // check if the mouse is still in the same rect it was in last time\n            rectangle last_rect;\n            if (selected_item != submenus.size())\n            {\n                last_rect = line_rects[selected_item];\n            }\n\n            // if the mouse isn't in the same rectangle any more\n            if (last_rect.contains(x,y) == false)\n            {\n                if (selected_item != submenus.size())\n                {\n                    invalidate_rectangle(last_rect);\n                    close_submenu();\n                    selected_item = submenus.size();\n                }\n\n\n                // figure out if we should redraw any menu items \n                for (unsigned long i = 0; i < items.size(); ++i)\n                {\n                    if (items[i]->has_click_event() || submenus[i])\n                    {\n                        if (line_rects[i].contains(x,y))\n                        {\n                            selected_item = i;\n                            break;\n                        }\n                    }\n                }\n\n                // if we found a rectangle that contains the mouse then\n                // tell it to redraw itself\n                if (selected_item != submenus.size())\n                {\n                    display_selected_submenu();\n                    invalidate_rectangle(line_rects[selected_item]);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    close_submenu (\n    )\n    {\n        if (selected_item != submenus.size() && submenus[selected_item] && submenu_open)\n        {\n            submenus[selected_item]->hide();\n            submenu_open = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool popup_menu::\n    display_selected_submenu (\n    )\n    {\n        // show the submenu if one exists\n        if (selected_item != submenus.size() && submenus[selected_item])\n        {\n            long wx, wy;\n            get_pos(wx,wy);\n            wx += line_rects[selected_item].right();\n            wy += line_rects[selected_item].top();\n            submenus[selected_item]->set_pos(wx+1,wy-2);\n            submenus[selected_item]->show();\n            submenu_open = true;\n            return true;\n        }\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    on_mouse_leave (\n    )\n    {\n        if (selected_item != submenus.size())\n        {\n            // only unhighlight a menu item if it isn't a submenu item\n            if (submenus[selected_item] == 0)\n            {\n                invalidate_rectangle(line_rects[selected_item]);\n                selected_item = submenus.size();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu::\n    paint (\n        const canvas& c\n    )\n    {\n        c.fill(200,200,200);\n        draw_rectangle(c, win_rect);\n        for (unsigned long i = 0; i < items.size(); ++i)\n        {\n            bool is_selected = false;\n            if (selected_item != submenus.size() && i == selected_item && \n                item_enabled[i])\n                is_selected = true;\n\n            items[i]->draw_background(c,line_rects[i], item_enabled[i], is_selected);\n            items[i]->draw_left(c,left_rects[i], item_enabled[i], is_selected);\n            items[i]->draw_middle(c,middle_rects[i], item_enabled[i], is_selected);\n            items[i]->draw_right(c,right_rects[i], item_enabled[i], is_selected);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//              class zoomable_region\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    zoomable_region::\n    zoomable_region (\n        drawable_window& w,\n        unsigned long events \n    ) :\n        drawable(w,MOUSE_CLICK | MOUSE_WHEEL | MOUSE_MOVE | events),\n        min_scale(0.15),\n        max_scale(1.0),\n        zoom_increment_(0.90),\n        vsb(w, scroll_bar::VERTICAL),\n        hsb(w, scroll_bar::HORIZONTAL)\n    {\n        scale = 1;\n        mouse_drag_screen = false;\n        style.reset(new scrollable_region_style_default());\n\n        hsb.set_scroll_handler(*this,&zoomable_region::on_h_scroll);\n        vsb.set_scroll_handler(*this,&zoomable_region::on_v_scroll);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    zoomable_region::\n    ~zoomable_region() \n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        auto_mutex M(m);\n        drawable::set_pos(x,y);\n        const long border_size = style->get_border_size();\n        vsb.set_pos(rect.right()-border_size+1-vsb.width(),rect.top()+border_size);\n        hsb.set_pos(rect.left()+border_size,rect.bottom()-border_size+1-hsb.height());\n\n        display_rect_ = rectangle(rect.left()+border_size,\n                                  rect.top()+border_size,\n                                  rect.right()-border_size-vsb.width(),\n                                  rect.bottom()-border_size-hsb.height());\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    set_zoom_increment (\n        double zi\n    )\n    {\n        DLIB_ASSERT(0.0 < zi && zi < 1.0,\n                    \"\\tvoid zoomable_region::set_zoom_increment(zi)\"\n                    << \"\\n\\t the zoom increment must be between 0 and 1\"\n                    << \"\\n\\t zi:   \" << zi\n                    << \"\\n\\t this: \" << this\n        );\n\n        auto_mutex M(m);\n        zoom_increment_ = zi;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double zoomable_region::\n    zoom_increment (\n    ) const\n    {\n        auto_mutex M(m);\n        return zoom_increment_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    set_max_zoom_scale (\n        double ms \n    )\n    {\n        DLIB_ASSERT(ms > 0,\n                    \"\\tvoid zoomable_region::set_max_zoom_scale(ms)\"\n                    << \"\\n\\t the max zoom scale must be greater than 0\"\n                    << \"\\n\\t ms:   \" << ms \n                    << \"\\n\\t this: \" << this\n        );\n\n        auto_mutex M(m);\n        max_scale = ms;\n        if (scale > ms)\n        {\n            scale = max_scale;\n            lr_point = gui_to_graph_space(point(display_rect_.right(),display_rect_.bottom()));\n            redraw_graph();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    set_min_zoom_scale (\n        double ms \n    )\n    {\n        DLIB_ASSERT(ms > 0,\n                    \"\\tvoid zoomable_region::set_min_zoom_scale(ms)\"\n                    << \"\\n\\t the min zoom scale must be greater than 0\"\n                    << \"\\n\\t ms:   \" << ms \n                    << \"\\n\\t this: \" << this\n        );\n\n        auto_mutex M(m);\n        min_scale = ms;\n\n        if (scale < ms)\n        {\n            scale = min_scale;\n        }\n\n        // just call set_size so that everything gets redrawn right\n        set_size(rect.width(), rect.height());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double zoomable_region::\n    min_zoom_scale (\n    ) const\n    {\n        auto_mutex M(m);\n        return min_scale;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double zoomable_region::\n    max_zoom_scale (\n    ) const\n    {\n        auto_mutex M(m);\n        return max_scale;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    set_size (\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        auto_mutex M(m);\n        rectangle old(rect);\n        const long border_size = style->get_border_size();\n        rect = resize_rect(rect,width,height);\n        vsb.set_pos(rect.right()-border_size+1-vsb.width(),  rect.top()+border_size);\n        hsb.set_pos(rect.left()+border_size,  rect.bottom()-border_size+1-hsb.height());\n\n        display_rect_ = rectangle(rect.left()+border_size,\n                                  rect.top()+border_size,\n                                  rect.right()-border_size-vsb.width(),\n                                  rect.bottom()-border_size-hsb.height());\n        vsb.set_length(display_rect_.height());\n        hsb.set_length(display_rect_.width());\n        parent.invalidate_rectangle(rect+old);\n\n        const double old_scale = scale;\n        const vector<double,2> old_gr_orig(gr_orig);\n        scale = min_scale;\n        gr_orig = vector<double,2>(0,0);\n        lr_point = gui_to_graph_space(point(display_rect_.right(),display_rect_.bottom()));\n        scale = old_scale;\n\n        // call adjust_origin() so that the scroll bars get their max slider positions\n        // setup right\n        const point rect_corner(display_rect_.left(), display_rect_.top());\n        adjust_origin(rect_corner, old_gr_orig);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    show (\n    )\n    {\n        auto_mutex M(m);\n        drawable::show();\n        hsb.show();\n        vsb.show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    hide (\n    )\n    {\n        auto_mutex M(m);\n        drawable::hide();\n        hsb.hide();\n        vsb.hide();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    enable (\n    )\n    {\n        auto_mutex M(m);\n        drawable::enable();\n        hsb.enable();\n        vsb.enable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    disable (\n    )\n    {\n        auto_mutex M(m);\n        drawable::disable();\n        hsb.disable();\n        vsb.disable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    set_z_order (\n        long order\n    )\n    {\n        auto_mutex M(m);\n        drawable::set_z_order(order);\n        hsb.set_z_order(order);\n        vsb.set_z_order(order);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    point zoomable_region::\n    graph_to_gui_space (\n        const vector<double,2>& p\n    ) const\n    {\n        const point rect_corner(display_rect_.left(), display_rect_.top());\n        return (p - gr_orig)*scale + rect_corner;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    vector<double,2> zoomable_region::\n    gui_to_graph_space (\n        const point& p\n    ) const\n    {\n        const point rect_corner(display_rect_.left(), display_rect_.top());\n        return (p - rect_corner)/scale + gr_orig;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    point zoomable_region::\n    max_graph_point (\n    ) const\n    {\n        return lr_point;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle zoomable_region::\n    display_rect (\n    ) const \n    {\n        return display_rect_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double zoomable_region::\n    zoom_scale (\n    ) const\n    {\n        return scale;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    set_zoom_scale (\n        double new_scale\n    )\n    {\n        // if new_scale isn't in the right range then put it back in range before we do the \n        // rest of this function\n        if (!(min_scale <= new_scale && new_scale <= max_scale))\n        {\n            if (new_scale > max_scale)\n                new_scale = max_scale;\n            else\n                new_scale = min_scale;\n        }\n\n        // find the point in the center of the graph area\n        point center((display_rect_.left()+display_rect_.right())/2,  (display_rect_.top()+display_rect_.bottom())/2);\n        point graph_p(gui_to_graph_space(center));\n        scale = new_scale;\n        adjust_origin(center, graph_p);\n        redraw_graph();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    center_display_at_graph_point (\n        const vector<double,2>& p\n    )\n    {\n        // find the point in the center of the graph area\n        point center((display_rect_.left()+display_rect_.right())/2,  (display_rect_.top()+display_rect_.bottom())/2);\n        adjust_origin(center, p);\n        redraw_graph();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    on_wheel_down (\n        unsigned long \n    )\n    {\n        // zoom out\n        if (enabled && !hidden && scale > min_scale && display_rect_.contains(lastx,lasty))\n        {\n            point gui_p(lastx,lasty);\n            point graph_p(gui_to_graph_space(gui_p));\n            const double old_scale = scale;\n            scale *= zoom_increment_;\n            if (scale < min_scale)\n                scale = min_scale;\n            redraw_graph(); \n            adjust_origin(gui_p, graph_p);\n\n            if (scale != old_scale)\n                on_view_changed();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    on_wheel_up (\n        unsigned long \n    )\n    {\n        // zoom in \n        if (enabled && !hidden && scale < max_scale  && display_rect_.contains(lastx,lasty))\n        {\n            point gui_p(lastx,lasty);\n            point graph_p(gui_to_graph_space(gui_p));\n            const double old_scale = scale;\n            scale /= zoom_increment_;\n            if (scale > max_scale)\n                scale = max_scale;\n            redraw_graph(); \n            adjust_origin(gui_p, graph_p);\n\n            if (scale != old_scale)\n                on_view_changed();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    on_mouse_move (\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        if (enabled && !hidden && mouse_drag_screen)\n        {\n            adjust_origin(point(x,y), drag_screen_point);\n            redraw_graph();\n            on_view_changed();\n        }\n\n        // check if the mouse isn't being dragged anymore\n        if ((state & base_window::LEFT) == 0)\n        {\n            mouse_drag_screen = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    on_mouse_up (\n        unsigned long ,\n        unsigned long ,\n        long ,\n        long \n    )\n    {\n        mouse_drag_screen = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long ,\n        long x,\n        long y,\n        bool \n    )\n    {\n        if (enabled && !hidden && display_rect_.contains(x,y) && btn == base_window::LEFT)\n        {\n            mouse_drag_screen = true;\n            drag_screen_point = gui_to_graph_space(point(x,y));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    draw (\n        const canvas& c\n    ) const\n    {\n        style->draw_scrollable_region_border(c, rect, enabled);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    on_h_scroll (\n    )\n    {\n        gr_orig.x() = hsb.slider_pos();\n        redraw_graph();\n\n        on_view_changed();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    on_v_scroll (\n    )\n    {\n        gr_orig.y() = vsb.slider_pos();\n        redraw_graph();\n\n        on_view_changed();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    redraw_graph (\n    )\n    {\n        parent.invalidate_rectangle(display_rect_);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void zoomable_region::\n    adjust_origin (\n        const point& gui_p,\n        const vector<double,2>& graph_p\n    )\n    {\n        const point rect_corner(display_rect_.left(), display_rect_.top());\n        const dlib::vector<double,2> v(gui_p - rect_corner);\n        gr_orig = graph_p - v/scale;\n\n\n        // make sure the origin isn't outside the point (0,0)\n        if (gr_orig.x() < 0)\n            gr_orig.x() = 0;\n        if (gr_orig.y() < 0)\n            gr_orig.y() = 0;\n\n        // make sure the lower right corner of the display_rect_ doesn't map to a point beyond lr_point\n        point lr_rect_corner(display_rect_.right(), display_rect_.bottom());\n        point p = graph_to_gui_space(lr_point);\n        vector<double,2> lr_rect_corner_graph_space(gui_to_graph_space(lr_rect_corner));\n        vector<double,2> delta(lr_point - lr_rect_corner_graph_space);\n        if (lr_rect_corner.x() > p.x())\n        {\n            gr_orig.x() += delta.x();\n        }\n\n        if (lr_rect_corner.y() > p.y())\n        {\n            gr_orig.y() += delta.y();\n        }\n\n\n        const vector<double,2> ul_rect_corner_graph_space(gui_to_graph_space(rect_corner));\n        lr_rect_corner_graph_space = gui_to_graph_space(lr_rect_corner);\n        // now adjust the scroll bars\n\n        hsb.set_max_slider_pos((unsigned long)std::max(lr_point.x()-(lr_rect_corner_graph_space.x()-ul_rect_corner_graph_space.x()),0.0));\n        vsb.set_max_slider_pos((unsigned long)std::max(lr_point.y()-(lr_rect_corner_graph_space.y()-ul_rect_corner_graph_space.y()),0.0));\n        // adjust slider position now.  \n        hsb.set_slider_pos(static_cast<long>(ul_rect_corner_graph_space.x()));\n        vsb.set_slider_pos(static_cast<long>(ul_rect_corner_graph_space.y()));\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//              class scrollable_region\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    scrollable_region::\n    scrollable_region (\n        drawable_window& w,\n        unsigned long events \n    ) :\n        drawable(w, MOUSE_WHEEL|events|MOUSE_CLICK|MOUSE_MOVE),\n        hsb(w,scroll_bar::HORIZONTAL),\n        vsb(w,scroll_bar::VERTICAL),\n        hscroll_bar_inc(1),\n        vscroll_bar_inc(1),\n        h_wheel_scroll_bar_inc(1),\n        v_wheel_scroll_bar_inc(1),\n        mouse_drag_enabled_(false),\n        user_is_dragging_mouse(false)\n    {\n        style.reset(new scrollable_region_style_default());\n\n        hsb.set_scroll_handler(*this,&scrollable_region::on_h_scroll);\n        vsb.set_scroll_handler(*this,&scrollable_region::on_v_scroll);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    scrollable_region::\n    ~scrollable_region (\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    show (\n    )\n    {\n        auto_mutex M(m);\n        drawable::show();\n        if (need_h_scroll())\n            hsb.show();\n        if (need_v_scroll())\n            vsb.show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    hide (\n    )\n    {\n        auto_mutex M(m);\n        drawable::hide();\n        hsb.hide();\n        vsb.hide();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    enable (\n    )\n    {\n        auto_mutex M(m);\n        drawable::enable();\n        hsb.enable();\n        vsb.enable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    disable (\n    )\n    {\n        auto_mutex M(m);\n        drawable::disable();\n        hsb.disable();\n        vsb.disable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_z_order (\n        long order\n    )\n    {\n        auto_mutex M(m);\n        drawable::set_z_order(order);\n        hsb.set_z_order(order);\n        vsb.set_z_order(order);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_size (\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        auto_mutex M(m);\n        rectangle old(rect);\n        rect = resize_rect(rect,width,height);\n        vsb.set_pos(rect.right()-style->get_border_size()-vsb.width()+1, rect.top()+style->get_border_size());\n        hsb.set_pos(rect.left()+style->get_border_size(), rect.bottom()-style->get_border_size()-hsb.height()+1);\n\n        // adjust the display_rect_\n        if (need_h_scroll() && need_v_scroll())\n        {\n            // both scroll bars aren't hidden\n            if (!hidden)\n            {\n                vsb.show();\n                hsb.show();\n            }\n            display_rect_ = rectangle( rect.left()+style->get_border_size(),\n                                       rect.top()+style->get_border_size(),\n                                       rect.right()-style->get_border_size()-vsb.width(),\n                                       rect.bottom()-style->get_border_size()-hsb.height());\n\n            // figure out how many scroll bar positions there should be\n            unsigned long hdelta = total_rect_.width()-display_rect_.width();\n            unsigned long vdelta = total_rect_.height()-display_rect_.height();\n            hdelta = (hdelta+hscroll_bar_inc-1)/hscroll_bar_inc;\n            vdelta = (vdelta+vscroll_bar_inc-1)/vscroll_bar_inc;\n\n            hsb.set_max_slider_pos(hdelta);\n            vsb.set_max_slider_pos(vdelta);\n\n            vsb.set_jump_size((display_rect_.height()+vscroll_bar_inc-1)/vscroll_bar_inc/2+1);\n            hsb.set_jump_size((display_rect_.width()+hscroll_bar_inc-1)/hscroll_bar_inc/2+1);\n        }\n        else if (need_h_scroll())\n        {\n            // only hsb is hidden \n            if (!hidden)\n            {\n                hsb.show();\n                vsb.hide();\n            }\n            display_rect_ = rectangle( rect.left()+style->get_border_size(),\n                                       rect.top()+style->get_border_size(),\n                                       rect.right()-style->get_border_size(),\n                                       rect.bottom()-style->get_border_size()-hsb.height());\n\n            // figure out how many scroll bar positions there should be\n            unsigned long hdelta = total_rect_.width()-display_rect_.width();\n            hdelta = (hdelta+hscroll_bar_inc-1)/hscroll_bar_inc;\n\n            hsb.set_max_slider_pos(hdelta);\n            vsb.set_max_slider_pos(0);\n\n            hsb.set_jump_size((display_rect_.width()+hscroll_bar_inc-1)/hscroll_bar_inc/2+1);\n        }\n        else if (need_v_scroll())\n        {\n            // only vsb is hidden \n            if (!hidden)\n            {\n                hsb.hide();\n                vsb.show();\n            }\n            display_rect_ = rectangle( rect.left()+style->get_border_size(),\n                                       rect.top()+style->get_border_size(),\n                                       rect.right()-style->get_border_size()-vsb.width(),\n                                       rect.bottom()-style->get_border_size());\n\n            unsigned long vdelta = total_rect_.height()-display_rect_.height();\n            vdelta = (vdelta+vscroll_bar_inc-1)/vscroll_bar_inc;\n\n            hsb.set_max_slider_pos(0);\n            vsb.set_max_slider_pos(vdelta);\n\n            vsb.set_jump_size((display_rect_.height()+vscroll_bar_inc-1)/vscroll_bar_inc/2+1);\n        }\n        else\n        {\n            // both are hidden \n            if (!hidden)\n            {\n                hsb.hide();\n                vsb.hide();\n            }\n            display_rect_ = rectangle( rect.left()+style->get_border_size(),\n                                       rect.top()+style->get_border_size(),\n                                       rect.right()-style->get_border_size(),\n                                       rect.bottom()-style->get_border_size());\n\n            hsb.set_max_slider_pos(0);\n            vsb.set_max_slider_pos(0);\n        }\n\n        vsb.set_length(display_rect_.height());\n        hsb.set_length(display_rect_.width());\n\n        // adjust the total_rect_ position by trigging the scroll events\n        on_h_scroll();\n        on_v_scroll();\n\n        parent.invalidate_rectangle(rect+old);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long scrollable_region::\n    horizontal_mouse_wheel_scroll_increment (\n    ) const\n    {\n        auto_mutex M(m);\n        return h_wheel_scroll_bar_inc;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long scrollable_region::\n    vertical_mouse_wheel_scroll_increment (\n    ) const\n    {\n        auto_mutex M(m);\n        return v_wheel_scroll_bar_inc;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_horizontal_mouse_wheel_scroll_increment (\n        unsigned long inc\n    )\n    {\n        auto_mutex M(m);\n        h_wheel_scroll_bar_inc = inc;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_vertical_mouse_wheel_scroll_increment (\n        unsigned long inc\n    )\n    {\n        auto_mutex M(m);\n        v_wheel_scroll_bar_inc = inc;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long scrollable_region::\n    horizontal_scroll_increment (\n    ) const\n    {\n        auto_mutex M(m);\n        return hscroll_bar_inc;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long scrollable_region::\n    vertical_scroll_increment (\n    ) const\n    {\n        auto_mutex M(m);\n        return vscroll_bar_inc;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_horizontal_scroll_increment (\n        unsigned long inc\n    )\n    {\n        auto_mutex M(m);\n        hscroll_bar_inc = inc;\n        // call set_size to reset the scroll bars\n        set_size(rect.width(),rect.height());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_vertical_scroll_increment (\n        unsigned long inc\n    )\n    {\n        auto_mutex M(m);\n        vscroll_bar_inc = inc;\n        // call set_size to reset the scroll bars\n        set_size(rect.width(),rect.height());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long scrollable_region::\n    horizontal_scroll_pos (\n    ) const\n    {\n        auto_mutex M(m);\n        return hsb.slider_pos();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long scrollable_region::\n    vertical_scroll_pos (\n    ) const\n    {\n        auto_mutex M(m);\n        return vsb.slider_pos();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_horizontal_scroll_pos (\n        long pos\n    )\n    {\n        auto_mutex M(m);\n\n        hsb.set_slider_pos(pos);\n        on_h_scroll();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_vertical_scroll_pos (\n        long pos\n    )\n    {\n        auto_mutex M(m);\n\n        vsb.set_slider_pos(pos);\n        on_v_scroll();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        auto_mutex M(m);\n        drawable::set_pos(x,y);\n        vsb.set_pos(rect.right()-style->get_border_size()-vsb.width()+1, rect.top()+style->get_border_size());\n        hsb.set_pos(rect.left()+style->get_border_size(), rect.bottom()-style->get_border_size()-hsb.height()+1);\n\n        const long delta_x = total_rect_.left() - display_rect_.left();\n        const long delta_y = total_rect_.top() - display_rect_.top();\n\n        display_rect_ = move_rect(display_rect_, rect.left()+style->get_border_size(), rect.top()+style->get_border_size());\n\n        total_rect_ = move_rect(total_rect_, display_rect_.left()+delta_x, display_rect_.top()+delta_y);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool scrollable_region::\n    mouse_drag_enabled (\n    ) const\n    {\n        auto_mutex M(m);\n        return mouse_drag_enabled_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    enable_mouse_drag (\n    )\n    {\n        auto_mutex M(m);\n        mouse_drag_enabled_ = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    disable_mouse_drag (\n    )\n    {\n        auto_mutex M(m);\n        mouse_drag_enabled_ = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle& scrollable_region::\n    display_rect (\n    ) const\n    {\n        return display_rect_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    set_total_rect_size (\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        DLIB_ASSERT((width > 0 && height > 0) || (width == 0 && height == 0),\n                    \"\\tvoid scrollable_region::set_total_rect_size(width,height)\"\n                    << \"\\n\\twidth and height must be > 0 or both == 0\"\n                    << \"\\n\\twidth:  \" << width \n                    << \"\\n\\theight: \" << height \n                    << \"\\n\\tthis: \" << this\n        );\n\n        total_rect_ = move_rect(rectangle(width,height), \n                                display_rect_.left()-static_cast<long>(hsb.slider_pos()),\n                                display_rect_.top()-static_cast<long>(vsb.slider_pos()));\n\n        // call this just to reconfigure the scroll bars\n        set_size(rect.width(),rect.height());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const rectangle& scrollable_region::\n    total_rect (\n    ) const\n    {\n        return total_rect_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    scroll_to_rect (\n        const rectangle& r_\n    )\n    {\n        const rectangle r(total_rect_.intersect(r_));\n        const rectangle old(total_rect_);\n        // adjust the horizontal scroll bar so that r fits as best as possible\n        if (r.left() < display_rect_.left())\n        {\n            long distance = (r.left()-total_rect_.left())/hscroll_bar_inc;\n            hsb.set_slider_pos(distance);\n        }\n        else if (r.right() > display_rect_.right())\n        {\n            long distance = (r.right()-total_rect_.left()-display_rect_.width()+hscroll_bar_inc)/hscroll_bar_inc;\n            hsb.set_slider_pos(distance);\n        }\n\n        // adjust the vertical scroll bar so that r fits as best as possible\n        if (r.top() < display_rect_.top())\n        {\n            long distance = (r.top()-total_rect_.top())/vscroll_bar_inc;\n            vsb.set_slider_pos(distance);\n        }\n        else if (r.bottom() > display_rect_.bottom())\n        {\n            long distance = (r.bottom()-total_rect_.top()-display_rect_.height()+vscroll_bar_inc)/vscroll_bar_inc;\n            vsb.set_slider_pos(distance);\n        }\n\n\n        // adjust total_rect_ so that it matches where the scroll bars are now\n        total_rect_ = move_rect(total_rect_, \n                                display_rect_.left()-hscroll_bar_inc*hsb.slider_pos(), \n                                display_rect_.top()-vscroll_bar_inc*vsb.slider_pos());\n\n        // only redraw if we actually changed something\n        if (total_rect_ != old)\n        {\n            parent.invalidate_rectangle(display_rect_);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    on_wheel_down (\n        unsigned long \n    )\n    {\n        if (rect.contains(lastx,lasty) && enabled && !hidden)\n        {\n            if (need_v_scroll())\n            {\n                long pos = vsb.slider_pos();\n                vsb.set_slider_pos(pos+(long)v_wheel_scroll_bar_inc);\n                on_v_scroll();\n            }\n            else if (need_h_scroll())\n            {\n                long pos = hsb.slider_pos();\n                hsb.set_slider_pos(pos+(long)h_wheel_scroll_bar_inc);\n                on_h_scroll();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    on_mouse_move (\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        if (enabled && !hidden && user_is_dragging_mouse && state==base_window::LEFT)\n        {\n            point current_delta = point(x,y) - point(total_rect().left(), total_rect().top());\n            rectangle new_rect(translate_rect(display_rect(), drag_origin - current_delta));\n            new_rect = centered_rect(new_rect, new_rect.width()-hscroll_bar_inc, new_rect.height()-vscroll_bar_inc);\n            scroll_to_rect(new_rect);\n            on_view_changed();\n        }\n        else\n        {\n            user_is_dragging_mouse = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long ,\n        long x,\n        long y,\n        bool \n    )\n    {\n        if (mouse_drag_enabled_ && enabled && !hidden && display_rect().contains(x,y) && (btn==base_window::LEFT))\n        {\n            drag_origin = point(x,y) - point(total_rect().left(), total_rect().top());\n            user_is_dragging_mouse = true;\n        }\n        else\n        {\n            user_is_dragging_mouse = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    on_mouse_up   (\n        unsigned long ,\n        unsigned long ,\n        long ,\n        long \n    )\n    {\n        user_is_dragging_mouse = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    on_wheel_up (\n        unsigned long \n    )\n    {\n        if (rect.contains(lastx,lasty) && enabled && !hidden)\n        {\n            if (need_v_scroll())\n            {\n                long pos = vsb.slider_pos();\n                vsb.set_slider_pos(pos-(long)v_wheel_scroll_bar_inc);\n                on_v_scroll();\n            }\n            else if (need_h_scroll())\n            {\n                long pos = hsb.slider_pos();\n                hsb.set_slider_pos(pos-(long)h_wheel_scroll_bar_inc);\n                on_h_scroll();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    draw (\n        const canvas& c\n    ) const\n    {\n        style->draw_scrollable_region_border(c, rect, enabled);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool scrollable_region::\n    need_h_scroll (\n    ) const\n    {\n        if (total_rect_.width() > rect.width()-style->get_border_size()*2)\n        {\n            return true;\n        }\n        else\n        {\n            // check if we would need a vertical scroll bar and if adding one would make us need\n            // a horizontal one\n            if (total_rect_.height() > rect.height()-style->get_border_size()*2 && \n                total_rect_.width() > rect.width()-style->get_border_size()*2-vsb.width())\n                return true;\n            else\n                return false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool scrollable_region::\n    need_v_scroll (\n    ) const\n    {\n        if (total_rect_.height() > rect.height()-style->get_border_size()*2)\n        {\n            return true;\n        }\n        else\n        {\n            // check if we would need a horizontal scroll bar and if adding one would make us need\n            // a vertical_scroll_pos one\n            if (total_rect_.width() > rect.width()-style->get_border_size()*2 && \n                total_rect_.height() > rect.height()-style->get_border_size()*2-hsb.height())\n                return true;\n            else\n                return false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    on_h_scroll (\n    )\n    {\n        total_rect_ = move_rect(total_rect_, display_rect_.left()-hscroll_bar_inc*hsb.slider_pos(), total_rect_.top());\n        parent.invalidate_rectangle(display_rect_);\n        if (events_are_enabled())\n            on_view_changed();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scrollable_region::\n    on_v_scroll (\n    )\n    {\n        total_rect_ = move_rect(total_rect_, total_rect_.left(), display_rect_.top()-vscroll_bar_inc*vsb.slider_pos());\n        parent.invalidate_rectangle(display_rect_);\n        if (events_are_enabled())\n            on_view_changed();\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// class popup_menu_region \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    popup_menu_region::\n    popup_menu_region(  \n        drawable_window& w\n    ) :\n        drawable(w,MOUSE_CLICK | KEYBOARD_EVENTS | FOCUS_EVENTS | WINDOW_MOVED),\n        popup_menu_shown(false)\n    {\n\n        menu_.set_on_hide_handler(*this,&popup_menu_region::on_menu_becomes_hidden);\n        enable_events();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    popup_menu_region::\n    ~popup_menu_region(\n    )\n    { \n        disable_events();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    set_size (\n        unsigned long width, \n        unsigned long height\n    )\n    {\n        auto_mutex M(m);\n        rect = resize_rect(rect,width,height);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    set_rect (\n        const rectangle& new_rect\n    )\n    {\n        auto_mutex M(m);\n        rect = new_rect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    popup_menu& popup_menu_region::\n    menu (\n    )\n    {\n        return menu_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    hide (\n    )\n    {\n        auto_mutex M(m);\n        drawable::hide();\n        menu_.hide();\n        popup_menu_shown = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    disable (\n    )\n    {\n        auto_mutex M(m);\n        drawable::disable();\n        menu_.hide();\n        popup_menu_shown = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    on_keydown (\n        unsigned long key,\n        bool is_printable,\n        unsigned long state\n    )\n    {\n        if (enabled && !hidden && popup_menu_shown)\n        {\n            menu_.forwarded_on_keydown(key, is_printable, state);\n        }\n        else if (popup_menu_shown)\n        {\n            menu_.hide();\n            popup_menu_shown = false;\n        }\n\n        if (key == (unsigned long)base_window::KEY_ESC)\n        {\n            menu_.hide();\n            popup_menu_shown = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    on_menu_becomes_hidden (\n    )\n    {\n        popup_menu_shown = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    on_focus_lost (\n    )\n    {\n        if (popup_menu_shown)\n        {\n            menu_.hide();\n            popup_menu_shown = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    on_focus_gained (\n    )\n    {\n        if (popup_menu_shown)\n        {\n            menu_.hide();\n            popup_menu_shown = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    on_window_moved(\n    )\n    {\n        if (popup_menu_shown)\n        {\n            menu_.hide();\n            popup_menu_shown = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long ,\n        long x,\n        long y,\n        bool \n    )\n    {\n        if (enabled && !hidden && rect.contains(x,y) && btn == base_window::RIGHT)\n        {\n            long orig_x, orig_y;\n            parent.get_pos(orig_x, orig_y);\n            menu_.set_pos(orig_x+x, orig_y+y);\n            menu_.show();\n            popup_menu_shown = true;\n        }\n        else if (popup_menu_shown)\n        {\n            menu_.hide();\n            popup_menu_shown = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void popup_menu_region::\n    draw (\n        const canvas& \n    ) const\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BASE_WIDGETs_CPP_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/base_widgets.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#ifndef DLIB_BASE_WIDGETs_\n#define DLIB_BASE_WIDGETs_\n\n#include \"base_widgets_abstract.h\"\n#include \"drawable.h\"\n#include \"../gui_core.h\"\n#include \"../algs.h\"\n#include \"../member_function_pointer.h\"\n#include \"../timer.h\"\n#include \"../map.h\"\n#include \"../set.h\"\n#include \"../array2d.h\"\n#include \"../pixel.h\"\n#include \"../image_transforms/assign_image.h\"\n#include \"../array.h\" \n#include \"style.h\"\n#include \"../smart_pointers.h\"\n#include \"../unicode.h\"\n#include <cctype>\n#include \"../any.h\"\n\n\nnamespace dlib\n{\n\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class draggable\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class draggable : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                - drag == false\n\n            CONVENTION\n                - if (the user is holding the left button down over this object) then\n                    - drag == true\n                    - x == the x position of the mouse relative to the upper left corner\n                      of this object.\n                    - y == the y position of the mouse relative to the upper left corner\n                      of this object.\n                - else\n                    - drag == false\n        !*/\n\n    public:\n\n        draggable(  \n            drawable_window& w,\n            unsigned long events = 0\n        ) : \n            drawable(w,events | MOUSE_MOVE | MOUSE_CLICK),\n            drag(false)\n        {}\n\n        virtual ~draggable(\n        ) = 0;\n\n        rectangle draggable_area (\n        ) const { auto_mutex M(m); return area; }\n\n        void set_draggable_area (\n            const rectangle& area_ \n        ) { auto_mutex M(m); area = area_; } \n\n    protected:\n\n        bool is_being_dragged (\n        ) const { return drag; }\n\n        virtual void on_drag (\n        ){}\n\n        virtual void on_drag_stop (\n        ){}\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long ,\n            long x,\n            long y,\n            bool \n        );\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        );\n\n    private:\n\n        rectangle area;\n        bool drag;\n        long x, y;\n\n        // restricted functions\n        draggable(draggable&);        // copy constructor\n        draggable& operator=(draggable&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class mouse_over_event \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class mouse_over_event : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                - is_mouse_over_ == false\n\n            CONVENTION\n                - is_mouse_over_ == is_mouse_over()\n        !*/\n\n    public:\n\n        mouse_over_event(  \n            drawable_window& w,\n            unsigned long events = 0\n        ) :\n            drawable(w,events | MOUSE_MOVE),\n            is_mouse_over_(false)\n        {}\n\n\n        virtual ~mouse_over_event(\n        ) = 0;\n\n        int next_free_user_event_number() const\n        {\n            return drawable::next_free_user_event_number()+1;\n        }\n\n    protected:\n\n        bool is_mouse_over (\n        ) const;\n\n        virtual void on_mouse_over (\n        ){}\n\n        virtual void on_mouse_not_over (\n        ){}\n\n        void on_mouse_leave (\n        );\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_user_event (\n            int num\n        );\n\n    private:\n        mutable bool is_mouse_over_;\n\n        // restricted functions\n        mouse_over_event(mouse_over_event&);        // copy constructor\n        mouse_over_event& operator=(mouse_over_event&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class button_action \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class button_action : public mouse_over_event \n    {\n        /*!\n            INITIAL VALUE\n                - is_depressed_ == false\n                - seen_click == false\n\n            CONVENTION\n                - is_depressed_ == is_depressed()\n                - if (the user has clicked the button but hasn't yet released the\n                      left mouse button) then\n                    - seen_click == true\n                - else \n                    - seen_click == false\n        !*/\n\n    public:\n\n        button_action(  \n            drawable_window& w,\n            unsigned long events = 0\n        ) :\n            mouse_over_event(w,events | MOUSE_MOVE | MOUSE_CLICK),\n            is_depressed_(false),\n            seen_click(false)\n        {}\n\n\n        virtual ~button_action(\n        ) = 0;\n\n        int next_free_user_event_number() const\n        {\n            return mouse_over_event::next_free_user_event_number()+1;\n        }\n\n    protected:\n\n        bool is_depressed (\n        ) const;\n\n        virtual void on_button_down (\n        ){}\n\n        virtual void on_button_up (\n            bool \n        ){}\n\n        void on_mouse_not_over (\n        );\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long ,\n            long x,\n            long y,\n            bool\n        );\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long,\n            long x,\n            long y\n        );\n\n\n    private:\n        mutable bool is_depressed_;\n        bool seen_click;\n\n        void on_user_event (\n            int num\n        );\n\n        // restricted functions\n        button_action(button_action&);        // copy constructor\n        button_action& operator=(button_action&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class widget_group \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class widget_group : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                widgets.size() == 0\n\n            CONVENTION\n                - widgets contains all the drawable objects and their relative positions\n                  that are in *this.\n                - wg_widgets contains pointers to just the widgets that happen\n                  to be widget_group objects.  \n        !*/\n\n        struct relpos\n        {\n            unsigned long x;\n            unsigned long y;\n        };\n\n    public:\n        widget_group(  \n            drawable_window& w\n        ) : drawable(w) { rect = rectangle(0,0,-1,-1); enable_events();}\n\n        virtual ~widget_group(\n        ){ disable_events(); }\n\n        void empty (\n        );\n\n        void add (\n            drawable& widget,\n            unsigned long x,\n            unsigned long y\n        );\n\n        void add (\n            widget_group& widget,\n            unsigned long x,\n            unsigned long y\n        );\n\n        bool is_member (\n            const drawable& widget\n        ) const;\n\n        void remove (\n            const drawable& widget\n        );\n\n        unsigned long size (\n        ) const; \n\n        void set_pos (\n            long x,\n            long y\n        );\n\n        void set_z_order (\n            long order\n        );\n\n        void show (\n        );\n\n        void hide (\n        );\n\n        void enable (\n        );\n\n        void disable (\n        );\n\n        void fit_to_contents (\n        );\n\n    protected:\n\n        // this object doesn't draw anything but also isn't abstract\n        void draw (\n            const canvas& \n        ) const {}\n\n    private:\n\n        map<drawable*,relpos>::kernel_1a_c widgets;\n        set<widget_group*>::kernel_1a_c wg_widgets;\n\n\n        // restricted functions\n        widget_group(widget_group&);        // copy constructor\n        widget_group& operator=(widget_group&);    // assignment operator\n    };\n\n\n// ----------------------------------------------------------------------------------------\n\n    class image_widget : public draggable\n    {\n        /*!\n            INITIAL VALUE\n                - img.size() == 0\n\n            CONVENTION\n                - img == the image this object displays\n        !*/\n\n    public:\n\n        image_widget(  \n            drawable_window& w\n        ): draggable(w)  { enable_events(); }\n\n        ~image_widget(\n        )\n        {\n            disable_events();\n            parent.invalidate_rectangle(rect); \n        }\n\n        template <\n            typename image_type\n            >\n        void set_image (\n            const image_type& new_img\n        )\n        {\n            auto_mutex M(m);\n            assign_image_scaled(img,new_img);\n            rectangle old(rect);\n            rect.set_right(rect.left()+img.nc()-1); \n            rect.set_bottom(rect.top()+img.nr()-1);\n            parent.invalidate_rectangle(rect+old);\n        }\n\n    private:\n\n        void draw (\n            const canvas& c\n        ) const\n        {\n            rectangle area = rect.intersect(c);\n            if (area.is_empty())\n                return;\n\n            draw_image(c, point(rect.left(),rect.top()), img);\n        }\n\n        array2d<rgb_alpha_pixel> img;\n\n        // restricted functions\n        image_widget(image_widget&);        // copy constructor\n        image_widget& operator=(image_widget&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class tooltip \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class tooltip : public mouse_over_event \n    {\n        /*!\n            INITIAL VALUE\n                - stuff.get() == 0\n                - events_are_enabled() == false\n\n            CONVENTION\n                - if (events_are_enabled() == true) then\n                    - stuff.get() != 0\n        !*/\n\n    public:\n\n        tooltip(  \n            drawable_window& w\n        ) : \n            mouse_over_event(w,MOUSE_CLICK)\n        {}\n\n        ~tooltip(\n        ){ disable_events();}\n\n        void set_size (\n            unsigned long width, \n            unsigned long height \n        )\n        {\n            auto_mutex M(m);\n            rect = resize_rect(rect,width,height);\n        }\n\n\n        void set_text (\n            const std::string& str\n        )\n        {\n            set_text(convert_mbstring_to_wstring(str));\n        }\n\n        void set_text (\n            const std::wstring& str\n        )\n        {\n            set_text(convert_wstring_to_utf32(str));\n        }\n\n        void set_text (\n            const ustring& str\n        )\n        {\n            auto_mutex M(m);\n            if (!stuff)\n            {\n                stuff.reset(new data(*this));\n                enable_events();\n            }\n\n            stuff->win.set_text(str);\n        }\n\n        const std::string text (\n        ) const\n        {\n            return convert_wstring_to_mbstring(wtext());\n        }\n\n        const std::wstring wtext (\n        ) const\n        {\n            return convert_utf32_to_wstring(utext());\n        }\n\n        const dlib::ustring utext (\n        ) const\n        {\n            auto_mutex M(m);\n            dlib::ustring temp;\n            if (stuff)\n            {\n                temp = stuff->win.text;\n            }\n            return temp.c_str();\n        }\n\n        void hide (\n        )\n        {\n            auto_mutex M(m);\n            mouse_over_event::hide();\n            if (stuff)\n            {\n                stuff->tt_timer.stop();\n                stuff->win.hide();\n            }\n        }\n\n        void disable (\n        )\n        {\n            auto_mutex M(m);\n            mouse_over_event::disable();\n            if (stuff)\n            {\n                stuff->tt_timer.stop();\n                stuff->win.hide();\n            }\n        }\n\n    protected:\n\n        void on_mouse_over()\n        {\n            stuff->x = lastx;\n            stuff->y = lasty;\n            stuff->tt_timer.start();\n        }\n\n        void on_mouse_not_over ()\n        {\n            stuff->tt_timer.stop();\n            stuff->win.hide();\n        }\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        )\n        {\n            mouse_over_event::on_mouse_down(btn,state,x,y,is_double_click);\n            stuff->tt_timer.stop();\n            stuff->win.hide();\n        }\n\n        void draw (\n            const canvas& \n        ) const{}\n\n    private:\n\n        class tooltip_window : public base_window \n        {\n        public:\n            tooltip_window (const shared_ptr_thread_safe<font>& f) : base_window(false,true), pad(3), mfont(f)\n            {\n            }\n\n            ustring text;\n            rectangle rect_all;\n            rectangle rect_text;\n            const unsigned long pad;\n            const shared_ptr_thread_safe<font> mfont;\n            \n            void set_text (\n                const std::string& str\n            )\n            {\n                set_text(convert_mbstring_to_wstring(str));\n            }\n\n            void set_text (\n                const std::wstring& str\n            )\n            {\n                set_text(convert_wstring_to_utf32(str));\n            }\n\n            void set_text (\n                const dlib::ustring& str\n            )\n            {\n                text = str.c_str();\n\n                unsigned long width, height;\n                mfont->compute_size(text,width,height);\n\n                set_size(width+pad*2, height+pad*2);\n                rect_all.set_left(0);\n                rect_all.set_top(0);\n                rect_all.set_right(width+pad*2-1);\n                rect_all.set_bottom(height+pad*2-1);\n\n                rect_text = move_rect(rectangle(width,height),pad,pad);\n            }\n\n            void paint(const canvas& c)\n            {\n                c.fill(255,255,150);\n                draw_rectangle(c, rect_all);\n                mfont->draw_string(c,rect_text,text);\n            }\n        };\n\n        void show_tooltip (\n        )\n        {\n            auto_mutex M(m);\n            long x, y;\n            // if the mouse has moved since we started the timer then \n            // keep waiting until the user stops moving it\n            if (lastx != stuff->x || lasty != stuff->y)\n            {\n                stuff->x = lastx;\n                stuff->y = lasty;\n                return;\n            }\n\n            unsigned long display_width, display_height;\n            // stop the timer\n            stuff->tt_timer.stop();\n            parent.get_pos(x,y);\n            x += lastx+15;\n            y += lasty+15;\n\n            // make sure the tooltip isn't going to be off the screen\n            parent.get_display_size(display_width, display_height);\n            rectangle wrect(move_rect(stuff->win.rect_all,x,y));\n            rectangle srect(display_width, display_height); \n            if (srect.contains(wrect) == false)\n            {\n                rectangle temp(srect.intersect(wrect));\n                x -= wrect.width()-temp.width();\n                y -= wrect.height()-temp.height();\n            }\n\n            stuff->win.set_pos(x,y);\n            stuff->win.show();\n        }\n\n        // put all this stuff in data so we can arrange to only\n        // construct it when someone is actually using the tooltip widget \n        // rather than just instantiating it.\n        struct data\n        {\n            data(\n                tooltip& self\n            ) : \n                x(-1), \n                y(-1),\n                win(self.mfont),\n                tt_timer(self,&tooltip::show_tooltip) \n            { \n                tt_timer.set_delay_time(400); \n            }\n\n            long x, y;\n            tooltip_window win;\n            timer<tooltip> tt_timer;\n\n        };\n        friend struct data;\n        scoped_ptr<data> stuff;\n\n\n\n        // restricted functions\n        tooltip(tooltip&);        // copy constructor\n        tooltip& operator=(tooltip&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class button  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class button : public button_action \n    {\n    public:\n        button(\n            drawable_window& w\n        ) : \n            button_action(w),\n            btn_tooltip(w)\n        {\n            style.reset(new button_style_default());\n            enable_events();\n        }\n        \n        ~button() { disable_events(); parent.invalidate_rectangle(style->get_invalidation_rect(rect)); }\n\n        void set_size (\n            unsigned long width,\n            unsigned long height\n        );\n\n        void set_name (\n            const std::string& name_\n        );\n\n        void set_name (\n            const std::wstring& name_\n        );\n\n        void set_name (\n            const dlib::ustring& name_\n        );\n\n        const std::string name (\n        ) const;\n\n        const std::wstring wname (\n        ) const;\n\n        const dlib::ustring uname (\n        ) const;\n\n        void set_tooltip_text (\n            const std::string& text\n        );\n\n        void set_tooltip_text (\n            const std::wstring& text\n        );\n\n        void set_tooltip_text (\n            const dlib::ustring& text\n        );\n\n        void set_pos(\n            long x,\n            long y\n        );\n\n        const std::string tooltip_text (\n        ) const;\n\n        const std::wstring tooltip_wtext (\n        ) const;\n\n        const dlib::ustring tooltip_utext (\n        ) const;\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n        void show (\n        );\n\n        void hide (\n        );\n\n        void enable (\n        );\n\n        void disable (\n        );\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        )\n        {\n            auto_mutex M(m);\n            style.reset(new style_type(style_));\n            rect = move_rect(style->get_min_size(name_,*mfont), rect.left(), rect.top());\n            parent.invalidate_rectangle(style->get_invalidation_rect(rect));\n        }\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler_)()\n        )\n        {\n            auto_mutex M(m);\n            event_handler = make_mfp(object,event_handler_);\n            event_handler_self.clear();\n        }\n\n        void set_click_handler (\n            const any_function<void()>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            event_handler = event_handler_;\n            event_handler_self.clear();\n        }\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler_)(button&)\n        )\n        {\n            auto_mutex M(m);\n            event_handler_self = make_mfp(object,event_handler_);\n            event_handler.clear();\n        }\n\n        void set_sourced_click_handler (\n            const any_function<void(button&)>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            event_handler_self = event_handler_;\n            event_handler.clear();\n        }\n\n        bool is_depressed (\n        ) const\n        {\n            auto_mutex M(m);\n            return button_action::is_depressed();\n        }\n\n        template <\n            typename T\n            >\n        void set_button_down_handler (\n            T& object,\n            void (T::*event_handler)()\n        )\n        {\n            auto_mutex M(m);\n            button_down_handler = make_mfp(object,event_handler);\n        }\n\n        void set_button_down_handler (\n            const any_function<void()>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            button_down_handler = event_handler;\n        }\n\n        template <\n            typename T\n            >\n        void set_button_up_handler (\n            T& object,\n            void (T::*event_handler)(bool mouse_over)\n        )\n        {\n            auto_mutex M(m);\n            button_up_handler = make_mfp(object,event_handler);\n        }\n\n        void set_button_up_handler (\n            const any_function<void(bool)>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            button_up_handler = event_handler;\n        }\n\n        template <\n            typename T\n            >\n        void set_button_down_handler (\n            T& object,\n            void (T::*event_handler)(button&)\n        )\n        {\n            auto_mutex M(m);\n            button_down_handler_self = make_mfp(object,event_handler);\n        }\n\n        void set_sourced_button_down_handler (\n            const any_function<void(button&)>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            button_down_handler_self = event_handler;\n        }\n\n        template <\n            typename T\n            >\n        void set_button_up_handler (\n            T& object,\n            void (T::*event_handler)(bool mouse_over, button&)\n        )\n        {\n            auto_mutex M(m);\n            button_up_handler_self = make_mfp(object,event_handler);\n        }\n\n        void set_sourced_button_up_handler (\n            const any_function<void(bool,button&)>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            button_up_handler_self = event_handler;\n        }\n\n    private:\n\n        // restricted functions\n        button(button&);        // copy constructor\n        button& operator=(button&);    // assignment operator\n\n        dlib::ustring name_;\n        tooltip btn_tooltip;\n\n        any_function<void()> event_handler;\n        any_function<void(button&)> event_handler_self;\n        any_function<void()> button_down_handler;\n        any_function<void(bool)> button_up_handler;\n        any_function<void(button&)> button_down_handler_self;\n        any_function<void(bool,button&)> button_up_handler_self;\n\n        scoped_ptr<button_style> style;\n\n    protected:\n\n        void draw (\n            const canvas& c\n        ) const { style->draw_button(c,rect,enabled,*mfont,lastx,lasty,name_,is_depressed()); }\n\n        void on_button_up (\n            bool mouse_over\n        );\n\n        void on_button_down (\n        );\n\n        void on_mouse_over (\n        ){ if (style->redraw_on_mouse_over()) parent.invalidate_rectangle(style->get_invalidation_rect(rect)); }\n\n        void on_mouse_not_over (\n        ){ if (style->redraw_on_mouse_over()) parent.invalidate_rectangle(style->get_invalidation_rect(rect)); }\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class scroll_bar \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class scroll_bar : public drawable \n    {\n        /*!\n            INITIAL VALUE\n                - ori == a value given by the constructor\n                - style == a scroll_bar_style_default object\n                - pos == 0\n                - max_pos == 0\n                - js == 10\n\n            CONVENTION\n                - ori == orientation()\n                - b1 == the button that is near the 0 end of the scroll bar\n                - b2 == the button that is near the max_pos() end of the scroll bar\n\n                - max_pos == max_slider_pos()\n                - pos == slider_pos()\n                - js == jump_size()\n        !*/\n\n    public:\n        enum bar_orientation \n        {\n            HORIZONTAL,\n            VERTICAL\n        };\n\n        scroll_bar(  \n            drawable_window& w,\n            bar_orientation orientation_\n        );\n\n        virtual ~scroll_bar(\n        );\n\n        bar_orientation orientation (\n        ) const;\n\n        void set_length (\n            unsigned long length\n        );\n\n        long max_slider_pos (\n        ) const;\n\n        void set_max_slider_pos (\n            long mpos\n        );\n\n        void set_slider_pos (\n            long pos\n        );\n\n        long slider_pos (\n        ) const;\n\n        template <\n            typename T\n            >\n        void set_scroll_handler (\n            T& object,\n            void (T::*eh)()\n        ) { auto_mutex M(m); scroll_handler = make_mfp(object,eh); }\n\n        void set_scroll_handler (\n            const any_function<void()>& eh\n        ) { auto_mutex M(m); scroll_handler = eh; }\n\n        void set_pos (\n            long x,\n            long y\n        );\n\n        void enable (\n        )\n        {\n            auto_mutex M(m);\n            if (!hidden)\n                show_slider();\n            if (max_pos != 0)\n            {\n                b1.enable();\n                b2.enable();\n            }\n            drawable::enable();\n        }\n\n        void disable (\n        )\n        {\n            auto_mutex M(m);\n            hide_slider();\n            b1.disable();\n            b2.disable();\n            drawable::disable();\n        }\n            \n        void hide (\n        )\n        {\n            auto_mutex M(m);\n            hide_slider();\n            top_filler.hide();\n            bottom_filler.hide();\n            b1.hide();\n            b2.hide();\n            drawable::hide();\n        }\n            \n        void show (\n        )\n        {\n            auto_mutex M(m);\n            b1.show();\n            b2.show();\n            drawable::show();\n            top_filler.show();\n            if (enabled)\n                show_slider();\n        }\n\n        void set_z_order (\n            long order\n        )\n        {\n            auto_mutex M(m);\n            slider.set_z_order(order);\n            top_filler.set_z_order(order);\n            bottom_filler.set_z_order(order);\n            b1.set_z_order(order);\n            b2.set_z_order(order);\n            drawable::set_z_order(order);\n        }\n\n        void set_jump_size (\n            long js\n        );\n\n        long jump_size (\n        ) const;\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        )\n        {\n            auto_mutex M(m);\n            style.reset(new style_type(style_));\n\n            if (ori == HORIZONTAL)\n            {\n                b1.set_style(style_.get_left_button_style());\n                b2.set_style(style_.get_right_button_style());\n                set_length(rect.width());\n            }\n            else\n            {\n                b1.set_style(style_.get_up_button_style());\n                b2.set_style(style_.get_down_button_style());\n                set_length(rect.height());\n            }\n\n        }\n\n    private:\n\n        void hide_slider (\n        );\n        /*!\n            ensures\n                - hides the slider and makes any other changes needed so that the\n                  scroll_bar still looks right.\n        !*/\n\n        void show_slider (\n        );\n        /*!\n            ensures\n                - shows the slider and makes any other changes needed so that the\n                  scroll_bar still looks right.\n        !*/\n\n\n        void on_slider_drag (\n        ); \n        /*!\n            requires\n                - is called whenever the user drags the slider\n        !*/\n\n        void draw (\n            const canvas& c\n        ) const;\n\n        void b1_down (\n        );\n\n        void b1_up (\n            bool mouse_over\n        );\n\n        void b2_down (\n        );\n\n        void b2_up (\n            bool mouse_over\n        );\n\n        void top_filler_down (\n        );\n\n        void top_filler_up (\n            bool mouse_over\n        );\n\n        void bottom_filler_down (\n        );\n\n        void bottom_filler_up (\n            bool mouse_over\n        );\n\n        void on_user_event (\n            int i\n        );\n\n        void delayed_set_slider_pos (\n            unsigned long dpos\n        );\n\n        void b1_down_t (\n        );\n\n        void b2_down_t (\n        );\n\n        void top_filler_down_t (\n        );\n\n        void bottom_filler_down_t (\n        );\n\n        friend class filler;\n        class filler : public button_action\n        {\n            friend class scroll_bar;\n        public:\n            filler (\n                drawable_window& w,\n                scroll_bar& object,\n                void (scroll_bar::*down)(),\n                void (scroll_bar::*up)(bool)\n            ):\n                button_action(w),\n                my_scroll_bar(object)\n            {\n                bup = make_mfp(object,up);\n                bdown = make_mfp(object,down);\n\n                enable_events();\n            }\n\n            ~filler (\n            )\n            {\n               disable_events();\n            }\n\n            void set_size (\n                unsigned long width,\n                unsigned long height\n            )\n            {\n                rectangle old(rect);\n                const unsigned long x = rect.left();\n                const unsigned long y = rect.top();\n                rect.set_right(x+width-1);\n                rect.set_bottom(y+height-1);\n\n                parent.invalidate_rectangle(rect+old);\n            }\n\n        private:\n\n            void draw (\n                const canvas& c\n            ) const\n            {\n                my_scroll_bar.style->draw_scroll_bar_background(c,rect,enabled,lastx,lasty,is_depressed());\n            }\n\n            void on_button_down (\n            ) { bdown(); } \n\n            void on_button_up (\n                bool mouse_over\n            ) { bup(mouse_over); } \n\n            scroll_bar& my_scroll_bar;\n            any_function<void()> bdown;\n            any_function<void(bool)> bup;\n        };\n\n        friend class slider_class;\n        class slider_class : public draggable\n        {\n            friend class scroll_bar;\n        public:\n            slider_class ( \n                drawable_window& w,\n                scroll_bar& object,\n                void (scroll_bar::*handler)()\n            ) :\n                draggable(w, MOUSE_MOVE),\n                mouse_in_widget(false),\n                my_scroll_bar(object)\n            {\n                callback = make_mfp(object,handler);\n                enable_events();\n            }\n\n            ~slider_class (\n            )\n            {\n               disable_events();\n            }\n\n            void set_size (\n                unsigned long width,\n                unsigned long height\n            )\n            {\n                rectangle old(rect);\n                const unsigned long x = rect.left();\n                const unsigned long y = rect.top();\n                rect.set_right(x+width-1);\n                rect.set_bottom(y+height-1);\n\n                parent.invalidate_rectangle(rect+old);\n            }\n\n        private:\n            virtual void on_mouse_move (\n                unsigned long state,\n                long x,\n                long y\n            )\n            {\n                draggable::on_mouse_move(state,x,y);\n                if (!hidden && my_scroll_bar.style->redraw_on_mouse_over_slider())\n                {\n                    if (rect.contains(x,y) && !mouse_in_widget)\n                    {\n                        mouse_in_widget = true;\n                        parent.invalidate_rectangle(rect);\n                    }\n                    else if (rect.contains(x,y) == false && mouse_in_widget)\n                    {\n                        mouse_in_widget = false;\n                        parent.invalidate_rectangle(rect);\n                    }\n                }\n            }\n\n            void on_mouse_leave (\n            )\n            {\n                if (mouse_in_widget && my_scroll_bar.style->redraw_on_mouse_over_slider())\n                {\n                    mouse_in_widget = false;\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n\n            void on_drag_stop (\n            ) \n            {\n                if (my_scroll_bar.style->redraw_on_mouse_over_slider())\n                    parent.invalidate_rectangle(rect);\n            }\n\n            void on_drag (\n            )\n            {\n                callback();\n            }\n\n            void draw (\n                const canvas& c\n            ) const\n            {\n                my_scroll_bar.style->draw_scroll_bar_slider(c,rect,enabled,lastx,lasty, is_being_dragged());\n            }\n\n            bool mouse_in_widget;\n            scroll_bar& my_scroll_bar;\n            any_function<void()> callback;\n        };\n\n\n        void adjust_fillers (\n        );\n        /*!\n            ensures\n                - top_filler and bottom_filler appear in their correct positions\n                  relative to the current positions of the slider and the b1 and\n                  b2 buttons\n        !*/\n\n        unsigned long get_slider_size (\n        ) const;\n        /*!\n            ensures\n                - returns the length in pixels the slider should have based on the current\n                  state of this scroll bar\n        !*/\n\n\n        button b1, b2;\n        slider_class slider;\n        bar_orientation ori; \n        filler top_filler, bottom_filler;\n        any_function<void()> scroll_handler;\n\n        long pos;\n        long max_pos; \n        long js;\n\n        timer<scroll_bar> b1_timer;\n        timer<scroll_bar> b2_timer;\n        timer<scroll_bar> top_filler_timer;\n        timer<scroll_bar> bottom_filler_timer;\n        long delayed_pos;\n        scoped_ptr<scroll_bar_style> style;\n\n        // restricted functions\n        scroll_bar(scroll_bar&);        // copy constructor\n        scroll_bar& operator=(scroll_bar&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class popup_menu \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class menu_item\n    {\n    public:\n        virtual ~menu_item() {}\n\n        virtual rectangle get_left_size (\n        ) const { return rectangle(); }\n        virtual rectangle get_middle_size (\n        ) const = 0; \n        virtual rectangle get_right_size (\n        ) const { return rectangle(); }\n\n        virtual unichar get_hot_key (\n        ) const { return 0; }\n\n        virtual void draw_background (\n            const canvas& ,\n            const rectangle& ,\n            const bool ,\n            const bool \n        ) const {}\n\n        virtual void draw_left (\n            const canvas& ,\n            const rectangle& ,\n            const bool ,\n            const bool \n        ) const {}\n\n        virtual void draw_middle (\n            const canvas& ,\n            const rectangle& ,\n            const bool ,\n            const bool \n        ) const = 0;\n\n        virtual void draw_right (\n            const canvas& ,\n            const rectangle& ,\n            const bool ,\n            const bool \n        ) const {}\n\n        virtual void on_click (\n        ) const {}\n\n        virtual bool has_click_event (\n        ) const { return false; }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class menu_item_submenu : public menu_item\n    {\n        void initialize (\n            unichar hk\n        )\n        {\n            const dlib::ustring &str = text;\n            if (hk != 0)\n            {\n                std::string::size_type pos = str.find_first_of(hk);\n                if (pos != std::string::npos)\n                {\n                    // now compute the location of the underline bar\n                    rectangle r1 = f->compute_cursor_rect( rectangle(100000,100000), str, pos);\n                    rectangle r2 = f->compute_cursor_rect( rectangle(100000,100000), str, pos+1);\n\n                    underline_p1.x() = r1.left()+1;\n                    underline_p2.x() = r2.left()-1;\n                    underline_p1.y() = r1.bottom()-f->height()+f->ascender()+2;\n                    underline_p2.y() = r2.bottom()-f->height()+f->ascender()+2;\n                }\n            }\n        }\n    public:\n        menu_item_submenu (\n            const std::string& str,\n            unichar hk = 0\n        ) : \n            text(convert_wstring_to_utf32(convert_mbstring_to_wstring(str))),\n            f(default_font::get_font()),\n            hotkey(hk)\n        {\n            initialize(hk);\n        }\n\n        menu_item_submenu (\n            const std::wstring& str,\n            unichar hk = 0\n        ) : \n            text(convert_wstring_to_utf32(str)),\n            f(default_font::get_font()),\n            hotkey(hk)\n        {\n            initialize(hk);\n        }\n\n        menu_item_submenu (\n            const dlib::ustring& str,\n            unichar hk = 0\n        ) : \n            text(str),\n            f(default_font::get_font()),\n            hotkey(hk)\n        {\n            initialize(hk);\n        }\n\n        virtual unichar get_hot_key (\n        ) const { return hotkey; }\n\n        virtual rectangle get_middle_size (\n        ) const  \n        {\n            unsigned long width, height;\n            f->compute_size(text,width,height);\n            return rectangle(width+30,height);\n        }\n\n        virtual rectangle get_right_size (\n        ) const  \n        {\n            return rectangle(15, 5);\n        }\n\n        virtual void draw_background (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const bool is_selected\n        ) const \n        {\n            if (c.intersect(rect).is_empty())\n                return;\n\n            if (enabled && is_selected)\n            {\n                fill_rect_with_vertical_gradient(c, rect,rgb_alpha_pixel(0,200,0,100), rgb_alpha_pixel(0,0,0,100));\n                draw_rectangle(c, rect,rgb_alpha_pixel(0,0,0,100));\n            }\n        }\n\n        virtual void draw_right (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const bool \n        ) const \n        {\n            if (c.intersect(rect).is_empty())\n                return;\n\n            unsigned char color = 0;\n\n            if (enabled == false)\n                color = 128;\n\n            long x, y;\n            x = rect.right() - 7;\n            y = rect.top() + rect.height()/2;\n\n            for ( unsigned long i = 0; i < 5; ++i)\n                draw_line (c, point(x - i, y + i), point(x - i, y - i), color);\n        }\n\n        virtual void draw_middle (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const bool \n        ) const \n        {\n            if (c.intersect(rect).is_empty())\n                return;\n\n            if (enabled)\n            {\n                f->draw_string(c,rect,text);\n            }\n            else\n            {\n                f->draw_string(c,rect,text,128);\n            }\n\n            if (underline_p1 != underline_p2)\n            {\n                point base(rect.left(),rect.top());\n                draw_line(c, base+underline_p1, base+underline_p2);\n            }\n        }\n\n    private:\n        dlib::ustring text;\n        const shared_ptr_thread_safe<font> f;\n        any_function<void()> action;\n        unichar hotkey;\n        point underline_p1;\n        point underline_p2;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class menu_item_text : public menu_item\n    {\n        void initialize (\n            const any_function<void()>& event_handler_,\n            unichar hk\n        )\n        {\n            dlib::ustring &str = text;\n            action = event_handler_;\n\n            if (hk != 0)\n            {\n                std::string::size_type pos = str.find_first_of(hk);\n                if (pos != std::string::npos)\n                {\n                    // now compute the location of the underline bar\n                    rectangle r1 = f->compute_cursor_rect( rectangle(100000,100000), str, pos);\n                    rectangle r2 = f->compute_cursor_rect( rectangle(100000,100000), str, pos+1);\n\n                    underline_p1.x() = r1.left()+1;\n                    underline_p2.x() = r2.left()-1;\n                    underline_p1.y() = r1.bottom()-f->height()+f->ascender()+2;\n                    underline_p2.y() = r2.bottom()-f->height()+f->ascender()+2;\n                }\n            }\n        }\n\n    public:\n        template <typename T>\n        menu_item_text (\n            const std::string& str,\n            T& object,\n            void (T::*event_handler_)(),\n            unichar hk = 0\n        ) : \n            text(convert_wstring_to_utf32(convert_mbstring_to_wstring(str))),\n            f(default_font::get_font()),\n            hotkey(hk)\n        {\n            initialize(make_mfp(object, event_handler_), hk);\n        }\n\n        menu_item_text (\n            const std::string& str,\n            const any_function<void()>& event_handler_,\n            unichar hk = 0\n        ) : \n            text(convert_wstring_to_utf32(convert_mbstring_to_wstring(str))),\n            f(default_font::get_font()),\n            hotkey(hk)\n        {\n            initialize(event_handler_, hk);\n        }\n\n        template <typename T>\n        menu_item_text (\n            const std::wstring& str,\n            T& object,\n            void (T::*event_handler_)(),\n            unichar hk = 0\n        ) : \n            text(convert_wstring_to_utf32(str)),\n            f(default_font::get_font()),\n            hotkey(hk)\n        {\n            initialize(make_mfp(object, event_handler_), hk);\n        }\n\n        menu_item_text (\n            const std::wstring& str,\n            const any_function<void()>& event_handler_,\n            unichar hk = 0\n        ) : \n            text(convert_wstring_to_utf32(str)),\n            f(default_font::get_font()),\n            hotkey(hk)\n        {\n            initialize(event_handler_, hk);\n        }\n\n        template <typename T>\n        menu_item_text (\n            const dlib::ustring& str,\n            T& object,\n            void (T::*event_handler_)(),\n            unichar hk = 0\n        ) : \n            text(str),\n            f(default_font::get_font()),\n            hotkey(hk)\n        {\n            initialize(make_mfp(object, event_handler_), hk);\n        }\n\n        menu_item_text (\n            const dlib::ustring& str,\n            const any_function<void()>& event_handler_,\n            unichar hk = 0\n        ) : \n            text(str),\n            f(default_font::get_font()),\n            hotkey(hk)\n        {\n            initialize(event_handler_, hk);\n        }\n\n        virtual unichar get_hot_key (\n        ) const { return hotkey; }\n\n        virtual rectangle get_middle_size (\n        ) const  \n        {\n            unsigned long width, height;\n            f->compute_size(text,width,height);\n            return rectangle(width,height);\n        }\n\n        virtual void draw_background (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const bool is_selected\n        ) const \n        {\n            if (c.intersect(rect).is_empty())\n                return;\n\n            if (enabled && is_selected)\n            {\n                fill_rect_with_vertical_gradient(c, rect,rgb_alpha_pixel(0,200,0,100), rgb_alpha_pixel(0,0,0,100));\n                draw_rectangle(c, rect,rgb_alpha_pixel(0,0,0,100));\n            }\n        }\n\n        virtual void draw_middle (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const bool \n        ) const \n        {\n            if (c.intersect(rect).is_empty())\n                return;\n\n            unsigned char color = 0;\n\n            if (enabled == false)\n                color = 128;\n\n            f->draw_string(c,rect,text,color);\n\n            if (underline_p1 != underline_p2)\n            {\n                point base(rect.left(),rect.top());\n                draw_line(c, base+underline_p1, base+underline_p2, color);\n            }\n        }\n\n        virtual void on_click (\n        ) const \n        {\n            action();\n        }\n\n        virtual bool has_click_event (\n        ) const { return true; }\n\n    private:\n        dlib::ustring text;\n        const shared_ptr_thread_safe<font> f;\n        any_function<void()> action;\n        unichar hotkey;\n        point underline_p1;\n        point underline_p2;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class menu_item_separator : public menu_item\n    {\n    public:\n        virtual rectangle get_middle_size (\n        ) const  \n        {\n            return rectangle(10,4);\n        }\n\n        virtual void draw_background (\n            const canvas& c,\n            const rectangle& rect,\n            const bool ,\n            const bool \n        ) const \n        {\n            if (c.intersect(rect).is_empty())\n                return;\n\n            point p1(rect.left(),rect.top()+rect.height()/2-1);\n            point p2(rect.right(),rect.top()+rect.height()/2-1);\n\n            point p3(rect.left(),rect.top()+rect.height()/2);\n            point p4(rect.right(),rect.top()+rect.height()/2);\n            draw_line(c, p1,p2,128);\n            draw_line(c, p3,p4,255);\n        }\n\n        virtual void draw_middle (\n            const canvas& ,\n            const rectangle& ,\n            const bool ,\n            const bool \n        ) const \n        {\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class popup_menu : public base_window\n    {\n        /*!\n            INITIAL VALUE\n                - pad == 2\n                - item_pad == 3\n                - cur_rect == rectangle(pad,pad,pad-1,pad-1)\n                - left_width == 0\n                - middle_width == 0\n                - selected_item == 0 \n                - submenu_open == false\n                - items.size() == 0\n                - item_enabled.size() == 0\n                - left_rects.size() == 0\n                - middle_rects.size() == 0\n                - right_rects.size() == 0\n                - line_rects.size() == 0\n                - submenus.size() == 0\n                - hide_handlers.size() == 0\n\n            CONVENTION\n                - pad = 2\n                - item_pad = 3\n                - all of the following arrays have the same size:\n                    - items.size() \n                    - item_enabled.size() \n                    - left_rects.size() \n                    - middle_rects.size() \n                    - right_rects.size() \n                    - line_rects.size() \n                    - submenus.size() \n\n                - win_rect == a rectangle that is the exact size of this window and with\n                  its upper left corner at (0,0)\n                - cur_rect == the rect inside which all the menu items are drawn\n\n                - if (a menu_item is supposed to be selected) then\n                    - selected_item == the index in menus of the menu_item\n                - else\n                    - selected_item == submenus.size()\n\n                - if (there is a selected submenu and it is currently open) then\n                    - submenu_open == true\n                - else \n                    - submenu_open == false\n\n                - for all valid i:\n                    - items[i] == a pointer to the ith menu_item\n                    - item_enabled[i] == true if the ith menu_item is enabled, false otherwise\n                    - left_rects[i] == the left rectangle for the ith menu item\n                    - middle_rects[i] == the middle rectangle for the ith menu item\n                    - right_rects[i] == the right rectangle for the ith menu item\n                    - line_rects[i] == the rectangle for the entire line on which the ith menu\n                      item appears. \n                    - if (submenus[i] != 0) then\n                        - the ith menu item has a submenu and it is pointed to by submenus[i]\n\n                - hide_handlers == an array of all the on_hide events registered for\n                  this popup_menu\n        !*/\n\n    public:\n\n        popup_menu (\n        );\n\n        template <\n            typename menu_item_type\n            >\n        unsigned long add_menu_item (\n            const menu_item_type& new_item\n        )\n        {\n            auto_mutex M(wm);\n            bool t = true;\n            scoped_ptr<menu_item> item(new menu_item_type(new_item));\n            items.push_back(item);\n            item_enabled.push_back(t);\n\n            // figure out how big the window should be now and what not\n            rectangle left = new_item.get_left_size();\n            rectangle middle = new_item.get_middle_size();\n            rectangle right = new_item.get_right_size();\n\n            bool recalc_rect_positions = false;\n            const rectangle all = left+middle+right;\n\n\n            // make sure left_width contains the max of all the left rectangles\n            if (left.width() > left_width)\n            {\n                left_width = left.width();\n                recalc_rect_positions = true;\n            }\n            // make sure middle_width contains the max of all the middle rectangles\n            if (middle.width() > middle_width)\n            {\n                middle_width = middle.width();\n                recalc_rect_positions = true;\n            }\n\n            // make the current rectangle wider if necessary\n            if (cur_rect.width() < left_width + middle_width + right.width() + 2*item_pad)\n            {\n                cur_rect = resize_rect_width(cur_rect, left_width + middle_width + right.width() + 2*item_pad);\n                recalc_rect_positions = true;\n            }\n\n            const long y = cur_rect.bottom()+1 + item_pad;\n            const long x = cur_rect.left() + item_pad;\n\n            // make the current rectangle taller to account for this new menu item\n            cur_rect.set_bottom(cur_rect.bottom()+all.height() + 2*item_pad);\n\n            // adjust all the saved rectangles since the width of the window changed\n            // or left_width changed\n            if (recalc_rect_positions)\n            {\n                long y = cur_rect.top() + item_pad;\n                for (unsigned long i = 0; i < left_rects.size(); ++i)\n                {\n                    middle_rects[i] = move_rect(middle_rects[i], x+left_width, y);\n                    right_rects[i] = move_rect(right_rects[i], x+cur_rect.width()-right_rects[i].width()-item_pad, y);\n                    line_rects[i] = resize_rect_width(line_rects[i], cur_rect.width());\n\n                    y += line_rects[i].height();\n                }\n            }\n\n            // save the rectangles for later use.  Also position them at the\n            // right spots\n            left = move_rect(left,x,y);\n            middle = move_rect(middle,x+left_width,y);\n            right = move_rect(right,x+cur_rect.width()-right.width()-item_pad,y);\n            rectangle line(move_rect(rectangle(cur_rect.width(),all.height()+2*item_pad), x-item_pad, y-item_pad));\n\n            // make sure the left, middle, and right rectangles are centered in the\n            // line. \n            if (left.height() < all.height())\n                left = translate_rect(left,0, (all.height()-left.height())/2);\n            if (middle.height() < all.height())\n                middle = translate_rect(middle,0, (all.height()-middle.height())/2);\n            if (right.height() < all.height())\n                right = translate_rect(right,0, (all.height()-right.height())/2);\n\n            left_rects.push_back(left);\n            middle_rects.push_back(middle);\n            right_rects.push_back(right);\n            line_rects.push_back(line);\n\n            popup_menu* junk = 0;\n            submenus.push_back(junk);\n\n            win_rect.set_right(cur_rect.right()+pad);\n            win_rect.set_bottom(cur_rect.bottom()+pad);\n            set_size(win_rect.width(),win_rect.height());\n\n            // make it so that nothing is selected\n            selected_item = submenus.size();\n\n            return items.size()-1;\n        }\n        \n        template <\n            typename menu_item_type\n            >\n        unsigned long add_submenu (\n            const menu_item_type& new_item,\n            popup_menu& submenu\n        )\n        {\n            auto_mutex M(wm);\n\n            submenus[add_menu_item(new_item)] = &submenu;\n\n            submenu.set_on_hide_handler(*this,&popup_menu::on_submenu_hide);\n\n            return items.size()-1;\n        }\n\n        void enable_menu_item (\n            unsigned long idx\n        );\n\n        void disable_menu_item (\n            unsigned long idx\n        );\n\n        unsigned long size (\n        ) const;\n\n        void clear (\n        );\n        \n        void show (\n        );\n\n        void hide (\n        );\n\n        template <typename T>\n        void set_on_hide_handler (\n            T& object,\n            void (T::*event_handler)()\n        )\n        {\n            auto_mutex M(wm);\n\n            member_function_pointer<> temp;\n            temp.set(object,event_handler);\n\n            // if this handler isn't already registered then add it\n            bool found_handler = false;\n            for (unsigned long i = 0; i < hide_handlers.size(); ++i)\n            {\n                if (hide_handlers[i] == temp)\n                {\n                    found_handler = true;\n                    break;\n                }\n            }\n\n            if (found_handler == false)\n            {\n                hide_handlers.push_back(temp);\n            }\n        }\n\n        void select_first_item (\n        );\n\n        bool forwarded_on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        );\n\n    private:\n\n        void on_submenu_hide (\n        );\n\n        void on_window_resized(\n        );\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long,\n            long x,\n            long y\n        );\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void close_submenu (\n        );\n\n        bool display_selected_submenu (\n        );\n        /*!\n            ensures\n                - if (submenus[selected_item] isn't null) then\n                    - displays the selected submenu\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void on_mouse_leave (\n        );\n\n        void paint (\n            const canvas& c\n        );\n\n        const long pad;\n        const long item_pad;\n        rectangle cur_rect; \n        rectangle win_rect; \n        unsigned long left_width;    \n        unsigned long middle_width;    \n        array<scoped_ptr<menu_item> > items;\n        array<bool> item_enabled;\n        array<rectangle> left_rects;\n        array<rectangle> middle_rects;\n        array<rectangle> right_rects;\n        array<rectangle> line_rects;\n        array<popup_menu*> submenus;\n        unsigned long selected_item;\n        bool submenu_open;\n        array<member_function_pointer<> > hide_handlers;\n\n        // restricted functions\n        popup_menu(popup_menu&);        // copy constructor\n        popup_menu& operator=(popup_menu&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class zoomable_region : public drawable \n    {\n        /*!\n            INITIAL VALUE\n                - min_scale == 0.15\n                - max_scale == 1.0\n                - zoom_increment_ == 0.02\n                - scale == 1.0\n                - mouse_drag_screen == false\n\n\n            CONVENTION\n                - zoom_increment() == zoom_increment_\n                - min_zoom_scale() == min_scale\n                - max_zoom_scale() == max_scale\n                - zoom_scale() == scale\n                - if (the user is currently dragging the graph around via the mouse) then \n                    - mouse_drag_screen == true\n                - else\n                    - mouse_drag_screen == false \n\n                - max_graph_point() == lr_point\n                - display_rect() == display_rect_\n                - gui_to_graph_space(point(display_rect.left(),display_rect.top())) == gr_orig\n        !*/\n\n    public:\n\n        zoomable_region (\n            drawable_window& w,\n            unsigned long events = 0\n        );\n\n        virtual ~zoomable_region (\n        )= 0;\n\n        virtual void set_pos (\n            long x,\n            long y\n        );\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        )\n        {\n            auto_mutex M(m);\n            style.reset(new style_type(style_));\n            hsb.set_style(style_.get_horizontal_scroll_bar_style());\n            vsb.set_style(style_.get_vertical_scroll_bar_style());\n\n            // do this just so that everything gets redrawn right\n            set_size(rect.width(), rect.height());\n        }\n\n        void set_zoom_increment (\n            double zi\n        );\n\n        double zoom_increment (\n        ) const;\n\n        void set_max_zoom_scale (\n            double ms \n        );\n\n        void set_min_zoom_scale (\n            double ms \n        );\n\n        double min_zoom_scale (\n        ) const;\n\n        double max_zoom_scale (\n        ) const;\n\n        virtual void set_size (\n            unsigned long width,\n            unsigned long height\n        );\n\n        void show (\n        );\n\n        void hide (\n        );\n\n        void enable (\n        );\n\n        void disable (\n        );\n\n        void set_z_order (\n            long order\n        );\n\n    protected:\n\n        virtual void on_view_changed () {}\n\n        point graph_to_gui_space (\n            const vector<double,2>& p\n        ) const;\n\n        vector<double,2> gui_to_graph_space (\n            const point& p\n        ) const;\n\n        point max_graph_point (\n        ) const;\n\n        rectangle display_rect (\n        ) const;\n\n        double zoom_scale (\n        ) const;\n\n        void set_zoom_scale (\n            double new_scale\n        );\n\n        void center_display_at_graph_point (\n            const vector<double,2>& p\n        );\n\n    // ----------- event handlers ---------------\n\n        void on_wheel_down (\n            unsigned long state\n        );\n\n        void on_wheel_up (\n            unsigned long state\n        );\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void draw (\n            const canvas& c\n        ) const;\n\n    private:\n\n        void on_h_scroll (\n        );\n\n        void on_v_scroll (\n        );\n\n        void redraw_graph (\n        );\n\n        void adjust_origin (\n            const point& gui_p,\n            const vector<double,2>& graph_p\n        );\n        /*!\n            ensures\n                - adjusts gr_orig so that we are as close to the following as possible:\n                    - graph_to_gui_space(graph_p) == gui_p\n                    - gui_to_graph_space(gui_p) == graph_p\n        !*/\n\n\n        vector<double,2> gr_orig; // point in graph space such that it's gui space point is the upper left of display_rect_\n        vector<double,2> lr_point; // point in graph space such that it is at the lower right corner of the screen at max zoom\n\n        mutable std::ostringstream sout;\n\n        double scale; // 0 < scale <= 1\n        double min_scale;\n        double max_scale;\n        double zoom_increment_;\n        rectangle display_rect_;\n\n        bool mouse_drag_screen;  // true if the user is dragging the white background area\n        vector<double,2> drag_screen_point; // the starting point the mouse was at in graph space for the background area drag\n\n        scroll_bar vsb;\n        scroll_bar hsb;\n\n        scoped_ptr<scrollable_region_style> style;\n\n        // restricted functions\n        zoomable_region(zoomable_region&);        // copy constructor\n        zoomable_region& operator=(zoomable_region&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class scrollable_region : public drawable \n    {\n        /*!\n            INITIAL VALUE\n                - hscroll_bar_inc == 1\n                - vscroll_bar_inc == 1\n                - h_wheel_scroll_bar_inc == 1\n                - v_wheel_scroll_bar_inc == 1\n                - mouse_drag_enabled_ == false\n                - user_is_dragging_mouse == false\n\n            CONVENTION\n                - mouse_drag_enabled() == mouse_drag_enabled_\n                - horizontal_scroll_increment() == hscroll_bar_inc\n                - vertical_scroll_increment() == vscroll_bar_inc\n                - horizontal_mouse_wheel_scroll_increment() == h_wheel_scroll_bar_inc\n                - vertical_mouse_wheel_scroll_increment() == v_wheel_scroll_bar_inc\n                - vertical_scroll_pos() == vsb.slider_pos()\n                - horizontal_scroll_pos() == hsb.slider_pos()\n                - total_rect() == total_rect_\n                - display_rect() == display_rect_\n\n                - if (the user is currently dragging the total_rect around with a mouse drag) then\n                    - user_is_dragging_mouse == true\n                    - drag_origin == the point the mouse was at, with respect to total_rect, \n                      when the dragging started\n                - else\n                    - user_is_dragging_mouse == false \n        !*/\n\n    public:\n\n        scrollable_region (\n            drawable_window& w,\n            unsigned long events = 0\n        );\n\n        virtual ~scrollable_region (\n        ) = 0;\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        )\n        {\n            auto_mutex M(m);\n            style.reset(new style_type(style_));\n            hsb.set_style(style_.get_horizontal_scroll_bar_style());\n            vsb.set_style(style_.get_vertical_scroll_bar_style());\n\n            // do this just so that everything gets redrawn right\n            set_size(rect.width(), rect.height());\n        }\n\n        void show (\n        );\n\n        void hide (\n        );\n\n        void enable (\n        );\n\n        void disable (\n        );\n\n        void set_z_order (\n            long order\n        );\n\n        virtual void set_size (\n            unsigned long width,\n            unsigned long height\n        );\n\n        unsigned long horizontal_mouse_wheel_scroll_increment (\n        ) const;\n\n        unsigned long vertical_mouse_wheel_scroll_increment (\n        ) const;\n\n        void set_horizontal_mouse_wheel_scroll_increment (\n            unsigned long inc\n        );\n\n        void set_vertical_mouse_wheel_scroll_increment (\n            unsigned long inc\n        );\n\n        unsigned long horizontal_scroll_increment (\n        ) const;\n\n        unsigned long vertical_scroll_increment (\n        ) const;\n\n        void set_horizontal_scroll_increment (\n            unsigned long inc\n        );\n\n        void set_vertical_scroll_increment (\n            unsigned long inc\n        );\n\n        long horizontal_scroll_pos (\n        ) const;\n\n        long vertical_scroll_pos (\n        ) const;\n\n        void set_horizontal_scroll_pos (\n            long pos\n        );\n\n        void set_vertical_scroll_pos (\n            long pos\n        );\n\n        virtual void set_pos (\n            long x,\n            long y\n        );\n\n        bool mouse_drag_enabled (\n        ) const;\n\n        void enable_mouse_drag (\n        );\n\n        void disable_mouse_drag (\n        );\n\n    protected:\n\n        virtual void on_view_changed () {}\n\n        const rectangle& display_rect (\n        ) const;\n\n        void set_total_rect_size (\n            unsigned long width,\n            unsigned long height\n        );\n\n        const rectangle& total_rect (\n        ) const;\n\n        void scroll_to_rect (\n            const rectangle& r_\n        );\n\n        void on_wheel_down (\n            unsigned long state\n        );\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void on_mouse_up   (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_wheel_up (\n            unsigned long state\n        );\n\n        void draw (\n            const canvas& c\n        ) const;\n\n    private:\n\n        bool need_h_scroll (\n        ) const;\n        \n        bool need_v_scroll (\n        ) const;\n\n        void on_h_scroll (\n        );\n\n        void on_v_scroll (\n        );\n\n        rectangle total_rect_;\n        rectangle display_rect_;\n        scroll_bar hsb;\n        scroll_bar vsb;\n        unsigned long hscroll_bar_inc;\n        unsigned long vscroll_bar_inc;\n        unsigned long h_wheel_scroll_bar_inc;\n        unsigned long v_wheel_scroll_bar_inc;\n        bool mouse_drag_enabled_;\n        bool user_is_dragging_mouse;\n        point drag_origin;\n        scoped_ptr<scrollable_region_style> style;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class popup_menu_region \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class popup_menu_region : public drawable \n    {\n        /*!\n            CONVENTION\n                popup_menu_visible() == popup_menu_shown\n        !*/\n\n    public:\n\n        popup_menu_region(  \n            drawable_window& w\n        );\n\n        virtual ~popup_menu_region(\n        );\n\n        void set_size (\n            unsigned long width, \n            unsigned long height\n        );\n\n        void set_rect (\n            const rectangle& new_rect\n        );\n\n        popup_menu& menu (\n        );\n\n        void hide (\n        );\n\n        void disable (\n        );\n\n        bool popup_menu_visible (\n        ) const { auto_mutex M(m); return popup_menu_shown; }\n\n    protected:\n\n        void on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        );\n\n        void on_focus_lost (\n        );\n\n        void on_focus_gained (\n        );\n\n        void on_window_moved(\n        );\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void on_menu_becomes_hidden (\n        );\n\n        void draw (\n            const canvas& \n        ) const;\n\n    private:\n\n        popup_menu menu_;\n        bool popup_menu_shown;\n\n        // restricted functions\n        popup_menu_region(popup_menu_region&);        // copy constructor\n        popup_menu_region& operator=(popup_menu_region&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"base_widgets.cpp\"\n#endif\n\n#endif // DLIB_BASE_WIDGETs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/base_widgets_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BASE_WIDGETs_ABSTRACT_\n#ifdef DLIB_BASE_WIDGETs_ABSTRACT_\n\n#include \"fonts_abstract.h\"\n#include \"drawable_abstract.h\"\n\n#include \"../gui_core.h\"\n#include <string>\n\nnamespace dlib\n{\n\n    /*!\n        GENERAL REMARKS\n            This file contains objects that are useful for creating complex drawable \n            widgets.\n\n        THREAD SAFETY\n            All objects and functions defined in this file are thread safe.  You may\n            call them from any thread without serializing access to them.\n\n        EVENT HANDLERS\n            If you derive from any of the drawable objects and redefine any of the on_*() \n            event handlers then you should ensure that your version calls the same event \n            handler in the base object so that the base class part of your object will also \n            be able to process the event. \n\n            Also note that all event handlers, including the user registered callback\n            functions, are executed in the event handling thread.   Additionally,\n            the drawable::m mutex will always be locked while these event handlers\n            are running.  Also, don't rely on get_thread_id() always returning the \n            same ID from inside event handlers.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class draggable\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class draggable : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                draggable_area() == an initial value for its type \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a drawable object that is draggable by the mouse.  \n                You use it by inheriting from it and defining the draw() method and any\n                of the on_*() event handlers you need.  \n\n                This object is draggable by the user when is_enabled() == true and \n                not draggable otherwise.\n        !*/\n\n    public:\n\n        draggable(  \n            drawable_window& w,\n            unsigned long events = 0\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n                - This object will not receive any events or draw() requests until \n                  enable_events() is called\n                - the events flags are passed on to the drawable object's \n                  constructor.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~draggable(\n        ) = 0;\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        rectangle draggable_area (\n        ) const;\n        /*!\n            ensures\n                - returns the area that this draggable can be dragged around in. \n        !*/\n\n        void set_draggable_area (\n            const rectangle& area \n        ); \n        /*!\n            ensures\n                - #draggable_area() == area\n        !*/\n\n    protected:\n\n        bool is_being_dragged (\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - if (this widget is currently being dragged by the user) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        // does nothing by default\n        virtual void on_drag (\n        ){}\n        /*!\n            requires\n                - enable_events() has been called\n                - is_enabled() == true\n                - is_hidden() == false\n                - mutex drawable::m is locked\n                - is called when the user drags this object\n                - get_rect() == the rectangle that defines the new position\n                  of this object.\n                - is_being_dragged() == true\n            ensures\n                - does not change the state of mutex drawable::m. \n        !*/\n\n        // does nothing by default\n        virtual void on_drag_stop (\n        ){}\n        /*!\n            requires\n                - enable_events() has been called\n                - mutex drawable::m is locked\n                - is called when the user stops dragging this object\n                - is_being_dragged() == false \n            ensures\n                - does not change the state of mutex drawable::m. \n        !*/\n\n    private:\n\n        // restricted functions\n        draggable(draggable&);        // copy constructor\n        draggable& operator=(draggable&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class mouse_over_event \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class mouse_over_event : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                is_mouse_over() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a drawable object with the addition of two events\n                that will alert you when the mouse enters or leaves your drawable object.\n\n                You use it by inheriting from it and defining the draw() method and any\n                of the on_*() event handlers you need.  \n        !*/\n\n    public:\n\n        mouse_over_event(  \n            drawable_window& w,\n            unsigned long events = 0\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n                - #*this will not receive any events or draw() requests until \n                  enable_events() is called\n                - the events flags are passed on to the drawable object's \n                  constructor.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~mouse_over_event(\n        ) = 0;\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n    protected:\n\n        bool is_mouse_over (\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - if (the mouse is currently over this widget) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        // does nothing by default\n        virtual void on_mouse_over (\n        ){}\n        /*!\n            requires\n                - enable_events() has been called\n                - mutex drawable::m is locked\n                - is_enabled() == true\n                - is_hidden() == false\n                - is called whenever this object transitions from the state where\n                  is_mouse_over() == false to is_mouse_over() == true\n            ensures\n                - does not change the state of mutex drawable::m. \n        !*/\n\n        // does nothing by default\n        virtual void on_mouse_not_over (\n        ){}\n        /*!\n            requires\n                - enable_events() has been called\n                - mutex drawable::m is locked\n                - is called whenever this object transitions from the state where\n                  is_mouse_over() == true to is_mouse_over() == false \n            ensures\n                - does not change the state of mutex drawable::m. \n        !*/\n\n    private:\n\n        // restricted functions\n        mouse_over_event(mouse_over_event&);        // copy constructor\n        mouse_over_event& operator=(mouse_over_event&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class button_action \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class button_action : public mouse_over_event \n    {\n        /*!\n            INITIAL VALUE\n                is_depressed() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents the clicking action of a push button.  It provides\n                simple callbacks that can be used to make various kinds of button \n                widgets.\n\n                You use it by inheriting from it and defining the draw() method and any\n                of the on_*() event handlers you need.  \n        !*/\n\n    public:\n\n        button_action(  \n            drawable_window& w,\n            unsigned long events = 0\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n                - #*this will not receive any events or draw() requests until \n                  enable_events() is called\n                - the events flags are passed on to the drawable object's \n                  constructor.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~button_action(\n        ) = 0;\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n    protected:\n\n        bool is_depressed (\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - if (this button is currently in a depressed state) then\n                    - the user has left clicked on this drawable and is still\n                      holding the left mouse button down over it.\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        // does nothing by default\n        virtual void on_button_down (\n        ){}\n        /*!\n            requires\n                - enable_events() has been called\n                - mutex drawable::m is locked\n                - is_enabled() == true\n                - is_hidden() == false\n                - the area in parent_window() defined by get_rect() has been invalidated. \n                  (This means you don't have to call invalidate_rectangle())\n                - is called whenever this object transitions from the state where\n                  is_depressed() == false to is_depressed() == true\n            ensures\n                - does not change the state of mutex drawable::m. \n        !*/\n\n        // does nothing by default\n        virtual void on_button_up (\n            bool mouse_over\n        ){}\n        /*!\n            requires\n                - enable_events() has been called\n                - mutex drawable::m is locked\n                - the area in parent_window() defined by get_rect() has been invalidated. \n                  (This means you don't have to call invalidate_rectangle())\n                - is called whenever this object transitions from the state where\n                  is_depressed() == true to is_depressed() == false \n                - if (the mouse was over this button when this event occurred) then\n                    - mouse_over == true\n                - else\n                    - mouse_over == false\n            ensures\n                - does not change the state of mutex drawable::m. \n        !*/\n\n    private:\n\n        // restricted functions\n        button_action(button_action&);        // copy constructor\n        button_action& operator=(button_action&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class button\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class button : public button_action \n    {\n        /*!\n            INITIAL VALUE\n                name() == \"\"\n                tooltip_text() == \"\" (i.e. there is no tooltip by default)\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple button.  \n\n                When this object is disabled it means it will not respond to user clicks.\n        !*/\n\n    public:\n\n        button(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~button(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_size (\n            unsigned long width_,\n            unsigned long height_\n        );\n        /*! \n            ensures\n                - if (width and height are big enough to contain the name of this button) then\n                    - #width() == width_\n                    - #height() == height_\n                    - #top() == top()\n                    - #left() == left()\n                    - i.e. The location of the upper left corner of this button stays the\n                      same but its width and height are modified\n        !*/\n\n        void set_name (const std::wstring& name);\n        void set_name (const dlib::ustring& name);\n        void set_name (\n            const std::string& name\n        );\n        /*!\n            ensures\n                - #name() == name\n                - this button has been resized such that it is big enough to contain\n                  the new name.\n            throws\n                - std::bad_alloc\n        !*/\n\n        const std::wstring wname () const;\n        const dlib::string uname () const;\n        const std::string  name (\n        ) const;\n        /*!\n            ensures\n                - returns the name of this button\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_tooltip_text (const std::wstring& text);\n        void set_tooltip_text (const dlib::ustring& text);\n        void set_tooltip_text (\n            const std::string& text\n        );\n        /*!\n            ensures\n                - #tooltip_text() == text\n                - enables the tooltip for this button\n        !*/\n\n        const dlib::ustring tooltip_utext () const;\n        const std::wstring  tooltip_wtext () const;\n        const std::string   tooltip_text (\n        ) const;\n        /*!\n            ensures\n                - returns the text that is displayed in the tooltip for this button\n        !*/\n\n        bool is_depressed (\n        ) const;\n        /*!\n            ensures\n                - if (this button is currently in a depressed state) then\n                    - the user has left clicked on this widget and is still\n                      holding the left mouse button down over it.\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style\n        );\n        /*!\n            requires\n                - style_type == a type that inherits from button_style\n            ensures\n                - this button object will draw itself using the given\n                  button style\n        !*/\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the button is \n                  clicked by the user.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_click_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the button is clicked by \n                  the user.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler)(button& self)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - &self == this\n                - the event_handler function is called on object when the button is \n                  clicked by the user.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_sourced_click_handler (\n            const any_function<void(button& self)>& event_handler\n        );\n        /*!\n            ensures\n                - &self == this\n                - the event_handler function is called when the button is clicked by \n                  the user.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_button_down_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the user causes \n                  the button to go into its depressed state.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_button_down_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the user causes the button \n                  to go into its depressed state.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_button_up_handler (\n            T& object,\n            void (T::*event_handler)(bool mouse_over)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the user causes \n                  the button to go into its non-depressed state.\n                - if (the mouse is over this button when this event occurs) then\n                    - mouse_over == true\n                - else\n                    - mouse_over == false\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_button_up_handler (\n            const any_function<void(bool mouse_over)>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the user causes the \n                  button to go into its non-depressed state.\n                - if (the mouse is over this button when this event occurs) then\n                    - mouse_over == true\n                - else\n                    - mouse_over == false\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_button_down_handler (\n            T& object,\n            void (T::*event_handler)(button& self)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - &self == this\n                - the event_handler function is called on object when the user causes \n                  the button to go into its depressed state.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_sourced_button_down_handler (\n            const any_function<void(button& self)>& event_handler\n        );\n        /*!\n            ensures\n                - &self == this\n                - the event_handler function is called when the user causes the button \n                  to go into its depressed state.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_button_up_handler (\n            T& object,\n            void (T::*event_handler)(bool mouse_over, button& self)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - &self == this\n                - the event_handler function is called on object when the user causes \n                  the button to go into its non-depressed state.\n                - if (the mouse is over this button when this event occurs) then\n                    - mouse_over == true\n                - else\n                    - mouse_over == false\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_sourced_button_up_handler (\n            const any_function<void(bool mouse_over, button& self)>& event_handler\n        );\n        /*!\n            ensures\n                - &self == this\n                - the event_handler function is called when the user causes the \n                  button to go into its non-depressed state.\n                - if (the mouse is over this button when this event occurs) then\n                    - mouse_over == true\n                - else\n                    - mouse_over == false\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        button(button&);        // copy constructor\n        button& operator=(button&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class scroll_bar \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class scroll_bar : public drawable \n    {\n        /*!\n            INITIAL VALUE\n                orientation() == a value given to the constructor.\n                max_slider_pos() == 0\n                slider_pos() == 0\n                jump_size() == 10\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a scroll bar.  The slider_pos() of the scroll bar\n                ranges from 0 to max_slider_pos().  The 0 position of the scroll_bar is\n                in the top or left side of the scroll_bar depending on its orientation.\n\n                When this object is disabled it means it will not respond to user clicks.\n        !*/\n\n    public:\n        enum bar_orientation \n        {\n            HORIZONTAL,\n            VERTICAL\n        };\n\n        scroll_bar(  \n            drawable_window& w,\n            bar_orientation orientation \n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #orientation() == orientation \n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~scroll_bar(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        bar_orientation orientation (\n        ) const;\n        /*!\n            ensures\n                - returns the orientation of this scroll_bar \n        !*/\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style\n        );\n        /*!\n            requires\n                - style_type == a type that inherits from scroll_bar_style \n            ensures\n                - this scroll_bar object will draw itself using the given\n                  scroll bar style\n        !*/\n\n        void set_length (\n            unsigned long length,\n        );\n        /*! \n            ensures\n                - if (orientation() == HORIZONTAL) then\n                    - #width() == max(length,1)\n                - else\n                    - #height() == max(length,1)\n        !*/\n\n        long max_slider_pos (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum value that slider_pos() can take. \n        !*/\n\n        void set_max_slider_pos (\n            long mpos\n        );\n        /*!\n            ensures\n                - if (mpos < 0) then\n                    - #max_slider_pos() == 0\n                - else\n                    - #max_slider_pos() == mpos\n                - if (slider_pos() > #max_slider_pos()) then\n                    - #slider_pos() == #max_slider_pos() \n                - else\n                    - #slider_pos() == slider_pos()\n        !*/\n\n        void set_slider_pos (\n            unsigned long pos\n        );\n        /*!\n            ensures\n                - if (pos < 0) then\n                    - #slider_pos() == 0\n                - else if (pos > max_slider_pos()) then\n                    - #slider_pos() == max_slider_pos()\n                - else\n                    - #slider_pos() == pos\n        !*/\n\n        long slider_pos (\n        ) const;\n        /*!\n            ensures\n                - returns the current position of the slider box within the scroll bar.\n        !*/\n\n        long jump_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of positions that the slider bar will jump when the\n                  user clicks on the empty gaps above or below the slider bar.\n                  (note that the slider will jump less than the jump size if it hits the \n                  end of the scroll bar)\n        !*/\n\n        void set_jump_size (\n            long js \n        );\n        /*!\n            ensures\n                - if (js < 1) then\n                    - #jump_size() == 1\n                - else\n                    - #jump_size() == js \n        !*/\n\n\n        template <\n            typename T\n            >\n        void set_scroll_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T\n            ensures\n                - The event_handler function is called whenever the user causes the slider box\n                  to move.  \n                - This event is NOT triggered by calling set_slider_pos()\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_scroll_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - The event_handler function is called whenever the user causes the slider box\n                  to move.  \n                - This event is NOT triggered by calling set_slider_pos()\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        scroll_bar(scroll_bar&);        // copy constructor\n        scroll_bar& operator=(scroll_bar&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class widget_group \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class widget_group : public drawable \n    {\n        /*!\n            INITIAL VALUE\n                size() == 0\n                get_rect().is_empty() == true\n                left() == 0\n                top() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a grouping of drawable widgets.  It doesn't draw \n                anything itself, rather it lets you manipulate the position, enabled\n                status, and visibility of a set of widgets as a group.\n        !*/\n\n    public:\n        widget_group(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~widget_group(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released.\n        !*/\n\n        void empty (\n        );\n        /*!\n            ensures\n                - #size() == 0\n        !*/\n\n        void fit_to_contents (\n        );\n        /*!\n            ensures\n                - does not change the position of this object. \n                  (i.e. the upper left corner of get_rect() remains at the same position)\n                - if (size() == 0) then\n                    - #get_rect().is_empty() == true\n                - else\n                    - recursively calls fit_to_contents() on any widget_groups inside\n                      this object.\n                    - #get_rect() will be the smallest rectangle that contains all the \n                      widgets in this group and the upper left corner of get_rect(). \n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of widgets currently in *this.\n        !*/\n\n        void add (\n            drawable& widget,\n            unsigned long x,\n            unsigned long y\n        );\n        /*!\n            ensures\n                - #is_member(widget) == true\n                - if (is_member(widget) == false) then\n                    - #size() == size() + 1\n                - else\n                    - #size() == size()\n                - The following conditions apply to this function as well as to all of the \n                  following functions so long as is_member(widget) == true: \n                  enable(), disable(), hide(), show(), set_z_order(), and set_pos().\n                    - #widget.left() == left()+x\n                    - #widget.width() == widget.width()\n                    - #widget.top() == top()+y\n                    - #widget.height() == widget.height()\n                    - #widget.is_hidden() == is_hidden()\n                    - #widget.is_enabled() == is_enabled()\n                    - #widget.z_order() == z_order()\n            throws\n                - std::bad_alloc\n        !*/\n\n        bool is_member (\n            const drawable& widget\n        ) const;\n        /*!\n            ensures\n                - returns true if widget is currently in this object, returns false otherwise.\n        !*/\n\n        void remove (\n            const drawable& widget\n        );\n        /*!\n            ensures\n                - #is_member(widget) == false \n                - if (is_member(widget) == true) then\n                    - #size() == size() - 1\n                - else\n                    - #size() == size()\n        !*/\n\n    protected:\n\n        // this object doesn't draw anything but also isn't abstract\n        void draw (\n            const canvas& c\n        ) const {}\n\n    private:\n\n        // restricted functions\n        widget_group(widget_group&);        // copy constructor\n        widget_group& operator=(widget_group&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class image_widget \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class image_widget : public draggable\n    {\n        /*!\n            INITIAL VALUE\n                draggable_area() == an initial value for its type.\n                This object isn't displaying anything. \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a draggable image.  You give it an image to display\n                by calling set_image().\n\n                Also note that initially the draggable area is empty so it won't be \n                draggable unless you call set_draggable_area() to some non-empty region.\n\n                The image is drawn such that:\n                    - the pixel img[0][0] is the upper left corner of the image.\n                    - the pixel img[img.nr()-1][0] is the lower left corner of the image.\n                    - the pixel img[0][img.nc()-1] is the upper right corner of the image.\n                    - the pixel img[img.nr()-1][img.nc()-1] is the lower right corner of the image.\n                \n        !*/\n\n    public:\n\n        image_widget(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~image_widget(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        template <\n            typename image_type \n            >\n        void set_image (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type == an implementation of array2d/array2d_kernel_abstract.h\n                - pixel_traits<typename image_type::type> must be defined \n            ensures\n                - #width() == img.nc()\n                - #height() == img.nr()\n                - #*this widget is now displaying the given image img.\n        !*/\n\n    private:\n\n        // restricted functions\n        image_widget(image_widget&);        // copy constructor\n        image_widget& operator=(image_widget&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class tooltip \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class tooltip : public mouse_over_event \n    {\n        /*!\n            INITIAL VALUE\n                - text() == \"\"\n                - the tooltip is inactive until the text is changed to\n                  a non-empty string.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a region on a window where if the user\n                hovers the mouse over this region a tooltip with a message\n                appears.\n        !*/\n\n    public:\n\n        tooltip(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~tooltip(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_size (\n            unsigned long width_, \n            unsigned long height_ \n        );\n        /*!\n            ensures\n                - #width() == width_\n                - #height() == height_\n                - #top() == top()\n                - #left() == left()\n                - i.e. The location of the upper left corner of this widget stays the\n                  same but its width and height are modified\n        !*/\n\n        void set_text (const std::wstring& str);\n        void set_text (const dlib::ustring& str);\n        void set_text (\n            const std::string& str\n        );\n        /*!\n            ensures\n                - #text() == str\n                - activates the tooltip.  i.e. after this function the tooltip\n                  will display on the screen when the user hovers the mouse over it\n        !*/\n\n        const std::wstring  wtext () const;\n        const dlib::ustring utext () const;\n        const std::string   text (\n        ) const;\n        /*!\n            ensures\n                - returns the text that is displayed inside this\n                  tooltip\n        !*/\n\n    private:\n\n        // restricted functions\n        tooltip(tooltip&);        // copy constructor\n        tooltip& operator=(tooltip&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // popup menu stuff  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class menu_item\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an abstract class that defines the interface a\n                menu item in a popup_menu must implement.\n\n                Note that a menu_item is drawn as 3 separate pieces:\n                    ---------------------------------\n                    | left | middle |         right |\n                    ---------------------------------\n\n                Also note that derived classes must be copyable via\n                their copy constructors.\n        !*/\n\n    public:\n\n        virtual ~menu_item() {}\n\n        virtual void on_click (\n        ) const {}\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - if (has_click_event()) then\n                    - this function is called when the user clicks on this menu_item\n        !*/\n\n        virtual bool has_click_event (\n        ) const { return false; }\n        /*!\n            ensures\n                - if (this menu_item wants to receive on_click events) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        virtual unichar get_hot_key (\n        ) const { return 0; }\n        /*!\n            ensures\n                - if (this menu item has a keyboard hot key) then\n                    - returns the unicode value of the key\n                - else\n                    - returns 0\n        !*/\n\n        virtual rectangle get_left_size (\n        ) const { return rectangle(); } // return empty rect by default\n        /*!\n            ensures\n                - returns the dimensions of the left part of the menu_item\n        !*/\n\n        virtual rectangle get_middle_size (\n        ) const = 0; \n        /*!\n            ensures\n                - returns the dimensions of the middle part of the menu_item\n        !*/\n\n        virtual rectangle get_right_size (\n        ) const { return rectangle(); } // return empty rect by default\n        /*!\n            ensures\n                - returns the dimensions of the right part of the menu_item\n        !*/\n\n        virtual void draw_background (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const bool is_selected\n        ) const {}\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            requires\n                - c == the canvas to draw on\n                - rect == the rectangle in which we are to draw the background\n                - enabled == true if the menu_item is to be drawn enabled\n                - is_selected == true if the menu_item is to be drawn selected\n            ensures\n                - draws the background of the menu_item on the canvas c at the location \n                  given by rect.  \n        !*/\n\n        virtual void draw_left (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const bool is_selected\n        ) const {}\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            requires\n                - c == the canvas to draw on\n                - rect == the rectangle in which we are to draw the background\n                - enabled == true if the menu_item is to be drawn enabled\n                - is_selected == true if the menu_item is to be drawn selected\n            ensures\n                - draws the left part of the menu_item on the canvas c at the location \n                  given by rect.  \n        !*/\n\n        virtual void draw_middle (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const bool is_selected\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            requires\n                - c == the canvas to draw on\n                - rect == the rectangle in which we are to draw the background\n                - enabled == true if the menu_item is to be drawn enabled\n                - is_selected == true if the menu_item is to be drawn selected\n            ensures\n                - draws the middle part of the menu_item on the canvas c at the location \n                  given by rect.  \n        !*/\n\n        virtual void draw_right (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const bool is_selected\n        ) const {}\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            requires\n                - c == the canvas to draw on\n                - rect == the rectangle in which we are to draw the background\n                - enabled == true if the menu_item is to be drawn enabled\n                - is_selected == true if the menu_item is to be drawn selected\n            ensures\n                - draws the right part of the menu_item on the canvas c at the location \n                  given by rect.  \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class menu_item_text : public menu_item\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple text menu item\n        !*/\n\n    public:\n\n        template <\n            typename T\n            >\n        menu_item_text (\n            const std::string& str,\n            T& object,\n            void (T::*on_click_handler)(),\n            unichar hotkey = 0\n        ); \n        /*!\n            ensures\n                - The text of this menu item will be str\n                - the on_click_handler function is called on object when this menu_item \n                  clicked by the user.\n                - #get_hot_key() == hotkey\n        !*/\n        \n        menu_item_text (\n            const std::string& str,\n            const any_function<void()>& on_click_handler,\n            unichar hotkey = 0\n        ); \n        /*!\n            ensures\n                - The text of this menu item will be str\n                - the on_click_handler function is called when this menu_item \n                  clicked by the user.\n                - #get_hot_key() == hotkey\n        !*/\n        \n        // overloads for wide character strings\n        template <\n            typename T\n            >\n        menu_item_text (\n            const std::wstring& str,\n            T& object,\n            void (T::*on_click_handler)(),\n            unichar hotkey = 0\n        ); \n\n        menu_item_text (\n            const std::wstring& str,\n            const any_function<void()>& on_click_handler,\n            unichar hotkey = 0\n        ); \n\n        template <\n            typename T\n            >\n        menu_item_text (\n            const dlib::ustring& str,\n            T& object,\n            void (T::*on_click_handler)(),\n            unichar hotkey = 0\n        ); \n\n        template <\n            typename T\n            >\n        menu_item_text (\n            const dlib::ustring& str,\n            const any_function<void()>& on_click_handler,\n            unichar hotkey = 0\n        ); \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class menu_item_submenu : public menu_item\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple text item intended to be used with\n                submenus inside a popup_menu.\n        !*/\n\n    public:\n\n        menu_item_submenu (\n            const std::string& str,\n            unichar hotkey = 0\n        ); \n        /*!\n            ensures\n                - The text of this menu item will be str\n                - #get_hot_key() == hotkey\n        !*/\n\n        //overloads for wide character strings\n        menu_item_submenu (\n            const std::wstring& str,\n            unichar hotkey = 0\n        ); \n\n        menu_item_submenu (\n            const dlib::ustring& str,\n            unichar hotkey = 0\n        ); \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class menu_item_separator : public menu_item\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a horizontal separator in a popup menu \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class popup_menu : public base_window\n    {\n        /*!\n            INITIAL VALUE\n                - size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a popup menu window capable of containing\n                menu_item objects.\n        !*/\n\n    public:\n\n        popup_menu (\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                - dlib::gui_error\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc \n                  if this exception is thrown then *this is unusable\n                  until clear() is called and succeeds\n        !*/\n\n        template <\n            typename menu_item_type\n            >\n        unsigned long add_menu_item (\n            const menu_item_type& new_item\n        );\n        /*!\n            requires\n                - menu_item_type == a type that inherits from menu_item \n            ensures\n                - adds new_item onto the bottom of this popup_menu. \n                - returns size() \n                  (This is also the index by which this item can be\n                  referenced by the enable_menu_item() and disable_menu_item()\n                  functions.)\n        !*/\n        \n        template <\n            typename menu_item_type\n            >\n        unsigned long add_submenu (\n            const menu_item_type& new_item,\n            popup_menu& submenu\n        );\n        /*!\n            requires\n                - menu_item_type == a type that inherits from menu_item \n            ensures\n                - adds new_item onto the bottom of this popup_menu. \n                - when the user puts the mouse above this menu_item the given\n                  submenu popup_menu will be displayed.\n                - returns size() \n                  (This is also the index by which this item can be\n                  referenced by the enable_menu_item() and disable_menu_item()\n                  functions.)\n        !*/\n\n        void enable_menu_item (\n            unsigned long idx\n        );\n        /*!\n            requires\n                - idx < size()\n            ensures\n                - the menu_item in this with the index idx has been enabled \n        !*/\n\n        void disable_menu_item (\n            unsigned long idx\n        );\n        /*!\n            requires\n                - idx < size()\n            ensures\n                - the menu_item in this with the index idx has been disabled\n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of menu_item objects in this popup_menu\n        !*/\n\n        template <typename T>\n        void set_on_hide_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            ensures\n                - the event_handler function is called on object when this popup_menu\n                  hides itself due to an action by the user. \n                - Note that you can register multiple handlers for this event. \n        !*/\n\n        void select_first_item (\n        );\n        /*!\n            ensures\n                - causes this popup menu to highlight the first \n                  menu item that it contains which has a click event \n                  and is enabled.\n        !*/\n\n        bool forwarded_on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        );\n        /*!\n            requires\n                - key, is_printable, and state are the variables from the\n                  base_window::on_keydown() event\n            ensures\n                - forwards this keyboard event to this popup window so that it\n                  may deal with keyboard events from other windows.\n                - if (this popup_menu uses the keyboard event) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n    private:\n\n        // restricted functions\n        popup_menu(popup_menu&);        // copy constructor\n        popup_menu& operator=(popup_menu&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class popup_menu_region \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class popup_menu_region : public drawable \n    {\n        /*!\n            INITIAL VALUE\n                - popup_menu_visible() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a region on a window where if the user\n                right clicks the mouse over this region a popup_menu pops up.\n                \n                Note that this widget doesn't actually draw anything, it just \n                provides a region the user can click on to get a popup menu.\n        !*/\n\n    public:\n\n        popup_menu_region(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~popup_menu_region(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_size (\n            unsigned long width_, \n            unsigned long height_ \n        );\n        /*!\n            ensures\n                - #width() == width_\n                - #height() == height_\n                - #top() == top()\n                - #left() == left()\n                - i.e. The location of the upper left corner of this widget stays the\n                  same but its width and height are modified\n        !*/\n\n        void set_rect (\n            const rectangle& new_rect\n        );\n        /*!\n            ensures\n                - #get_rect() == new_rect\n        !*/\n\n        bool popup_menu_visible (\n        ) const;\n        /*!\n            ensures\n                - if (the popup menu is currently visible on the screen) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        popup_menu& menu (\n        );\n        /*!\n            ensures\n                - returns a reference to the popup_menu for this object. It is\n                  the menu that is displayed when the user right clicks on \n                  this widget\n        !*/\n\n    private:\n\n        // restricted functions\n        popup_menu_region(popup_menu_region&);        // copy constructor\n        popup_menu_region& operator=(popup_menu_region&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class zoomable_region \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class zoomable_region : public drawable \n    {\n        /*\n            INITIAL VALUE\n                - min_zoom_scale() == 0.15\n                - max_zoom_scale() == 1.0\n                - zoom_increment() == 0.90\n                - zoom_scale() == 1.0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a 2D Cartesian graph that you can zoom into and\n                out of.  It is a graphical widget that draws a rectangle with \n                a horizontal and vertical scroll bar that allow the user to scroll\n                around on a Cartesian graph that is much larger than the actual \n                area occupied by this object on the screen.  It also allows \n                the user to zoom in and out.\n\n                To use this object you inherit from it and make use of its public and\n                protected member functions.  It provides functions for converting between\n                pixel locations and the points in our 2D Cartesian graph so that when the \n                user is scrolling/zooming the widget you can still determine where\n                things are to be placed on the screen and what screen pixels correspond\n                to in the Cartesian graph.\n\n                Note that the Cartesian graph in this object is bounded by the point\n                (0,0), corresponding to the upper left corner when we are zoomed all \n                the way out, and max_graph_point() which corresponds to the lower right \n                corner when zoomed all the way out. The value of max_graph_point() is \n                determined automatically from the size of this object's on screen \n                rectangle and the value of min_zoom_scale() which determines how far \n                out you can zoom.\n        */\n\n    public:\n\n        zoomable_region (\n            drawable_window& w,\n            unsigned long events = 0\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n                - This object will not receive any events or draw() requests until \n                  enable_events() is called\n                - the events flags are passed on to the drawable object's \n                  constructor.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~zoomable_region (\n        ) = 0;\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        );\n        /*!\n            requires\n                - style_type == a type that inherits from scrollable_region_style \n            ensures\n                - this zoomable_region object will draw itself using the given\n                  style\n        !*/\n\n        void set_zoom_increment (\n            double zi\n        );\n        /*!\n            requires\n                - 0 < zi < 1\n            ensures\n                - #zoom_increment() == zi\n        !*/\n\n        double zoom_increment (\n        ) const;\n        /*!\n            ensures\n                - When the user zooms in using the mouse wheel:\n                    - #zoom_scale() == zoom_scale() / zoom_increment()\n                - When the user zooms out using the mouse wheel:\n                    - #zoom_scale() == zoom_scale() * zoom_increment()\n                - So this function returns the number that determines how much the zoom\n                  changes when the mouse wheel is moved.\n        !*/\n\n        void set_max_zoom_scale (\n            double ms \n        );\n        /*!\n            requires\n                - ms > 0\n            ensures\n                - #max_zoom_scale() == ms\n        !*/\n\n        void set_min_zoom_scale (\n            double ms \n        );\n        /*!\n            requires\n                - ms > 0\n            ensures\n                - #min_zoom_scale() == ms\n        !*/\n\n        double min_zoom_scale (\n        ) const;\n        /*!\n            ensures\n                - returns the minimum allowed value of zoom_scale()\n                  (i.e. this is the number that determines how far out the user is allowed to zoom)\n        !*/\n\n        double max_zoom_scale (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum allowed value of zoom_scale() \n                  (i.e. this is the number that determines how far in the user is allowed to zoom)\n        !*/\n\n        virtual void set_size (\n            unsigned long width,\n            unsigned long height\n        );\n        /*! \n            ensures\n                - #width() == width_\n                - #height() == height_\n                - #top() == top()\n                - #left() == left()\n                - i.e. The location of the upper left corner of this button stays the\n                  same but its width and height are modified\n        !*/\n\n    protected:\n\n        rectangle display_rect (\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - returns the rectangle on the screen that contains the Cartesian\n                  graph in this widget.  I.e. this is the area of this widget minus\n                  the area taken up by the scroll bars and border decorations.\n        !*/\n\n        point graph_to_gui_space (\n            const vector<double,2>& graph_point\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - returns the location of the pixel on the screen that corresponds\n                  to the given point in Cartesian graph space\n        !*/\n\n        vector<double,2> gui_to_graph_space (\n            const point& pixel_point\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - returns the point in Cartesian graph space that corresponds to the given\n                  pixel location\n        !*/\n\n        vector<double,2> max_graph_point (\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - returns the pixel farthest from the graph point (0,0) that is still\n                  in the graph.  I.e. returns the point in graph space that corresponds\n                  to the lower right corner of the display_rect() when we are zoomed\n                  all the way out.\n        !*/\n\n        double zoom_scale (\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - returns a double Z that represents the current zoom.  \n                    - Smaller values of Z represent the user zooming out. \n                    - Bigger values of Z represent the user zooming in.  \n                    - The default unzoomed case is when Z == 1\n                    - objects should be drawn such that they are zoom_scale() \n                      times their normal size\n        !*/\n\n        void set_zoom_scale (\n            double new_scale\n        );\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - invalidates the display_rect() so that it will be redrawn\n                - if (min_zoom_scale() <= new_scale && new_scale <= max_zoom_scale()) then\n                    - #zoom_scale() == new_scale\n                - else if (new_scale < min_zoom_scale()) then\n                    - #zoom_scale() == min_zoom_scale() \n                - else if (new_scale > max_zoom_scale()) then\n                    - #zoom_scale() == max_zoom_scale() \n        !*/\n\n        void center_display_at_graph_point (\n            const vector<double,2>& graph_point\n        );\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - causes the given graph point to be centered in the display\n                  if possible\n                - invalidates the display_rect() so that it will be redrawn\n        !*/\n\n        virtual void on_view_changed (\n        ) {}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex drawable::m is locked\n            ensures\n                - on_view_changed() is called whenever the user causes the view of the\n                  zoomable_region to change.  That is, this function is called when the\n                  user scrolls or zooms around in the region.\n        !*/\n\n    // ---------------------------- event handlers ----------------------------\n    // The following event handlers are used in this object.  So if you\n    // use any of them in your derived object you should pass the events \n    // back to it so that they still operate unless you wish to hijack the\n    // event for your own reasons (e.g. to override the mouse drag this object\n    // performs)\n\n        void on_wheel_down (unsigned long state);\n        void on_wheel_up (unsigned long state);\n        void on_mouse_move ( unsigned long state, long x, long y);\n        void on_mouse_up ( unsigned long btn, unsigned long state, long x, long y);\n        void on_mouse_down ( unsigned long btn, unsigned long state, long x, long y, bool is_double_click);\n        void draw ( const canvas& c) const;\n\n    private:\n\n        // restricted functions\n        zoomable_region(zoomable_region&);        // copy constructor\n        zoomable_region& operator=(zoomable_region&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class scrollable_region : public drawable \n    {\n        /*!\n            INITIAL VALUE\n                - horizontal_scroll_pos() == 0\n                - horizontal_scroll_increment() == 1\n                - horizontal_mouse_wheel_scroll_increment() == 1\n                - vertical_scroll_pos() == 0\n                - vertical_scroll_increment() == 1\n                - vertical_mouse_wheel_scroll_increment() == 1\n                - total_rect().empty() == true\n                - mouse_drag_enabled() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a 2D region of arbitrary size that is displayed\n                within a possibly smaller scrollable gui widget.  That is, it is a \n                graphical widget that draws a rectangle with a horizontal and vertical \n                scroll bar that allows the user to scroll around on a region that is much \n                larger than the actual area occupied by this object on the screen. \n                \n                To use this object you inherit from it and make use of its public and\n                protected member functions.  It provides a function, total_rect(), that\n                tells you where the 2D region is on the screen.  You draw your stuff \n                inside total_rect() as you would normally except that you only modify \n                pixels that are also inside display_rect().  When the user moves the\n                scroll bars the position of total_rect() is updated accordingly, causing\n                the widget's content to scroll across the screen. \n        !*/\n\n    public:\n        scrollable_region (\n            drawable_window& w,\n            unsigned long events = 0\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n                - This object will not receive any events or draw() requests until \n                  enable_events() is called\n                - the events flags are passed on to the drawable object's \n                  constructor.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~scrollable_region (\n        ) = 0;\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        );\n        /*!\n            requires\n                - style_type == a type that inherits from scrollable_region_style \n            ensures\n                - this scrollable_region object will draw itself using the given\n                  style\n        !*/\n\n        virtual void set_size (\n            unsigned long width,\n            unsigned long height\n        );\n        /*! \n            ensures\n                - #width() == width_\n                - #height() == height_\n                - #top() == top()\n                - #left() == left()\n                - i.e. The location of the upper left corner of this button stays the\n                  same but its width and height are modified\n        !*/\n\n        long horizontal_scroll_pos (\n        ) const;\n        /*!\n            ensures\n                - returns the current position of the horizontal scroll bar.\n                  0 means it is at the far left while bigger values represent\n                  scroll positions closer to the right.\n        !*/\n\n        long vertical_scroll_pos (\n        ) const;\n        /*!\n            ensures\n                - returns the current position of the vertical scroll bar.\n                  0 means it is at the top and bigger values represent scroll positions\n                  closer to the bottom.\n        !*/\n\n        void set_horizontal_scroll_pos (\n            long pos\n        );\n        /*!\n            ensures\n                - if (pos is a valid horizontal scroll position) then\n                    - #horizontal_scroll_pos() == pos\n                - else\n                    - #horizontal_scroll_pos() == the valid scroll position closest to pos\n        !*/\n\n        void set_vertical_scroll_pos (\n            long pos\n        );\n        /*!\n            ensures\n                - if (pos is a valid vertical scroll position) then\n                    - #vertical_scroll_pos() == pos\n                - else\n                    - #vertical_scroll_pos() == the valid scroll position closest to pos\n        !*/\n\n        unsigned long horizontal_mouse_wheel_scroll_increment (\n        ) const;\n        /*!\n            ensures\n                - returns the number of positions the horizontal scroll bar\n                  moves when the user scrolls the mouse wheel.  \n        !*/\n\n        unsigned long vertical_mouse_wheel_scroll_increment (\n        ) const;\n        /*!\n            ensures\n                - returns the number of positions the vertical scroll bar\n                  moves when the user scrolls the mouse wheel.  \n        !*/\n\n        void set_horizontal_mouse_wheel_scroll_increment (\n            unsigned long inc\n        );\n        /*!\n            ensures\n                - #horizontal_mouse_wheel_scroll_increment() == inc\n        !*/\n\n        void set_vertical_mouse_wheel_scroll_increment (\n            unsigned long inc\n        );\n        /*!\n            ensures\n                - #vertical_mouse_wheel_scroll_increment() == inc\n        !*/\n\n\n        unsigned long horizontal_scroll_increment (\n        ) const;\n        /*!\n            ensures\n                - returns the number of pixels that total_rect() is moved by when\n                  the horizontal scroll bar moves by one position\n        !*/\n\n        unsigned long vertical_scroll_increment (\n        ) const;\n        /*!\n            ensures\n                - returns the number of pixels that total_rect() is moved by when\n                  the vertical scroll bar moves by one position\n        !*/\n\n        void set_horizontal_scroll_increment (\n            unsigned long inc\n        );\n        /*!\n            ensures\n                - #horizontal_scroll_increment() == inc\n        !*/\n\n        void set_vertical_scroll_increment (\n            unsigned long inc\n        );\n        /*!\n            ensures\n                - #vertical_scroll_increment() == inc\n        !*/\n\n        bool mouse_drag_enabled (\n        ) const;\n        /*!\n            ensures\n                - if (the user can drag this contents of this widget around by\n                  holding down the left mouse button and dragging) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void enable_mouse_drag (\n        );\n        /*!\n            ensures\n                - #mouse_drag_enabled() == true\n        !*/\n\n        void disable_mouse_drag (\n        );\n        /*!\n            ensures\n                - #mouse_drag_enabled() == false\n        !*/\n\n    protected:\n\n        rectangle display_rect (\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - returns the rectangle on the screen that contains the scrollable \n                  area in this widget.  I.e. this is the area of this widget minus\n                  the area taken up by the scroll bars and border decorations.\n        !*/\n\n        void set_total_rect_size (\n            unsigned long width,\n            unsigned long height\n        );\n        /*!\n            requires\n                - mutex drawable::m is locked\n                - (width > 0 && height > 0) || (width == 0 && height == 0)\n            ensures\n                - #total_rect().width()  == width\n                - #total_rect().height() == height \n                - The scroll bars as well as the position of #total_rect() \n                  is updated so that the total rect is still in the correct\n                  position with respect to the scroll bars.\n        !*/\n\n        const rectangle& total_rect (\n        ) const;\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - returns a rectangle that represents the entire scrollable\n                  region inside this widget, even the parts that are outside\n                  display_rect().  \n        !*/\n\n        void scroll_to_rect (\n            const rectangle& r\n        );\n        /*!\n            requires\n                - mutex drawable::m is locked\n            ensures\n                - Adjusts the scroll bars of this object so that the part of \n                  the total_rect() rectangle that overlaps with r is displayed in \n                  the display_rect() rectangle on the screen.\n        !*/\n\n        virtual void on_view_changed (\n        ) {}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex drawable::m is locked\n            ensures\n                - on_view_changed() is called whenever the user causes the view of the\n                  scrollable_region to change.  That is, this function is called when the\n                  user scrolls around in the region.\n        !*/\n\n    // ---------------------------- event handlers ----------------------------\n    // The following event handlers are used in this object.  So if you\n    // use any of them in your derived object you should pass the events \n    // back to it so that they still operate unless you wish to hijack the\n    // event for your own reasons (e.g. to override the mouse wheel action \n    // this object performs)\n\n        void on_wheel_down (unsigned long state);\n        void on_wheel_up   (unsigned long state);\n        void on_mouse_move (unsigned long state, long x, long y);\n        void on_mouse_down (unsigned long btn, unsigned long state, long x, long y, bool is_double_click);\n        void on_mouse_up   (unsigned long btn, unsigned long state, long x, long y);\n        void draw (const canvas& c) const;\n\n    private:\n\n        // restricted functions\n        scrollable_region(scrollable_region&);        // copy constructor\n        scrollable_region& operator=(scrollable_region&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BASE_WIDGETs_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/canvas_drawing.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), and Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CANVAS_DRAWINg_CPP_\n#define DLIB_CANVAS_DRAWINg_CPP_\n\n#include \"canvas_drawing.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_sunken_rectangle (\n        const canvas& c,\n        const rectangle& border,\n        unsigned char alpha\n    )\n    {\n        rectangle area = border.intersect(c);\n        if (area.is_empty() == false)\n        {\n            const rgb_alpha_pixel dark_gray(64,64,64,alpha);\n            const rgb_alpha_pixel gray(128,128,128,alpha);\n            const rgb_alpha_pixel white(255,255,255,alpha);\n            const rgb_alpha_pixel background(212,208,200,alpha);\n\n            draw_line(c,point(border.left(),border.top()),point(border.right()-1,border.top()),gray);\n\n            draw_line(c,point(border.left(),border.bottom()),point(border.right(),border.bottom()),white);\n            draw_line(c,point(border.left()+1,border.bottom()-1),point(border.right()-1,border.bottom()-1),background);\n\n            draw_line(c,point(border.left(),border.top()+1),point(border.left(),border.bottom()-1),gray);\n\n            draw_line(c,point(border.right(),border.top()),point(border.right(),border.bottom()-1),white);\n            draw_line(c,point(border.right()-1,border.top()+1),point(border.right()-1,border.bottom()-2),background);\n\n            draw_line(c,point(border.left()+1,border.top()+1),point(border.left()+1,border.bottom()-2),dark_gray);\n            draw_line(c,point(border.left()+1,border.top()+1),point(border.right()-2,border.top()+1),dark_gray);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_button_down (\n        const canvas& c,\n        const rectangle& btn,\n        unsigned char alpha\n    )\n    {\n        rectangle area = btn.intersect(c);\n        if (area.is_empty() == false)\n        {\n            const rgb_alpha_pixel dark_gray(64,64,64,alpha);\n            const rgb_alpha_pixel gray(128,128,128,alpha);\n            const rgb_alpha_pixel black(0,0,0,alpha);\n\n            draw_line(c,point(btn.left(),btn.top()),point(btn.right(),btn.top()),black);\n\n            draw_line(c,point(btn.left()+1,btn.bottom()),point(btn.right(),btn.bottom()),dark_gray);\n            draw_line(c,point(btn.left()+1,btn.top()+1),point(btn.right()-1,btn.top()+1),gray);\n\n            draw_line(c,point(btn.left(),btn.top()+1),point(btn.left(),btn.bottom()),black);\n\n            draw_line(c,point(btn.right(),btn.top()+1),point(btn.right(),btn.bottom()-1),dark_gray);\n            draw_line(c,point(btn.left()+1,btn.top()+1),point(btn.left()+1,btn.bottom()-1),gray);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_button_up (\n        const canvas& c,\n        const rectangle& btn,\n        unsigned char alpha\n    )\n    {\n        rectangle area = btn.intersect(c);\n        if (area.is_empty() == false)\n        {\n            const rgb_alpha_pixel dark_gray(64,64,64,alpha);\n            const rgb_alpha_pixel gray(128,128,128,alpha);\n            const rgb_alpha_pixel white(255,255,255,alpha);\n\n            draw_line(c,point(btn.left(),btn.top()),point(btn.right()-1,btn.top()),white);\n\n            draw_line(c,point(btn.left(),btn.bottom()),point(btn.right(),btn.bottom()),dark_gray);\n            draw_line(c,point(btn.left()+1,btn.bottom()-1),point(btn.right()-1,btn.bottom()-1),gray);\n\n            draw_line(c,point(btn.left(),btn.top()+1),point(btn.left(),btn.bottom()-1),white);\n\n            draw_line(c,point(btn.right(),btn.top()),point(btn.right(),btn.bottom()-1),dark_gray);\n            draw_line(c,point(btn.right()-1,btn.top()+1),point(btn.right()-1,btn.bottom()-2),gray);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CANVAS_DRAWINg_CPP_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/canvas_drawing.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), and Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#ifndef DLIB_GUI_CANVAS_DRAWINg_\n#define DLIB_GUI_CANVAS_DRAWINg_\n\n#include \"canvas_drawing_abstract.h\"\n#include \"../gui_core.h\"\n#include \"../algs.h\"\n#include \"../array2d.h\"\n#include \"../pixel.h\"\n#include \"../image_transforms/assign_image.h\"\n#include \"../geometry.h\"\n#include <cmath>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void draw_line (\n        const canvas& c,\n        const point& p1,\n        const point& p2,\n        const pixel_type& pixel, \n        const rectangle& area = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n    )\n    {\n        rectangle valid_area(c.intersect(area));\n        long x1 = p1.x();\n        long y1 = p1.y();\n        long x2 = p2.x();\n        long y2 = p2.y();\n        if (x1 == x2)\n        {\n            // if the x coordinate is inside the canvas's area\n            if (x1 <= valid_area.right() && x1 >= valid_area.left())\n            {\n                // make sure y1 comes before y2\n                if (y1 > y2)\n                    swap(y1,y2);\n\n                y1 = std::max(y1,valid_area.top());\n                y2 = std::min(y2,valid_area.bottom());\n                // this is a vertical line\n                for (long y = y1; y <= y2; ++y)\n                {\n                    assign_pixel(c[y-c.top()][x1-c.left()], pixel);\n                }\n            }\n        }\n        else if (y1 == y2)\n        {\n            // if the y coordinate is inside the canvas's area\n            if (y1 <= valid_area.bottom() && y1 >= valid_area.top())\n            {\n                // make sure x1 comes before x2\n                if (x1 > x2)\n                    swap(x1,x2);\n\n                x1 = std::max(x1,valid_area.left());\n                x2 = std::min(x2,valid_area.right());\n                // this is a horizontal line\n                for (long x = x1; x <= x2; ++x)\n                {\n                    assign_pixel(c[y1-c.top()][x-c.left()], pixel);\n                }\n            }\n        }\n        else\n        {\n            rgb_alpha_pixel alpha_pixel;\n            assign_pixel(alpha_pixel, pixel);\n            const unsigned char max_alpha = alpha_pixel.alpha;\n\n            const long rise = (((long)y2) - ((long)y1));\n            const long run = (((long)x2) - ((long)x1));\n            if (std::abs(rise) < std::abs(run))\n            {\n                const double slope = ((double)rise)/run;\n\n                double first, last;\n\n                if (x1 > x2)                \n                {\n                    first = std::max(x2,valid_area.left());\n                    last = std::min(x1,valid_area.right());\n                }\n                else\n                {\n                    first = std::max(x1,valid_area.left());\n                    last = std::min(x2,valid_area.right());\n                }                             \n\n\n                long y;\n                long x;\n                const double x1f = x1;\n                const double y1f = y1;\n                for (double i = first; i <= last; ++i)\n                {   \n                    const double dy = slope*(i-x1f) + y1f;\n                    const double dx = i;\n\n                    y = static_cast<long>(dy);\n                    x = static_cast<long>(dx);\n\n\n                    if (y >= valid_area.top() && y <= valid_area.bottom())\n                    {\n                        alpha_pixel.alpha = static_cast<unsigned char>((1.0-(dy-y))*max_alpha);\n                        assign_pixel(c[y-c.top()][x-c.left()], alpha_pixel);\n                    }\n                    if (y+1 >= valid_area.top() && y+1 <= valid_area.bottom())\n                    {\n                        alpha_pixel.alpha = static_cast<unsigned char>((dy-y)*max_alpha);\n                        assign_pixel(c[y+1-c.top()][x-c.left()], alpha_pixel);\n                    }\n                }         \n            }\n            else\n            {\n                const double slope = ((double)run)/rise;\n\n                double first, last;\n\n                if (y1 > y2)                \n                {\n                    first = std::max(y2,valid_area.top());\n                    last = std::min(y1,valid_area.bottom());\n                }\n                else\n                {\n                    first = std::max(y1,valid_area.top());\n                    last = std::min(y2,valid_area.bottom());\n                }                             \n\n                long x;\n                long y;\n                const double x1f = x1;\n                const double y1f = y1;\n                for (double i = first; i <= last; ++i)\n                {   \n                    const double dx = slope*(i-y1f) + x1f;\n                    const double dy = i;\n\n                    y = static_cast<long>(dy);\n                    x = static_cast<long>(dx);\n\n                    if (x >= valid_area.left() && x <= valid_area.right())\n                    {\n                        alpha_pixel.alpha = static_cast<unsigned char>((1.0-(dx-x))*max_alpha);\n                        assign_pixel(c[y-c.top()][x-c.left()], alpha_pixel);\n                    }\n                    if (x+1 >= valid_area.left() && x+1 <= valid_area.right())\n                    {\n                        alpha_pixel.alpha = static_cast<unsigned char>((dx-x)*max_alpha);\n                        assign_pixel(c[y-c.top()][x+1-c.left()], alpha_pixel);\n                    }\n                } \n            }\n        }\n\n    }\n    inline void draw_line (\n        const canvas& c,\n        const point& p1,\n        const point& p2\n    ){ draw_line(c,p1,p2,0); }\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_sunken_rectangle (\n        const canvas& c,\n        const rectangle& border,\n        unsigned char alpha = 255\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    inline void draw_pixel (\n        const canvas& c,\n        const point& p,\n        const pixel_type& pixel \n    )\n    {\n        if (c.contains(p))\n        {\n            assign_pixel(c[p.y()-c.top()][p.x()-c.left()],pixel);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void draw_checkered (\n        const canvas& c,\n        const rectangle& a,\n        const pixel_type& pixel1,\n        const pixel_type& pixel2\n    )\n    {\n        rectangle area = a.intersect(c);\n        if (area.is_empty())\n            return;\n\n        for (long i = area.left(); i <= area.right(); ++i)\n        {\n            for (long j = area.top(); j <= area.bottom(); ++j)\n            {\n                canvas::pixel& p = c[j - c.top()][i - c.left()];\n                if ((j&0x1) ^ (i&0x1))\n                {\n                    assign_pixel(p,pixel1);\n                }\n                else\n                {\n                    assign_pixel(p,pixel2);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_button_down (\n        const canvas& c,\n        const rectangle& btn,\n        unsigned char alpha = 255\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_button_up (\n        const canvas& c,\n        const rectangle& btn,\n        unsigned char alpha = 255\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void draw_circle (\n        const canvas& c,\n        const point& center_point,\n        double radius,\n        const pixel_type& pixel,\n        const rectangle& area = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n    )\n    {\n        using std::sqrt;\n        rectangle valid_area(c.intersect(area));\n        const long x = center_point.x();\n        const long y = center_point.y();\n        if (radius > 1)\n        {\n            long first_x = static_cast<long>(x - radius + 0.5);\n            long last_x = static_cast<long>(x + radius + 0.5);\n            const double rs = radius*radius;\n\n            // ensure that we only loop over the part of the x dimension that this\n            // canvas contains.\n            if (first_x < valid_area.left())\n                first_x = valid_area.left();\n            if (last_x > valid_area.right())\n                last_x = valid_area.right();\n\n            long top, bottom;\n\n            top = static_cast<long>(sqrt(std::max(rs - (first_x-x-0.5)*(first_x-x-0.5),0.0))+0.5);\n            top += y;\n            long last = top;\n\n            // draw the left half of the circle\n            long middle = std::min(x-1,last_x);\n            for (long i = first_x; i <= middle; ++i)\n            {\n                double a = i - x + 0.5;\n                // find the top of the arc\n                top = static_cast<long>(sqrt(std::max(rs - a*a,0.0))+0.5);\n                top += y;\n                long temp = top;\n\n                while(top >= last) \n                {\n                    bottom = y - top + y;\n                    if (top >= valid_area.top() && top <= valid_area.bottom() )\n                    {\n                        assign_pixel(c[top-c.top()][i-c.left()],pixel);\n                    }\n\n                    if (bottom >= valid_area.top() && bottom <= valid_area.bottom() )\n                    {\n                        assign_pixel(c[bottom-c.top()][i-c.left()],pixel);\n                    }\n                    --top;\n                }\n\n                last = temp;\n            }\n\n            middle = std::max(x,first_x);\n            top = static_cast<long>(sqrt(std::max(rs - (last_x-x+0.5)*(last_x-x+0.5),0.0))+0.5);\n            top += y;\n            last = top;\n            // draw the right half of the circle\n            for (long i = last_x; i >= middle; --i)\n            {\n                double a = i - x - 0.5;\n                // find the top of the arc\n                top = static_cast<long>(sqrt(std::max(rs - a*a,0.0))+0.5);\n                top += y;\n                long temp = top;\n\n                while(top >= last) \n                {\n                    bottom = y - top + y;\n                    if (top >= valid_area.top() && top <= valid_area.bottom() )\n                    {\n                        assign_pixel(c[top-c.top()][i-c.left()],pixel);\n                    }\n\n                    if (bottom >= valid_area.top() && bottom <= valid_area.bottom() )\n                    {\n                        assign_pixel(c[bottom-c.top()][i-c.left()],pixel);\n                    }\n                    --top;\n                }\n\n                last = temp;\n            }\n        }\n        else if (radius == 1 &&\n                 x >= valid_area.left() && x <= valid_area.right() &&\n                 y >= valid_area.top() && y <= valid_area.bottom() )\n        {\n            assign_pixel(c[y-c.top()][x-c.left()], pixel);\n        }\n    }\n    inline void draw_circle (\n        const canvas& c,\n        const point& center_point,\n        double radius\n    ){ draw_circle(c, center_point, radius, 0); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void draw_solid_circle (\n        const canvas& c,\n        const point& center_point,\n        double radius,\n        const pixel_type& pixel,\n        const rectangle& area = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n    )\n    {\n        using std::sqrt;\n        rectangle valid_area(c.intersect(area));\n        const long x = center_point.x();\n        const long y = center_point.y();\n        if (radius > 1)\n        {\n            long first_x = static_cast<long>(x - radius + 0.5);\n            long last_x = static_cast<long>(x + radius + 0.5);\n            const double rs = radius*radius;\n\n            // ensure that we only loop over the part of the x dimension that this\n            // canvas contains.\n            if (first_x < valid_area.left())\n                first_x = valid_area.left();\n            if (last_x > valid_area.right())\n                last_x = valid_area.right();\n\n            long top, bottom;\n\n            top = static_cast<long>(sqrt(std::max(rs - (first_x-x-0.5)*(first_x-x-0.5),0.0))+0.5);\n            top += y;\n            long last = top;\n\n            // draw the left half of the circle\n            long middle = std::min(x-1,last_x);\n            for (long i = first_x; i <= middle; ++i)\n            {\n                double a = i - x + 0.5;\n                // find the top of the arc\n                top = static_cast<long>(sqrt(std::max(rs - a*a,0.0))+0.5);\n                top += y;\n                long temp = top;\n\n                while(top >= last) \n                {\n                    bottom = y - top + y;\n                    draw_line(c, point(i,top),point(i,bottom),pixel,area);\n                    --top;\n                }\n\n                last = temp;\n            }\n\n            middle = std::max(x,first_x);\n            top = static_cast<long>(sqrt(std::max(rs - (last_x-x+0.5)*(last_x-x+0.5),0.0))+0.5);\n            top += y;\n            last = top;\n            // draw the right half of the circle\n            for (long i = last_x; i >= middle; --i)\n            {\n                double a = i - x - 0.5;\n                // find the top of the arc\n                top = static_cast<long>(sqrt(std::max(rs - a*a,0.0))+0.5);\n                top += y;\n                long temp = top;\n\n                while(top >= last) \n                {\n                    bottom = y - top + y;\n                    draw_line(c, point(i,top),point(i,bottom),pixel,area);\n                    --top;\n                }\n\n                last = temp;\n            }\n        }\n        else if (radius == 1 &&\n                 x >= valid_area.left() && x <= valid_area.right() &&\n                 y >= valid_area.top() && y <= valid_area.bottom() )\n        {\n            assign_pixel(c[y-c.top()][x-c.left()], pixel);\n        }\n    }\n    inline void draw_solid_circle (\n        const canvas& c,\n        const point& center_point,\n        double radius\n    ) { draw_solid_circle(c, center_point, radius, 0); }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n\n        template <typename alloc>\n        void get_convex_polygon_shape (\n            const std::vector<point>& points,\n            const long top,\n            const long bottom,\n            std::vector<double,alloc>& left_boundary,\n            std::vector<double,alloc>& right_boundary\n        )\n        /*!\n            requires\n                - 0 <= top <= bottom \n            ensures\n                - interprets points as the coordinates defining a convex polygon.  In\n                  particular, we interpret points as a list of the vertices of the polygon\n                  and assume they are ordered in clockwise order.\n                - #left_boundary.size() == bottom-top+1\n                - #right_boundary.size() == bottom-top+1\n                - for all top <= y <= bottom:\n                    - #left_boundary[y-top] == the x coordinate for the left most side of\n                      the polygon at coordinate y.\n                    - #right_boundary[y-top] == the x coordinate for the right most side of\n                      the polygon at coordinate y.\n        !*/\n        {\n            using std::min;\n            using std::max;\n\n            left_boundary.assign(bottom-top+1, std::numeric_limits<double>::infinity());\n            right_boundary.assign(bottom-top+1, -std::numeric_limits<double>::infinity());\n\n            // trace out the points along the edge of the polynomial and record them\n            for (unsigned long i = 0; i < points.size(); ++i)\n            {\n                const point p1 = points[i];\n                const point p2 = points[(i+1)%points.size()];\n\n                if (p1.y() == p2.y())\n                {\n                    if (top <= p1.y() && p1.y() <= bottom)\n                    {\n                        const long y = p1.y() - top;\n                        const double xmin = min(p1.x(), p2.x());\n                        const double xmax = min(p1.x(), p2.x());\n                        left_boundary[y]  = min(left_boundary[y], xmin);\n                        right_boundary[y] = max(right_boundary[y], xmax);\n                    }\n                }\n                else\n                {\n                    // Here we trace out the line from p1 to p2 and record where it hits.  \n\n                    // x = m*y + b\n                    const double m = (p2.x() - p1.x())/(double)(p2.y()-p1.y());\n                    const double b = p1.x() - m*p1.y(); // because: x1 = m*y1 + b\n\n                    const long ymin = max(top,min(p1.y(), p2.y()));\n                    const long ymax = min(bottom,max(p1.y(), p2.y()));\n                    for (long y = ymin; y <= ymax; ++y)\n                    {\n                        const double x = m*y + b;\n                        const unsigned long idx = y-top;\n                        left_boundary[idx]  = min(left_boundary[idx], x);\n                        right_boundary[idx] = max(right_boundary[idx], x);\n                    }\n                }\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n    template <typename pixel_type>\n    void draw_solid_convex_polygon (\n        const canvas& c,\n        const std::vector<point>& polygon,\n        const pixel_type& pixel,\n        const rectangle& area = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n    )\n    {\n        using std::max;\n        using std::min;\n        const rectangle valid_area(c.intersect(area));\n\n        rectangle bounding_box;\n        for (unsigned long i = 0; i < polygon.size(); ++i)\n            bounding_box += polygon[i];\n\n        // Don't do anything if the polygon is totally outside the area we can draw in\n        // right now.\n        if (bounding_box.intersect(valid_area).is_empty())\n            return;\n\n        rgb_alpha_pixel alpha_pixel;\n        assign_pixel(alpha_pixel, pixel);\n        const unsigned char max_alpha = alpha_pixel.alpha;\n\n        // we will only want to loop over the part of left_boundary that is part of the\n        // valid_area.\n        long top = max(valid_area.top(),bounding_box.top());\n        long bottom = min(valid_area.bottom(),bounding_box.bottom());\n\n        // Since we look at the adjacent rows of boundary information when doing the alpha\n        // blending, we want to make sure we always have some boundary information unless\n        // we are at the absolute edge of the polygon.\n        const long top_offset = (top == bounding_box.top()) ? 0 : 1;\n        const long bottom_offset = (bottom == bounding_box.bottom()) ? 0 : 1;\n        if (top != bounding_box.top())\n            top -= 1;\n        if (bottom != bounding_box.bottom())\n            bottom += 1;\n\n        std::vector<double> left_boundary;\n        std::vector<double> right_boundary;\n        impl::get_convex_polygon_shape(polygon, top, bottom, left_boundary, right_boundary);\n\n\n        // draw the polygon row by row\n        for (unsigned long i = top_offset; i < left_boundary.size(); ++i)\n        {\n            long left_x = static_cast<long>(std::ceil(left_boundary[i]));\n            long right_x = static_cast<long>(std::floor(right_boundary[i]));\n\n            left_x = max(left_x, valid_area.left());\n            right_x = min(right_x, valid_area.right());\n\n            if (i < left_boundary.size()-bottom_offset)\n            {\n                // draw the main body of the polygon\n                for (long x = left_x; x <= right_x; ++x)\n                {\n                    const long y = i+top;\n                    assign_pixel(c[y-c.top()][x-c.left()], pixel);\n                }\n            }\n\n            if (i == 0)\n                continue;\n\n            // Now draw anti-aliased edges so they don't look all pixely.\n\n            // Alpha blend the edges on the left side.\n            double delta = left_boundary[i-1] - left_boundary[i];\n            if (std::abs(delta) <= 1)\n            {\n                if (std::floor(left_boundary[i]) != left_x)\n                {\n                    const point p(static_cast<long>(std::floor(left_boundary[i])), i+top);\n                    rgb_alpha_pixel temp = alpha_pixel;\n                    temp.alpha = max_alpha-static_cast<unsigned char>((left_boundary[i]-p.x())*max_alpha);\n                    if (valid_area.contains(p))\n                        assign_pixel(c[p.y()-c.top()][p.x()-c.left()],temp);\n                }\n            }\n            else if (delta < 0)  // on the bottom side\n            {\n                for (long x = static_cast<long>(std::ceil(left_boundary[i-1])); x < left_x; ++x)\n                {\n                    const point p(x, i+top);\n                    rgb_alpha_pixel temp = alpha_pixel;\n                    temp.alpha = static_cast<unsigned char>((x-left_boundary[i-1])/std::abs(delta)*max_alpha);\n                    if (valid_area.contains(p))\n                        assign_pixel(c[p.y()-c.top()][p.x()-c.left()],temp);\n                }\n            }\n            else // on the top side\n            {\n                const long old_left_x = static_cast<long>(std::ceil(left_boundary[i-1]));\n                for (long x = left_x; x < old_left_x; ++x)\n                {\n                    const point p(x, i+top-1);\n                    rgb_alpha_pixel temp = alpha_pixel;\n                    temp.alpha = static_cast<unsigned char>((x-left_boundary[i])/delta*max_alpha);\n                    if (valid_area.contains(p))\n                        assign_pixel(c[p.y()-c.top()][p.x()-c.left()],temp);\n                }\n            }\n\n\n            // Alpha blend the edges on the right side\n            delta = right_boundary[i-1] - right_boundary[i];\n            if (std::abs(delta) <= 1)\n            {\n                if (std::ceil(right_boundary[i]) != right_x)\n                {\n                    const point p(static_cast<long>(std::ceil(right_boundary[i])), i+top);\n                    rgb_alpha_pixel temp = alpha_pixel;\n                    temp.alpha = max_alpha-static_cast<unsigned char>((p.x()-right_boundary[i])*max_alpha);\n                    if (valid_area.contains(p))\n                        assign_pixel(c[p.y()-c.top()][p.x()-c.left()],temp);\n                }\n            }\n            else if (delta < 0) // on the top side\n            {\n                for (long x = static_cast<long>(std::floor(right_boundary[i-1]))+1; x <= right_x; ++x)\n                {\n                    const point p(x, i+top-1);\n                    rgb_alpha_pixel temp = alpha_pixel;\n                    temp.alpha = static_cast<unsigned char>((right_boundary[i]-x)/std::abs(delta)*max_alpha);\n                    if (valid_area.contains(p))\n                        assign_pixel(c[p.y()-c.top()][p.x()-c.left()],temp);\n                }\n            }\n            else // on the bottom side\n            {\n                const long old_right_x = static_cast<long>(std::floor(right_boundary[i-1]));\n                for (long x = right_x+1; x <= old_right_x; ++x)\n                {\n                    const point p(x, i+top);\n                    rgb_alpha_pixel temp = alpha_pixel;\n                    temp.alpha = static_cast<unsigned char>((right_boundary[i-1]-x)/delta*max_alpha);\n                    if (valid_area.contains(p))\n                        assign_pixel(c[p.y()-c.top()][p.x()-c.left()],temp);\n                }\n            }\n        }\n    }\n    inline void draw_solid_convex_polygon (\n        const canvas& c,\n        const std::vector<point>& polygon\n    ) { draw_solid_convex_polygon(c, polygon, 0); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void draw_image (\n        const canvas& c,\n        const point& p,\n        const image_type& img,\n        const rectangle& area_ = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n    )\n    {\n        const long x = p.x();\n        const long y = p.y();\n        rectangle rect(x,y,img.nc()+x-1,img.nr()+y-1);\n        rectangle area = c.intersect(rect).intersect(area_);\n        if (area.is_empty())\n            return;\n\n        for (long row = area.top(); row <= area.bottom(); ++row)\n        {\n            for (long col = area.left(); col <= area.right(); ++col)\n            {\n                assign_pixel(c[row-c.top()][col-c.left()], img[row-rect.top()][col-rect.left()]);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void draw_image (\n        const canvas& c,\n        const rectangle& rect,\n        const image_type& img,\n        const rectangle& area_ = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n    )\n    {\n        const rectangle area = c.intersect(rect).intersect(area_);\n        if (area.is_empty() || img.size() == 0)\n            return;\n\n        const matrix<long,1> x = matrix_cast<long>(round(linspace(0, img.nc()-1, rect.width())));\n        const matrix<long,1> y = matrix_cast<long>(round(linspace(0, img.nr()-1, rect.height())));\n\n        for (long row = area.top(); row <= area.bottom(); ++row)\n        {\n            const long r = y(row-rect.top());\n            long cc = area.left() - rect.left();\n            for (long col = area.left(); col <= area.right(); ++col)\n            {\n                assign_pixel(c[row-c.top()][col-c.left()], img[r][x(cc++)]);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void draw_rounded_rectangle (\n        const canvas& c,\n        const rectangle& rect,\n        unsigned radius,\n        const pixel_type& color,\n        const rectangle& area_ = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n    )\n    {\n        if ( rect.intersect ( c ).is_empty() )\n            return;\n\n        draw_line ( c, point(rect.left() + radius + 1, rect.bottom()), \n                    point(rect.right() - radius - 1, rect.bottom()), color,area_ );\n\n        draw_line ( c, point(rect.left() + radius + 1, rect.top()), \n                    point(rect.right() - radius - 1, rect.top()), color,area_ );\n\n        draw_line ( c, point(rect.left(), rect.top() + radius + 1), \n                    point(rect.left(), rect.bottom() - radius - 1), color,area_ );\n\n        draw_line ( c, point(rect.right(), rect.top() + radius + 1), \n                    point(rect.right(), rect.bottom() - radius - 1), color,area_ );\n\n        unsigned x = radius, y = 0, old_x = x;\n\n        point p;\n        while ( x > y )\n        {\n            p = point(rect.left() + radius - y, rect.top() + radius - x);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.right() - radius + y, rect.top() + radius - x);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.right() - radius + y, rect.bottom() - radius + x);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.left() + radius - y, rect.bottom() - radius + x);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.left() + radius - x, rect.top() + radius - y);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.right() - radius + x, rect.top() + radius - y);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.right() - radius + x, rect.bottom() - radius + y);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.left() + radius - x, rect.bottom() - radius + y);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            y++;\n            old_x = x;\n            x = square_root ( ( radius * radius - y * y ) * 4 ) / 2;\n        }\n\n        if ( x == y && old_x != x )\n        {\n            p = point(rect.left() + radius - y, rect.top() + radius - x);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.right() - radius + y, rect.top() + radius - x);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.right() - radius + y, rect.bottom() - radius + x);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n            p = point(rect.left() + radius - y, rect.bottom() - radius + x);\n            if (area_.contains(p)) draw_pixel (c, p , color );\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void fill_gradient_rounded (\n        const canvas& c,\n        const rectangle& rect,\n        unsigned long radius,\n        const pixel_type& top_color,\n        const pixel_type& bottom_color,\n        const rectangle& area = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n\n    )\n    {\n        rectangle valid_area(c.intersect(area.intersect(rect)));\n        if ( valid_area.is_empty() )\n            return;\n\n\n        unsigned long m_prev = 0, m = radius, c_div = valid_area.height() - 1;\n\n        const long c_top = valid_area.top();\n        const long c_bottom = valid_area.bottom();\n\n        for ( long y = c_top; y <= c_bottom;y++ )\n        {\n\n            unsigned long c_s = y - c_top;\n\n            unsigned long c_t = c_bottom - y;\n\n\n            if ( c_div == 0 )\n            {\n                // only a single round, just take the average color\n                c_div = 2;\n                c_s = c_t = 1;\n            }\n\n            rgb_alpha_pixel color;\n            vector_to_pixel(color,\n                            ((pixel_to_vector<unsigned long>(top_color)*c_t + pixel_to_vector<unsigned long>(bottom_color)*c_s)/c_div));\n\n            unsigned long s = y - rect.top();\n\n            unsigned long t = rect.bottom() - y;\n\n            if ( s < radius )\n            {\n                m = radius - square_root ( ( radius * radius - ( radius - s ) * ( radius - s ) ) * 4 ) / 2;\n\n                if ( s == m && m + 1 < m_prev )  // these are hacks to remove distracting artefacts at small radii\n                    m++;\n            }\n            else if ( t < radius )\n            {\n                m = radius - square_root ( ( radius * radius - ( radius - t ) * ( radius - t ) ) * 4 ) / 2;\n\n                if ( t == m && m == m_prev )\n                    m++;\n            }\n            else\n            {\n                m = 0;\n            }\n\n            m_prev = m;\n\n            draw_line ( c, point(rect.left() + m, y), \n                        point(rect.right() - m, y), color, valid_area );\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void draw_rectangle (\n        const canvas& c,\n        rectangle rect,\n        const pixel_type& pixel,\n        const rectangle& area = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n    )\n    {\n        // top line\n        draw_line(c, point(rect.left(),rect.top()),\n                  point(rect.right(),rect.top()),\n                  pixel, area);\n\n        // bottom line\n        draw_line(c, point(rect.left(),rect.bottom()),\n                  point(rect.right(),rect.bottom()),\n                  pixel, area);\n\n        // left line\n        draw_line(c, point(rect.left(),rect.top()),\n                  point(rect.left(),rect.bottom()),\n                  pixel, area);\n\n        // right line\n        draw_line(c, point(rect.right(),rect.top()),\n                  point(rect.right(),rect.bottom()),\n                  pixel, area);\n    }\n    inline void draw_rectangle (\n        const canvas& c,\n        rectangle rect\n    ){ draw_rectangle(c, rect, 0); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void fill_rect (\n        const canvas& c,\n        const rectangle& rect,\n        const pixel_type& pixel\n    )\n    {\n        rectangle area = rect.intersect(c);\n        for (long y = area.top(); y <= area.bottom(); ++y)\n        {\n            for (long x = area.left(); x <= area.right(); ++x)\n            {\n                assign_pixel(c[y-c.top()][x-c.left()], pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void fill_rect_with_vertical_gradient (\n        const canvas& c,\n        const rectangle& rect,\n        const pixel_type& pixel_top,\n        const pixel_type& pixel_bottom,\n        const rectangle& area_ = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                          std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n    )\n    {\n        rectangle area = rect.intersect(c).intersect(area_);\n        pixel_type pixel;\n\n        const long s = rect.bottom()-rect.top();\n\n        for (long y = area.top(); y <= area.bottom(); ++y)\n        {\n            const long t = rect.bottom()-y;\n            const long b = y-rect.top();\n            vector_to_pixel(pixel,\n                    ((pixel_to_vector<long>(pixel_top)*t + \n                      pixel_to_vector<long>(pixel_bottom)*b)/s));\n\n            for (long x = area.left(); x <= area.right(); ++x)\n            {\n                assign_pixel(c[y-c.top()][x-c.left()], pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"canvas_drawing.cpp\"\n#endif\n\n#endif // DLIB_GUI_CANVAS_DRAWINg_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/canvas_drawing_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), and Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_GUI_CANVAS_DRAWINg_ABSTRACT_\n#ifdef DLIB_GUI_CANVAS_DRAWINg_ABSTRACT_ \n\n#include \"../gui_core.h\"\n#include \"../pixel.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void draw_line (\n        const canvas& c,\n        const point& p1,\n        const point& p2,\n        const pixel_type& pixel = rgb_pixel(0,0,0),\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - draws the part of the line from p1 to p1 that overlaps with\n              the canvas and area onto the canvas.  \n            - Uses the given pixel color.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void draw_rectangle (\n        const canvas& c,\n        rectangle rect,\n        const pixel_type& pixel = rgb_pixel(0,0,0),\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - Draws the part of the rectangle that overlaps with\n              the canvas and area onto the canvas.  \n            - Uses the given pixel color.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void draw_circle (\n        const canvas& c,\n        const point& center_point,\n        double radius,\n        const pixel_type& pixel = rgb_pixel(0,0,0),\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - draws the part of the circle centered at center_point with the given radius \n              that overlaps with the canvas and area onto the canvas.  \n            - Uses the given pixel color.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void draw_pixel (\n        const canvas& c,\n        const point& p,\n        const pixel_type& pixel \n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - if (c.contains(p)) then\n                - sets the pixel in c that represents the point p to the \n                  given pixel color.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void draw_solid_circle (\n        const canvas& c,\n        const point& center_point,\n        double radius,\n        const pixel_type& pixel = rgb_pixel(0,0,0),\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - draws the part of the solid circle centered at center_point with the given \n              radius that overlaps with the canvas and area onto the canvas.  \n              (\"solid\" means that the interior is also filled in with the given\n              pixel color)\n            - Uses the given pixel color.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void draw_solid_convex_polygon (\n        const canvas& c,\n        const std::vector<point>& polygon,\n        const pixel_type& pixel = rgb_pixel(0,0,0),\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - Interprets the given std::vector polygon object as defining a convex polygon\n              shape.  In particular, the polygon is given by taking the points and drawing\n              lines between them.  That is, imagine drawing a line connecting polygon[i]\n              and polygon[(i+1)%polygon.size()], for all valid i, and then filling in the\n              interior of the polygon.  That is what this function does.\n            - When drawing the polygon, only the part of the polygon which overlaps both\n              the given canvas and area rectangle is drawn.\n            - Uses the given pixel color to draw the polygon.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_button_down (\n        const canvas& c,\n        const rectangle& btn,\n        unsigned char alpha = 255\n    );\n    /*!\n        requires\n            - 0 <= alpha <= 255\n        ensures\n            - draws the border of a button onto canvas c:\n                - the border will be that of a button that is depressed\n                - only the part of the border that overlaps with the canvas object\n                  will be drawn.\n                - the border will be for the button whose area is defined by the\n                  rectangle btn.\n            - performs alpha blending such that the button is drawn with full opacity \n              when alpha is 255 and fully transparent when alpha is 0.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_sunken_rectangle (\n        const canvas& c,\n        const rectangle& border,\n        unsigned char alpha = 255\n    );\n    /*!\n        requires\n            - 0 <= alpha <= 255\n        ensures\n            - draws a sunken rectangle around the given border.\n              (This is the type of border used for text_fields and\n              check_boxes and the like).\n            - performs alpha blending such that the rectangle is drawn with full opacity \n              when alpha is 255 and fully transparent when alpha is 0.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_button_up (\n        const canvas& c,\n        const rectangle& btn,\n        unsigned char alpha = 255\n    );\n    /*!\n        requires\n            - 0 <= alpha <= 255\n        ensures\n            - draws the border of a button onto canvas c:\n                - the border will be that of a button that is NOT depressed\n                - only the part of the border that overlaps with the canvas object\n                  will be drawn.\n                - the border will be for the button whose area is defined by the\n                  rectangle btn.\n            - performs alpha blending such that the button is drawn with full opacity \n              when alpha is 255 and fully transparent when alpha is 0.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void draw_checkered (\n        const canvas& c,\n        const rectangle& area,\n        const pixel_type& pixel1,\n        const pixel_type& pixel2\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - fills the area on the given canvas defined by the rectangle area with a checkers \n              board pattern where every other pixel gets assigned either pixel1 or pixel2.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void draw_image (\n        const canvas& c\n        const point& p,\n        const image_type& image,\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - image_type == an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_type::type> is defined\n        ensures\n            - draws the given image object onto the canvas such that the upper left corner of the\n              image will appear at the point p in the canvas's window.  (note that the\n              upper left corner of the image is assumed to be the pixel image[0][0] and the\n              lower right corner of the image is assumed to be image[image.nr()-1][image.nc()-1])\n            - only draws the part of the image that overlaps with the area rectangle\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void draw_image (\n        const canvas& c,\n        const rectangle& rect,\n        const image_type& img,\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - image_type == an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_type::type> is defined\n        ensures\n            - draws the given image object onto the canvas such that the upper left corner\n              of the image will appear at the point rect.tl_corner() in the canvas's window\n              and the lower right corner of the image will appear at rect.br_corner() in\n              the canvas's window.  (note that the upper left corner of the image is\n              assumed to be the pixel image[0][0] and the lower right corner of the image\n              is assumed to be image[image.nr()-1][image.nc()-1])\n            - only draws the part of the image that overlaps with the area rectangle\n            - Uses nearest neighbor interpolation when the given rect isn't the same size\n              as the input image.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void fill_rect (\n        const canvas& c,\n        const rectangle& rect,\n        const pixel_type& pixel\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - fills the area defined by rect in the given canvas with the given pixel color.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void fill_rect_with_vertical_gradient (\n        const canvas& c,\n        const rectangle& rect,\n        const pixel_type& pixel_top,\n        const pixel_type& pixel_bottom,\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - fills the rectangle defined by rect in the given canvas with the given colors.  \n              The top of the area will have the pixel_top color and will slowly fade \n              towards the pixel_bottom color towards the bottom of rect.\n            - only draws the part of the image that overlaps with the area rectangle\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void fill_gradient_rounded (\n        const canvas& c,\n        const rectangle& rect,\n        unsigned long radius,\n        const pixel_type& top_color,\n        const pixel_type& bottom_color,\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - Fills the region defined by rect in the given canvas with the given colors.  \n              The top of the region will have the top_color color and will slowly fade \n              towards the bottom_color color towards the bottom of rect.\n            - The drawn rectangle will have rounded corners and with the amount of \n            - rounding given by the radius argument.\n            - only the part of this object that overlaps with area and the canvas\n              will be drawn on the canvas\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pixel_type\n        >\n    void draw_rounded_rectangle (\n        const canvas& c,\n        const rectangle& rect,\n        unsigned radius,\n        const pixel_type& color,\n        const rectangle& area = rectangle(-infinity,-infinity,infinity,infinity)\n    );\n    /*!\n        requires\n            - pixel_traits<pixel_type> is defined\n        ensures\n            - Draws the part of the rectangle that overlaps with\n              the canvas onto the canvas.  \n            - The drawn rectangle will have rounded corners and with the amount of \n              rounding given by the radius argument.\n            - Uses the given pixel color.\n            - only draws the part of the image that overlaps with the area rectangle\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GUI_CANVAS_DRAWINg_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/drawable.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DRAWABLe_CPP_\n#define DLIB_DRAWABLe_CPP_\n\n#include \"drawable.h\"\n\n#include <algorithm>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// -----------  drawable_window object  ------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    rgb_pixel drawable_window::\n    background_color (\n    ) const\n    {\n        auto_mutex M(wm);\n        return bg_color;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    set_background_color (\n        unsigned long red_,\n        unsigned long green_,\n        unsigned long blue_\n    )\n    {\n        wm.lock();\n        bg_color.red = red_;\n        bg_color.green = green_;\n        bg_color.blue = blue_;\n        wm.unlock();\n        // now repaint the window\n        unsigned long width,height;\n        get_size(width,height);\n        rectangle rect(0,0,width-1,height-1);\n        invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    paint (\n        const canvas& c\n    )\n    {\n        ++event_id;\n        c.fill(bg_color.red,bg_color.green,bg_color.blue);\n\n        widgets.reset();\n        while (widgets.move_next())\n        {\n            widgets.element().value().reset();\n            while (widgets.element().value().move_next())\n            {\n                // only dispatch a draw() call if this widget isn't hidden\n                if (widgets.element().value().element()->hidden == false &&\n                    widgets.element().value().element()->event_id != event_id)\n                {\n                    widgets.element().value().element()->event_id = event_id;\n                    widgets.element().value().element()->draw(c);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_user_event (\n        void* p,\n        int i\n    )\n    {\n        drawable* d = static_cast<drawable*>(p);\n        if (widget_set.is_member(d))\n        {\n            d->on_user_event(i);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_window_moved(\n    )\n    {\n        ++event_id;\n        window_moved.reset();\n        while (window_moved.move_next())\n        {\n            if (window_moved.element()->event_id != event_id)\n            {\n                window_moved.element()->event_id = event_id;\n                window_moved.element()->on_window_moved();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_window_resized(\n    )\n    {\n        ++event_id;\n        window_resized.reset();\n        while (window_resized.move_next())\n        {\n            if (window_resized.element()->event_id != event_id)\n            {\n                window_resized.element()->event_id = event_id;\n                window_resized.element()->on_window_resized();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_keydown (\n        unsigned long key,\n        bool is_printable,\n        unsigned long state\n    )\n    {\n        ++event_id;\n        keyboard.reset();\n        while (keyboard.move_next())\n        {\n            if (keyboard.element()->event_id != event_id)\n            {\n                keyboard.element()->event_id = event_id;\n                keyboard.element()->on_keydown(key,is_printable,state);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_focus_gained (\n    )\n    {\n        ++event_id;\n        focus.reset();\n        while (focus.move_next())\n        {\n            if (focus.element()->event_id != event_id)\n            {\n                focus.element()->event_id = event_id;\n                focus.element()->on_focus_gained();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_focus_lost (\n    )\n    {\n        ++event_id;\n        focus.reset();\n        while (focus.move_next())\n        {\n            if (focus.element()->event_id != event_id)\n            {\n                focus.element()->event_id = event_id;\n                focus.element()->on_focus_lost();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y,\n        bool is_double_click\n    )\n    {\n        lastx = x;\n        lasty = y;\n\n        ++event_id;\n        mouse_click.reset();\n        while (mouse_click.move_next())\n        {\n            if (mouse_click.element()->event_id != event_id)\n            {\n                mouse_click.element()->event_id = event_id;\n                mouse_click.element()->on_mouse_down(btn,state,x,y,is_double_click);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_mouse_up (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        lastx = x;\n        lasty = y;\n\n        ++event_id;\n        mouse_click.reset();\n        while (mouse_click.move_next())\n        {\n            if (mouse_click.element()->event_id != event_id)\n            {\n                mouse_click.element()->event_id = event_id;\n                mouse_click.element()->on_mouse_up(btn,state,x,y);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_mouse_move (\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        lastx = x;\n        lasty = y;\n\n        ++event_id;\n        mouse_move.reset();\n        while (mouse_move.move_next())\n        {\n            if (mouse_move.element()->event_id != event_id)\n            {\n                mouse_move.element()->event_id = event_id;\n                mouse_move.element()->on_mouse_move(state,x,y);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_mouse_leave (\n    )\n    {\n        lastx = -1;\n        lasty = -1;\n\n        ++event_id;\n        mouse_move.reset();\n        while (mouse_move.move_next())\n        {\n            if (mouse_move.element()->event_id != event_id)\n            {\n                mouse_move.element()->event_id = event_id;\n                mouse_move.element()->on_mouse_leave();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_mouse_enter (\n    )\n    {\n        ++event_id;\n        mouse_move.reset();\n        while (mouse_move.move_next())\n        {\n            if (mouse_move.element()->event_id != event_id)\n            {\n                mouse_move.element()->event_id = event_id;\n                mouse_move.element()->on_mouse_enter();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_wheel_up (\n        unsigned long state\n    )\n    {\n        ++event_id;\n        mouse_wheel.reset();\n        while (mouse_wheel.move_next())\n        {\n            if (mouse_wheel.element()->event_id != event_id)\n            {\n                mouse_wheel.element()->event_id = event_id;\n                mouse_wheel.element()->on_wheel_up(state);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_wheel_down (\n        unsigned long state\n    )\n    {\n        ++event_id;\n        mouse_wheel.reset();\n        while (mouse_wheel.move_next())\n        {\n            if (mouse_wheel.element()->event_id != event_id)\n            {\n                mouse_wheel.element()->event_id = event_id;\n                mouse_wheel.element()->on_wheel_down(state);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable_window::\n    on_string_put (\n        const std::wstring &str\n    )\n    {\n        ++event_id;\n        string_put.reset();\n        while (string_put.move_next())\n        {\n            if (string_put.element()->event_id != event_id)\n            {\n                string_put.element()->event_id = event_id;\n                string_put.element()->on_string_put(str);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// -----------  drawable object  ----------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void drawable::\n    enable_events (\n    )\n    {\n        auto_mutex M(m);\n        if (enabled_events == false)\n        {\n            enabled_events = true;\n            drawable* temp = this;\n            long zo = z_order_value;\n\n            drawable_window::set_of_drawables* sod = parent.widgets[zo];\n            if (sod == 0)\n            {\n                // this drawable is the first widget at this z order so we need\n                // to make its containing set\n                drawable_window::set_of_drawables s;\n                s.add(temp);\n                parent.widgets.add(zo,s);\n            }\n            else\n            {\n                sod->add(temp);\n            }\n\n            temp = this;\n            parent.widget_set.add(temp);\n\n            if (events & MOUSE_MOVE)\n            {\n                temp = this;\n                parent.mouse_move.add(temp);\n            }\n            if (events & MOUSE_CLICK)\n            {\n                temp = this;\n                parent.mouse_click.add(temp);\n            }\n            if (events & MOUSE_WHEEL)\n            {\n                temp = this;\n                parent.mouse_wheel.add(temp);\n            }\n            if (events & WINDOW_RESIZED)\n            {\n                temp = this;\n                parent.window_resized.add(temp);\n            }\n            if (events & KEYBOARD_EVENTS)\n            {\n                temp = this;\n                parent.keyboard.add(temp);\n            }\n            if (events & FOCUS_EVENTS)\n            {\n                temp = this;\n                parent.focus.add(temp);\n            }\n            if (events & WINDOW_MOVED)\n            {\n                temp = this;\n                parent.window_moved.add(temp);\n            }\n            if (events & STRING_PUT)\n            {\n                temp = this;\n                parent.string_put.add(temp);\n            }\n            parent.invalidate_rectangle(rect);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable::\n    set_z_order (\n        long order\n    )\n    {\n        auto_mutex M(m);\n        if (order != z_order_value && enabled_events)\n        {\n            // first remove this drawable from widgets\n            drawable_window::set_of_drawables* sod = parent.widgets[z_order_value];\n            drawable* junk;\n            sod->remove(this,junk);\n\n            // if there are no more drawables at this z order then destroy the\n            // set for this order\n            if (sod->size() == 0)\n                parent.widgets.destroy(z_order_value);\n\n            // now add this drawable to its new z order\n            sod = parent.widgets[order];                \n            if (sod == 0)\n            {\n                // this drawable is the first widget at this z order so we need\n                // to make its containing set\n                drawable_window::set_of_drawables s, x;\n                s.add(junk);\n                long temp_order = order;\n                parent.widgets.add(temp_order,s);\n            }\n            else\n            {\n                sod->add(junk);\n            }\n            parent.invalidate_rectangle(rect);\n\n        }\n        z_order_value = order;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void drawable::\n    disable_events (\n    )\n    {\n        auto_mutex M(m);\n        if (enabled_events)\n        {\n            enabled_events = false;\n            // first remove this drawable from widgets\n            drawable_window::set_of_drawables* sod = parent.widgets[z_order_value];\n            drawable* junk;\n            sod->remove(this,junk);\n\n            // if there are no more drawables at this z order then destroy the\n            // set for this order\n            if (sod->size() == 0)\n                parent.widgets.destroy(z_order_value);\n\n            parent.widget_set.remove(this,junk);\n\n            // now unregister this drawable from all the events it has registered for.\n            if (events & MOUSE_MOVE)\n                parent.mouse_move.remove(this,junk);\n            if (events & MOUSE_CLICK)\n                parent.mouse_click.remove(this,junk);\n            if (events & MOUSE_WHEEL)\n                parent.mouse_wheel.remove(this,junk);\n            if (events & WINDOW_RESIZED)\n                parent.window_resized.remove(this,junk);\n            if (events & KEYBOARD_EVENTS)\n                parent.keyboard.remove(this,junk);\n            if (events & FOCUS_EVENTS)\n                parent.focus.remove(this,junk);\n            if (events & WINDOW_MOVED)\n                parent.window_moved.remove(this,junk);\n            if (events & STRING_PUT)\n                parent.string_put.remove(this,junk);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    drawable::\n    ~drawable (\n    )\n    {\n        DLIB_ASSERT(events_are_enabled() == false,\n            \"\\tdrawable::~drawable()\"\n            << \"\\n\\tYou must disable events for drawable objects in their destructor by calling disable_events().\"\n            << \"\\n\\tthis:     \" << this\n            );\n        disable_events();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DRAWABLe_CPP_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/drawable.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#ifndef DLIB_DRAWABLe_\n#define DLIB_DRAWABLe_\n\n#include \"drawable_abstract.h\"\n#include \"../gui_core.h\"\n#include \"../set.h\"\n#include \"../binary_search_tree.h\"\n#include \"../algs.h\"\n#include \"../pixel.h\"\n#include \"fonts.h\"\n#include \"../matrix.h\"\n#include \"canvas_drawing.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class drawable_window  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class drawable;\n    class drawable_window : public base_window\n    {\n        /*!\n            INITIAL VALUE\n                - lastx == -1\n                - lasty == -1\n                - event_id == 1\n\n            CONVENTION\n                - bg_color == backgroud_color()\n\n                - widgets == this binary search tree contains every drawable that is in\n                  this window.  It is a mapping of each drawable's z-order to a pointer\n                  to said drawable.\n                - widget_set == a set that contains all the widgets in this window and\n                  want to receive events.\n\n                - mouse_move == this is a set of drawables that are in this window and \n                  want to receive the mouse movement events.\n                - mouse_wheel == this is a set of drawables that are in this window and \n                  want to receive the mouse wheel events.\n                - mouse_click == this is a set of drawables that are in this window and \n                  want to receive the mouse click events.\n                - window_resized == this is a set of drawables that are in this window and \n                  want to receive the window_resized event.\n                - keyboard == this is a set of drawables that are in this window and \n                  want to receive keyboard events.\n                - focus == this is a set of drawables that are in this window and \n                  want to receive focus events.\n                - window_moved == this is a set of drawables that are in this window and \n                  want to receive window move events.\n\n                - lastx == the x coordinate that we last saw the mouse at or -1 if the \n                  mouse is outside this window.\n                - lasty == the y coordinate that we last saw the mouse at or -1 if the \n                  mouse is outside this window.\n\n                - event_id == a number we use to tag events so we don't end up sending\n                  an event to a drawable more than once.  This could happen if one of the\n                  event handlers does something to reset the enumerator while we are\n                  dispatching events (e.g. creating a new widget).\n        !*/\n    public:\n\n        drawable_window(\n            bool resizable = true,\n            bool undecorated = false\n        ) : \n            base_window(resizable,undecorated),\n            bg_color(rgb_pixel(212,208,200)),\n            lastx(-1),\n            lasty(-1),\n            event_id(1)\n        {}\n\n        void set_background_color (\n            unsigned long red,\n            unsigned long green,\n            unsigned long blue\n        );\n\n        rgb_pixel background_color (\n        ) const;\n\n        virtual inline ~drawable_window()=0;\n\n    private:\n\n        void paint (\n            const canvas& c\n        );\n\n    protected:\n\n        void on_window_resized(\n        );\n\n        void on_window_moved(\n        );\n               \n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_leave (\n        );\n\n        void on_mouse_enter (\n        );\n\n        void on_wheel_up (\n            unsigned long state\n        );\n\n        void on_wheel_down (\n            unsigned long state\n        );\n        \n        void on_focus_gained (\n        );\n\n        void on_focus_lost (\n        );\n\n        void on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        );\n\n        void on_string_put (\n            const std::wstring &str\n        );\n\n        void on_user_event (\n            void* p,\n            int i\n        );\n\n    private:\n        \n        friend class drawable;\n\n\n        rgb_pixel bg_color;\n\n        typedef set<drawable*>::kernel_1a_c set_of_drawables;\n\n        binary_search_tree<long,set_of_drawables>::kernel_1a_c widgets;\n\n        set_of_drawables widget_set;\n        set_of_drawables mouse_move;\n        set_of_drawables mouse_wheel;\n        set_of_drawables mouse_click;\n        set_of_drawables window_resized;\n        set_of_drawables keyboard;\n        set_of_drawables focus;\n        set_of_drawables window_moved;\n        set_of_drawables string_put;\n\n        long lastx, lasty;\n        unsigned long event_id;\n\n\n        // restricted functions\n        drawable_window(drawable_window&);        // copy constructor\n        drawable_window& operator=(drawable_window&);    // assignment operator\n\n\n    };\n\n    drawable_window::~drawable_window(){ close_window();}\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class drawable  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    enum \n    {\n        MOUSE_MOVE = 1,\n        MOUSE_CLICK = 2,\n        MOUSE_WHEEL = 4,\n        WINDOW_RESIZED = 8,\n        KEYBOARD_EVENTS = 16,\n        FOCUS_EVENTS = 32,\n        WINDOW_MOVED = 64,\n        STRING_PUT = 128\n    };\n\n    class drawable \n    {\n\n        /*!\n            INITIAL VALUE \n                - enabled_events == false\n                - event_id == 0\n\n            CONVENTION\n                - events == a bitset specifying what events this drawable is to receive.\n\n                - z_order_value == z_order()\n\n                - if (this drawable has been added to the parent window's sets and\n                  binary search tree) then\n                    - enabled_events == true\n                - else\n                    - enabled_events == false\n\n                - event_id == the id of the last event we got from our parent window\n        !*/\n\n    public:\n\n        friend class drawable_window;\n\n        drawable (\n            drawable_window& w,\n            unsigned long events_ = 0\n        ) :\n            m(w.wm),\n            parent(w),\n            hidden(false),\n            enabled(true),\n            lastx(w.lastx),\n            lasty(w.lasty),\n            mfont(default_font::get_font()),\n            z_order_value(0),\n            events(events_),\n            enabled_events(false),\n            event_id(0)\n        {}\n\n        virtual ~drawable (\n        );\n\n        long z_order (\n        ) const\n        {\n            m.lock();\n            long temp = z_order_value;\n            m.unlock();\n            return temp;\n        }\n\n        virtual void set_z_order (\n            long order\n        );\n\n        const rectangle get_rect (\n        ) const \n        {\n            auto_mutex M(m);\n            return rect;\n        }\n\n        long bottom (\n        ) const \n        { \n            auto_mutex M(m); \n            return rect.bottom(); \n        }\n\n        long top (\n        ) const \n        { \n            auto_mutex M(m); \n            return rect.top(); \n        }\n\n        long left (\n        ) const \n        { \n            auto_mutex M(m); \n            return rect.left(); \n        }\n\n        long right (\n        ) const \n        { \n            auto_mutex M(m); \n            return rect.right(); \n        }\n\n        long width (\n        ) const \n        { \n            auto_mutex M(m); \n            return rect.width(); \n        }\n\n        long height (\n        ) const \n        { \n            auto_mutex M(m); \n            return rect.height(); \n        }\n\n        bool is_enabled (\n        ) const\n        {\n            auto_mutex M(m);\n            return enabled;\n        }\n\n        virtual void enable (\n        ) \n        {\n            auto_mutex M(m);\n            enabled = true;\n            parent.invalidate_rectangle(rect);\n        }\n\n        virtual void disable (\n        ) \n        {\n            auto_mutex M(m);\n            enabled = false;\n            parent.invalidate_rectangle(rect);\n        }\n\n        virtual void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        )\n        {\n            auto_mutex M(m);\n            mfont = f;\n            parent.invalidate_rectangle(rect);\n        }\n\n        const shared_ptr_thread_safe<font> main_font (\n        ) const\n        {\n            auto_mutex M(m);\n            return mfont;\n        }\n\n        bool is_hidden (\n        ) const\n        {\n            auto_mutex M(m);\n            return hidden;\n        }\n\n        virtual void set_pos (\n            long x,\n            long y\n        )\n        {\n            m.lock();       \n            rectangle old(rect);            \n\n            const unsigned long width = rect.width();\n            const unsigned long height = rect.height();\n            rect.set_top(y);\n            rect.set_left(x);\n            rect.set_right(static_cast<long>(x+width)-1);\n            rect.set_bottom(static_cast<long>(y+height)-1);\n            \n            parent.invalidate_rectangle(rect+old);\n            m.unlock();\n        }\n\n        virtual void show (\n        )\n        {\n            m.lock();\n            hidden = false;\n            parent.invalidate_rectangle(rect);\n            m.unlock();\n        }\n\n        virtual void hide (\n        )\n        {\n            m.lock();\n            hidden = true;\n            parent.invalidate_rectangle(rect);\n            m.unlock();\n        }\n\n        base_window& parent_window (\n        ) { return parent; }\n\n        const base_window& parent_window (\n        ) const { return parent; }\n\n        virtual int next_free_user_event_number (\n        )const { return 0; }\n\n    protected:   \n        rectangle rect;\n        const rmutex& m;\n        drawable_window& parent;\n        bool hidden;\n        bool enabled;\n        const long& lastx;\n        const long& lasty;\n        shared_ptr_thread_safe<font> mfont;\n\n        \n        void enable_events (\n        );\n\n        bool events_are_enabled (\n        ) const { auto_mutex M(m); return enabled_events; }\n\n        void disable_events (\n        );\n\n    private:\n\n        long z_order_value;\n        const unsigned long events;\n        bool enabled_events;\n        unsigned long event_id;\n\n\n        // restricted functions\n        drawable(drawable&);        // copy constructor\n        drawable& operator=(drawable&);    // assignment operator\n\n\n    protected:\n\n        virtual void draw (\n            const canvas& c\n        ) const=0;\n\n        virtual void on_user_event (\n            int \n        ){}\n\n        virtual void on_window_resized(\n        ){}\n\n        virtual void on_window_moved(\n        ){}\n               \n        virtual void on_mouse_down (\n            unsigned long ,\n            unsigned long ,\n            long ,\n            long ,\n            bool \n        ){}\n\n        virtual void on_mouse_up (\n            unsigned long ,\n            unsigned long ,\n            long ,\n            long \n        ){}\n\n        virtual void on_mouse_move (\n            unsigned long ,\n            long ,\n            long \n        ){}\n\n        virtual void on_mouse_leave (\n        ){}\n\n        virtual void on_mouse_enter (\n        ){}\n\n        virtual void on_wheel_up (\n            unsigned long \n        ){}\n\n        virtual void on_wheel_down (\n            unsigned long \n        ){}\n\n        virtual void on_focus_gained (\n        ){}\n\n        virtual void on_focus_lost (\n        ){}\n\n        virtual void on_keydown (\n            unsigned long ,\n            bool ,\n            unsigned long \n        ){}\n\n        virtual void on_string_put (\n            const std::wstring&\n        ){}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"drawable.cpp\"\n#endif\n\n#endif // DLIB_DRAWABLe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/drawable_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#undef DLIB_DRAWABLe_ABSTRACT_\n#ifdef DLIB_DRAWABLe_ABSTRACT_\n\n#include \"../gui_core.h\"\n#include \"fonts_abstract.h\"\n#include \"canvas_drawing_abstract.h\"\n\nnamespace dlib\n{\n\n    /*!\n        GENERAL REMARKS\n            This file defines the drawable interface class and the drawable_window which\n            is just a window that is capable of displaying drawable objects (i.e. objects\n            that implement the drawable interface).  \n\n            The drawable interface is a simple framework for creating more complex \n            graphical widgets.  It provides a default set of functionality and a \n            set of events which a gui widget may use.\n\n        THREAD SAFETY\n            All objects and functions defined in this file are thread safe.  You may\n            call them from any thread without serializing access to them.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class drawable_window\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class drawable_window : public base_window\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a window on the desktop that is capable of \n                containing drawable objects.\n\n            INITIAL STATE\n                The initial state of the drawable_window is to be hidden.  This means \n                you need to call show() to make it appear.\n\n            EVENTS\n                The drawable_window object uses all the events provided by base_window\n                except for the on_window_close() event.  This means that if you\n                define handlers for these events yourself you will have to call\n                the drawable_window's version of them so that the drawable_window \n                can continue to process and forward these events to its drawable \n                objects.                \n        !*/\n    public:\n\n        drawable_window (\n            bool resizable = true,\n            bool undecorated = false\n        );\n        /*!\n            requires\n                - if (undecorated == true) then\n                    - resizable == false\n            ensures\n                - #*this has been properly initialized \n                - #background_color() == rgb_pixel(212,208,200)\n                - if (resizable == true) then \n                    - this window will be resizable by the user\n                - else \n                    - this window will not be resizable by the user\n                - if (undecorated == true) then\n                    - this window will not have any graphical elements outside\n                      of its drawable area or appear in the system task bar.\n                      (e.g. a popup menu)\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                - dlib::gui_error\n                    This exception is thrown if there is an error while \n                    creating this window.\n        !*/\n\n        virtual ~drawable_window(\n        )=0;\n        /*!\n            ensures\n                - if (this window has not already been closed) then\n                    - closes the window\n                - does NOT trigger the on_window_close() event\n                - all resources associated with *this have been released                \n        !*/\n\n        void set_background_color (\n            unsigned long red,\n            unsigned long green,\n            unsigned long blue\n        );\n        /*!\n            ensures\n                - #background_color().red == red\n                - #background_color().green == green \n                - #background_color().blue == blue \n        !*/\n\n        rgb_pixel background_color (\n        ) const;\n        /*!\n            ensures\n                - returns the background color this window paints its canvas\n                  with before it passes it onto its drawable widgets\n        !*/\n\n    private:\n        // restricted functions\n        drawable_window(drawable_window&);        // copy constructor\n        drawable_window& operator=(drawable_window&);    // assignment operator\n        \n        friend class drawable;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class drawable\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    enum \n    {\n        MOUSE_MOVE = 1,\n        MOUSE_CLICK = 2,\n        MOUSE_WHEEL = 4,\n        WINDOW_RESIZED = 8,\n        KEYBOARD_EVENTS = 16,\n        FOCUS_EVENTS = 32,\n        WINDOW_MOVED = 64,\n        STRING_PUT = 128\n    };\n\n    class drawable \n    {\n        /*!\n            INITIAL VALUE\n                top() == 0\n                left() == 0\n                right() == -1 \n                bottom() == -1 \n                get_rect().is_empty() == true\n                is_hidden() == false \n                is_enabled() == true\n                z_order() == 0\n                main_font() == default_font::get_font()\n            \n            WHAT THIS OBJECT REPRESENTS\n                This is an interface that all drawable widgets implement.  It \n                provides a standard method (draw()) to draw a widget onto a canvas \n                and many other convenient functions for drawable objects.\n\n            EVENT FORWARDING\n                All the events that come to a drawable object are forwarded from its\n                parent window.  Additionally, there is no filtering.  This means that\n                if a drawable registers to receive a certain kind of event then whenever\n                its parent window receives that event the drawable object will get a \n                forwarded copy of it as well even if the event occurred outside the\n                drawable's rectangle. \n\n                The only events that have anything in the way of filtering are the \n                draw() and on_user_event() events.  draw() is only called on a drawable \n                object when that object is not hidden.  on_user_event() is only called\n                for drawables that the on_user_event()'s first argument specifically \n                references.  All other events are not filtered at all though.\n\n            Z ORDER\n                Z order defines the order in which drawable objects are drawn.  The\n                lower numbered drawables are drawn first and then the higher numbered\n                ones.  So a drawable with a z order of 0 is drawn before one with a\n                z order of 1 and so on.  \n        !*/\n\n    public:\n\n        friend class drawable_window;\n\n        drawable (\n            drawable_window& w,\n            unsigned long events = 0\n        ) : \n            m(w.wm),\n            parent(w),\n            hidden(false),\n            enabled(true)\n        {}\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #parent_window() == w\n                - #*this will not receive any events or draw() requests until \n                  enable_events() is called\n                - once events_are_enabled() == true this drawable will receive\n                  the on_user_event() event. (i.e. you always get this event, you don't\n                  have to enable it by setting something in the events bitset).\n                - if (events & MOUSE_MOVE) then\n                    - once events_are_enabled() == true this drawable will receive \n                      the following events related to mouse movement: on_mouse_move, \n                      on_mouse_leave, and on_mouse_enter.\n                - if (events & MOUSE_CLICK) then\n                    - once events_are_enabled() == true this drawable will receive \n                      the following events related to mouse clicks: on_mouse_down and \n                      on_mouse_up.\n                - if (events & MOUSE_WHEEL) then\n                    - once events_are_enabled() == true this drawable will receive \n                      the following events related to mouse wheel scrolling: \n                      on_wheel_up and on_wheel_down.\n                - if (events & WINDOW_RESIZED) then\n                    - once events_are_enabled() == true this drawable will receive \n                      the following event related to its parent window resizing:  \n                      on_window_resized.    \n                - if (events & KEYBOARD_EVENTS) then\n                    - once events_are_enabled() == true this drawable will receive \n                      the following keyboard event: on_keydown.                \n                - if (events & FOCUS_EVENTS) then\n                    - once events_are_enabled() == true this drawable will receive \n                      the following focus events: on_focus_gained and on_focus_lost.                \n                - if (events & WINDOW_MOVED) then\n                    - once events_are_enabled() == true this drawable will receive \n                      the following event related to its parent window moving:  \n                      on_window_moved.    \n                - if (events & STRING_PUT) then\n                    - once events_are_enabled() == true this drawable will receive \n                      the following event related to wide character string input:  \n                      on_string_put.    \n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~drawable (\n        );\n        /*!\n            requires\n                - events_are_enabled() == false\n            ensures\n                - any resources associated with *this have been released\n                - *this has been removed from its containing window parent_window() and\n                  its parent window will no longer try to dispatch events to it.\n                  Note that this does not trigger a redraw of the parent window.  If you \n                  want to do that you must do it yourself.\n        !*/\n\n        long z_order (\n        ) const;\n        /*!\n            ensures\n                - returns the z order for this drawable.  \n        !*/\n\n        virtual void set_z_order (\n            long order\n        );\n        /*!\n            ensures\n                - #z_order() == order\n                - if (events_are_enabled() == true) then\n                    - parent_window() is updated to reflect the new state of #*this \n            throws\n                - std::bad_alloc\n        !*/\n\n        const rectangle get_rect (\n        ) const;\n        /*!\n            ensures\n                - returns the rectangle that defines the area and position of this \n                  drawable inside its containing window parent_window().\n        !*/\n\n        long bottom (\n        ) const;\n        /*!\n            ensures\n                - returns get_rect().bottom()\n        !*/\n\n        long top (\n        ) const;\n        /*!\n            ensures\n                - returns get_rect().top()\n        !*/\n\n        long left (\n        ) const;\n        /*!\n            ensures\n                - returns get_rect().left()\n        !*/\n\n        long right (\n        ) const;\n        /*!\n            ensures\n                - returns get_rect().right()\n        !*/\n\n        unsigned long width (\n        ) const;\n        /*!\n            ensures\n                - returns get_rect().width()\n        !*/\n\n        unsigned long height (\n        ) const;\n        /*!\n            ensures\n                - returns get_rect().height()\n        !*/\n\n        virtual void set_pos (\n            long x,\n            long y\n        );\n        /*! \n            ensures\n                - #top() == y\n                - #left() == x\n                - #width() == width()\n                - #height() == height()\n                - if (events_are_enabled() == true) then\n                    - parent_window() is updated to reflect the new state of #*this \n                - i.e. This just sets the upper left corner of this drawable to the\n                  location (x,y)\n        !*/\n\n        bool is_enabled (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object is enabled and false otherwise.\n                  (it is up to derived classes to define exactly what it means to be\n                  \"enabled\")\n        !*/\n\n        virtual void enable (\n        );\n        /*!\n            ensures\n                - #is_enabled() == true\n                - if (events_are_enabled() == true) then\n                    - parent_window() is updated to reflect the new state of #*this \n        !*/\n\n        virtual void disable (\n        );\n        /*!\n            ensures\n                - #is_enabled() == false\n                - if (events_are_enabled() == true) then\n                    - parent_window() is updated to reflect the new state of #*this \n        !*/\n\n        virtual void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n        /*!\n            ensures\n                - #main_font() == f\n                - if (events_are_enabled() == true) then\n                    - parent_window() is updated to reflect the new state of #*this \n        !*/\n\n        const shared_ptr_thread_safe<font> main_font (\n        ) const;\n        /*!\n            ensures\n                - returns the current main font being used by this widget\n        !*/\n\n        bool is_hidden (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object is NOT currently displayed on parent_window()\n                  and false otherwise.\n        !*/\n\n        virtual void show (\n        );\n        /*!\n            ensures\n                - #is_hidden() == false\n                - if (events_are_enabled() == true) then\n                    - parent_window() is updated to reflect the new state of #*this \n        !*/\n\n        virtual void hide (\n        );\n        /*!\n            ensures\n                - #is_hidden() == true\n                - if (events_are_enabled() == true) then\n                    - parent_window() is updated to reflect the new state of #*this \n        !*/\n\n        drawable_window& parent_window (\n        );\n        /*! \n            ensures\n                - returns a reference to the drawable_window that this drawable is \n                  being drawn on and receiving events from.\n        !*/\n\n        const drawable_window& parent_window (\n        ) const;\n        /*! \n            ensures\n                - returns a const reference to the drawable_window that this drawable \n                  is being drawn on and receiving events from.\n        !*/\n\n        virtual int next_free_user_event_number (\n        )const { return 0; }\n        /*!\n            ensures\n                - returns the smallest number, i, that is the next user event number you \n                  can use in calls to parent.trigger_user_event((void*)this,i).\n                - This function exists because of the following scenario.  Suppose\n                  you make a class called derived1 that inherits from drawable and \n                  in derived1 you use a user event to do something.  Then suppose \n                  you inherit from derived1 to make derived2.  Now in derived2 you \n                  may want to use a user event to do something as well.  How are you\n                  to know which user event numbers are in use already?  This function\n                  solves that problem.  You would define derived1::next_free_user_event_number()\n                  so that it returned a number bigger than any user event numbers used by\n                  derived1 or its ancestors.  Then derived2 could just call \n                  derived1::next_free_user_event_number() to find out what numbers it could use.\n        !*/\n\n    protected:   \n        /*!A drawable_protected_variables \n            \n            These protected members are provided because they are needed to \n            implement drawable widgets.\n        !*/\n\n        // This is the rectangle that is returned by get_rect()\n        rectangle rect;\n\n        // This is the mutex used to serialize access to this class. \n        const rmutex& m;\n\n        // This is the parent window of this drawable\n        drawable_window& parent;\n\n        // This is the bool returned by is_hidden()\n        bool hidden;\n\n        // This is the bool returned by is_enabled()\n        bool enabled;\n\n        // This is the font pointer returned by main_font()\n        shared_ptr_thread_safe<font> mfont;\n\n        // This is the x coordinate that we last saw the mouse at or -1 if the mouse\n        // is outside the parent window.\n        const long& lastx;\n\n        // This is the y coordinate that we last saw the mouse at or -1 if the mouse\n        // is outside the parent window.\n        const long& lasty;\n\n\n        void enable_events (\n        );\n        /*!\n            ensures\n                - #events_are_enabled() == true\n        !*/\n\n        void disable_events (\n        );\n        /*!\n            ensures\n                - #events_are_enabled() == false\n        !*/\n\n        bool events_are_enabled (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object is receiving events and draw()\n                  requests from its parent window.\n                - returns false otherwise\n        !*/\n\n        // ---------------- EVENT HANDLERS ------------------\n\n        virtual void on_user_event (\n            int i\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - is called whenever the parent window receives an on_user_event(p,i) event\n                  where p == this.  (i.e. this is just a redirect of on_user_event for\n                  cases where the first argument of on_user_event is equal to the \n                  this pointer).\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_window_resized(\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_window_resized() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n               \n        virtual void on_window_moved(\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_window_moved() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n               \n        virtual void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_mouse_down() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_mouse_up() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - x == lastx\n                - y == lasty\n                - this is just the base_window::on_mouse_move() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_mouse_leave (\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_mouse_leave() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_mouse_enter (\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_mouse_enter() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_wheel_up (\n            unsigned long state\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_wheel_up() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_wheel_down (\n            unsigned long state\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_wheel_down() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_focus_gained (\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_focus_gained() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_focus_lost (\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_focus_lost() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_keydown() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void on_string_put (\n            const std::wstring &str\n        ){}\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - this is just the base_window::on_put_string() event forwarded to \n                  this object.  See the gui_core specs for the details about this event.\n            ensures\n                - does not change the state of mutex m. \n        !*/\n\n        virtual void draw (\n            const canvas& c\n        ) const=0;\n        /*!\n            requires\n                - events_are_enabled() == true\n                - mutex m is locked\n                - is_hidden() == false\n                - is called by parent_window() when it needs to repaint itself.\n                - c == the canvas object for the area of parent_window() that needs\n                  to be repainted.\n            ensures\n                - does not change the state of mutex m. \n                - draws the area of *this that intersects with the canvas onto\n                  the canvas object c.\n        !*/\n\n    private:\n\n        // restricted functions\n        drawable(drawable&);        // copy constructor\n        drawable& operator=(drawable&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DRAWABLe_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/fonts.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), and Nils Labugt, Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FONTs_CPP_\n#define DLIB_FONTs_CPP_\n\n#include \"fonts.h\"\n\n#include \"../serialize.h\"\n#include <sstream>\n#include \"../base64.h\"\n#include \"../compress_stream.h\"\n#include <fstream>\n#include \"../tokenizer.h\"\n#include \"nativefont.h\"\n   \nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string get_decoded_string_with_default_font_data()\n    {\n        dlib::base64::kernel_1a base64_coder;\n        dlib::compress_stream::kernel_1ea compressor;\n        std::ostringstream sout;\n        std::istringstream sin;\n\n        /* \n            SOURCE BDF FILE (helvR12.bdf) COMMENTS \n            COMMENT $XConsortium: helvR12.bdf,v 1.15 95/01/26 18:02:58 gildea Exp $\n            COMMENT $Id: helvR12.bdf,v 1.26 2004-11-28 20:08:46+00 mgk25 Rel $\n            COMMENT \n            COMMENT +\n            COMMENT  Copyright 1984-1989, 1994 Adobe Systems Incorporated.\n            COMMENT  Copyright 1988, 1994 Digital Equipment Corporation.\n            COMMENT \n            COMMENT  Adobe is a trademark of Adobe Systems Incorporated which may be\n            COMMENT  registered in certain jurisdictions.\n            COMMENT  Permission to use these trademarks is hereby granted only in\n            COMMENT  association with the images described in this file.\n            COMMENT \n            COMMENT  Permission to use, copy, modify, distribute and sell this software\n            COMMENT  and its documentation for any purpose and without fee is hereby\n            COMMENT  granted, provided that the above copyright notices appear in all\n            COMMENT  copies and that both those copyright notices and this permission\n            COMMENT  notice appear in supporting documentation, and that the names of\n            COMMENT  Adobe Systems and Digital Equipment Corporation not be used in\n            COMMENT  advertising or publicity pertaining to distribution of the software\n            COMMENT  without specific, written prior permission.  Adobe Systems and\n            COMMENT  Digital Equipment Corporation make no representations about the\n            COMMENT  suitability of this software for any purpose.  It is provided \"as\n            COMMENT  is\" without express or implied warranty.\n            COMMENT -\n        */\n\n        // The base64 encoded data we want to decode and return.\n        sout << \"AXF+zOQzCgGitrKiOCGEL4hlIv1ZenWJyjMQ4rJ6f/oPMeHqsZn+8XnpehwFQTz3dtUGlZRAUoOa\";\n        sout << \"uVo8UiplcFxuK69A+94rpMCMAyEeeOwZ/tRzkX4eKuU3L4xtsJDknMiYUNKaMrYimb1QJ0E+SRqQ\";\n        sout << \"wATrMTecYNZvJJm02WibiwE4cJ5scvkHNl4KJT5QfdwRdGopTyUVdZvRvtbTLLjsJP0fQEQLqemf\";\n        sout << \"qPE4kDD79ehrBIwLO1Y6TzxtrrIoQR57zlwTUyLenqRtSN3VLtjWYd82cehRIlTLtuxBg2s+zZVq\";\n        sout << \"jNlNnYTSM+Swy06qnQgg+Dt0lhtlB9shR1OAlcfCtTW6HKoBk/FGeDmjTGW4bNCGv7RjgM6TlLDg\";\n        sout << \"ZYSSA6ZCCAKBgE++U32gLHCCiVkPTkkp9P6ioR+e3SSKRNm9p5MHf+ZQ3LJkW8KFJ/K9gKT1yvyv\";\n        sout << \"F99pAvOOq16tHRFvzBs+xZj/mUpH0lGIS7kLWr9oP2KuccVrz25aJn3kDruwTYoD+CYlOqtPO0Mv\";\n        sout << \"dEI0LUR0Ykp1M2rWo76fJ/fpzHjV7737hjkNPJ13nO72RMDr4R5V3uG7Dw7Ng+vGX3WgJZ4wh1JX\";\n        sout << \"pl2VMqC5JXccctzvnQvnuvBvRm7THgwQUgMKKT3WK6afUUVlJy8DHKuU4k1ibfVMxAmrwKdTUX2w\";\n        sout << \"cje3A05Qji3aop65qEdwgI5O17HIVoRQOG/na+XRMowOfUvI4H8Z4+JGACfRrQctgYDAM9eJzm8i\";\n        sout << \"PibyutmJfZBGg0a3oC75S5R9lTxEjPocnEyJRYNnmVnVAmKKbTbTsznuaD+D1XhPdr2t3A4bRTsp\";\n        sout << \"toKKtlFnd9YGwLWwONDwLnoQ/IXwyF7txrRHNSVToh772U0Aih/yn5vnmcMF750eiMzRAgXu5sbR\";\n        sout << \"VXEOVCiLgVevN5umkvjZt1eGTSSzDMrIvnv4nyOfaFsD+I76wQfgLqd71rheozGtjNc0AOTx4Ggc\";\n        sout << \"eUSFHTDAVfTExBzckurtyuIAqF986a0JLHCtsDpBa2wWNuiQYOH3/LX1zkdU2hdamhBW774bpEwr\";\n        sout << \"dguMxxOeDGOBgIlM5gxXGYXSf5IN3fUAEPfOPRxB7T+tpjFnWd7cg+JMabci3zhJ9ANaYT7HGeTX\";\n        sout << \"bulKnGHjYrR1BxdK3YeliogQRU4ytmxlyL5zlNFU/759mA8XSfIPMEZn9Vxkb00q1htF7REiDcr3\";\n        sout << \"kW1rtPAc7VQNEhT54vK/YF6rMvjO7kBZ/vLYo7E8e8hDKEnY8ucrC3KGmeo31Gei74BBcEbvJBd3\";\n        sout << \"/YAaIKgXWwU2wSUw9wLq2RwGwyguvKBx0J/gn27tjcVAHorRBwxzPpk8r+YPyN+SifSzEL7LEy1G\";\n        sout << \"lPHxmXTrcqnH9qraeAqXJUJvU8SJJpf/tmsAE+XSKD/kpVBnT5qXsJ1SRFS7MtfPjE1j/NYbaQBI\";\n        sout << \"bOrh81zaYCEJR0IKHWCIsu/MC3zKXfkxFgQ9XpYAuWjSSK64YpgkxSMe8VG8yYvigOw2ODg/z4FU\";\n        sout << \"+HpnEKF/M/mKfLKK1i/8BV7xcYVHrhEww1QznoFklJs/pEg3Kd5PE1lRii6hvTn6McVAkw+YbH9q\";\n        sout << \"/sg4gFIAvai64hMcZ1oIZYppj3ZN6KMdyhK5s4++ZS/YOV2nNhW73ovivyi2Tjg7lxjJJtsYrLKb\";\n        sout << \"zIN1slOICKYwBq42TFBcFXaZ6rf0Czd09tL+q6A1Ztgr3BNuhCenjhWN5ji0LccGYZo6bLTggRG/\";\n        sout << \"Uz6K3CBBU/byLs79c5qCohrr7rlpDSdbuR+aJgNiWoU6T0i2Tvua6h51LcWEHy5P2n146/Ae2di4\";\n        sout << \"eh20WQvclrsgm1oFTGD0Oe85GKOTA7vvwKmLBc1wwA0foTuxzVgj0TMTFBiYLTLG4ujUyBYy1N6e\";\n        sout << \"H8EKi8H+ZAlqezrjABO3BQr33ewdZL5IeJ4w7gdGUDA6+P+7cODcBW50X9++6YTnKctuEw6aXBpy\";\n        sout << \"GgcMfPE61G8YKBbFGFic3TVvGCLvre1iURv+F+hU4/ee6ILuPnpYnSXX2iCIK/kmkBse8805d4Qe\";\n        sout << \"DG/8rBW9ojvAgc0jX7CatPEMHGkcz+KIZoKMI7XXK4PJpGQUdq6EdIhJC4koXEynjwwXMeC+jJqH\";\n        sout << \"agwrlDNssq/8AA==\";\n\n\n\n        // Put the data into the istream sin\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decode the base64 text into its compressed binary form\n        base64_coder.decode(sin,sout);\n        sin.clear();\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decompress the data into its original form\n        compressor.decompress(sin,sout);\n\n        // Return the decoded and decompressed data\n        return sout.str();\n    }\n\n\n    default_font::\n    default_font (\n    ) \n    {\n        using namespace std;\n        l = new letter[256];\n\n        try\n        {\n            istringstream sin(get_decoded_string_with_default_font_data());\n\n            for (int i = 0; i < 256; ++i)\n            {\n                deserialize(l[i],sin);\n            }\n\n        }\n        catch (...)\n        {\n            delete [] l;\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const letter& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            serialize(item.w,out);\n            serialize(item.count,out);\n\n            for (unsigned long i = 0; i < item.count; ++i)\n            {\n                serialize(item.points[i].x,out);\n                serialize(item.points[i].y,out);\n            }\n        }\n        catch (serialization_error e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type letter\"); \n        }\n    }\n\n    void deserialize (\n        letter& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            if (item.points)\n                delete [] item.points;\n\n            deserialize(item.w,in);\n            deserialize(item.count,in);\n\n            if (item.count > 0)\n                item.points = new letter::point[item.count];\n            else\n                item.points = 0;\n\n            for (unsigned long i = 0; i < item.count; ++i)\n            {\n                deserialize(item.points[i].x,in);\n                deserialize(item.points[i].y,in);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.w = 0;\n            item.count = 0;\n            item.points = 0;\n            throw serialization_error(e.info + \"\\n   while deserializing object of type letter\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace bdf_font_helpers\n    {\n        class bdf_parser\n        {\n        public:\n            bdf_parser( std::istream& in ) : in_( in )\n            {\n                std::string str_tmp;\n                int int_tmp;\n\n                str_tmp = \"STARTFONT\";      int_tmp = STARTFONT;        keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"FONTBOUNDINGBOX\";int_tmp = FONTBOUNDINGBOX;  keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"DWIDTH\";         int_tmp = DWIDTH;           keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"CHARS\";          int_tmp = CHARS;            keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"STARTCHAR\";      int_tmp = STARTCHAR;        keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"ENCODING\";       int_tmp = ENCODING;         keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"BBX\";            int_tmp = BBX;              keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"BITMAP\";         int_tmp = BITMAP;           keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"ENDCHAR\";        int_tmp = ENDCHAR;          keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"ENDFONT\";        int_tmp = ENDFONT;          keyword_map.add( str_tmp, int_tmp );\n                str_tmp = \"DEFAULT_CHAR\";   int_tmp = DEFAULT_CHAR;     keyword_map.add( str_tmp, int_tmp );\n\n                tokzr.set_identifier_token( tokzr.uppercase_letters(), tokzr.uppercase_letters() + \"_\" );\n                tokzr.set_stream( in );\n\n            }\n\n            enum bdf_enums\n            {\n                NO_KEYWORD = 0,\n                STARTFONT = 1,\n                FONTBOUNDINGBOX = 2,\n                DWIDTH = 4,\n                DEFAULT_CHAR = 8,\n                CHARS = 16,\n                STARTCHAR = 32,\n                ENCODING = 64,\n                BBX = 128,\n                BITMAP = 256,\n                ENDCHAR = 512,\n                ENDFONT = 1024\n\n            };\n            struct header_info\n            {\n                int FBBx, FBBy, Xoff, Yoff;\n                int dwx0, dwy0;\n                bool has_global_dw;\n                long default_char;\n            };\n            struct char_info\n            {\n                int dwx0, dwy0;\n                int BBw, BBh, BBxoff0x, BByoff0y;\n                array2d<char> bitmap;\n                bool has_dw;\n            };\n            bool parse_header( header_info& info )\n            {\n                if ( required_keyword( STARTFONT ) == false )\n                    return false;    // parse_error: required keyword missing\n                info.has_global_dw = false;\n                int find = FONTBOUNDINGBOX | DWIDTH | DEFAULT_CHAR;\n                int stop = CHARS | STARTCHAR | ENCODING | BBX | BITMAP | ENDCHAR | ENDFONT;\n                int res;\n                while ( 1 )\n                {\n                    res = find_keywords( find | stop );\n                    if ( res & FONTBOUNDINGBOX )\n                    {\n                        in_ >> info.FBBx >> info.FBBy >> info.Xoff >> info.Yoff;\n                        if ( in_.fail() )\n                            return false;    // parse_error\n                        find &= ~FONTBOUNDINGBOX;\n                        continue;\n                    }\n                    if ( res & DWIDTH )\n                    {\n                        in_ >> info.dwx0 >> info.dwy0;\n                        if ( in_.fail() )\n                            return false;    // parse_error\n                        find &= ~DWIDTH;\n                        info.has_global_dw = true;\n                        continue;\n                    }\n                    if ( res & DEFAULT_CHAR )\n                    {\n                        in_ >> info.default_char;\n                        if ( in_.fail() )\n                            return false;    // parse_error\n                        find &= ~DEFAULT_CHAR;\n                        continue;\n                    }\n                    if ( res & NO_KEYWORD )\n                        return false;    // parse_error: unexpected EOF\n                    break;\n                }\n                if ( res != CHARS || ( find & FONTBOUNDINGBOX ) )\n                    return false;    // parse_error: required keyword missing or unexpeced keyword\n                return true;\n            }\n            int parse_glyph( char_info& info, unichar& enc )\n            {\n                info.has_dw = false;\n                int e;\n                int res;\n                while ( 1 )\n                {\n                    res = find_keywords( ENCODING );\n                    if ( res != ENCODING )\n                        return 0; // no more glyphs\n                    in_ >> e;\n                    if ( in_.fail() )\n                        return -1;    // parse_error\n                    if ( e >= static_cast<int>(enc) )\n                        break;\n                }\n                int find = BBX | DWIDTH;\n                int stop = STARTCHAR | ENCODING | BITMAP | ENDCHAR | ENDFONT;\n                while ( 1 )\n                {\n                    res = find_keywords( find | stop );\n                    if ( res & BBX )\n                    {\n                        in_ >> info.BBw >> info.BBh >> info.BBxoff0x >> info.BByoff0y;\n                        if ( in_.fail() )\n                            return -1;    // parse_error\n                        find &= ~BBX;\n                        continue;\n                    }\n                    if ( res & DWIDTH )\n                    {\n                        in_ >> info.dwx0 >> info.dwy0;\n                        if ( in_.fail() )\n                            return -1;    // parse_error\n                        find &= ~DWIDTH;\n                        info.has_dw = true;\n                        continue;\n                    }\n                    if ( res & NO_KEYWORD )\n                        return -1;    // parse_error: unexpected EOF\n                    break;\n                }\n                if ( res != BITMAP || ( find != NO_KEYWORD ) )\n                    return -1;     // parse_error: required keyword missing or unexpeced keyword\n                unsigned h = info.BBh;\n                unsigned w = ( info.BBw + 7 ) / 8 * 2;\n                info.bitmap.set_size( h, w );\n                for ( unsigned r = 0;r < h;r++ )\n                {\n                    trim();\n                    std::string str = \"\";\n                    extract_hex(str);\n                    if(str.size() < w)\n                        return -1;    // parse_error\n                    for ( unsigned c = 0;c < w;c++ )\n                        info.bitmap[r][c] = str[c];\n                }\n                if ( in_.fail() )\n                    return -1;      // parse_error\n                if ( required_keyword( ENDCHAR ) == false )\n                    return -1;      // parse_error: required keyword missing\n                enc = e;\n                return 1;\n            }\n        private:\n            map<std::string, int>::kernel_1a_c keyword_map;\n            tokenizer::kernel_1a_c tokzr;\n            std::istream& in_;\n            void extract_hex(std::string& str)\n            {\n                int type;\n                std::string token;\n                while ( 1 )\n                {\n                    type = tokzr.peek_type();\n                    if ( type == tokenizer::kernel_1a_c::IDENTIFIER || type == tokenizer::kernel_1a_c::NUMBER )\n                    {\n                        tokzr.get_token( type, token );\n                        str += token;\n                        continue;\n                    }\n                    break;\n                }\n            }\n            void trim()\n            {\n                int type;\n                std::string token;\n                while ( 1 )\n                {\n                    type = tokzr.peek_type();\n                    if ( type == tokenizer::kernel_1a_c::WHITE_SPACE || type == tokenizer::kernel_1a_c::END_OF_LINE )\n                    {\n                        tokzr.get_token( type, token );\n                        continue;\n                    }\n                    break;\n                }\n            }\n            bool required_keyword( int kw )\n            {\n                int type;\n                std::string token;\n                while ( 1 )\n                {\n                    tokzr.get_token( type, token );\n                    if ( type == tokenizer::kernel_1a_c::WHITE_SPACE || type == tokenizer::kernel_1a_c::END_OF_LINE )\n                        continue;\n                    if ( type != tokenizer::kernel_1a_c::IDENTIFIER || keyword_map.is_in_domain( token ) == false || ( keyword_map[token] & kw ) == 0 )\n                        return false;\n                    break;\n                }\n                return true;\n            }\n            int find_keywords( int find )\n            {\n                int type;\n                std::string token;\n                while ( 1 )\n                {\n                    tokzr.get_token( type, token );\n                    if ( type == tokenizer::kernel_1a_c::END_OF_FILE )\n                        return NO_KEYWORD;\n                    if ( type == tokenizer::kernel_1a_c::IDENTIFIER && keyword_map.is_in_domain( token ) == true )\n                    {\n                        int kw = keyword_map[token];\n                        if ( kw & find )\n                            return kw;\n                    }\n                }\n                return true;\n            }\n\n        };\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                    bdf_font functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    bdf_font::bdf_font( \n        long default_char_ \n    ) :\n        default_char(0),\n        is_initialized( false ),\n        right_overflow_( 0 ),\n        has_global_width( false ),\n        specified_default_char( default_char_ )\n    {\n        // make sure gl contains at least one letter\n        gl.resize(1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void bdf_font::adjust_metrics(\n    )\n    {\n        if ( is_initialized == false )\n            return;\n        // set starting values for fbb\n        if ( gl[default_char].num_of_points() > 0 )\n        {\n            letter& g =  gl[default_char];\n            fbb.set_top( g[0].y );\n            fbb.set_bottom( g[0].y );\n            fbb.set_left( g[0].x );\n            fbb.set_right( g[0].x );\n        }\n        else\n        {\n            // ok, the default char was a space\n            // let's just choose some safe arbitrary values then...\n            fbb.set_top( 10000 );\n            fbb.set_bottom( -10000 );\n            fbb.set_left( 10000 );\n            fbb.set_right( -10000 );\n        }\n        right_overflow_ = 0;\n        for ( unichar n = 0; n < gl.size(); n++ )\n        {\n            letter& g = gl[n];\n            unsigned short nr_pts = g.num_of_points();\n            for ( unsigned short k = 0;k < nr_pts;k++ )\n            {\n                fbb.set_top( std::min( fbb.top(), (long)g[k].y ) );\n                fbb.set_left( std::min( fbb.left(), (long)g[k].x ) );\n                fbb.set_bottom( std::max( fbb.bottom(), (long)g[k].y ) );\n                fbb.set_right( std::max( fbb.right(), (long)g[k].x ) );\n                right_overflow_ = std::max( right_overflow_, (unsigned long)(g[k].x - g.width()) );  // superfluous?\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long bdf_font::\n    read_bdf_file( \n        std::istream& in, \n        unichar max_enc, \n        unichar min_enc \n    )\n    {\n        using namespace bdf_font_helpers;\n\n        bdf_parser parser( in );\n        bdf_parser::header_info hinfo;\n        bdf_parser::char_info cinfo;\n\n        gl.resize(max_enc+1);\n        hinfo.default_char =  - 1;\n        if ( is_initialized == false || static_cast<std::streamoff>(in.tellg()) == std::ios::beg )\n        {\n            if ( parser.parse_header( hinfo ) == false )\n                return 0;   // parse_error: invalid or missing header\n        }\n        else\n        {\n            // not start of file, so use values from previous read.\n            hinfo.has_global_dw = has_global_width;\n            hinfo.dwx0 = global_width;\n        }\n        int res;\n        unichar nr_letters_added = 0;\n        unsigned width;\n        for ( unichar n = min_enc; n <= max_enc; n++ )\n        {\n            if ( in.eof() )\n                break;\n            long pos = in.tellg();\n            res = parser.parse_glyph( cinfo, n );\n            if ( res < 0 )\n                return 0;  // parse_error\n            if ( res == 0 )\n                continue;\n            if ( n > max_enc )\n            {\n                in.seekg( pos );\n                break;\n            }\n\n            if ( cinfo.has_dw == false )\n            {\n                if ( hinfo.has_global_dw == false )\n                    return 0;    // neither width info for the glyph, nor for the font as a whole (monospace).\n                width = hinfo.dwx0;\n            }\n            else\n                width = cinfo.dwx0;\n\n\n            if ( bitmap_to_letter( cinfo.bitmap, n, width, cinfo.BBxoff0x, cinfo.BByoff0y ) == false )\n                return 0;\n            nr_letters_added++;\n\n            if ( is_initialized == false )\n            {\n                // Bonding rectangle for the font.\n                fbb.set_top( -( hinfo.Yoff + hinfo.FBBy - 1 ) );\n                fbb.set_bottom( -hinfo.Yoff );\n                fbb.set_left( hinfo.Xoff );\n                fbb.set_right( hinfo.Xoff + hinfo.FBBx - 1 );\n                // We need to compute this after all the glyphs are loaded.\n                right_overflow_ = 0;\n                // set this to something valid now, just in case.\n                default_char = n;\n                // Save any global width in case we later read from the same file.\n                has_global_width = hinfo.has_global_dw;\n                if ( has_global_width )\n                    global_width = hinfo.dwx0;\n                // dont override value specified in the constructor with value specified in the file\n                if ( specified_default_char < 0 && hinfo.default_char >= 0 )\n                    specified_default_char = hinfo.default_char;\n\n                is_initialized = true;\n            }\n        }\n        if ( is_initialized == false )\n            return 0;   // Not a single glyph was found within the specified range.\n\n        if ( specified_default_char >= 0 )\n            default_char = specified_default_char;\n        // no default char specified, try find something sane.\n        else \n            default_char = 0;\n\n        return nr_letters_added;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool bdf_font::\n    bitmap_to_letter( \n        array2d<char>& bitmap, \n        unichar enc, \n        unsigned long width, \n        int x_offset,\n        int y_offset \n    )\n    {\n        unsigned nr_points = 0;\n        bitmap.reset();\n        while ( bitmap.move_next() )\n        {\n            unsigned char ch = bitmap.element();\n            if ( ch > '9' )\n                ch -= 'A' - '9' - 1;\n            ch -= '0';\n            if ( ch > 0xF )\n                return false;   // parse error: invalid hex digit\n            bitmap.element() = ch;\n            if ( ch & 8 )\n                nr_points++;\n            if ( ch & 4 )\n                nr_points++;\n            if ( ch & 2 )\n                nr_points++;\n            if ( ch & 1 )\n                nr_points++;\n        }\n\n        letter( width, nr_points ).swap(gl[enc]);\n\n        unsigned index = 0;\n        for ( int r = 0;r < bitmap.nr();r++ )\n        {\n            for ( int c = 0;c < bitmap.nc();c++ )\n            {\n                int x = x_offset + c * 4;\n                int y = -( y_offset + bitmap.nr() - r - 1 );\n                char ch = bitmap[r][c];\n                letter& glyph =  gl[enc];\n                if ( ch & 8 )\n                {\n                    glyph[index] = letter::point( x, y );\n                    right_overflow_ = std::max( right_overflow_, x - width );\n                    index++;\n                }\n                if ( ch & 4 )\n                {\n                    glyph[index] = letter::point( x + 1, y );\n                    right_overflow_ = std::max( right_overflow_, x + 1 - width );\n                    index++;\n                }\n                if ( ch & 2 )\n                {\n                    glyph[index] = letter::point( x + 2, y );\n                    right_overflow_ = std::max( right_overflow_, x + 2 - width );\n                    index++;\n                }\n                if ( ch & 1 )\n                {\n                    glyph[index] = letter::point( x + 3, y );\n                    right_overflow_ = std::max( right_overflow_, x + 3 - width );\n                    index++;\n                }\n            }\n        }\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const shared_ptr_thread_safe<font> get_native_font (\n    )\n    {\n        return nativefont::native_font::get_font();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FONTs_CPP_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/fonts.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), and Nils Labugt, Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#ifndef DLIB_FONTs_\n#define DLIB_FONTs_\n\n#include \"fonts_abstract.h\"\n#include \"../gui_core.h\"\n#include <string>\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../unicode.h\"\n#include \"../array.h\"\n#include \"../array2d.h\"\n#include \"../threads.h\"\n#include \"../smart_pointers_thread_safe.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class letter \n    {    \n        /*!\n            INITIAL VALUE\n                - defined by constructor\n\n            CONVENTION\n                - if (points != 0) then\n                    - points == an array of count point structs\n                - w == width()\n                - count == num_of_points()\n        !*/\n    public:\n        struct point \n        {\n            point (){}\n\n            point (\n                signed char x_,\n                signed char y_\n            ) :\n                x(x_),\n                y(y_)\n            {}\n\n            signed char x;\n            signed char y;\n        };\n\n        letter (\n        ) :\n            points(0),\n            w(0),\n            count(0)\n        {}\n\n        letter (\n            unsigned short width_,\n            unsigned short point_count\n        ) : \n            points(new point[point_count]),\n            w(width_),\n            count(point_count)\n        {}\n\n        ~letter(\n        )\n        {\n            if (points)\n                delete [] points; \n        }\n            \n        unsigned short width (\n        ) const { return w; }\n        \n        unsigned short num_of_points (\n        ) const { return count;}\n\n        point& operator[] (\n            unsigned short i\n        ) \n        { \n            DLIB_ASSERT (i < num_of_points(),\n                    \"\\tvoid letter::operator[]()\"\n                    << \"\\n\\ti:               \" << i \n                    << \"\\n\\tnum_of_points(): \" << num_of_points() );\n            return points[i]; \n        }\n\n        const point& operator[] (\n            unsigned short i\n        ) const \n        { \n            DLIB_ASSERT (i < num_of_points(),\n                    \"\\tvoid letter::operator[]()\"\n                    << \"\\n\\ti:               \" << i \n                    << \"\\n\\tnum_of_points(): \" << num_of_points() );\n            return points[i]; \n        }\n    \n        friend void serialize (\n            const letter& item, \n            std::ostream& out \n        );   \n\n        friend void deserialize (\n            letter& item, \n            std::istream& in\n        );   \n\n        void swap (\n            letter& item\n        )\n        {\n            exchange(points, item.points);\n            exchange(w, item.w);\n            exchange(count, item.count);\n        }\n\n    private:\n        // restricted functions\n        letter(letter&);        // copy constructor\n        letter& operator=(letter&);    // assignment operator\n\n        point* points;\n        unsigned short w;\n        unsigned short count;\n    };\n\n    inline void swap (\n        letter& a,\n        letter& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    class font\n    {\n    public:\n        virtual ~font() {}\n\n        virtual bool has_character (\n            unichar ch\n        )const=0;\n        bool has_character(char ch) const    { return this->has_character(zero_extend_cast<unichar>(ch)); }\n        bool has_character(wchar_t ch) const { return this->has_character(zero_extend_cast<unichar>(ch)); }\n\n        const letter& operator[] (char ch)   const { return (*this)[zero_extend_cast<unichar>(ch)]; };\n        const letter& operator[] (wchar_t ch)const { return (*this)[zero_extend_cast<unichar>(ch)]; };\n\n        virtual const letter& operator[] (\n            unichar ch\n        )const=0;\n\n        virtual unsigned long height (\n        ) const = 0;\n\n        virtual unsigned long ascender (\n        ) const = 0;\n\n        virtual unsigned long left_overflow (\n        ) const = 0;\n\n        virtual unsigned long right_overflow (\n        ) const = 0;\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T, typename traits, typename alloc>\n        void compute_size (\n            const std::basic_string<T,traits,alloc>& str,\n            unsigned long& width,\n            unsigned long& height,\n            typename std::basic_string<T,traits,alloc>::size_type first = 0,\n            typename std::basic_string<T,traits,alloc>::size_type last = (std::basic_string<T,traits,alloc>::npos)\n        ) const\n        {\n            typedef std::basic_string<T,traits,alloc> string;\n            DLIB_ASSERT ( (last == string::npos) || (first <= last && last < str.size())  ,\n                          \"\\tvoid font::compute_size()\"\n                          << \"\\n\\tlast == string::npos: \" << ((last == string::npos)?\"true\":\"false\") \n                          << \"\\n\\tfirst: \" << (unsigned long)first \n                          << \"\\n\\tlast:  \" << (unsigned long)last \n                          << \"\\n\\tstr.size():  \" << (unsigned long)str.size() );\n\n            unsigned long line_width = 0;\n            unsigned long newlines = 0;\n            width = 0;\n            height = 0;\n\n            if (str.size())\n            {\n                if (last == string::npos)\n                    last = str.size()-1;\n                const font& f = *this;\n\n                for (typename string::size_type i = first; i <= last; ++i)\n                {\n                    // ignore '\\r' characters\n                    if (str[i] == '\\r')\n                        continue;\n\n                    if (str[i] == '\\n')\n                    {\n                        ++newlines;\n                        width = std::max(width,line_width);\n                        line_width = 0;\n                    }\n                    else\n                    {\n                        if (is_combining_char(str[i]) == false)\n                            line_width += f[str[i]].width();\n                    }\n                }\n                width = std::max(width,line_width);\n\n                height = (newlines+1)*f.height();\n                width += f.left_overflow() + f.right_overflow();\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T, typename traits, typename alloc, typename pixel_type>\n        void draw_string (\n            const canvas& c,\n            const rectangle& rect,\n            const std::basic_string<T,traits,alloc>& str,\n            const pixel_type& color,\n            typename std::basic_string<T,traits,alloc>::size_type first = 0,\n            typename std::basic_string<T,traits,alloc>::size_type last = (std::basic_string<T,traits,alloc>::npos),\n            const rectangle area_ = rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                            std::numeric_limits<long>::max(), std::numeric_limits<long>::max())\n        ) const\n        {\n            typedef std::basic_string<T,traits,alloc> string;\n            DLIB_ASSERT ( (last == string::npos) || (first <= last && last < str.size())  ,\n                          \"\\tvoid font::draw_string()\"\n                          << \"\\n\\tlast == string::npos: \" << ((last == string::npos)?\"true\":\"false\") \n                          << \"\\n\\tfirst: \" << (unsigned long)first \n                          << \"\\n\\tlast:  \" << (unsigned long)last \n                          << \"\\n\\tstr.size():  \" << (unsigned long)str.size() );\n\n            rectangle area = rect.intersect(c).intersect(area_);\n            if (area.is_empty() || str.size() == 0)\n                return;\n\n            if (last == string::npos)\n                last = str.size()-1;\n\n            const font& f = *this;        \n\n            long y_offset = rect.top() + f.ascender() - 1;\n\n            long pos = rect.left()+f.left_overflow();\n            for (typename string::size_type i = first; i <= last; ++i)\n            {\n                // ignore the '\\r' character\n                if (str[i] == '\\r')\n                    continue;\n\n                // A combining character should be applied to the previous character, and we\n                // therefore make one step back. If a combining comes right after a newline, \n                // then there must be some kind of error in the string, and we don't combine.\n                if(is_combining_char(str[i]) && \n                   pos > rect.left() + static_cast<long>(f.left_overflow()))\n                {\n                    pos -= f[str[i]].width();\n                }\n\n                if (str[i] == '\\n')\n                {\n                    y_offset += f.height();\n                    pos = rect.left()+f.left_overflow();\n                    continue;\n                }\n\n                // only look at letters in the intersection area\n                if (area.bottom() + static_cast<long>(f.height()) < y_offset)\n                {\n                    // the string is now below our rectangle so we are done\n                    break;\n                }\n                else if (area.left() > pos - static_cast<long>(f.left_overflow()) && \n                    pos + static_cast<long>(f[str[i]].width() + f.right_overflow()) < area.left() )\n                {\n                    pos += f[str[i]].width();                \n                    continue;\n                }\n                else if (area.right() + static_cast<long>(f.right_overflow()) < pos)\n                {\n                    // keep looking because there might be a '\\n' in the string that\n                    // will wrap us around and put us back into our rectangle.\n                    continue;\n                }\n\n                // at this point in the loop we know that f[str[i]] overlaps \n                // horizontally with the intersection rectangle area.\n\n                const letter& l = f[str[i]];\n                for (unsigned short i = 0; i < l.num_of_points(); ++i)\n                {\n                    const long x = l[i].x + pos;\n                    const long y = l[i].y + y_offset;\n                    // draw each pixel of the letter if it is inside the intersection\n                    // rectangle\n                    if (area.contains(x,y))\n                    {\n                        assign_pixel(c[y-c.top()][x-c.left()], color);\n                    }\n                }\n\n                pos += l.width();\n            }\n        }\n        template <typename T, typename traits, typename alloc>\n        void draw_string (\n            const canvas& c,\n            const rectangle& rect,\n            const std::basic_string<T,traits,alloc>& str\n        ) const \n        { \n            draw_string(c,rect, str, 0, 0, (std::basic_string<T,traits,alloc>::npos), \n                        rectangle(std::numeric_limits<long>::min(), std::numeric_limits<long>::min(),\n                                  std::numeric_limits<long>::max(), std::numeric_limits<long>::max())); \n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T, typename traits, typename alloc>\n        const rectangle compute_cursor_rect (\n            const rectangle& rect,\n            const std::basic_string<T,traits,alloc>& str,\n            unsigned long index,\n            typename std::basic_string<T,traits,alloc>::size_type first = 0,\n            typename std::basic_string<T,traits,alloc>::size_type last = (std::basic_string<T,traits,alloc>::npos)\n        ) const\n        {\n            typedef std::basic_string<T,traits,alloc> string;\n            DLIB_ASSERT ( (last == string::npos) || (first <= last && last < str.size())  ,\n                          \"\\trectangle font::compute_cursor_rect()\"\n                          << \"\\n\\tlast == string::npos: \" << ((last == string::npos)?\"true\":\"false\") \n                          << \"\\n\\tfirst: \" << (unsigned long)first \n                          << \"\\n\\tlast:  \" << (unsigned long)last \n                          << \"\\n\\tindex:  \" << index\n                          << \"\\n\\tstr.size():  \" << (unsigned long)str.size() );\n\n            const font& f = *this;\n\n            if (last == string::npos)\n                last = str.size()-1;\n\n            long x = f.left_overflow();\n            long y = 0;\n            int count = 0;\n\n            if (str.size() != 0)\n            {\n                for (typename string::size_type i = first; i <= last && i < index; ++i)\n                {\n                    ++count;\n                    if (str[i] == '\\n')\n                    {\n                        x = f.left_overflow();\n                        y += f.height();\n                        count = 0;\n                    }\n                    else if (is_combining_char(str[i]) == false && \n                             str[i] != '\\r')\n                    {\n                        x += f[str[i]].width();\n                    }\n                }\n            }\n\n            x += rect.left();\n            y += rect.top();\n\n            // if the cursor is at the start of a line then back it up one pixel\n            if (count == 0)\n                --x;\n\n            return rectangle(x,y,x,y+f.height()-1);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T, typename traits, typename alloc>\n        unsigned long compute_cursor_pos (\n            const rectangle& rect,\n            const std::basic_string<T,traits,alloc>& str,\n            long x,\n            long y,\n            typename std::basic_string<T,traits,alloc>::size_type first = 0,\n            typename std::basic_string<T,traits,alloc>::size_type last = (std::basic_string<T,traits,alloc>::npos)\n        ) const\n        {\n            typedef std::basic_string<T,traits,alloc> string;\n            DLIB_ASSERT ( (last == string::npos) || (first <= last && last < str.size())  ,\n                          \"\\tunsigned long font::compute_cursor_pos()\"\n                          << \"\\n\\tlast == string::npos: \" << ((last == string::npos)?\"true\":\"false\") \n                          << \"\\n\\tfirst: \" << (unsigned long)first \n                          << \"\\n\\tlast:  \" << (unsigned long)last \n                          << \"\\n\\tx:  \" << x \n                          << \"\\n\\ty:  \" << y \n                          << \"\\n\\tstr.size():  \" << (unsigned long)str.size() );\n            const font& f = *this;\n\n\n            if (str.size() == 0)\n                return 0;\n            else if (first >= str.size())\n                return static_cast<unsigned long>(str.size());\n\n            y -= rect.top();\n            x -= rect.left();\n            if (y < 0)\n                y = 0;\n            if (x < 0)\n                x = 0;\n\n            if (last == string::npos)\n                last = str.size()-1;\n\n\n            // first figure out what line we are on\n            typename string::size_type pos = first;\n            long line = 0;\n            while (static_cast<unsigned long>(y) >= f.height())\n            {\n                ++line;\n                y -= f.height();\n            }\n\n            // find the start of the given line\n            for (typename string::size_type i = first; i <= last && line != 0; ++i)\n            {\n                if (str[i] == '\\n')\n                {\n                    --line;\n                    pos = i + 1;\n                }\n            }\n\n\n            // now str[pos] == the first character of the start of the line\n            // that contains the cursor.\n            const typename string::size_type start_of_line = pos;\n\n\n            long cur_x = f.left_overflow();\n            // set the current cursor position to where the mouse clicked\n            while (pos <= last)\n            {\n                if (x <= cur_x || str[pos] == '\\n')\n                    break;\n\n                if (is_combining_char(str[pos]) == false &&\n                    str[pos] != '\\r')\n                {\n                    cur_x += f[str[pos]].width();\n                }\n                ++pos;\n            }\n\n            if (x <= cur_x)\n            {\n                if (pos != start_of_line)\n                {\n                    // we might actually be closer to the previous character \n                    // so check for that and if so then jump us back one.\n                    const long width = f[str[pos-1]].width();\n                    if (x < cur_x - width/2)\n                        --pos;\n                }\n            }\n            return static_cast<unsigned long>(pos);\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    const shared_ptr_thread_safe<font> get_native_font ();\n\n// ----------------------------------------------------------------------------------------\n\n    class default_font : public font\n    {\n        letter* l;\n\n\n        default_font(\n        );\n        default_font(default_font&);        // copy constructor\n        default_font& operator=(default_font&);    // assignment operator   \n\n\n\n    public:\n        static const shared_ptr_thread_safe<font>& get_font (\n        )\n        {        \n            static mutex m;\n            static shared_ptr_thread_safe<font> f;\n            auto_mutex M(m);\n            if (f.get() == 0)\n                f.reset(new default_font);\n\n            return f;\n        }\n\n        ~default_font(\n        )\n        {\n            delete [] l;\n        }\n\n        unsigned long height (\n        ) const { return 16; }\n\n        unsigned long ascender (\n        ) const { return 12; }\n\n        unsigned long left_overflow (\n        ) const { return 1; }\n\n        unsigned long right_overflow (\n        ) const { return 2; }\n\n        bool has_character (\n            unichar ch\n        )const\n        {\n            if (ch < 256 && (l[ch].width() != 0 || l[ch].num_of_points() != 0))\n                return true;\n            else\n                return false;\n        }\n\n        const letter& operator[] (\n            unichar ch\n        ) const\n        {\n            if(ch < 256)\n                return l[ch];\n            return l[0]; // just return one of the empty characters in this case \n        }\n    };\n\n\n// ----------------------------------------------------------------------------------------\n\n    class bdf_font : public font\n    {\n    \n    public:\n        bdf_font( long default_char_ = -1 );\n    \n        long read_bdf_file( std::istream& in, unichar max_enc, unichar min_enc = 0 );\n        unsigned long height() const\n        {\n            return fbb.height();\n        }\n        unsigned long ascender() const\n        {\n            return std::max( 0L, 1 - fbb.top() );\n        }\n        unsigned long left_overflow() const\n        {\n            return std::max( 0L, -fbb.left() );\n        }\n        unsigned long right_overflow() const\n        {\n            return right_overflow_;\n        }\n        const letter& operator[] ( unichar uch ) const\n        {\n            if ( !has_character(uch) )\n            {\n                return gl[default_char];\n            }\n            return gl[uch];\n        }\n\n        bool has_character (\n            unichar ch\n        )const\n        {\n            if (ch < gl.size() && (gl[ch].width() != 0 || gl[ch].num_of_points() != 0))\n                return true;\n            else\n                return false;\n        }\n\n        void adjust_metrics();\n    private:\n\n        bool bitmap_to_letter( array2d<char>& bitmap, unichar enc, unsigned long width, int x_offset, int y_offset );\n\n        array<letter> gl;\n        unichar default_char; // if (is_intialized == true), then this MUST be an actual glyph\n        bool is_initialized;\n        rectangle fbb;\n        unsigned long right_overflow_;\n    \n        unsigned global_width;\n        bool has_global_width;\n        long specified_default_char;\n    \n        bdf_font( bdf_font& );      // copy constructor\n        bdf_font& operator=( bdf_font& );  // assignment operator\n    \n    };\n    \n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"fonts.cpp\"\n#endif\n\n#endif // DLIB_FONTs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/fonts_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Nils Labugt, Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FONTs_ABSTRACT_\n#ifdef DLIB_FONTs_ABSTRACT_\n\n#include \"../gui_core.h\"\n#include <string>\n#include \"../serialize.h\"\n#include \"../unicode.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class letter \n    {    \n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a letter in a font.  It tells you the nominal \n                width of the letter and which pixels form the letter.\n\n            THREAD SAFETY\n                const versions of this object are thread safe but if you are going to\n                be modifying it then you must serialize access to it.\n        !*/\n    public:\n        struct point \n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents one of the pixels of a letter.  \n                    \n                    The origin (i.e. (0,0)) of the coordinate plane is at the left \n                    side of the letter's baseline.  Also note that y is negative when \n                    above the baseline and positive below (it is zero on the baseline \n                    itself).\n\n                    The x value is positive going to the right and negative to the left.\n                    The meaning of a negative x value is that any points with a negative\n                    x value will overlap with the preceding letter.\n            !*/\n\n            point (\n            );\n            /*!\n                ensures\n                    - This constructor does nothing.  The value of x and y \n                      are undefined after its execution.\n            !*/\n\n            point (\n                signed char x_,\n                signed char y_\n            );\n            /*!\n                ensures\n                    - #x == x_\n                    - #y == y_\n            !*/\n\n\n            signed char x;\n            signed char y;\n        };\n\n        // ---------------------------------\n\n        letter (\n        );\n        /*!\n            ensures\n                - #width() == 0 \n                - #num_of_points() == 0 \n        !*/\n\n        letter (\n            unsigned short width_,\n            unsigned short point_count\n        );\n        /*!\n            ensures\n                - #width() == width_\n                - #num_of_points() == point_count\n        !*/\n\n        ~letter(\n        );\n        /*!\n            ensures\n                - any resources used by *this have been freed\n        !*/\n            \n        const unsigned short width (\n        ) const;\n        /*!\n            ensures\n                - returns the width reserved for this letter in pixels.  This is the \n                  number of pixels that are reserved for this letter between adjoining \n                  letters.  It isn't necessarily the width of the actual letter itself.  \n                  (for example, you can make a letter with a width less than how wide it \n                  actually is so that it overlaps with its neighbor letters.)\n        !*/\n\n        const unsigned short num_of_points (\n        ) const;\n        /*!\n            ensures\n                - returns the number of pixels that make up this letter.\n        !*/\n\n        point& operator[] (\n            unsigned short i\n        );\n        /*!\n            requires\n                - i < num_of_points()\n            ensures\n                - returns a non-const reference to the ith point in this letter.\n        !*/\n\n        const point& operator[] (\n            unsigned short i\n        ) const;\n        /*!\n            requires\n                - i < num_of_points()\n            ensures\n                - returns a const reference to the ith point in this letter.\n        !*/\n\n        void swap (\n            letter& item\n        );\n        /*!\n            ensures\n                - swaps *this with item\n        !*/\n    \n        private:\n\n        // restricted functions\n        letter(letter&);        // copy constructor\n        letter& operator=(letter&);    // assignment operator\n    };\n\n    inline void swap (\n        letter& a,\n        letter& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const letter& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support for letter objects\n    !*/\n\n    void deserialize (\n        letter& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support for letter objects\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class font\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines an interface for a font type.  It provides metrics\n                for the font and functions to help you draw strings on a canvas object.\n\n            THREAD SAFETY\n                All the functions in this class are thread safe.\n        !*/\n\n    public:\n\n        virtual bool has_character (\n            unichar ch\n        )const=0;\n        /*!\n            ensures\n                - if (this font has a glyph for the given character) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n        bool has_character(char ch) const    { return this->has_character(zero_extend_cast<unichar>(ch)); }\n        bool has_character(wchar_t ch) const { return this->has_character(zero_extend_cast<unichar>(ch)); }\n        /* Cast char and wchar_t to unichar correctly when char or wchar_t is a signed type */\n\n        virtual const letter& operator[] (\n            unichar ch\n        )const=0;\n        /*!\n            ensures\n                - if (has_character(ch) == true) then\n                    - returns a letter object that tells you how to draw this character.\n                - else\n                    - returns some default glyph for characters that aren't in this font.\n        !*/\n        const letter& operator[] (char ch)    const { return (*this)[zero_extend_cast<unichar>(ch)]; };\n        const letter& operator[] (wchar_t ch) const { return (*this)[zero_extend_cast<unichar>(ch)]; };\n        /* Cast char and wchar_t to unichar correctly when char or wchar_t is a signed type */\n\n        virtual const unsigned long height (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the height in pixels of the tallest letter in the font                \n        !*/\n\n        virtual const unsigned long ascender (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the height() minus the number of pixels below the baseline used\n                  by the letter that hangs the lowest below the baseline.\n        !*/\n\n        virtual const unsigned long left_overflow (\n        ) const = 0;\n        /*! \n            ensures\n                - returns how far outside and to the left of its width a letter\n                  from this font may set pixels.  (i.e. how many extra pixels to its\n                  left may a font use)\n        !*/\n\n        virtual const unsigned long right_overflow (\n        ) const = 0;\n        /*! \n            ensures\n                - returns how far outside and to the right of its width a letter\n                  from this font may set pixels.  (i.e. how many extra pixels to its\n                  right may a font use)\n        !*/\n\n        template <typename T, typename traits, typename alloc>\n        void compute_size (\n            const std::basic_string<T,traits,alloc>& str,\n            unsigned long& width,\n            unsigned long& height,\n            typename std::basic_string<T,traits,alloc>::size_type first = 0,\n            typename std::basic_string<T,traits,alloc>::size_type last = std::basic_string<T,traits,alloc>::npos\n        ) const;\n        /*!\n            requires\n                - if (last != std::basic_string<T,traits,alloc>::npos) then\n                    - first <= last\n                    - last < str.size()\n            ensures\n                - all characters in str with an index < first are ignored by this\n                  function.\n                - if (last != std::basic_string<T,traits,alloc>::npos) then\n                    - all characters in str with an index > last are ignored by \n                      this function.\n                - if (str.size() == 0) then\n                    - #width == 0\n                    - #height == 0\n                - else\n                    - #width == sum of the widths of the characters in the widest \n                      line in str + left_overflow() + right_overflow(). \n                    - #height == (count(str.begin(),str.end(),'\\n')+1)*height()\n        !*/\n\n        template <typename T, typename traits, typename alloc, typename pixel_type>\n        void draw_string (\n            const canvas& c,\n            const rectangle& rect,\n            const std::basic_string<T,traits,alloc>& str,\n            const pixel_type& color = rgb_pixel(0,0,0),\n            typename std::basic_string<T,traits,alloc>::size_type first = 0,\n            typename std::basic_string<T,traits,alloc>::size_type last = std::basic_string<T,traits,alloc>::npos,\n            const rectangle area = rectangle(-infinity,-infinity,infinity,infinity)\n        ) const;\n        /*!\n            requires\n                - if (last != std::basic_string<T,traits,alloc>::npos) then\n                    - first <= last\n                    - last < str.size()\n            ensures\n                - all characters in str with an index < first are ignored by this\n                  function.\n                - if (last != std::basic_string<T,traits,alloc>::npos) then\n                    - all characters in str with an index > last are ignored by \n                      this function.\n                - if (str.size() == 0) then\n                    - does nothing\n                - else\n                    - draws str on the given canvas at the position defined by rect.  \n                      Also uses the given pixel colors for the font color.\n                - If the string is too big to fit in rect then the right and\n                  bottom sides of it will be clipped to make it fit.                  \n                - only the part of the string that is contained inside the area\n                  rectangle will be drawn\n        !*/\n\n        template <typename T, typename traits, typename alloc>\n        const rectangle compute_cursor_rect (\n            const rectangle& rect,\n            const std::basic_string<T,traits,alloc>& str,\n            unsigned long index,\n            typename std::basic_string<T,traits,alloc>::size_type first = 0,\n            typename std::basic_string<T,traits,alloc>::size_type last = std::basic_string<T,traits,alloc>::npos\n        ) const;\n        /*!\n            requires\n                - if (last != std::basic_string<T,traits,alloc>::npos) then\n                    - first <= last\n                    - last < str.size()\n            ensures\n                - the returned rectangle has a width of 1 and a \n                  height of this->height().\n                - computes the location of the cursor that would sit just before\n                  the character str[index] if str were drawn on the screen by\n                  draw_string(rect,str,...,first,last).  The cursor location is\n                  returned in the form of a rectangle.\n                - if (index < first) then\n                    - the returned cursor will be just before the character str[first].\n                - if (last != std::basic_string<T,traits,alloc>::npos && index > last) then\n                    - the returned cursor will be just after the character str[last]\n                - if (str.size() == 0) then\n                    - the returned cursor will be just at the start of the rectangle where\n                      str would be drawn if it wasn't empty.\n                - if (index > str.size()-1) then\n                    - the returned cursor will be just after the character str[str.size()-1]\n        !*/\n\n        template <typename T, typename traits, typename alloc>\n        const unsigned long compute_cursor_pos (\n            const rectangle& rect,\n            const std::basic_string<T,traits,alloc>& str,\n            long x,\n            long y,\n            typename std::basic_string<T,traits,alloc>::size_type first = 0,\n            typename std::basic_string<T,traits,alloc>::size_type last = std::basic_string<T,traits,alloc>::npos\n        ) const;\n        /*!\n            requires\n                - if (last != std::basic_string<T,traits,alloc>::npos) then\n                    - first <= last\n                    - last < str.size()\n            ensures\n                - returns a number idx that has the following properties:\n                    - if (first < str.size()) then\n                        - first <= idx\n                    - else\n                        - idx == str.size()\n                    - if (last != std::basic_string<T,traits,alloc>::npos) then\n                        - idx <= last + 1\n                    - compute_cursor_rect(rect,str,idx,first,last) == the cursor\n                      position that is closest to the pixel (x,y)\n        !*/\n\n\n    private:\n\n        // restricted functions\n        font(font&);        // copy constructor\n        font& operator=(font&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class default_font : public font\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an implementation of the Helvetica 12 point font.\n\n            THREAD SAFETY\n                It is safe to call get_font() and access the returned font from any \n                thread and no synchronization is needed as long as it is called \n                after the main() function has been entered.\n        !*/\n\n    public:\n        static const shared_ptr_thread_safe<font> get_font(\n        );\n        /*!\n            ensures\n                - returns an instance of this font.\n            throws\n                - std::bad_alloc\n                    This exception is thrown if there is a problem gathering the needed\n                    memory for the font object.\n        !*/\n\n    private:\n\n        // restricted functions\n        default_font();        // normal constructor\n        default_font(default_font&);        // copy constructor\n        default_font& operator=(default_font&);    // assignment operator   \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class bdf_font : public font\n    {\n    \n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a font object that is capable of loading of loading BDF (Glyph \n                Bitmap Distribution Format) font files.\n\n            THREAD SAFETY\n                If you only access this object via the functions in the parent class font \n                then this object is thread safe.  But if you need to call any of the\n                functions introduced in this derived class then you need to serialize \n                access to this object while you call these functions.\n        !*/\n\n    public:\n\n        bdf_font( \n            long default_char = -1 \n        );\n        /*!\n            ensures\n                - for all x:\n                    - #has_character(x) == false\n                      (i.e. this font starts out empty.  You have to call read_bdf_file()\n                      to load it with data)\n                - if (default_char == -1) then\n                    - the letter returned by (*this)[ch] for values of\n                      ch where has_character(ch) == false will be the\n                      default glyph defined in the bdf file.\n                - else\n                    - the letter returned by (*this)[ch] for values of\n                      ch where has_character(ch) == false will be the\n                      letter (*this)[default_char].\n        !*/\n    \n        long read_bdf_file( \n            std::istream& in, \n            unichar max_enc, \n            unichar min_enc = 0 \n        );\n        /*!\n            ensures\n                - attempts to read the font data from the given input stream into\n                  *this.  The input stream is expected to contain a valid BDF file.\n                - reads in characters with encodings in the range min_enc to max_enc\n                  into this font.  All characters in the font file outside this range\n                  are ignored.\n                - returns the number of characters loaded into this font from the\n                  given input stream.\n        !*/\n\n        void adjust_metrics();\n        /*!\n            ensures\n                - Computes metrics based on actual glyphs loaded, instead of using \n                  the values in the bdf file header. (May be useful if loading glyphs \n                  from more than one file or a small part of a file.)\n        !*/\n\n    private:\n    \n        bdf_font( bdf_font& );      // copy constructor\n        bdf_font& operator=( bdf_font& );  // assignment operator\n    \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    const shared_ptr_thread_safe<font> get_native_font(\n    );\n    /*!\n        ensures\n            - returns a font object that uses the local font\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FONTs_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/nativefont.h",
    "content": "// Copyright (C) 2006 Keita Mochizuki \n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IGG_FONT_RENDERER_H_\n#define DLIB_IGG_FONT_RENDERER_H_\n#include \"../platform.h\"\n\n\n#include \"../gui_widgets.h\"\n#include \"../unicode.h\"\n#include \"../smart_pointers_thread_safe.h\"\n#include \"../uintn.h\"\n\n#include <map>\n\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <locale.h>\n\n#if defined(WIN32)\n#include <windows.h>\n#include <mbstring.h>\n#elif defined(POSIX)\n#include <stdint.h>\n#include <stdio.h>\n#include <string.h>\n#include <X11/Xlib.h>\n#include <X11/Xutil.h>\n#include <X11/Xlocale.h>\n#endif\n\nnamespace nativefont\n{\n// ----------------------------------------------------------------------------------------\n\n    namespace font_renderer\n    {\n        typedef dlib::uint8 byte;\n\n\n#ifdef WIN32\n        template <typename T> struct input2native_trait{\n        };\n        template <> struct input2native_trait<char>{\n            typedef char type_t;\n        };\n        template <> struct input2native_trait<wchar_t>{\n            typedef wchar_t type_t;\n        };\n        template <> struct input2native_trait<dlib::unichar>{\n            typedef wchar_t type_t;\n        };\n#endif\n        // T : N : sizeof_source_type\n        template <int N> struct size2inner_trait{\n        };\n        template <> struct size2inner_trait<1>{\n            typedef char type_t;\n        };\n        template <> struct size2inner_trait<2>{\n            typedef dlib::uint16 type_t;\n        };\n        template <> struct size2inner_trait<4>{\n            typedef dlib::unichar type_t;\n        };\n\n\n// ----------------------------------------------------------------------------------------\n\n        template <int N> struct create_helper{ };\n        template <> struct create_helper<1>{\n            typedef char type_t;\n            type_t *istr;\n            int len;\n            create_helper(char *str){\n                len = (int)strlen(str);\n                istr = str;\n            }\n            ~create_helper(){}\n        };\n        template <> struct create_helper<2>{\n            typedef wchar_t type_t;\n            type_t *istr;\n            bool allocated;\n            int len;\n            create_helper(wchar_t *str){\n                allocated = false;\n                len = (int)wcslen(str);\n                istr = str;\n            }\n            create_helper(dlib::unichar *str){\n                allocated = true;\n                len = 0;\n                int unicount = 0;\n                dlib::unichar *p = str;\n                while(*p){\n                    if (*p > 0xffff){\n                        len += 2;\n                    }else{\n                        len++;\n                    }\n                    unicount++;\n                    p++;\n                }\n                istr = new wchar_t[len+1];\n                for (int i = 0, wi = 0; i < unicount; ++i){\n                    dlib::unichar high, low;\n                    if (str[i] > 0xffff){\n                        dlib::unichar_to_surrogate_pair(str[i], high, low);\n                        istr[wi] = (wchar_t)high, istr[wi+1] = (wchar_t)low;\n                        wi += 2;\n                    }else{\n                        istr[wi] = (wchar_t)str[i];\n                        wi += 1;\n                    }\n                }\n                istr[len] = L'\\0';\n            }\n\n            ~create_helper(){\n                if (allocated) delete[] istr;\n            }\n        };\n        template <> struct create_helper<4>{\n            typedef wchar_t type_t;\n            type_t *istr;\n            int len;\n            create_helper(dlib::unichar *str){\n                len = (int)wcslen((wchar_t *)str);\n                istr = (type_t *)str;\n            }\n            ~create_helper(){}\n        };\n\n// ----------------------------------------------------------------------------------------\n\n        class font_renderer{\n        public:\n\n            struct rgb_type{\n                byte r, g, b;\n                rgb_type() : r(0), g(0), b(0){};\n                rgb_type(byte r_, byte g_, byte b_) : r(r_), g(g_), b(b_){};\n            };\n        private:\n\n            byte *image;\n            int width, height;\n            void destroy(){\n                width = height = 0;\n                delete image;\n                image = 0;\n            }\n            struct vals_internal{\n                int width, height;\n#ifdef WIN32\n                COLORREF rgb2RGB(rgb_type &rgb){\n                    return RGB(rgb.r, rgb.g, rgb.b);\n                }\n                HBITMAP hBmp, hBmpOld;\n                HDC hDCBmp;\n                BYTE *pixelint;\n                HFONT hFont, hFontOld;\n                HBRUSH hBrush;\n                int pix_width_prev, pix_height_prev;\n                bool first;\n                int ascender, descender;\n                int height_prev;\n                char attribute_prev;\n\n                template <typename T> void create(T *str, int height_want, bool italic, bool bold, bool fixed, rgb_type &background, rgb_type &foreground){\n                    struct inner{\n                        inline static BOOL GetTextExtentPoint32(HDC hDC, LPCSTR str, int len, LPSIZE lpsize){\n                            return ::GetTextExtentPoint32A(hDC, str, len, lpsize);\n                        }\n                        inline static BOOL GetTextExtentPoint32(HDC hDC, LPCWSTR str, int len, LPSIZE lpsize){\n                            return ::GetTextExtentPoint32W(hDC, str, len, lpsize);\n                        }\n                        inline static BOOL TextOut(HDC hDC, int nxstart, int nystart, LPCSTR str, int cbstr){\n                            return ::TextOutA(hDC, nxstart, nystart, str, cbstr);\n                        }\n                        inline static BOOL TextOut(HDC hDC, int nxstart, int nystart, LPCWSTR str, int cbstr){\n                            return ::TextOutW(hDC, nxstart, nystart, str, cbstr);\n                        }\n                    };\n\n                    create_helper<sizeof(typename input2native_trait<T>::type_t)> ch(str);\n\n                    if (hDCBmp == NULL){\n                        HWND hWnd = GetDesktopWindow();\n                        HDC hDC = GetDC(hWnd);\n                        hDCBmp = CreateCompatibleDC(hDC);\n                        ReleaseDC(hWnd, hDC);\n                    }\n                    SetTextColor(hDCBmp, rgb2RGB(foreground));\n                    SetBkColor(hDCBmp, rgb2RGB(background));\n\n                    char attribute = (italic ? 1 : 0) | (bold ? 2 : 0) | (fixed ? 4 : 0);\n                    if (!hFont || height_prev != height || attribute != attribute_prev){\n                        attribute_prev = attribute;\n                        height_prev = height_want;\n                        if (hFont){\n                            SelectObject(hDCBmp, hFontOld);\n                            DeleteObject(hFont);\n                        }\n                        hFont = CreateFont(height_want, 0, 0, 0, bold ? FW_BOLD : FW_DONTCARE, italic ? TRUE : FALSE, \n                                           FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,\n                                           fixed ? (FIXED_PITCH | FF_DONTCARE) : (VARIABLE_PITCH | FF_DONTCARE), NULL);\n                        hFontOld = (HFONT)SelectObject(hDCBmp, hFont);\n                    }\n\n                    {\n                        SIZE sz;\n                        inner::GetTextExtentPoint32(hDCBmp, ch.istr, ch.len, &sz);\n                        width = ((sz.cx + 3) / 4) * 4;\n                        height = sz.cy;\n                    }\n\n                    if (pix_width_prev < width || pix_height_prev < height){\n                        if (hBmp){\n                            SelectObject(hDCBmp, hBmpOld);\n                            DeleteObject(hBmp);\n                        }\n                        pix_width_prev = width * 2;\n                        pix_height_prev = height * 2;\n                        BITMAPINFO bi;\n                        ZeroMemory(&bi, sizeof(bi));\n                        bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n                        bi.bmiHeader.biBitCount = 24;\n                        bi.bmiHeader.biPlanes = 1;\n                        bi.bmiHeader.biWidth = pix_width_prev;\n                        bi.bmiHeader.biHeight = -pix_height_prev;\n                        hBmp = CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, (void **)&pixelint, NULL, 0);\n                        hBmpOld = (HBITMAP)SelectObject(hDCBmp, hBmp);\n                    }\n\n                    {\n                        HBRUSH hBrush = CreateSolidBrush(rgb2RGB(background));\n                        RECT rc;\n                        rc.left = rc.top = 0;\n                        rc.right = pix_width_prev;\n                        rc.bottom = pix_height_prev;\n                        FillRect(hDCBmp, &rc, hBrush);\n                    }\n\n                    inner::TextOut(hDCBmp, 0, 0, ch.istr, ch.len);\n                    TEXTMETRICW tm;\n                    GetTextMetricsW(hDCBmp,&tm);\n                    ascender = tm.tmAscent;\n                    descender = tm.tmDescent;\n                }\n\n                template <typename T> vals_internal(T *str, int height_want, bool italic = false,\n                    bool bold = false, bool fixed = false, rgb_type background = rgb_type(), rgb_type foreground = rgb_type()){\n                    first = true;\n                    hFont = NULL;\n                    hDCBmp = 0;\n                    hBmpOld = 0;\n                    hBmp = 0;\n                    hDCBmp = 0;\n                    pixelint = 0;\n                    pix_width_prev = pix_height_prev = 0;\n                    height_prev = -1;\n                    attribute_prev = 0;\n                    create(str, height_want, italic, bold, fixed, background, foreground);\n                    first = false;\n                }\n\n                inline int get_ascender(){\n                    return ascender;\n                }\n\n                inline int get_descender(){\n                    return descender;\n                }\n\n                inline void get_pixel(int x, int y, byte &r, byte &g, byte &b){\n                    byte *p = pixelint + (y * pix_width_prev + x) * 3;\n                    r = *(p+2), g = *(p+1), b = *p;\n                }\n\n                void destroy(){\n                    SelectObject(hDCBmp, hBmpOld);\n                    DeleteObject(hBmp);\n                    SelectObject(hDCBmp, hFontOld);\n                    DeleteObject(hFont);\n                    DeleteDC(hDCBmp);\n                    hFont = NULL;\n                    hDCBmp = 0;\n                    hBmpOld = 0;\n                    hBmp = 0;\n                    hDCBmp = 0;\n                    pixelint = 0;\n                }\n                ~vals_internal(){\n                    destroy();\n                }\n#elif defined(POSIX)\n                XImage *ximg;\n                Display *d;\n                GC gc;\n                XFontSet fs;\n                Pixmap pix;\n                Colormap cmap;\n                int ascender, descender;\n                int pix_width_prev, pix_height_prev;\n                char fontset_prev[256];\n                unsigned long rgb2color(rgb_type col, Display *d, Colormap &cmap){\n                    XColor xcol;\n                    xcol.red = col.r * 257;\n                    xcol.green = col.g * 257;\n                    xcol.blue = col.b * 257;\n                    XAllocColor(d, cmap, &xcol);\n                    return xcol.pixel;\n                }\n                template <typename T> void create(T *str, int height_want, bool italic, bool bold, bool fixed, rgb_type background, rgb_type foreground){\n                    struct inner{\n                        inline static int XTextExtents (XFontSet fs, char *str, int len, XRectangle *ink, XRectangle *logical){\n                            return XmbTextExtents(fs, str, len, ink, logical);\n                        }\n                        inline static int XTextExtents (XFontSet fs, wchar_t *str, int len, XRectangle *ink, XRectangle *logical){\n                            return XwcTextExtents(fs, str, len, ink, logical);\n                        }\n                        inline static void XDrawString(Display *d, Window w, XFontSet fs, GC gc, int x, int y, char *str, int num_bytes){\n                            XmbDrawString(d, w, fs, gc, x, y, str, num_bytes);\n                        }\n                        inline static void XDrawString(Display *d, Window w, XFontSet fs, GC gc, int x, int y, wchar_t *str, int num_bytes){\n                            XwcDrawString(d, w, fs, gc, x, y, str, num_bytes);\n                        }\n                    };\n                    create_helper<sizeof(T)> ch((typename size2inner_trait<sizeof(T)>::type_t *)str);\n                    setlocale(LC_CTYPE, \"\");\n                    if (d == NULL){\n                        d = XOpenDisplay(NULL);\n                        if (d == 0)\n                        {\n                            d = XOpenDisplay(\":0.0\");\n                            if (d == 0)\n                            {\n                                throw dlib::gui_error(\"Unable to connect to the X display.\");\n                            }\n                        }\n\n                        cmap = DefaultColormap(d, DefaultScreen(d));\n                    }\n                    char fontset[256];\n                    {\n                        char *p = fontset;\n                        p += sprintf(fontset, \"-*-*-%s-%c-normal--%d-*-*-*-%c\",\n                                     bold ? \"bold\" : \"medium\", italic ? 'i' : 'r', height_want, fixed ? 'c' : 'p');\n                        if (fixed){\n                            sprintf(p, \",-*-*-%s-%c-normal--%d-*-*-*-m\",\n                                    bold ? \"bold\" : \"medium\", italic ? 'i' : 'r', height_want);\n                        }\n                    }\n                    bool equal_font;\n                    if (strcmp(fontset, fontset_prev) == 0){\n                        equal_font = true;\n                    }else{\n                        equal_font = false;\n                        strcpy(fontset_prev, fontset);\n                    }\n\n                    char **mlist;\n                    int mcount;\n                    char *def_str;\n                    if (!equal_font){\n                        if (fs){\n                            XFreeFontSet(d, fs);\n                        }\n                        fs = XCreateFontSet(d, fontset, &mlist, &mcount, &def_str);\n                        if (fs == NULL)\n                           throw dlib::gui_error(\"gui_error: XCreateFontSet() failure\");\n\n                        XFontSetExtents *extent;\n                        extent = XExtentsOfFontSet(fs);\n                        ascender = -extent->max_logical_extent.y;\n                        descender = extent->max_logical_extent.height - ascender;\n                        XFreeStringList(mlist);\n                    }\n                    XRectangle ink, logical;\n                    inner::XTextExtents (fs, ch.istr, ch.len, &ink, &logical);\n                    width = logical.width;\n                    height = height_want;\n\n                    if (pix == None || pix_width_prev < width || pix_height_prev < height){\n                        if (pix != None){\n                            XFreeGC(d, gc);\n                            XFreePixmap(d, pix);\n                        }\n                        pix_width_prev = width * 2;\n                        pix_height_prev = height * 2;\n                        pix = XCreatePixmap(d, DefaultRootWindow(d), pix_width_prev, pix_height_prev, XDefaultDepth(d, DefaultScreen(d)));\n                        gc = XCreateGC(d, pix, 0, NULL);\n                    }\n\n                    unsigned long backcolor = rgb2color(background, d, cmap);\n                    XSetForeground(d, gc, backcolor);\n                    XSetBackground(d, gc, backcolor);\n                    XFillRectangle(d, pix, gc, 0, 0, width, height);\n                    XSetForeground(d, gc, rgb2color(foreground, d, cmap));\n                    inner::XDrawString(d, pix, fs, gc, 0, ascender, ch.istr, ch.len);\n\n                    if (ximg) XDestroyImage(ximg);\n                    ximg = XGetImage(d, pix, 0, 0, width, height, AllPlanes, ZPixmap );\n                }\n\n                template <typename T> vals_internal(T *str, int height_want, bool italic = false,\n                    bool bold = false, bool fixed = false, rgb_type background = rgb_type(), rgb_type foreground = rgb_type()){\n                    fontset_prev[0] = '\\0';\n                    ximg = NULL;\n                    d = NULL;\n                    pix = None;\n                    fs = NULL;\n                    ascender = descender = -1;\n                    pix_width_prev = pix_height_prev = -1;\n                    create(str, height_want, italic, bold, fixed, background, foreground);\n                }\n\n                inline int get_ascender(){\n                    return ascender;\n                }\n\n                inline int get_descender(){\n                    return descender;\n                }\n\n                std::map<unsigned long,rgb_type> col2rgb;\n                rgb_type color2rgb(unsigned long color, Display *d, Colormap &cmap){\n                    if (col2rgb.count(color)){\n                        return col2rgb[color];\n                    }else{\n                        XColor xcol;\n                        xcol.pixel = color;\n                        XQueryColor(d, cmap, &xcol);\n                        rgb_type rgb_((byte)(xcol.red/257), (byte)(xcol.green/257), (byte)(xcol.blue/257));\n                        col2rgb[color] = rgb_;\n                        return rgb_;\n                    }\n                }\n                inline void get_pixel(int x, int y, byte &r, byte &g, byte &b){\n                    rgb_type c = color2rgb(XGetPixel(ximg,x,y), d, cmap);\n                    r = c.r, g = c.g, b = c.b;\n                }\n\n                ~vals_internal(){\n                    XDestroyImage(ximg);\n\n                    XFreeGC(d, gc);\n                    XFreeFontSet(d, fs);\n                    XFreePixmap(d, pix);\n                    XCloseDisplay(d);\n                }\n#endif\n            };\n\n            struct image_size_setter{\n                void operator()(int&, int&){\n                }\n            };\n\n            int ascender, descender;\n            vals_internal *vi;\n        public:\n            font_renderer() : image(0), width(0), height(0){\n                ascender = descender = 0;\n                vi = NULL;\n            }\n\n            template<typename T> font_renderer(T *str, int height_want, bool italic = false, bool bold = false, bool fixed = false,         rgb_type background = rgb_type(0,0,0), rgb_type foreground = rgb_type(255,255,255)){\n                render(str, height_want, italic, bold, fixed, background, foreground);\n            }\n\n            template<typename T> void render(T *str, int height_want,\n                                             bool italic = false, bool bold = false, bool fixed = false,\n                                             rgb_type background = rgb_type(0,0,0), rgb_type foreground = rgb_type(255,255,255)){\n                if (vi == NULL){\n                    vi = new vals_internal(str, height_want, italic, bold, fixed, background, foreground);\n                }else{\n                    vi->create(str, height_want, italic, bold, fixed, background, foreground);\n                }\n                width = vi->width, height = vi->height;\n                image = new byte[width * height * 3];\n                ascender = vi->get_ascender();\n                descender = vi->get_descender();\n\n                int h = height, w = width;\n                for (int j = 0, i3 = 0; j < h; ++j){\n                    for (int i = 0; i < w; ++i, i3 += 3){\n                        vi->get_pixel(i, j, image[i3], image[i3+1], image[i3+2]);\n                    }\n                }\n            }\n\n            ~font_renderer(){\n                if (vi) delete vi;\n                destroy();\n            }\n            int get_width(){\n                return width;\n            }\n            int get_height(){\n                return height;\n            }\n            inline int get_ascender(){\n                return ascender;\n            }\n            inline int get_descender(){\n                return descender;\n            }\n\n            const byte *get_image(){\n                return image;\n            }\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class native_font : public dlib::font \n    {\n        unsigned long ascender_;\n        native_font(){\n            setlocale(LC_CTYPE, \"\");\n            ascender_ = 0;\n            get_letter((int)('x'));\n        }\n        typedef std::map<int,dlib::letter *> letters_map_type;\n        letters_map_type letters;\n        font_renderer::font_renderer fl;\n    public:\n\n        virtual ~native_font() \n        {\n            // delete all the letter objects we have in our letters map\n            letters_map_type::iterator i;\n            for (i = letters.begin(); i != letters.end(); ++i)\n            {\n                delete i->second;\n            }\n        }\n\n        virtual bool has_character (\n            dlib::unichar ch\n        )const{\n            return (*this)[ch].width() > 0;\n        }\n\n        static const dlib::shared_ptr_thread_safe<font>& get_font (\n        )\n        {\n            static dlib::shared_ptr_thread_safe<font> f(new native_font);\n            return f;\n        }\n\n        virtual const dlib::letter& operator[] (dlib::unichar ch) const{\n            return (const_cast<native_font *>(this))->get_letter(ch);\n        }\n\n        dlib::letter& get_letter (\n            dlib::unichar ch\n        ){\n            if (letters.count(ch)){\n                dlib::letter *l = letters.find(ch)->second;\n                return *l;\n            }\n\n            dlib::unichar c[2];\n            c[0] = ch;\n            c[1] = 0;\n\n            fl.render(c, height(),false,false,true);\n            if (ascender_ == 0){\n                ascender_ = fl.get_ascender();\n            }\n            std::vector<dlib::letter::point> v;\n            const font_renderer::byte *bp = fl.get_image();\n            for (int j = 0; j < fl.get_height(); ++j){\n                for (int i = 0; i < fl.get_width(); ++i, bp += 3){\n                    if (*bp){\n                        v.push_back(dlib::letter::point(i,j-ascender()+1));\n                    }\n                }\n            }\n            dlib::letter *l = new dlib::letter(fl.get_width(), (unsigned long)v.size());\n\n            letters.insert(std::make_pair(ch,l));\n            for (int i = 0; i < (int)v.size(); ++i){\n                (*l)[i] = v.at(i);\n            }\n            return *l;\n        }\n\n        virtual unsigned long height (\n        ) const { return 12; }\n\n        virtual unsigned long ascender (\n        ) const { return ascender_; }\n\n        virtual unsigned long left_overflow (\n        ) const { return 1; }\n\n        virtual unsigned long right_overflow (\n        ) const { return 2; }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IGG_FONT_RENDERER_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/style.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net), and Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_WIDGETs_STYLE_CPP_\n#define DLIB_WIDGETs_STYLE_CPP_\n\n#include \"style.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // button style stuff \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void button_style_default::draw_button (\n        const canvas& c,\n        const rectangle& rect,\n        const bool enabled,\n        const font& mfont,\n        const long ,\n        const long ,\n        const ustring& name,\n        const bool is_depressed\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n\n        fill_rect(c,rect,rgb_pixel(212,208,200));\n\n        unsigned char red, green, blue;\n        if (enabled)\n        {\n            red = 0;\n            green = 0;\n            blue = 0;\n        }\n        else\n        {\n            red = 128;\n            green = 128;\n            blue = 128;\n        }\n\n        // compute the name length if it hasn't already been computed\n        if (name_width == 0)\n        {\n            unsigned long height;\n            mfont.compute_size(name,name_width,height);\n        }\n\n        // figure out where the name string should appear\n        rectangle name_rect;\n        const unsigned long width = name_width;\n        const unsigned long height = mfont.height();\n        name_rect.set_left((rect.right() + rect.left() - width)/2);\n        name_rect.set_top((rect.bottom() + rect.top() - height)/2 + 1);\n        name_rect.set_right(name_rect.left()+width-1);\n        name_rect.set_bottom(name_rect.top()+height);\n\n\n        if (is_depressed)\n        {\n            name_rect.set_left(name_rect.left()+1);\n            name_rect.set_right(name_rect.right()+1);\n            name_rect.set_top(name_rect.top()+1);\n            name_rect.set_bottom(name_rect.bottom()+1);\n\n            mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));\n\n            draw_button_down(c,rect); \n        }\n        else\n        {\n            mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));\n\n            // now draw the edge of the button\n            draw_button_up(c,rect);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle button_style_default::\n    get_min_size (\n        const ustring& name,\n        const font& mfont \n    ) const \n    {\n\n        unsigned long width; \n        unsigned long height;\n        mfont.compute_size(name,width,height);\n        name_width = width;\n\n        return rectangle(width+2*padding, height+2*padding);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void button_style_toolbar1::draw_button (\n        const canvas& c,\n        const rectangle& rect,\n        const bool enabled,\n        const font& mfont,\n        const long lastx,\n        const long lasty,\n        const ustring& name,\n        const bool is_depressed\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n\n        const long radius = 4;\n\n        unsigned char red, green, blue;\n        if (enabled)\n        {\n            red = 0;\n            green = 0;\n            blue = 0;\n\n            long d = 0;\n            if (rect.contains(lastx,lasty))\n                d = -70; \n\n            if (is_depressed)\n                d = 20;\n\n            if (d != 0)\n            {\n                rectangle temp(rect);\n                temp.left()--; temp.top()--; temp.right()++; temp.bottom()++;\n                draw_rounded_rectangle(c, temp, radius, rgb_alpha_pixel(255,255,0,120)); \n                temp.left()--; temp.top()--; temp.right()++; temp.bottom()++;\n                draw_rounded_rectangle(c, temp, radius, rgb_alpha_pixel(255,255,0,40)); \n            }\n\n            fill_gradient_rounded(c,rect,radius,rgb_alpha_pixel(255, 255, 255,120-d), \n                                  rgb_alpha_pixel(255, 255, 255,0));\n            draw_rounded_rectangle(c,rect,radius, rgb_alpha_pixel(30,30,30,200));\n        }\n        else\n        {\n            red = 128;\n            green = 128;\n            blue = 128;\n            draw_rounded_rectangle(c,rect,radius, rgb_alpha_pixel(red,green,blue,210));\n        }\n\n\n        // compute the name length if it hasn't already been computed\n        if (name_width == 0)\n        {\n            unsigned long height;\n            mfont.compute_size(name,name_width,height);\n        }\n\n        // figure out where the name string should appear\n        rectangle name_rect;\n        const unsigned long width = name_width;\n        const unsigned long height = mfont.height();\n        name_rect.set_left((rect.right() + rect.left() - width)/2);\n        name_rect.set_top((rect.bottom() + rect.top() - height)/2 + 1);\n        name_rect.set_right(name_rect.left()+width-1);\n        name_rect.set_bottom(name_rect.top()+height);\n\n\n        if (is_depressed)\n        {\n            name_rect.set_left(name_rect.left()+1);\n            name_rect.set_right(name_rect.right()+1);\n            name_rect.set_top(name_rect.top()+1);\n            name_rect.set_bottom(name_rect.bottom()+1);\n\n            mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));\n\n        }\n        else\n        {\n            mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle button_style_toolbar1::\n    get_min_size (\n        const ustring& name,\n        const font& mfont \n    ) const \n    {\n\n        unsigned long width; \n        unsigned long height;\n        mfont.compute_size(name,width,height);\n        name_width = width;\n\n        return rectangle(width+2*padding, height+2*padding);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void button_style_toolbar_icon1::draw_button (\n        const canvas& c,\n        const rectangle& rect,\n        const bool enabled,\n        const font& ,\n        const long lastx,\n        const long lasty,\n        const ustring& ,\n        const bool is_depressed\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n\n        const long radius = padding;\n\n        if (enabled)\n        {\n            if (rect.contains(lastx,lasty))\n            {\n                if (is_depressed)\n                {\n                    fill_gradient_rounded(c,rect,radius,rgb_alpha_pixel(100,100,200,150), \n                                                        rgb_alpha_pixel(50,50,100,100));\n                    draw_rounded_rectangle(c,rect,radius, rgb_alpha_pixel(150,150,30,200));\n                }\n                else\n                {\n                    fill_gradient_rounded(c,rect,radius,rgb_alpha_pixel(150,150,250,130), \n                                                        rgb_alpha_pixel(100,100,150,90));\n                    draw_rounded_rectangle(c,rect,radius, rgb_alpha_pixel(150,150,30,200));\n                }\n            }\n\n            if (is_depressed)\n            {\n                rectangle img_rect(translate_rect(centered_rect(rect,img_mouseover.nc(),img_mouseover.nr()),1,1));\n                point p(img_rect.left(),img_rect.top());\n                draw_image(c,p,img_mouseover);\n            }\n            else\n            {\n                rectangle img_rect(centered_rect(rect,img_normal.nc(),img_normal.nr()));\n                point p(img_rect.left(),img_rect.top());\n                if (rect.contains(lastx,lasty))\n                    draw_image(c,p,img_mouseover);\n                else\n                    draw_image(c,p,img_normal);\n            }\n\n        }\n        else\n        {\n            rectangle img_rect(centered_rect(rect,img_normal.nc(),img_normal.nr()));\n            point p(img_rect.left(),img_rect.top());\n            draw_image(c,p,img_disabled);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle button_style_toolbar_icon1::\n    get_min_size (\n        const ustring& ,\n        const font&  \n    ) const \n    {\n        return rectangle(img_normal.nc()+2*padding, img_normal.nr()+2*padding);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void button_style_arrow::\n    draw_button (\n        const canvas& c,\n        const rectangle& rect,\n        const bool enabled,\n        const font& ,\n        const long ,\n        const long ,\n        const ustring& ,\n        const bool is_depressed\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n\n        fill_rect(c,rect,rgb_pixel(212,208,200));\n\n        const long height = rect.height();\n        const long width = rect.width();\n\n        const long smallest = (width < height) ? width : height; \n\n        const long rows = (smallest+3)/4;\n        const long start = rows + rows/2-1;\n        long dep;\n\n        long tip_x = 0;\n        long tip_y = 0;\n        long wy = 0;\n        long hy = 0;\n        long wx = 0; \n        long hx = 0;\n\n        if (is_depressed)\n        {\n            dep = 0;\n\n            // draw the button's border\n            draw_button_down(c,rect); \n        }\n        else\n        {\n            dep = -1;\n\n            // draw the button's border\n            draw_button_up(c,rect);\n        }\n\n\n        switch (dir)\n        {\n            case UP:\n                tip_x = width/2 + rect.left() + dep;\n                tip_y = (height - start)/2 + rect.top() + dep + 1;\n                wy = 0;\n                hy = 1;\n                wx = 1;\n                hx = 0;\n                break;\n\n            case DOWN:\n                tip_x = width/2 + rect.left() + dep;\n                tip_y = rect.bottom() - (height - start)/2 + dep;\n                wy = 0;\n                hy = -1;\n                wx = 1;\n                hx = 0;\n                break;\n\n            case LEFT:\n                tip_x = rect.left() + (width - start)/2 + dep + 1;\n                tip_y = height/2 + rect.top() + dep;\n                wy = 1;\n                hy = 0;\n                wx = 0;\n                hx = 1;\n                break;\n\n            case RIGHT:\n                tip_x = rect.right() - (width - start)/2 + dep;\n                tip_y = height/2 + rect.top() + dep;\n                wy = 1;\n                hy = 0;\n                wx = 0;\n                hx = -1;\n                break;\n        }\n\n\n        rgb_pixel color;\n        if (enabled)\n        {\n            color.red = 0;\n            color.green = 0;\n            color.blue = 0;\n        }\n        else\n        {\n            color.red = 128;\n            color.green = 128;\n            color.blue = 128;\n        }\n\n\n\n        for (long i = 0; i < rows; ++i)\n        {\n            draw_line(c,point(tip_x + wx*i + hx*i, tip_y + wy*i + hy*i), \n                      point(tip_x + wx*i*-1 + hx*i, tip_y + wy*i*-1 + hy*i), \n                      color);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // toggle button style stuff \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button_style_default::draw_toggle_button (\n        const canvas& c,\n        const rectangle& rect,\n        const bool enabled,\n        const font& mfont,\n        const long ,\n        const long ,\n        const ustring& name,\n        const bool is_depressed,\n        const bool is_checked\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n\n        fill_rect(c,rect,rgb_pixel(212,208,200));\n\n        unsigned char red, green, blue;\n        if (enabled)\n        {\n            red = 0;\n            green = 0;\n            blue = 0;\n        }\n        else\n        {\n            red = 128;\n            green = 128;\n            blue = 128;\n        }\n\n        // compute the name length if it hasn't already been computed\n        if (name_width == 0)\n        {\n            unsigned long height;\n            mfont.compute_size(name,name_width,height);\n        }\n\n        // figure out where the name string should appear\n        rectangle name_rect;\n        const unsigned long width = name_width;\n        const unsigned long height = mfont.height();\n        name_rect.set_left((rect.right() + rect.left() - width)/2);\n        name_rect.set_top((rect.bottom() + rect.top() - height)/2 + 1);\n        name_rect.set_right(name_rect.left()+width-1);\n        name_rect.set_bottom(name_rect.top()+height);\n\n        long d = 0;\n        if (is_checked)\n            d = 1;\n\n        if (is_depressed)\n            d = 2;\n\n        name_rect.set_left(name_rect.left()+d);\n        name_rect.set_right(name_rect.right()+d);\n        name_rect.set_top(name_rect.top()+d);\n        name_rect.set_bottom(name_rect.bottom()+d);\n\n        mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));\n\n        // now draw the edge of the button\n        if (is_checked || is_depressed)\n            draw_button_down(c,rect);\n        else\n            draw_button_up(c,rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle toggle_button_style_default::\n    get_min_size (\n        const ustring& name,\n        const font& mfont \n    ) const \n    {\n\n        unsigned long width; \n        unsigned long height;\n        mfont.compute_size(name,width,height);\n        name_width = width;\n\n        return rectangle(width+2*padding, height+2*padding);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button_style_check_box::draw_toggle_button (\n        const canvas& c,\n        const rectangle& rect,\n        const bool enabled,\n        const font& mfont,\n        const long ,\n        const long ,\n        const ustring& name,\n        const bool is_depressed,\n        const bool is_checked\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n\n\n        rgb_pixel color;\n        if (enabled)\n        {\n            color.red = 0;\n            color.green = 0;\n            color.blue = 0;\n        }\n        else\n        {\n            color.red = 128;\n            color.green = 128;\n            color.blue = 128;\n        }\n\n\n        // figure out where the name string should appear\n        rectangle name_rect, box_rect;\n        unsigned long padding = 0;\n        if (mfont.height() < 13)\n            padding = (rect.height() - mfont.height())/2;\n\n        name_rect = rect;\n        name_rect.set_left(rect.left() + 17-1);\n        name_rect.set_top(rect.top() + padding);\n        name_rect.set_bottom(rect.bottom() - padding);\n            \n        box_rect = rect;\n        box_rect.set_right(rect.left() + 12);\n        box_rect.set_bottom(rect.top() + 12);\n\n        mfont.draw_string(c,name_rect,name,color);\n\n        if (enabled && is_depressed == false)\n            fill_rect(c, box_rect,rgb_pixel(255,255,255));\n        else\n            fill_rect(c, box_rect,rgb_pixel(212,208,200));\n\n        draw_sunken_rectangle(c, box_rect);\n\n\n        if (is_checked)\n        {\n            const long x = box_rect.left();\n            const long y = box_rect.top();\n            draw_line(c,point(3+x,5+y),point(6+x,8+y),color);\n            draw_line(c,point(3+x,6+y),point(5+x,8+y),color);\n            draw_line(c,point(3+x,7+y),point(5+x,9+y),color);\n            draw_line(c,point(6+x,6+y),point(9+x,3+y),color);\n            draw_line(c,point(6+x,7+y),point(9+x,4+y),color);\n            draw_line(c,point(6+x,8+y),point(9+x,5+y),color);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle toggle_button_style_check_box::\n    get_min_size (\n        const ustring& name,\n        const font& mfont \n    ) const \n    {\n        unsigned long width;\n        unsigned long height;\n        mfont.compute_size(name,width,height);\n\n        if (height < 13)\n            height = 13;\n\n        return rectangle(width + 17 -1, height -1);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button_style_radio_button::draw_toggle_button (\n        const canvas& c,\n        const rectangle& rect,\n        const bool enabled,\n        const font& mfont,\n        const long ,\n        const long ,\n        const ustring& name,\n        const bool is_depressed,\n        const bool is_checked\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n        \n\n        rgb_pixel color;\n\n        // figure out where the name string should appear\n        rectangle name_rect, box_rect;\n        unsigned long padding = 0;\n        if (mfont.height() < 13)\n            padding = (rect.height() - mfont.height())/2;\n\n        name_rect = rect;\n        name_rect.set_left(rect.left() + 17-1);\n        name_rect.set_top(rect.top() + padding);\n        name_rect.set_bottom(rect.bottom() - padding);\n            \n        box_rect = rect;\n        box_rect.set_right(rect.left() + 12);\n        box_rect.set_bottom(rect.top() + 12);\n\n        \n        const long x = box_rect.left();\n        const long y = box_rect.top();\n\n        if (enabled && is_depressed == false)\n            draw_solid_circle(c,point(rect.left()+5,rect.top()+5),4.5,rgb_pixel(255,255,255));\n        else\n            draw_solid_circle(c,point(rect.left()+5,rect.top()+5),4.5,rgb_pixel(212,208,200));\n\n\n        color = rgb_pixel(128,128,128);\n        draw_line(c,point(0+x,4+y),point(0+x,7+y),color);\n        draw_line(c,point(1+x,2+y),point(1+x,9+y),color);\n        draw_line(c,point(2+x,1+y),point(9+x,1+y),color);\n        draw_line(c,point(4+x,0+y),point(7+x,0+y),color);\n\n        color = rgb_pixel(255,255,255);\n        draw_line(c,point(4+x,11+y),point(7+x,11+y),color);\n        draw_line(c,point(2+x,10+y),point(9+x,10+y),color);\n        draw_line(c,point(10+x,2+y),point(10+x,9+y),color);\n        draw_line(c,point(11+x,4+y),point(11+x,7+y),color);\n\n        color = rgb_pixel(64,64,64);\n        draw_line(c,point(1+x,4+y),point(1+x,7+y),color);\n        draw_line(c,point(4+x,1+y),point(7+x,1+y),color);\n        draw_pixel(c,point(2+x,3+y),color);\n        draw_pixel(c,point(3+x,2+y),color);\n        draw_pixel(c,point(2+x,2+y),color);\n        draw_pixel(c,point(2+x,8+y),color);\n        draw_pixel(c,point(8+x,2+y),color);\n        draw_pixel(c,point(9+x,2+y),color);\n\n        color = rgb_pixel(212,208,200);\n        draw_line(c,point(4+x,10+y),point(7+x,10+y),color);\n        draw_line(c,point(10+x,4+y),point(10+x,7+y),color);\n        draw_pixel(c,point(3+x,9+y),color);\n        draw_pixel(c,point(9+x,3+y),color);\n\n        if (enabled)\n        {\n            color.red = 0;\n            color.green = 0;\n            color.blue = 0;\n        }\n        else\n        {\n            color.red = 128;\n            color.green = 128;\n            color.blue = 128;\n        }\n\n        mfont.draw_string(c,name_rect,name,color);\n\n        if (is_checked)\n        {\n            draw_line(c,point(5+x,4+y),point(6+x,4+y),color);\n            draw_line(c,point(4+x,5+y),point(7+x,5+y),color);\n            draw_line(c,point(4+x,6+y),point(7+x,6+y),color);\n            draw_line(c,point(5+x,7+y),point(6+x,7+y),color);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle toggle_button_style_radio_button::\n    get_min_size (\n        const ustring& name,\n        const font& mfont \n    ) const \n    {\n        unsigned long width;\n        unsigned long height;\n        mfont.compute_size(name,width,height);\n\n        if (height < 13)\n            height = 13;\n\n        return rectangle(width + 17 -1, height -1);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // scroll bar style stuff \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    long scroll_bar_style_default::\n    get_slider_length (\n        long total_length,\n        long max_pos\n    ) const\n    {\n        // if the length is too small then we have to smash up the arrow buttons\n        // and hide the slider.\n        if (total_length <= get_width()*2)\n        {\n            return 0;\n        }\n        else\n        {\n            double range = total_length - get_button_length(total_length, max_pos)*2;\n\n            double scale_factor = 30.0/(max_pos + 30.0);\n\n            if (scale_factor < 0.1)\n                scale_factor = 0.1;\n\n\n            double fraction = range/(max_pos + range)*scale_factor;\n            double result = fraction * range;\n            long res = static_cast<long>(result);\n            if (res < 8)\n                res = 8;\n            return res;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long scroll_bar_style_default::\n    get_button_length (\n        long total_length,\n        long \n    ) const\n    {\n        // if the length is too small then we have to smash up the arrow buttons\n        // and hide the slider.\n        if (total_length <= get_width()*2)\n        {\n            return total_length/2;\n        }\n        else\n        {\n            return get_width();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar_style_default::\n    draw_scroll_bar_background (\n        const canvas& c,\n        const rectangle& rect,\n        const bool ,\n        const long ,\n        const long ,\n        const bool is_depressed\n    ) const\n    {\n        if (is_depressed)\n            draw_checkered(c, rect,rgb_pixel(0,0,0),rgb_pixel(43,47,55));\n        else\n            draw_checkered(c, rect,rgb_pixel(255,255,255),rgb_pixel(212,208,200));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void scroll_bar_style_default::\n    draw_scroll_bar_slider (\n        const canvas& c,\n        const rectangle& rect,\n        const bool ,\n        const long ,\n        const long ,\n        const bool \n    ) const\n    {\n        fill_rect(c, rect, rgb_pixel(212,208,200));\n        draw_button_up(c, rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // text_field styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    unsigned long text_field_style_default::\n    get_padding (\n        const font& mfont \n    ) const  \n    { \n        return mfont.height()-mfont.ascender();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field_style_default::\n    draw_text_field (\n        const canvas& c,\n        const rectangle& rect,\n        const rectangle& text_rect,\n        const bool enabled,\n        const font& mfont,\n        const ustring& text,\n        const unsigned long cursor_x,\n        const unsigned long text_pos,\n        const rgb_pixel& text_color,\n        const rgb_pixel& bg_color,\n        const bool has_focus,\n        const bool cursor_visible,\n        const long highlight_start,\n        const long highlight_end\n    ) const \n    {\n        rectangle area = rect.intersect(c);\n\n        if (enabled)\n        {\n            // first fill our area with the bg_color\n            fill_rect(c, area,bg_color);\n        }\n        else\n        {\n            // first fill our area with gray \n            fill_rect(c, area,rgb_pixel(212,208,200));\n        }\n\n\n        if (enabled)\n            mfont.draw_string(c,text_rect,text,text_color,text_pos);\n        else\n            mfont.draw_string(c,text_rect,text,rgb_pixel(128,128,128),text_pos);\n\n        // now draw the edge of the text_field\n        draw_sunken_rectangle(c, rect);\n\n        if (highlight_start <= highlight_end && enabled)\n        {\n            rectangle highlight_rect = text_rect;\n            unsigned long left_pad = 0, right_pad = mfont.left_overflow();\n\n            long i;\n            for (i = text_pos; i <= highlight_end; ++i)\n            {\n                if (i == highlight_start)\n                    left_pad = right_pad;\n\n                right_pad += mfont[text[i]].width();\n            }\n\n            highlight_rect.set_left(text_rect.left()+left_pad);\n            highlight_rect.set_right(text_rect.left()+right_pad);\n\n            // highlight the highlight_rect area\n            highlight_rect = highlight_rect.intersect(c);\n            for (long row = highlight_rect.top(); row <= highlight_rect.bottom(); ++row)\n            {\n                for (long col = highlight_rect.left(); col <= highlight_rect.right(); ++col)\n                {\n                    canvas::pixel& pixel = c[row-c.top()][col-c.left()];\n                    if (pixel.red == 255 && pixel.green == 255 && pixel.blue == 255)\n                    {\n                        // this is a background (and white) pixel so set it to a dark \n                        // blueish color.\n                        pixel.red = 10;\n                        pixel.green = 36;\n                        pixel.blue = 106;\n                    }\n                    else\n                    {\n                        // this should be a pixel that is part of a letter so set it to white\n                        pixel.red = 255;\n                        pixel.green = 255;\n                        pixel.blue = 255;\n                    }\n                }\n            }\n        }\n\n        // now draw the cursor if we need to\n        if (cursor_visible && has_focus && enabled)\n        {\n            const unsigned long top = rect.top()+3;\n            const unsigned long bottom = rect.bottom()-3;\n            draw_line(c, point(rect.left()+cursor_x,top),point(rect.left()+cursor_x,bottom));\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // text_box styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void text_box_style_default::\n    draw_text_box (\n        const canvas& c,\n        const rectangle& display_rect,\n        const rectangle& text_rect,\n        const bool enabled,\n        const font& mfont,\n        const ustring& text,\n        const rectangle& cursor_rect,\n        const rgb_pixel& text_color,\n        const rgb_pixel& bg_color,\n        const bool has_focus,\n        const bool cursor_visible,\n        const long highlight_start,\n        const long highlight_end\n    ) const \n    {\n        rectangle area = display_rect.intersect(c);\n\n        if (enabled)\n        {\n            // first fill our area with the bg_color\n            fill_rect(c, area,bg_color);\n        }\n        else\n        {\n            // first fill our area with gray \n            fill_rect(c, area,rgb_pixel(212,208,200));\n        }\n\n\n        if (enabled)\n            mfont.draw_string(c,text_rect,text,text_color, 0, ustring::npos, area);\n        else\n            mfont.draw_string(c,text_rect,text,rgb_pixel(128,128,128), 0, ustring::npos, area);\n\n\n        // now draw the highlight if there is any\n        if (highlight_start <= highlight_end && enabled)\n        {\n            const rectangle first_pos = mfont.compute_cursor_rect(text_rect, text, highlight_start);\n            const rectangle last_pos = mfont.compute_cursor_rect(text_rect, text, highlight_end+1);\n\n            const rgb_alpha_pixel color(10, 30, 106, 90);\n\n            // if the highlighted text is all on one line\n            if (first_pos.top() == last_pos.top())\n            {\n                fill_rect(c, (first_pos + last_pos).intersect(display_rect), color);\n            }\n            else\n            {\n                const rectangle min_boundary(display_rect.left()+4, display_rect.top()+4,\n                                             display_rect.right()-4, display_rect.bottom()-4);\n                const rectangle boundary( display_rect.intersect(text_rect) + min_boundary);\n\n                rectangle first_row, last_row, middle_rows;\n                first_row += first_pos;\n                first_row += point(boundary.right(), first_pos.top());\n                last_row += last_pos;\n                last_row += point(boundary.left(), last_pos.bottom());\n\n                middle_rows.left() = boundary.left();\n                middle_rows.right() = boundary.right();\n                middle_rows.top() = first_row.bottom()+1;\n                middle_rows.bottom() = last_row.top()-1;\n\n                fill_rect(c, first_row.intersect(display_rect), color);\n                fill_rect(c, middle_rows, color);\n                fill_rect(c, last_row.intersect(display_rect), color);\n            }\n        }\n\n        // now draw the cursor if we need to\n        if (cursor_visible && has_focus && enabled)\n        {\n            draw_line(c, point(cursor_rect.left(), cursor_rect.top()),point(cursor_rect.left(), cursor_rect.bottom()), 0, area);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_WIDGETs_STYLE_CPP_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/style.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net), and Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_WIDGETs_STYLE_\n#define DLIB_WIDGETs_STYLE_\n\n#include \"../algs.h\"\n#include \"style_abstract.h\"\n#include \"../gui_core.h\"\n#include \"canvas_drawing.h\"\n#include <string>\n#include <sstream>\n#include \"../unicode.h\"\n#include \"../array2d.h\"\n#include \"../pixel.h\"\n#include \"fonts.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // button styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class button_style\n    {\n    public:\n\n        button_style()\n        {\n        }\n\n        virtual ~button_style() \n        {}\n\n        virtual bool redraw_on_mouse_over (\n        ) const { return false; }\n\n        virtual rectangle get_invalidation_rect (\n            const rectangle& rect\n        ) const { return rect; }\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const = 0;\n\n        virtual void draw_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed\n        ) const = 0;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class button_style_default : public button_style\n    {\n    public:\n        button_style_default () : padding(4), name_width(0) {}\n\n        virtual void draw_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed\n        ) const;\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const;\n\n    private:\n\n        // this is the minimum amount of padding that can separate the name from the\n        // edge of the button\n        const unsigned long padding;\n        // this is the width of the name string\n        mutable unsigned long name_width;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class button_style_toolbar1 : public button_style\n    {\n    public:\n        button_style_toolbar1 () : padding(4), name_width(0) {}\n\n        virtual void draw_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed\n        ) const;\n\n        virtual rectangle get_invalidation_rect (\n            const rectangle& rect\n        ) const \n        { \n            rectangle temp(rect);\n            temp.left() -= 2;\n            temp.top() -= 2;\n            temp.right() += 2;\n            temp.bottom() += 2;\n            return temp; \n        }\n\n        virtual bool redraw_on_mouse_over (\n        ) const { return true; }\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const;\n\n    private:\n\n        // this is the minimum amount of padding that can separate the name from the\n        // edge of the button\n        const unsigned long padding;\n        // this is the width of the name string\n        mutable unsigned long name_width;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class button_style_toolbar_icon1 : public button_style\n    {\n    public:\n        template <typename image_type>\n        button_style_toolbar_icon1 (const image_type& img_, unsigned long pad = 6) : padding(pad) \n        { \n            assign_image(img_mouseover,img_); \n            make_images();  \n        }\n\n        button_style_toolbar_icon1( const button_style_toolbar_icon1& item): button_style(item), padding(item.padding) \n        {\n            assign_image(img_mouseover, item.img_mouseover);\n            assign_image(img_normal, item.img_normal);\n            assign_image(img_disabled, item.img_disabled);\n        }\n\n        virtual void draw_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed\n        ) const;\n\n        virtual bool redraw_on_mouse_over (\n        ) const { return true; }\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const;\n\n    private:\n\n        void make_images (\n        )\n        {\n            // make the disabled image grayscale and make both non-mouseover images have weaker alpha channels\n            img_disabled.set_size(img_mouseover.nr(), img_mouseover.nc());\n            img_normal.set_size(img_mouseover.nr(), img_mouseover.nc());\n\n            for (long r = 0; r < img_mouseover.nr(); ++r)\n            {\n                for (long c = 0; c < img_mouseover.nc(); ++c)\n                {\n                    rgb_alpha_pixel p = img_mouseover[r][c];\n                    long avg = p.red;\n                    avg += p.green;\n                    avg += p.blue;\n                    avg /= 3;\n\n                    if (p.alpha > 40)\n                        p.alpha -= 40;\n                    else\n                        p.alpha = 0;\n\n                    img_normal[r][c] = p;\n\n                    if (p.alpha > 80)\n                        p.alpha -= 80;\n                    else\n                        p.alpha = 0;\n\n                    p.red = avg;\n                    p.green = avg;\n                    p.blue = avg;\n                    img_disabled[r][c] = p;\n                }\n            }\n        }\n\n        array2d<rgb_alpha_pixel> img_mouseover;\n        array2d<rgb_alpha_pixel> img_normal;\n        array2d<rgb_alpha_pixel> img_disabled;\n\n        // this is the minimum amount of padding that can separate the name from the\n        // edge of the button\n        const unsigned long padding;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class button_style_arrow : public button_style\n    {\n\n    public:\n\n        enum arrow_direction \n        {\n            UP,\n            DOWN,\n            LEFT,\n            RIGHT\n        };\n\n        button_style_arrow (\n            arrow_direction dir_\n        ) : dir(dir_) {}\n\n        virtual void draw_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed\n        ) const;\n\n        virtual rectangle get_min_size (\n            const ustring& ,\n            const font&  \n        ) const { return rectangle(); }\n\n    private:\n        arrow_direction dir;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // toggle button styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button_style\n    {\n    public:\n\n        toggle_button_style()\n        {\n        }\n\n        virtual ~toggle_button_style() \n        {}\n\n        virtual bool redraw_on_mouse_over (\n        ) const { return false; }\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const = 0;\n\n        virtual void draw_toggle_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed,\n            const bool is_checked\n        ) const = 0;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button_style_default : public toggle_button_style\n    {\n    public:\n        toggle_button_style_default () : padding(4), name_width(0) {}\n\n        virtual void draw_toggle_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed,\n            const bool is_checked\n        ) const;\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const;\n\n    private:\n\n        // this is the minimum amount of padding that can separate the name from the\n        // edge of the button\n        const unsigned long padding;\n        // this is the width of the name string\n        mutable unsigned long name_width;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button_style_check_box : public toggle_button_style\n    {\n    public:\n        virtual void draw_toggle_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed,\n            const bool is_checked\n        ) const;\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button_style_radio_button : public toggle_button_style\n    {\n    public:\n        virtual void draw_toggle_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed,\n            const bool is_checked\n        ) const;\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // scroll_bar styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class scroll_bar_style\n    {\n    public:\n\n        virtual ~scroll_bar_style() {}\n\n        virtual bool redraw_on_mouse_over_slider (\n        ) const { return false; }\n\n        virtual long get_width (\n        ) const = 0;\n\n        virtual long get_slider_length (\n            long total_length,\n            long max_pos\n        ) const = 0;\n\n        virtual long get_button_length (\n            long total_length,\n            long max_pos\n        ) const = 0;\n\n        virtual void draw_scroll_bar_background (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const long lastx,\n            const long lasty,\n            const bool is_depressed\n        ) const = 0;\n\n        virtual void draw_scroll_bar_slider (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const long lastx,\n            const long lasty,\n            const bool is_being_dragged\n        ) const = 0;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class scroll_bar_style_default : public scroll_bar_style\n    {\n    public:\n        button_style_arrow get_up_button_style (\n        ) const { return button_style_arrow(button_style_arrow::UP); }\n\n        button_style_arrow get_down_button_style (\n        ) const { return button_style_arrow(button_style_arrow::DOWN); }\n\n        button_style_arrow get_left_button_style (\n        ) const { return button_style_arrow(button_style_arrow::LEFT); }\n\n        button_style_arrow get_right_button_style (\n        ) const { return button_style_arrow(button_style_arrow::RIGHT); }\n\n        virtual long get_width (\n        ) const  { return 16; }\n\n        virtual long get_slider_length (\n            long total_length,\n            long max_pos\n        ) const;\n\n        virtual long get_button_length (\n            long total_length,\n            long max_pos\n        ) const;\n\n        virtual void draw_scroll_bar_background (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const long lastx,\n            const long lasty,\n            const bool is_depressed\n        ) const;\n\n        virtual void draw_scroll_bar_slider (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const long lastx,\n            const long lasty,\n            const bool is_being_dragged\n        ) const;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // scrollable_region styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class scrollable_region_style\n    {\n    public:\n\n        virtual ~scrollable_region_style() {}\n\n        virtual long get_border_size (\n        ) const = 0;\n\n        virtual void draw_scrollable_region_border (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled\n        ) const = 0;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class scrollable_region_style_default : public scrollable_region_style\n    {\n    public:\n        scroll_bar_style_default get_horizontal_scroll_bar_style (\n        ) const { return scroll_bar_style_default(); }\n\n        scroll_bar_style_default get_vertical_scroll_bar_style (\n        ) const { return scroll_bar_style_default(); }\n\n        virtual long get_border_size (\n        ) const { return 2; }\n\n        virtual void draw_scrollable_region_border (\n            const canvas& c,\n            const rectangle& rect,\n            const bool \n        ) const  { draw_sunken_rectangle(c,rect); }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // list_box styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class list_box_style\n    {\n    public:\n\n        virtual ~list_box_style() {}\n\n        virtual void draw_list_box_background (\n            const canvas& c,\n            const rectangle& display_rect,\n            const bool enabled\n        ) const = 0;\n\n        virtual void draw_list_box_item (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const std::string& text,\n            const bool is_selected\n        ) const = 0;\n\n        virtual void draw_list_box_item (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const std::wstring& text,\n            const bool is_selected\n        ) const = 0;\n\n        virtual void draw_list_box_item (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const ustring& text,\n            const bool is_selected\n        ) const = 0;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class list_box_style_default : public list_box_style\n    {\n    public:\n        scrollable_region_style_default get_scrollable_region_style (\n        ) const { return scrollable_region_style_default(); }\n\n        virtual void draw_list_box_item (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const std::string& text,\n            const bool is_selected\n        ) const { draw_list_box_item_template(c,rect,display_rect, enabled, mfont, text, is_selected); }\n\n        virtual void draw_list_box_item (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const std::wstring& text,\n            const bool is_selected\n        ) const { draw_list_box_item_template(c,rect,display_rect, enabled, mfont, text, is_selected); }\n\n        virtual void draw_list_box_item (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const ustring& text,\n            const bool is_selected\n        ) const { draw_list_box_item_template(c,rect,display_rect, enabled, mfont, text, is_selected); }\n\n        template <typename string_type>\n        void draw_list_box_item_template (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const string_type& text,\n            const bool is_selected\n        ) const\n        {\n            if (is_selected)\n            {\n                if (enabled)\n                    fill_rect_with_vertical_gradient(c,rect,rgb_pixel(110,160,255),  rgb_pixel(100,130,250),display_rect);\n                else\n                    fill_rect_with_vertical_gradient(c,rect,rgb_pixel(140,190,255),  rgb_pixel(130,160,250),display_rect);\n            }\n\n            if (enabled)\n                mfont.draw_string(c,rect,text,rgb_pixel(0,0,0),0,std::string::npos,display_rect);\n            else\n                mfont.draw_string(c,rect,text,rgb_pixel(128,128,128),0,std::string::npos,display_rect);\n        }\n\n        virtual void draw_list_box_background (\n            const canvas& c,\n            const rectangle& display_rect,\n            const bool enabled\n        ) const\n        {\n            if (enabled)\n            {\n                // first fill our area with white\n                fill_rect(c, display_rect,rgb_pixel(255,255,255));\n            }\n            else\n            {\n                // first fill our area with gray \n                fill_rect(c, display_rect,rgb_pixel(212,208,200));\n            }\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // text_box styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class text_box_style\n    {\n    public:\n\n        text_box_style()\n        {\n        }\n\n        virtual ~text_box_style() \n        {}\n\n        virtual unsigned long get_padding (\n            const font& mfont \n        ) const = 0;\n\n        virtual void draw_text_box (\n            const canvas& c,\n            const rectangle& display_rect,\n            const rectangle& text_rect,\n            const bool enabled,\n            const font& mfont,\n            const ustring& text,\n            const rectangle& cursor_rect,\n            const rgb_pixel& text_color,\n            const rgb_pixel& bg_color,\n            const bool has_focus,\n            const bool cursor_visible,\n            const long highlight_start,\n            const long highlight_end\n        ) const = 0;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class text_box_style_default : public text_box_style\n    {\n    public:\n\n        text_box_style_default()\n        {\n        }\n\n        scrollable_region_style_default get_scrollable_region_style (\n        ) const { return scrollable_region_style_default(); }\n\n        virtual ~text_box_style_default() \n        {}\n\n        virtual unsigned long get_padding (\n            const font&  \n        ) const { return 1; }\n\n        virtual void draw_text_box (\n            const canvas& c,\n            const rectangle& display_rect,\n            const rectangle& text_rect,\n            const bool enabled,\n            const font& mfont,\n            const ustring& text,\n            const rectangle& cursor_rect,\n            const rgb_pixel& text_color,\n            const rgb_pixel& bg_color,\n            const bool has_focus,\n            const bool cursor_visible,\n            const long highlight_start,\n            const long highlight_end\n        ) const;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // text_field styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class text_field_style\n    {\n    public:\n\n        text_field_style()\n        {\n        }\n\n        virtual ~text_field_style() \n        {}\n\n        virtual unsigned long get_padding (\n            const font& mfont \n        ) const = 0;\n\n        virtual void draw_text_field (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& text_rect,\n            const bool enabled,\n            const font& mfont,\n            const ustring& text,\n            const unsigned long cursor_x,\n            const unsigned long text_pos,\n            const rgb_pixel& text_color,\n            const rgb_pixel& bg_color,\n            const bool has_focus,\n            const bool cursor_visible,\n            const long highlight_start,\n            const long highlight_end\n        ) const = 0;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class text_field_style_default : public text_field_style\n    {\n    public:\n\n        text_field_style_default()\n        {\n        }\n\n        virtual ~text_field_style_default() \n        {}\n\n        virtual unsigned long get_padding (\n            const font& mfont \n        ) const;\n\n        virtual void draw_text_field (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& text_rect,\n            const bool enabled,\n            const font& mfont,\n            const ustring& text,\n            const unsigned long cursor_x,\n            const unsigned long text_pos,\n            const rgb_pixel& text_color,\n            const rgb_pixel& bg_color,\n            const bool has_focus,\n            const bool cursor_visible,\n            const long highlight_start,\n            const long highlight_end\n        ) const;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"style.cpp\"\n#endif\n\n#endif // DLIB_WIDGETs_STYLE_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/style_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net), and Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_WIDGETs_STYLE_ABSTRACT_\n#ifdef DLIB_WIDGETs_STYLE_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"../gui_core.h\"\n#include \"widgets_abstract.h\"\n#include \"../unicode/unicode_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // button styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class button_style\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an abstract class that defines the interface a\n                button style object must implement.\n\n                Note that derived classes must be copyable via\n                their copy constructors.\n        !*/\n\n    public:\n\n        virtual ~button_style() {}\n\n        virtual bool redraw_on_mouse_over (\n        ) const { return false; }\n        /*!\n            ensures\n                - if (this style draws buttons differently when a mouse is over them) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        virtual rectangle get_invalidation_rect (\n            const rectangle& rect\n        ) const { return rect; }\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - rect == the get_rect() that defines where the button is\n            ensures\n                - returns a rectangle that should be invalidated whenever a button\n                  needs to redraw itself.  (e.g. If you wanted your button style to\n                  draw outside the button then you could return a larger rectangle)\n        !*/\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            ensures\n                - returns a rectangle that represents the minimum size of the button\n                  given the name and font.\n        !*/\n\n        virtual void draw_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - c == the canvas to draw on\n                - rect, enabled, mfont, lastx, and lasty are the variables\n                  defined in the protected section of the drawable class.\n                - name == the name of the button to be drawn\n                - is_depressed == true if the button is to be drawn in a depressed state\n            ensures\n                - draws the button on the canvas c at the location given by rect.  \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class button_style_default : public button_style\n    {\n        /*!\n            This is the default style for button objects.  It will cause\n            a button to appear as the simple MS Windows 2000 button style.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class button_style_toolbar1 : public button_style\n    {\n        /*!\n            This draws a simple toolbar style button that displays its name in the\n            middle of itself.  When the mouse moves over it it will light up.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class button_style_toolbar_icon1 : public button_style\n    {\n        /*!\n            This draws a simple toolbar style button that displays an image in the \n            middle of itself.  When the mouse moves over it it will light up.\n        !*/\n        template <typename image_type>\n        button_style_toolbar_icon1 (\n            const image_type& img, \n            unsigned long border_size = 6\n        );\n        /*!\n            requires\n                - image_type == an implementation of array2d/array2d_kernel_abstract.h\n                - pixel_traits<typename image_type::type> is defined\n            ensures\n                - displays image img in the middle of the button\n                - the distance between the edge of the button and the image\n                  will be border_size pixels\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class button_style_arrow : public button_style\n    {\n    public:\n        /*!\n            This draws a simple button with an arrow in it \n        !*/\n\n        enum arrow_direction \n        {\n            UP,\n            DOWN,\n            LEFT,\n            RIGHT\n        };\n\n        button_style_arrow (\n            arrow_direction dir\n        );\n        /*!\n            ensures\n                - the arrow in the button will point in the given direction\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // toggle button styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button_style\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an abstract class that defines the interface a\n                toggle button style object must implement.\n\n                Note that derived classes must be copyable via\n                their copy constructors.\n        !*/\n\n    public:\n\n        virtual ~toggle_button_style() {}\n\n        virtual bool redraw_on_mouse_over (\n        ) const { return false; }\n        /*!\n            ensures\n                - if (this style draws buttons differently when a mouse is over them) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        virtual rectangle get_min_size (\n            const ustring& name,\n            const font& mfont \n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            ensures\n                - returns a rectangle that represents the minimum size of the button\n                  given the name and font.\n        !*/\n\n        virtual void draw_toggle_button (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const font& mfont,\n            const long lastx,\n            const long lasty,\n            const ustring& name,\n            const bool is_depressed,\n            const bool is_checked \n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - c == the canvas to draw on\n                - rect, enabled, mfont, lastx, and lasty are the variables\n                  defined in the protected section of the drawable class.\n                - name == the name of the button to be drawn\n                - is_depressed == true if the button is to be drawn in a depressed state\n                - is_checked == true if the toggle_button is in the checked state \n            ensures\n                - draws the button on the canvas c at the location given by rect.  \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button_style_default : public toggle_button_style\n    {\n        /*!\n            This is the default style for toggle_button objects.  It will cause\n            a button to appear as the simple MS Windows 2000 button style.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button_style_check_box : public toggle_button_style\n    {\n        /*!\n            This draws a simple check box style toggle button that displays its \n            name to the right of a check box. \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button_style_radio_button : public toggle_button_style\n    {\n        /*!\n            This draws a simple radio button style toggle button that displays its \n            name to the right of a circular radio button. \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // scroll_bar styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class scroll_bar_style\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an abstract class that defines the interface a\n                scroll_bar style object must implement.\n\n                Note that derived classes must be copyable via\n                their copy constructors.\n\n                There are three parts of a scroll bar, the slider, the background,\n                and the two buttons on its ends.  The \"slider\" is the thing that you\n                drag around on the scroll bar and the \"background\" is the part\n                in between the slider and the buttons on the ends.\n        !*/\n\n    public:\n\n        virtual ~scroll_bar_style() {}\n\n        virtual bool redraw_on_mouse_over_slider (\n        ) const { return false; }\n        /*!\n            ensures\n                - if (this style draws a scroll_bar's slider differently when a mouse is over it\n                  or it is being dragged) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        virtual long get_width (\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            ensures\n                - returns the width in pixels of the scroll bar\n        !*/\n\n        virtual long get_slider_length (\n            long total_length,\n            long max_pos\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - total_length == the total length in pixels of the scroll bar\n                - max_pos == the value of scroll_bar::max_slider_pos() for this\n                  scroll bar\n            ensures\n                - returns the length in pixels of the scroll bar's slider\n        !*/\n\n        virtual long get_button_length (\n            long total_length,\n            long max_pos\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - total_length == the total length in pixels of the scroll bar\n                - max_pos == the value of scroll_bar::max_slider_pos() for this\n                  scroll bar\n            ensures\n                - returns the length in pixels of each of the scroll bar's\n                  buttons\n        !*/\n\n        virtual void draw_scroll_bar_background (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const long lastx,\n            const long lasty,\n            const bool is_depressed\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - c == the canvas to draw on\n                - rect, enabled, lastx, and lasty are the variables\n                  defined in the protected section of the drawable class.\n                - is_depressed == true if the background area of the scroll_bar is to \n                  be drawn in a depressed state (because the user is clicking on it)\n            ensures\n                - draws the background part of the scroll_bar on the canvas c at the \n                  location given by rect.  \n        !*/\n\n        virtual void draw_scroll_bar_slider (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled,\n            const long lastx,\n            const long lasty,\n            const bool is_being_dragged\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - c == the canvas to draw on\n                - rect, enabled, lastx, and lasty are the variables\n                  defined in the protected section of the drawable class\n                - is_being_dragged == true if the user is dragging the slider\n            ensures\n                - draws the slider part of the scroll_bar on the canvas c at the \n                  location given by rect.  \n        !*/\n\n        button_style_type get_up_button_style (\n        ) const;\n        /*!\n            ensures\n                - returns the type of button_style to use for a button on the\n                  top side of a vertical scroll bar.\n        !*/\n\n        button_style_type get_down_button_style (\n        ) const;\n        /*!\n            ensures\n                - returns the type of button_style to use for a button on the\n                  bottom side of a vertical scroll bar.\n        !*/\n\n        button_style_type get_left_button_style (\n        ) const;\n        /*!\n            ensures\n                - returns the type of button_style to use for a button on the\n                  left side of a horizontal scroll bar.\n        !*/\n\n        button_style_type get_right_button_style (\n        ) const;\n        /*!\n            ensures\n                - returns the type of button_style to use for a button on the\n                  right side of a horizontal scroll bar.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class scroll_bar_style_default : public scroll_bar_style\n    {\n        /*!\n            This is the default style for scroll_bar objects.  It will cause\n            a scroll_bar to appear as the simple MS Windows 2000 scroll_bar style.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // scrollable_region (and zoomable_region) styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class scrollable_region_style\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an abstract class that defines the interface a\n                scrollable_region and zoomable_region style object must implement.\n\n                Note that derived classes must be copyable via\n                their copy constructors.\n        !*/\n    public:\n\n        virtual ~scrollable_region_style() {}\n\n        virtual long get_border_size (\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            ensures\n                - returns the size of the border region in pixels \n        !*/\n\n        virtual void draw_scrollable_region_border (\n            const canvas& c,\n            const rectangle& rect,\n            const bool enabled\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - c == the canvas to draw on\n                - rect and enabled are the variables defined in the protected section \n                  of the drawable class.\n            ensures\n                - draws the border part of a scrollable_region on the canvas c at the \n                  location given by rect.  \n        !*/\n\n        scroll_bar_style_type get_horizontal_scroll_bar_style (\n        ) const;\n        /*!\n            ensures\n                - returns the style of scroll_bar to use for the \n                  horizontal scroll_bar in this widget.\n        !*/\n\n        scroll_bar_style_type get_vertical_scroll_bar_style (\n        ) const;\n        /*!\n            ensures\n                - returns the style of scroll_bar to use for the \n                  vertical scroll_bar in this widget.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class scrollable_region_style_default : public scrollable_region_style\n    {\n    public:\n        /*!\n            This is the default style for scrollable_region and zoomable_region objects.  \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // text_box styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class text_box_style\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an abstract class that defines the interface a\n                text_box style object must implement.\n\n                Note that derived classes must be copyable via\n                their copy constructors.\n        !*/\n    public:\n\n        virtual ~text_field_style() {}\n\n        scrollable_region_style_type get_scrollable_region_style (\n        ) const;\n        /*!\n            ensures\n                - returns the style of scrollable_region to use for the \n                  text_box.\n        !*/\n\n        virtual unsigned long get_padding (\n            const font& mfont \n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            ensures\n                - returns the number of pixels that separate the text in the text_box \n                  from the edge of the text_box widget itself.\n        !*/\n\n        virtual void draw_text_box (\n            const canvas& c,\n            const rectangle& display_rect,\n            const rectangle& text_rect,\n            const bool enabled,\n            const font& mfont,\n            const ustring& text,\n            const rectangle& cursor_rect,\n            const rgb_pixel& text_color,\n            const rgb_pixel& bg_color,\n            const bool has_focus,\n            const bool cursor_visible,\n            const long highlight_start,\n            const long highlight_end\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - c == the canvas to draw on\n                - enabled and mfont are the variables defined in the protected section \n                - text_rect == the rectangle in which we should draw the given text\n                  of the drawable class.\n                - display_rect == the rectangle returned by scrollable_region::display_rect()\n                - text == the current text in the text_box \n                - cursor_rect == A rectangle of width 1 that represents the current\n                  position of the cursor on the screen.\n                - text_color == the color of the text to be drawn\n                - bg_color == the background color of the text field\n                - has_focus == true if this text field has keyboard input focus\n                - cursor_visible == true if the cursor should be drawn \n                - if (highlight_start <= highlight_end) then\n                    - text[highlight_start] though text[highlight_end] should be\n                      highlighted\n            ensures\n                - draws the text_box on the canvas c at the location given by text_rect.\n                  (Note that the scroll bars and borders are drawn by the scrollable_region\n                  and therefore the style returned by get_scrollable_region_style() \n                  controls how those appear)\n                - doesn't draw anything outside display_rect\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class text_box_style_default : public text_box_style\n    {\n    public:\n        /*!\n            This is the default style for text_box objects.  \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // list_box styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class list_box_style\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an abstract class that defines the interface a\n                list_box style object must implement.\n\n                Note that derived classes must be copyable via\n                their copy constructors.\n        !*/\n    public:\n\n        virtual ~list_box_style() {}\n\n        virtual void draw_list_box_background (\n            const canvas& c,\n            const rectangle& display_rect,\n            const bool enabled\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - c == the canvas to draw on\n                - display_rect == the display_rect for the list_box.  This is the area\n                  in which list box items are drawn (see display_rect in the scrollable_region\n                  widget for more info)\n                - enabled == true if the list box is enabled\n            ensures\n                - draws the background of a list box on the canvas c at the location given \n                  by display_rect.  \n        !*/\n\n        scrollable_region_style_type get_scrollable_region_style (\n        ) const;\n        /*!\n            ensures\n                - returns the style of scrollable_region to use for the \n                  list_box.\n        !*/\n\n        virtual void draw_list_box_item (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const std::string& text,\n            const bool is_selected\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - c == the canvas to draw on\n                - rect == the rectangle that defines where on the screen this list box item is.\n                - display_rect == the display_rect for the list_box.  This is the area\n                  in which list box items are drawn (see display_rect in the scrollable_region\n                  widget for more info)\n                - mfont == the font to use to draw the list box item\n                - text == the text of the list box item to be drawn\n                - enabled == true if the list box is enabled\n                - is_selected == true if the item is to be drawn in a selected state\n            ensures\n                - draws the list box item on the canvas c at the location given by rect.  \n        !*/\n\n        // wide character overloads\n        virtual void draw_list_box_item (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const std::wstring& text,\n            const bool is_selected\n        ) const = 0;\n\n        virtual void draw_list_box_item (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& display_rect,\n            const bool enabled,\n            const font& mfont,\n            const ustring& text,\n            const bool is_selected\n        ) const = 0;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class list_box_style_default : public list_box_style\n    {\n    public:\n        /*!\n            This is the default style for list_box objects.  \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // text_field styles  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class text_field_style\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an abstract class that defines the interface a\n                text_field style object must implement.\n\n                Note that derived classes must be copyable via\n                their copy constructors.\n        !*/\n    public:\n\n        virtual ~text_field_style() {}\n\n        virtual unsigned long get_padding (\n            const font& mfont \n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n            ensures\n                - returns the number of pixels that separate the text in the text_field\n                  from the edge of the text_field widget itself.\n        !*/\n\n        virtual void draw_text_field (\n            const canvas& c,\n            const rectangle& rect,\n            const rectangle& text_rect,\n            const bool enabled,\n            const font& mfont,\n            const ustring& text,\n            const unsigned long cursor_x,\n            const unsigned long text_pos,\n            const rgb_pixel& text_color,\n            const rgb_pixel& bg_color,\n            const bool has_focus,\n            const bool cursor_visible,\n            const long highlight_start,\n            const long highlight_end\n        ) const = 0;\n        /*!\n            requires\n                - the mutex drawable::m is locked\n                - c == the canvas to draw on\n                - rect, enabled, and mfont are the variables defined in the protected section \n                  of the drawable class.\n                - text == the current text in the text_field \n                - text_rect == the rectangle in which we should draw the given text\n                - cursor_x == the x coordinate of the cursor relative to the left side \n                  of rect.  i.e. the number of pixels that separate the cursor from the\n                  left side of the text_field.\n                - text_pos == the index of the first letter in text that appears in \n                  this text field.\n                - text_color == the color of the text to be drawn\n                - bg_color == the background color of the text field\n                - has_focus == true if this text field has keyboard input focus\n                - cursor_visible == true if the cursor should be drawn \n                - if (highlight_start <= highlight_end) then\n                    - text[highlight_start] though text[highlight_end] should be\n                      highlighted\n            ensures\n                - draws the text_field on the canvas c at the location given by rect.  \n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class text_field_style_default : public text_field_style\n    {\n    public:\n        /*!\n            This is the default style for text_field objects.  \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_WIDGETs_STYLE_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/widgets.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_WIDGETs_CPP_\n#define DLIB_WIDGETs_CPP_\n\n#include \"widgets.h\"\n#include <algorithm>\n#include \"../string.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // toggle_button object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    set_size (\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        auto_mutex M(m);\n        rectangle min_rect = style->get_min_size(name_,*mfont);\n        // only change the size if it isn't going to be too small to fit the name\n        if (height >= min_rect.height() &&\n            width >= min_rect.width())\n        {\n            rectangle old(rect);\n            rect = resize_rect(rect,width,height);\n            parent.invalidate_rectangle(rect+old);\n            btn_tooltip.set_size(width,height);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    set_checked (\n    )\n    {\n        auto_mutex M(m);\n        checked = true;\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    set_unchecked (\n    )\n    {\n        auto_mutex M(m);\n        checked = false;\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool toggle_button::\n    is_checked (\n    ) const\n    {\n        auto_mutex M(m);\n        return checked;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    show (\n    )\n    {\n        button_action::show();\n        btn_tooltip.show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    hide (\n    )\n    {\n        button_action::hide();\n        btn_tooltip.hide();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    enable (\n    )\n    {\n        button_action::enable();\n        btn_tooltip.enable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    disable (\n    )\n    {\n        button_action::disable();\n        btn_tooltip.disable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    set_tooltip_text (\n        const std::string& text\n    )\n    {\n        btn_tooltip.set_text(text);\n    }\n\n    void toggle_button::\n    set_tooltip_text (\n        const std::wstring& text\n    )\n    {\n        btn_tooltip.set_text(text);\n    }\n\n    void toggle_button::\n    set_tooltip_text (\n        const dlib::ustring& text\n    )\n    {\n        btn_tooltip.set_text(text);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string toggle_button::\n    tooltip_text (\n    ) const\n    {\n        return btn_tooltip.text();\n    }\n\n    const std::wstring toggle_button::\n    tooltip_wtext (\n    ) const\n    {\n        return btn_tooltip.wtext();\n    }\n\n    const dlib::ustring toggle_button::\n    tooltip_utext (\n    ) const\n    {\n        return btn_tooltip.utext();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        mfont = f;\n        set_name(name_);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        auto_mutex M(m);\n        button_action::set_pos(x,y);\n        btn_tooltip.set_pos(x,y);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    set_name (\n        const std::string& name\n    )\n    {\n        set_name(convert_mbstring_to_wstring(name));\n    }\n\n    void toggle_button::\n    set_name (\n        const std::wstring& name\n    )\n    {\n        set_name(convert_wstring_to_utf32(name));\n    }\n\n    void toggle_button::\n    set_name (\n        const dlib::ustring& name\n    )\n    {\n        auto_mutex M(m);\n        name_ = name;\n        // do this to get rid of any reference counting that may be present in \n        // the std::string implementation.\n        name_[0] = name_[0];\n\n        rectangle old(rect);\n        rect = move_rect(style->get_min_size(name,*mfont),rect.left(),rect.top());\n        btn_tooltip.set_size(rect.width(),rect.height());\n        \n        parent.invalidate_rectangle(rect+old);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string toggle_button::\n    name (\n    ) const\n    {\n        return convert_wstring_to_mbstring(wname());\n    }\n\n    const std::wstring toggle_button::\n    wname (\n    ) const\n    {\n        return convert_utf32_to_wstring(uname());\n    }\n\n    const dlib::ustring toggle_button::\n    uname (\n    ) const\n    {\n        auto_mutex M(m);\n        dlib::ustring temp = name_;\n        // do this to get rid of any reference counting that may be present in \n        // the std::string implementation.\n        temp[0] = name_[0];\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void toggle_button::\n    on_button_up (\n        bool mouse_over\n    )\n    {\n        if (mouse_over)                \n        {\n            checked = !checked;\n            // this is a valid toggle_button click\n            if (event_handler.is_set())\n                event_handler();\n            else if (event_handler_self.is_set())\n                event_handler_self(*this);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // label object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void label::\n    draw (\n        const canvas& c\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty() || text_.size() == 0)\n            return;\n\n        using namespace std;\n        unsigned char r = text_color_.red;\n        unsigned char g = text_color_.green;\n        unsigned char b = text_color_.blue;\n        if (!enabled)\n        {\n            r = 128;\n            g = 128;\n            b = 128;\n        }\n\n        rectangle text_rect(rect);\n\n        string::size_type first, last;\n        first = 0;\n        last = text_.find_first_of('\\n');\n        mfont->draw_string(c,text_rect,text_,rgb_pixel(r,g,b),first,last);\n\n        while (last != string::npos)\n        {\n            first = last+1;\n            last = text_.find_first_of('\\n',first);\n            text_rect.set_top(text_rect.top()+mfont->height());\n            mfont->draw_string(c,text_rect,text_,rgb_pixel(r,g,b),first,last);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void label::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        mfont = f;\n        set_text(text_);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    void label::\n    set_text (\n        const std::string& text\n    )\n    {\n        set_text(convert_mbstring_to_wstring(text));\n    }\n\n    void label::\n    set_text (\n        const std::wstring& text\n    )\n    {\n        set_text(convert_wstring_to_utf32(text));\n    }\n\n    void label::\n    set_text (\n        const dlib::ustring& text\n    )\n    {\n        using namespace std;\n        auto_mutex M(m);\n        text_ = text;\n        // do this to get rid of any reference counting that may be present in \n        // the std::string implementation.\n        text_[0] = text[0];\n\n        rectangle old(rect);\n\n        unsigned long width; \n        unsigned long height;\n        mfont->compute_size(text,width,height);\n\n        rect.set_right(rect.left() + width - 1); \n        rect.set_bottom(rect.top() + height - 1);\n\n        parent.invalidate_rectangle(rect+old);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string label::\n    text (\n    ) const\n    {\n        return convert_wstring_to_mbstring(wtext());\n    }\n\n    const std::wstring label::\n    wtext (\n    ) const\n    {\n        return convert_utf32_to_wstring(utext());\n    }\n\n    const dlib::ustring label::\n    utext (\n    ) const\n    {\n        auto_mutex M(m);\n        dlib::ustring temp = text_;\n        // do this to get rid of any reference counting that may be present in \n        // the std::string implementation.\n        temp[0] = text_[0];\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void label::\n    set_text_color (\n        const rgb_pixel color\n    )\n    {\n        m.lock();\n        text_color_ = color;\n        parent.invalidate_rectangle(rect);\n        m.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const rgb_pixel label::\n    text_color (\n    ) const\n    {\n        auto_mutex M(m);\n        return text_color_;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // text_field object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    rectangle text_field::\n    get_text_rect (\n    ) const\n    {\n        // figure out where the text string should appear        \n        unsigned long vertical_pad = (rect.height() - mfont->height())/2+1;\n\n        rectangle text_rect;\n        text_rect.set_left(rect.left()+style->get_padding(*mfont));\n        text_rect.set_top(rect.top()+vertical_pad);\n        text_rect.set_right(rect.right()-style->get_padding(*mfont));\n        text_rect.set_bottom(text_rect.top()+mfont->height()-1);\n        return text_rect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    enable (\n    )\n    {\n        drawable::enable();\n        right_click_menu.enable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    give_input_focus (\n    )\n    {\n        auto_mutex M(m);\n        has_focus = true;\n        cursor_visible = true;\n        parent.invalidate_rectangle(rect);\n        t.start();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    select_all_text (\n    )\n    {\n        auto_mutex M(m);\n        on_select_all();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_cut (\n    )\n    {\n        on_copy();\n        on_delete_selected();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_copy (\n    )\n    {\n        if (highlight_start <= highlight_end)\n        {\n            put_on_clipboard(text_.substr(highlight_start, highlight_end-highlight_start+1));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_paste (\n    )\n    {\n        ustring temp_str;\n        get_from_clipboard(temp_str);\n\n        // If this is a multi line string then just take the first line.\n        ustring::size_type pos = temp_str.find_first_of('\\n');\n        if (pos != ustring::npos)\n        {\n            temp_str = temp_str.substr(0,pos);\n        }\n\n        if (highlight_start <= highlight_end)\n        {\n            text_ = text_.substr(0,highlight_start) + temp_str +\n                text_.substr(highlight_end+1,text_.size()-highlight_end-1);\n            move_cursor(highlight_start+temp_str.size());\n            highlight_start = 0;\n            highlight_end = -1;\n            parent.invalidate_rectangle(rect);\n            on_no_text_selected();\n\n            // send out the text modified event\n            if (text_modified_handler.is_set())\n                text_modified_handler();\n        }\n        else\n        {\n            text_ = text_.substr(0,cursor_pos) + temp_str +\n                text_.substr(cursor_pos,text_.size()-cursor_pos);\n            move_cursor(cursor_pos+temp_str.size());\n\n            // send out the text modified event\n            if (temp_str.size() != 0 && text_modified_handler.is_set())\n                text_modified_handler();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_select_all (\n    )\n    {\n        move_cursor(static_cast<long>(text_.size()));\n        highlight_start = 0;\n        highlight_end = static_cast<long>(text_.size()-1);\n        if (highlight_start <= highlight_end)\n            on_text_is_selected();\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_delete_selected (\n    )\n    {\n        if (highlight_start <= highlight_end)\n        {\n            text_ = text_.erase(highlight_start,highlight_end-highlight_start+1);\n            move_cursor(highlight_start);\n            highlight_start = 0;\n            highlight_end = -1;\n\n            on_no_text_selected();\n            // send out the text modified event\n            if (text_modified_handler.is_set())\n                text_modified_handler();\n\n            parent.invalidate_rectangle(rect);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_text_is_selected (\n    )\n    {\n        right_click_menu.menu().enable_menu_item(0);\n        right_click_menu.menu().enable_menu_item(1);\n        right_click_menu.menu().enable_menu_item(3);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_no_text_selected (\n    )\n    {\n        right_click_menu.menu().disable_menu_item(0);\n        right_click_menu.menu().disable_menu_item(1);\n        right_click_menu.menu().disable_menu_item(3);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    show (\n    )\n    {\n        drawable::show();\n        right_click_menu.show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    disable (\n    )\n    {\n        auto_mutex M(m);\n        drawable::disable();\n        t.stop();\n        has_focus = false;\n        cursor_visible = false;\n        right_click_menu.disable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    hide (\n    )\n    {\n        auto_mutex M(m);\n        drawable::hide();\n        t.stop();\n        has_focus = false;\n        cursor_visible = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        mfont = f;\n        // adjust the height of this text field so that it is appropriate for the current\n        // font size\n        rect.set_bottom(rect.top() + mfont->height()+ (style->get_padding(*mfont))*2);\n        set_text(text_);\n        right_click_menu.set_rect(get_text_rect());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    draw (\n        const canvas& c\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n       \n        style->draw_text_field(c,rect,get_text_rect(), enabled, *mfont, text_, cursor_x, text_pos,\n                               text_color_, bg_color_, has_focus, cursor_visible, highlight_start,\n                               highlight_end);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    set_text (\n        const std::string& text\n    )\n    {\n        set_text(convert_mbstring_to_wstring(text));\n    }\n\n    void text_field::\n    set_text (\n        const std::wstring& text\n    )\n    {\n        set_text(convert_wstring_to_utf32(text));\n    }\n\n    void text_field::\n    set_text (\n        const dlib::ustring& text\n    )\n    {\n        DLIB_ASSERT ( text.find_first_of('\\n') == std::string::npos ,\n                \"\\tvoid text_field::set_text()\"\n                << \"\\n\\ttext:  \" << narrow(text) );\n        auto_mutex M(m);\n        // do this to get rid of any reference counting that may be present in \n        // the std::string implementation.\n        text_ = text.c_str();\n                \n        move_cursor(0);\n\n        highlight_start = 0;\n        highlight_end = -1;\n        \n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string text_field::\n    text (\n    ) const\n    {\n        std::string temp = convert_wstring_to_mbstring(wtext());\n        return temp;\n    }\n\n    const std::wstring text_field::\n    wtext (\n    ) const\n    {\n        std::wstring temp = convert_utf32_to_wstring(utext());\n        return temp;\n    }\n    \n    const dlib::ustring text_field::\n    utext (\n    ) const\n    {\n        auto_mutex M(m);\n        // do this to get rid of any reference counting that may be present in \n        // the dlib::ustring implementation.\n        dlib::ustring temp = text_.c_str();\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    set_width (\n        unsigned long width\n    )\n    {        \n        auto_mutex M(m);\n        if (width < style->get_padding(*mfont)*2)\n            return;\n\n        rectangle old(rect);\n\n        rect.set_right(rect.left() + width - 1); \n\n        right_click_menu.set_rect(get_text_rect());\n        parent.invalidate_rectangle(rect+old);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        drawable::set_pos(x,y);\n        right_click_menu.set_rect(get_text_rect());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    set_background_color (\n        const rgb_pixel color\n    )\n    {\n        auto_mutex M(m);\n        bg_color_ = color;\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const rgb_pixel text_field::\n    background_color (\n    ) const\n    {\n        auto_mutex M(m);\n        return bg_color_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    set_text_color (\n        const rgb_pixel color\n    )\n    {\n        auto_mutex M(m);\n        text_color_ = color;\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const rgb_pixel text_field::\n    text_color (\n    ) const\n    {\n        auto_mutex M(m);\n        return text_color_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_mouse_move (\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        if (!enabled || hidden || !has_focus)\n        {\n            return;\n        }\n\n        if (state & base_window::LEFT)\n        {\n            if (highlight_start <= highlight_end)\n            {\n                if (highlight_start == cursor_pos)\n                    shift_pos = highlight_end + 1;\n                else\n                    shift_pos = highlight_start;\n            }\n\n            unsigned long new_pos = mfont->compute_cursor_pos(get_text_rect(),text_,x,y,text_pos);\n            if (static_cast<long>(new_pos) != cursor_pos)\n            {\n                move_cursor(new_pos);\n                parent.invalidate_rectangle(rect);\n            }\n        }\n        else if (shift_pos != -1)\n        {\n            shift_pos = -1;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_mouse_up (\n        unsigned long btn,\n        unsigned long,\n        long ,\n        long \n    )\n    {\n        if (!enabled || hidden)\n            return;\n\n        if (btn == base_window::LEFT)\n            shift_pos = -1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y,\n        bool double_clicked \n    )\n    {\n        using namespace std;\n        if (!enabled || hidden || btn != (unsigned long)base_window::LEFT)\n            return;\n\n        if (rect.contains(x,y))\n        {\n            has_focus = true;\n            cursor_visible = true;\n            parent.invalidate_rectangle(rect);\n            t.start();\n\n            if (double_clicked)\n            {\n                // highlight the double clicked word\n                string::size_type first, last;\n                const ustring ustr = convert_utf8_to_utf32(std::string(\" \\t\\n\"));\n                first = text_.substr(0,cursor_pos).find_last_of(ustr.c_str());\n                last = text_.find_first_of(ustr.c_str(),cursor_pos);\n                long f = static_cast<long>(first);\n                long l = static_cast<long>(last);\n                if (first == string::npos)\n                    f = -1;\n                if (last == string::npos)\n                    l = static_cast<long>(text_.size());\n\n                ++f;\n                --l;\n\n                move_cursor(l+1);\n                highlight_start = f;\n                highlight_end = l;\n                on_text_is_selected();\n            }\n            else\n            {\n                if (state & base_window::SHIFT)\n                {\n                    if (highlight_start <= highlight_end)\n                    {\n                        if (highlight_start == cursor_pos)\n                            shift_pos = highlight_end + 1;\n                        else\n                            shift_pos = highlight_start;\n                    }\n                    else\n                    {\n                        shift_pos = cursor_pos;\n                    }\n                }\n\n                bool at_end = false;\n                if (cursor_pos == 0 || cursor_pos == static_cast<long>(text_.size()))\n                    at_end = true;\n                const long old_pos = cursor_pos;\n\n                unsigned long new_pos = mfont->compute_cursor_pos(get_text_rect(),text_,x,y,text_pos);\n                if (static_cast<long>(new_pos) != cursor_pos)\n                {\n                    move_cursor(new_pos);\n                    parent.invalidate_rectangle(rect);\n                }\n                shift_pos = cursor_pos;\n\n                if (at_end && cursor_pos == old_pos)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n\n        }\n        else if (has_focus)\n        {\n            t.stop();\n            has_focus = false;\n            cursor_visible = false;\n            shift_pos = -1;\n            highlight_start = 0;\n            highlight_end = -1;\n            on_no_text_selected();\n\n            if (focus_lost_handler.is_set())\n                focus_lost_handler();\n            parent.invalidate_rectangle(rect);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    on_keydown (\n        unsigned long key,\n        bool is_printable,\n        unsigned long state\n    )\n    {\n        // If the right click menu is up then we don't want to do anything with\n        // the keyboard ourselves.  Let the popup menu use the keyboard for now.\n        if (right_click_menu.popup_menu_visible())\n            return;\n\n        const ustring space_str = convert_utf8_to_utf32(std::string(\" \\t\\n\"));\n        const bool shift = (state&base_window::KBD_MOD_SHIFT) != 0;\n        const bool ctrl = (state&base_window::KBD_MOD_CONTROL) != 0;\n        if (has_focus && enabled && !hidden)\n        {\n            if (shift && is_printable == false)\n            {\n                if (shift_pos == -1)\n                {\n                    if (highlight_start <= highlight_end)\n                    {\n                        if (highlight_start == cursor_pos)\n                            shift_pos = highlight_end + 1;\n                        else\n                            shift_pos = highlight_start;\n                    }\n                    else\n                    {\n                        shift_pos = cursor_pos;\n                    }\n                }\n            }\n            else\n            {\n                shift_pos = -1;\n            }\n\n            if (key == base_window::KEY_LEFT ||\n                key == base_window::KEY_UP)\n            {\n                if (cursor_pos != 0)\n                {\n                    unsigned long new_pos;\n                    if (ctrl)\n                    {\n                        // find the first non-whitespace to our left\n                        std::string::size_type pos = text_.find_last_not_of(space_str.c_str(),cursor_pos);\n                        if (pos != std::string::npos)\n                        {\n                            pos = text_.find_last_of(space_str.c_str(),pos);\n                            if (pos != std::string::npos)\n                                new_pos = static_cast<unsigned long>(pos);\n                            else\n                                new_pos = 0;\n                        }\n                        else\n                        {\n                            new_pos = 0;\n                        }\n                    }\n                    else\n                    {\n                        new_pos = cursor_pos-1;\n                    }\n\n                    move_cursor(new_pos);\n                }\n                else if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n\n            }\n            else if (key == base_window::KEY_RIGHT ||\n                key == base_window::KEY_DOWN)\n            {\n                if (cursor_pos != static_cast<long>(text_.size()))\n                {\n                    unsigned long new_pos;\n                    if (ctrl)\n                    {\n                        // find the first non-whitespace to our left\n                        std::string::size_type pos = text_.find_first_not_of(space_str.c_str(),cursor_pos);\n                        if (pos != std::string::npos)\n                        {\n                            pos = text_.find_first_of(space_str.c_str(),pos);\n                            if (pos != std::string::npos)\n                                new_pos = static_cast<unsigned long>(pos+1);\n                            else\n                                new_pos = static_cast<unsigned long>(text_.size());\n                        }\n                        else\n                        {\n                            new_pos = static_cast<unsigned long>(text_.size());\n                        }\n                    }\n                    else\n                    {\n                        new_pos = cursor_pos+1;\n                    }\n\n                    move_cursor(new_pos);\n                }\n                else if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n            else if (is_printable)\n            {\n                if (ctrl)\n                {\n                    if (key == 'a')\n                    {\n                        on_select_all();\n                    }\n                    else if (key == 'c')\n                    {\n                        on_copy();\n                    }\n                    else if (key == 'v')\n                    {\n                        on_paste();\n                    }\n                    else if (key == 'x')\n                    {\n                        on_cut();\n                    }\n                }\n                else if (key != '\\n')\n                {\n                    if (highlight_start <= highlight_end)\n                    {\n                        text_ = text_.substr(0,highlight_start) + static_cast<unichar>(key) +\n                            text_.substr(highlight_end+1,text_.size()-highlight_end-1);\n                        move_cursor(highlight_start+1);\n                        highlight_start = 0;\n                        highlight_end = -1;\n                        on_no_text_selected();\n                        parent.invalidate_rectangle(rect);\n                    }\n                    else\n                    {\n                        text_ = text_.substr(0,cursor_pos) + static_cast<unichar>(key) +\n                            text_.substr(cursor_pos,text_.size()-cursor_pos);\n                        move_cursor(cursor_pos+1);\n                    }\n                    unsigned long height;\n                    mfont->compute_size(text_,text_width,height,text_pos);\n\n                    // send out the text modified event\n                    if (text_modified_handler.is_set())\n                        text_modified_handler();\n                }\n                else if (key == '\\n')\n                {\n                    if (enter_key_handler.is_set())\n                        enter_key_handler();\n                }\n            }\n            else if (key == base_window::KEY_BACKSPACE)\n            {                \n                // if something is highlighted then delete that\n                if (highlight_start <= highlight_end)\n                {\n                    on_delete_selected();\n                }\n                else if (cursor_pos != 0)\n                {\n                    text_ = text_.erase(cursor_pos-1,1);\n                    move_cursor(cursor_pos-1);\n\n                    // send out the text modified event\n                    if (text_modified_handler.is_set())\n                        text_modified_handler();\n                }\n                else\n                {\n                    // do this just so it repaints itself right\n                    move_cursor(cursor_pos);\n                }\n                unsigned long height;\n                mfont->compute_size(text_,text_width,height,text_pos);\n                parent.invalidate_rectangle(rect);\n            }\n            else if (key == base_window::KEY_DELETE)\n            {\n                // if something is highlighted then delete that\n                if (highlight_start <= highlight_end)\n                {\n                    on_delete_selected();\n                }\n                else if (cursor_pos != static_cast<long>(text_.size()))\n                {\n                    text_ = text_.erase(cursor_pos,1);\n\n                    // send out the text modified event\n                    if (text_modified_handler.is_set())\n                        text_modified_handler();\n                }\n                else\n                {\n                    // do this just so it repaints itself right\n                    move_cursor(cursor_pos);\n                }\n                parent.invalidate_rectangle(rect);\n\n                unsigned long height;\n                mfont->compute_size(text_,text_width,height,text_pos);\n            }\n            else if (key == base_window::KEY_HOME)\n            {\n                move_cursor(0);\n                if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n            else if (key == base_window::KEY_END)\n            {\n                move_cursor(static_cast<unsigned long>(text_.size()));\n                if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n            cursor_visible = true;\n            recent_movement = true;\n\n        }\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    void text_field::\n    on_string_put(\n        const std::wstring &str\n    )\n    {\n        if (has_focus && enabled && !hidden){\n            ustring ustr = convert_wstring_to_utf32(str);\n            if (highlight_start <= highlight_end)\n            {\n                text_ = text_.substr(0,highlight_start) + ustr +\n                    text_.substr(highlight_end+1,text_.size()-highlight_end-1);\n                move_cursor(highlight_start+ustr.size());\n                highlight_start = 0;\n                highlight_end = -1;\n                on_no_text_selected();\n                parent.invalidate_rectangle(rect);\n            }\n            else\n            {\n                text_ = text_.substr(0,cursor_pos) + ustr +\n                    text_.substr(cursor_pos,text_.size()-cursor_pos);\n                move_cursor(cursor_pos+ustr.size());\n            }\n            unsigned long height;\n            mfont->compute_size(text_,text_width,height,text_pos);\n\n            // send out the text modified event\n            if (text_modified_handler.is_set())\n                text_modified_handler();\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    void text_field::\n    move_cursor (\n        unsigned long pos\n    )\n    {\n        using namespace std;\n        const long old_cursor_pos = cursor_pos;\n\n        if (text_pos >= pos)\n        {\n            // the cursor should go all the way to the left side of the text\n            if (pos >= 6)\n                text_pos = pos-6;\n            else\n                text_pos = 0;\n\n            cursor_pos = pos;    \n            unsigned long height;\n            mfont->compute_size(text_,text_width,height,text_pos);\n\n            unsigned long width;\n            unsigned long new_x = style->get_padding(*mfont);\n            if (static_cast<long>(cursor_pos)-1 >= static_cast<long>(text_pos))\n            {\n                mfont->compute_size(text_,width,height,text_pos,cursor_pos-1);\n                if (cursor_pos != 0)\n                    new_x += width - mfont->right_overflow();\n            }\n\n            cursor_x = new_x;\n        }\n        else\n        {\n            unsigned long height;\n            unsigned long width;\n            mfont->compute_size(text_,width,height,text_pos,pos-1);\n\n            unsigned long new_x = style->get_padding(*mfont) + \n                width - mfont->right_overflow();\n\n            // move the text to the left if necessary\n            if (new_x + 4 > rect.width())\n            {\n                while (new_x > rect.width() - rect.width()/5)\n                {\n                    new_x -= (*mfont)[text_[text_pos]].width();\n                    ++text_pos;\n                }\n            }\n\n            cursor_x = new_x;\n            cursor_pos = pos;     \n            mfont->compute_size(text_,text_width,height,text_pos);\n        }\n\n        parent.set_im_pos(rect.left()+cursor_x, rect.top());\n\n        if (old_cursor_pos != cursor_pos)\n        {\n            if (shift_pos != -1)\n            {\n                highlight_start = std::min(shift_pos,cursor_pos);\n                highlight_end = std::max(shift_pos,cursor_pos)-1;\n            }\n            else\n            {\n                highlight_start = 0;\n                highlight_end = -1;\n            }\n\n            if (highlight_start > highlight_end)\n                on_no_text_selected();\n            else\n                on_text_is_selected();\n\n            recent_movement = true;\n            cursor_visible = true;\n            parent.invalidate_rectangle(rect);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//             tabbed_display object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    tabbed_display::\n    tabbed_display(  \n        drawable_window& w\n    ) : \n        drawable(w,MOUSE_CLICK),\n        selected_tab_(0),\n        left_pad(6),\n        right_pad(4),\n        top_pad(3),\n        bottom_pad(3)\n    {\n        rect = rectangle(0,0,40,mfont->height()+top_pad+bottom_pad);\n        enable_events();\n        tabs.set_max_size(1);\n        tabs.set_size(1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    tabbed_display::\n    ~tabbed_display(\n    )\n    {\n        disable_events();\n        parent.invalidate_rectangle(rect); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        auto_mutex M(m);\n        // we have to adjust the positions of all the tab rectangles\n        const long xdelta = rect.left() - x;\n        const long ydelta = rect.top() - y;\n        for (unsigned long i = 0; i < tabs.size(); ++i)\n        {\n            tabs[i].rect.set_left(tabs[i].rect.left()+xdelta);\n            tabs[i].rect.set_right(tabs[i].rect.right()+xdelta);\n\n            tabs[i].rect.set_top(tabs[i].rect.top()+ydelta);\n            tabs[i].rect.set_bottom(tabs[i].rect.bottom()+ydelta);\n\n\n            // adjust the position of the group associated with this tab if it exists\n            if (tabs[i].group)\n                tabs[i].group->set_pos(x+3, y+mfont->height()+top_pad+bottom_pad+3);\n        }\n        drawable::set_pos(x,y);\n        recompute_tabs();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    fit_to_contents (\n    )\n    {\n        auto_mutex M(m);\n        rectangle new_rect;\n        point p(rect.left(),rect.top());\n        new_rect += p;\n\n        for (unsigned long i = 0; i < tabs.size(); ++i)\n        {\n            if (tabs[i].group)\n            {\n                tabs[i].group->fit_to_contents();\n                new_rect += tabs[i].group->get_rect();\n            }\n        }\n\n        // and give the new rect an additional 4 pixels on the bottom and right sides\n        // so that the contents to hit the edge of the tabbed display\n        new_rect = resize_rect(new_rect, new_rect.width()+4, new_rect.height()+4);\n\n        parent.invalidate_rectangle(new_rect+rect);\n        rect = new_rect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    set_size (\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        auto_mutex M(m);\n        rectangle old(rect);\n        const long x = rect.left();\n        const long y = rect.top();\n        rect.set_right(x+width-1);\n        rect.set_bottom(y+height-1);\n\n        recompute_tabs();\n\n        parent.invalidate_rectangle(rect+old);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    set_number_of_tabs (\n        unsigned long num\n    )\n    {\n        auto_mutex M(m);\n\n        DLIB_ASSERT ( num > 0 ,\n                \"\\tvoid tabbed_display::set_number_of_tabs()\"\n                << \"\\n\\tnum:  \" << num );\n\n        tabs.set_max_size(num);\n        tabs.set_size(num);\n\n        selected_tab_ = 0;\n\n        recompute_tabs();\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long tabbed_display::\n    number_of_tabs (\n    ) const\n    {\n        auto_mutex M(m);\n        return tabs.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string tabbed_display::\n    tab_name (\n        unsigned long idx\n    ) const\n    {\n        return convert_wstring_to_mbstring(tab_wname(idx));\n    }\n    \n    const std::wstring tabbed_display::\n    tab_wname (\n        unsigned long idx\n    ) const\n    {\n        return convert_utf32_to_wstring(tab_uname(idx));\n    }\n    \n    const dlib::ustring& tabbed_display::\n    tab_uname (\n        unsigned long idx\n    ) const\n    {\n        auto_mutex M(m);\n\n        DLIB_ASSERT ( idx < number_of_tabs() ,\n                \"\\tvoid tabbed_display::tab_name()\"\n                << \"\\n\\tidx:              \" << idx \n                << \"\\n\\tnumber_of_tabs(): \" << number_of_tabs() );\n\n        return tabs[idx].name;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    set_tab_name (\n        unsigned long idx,\n        const std::string& new_name\n    )\n    {\n        set_tab_name(idx, convert_mbstring_to_wstring(new_name));\n    }\n\n    void tabbed_display::\n    set_tab_name (\n        unsigned long idx,\n        const std::wstring& new_name\n    )\n    {\n        set_tab_name(idx, convert_wstring_to_utf32(new_name));\n    }\n\n    void tabbed_display::\n    set_tab_name (\n        unsigned long idx,\n        const dlib::ustring& new_name\n    )\n    {\n        auto_mutex M(m);\n\n\n        DLIB_ASSERT ( idx < number_of_tabs() ,\n                \"\\tvoid tabbed_display::set_tab_name()\"\n                << \"\\n\\tidx:              \" << idx \n                << \"\\n\\tnumber_of_tabs(): \" << number_of_tabs() );\n\n\n        tabs[idx].name = new_name;\n        // do this so that there isn't any reference counting going on\n        tabs[idx].name[0] = tabs[idx].name[0];\n        unsigned long height;\n        mfont->compute_size(new_name,tabs[idx].width,height);\n\n\n        recompute_tabs();\n\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long,\n        long x,\n        long y,\n        bool \n    )\n    {\n        if (rect.contains(x,y) && btn == base_window::LEFT && enabled && !hidden)\n        {\n            rectangle temp = rect;\n            const long offset = mfont->height() + bottom_pad + top_pad;\n            temp.set_bottom(rect.top()+offset);\n            if (temp.contains(x,y))\n            {\n                // now we have to figure out which tab was clicked\n                for (unsigned long i = 0; i < tabs.size(); ++i)\n                {\n                    if (selected_tab_ != i && tabs[i].rect.contains(x,y) &&\n                        tabs[selected_tab_].rect.contains(x,y) == false)\n                    {\n                        unsigned long old_idx = selected_tab_;\n                        selected_tab_ = i;\n                        recompute_tabs();\n                        parent.invalidate_rectangle(temp);\n\n                        // adjust the widget_group objects for these tabs if they exist\n                        if (tabs[i].group)\n                            tabs[i].group->show();\n                        if (tabs[old_idx].group)\n                            tabs[old_idx].group->hide();\n\n                        if (event_handler.is_set())\n                            event_handler(i,old_idx);\n                        break;\n                    }\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    set_tab_group (\n        unsigned long idx,\n        widget_group& group\n    )\n    {\n        auto_mutex M(m);\n\n        DLIB_ASSERT ( idx < number_of_tabs() ,\n                \"\\tvoid tabbed_display::set_tab_group()\"\n                << \"\\n\\tidx:              \" << idx \n                << \"\\n\\tnumber_of_tabs(): \" << number_of_tabs() );\n\n\n        tabs[idx].group = &group;\n        group.set_pos(rect.left()+3,rect.top()+mfont->height()+top_pad+bottom_pad+2);\n        if (idx == selected_tab_)\n            group.show();\n        else\n            group.hide();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    disable (\n    )\n    {\n        auto_mutex M(m);\n        if (tabs[selected_tab_].group)\n            tabs[selected_tab_].group->disable();\n        drawable::disable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    enable (\n    )\n    {\n        auto_mutex M(m);\n        if (tabs[selected_tab_].group)\n            tabs[selected_tab_].group->enable();\n        drawable::enable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    hide (\n    )\n    {\n        auto_mutex M(m);\n        if (tabs[selected_tab_].group)\n            tabs[selected_tab_].group->hide();\n        drawable::hide();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    show (\n    )\n    {\n        auto_mutex M(m);\n        if (tabs[selected_tab_].group)\n            tabs[selected_tab_].group->show();\n        drawable::show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    draw (\n        const canvas& c\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n\n        // draw the main border first\n        rectangle main_box(rect.left(),rect.top()+mfont->height()+top_pad+bottom_pad,rect.right(),rect.bottom());\n        draw_button_up(c,main_box);\n        draw_pixel(c,point(main_box.right()-1,main_box.top()),rgb_pixel(128,128,128));\n\n        rgb_pixel color;\n        if (enabled)\n        {\n            color.red = 0;\n            color.green = 0;\n            color.blue = 0;\n        }\n        else\n        {\n            color.red = 128;\n            color.green = 128;\n            color.blue = 128;\n        }\n\n        // draw the tabs\n        for (unsigned long i = 0; i < tabs.size(); ++i)\n        {\n            if (selected_tab_ != i)\n                draw_tab(tabs[i].rect,c);\n\n            // draw the name string\n            rectangle temp = tabs[i].rect;\n            temp.set_top(temp.top()+top_pad);\n            temp.set_bottom(temp.bottom()+bottom_pad);\n            temp.set_left(temp.left()+left_pad);\n            temp.set_right(temp.right()+right_pad);\n            mfont->draw_string(c,temp,tabs[i].name,color);\n        }\n        draw_tab(tabs[selected_tab_].rect,c);\n        draw_line(c,\n            point(tabs[selected_tab_].rect.left()+1,\n            tabs[selected_tab_].rect.bottom()),\n            point(tabs[selected_tab_].rect.right()-2,\n            tabs[selected_tab_].rect.bottom()),\n            rgb_pixel(212,208,200));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    draw_tab (\n        const rectangle& tab,\n        const canvas& c\n    ) const\n    {\n        const rgb_pixel white(255,255,255);\n        const rgb_pixel background(212,208,200);\n        const rgb_pixel dark_gray(64,64,64);\n        const rgb_pixel gray(128,128,128);\n        draw_line(c,point(tab.left(),tab.top()+2),point(tab.left(),tab.bottom()),white);\n        draw_line(c,point(tab.left()+1,tab.top()+2),point(tab.left()+1,tab.bottom()),background);\n        draw_line(c,point(tab.right(),tab.top()+2),point(tab.right(),tab.bottom()),dark_gray);\n        draw_line(c,point(tab.right()-1,tab.top()+2),point(tab.right()-1,tab.bottom()),gray);\n        draw_line(c,point(tab.left()+2,tab.top()),point(tab.right()-2,tab.top()),white);\n        draw_pixel(c,point(tab.left()+1,tab.top()+1),white);\n        draw_pixel(c,point(tab.right()-1,tab.top()+1),dark_gray);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        mfont = f;\n\n        for (unsigned long i = 0; i < tabs.size(); ++i)\n        {\n            unsigned long height;\n            mfont->compute_size(tabs[i].name,tabs[i].width,height);\n        }\n\n        recompute_tabs();\n        set_pos(rect.left(), rect.top());\n\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tabbed_display::\n    recompute_tabs (\n    )\n    {\n        const long offset = mfont->height() + bottom_pad + top_pad;\n\n\n        // figure out the size and position of all the tabs\n        rectangle sel_tab_rect, other_tab;\n        sel_tab_rect.set_top(rect.top());\n        sel_tab_rect.set_bottom(rect.top()+offset);\n\n        other_tab.set_top(rect.top()+2);\n        other_tab.set_bottom(rect.top()+offset-1);\n\n        long cur_x = rect.left();\n        for (unsigned long i = 0; i < tabs.size(); ++i)\n        {\n            const unsigned long str_width = tabs[i].width;\n            if (selected_tab_ != i)\n            {\n                other_tab.set_left(cur_x);\n                cur_x += left_pad + str_width + right_pad;\n                other_tab.set_right(cur_x);\n                tabs[i].rect = other_tab;\n                ++cur_x;\n\n            }\n            else\n            {\n                if (i != 0)\n                    sel_tab_rect.set_left(cur_x-2);\n                else\n                    sel_tab_rect.set_left(cur_x);\n\n                cur_x += left_pad + str_width + right_pad;\n\n                if (i != tabs.size()-1)\n                    sel_tab_rect.set_right(cur_x+2);\n                else\n                    sel_tab_rect.set_right(cur_x);\n                ++cur_x;\n\n                tabs[i].rect = sel_tab_rect;\n            }\n        }\n\n        // make sure this object is wide enough\n        const rectangle& last = tabs[tabs.size()-1].rect;\n        const rectangle& first = tabs[0].rect;\n        rect = last + rect + first;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//             named_rectangle object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    named_rectangle::\n    named_rectangle(  \n        drawable_window& w\n    ) :\n        drawable(w),\n        name_width(0),\n        name_height(0)\n    {\n        make_name_fit_in_rect();\n        enable_events();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    named_rectangle::\n    ~named_rectangle(\n    )\n    {\n        disable_events();\n        parent.invalidate_rectangle(rect); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void named_rectangle::\n    set_size (\n        unsigned long width,\n        unsigned long height\n    )\n    {\n        auto_mutex M(m);\n        rectangle old(rect);\n        const long x = rect.left();\n        const long y = rect.top();\n        rect.set_right(x+width-1);\n        rect.set_bottom(y+height-1);\n\n        make_name_fit_in_rect();\n        parent.invalidate_rectangle(rect+old);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void named_rectangle::\n    wrap_around (\n        const rectangle& r\n    )\n    {\n        auto_mutex M(m);\n        rectangle old(rect);\n        const unsigned long pad = name_height/2;\n\n        rect = rectangle(r.left()-pad, r.top()-name_height*4/3, r.right()+pad, r.bottom()+pad);\n\n        make_name_fit_in_rect();\n        parent.invalidate_rectangle(rect+old);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void named_rectangle::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        mfont = f;\n        mfont->compute_size(name_,name_width,name_height);\n        make_name_fit_in_rect();\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void named_rectangle::\n    make_name_fit_in_rect (\n    )\n    {\n        // make sure the named rectangle is big enough to contain the name\n        const unsigned long wtemp = mfont->height() + name_width;\n        const unsigned long htemp = mfont->height() + name_height;\n        if (rect.width() < wtemp)\n            rect.set_right(rect.left() + wtemp - 1 );\n        if (rect.height() < htemp)\n            rect.set_bottom(rect.bottom() + htemp - 1 );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void named_rectangle::\n    set_name (\n        const std::string& name\n    )\n    {\n        set_name(convert_mbstring_to_wstring(name));\n    }\n\n    void named_rectangle::\n    set_name (\n        const std::wstring& name\n    )\n    {\n        set_name(convert_wstring_to_utf32(name));\n    }\n\n    void named_rectangle::\n    set_name (\n        const dlib::ustring& name\n    )\n    {\n        auto_mutex M(m);\n        name_ = name.c_str();\n        mfont->compute_size(name_,name_width,name_height);\n\n        make_name_fit_in_rect();\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string named_rectangle::\n    name (\n    ) const\n    {\n        return convert_wstring_to_mbstring(wname());\n    }\n\n    const std::wstring named_rectangle::\n    wname (\n    ) const\n    {\n        return convert_utf32_to_wstring(uname());\n    }\n\n    const dlib::ustring named_rectangle::\n    uname (\n    ) const\n    {\n        auto_mutex M(m);\n        return dlib::ustring(name_.c_str());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void named_rectangle::\n    draw (\n        const canvas& c\n    ) const\n    {\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n        \n        const unsigned long gap = mfont->height()/2;\n        rectangle strrect = rect;\n        strrect.set_left(rect.left() + gap);\n\n        const unsigned long rtop = rect.top() + name_height/2;\n\n        const rgb_pixel white(255,255,255);\n        const rgb_pixel gray(128,128,128);\n\n        mfont->draw_string(c,strrect,name_);\n        draw_line(c,point(rect.left(), rtop),             \n                  point(rect.left()+gap/2, rtop), gray);\n        draw_line(c,point(rect.left(), rtop),             \n                  point(rect.left(), rect.bottom()-1), gray);\n        draw_line(c,point(rect.left(), rect.bottom()-1),  \n                  point(rect.right()-1, rect.bottom()-1), gray);\n        draw_line(c,point(rect.right()-1, rtop),          \n                  point(rect.right()-1, rect.bottom()-2), gray);\n        draw_line(c,point(strrect.left() + name_width + 2, rtop), \n                  point(rect.right()-1, rtop), gray);\n\n        draw_line(c,point(strrect.left() + name_width + 2, rtop+1),   \n                  point( rect.right()-2, rtop+1), white);\n        draw_line(c,point(rect.right(), rtop), \n                  point(rect.right(), rect.bottom()), white);\n        draw_line(c,point(rect.left(), rect.bottom()),                \n                  point(rect.right(), rect.bottom()), white);\n        draw_line(c,point(rect.left()+1, rtop+1), \n                  point(rect.left()+1, rect.bottom()-2), white);\n        draw_line(c,point(rect.left()+1, rtop+1), \n                  point(rect.left()+gap/2, rtop+1), white);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class mouse_tracker\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    mouse_tracker::\n    mouse_tracker(  \n        drawable_window& w\n    ) :\n        draggable(w),\n        offset(18),\n        nr(w),\n        x_label(w),\n        y_label(w),\n        click_x(-1),\n        click_y(-1)\n    {\n        set_draggable_area(rectangle(0,0,500,500));\n\n\n        x_label.set_text(\"x: \");\n        y_label.set_text(\"y: \");\n        nr.set_name(\"mouse position\");\n\n\n        x_label.set_pos(offset,offset);\n        y_label.set_pos(x_label.get_rect().left(), x_label.get_rect().bottom()+3);\n\n        nr.wrap_around(x_label.get_rect() + y_label.get_rect());\n        rect = nr.get_rect();\n\n        set_z_order(2000000000);\n        x_label.set_z_order(2000000001);\n        y_label.set_z_order(2000000001);\n        nr.set_z_order(2000000001);\n\n        enable_events();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    mouse_tracker::\n    ~mouse_tracker(\n    )\n    { \n        disable_events(); \n        parent.invalidate_rectangle(rect); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        nr.set_main_font(f);\n        x_label.set_main_font(f);\n        y_label.set_main_font(f);\n        mfont = f;\n        nr.wrap_around(x_label.get_rect() + y_label.get_rect());\n        rect = nr.get_rect();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        draggable::set_pos(x,y);\n        nr.set_pos(x,y);\n        x_label.set_pos(rect.left()+offset,rect.top()+offset);\n        y_label.set_pos(x_label.get_rect().left(), x_label.get_rect().bottom()+3);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    show (\n    )\n    {\n        draggable::show();\n        nr.show();\n        x_label.show();\n        y_label.show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    hide (\n    )\n    {\n        draggable::hide();\n        nr.hide();\n        x_label.hide();\n        y_label.hide();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    enable (\n    )\n    {\n        draggable::enable();\n        nr.enable();\n        x_label.enable();\n        y_label.enable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    disable (\n    )\n    {\n        draggable::disable();\n        nr.disable();\n        x_label.disable();\n        y_label.disable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y,\n        bool double_clicked \n    )\n    {\n        draggable::on_mouse_down(btn,state,x,y,double_clicked);\n        if ((state & base_window::SHIFT) && (btn == base_window::LEFT) && enabled && !hidden)\n        {\n            parent.invalidate_rectangle(rectangle(x,y,x,y));\n            parent.invalidate_rectangle(rectangle(click_x,click_y,click_x,click_y));\n            click_x = x;\n            click_y = y;\n\n            y_label.set_text(\"y: 0\");\n            x_label.set_text(\"x: 0\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    on_mouse_move (\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        if (!hidden && enabled)\n        {\n            parent.invalidate_rectangle(rect);\n            draggable::on_mouse_move(state,x,y);\n\n            long dx = 0;\n            long dy = 0;\n            if (click_x != -1)\n                dx = click_x;\n            if (click_y != -1)\n                dy = click_y;\n\n            sout.str(\"\");\n            sout << \"y: \" << y - dy;\n            y_label.set_text(sout.str());\n\n            sout.str(\"\");\n            sout << \"x: \" << x - dx;\n            x_label.set_text(sout.str());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    on_drag (\n    )\n    {\n        nr.set_pos(rect.left(),rect.top());\n        x_label.set_pos(rect.left()+offset,rect.top()+offset);\n        y_label.set_pos(x_label.get_rect().left(), x_label.get_rect().bottom()+3);\n\n        long x = 0;\n        long y = 0;\n        if (click_x != -1)\n            x = click_x;\n        if (click_y != -1)\n            y = click_y;\n\n        sout.str(\"\");\n        sout << \"y: \" << lasty - y;\n        y_label.set_text(sout.str());\n\n        sout.str(\"\");\n        sout << \"x: \" << lastx - x;\n        x_label.set_text(sout.str());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void mouse_tracker::\n    draw (\n        const canvas& c\n    ) const \n    { \n        fill_rect(c, rect,rgb_pixel(212,208,200));\n        draw_pixel(c, point(click_x,click_y),rgb_pixel(255,0,0));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class list_box\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace list_box_helper{\n    template <typename S>\n    list_box<S>::\n    list_box(  \n        drawable_window& w\n    ) : \n        scrollable_region(w,MOUSE_WHEEL|MOUSE_CLICK),\n        ms_enabled(false),\n        last_selected(0)\n    {\n        set_vertical_scroll_increment(mfont->height());\n        set_horizontal_scroll_increment(mfont->height());\n\n        style.reset(new list_box_style_default());\n        enable_events();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    list_box<S>::\n    ~list_box(\n    )\n    {\n        disable_events();\n        parent.invalidate_rectangle(rect); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    void list_box<S>::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        mfont = f;\n        // recompute the sizes of all the items\n        for (unsigned long i = 0; i < items.size(); ++i)\n        {\n            mfont->compute_size(items[i].name,items[i].width, items[i].height);\n        }\n        set_vertical_scroll_increment(mfont->height());\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    bool list_box<S>::\n    is_selected (\n        unsigned long index\n    ) const\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( index < size() ,\n                \"\\tbool list_box::is_selected(index)\"\n                << \"\\n\\tindex:  \" << index \n                << \"\\n\\tsize(): \" << size() );\n\n        return items[index].is_selected;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    void list_box<S>::\n    select (\n        unsigned long index \n    )\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( index < size() ,\n                \"\\tvoid list_box::select(index)\"\n                << \"\\n\\tindex:  \" << index \n                << \"\\n\\tsize(): \" << size() );\n\n        last_selected = index;\n        items[index].is_selected = true;\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    void list_box<S>::\n    unselect (\n        unsigned long index \n    )\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( index < size() ,\n                \"\\tvoid list_box::unselect(index)\"\n                << \"\\n\\tindex:  \" << index \n                << \"\\n\\tsize(): \" << size() );\n        items[index].is_selected = false;\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const S& list_box<S>::operator [] (\n        unsigned long index\n    ) const\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( index < size() ,\n                \"\\tconst std::string& list_box::operator[](index)\"\n                << \"\\n\\tindex:  \" << index \n                << \"\\n\\tsize(): \" << size() );\n        return items[index].name;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    bool list_box<S>::\n    multiple_select_enabled (\n    ) const\n    {\n        auto_mutex M(m);\n        return ms_enabled;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    void list_box<S>::\n    enable_multiple_select (\n    ) \n    {\n        auto_mutex M(m);\n        ms_enabled = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    void list_box<S>::\n    disable_multiple_select (\n    )\n    {\n        auto_mutex M(m);\n        ms_enabled = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    bool list_box<S>::\n    at_start (\n    ) const\n    {\n        auto_mutex M(m);\n        return items.at_start();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    void list_box<S>::\n    reset (\n    ) const\n    {\n        auto_mutex M(m);\n        items.reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    bool list_box<S>::\n    current_element_valid (\n    ) const\n    {\n        auto_mutex M(m);\n        return items.current_element_valid();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const S &list_box<S>::\n    element (\n    ) const\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( current_element_valid() ,\n                \"\\tconst std::string& list_box::element()\"\n                 );\n        return items.element().name;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const S &list_box<S>::\n    element (\n    )\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( current_element_valid() ,\n                \"\\tconst std::string& list_box::element()\"\n                 );\n        return items.element().name;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    bool list_box<S>::\n    move_next (\n    ) const\n    {\n        auto_mutex M(m);\n        return items.move_next();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    unsigned long list_box<S>::\n    size (\n    ) const\n    {\n        auto_mutex M(m);\n        return items.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    void list_box<S>::\n    draw (\n        const canvas& c\n    ) const\n    {\n        scrollable_region::draw(c);\n\n        rectangle area = display_rect().intersect(c);\n        if (area.is_empty())\n            return;\n\n        style->draw_list_box_background(c, display_rect(), enabled);\n\n        long y = total_rect().top();\n        for (unsigned long i = 0; i < items.size(); ++i)\n        {\n            if (y+(long)items[i].height <= area.top())\n            {\n                y += items[i].height;\n                continue;\n            }\n\n            rectangle r(total_rect().left(), y, display_rect().right(), y+items[i].height-1);\n\n            style->draw_list_box_item(c,r, display_rect(), enabled, *mfont, items[i].name, items[i].is_selected);\n\n\n            y += items[i].height;\n\n            if (y > area.bottom())\n                break;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    void list_box<S>::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y,\n        bool is_double_click\n    )\n    {\n        if (display_rect().contains(x,y) && btn == base_window::LEFT && enabled && !hidden )\n        {\n            if ( ms_enabled == false || \n                 ((!(state&base_window::CONTROL)) && !(state&base_window::SHIFT)))\n            {\n                items.reset();\n                while (items.move_next())\n                {\n                    items.element().is_selected = false;\n                }\n            }\n\n            y -= total_rect().top();\n            long h = 0;\n            for (unsigned long i = 0; i < items.size(); ++i)\n            {\n                h += items[i].height;\n                if (h >= y)\n                {\n                    if (ms_enabled)\n                    {\n                        if (state&base_window::CONTROL)\n                        {\n                            items[i].is_selected = !items[i].is_selected;\n                            if (items[i].is_selected)\n                                last_selected = i;\n                        }\n                        else if (state&base_window::SHIFT)\n                        {\n                            // we want to select everything between (and including) the\n                            // current thing clicked and last_selected.\n                            const unsigned long first = std::min(i,last_selected);\n                            const unsigned long last = std::max(i,last_selected);\n                            for (unsigned long j = first; j <= last; ++j)\n                                items[j].is_selected = true;\n                        }\n                        else\n                        {\n                            items[i].is_selected = true;\n                            last_selected = i;\n                            if (is_double_click && event_handler.is_set())\n                                event_handler(i);\n                            else if (single_click_event_handler.is_set())\n                                single_click_event_handler(i);\n                        }\n                    }\n                    else\n                    {\n                        items[i].is_selected = true;\n                        last_selected = i;\n                        if (is_double_click && event_handler.is_set())\n                            event_handler(i);\n                        else if (single_click_event_handler.is_set())\n                            single_click_event_handler(i);\n                    }\n\n                    break;\n                }\n            }\n\n            parent.invalidate_rectangle(rect);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    unsigned long list_box<S>::\n    get_selected (\n    ) const\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( multiple_select_enabled() == false,\n                \"\\tunsigned long list_box::get_selected()\"\n                 );\n        for (unsigned long i = 0; i < items.size(); ++i)\n        {\n            if (items[i].is_selected)\n                return i;\n        }\n        return items.size();\n    }\n// ----------------------------------------------------------------------------------------\n\n   // making instance of template\n   template class list_box<std::string>;\n   template class list_box<std::wstring>;\n   template class list_box<dlib::ustring>;\n   }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // function message_box()  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace message_box_helper\n    {\n        void box_win::\n        initialize (\n        )\n        {\n            msg.set_pos(20,20);\n            msg.set_text(message);\n            rectangle msg_rect = msg.get_rect();\n            btn_ok.set_name(\"OK\");\n            btn_ok.set_size(60,btn_ok.height());\n            if (msg_rect.width() >= 60)\n                btn_ok.set_pos(msg_rect.width()/2+msg_rect.left()-btn_ok.width()/2,msg_rect.bottom()+15);\n            else\n                btn_ok.set_pos(20,msg_rect.bottom()+15);\n            btn_ok.set_click_handler(*this,&box_win::on_click);\n\n            rectangle size = btn_ok.get_rect() + msg_rect;\n            set_size(size.right()+20,size.bottom()+20);\n\n\n            show();\n            set_title(title);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        box_win::\n        box_win (\n            const std::string& title_,\n            const std::string& message_\n        ) : \n            drawable_window(false),\n            title(convert_mbstring_to_wstring(title_)),\n            message(convert_mbstring_to_wstring(message_)),\n            msg(*this),\n            btn_ok(*this)\n        {\n            initialize();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        box_win::\n        box_win (\n            const std::wstring& title_,\n            const std::wstring& message_\n        ) : \n            drawable_window(false),\n            title(title_),\n            message(message_),\n            msg(*this),\n            btn_ok(*this)\n        {\n            initialize();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        box_win::\n        box_win (\n            const dlib::ustring& title_,\n            const dlib::ustring& message_\n        ) : \n            drawable_window(false),\n            title(convert_utf32_to_wstring(title_)),\n            message(convert_utf32_to_wstring(message_)),\n            msg(*this),\n            btn_ok(*this)\n        {\n            initialize();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        box_win::\n        ~box_win (\n        )\n        {\n            close_window();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        deleter_thread (\n            void* param\n        )\n        {\n            // The point of this extra event_handler stuff is to allow the user\n            // to end the program from within the callback.  So we want to destroy the \n            // window *before* we call their callback.\n            box_win& w = *static_cast<box_win*>(param);\n            w.close_window();\n            any_function<void()> event_handler(w.event_handler);\n            delete &w;\n            if (event_handler.is_set())\n                event_handler(); \n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        on_click (\n        )\n        {\n            hide();\n            create_new_thread(&deleter_thread,this);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        base_window::on_close_return_code box_win::\n        on_window_close (\n        )\n        {\n            // The point of this extra event_handler stuff is to allow the user\n            // to end the program within the callback.  So we want to destroy the \n            // window *before* we call their callback. \n            any_function<void()> event_handler_copy(event_handler);\n            delete this;\n            if (event_handler_copy.is_set())\n                event_handler_copy();\n            return CLOSE_WINDOW;\n        }\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        void blocking_box_win::\n        initialize (\n        )\n        {\n            msg.set_pos(20,20);\n            msg.set_text(message);\n            rectangle msg_rect = msg.get_rect();\n            btn_ok.set_name(\"OK\");\n            btn_ok.set_size(60,btn_ok.height());\n            if (msg_rect.width() >= 60)\n                btn_ok.set_pos(msg_rect.width()/2+msg_rect.left()-btn_ok.width()/2,msg_rect.bottom()+15);\n            else\n                btn_ok.set_pos(20,msg_rect.bottom()+15);\n            btn_ok.set_click_handler(*this,&blocking_box_win::on_click);\n\n            rectangle size = btn_ok.get_rect() + msg_rect;\n            set_size(size.right()+20,size.bottom()+20);\n\n\n            set_title(title);\n            show();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        blocking_box_win::\n        blocking_box_win (\n            const std::string& title_,\n            const std::string& message_\n        ) : \n            drawable_window(false),\n            title(convert_mbstring_to_wstring(title_)),\n            message(convert_mbstring_to_wstring(message_)),\n            msg(*this),\n            btn_ok(*this)\n        {\n            initialize();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        blocking_box_win::\n        blocking_box_win (\n            const std::wstring& title_,\n            const std::wstring& message_\n        ) : \n            drawable_window(false),\n            title(title_),\n            message(message_),\n            msg(*this),\n            btn_ok(*this)\n        {\n            initialize();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        blocking_box_win::\n        blocking_box_win (\n            const dlib::ustring& title_,\n            const dlib::ustring& message_\n        ) : \n            drawable_window(false),\n            title(convert_utf32_to_wstring(title_)),\n            message(convert_utf32_to_wstring(message_)),\n            msg(*this),\n            btn_ok(*this)\n        {\n            initialize();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        blocking_box_win::\n        ~blocking_box_win (\n        )\n        { \n            close_window(); \n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void blocking_box_win::\n        on_click (\n        )\n        {\n            close_window();\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // function open_file_box() \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace open_file_box_helper\n    {\n        box_win::\n        box_win (\n            const std::string& title,\n            bool has_text_field \n        ) : \n            lbl_dirs(*this),\n            lbl_files(*this),\n            lbl_file_name(*this),\n            lb_dirs(*this),\n            lb_files(*this),\n            btn_ok(*this),\n            btn_cancel(*this),\n            btn_root(*this),\n            tf_file_name(*this)\n        {\n            if (has_text_field == false)\n            {\n                tf_file_name.hide();\n                lbl_file_name.hide();\n            }\n            else\n            {\n                lbl_file_name.set_text(\"File: \");\n            }\n\n            cur_dir = -1;\n            set_size(500,300);\n\n            lbl_dirs.set_text(\"Directories:\");\n            lbl_files.set_text(\"Files:\");\n            btn_ok.set_name(\"Ok\");\n            btn_cancel.set_name(\"Cancel\");\n            btn_root.set_name(\"/\");\n\n            btn_root.set_click_handler(*this,&box_win::on_root_click);\n            btn_cancel.set_click_handler(*this,&box_win::on_cancel_click);\n            btn_ok.set_click_handler(*this,&box_win::on_open_click);\n            lb_dirs.set_double_click_handler(*this,&box_win::on_dirs_click);\n            lb_files.set_click_handler(*this,&box_win::on_files_click);\n            lb_files.set_double_click_handler(*this,&box_win::on_files_double_click);\n\n\n            btn_root.set_pos(5,5);\n\n            set_sizes();\n            set_title(title);\n\n            on_root_click();\n\n            // make it so that the file box starts out in our current working\n            // directory\n            std::string full_name(get_current_dir());\n\n            while (full_name.size() > 0)\n            {\n                std::string::size_type pos = full_name.find_first_of(\"\\\\/\");\n                std::string left(full_name.substr(0,pos));\n                if (pos != std::string::npos)\n                    full_name = full_name.substr(pos+1);\n                else\n                    full_name.clear();\n\n                if (left.size() > 0)\n                    enter_folder(left); \n            }\n\n\n            show();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        box_win::\n        ~box_win (\n        )\n        {\n            close_window();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        set_sizes(\n        )\n        {\n            unsigned long width, height;\n            get_size(width,height);\n\n\n            if (lbl_file_name.is_hidden())\n            {\n                lbl_dirs.set_pos(0,btn_root.bottom()+5);\n                lb_dirs.set_pos(0,lbl_dirs.bottom());\n                lb_dirs.set_size(width/2,height-lb_dirs.top()-btn_cancel.height()-10);\n\n                lbl_files.set_pos(lb_dirs.right(),btn_root.bottom()+5);\n                lb_files.set_pos(lb_dirs.right(),lbl_files.bottom());\n                lb_files.set_size(width-lb_files.left(),height-lb_files.top()-btn_cancel.height()-10);\n\n                btn_ok.set_pos(width - btn_ok.width()-25,lb_files.bottom()+5);\n                btn_cancel.set_pos(btn_ok.left() - btn_cancel.width()-5,lb_files.bottom()+5);\n            }\n            else\n            {\n\n                lbl_dirs.set_pos(0,btn_root.bottom()+5);\n                lb_dirs.set_pos(0,lbl_dirs.bottom());\n                lb_dirs.set_size(width/2,height-lb_dirs.top()-btn_cancel.height()-10-tf_file_name.height());\n\n                lbl_files.set_pos(lb_dirs.right(),btn_root.bottom()+5);\n                lb_files.set_pos(lb_dirs.right(),lbl_files.bottom());\n                lb_files.set_size(width-lb_files.left(),height-lb_files.top()-btn_cancel.height()-10-tf_file_name.height());\n\n                lbl_file_name.set_pos(lb_files.left(), lb_files.bottom()+8);\n                tf_file_name.set_pos(lbl_file_name.right(), lb_files.bottom()+5);\n                tf_file_name.set_width(width-tf_file_name.left()-5);\n\n                btn_ok.set_pos(width - btn_ok.width()-25,tf_file_name.bottom()+5);\n                btn_cancel.set_pos(btn_ok.left() - btn_cancel.width()-5,tf_file_name.bottom()+5);\n            }\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        on_window_resized (\n        )\n        {\n            set_sizes();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        deleter_thread (\n        ) \n        {  \n            close_window();\n            delete this; \n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        enter_folder (\n            const std::string& folder_name\n        )\n        {\n            if (btn_root.is_checked())\n                btn_root.set_unchecked();\n            if (cur_dir != -1)\n                sob[cur_dir]->set_unchecked();\n\n\n            const std::string old_path = path;\n            const long old_cur_dir = cur_dir;\n\n            scoped_ptr<toggle_button> new_btn(new toggle_button(*this));\n            new_btn->set_name(folder_name);\n            new_btn->set_click_handler(*this,&box_win::on_path_button_click);\n\n            // remove any path buttons that won't be part of the path anymore\n            if (sob.size())\n            {\n                while (sob.size() > (unsigned long)(cur_dir+1))\n                {\n                    scoped_ptr<toggle_button> junk;\n                    sob.remove(cur_dir+1,junk);\n                }\n            }\n\n            if (sob.size())\n                new_btn->set_pos(sob[sob.size()-1]->right()+5,sob[sob.size()-1]->top());\n            else\n                new_btn->set_pos(btn_root.right()+5,btn_root.top());\n\n            cur_dir = sob.size();\n            sob.add(sob.size(),new_btn);\n\n            path += folder_name + directory::get_separator();\n            if (set_dir(prefix + path) == false)\n            {\n                sob.remove(sob.size()-1,new_btn);\n                path = old_path;\n                cur_dir = old_cur_dir;\n            }\n            else\n            {\n\n                sob[cur_dir]->set_checked();\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        on_dirs_click (\n            unsigned long idx\n        )\n        {\n            enter_folder(lb_dirs[idx]);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        on_files_click (\n            unsigned long idx\n        )\n        {\n            if (tf_file_name.is_hidden() == false)\n            {\n                tf_file_name.set_text(lb_files[idx]);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        on_files_double_click (\n            unsigned long \n        )\n        {\n            on_open_click();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        on_cancel_click (\n        )\n        {\n            hide();\n            create_new_thread<box_win,&box_win::deleter_thread>(*this);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        on_open_click (\n        )\n        {\n            if (lb_files.get_selected() != lb_files.size() || tf_file_name.text().size() > 0)\n            {\n                if (event_handler.is_set())\n                {\n                    if (tf_file_name.is_hidden())\n                        event_handler(prefix + path + lb_files[lb_files.get_selected()]);\n                    else if (tf_file_name.text().size() > 0)\n                        event_handler(prefix + path + tf_file_name.text());\n                }\n                hide();\n                create_new_thread<box_win,&box_win::deleter_thread>(*this);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        on_path_button_click (\n            toggle_button& btn\n        )\n        {\n            if (btn_root.is_checked())\n                btn_root.set_unchecked();\n            if (cur_dir != -1)\n                sob[cur_dir]->set_unchecked();\n            std::string new_path;\n\n            for (unsigned long i = 0; i < sob.size(); ++i)\n            {\n                new_path += sob[i]->name() + directory::get_separator();\n                if (sob[i].get() == &btn)\n                {\n                    cur_dir = i;\n                    sob[i]->set_checked();\n                    break;\n                }\n            }\n            if (path != new_path)\n            {\n                path = new_path;\n                set_dir(prefix+path);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        struct case_insensitive_compare\n        {\n            bool operator() (\n                const std::string& a,\n                const std::string& b\n            ) const\n            {\n                std::string::size_type i, size;\n                size = std::min(a.size(),b.size());\n                for (i = 0; i < size; ++i)\n                {\n                    if (std::tolower(a[i]) < std::tolower(b[i]))\n                        return true;\n                    else if (std::tolower(a[i]) > std::tolower(b[i]))\n                        return false;\n                }\n                if (a.size() < b.size())\n                    return true;\n                else\n                    return false;\n            }\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        bool box_win::\n        set_dir (\n            const std::string& dir\n        )\n        {\n            try\n            {\n                directory d(dir);\n                queue<directory>::kernel_1a_c qod;\n                queue<file>::kernel_1a_c qof;\n                queue<std::string>::sort_1a_c qos;\n                d.get_dirs(qod);\n                d.get_files(qof);\n\n                qod.reset();\n                while (qod.move_next())\n                {\n                    std::string temp = qod.element().name();\n                    qos.enqueue(temp);\n                }\n                qos.sort(case_insensitive_compare());\n                lb_dirs.load(qos);\n                qos.clear();\n\n                qof.reset();\n                while (qof.move_next())\n                {\n                    std::string temp = qof.element().name();\n                    qos.enqueue(temp);\n                }\n                qos.sort(case_insensitive_compare());\n                lb_files.load(qos);\n                return true;\n            }\n            catch (directory::listing_error& )\n            {\n                return false;\n            }\n            catch (directory::dir_not_found&)\n            {\n                return false;\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void box_win::\n        on_root_click (\n        )\n        {\n            btn_root.set_checked();\n            if (cur_dir != -1)\n                sob[cur_dir]->set_unchecked();\n\n            queue<directory>::kernel_1a_c qod, qod2;\n            queue<file>::kernel_1a_c qof;\n            queue<std::string>::sort_1a_c qos;\n            get_filesystem_roots(qod);\n            path.clear();\n            cur_dir = -1;\n            if (qod.size() == 1)\n            {\n                qod.current().get_files(qof);\n                qod.current().get_dirs(qod2);\n                prefix = qod.current().full_name();\n\n                qod2.reset();\n                while (qod2.move_next())\n                {\n                    std::string temp = qod2.element().name();\n                    qos.enqueue(temp);\n                }\n                qos.sort(case_insensitive_compare());\n                lb_dirs.load(qos);\n                qos.clear();\n\n                qof.reset();\n                while (qof.move_next())\n                {\n                    std::string temp = qof.element().name();\n                    qos.enqueue(temp);\n                }\n                qos.sort(case_insensitive_compare());\n                lb_files.load(qos);\n            }\n            else\n            {\n                prefix.clear();\n                qod.reset();\n                while (qod.move_next())\n                {\n                    std::string temp = qod.element().full_name();\n                    temp = temp.substr(0,temp.size()-1);\n                    qos.enqueue(temp);\n                }\n                qos.sort(case_insensitive_compare());\n                lb_dirs.load(qos);\n                qos.clear();\n                lb_files.load(qos);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        base_window::on_close_return_code box_win::\n        on_window_close (\n        )\n        {\n            delete this;\n            return CLOSE_WINDOW;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class menu_bar\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    menu_bar::\n    menu_bar(\n        drawable_window& w\n    ) : \n        drawable(w, 0xFFFF), // listen for all events\n        open_menu(0)\n    {\n        adjust_position();\n        enable_events();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    menu_bar::\n    ~menu_bar()\n    { \n        disable_events(); \n        parent.invalidate_rectangle(rect); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        mfont = f;\n        adjust_position();\n        compute_menu_geometry();\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    set_number_of_menus (\n        unsigned long num\n    )\n    {\n        auto_mutex M(m);\n        menus.set_max_size(num);\n        menus.set_size(num);\n        open_menu = menus.size();\n        compute_menu_geometry();\n\n        for (unsigned long i = 0; i < menus.size(); ++i)\n        {\n            menus[i].menu.set_on_hide_handler(*this,&menu_bar::on_popup_hide);\n        }\n\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long menu_bar::\n    number_of_menus (\n    ) const\n    {\n        auto_mutex M(m);\n        return menus.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    set_menu_name (\n        unsigned long idx,\n        const std::string name,\n        char underline_ch \n    )\n    {\n        set_menu_name(idx, convert_mbstring_to_wstring(name), underline_ch);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    set_menu_name (\n        unsigned long idx,\n        const std::wstring name,\n        char underline_ch \n    )\n    {\n        set_menu_name(idx, convert_wstring_to_utf32(name), underline_ch);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    set_menu_name (\n        unsigned long idx,\n        const dlib::ustring name,\n        char underline_ch \n    )\n    {\n        DLIB_ASSERT ( idx < number_of_menus() ,\n                      \"\\tvoid menu_bar::set_menu_name()\"\n                      << \"\\n\\tidx:               \" << idx\n                      << \"\\n\\tnumber_of_menus(): \" << number_of_menus() \n        );\n        auto_mutex M(m);\n        menus[idx].name = name.c_str();\n        menus[idx].underline_pos = name.find_first_of(underline_ch);\n        compute_menu_geometry();\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string menu_bar::\n    menu_name (\n        unsigned long idx\n    ) const\n    {\n        return convert_wstring_to_mbstring(menu_wname(idx));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::wstring menu_bar::\n    menu_wname (\n        unsigned long idx\n    ) const\n    {\n        return convert_utf32_to_wstring(menu_uname(idx));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const dlib::ustring menu_bar::\n    menu_uname (\n        unsigned long idx\n    ) const\n    {\n        DLIB_ASSERT ( idx < number_of_menus() ,\n                      \"\\tstd::string menu_bar::menu_name()\"\n                      << \"\\n\\tidx:               \" << idx\n                      << \"\\n\\tnumber_of_menus(): \" << number_of_menus() \n        );\n        auto_mutex M(m);\n        return menus[idx].name.c_str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    popup_menu& menu_bar::\n    menu (\n        unsigned long idx\n    )\n    {\n        DLIB_ASSERT ( idx < number_of_menus() ,\n                      \"\\tpopup_menu& menu_bar::menu()\"\n                      << \"\\n\\tidx:               \" << idx\n                      << \"\\n\\tnumber_of_menus(): \" << number_of_menus() \n        );\n        auto_mutex M(m);\n        return menus[idx].menu;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const popup_menu& menu_bar::\n    menu (\n        unsigned long idx\n    ) const\n    {\n        DLIB_ASSERT ( idx < number_of_menus() ,\n                      \"\\tconst popup_menu& menu_bar::menu()\"\n                      << \"\\n\\tidx:               \" << idx\n                      << \"\\n\\tnumber_of_menus(): \" << number_of_menus() \n        );\n        auto_mutex M(m);\n        return menus[idx].menu;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    on_window_resized (\n    )\n    {\n        adjust_position();\n        hide_menu();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    draw (\n        const canvas& c\n    ) const\n    {\n        rectangle area(rect.intersect(c));\n        if (area.is_empty())\n            return;\n\n        const unsigned char opacity = 40;\n        fill_rect_with_vertical_gradient(c, rect,rgb_alpha_pixel(255,255,255,opacity),\n                                         rgb_alpha_pixel(0,0,0,opacity));\n\n        // first draw the border between the menu and the rest of the window\n        draw_line(c, point(rect.left(),rect.bottom()-1), \n                  point(rect.right(),rect.bottom()-1), 100);\n        draw_line(c, point(rect.left(),rect.bottom()), \n                  point(rect.right(),rect.bottom()), 255);\n\n        // now draw all the menu buttons\n        for (unsigned long i = 0; i < menus.size(); ++i)\n        {\n            mfont->draw_string(c,menus[i].rect, menus[i].name );\n            if (menus[i].underline_p1 != menus[i].underline_p2)\n                draw_line(c, menus[i].underline_p1, menus[i].underline_p2);\n\n            if (open_menu == i)\n            {\n                fill_rect_with_vertical_gradient(c, menus[i].bgrect,rgb_alpha_pixel(255,255,0,40),  rgb_alpha_pixel(0,0,0,40));\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    on_window_moved (\n    )\n    {\n        hide_menu();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    on_focus_lost (\n    )\n    {\n        hide_menu();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long ,\n        long x,\n        long y,\n        bool \n    )\n    {\n\n        if (rect.contains(x,y) == false || btn != (unsigned long)base_window::LEFT)\n        {\n            hide_menu();\n            return;\n        }\n\n        unsigned long old_menu = menus.size();\n\n        // if a menu is currently open then save its index\n        if (open_menu != menus.size())\n        {\n            old_menu = open_menu;\n            hide_menu();\n        }\n\n        // figure out which menu should be open if any\n        for (unsigned long i = 0; i < menus.size(); ++i)\n        {\n            if (menus[i].bgrect.contains(x,y))\n            {\n                if (old_menu != i)\n                    show_menu(i);\n\n                break;\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    on_mouse_move (\n        unsigned long ,\n        long x,\n        long y\n    )\n    {\n        // if the mouse is over the menu_bar and some menu is currently open\n        if (rect.contains(x,y) && open_menu != menus.size())\n        {\n            // if the mouse is still in the same rectangle then don't do anything\n            if (menus[open_menu].bgrect.contains(x,y) == false)\n            {\n                // figure out which menu should be instead   \n                for (unsigned long i = 0; i < menus.size(); ++i)\n                {\n                    if (menus[i].bgrect.contains(x,y))\n                    {\n                        show_menu(i);\n                        break;\n                    }\n                }\n\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    on_keydown (\n        unsigned long key,\n        bool is_printable,\n        unsigned long state\n    )\n    {\n        if (state&base_window::KBD_MOD_ALT)\n        {\n            // check if the key matches any of our underlined keys\n            for (unsigned long i = 0; i < menus.size(); ++i)\n            {\n                // if we have found a matching key\n                if (is_printable && \n                    menus[i].underline_pos != std::string::npos &&\n                    std::tolower(menus[i].name[menus[i].underline_pos]) == std::tolower(key))\n                {\n                    show_menu(i);\n                    menus[open_menu].menu.select_first_item();\n                    return;\n                }\n            }\n        }\n\n        if (open_menu != menus.size())\n        {\n            unsigned long i = open_menu;\n            // if the submenu doesn't use this key for something then we will\n            if (menus[open_menu].menu.forwarded_on_keydown(key,is_printable,state) == false)\n            {\n                if (key == base_window::KEY_LEFT)\n                {\n                    i = (i+menus.size()-1)%menus.size();\n                    show_menu(i);\n                    menus[open_menu].menu.select_first_item();\n                }\n                else if (key == base_window::KEY_RIGHT)\n                {\n                    i = (i+1)%menus.size();\n                    show_menu(i);\n                    menus[open_menu].menu.select_first_item();\n                }\n                else if (key == base_window::KEY_ESC)\n                {\n                    hide_menu();\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    show_menu (\n        unsigned long i\n    )\n    {\n        rectangle temp;\n\n        // menu already open so do nothing\n        if (i == open_menu)\n            return;\n\n        // if a menu is currently open\n        if (open_menu != menus.size())\n        {\n            menus[open_menu].menu.hide();\n            temp = menus[open_menu].bgrect;\n        }\n\n        // display the new menu\n        open_menu = i;\n        long wx, wy;\n        parent.get_pos(wx,wy);\n        wx += menus[i].bgrect.left();\n        wy += menus[i].bgrect.bottom()+1;\n        menus[i].menu.set_pos(wx,wy);\n        menus[i].menu.show();\n        parent.invalidate_rectangle(menus[i].bgrect+temp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    hide_menu (\n    )\n    {\n        // if a menu is currently open\n        if (open_menu != menus.size())\n        {\n            menus[open_menu].menu.hide();\n            parent.invalidate_rectangle(menus[open_menu].bgrect);\n            open_menu = menus.size();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    on_popup_hide (\n    )\n    {\n        // if a menu is currently open\n        if (open_menu != menus.size())\n        {\n            parent.invalidate_rectangle(menus[open_menu].bgrect);\n            open_menu = menus.size();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    compute_menu_geometry (\n    )\n    {\n        long x = 7;\n        long bg_x = 0;\n        for (unsigned long i = 0; i < menus.size(); ++i)\n        {\n            // compute the locations of the text rectangles\n            menus[i].rect.set_top(5);\n            menus[i].rect.set_left(x);\n            menus[i].rect.set_bottom(rect.bottom()-2);\n\n            unsigned long width, height;\n            mfont->compute_size(menus[i].name,width,height);\n            menus[i].rect = resize_rect_width(menus[i].rect, width);\n            x = menus[i].rect.right()+10;\n\n            menus[i].bgrect.set_top(0);\n            menus[i].bgrect.set_left(bg_x);\n            menus[i].bgrect.set_bottom(rect.bottom()-2);\n            menus[i].bgrect.set_right(x-5);\n            bg_x = menus[i].bgrect.right()+1;\n\n            if (menus[i].underline_pos != std::string::npos)\n            {\n                // now compute the location of the underline bar\n                rectangle r1 = mfont->compute_cursor_rect(\n                    menus[i].rect, \n                    menus[i].name,\n                    menus[i].underline_pos);\n\n                rectangle r2 = mfont->compute_cursor_rect(\n                    menus[i].rect, \n                    menus[i].name,\n                    menus[i].underline_pos+1);\n\n                menus[i].underline_p1.x() = r1.left()+1;\n                menus[i].underline_p2.x() = r2.left()-1;\n                menus[i].underline_p1.y() = r1.bottom()-mfont->height()+mfont->ascender()+2;\n                menus[i].underline_p2.y() = r2.bottom()-mfont->height()+mfont->ascender()+2;\n            }\n            else\n            {\n                // there is no underline in this case\n                menus[i].underline_p1 = menus[i].underline_p2;\n            }\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void menu_bar::\n    adjust_position (\n    )\n    {\n        unsigned long width, height;\n        rectangle old(rect);\n        parent.get_size(width,height);\n        rect.set_left(0);\n        rect.set_top(0);\n        rect = resize_rect(rect,width,mfont->height()+10);\n        parent.invalidate_rectangle(old+rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// class text_grid\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    text_grid::\n    text_grid (\n        drawable_window& w\n    ) :\n        scrollable_region(w, KEYBOARD_EVENTS | MOUSE_CLICK | FOCUS_EVENTS ),\n        has_focus(false),\n        cursor_timer(*this,&text_grid::timer_action),\n        border_color_(128,128,128)\n    {\n\n        cursor_timer.set_delay_time(500);\n        set_vertical_scroll_increment(10);\n        set_horizontal_scroll_increment(10);\n        enable_events();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    text_grid::\n    ~text_grid (\n    )\n    {\n        // Disable all further events for this drawable object.  We have to do this \n        // because we don't want draw() events coming to this object while or after \n        // it has been destructed.\n        disable_events();\n\n        // wait for the timer to stop doing its thing\n        cursor_timer.stop_and_wait();\n        // Tell the parent window to redraw its area that previously contained this\n        // drawable object.\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_grid_size (\n        unsigned long rows,\n        unsigned long cols\n    )\n    {\n        auto_mutex M(m);\n        row_height.set_max_size(rows);\n        row_height.set_size(rows);\n\n        col_width.set_max_size(cols);\n        col_width.set_size(cols);\n\n        grid.set_size(rows,cols);\n\n        for (unsigned long i = 0; i < row_height.size(); ++i)\n            row_height[i] = (mfont->height()*3)/2;\n        for (unsigned long i = 0; i < col_width.size(); ++i)\n            col_width[i] = mfont->height()*5;\n\n        compute_total_rect();\n        compute_bg_rects();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long text_grid::\n    number_of_columns (\n    ) const\n    {\n        auto_mutex M(m);\n        return grid.nc();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long text_grid::\n    number_of_rows (\n    ) const\n    {\n        auto_mutex M(m);\n        return grid.nr();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int text_grid::\n    next_free_user_event_number (\n    ) const\n    {\n        return scrollable_region::next_free_user_event_number()+1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rgb_pixel text_grid::\n    border_color (\n    ) const\n    {\n        auto_mutex M(m);\n        return border_color_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_border_color (\n        rgb_pixel color\n    )\n    {\n        auto_mutex M(m);\n        border_color_ = color;\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string text_grid::\n    text (\n        unsigned long row,\n        unsigned long col\n    ) const\n    {\n        return convert_wstring_to_mbstring(wtext(row, col));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::wstring text_grid::\n    wtext (\n        unsigned long row,\n        unsigned long col\n    ) const\n    {\n        return convert_utf32_to_wstring(utext(row, col));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const dlib::ustring text_grid::\n    utext (\n        unsigned long row,\n        unsigned long col\n    ) const\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( row < number_of_rows()  && col < number_of_columns(),\n                      \"\\tconst std::string text_grid::text(row,col)\"\n                      << \"\\n\\trow:              \" << row \n                      << \"\\n\\tcol:              \" << col \n                      << \"\\n\\tnumber_of_rows(): \" << number_of_rows() \n                      << \"\\n\\tnumber_of_columns(): \" << number_of_columns() \n                      << \"\\n\\tthis:             \" << this\n        );\n        return grid[row][col].text.c_str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_text (\n        unsigned long row,\n        unsigned long col,\n        const std::string& str\n    ) \n    {\n        set_text(row, col, convert_mbstring_to_wstring(str));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_text (\n        unsigned long row,\n        unsigned long col,\n        const std::wstring& str\n    ) \n    {\n        set_text(row, col, convert_wstring_to_utf32(str));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_text (\n        unsigned long row,\n        unsigned long col,\n        const dlib::ustring& str\n    ) \n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( row < number_of_rows()  && col < number_of_columns(),\n                      \"\\tvoid text_grid::set_text(row,col)\"\n                      << \"\\n\\trow:              \" << row \n                      << \"\\n\\tcol:              \" << col \n                      << \"\\n\\tnumber_of_rows(): \" << number_of_rows() \n                      << \"\\n\\tnumber_of_columns(): \" << number_of_columns() \n                      << \"\\n\\tthis:             \" << this\n        );\n        grid[row][col].text = str.c_str();\n        parent.invalidate_rectangle(get_text_rect(row,col));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const rgb_pixel text_grid::\n    text_color (\n        unsigned long row,\n        unsigned long col\n    ) const\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( row < number_of_rows()  && col < number_of_columns(),\n                      \"\\tconst rgb_pixel text_grid::text_color(row,col)\"\n                      << \"\\n\\trow:              \" << row \n                      << \"\\n\\tcol:              \" << col \n                      << \"\\n\\tnumber_of_rows(): \" << number_of_rows() \n                      << \"\\n\\tnumber_of_columns(): \" << number_of_columns() \n                      << \"\\n\\tthis:             \" << this\n        );\n        return grid[row][col].text_color;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_text_color (\n        unsigned long row,\n        unsigned long col,\n        const rgb_pixel color\n    ) \n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( row < number_of_rows()  && col < number_of_columns(),\n                      \"\\tvoid text_grid::set_text_color(row,col,color)\"\n                      << \"\\n\\trow:              \" << row \n                      << \"\\n\\tcol:              \" << col \n                      << \"\\n\\tnumber_of_rows(): \" << number_of_rows() \n                      << \"\\n\\tnumber_of_columns(): \" << number_of_columns() \n                      << \"\\n\\tthis:             \" << this\n        );\n        grid[row][col].text_color = color;\n        parent.invalidate_rectangle(get_text_rect(row,col));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const rgb_pixel text_grid::\n    background_color (\n        unsigned long row,\n        unsigned long col\n    ) const\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( row < number_of_rows()  && col < number_of_columns(),\n                      \"\\tconst rgb_pixel text_grid::background_color(row,col,color)\"\n                      << \"\\n\\trow:              \" << row \n                      << \"\\n\\tcol:              \" << col \n                      << \"\\n\\tnumber_of_rows(): \" << number_of_rows() \n                      << \"\\n\\tnumber_of_columns(): \" << number_of_columns() \n                      << \"\\n\\tthis:             \" << this\n        );\n        return grid[row][col].bg_color;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_background_color (\n        unsigned long row,\n        unsigned long col,\n        const rgb_pixel color\n    ) \n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( row < number_of_rows()  && col < number_of_columns(),\n                      \"\\tvoid text_grid::set_background_color(row,col,color)\"\n                      << \"\\n\\trow:              \" << row \n                      << \"\\n\\tcol:              \" << col \n                      << \"\\n\\tnumber_of_rows(): \" << number_of_rows() \n                      << \"\\n\\tnumber_of_columns(): \" << number_of_columns() \n                      << \"\\n\\tthis:             \" << this\n        );\n        grid[row][col].bg_color = color;\n        parent.invalidate_rectangle(get_bg_rect(row,col));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool text_grid::\n    is_editable (\n        unsigned long row,\n        unsigned long col\n    ) const\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( row < number_of_rows()  && col < number_of_columns(),\n                      \"\\tbool text_grid::is_editable(row,col)\"\n                      << \"\\n\\trow:              \" << row \n                      << \"\\n\\tcol:              \" << col \n                      << \"\\n\\tnumber_of_rows(): \" << number_of_rows() \n                      << \"\\n\\tnumber_of_columns(): \" << number_of_columns() \n                      << \"\\n\\tthis:             \" << this\n        );\n        return grid[row][col].is_editable;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_editable (\n        unsigned long row,\n        unsigned long col,\n        bool editable\n    ) \n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( row < number_of_rows()  && col < number_of_columns(),\n                      \"\\tvoid text_grid::set_editable(row,col,editable)\"\n                      << \"\\n\\trow:              \" << row \n                      << \"\\n\\tcol:              \" << col \n                      << \"\\n\\tnumber_of_rows(): \" << number_of_rows() \n                      << \"\\n\\tnumber_of_columns(): \" << number_of_columns() \n                      << \"\\n\\teditable:         \" << editable \n                      << \"\\n\\tthis:             \" << this\n        );\n        grid[row][col].is_editable = editable;\n        if (has_focus && active_row == static_cast<long>(row) && active_col == static_cast<long>(col))\n        {\n            drop_input_focus();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_column_width (\n        unsigned long col,\n        unsigned long width\n    )\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( col < number_of_columns(),\n                      \"\\tvoid text_grid::set_column_width(col,width)\"\n                      << \"\\n\\tcol:              \" << col \n                      << \"\\n\\tnumber_of_columns(): \" << number_of_columns() \n                      << \"\\n\\twidth:            \" << width \n                      << \"\\n\\tthis:             \" << this\n        );\n        col_width[col] = width;\n        compute_total_rect();\n        compute_bg_rects();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    set_row_height (\n        unsigned long row,\n        unsigned long height \n    )\n    {\n        auto_mutex M(m);\n        DLIB_ASSERT ( row < number_of_rows() ,\n                      \"\\tvoid text_grid::set_row_height(row,height)\"\n                      << \"\\n\\trow:              \" << row \n                      << \"\\n\\tnumber_of_rows(): \" << number_of_rows() \n                      << \"\\n\\theight:           \" << height \n                      << \"\\n\\tthis:             \" << this\n        );\n        row_height[row] = height;\n        compute_total_rect();\n        compute_bg_rects();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    disable (\n    ) \n    {\n        auto_mutex M(m);\n        scrollable_region::disable();\n        drop_input_focus();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    hide (\n    ) \n    {\n        auto_mutex M(m);\n        scrollable_region::hide();\n        drop_input_focus();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    on_user_event (\n        int num\n    )\n    {\n        // ignore this user event if it isn't for us\n        if (num != scrollable_region::next_free_user_event_number())\n            return;\n\n        if (has_focus && !recent_cursor_move && enabled && !hidden)\n        {\n            show_cursor = !show_cursor;\n            parent.invalidate_rectangle(get_text_rect(active_row,active_col));\n        }\n        recent_cursor_move = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    timer_action (\n    ) \n    { \n        parent.trigger_user_event(this,scrollable_region::next_free_user_event_number()); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    compute_bg_rects (\n    )\n    {\n        // loop over each element in the grid and figure out what its rectangle should be\n        // with respect to the total_rect()\n        point p1, p2;\n        p1.y() = total_rect().top();\n        for (long row = 0; row < grid.nr(); ++row)\n        {\n            p1.x() = total_rect().left();\n            p2.y() = p1.y() + row_height[row]-1;\n            for (long col = 0; col < grid.nc(); ++col)\n            {\n                // if this is the last box in this row make it super wide so that it always\n                // goes to the end of the widget\n                if (col+1 == grid.nc())\n                    p2.x() = 1000000;\n                else\n                    p2.x() = p1.x() + col_width[col]-1;\n\n                // at this point p1 is the upper left corner of this box and p2 is the \n                // lower right corner of the box;\n                rectangle bg_rect(p1);\n                bg_rect += p2;\n\n                grid[row][col].bg_rect = translate_rect(bg_rect, -total_rect().left(), -total_rect().top());\n\n\n                p1.x() += 1 + col_width[col];\n            }\n            p1.y() += 1 + row_height[row];\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    compute_total_rect (\n    )\n    {\n        if (grid.size() == 0)\n        {\n            set_total_rect_size(0,0);\n        }\n        else\n        {\n            unsigned long width = col_width.size()-1;\n            unsigned long height = row_height.size()-1;\n\n            for (unsigned long i = 0; i < col_width.size(); ++i)\n                width += col_width[i];\n            for (unsigned long i = 0; i < row_height.size(); ++i)\n                height += row_height[i];\n\n            set_total_rect_size(width,height);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    on_keydown (\n        unsigned long key,          \n        bool is_printable,\n        unsigned long state\n    )\n    {\n        // ignore this event if we are disabled or hidden\n        if (!enabled || hidden)\n            return;\n\n        if (has_focus)\n        {\n            if (is_printable)\n            {\n                // if the user hit the tab key then jump to the next box\n                if (key == '\\t')\n                {\n                    if (active_col+1 == grid.nc())\n                    {\n                        if (active_row+1 == grid.nr())\n                            move_cursor(0,0,0);\n                        else\n                            move_cursor(active_row+1,0,0);\n                    }\n                    else\n                    {\n                        move_cursor(active_row,active_col+1,0);\n                    }\n                }\n                if (key == '\\n')\n                {\n                    // ignore the enter key\n                }\n                else if (grid[active_row][active_col].is_editable)\n                {\n                    // insert the key the user pressed into the string\n                    grid[active_row][active_col].text.insert(cursor_pos,1,static_cast<char>(key));\n                    move_cursor(active_row,active_col,cursor_pos+1);\n\n                    if (text_modified_handler.is_set())\n                        text_modified_handler(active_row,active_col);\n                }\n            }\n            else if ((state & base_window::KBD_MOD_CONTROL))\n            {\n                if (key == base_window::KEY_LEFT)\n                    move_cursor(active_row,active_col-1,0);\n                else if (key == base_window::KEY_RIGHT)\n                    move_cursor(active_row,active_col+1,0);\n                else if (key == base_window::KEY_UP)\n                    move_cursor(active_row-1,active_col,0);\n                else if (key == base_window::KEY_DOWN)\n                    move_cursor(active_row+1,active_col,0);\n                else if (key == base_window::KEY_END)\n                    move_cursor(active_row,active_col,grid[active_row][active_col].text.size());\n                else if (key == base_window::KEY_HOME)\n                    move_cursor(active_row,active_col,0);\n            }\n            else\n            {\n                if (key == base_window::KEY_LEFT)\n                    move_cursor(active_row,active_col,cursor_pos-1);\n                else if (key == base_window::KEY_RIGHT)\n                    move_cursor(active_row,active_col,cursor_pos+1);\n                else if (key == base_window::KEY_UP)\n                    move_cursor(active_row-1,active_col,0);\n                else if (key == base_window::KEY_DOWN)\n                    move_cursor(active_row+1,active_col,0);\n                else if (key == base_window::KEY_END)\n                    move_cursor(active_row,active_col,grid[active_row][active_col].text.size());\n                else if (key == base_window::KEY_HOME)\n                    move_cursor(active_row,active_col,0);\n                else if (key == base_window::KEY_BACKSPACE)\n                {\n                    if (cursor_pos > 0 && grid[active_row][active_col].is_editable)\n                    {\n                        grid[active_row][active_col].text.erase(\n                            grid[active_row][active_col].text.begin()+cursor_pos-1,\n                            grid[active_row][active_col].text.begin()+cursor_pos);\n                        move_cursor(active_row,active_col,cursor_pos-1);\n\n                        if (text_modified_handler.is_set())\n                            text_modified_handler(active_row,active_col);\n                    }\n                }\n                else if (key == base_window::KEY_DELETE)\n                {\n                    if (cursor_pos < static_cast<long>(grid[active_row][active_col].text.size()) &&\n                        grid[active_row][active_col].is_editable)\n                    {\n                        grid[active_row][active_col].text.erase(\n                            grid[active_row][active_col].text.begin()+cursor_pos);\n                        move_cursor(active_row,active_col,cursor_pos);\n\n                        if (text_modified_handler.is_set())\n                            text_modified_handler(active_row,active_col);\n                    }\n                }\n            }\n        } // if (has_focus)\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y,\n        bool is_double_click\n    )\n    {\n        scrollable_region::on_mouse_down(btn, state, x, y, is_double_click);\n        if (display_rect().contains(x,y) && enabled && !hidden)\n        {\n            // figure out which box this click landed in\n            rectangle hit;\n\n            // find which column we hit\n            unsigned long col = 0;\n            long box_x = total_rect().left();\n            for (unsigned long i = 0; i < col_width.size(); ++i)\n            {\n                if (box_x <= x && (x < box_x+static_cast<long>(col_width[i]) || (i+1 == col_width.size())))\n                {\n                    col = i;\n                    hit.set_left(box_x);\n                    hit.set_right(box_x+col_width[i]-1);\n                    break;\n                }\n                else\n                {\n                    box_x += col_width[i]+1;\n                }\n            }\n\n            // find which row we hit\n            unsigned long row = 0;\n            long box_y = total_rect().top();\n            for (unsigned long i = 0; i < row_height.size(); ++i)\n            {\n                if (box_y <= y && y < box_y+static_cast<long>(row_height[i]))\n                {\n                    row = i;\n                    hit.set_top(box_y);\n                    hit.set_bottom(box_y+row_height[i]-1);\n                    break;\n                }\n                else\n                {\n                    box_y += row_height[i]+1;\n                }\n            }\n\n            // if we hit a box\n            if (hit.is_empty() == false)\n            {\n                move_cursor(row, \n                            col,\n                            mfont->compute_cursor_pos(get_text_rect(row,col), grid[row][col].text, x, y, grid[row][col].first)\n                );\n            }\n            else\n            {\n                drop_input_focus();\n            }\n        }\n        else\n        {\n            drop_input_focus();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    on_mouse_up (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y\n    ) \n    {\n        scrollable_region::on_mouse_up(btn, state, x, y);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    on_focus_lost (\n    )\n    {\n        drop_input_focus();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    draw (\n        const canvas& c\n    ) const\n    {\n        scrollable_region::draw(c);\n        rectangle area = c.intersect(display_rect());\n        if (area.is_empty() == true)\n            return;\n\n        if (enabled)\n            fill_rect(c, area, 255); \n\n        // don't do anything if the grid is empty\n        if (grid.size() == 0)\n            return;\n\n        // draw all the vertical lines\n        point p1, p2;\n        p1.x() = p2.x() = total_rect().left();\n        p1.y() = total_rect().top();\n        p2.y() = total_rect().bottom();\n        for (unsigned long i = 0; i < col_width.size()-1; ++i)\n        {\n            p1.x() += col_width[i];\n            p2.x() += col_width[i];\n            if (enabled)\n                draw_line(c,p1,p2,border_color_,area);\n            else\n                draw_line(c,p1,p2,128,area);\n            p1.x() += 1;\n            p2.x() += 1;\n        }\n\n        // draw all the horizontal lines\n        p1.y() = p2.y() = total_rect().top();\n        p1.x() = display_rect().left();\n        p2.x() = display_rect().right();\n        for (unsigned long i = 0; i < row_height.size(); ++i)\n        {\n            p1.y() += row_height[i];\n            p2.y() += row_height[i];\n            if (enabled)\n                draw_line(c,p1,p2,border_color_,area);\n            else\n                draw_line(c,p1,p2,128,area);\n            p1.y() += 1;\n            p2.y() += 1;\n        }\n\n        // draw the backgrounds and text for each box\n        for (long row = 0; row < grid.nr(); ++row)\n        {\n            for (long col = 0; col < grid.nc(); ++col)\n            {\n                rectangle bg_rect(get_bg_rect(row,col));\n\n                rectangle text_rect(get_text_rect(row,col));\n\n                if (enabled)\n                {\n                    fill_rect(c,bg_rect.intersect(area),grid[row][col].bg_color);\n\n                    mfont->draw_string(c,\n                                       text_rect, \n                                       grid[row][col].text, \n                                       grid[row][col].text_color, \n                                       grid[row][col].first, \n                                       std::string::npos, \n                                       area);\n                }\n                else\n                {\n                    mfont->draw_string(c,\n                                       text_rect, \n                                       grid[row][col].text, \n                                       128, \n                                       grid[row][col].first, \n                                       std::string::npos, \n                                       area);\n                }\n\n                // if this box has input focus then draw it with a cursor\n                if (has_focus && active_col == col && active_row == row && show_cursor)\n                {\n                    rectangle cursor_rect = mfont->compute_cursor_rect(text_rect,\n                                                                       grid[row][col].text,\n                                                                       cursor_pos,\n                                                                       grid[row][col].first);\n                    draw_rectangle(c,cursor_rect,0,area);\n                }\n\n            }\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle text_grid::\n    get_text_rect (\n        unsigned long row,\n        unsigned long col\n    ) const\n    {\n        rectangle bg_rect(get_bg_rect(row,col));\n        long padding = (bg_rect.height() - mfont->height())/2 + (bg_rect.height() - mfont->height())%2;\n        if (padding < 0)\n            padding = 0;\n        bg_rect.set_left(bg_rect.left()+padding);\n        bg_rect.set_top(bg_rect.top()+padding);\n        bg_rect.set_right(bg_rect.right()-padding);\n        bg_rect.set_bottom(bg_rect.bottom()-padding);\n        return bg_rect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle text_grid::\n    get_bg_rect (\n        unsigned long row,\n        unsigned long col\n    ) const\n    {\n        return translate_rect(grid[row][col].bg_rect, total_rect().left(), total_rect().top());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    drop_input_focus (\n    )\n    {\n        if (has_focus)\n        {\n            parent.invalidate_rectangle(get_text_rect(active_row,active_col));\n            has_focus = false;\n            show_cursor = false;\n            cursor_timer.stop();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_grid::\n    move_cursor (\n        long row,\n        long col,\n        long new_cursor_pos\n    )\n    {\n        // don't do anything if the grid is empty\n        if (grid.size() == 0)\n        {\n            return;\n        }\n\n        if (row < 0)\n            row = 0;\n        if (row >= grid.nr())\n            row = grid.nr()-1;\n        if (col < 0)\n            col = 0;\n        if (col >= grid.nc())\n            col = grid.nc()-1;\n\n        if (new_cursor_pos < 0)\n        {\n            if (col == 0)\n            {\n                new_cursor_pos = 0;\n            }\n            else \n            {\n                --col;\n                new_cursor_pos = grid[row][col].text.size();\n            }\n        }\n\n        if (new_cursor_pos > static_cast<long>(grid[row][col].text.size()))\n        {\n            if (col+1 == grid.nc())\n            {\n                new_cursor_pos = grid[row][col].text.size();\n            }\n            else \n            {\n                ++col;\n                new_cursor_pos = 0;\n            }\n        }\n\n        // if some other box had the input focus then redraw it\n        if (has_focus && (active_row != row || active_col != col ))\n        {\n            parent.invalidate_rectangle(get_text_rect(active_row,active_col));\n        }\n\n        if (has_focus == false)\n        {\n            cursor_timer.start();\n        }\n\n        has_focus = true;\n        recent_cursor_move = true;\n        show_cursor = true;\n        active_row = row;\n        active_col = col;\n        cursor_pos = new_cursor_pos;\n\n        // adjust the first character to draw so that the string is displayed well\n        rectangle text_rect(get_text_rect(active_row,active_col));\n        rectangle cursor_rect = mfont->compute_cursor_rect(text_rect,\n                                                           grid[row][col].text,\n                                                           cursor_pos,\n                                                           grid[row][col].first);\n\n        // if the cursor rect is too far to the left of the string\n        if (cursor_pos < static_cast<long>(grid[row][col].first))\n        {\n            if (cursor_pos > 5)\n            {\n                grid[row][col].first = cursor_pos - 5;\n            }\n            else\n            {\n                grid[row][col].first = 0;\n            }\n        }\n        // if the cursor rect is too far to the right of the string\n        else if (cursor_rect.left() > text_rect.right())\n        {\n            long distance = (cursor_rect.left() - text_rect.right()) + text_rect.width()/3;\n            // find the letter that is distance pixels from the start of the string\n            long sum = 0;\n            for (unsigned long i = grid[row][col].first; i < grid[row][col].text.size(); ++i)\n            {\n                sum += (*mfont)[grid[row][col].text[i]].width();\n                if (sum >= distance)\n                {\n                    grid[row][col].first = i;\n                    break;\n                }\n            }\n        }\n\n        scroll_to_rect(get_bg_rect(row,col));\n\n        // redraw our box\n        parent.invalidate_rectangle(text_rect);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // text_field object methods  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    rectangle text_box::\n    get_text_rect (\n    ) const\n    {\n        const unsigned long padding = style->get_padding(*mfont);\n\n        rectangle text_rect;\n        text_rect.set_left(total_rect().left()+padding);\n        text_rect.set_top(total_rect().top()+padding);\n        text_rect.set_right(total_rect().right()-padding);\n        text_rect.set_bottom(total_rect().bottom()-padding);\n        return text_rect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    enable (\n    )\n    {\n        scrollable_region::enable();\n        right_click_menu.enable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_cut (\n    )\n    {\n        on_copy();\n        on_delete_selected();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_copy (\n    )\n    {\n        if (highlight_start <= highlight_end)\n        {\n            put_on_clipboard(text_.substr(highlight_start, highlight_end-highlight_start+1));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_paste (\n    )\n    {\n        ustring temp_str;\n        get_from_clipboard(temp_str);\n\n\n        if (highlight_start <= highlight_end)\n        {\n            text_ = text_.substr(0,highlight_start) + temp_str +\n                text_.substr(highlight_end+1,text_.size()-highlight_end-1);\n            move_cursor(highlight_start+temp_str.size());\n            highlight_start = 0;\n            highlight_end = -1;\n            parent.invalidate_rectangle(rect);\n            on_no_text_selected();\n\n            // send out the text modified event\n            if (text_modified_handler.is_set())\n                text_modified_handler();\n        }\n        else\n        {\n            text_ = text_.substr(0,cursor_pos) + temp_str +\n                text_.substr(cursor_pos,text_.size()-cursor_pos);\n            move_cursor(cursor_pos+temp_str.size());\n\n            // send out the text modified event\n            if (temp_str.size() != 0 && text_modified_handler.is_set())\n                text_modified_handler();\n        }\n\n        adjust_total_rect();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_select_all (\n    )\n    {\n        move_cursor(static_cast<long>(text_.size()));\n        highlight_start = 0;\n        highlight_end = static_cast<long>(text_.size()-1);\n        if (highlight_start <= highlight_end)\n            on_text_is_selected();\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_delete_selected (\n    )\n    {\n        if (highlight_start <= highlight_end)\n        {\n            text_ = text_.erase(highlight_start,highlight_end-highlight_start+1);\n            move_cursor(highlight_start);\n            highlight_start = 0;\n            highlight_end = -1;\n\n            on_no_text_selected();\n            // send out the text modified event\n            if (text_modified_handler.is_set())\n                text_modified_handler();\n\n            adjust_total_rect();\n\n            parent.invalidate_rectangle(rect);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_text_is_selected (\n    )\n    {\n        right_click_menu.menu().enable_menu_item(0);\n        right_click_menu.menu().enable_menu_item(1);\n        right_click_menu.menu().enable_menu_item(3);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_no_text_selected (\n    )\n    {\n        right_click_menu.menu().disable_menu_item(0);\n        right_click_menu.menu().disable_menu_item(1);\n        right_click_menu.menu().disable_menu_item(3);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    show (\n    )\n    {\n        scrollable_region::show();\n        right_click_menu.show();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    disable (\n    )\n    {\n        auto_mutex M(m);\n        scrollable_region::disable();\n        t.stop();\n        has_focus = false;\n        cursor_visible = false;\n        right_click_menu.disable();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    hide (\n    )\n    {\n        auto_mutex M(m);\n        scrollable_region::hide();\n        t.stop();\n        has_focus = false;\n        cursor_visible = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    adjust_total_rect (\n    )\n    {\n        const unsigned long padding = style->get_padding(*mfont);\n        unsigned long text_width;\n        unsigned long text_height;\n\n        mfont->compute_size(text_, text_width, text_height);\n\n        set_total_rect_size(text_width + padding*2, text_height + padding*2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    set_main_font (\n        const shared_ptr_thread_safe<font>& f\n    )\n    {\n        auto_mutex M(m);\n        mfont = f;\n        adjust_total_rect();\n        right_click_menu.set_rect(display_rect());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    draw (\n        const canvas& c\n    ) const\n    {\n        scrollable_region::draw(c);\n        rectangle area = rect.intersect(c);\n        if (area.is_empty())\n            return;\n       \n        const point origin(total_rect().left(), total_rect().top());\n\n        style->draw_text_box(c,display_rect(),get_text_rect(), enabled, *mfont, text_, \n                             translate_rect(cursor_rect, origin), \n                               text_color_, bg_color_, has_focus, cursor_visible, highlight_start,\n                               highlight_end);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    set_text (\n        const std::string& text\n    )\n    {\n        set_text(convert_mbstring_to_wstring(text));\n    }\n\n    void text_box::\n    set_text (\n        const std::wstring& text\n    )\n    {\n        set_text(convert_wstring_to_utf32(text));\n    }\n\n    void text_box::\n    set_text (\n        const dlib::ustring& text\n    )\n    {\n        auto_mutex M(m);\n        // do this to get rid of any reference counting that may be present in \n        // the std::string implementation.\n        text_ = text.c_str();\n                \n        adjust_total_rect();\n        move_cursor(0);\n\n        highlight_start = 0;\n        highlight_end = -1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string text_box::\n    text (\n    ) const\n    {\n        std::string temp = convert_wstring_to_mbstring(wtext());\n        return temp;\n    }\n\n    const std::wstring text_box::\n    wtext (\n    ) const\n    {\n        std::wstring temp = convert_utf32_to_wstring(utext());\n        return temp;\n    }\n    \n    const dlib::ustring text_box::\n    utext (\n    ) const\n    {\n        auto_mutex M(m);\n        // do this to get rid of any reference counting that may be present in \n        // the dlib::ustring implementation.\n        dlib::ustring temp = text_.c_str();\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    set_size (\n        unsigned long width,\n        unsigned long height \n    )\n    {        \n        auto_mutex M(m);\n        scrollable_region::set_size(width,height);\n        right_click_menu.set_rect(display_rect());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    set_pos (\n        long x,\n        long y\n    )\n    {\n        scrollable_region::set_pos(x,y);\n        right_click_menu.set_rect(get_text_rect());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    set_background_color (\n        const rgb_pixel color\n    )\n    {\n        auto_mutex M(m);\n        bg_color_ = color;\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const rgb_pixel text_box::\n    background_color (\n    ) const\n    {\n        auto_mutex M(m);\n        return bg_color_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    set_text_color (\n        const rgb_pixel color\n    )\n    {\n        auto_mutex M(m);\n        text_color_ = color;\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const rgb_pixel text_box::\n    text_color (\n    ) const\n    {\n        auto_mutex M(m);\n        return text_color_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_mouse_move (\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        if (!enabled || hidden || !has_focus)\n        {\n            return;\n        }\n\n        if (state & base_window::LEFT)\n        {\n            if (highlight_start <= highlight_end)\n            {\n                if (highlight_start == cursor_pos)\n                    shift_pos = highlight_end + 1;\n                else\n                    shift_pos = highlight_start;\n            }\n\n            unsigned long new_pos = mfont->compute_cursor_pos(get_text_rect(),text_,x,y);\n            if (static_cast<long>(new_pos) != cursor_pos)\n            {\n                move_cursor(new_pos);\n                parent.invalidate_rectangle(rect);\n            }\n        }\n        else if (shift_pos != -1)\n        {\n            shift_pos = -1;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_mouse_up (\n        unsigned long btn,\n        unsigned long,\n        long ,\n        long \n    )\n    {\n        if (!enabled || hidden)\n            return;\n\n        if (btn == base_window::LEFT)\n            shift_pos = -1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y,\n        bool double_clicked \n    )\n    {\n        using namespace std;\n        if (!enabled || hidden || btn != (unsigned long)base_window::LEFT)\n            return;\n\n        if (display_rect().contains(x,y))\n        {\n            has_focus = true;\n            cursor_visible = true;\n            parent.invalidate_rectangle(rect);\n            t.start();\n\n            \n            if (double_clicked)\n            {\n                // highlight the double clicked word\n                string::size_type first, last;\n                const ustring ustr = convert_utf8_to_utf32(std::string(\" \\t\\n\"));\n                first = text_.substr(0,cursor_pos).find_last_of(ustr.c_str());\n                last = text_.find_first_of(ustr.c_str(),cursor_pos);\n                long f = static_cast<long>(first);\n                long l = static_cast<long>(last);\n                if (first == string::npos)\n                    f = -1;\n                if (last == string::npos)\n                    l = static_cast<long>(text_.size());\n\n                ++f;\n                --l;\n\n                move_cursor(l+1);\n                highlight_start = f;\n                highlight_end = l;\n                on_text_is_selected();\n            }\n            else\n            {\n                if (state & base_window::SHIFT)\n                {\n                    if (highlight_start <= highlight_end)\n                    {\n                        if (highlight_start == cursor_pos)\n                            shift_pos = highlight_end + 1;\n                        else\n                            shift_pos = highlight_start;\n                    }\n                    else\n                    {\n                        shift_pos = cursor_pos;\n                    }\n                }\n\n                bool at_end = false;\n                if (cursor_pos == 0 || cursor_pos == static_cast<long>(text_.size()))\n                    at_end = true;\n                const long old_pos = cursor_pos;\n\n                unsigned long new_pos = mfont->compute_cursor_pos(get_text_rect(),text_,x,y);\n                move_cursor(new_pos);\n\n                shift_pos = cursor_pos;\n\n                if (at_end && cursor_pos == old_pos)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                }\n            }\n\n        }\n        else if (has_focus && rect.contains(x,y) == false)\n        {\n            t.stop();\n            has_focus = false;\n            cursor_visible = false;\n            shift_pos = -1;\n            highlight_start = 0;\n            highlight_end = -1;\n            on_no_text_selected();\n\n            if (focus_lost_handler.is_set())\n                focus_lost_handler();\n            parent.invalidate_rectangle(rect);\n        }\n        else\n        {\n            has_focus = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    on_keydown (\n        unsigned long key,\n        bool is_printable,\n        unsigned long state\n    )\n    {\n        // If the right click menu is up then we don't want to do anything with\n        // the keyboard ourselves.  Let the popup menu use the keyboard for now.\n        if (right_click_menu.popup_menu_visible())\n            return;\n\n        if (has_focus && enabled && !hidden)\n        {\n            const ustring space_str = convert_utf8_to_utf32(std::string(\" \\t\\n\"));\n            const bool shift = (state&base_window::KBD_MOD_SHIFT) != 0;\n            const bool ctrl = (state&base_window::KBD_MOD_CONTROL) != 0;\n\n            if (shift && is_printable == false)\n            {\n                if (shift_pos == -1)\n                {\n                    if (highlight_start <= highlight_end)\n                    {\n                        if (highlight_start == cursor_pos)\n                            shift_pos = highlight_end + 1;\n                        else\n                            shift_pos = highlight_start;\n                    }\n                    else\n                    {\n                        shift_pos = cursor_pos;\n                    }\n                }\n            }\n            else\n            {\n                shift_pos = -1;\n            }\n\n            if (key == base_window::KEY_LEFT)\n            {\n                if (cursor_pos != 0)\n                {\n                    unsigned long new_pos;\n                    if (ctrl)\n                    {\n                        // find the first non-whitespace to our left\n                        std::string::size_type pos = text_.find_last_not_of(space_str.c_str(),cursor_pos);\n                        if (pos != std::string::npos)\n                        {\n                            pos = text_.find_last_of(space_str.c_str(),pos);\n                            if (pos != std::string::npos)\n                                new_pos = static_cast<unsigned long>(pos);\n                            else\n                                new_pos = 0;\n                        }\n                        else\n                        {\n                            new_pos = 0;\n                        }\n                    }\n                    else\n                    {\n                        new_pos = cursor_pos-1;\n                    }\n\n                    move_cursor(new_pos);\n                }\n                else if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n\n            }\n            else if (key == base_window::KEY_RIGHT)\n            {\n                if (cursor_pos != static_cast<long>(text_.size()))\n                {\n                    unsigned long new_pos;\n                    if (ctrl)\n                    {\n                        // find the first non-whitespace to our left\n                        std::string::size_type pos = text_.find_first_not_of(space_str.c_str(),cursor_pos);\n                        if (pos != std::string::npos)\n                        {\n                            pos = text_.find_first_of(space_str.c_str(),pos);\n                            if (pos != std::string::npos)\n                                new_pos = static_cast<unsigned long>(pos+1);\n                            else\n                                new_pos = static_cast<unsigned long>(text_.size());\n                        }\n                        else\n                        {\n                            new_pos = static_cast<unsigned long>(text_.size());\n                        }\n                    }\n                    else\n                    {\n                        new_pos = cursor_pos+1;\n                    }\n\n                    move_cursor(new_pos);\n                }\n                else if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n            else if (key == base_window::KEY_UP)\n            {\n                if (ctrl)\n                {\n                    move_cursor(0);\n                }\n                else\n                {\n                    const point origin(total_rect().left(), total_rect().top());\n                    // move the cursor so the position that is just a few pixels above \n                    // the current cursor_rect\n                    move_cursor(mfont->compute_cursor_pos(\n                            get_text_rect(), text_, cursor_rect.left()+origin.x(), \n                            cursor_rect.top()+origin.y()-mfont->height()/2));\n\n                }\n\n                if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n            else if (key == base_window::KEY_DOWN)\n            {\n                if (ctrl)\n                {\n                    move_cursor(static_cast<unsigned long>(text_.size()));\n                }\n                else\n                {\n                    const point origin(total_rect().left(), total_rect().top());\n                    // move the cursor so the position that is just a few pixels above \n                    // the current cursor_rect\n                    move_cursor(mfont->compute_cursor_pos(\n                            get_text_rect(), text_, cursor_rect.left()+origin.x(), \n                            cursor_rect.bottom()+origin.y()+mfont->height()/2));\n                }\n\n                if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n            else if (is_printable)\n            {\n                if (ctrl)\n                {\n                    if (key == 'a')\n                    {\n                        on_select_all();\n                    }\n                    else if (key == 'c')\n                    {\n                        on_copy();\n                    }\n                    else if (key == 'v')\n                    {\n                        on_paste();\n                    }\n                    else if (key == 'x')\n                    {\n                        on_cut();\n                    }\n                }\n                else \n                {\n                    if (highlight_start <= highlight_end)\n                    {\n                        text_ = text_.substr(0,highlight_start) + static_cast<unichar>(key) +\n                            text_.substr(highlight_end+1,text_.size()-highlight_end-1);\n\n                        adjust_total_rect();\n                        move_cursor(highlight_start+1);\n                        highlight_start = 0;\n                        highlight_end = -1;\n                        on_no_text_selected();\n                    }\n                    else\n                    {\n                        text_ = text_.substr(0,cursor_pos) + static_cast<unichar>(key) +\n                            text_.substr(cursor_pos,text_.size()-cursor_pos);\n                        adjust_total_rect();\n                        move_cursor(cursor_pos+1);\n                    }\n\n                    // send out the text modified event\n                    if (text_modified_handler.is_set())\n                        text_modified_handler();\n\n                }\n\n                if (key == '\\n')\n                {\n                    if (enter_key_handler.is_set())\n                        enter_key_handler();\n                }\n            }\n            else if (key == base_window::KEY_BACKSPACE)\n            {                \n                // if something is highlighted then delete that\n                if (highlight_start <= highlight_end)\n                {\n                    on_delete_selected();\n                }\n                else if (cursor_pos != 0)\n                {\n                    text_ = text_.erase(cursor_pos-1,1);\n                    adjust_total_rect();\n                    move_cursor(cursor_pos-1);\n\n                    // send out the text modified event\n                    if (text_modified_handler.is_set())\n                        text_modified_handler();\n                }\n                else\n                {\n                    // do this just so it repaints itself right\n                    move_cursor(cursor_pos);\n                }\n\n            }\n            else if (key == base_window::KEY_DELETE)\n            {\n                // if something is highlighted then delete that\n                if (highlight_start <= highlight_end)\n                {\n                    on_delete_selected();\n                }\n                else if (cursor_pos != static_cast<long>(text_.size()))\n                {\n                    text_ = text_.erase(cursor_pos,1);\n\n                    adjust_total_rect();\n                    // send out the text modified event\n                    if (text_modified_handler.is_set())\n                        text_modified_handler();\n                }\n                else\n                {\n                    // do this just so it repaints itself right\n                    move_cursor(cursor_pos);\n                }\n\n            }\n            else if (key == base_window::KEY_HOME)\n            {\n                if (ctrl)\n                {\n                    move_cursor(0);\n                }\n                else if (cursor_pos != 0)\n                {\n                    // find the start of the current line\n                    ustring::size_type pos = text_.find_last_of('\\n',cursor_pos-1);\n                    if (pos == ustring::npos)\n                        pos = 0;\n                    else\n                        pos += 1;\n                    move_cursor(static_cast<unsigned long>(pos));\n\n                }\n\n                if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n            else if (key == base_window::KEY_END)\n            {\n                if (ctrl)\n                {\n                    move_cursor(static_cast<unsigned long>(text_.size()));\n                }\n                {\n                    ustring::size_type pos = text_.find_first_of('\\n',cursor_pos);\n                    if (pos == ustring::npos)\n                        pos = text_.size();\n\n                    move_cursor(static_cast<unsigned long>(pos));\n                }\n\n                if (shift_pos == -1)\n                {\n                    highlight_start = 0;\n                    highlight_end = -1;\n                    on_no_text_selected();\n                    parent.invalidate_rectangle(rect);\n                }\n            }\n            else if (key == base_window::KEY_PAGE_DOWN || key == base_window::KEY_PAGE_UP)\n            {\n                long jump_size = display_rect().height() - \n                    std::min(mfont->height()*3, display_rect().height()/5);\n\n                // if we are supposed to page up then just jump in the other direction\n                if (key == base_window::KEY_PAGE_UP)\n                    jump_size = -jump_size;\n\n                scroll_to_rect(translate_rect(display_rect(), point(0, jump_size ))); \n            }\n\n            cursor_visible = true;\n            recent_movement = true;\n\n        }\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    void text_box::\n    on_string_put(\n        const std::wstring &str\n    )\n    {\n        if (has_focus && enabled && !hidden)\n        {\n            ustring ustr = convert_wstring_to_utf32(str);\n            if (highlight_start <= highlight_end)\n            {\n                text_ = text_.substr(0,highlight_start) + ustr +\n                    text_.substr(highlight_end+1,text_.size()-highlight_end-1);\n\n                adjust_total_rect();\n                move_cursor(highlight_start+ustr.size());\n                highlight_start = 0;\n                highlight_end = -1;\n                on_no_text_selected();\n            }\n            else\n            {\n                text_ = text_.substr(0,cursor_pos) + ustr +\n                    text_.substr(cursor_pos,text_.size()-cursor_pos);\n\n                adjust_total_rect();\n                move_cursor(cursor_pos+ustr.size());\n            }\n\n\n            // send out the text modified event\n            if (text_modified_handler.is_set())\n                text_modified_handler();\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    void text_box::\n    move_cursor (\n        unsigned long pos\n    )\n    {\n        using namespace std;\n        const long old_cursor_pos = cursor_pos;\n\n\n\n        // figure out where the cursor is supposed to be\n        cursor_rect = mfont->compute_cursor_rect(get_text_rect(), text_, pos);\n        const point origin(total_rect().left(), total_rect().top());\n\n\n        cursor_pos = pos;     \n\n\n        const unsigned long padding = style->get_padding(*mfont);\n\n        // find the delta between the cursor rect and the corner of the total rect \n        point delta = point(cursor_rect.left(), cursor_rect.top()) - point(total_rect().left(), total_rect().top());\n\n        // now scroll us so that we can see the current cursor \n        scroll_to_rect(centered_rect(cursor_rect, cursor_rect.width() + padding + 6, cursor_rect.height() + 1));\n\n        // adjust the cursor_rect so that it is relative to the total_rect\n        cursor_rect = translate_rect(cursor_rect, -origin);\n\n        parent.set_im_pos(cursor_rect.left(), cursor_rect.top());\n\n        if (old_cursor_pos != cursor_pos)\n        {\n            if (shift_pos != -1)\n            {\n                highlight_start = std::min(shift_pos,cursor_pos);\n                highlight_end = std::max(shift_pos,cursor_pos)-1;\n            }\n\n            if (highlight_start > highlight_end)\n                on_no_text_selected();\n            else\n                on_text_is_selected();\n\n            recent_movement = true;\n            cursor_visible = true;\n            parent.invalidate_rectangle(display_rect());\n        }\n\n        if (shift_pos == -1)\n        {\n            highlight_start = 0;\n            highlight_end = -1;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//       image_display member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        class image_display_functor\n        {\n            const std::string str;\n            const member_function_pointer<const std::string&> mfp;\n        public:\n            image_display_functor (\n                const std::string& str_,\n                const member_function_pointer<const std::string&>& mfp_\n            ) : str(str_),\n                mfp(mfp_)\n            {}\n\n            void operator() (\n            ) const { mfp(str); }\n        };\n    }\n\n    image_display::\n    image_display(  \n        drawable_window& w\n    ): \n        scrollable_region(w,KEYBOARD_EVENTS),\n        zoom_in_scale(1),\n        zoom_out_scale(1),\n        drawing_rect(true),\n        rect_is_selected(false),\n        selected_rect(0),\n        default_rect_color(255,0,0,255),\n        parts_menu(w),\n        part_width(15), // width part circles are drawn on the screen\n        overlay_editing_enabled(true),\n        highlight_timer(*this, &image_display::timer_event_unhighlight_rect),\n        highlighted_rect(std::numeric_limits<unsigned long>::max())\n    { \n        enable_mouse_drag();\n\n        highlight_timer.set_delay_time(250);\n        set_horizontal_scroll_increment(1);\n        set_vertical_scroll_increment(1);\n        set_horizontal_mouse_wheel_scroll_increment(30);\n        set_vertical_mouse_wheel_scroll_increment(30);\n\n        parts_menu.disable();\n\n\n        enable_events(); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    on_part_add (\n        const std::string& part_name\n    )\n    {\n        if (!rect_is_selected)\n            return;\n\n        const rectangle valid_area = get_rect_on_screen(selected_rect);\n        const point loc = nearest_point(valid_area,last_right_click_pos);\n        \n        // Transform loc from gui window space into the space used by the overlay\n        // rectangles (i.e. relative to the raw image)\n        const point origin(total_rect().tl_corner());\n        point c1 = loc - origin;\n        if (zoom_in_scale != 1)\n        {\n            c1 = c1/(double)zoom_in_scale;\n        }\n        else if (zoom_out_scale != 1)\n        {\n            c1 = c1*(double)zoom_out_scale;\n        }\n\n        overlay_rects[selected_rect].parts[part_name] = c1;\n        parent.invalidate_rectangle(rect); \n\n        if (event_handler.is_set())\n            event_handler();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    image_display::\n    ~image_display(\n    )\n    {\n        highlight_timer.stop_and_wait();\n        disable_events();\n        parent.invalidate_rectangle(rect); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle image_display::\n    get_image_display_rect (\n    ) const\n    {\n        if (zoom_in_scale != 1)\n        {\n            return rectangle(0,0, img.nc()*zoom_in_scale-1, img.nr()*zoom_in_scale-1);\n        }\n        else if (zoom_out_scale != 1)\n        {\n            return rectangle(0,0, img.nc()/zoom_out_scale-1, img.nr()/zoom_out_scale-1);\n        }\n        else\n        {\n            return dlib::get_rect(img);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    add_overlay (\n        const overlay_rect& overlay\n    )\n    {\n        auto_mutex M(m);\n        // push this new overlay into our overlay vector\n        overlay_rects.push_back(overlay);\n\n        // make the parent window redraw us now that we changed the overlay\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    add_overlay (\n        const overlay_line& overlay\n    )\n    {\n        auto_mutex M(m);\n\n        // push this new overlay into our overlay vector\n        overlay_lines.push_back(overlay);\n\n        // make the parent window redraw us now that we changed the overlay\n        parent.invalidate_rectangle(get_rect_on_screen(rectangle(overlay.p1, overlay.p2)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    add_overlay (\n        const overlay_circle& overlay\n    )\n    {\n        auto_mutex M(m);\n\n        // push this new overlay into our overlay vector\n        overlay_circles.push_back(overlay);\n\n        // make the parent window redraw us now that we changed the overlay\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    add_overlay (\n        const std::vector<overlay_rect>& overlay\n    )\n    {\n        auto_mutex M(m);\n\n        // push this new overlay into our overlay vector\n        overlay_rects.insert(overlay_rects.end(), overlay.begin(), overlay.end());\n\n        // make the parent window redraw us now that we changed the overlay\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    add_overlay (\n        const std::vector<overlay_line>& overlay\n    )\n    {\n        auto_mutex M(m);\n\n        // push this new overlay into our overlay vector\n        overlay_lines.insert(overlay_lines.end(), overlay.begin(), overlay.end());\n\n        // make the parent window redraw us now that we changed the overlay\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    add_overlay (\n        const std::vector<overlay_circle>& overlay\n    )\n    {\n        auto_mutex M(m);\n\n        // push this new overlay into our overlay vector\n        overlay_circles.insert(overlay_circles.end(), overlay.begin(), overlay.end());\n\n        // make the parent window redraw us now that we changed the overlay\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    clear_overlay (\n    )\n    {\n        auto_mutex M(m);\n        overlay_rects.clear();\n        overlay_lines.clear();\n        overlay_circles.clear();\n        parent.invalidate_rectangle(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle image_display::\n    get_rect_on_screen (\n        rectangle orect \n    ) const\n    {\n        const point origin(total_rect().tl_corner());\n        orect.left()   = orect.left()*zoom_in_scale/zoom_out_scale;\n        orect.top()    = orect.top()*zoom_in_scale/zoom_out_scale;\n        if (zoom_in_scale != 1)\n        {\n            // make it so the box surrounds the pixels when we zoom in.\n            orect.right()  = (orect.right()+1)*zoom_in_scale/zoom_out_scale;\n            orect.bottom() = (orect.bottom()+1)*zoom_in_scale/zoom_out_scale;\n        }\n        else\n        {\n            orect.right()  = orect.right()*zoom_in_scale/zoom_out_scale;\n            orect.bottom() = orect.bottom()*zoom_in_scale/zoom_out_scale;\n        }\n\n        return translate_rect(orect, origin);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle image_display::\n    get_rect_on_screen (\n        unsigned long idx\n    ) const\n    {\n        return get_rect_on_screen(overlay_rects[idx].rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    draw (\n        const canvas& c\n    ) const\n    {\n        scrollable_region::draw(c);\n\n        rectangle area = display_rect().intersect(c);\n        if (area.is_empty())\n            return;\n\n        const point origin(total_rect().tl_corner());\n        \n        // draw the image on the screen\n        const rectangle img_area = total_rect().intersect(area);\n        for (long row = img_area.top(); row <= img_area.bottom(); ++row)\n        {\n            for (long col = img_area.left(); col <= img_area.right(); ++col)\n            {\n                assign_pixel(c[row-c.top()][col-c.left()], \n                             img[(row-origin.y())*zoom_out_scale/zoom_in_scale][(col-origin.x())*zoom_out_scale/zoom_in_scale]);\n            }\n        }\n\n        // now draw all the overlay rectangles\n        for (unsigned long i = 0; i < overlay_rects.size(); ++i)\n        {\n            const rectangle orect = get_rect_on_screen(i);\n\n            if (rect_is_selected && selected_rect == i)\n            {\n                draw_rectangle(c, orect, invert_pixel(overlay_rects[i].color), area);\n            }\n            else if (highlighted_rect < overlay_rects.size() && highlighted_rect == i)\n            {\n                // Draw the rectangle wider and with a slightly different color that tapers\n                // out at the edges of the line.\n                hsi_pixel temp;\n                assign_pixel(temp, 0);\n                assign_pixel(temp, overlay_rects[i].color);\n                temp.s = 255;\n                temp.h = temp.h + 20;\n                if (temp.i < 245)\n                    temp.i += 10;\n                rgb_pixel p;\n                assign_pixel(p, temp);\n                rgb_alpha_pixel po, po2;\n                assign_pixel(po, p);\n                po.alpha = 160;\n                po2 = po;\n                po2.alpha = 90;\n                draw_rectangle(c, grow_rect(orect,2), po2, area);\n                draw_rectangle(c, grow_rect(orect,1), po, area);\n                draw_rectangle(c, orect, p, area);\n                draw_rectangle(c, shrink_rect(orect,1), po, area);\n                draw_rectangle(c, shrink_rect(orect,2), po2, area);\n            }\n            else\n            {\n                draw_rectangle(c, orect, overlay_rects[i].color, area);\n            }\n\n            if (overlay_rects[i].label.size() != 0)\n            {\n                // make a rectangle that is at the spot we want to draw our string\n                rectangle r(orect.br_corner(),  c.br_corner());\n                mfont->draw_string(c, r, overlay_rects[i].label, overlay_rects[i].color, 0, \n                                   std::string::npos, area);\n            }\n\n\n            // draw circles for each \"part\" in this overlay rectangle.\n            std::map<std::string,point>::const_iterator itr;\n            for (itr = overlay_rects[i].parts.begin(); itr != overlay_rects[i].parts.end(); ++itr)\n            {\n                rectangle temp = centered_rect(get_rect_on_screen(centered_rect(itr->second,1,1)), part_width, part_width);\n\n                if (rect_is_selected && selected_rect == i && \n                    selected_part_name.size() != 0 && selected_part_name == itr->first)\n                {\n                    draw_circle(c, center(temp), temp.width()/2, invert_pixel(overlay_rects[i].color), area);\n                }\n                else\n                {\n                    draw_circle(c, center(temp), temp.width()/2, overlay_rects[i].color, area);\n                }\n\n                // make a rectangle that is at the spot we want to draw our string\n                rectangle r((temp.br_corner() + temp.bl_corner())/2,  \n                            c.br_corner());\n                mfont->draw_string(c, r, itr->first, overlay_rects[i].color, 0, \n                                   std::string::npos, area);\n            }\n\n            if (overlay_rects[i].crossed_out)\n            {\n                if (rect_is_selected && selected_rect == i)\n                {\n                    draw_line(c, orect.tl_corner(), orect.br_corner(),invert_pixel(overlay_rects[i].color), area);\n                    draw_line(c, orect.bl_corner(), orect.tr_corner(),invert_pixel(overlay_rects[i].color), area);\n                }\n                else\n                {\n                    draw_line(c, orect.tl_corner(), orect.br_corner(),overlay_rects[i].color, area);\n                    draw_line(c, orect.bl_corner(), orect.tr_corner(),overlay_rects[i].color, area);\n                }\n            }\n        }\n\n        // now draw all the overlay lines \n        for (unsigned long i = 0; i < overlay_lines.size(); ++i)\n        {\n            draw_line(c, \n                      zoom_in_scale*overlay_lines[i].p1/zoom_out_scale + origin, \n                      zoom_in_scale*overlay_lines[i].p2/zoom_out_scale + origin, \n                      overlay_lines[i].color, area);\n        }\n\n        // now draw all the overlay circles \n        for (unsigned long i = 0; i < overlay_circles.size(); ++i)\n        {\n            const point center = zoom_in_scale*overlay_circles[i].center/zoom_out_scale + origin;\n            const int radius = zoom_in_scale*overlay_circles[i].radius/zoom_out_scale;\n            draw_circle(c, \n                      center, \n                      radius, \n                      overlay_circles[i].color, area);\n\n            if (overlay_circles[i].label.size() != 0)\n            {\n                const point temp = center + point(0,radius);\n\n                // make a rectangle that is at the spot we want to draw our string\n                rectangle r(temp,  c.br_corner());\n                mfont->draw_string(c, r, overlay_circles[i].label, overlay_circles[i].color, 0, \n                                   std::string::npos, area);\n            }\n        }\n\n        if (drawing_rect)\n            draw_rectangle(c, rect_to_draw, invert_pixel(default_rect_color), area);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    on_keydown (\n        unsigned long key,\n        bool is_printable,\n        unsigned long state\n    )\n    {\n        scrollable_region::on_keydown(key,is_printable, state);\n\n        if (!is_printable && !hidden && enabled && rect_is_selected && \n            (key == base_window::KEY_BACKSPACE || key == base_window::KEY_DELETE))\n        {\n            rect_is_selected = false;\n            parts_menu.disable();\n            if (selected_part_name.size() == 0)\n                overlay_rects.erase(overlay_rects.begin() + selected_rect);\n            else\n                overlay_rects[selected_rect].parts.erase(selected_part_name);\n            parent.invalidate_rectangle(rect);\n\n            if (event_handler.is_set())\n                event_handler();\n        }\n\n        if (is_printable && !hidden && enabled && rect_is_selected && (key == 'i'))\n        {\n            overlay_rects[selected_rect].crossed_out = !overlay_rects[selected_rect].crossed_out;\n            parent.invalidate_rectangle(rect);\n\n            if (event_handler.is_set())\n                event_handler();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    add_labelable_part_name (\n        const std::string& name\n    )\n    {\n        auto_mutex lock(m);\n        if (part_names.insert(name).second)\n        {\n            member_function_pointer<const std::string&> mfp;\n            mfp.set(*this,&image_display::on_part_add);\n            parts_menu.menu().add_menu_item(menu_item_text(\"Add \" + name,impl::image_display_functor(name,mfp)));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    clear_labelable_part_names (\n    )\n    {\n        auto_mutex lock(m);\n        part_names.clear();\n        parts_menu.menu().clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    on_mouse_down (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y,\n        bool is_double_click\n    )\n    {\n        scrollable_region::on_mouse_down(btn, state, x, y, is_double_click);\n\n        if (rect.contains(x,y) == false || hidden || !enabled)\n            return;\n\n        if (image_clicked_handler.is_set())\n        {\n            const point origin(total_rect().tl_corner());\n            point p(x,y);\n            p -= origin;\n            if (zoom_in_scale != 1)\n                p = p/zoom_in_scale;\n            else if (zoom_out_scale != 1)\n                p = p*zoom_out_scale;\n\n            if (dlib::get_rect(img).contains(p))\n                image_clicked_handler(p, is_double_click, btn);\n        }\n\n        if (!overlay_editing_enabled)\n            return;\n\n        if (btn == base_window::RIGHT && rect_is_selected)\n        {\n            last_right_click_pos = point(x,y);\n            parts_menu.set_rect(get_rect_on_screen(selected_rect));\n            return;\n        }\n\n        if (btn == base_window::LEFT && (state&base_window::CONTROL) && !drawing_rect)\n        {\n            long best_dist = std::numeric_limits<long>::max();\n            long best_idx = 0;\n            // check if this click landed on any of the overlay rectangles\n            for (unsigned long i = 0; i < overlay_rects.size(); ++i)\n            {\n                const rectangle orect = get_rect_on_screen(i);\n                const long dist = distance_to_rect_edge(orect, point(x,y));\n\n                if (dist < best_dist)\n                {\n                    best_dist = dist;\n                    best_idx = i;\n                }\n            }\n            if (best_dist < 13)\n            {\n                overlay_rects[best_idx].label = default_rect_label;\n                highlighted_rect = best_idx;\n                highlight_timer.stop();\n                highlight_timer.start();\n                if (event_handler.is_set())\n                    event_handler();\n                parent.invalidate_rectangle(rect);\n            }\n            return;\n        }\n\n\n        if (!is_double_click && btn == base_window::LEFT && (state&base_window::SHIFT))\n        {\n            drawing_rect = true;\n            rect_anchor = point(x,y);\n\n            if (rect_is_selected)\n            {\n                rect_is_selected = false;\n                parts_menu.disable();\n                parent.invalidate_rectangle(rect);\n            }\n        }\n        else if (drawing_rect)\n        {\n            if (rect_is_selected)\n            {\n                rect_is_selected = false;\n                parts_menu.disable();\n            }\n\n            drawing_rect = false;\n            parent.invalidate_rectangle(rect);\n        }\n        else if (is_double_click)\n        {\n            const bool rect_was_selected = rect_is_selected;\n            rect_is_selected = false;\n            parts_menu.disable();\n\n            long best_dist = std::numeric_limits<long>::max();\n            long best_idx = 0;\n            std::string best_part;\n\n            // check if this click landed on any of the overlay rectangles\n            for (unsigned long i = 0; i < overlay_rects.size(); ++i)\n            {\n                const rectangle orect = get_rect_on_screen(i);\n\n                const long dist = distance_to_rect_edge(orect, point(x,y));\n\n                if (dist < best_dist)\n                {\n                    best_dist = dist;\n                    best_idx = i;\n                    best_part.clear();\n                }\n\n                std::map<std::string,point>::const_iterator itr;\n                for (itr = overlay_rects[i].parts.begin(); itr != overlay_rects[i].parts.end(); ++itr)\n                {\n                    rectangle temp = centered_rect(get_rect_on_screen(centered_rect(itr->second,1,1)), part_width, part_width);\n                    point c = center(temp);\n\n                    // distance from edge of part circle\n                    const long dist = static_cast<long>(std::abs(length(c - point(x,y)) + 0.5 - temp.width()/2));\n                    if (dist < best_dist)\n                    {\n                        best_idx = i;\n                        best_dist = dist;\n                        best_part = itr->first;\n                    }\n                }\n            }\n\n\n            if (best_dist < 13)\n            {\n                rect_is_selected = true;\n                if (part_names.size() != 0)\n                    parts_menu.enable();\n                selected_rect = best_idx;\n                selected_part_name = best_part;\n                if (orect_selected_event_handler.is_set())\n                    orect_selected_event_handler(overlay_rects[best_idx]);\n            }\n\n            if (rect_is_selected || rect_was_selected)\n                parent.invalidate_rectangle(rect);\n        }\n        else if (rect_is_selected)\n        {\n            rect_is_selected = false;\n            parts_menu.disable();\n            parent.invalidate_rectangle(rect);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::vector<image_display::overlay_rect> image_display::\n    get_overlay_rects (\n    ) const\n    {\n        auto_mutex lock(m);\n        return overlay_rects;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    set_default_overlay_rect_label (\n        const std::string& label\n    )\n    {\n        auto_mutex lock(m);\n        default_rect_label = label;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::string image_display::\n    get_default_overlay_rect_label (\n    ) const\n    {\n        auto_mutex lock(m);\n        return default_rect_label;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    set_default_overlay_rect_color (\n        const rgb_alpha_pixel& color\n    )\n    {\n        auto_mutex lock(m);\n        default_rect_color = color;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    rgb_alpha_pixel image_display::\n    get_default_overlay_rect_color (\n    ) const\n    {\n        auto_mutex lock(m);\n        return default_rect_color;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    on_mouse_up (\n        unsigned long btn,\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        scrollable_region::on_mouse_up(btn,state,x,y);\n\n        if (drawing_rect && btn == base_window::LEFT && (state&base_window::SHIFT) &&\n            !hidden && enabled)\n        {\n            const point origin(total_rect().tl_corner());\n            point c1 = point(x,y) - origin;\n            point c2 = rect_anchor - origin;\n\n            if (zoom_in_scale != 1)\n            {\n                c1 = c1/(double)zoom_in_scale;\n                c2 = c2/(double)zoom_in_scale;\n            }\n            else if (zoom_out_scale != 1)\n            {\n                c1 = c1*(double)zoom_out_scale;\n                c2 = c2*(double)zoom_out_scale;\n            }\n\n            rectangle new_rect(c1,c2);\n            if (zoom_in_scale != 1)\n            {\n                // When we are zoomed in we adjust the rectangles a little so they\n                // are drown surrounding the pixels inside the rect.  This adjustment\n                // is necessary to make this code consistent with this goal.\n                new_rect.right() -= 1;\n                new_rect.bottom() -= 1;\n            }\n\n\n            if (new_rect.width() > 0 && new_rect.height() > 0)\n            {\n                add_overlay(overlay_rect(new_rect, default_rect_color, default_rect_label));\n\n                if (event_handler.is_set())\n                    event_handler();\n            }\n        }\n\n        if (drawing_rect)\n        {\n            drawing_rect = false;\n            parent.invalidate_rectangle(rect);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    on_mouse_move (\n        unsigned long state,\n        long x,\n        long y\n    )\n    {\n        scrollable_region::on_mouse_move(state,x,y);\n\n        if (drawing_rect)\n        {\n            if ((state&base_window::LEFT) && (state&base_window::SHIFT) && !hidden && enabled)\n            {\n                rectangle new_rect(point(x,y), rect_anchor);\n                parent.invalidate_rectangle(new_rect + rect_to_draw);\n                rect_to_draw = new_rect;\n            }\n            else\n            {\n                drawing_rect = false;\n                parent.invalidate_rectangle(rect);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    on_wheel_up (\n        unsigned long state\n    )\n    {\n        // disable mouse wheel if the user is drawing a rectangle\n        if (drawing_rect)\n            return;\n\n        // if CONTROL is not being held down\n        if ((state & base_window::CONTROL) == 0)\n        {\n            scrollable_region::on_wheel_up(state);\n            return;\n        }\n\n        if (rect.contains(lastx,lasty) == false || hidden || !enabled)\n            return;\n\n\n        if (zoom_in_scale < 100 && zoom_out_scale == 1)\n        {\n            const point mouse_loc(lastx, lasty);\n            // the pixel in img that the mouse is over\n            const point pix_loc = (mouse_loc - total_rect().tl_corner())/zoom_in_scale;\n\n            zoom_in_scale = zoom_in_scale*10/9 + 1;\n\n            set_total_rect_size(img.nc()*zoom_in_scale, img.nr()*zoom_in_scale);\n\n            // make is to the pixel under the mouse doesn't move while we zoom\n            const point delta = total_rect().tl_corner() - (mouse_loc - pix_loc*zoom_in_scale);\n            scroll_to_rect(translate_rect(display_rect(), delta)); \n        }\n        else if (zoom_out_scale != 1)\n        {\n            const point mouse_loc(lastx, lasty);\n            // the pixel in img that the mouse is over\n            const point pix_loc = (mouse_loc - total_rect().tl_corner())*zoom_out_scale;\n\n            zoom_out_scale = zoom_out_scale*9/10;\n            if (zoom_out_scale == 0)\n                zoom_out_scale = 1;\n\n            set_total_rect_size(img.nc()/zoom_out_scale, img.nr()/zoom_out_scale);\n\n            // make is to the pixel under the mouse doesn't move while we zoom\n            const point delta = total_rect().tl_corner() - (mouse_loc - pix_loc/zoom_out_scale);\n            scroll_to_rect(translate_rect(display_rect(), delta)); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_display::\n    on_wheel_down (\n        unsigned long state\n    )\n    {\n        // disable mouse wheel if the user is drawing a rectangle\n        if (drawing_rect)\n            return;\n\n        // if CONTROL is not being held down\n        if ((state & base_window::CONTROL) == 0)\n        {\n            scrollable_region::on_wheel_down(state);\n            return;\n        }\n\n        if (rect.contains(lastx,lasty) == false || hidden || !enabled)\n            return;\n\n\n        if (zoom_in_scale != 1)\n        {\n            const point mouse_loc(lastx, lasty);\n            // the pixel in img that the mouse is over\n            const point pix_loc = (mouse_loc - total_rect().tl_corner())/zoom_in_scale;\n\n            zoom_in_scale = zoom_in_scale*9/10;\n            if (zoom_in_scale == 0)\n                zoom_in_scale = 1;\n\n            set_total_rect_size(img.nc()*zoom_in_scale, img.nr()*zoom_in_scale);\n\n            // make is to the pixel under the mouse doesn't move while we zoom\n            const point delta = total_rect().tl_corner() - (mouse_loc - pix_loc*zoom_in_scale);\n            scroll_to_rect(translate_rect(display_rect(), delta)); \n        }\n        else if (std::max(img.nr(), img.nc())/zoom_out_scale > 10)\n        {\n            const point mouse_loc(lastx, lasty);\n            // the pixel in img that the mouse is over\n            const point pix_loc = (mouse_loc - total_rect().tl_corner())*zoom_out_scale;\n\n            zoom_out_scale = zoom_out_scale*10/9 + 1;\n\n            set_total_rect_size(img.nc()/zoom_out_scale, img.nr()/zoom_out_scale);\n\n            // make is to the pixel under the mouse doesn't move while we zoom\n            const point delta = total_rect().tl_corner() - (mouse_loc - pix_loc/zoom_out_scale);\n            scroll_to_rect(translate_rect(display_rect(), delta)); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//         image_window member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    image_window::\n    image_window(\n    ) :\n        gui_img(*this),\n        window_has_closed(false),\n        have_last_click(false),\n        mouse_btn(0),\n        clicked_signaler(this->wm),\n        tie_input_events(false)\n    {\n\n        gui_img.set_image_clicked_handler(*this, &image_window::on_image_clicked);\n        gui_img.disable_overlay_editing();\n        // show this window on the screen\n        show();\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    image_window::\n    ~image_window(\n    )\n    {\n        // You should always call close_window() in the destructor of window\n        // objects to ensure that no events will be sent to this window while \n        // it is being destructed.  \n        close_window();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    base_window::on_close_return_code image_window::\n    on_window_close(\n    )\n    {\n        window_has_closed = true;\n        clicked_signaler.broadcast();\n        return base_window::CLOSE_WINDOW;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool image_window::\n    get_next_keypress (\n        unsigned long& key,\n        bool& is_printable,\n        unsigned long& state\n    ) \n    {\n        auto_mutex lock(wm);\n        while (have_last_keypress == false && !window_has_closed &&\n            (have_last_click == false || !tie_input_events))\n        {\n            clicked_signaler.wait();\n        }\n\n        if (window_has_closed)\n            return false;\n\n        if (have_last_keypress)\n        {\n            // Mark that we are taking the key click so the next call to get_next_keypress()\n            // will have to wait for another click.\n            have_last_keypress = false;\n            key = next_key;\n            is_printable = next_is_printable;\n            state = next_state;\n            return true;\n        }\n        else\n        {\n            key = 0;\n            is_printable = true;\n            return false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    on_keydown (\n        unsigned long key,\n        bool is_printable,\n        unsigned long state\n    )\n    {\n        dlib::drawable_window::on_keydown(key,is_printable,state);\n\n        have_last_keypress = true;\n        next_key = key;\n        next_is_printable = is_printable;\n        next_state = state;\n        clicked_signaler.signal();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    tie_events (\n    )\n    {\n        auto_mutex lock(wm);\n        tie_input_events = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    untie_events (\n    )\n    {\n        auto_mutex lock(wm);\n        tie_input_events = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool image_window::\n    events_tied (\n    ) const\n    {\n        auto_mutex lock(wm);\n        return tie_input_events;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool image_window::\n    get_next_double_click (\n        point& p,\n        unsigned long& mouse_button \n    ) \n    {\n        p = point(-1,-1);\n\n        auto_mutex lock(wm);\n        while (have_last_click == false && !window_has_closed &&\n            (have_last_keypress==false || !tie_input_events))\n        {\n            clicked_signaler.wait();\n        }\n\n        if (window_has_closed)\n            return false;\n\n        if (have_last_click)\n        {\n            // Mark that we are taking the point click so the next call to\n            // get_next_double_click() will have to wait for another click.\n            have_last_click = false;\n            mouse_button = mouse_btn;\n            p = last_clicked_point;\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    on_image_clicked (\n        const point& p,\n        bool is_double_click,\n        unsigned long btn\n    )\n    {\n        if (is_double_click)\n        {\n            have_last_click = true;\n            last_clicked_point = p;\n            mouse_btn = btn;\n            clicked_signaler.signal();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    add_overlay (\n        const overlay_rect& overlay\n    ) \n    { \n        gui_img.add_overlay(overlay); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    add_overlay (\n        const overlay_line& overlay\n    ) \n    { \n        gui_img.add_overlay(overlay); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    add_overlay (\n        const overlay_circle& overlay\n    ) \n    { \n        gui_img.add_overlay(overlay); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    add_overlay (\n        const std::vector<overlay_rect>& overlay\n    ) \n    { \n        gui_img.add_overlay(overlay); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    add_overlay (\n        const std::vector<overlay_line>& overlay\n    ) \n    { \n        gui_img.add_overlay(overlay); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    add_overlay (\n        const std::vector<overlay_circle>& overlay\n    ) \n    { \n        gui_img.add_overlay(overlay); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    clear_overlay (\n    ) \n    { \n        gui_img.clear_overlay(); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void image_window::\n    on_window_resized(\n    )\n    {\n        drawable_window::on_window_resized();\n        unsigned long width, height;\n        get_size(width,height);\n        gui_img.set_size(width, height);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_WIDGETs_CPP_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/widgets.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#ifndef DLIB_WIDGETs_\n#define DLIB_WIDGETs_\n\n#include \"../algs.h\"\n#include \"widgets_abstract.h\"\n#include \"drawable.h\"\n#include \"../gui_core.h\"\n#include \"fonts.h\"\n#include <string>\n#include <sstream>\n#include \"../timer.h\"\n#include \"base_widgets.h\"\n#include \"../member_function_pointer.h\"\n#include \"../array.h\"\n#include \"../array2d.h\"\n#include \"../sequence.h\"\n#include \"../dir_nav.h\"\n#include \"../queue.h\"\n#include \"../smart_pointers.h\"\n#include \"style.h\"\n#include \"../string.h\"\n#include \"../misc_api.h\"\n#include <cctype>\n#include <vector>\n#include \"../any.h\"\n#include <set>\n#include \"../image_processing/full_object_detection.h\"\n\n#ifdef _MSC_VER\n// This #pragma directive is also located in the algs.h file but for whatever\n// reason visual studio 9 just ignores it when it is only there. \n\n// this is to disable the \"'this' : used in base member initializer list\"\n// warning you get from some of the GUI objects since all the objects\n// require that their parent class be passed into their constructor. \n// In this case though it is totally safe so it is ok to disable this warning.\n#pragma warning(disable : 4355)\n#endif\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class label  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class label : public drawable\n    {\n    public:\n        label(\n            drawable_window& w\n        ) : \n            drawable(w),\n            text_color_(0,0,0)\n        {\n            enable_events();\n        }\n\n        ~label()\n        { disable_events(); parent.invalidate_rectangle(rect); }\n\n        void set_text (\n            const std::string& text\n        );\n\n        void set_text (\n            const std::wstring& text\n        );\n\n        void set_text (\n            const dlib::ustring& text\n        );\n\n        const std::string text (\n        ) const;\n\n        const std::wstring wtext (\n        ) const;\n\n        const dlib::ustring utext (\n        ) const;\n\n        void set_text_color (\n            const rgb_pixel color\n        );\n\n        const rgb_pixel text_color (\n        ) const;\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n    private:\n        dlib::ustring text_;\n        rgb_pixel text_color_;\n\n\n        // restricted functions\n        label(label&);        // copy constructor\n        label& operator=(label&);    // assignment operator\n\n    protected:\n\n        void draw (\n            const canvas& c\n        ) const;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class toggle_button\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button : public button_action \n    {\n        /*!\n            INITIAL VALUE\n                - checked == false\n\n            CONVENTION\n                - is_checked() == checked\n        !*/\n\n    public:\n\n        toggle_button(\n            drawable_window& w\n        ) : \n            button_action(w),\n            btn_tooltip(w),\n            checked(false)\n        {\n            style.reset(new toggle_button_style_default());\n            enable_events();\n        }\n        \n        ~toggle_button() { disable_events(); parent.invalidate_rectangle(rect); }\n\n        void set_name (\n            const std::string& name\n        );\n\n        void set_name (\n            const std::wstring& name\n        );\n\n        void set_name (\n            const dlib::ustring& name\n        );\n\n        void set_size (\n            unsigned long width_,\n            unsigned long height_\n        );\n\n        void set_tooltip_text (\n            const std::string& text\n        );\n\n        void set_tooltip_text (\n            const std::wstring& text\n        );\n\n        void set_tooltip_text (\n            const ustring& text\n        );\n\n        const std::string tooltip_text (\n        ) const;\n\n        const std::wstring tooltip_wtext (\n        ) const;\n\n        const dlib::ustring tooltip_utext (\n        ) const;\n\n        bool is_checked (\n        ) const;\n\n        const std::string name (\n        ) const;\n\n        const std::wstring wname (\n        ) const;\n\n        const dlib::ustring uname (\n        ) const;\n\n        void set_checked (\n        );\n\n        void set_unchecked (\n        );\n\n        void show (\n        );\n\n        void hide (\n        );\n\n        void enable (\n        );\n\n        void disable (\n        );\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n        void set_pos (\n            long x,\n            long y\n        );\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        )\n        {\n            auto_mutex M(m);\n            style.reset(new style_type(style_));\n            rect = move_rect(style->get_min_size(name_,*mfont), rect.left(), rect.top());\n            parent.invalidate_rectangle(rect);\n        }\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler_)()\n        )\n        {\n            auto_mutex M(m);\n            event_handler = make_mfp(object,event_handler_);\n            event_handler_self.clear();\n        }\n\n        void set_click_handler (\n            const any_function<void()>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            event_handler = event_handler_;\n            event_handler_self.clear();\n        }\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler_)(toggle_button&)\n        )\n        {\n            auto_mutex M(m);\n            event_handler_self = make_mfp(object,event_handler_);\n            event_handler.clear();\n        }\n\n        void set_sourced_click_handler (\n            const any_function<void(toggle_button&)>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            event_handler_self = event_handler_;\n            event_handler.clear();\n        }\n\n    private:\n\n        // restricted functions\n        toggle_button(toggle_button&);        // copy constructor\n        toggle_button& operator=(toggle_button&);    // assignment operator\n\n        dlib::ustring name_;\n        tooltip btn_tooltip;\n        bool checked;\n\n        any_function<void()> event_handler;\n        any_function<void(toggle_button&)> event_handler_self;\n\n        scoped_ptr<toggle_button_style> style;\n\n    protected:\n\n        void draw (\n            const canvas& c\n        ) const { style->draw_toggle_button(c,rect,enabled,*mfont,lastx,lasty,name_,is_depressed(),checked); }\n\n        void on_button_up (\n            bool mouse_over\n        );\n\n        void on_mouse_over (\n        ){ if (style->redraw_on_mouse_over()) parent.invalidate_rectangle(rect); }\n\n        void on_mouse_not_over (\n        ){ if (style->redraw_on_mouse_over()) parent.invalidate_rectangle(rect); }\n    };\n \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class text_field  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class text_field : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                text_color_ == rgb_pixel(0,0,0)\n                bg_color_ == rgb_pixel(255,255,255)\n                cursor_pos == 0\n                text_width == 0\n                text_ == \"\"\n                has_focus == false\n                cursor_visible == false\n                recent_movement == false\n                highlight_start == 0\n                highlight_end == -1\n                shift_pos == -1\n                text_pos == 0\n    \n            CONVENTION\n                - cursor_pos == the position of the cursor in the string text_.  The \n                  cursor appears before the letter text_[cursor_pos]\n                - cursor_x == the x coordinate of the cursor relative to the left side \n                  of rect.  i.e. the number of pixels that separate the cursor from the\n                  left side of the text_field.\n                - has_focus == true if this text field has keyboard input focus\n                - cursor_visible == true if the cursor should be painted\n                - text_ == text()\n                - text_pos == the index of the first letter in text_ that appears in \n                  this text field.\n                - text_width == the width of text_[text_pos] though text_[text.size()-1]\n\n                - if (has_focus && the user has recently moved the cursor) then\n                    - recent_movement == true\n                - else\n                    - recent_movement == false\n\n                - if (highlight_start <= highlight_end) then\n                    - text[highlight_start] though text[highlight_end] should be\n                      highlighted\n\n                - if (shift_pos != -1) then\n                    - has_focus == true\n                    - the shift key is being held down or the left mouse button is\n                      being held down.\n                    - shift_pos == the position of the cursor when the shift or mouse key\n                      was first pressed.\n\n                - text_color() == text_color_\n                - background_color() == bg_color_\n        !*/\n\n    public:\n        text_field(\n            drawable_window& w\n        ) : \n            drawable(w,MOUSE_CLICK | KEYBOARD_EVENTS | MOUSE_MOVE | STRING_PUT),\n            text_color_(0,0,0),\n            bg_color_(255,255,255),\n            text_width(0),\n            text_pos(0),\n            recent_movement(false),\n            has_focus(false),\n            cursor_visible(false),\n            cursor_pos(0),\n            highlight_start(0),\n            highlight_end(-1),\n            shift_pos(-1),\n            t(*this,&text_field::timer_action),\n            right_click_menu(w)\n        {\n            style.reset(new text_field_style_default());\n            rect.set_bottom(mfont->height()+ (style->get_padding(*mfont))*2);\n            rect.set_right((style->get_padding(*mfont))*2);\n            cursor_x = style->get_padding(*mfont);\n\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Cut\",*this,&text_field::on_cut,'t'));\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Copy\",*this,&text_field::on_copy,'C'));\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Paste\",*this,&text_field::on_paste,'P'));\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Delete\",*this,&text_field::on_delete_selected,'D'));\n            right_click_menu.menu().add_menu_item(menu_item_separator());\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Select All\",*this,&text_field::on_select_all,'A'));\n\n            right_click_menu.set_rect(get_text_rect());\n            enable_events();\n\n            t.set_delay_time(500);\n        }\n\n        ~text_field (\n        )\n        {\n            disable_events();\n            parent.invalidate_rectangle(rect); \n            t.stop_and_wait();\n        }\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        )\n        {\n            auto_mutex M(m);\n            style.reset(new style_type(style_));\n            // call this just so that this widget redraws itself with the new style\n            set_main_font(mfont);\n        }\n\n        void set_text (\n            const std::string& text_\n        );\n\n        void set_text (\n            const std::wstring& text_\n        );\n\n        void give_input_focus (\n        );\n\n        void select_all_text (\n        );\n\n        void set_text (\n            const dlib::ustring& text_\n        );\n\n        const std::string text (\n        ) const;\n\n        const std::wstring wtext (\n        ) const;\n\n        const dlib::ustring utext (\n        ) const;\n\n        void set_text_color (\n            const rgb_pixel color\n        );\n\n        const rgb_pixel text_color (\n        ) const;\n\n        void set_background_color (\n            const rgb_pixel color\n        );\n\n        const rgb_pixel background_color (\n        ) const;\n\n        void set_width (\n            unsigned long width\n        );\n\n        void set_pos (\n            long x,\n            long y\n        );\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n        int next_free_user_event_number (\n        ) const\n        {\n            return drawable::next_free_user_event_number()+1;\n        }\n\n        void disable (\n        );\n\n        void enable (\n        );\n\n        void hide (\n        );\n\n        void show (\n        );\n\n        template <\n            typename T\n            >\n        void set_text_modified_handler (\n            T& object,\n            void (T::*event_handler)()\n        )\n        {\n            auto_mutex M(m);\n            text_modified_handler = make_mfp(object,event_handler);\n        }\n\n        template <\n            typename T\n            >\n        void set_enter_key_handler (\n            T& object,\n            void (T::*event_handler)()\n        )\n        {\n            auto_mutex M(m);\n            enter_key_handler = make_mfp(object,event_handler);\n        }\n\n        void set_text_modified_handler (\n            const any_function<void()>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            text_modified_handler = event_handler;\n        }\n\n        void set_enter_key_handler (\n            const any_function<void()>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            enter_key_handler = event_handler;\n        }\n\n        template <\n            typename T\n            >\n        void set_focus_lost_handler (\n            T& object,\n            void (T::*event_handler)()\n        )\n        {\n            auto_mutex M(m);\n            focus_lost_handler = make_mfp(object,event_handler);\n        }\n\n        void set_focus_lost_handler (\n            const any_function<void()>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            focus_lost_handler = event_handler;\n        }\n\n    private:\n\n        void on_cut (\n        );\n        \n        void on_copy (\n        );\n\n        void on_paste (\n        );\n\n        void on_select_all (\n        );\n\n        void on_delete_selected (\n        );\n\n        void on_text_is_selected (\n        );\n\n        void on_no_text_selected (\n        );\n\n        void on_user_event (\n            int num\n        )\n        {\n            // ignore this user event if it isn't for us\n            if (num != drawable::next_free_user_event_number())\n                return;\n\n            if (recent_movement == false)\n            {\n                cursor_visible = !cursor_visible; \n                parent.invalidate_rectangle(rect); \n            }\n            else\n            {\n                if (cursor_visible == false)\n                {\n                    cursor_visible = true;\n                    parent.invalidate_rectangle(rect); \n                }\n                recent_movement = false;\n            }\n        }\n\n        void timer_action (\n        ) { parent.trigger_user_event(this,drawable::next_free_user_event_number()); }\n        /*!\n            ensures\n                - flips the state of cursor_visible\n        !*/\n\n        void move_cursor (\n            unsigned long pos\n        );\n        /*!\n            requires\n                - pos <= text_.size() \n            ensures\n                - moves the cursor to the position given by pos and moves the text \n                  in the text box if necessary\n                - if the position changes then the parent window will be updated\n        !*/\n\n        rectangle get_text_rect (\n        ) const;\n        /*!\n            ensures\n                - returns the rectangle that should contain the text in this widget\n        !*/\n\n        dlib::ustring text_;\n        rgb_pixel text_color_;\n        rgb_pixel bg_color_;\n\n        unsigned long text_width;\n        unsigned long text_pos;\n\n\n        bool recent_movement;\n        bool has_focus;\n        bool cursor_visible;\n        long cursor_pos;\n        unsigned long cursor_x;\n\n        // this tells you what part of the text is highlighted\n        long highlight_start;\n        long highlight_end;\n        long shift_pos;\n        any_function<void()> text_modified_handler;\n        any_function<void()> enter_key_handler;\n        any_function<void()> focus_lost_handler;\n\n        scoped_ptr<text_field_style> style;\n\n        timer<text_field> t;\n\n        popup_menu_region right_click_menu;\n\n        // restricted functions\n        text_field(text_field&);        // copy constructor\n        text_field& operator=(text_field&);    // assignment operator\n\n\n    protected:\n\n        void draw (\n            const canvas& c\n        ) const;\n\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        );\n\n        void on_string_put (\n            const std::wstring &str\n        );\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class text_box\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class text_box : public scrollable_region\n    {\n        /*!\n            INITIAL VALUE\n                text_color_ == rgb_pixel(0,0,0)\n                bg_color_ == rgb_pixel(255,255,255)\n                cursor_pos == 0\n                text_ == \"\"\n                has_focus == false\n                cursor_visible == false\n                recent_movement == false\n                highlight_start == 0\n                highlight_end == -1\n                shift_pos == -1\n    \n            CONVENTION\n                - cursor_pos == the position of the cursor in the string text_.  The \n                  cursor appears before the letter text_[cursor_pos]\n                - cursor_rect == The rectangle that should be drawn for the cursor. \n                  The position is relative to total_rect().\n                - has_focus == true if this text field has keyboard input focus\n                - cursor_visible == true if the cursor should be painted\n                - text_ == text()\n\n                - if (has_focus && the user has recently moved the cursor) then\n                    - recent_movement == true\n                - else\n                    - recent_movement == false\n\n                - if (highlight_start <= highlight_end) then\n                    - text[highlight_start] though text[highlight_end] should be\n                      highlighted\n\n                - if (shift_pos != -1) then\n                    - has_focus == true\n                    - the shift key is being held down or the left mouse button is\n                      being held down.\n                    - shift_pos == the position of the cursor when the shift or mouse key\n                      was first pressed.\n\n                - text_color() == text_color_\n                - background_color() == bg_color_\n        !*/\n\n    public:\n        text_box(\n            drawable_window& w\n        ) : \n            scrollable_region(w,MOUSE_CLICK | KEYBOARD_EVENTS | MOUSE_MOVE | STRING_PUT),\n            text_color_(0,0,0),\n            bg_color_(255,255,255),\n            recent_movement(false),\n            has_focus(false),\n            cursor_visible(false),\n            cursor_pos(0),\n            highlight_start(0),\n            highlight_end(-1),\n            shift_pos(-1),\n            t(*this,&text_box::timer_action),\n            right_click_menu(w)\n        {\n            style.reset(new text_box_style_default());\n\n            const long padding = static_cast<long>(style->get_padding(*mfont));\n            cursor_rect = mfont->compute_cursor_rect(rectangle(padding,padding,1000000,1000000), text_, 0);\n\n            adjust_total_rect();\n\n            set_vertical_mouse_wheel_scroll_increment(mfont->height());\n            set_horizontal_mouse_wheel_scroll_increment(mfont->height());\n\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Cut\",*this,&text_box::on_cut,'t'));\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Copy\",*this,&text_box::on_copy,'C'));\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Paste\",*this,&text_box::on_paste,'P'));\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Delete\",*this,&text_box::on_delete_selected,'D'));\n            right_click_menu.menu().add_menu_item(menu_item_separator());\n            right_click_menu.menu().add_menu_item(menu_item_text(\"Select All\",*this,&text_box::on_select_all,'A'));\n\n            right_click_menu.set_rect(get_text_rect());\n\n            set_size(100,100);\n\n            enable_events();\n\n            t.set_delay_time(500);\n        }\n\n        ~text_box (\n        )\n        {\n            disable_events();\n            parent.invalidate_rectangle(rect); \n            t.stop_and_wait();\n        }\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        )\n        {\n            auto_mutex M(m);\n            style.reset(new style_type(style_));\n\n            scrollable_region::set_style(style_.get_scrollable_region_style());\n            // call this just so that this widget redraws itself with the new style\n            set_main_font(mfont);\n        }\n\n        void set_text (\n            const std::string& text_\n        );\n\n        void set_text (\n            const std::wstring& text_\n        );\n\n        void set_text (\n            const dlib::ustring& text_\n        );\n\n        const std::string text (\n        ) const;\n\n        const std::wstring wtext (\n        ) const;\n\n        const dlib::ustring utext (\n        ) const;\n\n        void set_text_color (\n            const rgb_pixel color\n        );\n\n        const rgb_pixel text_color (\n        ) const;\n\n        void set_background_color (\n            const rgb_pixel color\n        );\n\n        const rgb_pixel background_color (\n        ) const;\n\n        void set_size (\n            unsigned long width,\n            unsigned long height \n        );\n\n        void set_pos (\n            long x,\n            long y\n        );\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n        int next_free_user_event_number (\n        ) const\n        {\n            return scrollable_region::next_free_user_event_number()+1;\n        }\n\n        void disable (\n        );\n\n        void enable (\n        );\n\n        void hide (\n        );\n\n        void show (\n        );\n\n        template <\n            typename T\n            >\n        void set_text_modified_handler (\n            T& object,\n            void (T::*event_handler)()\n        )\n        {\n            auto_mutex M(m);\n            text_modified_handler = make_mfp(object,event_handler);\n        }\n\n        void set_text_modified_handler (\n            const any_function<void()>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            text_modified_handler = event_handler;\n        }\n\n        template <\n            typename T\n            >\n        void set_enter_key_handler (\n            T& object,\n            void (T::*event_handler)()\n        )\n        {\n            auto_mutex M(m);\n            enter_key_handler = make_mfp(object,event_handler);\n        }\n\n        void set_enter_key_handler (\n            const any_function<void()>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            enter_key_handler = event_handler;\n        }\n\n        template <\n            typename T\n            >\n        void set_focus_lost_handler (\n            T& object,\n            void (T::*event_handler)()\n        )\n        {\n            auto_mutex M(m);\n            focus_lost_handler = make_mfp(object,event_handler);\n        }\n\n        void set_focus_lost_handler (\n            const any_function<void()>& event_handler\n        )\n        {\n            auto_mutex M(m);\n            focus_lost_handler = event_handler;\n        }\n\n    private:\n\n        void on_cut (\n        );\n        \n        void on_copy (\n        );\n\n        void on_paste (\n        );\n\n        void on_select_all (\n        );\n\n        void on_delete_selected (\n        );\n\n        void on_text_is_selected (\n        );\n\n        void on_no_text_selected (\n        );\n\n        void on_user_event (\n            int num\n        )\n        {\n            // ignore this user event if it isn't for us\n            if (num != scrollable_region::next_free_user_event_number())\n                return;\n\n            if (recent_movement == false)\n            {\n                cursor_visible = !cursor_visible; \n                parent.invalidate_rectangle(rect); \n            }\n            else\n            {\n                if (cursor_visible == false)\n                {\n                    cursor_visible = true;\n                    parent.invalidate_rectangle(rect); \n                }\n                recent_movement = false;\n            }\n        }\n\n        // The reason for using user actions here rather than just having the timer just call\n        // what it needs directly is to avoid a potential deadlock during destruction of this widget.\n        void timer_action (\n        ) { parent.trigger_user_event(this,scrollable_region::next_free_user_event_number()); }\n        /*!\n            ensures\n                - flips the state of cursor_visible\n        !*/\n\n        void move_cursor (\n            unsigned long pos\n        );\n        /*!\n            requires\n                - pos <= text_.size() \n            ensures\n                - moves the cursor to the position given by pos and moves the text \n                  in the text box if necessary\n                - if the position changes then the parent window will be updated\n        !*/\n\n        rectangle get_text_rect (\n        ) const;\n        /*!\n            ensures\n                - returns the rectangle that should contain the text in this widget\n        !*/\n\n        void adjust_total_rect (\n        );\n        /*!\n            ensures\n                - adjusts total_rect() so that it is big enough to contain the text\n                  currently in this object.\n        !*/\n\n        dlib::ustring text_;\n        rgb_pixel text_color_;\n        rgb_pixel bg_color_;\n\n\n\n        bool recent_movement;\n        bool has_focus;\n        bool cursor_visible;\n        long cursor_pos;\n        rectangle cursor_rect;\n\n        // this tells you what part of the text is highlighted\n        long highlight_start;\n        long highlight_end;\n        long shift_pos;\n        any_function<void()> text_modified_handler;\n        any_function<void()> enter_key_handler;\n        any_function<void()> focus_lost_handler;\n\n        scoped_ptr<text_box_style> style;\n\n        timer<text_box> t;\n\n        popup_menu_region right_click_menu;\n\n        // restricted functions\n        text_box(text_box&);        // copy constructor\n        text_box& operator=(text_box&);    // assignment operator\n\n\n    protected:\n\n        void draw (\n            const canvas& c\n        ) const;\n\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        );\n\n        void on_string_put (\n            const std::wstring &str\n        );\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class check_box\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class check_box : public toggle_button \n    {\n    public:\n        check_box(  \n            drawable_window& w\n        ) : toggle_button(w)\n        {\n            set_style(toggle_button_style_check_box());\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class radio_button\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class radio_button : public toggle_button \n    {\n    public:\n        radio_button (  \n            drawable_window& w\n        ) : toggle_button(w)\n        {\n            set_style(toggle_button_style_radio_button());\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class tabbed_display\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class tabbed_display : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                - tabs.size() == 0\n                - selected_tab_ == 0\n\n            CONVENTION\n                - number_of_tabs() == tabs.size()\n                - tab_name(idx) == tabs[idx]\n                - if (tabs.size() > 0) then\n                    - selected_tab_ == the index of the tab that is currently selected\n\n                - for all valid i:\n                    - tabs[i].width == mfont->compute_size(tabs[i].name)\n                    - tabs[i].rect == the rectangle that defines where this tab is\n                    - if (tabs[i].group != 0) then\n                        - tabs[i].group == a pointer to the widget_group for this tab.\n\n                - left_pad == the amount of padding in a tab to the left of the name string.\n                - right_pad == the amount of padding in a tab to the right of the name string.\n                - top_pad == the amount of padding in a tab to the top of the name string.\n                - bottom_pad == the amount of padding in a tab to the bottom of the name string.\n\n                - if (event_handler.is_set()) then\n                    - event_handler() is what is called to process click events\n                      on this object.\n        !*/\n\n    public:\n\n        tabbed_display(  \n            drawable_window& w\n        );\n\n        virtual ~tabbed_display(\n        );\n\n        void set_size (\n            unsigned long width,\n            unsigned long height\n        );\n\n        void set_number_of_tabs (\n            unsigned long num\n        );\n\n        unsigned long number_of_tabs (\n        ) const;\n\n        const std::string tab_name (\n            unsigned long idx\n        ) const;\n\n        const std::wstring tab_wname (\n            unsigned long idx\n        ) const;\n\n        const dlib::ustring& tab_uname (\n            unsigned long idx\n        ) const;\n\n        void set_tab_name (\n            unsigned long idx,\n            const std::string& new_name\n        );\n\n        void set_tab_name (\n            unsigned long idx,\n            const std::wstring& new_name\n        );\n\n        void set_tab_name (\n            unsigned long idx,\n            const dlib::ustring& new_name\n        );\n\n        void set_pos (\n            long x,\n            long y\n        );\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*eh)(unsigned long new_idx,unsigned long old_idx)\n        )\n        {\n            auto_mutex M(m);\n            event_handler = make_mfp(object,eh);\n        }\n\n        void set_click_handler (\n            const any_function<void(unsigned long,unsigned long)>& eh\n        )\n        {\n            auto_mutex M(m);\n            event_handler = eh;\n        }\n\n        void set_tab_group (\n            unsigned long idx,\n            widget_group& group\n        );\n\n        void show (\n        );\n\n        void hide (\n        );\n\n        void enable (\n        );\n\n        void disable (\n        );\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n        void fit_to_contents (\n        );\n\n    protected:\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void draw (\n            const canvas& c\n        ) const;\n\n    private:\n        void recompute_tabs (\n        );\n        /*!\n            ensures\n                - recomputes the rectangles for all the tabs and makes this object\n                  wider if needed\n        !*/\n\n        void draw_tab (\n            const rectangle& tab,\n            const canvas& c\n        ) const;\n        /*!\n            ensures\n                - draws the outline of a tab as given by the rectangle onto c\n        !*/\n\n        struct tab_data\n        {\n            tab_data() : width(0), group(0) {}\n\n            dlib::ustring name;\n            unsigned long width;\n            rectangle rect;\n            widget_group* group;\n        };\n\n        unsigned long selected_tab_;\n\n        array<tab_data> tabs;\n\n        const long left_pad;\n        const long right_pad;\n        const long top_pad;\n        const long bottom_pad;\n\n        any_function<void(unsigned long,unsigned long)> event_handler;\n\n        // restricted functions\n        tabbed_display(tabbed_display&);        // copy constructor\n        tabbed_display& operator=(tabbed_display&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class named_rectangle\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class named_rectangle : public drawable \n    {\n        /*!\n            INITIAL VALUE\n                name == \"\"\n\n            CONVENTION\n                name_ == name()\n        !*/\n\n    public:\n\n        named_rectangle(  \n            drawable_window& w\n        );\n\n        virtual ~named_rectangle(\n        );\n\n        void set_size (\n            unsigned long width,\n            unsigned long height\n        );\n\n        void set_name (\n            const std::string& name\n        );\n\n        void set_name (\n            const std::wstring& name\n        );\n\n        void set_name (\n            const dlib::ustring& name\n        );\n\n        const std::string name (\n        ) const;\n\n        const std::wstring wname (\n        ) const;\n\n        const dlib::ustring uname (\n        ) const;\n\n        void wrap_around (\n            const rectangle& rect\n        );\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n    protected:\n\n        void draw (\n            const canvas& c\n        ) const;\n\n    private:\n\n        void make_name_fit_in_rect (\n        );\n\n        dlib::ustring name_;\n        unsigned long name_width;\n        unsigned long name_height;\n\n        // restricted functions\n        named_rectangle(named_rectangle&);        // copy constructor\n        named_rectangle& operator=(named_rectangle&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class mouse_tracker\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class mouse_tracker : public draggable \n    {\n\n    public:\n\n        mouse_tracker(  \n            drawable_window& w\n        ); \n\n        ~mouse_tracker(\n        );\n\n        void show (\n        );\n\n        void hide (\n        );\n\n        void enable (\n        );\n\n        void disable (\n        );\n\n        void set_pos (\n            long x,\n            long y\n        );\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n    protected:\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_drag (\n        );\n\n        void draw (\n            const canvas& c\n        ) const;\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n\n    private:\n\n        const long offset;\n        named_rectangle nr;\n        label x_label;\n        label y_label; \n        std::ostringstream sout;\n\n        long click_x, click_y;\n\n        // restricted functions\n        mouse_tracker(mouse_tracker&);        // copy constructor\n        mouse_tracker& operator=(mouse_tracker&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // function message_box()  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace message_box_helper\n    {\n        class box_win : public drawable_window\n        {\n            void initialize (\n            );\n        public:\n            box_win (\n                const std::string& title_,\n                const std::string& message_\n            );\n\n            box_win (\n                const std::wstring& title_,\n                const std::wstring& message_\n            );\n\n            box_win (\n                const dlib::ustring& title_,\n                const dlib::ustring& message_\n            );\n\n            ~box_win (\n            );\n\n            void set_click_handler (\n                const any_function<void()>& event_handler_\n            )\n            {\n                auto_mutex M(wm);\n                event_handler = event_handler_;\n            }\n\n        private:\n\n            static void deleter_thread (\n                void* param\n            );\n\n            void on_click (\n            );\n\n            on_close_return_code on_window_close (\n            );\n\n            const std::wstring title;\n            const std::wstring message;\n            label msg;\n            button btn_ok;\n\n            any_function<void()> event_handler;\n        };\n\n        class blocking_box_win : public drawable_window\n        {\n            void initialize (\n            );\n\n        public:\n            blocking_box_win (\n                const std::string& title_,\n                const std::string& message_\n            );\n\n            blocking_box_win (\n                const std::wstring& title_,\n                const std::wstring& message_\n            );\n\n            blocking_box_win (\n                const dlib::ustring& title_,\n                const dlib::ustring& message_\n            );\n\n            ~blocking_box_win (\n            );\n\n        private:\n\n            void on_click (\n            );\n\n            const std::wstring title;\n            const std::wstring message;\n            label msg;\n            button btn_ok;\n        };\n    }\n\n    template <\n        typename T\n        >\n    void message_box (\n        const std::string& title,\n        const std::string& message,\n        T& object,\n        void (T::*event_handler)() \n    )\n    {\n        using namespace message_box_helper;\n        box_win* win = new box_win(title,message);\n        win->set_click_handler(make_mfp(object,event_handler));\n    }\n\n    inline void message_box (\n        const std::string& title,\n        const std::string& message,\n        const any_function<void()>& event_handler\n    )\n    {\n        using namespace message_box_helper;\n        box_win* win = new box_win(title,message);\n        win->set_click_handler(event_handler);\n    }\n\n    inline void message_box (\n        const std::string& title,\n        const std::string& message\n    )\n    {\n        using namespace message_box_helper;\n        new box_win(title,message);\n    }\n\n    inline void message_box_blocking (\n        const std::string& title,\n        const std::string& message\n    )\n    {\n        using namespace message_box_helper;\n        blocking_box_win w(title,message);\n        w.wait_until_closed();\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class list_box\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace list_box_helper{\n    template <typename S = std::string>\n    class list_box : public scrollable_region, \n                     public enumerable<const S>\n    {\n        /*!\n            INITIAL VALUE\n                - ms_enabled == false\n                - items.size() == 0\n                - last_selected = 0\n\n            CONVENTION\n                - size() == items.size()\n                - (*this)[i] == items[i].name\n                - is_selected(i) == items[i].is_selected\n                - ms_enabled == multiple_select_enabled()\n\n                - items[i].width == the width of items[i].name as given by font::compute_size() \n                - items[i].height == the height of items[i].name as given by font::compute_size() \n\n                - last_selected == the last item the user selected\n        !*/\n\n    public:\n\n        list_box(  \n            drawable_window& w\n        );\n\n        ~list_box(\n        );\n\n        bool is_selected (\n            unsigned long index\n        ) const;\n\n        void select (\n            unsigned long index \n        );\n\n        void unselect (\n            unsigned long index \n        );\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style_\n        )\n        {\n            auto_mutex M(m);\n            style.reset(new style_type(style_));\n            scrollable_region::set_style(style_.get_scrollable_region_style());\n            parent.invalidate_rectangle(rect);\n        }\n\n        template <typename T>\n        void get_selected (\n            T& list\n        ) const\n        {\n            auto_mutex M(m);\n            list.clear();\n            for (unsigned long i = 0; i < items.size(); ++i)\n            {\n                if (items[i].is_selected)\n                {\n                    unsigned long idx = i;\n                    list.enqueue(idx);\n                }\n            }\n        }\n\n        template <typename T>\n        void load (\n            const T& list\n        )\n        {\n            auto_mutex M(m);\n            items.clear();\n            unsigned long i = 0;\n            items.set_max_size(list.size());\n            items.set_size(list.size());\n            list.reset();\n            unsigned long max_width = 0;\n            unsigned long total_height = 0;\n            while (list.move_next())\n            {\n                items[i].is_selected = false;\n                items[i].name = list.element();\n                mfont->compute_size(items[i].name,items[i].width, items[i].height);\n\n                if (items[i].width > max_width)\n                    max_width = items[i].width;\n                total_height += items[i].height;\n\n                ++i;\n            }\n            set_total_rect_size(max_width, total_height);\n\n            parent.invalidate_rectangle(rect);\n            last_selected = 0;\n        }\n\n        const S& operator[] (\n            unsigned long index\n        ) const;\n\n        bool multiple_select_enabled (\n        ) const;\n\n        void enable_multiple_select (\n        ); \n\n        void disable_multiple_select (\n        );\n\n        template <\n            typename T\n            >\n        void set_double_click_handler (\n            T& object,\n            void (T::*eh)(unsigned long index)\n        ) { auto_mutex M(m); event_handler = make_mfp(object,eh); }\n\n        void set_double_click_handler (\n            const any_function<void(unsigned long)>& eh\n        ) { auto_mutex M(m); event_handler = eh; }\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*eh)(unsigned long index)\n        ) { auto_mutex M(m); single_click_event_handler = make_mfp(object,eh); }\n\n        void set_click_handler (\n            const any_function<void(unsigned long)>& eh\n        ) { auto_mutex M(m); single_click_event_handler = eh; }\n\n        bool at_start (\n        ) const;\n\n        void reset (\n        ) const;\n\n        bool current_element_valid (\n        ) const;\n\n        const S& element (\n        ) const;\n\n        const S& element (\n        );\n\n        bool move_next (\n        ) const;\n\n        unsigned long size (\n        ) const;\n\n        unsigned long get_selected (\n        ) const;\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n    private:\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void draw (\n            const canvas& c\n        ) const;\n\n        template <typename SS>\n        struct data\n        {\n            SS name;\n            bool is_selected;\n            unsigned long width;\n            unsigned long height;\n        };\n\n        bool ms_enabled;\n        array<data<S> > items;\n        any_function<void(unsigned long)> event_handler;\n        any_function<void(unsigned long)> single_click_event_handler;\n        unsigned long last_selected;\n\n        scoped_ptr<list_box_style> style;\n\n        // restricted functions\n        list_box(list_box&);        // copy constructor\n        list_box& operator=(list_box&);    // assignment operator\n    };\n    }\n    typedef list_box_helper::list_box<std::string> list_box;\n    typedef list_box_helper::list_box<std::wstring> wlist_box;\n    typedef list_box_helper::list_box<dlib::ustring> ulist_box;\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // function open_file_box() \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace open_file_box_helper\n    {\n        class box_win : public drawable_window\n        {\n        public:\n            box_win (\n                const std::string& title,\n                bool has_text_field = false\n            );\n\n            ~box_win (\n            );\n\n            void set_click_handler (\n                const any_function<void(const std::string&)>& event_handler_\n            )\n            {\n                auto_mutex M(wm);\n                event_handler = event_handler_;\n            }\n\n        private:\n\n            void set_sizes(\n            );\n\n            void on_window_resized (\n            );\n\n            void deleter_thread (\n            );\n\n            void enter_folder (\n                const std::string& folder_name\n            );\n\n            void on_dirs_click (\n                unsigned long idx\n            );\n\n            void on_files_click (\n                unsigned long idx\n            );\n\n            void on_files_double_click (\n                unsigned long \n            );\n\n            void on_cancel_click (\n            );\n\n            void on_open_click (\n            );\n\n            void on_path_button_click (\n                toggle_button& btn\n            );\n\n            bool set_dir (\n                const std::string& dir\n            );\n\n            void on_root_click (\n            );\n\n            on_close_return_code on_window_close (\n            );\n\n            label lbl_dirs;\n            label lbl_files;\n            label lbl_file_name;\n            list_box lb_dirs;\n            list_box lb_files;\n            button btn_ok;\n            button btn_cancel;\n            toggle_button btn_root;\n            text_field tf_file_name;\n            std::string path;\n            std::string prefix;\n            int cur_dir;\n\n            any_function<void(const std::string&)> event_handler;\n            sequence<scoped_ptr<toggle_button> >::kernel_2a_c sob;\n        };\n    }\n\n    template <\n        typename T\n        >\n    void open_file_box (\n        T& object,\n        void (T::*event_handler)(const std::string&) \n    )\n    {\n        using namespace open_file_box_helper;\n        box_win* win = new box_win(\"Open File\",true);\n        win->set_click_handler(make_mfp(object,event_handler));\n    }\n\n    inline void open_file_box (\n        const any_function<void(const std::string&)>& event_handler\n    )\n    {\n        using namespace open_file_box_helper;\n        box_win* win = new box_win(\"Open File\",true);\n        win->set_click_handler(event_handler);\n    }\n\n    template <\n        typename T\n        >\n    void open_existing_file_box (\n        T& object,\n        void (T::*event_handler)(const std::string&) \n    )\n    {\n        using namespace open_file_box_helper;\n        box_win* win = new box_win(\"Open File\");\n        win->set_click_handler(make_mfp(object,event_handler));\n    }\n\n    inline void open_existing_file_box (\n        const any_function<void(const std::string&)>& event_handler\n    )\n    {\n        using namespace open_file_box_helper;\n        box_win* win = new box_win(\"Open File\");\n        win->set_click_handler(event_handler);\n    }\n\n    template <\n        typename T\n        >\n    void save_file_box (\n        T& object,\n        void (T::*event_handler)(const std::string&) \n    )\n    {\n        using namespace open_file_box_helper;\n        box_win* win = new box_win(\"Save File\",true);\n        win->set_click_handler(make_mfp(object,event_handler));\n    }\n\n    inline void save_file_box (\n        const any_function<void(const std::string&)>& event_handler\n    )\n    {\n        using namespace open_file_box_helper;\n        box_win* win = new box_win(\"Save File\",true);\n        win->set_click_handler(event_handler);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class menu_bar\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class menu_bar : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                - menus.size() == 0\n                - open_menu == 0 \n\n            CONVENTION \n                - size() == menus.size() \n                - all menu data is stored in menus\n                - menus[x].name == the name of the xth menu\n                - if (menus[x].underline_pos != std::string::npos) then\n                    - menus[x].underline_pos == the position of the character in the\n                      menu name that should be underlined\n                    - menus[x].underline_p1 != menus[x].underline_p2\n                      and these two points define the underline bar\n                - else\n                    - menus[x].underline_p1 == menus[x].underline_p2\n                - menus[x].menu == menu(x)\n                - menus[x].rect == the rectangle in which menus[x].name is drawn\n                - menus[x].bgrect == the rectangle for the xth menu button\n\n                - if (there is an open menu on the screen) then\n                    - open_menu == the index of the open menu from menus \n                - else\n                    - open_menu == menus.size() \n        !*/\n\n    public:\n        menu_bar(\n            drawable_window& w\n        );\n\n        ~menu_bar();\n\n        // this function does nothing\n        void set_pos(long,long){}\n\n        void set_main_font (\n            const shared_ptr_thread_safe<font>& f\n        );\n\n        void set_number_of_menus (\n            unsigned long num\n        );\n\n        unsigned long number_of_menus (\n        ) const;\n\n        void set_menu_name (\n            unsigned long idx,\n            const std::string name,\n            char underline_ch = '\\0'\n        );\n\n        void set_menu_name (\n            unsigned long idx,\n            const std::wstring name,\n            char underline_ch = '\\0'\n        );\n\n        void set_menu_name (\n            unsigned long idx,\n            const dlib::ustring name,\n            char underline_ch = '\\0'\n        );\n\n        const std::string menu_name (\n            unsigned long idx\n        ) const;\n\n        const std::wstring menu_wname (\n            unsigned long idx\n        ) const;\n\n        const dlib::ustring menu_uname (\n            unsigned long idx\n        ) const;\n\n        popup_menu& menu (\n            unsigned long idx\n        );\n\n        const popup_menu& menu (\n            unsigned long idx\n        ) const;\n\n    protected:\n\n        void on_window_resized (\n        );\n\n        void draw (\n            const canvas& c\n        ) const;\n\n        void on_window_moved (\n        );\n\n        void on_focus_lost (\n        );\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long ,\n            long x,\n            long y,\n            bool \n        );\n\n        void on_mouse_move (\n            unsigned long ,\n            long x,\n            long y\n        );\n\n        void on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        );\n\n    private:\n\n        void show_menu (\n            unsigned long i\n        );\n\n        void hide_menu (\n        );\n\n        void on_popup_hide (\n        );\n\n        void compute_menu_geometry (\n        );\n\n        void adjust_position (\n        );\n\n        struct menu_data\n        {\n            menu_data():underline_pos(dlib::ustring::npos){}\n\n            dlib::ustring name;\n            dlib::ustring::size_type underline_pos;\n            popup_menu menu;\n            rectangle rect;\n            rectangle bgrect;\n            point underline_p1;\n            point underline_p2;\n        };\n\n        array<menu_data> menus;\n        unsigned long open_menu;\n\n        // restricted functions\n        menu_bar(menu_bar&);        // copy constructor\n        menu_bar& operator=(menu_bar&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class directed_graph_drawer\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename graph_type>\n    class directed_graph_drawer : public zoomable_region \n    {\n        /*!\n            INITIAL VALUE\n                - edge_selected == false\n                - mouse_drag == false\n                - selected_node == 0\n                - graph_.number_of_nodes() == 0\n                - external_graph.number_of_nodes() == 0\n                - radius == 25\n                - last_mouse_click_in_display == false\n\n            CONVENTION\n                - radius == the radius of the nodes when they aren't zoomed\n                - external_graph and graph_ have the same graph structure\n                - external_graph == graph()\n                - external_graph.node(i) == graph_node(i)\n\n                - if (one of the nodes is selected) then\n                    - selected_node < graph_.number_of_nodes()\n                    - graph_.node(selected_node) == the selected node\n                - else\n                    - selected_node == graph_.number_of_nodes()\n\n                - if (the user is dragging a node with the mouse) then\n                    - mouse_drag == true\n                    - drag_offset == the vector from the mouse position to the\n                      center of the node\n                - else\n                    - mouse_drag == false\n\n                - if (the user has selected an edge) then\n                    - edge_selected == true\n                    - the parent node is graph_.node(selected_edge_parent)\n                    - the child node is graph_.node(selected_edge_parent)\n                - else\n                    - edge_selected == false\n\n                - for all valid i:\n                    - graph_.node(i).data.p == the center of the node in graph space\n                    - graph_.node(i).data.name == node_label(i) \n                    - graph_.node(i).data.color == node_color(i) \n                    - graph_.node(i).data.str_rect == a rectangle sized to contain graph_.node(i).data.name\n\n                - if (the last mouse click in our parent window as in our display_rect_ ) then\n                    - last_mouse_click_in_display == true\n                - else\n                    - last_mouse_click_in_display == false\n        !*/\n\n    public:\n        directed_graph_drawer (\n            drawable_window& w\n        ) :\n            zoomable_region(w,MOUSE_CLICK | MOUSE_WHEEL | KEYBOARD_EVENTS),\n            radius(25),\n            edge_selected(false),\n            last_mouse_click_in_display(false)\n        {\n            mouse_drag = false;\n            selected_node = 0;\n\n            // Whenever you make your own drawable (or inherit from draggable or button_action)\n            // you have to remember to call this function to enable the events.  The idea\n            // here is that you can perform whatever setup you need to do to get your \n            // object into a valid state without needing to worry about event handlers \n            // triggering before you are ready.\n            enable_events();\n        }\n\n        ~directed_graph_drawer (\n        )\n        {\n            // Disable all further events for this drawable object.  We have to do this \n            // because we don't want draw() events coming to this object while or after \n            // it has been destructed.\n            disable_events();\n\n            // Tell the parent window to redraw its area that previously contained this\n            // drawable object.\n            parent.invalidate_rectangle(rect);\n        }\n\n        void clear_graph (\n        )\n        {\n            auto_mutex M(m);\n            graph_.clear();\n            external_graph.clear();\n            parent.invalidate_rectangle(display_rect());\n        }\n\n        const typename graph_type::node_type& graph_node (\n            unsigned long i\n        )  const\n        {\n            DLIB_ASSERT ( i < number_of_nodes() ,\n                    \"\\tgraph_type::node_type& directed_graph_drawer::graph_node(i)\"\n                    << \"\\n\\ti:                 \" << i \n                    << \"\\n\\tnumber_of_nodes(): \" << number_of_nodes() \n                    );\n            return external_graph.node(i);\n        }\n\n        typename graph_type::node_type& graph_node (\n            unsigned long i\n        ) \n        {\n            DLIB_ASSERT ( i < number_of_nodes() ,\n                    \"\\tgraph_type::node_type& directed_graph_drawer::graph_node(i)\"\n                    << \"\\n\\ti:                 \" << i \n                    << \"\\n\\tnumber_of_nodes(): \" << number_of_nodes() \n                    );\n            return external_graph.node(i);\n        }\n\n        const graph_type& graph (\n        ) const\n        {\n            return external_graph;\n        }\n\n        void save_graph (\n            std::ostream& out\n        )\n        {\n            auto_mutex M(m);\n            serialize(external_graph, out);\n            serialize(graph_, out);\n            parent.invalidate_rectangle(display_rect());\n        }\n\n        void load_graph (\n            std::istream& in \n        )\n        {\n            auto_mutex M(m);\n            deserialize(external_graph, in);\n            deserialize(graph_, in);\n            parent.invalidate_rectangle(display_rect());\n        }\n\n        unsigned long number_of_nodes (\n        ) const\n        {\n            auto_mutex M(m);\n            return graph_.number_of_nodes();\n        }\n\n        void set_node_label (\n            unsigned long i,\n            const std::string& label\n        )\n        {\n            set_node_label(i, convert_mbstring_to_wstring(label));\n        }\n\n        void set_node_label (\n            unsigned long i,\n            const std::wstring& label\n        )\n        {\n            set_node_label(i, convert_wstring_to_utf32(label));\n        }\n\n        void set_node_label (\n            unsigned long i,\n            const dlib::ustring& label\n        )\n        {\n            auto_mutex M(m);\n            DLIB_ASSERT ( i < number_of_nodes() ,\n                    \"\\tvoid directed_graph_drawer::set_node_label(i,label)\"\n                    << \"\\n\\ti:                 \" << i \n                    << \"\\n\\tlabel:             \" << narrow(label) \n                    << \"\\n\\tnumber_of_nodes(): \" << number_of_nodes() \n                    );\n            graph_.node(i).data.name = label.c_str();\n            unsigned long width, height;\n            mfont->compute_size(label,width,height);\n            graph_.node(i).data.str_rect = rectangle(width,height);\n            parent.invalidate_rectangle(display_rect());\n        }\n\n        void set_node_color (\n            unsigned long i,\n            rgb_pixel color\n        )\n        {\n            auto_mutex M(m);\n            DLIB_ASSERT ( i < number_of_nodes() ,\n                    \"\\tvoid directed_graph_drawer::set_node_color(i,label)\"\n                    << \"\\n\\ti:                 \" << i \n                    << \"\\n\\tnumber_of_nodes(): \" << number_of_nodes() \n                    );\n            graph_.node(i).data.color = color;\n            parent.invalidate_rectangle(display_rect());\n        }\n\n        rgb_pixel node_color (\n            unsigned long i\n        ) const\n        {\n            auto_mutex M(m);\n            DLIB_ASSERT ( i < number_of_nodes() ,\n                    \"\\trgb_pixel directed_graph_drawer::node_color(i)\"\n                    << \"\\n\\ti:                 \" << i \n                    << \"\\n\\tnumber_of_nodes(): \" << number_of_nodes() \n                    );\n            return graph_.node(i).data.color;\n        }\n\n        const std::string node_label (\n            unsigned long i\n        ) const\n        {\n            auto_mutex M(m);\n            DLIB_ASSERT ( i < number_of_nodes() ,\n                    \"\\tconst std::ustring directed_graph_drawer::node_label(i)\"\n                    << \"\\n\\ti:                 \" << i \n                    << \"\\n\\tnumber_of_nodes(): \" << number_of_nodes() \n                    );\n            return narrow(graph_.node(i).data.name);\n        }\n\n        const std::wstring node_wlabel (\n            unsigned long i\n        ) const\n        {\n            return convert_utf32_to_wstring(node_ulabel(i));\n        }\n\n        const dlib::ustring node_ulabel (\n            unsigned long i\n        ) const\n        {\n            auto_mutex M(m);\n            DLIB_ASSERT ( i < number_of_nodes() ,\n                    \"\\tconst std::ustring directed_graph_drawer::node_label(i)\"\n                    << \"\\n\\ti:                 \" << i \n                    << \"\\n\\tnumber_of_nodes(): \" << number_of_nodes() \n                    );\n            return graph_.node(i).data.name.c_str();\n        }\n\n        template <\n            typename T\n            >\n        void set_node_selected_handler (\n            T& object,\n            void (T::*event_handler_)(unsigned long)\n        )\n        {\n            auto_mutex M(m);\n            node_selected_handler = make_mfp(object,event_handler_);\n        }\n\n        void set_node_selected_handler (\n            const any_function<void(unsigned long)>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            node_selected_handler = event_handler_;\n        }\n\n        template <\n            typename T\n            >\n        void set_node_deselected_handler (\n            T& object,\n            void (T::*event_handler_)(unsigned long)\n        )\n        {\n            auto_mutex M(m);\n            node_deselected_handler = make_mfp(object,event_handler_);\n        }\n\n        void set_node_deselected_handler (\n            const any_function<void(unsigned long)>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            node_deselected_handler = event_handler_;\n        }\n\n        template <\n            typename T\n            >\n        void set_node_deleted_handler (\n            T& object,\n            void (T::*event_handler_)()\n        )\n        {\n            auto_mutex M(m);\n            node_deleted_handler = make_mfp(object,event_handler_);\n        }\n\n        void set_node_deleted_handler (\n            const any_function<void()>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            node_deleted_handler = event_handler_;\n        }\n\n        template <\n            typename T\n            >\n        void set_graph_modified_handler (\n            T& object,\n            void (T::*event_handler_)()\n        )\n        {\n            auto_mutex M(m);\n            graph_modified_handler = make_mfp(object,event_handler_);\n        }\n\n        void set_graph_modified_handler (\n            const any_function<void()>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            graph_modified_handler = event_handler_;\n        }\n\n    protected:\n\n        void on_keydown (\n            unsigned long key,          \n            bool ,\n            unsigned long \n        )\n        {\n            // ignore all keyboard input if the last thing the user clicked on \n            // wasn't the display area\n            if (last_mouse_click_in_display == false)\n                return;\n\n            // if a node is selected\n            if (selected_node != graph_.number_of_nodes())\n            {\n                // deselect the node if the user hits escape\n                if (key == base_window::KEY_ESC)\n                {\n                    parent.invalidate_rectangle(display_rect());\n                    if (node_deselected_handler.is_set())\n                        node_deselected_handler(selected_node);\n                    selected_node = graph_.number_of_nodes();\n                }\n\n                // delete the node if the user hits delete \n                if (key == base_window::KEY_DELETE || key == base_window::KEY_BACKSPACE)\n                {\n                    parent.invalidate_rectangle(display_rect());\n                    graph_.remove_node(selected_node);\n                    external_graph.remove_node(selected_node);\n                    selected_node = graph_.number_of_nodes();\n                    mouse_drag = false;\n                    if (graph_modified_handler.is_set())\n                        graph_modified_handler();\n                    if (node_deleted_handler.is_set())\n                        node_deleted_handler();\n                }\n            }\n\n            // if an edge is selected\n            if (edge_selected)\n            {\n                // deselect the node if the user hits escape\n                if (key == base_window::KEY_ESC)\n                {\n                    parent.invalidate_rectangle(display_rect());\n                    edge_selected = false;\n                }\n\n                // delete the node if the user hits delete \n                if (key == base_window::KEY_DELETE || key == base_window::KEY_BACKSPACE)\n                {\n                    parent.invalidate_rectangle(display_rect());\n                    graph_.remove_edge(selected_edge_parent, selected_edge_child);\n                    external_graph.remove_edge(selected_edge_parent, selected_edge_child);\n                    edge_selected = false;\n\n                    if (graph_modified_handler.is_set())\n                        graph_modified_handler();\n                }\n            }\n        }\n\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        )\n        {\n            if (mouse_drag)\n            {\n                const point p(nearest_point(display_rect(),point(x,y)));\n\n                point center = drag_offset + p;\n                graph_.node(selected_node).data.p = gui_to_graph_space(center);\n                parent.invalidate_rectangle(display_rect());\n            }\n            else\n            {\n                zoomable_region::on_mouse_move(state,x,y);\n            }\n\n            // check if the mouse isn't being dragged anymore\n            if ((state & base_window::LEFT) == 0)\n            {\n                mouse_drag = false;\n            }\n        }\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        )\n        {\n            mouse_drag = false;\n            zoomable_region::on_mouse_up(btn,state,x,y);\n        }\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        )\n        {\n            bool redraw = false;\n\n            if (display_rect().contains(x,y) && \n                (btn == base_window::RIGHT || btn == base_window::LEFT) && \n                (state & base_window::SHIFT) == 0 )\n            {\n                // start out saying no edge is selected\n                if (edge_selected)\n                {\n                    edge_selected = false;\n                    redraw = true;\n                }\n\n                bool click_hit_node = false;\n                dlib::vector<double,2> p(gui_to_graph_space(point(x,y)));\n                // check if this click is on an existing node\n                for (unsigned long i = 0; i < graph_.number_of_nodes(); ++i)\n                {\n                    dlib::vector<double,2> n(graph_.node(i).data.p);\n                    if ((p-n).length() < radius)\n                    {\n                        click_hit_node = true;\n                        point center = graph_to_gui_space(graph_.node(i).data.p);\n                        mouse_drag = true;\n                        drag_offset = center - point(x,y);\n\n                        // only do something if the click isn't on the currently\n                        // selected node\n                        if (selected_node != i)\n                        {\n                            // send out the deselected event if appropriate\n                            if (selected_node != graph_.number_of_nodes() && node_deselected_handler.is_set())\n                                node_deselected_handler(selected_node);\n\n                            selected_node = i;\n                            redraw = true;\n                            if (node_selected_handler.is_set())\n                                node_selected_handler(selected_node);\n                        }\n                        break;\n                    }\n                }\n\n                // if the click didn't hit any node then make sure nothing is selected\n                if (click_hit_node == false && selected_node != graph_.number_of_nodes())\n                {\n                    if (node_deselected_handler.is_set())\n                        node_deselected_handler(selected_node);\n                    selected_node = graph_.number_of_nodes();\n                    redraw = true;\n                }\n\n\n                // check if this click is on an edge if we didn't click on a node\n                if (click_hit_node == false)\n                {\n                    for (unsigned long n = 0; n < graph_.number_of_nodes() && edge_selected == false; ++n)\n                    {\n                        const dlib::vector<double,2> parent_center(graph_to_gui_space(graph_.node(n).data.p));\n                        for (unsigned long e = 0; e < graph_.node(n).number_of_children() && edge_selected == false; ++e)\n                        {\n                            const dlib::vector<double,2> child_center(graph_to_gui_space(graph_.node(n).child(e).data.p));\n\n                            rectangle area;\n                            area += parent_center;\n                            area += child_center;\n                            // if the point(x,y) is between the two nodes then lets consider it further\n                            if (area.contains(point(x,y)))\n                            {\n                                p = point(x,y);\n                                const dlib::vector<double> z(0,0,1);\n                                // find the distance from the line between the two nodes\n                                const dlib::vector<double,2> perpendicular(z.cross(parent_center-child_center).normalize());\n                                double distance = std::abs((child_center-p).dot(perpendicular));\n                                if (distance < 8)\n                                {\n                                    edge_selected = true;\n                                    selected_edge_parent = n;\n                                    selected_edge_child = graph_.node(n).child(e).index();\n                                    redraw = true;\n                                }\n                            }\n                        }\n                    }\n                }\n\n\n                // if the click didn't land on any node then add a new one if this was\n                // a right mouse button click\n                if (click_hit_node == false && btn == base_window::RIGHT)\n                {\n                    const unsigned long n = graph_.add_node();\n                    external_graph.add_node();\n\n                    graph_.node(n).data.p = gui_to_graph_space(point(x,y));\n\n                    redraw = true;\n                    selected_node = n;\n                    mouse_drag = false;\n                    if (graph_modified_handler.is_set())\n                        graph_modified_handler();\n\n                    if (node_selected_handler.is_set())\n                        node_selected_handler(selected_node);\n\n                }\n                else if (selected_node == graph_.number_of_nodes())\n                {\n                    // in this case the click landed in the white area between nodes\n                    zoomable_region::on_mouse_down( btn, state, x, y, is_double_click);\n                }\n            }\n\n            // If the user is shift clicking with the mouse then see if we\n            // should add a new edge.\n            if (display_rect().contains(x,y) && \n                btn == base_window::LEFT && \n                (state & base_window::SHIFT) && \n                selected_node != graph_.number_of_nodes() )\n            {\n                dlib::vector<double,2> p(gui_to_graph_space(point(x,y)));\n                // check if this click is on an existing node\n                for (unsigned long i = 0; i < graph_.number_of_nodes(); ++i)\n                {\n                    dlib::vector<double,2> n(graph_.node(i).data.p);\n                    if ((p-n).length() < radius)\n                    {\n                        // add the edge if it doesn't already exist and isn't an edge back to \n                        // the same node\n                        if (graph_.has_edge(selected_node,i) == false && selected_node != i &&\n                            graph_.has_edge(i, selected_node) == false)\n                        {\n                            graph_.add_edge(selected_node,i);\n                            external_graph.add_edge(selected_node,i);\n                            redraw = true;\n\n                            if (graph_modified_handler.is_set())\n                                graph_modified_handler();\n                        }\n                        break;\n                    }\n                }\n            }\n\n\n            if (redraw)\n                parent.invalidate_rectangle(display_rect());\n\n\n            if (display_rect().contains(x,y) == false)\n                last_mouse_click_in_display = false;\n            else\n                last_mouse_click_in_display = true;\n        }\n\n        void draw (\n            const canvas& c\n        ) const\n        {\n            zoomable_region::draw(c);\n\n            rectangle area = c.intersect(display_rect());\n            if (area.is_empty() == true)\n                return;\n\n\n            if (enabled)\n                fill_rect(c,display_rect(),255);\n            else\n                fill_rect(c,display_rect(),128);\n\n\n            const unsigned long rad = static_cast<unsigned long>(radius*zoom_scale());\n            point center;\n\n\n            // first draw all the edges\n            for (unsigned long i = 0; i < graph_.number_of_nodes(); ++i)\n            {\n                center = graph_to_gui_space(graph_.node(i).data.p);\n                const rectangle circle_area(centered_rect(center,2*(rad+8),2*(rad+8)));\n\n                // draw lines to all this node's parents \n                const dlib::vector<double> z(0,0,1);\n                for (unsigned long j = 0; j < graph_.node(i).number_of_parents(); ++j)\n                {\n                    point p(graph_to_gui_space(graph_.node(i).parent(j).data.p));\n\n                    rgb_pixel color(0,0,0);\n                    // if this is the selected edge then draw it with red instead of black\n                    if (edge_selected && selected_edge_child == i && selected_edge_parent == graph_.node(i).parent(j).index())\n                    {\n                        color.red = 255;\n                        // we need to be careful when drawing this line to not draw it over the node dots since it \n                        // has a different color from them and would look weird\n                        dlib::vector<double,2> v(p-center);\n                        v = v.normalize()*rad;\n                        draw_line(c,center+v,p-v ,color, area);\n                    }\n                    else\n                    {\n                        draw_line(c,center,p ,color, area);\n                    }\n\n\n                    // draw the triangle pointing to this node\n                    if (area.intersect(circle_area).is_empty() == false)\n                    {\n                        dlib::vector<double,2> v(p-center);\n                        v = v.normalize();\n\n                        dlib::vector<double,2> cross = z.cross(v).normalize();\n                        dlib::vector<double,2> r(center + v*rad);\n                        for (double i = 0; i < 8*zoom_scale(); i += 0.1)\n                            draw_line(c,(r+v*i)+cross*i, (r+v*i)-cross*i,color,area);\n                    }\n                }\n            }\n\n\n            // now draw all the node dots\n            for (unsigned long i = 0; i < graph_.number_of_nodes(); ++i)\n            {\n                center = graph_to_gui_space(graph_.node(i).data.p);\n                const rectangle circle_area(centered_rect(center,2*(rad+8),2*(rad+8)));\n\n                // draw the actual dot for this node\n                if (area.intersect(circle_area).is_empty()==false)\n                {\n                    rgb_alpha_pixel color;\n                    assign_pixel(color, graph_.node(i).data.color);\n                    // this node is in area so lets draw it and all of it's edges as well\n                    draw_solid_circle(c,center,rad-3,color,area);\n                    color.alpha = 240;\n                    draw_circle(c,center,rad-3,color,area);\n                    color.alpha = 200;\n                    draw_circle(c,center,rad-2.5,color,area);\n                    color.alpha = 160;\n                    draw_circle(c,center,rad-2.0,color,area);\n                    color.alpha = 120;\n                    draw_circle(c,center,rad-1.5,color,area);\n                    color.alpha = 80;\n                    draw_circle(c,center,rad-1.0,color,area);\n                    color.alpha = 40;\n                    draw_circle(c,center,rad-0.5,color,area);\n\n                }\n\n\n                if (i == selected_node)\n                    draw_circle(c,center,rad+5,rgb_pixel(0,0,255),area);\n            }\n\n\n            // now draw all the strings last\n            for (unsigned long i = 0; i < graph_.number_of_nodes(); ++i)\n            {\n                center = graph_to_gui_space(graph_.node(i).data.p);\n                rectangle circle_area(centered_rect(center,2*rad+3,2*rad+3));\n                if (area.intersect(circle_area).is_empty()==false)\n                {\n                    rgb_pixel color = graph_.node(i).data.color;\n                    // invert this color\n                    color.red = 255-color.red;\n                    color.green = 255-color.green;\n                    color.blue = 255-color.blue;\n                    sout << i;\n                    unsigned long width, height;\n                    mfont->compute_size(sout.str(),width,height);\n                    rectangle str_rect(centered_rect(center, width,height));\n                    if (circle_area.contains(str_rect))\n                    {\n                        mfont->draw_string(c,str_rect,sout.str(),color,0,std::string::npos,area);\n\n                        // draw the label for this node if it isn't empty\n                        if(graph_.node(i).data.name.size() > 0)\n                        {\n                            rectangle str_rect(graph_.node(i).data.str_rect);\n                            str_rect = centered_rect(center.x(), center.y()-rad-mfont->height(),  str_rect.width(), str_rect.height());\n                            mfont->draw_string(c,str_rect,graph_.node(i).data.name,0,0,std::string::npos,area);\n                        }\n                    }\n                    sout.str(\"\");\n                }\n            }\n        }\n\n    private:\n\n        struct data\n        {\n            data() : color(0,0,0) {}\n            vector<double> p;\n            dlib::ustring name;\n            rectangle str_rect;\n            rgb_pixel color;\n        };\n\n        friend void serialize(const data& item, std::ostream& out)\n        {\n            serialize(item.p, out);\n            serialize(item.name, out);\n            serialize(item.str_rect, out);\n            serialize(item.color, out);\n        }\n\n        friend void deserialize(data& item, std::istream& in)\n        {\n            deserialize(item.p, in);\n            deserialize(item.name, in);\n            deserialize(item.str_rect, in);\n            deserialize(item.color, in);\n        }\n\n        mutable std::ostringstream sout;\n\n        const double radius;\n        unsigned long selected_node;\n        bool mouse_drag; // true if the user is dragging a node\n        point drag_offset; \n\n        bool edge_selected;\n        unsigned long selected_edge_parent;\n        unsigned long selected_edge_child;\n\n        any_function<void(unsigned long)> node_selected_handler;\n        any_function<void(unsigned long)> node_deselected_handler;\n        any_function<void()> node_deleted_handler;\n        any_function<void()> graph_modified_handler;\n\n        graph_type external_graph;\n        // rebind the graph_ type to make us a graph_ of data structs\n        typename graph_type::template rebind<data,char, typename graph_type::mem_manager_type>::other graph_;\n\n        bool last_mouse_click_in_display;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class text_grid\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class text_grid : public scrollable_region \n    {\n        /*!\n            INITIAL VALUE\n                - has_focus == false\n                - vertical_scroll_increment() == 10\n                - horizontal_scroll_increment() == 10\n                - border_color_ == rgb_pixel(128,128,128)\n\n            CONVENTION\n                - grid.nr() == row_height.size()\n                - grid.nc() == col_width.size()\n                - border_color() == border_color_\n                - text(r,c) == grid[r][c].text\n                - text_color(r,c) == grid[r][c].text_color\n                - background_color(r,c) == grid[r][c].bg_color\n\n                - if (the user has clicked on this widget and caused one of the\n                    boxes to have input focus) then\n                    - has_focus == true\n                    - grid[active_row][active_col] == the active text box\n                    - cursor_pos == the position of the cursor in the above box\n                    - if (the cursor should be displayed) then\n                        - show_cursor == true\n                    - else\n                        - show_cursor == false\n                - else\n                    - has_focus == false\n        !*/\n\n    public:\n        text_grid (\n            drawable_window& w\n        ); \n\n        ~text_grid (\n        );\n\n        void set_grid_size (\n            unsigned long rows,\n            unsigned long cols\n        );\n\n        unsigned long number_of_columns (\n        ) const;\n\n        unsigned long number_of_rows (\n        ) const;\n\n        int next_free_user_event_number (\n        ) const;\n\n        rgb_pixel border_color (\n        ) const;\n\n        void set_border_color (\n            rgb_pixel color\n        );\n\n        const std::string text (\n            unsigned long row,\n            unsigned long col\n        ) const;\n\n        const std::wstring wtext (\n            unsigned long row,\n            unsigned long col\n        ) const;\n\n        const dlib::ustring utext (\n            unsigned long row,\n            unsigned long col\n        ) const;\n\n        void set_text (\n            unsigned long row,\n            unsigned long col,\n            const std::string& str\n        );\n\n        void set_text (\n            unsigned long row,\n            unsigned long col,\n            const std::wstring& str\n        );\n\n        void set_text (\n            unsigned long row,\n            unsigned long col,\n            const dlib::ustring& str\n        );\n\n        const rgb_pixel text_color (\n            unsigned long row,\n            unsigned long col\n        ) const;\n\n        void set_text_color (\n            unsigned long row,\n            unsigned long col,\n            const rgb_pixel color\n        );\n\n        const rgb_pixel background_color (\n            unsigned long row,\n            unsigned long col\n        ) const;\n\n        void set_background_color (\n            unsigned long row,\n            unsigned long col,\n            const rgb_pixel color\n        );\n\n        bool is_editable (\n            unsigned long row,\n            unsigned long col\n        ) const;\n\n        void set_editable (\n            unsigned long row,\n            unsigned long col,\n            bool editable\n        );\n\n        void set_column_width (\n            unsigned long col,\n            unsigned long width\n        );\n\n        void set_row_height (\n            unsigned long row,\n            unsigned long height \n        );\n\n        void disable (\n        );\n\n        void hide (\n        );\n\n        template <\n            typename T\n            >\n        void set_text_modified_handler (\n            T& object,\n            void (T::*eh)(unsigned long, unsigned long)\n        ) { text_modified_handler = make_mfp(object,eh); }\n\n        void set_text_modified_handler (\n            const any_function<void(unsigned long, unsigned long)>& eh\n        ) { text_modified_handler = eh; }\n\n    private:\n\n        void on_user_event (\n            int num\n        );\n\n        void timer_action (\n        ); \n        /*!\n            ensures\n                - flips the state of show_cursor \n        !*/\n\n        void compute_bg_rects (\n        );\n\n        void compute_total_rect (\n        );\n\n        void on_keydown (\n            unsigned long key,          \n            bool is_printable,\n            unsigned long state\n        );\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_focus_lost (\n        );\n\n        void draw (\n            const canvas& c\n        ) const;\n\n        rectangle get_text_rect (\n            unsigned long row,\n            unsigned long col\n        ) const;\n\n        rectangle get_bg_rect (\n            unsigned long row,\n            unsigned long col\n        ) const;\n\n        struct data_type\n        {\n            data_type(): text_color(0,0,0), bg_color(255,255,255),\n            first(0), is_editable(true) \n            {}\n\n            dlib::ustring text;\n            rgb_pixel text_color;\n            rgb_pixel bg_color;\n            rectangle bg_rect;\n            dlib::ustring::size_type first;\n            bool is_editable;\n        };\n\n        void drop_input_focus (\n        );\n\n        void move_cursor (\n            long row,\n            long col,\n            long new_cursor_pos\n        );\n\n        array2d<data_type> grid;\n        array<unsigned long> col_width;\n        array<unsigned long> row_height;\n        bool has_focus;\n        long active_col;\n        long active_row;\n        long cursor_pos;\n        bool show_cursor;\n        bool recent_cursor_move;\n        timer<text_grid> cursor_timer;\n        rgb_pixel border_color_;\n        any_function<void(unsigned long, unsigned long)> text_modified_handler;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class image_display : public scrollable_region \n    {\n        /*!\n            INITIAL VALUE\n                - img.size() == 0\n                - overlay_rects.size() == 0\n                - overlay_lines.size() == 0\n                - drawing_rect == false\n                - rect_is_selected == false\n\n            CONVENTION\n                - img == the image this object displays\n                - overlay_rects == the overlay rectangles this object displays\n                - overlay_lines == the overlay lines this object displays\n\n                - if (drawing_rect) then\n                    - the user is drawing a rectangle on the screen and is\n                      thus holding down CTRL and the left mouse button.\n                    - rect_anchor == the point on the screen where the user\n                      clicked to begin drawing the rectangle.  \n                    - rect_to_draw == the rectangle which should appear on the screen.\n\n                - if (rect_is_selected) then\n                    - selected_rect == the index in overlay_rects of the user selected\n                      rectangle.\n                    - last_right_click_pos == the last place we saw the user right click\n                      the mouse.\n                    - parts_menu.is_enabled() == true\n                    - if (it is actually a part of this rect that is selected) then\n                        - selected_part_name == the name of the part in overlay_rects[selected_rect].parts\n                          that is selected.\n                    - else\n                        - selected_part_name.size() == 0\n                - else\n                    - parts_menu.is_enabled() == false\n                    - selected_part_name.size() == 0\n        !*/\n\n    public:\n\n        image_display(  \n            drawable_window& w\n        );\n\n        ~image_display(\n        );\n\n        template <\n            typename image_type\n            >\n        void set_image (\n            const image_type& new_img\n        )\n        {\n            auto_mutex M(m);\n\n            // if the new image has a different size when compared to the previous image\n            // then we should readjust the total rectangle size.\n            if (num_rows(new_img) != img.nr() || num_columns(new_img) != img.nc())\n            {\n                if (zoom_in_scale != 1)\n                    set_total_rect_size(num_columns(new_img)*zoom_in_scale, num_rows(new_img)*zoom_in_scale);\n                else\n                    set_total_rect_size(num_columns(new_img)/zoom_out_scale, num_rows(new_img)/zoom_out_scale);\n            }\n            else\n            {\n                parent.invalidate_rectangle(rect);\n            }\n\n            highlighted_rect = std::numeric_limits<unsigned long>::max();\n            rect_is_selected = false;\n            parts_menu.disable();\n            assign_image_scaled(img,new_img);\n        }\n\n        virtual void set_pos (\n            long x,\n            long y\n        )\n        {\n            auto_mutex lock(m);\n            scrollable_region::set_pos(x,y);\n            parts_menu.set_rect(rect);\n        }\n\n        virtual void set_size (\n            unsigned long width,\n            unsigned long height \n        )\n        {\n            auto_mutex lock(m);\n            scrollable_region::set_size(width,height);\n            parts_menu.set_rect(rect);\n        }\n\n        struct overlay_rect\n        {\n            overlay_rect() :crossed_out(false) { assign_pixel(color, 0);}\n\n            template <typename pixel_type>\n            overlay_rect(const rectangle& r, pixel_type p) \n                : rect(r),crossed_out(false) { assign_pixel(color, p); }\n\n            template <typename pixel_type>\n            overlay_rect(const rectangle& r, pixel_type p, const std::string& l) \n                : rect(r),label(l),crossed_out(false) { assign_pixel(color, p); }\n\n            template <typename pixel_type>\n            overlay_rect(const rectangle& r, pixel_type p, const std::string& l, const std::map<std::string,point>& parts_) \n                : rect(r),label(l),parts(parts_),crossed_out(false) { assign_pixel(color, p); }\n\n            rectangle rect;\n            rgb_alpha_pixel color;\n            std::string label;\n            std::map<std::string,point> parts;\n            bool crossed_out;\n        };\n\n        struct overlay_line\n        {\n            overlay_line() { assign_pixel(color, 0);}\n\n            template <typename pixel_type>\n            overlay_line(const point& p1_, const point& p2_, pixel_type p) \n                : p1(p1_), p2(p2_) { assign_pixel(color, p); }\n\n            point p1;\n            point p2;\n            rgb_alpha_pixel color;\n        };\n\n        struct overlay_circle\n        {\n            overlay_circle():radius(0) { assign_pixel(color, 0);}\n\n            template <typename pixel_type>\n            overlay_circle(const point& center_, const int radius_, pixel_type p) \n                : center(center_), radius(radius_) { assign_pixel(color, p); }\n\n            template <typename pixel_type>\n            overlay_circle(const point& center_, const int radius_, pixel_type p, const std::string& l) \n                : center(center_), radius(radius_), label(l) { assign_pixel(color, p); }\n\n            point center;\n            int radius;\n            rgb_alpha_pixel color;\n            std::string label;\n        };\n\n        void add_overlay (\n            const overlay_rect& overlay\n        );\n\n        void add_overlay (\n            const overlay_line& overlay\n        );\n\n        void add_overlay (\n            const overlay_circle& overlay\n        );\n\n        void add_overlay (\n            const std::vector<overlay_rect>& overlay\n        );\n\n        void add_overlay (\n            const std::vector<overlay_line>& overlay\n        );\n\n        void add_overlay (\n            const std::vector<overlay_circle>& overlay\n        );\n\n        void clear_overlay (\n        );\n\n        rectangle get_image_display_rect (\n        ) const;\n\n        std::vector<overlay_rect> get_overlay_rects (\n        ) const;\n\n        void set_default_overlay_rect_label (\n            const std::string& label\n        );\n\n        std::string get_default_overlay_rect_label (\n        ) const;\n\n        void set_default_overlay_rect_color (\n            const rgb_alpha_pixel& color\n        );\n\n        rgb_alpha_pixel get_default_overlay_rect_color (\n        ) const;\n\n        template <\n            typename T\n            >\n        void set_overlay_rects_changed_handler (\n            T& object,\n            void (T::*event_handler_)()\n        )\n        {\n            auto_mutex M(m);\n            event_handler = make_mfp(object,event_handler_);\n        }\n\n        void set_overlay_rects_changed_handler (\n            const any_function<void()>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            event_handler = event_handler_;\n        }\n\n        template <\n            typename T\n            >\n        void set_overlay_rect_selected_handler (\n            T& object,\n            void (T::*event_handler_)(const overlay_rect& orect)\n        )\n        {\n            auto_mutex M(m);\n            orect_selected_event_handler = make_mfp(object,event_handler_);\n        }\n\n        void set_overlay_rect_selected_handler (\n            const any_function<void(const overlay_rect& orect)>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            orect_selected_event_handler = event_handler_;\n        }\n\n        template <\n            typename T\n            >\n        void set_image_clicked_handler (\n            T& object,\n            void (T::*event_handler_)(const point& p, bool is_double_click, unsigned long btn)\n        )\n        {\n            auto_mutex M(m);\n            image_clicked_handler = make_mfp(object,event_handler_);\n        }\n\n        void set_image_clicked_handler (\n            const any_function<void(const point& p, bool is_double_click, unsigned long btn)>& event_handler_\n        )\n        {\n            auto_mutex M(m);\n            image_clicked_handler = event_handler_;\n        }\n\n        void add_labelable_part_name (\n            const std::string& name\n        );\n\n        void clear_labelable_part_names (\n        );\n\n        void enable_overlay_editing (\n        ) { auto_mutex M(m); overlay_editing_enabled = true; }\n\n        void disable_overlay_editing (\n        ) \n        { \n            auto_mutex M(m); \n            overlay_editing_enabled = false;  \n            rect_is_selected = false;\n            drawing_rect = false;\n            parent.invalidate_rectangle(rect);\n        }\n        \n        bool overlay_editing_is_enabled (\n        ) const { auto_mutex M(m); return overlay_editing_enabled; }\n\n    private:\n\n        void draw (\n            const canvas& c\n        ) const;\n\n        void on_wheel_up (\n            unsigned long state\n        );\n\n        void on_wheel_down (\n            unsigned long state\n        );\n\n        void on_mouse_down (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y,\n            bool is_double_click\n        );\n\n        void on_mouse_up (\n            unsigned long btn,\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_mouse_move (\n            unsigned long state,\n            long x,\n            long y\n        );\n\n        void on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        );\n\n        void on_part_add (\n            const std::string& part_name\n        );\n\n        rectangle get_rect_on_screen (\n            unsigned long idx\n        ) const;\n\n        rectangle get_rect_on_screen (\n            rectangle orect \n        ) const;\n\n        rgb_alpha_pixel invert_pixel (const rgb_alpha_pixel& p) const\n        { return rgb_alpha_pixel(255-p.red, 255-p.green, 255-p.blue, p.alpha); }\n\n        virtual int next_free_user_event_number (\n        ) const { return scrollable_region::next_free_user_event_number()+1; }\n        // The reason for using user actions here rather than just having the timer just call\n        // what it needs directly is to avoid a potential deadlock during destruction of this widget.\n        void timer_event_unhighlight_rect()\n        { \n            highlight_timer.stop(); \n            parent.trigger_user_event(this,scrollable_region::next_free_user_event_number()); \n        }\n        void on_user_event (int num)\n        {\n            // ignore this user event if it isn't for us\n            if (num != scrollable_region::next_free_user_event_number())\n                return;\n            if (highlighted_rect < overlay_rects.size())\n            {\n                highlighted_rect = std::numeric_limits<unsigned long>::max();\n                parent.invalidate_rectangle(rect);\n            }\n        }\n\n\n        array2d<rgb_alpha_pixel> img;\n\n\n        std::vector<overlay_rect> overlay_rects;\n        std::vector<overlay_line> overlay_lines;\n        std::vector<overlay_circle> overlay_circles;\n\n        long zoom_in_scale;\n        long zoom_out_scale;\n        bool drawing_rect;\n        point rect_anchor;\n        rectangle rect_to_draw;\n        bool rect_is_selected;\n        std::string selected_part_name;\n        unsigned long selected_rect;\n        rgb_alpha_pixel default_rect_color;\n        std::string default_rect_label;\n        any_function<void()> event_handler;\n        any_function<void(const overlay_rect& orect)> orect_selected_event_handler;\n        any_function<void(const point& p, bool is_double_click, unsigned long btn)> image_clicked_handler;\n        popup_menu_region parts_menu;\n        point last_right_click_pos;\n        const int part_width;\n        std::set<std::string> part_names;\n        bool overlay_editing_enabled;\n        timer<image_display> highlight_timer;\n        unsigned long highlighted_rect;\n\n        // restricted functions\n        image_display(image_display&);        // copy constructor\n        image_display& operator=(image_display&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class image_window : public drawable_window \n    {\n    public:\n\n        typedef image_display::overlay_rect overlay_rect;\n        typedef image_display::overlay_line overlay_line;\n        typedef image_display::overlay_circle overlay_circle;\n\n        image_window(\n        ); \n\n        template < typename image_type >\n        image_window(\n            const image_type& img\n        ) : \n            gui_img(*this), \n            window_has_closed(false),\n            have_last_click(false),\n            mouse_btn(0),\n            clicked_signaler(this->wm),\n            have_last_keypress(false),\n            tie_input_events(false)\n        {  \n            gui_img.set_image_clicked_handler(*this, &image_window::on_image_clicked);\n            gui_img.disable_overlay_editing();\n            set_image(img); \n            show(); \n        }\n        \n        template < typename image_type >\n        image_window(\n            const image_type& img,\n            const std::string& title\n        ) : \n            gui_img(*this), \n            window_has_closed(false),\n            have_last_click(false),\n            mouse_btn(0),\n            clicked_signaler(this->wm),\n            have_last_keypress(false),\n            tie_input_events(false)\n        {  \n            gui_img.set_image_clicked_handler(*this, &image_window::on_image_clicked);\n            gui_img.disable_overlay_editing();\n            set_image(img); \n            set_title(title);\n            show(); \n        }\n        \n\n        ~image_window(\n        );\n\n        template < typename image_type >\n        void set_image (\n            const image_type& img\n        ) \n        { \n            const unsigned long padding = scrollable_region_style_default().get_border_size();\n            auto_mutex M(wm);\n            gui_img.set_image(img); \n\n            // Only ever mess with the size of the window if the user is giving us an image\n            // that is a different size.  Otherwise we assume that they will have already\n            // sized the window to whatever they feel is reasonable for an image of the\n            // current size.  \n            if (previous_image_size != get_rect(img))\n            {\n                const rectangle r = gui_img.get_image_display_rect();\n                if (image_rect != r)\n                {\n                    // set the size of this window to match the size of the input image\n                    set_size(r.width()+padding*2,r.height()+padding*2);\n\n                    // call this to make sure everything else is setup properly\n                    on_window_resized();\n\n                    image_rect = r;\n                }\n                previous_image_size = get_rect(img);\n            }\n        }\n\n        void add_overlay (\n            const overlay_rect& overlay\n        );\n\n        template <typename pixel_type>\n        void add_overlay(const rectangle& r, pixel_type p) \n        { add_overlay(image_display::overlay_rect(r,p)); }\n\n        template <typename pixel_type>\n        void add_overlay(const rectangle& r, pixel_type p, const std::string& l) \n        { add_overlay(image_display::overlay_rect(r,p,l)); }\n\n        template <typename pixel_type>\n        void add_overlay(const std::vector<rectangle>& r, pixel_type p) \n        { \n            std::vector<overlay_rect> temp;\n            temp.resize(r.size());\n            for (unsigned long i = 0; i < temp.size(); ++i)\n                temp[i] = overlay_rect(r[i], p);\n\n            add_overlay(temp);\n        }\n\n        void add_overlay(\n            const full_object_detection& object,\n            const std::vector<std::string>& part_names\n        ) \n        { \n\n            add_overlay(overlay_rect(object.get_rect(), rgb_pixel(255,0,0)));\n\n            std::vector<overlay_circle> temp;\n            temp.reserve(object.num_parts());\n            for (unsigned long i = 0; i < object.num_parts(); ++i)\n            {\n                if (object.part(i) != OBJECT_PART_NOT_PRESENT)\n                {\n                    if (i < part_names.size())\n                        temp.push_back(overlay_circle(object.part(i), 7, rgb_pixel(0,255,0), part_names[i]));\n                    else\n                        temp.push_back(overlay_circle(object.part(i), 7, rgb_pixel(0,255,0)));\n                }\n            }\n\n            add_overlay(temp);\n        }\n\n        void add_overlay(\n            const full_object_detection& object\n        ) \n        { \n            std::vector<std::string> part_names;\n            add_overlay(object, part_names);\n        }\n\n        void add_overlay(\n            const std::vector<full_object_detection>& objects,\n            const std::vector<std::string>& part_names\n        ) \n        { \n            std::vector<overlay_rect> rtemp;\n            rtemp.reserve(objects.size());\n            for (unsigned long i = 0; i < objects.size(); ++i)\n            {\n                rtemp.push_back(overlay_rect(objects[i].get_rect(), rgb_pixel(255,0,0)));\n            }\n\n            add_overlay(rtemp);\n\n            std::vector<overlay_circle> temp;\n\n            for (unsigned long i = 0; i < objects.size(); ++i)\n            {\n                for (unsigned long j = 0; j < objects[i].num_parts(); ++j)\n                {\n                    if (objects[i].part(j) != OBJECT_PART_NOT_PRESENT)\n                    {\n                        if (j < part_names.size())\n                            temp.push_back(overlay_circle(objects[i].part(j), 7, rgb_pixel(0,255,0),part_names[j]));\n                        else\n                            temp.push_back(overlay_circle(objects[i].part(j), 7, rgb_pixel(0,255,0)));\n                    }\n                }\n            }\n\n            add_overlay(temp);\n        }\n\n        void add_overlay(\n            const std::vector<full_object_detection>& objects\n        ) \n        { \n            std::vector<std::string> part_names;\n            add_overlay(objects, part_names);\n        }\n\n        void add_overlay (\n            const overlay_line& overlay\n        );\n\n        void add_overlay (\n            const overlay_circle& overlay\n        );\n\n        template <typename pixel_type>\n        void add_overlay(const point& p1, const point& p2, pixel_type p) \n        { add_overlay(image_display::overlay_line(p1,p2,p)); }\n\n        void add_overlay (\n            const std::vector<overlay_rect>& overlay\n        );\n\n        void add_overlay (\n            const std::vector<overlay_line>& overlay\n        );\n\n        void add_overlay (\n            const std::vector<overlay_circle>& overlay\n        );\n\n        void clear_overlay (\n        );\n\n        bool get_next_double_click (\n            point& p,\n            unsigned long& mouse_button\n        ); \n\n        void tie_events (\n        );\n\n        void untie_events (\n        );\n\n        bool events_tied (\n        ) const;\n\n        bool get_next_double_click (\n            point& p\n        ) \n        {\n            unsigned long mouse_button;\n            return get_next_double_click(p, mouse_button);\n        }\n\n        bool get_next_keypress (\n            unsigned long& key,\n            bool& is_printable,\n            unsigned long& state\n        );\n\n        bool get_next_keypress (\n            unsigned long& key,\n            bool& is_printable\n        )\n        {\n            unsigned long state;\n            return get_next_keypress(key,is_printable,state);\n        }\n\n    private:\n\n        virtual base_window::on_close_return_code on_window_close(\n        );\n\n        void on_window_resized(\n        );\n        \n        void on_image_clicked (\n            const point& p,\n            bool is_double_click,\n            unsigned long btn\n        );\n\n        virtual void on_keydown (\n            unsigned long key,\n            bool is_printable,\n            unsigned long state\n        );\n\n        // restricted functions\n        image_window(image_window&);\n        image_window& operator= (image_window&);\n\n        image_display gui_img;\n        rectangle image_rect;\n        rectangle previous_image_size;\n        bool window_has_closed;\n        bool have_last_click;\n        point last_clicked_point;\n        unsigned long mouse_btn;\n        rsignaler clicked_signaler;\n\n        bool have_last_keypress;\n        unsigned long next_key;\n        bool next_is_printable;\n        unsigned long next_state;\n        bool tie_input_events;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"widgets.cpp\"\n#endif\n\n#endif // DLIB_WIDGETs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets/widgets_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net), Keita Mochizuki\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#undef DLIB_WIDGETs_ABSTRACT_\n#ifdef DLIB_WIDGETs_ABSTRACT_\n\n#include \"fonts_abstract.h\"\n#include \"drawable_abstract.h\"\n#include \"base_widgets_abstract.h\"\n\n#include \"../gui_core.h\"\n#include <string>\n#include <map>\n#include \"../interfaces/enumerable.h\"\n#include \"style_abstract.h\"\n#include \"../image_processing/full_object_detection_abstract.h\"\n\nnamespace dlib\n{\n\n    /*!\n        GENERAL REMARKS\n            This component is a collection of various windowing widgets such as buttons,\n            labels, text boxes, and so on.  This component also includes the drawable\n            interface, drawable_window, and font handling objects.  The file you are\n            currently viewing defines all the high level graphical widgets which are \n            provided by this component that can appear in a drawable_window.  To view \n            the specifications for the other members of this component look at \n            fonts_abstract.h, base_widgets_abstract.h, and drawable_abstract.h\n\n        THREAD SAFETY\n            All objects and functions defined in this file are thread safe.  You may\n            call them from any thread without serializing access to them.\n\n        EVENT HANDLERS\n            Note that all event handlers, including the user registered callback\n            functions, are executed in the event handling thread.   Additionally,\n            the drawable::m mutex will always be locked while these event handlers\n            are running.  Also, don't rely on get_thread_id() always returning the \n            same ID from inside event handlers.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // function open_file_box(), open_existing_file_box(), and save_file_box()\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void open_file_box (\n        T& object,\n        void (T::*event_handler)(const std::string&) \n    );\n    /*!\n        requires\n            - event_handler == a valid pointer to a member function of object T.\n        ensures\n            - Displays a window titled \"Open File\" that will allow the user to select a \n              file.  \n            - The displayed window will start out showing the directory get_current_dir()\n              (i.e. it starts in the current working directory)\n            - The event_handler function is called on object if the user selects\n              a file.  If the user closes the window without selecting a file\n              then nothing occurs.\n    !*/\n\n    void open_file_box (\n        const any_function<void(const std::string&)>& event_handler\n    );\n    /*!\n        ensures\n            - Displays a window titled \"Open File\" that will allow the user to select a \n              file.  \n            - The displayed window will start out showing the directory get_current_dir()\n              (i.e. it starts in the current working directory)\n            - The event_handler function is called if the user selects\n              a file.  If the user closes the window without selecting a file\n              then nothing occurs.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void open_existing_file_box (\n        T& object,\n        void (T::*event_handler)(const std::string&) \n    );\n    /*!\n        requires\n            - event_handler == a valid pointer to a member function of object T.\n        ensures\n            - Displays a window titled \"Open File\" that will allow the user to select \n              a file.  But only a file that already exists.\n            - The displayed window will start out showing the directory get_current_dir()\n              (i.e. it starts in the current working directory)\n            - The event_handler function is called on object if the user selects\n              a file.  If the user closes the window without selecting a file\n              then nothing occurs.\n    !*/\n\n    void open_existing_file_box (\n        const any_function<void(const std::string&)>& event_handler\n    );\n    /*!\n        ensures\n            - Displays a window titled \"Open File\" that will allow the user to select \n              a file.  But only a file that already exists.\n            - The displayed window will start out showing the directory get_current_dir()\n              (i.e. it starts in the current working directory)\n            - The event_handler function is called if the user selects\n              a file.  If the user closes the window without selecting a file\n              then nothing occurs.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void save_file_box (\n        T& object,\n        void (T::*event_handler)(const std::string&) \n    );\n    /*!\n        requires\n            - event_handler == a valid pointer to a member function of object T.\n        ensures\n            - Displays a window titled \"Save File\" that will allow the user to select \n              a file.  \n            - The displayed window will start out showing the directory get_current_dir()\n              (i.e. it starts in the current working directory)\n            - The event_handler function is called on object if the user selects\n              a file.  If the user closes the window without selecting a file\n              then nothing occurs.\n    !*/\n\n    void save_file_box (\n        const any_function<void(const std::string&)>& event_handler\n    );\n    /*!\n        ensures\n            - Displays a window titled \"Save File\" that will allow the user to select \n              a file.  \n            - The displayed window will start out showing the directory get_current_dir()\n              (i.e. it starts in the current working directory)\n            - The event_handler function is called if the user selects\n              a file.  If the user closes the window without selecting a file\n              then nothing occurs.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // function message_box() \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void message_box (\n        const std::string& title,\n        const std::string& message\n    );\n    /*!\n        ensures\n            - displays a message box with the given title and message.  It will have a \n              single button and when the user clicks it the message box will go away.\n            - this function does not block but instead returns immediately.\n    !*/\n\n    void message_box_blocking (\n        const std::string& title,\n        const std::string& message\n    );\n    /*!\n        ensures\n            - displays a message box with the given title and message.  It will have a \n              single button and when the user clicks it the message box will go away.\n            - this function blocks until the user clicks on the message box and \n              causes it to go away.\n    !*/\n\n    template <\n        typename T\n        >\n    void message_box (\n        const std::string& title,\n        const std::string& message,\n        T& object,\n        void (T::*event_handler)() \n    );\n    /*!\n        requires\n            - event_handler == a valid pointer to a member function of object T.\n        ensures\n            - Displays a message box with the given title and message.  It will have a \n              single button and when the user clicks it the message box will go away.\n            - The event_handler function is called on object when the user clicks\n              ok or otherwise closes the message box window. \n            - this function does not block but instead returns immediately.\n    !*/\n\n    void message_box (\n        const std::string& title,\n        const std::string& message,\n        const any_function<void()>& event_handler\n    );\n    /*!\n        ensures\n            - Displays a message box with the given title and message.  It will have a \n              single button and when the user clicks it the message box will go away.\n            - The event_handler function is called when the user clicks\n              ok or otherwise closes the message box window. \n            - this function does not block but instead returns immediately.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class label\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class label : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                text() == \"\"\n                the text color will be black\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple text label.  The size of the label\n                is automatically set to be just big enough to contain its text.\n        !*/\n\n    public:\n\n        label(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~label(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_text (const std::wstring& text);\n        void set_text (const dlib::ustring& text);\n        void set_text (\n            const std::string& text\n        );\n        /*!\n            ensures\n                - #text() == text\n            throws\n                - std::bad_alloc\n        !*/\n\n        const std::wstring  wtext () const;\n        const dlib::ustring utext () const;\n        const std::string   text (\n        ) const;\n        /*!\n            ensures\n                - returns the text of this label\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_text_color (\n            const rgb_pixel color\n        );\n        /*!\n            ensures\n                - #text_color() == color\n        !*/\n\n        const rgb_pixel text_color (\n        ) const;\n        /*! \n            ensures\n                - returns the color used to draw the text in this widget\n        !*/\n\n    private:\n\n        // restricted functions\n        label(label&);        // copy constructor\n        label& operator=(label&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class toggle_button\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class toggle_button : public button_action \n    {\n        /*!\n            INITIAL VALUE\n                name() == \"\"\n                is_checked() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple two state toggle button.  Is is either\n                in the checked or unchecked state and when a user clicks on it it toggles its\n                state.\n\n                When this object is disabled it means it will not respond to user clicks.\n        !*/\n\n    public:\n\n        toggle_button(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~toggle_button(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_name (const std::wstring& name);\n        void set_name (const dlib::ustring& name);\n        void set_name (\n            const std::string& name\n        );\n        /*!\n            ensures\n                - #name() == name\n                - this toggle_button has been resized such that it is big enough to contain\n                  the new name.\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_size (\n            unsigned long width_,\n            unsigned long height_\n        );\n        /*! \n            ensures\n                - if (width and height are big enough to contain the name of this button) then\n                    - #width() == width_\n                    - #height() == height_\n                    - #top() == top()\n                    - #left() == left()\n                    - i.e. The location of the upper left corner of this button stays the\n                      same but its width and height are modified\n        !*/\n\n        void set_tooltip_text (const std::wstring& text);\n        void set_tooltip_text (const dlib::ustring& text);\n        void set_tooltip_text (\n            const std::string& text\n        );\n        /*!\n            ensures\n                - #tooltip_text() == text\n                - enables the tooltip for this toggle_button\n        !*/\n\n        const dlib::ustring tooltip_utext () const;\n        const std::wstring  tooltip_wtext () const;\n        const std::string   tooltip_text (\n        ) const;\n        /*!\n            ensures\n                - returns the text that is displayed in the tooltip for this toggle_button\n        !*/\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style\n        );\n        /*!\n            requires\n                - style_type == a type that inherits from toggle_button_style\n            ensures\n                - this toggle_button object will draw itself using the given\n                  button style\n        !*/\n\n        bool is_checked (\n        ) const;\n        /*!\n            ensures\n                - if (this box is currently checked) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        const std::wstring  wname () const;\n        const dlib::ustring uname () const;\n        const std::string   name (\n        ) const;\n        /*!\n            ensures\n                - returns the name of this toggle_button.  The name is a string\n                  that appears to the right of the actual check box.\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_checked (\n        );\n        /*!\n            ensures\n                - #is_checked() == true \n        !*/\n\n        void set_unchecked (\n        );\n        /*! \n            ensures\n                - #is_checked() == false \n        !*/ \n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the toggle_button is \n                  toggled by the user. \n                - this event is NOT triggered by calling set_checked() or set_unchecked().\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_click_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the toggle_button is \n                  toggled by the user. \n                - this event is NOT triggered by calling set_checked() or set_unchecked().\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler)(toggle_button& self)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T.\n            ensures\n                - the event_handler function is called on object when the toggle_button is \n                  toggled by the user. self will be a reference to the toggle_button object\n                  that the user clicked.\n                - this event is NOT triggered by calling set_checked() or set_unchecked().\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_sourced_click_handler (\n            const any_function<void(toggle_button& self)>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the toggle_button is \n                  toggled by the user. self will be a reference to the toggle_button object\n                  that the user clicked.\n                - this event is NOT triggered by calling set_checked() or set_unchecked().\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        toggle_button(toggle_button&);        // copy constructor\n        toggle_button& operator=(toggle_button&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class text_field\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class text_field : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                text() == \"\"\n                width() == 10\n                height() == a height appropriate for the font used.\n                The text color will be black.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple one line text input field.  \n        !*/\n\n    public:\n\n        text_field(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~text_field(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style\n        );\n        /*!\n            requires\n                - style_type == a type that inherits from text_field_style \n            ensures\n                - this text_field object will draw itself using the given\n                  text field style\n        !*/\n\n        void set_text (const std::wstring& text);\n        void set_text (const dlib::ustring& text);\n        void set_text (\n            const std::string& text\n        );\n        /*!\n            requires\n                - text.find_first_of('\\n') == std::string::npos \n                  (i.e. there aren't any new lines in text)\n            ensures\n                - #text() == text\n            throws\n                - std::bad_alloc\n        !*/\n\n        const std::wstring  wtext () const;\n        const dlib::ustring utext () const;\n        const std::string   text (\n        ) const;\n        /*!\n            ensures\n                - returns the text of this text_field\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_width (\n            unsigned long width_\n        );\n        /*! \n            ensures\n                - if (width >= 10) then\n                    - #width()  == width_\n                    - #height() == height()\n                    - #top()    == top()\n                    - #left()   == left()\n                    - i.e. The width of this drawable is set to the given width but \n                      nothing else changes.\n        !*/\n\n        void give_input_focus (\n        );\n        /*!\n            ensures\n                - gives this text field input keyboard focus\n        !*/\n\n        void select_all_text (\n        );\n        /*!\n            ensures\n                - causes all the text in the text field to become selected.\n                  (note that it doesn't give input focus)\n        !*/\n\n        void set_text_color (\n            const rgb_pixel color\n        );\n        /*!\n            ensures\n                - #text_color() == color\n        !*/\n\n        const rgb_pixel text_color (\n        ) const;\n        /*! \n            ensures\n                - returns the color used to draw the text in this widget\n        !*/\n\n        void set_background_color (\n            const rgb_pixel color\n        );\n        /*!\n            ensures\n                - #background_color() == color\n        !*/\n\n        const rgb_pixel background_color (\n        ) const;\n        /*! \n            ensures\n                - returns the color used to fill in the background of this widget\n        !*/\n\n        template <\n            typename T\n            >\n        void set_text_modified_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the text\n                  in this text_field is modified by the user.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_text_modified_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the text in this text_field \n                  is modified by the user.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_enter_key_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when this text field\n                  has input focus and the user hits the enter key on their keyboard.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_enter_key_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when this text field has input \n                  focus and the user hits the enter key on their keyboard.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_focus_lost_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when this object\n                  loses input focus due to the user clicking outside the text field\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_focus_lost_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when this object loses input \n                  focus due to the user clicking outside the text field\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        text_field(text_field&);        // copy constructor\n        text_field& operator=(text_field&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class text_box\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class text_box : public scrollable_region \n    {\n        /*!\n            INITIAL VALUE\n                - text() == \"\"\n                - The text color will be black.\n                - width() == 100\n                - height() == 100\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple multi-line text input box.  \n        !*/\n\n    public:\n\n        text_box(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~text_box(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style\n        );\n        /*!\n            requires\n                - style_type == a type that inherits from text_box_style \n            ensures\n                - this text_box object will draw itself using the given\n                  text box style\n        !*/\n\n        void set_text (const std::wstring& text);\n        void set_text (const dlib::ustring& text);\n        void set_text (\n            const std::string& text\n        );\n        /*!\n            ensures\n                - #text() == text\n            throws\n                - std::bad_alloc\n        !*/\n\n        const std::wstring  wtext () const;\n        const dlib::ustring utext () const;\n        const std::string   text (\n        ) const;\n        /*!\n            ensures\n                - returns the text of this text_box\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_size (\n            unsigned long width,\n            unsigned long height \n        );\n        /*! \n            ensures\n                - #width() == width_\n                - #height() == height_\n                - #top() == top()\n                - #left() == left()\n                - i.e. The location of the upper left corner of this widget stays the\n                  same but its width and height are modified\n        !*/\n\n        void set_text_color (\n            const rgb_pixel color\n        );\n        /*!\n            ensures\n                - #text_color() == color\n        !*/\n\n        const rgb_pixel text_color (\n        ) const;\n        /*! \n            ensures\n                - returns the color used to draw the text in this widget\n        !*/\n\n        void set_background_color (\n            const rgb_pixel color\n        );\n        /*!\n            ensures\n                - #background_color() == color\n        !*/\n\n        const rgb_pixel background_color (\n        ) const;\n        /*! \n            ensures\n                - returns the color used to fill in the background of this widget\n        !*/\n\n        template <\n            typename T\n            >\n        void set_text_modified_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the text\n                  in this text_box is modified by the user.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_text_modified_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the text in this text_box \n                  is modified by the user.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_enter_key_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when this text box\n                  has input focus and the user hits the enter key on their keyboard.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_enter_key_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when this text box has input \n                  focus and the user hits the enter key on their keyboard.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_focus_lost_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when this object\n                  loses input focus due to the user clicking outside the text box\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_focus_lost_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when this object loses input \n                  focus due to the user clicking outside the text box\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        text_box(text_box&);        // copy constructor\n        text_box& operator=(text_box&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class check_box\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class check_box : public toggle_button \n    {\n        /*!\n            This is just a toggle button with the style set to \n            toggle_button_style_check_box.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class radio_button\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class radio_button : public toggle_button \n    {\n        /*!\n            This is just a toggle button with the style set to \n            toggle_button_style_radio_button.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class tabbed_display\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class tabbed_display : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                number_of_tabs() == 1\n                selected_tab() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a row of tabs that are user selectable.  \n\n                When this object is disabled it means it will not respond to user clicks.\n        !*/\n\n    public:\n\n        tabbed_display(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~tabbed_display(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_size (\n            unsigned long width_,\n            unsigned long height_\n        );\n        /*! \n            ensures\n                - if (width and height are big enough to contain the tabs) then\n                    - #width() == width_\n                    - #height() == height_\n                    - #top() == top()\n                    - #left() == left()\n                    - i.e. The location of the upper left corner of this widget stays the\n                      same but its width and height are modified\n        !*/\n\n        void set_number_of_tabs (\n            unsigned long num\n        );\n        /*!\n            requires\n                - num > 0\n            ensures\n                - #number_of_tabs() == num\n                - no tabs have any widget_groups associated with them.\n                - for all valid idx:\n                    - #tab_name(idx) == \"\"\n            throws\n                - std::bad_alloc\n        !*/\n\n        unsigned long selected_tab (\n        ) const;\n        /*!\n            ensures\n                - returns the index of the currently selected tab\n        !*/\n\n        unsigned long number_of_tabs (\n        ) const;\n        /*!\n            ensures\n                - returns the number of tabs in this tabbed_display\n        !*/\n\n        const std::wstring&  tab_wname (unsigned long idx) const;\n        const dlib::ustring& tab_uname (unsigned long idx) const;\n        const std::string&   tab_name (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < number_of_tabs()\n            ensures\n                - returns a const reference to the name of the tab given by idx\n        !*/\n\n        void set_tab_name (unsigned long idx, const std::wstring& new_name);\n        void set_tab_name (unsigned long idx, const dlib::ustring& new_name);\n        void set_tab_name (\n            unsigned long idx,\n            const std::string& new_name\n        );\n        /*!\n            requires\n                - idx < number_of_tabs()\n            ensures\n                - #tab_name(idx) == new_name\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_tab_group (\n            unsigned long idx,\n            widget_group& group\n        );\n        /*!\n            requires\n                - idx < number_of_tabs()\n            ensures\n                - if (is_hidden()) then\n                    - group.is_hidden() == true\n                - else\n                    - whenever the tab with index idx is selected group.is_hidden() == false \n                    - whenever the tab with index idx is deselected group.is_hidden() == true \n                - whenever the position of *this changes the position of group will be\n                  updated so that it is still inside the tabbed_display.  The position of group\n                  will also be updated after this call to set_tab_group().\n                - any previous calls to set_tab_group() with this index are overridden by this\n                  new call.  (i.e. you can only have one widget_group associated with a single\n                  tab at a time)\n        !*/\n\n        void fit_to_contents (\n        );\n        /*!\n            ensures\n                - Adjusts the size this tabbed_display so that it nicely contains \n                  all of its widget_group objects.   \n                - does not change the position of this object. \n                  (i.e. the upper left corner of get_rect() remains at the same position)\n        !*/\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler)(unsigned long new_idx, unsigned long old_idx)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - The event_handler function is called on object when the user clicks\n                  on a tab that isn't already selected.  new_idx will give the index of \n                  the newly selected tab and old_idx will give the index of the tab \n                  that was previously selected. \n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_click_handler (\n            const any_function<void(unsigned long new_idx, unsigned long old_idx)>& eh\n        );\n        /*!\n            ensures\n                - The event_handler function is called when the user clicks on a tab \n                  that isn't already selected.  new_idx will give the index of the \n                  newly selected tab and old_idx will give the index of the tab that \n                  was previously selected. \n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        tabbed_display(tabbed_display&);        // copy constructor\n        tabbed_display& operator=(tabbed_display&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class named_rectangle\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class named_rectangle : public drawable \n    {\n        /*!\n            INITIAL VALUE\n                name() == \"\"\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple named rectangle.  \n        !*/\n\n    public:\n\n        named_rectangle(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~named_rectangle(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_size (\n            unsigned long width_,\n            unsigned long height_\n        );\n        /*! \n            ensures\n                - #width() == width_\n                - #height() == height_\n                - #top() == top()\n                - #left() == left()\n                - i.e. The location of the upper left corner of this widget stays the\n                  same but its width and height are modified\n        !*/\n\n        void wrap_around (\n            const rectangle& rect\n        );\n        /*!\n            ensures\n                - This object will be repositioned and sized so that it fits\n                  around the given rectangle.\n        !*/\n\n        void set_name (const std::wstring& name);\n        void set_name (const dlib::ustring& name);\n        void set_name (\n            const std::string& name\n        );\n        /*!\n            ensures\n                - #name() == name\n            throws\n                - std::bad_alloc\n        !*/\n\n        const std::wstring  wname () const;\n        const dlib::ustring uname () const;\n        const std::string   name (\n        ) const;\n        /*!\n            ensures\n                - returns the name of this named_rectangle\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        named_rectangle(named_rectangle&);        // copy constructor\n        named_rectangle& operator=(named_rectangle&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class mouse_tracker\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class mouse_tracker : public draggable \n    {\n        /*!\n            INITIAL VALUE\n                draggable_area() == rectangle(0,0,500,500)\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple draggable box that displays the \n                current location of the mouse.  \n\n                Also, if you hold shift and left click on the parent window then the \n                mouse_tracker will place a single red pixel where you clicked and will\n                display the mouse position relative to that point.\n        !*/\n\n    public:\n\n        mouse_tracker(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~mouse_tracker(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n    private:\n\n        // restricted functions\n        mouse_tracker(mouse_tracker&);        // copy constructor\n        mouse_tracker& operator=(mouse_tracker&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class list_box\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class list_box : public scrollable_region, \n                     public enumerable<const std::string>\n    {\n        /*!\n            INITIAL VALUE\n                multiple_select_enabled() == false \n                size() == 0\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the elements in the list_box from\n                the 0th element to the (size()-1)th element.  i.e. (*this)[0] to\n                (*this)[size()-1].\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple textual list box.  It contains a \n                vertical list of strings which the user may select from.\n        !*/\n\n    public:\n\n        list_box(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~list_box(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        template <\n            typename style_type\n            >\n        void set_style (\n            const style_type& style\n        );\n        /*!\n            requires\n                - style_type == a type that inherits from list_box_style \n            ensures\n                - this list_box object will draw itself using the given style\n        !*/\n\n        void set_size (\n            unsigned long width_,\n            unsigned long height_\n        );\n        /*! \n            ensures\n                - #width() == width_\n                - #height() == height_\n                - #top() == top()\n                - #left() == left()\n                - i.e. The location of the upper left corner of this widget stays the\n                  same but its width and height are modified\n        !*/\n\n        bool is_selected (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < size()\n            ensures\n                - if (the item given by index is currently selected) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void select (\n            unsigned long index \n        );\n        /*!\n            requires\n                - index < size()\n            ensures\n                - #is_selected(index) == true\n        !*/\n\n        void unselect (\n            unsigned long index \n        );\n        /*!\n            requires\n                - index < size()\n            ensures\n                - #is_selected(index) == false\n        !*/\n\n        template <typename T>\n        void get_selected (\n            T& list\n        ) const;\n        /*!\n            requires\n                - T == an implementation of dlib/queue/queue_kernel_abstract.h \n                - T::type == unsigned long\n            ensures\n                - #list == a list of all the currently selected indices for this list_box.\n        !*/\n\n        unsigned long get_selected (\n        ) const;\n        /*!\n            requires\n                - multiple_select_enabled() == false\n            ensures\n                - if (there is currently something selected) then\n                    - returns the index of the selected item\n                - else\n                    - returns size()\n        !*/\n\n        template <typename T>\n        void load (\n            const T& list\n        );\n        /*!\n            requires\n                - T == compatible with dlib::enumerable<std::string>\n            ensures\n                - #size() == list.size()\n                - Copies all the strings from list into *this in the order in which they are enumerated.\n                  (i.e. The first one goes into (*this)[0], the second into (*this)[1], and so on...)\n        !*/\n\n        const std::string& operator[] (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < size()\n            ensures\n                - returns the name of the indexth item/row in this list box.\n        !*/\n\n        bool multiple_select_enabled (\n        ) const;\n        /*!\n            ensures\n                - if (this object will allow the user to select more than one item at a time) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void enable_multiple_select (\n        ); \n        /*!\n            ensures\n                - #multiple_select_enabled() == true\n        !*/\n\n        void disable_multiple_select (\n        );\n        /*!\n            ensures\n                - #multiple_select_enabled() == false\n        !*/\n\n        template <\n            typename T\n            >\n        void set_double_click_handler (\n            T& object,\n            void (T::*event_handler)(unsigned long index)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T.\n            ensures\n                - The event_handler function is called on object when the user double \n                  clicks on one of the rows in this list box.  index gives the row \n                  number for the item the user clicked.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_double_click_handler (\n            const any_function<void(unsigned long index)>& event_handler\n        ); \n        /*!\n            ensures\n                - The event_handler function is called when the user double clicks on \n                  one of the rows in this list box.  index gives the row number for \n                  the item the user clicked.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_click_handler (\n            T& object,\n            void (T::*event_handler)(unsigned long index)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T.\n            ensures\n                - The event_handler function is called on object when the user  \n                  clicks on one of the rows in this list box.  index gives the row \n                  number for the item the user clicked.  (Note that the second click\n                  in a double click triggers the double click handler above instead\n                  of this event)\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_click_handler (\n            const any_function<void(unsigned long index)>& event_handler\n        );\n        /*!\n            ensures\n                - The event_handler function is called when the user clicks on one \n                  of the rows in this list box.  index gives the row number for the \n                  item the user clicked.  (Note that the second click in a double \n                  click triggers the double click handler above instead of this event)\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        list_box(list_box&);        // copy constructor\n        list_box& operator=(list_box&);    // assignment operator\n    };\n\n    class wlist_box : public scrollable_region, \n    public enumerable<const std::wstring>;\n    /*!\n        same as list_box except for std::wstring instead of std::string\n    !*/\n\n    class ulist_box : public scrollable_region, \n    public enumerable<const dlib::ustring>;\n    /*!\n        same as list_box except for dlib::ustring instead of std::string\n    !*/\n    \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // class menu_bar \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class menu_bar : public drawable\n    {\n        /*!\n            INITIAL VALUE\n                - number_of_menus() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a menu bar that appears at the top of a\n                window.\n        !*/\n\n    public:\n\n        menu_bar(\n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~menu_bar(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_number_of_menus (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #number_of_menus() == num\n        !*/\n\n        unsigned long number_of_menus (\n        ) const;\n        /*!\n            ensures\n                - returns the number of menus in this menu_bar\n        !*/\n\n        void set_menu_name (unsigned long idx, const std::wstring name, char underline_ch = '\\0');\n        void set_menu_name (unsigned long idx, const dlib::ustring name, char underline_ch = '\\0');\n        void set_menu_name (\n            unsigned long idx,\n            const std::string name,\n            char underline_ch = '\\0'\n        );\n        /*!\n            requires\n                - idx < number_of_menus()\n            ensures\n                - #menu_name(idx) == name\n                - if (underline_ch is present in name) then\n                    - The menu with index idx will have the first underline_ch character \n                      in its name underlined and users will be able to activate the menu\n                      by hitting alt+underline_char\n        !*/\n\n        const std::wstring  menu_wname (unsigned long idx) const;\n        const dlib::ustring menu_uname (unsigned long idx) const;\n        const std::string   menu_name (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < number_of_menus()\n            ensures\n                - returns the name of the menu with index idx\n        !*/\n\n        popup_menu& menu (\n            unsigned long idx\n        );\n        /*!\n            requires\n                - idx < number_of_menus()\n            ensures\n                - returns a non-const reference to the popup_menu for the menu with\n                  index idx.\n        !*/\n\n        const popup_menu& menu (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < number_of_menus()\n            ensures\n                - returns a const reference to the popup_menu for the menu with\n                  index idx.\n        !*/\n\n    private:\n\n        // restricted functions\n        menu_bar(menu_bar&);        // copy constructor\n        menu_bar& operator=(menu_bar&);    // assignment operator\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type\n        >\n    class directed_graph_drawer : public zoomable_region \n    {\n        /*!\n            REQUIREMENTS ON graph_type\n                - must be an implementation of directed_graph/directed_graph_kernel_abstract.h\n\n            INITIAL VALUE\n                - get_graph().size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a graphical widget that allows the user to draw\n                a directed graph.  \n                \n                The user can create nodes by right clicking on the draw area and add \n                edges by selecting a node (via left clicking on it) and then holding \n                shift and clicking on the node that is to be the child node of the \n                selected node.\n        !*/\n\n    public:\n\n        directed_graph_drawer (\n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~directed_graph_drawer (\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        const graph_type& graph (\n        ) const;\n        /*!\n            requires\n                - drawable::m is locked\n            ensures\n                - returns a const reference to the graph that this widget has been drawing\n        !*/\n\n        unsigned long number_of_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns graph().number_of_nodes()\n        !*/\n\n        void clear_graph (\n        );\n        /*!\n            ensures\n                - #number_of_nodes() == 0\n        !*/\n\n        const typename graph_type::node_type& graph_node (\n            unsigned long i\n        ) const;\n        /*!\n            requires\n                - drawable::m is locked\n                - i < number_of_nodes()\n            ensures\n                - returns a const reference to get_graph().node(i)\n        !*/\n\n        typename graph_type::node_type& graph_node (\n            unsigned long i\n        );\n        /*!\n            requires\n                - drawable::m is locked\n                - i < number_of_nodes()\n            ensures\n                - returns a non-const reference to get_graph().node(i)\n        !*/\n\n        void save_graph (\n            std::ostream& out\n        );\n        /*!\n            ensures\n                - saves the state of the graph to the output stream.  Does so in a \n                  way that not only preserves the state of the graph this->graph()\n                  but also preserves the graphical layout of the graph in this \n                  GUI widget.\n                - Also, the first part of the saved state is a serialized \n                  version of this->graph().  Thus, you can deserialize just the\n                  this->graph() object from the serialized data if you like.\n        !*/\n\n        void load_graph (\n            std::istream& in \n        );\n        /*!\n            ensures\n                - loads a saved graph from the given input stream.  \n        !*/\n\n        void set_node_label (unsigned long i, const std::wstring& label);\n        void set_node_label (unsigned long i, const dlib::ustring& label);\n        void set_node_label (\n            unsigned long i,\n            const std::string& label\n        );\n        /*!\n            requires\n                - i < number_of_nodes()\n            ensures\n                - #node_label(i) == label\n        !*/\n\n        void set_node_color (\n            unsigned long i,\n            rgb_pixel color\n        );\n        /*!\n            requires\n                - i < number_of_nodes()\n            ensures\n                - #node_color(i) == color \n        !*/\n\n        rgb_pixel node_color (\n            unsigned long i\n        ) const;\n        /*!\n            requires\n                - i < number_of_nodes()\n            ensures\n                - returns the color used to draw node graph_node(i)\n        !*/\n\n        const std::wstring  node_wlabel (unsigned long i) const;\n        const dlib::ustring node_ulabel (unsigned long i) const;\n        const std::string   node_label (\n            unsigned long i\n        ) const;\n        /*!\n            requires\n                - i < number_of_nodes()\n            ensures\n                - returns the text label for node graph_node(i)\n        !*/\n\n        template <\n            typename T\n            >\n        void set_node_selected_handler (\n            T& object,\n            void (T::*event_handler)(unsigned long node_index)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the user selects\n                  a node.  \n                - node_index == the index of the node that was selected\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_node_selected_handler (\n            const any_function<void(unsigned long node_index)>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the user selects\n                  a node.  \n                - node_index == the index of the node that was selected\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_node_deselected_handler (\n            T& object,\n            void (T::*event_handler)(unsigned long node_index)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the user \n                  deselects a node.  \n                - node_index == the index of the node that was deselected\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_node_deselected_handler (\n            const any_function<void(unsigned long node_index)>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the user deselects a node.  \n                - node_index == the index of the node that was deselected\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_node_deleted_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the user \n                  deletes a node.  \n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_node_deleted_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the user deletes a node.  \n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        template <\n            typename T\n            >\n        void set_graph_modified_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the user \n                  modifies the graph (i.e. adds or removes a node or edge)\n                - the event_handler function is not called when the user just\n                  moves nodes around on the screen.\n                - This event is always dispatched before any more specific event\n                  that results from the user modifying the graph.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_graph_modified_handler (\n            const any_function<void()>& event_handler\n        );\n        /*!\n            ensures\n                - the event_handler function is called when the user modifies \n                  the graph (i.e. adds or removes a node or edge)\n                - the event_handler function is not called when the user just\n                  moves nodes around on the screen.\n                - This event is always dispatched before any more specific event\n                  that results from the user modifying the graph.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        directed_graph_drawer(directed_graph_drawer&);        // copy constructor\n        directed_graph_drawer& operator=(directed_graph_drawer&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class text_grid : public scrollable_region \n    {\n        /*!\n            INITIAL VALUE\n                - vertical_scroll_increment() == 10\n                - horizontal_scroll_increment() == 10\n                - border_color() == rgb_pixel(128,128,128)\n                - number_of_columns() == 0\n                - number_of_rows() == 0\n\n            WHAT THIS OBJECT REPRESENTS \n                This object represents a simple grid of square text fields that \n                looks more or less like a spreadsheet grid.\n        !*/\n\n    public:\n\n        text_grid (\n            drawable_window& w\n        ); \n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~text_grid (\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_grid_size (\n            unsigned long rows,\n            unsigned long cols\n        );\n        /*!\n            ensures\n                - #number_of_rows() == rows\n                - #number_of_columns() == cols\n                - for all valid r and c:\n                    - #text(r,c) == \"\"\n                    - #text_color(r,c) == rgb_pixel(0,0,0)\n                    - #background_color(r,c) == rgb_pixel(255,255,255)\n                    - #is_editable(r,c) == true\n        !*/\n\n        unsigned long number_of_columns (\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns contained in this grid\n        !*/\n\n        unsigned long number_of_rows (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows contained in this grid\n        !*/\n\n        rgb_pixel border_color (\n        ) const;\n        /*!\n            ensures\n                - returns the color of the lines drawn between the grid elements\n        !*/\n\n        void set_border_color (\n            rgb_pixel color\n        );\n        /*!\n            ensures\n                - #border_color() == color\n        !*/\n\n        const std::wstring  wtext (unsigned long row, unsigned long col) const;\n        const dlib::ustring utext (unsigned long row, unsigned long col) const;\n        const std::string   text (\n            unsigned long row,\n            unsigned long col\n        ) const;\n        /*!\n            requires\n                - row < number_of_rows()\n                - col < number_of_columns()\n            ensures\n                - returns the text in the given grid location\n        !*/\n\n        void set_text (unsigned long row, unsigned long col, const std::wstring& str);\n        void set_text (unsigned long row, unsigned long col, const dlib::ustring& str);\n        void set_text (\n            unsigned long row,\n            unsigned long col,\n            const std::string& str\n        );\n        /*!\n            requires\n                - row < number_of_rows()\n                - col < number_of_columns()\n            ensures\n                - #text(row,col) == str\n        !*/\n\n        const rgb_pixel text_color (\n            unsigned long row,\n            unsigned long col\n        ) const;\n        /*!\n            requires\n                - row < number_of_rows()\n                - col < number_of_columns()\n            ensures\n                - returns the color of the text in the given grid location\n        !*/\n\n        void set_text_color (\n            unsigned long row,\n            unsigned long col,\n            const rgb_pixel color\n        );\n        /*!\n            requires\n                - row < number_of_rows()\n                - col < number_of_columns()\n            ensures\n                - #text_color(row,col) == color \n        !*/\n\n        const rgb_pixel background_color (\n            unsigned long row,\n            unsigned long col\n        ) const;\n        /*!\n            requires\n                - row < number_of_rows()\n                - col < number_of_columns()\n            ensures\n                - returns the background color of the given grid location\n        !*/\n\n        void set_background_color (\n            unsigned long row,\n            unsigned long col,\n            const rgb_pixel color\n        ); \n        /*!\n            requires\n                - row < number_of_rows()\n                - col < number_of_columns()\n            ensures\n                - #background_color(row,col) == color \n        !*/\n\n        bool is_editable (\n            unsigned long row,\n            unsigned long col\n        ) const;\n        /*!\n            requires\n                - row < number_of_rows()\n                - col < number_of_columns()\n            ensures\n                - if (the given grid location is editable by the user) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void set_editable (\n            unsigned long row,\n            unsigned long col,\n            bool editable\n        );\n        /*!\n            requires\n                - row < number_of_rows()\n                - col < number_of_columns()\n            ensures\n                - #is_editable(row,col) == editable \n        !*/\n\n        void set_column_width (\n            unsigned long col,\n            unsigned long width\n        );\n        /*!\n            requires\n                - col < number_of_columns()\n            ensures\n                - the given column will be displayed such that it is width pixels wide\n        !*/\n\n        void set_row_height (\n            unsigned long row,\n            unsigned long height \n        );\n        /*!\n            requires\n                - row < number_of_rows()\n            ensures\n                - the given row will be displayed such that it is height pixels wide\n        !*/\n\n        template <\n            typename T\n            >\n        void set_text_modified_handler (\n            T& object,\n            void (T::*event_handler)(unsigned long row, unsigned long col)\n        );\n        /*!\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the user selects\n                  a node.  \n                - row == row will give the row of the grid item that was modified\n                - col == col will give the column of the grid item that was modified\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n        void set_text_modified_handler (\n            const any_function<void(unsigned long row, unsigned long col)>& event_handler\n        ); \n        /*!\n            ensures\n                - the event_handler function is called when the user selects a node.  \n                - row == row will give the row of the grid item that was modified\n                - col == col will give the column of the grid item that was modified\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        text_grid(text_grid&);        // copy constructor\n        text_grid& operator=(text_grid&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class image_display : public scrollable_region \n    {\n        /*!\n            INITIAL VALUE\n                - This object isn't displaying anything. \n                - get_overlay_rects().size() == 0\n                - get_default_overlay_rect_label() == \"\"\n                - get_default_overlay_rect_color() == rgb_alpha_pixel(255,0,0,255) (i.e. RED)\n                - This object does not have any user labelable parts defined.\n                - overlay_editing_is_enabled() == true\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an image inside a scrollable region.  \n                You give it an image to display by calling set_image().\n                This widget also allows you to add rectangle and line overlays that\n                will be drawn on top of the image.  \n                \n                If you hold the Ctrl key you can zoom in and out using the mouse wheel.\n                You can also add new overlay rectangles by holding shift, left clicking,\n                and dragging the mouse.  Additionally, you can delete an overlay rectangle\n                by double clicking on it and hitting delete or backspace.  Finally, you\n                can also add part labels (if they have been defined by calling add_labelable_part_name())\n                by selecting an overlay rectangle with the mouse and then right clicking\n                on the part.\n                \n                Finally, if you hold Ctrl and left click an overlay rectangle it will \n                change its label to get_default_overlay_rect_label().\n\n                The image is drawn such that:\n                    - the pixel img[0][0] is the upper left corner of the image.\n                    - the pixel img[img.nr()-1][0] is the lower left corner of the image.\n                    - the pixel img[0][img.nc()-1] is the upper right corner of the image.\n                    - the pixel img[img.nr()-1][img.nc()-1] is the lower right corner of the image.\n        !*/\n\n    public:\n\n        image_display(  \n            drawable_window& w\n        );\n        /*!\n            ensures \n                - #*this is properly initialized \n                - #*this has been added to window w\n                - #parent_window() == w\n        !*/\n\n        ~image_display(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        template <\n            typename image_type\n            >\n        void set_image (\n            const image_type& new_img\n        );\n        /*!\n            requires\n                - image_type == an implementation of array2d/array2d_kernel_abstract.h or\n                  a dlib::matrix or something convertible to a matrix via mat()\n                - pixel_traits<typename image_type::type> must be defined \n            ensures\n                - #*this widget is now displaying the given image new_img.\n        !*/\n\n        struct overlay_rect\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents a rectangle that is drawn on top of the\n                    image shown by this object.  Each rectangle is represented by \n                    a rectangle object as well as a color and text label.  The label\n                    is drawn below the lower right corner of the rectangle.\n\n                    Moreover, the rectangle can have sub-parts. Each part is listed\n                    in the parts member variable.  This variable maps the name of the\n                    part to its position.\n\n                    Rectangles with crossed_out == true will be drawn with an X through\n                    them.\n            !*/\n\n            rectangle rect;\n            rgb_alpha_pixel color;\n            std::string label;\n            std::map<std::string,point> parts;\n            bool crossed_out;\n\n            overlay_rect(\n            ); \n            /*!\n                ensures\n                    - #color == rgb_alpha_pixel(0,0,0,0) \n                    - #rect == rectangle()\n                    - #label.size() == 0\n                    - #crossed_out == false\n            !*/\n\n            template <typename pixel_type>\n            overlay_rect(\n                const rectangle& r, \n                pixel_type p\n            );\n            /*!\n                ensures\n                    - #rect == r\n                    - performs assign_pixel(color, p) \n                    - #label.size() == 0\n                    - #crossed_out == false\n            !*/\n\n            template <typename pixel_type>\n            overlay_rect(\n                const rectangle& r,\n                pixel_type p,\n                const std::string& l\n            );\n            /*!\n                ensures\n                    - #rect == r\n                    - performs assign_pixel(color, p)\n                    - #label == l\n                    - #crossed_out == false\n            !*/\n\n            template <typename pixel_type>\n            overlay_rect(\n                const rectangle& r, \n                pixel_type p, \n                const std::string& l, \n                const std::map<std::string,point>& parts_\n            ); \n            /*!\n                ensures\n                    - #rect == r\n                    - performs assign_pixel(color, p)\n                    - #label == l\n                    - #parts == parts_\n                    - #crossed_out == false\n            !*/\n\n        };\n\n        struct overlay_line\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents a line that is drawn on top of the\n                    image shown by this object.  Each line is represented by \n                    its two end points (p1 and p2) as well as a color.\n            !*/\n\n            point p1;\n            point p2;\n            rgb_alpha_pixel color;\n\n            overlay_line(\n            );\n            /*!\n                ensures\n                    - #color == rgb_alpha_pixel(0,0,0,0)\n                    - #p1 == point()\n                    - #p2 == point()\n            !*/\n\n            template <typename pixel_type>\n            overlay_line(\n                const point& p1_,\n                const point& p2_,\n                pixel_type p\n            ); \n            /*!\n                ensures\n                    - performs assign_pixel(color, p)\n                    - #p1 == p1_\n                    - #p2 == p2_\n            !*/\n\n        };\n\n        struct overlay_circle\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents a circle that is drawn on top of the\n                    image shown by this object.  Each circle is represented by \n                    its center, radius, and color.  It can also have an optional\n                    text label which will appear below the circle.\n            !*/\n\n            point center;\n            int radius;\n            rgb_alpha_pixel color;\n            std::string label;\n\n            overlay_circle(\n            );\n            /*!\n                ensures\n                    - #center == point(0,0)\n                    - #radius == 0\n                    - #color == rgb_alpha_pixel(0,0,0,0)\n                    - #label.size() == 0\n            !*/\n\n            template <typename pixel_type>\n            overlay_circle(\n                const point& center_, \n                const int radius_,\n                pixel_type p\n            ); \n            /*!\n                ensures\n                    - performs assign_pixel(color, p)\n                    - #center == center_\n                    - #radius == radius_\n            !*/\n\n            template <typename pixel_type>\n            overlay_circle(\n                const point& center_, \n                const int radius_,\n                pixel_type p,\n                const std::string& label_\n            ); \n            /*!\n                ensures\n                    - performs assign_pixel(color, p)\n                    - #center == center_\n                    - #radius == radius_\n                    - #label == label_\n            !*/\n\n        };\n\n        void add_overlay (\n            const overlay_rect& overlay\n        );\n        /*!\n            ensures\n                - adds the given overlay rectangle into this object such\n                  that it will be displayed. \n        !*/\n\n        void add_overlay (\n            const overlay_line& overlay\n        );\n        /*!\n            ensures\n                - adds the given overlay line into this object such\n                  that it will be displayed. \n        !*/\n\n        void add_overlay (\n            const overlay_circle& overlay\n        );\n        /*!\n            ensures\n                - adds the given overlay circle into this object such\n                  that it will be displayed. \n        !*/\n\n        void add_overlay (\n            const std::vector<overlay_rect>& overlay\n        );\n        /*!\n            ensures\n                - adds the given set of overlay rectangles into this object such\n                  that they will be displayed. \n        !*/\n\n        void add_overlay (\n            const std::vector<overlay_line>& overlay\n        );\n        /*!\n            ensures\n                - adds the given set of overlay lines into this object such\n                  that they will be displayed. \n        !*/\n\n        void add_overlay (\n            const std::vector<overlay_circle>& overlay\n        );\n        /*!\n            ensures\n                - adds the given set of overlay circles into this object such\n                  that they will be displayed. \n        !*/\n\n        void clear_overlay (\n        );\n        /*!\n            ensures\n                - removes all overlays from this object.  \n                - #get_overlay_rects().size() == 0\n        !*/\n\n        std::vector<overlay_rect> get_overlay_rects (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of all the overlay_rect objects currently displayed.\n        !*/\n\n        void set_default_overlay_rect_label (\n            const std::string& label\n        );\n        /*!\n            ensures\n                - #get_default_overlay_rect_label() == label\n        !*/\n\n        std::string get_default_overlay_rect_label (\n        ) const;\n        /*!\n            ensures\n                - returns the label given to new overlay rectangles created by the user\n                  (i.e. when the user holds shift and adds them with the mouse)\n        !*/\n\n        void set_default_overlay_rect_color (\n            const rgb_alpha_pixel& color\n        );\n        /*!\n            ensures\n                - #get_default_overlay_rect_color() == color\n        !*/\n\n        rgb_alpha_pixel get_default_overlay_rect_color (\n        ) const;\n        /*!\n            ensures\n                - returns the color given to new overlay rectangles created by the user\n                  (i.e. when the user holds shift and adds them with the mouse)\n        !*/\n\n        void add_labelable_part_name (\n            const std::string& name\n        );\n        /*!\n            ensures\n                - adds a user labelable part with the given name.  If the name has\n                  already been added then this function has no effect.  \n                - These parts can be added by the user by selecting an overlay box\n                  and then right clicking anywhere in it.  A popup menu will appear\n                  listing the parts.  The user can then click a part name and it will\n                  add it into the overlay_rect::parts variable and also show it on the\n                  screen.\n        !*/\n\n        void clear_labelable_part_names (\n        );\n        /*!\n            ensures\n                - removes all use labelable parts.  Calling this function undoes \n                  all previous calls to add_labelable_part_name().  Therefore, the \n                  user won't be able to label any parts after clear_labelable_part_names()\n                  is called.\n        !*/\n\n        rectangle get_image_display_rect (\n        ) const;\n        /*!\n            ensures\n                - returns a rectangle R that tells you how big the image inside the\n                  display is when it appears on the screen.  Note that it takes the\n                  current zoom level into account.\n                    - R.width()  == the width of the displayed image\n                    - R.height() == the height of the displayed image\n                    - R.tl_corner() == (0,0)\n        !*/\n\n        void enable_overlay_editing (\n        ); \n        /*!\n            ensures\n                - #overlay_editing_is_enabled() == true\n        !*/\n\n        void disable_overlay_editing (\n        );\n        /*!\n            ensures\n                - #overlay_editing_is_enabled() == false \n        !*/\n        \n        bool overlay_editing_is_enabled (\n        ) const; \n        /*!\n            ensures\n                - if this function returns true then it is possible for the user to add or\n                  remove overlay objects (e.g. rectangles) using the mouse and keyboard.\n                  If it returns false then the overlay is not user editable.\n        !*/\n\n        template <\n            typename T\n            >\n        void set_overlay_rects_changed_handler (\n            T& object,\n            void (T::*event_handler)()\n        );\n        /*\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - the event_handler function is called on object when the user adds,\n                  removes, or modifies an overlay rectangle.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        */\n\n        void set_overlay_rects_changed_handler (\n            const any_function<void()>& event_handler\n        );\n        /*\n            ensures\n                - the event_handler function is called when the user adds or removes \n                  an overlay rectangle.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        */\n\n        template <\n            typename T\n            >\n        void set_overlay_rect_selected_handler (\n            T& object,\n            void (T::*event_handler)(const overlay_rect& orect)\n        );\n        /*\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - The event_handler function is called on object when the user selects\n                  an overlay rectangle by double clicking on it.  The selected rectangle \n                  will be passed to event_handler().\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        */\n\n        void set_overlay_rect_selected_handler (\n            const any_function<void(const overlay_rect& orect)>& event_handler\n        );\n        /*\n            ensures\n                - The event_handler function is called when the user selects an overlay \n                  rectangle by double clicking on it.  The selected rectangle will be \n                  passed to event_handler().\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        */\n\n        template <\n            typename T\n            >\n        void set_image_clicked_handler (\n            T& object,\n            void (T::*event_handler)(const point& p, bool is_double_click)\n        );\n        /*\n            requires\n                - event_handler is a valid pointer to a member function in T \n            ensures\n                - The event_handler function is called on object when the user left clicks\n                  anywhere on the image.  When they do so this callback is called with the\n                  location of the image pixel which was clicked.  The is_double_click bool\n                  will also tell you if it was a double click or single click.\n                - any previous calls to this function are overridden by this new call.  \n                  (i.e. you can only have one event handler associated with this \n                  event at a time)\n            throws\n                - std::bad_alloc\n        */\n\n        void set_image_clicked_handler (\n            const any_function<void(const point& p, bool is_double_click)>& event_handler\n        );\n        /*\n            ensures\n                - The event_handler function is called when the user left clicks anywhere\n                  on the image.  When they do so this callback is called with the location\n                  of the image pixel which was clicked.  The is_double_click bool will also\n                  tell you if it was a double click or single click.\n                - Any previous calls to this function are overridden by this new call.\n                  (i.e. you can only have one event handler associated with this event at a\n                  time)\n            throws\n                - std::bad_alloc\n        */\n\n    private:\n\n        // restricted functions\n        image_display(image_display&);        // copy constructor\n        image_display& operator=(image_display&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class image_window : public drawable_window \n    {\n        /*!\n            INITIAL VALUE\n                - initially, this object is visible on the screen\n                - events_tied() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple window that is just a container for an image_display.  \n                It exists to make it easy to throw image_displays onto the screen \n                without having to put together your own drawable_window objects.\n        !*/\n    public:\n\n        typedef image_display::overlay_rect overlay_rect;\n        typedef image_display::overlay_line overlay_line;\n        typedef image_display::overlay_circle overlay_circle;\n\n        image_window(\n        ); \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        template <typename image_type>\n        image_window(\n            const image_type& img\n        ); \n        /*!\n            requires\n                - image_type == an implementation of array2d/array2d_kernel_abstract.h or\n                  a dlib::matrix or something convertible to a matrix via mat()\n                - pixel_traits<typename image_type::type> must be defined \n            ensures\n                - this object is properly initialized \n                - #*this window is now displaying the given image img.\n        !*/\n\n        template < typename image_type>\n        image_window(\n            const image_type& img,\n            const std::string& title\n        );\n        /*!\n            requires\n                - image_type == an implementation of array2d/array2d_kernel_abstract.h or\n                  a dlib::matrix or something convertible to a matrix via mat()\n                - pixel_traits<typename image_type::type> must be defined \n            ensures\n                - this object is properly initialized \n                - #*this window is now displaying the given image img.\n                - The title of the window will be set to the given title string.\n        !*/\n\n        ~image_window(\n        );\n        /*!\n            ensures\n                - any resources associated with this object have been released\n        !*/\n\n        template <typename image_type>\n        void set_image (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type == an implementation of array2d/array2d_kernel_abstract.h\n                - pixel_traits<typename image_type::type> must be defined \n            ensures\n                - #*this window is now displaying the given image img.\n        !*/\n\n        void add_overlay (\n            const overlay_rect& overlay\n        );\n        /*!\n            ensures\n                - adds the given overlay rectangle into this object such\n                  that it will be displayed. \n        !*/\n\n        template <typename pixel_type>\n        void add_overlay(\n            const rectangle& r, \n            pixel_type p\n        );\n        /*!\n            ensures\n                - performs: add_overlay(overlay_rect(r,p));\n        !*/\n\n        template <typename pixel_type>\n        void add_overlay(\n            const rectangle& r, \n            pixel_type p, \n            const std::string& l\n        );\n        /*!\n            ensures\n                - performs: add_overlay(overlay_rect(r,p,l));\n        !*/\n\n        template <typename pixel_type>\n        void add_overlay(\n            const std::vector<rectangle>& r,\n            pixel_type p\n        );\n        /*!\n            ensures\n                - adds the given set of rectangles into this object such\n                  that they will be displayed with the color specific by p. \n        !*/\n\n        void add_overlay(\n            const full_object_detection& object,\n            const std::vector<std::string>& part_names\n        );\n        /*!\n            ensures\n                - adds the given full_object_detection to the overlays\n                  and shows it on the screen.  This includes any of its\n                  parts that are not set equal to OBJECT_PART_NOT_PRESENT.\n                - for all valid i < part_names.size():\n                    - the part object.part(i) will be labeled with the string\n                      part_names[i].\n        !*/\n\n        void add_overlay(\n            const full_object_detection& object\n        );\n        /*!\n            ensures\n                - adds the given full_object_detection to the overlays\n                  and shows it on the screen.  This includes any of its\n                  parts that are not set equal to OBJECT_PART_NOT_PRESENT.\n        !*/\n\n        void add_overlay(\n            const std::vector<full_object_detection>& objects,\n            const std::vector<std::string>& part_names\n        ); \n        /*!\n            ensures\n                - calling this function is equivalent to calling the following\n                  sequence of functions, for all valid i:\n                    - add_overlay(objects[i], part_names);\n        !*/\n\n        void add_overlay(\n            const std::vector<full_object_detection>& objects\n        );\n        /*!\n            ensures\n                - calling this function is equivalent to calling the following\n                  sequence of functions, for all valid i:\n                    - add_overlay(objects[i]);\n        !*/\n\n        void add_overlay (\n            const overlay_line& overlay\n        );\n        /*!\n            ensures\n                - adds the given overlay line into this object such\n                  that it will be displayed. \n        !*/\n\n        void add_overlay (\n            const overlay_circle& overlay\n        );\n        /*!\n            ensures\n                - adds the given overlay circle into this object such\n                  that it will be displayed. \n        !*/\n\n        template <typename pixel_type>\n        void add_overlay(\n            const point& p1,\n            const point& p2,\n            pixel_type p\n        );\n        /*!\n            ensures\n                - performs: add_overlay(overlay_line(p1,p2,p));\n        !*/\n\n        void add_overlay (\n            const std::vector<overlay_rect>& overlay\n        );\n        /*!\n            ensures\n                - adds the given set of overlay rectangles into this object such\n                  that they will be displayed. \n        !*/\n\n        void add_overlay (\n            const std::vector<overlay_line>& overlay\n        );\n        /*!\n            ensures\n                - adds the given set of overlay lines into this object such\n                  that they will be displayed. \n        !*/\n\n        void add_overlay (\n            const std::vector<overlay_circle>& overlay\n        );\n        /*!\n            ensures\n                - adds the given set of overlay circles into this object such\n                  that they will be displayed. \n        !*/\n\n        void clear_overlay (\n        );\n        /*!\n            ensures\n                - removes all overlays from this object.  \n        !*/\n\n        void tie_events (\n        );\n        /*!\n            ensures\n                - #events_tied() == true\n        !*/\n\n        void untie_events (\n        );\n        /*!\n            ensures\n                - #events_tied() == false \n        !*/\n\n        bool events_tied (\n        ) const;\n        /*!\n            ensures\n                - returns true if and only if the get_next_double_click() and\n                  get_next_keypress() events are tied together.  If they are tied it means\n                  that you can use a loop of the following form to listen for both events\n                  simultaneously:\n                    while (mywindow.get_next_double_click(p) || mywindow.get_next_keypress(key,printable))\n                    {\n                        if (p.x() < 0)\n                            // Do something with the keyboard event\n                        else\n                            // Do something with the mouse event\n                    }\n        !*/\n\n        bool get_next_double_click (\n            point& p\n        ); \n        /*!\n            ensures\n                - This function blocks until the user double clicks on the image or the\n                  window is closed by the user.  It will also unblock for a keyboard key\n                  press if events_tied() == true.\n                - if (this function returns true) then\n                    - This means the user double clicked the mouse.\n                    - #p == the next image pixel the user clicked.  \n                - else\n                    - #p == point(-1,1)\n        !*/\n\n        bool get_next_double_click (\n            point& p,\n            unsigned long& mouse_button\n        ); \n        /*!\n            ensures\n                - This function blocks until the user double clicks on the image or the\n                  window is closed by the user.  It will also unblock for a keyboard key\n                  press if events_tied() == true.\n                - if (this function returns true) then\n                    - This means the user double clicked the mouse.\n                    - #p == the next image pixel the user clicked.  \n                    - #mouse_button == the mouse button which was used to double click.\n                      This will be either dlib::base_window::LEFT,\n                      dlib::base_window::MIDDLE, or dlib::base_window::RIGHT\n                - else\n                    - #p == point(-1,1)\n                      (Note that this point is outside any possible image)\n        !*/\n\n        bool get_next_keypress (\n            unsigned long& key,\n            bool& is_printable,\n            unsigned long& state\n        );\n        /*!\n            ensures\n                - This function blocks until the user presses a keyboard key or the\n                  window is closed by the user.  It will also unblock for a mouse double\n                  click if events_tied() == true.\n                - if (this function returns true) then\n                    - This means the user pressed a keyboard key.\n                    - The keyboard button press is recorded into #key, #is_printable, and\n                      #state.  In particular, these variables are populated with the three\n                      identically named arguments to the base_window::on_keydown(key,is_printable,state) \n                      event.\n        !*/\n\n        bool get_next_keypress (\n            unsigned long& key,\n            bool& is_printable\n        );\n        /*!\n            ensures\n                - This function blocks until the user presses a keyboard key or the\n                  window is closed by the user.  It will also unblock for a mouse double\n                  click if events_tied() == true.\n                - This function is the equivalent to calling get_next_keypress(key,is_printable,temp) \n                  and then discarding temp.\n        !*/\n\n    private:\n\n        // restricted functions\n        image_window(image_window&);\n        image_window& operator= (image_window&);\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_WIDGETs_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/gui_widgets.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GUI_WIDGETs_\n#define DLIB_GUI_WIDGETs_\n\n\n\n#include \"gui_widgets/widgets.h\"\n\n\n\n#endif // DLIB_GUI_WIDGETs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASh_\n#define DLIB_HASh_\n\n\n#include \"general_hash/hash.h\"\n#include \"general_hash/random_hashing.h\"\n#include \"general_hash/count_bits.h\"\n\n\n#endif // DLIB_HASh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_map/hash_map_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_MAP_KERNEl_1_\n#define DLIB_HASH_MAP_KERNEl_1_\n\n#include \"hash_map_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../general_hash/general_hash.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/remover.h\"\n#include \"../assert.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager = default_memory_manager\n        >\n    class hash_map_kernel_1 : public enumerable<map_pair<domain,range> >,\n                              public pair_remover<domain,range>\n    {\n\n        /*!\n            REQUIREMENTS ON hash_table\n                hash_table is instantiated with domain and range and\n                T_is_POD must be set to false and\n                implements hash_table/hash_table_kernel_abstract.h\n\n            INITIAL VALUE\n                table.size() == 0\n\n            CONVENTION\n                table.size() = size() == the number of elements in the map \n                the elements in this hash_map are stored in table\n        !*/\n        \n\n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef typename hash_table::compare_type compare_type;\n            typedef mem_manager mem_manager_type;\n\n            hash_map_kernel_1(\n            ) :\n                table(expnum)\n            {\n                COMPILE_TIME_ASSERT(expnum < 32);\n            }\n\n            virtual ~hash_map_kernel_1(\n            )\n            {}\n\n            inline void clear(\n            );            \n\n            void add (\n                domain& d,\n                range& r\n            );\n\n            inline bool is_in_domain (\n                const domain& d\n            ) const;\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n \n            void destroy (\n                const domain& d\n            );\n \n            range& operator[] (\n                const domain& d\n            );\n\n            const range& operator[] (\n                const domain& d\n            ) const;\n\n            inline void swap (\n                hash_map_kernel_1& item\n            );\n\n            // functions from the remover interface\n            inline void remove_any (\n                domain& d,\n                range& r\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            inline bool current_element_valid (\n            ) const;\n\n            inline const map_pair<domain,range>& element (\n            ) const;\n\n            inline map_pair<domain,range>& element (\n            );\n\n            inline bool move_next (\n            ) const;\n    \n        private:\n\n            hash_table table;\n\n            // restricted functions\n            hash_map_kernel_1(hash_map_kernel_1&);    \n            hash_map_kernel_1& operator= ( hash_map_kernel_1&);\n\n    };\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    inline void swap (\n        hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>& a, \n        hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>& b \n    ) { a.swap(b); } \n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void deserialize (\n        hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>& item,\n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            domain d;\n            range r;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(d,in);\n                deserialize(r,in);\n                item.add(d,r);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type hash_map_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    clear (\n    )\n    {\n        table.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    add (\n        domain& d,\n        range& r\n    )\n    {\n        table.add(d,r); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    bool hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    is_in_domain(\n        const domain& d\n    ) const\n    {\n        return (table[d] != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    remove_any (\n        domain& d,\n        range& r\n    )\n    {\n        table.remove_any(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    remove(\n        const domain& d,\n        domain& d_copy,\n        range& r\n    )\n    {\n        table.remove(d,d_copy,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    destroy(\n        const domain& d\n    )\n    {\n        table.destroy(d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    range& hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    operator[](\n        const domain& d\n    )\n    {\n        return *table[d];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    const range& hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    operator[](\n        const domain& d\n    ) const\n    {\n        return *table[d];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    unsigned long hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    size (\n    ) const\n    {\n        return table.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    swap (\n        hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>& item\n    )\n    {\n        table.swap(item.table);      \n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    bool hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    at_start (\n    ) const\n    {\n        return table.at_start();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    reset (\n    ) const\n    {\n        table.reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    bool hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return table.current_element_valid();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    const map_pair<domain,range>& hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    element (\n    ) const\n    {\n        return table.element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    map_pair<domain,range>& hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    element (\n    )\n    {\n        return table.element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    bool hash_map_kernel_1<domain,range,expnum,hash_table,mem_manager>::\n    move_next (\n    ) const\n    {\n        return table.move_next();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HASH_MAP_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_map/hash_map_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_HASH_MAP_KERNEl_ABSTRACT_\n#ifdef DLIB_HASH_MAP_KERNEl_ABSTRACT_\n\n#include \"../general_hash/general_hash.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<T>\n        >\n    class hash_map : public enumerable<map_pair<domain,range> >,\n                     public pair_remover<domain,range>\n    {\n\n        /*!\n            REQUIREMENTS ON domain\n                domain must be comparable by compare where compare is a functor compatible with std::less and\n                domain must be hashable by general_hash \n                (general_hash is defined in dlib/general_hash) and \n                domain must be swappable by a global swap() and\n                domain must have a default constructor\n\n            REQUIREMENTS ON range\n                range must be swappable by a global swap() and\n                range must have a default constructor\n\n            REQUIREMENTS ON expnum\n                expnum < 32\n                2^expnum is the number of buckets to hash items of type T into.\n                Note that this is really just a suggestion to the hash table.\n                Implementations are free to manage the table size however is most\n                appropriate.\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap(), is_in_domain(), and operator[] functions do \n                not invalidate pointers or references to internal data.\n                All other functions have no such guarantees.\n\n            INITIAL VALUE\n                size() == 0\n\n            ENUMERATION ORDER\n                No order is specified.  Only that each element will be visited once\n                and only once.\n\n            WHAT THIS OBJECT REPRESENTS\n                hash_map contains items of type domain and range\n\n                This object is similar an array.  It maps items of type domain on to \n                items of type range.  \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n\n                definition of equivalent:\n                a is equivalent to b if\n                a < b == false and\n                b < a == false\n        !*/\n        \n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef compare compare_type;\n            typedef mem_manager mem_manager_type;\n\n            hash_map(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n            !*/\n\n            virtual ~hash_map(\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            void add (\n                domain& d,\n                range& r\n            );\n            /*!\n                requires\n                    - &d != &r (i.e. d and r cannot be the same variable) \n                    - is_in_domain(d)  == false\n                ensures\n                    - #is_in_domain(d) == true \n                    - #operator[](d)   == r    \n                    - #d and #r have initial values for their types \n                    - #size() == size() + 1\n                    - #at_start() == true\n                throws \n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n                        if add() throws then it has no effect\n            !*/\n\n            bool is_in_domain (\n                const domain& d\n            ) const;\n            /*!\n                ensures\n                    - returns whether or not an element equivalent to d is in the \n                      domain of *this\n            !*/\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n            /*!\n                requires\n                    - &d != &r (i.e. d and r cannot be the same variable) \n                    - &d != &d_copy (i.e. d and d_copy cannot be the same variable) \n                    - &r != &d_copy (i.e. r and d_copy cannot be the same variable) \n                    - is_in_domain(d) == true\n                ensures\n                    - #is_in_domain(d) == false \n                    - #d_copy is equivalent to d \n                    - the element in the range of *this associated with #d_copy has \n                      been swapped into #r \n                    - #size() == size() - 1\n                    - #at_start() == true\n            !*/\n\n            void destroy (\n                const domain& d\n            );\n            /*!\n                requires\n                    - is_in_domain(d) == true\n                ensures\n                    - #is_in_domain(d) == false \n                    - #size() == size() - 1\n                    - #at_start() == true\n            !*/\n\n            range& operator[] (\n                const domain& d\n            );\n            /*!\n                requires\n                    - is_in_domain(d) == true\n                ensures\n                    - returns a non-const reference to the element in the range of *this \n                      associated with the element equivalent to d\n            !*/\n\n            const range& operator[] (\n                const domain& d\n            ) const;\n            /*!\n                requires\n                    - is_in_domain(d) == true\n                ensures\n                    - returns a const reference to the element in the range of *this \n                      associated with the element equivalent to d\n            !*/\n\n            void swap (\n                hash_map& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n    \n        private:\n\n            // restricted functions\n            hash_map(hash_map&);        \n            hash_map& operator=(hash_map&);   \n    };\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename mem_manager,\n        typename compare\n        >\n    inline void swap (\n        hash_map<domain,range,expnum,mem_manager,compare>& a, \n        hash_map<domain,range,expnum,mem_manager,compare>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename mem_manager,\n        typename compare\n        >\n    void deserialize (\n        hash_map<domain,range,expnum,mem_manager,compare>& item,\n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_HASH_MAP_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_map/hash_map_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_MAP_KERNEl_C_\n#define DLIB_HASH_MAP_KERNEl_C_\n\n#include \"hash_map_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename hash_map_base\n        >\n    class hash_map_kernel_c : public hash_map_base\n    {\n\n        typedef typename hash_map_base::domain_type domain;\n        typedef typename hash_map_base::range_type range;\n\n        \n        public:\n            void add (\n                domain& d,\n                range& r\n            );\n\n            void remove_any (\n                domain& d,\n                range& r\n            );\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n\n            void destroy (\n                const domain& d\n            );\n\n            range& operator[] (\n                const domain& d\n            );\n\n            const range& operator[] (\n                const domain& d\n            ) const;\n\n            const map_pair<domain,range>& element (\n            ) const;\n\n            map_pair<domain,range>& element (\n            );\n    };\n\n    template <\n        typename hash_map_base\n        >\n    inline void swap (\n        hash_map_kernel_c<hash_map_base>& a, \n        hash_map_kernel_c<hash_map_base>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_map_base\n        >\n    void hash_map_kernel_c<hash_map_base>::\n    add (\n        domain& d,\n        range& r\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (!this->is_in_domain(d)) &&\n                (static_cast<void*>(&d) != static_cast<void*>(&r)),\n            \"\\tvoid hash_map::add\"\n            << \"\\n\\tdomain element being added must not already be in the hash_map\"\n            << \"\\n\\tand d and r must not be the same variable\"\n            << \"\\n\\tis_in_domain(d): \" << (this->is_in_domain(d) ? \"true\" : \"false\")\n            << \"\\n\\tthis: \" << this\n            << \"\\n\\t&d:   \" << static_cast<void*>(&d)\n            << \"\\n\\t&r:   \" << static_cast<void*>(&r)\n            );\n\n\n        // call the real function\n        hash_map_base::add(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_map_base\n        >\n    void hash_map_kernel_c<hash_map_base>::\n    remove_any (\n        domain& d,\n        range& r\n    )\n    {\n\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (this->size() > 0)  &&\n                (static_cast<void*>(&d) != static_cast<void*>(&r)),\n            \"\\tvoid hash_map::remove_any\"\n            << \"\\n\\tsize() must be greater than zero if something is going to be removed\"\n            << \"\\n\\tand d and r must not be the same variable.\"\n            << \"\\n\\tsize(): \" << this->size() \n            << \"\\n\\tthis:   \" << this\n            << \"\\n\\t&d:     \" << static_cast<void*>(&d)\n            << \"\\n\\t&r:     \" << static_cast<void*>(&r)\n            );\n\n\n        // call the real function\n        hash_map_base::remove_any(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_map_base\n        >\n    void hash_map_kernel_c<hash_map_base>::\n    remove (\n        const domain& d,\n        domain& d_copy,\n        range& r\n    )\n    {\n\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (this->is_in_domain(d)) &&\n                (static_cast<const void*>(&d) != static_cast<void*>(&r)) &&\n                (static_cast<void*>(&r) != static_cast<void*>(&d_copy)) &&\n                (static_cast<const void*>(&d) != static_cast<void*>(&d_copy)),\n            \"\\tvoid hash_map::remove\"\n            << \"\\n\\tcan't remove something that isn't in the hash_map or if the paremeters\"\n            << \"\\n\\tare actually the same variable.  Either way can't remove.\"\n            << \"\\n\\tis_in_domain(d): \" << (this->is_in_domain(d) ? \"true\" : \"false\")\n            << \"\\n\\tthis:      \" << this\n            << \"\\n\\t&d:        \" << static_cast<const void*>(&d)\n            << \"\\n\\t&r:        \" << static_cast<void*>(&r)\n            << \"\\n\\t&d_copy:   \" << static_cast<void*>(&d_copy)\n            );\n\n\n        // call the real function\n        hash_map_base::remove(d,d_copy,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_map_base\n        >\n    void hash_map_kernel_c<hash_map_base>::\n    destroy (\n        const domain& d\n    )\n    {\n\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->is_in_domain(d), \n            \"\\tvoid hash_map::destroy\"\n            << \"\\n\\tcan't remove something that isn't in the hash_map\"\n            << \"\\n\\tthis:      \" << this\n            << \"\\n\\t&d:        \" << static_cast<const void*>(&d)\n            );\n\n\n        // call the real function\n        hash_map_base::destroy(d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_map_base\n        >\n    typename hash_map_base::range_type& hash_map_kernel_c<hash_map_base>::\n    operator[] (\n        const domain& d\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->is_in_domain(d),\n            \"\\trange& hash_map::operator[]\"\n            << \"\\n\\td must be in the domain of the hash_map\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return hash_map_base::operator[](d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_map_base\n        >\n    const typename hash_map_base::range_type& hash_map_kernel_c<hash_map_base>::\n    operator[] (\n        const domain& d\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( is_in_domain(d),\n            \"\\tconst range& hash_map::operator[]\"\n            << \"\\n\\td must be in the domain of the hash_map\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return hash_map_base::operator[](d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_map_base\n        >\n    const map_pair<typename hash_map_base::domain_type,typename hash_map_base::range_type>& hash_map_kernel_c<hash_map_base>::\n    element (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tconst map_pair<domain,range>& hash_map::element\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return hash_map_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_map_base\n        >\n    map_pair<typename hash_map_base::domain_type,typename hash_map_base::range_type>& hash_map_kernel_c<hash_map_base>::\n    element (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tmap_pair<domain,range>& hash_map::element\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return hash_map_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HASH_MAP_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_map.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_MAp_\n#define DLIB_HASH_MAp_\n\n#include \"hash_map/hash_map_kernel_1.h\"\n#include \"hash_map/hash_map_kernel_c.h\"\n\n#include \"hash_table.h\"\n#include \"algs.h\"\n\n#include \"algs.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        unsigned long expnum,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<domain>\n        >\n    class hash_map\n    {\n        hash_map() {}\n\n        typedef typename hash_table<domain,range,mem_manager,compare>::kernel_1a\n                hash_table_1;\n        typedef typename hash_table<domain,range,mem_manager,compare>::kernel_2a\n                hash_table_2;\n        typedef typename hash_table<domain,range,mem_manager,compare>::kernel_2b\n                hash_table_3;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     hash_map_kernel_1<domain,range,expnum,hash_table_1,mem_manager>\n                    kernel_1a;\n        typedef     hash_map_kernel_c<kernel_1a>\n                    kernel_1a_c;\n\n        // kernel_1b        \n        typedef     hash_map_kernel_1<domain,range,expnum,hash_table_2,mem_manager>\n                    kernel_1b;\n        typedef     hash_map_kernel_c<kernel_1b>\n                    kernel_1b_c;\n \n        // kernel_1c        \n        typedef     hash_map_kernel_1<domain,range,expnum,hash_table_3,mem_manager>\n                    kernel_1c;\n        typedef     hash_map_kernel_c<kernel_1c>\n                    kernel_1c_c;\n\n\n    };\n}\n\n#endif // DLIB_HASH_MAp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_set/hash_set_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_SET_KERNEl_1_\n#define DLIB_HASH_SET_KERNEl_1_\n\n#include \"hash_set_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../general_hash/general_hash.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../assert.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager = default_memory_manager \n        >\n    class hash_set_kernel_1 : public enumerable<const T>,\n                              public remover<T>\n    {\n\n        /*!\n            REQUIREMENTS ON hash_table\n                hash_table is instantiated with <domain=T,range=char> and\n                T_is_POD must be set to false and\n                is an implementation of hash_table/hash_table_kernel_abstract.h\n\n            INITIAL VALUE\n                table.size() == 0\n\n            CONVENTION\n                table.size() = size() == the number of elements in the set and\n                the elements in this hash_set are stored in table\n        !*/\n        \n        public:\n\n            typedef T type;\n            typedef typename hash_table::compare_type compare_type;\n            typedef mem_manager mem_manager_type;\n\n            hash_set_kernel_1(\n            ) :\n                table(expnum)\n            {\n                COMPILE_TIME_ASSERT(expnum < 32);\n            }\n\n            virtual ~hash_set_kernel_1(\n            )\n            {}\n\n            inline void clear(\n            );\n\n            inline void add (\n                T& item\n            );\n\n            inline bool is_member (\n                const T& item\n            ) const;\n\n            inline void remove (\n                const T& item,\n                T& item_copy\n            );\n\n            inline void destroy (\n                const T& item\n            );\n\n            inline void swap (\n                hash_set_kernel_1& item\n            );\n\n            // functions from the remover interface\n            inline void remove_any (\n                T& item\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            inline bool current_element_valid (\n            ) const;\n\n            inline const T& element (\n            ) const;\n\n            inline const T& element (\n            );\n\n            inline bool move_next (\n            ) const;\n\n        private:\n\n            hash_table table;\n            char junk;\n\n            // restricted functions\n            hash_set_kernel_1(hash_set_kernel_1&);    \n            hash_set_kernel_1& operator= ( hash_set_kernel_1&);\n\n    };\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    inline void swap (\n        hash_set_kernel_1<T,expnum,hash_table,mem_manager>& a, \n        hash_set_kernel_1<T,expnum,hash_table,mem_manager>& b \n    ) { a.swap(b); } \n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void deserialize (\n        hash_set_kernel_1<T,expnum,hash_table,mem_manager>& item,\n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            T temp;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(temp,in);\n                item.add(temp);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type hash_set_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    clear (\n    )\n    {\n        table.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    add (\n        T& item\n    )\n    {\n        table.add(item,junk);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    bool hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    is_member(\n        const T& item\n    ) const\n    {\n        return (table[item] != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    remove_any (\n        T& item\n    )\n    {\n        table.remove_any(item,junk);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    remove(\n        const T& item,\n        T& item_copy\n    )\n    {\n        table.remove(item,item_copy,junk);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    destroy(\n        const T& item\n    )\n    {\n        table.destroy(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    unsigned long hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    size (\n    ) const\n    {\n        return table.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    swap (\n        hash_set_kernel_1<T,expnum,hash_table,mem_manager>& item\n    )\n    {\n        table.swap(item.table);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    bool hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    at_start (\n    ) const\n    {\n        return table.at_start();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    void hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    reset (\n    ) const\n    {\n        table.reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    bool hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return table.current_element_valid();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    const T& hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    element (\n    ) const\n    {\n        return table.element().key();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    const T& hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    element (\n    )\n    {\n        return table.element().key();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename hash_table,\n        typename mem_manager\n        >\n    bool hash_set_kernel_1<T,expnum,hash_table,mem_manager>::\n    move_next (\n    ) const\n    {\n        return table.move_next();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HASH_SET_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_set/hash_set_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_HASH_SET_KERNEl_ABSTRACT_\n#ifdef DLIB_HASH_SET_KERNEl_ABSTRACT_\n\n#include \"../general_hash/general_hash.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<T>\n        >\n    class hash_set : public enumerable<const T>,\n                     public remover<T>\n    {\n\n        /*!                \n            REQUIREMENTS ON T\n                domain must be comparable by compare where compare is a functor compatible with std::less and\n                T must be hashable by general_hash\n                (general_hash is defined in dlib/general_hash) and \n                T must be swappable by a global swap() and\n                T must have a default constructor\n\n            REQUIREMENTS ON expnum\n                expnum < 32\n                2^expnum is the number of buckets to hash items of type T into. \n                Note that this is really just a suggestion to the hash table.\n                Implementations are free to manage the table size however is most\n                appropriate.\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap() and is_member() functions do not invalidate \n                pointers or references to internal data.\n                All other functions have no such guarantee.\n\n            INITIAL VALUE\n                size() == 0    \n\n            ENUMERATION ORDER\n                No order is specified.  Only that each element will be visited once\n                and only once.\n\n            WHAT THIS OBJECT REPRESENTS\n                hash_set contains items of type T\n\n                This object represents an unaddressed collection \n                of items.  Every element in a hash_set is unique.\n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n\n                definition of equivalent:\n                a is equivalent to b if\n                a < b == false and\n                b < a == false\n        !*/\n        \n        public:\n\n            typedef T type;\n            typedef compare compare_type;\n            typedef mem_manager mem_manager_type;\n\n            hash_set(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n            !*/\n\n            virtual ~hash_set(\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            void add (\n                T& item\n            );\n            /*!\n                requires\n                    - is_member(item) == false\n                ensures\n                    - #is_member(item) == true \n                    - #item has an initial value for its type \n                    - #size() == size() + 1\n                    - #at_start() == true\n                throws \n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if add() throws then it has no effect\n            !*/\n\n            bool is_member (\n                const T& item\n            ) const;\n            /*!\n                ensures\n                    - returns whether or not there is an element in *this equivalent \n                      to item\n            !*/\n\n            void remove (\n                const T& item,\n                T& item_copy\n            );\n            /*!\n                requires\n                    - is_member(item) == true \n                    - &item != &item_copy (i.e. item and item_copy cannot be the \n                      same variable) \n                ensures\n                    - #is_member(item) == false \n                    - the element in *this equivalent to item has been removed and \n                      swapped into #item_copy \n                    - #size() == size() - 1\n                    - #at_start() == true\n            !*/\n\n            void destroy (\n                const T& item\n            );\n            /*!\n                requires\n                    - is_member(item) == true \n                ensures\n                    - #is_member(item) == false \n                    - #size() == size() - 1\n                    - #at_start() == true\n            !*/\n\n            void swap (\n                hash_set& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n    \n        private:\n\n            // restricted functions\n            hash_set(hash_set&);        // copy constructor\n            hash_set& operator=(hash_set&);    // assignment operator\n\n    };\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename mem_manager,\n        typename compare\n        >\n    inline void swap (\n        hash_set<T,expnum,mem_manager,compare>& a, \n        hash_set<T,expnum,mem_manager,compare>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename mem_manager,\n        typename compare\n        >\n    void deserialize (\n        hash_set<T,expnum,mem_manager,compare>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_HASH_SET_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_set/hash_set_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_SET_KERNEl_C_\n#define DLIB_HASH_SET_KERNEl_C_\n\n#include \"hash_set_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename hash_set_base\n        >\n    class hash_set_kernel_c : public hash_set_base\n    {\n        typedef typename hash_set_base::type T;\n        public:\n\n            void add (\n                T& item\n            );\n\n            void remove_any (\n                T& item\n            );\n\n            void remove (\n                const T& item,\n                T& item_copy\n            );\n\n            void destroy (\n                const T& item\n            );\n\n            const T& element (\n            ) const;\n\n            const T& element (\n            );\n\n\n    };\n\n\n    template <\n        typename hash_set_base\n        >\n    inline void swap (\n        hash_set_kernel_c<hash_set_base>& a, \n        hash_set_kernel_c<hash_set_base>& b \n    ) { a.swap(b); } \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_set_base\n        >\n    void hash_set_kernel_c<hash_set_base>::\n    add(\n        T& item\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !this->is_member(item),\n            \"\\tvoid hash_set::add\"\n            << \"\\n\\titem being added must not already be in the hash_set\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        hash_set_base::add(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_set_base\n        >\n    void hash_set_kernel_c<hash_set_base>::\n    remove (\n        const T& item,\n        T& item_copy\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->is_member(item) &&\n                (static_cast<const void*>(&item) != static_cast<void*>(&item_copy)),\n            \"\\tvoid hash_set::remove\"\n            << \"\\n\\titem should be in the hash_set if it's going to be removed\"\n            << \"\\n\\tthis:       \" << this\n            << \"\\n\\t&item:      \" << &item\n            << \"\\n\\t&item_copy: \" << &item_copy\n            );\n\n        // call the real function\n        hash_set_base::remove(item,item_copy);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_set_base\n        >\n    void hash_set_kernel_c<hash_set_base>::\n    destroy (\n        const T& item\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->is_member(item),\n            \"\\tvoid hash_set::destroy\"\n            << \"\\n\\titem should be in the hash_set if it's going to be removed\"\n            << \"\\n\\tthis:       \" << this\n            << \"\\n\\t&item:      \" << &item\n            );\n\n        // call the real function\n        hash_set_base::destroy(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_set_base\n        >\n    void hash_set_kernel_c<hash_set_base>::\n    remove_any (\n        T& item\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->size() != 0,\n            \"\\tvoid hash_set::remove_any\"\n            << \"\\n\\tsize must be greater than zero if an item is to be removed\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        hash_set_base::remove_any(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_set_base\n        >\n    const typename hash_set_base::type& hash_set_kernel_c<hash_set_base>::\n    element (\n    ) const\n    {\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tconst T& hash_set::element()\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        return hash_set_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hash_set_base\n        >\n    const typename hash_set_base::type& hash_set_kernel_c<hash_set_base>::\n    element (\n    ) \n    {\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tT& hash_set::element()\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        return hash_set_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HASH_SET_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_set.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_SEt_\n#define DLIB_HASH_SEt_\n\n#include \"hash_set/hash_set_kernel_1.h\"\n#include \"hash_set/hash_set_kernel_c.h\"\n\n#include \"hash_table.h\"\n#include \"algs.h\"\n\n\n#include \"algs.h\"\n#include <functional>\n\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        unsigned long expnum,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<T>\n        >\n    class hash_set\n    {\n        hash_set() {}\n\n        typedef typename hash_table<T,char,mem_manager,compare>::kernel_1a ht1a;\n        typedef typename hash_table<T,char,mem_manager,compare>::kernel_1a ht2a;\n        typedef typename hash_table<T,char,mem_manager,compare>::kernel_1a ht2b;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     hash_set_kernel_1<T,expnum,ht1a,mem_manager>\n                    kernel_1a;\n        typedef     hash_set_kernel_c<kernel_1a>\n                    kernel_1a_c;\n\n        // kernel_1b        \n        typedef     hash_set_kernel_1<T,expnum,ht2a,mem_manager>\n                    kernel_1b;\n        typedef     hash_set_kernel_c<kernel_1b>\n                    kernel_1b_c;\n\n        // kernel_1c\n        typedef     hash_set_kernel_1<T,expnum,ht2b,mem_manager>\n                    kernel_1c;\n        typedef     hash_set_kernel_c<kernel_1c>\n                    kernel_1c_c;\n\n\n\n\n    };\n}\n\n#endif // DLIB_HASH_SEt_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_table/hash_table_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_TABLE_KERNEl_1_\n#define DLIB_HASH_TABLE_KERNEl_1_\n\n#include \"hash_table_kernel_abstract.h\"\n#include \"../general_hash/general_hash.h\"\n#include \"../algs.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../assert.h\"\n#include \"../serialize.h\"\n#include <functional>\n\n\nnamespace dlib \n{\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<domain>\n        >\n    class hash_table_kernel_1 : public enumerable<map_pair<domain, range> >,\n                                public pair_remover<domain,range>\n    {\n\n        /*!\n            INITIAL VALUE\n                hash_size == 0\n                table == pointer to an array of num_of_buckets node pointers\n                num_of_buckets == the number of buckets in the hash table\n                current_element == 0\n                at_start_ == true\n                mask == num_of_buckets-1\n\n            CONVENTION\n                current_element_valid() == (current_element != 0)\n                element() == current_element->d and current_element->r\n                at_start_ == at_start()\n                if (current_element != 0) then\n                    table[current_bucket] == a pointer to the linked list that contains\n                                             the node pointed to by current_element\n\n                mask == num_of_buckets-1\n\n\n\n                hash_size = size() == the number of elements in the hash_table and\n                table == pointer to an array of num_of_buckets node pointers and\n                num_of_buckets == the number of buckets in the hash table and\n                for all i:\n                    table[i] == pointer to the first node in a linked list or\n                    table[i] == 0 if this bucket is currently not in use\n                        \n\n                for all nodes:\n                    d == the domain element stored in this node\n                    r == the range element stored in this node which is associated with\n                         d.\n                    next == pointer to the next node in the linked list or\n                    next == 0 if this is the last node in the linked list\n\n        !*/\n\n        struct node\n        {\n            node* next;\n            domain d;\n            range r;\n        };\n\n\n        class mpair : public map_pair<domain,range>\n        {\n        public:\n            const domain* d;\n            range* r;\n\n            const domain& key( \n            ) const { return *d; }\n\n            const range& value(\n            ) const { return *r; }\n\n            range& value(\n            ) { return *r; }\n        };\n\n\n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef compare compare_type;\n            typedef mem_manager mem_manager_type;\n\n            explicit hash_table_kernel_1(\n                unsigned long expnum\n            );\n\n            virtual ~hash_table_kernel_1(\n            ); \n\n            void clear(\n            );\n\n            unsigned long count (\n                const domain& item\n            ) const;\n\n            void add (\n                domain& d,\n                range& r\n            );\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n\n            void destroy (\n                const domain& d\n            );\n\n            const range* operator[] (\n                const domain& d\n            ) const;\n\n            range* operator[] (\n                const domain& d\n            );\n\n            void swap (\n                hash_table_kernel_1& item\n            );\n\n            // functions from the remover interface\n            void remove_any (\n                domain& d,\n                range& r\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            bool current_element_valid (\n            ) const;\n\n            const map_pair<domain,range>& element (\n            ) const;\n\n            map_pair<domain,range>& element (\n            );\n\n            bool move_next (\n            ) const;\n\n        private:\n\n            // data members\n            typename mem_manager::template rebind<node>::other pool;         \n            typename mem_manager::template rebind<node*>::other ppool;         \n            unsigned long hash_size;\n            node** table;\n            general_hash<domain> hash;\n            unsigned long num_of_buckets;\n            unsigned long mask;\n            \n            mutable mpair p;\n\n            mutable unsigned long current_bucket;\n            mutable node* current_element;\n            mutable bool at_start_;\n            compare comp;\n\n            // restricted functions\n            hash_table_kernel_1(hash_table_kernel_1&);      \n            hash_table_kernel_1& operator=(hash_table_kernel_1&);\n\n    };\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    inline void swap (\n        hash_table_kernel_1<domain,range,mem_manager,compare>& a, \n        hash_table_kernel_1<domain,range,mem_manager,compare>& b \n    ) { a.swap(b); }\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void deserialize (\n        hash_table_kernel_1<domain,range,mem_manager,compare>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            domain d;\n            range r;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(d,in);\n                deserialize(r,in);\n                item.add(d,r);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type hash_table_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    hash_table_kernel_1<domain,range,mem_manager,compare>::\n    hash_table_kernel_1(\n        unsigned long expnum\n    ) :\n        hash_size(0),\n        current_element(0),\n        at_start_(true)\n    {\n\n        num_of_buckets = 1;\n        while (expnum != 0)\n        {\n            --expnum;\n            num_of_buckets <<= 1;            \n        }\n        mask = num_of_buckets-1;\n\n        table = ppool.allocate_array(num_of_buckets);\n        for (unsigned long i = 0; i < num_of_buckets; ++i)\n        {\n            table[i] = 0;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    hash_table_kernel_1<domain,range,mem_manager,compare>::\n    ~hash_table_kernel_1(\n    )\n    {\n        for (unsigned long i = 0; i < num_of_buckets; ++i)\n        {\n            // delete this linked list\n            node* temp = table[i];\n            while (temp)\n            {\n                node* t = temp;\n                temp = temp->next;\n                pool.deallocate(t);                    \n            }\n            table[i] = 0;\n        }\n        ppool.deallocate_array(table);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_1<domain,range,mem_manager,compare>::\n    clear(\n    )\n    {\n        if (hash_size > 0)\n        {\n            for (unsigned long i = 0; i < num_of_buckets; ++i)\n            {\n                // delete this linked list\n                node* temp = table[i];\n                while (temp)\n                {\n                    node* t = temp;\n                    temp = temp->next;\n                    pool.deallocate(t);                    \n                }\n                table[i] = 0;\n            }            \n            hash_size = 0;\n        }\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    unsigned long hash_table_kernel_1<domain,range,mem_manager,compare>::\n    size(\n    ) const\n    {\n        return hash_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n \n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    unsigned long hash_table_kernel_1<domain,range,mem_manager,compare>::\n    count(\n        const domain& d\n    ) const\n    {\n        unsigned long items_found = 0;\n        node* temp = table[hash(d)&mask];\n\n        while (temp != 0)\n        {\n            // look for an element equivalent to d\n            if ( !(comp(temp->d , d) || comp(d , temp->d)) )\n            {\n                ++items_found;                \n            }\n            temp = temp->next;\n        }      \n\n        return items_found;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_1<domain,range,mem_manager,compare>::\n    add(\n        domain& d,\n        range& r\n    )\n    {\n        unsigned long hash_value = hash(d)&mask;\n        \n        // make a new node for this item\n        node& temp = *(pool.allocate());\n        exchange(d,temp.d);\n        exchange(r,temp.r);\n        \n        // add this new node to the head of the linked list in bucket number hash_value\n        temp.next = table[hash_value];\n        table[hash_value] = &temp;\n        \n        ++hash_size;\n\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_1<domain,range,mem_manager,compare>::\n    destroy(\n        const domain& d\n    )\n    {\n        node* last;\n        const unsigned long hash_value = hash(d)&mask;\n        node* temp = table[hash_value];\n        \n        // if there is more than one thing in this bucket\n        if (temp->next != 0)\n        {\n            // start looking with the second item in the list\n            last = temp;\n            temp = temp->next;\n            while (true)\n            {\n                // if we hit the end of the list without finding item then it must\n                // be the first element in the list so splice it out\n                if (temp == 0)\n                {\n                    temp = table[hash_value];\n                    table[hash_value] = temp->next;\n\n                    break;\n                }\n\n                // look for an element equivalent to item\n                if ( !(comp(temp->d , d) || comp(d , temp->d)) )\n                {\n                    // splice out the node we want to remove\n                    last->next = temp->next;\n                    break;\n                }\n    \n                last = temp;\n                temp = temp->next;\n            }\n\n        }\n        // else there is only one node in this linked list\n        else\n        {\n            table[hash_value] = 0;\n        }\n\n        pool.deallocate(temp);\n\n        --hash_size;\n\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_1<domain,range,mem_manager,compare>::\n    remove(\n        const domain& d,\n        domain& d_copy,\n        range& r\n    )\n    {\n        node* last;\n        const unsigned long hash_value = hash(d)&mask;\n        node* temp = table[hash_value];\n        \n        // if there is more than one thing in this bucket\n        if (temp->next != 0)\n        {\n            // start looking with the second item in the list\n            last = temp;\n            temp = temp->next;\n            while (true)\n            {\n                // if we hit the end of the list without finding item then it must\n                // be the first element in the list so splice it out\n                if (temp == 0)\n                {\n                    temp = table[hash_value];\n                    table[hash_value] = temp->next;\n\n                    break;\n                }\n\n                // look for an element equivalent to item\n                if ( !(comp(temp->d , d) || comp(d , temp->d)) )\n                {\n                    // splice out the node we want to remove\n                    last->next = temp->next;\n                    break;\n                }\n    \n                last = temp;\n                temp = temp->next;\n            }\n\n        }\n        // else there is only one node in this linked list\n        else\n        {\n            table[hash_value] = 0;\n        }\n\n        \n        exchange(d_copy,temp->d);\n        exchange(r,temp->r);\n        pool.deallocate(temp);\n\n        --hash_size;\n\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_1<domain,range,mem_manager,compare>::\n    remove_any(\n        domain& d,\n        range& r\n    )\n    {\n        unsigned long i = 0;\n\n        // while the ith bucket is empty keep looking\n        while (table[i] == 0)\n        {\n            ++i;\n        }\n\n        // remove the first node in the linked list in the ith bucket\n        node& temp = *(table[i]);\n\n        exchange(temp.d,d);\n        exchange(temp.r,r);\n        table[i] = temp.next;\n        \n        pool.deallocate(&temp);        \n\n        --hash_size;\n\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    const range* hash_table_kernel_1<domain,range,mem_manager,compare>::\n    operator[](\n        const domain& d\n    ) const\n    {        \n        node* temp = table[hash(d)&mask];\n\n        while (temp != 0)\n        {\n            // look for an element equivalent to item\n            if ( !(comp(temp->d , d) || comp(d , temp->d)) )\n                return &(temp->r);             \n\n            temp = temp->next;\n        }      \n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    range* hash_table_kernel_1<domain,range,mem_manager,compare>::\n    operator[](\n        const domain& d\n    )\n    {\n        node* temp = table[hash(d)&mask];\n\n        while (temp != 0)\n        {\n            // look for an element equivalent to item\n            if ( !(comp(temp->d , d) || comp(d , temp->d)) )\n                return &(temp->r);             \n\n            temp = temp->next;\n        }      \n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_1<domain,range,mem_manager,compare>::\n    swap(\n        hash_table_kernel_1<domain,range,mem_manager,compare>& item\n    )\n    {\n        exchange(mask,item.mask);\n        exchange(table,item.table);\n        exchange(hash_size,item.hash_size);\n        exchange(num_of_buckets,item.num_of_buckets);\n        exchange(current_bucket,item.current_bucket);\n        exchange(current_element,item.current_element);\n        exchange(at_start_,item.at_start_);\n        pool.swap(item.pool);\n        ppool.swap(item.ppool);\n        exchange(p,item.p);\n        exchange(comp,item.comp);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    bool hash_table_kernel_1<domain,range,mem_manager,compare>::\n    at_start (\n    ) const\n    {\n        return at_start_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_1<domain,range,mem_manager,compare>::\n    reset (\n    ) const\n    {\n        at_start_ = true;\n        current_element = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    bool hash_table_kernel_1<domain,range,mem_manager,compare>::\n    current_element_valid (\n    ) const\n    {\n        return (current_element != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    const map_pair<domain,range>& hash_table_kernel_1<domain,range,mem_manager,compare>::\n    element (\n    ) const\n    {\n        p.d = &(current_element->d);\n        p.r = &(current_element->r);\n        return p;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    map_pair<domain,range>& hash_table_kernel_1<domain,range,mem_manager,compare>::\n    element (\n    )\n    {\n        p.d = &(current_element->d);\n        p.r = &(current_element->r);\n        return p;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    bool hash_table_kernel_1<domain,range,mem_manager,compare>::\n    move_next (\n    ) const\n    {\n        if (at_start_)\n        {\n            at_start_ = false;\n            // if the queue is empty then there is nothing to do\n            if (hash_size == 0)\n            {\n                return false;\n            }\n            else\n            {\n                // find the first element in the hash table\n                for (current_bucket = 0; true ; ++current_bucket)\n                {\n                    if (table[current_bucket] != 0)\n                    {\n                        current_element = table[current_bucket];\n                        break;\n                    }\n                }\n                return true;\n            }\n        }\n        else\n        {\n            // if we have already enumerated every element\n            if (current_element == 0)\n            {\n                return false;\n            }\n            else\n            {\n                // find the next element if it exists\n                if (current_element->next != 0)\n                {\n                    current_element = current_element->next;\n                    return true;\n                }\n                else\n                {\n                    // find next bucket with something in it\n                    for (current_bucket+=1; current_bucket<num_of_buckets; ++current_bucket)\n                    {\n                        if (table[current_bucket] != 0)\n                        {\n                            // we just found the next bucket\n                            current_element = table[current_bucket];\n                            break;\n                        }\n                    }\n                    // make sure we actually found another nonempty bucket\n                    if (current_bucket == num_of_buckets)\n                    {\n                        // we didn't find anything\n                        current_element = 0;\n                        return false;\n                    }\n                    else\n                    {\n                        // we found another bucket\n                        return true;\n                    }\n                }\n            }\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HASH_TABLE_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_table/hash_table_kernel_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_TABLE_KERNEl_2_\n#define DLIB_HASH_TABLE_KERNEl_2_\n\n#include \"hash_table_kernel_abstract.h\"\n#include \"../general_hash/general_hash.h\"\n#include \"../algs.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../assert.h\"\n#include \"../serialize.h\"\n#include <functional>\n\nnamespace dlib \n{\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<domain>\n        >\n    class hash_table_kernel_2 : public enumerable<map_pair<domain,range> >,\n                                public pair_remover<domain,range>\n    {\n\n        /*!\n            REQUIREMENTS ON bst_base\n                bst_base is instantiated with domain and range and\n                implements binray_search_tree/binary_search_tree_kernel_abstract.h\n\n             INITIAL VALUE\n                hash_size == 0\n                table == pointer to an array of num_of_buckets bst_base objects\n                num_of_buckets == the number of buckets in the hash table\n                current_bucket == 0\n                at_start_ == true\n\n            CONVENTION\n                current_element_valid() == (current_bucket != 0)\n                element() == current_bucket->element()\n                at_start_ == at_start()\n\n                mask == num_of_buckets-1\n\n                for all integers i where &table[i] != current_bucket\n                    table[i].at_start() == true\n\n\n                hash_size = size() == the number of elements in the hash_table and\n                table == pointer to an array of num_of_buckets bst_base objects\n                num_of_buckets == the number of buckets in the hash table and\n                the elements in this hash table are stored in the bst_base objects in the\n                array table\n\n        !*/\n        \n\n \n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef compare compare_type;\n            typedef mem_manager mem_manager_type;\n\n            explicit hash_table_kernel_2(\n                unsigned long expnum\n            );\n\n            virtual ~hash_table_kernel_2(\n            )\n            { pool.deallocate_array(table); }\n\n            void clear(\n            );\n\n            unsigned long count (\n                const domain& item\n            ) const;\n\n            inline void add (\n                domain& d,\n                range& r\n            );\n\n            void destroy (\n                const domain& d\n            );\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n\n            const range* operator[] (\n                const domain& item\n            ) const;\n\n            range* operator[] (\n                const domain& item\n            );\n\n            inline void swap (\n                hash_table_kernel_2& item\n            );\n\n            // functions from the remover interface\n            void remove_any (\n                domain& d,\n                range& r\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            bool current_element_valid (\n            ) const;\n\n            inline const map_pair<domain,range>& element (\n            ) const;\n\n            inline map_pair<domain,range>& element (\n            );\n\n            bool move_next (\n            ) const;\n\n        private:\n\n            // data members   \n            typename mem_manager::template rebind<bst_base>::other pool;         \n            unsigned long mask;\n            unsigned long hash_size;\n            unsigned long num_of_buckets;\n            bst_base* table;\n            general_hash<domain> hash;\n            mutable bst_base* current_bucket;\n            mutable bool at_start_;\n            compare comp;\n\n            // restricted functions\n            hash_table_kernel_2(hash_table_kernel_2&);      \n            hash_table_kernel_2& operator=(hash_table_kernel_2&);\n\n    };\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    inline void swap (\n        hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>& a, \n        hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>& b \n    ) { a.swap(b); }\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    void deserialize (\n        hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            domain d;\n            range r;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(d,in);\n                deserialize(r,in);\n                item.add(d,r);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type hash_table_kernel_2\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    hash_table_kernel_2(\n        unsigned long expnum\n    ) :\n        hash_size(0),\n        current_bucket(0),\n        at_start_(true)\n    {\n\n        num_of_buckets = 1;\n        while (expnum != 0)\n        {\n            --expnum;\n            num_of_buckets <<= 1;            \n        }\n        mask = num_of_buckets-1;\n\n        table = pool.allocate_array(num_of_buckets);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    clear(\n    )\n    {\n        if (hash_size != 0)\n        {\n            hash_size = 0;\n            for (unsigned long i = 0; i < num_of_buckets; ++i)\n                table[i].clear();\n        }\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    unsigned long hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    size(\n    ) const\n    {\n        return hash_size;\n    }\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    unsigned long hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    count(\n        const domain& item\n    ) const\n    {\n        return table[hash(item)&mask].count(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    destroy(\n        const domain& item\n    ) \n    {\n        table[hash(item)&mask].destroy(item);\n        --hash_size;\n\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    add(\n        domain& d,\n        range& r\n    )\n    {\n        table[hash(d)&mask].add(d,r);\n        ++hash_size;\n\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    remove(\n        const domain& d,\n        domain& d_copy,\n        range& r\n    )\n    {\n        table[hash(d)&mask].remove(d,d_copy,r);\n        --hash_size;\n\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    remove_any(\n        domain& d,\n        range& r\n    )\n    {\n        unsigned long i = 0;\n        while (table[i].size() == 0)\n        {\n            ++i;\n        }\n        table[i].remove_any(d,r);\n        --hash_size;\n\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    const range* hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    operator[](\n        const domain& d\n    ) const\n    {\n        return table[hash(d)&mask][d];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    range* hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    operator[](\n        const domain& d\n    )\n    {\n        return table[hash(d)&mask][d];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    swap(\n        hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>& item\n    )\n    {\n        pool.swap(item.pool);\n        exchange(mask,item.mask);\n        exchange(hash_size,item.hash_size);\n        exchange(num_of_buckets,item.num_of_buckets);\n        exchange(table,item.table);\n        exchange(current_bucket,item.current_bucket);\n        exchange(at_start_,item.at_start_);        \n        exchange(comp,item.comp);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    bool hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    at_start (\n    ) const\n    {\n        return at_start_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    void hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    reset (\n    ) const\n    {\n        at_start_ = true;\n        if (current_bucket != 0)\n        {\n            current_bucket->reset();\n            current_bucket = 0;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    bool hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    current_element_valid (\n    ) const\n    {\n        return (current_bucket != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    const map_pair<domain,range>& hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    element (\n    ) const\n    {\n        return current_bucket->element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    map_pair<domain,range>& hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    element (\n    )\n    {\n        return current_bucket->element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager,\n        typename compare\n        >\n    bool hash_table_kernel_2<domain,range,bst_base,mem_manager,compare>::\n    move_next (\n    ) const\n    {\n        if (at_start_)\n        {\n            at_start_ = false;\n            // if the queue is empty then there is nothing to do\n            if (hash_size == 0)\n            {\n                return false;\n            }\n            else\n            {\n                // find the first element in the hash table\n                current_bucket = table;\n                while (current_bucket->size() == 0)\n                {\n                    ++current_bucket;\n                }\n\n                current_bucket->move_next();\n                \n                return true;\n            }\n        }\n        else\n        {\n            // if we have already enumerated every element\n            if (current_bucket == 0)\n            {\n                return false;\n            }\n            else\n            {\n                if (current_bucket->move_next())\n                {\n                    // if there is another element in this current bucket then use that\n                    return true;\n                }\n                else\n                {\n                    // find the next bucket\n                    bst_base* end = table + num_of_buckets;\n                    current_bucket->reset();\n                    \n                    while (true)\n                    {   \n                        ++current_bucket;\n                        // if we ran out of buckets and didn't find anything\n                        if (current_bucket == end)\n                        {\n                            current_bucket = 0;\n                            return false;\n                        }\n                        if (current_bucket->size() > 0)\n                        {\n                            current_bucket->move_next();\n                            return true;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HASH_TABLE_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_table/hash_table_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_HASH_TABLE_KERNEl_ABSTRACT_\n#ifdef DLIB_HASH_TABLE_KERNEl_ABSTRACT_\n\n#include \"../interfaces/map_pair.h\"\n#include \"../general_hash/general_hash.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include <functional>\n\nnamespace dlib \n{\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<domain>\n        >\n    class hash_table : public enumerable<map_pair<domain,range> >,\n                       public pair_remover<domain,range>\n    {\n\n        /*!\n            REQUIREMENTS ON domain\n                domain must be comparable by compare where compare is a functor compatible with std::less and\n                domain must be hashable by general_hash \n                (general_hash is defined in dlib/general_hash) and \n                domain must be swappable by a global swap() and\n                domain must have a default constructor\n\n            REQUIREMENTS ON range\n                range must be swappable by a global swap() and\n                range must have a default constructor\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap(), count(), and operator[] functions do \n                not invalidate pointers or references to internal data.\n                All other functions have no such guarantee.\n\n            INITIAL VALUE\n                size() == 0\n\n            ENUMERATION ORDER\n                No order is specified.  Only that each element will be visited once\n                and only once.\n                \n            WHAT THIS OBJECT REPRESENTS\n                hash_table contains items of type T\n\n                This object represents a data dictionary that is built on top of some \n                kind of hash table.  The number of buckets in the hash table is \n                defined by the constructor argument and is some power of 2.\n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n                    \n                NOTE:\n                    definition of equivalent:\n                    a is equivalent to b if\n                    a < b == false and\n                    b < a == false\n        !*/\n\n\n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef compare compare_type;\n            typedef mem_manager mem_manager_type;\n\n            explicit hash_table(\n                unsigned long expnum\n            );\n            /*!\n                requires\n                    - expnum < 32\n                ensures \n                    - #*this is properly initialized\n                    - #*this will use 2^expnum as a suggestion for the initial number\n                      of buckets.\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n            !*/\n\n            virtual ~hash_table(\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            unsigned long count (\n                const domain& d\n            ) const;\n            /*!\n                ensures\n                    - returns the number of elements in the domain of *this that are \n                      equivalent to d\n            !*/ \n\n            void add (\n                domain& d,\n                range& r\n            );\n            /*!\n                requires\n                    - &d != &r (i.e. d and r cannot be the same variable)\n                ensures \n                    - adds a mapping between d and r to *this\n                    - if (count(d) == 0) then\n                        - #*(*this)[d] == r\n                    - else\n                        - #(*this)[d] != 0\n                    - #d and #r have initial values for their types\n                    - #count(d) == count(d) + 1\n                    - #at_start() == true\n                    - #size() == size() + 1\n                throws \n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n                        if add() throws then it has no effect\n            !*/\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n            /*!\n                requires\n                    - (*this)[d] != 0 \n                    - &d != &r (i.e. d and r cannot be the same variable) \n                    - &d != &d_copy (i.e. d and d_copy cannot be the same variable) \n                    - &r != &d_copy (i.e. r and d_copy cannot be the same variable) \n                ensures\n                    - some element in the domain of *this that is equivalent to d has\n                      been removed and swapped into #d_copy.  Additionally, its \n                      associated range element has been removed and swapped into #r.\n                    - #count(d) = count(d) - 1\n                    - #size() == size() - 1\n                    - #at_start() == true  \n            !*/\n\n            void destroy (\n                const domain& d\n            );\n            /*!\n                requires\n                    - (*this)[d] != 0 \n                ensures\n                    - an element in the domain of *this equivalent to d has been removed.  \n                      The element in the range of *this associated with d has also been \n                      removed.\n                    - #count(d) == count(d) - 1\n                    - #size() == size() - 1\n                    - #at_start() == true  \n            !*/\n\n            const range* operator[] (\n                const domain& d\n            ) const;\n            /*!\n                ensures\n                    - if (there is an element in the domain equivalent to d) then\n                        - returns a pointer to an element in the range of *this that\n                          is associated with an element in the domain of *this \n                          equivalent to d.\n                    - else\n                        - returns 0\n            !*/\n\n            range* operator[] (\n                const domain& d\n            );\n            /*!\n                ensures\n                    - if (there is an element in the domain equivalent to d) then\n                        - returns a pointer to an element in the range of *this that\n                          is associated with an element in the domain of *this \n                          equivalent to d.\n                    - else\n                        - returns 0\n            !*/\n\n            void swap (\n                hash_table& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n        private:\n\n            // restricted functions\n            hash_table(hash_table&);      \n            hash_table& operator=(hash_table&);\n\n    };\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager\n        >\n    inline void swap (\n        hash_table<domain,range,mem_manager>& a, \n        hash_table<domain,range,mem_manager>& b \n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager\n        >\n    void deserialize (\n        hash_table<domain,range,mem_manager>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_HASH_TABLE_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_table/hash_table_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_TABLE_KERNEl_C_\n#define DLIB_HASH_TABLE_KERNEl_C_\n\n#include \"hash_table_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../assert.h\"\n\nnamespace dlib \n{\n\n    template <\n        typename ht_base        \n        >\n    class hash_table_kernel_c : public ht_base\n    {\n        typedef typename ht_base::domain_type domain;\n        typedef typename ht_base::range_type range;\n        public:\n\n            explicit hash_table_kernel_c (\n                unsigned long expnum\n            ) :\n                ht_base(expnum)\n            {\n                DLIB_CASSERT(expnum < 32,\n                    \"\\thash_table::hash_table(unsigned long)\"\n                    << \"\\n\\tyou can't set expnum >= 32\"\n                    << \"\\n\\tthis:       \" << this\n                    << \"\\n\\texpnum:     \" << expnum\n                    );                   \n            }\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n\n            void remove_any (\n                domain& d,\n                range& r\n            );\n\n            void add (\n                domain& d,\n                range& r\n            );\n\n            void destroy (\n                const domain& d\n            );\n\n            const map_pair<domain,range>& element (\n            ) const\n            {\n                DLIB_CASSERT(this->current_element_valid() == true,\n                    \"\\tconst map_pair<domain,range>& hash_table::element() const\"\n                    << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                    << \"\\n\\tthis: \" << this\n                    );\n\n                return ht_base::element();\n            }\n\n            map_pair<domain,range>& element (\n            )\n            {\n                DLIB_CASSERT(this->current_element_valid() == true,\n                    \"\\tmap_pair<domain,range>& hash_table::element()\"\n                    << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                    << \"\\n\\tthis: \" << this\n                    );\n\n                return ht_base::element();\n            }\n\n\n    };\n\n\n    template <\n        typename ht_base        \n        >\n    inline void swap (\n        hash_table_kernel_c<ht_base>& a, \n        hash_table_kernel_c<ht_base>& b \n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename ht_base        \n        >\n    void hash_table_kernel_c<ht_base>::\n    remove (\n        const domain& d,\n        domain& d_copy,\n        range& r\n    )\n    {\n        DLIB_CASSERT(this->operator[](d) != 0 &&\n                (static_cast<const void*>(&d) != static_cast<void*>(&d_copy)) &&\n                (static_cast<const void*>(&d) != static_cast<void*>(&r)) &&\n                (static_cast<const void*>(&r) != static_cast<void*>(&d_copy)),\n            \"\\tvoid binary_search_tree::remove\"\n            << \"\\n\\tthe element must be in the table for it to be removed\"\n            << \"\\n\\tthis:       \" << this\n            << \"\\n\\t&d:         \" << &d \n            << \"\\n\\t&d_copy:    \" << &d_copy\n            << \"\\n\\t&r:         \" << &r\n            );\n\n        ht_base::remove(d,d_copy,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename ht_base        \n        >\n    void hash_table_kernel_c<ht_base>::\n    add(\n        domain& d,\n        range& r\n    )\n    {\n        DLIB_CASSERT( static_cast<const void*>(&d) != static_cast<void*>(&r),\n            \"\\tvoid binary_search_tree::add\"\n            << \"\\n\\tyou can't call add() and give the same object to both arguments.\"\n            << \"\\n\\tthis:       \" << this\n            << \"\\n\\t&d:         \" << &d\n            << \"\\n\\t&r:         \" << &r\n            << \"\\n\\tsize():     \" << this->size()\n            );\n\n        ht_base::add(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename ht_base        \n        >\n    void hash_table_kernel_c<ht_base>::\n    destroy(\n        const domain& d\n    )\n    {\n        DLIB_CASSERT((*this)[d] != 0,\n            \"\\tvoid hash_table::destroy\"\n            << \"\\n\\tthe element must be in the table for it to be destroyed\"\n            << \"\\n\\tthis:  \" << this\n            << \"\\n\\t&d:    \" << &d \n            );\n\n        ht_base::destroy(d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename ht_base        \n        >\n    void hash_table_kernel_c<ht_base>::\n    remove_any(\n        domain& d,\n        range& r\n    )\n    {\n        DLIB_CASSERT(this->size() != 0 && \n            (static_cast<const void*>(&d) != static_cast<void*>(&r)),\n            \"\\tvoid hash_table::remove_any\"\n            << \"\\n\\ttable must not be empty if something is going to be removed\"\n            << \"\\n\\tthis: \" << this\n            << \"\\n\\t&d:   \" << &d\n            << \"\\n\\t&r:   \" << &r\n            );\n\n        ht_base::remove_any(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HASH_TABLE_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/hash_table.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASH_TABLe_\n#define DLIB_HASH_TABLe_\n\n\n#include \"hash_table/hash_table_kernel_1.h\"\n#include \"hash_table/hash_table_kernel_2.h\"\n#include \"hash_table/hash_table_kernel_c.h\"\n#include \"algs.h\"\n\n#include \"binary_search_tree.h\"\n#include <functional>\n\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<domain>\n        >\n    class hash_table\n    {\n        hash_table() {}\n\n        typedef typename binary_search_tree<domain,range,mem_manager,compare>::kernel_1a\n                    bst_1;\n        typedef typename binary_search_tree<domain,range,mem_manager,compare>::kernel_2a\n                    bst_2;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     hash_table_kernel_1<domain,range,mem_manager,compare>    \n                    kernel_1a;\n        typedef     hash_table_kernel_c<kernel_1a>\n                    kernel_1a_c;\n\n\n        // kernel_2a        \n        typedef     hash_table_kernel_2<domain,range,bst_1,mem_manager,compare>    \n                    kernel_2a;\n        typedef     hash_table_kernel_c<kernel_2a>\n                    kernel_2a_c;\n\n        // kernel_2b\n        typedef     hash_table_kernel_2<domain,range,bst_2,mem_manager,compare>    \n                    kernel_2b;\n        typedef     hash_table_kernel_c<kernel_2b>\n                    kernel_2b_c;\n    };\n}\n\n#endif // DLIB_HASH_TABLe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/http_client/http_client.cpp",
    "content": "\n\n#include \"../sockets.h\"\n#include \"../string.h\"\n#include \"../logger.h\"\n#include \"../sockstreambuf.h\"\n#include \"../timeout.h\"\n#include \"http_client.h\"\n#include <time.h>\n#include <stdio.h>\n#include <fstream>\n#include <sstream>\n#include <iostream>\n\nnamespace dlib\n{\n\n    typedef dlib::shared_ptr<dlib::timeout> timeout_ptr;\n\n\n#ifdef _MSC_VER\n#define BR_CASECMP strnicmp\n#else\n#define BR_CASECMP strncasecmp\n#endif\n// Default timeout after 60 seconds\n#define DEFAULT_TIMEOUT 60000\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool isXdigit( char c )\n    {\n        return  (c >= '0' && c <= '9') ||\n                (c >= 'A' && c <= 'Z') ||\n                (c >= 'a' && c <= 'z');\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::string http_client::urldecode( const std::string& s )\n    {\n        std::stringstream ss;\n\n        for ( char const * p_read = s.c_str(), * p_end = (s.c_str() + s.size()); p_read < p_end; p_read++ )\n        {\n            if ( p_read[0] == '%' && p_read+1 != p_end && p_read+2 != p_end && isXdigit(p_read[1]) && isXdigit(p_read[2]) )\n            {\n                ss << static_cast<char>((( (p_read[1] & 0xf) + ((p_read[1] >= 'A') ? 9 : 0) ) << 4 ) | ( (p_read[2] & 0xf) + ((p_read[2] >= 'A') ? 9 : 0) ));\n                p_read += 2;\n            }\n            else if ( p_read[0] == '+' )\n            {\n                // Undo the encoding that replaces spaces with plus signs.\n                ss << ' ';\n            }\n            else\n            {\n                ss << p_read[0];\n            }\n        }\n\n        return ss.str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n//! \\return modified string ``s'' with spaces trimmed from left\n    inline std::string& triml(std::string& s)\n    {\n        int pos(0);\n        for ( ; s[pos] == ' ' || s[pos] == '\\t' || s[pos] == '\\r' || s[pos] == '\\n' ; ++pos );\n        s.erase(0, pos);\n        return s;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n//! \\return modified string ``s'' with spaces trimmed from right\n    inline std::string& trimr(std::string& s)\n    {\n        int pos(s.size());\n        for ( ; pos && (s[pos-1] == ' ' || s[pos-1] == '\\t' || s[pos-1] == '\\r' || s[pos-1] == '\\n') ; --pos );\n        s.erase(pos, s.size()-pos);\n        return s;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n//! \\return modified string ``s'' with spaces trimmed from edges\n    inline std::string& trim(std::string& s)\n    {\n        return triml(trimr(s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    http_client::\n    http_client(\n    ) : \n        http_return(0),\n        timeout(DEFAULT_TIMEOUT),\n        OnDownload(0)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::string http_client::get_header(const std::string& header_name) const\n    {\n        stringmap::const_iterator ci = headers.find(header_name);\n        return ci != headers.end() ? ci->second : std::string();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void http_client::set_header(const std::string& header_name, long header_value)\n    {\n        char buf[21] = { 0 };\n#ifdef __WXMSW__\n        ::ltoa(header_value, buf, 10);\n#else\n        sprintf(buf, \"%ld\", header_value);\n#endif\n        set_header(header_name, buf);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void http_client::set_header(const std::string& header_name, const std::string& header_value)\n    {\n        headers[header_name] = header_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool http_client::is_header_set(const std::string& header_name) const\n    {\n        stringmap::const_iterator ci = headers.find(header_name);\n        return ci != headers.end() && !ci->second.empty();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void http_client::remove_header(const std::string& header_name)\n    {\n        headers.erase(header_name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void http_client::set_cookie(const std::string& cookie_name, long cookie_value)\n    {\n        char buf[21] = { 0 };\n#ifdef __WXMSW__\n        ::ltoa(cookie_value, buf, 10);\n#else\n        sprintf(buf, \"%ld\", cookie_value);\n#endif\n        set_cookie(cookie_name, buf);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void http_client::set_cookie(const std::string& cookie_name, const std::string& cookie_value)\n    {\n        cookies[cookie_name] = cookie_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void http_client::remove_cookie(const std::string& cookie_name)\n    {\n        cookies.erase(cookie_name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// POST\n    const std::string& http_client::post_url (const std::string& url, const string_to_stringmap& postvars, const string_to_stringmap& filenames)\n    {\n        std::string CT;\n        std::string postBody = build_post(CT, postvars, filenames);\n        set_header(\"Content-Type\", CT);\n        set_header(\"Content-Length\", static_cast<long>(postBody.size()));\n\n        grab_url(url, \"POST\", postBody);\n\n        return returned_body;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string& http_client::post_url (const std::string& url, const std::string& postbuffer)\n    {\n        if ( !is_header_set(\"Content-Type\") ) // Maybe they just forgot it?\n            set_header(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\n        set_header(\"Content-Length\", static_cast<long>(postbuffer.size()));\n\n        grab_url(url, \"POST\", postbuffer);\n\n        return returned_body;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::string http_client::get_random_string( size_t length ) const\n    {\n        static bool has_seeded(false);\n        static std::string allowed_chars(\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\");\n\n        if ( !has_seeded )\n        {\n            has_seeded = true;\n            ::srand( static_cast<unsigned int>(::time(NULL)) );\n        }\n\n        std::string retVal; retVal.reserve(length);\n        while ( retVal.size() < length )\n        {\n            retVal += allowed_chars[(rand() % allowed_chars.size())];\n        }\n\n        return retVal;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// static\n    std::string http_client::urlencode(const std::string& in, bool post_encode)\n    {\n        static std::string allowed_chars(\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\");\n\n        std::stringstream ss;\n        ss << std::hex;\n        for (std::string::const_iterator ci = in.begin(); ci != in.end(); ++ci)\n        {\n            if ( allowed_chars.find(*ci) != std::string::npos )\n            {\n                ss << *ci;\n            }\n            else if ( post_encode && *ci == ' ' )\n            {\n                ss << '+';\n            }\n            else\n            {\n                ss << '%' << std::setfill('0') << std::setw(2) << std::right << static_cast<int>(*ci);\n            }\n        }\n\n        return ss.str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::string http_client::get_basename( const std::string& filename ) const\n    {\n        std::string::size_type pos = filename.find_last_of(\"\\\\/\");\n        if ( pos == std::string::npos )\n            return filename;\n        else\n            return filename.substr(pos+1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool http_client::parse_url(\n        const std::string& url,\n        std::string& scheme,\n        std::string& user,\n        std::string& pass,\n        std::string& host,\n        short& port,\n        std::string& path\n    ) const\n    {\n        scheme.clear();\n        user.clear();\n        pass.clear();\n        host.clear();\n        path.clear();\n        port = 0;\n\n        // Find scheme\n        std::string::size_type pos_scheme = url.find(\"://\");\n        if ( pos_scheme == std::string::npos )\n        {\n            pos_scheme = 0;\n        }\n        else\n        {\n            scheme = strtolower(url.substr(0, pos_scheme));\n            pos_scheme += 3;\n        }\n\n        std::string::size_type pos_path = url.find('/', pos_scheme);\n        if ( pos_path == std::string::npos )\n        {\n            host = url.substr(pos_scheme);\n        }\n        else\n        {\n            host = url.substr(pos_scheme, pos_path - pos_scheme);\n            path = url.substr(pos_path);\n        }\n\n        std::string::size_type pos_at = host.find('@');\n        if ( pos_at != std::string::npos )\n        {\n            std::string::size_type pos_dp = host.find(':');\n            if ( pos_dp != std::string::npos && pos_dp < pos_at )\n            {\n                user = host.substr(0, pos_dp);\n                pass = host.substr(pos_dp+1, pos_at-pos_dp-1);\n            }\n            else\n            {\n                user = host.substr(0, pos_at);\n            }\n            host = host.substr(pos_at+1);\n        }\n\n        std::string::size_type pos_dp = host.find(':');\n        if ( pos_dp != std::string::npos )\n        {\n            port = dlib::string_cast<short>(host.substr(pos_dp+1));\n            host = host.substr(0, pos_dp);\n        }\n\n        host = strtolower(host);\n\n        if ( port == 0 )\n        {\n            if ( scheme == \"http\" )\n                port = 80;\n            else if ( scheme == \"ftp\" )\n                port = 21;\n            else if ( scheme == \"https\" )\n                port = 443;\n        }\n\n        return !host.empty();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::string http_client::strtolower(const std::string& in) const\n    {\n        std::string retVal = in;\n\n        for (std::string::iterator ii = retVal.begin(); ii != retVal.end(); ++ii)\n        {\n            *ii = ::tolower(*ii);\n        }\n\n        return retVal;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::string http_client::strtoupper(const std::string& in) const\n    {\n        std::string retVal = in;\n\n        for (std::string::iterator ii = retVal.begin(); ii != retVal.end(); ++ii)\n        {\n            *ii = ::toupper(*ii);\n        }\n\n        return retVal;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// GET\n    const std::string& http_client::get_url(const std::string& url)\n    {\n        std::string CT = get_header(\"Content-Type\");\n\n        // You do a GET with a POST header??\n        if ( CT == \"application/x-www-form-urlencoded\" || CT == \"multipart/form-data\" )\n            remove_header(\"Content-Type\");\n\n        grab_url(url);\n\n        return returned_body;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::string http_client::build_post(std::string& content_type, const string_to_stringmap& postvars, const string_to_stringmap& filenames_in) const\n    {\n        if ( postvars.empty() && filenames_in.empty() )\n            return std::string();\n\n        string_to_stringmap filenames = filenames_in;\n\n        // sanitize the files\n        if ( !filenames.empty() )\n        {\n            string_to_stringmap::iterator var_names = filenames.begin();\n            while (var_names != filenames.end())\n            {\n                stringmap::iterator fnames = var_names->second.begin();\n\n                while( fnames != var_names->second.end() )\n                {\n                    FILE *fp = ::fopen(fnames->second.c_str(), \"rb\");\n                    if ( fp == NULL )\n                    {\n                        stringmap::iterator old_one = fnames++;\n                        var_names->second.erase(old_one);\n                    }\n                    else\n                    {\n                        fclose(fp);\n                        ++fnames;\n                    }\n                }\n\n                if ( fnames->second.empty() )\n                {\n                    string_to_stringmap::iterator old_one = var_names++;\n                    filenames.erase(old_one);\n                }\n                else\n                {\n                    ++var_names;\n                }\n            }\n        }\n\n        content_type = !filenames.empty() ? \"multipart/form-data\" : \"application/x-www-form-urlencoded\";\n        std::stringstream postBody;\n        if ( !filenames.empty() )\n        {\n            std::string mime_boundary = get_random_string(32);\n\n            // First add the form vars\n            for (string_to_stringmap::const_iterator ci = postvars.begin(); ci != postvars.end(); ++ci)\n            {\n                for (stringmap::const_iterator si = ci->second.begin(); si != ci->second.end(); ++si)\n                {\n                    postBody << \"--\" << mime_boundary << \"\\r\\n\"\n                        \"Content-Disposition: form-data; name=\\\"\" << ci->first << \"\\\"\\r\\n\\r\\n\"\n                        << si->second << \"\\r\\n\";\n                }\n            }\n\n            // Then add the files\n            for (string_to_stringmap::const_iterator ci = filenames.begin(); ci != filenames.end(); ++ci)\n            {\n                for (stringmap::const_iterator si = ci->second.begin(); si != ci->second.end(); ++si)\n                {\n                    std::ifstream in(si->second.c_str());\n                    postBody << \"--\" << mime_boundary << \"\\r\\n\"\n                        \"Content-Disposition: form-data; name=\\\"\" << ci->first << \"\\\"; filename=\\\"\" << get_basename(si->second) << \"\\\"\\r\\n\\r\\n\"\n                        << in << \"\\r\\n\";\n                }\n            }\n\n            postBody << \"--\" << mime_boundary << \"--\\r\\n\";\n        }\n        else\n        {\n            // No files...\n            for (string_to_stringmap::const_iterator ci = postvars.begin(); ci != postvars.end(); ++ci)\n            {\n                for (stringmap::const_iterator si = ci->second.begin(); si != ci->second.end(); ++si)\n                {\n                    postBody << urlencode(ci->first) << '=' << urlencode(si->second) << '&';\n                }\n            }\n\n            // read the last '&'\n            char c;\n            postBody.read(&c, 1);\n        }\n\n        return postBody.str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool http_client::grab_url(const std::string& url, const std::string& method, const std::string& post_body)\n    {\n        error_field.clear();\n        returned_headers.clear();\n        http_return = 0;\n        returned_body.clear();\n\n        std::string to_use_method = strtoupper(method);\n\n        std::string scheme, user, pass, host, path;\n        short port;\n        if ( !parse_url(url, scheme, user, pass, host, port, path) )\n        {\n            error_field = \"Couldn't parse the URL!\";\n            return false;\n        }\n\n        // Build request\n        std::stringstream ret;\n        ret << to_use_method << ' ' << path << \" HTTP/1.0\\r\\n\"\n            << \"Host: \" << host;\n        if (port != 80 && port != 443) ret << ':' << port;\n        ret << \"\\r\\n\";\n\n        bool content_length_said = false;\n\n        set_header(\"Connection\", \"Close\");\n        for (stringmap::iterator ci = headers.begin(); ci != headers.end(); ++ci)\n        {\n            std::string head = strtolower(ci->first);\n\n            if ( head == \"content-length\" )\n            {\n                content_length_said = true;\n            }\n\n            ret << ci->first << ':' << ' ' << ci->second << \"\\r\\n\";\n        }\n\n        if ( !content_length_said && to_use_method != \"GET\" )\n            ret << \"Content-Length: \" << static_cast<unsigned int>(post_body.size()) << \"\\r\\n\";\n\n        std::stringstream cookie_ss;\n        for (stringmap::iterator ci = cookies.begin(); ci != cookies.end(); ++ci)\n        {\n            std::string var = ci->first ; trim(var);\n            std::string val = ci->second; trim(val);\n\n            if ( val.empty() || var.empty() )\n                continue;\n\n            if ( !cookie_ss.str().empty() )\n                cookie_ss << ';' << ' ';\n\n            cookie_ss << urlencode(var) << '=' << urlencode(val);\n        }\n\n        if ( !cookie_ss.str().empty() )\n            ret << \"Cookie: \" << cookie_ss.str() << \"\\r\\n\";\n\n        ret << \"\\r\\n\";\n        ret << post_body;\n\n        std::string request_build = ret.str();\n\n        std::stringstream ss;\n        {\n            dlib::connection * conn(0);\n            try\n            {\n                conn = dlib::connect(host, port);\n            }\n            catch (const dlib::socket_error& e)\n            {\n                error_field = e.what();\n                return false;\n            }\n\n            // Implement a timeout\n            timeout_ptr t;\n            if ( timeout > 0 )\n                t.reset( new dlib::timeout(*conn, &dlib::connection::shutdown, timeout) );\n\n            // Write our request\n            conn->write(request_build.c_str(), static_cast<long>(request_build.size()));\n\n            t.reset();\n\n            // And read the response\n            char buf[512];\n            long bytes_read(0), bytes_total(0);\n            bool read_headers(true);\n\n            if ( timeout > 0 )\n                t.reset( new dlib::timeout(*conn, &dlib::connection::shutdown, timeout) );\n\n            while ( (bytes_read = conn->read(buf, 512)) > 0 )\n            {\n                ss.write(buf, bytes_read);\n\n                // Incremental read headers\n                if ( read_headers )\n                {\n                    std::string body_with_headers = ss.str();\n                    std::string::size_type ctr(0);\n\n                    while ( true )\n                    {\n                        std::string::size_type pos = body_with_headers.find(\"\\r\\n\", ctr);\n                        if ( pos == std::string::npos )\n                        {\n                            // This is our last position of \"\\r\\n\"\n                            ss.str(\"\");\n                            ss.write( body_with_headers.substr(ctr).c_str(), body_with_headers.size() - ctr );\n                            break;\n                        }\n\n                        std::string header = body_with_headers.substr(ctr, pos-ctr);\n                        if ( header.empty() )\n                        {\n                            // Ok, we're done reading the headers\n                            read_headers = false;\n                            // What follows now is the body\n                            ss.str(\"\");\n                            ss.write( body_with_headers.substr(pos + 2).c_str(), body_with_headers.size() - pos - 2 );\n                            break;\n                        }\n                        ctr = pos + 2;\n\n                        if ( returned_headers.empty() )\n                        {\n                            if (\n                                header[0] == 'H' &&\n                                header[1] == 'T' &&\n                                header[2] == 'T' &&\n                                header[3] == 'P' &&\n                                header[4] == '/' &&\n                                (header[5] >= '0' && header[5] <= '9') &&\n                                header[6] == '.' &&\n                                (header[7] >= '0' && header[7] <= '9') &&\n                                header[8] == ' '\n                            )\n                            {\n                                http_return = (header[9 ] - '0') * 100 +\n                                    (header[10] - '0') * 10 +\n                                    (header[11] - '0');\n                                continue;\n                            }\n                        }\n\n                        std::string::size_type pos_dp = header.find_first_of(':');\n                        std::string header_name, header_value;\n                        if ( pos_dp == std::string::npos )\n                        {\n                            // **TODO** what should I do here??\n                            header_name = header;\n                        }\n                        else\n                        {\n                            header_name  = trim(header.substr(0, pos_dp));\n                            header_value = trim(header.substr(pos_dp+1));\n                        }\n\n                        returned_headers[ header_name ].push_back(header_value);\n\n                        if ( BR_CASECMP(header_name.c_str(), \"Content-Length\", 14) == 0 )\n                        {\n                            bytes_total = atol( header_value.c_str() );\n                        }\n                        else if ( BR_CASECMP(header_name.c_str(), \"Set-Cookie\", 10) == 0 )\n                        {\n                            std::string::size_type cur_pos(0), pos_pk, pos_is;\n                            std::string work, var, val;\n                            for ( cur_pos = 0; cur_pos < header_value.size(); cur_pos++ )\n                            {\n                                pos_pk = header_value.find(';', cur_pos);\n                                work   = trim( header_value.substr(cur_pos, pos_pk - cur_pos) );\n\n                                pos_is = work.find('=');\n                                if ( pos_is != std::string::npos )\n                                { // Hmmm? what in the else case?\n                                    var = trim( http_client::urldecode( work.substr(0, pos_is) ) );\n                                    val = trim( http_client::urldecode( work.substr(pos_is + 1) ) );\n\n                                    if ( var != \"expires\" && var != \"domain\" && var != \"path\" )\n                                        set_cookie( var, val );\n                                }\n                                cur_pos = pos_pk == std::string::npos ? pos_pk - 1 : pos_pk;\n                            }\n                        } // Set-Cookie?\n\n                    } // while (true)\n                } // read_headers?\n\n                // Call the OnDownload function if it's set\n                if ( OnDownload && !read_headers )\n                {\n                    if ( (*OnDownload)(static_cast<long>(ss.tellp()), bytes_total, user_info) == false )\n                    {\n                        t.reset();\n                        break;\n                    }\n                }\n\n                if ( bytes_total != 0 && static_cast<long>(ss.tellp()) == bytes_total )\n                {\n                    t.reset();\n                    break;\n                }\n\n                if ( timeout > 0 )\n                    t.reset( new dlib::timeout(*conn, &dlib::connection::shutdown, timeout) );\n            } // while still data to read\n\n            t.reset();\n\n            delete conn;\n\n\n            switch ( bytes_read )\n            {\n                case dlib::TIMEOUT:      error_field = \"Timeout\";     return false; break;\n                case dlib::WOULDBLOCK:   error_field = \"Would block\"; return false; break;\n                case dlib::OTHER_ERROR:  error_field = \"Other error\"; return false; break;\n                case dlib::SHUTDOWN:     error_field = \"Timeout\";     return false; break;\n                case dlib::PORTINUSE:    error_field = \"Port in use\"; return false; break;\n            }\n        }\n\n        returned_body = ss.str();\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void http_client::clear()\n    {\n        headers.clear();\n        cookies.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void http_client::prepare_for_next_url( )\n    {\n        remove_header(\"Content-Type\");\n        remove_header(\"Content-Length\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/http_client/http_client.h",
    "content": "#ifndef DLIB_BROWSERhH\n#define DLIB_BROWSERhH\n\n\n#include <map>\n#include <string>\n#include <vector>\n#include \"http_client_abstract.h\"\n\n\n// Default timeout after 60 seconds\n#define DEFAULT_TIMEOUT 60000\n\nnamespace dlib\n{\n\n    // Function which is called when there is data available.\n    //   Return false to stop the download process...\n    typedef bool (*fnOnDownload)(long already_downloaded, long total_to_download, void * userInfo);\n\n\n    class http_client\n    {\n    public:\n        http_client();\n\n        typedef std::map< std::string, std::string > stringmap;\n        typedef std::map< std::string, stringmap   > string_to_stringmap;\n        typedef std::map< std::string, std::vector<std::string> > string_to_stringvector;\n\n        // Header functions\n        void        set_header(const std::string& header_name, const std::string& header_value);\n        void        set_header(const std::string& header_name, long header_value);\n        std::string get_header(const std::string& header_name) const;\n        void        remove_header(const std::string& header_name);\n        bool        is_header_set(const std::string& header_name) const;\n\n        // This function will clear out all cookies & headers set until now\n        void clear();\n        // This function will clear out the Content-Type header\n        void prepare_for_next_url();\n\n        void set_callback_function( fnOnDownload od, void * _user_info ) { OnDownload = od; user_info = _user_info; }\n\n        void set_cookie(const std::string& cookie_name, const std::string& cookie_value);\n        void set_cookie(const std::string& cookie_name, long cookie_value);\n        void remove_cookie(const std::string& cookie_name);\n\n        void set_user_agent(const std::string& new_agent) { set_header(\"User-Agent\", new_agent); }\n\n\n        void set_timeout( unsigned int milliseconds = DEFAULT_TIMEOUT ) { timeout = milliseconds; }\n\n\n        string_to_stringvector get_returned_headers() const { return returned_headers; }\n        short                  get_http_return     () const { return http_return; }\n        const std::string&     get_body            () const { return returned_body; }\n\n        // POST\n        const std::string& post_url (const std::string& url, const string_to_stringmap& postvars, const string_to_stringmap& filenames = string_to_stringmap());\n        const std::string& post_url (const std::string& url, const std::string& postbuffer);\n        // GET\n        const std::string& get_url  (const std::string& url);\n\n        bool has_error( ) const { return !error_field.empty(); }\n        const std::string& get_error( ) const { return error_field; }\n\n        static std::string urlencode(const std::string& in, bool post_encode = false);\n        static std::string urldecode(const std::string& in);\n    private:\n        bool grab_url(const std::string& url, const std::string& method = \"GET\", const std::string& post_body = \"\");\n        std::string build_post(std::string& content_type, const string_to_stringmap& postvars, const string_to_stringmap& filenames) const;\n\n        std::string get_random_string( size_t length = 32 ) const;\n        std::string get_basename( const std::string& filename ) const;\n        std::string strtolower(const std::string& in) const;\n        std::string strtoupper(const std::string& in) const;\n\n        bool parse_url(const std::string& url, std::string& scheme, std::string& user, std::string& pass, std::string& host, short& port, std::string& path) const;\n\n        stringmap headers;\n        stringmap cookies;\n\n        string_to_stringvector returned_headers;\n        short http_return;\n        std::string returned_body, error_field;\n\n        unsigned int timeout;\n\n        fnOnDownload OnDownload;\n        void *       user_info;\n    };\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"http_client.cpp\"\n#endif\n\n#endif // DLIB_BROWSERhH\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/http_client/http_client_abstract.h",
    "content": "#undef DLIB_BROWSER_ABSTRACh_\n#ifdef DLIB_BROWSER_ABSTRACh_\n\n\n\nnamespace dlib\n{\n\n    // Function which is called when there is data available.\n    //   Return false to stop the download process...\n    typedef bool (*fnOnDownload)(long already_downloaded, long total_to_download, void * userInfo);\n\n\n// ----------------------------------------------------------------------------------------\n/*\nTODO:\n- Timed cookie support\n- POSTing files: check it!\n- Don't timeout when still downloading!\n*/\n// ----------------------------------------------------------------------------------------\n\n\n    class Browser\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a possibility for the end user to download webpages (HTTP/1.0)\n                from the internet like a normal webbrowser would do.\n        !*/\n\n    public:\n\n        Browser(\n        );\n        /*!\n            Constructor\n        !*/\n\n        void set_header(\n            const std::string& header_name,\n            const std::string& header_value\n        );\n        /*!\n            Set a header to a certain value\n            Example: set_header(\"User-Agent\", \"Internet Explorer\")\n        !*/\n\n\n        void set_header(\n            const std::string& header_name,\n            long header_value\n        );\n        /*!\n            Set a header to a certain number\n            Example: set_header(\"Content-Length\", 1234)\n        !*/\n\n        std::string get_header(\n            const std::string& header_name\n        ) const;\n        /*!\n            Get the value of the header or an empty string when it's not set.\n            Example: get_header(\"Content-Length\") would return \"1234\"\n        !*/\n\n        void remove_header(\n            const std::string& header_name\n        );\n        /*!\n            Removes a certain header\n        !*/\n\n        bool is_header_set(\n            const std::string& header_name\n        ) const;\n        /*!\n            Returns when a header is set and is not empty\n        !*/\n\n        void set_user_agent(\n            const std::string& new_agent\n        ) { set_header(\"User-Agent\", new_agent); }\n        /*!\n            Convenience function for setting a user agent\n        !*/\n\n        void clear(\n        );\n        /*!\n            Clear out all cookies & headers set until now\n        !*/\n\n        void prepare_for_next_url(\n        );\n        /*!\n            Clear out any header and/or cookie which would obstruct getting a next page.\n            At this moment this is cleared:\n                - the Content-Type header\n        !*/\n\n        void set_callback_function( \n            fnOnDownload od, \n            void * _user_info \n        );\n        /*!\n            Set a callback function for one of the following events:\n            - OnDownload: this will tell you how much is downloaded and how much will need to be downloaded\n        !*/\n\n        void set_cookie(\n            const std::string& cookie_name, \n            const std::string& cookie_value\n        );\n        /*!\n            Set a cookie\n        !*/\n\n        void set_cookie(\n            const std::string& cookie_name, \n            long cookie_value\n        );\n        /*!\n            Set a cookie\n        !*/\n\n        void remove_cookie(\n            const std::string& cookie_name\n        );\n        /*!\n            Remove a cookie if it's set\n        !*/\n\n        void set_timeout( \n            unsigned int milliseconds  \n        );\n        /*!\n            Set the maximum time how long a request can take. Setting this to 0 disables\n            this behavior.\n        !*/\n\n        string_to_stringvector get_returned_headers(\n        ) const; \n        /*!\n            Returns all the headers which are returned in the download of the webpage.\n        !*/\n\n        short get_http_return (\n        ) const;\n        /*!\n            Retrieves the HTTP return code.\n        !*/\n\n        const std::string& get_body (\n        ) const; \n        /*!\n            Retrieves the HTTP body.\n        !*/\n\n        const std::string& post_url (\n            const std::string& url, \n            const string_to_stringmap& postvars,\n            const string_to_stringmap& filenames = string_to_stringmap()\n        );\n        /*!\n            POST an url to the internet.\n            You can pass the post variables as well as a list of filenames\n        !*/\n\n        const std::string& post_url (\n            const std::string& url, \n            const std::string& postbuffer\n        );\n        /*!\n            POST an url to the internet.\n            In this function you have constructed the POST string yourselves\n        !*/\n\n        const std::string& get_url (\n            const std::string& url\n        );\n        /*!\n            GET an url from the internet.\n        !*/\n\n        bool has_error( \n        ) const;\n        /*!\n            Has there happened an error?\n        !*/\n\n        const std::string& get_error( \n        ) const;\n        /*!\n            Get the error explanation\n        !*/\n\n        static std::string urlencode(\n            const std::string& in, \n            bool post_encode = false\n        );\n        /*!\n            Convenience function to URLencode a string\n        !*/\n\n        static std::string urldecode(\n            const std::string& in\n        );\n        /*!\n            Convenience function to URLdecode a string\n        !*/\n\n    };\n\n}\n\n#endif // DLIB_BROWSER_ABSTRACh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_io.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGe_IO_ \n#define DLIB_IMAGe_IO_\n\n#include \"image_loader/image_loader.h\"\n#include \"image_loader/png_loader.h\"\n#include \"image_loader/jpeg_loader.h\"\n#include \"image_loader/load_image.h\"\n#include \"image_saver/image_saver.h\"\n#include \"image_saver/save_png.h\"\n\n#endif // DLIB_IMAGe_IO_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/binned_vector_feature_image.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINNED_VECTOR_IMAGE_FEATUrES_Hh_\n#define DLIB_BINNED_VECTOR_IMAGE_FEATUrES_Hh_\n\n#include \"../lsh/projection_hash.h\"\n#include \"binned_vector_feature_image_abstract.h\"\n#include <vector>\n#include \"../algs.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type_ = projection_hash\n        >\n    class binned_vector_feature_image : noncopyable\n    {\n\n    public:\n        typedef feature_extractor feature_extractor_type;\n        typedef hash_function_type_ hash_function_type;\n\n        typedef std::vector<std::pair<unsigned int,double> > descriptor_type;\n\n        binned_vector_feature_image (\n        ); \n\n        void clear (\n        );\n\n        void set_hash (\n            const hash_function_type& hash_\n        );\n\n        const hash_function_type& get_hash (\n        ) const;\n\n        void copy_configuration (\n            const feature_extractor& item\n        );\n\n        void copy_configuration (\n            const binned_vector_feature_image& item\n        );\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        );\n\n        inline unsigned long size (\n        ) const;\n\n        inline long nr (\n        ) const;\n\n        inline long nc (\n        ) const;\n\n        inline long get_num_dimensions (\n        ) const;\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const;\n\n        inline const rectangle get_block_rect (\n            long row,\n            long col\n        ) const;\n\n        inline const point image_to_feat_space (\n            const point& p\n        ) const;\n\n        inline const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const;\n\n        inline const point feat_to_image_space (\n            const point& p\n        ) const;\n\n        inline const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const;\n\n        template <typename T>\n        friend void serialize (\n            const binned_vector_feature_image<T>& item,\n            std::ostream& out\n        );\n\n        template <typename T>\n        friend void deserialize (\n            binned_vector_feature_image<T>& item,\n            std::istream& in \n        );\n\n    private:\n\n        array2d<descriptor_type> feats;\n        feature_extractor fe;\n        hash_function_type phash;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const binned_vector_feature_image<T>& item,\n        std::ostream& out\n    )\n    {\n        int version = 1;\n        serialize(version, out);\n        serialize(item.feats, out);\n        serialize(item.fe, out);\n        serialize(item.phash, out);\n    }\n\n    template <typename T>\n    void deserialize (\n        binned_vector_feature_image<T>& item,\n        std::istream& in \n    )\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 1)\n            throw dlib::serialization_error(\"Unexpected version found while deserializing dlib::binned_vector_feature_image\");\n        deserialize(item.feats, in);\n        deserialize(item.fe, in);\n        deserialize(item.phash, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                        binned_vector_feature_image member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    binned_vector_feature_image<feature_extractor,hash_function_type>::\n    binned_vector_feature_image (\n    )  \n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void binned_vector_feature_image<feature_extractor,hash_function_type>::\n    clear (\n    )\n    {\n        fe.clear();\n        phash = hash_function_type();\n        feats.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void binned_vector_feature_image<feature_extractor,hash_function_type>::\n    set_hash (\n        const hash_function_type& hash_\n    )\n    {\n        phash = hash_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const hash_function_type& binned_vector_feature_image<feature_extractor,hash_function_type>::\n    get_hash (\n    ) const\n    {\n        return phash;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void binned_vector_feature_image<feature_extractor,hash_function_type>::\n    copy_configuration (\n        const feature_extractor& item\n    )\n    {\n        fe.copy_configuration(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void binned_vector_feature_image<feature_extractor,hash_function_type>::\n    copy_configuration (\n        const binned_vector_feature_image& item\n    )\n    {\n        fe.copy_configuration(item.fe);\n        phash = item.phash;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    template <\n        typename image_type\n        >\n    void binned_vector_feature_image<feature_extractor,hash_function_type>::\n    load (\n        const image_type& img\n    )\n    {\n        fe.load(img);\n\n        if (fe.size() != 0)\n        {\n            feats.set_size(fe.nr(), fe.nc());\n            for (long r = 0; r < feats.nr(); ++r)\n            {\n                for (long c = 0; c < feats.nc(); ++c)\n                {\n                    feats[r][c].clear();\n                    feats[r][c].reserve(fe.get_num_dimensions()+1);\n                    const typename feature_extractor::descriptor_type& des = fe(r,c);\n                    const unsigned long idx = phash(des);\n                    const unsigned long offset = idx*(fe.get_num_dimensions()+1);\n\n                    for (long i = 0; i < des.size(); ++i)\n                    {\n                        feats[r][c].push_back(std::make_pair(offset + i, des(i)));\n                    }\n                    feats[r][c].push_back(std::make_pair(offset + des.size(), 1.0));\n                }\n            }\n        }\n        else\n        {\n            feats.set_size(0,0);\n        }\n\n        fe.unload();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    unsigned long binned_vector_feature_image<feature_extractor,hash_function_type>::\n    size (\n    ) const\n    {\n        return feats.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    long binned_vector_feature_image<feature_extractor,hash_function_type>::\n    nr (\n    ) const\n    {\n        return feats.nr();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    long binned_vector_feature_image<feature_extractor,hash_function_type>::\n    nc (\n    ) const\n    {\n        return feats.nc();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    long binned_vector_feature_image<feature_extractor,hash_function_type>::\n    get_num_dimensions (\n    ) const\n    {\n        return phash.num_hash_bins()*(fe.get_num_dimensions()+1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const std::vector<std::pair<unsigned int,double> >& binned_vector_feature_image<feature_extractor,hash_function_type>::\n    operator() (\n        long row,\n        long col\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 <= row && row < nr() &&\n                    0 <= col && col < nc(),\n            \"\\t descriptor_type binned_vector_feature_image::operator(row,col)\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t row:  \" << row\n            << \"\\n\\t col:  \" << col \n            << \"\\n\\t nr(): \" << nr()\n            << \"\\n\\t nc(): \" << nc()\n            << \"\\n\\t this: \" << this\n            );\n\n        return feats[row][col];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const rectangle binned_vector_feature_image<feature_extractor,hash_function_type>::\n    get_block_rect (\n        long row,\n        long col\n    ) const\n    {\n        return fe.get_block_rect(row,col);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const point binned_vector_feature_image<feature_extractor,hash_function_type>::\n    image_to_feat_space (\n        const point& p\n    ) const\n    {\n        return fe.image_to_feat_space(p);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const rectangle binned_vector_feature_image<feature_extractor,hash_function_type>::\n    image_to_feat_space (\n        const rectangle& rect\n    ) const\n    {\n        return fe.image_to_feat_space(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const point binned_vector_feature_image<feature_extractor,hash_function_type>::\n    feat_to_image_space (\n        const point& p\n    ) const\n    {\n        return fe.feat_to_image_space(p);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const rectangle binned_vector_feature_image<feature_extractor,hash_function_type>::\n    feat_to_image_space (\n        const rectangle& rect\n    ) const \n    {\n        return fe.feat_to_image_space(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BINNED_VECTOR_IMAGE_FEATUrES_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/binned_vector_feature_image_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BINNED_VECTOR_FEATUrES_ABSTRACT_Hh_\n#ifdef DLIB_BINNED_VECTOR_FEATUrES_ABSTRACT_Hh_\n\n#include \"../lsh/projection_hash_abstract.h\"\n#include <vector>\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type_ = projection_hash\n        >\n    class binned_vector_feature_image : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor \n                - must be an object with an interface compatible with dlib::hog_image\n\n            REQUIREMENTS ON hash_function_type_ \n                - must be an object with an interface compatible with projection_hash \n\n            INITIAL VALUE\n                 - size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for performing image feature extraction.  In\n                particular, it wraps another image feature extractor and converts the\n                wrapped image feature vectors into a high dimensional sparse vector.  For\n                example, if the lower level feature extractor outputs the vector [3,4,5]\n                and this vector is hashed into the second bin of four bins then the output\n                sparse vector is:\n                    [0,0,0,0, 3,4,5,1, 0,0,0,0, 0,0,0,0]. \n                That is, the output vector has a dimensionality that is equal to the number\n                of hash bins times the dimensionality of the lower level vector plus one.\n                The value in the extra dimension concatenated onto the end of the vector is\n                always a constant value of of 1 and serves as a bias value.  This means\n                that, if there are N hash bins, these vectors are capable of representing N\n                different linear functions, each operating on the vectors that fall into\n                their corresponding hash bin.\n\n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be\n                protected by a mutex lock except for the case where you are copying the\n                configuration (via copy_configuration()) of a binned_vector_feature_image\n                object to many other threads.  In this case, it is safe to copy the\n                configuration of a shared object so long as no other operations are\n                performed on it.\n\n\n            NOTATION \n                let BASE_FE denote the base feature_extractor object contained inside the\n                binned_vector_feature_image.\n        !*/\n\n    public:\n\n        typedef feature_extractor feature_extractor_type;\n        typedef hash_function_type_ hash_function_type;\n        typedef std::vector<std::pair<unsigned int,double> > descriptor_type;\n\n        binned_vector_feature_image (\n        ); \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - this object will have its initial value\n        !*/\n\n        void set_hash (\n            const hash_function_type& hash\n        );\n        /*!\n            ensures\n                - #get_hash() == hash\n        !*/\n\n        const hash_function_type& get_hash (\n        ) const;\n        /*!\n            ensures\n                - returns the hash function used by this object to hash\n                  base feature vectors into integers.\n        !*/\n\n        void copy_configuration (\n            const feature_extractor& item\n        );\n        /*!\n            ensures\n                - performs BASE_FE.copy_configuration(item)\n        !*/\n\n        void copy_configuration (\n            const binned_vector_feature_image& item\n        );\n        /*!\n            ensures\n                - copies all the state information of item into *this, except for state \n                  information populated by load().  More precisely, given two binned_vector_feature_image \n                  objects H1 and H2, the following sequence of instructions should always \n                  result in both of them having the exact same state.\n                    H2.copy_configuration(H1);\n                    H1.load(img);\n                    H2.load(img);\n        !*/\n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type == any type that can be supplied to feature_extractor::load() \n            ensures\n                - performs BASE_FE.load(img)\n                  i.e. does feature extraction.  The features can be accessed using\n                  operator() as defined below.\n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.size() \n        !*/\n\n        long nr (\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.nr() \n        !*/\n\n        long nc (\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.nc() \n        !*/\n\n        long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns the dimensionality of the feature vectors returned by operator().\n                  In this case, this is the number of hash bins times the dimensionality of\n                  the features produced by BASE_FE plus one.  That is, this function\n                  returns get_hash().num_hash_bins()*(BASE_FE.get_num_dimensions()+1)\n        !*/\n\n        const descriptor_type& operator() (\n            long row,\n            long col\n        ) const;\n        /*!\n            requires\n                - 0 <= row < nr()\n                - 0 <= col < nc()\n                - It must be legal to evaluate expressions of the form: get_hash()(BASE_FE(row,col))\n                  (e.g. the hash function must be properly configured to process the feature\n                  vectors produced by the base feature extractor)\n            ensures\n                - hashes BASE_FE(row,col) and returns the resulting sparse vector.  In\n                  particular, we return a vector that is a copy of BASE_FE(row,col) that\n                  has been shifted into the part of the sparse vector indicated by the hash\n                  function.  It will also have a constant bias value of 1 appended to it.\n                - To be precise, this function returns a sparse vector V such that:\n                    - V.size() == BASE_FE.get_num_dimensions()+1\n                    - let IDX = get_hash()(BASE_FE(row,col))\n                    - for i where 0 <= i < BASE_FE.get_num_dimensions():\n                        - V[i].first == IDX*(BASE_FE.get_num_dimensions()+1) + i\n                        - V[i].second == BASE_FE(row,col)(i)\n                    - V[BASE_FE.get_num_dimensions()].first == IDX*(BASE_FE.get_num_dimensions()+1) + BASE_FE.get_num_dimensions()\n                    - V[BASE_FE.get_num_dimensions()].second == 1\n        !*/\n\n        const rectangle get_block_rect (\n            long row,\n            long col\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.get_block_rect(row,col)\n                  I.e. returns a rectangle that tells you what part of the original image is associated\n                  with a particular feature vector.\n        !*/\n\n        const point image_to_feat_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.image_to_feat_space(p)\n                  I.e. Each local feature is extracted from a certain point in the input image.\n                  This function returns the identity of the local feature corresponding\n                  to the image location p.  Or in other words, let P == image_to_feat_space(p), \n                  then (*this)(P.y(),P.x()) == the local feature closest to, or centered at, \n                  the point p in the input image.  Note that some image points might not have \n                  corresponding feature locations.  E.g. border points or points outside the \n                  image.  In these cases the returned point will be outside get_rect(*this).\n        !*/\n\n        const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.image_to_feat_space(rect)\n                  I.e. returns rectangle(image_to_feat_space(rect.tl_corner()), image_to_feat_space(rect.br_corner()));\n                  (i.e. maps a rectangle from image space to feature space)\n        !*/\n\n        const point feat_to_image_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.feat_to_image_space(p)\n                  I.e. returns the location in the input image space corresponding to the center\n                  of the local feature at point p.  In other words, this function computes\n                  the inverse of image_to_feat_space().  Note that it may only do so approximately, \n                  since more than one image location might correspond to the same local feature.  \n                  That is, image_to_feat_space() might not be invertible so this function gives \n                  the closest possible result.\n        !*/\n\n        const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.feat_to_image_space(rect)\n                  I.e. return rectangle(feat_to_image_space(rect.tl_corner()), feat_to_image_space(rect.br_corner()));\n                  (i.e. maps a rectangle from feature space to image space)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    void serialize (\n        const binned_vector_feature_image<T,U>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    void deserialize (\n        binned_vector_feature_image<T,U>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BINNED_VECTOR_FEATUrES_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/build_separable_poly_filters.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BUILD_SEPARABLE_PoLY_FILTERS_Hh_\n#define DLIB_BUILD_SEPARABLE_PoLY_FILTERS_Hh_\n\n#include \"../matrix.h\"\n#include \"surf.h\"\n#include \"../uintn.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    typedef std::pair<matrix<double,0,1>, matrix<double,0,1> > separable_filter_type;\n    typedef std::pair<matrix<int32,0,1>, matrix<int32,0,1> > separable_int32_filter_type;\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::vector<std::vector<separable_filter_type> > build_separable_poly_filters (\n        const long order,\n        const long window_size\n    ) \n    /*!\n        requires\n            - 1 <= order <= 6\n            - window_size >= 3 && window_size is odd\n        ensures\n            - the \"first\" element is the row_filter, the second is the col_filter.\n            - Some filters are not totally separable and that's why they are grouped\n              into vectors of vectors.  The groups are all the parts of a partially\n              separable filter.\n    !*/\n    {\n        long num_filters = 6;\n        switch (order)\n        {\n            case 1: num_filters = 3; break;\n            case 2: num_filters = 6; break;\n            case 3: num_filters = 10; break;\n            case 4: num_filters = 15; break;\n            case 5: num_filters = 21; break;\n            case 6: num_filters = 28; break;\n        }\n\n        matrix<double> X(window_size*window_size,num_filters);\n        matrix<double,0,1> G(window_size*window_size,1);\n        const double sigma = window_size/4.0;\n\n\n        long cnt = 0;\n        for (double x = -window_size/2; x <= window_size/2; ++x)\n        {\n            for (double y = -window_size/2; y <= window_size/2; ++y)\n            {\n                X(cnt, 0) = 1;\n                X(cnt, 1) = x;\n                X(cnt, 2) = y;\n\n                if (X.nc() > 5)\n                {\n                    X(cnt, 3) = x*x;\n                    X(cnt, 4) = x*y;\n                    X(cnt, 5) = y*y;\n                }\n                if (X.nc() > 9)\n                {\n                    X(cnt, 6) = x*x*x;\n                    X(cnt, 7) = y*x*x;\n                    X(cnt, 8) = y*y*x;\n                    X(cnt, 9) = y*y*y;\n                }\n                if (X.nc() > 14)\n                {\n                    X(cnt, 10) = x*x*x*x;\n                    X(cnt, 11) = y*x*x*x;\n                    X(cnt, 12) = y*y*x*x;\n                    X(cnt, 13) = y*y*y*x;\n                    X(cnt, 14) = y*y*y*y;\n                }\n                if (X.nc() > 20)\n                {\n                    X(cnt, 15) = x*x*x*x*x;\n                    X(cnt, 16) = y*x*x*x*x;\n                    X(cnt, 17) = y*y*x*x*x;\n                    X(cnt, 18) = y*y*y*x*x;\n                    X(cnt, 19) = y*y*y*y*x;\n                    X(cnt, 20) = y*y*y*y*y;\n                }\n                if (X.nc() > 27)\n                {\n                    X(cnt, 21) = x*x*x*x*x*x;\n                    X(cnt, 22) = y*x*x*x*x*x;\n                    X(cnt, 23) = y*y*x*x*x*x;\n                    X(cnt, 24) = y*y*y*x*x*x;\n                    X(cnt, 25) = y*y*y*y*x*x;\n                    X(cnt, 26) = y*y*y*y*y*x;\n                    X(cnt, 27) = y*y*y*y*y*y;\n                }\n\n                G(cnt) = std::sqrt(gaussian(x,y,sigma));\n                ++cnt;\n            }\n        }\n         \n        X = diagm(G)*X;\n\n        const matrix<double> S = inv(trans(X)*X)*trans(X)*diagm(G);\n\n        matrix<double,0,1> row_filter, col_filter;\n\n        matrix<double> u,v, temp;\n        matrix<double,0,1> w;\n\n        std::vector<std::vector<separable_filter_type> > results(num_filters);\n\n        for (long r = 0; r < S.nr(); ++r)\n        {\n            temp = reshape(rowm(S,r), window_size, window_size);\n            svd3(temp,u,w,v);\n            const double thresh = max(w)*1e-8;\n            for (long i = 0; i < w.size(); ++i)\n            {\n                if (w(i) > thresh)\n                {\n                    col_filter = std::sqrt(w(i))*colm(u,i);\n                    row_filter = std::sqrt(w(i))*colm(v,i);\n                    results[r].push_back(std::make_pair(row_filter, col_filter));\n                }\n            }\n        }\n\n        return results;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::vector<std::vector<separable_int32_filter_type> > build_separable_int32_poly_filters (\n        const long order,\n        const long window_size,\n        const double max_range = 300.0\n    ) \n    /*!\n        requires\n            - 1 <= order <= 6\n            - window_size >= 3 && window_size is odd\n            - max_range > 1\n        ensures\n            - the \"first\" element is the row_filter, the second is the col_filter.\n    !*/\n    {\n        const std::vector<std::vector<separable_filter_type> >& filters = build_separable_poly_filters(order, window_size);\n        std::vector<std::vector<separable_int32_filter_type> > int_filters(filters.size());\n\n        for (unsigned long i = 0; i < filters.size(); ++i)\n        {\n\n            double max_val = 0;\n            for (unsigned long j = 0; j < filters[i].size(); ++j)\n            {\n                const separable_filter_type& filt = filters[i][j];\n                max_val = std::max(max_val, max(abs(filt.first)));\n                max_val = std::max(max_val, max(abs(filt.second)));\n            }\n            if (max_val == 0)\n                max_val = 1;\n\n            int_filters[i].resize(filters[i].size());\n            for (unsigned long j = 0; j < filters[i].size(); ++j)\n            {\n                const separable_filter_type& filt = filters[i][j];\n                int_filters[i][j].first  = matrix_cast<int32>(round(filt.first*max_range/max_val));\n                int_filters[i][j].second = matrix_cast<int32>(round(filt.second*max_range/max_val));\n            }\n        }\n\n        return int_filters;\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_BUILD_SEPARABLE_PoLY_FILTERS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/draw_surf_points.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DRAW_SURf_POINTS_H_\n#define DLIB_DRAW_SURf_POINTS_H_\n\n#include \"surf.h\"\n#include \"../gui_widgets.h\"\n#include \"draw_surf_points_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n    inline void draw_surf_points (\n        image_window& win,\n        const std::vector<surf_point>& sp\n    )\n    {\n        for (unsigned long i = 0; i < sp.size(); ++i)\n        {\n            const unsigned long radius = static_cast<unsigned long>(sp[i].p.scale*3);\n            const point center(sp[i].p.center);\n            point direction = center + point(radius,0);\n            // SURF descriptors are rotated by sp[i].angle.  So we want to include a visual\n            // indication of this rotation on our overlay.\n            direction = rotate_point(center, direction, sp[i].angle);\n\n            win.add_overlay(image_display::overlay_circle(center, radius, rgb_pixel(0,255,0)));\n            // Draw a line showing the orientation of the SURF descriptor.\n            win.add_overlay(center, direction, rgb_pixel(255,0,0));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DRAW_SURf_POINTS_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/draw_surf_points_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_DRAW_SURf_POINTS_ABSTRACT_H_\n#ifdef DLIB_DRAW_SURf_POINTS_ABSTRACT_H_\n\n#include \"surf_abstract.h\"\n#include \"../gui_widgets.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    void draw_surf_points (\n        image_window& win,\n        const std::vector<surf_point>& sp\n    );\n    /*!\n        ensures\n            - draws all the SURF points in sp onto the given image_window.  They\n              are drawn as overlay circles with extra lines to indicate the rotation\n              of the SURF descriptor.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DRAW_SURf_POINTS_ABSTRACT_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/fine_hog_image.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FINE_HOG_IMaGE_Hh_\n#define DLIB_FINE_HOG_IMaGE_Hh_\n\n#include \"fine_hog_image_abstract.h\"\n#include \"../array2d.h\"\n#include \"../matrix.h\"\n#include \"hog.h\"\n\n\nnamespace dlib\n{\n    template <\n        unsigned long cell_size_,\n        unsigned long block_size_,\n        unsigned long pixel_stride_,\n        unsigned char num_orientation_bins_,\n        int           gradient_type_\n        >\n    class fine_hog_image : noncopyable\n    {\n        COMPILE_TIME_ASSERT(cell_size_ > 1);\n        COMPILE_TIME_ASSERT(block_size_ > 0);\n        COMPILE_TIME_ASSERT(pixel_stride_ > 0);\n        COMPILE_TIME_ASSERT(num_orientation_bins_ > 0);\n\n        COMPILE_TIME_ASSERT( gradient_type_ == hog_signed_gradient ||\n                             gradient_type_ == hog_unsigned_gradient);\n\n\n    public:\n\n        const static unsigned long cell_size = cell_size_;\n        const static unsigned long block_size = block_size_;\n        const static unsigned long pixel_stride = pixel_stride_;\n        const static unsigned long num_orientation_bins = num_orientation_bins_;\n        const static int           gradient_type = gradient_type_;\n\n        const static long min_size = cell_size*block_size+2;\n\n        typedef matrix<double, block_size*block_size*num_orientation_bins, 1> descriptor_type;\n\n        fine_hog_image (\n        ) : \n            num_block_rows(0),\n            num_block_cols(0)\n        {}\n\n        void clear (\n        )\n        {\n            num_block_rows = 0;\n            num_block_cols = 0;\n            hist_counts.clear();\n        }\n\n        void copy_configuration (\n            const fine_hog_image&\n        ){}\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        )\n        {\n            COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<image_type>::pixel_type>::has_alpha == false );\n            load_impl(mat(img));\n        }\n\n        inline void unload(\n        ) { clear(); }\n\n        inline unsigned long size (\n        ) const { return static_cast<unsigned long>(nr()*nc()); }\n\n        inline long nr (\n        ) const { return num_block_rows; }\n\n        inline long nc (\n        ) const { return num_block_cols; }\n\n        long get_num_dimensions (\n        ) const\n        {\n            return block_size*block_size*num_orientation_bins;\n        }\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( 0 <= row && row < nr() &&\n                         0 <= col && col < nc(),\n                \"\\t descriptor_type fine_hog_image::operator()()\"\n                << \"\\n\\t invalid row or col argument\"\n                << \"\\n\\t row:  \" << row\n                << \"\\n\\t col:  \" << col \n                << \"\\n\\t nr(): \" << nr() \n                << \"\\n\\t nc(): \" << nc() \n                << \"\\n\\t this: \" << this\n                );\n\n            row *= pixel_stride;\n            col *= pixel_stride;\n\n            des = 0;\n            unsigned long off = 0;\n            for (unsigned long r = 0; r < block_size; ++r)\n            {\n                for (unsigned long c = 0; c < block_size; ++c)\n                {\n                    for (unsigned long rr = 0; rr < cell_size; ++rr)\n                    {\n                        for (unsigned long cc = 0; cc < cell_size; ++cc)\n                        {\n                            const histogram_count& hist = hist_counts[row + r*cell_size + rr][col + c*cell_size + cc];\n                            des(off + hist.quantized_angle_lower) += hist.lower_strength;\n                            des(off + hist.quantized_angle_upper) += hist.upper_strength;\n                        }\n                    }\n\n                    off += num_orientation_bins;\n                }\n            }\n\n            des /= length(des) + 1e-8;\n\n            return des;\n        }\n\n        const rectangle get_block_rect (\n            long row,\n            long col\n        ) const\n        {\n            row *= pixel_stride;\n            col *= pixel_stride;\n\n            // do this to account for the 1 pixel padding we use all around the image\n            ++row;\n            ++col;\n\n            return rectangle(col, row, col+cell_size*block_size-1, row+cell_size*block_size-1);\n        }\n\n        const point image_to_feat_space (\n            const point& p\n        ) const\n        {\n            const long border_size = 1 + cell_size*block_size/2;\n            return (p-point(border_size,border_size))/(long)pixel_stride;\n        }\n\n        const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(image_to_feat_space(rect.tl_corner()), image_to_feat_space(rect.br_corner()));\n        }\n\n        const point feat_to_image_space (\n            const point& p\n        ) const\n        {\n            const long border_size = 1 + cell_size*block_size/2;\n            return p*(long)pixel_stride + point(border_size,border_size);\n        }\n\n        const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(feat_to_image_space(rect.tl_corner()), feat_to_image_space(rect.br_corner()));\n        }\n\n\n\n        // these _PRIVATE_ functions are only here as a workaround for a bug in visual studio 2005.  \n        void _PRIVATE_serialize (std::ostream& out) const\n        {\n            // serialize hist_counts\n            serialize(hist_counts.nc(),out);\n            serialize(hist_counts.nr(),out);\n            hist_counts.reset();\n            while (hist_counts.move_next())\n                hist_counts.element().serialize(out);\n            hist_counts.reset();\n\n\n            serialize(num_block_rows, out);\n            serialize(num_block_cols, out);\n        }\n\n        void _PRIVATE_deserialize (std::istream& in )\n        {\n            // deserialize item.hist_counts\n            long nc, nr;\n            deserialize(nc,in);\n            deserialize(nr,in);\n            hist_counts.set_size(nr,nc);\n            while (hist_counts.move_next())\n                hist_counts.element().deserialize(in); \n            hist_counts.reset();\n\n\n            deserialize(num_block_rows, in);\n            deserialize(num_block_cols, in);\n        }\n\n    private:\n\n        template <\n            typename image_type\n            >\n        void load_impl (\n            const image_type& img\n        )\n        {\n            // Note that we keep a border of 1 pixel all around the image so that we don't have\n            // to worry about running outside the image when computing the horizontal and vertical \n            // gradients.\n\n\n\n            // check if the window is just too small\n            if (img.nr() < min_size || img.nc() < min_size)\n            {\n                // If the image is smaller than our windows then there aren't any descriptors at all!\n                num_block_rows = 0;\n                num_block_cols = 0;\n                hist_counts.clear();\n                return;\n            }\n\n            hist_counts.set_size(img.nr()-2, img.nc()-2);\n\n\n\n\n            for (long r = 0; r < hist_counts.nr(); ++r)\n            {\n                for (long c = 0; c < hist_counts.nc(); ++c)\n                {\n                    unsigned long left; \n                    unsigned long right;\n                    unsigned long top;   \n                    unsigned long bottom; \n\n                    assign_pixel(left,   img(r+1,c));\n                    assign_pixel(right,  img(r+1,c+2));\n                    assign_pixel(top,    img(r  ,c+1));\n                    assign_pixel(bottom, img(r+2,c+1));\n\n                    double grad_x = (long)right-(long)left;\n                    double grad_y = (long)top-(long)bottom;\n\n                    // obtain the angle of the gradient.  Make sure it is scaled between 0 and 1.\n                    double angle = std::max(0.0, std::atan2(grad_y, grad_x)/pi + 1)/2;\n\n\n                    if (gradient_type == hog_unsigned_gradient)\n                    {\n                        angle *= 2;\n                        if (angle >= 1)\n                            angle -= 1;\n                    }\n\n\n                    // now scale angle to between 0 and num_orientation_bins\n                    angle *= num_orientation_bins;\n\n\n                    const double strength = std::sqrt(grad_y*grad_y + grad_x*grad_x);\n\n\n                    unsigned char quantized_angle_lower = static_cast<unsigned char>(std::floor(angle));\n                    unsigned char quantized_angle_upper = static_cast<unsigned char>(std::ceil(angle));\n\n                    quantized_angle_lower %= num_orientation_bins;\n                    quantized_angle_upper %= num_orientation_bins;\n\n                    const double angle_split = (angle-std::floor(angle));\n                    const double upper_strength = angle_split*strength;\n                    const double lower_strength = (1-angle_split)*strength;\n\n                    // Stick into gradient counts.  Note that we linearly interpolate between neighboring\n                    // histogram buckets.\n                    hist_counts[r][c].quantized_angle_lower = quantized_angle_lower;\n                    hist_counts[r][c].quantized_angle_upper = quantized_angle_upper;\n                    hist_counts[r][c].lower_strength = lower_strength;\n                    hist_counts[r][c].upper_strength = upper_strength;\n\n                }\n            }\n\n\n            // Now figure out how many feature extraction blocks we should have.  \n            num_block_rows = (hist_counts.nr() - block_size*cell_size + 1)/(long)pixel_stride; \n            num_block_cols = (hist_counts.nc() - block_size*cell_size + 1)/(long)pixel_stride; \n\n        }\n\n        struct histogram_count\n        {\n            unsigned char quantized_angle_lower;\n            unsigned char quantized_angle_upper;\n            float lower_strength;\n            float upper_strength;\n\n            void serialize(std::ostream& out) const\n            {\n                dlib::serialize(quantized_angle_lower, out);\n                dlib::serialize(quantized_angle_upper, out);\n                dlib::serialize(lower_strength, out);\n                dlib::serialize(upper_strength, out);\n            }\n            void deserialize(std::istream& in) \n            {\n                dlib::deserialize(quantized_angle_lower, in);\n                dlib::deserialize(quantized_angle_upper, in);\n                dlib::deserialize(lower_strength, in);\n                dlib::deserialize(upper_strength, in);\n            }\n        };\n\n        array2d<histogram_count> hist_counts;\n\n        mutable descriptor_type des;\n\n        long num_block_rows;\n        long num_block_cols;\n\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long T1,\n        unsigned long T2,\n        unsigned long T3,\n        unsigned char T4,\n        int           T5\n        >\n    void serialize (\n        const fine_hog_image<T1,T2,T3,T4,T5>& item,\n        std::ostream& out\n    )\n    {\n        item._PRIVATE_serialize(out);\n    }\n\n    template <\n        unsigned long T1,\n        unsigned long T2,\n        unsigned long T3,\n        unsigned char T4,\n        int           T5\n        >\n    void deserialize (\n        fine_hog_image<T1,T2,T3,T4,T5>& item,\n        std::istream& in \n    )\n    {\n        item._PRIVATE_deserialize(in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FINE_HOG_IMaGE_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/fine_hog_image_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FINE_HOG_IMaGE_ABSTRACT_Hh_\n#ifdef DLIB_FINE_HOG_IMaGE_ABSTRACT_Hh_\n\n#include \"../array2d.h\"\n#include \"../matrix.h\"\n#include \"hog_abstract.h\"\n\n\nnamespace dlib\n{\n    template <\n        unsigned long cell_size_,\n        unsigned long block_size_,\n        unsigned long pixel_stride_,\n        unsigned char num_orientation_bins_,\n        int           gradient_type_\n        >\n    class fine_hog_image : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON TEMPLATE PARAMETERS \n                - cell_size_ > 1\n                - block_size_ > 0\n                - pixel_stride_ > 0\n                - num_orientation_bins_ > 0\n                - gradient_type_ == hog_signed_gradient or hog_unsigned_gradient\n\n            INITIAL VALUE\n                 - size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a version of the hog_image that allows you to extract HOG\n                features at a finer resolution.  The hog_image can only extract HOG features\n                cell_size_ pixels apart.  However, this object, the fine_hog_image can \n                extract HOG features from every pixel location.\n\n                The template arguments to this class have the same meaning as they do for\n                the hog_image, except for pixel_stride_.  This controls the stepping between\n                HOG extraction locations.  A value of 1 indicates HOG features should be\n                extracted from every pixel location.  A value of 2 indicates every other pixel\n                location, etc.\n\n                Finally, note that the interpolation used by this object is equivalent\n                to using hog_angle_interpolation with hog_image.  \n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be protected\n                by a mutex lock except for the case where you are copying the configuration \n                (via copy_configuration()) of a fine_hog_image object to many other threads.  \n                In this case, it is safe to copy the configuration of a shared object so long\n                as no other operations are performed on it.\n        !*/\n\n    public:\n\n        const static unsigned long cell_size = cell_size_;\n        const static unsigned long block_size = block_size_;\n        const static unsigned long pixel_stride = pixel_stride_;\n        const static unsigned long num_orientation_bins = num_orientation_bins_;\n        const static int           gradient_type = gradient_type_;\n\n        const static long min_size = cell_size*block_size+2;\n\n        typedef matrix<double, block_size*block_size*num_orientation_bins, 1> descriptor_type;\n\n        fine_hog_image (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - this object will have its initial value\n        !*/\n\n        void copy_configuration (\n            const fine_hog_image&\n        );\n        /*!\n            ensures\n                - copies all the state information of item into *this, except for state \n                  information populated by load().  More precisely, given two fine_hog_image \n                  objects H1 and H2, the following sequence of instructions should always \n                  result in both of them having the exact same state.\n                    H2.copy_configuration(H1);\n                    H1.load(img);\n                    H2.load(img);\n        !*/\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type is a dlib::matrix or something convertible to a matrix\n                  via mat()\n                - pixel_traits<typename image_traits<image_type>::pixel_type>::has_alpha == false\n            ensures\n                - if (img.nr() < min_size || img.nc() < min_size) then\n                    - the image is too small so we don't compute anything on it\n                    - #size() == 0\n                - else\n                    - generates a HOG image from the given image.   \n                    - #size() > 0\n        !*/\n\n        inline void unload(\n        );\n        /*!\n            ensures\n                - #nr() == 0\n                - #nc() == 0\n                - clears only the state information which is populated by load().  For \n                  example, let H be a fine_hog_image object.  Then consider the two \n                  sequences of instructions:\n                    Sequence 1:\n                        H.load(img);      \n                        H.unload();\n                        H.load(img);\n\n                    Sequence 2:\n                        H.load(img);\n                  Both sequence 1 and sequence 2 should have the same effect on H.  \n        !*/\n\n        inline unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns nr()*nc()\n        !*/\n\n        inline long nr (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in this HOG image\n        !*/\n\n        inline long nc (\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns in this HOG image\n        !*/\n\n        long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns the number of dimensions in the feature vectors generated by\n                  this object.  \n                - In particular, returns the value block_size*block_size*num_orientation_bins\n        !*/\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const;\n        /*!\n            requires\n                - 0 <= row < nr()\n                - 0 <= col < nc()\n            ensures\n                - returns the descriptor for the HOG block at the given row and column.  This descriptor \n                  will include information from a window that is located at get_block_rect(row,col) in\n                  the original image given to load().\n                - The returned descriptor vector will have get_num_dimensions() elements.\n        !*/\n\n        const rectangle get_block_rect (\n            long row,\n            long col\n        ) const;\n        /*!\n            ensures\n                - returns a rectangle that tells you what part of the original image is associated\n                  with a particular HOG block.  That is, what part of the input image is associated\n                  with (*this)(row,col).\n                - The returned rectangle will be cell_size*block_size pixels wide and tall.\n        !*/\n\n        const point image_to_feat_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - Each local feature is extracted from a certain point in the input image.\n                  This function returns the identity of the local feature corresponding\n                  to the image location p.  Or in other words, let P == image_to_feat_space(p), \n                  then (*this)(P.y(),P.x()) == the local feature closest to, or centered at, \n                  the point p in the input image.  Note that some image points might not have \n                  corresponding feature locations.  E.g. border points or points outside the \n                  image.  In these cases the returned point will be outside get_rect(*this).\n        !*/\n\n        const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns rectangle(image_to_feat_space(rect.tl_corner()), image_to_feat_space(rect.br_corner()));\n                  (i.e. maps a rectangle from image space to feature space)\n        !*/\n\n        const point feat_to_image_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - returns the location in the input image space corresponding to the center\n                  of the local feature at point p.  In other words, this function computes\n                  the inverse of image_to_feat_space().  Note that it may only do so approximately, \n                  since more than one image location might correspond to the same local feature.  \n                  That is, image_to_feat_space() might not be invertible so this function gives \n                  the closest possible result.\n        !*/\n\n        const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - return rectangle(feat_to_image_space(rect.tl_corner()), feat_to_image_space(rect.br_corner()));\n                  (i.e. maps a rectangle from feature space to image space)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long T1,\n        unsigned long T2,\n        unsigned long T3,\n        unsigned char T4,\n        int           T5\n        >\n    void serialize (\n        const fine_hog_image<T1,T2,T3,T4,T5>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    template <\n        unsigned long T1,\n        unsigned long T2,\n        unsigned long T3,\n        unsigned char T4,\n        int           T5\n        >\n    void deserialize (\n        fine_hog_image<T1,T2,T3,T4,T5>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FINE_HOG_IMaGE_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/hashed_feature_image.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HASHED_IMAGE_FEATUrES_Hh_\n#define DLIB_HASHED_IMAGE_FEATUrES_Hh_\n\n#include \"../lsh/projection_hash.h\"\n#include \"hashed_feature_image_abstract.h\"\n#include <vector>\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type_ = projection_hash\n        >\n    class hashed_feature_image : noncopyable\n    {\n\n    public:\n        typedef feature_extractor feature_extractor_type;\n        typedef hash_function_type_ hash_function_type;\n\n        typedef std::vector<std::pair<unsigned int,double> > descriptor_type;\n\n        hashed_feature_image (\n        ); \n\n        void clear (\n        );\n\n        void set_hash (\n            const hash_function_type& hash_\n        );\n\n        const hash_function_type& get_hash (\n        ) const;\n\n        void copy_configuration (\n            const feature_extractor& item\n        );\n\n        void copy_configuration (\n            const hashed_feature_image& item\n        );\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        );\n\n        inline unsigned long size (\n        ) const;\n\n        inline long nr (\n        ) const;\n\n        inline long nc (\n        ) const;\n\n        inline long get_num_dimensions (\n        ) const;\n\n        void use_relative_feature_weights (\n        );\n\n        void use_uniform_feature_weights (\n        );\n\n        bool uses_uniform_feature_weights (\n        ) const;\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const;\n\n        inline const rectangle get_block_rect (\n            long row,\n            long col\n        ) const;\n\n        inline const point image_to_feat_space (\n            const point& p\n        ) const;\n\n        inline const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const;\n\n        inline const point feat_to_image_space (\n            const point& p\n        ) const;\n\n        inline const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const;\n\n        template <typename T>\n        friend void serialize (\n            const hashed_feature_image<T>& item,\n            std::ostream& out\n        );\n\n        template <typename T>\n        friend void deserialize (\n            hashed_feature_image<T>& item,\n            std::istream& in \n        );\n\n    private:\n\n        array2d<unsigned long> feats;\n        feature_extractor fe;\n        hash_function_type phash;\n        std::vector<float> feat_counts;\n        bool uniform_feature_weights;\n\n\n        // This is a transient variable.  It is just here so it doesn't have to be\n        // reallocated over and over inside operator()\n        mutable descriptor_type hash_feats;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const hashed_feature_image<T>& item,\n        std::ostream& out\n    )\n    {\n        int version = 1;\n        serialize(version, out);\n        serialize(item.feats, out);\n        serialize(item.fe, out);\n        serialize(item.phash, out);\n        serialize(item.feat_counts, out);\n        serialize(item.uniform_feature_weights, out);\n    }\n\n    template <typename T>\n    void deserialize (\n        hashed_feature_image<T>& item,\n        std::istream& in \n    )\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 1)\n            throw serialization_error(\"Unexpected version found while deserializing a dlib::hashed_feature_image object.\");\n\n        deserialize(item.feats, in);\n        deserialize(item.fe, in);\n        deserialize(item.phash, in);\n        deserialize(item.feat_counts, in);\n        deserialize(item.uniform_feature_weights, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                        hashed_feature_image member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    hashed_feature_image<feature_extractor,hash_function_type>::\n    hashed_feature_image (\n    )  \n    {\n        clear();\n        hash_feats.resize(1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void hashed_feature_image<feature_extractor,hash_function_type>::\n    clear (\n    )\n    {\n        fe.clear();\n        phash = hash_function_type();\n        feats.clear();\n        feat_counts.clear();\n        uniform_feature_weights = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void hashed_feature_image<feature_extractor,hash_function_type>::\n    set_hash (\n        const hash_function_type& hash_\n    )\n    {\n        phash = hash_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const hash_function_type& hashed_feature_image<feature_extractor,hash_function_type>::\n    get_hash (\n    ) const\n    {\n        return phash;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void hashed_feature_image<feature_extractor,hash_function_type>::\n    copy_configuration (\n        const feature_extractor& item\n    )\n    {\n        fe.copy_configuration(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void hashed_feature_image<feature_extractor,hash_function_type>::\n    copy_configuration (\n        const hashed_feature_image& item\n    )\n    {\n        fe.copy_configuration(item.fe);\n        phash = item.phash;\n        uniform_feature_weights = item.uniform_feature_weights;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    template <\n        typename image_type\n        >\n    void hashed_feature_image<feature_extractor,hash_function_type>::\n    load (\n        const image_type& img\n    )\n    {\n        fe.load(img);\n\n        if (fe.size() != 0)\n        {\n            feats.set_size(fe.nr(), fe.nc());\n            feat_counts.assign(phash.num_hash_bins(),1);\n            if (uniform_feature_weights)\n            {\n                for (long r = 0; r < feats.nr(); ++r)\n                {\n                    for (long c = 0; c < feats.nc(); ++c)\n                    {\n                        feats[r][c] = phash(fe(r,c));\n                    }\n                }\n            }\n            else\n            {\n                for (long r = 0; r < feats.nr(); ++r)\n                {\n                    for (long c = 0; c < feats.nc(); ++c)\n                    {\n                        feats[r][c] = phash(fe(r,c));\n                        feat_counts[feats[r][c]]++;\n                    }\n                }\n            }\n        }\n        else\n        {\n            feats.set_size(0,0);\n        }\n\n        if (!uniform_feature_weights)\n        {\n            // use the inverse frequency as the scale for each feature.  We also scale\n            // these counts so that they are invariant to the size of the image (we scale\n            // them so they all look like they come from a 500x400 images).\n            const double scale = image_size(img)/(500.0*400.0);\n            for (unsigned long i = 0; i < feat_counts.size(); ++i)\n            {\n                feat_counts[i] = scale/feat_counts[i];\n            }\n        }\n\n        fe.unload();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    unsigned long hashed_feature_image<feature_extractor,hash_function_type>::\n    size (\n    ) const\n    {\n        return feats.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    long hashed_feature_image<feature_extractor,hash_function_type>::\n    nr (\n    ) const\n    {\n        return feats.nr();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    long hashed_feature_image<feature_extractor,hash_function_type>::\n    nc (\n    ) const\n    {\n        return feats.nc();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    long hashed_feature_image<feature_extractor,hash_function_type>::\n    get_num_dimensions (\n    ) const\n    {\n        return phash.num_hash_bins();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void hashed_feature_image<feature_extractor,hash_function_type>::\n    use_relative_feature_weights (\n    ) \n    {\n        uniform_feature_weights = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    void hashed_feature_image<feature_extractor,hash_function_type>::\n    use_uniform_feature_weights (\n    ) \n    {\n        uniform_feature_weights = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    bool hashed_feature_image<feature_extractor,hash_function_type>::\n    uses_uniform_feature_weights (\n    ) const\n    {\n        return uniform_feature_weights;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const std::vector<std::pair<unsigned int,double> >& hashed_feature_image<feature_extractor,hash_function_type>::\n    operator() (\n        long row,\n        long col\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 <= row && row < nr() &&\n                    0 <= col && col < nc(),\n            \"\\t descriptor_type hashed_feature_image::operator(row,col)\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t row:  \" << row\n            << \"\\n\\t col:  \" << col \n            << \"\\n\\t nr(): \" << nr()\n            << \"\\n\\t nc(): \" << nc()\n            << \"\\n\\t this: \" << this\n            );\n\n        hash_feats[0] = std::make_pair(feats[row][col],feat_counts[feats[row][col]]);\n        return hash_feats;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const rectangle hashed_feature_image<feature_extractor,hash_function_type>::\n    get_block_rect (\n        long row,\n        long col\n    ) const\n    {\n        return fe.get_block_rect(row,col);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const point hashed_feature_image<feature_extractor,hash_function_type>::\n    image_to_feat_space (\n        const point& p\n    ) const\n    {\n        return fe.image_to_feat_space(p);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const rectangle hashed_feature_image<feature_extractor,hash_function_type>::\n    image_to_feat_space (\n        const rectangle& rect\n    ) const\n    {\n        return fe.image_to_feat_space(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const point hashed_feature_image<feature_extractor,hash_function_type>::\n    feat_to_image_space (\n        const point& p\n    ) const\n    {\n        return fe.feat_to_image_space(p);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type\n        >\n    const rectangle hashed_feature_image<feature_extractor,hash_function_type>::\n    feat_to_image_space (\n        const rectangle& rect\n    ) const \n    {\n        return fe.feat_to_image_space(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HASHED_IMAGE_FEATUrES_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/hashed_feature_image_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_HASHED_IMAGE_FEATUrES_ABSTRACT_Hh_\n#ifdef DLIB_HASHED_IMAGE_FEATUrES_ABSTRACT_Hh_\n\n#include \"../lsh/projection_hash_abstract.h\"\n#include <vector>\n#include \"../matrix.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor,\n        typename hash_function_type_ = projection_hash\n        >\n    class hashed_feature_image : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor \n                - must be an object with an interface compatible with dlib::hog_image\n\n            REQUIREMENTS ON hash_function_type_ \n                - must be an object with an interface compatible with projection_hash \n\n            INITIAL VALUE\n                 - size() == 0\n                 - uses_uniform_feature_weights() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for performing image feature extraction.  In\n                particular, it wraps another image feature extractor and converts the\n                wrapped image feature vectors into sparse indicator vectors.  It does this\n                by hashing each feature vector into the range [0, get_num_dimensions()-1]\n                and then returns a new vector which is zero everywhere except for the\n                position determined by the hash. \n\n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be protected\n                by a mutex lock except for the case where you are copying the configuration \n                (via copy_configuration()) of a hashed_feature_image object to many other threads.  \n                In this case, it is safe to copy the configuration of a shared object so long\n                as no other operations are performed on it.\n\n\n            NOTATION \n                let BASE_FE denote the base feature_extractor object contained inside \n                the hashed_feature_image.\n        !*/\n\n    public:\n\n        typedef feature_extractor feature_extractor_type;\n        typedef hash_function_type_ hash_function_type;\n        typedef std::vector<std::pair<unsigned int,double> > descriptor_type;\n\n        hashed_feature_image (\n        ); \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - this object will have its initial value\n        !*/\n\n        void set_hash (\n            const hash_function_type& hash\n        );\n        /*!\n            ensures\n                - #get_hash() == hash\n        !*/\n\n        const hash_function_type& get_hash (\n        ) const;\n        /*!\n            ensures\n                - returns the hash function used by this object to hash\n                  base feature vectors into integers.\n        !*/\n\n        void copy_configuration (\n            const feature_extractor& item\n        );\n        /*!\n            ensures\n                - performs BASE_FE.copy_configuration(item)\n        !*/\n\n        void copy_configuration (\n            const hashed_feature_image& item\n        );\n        /*!\n            ensures\n                - copies all the state information of item into *this, except for state \n                  information populated by load().  More precisely, given two hashed_feature_image \n                  objects H1 and H2, the following sequence of instructions should always \n                  result in both of them having the exact same state.\n                    H2.copy_configuration(H1);\n                    H1.load(img);\n                    H2.load(img);\n        !*/\n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type == any type that can be supplied to feature_extractor::load() \n            ensures\n                - performs BASE_FE.load(img)\n                  i.e. does feature extraction.  The features can be accessed using\n                  operator() as defined below.\n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.size() \n        !*/\n\n        long nr (\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.nr() \n        !*/\n\n        long nc (\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.nc() \n        !*/\n\n        long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns the dimensionality of the feature vectors returned by operator().  \n                  In this case, this is the number of hash bins.  That is, get_hash().num_hash_bins()\n        !*/\n\n        void use_relative_feature_weights (\n        );\n        /*!\n            ensures\n                - #uses_uniform_feature_weights() == false\n        !*/\n\n        void use_uniform_feature_weights (\n        );\n        /*!\n            ensures\n                - #uses_uniform_feature_weights() == true \n        !*/\n\n        bool uses_uniform_feature_weights (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object weights each feature with a value of 1 and\n                  false if it uses a weighting of 1/N where N is the number of occurrences\n                  of the feature in an image (note that we normalize N so that it is\n                  invariant to the size of the image given to load()).\n        !*/\n\n        const descriptor_type& operator() (\n            long row,\n            long col\n        ) const;\n        /*!\n            requires\n                - 0 <= row < nr()\n                - 0 <= col < nc()\n                - It must be legal to evaluate expressions of the form: get_hash()(BASE_FE(row,col))\n                  (e.g. the hash function must be properly configured to process the feature\n                  vectors produced by the base feature extractor)\n            ensures\n                - hashes BASE_FE(row,col) and returns the resulting indicator vector. \n                - To be precise, this function returns a sparse vector V such that:\n                    - V.size() == 1 \n                    - V[0].first == get_hash()(BASE_FE(row,col))\n                    - if (uses_uniform_feature_weights()) then\n                        - V[0].second == 1 \n                    - else\n                        - V[0].second == 1/N where N is the number of times a feature in\n                          hash bin V[0].first was observed in the image given to load().\n                          Note that we scale all the counts so that they are invariant to\n                          the size of the image.\n        !*/\n\n        const rectangle get_block_rect (\n            long row,\n            long col\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.get_block_rect(row,col)\n                  I.e. returns a rectangle that tells you what part of the original image is associated\n                  with a particular feature vector.\n        !*/\n\n        const point image_to_feat_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.image_to_feat_space(p)\n                  I.e. Each local feature is extracted from a certain point in the input image.\n                  This function returns the identity of the local feature corresponding\n                  to the image location p.  Or in other words, let P == image_to_feat_space(p), \n                  then (*this)(P.y(),P.x()) == the local feature closest to, or centered at, \n                  the point p in the input image.  Note that some image points might not have \n                  corresponding feature locations.  E.g. border points or points outside the \n                  image.  In these cases the returned point will be outside get_rect(*this).\n        !*/\n\n        const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.image_to_feat_space(rect)\n                  I.e. returns rectangle(image_to_feat_space(rect.tl_corner()), image_to_feat_space(rect.br_corner()));\n                  (i.e. maps a rectangle from image space to feature space)\n        !*/\n\n        const point feat_to_image_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.feat_to_image_space(p)\n                  I.e. returns the location in the input image space corresponding to the center\n                  of the local feature at point p.  In other words, this function computes\n                  the inverse of image_to_feat_space().  Note that it may only do so approximately, \n                  since more than one image location might correspond to the same local feature.  \n                  That is, image_to_feat_space() might not be invertible so this function gives \n                  the closest possible result.\n        !*/\n\n        const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.feat_to_image_space(rect)\n                  I.e. return rectangle(feat_to_image_space(rect.tl_corner()), feat_to_image_space(rect.br_corner()));\n                  (i.e. maps a rectangle from feature space to image space)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    void serialize (\n        const hashed_feature_image<T,U>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    void deserialize (\n        hashed_feature_image<T,U>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HASHED_IMAGE_FEATUrES_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/hessian_pyramid.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HESSIAN_PYRAMId_Hh_\n#define DLIB_HESSIAN_PYRAMId_Hh_\n\n#include \"hessian_pyramid_abstract.h\"\n#include \"../algs.h\"\n#include \"../image_transforms/integral_image.h\"\n#include \"../array.h\"\n#include \"../array2d.h\"\n#include \"../noncopyable.h\"\n#include \"../matrix.h\"\n#include \"../stl_checked.h\"\n#include <algorithm>\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct interest_point\n    {\n        interest_point() : scale(0), score(0), laplacian(0) {}\n\n        dlib::vector<double,2> center;\n        double scale;\n        double score;\n        double laplacian;\n\n        bool operator < (const interest_point& p) const { return score < p.score; }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize(\n        const interest_point& item,  \n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.center,out);\n            serialize(item.scale,out);\n            serialize(item.score,out);\n            serialize(item.laplacian,out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type interest_point\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize(\n        interest_point& item,  \n        std::istream& in \n    )\n    {\n        try\n        {\n            deserialize(item.center,in);\n            deserialize(item.scale,in);\n            deserialize(item.score,in);\n            deserialize(item.laplacian,in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type interest_point\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class hessian_pyramid : noncopyable\n    {\n    public:\n        hessian_pyramid()\n        {\n            num_octaves = 0;\n            num_intervals = 0;\n            initial_step_size = 0;\n        }\n\n        template <typename integral_image_type>\n        void build_pyramid (\n            const integral_image_type& img,\n            long num_octaves,\n            long num_intervals,\n            long initial_step_size\n        )\n        {\n            DLIB_ASSERT(num_octaves > 0 && num_intervals > 0 && initial_step_size > 0,\n                \"\\tvoid build_pyramid()\"\n                << \"\\n\\tAll arguments to this function must be > 0\"\n                << \"\\n\\t this:              \" << this\n                << \"\\n\\t num_octaves:       \" << num_octaves \n                << \"\\n\\t num_intervals:     \" << num_intervals \n                << \"\\n\\t initial_step_size: \" << initial_step_size \n            );\n\n            this->num_octaves = num_octaves;\n            this->num_intervals = num_intervals;\n            this->initial_step_size = initial_step_size;\n\n            // allocate space for the pyramid\n            pyramid.resize(num_octaves*num_intervals);\n            for (long o = 0; o < num_octaves; ++o)\n            {\n                const long step_size = get_step_size(o);\n                for (long i = 0; i < num_intervals; ++i)\n                {\n                    pyramid[num_intervals*o + i].set_size(img.nr()/step_size, img.nc()/step_size);\n                }\n            }\n\n            // now fill out the pyramid with data\n            for (long o = 0; o < num_octaves; ++o)\n            {\n                const long step_size = get_step_size(o);\n\n                for (long i = 0; i < num_intervals; ++i)\n                {\n                    const long border_size = get_border_size(i)*step_size;\n                    const long lobe_size = static_cast<long>(std::pow(2.0, o+1.0)+0.5)*(i+1) + 1;\n                    const double area_inv = 1.0/std::pow(3.0*lobe_size, 2.0);\n\n                    const long lobe_offset = lobe_size/2+1;\n                    const point tl(-lobe_offset,-lobe_offset);\n                    const point tr(lobe_offset,-lobe_offset);\n                    const point bl(-lobe_offset,lobe_offset);\n                    const point br(lobe_offset,lobe_offset);\n\n                    for (long r = border_size; r < img.nr() - border_size; r += step_size)\n                    {\n                        for (long c = border_size; c < img.nc() - border_size; c += step_size)\n                        {\n                            const point p(c,r);\n\n                            double Dxx = img.get_sum_of_area(centered_rect(p, lobe_size*3, 2*lobe_size-1)) - \n                                         img.get_sum_of_area(centered_rect(p, lobe_size,   2*lobe_size-1))*3.0;\n\n                            double Dyy = img.get_sum_of_area(centered_rect(p, 2*lobe_size-1, lobe_size*3)) - \n                                         img.get_sum_of_area(centered_rect(p, 2*lobe_size-1, lobe_size))*3.0;\n\n                            double Dxy = img.get_sum_of_area(centered_rect(p+bl, lobe_size, lobe_size)) + \n                                         img.get_sum_of_area(centered_rect(p+tr, lobe_size, lobe_size)) -\n                                         img.get_sum_of_area(centered_rect(p+tl, lobe_size, lobe_size)) -\n                                         img.get_sum_of_area(centered_rect(p+br, lobe_size, lobe_size));\n\n                            // now we normalize the filter responses\n                            Dxx *= area_inv;\n                            Dyy *= area_inv;\n                            Dxy *= area_inv;\n\n\n                            double sign_of_laplacian = +1;\n                            if (Dxx + Dyy < 0)\n                                sign_of_laplacian = -1;\n\n                            double determinant = Dxx*Dyy - 0.81*Dxy*Dxy;\n\n                            // If the determinant is negative then just blank it out by setting\n                            // it to zero.\n                            if (determinant < 0)\n                                determinant = 0;\n\n                            // Save the determinant of the Hessian into our image pyramid.  Also\n                            // pack the laplacian sign into the value so we can get it out later.\n                            pyramid[o*num_intervals + i][r/step_size][c/step_size] = sign_of_laplacian*determinant;\n\n                        }\n                    }\n\n                }\n            }\n        }\n\n        long get_border_size (\n            long interval \n        ) const\n        {\n            DLIB_ASSERT(0 <= interval && interval < intervals(),\n                \"\\tlong get_border_size(interval)\"\n                << \"\\n\\tInvalid interval value\"\n                << \"\\n\\t this:   \" << this\n                << \"\\n\\t interval: \" << interval \n            );\n\n            const double lobe_size = 2.0*(interval+1) + 1;\n            const double filter_size = 3*lobe_size;\n\n            const long bs = static_cast<long>(std::ceil(filter_size/2.0));\n            return bs;\n        }\n\n        long get_step_size (\n            long octave\n        ) const\n        {\n            DLIB_ASSERT(0 <= octave && octave < octaves(),\n                \"\\tlong get_step_size(octave)\"\n                << \"\\n\\tInvalid octave value\"\n                << \"\\n\\t this:   \" << this\n                << \"\\n\\t octave: \" << octave \n            );\n\n            return initial_step_size*static_cast<long>(std::pow(2.0, (double)octave)+0.5);\n        }\n\n        long nr (\n            long octave\n        ) const\n        {\n            DLIB_ASSERT(0 <= octave && octave < octaves(),\n                \"\\tlong nr(octave)\"\n                << \"\\n\\tInvalid octave value\"\n                << \"\\n\\t this:   \" << this\n                << \"\\n\\t octave: \" << octave \n            );\n\n            return pyramid[num_intervals*octave].nr();\n        }\n\n        long nc (\n            long octave\n        ) const\n        {\n            DLIB_ASSERT(0 <= octave && octave < octaves(),\n                \"\\tlong nc(octave)\"\n                << \"\\n\\tInvalid octave value\"\n                << \"\\n\\t this:   \" << this\n                << \"\\n\\t octave: \" << octave \n            );\n\n            return pyramid[num_intervals*octave].nc();\n        }\n\n        double get_value (\n            long octave,\n            long interval,\n            long r,\n            long c\n        ) const\n        {\n            DLIB_ASSERT(0 <= octave && octave < octaves() &&\n                        0 <= interval && interval < intervals() &&\n                        get_border_size(interval) <= r && r < nr(octave)-get_border_size(interval) &&\n                        get_border_size(interval) <= c && c < nc(octave)-get_border_size(interval),\n                \"\\tdouble get_value(octave, interval, r, c)\"\n                << \"\\n\\tInvalid inputs to this function\"\n                << \"\\n\\t this:      \" << this\n                << \"\\n\\t octave:    \" << octave \n                << \"\\n\\t interval:  \" << interval \n                << \"\\n\\t octaves:   \" << octaves() \n                << \"\\n\\t intervals: \" << intervals()\n                << \"\\n\\t r:         \" << r  \n                << \"\\n\\t c:         \" << c \n                << \"\\n\\t nr(octave): \" << nr(octave)  \n                << \"\\n\\t nc(octave): \" << nc(octave) \n                << \"\\n\\t get_border_size(interval): \" << get_border_size(interval) \n            );\n\n            return std::abs(pyramid[num_intervals*octave + interval][r][c]);\n        }\n\n        double get_laplacian (\n            long octave,\n            long interval,\n            long r,\n            long c\n        ) const\n        {\n            DLIB_ASSERT(0 <= octave && octave < octaves() &&\n                        0 <= interval && interval < intervals() &&\n                        get_border_size(interval) <= r && r < nr(octave)-get_border_size(interval) &&\n                        get_border_size(interval) <= c && c < nc(octave)-get_border_size(interval),\n                \"\\tdouble get_laplacian(octave, interval, r, c)\"\n                << \"\\n\\tInvalid inputs to this function\"\n                << \"\\n\\t this:      \" << this\n                << \"\\n\\t octave:    \" << octave \n                << \"\\n\\t interval:  \" << interval \n                << \"\\n\\t octaves:   \" << octaves() \n                << \"\\n\\t intervals: \" << intervals()\n                << \"\\n\\t r:         \" << r  \n                << \"\\n\\t c:         \" << c \n                << \"\\n\\t nr(octave): \" << nr(octave)  \n                << \"\\n\\t nc(octave): \" << nc(octave) \n                << \"\\n\\t get_border_size(interval): \" << get_border_size(interval) \n            );\n\n            // return the sign of the laplacian\n            if (pyramid[num_intervals*octave + interval][r][c] > 0)\n                return +1;\n            else\n                return -1;\n        }\n\n        long octaves (\n        ) const { return num_octaves; }\n\n        long intervals (\n        ) const { return num_intervals; }\n\n    private:\n\n        long num_octaves;\n        long num_intervals;\n        long initial_step_size;\n\n        typedef array2d<double> image_type;\n        typedef array<image_type> pyramid_type;\n\n        pyramid_type pyramid;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace hessian_pyramid_helpers\n    {\n        inline bool is_maximum_in_region(\n            const hessian_pyramid& pyr,\n            long o, \n            long i, \n            long r, \n            long c\n        )\n        {\n            // First check if this point is near the edge of the octave \n            // If it is then we say it isn't a maximum as these points are\n            // not as reliable.\n            if (i <= 0 || i+1 >= pyr.intervals())\n            {\n                return false;\n            }\n\n            const double val = pyr.get_value(o,i,r,c);\n\n            // now check if there are any bigger values around this guy\n            for (long ii = i-1; ii <= i+1; ++ii)\n            {\n                for (long rr = r-1; rr <= r+1; ++rr)\n                {\n                    for (long cc = c-1; cc <= c+1; ++cc)\n                    {\n                        if (pyr.get_value(o,ii,rr,cc) > val)\n                            return false;\n                    }\n                }\n            }\n\n            return true;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline const matrix<double,3,1> get_hessian_gradient (\n            const hessian_pyramid& pyr,\n            long o, \n            long i, \n            long r, \n            long c\n        )\n        {\n            matrix<double,3,1> grad;\n            grad(0) = (pyr.get_value(o,i,r,c+1) - pyr.get_value(o,i,r,c-1))/2.0;\n            grad(1) = (pyr.get_value(o,i,r+1,c) - pyr.get_value(o,i,r-1,c))/2.0;\n            grad(2) = (pyr.get_value(o,i+1,r,c) - pyr.get_value(o,i-1,r,c))/2.0;\n            return grad;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline const matrix<double,3,3> get_hessian_hessian (\n            const hessian_pyramid& pyr,\n            long o, \n            long i, \n            long r, \n            long c\n        )\n        {\n            matrix<double,3,3> hess;\n            const double val = pyr.get_value(o,i,r,c);\n\n            double Dxx = (pyr.get_value(o,i,r,c+1) + pyr.get_value(o,i,r,c-1)) - 2*val;\n            double Dyy = (pyr.get_value(o,i,r+1,c) + pyr.get_value(o,i,r-1,c)) - 2*val;\n            double Dss = (pyr.get_value(o,i+1,r,c) + pyr.get_value(o,i-1,r,c)) - 2*val;\n\n            double Dxy = (pyr.get_value(o,i,r+1,c+1) + pyr.get_value(o,i,r-1,c-1) -\n                          pyr.get_value(o,i,r-1,c+1) - pyr.get_value(o,i,r+1,c-1)) / 4.0;\n\n            double Dxs = (pyr.get_value(o,i+1,r,c+1) + pyr.get_value(o,i-1,r,c-1) -\n                          pyr.get_value(o,i-1,r,c+1) - pyr.get_value(o,i+1,r,c-1)) / 4.0;\n\n            double Dys = (pyr.get_value(o,i+1,r+1,c) + pyr.get_value(o,i-1,r-1,c) -\n                          pyr.get_value(o,i-1,r+1,c) - pyr.get_value(o,i+1,r-1,c)) / 4.0;\n\n\n            hess = Dxx, Dxy, Dxs,\n            Dxy, Dyy, Dys,\n            Dxs, Dys, Dss;\n\n            return hess;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline const interest_point interpolate_point (\n            const hessian_pyramid& pyr, \n            long o, \n            long i, \n            long r, \n            long c\n        )\n        {\n            dlib::vector<double,2> p(c,r);\n\n            dlib::vector<double,3> start_point(c,r,i);\n            dlib::vector<double,3> interpolated_point = -inv(get_hessian_hessian(pyr,o,i,r,c))*get_hessian_gradient(pyr,o,i,r,c);\n\n            //cout << \"inter: \" <<  trans(interpolated_point);\n\n            interest_point temp;\n            if (max(abs(interpolated_point)) < 0.5)\n            {\n                p = (start_point+interpolated_point)*pyr.get_step_size(o);\n                const double lobe_size = std::pow(2.0, o+1.0)*(i+interpolated_point.z()+1) + 1;\n                const double filter_size = 3*lobe_size;\n                const double scale = 1.2/9.0 * filter_size;\n\n                temp.center = p;\n                temp.scale = scale;\n                temp.score = pyr.get_value(o,i,r,c);\n                temp.laplacian = pyr.get_laplacian(o,i,r,c);\n            }\n            else\n            {\n                // this indicates to the caller that no interest point was found.\n                temp.score = -1;\n            }\n\n            return temp;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename Alloc>\n    void get_interest_points (\n        const hessian_pyramid& pyr,\n        double threshold,\n        std::vector<interest_point,Alloc>& result_points\n    )\n    {\n        DLIB_ASSERT(threshold >= 0,\n            \"\\tvoid get_interest_points()\"\n            << \"\\n\\t Invalid arguments to this function\"\n            << \"\\n\\t threshold: \" << threshold \n        );\n        using namespace std;\n        using namespace hessian_pyramid_helpers;\n\n        result_points.clear();\n\n        for (long o = 0; o < pyr.octaves(); ++o)\n        {\n            const long nr = pyr.nr(o);\n            const long nc = pyr.nc(o);\n\n            // do non-maximum suppression on all the intervals in the current octave and \n            // accumulate the results in result_points\n            for (long i = 1; i < pyr.intervals()-1;  i += 1)\n            {\n                const long border_size = pyr.get_border_size(i+1);\n                for (long r = border_size+1; r < nr - border_size-1; r += 1)\n                {\n                    for (long c = border_size+1; c < nc - border_size-1; c += 1)\n                    {\n                        double max_val = pyr.get_value(o,i,r,c);\n                        long max_i = i;\n                        long max_r = r;\n                        long max_c = c;\n\n\n                        // If the max point we found is really a maximum in its own region and\n                        // is big enough then add it to the results.\n                        if (max_val >= threshold && is_maximum_in_region(pyr, o, max_i, max_r, max_c))\n                        {\n                            //cout << max_val << endl;\n                            interest_point sp = interpolate_point (pyr, o, max_i, max_r, max_c);\n                            if (sp.score >= threshold)\n                            {\n                                result_points.push_back(sp);\n                            }\n                        }\n\n                    }\n                }\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename Alloc>\n    void get_interest_points (\n        const hessian_pyramid& pyr,\n        double threshold,\n        std_vector_c<interest_point,Alloc>& result_points\n    )\n    /*!\n        This function is just an overload that automatically casts std_vector_c objects\n        into std::vector objects.  (Usually this is automatic but the template argument\n        there messes up the conversion so we have to do it explicitly)\n    !*/\n    {\n        std::vector<interest_point,Alloc>& v = result_points;\n        get_interest_points(pyr, threshold, v);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif  // DLIB_HESSIAN_PYRAMId_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/hessian_pyramid_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_HESSIAN_PYRAMId_ABSTRACT_Hh_\n#ifdef DLIB_HESSIAN_PYRAMId_ABSTRACT_Hh_\n\n#include \"../image_transforms/integral_image_abstract.h\"\n#include \"../noncopyable.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n    class hessian_pyramid : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                - octaves() == 0\n                - intervals() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an image pyramid where each level in the\n                pyramid holds determinants of Hessian matrices for the original \n                input image.  This object can be used to find stable interest\n                points in an image.  For further details consult the following\n                papers.\n\n                This object is an implementation of the fast Hessian pyramid \n                as described in the paper: \n                   SURF: Speeded Up Robust Features\n                   By Herbert Bay, Tinne Tuytelaars, and Luc Van Gool\n\n                This implementation was also influenced by the very well documented\n                OpenSURF library and its corresponding description of how the fast\n                Hessian algorithm functions:  \n                    Notes on the OpenSURF Library\n                    Christopher Evans\n        !*/\n    public:\n\n        template <typename integral_image_type>\n        void build_pyramid (\n            const integral_image_type& img,\n            long num_octaves,\n            long num_intervals,\n            long initial_step_size\n        );\n        /*!\n            requires\n                - num_octaves > 0\n                - num_intervals > 0\n                - initial_step_size > 0\n                - integral_image_type == an object such as dlib::integral_image or another\n                  type that implements the interface defined in image_transforms/integral_image_abstract.h\n            ensures\n                - #get_step_size(0) == initial_step_size\n                - #octaves() == num_octaves\n                - #intervals() == num_intervals\n                - creates a Hessian pyramid from the given input image.  \n        !*/\n\n        long octaves (\n        ) const;\n        /*!\n            ensures\n                - returns the number of octaves in this pyramid\n        !*/\n\n        long intervals (\n        ) const; \n        /*!\n            ensures\n                - returns the number of intervals in this pyramid\n        !*/\n\n        long get_border_size (\n            long interval\n        ) const;\n        /*!\n            requires\n                - 0 <= interval < intervals()\n            ensures\n                - Each interval of the pyramid has a certain sized border region where we\n                  can't compute the Hessian values since they are too close to the edge\n                  of the input image.  This function returns the size of that border.\n        !*/\n\n        long get_step_size (\n            long octave\n        ) const;\n        /*!\n            requires\n                - 0 <= octave < octaves()\n            ensures\n                - Each octave has a step size value.  This value determines how many\n                  input image pixels separate each pixel in the given pyramid octave.\n                  As the octave gets larger (i.e. as it goes to the top of the pyramid) the\n                  step size gets bigger and thus the pyramid narrows.\n        !*/\n\n        long nr (\n            long octave\n        ) const;\n        /*!\n            requires\n                - 0 <= octave < octaves()\n            ensures\n                - returns the number of rows there are per layer in the given \n                  octave of pyramid\n        !*/\n\n        long nc (\n            long octave\n        ) const;\n        /*!\n            requires\n                - 0 <= octave < octaves()\n            ensures\n                - returns the number of columns there are per layer in the given \n                  octave of pyramid\n        !*/\n\n        double get_value (\n            long octave,\n            long interval,\n            long r,\n            long c\n        ) const;\n        /*!\n            requires\n                - 0 <= octave < octaves()\n                - 0 <= interval < intervals()\n                - Let BS == get_border_size(interval): then\n                    - BS <= r < nr(octave)-BS\n                    - BS <= c < nc(octave)-BS\n            ensures\n                - returns the determinant of the Hessian from the given octave and interval\n                  of the pyramid.  The specific point sampled at this pyramid level is\n                  the one that corresponds to the input image point (point(r,c)*get_step_size(octave)).\n        !*/\n\n        double get_laplacian (\n            long octave,\n            long interval,\n            long r,\n            long c\n        ) const;\n        /*!\n            requires\n                - 0 <= octave < octaves()\n                - 0 <= interval < intervals()\n                - Let BS == get_border_size(interval): then\n                    - BS <= r < nr(octave)-BS\n                    - BS <= c < nc(octave)-BS\n            ensures\n                - returns the sign of the laplacian for the given octave and interval\n                  of the pyramid.  The specific point sampled at this pyramid level is\n                  the one that corresponds to the input image point (point(r,c)*get_step_size(octave)).\n                - The laplacian is the trace of the Hessian at the given point.  So this \n                  function returns either +1 or -1 depending on this number's sign.  This\n                  value can be used to distinguish bright blobs on dark backgrounds from\n                  the reverse.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct interest_point\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object contains the interest points found using the \n                hessian_pyramid object.  Its fields have the following\n                meanings:\n                    - center == the x/y location of the center of the interest point\n                      (in image space coordinates.  y gives the row and x gives the\n                      column in the image)\n                    - scale == the scale at which the point was detected.  This is a number\n                      >= 1.  If it is 1 then it means the interest point was detected at\n                      the lowest scale in the image pyramid.  Larger numbers indicate that\n                      the interest point is from high up in the image pyramid.  For\n                      example, a scale of 4 would mean the interest point was located at a\n                      point in the pyramid where the image had been shrunk by a factor of 4.\n                    - score == the determinant of the Hessian for the interest point\n                    - laplacian == the sign of the laplacian for the interest point\n        !*/\n\n        interest_point() : scale(0), score(0), laplacian(0) {}\n\n        dlib::vector<double,2> center;\n        double scale;\n        double score;\n        double laplacian;\n\n        bool operator < (const interest_point& p) const { return score < p.score; }\n        /*!\n            This function is here so you can sort interest points according to \n            their scores\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const interest_point& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support\n    !*/\n\n    void deserialize (\n        interest_point& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename Alloc>\n    void get_interest_points (\n        const hessian_pyramid& pyr,\n        double threshold,\n        std::vector<interest_point,Alloc>& result_points\n    )\n    /*!\n        requires\n            - threshold >= 0\n        ensures\n            - extracts interest points from the pyramid pyr and stores them into\n              result_points (note that result_points is cleared before these new interest\n              points are added to it).\n            - Only interest points with determinant values in the pyramid larger than\n              threshold are output.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif  // DLIB_HESSIAN_PYRAMId_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/hog.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_HoG_Hh_\n#define DLIB_HoG_Hh_\n\n#include \"hog_abstract.h\"\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../array2d.h\"\n#include \"../geometry.h\"\n#include <cmath>\n\nnamespace dlib\n{\n    enum \n    {\n        hog_no_interpolation,\n        hog_angle_interpolation,\n        hog_full_interpolation,\n        hog_signed_gradient,\n        hog_unsigned_gradient\n    };\n\n    template <\n        unsigned long cell_size_,\n        unsigned long block_size_,\n        unsigned long cell_stride_,\n        unsigned long num_orientation_bins_,\n        int           gradient_type_,\n        int           interpolation_type_\n        >\n    class hog_image : noncopyable\n    {\n        COMPILE_TIME_ASSERT(cell_size_ > 1);\n        COMPILE_TIME_ASSERT(block_size_ > 0);\n        COMPILE_TIME_ASSERT(cell_stride_ > 0);\n        COMPILE_TIME_ASSERT(num_orientation_bins_ > 0);\n\n        COMPILE_TIME_ASSERT( gradient_type_ == hog_signed_gradient ||\n                             gradient_type_ == hog_unsigned_gradient);\n\n        COMPILE_TIME_ASSERT( interpolation_type_ == hog_no_interpolation ||\n                             interpolation_type_ == hog_angle_interpolation ||\n                             interpolation_type_ == hog_full_interpolation );\n\n\n    public:\n\n        const static unsigned long cell_size = cell_size_;\n        const static unsigned long block_size = block_size_;\n        const static unsigned long cell_stride = cell_stride_;\n        const static unsigned long num_orientation_bins = num_orientation_bins_;\n        const static int           gradient_type = gradient_type_;\n        const static int           interpolation_type = interpolation_type_;\n\n        const static long min_size = cell_size*block_size+2;\n\n        typedef matrix<double, block_size*block_size*num_orientation_bins, 1> descriptor_type;\n\n        hog_image (\n        ) : \n            num_block_rows(0),\n            num_block_cols(0)\n        {}\n\n        void clear (\n        )\n        {\n            num_block_rows = 0;\n            num_block_cols = 0;\n            hist_cells.clear();\n        }\n\n        void copy_configuration (\n            const hog_image&\n        ){}\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        )\n        {\n            COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<image_type>::pixel_type>::has_alpha == false );\n            load_impl(mat(img));\n        }\n\n        inline void unload(\n        ) { clear(); }\n\n        inline unsigned long size (\n        ) const { return static_cast<unsigned long>(nr()*nc()); }\n\n        inline long nr (\n        ) const { return num_block_rows; }\n\n        inline long nc (\n        ) const { return num_block_cols; }\n\n        long get_num_dimensions (\n        ) const\n        {\n            return block_size*block_size*num_orientation_bins;\n        }\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( 0 <= row && row < nr() &&\n                         0 <= col && col < nc(),\n                \"\\t descriptor_type hog_image::operator()()\"\n                << \"\\n\\t invalid row or col argument\"\n                << \"\\n\\t row:  \" << row\n                << \"\\n\\t col:  \" << col \n                << \"\\n\\t nr(): \" << nr() \n                << \"\\n\\t nc(): \" << nc() \n                << \"\\n\\t this: \" << this\n                );\n\n            row *= cell_stride;\n            col *= cell_stride;\n            ++row;\n            ++col;\n\n            int feat = 0;\n            for (unsigned long r = 0; r < block_size; ++r)\n            {\n                for (unsigned long c = 0; c < block_size; ++c)\n                {\n                    for (unsigned long i = 0; i < num_orientation_bins; ++i)\n                    {\n                        des(feat++) = hist_cells[row+r][col+c].values[i];\n                    }\n                }\n            }\n\n            des /= length(des) + 1e-8;\n\n            return des;\n        }\n\n        const rectangle get_block_rect (\n            long row,\n            long col\n        ) const\n        {\n            row *= cell_stride;\n            col *= cell_stride;\n\n            row *= cell_size;\n            col *= cell_size;\n\n            // do this to account for the 1 pixel padding we use all around the image\n            ++row;\n            ++col;\n\n            return rectangle(col, row, col+cell_size*block_size-1, row+cell_size*block_size-1);\n        }\n\n        const point image_to_feat_space (\n            const point& p\n        ) const\n        {\n\n            const long half_block = block_size/2;\n            if ((block_size%2) == 0)\n            {\n                return point(((p.x()-1)/(long)cell_size - half_block)/(long)cell_stride,\n                             ((p.y()-1)/(long)cell_size - half_block)/(long)cell_stride);\n            }\n            else\n            {\n                return point(((p.x()-1-(long)cell_size/2)/(long)cell_size - half_block)/(long)cell_stride,\n                             ((p.y()-1-(long)cell_size/2)/(long)cell_size - half_block)/(long)cell_stride);\n            }\n        }\n\n        const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(image_to_feat_space(rect.tl_corner()), image_to_feat_space(rect.br_corner()));\n        }\n\n        const point feat_to_image_space (\n            const point& p\n        ) const\n        {\n            const long half_block = block_size/2;\n            if ((block_size%2) == 0)\n            {\n                return point((p.x()*cell_stride + half_block)*cell_size + 1,\n                             (p.y()*cell_stride + half_block)*cell_size + 1);\n            }\n            else\n            {\n                return point((p.x()*cell_stride + half_block)*cell_size + 1 + cell_size/2,\n                             (p.y()*cell_stride + half_block)*cell_size + 1 + cell_size/2);\n            }\n        }\n\n        const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(feat_to_image_space(rect.tl_corner()), feat_to_image_space(rect.br_corner()));\n        }\n\n\n\n        // these _PRIVATE_ functions are only here as a workaround for a bug in visual studio 2005.  \n        void _PRIVATE_serialize (std::ostream& out) const\n        {\n            // serialize hist_cells\n            serialize(hist_cells.nc(),out);\n            serialize(hist_cells.nr(),out);\n            hist_cells.reset();\n            while (hist_cells.move_next())\n                serialize(hist_cells.element().values,out);\n            hist_cells.reset();\n\n\n            serialize(num_block_rows, out);\n            serialize(num_block_cols, out);\n        }\n\n        void _PRIVATE_deserialize (std::istream& in )\n        {\n            // deserialize item.hist_cells\n            long nc, nr;\n            deserialize(nc,in);\n            deserialize(nr,in);\n            hist_cells.set_size(nr,nc);\n            while (hist_cells.move_next())\n                deserialize(hist_cells.element().values,in); \n            hist_cells.reset();\n\n\n            deserialize(num_block_rows, in);\n            deserialize(num_block_cols, in);\n        }\n\n    private:\n\n        template <\n            typename image_type\n            >\n        void load_impl (\n            const image_type& img\n        )\n        {\n            // Note that we keep a border of 1 pixel all around the image so that we don't have\n            // to worry about running outside the image when computing the horizontal and vertical \n            // gradients.\n\n            // Note also that we have a border of unused cells around the hist_cells array so that we\n            // don't have to worry about edge effects when doing the interpolation in the main loop\n            // below.\n\n\n            // check if the window is just too small\n            if (img.nr() < min_size || img.nc() < min_size)\n            {\n                // If the image is smaller than our windows then there aren't any descriptors at all!\n                num_block_rows = 0;\n                num_block_cols = 0;\n                return;\n            }\n\n            // Make sure we have the right number of cell histograms and that they are\n            // all set to zero.\n            hist_cells.set_size((img.nr()-2)/cell_size+2, (img.nc()-2)/cell_size+2);\n            for (long r = 0; r < hist_cells.nr(); ++r)\n            {\n                for (long c = 0; c < hist_cells.nc(); ++c)\n                {\n                    hist_cells[r][c].zero();\n                }\n            }\n\n\n            // loop over all the histogram cells and fill them out\n            for (long rh = 1; rh < hist_cells.nr()-1; ++rh)\n            {\n                for (long ch = 1; ch < hist_cells.nc()-1; ++ch)\n                {\n                    // Fill out the current histogram cell.\n                    // First, figure out the row and column offsets into the image for the current histogram cell.\n                    const long roff = (rh-1)*cell_size + 1;\n                    const long coff = (ch-1)*cell_size + 1;\n\n                    for (long r = 0; r < (long)cell_size; ++r)\n                    {\n                        for (long c = 0; c < (long)cell_size; ++c)\n                        {\n                            unsigned long left; \n                            unsigned long right;\n                            unsigned long top;   \n                            unsigned long bottom; \n\n                            assign_pixel(left,   img(r+roff,c+coff-1));\n                            assign_pixel(right,  img(r+roff,c+coff+1));\n                            assign_pixel(top,    img(r+roff-1,c+coff));\n                            assign_pixel(bottom, img(r+roff+1,c+coff));\n\n                            double grad_x = (long)right-(long)left;\n                            double grad_y = (long)top-(long)bottom;\n\n                            // obtain the angle of the gradient.  Make sure it is scaled between 0 and 1.\n                            double angle = std::max(0.0, std::atan2(grad_y, grad_x)/pi + 1)/2;\n\n\n                            if (gradient_type == hog_unsigned_gradient)\n                            {\n                                angle *= 2;\n                                if (angle >= 1)\n                                    angle -= 1;\n                            }\n\n\n                            // now scale angle to between 0 and num_orientation_bins\n                            angle *= num_orientation_bins;\n\n\n                            const double strength = std::sqrt(grad_y*grad_y + grad_x*grad_x);\n\n\n                            if (interpolation_type == hog_no_interpolation)\n                            {\n                                // no interpolation\n                                hist_cells[rh][ch].values[round_to_int(angle)%num_orientation_bins] += strength;\n                            }\n                            else  // if we should do some interpolation\n                            {\n                                unsigned long quantized_angle_lower = static_cast<unsigned long>(std::floor(angle));\n                                unsigned long quantized_angle_upper = static_cast<unsigned long>(std::ceil(angle));\n\n                                quantized_angle_lower %= num_orientation_bins;\n                                quantized_angle_upper %= num_orientation_bins;\n\n                                const double angle_split = (angle-std::floor(angle));\n                                const double upper_strength = angle_split*strength;\n                                const double lower_strength = (1-angle_split)*strength;\n\n                                if (interpolation_type == hog_angle_interpolation)\n                                {\n                                    // Stick into gradient histogram.  Note that we linearly interpolate between neighboring\n                                    // histogram buckets.\n                                    hist_cells[rh][ch].values[quantized_angle_lower] += lower_strength;\n                                    hist_cells[rh][ch].values[quantized_angle_upper] += upper_strength;\n                                }\n                                else // here we do hog_full_interpolation\n                                {\n                                    const double center_r = (cell_size-1)/2.0;\n                                    const double center_c = (cell_size-1)/2.0;\n\n                                    const double lin_neighbor_r = std::abs(center_r - r)/cell_size;\n                                    const double lin_main_r = 1-lin_neighbor_r;\n\n                                    const double lin_neighbor_c = std::abs(center_c - c)/cell_size;\n                                    const double lin_main_c = 1-lin_neighbor_c;\n\n                                    // Which neighboring cells we interpolate into depends on which\n                                    // corner of our main cell we are nearest.\n                                    if (r < center_r)\n                                    {\n                                        if (c < center_c)\n                                        {\n                                            hist_cells[rh][ch].values[quantized_angle_upper] += upper_strength   * lin_main_r*lin_main_c;\n                                            hist_cells[rh][ch].values[quantized_angle_lower] += lower_strength   * lin_main_r*lin_main_c;\n\n                                            hist_cells[rh-1][ch].values[quantized_angle_upper] += upper_strength * lin_neighbor_r*lin_main_c;\n                                            hist_cells[rh-1][ch].values[quantized_angle_lower] += lower_strength * lin_neighbor_r*lin_main_c;\n\n                                            hist_cells[rh][ch-1].values[quantized_angle_upper] += upper_strength * lin_neighbor_c*lin_main_r;\n                                            hist_cells[rh][ch-1].values[quantized_angle_lower] += lower_strength * lin_neighbor_c*lin_main_r;\n\n                                            hist_cells[rh-1][ch-1].values[quantized_angle_upper] += upper_strength * lin_neighbor_c*lin_neighbor_r;\n                                            hist_cells[rh-1][ch-1].values[quantized_angle_lower] += lower_strength * lin_neighbor_c*lin_neighbor_r;\n                                        }\n                                        else\n                                        {\n                                            hist_cells[rh][ch].values[quantized_angle_upper] += upper_strength   * lin_main_r*lin_main_c;\n                                            hist_cells[rh][ch].values[quantized_angle_lower] += lower_strength   * lin_main_r*lin_main_c;\n\n                                            hist_cells[rh-1][ch].values[quantized_angle_upper] += upper_strength * lin_neighbor_r*lin_main_c;\n                                            hist_cells[rh-1][ch].values[quantized_angle_lower] += lower_strength * lin_neighbor_r*lin_main_c;\n\n                                            hist_cells[rh][ch+1].values[quantized_angle_upper] += upper_strength * lin_neighbor_c*lin_main_r;\n                                            hist_cells[rh][ch+1].values[quantized_angle_lower] += lower_strength * lin_neighbor_c*lin_main_r;\n\n                                            hist_cells[rh-1][ch+1].values[quantized_angle_upper] += upper_strength * lin_neighbor_c*lin_neighbor_r;\n                                            hist_cells[rh-1][ch+1].values[quantized_angle_lower] += lower_strength * lin_neighbor_c*lin_neighbor_r;\n                                        }\n                                    }\n                                    else \n                                    {\n                                        if (c < center_c)\n                                        {\n                                            hist_cells[rh][ch].values[quantized_angle_upper] += upper_strength   * lin_main_r*lin_main_c;\n                                            hist_cells[rh][ch].values[quantized_angle_lower] += lower_strength   * lin_main_r*lin_main_c;\n\n                                            hist_cells[rh+1][ch].values[quantized_angle_upper] += upper_strength * lin_neighbor_r*lin_main_c;\n                                            hist_cells[rh+1][ch].values[quantized_angle_lower] += lower_strength * lin_neighbor_r*lin_main_c;\n\n                                            hist_cells[rh][ch-1].values[quantized_angle_upper] += upper_strength * lin_neighbor_c*lin_main_r;\n                                            hist_cells[rh][ch-1].values[quantized_angle_lower] += lower_strength * lin_neighbor_c*lin_main_r;\n\n                                            hist_cells[rh+1][ch-1].values[quantized_angle_upper] += upper_strength * lin_neighbor_c*lin_neighbor_r;\n                                            hist_cells[rh+1][ch-1].values[quantized_angle_lower] += lower_strength * lin_neighbor_c*lin_neighbor_r;\n                                        }\n                                        else\n                                        {\n                                            hist_cells[rh][ch].values[quantized_angle_upper] += upper_strength   * lin_main_r*lin_main_c;\n                                            hist_cells[rh][ch].values[quantized_angle_lower] += lower_strength   * lin_main_r*lin_main_c;\n\n                                            hist_cells[rh+1][ch].values[quantized_angle_upper] += upper_strength * lin_neighbor_r*lin_main_c;\n                                            hist_cells[rh+1][ch].values[quantized_angle_lower] += lower_strength * lin_neighbor_r*lin_main_c;\n\n                                            hist_cells[rh][ch+1].values[quantized_angle_upper] += upper_strength * lin_neighbor_c*lin_main_r;\n                                            hist_cells[rh][ch+1].values[quantized_angle_lower] += lower_strength * lin_neighbor_c*lin_main_r;\n\n                                            hist_cells[rh+1][ch+1].values[quantized_angle_upper] += upper_strength * lin_neighbor_c*lin_neighbor_r;\n                                            hist_cells[rh+1][ch+1].values[quantized_angle_lower] += lower_strength * lin_neighbor_c*lin_neighbor_r;\n                                        }\n                                    }\n                                }\n                            }\n\n\n                        }\n                    }\n                }\n            }\n\n\n            // Now figure out how many blocks we should have.  Note again that the hist_cells has a border of \n            // unused cells (thats where that -2 comes from).\n            num_block_rows = (hist_cells.nr()-2 - (block_size-1) + cell_stride - 1)/cell_stride; \n            num_block_cols = (hist_cells.nc()-2 - (block_size-1) + cell_stride - 1)/cell_stride; \n\n        }\n\n        unsigned long round_to_int(\n            double val\n        ) const\n        {\n            return static_cast<unsigned long>(std::floor(val + 0.5));\n        }\n\n        struct histogram\n        {\n            void zero()\n            {\n                for (unsigned long i = 0; i < num_orientation_bins; ++i)\n                    values[i] = 0;\n            }\n            double values[num_orientation_bins];\n        };\n\n        array2d<histogram> hist_cells;\n\n        mutable descriptor_type des;\n\n        long num_block_rows;\n        long num_block_cols;\n\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long T1,\n        unsigned long T2,\n        unsigned long T3,\n        unsigned long T4,\n        int           T5,\n        int           T6 \n        >\n    void serialize (\n        const hog_image<T1,T2,T3,T4,T5,T6>& item,\n        std::ostream& out\n    )\n    {\n        item._PRIVATE_serialize(out);\n    }\n\n    template <\n        unsigned long T1,\n        unsigned long T2,\n        unsigned long T3,\n        unsigned long T4,\n        int           T5,\n        int           T6 \n        >\n    void deserialize (\n        hog_image<T1,T2,T3,T4,T5,T6>& item,\n        std::istream& in \n    )\n    {\n        item._PRIVATE_deserialize(in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HoG_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/hog_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_HoG_ABSTRACT_Hh_\n#ifdef DLIB_HoG_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../array2d.h\"\n#include \"../geometry.h\"\n#include <cmath>\n\nnamespace dlib\n{\n    enum \n    {\n        hog_no_interpolation,\n        hog_angle_interpolation,\n        hog_full_interpolation,\n        hog_signed_gradient,\n        hog_unsigned_gradient\n    };\n\n    template <\n        unsigned long cell_size_,\n        unsigned long block_size_,\n        unsigned long cell_stride_,\n        unsigned long num_orientation_bins_,\n        int           gradient_type_,\n        int           interpolation_type_\n        >\n    class hog_image : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON TEMPLATE PARAMETERS \n                - cell_size_ > 1\n                - block_size_ > 0\n                - cell_stride_ > 0\n                - num_orientation_bins_ > 0\n                - gradient_type_ == hog_signed_gradient or hog_unsigned_gradient\n                - interpolation_type_ == hog_no_interpolation, hog_angle_interpolation, or \n                                         hog_full_interpolation\n\n            INITIAL VALUE\n                 - size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for performing the image feature extraction algorithm\n                described in the following paper:\n                    Histograms of Oriented Gradients for Human Detection\n                    by Navneet Dalal and Bill Triggs\n\n                \n                To summarize the technique, this object tiles non-overlapping cells over an \n                image.  Each of these cells is a box that is cell_size by cell_size pixels \n                in size.  Each cell contains an array of size num_orientation_bins.  The array \n                in a cell is used to store a histogram of all the edge orientations contained\n                within the cell's image region.  \n\n                Once the grid of cells and their histograms has been computed (via load())\n                you can obtain descriptors for each \"block\" in the image.  A block is just a\n                group of cells and blocks are allowed to overlap.  Each block is square and\n                made up of block_size*block_size cells.  So when you call operator()(r,c)\n                what you obtain is a vector that is just a bunch of cell histograms that\n                have been concatenated (and length normalized).\n\n                The template arguments control the various parameters of this algorithm.\n\n                The interpolation_type parameter controls the amount of interpolation\n                that happens during the creation of the edge orientation histograms.  It\n                varies from no interpolation at all to full spatial and angle interpolation.\n                \n                Angle interpolation means that an edge doesn't just go into its nearest \n                histogram bin but instead gets interpolated into its two nearest neighbors.\n                Similarly, spatial interpolation means that an edge doesn't just go into\n                the cell it is in but it also contributes to nearby cells depending on how\n                close they are.  \n\n                The gradient_type parameter controls how edge orientations are measured.  \n                Consider the following ASCII art:\n                    signed gradients:           unsigned gradients:\n                           /\\                           |\n                           ||                           |\n                       <---  ---->                ------+------\n                           ||                           |\n                           \\/                           |\n\n                An image is full of gradients caused by edges between objects.  The direction \n                of a gradient is determined by which end of it has pixels of highest intensity.  \n                So for example, suppose you had a picture containing black and white stripes.  \n                Then the magnitude of the gradient at each point in the image tells you if you \n                are on the edge of a stripe and the gradient's orientation tells you which \n                direction you have to move get into the white stripe.   \n\n                Signed gradients preserve this direction information while unsigned gradients\n                do not.  An unsigned gradient will only tell you the orientation of the stripe\n                but not which direction leads to the white stripe.   \n\n                Finally, the cell_stride parameter controls how much overlap you get between\n                blocks.  The maximum amount of overlap is obtained when cell_stride == 1.\n                At the other extreme, you would have no overlap if cell_stride == block_size. \n\n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be protected\n                by a mutex lock except for the case where you are copying the configuration \n                (via copy_configuration()) of a hog_image object to many other threads.  \n                In this case, it is safe to copy the configuration of a shared object so long\n                as no other operations are performed on it.\n        !*/\n\n    public:\n\n        const static unsigned long cell_size = cell_size_;\n        const static unsigned long block_size = block_size_;\n        const static unsigned long cell_stride = cell_stride_;\n        const static unsigned long num_orientation_bins = num_orientation_bins_;\n        const static int           gradient_type = gradient_type_;\n        const static int           interpolation_type = interpolation_type_;\n\n        const static long min_size = cell_size*block_size+2;\n\n        typedef matrix<double, block_size*block_size*num_orientation_bins, 1> descriptor_type;\n\n        hog_image (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - this object will have its initial value\n        !*/\n\n        void copy_configuration (\n            const hog_image& item\n        );\n        /*!\n            ensures\n                - copies all the state information of item into *this, except for state \n                  information populated by load().  More precisely, given two hog_image \n                  objects H1 and H2, the following sequence of instructions should always \n                  result in both of them having the exact same state.\n                    H2.copy_configuration(H1);\n                    H1.load(img);\n                    H2.load(img);\n        !*/\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type is a dlib::matrix or something convertible to a matrix\n                  via mat().\n                - pixel_traits<typename image_traits<image_type>::pixel_type>::has_alpha == false\n            ensures\n                - if (img.nr() < min_size || img.nc() < min_size) then\n                    - the image is too small so we don't compute anything on it\n                    - #size() == 0\n                - else\n                    - generates a HOG image from the given image.   \n                    - #size() > 0\n        !*/\n\n        inline void unload (\n        );\n        /*!\n            ensures\n                - #nr() == 0\n                - #nc() == 0\n                - clears only the state information which is populated by load().  For \n                  example, let H be a hog_image object.  Then consider the two sequences \n                  of instructions:\n                    Sequence 1:\n                        H.load(img);      \n                        H.unload();\n                        H.load(img);\n\n                    Sequence 2:\n                        H.load(img);\n                  Both sequence 1 and sequence 2 should have the same effect on H.  \n        !*/\n\n        inline unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns nr()*nc()\n        !*/\n\n        inline long nr (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in this HOG image\n        !*/\n\n        inline long nc (\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns in this HOG image\n        !*/\n\n        long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns the number of dimensions in the feature vectors generated by\n                  this object.  \n                - In particular, returns the value block_size*block_size*num_orientation_bins\n        !*/\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const;\n        /*!\n            requires\n                - 0 <= row < nr()\n                - 0 <= col < nc()\n            ensures\n                - returns the descriptor for the HOG block at the given row and column.  This descriptor \n                  will include information from a window that is located at get_block_rect(row,col) in\n                  the original image given to load().\n                - The returned descriptor vector will have get_num_dimensions() elements.\n        !*/\n\n        const rectangle get_block_rect (\n            long row,\n            long col\n        ) const;\n        /*!\n            ensures\n                - returns a rectangle that tells you what part of the original image is associated\n                  with a particular HOG block.  That is, what part of the input image is associated\n                  with (*this)(row,col).\n                - The returned rectangle will be cell_size*block_size pixels wide and tall.\n        !*/\n\n        const point image_to_feat_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - Each local feature is extracted from a certain point in the input image.\n                  This function returns the identity of the local feature corresponding\n                  to the image location p.  Or in other words, let P == image_to_feat_space(p), \n                  then (*this)(P.y(),P.x()) == the local feature closest to, or centered at, \n                  the point p in the input image.  Note that some image points might not have \n                  corresponding feature locations.  E.g. border points or points outside the \n                  image.  In these cases the returned point will be outside get_rect(*this).\n        !*/\n\n        const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns rectangle(image_to_feat_space(rect.tl_corner()), image_to_feat_space(rect.br_corner()));\n                  (i.e. maps a rectangle from image space to feature space)\n        !*/\n\n        const point feat_to_image_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - returns the location in the input image space corresponding to the center\n                  of the local feature at point p.  In other words, this function computes\n                  the inverse of image_to_feat_space().  Note that it may only do so approximately, \n                  since more than one image location might correspond to the same local feature.  \n                  That is, image_to_feat_space() might not be invertible so this function gives \n                  the closest possible result.\n        !*/\n\n        const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - return rectangle(feat_to_image_space(rect.tl_corner()), feat_to_image_space(rect.br_corner()));\n                  (i.e. maps a rectangle from feature space to image space)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long T1,\n        unsigned long T2,\n        unsigned long T3,\n        unsigned long T4,\n        int           T5,\n        int           T6 \n        >\n    void serialize (\n        const hog_image<T1,T2,T3,T4,T5,T6>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    template <\n        unsigned long T1,\n        unsigned long T2,\n        unsigned long T3,\n        unsigned long T4,\n        int           T5,\n        int           T6 \n        >\n    void deserialize (\n        hog_image<T1,T2,T3,T4,T5,T6>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_HoG_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/nearest_neighbor_feature_image.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_NEAREST_NEIGHBOR_FeATURE_IMAGE_Hh_\n#define DLIB_NEAREST_NEIGHBOR_FeATURE_IMAGE_Hh_\n\n#include \"nearest_neighbor_feature_image_abstract.h\"\n#include <vector>\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class nearest_neighbor_feature_image : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                - nn_feats.size() == 1\n\n            CONVENTION\n                - nn_feats.size() == 1\n\n        !*/\n\n    public:\n\n        typedef std::vector<std::pair<unsigned int,double> > descriptor_type;\n\n        nearest_neighbor_feature_image (\n        ); \n\n        void clear (\n        );\n\n        void copy_configuration (\n            const feature_extractor& item\n        );\n\n        void copy_configuration (\n            const nearest_neighbor_feature_image& item\n        );\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        );\n\n        inline unsigned long size (\n        ) const;\n\n        inline long nr (\n        ) const;\n\n        inline long nc (\n        ) const;\n\n        inline long get_num_dimensions (\n        ) const;\n\n        template <typename vector_type>\n        void set_basis (\n            const vector_type& new_basis\n        );\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const;\n\n        inline const rectangle get_block_rect (\n            long row,\n            long col\n        ) const;\n\n        inline const point image_to_feat_space (\n            const point& p\n        ) const;\n\n        inline const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const;\n\n        inline const point feat_to_image_space (\n            const point& p\n        ) const;\n\n        inline const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const;\n\n        template <typename T>\n        friend void serialize (\n            const nearest_neighbor_feature_image<T>& item,\n            std::ostream& out\n        );\n\n        template <typename T>\n        friend void deserialize (\n            nearest_neighbor_feature_image<T>& item,\n            std::istream& in \n        );\n\n    private:\n\n        array2d<unsigned long> feats;\n        feature_extractor fe;\n        std::vector<typename feature_extractor::descriptor_type> basis;\n\n        // This is a transient variable.  It is just here so it doesn't have to be\n        // reallocated over and over inside operator()\n        mutable descriptor_type nn_feats;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const nearest_neighbor_feature_image<T>& item,\n        std::ostream& out\n    )\n    {\n        serialize(item.feats, out);\n        serialize(item.fe, out);\n        serialize(item.basis, out);\n    }\n\n    template <typename T>\n    void deserialize (\n        nearest_neighbor_feature_image<T>& item,\n        std::istream& in \n    )\n    {\n        deserialize(item.feats, in);\n        deserialize(item.fe, in);\n        deserialize(item.basis, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                        nearest_neighbor_feature_image member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    nearest_neighbor_feature_image<feature_extractor>::\n    nearest_neighbor_feature_image (\n    )  \n    {\n        nn_feats.resize(1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void nearest_neighbor_feature_image<feature_extractor>::\n    clear (\n    )\n    {\n        feats.clear();\n        fe.clear();\n        basis.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void nearest_neighbor_feature_image<feature_extractor>::\n    copy_configuration (\n        const feature_extractor& item\n    )\n    {\n        fe.copy_configuration(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void nearest_neighbor_feature_image<feature_extractor>::\n    copy_configuration (\n        const nearest_neighbor_feature_image& item\n    )\n    {\n        fe.copy_configuration(item.fe);\n        basis = item.basis;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    template <\n        typename image_type\n        >\n    void nearest_neighbor_feature_image<feature_extractor>::\n    load (\n        const image_type& img\n    )\n    {\n        fe.load(img);\n\n        feats.set_size(fe.nr(), fe.nc());\n\n        // find the nearest neighbor for each feature vector and store the\n        // result in feats.\n        for (long r = 0; r < feats.nr(); ++r)\n        {\n            for (long c = 0; c < feats.nc(); ++c)\n            {\n                const typename feature_extractor::descriptor_type& local_feat = fe(r,c);\n\n                double best_dist = std::numeric_limits<double>::infinity();\n                unsigned long best_idx = 0;\n                for (unsigned long i = 0; i < basis.size(); ++i)\n                {\n                    double dist = length_squared(local_feat - basis[i]);\n                    if (dist < best_dist)\n                    {\n                        best_dist = dist;\n                        best_idx = i;\n                    }\n                }\n\n                feats[r][c] = best_idx;\n            }\n        }\n\n        fe.unload();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    unsigned long nearest_neighbor_feature_image<feature_extractor>::\n    size (\n    ) const\n    {\n        return feats.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    long nearest_neighbor_feature_image<feature_extractor>::\n    nr (\n    ) const\n    {\n        return feats.nr();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    long nearest_neighbor_feature_image<feature_extractor>::\n    nc (\n    ) const\n    {\n        return feats.nc();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    long nearest_neighbor_feature_image<feature_extractor>::\n    get_num_dimensions (\n    ) const\n    {\n        return basis.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename feature_extractor>\n    template <typename vector_type>\n    void nearest_neighbor_feature_image<feature_extractor>::\n    set_basis (\n        const vector_type& new_basis\n    )\n    {\n        basis.assign(new_basis.begin(), new_basis.end());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    const typename nearest_neighbor_feature_image<feature_extractor>::descriptor_type& \n    nearest_neighbor_feature_image<feature_extractor>::\n    operator() (\n        long row,\n        long col\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 <= row && row < nr() &&\n                    0 <= col && col < nc(),\n            \"\\t descriptor_type nearest_neighbor_feature_image::operator(row,col)\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t row:  \" << row\n            << \"\\n\\t col:  \" << col \n            << \"\\n\\t nr(): \" << nr()\n            << \"\\n\\t nc(): \" << nc()\n            << \"\\n\\t this: \" << this\n            );\n\n        nn_feats[0] = std::make_pair(feats[row][col],1);\n        return nn_feats;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    const rectangle nearest_neighbor_feature_image<feature_extractor>::\n    get_block_rect (\n        long row,\n        long col\n    ) const\n    {\n        return fe.get_block_rect(row,col);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    const point nearest_neighbor_feature_image<feature_extractor>::\n    image_to_feat_space (\n        const point& p\n    ) const\n    {\n        return fe.image_to_feat_space(p);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    const rectangle nearest_neighbor_feature_image<feature_extractor>::\n    image_to_feat_space (\n        const rectangle& rect\n    ) const\n    {\n        return fe.image_to_feat_space(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    const point nearest_neighbor_feature_image<feature_extractor>::\n    feat_to_image_space (\n        const point& p\n    ) const\n    {\n        return fe.feat_to_image_space(p);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    const rectangle nearest_neighbor_feature_image<feature_extractor>::\n    feat_to_image_space (\n        const rectangle& rect\n    ) const \n    {\n        return fe.feat_to_image_space(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_NEAREST_NEIGHBOR_FeATURE_IMAGE_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/nearest_neighbor_feature_image_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_NEAREST_NEIGHBOR_FeATURE_IMAGE_ABSTRACT_Hh_\n#ifdef DLIB_NEAREST_NEIGHBOR_FeATURE_IMAGE_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class nearest_neighbor_feature_image : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor \n                - must be an object with an interface compatible with dlib::hog_image\n\n            INITIAL VALUE\n                 - size() == 0\n                 - get_num_dimensions() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for performing image feature extraction.  In\n                particular, it wraps another image feature extractor and converts\n                the wrapped image feature vectors into sparse indicator vectors.  It does\n                this by finding the nearest neighbor for each feature vector and returning an\n                indicator vector that is zero everywhere except for the position indicated by \n                the nearest neighbor.  \n\n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be protected\n                by a mutex lock except for the case where you are copying the configuration \n                (via copy_configuration()) of a nearest_neighbor_feature_image object to many other \n                threads.  In this case, it is safe to copy the configuration of a shared object so \n                long as no other operations are performed on it.\n\n\n            NOTATION \n                let BASE_FE denote the base feature_extractor object contained inside \n                the nearest_neighbor_feature_image.\n        !*/\n\n    public:\n\n        typedef std::vector<std::pair<unsigned int,double> > descriptor_type;\n\n        nearest_neighbor_feature_image (\n        ); \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - this object will have its initial value\n        !*/\n\n        void copy_configuration (\n            const feature_extractor& item\n        );\n        /*!\n            ensures\n                - performs BASE_FE.copy_configuration(item)\n        !*/\n\n        void copy_configuration (\n            const nearest_neighbor_feature_image& item\n        );\n        /*!\n            ensures\n                - copies all the state information of item into *this, except for state \n                  information populated by load().  More precisely, given two \n                  nearest_neighbor_feature_image objects H1 and H2, the following sequence \n                  of instructions should always result in both of them having the exact \n                  same state.\n                    H2.copy_configuration(H1);\n                    H1.load(img);\n                    H2.load(img);\n        !*/\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type == any type that can be supplied to feature_extractor::load() \n            ensures\n                - performs BASE_FE.load(img)\n                  i.e. does feature extraction.  The features can be accessed using\n                  operator() as defined below.\n        !*/\n\n        inline unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.size() \n        !*/\n\n        inline long nr (\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.nr() \n        !*/\n\n        inline long nc (\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.nc() \n        !*/\n\n        inline long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns the dimensionality of the feature vectors returned by operator().  \n                  In this case, this is the number of basis elements.  That is, it is the number\n                  of vectors given to the set_basis() member function.\n        !*/\n\n        template <typename vector_type>\n        void set_basis (\n            const vector_type& new_basis\n        );\n        /*!\n            ensures\n                - #get_num_dimensions() == new_basis.size()\n                - The operator() member function defined below will use new_basis to \n                  determine nearest neighbors.\n        !*/\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const;\n        /*!\n            requires\n                - 0 <= row < nr()\n                - 0 <= col < nc()\n                - get_num_dimensions() > 0\n            ensures\n                - determines which basis element is nearest to BASE_FE(row,col) and returns a sparse\n                  indicator vector identifying the nearest neighbor. \n                - To be precise, this function returns a sparse vector V such that:\n                    - V.size() == 1 \n                    - V[0].first == The basis element index for the basis vector nearest to BASE_FE(row,col).\n                      \"nearness\" is determined using Euclidean distance.\n                    - V[0].second == 1 \n        !*/\n\n        inline const rectangle get_block_rect (\n            long row,\n            long col\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.get_block_rect(row,col)\n                  I.e. returns a rectangle that tells you what part of the original image is associated\n                  with a particular feature vector.\n        !*/\n\n        inline const point image_to_feat_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.image_to_feat_space(p)\n                  I.e. Each local feature is extracted from a certain point in the input image.\n                  This function returns the identity of the local feature corresponding\n                  to the image location p.  Or in other words, let P == image_to_feat_space(p), \n                  then (*this)(P.y(),P.x()) == the local feature closest to, or centered at, \n                  the point p in the input image.  Note that some image points might not have \n                  corresponding feature locations.  E.g. border points or points outside the \n                  image.  In these cases the returned point will be outside get_rect(*this).\n        !*/\n\n        inline const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.image_to_feat_space(rect)\n                  I.e. returns rectangle(image_to_feat_space(rect.tl_corner()), image_to_feat_space(rect.br_corner()));\n                  (i.e. maps a rectangle from image space to feature space)\n        !*/\n\n        inline const point feat_to_image_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.feat_to_image_space(p)\n                  I.e. returns the location in the input image space corresponding to the center\n                  of the local feature at point p.  In other words, this function computes\n                  the inverse of image_to_feat_space().  Note that it may only do so approximately, \n                  since more than one image location might correspond to the same local feature.  \n                  That is, image_to_feat_space() might not be invertible so this function gives \n                  the closest possible result.\n        !*/\n\n        inline const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns BASE_FE.feat_to_image_space(rect)\n                  I.e. return rectangle(feat_to_image_space(rect.tl_corner()), feat_to_image_space(rect.br_corner()));\n                  (i.e. maps a rectangle from feature space to image space)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const nearest_neighbor_feature_image<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    template <typename T>\n    void deserialize (\n        nearest_neighbor_feature_image<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_NEAREST_NEIGHBOR_FeATURE_IMAGE_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/poly_image.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_POLY_ImAGE_Hh_\n#define DLIB_POLY_ImAGE_Hh_\n\n#include \"poly_image_abstract.h\"\n#include \"build_separable_poly_filters.h\"\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../array2d.h\"\n#include \"../geometry.h\"\n#include <cmath>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long Downsample\n        >\n    class poly_image : noncopyable\n    {\n        COMPILE_TIME_ASSERT(Downsample >= 1);\n    public:\n        const static long downsample = Downsample;\n        typedef matrix<double, 0, 1> descriptor_type;\n\n        poly_image(\n            long order_,\n            long window_size_,\n            bool normalization = true,\n            bool rotation_invariance_ = false\n        )\n        {\n            setup(order_, window_size_);\n            set_uses_normalization(normalization);\n            set_is_rotationally_invariant(rotation_invariance_);\n        }\n\n        poly_image (\n        ) \n        {\n            clear();\n        }\n\n        void clear (\n        )\n        {\n            normalize = true;\n            rotation_invariance = false;\n            poly_coef.clear();\n            order = 3;\n            window_size = 13;\n            border_size = (long)std::ceil(std::floor(window_size/2.0)/downsample);\n            num_rows = 0;\n            num_cols = 0;\n            filters = build_separable_poly_filters(order, window_size);\n        }\n\n        long get_order (\n        ) const\n        {\n            return order;\n        }\n\n        long get_window_size (\n        ) const\n        {\n            return window_size;\n        }\n\n        void setup (\n            long order_,\n            long window_size_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(1 <= order_ && order_ <= 6 &&\n                        window_size_ >= 3 && (window_size_%2) == 1,\n                \"\\t descriptor_type poly_image::setup()\"\n                << \"\\n\\t Invalid arguments were given to this function.\"\n                << \"\\n\\t order_:       \" << order_ \n                << \"\\n\\t window_size_: \" << window_size_ \n                << \"\\n\\t this: \" << this\n                );\n\n\n            poly_coef.clear();\n            order = order_;\n            window_size = window_size_;\n            border_size = (long)std::ceil(std::floor(window_size/2.0)/downsample);\n            num_rows = 0;\n            num_cols = 0;\n            filters = build_separable_poly_filters(order, window_size);\n        }\n\n        bool uses_normalization (\n        ) const { return normalize; }\n\n        void set_uses_normalization (\n            bool normalization\n        )\n        {\n            normalize = normalization;\n        }\n\n        bool is_rotationally_invariant (\n        ) const { return rotation_invariance; }\n\n        void set_is_rotationally_invariant (\n            bool rotation_invariance_\n        )\n        {\n            rotation_invariance = rotation_invariance_;\n        }\n\n        void copy_configuration (\n            const poly_image& item\n        )\n        {\n            normalize = item.normalize;\n            rotation_invariance = item.rotation_invariance;\n            if (order != item.order || \n                window_size != item.window_size)\n            {\n                order = item.order;\n                window_size = item.window_size;\n                border_size = item.border_size;\n                filters = item.filters;\n            }\n        }\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        )\n        {\n            COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<image_type>::pixel_type>::has_alpha == false );\n\n            poly_coef.resize(get_num_dimensions());\n            des.set_size(get_num_dimensions());\n\n\n            if (normalize)\n            {\n                array2d<float> coef0;\n                rectangle rect = filter_image(img, coef0, filters[0]);\n                num_rows = rect.height();\n                num_cols = rect.width();\n\n                for (unsigned long i = 1; i < filters.size(); ++i)\n                {\n                    filter_image(img, poly_coef[i-1], filters[i]);\n\n                    // intensity normalize everything\n                    for (long r = 0; r < coef0.nr(); ++r)\n                    {\n                        for (long c = 0; c < coef0.nc(); ++c)\n                        {\n                            if (coef0[r][c] >= 1)\n                                poly_coef[i-1][r][c] /= coef0[r][c];\n                            else\n                                poly_coef[i-1][r][c] = 0;\n                        }\n                    }\n                }\n\n                if (rotation_invariance)\n                    rotate_polys(rect);\n            }\n            else\n            {\n                rectangle rect;\n                for (unsigned long i = 0; i < filters.size(); ++i)\n                {\n                    rect = filter_image(img, poly_coef[i], filters[i]);\n                }\n                num_rows = rect.height();\n                num_cols = rect.width();\n\n                if (rotation_invariance)\n                    rotate_polys(rect);\n            }\n        }\n\n        void unload()\n        {\n            poly_coef.clear();\n            num_rows = 0;\n            num_cols = 0;\n        }\n\n        inline unsigned long size (\n        ) const { return static_cast<unsigned long>(nr()*nc()); }\n\n        inline long nr (\n        ) const { return num_rows; }\n\n        inline long nc (\n        ) const { return num_cols; }\n\n        long get_num_dimensions (\n        ) const\n        {\n            if (normalize)\n            {\n                // -1 because we discard the constant term of the polynomial.\n                return filters.size()-1;\n            }\n            else\n            {\n                return filters.size();\n            }\n        }\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( 0 <= row && row < nr() &&\n                         0 <= col && col < nc(),\n                \"\\t descriptor_type poly_image::operator()()\"\n                << \"\\n\\t invalid row or col argument\"\n                << \"\\n\\t row:  \" << row\n                << \"\\n\\t col:  \" << col \n                << \"\\n\\t nr(): \" << nr() \n                << \"\\n\\t nc(): \" << nc() \n                << \"\\n\\t this: \" << this\n                );\n\n            // add because of the zero border around the poly_coef images\n            row += border_size;\n            col += border_size;\n\n            for (long i = 0; i < des.size(); ++i)\n                des(i) = poly_coef[i][row][col];\n\n            return des;\n        }\n\n        const rectangle get_block_rect (\n            long row,\n            long col\n        ) const\n        {\n            return centered_rect(Downsample*point(col+border_size, row+border_size), \n                                 window_size, window_size);\n        }\n\n        const point image_to_feat_space (\n            const point& p\n        ) const\n        {\n            return p/Downsample - point(border_size, border_size);\n        }\n\n        const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(image_to_feat_space(rect.tl_corner()), image_to_feat_space(rect.br_corner()));\n        }\n\n        const point feat_to_image_space (\n            const point& p\n        ) const\n        {\n            return (p + point(border_size, border_size))*Downsample;\n        }\n\n        const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(feat_to_image_space(rect.tl_corner()), feat_to_image_space(rect.br_corner()));\n        }\n\n\n\n        friend void serialize (const poly_image& item, std::ostream& out) \n        {\n            int version = 1;\n            serialize(version, out);\n            serialize(item.poly_coef, out);\n            serialize(item.order, out);\n            serialize(item.window_size, out);\n            serialize(item.border_size, out);\n            serialize(item.num_rows, out);\n            serialize(item.num_cols, out);\n            serialize(item.normalize, out);\n            serialize(item.rotation_invariance, out);\n            serialize(item.filters, out);\n        }\n\n        friend void deserialize (poly_image& item, std::istream& in )\n        {\n            int version = 0;\n            deserialize(version, in);\n            if (version != 1)\n                throw dlib::serialization_error(\"Unexpected version found while deserializing dlib::poly_image\");\n\n            deserialize(item.poly_coef, in);\n            deserialize(item.order, in);\n            deserialize(item.window_size, in);\n            deserialize(item.border_size, in);\n            deserialize(item.num_rows, in);\n            deserialize(item.num_cols, in);\n            deserialize(item.normalize, in);\n            deserialize(item.rotation_invariance, in);\n            deserialize(item.filters, in);\n        }\n\n    private:\n\n        matrix<float,2,1> rotate_order_1 (\n            const matrix<float,2,1>& w,\n            double cos_theta,\n            double sin_theta\n        ) const\n        {\n            const double w1 = w(0);\n            const double w2 = w(1);\n            matrix<double,2,2> M;\n            M = w1,  w2,\n                w2, -w1;\n\n            matrix<double,2,1> x;\n            x = cos_theta, \n                sin_theta;\n\n            return matrix_cast<float>(M*x);\n        }\n\n        matrix<float,3,1> rotate_order_2 (\n            const matrix<float,3,1>& w,\n            double cos_theta,\n            double sin_theta\n        ) const\n        {\n            const double w1 = w(0);\n            const double w2 = w(1);\n            const double w3 = w(2);\n            matrix<double,3,3> M;\n            M = w1, w2,           w3,\n                w2, (2*w3-2*w1), -w2,\n                w3, -w2,          w1;\n\n            matrix<double,3,1> x;\n            x = std::pow(cos_theta,2.0), \n                cos_theta*sin_theta,\n                std::pow(sin_theta,2.0);\n\n            return matrix_cast<float>(M*x);\n        }\n\n        matrix<float,4,1> rotate_order_3 (\n            const matrix<float,4,1>& w,\n            double cos_theta,\n            double sin_theta\n        ) const\n        {\n            const double w1 = w(0);\n            const double w2 = w(1);\n            const double w3 = w(2);\n            const double w4 = w(3);\n            matrix<double,4,4> M;\n            M = w1, w2,            w3,           w4,\n                w2, (2*w3-3*w1), (3*w4-2*w2),   -w3,\n                w3, (3*w4-2*w2), (3*w1-2*w3),    w2,\n                w4, -w3,           w2,          -w1;\n\n            matrix<double,4,1> x;\n            x = std::pow(cos_theta,3.0), \n                std::pow(cos_theta,2.0)*sin_theta,\n                cos_theta*std::pow(sin_theta,2.0),\n                std::pow(sin_theta,3.0);\n\n            return matrix_cast<float>(M*x);\n        }\n\n        matrix<float,5,1> rotate_order_4 (\n            const matrix<float,5,1>& w,\n            double cos_theta,\n            double sin_theta\n        ) const\n        {\n            const double w1 = w(0);\n            const double w2 = w(1);\n            const double w3 = w(2);\n            const double w4 = w(3);\n            const double w5 = w(4);\n            matrix<double,5,5> M;\n            M = w1, w2,              w3,            w4,          w5,\n                w2, (2*w3-4*w1), (3*w4-3*w2),      (4*w5-2*w3), -w4,\n                w3, (3*w4-3*w2), (6*w1-4*w3+6*w5), (3*w2-3*w4),  w3,\n                w4, (4*w5-2*w3), (3*w2-3*w4),      (2*w3-4*w1), -w2,\n                w5, -w4,            w3,            -w2,          w1;\n\n            matrix<double,5,1> x;\n            x = std::pow(cos_theta,4.0), \n                std::pow(cos_theta,3.0)*sin_theta,\n                std::pow(cos_theta,2.0)*std::pow(sin_theta,2.0),\n                cos_theta*std::pow(sin_theta,3.0),\n                std::pow(sin_theta,4.0);\n\n            return matrix_cast<float>(M*x);\n        }\n\n        matrix<float,6,1> rotate_order_5 (\n            const matrix<float,6,1>& w,\n            double cos_theta,\n            double sin_theta\n        ) const\n        {\n            const double w1 = w(0);\n            const double w2 = w(1);\n            const double w3 = w(2);\n            const double w4 = w(3);\n            const double w5 = w(4);\n            const double w6 = w(5);\n            matrix<double,6,6> M;\n            M = w1,     w2,          w3,             w4,                 w5,          w6,\n                w2, (2*w3-5*w1), (3*w4-4*w2),       (4*w5-3*w3),        (5*w6-2*w4), -w5,\n                w3, (3*w4-4*w2), (10*w1-6*w3+6*w5), (6*w2-6*w4+10*w6),  (3*w3-4*w5),  w4,\n                w4, (4*w5-3*w3), (6*w2-6*w4+10*w6), (-10*w1+6*w3-6*w5), (3*w4-4*w2), -w3,\n                w5, (5*w6-2*w4), (3*w3-4*w5),       (3*w4-4*w2),        (5*w1-2*w3),  w2,\n                w6,    -w5,          w4,            -w3,                 w2,         -w1;\n\n            matrix<double,6,1> x;\n            x = std::pow(cos_theta,5.0), \n                std::pow(cos_theta,4.0)*sin_theta,\n                std::pow(cos_theta,3.0)*std::pow(sin_theta,2.0),\n                std::pow(cos_theta,2.0)*std::pow(sin_theta,3.0),\n                cos_theta*std::pow(sin_theta,4.0),\n                std::pow(sin_theta,5.0);\n\n            return matrix_cast<float>(M*x);\n        }\n\n        matrix<float,7,1> rotate_order_6 (\n            const matrix<float,7,1>& w,\n            double cos_theta,\n            double sin_theta\n        ) const\n        {\n            const double w1 = w(0);\n            const double w2 = w(1);\n            const double w3 = w(2);\n            const double w4 = w(3);\n            const double w5 = w(4);\n            const double w6 = w(5);\n            const double w7 = w(6);\n            matrix<double,7,7> M;\n            M = w1,     w2,          w3,              w4,                           w5,                 w6,         w7,\n                w2, (2*w3-6*w1), (3*w4-5*w2),        (4*w5-4*w3),                (5*w6-3*w4),         (6*w7-2*w5), -w6,\n                w3, (3*w4-5*w2), (15*w1-8*w3+ 6*w5), ( 10*w2 -9*w4+10*w6),       (  6*w3-8*w5+15*w7), (3*w4-5*w6),  w5,\n                w4, (4*w5-4*w3), (10*w2-9*w4+10*w6), (-20*w1+12*w3-12*w5+20*w7), (-10*w2+9*w4-10*w6), (4*w5-4*w3), -w4,\n                w5, (5*w6-3*w4), ( 6*w3-8*w5+15*w7), (-10*w2 +9*w4-10*w6),       ( 15*w1-8*w3 +6*w5), (5*w2-3*w4),  w3,\n                w6, (6*w7-2*w5), (3*w4-5*w6),        (4*w5-4*w3),                (5*w2-3*w4),         (2*w3-6*w1), -w2,\n                w7,     -w6,          w5,            -w4,                          w3,                 -w2,         w1;\n\n            matrix<double,7,1> x;\n            x = std::pow(cos_theta,6.0), \n                std::pow(cos_theta,5.0)*sin_theta,\n                std::pow(cos_theta,4.0)*std::pow(sin_theta,2.0),\n                std::pow(cos_theta,3.0)*std::pow(sin_theta,3.0),\n                std::pow(cos_theta,2.0)*std::pow(sin_theta,4.0),\n                cos_theta*std::pow(sin_theta,5.0),\n                std::pow(sin_theta,6.0);\n\n            return matrix_cast<float>(M*x);\n        }\n\n        void rotate_polys (\n            const rectangle& rect\n        )\n        /*!\n            ensures\n                - rotates all the polynomials in poly_coef so that they are\n                  rotationally invariant\n        !*/\n        {\n            // The idea here is to use a rotation matrix to rotate the \n            // coordinate system for the polynomial so that the x axis\n            // always lines up with the gradient vector (or direction of\n            // max curvature).  This way we can make the representation \n            // rotation invariant.\n\n            // Note that the rotation matrix is given by:\n            // [ cos_theta -sin_theta ]\n            // [ sin_theta cos_theta  ]\n\n            // need to offset poly_coef to get past the constant term if there isn't any normalization.\n            const int off = (normalize) ? 0 : 1;\n\n            for (long r = rect.top(); r <= rect.bottom(); ++r)\n            {\n                for (long c = rect.left(); c <= rect.right(); ++c)\n                {\n                    dlib::vector<double,2> g(poly_coef[off+0][r][c],\n                                             poly_coef[off+1][r][c]);\n\n                    const double len = g.length();\n                    if (len != 0)\n                    {\n                        g /= len;\n                    }\n                    else\n                    {\n                        g.x() = 1;\n                        g.y() = 0;\n                    }\n                    // since we normalized g we can find the sin/cos of its angle easily. \n                    const double cos_theta = g.x();\n                    const double sin_theta = g.y();\n\n                    if (order >= 1)\n                    {\n                        matrix<float,2,1> w;\n                        w = poly_coef[off+0][r][c],\n                            poly_coef[off+1][r][c];\n                        w = rotate_order_1(w, cos_theta, sin_theta);\n                        poly_coef[off+0][r][c] = w(0);\n                        poly_coef[off+1][r][c] = w(1);\n                    }\n                    if (order >= 2)\n                    {\n                        matrix<float,3,1> w;\n                        w = poly_coef[off+2][r][c],\n                            poly_coef[off+3][r][c],\n                            poly_coef[off+4][r][c];\n                        w = rotate_order_2(w, cos_theta, sin_theta);\n                        poly_coef[off+2][r][c] = w(0);\n                        poly_coef[off+3][r][c] = w(1);\n                        poly_coef[off+4][r][c] = w(2);\n                    }\n                    if (order >= 3)\n                    {\n                        matrix<float,4,1> w;\n                        w = poly_coef[off+5][r][c],\n                            poly_coef[off+6][r][c],\n                            poly_coef[off+7][r][c],\n                            poly_coef[off+8][r][c];\n                        w = rotate_order_3(w, cos_theta, sin_theta);\n                        poly_coef[off+5][r][c] = w(0);\n                        poly_coef[off+6][r][c] = w(1);\n                        poly_coef[off+7][r][c] = w(2);\n                        poly_coef[off+8][r][c] = w(3);\n                    }\n                    if (order >= 4)\n                    {\n                        matrix<float,5,1> w;\n                        w = poly_coef[off+9][r][c],\n                            poly_coef[off+10][r][c],\n                            poly_coef[off+11][r][c],\n                            poly_coef[off+12][r][c],\n                            poly_coef[off+13][r][c];\n                        w = rotate_order_4(w, cos_theta, sin_theta);\n                        poly_coef[off+9][r][c]  = w(0);\n                        poly_coef[off+10][r][c] = w(1);\n                        poly_coef[off+11][r][c] = w(2);\n                        poly_coef[off+12][r][c] = w(3);\n                        poly_coef[off+13][r][c] = w(4);\n                    }\n                    if (order >= 5)\n                    {\n                        matrix<float,6,1> w;\n                        w = poly_coef[off+14][r][c],\n                            poly_coef[off+15][r][c],\n                            poly_coef[off+16][r][c],\n                            poly_coef[off+17][r][c],\n                            poly_coef[off+18][r][c],\n                            poly_coef[off+19][r][c];\n                        w = rotate_order_5(w, cos_theta, sin_theta);\n                        poly_coef[off+14][r][c] = w(0);\n                        poly_coef[off+15][r][c] = w(1);\n                        poly_coef[off+16][r][c] = w(2);\n                        poly_coef[off+17][r][c] = w(3);\n                        poly_coef[off+18][r][c] = w(4);\n                        poly_coef[off+19][r][c] = w(5);\n                    }\n                    if (order >= 6)\n                    {\n                        matrix<float,7,1> w;\n                        w = poly_coef[off+20][r][c],\n                            poly_coef[off+21][r][c],\n                            poly_coef[off+22][r][c],\n                            poly_coef[off+23][r][c],\n                            poly_coef[off+24][r][c],\n                            poly_coef[off+25][r][c],\n                            poly_coef[off+26][r][c];\n                        w = rotate_order_6(w, cos_theta, sin_theta);\n                        poly_coef[off+20][r][c] = w(0);\n                        poly_coef[off+21][r][c] = w(1);\n                        poly_coef[off+22][r][c] = w(2);\n                        poly_coef[off+23][r][c] = w(3);\n                        poly_coef[off+24][r][c] = w(4);\n                        poly_coef[off+25][r][c] = w(5);\n                        poly_coef[off+26][r][c] = w(6);\n                    }\n                }\n            }\n\n        }\n\n        template <typename image_type>\n        rectangle filter_image (\n            const image_type& img,\n            array2d<float>& out,\n            const std::vector<separable_filter_type>& filter\n        ) const\n        {\n            rectangle rect = spatially_filter_image_separable_down(downsample, img, out, filter[0].first, filter[0].second);\n            for (unsigned long i = 1; i < filter.size(); ++i)\n            {\n                spatially_filter_image_separable_down(downsample, img, out, filter[i].first, filter[i].second, 1, false, true);\n            }\n            return rect;\n        }\n\n\n\n        std::vector<std::vector<separable_filter_type> > filters;\n\n        dlib::array<array2d<float> > poly_coef;\n        long order;\n        long window_size;\n        long border_size;\n        long num_rows;\n        long num_cols;\n\n        bool normalize;\n        bool rotation_invariance;\n\n        mutable descriptor_type des;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_POLY_ImAGE_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/poly_image_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_POLY_ImAGE_ABSTRACT_Hh_\n#ifdef DLIB_POLY_ImAGE_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../geometry/rectangle_abstract.h\"\n#include <cmath>\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n    template <\n        long Downsample\n        >\n    class poly_image : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON TEMPLATE PARAMETERS \n                - Downsample >= 1\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for extracting local feature descriptors from an image.\n                In particular, it fits polynomials to local pixel patches and allows you to \n                query the coefficients of these polynomials.  Additionally, the coefficients \n                may be intensity normalized by dividing them by the constant term of the fitted \n                polynomial and then the constant term is discarded. \n\n                Finally, the user can specify a downsampling rate.  If the template argument\n                Downsample is set to 1 then feature extraction is performed at every pixel of\n                an input image (except for a small area around the image border).  However,\n                if Downsample is set to 2 then feature extraction is only performed at every\n                other pixel location.  More generally, if Downsample is set to N then feature\n                extraction is performed only every N pixels.  \n                \n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be protected\n                by a mutex lock except for the case where you are copying the configuration \n                (via copy_configuration()) of a poly_image object to many other threads.  \n                In this case, it is safe to copy the configuration of a shared object so long\n                as no other operations are performed on it.\n        !*/\n\n    public:\n\n        typedef matrix<double, 0, 1> descriptor_type;\n        const static long downsample = Downsample;\n\n        poly_image (\n        ); \n        /*!\n            ensures\n                - #get_order() == 3\n                - #get_window_size() == 13\n                - #size() == 0\n                - #uses_normalization() == true\n                - #is_rotationally_invariant() == false \n        !*/\n\n        poly_image(\n            long order,\n            long window_size,\n            bool normalization = true,\n            bool rotation_invariance = false\n        );\n        /*!\n            requires\n                - 1 <= order <= 6\n                - window_size >= 3 && window_size is odd\n            ensures\n                - #get_order() == order\n                - #get_window_size() == window_size\n                - #size() == 0\n                - #uses_normalization() == normalization\n                - #is_rotationally_invariant() == rotation_invariance\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - this object will have its initial value\n        !*/\n\n        void setup (\n            long order,\n            long window_size\n        );\n        /*!\n            requires\n                - 1 <= order <= 6\n                - window_size >= 3 && window_size is odd\n            ensures\n                - #get_order() == order\n                - #get_window_size() == window_size\n        !*/\n\n        long get_order (\n        ) const;\n        /*!\n            ensures\n                - returns the order of the polynomial that will be fitted to \n                  each local pixel patch during feature extraction.\n        !*/\n\n        long get_window_size (\n        ) const;\n        /*!\n            ensures\n                - returns the size of the window used for local feature extraction.\n                  This is the width and height of the window in pixels.\n        !*/\n\n        bool uses_normalization (\n        ) const; \n        /*!\n            ensures\n                - returns true if the polynomial coefficients are intensity normalized\n                  and false otherwise. \n        !*/\n\n        void set_uses_normalization (\n            bool normalization\n        );\n        /*!\n            ensures\n                - #uses_normalization() == normalization\n        !*/\n\n        bool is_rotationally_invariant (\n        );\n        /*!\n            ensures\n                - returns true if the feature extractor will adjust the output so that it\n                  is rotationally invariant.  This is done by rotating each patch such that\n                  the gradient vector always points in the same direction.\n        !*/\n\n        void set_is_rotationally_invariant (\n            bool rotation_invariance\n        );\n        /*!\n            ensures\n                - #is_rotationally_invariant() == rotation_invariance\n        !*/\n\n        void copy_configuration (\n            const poly_image& item\n        );\n        /*!\n            ensures\n                - copies all the state information of item into *this, except for state \n                  information populated by load().  More precisely, given two poly_image \n                  objects H1 and H2, the following sequence of instructions should always \n                  result in both of them having the exact same state.\n                    H2.copy_configuration(H1);\n                    H1.load(img);\n                    H2.load(img);\n        !*/\n\n        template <\n            typename image_type\n            >\n        inline void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type == an image object that implements the interface defined in\n                  dlib/image_processing/generic_image.h \n                - pixel_traits<typename image_traits<image_type>::pixel_type>::has_alpha == false\n            ensures\n                - Performs the feature extraction described in the WHAT THIS OBJECT REPRESENTS\n                  section above.  This means after load() finishes you can call (*this)(row,col) \n                  to obtain the polynomial coefficients for an order get_order() polynomial which \n                  was fitted to the image patch get_block_rect(row,col).\n                - #size() > 0\n        !*/\n\n        void unload(\n        );\n        /*!\n            ensures\n                - #nr() == 0\n                - #nc() == 0\n                - clears only the state information which is populated by load().  For \n                  example, let H be a poly_image object.  Then consider the two sequences \n                  of instructions:\n                    Sequence 1:\n                        H.load(img);      \n                        H.unload();\n                        H.load(img);\n\n                    Sequence 2:\n                        H.load(img);\n                  Both sequence 1 and sequence 2 should have the same effect on H.  \n        !*/\n\n        inline unsigned long size (\n        ) const; \n        /*!\n            ensures\n                - returns nr()*nc()\n        !*/\n\n        inline long nr (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in this polynomial feature image\n        !*/\n\n        inline long nc (\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns in this polynomial feature image\n        !*/\n\n        long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns the number of dimensions in the feature vectors generated by\n                  this object.  \n                - In this case, this will be the number of coefficients in an order \n                  get_order() polynomial, except for the constant term of the polynomial\n                  if uses_normalization() == true.\n        !*/\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const;\n        /*!\n            requires\n                - 0 <= row < nr()\n                - 0 <= col < nc()\n            ensures\n                - returns the descriptor for the polynomial filtering block at the given row and column.  \n                  This vector will contain the polynomial coefficients for a polynomial fitted to the\n                  image patch located at get_block_rect(row,col) in the original image given to load().\n                - The returned descriptor vector will have get_num_dimensions() elements.\n        !*/\n\n        const rectangle get_block_rect (\n            long row,\n            long col\n        ) const;\n        /*!\n            ensures\n                - returns a rectangle that tells you what part of the original image is associated\n                  with a particular polynomial filter block.  That is, what part of the input image \n                  is associated with (*this)(row,col).\n                - The returned rectangle will be get_window_size() pixels wide and tall.\n        !*/\n\n        const point image_to_feat_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - Each local feature is extracted from a certain point in the input image.\n                  This function returns the identity of the local feature corresponding\n                  to the image location p.  Or in other words, let P == image_to_feat_space(p), \n                  then (*this)(P.y(),P.x()) == the local feature closest to, or centered at, \n                  the point p in the input image.  Note that some image points might not have \n                  corresponding feature locations.  E.g. border points or points outside the \n                  image.  In these cases the returned point will be outside get_rect(*this).\n        !*/\n\n        const rectangle image_to_feat_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns rectangle(image_to_feat_space(rect.tl_corner()), image_to_feat_space(rect.br_corner()));\n                  (i.e. maps a rectangle from image space to feature space)\n        !*/\n\n        const point feat_to_image_space (\n            const point& p\n        ) const;\n        /*!\n            ensures\n                - returns the location in the input image space corresponding to the center\n                  of the local feature at point p.  In other words, this function computes\n                  the inverse of image_to_feat_space().  Note that it may only do so approximately, \n                  since more than one image location might correspond to the same local feature.  \n                  That is, image_to_feat_space() might not be invertible so this function gives \n                  the closest possible result.\n        !*/\n\n        const rectangle feat_to_image_space (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - return rectangle(feat_to_image_space(rect.tl_corner()), feat_to_image_space(rect.br_corner()));\n                  (i.e. maps a rectangle from feature space to image space)\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long downsample\n        >\n    void serialize (\n        const poly_image<downsample>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    template <\n        long downsample\n        >\n    void deserialize (\n        poly_image<downsample>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_POLY_ImAGE_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/surf.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SURf_H_\n#define DLIB_SURf_H_\n\n#include \"surf_abstract.h\"\n#include \"hessian_pyramid.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n    \n    struct surf_point\n    {\n        interest_point p;\n        matrix<double,64,1> des;\n        double angle;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize(\n        const surf_point& item,  \n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.p,out);\n            serialize(item.des,out);\n            serialize(item.angle,out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type surf_point\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize(\n        surf_point& item,  \n        std::istream& in \n    )\n    {\n        try\n        {\n            deserialize(item.p,in);\n            deserialize(item.des,in);\n            deserialize(item.angle,in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type surf_point\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double gaussian (double x, double y, double sig)\n    {\n        DLIB_ASSERT(sig > 0,\n            \"\\tdouble gaussian()\"\n            << \"\\n\\t sig must be bigger than 0\"\n            << \"\\n\\t sig: \" << sig \n        );\n        const double sqrt_2_pi = 2.5066282746310002416123552393401041626930;\n        return 1.0/(sig*sqrt_2_pi) * std::exp( -(x*x + y*y)/(2*sig*sig));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename integral_image_type, typename T>\n    double compute_dominant_angle (\n        const integral_image_type& img,\n        const dlib::vector<T,2>& center,\n        const double& scale\n    )\n    {\n        DLIB_ASSERT(get_rect(img).contains(centered_rect(center, (unsigned long)(17*scale),(unsigned long)(17*scale))) == true &&\n                    scale > 0,\n            \"\\tdouble compute_dominant_angle(img, center, scale)\"\n            << \"\\n\\tAll arguments to this function must be > 0\"\n            << \"\\n\\t get_rect(img): \" << get_rect(img) \n            << \"\\n\\t center:        \" << center \n            << \"\\n\\t scale:         \" << scale \n        );\n\n\n        std::vector<double> ang;\n        std::vector<dlib::vector<double,2> > samples;\n\n        const long sc = static_cast<long>(scale+0.5);\n\n        // accumulate a bunch of angle and vector samples\n        dlib::vector<double,2> vect;\n        for (long r = -6; r <= 6; ++r)\n        {\n            for (long c = -6; c <= 6; ++c)\n            {\n                if (r*r + c*c < 36)\n                {\n                    // compute a Gaussian weighted gradient and the gradient's angle.\n                    const double gauss = gaussian(c,r, 2.5);\n                    vect.x() = gauss*haar_x(img, sc*point(c,r)+center, 4*sc);\n                    vect.y() = gauss*haar_y(img, sc*point(c,r)+center, 4*sc);\n                    samples.push_back(vect);\n                    ang.push_back(atan2(vect.y(), vect.x()));\n                }\n            }\n        }\n\n\n        // now find the dominant direction\n        double max_length = 0;\n        double best_ang = 0;\n        // look at a bunch of pie shaped slices of a circle \n        const long slices = 45;\n        const double ang_step = (2*pi)/slices;\n        for (long ang_i = 0; ang_i < slices; ++ang_i)\n        {\n            // compute the bounding angles\n            double ang1 = ang_step*ang_i - pi;\n            double ang2 = ang1 + pi/3;\n\n\n            // compute sum of all vectors that are within the above two angles\n            vect.x() = 0;\n            vect.y() = 0;\n            for (unsigned long i = 0; i < ang.size(); ++i)\n            {\n                if (ang1 <= ang[i] && ang[i] <= ang2)\n                {\n                    vect += samples[i];\n                }\n                else if (ang2 > pi && (ang[i] >= ang1 || ang[i] <= (-2*pi+ang2)))\n                {\n                    vect += samples[i];\n                }\n            }\n\n\n            // record the angle of the best vectors\n            if (length_squared(vect) > max_length)\n            {\n                max_length = length_squared(vect);\n                best_ang = atan2(vect.y(), vect.x());\n            }\n        }\n\n        return best_ang;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename integral_image_type, typename T, typename MM, typename L>\n    void compute_surf_descriptor (\n        const integral_image_type& img,\n        const dlib::vector<T,2>& center,\n        const double scale,\n        const double angle,\n        matrix<double,64,1,MM,L>& des\n    )\n    {\n        DLIB_ASSERT(get_rect(img).contains(centered_rect(center, (unsigned long)(32*scale),(unsigned long)(32*scale))) == true &&\n                    scale > 0,\n            \"\\tvoid compute_surf_descriptor(img, center, scale, angle)\"\n            << \"\\n\\tAll arguments to this function must be > 0\"\n            << \"\\n\\t get_rect(img): \" << get_rect(img) \n            << \"\\n\\t center:        \" << center \n            << \"\\n\\t scale:         \" << scale \n        );\n\n        point_rotator rot(angle);\n        point_rotator inv_rot(-angle);\n\n        const long sc = static_cast<long>(scale+0.5);\n        long count = 0;\n\n        // loop over the 4x4 grid of histogram buckets \n        for (long r = -10; r < 10; r += 5)\n        {\n            for (long c = -10; c < 10; c += 5)\n            {\n                dlib::vector<double,2> vect, abs_vect, temp;\n\n                // now loop over 25 points in this bucket and sum their features.  Note\n                // that we include 1 pixels worth of padding around the outside of each 5x5\n                // cell.  This is to help neighboring cells interpolate their counts into\n                // each other a little bit.\n                for (long y = r-1; y < r+5+1; ++y)\n                {\n                    if (y < -10 || y >= 10)\n                        continue;\n                    for (long x = c-1; x < c+5+1; ++x)\n                    {\n                        if (x < -10 || x >= 10)\n                            continue;\n\n                        // get the rotated point for this extraction point\n                        point p(rot(point(x,y)*scale) + center); \n\n                        // Give points farther from the center of the bucket a lower weight.  \n                        const long center_r = r+2;\n                        const long center_c = c+2;\n                        const double weight = 1.0/(4+std::abs(center_r-y) + std::abs(center_c-x));\n\n                        temp.x() = weight*haar_x(img, p, 2*sc);\n                        temp.y() = weight*haar_y(img, p, 2*sc);\n\n                        // rotate this vector into alignment with the surf descriptor box \n                        temp = inv_rot(temp);\n\n                        vect += temp;\n                        abs_vect += abs(temp);\n                    }\n                }\n\n                des(count++) = vect.x();\n                des(count++) = vect.y();\n                des(count++) = abs_vect.x();\n                des(count++) = abs_vect.y();\n            }\n        }\n\n        // Return the length normalized descriptor.  Add a small number\n        // to guard against division by zero.\n        const double len = length(des) + 1e-7;\n        des = des/len;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    const std::vector<surf_point> get_surf_points (\n        const image_type& img,\n        long max_points = 10000,\n        double detection_threshold = 30.0\n    )\n    {\n        DLIB_ASSERT(max_points > 0 && detection_threshold >= 0,\n            \"\\t std::vector<surf_point> get_surf_points()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            << \"\\n\\t max_points:          \" << max_points \n            << \"\\n\\t detection_threshold: \" << detection_threshold \n        );\n\n        // Figure out the proper scalar type we should use to work with these pixels.  \n        typedef typename pixel_traits<typename image_traits<image_type>::pixel_type>::basic_pixel_type bp_type;\n        typedef typename promote<bp_type>::type working_pixel_type;\n\n        // make an integral image first\n        integral_image_generic<working_pixel_type> int_img;\n        int_img.load(img);\n\n        // now make a hessian pyramid\n        hessian_pyramid pyr;\n        pyr.build_pyramid(int_img, 4, 6, 2);\n\n        // now get all the interest points from the hessian pyramid\n        std::vector<interest_point> points; \n        get_interest_points(pyr, detection_threshold, points);\n        std::vector<surf_point> spoints;\n\n        // sort all the points by how strong their detect is\n        std::sort(points.rbegin(), points.rend());\n\n        // now extract SURF descriptors for the points\n        surf_point sp;\n        for (unsigned long i = 0; i < std::min((size_t)max_points,points.size()); ++i)\n        {\n            // ignore points that are close to the edge of the image\n            const double border = 32;\n            const unsigned long border_size = static_cast<unsigned long>(border*points[i].scale);\n            if (get_rect(int_img).contains(centered_rect(points[i].center, border_size, border_size)))\n            {\n                sp.angle = compute_dominant_angle(int_img, points[i].center, points[i].scale);\n                compute_surf_descriptor(int_img, points[i].center, points[i].scale, sp.angle, sp.des);\n                sp.p = points[i];\n\n                spoints.push_back(sp);\n            }\n        }\n\n        return spoints;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SURf_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint/surf_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SURf_ABSTRACT_H_\n#ifdef DLIB_SURf_ABSTRACT_H_\n\n#include \"hessian_pyramid_abstract.h\"\n#include \"../geometry/vector_abstract.h\"\n#include \"../matrix/matrix_abstract.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n    /*\n        The functions in this file implement the components of the SURF algorithm\n        for extracting scale invariant feature descriptors from images.\n\n        For the full story on what this algorithm does and how it works\n        you should refer to the following papers.\n\n        This is the original paper which introduced the algorithm:\n            SURF: Speeded Up Robust Features\n            By Herbert Bay, Tinne Tuytelaars, and Luc Van Gool\n\n        This paper provides a nice detailed overview of how the algorithm works:\n            Notes on the OpenSURF Library by Christopher Evans\n    */\n\n// ----------------------------------------------------------------------------------------\n    \n    double gaussian (\n        double x, \n        double y,\n        double sig\n    );\n    /*!\n        requires\n            - sig > 0\n        ensures\n            - computes and returns the value of a 2D Gaussian function with mean 0 \n              and standard deviation sig at the given (x,y) point.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename integral_image_type, typename T>\n    double compute_dominant_angle (\n        const integral_image_type& img,\n        const dlib::vector<T,2>& center,\n        const double& scale\n    );\n    /*!\n        requires\n            - integral_image_type == an object such as dlib::integral_image or another\n              type that implements the interface defined in image_transforms/integral_image_abstract.h\n            - scale > 0\n            - get_rect(img).contains(centered_rect(center, 17*scale, 17*scale)) == true\n              (i.e. center can't be within 17*scale pixels of the edge of the image)\n        ensures\n            - computes and returns the dominant angle (i.e. the angle of the dominant gradient)\n              at the given center point and scale in img.  \n            - The returned angle is in radians.  Specifically, if the angle is described by\n              a vector vect then the angle is exactly the value of std::atan2(vect.y(), vect.x())\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename integral_image_type, typename T, typename MM, typename L>\n    void compute_surf_descriptor (\n        const integral_image_type& img,\n        const dlib::vector<T,2>& center,\n        const double scale,\n        const double angle,\n        matrix<double,64,1,MM,L>& des\n    )\n    /*!\n        requires\n            - integral_image_type == an object such as dlib::integral_image or another\n              type that implements the interface defined in image_transforms/integral_image_abstract.h\n            - scale > 0\n            - get_rect(img).contains(centered_rect(center, 32*scale, 32*scale)) == true\n              (i.e. center can't be within 32*scale pixels of the edge of the image)\n        ensures\n            - computes the 64 dimensional SURF descriptor vector of a box centered\n              at the given center point, tilted at an angle determined by the given \n              angle, and sized according to the given scale.  \n            - #des == the computed SURF descriptor vector extracted from the img object.\n            - The angle is measured in radians and measures the degree of counter-clockwise \n              rotation around the center point.  This is the same kind of rotation as is \n              performed by the dlib::rotate_point() function.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    struct surf_point\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a detected SURF point.  The meanings of \n                its fields are defined below in the get_surf_points() function.\n        !*/\n\n        interest_point p;\n        matrix<double,64,1> des;\n        double angle;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const surf_point& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support\n    !*/\n\n    void deserialize (\n        surf_point& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    const std::vector<surf_point> get_surf_points (\n        const image_type& img,\n        long max_points = 10000,\n        double detection_threshold = 30.0\n    );\n    /*!\n        requires\n            - max_points > 0\n            - detection_threshold >= 0\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - Let P denote the type of pixel in img, then we require:\n                - pixel_traits<P>::has_alpha == false \n        ensures\n            - This function runs the complete SURF algorithm on the given input image and \n              returns the points it found. \n            - returns a vector V such that:\n                - V.size() <= max_points\n                - for all valid i:\n                    - V[i] == a SURF point found in the given input image img\n                    - V[i].p == the interest_point extracted from the hessian pyramid for this\n                      SURF point.\n                    - V[i].des == the SURF descriptor for this point (calculated using \n                      compute_surf_descriptor())\n                    - V[i].angle == the angle of the SURF box at this point (calculated using \n                      compute_dominant_angle())\n                    - V[i].p.score >= detection_threshold\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SURf_ABSTRACT_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_keypoint.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGE_KEYPOINt_H_\n#define DLIB_IMAGE_KEYPOINt_H_ \n\n#include \"image_keypoint/surf.h\"\n#include \"image_keypoint/hessian_pyramid.h\"\n#include \"image_keypoint/hog.h\"\n#include \"image_keypoint/poly_image.h\"\n#include \"image_keypoint/fine_hog_image.h\"\n#include \"image_keypoint/hashed_feature_image.h\"\n#include \"image_keypoint/nearest_neighbor_feature_image.h\"\n#include \"image_keypoint/binned_vector_feature_image.h\"\n\n#endif // DLIB_IMAGE_KEYPOINt_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/image_loader.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGE_LOADEr_\n#define DLIB_IMAGE_LOADEr_\n\n#include \"image_loader_abstract.h\"\n#include <iostream>\n#include <sstream>\n#include \"../algs.h\"\n#include \"../pixel.h\"\n#include \"../image_saver/dng_shared.h\"\n#include \"../entropy_decoder_model.h\"\n#include \"../entropy_decoder.h\"\n#include \"../uintn.h\"\n#include \"../image_transforms/assign_image.h\"\n#include <algorithm>\n#include \"../vectorstream.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class image_load_error : public dlib::error { \n    public: image_load_error(const std::string& str) : error(EIMAGE_LOAD,str){}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void load_bmp (\n        image_type& image_,\n        std::istream& in_\n    )\n    {\n        image_view<image_type> image(image_);\n        try\n        {\n            unsigned long bytes_read_so_far = 0;\n            unsigned long bfSize;\n            unsigned long bfOffBits;\n            unsigned long bfReserved;\n            unsigned long biSize;\n            unsigned long biWidth;\n            unsigned long biHeight;\n            unsigned short biBitCount;\n            unsigned long biCompression;\n            /*\n            unsigned long biSizeImage;\n            unsigned long biClrUsed;\n            unsigned long biClrImportant;\n            */\n            unsigned long a, b, c, d, i;\n\n            using namespace std;\n\n            streambuf& in = *in_.rdbuf();\n    //        streamsize num;\n            unsigned char buf[100];\n\n\n            // first make sure the BMP starts with BM\n            if (in.sgetn(reinterpret_cast<char*>(buf),2) != 2)\n                throw image_load_error(\"bmp load error 1: header error\");\n            bytes_read_so_far += 2;\n\n            if (buf[0] != 'B' || buf[1] != 'M')\n                throw image_load_error(\"bmp load error 2: header error\");\n\n            // now read the BITMAPFILEHEADER\n            if (in.sgetn(reinterpret_cast<char*>(buf),12) != 12)\n                throw image_load_error(\"bmp load error 3: header error\");\n\n            bytes_read_so_far += 12;\n\n            i = 0;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            bfSize = a | (b<<8) | (c<<16) | (d<<24);\n\n            i = 4;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            bfReserved = a | (b<<8) | (c<<16) | (d<<24);\n\n            i = 8;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            bfOffBits = a | (b<<8) | (c<<16) | (d<<24);\n\n            // if this value isn't zero then there is something wrong\n            // with this bitmap.\n            if (bfReserved != 0)\n                throw image_load_error(\"bmp load error 4: reserved area not zero\");\n\n\n            // load the BITMAPINFOHEADER\n            if (in.sgetn(reinterpret_cast<char*>(buf),40) != 40)\n                throw image_load_error(\"bmp load error 5: file too short\");\n            bytes_read_so_far += 40;\n\n\n            i = 0;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            biSize = a | (b<<8) | (c<<16) | (d<<24);\n\n            i += 4;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            biWidth = a | (b<<8) | (c<<16) | (d<<24);\n\n            i += 4;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            biHeight = a | (b<<8) | (c<<16) | (d<<24);\n\n            i += 4+2;\n            a = buf[i]; b = buf[i+1];\n            biBitCount = static_cast<unsigned short>(a | (b<<8));\n\n            i += 2;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            biCompression = a | (b<<8) | (c<<16) | (d<<24);\n\n            /*\n            i += 4;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            biSizeImage = a | (b<<8) | (c<<16) | (d<<24);\n\n            i += 4+4+4;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            biClrUsed = a | (b<<8) | (c<<16) | (d<<24);\n\n            i += 4;\n            a = buf[i]; b = buf[i+1]; c = buf[i+2]; d = buf[i+3];\n            biClrImportant = a | (b<<8) | (c<<16) | (d<<24);\n            */\n\n\n            if (biSize != 40)\n                throw image_load_error(\"bmp load error 6: header too small\");\n\n            // read and discard any extra bytes that are part of the header\n            if (biSize > 40)\n            {\n                if (in.sgetn(reinterpret_cast<char*>(buf),biSize-40) != static_cast<long>(biSize - 40))\n                {\n                    throw image_load_error(\"bmp load error 7: header too small\");\n                }\n                bytes_read_so_far += biSize-40;\n            }\n\n            image.set_size(biHeight, biWidth);\n\n            switch (biBitCount)\n            {\n                case 1:\n                    {\n                        // figure out how the pixels are packed\n                        long padding;\n                        if (bfSize - bfOffBits == biWidth*biHeight/8)\n                            padding = 0;\n                        else\n                            padding = 4 - ((biWidth+7)/8)%4;\n\n                        const unsigned int palette_size = 2;\n                        unsigned char red[palette_size];\n                        unsigned char green[palette_size];\n                        unsigned char blue[palette_size];\n\n                        for (unsigned int i = 0; i < palette_size; ++i)\n                        {\n                            if (in.sgetn(reinterpret_cast<char*>(buf),4) != 4)\n                            {\n                                throw image_load_error(\"bmp load error 20: color palette missing\");\n                            }\n                            bytes_read_so_far += 4;\n                            blue[i] = buf[0];\n                            green[i] = buf[1];\n                            red[i] = buf[2];\n                        }\n\n\n                        // seek to the start of the pixel data\n                        while (bytes_read_so_far != bfOffBits)\n                        {\n                            const long to_read = (long)std::min(bfOffBits - bytes_read_so_far, (unsigned long)sizeof(buf));\n                            if (in.sgetn(reinterpret_cast<char*>(buf), to_read) != to_read)\n                            {\n                                throw image_load_error(\"bmp load error: missing data\");\n                            }\n                            bytes_read_so_far += to_read;\n                        }\n\n                        // load the image data\n                        for (long row = biHeight-1; row >= 0; --row)\n                        {\n                            for (unsigned long col = 0; col < biWidth; col+=8)\n                            {\n                                if (in.sgetn(reinterpret_cast<char*>(buf),1) != 1)\n                                {\n                                    throw image_load_error(\"bmp load error 21.6: file too short\");\n                                }\n\n                                unsigned char pixels[8];\n\n                                pixels[0] = (buf[0]>>7);\n                                pixels[1] = ((buf[0]>>6)&0x01);\n                                pixels[2] = ((buf[0]>>5)&0x01);\n                                pixels[3] = ((buf[0]>>4)&0x01);\n                                pixels[4] = ((buf[0]>>3)&0x01);\n                                pixels[5] = ((buf[0]>>2)&0x01);\n                                pixels[6] = ((buf[0]>>1)&0x01);\n                                pixels[7] = ((buf[0])&0x01);\n\n                                for (int i = 0; i < 8 && col+i < biWidth; ++i)\n                                {\n                                    rgb_pixel p;\n                                    p.red   = red[pixels[i]];\n                                    p.green = green[pixels[i]];\n                                    p.blue  = blue[pixels[i]];\n                                    assign_pixel(image[row][col+i],p);\n                                }\n                            }\n                            if (in.sgetn(reinterpret_cast<char*>(buf),padding) != padding)\n                                throw image_load_error(\"bmp load error 9: file too short\");\n                        }\n\n\n\n                    } break;\n                case 4:\n                    {\n                        // figure out how the pixels are packed\n                        long padding;\n                        if (bfSize - bfOffBits == biWidth*biHeight/2)\n                            padding = 0;\n                        else\n                            padding = 4 - ((biWidth+1)/2)%4;\n\n                        const unsigned int palette_size = 16;\n                        unsigned char red[palette_size];\n                        unsigned char green[palette_size];\n                        unsigned char blue[palette_size];\n\n                        for (unsigned int i = 0; i < palette_size; ++i)\n                        {\n                            if (in.sgetn(reinterpret_cast<char*>(buf),4) != 4)\n                            {\n                                throw image_load_error(\"bmp load error 20: color palette missing\");\n                            }\n                            bytes_read_so_far += 4;\n                            blue[i] = buf[0];\n                            green[i] = buf[1];\n                            red[i] = buf[2];\n                        }\n\n\n                        // seek to the start of the pixel data\n                        while (bytes_read_so_far != bfOffBits)\n                        {\n                            const long to_read = (long)std::min(bfOffBits - bytes_read_so_far, (unsigned long)sizeof(buf));\n                            if (in.sgetn(reinterpret_cast<char*>(buf), to_read) != to_read)\n                            {\n                                throw image_load_error(\"bmp load error: missing data\");\n                            }\n                            bytes_read_so_far += to_read;\n                        }\n\n                        // load the image data\n                        for (long row = biHeight-1; row >= 0; --row)\n                        {\n                            for (unsigned long col = 0; col < biWidth; col+=2)\n                            {\n                                if (in.sgetn(reinterpret_cast<char*>(buf),1) != 1)\n                                {\n                                    throw image_load_error(\"bmp load error 21.7: file too short\");\n                                }\n\n                                const unsigned char pixel1 = (buf[0]>>4);\n                                const unsigned char pixel2 = (buf[0]&0x0F);\n\n                                rgb_pixel p;\n                                p.red = red[pixel1];\n                                p.green = green[pixel1];\n                                p.blue = blue[pixel1];\n                                assign_pixel(image[row][col], p);\n\n                                if (col+1 < biWidth)\n                                {\n                                    p.red   = red[pixel2];\n                                    p.green = green[pixel2];\n                                    p.blue  = blue[pixel2];\n                                    assign_pixel(image[row][col+1], p);\n                                }\n                            }\n                            if (in.sgetn(reinterpret_cast<char*>(buf),padding) != padding)\n                                throw image_load_error(\"bmp load error 9: file too short\");\n                        }\n\n\n\n                    } break;\n                case 8:\n                    {\n                        // figure out how the pixels are packed\n                        long padding;\n                        if (bfSize - bfOffBits == biWidth*biHeight)\n                            padding = 0;\n                        else\n                            padding = 4 - biWidth%4;\n\n                        // check for this case.  It shouldn't happen but some BMP writers screw up the files\n                        // so we have to do this.\n                        if (biHeight*(biWidth+padding) > bfSize - bfOffBits)\n                            padding = 0;\n\n                        const unsigned int palette_size = 256;\n                        unsigned char red[palette_size];\n                        unsigned char green[palette_size];\n                        unsigned char blue[palette_size];\n\n                        for (unsigned int i = 0; i < palette_size; ++i)\n                        {\n                            if (in.sgetn(reinterpret_cast<char*>(buf),4) != 4)\n                            {\n                                throw image_load_error(\"bmp load error 20: color palette missing\");\n                            }\n                            bytes_read_so_far += 4;\n                            blue[i] = buf[0];\n                            green[i] = buf[1];\n                            red[i] = buf[2];\n                        }\n\n\n                        // seek to the start of the pixel data\n                        while (bytes_read_so_far != bfOffBits)\n                        {\n                            const long to_read = (long)std::min(bfOffBits - bytes_read_so_far, (unsigned long)sizeof(buf));\n                            if (in.sgetn(reinterpret_cast<char*>(buf), to_read) != to_read)\n                            {\n                                throw image_load_error(\"bmp load error: missing data\");\n                            }\n                            bytes_read_so_far += to_read;\n                        }\n\n                        // Next we load the image data.\n\n                        // if there is no RLE compression\n                        if (biCompression == 0)\n                        {\n                            for (long row = biHeight-1; row >= 0; --row)\n                            {\n                                for (unsigned long col = 0; col < biWidth; ++col)\n                                {\n                                    if (in.sgetn(reinterpret_cast<char*>(buf),1) != 1)\n                                    {\n                                        throw image_load_error(\"bmp load error 21.8: file too short\");\n                                    }\n\n                                    rgb_pixel p;\n                                    p.red   = red[buf[0]];\n                                    p.green = green[buf[0]];\n                                    p.blue  = blue[buf[0]];\n                                    assign_pixel(image[row][col],p);\n                                }\n                                if (in.sgetn(reinterpret_cast<char*>(buf),padding) != padding)\n                                    throw image_load_error(\"bmp load error 9: file too short\");\n                            }\n                        }\n                        else\n                        {\n                            // Here we deal with the psychotic RLE used by BMP files.\n\n                            // First zero the image since the RLE sometimes jumps over\n                            // pixels and assumes the image has been zero initialized.\n                            assign_all_pixels(image, 0);\n\n                            long row = biHeight-1;\n                            long col = 0;\n                            while (true)\n                            {\n                                if (in.sgetn(reinterpret_cast<char*>(buf),2) != 2)\n                                {\n                                    throw image_load_error(\"bmp load error 21.9: file too short\");\n                                }\n\n                                const unsigned char count = buf[0];\n                                const unsigned char command = buf[1];\n\n                                if (count == 0 && command == 0)\n                                {\n                                    // This is an escape code that means go to the next row\n                                    // of the image\n                                    --row;\n                                    col = 0;\n                                    continue;\n                                }\n                                else if (count == 0 && command == 1)\n                                {\n                                    // This is the end of the image.  So quit this loop.\n                                    break;\n                                }\n                                else if (count == 0 && command == 2)\n                                {\n                                    // This is the escape code for the command to jump to\n                                    // a new part of the image relative to where we are now.\n                                    if (in.sgetn(reinterpret_cast<char*>(buf),2) != 2)\n                                    {\n                                        throw image_load_error(\"bmp load error 21.1: file too short\");\n                                    }\n                                    col += buf[0];\n                                    row -= buf[1];\n                                    continue;\n                                }\n                                else if (count == 0)\n                                {\n                                    // This is the escape code for a run of uncompressed bytes\n\n                                    if (row < 0 || col + command > image.nc())\n                                    {\n                                        // If this is just some padding bytes at the end then ignore them\n                                        if (row >= 0 && col + count <= image.nc() + padding)\n                                            continue;\n\n                                        throw image_load_error(\"bmp load error 21.2: file data corrupt\");\n                                    }\n\n                                    // put the bytes into the image\n                                    for (unsigned int i = 0; i < command; ++i)\n                                    {\n                                        if (in.sgetn(reinterpret_cast<char*>(buf),1) != 1)\n                                        {\n                                            throw image_load_error(\"bmp load error 21.3: file too short\");\n                                        }\n                                        rgb_pixel p;\n                                        p.red   = red[buf[0]];\n                                        p.green = green[buf[0]];\n                                        p.blue  = blue[buf[0]];\n                                        assign_pixel(image[row][col],p);\n\n                                        ++col;\n                                    }\n\n                                    // if we read an uneven number of bytes then we need to read and\n                                    // discard the next byte.\n                                    if ((command&1) != 1)\n                                    {\n                                        if (in.sgetn(reinterpret_cast<char*>(buf),1) != 1)\n                                        {\n                                            throw image_load_error(\"bmp load error 21.4: file too short\");\n                                        }\n                                    }\n\n                                    continue;\n                                }\n\n                                rgb_pixel p;\n\n                                if (row < 0 || col + count > image.nc())\n                                {\n                                    // If this is just some padding bytes at the end then ignore them\n                                    if (row >= 0 && col + count <= image.nc() + padding)\n                                        continue;\n\n                                    throw image_load_error(\"bmp load error 21.5: file data corrupt\");\n                                }\n\n                                // put the bytes into the image\n                                for (unsigned int i = 0; i < count; ++i)\n                                {\n                                    p.red   = red[command];\n                                    p.green = green[command];\n                                    p.blue  = blue[command];\n                                    assign_pixel(image[row][col],p);\n\n                                    ++col;\n                                }\n                            }\n                        }\n\n\n\n                    }\n                    break;\n                case 16:\n                    throw image_load_error (\"16 bit BMP images not supported\");\n                case 24:\n                    {\n                        // figure out how the pixels are packed\n                        long padding;\n                        if (bfSize - bfOffBits == biWidth*biHeight*3)\n                            padding = 0;\n                        else\n                            padding = 4 - (biWidth*3)%4;\n\n                        // check for this case.  It shouldn't happen but some BMP writers screw up the files\n                        // so we have to do this.\n                        if (biHeight*(biWidth*3+padding) > bfSize - bfOffBits)\n                            padding = 0;\n                        \n                        // seek to the start of the pixel data\n                        while (bytes_read_so_far != bfOffBits)\n                        {\n                            const long to_read = (long)std::min(bfOffBits - bytes_read_so_far, (unsigned long)sizeof(buf));\n                            if (in.sgetn(reinterpret_cast<char*>(buf), to_read) != to_read)\n                            {\n                                throw image_load_error(\"bmp load error: missing data\");\n                            }\n                            bytes_read_so_far += to_read;\n                        }\n\n                        // load the image data\n                        for (long row = biHeight-1; row >= 0; --row)\n                        {\n                            for (unsigned long col = 0; col < biWidth; ++col)\n                            {\n                                if (in.sgetn(reinterpret_cast<char*>(buf),3) != 3)\n                                {\n                                    throw image_load_error(\"bmp load error 8: file too short\");\n                                }\n\n                                rgb_pixel p;\n                                p.red = buf[2];\n                                p.green = buf[1];\n                                p.blue = buf[0];\n                                assign_pixel(image[row][col], p);\n\n                            }\n                            if (in.sgetn(reinterpret_cast<char*>(buf),padding) != padding)\n                                throw image_load_error(\"bmp load error 9: file too short\");\n                        }\n\n                        break;\n                    }\n                case 32:\n                    throw image_load_error (\"32 bit BMP images not supported\");\n                default:\n                    throw image_load_error(\"bmp load error 10: unknown color depth\");\n\n            }\n        }\n        catch (...)\n        {\n            image.clear();\n            throw;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void load_dng (\n        image_type& image_,\n        std::istream& in\n    )\n    {\n        image_view<image_type> image(image_);\n        using namespace dng_helpers_namespace;\n        try\n        {\n            if (in.get() != 'D' || in.get() != 'N' || in.get() != 'G')\n                throw image_load_error(\"the stream does not contain a dng image file\");\n\n            unsigned long version;\n            deserialize(version,in);\n            if (version != 1)\n                throw image_load_error(\"You need the new version of the dlib library to read this dng file\");\n\n            unsigned long type;\n            deserialize(type,in);\n\n            long width, height;\n            deserialize(width,in);\n            deserialize(height,in);\n\n            if (width > 0 && height > 0)\n                image.set_size(height,width);\n            else\n                image.clear();\n\n            if (type != grayscale_float)\n            {\n                typedef entropy_decoder::kernel_2a decoder_type;\n                decoder_type decoder;\n                decoder.set_stream(in);\n\n                entropy_decoder_model<256,decoder_type>::kernel_5a edm(decoder);\n                unsigned long symbol;\n                rgb_pixel p_rgb;\n                rgb_alpha_pixel p_rgba;\n                hsi_pixel p_hsi;\n                switch (type)\n                {\n                    case rgb_alpha_paeth:\n\n                        for (long r = 0; r < image.nr(); ++r)\n                        {\n                            for (long c = 0; c < image.nc(); ++c)\n                            {\n                                p_rgba = predictor_rgb_alpha_paeth(image,r,c);\n                                edm.decode(symbol);\n                                p_rgba.red += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgba.green += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgba.blue += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgba.alpha += static_cast<unsigned char>(symbol);\n\n                                assign_pixel(image[r][c],p_rgba);\n                            }\n                        }\n                        break;\n\n                    case rgb_alpha:\n\n                        for (long r = 0; r < image.nr(); ++r)\n                        {\n                            for (long c = 0; c < image.nc(); ++c)\n                            {\n                                p_rgba = predictor_rgb_alpha(image,r,c);\n                                edm.decode(symbol);\n                                p_rgba.red += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgba.green += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgba.blue += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgba.alpha += static_cast<unsigned char>(symbol);\n\n                                assign_pixel(image[r][c],p_rgba);\n                            }\n                        }\n                        break;\n\n                    case rgb_paeth:\n\n                        for (long r = 0; r < image.nr(); ++r)\n                        {\n                            for (long c = 0; c < image.nc(); ++c)\n                            {\n                                p_rgb = predictor_rgb_paeth(image,r,c);\n                                edm.decode(symbol);\n                                p_rgb.red += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgb.green += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgb.blue += static_cast<unsigned char>(symbol);\n\n                                assign_pixel(image[r][c],p_rgb);\n                            }\n                        }\n                        break;\n\n                    case rgb:\n\n                        for (long r = 0; r < image.nr(); ++r)\n                        {\n                            for (long c = 0; c < image.nc(); ++c)\n                            {\n                                p_rgb = predictor_rgb(image,r,c);\n                                edm.decode(symbol);\n                                p_rgb.red += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgb.green += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_rgb.blue += static_cast<unsigned char>(symbol);\n\n                                assign_pixel(image[r][c],p_rgb);\n                            }\n                        }\n                        break;\n\n                    case hsi:\n\n                        for (long r = 0; r < image.nr(); ++r)\n                        {\n                            for (long c = 0; c < image.nc(); ++c)\n                            {\n                                p_hsi = predictor_hsi(image,r,c);\n                                edm.decode(symbol);\n                                p_hsi.h += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_hsi.s += static_cast<unsigned char>(symbol);\n\n                                edm.decode(symbol);\n                                p_hsi.i += static_cast<unsigned char>(symbol);\n\n                                assign_pixel(image[r][c],p_hsi);\n                            }\n                        }\n                        break;\n\n                    case grayscale:\n                        {\n                            unsigned char p;\n                            for (long r = 0; r < image.nr(); ++r)\n                            {\n                                for (long c = 0; c < image.nc(); ++c)\n                                {\n                                    edm.decode(symbol);\n                                    p = static_cast<unsigned char>(symbol);\n                                    p +=  predictor_grayscale(image,r,c);\n                                    assign_pixel(image[r][c],p);\n                                }\n                            }\n                        }\n                        break;\n\n                    case grayscale_16bit:\n                        {\n                            uint16 p;\n                            for (long r = 0; r < image.nr(); ++r)\n                            {\n                                for (long c = 0; c < image.nc(); ++c)\n                                {\n                                    edm.decode(symbol);\n                                    p = static_cast<uint16>(symbol);\n                                    p <<= 8;\n                                    edm.decode(symbol);\n                                    p |= static_cast<uint16>(symbol);\n\n                                    p +=  predictor_grayscale_16(image,r,c);\n                                    assign_pixel(image[r][c],p);\n                                }\n                            }\n                        }\n                        break;\n\n                    default:\n                        throw image_load_error(\"corruption detected in the dng file\");\n                } // switch (type)\n\n                edm.decode(symbol);\n                if (symbol != dng_magic_byte)\n                    throw image_load_error(\"corruption detected in the dng file\");\n                edm.decode(symbol);\n                if (symbol != dng_magic_byte)\n                    throw image_load_error(\"corruption detected in the dng file\");\n                edm.decode(symbol);\n                if (symbol != dng_magic_byte)\n                    throw image_load_error(\"corruption detected in the dng file\");\n                edm.decode(symbol);\n                if (symbol != dng_magic_byte)\n                    throw image_load_error(\"corruption detected in the dng file\");\n            }\n            else // if this is a grayscale_float type image\n            {\n                std::vector<int64> man(image.size());\n                std::vector<char> expbuf;\n                // get the mantissa data\n                for (unsigned long j = 0; j < man.size(); ++j)\n                    deserialize(man[j], in);\n                // get the compressed exponent data\n                deserialize(expbuf, in);\n                typedef entropy_decoder::kernel_2a decoder_type;\n                typedef entropy_decoder_model<256,decoder_type>::kernel_4a edm_exp_type; \n                vectorstream inexp(expbuf);\n                decoder_type decoder;\n                decoder.set_stream(inexp);\n\n                edm_exp_type edm_exp(decoder);\n                float_details prev;\n                unsigned long i = 0;\n                // fill out the image \n                for (long r = 0; r < image.nr(); ++r)\n                {\n                    for (long c = 0; c < image.nc(); ++c)\n                    {\n                        unsigned long exp1, exp2;\n                        edm_exp.decode(exp1);\n                        edm_exp.decode(exp2);\n\n                        float_details cur(man[i++],(exp2<<8) | exp1);\n                        cur.exponent += prev.exponent;\n                        cur.mantissa += prev.mantissa;\n                        prev = cur;\n                        \n                        // Only use long double precision if the target image contains long\n                        // doubles because it's slower to use those.\n                        if (!is_same_type<typename image_traits<image_type>::pixel_type,long double>::value)\n                        {\n                            double temp = cur;\n                            assign_pixel(image[r][c],temp);\n                        }\n                        else\n                        {\n                            long double temp = cur;\n                            assign_pixel(image[r][c],temp);\n                        }\n                    }\n                }\n                unsigned long symbol;\n                edm_exp.decode(symbol);\n                if (symbol != dng_magic_byte)\n                    throw image_load_error(\"corruption detected in the dng file\");\n                edm_exp.decode(symbol);\n                if (symbol != dng_magic_byte)\n                    throw image_load_error(\"corruption detected in the dng file\");\n                edm_exp.decode(symbol);\n                if (symbol != dng_magic_byte)\n                    throw image_load_error(\"corruption detected in the dng file\");\n                edm_exp.decode(symbol);\n                if (symbol != dng_magic_byte)\n                    throw image_load_error(\"corruption detected in the dng file\");\n            }\n        }\n        catch (...)\n        {\n            image.clear();\n            throw;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void load_bmp (\n        image_type& image,\n        const std::string& file_name\n    )\n    {\n        std::ifstream fin(file_name.c_str(), std::ios::binary);\n        if (!fin)\n            throw image_load_error(\"Unable to open \" + file_name + \" for reading.\");\n        load_bmp(image, fin);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void load_dng (\n        image_type& image,\n        const std::string& file_name\n    )\n    {\n        std::ifstream fin(file_name.c_str(), std::ios::binary);\n        if (!fin)\n            throw image_load_error(\"Unable to open \" + file_name + \" for reading.\");\n        load_dng(image, fin);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IMAGE_LOADEr_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/image_loader_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_IMAGE_LOADEr_ABSTRACT_\n#ifdef DLIB_IMAGE_LOADEr_ABSTRACT_\n\n#include <iosfwd>\n#include \"../algs.h\"\n#include \"../pixel.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n    class image_load_error : public dlib::error \n    { \n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an exception used to indicate a failure to load an image.\n                Its type member variable will be set to EIMAGE_LOAD.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void load_bmp (\n        image_type& image,\n        std::istream& in\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - #image == the image of the MS Windows BMP file that was available \n              in the input stream in.  \n            - #image[0][0] will be the upper left corner of the image \n            - #image[image.nr()-1][image.nc()-1] will be the lower right\n              corner of the image\n            - Performs any color space conversion necessary to convert the\n              BMP image data into the pixel type used by the given image\n              object.\n        throws\n            - image_load_error\n                This exception is thrown if there is an error that prevents us\n                from loading the image.  If this exception is thrown then \n                #image will have an initial value for its type.\n            - std::bad_alloc \n                If this exception is thrown then #image will have an initial\n                value for its type.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void load_bmp (\n        image_type& image,\n        const std::string& file_name\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - opens the file indicated by file_name with an input file stream named fin \n              and performs:\n              load_bmp(image,fin);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    /*!\n        dlib dng file format:\n            This is a file format I created for this library.  It is a lossless \n            compressed image format that is similar to the PNG format but uses\n            the dlib PPM compression algorithms instead of the DEFLATE algorithm.\n    !*/\n\n    template <\n        typename image_type \n        >\n    void load_dng (\n        image_type& image,\n        std::istream& in\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - #image == the image of the dlib dng file that was available \n              in the input stream in. \n            - #image[0][0] will be the upper left corner of the image \n            - #image[image.nr()-1][image.nc()-1] will be the lower right\n              corner of the image\n            - Performs any color space conversion necessary to convert the\n              dng image data into the pixel type used by the given image\n              object.\n        throws\n            - image_load_error\n                This exception is thrown if there is an error that prevents us\n                from loading the image.  If this exception is thrown then \n                #image will have an initial value for its type.\n            - std::bad_alloc \n                If this exception is thrown then #image will have an initial\n                value for its type.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void load_dng (\n        image_type& image,\n        const std::string& file_name\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - opens the file indicated by file_name with an input file stream named fin \n              and performs:\n              load_dng(image,fin);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IMAGE_LOADEr_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/jpeg_loader.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net), Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_JPEG_LOADER_CPp_\n#define DLIB_JPEG_LOADER_CPp_\n\n// only do anything with this file if DLIB_JPEG_SUPPORT is defined\n#ifdef DLIB_JPEG_SUPPORT\n\n#include \"../array2d.h\"\n#include \"../pixel.h\"\n#include \"../dir_nav.h\"\n#include \"jpeg_loader.h\"\n#include <stdio.h>\n#include <jpeglib.h>\n#include <sstream>\n#include <setjmp.h>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    jpeg_loader::\n    jpeg_loader( const char* filename ) : height_( 0 ), width_( 0 ), output_components_(0)\n    {\n        read_image( filename );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    jpeg_loader::\n    jpeg_loader( const std::string& filename ) : height_( 0 ), width_( 0 ), output_components_(0)\n    {\n        read_image( filename.c_str() );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    jpeg_loader::\n    jpeg_loader( const dlib::file& f ) : height_( 0 ), width_( 0 ), output_components_(0)\n    {\n        read_image( f.full_name().c_str() );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool jpeg_loader::is_gray() const\n    {\n        return (output_components_ == 1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool jpeg_loader::is_rgb() const\n    {\n        return (output_components_ == 3);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    struct jpeg_loader_error_mgr \n    {\n        jpeg_error_mgr pub;    /* \"public\" fields */\n        jmp_buf setjmp_buffer;  /* for return to caller */\n    };\n\n    void jpeg_loader_error_exit (j_common_ptr cinfo)\n    {\n        /* cinfo->err really points to a jpeg_loader_error_mgr struct, so coerce pointer */\n        jpeg_loader_error_mgr* myerr = (jpeg_loader_error_mgr*) cinfo->err;\n\n        /* Return control to the setjmp point */\n        longjmp(myerr->setjmp_buffer, 1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void jpeg_loader::read_image( const char* filename )\n    {\n        if ( filename == NULL )\n        {\n            throw image_load_error(\"jpeg_loader: invalid filename, it is NULL\");\n        }\n        FILE *fp = fopen( filename, \"rb\" );\n        if ( !fp )\n        {\n            throw image_load_error(std::string(\"jpeg_loader: unable to open file \") + filename);\n        }\n\n        jpeg_decompress_struct cinfo;\n        jpeg_loader_error_mgr jerr;\n\n        cinfo.err = jpeg_std_error(&jerr.pub);\n\n        jerr.pub.error_exit = jpeg_loader_error_exit;\n\n        /* Establish the setjmp return context for my_error_exit to use. */\n        if (setjmp(jerr.setjmp_buffer)) \n        {\n            /* If we get here, the JPEG code has signaled an error.\n             * We need to clean up the JPEG object, close the input file, and return.\n             */\n            jpeg_destroy_decompress(&cinfo);\n            fclose(fp);\n            throw image_load_error(std::string(\"jpeg_loader: error while reading \") + filename);\n        }\n\n\n        jpeg_create_decompress(&cinfo);\n\n        jpeg_stdio_src(&cinfo, fp);\n\n        jpeg_read_header(&cinfo, TRUE);\n\n        jpeg_start_decompress(&cinfo);\n\n        height_ = cinfo.output_height;\n        width_ = cinfo.output_width;\n        output_components_ = cinfo.output_components;\n\n        if (output_components_ != 1 && \n            output_components_ != 3)\n        {\n            fclose( fp );\n            jpeg_destroy_decompress(&cinfo);\n            std::ostringstream sout;\n            sout << \"jpeg_loader: Unsupported number of colors (\" << output_components_ << \") in file \" << filename;\n            throw image_load_error(sout.str());\n        }\n\n        std::vector<unsigned char*> rows;\n        rows.resize(height_);\n\n        // size the image buffer\n        data.resize(height_*width_*output_components_);\n\n        // setup pointers to each row\n        for (unsigned long i = 0; i < rows.size(); ++i)\n            rows[i] = &data[i*width_*output_components_];\n\n        // read the data into the buffer\n        while (cinfo.output_scanline < cinfo.output_height)\n        {\n            jpeg_read_scanlines(&cinfo, &rows[cinfo.output_scanline], 100);\n        }\n\n        jpeg_finish_decompress(&cinfo);\n        jpeg_destroy_decompress(&cinfo);\n\n        fclose( fp );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_JPEG_SUPPORT\n\n#endif // DLIB_JPEG_LOADER_CPp_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/jpeg_loader.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net), Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_JPEG_IMPORT\n#define DLIB_JPEG_IMPORT\n\n#include \"jpeg_loader_abstract.h\"\n#include \"../smart_pointers.h\"\n#include \"image_loader.h\"\n#include \"../pixel.h\"\n#include \"../dir_nav.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n    class jpeg_loader : noncopyable\n    {\n    public:\n\n        jpeg_loader( const char* filename );\n        jpeg_loader( const std::string& filename );\n        jpeg_loader( const dlib::file& f );\n\n        bool is_gray() const;\n        bool is_rgb() const;\n\n        template<typename T>\n        void get_image( T& t_) const\n        {\n#ifndef DLIB_JPEG_SUPPORT\n            /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n                You are getting this error because you are trying to use the jpeg_loader\n                object but you haven't defined DLIB_JPEG_SUPPORT.  You must do so to use\n                this object.   You must also make sure you set your build environment\n                to link against the libjpeg library.\n            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n            COMPILE_TIME_ASSERT(sizeof(T) == 0);\n#endif\n            image_view<T> t(t_);\n\n            t.set_size( height_, width_ );\n            for ( unsigned n = 0; n < height_;n++ )\n            {\n                const unsigned char* v = get_row( n );\n                for ( unsigned m = 0; m < width_;m++ )\n                {\n                    if ( is_gray() )\n                    {\n                        unsigned char p = v[m];\n                        assign_pixel( t[n][m], p );\n                    }\n                    else // if ( is_rgb() )\n                    {\n                        rgb_pixel p;\n                        p.red = v[m*3];\n                        p.green = v[m*3+1];\n                        p.blue = v[m*3+2];\n                        assign_pixel( t[n][m], p );\n                    }\n                }\n            }\n        }\n\n    private:\n        const unsigned char* get_row( unsigned long i ) const\n        {\n            return &data[i*width_*output_components_];\n        }\n\n        void read_image( const char* filename );\n        unsigned long height_; \n        unsigned long width_;\n        unsigned long output_components_;\n        std::vector<unsigned char> data;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void load_jpeg (\n        image_type& image,\n        const std::string& file_name\n    )\n    {\n        jpeg_loader(file_name).get_image(image);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"jpeg_loader.cpp\"\n#endif \n\n#endif // DLIB_JPEG_IMPORT \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/jpeg_loader_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net), Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_JPEG_IMPORT_ABSTRACT\n#ifdef DLIB_JPEG_IMPORT_ABSTRACT\n\n#include \"image_loader_abstract.h\"\n#include \"../algs.h\"\n#include \"../pixel.h\"\n#include \"../dir_nav.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n    class jpeg_loader : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                Defined by the constructors\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a class capable of loading JPEG image files.\n                Once an instance of it is created to contain a JPEG file from\n                disk you can obtain the image stored in it via get_image().\n        !*/\n\n    public:\n\n        jpeg_loader( \n            const char* filename \n        );\n        /*!\n            ensures\n                - loads the JPEG file with the given file name into this object\n            throws\n                - std::bad_alloc\n                - image_load_error\n                  This exception is thrown if there is some error that prevents\n                  us from loading the given JPEG file.\n        !*/\n\n        jpeg_loader( \n            const std::string& filename \n        );\n        /*!\n            ensures\n                - loads the JPEG file with the given file name into this object\n            throws\n                - std::bad_alloc\n                - image_load_error\n                  This exception is thrown if there is some error that prevents\n                  us from loading the given JPEG file.\n        !*/\n\n        jpeg_loader( \n            const dlib::file& f \n        );\n        /*!\n            ensures\n                - loads the JPEG file with the given file name into this object\n            throws\n                - std::bad_alloc\n                - image_load_error\n                  This exception is thrown if there is some error that prevents\n                  us from loading the given JPEG file.\n        !*/\n\n        ~jpeg_loader(\n        );\n        /*!\n            ensures\n                - all resources associated with *this has been released\n        !*/\n\n        bool is_gray(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains a grayscale image) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n        \n        bool is_rgb(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains a 3 channel RGB image) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        template<\n            typename image_type \n            >\n        void get_image( \n            image_type& img\n        ) const;\n        /*!\n            requires\n                - image_type == an image object that implements the interface defined in\n                  dlib/image_processing/generic_image.h \n            ensures\n                - loads the JPEG image stored in this object into img\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void load_jpeg (\n        image_type& image,\n        const std::string& file_name\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - performs: jpeg_loader(file_name).get_image(image);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_JPEG_IMPORT_ABSTRACT\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/load_image.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net), Nils Labugt, Changjiang Yang (yangcha@leidos.com)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LOAd_IMAGE_Hh_\n#define DLIB_LOAd_IMAGE_Hh_\n\n#include \"load_image_abstract.h\"\n#include \"../string.h\"\n#include \"png_loader.h\"\n#include \"jpeg_loader.h\"\n#include \"image_loader.h\"\n#include <fstream>\n\nnamespace dlib\n{\n    namespace image_file_type\n    {\n        enum type\n        {\n            BMP,\n            JPG,\n            PNG,\n            DNG,\n            UNKNOWN\n        };\n\n        inline type read_type(const std::string& file_name) \n        {\n            std::ifstream file(file_name.c_str(), std::ios::in|std::ios::binary);\n            if (!file)\n                throw image_load_error(\"Unable to open file: \" + file_name);\n\n            char buffer[9];\n            file.read((char*)buffer, 8);\n            buffer[8] = 0;\n\n            // Determine the true image type using link:\n            // http://en.wikipedia.org/wiki/List_of_file_signatures\n\n            if (strcmp(buffer, \"\\x89\\x50\\x4E\\x47\\x0D\\x0A\\x1A\\x0A\") == 0) \n                return PNG;\n            else if(buffer[0]=='\\xff' && buffer[1]=='\\xd8' && buffer[2]=='\\xff') \n                return JPG;\n            else if(buffer[0]=='B' && buffer[1]=='M') \n                return BMP;\n            else if(buffer[0]=='D' && buffer[1]=='N' && buffer[2] == 'G') \n                return DNG;\n\n            return UNKNOWN;\n        }\n    };\n\n    template <typename image_type>\n    void load_image (\n        image_type& image,\n        const std::string& file_name\n    )\n    {\n        const image_file_type::type im_type = image_file_type::read_type(file_name);\n        switch (im_type)\n        {\n            case image_file_type::BMP: load_bmp(image, file_name); return;\n            case image_file_type::DNG: load_dng(image, file_name); return;\n#ifdef DLIB_PNG_SUPPORT\n            case image_file_type::PNG: load_png(image, file_name); return;\n#endif\n#ifdef DLIB_JPEG_SUPPORT\n            case image_file_type::JPG: load_jpeg(image, file_name); return;\n#endif\n            default:  ;\n        }\n\n        if (im_type == image_file_type::JPG)\n            throw image_load_error(\"DLIB_JPEG_SUPPORT not #defined: Unable to load image in file \" + file_name);\n        else if (im_type == image_file_type::PNG)\n            throw image_load_error(\"DLIB_PNG_SUPPORT not #defined: Unable to load image in file \" + file_name);\n        else\n            throw image_load_error(\"Unknown image file format: Unable to load image in file \" + file_name);\n    }\n\n}\n\n#endif // DLIB_LOAd_IMAGE_Hh_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/load_image_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net), Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LOAd_IMAGE_ABSTRACT_\n#ifdef DLIB_LOAd_IMAGE_ABSTRACT_\n\n#include \"load_image_abstract.h\"\n#include \"../string.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n    template <typename image_type>\n    void load_image (\n        image_type& image,\n        const std::string& file_name\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - This function looks at the file extensions and file headers to try and figure\n              out what kind of image format is inside the given file.  It then calls one of\n              load_png(), load_jpeg(), load_bmp(), or load_dng() as appropriate and stores\n              the resulting image into #image.\n        throws\n            - image_load_error\n                This exception is thrown if there is some error that prevents\n                us from loading the given image file.\n    !*/\n\n}\n\n#endif // DLIB_LOAd_IMAGE_ABSTRACT_ \n\n \n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/png_loader.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net), Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PNG_LOADER_CPp_\n#define DLIB_PNG_LOADER_CPp_\n\n// only do anything with this file if DLIB_PNG_SUPPORT is defined\n#ifdef DLIB_PNG_SUPPORT\n\n#include \"../array2d.h\"\n#include \"../pixel.h\"\n#include \"../dir_nav.h\"\n#include \"png_loader.h\"\n#include <png.h>\n#include \"../string.h\"\n#include \"../byte_orderer.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct LibpngData\n    {\n        png_bytep* row_pointers_;\n        png_structp png_ptr_;\n        png_infop info_ptr_;\n        png_infop end_info_;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    png_loader::\n    png_loader( const char* filename ) : height_( 0 ), width_( 0 )\n    {\n        read_image( filename );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    png_loader::\n    png_loader( const std::string& filename ) : height_( 0 ), width_( 0 )\n    {\n        read_image( filename.c_str() );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    png_loader::\n    png_loader( const dlib::file& f ) : height_( 0 ), width_( 0 )\n    {\n        read_image( f.full_name().c_str() );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const unsigned char* png_loader::get_row( unsigned i ) const\n    {\n        return ld_->row_pointers_[i];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    png_loader::~png_loader()\n    {\n        if ( ld_ && ld_->row_pointers_ != NULL )\n            png_destroy_read_struct( &( ld_->png_ptr_ ), &( ld_->info_ptr_ ), &( ld_->end_info_ ) );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool png_loader::is_gray() const\n    {\n        return ( color_type_ == PNG_COLOR_TYPE_GRAY );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool png_loader::is_graya() const\n    {\n        return ( color_type_ == PNG_COLOR_TYPE_GRAY_ALPHA );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool png_loader::is_rgb() const\n    {\n        return ( color_type_ == PNG_COLOR_TYPE_RGB );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool png_loader::is_rgba() const\n    {\n        return ( color_type_ == PNG_COLOR_TYPE_RGB_ALPHA );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // Don't do anything when libpng calls us to tell us about an error.  Just return to \n    // our own code and throw an exception (at the long jump target).\n    void png_loader_user_error_fn_silent(png_structp  png_struct, png_const_charp ) \n    {\n        longjmp(png_jmpbuf(png_struct),1);\n    }\n    void png_loader_user_warning_fn_silent(png_structp , png_const_charp ) \n    {\n    }\n\n    void png_loader::read_image( const char* filename )\n    {\n        ld_.reset(new LibpngData);\n        if ( filename == NULL )\n        {\n            throw image_load_error(\"png_loader: invalid filename, it is NULL\");\n        }\n        FILE *fp = fopen( filename, \"rb\" );\n        if ( !fp )\n        {\n            throw image_load_error(std::string(\"png_loader: unable to open file \") + filename);\n        }\n        png_byte sig[8];\n        if (fread( sig, 1, 8, fp ) != 8)\n        {\n            fclose( fp );\n            throw image_load_error(std::string(\"png_loader: error reading file \") + filename);\n        }\n        if ( png_sig_cmp( sig, 0, 8 ) != 0 )\n        {\n            fclose( fp );\n            throw image_load_error(std::string(\"png_loader: format error in file \") + filename);\n        }\n        ld_->png_ptr_ = png_create_read_struct( PNG_LIBPNG_VER_STRING, NULL, &png_loader_user_error_fn_silent, &png_loader_user_warning_fn_silent );\n        if ( ld_->png_ptr_ == NULL )\n        {\n            fclose( fp );\n            throw image_load_error(std::string(\"png_loader: parse error in file \") + filename);\n        }\n        ld_->info_ptr_ = png_create_info_struct( ld_->png_ptr_ );\n        if ( ld_->info_ptr_ == NULL )\n        {\n            fclose( fp );\n            png_destroy_read_struct( &( ld_->png_ptr_ ), ( png_infopp )NULL, ( png_infopp )NULL );\n            throw image_load_error(std::string(\"png_loader: parse error in file \") + filename);\n        }\n        ld_->end_info_ = png_create_info_struct( ld_->png_ptr_ );\n        if ( ld_->end_info_ == NULL )\n        {\n            fclose( fp );\n            png_destroy_read_struct( &( ld_->png_ptr_ ), &( ld_->info_ptr_ ), ( png_infopp )NULL );\n            throw image_load_error(std::string(\"png_loader: parse error in file \") + filename);\n        }\n\n        if (setjmp(png_jmpbuf(ld_->png_ptr_)))\n        {\n            // If we get here, we had a problem writing the file \n            fclose(fp);\n            png_destroy_read_struct( &( ld_->png_ptr_ ), &( ld_->info_ptr_ ), &( ld_->end_info_ ) );\n            throw image_load_error(std::string(\"png_loader: parse error in file \") + filename);\n        }\n\n        png_set_palette_to_rgb(ld_->png_ptr_);\n\n        png_init_io( ld_->png_ptr_, fp );\n        png_set_sig_bytes( ld_->png_ptr_, 8 );\n        // flags force one byte per channel output\n        byte_orderer bo;\n        int png_transforms = PNG_TRANSFORM_PACKING;\n        if (bo.host_is_little_endian())\n            png_transforms |= PNG_TRANSFORM_SWAP_ENDIAN;\n        png_read_png( ld_->png_ptr_, ld_->info_ptr_, png_transforms, NULL );\n        height_ = png_get_image_height( ld_->png_ptr_, ld_->info_ptr_ );\n        width_ = png_get_image_width( ld_->png_ptr_, ld_->info_ptr_ );\n        bit_depth_ = png_get_bit_depth( ld_->png_ptr_, ld_->info_ptr_ );\n        color_type_ = png_get_color_type( ld_->png_ptr_, ld_-> info_ptr_ );\n\n\n        if (color_type_ != PNG_COLOR_TYPE_GRAY && \n            color_type_ != PNG_COLOR_TYPE_RGB && \n            color_type_ != PNG_COLOR_TYPE_RGB_ALPHA &&\n            color_type_ != PNG_COLOR_TYPE_GRAY_ALPHA)\n        {\n            fclose( fp );\n            png_destroy_read_struct( &( ld_->png_ptr_ ), &( ld_->info_ptr_ ), &( ld_->end_info_ ) );\n            throw image_load_error(std::string(\"png_loader: unsupported color type in file \") + filename);\n        }\n\n        if (bit_depth_ != 8 && bit_depth_ != 16)\n        {\n            fclose( fp );\n            png_destroy_read_struct( &( ld_->png_ptr_ ), &( ld_->info_ptr_ ), &( ld_->end_info_ ) );\n            throw image_load_error(\"png_loader: unsupported bit depth of \" + cast_to_string(bit_depth_) + \" in file \" + std::string(filename));\n        }\n\n        ld_->row_pointers_ = png_get_rows( ld_->png_ptr_, ld_->info_ptr_ );\n\n        fclose( fp );\n        if ( ld_->row_pointers_ == NULL )\n        {\n            png_destroy_read_struct( &( ld_->png_ptr_ ), &( ld_->info_ptr_ ), &( ld_->end_info_ ) );\n            throw image_load_error(std::string(\"png_loader: parse error in file \") + filename);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_PNG_SUPPORT\n\n#endif // DLIB_PNG_LOADER_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/png_loader.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net), Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PNG_IMPORT\n#define DLIB_PNG_IMPORT\n\n#include \"png_loader_abstract.h\"\n#include \"../smart_pointers.h\"\n#include \"image_loader.h\"\n#include \"../pixel.h\"\n#include \"../dir_nav.h\"\n\nnamespace dlib\n{\n\n    struct LibpngData;\n    class png_loader : noncopyable\n    {\n    public:\n\n        png_loader( const char* filename );\n        png_loader( const std::string& filename );\n        png_loader( const dlib::file& f );\n        ~png_loader();\n\n        bool is_gray() const;\n        bool is_graya() const;\n        bool is_rgb() const;\n        bool is_rgba() const;\n\n        unsigned int bit_depth () const { return bit_depth_; }\n\n        template<typename T>\n        void get_image( T& t_) const\n        {\n#ifndef DLIB_PNG_SUPPORT\n            /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n                You are getting this error because you are trying to use the png_loader\n                object but you haven't defined DLIB_PNG_SUPPORT.  You must do so to use\n                this object.   You must also make sure you set your build environment\n                to link against the libpng library.\n            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n            COMPILE_TIME_ASSERT(sizeof(T) == 0);\n#endif\n\n            typedef typename image_traits<T>::pixel_type pixel_type;\n            image_view<T> t(t_);\n            t.set_size( height_, width_ );\n\n\n            if (is_gray() && bit_depth_ == 8)\n            {\n                for ( unsigned n = 0; n < height_;n++ )\n                {\n                    const unsigned char* v = get_row( n );\n                    for ( unsigned m = 0; m < width_;m++ )\n                    {\n                        unsigned char p = v[m];\n                        assign_pixel( t[n][m], p );\n                    }\n                }\n            }\n            else if (is_gray() && bit_depth_ == 16)\n            {\n                for ( unsigned n = 0; n < height_;n++ )\n                {\n                    const uint16* v = (uint16*)get_row( n );\n                    for ( unsigned m = 0; m < width_;m++ )\n                    {\n                        dlib::uint16 p = v[m];\n                        assign_pixel( t[n][m], p );\n                    }\n                }\n            }\n            else if (is_graya() && bit_depth_ == 8)\n            {\n                for ( unsigned n = 0; n < height_;n++ )\n                {\n                    const unsigned char* v = get_row( n );\n                    for ( unsigned m = 0; m < width_; m++ )\n                    {\n                        unsigned char p = v[m*2];\n                        if (!pixel_traits<pixel_type>::has_alpha)\n                        {\n                            assign_pixel( t[n][m], p );\n                        }\n                        else\n                        {\n                            unsigned char pa = v[m*2+1];\n                            rgb_alpha_pixel pix;\n                            assign_pixel(pix, p);\n                            assign_pixel(pix.alpha, pa);\n                            assign_pixel(t[n][m], pix);\n                        }\n                    }\n                }\n            }\n            else if (is_graya() && bit_depth_ == 16)\n            {\n                for ( unsigned n = 0; n < height_;n++ )\n                {\n                    const uint16* v = (uint16*)get_row( n );\n                    for ( unsigned m = 0; m < width_; m++ )\n                    {\n                        dlib::uint16 p = v[m*2];\n                        if (!pixel_traits<pixel_type>::has_alpha)\n                        {\n                            assign_pixel( t[n][m], p );\n                        }\n                        else\n                        {\n                            dlib::uint16 pa = v[m*2+1];\n                            rgb_alpha_pixel pix;\n                            assign_pixel(pix, p);\n                            assign_pixel(pix.alpha, pa);\n                            assign_pixel(t[n][m], pix);\n                        }\n                    }\n                }\n            }\n            else if (is_rgb() && bit_depth_ == 8)\n            {\n                for ( unsigned n = 0; n < height_;n++ )\n                {\n                    const unsigned char* v = get_row( n );\n                    for ( unsigned m = 0; m < width_;m++ )\n                    {\n                        rgb_pixel p;\n                        p.red = v[m*3];\n                        p.green = v[m*3+1];\n                        p.blue = v[m*3+2];\n                        assign_pixel( t[n][m], p );\n                    }\n                }\n            }\n            else if (is_rgb() && bit_depth_ == 16)\n            {\n                for ( unsigned n = 0; n < height_;n++ )\n                {\n                    const uint16* v = (uint16*)get_row( n );\n                    for ( unsigned m = 0; m < width_;m++ )\n                    {\n                        rgb_pixel p;\n                        p.red   = static_cast<uint8>(v[m*3]);\n                        p.green = static_cast<uint8>(v[m*3+1]);\n                        p.blue  = static_cast<uint8>(v[m*3+2]);\n                        assign_pixel( t[n][m], p );\n                    }\n                }\n            }\n            else if (is_rgba() && bit_depth_ == 8)\n            {\n                if (!pixel_traits<pixel_type>::has_alpha)\n                    assign_all_pixels(t,0);\n\n                for ( unsigned n = 0; n < height_;n++ )\n                {\n                    const unsigned char* v = get_row( n );\n                    for ( unsigned m = 0; m < width_;m++ )\n                    {\n                        rgb_alpha_pixel p;\n                        p.red = v[m*4];\n                        p.green = v[m*4+1];\n                        p.blue = v[m*4+2];\n                        p.alpha = v[m*4+3];\n                        assign_pixel( t[n][m], p );\n                    }\n                }\n            }\n            else if (is_rgba() && bit_depth_ == 16)\n            {\n                if (!pixel_traits<pixel_type>::has_alpha)\n                    assign_all_pixels(t,0);\n\n                for ( unsigned n = 0; n < height_;n++ )\n                {\n                    const uint16* v = (uint16*)get_row( n );\n                    for ( unsigned m = 0; m < width_;m++ )\n                    {\n                        rgb_alpha_pixel p;\n                        p.red   = static_cast<uint8>(v[m*4]);\n                        p.green = static_cast<uint8>(v[m*4+1]);\n                        p.blue  = static_cast<uint8>(v[m*4+2]);\n                        p.alpha = static_cast<uint8>(v[m*4+3]);\n                        assign_pixel( t[n][m], p );\n                    }\n                }\n            }\n        }\n\n    private:\n        const unsigned char* get_row( unsigned i ) const;\n        void read_image( const char* filename );\n        unsigned height_, width_;\n        unsigned bit_depth_;\n        int color_type_;\n        scoped_ptr<LibpngData> ld_;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void load_png (\n        image_type& image,\n        const std::string& file_name\n    )\n    {\n        png_loader(file_name).get_image(image);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"png_loader.cpp\"\n#endif \n\n#endif // DLIB_PNG_IMPORT \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_loader/png_loader_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net), Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_PNG_IMPORT_ABSTRACT\n#ifdef DLIB_PNG_IMPORT_ABSTRACT\n\n#include \"image_loader_abstract.h\"\n#include \"../algs.h\"\n#include \"../pixel.h\"\n#include \"../dir_nav.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n    class png_loader : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                Defined by the constructors\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a class capable of loading PNG image files.\n                Once an instance of it is created to contain a PNG file from\n                disk you can obtain the image stored in it via get_image().\n        !*/\n\n    public:\n\n        png_loader( \n            const char* filename \n        );\n        /*!\n            ensures\n                - loads the PNG file with the given file name into this object\n            throws\n                - std::bad_alloc\n                - image_load_error\n                  This exception is thrown if there is some error that prevents\n                  us from loading the given PNG file.\n        !*/\n\n        png_loader( \n            const std::string& filename \n        );\n        /*!\n            ensures\n                - loads the PNG file with the given file name into this object\n            throws\n                - std::bad_alloc\n                - image_load_error\n                  This exception is thrown if there is some error that prevents\n                  us from loading the given PNG file.\n        !*/\n\n        png_loader( \n            const dlib::file& f \n        );\n        /*!\n            ensures\n                - loads the PNG file with the given file name into this object\n            throws\n                - std::bad_alloc\n                - image_load_error\n                  This exception is thrown if there is some error that prevents\n                  us from loading the given PNG file.\n        !*/\n\n        ~png_loader(\n        );\n        /*!\n            ensures\n                - all resources associated with *this has been released\n        !*/\n\n        bool is_gray(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains a grayscale image without an alpha channel) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n        \n        bool is_graya(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains a grayscale image with an alpha channel) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n        \n        bool is_rgb(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains a 3 channel RGB image) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool is_rgba(\n        ) const;\n        /*!\n            ensures\n                - if (this object contains a 4 channel RGB alpha image) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        unsigned int bit_depth (\n        ) const;\n        /*!\n            ensures\n                - returns the number of bits per channel in the image contained by this\n                  object.  The possible values are 8 or 16.\n        !*/\n\n        template<\n            typename image_type \n            >\n        void get_image( \n            image_type& img\n        ) const;\n        /*!\n            requires\n                - image_type == an image object that implements the interface defined in\n                  dlib/image_processing/generic_image.h \n            ensures\n                - loads the PNG image stored in this object into img\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void load_png (\n        image_type& image,\n        const std::string& file_name\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - performs: png_loader(file_name).get_image(image);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_PNG_IMPORT_ABSTRACT\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/box_overlap_testing.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BOX_OVERlAP_TESTING_Hh_\n#define DLIB_BOX_OVERlAP_TESTING_Hh_\n\n#include \"box_overlap_testing_abstract.h\"\n#include \"../geometry.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class test_box_overlap\n    {\n    public:\n        test_box_overlap (\n        ) : match_thresh(0.5), overlap_thresh(1.0)\n        {}\n\n        explicit test_box_overlap (\n            double match_thresh_,\n            double overlap_thresh_ = 1.0\n        ) : match_thresh(match_thresh_), overlap_thresh(overlap_thresh_) \n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 <= match_thresh && match_thresh <= 1  &&\n                        0 <= overlap_thresh && overlap_thresh <= 1,\n                \"\\t test_box_overlap::test_box_overlap(match_thresh, overlap_thresh)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t match_thresh:   \" << match_thresh\n                << \"\\n\\t overlap_thresh: \" << overlap_thresh\n                << \"\\n\\t this: \" << this\n                );\n\n        }\n\n        bool operator() (\n            const dlib::rectangle& a,\n            const dlib::rectangle& b\n        ) const\n        {\n            const double inner = a.intersect(b).area();\n            if (inner == 0)\n                return false;\n\n            const double outer = (a+b).area();\n            if (inner/outer > match_thresh || \n                inner/a.area() > overlap_thresh || \n                inner/b.area() > overlap_thresh)\n                return true;\n            else\n                return false;\n        }\n\n        double get_overlap_thresh (\n        ) const\n        {\n            return overlap_thresh;\n        }\n\n        double get_match_thresh (\n        ) const\n        {\n            return match_thresh;\n        }\n\n    public:\n        double match_thresh;\n        double overlap_thresh;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const test_box_overlap& item,\n        std::ostream& out\n    )\n    {\n        serialize(item.get_match_thresh(), out);\n        serialize(item.get_overlap_thresh(), out);\n    }\n\n    inline void deserialize (\n        test_box_overlap& item,\n        std::istream& in \n    )\n    {\n        double overlap_thresh, match_thresh;\n        deserialize(match_thresh, in);\n        deserialize(overlap_thresh, in);\n        item = test_box_overlap(match_thresh, overlap_thresh);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline test_box_overlap find_tight_overlap_tester (\n        const std::vector<std::vector<rectangle> >& rects\n    )\n    {\n        double max_overlap = 0;\n        double max_match_score = 0;\n        for (unsigned long i = 0; i < rects.size(); ++i)\n        {\n            for (unsigned long j = 0; j < rects[i].size(); ++j)\n            {\n                for (unsigned long k = j+1; k < rects[i].size(); ++k)\n                {\n                    const rectangle a = rects[i][j];\n                    const rectangle b = rects[i][k];\n                    const double match_score = (a.intersect(b)).area()/(double)(a+b).area();\n                    const double overlap_a   = (a.intersect(b)).area()/(double)(a).area();\n                    const double overlap_b   = (a.intersect(b)).area()/(double)(b).area();\n\n                    if (match_score > max_match_score)\n                        max_match_score = match_score;\n\n                    if (overlap_a > max_overlap)\n                        max_overlap = overlap_a;\n                    if (overlap_b > max_overlap)\n                        max_overlap = overlap_b;\n                }\n            }\n        }\n\n        // Relax these thresholds very slightly.  We do this because on some systems the\n        // boxes that generated the max values erroneously trigger a box overlap match\n        // even though their overlap and match values are *equal* to the thresholds but not\n        // greater.  That is, sometimes when double values get moved around they change\n        // their values slightly, so this avoids the problems that can create.\n        max_match_score = std::min(1.0000001*max_match_score, 1.0);\n        max_overlap     = std::min(1.0000001*max_overlap,     1.0);\n        return test_box_overlap(max_match_score, max_overlap);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool overlaps_any_box (\n        const test_box_overlap& tester,\n        const std::vector<rectangle>& rects,\n        const rectangle& rect\n    )\n    {\n        for (unsigned long i = 0; i < rects.size(); ++i)\n        {\n            if (tester(rects[i],rect))\n                return true;\n        }\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool overlaps_any_box (\n        const std::vector<rectangle>& rects,\n        const rectangle& rect\n    )\n    {\n        return overlaps_any_box(test_box_overlap(),rects,rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BOX_OVERlAP_TESTING_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/box_overlap_testing_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_BOX_OVERlAP_TESTING_ABSTRACT_Hh_\n#ifdef DLIB_BOX_OVERlAP_TESTING_ABSTRACT_Hh_\n\n#include \"../geometry.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class test_box_overlap\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple function object for determining if two rectangles\n                overlap.  \n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is safe provided that \n                only const member functions are invoked.  Otherwise, access must be\n                protected by a mutex lock.\n        !*/\n\n    public:\n        test_box_overlap (\n        );\n        /*!\n            ensures\n                - #get_match_thresh()   == 0.5\n                - #get_overlap_thresh() == 1.0\n        !*/\n\n        explicit test_box_overlap (\n            double match_thresh,\n            double overlap_thresh = 1.0\n        );\n        /*!\n            requires\n                - 0 <= match_thresh <= 1\n                - 0 <= overlap_thresh <= 1\n            ensures\n                - #get_match_thresh() == match_thresh \n                - #get_overlap_thresh() == overlap_thresh\n        !*/\n\n        bool operator() (\n            const dlib::rectangle& a,\n            const dlib::rectangle& b\n        ) const;\n        /*!\n            ensures\n                - returns true if a and b overlap \"enough\". This is defined precisely below.\n                - if (a.intersect(b).area()/(a+b).area() > get_match_thresh() ||\n                      a.intersect(b).area()/a.area()     > get_overlap_thresh() ||\n                      a.intersect(b).area()/b.area()     > get_overlap_thresh() ) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        double get_match_thresh (\n        ) const;\n        /*!\n            ensures\n                - returns the threshold used to determine if two rectangles match.\n                  Note that the match score varies from 0 to 1 and only becomes 1\n                  when two rectangles are identical.\n\n        !*/\n\n        double get_overlap_thresh (\n        ) const;\n        /*!\n            ensures\n                - returns the threshold used to determine if two rectangles overlap.  This\n                  value is the percent of a rectangle's area covered by another rectangle.\n\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const test_box_overlap& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support\n    !*/\n\n    void deserialize (\n        test_box_overlap& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    test_box_overlap find_tight_overlap_tester (\n        const std::vector<std::vector<rectangle> >& rects\n    );\n    /*!\n        ensures\n            - This function finds the most restrictive test_box_overlap object possible \n              that is consistent with the given set of sets of rectangles.  \n            - To be precise, this function finds and returns a test_box_overlap object \n              TBO such that:\n                - TBO.get_match_thresh() and TBO.get_overlap_thresh() are as small\n                  as possible such that the following conditions are satisfied.\n                - for all valid i:\n                    - for all distinct rectangles A and B in rects[i]:\n                        - TBO(A,B) == false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    bool overlaps_any_box (\n        const test_box_overlap& tester,\n        const std::vector<rectangle>& rects,\n        const rectangle& rect\n    );\n    /*!\n        ensures\n            - returns true if rect overlaps any box in rects and false otherwise.  Overlap\n              is determined based on the given tester object.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    bool overlaps_any_box (\n        const std::vector<rectangle>& rects,\n        const rectangle& rect\n    );\n    /*!\n        ensures\n            - returns overlaps_any_box(test_box_overlap(), rects, rect)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_BOX_OVERlAP_TESTING_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/detection_template_tools.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DETECTION_TEMPlATE_TOOLS_Hh_\n#define DLIB_DETECTION_TEMPlATE_TOOLS_Hh_\n\n#include \"detection_template_tools_abstract.h\"\n#include \"../geometry.h\"\n#include \"../matrix.h\"\n#include <utility>\n#include <vector>\n#include <cmath>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle compute_box_dimensions (\n        const double width_to_height_ratio,\n        const double area\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(width_to_height_ratio > 0 && area > 0,\n            \"\\t rectangle compute_box_dimensions()\"\n            << \"\\n\\t Invalid arguments were given to this function. \"\n            << \"\\n\\t width_to_height_ratio: \" << width_to_height_ratio\n            << \"\\n\\t area: \" << area \n            );\n\n        /*\n            width*height == area\n            width/height == width_to_height_ratio\n        */\n        using namespace std;\n\n        const int height = (int)std::floor(std::sqrt(area/width_to_height_ratio) + 0.5);\n        const int width  = (int)std::floor(area/height + 0.5);\n\n        return centered_rect(0,0,width,height);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::vector<rectangle> create_single_box_detection_template (\n        const rectangle& object_box \n    )\n    {\n        std::vector<rectangle> temp;\n        temp.push_back(object_box);\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::vector<rectangle> create_overlapped_2x2_detection_template (\n        const rectangle& object_box \n    )\n    {\n        std::vector<rectangle> result;\n\n        const point c = center(object_box);\n\n        result.push_back(rectangle() + c + object_box.tl_corner() + object_box.tr_corner());\n        result.push_back(rectangle() + c + object_box.bl_corner() + object_box.br_corner());\n        result.push_back(rectangle() + c + object_box.tl_corner() + object_box.bl_corner());\n        result.push_back(rectangle() + c + object_box.tr_corner() + object_box.br_corner());\n\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::vector<rectangle> create_grid_detection_template (\n        const rectangle& object_box,\n        unsigned int cells_x,\n        unsigned int cells_y\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(cells_x > 0 && cells_y > 0,\n            \"\\t std::vector<rectangle> create_grid_detection_template()\"\n            << \"\\n\\t The number of cells along a dimension can't be zero. \"\n            << \"\\n\\t cells_x: \" << cells_x\n            << \"\\n\\t cells_y: \" << cells_y\n            );\n\n        std::vector<rectangle> result;\n\n        const matrix<double,1> x = linspace(object_box.left(), object_box.right(), cells_x+1);\n        const matrix<double,1> y = linspace(object_box.top(), object_box.bottom(), cells_y+1);\n\n        for (long j = 0; j+1 < y.size(); ++j)\n        {\n            for (long i = 0; i+1 < x.size(); ++i)\n            {\n                const dlib::vector<double,2> tl(x(i),y(j));\n                const dlib::vector<double,2> br(x(i+1),y(j+1));\n                result.push_back(rectangle(tl,br));\n            }\n        }\n\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#endif // DLIB_DETECTION_TEMPlATE_TOOLS_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/detection_template_tools_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_DETECTION_TEMPlATE_TOOLS_ABSTRACT_Hh_\n#ifdef DLIB_DETECTION_TEMPlATE_TOOLS_ABSTRACT_Hh_\n\n#include \"../geometry.h\"\n#include <utility>\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    rectangle compute_box_dimensions (\n        const double width_to_height_ratio,\n        const double area\n    );\n    /*!\n        requires\n            - area > 0\n            - width_to_height_ratio > 0\n        ensures\n            - returns a rectangle with the given area and width_to_height_ratio.\n            - In particular, returns a rectangle R such that:\n                - R.area() == area (to within integer precision)\n                - R.width()/R.height() == width_to_height_ratio (to within integer precision)\n                - center(R) == point(0,0)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    std::vector<rectangle> create_single_box_detection_template (\n        const rectangle& object_box \n    );\n    /*!\n        ensures\n            - returns a vector that contains only object_box.  \n            - In particular, returns a vector V such that:\n                - V.size() == 1\n                - V[0] == object_box\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    std::vector<rectangle> create_overlapped_2x2_detection_template (\n        const rectangle& object_box \n    );\n    /*!\n        ensures\n            - Divides object_box up into four overlapping regions, the\n              top half, bottom half, left half, and right half.  These\n              four rectangles are returned inside a std::vector.\n            - In particular, returns a vector V such that:\n                - V.size() == 4\n                - V[0] == top half of object_box \n                - V[1] == bottom half of object_box \n                - V[2] == left half of object_box \n                - V[3] == right half of object_box \n                - for all valid i: object_box.contains(V[i]) == true\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    std::vector<rectangle> create_grid_detection_template (\n        const rectangle& object_box,\n        unsigned int cells_x,\n        unsigned int cells_y\n    );\n    /*!\n        requires\n            - cells_x > 0\n            - cells_y > 0\n        ensures\n            - Divides object_box up into a grid and returns a vector \n              containing all the rectangles corresponding to elements\n              of the grid.  Moreover, the grid will be cells_x elements\n              wide and cells_y elements tall.\n            - In particular, returns a vector V such that:\n                - V.size() == cells_x*cells_y \n                - for all valid i: \n                    - object_box.contains(V[i]) == true\n                    - V[i] == The rectangle corresponding to the ith grid\n                      element. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#endif // DLIB_DETECTION_TEMPlATE_TOOLS_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/frontal_face_detector.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FRONTAL_FACE_DETECTOr_Hh_\n#define DLIB_FRONTAL_FACE_DETECTOr_Hh_\n\n#include \"frontal_face_detector_abstract.h\"\n#include \"../image_processing.h\"\n#include <sstream>\n#include \"../compress_stream.h\"\n#include \"../base64.h\"\n\nnamespace dlib\n{\n    typedef object_detector<scan_fhog_pyramid<pyramid_down<6> > > frontal_face_detector;\n    inline const std::string get_serialized_frontal_faces();\n\n    inline frontal_face_detector get_frontal_face_detector()\n    {\n        std::istringstream sin(get_serialized_frontal_faces());\n        frontal_face_detector detector;\n        deserialize(detector, sin);\n\t\t\n\t\t// A corrected overlap threshold that leads to better precision face detection\n\t\tdetector.boxes_overlap.overlap_thresh = 0.3;\n\n        return detector;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    /*\n        It is built out of 5 HOG filters. A front looking, left looking, right looking, \n        front looking but rotated left, and finally a front looking but rotated right one.\n        \n        Moreover, here is the training log and parameters used to generate the filters:\n        The front detector:\n            trained on mirrored set of labeled_faces_in_the_wild/frontal_faces.xml\n            upsampled each image by 2:1\n            used pyramid_down<6> \n            loss per missed target: 1\n            epsilon: 0.05\n            padding: 0\n            detection window size: 80 80\n            C: 700\n            nuclear norm regularizer: 9\n            cell_size: 8\n            num filters: 78\n            num images: 4748\n            Train detector (precision,recall,AP): 0.999793 0.895517 0.895368 \n            singular value threshold: 0.15\n\n        The left detector:\n            trained on labeled_faces_in_the_wild/left_faces.xml\n            upsampled each image by 2:1\n            used pyramid_down<6> \n            loss per missed target: 2\n            epsilon: 0.05\n            padding: 0\n            detection window size: 80 80\n            C: 250\n            nuclear norm regularizer: 8\n            cell_size: 8\n            num filters: 63\n            num images: 493\n            Train detector (precision,recall,AP): 0.991803  0.86019 0.859486 \n            singular value threshold: 0.15\n\n        The right detector:\n            trained left-right flip of labeled_faces_in_the_wild/left_faces.xml\n            upsampled each image by 2:1\n            used pyramid_down<6> \n            loss per missed target: 2\n            epsilon: 0.05\n            padding: 0\n            detection window size: 80 80\n            C: 250\n            nuclear norm regularizer: 8\n            cell_size: 8\n            num filters: 66\n            num images: 493\n            Train detector (precision,recall,AP): 0.991781  0.85782 0.857341 \n            singular value threshold: 0.19\n\n        The front-rotate-left detector:\n            trained on mirrored set of labeled_faces_in_the_wild/frontal_faces.xml\n            upsampled each image by 2:1\n            used pyramid_down<6> \n            rotated left 27 degrees\n            loss per missed target: 1\n            epsilon: 0.05\n            padding: 0\n            detection window size: 80 80\n            C: 700\n            nuclear norm regularizer: 9\n            cell_size: 8\n            num images: 4748\n            singular value threshold: 0.12\n\n        The front-rotate-right detector:\n            trained on mirrored set of labeled_faces_in_the_wild/frontal_faces.xml\n            upsampled each image by 2:1\n            used pyramid_down<6> \n            rotated right 27 degrees\n            loss per missed target: 1\n            epsilon: 0.05\n            padding: 0\n            detection window size: 80 80\n            C: 700\n            nuclear norm regularizer: 9\n            cell_size: 8\n            num filters: 89\n            num images: 4748\n            Train detector (precision,recall,AP):        1 0.897369 0.897369 \n            singular value threshold: 0.15\n    */\n    inline const std::string get_serialized_frontal_faces()\n    {\n        dlib::base64 base64_coder;\n        dlib::compress_stream::kernel_1ea compressor;\n        std::ostringstream sout;\n        std::istringstream sin;\n\n        // The base64 encoded data from the file 'object_detector.dat' we want to decode and return.\n        sout << \"AW2B5ZIvv09mlKLVYjKqbJC05yeR2KsCpPGEGOgn2QlwM92S4UT4HgQkV0V9WqYRf6xETTSVKz7Z\";\n        sout << \"YcJ84Jc4C3+VdPgZDhV+LDt6qAt3OI4nA9zN4Y9cCIb6ivlETkN/JMmapbOAUW2mrSzDif5zjAaq\";\n        sout << \"+NFvw/5V0Jciopw9tR6nYtV41unWGvyyfsO9CcqvDy81QIydToHh0a7UaL0jCtA2DYzkViDufxyv\";\n        sout << \"Kpsn4xMyiU0haM1ge3UktIO48io/gSzjEKu0YYAffbD2YO1IE34tUH15Z3Z9NjkBFxTytDgrMxk8\";\n        sout << \"i9MYq+Nl9nS421aogmec3ugExJYjLZMHs4KAk71jvG8vtJyJEA3qyLY6lvONt98gzQwGQ9+2B6de\";\n        sout << \"ocb/DDJUza6mvudHQNJBYraR4gCWcIn9gFu2rJiRHf4IiqP4GEB3B1zKiHfJRo9jZbhxQUitAxAx\";\n        sout << \"U/E2SuuHGZDilqK9AJ4K41RAudraxF9li/Bs4f+CK3G8Z/c97P7WLVekJL2ws+MsCdL9ObHE5ePD\";\n        sout << \"uLLQWBy5NUbgPVM6HEnhnOiZk3rA4DYNqbABy3uemablAln9BLGkk4wrm2UcicacnzY8Aq054Ttb\";\n        sout << \"3CCTcG4SOSPfePl/7T1M6Uy1hOesp5MpXfUR8gBKr4466dbdXCDHSahI05gra6NzxkOpOo2mOqBg\";\n        sout << \"LYNGZUkHK4tdRyyD12N1MH+nJiMJbgk+qj54t5i3AuEr/71HTRXoTT8AEYbvc9y4f2WAlliQYXPn\";\n        sout << \"O2Uaza3lKYrH7mFjKMNhLfvrezy9fe+1asbSlRKelnU3eY4lhD6fTVJjXqZypBfMnfmGQQJ0Q7g5\";\n        sout << \"1Z/9GzpRyZnPSzQljtJgzVp8Gk0z3fuKiXPO9g+s4XL2cEuxBOFij0KGTy4eNitM0gcPc6xzp3tz\";\n        sout << \"6Wv0W2h7w4h+V8Bzvyn8ag1sbEO0G1Lf2BrDVM9+pNxFoWFxYHqdoOmJPVvb8PRQqoC5bkqhplFr\";\n        sout << \"TR5l3XsQedgwsnkadxNZQ3MbRJyo0JU0kvV1cfphLcn24MIIKqAnw3daXqbJaba+oCUep5GTuzI7\";\n        sout << \"nad7ykHNN0iFkgYXMmXJl+F5TsS8y+izuHlXAX6wX1qRVzWJwCpM5oVVG/5eYTzg0J9C1bCcNyHL\";\n        sout << \"2w5TJFYrD8bq3O+Y3fiO5LJ8F5/vsu2EBUMi1+eP1WfsTwd6N9jFtF5gA5sHX3zI925aDqVx9byr\";\n        sout << \"j4X5yr68p5P6f8wSLL8jzW8i4a0yP3zXlqN6QQDY1ssfNsMf43tOTtmbBlmxviL2egs4gvadD7Gd\";\n        sout << \"fRNowL71P3mkqRmnrnihlI01NbDl+Trzsh3EOn43PRC9nl8yo+fYVH8GqS8JGy1xOw4G479vOifI\";\n        sout << \"9GC4BGnSDJdKgSnBwI1AJQ2TT8EZ//56lkRlgusg25TwC7uQ1zreeL6baYdgfXSggx3ULdNDGl5o\";\n        sout << \"ftRK9LDaop6XvB6I0ITsLYvAoGP/5sHfttDj6HlQW/LlzkSPmzY/FtV6h6bE+k1gG7BANrQjwOW5\";\n        sout << \"sfHNYadD1v4zIFdt2su3docGbGP/iDMvM+BmYIBP86zX5eIlTYwDmxXht95T6GCCjS/XuMMy12hd\";\n        sout << \"Fdb6lm1O42ieM4KQ/2EOFy3Ij+YOIapzYA6p6Jz9dtINpCojgUHyo6xc4HTNnEKRy+YN+awhb1l2\";\n        sout << \"FJdy2/QI3xGVNNTnWcQrsvjGZb/Z3VaZUltrIbnCeEZOeOCM0TxkBEhqFfI3qwMx8PUj+imUlTDM\";\n        sout << \"7N+p5sxmKLliHHovOO32ajBTKUSI9IMQzf3QY6dZDts4JkMYQ1xc6lpm679s1KMVVrWuOqiAU5Vs\";\n        sout << \"qehfnl+oMRngi0G0BnMne45CjU5RECvhg+Vkkxx0kAp38+9pY3XiO/DuyIxpOSPip2o0+9rZLF1Z\";\n        sout << \"cAUGnG85CFEXl96wpxvqVlIULUV2+pNJxdU+q1MkCsxDeXrvfjhEAJpPE38dUb3t4blsNUZ3wJ2w\";\n        sout << \"s6cXe0nEPWNkZlmEsXcFpw5zHe0Gd7YpXigz7Z+IVhvplpv686TJiLTpVPW2T1uJvSmMuG/FqvT5\";\n        sout << \"JIIMg2of1ydicw5EbWrqhIUzllX3l0u00gFziPmKAioiqCxjWojd9l3Q0Q6IsaZAH+WzV2xFabbY\";\n        sout << \"4b8SwoFvhe4qnUQLFdOSTbzeDIKP9B8bSiQwbjUBg3jYEWUrMz+eR9lpGu8603vChIEXaTxyMrO5\";\n        sout << \"SCeaVOgPE77potDoSUV1hsoW7ZqGCFH+AGyVTohitS0iqZbIxC7+7rnVP8XfXw5YpSajF94z2TSd\";\n        sout << \"jW0KpmuCZ88DTCPFamf5zh917qp/PzQOGTdalr+Ov+ogvrJraDnoE+ONWrdHqBm7Adgn8/wy5vzX\";\n        sout << \"fNu1AT14eYrEmWmXvt6JDAbBYqP8Aw8b1QRZff11MblUh0IpztedWhifGy/RFJUN0/e66Mh0cKeF\";\n        sout << \"plmK6NqchTzOQMKJVq9jxdyurcjcA0uu4dVJ1XXkAtxBim2J2m0zcwX/+HcRe9VbeNehmDbUC49o\";\n        sout << \"ktNvrwbbB1IUV/c0MNCruV359DVINXskQTK12g2X5qprOLW+YPO6CnTFpJRsiFBoLllF1sUTjROH\";\n        sout << \"SrHHRYp3W5t5gqfT4afBxmtTmpJEG0oG4eNfMhxEhQ7HjoVhahOM6px9Be9S+4ca/w+zII7NnUkY\";\n        sout << \"Iaas+FW7vhOIDOiV82SpJqBjdY9eIP//XGR1DFQKI5cLKmT2/DF8tB9XcqTgmVWNMVt9Xw21CaeR\";\n        sout << \"eYeoWvLHlm8o7ahtJCSQ0iHypTZMA16wdJ5IJD5WoYd50rUn58RBa9sTXT/t/KhxJfG5OWXl55eq\";\n        sout << \"abYojSlluFyvFSk7Z/wu/EqFUEBD8r4OIrlJCMZl6kKy4EncmjUrb3mG6aDKxsaRBRBkRRya9t77\";\n        sout << \"epMG60v3MRCcY9E+n9sXAOUpf+ErN7iD6FY4XFpq5R0Z+6MiLRE0af/JQ9R42quTl8CLH7609DDd\";\n        sout << \"s8+8bKA2zjvSJhWbwGURRCW8SK9tNKuemwkt3Eutm+xMJemP2JIVFVXYxjCvDmxIIODneu1vmcSy\";\n        sout << \"XadKkyjtYDwacddFAqGh0kLqHX9i/WoedVKC1Vuup+AYPkyZ1lPraGVqjq0nsiwp/vxm9c/+4/wS\";\n        sout << \"hW99Q+zoAZ0IWWeYAqcXGdZqvd58gx0/fmU/Pq4FqtCdJ2qnoUDMvjZeyWE7lA/Xf7AdLcz4XHNz\";\n        sout << \"VAidxMj7/K8p3KdK+XqED94Ey1WzpUQ2mH+10Zq/6jebtoYJlht9meMsjvjWxg4nwFIZY1QAMZPV\";\n        sout << \"phcmEwrLA+Z/Xjo+FEq4hKD8pIriQi4xT4uAoPzOFGp/ziwBbAb/EfYsspnVxpnERKblbDsV9bFK\";\n        sout << \"df5VSgeqg7p2auZBk/WkX/wOeXkulbiJA5lXTsgInJGoREJ+uaudFadnLD1pmjqq+VFJW6XOT++I\";\n        sout << \"arRHT1sYJY5mhqFztTeUGH5VXZNtRGl1nWpewvmgyK6T5XLUcuZqsyZVtzkkQ0eSR4h+nBuRAQZK\";\n        sout << \"EmqzcPrRKObVC7Xv+kMcnM+M2+zCuZoUSO/zt7OOXNt/B51oQ2DRqthPxgzUrWOvoOgZleeayImR\";\n        sout << \"rqG2QnkA8+Kb/mhxJ+SAqOjsIJATfLc13SzVIKVumz+uX5jUiZXWfWF/e1cdS1w3Nf+dNinnGQ2v\";\n        sout << \"Vf2SxiRlTfDTZTZXcLlT8VrCOP4UYvg0QrzBqU2myM41lZDUS2X/WOzvrNrRpEoCS6/OcbvMj5gf\";\n        sout << \"dzoZ1oqvaL3dosQ9/QAwI7wPC2/QQTRyDIbl4EuhcX/ebyueLqlxKRLPrmq/mE2YU6aU7cf+t8PM\";\n        sout << \"LX7J0eyNGl00TEWN0R7ui2xlfdnLfmILs+lNNthYvmUbtbncoqx0sCWgjk1Iqagp9uFlWA+6vMa6\";\n        sout << \"nx7Qg0Jz+Qn2u4iZpyGDZKUWmHgDYhRcKfsnjnzbztyNms4tEnmwtIeLwDqFPlC4BKefz9gja+tt\";\n        sout << \"0Om7TAtwcmWHve1ENSOQSKTLNvVwhjRLgmfK9SFUUjKeVSMp1g27Rf2WCoDyBXhRauHpqCdj7GH4\";\n        sout << \"AmlI3EUHSjS+/1ZoT/2DnHwuN+GKVh0d8k/7sGrln94r3JuxEPvfyQFvPSRlFkWYyKPdxb+H37L7\";\n        sout << \"DCYzgf43vxZ82JGYVXB7QBpO0VeEXiQcIgXV7uOsGKiXfFUwueL4kdNknk2hAfrFFQcpoBiQSz89\";\n        sout << \"sNRT1tH5Ipbuf19R66cogiaAesXnm42jLjQpnkMwd3S4F6P8zDL7m13u6ahcrWvZiyDuBc/+Th2+\";\n        sout << \"Swex+BSv2TkUorR6nwVoozQEA16/MlZB1acIFSrD0kSr22Vubdbo05svEAZ7DKIdQjDu2wTTOOvL\";\n        sout << \"IVJOYPjdxXZytBv1jRIhUyyYBvRtaFsl57ZWAmvbFEXZXLihnrBskTqxrxNPqhg+bLxicTDlFyHI\";\n        sout << \"UIipzL4AvofdYWolB8RvFyom18/szC67Flr1OW4axZ+k5S7249Y64eqtU1hk98joIhOdWaWBHxkL\";\n        sout << \"nP+ooeHeEvB5hNRIA23Yxoh4zzsWUB1KKvg1XRzjt2CBQ2FPaCfHsOKf52aaj0W2FByC81rpryrm\";\n        sout << \"Ye51T5zP5/N5j7yA+a907774PwIS3eYYyJRUCSh0ywfQ8rgkbjBdf2rKa0alzokz7Kmo2Iswnid0\";\n        sout << \"WzpliQr9KaPwAk7hkLjprMjzdJIug3KOKVAgygXP7rkgETIfTfZRG49EdJOjlW8mlmHZsO+arTFW\";\n        sout << \"vj0FgJCAQrrX0X9BOQ0MPu0friAGK0TNGsFs17lcHjaRNHXz3v6dY/MSR2TY82iyEkRofvNY/Xjr\";\n        sout << \"FRB2KM6Aq2pPpIjY4EuSQS5sU9ur5oxrKo68jNzoB9iRvmKhQq5HRSYKL5ACBF85HM2oWtyVl23y\";\n        sout << \"TqTW+jwNHfF+sc0FPS6xfwr3yvHi/OVlW046gnNLKOxO3RjGntaJeX8EVXGGpXDHLyle0UaZE0iG\";\n        sout << \"1xeLZjyKq5wRJ/Q1MPry/JJbfCXSIHeO2Uznqn7O5rcs5v3Z1PdlF7BfPUhnP7+Wcqryfi4xJ8rS\";\n        sout << \"BzyJkibOCzegvXnKTTw7q5/lrgh7LxfrY/4G6/Js8ibrUU9NGqBkOHUmxa9P7UPK43pz/bS7SWtl\";\n        sout << \"yA/3hBa0bv6hN0OeXVaBxtr8sMfS7FcvR3wtvmtKn4BlIYer3LMSvigPCK3K5seTPH3cx0J2uGzf\";\n        sout << \"SlPZus5idN8MnFCEiBUbs4W1M/BSw9EYA9rJyhDTyOYqKr6s1kagBUoVCXVlEPVgrJoppc4vLghu\";\n        sout << \"NMgUpcakhT8SAulssCjPb1UWPF92XPpn8/byK8dJoSFe1lfFb5Yog5YZMjgoKKbokk0n3eMlrbm2\";\n        sout << \"AGwIh0acdOXRR+lpeJQ240N/Waw3e+FhAI+AYfOkIXodtQcod08+F8uHCAAcd9dZvYyxZxNKjbCc\";\n        sout << \"aYTFUYPN53OZEwEyCIFWwPf0QhdhlpyAGCj9gqVU4N9b5FJYX2ZqVAl5JF4nl9yDWrJ3zmhwL4r1\";\n        sout << \"P8Pdv02ysNeZu76Y60+ffPXCqmjHjllu082gde9BXIEWdS1sd5qaH0qb8KRpV8WAYaM7/ccGTHQ+\";\n        sout << \"H+0C5o2904WS3MG8rR6LI6EqO2fcBnJzZ5BJX2bHv4kNHhQiW2tZjBlwKjuMH8Ddayd1BVqzjeuH\";\n        sout << \"5dfcL8xV4su36eRT/Vmanq/NZ80+KXsXZO1k88RIfQwwZdt5XribJfUSwzKGsKQrhu+8iUCjGP8l\";\n        sout << \"ScrIRdj3gjy2brM+zBr9z9pvFZR5NLjYN1Ko2BptMbEDxdjnYkYWix8BF1P+/PtSEJeGATIyl2al\";\n        sout << \"rAlEHX3ysdDjUic86ZNUx9c6N59ZcQkIr7IwFl6kc5sbuthroXmAnbW0A2UIO/LN6KFbbE53Up4Q\";\n        sout << \"KwoMeMHxlgEwundK+LV5WZ136K5JoA6SpvxzuKhCckg0Ev4+KtyA+1wlna6AHOQaj24BzblSd9k4\";\n        sout << \"2lWsVOwAOtGxFIRIxpou7S4yqPrvS93KPtVkrHDBqIveGcwoGfyw2ZSX+5o5SIZ5PUG3mFM/sNWw\";\n        sout << \"twketaHdV/ndITa3aJyGpqChs3hcwMOgODnpC+vjtY1D8zdp3pn4MBgb33jxc5kOCpDktiKGyaQN\";\n        sout << \"sQ7oaOy4aKmr4TFfWbrH3qeR9gz0utGL/iVHcgSlfl8rw4BFncc8HIB0SGJJhYE+lfEYpsP8H+1p\";\n        sout << \"pfG0yzIA752vcaOIWIGt+C/EvuXl5PP8qyE0aBe637yQd1aMyRhf46rsAIlhzwZ28wPYZ9KCaC41\";\n        sout << \"ap2+7/EJMw3HramAAo5OVqA6M5cV2V+MlGifSoVgTN+5TaY9EnqexQy2Gqw+9484Tv7QNVaEtwtY\";\n        sout << \"/O+aQ8nzc6H+clWCWJkWDvoqIrIqP4jFUaJ/FnqlPEb2GkPoNluJV92HqQj6fD2Iz0TQKCVQkVWq\";\n        sout << \"D/QuFVq8c+EC8Bz2j1cI0D30iwROmneb6XHTYVwn4yHkZ6LAoOz28fjT6dwJFdYo+Ci4Hhyl62tW\";\n        sout << \"P0al3X19i/IjH4Xi+ZH+lISFmA0oEJo4AG/oAklXtGtRtIwfKGIuIzqqEztmX9tY+INu7PtgH/FP\";\n        sout << \"z7d2f3CBZTZY4qTPMEPQ/th8jnjHrROZIM7Cej4v+zYms7NPlJ7x/k+eX5ISG7xEbWr8j+kr+R70\";\n        sout << \"bjGaz/rED73YxTMBmhQSKMDUjNaW/qclrQuvaNwUgM/VCtnY7NANztFMXhCa2hGjZaG/bp8Yc9IN\";\n        sout << \"T20nhrbTX+KPkcEmQjsHwyK8hT9XN6J+TD4iwdnb4A/KQI9JwaqpYPp0S1d99j0iqXlirvdPcotu\";\n        sout << \"AsUmNf1YOlK1I5KxaFA42emXXmg1vr7USuKiX62IslSjknRY0+bPxOcn09P0VK+HTTdLIZ+8p9+k\";\n        sout << \"fKsgY8ajl6qZ/LP5qbZ2KgHJHJNArwRSxNn4CR5ish97R+1A3DglEaWJ4vVuu4oaFIHc9eSgRMdJ\";\n        sout << \"IPJ52p+8SKIpjM3Tnig/Gw35R+sPcuZlpauFplYb3vcIoY7vN/f6+RKxPtWnuOfBh1iPJxJJfz+H\";\n        sout << \"MDVZihR471I+DLXgGrZ0fgMQZqVFelhF5eszKMOxB81TbRuPqUmneRijtWvR8QAySqzV3o+OoM/n\";\n        sout << \"fpoLxmcVQm3LanGF1VfCbk7X9dhocgWTpk9XjDzVjIjPceJ2IPuFjHcrNtu6L/fe/6sMqkKWNRQH\";\n        sout << \"8GGbrJU0/kqXIeYch5gXjiKFTIU/QIRt0e4YKlNV0Rpqkh8vY/X3OL8xbNCBd0bM4nCXMp5Ytwyw\";\n        sout << \"DEyjzBl4SvxgGSqG6ehAzY1LrZ3bHU0Bn/Q7vD6RIEr/WcxUvdr8oy1JuIey4PllgfcCaDdW1+wG\";\n        sout << \"YCz/81Acw7xOiG//gLZ+tApj+tGpMP3Z/vnC7bZmXAmXWCfZeWDwIcxX/V5Sco8G21PpzMYPM7k0\";\n        sout << \"1MEkR1PgNhpKv5he6criGZ6D/xVAfVJbxc7blkovBkLh109MFBCAGiA8zk3MAShzI7cynZVbyWGw\";\n        sout << \"+x5Bvl8/6xSUyG0MLFANqDilWFIEBpT8h6G6StX3WXoEfqJrO2pYMjQdqOg08AvXKWJg/xj4U2Mw\";\n        sout << \"m8+nK+zX8aXHC333WcQ+1eG918/0TEDoQAXep1atGq3wir0iBvurJHbOXffjGQalMd3AeFCLWaFn\";\n        sout << \"7tYSTWYcPnWwWuA47FxTSOPezm1PrihBIC7CyVjGHAGvtBdh2EjCVptJHYgft9Ivp0YpPFaGtT1c\";\n        sout << \"IsaiWl+dF+Yg0K4FVIpNqRq/g1EEpGni0mrTmlTKeeSiKzAXdGnjOZ/9woea73BFZkY0kAqMlrn4\";\n        sout << \"6AOIuXh9Af1UJe0OxzhcYKFjFuzj7Imjv0SgNaah5XePYFfLyqNUCctmTlFna9nZWZ4/Q/N0tqN1\";\n        sout << \"QJwMtZOdFdKoSwFcDrSuMBc2kKNCEgnXAB9azTyR6Frs6RDNbCOdmMKEIF0Ra6v4fqO/rzc+m8nM\";\n        sout << \"2GAyE9yBNQq1THcQSqlataFHDe9KkmlQ41F9hKifZEPJ2eMe4WbpMdXmjT0nNmxif9OiPMKR28EQ\";\n        sout << \"pcqtuJxTE2oQArxmoOD6uUSUpm+Xc190raj1/JA7kfFQPkONEkNn9fYRh7J9VvPk58RIkyDL3RfG\";\n        sout << \"SjlzXsvz0d2uU14U8ppyPSOUEgcvxUu9Zk/TcwZkWvQeJTPd/i7jbUyAHTPXy0secfKXWSoF4T1S\";\n        sout << \"AuuRuErtEIXmJm6bd3v6ozR+Vc494q5Nu80EGIEy+09XWaDi8E0ChYGPUn15jWmkw9aZ2SUGju+0\";\n        sout << \"OS7eaGTSBcbS7l3IaP+053oZvh6NN+iYo5Lb0rs+bog58fqpXLFLeaJFnHUmZipr4oX2EfpI3FuE\";\n        sout << \"1I7xjgdZiWMq57u9UId2PuNahTVN62Du790tZhGfoAACZxKx9xxi8nRwxz1Rh8uFosXdHJridfzF\";\n        sout << \"gzZhDTmxJjYCq7tg6769BcDtHxT2G+JOh2hMFV+aieGZEkBEfj6EWhuot2jR+VVjpLUhys154Fj1\";\n        sout << \"NLN0d0zMnJDThQlNGigIaHgVdQ+l/lNtN9ovAuVJRib/fYnSDRBpOQpOU5NuwyHjeHnYg20iKuBT\";\n        sout << \"ZWphFPD7M+zYlrVVH9Lg0AsaY5Yt0U7g+TXLuT/bi2tUz3rrrk/5bY7iLkGbEmOFZmxzXXqWdm8h\";\n        sout << \"ENOKVj/yrgSa/l93WqyOESSZk7hLMvP+OVkSj8qAKKBQ1+XyqVLODZZae0volbIcZe3HAAIjdYTm\";\n        sout << \"+JQfIGAWgkqcHwgv3WJiGPhq1WOVi4FSq2Dgxi5/J6cRg1Smsr9aCx0uNC2x362lI8Jd9yKn8m+m\";\n        sout << \"te+3Zx6sx0NCnYKxaWcH3V7BfF0hp0WQJ3vQbPG20PD/ACHvMEgmo2dDFit6m4yfWAQxHzQZE/3N\";\n        sout << \"E5TLT4EMnZxi00F6sV0G25nElE2t9CrGkLNxTUbK2sGKx+ybsveIWpoNtQty7hY8NF2KIICOd8QJ\";\n        sout << \"FsAKxGHbydI+9NV/8KyW2UID4JpoNJOQkh4B8pp/1bkBRPsikKLyowC6RWuWmVBm/DCPSIwkiV2A\";\n        sout << \"jNHVRmSoDO+U3eTMxbamjBV/H+xWgrBzBu+4aaFGH0MbKNtXG5COeCVMCtA5v9pmR65GLD/DYWcM\";\n        sout << \"JltMV+H82nUN8qDVTMpCSzrlkiv4Gmvh6b9HkxZC03g+IrBKAkXWkhIl3iYkIjLYNudFSUddDb6g\";\n        sout << \"/wHCk0lGJlbYim9VV0uRYJITZenRrzsMcb6g6Cm22cB9awV0qpixCGVW+jms3MfgcstzqdN36KPw\";\n        sout << \"C0IDdKjN2Bu9aNqHqWafK8Vl+oTYVU6foPJSOmHD3MhFHhuZk0oPtptRs/0aSZKH3FI+jz6KyTM0\";\n        sout << \"E9UDooIsxYAo7og8Ka1QCVel8cH4mmTBWTGLNNxuVwvHYgQc+j+QgKJ8DX3XzEHJQVL2fxCmm3i/\";\n        sout << \"tjJTltGK8o3S66OO3dN5g1KaYyxCDkmKjsGpyqAKGhdrzQzwLru4oof/b4cM6E/3aqGWH9pI27G2\";\n        sout << \"8jNYhu6r5LhYMpczurY9gssS94+RdUn4UFMt2zZSlpFsCY9E0NNaGwQ5sX0pcyk9r/FKWAWxT+e4\";\n        sout << \"b/buzfSIVsHWrzytkKOYCHMylaPd+juDOWX/Y1x5IBmR/VnpsIWbuYFjRlK7bvNoVcwitIZyI1Ku\";\n        sout << \"vmkH9u5YzndkbH9fj8FroFgMdZumIeRSFz2448yoIh/1+2wyEUXUvof32q5kktEutky9XtKCTIen\";\n        sout << \"LlWO9/7k0Kcz2Cp1S8bugmULKSLHEWMTtScZhEOl/o3jyMjLpbHhSfY5IHwZXVp6MO/bxpk4F4ur\";\n        sout << \"C2eAlsHUW0484VZFIm/GtgNRKq5H4MTRSmlzHxh0o5KnK87ZZNGKv2sGFoxhOKT8g9s8uz2ZfkI8\";\n        sout << \"HS0VWQ5y0Y9dY00ShJj9FShAuForC1EW8TBcgW2wjk7uN4CjXgupadGHC4hMFxVjJJ4tPj53PX+w\";\n        sout << \"KKTety47QKF0aeNAXeiNkzo0e/H8XYKYvyRKPpUhWbj5rzdkSev920dKjpq731kGRLUP8kljqmx4\";\n        sout << \"j/1ukvHqJrarb/U0LWECXe1mHUjehedJNCuDsXmlX3OIT4557z3W9vMbzKyu+0R+LN2YtYUFTdXA\";\n        sout << \"z442W3oqy7cJRIMfioDLTO4ry26sNo4uyq83j3iFx2iY4Wc41ZUGg9cwh5TVKg8XEh5US5xlsqVO\";\n        sout << \"kDR3XfYXA3GwuKklaNN6vImd+oP4g2ZYSl51f7tj5hd9xpTSRwIy3RJJ5VoTz+36jpT4Y3fnlppg\";\n        sout << \"GqBmWhJrY5UemTIoZbJ5X12NjQjW2HiKsuiCpLS9Wm0IXYWcRSYfiWYBLP+QZFyRA2VqVpwmY2X1\";\n        sout << \"EafYVxAjG2au8TnbfK+PLccuRg+kYNExJfD/hLUMyVg4wkLxP95L8CB85+g/1VomueeKJFnlrnkO\";\n        sout << \"ezCBls31aI/r4fMbdISFALkRwPav4rVwi8M67zuhxx/K97+5I4ONkaSU8/DI4SpqjfEIzl/y07Rg\";\n        sout << \"VUou00laGIhidjtfwENl18fyXGmjmLI/Mn+/H8gU1mW4Z0stSN/NkPYZjTx1AnvjG/LgaY1750yS\";\n        sout << \"4dk+ygLr07oWPhGB3BhIElS7VDxZnnPo2MFIPXTqWHqZ1/lNq8DE2EqgHgpFQGmp2MZVi060DA0Y\";\n        sout << \"En5g8zk1NXq0irzIv/hXYLbDEnL4ieulF+BlWN1oeERYelY8VkqgMtqGwBlwiO/qN488MVobHHAk\";\n        sout << \"VARDBpkSyX2bsF0KS4BCwybuQtNPVCaozYKWd8Q0RSNvsK72afBC+snd/y2KrFhcE4mE9ZhAwV7R\";\n        sout << \"LRR4IBmgNkDPDi7YXFEVZ4No5G5dJYL3yfsZy4b0kBEplbOoIjYxwz2dXYtX5Wc3hcKzRblKZG2i\";\n        sout << \"GkmTHabzN4BTwbGBxmCTbbyecAIO6MFJGlnxW6tQfdiQbcBbt1utUTpjVhZPVkGolN4VgU/qFPCj\";\n        sout << \"UyO9bO+RUapMvtwhI9+1KPcGiTbQsAX/V9+dSCjQIgD5sLRjfVQcKmK6/R0VSppo3ab0+XHDv55p\";\n        sout << \"FOPkhAKiKvI4Wl1JcKcsx8mwxCoTSchCxp5JhNn+WYBoINpTlmdRKI2hfXvfY+YXUzbATuTLKIZX\";\n        sout << \"IsHeRrzLNmntT4lzgHtEArSwEcYDRXLKBd+L13FZBV8iMX3ON8vUBMLU8QKoSDXatEI//h8RcI2R\";\n        sout << \"pOba7GU2f5TWFy5lB74tBKpcllmmid9w6jE2T3yhxU0E5GFWxWv64oSJDCfyD5GRfY7L2dOVBVwA\";\n        sout << \"H1DuC3NeBQfgaY+DPYFyC2gR6vEihtW5biK4HZoQkEHaBD8nREBdMlh8DcGuXwsTwEH1co2xFaNz\";\n        sout << \"53QpwalF61MYqPbQuFXZBvFEruliv3cYHUgIqtFo902pwFOK447zzj81l+5XzdVZHsA6dCGAjSqW\";\n        sout << \"J//PGJo3M48ERSqeURrEwNN6lD6nOqs9XAkQyGp0xLcv1/EVyzMoYTWazSaTkHbocIh58BOJVDya\";\n        sout << \"rjRytgcV9cAKzYvY9O3NBPvWMBSybUG0weBGTpWXNlydqxlAc7PBND1DfOL4XA6aDHpra2rRpJ/t\";\n        sout << \"xQJvaFWVNRYBOpR34GsrLpczGcf/z5hhR1gpE5y9//b26xf7V66n3kn0w2qGADZz4eL+Y7Wl1rIJ\";\n        sout << \"QXs4U95d6lfp26TVY7MsmQRf1GaO4keltA6LW8XkS9zXro/Ydl49AWToXe7suuJk6OGzaUqJImLB\";\n        sout << \"fI1w0xXDoVdNfY1SgepZyQxrW7PqtQUlLTHccsTDUJqVdu9ZUMnCVlo+6fQNz5lS7wvRbv5iqgkz\";\n        sout << \"DMyynFxFQvzk2L3sZUt1+xTw9r2d7urJ9VmGpj0arjR2+qb+2mfFqH0HaldqN+DGEiibZ7w9PmCT\";\n        sout << \"MNDZvjC0zm2N87yPuRBSbwn4JoAD979lNhFSpExOt7v2zucluinLIqwESRQjWnyun+xTZbu1MAka\";\n        sout << \"JAut97DUpQb5ALQ7TLqKOfk4vSSP07cVRJPSH6K3XnR+ZFX9W+7kb1mYRhJ60r3uKUYAoYJIdGqL\";\n        sout << \"jgbNfvqdTZqUOVq/Sfc2/B2T3kY0W6facFDev+/YnpwWe95pYSfUbewbM35nEZGJ0HVSRHnBTWIO\";\n        sout << \"n7C6Xeg9e29pfohDW3jy7vPL9HU7+GdvhZYMUfNeQTe0zYKuY0+/UtMIuMFzDJ1J9tBy/cLPuI4K\";\n        sout << \"oyPNxmTBGCcf33xcff6ZvAePZPBFgjmbV8izFio89if2qmyhGPDi6LH2NxYGpjC0f+aPj3j3H7Ua\";\n        sout << \"yX5PEPGDl+3l5jZjuY+sLwwqgrUV0skzdcjAyEbLPClOkj2BG5dELl4VcD8ESsOwyk7Yyb2mt44n\";\n        sout << \"GKgKNGm2+EwSNyvECcoEksksg7gaE6ZNXazytt+kRITYczq/v57+U7/tSjyTRL5qPLxWX5OwESUw\";\n        sout << \"y2zx0ulSrfH44+Xxr7ZnI82X5IgDehZJQvNPBmtPTB6JvDuUhJMd+hQF1lboLwEHAfZKpcN4v7FB\";\n        sout << \"GEZi7Sp/iWCZQwtALzUDY4YKGUuS7uOyjpHcQp+hxIlbhXY9byIyhvvVy361/nbVwOnEHo5BaKYE\";\n        sout << \"csaN1xi8WvBN108lpddsUUDRgBW7oKXoiDI06pfubDTDZHSJDABQlnor5sTsIQBMs35yYGuq0lMN\";\n        sout << \"lDJ5h6Nb8r6h2HhenA8tSBmMXoq3j4IAq0jUDpeR9TXX4pBbGfN1HgWpbIrAKmSh9L6Pxa/tB97o\";\n        sout << \"D5seIFPmORWWemSfAMoAs28YqCise3933/HPnCk83PcWH/4S7+KITJx0tIgF8ssoS36XP4J9L/1Y\";\n        sout << \"ym65j7ffiEEDH2rDgip/UQ7utwOHAIW6rOjkComtHS0F+m+yOcdoIwecU9J4rPGLgpq7KW7oSdD8\";\n        sout << \"5/ckw1VAwgUvvo4YT9forakPHIPB9BgroHxUjvbvABXJEkYGw7xUwn51NSj+7LieWTsE+IVs2kWx\";\n        sout << \"TAU1B6hsUPr3f4Z2g74JI1AVGc9KSuJhTtognYLM0amQd7HkR9Y4gmTRYYrSbE1yCWj/gYd5Sn+W\";\n        sout << \"/NUvdGmfqjcmItvBAkDr7lf79aevcKySCPfP5ZzDBfM6aJw/T6EC3KwBpY4obv/Zgx9dLKZhA9Uh\";\n        sout << \"jCKQEEpTnfOOGI7D92zvtySthJNjrGzN8ZVdJHyzXMSYWgHEElfM3bB3LdAe54vVG/XyHag1EMMH\";\n        sout << \"DnH9JOUvMeXHOLRDnkI0RNlGg21wNjl3HTxSiXkIwpANPsBpcoow32KWYqrygnB9iF30IdwfVTbz\";\n        sout << \"OhTNM/4qyrwjdzxSTX4IeMQrviMB+gi12mTcB4G1ggqXuz1q6uFqfxrlmMx+gDAuoEbR0vFF/bXg\";\n        sout << \"M+8PXQ/oKyGYtptl5gM50TsI2CxNaBAU7SUTG2zH9pDkoko6VO3mXfRblwFH4vjJ3XETsr2uAJlS\";\n        sout << \"7wOiJOWfMj9dKFMH6efJkuZPegH2WtkRjomYXO3l/UVkWwW2KuLJgJhAgqJcI3ODJd/kVYoR+THn\";\n        sout << \"IiPnJvoBXfLTKJ6r2lbjeImNg/CwzRVhDVVPJi401mloyrMU6JQ4DtwoqeiS6qAcLDlJMcu2A0bG\";\n        sout << \"+F1isgRc72oPo86rpVxR7oJDEVRSsQqkOhv8O/lVaziMsLCBuqXUGfuohPNE/+mCdSrZZ5LzkKSe\";\n        sout << \"iTlYATHr66c+jnkOETWaEPjUpwQ6ABfit3mbttnnONmDSnenmUnHUf20QyUonJGpFMsWB+DSPFs6\";\n        sout << \"7zI9eOAhqKQh///VoPYY37AdsdacucmhBJY6lmIHHiDyT804IvuNqWLSt5/Cko8t8thgShjeSM8J\";\n        sout << \"9med4U5W4XJ1fEoialm7jil6e/fr23OJJf3VJp8JEaibvAk+rbAbc5VIzwaUG1duo1O4783HLJu5\";\n        sout << \"4we8QCONtekxRwXi5R2gUi//qD1kJKbKxnkYOXaKNWkUbEXPOSy+evfT6jfbYcdk7VvmfA0qioZc\";\n        sout << \"B9nVWevTpoC/1sE/aSX7dqAWjOd5WH+KsReDpJAtB+uMhu4iyzaHV/gPuCAUdm16nVmHgcBP65Ix\";\n        sout << \"Rz93awPYE4aI2yoWBvJnIN/GgUJPBW5rHFcTncTV1LSUMePStawPL7BZaY/V/HRBUOnQ3V+p3xwE\";\n        sout << \"QqFY44ilI49X0t0OR04upM1hjEnx1lVyd/2bSw03lCDr+y6oNwi/hrk389KdFRtlxT0/rItCg+gX\";\n        sout << \"JVV3Q5LyY4WEE5on7coii0m/ZyXMxNT/RitPnLWc2aPtEKhbVOWpVuQGw00eYcKTs+AN1SuqcsrA\";\n        sout << \"7mVcPVIYhQ9/rDYzAzdG3HTcuiFrDWkGIOQp++BZEYitA7zEexC0xZPQZsqcKoH8RieRidrtPNXS\";\n        sout << \"ihFNGNNuxYQWVchClJMvEBrl1ankneT/fJOLTob7xAG+o/n1zdtSeTUtXPN4O4ym3GiubaONLzLL\";\n        sout << \"Z1TzkBa+H/t9NkI+Vp3kVRswJr3cEu6K607OPm6yGAxw/BwpQRBli6uf6SMAdNcAPMwZr9xV7Est\";\n        sout << \"pLz8ibkfNdfMj6fMY9WKJ5CJhajqg0WPFTlnSnaRs5ERtBLK9r8Ip/XS2VUT9/rqeFivpq8OsInl\";\n        sout << \"yV5iKygaW5OyZOtBbI4SrhN30LZZaoP4D4fjXqc5/EzHyzGCYCfgjKrytefR2F6CqUUdBOn0nVtH\";\n        sout << \"Z4xjlb6IBw80vupy3KEjpjsl8eAiYM9JsV9aw4Fd2hjCdeg6yPCNN56pm59Yamga80+31oINYjri\";\n        sout << \"3OcSjN6tVNwdf1Jr0s6Y1+0VgrXT+AbHuMkdPQbhTgQr/AAqHzUr+5FhrIZ7xM2vF3PrqUDakSkQ\";\n        sout << \"P8xIrxYawDr6fXVDWeVPOlVhUSihPBMHjc187YnXDd8Hun9Lww0wUuzOPc9P3Wb8wBTFY2HiXNL1\";\n        sout << \"ciWhFec1G2O1lNNBgYSeclowdwMNrC5z9lk0jhLKLrX2Ji+B5ypECjWGE7ZMNSuETIucCTh4wl/Z\";\n        sout << \"fLIB5I8Lx2D0asU17GjJQk1UdQa9uWdNgpG07osHpTH5FoWxZcQSBl7cvfkqXltox1ItArv9yuKo\";\n        sout << \"3gDp6AgZTFOqYhSdagGzYHdzB6KkEpIUJJlvMZsRzlSNIUtHJ4muh5SbP/X0AAGWnNjNZj95Yf4L\";\n        sout << \"IS5+ZQRnfrzIl7Nvb4KkxbQicPMrtXCcZkWJ0zN+xlNOX4Ph69XZEpmkzj5OBi7H59Kcw6ZB8yEc\";\n        sout << \"3SIw3oNS+6XAIMU1TvhPexpfDTyQNBbIgyycOPYaeA7eSgg6yz/4z1RfNMVZEj8PgPri6IzZc7h7\";\n        sout << \"AzIGqSzGJWAiWCtBFSmDQ3KbDXDMAaG6e8g+zzdm5dnujiAJ+s3PneWlapo5dIvjh4MaL3w6iy6w\";\n        sout << \"T62tjz17F9eEnJD8IM36+Wn13OSPk0iFfPKZfBDZPhEAGRYG7tzc/HKJ/d4m0hEg2GTY3M6pEjZj\";\n        sout << \"nQIcccSE/e76TSkeBNrZGp7lplsixpLjBdRFSFQ59D4juFAU/8tf+MmgtxWd2VVPU/mtkYU9QXzq\";\n        sout << \"JeDq/+MOHtQoMdFuxJvlEj0EE6Aa4E4Ya31LBEoSbp7ln5dDcP/R1LvqaHZr7+XU73GMzpgMec3D\";\n        sout << \"7UY6Rnip+AXpYOaWcfz6XX6y6lLA3kdIsNptHnc+f85kigFZ1RsCXZxugGLjxcFWXVieSKv6PwVG\";\n        sout << \"oQdmyR7KlT+tdjXvfGTP9AwdU3S4QGHi77l1FSZaebpelVkrMgWhcug3s1Ed0/1c55yvaZi/ymXU\";\n        sout << \"OYEtOmPmMAB5wcOagBZsTBP4/6w8Zrfy+27SKh0W1vD/rHQMP083Xsv7HCqWppSVZMWOGJqyUkUV\";\n        sout << \"rBnbjjEmLTyHXr0e5DP7TRCpx4MWMIFUI+fkRdrWSXxNJqPlST0J4BzbQl3XSppj3iURoccQBDpN\";\n        sout << \"VoLZA+61XgLAwY4a+1HGcvVRLzlEhHCmWEaLIeWMfIpb6L7U/LQyfG4nDiMqt5HtmMbLHhSf1Iqy\";\n        sout << \"swpB3hHI+UjL+bFOD5XkCRclzVPucjimVLtsH1QXWKYIcrC23dh5/tfoR4SUxzYn30LEbmcMNctf\";\n        sout << \"ETO3ebcGC9+hvFGH1CwVowGxDhQfxf8tjORR4Vv+L0Xfp7yr0Li/Q8wPnrIQQkbasy2O7PwodnVx\";\n        sout << \"W3iohD3htvNaL90vc5WOf7o0YUKcAWfM5ryT2OJoFFYCSJaI4qLPb/b9OLg2WUL0jV7lYLrK1mBE\";\n        sout << \"JJhgJRQr1OiI4TnIIWrUQsdvkrRVYiUWzVS6RsE9dLpw0ThoXtu3Bi1gWJInLknUCJ/yUPkNqwQS\";\n        sout << \"hKult4TehcOZBfHVc+BOtTdcLNEzQVWy+HPWssvhSNIYtoWp839hdGzzLoFxsIGik40aHU78d+cq\";\n        sout << \"ksDCHIFvnbgBvPkpLxrmvXrKofATp+ywoYFeV0g808/Pl4kX+27zXT6ggZWAO/I9anenVXNcgtvx\";\n        sout << \"ICdGbYeHkfXRr1/IVvTgtN2kaS4sSRbf9LPij72aJoftCIa5EknOgNSOQuqpEDidYdaXZXl+6tg9\";\n        sout << \"lz1qKU3i0ivIjIcaGmxLEi1pBM1LwgEYWcovusXNcv5+pm6SXUgVzQkHu0Iz5MJEdrgsSsc4NN+2\";\n        sout << \"swZHdmviqcDDIk7fuOSwmj4IdjAWUq5lmgYZbpZLZ0pPsmTjqX5uaBFXqmlpKVj/vEIKiFOCGtZu\";\n        sout << \"uEek9ZEpH8aTYqjf+tGKsNNANsDNOFVwLsdD5edStQS0c3U9f2Q1KGKXw16BM7pArxVx6KxFjI4D\";\n        sout << \"LQxcYx18Gm6V4sCn2J0ahj7IO389LWJQJBcfJNyNSFhfaRbVha6itGi8UaBr7Q5LvkCvV01WUcJu\";\n        sout << \"AsuyKjRBScPvjzypYoCxSZp3ln/sXB58RGCVZ6c7UXeZnGs2ABzXEIRYIJyrsNNVky0aGKSHFRem\";\n        sout << \"r2gsZ/RYPQBVw+xt8kGwAkM2km4waF7nHbkN5SYq3VIedvw1gU3UIkbpno8zJeJcwrnoVT9n686i\";\n        sout << \"aE/9ltlEfn/OW7XUGFK4jXB9GBJ455E/9iUejULkvx7iqfRsDnhbI7UsVDn7Q4snN82f65MGUtU0\";\n        sout << \"w9UaxqWKQUZqvP6rX/4u+2IfBKWAksqUG/Rl3O4krkxQRuuOS2KA+u512w/JhgdR/9O0BNG1YuBd\";\n        sout << \"C14QpgMmqPdGEfNrXUZN7uSWJSdBiwqwh+yPFVqoclcjencYDg3ZzKNrfUMun9eKKRBJ2UqPNmJ0\";\n        sout << \"zM06doKb85m39v5GBACWExd6vWsrP8JxcHeWtDkH3Bt6qhZ4YjU38qiTD1avmK12ti8n3lpzOpNB\";\n        sout << \"ObN1g9F9JLpGQs4RrVt5xH7Xv2LsAC3UxcKZMW8nr+QVc9BykqYIU96dVj3kffJlvfM1fTyAtTN0\";\n        sout << \"4016YMvWy9OzdbSeaW9c3ua91Eq0w9Ve7rR4D7rUm0DGwaPPNaCAQP41DDP23U2RkaV2yhcS2ntN\";\n        sout << \"95eArvlyyr0JKWkMochvrYl2iHN/4cv15vog9n/9pUP15ttJdZdqiE+qwBaGA+B78y7kCf4X8dAE\";\n        sout << \"ab3I0Gbc7FLCNEsJGcQlFTSmB+2ccRQtRh74pirUXd5BPNNQUEkZWXyD4tVcDCkWRqHbkxlneyqS\";\n        sout << \"ziQQlbRyiM3MmvSmsUOWYYlq6iKu3rzomWTRukwdFP/LbClcTaMW611t5rXM2Jrl2JXWer6HsRk4\";\n        sout << \"Z65qxcLwDmjokz84nvJ1zpNeDcCq19jnxNqEOaDIpDVQxtM6RY5L96Sn395ecZHJFpL/E1TEHSbk\";\n        sout << \"V9ZnTcZwiga4d4FaVDa/L26ckv1+93o7KzMuxgopuJqf9GJ2c9inY+Y0m+71i6MNharLdfuGkLwr\";\n        sout << \"/iEeyeu8K8QcwNyDDd8QfStXRGgIGhNR573Q6ARI6a9Uft8y0hUYrJSTcaryLZRnV0xYAGAq11p0\";\n        sout << \"YOLr8U2iOncUfz0+Cfc3cu7nytOEpr+jDM70ojkQxjU7DmdCCYqdgik4v093Rv9hTdPEBFtzNNqh\";\n        sout << \"hWlaCaul6E6Pe+PdjMStduOGI8+eNFpOJ7/K7IlXuQLMLcggaXELqeqzUTaXGnMigQeiNsXUhXJr\";\n        sout << \"7g9PJYDPXXLNYIR1TuLPXCc6L5KuF+fjWQ9CwUxT6F0xCBMVMUVHQSkNoqngCeaHsQbIjpkFBbxH\";\n        sout << \"BXjl24RA5TKttRF9mUgNUQK4VV9LU93FJFqPAegUWA8A5AbaRkJbylwWT26qCwRcNcMm+wVFjxdI\";\n        sout << \"BYvJqx7TCrvo5ytBIlgRVx1HLjUcyITmeQ9CCl1j/Tfb4RwslDCgCeW0LHocZde6lCdknTwlOre8\";\n        sout << \"FHdSxxvQAImwiZKBSxPYqsRLXEGMtcFxkpAjbUZjITfHP99qD+h18ywpMp1xQz1FAa6QBaDjFQUy\";\n        sout << \"q6DWqkCYI2cOpovwq+eU9y0HKT/CxiAclgINEMJ26zRPgJDBK2vYmft5gfB0CHj8zUzBuYCK8n+u\";\n        sout << \"6RiFrok3YKqfszQbsWj/M1nBKReS75d282S02qdrnm+OwlbRFmkUX5VNUsI48fffdLUzQAVOD42L\";\n        sout << \"O04+nlesMESB1w0GezPWmsG+eNiUghaLxLnptRrcATVWseeWuqcdcDG9ct3BkyPEjaNSZGbvqN0q\";\n        sout << \"8S0H1IjsnmKrctlK+1ELXGBaND79Uq4HC8NtNseb4gEQFBTj2rI85gXxRTqPwtYvB26mpBPrWmgz\";\n        sout << \"JfLIOawOFX/GEe3W3NelU+CoBpxvGv2wmgqW2quks6TmilBZaQX1ewR61jVhKaI5oG96e4uUksjW\";\n        sout << \"I/cXdAP2GFl20jLWia2m76GGbTimCyffGDV9v3uzu+lpoZ87JgudGUKn/jdJK1uqTad/YQj5t2N2\";\n        sout << \"Y0PnVN59l6Do19E0YwY5vx5vDXs6q0SiWoy/zuY2hqcZ7paY1iJhIaanMAJjFK+3FelY/IH0Xo33\";\n        sout << \"Uhv+4k5pPRuL3AU0nA+rg4JCT9YS3OwOpcwv4kNyQL1xRg2DnlcryXMHHCZPYeVApEruSVmO8nTE\";\n        sout << \"g9cbFMz5nmDHKWdF+KH1Zs9jMTI7tfaOGS5qwX+gBwcMGUPeHf8OMiJ6y0zXo26vHzLJ61wPWLrP\";\n        sout << \"juyapqVcV/YgQl9Ok54s8YGCv9ZB4rxnxjiABMls7ZZquK5kNJ2ShQWW5F9ibtec8EcjMuK4i20B\";\n        sout << \"tTgq8ymele0eOIWVE5AZZ3yD64qqbY7kuCLJG1LxvQRe2zr3FYVYqWhfyRvywRIRFcequso1Bc9b\";\n        sout << \"HKoPDpwJDaTrQn7uhEsb02WZKg7Q4XKZVRXxDGHHcBqwa4fnNM3IPScvskFpmyrZAvR1QrjNLTii\";\n        sout << \"NdjPVn0Klyr0sQlppC50bu1eCy/Wt14QKDUA8OFYOmA5mEjVGtFktwxy9wLssgpAD8LoyPQSxuzD\";\n        sout << \"cgiB2HqNtOwNGPvlE4/ZDfT/N/j8s3lk0q0cZmrAUCBXsBDiAHNbkm3WeDEBDY9+Un6fFF1U5chM\";\n        sout << \"tKKpyvjeZd4bjQXK6zzZNavXSJzOvqVb3OKlH6OTvP11rgv3pMdHYo9T28C0onwMHN53QGPsWbzO\";\n        sout << \"57SmomSDGYs+ERJRpGEVUXgj3D+Q4O4v/fR+XMAtiSOVmz1c3c2y7Ys9Pq9pFX3UF4q6DLIWfBmE\";\n        sout << \"6omLA6O/y/Y6p++EZleosnni/RH3hMH8TvZRYFW4EojNCm7Ss+eyuktlVXQhcPUOuxQ/lK1SUx4k\";\n        sout << \"vCBOk1YCMcl67xok/WdgM/lWJvovLTLqylpQlhsHIM3I8ccuOcJ++lhPABcaXmInXnPMEV9K20kk\";\n        sout << \"d08Q72uJPoU4rjT6SMbBbq8L9UA9Ba7U2cOdK5dr3rUZwQyFZBswroQ7A9cZnuCD4ugJ4l8AnUQo\";\n        sout << \"A7ghXFgGkmzItOKtHoFYz9HmxZa+3qX23EQk3jVdml/8fFh6VjpTK73RPKwrbZyclJs0pyN09eDb\";\n        sout << \"RjZ153ucSgBH0jflZbSIoQhPdmmi+xQBqWV+YjqVYzyYJMJypf5ZrLCb682KW0KF2dpleDJUoX+Q\";\n        sout << \"4pQNhHSZWXtdJTUcRdmM8Wl3AjY0QNsbjyqe8rYj/o7FJaX/Y8b85y1fGLF3qqPJDxZQgR+jKfTg\";\n        sout << \"0vlbJdh3EbV5L//jZX7EcOTDU+dvkXOSyx8zQeS+5xwVXWPmTmaTNIriV/6EvNJBPQ0vmYCjsUoU\";\n        sout << \"6hD4EOcBuuOXADFmEcgRZl9z46qgDwqRasacBLwpaICbLCnpc8Q7QrBhpbmeHsWmqYtK6SzfiQ4j\";\n        sout << \"e19bNsz4SP4zzFzdEpLl/J7PeNWURM4SUBwZcNOZbDbD8as2KcD78JSCs0sG9zWL12JPjZ9lJ7AY\";\n        sout << \"lN9vqJl+2N6H1VGiJR3eO8Zrb/lYX2LkSz87AzRggZxDXdv1DjnPzGj740McdjWa96DZeexzAKtj\";\n        sout << \"DVHwn2PFsYDKzvmwr71zUNYLxwcK2U3ayJf8nuuP5nPkRDwl3b8ttN9QHNo2JWabnVJKWid0Dmiu\";\n        sout << \"zRus2qOuzcXLkGbgE5DdmONYcg7qznU3ostY+QyHO4/UZbDpqOPG+uXuk3SVhp6yBEmO2yE3T/We\";\n        sout << \"WCWw3dfW4DlOTxb4m+nf29ST7WIBoNR8omWSyxyZZodAXRy6NfOnpkYrgFAorXCprqzNiRLSbi8e\";\n        sout << \"hZrbJNNoqEUTrw1R/hXMJHftJH8GotFVuFuXTBV0wcm9eM0UeN1cWvuT/0dc7ORsLdbhNW7X9Uke\";\n        sout << \"tYEHwobKiM0mfa1dCdTWFvee2XkrmYsNjHfMNoQRUN/w+1VHqnFy1Q/qc1MoU/C6L1rPUjth3gNC\";\n        sout << \"oNr7jNNWH/tXMAEGqsHPP3+Hw9pqk4XE/B3QSbeQYrZqcZojBhWcwLJQIbSyJmya3w+QYKqie3k4\";\n        sout << \"/LNyngQb4on/sr1vLNCNc4c8yJAxV/nMoNx5cVDBVg/HNAh+qwhQ9tVhi7xRUpIrAPICcaWaX+RH\";\n        sout << \"Wl9jEeq6PdI1bUaTdBvF7DgSvAriB22oHxG6Jy8X5WIycn4FHMF0/ZlCfwccg8HcjvZzDlvFHfbs\";\n        sout << \"lepXFAJ21XIOWHwDzG19VnizLorKXM/FmOnFwClhG/+yTREVbWCjaTkDsOlWL6JGOehVHckhxWRM\";\n        sout << \"03eFtiNGh2k/oqsqHkDxYtt0rMmGly3vLlLN82Eiijq2iNo19EF+euIVAl2h1iEmOGXQf6lkXCCZ\";\n        sout << \"yscrDfP3XEbe0grXP0+/ETyFrAAl3/zoENKR5MUYxVziTQ2cy733o/8aX8J/X/hFTm3ZFVKKmZRp\";\n        sout << \"vS7HzVzjj8i9zZNshaRzWt1jYnQxKtJ9w9BEn0VLGcb2spLOKyctfmsughG6DDA7wjjkmNDNPFMH\";\n        sout << \"mefa7RvWjXog4gPP6SiKITag5LwuBDotZn966sOaBOWK85QelE/NBsk4hCsf5LNPkMDFJYwB2ZUK\";\n        sout << \"g/+WbwWHIGFI2O/sNsM8W4xDyia/k6ZFpaki6uOZ48uR8uLOu9mMR7NSJ19gRoe/aHeOAi40FC8v\";\n        sout << \"K6Bs4rbxF82hbJmSfp64b0d8pNPevQ4X0UEbQI8d9o8RjmDqgVwV49InO/hobuZNWyY5sIz+8b+0\";\n        sout << \"swgWi4uhT8bsQvMswskKsWmV9bxrrQ4EJFOGtzCIeC1X0Kzm25gSf7biU85dr8/3dXDQcEqdL3x/\";\n        sout << \"BVrjeWsXd3ko8dQTJzD2kNLqi2yNmymIarjj5qzTxlnAZYbJFtFxtPPO4bfPDeRRQ+D5PhiZVZn6\";\n        sout << \"a9WUtuDFmwKmoZKZIaKQfQtwkMQq6F03sU/EsO5UuglsfN9gZmLVZrNR89YPC10gM3cSXmABMYcx\";\n        sout << \"OHnaivD81i4KmkX23r4rltxlqsgzdUKiGvEpPhfRwD1bKlKb+dTFgA6x5cYaOQ+2/KqeGn0JvRHB\";\n        sout << \"HWmQQG0aJvlLelva7sG2mahqaTpsRGunwr6EkeTDwSzY711r2cNcLBRq5VGIg9ODw/Pn2eMN1Sza\";\n        sout << \"0xBt8eEzdGYywXR7zpcalcJfOOKUdpm5D/Lr0Q2y9qGhqr0yambYW4ltxSreDuBWLTp9lxjbPmeg\";\n        sout << \"tpdUAqTqOEIfskeG6FVSzfTSzUN+q9BjZw4RE7aWCtqKm1M7hF7o9FRLMhqws47tamk3AZZTIC3x\";\n        sout << \"sGaCMG1/h/gu5bH/VQUZpzIj7KWgf7PnJEL/WhAsjjgx7XRcEW4OE02pwmhe5C0WQehHYOdTSTQ3\";\n        sout << \"Y6djpbeCYLGJNSW42W9N5Qvrp3GTYyqDlRcFgsZFDK0DmBonUAsSh6Ytr8pxPSNWAejairTkKoi+\";\n        sout << \"gon4K6TAdRrK8VQSSf+eWE9oTlcteftAn4iWQzY99aisuJP0MzOJr6gZgp6s2GlsaiAA0KObTlwm\";\n        sout << \"/SptTPhSn9K+d0Os8QMMXYHlhF6waJ4i2NrCiMulOp0vHYPOKmfyCI0+hQt9R3ArNvY1pqhwBHYo\";\n        sout << \"+PMNqnEJOH28aU5s9HyHPOkQOOSvMTYnUo0kOns0sa2dSxuaZOq9kb7aqV4qG6+ZXzFL9FbAhth+\";\n        sout << \"4FWqkdDxPUbYUh9pKNQucyvCOtJdlrQbrJgMOTHShadJl9g+eF5boVBDAMZI5WP08py+U2sw19IE\";\n        sout << \"/uju0H1VxjRPA4xips+lxnZdrgWQu0zG2nHeLObhdS/gbO3R25LWZxUILdNWpVbxuQrE5dRWlIaj\";\n        sout << \"aB5qbQO7zrwCwjB/ZjDc2dNEH/4lvPv8vnEehJBa/sIoieseVzcQgFRLK0n20sdaXil9vJ3B5qyA\";\n        sout << \"UUJBjOT9I8dtvWAP41Y53UOjkkuqWOoAbfd0sp1wxpmjOgzm3BhPoGmLhJRlJ58LkVYTF2Ix/Hwt\";\n        sout << \"ZvLSvOwNE8HdPFOU8BALTzAPtVpfQCKKDD0iOdAzDJC8NX77Ar/8UGHkgcJP+9LiycmuPnxOzhGa\";\n        sout << \"tsZH//NolNfZ3+4HA2wir+hHAjw0ia6d7OSIJyLV03kjAsL6I/CajovAsT8uAkegs8ydmvLryqGB\";\n        sout << \"+98uO61GMTuZNyrv6TIG0oRDpNiKywoYmXoqdum/Dj2UtsE0A+XAb9KK8Nl6RIM27j6vkFWjgC5p\";\n        sout << \"7Y9u+TIHFd18fxQ20A8RuTKooQaC12h11+nFUR2kAUqkJq0e9LWklG9jiq2kIsfHr6jORWi5b0a5\";\n        sout << \"Tdu2IDMtMCS/58L3+RggG0BAs+hc+uX0txQJUYEUCmJDlzReIAwTWj/5j6YRFpq534fp38muNl0k\";\n        sout << \"OV5OE0UU/K+TLtfXsUQ1QCbKOvEW7RcDICz+5sC2/FIGC0B+5KY8GUeQILlr33+LIxJTKAQwdp3y\";\n        sout << \"G5BZk4EXDjoLiis8OAO6TzgfktYXL/KwAicyHdRzSUAuzQ921QA8TeKMAPd+4UrzhUp3S/cgGxNF\";\n        sout << \"sF9DVFCaYR7t8Wg/ecyZ/Kn71D8ClkIigOWuWyN2XIuHgLVb81DF3gDdcoiMQ9qroTmrCbJCukft\";\n        sout << \"4zE53jcVbaVnhr7hK56cEbe3F1eFW6pEUFNLOxFrFOwyiwngw18cy/PUThn6kpenQoYS5f4FXPul\";\n        sout << \"qlFnVMTXc/j5mWhRSNXddfti53WsTB9eh6UI/MSWNE9z8kjdMUWn4z2perojF4VUavHqea9U+6ms\";\n        sout << \"samqyF9mL9CxEhDNL0+Uof3C+yPo4KSqMC3or2rqSe8IyrAbemjcfKGqMjsxBpSGH0YcRSNoHGw9\";\n        sout << \"wC6wJ37LuOncQ3VLJM9f8zgTpgln3y5NnKz9nMrgXE017K+nW+I/U8o0XdPAJMgXlY66pfkJsShw\";\n        sout << \"JmidbowoBQGAXWO35cYQ92Avtitrs8kvq0GIuUGdIsej9PogzuW1ZLTSNJkee/S9t39cXyQ9YpzC\";\n        sout << \"KSj+H4uhCrGCQJ6Wts6l7kEhHG24Eu/mwSEw0fTTNqL5maeimxJsOdmR/IEVC/pps38ZEUuTJXuq\";\n        sout << \"J2uTsoZmiVs3ImbIkjHnN7NF0I4ryYf11Qd4ULqa3eIjraoiDn1KOZIJK41CkKOYAYIts6aFS2iw\";\n        sout << \"+34SlRxtIsIrn29zkOG3L0yc0o+fRT5gXHXPKv3eVmNca7kPGaqSrBzv+c1Fz6ShHK6tBjiPVtwp\";\n        sout << \"S7k2/05j6t0tMny1O3QzQZDTdaAi0Xx5yg+1oyK3M8XrgLsEU5aN7XNRorjMSHv4XT+xhe7F2B7V\";\n        sout << \"//JUutejh1StxytV/AswArYDSz63Q/7Vs1Eel0/Fkc/Rz9gYPKDqYo0UAFi/baWoUrSYZjYlIvBb\";\n        sout << \"fQn7nAgDTWd8Ry8dx/j8kUSR/CBWx+xz+tNPRl0TjIOWZJtT/MOqLZyODDBisgCpV2en/f9VUr0o\";\n        sout << \"V68sh5TYTczlcSA/lngZLj3uNH6n5Vh7u1kjINhOiYzYgaUzbruQJycDF096vEGTZ8JWnz8PNzT+\";\n        sout << \"gkDfWt8JtyCsQg3UHfO58YSspPbapErvM6zc+nOzOde7dLkjj10pxRtQMGc+fES5ER9QLpNF8wIR\";\n        sout << \"zGF4ENLZ63jytxO/Y3klAguefc14abKtLaOi/SfWseX0HoNpW+cA80GVq+oYU7krKhh4n7mg7NHX\";\n        sout << \"PBsUV4gmzhj0DkVAgmaGd9qT9KlZPWHU4vf1pGE5P8mIoDIwWmpFsN2sz/mEcugGWAT2JhT6CP/J\";\n        sout << \"sPOCAB66Ln2SoLzSJvBQwmtzdBZm0a0NF6TOloCdC18cJZfqYFuEJm2gUozzFMPjLKonOR3Zhr2w\";\n        sout << \"CpBUdXL90wQKDIoTIjnOIorXzjFZv+O9O7y4OBDpjDsFrcdQG3AZPtHcQU49W42aH+6XcOUqlxRc\";\n        sout << \"DYsJdg75GZliymNIWgfGGuQxJ5kysL8iPjmCxVGNnXM5FvYW/JYzcXy4A2DXqO7eyVBw6KXKHxq0\";\n        sout << \"SEF7IIjjj0TgUp7tLKY7/L0aIVuvlNblobJNZDAHYheG6OG4dAAnwaggRO/dneeiQ6hDtFbenFmQ\";\n        sout << \"SWdiYK09ZQIpXbdlXUlPiJIG+mtHudHcbaaZwVlYS5iG3NIOx/IYdKzYnStqv+5NpkBEPySa0sYy\";\n        sout << \"npsOyO7Hz/09SMXbSOo+RBkLYrYXiLtH9qiSj+Lv2N2ueJw1fN2PeCd3I05jcLJwqCEsZ0ch7FfZ\";\n        sout << \"1MaXVqdKYBD3BxBs+SY3qtHgffqUrGXDIbFARc807a65++J1NLuoD5ZXI4empkMcD1O2j46tQqdt\";\n        sout << \"MtApg+jZVUSdVCJl9YArIMwOuUdgH0oPcOItEBlmYRmDDcWX0E/fuPfa6p7u4X6zwQNY5PdI8nG9\";\n        sout << \"+Qp+PhYXKt4fB1xEivvnHXy1x3xMmDwDH7qyZEmvpiNPxZSO5ZGUbDdzUH5AwTCxVRA2/Yd9B0GZ\";\n        sout << \"+WkLsX0Ds1K55I2cTSN5Tcb2IgT2VQnFb7ceok9bY3ABeIipxABdKzhLiDeYDfeI3is/pftpDxGC\";\n        sout << \"vkyX1ZUnB7cpC9lwlwwbRdXhQ8WidAEFZNmt77xdTVeyU4cVby6WCBelfRiKd0+wXtQsSp8s7iRY\";\n        sout << \"rNHSq8FQwmt5LPdhIsvLlD6254b5AV95lYKnriWhCJ3frsNaqWc001OhiyRT2FTtYIb45pxEtFw+\";\n        sout << \"fY3kLR/xs0V7KWpXJCyt7uI51vRNCIlI2PbfEe6epAMg7oLrbXOtjJ+z6f6C5DPlVUf5pxNNg7PT\";\n        sout << \"EEGuVTVEkWOD/hKQB6iJfhLqIbgfOnglwI+pR8JzGJSJg+yuK82g9rRvzhPvIQm8Y/xmsMoQTvg4\";\n        sout << \"zBpA2kgegUxYS+0VXG6ZEbO9CjSdmtUvcIpa1yw6emAmjR1TgiDqtTtQVWksXhRNiQ2XBal/YlBE\";\n        sout << \"+45tqfGRjSiInj056XBdqsQqcQVuXcxXMT90/uslRAEV7oTmVX/XwSahsuP1VIevdVI+rC4liNj8\";\n        sout << \"yWmDEdVfQOM0u0MgevyXmDj8BMQHznlHulIVNQRhEUmX13ibjVIDLBHDyozBbvPneuY7hBejxnV+\";\n        sout << \"0kaG1VGjxSaTpH+jOhXwK2UvlXPTN+FM4UPLS93zEzEiJ4EWDUR1wL9VUXEfx7IveXQSYixy/rMy\";\n        sout << \"zpSX+UpoqFyiiKaG8DGxg2hu4CPjNXfKVI7/IZAFIT6KHcxPrrO/3BZ2HTqwpPUpD7SCiVQkqzwd\";\n        sout << \"gA5zjgo5/vrSFtah1TLBrd3PiN2RBsGn4EzHBdR2IIrDQcE3uB3nEQRyWPhRcO2pkVry8RtcGh4b\";\n        sout << \"hkH0XKI26GAIC3cEuRzdwWU70JlrbuN4beXlL3z3xqxz6J88vpg599N6Offn7V0Ki/z0w+kIgHJN\";\n        sout << \"H2CSc9uBNeKfQMGNdQzutSckMpg/9neWQVhgnegiV9hJ+L2lQODdnUCJp6nBYPHqkgtbOAEFRL+K\";\n        sout << \"tkKQcyc7YkJs20WUsItmeW36T26+0T3uyN72dbmGqBaZIonm32MKPgh+sVTbUspUiLdPGSFz6zuF\";\n        sout << \"89/dwHkVzv/dndOHh5yb+itB1LaCjsDRmdHw9uBYto6eJDdPa+XYOBe2w2qLyOHph/3NaHrQI8ia\";\n        sout << \"gfvPuVAZ+V4XXQgXAaWjPF0XtyBmRuEm+C0J9nWznqrKjja+HXr+hnmlEuJrHGFIJeTcpNrrbcRi\";\n        sout << \"RBdh1oiBTCG1tipAQeDf4fqRy/zrvugJg5Rx6/4fA39XHXW+IjqLMuOpA1qCpOWf/4llleXazoM1\";\n        sout << \"J392TqpJVxxg43Jfxehz+XXl//IZPMCoiNeuztiSaWuGsw8ZjBAc8mMnzehBVPv28axiOixuiofH\";\n        sout << \"WF61WGuAUXWOZ5Jqsg+7dMuHhTZznTPwGVj6hzw0cyL4KEoj02zic8JaSnnprKzhM442UFIADacs\";\n        sout << \"m6PchnrjUqfG3D9DwbGIwwmVFXePtscyV6vb19r5nITmXaQHm2zJdkpVmwe8rB0Vusg+d3Crpxe/\";\n        sout << \"kOWVPy11Gv/rkYx/1BsKd7SQJfTdsZFABUTjLIaJb9pmry7FnI+pNxWNfIyEu4wHTyNSs8ZWPOlM\";\n        sout << \"0oXY2CqzRqdnzt0rOdEp/ncMhjN0p8q93nMhfwSlH3Fvse9KZ5Vrk4Np8HDTOEjjgCQO3vpDveL4\";\n        sout << \"S53oq7IfTsp6lKSyzR3h9iYqa+fnr2G5wDoIlLBPIRXOx9+l9OH64rrNITKFntHEkFFJi8rnkr54\";\n        sout << \"0892mQk/ia9ELfn7V7pxKnEgXnSqDwldLYAWSD6hhGmvUYEvEKbS+4/D/zsfnauYNFkc+cdtPuFx\";\n        sout << \"uo6oFl+6Th5VYBwrmk7xq7j0vu9xxY0NfYXkRcd2gp7tuxAtMn0gJVbfu+IfKW7cneAT1fszraXX\";\n        sout << \"+qVo8SX9+d7phb7a4srtpA6513DcZSBSObMJ9RT+HZeYDn+3l986vZGAOJoQMGIohkU79sFTdqfR\";\n        sout << \"i0lfN9X/JohokHdD9eroMq/F4vMWEDj4ax+OR1wvJ1T9syDfS7YT9IXXt1eXYL78aHwoCJ352IQf\";\n        sout << \"Rv3phfVYK45OdBn0BqAQiUhWdQxPcwuvt9O4cs1JdChTjSSGz7bKtOPTBxst3pj0butIF1ORrs/h\";\n        sout << \"n9iLG4GVA///xeK2m1OFKDuk9AQK8hX+Nm6lEu5zKZO6NBJjSzUX928LJ+Wx93h6F/I2sy6hmBNS\";\n        sout << \"0bhas2TNmGX2Eiu/EslEzPudjbp8uBKLCyHvM5P0kiOdzOqfDD8L0qyuOLNumauOEVB4EuSoROZg\";\n        sout << \"uGPoG2xyiVGdkKIXIfvb9YjLpU3mebY73zeInPcaQCVY0PcbvEYIs/wMXch9CU8FP4wyJRYsp5rP\";\n        sout << \"XELbGL9uDF4FnhmFDjVOTX5j/zV/jVNNWOv98Ue2JkVZ1o1gMweglPMk5Gnxn+twxl/OY785uZkB\";\n        sout << \"CJdsVSNbXanSF4dFQWhkEsmjXyA0PVsw7uD0tfIaHB/BekjR2hWcwbUmsAUzIm4EVvepSk3Ec3rc\";\n        sout << \"v0ZNE6FO3KD0kNueAt8RvhpxbO2AOL5pm3vCt3q7lbz86dalSf4mFuv23Di0Dyl8iZqNAHzsrToW\";\n        sout << \"50Wua4dgrUEhqSgn8ohZq5Y5tI7m3uiP2LTLAfVDag0TdA7IAREMvTT9F3N2f/2Ff3j3b9HW3MEI\";\n        sout << \"2PU2HZOvUzJyyOfuc0TnK2DXpyXwGWfgoeAQ1X8c4CZhEfecXs/FXM+BfUyJEBAxnAkHxSV2oKW3\";\n        sout << \"PPismlBkfTS/XPxnChKJu57uy88MTaL9cEfVexPwEiCWC8VOBAd2nQUYouKadJLVx2UliM/dKQu2\";\n        sout << \"oYzUBJKlphHkLMGgUUuhXmGFa0KFkpisUVwFtyX1ey5myWvdyjm3xGkJJW7+6KzKIuFZ8oF6QEBS\";\n        sout << \"thWf7/v+I+TMG2FI3cl96g0zhRnguGVWeQ1NCzPRsDmK0fDZcgnCGyQGtQkdVgRBysC5hLqgnq0W\";\n        sout << \"+2S+oRxhL7AY+DaVGOHfYnI+7jyf+NVcHhBfqw9qmVH/rZk6cuG23Lj3nS4IzdR96a70EWufMtHo\";\n        sout << \"Mu1zlfyTEcZ0HgZ8vZdaBzCDRT7nkqSou4/uomjQzFUBRkZYD+etcrNb70zi1Pa+AR9kYXVJIO04\";\n        sout << \"TTRLgikAT4Ja36SlxjBbWDS0swHyWy3ecHhdKwVvZcklA8yxzLvdBbiANv51v/o4O8vP2AAqAQV8\";\n        sout << \"AcOjIeo46sslQzYC0aYgaigzGmsx6nYGgQ2zFH8bpWR0KNnP394GdKHx0AuIjmC1/FKtN0KVVQeE\";\n        sout << \"xcU6gbb8Lbe9Mw/WZYDiGtSVXrNBlD59+0dNG/SAyDZj1LqU1Fp0thu+CzID2LVAJtA7z4Wlx8f3\";\n        sout << \"t3iMWYIq9+3fDuCta6hORK3L/FUG89sB3Rqbi6OaYW7nu60+tm+qRP7ECwoNcyVFtGLOOMDonoyM\";\n        sout << \"uHGfkqQcEeQaAfPeWl7sEbnzmBbdqZ+xUj63WTpGQ42Ceqaa+LeoUJT3zdt8tDK4Hc9j39rZh0zX\";\n        sout << \"HtwdVVVlozsSQO6HvvElDrBwO8EY/YPczI4dUGCc28KcHNgEQQ+M7UenP4mbqoTIbo4Q0i7FCvEu\";\n        sout << \"9/TrBv0JQ88ae2xds6Lk5xsQomtH4ITr4VYliRfDO9bD60zxQBhhiHo5joRQ7sW/t3ms1tDzsco0\";\n        sout << \"YG4xVvyLzUHdDh4FBNVXJ5ZHnHnTBnppmNZ3M3ucVQpk3mEXauKEdPt7AWwdX6rCqNR81/ZasFJh\";\n        sout << \"qTU34x7ZH4Lg3Ut+95CHI1qubhh5W9feqPOLbvUaJzuqxlcsTZBhY43N1PSCerMFFez/b1/Rtw0m\";\n        sout << \"OAmNLDlwUfsqtrs4q3OnKlfXyHlwuIDe3fClgcE4r+9i6QSjVzPDaPfRwE+eTFRKPm9uhlLQYAnP\";\n        sout << \"YvVqOtnUCbLQod0SIakYVb24cwnvuHfGwx1tikIizumhn07N/8LXxtVGth+prxi0Lu8b3hMI52e0\";\n        sout << \"LXdzbJfXUa44mXoyEL0ARMyhaombmUt6BX/HaBLx19n6j+munyoheRlpqIdIMWllIAaEMbxCoyXO\";\n        sout << \"ExRZf8NPFANOB0hvtXhN5U17hleB7U8ri/6Uf/j30M+jglbucV015gMXP3h+E8qg8aOy/RoxhkWi\";\n        sout << \"lJBmD8OIGytd0GcoSmpzYzpoOQ+DVNMvVlBJxzG2sQy87PtAiJW0u22n5LGUVEQLxAJrRDdEiKcO\";\n        sout << \"zp/wdKOlFD102SjWbLp1mQIrqkjVgGRs+M8kIzTSyUw3HQPOvucyewaf30EkILRHwNOpUq18WxRt\";\n        sout << \"dE3BXUtm6v0Xc1rn71+Kbka3pXmU3qoLLQaCLLFQXcDBnKGt0olk84XYOb0/cTlnxBJiips2Q0z1\";\n        sout << \"CD8+ny5LOekJtzcze0PcYimx7Rl1EilhFrq9fF2N1cdyF2skG9UfoPVor/6U4dDGzN1qTzN/uflE\";\n        sout << \"harEkP1c3/Dk4BqYx39Vym1nvTSs9dYVYli+6K9EPaxjUu6ng+3ad48uZWE0xA5i8DfEYU+VBYSg\";\n        sout << \"ssaHO3OrblCccri8HgN1U17xnDR5C/zBxpcgoQ5BZfs6GYsjsDmIHz4Kq7dCvZ5xXStqZ9FEPnNf\";\n        sout << \"oeAMmWp6H15Ci6pqj12u9lZRG4rj1kQvaBvnpKgWOiscli6Q6mCTEsgtIYvmQhds27mbO6Y+uwDd\";\n        sout << \"ZP01VsjBxmPZaLxpUabmGIZiwAsAZKLN9qQgRt7EdMIDsyLehadWOzcjiYTHrWTrQQ8R7zN3e/eT\";\n        sout << \"NYJ1wsWhxMslZ+Q96vKEmejIyWAvcVmxkCuiifp6VfXCF8BEYRsf0lY+Y1VFe7yW1BaOfy+8Q4z6\";\n        sout << \"jtBh12vD54vp7dOo9xGlFYZD/w3KQKdKyVnnqm/tbT/pCrc/X6vbrgsf7sIbV7nMUJ12FRKYYX8J\";\n        sout << \"p0C9T9nkvrPZkxNhUKIMkra9+NT4tMsBPw4MyQQsMmyUjLjZMTSRiIyupPjo8U01tXEXElUdaNxj\";\n        sout << \"feSkHmcQS1PBXV8oQfQnwEIXLGUX84fe6q6i46YrhrEhjf0crtCdpYrDOuhJPAKnu46i0sHS+xRG\";\n        sout << \"B6/685zGr8K+1ET/1RqwR7zo8t0vJf4zqhAY8OpWgvY5ASN2f0gK2dzBMfuqrai05tWaJaUhYRqL\";\n        sout << \"7FufcaIyxbmDc1laARn/mvN6pYA8C0VxexvsQqF0OlOhpLOsY31GPy722kMJeKxFLuFYYp9DeHQS\";\n        sout << \"Br1KtYMU2S/RnQ/sIbzZ15aSbYstM0K8J+9hxHCi4aq5K7KGzzNCSsuMTAz/LEDEV5UKCFd7se7E\";\n        sout << \"rs4gwaKuHqH5b9n2cAb1wMpM+VMttHtz5oQplOyrZaz1r5sUV2KGkuU4oWHiHKSgu/tvrBvU9LqT\";\n        sout << \"1TB0RV405rPe3HjtIAzSPD8/VUHZy8pNBjGi/vqZR/ybRNP8GQFWZZ+vt6l7YMX83DqWbTbfk4oR\";\n        sout << \"C06g1YnZcYt9UsV0GldCGJQZ5oJ/UHLM4bfRzSaKiRAWTwOuDv5hHL+AKJcYOvDub5pCp+EsZh7h\";\n        sout << \"kMS9v85LQNmI5vUHbhrS8XE/2Zuki86Oms0AtR3aVWWGWM28oQopU35Ayu0rQE4oexb5NDjsKcP5\";\n        sout << \"A38n8gS7O4cbHdQ3XAIQaPoUx6TVK4xL5Pc5bUJ5aRsyivvPGd6meP4AGW8YBKObMMTL6TSRBD3R\";\n        sout << \"e0B/yqLXd30yRNiazNfw/aajOIAeHfbNuFvNLeqe7IKdpRrDyLg29Fh5n3Pg4Y5+vdaJigi2Iy39\";\n        sout << \"FKvhs6zp5SE0tJubMJuFDUfgYqmW44XVNv8z+ZUIJCYQScuSkCfMmexS3LczxvOTqTm4yShuNr5A\";\n        sout << \"+o4wXi9n6jEa0pcjTVlU45mbOXiX5ELwfbSpYDorlP2BJTZqMAvnfMdxdX7cs123ysQUHxMqKK/Y\";\n        sout << \"fSUaJORhU5zWNpmiSFeTCsH0uVuWMj11H2ttk1+gotSz7I/RCvotGNzuS7SqqOZzb3h6LpjHtplh\";\n        sout << \"04W+r6/FtyAq5z9gOphIZQUhoyO2tvbY7aCciCBBX1lugJWKgCQ7Ui60G80225lAU4b9QKOGzwN6\";\n        sout << \"hqKtxP6c9Dh+rxiERh4NoE6rctk+CfBoCAxDOEFVM/bcWlEbed+KvM49mqrDF9epNJP81oIZZb4i\";\n        sout << \"afVphDQaM8LuV9LNhPSMGLOoPeYNPAxyCHnlNyAsOrZK7otQ4lFc4dLM66NFJBbSA5iBTYaW6MqM\";\n        sout << \"qGCTCWxu5MzZbgNgwMv7QrTgPy4LBH1qwST759B3Um80nBimBa+8HbddXPbsqC/KzjW2yjodKmqx\";\n        sout << \"2t6vnINn3v5Q9dFFKv4oaetAj2dqSfbfCAvcMvS/Tl0Ont6PZt8iFpH2NmwcEbrwSY/2cKKqZIh0\";\n        sout << \"sVj8a5fxwXHAkMcov5J692QQf7P+OUzmkI/P/+TlBoWYW5Zor+79wh05NnrDHqdVMY24aSRKrdIE\";\n        sout << \"qOeME0ZEnPkMyOHJRUzHoPPw5+r7Oowvbske31mERKc3Es0cCjhJ3bab+OSaoXt2xfzgLd1e2eXm\";\n        sout << \"DtOlfyyLT4vK55WTN+IP8xpw+e+D5N4bdGDn4UC13jvhrviBYxasYYU/EtFWpFGonD17FPZ22PAX\";\n        sout << \"pGNpKbM9Eet+Cabzi3hJjAXwKYCmTXHk8+aHceC6DtWExR06Dj1QKoxSJg8vcbuik11BP16e8fEB\";\n        sout << \"UiPiV0hzsLwtHdbg7uZQgvd/e8qoyivF/NqZ9e6A0s4r0NoRO+6s8OPAL1QTpavvLtDhF37g+7HH\";\n        sout << \"vjGkDbTbzU2TOdzl0OvxmSezNfASeloEOSXqIkjMStawtwC+DgLRXzMhACjjVuc+MY0D+/zGt7lp\";\n        sout << \"hQlKeLuLWLDEUYNn3Dvb7G8/6beGyyjKHlHSOr9WK90JsS6OQT+xkEZnOibrIzgZBwmws4SPrhuf\";\n        sout << \"wwwQCiHH0xjOXF7iT/vi5qEKbJePKxh4m6kbcxxaPmP56M7TfmPSYJ62RTfZbnq/FIPurztCgSHG\";\n        sout << \"jmTJvBi4m1qzKgiwHVBoWjHK3wnjQxTuerxN6CMuTA8mv+ayvrabdbRwpVRJgjSXbb/Vzgj2e0PX\";\n        sout << \"IeHUocfZtrz9J0D9f5D5nhIlqv/aSodiEn91GhsasFWwDWwSdvKwAnTtCaC8EF/+rLx/qzCneheg\";\n        sout << \"4gGRJ/VgaQ4ib9Dx0+0SnOEWoE0GJAceSDJImKJ7yi3Oo7Dxy3J/tsJFST+JKNuakqFkNCnTetmm\";\n        sout << \"FkVNEXbo8tKzbeuXlextGxSr3ZCyOYfxXsfNQUJawLDxpL6fVpaDbf6Ot7ip2nejQHL5wt1AqQIA\";\n        sout << \"GNwV3Gszf6q/bx3vXKCTrkL+AFc1VmJR4ZShMwVlVz5pdzMWJWmal5ivqLFkRQ4q4HXA1bPVhS8O\";\n        sout << \"tfnYwzNTBMRaNMpsKGTL7MOOHdmXUHDPKhoMki5bX7Oy66C0x35qEGyTozFQgygLOMFe6eOleXF0\";\n        sout << \"D40Yu6VhauEQko7l/VN0rICXaTJSaemFIgmPLT7lMfrd3Ta6XNKYxXB449SOC63A4doQBIFJnekm\";\n        sout << \"VO2t09QLePM0/ztdbA3toWuK8cTSNZgelZRbSlpgE0+d5rqxjlxmKom9I/8kj5bjS8FrQAbbsnR3\";\n        sout << \"pLEArb7kuWg3W3Gc0pdlONrgWVvoYpTtwQsrY8QfZmIVmQ+Dkcz4q+LqfYRU+TEIM4Y06Gm67JzA\";\n        sout << \"ncMkUYcVm5YS2Adqe/VFsctKTliHEPhPRFpo9Sfn7csGTexvc+IYB1mFIWy2DjRSsfIorQJ25wAy\";\n        sout << \"FX+E8PlVJPf7S9IKNM7NmNX4k0aqJYJt9VVuDidECJrYiTW9vsJ/SDM39qR2bQ01w42aG7/ksF6B\";\n        sout << \"tWPS6j9Gr6KDOtdAK9UOof2Oq6uI1ENoajWJuDMxe9fT3J9/1ruJMMDE4dn8eSXCi09ip7qbnrxv\";\n        sout << \"5splSpCC7MvfBr1bpzbQ6gsZF7tPXz9R6FfM1idioIEJITqqaaYdABv+qwad9Pwv84maHHslw8O0\";\n        sout << \"/SPCYyCpfOAbbYuVpw+cEryeS7RD7LNom1M2Qo6A5Orh6Qmd+xTExUOJCxkPNvyxUDezWtVCPxHk\";\n        sout << \"lu2vn9lqjj3UaUjALvD9xB0WsGhdJbOUtlQw3e/gEloGvQ8rLamwCBAelQqTTwM10iHkvx/AzA4p\";\n        sout << \"TZSpfZOyXY+3HEjROeej+gvP6VXL1lWcYSrEexizEzy2eN/H7kVTEgnHOzYwp2A8x6vlKHWL1gnU\";\n        sout << \"lGV1R9H2bzmhj/iGFom/TMYWmiv6mtUe3PTRTIo3W2yjlLKnBiBFhWMh8TjfcLz63dadzCLEV3hL\";\n        sout << \"D9DPn8fnJYh2HZyd/N2/lVDtEDnxqyd8C5lZnxY28bew7dB/n5euYTo1H6zWvpIHlbbbmXrHd8VQ\";\n        sout << \"iaJew6T+G+bBxuUpUQlu1NscX6mcHZBoT+/g8Ng1Q8bmjiT7/c+Pl7wpRlF/0jwhWxPIL/5mlmPf\";\n        sout << \"+pHBfYj5BWXTDrZNchJKF5Pvwdnl0GbmJsPPiQQ+Wvt+y3lt0wv1gwefzFdGhi77EJyRY841JGSh\";\n        sout << \"LU/TVYCUFn1MdrtVLhGdomxo7Bl6Zj4bZaYlKXf3Qru1bRjD0Ug2tIePfjX6TPymfgxBkgGQ0zVx\";\n        sout << \"dJuLeeRNmhIFVH8T5jJTMcmd/lS9u0hzXrEjvpSFKPmH+Fmv6LJF/D0bl/V0rYEI2gKmpAWJLd1M\";\n        sout << \"iI6/XFF/bt6tQTRu+g4WgPWk8HG3VffsHUSAI7jDK8hjrwrJm5AHIa1a/PRxiSCH5Hi2EHCPRfkB\";\n        sout << \"grfcTEwLwHJA+j0zK0tV668Bal1NBw5bJGMzQSONvQqB/vnVqcRDxhCyztjW4oAnEeeBKPlAmAsy\";\n        sout << \"MlrkLbkVwjiaYbpzkYCsO/KlIAgoahAJEOLghLQGBuhP0voDuN99bKp5JZFaGlaaycEuYFHyk9f7\";\n        sout << \"zo6Xfa+hhmjfgWJ8KCFKKvr50ndwdqRTafQVxjZRe7QkwYB5ZIpwYehKsXlr5SfTLp+ANmZqP832\";\n        sout << \"yXRF39OZLGs7xtsMmPdI6WX/xsOKiCc0oLHdzH7y7tYzLVQVSFdRZtN7HA2r2Aun8gTbLExrbfRW\";\n        sout << \"+16+go4YQEubnMwW3FeRQqbpM+0GCsiuTlBPTgnvNEWi1n3JHGHeJLs/0HRNo6ba+jVE3vIZO6B8\";\n        sout << \"NN1s+3CSDGA0uqpGg/51P21F/Q7wHDgQDxRuTP1KQGNm4u8A7Kbdw5rGZUb0ZREWwGPfUpMU0qXi\";\n        sout << \"TgY2XA4rESFQRvn3Uo8jPP7UOZgKM5bsdToC7Rp3wuKXJwBlmdTZgdly6CmELOILvHVNtGHg4yxO\";\n        sout << \"XA9Co0RF7RsHOg1b9XzfeqibiK27ZiQnZ6sIvl+EdmsnxOY+Qa8oUZdrQ0JnFUiZjC0+P0760Si4\";\n        sout << \"i36AOc4h+GzZ6WbG0yPZlFAFEcPiBbyOCp6VoY76H32BskEuSBJx0U5+iFKvkvK/6lyvr9WDTSX5\";\n        sout << \"n74qoW6/CduCm96RcKbi2ywZ0Sk8vi6V+tWYUnrDaepg/iY84UA0qpAw/QsNZN99BqOlNEWftRVP\";\n        sout << \"SZhPmpxzE2xg/SLUwR5y7NRijA8QalWWQf4G9TotViLV1IkftS1d9TvTMb38vGW4o55pWw5SZlzW\";\n        sout << \"kFf9fbqlQ5ktTZVol/v/n2pwBjDeKu9wbNFlI7bhl2xhg/3nN2e3mW0HikB6K81JywLpxL+sa8+l\";\n        sout << \"SW6bdGwbgj3BTAt9evqejNkQHVb8ALTkmZJUcPP3CmW0DWrKioqolNXrfVRjl9DLcxgQfhG7osjc\";\n        sout << \"zE7/8gU0JYIk9Tr/XDHdk9zzOsMZAHu6nUbKpIL/5mytR193QuNE3x/eCQpsG1dMC/alF8EGn77V\";\n        sout << \"QK8dhMFI3BQCXlo5TmLXd4RWOUmsNGt061t6ZQ/jvP7oPRskGSB6YUtr9Z6CN92wbnBUIf5VFJPD\";\n        sout << \"qf0mPU0vKaMsbwQmD8+rNG/bYItW8lRAZLa4gJR5r6lULMKvcMiHeP9742lYL97T5w5VTo1c0Ec/\";\n        sout << \"YTUMJKSvhfGPq4IfdtYmMOX9pmqd0VKlwnQ5w4pKiGRY3lj8zpXAHjraMA+46wTo9ZJ7Foq1XR1z\";\n        sout << \"eCY3xmnahD5uHBR3Va66rw3W0WGRgbuCk63WTKDULa0dWuvNw0RWy+MkZzbn76QLX9dYGrWYUZWM\";\n        sout << \"9mnQiC9yDObAz9vRcITf5PhEKduGFQgAl9CU0k/ZgmSmAYZ/wFJTb3U/roNqnptdm/KGuegjdQqT\";\n        sout << \"5utMQZwwcgV8DCuE3/Y9DZcnEMoeSjZF5ugB4Hw30EJt5xAvCUpVRA1tygRwwWD5XiKt9srDjBrM\";\n        sout << \"nmkQCbblTb/HTPqOvdkBO+4yHSGtpXfA3G0DdSFtFPO7OTwPLrUxf6rM6CQTgpzP6/eoupLM/I7z\";\n        sout << \"tlfmNGcq+JYCy8csjKaNlPTJextxMVqNScbpeYwG/9SpjmhqObv+oYs/uga5UBWSyS5ls+eF/Tph\";\n        sout << \"QSD9FkMCTY15Twa1LqEJy2TMZaDkE/UVJJB0Xe9eRQRXEgkM/7Olj2qsyN6VaLpzNBhcXT+Q7FDE\";\n        sout << \"NyZ3C6b4MeoE7zRM0/KEXc25ma/uiHu142x4Ar2icGm7NYTp/gxVRUrSpqOOK2EYoHzCTFilsryB\";\n        sout << \"JhzQqEIsDpNqmqyjy0BR5+rrfBJFxXAaEDryGMntT9XoLOF41ZMUAsypcv6yujSkbCemiaCTJ3gc\";\n        sout << \"9p0IkAplKKgb0m1mJ3SrW2WR56ZGhZuVIQ0p24yHi1ECqcEK4GJq1jMpHpqIGfxVLUD8yZ6wFLDl\";\n        sout << \"NP890I+aZC1kFSBSuj0Jee1VbQzTykN9oj6+8Bo8v9Yv/qt67WH1h/oIP5bxmCrjTzbncAT0zs5w\";\n        sout << \"qzi+jN+AcQS4qh+IiuCke78wgaLtnMJIb1yA0GkDM6t9crv7vKAJwGkEFZSSg+p9TucFv2RqCCjQ\";\n        sout << \"D5v0X3g0OpBql7+5IqXmuTiRCJE6BIBeeXVOtD0R6JORJ0e5Hy7SvT1LrIxISqZwat7//kb168WS\";\n        sout << \"cdpRlCa5c0+ds81SVFkjTKViZAnFkOHPGVgzxrsdlfTt1T/2fx9MZO8HT3p5V9eM9XTASzXM/jMN\";\n        sout << \"5X63GR7qz/5hpM12SMJvgcznXESiudVq7d7HYd0NeId04fzMlFaGtgGLDRr+15G0eWPCk7mcF0np\";\n        sout << \"7XLz9ytRsWC/WXaVx2/ucmztaGzksA02If8fHmKuIHbfJ4YkjjKjVRrthMCOLsGYzfb9Hat6WbXv\";\n        sout << \"jkdPQZd/EYGM/ZUd0wfuWo8W7yLidl+zMgMcJ+LeJjvRdBkHU3o70srnlKBaneUv7Ly/r2xPcsj6\";\n        sout << \"wLMH9iuRZ7jZJ45EM3htNEHJzrT/9PxaGKiK3caGIilUnFPpyb+HgousVcBbn4XSdkIjy32UPdmQ\";\n        sout << \"aG5w8GLvMEJ+SDAseg5/B2poqEiGstsA7EbJyJn3ptHk6I0lUFnpCgHI1H/vp7f5vhSIVkDyP4SD\";\n        sout << \"GPPTMLfV3mmMzS/IeIdOLdshYQCrL9I/C1sgaASFLuh0fZoWnNmSxfS1dVA7fU597PnuEzGn4TlM\";\n        sout << \"CVb8UdlIBfEmrFXegOnBEKu8RKspYa2TdawhfTZs1lyPJOxOewWH054k09q5m+p/QLHfmK4kr6wF\";\n        sout << \"eShsc8VFczeBC2MtoBVF+a2gGsz+F2Q8WhtG35kJuTqZK+lqB8clFAVSljny5eVo3WJ83QHoZMO0\";\n        sout << \"L8XspRqErV0+T/n7Uf9p72CQbw059rmyc2X1I1Mka7+cdqewt3RUZbnB7YD17+lg+do05keNDDea\";\n        sout << \"kkjLqmK+oKKOJUyDULGM2syzbhMrJn3WY1v8RuEVsLIUrCxgvMzD/Hwcl+lC3idwjonUrQuWWDyK\";\n        sout << \"dTjkimDohgLx3uoRs2ke/SCb7ERVtB0DMpLF3zytvY3D4ZGIdet4BGQ9H2nXNWMK9ahTfo4GFMxB\";\n        sout << \"EBdLiQLAqBJteGuoJ1CWdYGj6BDbYoy9sXSdnY4Hw0a8ydeBmFqoRm5wZy6ozEpxX0IeEc3W0GfV\";\n        sout << \"+4EojUBei+nfqmpeaDTWFgITbhplcgSU4snYS6dHxO4U66xa6N58YokpK0oSHkL42y9+Ap9qxiTk\";\n        sout << \"eDRtTd1wgP4m4EZS6ld1rTROZMhwgwZoyKizgzW3cc6o3rS7wNBvrdRMtOPVo0YJD0UZJtwCyDzT\";\n        sout << \"/LMXSVs5EQByRsZkKxNFMEky5F+D1IKlVny8ylC3oOI0VNJVxr+hIcuYjOf3adwKeslTQ2AO//HN\";\n        sout << \"4WEyXck1inZFxnDybu7NGa/WhNdet+PzgzEI43go+Nn/9AYLjR3m7nAcBOGgtMqmrwOTPJl0Dhnh\";\n        sout << \"QWv3JWK+OXqz3RFJ2q0lZP7A7EhU+3G5OHdHl6yFOh+Mb9TNh1ofYXPXL/mnnUhxCvUNYEXVdHGD\";\n        sout << \"RALydLzf6oY5id6VdYgCOcQY6c32WcJUEk2zCeMFNxyZ1ntzmn2KlawbF6MPWHqemMEvJM7YCFXl\";\n        sout << \"ObWzVlcxcnecWLltZB5xeRqDBcWetCMJvG5crQJk9V2jV3iXi56gFzOta7HzrEkKsjuYtys2c2aN\";\n        sout << \"EMcOMedGcMH4q3xkzca56eoR5b0mXeZRnFRnK82LczMxJjitaFLOMTA84YAgWWpWt7ENpJ1qA7bu\";\n        sout << \"QFdAdnQC+DKTJuLykS9eGpMZIuOarnlRH00AbK0j98XyjkaOhmL4ygSKNJQghgmFg2vyOfji/XNR\";\n        sout << \"F2M6c1HdfQK3Im0qLTXaMZlEjkWPIZTcDtVt+CdUtiEZaqPQwW1H37Eqk9gZAs1TnLe5AOHAMWh3\";\n        sout << \"mS458zVeG1d59r1BBc7pxrju9CWB1PjF19pxCUc71R8sh2D98ss2W02R8dqCAT2wdUuEC1WQwpL3\";\n        sout << \"GGGEYk8jB/4ccjN/+EdYqAulxV/Bp+q1jspEm10/EU3Cpu6RkNFZj310v0t643E1MqzLjpg7ZSko\";\n        sout << \"FkzcMRM2E7Z7WEzOQwbr4KVgXcXZ+76Xc1ahlvMqwkUQV+/PnYj68Ogv95pj6biD9vweY46XV2dF\";\n        sout << \"uxp1FG2j2e/nzzFJgFfIcsB1411szIaEqmHTUPBo26qg/EyWg0775HTFSZwlw8iDOFG13OBlz7kQ\";\n        sout << \"kTvrxy0iwvM6cTm7IqJUZi8hhC/eAX+Sdx8S6pKhOcy1q0fadSKF5cTynAQtrSYwDK0/xYRjVl28\";\n        sout << \"4oTks7lHxGE3Jdu0+j2ufxNuem5fcEgWFSKZnZGM4XLvUnpVbdjPMEjf+KJ0w8LqDbTbmZYXW69q\";\n        sout << \"Apl9sQ7AdAUcS0ZhGtACegAyg1QcJUjFvDKDhXwx5d1+0ZKChwYt8FFzqht6nWY9WjDT1i61XmbS\";\n        sout << \"m2Emc68sgA9VMv1AL2bOhXq44//vlGYj0bX0gj7ZDEdUhCVNi5aXobYv5fn4nGfTNKp8njHyqGrZ\";\n        sout << \"CT1xO+YrGMY/4qAGiBsOMGtbRrIcFHeeCMKOO/5so80js3nh2fw0L/XNVlY9RJXJA8WkEsalm5O8\";\n        sout << \"MUDzmTukLJQu6YIjFhCHjT0FA9R2agaQnGFZXiiZ+0GnsRoUSrGC5mdkZ9H6jg7Odm+aB5fD7I5M\";\n        sout << \"pHzEi++Jt8xHcbX0jyaQd4Y4pdku3xx1MrdgZht2WmCpUNxg66syuutjS6iWKQlvWSdDtlyf5zVU\";\n        sout << \"rRn2ESMesAxpmuFd4sG0j8Qm/8jzAF0Fwolv5GmJFlwKx5X+RW5Mb3HZdJYg3xou0Uwb3FBgV6aK\";\n        sout << \"mLA7GQUK92IMgRKKNXcDAPJdaF6wT4lin82Ss1QpWBBnWwLNTslobUbn1TJsg+MgurruWUB9byjb\";\n        sout << \"56mNxeoTkMh9h9fEuDZYL7svjxh8U13AgnJCgchaDj7iK0TOd6b+sbz2DadE2SoyFYo4XDTbXcpE\";\n        sout << \"LS8TbCb1rH7G2WAS2a4JKRyahhELZhOB/X+jPRtre+MNSMvoYOFYtHYXjIzoEpOgEGdSPOsLcA8s\";\n        sout << \"JHCoPcU7bFQcnIlB/HZVqbDZwVzAtUxKoven135MSyoRVu8j8nTIcM0RBT1VjQa0L7eHcgQVHPvR\";\n        sout << \"uhtFmhtUJJT6lDJmoolIJt+nxeT45+ndSTz16YrT4pODPMuawO3XIULSvkPDWNhQybkF+2jmUqlX\";\n        sout << \"brWKyviTX/IZsHS/0YMkgXZRX5McLzUH3Vs1PcjNBoj2q6tdCq2HCcIdBKH0Mokm9DLqEi0oY4mq\";\n        sout << \"kEsB6HFUnYZm4xezpAoY/wHkXRq9Y/6lOa4DtgBz8ng6/WwFwKwCIkT3/aTHzKDQSewYiU5jmQGe\";\n        sout << \"R4+wtbbRqGm4yfRc7z0xEsMESF2FJnODPSSSBAFT60rKGdGK4ai0IaYbWoWaHeDxhHVeOUYbwUlr\";\n        sout << \"dBHstgs0/k6t3QKbHDo0KwMv6LN0sYYDK0fD5cLA+92Pf8mOlOAS2YNlR0sG2GrSa8M2gZhpgTcf\";\n        sout << \"dz4j66DDlLmQaC9UozZNf2PxDFLUN8NEHu2XnfzYEyuyt0BQcTQyqs8DvrayzIwV/qiD4o/xRI0T\";\n        sout << \"Ma5RvRpagaW5EUApHgu09rkvFXk6ijL+2L+7j+lDQTgkvn+wHYwbTADm/b9tZs2egY+6pSDDnK97\";\n        sout << \"invYOsWUNUDtgvRxgFTDDrjUNX4xNifDUnGCJrODnhg41dOG4M6ST3gBgxtKkrmuHkcgafuohkCm\";\n        sout << \"w8bPHam0dnd55H+lj0J74uyhw/LreRAthXdcR3RbizO0rWIX5EDP5Y+JYxQfejANE9APE2zFHg6f\";\n        sout << \"6y7DE+GVQHO9iN/N85TOUhN5ya9MZ9fk8M2JR/440Q7gqoqNJ7w1PpzfHCyQBSszPQTPBr5WeirK\";\n        sout << \"3D9axZGpND29nMOQ8iZy/7b+5IinED5SDZq8MTekt6kgW/ScvByBVOeBbxh38DRAcClRnn7CdFT3\";\n        sout << \"Ey+kaJAYlahuErS/gjU3VkqPKGds02dkPwumMWd1G6s37r4hQdPoO0F73+5dxWwqF1dX75nQ5tyz\";\n        sout << \"J6f2pbTFnJcp4+CGMYs/SEoPzODOqMbMt5hDqQHZuEekNwMNI/X80PhnIOiMa7oK7h+8cOb9v4Fc\";\n        sout << \"07AR19kD1T6r53s77u7o8wYLp7/uf7NLT7tA+bc6Qeaiss+JLJznbb0LHa9uSUZ7dK0hvHFAYBjh\";\n        sout << \"fGqkQ2JI+adCJ/eUQLs9zvo/0GvEV4P3dZlRcuXw+y0uj/HhbMnTYgnD8AUbRYLCLS5Lx00m+Vrg\";\n        sout << \"lVyzOLy3d84zSmZMR/xoX1Q27biAyEnvZK5vkX9CmMY4lhP3XnEBfcK/UVxxZDQf5HfZIamjAbOP\";\n        sout << \"ZRyNX/+VYpWja1qGHZmW8Tc3aJfH9GsIKdls9/FKfuydYwfwr2kPuG+PTwXxiHKWWdzUXluLrmB5\";\n        sout << \"T9UCUmf1mkBM+Jv5r5R7qUPldDHzJP3njQfT4SUrNNXL/ooR2NTX/jYMqkTlwSCM5w7jYa19IDe5\";\n        sout << \"lYzspMfRfAnjG/DPX7m8H3fYqHXo6JKfWGL9NsuFzFPzbeVqVac5AQ7XcoEDXj8b5OmGu915yRqO\";\n        sout << \"zs+Oag12V6PRX1w6EKKyhQT9BPvW9E8I9kSKGZrO6rSq9pBaZk5DWES/UX0U7yCSHaBAlYZP2fmt\";\n        sout << \"tvEMLhzKwu5vjk35yr3Nm2ICYBow40OjKI6ft7EpneSgGbkBuHH7X2RxfCVcg0+7THSBMEMgnBzC\";\n        sout << \"+8JERFD94nZDWrX7P/QTaejq4L8yWMb7uIChSHDnIIUleV3h5kGuM0MCRChSUPvXUESKuhkezPTF\";\n        sout << \"KRt5t3r1CbOHFwnuIjB5JAMUhCUF0IEJtk1b0gnCY109aCl/sefPp3yznMH8tDAWTL6G/aJbRLxv\";\n        sout << \"DpBb20+ZyK78kfTrFaJ6xGgAyi/fkcggLa8ANOwU+ZbVKvVEQOzU9d/8ygn1SjNBASKaHfVja6Ym\";\n        sout << \"TffBgjcGFtnz2NkjUBccd83WqOyZOxsFqOugfmoavukdhDAaVtcB/KijSoBYQVhNITRC7/RLRJSE\";\n        sout << \"/obYwojRxTfq//cIE33pXW5RCDP0odyGIr4YVCHioG+li9NK2/xrduroOiLdaKly5eAaFZgiFof2\";\n        sout << \"jVYA3mXRxwH83YBdKUSwHDhItv7R2lAT0nsfXopxcJBQVNwPvCabAmsCf71FTl+Wn/LfALLRgtvl\";\n        sout << \"b9JBLI/gPf7tKXx/MhCyz0Lq33VoyOGm246DvalV2QChpolNafxuxK5AnvLxYox3U+53A88SddqM\";\n        sout << \"P+k7oftTdX+u7RhDmZtjHLYn4ikjLwK+afDTW4hCBGFR/bmDsZvAyp6OOVnnvsj9qSOWpeI0VGQe\";\n        sout << \"tCaSgoPEwP8GtY4AX+Dhy1uIYPmoXZUPyNQ+ng7MlCk5S6HAzLlsd5giVhyzN4b4N7f6vseMubhI\";\n        sout << \"/lG0Hfcg+rMX2VvTF54FMPgPjkf6CWr7QorPDB/Puw8c3dt69dr09Q/r16t6aJmtyVa0EzAxiqsR\";\n        sout << \"n1POTejlH9K3Ul98w2mthFuaFVwk0ILJjCZZVgY1GxlvYRzPs1/qN+VQ6GdLYFaaBWN3mI20aPND\";\n        sout << \"wcKX7LEodSgu63Da0BBrKBkoihTYg+IbO9m473LWf9U4dZDQmSjJeISGLa7HDoh/JAnfp0Ej3EVG\";\n        sout << \"K9oe/ewohkPFTgXIV/qg4LDRny+zIJ+jsEOHeryCzBfml0mR+WWwwYYcPur4cCABhkZfKGVH5L9o\";\n        sout << \"S2pTxevQeY8hDj9dUblfU7W9RBl9t0j6pYm3wP9wwP1yh5AKezedXy5VavBPk82SzWBqtsyTpODJ\";\n        sout << \"AWQzgF5G6yLvPeUChHRDGedP6KzrPxkSxpyKFZq6dTNl8g+yLg/FHwOZH/R8GesbKKCxjjeZqD+4\";\n        sout << \"UjB68IayH6ttcLEjncK/rLOWn8lWrnTsQdOf7GznjWDHILJ9B5hxEsKMKqOfYLKosPMpIJFk8UE6\";\n        sout << \"CYffnCZFI5/M4stj/2A4zYt2kcqIMN5rIBJ0hJtBlfZRTMweBmJjhAKbM3b/ER6jQOlbPBzNNEmN\";\n        sout << \"DvcgFIL1c9/mqfI041LVldLTpHeaNDRVVXzho5+iVi/R5UfYYTvvDU48E6cKh/ErrdGHXURNYRXZ\";\n        sout << \"ghNAKIOA3YeXZk0SpcdzxRhQaFwLcim6U1j3kVLEYnk17GavItFxjv+22zr382ivLNfjVdx9vxBj\";\n        sout << \"bRqj1fy/goe9ilHC5sxCphuoe9vfAe4Le0b2hqn0Y3LyO/lvzJEVbP2hkFbU06YXUOktXJVCH5bk\";\n        sout << \"JO928XrFA98vOciWwqtRXhO26A5yELcjimSmqZ9zwt+TKz5cG53+CXufCssHPHDSaZCbF2gxST9/\";\n        sout << \"TooDJUbagLQ7VfNZMBIwDVoLpl1dG1Z7GgobQ70lkUAA6Rlo7JfhNM5d8N8UgM2dPPukCAQ5yuMl\";\n        sout << \"0KTHpW9a+qp3B3VE3+8mPoX16p+zpRlw5Y+jA5ctu84Pez0FqZcTmM4lFcevPe6C9LCxJGzKJJer\";\n        sout << \"yGyryVbEzPmVk6nsuWnHFodPve6NeeYnlTkifu3FBfP10DzXYSUO6nPwSZiGiG47AYnyQXmIcj0N\";\n        sout << \"iSwKDzHcPf5IVgT4qZswNoy+t8QBATl4run7klhzNdE1QSAp8eNZnjtdmZdGY4UhB3/mto70MIPV\";\n        sout << \"OBRoyQCHkzWx8tPcn7NMUW9lDJdFFgNiHngYBe47fz+Tkuv1iBxRppU32ByeXHOSKMgaTyb5f1XS\";\n        sout << \"ern+rWMqDivMybInX6vMV8BfQ8eOcnl9MS2OblGPj7XDsbLmr/eOe4cFoKdBKg791eavES07Kr6/\";\n        sout << \"LXw/mELHEEXBqkuafGTUlUfatUz5OmHHM6ssKoQM1uUrGqzgcdiAe8vNxuMsapJYJjIb80meaYia\";\n        sout << \"EyAvl8dEYiGSx5etaf8hwCnXAOzEfHNi+qjIC6Dqr5s87SQpYPDexkuUv1hEGSDnEbWuDo7BSwu5\";\n        sout << \"hZCA4T6yoSSki1hhXMMsl0tR45bm6UlB74VX1IsL7VD6HiPY3BcveCMbk9aNCLt61KYwY+4+xEWk\";\n        sout << \"smbgq1BOC31buf7xQxX9UtsyBHQig3dCScPoFBm0nKaEHK1fuf8zN2WIi7+p3pEQqRTphOxHtsVk\";\n        sout << \"QyC7PmZJS4merPZpki9Mh/jo5MM76vCXgESUr91CY5neMliK6mlVDQjWBPenKw6JwM2UeDjjQHTa\";\n        sout << \"5w1vSg47kgvLT4KUfqQjS/JDx+u/RIrKGZbsj7WnZlJXsBvoFYn5N2UGBj/SOLVmCXYhBfUHZxqH\";\n        sout << \"GvrtVWHffKoSHcVlm0G0u0EKYYvrYCydASHOegavtcc66k4YIqge/pv8j5lTBiswafWuBz5OwbDe\";\n        sout << \"zxzAcApflzsfgNLol/DNUutk3QpBTk2qW2XXt4r6tkfCG89NsMcr1L3E0+NqWc1IbIIxJuSBhq9F\";\n        sout << \"wNvPOBUYmMD08jguGFHHFLFTVAhcxP90IP4NN6/ImZWqUmZ7DsQz27ritt7RAgjR0aXUJ2AipCss\";\n        sout << \"LWr6mIptUwcOwPHwqwrb+s5xuLIGsT+hXzwpaNrOq7AjKx4GbRcL2UhNwDJ3jAQe8K6uJxffzABu\";\n        sout << \"x1FLhLe7N63S+rKYHMLSSQMKCdf8uxVRz2NX44QRIdxXpV5/mHXgDd8qysZkv26IGp7DG6Pggag0\";\n        sout << \"DtuCocsV49swsov9/gw2yR4r8ziyO0oUMOygSA0Uirda3B1MOiYAvCULRc/HyzndANKNjef+uagl\";\n        sout << \"U9r+o2c2pqApAZY9JeKNj0vbW5mmIZPU9B+/LNGnLAmJvpbrcRTpkHI/0VUV541n26da7jXoJ9y9\";\n        sout << \"ejOkZUY9xMjkLl4aqgwi4cfg3TJNC+0GXjM7aRlJPk2uPNujEiLSkrPk5GX1+jlZIdBmWSfIkNeo\";\n        sout << \"XVQf2dVu1YlWKqmRHsgnJecopec6lhGHVIeamgsyyO9GEmQBG0cZ0lkkq3Fc3Mhakcbnw8InWFYe\";\n        sout << \"skGjFM2kSHQ8ImGUuGx9UW/cKMZbq++oZJQ8y/rmTDfzASJWXezdCOJsOAEAqstGrVZXO0Aoq2Qr\";\n        sout << \"rwO6oJYlxdCpc4MLBzriX0qlA/kj+3qc/lAb7svIugXusyTAshRsSeKgBb4qNUdJ+31j5UoZbwT1\";\n        sout << \"LQt6WHxVFoqYzdjnYsdbnSbV6llixlEfdmdg+gyAQuYciR5z4B4D/dydNjmbFU2BT9hbeMqkam/3\";\n        sout << \"vZSjziXOOsqMnGj5ZA9yIPwKcU9IqvlhxSsLPyFN6eTq7EUV6/njn97pMQhew7hrhXWpoq66A6lG\";\n        sout << \"5kE6M2y39eZuQnh1GmWhF2Pr+0Y0hk2WHx+h/6sRNVTH2qOm0wFh3g2ZqCPgQSFSdam5f+Jo5yYi\";\n        sout << \"IFxYEsif6HxxKGg100Yt59WpeKCVjYO26uc+bclSKZ9VNFsowfyCI3ZtFOp5aqZne3aB7tNkqUh0\";\n        sout << \"387ffCRsqMoQTLLZcycLiIpcCgmOCb8ASCMi5WgPrtZxKA9oB44xUgosSQlRgchUdu5qtROn1Q7f\";\n        sout << \"PHqeNv9EyJWiwHUyLp26f8pus1iHAYIJWvoFj09Q0vXiyvPM4iSd4tFX7kIXxOSNy3ch1FFHWc6j\";\n        sout << \"FDiXSs9Lf1iWpvF0O9iqXZcMdez9dx3lnNuXBttsbNFg6vBABk8K3DFtwDVWg6a4CCFlVmucQD4F\";\n        sout << \"Nf2eNdlVUwwpJn//rtDlvPnZXqpqx8JCEyBcYt0/oYT5vJdrhOKRNiteeUuWf51JxdJh4XKnLE+e\";\n        sout << \"8JAmuTL3AJ/gp6Bxpi+4P3jAR9mZfA/sQnTqasw32kz427/v+hGWMq5j+Ak0wGrKdTlDeA7KLBGl\";\n        sout << \"vbZUrSR60wvpL7SJSYkM5XraJzR5ICO+IxE+hfsDR2uTSrzfcsb0M6wnVatnXjOFNLL5AY6jpHc5\";\n        sout << \"sHLhUHSziNpnsMsWJ4h22wbZmrbO0zeD6wTHvUtrTwOTiPfGkgvz3DLcNBzcn4oqfaEk5JnXoE06\";\n        sout << \"eH4+bqe1/kZ7tlZLzjd+7lFAO8dlAA1KoIGOvAL1L5aqnPbCuJVaak81GSiwHlaztibjOB9Qolm7\";\n        sout << \"y/ln+qnZ5nbMYuWnn3lN4m3Gnk692nuMfiqh4RQuwwxzR1FZtiCzGBPkVD50VMzUsxs5d170C4MH\";\n        sout << \"ER71dvl0U9lLf8WKsHyiU79tJv4wTOpzSMszbf+WCpWZXCJrfyJ6ylRO3dvk1QfjPmFkUwiuQy67\";\n        sout << \"q+lFfRo9N50ZvVB2bYNsne/tlNHPk9/WdeP1rtTyMBMdl+RfJUf27wduC7RQzMtdUuhFLYxdDGxm\";\n        sout << \"1ZZBolFeteOW4IboI2KanbMlv+GOAwxkAWC9ymADZ9YBecvz1unjZkLSGzge1MY7ORdnLBA8fyUv\";\n        sout << \"JsigTjg7KuX2kpkuKxQHYs2l78Tlkdwo3x2VDKEfNegyiZMGMr8CSksLfxnI9dHwbUmyBQWMZBOR\";\n        sout << \"gWU+s45M6S9+HP3R+lwsT0Pn12HpljhnPde8ZpemkMsTbJW0rCQnYsrdryfL/X1GUxUxhNm5WJk4\";\n        sout << \"blqylbW9X7IbbUCB3+8A0phl522/wLWusDD9ndRsiiXj2EDO2Ah5MXodILg7FBo8PpHDsgKBLZeK\";\n        sout << \"WlYVQlWNtg6m/jC5004csHtx2ra6MjSxAhxyt2Y5qf90KBDt/61iJfKC0N9hWm5KKMsGntwWZBVe\";\n        sout << \"h8eJjOzM8vP4azMfymC9U87PqPuI2/J+IB+JNVnjLsx2z2NumqgAKZc4mVUs0PiNK2sSVRlMU4uF\";\n        sout << \"DdbEn+oK+iQ7ILBnkRhDu/C4h1eSyAQwF8XENwyYaclxhoVGRTCRkqrOaLh3SSb+YFSFvbDz49jo\";\n        sout << \"ZcfxsSvLNgIeW0MnmYUH9ydCunC+y9aiO2sZTfKrl95BeX8aEjtxCjpqVj4daFz0diNEQSiWIWlU\";\n        sout << \"/EqYRDfOIZoA5QkPBp2rioNMsElAHaosb90vh+LiDXpOj5cz0S9cKvQw7hI5Ma0gVmhQbAqFrnOD\";\n        sout << \"Me/94YZgsabKZ5IxOJrajCoF1WO6GgdJCkdSUrfRZTkxe0y4qBPAbVg46BGOTjnOkSxUUzXAjXDE\";\n        sout << \"wPf86SdrIWq0NDJ3N+D2lu0MloB/tabrVHmBXQwNDqk24uMVQPBQRqYUGCTzkjr6awEz6oICB2iC\";\n        sout << \"14KqcsiwuSxIsY2jyL0VG32aHA/XNQTZetsvMq5fee0jzSZWAqA0EFzw6UFW/kUmVEsBdX5kpYpS\";\n        sout << \"XuNVhtxVGey4zANa9P7nc40VmxDM++pP/45XNbpyIUOPxfcBM5YoHjnpAwZlTTUsBi4Kdx2D9oRx\";\n        sout << \"PGlK+TGQF9T9ZvI0mxDTXiotRScPozQ8jom/oINYIVzdH7EWLEG+nmKib+3icO9A09pOYWw8TSZj\";\n        sout << \"HNAxPczCwc98w5FdlLe4zDwHnILl4NwfnAz8x0QU+VyW6kugntyk+G1NvFHIGvOnFnZA/Ku1nqM6\";\n        sout << \"3jErxhCl0Ii8h4dD7+HVUu7FWUMOM91LQHsgmphdHA+NQXm+/J/zj2WxamzK8pfpnq9SCYpNfjGe\";\n        sout << \"NOJGOuytsDuG/Ct5fik3DquGqccuhve3sw9H5RDhaFqjWOEPT2rhlu66UfRsyy6Y2FwRWcB5YuLZ\";\n        sout << \"+96O5+VUhbSynvOuygLQfmCZb4RR7h1x4RLgimV+8DdDaH8abjuhKv9bFlSFUNpireUlxkYk1NoK\";\n        sout << \"q+3XpmpJyDI4N/qB35pf7RUdp0mlTU8/cF7g4OJ05ryskis2/tURAdoKcePaWSzn7xoA1tCGYC1y\";\n        sout << \"+Z9m/7erwcD8n+1ZHu3499wbywGzscGo0q7Drc4SxiwUUDSH2FWpaoUmKEUjsYLMwx57QPZVIiH8\";\n        sout << \"WjLd9hcjaht7OqgIQI7ihdSY5TTvihLif9siWmrJk2kpl7Qpx9B2VSVfFBrie6JU+6Ecn4XIMY4n\";\n        sout << \"GYVF/bao4WKkobcbSYCmUfTr1gx7hh8VkIpmuPfiyBVHXI1dQtY/BDxkLIBiUIk509Kb/U0xA45N\";\n        sout << \"+NPG833fYqJ6p9ygAJCQJfmymr3TXL/TxfXtSQrO42/upQob6+KEjSBpewaULLu3+6diY1/P9n79\";\n        sout << \"gLnJOnGncD988L0KCthNKXM9Rm9hzGjnObcxg2IHckRu8F5Bn298963sUe8x5G5BKCLWTTPFbBxO\";\n        sout << \"Mr/zSVZjlKaafRQYBWKE3BPQRbLKBYN+XaNuEQ/cfxnsN+gUimbvpZUueMU0Jeo1ReHqZpZnjvAE\";\n        sout << \"Upf5Lrmjpa0Iyy3irUQ8HEVEisLMdpg1Qo5RwuWanqTVmGxW0sCjfrCOhV3TwIQqxeWPfc8o4cRO\";\n        sout << \"uN7IkWSyck2HR/4ncq+tfaFXehMA9rxigFkeXNh3divWzV3W+U/SeAAQcrgUgecpcxqmGkQjqV3k\";\n        sout << \"Lttwa2MF5SCMfM8LwEG3Dl5JPvPfTY15dIUGNjEIFJ25UuJ1vK9K/ns4ifG5QxNKGFXLvgdv2WXy\";\n        sout << \"0968qdLYeIMXJAv3ieTFm2ivd6OVs7c+jp7k2Ondx5e/WeC8ciCOt7JKyAbJcCZYbasFlaOOeNOO\";\n        sout << \"tm7/SmLUp1hZALfjTeoDc26EtdeNf2x0HzFsGivu+/qd+eYiQXLGqStyYPVc2IZ08AYLFClR2r+L\";\n        sout << \"to5+RouZ3CCXiBqoaoZVsGiqyM9Dgt1E3PlaXtgLFzhpXNw/l4FXFKPiqS9DZh0X1aNQE1KAqLgM\";\n        sout << \"F/VYjhOpbzycTrRhiJ0vhzaQUiCCe/8QUlSqCVVNZ9w6Dvc7uuNNp+exxN+IjPcWoSYDe2QW4MHi\";\n        sout << \"3Sk99Bhu+5H4tVqc3ehExt01lIjQI/M1A1CpuwGv9Sz3/tspG0hYpOT+Mo7sHZ7ojYfkfLHOfp9J\";\n        sout << \"gtUT2uqV0LtDgctrD5vx6NEgfMzP2dNnj7wopH9P5YsTv2XPW+bKxUp95K5KMz0Ea2xLmrZhZqG9\";\n        sout << \"HXhubQS90G74ibC9p5nvDts1DoIC5swJpo6ZzVude5M6GmzjVUHTaS7LSjIbxQBcjyFrx+panbfB\";\n        sout << \"TLLL2VaFjfxw82RGjjQtaeCeZt0BsnkfL1A4Vb5ItP+qhayO+9lqnSXdECHa1qFTXKDVPvD+SQC1\";\n        sout << \"cXQnxXvCxuLmHf/ao8i5QFXd7tHr96ioCtng0PWHxbXyr3NQhriX2zbwD2kkrrL4udvZo2TRIe3D\";\n        sout << \"/L46KWG8S+zpo/iXc68pt4sjfuc6DNIXDtx8xkFAre/q9dRKmuV1BrtlYiIBQlhDByyQuqD4Cdwj\";\n        sout << \"1QMd3JkiF/WXCc3vsuLH5v54EMHM02MkS0TjzLjOinkMT9s8u+ssSyp0NUE83XRdUoND1Kw8DbI7\";\n        sout << \"e8izxcz3VIpR0PE6MYUKS6SR1Gq+haGlgnZYxBCbrhSkTRn0VQ02rnBF9An6rmXRHbqs1rJZ4yXX\";\n        sout << \"9/jj2dPwYrFW5NMXL35Za8fTfG6pXaDjPnqJokXt2rKX8X2/DVWhYQwBLpZytXTc9RpDis4VA6ao\";\n        sout << \"0ZG/u1qgQeqsmhkwTayh6S+VFpwrQA5upwIL9KI6JdbCCsQhazF7qsEDoc1GeAntjyqntc+mml41\";\n        sout << \"I1ZCYtP0sSOWfWiQ5yZavEsrp94P01thtx7s2UsrMtrYQc5hxs/J8VWtIIpg9AIqDW7g50qsBv4w\";\n        sout << \"id8XQPCcfyXQszUJi+w4Kubu+MPwAMiAVkDmlJGAC9t5oXIIwIbvNZHrq3C1ixd84+VqhvZZgw+/\";\n        sout << \"izIXi9IrhvkcOJmuwxQ9FCyd726/ks2e4H7TafuTXyE1RQ+6Ju3odB4meFU8SIylbCw2jwoI3kTX\";\n        sout << \"XXqHbAcdgMWoxoDXPZ0XzVqC3utfaOARHji4+RXEseqA3tJhS5CPHj+D+6yXJivrVC6KWSwPqLyW\";\n        sout << \"6JI3rVeT9B94EYtGH6qWvcA2GaSJjxiQUZQyqahHk/FxSkmnMTPwtvV6AcmYZjQESUWYI9UQyHvy\";\n        sout << \"5e/ULXf2bVF3dmTWoKOsDchTNOQ/Vtswf5avr9tuz841NKT+1fojuuAhhYP7uvRruvMJqebeiMIL\";\n        sout << \"QBzv27ji9+tQ6D42+Z5U40UW5XtytFKcGR1NWtaxNkWCPMGRLcC4mFLuQMYq8cK3ZZDhpzyVeyIi\";\n        sout << \"nLJRFigzQfHlBeJmXm8UccbJYo6oruyFUEagjILnb+fb4y+uE7vN6WoqPcg4vvr4RzSkuHueZxHL\";\n        sout << \"5ks+O6XyEywn5hU3kqOmI21d+C/HBRjJHbiL39BcHKdzhnHJ2huEtwqSV6SsDiqhxSUL7zYEDECj\";\n        sout << \"zs+9/3LHJ/9TbZZ104stYMWXIWuLc2NSS0bF5NHarE4XedBAcXaJzKzlj2o6NYb4Ifxcs0shAxl4\";\n        sout << \"6ptwCMOtvcTz1t5QB1vG5CHrc7emzriP7+H1tukmCRA2i7cZPumoiw81AM7SPv/A/9yr5EFRdBmv\";\n        sout << \"FCOwJNDKfD9Mfb6U1Lk+ikWFR1wm3MSqq4ZSy1Q1s4F0npfVh1J5nWZTxd0Z/TqDhSAUU47cC9do\";\n        sout << \"qRMBg/bBPxfrWGeDEOLActWvxMr2g6O4tdWLxTtWcGsGiatS9TahYclwL40gnzAC+4g1yOgc4/u4\";\n        sout << \"Ye0T1KyUWUnAfpWmFibwphrKOrVj4ZBVzahAWMG4jWzDcxTaKoZvAtQZi2FOn4V/+bKMURZChDl8\";\n        sout << \"DZpqrBSfSyY7DnPiGRgxOmTKK6/kb36nlas7zwcQvSgQTw3vPJSU+LJg4gKmDycFpl5deILsDRBp\";\n        sout << \"78NSCvjJqK7UVNfdAG/2C9nQHNk9nHEf3jo4Er7ogKGkWOHshaIvzL98Nz8BHbr115gtKo06mD+C\";\n        sout << \"0EJGtywTGXAzkO8J3T/gEuW35KH+kOIBMXzQcJNY1lNud+fALQxNv2Rw5u17KBXqLtABWVaOABgz\";\n        sout << \"IVCkpM90yG5CwxkzyKO+CIxb8JyNs6Shk+CPNoiU8mbqMFigPgXw+yWEEdOMvTdzJuj5dKX28e+I\";\n        sout << \"jwOz6wcXPYod1yzF0kPUlol0XaDR1m3abfEiTwquKsTY7upWPjU+Q4yUnrP0/+W4Oe6TgH7JvEvy\";\n        sout << \"fhqLicE67NkotZ1/+AMZVDYWZOScrGmi8c9Yj5dg3lWi5OtfLYg74TSQ8AOiH6jL+wLc9J+QwOaL\";\n        sout << \"gibI6x/dWW6eJGHxInVjQrt0xmP6I90cDPOnx8JC9tMAEv1MrLMt9VKpjdMut/Gok2doLdEHyTKL\";\n        sout << \"wBNiLGq0viiPXgm9/sbi3KGrWhOdypAbECm0emMVQK/WdkSFZu6PSArdOTvHthXOvyTb58fm7wS6\";\n        sout << \"oWvK8J4f/T9t9aNb4lBAYFtufB5S6ndUr0hEU0nirxgfsXl9ZsRpsQidq58dK6l6WI5CmUpYboL2\";\n        sout << \"6T66Tndz5jnvtPAybpIus/Kbmh3tPsaVtI7e6IRl5mzbEngtlOqfbwlyJyUiC5UuGJAUCtqoKadJ\";\n        sout << \"QKGtTuLv2VqavDmNIuZ1mRX7g+2Kbf6y+7L42iqivvX0Lmo8YSJFTuNkWTNlu7s+yYH91uC8BdT6\";\n        sout << \"3DqKRgiRWVfgKuuJvDp72gyJknKesDa36+iCp2qaZZ+yU0XhK/6U2phZ6XeNJlQY5H8JD8pe+RJk\";\n        sout << \"qgi9XqP8qvLIIv0RkfnDVJtl4V8pi6I6UiaD3dNUeHdN1YHCu+Ub225CFQIDsko0Ly87Iv4oULoI\";\n        sout << \"1gmb6dLkogavqkQfz69GYinC/z5/En7ekQ2TnOgFiPV3SaF70p7RmyMnn1/ON9r8vd4NfFPXXCCL\";\n        sout << \"NBSihPK2Tt3T5i+TRXipLYq4+kghSyTRhT2YRIbpvT3yYs1EGbEekCQQmIltN78NpyWqBwBks9Gt\";\n        sout << \"xpIS1Mj7Ff20DpfjgaSok+XhDSDA8pjNzuM4Hv55IJbF5se3Nj27glEhioHCvKzx84FUuInAjQtT\";\n        sout << \"0+5hsgLkTppvJTdSUg1hzhU7wa6NixwuZgfUenls7CwH9K5WYB7KN6ls8gzbK0V3QMoyZBRIoSuO\";\n        sout << \"7yyzgY5erfXbwfcYQ2LliJQQyYyLiEcm9HCxJGMuBL/41LQxxm5KBXMZhJx4c/S/54GJmTMDfU+3\";\n        sout << \"xceNujbOdtlz9ahcxUBPGOU5iTYBGVUPFscRy0nxuHhOu2VI9rYBhoIUZs01Sh3BDgksu4uUnGof\";\n        sout << \"crDdCqjpR+1UVnpoEmxbW/Z1Ux03tiG90lCn58/g872xPsO/O/DDX4wfNU1yeibFvWrW57k0FND/\";\n        sout << \"lNNeLErDW/nBpQSbaWal3O8lfmjD2SBwk3xtJ2qXx538rFZRM8DQJUOfUjvhycRGITPP4GZBuiE2\";\n        sout << \"cVpeof6Vqbe6J4I3E9Bcrnm3moAyKGiPDJ6UqthQuILGNTH2GOOXAl2I1X0qcJ4G2H5xgLNliett\";\n        sout << \"T+uB6q/kG7Ab+4QNVm0j0zdPdVZdUUtGceMJViJ+ZoRVjunK3QuzwgBHYr89OqNxvULc7tImHva3\";\n        sout << \"xan2frwQ2ZzJy8hRCIdaNSNgdZp4WONm+5Bw8/MU0l3PjjXjtlzjUE+rHSwdv5abDy81XQwkDP0y\";\n        sout << \"CS2C7MMahBsySi7v+PrLljFQbyG+deR6ch15UfFjtyd6Mctr8FcW2umvPYSnl1g2Dl0jE50ZLOHj\";\n        sout << \"2gRAl1EvFXIuPjxcA7gsrlATb2SgCUtrelJSDOJpf8a3WMKrLRYp2MONLXacFRpkI0iU4fNhbzgB\";\n        sout << \"o/CdP3O/AMGGnaZN5kIkmOwm+naBEF3mv1xFE3ZZ5VldoFrWrxZ+9s4lOAScPYzVpABjbJxzOzSo\";\n        sout << \"fz7+pEOY7/OY4oNgqWA4MEtO2pMbjUpdTbSiVuXD87KHJYB48ffxkA5aPKFWpdRFCJHM+J2Zjkaq\";\n        sout << \"ZRRUeBZVzo2rRvFBWrpbvAkkaXEDk+k+N3mOn1LF78Qbm5FWAn8aw8QL7oQnmrkEqUj9EAiYTx+q\";\n        sout << \"v3oRQ/x10A2LctzTyy0mCuM4bR+WQW2h8dGoMUhjJpGPQzeR6owMDi1n09T84aVUDkxfR2PpIHxs\";\n        sout << \"HBag5ryae61mzdzqNmyFzySbIbD83r7ML6FqMCW4xpWF6ru2DvNykb9GYL/kquN1rjNOe9XYEQM8\";\n        sout << \"pyYvcipUqJdEeYj9sjgJBXkuDr8fCBpmvJuklMOeuAwAMXwxL1b53VM0XNgVokPmFTSF5zqesA/p\";\n        sout << \"ah/7f2URRjrP9RR344YUdzGoccdhpNnFQ+g4KRdmd7FuPTJYePyDncJFnVZNT1TP026QrRPzg7H8\";\n        sout << \"sFMoZQuzZxjLy8gSU3JYcBCnfqBdcvrtF5Wb+pKkEZxROE4qURll4Y7zYVxPv03Z2PvA6eovQyap\";\n        sout << \"Pr2jTJPFgyEiAtcdsluxtc7NvY+B0Oxgk+oUyaXAhkihKKSGT2pPRUvd0LqDYU29/7v148UhItLJ\";\n        sout << \"minqiK/TinqUPHOe8oyljHRIO6awrl1oc7HbFs/8ZrK8hd07LG27lMDcrBogEyUZ+mcBRykohy5w\";\n        sout << \"vEPLCUA/hLP4NHaUts+q33Wtrq5n0m+4k79SRjwuvmcSXjf+Uf09CQD32oicQr0UEfo8uhrUPwta\";\n        sout << \"WukfxXE/VF/jfynSXwEomRZopcNoc20gWzRlk+M7HpjY1X3TCi0T6f8qAJuTjSSbUZTFC926jhsk\";\n        sout << \"a7Z67jTJ0woPzPFjK41KLWQcoArKTuqOytbd5fKao7qpxiFnUPd30dq6Xhpnt8oW2QESiOPq/4mT\";\n        sout << \"Bdtd+wl8c3bzgxRpOGBKakq0iI5Vc30wc3vTUw8Mpae/beCHolCN52hJF1LAKRJT4xYWMHLpKwNl\";\n        sout << \"ZqpKMybMAGM7O5X3xqcE4nH+bPkpkMILmNN2x4JfWYfy+667pQdIed0jEaDRHueSfyuXCp+Yu7sV\";\n        sout << \"q7CTe3bwrUSklM7zpU6NxuX++oMNuruKzZ7GwsP/NkepKp8MGUyoT8EOz7yIq7k9z61OLxz0Ylxr\";\n        sout << \"0irk3K8oCPttZz8y3u4ZmkAGcYOs41JR3Lu7D+/V0hjdGtNdb3ALJON1AB7r+OQ2LW3SEP87POnT\";\n        sout << \"R3wayKImuVIpIjZi+yBSMqomZMtH3nExOSKTHzLzkSyefGR3WTSIXI5GqtWNetBTk9y2eeRzbSu5\";\n        sout << \"+7c0XsuaWRQd+2qfns49HNwQocfbM5kNMKa8npRCg8YUBMimQiihwEgM6NJQWJ3ig6vwXncIOAYI\";\n        sout << \"kwcYWkLBme6vSiaeyLRG8y6A78zeoc93lGy87yjRWYkr9CeARb8B3tHX4E1APF0Dcs3/6MTZhnmv\";\n        sout << \"eMdEj9TW/MFATPy0BELuV7nLBpSrH2Intvo1jzPU7dGsw/36MbHr2LFO9a2PrZkMBCixQ5kApER9\";\n        sout << \"HQCKGangWrdU/jO76/8j+mcrxFNUEc7y0OUUFK8ZXwHMXQp7MOew6OVUmRuFSl/jv22Zdz16njaZ\";\n        sout << \"Vd7fVrgOdTG+EXRseg0LvvzZ40qWpRahwg7zqP/sAWp1ZhH1yJVoalrCFuTLgabjWGo5Amp4vyk4\";\n        sout << \"zzseJ+O10oZZrWsFOg1lbPjs4j+U1IhQ48qNS/zk4Y2kaiM7/0q7PkaUxdwdcdHwbOmp7zszAyfu\";\n        sout << \"rwXlt1PBiRyEsBKKKsBLwUzP/KJEoRvFvgc2VgzDxxe7pOsX3E6+ey7gKt08W7RNTTGx70YF2uVG\";\n        sout << \"4cEQHQNqLygscv4DllKnH7Jz+2cHnSES9us1PaWqRwpQ07XG/sSI6t9o8P0xMBVkR6XB9JkdKP1o\";\n        sout << \"Bj1MgxVN8pMbv3ANGQzTbmCQ5IczVK1Io/OQbSEVlZb8ZOatdQ9nq2YZvedMelM3C+t00b5AaQa6\";\n        sout << \"DSslaJ3FWzJLguvwYQgYUKvJ+jOC8dMr74YNAxt06b5RaijSib2TNDjnZ3tIySixM/dYOnygj2QA\";\n        sout << \"gubdj4tuvNpWh04VszgcZd7TbLntvd2IA8b+FDDzMkyT067BC51elULM0CWKoZgaaMglt3LqR43C\";\n        sout << \"H4TQMRoitKUyfjAPE07UmUi6lEGYcrCyawT+Si9YQy+T5vGMpryrpy9gaHAmFQTGCJgit/0g/c5k\";\n        sout << \"mbyZ4pilxX69VO9VHrc23YN0CMQ0W3pP/DpPNYQTcW3jeG2T3d8b48B+iY9boq4ONEGcx6y4wWok\";\n        sout << \"SuOSzK6rTR834/xqlNGMLNZWSOFjLdq7G4oQLmVZVRIkUXrQImDl5W+1EjdglFE0jAnnuxjT6+DU\";\n        sout << \"B9VIMbIzVlVId6xVrp6Kg+Fb5gcxGsKcpH83c18DbuuIoLsywmIEiWQfrSV7bPVuPKJVof/t+Mar\";\n        sout << \"Q32TiRHMO2ZsUXC8w46fkI7EsH7mWMWOMfhkvnY3AVoAj2i6+orDHNwnTmWQiGj7FR9Aw5CQcCbh\";\n        sout << \"W57bPF88lkQMxdEHBd0Hk1c8Pm+p3x71xzdIofXjTnCd71R8FIIvoduLv6XQttPFatTHY0CeRmjI\";\n        sout << \"49yWBFJ+w+BSEP6cnTQeSo7uAOyit2S3EdLudn7XEBr9eN4wIVAF5lhti7HqJqV/pfqpkgaAQeEv\";\n        sout << \"mbTG0L3+6Mr4RPAKaa1H1aQXcYT32jdC7w4BKaxvACcyjNuukUwhi8GxxXxIktPrOJnwNCs719MY\";\n        sout << \"TbFkKOxloVafybwRZx5DdrEKMq+jKyCffePTaM77bvL1hNyK/78Q9TdEO4hx2q0m853zlnibtbwM\";\n        sout << \"YcO9adPVjghDSU5amF4Ul5+rMxroEoaGKLW8+gL9DbmcW6Uj/vg7TRQohnGbzmKwPWT0hu22ID7w\";\n        sout << \"+ILYIhGhG337Pr0Osu6m80nETubjTijMQHAb1/Pwv2eNOOdu8X2EM2awT+qtxqHCq6il4YFSbUdi\";\n        sout << \"+i8vY32x0cXZ1EdKfgciuKtK180q1S57ZNZTCwe26z5eLXomvjtxLxBZl5z2TJyPEnJprnZWNOo7\";\n        sout << \"5nuXsYypcrV3W2KlRmybUjRfc+/6nMKKBtU8U2phCUg1uVbzAXgyKJuGRmwxUOXXWeiS6f+X02yn\";\n        sout << \"ZpJda7aMY2VBMEuxMRw7P+S18C/drO223DaUROCv25mTOZGKRI8iXQYEa9UxLvXgRfUB+eEGOuAS\";\n        sout << \"7N4NVz2kfzGWlQdKqRoh7fWDkM6R8J3BgWhXvl6dacJcZyeRQGjpR0ZEKDFTtLK8Dr9NFYXk6Pnq\";\n        sout << \"N9kMrQpwK3bDmdv++XISq0WHnf6SBJcNhSx74TUlUDBxsYAcoFefI1FNbFFobGmT7lEX+L7uQNmS\";\n        sout << \"/TMxpzGwSeRavNmjkanqTTZFpWNvRXrfsod+TmJPe53ApSSZpiuOAedN0/3AGsVuqjNtcxf4DUCZ\";\n        sout << \"13v1FAYWluQfSXtsM0weQ0q6ZvhM2SyX3VjNleA0/X/PPmOLLK423iG/d4m5+D95t3NRAbU+TEUp\";\n        sout << \"Nff+BWEiVSlWCTwbP7mTaJPnAUWND7rjif1IIrQLL9IdyauKUOP04yMgCk/LQs0HsDkLxSexCMHZ\";\n        sout << \"rK0S8Bh+/2V/dNF54MVJEqln+Urz2REIGmzqSjly38FZqDwG8Rn3dPYImGASFgGgrCAbYza3ZyEb\";\n        sout << \"yaPzMiO8wN+1F+DbMDfvMtlfkY3fO8LvJ5csTKK94rSw2erFACsU0cXqThvGma5gOcpL1H9CwUsa\";\n        sout << \"zKLfBclmCCGrP4rX1/SN7OBpNjbrCHZnkEebf2TrzxT2moacNtJt1cwVUVGhiJ/DYdZawCRUE8IS\";\n        sout << \"IKDq/tSGREdGSMLEwJdXyRk+4LyVF1V+YF3Jp55yFh5skh3Be2lP5YY4+YiaZDb4IjJh7qxjjO0R\";\n        sout << \"RmvES9HZTw0GhCa3ep3x8dvbHTp1NB4//onnMx9JheeyZRZOdEK/Suw5BlXNgCvc8UJJR4ZLtyuU\";\n        sout << \"7HxX7orjWgkHNdix0VnJKSFYfn2uJ0LTPrz3sARjeVnQ3W0On0DIXqNe4thTZDwUFWUKklmQGV2d\";\n        sout << \"bgVLPmuKff8DHP0xgGyiy1kHollAqwEUzD6bW3Tkrtu2f+LzTN2yAQxKkVsiW+sqEKqUtzNoXVQD\";\n        sout << \"36tnDjAFotkirlS5Bzk5pXgDpbAxFnVsTDq/TcT0XbIR7QvBd0bXq4am1uoZjaLGA6bF0l3Ej6Ub\";\n        sout << \"pB0ZMs2nLo/8EHNIgx4cBgXL2FN0DWyb2CzchL+jsPU4s7xBYuVvGA1bLaM/nlRV7DohA29pE5jw\";\n        sout << \"MXQPYIDzraGVsOdJ0ghhlqqnwPgO0oCaGDxIlBehjzkJcgXPhWarYGGBdk19SUjt9y+aqDQmxShW\";\n        sout << \"PrJagqBImi4S4N99hOHnIxGa46BFlk72ddnCvaJ4n5LahIZXXAhqOrxRiCKGKBX20/vzOh2ICqUn\";\n        sout << \"MgfLtH5T87Mho0k7hh5gVFpYktOqOowwqPJp7Q7Qlwty07GrnkriILYvkp1bftSHHyepPxAAgaJo\";\n        sout << \"jeyuGTtsa+K0jHc8WaDSZncIqmuKs8oVUZ/1YD2EkVlVXIh5NjyDc6RFfYhP5/w043WKp7xqeRwq\";\n        sout << \"zaMTKjrUr02omLUduz14J+ka9uUErd5O2xPaV2O0LpLuZaMjoZ83ZirW6U6ipV6d7c0B3kC4CcVk\";\n        sout << \"kUdzqBoH3VVbTav1vugceepwBjBiXsRqReTJBzNRJK4PPu/ApBKQKp6jyZoWCfhJiuJNB1sEjCbc\";\n        sout << \"o6XEZWbBEjqRaCujvVzo/dLLGHUUOXyGA8sKJq/iAM2dqvDoaduLBnCsp2oBIFw1q0s2psDRLdvY\";\n        sout << \"KiTAKEAypmqRB37gV45Mrmn0zYeDR2/EsWDoo1HFu7Kh3FX/y2fL0155dtiBJxkHDJIXj7POIea9\";\n        sout << \"Bl/qheUN9FwqXsVheoacBp+Uh9NulkH01NsKCyX3nV9ec1sdzwh8hj3zWZIpD+ATVH3S9Hh0pt2+\";\n        sout << \"FHzfu7z+YtwgpWfSqim/C0/yfDF1QoRws09DqLTke3TmnvxoRfkdOwsc5y1s4YR72xFXVrmIRpkW\";\n        sout << \"pqHx43/MxHaQ8WrEABai43+FqGJmR70fvCNecLDPm0ZlGySkOCrfgMH9lK018QD+DRu5D3n6alPI\";\n        sout << \"3bEqruPXlP/N8eNnJFEeDbxQ0aQFJFxSOmTkYWr3LZBjtjX1Cc4qujxcCaUH2hnKvdyxejlt8fEa\";\n        sout << \"h/I2aSaD3ejPS2xz8y5D7Ve0mxx6znMEO8E61RbXztaIRzze57GvfwpTa+NbAjtX43ltW48u0yeu\";\n        sout << \"5UM25BNbXDdmfUzzVFpiaflImZj4Ga/k8TjlTVURwRXX1GzB7lfdEukFRdQnY6VQcsjzo3O0gKDA\";\n        sout << \"+ZUtku8C2JpdWVYYsTVoyR+5rNlgHdaGqbqzADSrSqNBBs0OLaEH+pqoVvN7gNNk/hCHN7tvmi8n\";\n        sout << \"LZQHQ+0Ukp9p3bPTUapH+h+NJ/SXUHdjHrJpaFJR+ANmN8a79zacX7v09ig91M4yRTSxzMzsbQef\";\n        sout << \"xnNKm4+2JxpFLH2fmM4FM+Rx30KcqLmUdBGOaJYNHQqBVJYYMNVfdRCo/KwBX7r+V9SRlLQ5ijED\";\n        sout << \"zKbJlHi7LyjYOq0iv0R4MIiW67OR+5O0aHeoXQ5RJ6Rs1Xytaiipn7aXphPVPo+fZ2xH6nLTQfFq\";\n        sout << \"fEutvtOrYIR8G0dGUSYsbZEhdPC/gpSdHsO0bOJlxgXhNGNeOFtYohwIKP9Z7Giv+lM15GPlxnm6\";\n        sout << \"usrSaqlZWs75RuyOn7etmGBSg86+J5wE3ihgVXcsprkgs/y5mnP9iPifs1UBfDO+2L6UnmceygSm\";\n        sout << \"sIOIuMzGUkrM6iOLYHtp15txD6bUYZsIEeCCnjaIJujQc0lvbU9bh5AVae/HG+SfuWqE5nzp2TD0\";\n        sout << \"jug6A2KoPK/ufGzjCJJ6VIe9v2bG3WXApQGWyj8lWCO+d6YtKFA4agCPTv4FSnS+Ip3Bws18ZKxj\";\n        sout << \"M+AFJKpr7lmSJURUl38hITa//w1TKSA3vSoMaEFGEH8OFkOCDFOHoGK/z/ievfyBkC0/WgvwcSbj\";\n        sout << \"uvaOd+M4umm/BCNqcPjZ86HSej9mSb24Kl3Rn2pxywK74b8P3z41Z2yVbRIjK1Dwvo6t0zPp8vtD\";\n        sout << \"QHW/9v2uZ0VhBdbRAL2+qFD6qKg/sacjR0kE/o/zRR5vsW4K0efFZ8uerG5hLs4rYhZPtiDOHr/M\";\n        sout << \"xOGIfBpL30xzMdMs2zTnbXF7wECjcklZcwlefbO5ubaT0doKkVSZ6YkCQqVXL9LNVNHqULonUgBs\";\n        sout << \"Xrbe3KKGFrToxCljsw4+3+RUVnNN48CklcKfEfTHEXoUNZ/p5msufJct4JL4K+35Ecfauq0GOsLX\";\n        sout << \"sTkVaLfkelv8Uiju3VEggHb+lLdrY7oKT7aC+kyQu8SjtJQY7b2aKQNELwrX9u95mPNZkySc5vaA\";\n        sout << \"xwL/6ar2Y5/UA/Lh+5d4hGSkQ0PbSacBStFaLzJ8AVdOcXihah1a1ddYNtfH6kNsck9XJqz9Y4G0\";\n        sout << \"YdFr6DGHNLBlu2ksVL0ta/tfPZy9BVFo6Vz3tbpnBwkPJ1vo9EZrJxo5GJ309oeLz6mYG+0ctXJr\";\n        sout << \"PC90nYz7s4RxXkWZBzq3RbNiBGNgP1iOU3x9INOf1CbKBhNSp3b5QJDfM+hVzL0Xd78pBpO/XWQq\";\n        sout << \"hdl2dL5XZtd3XYslKjHDaZQyZgnaoWD9hhRlk9lhweUSB5bFjHOH/FZjlAH8et4Eri7N9Y/OFHFP\";\n        sout << \"+a+FoLLT0YiBGFsJiqe9udoECrxUR/A1Yi3Wen2xOQv+eMMQ6IcvA5xYONHWrS8WgMT/I7oELwnx\";\n        sout << \"GK3kwjKy8lQJ9HOmVa0yuQsV5bbrtjQcP72TmuWKOcyNWf9vHvLbWSZUDEXchz4HfADCJEehJzh2\";\n        sout << \"vIYiVvotktpiC/MzHmHoTw0Sf/hOT8AALmyPqVFGrkZHhLU4GZTqcJEzBNUvkvuwo3qMHzOc3zfk\";\n        sout << \"VtoQHlg0pOcKczFo/44eMRlpf0Cn4KTcU6vEmUncnvx1nNMHEYKQNGp/IXHpXp+PN7s9zFDFbQHY\";\n        sout << \"iXURtZZ/cF6jW5TshrT/CgpldM4oi/gn3yTm8AJoqATWeF83ft0AphzHDfz+B0qf2wF9Te8adqcb\";\n        sout << \"ekFiLrNf0VfA/wMCE3drkqLhZKO6L99EK9SZqsly4Q1rwLr+sIgOrI5v5g82DOFpY9zL8Sxvg7Gp\";\n        sout << \"03KDCEsW/2eFfxNtGGZ2P6JJOWLIe/6Zsx+1F5lcbYxPhSirbDYp+1bMZvbm4uLWHttHS6e5NQH9\";\n        sout << \"pW9+qFTlk68lJWtpI5Nzy2CutML4mI1uVDgIctZLSHZOTlWW3LICiFxYVLjvE7JExUZMI5J+3VZx\";\n        sout << \"OTTeFGiuzoEveGJ34tOMrHxoj3dIMkRN9kh2dN10crD8MKoo1sb2EqZvhKu3yb+XxKKl/RkHTuBv\";\n        sout << \"JZjCnoTnGa9JltcMDgzO6demBWSN9950HXwS0cZRcDIgG+eDQnfSfHGGJ0UuL9ydA0KYWYAPxVMt\";\n        sout << \"tqR+S8lKMzk18k7FuGBsFjloOSgsychm0GSTKu+AVUJJohpnT5KhE9Z7Y1iSc1pBOxyf4iS+FF5v\";\n        sout << \"AzB7BEivwSPqcjPplzSQ1uGNZsa/mCfGy77XBBm5wYUpKDshd4l8mOHPFofPW9WrpI4X2e3LuiMJ\";\n        sout << \"8BijYVutWZv/8BrhhFuUnngfLsaJBhO+KL1m/JsQEvWIJ53jPt5qgEOn/4Tei953J2hanoVzKelM\";\n        sout << \"l2OhgHFUxvIYGvKMwLRMPQ4kUH3C1vvBJivvyIZ/JWcHRq/0CCjvg1aPUXSXhBrgkqFwQduoNW9G\";\n        sout << \"D3BowPV9v7Mk+IPddFxHdQeyHdaquVKxWoWHzlDnv0gbzlv/EdZVUd7k8rbqYgUdPl9os0dbh8gq\";\n        sout << \"nRpOW6MTBdFojgzrdOHPhdHM+Rs/TIntPPd2YmryOjdHhAyrVgFTS/rx+yDRrP+ChjTPAF+k8lG+\";\n        sout << \"qvN+Z8gDFq3B2vfIgAUs0rbSMRfOahM4+EH0pX7fe9ylY9yPHtWKs9i3mU+uVTgB5ZtRKuSKkpnO\";\n        sout << \"MgWOp94H7Ui/tI7b7hAC673dprCx1PZgdIncutPRIlxzv8exEVhjhH5AsW4gRNxLX9pukC5fVdXF\";\n        sout << \"nWif4xcZbEcsW+mm6IV8NE7iokkhEC0bahxpHeS0H0RB28nZY2idhHP6hLDMkSg9b8mlJgqcGBtj\";\n        sout << \"Q2Vd396H38VydtreELEV2FgC6Ski/PFP37rc3/NDStzcY7d8twoEiWa1msraDn7zlvORuk+Cu/Ec\";\n        sout << \"VaHwuWQdyqf7dhOhrH+/wK0RTPMKHDyLxkwJmO31Ka0LEOvqMcsUzEaxAMUNz406l0r6pLW2MbP4\";\n        sout << \"AdGu/pH2HwxZ7b1ps+8JiOu+U3SDrmhMZH7kS8LUhCNpH21Ty6QzgJcaw2jC9HYUoNeobJSQaOFu\";\n        sout << \"kiOHd69hw7VbD752KMiVur1AYmRegfhkEm9850zS/AjT+SntphKTtFNsc5cR074M9iucA3cH6Dv2\";\n        sout << \"AUSKvl15U83cbs/B8NA/4iSp1OTEb58O97rM0iLsWyBLSq2Lx5ZblFZeLi/rPkoVGMo/o9UV8pNa\";\n        sout << \"Cy/ushHj3CMku0REQZQfcxl3OgQ6U6avNywmwdncjoDCwX2j7MwoZ9SrAKvxSedrSkdRhMvVkuJO\";\n        sout << \"l9c6Mp86g8KafJQIp2ZS7CMC16uoiaUZCqdcdIEsKvzMreCoM+XGxXE589e5BsfV2gTuxpvnWVCs\";\n        sout << \"8BaKUgLnLKCHzyioUVC7bzz8Ov1/Wqa1LHzsrobPw7DV+dIDHqAS0d7TRra2q6rXAqYA/0P99NTp\";\n        sout << \"uhJkixu4ACmGbuBO2ob+t8cdczxIBSRPHHZNCXQG1t6A1IYpozEWiFjATpoD+gEL7Mv8AZW7AF3Y\";\n        sout << \"wFQEt2JapH373jpvJ/lAIt33yTMgyTQHKQ6bsTOWpK1EK8NvnOSOeiFfmtseS85l33K8vl8pyXBL\";\n        sout << \"Fx3dqms9fdbwhUmUWGcpzynCrKyV6DVGFznQtpr4QCl67Oz7RaaYXGe+lOmyrBgrnjKcQk4ue99C\";\n        sout << \"ucZa94y9SaRBTFNbXtpRm9jjdzoDmtd0JPCGzSACGikNArk4gC2AVKMJpFdJrS3e11Ew+pprc2uR\";\n        sout << \"fq/nf3C9WQ9lQ+KbpwEokeXHWNmWBwDZwFCf2w41zxYqjTu2XjGt27ea7nleb1IA1PtQtcSz/qoC\";\n        sout << \"6A7G4EFk2WE6VNL7/Wv81DjrdTdYy8DFQBzab3Qc7T0+T+aNZdNfoZSj5YK35BB0mmPbxw2U4sfx\";\n        sout << \"1nahYLG8OEQgoOVG/3vG+EmA+iCAcCBHPObthul5KdW5JXwPw3AMgL0UL/3GIpXRrzE4JTPrFfzX\";\n        sout << \"zFmbikWuDkDw9sP8UNfHAOGWE+OorN/Y43rcSfVA6xNgMhqr0pBbvVTIXbeIy/nR34IJGR5xN6YS\";\n        sout << \"G1SriivqytwRmJLC+Z4OoSVtqNPzPvUBzs2wHPF00gGAE1FpUa/CfxOfXhbx8VoZWMcuysBgpRCg\";\n        sout << \"Xne4u7qvre3CRkuXLazM6qKDt47OA1is3gG6ZA/XCvcI8EA61YccN6zTpFNT2cBGQNQ11tK5jqEV\";\n        sout << \"JeONoq3L4SCF6qCiCKMg0nsc6sk/xJ5Tam9Rl292lzxTV1Xa3be+lfSjUdiWnmbU4ml2Y7FEVbWv\";\n        sout << \"4A3WHted4mKb0HiCz8wgbHrjTnNQyIntFcXuNAUUzri4nGsV128EuJrPmbYXqWuKIe1wPT2Lbco+\";\n        sout << \"7qH3xg/zxl+t/bqlyqghqoYQMPw1FJXz7Z1TMI9TNbxUtCd+J+mX3xkrYI5AtCbTZh3lMvbwWJZa\";\n        sout << \"4AOY4WRavT6XHsBs7hKl0iHOmTyMe1bkM6sg2BChZ2B4T3BoeFISya1Qn2U3R0Y61plw8OFrTsAT\";\n        sout << \"FKgD4pSc2VaV5bOPM/vqg4B1In01SOw4itnoIC9N4+IvHvzQFYzeqiueAcHYGss+uaTMqqc9c+gz\";\n        sout << \"cgiJCv480X1iiauIKK1Szm/06GiT5WWnkyqWEqxmNyMPrj125XXg75AZeRDazTWXjObzZkJ7UA6i\";\n        sout << \"YQRFCFH0enKb75qIjHQ7635m/Xegoboat9VCJDGGVNVG58hQAVMAWHmnIb6oK9t1aaqXmAYXXgFo\";\n        sout << \"3uchUubvOjQXN+txW64ZRXzM5lAw4TklqmhDjxruXRdddoBONkvSPSh/XiDTkdmO6QKTCh/t6NLo\";\n        sout << \"Jb9Z7nfmQUd4adkS/+aUfb9LNOPd0GHxq2O/y9XXHvRTBASUV6xlJzpnOBAtTJSDrbLj9NIhiWpF\";\n        sout << \"nsQ+Nq9aEthi7RHvc6rujDGF1gqfJjsdPUTxveNk22Xc0fe4Qm+07HEg0HvhfFWJdFJJHirD5j82\";\n        sout << \"bZ+QZTppInMAQRh+dxZhlCzPKdqS7WPS8dpXp45xBpYH4GsG7SaRgbCBm8R96j5iSW3oYd+ql99U\";\n        sout << \"OC5fYGDbbGT8zl+mtYi23CAV6AY/izASsZHq7KzSV5taKzEZyJXf9D+wRaopIZ5JPPtmi/fr2HAC\";\n        sout << \"XyKoAPNAywLXUTtDezuKTJiyy/DBlHKxloa3uVTeG9YBJfiloyym8p9GsCOcz1p0s4K1Oyph1NCo\";\n        sout << \"CyklDAHvlMNjTA4hkWIHTyIStVmgvVkNN93qpPYYNnV+fIETW0tvJDnyJ2OnHVP4h4VBWbntk+uE\";\n        sout << \"JDG+DLleC5n87Kk+e/lurPTik1Yqpicwe2ct0AgA9XJCrDO6CYGT7QzFhEujgOYqzUmFe+KGn9u8\";\n        sout << \"4QMY5HbYXY1P9V3pR/QyoyxtuZNU/caTzRM58Hxe62q7BHmsL53db7cDUE5dYVR3Lx2uK/pm3QWH\";\n        sout << \"IIoyUhcLmk04dLwoi7YAhnao9IJQ12KlFISFoa/3WvhWbb5M/GttUDXGX1A9JuGrhjzXMIfGyS/u\";\n        sout << \"wugpWw/5SnWaCis9sNGmmMNC2rniqemMrjAUv5mGPYA57KyKzvVGGKK7VM8qyrtwSKOQ7fWRevDE\";\n        sout << \"NVAwhR5NnzdQmL1x2UrFcEkARtk/8RU/tfy3nXqg6Bi8g+myCn4hH4BOtK5E9GItI4R68YjNDVBR\";\n        sout << \"MiW9KS5gXcigTV1fXrChyjn4Enh+GrdLBpWDJQr7MKSVSmqGXntmhyTAD8Hgi111whRmKXgwi7OC\";\n        sout << \"k1Jn/NAURbtbi18YCjCc/+NfStTpuMv01C7+iZSQbO2rzP2aqaYSSvIx2e3/e1fWfZfTJBMQzcfs\";\n        sout << \"zITZqhDilOIDxPPYv9xAkBxnwGXIkPAi5133yWC5gcNh9hzEq146cKvQ8BFi1RHGL/yOiDjADrns\";\n        sout << \"Ky2PGu1fBfFNfw7tqF03f6zNB5IVWVjmnKtXhM2bIGqI/EM6Qx79bcYKYXcFg8yYbTc3z9KAcgp8\";\n        sout << \"es3R4Rwfg9irMdI0DK1CyYnpoa+zWhUXUzpTbSlFx0zZ0Vfx4xnPh7ZJqJ7/U/QNAU3lUP8LXVAP\";\n        sout << \"+jMIEj/H2mx80xaTNCDp/Sl+QcU1jZYx1Ycl1B4gH2/wsYYr59q/mDD0gE70hQpsE9ODlZzx9hoE\";\n        sout << \"HFRmDUTI0um1u5fLykqAJFVPcfk920vT5TqEZSMX0WvMVxqvN92IUxy2JNpXXMlBiekCZhEKKQqg\";\n        sout << \"D3MqZCUlGFkFpO/zc35vlTBUCuTvbcnak5HVcREFV0yNbTyukhEJzcdZArcCZs0xIbM873u1y/mZ\";\n        sout << \"+dUcW4zZJ4jNSa/Vz3W6sj41hSQKrQfPyeeKpFd5iKxJPXDxV2iuv+ZBgJi584KVpYSVOUA8Bzi0\";\n        sout << \"0kQh/NO5BdU1qaekY5lfrpA+O/tTzkTL1ZslaaBimJapn5KZcTtsZR0YmrE0E5okd4DxUccbElFb\";\n        sout << \"81SuaH/YCvib5kUbkXA0ooelAU5UmmMCZ1ArVVgwlLti65IqtSWD3LB8rIOUT+QKutHVEOpNMOrJ\";\n        sout << \"A8DnPVgF2kmeOngOlOwb8Hgpg9I9YCuu2cojbmROM8BZh2V6E9oiBTeKPgqgZ2tkgqGSf27SEpPo\";\n        sout << \"xHPyKMhQewkcq3WQ132hIb0s96PdEfniPUSig2MLn+5qBZDFLHHuB6K+pl/6OF/h7ZaAaCa4NCA9\";\n        sout << \"32ecTvY2MzUHmBM6CI/QKLRtBjmE09TB8s/5/X++k3cde6xPE77c0/G6qLrOUKFITVb+iLVADv3O\";\n        sout << \"zhj95j7URImm87lmo9ZBDTm6bbKoQtNAzEpBAiGs/VDuFfA5ZoQcwTwEnhmOs/4bT4591uwosx/T\";\n        sout << \"G4whvzgfcbPt9yHc2nnSSrIdYTSAwFZ1Ksh36RgvDXxaOHozLvlduvPaJkYSk9HijbmULXMUcyvD\";\n        sout << \"6IrzOnn/8NY6m++hE3KxgFM+hlrlAp3qQBDEGj5FAYFu7AcCT2r7YB5kiuwjM/7J8KyJYWg7Z6Nh\";\n        sout << \"zJbYleW8QA54s40d7D6AmOBX4+5Mx4e0roOM7WEFoqvXqK0ebAOrgwZ7MmqtGwe+5/bqkfNqg06m\";\n        sout << \"o0UCVDLmF/SzqAsxgIJt1P4/l8HzWtrFINUcBwcDY4ZhV1fbWICOmej8aBMJ4j/iUHLkxbnzQFBr\";\n        sout << \"xuNgC5/5I+iLjiYTd5+bdsITz2aRpXgUHx94KdOtcdEJ7uLjUeo7jeYvQVt50x/V2thmd8zHebNA\";\n        sout << \"6Yj14+3dHQH8c29EghfihdNobQHSyw9eVo8RyVI40oUxykuk65ILT1mLbnASJcKIInvh57YMVTRv\";\n        sout << \"rpPmXm/b5ZUfTMbzpTwO5DThvD+TTGvLY+eC0awfepSJj9CjiBTqNBJDbd5yKVjH+oM0wTufEUgP\";\n        sout << \"Fr0fondoPNTB61iwLzHrGVbzU9Rl8rsuiQOr6Yz/Dj9OjgzyuvDb3zMilAEcLydUFmkZlq3uVCl+\";\n        sout << \"LTYgz2tAQIl0+6SWZCel1bGyRKY50U2bJO0dbHawgGrUgZ/OO2k2HJnC+0+WKZeSj4s3v1OfCZbq\";\n        sout << \"F1nQDtk64Q2X857gH4kTx3MQ8gZCok7M+sd3p3eA43nUuis/SwComUQODyRA+TmuoE9AdASWTZQw\";\n        sout << \"Vz/To25UixKQtov8has8TRMEPOWqtZGHg/1tGGyZKkTbHQlulKwyb9uusuzC+FAQUEtpTcXkQzDE\";\n        sout << \"RNHKa/I1/zTSLVnaADsLgrQA13Igh5w86Bpn1bFgE8iEW5zQoNs6KDYwsRQ7mMiJI75ylVIvfbN1\";\n        sout << \"Cp7tpGCKCL/8xtWWII5ygWogcGhi5abUDxG0WQOaYk3+kPU6w8OPpbaT7h9TDO94XhcwUb5q11O7\";\n        sout << \"LAKIZY5+/7DhdVfMnplHpLNftDihrGwf8r46FUrZ8MRHAREnHSsch5dYY3boGxsFoNLc5r+fbJVD\";\n        sout << \"TxslZ5TEbJCFrBtFqbT3xuLReyo4FsOPZd0N3ZtFXt/ChTutUudGtCLfD3ucoJohZuz0Y5Mq5sHQ\";\n        sout << \"Kb1vAx9sRwpFnpO5o+RKYaGh9QkdrPXqUlcyXkSrXeNVfGGyET2vZB4VtQEAlG0nF2dkiF2uxKbc\";\n        sout << \"6swYBEYWLaftOzle9xXK6NrwQCrH/guAo10Ct+7uLmhK6P5MZW4kxyLi5nhOPkB/jiASFRPN1NOw\";\n        sout << \"KdNeaakEO7PEKPdcIhWjvw3sePbhOyHnmdJGHRB5WUvjOqD553+DFu4pgpUPHx2PV2IfEF2Wtfvk\";\n        sout << \"1J4pPO9DvXw5kBSFmoR/VdU1bGkVfkDMafaHt2diRtBZwbJb6XgkzJsuSiEtzaZ3BLaieOYJKCFf\";\n        sout << \"LK0/Jj4SEEDYj9NIHq5MsWH9PyVYvV3+IpJa/AB/WHXF6XAMOsLR7ulEmViNjv3UYOiWYEyT2v2o\";\n        sout << \"hYYg+6/lbwOg3frwE4tHu8IMfIZZzoFHbfT6MnP9ajoZWuSbbIj5KwvJ27wLUsQPevjbTypUXIEv\";\n        sout << \"W5WLBcBCegLZyIdElFV+1kJmSF5dZhY9RJeDOs2/CpgRctMX8hUGtMjLIAMjm2yzS6FgTtuuPJdr\";\n        sout << \"ErWoYhOWgGSZEitvtLZn6tGl+JZghT2F7dfmMaJH8y86txR7YCaPQgThH1zCh+yE5hvZPXW7+OCj\";\n        sout << \"D/MUIXp648v2+9ItiAlAZ+ho+JzhIA1jgC3h5fWWmEc7RnWvtyiatDFAGo9Z4UCz1qtRqoKdlhr9\";\n        sout << \"loA5N8Q/E1vPO/G3X++gNdEU6/ykRYyAODNhxYTnkiT47qRUzqSgOwsi6ePyQVuLDbSCwcpZK0ps\";\n        sout << \"qR803wEQBh1/nA3ZUeO9g7ZGaybxNoTj6Qs0u5vRNudI6OkjlUMMTdXVWf5ZyV338dihwHho3RQT\";\n        sout << \"Y6nYvFbud7IP9HMA5ga98s8z1ImzGbKGTMqy15rL5/PVkyddf7MArGuMSKWR4F0njVU40ILJh4Ns\";\n        sout << \"xkuzzPGZHb68JdMit3OazsaLvkZ6kBlq3KwWH6BISfiFv8eLYRxCKSfGWoqcw1qlUaFM1MQTJ0Zf\";\n        sout << \"4IK+R9+6/GGQJmSEDCyK1t4jbWDr6pjoXOIsihE/hsJj+Uy0mcQ/pRQpxGc9DvL2/7rA09Lr+Hk1\";\n        sout << \"xmm09tLOMEtd6mNexizTXHotFeN0+M/fMRwjIUY3lZSOHFVhb3AcNRcVE8IhsOnrUu9SuZCP5cLI\";\n        sout << \"xpc66aGsMww2jY/TEMBmWn5IUpX3vNe26iJ8kXZYYqPKz67I1BmH1wOXBaHZVznvMHXBMF7WhwhN\";\n        sout << \"gq7Pf38r16eou+L80O0aAaHE840lzt+jynl/vNb5tZ6F75G6jIPW+ARUy002bD+n/k1lnmwZ1WgP\";\n        sout << \"WnxwFloLan9gTO8dZG6uPyDHL8HaXU7cpty67AFbDMnYnajqpixUyDYCZeeYDvcCv+lqDm3YgKPx\";\n        sout << \"XQPEQQP+qpwvPcwLIebl3F15EhdJuy1gdwt3Dyca13/+aQOq4Rd4AYFl9U8ehlJsrUOus7Q6xohm\";\n        sout << \"J6wNJJzJpnRwNH+qekXnqKqRdTUwcQ8JwcN9u4sUE4pmBWS4/hJSYHpFVaUbMPmun0Dou54UPzod\";\n        sout << \"HFGXXZd76cZ+1MqaoyofxHU95d3rh/47EjPtQInAKAXmQlud1wYLjOhdDwGyvhPN3XfohEPrH+s0\";\n        sout << \"n/tMDShXPyFIaS+WLQZbaid5LuarlwA1rQc5cJ16xtSrW9sRjpEM22MxGmCyyuR5mMhbYLlULR1R\";\n        sout << \"b9UJ6/BbJ9iqO2LOh4geqx7Pl+kvdiOwAfXLP3mFZ8PHTHk9mJMa1TlA/fLSo8O0YqHMTnFe7OtW\";\n        sout << \"qMNzs0Pz4ucJ5uGzptFUXyCqq4vmSS3Cx4eolZv36mgGa7Ll2TJDCJckb6m3lsroRCTs6zF4B2yN\";\n        sout << \"VfTekTPXttFqhi4GI85Y+ZBvMoOIAsvysWCsV31AzKg/qlb2+dOumyMScT0GX5+l3OMO0iqG1QXG\";\n        sout << \"3fJZOpDQHq07WuCisGH2DOO1sEE43+d8fZHb1l7PQ2w25w6hq0IA8u73oDWRyTr5IqY+oDM5d2K4\";\n        sout << \"Ysuzkl+odreYxlUvxCjwgG1UkXw31DQ50xIwpChB8rEd/5gW10lnXK8XTbVgL3fPuy0cd74toIhY\";\n        sout << \"JFg1jyA1ZST25w82oJBYq8f0NQtHc7bK01cS4OM0hmOGd7PDKiRGiIrsLcjgfw/J/jx3mBuEaR5J\";\n        sout << \"X0NRxcrJZN0RdwhmwfRIybRGdSX46JVUCrf15yD6vFi08cwkMxqpdn6fDfh0BTXzhmdJU0+219/a\";\n        sout << \"JFJBFD8iktFAl629X8denKKlc2sMyBT0IODc2OYlS1+xn1t13uEeLar2l/EgG15/eeBsELvM+M61\";\n        sout << \"7uSI7t1szDmeZmWrO5yVcOBq1HFoEmHIlDJNtYQ7sOqRiaJehiRNhnj/9umPDOWCmBdnIXYAxWMB\";\n        sout << \"TJXpWzOOeRvpFNXUHN8MDttwWjx7Osmal/5ZqIbX66+jdQrLih+L4//J8oLyCBjawxIj+4BVLSpI\";\n        sout << \"/jyMUEbzBmRM3HiOoqqgiTFlLeRAM666O6oGhNmrFC/Zf32boZ6YmU0OicO1P1zsaRLJkvMbCYaU\";\n        sout << \"Dmi4reAoKBG1PBqaWEhDE2VmjiPPCs2WqZfll85wyGQDgKKdyboLm26UWwW44oM698E6stYbg8cv\";\n        sout << \"P8eyOR8awT6WwPgOS3fJZFuKTgN5LXJxk2BVCzx1F3gnmMQ5FHhIVm1srDDFIIwSkuP9mgjN9lEI\";\n        sout << \"SGCLsFYdEhVedNZuOWMYCvV4RChI5XCPh0ZRilVbCP4kkj0Xaqq3SbNWD90lwwJvFdIkZOEPeYc3\";\n        sout << \"xfLARYjHqHbNkYZLpnTw6BPH8L4BCDl4v7ndyl5Ef5zvShk7L2VIyKUK+3lboiVjwDoI+k6A7iNC\";\n        sout << \"UW5f3fTA9D/s1hxS/LxaFU+9Z/bOMjiRaPLQ/ioOkwyrUJpsy8/K+T78Vv5XXqtOct0aXrtUydgP\";\n        sout << \"uWZKhAFxJe5467wlC1aja4hHwyEeQmn0P8ilBq2G2hDYGEnKEF3XN7bwyFS9RGFdU06jkKlop8cm\";\n        sout << \"s9bVHFI4NeItHNO48LVlRFQaVdq1p5vD5elrH1h+J0s0BzDauJaraINeTlF/PrpGzdxiA/vq7sB2\";\n        sout << \"DHPBfrxe/yTTu3YTnSzMYR5mvPdjKh9mH6PmzTYyu/lUN780SUyW7mmEqoNT3LcgPg6QGUfg7hqn\";\n        sout << \"HP7ml/WtBRhZh1eLok4o0lVOhX5S5vMkXFa7K2pObSkGyyItCW+Kk9SkH2BboW7aYomw/3tAd2ce\";\n        sout << \"FUm8H6Q9NP8KDpaebg/67KZijw5kCSH9dBi/XzfZY8vzWGPW6Uj6zpbcDfRQDb1jwrPKZRhQHHiT\";\n        sout << \"dU6ZscvJMqSdHXsCNByBtKrUX37K8C59AaEmCdshNlaIOQLvceIIpJ7XTfmtnjSSvK0zJzBWt+xf\";\n        sout << \"RdpAeZwDNK66MCl0DIJwG0aRK0nwuePf0f2k51xlsrnl5nY5rM+hfblfsm2BKH6BH/SYlUSLxQlC\";\n        sout << \"MhdXA3MGhxN9yuHCm0m8WVc4/4g+SCKnp70ZghQORzaijlU/0KS6P3e1po+y554gEqicyXXndnwA\";\n        sout << \"qmRp58+1pxbwORmCQIdgriAZxPQl77hXxCMES9WQkBVb0RKNnbWCWvVdkwxxYHBGhO+m4kZVjFwW\";\n        sout << \"0jxlEcKNa7WdQStRXCap2VDFA0c5kUS7WN6R9HbM/u8xMNLzzE6jrH8l2h8QrLkjHE2R5y/NIVAX\";\n        sout << \"G2+cQp2X9XxHVWQmfflpXPKcDGGYR70ALFrgeRkQQAxfR4WBDLLQitSat8H/q+yyl6hdGj5nmYXW\";\n        sout << \"BRy7URAh0ibk4K/Bs4d2mN8ivkxahOB1wPZS2FFHP/I9C7nikHmQwlg4VlPJTwLp25JDsOypt2sH\";\n        sout << \"J8CK02T35fcv89Dg6GKoIp9RFkJ2RcSUXyWP3JWFxH/u1rdTmOlVP7mAW4MgT8AQdXWXkfaJxq4S\";\n        sout << \"n0ZRo9RT68RvAcrdv2z6Hwh4klmlRw9qFtokZMGLk8BOtPGSOU/Av3k0RjEsqHLiQaRo0JpnBCw7\";\n        sout << \"JcdRwIuqvfWRJMpGF6DhHkIQCFZcTSftnNDKUBLVBn41O/VnUCakShsRIy0a3hjQpg0M/7hFbZI1\";\n        sout << \"wqiEu/aR4jZE3wixAJhXFC86bb59UwlH6TZ1Eszn7eH0inEqCSlMMRKTo5Bz5kybjP8As1pkPS4Z\";\n        sout << \"/A8L6SnY/HIm6jy1MiZJmzdimBLwv14JNZ2oUM/TWMzgnFayE0C1dwiX+75KOrJqLl5hnM/5r+Rz\";\n        sout << \"dB3emOb6i0OQI444QHxHLK6ZkLlJr8kY5opZlAfjyzuWzJUG9p1CXDfL4t99GOoq8TebYYdjmbyV\";\n        sout << \"BLn51c8VBQ63UM/dzKKgL6n5aUWAenJ9sNV3/b+fmN4cPWAv6TZQTDt6XZxPz+GT74rFhMv5YcwV\";\n        sout << \"zkuiYPllmx7WE0pegs+TV7BpKef2DBNlo6D/7ELNsr7L3+rz6w3l+m95i8jtIpeoPRzNxMWfvFZw\";\n        sout << \"OP46naSo+j+8Euy3CnMnx5HQVwBpEeGbqjwyhsKmRyev5wzgYGe4mxNTgrTKsVh4exFOYkFJovWm\";\n        sout << \"l9VKTRY4/Zd0H4dodHVquSWT/i6ogNNwB1O4T0I8hs8T8i4XybD4hM//dNvbPxq82HobB1R77rqz\";\n        sout << \"7wGi/X9MmX3ct7FIpU/sYUT2DeHZ8QFMfiBhSLqoHcJj2RgNr4cX9ZbFXk2nzw4Dz/ggTDOx8XRO\";\n        sout << \"qLovxOk8Sw7KXBDVmW1/kBhLVN/yffDJjzwwk/JqiUI3kPaLOiiJnnLRH+fS52mC/+M/xg7JHde/\";\n        sout << \"oGmlCCGQb/1q2j7he+nBCFZM8F6BVHnlA7DoGCzSetTLkOLo4OZssfDw3OSU/2vxTxkZ9qsarMCF\";\n        sout << \"uIl0MrtO59MbXtiMtGS5gcZL7Tu0SMDJUQYFtoZ6+QnDgHD3P3BsqyXfjRR+DTGvcVSyh878HpJV\";\n        sout << \"3R786KM3ZwW8iVxFabz1OOFx0Ox1fCspZa3L1ckftSTD6ypZAN4f5ox3Ad2iY3l2J7iPeE6/a9sk\";\n        sout << \"MnHQmuMy7pMum4VVepnd3lfqJljkCG5ptnznCTmp2wPgkqmvzXl1UU7kyYrdMt1jTzg6fiKsbROp\";\n        sout << \"wGSxXLbRGT2sFjU0KExb/rjG21a0NVVp2PnYMQuyF6glGmCeSqohLsV3nv7eCbUd42IacVWAR0qN\";\n        sout << \"c+5Dj8hdAmRMU5DJrbaLpuHeg0gouaBYrmCYGrcMqcI77VLyeQGF5hzq6t6IhiPk9uLrW2tpF5Df\";\n        sout << \"gHr/I94WMSy4Wf0RnACjVxSeRewTXJDuA5pKq0EqNs2RzmiB7LoktPBzqBgMjCRyKlCAzwZ63XOt\";\n        sout << \"vOvKGWCbjXcVEOZGAY3s4lQRiNIJ1Wat62u0MSj9BERVU8kd/NWueMn+tbdGTSR6Hgyk9bvHF+Q8\";\n        sout << \"CdFQntiNHHU2Qx5ZbzPPoNNjqwy+FGicBBG8/xV2bPd/JWm3uo/8BFPqzORzGAnG/BHSARPbEvkJ\";\n        sout << \"ix1Nw+gepwJ/M8YNp2aE+hYTBUBJueaSPyPR5FS6ocR5oLd5j6biPlTv9gHGg03Wc4W3BqrC4/He\";\n        sout << \"R5sSsRThAGj/wbDu6SMIoT+2gUNTbUZ7Lx+8rVcWGY4OLaySvre1BzyhGPpNDuIhmbW7n2jfEO9C\";\n        sout << \"MYbtPL7skgqV4L9JlLup+vbCNC5ccOpxm0Y+XSA/Gidd+aZu9D4R9Ddz66ns1Ida6bWLFM7T8BpE\";\n        sout << \"dYgcQBJ63ixc2nYknR7w5Ez6JPnmfUSDjXTrY+tnXlbyWIrF1fI1Og7V5i0d3G2jcuitqs0v6SwR\";\n        sout << \"rgEDVnVz0O+cd56TOssSv1d2KPIY6tv22oH9P1sNzjBYN9np1jRH7e1GpnoEvY7MA2gNyBIWdrKA\";\n        sout << \"uUs0c5gYr88/DbJvZtSnmPUMRr2Lp/RtOHnabXkbAevAovdIvmh/BfnXnSjrOkH+BH3Ici47ohO2\";\n        sout << \"Da/7OlZj4wAESZO3WO0SKN4fUwC6M6LUM2L7kg1tvqLA5KtYokFOc2dMSRs8qz6qpneGUv/f8NMu\";\n        sout << \"PphJtFjOixUrhCOZVv+0dN94L3dNPRyjXlDp4EejgUxWdeYVPxiyXor+LSIP/s4yPNmn6wIYWF4l\";\n        sout << \"hIFjh3drkdxwsaS6QWeYL3knA6I2rR0NERayOsVKxcVftkonwoZJHpdRkhDhBj0Sa8TicGcSgQt5\";\n        sout << \"kqnjLvOqNA3A4XkXj445r/HiNWVbd/v3DRYn0lh09HU7ihGo/qrC1DDjIQjRm5MO64mM9xZY58yU\";\n        sout << \"2fHWbglRconR2QeXmQ1D71aEvNZwBs1G6s1VqbCNgpeA+7kvjlzwFzyvfIqMuLTlvUo+4uCHf03O\";\n        sout << \"im1AxMxq1zvmRPM844aIenx1bhx4vKmeEwTeHKYvjUkTCMFqOXxq0UeK5XSKJkXrK0F98MORKeEI\";\n        sout << \"lhpQXL7ky8QZChU2k8DDBaocWzF9oRtrXDY6vfuvcituo7gbfVIDzQrp4ran2eY/pvucYyn/Maai\";\n        sout << \"W5IQzzordTdlVKX99bpoGJrmFzYrrpUa7xxb5Hs+YvwicR8IE/2ePoZ0t04dBaIwPP3ZuPO0G3EA\";\n        sout << \"2XGdG7f9AARr1098ES4qU/JRanR/5XZY16deNuVPRKMdUEBMKijfHoQCCorvA2HoQz/jD1nhg2ZR\";\n        sout << \"cB19h0shhjnz/OVgb60bN4izBugSDZfyiuZvvdpnCbc7bReVBCM8456EG4mHdI1NSdGJfATpvYbT\";\n        sout << \"lKBwrESSbmkYIVCcBxn845i5lrPHMdlt0s0qwtcqBTvjBmhRpezoF/U1BnPdETs303TMgApql/xS\";\n        sout << \"MWS/Jme3ioI6E35BzkTXABoxIxyjdFkFTququq686oqyGCSpCxlJA2OyXwUc7XkBI4Ki35ewV3Yh\";\n        sout << \"DbONeeMe9NAred9EhUBg+uLO3W8oI3094ZbMa7N9b0tVpewsJuqP7nfW4hZtLSpFEtjlQVGsqfQv\";\n        sout << \"TqljECWVoZ4cbclYUXTMqtd/5okENdDEk4BJnmd5b091PoGNeSqYPf94LVrlyVSM6G9DmQm1UTFr\";\n        sout << \"bUipf0LcSMZ+DKYhwIJLpP/GppEMORYKRhDtgPy66GNfhiNKzLP+fyPpSf6LbtCUbE3Ni+PJ8zux\";\n        sout << \"k810i0by9lVlFUW9tNnUcSE7IPrcFs8fozpLwNSI/gTKFy0mNEnHJ4hlSgaVB157PLKmHSv6WJIe\";\n        sout << \"6LE89xQbc/Rl2TRjh2SxZXB62FoRLXApUFcSdCl4ZRdfA5p5zXcQVWxl3RUdJbpUhsqNA7vmHT9q\";\n        sout << \"qinoGtKuPZvANZr9Yn5hB8zzHLiRvk9NHhFdR/Ibw2gGXq6XMuJmrShSFRMZrTiIVtQeBWZNzQBL\";\n        sout << \"jViE75H59XWkpeUM8hAUUawEH+CFcYynOsbTECPSbgIbt1w6DRB096vYoMnxnttX3J7SIf4JtpEZ\";\n        sout << \"iSI/Xzdcu9L3QX7bQaHzaf/FIqWvdl3quN2CrSnBd/UbGCdgylgCQyBtQjcr2lP9O3QKav9laEz2\";\n        sout << \"YJbjjXldgdumq2W/0rTopOIX3V3xCHB6xkZq1SS773LCHWAaoPRMwgfrJplzRSNIaD9fRsVQuS79\";\n        sout << \"TUwphVg4iGrl/0u8YLEr9TmSTojfTS3M23HNJU/K8l1zOB1gfCYwmj6jGxTCuvDHvgpJ/UnViT2j\";\n        sout << \"fnQjGXg/WUwEoaD+66ZePipeu+PlIHDSX3Jj2+jHAmMMsFX7PZlP3xhWUyG6U0hJ1guDe4HOcMWQ\";\n        sout << \"97gJDdYzwSE+S7vB1LQWKNdEnZPmZ+rQ79gpjNYVfzE2djCO9Sn0rQD5W6O7Wd/QCV+qu619i1wN\";\n        sout << \"IziA40bBSmDLiEtZv9Aviu7q7Au24X7ZcXxRqruz9zKPSFd6dhpWAK9lD8PCNwUrDXAvlHT8pS+U\";\n        sout << \"8K2ISz2knDjOiHIb1P4jF374K89RNSNvefvkGBNrJ8H7JiseiuhumYfAiSVqBQwGUeh8lnPq4aeQ\";\n        sout << \"V0gFbCj8kNEs8/cDLBnnwCGZbqRfSGgSXTKWu3/oSmn/bMralWdW35AgMM2tJ3Fo5fIkfzsq4ykT\";\n        sout << \"ywlPUtOOHIS8ImXHCQgVt1+/OPbTpgCly1i3ssNeIkjPY5DyGk08WWYiih7IAKxjFeHSavuYKy1P\";\n        sout << \"1QMI0dJ3y2Wp717Zg46c+iKxlg+oUR7It9UT+ePKJCm/UAayU7LyOWThMfP73hM9k5G/h+8oENw2\";\n        sout << \"D/Kj5IkwB3iK6iC/6QrZaIHTWVRNYioSzsEndB0X9NhBMlcTmyvPJfctFydhK5JjQwjjx96k4FvS\";\n        sout << \"P3C7zh1ww1K/x1J5vK/2NViZxgSFmIz7L3NbwUb87eXPictC8NVReqskmSw8hxNmgTHG/WEU6NZi\";\n        sout << \"XRI+HIV5erFIeNRIixP7gp1z/o/5bL1QH5ALgBk4TRc1B9qG+fcWfJg7o0NckPbkkueM3u1J79mu\";\n        sout << \"pcs18OQ2A8zehkFZeaTCC6Q6BRijJFBpPNnDIxJ7RDazpi3i366Hds6mD/r8IDRT8TbWqedF8bNv\";\n        sout << \"vGRPs1aEWykMumZdtkRZXfByK14T0gF0CSjUeIRnPuhXbfMBznBUGue7eCj3jHnLynEKdtuA7CyU\";\n        sout << \"FlXmJWrixsWkohwNSY+2jCNgmIWsUsvKS+dlNktC7OdSo+QEIDnCfPio5AwCTWBBvUaxwR90GeWW\";\n        sout << \"yk3Rob5grT0wgxQGoCoew1J9DJT6iLEuy/jJ4FjFSB581f5186b4lOYaMoSCpOp+uWEz+I0c2G0o\";\n        sout << \"DZKFloHMTpZyEt8LggzchgxypR0SGSFxm1X0/lhdPwa+8lKRdcXmhe2ai6H0R3lhR9ZTBaCWhMMo\";\n        sout << \"GJ6SvT1ttMF3rg9qfFc1RKjK4+TsRxwYOP1XDz1rjEp7KWHLxZ/JKzp4IXomPm2f6exs+miIPME/\";\n        sout << \"yo+Dtmev/tYJLd9poc+LAVkFIDqQ5ID08LgCGwAwLz7J+nLxSww2OjOxhbVfRIm0Bj0ERLmvy0jv\";\n        sout << \"9Oz6hHcYVHPqSGN2aMsPtpWUWOgND2ofYfAJqqUMbwalMYUyaimuIU9ODyoT0xIMH3VeN/nrIHDB\";\n        sout << \"u1J1iY/Lshk4okLUB8OnbtJY8t3KATibzVtoLaoOcmcQzOJahRLw861zYSlCs7SQpAqVEoRjYtZC\";\n        sout << \"5JPGKLY9zqoogM41u3uy16DfVEvDYr7XZm9PRYY7H33QZiOYhPRgzZvs9nJZAJ7QGRDYiNQG5V6a\";\n        sout << \"Zc/qLzF9UaRbUOxVKJ6FkdhuIuK8d38cN1ky2uUM2m2cFAyJmzKosMn1+ZKo85F097lSyuDqgXvF\";\n        sout << \"hD9fu2ze0hTo2zqFmHHoDvA/3dN3Ilt5omMSSf/HQdvOeXj/2vtmJhpnERGJo0NCiOZfKI5QG4qP\";\n        sout << \"313wIpwQPZxAvJzh9YEHdb3fv6GpwlEygu93G8Uu4WZkT7P+XXqhH5PL3cZ2MYQeYGR70nvUzJWM\";\n        sout << \"lz7g/DvPE2aQHxGSlH+W6JEabNL1YUvAim6/uLWXvjbU+QdKDUQsml0P/auI6oHYMAgXnifheH85\";\n        sout << \"xyT4TLqA33Bc0SRpwPV6lIigxQg8OEX1czyeYInQ7Y+YhaPF9Dh+YR2Kf6xLS/qnhOJrAr102gf1\";\n        sout << \"apYuPnSogxRcir2pFtltl7k7xjaAcfcOUfM10VkYOoq92X9XTfbEBbeEAhFtw5AgWJw/iryapVb0\";\n        sout << \"nNPvXwZ6g8e0LM8cky8/CR+68D7KCkxTQ+C3cq6Fco2niuPO1/IbF4nnpLB7vDS7qjrgqU4/t0bq\";\n        sout << \"qMPMFgX4MhBikxwzWh6xnQgylA47Rbzy0EKMD1j4NLSkySg7zpm29sTTvEh68OnSBaaiNm7yoIpv\";\n        sout << \"41yj7kewoFyIY6wqbc6bxfAc+cKLdxYIxwwXRknJQuZW2mx4wpsjXYqEwZ6OCDldMgYkQWuLd1r0\";\n        sout << \"LNY80XRGlKZw4bV3eBiEAo8E7yU6VBqi/C+fTWCdaD3kjC1mu7V9XX2tMg4G2kaSqc6JMjOZ9VF1\";\n        sout << \"06FJujVmJxzZ8t4Z8yI3JGUpmWgYnvY3baanLpy54Fd7M2JgoXJrElrfsEMFsci44CmK54NpntkB\";\n        sout << \"wFoMnSxymuW02SsBU3DEBbZJmXspP2yqCUVHyqpp2Wez21u9T2LV2yNLpKHm8uNRf++WJ49zGBDY\";\n        sout << \"vJ2xirDEOgRWCQ/z4J7fg6AwMrG0PhqX5Rw1NStM8rPEWqKd9+6KKTL3lMj0rvvVjUCylKvev2Vw\";\n        sout << \"aWeVNhBWgelJ9v/Kdp8lQRsSyqJ7JP9CQ9iRicBTKpKio0NTaYn8LEo0yH5B8HVycOVJmPjjYCg6\";\n        sout << \"eiZ6Vxr0laxchTlNPwRAU9hsZky0eO68C/cLrfgqB2IxJeZH0z1XWmsA5dGcYAWMDamqBNPTm1jW\";\n        sout << \"USE/0iR1KPxvIemOxt2V565of+jareTk/Q77E+jkopN7K2AmKOGouPeRUGEmfrtZQY2sarl0tF2r\";\n        sout << \"f3TvsoqK47umT9s3R208qwO7nC1TQjaEdP2KIfcPxbyuZ38d+GxQcyuID5+qS3IQR4X1k+lyUxY9\";\n        sout << \"wtfNYYbmsXnqAXnM/mKlfGlYalVxalvxo9eJdugBIVbaQ3JmEovseS8IV0dZz9ItdrW3HtHquix1\";\n        sout << \"xKf4VBhFqpCdVXBY0/mMlcWws6nItmS20yCf8i6jJ1HcaHGuPQvhyiv+xL8kELcu2avfpf93i4m5\";\n        sout << \"KaJb4xkjSXNAcBerhBlZ+DO58TBlEZSI8UTw1+yuzymxOyNbq2o5rwqAqMDxmfJlJvbum5OnTWCc\";\n        sout << \"2AgSoTUVOUmg1br3xDxH5xX81Ty+fMaizY/8P+dFg6MGikZZuUky2R/nJRilgi4thJV2q9iCm3sX\";\n        sout << \"KVW0vt0AHRnUb+QkaLl4ZJwGUcx37S2YcsFCAk/GG9F3g1zo3zUNgbl7WelqICfme9vwcl+LDnvK\";\n        sout << \"q8jgEUNwGe4ZcgDuPAxiOmIo0W0iRDbt97R56EnRs9n0E4W+/DWBvHY09nBYtVrQWpodvZ3ZkEp7\";\n        sout << \"9zg0d0rwaLtb21iZPH1swSnf3hTYC2sxq8ppPJKENrTOYj6qiaye/kqg/u+rZmhd/LwNckkjFy4H\";\n        sout << \"9OA+Te/sjSoRCoSSGXtGSexAhh9WfFMnivoJ+9kAIGRUCJPQCx+NPQ5s1+d5sMZHyGs6CsR2Hpjf\";\n        sout << \"ZvXMpbZVEV/4Fgf7VMtSexPTV27hFxD0wHrhU4lsQp0T3QcI20VYx9kTz025uiMWUD29Fm3b7peD\";\n        sout << \"K2bXo7y3G3k4ykOPrF4kR0VSkjB1NbhXftQImcpZiSDce0MZOZZvQ3lH0pZ7LaU5d++Dyp8xsxLt\";\n        sout << \"4toEQgoyLaS22tEe1jSQsT7v4AWwjMBAQngr8MsqmcWyu1UYshp3kmosoxHZ5N0w+RN6P8dnRWuR\";\n        sout << \"N3gIp6dBvllTNVG1Nf1zJ1r0w8KITbzsS4bBLijKlUilL4b/P8N81fEUDaXCrcdcL9b0fzv64vg4\";\n        sout << \"9ZXsKIfw3rjw+/ZiDt6a4WtwCZvCyI7cRRB2YGxaeynx/Yyqq9xwnWThHA0a/SAwkokg/zbxfi3u\";\n        sout << \"kzPOBau+RpDKYDL6DBkYaxMeTnbF9dRZnckTEhu8kcSh5uHhVNSeyYSngJ0YXZV+tEzNi8yI0wA+\";\n        sout << \"6M9OX5gcHv1pbem3Fyx/3Rqu/LbjD19TtdwuyhXnnGcCXPGzqFrpEdN6504IdM7WDRrkdjpyTlOR\";\n        sout << \"5hzk1GymO/IPAk8uRPEHeU+873xDLoxeuNseeNDRuNwFa5FcIKmIAEGeSydVPv2uPH6l0VQezasr\";\n        sout << \"XMXlWOCOFo9eGGJW0p4tz4qX35tClsU+0ml1uaRR/fFeJyJ7+WrqyqDdHpTqnGWp9OdyyCiowxFD\";\n        sout << \"T7MJ/Py4+ytZ++sArWxfC5KATdztRSzuquLbzKfLtF5x3vihfHzonsdHzZNUTi6py1JV0uQO6by/\";\n        sout << \"1HjNlxiNqfOEaQxfLe/KwZvvvSVasZQz+64BSVLPlmwFnha6iUXYl0m8pNQ/E3QlysaeDvf6j6nC\";\n        sout << \"By2Ft84JgN/2Gy/XJuQRobhPiDh2Fro4ebBwOjIIfgQx9Q9FNzKRDHAS0/HXB+P41/CzXWr2eTu2\";\n        sout << \"PXZ0O8TshRiD5gH7Su23qpwB7qlNrPbULE06oc8ftAJtuKAGDPFXbom3zFVjsj/yeTmS2HvU/b80\";\n        sout << \"8FCgSSxx8cvIqfPHLLOSPBUxJAVyCFPvDIUzHE3sBPyw9OY40bgSyaYoC+hoKuf0lHgt20r1Tz5A\";\n        sout << \"Em0sAZfnbWRESfaM8lafrA+OjaSDQQW7wAI4+XO+HbWYxz6Zj3hu4qfmID2Iz2kuo57Ci1RLOUzl\";\n        sout << \"sWcTkVqUrdnoGzjtese/OnbbsCUQIfCM5ygX1KKgmlb331Er2So/dqrYpCFAqBo3SmctlCtmERuC\";\n        sout << \"hkB59TSoGqV6ePxidHGWKBsEHudcQyRv+pwNhnRkW+l1XmpzMmdQqeBjqcw0RAVJgDmHS1SMrpPE\";\n        sout << \"GZmNu+LmuN8xdGV1tbylOTC4TVND5NOWaPDE+vx0YaRi2orc7KgrLc9OhtAQdTC7hlk/8jlmYxFp\";\n        sout << \"xl0Fe0oW1fU0avYFk0p+dUXfYCA6HXTetcQJdo7Ai4JveZIUdZ5xW2snKTZXd/IAE1UG1o5Uz0LA\";\n        sout << \"/y3Q2+1hBR+4cVnmqVftEf4ZQQoJlY2CN5Wltg8kWf3nsgSmu1JNtRXEV0DKODWTAGSizMJJleG7\";\n        sout << \"ilV6GJU335MapNMUrlHYVNicy1NY8CX/PhZtbGzqNM3gfwS0KhWmKN6HS2BYwfPllMYJk4koLHWS\";\n        sout << \"R9dpGgz8n+PDrKOcLG4U8xYocSvLUVJ6YmdbYWtWunGa0I0egn3YmUc6RTflJ6G2rRpjY/B//CY/\";\n        sout << \"tAKUuY+4e+4/VTH/sm1z3yHSycLOorAeMjKnPpDfN5d4hyrqeHgG/PKdZ/QlMZYw0M2Kb9fpvefl\";\n        sout << \"cqeu2IZaH1E7G/YbqnL4wRlPq6HSQcT7C4r7vJxwYGGwZ2wClOXdvvbdjAOxZITv116e6jaMQ3vN\";\n        sout << \"NNd09s9zZlXyXDyBfdLgFebbKLjrxC+2eB16aURJkorv9jQydbdMMsZ7DnW75DppDplDyPvMC3TT\";\n        sout << \"0o4PDSd+YBeWo6CAZcWNR+lB/ZB36tA/RIyCopqeUOL/P8cfeJSX+3k1yghKm4HeY6VaWJSALiiP\";\n        sout << \"/0nEgGc4dbVmspZGzaORpGOTqqGnHm7TiZmOJW0PFrCVY0N0VqHcSkTOZn6PtuQKFXtFHYEtpepB\";\n        sout << \"0d332dQEz4AxgF0qrhrviqEZpXTxG1bWE4uC3H0tDWIJhyJe16xF96vE3QN6z4P2+esYwjsfRdQp\";\n        sout << \"3CYcxcjagfWBngiEfRsseTLhVf1KsFIXgafpK36gWlZan3O/7uyqhOYyg3W7aJ20bvZWuZZ94Gls\";\n        sout << \"7VLJyTKS4LNKHcb9Y2PtX7nzosb7tL2hcYgGChva73FTDSuf56HcC5+KM+t/MXf+BPBr4FUsgN3M\";\n        sout << \"1QrQiRM4dZte2DfAvSaZmWQuqtsH2uOLimHU2AAsfZav6k+7Qb4mQs6zdRPTMPcd8cUv8MWf3aOW\";\n        sout << \"skdmBW3ausbs+iQFW1MUqr/4lwe4DUekn8nfniBCI129E9p0JLXLw9NrT+669orbCX3UOGc5UHTg\";\n        sout << \"0SvFTMRqw7Y9mw4NMLOMCn8/mINMrmmaTvtEwLhHSOTwYjRCJ1A353ENYX3T551pA3QS1CrWfIrI\";\n        sout << \"apV92iQiSH5A/rzOjhq3BDCU8HIXihgVCsR/w5Kcy7nCkI4pvbsIjPNivZsDhx8H+IKNTUNpSRt/\";\n        sout << \"CPzh885kcdofM5k/nqVvvJhQzhpk18+IRuxTp5Dqa62MYZwgEgURS1lVVzWQX86wJl6/4cbIVEcb\";\n        sout << \"1dowX6FrycYfy81NkQdF06egVOZVYCaZdW7f1W4Xn4l7PWb6pb1HRb3/0Wu8YuYjm8pSY/wA70cJ\";\n        sout << \"G141hphqUxQeblVInhyk40zcaroWoWWGTkiHUnAp2cQgjZJRHbrfoJgF5UVmdDJrwdwiMREmR7zZ\";\n        sout << \"uSS4xTZ85fXMH1NGcOAu3tFt97bY2uh/Nzk+XucsND69TUp4s7RBmiahbRw8XQa5izZMRPgYkVss\";\n        sout << \"A4ggkTd9wiuotgjMtjd+NsitkGhuoQiQHLW0R0PVPEfG5mtdlp6/PlqCsTum8bRuxivsPkCcjEB5\";\n        sout << \"9gdgEeSfSOSRTe0hnm/gDQXs4BnFeyG/YzHm1pHHIP2VHkr3GlWVu0w7tLPXFLXF8kRESZgo1Np5\";\n        sout << \"WFYh5OmLS+J3xhJMfzNjUJ0bzfN5BnlQMDT8vttfAovg4IO7zFTexfLBxgKLWJZ2aQnoPeoBIJFk\";\n        sout << \"uPBxTjUY29133ygl2fAylnqP9zIipFbgkLEw0NrfKrfKIPK2Kf9VI1+adXQlsHo0vsI7l/uWbW5n\";\n        sout << \"XMP598ROkdbP5aSkpXPdld++HGzYtfD76teXubxsFcCpmm3OSbcLo2vAOMDQdpfFTOLM0ig1VhC6\";\n        sout << \"tCC32GUIWix0VLb2dZCdidXJXu40BNL+ASvXUAipVBD+qBL0uSHZXjns8B6XFD88zrW+reKH9ZO/\";\n        sout << \"gRZI+FH7eqxkZlu5ChFHJeZVSK1MwHk1ikQxAe8jVXTzzVAMcK3EVGvH/l0RKX/SJvU58t0SuHOr\";\n        sout << \"HVule85Z1pwxt5DWS5IYXibDgxOWfrcKp1iTXhhKsmOmqLA4M8iGbtJ59RjGp3ndoc8k5lgx0YXO\";\n        sout << \"CZKSNjMhF/swTPJF3fvVwzBU9vvWe2HCUTejmLi+bivqW3n+qtHiI1y9VWPY9B90N9OalQHJD2OB\";\n        sout << \"myHYFjs7AVdwFYoQZIBFtaKpozISrGZBa47RfYaS3zH2aNzYnT6zDsgKJYdA8skR/tNgMQPdgEtD\";\n        sout << \"d/NZPBXg0YnjIJNX9z3kcvXuwNnpv/ZafofCuHJQDRlWe2hvfHXZJf22IWrkeFjTGAzVl7bGry9d\";\n        sout << \"zaaFJKt73ogJ4IM36xHJ4pgGuP+daAnif+2sdHoEavTV6zvkV8T2UXgdP5LmPVnoz0zue+DBTt9q\";\n        sout << \"Lco7T8RhIgRDQL3K/PB23bc/gYdGKh2ISHY1klB2pUWu30sBa+g1ap7cTFIC5eDQ0L19jaJNlLWf\";\n        sout << \"MQR0Tshn9dRsznAfmjIm4RvhMvf97Wer3t9CjFOOaQfSXxdPQ0KpnxeyfyuBpRYScUX2cCEkIXjA\";\n        sout << \"IiOHn7aTJ22O3S7vZ2a4jVygPosfhvd/nNfWhAukM9UfVIFi/kG8CXvuPjKhn77k1ddfIbsp7Q2L\";\n        sout << \"Na7xoC6HiPus1PI5kd/p1NkclRSCiMBCl2qQfHqVIioK25jAjHl8SxsiPpkGDgiBJTO+HR39syAt\";\n        sout << \"iyjvIv5KH/yAzl+w13S68pDbAGZ7U8hDI/NKlhgVycVmkfKZzGB/9wzJVemHhvosb5tY/P9ZHqgB\";\n        sout << \"HuIUgdxusvm5IyzBBl0DbaMxwdHevHQgJ7NmxtvGDDofkHQ8JQXkr+N7+Oswa8KAEdJc2t9fST82\";\n        sout << \"X2NPa6s0wEQ9PvZhUQd45UcFtXCBbkCoisIEA4X5Af1xG7gqwo/PqEW3g0hYwmbWDgNTnEHaHSsI\";\n        sout << \"4k18Jcem/+3cNZx6zFKEZ6u6/JlvGJsNjvoZQlRluwF64lvxtmvxwD7ak+UmFc9Ll+cYhiHhdy7h\";\n        sout << \"e2RAF5HLTVf4BZkUs+NI4h4c5z+pU4dxM4JOVNQ5OoBisyMeFbFDlBd2x6wRMtiREIF4h/yDm5/g\";\n        sout << \"QIQN6sXCt4zrBLoPvFBvC7UvVPaLEpW4Ay7yeYoFhTUcZ7G11HdyJHIrWhXj8mazBuT33wiXPXD0\";\n        sout << \"fgDO2G5kVrYv837OEagI68UWoYwHFVQyKy7rXAqnJOH6rUOiSeXwrAs0VXCOo/iWz0+H7Vgkjvo3\";\n        sout << \"a+RGXFU0PakfqhrS4elT76gTx27rIG2VuKjWnNWi91g2MnD9dwS4xGNu0nB/HiOTDKKfzQ3uoE/D\";\n        sout << \"oP/Fn1wFPtBDC6935HgjJA30RBpTT4lZtqaVhy4F/pFfqFBL/RUU0jmlG8WvHSF28NkXMJFxqJqr\";\n        sout << \"FdZj/ImUTWIBtAOXIMgu8OQ9LXpd6kyh7dpy2lLG5ik8X18yJnJS6WZnRAx6nX3Egg7zi+jq6P+B\";\n        sout << \"AGQecbLJ+ngHGqQd6fP8hOU7ujU4yyAEKX3CWnvjK3DKN+fH9enZ3VHAgBS6uy4BicQeqNJx0D2k\";\n        sout << \"ab3+B1WPW98ieaG+G6TjyFGNFwqA7ComKR7X745Px3MW0qoQXJVK6FkV1x5zOjrI09hc3G/NqzC8\";\n        sout << \"5hR5EA4ebicmVwYgc2rftfhZ9FY8vTslWklZHaZosv3/QsoFuoDNMA82bg0/tDUo7G47EAETe7lj\";\n        sout << \"7MRS+dqjw9rMDlry6erLVu9vOvz5gVxhNM2+Q2VKx2f2ugkn8/VGq3ufEEoEkKtnLI0aJuli0ZFM\";\n        sout << \"yEDEHqombS/JdKacUNhM/zevqMA+F63pABb/wTCYhNIZWZM5SRCoYiduOSQYs7eR4ex+Y9a2T2cc\";\n        sout << \"UyRYpcFRySR4XB1Nf5GVdBmuuVqvg7wuRwCKXDkxcesKSrg7HLlUT9xaIReIHoFsZj5w3RcZvSCT\";\n        sout << \"q+d61nOKgP5ym2c5BwxytP42yQ3SisRyykroBgipHm7QmrJnrsw0OZvAkFh/bo/mhstLDPKkoA89\";\n        sout << \"Dg/kr5VTRG7Id11Qb6CKvSb9hq0mtnGAGnYa7XTmmojYhVXeFF1aj7E94bUVjtl1rJHlpNSBRl8U\";\n        sout << \"LffnXik6Ju9PK+gw/WXTgcyOM0Gmw91IqJsBiNVmLMB8VPpunL+J27aoPVdSxIpR1H5PjWhWyqNz\";\n        sout << \"jDTlxcIKpM0PBs7PyNJ3a0QSQYQrGDYI9VkTQJpxwYhPOAWdIjTKDBfx/wl5UyxbcAzD2e4mXkGq\";\n        sout << \"535EjhmfhG0SRvXP4heNN4Vzl7KMDjO9VNMB4/L7500528rL2b1wC81igCwNWpUL7Pn8/XTK8jRz\";\n        sout << \"KCcb92liptbbjGVb1V9hh6o2aR5l6ZQtS2MHlkZG5rucr+NT/SFYoVKB93lLnq2CbGPlzZZdPHLv\";\n        sout << \"+RG2+80boVipNp8XD53hLWtOvWMQGWYwVWSqQ6jrO24yXdRjZCn+F7mn9mP/8U2dEi546WLWvaOi\";\n        sout << \"RzQJdz+5IcL8RBPWCcUqR2VSyPIT5Fzw4D2+W6G3cvc7mWgiEjT9Vzjpeo5D5rWM3pAPl/kI+gMg\";\n        sout << \"42h/H45O4HY7CTb1Isa5GyX4L9vPfLXyfqU0N/8v8/UvQyB8TyKaDMedoiA7+hdWtXRMJ3cFxepR\";\n        sout << \"WqHTCK3o0Lhh29qPjMh7hKtC4xNVL5/Cz9KmIu8ZYAC4aWXX0g7wzBb9o/Xb6mJ+ZEDmtI25DiFy\";\n        sout << \"McNqoVFxoxYhTrUYNOaAqJYVTOauV8N3Mv9WiR+s00mjLAIEOrcExjt6WrCUVAI6XCqsWPibNFTM\";\n        sout << \"tSBPtg/w6jDsX9H13vPzwv2Wt1gGzejC2nuqaEVXlr1UKExiXjQGAJyiw13PjRHSOD5zUWOhkPBr\";\n        sout << \"h7lzK/HcCTA6S8PzM3yIPWYUtlzfFT1a1gIoBvO6dx3EbGGRYcePQ+xCln/07SFsUXfbKu43/RIV\";\n        sout << \"LUXeP19XnLIFDk9NRlK577rEfl3rZN2TkeFXMESPA2E3WtUXLw/rQxAi+E9n4pHJ1dfLJDrXcuH4\";\n        sout << \"iY3QbOnJj/ay/dY0eDCjoR8XBlbvqDCvuKDZd/SPNLseIwXXTSFxnRBONagPDgQTwM6s0bqn99DJ\";\n        sout << \"CEVWRIrkCH9o44FsWgF/gZEcEwFbZifnkjRSbiYPRn+euaJrvU8t+x86gbdywBJg/NdAPdn7gmyR\";\n        sout << \"V0mxYX035zo6xzjvYlOVP8cDewPK76P5sFFM/00tE134eK0jCmw2uMJ+AX2mEm3RhtmUdShzk8Y1\";\n        sout << \"lVbWyEn8VGdiZmsaB9SbeWAX4vj763YnH8pogS5AfRtR7+Z/B8dB7wBowpfs0Kvtm6LzPAqpyUYI\";\n        sout << \"OqvwEK1/f+fwq70lm3K0jFwda0ycYlBWhmGhpuFWYh60ictb+b19JLmdT59NrIme9aHqB8+SrEnN\";\n        sout << \"C5eh/Ee6eAU7fcsai415NdkTphEqSj/0IJNNqpoAm6WYXyNcFeXDma7VCa/6mXZFTHi18+qWqdYa\";\n        sout << \"FjFmYunmwGz5eEXqWwZrN0RQlZLzGTjAkNuVnrDhUqfPtTQ3Jg9Q/g514VBc/e1f4tcmY4lBDeGZ\";\n        sout << \"yAfWnvwG76t3EfpMmnfgTyHXf+cf2g6OUsha7eTpLNh6DUT6TBPtMElNMOWMDlCRrNUAvUGaiDCk\";\n        sout << \"dkZ0LcNkPZmrS9YTvzVVXU/DfKQk2Lc4kJw08UoAFRTXRPA3reX47HbrXeo7bU4PAhA6Flkzays6\";\n        sout << \"NWx7RVOmdSvo0Jc0Ec2rzSfShigqkmjXo/CSxvmuemnMZaBJb6o+R3iVOdMpCsw5+PwCtlG9ghH+\";\n        sout << \"egfrWDE2MA4hENDmgbONs1XrTLrEWl26avRL15OcLNfjb4Q85Db+r+8Q8ApGlnw3Sk76VrAoqY5W\";\n        sout << \"RIsD0jH/CD5VBtJnFNU+qFtYVNp3kBNKcNTP9RDpi9BxY0qZuEcRGtfGJMIAtqrjo9STIe7RxdfE\";\n        sout << \"wy30LUHKaHZSURLZgUYeY5h+OTOYDpTMjwm+xT9r2GyOOQSmNL+2QVXyrBq7BxtbTwDUOd+a/9SU\";\n        sout << \"rCqZfwqmA6OrPbLHkRkQHYJmtsR9k/+C3R4bSl28PQDEf4jfiA2ztVZ3Ot3FLHooVKF5Vk8kIVsp\";\n        sout << \"ZnbVJA52R4CLnmUyLsqqwDaUJYVfiOQ3zuqR8lDzhNDKYuTzkS2g+X9b91wF58wA+Mg/PyhUpWFs\";\n        sout << \"iYsELBbYlTW6eZYdDsIlI2x7khrgJuralZPQpwt2+3cg4NThKyKTpCIDQee6stuiUXqh1NKE4F/k\";\n        sout << \"U2M6WifViFrXuKqIChGe9DSraR3UfTyjDm4l3uGX6oE2MWXRyigPCfkHCqunq34357V0Bds/Q341\";\n        sout << \"hA6uDgedbPjXqPj5MF7/bZUHvqnnwD22WkGXfzgCpGAwN+WOWFxUZL2adBjJoEC7hYwx+umcXQZa\";\n        sout << \"H+p04+MqMvyzyfnI8d20mZQaZef/nY6vdNy5rXna6ZyFJnKR757m/OUaL9wrvO5Wlk0nzhQYnexX\";\n        sout << \"KyOvQYBbd4Hu5tWQ518f2RtMZzm7ReM7Xr78leb7GVB0claKWD+7ptwWwFVn7eiphI0rnxmSY7Fm\";\n        sout << \"BABTROBL//vZp3c2VqmpdZbhgeSyWEvyZ8KUheldonXlpbm0OahvTVNZHafDX2aUph5zYHSzT8YE\";\n        sout << \"cvm85ivZA1XdQfLkQot0Y3H6rQKiW89VE3qNoU2IReWEYZYbTk2FHIgIEicG9LECWuoPaHMLf+tr\";\n        sout << \"8dwW4q37Bz4IpwhsPrlBmXDdlPJnWDvq/C5AWpDkgr5JEg2E1CL2QA0YsUqLMt3ogOyqhr8jvAFI\";\n        sout << \"mWgYRweFTHjCMSbsRHRKr/WRRljRHqIs4sV1X7wzsXXR9V0GwYnkwHWu7SekTSivJHoedUspgymz\";\n        sout << \"Xk/OkmO3hJlvow4lyNXI/QsF4ObXSF5xvUuUtNHy4EF54IRqc1chr8E073MVyHdYbK/LYDoHJ1Kn\";\n        sout << \"wx+A4+BWLmeVS5weTfUHronUZlRIv1YgrSzw8M3Uxf3tA9+Vi9Pzu29X2IeNt7DbiZzGzMZWkgeD\";\n        sout << \"ye0enuQfIDcZ/AV+5B2mG6uxjLnMFp3S5HxSQEfbCwyvpxHEwImq2NR+9/J4UcxXNsqe2k92Wz8H\";\n        sout << \"jPlROh4/lFbmzxE2kT49ro3ewacP+bvpRpWyXpuVQo/oMQ0NuljpBtIoig4csJHhp/cREvXVsp2O\";\n        sout << \"q3nF/kxgs6BrfptKS6RE5R+gz1s9WNJ0yJk2QkurEWQReloMW/w0ktcfENcFevr/HkOtTr28gP1i\";\n        sout << \"vMleP2QxZrdNad2iBLdpJRs9SH663kVa67RTfBczDeXTqQiFtCpI16Dr7GZWnBoYtT8d2AXtCsNQ\";\n        sout << \"wUfRuiVc23aXnOkgD5PtRmcp7WvBDczaGtBBmTbKSy4DhlWol+B8kUcajMRGnrKDC6j1a5mYtWkK\";\n        sout << \"XzGrqT7Bsg0Tffj61OjYU6nCDLPm2Mm2XLHmhf8Ud3WJWANjsiWQKFTNH7eZUhzL3XhK/Iet+dPk\";\n        sout << \"Y1h1o4tGWeZPgFm9lLIhXuT/SkLR+XAGNNgrbAMGSlyTP6d2EPn5WvAL8Txt+1EaMITteGO0uKwM\";\n        sout << \"X+vpdPJC8cocJroQOethNqV+vK7brbtz7NZsdgFov5VYoLNWpwQLigIcaDxORQBC5yMh1ygeDQjD\";\n        sout << \"exiUJVF6Y0blMVyLqBz5OwIO1ftDAxeirjE5CIwSAs/E/CslH8dTJAL6hmTJ5Ncw70pf0NvzXkJz\";\n        sout << \"GUFSaWzRNyrpqFh7vtXVSqy/YAPOmvbU6TxUR8I/1O5afmTKkETJQP90BiuzjYs1N84IYoVt17YD\";\n        sout << \"xPWkQWH4LxwDdA51WSGCIwE/svX3BMYH/0TB8EMdL3FwVpNMgjCVW4srZP0KShXr6oJ18/RVSe8e\";\n        sout << \"Ls5HmsOL5vbvGarpKLvt0IXmveJx1Lr7h+9FAOG/n0HHD9S3Ug1JrgweszosdeIho7KDV0tGCEZR\";\n        sout << \"lLtI0p0KkoNEc6Hcm7VZyMOx6d4aN12NuVL3l6DFtd4SCFwBrIgqyDIf6ZAb4xeH2RckVs/uTBQo\";\n        sout << \"tNCZQKMaxcgc3Eee/IOjDVzFhjW4lo33FHhTrzYzvCISWREM4eDr4/ce+UZ6E00IsClZI2h2HkiO\";\n        sout << \"3k6ydBh51dHWHf5CZPp6gU218nIU7usc+XttaZpsodclSmh+LpXGroacfKyUGTB+I7lf+yzzBrmk\";\n        sout << \"Eo+WFBgemz3Rbcyem+zZaRS8YXKi4NlUX5lS3heqA2ogFwFDbQJB42FBCEMi3WVr33GELllqWSqw\";\n        sout << \"FZPBsn6RrIcIwI0/ehYLjO01/iOmI2Z+YAg/DRuxYDI/eV49z/xv0fCU2Xs3vYv8q7ZH3fjwyusW\";\n        sout << \"R7lKhO5nksDaJ1OS3bf0u237OCQYoc7dB/BkC9BHX2eo2Ou4x3pKBn5HQnldPNqA8Om/tdCgQeVx\";\n        sout << \"izQq9KJefumUdCmn4ChiVdPs7SK1DfhBnyL2xVHck9bC4fb3MuWZYL2XgwMwQ4OOOtUY+/sX8z/U\";\n        sout << \"O1EM/l936v45oXW1LJJYQtIhBf/rlqxqc/3l2YtHR7Sa40RknaaukggYYQJB2PJqXNBs3kI3FwIO\";\n        sout << \"z1mMafTy12d1ROBlqBee7AF5QJ25fCM90GgxqRwuF8yrGyXwv9pbnqmLBC6tz5DjQcYWpwm6qric\";\n        sout << \"pQu/xFI6RKtMM+tq+ETci06pbHQIcQaTvvW6iX5tEJ1iMFJaCueVEx7Q0MOgNhux+338+BEe7Gwq\";\n        sout << \"5g8xr553nO6KTDIrcTAgkRnQIL29WN3AOoFl5JWtP4uo1/cKqKpN3JcAIW9yQTjKtVOfSvZgSRxg\";\n        sout << \"Eir9UhU9SgMrM0/cdNLZed3+P8U6AYn5LxZDNWIlFzmxCBRh0SuJJ+yXtPkqApgvzso7d60FhUPa\";\n        sout << \"H0LYx+zhjx7jPhABHXhu3lY5uzsMcRnndIEOx5+N27vFUwxJC+KmgOi31g6XcPIBqwaWV5YxdVf3\";\n        sout << \"7cYOF9FYgRaCwiE0OKGADJJA6mbTYv7s4tzcPtHEyg3XK4UuT3lJjaxjsl/VLXbWW3JKKXwOuYGQ\";\n        sout << \"w7ExwYxyfm0tbXgwlK5nctw7Xg9U5CJA09jh2RXOQku+PmwbtseSP1HbWFC0pOskZatQneNQ6jd7\";\n        sout << \"kcYZ49MxSI5q5+rZuEOke5NytoWvPIeCFsKMUC9HqsRPivSrczNf51yX0fIuSTXts/ch5fakqj8f\";\n        sout << \"cA3Ln8e3wASkQo6qtG3PP2tAyEOP3qj39DAZT9/a7e5m49vjCx+ui8Kq7tj5ehGuKhrteERJ02q2\";\n        sout << \"ObOq3gYffJ4LDddCB1HQlrK1vV0ZSDctR4QZbEhD5PC0ToKsarT+FKHCDN2GngDIh7zSmEkq1YHk\";\n        sout << \"VXzD3V406Uij54UzOXv+6riqiv139xC8jo5TntvqR7S7/CNQu7D2ix+l+WMlUbFWy3PT6pL+Al2g\";\n        sout << \"ydAx24ZbJ3PQLivg44d64nA87Ii+eDsrJNIFt7jitB7w8tDfpJRsCyGWDOkA81Y6Us8udhe5KDUR\";\n        sout << \"7jekzGrKuX5VfUGAQi5+Vmk9W4d6C8U9Ma/D4wHIWkU+M0ffMVEgJjETYNMDyefi1gcCwh+OMCgC\";\n        sout << \"wbPlRBhdqaUMFlMBv7ysGeYJUQ6VoDw/TFcNtDMZV7G5mMwtsMhfJQV32hxLDhscF8nsafoeWIhU\";\n        sout << \"9aoihwKib0H9EvT2gg3KyvAIwNM/EjpninJXaaMNGbEFJ/7gEAZ2W/jAJ/eGmkLjYvv7Hh2oAkYn\";\n        sout << \"5UOk7TabvEFSsoCdeTjR4YjQS18zZcz3Ta7ffCgp2htZaAyJwVeHbBBL6KoJAlsgKi1yVtP8HXY/\";\n        sout << \"lpulZcwuaKXjQJVcHS/RcgZsaam9WxNbYh+X/CBouHSoZ2/LbtimWXb0WbQE3xk2Ntq3j7FJArKl\";\n        sout << \"gLGaykVfPzTfXFPKF6BduSPmxLCmgLgeZU2rIYBC0UXMVtEtizbU/4MF/Qo+0jjbO2BZGb/6tyea\";\n        sout << \"PRE/tXWyjGHkcx2T0ZUYTTpPtWI4MQN2LxopbcmDkZszXvxH9MlWC1jkhv2xBnddamb3jc1d4qmP\";\n        sout << \"YetgmnmQzoozyXiu95T4s6V+H6gNZVhle4+QmwxOe+zNzZaLhn9GBiwfLDGfBqc2usa2FvFWpqke\";\n        sout << \"PGE7LZ5HN+A4XFJ7NrEva9PtoPUOCM3FU9gyGdzKUyyW2ilrPX6rAil7+ZF6KDAVYOmnQQCtp5Ls\";\n        sout << \"P8t9MlqGMM5uwELErplaidbu2fNVTXvySFbZkga6AYWWV+xQfekzRYoN3LSs+Y0OuUU86RBqyOe3\";\n        sout << \"+5F9fvPztVD8Zc/c1jfY7/3lgJMtgEO/+TDa+gDQAZoalgf/SGpvv66MuiABp8LALajU0a2k1DYT\";\n        sout << \"otIdBHlVLj/JKD2tfHDi0FevTo3l2N2do9NEx2tyMGoLQwuJplvP40vHr3aII9Acuim4GEqh8cXT\";\n        sout << \"XWT5KzFF5L8f+QK27m4lgotZVF1ujXVuQRT+CHFwv5LTiwHaZ/KFgVVY3gIkjCRoP0XRARMk5oIh\";\n        sout << \"F7G9FnoQM7oV8f2b4mTKVvqMMv3uWzd4zr0Tx7GTSgL5YfcJox9my7ibHgpBpBNtej8uX6MtzHXT\";\n        sout << \"SbBoG3lDrdZ4fhMx8d9+/oACjVThf3PPa0exxvme5s6T3GaTnZt2BgzLrSknMaRZ1Rx2/kT/1ecn\";\n        sout << \"GALfb5irpfKmQPLdGJv8EIAB/Br50DqHGC7DfCtZ1BshNTwgY77mI9cus0SGrgmPRXYuuEUVhFHf\";\n        sout << \"OfrUwDNX/L8+ztdvlgJ4NnE5tUnegEz0ApOyZWywtxDodl3AZoZfBV5ODhoHNsCyZCqD/HYZXHb+\";\n        sout << \"u3ZJ2PB7wcBbxSCf3mLSo8Kknq1d87o9YAQdyyNR0s2XvQO9IakDz3HfBFugDO0LQn0ewgxAFhMs\";\n        sout << \"O6hA4M0Q9NS3X+Dr/Roy7wn51BkJhrLvh9TSO0+VCa1EBxo3mI5vM0m+Aji9HwySVBcd9L5FcNIm\";\n        sout << \"PTCkaKyAd3DsqBIoHFhdLhauODisNzUFC32TZiz6VxSwxFnNvyrRQUDidLEwWWcp8Kmm//Q4nq1f\";\n        sout << \"F2Qq30IqkLC9nObGbVSjZb+n+EwqMlE8mJxqbgkh5TQ94V+zQY1ykiRa5a98cFA5MLazMniE0JXv\";\n        sout << \"YqUtmkvvbyFjbAZ+/RPUqG3eQxyvWxBSQSC/zpbG8rJ58ZUzuPkmmXe2z3PIzFpb2BMVi7U9t8Kh\";\n        sout << \"+ywyagKP5gLgUTqOS6Sz6p30dvtDsayhngpRtVfmOoJ+Px1iw8f+3o+JEdJGnXEcecaGIzABCOST\";\n        sout << \"mEC/TQQ5ecV4yEwN/cN695Nu76+cSiHR+7UyWNSVV1A9WJhsaW6NJl/YY7dZDlMYWCtlB8kUCfWr\";\n        sout << \"4bhrudo8xW5XeM1EtmmpONd8HeMN0479Y0KqMHYCnxYz+UnC7XZBJkweyFPa6TroZoqjaIZMEyRm\";\n        sout << \"YizuyvyaX1eYGM3Q58/qti2hIgrRovGl8VYnJWJbaU41OB2CY+R/TsuQo4EcqfvAUCgNxZwwmvkG\";\n        sout << \"brIAJ5+fOVfI4Fa6swJ2PulbJBXXS+fCrjCEvBAqg2j4GxupCDk92IF6cUH0dgmx1TBFgRTNDfzf\";\n        sout << \"ENcymno2Q8HKz6uvMenEfNDAsmV+giNq1jIY6gm09kMwtDk2hs1c0hqFuno7pOrkS1RFbd8onyGC\";\n        sout << \"qoN7GtGpMk6q82mLqrEc4chaIOF5UpPSH3sRa8tbiP44q8ItnbXnMlzox3ZhZqJN6QgrNWnQa3wD\";\n        sout << \"4qp2gUxGkFE4i242i/9xzvfYu8h461f7e3Es8rW0sB5PZ+FQ8SImlpE5vh+Q1qhXoNof+I0fGGb7\";\n        sout << \"fbTZmz4ZZrhCS6KgP6HBmbohfPXCKubfc8Q+F9PCaAN31Fp9ycTV8FAfXySbQzdShgnnhnddJl/T\";\n        sout << \"Vhx2PFPythxz7GEv62hwjLuZdxZq3nCykVHZ/yTE5yoLBaYUvsVVZn9rv1YD5+oSYeJZTbjR6Hif\";\n        sout << \"t7geARjzf6oe85YZdQvODK9SMHYo/QwdcPwwnSf4Dtmvvg5XnSG41s16X0n7o7g5ZgFr+HTLwMzR\";\n        sout << \"k1Zk3offnOMpkcpEXvM8OhFvFiXoN91CoCvin7f2gX7IWrNv0mSj92fbKzQ9Qa7N5cH1pldFuDcA\";\n        sout << \"kQ9wHFmz+rrnzgEl03Br7NqKsB6koxE5YEzHkNLHmg+pTOyu+yDREbopMHBi+jTUReVS+5fKFMLY\";\n        sout << \"LEB6T96s1i+ygPVSt/4H/DQsU+0caW2dCfrm0onr04auJcU+oBYjbR3OlM+6SD9UaUjt2PtNEQ8j\";\n        sout << \"fZocgKhSxt855hYm0y5qvfBLoDaADhziF6Exuh7YM/G6ywKMi04Ab7qecuut0c2bWHXYrQPhmmCE\";\n        sout << \"NXCiCX64ZIGfsFR1pf8eCChyiA/GW+rQvxv23bl1RxbDFk2ZO9o5581NjEPjQKJ8AyE57W0bZjol\";\n        sout << \"8s4S1ZNwMF46UgZEJwCPLuqJEJvZyLBwahHwC1B7dgoDdZ4hjaJdH+jYEZusfsvV8ZC7hS5e8V6U\";\n        sout << \"rkOARJZwmYES8JJlVtfbfpCqBXZ0gTPuBKt2yYIlGTqGwGu+biiNMVt3spu2Ov6MlVoxY37UZax8\";\n        sout << \"B0Bl1cbrqIBC3LN3uWsmnR99chFqEmhi1cRQR7+3DtD9gpkt1Uo0STq0YCgbVmr4azLoJ3kcEdRa\";\n        sout << \"cfZ4LQ+7zlFTAqOhh/kBPsL51ZLQ83ipFUgz+c1f71aM0eCFharOyhIPy6YAAPHpm0FdMv9Q53V2\";\n        sout << \"p7flk/h/s2eqe6M2jbtud3bxxUdercWJvaioQZWMkNSXcP4jKaRN88np7Xc44pjUnPgO+AYc3Kl0\";\n        sout << \"2DXf19IXDjAegihkFzqvAKV4zttcsT5gi8wN3M+zdoG1TcnG5gJfXumw+Bu5giUudQ9P0mUZPc4t\";\n        sout << \"vMWo3r7ajnqeiUaN3PZaItRimu7vzun5+qOEIT5nxHNDuwKVN8ZTigvOrFRUxYkyzoUzUsOPUdla\";\n        sout << \"nE3MUbT1bj2cs6ih5jqtbqgutSNQSGupC8Xve/W8tiQcrfRPBMdtvJIp6Iz+Z7g/SXpunCoFaBSa\";\n        sout << \"mAuCHeTbUrCQ5xbQ5k8G5qIYRglHRADsWO/oM+vWtc1jEEBZ9UwLdFZxIdj1ytNnTwIZWstliRQw\";\n        sout << \"hwNPyxfJQwng2WNJFG9LPvzxxnpCwYG4Fk75wPd05j14gLMcERPyWpwYurfqeQG673BTCuBeF/DV\";\n        sout << \"zZHI0nIV9CLhSSbuo46Vkb1+FaZwwpsD5sBg4+EwKcglHUzrqiskq83hIryVcvSKRNdb2R8VDLCa\";\n        sout << \"pPblCQx811bg68OJ9UHqbw8FPcSu8M5zbahisVzxszdjmyZ7fqWR1twCBsJu+kLjNEsgC1cmC1ca\";\n        sout << \"OLyaDYs0sad92UjkYqqBQijASoQgafhSPuJ7sEoXvLXrPP9GWb1DV6S6mD1ZBRicwlo7pWb6LREQ\";\n        sout << \"HFXvVkX4/seCn3O76cNuqenVr3EtIOhKC+lKDCBbnKZ2ggyoIqgO5BIteeFcs5rz4yuQRM+lB7gT\";\n        sout << \"Nvdwa7iYLDOsYOrtBpNMD5KO95LQw6m/Okd9RKQ9yKTcV3jQFGfAlYcvXt3g7tfz7Zyj8ED/thPO\";\n        sout << \"pcrsgQE1E99T07ozCCDNRaPc+DhgHyyIEHNNxmgGUWziRBKqhsnei3nPCg123K00ifq005MgO5wF\";\n        sout << \"oHUXDMjbWBF+ELX8MWGaMh+a5OWq50xs6wPw1WhPug4vnEJa1j1rJxeGRSa3SsELXmeY2QoAX/9b\";\n        sout << \"S8HeDJq2O9OdVy8bMKdfxxvxL+Q/5m35EGdExoccnU+LcpGc1fIKqLfJn5oKPS6BlNKZnMpkyV+8\";\n        sout << \"z6VQA7zKvYP/Coj8NSmZkBJm4SoUkTBt0hZ9KEXEAAzR7Xf7BzR710lXcFdRCYWxz4KEjsu8z1e6\";\n        sout << \"NcjhBpcgvFTnowMThMLtaWotUJ4KnGU2ys5wMNh9E94+pZNkEQ8xShAEt9le6/gSLLuXpssWJIZE\";\n        sout << \"JR6PlTgQtFoSwYfx4+/iqbMVtbH7f6tBpLbnrIzQXRUY07Uw13p7kblM28k91GxRDqbu0FR3cWnI\";\n        sout << \"nTZBplbiYcOM/SlFJFfThLbgAtTO0RWgJkSr0n0n4duBka7ZzfUiMXjyAHvBAQTGkHIb+YidnC0w\";\n        sout << \"eY86YsFjo3jTqJpLYuciQLJ/ZUI1g9v681JJVICEw4CxgguvGJJNOgQDh2CEZI3AGLlbm81ftzRs\";\n        sout << \"MpKPE/RoI5kzoo43tcr3WCUImlVdrNak6K4gaNXH4J8aui6MN3kmZ0LWS0l/7Of/bVs56dEOozSm\";\n        sout << \"PcGfVLmvLExSbXU90kmknOftcUcTG6J9r1S6PR6qaF2w/G1t3wx4mdberrM9hOIMoXQhXEFShNHn\";\n        sout << \"uZ/DLE6t4Dl1pvD707gtoY6UpHpv9oV5xVVPVnq7smExwf3gQsuiHnDDGrPlz+DmLnkZ1XYCaKSf\";\n        sout << \"EQleJCCuZApUfEl9F0EjFjSDBgPoPpwQ4mhDXFjhYjYhdWmOfANCDsfXm2PUoBm4JJNI5tV6fa1+\";\n        sout << \"S+yaFaIw3TiqWvaOGIA0GyicfP4SaHodizLUVo+yfYJhycZrWqclh3OkuT2SVndIDLs+8Xc2oSBY\";\n        sout << \"uJr8P3Rm+Du02X7X3D94XvNI+tl22SU9CMMfG5E2kReYpkvtVsejWaeg7QKil8gyRLtkH1kIb4Bl\";\n        sout << \"Nu1oeg25ufTr+pyX5nqCNqeStAsIMH6ynVRecIVr0R+AF0+winGiFVVoeedIQzWc2pe1nD1F8LwD\";\n        sout << \"H1NTNdcm8ukf6AA3O4pl1uvLPIZIwC3Qk+AW3u/Xwhjq6AxEpkCGoLrUztB4Xj+uzoBpQ2ka3Lu8\";\n        sout << \"K5XooiNcanVGjWC+0/IBmB9gioabhNXit99vFEdTQCsZzlDY8D9le1IZ5lXIGgSZR5LMPOAzSaTA\";\n        sout << \"b7vXFps/tixvj3n9wxtOTAMREIVaGkJgunwSNST9lQ3tcveAJWnowLztcn861ystgFGuDgW65xgF\";\n        sout << \"Fo1EHK/Sq38jEw9frNatPCJK3eIJRih53VdvB9A+viAX9IoSK+KH70Jo25Bcrv1c+6Gr2H/Rhv4o\";\n        sout << \"quxm7d9XpPAA5dGZb20fFloxerWOvWO+QHghXZjyD81o/1hhR6ZkOiK0trPkvDLcLOfPl++YIjPP\";\n        sout << \"vI1hZ7uTmn6qlN20FCN6P5H2YVJBnhSZrKx8gFkULKgXdT5SpVSR194vK5cwoOUY0V5b4EdSAkWa\";\n        sout << \"3cQm6ibiokDAktBSDS8vpitwP0sLI5K/7QfLuXjihWXONCSf+RobFWqWPXzYW51q43+MP7xb0gbM\";\n        sout << \"39I93rn8s5XNNwVdO/IXzd/HmMHiElOr6xEHMzCUErUuQQQ59NbJ/N/iVuv2c4JZ7ppFWcz1ZQRz\";\n        sout << \"dgtOzq49kBMIxksFoFuEWuRV8LEqBbNBQkW2zFNNWpV59mqwpikzNsraFEvUPBUJKz5JNSuXVLF5\";\n        sout << \"vq+hYqVmhd3UC5RU50BWbQgMgRm1Bw98ScOPxfMMqBFPiMntTDcd2UuFptT066sbXg8slg/itSSO\";\n        sout << \"/CQmixHP0Km3Lz7K5OqVdIr8GYAeP1M3pjxZCEsaLGF8YGrPnIjMyjyFxFhyteYsgU6330hc0TGN\";\n        sout << \"LKJw1F8lbEyGt5lujwnumUFn4Wdg+gtd91ewchV+uCkT8Atrrd5gvCc2AEWxRceQHrUTuW+u6UCf\";\n        sout << \"LZvF/BC/8PJszVQsoy6dHruw4E7UwlX+TCUvP3G/wMeDf9SBsgnn/KsRr0aQmzuIJpWNNULXGyXZ\";\n        sout << \"0OHSxs3fJYq/X1FB2EgjJMXrAczU6aKHAj1AbCUbBIaJcB2umY4YAQqt4x2q/iOJDbJ+k3K28+Ry\";\n        sout << \"vW5w7JdiinwwjNpQkF5OO+4bQ+rqPzJare1PT1eBn5OxRpVlZYpn6AZIt6/La8Ir2iWtAdUu9Krm\";\n        sout << \"9F4qrhoykAlcXnI2GZi+U3I5ftBgWfDVodX8hxzyS5Soo2LFCwmG4aYayxu+RigV4YRyuXdHe3vD\";\n        sout << \"L6Vs2qmyKQ4JE+IbtJQq9jkC2PrFMwfP3nOstccqgnlGMrKMmN/UX2R0emMXsImuMGTn+rKctWJn\";\n        sout << \"sXIysVIEupHUUD4qC1RuZGvdGk/LsV7mQO4SkPJWD1JjUADB+8Cw2nkMVCxn8gFTf1JU+ovxgHl6\";\n        sout << \"nMrlYnN46eRJSFIFvZP0S0gZf18aJaxkgZt/YPxm7m8ZT6NLqLE54+st+e+sWHlP+9VeqA5u4aLh\";\n        sout << \"XEJGaJozsDZxkNfKN9lGMkacM7LZzR3lhjX1o7cjZ9D5l4m40M7DS8sbMg0/5wXn3WxlPimZFLvC\";\n        sout << \"IBLsEAoUM+oWB1xRq58SAPIAgic3jETi8vYhDR3vlN8ubWsXyTqOJKIXJ8O9Tz+aKkgLq1P/1y21\";\n        sout << \"Py1VM0VW3XRnnzs1mN1NLO0A9Ot7NMluCUEJekVYi3jrhhLRG/tGYkLUiYcUq3ozoUZjBI3nX+g3\";\n        sout << \"4d9uDIXJT7GH+ovsh1q5Rw7H9bijVF/qT2TNJH0DoI25kuplXnihc1+PAMp9XseXwA3lPZhxMVLU\";\n        sout << \"ftPlCMbdP/LUPrfoq2MaAQ9oKokaK99YSEumcKzgcNyx6wUrB7ILTO3zqFDPsxTO6pxaPgOXC+yM\";\n        sout << \"mLm+LXoEFMsByb+F8xXsrtCFDwNBR8XU92UgjMQLbvymvFE/fEeYMwOd5VOPcPeOwPs8Jwn6K1TK\";\n        sout << \"Gl/QNu8NQOgVK9rIISGbRdpmcLRW7JY4sp84q8CHBaZ+uVRBYzdFDw8VokNyWestrK06wQG7UOMa\";\n        sout << \"AZGqcttVsN0aePOk13IfTG1llEL2fczoNioOpCaVqzzUSU4wA0QBOa33h1VHOY2Py3x7PWI2QIJt\";\n        sout << \"v1IJSEmnpKgVzYjSnpt7kUlB2dYv7w3qwDeiE47NuK4ywMZAUuONlL/ZMpR3+I/EIu3VJRo0RknW\";\n        sout << \"jKkYUjOdo0FrGhQWjuISkZB8prJxAFrTDxI4aiHSnfMB0q+L2LJU8LMLLI3Ok2NIxWmdIJaFKckH\";\n        sout << \"f3JUFpn784RDpdHlIUU5EOzfqal9flGrMlz03gMrvUiq+9ZtJR44EXoUwLLdAWN+FO8a9Rrj3PUw\";\n        sout << \"E9q2KZ9M6BqLc/YdZFHlpZYOiIlE5x34OqkVqcQOmlWmPVP4bSwbXwmk6oWjruRxmaA2YQ/sLIHm\";\n        sout << \"XBZZQdMe+i8TqEjte84I5EebJRi0oiAzTFUlf89NWonCzSnzdFQPOiB6Ik6dX8o4607SkyijR81F\";\n        sout << \"5ZiusAkWNx6zksMfeZzCxnS93TqiOSmFVrbxMx6BkArmc1IWPCFu0OAQYC2af0KciOEndo00R0xf\";\n        sout << \"wQAtJyKyfM68kaHebkMhRWDwk9HEwznfn52y6evH3n7NnDttgw8PnphD4/l19wWJdZ2l4tcmY4eX\";\n        sout << \"ly2zjWCcaIsx4QMz1gEGc7lvMq0J6RbzsoH4oa6Zdu6kaCN0Fy246vkDDBaW4n/fZt+RvT9YbiqO\";\n        sout << \"fzMs1dcXd9mCOz2yB0/i+XzzG7awbdiR7bafVk+7/8H4y3qVyfGrhilzYSP7qEjF0ossijkvU1bo\";\n        sout << \"OblpwSw4RLL1npCLQDtXh5ugQGcsEesLEBq2uFpxPTSLKWgqTr3P/XL+EwNJgkWDIXdMgG0Ft52X\";\n        sout << \"bNQpevk0mqynVmh3HiVnAZ/mUaRXZG40kqcfQzxtH1gvf41S71sDXT+EOQDdwxygNV9BhOfyA4eO\";\n        sout << \"gNeFlhuCPE3cAzKDUrE3ITYl1++4JIpP3BAcsT03GlBlSL4N1nXi8YuTCliEmN3TRF6FLJ5DkSN6\";\n        sout << \"tCk/xGsBkaZlQXjj2P4FV/BdS//Uqh6EBRnRMoRH7LgLl0QJxJrj9RxDdRwW91fNOAJjg53IIBX/\";\n        sout << \"XCsZr09+jke+Ci0r1NWHRhmF6qNY27CVKs3Wub6dYS/GifyrN++qpK4aTOLkkXQv5v6Zhs48qFAZ\";\n        sout << \"4XORp6I1s7vCQ/yU6R4UeBNoRAT4naUFGc3gvmszzFb0Cp+li0RM9wgW25miE5Y1PMpne0nBvV8a\";\n        sout << \"k1RYRJA1ZyOEQbmFxLMqanwITgwxZT7tK+nSITSmHAo7/m9IaopgYOumkPGdy/KsrjkR2gTq0XxL\";\n        sout << \"OSjhTS/sOrZhSV0HJ4pBgjZMIAlEwv6k9XsefXyREo+rudBS9CiXW6TzIViAWCMc/hQo5zo5tUeA\";\n        sout << \"vmTrWxkRgUmdsj6FGS21aQFPADj3oPrAXsTiH1ZcwpyzJrT42+4P/SLFw/h0NBYRozI01AVVaxQ8\";\n        sout << \"sbJ8VUFliiZnB++Mh46aAF1PzomK1NiHC7n+llPAdEqpqiWqVH5YK7CpKdmCPnTUuOb4a7A2Ylow\";\n        sout << \"rodSKCOX4VHwxzARShJxnQz+FIfVIzpiCFs9ZJKM6x89ybXTKVRrmwTbTAXRbihUKa9d6t1vmoDP\";\n        sout << \"07z8WyFDoeWoSmK4XZfegZeZMIXF3hrDPCYcZEluxujpPG3ZPPw+/pGjBOx3/QFJTQdeHBz/PQ/G\";\n        sout << \"wM7DkD3NM3fVApST0LbPQFKxlEXx9tCL3GBul7YnnUmF+N3OIs8vDoJQqNqVi5ZQnGt2uFLOYRo/\";\n        sout << \"67XsBQv/ZwYNC88VlJykWEbbVDN3rY6i1JLr/9WRygS6aqF2JJBTgLwXpjfvaq7Ygttm3WiT/dxj\";\n        sout << \"QtLg9L/y3Q+LoLOKZ5syIdk1+oQhYnSqUgTNEuw4dcTXj3v2lHm5oxzst2dtierbluemr//Bnclq\";\n        sout << \"8FdWTT2JC9N/YI+CZi6K1lz1Bq2yblxL+BC9UE3rtsq81Rm8kJxSIVQ9HsS2ligaxnEfCIPNvMhV\";\n        sout << \"orLVKxoWuOfhJt++IepP8kap2JZtLdmdZSr9/6suSkInlANS9SkwaNWB+EiTUm5cfu7s90V+m4J2\";\n        sout << \"SEiAMESJKLywmeQi/JcV+8lEiThyYTxhm5huK2dUGPWnzKK0HsdOuqRs0RnHn8SQIgLndjyTzcV9\";\n        sout << \"2mpVtjcwCRKVBFiPdyeqyVI1j7srk8WrRc0GozuUkSBMVk5KHQa3/qZqiV1w9KN7eMRaYiT46bP4\";\n        sout << \"2dpdvqNrms7/qmyv0q+Bxp7JYv8bYqlQPaXgHxS78I7HqFsLvP4kZVWxmhCXIoIObX304w3KRWH3\";\n        sout << \"WlQEj/llet0DPOhF6EPfcuMeSvH1UhucSS2pnYwo/P0BvMYvj6gcbjTowWMk3vmjiZV6a1xq0Nm3\";\n        sout << \"sgrrS/RqYJeGPM6THw80LulT4e0aflcyFN3QQ+C01vGHjpaw0OwIW/iWAMQolVwcZznJPq+6Aya/\";\n        sout << \"aYbiphirZC6fZtUMIXiKRrUxQDyfgI0y8XzJgf28AxgdyCP9Dashm9uelYMGU0Jglf/iwa2K1pkL\";\n        sout << \"FTS7zfGJmz66x2+7agbLuCHd7AQhZb/rfOwauykZXpCE9ooLMLgW+BlKpqgVynLrt+b0I3KqQZy9\";\n        sout << \"KkFxFwC9cumQJPtKGKUigDLV6+orLNwgtVmNal9RFHppuj95RWG3XgwNLLGoE+K5TiLhLY1na4AF\";\n        sout << \"1NXsHL3pFjM2VHEU6cOqVLqhEWwGhrmBoxIGrbmT//lUiGwSLcmDHCvv3Qig43HbRmuQWW90qFzc\";\n        sout << \"Sp7atxofyP8SqmW2aRw2SRH/nvCTTpKw4s9bhDEWCukZKo+bpfp1ti0P4DzSiUxTy9uSjWs3+7Cf\";\n        sout << \"nWsTsoUxU+YdC6rDJYq2TAcn3Zl6YBU9XZl3YLckRqpUGUQ0IkF0Fc0bb5kQCJH8h9qc0Olnqa6s\";\n        sout << \"sjHyjTwkzZWFmuvJPfxEZzsZZFu9qWdk/Pzx/46e3J7/VaQhtyYidoCdV+wtN9IOuxnbyIV0A+vx\";\n        sout << \"ZAjS2f7y5aPxzc2XAmlsmNLBqrRfMm9dvxN+gYVD3UcWgzTVxfIXRyZqmdAvuHoTq7BV8FYPMIqb\";\n        sout << \"SKpCcdEztosRjzsCxioB0JPCGxMhHgPU4FCNBy24fa5RIz3rZkR7xFdTNw4LTkJ15BRKMsBxHaiS\";\n        sout << \"E30FSLCvFvBVlUITI7aOrvc8+2IgX5cXLxHQeqaSTyKm76ioORshYyRkp8K1Ao0hZXCW8rks9fxm\";\n        sout << \"FeRen1ureYGmkoKJUWq92iAPwNsFvvxTm4IprFoUDn4s56Ung85NTvcEJEyc4yVyevqb7hh4axAu\";\n        sout << \"h9N2uFPhx9YPLbOHA9m84PWgt/IPOfdwhlylIL50MZ9qitPPG02an2gjybEvicqckLYZt4cY1Utu\";\n        sout << \"pslZJgCrFZ7ITUBixaxhkuXW1wxwkF8RGosHdfB5zycnXkvXhdV41+QDvhZ1tR2E10jwqjVR/7W+\";\n        sout << \"suB35kUFqrlvWs/bBTQHwwPdNmGiNFi+uq6hIBQCm/J0MbCaYcPPfhtO3LIsd2KeiTz5oV8AqBVu\";\n        sout << \"NPQav6McdWJjg6dBQw4G+raxkUf9Qf9TPQspS2Ll/Kmt8WwbqiRHutPOaxaBBeE8Igx6BT5kIASc\";\n        sout << \"OsAnqIzudE0cclrkxN4aeTglqmwwq/eeZUSOzkv6Ge0xtpYDgqfGbe53fxtYvItYYExMgy5HdojY\";\n        sout << \"1zDaNXsfHTebUUjPnsXitzIQQpRobTCe5ttWhfeeXOvE+MPLRt19KxSrFKHaRlQtjYsmxdg78zc3\";\n        sout << \"8ceNlnoQbh/puSKv+QWnnELfDnmgVZnU7lIKs2xM2B+pNy4Q2YX1wmIqlC53rsTzU/Ik7Db7Z59s\";\n        sout << \"i5QWZ0R1ll6rdkCsUCTkK8aqsF+mSvWNbMd269Nch0fSx1D1q2NN/4lHDDoOX1JjLPMxVNbdxLMt\";\n        sout << \"gP8gpiQrFJWZRmTgYBW+biZPtiKgOztsDrZ+eolNWpsGnLTK9Xe11lZrS2fPton4L4jnr+R5AnHk\";\n        sout << \"F6tBVhSBRHtZdF/xNcCsSOKvTOZJCtftMO6XaKMfsI/yexeLz41D5qfMVSBHY4bIgL3Jgh952tlH\";\n        sout << \"2blbe7lcZxZN2XkUXXaVaX60XDTLgZUbGzqJo0+x/TJIAuCAlGF1XeF52jTY7X1veE63l423NPsf\";\n        sout << \"kCmiRcepJT1ihXQDd/VU37tJfeGZrN8FjJzx53PVp70r7eLJMedMbBUJBYmOofO2F+OU4Rfyab3Q\";\n        sout << \"Wy1ngiJXrfjF1DVqmKNfY79SQWWjlzST97ldjTICsyQdHWn8j+Bof6sL5k/3d/cT/sohhSSl0Bux\";\n        sout << \"GssAFa27VYsJYMjnriFZD13ZYmjuesSXyQ+EkUsHn56MB2xEwLRVEhq8ygDP2eO82PnsIXh+uVFe\";\n        sout << \"0ZQ+eGSiGZtqeL1aoePOA51s2eE4DxGBHWdSNr/7Nc43oUU0P7sV2lut9VmhgDleV+Du8IaZUMIb\";\n        sout << \"2MS/TkvMW5S/ebAoXaL68zmsU32tk3C0FG5oxbdZD1tcZ4yHNJ38HPSx39uOfRG+FrmDqomfs3k9\";\n        sout << \"pu6KaH/Be6Urzd7mr4EvxaXHz58hsJGVH31tOdo1jhg7i+6lCJAuJX01FWfnClLz0mSJnIrcPge4\";\n        sout << \"zQrhghg31+fLZw4FtNmiJJcU/hJPGhUZ5LDJWFHUi04u3+dfP1pYR4e+CEOyvlK2YXx8CHcvjWJ2\";\n        sout << \"kCW8TMN9I5arBUTXdFfOg/v/EH4cw54bmTgzjpn10HlKqfJn/mJPPbBGCCS+pdGmNIzItVME9IES\";\n        sout << \"Gco5a+DT/a/TThfkRVKhJShe7ccCC6uQPdU10P+DV2KPxOfKvar2ww3I+VZ3FKxhC0AcMZBbN0V/\";\n        sout << \"0tTOJVH4GxjH84c9Jr6niQJ/2w4G6tuTcJ2RLb+HnzfingM7J9VOr9C3IfG0jndHCww96Exjjk0j\";\n        sout << \"bE+Aq4H39i5pH3jEvdMspm1B3VY7EN2s+fC5jpmZpA5kRb6Vj+CYCbyEYNicyAJqCHdJLrtHDiGN\";\n        sout << \"fIhpfrkpc4+g5xHHel+nnJKgduqzs5eecM68vOtBTdmLa/nxUz/VBywqWNmmN0v1/g0Jlw3U+IGb\";\n        sout << \"bZOvv2Kg0FO5rJmnRIUsokPkcVxnfz9iyf+l1d2QIBmeR+YeNtLS3XUfIjHvHwSrZ3lJdfXNnnwr\";\n        sout << \"zZcKmHHNAoRLIhM/0ZYQXMbOvfEqUBZ0GCzMdwiEuNwVPtbDkgmcWjYR6ew4YjRZR9alIas8o+qF\";\n        sout << \"GkL+PT4LEHfASjQPnCZIhUISIpwzuf7Ii1I2Fk/v8jBbL47msvPsQcVH8JiFiWBGCBfSB8IfSSw8\";\n        sout << \"sgc4bo2hwHMIES5W+rXXoQMSkGFP6tUfd4GvS+8t60UyDUePQbBGj1lt3ETsinD0btygvMOqDhD6\";\n        sout << \"H+E5gRWBXOV6QrXtQSPG4ZSPlDvATmDdgLCBtQBBMTLMg36Kvia0W+Yyu0bFtFEJre9N/bmyyvRR\";\n        sout << \"P4tHn8uOTi3ry5PT2PQiJ9c9utByvU3ydcBhoIlcdQz0f1Rf8y0eyKj6qt1/OhnzVXuLrkqXLylC\";\n        sout << \"sthAWqyIavUltofLnsAP1uMHZ0pHeX6R1lwpIROxtRH6p/0+//OK4lIZx+7D8aMPIaefQAB6Cf3C\";\n        sout << \"jKnvyCpR3QEh9JLv22OghKwswHT50P/+z2XbyoQsRySXNTUbTsGJuYBazgG10fe6YHQOTrUDUp24\";\n        sout << \"6PS/wEco60z1OF49dVlYak9zGA6kTRndkjWDu49NFhJRY8sBd7TVxeiU34NVyjIDLrLlx7DcuZ6P\";\n        sout << \"1/XcA8czU9m2n6VDgkkAB6eaeL0XhB6XZfOrg9lY6R+xjVYo50Fg9A8AGen5T6+m0PeUr20e3WV1\";\n        sout << \"H4KANYIvY6+zN+Fe6K37VaO+CbDZfvFMzifvzTQWQ3kDDTWX/BLfFgLGZ6QBWrTwF7MNiQ6fCpG9\";\n        sout << \"BAYy9V+QWy4Iz9lqnp19J4Q+cqlIUDBp8b8vBNyrOjjLjAC7ezFUujvB/7RrKtnbaYmS8vYF1f9+\";\n        sout << \"mGqA78owo1zfad8DsvGEnr5J5mC8d10rXhVXXb/udkiU5iEhYPnSxRy62tgLbKHJOvW+R28r7lpc\";\n        sout << \"yDK1++NYKRpDIHYMuaZ13oDNdIoQD+d42Su0NsP0wECAoMmQKkWUaJyYUyFqzmQ2FJmvl6hDSbrs\";\n        sout << \"lDipexBL2U3slCAJbX/PyvE0KrBPBe+vT/w1Z5s2GBvSoGwmFlN/oa5I4TfcTA5W4ie1rBHUKqPr\";\n        sout << \"az/4un38eXTaF0Gfiw86pwlgJXWr+D9qvXQApo6KmaJhjKo+4/MaPw+iEQrU3IM44eaqq9exmiNF\";\n        sout << \"/SgBv76gC8hXFrucFFp5znYrl6ISQUedvk81jnI7ce0Up1jYsh8fpfp+0V54IUNKqxT9YlgfIkbG\";\n        sout << \"THuQQ3p2F3gLaflJWfZEo/lPtKc6RqVadizBP/oxl7q+zTriiyK1JWiJojr97xQcNpj5j1QF6uqK\";\n        sout << \"+7NQgfVevfP9FGVKOlIgvsqc9fnqWd7pzWKEt+kfjbpMGpr0XFERPld0+EqLts1kAj/ejnMymrXY\";\n        sout << \"LF9QJotJBy/QvCuoaxdptGBtrC+qJIuoYKTNTwW4A+kaf3RrNr4ohuLBcH8RRpHFU+3fEDW/kOx0\";\n        sout << \"fdRlEUJoxdfK4Za4moLfsmI8pfl5rBvlh9oumT0sgvPg1P3zp70UXJI0tSHisCb/uK+Hggdk5AJC\";\n        sout << \"gC3NM9uf3AubM+CW8rJXM6qz+xwOeTuMawJTGTrSg6bB0jREYOXfvwZ7oNgiSdqe4+s7tIhd21Hd\";\n        sout << \"A4cJw2aRWk0ft7jp9O/6A8II+hJoxReOnEFn54/kdM5LFasSjd/wwxsdtGevYixIItCTJ36K48dU\";\n        sout << \"nndygDo7qFWaryImEjgErq5NT9VUfg/VdIhCfAro6xE/1C5mMZ083LOjvTdxdRO2qtgKYCvL3HWO\";\n        sout << \"Q0k2/WqcaAKyh19cHsnoVKd1gXCummMSRahTGpmK82fAE2vP7MThuNel1CGti+nKVvzu7Yf3i9eJ\";\n        sout << \"rUapLrviTwh0cQzVAWHXxgE1PB5O1Hj1/hxwRVStuKNsPjZKFmNu+j02TT98hpYCFQ3F2hE/jsIT\";\n        sout << \"VN7hr7k16mXUqWbCzNWO/xo86NyCS/8HYFXMomE9KRLlP1cw1KrmBltivEnesHGCi9sAyHnE9bcX\";\n        sout << \"mWXL/tg8wP96Eh10KeJKzx80xfSPz929wa2Z+fAfjHqVgroE6AJQNKengtaLjTo9vBo2E4mFbs+O\";\n        sout << \"AUy5hDVB7Mm/koguhT3+BxefAXoUbaUkNlIewCbDUlLIT2o7ZLYhoR1WTBv5K0eQIt1wTFytuCVq\";\n        sout << \"Ldoni/6ad1IzqamnGBam4hFQlbQgpezUea29Idj4dhUqTmksk0fV6sXYaT7P9ELB+W/OnF6IY/d3\";\n        sout << \"6TUUvnSPfyfOHHxts3HnXQjDqrRhPeJown/p6tzdtytVCLeUtXu2o1SgfGJrs9uAtT5+3mt/NjFb\";\n        sout << \"Z+VX86HZQ0A5XgYWiBDvd/Lu+ptgu5kMX/QAzBZp4Ubxo/sF57ZuA3TJMx3CjUFgNBwHgdWsiMHf\";\n        sout << \"X+sBqB17McUR4Ar0OVoRewmYlRL/J9vN3ZJ/P24Ctp/7Y2Ozk6vJZBIKnTvcapys6mah6rzYurq1\";\n        sout << \"vQ2xWL0+hq2nsbkZ6bMl0ummFaCrPrMmBLGAQTa0Qa6QqO8sCtepBHRzJdCH8InI/jRBJKrGM2jt\";\n        sout << \"s/bM1qvX3U8jLY+vGwt8URt+H9VrF13rKxlgTJmu15oC0duyGyc0ejeDsopX4NkOQ6xScBsPAMV3\";\n        sout << \"ObV53ImrQQxdypGM8UWByxISLsLxMDDB49DhgBvOqfJCJ62M/m3zZNV7PzUkUcI3iB8QDpovj4Iz\";\n        sout << \"CmTXnRgtsARcRc977luV5QiiofiyUOVQFbBY7obGei9EnfRspuXIwDsShcRIEHEz49K5SdToZ3Ky\";\n        sout << \"XLZUEdbMsZDXWjmE1A+hN8G1oAh+fkFoXav5S1xvmYqr28vAff3UhxXH1ZKVGM0ePGoaE+AgPIuC\";\n        sout << \"NawQwcyWFoPqLjaWg9bgf1K+gbhxH4ot5ehVVMb5YiAbMrIp03ONvVFLGWzI3tzFMMTOemMgM7UI\";\n        sout << \"1T5rYrWbm0q0IBIhEpRCpR1Smtgf3wK4pUX5y+1+xGk3bIl+Sk2Niyl0DmrmqZlenbbts1n/hDyX\";\n        sout << \"ZS+148JBO7FJvG6L/oD7LaIzjBAPMWB2TLARdbc/ShtzxMY8l58fxDoOs8gZXcpLPHpdgEALIJWi\";\n        sout << \"GHRB0U1osylCUfS64GUzB/mVA4677H/n31R1WaghcDrZRgZs/aeyy8DIO8fprsM8MwamVSDoXU4y\";\n        sout << \"YNyDupAJA6GKeYC98bCgZ64TdmXX3pDp++8TOyDJ0VDNrp6LfdqOaMNZBoG4G8KduFcUssKyGs8D\";\n        sout << \"mGZ49omOt6rvrlZpGgBxi6afE/7tg4ac2hHd368gOLuPyLY8UKBEqhRGG4POlbg+v4AEegzLQdmx\";\n        sout << \"GrtxnwcojpDFU3k+HPD7wQwv6dSpzCGJy3d0682y/x3muJLZ/bQaZUV5yj2SCfgSIaIZcmVW6YFE\";\n        sout << \"dB6GXs8kxAZgfLLPT49+5jIL2XXkcmK/LK4dY3ah3zGKd/Gl+NUxbZmgvOzG2LFmPvp1Mr73WZ4L\";\n        sout << \"q/K4XId/B35/LLnT1bboTQ0L4BaJR0r8uURHEUO2fo9HtByhvRmaDXy/+EAxT01G0sjy4Nhwd0oj\";\n        sout << \"AZrryg3KSdCTwUoi/CMme7l7udmRxUMSg+L6+pTXgONqyBNDwkksQ5aw5YP0q02WH8pd4kVHHLkc\";\n        sout << \"oVv3diXYApXi3VBhtVmpyjAm9xy2SPL/iaoitL7/0d9nIlPymzGh3Ko+ghijUD0Ft1CJHr2pn4QI\";\n        sout << \"zWL0rF8DTAP2TcD1dl/I1VNW6e+GLtWgI5+/iDElGyrELfamWyu63q14Yp/Uk/PrMTsxRxZBzZ6j\";\n        sout << \"whO3UnC70N0EWPc5M1q2HdWuUadl9tbXFj4eX5F2OABfnMgQHDo9F+pux+TxpCZcNFWHsd3frjF4\";\n        sout << \"HEg6qkqxyaqgZLUM7e90wLxYi2/XV59BWFuZC6kVAkBCNWMZm+jisGYdf+kLWVrbZ091mYTllIpt\";\n        sout << \"qP2NaF948T+/rfiT1TbhmAGwj3NI4dd3azqqJuobPSjj9pdK9JEKhyC2QlkZ4HgRqyKTH0xPA1Bo\";\n        sout << \"mBCwzYhubIB2Ro/oxS152TwESUPDvZXTsDbmJXGsdCrrmfQy4NCXNQEDQrjrRY40qXKi9Cxr7wjn\";\n        sout << \"W6NrSshxpsV1NwlSGT1Omn7RUMTpe1JaKLINxTUJCCPOuNCAgbkmPfB2L/vzOq/PJ3/EGbolcvCc\";\n        sout << \"b9zvJpUeKfNOK9oqBZ2dZQqgGAD70uTPitKu0/5pA8I+14sLkIfVpVAiJI/54Jl7cz9lhMQ/X6oh\";\n        sout << \"ILDtsAHQjcDXP9BCfByca38PJy1k56vOjfg6Tuc+0hPcDkhWobXqi5xhJaS8WftAOhqwiYZKsimZ\";\n        sout << \"yFuYCz0EeT8EGFa4APSgjPSmsV7jCpOWoY0RtUYvhNMLSmFuwOVOiUHLrlsb8gFXQ9nmw/K8hxHc\";\n        sout << \"9kP96Rx3f+y79BSrhUcQyUrCSV50Dkvq07wfcAEvz2dzSKvz6zTDIKUFxfz6ejsAvrcx/7UgP0i+\";\n        sout << \"1rtTnLXH/Qy6rlJAkxXknkQQ6YG8egWa0mX9Wh7RxpTIBHPaUU8gnIxo5/RZEPOqrF9DtYoJMOkB\";\n        sout << \"T6davyvC84bSPrk5QW0DMqzZtHDDuzqiRYZt9PfEvURu7iI0IJxcVWYQcXJL/ZCp2GVS8689pmYU\";\n        sout << \"zIse1tFwwd64kJJfyBqN/vW9A4aI/PutNu14PwgPVr+NeH8wQk1L6MhOvcnJwYDWm504takuedAe\";\n        sout << \"hB3lePRnMEBawImStuD73hcZV1KzTKFvu+ebNR8414Wj6gVJYfPvHFv333u0ROqJ4/Mhb8occomU\";\n        sout << \"iedo9jM8ZJCMNbPF2Vxxgg0ahEwTKyq49Qht9fhwUTm6pMQKUXOWU/rD3x2BwrKQ7NZoOUqTlfGI\";\n        sout << \"/czGxGeP9PqmLcleyMhHuC4GdlvI+ulMTlngO760teQeuF7EYqbwwuwqtSV3E/pbXm15OFGSr+Jo\";\n        sout << \"FrOdb5/WWAQ7OZPwdgYiWxbLELUCjNu22PoVAN+PlAYShXG/qR2lO6I8Mh6TXZ2Oo1tP68lGp83c\";\n        sout << \"zpgoFpNuaQzLCWIjC4ka5v5k+Y06crZnzCzxaPsanjgOtAlQ+BOykH38ErkDlM4M2SGs8IAZXW0R\";\n        sout << \"zHgZygNho43FDRQHPiYxFtGV2ktVmtGNTG9YtWQsBcnd/T8xtUP8DI3tR3nCg7Q9esbsZOgbzCIL\";\n        sout << \"bbtn92I2iiTkjuPSuuYoWPzVS+hi4dB/BQWeHtnwdNAmqU8IAJki4jNkjh/6NfTgVepkT2Nc58pT\";\n        sout << \"V2DzfqFrhOW+whXsJIFkMSW0dXp5TCuJBbXTIiChMjXI3c+Dzes1/6CF7l2lFA9Ol+AiPwjPvhhQ\";\n        sout << \"/9WCwWzfsmp3+w+9nLLt5CtWRePIB4LC4nugM985fxf10qYES/K0vxKR1W/Ox90s3D4aG57SHpsX\";\n        sout << \"8frJ3HU/ouV73ZOtCg/lOfdocNCQa8KsoKhy0T7tDnWoKJvk0tT0RhFWltVQHV+sVteGXOImaxcZ\";\n        sout << \"MXDU6mnRzp5PEkQnNnBDeynPvs0vWfVSYpzQnO1tyIM2YYwfyf4vdn82ikk/Bq7onvdohQH02/jU\";\n        sout << \"VQjCfYj7X93of1bK2ja4vdEtcFpH34YTnSyZ7Rc+Np8BjO915a5XsUagea3ZHQbC9bWM75QKp9f3\";\n        sout << \"HuDpEn4tNg6RTcwWf8s2G2vZCfIDkH0geal//39BsVC9LqIyEF6urWV10NerZXv8fumNmX/5JraN\";\n        sout << \"aZ4GGdnhHPnryfHkHG62ESpmUCBO+85oDXrZcI1riSFKCYP1eBn/KCWkjMf0oV/pYljo1KrZgQay\";\n        sout << \"6vXXMdX3Ur6UUBO8iFht7ETaE5BeQ+3CZQEe3tdz1Z87V8rI1Qe0Mkq40CwniIxvk86JigLkt1Yo\";\n        sout << \"iQBWhcgJXCdVPSB1XpOdtZjgMPQNJqJtcbu3SDHsWQ3TWA6BDtVbHH7xY7CPVN2si2K8B8/Czxmq\";\n        sout << \"xptTLBIMfU0xaBZTXLSmRKNTEj9D0H+PwHvzPper0tQU5NEs0tZ5h6FZER1mgFzEmbZ6PUVgc79f\";\n        sout << \"ZnMaLmKpirOVc7HwFfLuwxAlvZRWtykLc8AvkZAp+bYGHERo3uHgdIKkeW82HQUKsUMN1VglX/YJ\";\n        sout << \"gT3Htmy3dEuYGNh+OKulcvAoRvLmTMYgACr/0ZNWoYjqAeilI7ZoqBWHYswLrvefHlIz6WAAHwKC\";\n        sout << \"xkbk1H0uWe9IRcf0DgEvWkXSrWRFHSS7uTePFxtLM7OQW/GmGfS3wt4/YLomS1enK1L4tH8fEPoL\";\n        sout << \"ZeZgjNYiMg4gQLm0+FyseqNjiUnQPkoFQg1jztPOZSxxZToCSdeUIawgr/3KKQ5+d2w3LEOQNAy+\";\n        sout << \"Vf+o5CjsfXpYJ8HVxpLsEC3xwVEzhpeY/04yUW2ygAfZqbsLARAAWtW2GcPN77MnGAmm46PeCSe/\";\n        sout << \"2QS7gM0ygtJewBCaxSfij+Xg4HQhXiKDGuwDYqUDmLInHskRXyVuuojyCbmuNmtyj+Uh+HsdFeOU\";\n        sout << \"fqTBHfEQzzAFVyORf14oEhGBwDuvMzLjciKSfLu6KcMCFo0TGgW3Niu7kDdbxOxg6Kwa4wiaWWk5\";\n        sout << \"mJpG6uhNFaDqpfVLY5D/o0Hn/QfMZwR/MzmiFjstPVEd9ZzuRvKKSDOM9Ult2lTU6z6Ci2b4unu/\";\n        sout << \"qfLIE8CjUAZrZnEFbC/KWx9I9zuUuoXS8elD9aG4if80uCyJ/tT4MXjx8iRsbvZ9B2MoFdO9gAUn\";\n        sout << \"qafo/IYR+5BOderTedEwe6FanPX4opAcpmpXM/cbD51QA9LCLyNtSoSPlwji/ZtYA97UUV6k5c47\";\n        sout << \"TNFB+QtUaW7/DpPZbxsU92jE19ztQ8VV5Ylm8v9RdvZDQ6T37KVEYu/z2bHX5L0r/bkEtQQ3gf/e\";\n        sout << \"TRfpy9j5f1lVMpN/UccOtsZfQpW1WvDcbAbOjcuPuuwNOudfzztYg8vjJNn0pMATK1+p4adLcxJ6\";\n        sout << \"uCh+zVgxAS9W+z/t5X3YTMnFDULRXqs8lsN6H/1t+gVBp1uG04BBDO8YMXZsUB8dLyb5BHbkjPiU\";\n        sout << \"c/zt703lv2U6So90+H+6hlnWDBvfLHI1W1C/RkelOCD8WVZ0rk/sgI9UYf+jk/SkIkZgbtVTB5S5\";\n        sout << \"gd5IXkexjN/kP372AvWgX1t+uKVmKRCrYlG8TZzDrjRD4BjS1M72OGwm3MDT6GPRcaGc+jtSGAxd\";\n        sout << \"eW+6BPofMujBNOBsrxKejRcLsddfOrGTBqP0Wc8B3cNOjEg/ITJ3LOu3FFA5TyLh0BvOEkuiD7Yf\";\n        sout << \"SpB8L9jDYG9nCcgFC19CA0Ji/Oc+aYFDMiDM4be+gG9QUdAxk7Yg13HdJirKRiOvJkf++ayrJBbZ\";\n        sout << \"xs8NEcd6lN3XoogW4gChg9mwlUNehzzjIl56wG01T+29FhD8Z8ebywHq0xEbP5aVGrEzwj4HF7kz\";\n        sout << \"erUrxlRZbmRgleNhldZDjqUpMcHyJzF+OxZ7W2AfpjJf5FaF3E4Rb9IG6vBtPhZbk3X41VpKx5Ih\";\n        sout << \"DedeX1BVHzRYAPt6JchdpOa+F0Y4Evke5XR97NecmGoYXrSkLrArSXDu2qqeQVx6XJ2Qginw4711\";\n        sout << \"fJwfVb8QMMRouBWEYz7k2LflgRG3c3XL1KP8npyz3yNw+6b3/K5JSq4hRFzXfsIWoLArSWgfboMa\";\n        sout << \"w/wIVdPgwPnUh3bfYKEXsQSenrazuqhPosJRMsX8qdZ1HB9PBwMKMHqDessyUX8u4kFMZwo1egfw\";\n        sout << \"7x8xkykzBeY8Iy0y6uOVpowXPgEPg9PZnquqW/r7qQAiqgoW/4oMU8DZtcfT9fTEN8BI0YPPNPFY\";\n        sout << \"1N02ocPS4kd5V8/bcTWkYmtCWIqlDtyPCEcEoBQbhneOdw6EmOmTqJVArAwydyN8TLsJq5A4WOf5\";\n        sout << \"wWO407yhoizBhRjGlqsp+LW9DlG4LHKLWyKCXb+iozkdD8Bh9RX3iYz4RWNSm552G1u8YQtZkeN6\";\n        sout << \"ISOxeylEI9OFkxvueA6u7juBnwpmt3sjcvCOLbbwwpc0JyWfAhiRdBfC7aXLjHm0NcwiULATnoJ8\";\n        sout << \"AMfNt/qzosP8LYQCvRYwJYShbskncZCd5amEmN4eStNaebKyFX++T+XC9EiG9FysF2VZdRf3OhzG\";\n        sout << \"dDBtLbkdALyBU3A6GhCueeZ4c5vEsHC8RMH5iJtYHXwLc0OWzUPC/DVlhVi82avRChrbJQ55qHza\";\n        sout << \"DBnr3I00eUsfGxijrqaQ4bfLLv6S5e4jP6C6waRbf4RY/Q6kTb/9oECBuXgayar3WIvLp9txdLEi\";\n        sout << \"dc0sokRgOMXjrheq/gZ+WHBm88SLRpecDwc4D0kGo7UQC/PIajFQ6b+rTJBKwYxeaaVpA2gaakqR\";\n        sout << \"BeQurXrdpAW7hWwBHjzWtxG/qKwO/w1+x/zAICr9N2/1Bex8yhnnIEcltD2qN5ykzqBzrKrbAzaT\";\n        sout << \"+6+ZV4ZTvaeeR9ELOBDYzkkUF6cgTWAZnwT0dKySp2C6FSPkpNseYrrgwg4Ddp49pN7ehwCE6V99\";\n        sout << \"ebgMYWGWqJkBJ7ID8NSMDFjOTvuWzz08QpaygfGSGgipHcuEKdHEe+waRMOMZSPVD7uDdV67805a\";\n        sout << \"67OTB9j4JiA9zhyXqx3STc/ICLFkSjZbl0VC5XAyVSrC0ssNFCVLp7OQ1REJYnj2bCPMpZCX7VHF\";\n        sout << \"RY8HRrA7V+X0HGBVPAcCrBn47lFvImWGBWGAWFO+TltuyKwvuiBOU1VfG1mxFCJJj/+dv7jIdDp5\";\n        sout << \"+VEE6pCWOJxzveqnJ31PvwrlGjxY8WondS64rNe2qnQ+grQCp69T4vHe7zuYfta+QyjtQxHiXSBV\";\n        sout << \"Zyu+R1M648V5jmGpQUT1bek5FLy5LoDDjkHITygysq4NzrytxR7Ncmgns3tdB9LV5zcHBG2I2gzc\";\n        sout << \"lHRBaE17Z3Lo6zdwTlGpfumcYid4Rlj7OgZIZTz3ogfaWU3OblHZ7Kqs3GGvctnHnaEtK9oqQQFP\";\n        sout << \"zEvAG1nL5qjUKB70e9YgDiUYKAC7xyWVoB0BCIjIXdJh8JlwXMRQDQwEwAeV8FAYKQffZB/2JEeR\";\n        sout << \"NnlaRxoQVuiNom9Dh7AokAEHuitMI+KD0n/bijH01pr9cxGoz9uimYQwc13mw+ZS0GsWeeEqYSWV\";\n        sout << \"kUsJVrisNxDeJMKW0hQuZmNTkjve2aX70+V9ouwgMlYQusDxVGugu0HNUQBgWbnE7CW9fh8GQV6d\";\n        sout << \"42/8i28kLjJ5wiiReXFbXDQ1XBz2lwyXXm4ITq5e3tqn/BDX5S6yQg5yKGl+2pISvDvZipWVNj0i\";\n        sout << \"vNeVWDITOZw8OAceKLZJ0WDSaV5W+F2Io89LI4mdzDdvOk/Ct9OpxFAacJ+H3Kx2S6b70hcdrx2u\";\n        sout << \"0Z+LB5tDRmxItNYMfz7br1fZKyAO8hUxeWN3EF6v5Kh8t0R7ZZaCEJgt19e/3sFnR8ssvG3yrdXG\";\n        sout << \"RT6qvp2JAUyP53dm4Z8+6e/k7YA7WR1sv7d7omc56Q3LXhpvmJJPbAJ/qBXHog0pO1ypN8szYVUo\";\n        sout << \"MbTlTlz0TECPbqdThQFSps4oXTeCcR+5fj7SR2K3FVjbxHfWhrUfw35Nh7nPfzyDHwfmX+CMdwoj\";\n        sout << \"oosswTADZSwvEh46PBffUydxEG7X70qyn8VhwtZGHTFNTjjncB9AXeEpYpqxo9ZzOXcCM4JwI+jC\";\n        sout << \"eDsx+HOZdie9keAE27XUcvKhNYv+G5Hq3rAVNe2GRgDdt47Ysz9vECFOBxO4RVAl0jr3TmfKoqmR\";\n        sout << \"3WBN07KGMf2q1osu+RZ0I2wAQBwQOFG4c7IjxqEh1tlBsFUQBE207K8zhrYyURXulKfdHL+iWMFs\";\n        sout << \"LxDsVCo3kG1L1WRBXynobD9DGvbx3EJf8eIgrKuHSEF46SHUWs6HjACerAjryYxvgHUoUez5cD88\";\n        sout << \"TcQwFBS662AAs2ZAp/uA2Y5Pc+mnluC+5HYwxYI1hh9TVEQPXRPLccrfkitZYn/kV1nf7AzK8lEm\";\n        sout << \"lavQkdl8e0rKXTunMcuayFgtPCyqiUPn16MkaQBfaNM9B+gw/fFeRctuRq46xbF0fTzBS8iQBkoB\";\n        sout << \"jTV7UmXA0Ysi+iVFAod6e4o9eyW/WEhGUCrAWefyUqbytPJDH7/1VnTdlN0bpeXXSyqWgTpsWYay\";\n        sout << \"GhdYTsPDdfTSzkEU/0wdKm/w8Mjcf3+ZcVNJhPtJpEXzoFsSL0VVGym0kDsJooOizfSqJPyczVD/\";\n        sout << \"b3vN7al2kuDcNZjVyWiZCfPyED1UQTSQFVZBygAfmjg/spVyg3zbiW6BjcDuxOxOHmBGXuE2XOjM\";\n        sout << \"Qa4Qcw7ioTk8dw1VobafnWiGN2S01drTqLFry6ZOG2es7IejQh6HsGig3Iis3xAxWWGS/Wazhw8v\";\n        sout << \"M3OQzSmbW7j0L0KcLOMtSxiYo5LHXxhti/pAaI0VZSLkQYgyMD/mBdbs0B8i3diXoAM/BzqfoU7L\";\n        sout << \"7SNslWLwXXscPrJsCwFqe2UiahyQyIvf+qXqBhKuFnIHVt0cF5cFAeEh1kYzAd0JDbi/LB2hYsVX\";\n        sout << \"rosavz3xN715cRmjpjuQvlIDUGfmmJPPvUIbbXiT6q+TrDdQaPw56G7vz5llNd17QS7UUZymWjY8\";\n        sout << \"p/8bq6MieVzWeOmiBPbmWRtmZ4GPTc0bmau8FH77JxwgrkdH/7jDL6uhcd3grTrsm8X8ZX9FGCZy\";\n        sout << \"QZQ52pU3tWbfy7KsWnBZjkRwzZVRY3EVjg9V1PMQYKAqps7mU0LrDBPwrgHW0c9EvuYa9SIShUgX\";\n        sout << \"JtiWswoJVbbJXltdhclBmvuDsyK/MfLJrSE7qnPOD009hILCojdSCmqdaFgpmw88EiYAVDqwcFzw\";\n        sout << \"EiDdvqg91OFplvWoGEQx5wsjOKaQst1Z1LSc/C1ZZH+mmBMgHfYmr3ZiX/eYUjGzYpdKGa00v8gk\";\n        sout << \"dDEkUCLQ1I0ayiaz9cMPWkZ3avnYb7TdUKa3iwERVVFEJWfhpWe/4KP5qBL3Ih8qLicgtdkt6FOM\";\n        sout << \"ymOpNQmfe2X+P3U6042OQPIU1vmig0euGeKQmsE4K3NoSOEy2QheNv/2GSSNRzc925zhjAk1zxXQ\";\n        sout << \"04KKCDA4HJKFK0tly5P6KjSVTiQXZ6e+IWH9CQfAJWumCVtHNCulD2epjCPlTEjHH332gl5c7h7u\";\n        sout << \"eJRVbsJKZm9z1TgFN5w1iDWI1cBLZipzM0BznWEvEoYNixyZot+Yfm6IC0SZi8DA7c4Ngn9V0ydg\";\n        sout << \"c8JNp+A7T7LqB/LWgma/E4+wv/cdoXiKi3mwg71ZQRM1d5oWknFfm8hq0KNOl2RsSOYO92PIF8Lp\";\n        sout << \"kG2KPK2nBU7VkbNtaJwjmJpadvkAEPPpCbYDdRjrvKaSw9yehsWKfLVuCLQHlO7uJmGe2LHWKojj\";\n        sout << \"BtYYau7+Vfyjj8K4eNqABvny8hj8zV0HyToirIxVpBmH/6/8p2imqYx8hc7yBE84LSNCEac3UJYf\";\n        sout << \"8sxZluHs/ZD3t6s9jVisgtx67iv8u3A4toAOlYjBqj/RXVQRAb30MzAFy1YCdxedXIvKBa/jXMwk\";\n        sout << \"0DsQ+YcRsnKmnGQ2yOxNVfiJZIg+KqN2Ork0y2QNEy7aTv25OEUM8U2wKaRkiyNYh9VmvZpYk5xM\";\n        sout << \"OPOsReX2FOJOFTCUGZ+w4Lp13OI+QLc9TBllim4bhtbBscCMN78WOpnUccS17gXHnqtpK1Nx7R3N\";\n        sout << \"dwpVTYBCxVVUSCHAREPvmPlHj7c7nnIfO5LRxuGxrg0TfCBUwCNiJvuUpiuqNyJha+eJCPS+SlXy\";\n        sout << \"BN9m4jvEM4KGbkGSwelXon6LWOKq3cya+8xOqQ6KliFrdQaNk0Tdg1Mi2oRjBlqjyb55oXYNeRgT\";\n        sout << \"wQ8wAPqY5TM/z/Zk9ELGeQz7JjS/ru5Q1LGNUU3tL0AjqUdU6adovph7CC0/g8lX/NqYg1oRT575\";\n        sout << \"7m4ihHqVTIN3pMkB8TJBZNAa3i1rlom4qcOFGdjTi4WTRd9r3ll0y4PB7V81SddpOk8RPTOIDKR8\";\n        sout << \"pgIa6xFOQ/GTIaB8i7uLax+IMs4dIq+gzpxE9g35BP7J5cbIYJJeMFIm92l7wJB93ANTT84yQABm\";\n        sout << \"oBnlfu/fjcbGvfHw41CTRpMWraO5d9nABxuIX4wFKEzxse0iAVsJA21RbpdBtIHLBcbYKCh1bUW/\";\n        sout << \"hRSk1yislMs9Mtjx/VSUn50NAompaF3NLpG10/hGd7pp1co4wZm7+fiW6sIPBCqLtkg6A1+qGUxG\";\n        sout << \"nUU6NqUvmyWo5B4Re3mDggASRSIFdD8ckv7LlAbyDgVyIxsBrf80ISQN7jRDDd7MjkyAJ5CRlrUu\";\n        sout << \"vFCwCo11+7E/Yfk2dadQJTjGvuyyDXW72l4ze1PuBrjnql0vBe7CCPZKgKJWWDzbGIEKGbBqDfBV\";\n        sout << \"EVA0NrVpWYBu3uhj8sHi+cAMwiXy2T1ar59Cz8bvuIA+9egegV19YAay92S86BsJbhVfb/THW/G9\";\n        sout << \"sbTgF3MWTUgvDFmaJzYn7mkR/2xsBn6UQsLYPZPxOQ4VaEUzAKFSP0zwGZfMYE/REnDIbdOR1ai+\";\n        sout << \"zrA5gWXmbLlr09hkM7tIn2Tw/+X7zEzZ66oDyjDs6g4a+CBt8OtOLi7Ga/dO1DP2y4n1YPAsGADW\";\n        sout << \"Jf24rVZGv8IWyGmlYJZWX2tBKV++HDUTxnmbsDSI7Jy3r1UXNWskyDC9zYWetsp8UxAVRYBDhwfv\";\n        sout << \"fqlchxnmTpm6ozULqYI6ExncbbbK1IBSbY2A+VBUrEqdH7Rxg45S0HKRbvB2jAkksOyhbXUwngM8\";\n        sout << \"6uG1TUcRdnxLvZniKptRcYJthyx0HDHCzLoTT1AlyTB9kvrktDArOUa1zmF2hCZAYP1swqb+zBjP\";\n        sout << \"CHd4aExlUf/UokEBduXCWomJLGXsJpVG1EVz6kTZb2Twdt5x5vZJK3O/LCBKgZNMuS7/xLFZpvsB\";\n        sout << \"cUA0MoO577pa7SECGSrUrSblkliCMKmIECRrQoEJaNKCs1r991ptT9aWnLSbl6HTTWXKcceN0vXQ\";\n        sout << \"tKwTpiM5nhBmea6eOQn5JP5oeytyDul1Jd0SHR4WILgQvYQSrqdyQOf5zDBQHe2/EsinsfonJy50\";\n        sout << \"4M4l2ArPeWEjJKtQBpgQaLF7CRGTjnv0TPJ1Xjo2Cy2OFvWpkA1ZjK3Q/I5PJsMrlkYkTSgQql/k\";\n        sout << \"HwmLiFL0KGdVfo6F1HT5J/5ZxCDOWhO+DmvLXtvTQSEE2asJVZWDo1rpKOq6H3AhObvUgp8AtPec\";\n        sout << \"+KXWiyzTH9YYq5RFU4JE8a+lt8+bGtYHxGOE6AuVgQsvUvAJ2kgqgi+kLYF19FZjeYbvuxzI3t7j\";\n        sout << \"+qCO3v59HfjZWfQ7FOJ/ciLVAAEM65r1sX1JpZRodNnZUvbxT7QoVOm0LwjW3qw2VxZCbVU/jPkc\";\n        sout << \"XQ+8lxiZpHO9mSxBXvQkwRW4K9MZ9dBl0oYdvq8IK33SkyTcaHBqlp2oszKYwDFyLo2C9uiE2BSE\";\n        sout << \"gj9UpPG4M7XOUjUMJ3gs7aitPsTdI5oHG1xklLOTvyWYIJ6vk2/uBrMImGSExPSMMGw0NEbHFEX0\";\n        sout << \"Fh4Td6+cO6QgCQeobzV6Hxsi+HTk5mtAbMGXiIKi7bAiSC3tkoiCeDfBxzqROYgSVQU9fW8PeyW9\";\n        sout << \"xEmwZSABCNRog1xAwHaOuosBqYDMidyh7F5ID9XeYHH0qaMxLmzYkZ0SAl1qECFzJ7wUSiwRzvzC\";\n        sout << \"VfatrCs84cDUKQIpr82LPouxQBeVFQAlj0Plcuo6CxrJgVR8q6ciC8eCnZ5WaF27pKHrfPc7ZjdL\";\n        sout << \"h4AwTLGOpUg0N0/aUJxvFGOVbm/g8pH7duFC3+ycmYrOXZPbhz2qthsxf894+lkU6TfmN3OOoTwG\";\n        sout << \"EXrda/bR2NQNvqJWBRTv//VdXIr1RmlNMDcz2d9lL3rwF9Gq5EupgYIfe1FhiiqDjyrTzh7fw2Qw\";\n        sout << \"P5T1SfKa5Ww9mGxa1psmYlJ/IzOQlSlSzSHxMVvD7c6UDpWwKWFlzzRPjl3WPS9Dmzk3tzUo2ZYx\";\n        sout << \"RdP7RBZg7Cveb3lkIn+gU5XII4cD79YzKPesFWpWR1ejkLVGW1YQB7jtRaJmoz8T81UTuqhxhBt4\";\n        sout << \"NswM1L0VtG8asAidWd9nT3Y/WWI2ydJ9YgiepKeMdtpt8aYqoutZUFzPKGhdZsZIYikb9r1Svrd3\";\n        sout << \"MAyceFX5RIKLVcyJJC9n1QlJVSXz2e47rrj99prVvMN4ROB4hpORryHzGuPMMhpn21ZywDk1aH9D\";\n        sout << \"0WGZq8Nm4YZEjneUtkkW0nXcF0nxJ0wTFBmOrXEgjpk6jzfQ+9+b803WlwtqRUJ6S6FYirRyTv6X\";\n        sout << \"r8xCqyXgNioZycZSgjxzLcoFqq/65u935jK7BEMtBGWa4zQcwq38IcmZu9xfCrQLCfHpIfydjxBs\";\n        sout << \"8PrNV84ccG5Yfs4zN6oaLOahJBukoFHUZLLM+67oALQzsStEXS+HQhWMJCRj5M/8/SwoxZM0ACfQ\";\n        sout << \"XY5G7OnF21/5NwpsUoYboT1wNFT2r8TKrFOx9bEIbKV8xTUgdrnZwbKGPemsypnnsFHoA3BwIWKx\";\n        sout << \"+w0vNWVqK2vsbL/pTiZiov1lxvfKFV25Q9uylplUaSnzYuaDQFLOPBFr8nhcmnfZA8r4ljcjMNw6\";\n        sout << \"0AUHO03MyUDfu0BUVYQEyGXpEvwnI5JmVOI/y3/TqnVnReemG4D+diuwm2Q5UgyY8KyykxJam4Zv\";\n        sout << \"W+Tn3DHT0emJNWv3imi5itW0rUIaTpt/9a0LvqIWi0Q1OOvrxGgUcrsRzfUVi+ru+tX9YZrBOYXe\";\n        sout << \"Ut+KwUCvITG88r9m7o8aovNyH9V7bC4axTrIxmtpRiRP5e0Z/IiH6b560Z9ixQ0MRv5SUn/lhX/l\";\n        sout << \"AP2rTsqxLmt2mWz9b3GqtEO0iW8XisORLiHzupEX9jRbcqShrBoG9bu+4DUO9hGdemq5lX1782dh\";\n        sout << \"FeZOjhIE0/8JttTmz7EZwzp7SeHup1yqlForPR0hhkFzfOOQk5CwfYR1tD+0ImdmbL/QyE/TRsnP\";\n        sout << \"NoDB0NVyXcmlJQzRH+s/dK9kJjHFn4FAUJ7Eaw5xi8/O5VokSz3gfwwPHbKFexrY18fDiyeZ404M\";\n        sout << \"cAGYSGyYzxkpa1HwuZE7UzUNlyzpuja8RR/8XaUv1XRK1lIkmDFA9cKT81vtXJBY8/04Jh2OsPBT\";\n        sout << \"mFRnFF6+vItwlsmOaF/WUstZg2XxP+MePh2jGkKj3b4c4Vw9YwzD0/xNlkCk22jnN60wtM5WHiLT\";\n        sout << \"Opu4ZnP6/woOP+7uOOHdjEJvo2d/v3TOmNmfx38TBCBdAbRpMzy4XDZdsWpP7l0DN9/OnbErxD30\";\n        sout << \"2sECWhkxKygkNxeq+CoeiS6Zl3mzEKkQ9q/XHccCioWgiODFt6+Wg9MtPHGaR1cnaDDBBp4YQWJG\";\n        sout << \"c0D1Urc9H4Tpn0lmJkx0p09nBoMHGIBUKmHuhMOnuEuZp9wDYSQ6UnjtLy/+QJcCB8QDvTCg9mhu\";\n        sout << \"W2HNZPqa9DFD2tmV5e3+pTojHI4O0tOwA5B2OYmqFzdvMWLuFn0uMHOu5285KE0ZDykOOv4Nupq9\";\n        sout << \"z/rjTtrxInMTU+a7hynQ7Ra75F5nCnEefKXL2lgD90IkuNDpmxHBX5OgOYb9RUwqcVGAFSZq1jYm\";\n        sout << \"rg7sxuDJu/honmXsDohqfo3/vBVca9U28wnCJ2IsuJXRQwzBLOJAz44ijj6+Bx4R/7U3IbN6nSNW\";\n        sout << \"5fXiqV1JD/r3AMAf6THZKnYy88mv6kMzt0ZXPd4PlyHCYhLTIzw3AZP36xPjEWBRP8FGaJw5Pm02\";\n        sout << \"Kh91uM2QdF2jowNV/Ago7rHS09R3B/aWjmGdVTyhCjdogPtrhVHdaq33OftcCuCF7q/wZ8kL56HD\";\n        sout << \"2T2BxxmsZY0XqSlU3757R/VoeGdk7XjAGbpOeyxn+yrP8/stbyIwxq8PSv6YhRN2c3+H9AYka8Lr\";\n        sout << \"Vrb16X3aEEP49jxNwEOL4hM2rcgS7f3uayVLwsuviWxiUcQdWcmjTVgTos/11pdXpSaPqSAvpAMs\";\n        sout << \"m79R8fdq1V5+kmZZ8UZKUdQwjJxeg83dCTDpYRTXAdSdKDLXeD4Kkvd2ebKOGb+1j345x4HUnuef\";\n        sout << \"ijTom/Xz3fEw1jLgqZd/nVeUCBYcXpozL50LwzYDZzjxERSVCMCgmt6VJBgpvwFBXyAYJql5972d\";\n        sout << \"vIP6cFU9K1AGAUipBxgaVR/5NBFTIjgo2CEOJulAQkwWXE1TOUXHF6hD+Tp9Zf3nZRmTBU2OXA/U\";\n        sout << \"8M5Q6nyDRaV/qRdB3GMrYPHZIXcy+uh9xI6OYDWSfv6uZxGfKDzN2JjMNLuK5CEIu4hiLj3JHC5o\";\n        sout << \"vHJ77Vimbm7wa/cTYx4ztSvSSFwSXy82nSd3o6d3Z7vL4FlzDjxkW+6AfP+8SQLvC8yiKiGr6U9/\";\n        sout << \"cqFdi3xOg3Ska+3F1sn/OIrDZVLkP5eyqo2aDC++WnVv4Aig14Xf7lgD/nOV16X4sn6BmpIysM/i\";\n        sout << \"Cjqh7AuHgDkB9kgr7jQXFeGAhdGCNby93jgIRBdWTY61JRX6Isek98cdoL1XqCheIxKckNMmljnr\";\n        sout << \"lHL4Fi8okkonI43IKV+8NJ5eH/JmUEtrcOuaB9M4rEI1NsEQK72dIWyuuIYyocaeA87R2dt2biia\";\n        sout << \"SsZLV5jE2O9YE/AWY5fDGAH9PA40TD8bC6bxgaik/QFegoo4tRw2yR+GwtUh9Utsu9LUofRnq6KZ\";\n        sout << \"hq+3Bqzu3U9grOYNU9MUxNo5jZS52U28A8NSuHBDeS2870sdUvEM2RftmNusMnCDR1bw/tru/i33\";\n        sout << \"iYIUoaX6EPN2UOJMm1TGqIOMs4QWkDTXYAsIdpBgq2nMfXVDb5y/nqpmQH2eJCgz/7Ly0VtZISf9\";\n        sout << \"mkDrrok3cIEMKMgvM5X/dA4F6Bv929nkXqqSi6AtUER/jJJARkpAJHJTj0IxUgY2unVx4KP4OuL5\";\n        sout << \"b1HeIkWdlln4V64OPJnBiKl17p4pX5BGtEXngsMR3kdDBJwliLv6ciLvPKybgggvLSQbQ/vqnZdh\";\n        sout << \"1x1GlnvrpKfoLFH1S6f4HiDicapOP3wKOp8ECyNZp2IAVbRmmPhjKjPry1EdgySgpXFZUHVEHdR3\";\n        sout << \"R7cGnH1AGhZinYuoN74cFsNooe+LxT74F4KWSW08+S659M7862DADzaxlHAbd9BL79Tu8RGS5CUB\";\n        sout << \"i2ATQ4rUgRvzC9OGcwCpOAfbp33+jqLmAWRllB5f5uBJuO2nG7OiKHV9jeunOyHxNnp4UTpblCBW\";\n        sout << \"yKx4EVA7p5T7qH8krIftUpBbUx38XhCtPMcsIZIMp2w+nmrlZeHyPGVGFrA+Z1+VjmRtiwGCghXG\";\n        sout << \"JjZ9j+HPIniiHK78MNAPoRlt4G5mtBopMopDn/1cdVroLuJkxX1CpCOu3MmkQQghl/km3jphiehr\";\n        sout << \"Bj/E9IZI3/LesK3Esv1J5VJCFl+Eyn8i90S2ij6sBBPF+eqY7TAMYAr7MK9mFtfM9orEpIJTvG+U\";\n        sout << \"Uun4ibgHRw0t6UQ4nnvZKHL4qmZXZB4clGgvF2Sl1hj3FpUhQLr4YWJbMeBVddvi8Ifsl/KpN/J8\";\n        sout << \"k0iL9nhnyDfLBNy9iT6Fnyrt6wKEJKAmvMTUS/U5YZ3CFAgWEmqI04ESYkZ1F/pVjwgfDtwjbkPV\";\n        sout << \"Vr+9zaxAa2gT5yZZ8m6CqMJJ+Hr1857AgVw+msikx4c3G0zFZpUEv4o3PiprOr0t0bGSzr4rWnLb\";\n        sout << \"rPNfMq0mQI2bWIMeZDtiAeMLOwrGdlnBUekp8NydJeL1XNAMMJjHKvNEnopNqkZ9Gt1Kmvl3Eqcx\";\n        sout << \"TuwbsX2ew5yNJOUD7T9q4lYRdKSNs88fdTFzE6heGTV9UGs6z0PMP2HoLXSShBhvPAIX3t92KK+9\";\n        sout << \"8986KZvRZ/QVN93Aqt1mczK4SEgo2X6Tm5814X6WcCWiZpH8CcwQjW23psQyguC4PyLhGJo92XJY\";\n        sout << \"GRVVisGEARz1qjm/GY/jW9kE6alXImoLE+F0opY6QTQXAo+KKleXAWmMEUs972E/aFQtmR2V2mxo\";\n        sout << \"Ga6EtSNXobw7jP+kMkYoSiav9pYhII3t/v/badrNBhKksNt56Zx6BYFOnfhPrwGkR+YoRz2+x+gR\";\n        sout << \"GMHLwRFe8lMPR584WNMrC8r0r3i+qrp2TeG5vFM+VKwWLSBUoG+bgZShS7ITSJiSjkuDMpa7jy3w\";\n        sout << \"1s1AIgtNyvxrKPTKr6C2FjVuhDkpSInVX+Cdr7utecsExirDn7uyb46oI46oNbsD/6HW3sIkvrVH\";\n        sout << \"xWY1bwvcKlT1+aFWKYtdZEOk8JE60pwiat+MpxgOk9TC5EUdJvcxOP8M8zQsIuQhWlkgNhsm3G7X\";\n        sout << \"1xWL302yhLrl66DlkKHjCH8+ee7/RCRm3l4nS62XeVQ9ZlzEIUbPP1tnnzg2aFi/VxMxk+EfF23P\";\n        sout << \"auIEXL5jALZVnr1D93LlSiqGwKoAq7s1bblpIGyxcXOsuaZ8Ls/J7FsxcLD8BQiK9v3wotEzaOOD\";\n        sout << \"jSfsH5DDUQ/nIdlBwZk1J8aOTSIo7DZ1wZRBSz66ptR9sSqcwrXvFndHulLtva04DfNDPzPNaCoH\";\n        sout << \"cAjxsOZRKl+ZPi9X/qsVzCr6DijJYeWT+UqbhTOGX/Vrl3M3Mt7q4Pcs0vcdXH+SUV8YlF/zmaD/\";\n        sout << \"xxZcFz5DPz8NRAculqklupW4Wc1D421TC78Kka2NTJKLzivgisWROR9c6g4ml5cqbrizhraRbvXP\";\n        sout << \"ilWQ0PSOq+uyJqeo+1JOSH3KWoyGWfOfGxlRffmvsOOuY2oblonsSCz6sYKySsnKeTezRcSP9PFg\";\n        sout << \"6EGCjFg1WodhnA/KWixJtQ8QsfhaRDoIYklDBWlPBEKxgvHi3yVF3vTyakoY/VR82B8UWfzxW+gL\";\n        sout << \"ldM+gn3H/DTpzR8/h7xBK2yoOw2Gpv2TcEB5oMtPsXsN58QdoqAsgBcHI/GNdfqaQDK0lt+npV2M\";\n        sout << \"8NAnFcK3r/wdAJ6OwJYtXPEIbhHxRkEY7GLUT1IwLeV2PIV8gy3Eh03ULZDcmii5xO/MsPgrUSKM\";\n        sout << \"Z9s+JmBmJhQISUjumZ2SBkAU5V3SG3T8c8EaeN/9yNYMFmSXX/jAjlAViNK8bCfnPUkrmnTAMaMv\";\n        sout << \"blW6tw1yhXV1WSAe075/Zl9slrZhcCJHYX+mZ1yKDpt7x/QxayGmwypWDo9ukTnE66UKiZ0udTiE\";\n        sout << \"awN5uFe+qvj+zZLrnM4Bf4ZjMjKzjd67W8UaxMJCVtx2SHeNC7Ffjo9xN4bicDUnpqTt5phMV+hX\";\n        sout << \"lBRiuUYA067qUb58MbkIE02F36n/ioHNYj15Eteh9wv1IMIpMLz/1UGm6+97m8xIAKH5B691KOsD\";\n        sout << \"k1ovwfjzGXmFX12KsdSplPSmH9UCo6CsuJmFkhAkYd5vCw99+JVu7RNqhJGF4h6Lg22AqisjfHde\";\n        sout << \"5CFUks0DocGrgDw3GcmVMFAV1Ix29iekfAgEJcOphJBGJ3FvwRmGkflrIJW5x2sPMaRHeU8Fkzso\";\n        sout << \"o/IF8537YleWU45S1m+GXNdomkGIFVXZCKwiQ8bRr1MmzMcs+0EkU0r6ei7yxi+6LlKfp2NQOv/Q\";\n        sout << \"owQ74v4YHvyNJcI+YLLMHaZySYlxIjL33H6b8vjrzsDntYXii8lVRRXhykAiLldwH+89cFk2tbeO\";\n        sout << \"am9kZeEIlCX889URxsw58TRlwd0Lfag6IhNO/hHpi652lgEYcZu5NPaDQPRRC6vkl/+ocoMmTDhX\";\n        sout << \"uGhphdczLsCBpIejuQVqI1dhrnko128Jzl6yIe6mpuhzRT1ReFL80F6VRjegnDa67Srztleu6qzi\";\n        sout << \"OUgU3EDRfE8IJ4i97SsnTFJR7Eyou2/GP1U+ai1U7JTknHbg7fNeD5wjTIyQVE31oOR2WTNELWa0\";\n        sout << \"/GWO3P6Em3J7vZJifeKTGYWf1124uh+oBYgv+j3vUuX01i1P9kmeUP0nmVgzWs6AGIvbIp6vF+gV\";\n        sout << \"Uc+8TvNYH+0f19q/lPOBnBT46URHpJ9EZxodLin8K5aTCB3sLjpXiqQDPD9fbMzL2r0s1Z0YPWgH\";\n        sout << \"Mllgxh7l6bIhAmymXIUX3+Iw9rnW/6ODO1huBbvgZOAUrLMnTA9j54trOL/n2DxwAU7JJ/fCeH5u\";\n        sout << \"PKH6nM9l/PvCTslH7ahvT/uqGD3/++3FeHok90oU0QxyDVbsMDX+ksj5Hn15ZQZQtYqToONe/OI2\";\n        sout << \"F+xJHU1CWejRZDJgDICcBYQSI9e6crc1vdf0y7aUeNRthj2xLC0zbtfy7PaIEy/R2E93I3jOoAq2\";\n        sout << \"Mz+0icoUb3Hckf2St+HqfYPL59yCrEyqoFONN5XMArC/MTYpMn/XQfCQL2X9xV9T7WaScs9TAqQ2\";\n        sout << \"/qZrrcfRxUaPCVIBtG5V+of/vfYoZzwQrLTioTohrX6SC0WvxS05UlbYo9sDwrchmIxPmrf5vI10\";\n        sout << \"T4Sc1b7sRfiijqZA+YTnYyBPG5c2qqsmSXLmtctpzUn94XPhS76qLj6uQEcoaYTOwFK2dVTvFpfu\";\n        sout << \"zlRNDzCCfzXc64lA9oKwEhn2tTH4ddClyYobly+2HH3xz3NQMrLxeYXblIKBFJzn6IlY26a+77qM\";\n        sout << \"srMzEwRmnzUojuRBO6n7BxGFfP1JuP4FhIpKLTgA1Ql5mf7Z9LrsM2lORzMuO/og7LvjrO5jVs/w\";\n        sout << \"+ZKmQzSzNBjEgq09UDk3gMG5OV38SgLXQCkUnCUThGU6En5OTQkSAF0IDQ9Bmmyadqp/+V6WiViv\";\n        sout << \"Py/WYbFDSAb95ME/J9YGfTg9VWncLDEU4otj6Milbr8OLjlR5YbbGkieo2I4jYfuKHR+/C1uXVWk\";\n        sout << \"HEOZBv2lYRKteXx18m8DLOZ1PO0PC20KRwcep1QSmw8SH0NJ2Gj5L2WvkpfCSwKYJOJECrAc2PcI\";\n        sout << \"Bzf363+QgmckMylMuHJ0Kf6AAP2xFtKYw3qM7tTUjt14QkC1Bi0l7ViNGt1vvyTq8erWFJYveVwm\";\n        sout << \"lJQMmyvrHq5g+hbj9ftT8cPxbKJ/EPYGKrtrM8AGxTxrtA0FHqmzjPTm9rHXhGYfm3ALWw+frbVc\";\n        sout << \"d06D+iiyRXpTTDZoEcbMaZYCSyHI1QQmTR9Wfr64r6XSk+/jDLNlL/Syp/Hzs5dK3P2YR/UjTB3I\";\n        sout << \"8U70K/yeV0v9rDUI41COSK/akYmpybimqmexTop7zqNUIFOqFHbH7TCqRxfq76DFebeHbE1Nq7l9\";\n        sout << \"p8HRuOuavv9wKGBJx5BoYl0h+ujVfqWIJHas9QuCbJK8Z2eNht/j/FFSvdlPfWIrRu20Anay6EHN\";\n        sout << \"bEDl6/voathXXz8Rtc+/xkb4A2D0+WwXHrYh0onectahnSjI6sK35wtf8UF653KENWSOVFiFAwjr\";\n        sout << \"XHV4YZb+VWi5jQ7470jOdd+6eg9v47AymA+6Z6ZeTWazbxSgfV8hCsAepHyZ+U2Z0B1Zgeuc5rKp\";\n        sout << \"MhBQZ8xf5x+yM1G9Jtu4Z5kgQ8NdliztMLkquT+mbY9U4eri/WsAQa0BvC6hisueLg7IGqjQGgIJ\";\n        sout << \"29Y6iqD9fJZuGAgbEbW7qu7J3DyYzGaKyAx4+GOyctio9ChW1v4uq7gkc8XNpmYiGl/90mo20hzR\";\n        sout << \"vEXjcg3Hh/aHJlVXH0hJ6W4kOuBFkZxptoDFi4vKdSCVWAgnQgWhmhkeI492Y9bUaDTxejYhTfDX\";\n        sout << \"N08UiRXnAN96KK9iL1fJZxB5MUX7cJ/GvW7RjTVP1MNzy/FdlAN+k6Sb8vyst3Sz3eGHOgO1hpTq\";\n        sout << \"Wz9Moc4BVabx5NLlb74ScQHCHX3dnKXle6sPCzfbPjM2Z8rbm8NvB/VH1FZ/EzriephAUYdra8OV\";\n        sout << \"+f9V3o9zEYMGujKxqZysPfheqaA3gKKDVgKGhfUn51dEq5YC61aWqxjO1suUrW6rQpBHN/V/VadA\";\n        sout << \"hpuSHr2UHCeL8yUzC2nnXxpHCifGCrx1/R+A7EXBjTlrxd0n83pEV5paIK1AB8Vsv7RNrT0bEPxx\";\n        sout << \"uNxgTVdFUVHVLZf2zuhlqQCSr6zKzQgdlsW2Rbkzqm/RpdwRmONCWkS5IRTwdqLM3rfStz3zt3U2\";\n        sout << \"PklWaPeSMTUzREfa9xfaxA99Yn8QcQZU0GK+zEe0d/iyeDr+7XPYH6ZOgQbFp3BgHWk9tAgeVx3d\";\n        sout << \"hOwbut1u5WRa4azjGkYUUlvXLJpehNwKEiaej7u9jKrdQMTRi7gtSYliGdNr0nnw4ADV60LXD0Fi\";\n        sout << \"uYvPQwJnbICCYdy/Yx0X/HBu0dUS9D15JuHuT9z1D/dqirMKNiWhXlEzC99gX4/mGGM4Q6l53SQw\";\n        sout << \"0205XkJ21NasDxznXp8UE2e4GsI+N40b6mLvLZaauw9dB2IeNhwZvn7mkGDraXjDnpnnmX0iV0Y3\";\n        sout << \"OH6OCq5ZBlk9/IIVJpS6Xtec6MiuVBYrhKj2MVn0tI7rRalXXqk+7Plmg/9S/Vh6U5RM3pCjTTf4\";\n        sout << \"ZEAxFH7LhT/JRpkk7fPxcncaHQVrnrbM8xEYc9/2nptKYriJdXHXecsiH8xYjjzw8ACs/FeFyPsK\";\n        sout << \"84MjAvnsSWnPVpJe9n51BIQ68dUG87+igoKtNjWomVVSAMlBKtbiNrzFN+4AvESKCufoTC4gpGPD\";\n        sout << \"2sFkTO5yg8+v3rwFK4aAjBLA6eKzSGkcJqcThom+NfRjrvCtPysEisAdXHc40muhThMiIiOFXwbH\";\n        sout << \"T4722yaSHEMGNwDqY9dlixhGz8L5G/B3hbrlqCPe2+GHcmmMI58oFMgZhEh4u/1t5nkCDizZ1COg\";\n        sout << \"+CDWA4n4lcOXfVMwp/8u7GXZMMLuGSJUy38DgjLzy6f8bji0+EEZ8rbFsvMjssgcx25YJ9Jy23eq\";\n        sout << \"rcwGu8iMKUQ6t8J2sZFPXuFrn9cyFP/vP6qFNWZ1CtiN2fRVbqwtBj6DXmSae7NDMmL8XfGlTD5i\";\n        sout << \"aiIWK5SPqYzS0K6oPFagYWYjIKqkNRyIAseq0fqTLKnyKmv8oj///TlXGawbehr9clexoKbAM5Mv\";\n        sout << \"1RKu3/pJiPVwOPXcwCIlQ+BemtjmsnBzJySAkA1I9mpgkPm4Pg4qblWhgq/aVulwN5uSkJP4ZU6n\";\n        sout << \"reWj3khTO6Svsua3toMPYm6FOoioKOOrMMXQCoIjsybBmSaEHeAFxZmHODtbf/WrGL4YbhUMal5o\";\n        sout << \"90Ay+c0apxZIV+8d7Bm5L0dRXmQfSUCnP1CKyUEGPaMAPK+DYRZNU97lzpowFRdjTlrJX5aN3jrk\";\n        sout << \"WN8/xaU0PTVo1LtIesYvyG8n8gBSmj90hw5QLFt/94H1NDvPYMvw5A6oGoQUYdCXTXzrRJ2OEow1\";\n        sout << \"0/qEzLCWExSS9q8nbsf9Ne5ZC24XA9KHmiJot5v7MZ4KBORjPy/Ub223U3xuJqVGHlSjYuHqmOFC\";\n        sout << \"bhqGY4yNo/7PU1/cvg6LbtQSriMj8+85GQSheMBI73EnwIHgPOIV7EGEr/GHrfyM1jI763x7Pr0H\";\n        sout << \"Bcsg5o34glMy6YWSMLd16/Djq277MW4XiMoGPK7Rptwh9ahtgjS+SAl92VTVyx+kr7gZXfecCivl\";\n        sout << \"gXUmA8sQugTC3Zf7QqR5eJvYA/i+PMRWkLw4YCogDOYXK7tKY86djtBHftkYob6bMj8a7/1/XGzm\";\n        sout << \"Xz1OGinw9yYz7N19wgkVZEubmK08ZnKINN7A9IU98iAauGaLizHRlQ1y84Sz13coFKe9lRtgnNHr\";\n        sout << \"zsG5yqiTSIlH1jLyxVh1O94Qj6RlNT65LPJa714IW1ot0XsS8QgX7Jazdb8mqyiBky3/w+VoLWGx\";\n        sout << \"kplBp4VZN5gRvTIHRBq4LaoGgzc1C5us3loLsxNUDgKBCBjUkywWAD+l7sCB+2btJo2HAcmgbNBQ\";\n        sout << \"zITjO+dRirzIS6GerX9+zbzv4lC2d5K8ZmDUMHV2x2NKaXIU3mP6II/iBaP7W2VRx5qfAAChmMAP\";\n        sout << \"B6zDwzc7LNopXp/GgOKhYzjctxbbpOcMjP1gnQ/2F4EAyXOU+iMZeXqlmbJcXk9S+bCK/Q8i96kW\";\n        sout << \"k8lbmB/ecQxbYJKynBJoijaSzeRYL5wC/IZyqScchpePu8J84p7DEu4ECqd9+vhjp28/u6aCgnKe\";\n        sout << \"T0mE9aIOVS9DLgIURa5qmWUFvolbrZ698AwXlEV8vkMgSDZyxgRSBdyZcmQawO26rEVQWeAr7dw2\";\n        sout << \"zQIGGtM4wACd+Vv3e1FgjvkytZOwyo0NLlURyqdykYhZx+youz/Kmmri50XG/hpD1+5gXtVFWUhO\";\n        sout << \"V5G9Aw6GG3+trxtMJnjCdkaA7DTjTIU8nUjNnx3TsCqXK0OqDMvem3e2TTeXorRPe2zYbhYB5pVY\";\n        sout << \"lSJ5yYpUrIzJCb3xPGNxQP1qVv/tCEq7IIKGqPl2RS0NihXE1uz8xPMu3cxu1juHsw4Mx3qi2C3z\";\n        sout << \"KH4LvPoEbP7fO9uELQD6ipi+AmmB7bKabD2AwsHFurh8oFtaCt+KuVy+676ggvwGEFm0j28Cj/ff\";\n        sout << \"SQzCut2j0HQjychGdngbYIF3HLJQNr8rbh7k1FPpJhdpJc5lH4QXMddVxuydPbwQuB5zGOWZdc6y\";\n        sout << \"0O4zjCgP0ibSPyEdhkolB5T7Sm6ftL3dctp49kJKtIyGd5scyxMreHGJxeaGADdgqken2Ahx9izm\";\n        sout << \"VoVdjhj2tvLlJ5FbAlHqir5ZcZIu+prlMkAnW20mXjeWdh5lSCUFGcOTTyxirXkUfyDRFVwfMnOi\";\n        sout << \"Y8j4v6X/LyNIKgBPY5qFKfbwAjYWyAPYYQVBurLEu5gsYGSYhmtm6BGZ39gnxbBfhB/JkCyE68Pp\";\n        sout << \"wwAA3SA3Uxha5yMTYK75ClGNsWyI1AwnkfYuYgEyCbBv/psf+I/jSpT3yvcEDKiI7FwToriSgA61\";\n        sout << \"3ksBBfw9E7Y66wmwTHq9O4alqsltIAVLkj/Lp+DxSc6tZn5lI66aOj7paImjnZac/GoJAxVUfcKL\";\n        sout << \"q8pBZEwlJoAZb6T3wCuEdgZlYp3MZ5uInqAZSOsqQQ1/S1vCj5pwdzHrHF6Q0FJemS1AO2/GCk8p\";\n        sout << \"dEaniaohFtWT+AMdEQi5TLVmtpltYP8J1Sm+U0/TazrQStLUXm7Wpc2DkMdU3cZw+ncK5znAzzn4\";\n        sout << \"dQGBHVR7TMfIpx8anoWGhShI6oHh4zPXYtRtiV0Y514GWxAMB7oeLOjnJTWeiwO8VS9IPCjcKEbO\";\n        sout << \"zTpPAwMiBrZEnglnKmIGxQXRmGMpag1JZfPRj/XyucX+LreWYF+PabGLPrjSnG5e2D4aDlNx9wGH\";\n        sout << \"raYpvkG/LJJp81U+s3VsS2vUA6uWgz2XiHonASuttcV+a5vo5tcKUDXDaFckDzjpIJe2rn+Z1Xxo\";\n        sout << \"X8OomKyPCCGmMEmE3SxPkGCkTIDrbb5Pc9j0NDVXbRyjVZUf2hrZ7pR+H8+jzUVgt4IfnB8Q7/Yq\";\n        sout << \"uKW+YvA6w3hYv94BqXPHeO6FMLhH14iBLVLp1Yp2aOp1ehJUQ21OgrhNGjMmF04P/2EF8DXy2V9s\";\n        sout << \"h+ohPrdH13fyVrQWRUkG+7Fn+GAYcpD1K5jvRavlli9pHys/axwdu089ivNpA5D3D+t+SHVGEw/L\";\n        sout << \"ZcWpKRQrUZnOLTNjJEpEIAkryuxqTcGDzZlB6ngOVxK7oUiwzocC+zjKtmafaH1BqxhX3RxkXy/8\";\n        sout << \"sXA9pDQ2HIn82Y7vv1+9L+88KXcTLTIUSI6iwrL43h6IhM018jTNfCgdVx2Uav7Vax1kmu9O8mhT\";\n        sout << \"NOxDk0uYoMJfLPhr/nSWlKjgojoEj4IBmALtiMtqe8L4zNpHTRxgvLW8wMQAyj/woN1mLxLb7Lxr\";\n        sout << \"UIY+ECqQomA4TLPWXuTsLMJXQyFgd4nQgqVTL3PUdAtwes3xrHTODTYv9f5CLEiTBV3BP5V6lo5O\";\n        sout << \"Wj50oMM6yJWV4jZypwEp8osWHksLQjPEubu5CiBucOv3abc3Zvteygzp8J0la8wjOT3cd4+LHFwg\";\n        sout << \"hQjO7JuNXwM1xhgdostGxjYExHC6KB9HDG3OUQ0wtxsrh5QITF3hmlvkE//xrWsyDzTcbWCgG5Wo\";\n        sout << \"NRy0RpsXsMImYHlzO3hV5wQHz1Xjswc0ATMArZ+YJvXieYgEyhkIIzYlFlc1/GgnScyJs5Al2mvs\";\n        sout << \"5GFjwMfC7wnMNRmV97SuDzQjKOiwMFochKCR8pSbMzJ4+dW0W9LMvasWGVAnwvQdfIm+E4+O0W2N\";\n        sout << \"ArEB7utReECczQcBVWjdKqK6/N6QbXobZfvLto8AqTTw5CjOgTpoEybY4og+zNemINlmYgzuU7Jk\";\n        sout << \"IwiyzZLohI6UaTrPWd9Ck2lLn9kJf07TnWVw5+2gIqhr5M0d4Yz1Xlgy7EfAWMhPEu6MuD0WKKB9\";\n        sout << \"1MSe1zl2pbq14zDGyICSCXCLTTnLjc5Yj+E92s76igXq71sobtFNGzjQfZtK9VLTrAaeKf4Ql4jO\";\n        sout << \"KWQJTFYbvd1ScHzbPyF3S/T0CHPDZssQQTd/VBOuspVr48Vl2/MRdLpdzjd2b9gwCh2EwGeJIy3o\";\n        sout << \"R+AdmgHfA6PwhJKBkIliNMMR1DEhwN6QDY+b4GKnRHe3+k6tChrTNUqZpZ7Eyhret/Hz//LhmPn5\";\n        sout << \"EJ7PSeJR7K8PKE5WoCzr0h/o7SeiHi9qi+2STfd6J940/2D4HBkYvJOEH4Tu+1XBPi589dh6vnhP\";\n        sout << \"aQkicmf2fG4KuHO9f9Jlt21I4ksrEaibH+BKFFw2Rq2cHME8Bg2cG6HO+TyRwIROhy9yxtWQEYqY\";\n        sout << \"g+zU+DM/WCXBCNDCPqy2q8nY19izJrU3R/9ZCUF6Ji4GjEzjjb+mErVhPcWpaLk1FWAPxtC/A+By\";\n        sout << \"rEiAVG7+asI05YWpap2g7apUyGoyIdnHQ2g8QucKspJQhW5BiF4pi7Kh/zzPQPXkuxQ3biy1pOQ6\";\n        sout << \"/6EEXB6W8dLKHTHn3cXCphbbQzqnti+yQdGuvwDiC/GWZbB7ePUsUSJ3+b7gcR54EjMeIX6rBUxF\";\n        sout << \"2xXAs8El87oP8PCp023NStXDjpiRFCyQ9mYweS0bRh7MewCbvgDIGBuJfXL46eVRfj1sdwlnpS1w\";\n        sout << \"aN7ePzPyTR66zIu6kwZzfv5zw10c2LC9cj/WcujPSKir/nCMFaAUroinmmNiH8C4M/CL4mU7SBkZ\";\n        sout << \"/hidsIh9YDq7cQRP+vBwLgoVewGxnS2Q8yfZ0K9lAEsEo1Lpxg/Bhr6Ei21nnfaWcMQEVj3Gwpdb\";\n        sout << \"fqKrvOzQrUbQBADmmksC7FSgEBUTYze282+qXvS5jnhFg23iV6bafe7LOnZmqLivJGA6S0Y2D0nN\";\n        sout << \"HNP+0t/IutdM96z446RKbwvUrfNiPZF1CJWu+T7Gifwib9XOmMCvamYUqI+dplpbgCxmwbSnMwJM\";\n        sout << \"yK2++dILo2W4OfcPyM9eSBgY/fWKdcv330fbSE74lTUiInCJr0hECkFD6gThcDVRY1MJY1hX2Dak\";\n        sout << \"E+r/OKBGTM5i0AlXeZoi5+RyIiA6wRTKEzjznz3eHhAe8gRKj57DUbhXd0L7BK1ZPs/F4y3/GHtZ\";\n        sout << \"rfh8fPWKi3TX77vcIOANXRmGtpDm3CDxlhcWq/bWxEL2u6wk4Cqqn7xxYLNmvnZHB3GF8aFfPRdW\";\n        sout << \"iqdGfvdkoEWNNAd+OJd5dmu+kdqFXnoGtlItp5myxabhN/I5sdFxalICuAm+kAl0ocG98Q7v9YVI\";\n        sout << \"PaajznXTdN79Fn3cFSHlgrJ7yDb5T5mzpk6ud45ux/SxLw4ERY0jykYeAYV7NQp87gSxDfp/xyJu\";\n        sout << \"LKgD5aTz1RUrkC6VnCDdij8ZnqWx6FlSUdXt7+mDe7GAKFBHsKBUY0B7/nqnP+wS9GU7SqPuHa54\";\n        sout << \"fxgnq2fQi/VaMA4ZTugMOvCKP6PgHWuzhFOorZKnkN/Au+/iOH4z+1NvTzBiBjCH1ZPzXEU8pXMC\";\n        sout << \"d+XzQyzL1fd1xS5+FTOq/FV9fm5ihRm3f4qVxdJFmSnNKBdUt6+BnrDoReWLDOpNiOF9oOfADJMM\";\n        sout << \"c55TRsb7ikJpOUhXHQsldLRMCBQOB1YRiDjLgRXnPM2Kh1/YUFV7dOS/tLUj6Th4Tmtq833I1AWD\";\n        sout << \"CLADK2WJXlXL5s9HzGBwR4eVwzuvQsTfIFZmbnsjb+pIDR1Ek7JH3eyAEwy3WWATtUfSC0HXjEgo\";\n        sout << \"lKpcSGD6BZsJ7IkSo7Yf/pVcQbpqOV0W0QyGcnu9IUu8q1O8iF7Nu5LNEFWBm+hpN/sUgzE+XIBn\";\n        sout << \"3sInc0pG0ehnOT3HznAl24ljHBudSqVqoT/O/K2aswIhxOl6RHw20PypAGvTEDQThB3prX1RuTeg\";\n        sout << \"kmQnQir2ffAp7pxEtxvQJ1kjA7Xp88ZdE+xOFX/8yvCnCWh7jzidGLOZrh6T/OlPIhd0Ipj5GiM/\";\n        sout << \"CZqxIuPwEyKbZJ612Ny57dLmPK2J/J5AuWaX/wmMlItloLwNSvTwQ2tSiLUraT98oIVqhu/GSRs5\";\n        sout << \"pRbWOeTspkUZVC1306DklVBAKqWSDalxyilnxToN3l1+DG+UgJtSevkNqlDpNfH9LqrcRrfmokTW\";\n        sout << \"cymYpib926UvmWf9lsMzJfBqFg3QU5Sa/eF+BwdMgB8Cno/p7FsZ3hKytbOM5fnPzm2MYR7Kw5Mp\";\n        sout << \"xPcptC3Al6ammAMjlp51IMU/1wyfDEZslTCZrBCGSeYBke5D9Qz31gl1Oyp+RV2lxhNngKZcBKez\";\n        sout << \"HjNzzJHm/PvqfxyAILoth+5Cb5LxcBp49XjcuPhZ3sFIfNUs8IhjnT4RUZxJHs0PMFHwx9NwgryB\";\n        sout << \"4UqLFn0+Xves6a9xW6mIzgSJZXxgKcWmA4MZFR1welVzD7l0Y6Rl+Wjw+qrklobDSNgntToguXwR\";\n        sout << \"mrSM3jnAYy00HnoxJVcDFZ47Fa1aYpZvAlZHbgqJ42LrR1KvI4Qfe+cJVyV2iq3FNB+4aO6DUVkn\";\n        sout << \"2dBbf2jmR8fNIjz4XkSCXPpwx9OZuYB2C6JjUkQ9lGfDGPfFcDNA0mjkX/FmKf67UaGkJsG+DV2m\";\n        sout << \"sxojbh+zm48COhWz0xrBGSdj0viVa10iqcKs4+izaPgDSHMFdez7nT1aIBqf/ys792hN9h8kybET\";\n        sout << \"GZw6HGYgD0u5+hbXeXVC11f+8aUi2vjGW9gc+R0cAnAjcLNBH6IPIhAzC3E3IJ3R37wqQ5huxyrm\";\n        sout << \"qZ5AWYXo3PRswYjxwlXvUSwEbc+GxcFR+jirERKaqgwoVOw/2F2WHFQ5yQ5R0nI6uUhNMbTjlF9x\";\n        sout << \"2MYa3H19/dgtY4UC496uQ0uVJ06wlVRCL1SCRpSn8y9IIvAEpkhX1b2o8NAMxR1duq4U0fUhCDo7\";\n        sout << \"GtzXFiUKyLgKT6tEZdww8+FztcaEB5GmoIxy25ReE9Y2Yz1w/IjIvyOQvqDxqNMC64ETTqYYlF7o\";\n        sout << \"oOGEBqO3JnTVdOtwbv18JsefEaqWs6hyUboe3zxvZqnrmSrF2Ezydw6jFhjHyTdI2rRNK7mTCg2i\";\n        sout << \"/1fxkFC4Rlw3U4NctvjVXqhVG7/NafRynbtBxSVq17MH1Sz3IRDsKS1/HtORRuAYX5/KYcgDjNyL\";\n        sout << \"ew/mVxTedPDQ+NDsj/5k4gjpHB28TQrYD4R8DheQ9liqV7R+shaUz98cdqoamEcpi+Vvo9eftqpo\";\n        sout << \"/tfL8h88W/BFEBPqG5u0CrSasq88l2EWUflOfdHaVjPiUpA03DhJ6d7WEXIgKqR4KQ2QUFqhft1V\";\n        sout << \"x6XQ5c6HvkYEA3JXB9WY7pqwhh807ucN0Kp30K87OElOIDXe7FWotG1Nu0IjnhIK93NW9W4g9CRw\";\n        sout << \"jDvID7dpdENEY4wzLG3Q+PX6srxE/bjKkWXRrIVe4egRq1yc1BdTPd8SuxHKgVvQYGNlDHZww/Cm\";\n        sout << \"sdtNn9gO2AN+zouZkXsG5JdkJVoGZq7SoLF1JNiBi0asFYTD3y6q6wvfonilbZSnc6V70VVmjY53\";\n        sout << \"NUCkcTs9H8acP44DwzIAMSm+IWWynZnEmul7B9+ViqgqsHW63Q7AdBCd1O9oqYaLKa16iFiHXAGS\";\n        sout << \"AAwYVBuirfpq/yGh2obX9w5LuIfc1Ohmm22xT1tL5Tbx1y6rOFL/LirpgtqOKACxNbxiCzEvUEpB\";\n        sout << \"XHMNDcX/fRaVFYss25guCVEj9/YsVcDz+lf0+qb88TM8LGqYCb0A2lVHbL1O3jdvBtfw3MXHX+3f\";\n        sout << \"UqH4kjiyAkgn/TLXzlbEjkGu9EdImol1ikOMjffpoXri7J3Rakpq19cJcXZEfN8Nl/J0IxjghnQc\";\n        sout << \"/Ge2ls1WqEwMUrKyQfRwoJL8Pe/8JErvyUuIIIjG1PHDPAUDmEHVXWU7wDms6GPAxh5hWM9Gwghx\";\n        sout << \"xDxn6q999jMjBmut7Xvl2yozhYpzs0KCNYzpFwSOyIjfwU/S1SvpXbV/fOlzGLqM8uDMveoDeLTG\";\n        sout << \"5LmSt1eI2ZMnKoDquGtw9Up/Wrj191RIHkurW0RubmX95xu9KJaLOSQ07cDP/FDiME9LyrHlT1e7\";\n        sout << \"4DkaBHyVw9fNhbeEWjF9dCOT/IQz3dQhiNizidYZgJX3d/coX3xjbBKhI18DAtQPLdx3EP6IFcPe\";\n        sout << \"AiU6yzb6lcthTbZ+DAntjRMbEh4sCd/OtjC1HHKm0foDGYcpsN6R3pxA2fJ13yU0ZPLYSJT+3hCE\";\n        sout << \"vyjvV1go70WzRw5TJ02F1ROusAkZnL+LVJj5cOIKQ+MNifUgd+jtwdiUhpFs4HWEnDxq2tWLNf5d\";\n        sout << \"xQ3igiJjm1MTfsrex6ehzwmyueSZKxTBgVRQdLTcSSSiivdx0zO+/TqN/0s5WkgCufzMm6uMf/1o\";\n        sout << \"eWPkERpbGs8c740XtOwHi/3JxDC135mV1Gfau8qPUA4VRqfTKMKwcCk2j7SYzx0RaQvaNDa94aNd\";\n        sout << \"a8gVcQhLQcStjdUOR8smPQtqtEoIsHqLLXDZF/3gWIEjQfYjbchQcscXEi5iM4jMQCP1/Gf/oR2s\";\n        sout << \"BY/eEjhzUNnDxyikEt+idxkKLnuRYJoRVTzfCk3Gdlc556Vz14By+uKeAmmgVVH2+U9WtTMOO7J6\";\n        sout << \"vlpJ3lMEQ9ANonhWe788Jz9pzjzIHhx2UfmZM20I/t4U90+iTJ29/AoDc7g73bHfzugK+2WpYocd\";\n        sout << \"ecImcUaQLdMqL8gyK882q967InpmujoXoDo4hrqpaLsowHhWiAbcPTIH6hrvkNYJ++PYo3QGCYwf\";\n        sout << \"z7z1vc6pUEuKEx02TvYO3PX6e/i7RVBQ5HBjVsuNiAw9ai0fsc9sKjwOml7//NR/o6hdFvNnn7wE\";\n        sout << \"Qk7pP/kasS/nVGYvsxAcqQBBXRDfDEB1mpkZX2bcNzZ/PrP5t9aS9t7LQYfqA7lWVgY+brfPTdmE\";\n        sout << \"haXezSHgRgy8iQjBAVdBl+Y972kmR4zZuW/SiK3mkOe92GD0dVXz6l4/HL5VFflONDAHCpM8s0zR\";\n        sout << \"HIlzwxAHl2wwiKqW2LtUIfnHA8Tb36Uix1nyKcGiYjHtv3+mc13GzYU4KZ4sj4suUs6Yr/XEtAXm\";\n        sout << \"WYO9T8LJ3zzbxMNJZgsVHWx1UWKixJwGCv1HrEAzQNmm5aDBGYrutpNtcC8B2DKIBex+IGlpTwrJ\";\n        sout << \"Avo0T5uJCfw3hCNwVpoSvpaOpP/hFVJYI5RLtDQbgshmFI4iFz4pIN55qCA98tYAg7a1m2g4CH0l\";\n        sout << \"1R1ErZK5A08UpTFnxKWS4pVB1XAy7hqtEd8YTADZvNpFTkocwBFsYSsDU92hTS1GzEQ3+NPIj+pg\";\n        sout << \"i9G8bDLaAY/bojHUktrnaYL47+BmrKQ7N9YWtFsjFrOaS39NIw6WUf4nPd5uxcoqlaM59SrOyEBT\";\n        sout << \"r4emeEzPDzF7GJd69qFOek/DrjX87M0rDcyCOKABNJfIBaeEJKKnyniWOx+ZN4fb9meuM5bKTqr5\";\n        sout << \"p6JLFbf7WFzqgs3h7tOcMhSvpVv4ve5Ap4yx4w8ftImJrW8f2j/OUiX6jtA9shoYI+4DOqYL1mRS\";\n        sout << \"xYK5WKMnkftUB6lK1ldv0ogi8Z2Niil3ZBpWqhY4+tuEvTLAT8nQtX+p9/gtHxNCyGUV9nQk/T/N\";\n        sout << \"lN/kBTdZs+KzJ0K+AIi7K1t4dVKggZ4vmqYVPj2WTKHboSzNg+oxAL8VmZAxnY2bS5AFR4wRSLgF\";\n        sout << \"8yQj9xfyDKTPRK4D7b+Axh0s/ra4XzE0S+M2wk0cmRbb0I8/pG7yXSFzYPM0bVhRuiTVT+mrxcpA\";\n        sout << \"qSJRKzFQ6h+KQLSYUVAspQeGnIQX70fF1/BcYviKGzwiN+T6zLH+thLJnZX/lgHwZZOtHYnCaBBc\";\n        sout << \"t1WFi3G/Ex2+UHo+nPBCFPq9TNEWcAArNxPwPb9e2H+ZH7dNgLZjZtGQoEiEI2uwI5l7/X1++/3N\";\n        sout << \"EWAKPziqUxX1sZeW/T9cLMiDsVajYh6wqn11+RM+lCUKvYZym15JcEKAxxsFxo3S3gbILFXSy6IL\";\n        sout << \"AkGGUsKtITt1LB3PO3sIare5OP3YAk+PzEVZcwp80V9dHq72cSskofr8hvUkzsBZ/iH9dC1dupTF\";\n        sout << \"UbI4YOrA0nQRnvx9AQVrPldyzgxv9y7mVakcgLLpd1YOUDS7We9Wh7exElCVuB73RtXfcd7hEjRb\";\n        sout << \"fu0xg2KT3wOTQy7WDAnidLZLtWeKRqDLxmO/W7370N1TgXS2sKLG6lGk6UY5mEOmoLsBtu6G2bRj\";\n        sout << \"QIZnC0q9x7sUVMyg0TOZ3698MgxWXpvNqocP7+TYdJeptTkg0RZdgON1WLlCs/yBSm9DYpN6u1ak\";\n        sout << \"pr7GDx/Yira5gaDGvnLtoL/6L4/0bUH3UJmeNACcLec9V+qxUJnYjQPYPjGjALRfRNPV8YRsjWBn\";\n        sout << \"eEP8OJG4i1dQAif8ehmV1Q++qHcmf5je2IQwcsrgj3+UIw6urMoRWVwDISw5Xy5Y1HwitWZ6VW2Y\";\n        sout << \"eeeLRYBIWAsoJAw7rSyLqKjaihO8rlGw3IeVrAHt3k12wX2t2f7eLF/MKv/8JjK7d/rr7EbNKrGA\";\n        sout << \"iyp1zQFtenTYrjr1/Wh12/lmTnipKS8ZDCJuMM0i8NTXB1fuisqNI35HCuXXoJQmc0Yfu0jA99jL\";\n        sout << \"T87FUwkmKQA5+Q0HV2C70CfE01ALVU9ZbdP80mvHlMhiLURPjRmYjXl++FKpHU4wvRmflXG2K7KD\";\n        sout << \"aKccgkYqc+Pw5T2AGX5LiJscIykcNaMLVtH/QYPasG8jfgVH3dENDXagJjuYDwkROZ7Dm36vvMZG\";\n        sout << \"QkRDHXApzY0T9GizL6V9WWflM0lopSWELw4HNPExg+ZMSE1eAebW58HHTDZEnu/Yrr/itfWUid8t\";\n        sout << \"od265bhRmkCVeEwIL6Kt7DBdDVDu268mwE/OlCRmE0Z1XHDIR8ggVbDjoQHV8Fzr9YCM/36qexHL\";\n        sout << \"v5VxMx6PzZGBMIGuPHIiqnqaDPHhVpMGbD6Xowd50iE82GANJrgulQOlIg66T5znMtXg6g6hOqh4\";\n        sout << \"WL4qrPm7T/2mH+T5PVIR/D+VJSoEtnRLdnO6zZnIZp7tj3jXjhNSo+YGzZmdp/H1iuSqC6GuWKue\";\n        sout << \"agUBFs+p5Zz/yMrYI31yx1URhmsLJrIQU8llICpkRo3uqhPzpXcZs/MZIS5pWniqIfGnqUtzeusS\";\n        sout << \"bouAVAOgf2rModIu5NWIwdnf+FEsDsw4sYDEI0jkJD8StwBgTg3uiq1jV3FP8nHWgu/QoWWXGtpx\";\n        sout << \"u7OR7HYi+Aq4lK6sVu2qld+deujeO27r4atK+wQfmbuPyjJugTMJEdLfT2SkkW9mN2Qx4jPmABq+\";\n        sout << \"5tCUgibAdWz5SqJBDr/jxW8WZ5YCfAhLifSbTdcM/IUF5Nq+NCT9vrcWaUak2K2uhfvoJjN7DWVW\";\n        sout << \"6KZMzeN5XIRKMZc2ItCW7sUmAy120f3LWzGZtlX49LIY5nsawUDOrPIENNab3CWEPAuKAciOsFU7\";\n        sout << \"CV6BvOxRekHvH/6clgwrfSCGgJsru77XV43H1/wZciyR/4QDMXPaewDGxdH1FNddnkZVAuYWrRzq\";\n        sout << \"PF763f2SQmwM5GERk2bxwr4eeeBWBRqMCK4ZNWpdYBseupT694Rrk/bnUKjuo3kwYrs2LzRXDJVz\";\n        sout << \"Fvj0UjorGcr63LSXNyLhyBGo/Uhn7dgtVUaYzsY5rChqvLthaBhab+268cfGyYhacN/E3vezmySL\";\n        sout << \"J1Bj4twQ+kcbWWQE/Jx5zGkgorM3Yu1vbjilzv/UbmNb+Cul6MgnKDRFS+cGQ5UMw2DD9OyTKJZ4\";\n        sout << \"5k+BcnLih6kE/s4UmFkeC4QRqLMBBhTlScS3wXS2lFsvMd/BXNXWtyFtk+dUP0AH5tgrRsaY2/h8\";\n        sout << \"xTgN0sMK70yvSzojbnExkON5mDszehIEHnfBlL14eqImQRiUKlGQlP55T2AKSYBbpKFJtzy+/aXp\";\n        sout << \"SxmkYMQcvFD+AH0oaqJFaB9JBLT7JW5D4ZwTHpMX7AS6W0LxgriTgPZnSqVgosl2DZLKBUt1zXjw\";\n        sout << \"dbSmrROYcUAXJxMOAj6jNlv7nMkn2xV28QS7lFE+aq5yBIX+UBTF1uqk1XI6OddMKrtzh0SH9Dey\";\n        sout << \"q2NWoOiH5YIxHHbWx2c4fiFrSCo9v2JQlk/rv0GKz5jX4GEI9+UPWzr4MA6GzJrYS9cydN/NXwY8\";\n        sout << \"lvHx0e+zI0aiQkbZb3hNnWsjQ5q2gk2pj4yT4zCFhdL9NBTAwWrWqjSi/Zf8BU5R23WHHMMPBfEj\";\n        sout << \"1gX3IdAZXw6tNUseFnBithp1Zo52/Rv+OUyNIC5o9whYx7T+e1Yyr2ytlKeiAHOWmiP8h+Mqnb0l\";\n        sout << \"BXYuP1fiYcGClI5Krh/05hb4CCW0n385qHMIGDiFTw1emVktV9OTiM0Z5M8PUHDi7IGUyrJcwXyr\";\n        sout << \"Bjh5HwdrsCA7NdLqE+8QPYnAPj+rMJWw+xrrlcPSpRBTTPTPiVnn/PXL6khN9lBiwz6Kn+X61bhO\";\n        sout << \"8yN+OP1IWu/DZUzauOoVqhEPEARq316Uj15VXoPpy2oa9/L0Pqzna3d+8/VxnSlWWo7i7bWEXbc5\";\n        sout << \"N9OKxooZQ6XAFihvJMIsVvkYp0oAQ4AIoOLUSm0w0ejFIWsQ/goNmLj+CQneb3+YUpdYtpLODhln\";\n        sout << \"/4HgBsPjGnEug/fzuWbEqWXb/e+VL8RUX/r9nXe2rGeQtdQkdqsNj8avFShnnth+UNk/2TRAq9Cd\";\n        sout << \"eDYJMWOQgP9NSecba1B8FGmBdvC6gRsp06uKfGesrktOPlzgKmZPoqsjHhrLLV58KwTavZSoIriF\";\n        sout << \"Mzj6ZAalNMDEqUGuhtXZrhTVoRiYsy+3jjJ8IubSS/RxiQfPS3+3nudS8jzA5u4uHJcy42t04z/l\";\n        sout << \"NkN5/kjem3F1fAu79/16XeDD/wk9A7FyjqsnyvNXsiX1yKcEC1Bw/yxCh33mgcAlh5ilP+gWc7sg\";\n        sout << \"QQXi/dnqQebktoqyUYklPN/cYQpCQhhY+YRp1wwbLJYWYrBXiN3TbACI1koRROZw8pT8YKG4utqc\";\n        sout << \"P+IjOrAVYg94bzGeuRVI/T+mpmGHs+lsgUY/WLx52PqnmLgBORLHZzM1sFp50ALnbYah3gAR19rz\";\n        sout << \"twGYVQXIIhK8rewz/RwJJYwSvilMiJNx5UqJc8VFaEnwKcr2QTqlJ9FezDpuE5kvqlYl4tywsnwU\";\n        sout << \"ta1MB0FXAC86i+4pXWfaRt5Y1g48PGEI3TdjkpiRJwEQ6YGSoDngFX5K5l+rZePE6FHNLBoRcIp1\";\n        sout << \"5aNK7cS3MPyb1MN8zhjX400wFp208a28cBpCH0KmHvt8+ip26ejS1C1/aLvdz9j9sQtixw7JU4Jb\";\n        sout << \"ytPOVlxKjAzFFFdaQnVEAkFCKetYCkMzrARSzcLQJcBhhChb8NQDZoQWxe2286/y9p1ImU+jHlzC\";\n        sout << \"iTREz2ADRBGQO3JGz2h5GYjU6YjZn6ojyUyMECTZASV8RbvNy0/8yYPNONYWm8v4/LLOUM0fq8iv\";\n        sout << \"xwag9U6L0Y+TWtW1YD13ThbTjTrg1lTHKzyp6KeGWNWGH141FgXz9+r04Qkvulcn+rGimg4SuvNJ\";\n        sout << \"XLotrbWuhULd/esyJIAqfTtHzHZMSBoQ0WauyWV+so3c2rGDjo197k87SJkfGp+l78kqj03jh6ev\";\n        sout << \"WyjhQZizdnuNdBpm26GnuDYmZdEaOAADCtkR9dvMWdeNsDCjyRcCbFEPiUX2xduSbw6aulm6mW4l\";\n        sout << \"CckSOv3l0/pfw8bTKEszFqeXiPEI2SwIbSx9R1nWd62VVDrYmAkAXzdJ33QOlJm6YJT97+QuU+61\";\n        sout << \"RVXpRanpmC4Eh3jEZKV2BWIuGPXzrDGgAHoHNhRG6vJ0Kp3RqaxFv3cPrLZdxDnQhZQH01O/dZ8S\";\n        sout << \"swcpb3/D5GdWvUS6MsIPhO+nhoabkyxwvbBNzyaLVDoXZK6taVT2GWFyYqguu3ubVBGd0H0Mksh9\";\n        sout << \"luAh4ogG6drswOFxJhR4S8VIMkF3x8PDUj5w8WTC2nlhxIYVh1fxvdj8fEfIH7WzBElS8vpZ1tXC\";\n        sout << \"1JSgHngiEYafDFX4OJeHxKFu994g18YvLkJDdQKzTDvOiD9TaKnnaSGGXZuasKTtD9z87GX4O84P\";\n        sout << \"rye5DvbYUP3bZx8GOmhf5YsaLI6b5m+iX0Mm8ulB0hOla8uE6EfLBovorLCKke5iPFU/gynxeCkR\";\n        sout << \"8RL9zw58ATEm3YuzE6nDNaIekqV7Q0MqCpnpAdBPxjtEGo9yRRPeu8SSSGL7IGKUUcr/6Xp8ooyK\";\n        sout << \"iK4f+mB0hgO0pQqffQHkEXxGg7Zd/eTGAO/n3Acq6bjGr03T6LEO0KFJl1/m96ZEBQK/iiV4m5+V\";\n        sout << \"bZvr6xOrErUE+ih4g6vk30cSQqFvyH574K93bx/uyydqzyPEQTZ0oJmT/KoUrYti7CxlGwrqPDTZ\";\n        sout << \"AuEOwQGqqxoW097Ql1bpxekOevJPSL21snAT+Lf7JZ/79YwZu2WZnWoDQRNNm4nwn5M6IPmErESJ\";\n        sout << \"szsF5VmUs71cj2/gnK7NDU4c1kLjXSsVVnN3/VL1mOnYV25Nh/ktPRfTLn1TDNG+rkdJDjGcjjSd\";\n        sout << \"JY9Ro1Rab18UKm9nE2tWjgbNUQbzsisy9P4F7cBLBd5K6y47wRYZ7MamnAUZMUEDmIiO1SR1uLey\";\n        sout << \"gugfd3Sb93PYjImZCjulVD/w64IThgqDIgVd1BOdAN23laLSQpfuR0xW5k6GqGtiP98VwULbV9rJ\";\n        sout << \"thalp5t6mwsOdo46101N512/p70XcZuX/VyFxw3bGO597RbO2nj+gM4UanMOfTEQch/kaJsk/WTu\";\n        sout << \"m4QMSxd9SAn9/aRXKR55Im98Fx/m9q2GB0vn8RZqfqHAqjmO6F3usDuUFxk0kn5Hq+8jXBephw4/\";\n        sout << \"YCOP8eBKnY9V2k2bnQO/9BWhCyuwun8huNz6keaC+qa9PFFwXmAf54BIYdgr+NspegaRej7bOISM\";\n        sout << \"WpHZ77YuKL04uozXUz6B+0Jy/zDzI9EgLTCk9L1CUpGPSoNGpDfb9VqkOdTvjQphSOPB5PxD7NNC\";\n        sout << \"tV4tl1nhB46JCCEalhhsip0/ZEtx0Hd+UNxYRA+qjaGiEXDPPDyjbYYHWNRhYKo1SDJLVZG8hoVh\";\n        sout << \"stl5hebAI8t8rCBUF3x1HrMRdrRX/GEzLfx8xZgk/YAegRw68TfN9V1bY63aRS712i/twY6KDxD0\";\n        sout << \"V0DeubXqkK+N1ERAn8ygvQ7EJNvGbp0OTu765R4zv8y9u+GqdmpA5E1Ti6+2l/L6008zbYQVWG6z\";\n        sout << \"ejkRAp4UjMSDTf2zTNjP76zzQQOQwsmwodggF1paT6UlXpb5HHp9osSrdwGXb06FiXf2uVo1rtSh\";\n        sout << \"Stzfee1i+BebVOqKM38qGjBhXwGiiiZh/mwuG4Fa4wOKlrqaTVEHgGm5N0uxr9by1E78BXj7Nha7\";\n        sout << \"XuDtqivJf0brsiAUNNtfUjBT5WJrj+iYT16Zs7ds6Fm60mdF7vSBrxXPNw7ZuueSA5xuN2bkeP/m\";\n        sout << \"CQ/3N3lGgTQlMNkMUzgY37ln3xYCXGcMpQ67ACMf4gf3l6FhI0S+JMwzxD4XMZBTxgt/2YX410Ia\";\n        sout << \"ZijtokULoOBQRqLjxREcBBhm+tpSSU5cRb071EVhz4K+aSN7PfcFOTMC1mVGy4cibxeRIq5Un1o0\";\n        sout << \"NYSkHLiVCA4OCLkemWvzxswd9Fduc9mK11xyqBPu688yHH9y2e4Fo5YjiKiZynd/kydWuNsYM9i0\";\n        sout << \"U9ukHpMFmrDmIPZJMGDgZm0I2QPvoieRcpitQwNYh5x3cvsEs3eAAc4mfxQZUR+v0gClhfu7wSn2\";\n        sout << \"XBPPNVyzE16RK8q96Z+w1paaFKHR2t4TRGhmeCcxR3vS+jvqpGaYFJ+YJe8hvJYK0IMZTBSPg6Qx\";\n        sout << \"Cx/cwlr7gStMvrFBKjLGDMAsrw0OyDbIe6/E3Erq43GHsAplYSxYAvOFZUwX0b6VkfAB8CsBnRFb\";\n        sout << \"jnZmZP+cZPIySLLGJJm/oIs/Hy1wYuyn2XpI/uCuBDZifE6fnNzdpzQ0BpH3qjaIF4OV4gghhruD\";\n        sout << \"toj7yNaS1FZl8IhQ59Z7P1eSvQNulTHYsfBw6E8RE780AO+aRHAxVtuS08RWGrde4wV3ma1NzMaT\";\n        sout << \"6fHsCr9IYY1qACpBtyGz389+cnXpeN2VZczNw7JBx3VthteVNdpX7cpftA0e/mazMuKLX0vcBfus\";\n        sout << \"/p3Vj1SxPevb5pslgkfBTVcFxmEM9Doy5dSKQ32SVFgYwTppEuyviNKuUzQWwO/XhsL50gcuUhyU\";\n        sout << \"ELpBLIkpABrbGRa9K9ye5qLWYYzzBzlPoyhEwt8cWi4hVnafg+RHEJ7lXXQ5GlEMlzxPJw18LwZs\";\n        sout << \"jjbC/PE4abuILrfHlOygD1CqQeYzzBN+gwwaTbmquBtZyIMvGr5FrRqz6sRP/W2OvOBN5iVSUa50\";\n        sout << \"VjKdnNUwSkeLCU14Lp1zN0WQQVVNeR3o1JfJsGvQNjD74MnSlHTFSUYloSFgHbM2ANeKgiYN3uB+\";\n        sout << \"xLb+hRJPxIwiTshZyclnLmv5mh63OWU+7afdA07BMdmnK77uFB1rdXFJIWUBiUG8u2yqUk3PKVg6\";\n        sout << \"9rJYvVu3eA7mjBqRvL//koo7VJt6g1Hj+8lnqu71OwsodU/t+W4tmcIKP9S0eafHEQC6hYCu8b5v\";\n        sout << \"QgVuWf1LnTXwTGbm1ohar6OTxyZV07nJGC0xscQ2yzhxnssaCoAw5xFUzFrgo8a0J1Nj9aOaV40C\";\n        sout << \"3y5lP6NgiO+3r2J8wUcKWEVFLHDAYMXiMfe3XMp9/ERswAGSkzfXSxZN8T4RPorh+pjPH7sZJExm\";\n        sout << \"o4ZOdqaWLdLS03+0kRuPXm6FvZCaMY7Hz0e2Zv9X22KYmXluGqcgErFTjYWhQFhcpt8oZA5T3mU5\";\n        sout << \"NDE3qI+bgtkN9vvNbhIrrOH7mKm0af/zrHA8nnU33sc6Gnv0wfCvolpiyTqla+HU7rwapX0+Ge6j\";\n        sout << \"SZZht4l8OPe3/mSmwGjX9U8xWxiIhhr9VbVxZZ9UTnAhfcceB3TrDA7F2SxGmfBSRvQ50uRp9Yi4\";\n        sout << \"14Sasx4kgF6e2wJh7TBRfDMQM6dew3rmIn1p7l8f43AcBe7T3rnWB6UJ5eh14+xb6HwyT260Njvy\";\n        sout << \"vF8Z4nTq/1MCLv3c4lQoO8yuhFA+J3rWlYTQmc2ilfWbYpdiAOxT7k44QYoHTZDS58anIywl9J8Z\";\n        sout << \"uBYa+giIPDINPDLGNobNEPl3kerfygAFfVkxd33eO9LwDAMGAZmbywt/OwRmraCFhT8Qz9jygFse\";\n        sout << \"mT1tZ7+hF2rfTvyF4OiTz2nutfzVvYQ45DLjmbHFQsHMVGzU6xdLQlZYWq+h5tfVng4zhwIge8tB\";\n        sout << \"mA9ndgrTZx5tspm45fVKTjE3MYL5qNsmzghyfasarz1MOD/2wml6uzWZjtljHIzap5gtIchaIF3f\";\n        sout << \"JMOvFu8Y4R0Fu2UNkbOfy/YLRnKlUHEChwTeEavSkaHBkprvRZJuMsIWcvEZHDIWdRte0qfNm9V9\";\n        sout << \"zWmj4B3RchqvXh5XsoDkMqergDisI4gCiHFIxzzfJBsX8TQDUQIvAGk0pc3ib1/6xwCvLs+NXC+8\";\n        sout << \"0sI9e/aruBe9uEXGya5n6Vqy8z9soOoBCcFqc4B+1ZUOyN2zpIxVFd9/20NKmp1W8RjRforBvF7F\";\n        sout << \"2E4IkWh/3RcL8tNyPpWkAA7Snlm8oO8L5cc+lMx0ph7DzYX5NcIc6V7otI+Bd7w8xLSVxzfX3Awu\";\n        sout << \"S6bjrU2af39KbPFq2LpGOakR+1gAh15sd6WYscozdkSZu7kGpuEppnuMxYFmbMrCxtw2lDt4IwMY\";\n        sout << \"ttBHEP2XwF5z6DQpRqsWBMcuBbztZ9BNa3y2aR8pASldncrnRjYQ1Iq6KGrHeau/uq80ui3VPbOD\";\n        sout << \"IrV/JeNFGet12rX0zneHBGYUxG+Pbso07l1fJxd6OgaIrwVksovd1psBmD6qYsbc3V3dJLacNOdt\";\n        sout << \"fvFnHWz6EDWivzMDWvumzAO1JPVFB1TebaaWaINSxaxS3h3IKUVPTu+2Ytw4Plwt6fc/LakedkFH\";\n        sout << \"fxE4uN3LR8Y1bKQN+/VvTHXGUtf+UyZx/VWHaxuiqoxXUazpT+l2muie+/2l6v8JUCBTUYwa+2W7\";\n        sout << \"WWvrBxyliD2V+KaN4dybWey+3RIp68UgV0gP8h579kezx0+Q2Ku60vjCIKJ4vJB8Gt06a15lHOmx\";\n        sout << \"WcJq2DmQuyWTXsqaJPuljuHUhqYWMPnqY9gi53ddw9SwcpgE8cCC0cG65FKn23C1Ihh5NnuBohYp\";\n        sout << \"ly/QVOFi/rGW9kKrF9FW7C93p2DxgBhygKC5E582EIjRXm15bQ5bUSwxfYfQ8VDCPlL1cR4yhpqf\";\n        sout << \"CpAd5/ls0MJ3SFgUS4e96011A5intr3a3UMPqdMKWrwCW6cP+7TJKC22+LwvAvyS2dI+NdyLt0qY\";\n        sout << \"o2t9/ml4u0bbBjwl24o/CIvm7T+045fz+3h4yrKYYPSbHPgGiN0+oTcGhtjBgtil6WCBMuzgEn4Y\";\n        sout << \"zVaTD4gQV2l6Cnpi6fi3ZIOwuEi8aqfRdNrPc8+Rtik2wWdmbYZ66d52HweeALKwfzIm1DESb/Dd\";\n        sout << \"qc+pz+yVNmYp5fffsjf70WrDyGWMDqSVvj3tXMkxKiKRetutfs0Tf3vGDdUEdTmtw4rEca/1K8p1\";\n        sout << \"eNpotuLSio7xp4/gz4cmq3IUEXzk7b++TAs6GAq5ddjbcTJoyRSnOhu2oetJGzWJSglrWwGpAAoC\";\n        sout << \"l5jHFfMXIyi4lggUHjIcpEosLLxntEai5cP9bcGzTw3bnnQMo2mI8bCKSrw3uzKapI6MdDJ7fXZD\";\n        sout << \"aR+zuSlVjO98VU+BugUHWJcrHneh7tRZ5ijux8t2d6y/iGeJm0gs2C6ukA9PTwSV7UxnmVOCsGqp\";\n        sout << \"kh37fINlLQWIjS+fVQZwYcm5XyzPzsyHa/x1DZ9CJgSaLrOCm8PDPk2BHFSdoYMrUGn9CSL6zRNN\";\n        sout << \"TL8KprKSZLrhrk4wtgRrTAkO9twMovO8Pjq/xgO6djfJygflU/Yn3VPYjg31O0SQLXGQLTL2SMcf\";\n        sout << \"NlIqmLEov/m6A5cs5pJF7be1yX0XneDEa7arl7v4tcvMw9Ot57OytQUTbFu2iUb6zviTVWMEMJST\";\n        sout << \"eLj7c/+RNy+lhBjlxG756YIjtWULrrdPBkie+AYHMSJ7PnJ/QAl3D126W7D9ubCjagGVZ2cLX/ft\";\n        sout << \"/pLcIuPRcRUeL/jTGshsfijbq8us89JPjLS08HMiaaPhTtSOKbyqHwVEvfu++thQZsu/3wM8f2a8\";\n        sout << \"CnKdaRAkLethTUyv2xNyQmx36Qg3LVGf5W/tzC9U2AQ1XRE5l/IoL1AJ08JdQDqHSAEAiw0LWMIW\";\n        sout << \"a2alrr54YOp0qiPcRTLKo0gZLr6Sy4jKmQqEFrPCxqPSGMe2pc/pzVuxlYhW9fDMjE1vvfzmWnhU\";\n        sout << \"SSTXpxONjtMDtFWol0pYyjOLyJcATXCrOK3PXPX50e+S2Xjl1iJezlgtdqWVR6mK8yJ63GyAtjzT\";\n        sout << \"oBIBQjydPb9tpuVY3Qy129f/Pnw/MT/6wggYCZDuhhNmOqmSRbm3runLfwSX3G8XbN8LEw94wy+n\";\n        sout << \"yMs17FWzTwWk2fMEIV88TuqsxDPW0Ko+a+OuiOQ+7TGVdOLxtqmUDW/3n5QA6Ryc2kbaFhZAhONU\";\n        sout << \"zJXyJzll6UPZfUsmAiX3u/qyTWlbB3EKngamgmD/1WNGX6ysD3RYPu2olopo9wOqihwweOtxfQYr\";\n        sout << \"QdXhUKreENZAZ/lOjn0tSfAFsB21/MuDNpuz37dI0ACfvKyPdGnFpNocIXHWmSWZbOB6OypSbzMP\";\n        sout << \"5r1fNPRk9qMY01lKWRz+lkFGzl1vbfKfSO17q073cCPouHosT+RpE5HBBf6E0yG84m5o3u1bLUBb\";\n        sout << \"8V4YyMREOIa/2wkUH99l3YksFc3eeUMzHSIoHrvCQq1CTyaed3tNbZw0rHPLzwSSgQMZAhsi5mxp\";\n        sout << \"ZnMABMsXSHdvgBRkVn6PH5rjrKAcSnikddL8F9/FXvJR21nKfo78g6RULWdlcc8tPQR0E+PyOoLW\";\n        sout << \"VR3yw7L8Ddl1zHu7hoerz+cM4gW+67kjehlzV+BAA70h43CfxsmvZm0Kaw9GOkxjDs8F5b5XRtdN\";\n        sout << \"gxh9Y5o/vlxI8f1w388jL7od20NPAYSqvONaJjF4nthDN+CqlNWjy3K44Xeghk1o4smFlbJM1ZdM\";\n        sout << \"taj+ZlPozWzYEugvDe7/9woqdFtYqCWDlIAcMGqw6QGFGE9EVwP25LeGWnM4bcSWkdP/Fc+Bpssq\";\n        sout << \"QaRpCt/+Igw9C26fM3zSM3y+RfDs6dseYokawF7xp7oo++opFuMO18Flo9dJw9HeXMZ6R8lXrNrD\";\n        sout << \"l1RWaWakmYp2KgPJYT9USAV6S0JI0m9MxL0R0t7XT23cWgtQsG1m/gLb7HT+CFNm4SYnWMGpza7N\";\n        sout << \"4w6hXTItZLuRrC3pH6AF/m8MuwdlKJEkTn0Mmu0e+MVe/DJmnA2w46oxML03wNy4qZMj0LywOnIu\";\n        sout << \"Ip8p1oLIviccDGpnXqZORZGVMqzuidIfNBSgalxT1A+ySEAVroXtGjtW/L7sedcTElNyK+aspa3l\";\n        sout << \"O10XSF3gjgcZnN7W1j3wiqePmtzL/RlZj81ruAoYJRWaNUDT28p67/k75Uhl4Sh7qWwc/mJnG9qm\";\n        sout << \"rvZSX5GiW11EJs35JJ08G3UHAUa98VEIOesPMaL1Wr0CVHFVC9eW2iHwEq6vk3JrGfsKARrZgg9B\";\n        sout << \"YDhkyO+3c+qNgTk1WMC3MXaSZg+mwqwx0TGeJRg6/+rcKr0Y+y0ZEDLz3kMD/aihZ0ictCZlcYAz\";\n        sout << \"8pqdirBd1Dbi8AaMCJTWHGWaOIxmrdU2XyVWVk5Vpc0rmzyc3ya8WfXjkdDzXKUS1IIFi34b3/7G\";\n        sout << \"qYpJNqtVAPT1TXnnM+2koRgGaCARu/RoKzl169YpDYPHVJuRJDjy6lfrKNEqPzJY9phbh6WhmZ4X\";\n        sout << \"CZMPrgnrs+0Bs///61zNUJA3fArNyessRIkZqSxnKjVOHz6/LUB7/UzJXAd/XfMYi4yNw72BSAjJ\";\n        sout << \"Z2AdnjGIO9p0E2KIOVx39bETt8l8JKOyT4JbimwFT0IN1AcvwH4wgwtKYAJ29L0kSNoBmMwaKCAj\";\n        sout << \"1I1b8usj6EM/OUjn+e9xmLMkeAUo8HM9BvLP33TuKJwLINhNcggbZVeaFSwBsvj6hEQ8dN06eLJ/\";\n        sout << \"yIGaRsni2n6oXeRUo8/TVWmNIbloEE7mQUuttR1pVBdkbJsHGWm/S5hwEmsKKOpvQo44Rao7fsDK\";\n        sout << \"cCtKATplclwuCDCPIogRMkpHRSSrHUKE4tzdA7rWWj/jaYc1Sw6hG7OaDFSWuP09Qq7klmC3F+0U\";\n        sout << \"CIAtQbKJevYhCSdWHfo4THHFR5CeuA+shfbdWyPNmP1HRA3pvo52jSsJi8HtPBp6XmGmM8dN8Vaz\";\n        sout << \"pG5d28HH76fj2Ny9McHrxGFaV/WhhoST0GDqN4PnqV1X6d05aBKfwRbqdWo2XvmrC2YNI7Ou6+3M\";\n        sout << \"Ovp0NH7MHXpLY0B+GMf+x2X8hoXkffnGCa5CQ1SwTbZRkeGjejwGhpOybsOl7AaSA/fqymEW9JMF\";\n        sout << \"1E9XEtZtzyATkj0cBUlofwC6N3N//altqBAbmDKrHThV3SDsvn+tpPiZG4+pQQOWqQomy3QAWwVV\";\n        sout << \"nZTorQIvoPMUdJWPwsVLaRldOrUEjmK0OF36+QysxIJLgj9x5uQDymixyS0Pvu6ybdB5Z+ggH+hs\";\n        sout << \"A4wt9pW2wbaOGU6jjYN42C/ehSOClqGP9JE1qejqcLRAXm+JDDFZGmCBfZRw7W6R39cNfrbbACVF\";\n        sout << \"de9yicnqvNbpaeAWAmfjrwg0QvVVmmlvsgDinO2OdZ+TLx0KKj+4+Zrt0fFfXQgUa2oIFGoeCuQv\";\n        sout << \"eyjv6ZUnkYHtJLeMDfuhaxaV6dIG7US6tdGcxKxw0/Z3Cl1AqyDSOSeZIfABudI/tNrQF3bk/x3g\";\n        sout << \"Kb/i4VNKLwEq6O1T8HrZSJzTWus7XcQncGAOJWTsuC0/0Cv/Eg7pY87c6VtF2/kltcQeH0qWNix8\";\n        sout << \"qHpkEC5Nmjm2erJhQ2gsdVQFrVjxv+irSaO7GLhuVwFgj0pMzKDQTFvd49DRMyrwb9cml+u9MZgs\";\n        sout << \"Uqwmc0zXzCCT51uF3LMqVbeDEgt/Q59+03U1N2QAJXtTScjJO97PYZSJvMEPONjSI5AeRlRqpD23\";\n        sout << \"4O5xrQGkzb31WrZP54ZyZ7Gt4T4bxdwVIZSrgSrGJt8RjREWl6LuDpuRsPgnt85EKNRjf+icgibb\";\n        sout << \"sGxnWWdqFdOLHdPKDyeCTiJb/5dc9YvjVxWINlgOMxdYpUU1OZ1hX3OmDDepo9HP5OWA4GnGXR8Q\";\n        sout << \"cNS85y2Q+DS7RF+qxSbIO7hOcNL2PyFxScBXYyrkLUWWxzfc0BnyCaCg4lrMr6uH8vnM+7u16IsY\";\n        sout << \"0f/y4nxYNholE4Q9JlbhXVTBL/ZZaC4qU+/mXrEBkUVY/xj8NqYSicBJpv2c0IYwtf6hwOFdMm8H\";\n        sout << \"y+l26vbWkXEGS9XV/dKKKLbW8EqhKxtlRGB+Tle1HnOp7HhcINVwH97RL9vS8EurSNlSWJCHc/1P\";\n        sout << \"Ui+ZsmkNIQtV6tATb57g/AaResCtNWa7znBxzJUW4stpxdxjD7fLZxyP1dSAlXDluOaJ3vaUpdnt\";\n        sout << \"JqkG/gHcvI/0DK84ddN4VLKIZ0XTrCxvTQJLJcUhA0ENgzdIPQj96CN1XvJ/DdFxx4YKBnb5qyA3\";\n        sout << \"51z6P84v5wm+ciOVpTFERffXwtPPfro5z7/ZWazbUjB4AcOFxj5Sk4EweqTrVSD2Ujv3quBT8SUj\";\n        sout << \"A8Mc7LBMtANusOZeMURs5vqoI5O5hwicxsnqHJeGe7FMRRVH9lrM/+3W5dfm+jJ/ntoZJArHCrWQ\";\n        sout << \"wJqFWJksHTraWTJ8crxkGSgZzFhSHv5pkz/FfVPRW91XprikZvTlVhgyTFbB5gVGeEu1X+M1m+29\";\n        sout << \"8Gqo/AYNTsXS6KfOWnfc+jfQRkkjiLsBS2vsnV255hPBz7Fvr0mqaN6AawiESUSXcFBnfzWQbOdN\";\n        sout << \"wzA468JTsVoOz1MUXZ71hOcXpGMVdKN5ABH+8imVfDYGVUUTXv1e1Z41jrzXVphOQcQA+bJYc3mP\";\n        sout << \"K0HVQQfyuwo73PTJ1pINwbi4OrAJvTP1vEuo9xMtyc2d9zIN5lVg0gTlEE7uwGWVctS67onu5vd9\";\n        sout << \"cQ4/+1axVD2yy/Z+s9JGRZ78DA8rIUqVhOTWNlqmqquxf/mh+nY9Q3PdHfcpNoqc4g465Xe3CvO1\";\n        sout << \"cBGJT0vnZw1vV7rtQ2FqAB1LPAp0f8nIT3VExu/mABWauAImnDE7ZiEnOuiuq2vdS8WspLMjktCg\";\n        sout << \"vlvwF+7AGxfwDCImKSzh4Ph5AA1VuYW3sVQ5I3XuONfappCoJjZwiV8jyKC91rHY1/jP4eMb5vwy\";\n        sout << \"8T5ciRyzv977mW5MK5sx3ujnlVFWr8y8VDhp4qmhnvvswLIKBRbrmW7jkG8Jg1YB7mjY0rP0sVJl\";\n        sout << \"zICdb33DVPWxgRHDjyO189HiKWkzbH7JTQfKOBQwufTNQ4v94HlyUYNTzHg9S6nqI7LiBq8zO784\";\n        sout << \"hGYDRvfB37TziuwR5oHeQ0IiV3x79V0+qLUHMY7ZFpQB+LnGcxG41kvposK0UBUCPDLKsLNQDSn3\";\n        sout << \"ltl6K1uTz/4gjdLjNVlkpO05xJXjK4JEoG+siPuABINp/7iLAgYGHq2G9p8KmKiu2CLtN/g5Aa37\";\n        sout << \"pewz9BkOuvCHm+J9/V8+rMHTCxD3QT962/XOO+iguzglwO+YlN3BpWTnr0VhpQN4ZZZcZcucEze4\";\n        sout << \"PgoLS6CcGSP6xrMdnasvqM1kFCvgOn2ROITQEJzaakPDaB7fzVIw6WyusM85BSNnyc8XT2RkDJaf\";\n        sout << \"VTGEMba9qIAi36u+pC/PH6XTEW+x6nehFJu8q8e7B+VrnN9lkpvVHVDxjci3CHvG1QLPGl1GaGYJ\";\n        sout << \"oLeINwB1VTKtRtEyKENgc0MS2FMk2G81MoKGKVKId2oddu9ACvHqzQMbOqnzp0l7RJewHez830/f\";\n        sout << \"8oKpsUvl1N/b9wfTXJwN77MF/n2zAg3VSv4HInhkdGA9HRSg1JylghqBAOrqpRsh6r/TG6ByJ1uQ\";\n        sout << \"rv0aYvVdVaHQ0kHH+ma5Mlc73U0x+ncDjlicbrIca7x6y/b90emfyRcN0uEKr0fZWtcbK0+1XJXX\";\n        sout << \"WWMGGDUO5b5cJOpDzW7GJe6i1m6yIPPlfp4AWLa4M6F/ys1ONLrbXqjYCFJY4y62OeRK32Ff2zN2\";\n        sout << \"/Lw3hMt6iPTm7oiJOJjDcamybQlWOoYIv8tkEQYN2nCX7k7DD6z183yX7KtJF8Sj95nOeYpzAnLG\";\n        sout << \"YOfY00SA1cM4aLRUPG+FYrzn8UFF8Bl9UFrLXoJ/IxXOWKqrbjhsKxMvC4xriww6KZqHx0L5FWGO\";\n        sout << \"lcFkhdpx2fFeswyfjQwtyqsGsiY7MXGsWA7fA1TOv+FZhJbgCixrx1rxwJaNel8uMo6pGHsZt1N5\";\n        sout << \"Cr4CkiA5ZZ0ITa63oOGM0tD30yaSLkSDZahPT7xo5s33HNAgXNxZmYnv8M6p421yuNPraabZyJ5P\";\n        sout << \"3FtNwzPpw7Q4BPSEBoKc/UbY+mdzm8ES0nKPI6Oeg1tzc9NgP5JaNVgWymA408iLfTjxaxS7FqOw\";\n        sout << \"BCYBbz0EdJigWmF73di27QmfsygTWbHrfdqxCafzsOPuk7l+W26tfJTVxP7S5snKfhbqVNrV/4M3\";\n        sout << \"uhpZthruy0mSHtBx5CuXAtGNQoesk06k22scTmX89BgNsYJAshikS3IHg+LMMfaxBe8KQaaySUX9\";\n        sout << \"j/ULsdT1YZKTeV3NVn/Z01BxF/ZPvV33Dbj4bjEcf2N9byWwicz2CFpkFyQlXaSPPSzMYYtSPCZH\";\n        sout << \"QqXL7ZKh1Xkgh68h5WyuoKkzDXGuZcl0bGVWXSOfO6gK1Mz22to6vJ3lfssNBUV1mxA7Yos1bUb+\";\n        sout << \"tGBxyzoBmphWy8dFCdE5vN/WS+w7VV6O/JQ6j8qbpBn596kNhL4iaK9Lzh0yXRR85nqJbi8bkIZZ\";\n        sout << \"FWskXD/A31jO2IUZKCdB/iqtIuEFZQnq4LLgCTlwF3GbxPeZTlJ1yKcy/2e7nIHZ7xHeG5tzyqjP\";\n        sout << \"oi2AAttJbrL9n4Ebk20aqzYxdYUkR8DcflVhCjPDfeczGwzwJxwznHHhEV/OuxZpWYRvTQDOuUzJ\";\n        sout << \"Qpu+291rSMqntqfrUo7uxCGJLmyRwWqfesAluH9y3GQco+V9yYzqf7ekdNpuygq+htLNc2lG6deM\";\n        sout << \"02oxJHjYyjDlG48zlMEFy9OhLLLPvFVmQWVL/D4FwAwKSQfYWmkUbgqgB0QwHBFSA+xqZBWZbzoC\";\n        sout << \"3xLt42o0hhdlZkXEQtGhtaqMfU4rBbKWxKx1gKhHYk/Gzba+PSi3J0e1A0fC4chtUfWc9UTZT0HO\";\n        sout << \"9QLCXzuC90KrYTYOeaPSoxfOm2aboXBWQfyxZGX9fKRdLgfJ9+8EHw7rD2TUTJueSdfvVahIRi+t\";\n        sout << \"eiEAG3CWoToa3S7i3tpR+YczkNVTl9DCuwD/QMAuPo2mul4bdVQt2NVnoz7PKMWim/JYSFPlJBXP\";\n        sout << \"RaKg8manuhMoDfHTVx3FcToGnIDBd2in/rfbEjE46d+98FRs8p/zhmyQ6/+xw34DKX/NrnU42qli\";\n        sout << \"1+erGDbJFhLmIoU3OhYTiABG5JVefsXQFgIL4kSF+Scratkn+s1aW28PLoooaClnGF14imxCA1Dc\";\n        sout << \"Y/O0HqBFR5lAn+57fsKP195CJBvmyPR+UE8pBE818w09TvBmN6onwBCFtsrEnzTmstINfz0TX5lP\";\n        sout << \"7eOD6+XiZM3y+5YBEK140cgAUae91wD0Hjz8chAlXmgE8xZfalAjHnS1c7ROuPxV9zhj5AjnXV/Q\";\n        sout << \"7Bllgaqoyl3q8Sc6eXgEpJMz8fyZ+LfMkKkMBycdjKG0AZAkF5902y9b1VPVIhgIHueHDt5irhQE\";\n        sout << \"2slLN6pSkRg/3FxPb97BOt0/zt96EvehPVGoKs7OlOd5C6tQLWio1Eh9IL67ldEsXOiwaSMw8QLs\";\n        sout << \"wAw3Vx1VfWnDCReIT7/yxZGHmEGhjdtqs+gGPtZ5jkIp0l4QPQwLhVL1tC4RSWlt8BR2Nq0Ivon0\";\n        sout << \"E4t8jhH5zWeLYZxLIVkyW0SKj5xi7s4Xo2XOZL95m43Kv2zrxzNngy1oPOXTAEUaEwuRKmo90B5k\";\n        sout << \"xdxVS3x9BarxlfUKwNBvwQ8OVmJu6VPWQ5hx++9ZLDfwK63V0gH0tIU69q3diMOjXv+fmvQe28cx\";\n        sout << \"iUh9o3Em/w+7P3DTZu35eSPUD6yzP67VH3pDvahh4uLzes3bdTYmpo39kD+gFc7ADodPWp2E4787\";\n        sout << \"JZaS2A+efTMt/OPen2TV+wMSSK80nbAta3VE1KSQogWp2bFPi0NXqC6GZ+bHV1DVnw5YGs28V5Zd\";\n        sout << \"RuuIzTLauK958DBeAc57QbcAun5sEsPtg+CICI1pcOGhv8hdLzT+YKcuUhji95EAYzCj41nxMM1b\";\n        sout << \"wP1rH0TG7jaHvET8IY4dQb5VvzNXVne0FExHIyIFGIUWoyQgjROX+cHDLe39tvjZo2xs27/CAhZH\";\n        sout << \"dsrgamGD6wj8ZMH+8gHzu6b1yy2crBAw1Ot2JdNhW0kp4DNdFgjqMcZVCfDM8qRZ71DBO82U9QU9\";\n        sout << \"hXh0DCIAyryS/6W9mY2I4IxPrbSL4RkmKzhepcIoui74zu3p+lKY9LgUxYbGNOK46S2olWwJYf7Y\";\n        sout << \"qkOPWcN6yen8rO/9Wkvmxl06qSDDhcYdsc5S409X/VeWz67rJ2vNDiyTKjUJaDWcSU/znMnhtosm\";\n        sout << \"QT5LyX0ZVd++zQvXfjSjBLkJrki5vvKMZSUKhiYL3mIapZpcnsOQ1WRwnmSEave/MidONmZEP4rH\";\n        sout << \"OgS00fnCK7eAWXsZb/rk7tq0cjAFsNeJsHe53E2hJK4TyaYcUi1IM7ZNSQ1yqMYbcFn5bEHBpuxS\";\n        sout << \"+TUy1QppziHZ9xoLn8nOxRstSGxrhBG3WjfMhOwR6JNOe4Y1RDfxVHYeo2BAmtKUutztKsf04UNy\";\n        sout << \"XTP5HSaKx1tZVMDn2fkIj6W+s07imc8sg68Sd1lwJx09bG9ggOw6D0eouy/IeJi9YQAyZT2BqBQ7\";\n        sout << \"2D5CrrD6hqhVF4IVhBPCkJ8+9hbFs5EA8XhItGVBPyXg4/alIJq2ZeBsjhK+tuKMunwOl13sxzn7\";\n        sout << \"iSO4+wO3geQ3+SzKShzywLk+uGm2BdS6teWxatVdm5hKNDirghiEzqdHdwGSoZUlLMYp3KTdzpMg\";\n        sout << \"eAAPELcLl78jObmQkun0ECGaV0paIRhytIRpV3yJGmrRIxWNI5WrqLtocN7hnm4fTrzdlSGnDojf\";\n        sout << \"CBmISIwp60UVjJijLDTVYBIP3VcwaoT9V2F2HkDZ7ifQUTvHmxRDFHuquws0bNRjLSBSPa4jh6th\";\n        sout << \"6h62qlgbHQ/BBLIUXi/I12CwYwlg3ute/qQJIpTCsRxf4rgtEjvV2dG9ltlo8PPMhOd9fkqQcvua\";\n        sout << \"BJaZYLYw9rxq4U4TY/IxFQe8MGJ6It9BOFHD83v3awKPKP84inEWXAkFyI0YYmzFjW/gofECo69R\";\n        sout << \"Wk4/2wv+K5MFEEIzBUGsyrjz0TmiKvzEJ08KZOuWtFXeF2LUGvYeL3TO8FyLRpPnCAoErjZzVAhI\";\n        sout << \"9Sd3ukmv2oZ5oYk52HrUQZ9WywqVgFL8r1KKEouCd3iNhmb+2qUSh8VcvAncWTQbn8yjpGe+kwUf\";\n        sout << \"HssRskQ0nKLIvCz6JwWEjoaglBC3PiJ0EOwDLNP1fKXqPtcPglnu6aGaTrb/lOTCX70yvk2XpdPE\";\n        sout << \"HzsxZHKsV2LxqDI/IT8yIxvM67v8b9CSGOv64a8MSBZ5zYOQR0hunA/iYWfjzuvX5dgW90GnM5ZR\";\n        sout << \"VWoq9zxcBEr+Nk0HlWHpPm3o08OPGmfx/ndMbLLtuH85q4/7Kelm3NSXLXfOxjkRuSZkcAeiRk8e\";\n        sout << \"64X1nXADtf6z1Uaj8H0JfREe91GPSUfyZjwI0pQLDnnsgGoG0DGn01qshIL3ANXsLTHDsdgjaFGP\";\n        sout << \"zZ2f/7V/NKLrJ6HrVpWoQiwhNGY5OYv/KXa2q2XMGybUaoONCdnjGKzPYyXA6C0utQNy7JTKcbgV\";\n        sout << \"/71QilRGXbV8OPBFLLN1VNHV2rQJDSH6UL4RYDdhRSsItpsl2tMJGGS2RLH/FwEv0jDo9e/218Fd\";\n        sout << \"0P3DIy3wAevcgLQu6Ex2SFlTpZcvO+yidCgCv56rJHlVxgN7eSbcKS/l7CiAcafTsjsNm5VtgTx0\";\n        sout << \"CM3ehbIeuPrV5GqbZPgbF1akOkP9vzeNsGGW5kep471Q+xn5o78MZBz7YsMT3IAHd6RViNn/Rrbj\";\n        sout << \"gLWyleDnUQ13gY1xNXl1SD8xaQVvWvvpmlZKyB7uIPEL2VrDZSxmFYyhdhK64yb4Nvvawge8jIWM\";\n        sout << \"a43Sgazodlobk0CkFktZz10gZEUobBos3idIWk0hQP+nGOLhiGO//fwpiplh+g6NBMLj6vI3GoHZ\";\n        sout << \"MKoqqYh4LPDaEtnvILpMCP5NJoBbxNLrUALf17ObB5Kgz9YQsxRIhtrXoyK0XdU98ws4zxDGn5Od\";\n        sout << \"Mj4Zpw/QpI2cCvc6fiue8+l/6BsFse0JL8pvOZDYhy73kaVarhJhQgoZabwnyATtN5VltM8niedj\";\n        sout << \"reSbVYi75bWEdYZrO1PESHmhr7lx+s4gBJQd7kz8wbRADk4dJBf8QDccgMO2yxf6biY6ezjB9GtZ\";\n        sout << \"DnGrIuG867zq9fMbooU1PUrXEMYkeeccI3d3ClrF11AiOxFAh/tSSj05pwl7UWVKDXJrP/T9sl37\";\n        sout << \"qW5Uy21+/Mi+kNMCaunB+fgJHsjvoQpwSmEb9k7b35H04v/qe1deEKPua/xXlawyTt4vv9OFwLFV\";\n        sout << \"ovcegUF44BJCRF7zlZnLMzyveCE2Uizux/z5zXOW21bFEaODnvc9N8oTl7XkQAyDT67JrBC7WbH3\";\n        sout << \"g8lzwSjSyC4paGxi87EifET4QFZ/wdhP/mP8lZXzkq8xieb2ad9dSCHS1T36XB40s2QmiSu/dXNN\";\n        sout << \"yaGFiWtFCKYhie16fkeBuCuzcW98RXOUQYBVCbSaDVM7nNTXU5+2B5NfM6ts6+7fO+ovsJh74pGx\";\n        sout << \"HrPXVdWPNb1Y0v7YhX7fLu77zpFbr5Mo1tdL3H1P8k/y+ep5/vsBE+git78nNPeoZajrbKuf3QtR\";\n        sout << \"uKx/sDQrnt3opQr2k0BEt2HZOPeDw0HuPJnpUNg0u31w+xWZN5YsTO6HBpfg9x5hsYX9YybRFoWJ\";\n        sout << \"bpfcNHrNzlc940Pbn7cy/XKiIsegvY8JKScIsmP0pnv/3rr3M+FDocBoe9QDnj7a044KpD2ghnwl\";\n        sout << \"4uJjqFHv7RoGkY4365yAFnD/vm7tEvO09ibX74jzreb5lcSu/f0hy3IA2IbFEYiY1MBL8MPDBh6h\";\n        sout << \"dKL6Jf+UHWrz7MM2bSfDzf467cr65Pt+N3bmX/BR5yd5sPyaiqQhEewGImg/bOiaqpRnIKIFNrF1\";\n        sout << \"dHziLHvI5n/RvsyKPc1ScVFFHdGs9VMXR3ODzG4Q4wNyGYm8Bt9ciTw+Cd1VuAODX8fjGFhCRq5m\";\n        sout << \"wlIDo6rwxR8ME68IXNMqztq1JPQU1VqEXWGAOBIewAYPLOepF4PR28SUgEGqn32oSG6hutM8UAK/\";\n        sout << \"4LEsqVBnc1XrCczlpF2vad4Oux/Qd27JfspaVThUqSc2x0kY1Ca8Keggn3j0s5GCSXxzsQh0CuYq\";\n        sout << \"jSJjKBVxbOP7XU9EHt6w4/9SOnEmd2QVJ26x5o/znpYpW1zTwrIG1ZhvU5AhBtzFtlLEOs1WzBH9\";\n        sout << \"c2jFEPc221taxwBmLaOqa22VULgiW0zJ0nFkXZ4vfoJghqWOK9N9ux14hpKyWUtPPwPHT+oqctBf\";\n        sout << \"RzNzQ/ODTSIkbFdJzskMR10TAYT3zsY27dWLgdAnmwXE1xr4SCbilLOEZcsJJDEX+XkRUsMbxKxp\";\n        sout << \"Cr/IrdTuAzx5MogSWKsUj0W3cT+EG8Nv+iHw/q5PIag2y98b99gk73KWnswo+QXx6nTCwuSuON2s\";\n        sout << \"KlVN2mvKk/t6dNJCbLNQoEnIxoHumQimOrsmgtD5rTXK2fR8rZlnBzUG5Bp/45YBEK2a4JMWivLu\";\n        sout << \"nY+zNxxg0wslFV8OJaH3yfssBMr7lzi3jX0D1dCD86mSslQZ9hAx/pkgNPogz8KDbmoQjozc05Dr\";\n        sout << \"nUKPCCTYq7OUxpGXu9JAFsQsbqnWIkqyxAg3+s4M2cc9+P+dFpb99cQAHDIn0LSBR57f6o8lojFg\";\n        sout << \"nPtdvUF4gNJd1EVqy2ERrWmwRQ8gnzLHVI6wJYlJVUa7p6gk2yZBz4yRak1JJUgxp3l1goGG/0Ci\";\n        sout << \"PsE78UDJQW+3FmtOwLuphs51+Clq65O/n5RIeLQpQ89mh1govqglh7o7nHyyulhQTrEpBEvy2GWh\";\n        sout << \"LhFNp5FWc1ZV/yl4SwQEIbSpGk/MTmlPM2vZcOwTGNIxHia1PISF2LNDMDMmqQ0N8y/NlaKha2T/\";\n        sout << \"ZfRhOQdR9nOgI0svhZQtke/ExHkpYNHsF4bbGisnGyzmtrKgr47s3l527s8lP8Pxe2g5cgX1focZ\";\n        sout << \"aeI+CIeKPFynBjP5GmbCoBpOBpFfOgPrMU5cPMvBktXq27wF0eKbZ1pi3WvJo5Yt5SNlRbs8cX6V\";\n        sout << \"dM0WDcqw39ff+2ztBdDR+aeFRmHelayiPJ6Rmd3dWgH5Zk/vIGEaSsc7/KfYuJQXkca+gR1SVE67\";\n        sout << \"wez78yJbRDcoXiWhFOC4ilWR1DDKgTy7ej+qsbEtgEQcAqLukxeAnICNaIYzrQsPacqSvE6MLBiN\";\n        sout << \"DcoQ5TnAjtFPGGkkhYH8TwD4kTMQgSDXt5yqADxbAMLu+XsmgOJzyAL597+yMJm0w/COAOvVYPRw\";\n        sout << \"kgsDb3IXuTpW+bL/xGC9RvOefz1UoxpwP7znW1IYeltHBqT9JLiGLMQSRTl2x+OudBurZ66LiqQf\";\n        sout << \"TnX+HXrN7MnTdshMCQ339YwnY6b1baYKnxVwNdIUcLnpyVqMCKZNu92bPJsdj4af5nZuIP8HMwoR\";\n        sout << \"g29BOeXRb8UNtWd/EMGiuHiNwMMhpDBN/L4H1f6GS6ZeNobN9k613HrCeJmlXQDBWCHE66vVsAhX\";\n        sout << \"X/Qwi0w5PCLwwpoIsgMDnZDLa9ZCyfBez3VP48ur6Qs0llb1j5y2gHz24yGH/fVlWPdnc0pbKvFR\";\n        sout << \"KKW9jVKicLU9NGaOq5vLvBmFMnx2YLwhGMIlOgnnDLUkB7wCY3ADrQau1lPLfQ4QHr919kbUpCmq\";\n        sout << \"3syJxq1j5248HvzVQRCQV9H35RIQGwd0fjwtK8Y60fxa6W0tD7B/hf1b9lrodaHQL4gYt9/lrCQU\";\n        sout << \"LezUF2Y3HN9LxAWQNfoCbYaz9HebHTfCM+ynCUXAXabGngBLCat1GxbYaWlbotAXawMKxRplVYnB\";\n        sout << \"mORrYoF3NaBlDPznNhgiU0Uz6t7Nh03r3wR8NMho/VNPv4XggWVXyyoNvqY1NDZVtHEPVaSlVq12\";\n        sout << \"yUOiQ2qEpATWET8P+19RL1KAtCoRzPcuY2Ikir9MR8sTbog1FWyTqZN42P6Bx+darDn7eQTRmaHv\";\n        sout << \"DrC97SY8szr6hZEA2ei3vM0JpNWKYTOHo7pTlaDWt8gEDt/oQFPUSk7WJmJJ3DeXCGOdnRABlCXI\";\n        sout << \"NXDZx79pTuebQNZWIysOeisk2h2TXVvghE7J7QyqIYh80zqZn6nuAy05mtUT5igW4twr21r/X+W+\";\n        sout << \"Eu+dnXFU/Cw04SFh4MVLMaZ8kCerQ21GQn0NSgFCPd/bfeJyonCdXaO4rVATPw8tgbsI93po//q3\";\n        sout << \"Ps0KQWV//ZPdqERqZJYkZKZm7CNJRC9mcLsPAfnE8PRF191kr/A7BjLJu4UgxcGZlyQbi/uOJFd2\";\n        sout << \"mErOsNiJIC7MuRTh3SF5baHXsjiVg+l9m9lBGXmaSHAHBsKpGqpFHF2UuJnkWihfK1QoNhEkUhBV\";\n        sout << \"QOI63RPKJlgU7h7hi8fEzxzDbXbpWhsMwcKQ+j3UBSBzUGbRYznWar5vHxf8GQ1LklLRr+8jBJwZ\";\n        sout << \"fIPGjtKXXyMNJACNv0iulszYy3XUM56cIdLXqjVgEu41sMUfJGvbi3aP0tX6wl2GO5gptrX40j6d\";\n        sout << \"Qys2Evu2rH26dj/oCWFOqK0EKcH/Nfj/+EY+gm1GI6rSTgKq8RtD5J9fEe1nro4Sz+B9J230FWd9\";\n        sout << \"G89GSwEnpPOE6hRzubd/NyFZqe9sxVIFdNqRlOsPbXC/gJw7Gx9B83I5j1dpYAsqWyBKhalrGRz4\";\n        sout << \"UMLThFH6rJkGO0YWO2FF3Y59cWk3rS7taKomqL37407f3VWOtRH3YNhvxXI/6m0LV6czsmFHrSp1\";\n        sout << \"lkpYyq/UlH4kL0c/m/P2w8JrXwD+1SwgMtMjuwIQsETng1TeEgdyRlkRnmKXVFDfSLQSppfq3U4Y\";\n        sout << \"zrlnUiKPk511ZcXkg7TOkHxIMUpkhlSihUaBPwT02QpbcJR73i50BzQNDVQbQfMrXny8LEv2D331\";\n        sout << \"mtjKrWCWThul7ReXcJV7p3LpWuJWD8h/6dwx8WuBg4/zKPXZst6WHD/xoEjYG8QNoDDOE+SylSks\";\n        sout << \"AwuI4F5meYJNpFAoCj7qQXJKKyzyeTz2Y0nISbP34Ue1H01zu4SBN7OMvhP/Kl7RSFpc6JkV2brz\";\n        sout << \"zksgJZ4vpuqdij2S4lQfJbtdrk8smc1VWsVtkRKZzRfbPmECuz/0aNHsWe7sFyqISk2Pe5kwuj3O\";\n        sout << \"3mvWDzXBK05J63FYRnpemGdnvIkKLddEmxNecMuotq2s7fIWy2xeu1Ge6/8ILJmtwm9Bq3afgFfw\";\n        sout << \"nRBQ7dj40h9kCgGUoAx0a2oEwTdvdgHp3eEjlyGMqdodEC5F7Cn+uSh89UsHUYbxAI/qTpYekaVh\";\n        sout << \"5MRydNwdIg+3XCHQi+QGEr41DECSXUAoL+mCG6W87WE70G1BsvA3ofdGtKUxTXskdWVtyNip/qXC\";\n        sout << \"f7Fez1i7Cd5U8rzkdCZD56P4KKx7H9N10aU5jIyfba6IKOG6WEqgf92SISTXCVuQSHqVBNHoGiG3\";\n        sout << \"r1xxH8KEzApRHJF+whOvt+pP8eDVfVIdLrzDH7YP5nzQvnD1eVv6iZw0izQu7ArxMoqgSXOZlKBW\";\n        sout << \"L3nkAohU98uR9oYPGck8HNiyKzuiI+DCeu7BOg7unI0WJsn0qE/F6EFEFYoqusBXRgDVwmySLyAo\";\n        sout << \"+0eB/sUawsnUh/w0lRHBso36uynLjUSMBCwppQUU84pJ8fqr5aUfdGfWzogc/q0pFxppiexM6xHd\";\n        sout << \"P8/lVcbgKEclaNJRkE401wDUWHDmtVAHiaZA/532FWyrucLOp6IRgM+eZAtao2/hQUtwOOcaAQNa\";\n        sout << \"DcCN488KJmPQntnz9zn7Ep2ZZvsrx6fg9ubEEjHHIiRYSUDClLUqqFAJZaGrGsXmrSDxF0AEfQgJ\";\n        sout << \"aZF7CJ0WBl4qyUBcIIeWr/+u7Xm9WDnD3Aowl3/RVxH4L9ffGDEMkCeY/rmNp2SDuWfti7vSrxge\";\n        sout << \"NSQEaqiPPMHrgQ0vuGU7ipACRYtW8MgxSwxMc8AaAbhPQu8L/ZEC+/pfxDBy9mtMKnF8Jj2scJtB\";\n        sout << \"GKhZ4s1s7F1fqA/m3Ts4rfA0HLY7bAWeXa2sNAdvkjoQHMLAiP/5BB9B4vNqVGLSrislMJ0sYfcr\";\n        sout << \"t/O0wfihW++wYxK5HJWn/g7U7+lu4OZHco87HB62wHcvy24LqwNKY1w033SQJzkLb6Nkqj4HU9cw\";\n        sout << \"E82PHpVUAXqR6FRqOSGX9bMMqWL/e66vl0G3hbhIwQs5toUgg3XVv13F1o2sTzjiQ+22wf3PEuD+\";\n        sout << \"aYIYKQiE4R8kl3/96og7QmVfWoPxZiVEGBzM9bTDHx88W1D/CkwPkH389oV1Xky/L9UHd8adnI6l\";\n        sout << \"kfuHNP/geDSReFNJ3vtqUo6RnWHAFaTj+x5GDJDtol2hC0KaDLJCETOQRXUOOW371wB3I6slEKjG\";\n        sout << \"gANfqlMyzsO/7bxUw8X71uDns683wpW+Kwr73bJwe0OeP4dgwgTdTLQApMZncaphcpuZCEn9iSpw\";\n        sout << \"GX3EO37EZR2RvLBMvlHhkZSAWr8TqOALJeFEuYiduuUmyM2xh7mLw73AqGA0Wm6rnc7oZwXhwaBa\";\n        sout << \"VhwUZyv5rGMNQl/p5bMO49+tQiaIP5UXxheMCUN8eD6m7qDyHsljVQ+Madsj5iaJw5rkNcO4oquG\";\n        sout << \"mkrQOI62kZGM7reBAZjYYjf33ttAZspzXJVFkNt8geb8e9/AFBdfB2nkJebf8aAAie13umwDR09c\";\n        sout << \"44fUO0jtn43FxMBMXRt8SN3zVf4ycLW0WBYliqRrfhbOlN4wfzHNnII0JBO4wuDMC0zXnurwcLA3\";\n        sout << \"SWng9i7SI/XH9YZLdEn1cEtkTNulFFsZJGbLci2EvHEnG6D/m041JrCBRP7oCGonxdi2zaKe02B2\";\n        sout << \"LHaMeX7Of28XebQgQ3ZQrpSxW+h5FqIVNNo9EYxnqDDKyB7TeQnuISmSOwrcARqs7EgNAQ3Wbepu\";\n        sout << \"Fciu2AFnzjsW37Di4Z+L8tVWDN4nZstII68QCzlx78pYFiWD7lBQvuMYXGPujFgNGXIW+uk8NM/H\";\n        sout << \"ZWKV4UopvDx32VBudzMGJn3XPfrFqeMDukDYZXe+8G/jo8poz/kPfQmBqMSoHZyoKZ6yPNEeo1pD\";\n        sout << \"JyR5/neJsSu8rCPX61ZMuInitxMKRTS8OD7RhcO5o0kNsFwXxe2AhJm2HbOCqSnGktciP5M3gvpL\";\n        sout << \"d25K7cTMNvZIpmwH8eQmOoicl8IRKpj6qzxZt4m8yZU5yFiYzkMfEPjUwCmJs7tCZelrNnaLoFpD\";\n        sout << \"LxraAAsxLtsTcIL9ajBequXTFW3SFL7jsG8WiYRSYmu60gWPgUcmpaK+dk6HFy8SFCsaxlTmCn4G\";\n        sout << \"cbIFfJU1O45770/tHsDxNOBu/vsdp5yZw97L/xl6jSM9gTMdFbTdYw4Va3nr3L99zk9WnSYVZtwl\";\n        sout << \"C5LtQR0xUAldgCgSUfM06Y85VismlOis/GxVfYqYSwN17u3Rv5xj8JDpTxV8N2CwRXxrq013NXoj\";\n        sout << \"eDztUxX0NWUEDZuVvZUIBv9IO+9UaBHLZ834PTzKolkznv0dfedf47H18EWGxhXcJs/bqIP7qlm2\";\n        sout << \"B3bpaGxX3BbRVzuGrWRccOO2K6K1wxDPBSh03z/qH2ddZsTPArbhqlvRiD7kmMDGJzX/Y2i0SuCw\";\n        sout << \"nwhTENF7U/QfBFD8hWqi6/5rHArt/YSfPhaJyBOoRhTWgGc5RPlvMKviM7fE41Yhyd0vD4BqylQh\";\n        sout << \"iOKpy350GOo7g72UBTjlUHq0uWTX9rMpghHkZrMt2bvNzUn9SCx31vC/H7dVjcuEjCeUH4xkVpWu\";\n        sout << \"g820oyLQSkreplnhgE8IyG9OjJ07t1A2YcKHq0sr3t+TMLp23O6D2b/ZAYcnBFVIu1T2LIuX7NAp\";\n        sout << \"tOmFBbO315b3PV8bQdywYBSlIcILFc9AGlttfB2ksqGF9Juhx7UOPczWeBgaTOhBFFcBoSELVoqJ\";\n        sout << \"YP1KMe2EreYgzjVdUEAlbUh5R7mOs/pPF6XjoP++qnu9YE82r567jLBo3fmMGQJqURjgAIxr12l1\";\n        sout << \"+O9rTfxhjumcmJo6iOeK6/wCPuiD2QosXIlYHi/nFlS3qJ8d5z+tU3R9mi6v6I70GRSB4TkFuHmy\";\n        sout << \"5AX3LA05BcrjPH5LO/ulytgvkKsNIgOA4lRgZ9Z+whgI/MxvgGEzmTEyM2nxUFfzxlM4Abi210+2\";\n        sout << \"WFu1QMDXI6MQ54KGwi17BQOckYEFa+0PSrxwf0ntQcgcGnpPNCSlSATUQZKCN6E67UTP1KRbak1K\";\n        sout << \"nMvD3D9t061X0fAWW1txiUca/iO3KLYtMqAKgW6DZXuUzJdgtk2aqUYTKoI7sVkyVHo03aBBr3fT\";\n        sout << \"optSJzBz8UIRxzRauuWo6o1mCyja2eM8fn7TMvSsZx4QkIF9XZA6UNdeUpbSzwa4XkdTqdzmoa7J\";\n        sout << \"V3z+mkCQ/AaaEctE6Oi63jOlzfPmAOobY9Vp9i+ojaeo77SXu/7cwoWgeASY6zOHdN66e/zedP/L\";\n        sout << \"SNYH+B7QfAvUgBLK7QuP26mtws0qeeGWPYCB3x5+pbeS/PHqIF578D3lasqUUXwa3Nz+OzyBGXBl\";\n        sout << \"AB587DXXvbqK5gsoPE+mh4CJ0qYcUGWOhDejTpuEG50OQiGORtaswXqr86d+3vWdsmoJq8YFEWTR\";\n        sout << \"Pd+TwEF9FO3qrN+R73YWEZ5nihD5eG2Q9ABWg+C9Us9KqtlPYQOeUjwrEBhAJZ1j3UT+OKHXuR6e\";\n        sout << \"6dFh0fmlpXewt/gZ2z2WMZT3okC5JyKIMROWN7m+W+mBMmYg19gvib1KdBeBLO4sxdB/mElqdYYt\";\n        sout << \"k+mwhcuKUWYmaSmnzXdU8/Lxyvfr+hpPIPJHYLXftm1DpNHQjLY2bX+UROQ67weTACWOtfz0VJGv\";\n        sout << \"auzt3Kd5UG7m9nLXgk8ZibGOie2MWMY8C2reyrfU5sqOnLO9VNwazWvKb34cFEPKrGU1QqVELim9\";\n        sout << \"kq/0gFdbsyiotlds/Va5AkeVAVC81yYhYRnQm2W23NY62dMMgorLZoxuJV3RPVUoAa5RKRPq346V\";\n        sout << \"HnC7z8pqOsVfoslTCivd2CEzNQK/cYT/LJ7n2Kw3bhT5niBsVNyAjZaK4oI5fqzMoqC75ipQz1IP\";\n        sout << \"JwLqRuBTBjipG1Boum2TahnMriKcAhV1vAiHcB1GkYf9Bwnne8KiWpVdN54drWw7otSWxpsD7oyi\";\n        sout << \"nPfN7o9CrAcERG94IxkZJD3uY748ly7UrScLvIS0M/zcC3f0FuBHb3k1LKOa53B4Q/wo9FfffpYA\";\n        sout << \"RoixLpFQRoFkC4l2wfMenZEgaYkYyfWoWEfGD9ucOiu8h5IrffBDzs8Ck8/y32oHvL/FlouHrmpz\";\n        sout << \"5SKBIez1dkvdFTI/378ArjAwoJ0i2QsGyS/uO7FqgTAgd/9iIqeGonMnJFRPmH/VdT5mZwwj1BhY\";\n        sout << \"2/L0tu2kF3uwGX4c7fSDN8AkPK+DexcvcRBwG6cdmFs1871Ltv0A+i2UTgdk6/Q7MGnhRxnDUp56\";\n        sout << \"7cTxaOSfGTgKcJJ/US0PZjyWLN6tinlrYxkDq7uODDifVo8kEIOzYn/Zo7YbrC2FEXSqw7khbirb\";\n        sout << \"5ErpT55vaggbD/HtahzrQeYIc6lF5oVtW5TuAAdBBwnPwtYrkAVYQ2KZeGh68JKCEbKfNoAeKr3Y\";\n        sout << \"hhU51cHOBC8p6hm5T5p4JZppu15YmKxbLZIscvWCfriYVwPycUde10Nu+AixLGcaJQCr5LdWm06+\";\n        sout << \"ZJPovwV5yErl40B+WEa4YTBm9HJqYXOI3JRAEkwvioR9TotiOOqCaoo8YtIHRU4y3YOUcAdqvtIW\";\n        sout << \"Sj9eLPFLgTQ33kOtsZKDDzBJ/eVl6eSv559u23AuaeuI0ynarOjvQPw/543W/lCKibBGhuaKbYJy\";\n        sout << \"igAy49KqZ2IBHGJEOxd/7e4pnBgW2Yg7T7oeruGrIlJk3BFKQxEOO9Usc7XYSiXMVXwzGDA4huZt\";\n        sout << \"2zq/k193xAGK86lvndpmzpJ/eyVqxqGSN7yyr9o9Mq8mfVJ6CYGXgb+CybtXX1r5FfNTT7ikJreQ\";\n        sout << \"koaSxOGLvHfys0h09POLbTZ4jXBVrcuLuYoN2Dg6vpnMQSEoZzY85NOGxyCPUHXf9KFRfUe+r5zp\";\n        sout << \"O4NnC66UUzrBan3eTYs5X7DEksg+bPx4KGMQ/byJm4Jr8Jzeug6S1qV1diRpkgR60KCS8Q2zCmqa\";\n        sout << \"Y42riGdaBXcaZ3MM1onSKNWiIWa62QGu/GuwY64JUXkSTZViCgkPbieNk4J9WSjwKWPHwPq97qBy\";\n        sout << \"UcJb7MNuA5cxGXOUpUgo1I6ewBWZJvTIU4o/b+hBbBntfgacsZDooFmU2xUYycL0/ornfsEuJczW\";\n        sout << \"1dI+thnc10hcf/WWhUpOuMLQK3f34AUL7tUWtsuYFaRN+1dabnldREIXMFnZs6G+gmbaX0c4TDLh\";\n        sout << \"i31s8ch2irdU8aSTT/1J7EkMvyDZt7NLHeTRgRRrVtGg8nYbBrB/MxwqGTjtD8X7+MYzloLLiUrc\";\n        sout << \"7ST+dShb/DY4JS5RA8I0RBJbqOcMYzdv61UaxfYOnvZHtbCGlj5MmIMaPCDe4ZTSPsk1+NhUZSKr\";\n        sout << \"NcbSth2EUMRZsJqDLN5Xh8LFoerrFLNfbb6r/Zo1I4T7NcVaSKim7u03ti6xCQj4Ds4yqDLrql0P\";\n        sout << \"8IP3w1WmY07b+YRN9eqS7gFN4ReqCPVlk1qnZOzzPjH8pUPqgb+0cjuvQyJslbT98FrPljGtXbJ5\";\n        sout << \"si6Cp+zT+aIEy9HTtQ8Wq3ojrVLtjMl/aRNPb94A0ncTZYuoZCnOC75i2lLru7HOwHCdA7Acyt4M\";\n        sout << \"a7xgqqPiV13DaPpOQYp5rwKHNelo56FyhrmhBC2qQznvwqLJPRcnMEvfsg3Prs26ncYOOwXJ8DK0\";\n        sout << \"GzXkJVznLs71ggUJY00mOvTS5+5sPWwxyjKhdckQfSil9orOJJWeDExnCVZYuIWBij5VXQiACLyN\";\n        sout << \"WBKo52tef5NJwqNbjInxKmFChkX8N6en0uHyEAPxNLrYrn5I8+HibsvccOOIwb9yeT3TV/DB4SiF\";\n        sout << \"rKq/nLdDdQjbReZfZUHhjKz7i/QB7eHinoBVgLcmAkN5lDJVec1Oq9GNwqKTpM9hzHl9KZueqC0h\";\n        sout << \"EJILZgoJDs6Vy9NgjK+FYD6O/2Uv9CGfnCL47ziWfyWgLX2UPFX8DTrnWG71HfNjdlWO0oAmwJxh\";\n        sout << \"0zoURT4B03KBdm54pk6TNeoThxauGpNkK+vU6qcILlI64ZFxaO42b5rjQXtnmYEGL9d5MroM39vC\";\n        sout << \"hykPHjc2j2qFIRUQ2Eg4mtSR++AAriXGpDu3WuIygTiKMNy4Jbt8AnInqnHe5IeWgzE2eAomR8Yp\";\n        sout << \"ZkI4LCBOIPRQbFZ+DnX9Ntxqx/6rJmXE9njSqgbepHd4e38SMP9iMBR6u5fX9joI6rcRikf9W5nu\";\n        sout << \"G/TiDJNhEwvSOtgdEu3pv/urCx7CFwbkhSVz3r/HbQwup/g5FDuTxteiAXYn9TKCWXomd4oKtip5\";\n        sout << \"aZw1aIIYHKR4zNPsNPw6uJUpwKU6aaJjAjXJtaB3Aq/fcvuHdCYL0AkL5AAItGnCq3TOli3VAHg0\";\n        sout << \"zLm6OpVaCUravHHyYSuwXHB58w/zjz88c3tlOLRJO2CoFIUzvesT7FkKN8+y9itHmIdvgZCCWbm8\";\n        sout << \"uoYwp4U7dy6bBVvcxjca4A9f5BcsnZ0u3h8JRxdhMpwk3H1kt6PwEFTrk2Gb4IemrBh4GugYC1NU\";\n        sout << \"ZGgtiPD9Lk9pXqPb9LHcY4nWCEioiMUBd9IJlcWa5NOnZe+xeEHgVpy0vYrtqVHsoRAiXzRTxgaa\";\n        sout << \"2RlSne0P1g0NgU4YCnRf12ZIS+LvPMbYe3mXfDpn099AvuQiUngIFGKm//F59pxxMjZg/ADElluv\";\n        sout << \"0eOBWtYiaYVDL7D0hiffIcBcKQotLJ5p4q7t5v+7oowQ7cMyM4hvL5IjS3BqCpKNwWg3PA9jnhun\";\n        sout << \"sAVHJa9lLMk3cdXix+BKNhfq3IfqpzXAMdlk7GeKbEl3F1/+q4sxVq7sd9X9XLNR2lhJVy93soM8\";\n        sout << \"HfWHR7qaHnA/7XlDMDORDxuT7H3IKxDa+TkORiI9ldqwCEzC0ZGDBU3rBBxNK1jzXH7vzQ1vX7x7\";\n        sout << \"eqYl74NRYH8j1jDxWeQx6bQWSy0V6N+c8uC9N9HPVuH/18KArH+sEDxGRW+Hxi1Wkls6+QyBiweA\";\n        sout << \"tlHueW6h53s3Hc79AEK7gM+40nwvjCOG9vojSoI7bc2ndc+gdqRxYdUz8mu79bx8CI9Y/WlGO/Vk\";\n        sout << \"opsB2ETODt3OdS5xMTUZfSO732Hj3nQUTmVVheFbxDpVPUXNx6AAp63iRR1oYv8b4w6rXrjpj2ru\";\n        sout << \"8U+EXxv2W29LDJFC/JRBwj8JyTR9lDhARPqehW6EZmUYERihI4NZbM9mhgszbC+XDiM5rL80FVz+\";\n        sout << \"4eIA3mJrPNgmevZC2Y8osV71pnmt54foH2yERar9tqSS+q0q7PWX3+5jIrM/IDT/TBrHQ+Boo0y3\";\n        sout << \"bz8JHPnwCKXv34Kjg4NxbDjFT0G8hL1+LsNle+d+PyYPAKSLOjtzDicknXz3M6DgjwMrzD3zLf0O\";\n        sout << \"jUlwIR13B4f1mwH/cOatF5LfXQRCmUxJt/16/VtPsB9FuC0sziuda+4/CGAIjJ5GB0gqzwN7DSOt\";\n        sout << \"7cNdIO7w0CTNOOfVq9C1zPi4fndOnX9F3M+sPSzv7YjeUbkchXzJhip96etsRY855grSR//reW8P\";\n        sout << \"XNodO/FvibrfkHKpG7fZOU+CRLqnikcNgIGBDYumpgdWA1ynvAOFPgAk5tqtLZKmrIe3ceptlG6X\";\n        sout << \"E3UDGPMNVgExa9GFR1e5bIq0GZCNeIyGMq8cGLny0uRC/u9nPu0NoTMxFb9rr2iEp1DJB/zyiped\";\n        sout << \"EoTpBPDptrXVQ9DOLvpZnplsmuuCMELZ7eP10CaDzNXodNNSFr6bk5oDTHJG3foIB/VHzdH7WDDG\";\n        sout << \"DKMcvwwXAB+gAe0Uz3C+W3DlvI2xAHxpjx4hPvATyJwVgYLus9pHzKzZCJ/gLYMgcgyArdTPI7JT\";\n        sout << \"ExgJcLp8QTosu4zuYCJ6GgPmtYlVtUdLWiPz6lHCW77bkkFmz+c6u9WF3yzzY1nyhecgnt/7jbyA\";\n        sout << \"iSeDme7x/u9K3n3CTHc7+ZXHLT6HSdxKlwZ6811c5Z12X8aP6vvL/ysGTVwa8lRngJOOiGQuX6GT\";\n        sout << \"PMohKZIhYGudZundQNXPOCavN+dpdT5m3AVMN9IrU/ht8o9eH+Hmhs0gw/iEwos7GgEJDl7IUcAg\";\n        sout << \"TZb8blBMrDfdTyAKjYcuj6iA8aDYes9sB/W8R6AtNRG4S9vQcJuCD9JBKjxwd/5jG4hrpibV5bMD\";\n        sout << \"F7dW4/5kQsc3AEdYIeGITaDjXorQ8UZ4zF9Zy81kTw6RAoTKdMYtDgnEffkDSRWGUqySn1CkTs/p\";\n        sout << \"cdY3SRk1HMd98JwlVLpED+mWbcLwRuROBimfERC048b/vfUXzGSCgdYZ9AGQhHPzu8y/nr7Lp74h\";\n        sout << \"I0ghlojt4zEkgBgK1JRMXD/dxwqIu+PIOo6s+8vwOMCLytvqCcTR8hqs63JgVGJ0c4/O8R1nbwFg\";\n        sout << \"iQiCrQ2EjBbGaBMq8vhYNA1r9QzZwHejoHm2Z4a+JXoef2al/GqOWnuOUHBotsp70MwvCS8Q/EtU\";\n        sout << \"TFGRttRKcrm7OhNmeiFLAr4P6C6O7gJxMBu78s0bIzpSIDTZFCZRYU7NWdSysmRq1ngerD9inrKg\";\n        sout << \"zt/qQLnry4PmY8NjPwt7QYcQziZLN2ruCtbvk2DrPVSx24HDHGvB+0g8jLNLQDfS552/Xs2G4zc1\";\n        sout << \"wwPpayeQy7HFGT7Gtf3oCI4jb35g8MTCXoOMgM1Dk+EYJIyDT2PBae1AcDcDVj2JKOI1UbvanFI2\";\n        sout << \"sFpsLkIgj8SVUI5dX2PEEl7AjmoFJqyeVpqmBgNEfNwPEqfNNLUp6mic3WusrWO/jQwFtUIdEWAc\";\n        sout << \"tjyIqyXeF1e1zO5po9/kJOrRJFAFxMFI8PVZNSQJ6KIQDhjPJHi/z5cCaf+lxqSo6OUt0D7z9o5A\";\n        sout << \"hfA5GwHX6oy8tGqommBrb6nF1AWVInk19mynB6E17TQRo3T5W2OFG+BaMRO1xlg1znAurKht21fr\";\n        sout << \"6VZscHHtctXifsg4dequ2SkchmjJ5yWpxqRqckES9B3nVTSiqn71/T2O/poDieJhqADWNw3gj96c\";\n        sout << \"GI4vlUR4Zo1drdvtgwHFFR+RKndNuzv2BIYvB4nm5SBqx0nuKcvbbxkEEhIRVOb/GiMJ8ZwjeVxy\";\n        sout << \"b07lDWMdBxLyxytbDoNZbefVc8N0YFrsFvrc16W8y4XKS2NG7Kfa4u977Rr6Yd6+u2+DIYwfsrzM\";\n        sout << \"DWs67DC1+vHawIhIQ5NyB/R6hx/Tym42s7IK7l9w80SaBvpN2A6vaDlNlOD7ANeZsmaAG8L6zFsb\";\n        sout << \"FLBPRNFxm+HxHYjpG3+dBySqcIyK0tSFfykLVffPMFCtgzTwDM3+5VJEghCyVlGEhDl5tv97jwVI\";\n        sout << \"aTYM84hH/JqKcDUQwmilCXqbb8bh/kTEWKzsuuyaLxr3D6+5MhVMakjG3RkIKfjddRukZC341efa\";\n        sout << \"fFJVWanSIf3lSrhFjsiH5k63EjbZmAmuMpfiLZ/Eh+zjBbh0dE1spYJ62S+PwkIXMTjCxmoJW46O\";\n        sout << \"5Bdl71SqZW7lnQUubNcgRlxAZGKY3aQlIV2qHptzubV04SMqdcyVYPrPmvZSM5U40eDoJB9UYB/D\";\n        sout << \"JaxlWFMYrW1ntJTv+LrtYepKdD3uC9SLKi5VYrWjx9WzRMxxkDcNt85Ak2cfpA3MQXI+uT7lQVoG\";\n        sout << \"vDM472l4Ruls317G1X95HA3lcJNseSQnFsAeE9GhE6XXmxDwIDqUQ6Mk+F71rvDufNIj+GaUTISI\";\n        sout << \"+lwC4tqse9dg+7wcqSTqe1cx0K7tZo3ZwR+Y3JEe+6HyURImluo6BRV0n6URS2MLpgN4geV0m+6z\";\n        sout << \"ZIML0oUAKyJVdyj4XWEq5Q/pPDvz7jDfKyqcHTCwBCuBQEnhsxi7Pr3yEac/dwYDKRSkX+7Q9mdo\";\n        sout << \"lAjgzkEnxlR2JUJxtrsEuhTiWql6HjmrkT6ohOeR/k24Y5cEiKx3QM7gBcB57IoxxMVaDJut+Q3x\";\n        sout << \"o4HQ7J/IRtkKCPp0LLSK4Ue+nSgJY5LWtD2a4KzmVnahmXeYXCuAsKm3+7dGFISapet16Grci2+j\";\n        sout << \"ETdZGgs0DEdZWncLxrCnhnvXHrfsSsVyqocOtTs1KiwUgGgcEhlSBZyH6bpF7IYhQhPzML/SIwy9\";\n        sout << \"ByDnFZIvESXwQObXa1iYfR37SyV0Yw/75bcWAnx/+jbodjLZF+RMskqs/i+PnEasmlC5wrjYo55o\";\n        sout << \"E0tqAakxpTNP8+TrRgNMLFP4tP25lfDLUka+pUXoeLC7gWQ0MTA8LDx5GyMlblaIFGHx/eMZv05r\";\n        sout << \"he2nLJgKs5ZtTMh+8pMNkEBWXQDKyJn0oVLcRQL80bPfpUfsnTW+jrEkmH8azM7CN028QyPEhBPx\";\n        sout << \"lvDsEjVbElUqBH+eo3o0CYLpnABUQ28KvsJQhHAsk2WVScBv/hm/T4c2zABqaDOl2LkRCK9ZeF2W\";\n        sout << \"kqLNjVH/iZBVQcjo49++lINm4Nupi0GPnWpsuMnNoOdZzK7Oygqbxs9Zz5VqdjRCpxQGQgOhAD2x\";\n        sout << \"aifYz6RSk7i0RB33QkjE3u+MMEQLL51zl2EOREXed6AJT0U9D0+hSLH39wqMbdEV9bIFcJ7XprJP\";\n        sout << \"ueO/zZOmCHIBfz+47Kec5BAWkufEOfKxOxwV/Wvh9+VA2RcbA0exvVj3Fy/hPmRaw6E+SBZTJoi0\";\n        sout << \"aQltfhFmfLQtT4SRl2FjDwlpNJHjmbmVOALldNBRhxSz4oWfurPqAB1A4MazDorJI74vqElH1SMQ\";\n        sout << \"7RZI0hDhS100VqCdgnYhtMa/We1kNuLcLi7cSq28JPUE0tkIE8SVLldq2Ekn90XBP3mY8LJe0WMR\";\n        sout << \"J/LzfvopGKYrqday/eYuiXl+lihXp0dpph9ZUpRzmAYWtns/djnzFSGS3bF7VOOaFuGxwYHi/1p1\";\n        sout << \"SaiBJV2a4U1vr0mh2OU3wMuqd/t5nfl+Sv75zG3YOAvcoiUH76xxHvRnn+D97TegC72k4mUgBCPs\";\n        sout << \"NZJUhjyKF5S3rerk5uhxFmlAmy+XMo9VJJaYs6OxiIeSQa3iAnbnWDzY3m1chupbDYK2fs8tBg3c\";\n        sout << \"ta7LM5SgWZLMN5Lj1RtEbFBpAylXWrb3JXGuaK/C2biFNTSFU10Xoit4NcqZuYTXu6OhNahZqayp\";\n        sout << \"IYXTMXUy1KPyHHMFWZ9gXXB/igOg80NZ2O+EYHHfRiqSOFJ7xhnY+H4X0kh9v6N7lxlv1WOudRnJ\";\n        sout << \"lWg4FktfX+JVDflDvJ0IqKuM77O5fgtBpRL3tpS2dn4U227ZiXRybiv9zCnbpK7cfq7/t69AVgUG\";\n        sout << \"qjyTGZ+YG+PDjVBWC0KGsJWIBIHwCoTgIZO5kgU/831jcG+LyuHWf1Q9bIEkOXy6UzexKYCJgIaf\";\n        sout << \"EH8IsTAVe+uUvVSBpr/Eis7LJkyx6KOAbDR3eXjXjhXJTSTK2efctB2Bb3GraweN/LUZ7suO16Ng\";\n        sout << \"odHLPnS7jsgag4B7sLNCE3NeGfd4VIE6bYg/9+Ci8k26WMJzOHIO3H+Kc7cTPCdohAQS93epRcLz\";\n        sout << \"bz957op4v9NBlgMcIKW3Fp1opHX/+vApvBecnNDF2oJ0bUq4pFuM8Ag+2PdSDlJfcdnq6S0lNA8w\";\n        sout << \"H/65WlKeVTHRt0nm/p3jJ8JNUlIZa8iZyGa/vpCaLqymASIcIfYEdfi4ugCOvbKgBOT//4cl8kji\";\n        sout << \"3BpcImX1IRx1UzgcIcK4lqO8WoSpGqhClHHi+/ezdj06JLKP27zKeHZwhTMAyYifDnCOJG2XtuY6\";\n        sout << \"gg4LTyI7BcZ5jAogPeibS+GdwlEfN+hOk1idevzrgEdzJTIR3i6p7ugPS4unLC2+waQfdJMs4Vjd\";\n        sout << \"aCmDdalKnQlpHL0Smr7Ezu0P1jPQcyO2hGupDOHl/TslPpoPcA1N6OSTraByTWL4yo9aKG1QDIOX\";\n        sout << \"NLGvos5UGUwmPxJMTeBGkxT7hyKmNzMmhfKB/yfqDaBaV6fosCm7S1FVsdnU4PvcFxa61Jrtok6n\";\n        sout << \"/lwuY3BM5VCG9/kZQtVUtImeRB4hYy8fETZI/WH+WSGhZZaum+Z7r4Ngg8/DC21U33wyR/WElnVE\";\n        sout << \"+Ny+yHoK9xkiLpLlx4ns79XnKV+S511udI6XniRyg36kCNdRWTfN81HfbS6h/KXzl2ByPVo0Q9Op\";\n        sout << \"lTF2Ox2WJ0x0RMrE1SyS1KMyL1ff+ToYLKarrgalvFUvSMI7cxPlc6phczmtYojlm9R7JdJDpuGB\";\n        sout << \"k9qA/UEnH0v+wl1+5rt+RZ4dHtD4FOXvnqW3GdN7XvISIFJLhq+UMhBPiI4M39ZRxGpuROiF3Dzd\";\n        sout << \"gD19YX9c930yj3JEhkbYzjzwa9CWLcnXbSYe9sayBJmCjpUxYmfrWo+mH66POo9ZxJeeEOPiVS77\";\n        sout << \"HXv52am6J9m3gm2Buruibflo5CGo6Ngw9slSm2rcP+pGEAyKjQoLrU6fb0TxqUnRB8q4PVvbBRFj\";\n        sout << \"c1y5MU03KShFhFfcM7iND5az9RcBJwyNZtCZr7OxlUDVDJP5IJubY/5dahCfiX3EfMXT/dR6R8Yq\";\n        sout << \"jnUNqjVGnIVm456KF1xlEZBDwCL5LNUhGCV+kp90STd77lypcQPP1q8iFDo1HhHnJDj8is+5eMY6\";\n        sout << \"5bfMP1EP13tCqPnHgD4hK7Ega8bkvoEKZInxohWoaS6F6o3lslr267EKKvjHDmnA9uGWzxss7nuj\";\n        sout << \"3PlaWuYpU9NfJp6Eq0xYNYcf4qLTN3Nhd/GRpptxzdMCuu8x2CYKBkHKMy5iJELoJ8ntEdLtVdd+\";\n        sout << \"46L46j8oPIUyswAbmodfp82VIodnJ8xvJUyJWRCXpCa2esfid02xvel9h8w1V8Uc7BKu9HMsFCDn\";\n        sout << \"+FbebdVIahMe67eUI3i9+mSZ3BNq0qbkn/dDabGwixw9lsCU5uyHZrzafG6lIA/MiepNzIRLO2Wp\";\n        sout << \"iwhMc4f4l8ZRb89HhL4bjl0Wo44VEBP+Sqf+jWMPS8qo5st+MZbtu89RObDH4fOr+1v5dvGkl5/d\";\n        sout << \"YROeKTCWyAWWSSoinCHoR/IcBi8J31l34Pk3nNrZ7BAyMn28ZY7mue6AF6hpieJ+o/0RRv5m6VM1\";\n        sout << \"1OpAFyajq7E9/BjrAfRSpCtoicoIx+APfjrLbCkEehMCBZoOM9USTMi92Id+Fm2iI+/AMStEU6tJ\";\n        sout << \"zumgP60vNm3VwZw6ep1m1DSb+2lduAxtuDtaspztXYx3QhksLmbzeKD91/v2Mu/JveEfy35tf1kY\";\n        sout << \"fcFtGY/puCXnAIxEeKY26aiZroOWt6HLIafNvD4wg//A/9iTszmQauiTWQbBLxcK/KreAE2TOpJ4\";\n        sout << \"klwh8NfDhULKVKoJ/AgNS4I/Y/LFZSX1VerAImW/WQmpkqvjnOUrpLNkuV2NjA2tKP1G45dInmG/\";\n        sout << \"nAnaPoGs/bAdQLIJayWx42xsKM1pil6q86WvoKcEH1WrRRXsRJgw0dU+Z1QIFlC+xKqP7xS0LZEs\";\n        sout << \"fjyeED07SGKBhUj1kbSp9E3PMr32yDHj23zmnFyBcwihktaRV8fEquoE0CacrSoxfdxzdWIDy9Ya\";\n        sout << \"6tVBbCcxWoz4CSGzBKSrEXVjedHR6H3etlrGwzPWYwbiFQQu3oSNml6ORLh2fu87qIjz8VrO2804\";\n        sout << \"dAqaUcJBtHOOB5KnNMSyZWA1+62WX3P/yJN8Be3AcHY7xf9bP1HUxyq5cWcAbtx9yJV1dhXyvPz6\";\n        sout << \"D4k1sntDiWgivLkY7l3OBVRs/QKGOOTj1uLei/v6X1vR54lH5wsRwq6niPYsyEcCnWk2zzTKOcK/\";\n        sout << \"OBhLQHtj5Wxf+NQ/S1zZnIBS0cww5BqZD0aATVsHfifZLEw2eRM+vap33o0ozqXIdbCzzsotLwlx\";\n        sout << \"CfFT2a/MUDatTSTuGjOPpjbmVtK7qWkWmHAF0j/GQFs73K/8PGmAWomFb2WWB8frlHkkJoEPyHVR\";\n        sout << \"N6hlsAEd8ylb6SwVawZglxdpqfhQpn71NaRU/ZJnk7fnSVmKwcGVeh1sppPYKEu/Q7i4YrAGtLDp\";\n        sout << \"Osipwqh5gL/skuxQwsBI/VNqoxIELFbJKhGrVqr2kHWB3yE9cB5puaP/MPPvIwbPSNRZVVbvGV+m\";\n        sout << \"Mmi4LDSKPlxDmjl3wWnzdldnNUb281O5dA7lMuPHgibIFjl8EeVHBFLocpnFbSLRiCZx+xh8sNRX\";\n        sout << \"ti+5Zl/pGvlloP2k7yVNRFpB3Av30jzQePY/DOy5DoF2k4eY0qvSR7HtV2IG+9wpBAUCbIaD/2t3\";\n        sout << \"FBcQT2cWEx0TPZbBqPLAxruNGcv1z23BdWUeQpeEV6ij78xVILQegtNiJlCgMTCmIRr1meCfuVJ5\";\n        sout << \"vbvNLxRiL4JSZbjKgfonK98os72YhGB0Y2oL7ZpcthGFKCGAjo76XrMB/hoeXlx6UKYlLknZImWO\";\n        sout << \"NQj5SAhZElv+LKdSZ1oc9U+0Qm8K4G9+8OnQ4wS61R0MpZKXnfFAMp99XHqN0tD6W5Br22/IOyj9\";\n        sout << \"x2QH50KAfIYZFrJaLt0MMylpVhHPQ1RBembk0wDcwDt2phnU5nm3m22r81uUHp5Sc0Or/vrzpMEc\";\n        sout << \"9vqhEFhFG74o+EGTigUiyzCGUHJu9ITqb55xDmPm829KOqkOEV3L4XX/jLwRFVkbAHaijjmg17xN\";\n        sout << \"yJZkFlYG/RntbFd+p+10JuhI9ahBvvCjFnkC+8/F64Umx4jlWJRPIADPr3yH6tt+nVkC2Cbx+U4y\";\n        sout << \"bgINetMWF1b3syNyJh4qJy/KXX5UckzU9A1Xkz2MvXWiB8Jp0f+Q/bZ0inTmecpyBGWCsD0xRYPv\";\n        sout << \"Ktm2zqD2HL3Qtfpyi0khXGmUDKwvuFnjX5V57ustxKCq2h/ylqTDCMpqS/QQ122Tr2DuHHVjGwGG\";\n        sout << \"PajaD64n0qEj+zaqyUgpDZatEVMgFxpLpbJ+sTyBaYKYPYqGxoo+XycDYIWoc7K+7d2NT76qQcI/\";\n        sout << \"LHo0kGXRTNiciphMn4EX3PkH7zUqR/yCWBRsP4wtPax6aM2m6IpY3bDbOfwMzXDTZDLAfi3is8Lb\";\n        sout << \"H5AfK2DDG45w4olFJuLKO27zafuz9GIAgoTsUwpJIJeR4xdtlP9EtMjG6SZdp22+MBSh6w4CXe82\";\n        sout << \"iIquldB5HzaHvBr3UP5LGQR3W/Wky4udFj2+XCpKsDUll+4MZCeGz1VM5ZYjDKfRDzSaLjJspoVH\";\n        sout << \"TT05yuagEN3+w/ROxo419ZEnvR+X4QLyp0JofhFpSsr+J9fQwaz3IGpPMs7wA+Q9CfEw3FkrFfeH\";\n        sout << \"022qfnq3naUsXyh8xAeI4r+MP6WGlscgFkWPZhM/vDq2IcIbCwZ10Ivx8r9bwi6bAfPE5cru0oRf\";\n        sout << \"YYs7kU0l9z3yzeSvjVjkdZbmgRNPpED67KlUQyRibkWe34KGglSuSClFu6PWrfFxb/9ch0KTFVQS\";\n        sout << \"fo3NDryMrF6oeLHe7osiyJ1ismBimKN3idmZ7yUknYbpR7/Z2K0LbAIttidcQ8LpgUzy/6jROtHE\";\n        sout << \"MRLxKl4ba6tx6BP8WpXWVzx6xYox42qMX24SkhhNVR/9ETntqyFEeDXXlS88Nm14AZARVAp8wJ3n\";\n        sout << \"WaA9OydaCeVzFVZ614BRC41g8VoHz9iZxHF/7fL5gz+YTJH7ccf18hxv4U/y0ROiZAQflTW6+lYI\";\n        sout << \"kIO8t9A9eQ7Djh7cOHCyA7E391UriFUZH8kBzKjnMeF27uYx5U9acC5YUVtDk7O7Xq3wqeGaxS1b\";\n        sout << \"oTVKitvXCbdmvIiCK8N8RZeVlteuYhJ20u7LTHsO87c1Tv83pu9OiYDMwEpAFLwfHwi5YfZecAIA\";\n        sout << \"bkkveDusgnh80pxc/24zp7W42Hm6hfq852ZLLWD2bHm3YZdey2WIbGsjvQS+io4xoEKGLHUOi7Vs\";\n        sout << \"/Te80Yujo61Y3BjY8w58xNplBAXvK4Fn2EenYcDz839o62+xeUuGN4wSUpJF94aU9//hEF93J9Zf\";\n        sout << \"CxFPlooKe1W7nU3sl2ziEh0PeM4RImmQ9zVNkDEx8ahdmvWWSWlmlv1K754XAdwp68cdfKUIY8kk\";\n        sout << \"M666TRZrSCDUvDufPL4y1LTpQUmIhtNLkrYZg0WEXx5QRF00x90VrsIFcXA/3Sjc2MPi0iMck6vM\";\n        sout << \"kh4kYbIqlvgQSwTqc6XmXEM/W3HRuVCH8kQKIXjN5my0C3RbbYIr4vAPaQL8PCWaIjbLSHDcutk1\";\n        sout << \"LBjyPnJQzn2/vvm+3oKN2JXPxeKvTbaoYu7EvWtXxkFJlrKY+o+FQfxmtN8qxniGWVLuLX6k8keB\";\n        sout << \"wCLZV6wF1XG5FsqBoVh8qvAV/Tykk0VO5FJnoJ0sVwOveUgbCFKsReM24lZlgzHsHFaTN4qSWHyi\";\n        sout << \"BGg3nr0dETiOyEfLP/ckF4GhGMMQZmT9jMFyUEgDfszoDgF+jxA1buvCKTRm4iVgFT16pi4wTG8I\";\n        sout << \"fCOM+SU2UltyA9EHdOW3rm8P8w4z0D0/IzH9Vd/O8Y2kB4TUOW4yHdB95MBCJbvEGYXR/A1eTsMW\";\n        sout << \"J96ZVGCmlcOzWqPsX61LShr57TLbE7+hJzxUMEW+ri+goqnSehcpGurw0+d4K3+5jFHxUpNaT5n+\";\n        sout << \"t0p0S42lOvrgigSZrQiJozBCCpm4sCCM91bzGge0VpyuIGTVkzbzXfjzF5J/wliLSVyzqSNq+HqL\";\n        sout << \"06BqMB0leDtLT/msAUV6SRKr7/n6qMgkrIfrAri4d13kZTpexQTRTFXxcoIgwUelzsxhdwZQ4yMX\";\n        sout << \"dAeL/oKOQdjCgnsVFD5BD7clhTEOA8gVVxASHinziac7ZkdYaHwESDZBxJhv4j1nkKNLWZLifph7\";\n        sout << \"NdJBK51yqlBvkZKROBbTiQi7UCe/YGXusDPCBsu55iieo/o65HkF7olpANKxvHxBrQuCTxYnL1tl\";\n        sout << \"pMjxmZc1BA2T7vyd4AzXRJ6tMUdqUqnjPVFY7OIKMgUn7qRieMqt95vzJqh8+jdApnY+xwnIKosv\";\n        sout << \"ox55mijPLs9oUBzAJPpD3nDLR9pnTVIkY2RmVRQFUN/kuJHYbNtc0PRIAv6iDiZhe+jeCkTx/dXC\";\n        sout << \"sSVwD5hp/v0TvaPa0XSPr1BbqlvK6KjtdsVJsUOjHFskNm/8qlIGKp9F5QCtLOBhp1eoy2AZlNlN\";\n        sout << \"+eYQRzwMSsJNxq44rixF97d7qeiOkC/Uu3wNk7aL11AR5iS7gau10LHLs3YhMbUcb+4kf2j9NpWG\";\n        sout << \"wqMklOYYJag/XNyoQs8g44qAha1rVyeq4eXodi0JegvjkXWEB4Mq8jBuHXbYjYiRiHoL68/9mry5\";\n        sout << \"nlN2Duwp7g5yl982CZLZc0k7uSjKaDkWyynH60MwLnmVj2sA\";\n\n        // Put the data into the istream sin\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decode the base64 text into its compressed binary form\n        base64_coder.decode(sin,sout);\n        sin.clear();\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decompress the data into its original form\n        compressor.decompress(sin,sout);\n\n        // Return the decoded and decompressed data\n        return sout.str();\n    }\n\n}\n\n#endif // DLIB_FRONTAL_FACE_DETECTOr_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/frontal_face_detector_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FRONTAL_FACE_DETECTOr_ABSTRACT_Hh_\n#ifdef DLIB_FRONTAL_FACE_DETECTOr_ABSTRACT_Hh_\n\n#include \"object_detector_abstract.h\"\n#include \"scan_fhog_pyramid_abstract.h\"\n#include \"../image_transforms/image_pyramid_abstract.h\"\n\nnamespace dlib\n{\n    typedef object_detector<scan_fhog_pyramid<pyramid_down<6> > > frontal_face_detector;\n\n    frontal_face_detector get_frontal_face_detector(\n    );\n    /*!\n        ensures\n            - returns an object_detector that is configured to find human faces that are\n              looking more or less towards the camera.\n    !*/\n\n}\n\n#endif // DLIB_FRONTAL_FACE_DETECTOr_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/full_object_detection.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FULL_OBJECT_DeTECTION_Hh_\n#define DLIB_FULL_OBJECT_DeTECTION_Hh_\n\n#include \"../geometry.h\"\n#include \"full_object_detection_abstract.h\"\n#include <vector>\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    const static point OBJECT_PART_NOT_PRESENT(0x7FFFFFFF,\n                                                0x7FFFFFFF);\n\n// ----------------------------------------------------------------------------------------\n\n    class full_object_detection\n    {\n    public:\n        full_object_detection(\n            const rectangle& rect_,\n            const std::vector<point>& parts_\n        ) : rect(rect_), parts(parts_) {}\n\n        full_object_detection(){}\n\n        explicit full_object_detection(\n            const rectangle& rect_\n        ) : rect(rect_) {}\n\n        const rectangle& get_rect() const { return rect; }\n        unsigned long num_parts() const { return parts.size(); }\n\n        const point& part(\n            unsigned long idx\n        ) const \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < num_parts(),\n                \"\\t point full_object_detection::part()\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t idx:         \" << idx  \n                << \"\\n\\t num_parts(): \" << num_parts()  \n                << \"\\n\\t this:        \" << this\n                );\n            return parts[idx]; \n        }\n\n        friend void serialize (\n            const full_object_detection& item,\n            std::ostream& out\n        )\n        {\n            int version = 1;\n            serialize(version, out);\n            serialize(item.rect, out);\n            serialize(item.parts, out);\n        }\n\n        friend void deserialize (\n            full_object_detection& item,\n            std::istream& in\n        )\n        {\n            int version = 0;\n            deserialize(version, in);\n            if (version != 1)\n                throw serialization_error(\"Unexpected version encountered while deserializing dlib::full_object_detection.\");\n\n            deserialize(item.rect, in);\n            deserialize(item.parts, in);\n        }\n\n    private:\n        rectangle rect;\n        std::vector<point> parts;  \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool all_parts_in_rect (\n        const full_object_detection& obj\n    )\n    {\n        for (unsigned long i = 0; i < obj.num_parts(); ++i)\n        {\n            if (obj.get_rect().contains(obj.part(i)) == false &&\n                obj.part(i) != OBJECT_PART_NOT_PRESENT)\n                return false;\n        }\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FULL_OBJECT_DeTECTION_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/full_object_detection_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FULL_OBJECT_DeTECTION_ABSTRACT_Hh_\n#ifdef DLIB_FULL_OBJECT_DeTECTION_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../geometry.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    const static point OBJECT_PART_NOT_PRESENT(0x7FFFFFFF,\n                                               0x7FFFFFFF);\n\n// ----------------------------------------------------------------------------------------\n\n    class full_object_detection\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents the location of an object in an image along with the\n                positions of each of its constituent parts.\n        !*/\n\n    public:\n\n        full_object_detection(\n            const rectangle& rect,\n            const std::vector<point>& parts\n        );\n        /*!\n            ensures\n                - #get_rect() == rect\n                - #num_parts() == parts.size()\n                - for all valid i:\n                    - part(i) == parts[i]\n        !*/\n\n        full_object_detection(\n        );\n        /*!\n            ensures\n                - #get_rect().is_empty() == true\n                - #num_parts() == 0\n        !*/\n\n        explicit full_object_detection(\n            const rectangle& rect\n        );\n        /*!\n            ensures\n                - #get_rect() == rect\n                - #num_parts() == 0\n        !*/\n\n        const rectangle& get_rect(\n        ) const;\n        /*!\n            ensures\n                - returns the rectangle that indicates where this object is.  In general,\n                  this should be the bounding box for the object.\n        !*/\n\n        unsigned long num_parts(\n        ) const;\n        /*!\n            ensures\n                - returns the number of parts in this object.  \n        !*/\n\n        const point& part(\n            unsigned long idx\n        ) const; \n        /*!\n            requires\n                - idx < num_parts()\n            ensures\n                - returns the location of the center of the idx-th part of this object.\n                  Note that it is valid for a part to be \"not present\".  This is indicated\n                  when the return value of part() is equal to OBJECT_PART_NOT_PRESENT. \n                  This is useful for modeling object parts that are not always observed.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const full_object_detection& item, \n        std::ostream& out\n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        full_object_detection& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    bool all_parts_in_rect (\n        const full_object_detection& obj\n    );\n    /*!\n        ensures\n            - returns true if all the parts in obj are contained within obj.get_rect().\n              That is, returns true if and only if, for all valid i, the following is\n              always true:\n                obj.get_rect().contains(obj.part(i)) == true || obj.part(i) == OBJECT_PART_NOT_PRESENT\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FULL_OBJECT_DeTECTION_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/generic_image.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_GeNERIC_IMAGE_Hh_\n#define DLIB_GeNERIC_IMAGE_Hh_\n\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    /*!\n        In dlib, an \"image\" is any object that implements the generic image interface.  In\n        particular, this simply means that an image type (let's refer to it as image_type\n        from here on) has the following seven global functions defined for it:\n            - long        num_rows      (const image_type& img)\n            - long        num_columns   (const image_type& img)\n            - void        set_image_size(      image_type& img, long rows, long cols)\n            - void*       image_data    (      image_type& img)\n            - const void* image_data    (const image_type& img)\n            - long        width_step    (const image_type& img)\n            - void        swap          (      image_type& a, image_type& b)\n        And also provides a specialization of the image_traits template that looks like:\n            namespace dlib\n            {\n                template <> \n                struct image_traits<image_type>\n                {\n                    typedef the_type_of_pixel_used_in_image_type pixel_type;\n                };\n            }\n\n        Additionally, an image object must be default constructable.  This means that \n        expressions of the form:\n            image_type img;\n        Must be legal.\n\n        Finally, the type of pixel in image_type must have a pixel_traits specialization.\n        That is, pixel_traits<typename image_traits<image_type>::pixel_type> must be one of\n        the specializations of pixel_traits.  \n        \n        \n        To be very precise, the seven functions defined above are defined thusly:\n\n            long num_rows(\n                const image_type& img\n            ); \n            /!*\n                ensures\n                    - returns the number of rows in the given image\n            *!/\n\n            long num_columns(\n                const image_type& img\n            );\n            /!*\n                ensures\n                    - returns the number of columns in the given image\n            *!/\n\n            void set_image_size(\n                image_type& img,\n                long rows,\n                long cols \n            );\n            /!*\n                requires\n                    - rows >= 0 && cols >= 0\n                ensures\n                    - num_rows(#img) == rows\n                    - num_columns(#img) == cols\n            *!/\n\n            void* image_data(\n                image_type& img\n            );\n            /!*\n                ensures\n                    - returns a non-const pointer to the pixel at row and column position 0,0\n                      in the given image.  Or if the image has zero rows or columns in it\n                      then this function returns NULL.\n                    - The image lays pixels down in row major order.  However, there might\n                      be padding at the end of each row.  The amount of padding is given by\n                      width_step(img).\n            *!/\n\n            const void* image_data(\n                const image_type& img\n            );\n            /!*\n                ensures\n                    - returns a const pointer to the pixel at row and column position 0,0 in\n                      the given image.  Or if the image has zero rows or columns in it then\n                      this function returns NULL.\n                    - The image lays pixels down in row major order.  However, there might\n                      be padding at the end of each row.  The amount of padding is given by\n                      width_step(img).\n            *!/\n\n            long width_step(\n                const image_type& img\n            );\n            /!*\n                ensures\n                    - returns the size of one row of the image, in bytes.  More precisely,\n                      return a number N such that: (char*)image_data(img) + N*R == a\n                      pointer to the first pixel in the R-th row of the image. This means\n                      that the image must lay its pixels down in row major order.\n            *!/\n\n            void swap(\n                image_type& a,\n                image_type& b\n            );\n            /!*\n                ensures\n                    - swaps the state of a and b\n            *!/\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    struct image_traits;\n    /*!\n        WHAT THIS OBJECT REPRESENTS\n            This is a traits class for generic image objects.  You can use it to find out\n            the pixel type contained within an image via an expression of the form:\n                image_traits<image_type>::pixel_type\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                   UTILITIES TO MAKE ACCESSING IMAGE PIXELS SIMPLER\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    class image_view\n    {\n        /*!\n            REQUIREMENTS ON image_type\n                image_type must be an image object as defined at the top of this file.  \n\n            WHAT THIS OBJECT REPRESENTS\n                This object takes an image object and wraps it with an interface that makes\n                it look like a dlib::array2d.  That is, it makes it look similar to a\n                regular 2-dimensional C style array, making code which operates on the\n                pixels simple to read.\n\n                Note that an image_view instance is valid until the image given to its\n                constructor is modified through an interface other than the image_view\n                instance.  This is because, for example, someone might cause the underlying\n                image object to reallocate its memory, thus invalidating the pointer to its\n                pixel data stored in the image_view.    \n\n                As an side, the reason why this object stores a pointer to the image\n                object's data and uses that pointer instead of calling image_data() each\n                time a pixel is accessed is to allow for image objects to implement\n                complex, and possibly slow, image_data() functions.  For example, an image\n                object might perform some kind of synchronization between a GPU and the\n                host memory during a call to image_data().  Therefore, we call image_data()\n                only in image_view's constructor to avoid the performance penalty of\n                calling it for each pixel access.\n        !*/\n\n    public:\n        typedef typename image_traits<image_type>::pixel_type pixel_type;\n\n        image_view(\n            image_type& img\n        ) : \n            _data((char*)image_data(img)), \n            _width_step(width_step(img)),\n            _nr(num_rows(img)),\n            _nc(num_columns(img)),\n            _img(&img) \n        {}\n\n        long nr() const { return _nr; }\n        /*!\n            ensures\n                - returns the number of rows in this image.\n        !*/\n\n        long nc() const { return _nc; }\n        /*!\n            ensures\n                - returns the number of columns in this image.\n        !*/\n\n        unsigned long size() const { return static_cast<unsigned long>(nr()*nc()); }\n        /*!\n            ensures\n                - returns the number of pixels in this image.\n        !*/\n\n#ifndef ENABLE_ASSERTS\n        pixel_type* operator[] (long row) { return (pixel_type*)(_data+_width_step*row); }\n        /*!\n            requires\n                - 0 <= row < nr()\n            ensures\n                - returns a pointer to the first pixel in the row-th row.  Therefore, the\n                  pixel at row and column position r,c can be accessed via (*this)[r][c].\n        !*/\n\n        const pixel_type* operator[] (long row) const { return (const pixel_type*)(_data+_width_step*row); }\n        /*!\n            requires\n                - 0 <= row < nr()\n            ensures\n                - returns a const pointer to the first pixel in the row-th row.  Therefore,\n                  the pixel at row and column position r,c can be accessed via\n                  (*this)[r][c].\n        !*/\n#else\n        // If asserts are enabled then we need to return a proxy class so we can make sure\n        // the column accesses don't go out of bounds.\n        struct pix_row\n        {\n            pix_row(pixel_type* data_, long nc_) : data(data_),_nc(nc_) {}\n            const pixel_type& operator[] (long col) const\n            {\n                DLIB_ASSERT(0 <= col && col < _nc, \n                    \"\\t The given column index is out of range.\"\n                    << \"\\n\\t col: \" << col \n                    << \"\\n\\t _nc: \" << _nc);\n                return data[col];\n            }\n            pixel_type& operator[] (long col)\n            {\n                DLIB_ASSERT(0 <= col && col < _nc, \n                    \"\\t The given column index is out of range.\"\n                    << \"\\n\\t col: \" << col \n                    << \"\\n\\t _nc: \" << _nc);\n                return data[col];\n            }\n        private:\n            pixel_type* const data;\n            const long _nc;\n        };\n        pix_row operator[] (long row) \n        { \n            DLIB_ASSERT(0 <= row && row < _nr, \n                \"\\t The given row index is out of range.\"\n                << \"\\n\\t row: \" << row \n                << \"\\n\\t _nr: \" << _nr);\n            return pix_row((pixel_type*)(_data+_width_step*row), _nc); \n        }\n        const pix_row operator[] (long row) const \n        { \n            DLIB_ASSERT(0 <= row && row < _nr, \n                \"\\t The given row index is out of range.\"\n                << \"\\n\\t row: \" << row \n                << \"\\n\\t _nr: \" << _nr);\n            return pix_row((pixel_type*)(_data+_width_step*row), _nc); \n        }\n#endif\n\n        void set_size(long rows, long cols) \n        /*!\n            requires\n                - rows >= 0 && cols >= 0\n            ensures\n                - Tells the underlying image to resize itself to have the given number of\n                  rows and columns.\n                - #nr() == rows\n                - #nc() == cols\n        !*/\n        { \n            DLIB_ASSERT((cols >= 0 && rows >= 0),\n                        \"\\t image_view::set_size(long rows, long cols)\"\n                        << \"\\n\\t The images can't have negative rows or columns.\"\n                        << \"\\n\\t cols: \" << cols \n                        << \"\\n\\t rows: \" << rows \n            );\n            set_image_size(*_img, rows, cols); *this = *_img; \n        }\n\n        void clear() { set_size(0,0); }\n        /*!\n            ensures\n                - sets the image to have 0 pixels in it.\n        !*/\n\n    private:\n\n        char* _data;\n        long _width_step;\n        long _nr;\n        long _nc;\n        image_type* _img;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    class const_image_view\n    {\n        /*!\n            REQUIREMENTS ON image_type\n                image_type must be an image object as defined at the top of this file.  \n\n            WHAT THIS OBJECT REPRESENTS\n                This object is just like the image_view except that it provides a \"const\"\n                view into an image.  That is, it has the same interface as image_view\n                except that you can't modify the image through a const_image_view.\n        !*/\n\n    public:\n        typedef typename image_traits<image_type>::pixel_type pixel_type;\n\n        const_image_view(\n            const image_type& img\n        ) : \n            _data((char*)image_data(img)), \n            _width_step(width_step(img)),\n            _nr(num_rows(img)),\n            _nc(num_columns(img))\n        {}\n\n        long nr() const { return _nr; }\n        long nc() const { return _nc; }\n        unsigned long size() const { return static_cast<unsigned long>(nr()*nc()); }\n#ifndef ENABLE_ASSERTS\n        const pixel_type* operator[] (long row) const { return (const pixel_type*)(_data+_width_step*row); }\n#else\n        // If asserts are enabled then we need to return a proxy class so we can make sure\n        // the column accesses don't go out of bounds.\n        struct pix_row\n        {\n            pix_row(pixel_type* data_, long nc_) : data(data_),_nc(nc_) {}\n            const pixel_type& operator[] (long col) const\n            {\n                DLIB_ASSERT(0 <= col && col < _nc, \n                    \"\\t The given column index is out of range.\"\n                    << \"\\n\\t col: \" << col \n                    << \"\\n\\t _nc: \" << _nc);\n                return data[col];\n            }\n        private:\n            pixel_type* const data;\n            const long _nc;\n        };\n        const pix_row operator[] (long row) const \n        { \n            DLIB_ASSERT(0 <= row && row < _nr, \n                \"\\t The given row index is out of range.\"\n                << \"\\n\\t row: \" << row \n                << \"\\n\\t _nr: \" << _nr);\n            return pix_row((pixel_type*)(_data+_width_step*row), _nc); \n        }\n#endif\n\n    private:\n        const char* _data;\n        long _width_step;\n        long _nr;\n        long _nc;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    image_view<image_type> make_image_view ( image_type& img) \n    { return image_view<image_type>(img); }\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined at the\n              top of this file.\n        ensures\n            - constructs an image_view from an image object\n    !*/\n\n    template <typename image_type>\n    const_image_view<image_type> make_image_view (const image_type& img) \n    { return const_image_view<image_type>(img); }\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined at the\n              top of this file.\n        ensures\n            - constructs a const_image_view from an image object\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    inline unsigned long image_size(\n        const image_type& img\n    ) { return num_columns(img)*num_rows(img); }\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined at the\n              top of this file.\n        ensures\n            - returns the number of pixels in the given image.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    inline long num_rows(\n        const image_type& img\n    ) { return img.nr(); }\n    /*!\n        ensures\n            - By default, try to use the member function .nr() to determine the number\n              of rows in an image.  However, as stated at the top of this file, image\n              objects should provide their own overload of num_rows() if needed.\n    !*/\n\n    template <typename image_type>\n    inline long num_columns(\n        const image_type& img\n    ) { return img.nc(); }\n    /*!\n        ensures\n            - By default, try to use the member function .nc() to determine the number\n              of columns in an image.  However, as stated at the top of this file, image\n              objects should provide their own overload of num_rows() if needed.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_GeNERIC_IMAGE_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/object_detector.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OBJECT_DeTECTOR_Hh_\n#define DLIB_OBJECT_DeTECTOR_Hh_\n\n#include \"object_detector_abstract.h\"\n#include \"../geometry.h\"\n#include <vector>\n#include \"box_overlap_testing.h\"\n#include \"full_object_detection.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct rect_detection\n    {\n        double detection_confidence;\n        unsigned long weight_index;\n        rectangle rect;\n\n        bool operator<(const rect_detection& item) const { return detection_confidence < item.detection_confidence; }\n    };\n\n    struct full_detection\n    {\n        double detection_confidence;\n        unsigned long weight_index;\n        full_object_detection rect;\n\n        bool operator<(const full_detection& item) const { return detection_confidence < item.detection_confidence; }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_scanner_type>\n    struct processed_weight_vector\n    {\n        processed_weight_vector(){}\n\n        typedef typename image_scanner_type::feature_vector_type feature_vector_type;\n\n        void init (\n            const image_scanner_type& \n        ) \n        /*!\n            requires\n                - w has already been assigned its value.  Note that the point of this\n                  function is to allow an image scanner to overload the\n                  processed_weight_vector template and provide some different kind of\n                  object as the output of get_detect_argument().  For example, the\n                  scan_fhog_pyramid object uses an overload that causes\n                  get_detect_argument() to return the special fhog_filterbank object\n                  instead of a feature_vector_type.  This avoids needing to construct the\n                  fhog_filterbank during each call to detect and therefore speeds up\n                  detection.\n        !*/\n        {}\n\n        // return the first argument to image_scanner_type::detect()\n        const feature_vector_type& get_detect_argument() const { return w; }\n\n        feature_vector_type w;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type_\n        >\n    class object_detector\n    {\n    public:\n        typedef image_scanner_type_ image_scanner_type;\n        typedef typename image_scanner_type::feature_vector_type feature_vector_type;\n\n        object_detector (\n        );\n\n        object_detector (\n            const object_detector& item \n        );\n\n        object_detector (\n            const image_scanner_type& scanner_, \n            const test_box_overlap& overlap_tester_,\n            const feature_vector_type& w_ \n        );\n\n        object_detector (\n            const image_scanner_type& scanner_, \n            const test_box_overlap& overlap_tester_,\n            const std::vector<feature_vector_type>& w_ \n        );\n\n        explicit object_detector (\n            const std::vector<object_detector>& detectors\n        );\n\n        unsigned long num_detectors (\n        ) const { return w.size(); }\n\n        const feature_vector_type& get_w (\n            unsigned long idx = 0\n        ) const { return w[idx].w; }\n        \n        const processed_weight_vector<image_scanner_type>& get_processed_w (\n            unsigned long idx = 0\n        ) const { return w[idx]; }\n\n        const test_box_overlap& get_overlap_tester (\n        ) const;\n\n        const image_scanner_type& get_scanner (\n        ) const;\n\n        object_detector& operator= (\n            const object_detector& item \n        );\n\n        template <\n            typename image_type\n            >\n        std::vector<rectangle> operator() (\n            const image_type& img,\n            double adjust_threshold = 0\n        );\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<std::pair<double, rectangle> >& final_dets,\n            double adjust_threshold = 0\n        );\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<std::pair<double, full_object_detection> >& final_dets,\n            double adjust_threshold = 0\n        );\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<full_object_detection>& final_dets,\n            double adjust_threshold = 0\n        );\n\n        // These typedefs are here for backwards compatibility with previous versions of\n        // dlib.\n        typedef ::dlib::rect_detection rect_detection;\n        typedef ::dlib::full_detection full_detection;\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<rect_detection>& final_dets,\n            double adjust_threshold = 0\n        );\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<full_detection>& final_dets,\n            double adjust_threshold = 0\n        );\n\n        template <typename T>\n        friend void serialize (\n            const object_detector<T>& item,\n            std::ostream& out\n        );\n\n        template <typename T>\n        friend void deserialize (\n            object_detector<T>& item,\n            std::istream& in \n        );\n\n    public:\n\n        bool overlaps_any_box (\n            const std::vector<rect_detection>& rects,\n            const dlib::rectangle& rect\n        ) const\n        {\n            for (unsigned long i = 0; i < rects.size(); ++i)\n            {\n                if (boxes_overlap(rects[i].rect, rect))\n                    return true;\n            }\n            return false;\n        }\n\n        test_box_overlap boxes_overlap;\n        std::vector<processed_weight_vector<image_scanner_type> > w;\n        image_scanner_type scanner;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const object_detector<T>& item,\n        std::ostream& out\n    )\n    {\n        int version = 2;\n        serialize(version, out);\n\n        T scanner;\n        scanner.copy_configuration(item.scanner);\n        serialize(scanner, out);\n        serialize(item.boxes_overlap, out);\n        // serialize all the weight vectors\n        serialize(item.w.size(), out);\n        for (unsigned long i = 0; i < item.w.size(); ++i)\n            serialize(item.w[i].w, out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void deserialize (\n        object_detector<T>& item,\n        std::istream& in \n    )\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version == 1)\n        {\n            deserialize(item.scanner, in);\n            item.w.resize(1);\n            deserialize(item.w[0].w, in);\n            item.w[0].init(item.scanner);\n            deserialize(item.boxes_overlap, in);\n        }\n        else if (version == 2)\n        {\n            deserialize(item.scanner, in);\n            deserialize(item.boxes_overlap, in);\n            unsigned long num_detectors = 0;\n            deserialize(num_detectors, in);\n            item.w.resize(num_detectors);\n            for (unsigned long i = 0; i < item.w.size(); ++i)\n            {\n                deserialize(item.w[i].w, in);\n                item.w[i].init(item.scanner);\n            }\n        }\n        else \n        {\n            throw serialization_error(\"Unexpected version encountered while deserializing a dlib::object_detector object.\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                      object_detector member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    object_detector<image_scanner_type>::\n    object_detector (\n    )\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    object_detector<image_scanner_type>::\n    object_detector (\n        const object_detector& item \n    )\n    {\n        boxes_overlap = item.boxes_overlap;\n        w = item.w;\n        scanner.copy_configuration(item.scanner);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    object_detector<image_scanner_type>::\n    object_detector (\n        const image_scanner_type& scanner_, \n        const test_box_overlap& overlap_tester,\n        const feature_vector_type& w_ \n    ) :\n        boxes_overlap(overlap_tester)\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(scanner_.get_num_detection_templates() > 0 &&\n                    w_.size() == scanner_.get_num_dimensions() + 1, \n            \"\\t object_detector::object_detector(scanner_,overlap_tester,w_)\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t scanner_.get_num_detection_templates(): \" << scanner_.get_num_detection_templates()\n            << \"\\n\\t w_.size():                     \" << w_.size()\n            << \"\\n\\t scanner_.get_num_dimensions(): \" << scanner_.get_num_dimensions()\n            << \"\\n\\t this: \" << this\n            );\n\n        scanner.copy_configuration(scanner_);\n        w.resize(1);\n        w[0].w = w_;\n        w[0].init(scanner);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    object_detector<image_scanner_type>::\n    object_detector (\n        const image_scanner_type& scanner_, \n        const test_box_overlap& overlap_tester,\n        const std::vector<feature_vector_type>& w_ \n    ) :\n        boxes_overlap(overlap_tester)\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(scanner_.get_num_detection_templates() > 0 && w_.size() > 0,\n            \"\\t object_detector::object_detector(scanner_,overlap_tester,w_)\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t scanner_.get_num_detection_templates(): \" << scanner_.get_num_detection_templates()\n            << \"\\n\\t w_.size():                     \" << w_.size()\n            << \"\\n\\t this: \" << this\n            );\n\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < w_.size(); ++i)\n        {\n            DLIB_ASSERT(w_[i].size() == scanner_.get_num_dimensions() + 1, \n                \"\\t object_detector::object_detector(scanner_,overlap_tester,w_)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t scanner_.get_num_detection_templates(): \" << scanner_.get_num_detection_templates()\n                << \"\\n\\t w_[\"<<i<<\"].size():                     \" << w_[i].size()\n                << \"\\n\\t scanner_.get_num_dimensions(): \" << scanner_.get_num_dimensions()\n                << \"\\n\\t this: \" << this\n                );\n        }\n#endif\n\n        scanner.copy_configuration(scanner_);\n        w.resize(w_.size());\n        for (unsigned long i = 0; i < w.size(); ++i)\n        {\n            w[i].w = w_[i];\n            w[i].init(scanner);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    object_detector<image_scanner_type>::\n    object_detector (\n        const std::vector<object_detector>& detectors\n    )\n    {\n        DLIB_ASSERT(detectors.size() != 0,\n                \"\\t object_detector::object_detector(detectors)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t this: \" << this\n        );\n        std::vector<feature_vector_type> weights;\n        weights.reserve(detectors.size());\n        for (unsigned long i = 0; i < detectors.size(); ++i)\n        {\n            for (unsigned long j = 0; j < detectors[i].num_detectors(); ++j)\n                weights.push_back(detectors[i].get_w(j));\n        }\n\n        *this = object_detector(detectors[0].get_scanner(), detectors[0].get_overlap_tester(), weights);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    object_detector<image_scanner_type>& object_detector<image_scanner_type>::\n    operator= (\n        const object_detector& item \n    )\n    {\n        if (this == &item)\n            return *this;\n\n        boxes_overlap = item.boxes_overlap;\n        w = item.w;\n        scanner.copy_configuration(item.scanner);\n        return *this;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    template <\n        typename image_type\n        >\n    void object_detector<image_scanner_type>::\n    operator() (\n        const image_type& img,\n        std::vector<rect_detection>& final_dets,\n        double adjust_threshold\n    ) \n    {\n        scanner.load(img);\n        std::vector<std::pair<double, rectangle> > dets;\n        std::vector<rect_detection> dets_accum;\n        for (unsigned long i = 0; i < w.size(); ++i)\n        {\n            const double thresh = w[i].w(scanner.get_num_dimensions());\n            scanner.detect(w[i].get_detect_argument(), dets, thresh + adjust_threshold);\n            for (unsigned long j = 0; j < dets.size(); ++j)\n            {\n                rect_detection temp;\n                temp.detection_confidence = dets[j].first-thresh;\n                temp.weight_index = i;\n                temp.rect = dets[j].second;\n                dets_accum.push_back(temp);\n            }\n        }\n\n        // Do non-max suppression\n        final_dets.clear();\n        if (w.size() > 1)\n            std::sort(dets_accum.rbegin(), dets_accum.rend());\n        for (unsigned long i = 0; i < dets_accum.size(); ++i)\n        {\n            if (overlaps_any_box(final_dets, dets_accum[i].rect))\n                continue;\n\n            final_dets.push_back(dets_accum[i]);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    template <\n        typename image_type\n        >\n    void object_detector<image_scanner_type>::\n    operator() (\n        const image_type& img,\n        std::vector<full_detection>& final_dets,\n        double adjust_threshold \n    )\n    {\n        std::vector<rect_detection> dets;\n        (*this)(img,dets,adjust_threshold);\n\n        final_dets.resize(dets.size());\n\n        // convert all the rectangle detections into full_object_detections.\n        for (unsigned long i = 0; i < dets.size(); ++i)\n        {\n            final_dets[i].detection_confidence = dets[i].detection_confidence;\n            final_dets[i].weight_index = dets[i].weight_index;\n            final_dets[i].rect = scanner.get_full_object_detection(dets[i].rect, w[dets[i].weight_index].w);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    template <\n        typename image_type\n        >\n    std::vector<rectangle> object_detector<image_scanner_type>::\n    operator() (\n        const image_type& img,\n        double adjust_threshold\n    ) \n    {\n        std::vector<rect_detection> dets;\n        (*this)(img,dets,adjust_threshold);\n\n        std::vector<rectangle> final_dets(dets.size());\n        for (unsigned long i = 0; i < dets.size(); ++i)\n            final_dets[i] = dets[i].rect;\n\n        return final_dets;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    template <\n        typename image_type\n        >\n    void object_detector<image_scanner_type>::\n    operator() (\n        const image_type& img,\n        std::vector<std::pair<double, rectangle> >& final_dets,\n        double adjust_threshold\n    ) \n    {\n        std::vector<rect_detection> dets;\n        (*this)(img,dets,adjust_threshold);\n\n        final_dets.resize(dets.size());\n        for (unsigned long i = 0; i < dets.size(); ++i)\n            final_dets[i] = std::make_pair(dets[i].detection_confidence,dets[i].rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    template <\n        typename image_type\n        >\n    void object_detector<image_scanner_type>::\n    operator() (\n        const image_type& img,\n        std::vector<std::pair<double, full_object_detection> >& final_dets,\n        double adjust_threshold\n    ) \n    {\n        std::vector<rect_detection> dets;\n        (*this)(img,dets,adjust_threshold);\n\n        final_dets.clear();\n        final_dets.reserve(dets.size());\n\n        // convert all the rectangle detections into full_object_detections.\n        for (unsigned long i = 0; i < dets.size(); ++i)\n        {\n            final_dets.push_back(std::make_pair(dets[i].detection_confidence, \n                                                scanner.get_full_object_detection(dets[i].rect, w[dets[i].weight_index].w)));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    template <\n        typename image_type\n        >\n    void object_detector<image_scanner_type>::\n    operator() (\n        const image_type& img,\n        std::vector<full_object_detection>& final_dets,\n        double adjust_threshold\n    ) \n    {\n        std::vector<rect_detection> dets;\n        (*this)(img,dets,adjust_threshold);\n\n        final_dets.clear();\n        final_dets.reserve(dets.size());\n\n        // convert all the rectangle detections into full_object_detections.\n        for (unsigned long i = 0; i < dets.size(); ++i)\n        {\n            final_dets.push_back(scanner.get_full_object_detection(dets[i].rect, w[dets[i].weight_index].w));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    const test_box_overlap& object_detector<image_scanner_type>::\n    get_overlap_tester (\n    ) const\n    {\n        return boxes_overlap;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    const image_scanner_type& object_detector<image_scanner_type>::\n    get_scanner (\n    ) const\n    {\n        return scanner;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OBJECT_DeTECTOR_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/object_detector_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OBJECT_DeTECTOR_ABSTRACT_Hh_\n#ifdef DLIB_OBJECT_DeTECTOR_ABSTRACT_Hh_\n\n#include \"../geometry.h\"\n#include <vector>\n#include \"box_overlap_testing_abstract.h\"\n#include \"full_object_detection_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct rect_detection\n    {\n        double detection_confidence;\n        unsigned long weight_index;\n        rectangle rect;\n    };\n\n    struct full_detection\n    {\n        double detection_confidence;\n        unsigned long weight_index;\n        full_object_detection rect;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type_\n        >\n    class object_detector\n    {\n        /*!\n            REQUIREMENTS ON image_scanner_type_\n                image_scanner_type_ must be an implementation of \n                dlib/image_processing/scan_image_pyramid_abstract.h or \n                dlib/image_processing/scan_fhog_pyramid.h or \n                dlib/image_processing/scan_image_custom.h or \n                dlib/image_processing/scan_image_boxes_abstract.h \n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for detecting the positions of objects in an image.\n                In particular, it is a simple container to aggregate an instance of an image \n                scanner (i.e. scan_image_pyramid, scan_fhog_pyramid, scan_image_custom, or\n                scan_image_boxes), the weight vector needed by one of these image scanners,\n                and finally an instance of test_box_overlap.  The test_box_overlap object\n                is used to perform non-max suppression on the output of the image scanner\n                object.  \n\n                Note further that this object can contain multiple weight vectors.  In this\n                case, it will run the image scanner multiple times, once with each of the\n                weight vectors.  Then it will aggregate the results from all runs, perform\n                non-max suppression and then return the results.  Therefore, the object_detector \n                can also be used as a container for a set of object detectors that all use\n                the same image scanner but different weight vectors.  This is useful since\n                the object detection procedure has two parts.  A loading step where the\n                image is loaded into the scanner, then a detect step which uses the weight\n                vector to locate objects in the image.  Since the loading step is independent \n                of the weight vector it is most efficient to run multiple detectors by\n                performing one load into a scanner followed by multiple detect steps.  This\n                avoids unnecessarily loading the same image into the scanner multiple times.  \n        !*/\n    public:\n        typedef image_scanner_type_ image_scanner_type;\n        typedef typename image_scanner_type::feature_vector_type feature_vector_type;\n\n        object_detector (\n        );\n        /*!\n            ensures\n                - This detector won't generate any detections when\n                  presented with an image.\n                - #num_detectors() == 0\n        !*/\n\n        object_detector (\n            const object_detector& item \n        );\n        /*!\n            ensures\n                - #*this is a copy of item\n                - #get_scanner() == item.get_scanner()\n                  (note that only the \"configuration\" of item.get_scanner() is copied.\n                  I.e. the copy is done using copy_configuration())\n        !*/\n\n        object_detector (\n            const image_scanner_type& scanner, \n            const test_box_overlap& overlap_tester,\n            const feature_vector_type& w \n        );\n        /*!\n            requires\n                - w.size() == scanner.get_num_dimensions() + 1\n                - scanner.get_num_detection_templates() > 0\n            ensures\n                - When the operator() member function is called it will\n                  invoke scanner.detect(w,dets,w(w.size()-1)), suppress\n                  overlapping detections, and then report the results.\n                - when #*this is used to detect objects, the set of\n                  output detections will never contain any overlaps\n                  with respect to overlap_tester.  That is, for all \n                  pairs of returned detections A and B, we will always\n                  have: overlap_tester(A,B) == false\n                - #get_w() == w\n                - #get_overlap_tester() == overlap_tester\n                - #get_scanner() == scanner\n                  (note that only the \"configuration\" of scanner is copied.\n                  I.e. the copy is done using copy_configuration())\n                - #num_detectors() == 1\n        !*/\n\n        object_detector (\n            const image_scanner_type& scanner, \n            const test_box_overlap& overlap_tester,\n            const std::vector<feature_vector_type>& w \n        );\n        /*!\n            requires\n                - for all valid i:\n                    - w[i].size() == scanner.get_num_dimensions() + 1\n                - scanner.get_num_detection_templates() > 0\n                - w.size() > 0\n            ensures\n                - When the operator() member function is called it will invoke\n                  get_scanner().detect(w[i],dets,w[i](w[i].size()-1)) for all valid i.  Then it\n                  will take all the detections output by the calls to detect() and suppress\n                  overlapping detections, and finally report the results.\n                - when #*this is used to detect objects, the set of output detections will\n                  never contain any overlaps with respect to overlap_tester.  That is, for\n                  all pairs of returned detections A and B, we will always have:\n                    overlap_tester(A,B) == false\n                - for all valid i:\n                    - #get_w(i) == w[i]\n                - #num_detectors() == w.size()\n                - #get_overlap_tester() == overlap_tester\n                - #get_scanner() == scanner\n                  (note that only the \"configuration\" of scanner is copied.\n                  I.e. the copy is done using copy_configuration())\n        !*/\n\n        explicit object_detector (\n            const std::vector<object_detector>& detectors\n        );\n        /*!\n            requires\n                - detectors.size() != 0\n                - All the detectors must use compatibly configured scanners.  That is, it\n                  must make sense for the weight vector from one detector to be used with\n                  the scanner from any other.\n                - for all valid i:\n                    - detectors[i].get_scanner().get_num_dimensions() == detectors[0].get_scanner().get_num_dimensions()\n                      (i.e. all the detectors use scanners that use the same kind of feature vectors.)\n            ensures\n                - Very much like the above constructor, this constructor takes all the\n                  given detectors and packs them into #*this.  That is, invoking operator()\n                  on #*this will run all the detectors, perform non-max suppression, and\n                  then report the results.\n                - When #*this is used to detect objects, the set of output detections will\n                  never contain any overlaps with respect to overlap_tester.  That is, for\n                  all pairs of returned detections A and B, we will always have:\n                    overlap_tester(A,B) == false\n                - #num_detectors() == The sum of detectors[i].num_detectors() for all valid i. \n                - #get_overlap_tester() == detectors[0].get_overlap_tester()\n                - #get_scanner() == detectors[0].get_scanner()\n                  (note that only the \"configuration\" of scanner is copied.  I.e. the copy\n                  is done using copy_configuration())\n        !*/\n\n        unsigned long num_detectors (\n        ) const; \n        /*!\n            ensures\n                - returns the number of weight vectors in this object.  Since each weight\n                  vector logically represents an object detector, this returns the number\n                  of object detectors contained in this object.\n        !*/\n\n        const feature_vector_type& get_w (\n            unsigned long idx = 0\n        ) const;\n        /*!\n            requires\n                - idx < num_detectors\n            ensures\n                - returns the idx-th weight vector loaded into this object.  All the weight vectors\n                  have the same dimension and logically each represents a different detector.\n        !*/\n\n        const test_box_overlap& get_overlap_tester (\n        ) const;\n        /*!\n            ensures\n                - returns the overlap tester used by this object\n        !*/\n\n        const image_scanner_type& get_scanner (\n        ) const;\n        /*!\n            ensures\n                - returns the image scanner used by this object.  \n        !*/\n\n        object_detector& operator= (\n            const object_detector& item \n        );\n        /*!\n            ensures\n                - #*this is a copy of item\n                - #get_scanner() == item.get_scanner()\n                  (note that only the \"configuration\" of item.get_scanner() is \n                  copied.  I.e. the copy is done using copy_configuration())\n                - returns #*this\n        !*/\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<rect_detection>& dets,\n            double adjust_threshold = 0\n        );\n        /*!\n            requires\n                - img == an object which can be accepted by image_scanner_type::load()\n            ensures\n                - Performs object detection on the given image and stores the detected\n                  objects into #dets.  In particular, we will have that:\n                    - #dets is sorted such that the highest confidence detections come\n                      first.  E.g. element 0 is the best detection, element 1 the next\n                      best, and so on.\n                    - #dets.size() == the number of detected objects.\n                    - #dets[i].detection_confidence == The strength of the i-th detection.\n                      Larger values indicate that the detector is more confident that\n                      #dets[i] is a correct detection rather than being a false alarm.\n                      Moreover, the detection_confidence is equal to the detection value\n                      output by the scanner minus the threshold value stored at the end of\n                      the weight vector in get_w(#dets[i].weight_index). \n                    - #dets[i].weight_index == the index for the weight vector that\n                      generated this detection. \n                    - #dets[i].rect == the bounding box for the i-th detection.\n                - #get_scanner() will have been loaded with img. Therefore, you can call\n                  #get_scanner().get_feature_vector() to obtain the feature vectors or\n                  #get_scanner().get_full_object_detection() to get the\n                  full_object_detections for the resulting object detection boxes.\n                - The detection threshold is adjusted by having adjust_threshold added to\n                  it.  Therefore, an adjust_threshold value > 0 makes detecting objects\n                  harder while a negative value makes it easier.  Moreover, the following\n                  will be true for all valid i:\n                    - #dets[i].detection_confidence >= adjust_threshold\n                  This means that, for example, you can obtain the maximum possible number\n                  of detections by setting adjust_threshold equal to negative infinity.\n        !*/\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<full_detection>& dets,\n            double adjust_threshold = 0\n        );\n        /*!\n            requires\n                - img == an object which can be accepted by image_scanner_type::load()\n            ensures\n                - This function is identical to the above operator() routine, except that\n                  it outputs full_object_detections instead of rectangles.  This means that\n                  the output includes part locations.  In particular, calling this function\n                  is the same as calling the above operator() routine and then using\n                  get_scanner().get_full_object_detection() to resolve all the rectangles\n                  into full_object_detections.  Therefore, this version of operator() is\n                  simply a convenience function for performing this set of operations.\n        !*/\n\n        template <\n            typename image_type\n            >\n        std::vector<rectangle> operator() (\n            const image_type& img,\n            const adjust_threshold = 0\n        );\n        /*!\n            requires\n                - img == an object which can be accepted by image_scanner_type::load()\n            ensures\n                - This function is identical to the above operator() routine, except that\n                  it returns a std::vector<rectangle> which contains just the bounding\n                  boxes of all the detections. \n        !*/\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<std::pair<double, rectangle> >& dets,\n            double adjust_threshold = 0\n        );\n        /*!\n            requires\n                - img == an object which can be accepted by image_scanner_type::load()\n            ensures\n                - performs object detection on the given image and stores the\n                  detected objects into #dets.  In particular, we will have that:\n                    - #dets is sorted such that the highest confidence detections \n                      come first.  E.g. element 0 is the best detection, element 1 \n                      the next best, and so on.\n                    - #dets.size() == the number of detected objects.\n                    - #dets[i].first gives the \"detection confidence\", of the i-th\n                      detection.  This is the detection value output by the scanner minus\n                      the threshold value stored at the end of the weight vector in get_w(). \n                    - #dets[i].second == the bounding box for the i-th detection.\n                - #get_scanner() will have been loaded with img. Therefore, you can call\n                  #get_scanner().get_feature_vector() to obtain the feature vectors or\n                  #get_scanner().get_full_object_detection() to get the\n                  full_object_detections for the resulting object detection boxes.\n                - The detection threshold is adjusted by having adjust_threshold added to\n                  it.  Therefore, an adjust_threshold value > 0 makes detecting objects\n                  harder while a negative value makes it easier.  Moreover, the following\n                  will be true for all valid i:\n                    - #dets[i].first >= adjust_threshold\n                  This means that, for example, you can obtain the maximum possible number\n                  of detections by setting adjust_threshold equal to negative infinity.\n        !*/\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<std::pair<double, full_object_detection> >& dets,\n            double adjust_threshold = 0\n        );\n        /*!\n            requires\n                - img == an object which can be accepted by image_scanner_type::load()\n            ensures\n                - This function is identical to the above operator() routine, except that\n                  it outputs full_object_detections instead of rectangles.  This means that\n                  the output includes part locations.  In particular, calling this function\n                  is the same as calling the above operator() routine and then using\n                  get_scanner().get_full_object_detection() to resolve all the rectangles\n                  into full_object_detections.  Therefore, this version of operator() is\n                  simply a convenience function for performing this set of operations.\n        !*/\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            const image_type& img,\n            std::vector<full_object_detection>& dets,\n            double adjust_threshold = 0\n        );\n        /*!\n            requires\n                - img == an object which can be accepted by image_scanner_type::load()\n            ensures\n                - This function is identical to the above operator() routine, except that\n                  it doesn't include a double valued score.  That is, it just outputs the\n                  full_object_detections.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const object_detector<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support.  Note that this function only saves the\n        configuration part of item.get_scanner().  That is, we use the scanner's\n        copy_configuration() function to get a copy of the scanner that doesn't contain any\n        loaded image data and we then save just the configuration part of the scanner.\n        This means that any serialized object_detectors won't remember any images they have\n        processed but will otherwise contain all their state and be able to detect objects\n        in new images.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void deserialize (\n        object_detector<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OBJECT_DeTECTOR_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/remove_unobtainable_rectangles.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_REMOVE_UnOBTAINABLE_RECTANGLES_Hh_\n#define DLIB_REMOVE_UnOBTAINABLE_RECTANGLES_Hh_\n\n#include \"remove_unobtainable_rectangles_abstract.h\"\n#include \"scan_image_pyramid.h\"\n#include \"scan_image_boxes.h\"\n#include \"scan_image_custom.h\"\n#include \"scan_fhog_pyramid.h\"\n#include \"../svm/structural_object_detection_trainer.h\"\n#include \"../geometry.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline bool matches_rect (\n            const std::vector<rectangle>& rects,\n            const rectangle& rect,\n            const double eps\n        )\n        {\n            for (unsigned long i = 0; i < rects.size(); ++i)\n            {\n                const double score = (rect.intersect(rects[i])).area()/(double)(rect+rects[i]).area();\n                if (score > eps)\n                    return true;\n            }\n\n            return false;\n        }\n\n        inline rectangle get_best_matching_rect (\n            const std::vector<rectangle>& rects,\n            const rectangle& rect\n        ) \n        {\n            double best_score = -1;\n            rectangle best_rect;\n            for (unsigned long i = 0; i < rects.size(); ++i)\n            {\n                const double score = (rect.intersect(rects[i])).area()/(double)(rect+rects[i]).area();\n                if (score > best_score)\n                {\n                    best_score = score;\n                    best_rect = rects[i];\n                }\n            }\n            return best_rect;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename image_array_type,\n            typename image_scanner_type\n            >\n        std::vector<std::vector<rectangle> > pyramid_remove_unobtainable_rectangles (\n            const structural_object_detection_trainer<image_scanner_type>& trainer,\n            const image_array_type& images,\n            std::vector<std::vector<rectangle> >& object_locations\n        )\n        {\n            using namespace dlib::impl;\n            // make sure requires clause is not broken\n            DLIB_ASSERT(images.size() == object_locations.size(),\n                \"\\t std::vector<std::vector<rectangle>> remove_unobtainable_rectangles()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n            );\n\n\n            std::vector<std::vector<rectangle> > rejects(images.size());\n\n            // If the trainer is setup to automatically fit the overlap tester to the data then\n            // we should use the loosest possible overlap tester here.  Otherwise we should use\n            // the tester the trainer will use.\n            test_box_overlap boxes_overlap(0.9999999,1); \n            if (!trainer.auto_set_overlap_tester())\n                boxes_overlap = trainer.get_overlap_tester();\n\n            for (unsigned long k = 0; k < images.size(); ++k)\n            {\n                std::vector<rectangle> objs = object_locations[k];\n\n                // First remove things that don't have any matches with the candidate object\n                // locations.\n                std::vector<rectangle> good_rects;\n                for (unsigned long j = 0; j < objs.size(); ++j)\n                {\n                    const rectangle rect = trainer.get_scanner().get_best_matching_rect(objs[j]);\n                    const double score = (objs[j].intersect(rect)).area()/(double)(objs[j] + rect).area();\n                    if (score > trainer.get_match_eps())\n                        good_rects.push_back(objs[j]);\n                    else\n                        rejects[k].push_back(objs[j]);\n                }\n                object_locations[k] = good_rects;\n\n\n                // Remap these rectangles to the ones that can come out of the scanner.  That\n                // way when we compare them to each other in the following loop we will know if\n                // any distinct truth rectangles get mapped to overlapping boxes.\n                objs.resize(good_rects.size());\n                for (unsigned long i = 0; i < good_rects.size(); ++i)\n                    objs[i] = trainer.get_scanner().get_best_matching_rect(good_rects[i]);\n\n                good_rects.clear();\n                // now check for truth rects that are too close together.\n                for (unsigned long i = 0; i < objs.size(); ++i)\n                {\n                    // check if objs[i] hits another box\n                    bool hit_box = false;\n                    for (unsigned long j = i+1; j < objs.size(); ++j)\n                    {\n                        if (boxes_overlap(objs[i], objs[j]))\n                        {\n                            hit_box = true;\n                            break;\n                        }\n                    }\n                    if (hit_box)\n                        rejects[k].push_back(object_locations[k][i]);\n                    else\n                        good_rects.push_back(object_locations[k][i]);\n                }\n                object_locations[k] = good_rects;\n            }\n\n            return rejects;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type,\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    std::vector<std::vector<rectangle> > remove_unobtainable_rectangles (\n        const structural_object_detection_trainer<scan_image_pyramid<Pyramid_type, Feature_extractor_type> >& trainer,\n        const image_array_type& images,\n        std::vector<std::vector<rectangle> >& object_locations\n    )\n    {\n        return impl::pyramid_remove_unobtainable_rectangles(trainer, images, object_locations);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type,\n        typename Pyramid_type\n        >\n    std::vector<std::vector<rectangle> > remove_unobtainable_rectangles (\n        const structural_object_detection_trainer<scan_fhog_pyramid<Pyramid_type> >& trainer,\n        const image_array_type& images,\n        std::vector<std::vector<rectangle> >& object_locations\n    )\n    {\n        return impl::pyramid_remove_unobtainable_rectangles(trainer, images, object_locations);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename image_array_type,\n            typename scanner_type, \n            typename get_boxes_functor\n            >\n        std::vector<std::vector<rectangle> > remove_unobtainable_rectangles (\n            get_boxes_functor& bg,\n            const structural_object_detection_trainer<scanner_type>& trainer,\n            const image_array_type& images,\n            std::vector<std::vector<rectangle> >& object_locations\n        )\n        {\n            using namespace dlib::impl;\n            // make sure requires clause is not broken\n            DLIB_ASSERT(images.size() == object_locations.size(),\n                \"\\t std::vector<std::vector<rectangle>> remove_unobtainable_rectangles()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n            );\n\n            std::vector<rectangle> rects;\n\n            std::vector<std::vector<rectangle> > rejects(images.size());\n\n            // If the trainer is setup to automatically fit the overlap tester to the data then\n            // we should use the loosest possible overlap tester here.  Otherwise we should use\n            // the tester the trainer will use.\n            test_box_overlap boxes_overlap(0.9999999,1); \n            if (!trainer.auto_set_overlap_tester())\n                boxes_overlap = trainer.get_overlap_tester();\n\n            for (unsigned long k = 0; k < images.size(); ++k)\n            {\n                std::vector<rectangle> objs = object_locations[k];\n                // Don't even bother computing the candidate rectangles if there aren't any\n                // object locations for this image since there isn't anything to do anyway.\n                if (objs.size() == 0)\n                    continue;\n\n                bg(images[k], rects);\n\n\n                // First remove things that don't have any matches with the candidate object\n                // locations.\n                std::vector<rectangle> good_rects;\n                for (unsigned long j = 0; j < objs.size(); ++j)\n                {\n                    if (matches_rect(rects, objs[j], trainer.get_match_eps()))\n                        good_rects.push_back(objs[j]);\n                    else\n                        rejects[k].push_back(objs[j]);\n                }\n                object_locations[k] = good_rects;\n\n\n                // Remap these rectangles to the ones that can come out of the scanner.  That\n                // way when we compare them to each other in the following loop we will know if\n                // any distinct truth rectangles get mapped to overlapping boxes.\n                objs.resize(good_rects.size());\n                for (unsigned long i = 0; i < good_rects.size(); ++i)\n                    objs[i] = get_best_matching_rect(rects, good_rects[i]);\n\n                good_rects.clear();\n                // now check for truth rects that are too close together.\n                for (unsigned long i = 0; i < objs.size(); ++i)\n                {\n                    // check if objs[i] hits another box\n                    bool hit_box = false;\n                    for (unsigned long j = i+1; j < objs.size(); ++j)\n                    {\n                        if (boxes_overlap(objs[i], objs[j]))\n                        {\n                            hit_box = true;\n                            break;\n                        }\n                    }\n                    if (hit_box)\n                        rejects[k].push_back(object_locations[k][i]);\n                    else\n                        good_rects.push_back(object_locations[k][i]);\n                }\n                object_locations[k] = good_rects;\n            }\n\n            return rejects;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        struct load_to_functor\n        {\n            load_to_functor(T& obj_) : obj(obj_) {}\n            T& obj;\n\n            template <typename U, typename V>\n            void operator()(const U& u, V& v) \n            {\n                obj.load(u,v);\n            }\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type,\n        typename feature_extractor, \n        typename box_generator\n        >\n    std::vector<std::vector<rectangle> > remove_unobtainable_rectangles (\n        const structural_object_detection_trainer<scan_image_boxes<feature_extractor, box_generator> >& trainer,\n        const image_array_type& images,\n        std::vector<std::vector<rectangle> >& object_locations\n    )\n    {\n        box_generator bg = trainer.get_scanner().get_box_generator();\n        return impl::remove_unobtainable_rectangles(bg, trainer, images, object_locations);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type,\n        typename feature_extractor\n        >\n    std::vector<std::vector<rectangle> > remove_unobtainable_rectangles (\n        const structural_object_detection_trainer<scan_image_custom<feature_extractor> >& trainer,\n        const image_array_type& images,\n        std::vector<std::vector<rectangle> >& object_locations\n    )\n    {\n        feature_extractor fe;\n        fe.copy_configuration(trainer.get_scanner().get_feature_extractor());\n        impl::load_to_functor<feature_extractor> bg(fe);\n        return impl::remove_unobtainable_rectangles(bg, trainer, images, object_locations);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_REMOVE_UnOBTAINABLE_RECTANGLES_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/remove_unobtainable_rectangles_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_REMOVE_UnOBTAINABLE_RECTANGLES_ABSTRACT_Hh_\n#ifdef DLIB_REMOVE_UnOBTAINABLE_RECTANGLES_ABSTRACT_Hh_\n\n#include \"scan_image_pyramid_abstract.h\"\n#include \"scan_image_boxes_abstract.h\"\n#include \"scan_image_custom_abstract.h\"\n#include \"scan_fhog_pyramid_abstract.h\"\n#include \"../svm/structural_object_detection_trainer_abstract.h\"\n#include \"../geometry.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type,\n        typename image_array_type,\n        typename Pyramid_type\n        >\n    std::vector<std::vector<rectangle> > remove_unobtainable_rectangles (\n        const structural_object_detection_trainer<image_scanner_type>& trainer,\n        const image_array_type& images,\n        std::vector<std::vector<rectangle> >& object_locations\n    );\n    /*!\n        requires\n            - image_scanner_type must be either scan_image_boxes, scan_image_pyramid,\n              scan_image_custom, or scan_fhog_pyramid.\n            - images.size() == object_locations.size()\n        ensures\n            - Recall that the image scanner objects can't produce all possible rectangles\n              as object detections since they only consider a limited subset of all possible\n              object positions.  Moreover, the structural_object_detection_trainer requires\n              its input training data to not contain any object positions which are unobtainable\n              by its scanner object.  Therefore, remove_unobtainable_rectangles() is a tool\n              to filter out these unobtainable rectangles from the training data before giving\n              it to a structural_object_detection_trainer.\n            - This function interprets object_locations[i] as the set of object positions for\n              image[i], for all valid i.\n            - In particular, this function removes unobtainable rectangles from object_locations\n              and also returns a vector V such that:\n                - V.size() == object_locations.size()\n                - for all valid i:\n                    - V[i] == the set of rectangles removed from object_locations[i]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_REMOVE_UnOBTAINABLE_RECTANGLES_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/render_face_detections.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RENDER_FACE_DeTECTIONS_H_\n#define DLIB_RENDER_FACE_DeTECTIONS_H_\n\n#include \"full_object_detection.h\"\n#include \"../gui_widgets.h\"\n#include \"render_face_detections_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n    inline std::vector<image_window::overlay_line> render_face_detections (\n        const std::vector<full_object_detection>& dets,\n        const rgb_pixel color = rgb_pixel(0,255,0)\n    )\n    {\n        std::vector<image_window::overlay_line> lines;\n        for (unsigned long i = 0; i < dets.size(); ++i)\n        {\n            DLIB_CASSERT(dets[i].num_parts() == 68,\n                \"\\t std::vector<image_window::overlay_line> render_face_detections()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t dets[\"<<i<<\"].num_parts():  \" << dets[i].num_parts() \n            );\n\n            const full_object_detection& d = dets[i];\n            for (unsigned long i = 1; i <= 16; ++i)\n                lines.push_back(image_window::overlay_line(d.part(i), d.part(i-1), color));\n\n            for (unsigned long i = 28; i <= 30; ++i)\n                lines.push_back(image_window::overlay_line(d.part(i), d.part(i-1), color));\n\n            for (unsigned long i = 18; i <= 21; ++i)\n                lines.push_back(image_window::overlay_line(d.part(i), d.part(i-1), color));\n            for (unsigned long i = 23; i <= 26; ++i)\n                lines.push_back(image_window::overlay_line(d.part(i), d.part(i-1), color));\n            for (unsigned long i = 31; i <= 35; ++i)\n                lines.push_back(image_window::overlay_line(d.part(i), d.part(i-1), color));\n            lines.push_back(image_window::overlay_line(d.part(30), d.part(35), color));\n\n            for (unsigned long i = 37; i <= 41; ++i)\n                lines.push_back(image_window::overlay_line(d.part(i), d.part(i-1), color));\n            lines.push_back(image_window::overlay_line(d.part(36), d.part(41), color));\n\n            for (unsigned long i = 43; i <= 47; ++i)\n                lines.push_back(image_window::overlay_line(d.part(i), d.part(i-1), color));\n            lines.push_back(image_window::overlay_line(d.part(42), d.part(47), color));\n\n            for (unsigned long i = 49; i <= 59; ++i)\n                lines.push_back(image_window::overlay_line(d.part(i), d.part(i-1), color));\n            lines.push_back(image_window::overlay_line(d.part(48), d.part(59), color));\n\n            for (unsigned long i = 61; i <= 67; ++i)\n                lines.push_back(image_window::overlay_line(d.part(i), d.part(i-1), color));\n            lines.push_back(image_window::overlay_line(d.part(60), d.part(67), color));\n        }\n        return lines;\n    }\n\n}\n\n#endif // DLIB_RENDER_FACE_DeTECTIONS_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/render_face_detections_abstract.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RENDER_FACE_DeTECTIONS_ABSTRACT_H_\n#ifdef DLIB_RENDER_FACE_DeTECTIONS_ABSTRACT_H_\n\n#include \"full_object_detection_abstract.h\"\n#include \"../gui_widgets.h\"\n\nnamespace dlib\n{\n\n    inline std::vector<image_window::overlay_line> render_face_detections (\n        const std::vector<full_object_detection>& dets,\n        const rgb_pixel color = rgb_pixel(0,255,0)\n    );\n    /*!\n        requires\n            - for all valid i:\n                - dets[i].num_parts() == 68\n        ensures\n            - Interprets the given objects as face detections with parts annotated using\n              the iBUG face landmark scheme.  We then return a set of overlay lines that\n              will draw the objects onto the screen in a way that properly draws the\n              outline of the face features defined by the part locations.\n            - returns a vector with dets.size() elements, each containing the lines\n              necessary to render a face detection from dets.\n    !*/\n\n}\n\n#endif // DLIB_RENDER_FACE_DeTECTIONS_ABSTRACT_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_fhog_pyramid.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#ifndef DLIB_SCAN_fHOG_PYRAMID_Hh_\n#define DLIB_SCAN_fHOG_PYRAMID_Hh_\n\n#include \"scan_fhog_pyramid_abstract.h\"\n#include \"../matrix.h\"\n#include \"../image_transforms.h\"\n#include \"../array.h\"\n#include \"../array2d.h\"\n#include \"object_detector.h\"\n\n#include <tbb/tbb.h>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class default_fhog_feature_extractor\n    {\n    public:\n        inline rectangle image_to_feats (\n            const rectangle& rect,\n            int cell_size,\n            int filter_rows_padding,\n            int filter_cols_padding\n        ) const\n        {\n            return image_to_fhog(rect, cell_size, filter_rows_padding, filter_cols_padding);\n        }\n\n        inline rectangle feats_to_image (\n            const rectangle& rect,\n            int cell_size,\n            int filter_rows_padding,\n            int filter_cols_padding\n        ) const\n        {\n            return fhog_to_image(rect, cell_size, filter_rows_padding, filter_cols_padding);\n        }\n\n        template <\n            typename image_type\n            >\n        void operator()(\n            const image_type& img, \n            dlib::array<array2d<float> >& hog, \n            int cell_size,\n            int filter_rows_padding,\n            int filter_cols_padding\n        ) const\n        {\n            extract_fhog_features(img,hog,cell_size,filter_rows_padding,filter_cols_padding);\n        }\n\n        inline unsigned long get_num_planes (\n        ) const\n        {\n            return 31;\n        }\n    };\n\n    inline void serialize   (const default_fhog_feature_extractor&, std::ostream&) {}\n    inline void deserialize (default_fhog_feature_extractor&, std::istream&) {}\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type = default_fhog_feature_extractor\n        >\n    class scan_fhog_pyramid : noncopyable\n    {\n\n    public:\n\n        typedef matrix<double,0,1> feature_vector_type;\n\n        typedef Pyramid_type pyramid_type;\n        typedef Feature_extractor_type feature_extractor_type;\n\n        scan_fhog_pyramid (\n        );  \n\n        explicit scan_fhog_pyramid (\n            const feature_extractor_type& fe_\n        );  \n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n\n        inline bool is_loaded_with_image (\n        ) const;\n\n        inline void copy_configuration (\n            const scan_fhog_pyramid& item\n        );\n\n        void set_detection_window_size (\n            unsigned long width,\n            unsigned long height\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(width > 0 && height > 0,\n                \"\\t void scan_fhog_pyramid::set_detection_window_size()\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t width:  \" << width\n                << \"\\n\\t height: \" << height\n                << \"\\n\\t this:   \" << this\n                );\n\n            window_width = width;\n            window_height = height;\n            feats.clear();\n        }\n\n        inline unsigned long get_detection_window_width (\n        ) const { return window_width; }\n        inline unsigned long get_detection_window_height (\n        ) const { return window_height; }\n\n        inline unsigned long get_num_detection_templates (\n        ) const;\n\n        inline unsigned long get_num_movable_components_per_detection_template (\n        ) const;\n\n        void set_padding (\n            unsigned long new_padding\n        )\n        {\n            padding = new_padding;\n            feats.clear();\n        }\n\n        unsigned long get_padding (\n        ) const { return padding; }\n\n        void set_cell_size (\n            unsigned long new_cell_size\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(new_cell_size > 0 ,\n                \"\\t void scan_fhog_pyramid::set_cell_size()\"\n                << \"\\n\\t You can't have zero sized fHOG cells. \"\n                << \"\\n\\t this: \" << this\n                );\n\n            cell_size = new_cell_size;\n            feats.clear();\n        }\n\n        unsigned long get_cell_size (\n        ) const { return cell_size; }\n\n        inline long get_num_dimensions (\n        ) const;\n\n        unsigned long get_max_pyramid_levels (\n        ) const;\n\n        const feature_extractor_type& get_feature_extractor(\n        ) const { return fe; }\n\n        void set_max_pyramid_levels (\n            unsigned long max_levels\n        );\n\n        void set_min_pyramid_layer_size (\n            unsigned long width,\n            unsigned long height \n        );\n\n        inline unsigned long get_min_pyramid_layer_width (\n        ) const;\n\n        inline unsigned long get_min_pyramid_layer_height (\n        ) const;\n\n        void detect (\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_loaded_with_image() &&\n                        w.size() >= get_num_dimensions(), \n                \"\\t void scan_fhog_pyramid::detect()\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n                << \"\\n\\t w.size():               \" << w.size()\n                << \"\\n\\t get_num_dimensions():   \" << get_num_dimensions()\n                << \"\\n\\t this: \" << this\n                );\n\n            fhog_filterbank temp = build_fhog_filterbank(w);\n            detect(temp, dets, thresh);\n        }\n\n        class fhog_filterbank \n        {\n            friend class scan_fhog_pyramid;\n        public:\n            inline long get_num_dimensions() const\n            {\n                unsigned long dims = 0;\n                for (unsigned long i = 0; i < filters.size(); ++i)\n                {\n                    dims += filters[i].size();\n                }\n                return dims;\n            }\n\n            const std::vector<matrix<float> >& get_filters() const { return filters;} \n\n            unsigned long num_separable_filters() const \n            {\n                unsigned long num = 0;\n                for (unsigned long i = 0; i < row_filters.size(); ++i)\n                {\n                    num += row_filters[i].size();\n                }\n                return num;\n            }\n\n            std::vector<matrix<float> > filters;\n            std::vector<std::vector<matrix<float,0,1> > > row_filters, col_filters;\n        };\n\n        fhog_filterbank build_fhog_filterbank (\n            const feature_vector_type& weights \n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(weights.size() >= get_num_dimensions(),\n                \"\\t fhog_filterbank scan_fhog_pyramid::build_fhog_filterbank()\"\n                << \"\\n\\t The number of weights isn't enough to fill out the filterbank. \"\n                << \"\\n\\t weights.size():       \" << weights.size() \n                << \"\\n\\t get_num_dimensions(): \" << get_num_dimensions() \n                << \"\\n\\t this: \" << this\n                );\n\n            fhog_filterbank temp;\n            temp.filters.resize(fe.get_num_planes());\n            temp.row_filters.resize(fe.get_num_planes());\n            temp.col_filters.resize(fe.get_num_planes());\n\n            // load filters from w\n            unsigned long width, height;\n            compute_fhog_window_size(width, height);\n            const long size = width*height;\n            for (unsigned long i = 0; i < temp.filters.size(); ++i)\n            {\n                matrix<double> u,v,w,f;\n                f = reshape(rowm(weights, range(i*size, (i+1)*size-1)), height, width);\n                temp.filters[i] = matrix_cast<float>(f);\n\n                svd3(f, u,w,v);\n\n                matrix<double> w2 = w;\n                rsort_columns(u,w);\n                rsort_columns(v,w2);\n\n                double thresh = std::max(1e-4, max(w)*0.001);\n                w = round_zeros(w, thresh);\n\n\n                for (long j = 0; j < w.size(); ++j)\n                {\n                    if (w(j) != 0)\n                    {\n                        temp.col_filters[i].push_back(matrix_cast<float>(colm(u,j)*std::sqrt(w(j))));\n                        temp.row_filters[i].push_back(matrix_cast<float>(colm(v,j)*std::sqrt(w(j))));\n                    }\n                }\n            }\n\n            return temp;\n        }\n\n        void detect (\n            const fhog_filterbank& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const;\n\n\n        void get_feature_vector (\n            const full_object_detection& obj,\n            feature_vector_type& psi\n        ) const;\n\n        full_object_detection get_full_object_detection (\n            const rectangle& rect,\n            const feature_vector_type& w\n        ) const;\n\n        const rectangle get_best_matching_rect (\n            const rectangle& rect\n        ) const;\n\n        double get_nuclear_norm_regularization_strength (\n        ) const { return nuclear_norm_regularization_strength; }\n\n        void set_nuclear_norm_regularization_strength (\n            double strength\n        ) \n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(strength >= 0 ,\n                \"\\t void scan_fhog_pyramid::set_nuclear_norm_regularization_strength()\"\n                << \"\\n\\t You can't have a negative regularization strength.\"\n                << \"\\n\\t strength: \" << strength \n                << \"\\n\\t this: \" << this\n            );\n\n            nuclear_norm_regularization_strength = strength;\n        }\n\n        unsigned long get_fhog_window_width (\n        ) const \n        {\n            unsigned long width, height;\n            compute_fhog_window_size(width, height);\n            return width;\n        }\n\n        unsigned long get_fhog_window_height (\n        ) const \n        {\n            unsigned long width, height;\n            compute_fhog_window_size(width, height);\n            return height;\n        }\n\n        template <typename T, typename U>\n        friend void serialize (\n            const scan_fhog_pyramid<T,U>& item,\n            std::ostream& out\n        );\n\n        template <typename T, typename U>\n        friend void deserialize (\n            scan_fhog_pyramid<T,U>& item,\n            std::istream& in \n        );\n\n    private:\n        inline void compute_fhog_window_size(\n            unsigned long& width,\n            unsigned long& height\n        ) const\n        {\n            const rectangle rect = centered_rect(point(0,0),window_width,window_height);\n            const rectangle temp = grow_rect(fe.image_to_feats(rect, cell_size, 1, 1), padding);\n            width = temp.width();\n            height = temp.height();\n        }\n\n        void get_mapped_rect_and_metadata (\n            const unsigned long number_pyramid_levels,\n            const rectangle& rect,\n            rectangle& mapped_rect,\n            rectangle& fhog_rect,\n            unsigned long& best_level\n        ) const;\n\n        double get_match_score (\n            rectangle r1,\n            rectangle r2\n        ) const\n        {\n            // make the rectangles overlap as much as possible before computing the match score.\n            r1 = move_rect(r1, r2.tl_corner());\n            return (r1.intersect(r2).area())/(double)(r1 + r2).area();\n        }\n\n        typedef array<array2d<float> > fhog_image;\n\n        feature_extractor_type fe;\n        array<fhog_image> feats;\n        int cell_size;\n        unsigned long padding; \n        unsigned long window_width;\n        unsigned long window_height;\n        unsigned long max_pyramid_levels;\n        unsigned long min_pyramid_layer_width;\n        unsigned long min_pyramid_layer_height;\n        double nuclear_norm_regularization_strength;\n\n        void init()\n        {\n            cell_size = 8;\n            padding = 1;\n            window_width = 64;\n            window_height = 64;\n            max_pyramid_levels = 1000;\n            min_pyramid_layer_width = 64;\n            min_pyramid_layer_height = 64;\n            nuclear_norm_regularization_strength = 0;\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename fhog_filterbank>\n        rectangle apply_filters_to_fhog (\n            const fhog_filterbank& w,\n            const array<array2d<float> >& feats,\n            array2d<float>& saliency_image\n        )\n        {\n            const unsigned long num_separable_filters = w.num_separable_filters();\n            rectangle area;\n            // use the separable filters if they would be faster than running the regular filters.\n            if (num_separable_filters > w.filters.size()*std::min(w.filters[0].nr(),w.filters[0].nc())/3.0)\n            {\n                area = spatially_filter_image(feats[0], saliency_image, w.filters[0]);\n                for (unsigned long i = 1; i < w.filters.size(); ++i)\n                {\n                    // now we filter but the output adds to saliency_image rather than\n                    // overwriting it.\n                    spatially_filter_image(feats[i], saliency_image, w.filters[i], 1, false, true);\n                }\n            }\n            else\n            {\n                saliency_image.clear();\n                array2d<float> scratch;\n\n                // find the first filter to apply\n                unsigned long i = 0;\n                while (i < w.row_filters.size() && w.row_filters[i].size() == 0) \n                    ++i;\n\n                for (; i < w.row_filters.size(); ++i)\n                {\n                    for (unsigned long j = 0; j < w.row_filters[i].size(); ++j)\n                    {\n                        if (saliency_image.size() == 0)\n                            area = float_spatially_filter_image_separable(feats[i], saliency_image, w.row_filters[i][j], w.col_filters[i][j],scratch,false);\n                        else\n                            area = float_spatially_filter_image_separable(feats[i], saliency_image, w.row_filters[i][j], w.col_filters[i][j],scratch,true);\n                    }\n                }\n                if (saliency_image.size() == 0)\n                {\n                    saliency_image.set_size(feats[0].nr(), feats[0].nc());\n                    assign_all_pixels(saliency_image, 0);\n                }\n            }\n            return area;\n        }\n\n\n\t\ttemplate <typename fhog_filterbank>\n        rectangle apply_filters_to_fhog_parallel (\n            const fhog_filterbank& w,\n            const array<array2d<float> >& feats,\n            array2d<float>& saliency_image\n        )\n        {\n            const unsigned long num_separable_filters = w.num_separable_filters();\n            rectangle area;\n            // use the separable filters if they would be faster than running the regular filters.\n            if (num_separable_filters > w.filters.size()*std::min(w.filters[0].nr(),w.filters[0].nc())/3.0)\n            {\n                area = spatially_filter_image(feats[0], saliency_image, w.filters[0]);\n                for (unsigned long i = 1; i < w.filters.size(); ++i)\n                {\n                    // now we filter but the output adds to saliency_image rather than\n                    // overwriting it.\n                    spatially_filter_image(feats[i], saliency_image, w.filters[i], 1, false, true);\n                }\n            }\n            else\n            {\n\n                // find the first filter to apply\n                unsigned long i = 0;\n                while (i < w.row_filters.size() && w.row_filters[i].size() == 0) \n                    ++i;\n\t\t\t\t\n\t\t\t\tint start_filter = i;\n\n\t\t\t\tint num_filters = 0;\n\t\t\t\tstd::vector<int> filters_before;\n\t\t\t\tfilters_before.push_back(0);\n\n\t\t\t\t// count the number of filters that will be used\n\t\t\t\tfor (; i < w.row_filters.size(); ++i)\n                {\n\t\t\t\t\tnum_filters += w.row_filters[i].size();\n\t\t\t\t\tfilters_before.push_back(num_filters);\n\t\t\t\t}\n\n\t\t\t\tarray<array2d<float> > saliency_images;\n\t\t\t\tsaliency_images.set_max_size(num_filters);\n\t\t\t\tsaliency_images.set_size(num_filters);\n\n\t\t\t\ti = start_filter;\n\n\t\t\t\ttbb::parallel_for((int)i, (int)w.row_filters.size(), [&](int k)\n\t\t\t\t{\n\t\t\t\t\tarray2d<float> saliency_tmp;\n\t\t\t\t\tarray2d<float> scratch;\n                    for (unsigned long j = 0; j < w.row_filters[k].size(); ++j)\n                    {\n\t\t\t\t\t\tarea = float_spatially_filter_image_separable(feats[k], saliency_tmp, w.row_filters[k][j], w.col_filters[k][j], scratch, false);\n\t\t\t\t\t\tswap(saliency_tmp, saliency_images[filters_before[k]-start_filter+j]);\n                    }\n                });\n\t\t\t\t\n                saliency_image.clear();\n\n\t\t\t\tsaliency_image.set_size(feats[0].nr(), feats[0].nc());\n\t\t\t\tassign_all_pixels(saliency_image, 0);\n\n\t\t\t\t// TODO this could be optimised?\n\t\t\t\t// Sum across the saliency images\n\t\t\t\tfor(unsigned int i = 0; i < saliency_images.size(); ++i)\n\t\t\t\t{\n\t\t\t\t\tfor(int y = 0; y < saliency_image.nr(); ++y)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(int x = 0; x < saliency_image.nc(); ++x)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsaliency_image[y][x] += saliency_images[i][y][x];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n            }\n            return area;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    void serialize (\n        const scan_fhog_pyramid<T,U>& item,\n        std::ostream& out\n    )\n    {\n        int version = 1;\n        serialize(version, out);\n        serialize(item.fe, out);\n        serialize(item.feats, out);\n        serialize(item.cell_size, out);\n        serialize(item.padding, out);\n        serialize(item.window_width, out);\n        serialize(item.window_height, out);\n        serialize(item.max_pyramid_levels, out);\n        serialize(item.min_pyramid_layer_width, out);\n        serialize(item.min_pyramid_layer_height, out);\n        serialize(item.nuclear_norm_regularization_strength, out);\n        serialize(item.get_num_dimensions(), out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    void deserialize (\n        scan_fhog_pyramid<T,U>& item,\n        std::istream& in \n    )\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 1)\n            throw serialization_error(\"Unsupported version found when deserializing a scan_fhog_pyramid object.\");\n\n        deserialize(item.fe, in);\n        deserialize(item.feats, in);\n        deserialize(item.cell_size, in);\n        deserialize(item.padding, in);\n        deserialize(item.window_width, in);\n        deserialize(item.window_height, in);\n        deserialize(item.max_pyramid_levels, in);\n        deserialize(item.min_pyramid_layer_width, in);\n        deserialize(item.min_pyramid_layer_height, in);\n        deserialize(item.nuclear_norm_regularization_strength, in);\n\n        // When developing some feature extractor, it's easy to accidentally change its\n        // number of dimensions and then try to deserialize data from an older version of\n        // your extractor into the current code.  This check is here to catch that kind of\n        // user error.\n        long dims;\n        deserialize(dims, in);\n        if (item.get_num_dimensions() != dims)\n            throw serialization_error(\"Number of dimensions in serialized scan_fhog_pyramid doesn't match the expected number.\");\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                         scan_fhog_pyramid member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    scan_fhog_pyramid (\n    ) \n    {\n        init();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    scan_fhog_pyramid (\n        const feature_extractor_type& fe_\n    ) \n    {\n        init();\n        fe = fe_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename pyramid_type,\n            typename image_type,\n            typename feature_extractor_type\n            >\n        void create_fhog_pyramid (\n            const image_type& img,\n            const feature_extractor_type& fe,\n            array<array<array2d<float> > >& feats,\n            int cell_size,\n            int filter_rows_padding,\n            int filter_cols_padding,\n            unsigned long min_pyramid_layer_width,\n            unsigned long min_pyramid_layer_height,\n            unsigned long max_pyramid_levels\n        )\n        {\n            unsigned long levels = 0;\n            rectangle rect = get_rect(img);\n\n            // figure out how many pyramid levels we should be using based on the image size\n            pyramid_type pyr;\n            do\n            {\n                rect = pyr.rect_down(rect);\n                ++levels;\n            } while (rect.width() >= min_pyramid_layer_width && rect.height() >= min_pyramid_layer_height &&\n                levels < max_pyramid_levels);\n\n            if (feats.max_size() < levels)\n                feats.set_max_size(levels);\n            feats.set_size(levels);\n\n\n\n            // build our feature pyramid\n            fe(img, feats[0], cell_size,filter_rows_padding,filter_cols_padding);\n            DLIB_ASSERT(feats[0].size() == fe.get_num_planes(), \n                \"Invalid feature extractor used with dlib::scan_fhog_pyramid.  The output does not have the \\n\"\n                \"indicated number of planes.\");\n\n            if (feats.size() > 1)\n            {\n                typedef typename image_traits<image_type>::pixel_type pixel_type;\n                array2d<pixel_type> temp1, temp2;\n                pyr(img, temp1);\n                fe(temp1, feats[1], cell_size,filter_rows_padding,filter_cols_padding);\n                swap(temp1,temp2);\n\n                for (unsigned long i = 2; i < feats.size(); ++i)\n                {\n                    pyr(temp2, temp1);\n                    fe(temp1, feats[i], cell_size,filter_rows_padding,filter_cols_padding);\n                    swap(temp1,temp2);\n                }\n            }\n        }\n\n        template <\n            typename pyramid_type,\n            typename image_type,\n            typename feature_extractor_type\n            >\n        void create_fhog_pyramid_parallel (\n            const image_type& img,\n            const feature_extractor_type& fe,\n            array<array<array2d<float> > >& feats,\n            int cell_size,\n            int filter_rows_padding,\n            int filter_cols_padding,\n            unsigned long min_pyramid_layer_width,\n            unsigned long min_pyramid_layer_height,\n            unsigned long max_pyramid_levels\n        )\n        {\n            unsigned long levels = 0;\n            rectangle rect = get_rect(img);\n\n            // figure out how many pyramid levels we should be using based on the image size\n            pyramid_type pyr;\n            do\n            {\n                rect = pyr.rect_down(rect);\n                ++levels;\n            } while (rect.width() >= min_pyramid_layer_width && rect.height() >= min_pyramid_layer_height &&\n                levels < max_pyramid_levels);\n\n            if (feats.max_size() < levels)\n                feats.set_max_size(levels);\n            feats.set_size(levels);\n\t\t\t\n\t\t\ttypedef typename image_traits<image_type>::pixel_type pixel_type;\n\t\t\t\n\t\t\t// First create the pyramids\n\t\t\tarray<array2d<pixel_type> > image_pyramid;\n\t\t\timage_pyramid.set_max_size(levels-1);\n            image_pyramid.set_size(levels-1);\n\n\t\t\tfor(unsigned int pyr_level = 0; pyr_level < levels - 1; ++pyr_level)\n\t\t\t{\n\t\t\t\tarray2d<pixel_type> temp;\n\t\t\t\tif(pyr_level == 0)\n\t\t\t\t{\n\t\t\t\t\tpyr(img, temp);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tpyr(image_pyramid[pyr_level-1], temp);\n\t\t\t\t}\n\t\t\t\tswap(temp, image_pyramid[pyr_level]);\n\t\t\t}\n\n\t\t\ttbb::parallel_for(0, (int)levels, [&](int pyr_level){\n\t\t\t\tif(pyr_level == 0)\n\t\t\t\t{\n\t\t\t\t\tfe(img, feats[pyr_level], cell_size,filter_rows_padding,filter_cols_padding);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfe(image_pyramid[pyr_level-1], feats[pyr_level], cell_size,filter_rows_padding,filter_cols_padding);\n\t\t\t\t}\n\t\t\t});\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    template <\n        typename image_type\n        >\n    void scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    load (\n        const image_type& img\n    )\n    {\n        unsigned long width, height;\n        compute_fhog_window_size(width,height);\n        //impl::create_fhog_pyramid<Pyramid_type>(img, fe, feats, cell_size, height,\n        //    width, min_pyramid_layer_width, min_pyramid_layer_height,\n        //    max_pyramid_levels);\n\n\t\timpl::create_fhog_pyramid_parallel<Pyramid_type>(img, fe, feats, cell_size, height,\n            width, min_pyramid_layer_width, min_pyramid_layer_height,\n            max_pyramid_levels);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    bool scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    is_loaded_with_image (\n    ) const\n    {\n        return feats.size() != 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    void scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    copy_configuration (\n        const scan_fhog_pyramid& item\n    )\n    {\n        cell_size = item.cell_size;\n        padding = item.padding;\n        window_width = item.window_width;\n        window_height = item.window_height;\n        max_pyramid_levels = item.max_pyramid_levels;\n        min_pyramid_layer_width = item.min_pyramid_layer_width;\n        min_pyramid_layer_height = item.min_pyramid_layer_height;\n        nuclear_norm_regularization_strength = item.nuclear_norm_regularization_strength;\n        fe = item.fe;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    unsigned long scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_num_detection_templates (\n    ) const\n    {\n        return 1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    unsigned long scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_num_movable_components_per_detection_template (\n    ) const\n    {\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    long scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_num_dimensions (\n    ) const\n    {\n        unsigned long width, height;\n        compute_fhog_window_size(width,height);\n        return width*height*fe.get_num_planes();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    unsigned long scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_max_pyramid_levels (\n    ) const\n    {\n        return max_pyramid_levels;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    void scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    set_max_pyramid_levels (\n        unsigned long max_levels\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(max_levels > 0 ,\n            \"\\t void scan_fhog_pyramid::set_max_pyramid_levels()\"\n            << \"\\n\\t You can't have zero levels. \"\n            << \"\\n\\t max_levels: \" << max_levels \n            << \"\\n\\t this: \" << this\n            );\n\n        max_pyramid_levels = max_levels;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline bool compare_pair_rect (\n            const std::pair<double, rectangle>& a,\n            const std::pair<double, rectangle>& b\n        )\n        {\n            return a.first < b.first;\n        }\n\n        template <\n            typename pyramid_type,\n            typename feature_extractor_type,\n            typename fhog_filterbank\n            >\n        void detect_from_fhog_pyramid (\n            const array<array<array2d<float> > >& feats,\n            const feature_extractor_type& fe,\n            const fhog_filterbank& w,\n            const double thresh,\n            const unsigned long det_box_height,\n            const unsigned long det_box_width,\n            const int cell_size,\n            const int filter_rows_padding,\n            const int filter_cols_padding,\n            std::vector<std::pair<double, rectangle> >& dets\n        ) \n        {\n            dets.clear();\n\n            array2d<float> saliency_image;\n            pyramid_type pyr;\n\n            // for all pyramid levels\n            for (unsigned long l = 0; l < feats.size(); ++l)\n            {\n                const rectangle area = apply_filters_to_fhog(w, feats[l], saliency_image);\n\n                // now search the saliency image for any detections\n                for (long r = area.top(); r <= area.bottom(); ++r)\n                {\n                    for (long c = area.left(); c <= area.right(); ++c)\n                    {\n                        // if we found a detection\n                        if (saliency_image[r][c] >= thresh)\n                        {\n                            rectangle rect = fe.feats_to_image(centered_rect(point(c,r),det_box_width,det_box_height), \n                                cell_size, filter_rows_padding, filter_cols_padding);\n                            rect = pyr.rect_up(rect, l);\n                            dets.push_back(std::make_pair(saliency_image[r][c], rect));\n                        }\n                    }\n                }\n            }\n\n            std::sort(dets.rbegin(), dets.rend(), compare_pair_rect);\n        }\n\n template <\n            typename pyramid_type,\n            typename feature_extractor_type,\n            typename fhog_filterbank\n            >\n        void detect_from_fhog_pyramid_parallel (\n            const array<array<array2d<float> > >& feats,\n            const feature_extractor_type& fe,\n            const fhog_filterbank& w,\n            const double thresh,\n            const unsigned long det_box_height,\n            const unsigned long det_box_width,\n            const int cell_size,\n            const int filter_rows_padding,\n            const int filter_cols_padding,\n            std::vector<std::pair<double, rectangle> >& dets\n        ) \n        {\n            dets.clear();\n\n            pyramid_type pyr;\n\n\t\t\ttbb::concurrent_vector<std::pair<double, rectangle>> dets_conc;\n\n\t\t\tint num_features = feats.size();\n\n\t\t\ttbb::parallel_for(0, num_features, [&](int l){\n\n\t\t\t\tarray2d<float> saliency_image;\n\n\t\t\t\t//const rectangle area = apply_filters_to_fhog(w, feats[l], saliency_image);\n\t\t\t\t\n\t\t\t\t// TODO does not seem to help much?\n\t\t\t\tconst rectangle area = apply_filters_to_fhog_parallel(w, feats[l], saliency_image);\n\t\t\t\t\n                // now search the saliency image for any detections\n                for (long r = area.top(); r <= area.bottom(); ++r)\n                {\n                    for (long c = area.left(); c <= area.right(); ++c)\n                    {\n                        // if we found a detection\n                        if (saliency_image[r][c] >= thresh)\n                        {\n                            rectangle rect = fe.feats_to_image(centered_rect(point(c,r),det_box_width,det_box_height), \n                                cell_size, filter_rows_padding, filter_cols_padding);\n                            rect = pyr.rect_up(rect, l);\n                            dets_conc.push_back(std::make_pair(saliency_image[r][c], rect));\n                        }\n                    }\n                }\n\t\t\t});\t\n\n\t\t\tfor(size_t i = 0; i < dets_conc.size(); ++i)\n\t\t\t{\n\t\t\t\tdets.push_back(dets_conc[i]);\n\t\t\t}\n\n            std::sort(dets.rbegin(), dets.rend(), compare_pair_rect);\n        }\n\n        inline bool overlaps_any_box (\n            const test_box_overlap& tester,\n            const std::vector<rect_detection>& rects,\n            const rect_detection& rect\n        ) \n        {\n            for (unsigned long i = 0; i < rects.size(); ++i)\n            {\n                // Only compare detections from the same detector.  That is, we don't want\n                // the output of one detector to stop on the output of another detector. \n                if (rects[i].weight_index == rect.weight_index && tester(rects[i].rect, rect.rect))\n                    return true;\n            }\n            return false;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    void scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    detect (\n        const fhog_filterbank& w,\n        std::vector<std::pair<double, rectangle> >& dets,\n        const double thresh\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_loaded_with_image() &&\n                    w.get_num_dimensions() == get_num_dimensions(), \n            \"\\t void scan_fhog_pyramid::detect()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t w.get_num_dimensions(): \" << w.get_num_dimensions()\n            << \"\\n\\t get_num_dimensions():   \" << get_num_dimensions()\n            << \"\\n\\t this: \" << this\n            );\n\n        unsigned long width, height;\n        compute_fhog_window_size(width,height);\n\n        //impl::detect_from_fhog_pyramid<pyramid_type>(feats, fe, w, thresh,\n        //    height-2*padding, width-2*padding, cell_size, height, width, dets);\n\n        impl::detect_from_fhog_pyramid_parallel<pyramid_type>(feats, fe, w, thresh,\n            height-2*padding, width-2*padding, cell_size, height, width, dets);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    const rectangle scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_best_matching_rect (\n        const rectangle& rect\n    ) const\n    {\n        rectangle mapped_rect, fhog_rect;\n        unsigned long best_level;\n        get_mapped_rect_and_metadata(max_pyramid_levels, rect, mapped_rect, fhog_rect, best_level);\n        return mapped_rect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    void scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_mapped_rect_and_metadata (\n        const unsigned long number_pyramid_levels,\n        const rectangle& rect,\n        rectangle& mapped_rect,\n        rectangle& fhog_rect,\n        unsigned long& best_level\n    ) const\n    {\n        pyramid_type pyr;\n        best_level = 0;\n        double best_match_score = -1;\n\n\n        unsigned long width, height;\n        compute_fhog_window_size(width,height);\n\n        // Figure out the pyramid level which best matches rect against our detection\n        // window. \n        for (unsigned long l = 0; l < number_pyramid_levels; ++l)\n        {\n            const rectangle rect_fhog_space = fe.image_to_feats(pyr.rect_down(rect,l), cell_size, height,width);\n\n            const rectangle win_image_space = pyr.rect_up(fe.feats_to_image(centered_rect(center(rect_fhog_space),width-2*padding,height-2*padding), cell_size, height,width), l);\n\n            const double match_score = get_match_score(win_image_space, rect); \n            if (match_score > best_match_score)\n            {\n                best_match_score = match_score;\n                best_level = l;\n                fhog_rect = centered_rect(center(rect_fhog_space), width, height);\n            }\n\n            if (rect_fhog_space.area() <= 1) \n                break;\n        }\n        mapped_rect = pyr.rect_up(fe.feats_to_image(shrink_rect(fhog_rect,padding), cell_size,height,width),best_level);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    full_object_detection scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_full_object_detection (\n        const rectangle& rect,\n        const feature_vector_type& \n    ) const\n    {\n        return full_object_detection(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    void scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_feature_vector (\n        const full_object_detection& obj,\n        feature_vector_type& psi\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_loaded_with_image() &&\n                    psi.size() >= get_num_dimensions() &&\n                    obj.num_parts() == 0,\n            \"\\t void scan_fhog_pyramid::get_feature_vector()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t psi.size():             \" << psi.size()\n            << \"\\n\\t get_num_dimensions():   \" << get_num_dimensions()\n            << \"\\n\\t obj.num_parts():                            \" << obj.num_parts()\n            << \"\\n\\t this: \" << this\n            );\n\n\n\n        rectangle mapped_rect;\n        unsigned long best_level;\n        rectangle fhog_rect;\n        get_mapped_rect_and_metadata(feats.size(), obj.get_rect(), mapped_rect, fhog_rect, best_level);\n\n\n        long i = 0;\n        for (unsigned long ii = 0; ii < feats[best_level].size(); ++ii)\n        {\n            const rectangle rect = get_rect(feats[best_level][0]);\n            for (long r = fhog_rect.top(); r <= fhog_rect.bottom(); ++r)\n            {\n                for (long c = fhog_rect.left(); c <= fhog_rect.right(); ++c)\n                {\n                    if (rect.contains(c,r))\n                        psi(i) += feats[best_level][ii][r][c];\n                    ++i;\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    void scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    set_min_pyramid_layer_size (\n        unsigned long width,\n        unsigned long height \n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(width > 0 && height > 0 ,\n            \"\\t void scan_fhog_pyramid::set_min_pyramid_layer_size()\"\n            << \"\\n\\t These sizes can't be zero. \"\n            << \"\\n\\t width:  \" << width \n            << \"\\n\\t height: \" << height \n            << \"\\n\\t this:   \" << this\n            );\n\n        min_pyramid_layer_width = width;\n        min_pyramid_layer_height = height;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    unsigned long scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_min_pyramid_layer_width (\n    ) const\n    {\n        return min_pyramid_layer_width;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    unsigned long scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::\n    get_min_pyramid_layer_height (\n    ) const\n    {\n        return min_pyramid_layer_height;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    matrix<unsigned char> draw_fhog (\n        const object_detector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> >& detector,\n        const unsigned long weight_index = 0,\n        const long cell_draw_size = 15\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(weight_index < detector.num_detectors(),\n            \"\\t matrix draw_fhog()\"\n            << \"\\n\\t Invalid arguments were given to this function. \"\n            << \"\\n\\t weight_index:             \" << weight_index\n            << \"\\n\\t detector.num_detectors(): \" << detector.num_detectors()\n            );\n        DLIB_ASSERT(cell_draw_size > 0 && detector.get_w(weight_index).size() >= detector.get_scanner().get_num_dimensions(),\n            \"\\t matrix draw_fhog()\"\n            << \"\\n\\t Invalid arguments were given to this function. \"\n            << \"\\n\\t cell_draw_size:                              \" << cell_draw_size\n            << \"\\n\\t weight_index:                                \" << weight_index\n            << \"\\n\\t detector.get_w(weight_index).size():         \" << detector.get_w(weight_index).size()\n            << \"\\n\\t detector.get_scanner().get_num_dimensions(): \" << detector.get_scanner().get_num_dimensions()\n            );\n\n        typename scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::fhog_filterbank fb = detector.get_scanner().build_fhog_filterbank(detector.get_w(weight_index));\n        return draw_fhog(fb.get_filters(),cell_draw_size);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    unsigned long num_separable_filters (\n        const object_detector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> >& detector,\n        const unsigned long weight_index = 0\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(weight_index < detector.num_detectors(),\n            \"\\t unsigned long num_separable_filters()\"\n            << \"\\n\\t Invalid arguments were given to this function. \"\n            << \"\\n\\t weight_index:             \" << weight_index\n            << \"\\n\\t detector.num_detectors(): \" << detector.num_detectors()\n            );\n        DLIB_ASSERT(detector.get_w(weight_index).size() >= detector.get_scanner().get_num_dimensions() ,\n            \"\\t unsigned long num_separable_filters()\"\n            << \"\\n\\t Invalid arguments were given to this function. \"\n            << \"\\n\\t detector.get_w(weight_index).size():         \" << detector.get_w(weight_index).size()\n            << \"\\n\\t detector.get_scanner().get_num_dimensions(): \" << detector.get_scanner().get_num_dimensions()\n            );\n\n        typename scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::fhog_filterbank fb = detector.get_scanner().build_fhog_filterbank(detector.get_w(weight_index));\n        return fb.num_separable_filters();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    object_detector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> > threshold_filter_singular_values (\n        const object_detector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> >& detector,\n        double thresh,\n        const unsigned long weight_index = 0\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(thresh >= 0 ,\n            \"\\t object_detector threshold_filter_singular_values()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t thresh: \" << thresh \n        );\n\n        DLIB_ASSERT(weight_index < detector.num_detectors(),\n            \"\\t object_detector threshold_filter_singular_values()\"\n            << \"\\n\\t Invalid arguments were given to this function. \"\n            << \"\\n\\t weight_index:             \" << weight_index\n            << \"\\n\\t detector.num_detectors(): \" << detector.num_detectors()\n            );\n        DLIB_ASSERT(detector.get_w(weight_index).size() >= detector.get_scanner().get_num_dimensions() ,\n            \"\\t object_detector threshold_filter_singular_values()\"\n            << \"\\n\\t Invalid arguments were given to this function. \"\n            << \"\\n\\t detector.get_w(weight_index).size():         \" << detector.get_w(weight_index).size()\n            << \"\\n\\t detector.get_scanner().get_num_dimensions(): \" << detector.get_scanner().get_num_dimensions()\n            );\n\n\n        const unsigned long width = detector.get_scanner().get_fhog_window_width();\n        const unsigned long height = detector.get_scanner().get_fhog_window_height();\n        const long num_planes = detector.get_scanner().get_feature_extractor().get_num_planes();\n        const long size = width*height;\n\n        std::vector<matrix<double,0,1> > detector_weights;\n        for (unsigned long j = 0; j < detector.num_detectors(); ++j)\n        {\n            matrix<double,0,1> weights = detector.get_w(j);\n\n            if (j == weight_index)\n            {\n                matrix<double> u,v,w,f;\n                for (long i = 0; i < num_planes; ++i)\n                {\n                    f = reshape(rowm(weights, range(i*size, (i+1)*size-1)), height, width);\n\n                    svd3(f, u,w,v);\n                    const double scaled_thresh = std::max(1e-3, max(w)*thresh);\n                    w = round_zeros(w, scaled_thresh);\n                    f = u*diagm(w)*trans(v);\n\n                    set_rowm(weights,range(i*size, (i+1)*size-1)) = reshape_to_column_vector(f);\n                }\n            }\n            detector_weights.push_back(weights);\n        }\n        \n        return object_detector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> >(detector.get_scanner(), \n                                                                 detector.get_overlap_tester(),\n                                                                 detector_weights);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type,\n        typename svm_struct_prob_type\n        >\n    void configure_nuclear_norm_regularizer (\n        const scan_fhog_pyramid<Pyramid_type,feature_extractor_type>& scanner,\n        svm_struct_prob_type& prob\n    )\n    { \n        const double strength = scanner.get_nuclear_norm_regularization_strength();\n        const long num_planes = scanner.get_feature_extractor().get_num_planes();\n        if (strength != 0)\n        {\n            const unsigned long width = scanner.get_fhog_window_width();\n            const unsigned long height = scanner.get_fhog_window_height();\n            for (long i = 0; i < num_planes; ++i)\n            {\n                prob.add_nuclear_norm_regularizer(i*width*height, height, width, strength);\n            }\n            prob.set_cache_based_epsilon(0.001);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    struct processed_weight_vector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> >\n    {\n        processed_weight_vector(){}\n\n        typedef matrix<double,0,1> feature_vector_type;\n        typedef typename scan_fhog_pyramid<Pyramid_type,feature_extractor_type>::fhog_filterbank fhog_filterbank;\n\n        void init (\n            const scan_fhog_pyramid<Pyramid_type,feature_extractor_type>& scanner\n        ) \n        {\n            fb = scanner.build_fhog_filterbank(w);\n        }\n\n        const fhog_filterbank& get_detect_argument() const { return fb; }\n\n        feature_vector_type w;\n        fhog_filterbank fb;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pyramid_type,\n        typename image_type\n        >\n    void evaluate_detectors (\n        const std::vector<object_detector<scan_fhog_pyramid<pyramid_type> > >& detectors,\n        const image_type& img,\n        std::vector<rect_detection>& dets,\n        const double adjust_threshold = 0\n    )\n    {\n        typedef scan_fhog_pyramid<pyramid_type> scanner_type;\n\n        dets.clear();\n        if (detectors.size() == 0)\n            return;\n\n        const unsigned long cell_size = detectors[0].get_scanner().get_cell_size();\n\n        // Find the maximum sized filters and also most extreme pyramiding settings used.\n        unsigned long max_filter_width = 0;\n        unsigned long max_filter_height = 0;\n        unsigned long min_pyramid_layer_width = std::numeric_limits<unsigned long>::max();\n        unsigned long min_pyramid_layer_height = std::numeric_limits<unsigned long>::max();\n        unsigned long max_pyramid_levels = 0;\n        bool all_cell_sizes_the_same = true;\n        for (unsigned long i = 0; i < detectors.size(); ++i)\n        {\n            const scanner_type& scanner = detectors[i].get_scanner();\n            max_filter_width = std::max(max_filter_width, scanner.get_fhog_window_width());\n            max_filter_height = std::max(max_filter_height, scanner.get_fhog_window_height());\n            max_pyramid_levels = std::max(max_pyramid_levels, scanner.get_max_pyramid_levels());\n            min_pyramid_layer_width = std::min(min_pyramid_layer_width, scanner.get_min_pyramid_layer_width());\n            min_pyramid_layer_height = std::min(min_pyramid_layer_height, scanner.get_min_pyramid_layer_height());\n            if (cell_size != scanner.get_cell_size())\n                all_cell_sizes_the_same = false;\n        }\n\n        std::vector<rect_detection> dets_accum;\n        // Do to the HOG feature extraction to make the fhog pyramid.  Again, note that we\n        // are making a pyramid that will work with any of the detectors.  But only if all\n        // the cell sizes are the same.  If they aren't then we have to calculate the\n        // pyramid for each detector individually.\n        array<array<array2d<float> > > feats;\n        if (all_cell_sizes_the_same)\n        {\n            impl::create_fhog_pyramid<pyramid_type>(img,\n                detectors[0].get_scanner().get_feature_extractor(), feats, cell_size,\n                max_filter_height, max_filter_width, min_pyramid_layer_width,\n                min_pyramid_layer_height, max_pyramid_levels);\n        }\n\n        std::vector<std::pair<double, rectangle> > temp_dets;\n        for (unsigned long i = 0; i < detectors.size(); ++i)\n        {\n            const scanner_type& scanner = detectors[i].get_scanner();\n            if (!all_cell_sizes_the_same)\n            {\n                impl::create_fhog_pyramid<pyramid_type>(img,\n                    scanner.get_feature_extractor(), feats, scanner.get_cell_size(),\n                    max_filter_height, max_filter_width, min_pyramid_layer_width,\n                    min_pyramid_layer_height, max_pyramid_levels);\n            }\n\n            const unsigned long det_box_width  = scanner.get_fhog_window_width()  - 2*scanner.get_padding();\n            const unsigned long det_box_height = scanner.get_fhog_window_height() - 2*scanner.get_padding();\n            // A single detector object might itself have multiple weight vectors in it. So\n            // we need to evaluate all of them.\n            for (unsigned d = 0; d < detectors[i].num_detectors(); ++d)\n            {\n                const double thresh = detectors[i].get_processed_w(d).w(scanner.get_num_dimensions());\n\n                impl::detect_from_fhog_pyramid<pyramid_type>(feats, scanner.get_feature_extractor(),\n                    detectors[i].get_processed_w(d).get_detect_argument(), thresh+adjust_threshold,\n                    det_box_height, det_box_width, cell_size, max_filter_height,\n                    max_filter_width, temp_dets);\n\n                for (unsigned long j = 0; j < temp_dets.size(); ++j)\n                {\n                    rect_detection temp;\n                    temp.detection_confidence = temp_dets[j].first-thresh;\n                    temp.weight_index = i;\n                    temp.rect = temp_dets[j].second;\n                    dets_accum.push_back(temp);\n                }\n            }\n        }\n\n\n        // Do non-max suppression\n        dets.clear();\n        if (detectors.size() > 1)\n            std::sort(dets_accum.rbegin(), dets_accum.rend());\n        for (unsigned long i = 0; i < dets_accum.size(); ++i)\n        {\n            const test_box_overlap tester = detectors[dets_accum[i].weight_index].get_overlap_tester();\n            if (impl::overlaps_any_box(tester, dets, dets_accum[i]))\n                continue;\n\n            dets.push_back(dets_accum[i]);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename image_type\n        >\n    std::vector<rectangle> evaluate_detectors (\n        const std::vector<object_detector<scan_fhog_pyramid<Pyramid_type> > >& detectors,\n        const image_type& img,\n        const double adjust_threshold = 0\n    )\n    {\n        std::vector<rectangle> out_dets;\n        std::vector<rect_detection> dets;\n        evaluate_detectors(detectors, img, dets, adjust_threshold);\n        out_dets.reserve(dets.size());\n        for (unsigned long i = 0; i < dets.size(); ++i)\n            out_dets.push_back(dets[i].rect);\n        return out_dets;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_fHOG_PYRAMID_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_fhog_pyramid_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SCAN_fHOG_PYRAMID_ABSTRACT_Hh_\n#ifdef DLIB_SCAN_fHOG_PYRAMID_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../image_transforms/fhog_abstract.h\"\n#include \"object_detector_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    matrix<unsigned char> draw_fhog (\n        const object_detector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> >& detector,\n        const unsigned long weight_index = 0,\n        const long cell_draw_size = 15\n    );\n    /*!\n        requires\n            - cell_draw_size > 0\n            - weight_index < detector.num_detectors()\n            - detector.get_w(weight_index).size() >= detector.get_scanner().get_num_dimensions()\n              (i.e. the detector must have been populated with a HOG filter)\n        ensures\n            - Converts the HOG filters in the given detector (specifically, the filters in\n              detector.get_w(weight_index)) into an image suitable for display on the\n              screen.  In particular, we draw all the HOG cells into a grayscale image in a\n              way that shows the magnitude and orientation of the gradient energy in each\n              cell.  The resulting image is then returned.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    unsigned long num_separable_filters (\n        const object_detector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> >& detector,\n        const unsigned long weight_index = 0\n    );\n    /*!\n        requires\n            - weight_index < detector.num_detectors()\n            - detector.get_w(weight_index).size() >= detector.get_scanner().get_num_dimensions()\n              (i.e. the detector must have been populated with a HOG filter)\n        ensures\n            - Returns the number of separable filters necessary to represent the HOG\n              filters in the given detector's weight_index'th filter.  This is the filter\n              defined by detector.get_w(weight_index).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename feature_extractor_type\n        >\n    object_detector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> > threshold_filter_singular_values (\n        const object_detector<scan_fhog_pyramid<Pyramid_type,feature_extractor_type> >& detector,\n        double thresh,\n        const unsigned long weight_index = 0\n    );\n    /*!\n        requires\n            - thresh >= 0\n            - weight_index < detector.num_detectors()\n            - detector.get_w(weight_index).size() >= detector.get_scanner().get_num_dimensions()\n              (i.e. the detector must have been populated with a HOG filter)\n        ensures\n            - Removes all components of the filters in the given detector that have\n              singular values that are smaller than the given threshold.  Therefore, this\n              function allows you to control how many separable filters are in a detector.\n              In particular, as thresh gets larger the quantity\n              num_separable_filters(threshold_filter_singular_values(detector,thresh,weight_index),weight_index)\n              will generally get smaller and therefore give a faster running detector.\n              However, note that at some point a large enough thresh will drop too much\n              information from the filters and their accuracy will suffer.  \n            - returns the updated detector\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class default_fhog_feature_extractor\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                The scan_fhog_pyramid object defined below is primarily meant to be used\n                with the feature extraction technique implemented by extract_fhog_features().  \n                This technique can generally be understood as taking an input image and\n                outputting a multi-planed output image of floating point numbers that\n                somehow describe the image contents.  Since there are many ways to define\n                how this feature mapping is performed, the scan_fhog_pyramid allows you to\n                replace the extract_fhog_features() method with a customized method of your\n                choosing.  To do this you implement a class with the same interface as\n                default_fhog_feature_extractor.  \n\n                Therefore, the point of default_fhog_feature_extractor is two fold.  First,\n                it provides the default FHOG feature extraction method used by scan_fhog_pyramid.\n                Second, it serves to document the interface you need to implement to define \n                your own custom HOG style feature extraction. \n        !*/\n\n    public:\n\n        rectangle image_to_feats (\n            const rectangle& rect,\n            int cell_size,\n            int filter_rows_padding,\n            int filter_cols_padding\n        ) const { return image_to_fhog(rect, cell_size, filter_rows_padding, filter_cols_padding); }\n        /*!\n            requires\n                - cell_size > 0\n                - filter_rows_padding > 0\n                - filter_cols_padding > 0\n            ensures\n                - Maps a rectangle from the coordinates in an input image to the corresponding\n                  area in the output feature image.\n        !*/\n\n        rectangle feats_to_image (\n            const rectangle& rect,\n            int cell_size,\n            int filter_rows_padding,\n            int filter_cols_padding\n        ) const { return fhog_to_image(rect, cell_size, filter_rows_padding, filter_cols_padding); }\n        /*!\n            requires\n                - cell_size > 0\n                - filter_rows_padding > 0\n                - filter_cols_padding > 0\n            ensures\n                - Maps a rectangle from the coordinates of the hog feature image back to\n                  the input image.\n                - Mapping from feature space to image space is an invertible\n                  transformation.  That is, for any rectangle R we have:\n                    R == image_to_feats(feats_to_image(R,cell_size,filter_rows_padding,filter_cols_padding),\n                                                         cell_size,filter_rows_padding,filter_cols_padding).\n        !*/\n\n        template <\n            typename image_type\n            >\n        void operator()(\n            const image_type& img, \n            dlib::array<array2d<float> >& hog, \n            int cell_size,\n            int filter_rows_padding,\n            int filter_cols_padding\n        ) const { extract_fhog_features(img,hog,cell_size,filter_rows_padding,filter_cols_padding); }\n        /*!\n            requires\n                - image_type == is an implementation of array2d/array2d_kernel_abstract.h\n                - img contains some kind of pixel type. \n                  (i.e. pixel_traits<typename image_type::type> is defined)\n            ensures\n                - Extracts FHOG features by calling extract_fhog_features().  The results are\n                  stored into #hog.  Note that if you are implementing your own feature extractor you can\n                  pretty much do whatever you want in terms of feature extraction so long as the following\n                  conditions are met:\n                    - #hog.size() == get_num_planes()\n                    - Each image plane in of #hog has the same dimensions.\n                    - for all valid i, r, and c:\n                        - #hog[i][r][c] == a feature value describing the image content centered at the \n                          following pixel location in img: \n                            feats_to_image(point(c,r),cell_size,filter_rows_padding,filter_cols_padding)\n        !*/\n\n        inline unsigned long get_num_planes (\n        ) const { return 31; }\n        /*!\n            ensures\n                - returns the number of planes in the hog image output by the operator()\n                  method.\n        !*/\n    };\n\n    inline void serialize   (const default_fhog_feature_extractor&, std::ostream&) {}\n    inline void deserialize (default_fhog_feature_extractor&, std::istream&) {}\n    /*!\n        Provides serialization support.  Note that there is no state in the default hog\n        feature extractor so these functions do nothing.  But if you define a custom\n        feature extractor then make sure you remember to serialize any state in your\n        feature extractor.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type = default_fhog_feature_extractor\n        >\n    class scan_fhog_pyramid : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON Pyramid_type\n                - Must be one of the pyramid_down objects defined in\n                  dlib/image_transforms/image_pyramid_abstract.h or an object with a\n                  compatible interface\n\n            REQUIREMENTS ON Feature_extractor_type\n                - Must be a type with an interface compatible with the\n                  default_fhog_feature_extractor.\n\n            INITIAL VALUE\n                - get_padding()   == 1\n                - get_cell_size() == 8\n                - get_detection_window_width()   == 64\n                - get_detection_window_height()  == 64\n                - get_max_pyramid_levels()       == 1000\n                - get_min_pyramid_layer_width()  == 64\n                - get_min_pyramid_layer_height() == 64\n                - get_nuclear_norm_regularization_strength() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for running a fixed sized sliding window classifier\n                over an image pyramid.  In particular,  it slides a linear classifier over\n                a HOG pyramid as discussed in the paper:  \n                    Histograms of Oriented Gradients for Human Detection by Navneet Dalal\n                    and Bill Triggs, CVPR 2005\n                However, we augment the method slightly to use the version of HOG features \n                from: \n                    Object Detection with Discriminatively Trained Part Based Models by\n                    P. Felzenszwalb, R. Girshick, D. McAllester, D. Ramanan\n                    IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 32, No. 9, Sep. 2010\n                Since these HOG features have been shown to give superior performance. \n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be\n                protected by a mutex lock except for the case where you are copying the\n                configuration (via copy_configuration()) of a scan_fhog_pyramid object to\n                many other threads.  In this case, it is safe to copy the configuration of\n                a shared object so long as no other operations are performed on it.\n        !*/\n\n    public:\n        typedef matrix<double,0,1> feature_vector_type;\n        typedef Pyramid_type pyramid_type;\n        typedef Feature_extractor_type feature_extractor_type;\n\n        scan_fhog_pyramid (\n        );  \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        explicit scan_fhog_pyramid (\n            const feature_extractor_type& fe\n        );  \n        /*!\n            ensures\n                - this object is properly initialized\n                - #get_feature_extractor() == fe\n        !*/\n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type == is an implementation of array2d/array2d_kernel_abstract.h\n                - img contains some kind of pixel type. \n                  (i.e. pixel_traits<typename image_type::type> is defined)\n            ensures\n                - #is_loaded_with_image() == true\n                - This object is ready to run a classifier over img to detect object\n                  locations.  Call detect() to do this.\n        !*/\n\n        const feature_extractor_type& get_feature_extractor(\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the feature extractor used by this object.\n        !*/\n\n        bool is_loaded_with_image (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object has been loaded with an image to process and\n                  false otherwise.\n        !*/\n\n        void copy_configuration (\n            const scan_fhog_pyramid& item\n        );\n        /*!\n            ensures\n                - Copies all the state information of item into *this, except for state \n                  information populated by load().  More precisely, given two scan_fhog_pyramid\n                  objects S1 and S2, the following sequence of instructions should always \n                  result in both of them having the exact same state:\n                    S2.copy_configuration(S1);\n                    S1.load(img);\n                    S2.load(img);\n        !*/\n\n        void set_detection_window_size (\n            unsigned long window_width,\n            unsigned long window_height\n        );\n        /*!\n            requires\n                - window_width > 0\n                - window_height > 0\n            ensures\n                - When detect() is called, this object scans a window that is of the given\n                  width and height (in pixels) over each layer in an image pyramid.  This\n                  means that the rectangle detections which come out of detect() will have\n                  a width to height ratio approximately equal to window_width/window_height\n                  and will be approximately window_width*window_height pixels in area or\n                  larger.  Therefore, the smallest object that can be detected is roughly\n                  window_width by window_height pixels in size.\n                - #get_detection_window_width() == window_width\n                - #get_detection_window_height() == window_height\n                - Since we use a HOG feature representation, the detection procedure works\n                  as follows:\n                    Step 1. Make an image pyramid.\n                    Step 2. Convert each layer of the image pyramid into a multi-planed HOG \"image\".\n                    (the number of bands is given by get_feature_extractor().get_num_planes())\n                    Step 3. Scan a linear classifier over each HOG image in the pyramid. \n                  Moreover, the HOG features quantize the input image into a grid of cells,\n                  each cell being get_cell_size() by get_cell_size() pixels in size.  So\n                  when we scan the object detector over the pyramid we are scanning an\n                  appropriately sized window over these smaller quantized HOG features.  In\n                  particular, the size of the window we scan over the HOG feature pyramid\n                  is #get_fhog_window_width() by #get_fhog_window_height() HOG cells in\n                  size.    \n                - #is_loaded_with_image() == false\n        !*/\n\n        unsigned long get_detection_window_width (\n        ) const;\n        /*!\n            ensures\n                - returns the width, in pixels, of the detection window that is scanned\n                  over the image when detect() is called.    \n        !*/\n\n        inline unsigned long get_detection_window_height (\n        ) const; \n        /*!\n            ensures\n                - returns the height, in pixels, of the detection window that is scanned\n                  over the image when detect() is called.  \n        !*/\n\n        unsigned long get_fhog_window_width (\n        ) const; \n        /*!\n            ensures\n                - Returns the width of the HOG scanning window in terms of HOG cell blocks.\n                  Note that this is a function of get_detection_window_width(), get_cell_size(), \n                  and get_padding() and is therefore not something you set directly. \n                - #get_fhog_window_width() is approximately equal to the number of HOG cells \n                  that fit into get_detection_window_width() pixels plus 2*get_padding()\n                  since we include additional padding around each window to add context.\n        !*/\n\n        unsigned long get_fhog_window_height (\n        ) const;\n        /*!\n            ensures\n                - Returns the height of the HOG scanning window in terms of HOG cell blocks.  \n                  Note that this is a function of get_detection_window_height(), get_cell_size(), \n                  and get_padding() and is therefore not something you set directly. \n                - #get_fhog_window_height() is approximately equal to the number of HOG cells \n                  that fit into get_detection_window_height() pixels plus 2*get_padding()\n                  since we include additional padding around each window to add context.\n        !*/\n\n        void set_padding (\n            unsigned long new_padding\n        );\n        /*!\n            ensures\n                - #get_padding() == new_padding\n                - #is_loaded_with_image() == false\n        !*/\n\n        unsigned long get_padding (\n        ) const;\n        /*!\n            ensures\n                - The HOG windows scanned over the HOG pyramid can include additional HOG\n                  cells outside the detection window.  This can help add context and\n                  improve detection accuracy.  This function returns the number of extra\n                  HOG cells added onto the border of the HOG windows which are scanned by\n                  detect().\n        !*/\n\n        unsigned long get_cell_size (\n        ) const;\n        /*!\n            ensures\n                - Returns the size of the HOG cells.  Each HOG cell is square and contains\n                  get_cell_size()*get_cell_size() pixels.\n        !*/\n\n        void set_cell_size (\n            unsigned long new_cell_size\n        );\n        /*!\n            requires\n                - new_cell_size > 0\n            ensures\n                - #get_cell_size() == new_cell_size\n                - #is_loaded_with_image() == false\n        !*/\n\n        inline long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns get_fhog_window_width()*get_fhog_window_height()*get_feature_extractor().get_num_planes()\n                  (i.e. The number of features is equal to the size of the HOG window times\n                  the number of planes output by the feature extractor. )\n        !*/\n\n        inline unsigned long get_num_detection_templates (\n        ) const { return 1; }\n        /*!\n            ensures\n                - returns 1.  Note that this function is here only for compatibility with \n                  the scan_image_pyramid object.  Notionally, its return value indicates \n                  that a scan_fhog_pyramid object is always ready to detect objects once\n                  an image has been loaded.\n        !*/\n\n        inline unsigned long get_num_movable_components_per_detection_template (\n        ) const { return 0; }\n        /*!\n            ensures\n                - returns 0.  Note that this function is here only for compatibility with\n                  the scan_image_pyramid object.  Its return value means that this object\n                  does not support using movable part models.\n        !*/\n\n        unsigned long get_max_pyramid_levels (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of image pyramid levels this object will use.\n                  Note that #get_max_pyramid_levels() == 1 indicates that no image pyramid\n                  will be used at all.  That is, only the original image will be processed\n                  and no lower scale versions will be created.  \n        !*/\n\n        void set_max_pyramid_levels (\n            unsigned long max_levels\n        );\n        /*!\n            requires\n                - max_levels > 0\n            ensures\n                - #get_max_pyramid_levels() == max_levels\n        !*/\n\n        void set_min_pyramid_layer_size (\n            unsigned long width,\n            unsigned long height \n        );\n        /*!\n            requires\n                - width > 0\n                - height > 0\n            ensures\n                - #get_min_pyramid_layer_width() == width\n                - #get_min_pyramid_layer_height() == height\n        !*/\n\n        inline unsigned long get_min_pyramid_layer_width (\n        ) const;\n        /*!\n            ensures\n                - returns the smallest allowable width of an image in the image pyramid.\n                  All pyramids will always include the original input image, however, no\n                  pyramid levels will be created which have a width smaller than the\n                  value returned by this function.\n        !*/\n\n        inline unsigned long get_min_pyramid_layer_height (\n        ) const;\n        /*!\n            ensures\n                - returns the smallest allowable height of an image in the image pyramid.\n                  All pyramids will always include the original input image, however, no\n                  pyramid levels will be created which have a height smaller than the\n                  value returned by this function.\n        !*/\n\n        fhog_filterbank build_fhog_filterbank (\n            const feature_vector_type& weights \n        ) const;\n        /*!\n            requires\n                - weights.size() >= get_num_dimensions()\n            ensures\n                - Creates and then returns a fhog_filterbank object FB such that:\n                    - FB.get_num_dimensions() == get_num_dimensions()\n                    - FB.get_filters() == the values in weights unpacked into get_feature_extractor().get_num_planes() filters.\n                    - FB.num_separable_filters() == the number of separable filters necessary to\n                      represent all the filters in FB.get_filters().\n        !*/\n\n        class fhog_filterbank \n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents a HOG filter bank.  That is, the classifier that is \n                    slid over a HOG pyramid is a set of get_feature_extractor().get_num_planes() \n                    linear filters, each get_fhog_window_width() rows by get_fhog_window_height() \n                    columns in size.  This object contains that set of filters.  \n            !*/\n\n        public:\n            long get_num_dimensions(\n            ) const;\n            /*!\n                ensures\n                    - Returns the total number of values in the filters.  \n            !*/\n\n            const std::vector<matrix<float> >& get_filters(\n            ) const; \n            /*!\n                ensures\n                    - returns the set of HOG filters in this object.\n            !*/\n\n            unsigned long num_separable_filters(\n            ) const;\n            /*!\n                ensures\n                    - returns the number of separable filters necessary to represent all\n                      the filters in get_filters().\n            !*/\n        };\n\n        void detect (\n            const fhog_filterbank& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const;\n        /*!\n            requires\n                - w.get_num_dimensions() == get_num_dimensions()\n                - is_loaded_with_image() == true\n            ensures\n                - Scans the HOG filter defined by w over the HOG pyramid that was populated\n                  by the last call to load() and stores all object detections into #dets.  \n                - for all valid i:\n                    - #dets[i].second == The object box which produced this detection.  This rectangle gives\n                      the location of the detection.  Note that the rectangle will have been converted back into\n                      the original image input space.  That is, if this detection was made at a low level in the\n                      image pyramid then the object box will have been automatically mapped up the pyramid layers\n                      to the original image space.  Or in other words, if you plot #dets[i].second on top of the \n                      image given to load() it will show up in the right place.\n                    - #dets[i].first == The score for this detection.  This value is equal to dot(w, feature vector\n                      for this sliding window location).\n                    - #dets[i].first >= thresh\n                - #dets will be sorted in descending order. (i.e.  #dets[i].first >= #dets[j].first for all i, and j>i)\n                - Elements of w beyond index get_num_dimensions()-1 are ignored.  I.e. only the first\n                  get_num_dimensions() are used.\n                - Note that no form of non-max suppression is performed.  If a window has a score >= thresh\n                  then it is reported in #dets.\n        !*/\n\n        void detect (\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const;\n        /*!\n            requires\n                - w.size() >= get_num_dimensions()\n                - is_loaded_with_image() == true\n            ensures\n                - performs: detect(build_fhog_filterbank(w), dets, thresh)\n        !*/\n\n        void get_feature_vector (\n            const full_object_detection& obj,\n            feature_vector_type& psi\n        ) const;\n        /*!\n            requires\n                - obj.num_parts() == 0 \n                - is_loaded_with_image() == true\n                - psi.size() >= get_num_dimensions()\n                  (i.e. psi must have preallocated its memory before this function is called)\n            ensures\n                - This function allows you to determine the feature vector used for an\n                  object detection output from detect().  Note that this vector is\n                  added to psi.  Note also that you must use get_full_object_detection() to\n                  convert a rectangle from detect() into the needed full_object_detection.\n                - The dimensionality of the vector added to psi is get_num_dimensions().  This\n                  means that elements of psi after psi(get_num_dimensions()-1) are not modified.\n                - Since scan_fhog_pyramid only searches a limited set of object locations,\n                  not all possible rectangles can be output by detect().  So in the case\n                  where obj.get_rect() could not arise from a call to detect(), this\n                  function will map obj.get_rect() to the nearest possible rectangle and\n                  then add the feature vector for the mapped rectangle into #psi.\n                - get_best_matching_rect(obj.get_rect()) == the rectangle obj.get_rect()\n                  gets mapped to for feature extraction.\n        !*/\n\n        full_object_detection get_full_object_detection (\n            const rectangle& rect,\n            const feature_vector_type& w\n        ) const;\n        /*!\n            ensures\n                - returns full_object_detection(rect)\n                  (This function is here only for compatibility with the scan_image_pyramid\n                  object)\n        !*/\n\n        const rectangle get_best_matching_rect (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - Since scan_fhog_pyramid only searches a limited set of object locations,\n                  not all possible rectangles can be represented.  Therefore, this function\n                  allows you to supply a rectangle and obtain the nearest possible\n                  candidate object location rectangle.\n        !*/\n\n        double get_nuclear_norm_regularization_strength (\n        ) const;\n        /*!\n            ensures\n                - If the number of separable filters in a fhog_filterbank is small then the\n                  filter bank can be scanned over an image much faster than a normal set of\n                  filters.  Therefore, this object provides the option to encourage\n                  machine learning methods that learn a HOG filter bank (i.e.\n                  structural_object_detection_trainer) to select filter banks that have\n                  this beneficial property.  In particular, the value returned by\n                  get_nuclear_norm_regularization_strength() is a multiplier on a nuclear\n                  norm regularizer which will encourage the selection of filters that use a\n                  small number of separable components.  Larger values encourage tend to\n                  give a smaller number of separable filters. \n                - if (get_nuclear_norm_regularization_strength() == 0) then\n                    - This feature is disabled\n                - else\n                    - A nuclear norm regularizer will be added when\n                      structural_object_detection_trainer is used to learn a HOG filter\n                      bank.  Note that this can make the training process take\n                      significantly longer (but can result in faster object detectors).\n        !*/\n\n        void set_nuclear_norm_regularization_strength (\n            double strength\n        );\n        /*!\n            requires\n                - strength >= 0\n            ensures\n                - #get_nuclear_norm_regularization_strength() == strength\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const scan_fhog_pyramid<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void deserialize (\n        scan_fhog_pyramid<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pyramid_type,\n        typename image_type\n        >\n    void evaluate_detectors (\n        const std::vector<object_detector<scan_fhog_pyramid<pyramid_type>>>& detectors,\n        const image_type& img,\n        std::vector<rect_detection>& dets,\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - img contains some kind of pixel type. \n              (i.e. pixel_traits<typename image_type::type> is defined)\n        ensures\n            - This function runs each of the provided object_detector objects over img and\n              stores the resulting detections into #dets.  Importantly, this function is\n              faster than running each detector individually because it computes the HOG\n              features only once and then reuses them for each detector.  However, it is\n              important to note that this speedup is only possible if all the detectors use\n              the same cell_size parameter that determines how HOG features are computed.\n              If different cell_size values are used then this function will not be any\n              faster than running the detectors individually.\n            - This function applies non-max suppression individually to the output of each\n              detector.  Therefore, the output is the same as if you ran each detector\n              individually and then concatenated the results. \n            - To be precise, this function performs object detection on the given image and\n              stores the detected objects into #dets.  In particular, we will have that:\n                - #dets is sorted such that the highest confidence detections come first.\n                  E.g. element 0 is the best detection, element 1 the next best, and so on.\n                - #dets.size() == the number of detected objects.\n                - #dets[i].detection_confidence == The strength of the i-th detection.\n                  Larger values indicate that the detector is more confident that #dets[i]\n                  is a correct detection rather than being a false alarm.  Moreover, the\n                  detection_confidence is equal to the detection value output by the\n                  scanner minus the threshold value stored at the end of the weight vector.\n                - #dets[i].rect == the bounding box for the i-th detection.\n                - The detection #dets[i].rect was produced by detectors[#dets[i].weight_index].\n            - The detection threshold is adjusted by having adjust_threshold added to it.\n              Therefore, an adjust_threshold value > 0 makes detecting objects harder while\n              a negative value makes it easier.  Moreover, the following will be true for\n              all valid i:\n                - #dets[i].detection_confidence >= adjust_threshold\n              This means that, for example, you can obtain the maximum possible number of\n              detections by setting adjust_threshold equal to negative infinity.\n            - This function is threadsafe in the sense that multiple threads can call\n              evaluate_detectors() with the same instances of detectors and img without\n              requiring a mutex lock.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pyramid_type,\n        typename image_type\n        >\n    std::vector<rectangle> evaluate_detectors (\n        const std::vector<object_detector<scan_fhog_pyramid<pyramid_type>>>& detectors,\n        const image_type& img,\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - img contains some kind of pixel type. \n              (i.e. pixel_traits<typename image_type::type> is defined)\n        ensures\n            - This function just calls the above evaluate_detectors() routine and copies\n              the output dets into a vector<rectangle> object and returns it.  Therefore,\n              this function is provided for convenience.\n            - This function is threadsafe in the sense that multiple threads can call\n              evaluate_detectors() with the same instances of detectors and img without\n              requiring a mutex lock.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_fHOG_PYRAMID_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SCAN_iMAGE_Hh_\n#define DLIB_SCAN_iMAGE_Hh_\n\n#include <vector>\n#include <utility>\n#include \"scan_image_abstract.h\"\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"../rand.h\"\n#include \"../array2d.h\"\n#include \"../image_transforms/spatial_filtering.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n\n        inline rectangle bounding_box_of_rects (\n            const std::vector<std::pair<unsigned int, rectangle> >& rects,\n            const point& position\n        )\n        /*!\n            ensures\n                - returns the smallest rectangle that contains all the \n                  rectangles in rects.  That is, returns the rectangle that\n                  contains translate_rect(rects[i].second,position) for all valid i.\n        !*/\n        {\n            rectangle rect;\n\n            for (unsigned long i = 0; i < rects.size(); ++i)\n            {\n                rect += translate_rect(rects[i].second,position);\n            }\n\n            return rect;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    bool all_images_same_size (\n        const image_array_type& images\n    )\n    {\n        if (images.size() == 0)\n            return true;\n\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            if (num_rows(images[0]) != num_rows(images[i]) ||\n                num_columns(images[0]) != num_columns(images[i]))\n                return false;\n        }\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    double sum_of_rects_in_images (\n        const image_array_type& images,\n        const std::vector<std::pair<unsigned int, rectangle> >& rects,\n        const point& position\n    )\n    {\n        DLIB_ASSERT(all_images_same_size(images),\n            \"\\t double sum_of_rects_in_images()\"\n            << \"\\n\\t Invalid arguments given to this function.\"\n            << \"\\n\\t all_images_same_size(images): \" << all_images_same_size(images)\n        );\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < rects.size(); ++i)\n        {\n            DLIB_ASSERT(rects[i].first < images.size(),\n                \"\\t double sum_of_rects_in_images()\"\n                << \"\\n\\t rects[\"<<i<<\"].first must refer to a valid image.\"\n                << \"\\n\\t rects[\"<<i<<\"].first: \" << rects[i].first \n                << \"\\n\\t images.size(): \" << images.size() \n            );\n        }\n#endif\n\n\n        typedef typename image_traits<typename image_array_type::type>::pixel_type pixel_type;\n        typedef typename promote<pixel_type>::type ptype;\n\n        ptype temp = 0;\n\n        for (unsigned long i = 0; i < rects.size(); ++i)\n        {\n            const typename image_array_type::type& img = images[rects[i].first];\n            const rectangle rect = get_rect(img).intersect(translate_rect(rects[i].second,position));\n            temp += sum(matrix_cast<ptype>(subm(mat(img), rect)));\n        }\n\n        return static_cast<double>(temp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    double sum_of_rects_in_images_movable_parts (\n        const image_array_type& images,\n        const rectangle& window,\n        const std::vector<std::pair<unsigned int, rectangle> >& fixed_rects,\n        const std::vector<std::pair<unsigned int, rectangle> >& movable_rects,\n        const point& position\n    )\n    {\n        DLIB_ASSERT(all_images_same_size(images) && center(window) == point(0,0),\n            \"\\t double sum_of_rects_in_images_movable_parts()\"\n            << \"\\n\\t Invalid arguments given to this function.\"\n            << \"\\n\\t all_images_same_size(images): \" << all_images_same_size(images)\n            << \"\\n\\t center(window): \" << center(window)\n        );\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < fixed_rects.size(); ++i)\n        {\n            DLIB_ASSERT(fixed_rects[i].first < images.size(),\n                \"\\t double sum_of_rects_in_images_movable_parts()\"\n                << \"\\n\\t fixed_rects[\"<<i<<\"].first must refer to a valid image.\"\n                << \"\\n\\t fixed_rects[\"<<i<<\"].first: \" << fixed_rects[i].first \n                << \"\\n\\t images.size(): \" << images.size() \n            );\n        }\n        for (unsigned long i = 0; i < movable_rects.size(); ++i)\n        {\n            DLIB_ASSERT(movable_rects[i].first < images.size(),\n                \"\\t double sum_of_rects_in_images_movable_parts()\"\n                << \"\\n\\t movable_rects[\"<<i<<\"].first must refer to a valid image.\"\n                << \"\\n\\t movable_rects[\"<<i<<\"].first: \" << movable_rects[i].first \n                << \"\\n\\t images.size(): \" << images.size() \n            );\n            DLIB_ASSERT(center(movable_rects[i].second) == point(0,0),\n                \"\\t double sum_of_rects_in_images_movable_parts()\"\n                << \"\\n\\t movable_rects[\"<<i<<\"].second: \" << movable_rects[i].second \n            );\n        }\n#endif\n        typedef typename image_traits<typename image_array_type::type>::pixel_type pixel_type;\n        typedef typename promote<pixel_type>::type ptype;\n\n        ptype temp = 0;\n\n        // compute TOTAL_FIXED part\n        for (unsigned long i = 0; i < fixed_rects.size(); ++i)\n        {\n            const typename image_array_type::type& img = images[fixed_rects[i].first];\n            const rectangle rect = get_rect(img).intersect(translate_rect(fixed_rects[i].second,position));\n            temp += sum(matrix_cast<ptype>(subm(mat(img), rect)));\n        }\n\n        if (images.size() > 0)\n        {\n            // compute TOTAL_MOVABLE part\n            array2d<ptype> tempimg(images[0].nr(), images[0].nc());\n            for (unsigned long i = 0; i < movable_rects.size(); ++i)\n            {\n                const typename image_array_type::type& img = images[movable_rects[i].first];\n\n                sum_filter_assign(img, tempimg, movable_rects[i].second);\n\n                const rectangle rect = get_rect(tempimg).intersect(translate_rect(window,position));\n                if (rect.is_empty() == false)\n                    temp += std::max(0,max(matrix_cast<ptype>(subm(mat(tempimg), rect))));\n            }\n        }\n\n        return static_cast<double>(temp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void find_points_above_thresh (\n        std::vector<std::pair<double, point> >& dets,\n        const image_type& img_,\n        const double thresh,\n        const unsigned long max_dets\n    )\n    {\n        const_image_view<image_type> img(img_);\n        typedef typename image_traits<image_type>::pixel_type ptype;\n\n        dets.clear();\n        if (max_dets == 0)\n            return;\n\n        unsigned long count = 0;\n        dlib::rand rnd;\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                const ptype val = img[r][c];\n                if (val >= thresh)\n                {\n                    ++count;\n\n                    if (dets.size() < max_dets)\n                    {\n                        dets.push_back(std::make_pair(val, point(c,r)));\n                    }\n                    else \n                    {\n                        // The idea here is to cause us to randomly sample possible detection\n                        // locations throughout the image rather than just stopping the detection\n                        // procedure once we hit the max_dets limit. So this method will result\n                        // in a random subsample of all the detections >= thresh being in dets\n                        // at the end of scan_image().\n                        const unsigned long random_index = rnd.get_random_32bit_number()%count;\n                        if (random_index < dets.size())\n                        {\n                            dets[random_index] = std::make_pair(val, point(c,r));\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    void scan_image (\n        std::vector<std::pair<double, point> >& dets,\n        const image_array_type& images,\n        const std::vector<std::pair<unsigned int, rectangle> >& rects,\n        const double thresh,\n        const unsigned long max_dets\n    )\n    {\n        DLIB_ASSERT(images.size() > 0 && rects.size() > 0 && all_images_same_size(images),\n            \"\\t void scan_image()\"\n            << \"\\n\\t Invalid arguments given to this function.\"\n            << \"\\n\\t images.size(): \" << images.size() \n            << \"\\n\\t rects.size():  \" << rects.size() \n            << \"\\n\\t all_images_same_size(images): \" << all_images_same_size(images)\n        );\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < rects.size(); ++i)\n        {\n            DLIB_ASSERT(rects[i].first < images.size(),\n                \"\\t void scan_image()\"\n                << \"\\n\\t rects[\"<<i<<\"].first must refer to a valid image.\"\n                << \"\\n\\t rects[\"<<i<<\"].first: \" << rects[i].first \n                << \"\\n\\t images.size(): \" << images.size() \n            );\n        }\n#endif\n\n\n\n\n        typedef typename image_traits<typename image_array_type::type>::pixel_type pixel_type;\n        typedef typename promote<pixel_type>::type ptype;\n\n        array2d<ptype> accum(images[0].nr(), images[0].nc());\n        assign_all_pixels(accum, 0);\n\n        for (unsigned long i = 0; i < rects.size(); ++i)\n            sum_filter(images[rects[i].first], accum, rects[i].second);\n\n        find_points_above_thresh(dets, accum, thresh, max_dets);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    void scan_image_movable_parts (\n        std::vector<std::pair<double, point> >& dets,\n        const image_array_type& images,\n        const rectangle& window,\n        const std::vector<std::pair<unsigned int, rectangle> >& fixed_rects,\n        const std::vector<std::pair<unsigned int, rectangle> >& movable_rects,\n        const double thresh,\n        const unsigned long max_dets\n    )\n    {\n        DLIB_ASSERT(images.size() > 0 && all_images_same_size(images) && \n                    center(window) == point(0,0) && window.area() > 0,\n            \"\\t void scan_image_movable_parts()\"\n            << \"\\n\\t Invalid arguments given to this function.\"\n            << \"\\n\\t all_images_same_size(images): \" << all_images_same_size(images)\n            << \"\\n\\t center(window): \" << center(window)\n            << \"\\n\\t window.area():  \" << window.area() \n            << \"\\n\\t images.size():  \" << images.size() \n        );\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < fixed_rects.size(); ++i)\n        {\n            DLIB_ASSERT(fixed_rects[i].first < images.size(),\n                \"\\t void scan_image_movable_parts()\"\n                << \"\\n\\t Invalid arguments given to this function.\"\n                << \"\\n\\t fixed_rects[\"<<i<<\"].first must refer to a valid image.\"\n                << \"\\n\\t fixed_rects[\"<<i<<\"].first: \" << fixed_rects[i].first \n                << \"\\n\\t images.size(): \" << images.size() \n            );\n        }\n        for (unsigned long i = 0; i < movable_rects.size(); ++i)\n        {\n            DLIB_ASSERT(movable_rects[i].first < images.size(),\n                \"\\t void scan_image_movable_parts()\"\n                << \"\\n\\t Invalid arguments given to this function.\"\n                << \"\\n\\t movable_rects[\"<<i<<\"].first must refer to a valid image.\"\n                << \"\\n\\t movable_rects[\"<<i<<\"].first: \" << movable_rects[i].first \n                << \"\\n\\t images.size(): \" << images.size() \n            );\n            DLIB_ASSERT(center(movable_rects[i].second) == point(0,0) &&\n                        movable_rects[i].second.area() > 0,\n                \"\\t void scan_image_movable_parts()\"\n                << \"\\n\\t Invalid arguments given to this function.\"\n                << \"\\n\\t movable_rects[\"<<i<<\"].second: \" << movable_rects[i].second \n                << \"\\n\\t movable_rects[\"<<i<<\"].second.area(): \" << movable_rects[i].second.area()\n            );\n        }\n#endif\n\n        if (movable_rects.size() == 0 && fixed_rects.size() == 0)\n            return;\n\n        typedef typename image_traits<typename image_array_type::type>::pixel_type pixel_type;\n        typedef typename promote<pixel_type>::type ptype;\n\n        array2d<ptype> accum(images[0].nr(), images[0].nc());\n        assign_all_pixels(accum, 0);\n\n        for (unsigned long i = 0; i < fixed_rects.size(); ++i)\n            sum_filter(images[fixed_rects[i].first], accum, fixed_rects[i].second);\n\n        array2d<ptype> temp(accum.nr(), accum.nc());\n        for (unsigned long i = 0; i < movable_rects.size(); ++i)\n        {\n            const rectangle rect = movable_rects[i].second;\n            sum_filter_assign(images[movable_rects[i].first], temp, rect);\n            max_filter(temp, accum, window.width(), window.height(), 0);  \n        }\n\n        find_points_above_thresh(dets, accum, thresh, max_dets);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_iMAGE_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SCAN_iMAGE_ABSTRACT_Hh_\n#ifdef DLIB_SCAN_iMAGE_ABSTRACT_Hh_\n\n#include <vector>\n#include <utility>\n#include \"../algs.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    bool all_images_same_size (\n        const image_array_type& images\n    );\n    /*!\n        requires\n            - image_array_type       == an implementation of array/array_kernel_abstract.h\n            - image_array_type::type == an image object that implements the interface\n              defined in dlib/image_processing/generic_image.h \n        ensures\n            - if (all elements of images have the same dimensions (i.e. \n              for all i and j: get_rect(images[i]) == get_rect(images[j]))) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    double sum_of_rects_in_images (\n        const image_array_type& images,\n        const std::vector<std::pair<unsigned int, rectangle> >& rects,\n        const point& position\n    );\n    /*!\n        requires\n            - image_array_type             == an implementation of array/array_kernel_abstract.h\n            - image_array_type::type       == an image object that implements the interface\n              defined in dlib/image_processing/generic_image.h.  Moreover, these objects must\n              contain a scalar pixel type (e.g. int rather than rgb_pixel)\n            - all_images_same_size(images) == true\n            - for all valid i: rects[i].first < images.size()\n              (i.e. all the rectangles must reference valid elements of images)\n        ensures\n            - returns the sum of the pixels inside the given rectangles.  To be precise, \n              let RECT_SUM[i] = sum of pixels inside the rectangle translate_rect(rects[i].second, position) \n              from the image images[rects[i].first].  Then this function returns the \n              sum of RECT_SUM[i] for all the valid values of i.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    double sum_of_rects_in_images_movable_parts (\n        const image_array_type& images,\n        const rectangle& window,\n        const std::vector<std::pair<unsigned int, rectangle> >& fixed_rects,\n        const std::vector<std::pair<unsigned int, rectangle> >& movable_rects,\n        const point& position\n    );\n    /*!\n        requires\n            - image_array_type             == an implementation of array/array_kernel_abstract.h\n            - image_array_type::type       == an image object that implements the interface\n              defined in dlib/image_processing/generic_image.h.  Moreover, these objects must\n              contain a scalar pixel type (e.g. int rather than rgb_pixel)\n            - all_images_same_size(images) == true\n            - center(window) == point(0,0)\n            - for all valid i: \n                - fixed_rects[i].first < images.size()\n                  (i.e. all the rectangles must reference valid elements of images)\n            - for all valid i: \n                - movable_rects[i].first < images.size()\n                  (i.e. all the rectangles must reference valid elements of images)\n                - center(movable_rects[i].second) == point(0,0) \n        ensures\n            - returns the sum of the pixels inside fixed_rects as well as the sum of the pixels\n              inside movable_rects when these latter rectangles are placed at their highest\n              scoring locations inside the given window.  To be precise: \n                - let RECT_SUM(r,x) = sum of pixels inside the rectangle translate_rect(r.second, x) \n                  from the image images[r.first].\n                - let WIN_MAX(i) = The maximum value of RECT_SUM(movable_rects[i],X) when maximizing\n                  over all the X such that translate_rect(window,position).contains(X) == true.\n\n                - let TOTAL_FIXED   == sum over all elements R in fixed_rects of: RECT_SUM(R,position)\n                - let TOTAL_MOVABLE == sum over all valid i of: max(WIN_MAX(i), 0)\n\n              Then this function returns TOTAL_FIXED + TOTAL_MOVABLE.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void find_points_above_thresh (\n        std::vector<std::pair<double, point> >& dets,\n        const image_type& img,\n        const double thresh,\n        const unsigned long max_dets\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h.  Moreover, these it must contain a\n              scalar pixel type (e.g. int rather than rgb_pixel)\n        ensures\n            - #dets == a list of points from img which had pixel values >= thresh.  \n            - Specifically, we have:\n                - #dets.size() <= max_dets\n                  (note that dets is cleared before new detections are added by find_points_above_thresh())\n                - for all valid i:\n                    - #dets[i].first == img[#dets[i].second.y()][#dets[i].second.x()] \n                      (i.e. the first field contains the value of the pixel at this detection location)\n                    - #dets[i].first >= thresh\n            - if (there are more than max_dets locations that pass the above threshold test) then\n                - #dets == a random subsample of all the locations which passed the threshold\n                  test.  \n            - else\n                - #dets == all the points which passed the threshold test.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    void scan_image (\n        std::vector<std::pair<double, point> >& dets,\n        const image_array_type& images,\n        const std::vector<std::pair<unsigned int, rectangle> >& rects,\n        const double thresh,\n        const unsigned long max_dets\n    );\n    /*!\n        requires\n            - image_array_type             == an implementation of array/array_kernel_abstract.h\n            - image_array_type::type       == an image object that implements the interface\n              defined in dlib/image_processing/generic_image.h.  Moreover, these objects must\n              contain a scalar pixel type (e.g. int rather than rgb_pixel)\n            - images.size() > 0\n            - rects.size() > 0 \n            - all_images_same_size(images) == true\n            - for all valid i: rects[i].first < images.size()\n              (i.e. all the rectangles must reference valid elements of images)\n        ensures\n            - slides the set of rectangles over the image space and reports the locations\n              which give a sum bigger than thresh. \n            - Specifically, we have:\n                - #dets.size() <= max_dets\n                  (note that dets is cleared before new detections are added by scan_image())\n                - for all valid i:\n                    - #dets[i].first == sum_of_rects_in_images(images,rects,#dets[i].second) >= thresh\n            - if (there are more than max_dets locations that pass the threshold test) then\n                - #dets == a random subsample of all the locations which passed the threshold\n                  test.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    void scan_image_movable_parts (\n        std::vector<std::pair<double, point> >& dets,\n        const image_array_type& images,\n        const rectangle& window,\n        const std::vector<std::pair<unsigned int, rectangle> >& fixed_rects,\n        const std::vector<std::pair<unsigned int, rectangle> >& movable_rects,\n        const double thresh,\n        const unsigned long max_dets\n    );\n    /*!\n        requires\n            - image_array_type             == an implementation of array/array_kernel_abstract.h\n            - image_array_type::type       == an image object that implements the interface\n              defined in dlib/image_processing/generic_image.h.  Moreover, these objects must\n              contain a scalar pixel type (e.g. int rather than rgb_pixel)\n            - images.size() > 0\n            - all_images_same_size(images) == true\n            - center(window) == point(0,0)\n            - window.area() > 0\n            - for all valid i: \n                - fixed_rects[i].first < images.size()\n                  (i.e. all the rectangles must reference valid elements of images)\n            - for all valid i: \n                - movable_rects[i].first < images.size()\n                  (i.e. all the rectangles must reference valid elements of images)\n                - center(movable_rects[i].second) == point(0,0) \n                - movable_rects[i].second.area() > 0\n        ensures\n            - Scans the given window over the images and reports the locations with a score bigger\n              than thresh.\n            - Specifically, we have:\n                - #dets.size() <= max_dets\n                  (note that dets is cleared before new detections are added by scan_image_movable_parts())\n                - for all valid i:\n                    - #dets[i].first == sum_of_rects_in_images_movable_parts(images,\n                                                                             window,\n                                                                             fixed_rects,\n                                                                             movable_rects,\n                                                                             #dets[i].second) >= thresh\n            - if (there are more than max_dets locations that pass the above threshold test) then\n                - #dets == a random subsample of all the locations which passed the threshold\n                  test.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_iMAGE_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image_boxes.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SCAN_IMAGE_bOXES_Hh_\n#define DLIB_SCAN_IMAGE_bOXES_Hh_\n\n#include \"scan_image_boxes_abstract.h\"\n#include \"../matrix.h\"\n#include \"../geometry.h\"\n#include \"../image_processing.h\"\n#include \"../array2d.h\"\n#include <vector>\n#include \"../image_processing/full_object_detection.h\"\n#include \"../image_transforms.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class default_box_generator\n    {\n    public:\n        template <typename image_type>\n        void operator() (\n            const image_type& img,\n            std::vector<rectangle>& rects\n        ) const\n        {\n            rects.clear();\n            find_candidate_object_locations(img, rects);\n        }\n    };\n\n    inline void serialize(const default_box_generator&, std::ostream& ) {}\n    inline void deserialize(default_box_generator&, std::istream& ) {}\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator = default_box_generator\n        >\n    class scan_image_boxes : noncopyable\n    {\n\n    public:\n\n        typedef matrix<double,0,1> feature_vector_type;\n\n        typedef Feature_extractor_type feature_extractor_type;\n        typedef Box_generator box_generator;\n\n        scan_image_boxes (\n        );  \n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n\n        inline bool is_loaded_with_image (\n        ) const;\n\n        inline void copy_configuration(\n            const feature_extractor_type& fe\n        );\n\n        inline void copy_configuration(\n            const box_generator& bg\n        );\n\n        const box_generator& get_box_generator (\n        ) const { return detect_boxes; } \n\n        const Feature_extractor_type& get_feature_extractor (\n        ) const { return feats; }\n\n        inline void copy_configuration (\n            const scan_image_boxes& item\n        );\n\n        inline long get_num_dimensions (\n        ) const;\n\n        unsigned long get_num_spatial_pyramid_levels (\n        ) const;\n\n        void set_num_spatial_pyramid_levels (\n            unsigned long levels\n        );\n\n        void detect (\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const;\n\n        void get_feature_vector (\n            const full_object_detection& obj,\n            feature_vector_type& psi\n        ) const;\n\n        full_object_detection get_full_object_detection (\n            const rectangle& rect,\n            const feature_vector_type& w\n        ) const;\n\n        const rectangle get_best_matching_rect (\n            const rectangle& rect\n        ) const;\n        /*!\n            requires\n                - is_loaded_with_image() == true\n        !*/\n\n        inline unsigned long get_num_detection_templates (\n        ) const { return 1; }\n\n        inline unsigned long get_num_movable_components_per_detection_template (\n        ) const { return 0; }\n\n        template <typename T, typename U>\n        friend void serialize (\n            const scan_image_boxes<T,U>& item,\n            std::ostream& out\n        );\n\n        template <typename T, typename U>\n        friend void deserialize (\n            scan_image_boxes<T,U>& item,\n            std::istream& in \n        );\n\n    private:\n        static bool compare_pair_rect (\n            const std::pair<double, rectangle>& a,\n            const std::pair<double, rectangle>& b\n        )\n        {\n            return a.first < b.first;\n        }\n\n        void test_coordinate_transforms()\n        {\n            for (long x = -10; x <= 10; x += 10)\n            {\n                for (long y = -10; y <= 10; y += 10)\n                {\n                    const rectangle rect = centered_rect(x,y,5,6);\n                    rectangle a;\n\n                    a = feats.image_to_feat_space(rect);\n                    if (a.width()  > 10000000 || a.height() > 10000000 )\n                    {\n                        DLIB_CASSERT(false, \"The image_to_feat_space() routine is outputting rectangles of an implausibly \"\n                                     << \"\\nlarge size.  This means there is probably a bug in your feature extractor.\");\n                    }\n                    a = feats.feat_to_image_space(rect);\n                    if (a.width()  > 10000000 || a.height() > 10000000 )\n                    {\n                        DLIB_CASSERT(false, \"The feat_to_image_space() routine is outputting rectangles of an implausibly \"\n                                     << \"\\nlarge size.  This means there is probably a bug in your feature extractor.\");\n                    }\n                }\n            }\n            \n        }\n\n        static void add_grid_rects (\n            std::vector<rectangle>& rects,\n            const rectangle& object_box,\n            unsigned int cells_x,\n            unsigned int cells_y\n        ) \n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(cells_x > 0 && cells_y > 0,\n                \"\\t void add_grid_rects()\"\n                << \"\\n\\t The number of cells along a dimension can't be zero. \"\n                << \"\\n\\t cells_x: \" << cells_x\n                << \"\\n\\t cells_y: \" << cells_y\n            );\n\n            const matrix_range_exp<double>& x = linspace(object_box.left(), object_box.right(), cells_x+1);\n            const matrix_range_exp<double>& y = linspace(object_box.top(), object_box.bottom(), cells_y+1);\n\n            for (long j = 0; j+1 < y.size(); ++j)\n            {\n                for (long i = 0; i+1 < x.size(); ++i)\n                {\n                    const dlib::vector<double,2> tl(x(i),y(j));\n                    const dlib::vector<double,2> br(x(i+1),y(j+1));\n                    rects.push_back(rectangle(tl,br));\n                }\n            }\n        }\n\n        void get_feature_extraction_regions (\n            const rectangle& rect,\n            std::vector<rectangle>& regions\n        ) const \n        /*!\n            ensures\n                - #regions.size() is always the same number no matter what the input is.  The\n                  regions also have a consistent ordering.\n                - all the output rectangles are contained within rect.\n        !*/\n        {\n            regions.clear();\n\n            for (unsigned int l = 1; l <= num_spatial_pyramid_levels; ++l)\n            {\n                const int cells = (int)std::pow(2.0, l-1.0);\n                add_grid_rects(regions, rect, cells, cells);\n            }\n        }\n\n        unsigned int get_num_components_per_detection_template(\n        ) const\n        {\n            return (unsigned int)(std::pow(4.0,(double)num_spatial_pyramid_levels)-1)/3;\n        }\n\n        feature_extractor_type feats;\n        std::vector<rectangle> search_rects;\n        bool loaded_with_image;\n        unsigned int num_spatial_pyramid_levels;\n        box_generator detect_boxes;\n\n        const long box_sizedims;\n        const long box_maxsize;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    void serialize (\n        const scan_image_boxes<T,U>& item,\n        std::ostream& out\n    )\n    {\n        int version = 1;\n        serialize(version, out);\n        serialize(item.feats, out);\n        serialize(item.search_rects, out);\n        serialize(item.loaded_with_image, out);\n        serialize(item.num_spatial_pyramid_levels, out);\n        serialize(item.detect_boxes, out);\n        serialize(item.get_num_dimensions(), out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    void deserialize (\n        scan_image_boxes<T,U>& item,\n        std::istream& in \n    )\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 1)\n            throw serialization_error(\"Unsupported version found when deserializing a scan_image_boxes object.\");\n\n        deserialize(item.feats, in);\n        deserialize(item.search_rects, in);\n        deserialize(item.loaded_with_image, in);\n        deserialize(item.num_spatial_pyramid_levels, in);\n        deserialize(item.detect_boxes, in);\n\n        // When developing some feature extractor, it's easy to accidentally change its\n        // number of dimensions and then try to deserialize data from an older version of\n        // your extractor into the current code.  This check is here to catch that kind of\n        // user error.\n        long dims;\n        deserialize(dims, in);\n        if (item.get_num_dimensions() != dims)\n            throw serialization_error(\"Number of dimensions in serialized scan_image_boxes doesn't match the expected number.\");\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                         scan_image_boxes member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    scan_image_boxes<Feature_extractor_type,Box_generator>::\n    scan_image_boxes (\n    ) :\n        loaded_with_image(false),\n        num_spatial_pyramid_levels(3),\n        box_sizedims(20),\n        box_maxsize(1200)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    template <\n        typename image_type\n        >\n    void scan_image_boxes<Feature_extractor_type,Box_generator>::\n    load (\n        const image_type& img\n    )\n    {\n        feats.load(img);\n        detect_boxes(img, search_rects);\n        loaded_with_image = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    bool scan_image_boxes<Feature_extractor_type,Box_generator>::\n    is_loaded_with_image (\n    ) const\n    {\n        return loaded_with_image;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    void scan_image_boxes<Feature_extractor_type,Box_generator>::\n    copy_configuration(\n        const feature_extractor_type& fe\n    )\n    {\n        test_coordinate_transforms();\n        feats.copy_configuration(fe);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    void scan_image_boxes<Feature_extractor_type,Box_generator>::\n    copy_configuration(\n        const box_generator& bg \n    )\n    {\n        detect_boxes = bg;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    void scan_image_boxes<Feature_extractor_type,Box_generator>::\n    copy_configuration (\n        const scan_image_boxes& item\n    )\n    {\n        feats.copy_configuration(item.feats);\n        detect_boxes = item.detect_boxes;\n        num_spatial_pyramid_levels = item.num_spatial_pyramid_levels;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    unsigned long scan_image_boxes<Feature_extractor_type,Box_generator>::\n    get_num_spatial_pyramid_levels (\n    ) const\n    {\n        return num_spatial_pyramid_levels;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    void scan_image_boxes<Feature_extractor_type,Box_generator>::\n    set_num_spatial_pyramid_levels (\n        unsigned long levels\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(levels > 0, \n            \"\\t void scan_image_boxes::set_num_spatial_pyramid_levels()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t levels: \" << levels \n            << \"\\n\\t this: \" << this\n            );\n        \n\n        num_spatial_pyramid_levels = levels;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    long scan_image_boxes<Feature_extractor_type,Box_generator>::\n    get_num_dimensions (\n    ) const\n    {\n        return feats.get_num_dimensions()*get_num_components_per_detection_template() + box_sizedims*2;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    void scan_image_boxes<Feature_extractor_type,Box_generator>::\n    detect (\n        const feature_vector_type& w,\n        std::vector<std::pair<double, rectangle> >& dets,\n        const double thresh\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_loaded_with_image() &&\n                    w.size() >= get_num_dimensions(), \n            \"\\t void scan_image_boxes::detect()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t w.size():               \" << w.size()\n            << \"\\n\\t get_num_dimensions():   \" << get_num_dimensions()\n            << \"\\n\\t this: \" << this\n            );\n        \n        dets.clear();\n\n        array<integral_image_generic<double> > saliency_images(get_num_components_per_detection_template());\n\n        array2d<double> temp_img(feats.nr(), feats.nc());\n\n        // build saliency images  \n        for (unsigned long i = 0; i < saliency_images.size(); ++i)\n        {\n            const unsigned long offset = 2*box_sizedims + feats.get_num_dimensions()*i;\n\n            // make the basic saliency image for the i-th feature extraction region\n            for (long r = 0; r < feats.nr(); ++r)\n            {\n                for (long c = 0; c < feats.nc(); ++c)\n                {\n                    const typename feature_extractor_type::descriptor_type& descriptor = feats(r,c);\n\n                    double sum = 0;\n                    for (unsigned long k = 0; k < descriptor.size(); ++k)\n                    {\n                        sum += w(descriptor[k].first + offset)*descriptor[k].second;\n                    }\n                    temp_img[r][c] = sum;\n                }\n            }\n\n            // now convert base saliency image into final integral image\n            saliency_images[i].load(temp_img);\n        }\n\n\n        // now search the saliency images\n        std::vector<rectangle> regions;\n        const rectangle bounds = get_rect(feats);\n        for (unsigned long i = 0; i < search_rects.size(); ++i)\n        {\n            const rectangle rect = feats.image_to_feat_space(search_rects[i]).intersect(bounds);\n            if (rect.is_empty())\n                continue;\n            get_feature_extraction_regions(rect, regions);\n            double score = 0;\n            for (unsigned long k = 0; k < regions.size(); ++k)\n            {\n                score += saliency_images[k].get_sum_of_area(regions[k]);\n            }\n            const double width = search_rects[i].width();\n            const double height = search_rects[i].height();\n\n            score += dot(linpiece(width,  linspace(0, box_maxsize, box_sizedims+1)), rowm(w, range(0,box_sizedims-1)));\n            score += dot(linpiece(height, linspace(0, box_maxsize, box_sizedims+1)), rowm(w, range(box_sizedims,2*box_sizedims-1)));\n\n            if (score >= thresh)\n            {\n                dets.push_back(std::make_pair(score, search_rects[i]));\n            }\n        }\n\n        std::sort(dets.rbegin(), dets.rend(), compare_pair_rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    const rectangle scan_image_boxes<Feature_extractor_type,Box_generator>::\n    get_best_matching_rect (\n        const rectangle& rect\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_loaded_with_image(),\n            \"\\t const rectangle scan_image_boxes::get_best_matching_rect()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t this: \" << this\n            );\n\n\n        double best_score = -1;\n        rectangle best_rect;\n        for (unsigned long i = 0; i < search_rects.size(); ++i)\n        {\n            const double score = (rect.intersect(search_rects[i])).area()/(double)(rect+search_rects[i]).area();\n            if (score > best_score)\n            {\n                best_score = score;\n                best_rect = search_rects[i];\n            }\n        }\n        return best_rect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    full_object_detection scan_image_boxes<Feature_extractor_type,Box_generator>::\n    get_full_object_detection (\n        const rectangle& rect,\n        const feature_vector_type& /*w*/\n    ) const\n    {\n        return full_object_detection(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator\n        >\n    void scan_image_boxes<Feature_extractor_type,Box_generator>::\n    get_feature_vector (\n        const full_object_detection& obj,\n        feature_vector_type& psi\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_loaded_with_image() &&\n                    psi.size() >= get_num_dimensions() &&\n                    obj.num_parts() == 0,\n            \"\\t void scan_image_boxes::get_feature_vector()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t psi.size():             \" << psi.size()\n            << \"\\n\\t get_num_dimensions():   \" << get_num_dimensions()\n            << \"\\n\\t obj.num_parts():                            \" << obj.num_parts()\n            << \"\\n\\t this: \" << this\n            );\n\n\n\n        const rectangle best_rect = get_best_matching_rect(obj.get_rect());\n        const rectangle mapped_rect = feats.image_to_feat_space(best_rect).intersect(get_rect(feats));\n        if (mapped_rect.is_empty())\n            return;\n\n        std::vector<rectangle> regions;\n        get_feature_extraction_regions(mapped_rect, regions);\n\n        // pull features out of all the boxes in regions.\n        for (unsigned long j = 0; j < regions.size(); ++j)\n        {\n            const rectangle rect = regions[j];\n\n            const unsigned long template_region_id = j;\n            const unsigned long offset = box_sizedims*2 + feats.get_num_dimensions()*template_region_id;\n            for (long r = rect.top(); r <= rect.bottom(); ++r)\n            {\n                for (long c = rect.left(); c <= rect.right(); ++c)\n                {\n                    const typename feature_extractor_type::descriptor_type& descriptor = feats(r,c);\n                    for (unsigned long k = 0; k < descriptor.size(); ++k)\n                    {\n                        psi(descriptor[k].first + offset) += descriptor[k].second;\n                    }\n                }\n            }\n        }\n\n        const double width = best_rect.width();\n        const double height = best_rect.height();\n        set_rowm(psi, range(0,box_sizedims-1))              += linpiece(width,  linspace(0, box_maxsize, box_sizedims+1));\n        set_rowm(psi, range(box_sizedims,box_sizedims*2-1)) += linpiece(height, linspace(0, box_maxsize, box_sizedims+1));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_IMAGE_bOXES_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image_boxes_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SCAN_IMAGE_bOXES_ABSTRACT_Hh_\n#ifdef DLIB_SCAN_IMAGE_bOXES_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n#include \"../geometry.h\"\n#include \"../image_processing.h\"\n#include \"../array2d.h\"\n#include \"full_object_detection_abstract.h\"\n#include \"../image_transforms/segment_image_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class default_box_generator\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a function object that takes in an image and outputs a set of\n                candidate object locations.  It is also the default box generator used by\n                the scan_image_boxes object defined below.\n        !*/\n\n    public:\n\n        template <typename image_type>\n        void operator() (\n            const image_type& img,\n            std::vector<rectangle>& rects\n        ) const\n        /*!\n            ensures\n                - #rects == the set of candidate object locations which should be searched\n                  inside img.  That is, these are the rectangles which might contain\n                  objects of interest within the given image.\n        !*/\n        {\n            rects.clear();\n            find_candidate_object_locations(img, rects);\n        }\n    };\n\n    inline void serialize  (const default_box_generator&, std::ostream& ) {}\n    inline void deserialize(      default_box_generator&, std::istream& ) {}\n    /*!\n        ensures\n            - provides serialization support.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator = default_box_generator\n        >\n    class scan_image_boxes : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON Feature_extractor_type\n                - must be an object with an interface compatible with the hashed_feature_image \n                  object defined in dlib/image_keypoint/hashed_feature_image_abstract.h or \n                  with the nearest_neighbor_feature_image object defined in \n                  dlib/image_keypoint/nearest_neighbor_feature_image_abstract.h\n\n            REQUIREMENTS ON Box_generator\n                - must be an object with an interface compatible with the\n                  default_box_generator object defined at the top of this file.\n\n            INITIAL VALUE\n                - get_num_spatial_pyramid_levels() == 3\n                - is_loaded_with_image() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for running a classifier over an image with the goal\n                of localizing each object present.  The localization is in the form of the\n                bounding box around each object of interest.  \n\n                Unlike the scan_image_pyramid object which scans a fixed sized window over\n                an image pyramid, the scan_image_boxes tool allows you to define your own\n                list of \"candidate object locations\" which should be evaluated.  This is\n                simply a list of rectangle objects which might contain objects of interest.\n                The scan_image_boxes object will then evaluate the classifier at each of\n                these locations and return the subset of rectangles which appear to have\n                objects in them.  The candidate object location generation is provided by\n                the Box_generator that is passed in as a template argument.  \n\n                This object can also be understood as a general tool for implementing the\n                spatial pyramid models described in the paper:\n                    Beyond Bags of Features: Spatial Pyramid Matching for Recognizing \n                    Natural Scene Categories by Svetlana Lazebnik, Cordelia Schmid, \n                    and Jean Ponce\n\n\n                The classifiers used by this object have three parts: \n                   1. The underlying feature extraction provided by Feature_extractor_type\n                      objects, which associate a vector with each location in an image.\n\n                   2. A rule for extracting a feature vector from a candidate object\n                      location.  In this object we use the spatial pyramid matching method.\n                      This means we cut an object's detection window into a set of \"feature\n                      extraction regions\" and extract a bag-of-words vector from each\n                      before finally concatenating them to form the final feature vector\n                      representing the entire object window.  The set of feature extraction\n                      regions can be configured by the user by calling\n                      set_num_spatial_pyramid_levels().  To be a little more precise, the\n                      feature vector for a candidate object window is defined as follows:\n                        - Let N denote the number of feature extraction zones.\n                        - Let M denote the dimensionality of the vectors output by\n                          Feature_extractor_type objects.\n                        - Let F(i) == the M dimensional vector which is the sum of all\n                          vectors given by our Feature_extractor_type object inside the\n                          i-th feature extraction zone.  So this is notionally a\n                          bag-of-words vector from the i-th zone.\n                        - Then the feature vector for an object window is an M*N\n                          dimensional vector [F(1) F(2) F(3) ... F(N)] (i.e. it is a\n                          concatenation of the N vectors).  This feature vector can be\n                          thought of as a collection of N bags-of-words, each bag coming\n                          from a spatial location determined by one of the feature\n                          extraction zones.\n                          \n                   3. A weight vector and a threshold value.  The dot product between the\n                      weight vector and the feature vector for a candidate object location\n                      gives the score of the location.  If this score is greater than the\n                      threshold value then the candidate object location is output as a\n                      detection.\n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be\n                protected by a mutex lock except for the case where you are copying the\n                configuration (via copy_configuration()) of a scan_image_boxes object to\n                many other threads.  In this case, it is safe to copy the configuration of\n                a shared object so long as no other operations are performed on it.\n        !*/\n\n    public:\n\n        typedef matrix<double,0,1> feature_vector_type;\n\n        typedef Feature_extractor_type feature_extractor_type;\n        typedef Box_generator box_generator;\n\n        scan_image_boxes (\n        );  \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type must be a type with the following properties:\n                    - image_type objects can be loaded into Feature_extractor_type\n                      objects via Feature_extractor_type::load().\n                    - image_type objects can be passed to the first argument of\n                      Box_generator::operator()\n            ensures\n                - #is_loaded_with_image() == true\n                - This object is ready to run a classifier over img to detect object\n                  locations.  Call detect() to do this.\n        !*/\n\n        bool is_loaded_with_image (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object has been loaded with an image to process and\n                  false otherwise.\n        !*/\n\n        const feature_extractor_type& get_feature_extractor (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the feature_extractor_type object used \n                  internally for local feature extraction.  \n        !*/\n\n        void copy_configuration(\n            const feature_extractor_type& fe\n        );\n        /*!\n            ensures\n                - This function performs the equivalent of\n                  get_feature_extractor().copy_configuration(fe) (i.e. this function allows\n                  you to configure the parameters of the underlying feature extractor used\n                  by a scan_image_boxes object)\n        !*/\n\n        void copy_configuration(\n            const box_generator& bg\n        );\n        /*!\n            ensures\n                - #get_box_generator() == bg\n                  (i.e. this function allows you to configure the parameters of the\n                  underlying box generator used by a scan_image_boxes object)\n        !*/\n\n        const box_generator& get_box_generator (\n        ) const;\n        /*!\n            ensures\n                - returns the box_generator used by this object to generate candidate\n                  object locations.\n        !*/\n\n        void copy_configuration (\n            const scan_image_boxes& item\n        );\n        /*!\n            ensures\n                - Copies all the state information of item into *this, except for state \n                  information populated by load().  More precisely, given two scan_image_boxes \n                  objects S1 and S2, the following sequence of instructions should always \n                  result in both of them having the exact same state:\n                    S2.copy_configuration(S1);\n                    S1.load(img);\n                    S2.load(img);\n        !*/\n\n        long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns the number of dimensions in the feature vector for a candidate\n                  object location.  This value is the dimensionality of the underlying\n                  feature vectors produced by Feature_extractor_type times the number of\n                  feature extraction regions used.  Note that the number of feature\n                  extraction regions used is a function of\n                  get_num_spatial_pyramid_levels().\n        !*/\n\n        unsigned long get_num_spatial_pyramid_levels (\n        ) const;\n        /*!\n            ensures\n                - returns the number of layers in the spatial pyramid.  For example, if\n                  this function returns 1 then it means we use a simple bag-of-words\n                  representation over the whole object window.  If it returns 2 then it\n                  means the feature representation is the concatenation of 5 bag-of-words\n                  vectors, one from the entire object window and 4 others from 4 different\n                  parts of the object window.  If it returns 3 then there are 1+4+16\n                  bag-of-words vectors concatenated together in the feature representation,\n                  and so on.\n        !*/\n\n        void set_num_spatial_pyramid_levels (\n            unsigned long levels\n        );\n        /*!\n            requires\n                - levels > 0\n            ensures\n                - #get_num_spatial_pyramid_levels() == levels\n        !*/\n\n        void detect (\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const;\n        /*!\n            requires\n                - w.size() >= get_num_dimensions()\n                - is_loaded_with_image() == true\n            ensures\n                - Scans over all the candidate object locations as discussed in the WHAT\n                  THIS OBJECT REPRESENTS section and stores all detections into #dets.\n                - for all valid i:\n                    - #dets[i].second == The candidate object location which produced this\n                      detection.  This rectangle gives the location of the detection.  \n                    - #dets[i].first == The score for this detection.  This value is equal\n                      to dot(w, feature vector for this candidate object location).\n                    - #dets[i].first >= thresh\n                - #dets will be sorted in descending order. \n                  (i.e.  #dets[i].first >= #dets[j].first for all i, and j>i)\n                - Elements of w beyond index get_num_dimensions()-1 are ignored.  I.e. only\n                  the first get_num_dimensions() are used.\n                - Note that no form of non-max suppression is performed.  If a locations\n                  has a score >= thresh then it is reported in #dets.\n        !*/\n\n        void get_feature_vector (\n            const full_object_detection& obj,\n            feature_vector_type& psi\n        ) const;\n        /*!\n            requires\n                - obj.num_parts() == 0 \n                - is_loaded_with_image() == true\n                - psi.size() >= get_num_dimensions()\n                  (i.e. psi must have preallocated its memory before this function is called)\n            ensures\n                - This function allows you to determine the feature vector used for a\n                  candidate object location output from detect().  Note that this vector is\n                  added to psi.  Note also that you must use get_full_object_detection() to\n                  convert a rectangle from detect() into the needed full_object_detection.\n                - The dimensionality of the vector added to psi is get_num_dimensions().  This\n                  means that elements of psi after psi(get_num_dimensions()-1) are not modified.\n                - Since scan_image_boxes only searches a limited set of object locations,\n                  not all possible rectangles can be output by detect().  So in the case\n                  where obj.get_rect() could not arise from a call to detect(), this\n                  function will map obj.get_rect() to the nearest possible rectangle and\n                  then add the feature vector for the mapped rectangle into #psi.\n                - get_best_matching_rect(obj.get_rect()) == the rectangle obj.get_rect()\n                  gets mapped to for feature extraction.\n        !*/\n\n        full_object_detection get_full_object_detection (\n            const rectangle& rect,\n            const feature_vector_type& w\n        ) const;\n        /*!\n            ensures\n                - returns full_object_detection(rect)\n                  (This function is here only for compatibility with the scan_image_pyramid\n                  object)\n        !*/\n\n        const rectangle get_best_matching_rect (\n            const rectangle& rect\n        ) const;\n        /*!\n            requires\n                - is_loaded_with_image() == true\n            ensures\n                - Since scan_image_boxes only searches a limited set of object locations,\n                  not all possible rectangles can be represented.  Therefore, this function\n                  allows you to supply a rectangle and obtain the nearest possible\n                  candidate object location rectangle.\n        !*/\n\n        unsigned long get_num_detection_templates (\n        ) const { return 1; }\n        /*!\n            ensures\n                - returns 1.  Note that this function is here only for compatibility with \n                  the scan_image_pyramid object.  Notionally, its return value indicates \n                  that a scan_image_boxes object is always ready to detect objects once\n                  an image has been loaded.\n        !*/\n\n        unsigned long get_num_movable_components_per_detection_template (\n        ) const { return 0; }\n        /*!\n            ensures\n                - returns 0.  Note that this function is here only for compatibility with\n                  the scan_image_pyramid object.  Its return value means that this object\n                  does not support using movable part models.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator \n        >\n    void serialize (\n        const scan_image_boxes<Feature_extractor_type,Box_generator>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    template <\n        typename Feature_extractor_type,\n        typename Box_generator \n        >\n    void deserialize (\n        scan_image_boxes<Feature_extractor_type,Box_generator>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_IMAGE_bOXES_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image_custom.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SCAN_IMAGE_CuSTOM_Hh_\n#define DLIB_SCAN_IMAGE_CuSTOM_Hh_\n\n#include \"scan_image_custom_abstract.h\"\n#include \"../matrix.h\"\n#include \"../geometry.h\"\n#include <vector>\n#include \"../image_processing/full_object_detection.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    class scan_image_custom : noncopyable\n    {\n\n    public:\n\n        typedef matrix<double,0,1> feature_vector_type;\n        typedef Feature_extractor_type feature_extractor_type;\n\n        scan_image_custom (\n        );  \n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n\n        inline bool is_loaded_with_image (\n        ) const;\n\n        inline void copy_configuration(\n            const feature_extractor_type& fe\n        );\n\n        const Feature_extractor_type& get_feature_extractor (\n        ) const { return feats; }\n\n        inline void copy_configuration (\n            const scan_image_custom& item\n        );\n\n        inline long get_num_dimensions (\n        ) const;\n\n        void detect (\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const;\n\n        void get_feature_vector (\n            const full_object_detection& obj,\n            feature_vector_type& psi\n        ) const;\n\n        full_object_detection get_full_object_detection (\n            const rectangle& rect,\n            const feature_vector_type& w\n        ) const;\n\n        const rectangle get_best_matching_rect (\n            const rectangle& rect\n        ) const;\n\n        inline unsigned long get_num_detection_templates (\n        ) const { return 1; }\n\n        inline unsigned long get_num_movable_components_per_detection_template (\n        ) const { return 0; }\n\n        template <typename T>\n        friend void serialize (\n            const scan_image_custom<T>& item,\n            std::ostream& out\n        );\n\n        template <typename T>\n        friend void deserialize (\n            scan_image_custom<T>& item,\n            std::istream& in \n        );\n\n    private:\n        static bool compare_pair_rect (\n            const std::pair<double, rectangle>& a,\n            const std::pair<double, rectangle>& b\n        )\n        {\n            return a.first < b.first;\n        }\n\n\n        DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(\n            has_compute_object_score,\n            double, \n            compute_object_score,\n            ( const matrix<double,0,1>& w, const rectangle& obj) const\n        );\n\n        template <typename fe_type>\n        typename enable_if<has_compute_object_score<fe_type> >::type compute_all_rect_scores (\n            const fe_type& feats,\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const\n        {\n            for (unsigned long i = 0; i < search_rects.size(); ++i)\n            {\n                const double score = feats.compute_object_score(w, search_rects[i]);\n                if (score >= thresh)\n                {\n                    dets.push_back(std::make_pair(score, search_rects[i]));\n                }\n            }\n        }\n\n        template <typename fe_type>\n        typename disable_if<has_compute_object_score<fe_type> >::type compute_all_rect_scores (\n            const fe_type& feats,\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const\n        {\n            matrix<double,0,1> psi(w.size());\n            psi = 0;\n            double prev_dot = 0;\n            for (unsigned long i = 0; i < search_rects.size(); ++i)\n            {\n                // Reset these back to zero every so often to avoid the accumulation of\n                // rounding error.  Note that the only reason we do this loop in this\n                // complex way is to avoid needing to zero the psi vector every iteration.\n                if ((i%500) == 499)\n                {\n                    psi = 0;\n                    prev_dot = 0;\n                }\n\n                feats.get_feature_vector(search_rects[i], psi);\n                const double cur_dot = dot(psi, w);\n                const double score = cur_dot - prev_dot;\n                if (score >= thresh)\n                {\n                    dets.push_back(std::make_pair(score, search_rects[i]));\n                }\n                prev_dot = cur_dot;\n            }\n        }\n\n\n        feature_extractor_type feats;\n        std::vector<rectangle> search_rects;\n        bool loaded_with_image;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const scan_image_custom<T>& item,\n        std::ostream& out\n    )\n    {\n        int version = 1;\n        serialize(version, out);\n        serialize(item.feats, out);\n        serialize(item.search_rects, out);\n        serialize(item.loaded_with_image, out);\n        serialize(item.get_num_dimensions(), out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void deserialize (\n        scan_image_custom<T>& item,\n        std::istream& in \n    )\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 1)\n            throw serialization_error(\"Unsupported version found when deserializing a scan_image_custom object.\");\n\n        deserialize(item.feats, in);\n        deserialize(item.search_rects, in);\n        deserialize(item.loaded_with_image, in);\n\n        // When developing some feature extractor, it's easy to accidentally change its\n        // number of dimensions and then try to deserialize data from an older version of\n        // your extractor into the current code.  This check is here to catch that kind of\n        // user error.\n        long dims;\n        deserialize(dims, in);\n        if (item.get_num_dimensions() != dims)\n            throw serialization_error(\"Number of dimensions in serialized scan_image_custom doesn't match the expected number.\");\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                         scan_image_custom member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    scan_image_custom<Feature_extractor_type>::\n    scan_image_custom (\n    ) :\n        loaded_with_image(false)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    template <\n        typename image_type\n        >\n    void scan_image_custom<Feature_extractor_type>::\n    load (\n        const image_type& img\n    )\n    {\n        feats.load(img, search_rects);\n        loaded_with_image = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    bool scan_image_custom<Feature_extractor_type>::\n    is_loaded_with_image (\n    ) const\n    {\n        return loaded_with_image;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    void scan_image_custom<Feature_extractor_type>::\n    copy_configuration(\n        const feature_extractor_type& fe\n    )\n    {\n        feats.copy_configuration(fe);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    void scan_image_custom<Feature_extractor_type>::\n    copy_configuration (\n        const scan_image_custom& item\n    )\n    {\n        feats.copy_configuration(item.feats);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    long scan_image_custom<Feature_extractor_type>::\n    get_num_dimensions (\n    ) const\n    {\n        return feats.get_num_dimensions();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    void scan_image_custom<Feature_extractor_type>::\n    detect (\n        const feature_vector_type& w,\n        std::vector<std::pair<double, rectangle> >& dets,\n        const double thresh\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_loaded_with_image() &&\n                    w.size() >= get_num_dimensions(), \n            \"\\t void scan_image_custom::detect()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t w.size():               \" << w.size()\n            << \"\\n\\t get_num_dimensions():   \" << get_num_dimensions()\n            << \"\\n\\t this: \" << this\n            );\n        \n        dets.clear();\n        compute_all_rect_scores(feats, w,dets,thresh);\n        std::sort(dets.rbegin(), dets.rend(), compare_pair_rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    const rectangle scan_image_custom<Feature_extractor_type>::\n    get_best_matching_rect (\n        const rectangle& rect\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_loaded_with_image(),\n            \"\\t const rectangle scan_image_custom::get_best_matching_rect()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t this: \" << this\n            );\n\n\n        double best_score = -1;\n        rectangle best_rect;\n        for (unsigned long i = 0; i < search_rects.size(); ++i)\n        {\n            const double score = (rect.intersect(search_rects[i])).area()/(double)(rect+search_rects[i]).area();\n            if (score > best_score)\n            {\n                best_score = score;\n                best_rect = search_rects[i];\n            }\n        }\n        return best_rect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    full_object_detection scan_image_custom<Feature_extractor_type>::\n    get_full_object_detection (\n        const rectangle& rect,\n        const feature_vector_type& /*w*/\n    ) const\n    {\n        return full_object_detection(rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    void scan_image_custom<Feature_extractor_type>::\n    get_feature_vector (\n        const full_object_detection& obj,\n        feature_vector_type& psi\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_loaded_with_image() &&\n                    psi.size() >= get_num_dimensions() &&\n                    obj.num_parts() == 0,\n            \"\\t void scan_image_custom::get_feature_vector()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t psi.size():             \" << psi.size()\n            << \"\\n\\t get_num_dimensions():   \" << get_num_dimensions()\n            << \"\\n\\t obj.num_parts():                            \" << obj.num_parts()\n            << \"\\n\\t this: \" << this\n            );\n\n\n        feats.get_feature_vector(get_best_matching_rect(obj.get_rect()), psi);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_IMAGE_CuSTOM_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image_custom_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SCAN_IMAGE_CuSTOM_ABSTRACT_Hh_\n#ifdef DLIB_SCAN_IMAGE_CuSTOM_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n#include \"../geometry.h\"\n#include \"../image_processing/full_object_detection_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class example_feature_extractor\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines the interface a feature extractor must implement if it\n                is to be used with the scan_image_custom object defined at the bottom of\n                this file.  \n\n                In this case, the purpose of a feature extractor is to associated a\n                complete feature vector with each rectangle in an image.  In particular,\n                each rectangle is scored by taking the dot product between this feature\n                vector and a weight vector.  If this score is greater than a threshold then\n                the rectangle is output as a detection.\n        !*/\n\n    public:\n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& image,\n            std::vector<rectangle>& candidate_objects\n        );\n        /*!\n            ensures\n                - Loads the given image into this feature extractor.  This means that\n                  subsequent calls to get_feature_vector() will return the feature vector\n                  corresponding to locations in the image given to load().\n                - #candidate_objects == a set of bounding boxes in the given image that\n                  might contain objects of interest.  These are the locations that will be\n                  checked for the presents of objects when this feature extractor is used\n                  with the scan_image_custom object.\n\n        !*/\n\n        void copy_configuration (\n            const feature_extractor& item\n        );\n        /*!\n            ensures\n                - Copies all the state information of item into *this, except for state\n                  information populated by load().  More precisely, given two\n                  feature extractor objects S1 and S2, the following sequence of\n                  instructions should always result in both of them having the exact same\n                  state:\n                    S2.copy_configuration(S1);\n                    S1.load(img, temp);\n                    S2.load(img, temp);\n        !*/\n\n        unsigned long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns the dimensionality of the feature vectors output by this object.\n        !*/\n\n        void get_feature_vector (\n            const rectangle& obj,\n            matrix<double,0,1>& psi\n        ) const;\n        /*!\n            requires\n                - psi.size() >= get_num_dimensions()\n                  (i.e. psi must have preallocated its memory before this function is called)\n            ensures\n                - This function computes the feature vector associated with the given rectangle\n                  in obj.  This rectangle is interpreted as a bounding box within the last image\n                  given to this->load() and a feature vector describing that bounding box is \n                  output into psi.\n                - The feature vector is added into psi.  That is, it does not overwrite the\n                  previous contents of psi, but instead, it adds the vector to psi.\n                - The dimensionality of the vector added to psi is get_num_dimensions().  This\n                  means that elements of psi after psi(get_num_dimensions()-1) are not modified.\n                - #psi.size() == psi.size()\n                  (i.e. this function does not change the size of the psi vector)\n        !*/\n\n        double compute_object_score (\n            const matrix<double,0,1>& w,\n            const rectangle& obj\n        ) const;\n        /*!\n            requires\n                - w.size() >= get_num_dimensions()\n            ensures\n                - This function returns the dot product between the feature vector for\n                  object box obj and the given w vector.  That is, this function computes\n                  the same number as the following code snippet:\n                     matrix<double,0,1> psi(w.size());\n                     psi = 0;\n                     get_feature_vector(obj, psi);\n                     return dot(psi, w);\n                  The point of the compute_object_score() routine is to compute this dot\n                  product in a much more efficient way than directly calling\n                  get_feature_vector() and dot().  Therefore, compute_object_score() is an\n                  optional function.  If you can't think of a faster way to compute these\n                  scores then do not implement compute_object_score() and the\n                  scan_image_custom object will simply compute these scores for you.\n                  However, it is often the case that there is something clever you can do\n                  to make this computation faster.  If that is the case, then you can\n                  provide an implementation of this function with your feature extractor\n                  and then scan_image_custom will use it instead of using the default\n                  calculation method shown in the above code snippet.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n    \n    void serialize( \n        const feature_extractor& item, \n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize( \n        feature_extractor& item, \n        std::istream& in\n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Feature_extractor_type\n        >\n    class scan_image_custom : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON Feature_extractor_type\n                - must be an object with an interface compatible with the\n                  example_feature_extractor defined at the top of this file.\n\n            INITIAL VALUE\n                - is_loaded_with_image() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for running a classifier over an image with the goal\n                of localizing each object present.  The localization is in the form of the\n                bounding box around each object of interest.  \n\n                Unlike the scan_image_pyramid and scan_image_boxes objects, this image\n                scanner delegates all the work of constructing the object feature vector to\n                its Feature_extractor_type template argument.  That is, scan_image_custom\n                simply asks the supplied feature extractor what boxes in the image we\n                should investigate and then asks the feature extractor for the complete\n                feature vector for each box.  That is, scan_image_custom does not apply any\n                kind of pyramiding or other higher level processing to the features coming\n                out of the feature extractor.  That means that when you use\n                scan_image_custom it is completely up to you to define the feature vector\n                used with each image box.\n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be\n                protected by a mutex lock except for the case where you are copying the\n                configuration (via copy_configuration()) of a scan_image_custom object to\n                many other threads.  In this case, it is safe to copy the configuration of\n                a shared object so long as no other operations are performed on it.\n        !*/\n\n    public:\n\n        typedef matrix<double,0,1> feature_vector_type;\n        typedef Feature_extractor_type feature_extractor_type;\n\n        scan_image_custom (\n        );  \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type must be a type with the following properties:\n                    - image_type objects can be loaded into Feature_extractor_type\n                      objects via Feature_extractor_type::load().\n            ensures\n                - #is_loaded_with_image() == true\n                - Calls get_feature_extractor().load() on the given image.  That is, we\n                  will have loaded the image into the feature extractor in this\n                  scan_image_custom object.  We will also have stored the candidate\n                  object locations generated by the feature extractor and will scan\n                  over them when this->detect() is called.\n                - This object is ready to run a classifier over img to detect object\n                  locations.  Call detect() to do this.\n        !*/\n\n        bool is_loaded_with_image (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object has been loaded with an image to process and\n                  false otherwise.\n        !*/\n\n        const feature_extractor_type& get_feature_extractor (\n        ) const; \n        /*!\n            ensures\n                - returns a const reference to the feature_extractor_type object used \n                  internally for local feature extraction.  \n        !*/\n\n        void copy_configuration(\n            const feature_extractor_type& fe\n        );\n        /*!\n            ensures\n                - This function performs the equivalent of\n                  get_feature_extractor().copy_configuration(fe) (i.e. this function allows\n                  you to configure the parameters of the underlying feature extractor used\n                  by a scan_image_custom object)\n        !*/\n\n        void copy_configuration (\n            const scan_image_custom& item\n        );\n        /*!\n            ensures\n                - Copies all the state information of item into *this, except for state\n                  information populated by load().  More precisely, given two\n                  scan_image_custom objects S1 and S2, the following sequence of\n                  instructions should always result in both of them having the exact same\n                  state:\n                    S2.copy_configuration(S1);\n                    S1.load(img);\n                    S2.load(img);\n        !*/\n\n        long get_num_dimensions (\n        ) const;\n        /*!\n            ensures\n                - returns the number of dimensions in the feature vector for a candidate\n                  object location.  That is, this function returns get_feature_extractor().get_num_dimensions().\n        !*/\n\n        void detect (\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const;\n        /*!\n            requires\n                - w.size() >= get_num_dimensions()\n                - is_loaded_with_image() == true\n            ensures\n                - Scans over all the candidate object locations produced by the feature\n                  extractor during image loading and stores all detections into #dets.\n                - for all valid i:\n                    - #dets[i].second == The candidate object location which produced this\n                      detection.  This rectangle gives the location of the detection.  \n                    - #dets[i].first == The score for this detection.  This value is equal\n                      to dot(w, feature vector for this candidate object location).\n                    - #dets[i].first >= thresh\n                - #dets will be sorted in descending order. \n                  (i.e.  #dets[i].first >= #dets[j].first for all i, and j>i)\n                - Elements of w beyond index get_num_dimensions()-1 are ignored.  I.e. only\n                  the first get_num_dimensions() are used.\n                - Note that no form of non-max suppression is performed.  If a locations\n                  has a score >= thresh then it is reported in #dets.\n        !*/\n\n        void get_feature_vector (\n            const full_object_detection& obj,\n            feature_vector_type& psi\n        ) const;\n        /*!\n            requires\n                - obj.num_parts() == 0 \n                - is_loaded_with_image() == true\n                - psi.size() >= get_num_dimensions()\n                  (i.e. psi must have preallocated its memory before this function is called)\n            ensures\n                - This function allows you to determine the feature vector used for a\n                  candidate object location output from detect().  Note that this vector is\n                  added to psi.  Note also that you must use get_full_object_detection() to\n                  convert a rectangle from detect() into the needed full_object_detection.\n                - The dimensionality of the vector added to psi is get_num_dimensions().  This\n                  means that elements of psi after psi(get_num_dimensions()-1) are not modified.\n                - Since scan_image_custom only searches a limited set of object locations,\n                  not all possible rectangles can be output by detect().  So in the case\n                  where obj.get_rect() could not arise from a call to detect(), this\n                  function will map obj.get_rect() to the nearest possible rectangle and\n                  then add the feature vector for the mapped rectangle into #psi.\n                - get_best_matching_rect(obj.get_rect()) == the rectangle obj.get_rect()\n                  gets mapped to for feature extraction.\n        !*/\n\n        full_object_detection get_full_object_detection (\n            const rectangle& rect,\n            const feature_vector_type& w\n        ) const;\n        /*!\n            ensures\n                - returns full_object_detection(rect)\n                  (This function is here only for compatibility with the scan_image_pyramid\n                  object)\n        !*/\n\n        const rectangle get_best_matching_rect (\n            const rectangle& rect\n        ) const;\n        /*!\n            requires\n                - is_loaded_with_image() == true\n            ensures\n                - Since scan_image_custom only searches a limited set of object locations,\n                  not all possible rectangles can be represented.  Therefore, this function\n                  allows you to supply a rectangle and obtain the nearest possible\n                  candidate object location rectangle.\n        !*/\n\n        unsigned long get_num_detection_templates (\n        ) const { return 1; }\n        /*!\n            ensures\n                - returns 1.  Note that this function is here only for compatibility with\n                  the scan_image_pyramid object.  Notionally, its return value indicates\n                  that a scan_image_custom object is always ready to detect objects once an\n                  image has been loaded.\n        !*/\n\n        unsigned long get_num_movable_components_per_detection_template (\n        ) const { return 0; }\n        /*!\n            ensures\n                - returns 0.  Note that this function is here only for compatibility with\n                  the scan_image_pyramid object.  Its return value means that this object\n                  does not support using movable part models.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const scan_image_custom<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    template <typename T>\n    void deserialize (\n        scan_image_custom<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_IMAGE_CuSTOM_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image_pyramid.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SCAN_IMaGE_PYRAMID_Hh_\n#define DLIB_SCAN_IMaGE_PYRAMID_Hh_\n\n#include \"scan_image_pyramid_abstract.h\"\n#include \"../matrix.h\"\n#include \"../geometry.h\"\n#include \"../image_processing.h\"\n#include \"../array2d.h\"\n#include <vector>\n#include \"full_object_detection.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    class scan_image_pyramid : noncopyable\n    {\n\n    public:\n\n        typedef matrix<double,0,1> feature_vector_type;\n\n        typedef Pyramid_type pyramid_type;\n        typedef Feature_extractor_type feature_extractor_type;\n\n        scan_image_pyramid (\n        );  \n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n\n        inline bool is_loaded_with_image (\n        ) const;\n\n        inline void copy_configuration(\n            const feature_extractor_type& fe\n        );\n\n        inline void copy_configuration (\n            const scan_image_pyramid& item\n        );\n\n        const Feature_extractor_type& get_feature_extractor (\n        ) const { return feats_config; }\n\n        void add_detection_template (\n            const rectangle& object_box,\n            const std::vector<rectangle>& stationary_feature_extraction_regions,\n            const std::vector<rectangle>& movable_feature_extraction_regions\n        );\n\n        void add_detection_template (\n            const rectangle& object_box,\n            const std::vector<rectangle>& stationary_feature_extraction_regions\n        );\n\n        inline unsigned long get_num_detection_templates (\n        ) const;\n\n        inline unsigned long get_num_movable_components_per_detection_template (\n        ) const;\n\n        inline unsigned long get_num_stationary_components_per_detection_template (\n        ) const;\n\n        inline unsigned long get_num_components_per_detection_template (\n        ) const;\n\n        inline long get_num_dimensions (\n        ) const;\n\n        unsigned long get_max_pyramid_levels (\n        ) const;\n\n        void set_max_pyramid_levels (\n            unsigned long max_levels\n        );\n\n        inline unsigned long get_max_detections_per_template (\n        ) const;\n\n        void set_min_pyramid_layer_size (\n            unsigned long width,\n            unsigned long height \n        );\n\n        inline unsigned long get_min_pyramid_layer_width (\n        ) const;\n\n        inline unsigned long get_min_pyramid_layer_height (\n        ) const;\n\n        void set_max_detections_per_template (\n            unsigned long max_dets\n        );\n\n        void detect (\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const;\n\n        void get_feature_vector (\n            const full_object_detection& obj,\n            feature_vector_type& psi\n        ) const;\n\n        full_object_detection get_full_object_detection (\n            const rectangle& rect,\n            const feature_vector_type& w\n        ) const;\n\n        const rectangle get_best_matching_rect (\n            const rectangle& rect\n        ) const;\n\n        template <typename T, typename U>\n        friend void serialize (\n            const scan_image_pyramid<T,U>& item,\n            std::ostream& out\n        );\n\n        template <typename T, typename U>\n        friend void deserialize (\n            scan_image_pyramid<T,U>& item,\n            std::istream& in \n        );\n\n    private:\n        static bool compare_pair_rect (\n            const std::pair<double, rectangle>& a,\n            const std::pair<double, rectangle>& b\n        )\n        {\n            return a.first < b.first;\n        }\n\n        struct detection_template\n        {\n            rectangle object_box; // always centered at (0,0)\n            std::vector<rectangle> rects; // template with respect to (0,0)\n            std::vector<rectangle> movable_rects; \n        };\n\n        friend void serialize(const detection_template& item, std::ostream& out)\n        {\n            int version = 1;\n            serialize(version, out);\n            serialize(item.object_box, out);\n            serialize(item.rects, out);\n            serialize(item.movable_rects, out);\n        }\n        friend void deserialize(detection_template& item, std::istream& in)\n        {\n            int version = 0;\n            deserialize(version, in);\n            if (version != 1)\n                throw serialization_error(\"Unexpected version found while deserializing a dlib::scan_image_pyramid::detection_template object.\");\n\n            deserialize(item.object_box, in);\n            deserialize(item.rects, in);\n            deserialize(item.movable_rects, in);\n        }\n\n        void get_mapped_rect_and_metadata (\n            const unsigned long number_pyramid_levels,\n            rectangle rect,\n            rectangle& mapped_rect,\n            detection_template& best_template,\n            rectangle& object_box,\n            unsigned long& best_level,\n            unsigned long& detection_template_idx\n        ) const;\n\n        double get_match_score (\n            rectangle r1,\n            rectangle r2\n        ) const\n        {\n            // make the rectangles overlap as much as possible before computing the match score.\n            r1 = move_rect(r1, r2.tl_corner());\n            return (r1.intersect(r2).area())/(double)(r1 + r2).area();\n        }\n\n        void test_coordinate_transforms()\n        {\n            for (long x = -10; x <= 10; x += 10)\n            {\n                for (long y = -10; y <= 10; y += 10)\n                {\n                    const rectangle rect = centered_rect(x,y,5,6);\n                    rectangle a;\n\n                    a = feats_config.image_to_feat_space(rect);\n                    if (a.width()  > 10000000 || a.height() > 10000000 )\n                    {\n                        DLIB_CASSERT(false, \"The image_to_feat_space() routine is outputting rectangles of an implausibly \"\n                                     << \"\\nlarge size.  This means there is probably a bug in your feature extractor.\");\n                    }\n                    a = feats_config.feat_to_image_space(rect);\n                    if (a.width()  > 10000000 || a.height() > 10000000 )\n                    {\n                        DLIB_CASSERT(false, \"The feat_to_image_space() routine is outputting rectangles of an implausibly \"\n                                     << \"\\nlarge size.  This means there is probably a bug in your feature extractor.\");\n                    }\n                }\n            }\n            \n        }\n\n        feature_extractor_type feats_config; // just here to hold configuration.  use it to populate the feats elements.\n        array<feature_extractor_type> feats;\n        std::vector<detection_template> det_templates;\n        unsigned long max_dets_per_template;\n        unsigned long max_pyramid_levels;\n        unsigned long min_pyramid_layer_width;\n        unsigned long min_pyramid_layer_height;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    void serialize (\n        const scan_image_pyramid<T,U>& item,\n        std::ostream& out\n    )\n    {\n        int version = 3;\n        serialize(version, out);\n        serialize(item.feats_config, out);\n        serialize(item.feats, out);\n        serialize(item.det_templates, out);\n        serialize(item.max_dets_per_template, out);\n        serialize(item.max_pyramid_levels, out);\n        serialize(item.min_pyramid_layer_width, out);\n        serialize(item.min_pyramid_layer_height, out);\n        serialize(item.get_num_dimensions(), out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    void deserialize (\n        scan_image_pyramid<T,U>& item,\n        std::istream& in \n    )\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 3)\n            throw serialization_error(\"Unsupported version found when deserializing a scan_image_pyramid object.\");\n\n        deserialize(item.feats_config, in);\n        deserialize(item.feats, in);\n        deserialize(item.det_templates, in);\n        deserialize(item.max_dets_per_template, in);\n        deserialize(item.max_pyramid_levels, in);\n        deserialize(item.min_pyramid_layer_width, in);\n        deserialize(item.min_pyramid_layer_height, in);\n\n        // When developing some feature extractor, it's easy to accidentally change its\n        // number of dimensions and then try to deserialize data from an older version of\n        // your extractor into the current code.  This check is here to catch that kind of\n        // user error.\n        long dims;\n        deserialize(dims, in);\n        if (item.get_num_dimensions() != dims)\n            throw serialization_error(\"Number of dimensions in serialized scan_image_pyramid doesn't match the expected number.\");\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                         scan_image_pyramid member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    scan_image_pyramid (\n    ) : \n        max_dets_per_template(10000),\n        max_pyramid_levels(1000),\n        min_pyramid_layer_width(20),\n        min_pyramid_layer_height(20)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    template <\n        typename image_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    load (\n        const image_type& img\n    )\n    {\n        unsigned long levels = 0;\n        rectangle rect = get_rect(img);\n\n        // figure out how many pyramid levels we should be using based on the image size\n        pyramid_type pyr;\n        do\n        {\n            rect = pyr.rect_down(rect);\n            ++levels;\n        } while (rect.width() >= min_pyramid_layer_width && rect.height() >= min_pyramid_layer_height &&\n                 levels < max_pyramid_levels);\n\n        if (feats.max_size() < levels)\n            feats.set_max_size(levels);\n        feats.set_size(levels);\n\n        for (unsigned long i = 0; i < feats.size(); ++i)\n            feats[i].copy_configuration(feats_config);\n\n        // build our feature pyramid\n        feats[0].load(img);\n        if (feats.size() > 1)\n        {\n            image_type temp1, temp2;\n            pyr(img, temp1);\n            feats[1].load(temp1);\n            swap(temp1,temp2);\n\n            for (unsigned long i = 2; i < feats.size(); ++i)\n            {\n                pyr(temp2, temp1);\n                feats[i].load(temp1);\n                swap(temp1,temp2);\n            }\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    unsigned long scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_max_detections_per_template (\n    ) const\n    {\n        return max_dets_per_template;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    set_max_detections_per_template (\n        unsigned long max_dets\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(max_dets > 0 ,\n            \"\\t void scan_image_pyramid::set_max_detections_per_template()\"\n            << \"\\n\\t The max number of possible detections can't be zero. \"\n            << \"\\n\\t max_dets: \" << max_dets\n            << \"\\n\\t this: \" << this\n            );\n\n        max_dets_per_template = max_dets;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    bool scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    is_loaded_with_image (\n    ) const\n    {\n        return feats.size() != 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    copy_configuration(\n        const feature_extractor_type& fe\n    )\n    {\n        test_coordinate_transforms();\n        feats_config.copy_configuration(fe);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    copy_configuration (\n        const scan_image_pyramid& item\n    )\n    {\n        feats_config.copy_configuration(item.feats_config);\n        det_templates = item.det_templates;\n        max_dets_per_template = item.max_dets_per_template;\n        max_pyramid_levels = item.max_pyramid_levels;\n        min_pyramid_layer_width = item.min_pyramid_layer_width;\n        min_pyramid_layer_height = item.min_pyramid_layer_height;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    add_detection_template (\n        const rectangle& object_box,\n        const std::vector<rectangle>& stationary_feature_extraction_regions,\n        const std::vector<rectangle>& movable_feature_extraction_regions\n    )\n    {\n#ifdef ENABLE_ASSERTS\n        // make sure requires clause is not broken\n        DLIB_ASSERT((get_num_detection_templates() == 0 || \n                        (get_num_stationary_components_per_detection_template() == stationary_feature_extraction_regions.size() &&\n                        get_num_movable_components_per_detection_template() == movable_feature_extraction_regions.size())) &&\n                        center(object_box) == point(0,0),\n            \"\\t void scan_image_pyramid::add_detection_template()\"\n            << \"\\n\\t The number of rects in this new detection template doesn't match \"\n            << \"\\n\\t the number in previous detection templates.\"\n            << \"\\n\\t get_num_stationary_components_per_detection_template(): \" << get_num_stationary_components_per_detection_template()\n            << \"\\n\\t stationary_feature_extraction_regions.size():           \" << stationary_feature_extraction_regions.size()\n            << \"\\n\\t get_num_movable_components_per_detection_template():    \" << get_num_movable_components_per_detection_template()\n            << \"\\n\\t movable_feature_extraction_regions.size():              \" << movable_feature_extraction_regions.size()\n            << \"\\n\\t this: \" << this\n            );\n\n        for (unsigned long i = 0; i < movable_feature_extraction_regions.size(); ++i)\n        {\n            DLIB_ASSERT(center(movable_feature_extraction_regions[i]) == point(0,0),\n                        \"Invalid inputs were given to this function.\"\n                        << \"\\n\\t center(movable_feature_extraction_regions[\"<<i<<\"]): \" << center(movable_feature_extraction_regions[i]) \n                        << \"\\n\\t this: \" << this\n            );\n        }\n#endif\n\n        detection_template temp;\n        temp.object_box = object_box;\n        temp.rects = stationary_feature_extraction_regions;\n        temp.movable_rects = movable_feature_extraction_regions;\n        det_templates.push_back(temp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    add_detection_template (\n        const rectangle& object_box,\n        const std::vector<rectangle>& stationary_feature_extraction_regions\n    )\n    {\n        // an empty set of movable feature regions\n        const std::vector<rectangle> movable_feature_extraction_regions;\n        add_detection_template(object_box, stationary_feature_extraction_regions,\n                               movable_feature_extraction_regions);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    unsigned long scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_num_detection_templates (\n    ) const\n    {\n        return det_templates.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    unsigned long scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_num_stationary_components_per_detection_template (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(get_num_detection_templates() > 0 ,\n            \"\\t unsigned long scan_image_pyramid::get_num_stationary_components_per_detection_template()\"\n            << \"\\n\\t You need to give some detection templates before calling this function. \"\n            << \"\\n\\t get_num_detection_templates(): \" << get_num_detection_templates()\n            << \"\\n\\t this: \" << this\n            );\n\n        return det_templates[0].rects.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    unsigned long scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_num_movable_components_per_detection_template (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(get_num_detection_templates() > 0 ,\n            \"\\t unsigned long scan_image_pyramid::get_num_movable_components_per_detection_template()\"\n            << \"\\n\\t You need to give some detection templates before calling this function. \"\n            << \"\\n\\t get_num_detection_templates(): \" << get_num_detection_templates()\n            << \"\\n\\t this: \" << this\n            );\n\n        return det_templates[0].movable_rects.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    unsigned long scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_num_components_per_detection_template (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(get_num_detection_templates() > 0 ,\n            \"\\t unsigned long scan_image_pyramid::get_num_components_per_detection_template()\"\n            << \"\\n\\t You need to give some detection templates before calling this function. \"\n            << \"\\n\\t get_num_detection_templates(): \" << get_num_detection_templates()\n            << \"\\n\\t this: \" << this\n            );\n\n        return get_num_movable_components_per_detection_template() +\n               get_num_stationary_components_per_detection_template();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    long scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_num_dimensions (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(get_num_detection_templates() > 0 ,\n            \"\\t long scan_image_pyramid::get_num_dimensions()\"\n            << \"\\n\\t You need to give some detection templates before calling this function. \"\n            << \"\\n\\t get_num_detection_templates(): \" << get_num_detection_templates()\n            << \"\\n\\t this: \" << this\n            );\n\n        return feats_config.get_num_dimensions()*get_num_components_per_detection_template() + get_num_detection_templates();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    unsigned long scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_max_pyramid_levels (\n    ) const\n    {\n        return max_pyramid_levels;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    set_max_pyramid_levels (\n        unsigned long max_levels\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(max_levels > 0 ,\n            \"\\t void scan_image_pyramid::set_max_pyramid_levels()\"\n            << \"\\n\\t You can't have zero levels. \"\n            << \"\\n\\t max_levels: \" << max_levels \n            << \"\\n\\t this: \" << this\n            );\n\n        max_pyramid_levels = max_levels;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    detect (\n        const feature_vector_type& w,\n        std::vector<std::pair<double, rectangle> >& dets,\n        const double thresh\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(get_num_detection_templates() > 0 &&\n                    is_loaded_with_image() &&\n                    w.size() >= get_num_dimensions(), \n            \"\\t void scan_image_pyramid::detect()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t get_num_detection_templates(): \" << get_num_detection_templates()\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t w.size():               \" << w.size()\n            << \"\\n\\t get_num_dimensions():   \" << get_num_dimensions()\n            << \"\\n\\t this: \" << this\n            );\n\n        dets.clear();\n\n        array<array2d<double> > saliency_images;\n        saliency_images.set_max_size(get_num_components_per_detection_template());\n        saliency_images.set_size(get_num_components_per_detection_template());\n        std::vector<std::pair<unsigned int,rectangle> > stationary_region_rects(get_num_stationary_components_per_detection_template()); \n        std::vector<std::pair<unsigned int,rectangle> > movable_region_rects(get_num_movable_components_per_detection_template()); \n        pyramid_type pyr;\n        std::vector<std::pair<double, point> > point_dets;\n\n        // for all pyramid levels\n        for (unsigned long l = 0; l < feats.size(); ++l)\n        {\n            for (unsigned long i = 0; i < saliency_images.size(); ++i)\n            {\n                saliency_images[i].set_size(feats[l].nr(), feats[l].nc());\n                const unsigned long offset = get_num_detection_templates() + feats_config.get_num_dimensions()*i;\n\n                // build saliency images for pyramid level l \n                for (long r = 0; r < feats[l].nr(); ++r)\n                {\n                    for (long c = 0; c < feats[l].nc(); ++c)\n                    {\n                        const typename feature_extractor_type::descriptor_type& descriptor = feats[l](r,c);\n\n                        double sum = 0;\n                        for (unsigned long k = 0; k < descriptor.size(); ++k)\n                        {\n                            sum += w(descriptor[k].first + offset)*descriptor[k].second;\n                        }\n                        saliency_images[i][r][c] = sum;\n                    }\n                }\n            }\n\n            // now search the saliency images\n            for (unsigned long i = 0; i < det_templates.size(); ++i)\n            {\n                const point offset = -feats[l].image_to_feat_space(point(0,0));\n                for (unsigned long j = 0; j < stationary_region_rects.size(); ++j)\n                {\n                    stationary_region_rects[j] = std::make_pair(j, translate_rect(feats[l].image_to_feat_space(det_templates[i].rects[j]),offset)); \n                }\n                for (unsigned long j = 0; j < movable_region_rects.size(); ++j)\n                {\n                    // Scale the size of the movable rectangle but make sure its center\n                    // stays at point(0,0).\n                    const rectangle temp = feats[l].image_to_feat_space(det_templates[i].movable_rects[j]);\n                    movable_region_rects[j] = std::make_pair(j+stationary_region_rects.size(),\n                                                             centered_rect(point(0,0),temp.width(), temp.height())); \n                }\n\n                // Scale the object box into the feature extraction image, but keeping it\n                // centered at point(0,0).\n                rectangle scaled_object_box = feats[l].image_to_feat_space(det_templates[i].object_box);\n                scaled_object_box = centered_rect(point(0,0),scaled_object_box.width(), scaled_object_box.height());\n\n                // Each detection template gets its own special threshold in addition to\n                // the global detection threshold.  This allows us to model the fact that\n                // some detection templates might be more prone to false alarming or since\n                // their size is different naturally require a larger or smaller threshold\n                // (since they integrate over a larger or smaller region of the image).\n                const double template_specific_thresh = w(i);\n\n                scan_image_movable_parts(point_dets, saliency_images, scaled_object_box,\n                                         stationary_region_rects, movable_region_rects,\n                                         thresh+template_specific_thresh, max_dets_per_template); \n\n                // convert all the point detections into rectangles at the original image scale and coordinate system\n                for (unsigned long j = 0; j < point_dets.size(); ++j)\n                {\n                    const double score = point_dets[j].first-template_specific_thresh;\n                    point p = point_dets[j].second;\n                    p = feats[l].feat_to_image_space(p);\n                    rectangle rect = translate_rect(det_templates[i].object_box, p);\n                    rect = pyr.rect_up(rect, l);\n\n                    dets.push_back(std::make_pair(score, rect));\n                }\n            }\n        }\n\n        std::sort(dets.rbegin(), dets.rend(), compare_pair_rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    const rectangle scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_best_matching_rect (\n        const rectangle& rect\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(get_num_detection_templates() > 0 ,\n            \"\\t const rectangle scan_image_pyramid::get_best_matching_rect()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t get_num_detection_templates(): \" << get_num_detection_templates()\n            << \"\\n\\t this: \" << this\n            );\n\n        rectangle mapped_rect, object_box;\n        detection_template best_template;\n        unsigned long best_level, junk;\n        get_mapped_rect_and_metadata(max_pyramid_levels, rect, mapped_rect, best_template, object_box, best_level, junk);\n        return mapped_rect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_mapped_rect_and_metadata (\n        const unsigned long number_pyramid_levels,\n        rectangle rect,\n        rectangle& mapped_rect,\n        detection_template& best_template,\n        rectangle& object_box,\n        unsigned long& best_level,\n        unsigned long& detection_template_idx\n    ) const\n    {\n        pyramid_type pyr;\n        // Figure out the pyramid level which best matches rect against one of our \n        // detection template object boxes.\n        best_level = 0;\n        double best_match_score = -1;\n\n\n        // Find the best matching detection template for rect\n        for (unsigned long l = 0; l < number_pyramid_levels; ++l)\n        {\n            const rectangle temp = pyr.rect_down(rect,l);\n            if (temp.area() <= 1) \n                break;\n\n            // At this pyramid level, what matches best?\n            for (unsigned long t = 0; t < det_templates.size(); ++t)\n            {\n                const double match_score = get_match_score(det_templates[t].object_box, temp);\n                if (match_score > best_match_score)\n                {\n                    best_match_score = match_score;\n                    best_level = l;\n                    best_template = det_templates[t];\n                    detection_template_idx = t;\n                }\n            }\n        }\n\n\n        // Now we translate best_template into the right spot (it should be centered at the location \n        // determined by rect) and convert it into the feature image coordinate system.\n        rect = pyr.rect_down(rect,best_level);\n        const point offset = -feats_config.image_to_feat_space(point(0,0));\n        const point origin = feats_config.image_to_feat_space(center(rect)) + offset;\n        for (unsigned long k = 0; k < best_template.rects.size(); ++k)\n        {\n            rectangle temp = best_template.rects[k];\n            temp = feats_config.image_to_feat_space(temp);\n            temp = translate_rect(temp, origin);\n            best_template.rects[k] = temp;\n        }\n        for (unsigned long k = 0; k < best_template.movable_rects.size(); ++k)\n        {\n            rectangle temp = best_template.movable_rects[k];\n            temp = feats_config.image_to_feat_space(temp);\n            temp = centered_rect(point(0,0), temp.width(), temp.height());\n            best_template.movable_rects[k] = temp;\n        }\n\n        const rectangle scaled_object_box = feats_config.image_to_feat_space(best_template.object_box);\n        object_box = centered_rect(origin-offset, scaled_object_box.width(), scaled_object_box.height());\n\n        // The input rectangle was mapped to one of the detection templates.  Reverse the process\n        // to figure out what the mapped rectangle is in the original input space.\n        mapped_rect = translate_rect(best_template.object_box, feats_config.feat_to_image_space(origin-offset));\n        mapped_rect = pyr.rect_up(mapped_rect, best_level);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    full_object_detection scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_full_object_detection (\n        const rectangle& rect,\n        const feature_vector_type& w\n    ) const\n    {\n        // fill in movable part positions.  \n\n        rectangle mapped_rect;\n        detection_template best_template;\n        unsigned long best_level, junk;\n        rectangle object_box;\n        get_mapped_rect_and_metadata(feats.size(), rect, mapped_rect, best_template, object_box, best_level, junk);\n\n        Pyramid_type pyr;\n\n        array2d<double> saliency_image, sum_img;\n\n        double total_temp_score = 0;\n        // convert into feature space.\n        object_box = object_box.intersect(get_rect(feats[best_level]));\n\n        std::vector<point> movable_parts;\n        movable_parts.reserve(get_num_movable_components_per_detection_template());\n        for (unsigned long i = 0; i < get_num_movable_components_per_detection_template(); ++i)\n        {\n            // make the saliency_image for the ith movable part.\n\n            const rectangle part_rect = best_template.movable_rects[i];\n            const rectangle area = grow_rect(object_box, \n                                             part_rect.width()/2, \n                                             part_rect.height()/2).intersect(get_rect(feats[best_level]));\n\n            saliency_image.set_size(area.height(), area.width());\n            const unsigned long offset = get_num_detection_templates() + feats_config.get_num_dimensions()*(i+get_num_stationary_components_per_detection_template());\n\n            // build saliency image for pyramid level best_level \n            for (long r = area.top(); r <= area.bottom(); ++r)\n            {\n                for (long c = area.left(); c <= area.right(); ++c)\n                {\n                    const typename feature_extractor_type::descriptor_type& descriptor = feats[best_level](r,c);\n\n                    double sum = 0;\n                    for (unsigned long k = 0; k < descriptor.size(); ++k)\n                    {\n                        sum += w(descriptor[k].first + offset)*descriptor[k].second;\n                    }\n                    saliency_image[r-area.top()][c-area.left()] = sum;\n                }\n            }\n\n            sum_img.set_size(saliency_image.nr(), saliency_image.nc());\n            sum_filter_assign(saliency_image, sum_img, part_rect);\n            // Figure out where the maximizer is in sum_img.  Note that we\n            // only look in the part of sum_img that corresponds to a location inside\n            // object_box.\n            rectangle valid_area = get_rect(sum_img);\n            valid_area.left()   += object_box.left()   - area.left();\n            valid_area.top()    += object_box.top()    - area.top();\n            valid_area.right()  += object_box.right()  - area.right();\n            valid_area.bottom() += object_box.bottom() - area.bottom();\n            double max_val = 0;\n            point max_loc;\n            for (long r = valid_area.top(); r <= valid_area.bottom(); ++r)\n            {\n                for (long c = valid_area.left(); c <= valid_area.right(); ++c)\n                {\n                    if (sum_img[r][c] > max_val)\n                    {\n                        //if (object_box.contains(point(c,r) + area.tl_corner()))\n                        {\n                            max_loc = point(c,r);\n                            max_val = sum_img[r][c];\n                        }\n                    }\n                }\n            }\n\n            if (max_val <= 0)\n            {\n                max_loc = OBJECT_PART_NOT_PRESENT;\n            }\n            else\n            {\n                total_temp_score += max_val;\n                // convert max_loc back into feature image space from our cropped image.\n                max_loc += area.tl_corner();\n\n                // now convert from feature space to image space.\n                max_loc = feats[best_level].feat_to_image_space(max_loc);\n                max_loc = pyr.point_up(max_loc, best_level);\n                max_loc = nearest_point(rect, max_loc);\n            }\n\n            movable_parts.push_back(max_loc);\n        }\n\n        return full_object_detection(rect, movable_parts);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_feature_vector (\n        const full_object_detection& obj,\n        feature_vector_type& psi\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(get_num_detection_templates() > 0 &&\n                    is_loaded_with_image() &&\n                    psi.size() >= get_num_dimensions() &&\n                    obj.num_parts() == get_num_movable_components_per_detection_template(),\n            \"\\t void scan_image_pyramid::get_feature_vector()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t get_num_detection_templates(): \" << get_num_detection_templates()\n            << \"\\n\\t is_loaded_with_image(): \" << is_loaded_with_image()\n            << \"\\n\\t psi.size():             \" << psi.size()\n            << \"\\n\\t get_num_dimensions():   \" << get_num_dimensions()\n            << \"\\n\\t get_num_movable_components_per_detection_template(): \" << get_num_movable_components_per_detection_template()\n            << \"\\n\\t obj.num_parts():                            \" << obj.num_parts()\n            << \"\\n\\t this: \" << this\n            );\n        DLIB_ASSERT(all_parts_in_rect(obj), \n            \"\\t void scan_image_pyramid::get_feature_vector()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t obj.get_rect(): \" << obj.get_rect()\n            << \"\\n\\t this: \" << this\n        );\n\n\n\n        rectangle mapped_rect;\n        detection_template best_template;\n        unsigned long best_level, detection_template_idx;\n        rectangle object_box;\n        get_mapped_rect_and_metadata(feats.size(), obj.get_rect(), mapped_rect, best_template, object_box, best_level, detection_template_idx);\n\n        psi(detection_template_idx) -= 1;\n\n        Pyramid_type pyr;\n\n        // put the movable rects at the places indicated by obj.\n        std::vector<rectangle> rects = best_template.rects;\n        for (unsigned long i = 0; i < obj.num_parts(); ++i)\n        {\n            if (obj.part(i) != OBJECT_PART_NOT_PRESENT)\n            {\n                // map from the original image to scaled feature space.\n                point loc = feats[best_level].image_to_feat_space(pyr.point_down(obj.part(i), best_level));\n                // Make sure the movable part always stays within the object_box.\n                // Otherwise it would be at a place that the detect() function can never\n                // look.  \n                loc = nearest_point(object_box, loc);\n                rects.push_back(translate_rect(best_template.movable_rects[i], loc));\n            }\n            else\n            {\n                // add an empty rectangle since this part wasn't observed.\n                rects.push_back(rectangle());\n            }\n        }\n\n        // pull features out of all the boxes in rects.\n        for (unsigned long j = 0; j < rects.size(); ++j)\n        {\n            const rectangle rect = rects[j].intersect(get_rect(feats[best_level]));\n            const unsigned long template_region_id = j;\n            const unsigned long offset = get_num_detection_templates() + feats_config.get_num_dimensions()*template_region_id;\n            for (long r = rect.top(); r <= rect.bottom(); ++r)\n            {\n                for (long c = rect.left(); c <= rect.right(); ++c)\n                {\n                    const typename feature_extractor_type::descriptor_type& descriptor = feats[best_level](r,c);\n                    for (unsigned long k = 0; k < descriptor.size(); ++k)\n                    {\n                        psi(descriptor[k].first + offset) += descriptor[k].second;\n                    }\n                }\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    set_min_pyramid_layer_size (\n        unsigned long width,\n        unsigned long height \n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(width > 0 && height > 0 ,\n            \"\\t void scan_image_pyramid::set_min_pyramid_layer_size()\"\n            << \"\\n\\t These sizes can't be zero. \"\n            << \"\\n\\t width:  \" << width \n            << \"\\n\\t height: \" << height \n            << \"\\n\\t this:   \" << this\n            );\n\n        min_pyramid_layer_width = width;\n        min_pyramid_layer_height = height;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    unsigned long scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_min_pyramid_layer_width (\n    ) const\n    {\n        return min_pyramid_layer_width;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    unsigned long scan_image_pyramid<Pyramid_type,Feature_extractor_type>::\n    get_min_pyramid_layer_height (\n    ) const\n    {\n        return min_pyramid_layer_height;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_IMaGE_PYRAMID_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image_pyramid_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SCAN_IMaGE_PYRAMID_ABSTRACT_Hh_\n#ifdef DLIB_SCAN_IMaGE_PYRAMID_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n#include \"../geometry.h\"\n#include \"../image_processing.h\"\n#include \"../array2d.h\"\n#include <vector>\n#include \"full_object_detection_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    class scan_image_pyramid : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON Pyramid_type\n                - must be one of the pyramid_down objects defined in \n                  dlib/image_transforms/image_pyramid_abstract.h or an object with\n                  a compatible interface\n\n            REQUIREMENTS ON Feature_extractor_type\n                - must be an object with an interface compatible with the hashed_feature_image \n                  object defined in dlib/image_keypoint/hashed_feature_image_abstract.h or \n                  with the nearest_neighbor_feature_image object defined in \n                  dlib/image_keypoint/nearest_neighbor_feature_image_abstract.h\n\n            INITIAL VALUE\n                - get_num_detection_templates() == 0\n                - is_loaded_with_image() == false\n                - get_max_detections_per_template() == 10000\n                - get_max_pyramid_levels() == 1000\n                - get_min_pyramid_layer_width() == 20\n                - get_min_pyramid_layer_height() == 20\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for running a sliding window classifier over\n                an image pyramid.  This object can also be understood as a general \n                tool for implementing the spatial pyramid models described in the paper:\n                    Beyond Bags of Features: Spatial Pyramid Matching for Recognizing \n                    Natural Scene Categories by Svetlana Lazebnik, Cordelia Schmid, \n                    and Jean Ponce\n                It also includes the ability to represent movable part models.\n\n                \n\n\n                The sliding window classifiers used by this object have three parts: \n                   1. The underlying feature extraction provided by Feature_extractor_type\n                      objects, which associate a vector with each location in an image.\n\n                   2. A detection template.  This is a rectangle which defines the shape of a \n                      sliding window (i.e. the object_box), as well as a set of rectangular feature \n                      extraction regions inside it.  This set of regions defines the spatial \n                      structure of the overall feature extraction within a sliding window.  In \n                      particular, each location of a sliding window has a feature vector \n                      associated with it.  This feature vector is defined as follows:\n                        - Let N denote the number of feature extraction zones.\n                        - Let M denote the dimensionality of the vectors output by Feature_extractor_type\n                          objects.\n                        - Let F(i) == the M dimensional vector which is the sum of all vectors \n                          given by our Feature_extractor_type object inside the i-th feature extraction\n                          zone.\n                        - Then the feature vector for a sliding window is an M*N dimensional vector\n                          [F(1) F(2) F(3) ... F(N)] (i.e. it is a concatenation of the N vectors).\n                          This feature vector can be thought of as a collection of N \"bags of features\",\n                          each bag coming from a spatial location determined by one of the rectangular\n                          feature extraction zones.\n                          \n                   3. A weight vector and a threshold value.  The dot product between the weight\n                      vector and the feature vector for a sliding window location gives the score \n                      of the window.  If this score is greater than the threshold value then the \n                      window location is output as a detection.\n\n                Finally, the sliding window classifiers described above are applied to every level of\n                an image pyramid.  Moreover, some of the feature extraction zones are allowed to move\n                freely within the object box.  This means that when we are sliding the classifier over\n                an image, some feature extraction zones are stationary (i.e. always in the same place\n                relative to the object box) while others are allowed to move anywhere within the object\n                box.  In particular, the movable regions are placed at the locations that maximize the\n                score of the classifier.  Note further that each of the movable feature extraction\n                zones must pass a threshold test for it to be included.  That is, if the score that a\n                movable zone would contribute to the overall score for a sliding window location is not\n                positive then that zone is not included in the feature vector (i.e.  its part of the\n                feature vector is set to zero.  This way the length of the feature vector stays\n                constant).  This movable region construction allows us to represent objects with parts\n                that move around relative to the object box.  For example, a human has hands but they\n                aren't always in the same place relative to a person's bounding box.  \n\n            THREAD SAFETY\n                Concurrent access to an instance of this object is not safe and should be protected\n                by a mutex lock except for the case where you are copying the configuration \n                (via copy_configuration()) of a scan_image_pyramid object to many other threads.  \n                In this case, it is safe to copy the configuration of a shared object so long\n                as no other operations are performed on it.\n        !*/\n    public:\n\n        typedef matrix<double,0,1> feature_vector_type;\n\n        typedef Pyramid_type pyramid_type;\n        typedef Feature_extractor_type feature_extractor_type;\n\n        scan_image_pyramid (\n        );  \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        template <\n            typename image_type\n            >\n        void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type must be a type with the following properties:\n                    - image_type is default constructable.\n                    - image_type is swappable by the global swap() function.\n                    - image_type logically represents some kind of image and therefore its\n                      number of rows and columns can be queried via num_rows(img) and\n                      num_columns(img) respectively.\n                    - image_type objects can be loaded into Feature_extractor_type\n                      objects via Feature_extractor_type::load().\n                    - image_type objects can be used with Pyramid_type.  That is,\n                      if pyr is an object of type Pyramid_type while img1 and img2\n                      are objects of image_type, then pyr(img1,img2) should be\n                      a valid expression which downsamples img1 into img2.\n            ensures\n                - #is_loaded_with_image() == true\n                - This object is ready to run sliding window classifiers over img.  Call\n                  detect() to do this.\n        !*/\n\n        bool is_loaded_with_image (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object has been loaded with an image to process\n                  and false otherwise.\n        !*/\n\n        const feature_extractor_type& get_feature_extractor (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the feature_extractor_type object used \n                  internally for local feature extraction.  \n        !*/\n\n        void copy_configuration(\n            const feature_extractor_type& fe\n        );\n        /*!\n            ensures\n                - This function performs the equivalent of\n                  get_feature_extractor().copy_configuration(fe) (i.e. this function allows\n                  you to configure the parameters of the underlying feature extractor used\n                  by a scan_image_pyramid object)\n        !*/\n\n        void copy_configuration (\n            const scan_image_pyramid& item\n        );\n        /*!\n            ensures\n                - copies all the state information of item into *this, except for state \n                  information populated by load().  More precisely, given two scan_image_pyramid \n                  objects S1 and S2, the following sequence of instructions should always \n                  result in both of them having the exact same state.\n                    S2.copy_configuration(S1);\n                    S1.load(img);\n                    S2.load(img);\n        !*/\n\n        void add_detection_template (\n            const rectangle& object_box,\n            const std::vector<rectangle>& stationary_feature_extraction_regions,\n            const std::vector<rectangle>& movable_feature_extraction_regions\n        );\n        /*!\n            requires\n                - center(object_box) == point(0,0)\n                - for all valid i:\n                    - center(movable_feature_extraction_regions[i]) == point(0,0)\n                - if (get_num_detection_templates() > 0) then\n                    - get_num_stationary_components_per_detection_template() == stationary_feature_extraction_regions.size() \n                    - get_num_movable_components_per_detection_template() == movable_feature_extraction_regions.size() \n                      (i.e. if you already have detection templates in this object, then\n                      any new detection template must declare a consistent number of \n                      feature extraction regions)\n            ensures\n                - Adds another detection template to this object.  In particular, object_box \n                  defines the size and shape of a sliding window while stationary_feature_extraction_regions \n                  and movable_feature_extraction_regions defines the locations for feature extraction as \n                  discussed in the WHAT THIS OBJECT REPRESENTS section above.  Note also that the locations of \n                  the stationary feature extraction regions are relative to the object_box.  \n                - #get_num_detection_templates() == get_num_detection_templates() + 1\n                - The order of rectangles in stationary_feature_extraction_regions and\n                  movable_feature_extraction_regions matters.  Recall that each rectangle\n                  gets its own set of features.  So given two different templates, their\n                  i-th rectangles will both share the same part of the weight vector (i.e. the w\n                  supplied to detect()).  So there should be some reasonable correspondence\n                  between the rectangle ordering in different detection templates.  For,\n                  example, different detection templates should place corresponding feature\n                  extraction regions in roughly the same part of the object_box.\n                - #get_num_stationary_components_per_detection_template() = stationary_feature_extraction_regions.size() \n                - #get_num_movable_components_per_detection_template()    = movable_feature_extraction_regions.size() \n        !*/\n\n        void add_detection_template (\n            const rectangle& object_box,\n            const std::vector<rectangle>& stationary_feature_extraction_regions\n        );\n        /*!\n            ensures\n                - calls add_detection_template(object_box, stationary_feature_extraction_regions, empty_list)\n                  where empty_list is a vector of size 0.  I.e. this function is just a convenience\n                  routine for adding detection templates with no movable regions.\n        !*/\n\n        unsigned long get_num_detection_templates (\n        ) const;\n        /*!\n            ensures\n                - returns the number of detection templates in this object\n        !*/\n\n        unsigned long get_num_stationary_components_per_detection_template (\n        ) const;\n        /*!\n            requires\n                - get_num_detection_templates() > 0\n            ensures\n                - A detection template is a rectangle which defines the shape of a sliding\n                  window (the object_box), as well as a set of rectangles which define\n                  feature extraction zones.  This function returns the number of stationary\n                  feature extraction zones in the detection templates used by this object. \n        !*/\n\n        unsigned long get_num_movable_components_per_detection_template (\n        ) const;\n        /*!\n            requires\n                - get_num_detection_templates() > 0\n            ensures\n                - A detection template is a rectangle which defines the shape of a sliding\n                  window (the object_box), as well as a set of rectangles which define\n                  feature extraction zones.  This function returns the number of movable \n                  feature extraction zones in the detection templates used by this object. \n        !*/\n\n        unsigned long get_num_components_per_detection_template (\n        ) const;\n        /*!\n            requires\n                - get_num_detection_templates() > 0\n            ensures\n                - returns the total number of feature extraction zones in the detection\n                  templates used by this object.  That is, returns the following:\n                    - get_num_movable_components_per_detection_template() + \n                      get_num_stationary_components_per_detection_template()\n        !*/\n\n        long get_num_dimensions (\n        ) const;\n        /*!\n            requires\n                - get_num_detection_templates() > 0\n            ensures\n                - returns the number of dimensions in the feature vector for a sliding window\n                  location.  This value is the dimensionality of the underlying feature vectors \n                  produced by Feature_extractor_type times (get_num_stationary_components_per_detection_template() + \n                  get_num_movable_components_per_detection_template()).\n        !*/\n\n        unsigned long get_max_pyramid_levels (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of image pyramid levels this object will use.\n                  Note that #get_max_pyramid_levels() == 1 indicates that no image pyramid\n                  will be used at all.  That is, only the original image will be processed\n                  and no lower scale versions will be created.  \n        !*/\n\n        void set_max_pyramid_levels (\n            unsigned long max_levels\n        );\n        /*!\n            requires\n                - max_levels > 0\n            ensures\n                - #get_max_pyramid_levels() == max_levels\n        !*/\n\n        void set_min_pyramid_layer_size (\n            unsigned long width,\n            unsigned long height \n        );\n        /*!\n            requires\n                - width > 0\n                - height > 0\n            ensures\n                - #get_min_pyramid_layer_width() == width\n                - #get_min_pyramid_layer_height() == height\n        !*/\n\n        inline unsigned long get_min_pyramid_layer_width (\n        ) const;\n        /*!\n            ensures\n                - returns the smallest allowable width of an image in the image pyramid.\n                  All pyramids will always include the original input image, however, no\n                  pyramid levels will be created which have a width smaller than the\n                  value returned by this function.\n        !*/\n\n        inline unsigned long get_min_pyramid_layer_height (\n        ) const;\n        /*!\n            ensures\n                - returns the smallest allowable height of an image in the image pyramid.\n                  All pyramids will always include the original input image, however, no\n                  pyramid levels will be created which have a height smaller than the\n                  value returned by this function.\n        !*/\n\n        unsigned long get_max_detections_per_template (\n        ) const;\n        /*!\n            ensures\n                - For each image pyramid layer and detection template, this object scans a sliding\n                  window classifier over an image and produces a number of detections.  This\n                  function returns a number which defines a hard upper limit on the number of\n                  detections allowed by a single scan.  This means that the total number of\n                  possible detections produced by detect() is get_max_detections_per_template()*\n                  get_num_detection_templates()*(number of image pyramid layers).  Additionally, \n                  if the maximum number of detections is reached during a scan then this object \n                  will return a random subsample of all detections which are above the detection \n                  threshold.\n        !*/\n\n        void set_max_detections_per_template (\n            unsigned long max_dets\n        );\n        /*!\n            requires\n                - max_dets > 0\n            ensures\n                - #get_max_detections_per_template() == max_dets\n        !*/\n\n        void detect (\n            const feature_vector_type& w,\n            std::vector<std::pair<double, rectangle> >& dets,\n            const double thresh\n        ) const;\n        /*!\n            requires\n                - w.size() >= get_num_dimensions()\n                - is_loaded_with_image() == true\n                - get_num_detection_templates() > 0\n            ensures\n                - Scans all the detection templates over all pyramid layers as discussed in the \n                  WHAT THIS OBJECT REPRESENTS section and stores all detections into #dets.\n                - for all valid i:\n                    - #dets[i].second == The object box which produced this detection.  This rectangle gives\n                      the location of the detection.  Note that the rectangle will have been converted back into\n                      the original image input space.  That is, if this detection was made at a low level in the\n                      image pyramid then the object box will have been automatically mapped up the pyramid layers\n                      to the original image space.  Or in other words, if you plot #dets[i].second on top of the \n                      image given to load() it will show up in the right place.\n                    - #dets[i].first == The score for this detection.  This value is equal to dot(w, feature vector\n                      for this sliding window location).\n                    - #dets[i].first >= thresh\n                - #dets will be sorted in descending order. (i.e.  #dets[i].first >= #dets[j].first for all i, and j>i)\n                - Elements of w beyond index get_num_dimensions()-1 are ignored.  I.e. only the first\n                  get_num_dimensions() are used.\n                - Note that no form of non-max suppression is performed.  If a window has a score >= thresh\n                  then it is reported in #dets (assuming the limit imposed by get_max_detections_per_template() hasn't \n                  been reached).\n        !*/\n\n        const rectangle get_best_matching_rect (\n            const rectangle& rect\n        ) const;\n        /*!\n            requires\n                - get_num_detection_templates() > 0\n            ensures\n                - Since scan_image_pyramid is a sliding window classifier system, not all possible rectangles \n                  can be represented.  Therefore, this function allows you to supply a rectangle and obtain the\n                  nearest possible sliding window rectangle.\n        !*/\n\n        void get_feature_vector (\n            const full_object_detection& obj,\n            feature_vector_type& psi\n        ) const;\n        /*!\n            requires\n                - all_parts_in_rect(obj) == true\n                - obj.num_parts() == get_num_movable_components_per_detection_template()\n                - is_loaded_with_image() == true\n                - get_num_detection_templates() > 0\n                - psi.size() >= get_num_dimensions()\n                  (i.e. psi must have preallocated its memory before this function is called)\n            ensures\n                - This function allows you to determine the feature vector used for a\n                  sliding window location.  Note that this vector is added to psi.  Note\n                  also that you must use get_full_object_detection() to convert a rect from\n                  detect() into the needed full_object_detection.\n                - The dimensionality of the vector added to psi is get_num_dimensions().  This\n                  means that elements of psi after psi(get_num_dimensions()-1) are not modified.\n                - Since scan_image_pyramid is a sliding window classifier system, not all\n                  possible rectangles can be output by detect().  So in the case where\n                  obj.get_rect() could not arise from a call to detect(), this function\n                  will map obj.get_rect() to the nearest possible object box and then add\n                  the feature vector for the mapped rectangle into #psi.\n                - get_best_matching_rect(obj.get_rect()) == the rectangle obj.get_rect()\n                  gets mapped to for feature extraction.\n        !*/\n\n        full_object_detection get_full_object_detection (\n            const rectangle& rect,\n            const feature_vector_type& w\n        ) const;\n        /*!\n            requires\n                - w.size() >= get_num_dimensions()\n                - is_loaded_with_image() == true\n                - get_num_detection_templates() > 0\n            ensures\n                - This function allows you to determine the full_object_detection\n                  corresponding to a sliding window location.  Note that the detect()\n                  routine doesn't return the locations of the movable parts in a detected\n                  object.  Therefore, if you are using any movable parts in your model you\n                  must use get_full_object_detection() to find out where the movable parts\n                  were detected.  To do this, you supply the w and detected rectangle.\n                  Then the corresponding fully populated full_object_detection will be\n                  returned.\n                - returns a full_object_detection, OBJ, such that: \n                    - OBJ.get_rect() == rect\n                    - OBJ.num_parts() == get_num_movable_components_per_detection_template()\n                    - OBJ.part(i) == the location of the i-th movable part inside this detection,\n                      or OBJECT_PART_NOT_PRESENT if the part was not found.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void serialize (\n        const scan_image_pyramid<Pyramid_type,Feature_extractor_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    template <\n        typename Pyramid_type,\n        typename Feature_extractor_type\n        >\n    void deserialize (\n        scan_image_pyramid<Pyramid_type,Feature_extractor_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_IMaGE_PYRAMID_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image_pyramid_tools.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SCAN_IMaGE_PYRAMID_TOOLS_Hh_\n#define DLIB_SCAN_IMaGE_PYRAMID_TOOLS_Hh_\n\n#include \"scan_image_pyramid_tools_abstract.h\"\n#include \"../statistics.h\"\n#include <list>\n#include \"../geometry.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline bool compare_first (\n            const std::pair<unsigned long,rectangle>& a,\n            const std::pair<unsigned long,rectangle>& b\n        )\n        {\n            return a.first < b.first;\n        }\n    }\n\n\n    template <typename image_scanner_type>\n    std::vector<rectangle> determine_object_boxes (\n        const image_scanner_type& scanner,\n        const std::vector<rectangle>& rects,\n        double min_match_score\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 < min_match_score && min_match_score <= 1,\n            \"\\t std::vector<rectangle> determine_object_boxes()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t min_match_score: \" << min_match_score \n            );\n\n        typename image_scanner_type::pyramid_type pyr;\n\n        typedef std::list<std::pair<unsigned long, rectangle> > list_type;\n\n        unsigned long max_area = 0;\n\n        // Copy rects into sorted_rects and sort them in order of increasing area.  But\n        // only include the rectangles that aren't already obtainable by the scanner.\n        list_type sorted_rects;\n        for (unsigned long i = 0; i < rects.size(); ++i)\n        {\n            if (scanner.get_num_detection_templates() > 0)\n            {\n                rectangle temp = scanner.get_best_matching_rect(rects[i]);\n                const double match_score = (rects[i].intersect(temp).area())/(double)(rects[i] + temp).area();\n                // skip this rectangle if it's already matched well enough.\n                if (match_score > min_match_score)\n                    continue;\n            }\n            max_area = std::max(rects[i].area(), max_area);\n            sorted_rects.push_back(std::make_pair(rects[i].area(), rects[i]));\n        }\n        sorted_rects.sort(dlib::impl::compare_first);\n\n        // Make sure this area value is comfortably larger than all the \n        // rectangles' areas.\n        max_area = 3*max_area + 100;\n\n        std::vector<rectangle> object_boxes;\n\n        while (sorted_rects.size() != 0)\n        {\n            rectangle cur = sorted_rects.front().second;\n            sorted_rects.pop_front();\n            object_boxes.push_back(centered_rect(point(0,0), cur.width(), cur.height()));\n\n            // Scale cur up the image pyramid and remove any rectangles which match.\n            // But also stop when cur gets large enough to not match anything.\n            for (unsigned long itr = 0; \n                 itr < scanner.get_max_pyramid_levels() && cur.area() < max_area; \n                 ++itr)\n            {\n                list_type::iterator i = sorted_rects.begin();\n                while (i != sorted_rects.end())\n                {\n                    const rectangle temp = move_rect(i->second, cur.tl_corner());\n                    const double match_score = (cur.intersect(temp).area())/(double)(cur + temp).area();\n                    if (match_score > min_match_score)\n                    {\n                        i = sorted_rects.erase(i);\n                    }\n                    else\n                    {\n                        ++i;\n                    }\n                }\n\n                cur = pyr.rect_up(cur);\n            }\n\n        }\n\n        return object_boxes;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_scanner_type>\n    std::vector<rectangle> determine_object_boxes (\n        const image_scanner_type& scanner,\n        const std::vector<std::vector<rectangle> >& rects,\n        double min_match_score\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 < min_match_score && min_match_score <= 1,\n            \"\\t std::vector<rectangle> determine_object_boxes()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t min_match_score: \" << min_match_score \n            );\n\n        std::vector<rectangle> temp;\n        for (unsigned long i = 0; i < rects.size(); ++i)\n        {\n            for (unsigned long j = 0; j < rects[i].size(); ++j)\n            {\n                temp.push_back(rects[i][j]);\n            }\n        }\n\n        return determine_object_boxes(scanner, temp, min_match_score);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_scanner_type>\n    void setup_grid_detection_templates (\n        image_scanner_type& scanner,\n        const std::vector<std::vector<rectangle> >& rects,\n        unsigned int cells_x,\n        unsigned int cells_y,\n        double min_match_score = 0.75\n    )\n    {\n        const std::vector<rectangle>& object_boxes = determine_object_boxes(scanner, rects, min_match_score);\n        for (unsigned long i = 0; i < object_boxes.size(); ++i)\n        {\n            scanner.add_detection_template(object_boxes[i], create_grid_detection_template(object_boxes[i], cells_x, cells_y));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_scanner_type>\n    void setup_grid_detection_templates_verbose (\n        image_scanner_type& scanner,\n        const std::vector<std::vector<rectangle> >& rects,\n        unsigned int cells_x,\n        unsigned int cells_y,\n        double min_match_score = 0.75\n    )\n    {\n        const std::vector<rectangle>& object_boxes = determine_object_boxes(scanner, rects, min_match_score);\n        std::cout << \"number of detection templates: \"<< object_boxes.size() << std::endl;\n        for (unsigned long i = 0; i < object_boxes.size(); ++i)\n        {\n            std::cout << \"  object box \" << i << \":  width: \" << object_boxes[i].width() \n                      << \"  height: \"<< object_boxes[i].height() << std::endl;\n            scanner.add_detection_template(object_boxes[i], create_grid_detection_template(object_boxes[i], cells_x, cells_y));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_IMaGE_PYRAMID_TOOLS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/scan_image_pyramid_tools_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SCAN_IMaGE_PYRAMID_TOOLS_ABSTRACT_Hh_\n#ifdef DLIB_SCAN_IMaGE_PYRAMID_TOOLS_ABSTRACT_Hh_\n\n#include \"scan_image_pyramid_abstract.h\"\n#include <vector>\n#include \"../geometry.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    std::vector<rectangle> determine_object_boxes (\n        const image_scanner_type& scanner,\n        const std::vector<rectangle>& rects,\n        double min_match_score\n    );\n    /*!\n        requires\n            - 0 < min_match_score <= 1\n            - image_scanner_type == an implementation of the scan_image_pyramid\n              object defined in dlib/image_processing/scan_image_pyramid_tools_abstract.h\n        ensures\n            - returns a set of object boxes which, when used as detection templates with\n              the given scanner, can attain at least min_match_score alignment with every\n              element of rects.  Note that the alignment between two rectangles A and B is\n              defined as:\n                (A.intersect(B).area())/(double)(A+B).area()\n            - Only elements of rects which are not already well matched by the scanner are\n              considered.  That is, if the scanner already has some detection templates in\n              it then the contents of rects will be checked against those detection\n              templates and elements with a match better than min_match_score are ignore.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    std::vector<rectangle> determine_object_boxes (\n        const image_scanner_type& scanner,\n        const std::vector<std::vector<rectangle> >& rects,\n        double min_match_score\n    );\n    /*!\n        requires\n            - 0 < min_match_score <= 1\n            - image_scanner_type == an implementation of the scan_image_pyramid\n              object defined in dlib/image_processing/scan_image_pyramid_tools_abstract.h\n        ensures\n            - copies all rectangles in rects into a std::vector<rectangle> object, call it\n              R.  Then this function returns determine_object_boxes(scanner,R,min_match_score).\n              That is, it just called the version of determine_object_boxes() defined above\n              and returns the results.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    void setup_grid_detection_templates (\n        image_scanner_type& scanner,\n        const std::vector<std::vector<rectangle> >& rects,\n        unsigned int cells_x,\n        unsigned int cells_y,\n        double min_match_score = 0.75\n    );\n    /*!\n        requires\n            - cells_x > 0\n            - cells_y > 0\n            - 0 < min_match_score <= 1\n            - image_scanner_type == an implementation of the scan_image_pyramid\n              object defined in dlib/image_processing/scan_image_pyramid_tools_abstract.h\n        ensures\n            - uses determine_object_boxes(scanner,rects,min_match_score) to obtain a set of\n              object boxes and then adds them to the given scanner object as detection templates.\n              Also uses create_grid_detection_template(object_box, cells_x, cells_y) to create\n              each feature extraction region.  Therefore, the detection templates will extract\n              features from a regular grid inside each object box.\n    !*/\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    void setup_grid_detection_templates_verbose (\n        image_scanner_type& scanner,\n        const std::vector<std::vector<rectangle> >& rects,\n        unsigned int cells_x,\n        unsigned int cells_y,\n        double min_match_score = 0.75\n    );\n    /*!\n        requires\n            - cells_x > 0\n            - cells_y > 0\n            - 0 < min_match_score <= 1\n            - image_scanner_type == an implementation of the scan_image_pyramid\n              object defined in dlib/image_processing/scan_image_pyramid_tools_abstract.h\n        ensures\n            - this function is identical to setup_grid_detection_templates() except\n              that it also outputs the selected detection templates to standard out.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCAN_IMaGE_PYRAMID_TOOLS_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/setup_hashed_features.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SETUP_HAShED_FEATURES_Hh_\n#define DLIB_SETUP_HAShED_FEATURES_Hh_\n\n#include \"setup_hashed_features_abstract.h\"\n#include \"scan_image_pyramid.h\"\n#include \"scan_image_boxes.h\"\n#include \"../lsh.h\"\n#include \"../statistics.h\"\n#include \"../image_keypoint.h\"\n#include \"../geometry.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class image_hash_construction_failure : public error\n    {\n    public:\n        image_hash_construction_failure(\n            const std::string& a\n        ): error(a) {}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner\n        >\n    void use_uniform_feature_weights (\n        image_scanner& scanner\n    )\n    {\n        typename image_scanner::feature_extractor_type fe;\n        fe.copy_configuration(scanner.get_feature_extractor());\n        fe.use_uniform_feature_weights();\n        scanner.copy_configuration(fe);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner\n        >\n    void use_relative_feature_weights (\n        image_scanner& scanner\n    )\n    {\n        typename image_scanner::feature_extractor_type fe;\n        fe.copy_configuration(scanner.get_feature_extractor());\n        fe.use_relative_feature_weights();\n        scanner.copy_configuration(fe);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                 stuff for scan_image_pyramid\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array,\n        typename pyramid,\n        typename feature_extractor,\n        template <typename fe, typename hash> class feature_image\n        >\n    void setup_hashed_features (\n        scan_image_pyramid<pyramid, feature_image<feature_extractor, projection_hash> >& scanner,\n        const image_array& images,\n        const feature_extractor& fe,\n        int bits,\n        unsigned long num_samples = 200000\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 < bits && bits <= 32 &&\n                    num_samples > 1 && \n                    images.size() > 0,\n            \"\\t void setup_hashed_features()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t bits:          \" << bits \n            << \"\\n\\t num_samples:   \" << num_samples \n            << \"\\n\\t images.size(): \" << images.size() \n            );\n\n        pyramid pyr;\n\n        const random_subset_selector<typename feature_extractor::descriptor_type>& samps = \n            randomly_sample_image_features(images, pyr, fe, num_samples);\n\n        if (samps.size() <= 1)\n            throw dlib::image_hash_construction_failure(\"Images too small, not able to gather enough samples to make hash\");\n\n        projection_hash phash = create_random_projection_hash(samps, bits);\n\n        feature_image<feature_extractor, projection_hash> hfe;\n        hfe.copy_configuration(scanner.get_feature_extractor());\n        hfe.set_hash(phash);\n        hfe.copy_configuration(fe);\n        scanner.copy_configuration(hfe);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array,\n        typename pyramid,\n        typename feature_extractor,\n        template <typename fe, typename hash> class feature_image\n        >\n    void setup_hashed_features (\n        scan_image_pyramid<pyramid, feature_image<feature_extractor, projection_hash> >& scanner,\n        const image_array& images,\n        int bits,\n        unsigned long num_samples = 200000\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 < bits && bits <= 32 &&\n                    num_samples > 1 && \n                    images.size() > 0,\n            \"\\t void setup_hashed_features()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t bits:          \" << bits \n            << \"\\n\\t num_samples:   \" << num_samples \n            << \"\\n\\t images.size(): \" << images.size() \n            );\n\n        feature_extractor fe;\n        setup_hashed_features(scanner, images, fe, bits, num_samples);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                 stuff for scan_image_boxes\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array,\n        typename feature_extractor,\n        template <typename fe, typename hash> class feature_image,\n        typename box_generator\n        >\n    void setup_hashed_features (\n        scan_image_boxes<feature_image<feature_extractor, projection_hash>,box_generator >& scanner,\n        const image_array& images,\n        const feature_extractor& fe,\n        int bits,\n        unsigned long num_samples = 200000\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 < bits && bits <= 32 &&\n                    num_samples > 1 && \n                    images.size() > 0,\n            \"\\t void setup_hashed_features()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t bits:          \" << bits \n            << \"\\n\\t num_samples:   \" << num_samples \n            << \"\\n\\t images.size(): \" << images.size() \n            );\n\n        pyramid_disable pyr;\n\n        const random_subset_selector<typename feature_extractor::descriptor_type>& samps = \n            randomly_sample_image_features(images, pyr, fe, num_samples);\n\n        if (samps.size() <= 1)\n            throw dlib::image_hash_construction_failure(\"Images too small, not able to gather enough samples to make hash\");\n\n        projection_hash phash = create_random_projection_hash(samps, bits);\n\n        feature_image<feature_extractor, projection_hash> hfe;\n        hfe.copy_configuration(scanner.get_feature_extractor());\n        hfe.set_hash(phash);\n        hfe.copy_configuration(fe);\n        scanner.copy_configuration(hfe);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array,\n        typename feature_extractor,\n        template <typename fe, typename hash> class feature_image,\n        typename box_generator\n        >\n    void setup_hashed_features (\n        scan_image_boxes<feature_image<feature_extractor, projection_hash>,box_generator>& scanner,\n        const image_array& images,\n        int bits,\n        unsigned long num_samples = 200000\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 < bits && bits <= 32 &&\n                    num_samples > 1 && \n                    images.size() > 0,\n            \"\\t void setup_hashed_features()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t bits:          \" << bits \n            << \"\\n\\t num_samples:   \" << num_samples \n            << \"\\n\\t images.size(): \" << images.size() \n            );\n\n        feature_extractor fe;\n        setup_hashed_features(scanner, images, fe, bits, num_samples);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SETUP_HAShED_FEATURES_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/setup_hashed_features_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SETUP_HAShED_FEATURES_ABSTRACT_Hh_\n#ifdef DLIB_SETUP_HAShED_FEATURES_ABSTRACT_Hh_\n\n#include \"scan_image_pyramid_abstract.h\"\n#include \"scan_image_boxes_abstract.h\"\n#include \"../lsh/projection_hash_abstract.h\"\n#include \"../image_keypoint/hashed_feature_image_abstract.h\"\n#include \"../image_keypoint/binned_vector_feature_image_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class image_hash_construction_failure : public error\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is the exception object used by the routines in this file.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner\n        >\n    void use_uniform_feature_weights (\n        image_scanner& scanner\n    );\n    /*!\n        requires\n            - image_scanner should be either scan_image_pyramid or scan_image_boxes and\n              should use the hashed_feature_image as its local feature extractor.\n        ensures\n            - #scanner.get_feature_extractor().uses_uniform_feature_weights() == true\n              (i.e. Make the scanner's feature extractor use the uniform feature weighting\n              scheme)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner\n        >\n    void use_relative_feature_weights (\n        image_scanner& scanner\n    );\n    /*!\n        requires\n            - image_scanner should be either scan_image_pyramid or scan_image_boxes and\n              should use the hashed_feature_image as its local feature extractor.\n        ensures\n            - #scanner.get_feature_extractor().uses_uniform_feature_weights() == false \n              (i.e. Make the scanner's feature extractor use the relative feature weighting\n              scheme)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array,\n        typename pyramid,\n        typename feature_extractor\n        template <typename fe, typename hash> class feature_image\n        >\n    void setup_hashed_features (\n        scan_image_pyramid<pyramid, feature_image<feature_extractor, projection_hash> >& scanner,\n        const image_array& images,\n        const feature_extractor& fe,\n        int bits,\n        unsigned long num_samples = 200000\n    );\n    /*!\n        requires\n            - 0 < bits <= 32\n            - num_samples > 1\n            - images.size() > 0\n            - it must be valid to pass images[0] into scanner.load().\n              (also, image_array must be an implementation of dlib/array/array_kernel_abstract.h)\n            - feature_image == must be either hashed_feature_image, binned_vector_feature_image,\n              or a type with a compatible interface.\n        ensures\n            - Creates a projection_hash suitable for hashing the feature vectors produced by\n              fe and then configures scanner to use this hash function.\n            - The hash function will map vectors into integers in the range [0, pow(2,bits))\n            - The hash function will be setup so that it hashes a random sample of num_samples\n              vectors from fe such that each bin ends up with roughly the same number of \n              elements in it.\n        throws\n            - image_hash_construction_failure\n              This exception is thrown if there is a problem creating the projection_hash.\n              This should only happen the images are so small they contain less than 2\n              feature vectors.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array,\n        typename pyramid,\n        typename feature_extractor\n        template <typename fe, typename hash> class feature_image\n        >\n    void setup_hashed_features (\n        scan_image_pyramid<pyramid, feature_image<feature_extractor, projection_hash> >& scanner,\n        const image_array& images,\n        int bits,\n        unsigned long num_samples = 200000\n    );\n    /*!\n        requires\n            - 0 < bits <= 32\n            - num_samples > 1\n            - images.size() > 0\n            - it must be valid to pass images[0] into scanner.load().\n              (also, image_array must be an implementation of dlib/array/array_kernel_abstract.h)\n            - feature_image == must be either hashed_feature_image, binned_vector_feature_image,\n              or a type with a compatible interface.\n        ensures\n            - performs: setup_hashed_features(scanner, images, feature_extractor(), bits, num_samples)\n        throws\n            - image_hash_construction_failure\n              This exception is thrown if there is a problem creating the projection_hash.\n              This should only happen the images are so small they contain less than 2\n              feature vectors.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array,\n        typename feature_extractor,\n        template <typename fe, typename hash> class feature_image\n        typename box_generator\n        >\n    void setup_hashed_features (\n        scan_image_boxes<feature_image<feature_extractor, projection_hash>,box_generator>& scanner,\n        const image_array& images,\n        const feature_extractor& fe,\n        int bits,\n        unsigned long num_samples = 200000\n    );\n    /*!\n        requires\n            - 0 < bits <= 32\n            - num_samples > 1\n            - images.size() > 0\n            - it must be valid to pass images[0] into scanner.load().\n              (also, image_array must be an implementation of dlib/array/array_kernel_abstract.h)\n            - feature_image == must be either hashed_feature_image, binned_vector_feature_image,\n              or a type with a compatible interface.\n        ensures\n            - Creates a projection_hash suitable for hashing the feature vectors produced by\n              fe and then configures scanner to use this hash function.\n            - The hash function will map vectors into integers in the range [0, pow(2,bits))\n            - The hash function will be setup so that it hashes a random sample of num_samples\n              vectors from fe such that each bin ends up with roughly the same number of \n              elements in it.\n        throws\n            - image_hash_construction_failure\n              This exception is thrown if there is a problem creating the projection_hash.\n              This should only happen the images are so small they contain less than 2\n              feature vectors.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array,\n        typename feature_extractor,\n        template <typename fe, typename hash> class feature_image\n        typename box_generator\n        >\n    void setup_hashed_features (\n        scan_image_boxes<feature_image<feature_extractor, projection_hash>,box_generator>& scanner,\n        const image_array& images,\n        int bits,\n        unsigned long num_samples = 200000\n    );\n    /*!\n        requires\n            - 0 < bits <= 32\n            - num_samples > 1\n            - images.size() > 0\n            - it must be valid to pass images[0] into scanner.load().\n              (also, image_array must be an implementation of dlib/array/array_kernel_abstract.h)\n            - feature_image == must be either hashed_feature_image, binned_vector_feature_image,\n              or a type with a compatible interface.\n        ensures\n            - performs: setup_hashed_features(scanner, images, feature_extractor(), bits, num_samples)\n        throws\n            - image_hash_construction_failure\n              This exception is thrown if there is a problem creating the projection_hash.\n              This should only happen the images are so small they contain less than 2\n              feature vectors.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SETUP_HAShED_FEATURES_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/shape_predictor.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SHAPE_PREDICToR_H_\n#define DLIB_SHAPE_PREDICToR_H_\n\n#include \"shape_predictor_abstract.h\"\n#include \"full_object_detection.h\"\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../geometry.h\"\n#include \"../pixel.h\"\n#include \"../console_progress_indicator.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        struct split_feature\n        {\n            unsigned long idx1;\n            unsigned long idx2;\n            float thresh;\n\n            friend inline void serialize (const split_feature& item, std::ostream& out)\n            {\n                dlib::serialize(item.idx1, out);\n                dlib::serialize(item.idx2, out);\n                dlib::serialize(item.thresh, out);\n            }\n            friend inline void deserialize (split_feature& item, std::istream& in)\n            {\n                dlib::deserialize(item.idx1, in);\n                dlib::deserialize(item.idx2, in);\n                dlib::deserialize(item.thresh, in);\n            }\n        };\n\n\n        // a tree is just a std::vector<impl::split_feature>.  We use this function to navigate the\n        // tree nodes\n        inline unsigned long left_child (unsigned long idx) { return 2*idx + 1; }\n        /*!\n            ensures\n                - returns the index of the left child of the binary tree node idx\n        !*/\n        inline unsigned long right_child (unsigned long idx) { return 2*idx + 2; }\n        /*!\n            ensures\n                - returns the index of the left child of the binary tree node idx\n        !*/\n\n        struct regression_tree\n        {\n            std::vector<split_feature> splits;\n            std::vector<matrix<float,0,1> > leaf_values;\n\n            inline const matrix<float,0,1>& operator()(\n                const std::vector<float>& feature_pixel_values\n            ) const\n            /*!\n                requires\n                    - All the index values in splits are less than feature_pixel_values.size()\n                    - leaf_values.size() is a power of 2.\n                      (i.e. we require a tree with all the levels fully filled out.\n                    - leaf_values.size() == splits.size()+1\n                      (i.e. there needs to be the right number of leaves given the number of splits in the tree)\n                ensures\n                    - runs through the tree and returns the vector at the leaf we end up in.\n            !*/\n            {\n                unsigned long i = 0;\n                while (i < splits.size())\n                {\n                    if (feature_pixel_values[splits[i].idx1] - feature_pixel_values[splits[i].idx2] > splits[i].thresh)\n                        i = left_child(i);\n                    else\n                        i = right_child(i);\n                }\n                return leaf_values[i - splits.size()];\n            }\n\n            friend void serialize (const regression_tree& item, std::ostream& out)\n            {\n                dlib::serialize(item.splits, out);\n                dlib::serialize(item.leaf_values, out);\n            }\n            friend void deserialize (regression_tree& item, std::istream& in)\n            {\n                dlib::deserialize(item.splits, in);\n                dlib::deserialize(item.leaf_values, in);\n            }\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        inline vector<float,2> location (\n            const matrix<float,0,1>& shape,\n            unsigned long idx\n        )\n        /*!\n            requires\n                - idx < shape.size()/2\n                - shape.size()%2 == 0\n            ensures\n                - returns the idx-th point from the shape vector.\n        !*/\n        {\n            return vector<float,2>(shape(idx*2), shape(idx*2+1));\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline unsigned long nearest_shape_point (\n            const matrix<float,0,1>& shape,\n            const dlib::vector<float,2>& pt\n        )\n        {\n            // find the nearest part of the shape to this pixel\n            float best_dist = std::numeric_limits<float>::infinity();\n            const unsigned long num_shape_parts = shape.size()/2;\n            unsigned long best_idx = 0;\n            for (unsigned long j = 0; j < num_shape_parts; ++j)\n            {\n                const float dist = length_squared(location(shape,j)-pt);\n                if (dist < best_dist)\n                {\n                    best_dist = dist;\n                    best_idx = j;\n                }\n            }\n            return best_idx;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline void create_shape_relative_encoding (\n            const matrix<float,0,1>& shape,\n            const std::vector<dlib::vector<float,2> >& pixel_coordinates,\n            std::vector<unsigned long>& anchor_idx, \n            std::vector<dlib::vector<float,2> >& deltas\n        )\n        /*!\n            requires\n                - shape.size()%2 == 0 \n                - shape.size() > 0\n            ensures\n                - #anchor_idx.size() == pixel_coordinates.size()\n                - #deltas.size()     == pixel_coordinates.size()\n                - for all valid i:\n                    - pixel_coordinates[i] == location(shape,#anchor_idx[i]) + #deltas[i]\n        !*/\n        {\n            anchor_idx.resize(pixel_coordinates.size());\n            deltas.resize(pixel_coordinates.size());\n\n\n            for (unsigned long i = 0; i < pixel_coordinates.size(); ++i)\n            {\n                anchor_idx[i] = nearest_shape_point(shape, pixel_coordinates[i]);\n                deltas[i] = pixel_coordinates[i] - location(shape,anchor_idx[i]);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline point_transform_affine find_tform_between_shapes (\n            const matrix<float,0,1>& from_shape,\n            const matrix<float,0,1>& to_shape\n        )\n        {\n            DLIB_ASSERT(from_shape.size() == to_shape.size() && (from_shape.size()%2) == 0 && from_shape.size() > 0,\"\");\n            std::vector<vector<float,2> > from_points, to_points;\n            const unsigned long num = from_shape.size()/2;\n            from_points.reserve(num);\n            to_points.reserve(num);\n            if (num == 1)\n            {\n                // Just use an identity transform if there is only one landmark.\n                return point_transform_affine();\n            }\n\n            for (unsigned long i = 0; i < num; ++i)\n            {\n                from_points.push_back(location(from_shape,i));\n                to_points.push_back(location(to_shape,i));\n            }\n            return find_similarity_transform(from_points, to_points);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline point_transform_affine normalizing_tform (\n            const rectangle& rect\n        )\n        /*!\n            ensures\n                - returns a transform that maps rect.tl_corner() to (0,0) and rect.br_corner()\n                  to (1,1).\n        !*/\n        {\n            std::vector<vector<float,2> > from_points, to_points;\n            from_points.push_back(rect.tl_corner()); to_points.push_back(point(0,0));\n            from_points.push_back(rect.tr_corner()); to_points.push_back(point(1,0));\n            from_points.push_back(rect.br_corner()); to_points.push_back(point(1,1));\n            return find_similarity_transform(from_points, to_points);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline point_transform_affine unnormalizing_tform (\n            const rectangle& rect\n        )\n        /*!\n            ensures\n                - returns a transform that maps (0,0) to rect.tl_corner() and (1,1) to\n                  rect.br_corner().\n        !*/\n        {\n            std::vector<vector<float,2> > from_points, to_points;\n            to_points.push_back(rect.tl_corner()); from_points.push_back(point(0,0));\n            to_points.push_back(rect.tr_corner()); from_points.push_back(point(1,0));\n            to_points.push_back(rect.br_corner()); from_points.push_back(point(1,1));\n            return find_similarity_transform(from_points, to_points);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename image_type>\n        void extract_feature_pixel_values (\n            const image_type& img_,\n            const rectangle& rect,\n            const matrix<float,0,1>& current_shape,\n            const matrix<float,0,1>& reference_shape,\n            const std::vector<unsigned long>& reference_pixel_anchor_idx,\n            const std::vector<dlib::vector<float,2> >& reference_pixel_deltas,\n            std::vector<float>& feature_pixel_values\n        )\n        /*!\n            requires\n                - image_type == an image object that implements the interface defined in\n                  dlib/image_processing/generic_image.h \n                - reference_pixel_anchor_idx.size() == reference_pixel_deltas.size()\n                - current_shape.size() == reference_shape.size()\n                - reference_shape.size()%2 == 0\n                - max(mat(reference_pixel_anchor_idx)) < reference_shape.size()/2\n            ensures\n                - #feature_pixel_values.size() == reference_pixel_deltas.size()\n                - for all valid i:\n                    - #feature_pixel_values[i] == the value of the pixel in img_ that\n                      corresponds to the pixel identified by reference_pixel_anchor_idx[i]\n                      and reference_pixel_deltas[i] when the pixel is located relative to\n                      current_shape rather than reference_shape.\n        !*/\n        {\n            const matrix<float,2,2> tform = matrix_cast<float>(find_tform_between_shapes(reference_shape, current_shape).get_m());\n            const point_transform_affine tform_to_img = unnormalizing_tform(rect);\n\n            const rectangle area = get_rect(img_);\n\n            const_image_view<image_type> img(img_);\n            feature_pixel_values.resize(reference_pixel_deltas.size());\n            for (unsigned long i = 0; i < feature_pixel_values.size(); ++i)\n            {\n                // Compute the point in the current shape corresponding to the i-th pixel and\n                // then map it from the normalized shape space into pixel space.\n                point p = tform_to_img(tform*reference_pixel_deltas[i] + location(current_shape, reference_pixel_anchor_idx[i]));\n                if (area.contains(p))\n                    feature_pixel_values[i] = get_pixel_intensity(img[p.y()][p.x()]);\n                else\n                    feature_pixel_values[i] = 0;\n            }\n        }\n\n    } // end namespace impl\n\n// ----------------------------------------------------------------------------------------\n\n    class shape_predictor\n    {\n    public:\n\n\n        shape_predictor (\n        ) \n        {}\n\n        shape_predictor (\n            const matrix<float,0,1>& initial_shape_,\n            const std::vector<std::vector<impl::regression_tree> >& forests_,\n            const std::vector<std::vector<dlib::vector<float,2> > >& pixel_coordinates\n        ) : initial_shape(initial_shape_), forests(forests_)\n        /*!\n            requires\n                - initial_shape.size()%2 == 0\n                - forests.size() == pixel_coordinates.size() == the number of cascades\n                - for all valid i:\n                    - all the index values in forests[i] are less than pixel_coordinates[i].size()\n                - for all valid i and j: \n                    - forests[i][j].leaf_values.size() is a power of 2.\n                      (i.e. we require a tree with all the levels fully filled out.\n                    - forests[i][j].leaf_values.size() == forests[i][j].splits.size()+1\n                      (i.e. there need to be the right number of leaves given the number of splits in the tree)\n        !*/\n        {\n            anchor_idx.resize(pixel_coordinates.size());\n            deltas.resize(pixel_coordinates.size());\n            // Each cascade uses a different set of pixels for its features.  We compute\n            // their representations relative to the initial shape now and save it.\n            for (unsigned long i = 0; i < pixel_coordinates.size(); ++i)\n                impl::create_shape_relative_encoding(initial_shape, pixel_coordinates[i], anchor_idx[i], deltas[i]);\n        }\n\n        unsigned long num_parts (\n        ) const\n        /*!\n            ensures\n                - returns the number of points in the shape\n        !*/\n        {\n            return initial_shape.size()/2;\n        }\n\n        template <typename image_type>\n        full_object_detection operator()(\n            const image_type& img,\n            const rectangle& rect\n        ) const\n        /*!\n            ensures\n                - runs the tree regressor on the detection rect inside img and returns a \n                  full_object_detection DET such that:\n                    - DET.get_rect() == rect\n                    - DET.num_parts() == num_parts()\n        !*/\n        {\n            using namespace impl;\n            matrix<float,0,1> current_shape = initial_shape;\n            std::vector<float> feature_pixel_values;\n            for (unsigned long iter = 0; iter < forests.size(); ++iter)\n            {\n                extract_feature_pixel_values(img, rect, current_shape, initial_shape, anchor_idx[iter], deltas[iter], feature_pixel_values);\n                // evaluate all the trees at this level of the cascade.\n                for (unsigned long i = 0; i < forests[iter].size(); ++i)\n                    current_shape += forests[iter][i](feature_pixel_values);\n            }\n\n            // convert the current_shape into a full_object_detection\n            const point_transform_affine tform_to_img = unnormalizing_tform(rect);\n            std::vector<point> parts(current_shape.size()/2);\n            for (unsigned long i = 0; i < parts.size(); ++i)\n                parts[i] = tform_to_img(location(current_shape, i));\n            return full_object_detection(rect, parts);\n        }\n\n        friend void serialize (const shape_predictor& item, std::ostream& out)\n        {\n            int version = 1;\n            dlib::serialize(version, out);\n            dlib::serialize(item.initial_shape, out);\n            dlib::serialize(item.forests, out);\n            dlib::serialize(item.anchor_idx, out);\n            dlib::serialize(item.deltas, out);\n        }\n        friend void deserialize (shape_predictor& item, std::istream& in)\n        {\n            int version = 0;\n            dlib::deserialize(version, in);\n            if (version != 1)\n                throw serialization_error(\"Unexpected version found while deserializing dlib::shape_predictor.\");\n            dlib::deserialize(item.initial_shape, in);\n            dlib::deserialize(item.forests, in);\n            dlib::deserialize(item.anchor_idx, in);\n            dlib::deserialize(item.deltas, in);\n        }\n\n    private:\n        matrix<float,0,1> initial_shape;\n        std::vector<std::vector<impl::regression_tree> > forests;\n        std::vector<std::vector<unsigned long> > anchor_idx; \n        std::vector<std::vector<dlib::vector<float,2> > > deltas;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class shape_predictor_trainer\n    {\n        /*!\n            This thing really only works with unsigned char or rgb_pixel images (since we assume the threshold \n            should be in the range [-128,128]).\n        !*/\n    public:\n\n        shape_predictor_trainer (\n        )\n        {\n            _cascade_depth = 10;\n            _tree_depth = 4;\n            _num_trees_per_cascade_level = 500;\n            _nu = 0.1;\n            _oversampling_amount = 20;\n            _feature_pool_size = 400;\n            _lambda = 0.1;\n            _num_test_splits = 20;\n            _feature_pool_region_padding = 0;\n            _verbose = false;\n        }\n\n        unsigned long get_cascade_depth (\n        ) const { return _cascade_depth; }\n\n        void set_cascade_depth (\n            unsigned long depth\n        )\n        {\n            DLIB_CASSERT(depth > 0, \n                \"\\t void shape_predictor_trainer::set_cascade_depth()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t depth:  \" << depth\n            );\n\n            _cascade_depth = depth;\n        }\n\n        unsigned long get_tree_depth (\n        ) const { return _tree_depth; }\n\n        void set_tree_depth (\n            unsigned long depth\n        )\n        {\n            DLIB_CASSERT(depth > 0, \n                \"\\t void shape_predictor_trainer::set_tree_depth()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t depth:  \" << depth\n            );\n\n            _tree_depth = depth;\n        }\n\n        unsigned long get_num_trees_per_cascade_level (\n        ) const { return _num_trees_per_cascade_level; }\n\n        void set_num_trees_per_cascade_level (\n            unsigned long num\n        )\n        {\n            DLIB_CASSERT( num > 0,\n                \"\\t void shape_predictor_trainer::set_num_trees_per_cascade_level()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t num:  \" << num\n            );\n            _num_trees_per_cascade_level = num;\n        }\n\n        double get_nu (\n        ) const { return _nu; } \n        void set_nu (\n            double nu\n        )\n        {\n            DLIB_CASSERT(nu > 0,\n                \"\\t void shape_predictor_trainer::set_nu()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t nu:  \" << nu \n            );\n\n            _nu = nu;\n        }\n\n        std::string get_random_seed (\n        ) const { return rnd.get_seed(); }\n        void set_random_seed (\n            const std::string& seed\n        ) { rnd.set_seed(seed); }\n\n        unsigned long get_oversampling_amount (\n        ) const { return _oversampling_amount; }\n        void set_oversampling_amount (\n            unsigned long amount\n        )\n        {\n            DLIB_CASSERT(amount > 0, \n                \"\\t void shape_predictor_trainer::set_oversampling_amount()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t amount: \" << amount \n            );\n\n            _oversampling_amount = amount;\n        }\n\n        unsigned long get_feature_pool_size (\n        ) const { return _feature_pool_size; }\n        void set_feature_pool_size (\n            unsigned long size\n        ) \n        {\n            DLIB_CASSERT(size > 1, \n                \"\\t void shape_predictor_trainer::set_feature_pool_size()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t size: \" << size \n            );\n\n            _feature_pool_size = size;\n        }\n\n        double get_lambda (\n        ) const { return _lambda; }\n        void set_lambda (\n            double lambda\n        )\n        {\n            DLIB_CASSERT(lambda > 0,\n                \"\\t void shape_predictor_trainer::set_lambda()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t lambda: \" << lambda \n            );\n\n            _lambda = lambda;\n        }\n\n        unsigned long get_num_test_splits (\n        ) const { return _num_test_splits; }\n        void set_num_test_splits (\n            unsigned long num\n        )\n        {\n            DLIB_CASSERT(num > 0, \n                \"\\t void shape_predictor_trainer::set_num_test_splits()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t num: \" << num \n            );\n\n            _num_test_splits = num;\n        }\n\n\n        double get_feature_pool_region_padding (\n        ) const { return _feature_pool_region_padding; }\n        void set_feature_pool_region_padding (\n            double padding \n        )\n        {\n            _feature_pool_region_padding = padding;\n        }\n\n        void be_verbose (\n        )\n        {\n            _verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            _verbose = false;\n        }\n\n        template <typename image_array>\n        shape_predictor train (\n            const image_array& images,\n            const std::vector<std::vector<full_object_detection> >& objects\n        ) const\n        {\n            using namespace impl;\n            DLIB_CASSERT(images.size() == objects.size() && images.size() > 0,\n                \"\\t shape_predictor shape_predictor_trainer::train()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t images.size():  \" << images.size() \n                << \"\\n\\t objects.size(): \" << objects.size() \n            );\n            // make sure the objects agree on the number of parts and that there is at\n            // least one full_object_detection. \n            unsigned long num_parts = 0;\n            for (unsigned long i = 0; i < objects.size(); ++i)\n            {\n                for (unsigned long j = 0; j < objects[i].size(); ++j)\n                {\n                    if (num_parts == 0)\n                    {\n                        num_parts = objects[i][j].num_parts();\n                    }\n                    else\n                    {\n                        DLIB_CASSERT(objects[i][j].num_parts() == num_parts,\n                            \"\\t shape_predictor shape_predictor_trainer::train()\"\n                            << \"\\n\\t All the objects must agree on the number of parts. \"\n                            << \"\\n\\t objects[\"<<i<<\"][\"<<j<<\"].num_parts(): \" << objects[i][j].num_parts()\n                            << \"\\n\\t num_parts:  \" << num_parts \n                        );\n                    }\n                }\n            }\n            DLIB_CASSERT(num_parts != 0,\n                \"\\t shape_predictor shape_predictor_trainer::train()\"\n                << \"\\n\\t You must give at least one full_object_detection if you want to train a shape model and it must have parts.\"\n            );\n\n\n\n\n\n            rnd.set_seed(get_random_seed());\n\n            std::vector<training_sample> samples;\n            const matrix<float,0,1> initial_shape = populate_training_sample_shapes(objects, samples);\n            const std::vector<std::vector<dlib::vector<float,2> > > pixel_coordinates = randomly_sample_pixel_coordinates(initial_shape);\n\n            unsigned long trees_fit_so_far = 0;\n            console_progress_indicator pbar(get_cascade_depth()*get_num_trees_per_cascade_level());\n            if (_verbose)\n                std::cout << \"Fitting trees...\" << std::endl;\n\n            std::vector<std::vector<impl::regression_tree> > forests(get_cascade_depth());\n            // Now start doing the actual training by filling in the forests\n            for (unsigned long cascade = 0; cascade < get_cascade_depth(); ++cascade)\n            {\n                // Each cascade uses a different set of pixels for its features.  We compute\n                // their representations relative to the initial shape first.\n                std::vector<unsigned long> anchor_idx; \n                std::vector<dlib::vector<float,2> > deltas;\n                create_shape_relative_encoding(initial_shape, pixel_coordinates[cascade], anchor_idx, deltas);\n\n                // First compute the feature_pixel_values for each training sample at this\n                // level of the cascade.\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    extract_feature_pixel_values(images[samples[i].image_idx], samples[i].rect,\n                        samples[i].current_shape, initial_shape, anchor_idx,\n                        deltas, samples[i].feature_pixel_values);\n                }\n\n                // Now start building the trees at this cascade level.\n                for (unsigned long i = 0; i < get_num_trees_per_cascade_level(); ++i)\n                {\n                    forests[cascade].push_back(make_regression_tree(samples, pixel_coordinates[cascade]));\n\n                    if (_verbose)\n                    {\n                        ++trees_fit_so_far;\n                        pbar.print_status(trees_fit_so_far);\n                    }\n                }\n            }\n\n            if (_verbose)\n                std::cout << \"Training complete                          \" << std::endl;\n\n            return shape_predictor(initial_shape, forests, pixel_coordinates);\n        }\n\n    private:\n\n        static matrix<float,0,1> object_to_shape (\n            const full_object_detection& obj\n        )\n        {\n            matrix<float,0,1> shape(obj.num_parts()*2);\n            const point_transform_affine tform_from_img = impl::normalizing_tform(obj.get_rect());\n            for (unsigned long i = 0; i < obj.num_parts(); ++i)\n            {\n                vector<float,2> p = tform_from_img(obj.part(i));\n                shape(2*i)   = p.x();\n                shape(2*i+1) = p.y();\n            }\n            return shape;\n        }\n\n        struct training_sample \n        {\n            /*!\n\n            CONVENTION\n                - feature_pixel_values.size() == get_feature_pool_size()\n                - feature_pixel_values[j] == the value of the j-th feature pool\n                  pixel when you look it up relative to the shape in current_shape.\n\n                - target_shape == The truth shape.  Stays constant during the whole\n                  training process.\n                - rect == the position of the object in the image_idx-th image.  All shape\n                  coordinates are coded relative to this rectangle.\n            !*/\n\n            unsigned long image_idx;\n            rectangle rect;\n            matrix<float,0,1> target_shape; \n\n            matrix<float,0,1> current_shape;  \n            std::vector<float> feature_pixel_values;\n\n            void swap(training_sample& item)\n            {\n                std::swap(image_idx, item.image_idx);\n                std::swap(rect, item.rect);\n                target_shape.swap(item.target_shape);\n                current_shape.swap(item.current_shape);\n                feature_pixel_values.swap(item.feature_pixel_values);\n            }\n        };\n\n        impl::regression_tree make_regression_tree (\n            std::vector<training_sample>& samples,\n            const std::vector<dlib::vector<float,2> >& pixel_coordinates\n        ) const\n        {\n            using namespace impl;\n            std::deque<std::pair<unsigned long, unsigned long> > parts;\n            parts.push_back(std::make_pair(0, samples.size()));\n\n            impl::regression_tree tree;\n\n            // walk the tree in breadth first order\n            const unsigned long num_split_nodes = static_cast<unsigned long>(std::pow(2.0, (double)get_tree_depth())-1);\n            std::vector<matrix<float,0,1> > sums(num_split_nodes*2+1);\n            for (unsigned long i = 0; i < samples.size(); ++i)\n                sums[0] += samples[i].target_shape - samples[i].current_shape;\n\n            for (unsigned long i = 0; i < num_split_nodes; ++i) \n            {\n                std::pair<unsigned long,unsigned long> range = parts.front();\n                parts.pop_front();\n\n                const impl::split_feature split = generate_split(samples, range.first,\n                    range.second, pixel_coordinates, sums[i], sums[left_child(i)],\n                    sums[right_child(i)]);\n                tree.splits.push_back(split);\n                const unsigned long mid = partition_samples(split, samples, range.first, range.second); \n\n                parts.push_back(std::make_pair(range.first, mid));\n                parts.push_back(std::make_pair(mid, range.second));\n            }\n\n            // Now all the parts contain the ranges for the leaves so we can use them to\n            // compute the average leaf values.\n            tree.leaf_values.resize(parts.size());\n            for (unsigned long i = 0; i < parts.size(); ++i)\n            {\n                if (parts[i].second != parts[i].first)\n                    tree.leaf_values[i] = sums[num_split_nodes+i]*get_nu()/(parts[i].second - parts[i].first);\n                else\n                    tree.leaf_values[i] = zeros_matrix(samples[0].target_shape);\n\n                // now adjust the current shape based on these predictions\n                for (unsigned long j = parts[i].first; j < parts[i].second; ++j)\n                    samples[j].current_shape += tree.leaf_values[i];\n            }\n\n            return tree;\n        }\n\n        impl::split_feature randomly_generate_split_feature (\n            const std::vector<dlib::vector<float,2> >& pixel_coordinates\n        ) const\n        {\n            const double lambda = get_lambda(); \n            impl::split_feature feat;\n            double accept_prob;\n            do \n            {\n                feat.idx1   = rnd.get_random_32bit_number()%get_feature_pool_size();\n                feat.idx2   = rnd.get_random_32bit_number()%get_feature_pool_size();\n                const double dist = length(pixel_coordinates[feat.idx1]-pixel_coordinates[feat.idx2]);\n                accept_prob = std::exp(-dist/lambda);\n            }\n            while(feat.idx1 == feat.idx2 || !(accept_prob > rnd.get_random_double()));\n\n            feat.thresh = (rnd.get_random_double()*256 - 128)/2.0;\n\n            return feat;\n        }\n\n        impl::split_feature generate_split (\n            const std::vector<training_sample>& samples,\n            unsigned long begin,\n            unsigned long end,\n            const std::vector<dlib::vector<float,2> >& pixel_coordinates,\n            const matrix<float,0,1>& sum,\n            matrix<float,0,1>& left_sum,\n            matrix<float,0,1>& right_sum \n        ) const\n        {\n            // generate a bunch of random splits and test them and return the best one.\n\n            const unsigned long num_test_splits = get_num_test_splits();  \n\n            // sample the random features we test in this function\n            std::vector<impl::split_feature> feats;\n            feats.reserve(num_test_splits);\n            for (unsigned long i = 0; i < num_test_splits; ++i)\n                feats.push_back(randomly_generate_split_feature(pixel_coordinates));\n\n            std::vector<matrix<float,0,1> > left_sums(num_test_splits);\n            std::vector<unsigned long> left_cnt(num_test_splits);\n\n            // now compute the sums of vectors that go left for each feature\n            matrix<float,0,1> temp;\n            for (unsigned long j = begin; j < end; ++j)\n            {\n                temp = samples[j].target_shape-samples[j].current_shape;\n                for (unsigned long i = 0; i < num_test_splits; ++i)\n                {\n                    if (samples[j].feature_pixel_values[feats[i].idx1] - samples[j].feature_pixel_values[feats[i].idx2] > feats[i].thresh)\n                    {\n                        left_sums[i] += temp;\n                        ++left_cnt[i];\n                    }\n                }\n            }\n\n            // now figure out which feature is the best\n            double best_score = -1;\n            unsigned long best_feat = 0;\n            for (unsigned long i = 0; i < num_test_splits; ++i)\n            {\n                // check how well the feature splits the space.\n                double score = 0;\n                unsigned long right_cnt = end-begin-left_cnt[i];\n                if (left_cnt[i] != 0 && right_cnt != 0)\n                {\n                    temp = sum - left_sums[i];\n                    score = dot(left_sums[i],left_sums[i])/left_cnt[i] + dot(temp,temp)/right_cnt;\n                    if (score > best_score)\n                    {\n                        best_score = score;\n                        best_feat = i;\n                    }\n                }\n            }\n\n            left_sums[best_feat].swap(left_sum);\n            if (left_sum.size() != 0)\n            {\n                right_sum = sum - left_sum;\n            }\n            else\n            {\n                right_sum = sum;\n                left_sum = zeros_matrix(sum);\n            }\n            return feats[best_feat];\n        }\n\n        unsigned long partition_samples (\n            const impl::split_feature& split,\n            std::vector<training_sample>& samples,\n            unsigned long begin,\n            unsigned long end\n        ) const\n        {\n            // splits samples based on split (sorta like in quick sort) and returns the mid\n            // point.  make sure you return the mid in a way compatible with how we walk\n            // through the tree.\n\n            unsigned long i = begin;\n            for (unsigned long j = begin; j < end; ++j)\n            {\n                if (samples[j].feature_pixel_values[split.idx1] - samples[j].feature_pixel_values[split.idx2] > split.thresh)\n                {\n                    samples[i].swap(samples[j]);\n                    ++i;\n                }\n            }\n            return i;\n        }\n\n\n\n        matrix<float,0,1> populate_training_sample_shapes(\n            const std::vector<std::vector<full_object_detection> >& objects,\n            std::vector<training_sample>& samples\n        ) const\n        {\n            samples.clear();\n            matrix<float,0,1> mean_shape;\n            long count = 0;\n            // first fill out the target shapes\n            for (unsigned long i = 0; i < objects.size(); ++i)\n            {\n                for (unsigned long j = 0; j < objects[i].size(); ++j)\n                {\n                    training_sample sample;\n                    sample.image_idx = i;\n                    sample.rect = objects[i][j].get_rect();\n                    sample.target_shape = object_to_shape(objects[i][j]);\n                    for (unsigned long itr = 0; itr < get_oversampling_amount(); ++itr)\n                        samples.push_back(sample);\n                    mean_shape += sample.target_shape;\n                    ++count;\n                }\n            }\n\n            mean_shape /= count;\n\n            // now go pick random initial shapes\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                if ((i%get_oversampling_amount()) == 0)\n                {\n                    // The mean shape is what we really use as an initial shape so always\n                    // include it in the training set as an example starting shape.\n                    samples[i].current_shape = mean_shape;\n                }\n                else\n                {\n                    // Pick a random convex combination of two of the target shapes and use\n                    // that as the initial shape for this sample.\n                    const unsigned long rand_idx = rnd.get_random_32bit_number()%samples.size();\n                    const unsigned long rand_idx2 = rnd.get_random_32bit_number()%samples.size();\n                    const double alpha = rnd.get_random_double();\n                    samples[i].current_shape = alpha*samples[rand_idx].target_shape + (1-alpha)*samples[rand_idx2].target_shape;\n                }\n            }\n\n\n            return mean_shape;\n        }\n\n\n        void randomly_sample_pixel_coordinates (\n            std::vector<dlib::vector<float,2> >& pixel_coordinates,\n            const double min_x,\n            const double min_y,\n            const double max_x,\n            const double max_y\n        ) const\n        /*!\n            ensures\n                - #pixel_coordinates.size() == get_feature_pool_size() \n                - for all valid i:\n                    - pixel_coordinates[i] == a point in the box defined by the min/max x/y arguments.\n        !*/\n        {\n            pixel_coordinates.resize(get_feature_pool_size());\n            for (unsigned long i = 0; i < get_feature_pool_size(); ++i)\n            {\n                pixel_coordinates[i].x() = rnd.get_random_double()*(max_x-min_x) + min_x;\n                pixel_coordinates[i].y() = rnd.get_random_double()*(max_y-min_y) + min_y;\n            }\n        }\n\n        std::vector<std::vector<dlib::vector<float,2> > > randomly_sample_pixel_coordinates (\n            const matrix<float,0,1>& initial_shape\n        ) const\n        {\n            const double padding = get_feature_pool_region_padding();\n            // Figure figure out the bounds on the object shapes.  We will sample uniformly\n            // from this box.\n            matrix<float> temp = reshape(initial_shape, initial_shape.size()/2, 2);\n            const double min_x = min(colm(temp,0))-padding;\n            const double min_y = min(colm(temp,1))-padding;\n            const double max_x = max(colm(temp,0))+padding;\n            const double max_y = max(colm(temp,1))+padding;\n\n            std::vector<std::vector<dlib::vector<float,2> > > pixel_coordinates;\n            pixel_coordinates.resize(get_cascade_depth());\n            for (unsigned long i = 0; i < get_cascade_depth(); ++i)\n                randomly_sample_pixel_coordinates(pixel_coordinates[i], min_x, min_y, max_x, max_y);\n            return pixel_coordinates;\n        }\n\n\n\n        mutable dlib::rand rnd;\n\n        unsigned long _cascade_depth;\n        unsigned long _tree_depth;\n        unsigned long _num_trees_per_cascade_level;\n        double _nu;\n        unsigned long _oversampling_amount;\n        unsigned long _feature_pool_size;\n        double _lambda;\n        unsigned long _num_test_splits;\n        double _feature_pool_region_padding;\n        bool _verbose;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array\n        >\n    double test_shape_predictor (\n        const shape_predictor& sp,\n        const image_array& images,\n        const std::vector<std::vector<full_object_detection> >& objects,\n        const std::vector<std::vector<double> >& scales\n    )\n    {\n        // make sure requires clause is not broken\n#ifdef ENABLE_ASSERTS\n        DLIB_CASSERT( images.size() == objects.size() ,\n            \"\\t double test_shape_predictor()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t images.size():  \" << images.size() \n            << \"\\n\\t objects.size(): \" << objects.size() \n        );\n        for (unsigned long i = 0; i < objects.size(); ++i)\n        {\n            for (unsigned long j = 0; j < objects[i].size(); ++j)\n            {\n                DLIB_CASSERT(objects[i][j].num_parts() == sp.num_parts(), \n                    \"\\t double test_shape_predictor()\"\n                    << \"\\n\\t Invalid inputs were given to this function. \"\n                    << \"\\n\\t objects[\"<<i<<\"][\"<<j<<\"].num_parts(): \" << objects[i][j].num_parts()\n                    << \"\\n\\t sp.num_parts(): \" << sp.num_parts()\n                );\n            }\n            if (scales.size() != 0)\n            {\n                DLIB_CASSERT(objects[i].size() == scales[i].size(), \n                    \"\\t double test_shape_predictor()\"\n                    << \"\\n\\t Invalid inputs were given to this function. \"\n                    << \"\\n\\t objects[\"<<i<<\"].size(): \" << objects[i].size()\n                    << \"\\n\\t scales[\"<<i<<\"].size(): \" << scales[i].size()\n                );\n\n            }\n        }\n#endif\n\n        running_stats<double> rs;\n        for (unsigned long i = 0; i < objects.size(); ++i)\n        {\n            for (unsigned long j = 0; j < objects[i].size(); ++j)\n            {\n                // Just use a scale of 1 (i.e. no scale at all) if the caller didn't supply\n                // any scales.\n                const double scale = scales.size()==0 ? 1 : scales[i][j]; \n\n                full_object_detection det = sp(images[i], objects[i][j].get_rect());\n\n                for (unsigned long k = 0; k < det.num_parts(); ++k)\n                {\n                    double score = length(det.part(k) - objects[i][j].part(k))/scale;\n                    rs.add(score);\n                }\n            }\n        }\n        return rs.mean();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array\n        >\n    double test_shape_predictor (\n        const shape_predictor& sp,\n        const image_array& images,\n        const std::vector<std::vector<full_object_detection> >& objects\n    )\n    {\n        std::vector<std::vector<double> > no_scales;\n        return test_shape_predictor(sp, images, objects, no_scales);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SHAPE_PREDICToR_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing/shape_predictor_abstract.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SHAPE_PREDICToR_ABSTRACT_H_\n#ifdef DLIB_SHAPE_PREDICToR_ABSTRACT_H_\n\n#include \"full_object_detection_abstract.h\"\n#include \"../matrix.h\"\n#include \"../geometry.h\"\n#include \"../pixel.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class shape_predictor\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool that takes in an image region containing some object\n                and outputs a set of point locations that define the pose of the object.\n                The classic example of this is human face pose prediction, where you take\n                an image of a human face as input and are expected to identify the\n                locations of important facial landmarks such as the corners of the mouth\n                and eyes, tip of the nose, and so forth.\n\n                To create useful instantiations of this object you need to use the\n                shape_predictor_trainer object defined below to train a shape_predictor\n                using a set of training images, each annotated with shapes you want to\n                predict.\n        !*/\n\n    public:\n\n        shape_predictor (\n        );\n        /*!\n            ensures\n                - #num_parts() == 0\n        !*/\n\n        unsigned long num_parts (\n        ) const;\n        /*!\n            ensures\n                - returns the number of parts in the shapes predicted by this object.\n        !*/\n\n        template <typename image_type>\n        full_object_detection operator()(\n            const image_type& img,\n            const rectangle& rect\n        ) const;\n        /*!\n            requires\n                - image_type == an image object that implements the interface defined in\n                  dlib/image_processing/generic_image.h \n            ensures\n                - Runs the shape prediction algorithm on the part of the image contained in\n                  the given bounding rectangle.  So it will try and fit the shape model to\n                  the contents of the given rectangle in the image.  For example, if there\n                  is a human face inside the rectangle and you use a face landmarking shape\n                  model then this function will return the locations of the face landmarks\n                  as the parts.  So the return value is a full_object_detection DET such\n                  that:\n                    - DET.get_rect() == rect\n                    - DET.num_parts() == num_parts()\n                    - for all valid i:\n                        - DET.part(i) == the location in img for the i-th part of the shape\n                          predicted by this object.\n        !*/\n\n    };\n\n    void serialize (const shape_predictor& item, std::ostream& out);\n    void deserialize (shape_predictor& item, std::istream& in);\n    /*!\n        provides serialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class shape_predictor_trainer\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for training shape_predictors based on annotated training\n                images.  Its implementation uses the algorithm described in:\n                    One Millisecond Face Alignment with an Ensemble of Regression Trees\n                    by Vahid Kazemi and Josephine Sullivan, CVPR 2014\n\n        !*/\n\n    public:\n\n        shape_predictor_trainer (\n        );\n        /*!\n            ensures\n                - #get_cascade_depth() == 10\n                - #get_tree_depth() == 4\n                - #get_num_trees_per_cascade_level() == 500\n                - #get_nu() == 0.1\n                - #get_oversampling_amount() == 20\n                - #get_feature_pool_size() == 400\n                - #get_lambda() == 0.1\n                - #get_num_test_splits() == 20\n                - #get_feature_pool_region_padding() == 0\n                - #get_random_seed() == \"\"\n                - This object will not be verbose\n        !*/\n\n        unsigned long get_cascade_depth (\n        ) const;\n        /*!\n            ensures\n                - returns the number of cascades created when you train a model.  This\n                  means that the total number of trees in the learned model is equal to\n                  get_cascade_depth()*get_num_trees_per_cascade_level().\n        !*/\n\n        void set_cascade_depth (\n            unsigned long depth\n        );\n        /*!\n            requires\n                - depth > 0\n            ensures\n                - #get_cascade_depth() == depth\n        !*/\n\n        unsigned long get_tree_depth (\n        ) const; \n        /*!\n            ensures\n                - returns the depth of the trees used in the cascade.  In particular, there\n                  are pow(2,get_tree_depth()) leaves in each tree.\n        !*/\n\n        void set_tree_depth (\n            unsigned long depth\n        );\n        /*!\n            requires\n                - depth > 0\n            ensures\n                - #get_tree_depth() == depth\n        !*/\n\n        unsigned long get_num_trees_per_cascade_level (\n        ) const;\n        /*!\n            ensures\n                - returns the number of trees created for each cascade.  This means that\n                  the total number of trees in the learned model is equal to\n                  get_cascade_depth()*get_num_trees_per_cascade_level().  \n        !*/\n\n        void set_num_trees_per_cascade_level (\n            unsigned long num\n        );\n        /*!\n            requires\n                - num > 0\n            ensures\n                - #get_num_trees_per_cascade_level() == num\n        !*/\n\n        double get_nu (\n        ) const; \n        /*!\n            ensures\n                - returns the regularization parameter.  Larger values of this parameter\n                  will cause the algorithm to fit the training data better but may also\n                  cause overfitting.\n        !*/\n\n        void set_nu (\n            double nu\n        );\n        /*!\n            requires\n                - nu > 0\n            ensures\n                - #get_nu() == nu\n        !*/\n\n        std::string get_random_seed (\n        ) const;\n        /*!\n            ensures\n                - returns the random seed used by the internal random number generator.\n                  Since this algorithm is a random forest style algorithm it relies on a\n                  random number generator for generating the trees.  So each setting of the\n                  random seed will produce slightly different outputs.  \n        !*/\n\n        void set_random_seed (\n            const std::string& seed\n        );\n        /*!\n            ensures\n                - #get_random_seed() == seed\n        !*/\n\n        unsigned long get_oversampling_amount (\n        ) const;\n        /*!\n            ensures\n                - You give annotated images to this object as training examples.  You\n                  can effectively increase the amount of training data by adding in each\n                  training example multiple times but with a randomly selected deformation\n                  applied to it.  That is what this parameter controls.  That is, if you\n                  supply N training samples to train() then the algorithm runs internally\n                  with N*get_oversampling_amount() training samples.  So the bigger this\n                  parameter the better (excepting that larger values make training take\n                  longer).  In terms of the Kazemi paper, this parameter is the number of\n                  randomly selected initial starting points sampled for each training\n                  example.\n        !*/\n\n        void set_oversampling_amount (\n            unsigned long amount\n        );\n        /*!\n            requires\n                - amount > 0\n            ensures\n                - #get_oversampling_amount() == amount\n        !*/\n\n        unsigned long get_feature_pool_size (\n        ) const;\n        /*!\n            ensures\n                - At each level of the cascade we randomly sample get_feature_pool_size()\n                  pixels from the image.  These pixels are used to generate features for\n                  the random trees.  So in general larger settings of this parameter give\n                  better accuracy but make the algorithm run slower.  \n        !*/\n\n        void set_feature_pool_size (\n            unsigned long size\n        );\n        /*!\n            requires\n                - size > 1\n            ensures\n                - #get_feature_pool_size() == size\n        !*/\n\n        double get_feature_pool_region_padding (\n        ) const; \n        /*!\n            ensures\n                - When we randomly sample the pixels for the feature pool we do so in a box\n                  fit around the provided training landmarks.  By default, this box is the\n                  tightest box that contains the landmarks (i.e. this is what happens when\n                  get_feature_pool_region_padding()==0).  However, you can expand or shrink\n                  the size of the pixel sampling region by setting a different value of\n                  get_feature_pool_region_padding().  \n\n                  To explain this precisely, for a padding of 0 we say that the pixels are\n                  sampled from a box of size 1x1.  The padding value is added to each side\n                  of the box.  So a padding of 0.5 would cause the algorithm to sample\n                  pixels from a box that was 2x2, effectively multiplying the area pixels\n                  are sampled from by 4.  Similarly, setting the padding to -0.2 would\n                  cause it to sample from a box 0.8x0.8 in size.\n        !*/\n\n        void set_feature_pool_region_padding (\n            double padding \n        );\n        /*!\n            ensures\n                - #get_feature_pool_region_padding() == padding\n        !*/\n\n\n        double get_lambda (\n        ) const;\n        /*!\n            ensures\n                - To decide how to split nodes in the regression trees the algorithm looks\n                  at pairs of pixels in the image.  These pixel pairs are sampled randomly\n                  but with a preference for selecting pixels that are near each other.\n                  get_lambda() controls this \"nearness\" preference.  In particular, smaller\n                  values of get_lambda() will make the algorithm prefer to select pixels\n                  close together and larger values of get_lambda() will make it care less\n                  about picking nearby pixel pairs.  \n\n                  Note that this is the inverse of how it is defined in the Kazemi paper.\n                  For this object, you should think of lambda as \"the fraction of the\n                  bounding box will we traverse to find a neighboring pixel\".  Nominally,\n                  this is normalized between 0 and 1.  So reasonable settings of lambda are\n                  values in the range 0 < lambda < 1.\n        !*/\n\n        void set_lambda (\n            double lambda\n        );\n        /*!\n            requires\n                - lambda > 0\n            ensures\n                - #get_lambda() == lambda\n        !*/\n\n        unsigned long get_num_test_splits (\n        ) const;\n        /*!\n            ensures\n                - When generating the random trees we randomly sample get_num_test_splits()\n                  possible split features at each node and pick the one that gives the best\n                  split.  Larger values of this parameter will usually give more accurate\n                  outputs but take longer to train.\n        !*/\n\n        void set_num_test_splits (\n            unsigned long num\n        );\n        /*!\n            requires\n                - num > 0\n            ensures\n                - #get_num_test_splits() == num\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - This object will not print anything to standard out\n        !*/\n\n        template <typename image_array>\n        shape_predictor train (\n            const image_array& images,\n            const std::vector<std::vector<full_object_detection> >& objects\n        ) const;\n        /*!\n            requires\n                - image_array is a dlib::array of image objects where each image object\n                  implements the interface defined in dlib/image_processing/generic_image.h \n                - images.size() == objects.size()\n                - images.size() > 0\n                - for some i: objects[i].size() != 0\n                  (i.e. there has to be at least one full_object_detection in the training set)\n                - for all valid i,j,k,l:\n                    - objects[i][j].num_parts() == objects[k][l].num_parts()\n                      (i.e. all objects must agree on the number of parts)\n                    - objects[i][j].num_parts() > 0\n            ensures\n                - This object will try to learn to predict the locations of an object's parts \n                  based on the object bounding box (i.e.  full_object_detection::get_rect()) \n                  and the image pixels in that box.  That is, we will try to learn a\n                  shape_predictor, SP, such that:\n                    SP(images[i], objects[i][j].get_rect()) == objects[i][j]\n                  This learned SP object is then returned.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array\n        >\n    double test_shape_predictor (\n        const shape_predictor& sp,\n        const image_array& images,\n        const std::vector<std::vector<full_object_detection> >& objects,\n        const std::vector<std::vector<double> >& scales\n    );\n    /*!\n        requires\n            - image_array is a dlib::array of image objects where each image object\n              implements the interface defined in dlib/image_processing/generic_image.h \n            - images.size() == objects.size()\n            - for all valid i and j:\n                - objects[i][j].num_parts() == sp.num_parts()\n            - if (scales.size() != 0) then\n                - There must be a scale value for each full_object_detection in objects.\n                  That is, it must be the case that:\n                    - scales.size() == objects.size()\n                    - for all valid i:\n                        - scales[i].size() == objects[i].size()\n        ensures\n            - Tests the given shape_predictor by running it on each of the given objects and\n              checking how well it recovers the part positions.  In particular, for all \n              valid i and j we perform:\n                sp(images[i], objects[i][j].get_rect())\n              and compare the result with the truth part positions in objects[i][j].  We\n              then return the average distance (measured in pixels) between a predicted\n              part location and its true position.  \n            - if (scales.size() != 0) then\n                - Each time we compute the distance between a predicted part location and\n                  its true location in objects[i][j] we divide the distance by\n                  scales[i][j].  Therefore, if you want the reported error to be the\n                  average pixel distance then give an empty scales vector, but if you want\n                  the returned value to be something else like the average distance\n                  normalized by some feature of each object (e.g. the interocular distance)\n                  then you can supply those normalizing values via scales.\n    !*/\n\n    template <\n        typename image_array\n        >\n    double test_shape_predictor (\n        const shape_predictor& sp,\n        const image_array& images,\n        const std::vector<std::vector<full_object_detection> >& objects\n    );\n    /*!\n        requires\n            - image_array is a dlib::array of image objects where each image object\n              implements the interface defined in dlib/image_processing/generic_image.h \n            - images.size() == objects.size()\n            - for all valid i and j:\n                - objects[i][j].num_parts() == sp.num_parts()\n        ensures\n            - returns test_shape_predictor(sp, images, objects, no_scales) where no_scales\n              is an empty vector.  So this is just a convenience function for calling the\n              above test_shape_predictor() routine without a scales argument.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SHAPE_PREDICToR_ABSTRACT_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_processing.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGE_PROCESSInG_H_h_\n#define DLIB_IMAGE_PROCESSInG_H_h_ \n\n#include \"image_processing/scan_image.h\"\n#include \"image_processing/scan_image_pyramid.h\"\n#include \"image_processing/detection_template_tools.h\"\n#include \"image_processing/object_detector.h\"\n#include \"image_processing/box_overlap_testing.h\"\n#include \"image_processing/scan_image_pyramid_tools.h\"\n#include \"image_processing/setup_hashed_features.h\"\n#include \"image_processing/scan_image_boxes.h\"\n#include \"image_processing/scan_image_custom.h\"\n#include \"image_processing/remove_unobtainable_rectangles.h\"\n#include \"image_processing/scan_fhog_pyramid.h\"\n#include \"image_processing/shape_predictor.h\"\n\n#endif // DLIB_IMAGE_PROCESSInG_H_h_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_saver/dng_shared.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DNG_SHAREd_\n#define DLIB_DNG_SHAREd_\n\n#include \"../pixel.h\"\n#include <cmath>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n    namespace dng_helpers_namespace\n    {\n        enum \n        {\n            grayscale = 1,\n            rgb,\n            hsi,\n            rgb_paeth,\n            rgb_alpha,\n            rgb_alpha_paeth,\n            grayscale_16bit,\n            grayscale_float\n        };\n\n        const unsigned long dng_magic_byte = 100;\n\n        template <typename T>\n        rgb_pixel predictor_rgb_paeth (const T& img, long row, long col)\n        /*\n            This is similar to the Paeth filter from the PNG image format.\n        */\n        {\n            // a = left, b = above, c = upper left\n            rgb_pixel a(0,0,0), b(0,0,0), c(0,0,0);\n\n\n            const long c1 = col-1;\n            const long r1 = row-1;\n\n            if (c1 >= 0)            \n                assign_pixel(a, img[row][c1]);\n            else\n                assign_pixel(a,(unsigned char)0);\n\n            if (c1 >= 0 && r1 >= 0) \n                assign_pixel(c, img[r1][c1]);\n            else\n                assign_pixel(c,(unsigned char)0);\n\n            if (r1 >= 0)            \n                assign_pixel(b, img[r1][col]);\n            else\n                assign_pixel(b,(unsigned char)0);\n\n\n            rgb_pixel p;\n            p.red = a.red + b.red - c.red;\n            p.green = a.green + b.green - c.green;\n            p.blue = a.blue + b.blue - c.blue;\n\n            short pa = std::abs((short)p.red - (short)a.red) +\n                       std::abs((short)p.green - (short)a.green) +\n                       std::abs((short)p.blue - (short)a.blue);\n            short pb = std::abs((short)p.red - (short)b.red) +\n                       std::abs((short)p.green - (short)b.green) +\n                       std::abs((short)p.blue - (short)b.blue);\n            short pc = std::abs((short)p.red - (short)c.red) +\n                       std::abs((short)p.green - (short)c.green) +\n                       std::abs((short)p.blue - (short)c.blue);\n\n            if (pa <= pb && pa <= pc) \n                return a;\n            else if (pb <= pc) \n                return b;\n            else \n                return c;\n        }\n\n\n        template <typename T>\n        rgb_pixel predictor_rgb (const T& img, long row, long col)\n        {\n            // a = left, b = above, c = upper left\n            rgb_pixel a(0,0,0), b(0,0,0), c(0,0,0);\n\n\n            const long c1 = col-1;\n            const long r1 = row-1;\n\n            if (c1 >= 0)            \n                assign_pixel(a, img[row][c1]);\n            else\n                assign_pixel(a,(unsigned char)0);\n\n            if (c1 >= 0 && r1 >= 0) \n                assign_pixel(c, img[r1][c1]);\n            else\n                assign_pixel(c,(unsigned char)0);\n\n            if (r1 >= 0)            \n                assign_pixel(b, img[r1][col]);\n            else\n                assign_pixel(b,(unsigned char)0);\n\n\n            rgb_pixel p;\n            p.red = a.red + b.red - c.red;\n            p.green = a.green + b.green - c.green;\n            p.blue = a.blue + b.blue - c.blue;\n            return p;\n        }\n\n        template <typename T>\n        rgb_alpha_pixel predictor_rgb_alpha_paeth (const T& img, long row, long col)\n        /*\n            This is similar to the Paeth filter from the PNG image format.\n        */\n        {\n            // a = left, b = above, c = upper left\n            rgb_alpha_pixel a, b, c;\n\n\n            const long c1 = col-1;\n            const long r1 = row-1;\n\n            if (c1 >= 0)            \n                assign_pixel(a, img[row][c1]);\n            else\n                assign_pixel(a,(unsigned char)0);\n\n            if (c1 >= 0 && r1 >= 0) \n                assign_pixel(c, img[r1][c1]);\n            else\n                assign_pixel(c,(unsigned char)0);\n\n            if (r1 >= 0)            \n                assign_pixel(b, img[r1][col]);\n            else\n                assign_pixel(b,(unsigned char)0);\n\n\n            rgb_alpha_pixel p;\n            p.red = a.red + b.red - c.red;\n            p.green = a.green + b.green - c.green;\n            p.blue = a.blue + b.blue - c.blue;\n\n            short pa = std::abs((short)p.red - (short)a.red) +\n                       std::abs((short)p.green - (short)a.green) +\n                       std::abs((short)p.blue - (short)a.blue);\n            short pb = std::abs((short)p.red - (short)b.red) +\n                       std::abs((short)p.green - (short)b.green) +\n                       std::abs((short)p.blue - (short)b.blue);\n            short pc = std::abs((short)p.red - (short)c.red) +\n                       std::abs((short)p.green - (short)c.green) +\n                       std::abs((short)p.blue - (short)c.blue);\n\n            if (pa <= pb && pa <= pc) \n                return a;\n            else if (pb <= pc) \n                return b;\n            else \n                return c;\n        }\n\n\n        template <typename T>\n        rgb_alpha_pixel predictor_rgb_alpha (const T& img, long row, long col)\n        {\n            // a = left, b = above, c = upper left\n            rgb_alpha_pixel a, b, c;\n\n\n            const long c1 = col-1;\n            const long r1 = row-1;\n\n            if (c1 >= 0)            \n                assign_pixel(a, img[row][c1]);\n            else\n                assign_pixel(a,(unsigned char)0);\n\n            if (c1 >= 0 && r1 >= 0) \n                assign_pixel(c, img[r1][c1]);\n            else\n                assign_pixel(c,(unsigned char)0);\n\n            if (r1 >= 0)            \n                assign_pixel(b, img[r1][col]);\n            else\n                assign_pixel(b,(unsigned char)0);\n\n\n            rgb_alpha_pixel p;\n            p.red = a.red + b.red - c.red;\n            p.green = a.green + b.green - c.green;\n            p.blue = a.blue + b.blue - c.blue;\n            p.alpha = a.alpha + b.alpha - c.alpha;\n            return p;\n        }\n\n\n        template <typename T>\n        hsi_pixel predictor_hsi (const T& img, long row, long col)\n        {\n            // a = left, b = above, c = upper left\n            hsi_pixel a(0,0,0), b(0,0,0), c(0,0,0);\n\n\n            const long c1 = col-1;\n            const long r1 = row-1;\n\n            if (c1 >= 0)            \n                assign_pixel(a, img[row][c1]);\n            else\n                assign_pixel(a,(unsigned char)0);\n\n            if (c1 >= 0 && r1 >= 0) \n                assign_pixel(c, img[r1][c1]);\n            else\n                assign_pixel(c,(unsigned char)0);\n\n            if (r1 >= 0)            \n                assign_pixel(b, img[r1][col]);\n            else\n                assign_pixel(b,(unsigned char)0);\n\n\n            hsi_pixel p;\n            p.h = a.h + b.h - c.h;\n            p.s = a.s + b.s - c.s;\n            p.i = a.i + b.i - c.i;\n            return p;\n        }\n\n        template <typename T>\n        unsigned char predictor_grayscale (const T& img, long row, long col)\n        {\n            // a = left, b = above, c = upper left\n            unsigned char a = 0, b = 0, c = 0; \n\n\n            const long c1 = col-1;\n            const long r1 = row-1;\n\n            if (c1 >= 0)            \n                assign_pixel(a, img[row][c1]);\n\n            if (c1 >= 0 && r1 >= 0) \n                assign_pixel(c, img[r1][c1]);\n\n            if (r1 >= 0)            \n                assign_pixel(b, img[r1][col]);\n\n\n            unsigned char p = a + b - c;\n            return p;\n        }\n\n        template <typename T>\n        uint16 predictor_grayscale_16 (const T& img, long row, long col)\n        {\n            // a = left, b = above, c = upper left\n            uint16 a = 0, b = 0, c = 0; \n\n\n            const long c1 = col-1;\n            const long r1 = row-1;\n\n            if (c1 >= 0)            \n                assign_pixel(a, img[row][c1]);\n\n            if (c1 >= 0 && r1 >= 0) \n                assign_pixel(c, img[r1][c1]);\n\n            if (r1 >= 0)            \n                assign_pixel(b, img[r1][col]);\n\n\n            uint16 p = a + b - c;\n            return p;\n        }\n\n    }\n}\n\n#endif  // DLIB_DNG_SHAREd_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_saver/image_saver.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGE_SAVEr_\n#define DLIB_IMAGE_SAVEr_\n\n#include \"image_saver_abstract.h\"\n#include <iostream>\n#include <fstream>\n#include <sstream>\n#include \"../algs.h\"\n#include \"../pixel.h\"\n#include \"../byte_orderer.h\"\n#include \"../entropy_encoder.h\"\n#include \"../entropy_encoder_model.h\"\n#include \"dng_shared.h\"\n#include \"../uintn.h\"\n#include \"../dir_nav.h\"\n#include \"../float_details.h\"\n#include \"../vectorstream.h\"\n#include \"../matrix/matrix_exp.h\"\n#include \"../image_transforms/assign_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class image_save_error : public dlib::error { \n    public: image_save_error(const std::string& str) : error(EIMAGE_SAVE,str){}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        bool grayscale = pixel_traits<typename image_traits<image_type>::pixel_type>::grayscale\n        >\n    struct save_bmp_helper;\n\n\n    template <typename image_type>\n    struct save_bmp_helper<image_type,false>\n    {\n        static void save_bmp (\n            const image_type& image_,\n            std::ostream& out \n        )\n        {\n            const_image_view<image_type> image(image_);\n            // we are going to write out a 24bit color image.\n            byte_orderer::kernel_1a bo;\n\n            out.write(\"BM\",2);\n            \n            if (!out)\n                throw image_save_error(\"error writing image to output stream\");\n\n\n            unsigned long pad = 4 - (image.nc()*3)%4;\n            if (pad == 4)\n                pad = 0;\n\n            unsigned long bfSize = 14 + 40 + (image.nc()*3 + pad)*image.nr();\n            unsigned long bfReserved = 0;\n            unsigned long bfOffBits = 14 + 40;\n            unsigned long biSize = 40;\n            unsigned long biWidth = image.nc();\n            unsigned long biHeight = image.nr();\n            unsigned short biPlanes = 1;\n            unsigned short biBitCount = 24;\n            unsigned long biCompression = 0;\n            unsigned long biSizeImage = 0;\n            unsigned long biXPelsPerMeter = 0;\n            unsigned long biYPelsPerMeter = 0;\n            unsigned long biClrUsed = 0;\n            unsigned long biClrImportant = 0;\n\n            bo.host_to_little(bfSize);\n            bo.host_to_little(bfOffBits);\n            bo.host_to_little(biSize);\n            bo.host_to_little(biWidth);\n            bo.host_to_little(biHeight);\n            bo.host_to_little(biPlanes);\n            bo.host_to_little(biBitCount);\n\n            out.write((char*)&bfSize,4);\n            out.write((char*)&bfReserved,4);\n            out.write((char*)&bfOffBits,4);\n            out.write((char*)&biSize,4);\n            out.write((char*)&biWidth,4);\n            out.write((char*)&biHeight,4);\n            out.write((char*)&biPlanes,2);\n            out.write((char*)&biBitCount,2);\n            out.write((char*)&biCompression,4);\n            out.write((char*)&biSizeImage,4);\n            out.write((char*)&biXPelsPerMeter,4);\n            out.write((char*)&biYPelsPerMeter,4);\n            out.write((char*)&biClrUsed,4);\n            out.write((char*)&biClrImportant,4);\n\n\n            if (!out)\n                throw image_save_error(\"error writing image to output stream\");\n\n            // now we write out the pixel data\n            for (long row = image.nr()-1; row >= 0; --row)\n            {\n                for (long col = 0; col < image.nc(); ++col)\n                {\n                    rgb_pixel p;\n                    p.red = 0;\n                    p.green = 0;\n                    p.blue = 0;\n                    assign_pixel(p,image[row][col]);\n                    out.write((char*)&p.blue,1);\n                    out.write((char*)&p.green,1);\n                    out.write((char*)&p.red,1);\n                }\n\n                // write out some zeros so that this line is a multiple of 4 bytes\n                for (unsigned long i = 0; i < pad; ++i)\n                {\n                    unsigned char p = 0;\n                    out.write((char*)&p,1);\n                }\n            }\n\n            if (!out)\n                throw image_save_error(\"error writing image to output stream\");\n        }\n    };\n\n    template <typename image_type>\n    struct save_bmp_helper<image_type,true>\n    {\n        static void save_bmp (\n            const image_type& image_,\n            std::ostream& out\n        )\n        {\n            const_image_view<image_type> image(image_);\n            // we are going to write out an 8bit color image.\n            byte_orderer::kernel_1a bo;\n\n            out.write(\"BM\",2);\n            \n            if (!out)\n                throw image_save_error(\"error writing image to output stream\");\n\n            unsigned long pad = 4 - image.nc()%4;\n            if (pad == 4)\n                pad = 0;\n\n            unsigned long bfSize = 14 + 40 + (image.nc() + pad)*image.nr() + 256*4;\n            unsigned long bfReserved = 0;\n            unsigned long bfOffBits = 14 + 40 + 256*4;\n            unsigned long biSize = 40;\n            unsigned long biWidth = image.nc();\n            unsigned long biHeight = image.nr();\n            unsigned short biPlanes = 1;\n            unsigned short biBitCount = 8;\n            unsigned long biCompression = 0;\n            unsigned long biSizeImage = 0;\n            unsigned long biXPelsPerMeter = 0;\n            unsigned long biYPelsPerMeter = 0;\n            unsigned long biClrUsed = 0;\n            unsigned long biClrImportant = 0;\n\n            bo.host_to_little(bfSize);\n            bo.host_to_little(bfOffBits);\n            bo.host_to_little(biSize);\n            bo.host_to_little(biWidth);\n            bo.host_to_little(biHeight);\n            bo.host_to_little(biPlanes);\n            bo.host_to_little(biBitCount);\n\n            out.write((char*)&bfSize,4);\n            out.write((char*)&bfReserved,4);\n            out.write((char*)&bfOffBits,4);\n            out.write((char*)&biSize,4);\n            out.write((char*)&biWidth,4);\n            out.write((char*)&biHeight,4);\n            out.write((char*)&biPlanes,2);\n            out.write((char*)&biBitCount,2);\n            out.write((char*)&biCompression,4);\n            out.write((char*)&biSizeImage,4);\n            out.write((char*)&biXPelsPerMeter,4);\n            out.write((char*)&biYPelsPerMeter,4);\n            out.write((char*)&biClrUsed,4);\n            out.write((char*)&biClrImportant,4);\n\n\n            // write out the color palette\n            for (unsigned int i = 0; i <= 255; ++i)\n            {\n                unsigned char ch = static_cast<unsigned char>(i);\n                out.write((char*)&ch,1);\n                out.write((char*)&ch,1);\n                out.write((char*)&ch,1);\n                ch = 0;\n                out.write((char*)&ch,1);\n            }\n\n            if (!out)\n                throw image_save_error(\"error writing image to output stream\");\n\n            // now we write out the pixel data\n            for (long row = image.nr()-1; row >= 0; --row)\n            {\n                for (long col = 0; col < image.nc(); ++col)\n                {\n                    unsigned char p = 0;\n                    assign_pixel(p,image[row][col]);\n                    out.write((char*)&p,1);\n                }\n\n                // write out some zeros so that this line is a multiple of 4 bytes\n                for (unsigned long i = 0; i < pad; ++i)\n                {\n                    unsigned char p = 0;\n                    out.write((char*)&p,1);\n                }\n            }\n\n            if (!out)\n                throw image_save_error(\"error writing image to output stream\");\n\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    inline typename disable_if<is_matrix<image_type> >::type save_bmp (\n        const image_type& image,\n        std::ostream& out\n    )\n    {\n        save_bmp_helper<image_type>::save_bmp(image,out);\n    }\n\n    template <\n        typename EXP \n        >\n    inline void save_bmp (\n        const matrix_exp<EXP>& image,\n        std::ostream& out\n    )\n    {\n        array2d<typename EXP::type> temp;\n        assign_image(temp, image);\n        save_bmp_helper<array2d<typename EXP::type> >::save_bmp(temp,out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace dng_helpers_namespace\n    {\n        template <\n            typename image_type,\n            typename enabled = void\n            >\n        struct save_dng_helper;\n\n        typedef entropy_encoder::kernel_2a encoder_type;\n        typedef entropy_encoder_model<256,encoder_type>::kernel_5a eem_type; \n\n        typedef entropy_encoder_model<256,encoder_type>::kernel_4a eem_exp_type; \n\n        template <typename image_type >\n        struct save_dng_helper<image_type, typename enable_if<is_float_type<typename image_traits<image_type>::pixel_type> >::type >\n        {\n            static void save_dng (\n                const image_type& image_,\n                std::ostream& out \n            )\n            {\n                const_image_view<image_type> image(image_);\n                out.write(\"DNG\",3);\n                unsigned long version = 1;\n                serialize(version,out);\n                unsigned long type = grayscale_float;\n                serialize(type,out);\n                serialize(image.nc(),out);\n                serialize(image.nr(),out);\n\n\n                // Write the compressed exponent data into expbuf.  We will append it\n                // to the stream at the end of the loops.\n                std::vector<char> expbuf;\n                expbuf.reserve(image.size()*2);\n                vectorstream outexp(expbuf);\n                encoder_type encoder;\n                encoder.set_stream(outexp);\n\n                eem_exp_type eem_exp(encoder);\n                float_details prev;\n                for (long r = 0; r < image.nr(); ++r)\n                {\n                    for (long c = 0; c < image.nc(); ++c)\n                    {\n                        float_details cur = image[r][c];\n                        int16 exp = cur.exponent-prev.exponent;\n                        int64 man = cur.mantissa-prev.mantissa;\n                        prev = cur;\n\n                        unsigned char ebyte1 = exp&0xFF;\n                        unsigned char ebyte2 = exp>>8;\n                        eem_exp.encode(ebyte1);\n                        eem_exp.encode(ebyte2);\n\n                        serialize(man, out);\n                    }\n                }\n                // write out the magic byte to mark the end of the compressed data.\n                eem_exp.encode(dng_magic_byte);\n                eem_exp.encode(dng_magic_byte);\n                eem_exp.encode(dng_magic_byte);\n                eem_exp.encode(dng_magic_byte);\n\n                encoder.clear();\n                serialize(expbuf, out);\n            }\n        };\n\n\n        template <typename image_type>\n        struct is_non_float_non8bit_grayscale\n        {\n            typedef typename image_traits<image_type>::pixel_type pixel_type;\n            const static bool value = pixel_traits<pixel_type>::grayscale && \n                                      sizeof(pixel_type) != 1 && \n                                      !is_float_type<pixel_type>::value;\n        };\n\n        template <typename image_type >\n        struct save_dng_helper<image_type, typename enable_if<is_non_float_non8bit_grayscale<image_type> >::type>\n        {\n            static void save_dng (\n                const image_type& image_,\n                std::ostream& out \n            )\n            {\n                const_image_view<image_type> image(image_);\n                out.write(\"DNG\",3);\n                unsigned long version = 1;\n                serialize(version,out);\n                unsigned long type = grayscale_16bit;\n                serialize(type,out);\n                serialize(image.nc(),out);\n                serialize(image.nr(),out);\n\n                encoder_type encoder;\n                encoder.set_stream(out);\n\n                eem_type eem(encoder);\n                for (long r = 0; r < image.nr(); ++r)\n                {\n                    for (long c = 0; c < image.nc(); ++c)\n                    {\n                        uint16 cur;\n                        assign_pixel(cur, image[r][c]);\n                        cur -= predictor_grayscale_16(image,r,c);\n                        unsigned char byte1 = cur&0xFF;\n                        unsigned char byte2 = cur>>8;\n                        eem.encode(byte2);\n                        eem.encode(byte1);\n                    }\n                }\n                // write out the magic byte to mark the end of the data\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n            }\n        };\n\n        template <typename image_type>\n        struct is_8bit_grayscale\n        {\n            typedef typename image_traits<image_type>::pixel_type pixel_type;\n            const static bool value = pixel_traits<pixel_type>::grayscale && sizeof(pixel_type) == 1;\n        };\n\n        template <typename image_type>\n        struct save_dng_helper<image_type, typename enable_if<is_8bit_grayscale<image_type> >::type>\n        {\n            static void save_dng (\n                const image_type& image_,\n                std::ostream& out \n            )\n            {\n                const_image_view<image_type> image(image_);\n                out.write(\"DNG\",3);\n                unsigned long version = 1;\n                serialize(version,out);\n                unsigned long type = grayscale;\n                serialize(type,out);\n                serialize(image.nc(),out);\n                serialize(image.nr(),out);\n\n                encoder_type encoder;\n                encoder.set_stream(out);\n\n                eem_type eem(encoder);\n                for (long r = 0; r < image.nr(); ++r)\n                {\n                    for (long c = 0; c < image.nc(); ++c)\n                    {\n                        unsigned char cur;\n                        assign_pixel(cur, image[r][c]);\n                        cur -= predictor_grayscale(image,r,c);\n                        eem.encode(cur);\n                    }\n                }\n                // write out the magic byte to mark the end of the data\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n            }\n        };\n\n        template <typename image_type>\n        struct is_rgb_image\n        {\n            typedef typename image_traits<image_type>::pixel_type pixel_type;\n            const static bool value = pixel_traits<pixel_type>::rgb;\n        };\n\n        template <typename image_type>\n        struct save_dng_helper<image_type,typename enable_if<is_rgb_image<image_type> >::type>\n        {\n            static void save_dng (\n                const image_type& image_,\n                std::ostream& out\n            )\n            {\n                const_image_view<image_type> image(image_);\n                out.write(\"DNG\",3);\n                unsigned long version = 1;\n                serialize(version,out);\n\n                unsigned long type = rgb;\n                // if this is a small image then we will use a different predictor\n                if (image.size() < 4000)\n                    type = rgb_paeth;\n\n                serialize(type,out);\n                serialize(image.nc(),out);\n                serialize(image.nr(),out);\n\n                encoder_type encoder;\n                encoder.set_stream(out);\n\n                rgb_pixel pre, cur;\n                eem_type eem(encoder);\n\n                if (type == rgb)\n                {\n                    for (long r = 0; r < image.nr(); ++r)\n                    {\n                        for (long c = 0; c < image.nc(); ++c)\n                        {\n                            pre = predictor_rgb(image,r,c);\n                            assign_pixel(cur, image[r][c]);\n\n                            eem.encode((unsigned char)(cur.red - pre.red));\n                            eem.encode((unsigned char)(cur.green - pre.green));\n                            eem.encode((unsigned char)(cur.blue - pre.blue));\n                        }\n                    }\n                }\n                else\n                {\n                    for (long r = 0; r < image.nr(); ++r)\n                    {\n                        for (long c = 0; c < image.nc(); ++c)\n                        {\n                            pre = predictor_rgb_paeth(image,r,c);\n                            assign_pixel(cur, image[r][c]);\n\n                            eem.encode((unsigned char)(cur.red - pre.red));\n                            eem.encode((unsigned char)(cur.green - pre.green));\n                            eem.encode((unsigned char)(cur.blue - pre.blue));\n                        }\n                    }\n                }\n                // write out the magic byte to mark the end of the data\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n            }\n        };\n\n        template <typename image_type>\n        struct is_rgb_alpha_image\n        {\n            typedef typename image_traits<image_type>::pixel_type pixel_type;\n            const static bool value = pixel_traits<pixel_type>::rgb_alpha;\n        };\n\n        template <typename image_type>\n        struct save_dng_helper<image_type,typename enable_if<is_rgb_alpha_image<image_type> >::type>\n        {\n            static void save_dng (\n                const image_type& image_,\n                std::ostream& out\n            )\n            {\n                const_image_view<image_type> image(image_);\n                out.write(\"DNG\",3);\n                unsigned long version = 1;\n                serialize(version,out);\n\n                unsigned long type = rgb_alpha;\n                // if this is a small image then we will use a different predictor\n                if (image.size() < 4000)\n                    type = rgb_alpha_paeth;\n\n                serialize(type,out);\n                serialize(image.nc(),out);\n                serialize(image.nr(),out);\n\n                encoder_type encoder;\n                encoder.set_stream(out);\n\n                rgb_alpha_pixel pre, cur;\n                eem_type eem(encoder);\n\n                if (type == rgb_alpha)\n                {\n                    for (long r = 0; r < image.nr(); ++r)\n                    {\n                        for (long c = 0; c < image.nc(); ++c)\n                        {\n                            pre = predictor_rgb_alpha(image,r,c);\n                            assign_pixel(cur, image[r][c]);\n\n                            eem.encode((unsigned char)(cur.red - pre.red));\n                            eem.encode((unsigned char)(cur.green - pre.green));\n                            eem.encode((unsigned char)(cur.blue - pre.blue));\n                            eem.encode((unsigned char)(cur.alpha - pre.alpha));\n                        }\n                    }\n                }\n                else\n                {\n                    for (long r = 0; r < image.nr(); ++r)\n                    {\n                        for (long c = 0; c < image.nc(); ++c)\n                        {\n                            pre = predictor_rgb_alpha_paeth(image,r,c);\n                            assign_pixel(cur, image[r][c]);\n\n                            eem.encode((unsigned char)(cur.red - pre.red));\n                            eem.encode((unsigned char)(cur.green - pre.green));\n                            eem.encode((unsigned char)(cur.blue - pre.blue));\n                            eem.encode((unsigned char)(cur.alpha - pre.alpha));\n                        }\n                    }\n                }\n                // write out the magic byte to mark the end of the data\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n            }\n        };\n\n        template <typename image_type>\n        struct is_hsi_image\n        {\n            typedef typename image_traits<image_type>::pixel_type pixel_type;\n            const static bool value = pixel_traits<pixel_type>::hsi;\n        };\n\n        template <typename image_type>\n        struct save_dng_helper<image_type,typename enable_if<is_hsi_image<image_type> >::type>\n        {\n            static void save_dng (\n                const image_type& image_,\n                std::ostream& out\n            )\n            {\n                const_image_view<image_type> image(image_);\n                out.write(\"DNG\",3);\n                unsigned long version = 1;\n                serialize(version,out);\n                unsigned long type = hsi;\n                serialize(type,out);\n                serialize(image.nc(),out);\n                serialize(image.nr(),out);\n\n                encoder_type encoder;\n                encoder.set_stream(out);\n\n                hsi_pixel pre, cur;\n                eem_type eem(encoder);\n                for (long r = 0; r < image.nr(); ++r)\n                {\n                    for (long c = 0; c < image.nc(); ++c)\n                    {\n                        pre = predictor_hsi(image,r,c);\n                        assign_pixel(cur, image[r][c]);\n\n                        eem.encode((unsigned char)(cur.h - pre.h));\n                        eem.encode((unsigned char)(cur.s - pre.s));\n                        eem.encode((unsigned char)(cur.i - pre.i));\n                    }\n                }\n                // write out the magic byte to mark the end of the data\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n                eem.encode(dng_magic_byte);\n            }\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    inline typename disable_if<is_matrix<image_type> >::type save_dng (\n        const image_type& image,\n        std::ostream& out\n    )\n    {\n        using namespace dng_helpers_namespace;\n        save_dng_helper<image_type>::save_dng(image,out);\n    }\n\n    template <\n        typename EXP \n        >\n    inline void save_dng (\n        const matrix_exp<EXP>& image,\n        std::ostream& out\n    )\n    {\n        array2d<typename EXP::type> temp;\n        assign_image(temp, image);\n        using namespace dng_helpers_namespace;\n        save_dng_helper<array2d<typename EXP::type> >::save_dng(temp,out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void save_dng (\n        const image_type& image,\n        const std::string& file_name\n    )\n    {\n        std::ofstream fout(file_name.c_str(), std::ios::binary);\n        if (!fout)\n            throw image_save_error(\"Unable to open \" + file_name + \" for writing.\");\n        save_dng(image, fout);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void save_bmp (\n        const image_type& image,\n        const std::string& file_name\n    )\n    {\n        std::ofstream fout(file_name.c_str(), std::ios::binary);\n        if (!fout)\n            throw image_save_error(\"Unable to open \" + file_name + \" for writing.\");\n        save_bmp(image, fout);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IMAGE_SAVEr_\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_saver/image_saver_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_IMAGE_SAVEr_ABSTRACT_\n#ifdef DLIB_IMAGE_SAVEr_ABSTRACT_\n\n#include <iosfwd>\n#include \"../algs.h\"\n#include \"../pixel.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n    class image_save_error : public dlib::error \n    { \n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an exception used to indicate a failure to save an image.\n                Its type member variable will be set to EIMAGE_SAVE.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void save_bmp (\n        const image_type& image,\n        std::ostream& out \n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or any kind of matrix expression.\n        ensures\n            - writes the image to the out stream in the Microsoft Windows BMP format.\n            - image[0][0] will be in the upper left corner of the image.\n            - image[image.nr()-1][image.nc()-1] will be in the lower right\n              corner of the image.\n            - This routine can save images containing any type of pixel. However, it \n              will convert all color pixels into rgb_pixel and grayscale pixels into \n              uint8 type before saving to disk.\n        throws\n            - image_save_error\n                This exception is thrown if there is an error that prevents us\n                from saving the image.  \n            - std::bad_alloc \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void save_bmp (\n        const image_type& image,\n        const std::string& file_name\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or any kind of matrix expression.\n        ensures\n            - opens the file indicated by file_name with an output file stream named fout\n              and performs:\n              save_bmp(image,fout);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    /*!\n        dlib dng file format:\n            This is a file format I created for this library.  It is a lossless \n            compressed image format that is similar to the PNG format but uses\n            the dlib PPM compression algorithms instead of the DEFLATE algorithm.\n    !*/\n\n    template <\n        typename image_type \n        >\n    void save_dng (\n        const image_type& image,\n        std::ostream& out \n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or any kind of matrix expression.\n        ensures\n            - writes the image to the out stream in the dlib dng format.\n            - image[0][0] will be in the upper left corner of the image.\n            - image[image.nr()-1][image.nc()-1] will be in the lower right\n              corner of the image.\n            - This routine can save images containing any type of pixel.  However, the DNG\n              format can natively store only the following pixel types: rgb_pixel,\n              hsi_pixel, rgb_alpha_pixel, uint8, uint16, float, and double.\n              All other pixel types will be converted into one of these types as\n              appropriate before being saved to disk.\n        throws\n            - image_save_error\n                This exception is thrown if there is an error that prevents us\n                from saving the image.  \n            - std::bad_alloc \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void save_dng (\n        const image_type& image,\n        const std::string& file_name\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or any kind of matrix expression.\n        ensures\n            - opens the file indicated by file_name with an output file stream named fout \n              and performs:\n              save_dng(image,fout);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IMAGE_SAVEr_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_saver/save_png.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SAVE_PnG_CPPh_\n#define DLIB_SAVE_PnG_CPPh_\n\n// only do anything with this file if DLIB_PNG_SUPPORT is defined\n#ifdef DLIB_PNG_SUPPORT\n\n#include \"save_png.h\"\n#include <cstdio>\n#include <png.h>\n#include \"../byte_orderer.h\"\n\nnamespace dlib\n{\n    // Don't do anything when libpng calls us to tell us about an error.  Just return to \n    // our own code and throw an exception (at the long jump target).\n    void png_reader_user_error_fn_silent(png_structp  png_struct, png_const_charp ) \n    {\n        longjmp(png_jmpbuf(png_struct),1);\n    }\n    void png_reader_user_warning_fn_silent(png_structp , png_const_charp ) \n    {\n    }\n\n    namespace impl\n    {\n        void impl_save_png (\n            const std::string& file_name,\n            std::vector<unsigned char*>& row_pointers,\n            const long width,\n            const png_type type,\n            const int bit_depth\n        )\n        {\n\n            FILE *fp;\n            png_structp png_ptr;\n            png_infop info_ptr;\n\n            /* Open the file */\n            fp = fopen(file_name.c_str(), \"wb\");\n            if (fp == NULL)\n                throw image_save_error(\"Unable to open \" + file_name + \" for writing.\");\n\n            /* Create and initialize the png_struct with the desired error handler\n            * functions.  If you want to use the default stderr and longjump method,\n            * you can supply NULL for the last three parameters.  We also check that\n            * the library version is compatible with the one used at compile time,\n            * in case we are using dynamically linked libraries.  REQUIRED.\n            */\n            png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, &png_reader_user_error_fn_silent, &png_reader_user_warning_fn_silent);\n\n            if (png_ptr == NULL)\n            {\n                fclose(fp);\n                throw image_save_error(\"Error while writing PNG file \" + file_name);\n            }\n\n            /* Allocate/initialize the image information data.  REQUIRED */\n            info_ptr = png_create_info_struct(png_ptr);\n            if (info_ptr == NULL)\n            {\n                fclose(fp);\n                png_destroy_write_struct(&png_ptr,  NULL);\n                throw image_save_error(\"Error while writing PNG file \" + file_name);\n            }\n\n            /* Set error handling.  REQUIRED if you aren't supplying your own\n            * error handling functions in the png_create_write_struct() call.\n            */\n            if (setjmp(png_jmpbuf(png_ptr)))\n            {\n                /* If we get here, we had a problem writing the file */\n                fclose(fp);\n                png_destroy_write_struct(&png_ptr, &info_ptr);\n                throw image_save_error(\"Error while writing PNG file \" + file_name);\n            }\n\n            int color_type = 0;\n            switch(type)\n            {\n                case png_type_rgb:       color_type = PNG_COLOR_TYPE_RGB; break;\n                case png_type_rgb_alpha: color_type = PNG_COLOR_TYPE_RGB_ALPHA; break;\n                case png_type_gray:      color_type = PNG_COLOR_TYPE_GRAY; break;\n                default:\n                    {\n                        fclose(fp);\n                        png_destroy_write_struct(&png_ptr, &info_ptr);\n                        throw image_save_error(\"Invalid color type\");\n                    }\n            }\n\n\n            /* Set up the output control if you are using standard C streams */\n            png_init_io(png_ptr, fp);\n\n\n            int png_transforms = PNG_TRANSFORM_IDENTITY;\n            byte_orderer bo;\n            if (bo.host_is_little_endian())\n                png_transforms |= PNG_TRANSFORM_SWAP_ENDIAN;\n\n            const long height = row_pointers.size();\n\n\n            png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);\n            png_set_rows(png_ptr, info_ptr, &row_pointers[0]);\n            png_write_png(png_ptr, info_ptr, png_transforms, NULL);\n\n            /* Clean up after the write, and free any memory allocated */\n            png_destroy_write_struct(&png_ptr, &info_ptr);\n\n            /* Close the file */\n            fclose(fp);\n        }\n    }\n}\n\n#endif // DLIB_PNG_SUPPORT\n\n#endif // DLIB_SAVE_PnG_CPPh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_saver/save_png.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SAVE_PnG_Hh_\n#define DLIB_SAVE_PnG_Hh_\n\n#include \"save_png_abstract.h\"\n#include \"image_saver.h\"\n#include \"../array2d.h\"\n#include <vector>\n#include <string>\n#include \"../pixel.h\"\n#include \"../matrix/matrix_exp.h\"\n#include \"../image_transforms/assign_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        enum png_type\n        {\n            png_type_rgb,\n            png_type_rgb_alpha,\n            png_type_gray,\n        };\n\n        void impl_save_png (\n            const std::string& file_name,\n            std::vector<unsigned char*>& row_pointers,\n            const long width,\n            const png_type type,\n            const int bit_depth\n        );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    typename disable_if<is_matrix<image_type> >::type save_png(\n        const image_type& img_,\n        const std::string& file_name\n    )\n    {\n        const_image_view<image_type> img(img_);\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(img.size() != 0,\n            \"\\t save_png()\"\n            << \"\\n\\t You can't save an empty image as a PNG\"\n            );\n\n\n#ifndef DLIB_PNG_SUPPORT\n            /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n                You are getting this error because you are trying to use save_png() \n                but you haven't defined DLIB_PNG_SUPPORT.  You must do so to use\n                this function.   You must also make sure you set your build environment\n                to link against the libpng library.\n            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/\n            COMPILE_TIME_ASSERT(sizeof(image_type) == 0);\n#else\n        std::vector<unsigned char*> row_pointers(img.nr());\n        typedef typename image_traits<image_type>::pixel_type pixel_type;\n\n        if (is_same_type<rgb_pixel,pixel_type>::value)\n        {\n            for (unsigned long i = 0; i < row_pointers.size(); ++i)\n                row_pointers[i] = (unsigned char*)(&img[i][0]);\n\n            impl::impl_save_png(file_name, row_pointers, img.nc(), impl::png_type_rgb, 8);\n        }\n        else if (is_same_type<rgb_alpha_pixel,pixel_type>::value)\n        {\n            for (unsigned long i = 0; i < row_pointers.size(); ++i)\n                row_pointers[i] = (unsigned char*)(&img[i][0]);\n\n            impl::impl_save_png(file_name, row_pointers, img.nc(), impl::png_type_rgb_alpha, 8);\n        }\n        else if (pixel_traits<pixel_type>::hsi || pixel_traits<pixel_type>::rgb)\n        {\n            // convert from HSI to RGB (Or potentially RGB pixels that aren't laid out as R G B)\n            array2d<rgb_pixel> temp_img;\n            assign_image(temp_img, img_);\n            for (unsigned long i = 0; i < row_pointers.size(); ++i)\n                row_pointers[i] = (unsigned char*)(&temp_img[i][0]);\n\n            impl::impl_save_png(file_name, row_pointers, img.nc(), impl::png_type_rgb, 8);\n        }\n        else if (pixel_traits<pixel_type>::rgb_alpha)\n        {\n            // convert from RGBA pixels that aren't laid out as R G B A\n            array2d<rgb_alpha_pixel> temp_img;\n            assign_image(temp_img, img_);\n            for (unsigned long i = 0; i < row_pointers.size(); ++i)\n                row_pointers[i] = (unsigned char*)(&temp_img[i][0]);\n\n            impl::impl_save_png(file_name, row_pointers, img.nc(), impl::png_type_rgb_alpha, 8);\n        }\n        else // this is supposed to be grayscale \n        {\n            DLIB_CASSERT(pixel_traits<pixel_type>::grayscale, \"impossible condition detected\");\n\n            if (pixel_traits<pixel_type>::is_unsigned && sizeof(pixel_type) == 1)\n            {\n                for (unsigned long i = 0; i < row_pointers.size(); ++i)\n                    row_pointers[i] = (unsigned char*)(&img[i][0]);\n\n                impl::impl_save_png(file_name, row_pointers, img.nc(), impl::png_type_gray, 8);\n            }\n            else if (pixel_traits<pixel_type>::is_unsigned && sizeof(pixel_type) == 2)\n            {\n                for (unsigned long i = 0; i < row_pointers.size(); ++i)\n                    row_pointers[i] = (unsigned char*)(&img[i][0]);\n\n                impl::impl_save_png(file_name, row_pointers, img.nc(), impl::png_type_gray, 16);\n            }\n            else\n            {\n                // convert from whatever this is to 16bit grayscale \n                array2d<dlib::uint16> temp_img;\n                assign_image(temp_img, img_);\n                for (unsigned long i = 0; i < row_pointers.size(); ++i)\n                    row_pointers[i] = (unsigned char*)(&temp_img[i][0]);\n\n                impl::impl_save_png(file_name, row_pointers, img.nc(), impl::png_type_gray, 16);\n            }\n        }\n\n\n#endif\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP \n        >\n    void save_png(\n        const matrix_exp<EXP>& img,\n        const std::string& file_name\n    )\n    {\n        array2d<typename EXP::type> temp;\n        assign_image(temp, img);\n        save_png(temp, file_name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"save_png.cpp\"\n#endif\n\n#endif // DLIB_SAVE_PnG_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_saver/save_png_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SAVE_PnG_ABSTRACT_\n#ifdef DLIB_SAVE_PnG_ABSTRACT_\n\n#include \"../pixel.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type \n        >\n    void save_png (\n        const image_type& image,\n        const std::string& file_name\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or a matrix expression\n            - image.size() != 0\n        ensures\n            - writes the image to the file indicated by file_name in the PNG (Portable Network Graphics) \n              format.\n            - image[0][0] will be in the upper left corner of the image.\n            - image[image.nr()-1][image.nc()-1] will be in the lower right\n              corner of the image.\n            - This routine can save images containing any type of pixel.  However, save_png() can\n              only natively store the following pixel types: rgb_pixel, rgb_alpha_pixel, uint8, \n              and uint16.  All other pixel types will be converted into one of these types as \n              appropriate before being saved to disk.\n        throws\n            - image_save_error\n                This exception is thrown if there is an error that prevents us from saving \n                the image.  \n            - std::bad_alloc \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SAVE_PnG_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/assign_image.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ASSIGN_IMAGe_\n#define DLIB_ASSIGN_IMAGe_\n\n#include \"../pixel.h\"\n#include \"assign_image_abstract.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dest_image_type,\n        typename src_image_type\n        >\n    void impl_assign_image (\n        image_view<dest_image_type>& dest,\n        const src_image_type& src\n    )\n    {\n        dest.set_size(src.nr(),src.nc());\n        for (long r = 0; r < src.nr(); ++r)\n        {\n            for (long c = 0; c < src.nc(); ++c)\n            {\n                assign_pixel(dest[r][c], src(r,c));\n            }\n        }\n    }\n\n    template <\n        typename dest_image_type,\n        typename src_image_type\n        >\n    void impl_assign_image (\n        dest_image_type& dest_,\n        const src_image_type& src\n    )\n    {\n        image_view<dest_image_type> dest(dest_);\n        impl_assign_image(dest, src);\n    }\n\n    template <\n        typename dest_image_type,\n        typename src_image_type\n        >\n    void assign_image (\n        dest_image_type& dest,\n        const src_image_type& src\n    )\n    {\n        // check for the case where dest is the same object as src\n        if (is_same_object(dest,src))\n            return;\n\n        impl_assign_image(dest, mat(src));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dest_image_type,\n        typename src_image_type\n        >\n    void impl_assign_image_scaled (\n        image_view<dest_image_type>& dest,\n        const src_image_type& src,\n        const double thresh \n    )\n    {\n        DLIB_ASSERT( thresh > 0,\n            \"\\tvoid assign_image_scaled()\"\n            << \"\\n\\t You have given an threshold value\"\n            << \"\\n\\t thresh: \" << thresh \n            );\n\n\n        typedef typename image_traits<dest_image_type>::pixel_type dest_pixel;\n\n        // If the destination has a dynamic range big enough to contain the source image data then just do a \n        // regular assign_image()\n        if (pixel_traits<dest_pixel>::max() >= pixel_traits<typename src_image_type::type>::max() &&\n            pixel_traits<dest_pixel>::min() <= pixel_traits<typename src_image_type::type>::min() )\n        {\n            impl_assign_image(dest, src);\n            return;\n        }\n\n        dest.set_size(src.nr(),src.nc());\n\n        if (src.size() == 0)\n            return;\n\n        if (src.size() == 1)\n        {\n            impl_assign_image(dest, src);\n            return;\n        }\n\n        // gather image statistics \n        running_stats<double> rs;\n        for (long r = 0; r < src.nr(); ++r)\n        {\n            for (long c = 0; c < src.nc(); ++c)\n            {\n                rs.add(get_pixel_intensity(src(r,c)));\n            }\n        }\n        typedef typename pixel_traits<typename src_image_type::type>::basic_pixel_type spix_type;\n\n        if (std::numeric_limits<spix_type>::is_integer)\n        {\n            // If the destination has a dynamic range big enough to contain the source image data then just do a \n            // regular assign_image()\n            if (pixel_traits<dest_pixel>::max() >= rs.max() &&\n                pixel_traits<dest_pixel>::min() <= rs.min() )\n            {\n                impl_assign_image(dest, src);\n                return;\n            }\n        }\n\n        // Figure out the range of pixel values based on image statistics.  There might be some huge\n        // outliers so don't just pick the min and max values.\n        const double upper = std::min(rs.mean() + thresh*rs.stddev(), rs.max());\n        const double lower = std::max(rs.mean() - thresh*rs.stddev(), rs.min());\n\n\n        const double dest_min = pixel_traits<dest_pixel>::min();\n        const double dest_max = pixel_traits<dest_pixel>::max();\n\n        const double scale = (upper!=lower)? ((dest_max - dest_min) / (upper - lower)) : 0;\n\n        for (long r = 0; r < src.nr(); ++r)\n        {\n            for (long c = 0; c < src.nc(); ++c)\n            {\n                const double val = get_pixel_intensity(src(r,c)) - lower;\n\n                assign_pixel(dest[r][c], scale*val + dest_min);\n            }\n        }\n    }\n\n    template <\n        typename dest_image_type,\n        typename src_image_type\n        >\n    void impl_assign_image_scaled (\n        dest_image_type& dest_,\n        const src_image_type& src,\n        const double thresh \n    )\n    {\n        image_view<dest_image_type> dest(dest_);\n        impl_assign_image_scaled(dest, src, thresh);\n    }\n\n    template <\n        typename dest_image_type,\n        typename src_image_type\n        >\n    void assign_image_scaled (\n        dest_image_type& dest,\n        const src_image_type& src,\n        const double thresh = 4\n    )\n    {\n        // check for the case where dest is the same object as src\n        if (is_same_object(dest,src))\n            return;\n\n        impl_assign_image_scaled(dest, mat(src),thresh);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dest_image_type,\n        typename src_pixel_type\n        >\n    void assign_all_pixels (\n        image_view<dest_image_type>& dest_img,\n        const src_pixel_type& src_pixel\n    )\n    {\n        for (long r = 0; r < dest_img.nr(); ++r)\n        {\n            for (long c = 0; c < dest_img.nc(); ++c)\n            {\n                assign_pixel(dest_img[r][c], src_pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dest_image_type,\n        typename src_pixel_type\n        >\n    void assign_all_pixels (\n        dest_image_type& dest_img_,\n        const src_pixel_type& src_pixel\n    )\n    {\n        image_view<dest_image_type> dest_img(dest_img_);\n        assign_all_pixels(dest_img, src_pixel);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void assign_border_pixels (\n        image_view<image_type>& img,\n        long x_border_size,\n        long y_border_size,\n        const typename image_traits<image_type>::pixel_type& p\n    )\n    {\n        DLIB_ASSERT( x_border_size >= 0 && y_border_size >= 0,\n            \"\\tvoid assign_border_pixels(img, p, border_size)\"\n            << \"\\n\\tYou have given an invalid border_size\"\n            << \"\\n\\tx_border_size: \" << x_border_size\n            << \"\\n\\ty_border_size: \" << y_border_size\n            );\n\n        y_border_size = std::min(y_border_size, img.nr()/2+1);\n        x_border_size = std::min(x_border_size, img.nc()/2+1);\n\n        // assign the top border\n        for (long r = 0; r < y_border_size; ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                img[r][c] = p;\n            }\n        }\n\n        // assign the bottom border\n        for (long r = img.nr()-y_border_size; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                img[r][c] = p;\n            }\n        }\n\n        // now assign the two sides\n        for (long r = y_border_size; r < img.nr()-y_border_size; ++r)\n        {\n            // left border\n            for (long c = 0; c < x_border_size; ++c)\n                img[r][c] = p;\n\n            // right border\n            for (long c = img.nc()-x_border_size; c < img.nc(); ++c)\n                img[r][c] = p;\n        }\n    }\n\n    template <\n        typename image_type\n        >\n    void assign_border_pixels (\n        image_type& img_,\n        long x_border_size,\n        long y_border_size,\n        const typename image_traits<image_type>::pixel_type& p\n    )\n    {\n        image_view<image_type> img(img_);\n        assign_border_pixels(img, x_border_size, y_border_size, p);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void zero_border_pixels (\n        image_type& img,\n        long x_border_size,\n        long y_border_size\n    )\n    {\n        DLIB_ASSERT( x_border_size >= 0 && y_border_size >= 0,\n            \"\\tvoid zero_border_pixels(img, p, border_size)\"\n            << \"\\n\\tYou have given an invalid border_size\"\n            << \"\\n\\tx_border_size: \" << x_border_size\n            << \"\\n\\ty_border_size: \" << y_border_size\n            );\n\n        typename image_traits<image_type>::pixel_type zero_pixel;\n        assign_pixel_intensity(zero_pixel, 0);\n        assign_border_pixels(img, x_border_size, y_border_size, zero_pixel);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void zero_border_pixels (\n        image_view<image_type>& img,\n        long x_border_size,\n        long y_border_size\n    )\n    {\n        DLIB_ASSERT( x_border_size >= 0 && y_border_size >= 0,\n            \"\\tvoid zero_border_pixels(img, p, border_size)\"\n            << \"\\n\\tYou have given an invalid border_size\"\n            << \"\\n\\tx_border_size: \" << x_border_size\n            << \"\\n\\ty_border_size: \" << y_border_size\n            );\n\n        typename image_traits<image_type>::pixel_type zero_pixel;\n        assign_pixel_intensity(zero_pixel, 0);\n        assign_border_pixels(img, x_border_size, y_border_size, zero_pixel);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void zero_border_pixels (\n        image_view<image_type>& img,\n        rectangle inside\n    )\n    {\n        inside = inside.intersect(get_rect(img));\n        if (inside.is_empty())\n            return;\n\n        for (long r = 0; r < inside.top(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n                assign_pixel(img[r][c], 0);\n        }\n        for (long r = inside.top(); r <= inside.bottom(); ++r)\n        {\n            for (long c = 0; c < inside.left(); ++c)\n                assign_pixel(img[r][c], 0);\n            for (long c = inside.right()+1; c < img.nc(); ++c)\n                assign_pixel(img[r][c], 0);\n        }\n        for (long r = inside.bottom()+1; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n                assign_pixel(img[r][c], 0);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void zero_border_pixels (\n        image_type& img_,\n        const rectangle& inside\n    )\n    {\n        image_view<image_type> img(img_);\n        zero_border_pixels(img, inside);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ASSIGN_IMAGe_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/assign_image_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ASSIGN_IMAGe_ABSTRACT\n#ifdef DLIB_ASSIGN_IMAGe_ABSTRACT\n\n#include \"../pixel.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dest_image_type,\n        typename src_image_type\n        >\n    void assign_image (\n        dest_image_type& dest_img,\n        const src_image_type& src_img\n    );\n    /*!\n        requires\n            - src_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or any object convertible to a matrix\n              via mat().\n            - dest_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or an image_view.\n        ensures\n            - #dest_img.nc() == src_img.nc()\n            - #dest_img.nr() == src_img.nr()\n            - for all valid r and c:\n                - performs assign_pixel(#dest_img[r][c],src_img[r][c]) \n                  (i.e. copies the src image to dest image)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dest_image_type,\n        typename src_image_type\n        >\n    void assign_image_scaled (\n        dest_image_type& dest_img,\n        const src_image_type& src_img,\n        const double thresh = 4\n    );\n    /*!\n        requires\n            - src_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or any object convertible to a matrix\n              via mat().\n            - dest_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or an image_view.\n            - thresh > 0\n        ensures\n            - #dest_img.nc() == src_img.nc()\n            - #dest_img.nr() == src_img.nr()\n            - if (dest_img's pixels have a wide enough dynamic range to contain all the\n              pixels in src_img.  (Note that dynamic range is determined by the min() and \n              max() pixel_traits properties)) then\n                - performs: assign_image(dest_img, src_img) \n                  (i.e. in this case, no scaling is performed.  Just a normal color space \n                  conversion and copy )\n            - else\n                - #dest_img will be converted to a grayscale image\n                - scales the contents of src_img into the dynamic range of dest_img and then\n                  assigns the result into dest_img.  The thresh parameter is used to filter \n                  source pixel values which are outliers.  These outliers will saturate\n                  at the edge of the destination image's dynamic range.\n                - Specifically, for all valid r and c:\n                    - scales get_pixel_intensity(src_img[r][c]) into the dynamic range\n                      of the dest_img.  This is done by computing the mean and standard\n                      deviation of src_img. Call the mean M and the standard deviation\n                      D.  Then the scaling from src_img to dest_img is performed using\n                      the following mapping:\n                        let SRC_UPPER  = min(M + thresh*D, max(mat(src_img)))\n                        let SRC_LOWER  = max(M - thresh*D, min(mat(src_img)))\n                        let DEST_UPPER = pixel_traits<image_traits<dest_image_type>::pixel_type>::max()\n                        let DEST_LOWER = pixel_traits<image_traits<dest_image_type>::pixel_type>::min()\n\n                        MAPPING: [SRC_LOWER, SRC_UPPER] -> [DEST_LOWER, DEST_UPPER]\n\n                      Where this mapping is a linear mapping of values from the left range\n                      into the right range of values.  Source pixel values outside the left\n                      range are modified to be at the appropriate end of the range.\n\n                      The scaled pixel is then stored in dest_img[r][c].\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dest_image_type,\n        typename src_pixel_type\n        >\n    void assign_all_pixels (\n        dest_image_type& dest_img,\n        const src_pixel_type& src_pixel\n    );\n    /*!\n        requires\n            - dest_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or an image_view.\n            - pixel_traits<src_pixel_type> is defined  \n        ensures\n            - #dest_img.nc() == dest_img.nc()\n            - #dest_img.nr() == dest_img.nr()\n              (i.e. the size of dest_img isn't changed by this function)\n            - for all valid r and c:\n                - performs assign_pixel(#dest_img[r][c],src_pixel) \n                  (i.e. assigns the src pixel to every pixel in the dest image)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void assign_border_pixels (\n        image_type& img,\n        long x_border_size,\n        long y_border_size,\n        const typename image_traits<image_type>::pixel_type& p\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or an image_view\n            - x_border_size >= 0\n            - y_border_size >= 0\n        ensures\n            - #img.nc() == img.nc()\n            - #img.nr() == img.nr()\n              (i.e. the size of img isn't changed by this function)\n            - for all valid r such that r+y_border_size or r-y_border_size gives an invalid row\n                - for all valid c such that c+x_border_size or c-x_border_size gives an invalid column \n                    - performs assign_pixel(#img[r][c],p) \n                      (i.e. assigns the given pixel to every pixel in the border of img)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void zero_border_pixels (\n        image_type& img,\n        long x_border_size,\n        long y_border_size\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or an image_view\n            - x_border_size >= 0\n            - y_border_size >= 0\n        ensures\n            - #img.nc() == img.nc()\n            - #img.nr() == img.nr()\n              (i.e. the size of img isn't changed by this function)\n            - for all valid r such that r+y_border_size or r-y_border_size gives an invalid row\n                - for all valid c such that c+x_border_size or c-x_border_size gives an invalid column \n                    - performs assign_pixel(#img[r][c], 0 ) \n                      (i.e. assigns 0 to every pixel in the border of img)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void zero_border_pixels (\n        image_type& img,\n        rectangle inside\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or an image_view\n        ensures\n            - #img.nc() == img.nc()\n            - #img.nr() == img.nr()\n              (i.e. the size of img isn't changed by this function)\n            - All the pixels in img that are not contained inside the inside rectangle\n              given to this function are set to 0.  That is, anything not \"inside\" is on\n              the border and set to 0.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ASSIGN_IMAGe_ABSTRACT\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/colormaps.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RANDOMLY_COlOR_IMAGE_Hh_\n#define DLIB_RANDOMLY_COlOR_IMAGE_Hh_\n\n#include \"colormaps_abstract.h\"\n#include \"../hash.h\"\n#include \"../pixel.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct op_randomly_color_image : does_not_alias \n    {\n        op_randomly_color_image( const T& img_) : img(img_){}\n\n        const T& img;\n\n        const static long cost = 7;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef rgb_pixel type;\n        typedef const rgb_pixel const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const \n        { \n            const unsigned long gray = get_pixel_intensity(mat(img)(r,c));\n            if (gray != 0)\n            {\n                const uint32 h = murmur_hash3_2(gray,0);\n                rgb_pixel pix;\n                pix.red   = static_cast<unsigned char>(h)%200 + 55;\n                pix.green = static_cast<unsigned char>(h>>8)%200 + 55;\n                pix.blue  = static_cast<unsigned char>(h>>16)%200 + 55;\n                return pix;\n            }\n            else\n            {\n                // keep black pixels black\n                return rgb_pixel(0,0,0);\n            }\n        }\n\n        long nr () const { return num_rows(img); }\n        long nc () const { return num_columns(img); }\n    }; \n\n    template <\n        typename image_type\n        >\n    const matrix_op<op_randomly_color_image<image_type> >  \n    randomly_color_image (\n        const image_type& img\n    )\n    {\n        typedef op_randomly_color_image<image_type> op;\n        return matrix_op<op>(op(img));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct op_heatmap : does_not_alias \n    {\n        op_heatmap( \n            const T& img_,\n            const double max_val_,\n            const double min_val_\n            ) : img(img_), max_val(max_val_), min_val(min_val_){}\n\n        const T& img;\n\n        const double max_val;\n        const double min_val;\n\n        const static long cost = 7;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef rgb_pixel type;\n        typedef const rgb_pixel const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const \n        { \n            // scale the gray value into the range [0, 1]\n            const double gray = put_in_range(0, 1, (get_pixel_intensity(mat(img)(r,c)) - min_val)/(max_val-min_val));\n            rgb_pixel pix(0,0,0);\n\n            pix.red = static_cast<unsigned char>(std::min(gray/0.4,1.0)*255 + 0.5);\n\n            if (gray > 0.4)\n            {\n                pix.green = static_cast<unsigned char>(std::min((gray-0.4)/0.4,1.0)*255 + 0.5);\n            }\n            if (gray > 0.8)\n            {\n                pix.blue = static_cast<unsigned char>(std::min((gray-0.8)/0.2,1.0)*255 + 0.5);\n            }\n\n            return pix;\n        }\n\n        long nr () const { return num_rows(img); }\n        long nc () const { return num_columns(img); }\n    }; \n\n    template <\n        typename image_type\n        >\n    const matrix_op<op_heatmap<image_type> >  \n    heatmap (\n        const image_type& img,\n        double max_val,\n        double min_val = 0\n    )\n    {\n        typedef op_heatmap<image_type> op;\n        return matrix_op<op>(op(img,max_val,min_val));\n    }\n\n    template <\n        typename image_type\n        >\n    const matrix_op<op_heatmap<image_type> >  \n    heatmap (\n        const image_type& img\n    )\n    {\n        typedef op_heatmap<image_type> op;\n        return matrix_op<op>(op(img,max(mat(img)),min(mat(img))));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct op_jet : does_not_alias \n    {\n        op_jet( \n            const T& img_,\n            const double max_val_,\n            const double min_val_\n            ) : img(img_), max_val(max_val_), min_val(min_val_){}\n\n        const T& img;\n\n        const double max_val;\n        const double min_val;\n\n        const static long cost = 7;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef rgb_pixel type;\n        typedef const rgb_pixel const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const \n        { \n            // scale the gray value into the range [0, 8]\n            const double gray = 8*put_in_range(0, 1, (get_pixel_intensity(mat(img)(r,c)) - min_val)/(max_val-min_val));\n            rgb_pixel pix;\n            // s is the slope of color change\n            const double s = 1.0/2.0;\n\n            if (gray <= 1)\n            {\n                pix.red = 0;\n                pix.green = 0;\n                pix.blue = static_cast<unsigned char>((gray+1)*s*255 + 0.5);\n            }\n            else if (gray <= 3)\n            {\n                pix.red = 0;\n                pix.green = static_cast<unsigned char>((gray-1)*s*255 + 0.5);\n                pix.blue = 255;\n            }\n            else if (gray <= 5)\n            {\n                pix.red = static_cast<unsigned char>((gray-3)*s*255 + 0.5);\n                pix.green = 255;\n                pix.blue = static_cast<unsigned char>((5-gray)*s*255 + 0.5);\n            }\n            else if (gray <= 7)\n            {\n                pix.red = 255;\n                pix.green = static_cast<unsigned char>((7-gray)*s*255 + 0.5);\n                pix.blue = 0;\n            }\n            else\n            {\n                pix.red = static_cast<unsigned char>((9-gray)*s*255 + 0.5);\n                pix.green = 0;\n                pix.blue = 0;\n            }\n\n            return pix;\n        }\n\n        long nr () const { return num_rows(img); }\n        long nc () const { return num_columns(img); }\n    }; \n\n    template <\n        typename image_type\n        >\n    const matrix_op<op_jet<image_type> >  \n    jet (\n        const image_type& img,\n        double max_val,\n        double min_val = 0\n    )\n    {\n        typedef op_jet<image_type> op;\n        return matrix_op<op>(op(img,max_val,min_val));\n    }\n\n    template <\n        typename image_type\n        >\n    const matrix_op<op_jet<image_type> >  \n    jet (\n        const image_type& img\n    )\n    {\n        typedef op_jet<image_type> op;\n        return matrix_op<op>(op(img,max(mat(img)),min(mat(img))));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RANDOMLY_COlOR_IMAGE_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/colormaps_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RANDOMLY_COlOR_IMAGE_ABSTRACT_Hh_\n#ifdef DLIB_RANDOMLY_COlOR_IMAGE_ABSTRACT_Hh_\n\n#include \"../hash.h\"\n#include \"../pixel.h\"\n#include \"../matrix.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    const matrix_exp randomly_color_image (\n        const image_type& img\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h, or something convertible to a matrix\n              via mat().\n        ensures\n            - randomly generates a mapping from gray level pixel values\n              to the RGB pixel space and then uses this mapping to create\n              a colored version of img.  Returns a matrix which represents\n              this colored version of img.\n            - black pixels in img will remain black in the output image.  \n            - The returned matrix will have the same dimensions as img.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    const matrix_exp heatmap (\n        const image_type& img,\n        double max_val,\n        double min_val = 0\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h, or something convertible to a matrix\n              via mat().\n        ensures\n            - Interprets img as a grayscale image and returns a new matrix\n              which represents a colored version of img.  In particular, the\n              colors will depict img using a heatmap where pixels with a\n              value <= min_val are black and larger pixel values become\n              more red, then yellow, and then white as they approach max_val.\n            - The returned matrix will have the same dimensions as img.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    const matrix_exp heatmap (\n        const image_type& img\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h, or something convertible to a matrix\n              via mat().\n        ensures\n            - returns heatmap(img, max(mat(img)), min(mat(img)))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    const matrix_exp jet (\n        const image_type& img,\n        double max_val,\n        double min_val = 0\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h, or something convertible to a matrix\n              via mat().\n        ensures\n            - Interprets img as a grayscale image and returns a new matrix which represents\n              a colored version of img.  In particular, the colors will depict img using a\n              jet color scheme where pixels with a value <= min_val are dark blue and\n              larger pixel values become light blue, then yellow, and then finally red as\n              they approach max_Val.\n            - The returned matrix will have the same dimensions as img.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    const matrix_exp jet (\n        const image_type& img\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h, or something convertible to a matrix\n              via mat().\n        ensures\n            - returns jet(img, max(mat(img)), min(mat(img)))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RANDOMLY_COlOR_IMAGE_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/draw.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DRAW_IMAGe_\n#define DLIB_DRAW_IMAGe_\n\n#include \"draw_abstract.h\"\n#include \"../algs.h\"\n#include \"../pixel.h\"\n#include \"../matrix.h\"\n#include <cmath>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pixel_type\n        >\n    void draw_line (\n        long x1,\n        long y1,\n        long x2,\n        long y2,\n        image_type& c_,\n        const pixel_type& val\n    ) \n    {\n        image_view<image_type> c(c_);\n        if (x1 == x2)\n        {\n            // make sure y1 comes before y2\n            if (y1 > y2)\n                swap(y1,y2);\n\n            if (x1 < 0 || x1 >= c.nc())\n                return;\n\n\n            // this is a vertical line\n            for (long y = y1; y <= y2; ++y)\n            {\n                if (y < 0 || y >= c.nr())\n                    continue;\n\n                assign_pixel(c[y][x1], val);\n            }\n        }\n        else if (y1 == y2)\n        {\n\n            // make sure x1 comes before x2\n            if (x1 > x2)\n                swap(x1,x2);\n\n            if (y1 < 0 || y1 >= c.nr())\n                return;\n\n            // this is a horizontal line\n            for (long x = x1; x <= x2; ++x)\n            {\n                if (x < 0 || x >= c.nc())\n                    continue;\n\n                assign_pixel(c[y1][x] , val);\n            }\n        }\n        else\n        {\n            // This part is a little more complicated because we are going to perform alpha\n            // blending so the diagonal lines look nice.\n            const rectangle valid_area = get_rect(c);\n            rgb_alpha_pixel alpha_pixel;\n            assign_pixel(alpha_pixel, val);\n            const unsigned char max_alpha = alpha_pixel.alpha;\n\n            const long rise = (((long)y2) - ((long)y1));\n            const long run = (((long)x2) - ((long)x1));\n            if (std::abs(rise) < std::abs(run))\n            {\n                const double slope = ((double)rise)/run;\n\n\n                double first, last;\n\n\n                if (x1 > x2)                \n                {\n                    first = std::max(x2,valid_area.left());\n                    last = std::min(x1,valid_area.right());\n                }\n                else\n                {\n                    first = std::max(x1,valid_area.left());\n                    last = std::min(x2,valid_area.right());\n                }                             \n\n                long y;\n                long x;\n                const double x1f = x1;\n                const double y1f = y1;\n                for (double i = first; i <= last; ++i)\n                {   \n                    const double dy = slope*(i-x1f) + y1f;\n                    const double dx = i;\n\n                    y = static_cast<long>(dy);\n                    x = static_cast<long>(dx);\n\n\n                    if (y >= valid_area.top() && y <= valid_area.bottom())\n                    {\n                        alpha_pixel.alpha = static_cast<unsigned char>((1.0-(dy-y))*max_alpha);\n                        assign_pixel(c[y][x], alpha_pixel);\n                    }\n                    if (y+1 >= valid_area.top() && y+1 <= valid_area.bottom())\n                    {\n                        alpha_pixel.alpha = static_cast<unsigned char>((dy-y)*max_alpha);\n                        assign_pixel(c[y+1][x], alpha_pixel);\n                    }\n                }         \n            }\n            else\n            {\n                const double slope = ((double)run)/rise;\n\n\n                double first, last;\n\n\n                if (y1 > y2)                \n                {\n                    first = std::max(y2,valid_area.top());\n                    last = std::min(y1,valid_area.bottom());\n                }\n                else\n                {\n                    first = std::max(y1,valid_area.top());\n                    last = std::min(y2,valid_area.bottom());\n                }                             \n\n                long x;\n                long y;\n                const double x1f = x1;\n                const double y1f = y1;\n                for (double i = first; i <= last; ++i)\n                {   \n                    const double dx = slope*(i-y1f) + x1f;\n                    const double dy = i;\n\n                    y = static_cast<long>(dy);\n                    x = static_cast<long>(dx);\n\n                    if (x >= valid_area.left() && x <= valid_area.right())\n                    {\n                        alpha_pixel.alpha = static_cast<unsigned char>((1.0-(dx-x))*max_alpha);\n                        assign_pixel(c[y][x], alpha_pixel);\n                    }\n                    if (x+1 >= valid_area.left() && x+1 <= valid_area.right())\n                    {\n                        alpha_pixel.alpha = static_cast<unsigned char>((dx-x)*max_alpha);\n                        assign_pixel(c[y][x+1], alpha_pixel);\n                    }\n                } \n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pixel_type\n        >\n    void draw_line (\n        image_type& c,\n        const point& p1,\n        const point& p2,\n        const pixel_type& val\n    ) \n    {\n        draw_line(p1.x(),p1.y(),p2.x(),p2.y(),c,val);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pixel_type\n        >\n    void draw_rectangle (\n        image_type& c,\n        const rectangle& rect,\n        const pixel_type& val\n    ) \n    {\n        draw_line(c, rect.tl_corner(), rect.tr_corner(), val);\n        draw_line(c, rect.bl_corner(), rect.br_corner(), val);\n        draw_line(c, rect.tl_corner(), rect.bl_corner(), val);\n        draw_line(c, rect.tr_corner(), rect.br_corner(), val);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pixel_type\n        >\n    void draw_rectangle (\n        image_type& c,\n        const rectangle& rect,\n        const pixel_type& val,\n        unsigned int thickness\n    ) \n    {\n        for (int i = 0; i < thickness; ++i)\n        {\n            if ((i%2)==0)\n                draw_rectangle(c,shrink_rect(rect,(i+1)/2),val);\n            else\n                draw_rectangle(c,grow_rect(rect,(i+1)/2),val);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pixel_type\n        >\n    void fill_rect (\n        image_type& img_,\n        const rectangle& rect,\n        const pixel_type& pixel\n    )\n    {\n        image_view<image_type> img(img_);\n        rectangle area = rect.intersect(get_rect(img));\n\n        for (long r = area.top(); r <= area.bottom(); ++r)\n        {\n            for (long c = area.left(); c <= area.right(); ++c)\n            {\n                assign_pixel(img[r][c], pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    matrix<typename image_traits<typename image_array_type::value_type>::pixel_type> tile_images (\n        const image_array_type& images\n    )\n    {\n        typedef typename image_traits<typename image_array_type::value_type>::pixel_type T;\n\n        if (images.size() == 0)\n            return matrix<T>();\n\n        const unsigned long size_nc = square_root(images.size());\n        const unsigned long size_nr = (size_nc*(size_nc-1)>=images.size())? size_nc-1 : size_nc;\n        // Figure out the size we have to use for each chip in the big main image.  We will\n        // use the largest dimensions seen across all the chips.\n        long nr = 0;\n        long nc = 0;\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            nr = std::max(num_rows(images[i]), nr);\n            nc = std::max(num_columns(images[i]), nc);\n        }\n\n        matrix<T> temp(size_nr*nr, size_nc*nc);\n        T background_color;\n        assign_pixel(background_color, 0);\n        temp = background_color;\n        unsigned long idx = 0;\n        for (unsigned long r = 0; r < size_nr; ++r)\n        {\n            for (unsigned long c = 0; c < size_nc; ++c)\n            {\n                if (idx < images.size())\n                {\n                    set_subm(temp, r*nr, c*nc, nr, nc) = mat(images[idx]);\n                }\n                ++idx;\n            }\n        }\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DRAW_IMAGe_\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/draw_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_DRAW_IMAGe_ABSTRACT\n#ifdef DLIB_DRAW_IMAGe_ABSTRACT\n\n#include \"../matrix.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pixel_type\n        >\n    void draw_line (\n        image_type& img,\n        const point& p1,\n        const point& p2,\n        const pixel_type& val\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - #img.nr() == img.nr() && #img.nc() == img.nc()\n              (i.e. the dimensions of the input image are not changed)\n            - for all valid r and c that are on the line between point p1 and p2:\n                - performs assign_pixel(img[r][c], val)\n                  (i.e. it draws the line from p1 to p2 onto the image)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pixel_type\n        >\n    void draw_line (\n        long x1,\n        long y1,\n        long x2,\n        long y2,\n        image_type& img,\n        const pixel_type& val\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - performs draw_line(img, point(x1,y1), point(x2,y2), val)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pixel_type\n        >\n    void draw_rectangle (\n        image_type& img,\n        const rectangle& rect,\n        const pixel_type& val,\n        unsigned int thickness = 1\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - pixel_traits<pixel_type> is defined\n        ensures\n            - Draws the given rectangle onto the image img.  It does this by calling\n              draw_line() four times to draw the four sides of the rectangle.  \n            - The rectangle is drawn with the color given by val.\n            - The drawn rectangle will have edges that are thickness pixels wide.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename image_type,\n        typename pixel_type\n        >\n    void fill_rect (\n        image_type& img,\n        const rectangle& rect,\n        const pixel_type& pixel\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - pixel_traits<pixel_type> is defined\n        ensures\n            - fills the area defined by rect in the given image with the given pixel value.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    matrix<typename image_traits<typename image_array_type::value_type>::pixel_type> tile_images (\n        const image_array_type& images\n    );\n    /*!\n        requires\n            - image_array_type is a dlib::array of image objects where each image object\n              implements the interface defined in dlib/image_processing/generic_image.h \n        ensures\n            - This function takes the given images and tiles them into a single large\n              square image and returns this new big tiled image.  Therefore, it is a useful\n              method to visualize many small images at once.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DRAW_IMAGe_ABSTRACT\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/edge_detector.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_EDGE_DETECTOr_\n#define DLIB_EDGE_DETECTOr_\n\n#include \"edge_detector_abstract.h\"\n#include \"../pixel.h\"\n#include \"../array2d.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    inline char edge_orientation (\n        const T& x_,\n        const T& y_\n    )\n    {\n\n        // if this is a perfectly horizontal gradient then return right away\n        if (x_ == 0)\n        {\n            return '|';\n        }\n        else if (y_ == 0) // if this is a perfectly vertical gradient then return right away\n        {\n            return '-';\n        }\n\n        // Promote x so that when we multiply by 128 later we know overflow won't happen.\n        typedef typename promote<T>::type type;\n        type x = x_;\n        type y = y_;\n\n        if (x < 0)\n        {\n            x = -x;\n            if (y < 0)\n            {\n                y = -y;\n                x *= 128;\n                const type temp = x/y;\n                if (temp > 309)\n                    return '-';\n                else if (temp > 53)\n                    return '/';\n                else\n                    return '|';\n            }\n            else\n            {\n                x *= 128;\n                const type temp = x/y;\n                if (temp > 309)\n                    return '-';\n                else if (temp > 53)\n                    return '\\\\';\n                else\n                    return '|';\n            }\n        }\n        else\n        {\n            if (y < 0)\n            {\n                y = -y;\n                x *= 128;\n\n                const type temp = x/y;\n                if (temp > 309)\n                    return '-';\n                else if (temp > 53)\n                    return '\\\\';\n                else\n                    return '|';\n            }\n            else\n            {\n                x *= 128;\n\n                const type temp = x/y;\n                if (temp > 309)\n                    return '-';\n                else if (temp > 53)\n                    return '/';\n                else\n                    return '|';\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void sobel_edge_detector (\n        const in_image_type& in_img_,\n        out_image_type& horz_,\n        out_image_type& vert_\n    )\n    {\n        typedef typename image_traits<out_image_type>::pixel_type pixel_type;\n        COMPILE_TIME_ASSERT(pixel_traits<pixel_type>::is_unsigned == false);\n        DLIB_ASSERT( !is_same_object(in_img_,horz_) && !is_same_object(in_img_,vert_) &&\n                     !is_same_object(horz_,vert_),\n            \"\\tvoid sobel_edge_detector(in_img_, horz_, vert_)\"\n            << \"\\n\\t You can't give the same image as more than one argument\"\n            << \"\\n\\t is_same_object(in_img_,horz_): \" << is_same_object(in_img_,horz_)\n            << \"\\n\\t is_same_object(in_img_,vert_): \" << is_same_object(in_img_,vert_)\n            << \"\\n\\t is_same_object(horz_,vert_):    \" << is_same_object(horz_,vert_)\n            );\n\n\n        const int vert_filter[3][3] = {{-1,-2,-1}, \n        {0,0,0}, \n        {1,2,1}};\n        const int horz_filter[3][3] = { {-1,0,1}, \n        {-2,0,2}, \n        {-1,0,1}};\n\n        const long M = 3;\n        const long N = 3;\n\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> horz(horz_);\n        image_view<out_image_type> vert(vert_);\n\n        horz.set_size(in_img.nr(),in_img.nc());\n        vert.set_size(in_img.nr(),in_img.nc());\n\n        assign_border_pixels(horz,1,1,0);\n        assign_border_pixels(vert,1,1,0);\n\n        // figure out the range that we should apply the filter to\n        const long first_row = M/2;\n        const long first_col = N/2;\n        const long last_row = in_img.nr() - M/2;\n        const long last_col = in_img.nc() - N/2;\n\n\n        // apply the filter to the image\n        for (long r = first_row; r < last_row; ++r)\n        {\n            for (long c = first_col; c < last_col; ++c)\n            {\n                typedef typename pixel_traits<typename image_traits<in_image_type>::pixel_type>::basic_pixel_type bp_type;\n\n                typename promote<bp_type>::type p, horz_temp, vert_temp;\n                horz_temp = 0;\n                vert_temp = 0;\n                for (long m = 0; m < M; ++m)\n                {\n                    for (long n = 0; n < N; ++n)\n                    {\n                        // pull out the current pixel and put it into p\n                        p = get_pixel_intensity(in_img[r-M/2+m][c-N/2+n]);\n\n                        horz_temp += p*horz_filter[m][n];\n                        vert_temp += p*vert_filter[m][n];\n                    }\n                }\n\n                assign_pixel(horz[r][c] , horz_temp);\n                assign_pixel(vert[r][c] , vert_temp);\n\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T>\n        typename promote<T>::type square (const T& a)\n        { \n            return static_cast<T>(a)*static_cast<T>(a); \n        }\n    }\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void suppress_non_maximum_edges (\n        const in_image_type& horz_,\n        const in_image_type& vert_,\n        out_image_type& out_img_\n    )\n    {\n        const_image_view<in_image_type> horz(horz_);\n        const_image_view<in_image_type> vert(vert_);\n        image_view<out_image_type> out_img(out_img_);\n\n        COMPILE_TIME_ASSERT(is_signed_type<typename image_traits<in_image_type>::pixel_type>::value);\n        DLIB_ASSERT( horz.nr() == vert.nr() && horz.nc() == vert.nc(),\n            \"\\tvoid suppress_non_maximum_edges(horz, vert, out_img)\"\n            << \"\\n\\tYou have to give horz and vert gradient images that are the same size\"\n            << \"\\n\\thorz.nr():   \" << horz.nr() \n            << \"\\n\\thorz.nc():   \" << horz.nc() \n            << \"\\n\\tvert.nr():   \" << vert.nr() \n            << \"\\n\\tvert.nc():   \" << vert.nc() \n            );\n        DLIB_ASSERT( !is_same_object(out_img_,horz_) && !is_same_object(out_img_,vert_),\n            \"\\tvoid suppress_non_maximum_edges(horz_, vert_, out_img_)\"\n            << \"\\n\\t out_img can't be the same as one of the input images.\"\n            << \"\\n\\t is_same_object(out_img_,horz_):    \" << is_same_object(out_img_,horz_)\n            << \"\\n\\t is_same_object(out_img_,vert_):    \" << is_same_object(out_img_,vert_)\n            );\n\n        using std::min;\n        using std::abs;\n\n\n        // if there isn't any input image then don't do anything\n        if (horz.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(horz.nr(),horz.nc());\n\n        zero_border_pixels(out_img,1,1);\n\n        // now do non maximum suppression while we copy the \n        const long M = 3;\n        const long N = 3;\n\n        // figure out the range that we should apply the filter to\n        const long first_row = M/2;\n        const long first_col = N/2;\n        const long last_row = horz.nr() - M/2;\n        const long last_col = horz.nc() - N/2;\n\n\n        // apply the filter to the image\n        for (long r = first_row; r < last_row; ++r)\n        {\n            for (long c = first_col; c < last_col; ++c)\n            {\n                typedef typename promote<typename image_traits<in_image_type>::pixel_type>::type T;\n                const T y = horz[r][c];\n                const T x = vert[r][c];\n\n                using impl::square;\n\n                const T val = square(horz[r][c]) + square(vert[r][c]); \n\n                const char ori = edge_orientation(x,y);\n                const unsigned char zero = 0;\n                switch (ori)\n                {\n                    case '-':\n                        if (square(horz[r-1][c])+square(vert[r-1][c]) > val || square(horz[r+1][c]) + square(vert[r+1][c]) > val)\n                            assign_pixel(out_img[r][c] , zero);\n                        else\n                            assign_pixel(out_img[r][c] , std::sqrt((double)val));\n                        break;\n\n                    case '|':\n                        if (square(horz[r][c-1]) + square(vert[r][c-1]) > val || square(horz[r][c+1]) + square(vert[r][c+1]) > val)\n                            assign_pixel(out_img[r][c] , zero);\n                        else\n                            assign_pixel(out_img[r][c] , std::sqrt((double)val));\n                        break;\n\n                    case '/':\n                        if (square(horz[r-1][c-1]) + square(vert[r-1][c-1]) > val || square(horz[r+1][c+1]) + square(vert[r+1][c+1]) > val)\n                            assign_pixel(out_img[r][c] , zero);\n                        else\n                            assign_pixel(out_img[r][c] , std::sqrt((double)val));\n                        break;\n\n                    case '\\\\':\n                        if (square(horz[r+1][c-1]) + square(vert[r+1][c-1]) > val || square(horz[r-1][c+1]) + square(vert[r-1][c+1]) > val)\n                            assign_pixel(out_img[r][c] , zero);\n                        else\n                            assign_pixel(out_img[r][c] , std::sqrt((double)val));\n                        break;\n\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_EDGE_DETECTOr_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/edge_detector_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_EDGE_DETECTOr_ABSTRACT_\n#ifdef DLIB_EDGE_DETECTOr_ABSTRACT_\n\n#include \"../pixel.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    inline char edge_orientation (\n        const T& x,\n        const T& y\n    );\n    /*!\n        ensures\n            - returns the orientation of the line drawn from the origin to the point (x,y).\n              The orientation is represented pictorially using the four ascii \n              characters /,|,\\, and -.\n            - if (the line is horizontal) then \n                returns '-' \n            - if (the line is vertical) then \n                returns '|' \n            - if (the line is diagonal with a positive slope) then \n                returns '/' \n            - if (the line is diagonal with a negative slope) then \n                returns '\\\\' \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void sobel_edge_detector (\n        const in_image_type& in_img,\n        out_image_type& horz,\n        out_image_type& vert\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type must use signed grayscale pixels\n            - is_same_object(in_img,horz) == false\n            - is_same_object(in_img,vert) == false\n            - is_same_object(horz,vert) == false\n        ensures\n            - Applies the sobel edge detector to the given input image and stores the resulting\n              edge detections in the horz and vert images\n            - #horz.nr() == in_img.nr()\n            - #horz.nc() == in_img.nc()\n            - #vert.nr() == in_img.nr()\n            - #vert.nc() == in_img.nc()\n            - for all valid r and c:    \n                - #horz[r][c] == the magnitude of the horizontal gradient at the point in_img[r][c]\n                - #vert[r][c] == the magnitude of the vertical gradient at the point in_img[r][c]\n                - edge_orientation(#vert[r][c], #horz[r][c]) == the edge direction at this point in \n                  the image\n    !*/\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void suppress_non_maximum_edges (\n        const in_image_type& horz,\n        const in_image_type& vert,\n        out_image_type& out_img\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - horz.nr() == vert.nr()\n            - horz.nc() == vert.nc()\n            - is_same_object(out_img, horz) == false\n            - is_same_object(out_img, vert) == false\n            - image_traits<in_image_type>::pixel_type == A signed scalar type (e.g. int, double, etc.) \n        ensures\n            - #out_img.nr() = horz.nr()\n            - #out_img.nc() = horz.nc()\n            - let edge_strength(r,c) == sqrt(pow(horz[r][c],2) + pow(vert[r][c],2))\n              (i.e. The Euclidean norm of the gradient)\n            - for all valid r and c:\n                - if (edge_strength(r,c) is at a maximum with respect to its 2 neighboring\n                  pixels along the line given by edge_orientation(vert[r][c],horz[r][c])) then\n                    - performs assign_pixel(#out_img[r][c], edge_strength(r,c))\n                - else\n                    - performs assign_pixel(#out_img[r][c], 0)\n    !*/\n    \n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_EDGE_DETECTOr_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/equalize_histogram.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_EQUALIZE_HISTOGRAm_\n#define DLIB_EQUALIZE_HISTOGRAm_\n\n#include \"../pixel.h\"\n#include \"equalize_histogram_abstract.h\"\n#include <vector>\n#include \"../enable_if.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        long R,\n        long C,\n        typename MM\n        >\n    void get_histogram (\n        const in_image_type& in_img_,\n        matrix<unsigned long,R,C,MM>& hist\n    )\n    {\n        typedef typename image_traits<in_image_type>::pixel_type pixel_type;\n        COMPILE_TIME_ASSERT( pixel_traits<pixel_type>::is_unsigned == true );\n\n        typedef typename pixel_traits<pixel_type>::basic_pixel_type in_image_basic_pixel_type;\n        COMPILE_TIME_ASSERT( sizeof(in_image_basic_pixel_type) <= 2);\n\n        // make sure hist is the right size\n        if (R == 1)\n            hist.set_size(1,pixel_traits<pixel_type>::max()+1);\n        else\n            hist.set_size(pixel_traits<pixel_type>::max()+1,1);\n\n\n        set_all_elements(hist,0);\n\n        const_image_view<in_image_type> in_img(in_img_);\n        // compute the histogram \n        for (long r = 0; r < in_img.nr(); ++r)\n        {\n            for (long c = 0; c < in_img.nc(); ++c)\n            {\n                unsigned long p = get_pixel_intensity(in_img[r][c]);\n                ++hist(p);\n            }\n        }\n    }\n\n// ---------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type \n        >\n    void equalize_histogram (\n        const in_image_type& in_img_,\n        out_image_type& out_img_\n    )\n    {\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n        typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::is_unsigned == true );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::is_unsigned == true );\n\n        typedef typename pixel_traits<in_pixel_type>::basic_pixel_type in_image_basic_pixel_type;\n        COMPILE_TIME_ASSERT( sizeof(in_image_basic_pixel_type) <= 2);\n\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(in_img.nr(),in_img.nc());\n\n        unsigned long p;\n\n        matrix<unsigned long,1,0> histogram;\n        get_histogram(in_img_, histogram);\n        in_img = in_img_;\n\n        double scale = pixel_traits<out_pixel_type>::max();\n        if (in_img.size() > histogram(0))\n            scale /= in_img.size()-histogram(0);\n        else\n            scale = 0;\n\n        // make the black pixels remain black in the output image\n        histogram(0) = 0;\n\n        // compute the transform function\n        for (long i = 1; i < histogram.size(); ++i)\n            histogram(i) += histogram(i-1);\n        // scale so that it is in the range [0,pixel_traits<out_pixel_type>::max()]\n        for (long i = 0; i < histogram.size(); ++i)\n            histogram(i) = static_cast<unsigned long>(histogram(i)*scale);\n\n        // now do the transform\n        for (long row = 0; row < in_img.nr(); ++row)\n        {\n            for (long col = 0; col < in_img.nc(); ++col)\n            {\n                p = histogram(get_pixel_intensity(in_img[row][col]));\n                assign_pixel(out_img[row][col], in_img[row][col]);\n                assign_pixel_intensity(out_img[row][col],p);\n            }\n        }\n\n    }\n\n    template <\n        typename image_type \n        >\n    void equalize_histogram (\n        image_type& img\n    )\n    {\n        equalize_histogram(img,img);\n    }\n\n// ---------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_EQUALIZE_HISTOGRAm_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/equalize_histogram_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_EQUALIZE_HISTOGRAm_ABSTRACT_\n#ifdef DLIB_EQUALIZE_HISTOGRAm_ABSTRACT_\n\n#include \"../pixel.h\"\n#include \"../matrix.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type \n        >\n    void equalize_histogram (\n        const in_image_type& in_img,\n        out_image_type& out_img\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - Let pixel_type be the type of pixel in either input or output images, then we\n              must have:\n                - pixel_traits<pixel_type>::has_alpha == false\n                - pixel_traits<pixel_type>::is_unsigned == true \n            - For the input image pixel type, we have the additional requirement that:\n                - pixel_traits<pixel_type>::max() <= 65535 \n        ensures\n            - #out_img == the histogram equalized version of in_img\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n    template <\n        typename image_type \n        >\n    void equalize_histogram (\n        image_type& img\n    );\n    /*!\n        requires\n            - it is valid to call equalize_histogram(img,img)\n        ensures\n            - calls equalize_histogram(img,img);\n    !*/\n\n// ---------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        long R,\n        long C,\n        typename MM\n        >\n    void get_histogram (\n        const in_image_type& in_img,\n        matrix<unsigned long,R,C,MM>& hist\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - Let pixel_type denote the type of pixel in in_img, then we must have:\n                - pixel_traits<pixel_type>::is_unsigned == true \n                - pixel_traits<pixel_type>::max() <= 65535 \n            - hist must be capable of representing a column vector of length \n              pixel_traits<typename in_image_type>::max(). I.e. if R and C are nonzero\n              then they must be values that don't conflict with the previous sentence.\n        ensures\n            - #hist.size() == pixel_traits<typename in_image_type>::max()\n            - #hist.nc() == 1 || #hist.nr() == 1 (i.e. hist is either a row or column vector)\n            - #hist == the histogram for in_img.  I.e. it is the case that for all\n              valid i:\n                - hist(i) == the number of times a pixel with intensity i appears\n                  in in_img\n    !*/\n\n// ---------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_EQUALIZE_HISTOGRAm_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/fhog.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_fHOG_Hh_\n#define DLIB_fHOG_Hh_\n\n#include \"fhog_abstract.h\"\n#include \"../matrix.h\"\n#include \"../array2d.h\"\n#include \"../array.h\"\n#include \"../geometry.h\"\n#include \"assign_image.h\"\n#include \"draw.h\"\n#include \"interpolation.h\"\n#include \"../simd/simd4i.h\"\n#include \"../simd/simd4f.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl_fhog\n    {\n        template <typename image_type>\n        inline typename dlib::enable_if_c<pixel_traits<typename image_type::pixel_type>::rgb>::type get_gradient (\n            const int r,\n            const int c,\n            const image_type& img,\n            matrix<double,2,1>& grad,\n            double& len\n        )\n        {\n            matrix<double,2,1> grad2, grad3;\n            // get the red gradient\n            grad(0) = (int)img[r][c+1].red-(int)img[r][c-1].red; \n            grad(1) = (int)img[r+1][c].red-(int)img[r-1][c].red;\n            len = length_squared(grad);\n\n            // get the green gradient\n            grad2(0) = (int)img[r][c+1].green-(int)img[r][c-1].green; \n            grad2(1) = (int)img[r+1][c].green-(int)img[r-1][c].green;\n            double v2 = length_squared(grad2);\n\n            // get the blue gradient\n            grad3(0) = (int)img[r][c+1].blue-(int)img[r][c-1].blue; \n            grad3(1) = (int)img[r+1][c].blue-(int)img[r-1][c].blue;\n            double v3 = length_squared(grad3);\n\n            // pick color with strongest gradient\n            if (v2 > len) \n            {\n                len = v2;\n                grad = grad2;\n            } \n            if (v3 > len) \n            {\n                len = v3;\n                grad = grad3;\n            }\n        }\n\n        template <typename image_type>\n        inline typename dlib::enable_if_c<pixel_traits<typename image_type::pixel_type>::rgb>::type get_gradient (\n            const int r,\n            const int c,\n            const image_type& img,\n            simd4f& grad_x,\n            simd4f& grad_y,\n            simd4f& len\n        )\n        {\n            simd4i rleft((int)img[r][c-1].red, \n                        (int)img[r][c].red,\n                        (int)img[r][c+1].red,\n                        (int)img[r][c+2].red);\n            simd4i rright((int)img[r][c+1].red, \n                         (int)img[r][c+2].red,\n                         (int)img[r][c+3].red,\n                         (int)img[r][c+4].red);\n            simd4i rtop((int)img[r-1][c].red,\n                       (int)img[r-1][c+1].red,\n                       (int)img[r-1][c+2].red,\n                       (int)img[r-1][c+3].red);\n            simd4i rbottom((int)img[r+1][c].red,\n                          (int)img[r+1][c+1].red,\n                          (int)img[r+1][c+2].red,\n                          (int)img[r+1][c+3].red);\n\n            simd4i gleft((int)img[r][c-1].green, \n                        (int)img[r][c].green,\n                        (int)img[r][c+1].green,\n                        (int)img[r][c+2].green);\n            simd4i gright((int)img[r][c+1].green, \n                         (int)img[r][c+2].green,\n                         (int)img[r][c+3].green,\n                         (int)img[r][c+4].green);\n            simd4i gtop((int)img[r-1][c].green,\n                       (int)img[r-1][c+1].green,\n                       (int)img[r-1][c+2].green,\n                       (int)img[r-1][c+3].green);\n            simd4i gbottom((int)img[r+1][c].green,\n                          (int)img[r+1][c+1].green,\n                          (int)img[r+1][c+2].green,\n                          (int)img[r+1][c+3].green);\n\n            simd4i bleft((int)img[r][c-1].blue, \n                        (int)img[r][c].blue,\n                        (int)img[r][c+1].blue,\n                        (int)img[r][c+2].blue);\n            simd4i bright((int)img[r][c+1].blue, \n                         (int)img[r][c+2].blue,\n                         (int)img[r][c+3].blue,\n                         (int)img[r][c+4].blue);\n            simd4i btop((int)img[r-1][c].blue,\n                       (int)img[r-1][c+1].blue,\n                       (int)img[r-1][c+2].blue,\n                       (int)img[r-1][c+3].blue);\n            simd4i bbottom((int)img[r+1][c].blue,\n                          (int)img[r+1][c+1].blue,\n                          (int)img[r+1][c+2].blue,\n                          (int)img[r+1][c+3].blue);\n\n            simd4i grad_x_red   = rright-rleft;\n            simd4i grad_y_red   = rbottom-rtop;\n            simd4i grad_x_green = gright-gleft;\n            simd4i grad_y_green = gbottom-gtop;\n            simd4i grad_x_blue  = bright-bleft;\n            simd4i grad_y_blue  = bbottom-btop;\n\n            simd4i rlen = grad_x_red*grad_x_red + grad_y_red*grad_y_red;\n            simd4i glen = grad_x_green*grad_x_green + grad_y_green*grad_y_green;\n            simd4i blen = grad_x_blue*grad_x_blue + grad_y_blue*grad_y_blue;\n\n            simd4i cmp = rlen>glen;\n            simd4i tgrad_x = select(cmp,grad_x_red,grad_x_green);\n            simd4i tgrad_y = select(cmp,grad_y_red,grad_y_green);\n            simd4i tlen = select(cmp,rlen,glen);\n\n            cmp = tlen>blen;\n            grad_x = select(cmp,tgrad_x,grad_x_blue);\n            grad_y = select(cmp,tgrad_y,grad_y_blue);\n            len = select(cmp,tlen,blen);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename image_type>\n        inline typename dlib::disable_if_c<pixel_traits<typename image_type::pixel_type>::rgb>::type get_gradient (\n            const int r,\n            const int c,\n            const image_type& img,\n            matrix<double,2,1>& grad,\n            double& len\n        )\n        {\n            grad(0) = (int)get_pixel_intensity(img[r][c+1])-(int)get_pixel_intensity(img[r][c-1]); \n            grad(1) = (int)get_pixel_intensity(img[r+1][c])-(int)get_pixel_intensity(img[r-1][c]);\n            len = length_squared(grad);\n        }\n\n        template <typename image_type>\n        inline typename dlib::disable_if_c<pixel_traits<typename image_type::pixel_type>::rgb>::type get_gradient (\n            int r,\n            int c,\n            const image_type& img,\n            simd4f& grad_x,\n            simd4f& grad_y,\n            simd4f& len\n        )\n        {\n            simd4i left((int)get_pixel_intensity(img[r][c-1]), \n                        (int)get_pixel_intensity(img[r][c]),\n                        (int)get_pixel_intensity(img[r][c+1]),\n                        (int)get_pixel_intensity(img[r][c+2]));\n            simd4i right((int)get_pixel_intensity(img[r][c+1]), \n                         (int)get_pixel_intensity(img[r][c+2]),\n                         (int)get_pixel_intensity(img[r][c+3]),\n                         (int)get_pixel_intensity(img[r][c+4]));\n\n            simd4i top((int)get_pixel_intensity(img[r-1][c]),\n                       (int)get_pixel_intensity(img[r-1][c+1]),\n                       (int)get_pixel_intensity(img[r-1][c+2]),\n                       (int)get_pixel_intensity(img[r-1][c+3]));\n            simd4i bottom((int)get_pixel_intensity(img[r+1][c]),\n                          (int)get_pixel_intensity(img[r+1][c+1]),\n                          (int)get_pixel_intensity(img[r+1][c+2]),\n                          (int)get_pixel_intensity(img[r+1][c+3]));\n\n            grad_x = right-left;\n            grad_y = bottom-top;\n\n            len = (grad_x*grad_x + grad_y*grad_y);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T, typename mm1, typename mm2>\n        inline void set_hog (\n            dlib::array<array2d<T,mm1>,mm2>& hog,\n            int o,\n            int x, \n            int y,\n            const double& value\n        )\n        {\n            hog[o][y][x] = value;\n        }\n\n        template <typename T, typename mm1, typename mm2>\n        void init_hog (\n            dlib::array<array2d<T,mm1>,mm2>& hog,\n            int hog_nr,\n            int hog_nc,\n            int filter_rows_padding,\n            int filter_cols_padding\n        )\n        {\n            const int num_hog_bands = 27+4;\n            hog.resize(num_hog_bands);\n            for (int i = 0; i < num_hog_bands; ++i)\n            {\n                hog[i].set_size(hog_nr+filter_rows_padding-1, hog_nc+filter_cols_padding-1);\n                rectangle rect = get_rect(hog[i]);\n                rect.top() +=   (filter_rows_padding-1)/2;\n                rect.left() +=  (filter_cols_padding-1)/2;\n                rect.right() -= filter_cols_padding/2;\n                rect.bottom() -= filter_rows_padding/2;\n                zero_border_pixels(hog[i],rect);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T, typename mm>\n        inline void set_hog (\n            array2d<matrix<T,31,1>,mm>& hog,\n            int o,\n            int x, \n            int y,\n            const double& value\n        )\n        {\n            hog[y][x](o) = value;\n        }\n\n        template <typename T, typename mm>\n        void init_hog (\n            array2d<matrix<T,31,1>,mm>& hog,\n            int hog_nr,\n            int hog_nc,\n            int filter_rows_padding,\n            int filter_cols_padding\n        )\n        {\n            hog.set_size(hog_nr+filter_rows_padding-1, hog_nc+filter_cols_padding-1);\n\n            // now zero out the border region\n            rectangle rect = get_rect(hog);\n            rect.top() +=   (filter_rows_padding-1)/2;\n            rect.left() +=  (filter_cols_padding-1)/2;\n            rect.right() -= filter_cols_padding/2;\n            rect.bottom() -= filter_rows_padding/2;\n            border_enumerator be(get_rect(hog),rect);\n            while (be.move_next())\n            {\n                const point p = be.element();\n                set_all_elements(hog[p.y()][p.x()], 0); \n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename image_type, \n            typename out_type\n            >\n        void impl_extract_fhog_features(\n            const image_type& img_, \n            out_type& hog, \n            int cell_size,\n            int filter_rows_padding,\n            int filter_cols_padding\n        ) \n        {\n            const_image_view<image_type> img(img_);\n            // make sure requires clause is not broken\n            DLIB_ASSERT( cell_size > 0 &&\n                         filter_rows_padding > 0 &&\n                         filter_cols_padding > 0 ,\n                \"\\t void extract_fhog_features()\"\n                << \"\\n\\t Invalid inputs were given to this function. \"\n                << \"\\n\\t cell_size: \" << cell_size \n                << \"\\n\\t filter_rows_padding: \" << filter_rows_padding \n                << \"\\n\\t filter_cols_padding: \" << filter_cols_padding \n                );\n\n            /*\n                This function implements the HOG feature extraction method described in \n                the paper:\n                    P. Felzenszwalb, R. Girshick, D. McAllester, D. Ramanan\n                    Object Detection with Discriminatively Trained Part Based Models\n                    IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 32, No. 9, Sep. 2010\n\n                Moreover, this function is derived from the HOG feature extraction code\n                from the features.cc file in the voc-releaseX code (see\n                http://people.cs.uchicago.edu/~rbg/latent/) which is has the following\n                license (note that the code has been modified to work with grayscale and\n                color as well as planar and interlaced input and output formats):\n\n                Copyright (C) 2011, 2012 Ross Girshick, Pedro Felzenszwalb\n                Copyright (C) 2008, 2009, 2010 Pedro Felzenszwalb, Ross Girshick\n                Copyright (C) 2007 Pedro Felzenszwalb, Deva Ramanan\n\n                Permission is hereby granted, free of charge, to any person obtaining\n                a copy of this software and associated documentation files (the\n                \"Software\"), to deal in the Software without restriction, including\n                without limitation the rights to use, copy, modify, merge, publish,\n                distribute, sublicense, and/or sell copies of the Software, and to\n                permit persons to whom the Software is furnished to do so, subject to\n                the following conditions:\n\n                The above copyright notice and this permission notice shall be\n                included in all copies or substantial portions of the Software.\n\n                THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n                EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n                MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n                NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n                LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n                OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n                WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n            */\n\n            // unit vectors used to compute gradient orientation\n            matrix<double,2,1> directions[9];\n            directions[0] =  1.0000, 0.0000; \n            directions[1] =  0.9397, 0.3420;\n            directions[2] =  0.7660, 0.6428;\n            directions[3] =  0.500,  0.8660;\n            directions[4] =  0.1736, 0.9848;\n            directions[5] = -0.1736, 0.9848;\n            directions[6] = -0.5000, 0.8660;\n            directions[7] = -0.7660, 0.6428;\n            directions[8] = -0.9397, 0.3420;\n\n\n\n            // First we allocate memory for caching orientation histograms & their norms.\n            const int cells_nr = (int)((double)img.nr()/(double)cell_size + 0.5);\n            const int cells_nc = (int)((double)img.nc()/(double)cell_size + 0.5);\n\n            if (cells_nr == 0 || cells_nc == 0)\n            {\n                hog.clear();\n                return;\n            }\n\n            // We give hist extra padding around the edges (1 cell all the way around the\n            // edge) so we can avoid needing to do boundary checks when indexing into it\n            // later on.  So some statements assign to the boundary but those values are\n            // never used.\n            array2d<matrix<float,18,1> > hist(cells_nr+2, cells_nc+2);\n            for (long r = 0; r < hist.nr(); ++r)\n            {\n                for (long c = 0; c < hist.nc(); ++c)\n                {\n                    hist[r][c] = 0;\n                }\n            }\n\n            array2d<float> norm(cells_nr, cells_nc);\n            assign_all_pixels(norm, 0);\n\n            // memory for HOG features\n            const int hog_nr = std::max(cells_nr-2, 0);\n            const int hog_nc = std::max(cells_nc-2, 0);\n            if (hog_nr == 0 || hog_nc == 0)\n            {\n                hog.clear();\n                return;\n            }\n            const int padding_rows_offset = (filter_rows_padding-1)/2;\n            const int padding_cols_offset = (filter_cols_padding-1)/2;\n            init_hog(hog, hog_nr, hog_nc, filter_rows_padding, filter_cols_padding);\n\n            const int visible_nr = std::min((long)cells_nr*cell_size,img.nr())-1;\n            const int visible_nc = std::min((long)cells_nc*cell_size,img.nc())-1;\n\n            // First populate the gradient histograms\n            for (int y = 1; y < visible_nr; y++) \n            {\n                const double yp = ((double)y+0.5)/(double)cell_size - 0.5;\n                const int iyp = (int)std::floor(yp);\n                const double vy0 = yp-iyp;\n                const double vy1 = 1.0-vy0;\n                int x;\n                for (x = 1; x < visible_nc-3; x+=4) \n                {\n                    simd4f xx(x,x+1,x+2,x+3);\n                    // v will be the length of the gradient vectors.\n                    simd4f grad_x, grad_y, v;\n                    get_gradient(y,x,img,grad_x,grad_y,v);\n\n                    // We will use bilinear interpolation to add into the histogram bins.\n                    // So first we precompute the values needed to determine how much each\n                    // pixel votes into each bin.\n                    simd4f xp = (xx+0.5)/(float)cell_size + 0.5;\n                    simd4i ixp = simd4i(xp);\n                    simd4f vx0 = xp-ixp;\n                    simd4f vx1 = 1.0f-vx0;\n\n                    v = sqrt(v);\n\n\t\t\t\t\t// TODO this should/cood be optimised\n\n                    // Now snap the gradient to one of 18 orientations\n                    simd4f best_dot = 0;\n                    simd4f best_o = 0;\n                    for (int o = 0; o < 9; o++) \n                    {\n                        simd4f dot = grad_x*directions[o](0) + grad_y*directions[o](1);\n                        simd4f_bool cmp = dot>best_dot;\n                        best_dot = select(cmp,dot,best_dot); \n                        dot *= -1;\n                        best_o = select(cmp,o,best_o);\n\n                        cmp = dot>best_dot;\n                        best_dot = select(cmp,dot,best_dot);\n                        best_o = select(cmp,o+9,best_o);\n                    }\n\n\n                    // Add the gradient magnitude, v, to 4 histograms around pixel using\n                    // bilinear interpolation.\n                    vx1 *= v;\n                    vx0 *= v;\n                    // The amounts for each bin\n                    simd4f v11 = vy1*vx1;\n                    simd4f v01 = vy0*vx1;\n                    simd4f v10 = vy1*vx0;\n                    simd4f v00 = vy0*vx0;\n\n                    int32 _best_o[4]; simd4i(best_o).store(_best_o);\n                    int32 _ixp[4];    ixp.store(_ixp);\n                    float _v11[4];    v11.store(_v11);\n                    float _v01[4];    v01.store(_v01);\n                    float _v10[4];    v10.store(_v10);\n                    float _v00[4];    v00.store(_v00);\n\n                    hist[iyp+1]  [_ixp[0]  ](_best_o[0]) += _v11[0];\n                    hist[iyp+1+1][_ixp[0]  ](_best_o[0]) += _v01[0];\n                    hist[iyp+1]  [_ixp[0]+1](_best_o[0]) += _v10[0];\n                    hist[iyp+1+1][_ixp[0]+1](_best_o[0]) += _v00[0];\n\n                    hist[iyp+1]  [_ixp[1]  ](_best_o[1]) += _v11[1];\n                    hist[iyp+1+1][_ixp[1]  ](_best_o[1]) += _v01[1];\n                    hist[iyp+1]  [_ixp[1]+1](_best_o[1]) += _v10[1];\n                    hist[iyp+1+1][_ixp[1]+1](_best_o[1]) += _v00[1];\n\n                    hist[iyp+1]  [_ixp[2]  ](_best_o[2]) += _v11[2];\n                    hist[iyp+1+1][_ixp[2]  ](_best_o[2]) += _v01[2];\n                    hist[iyp+1]  [_ixp[2]+1](_best_o[2]) += _v10[2];\n                    hist[iyp+1+1][_ixp[2]+1](_best_o[2]) += _v00[2];\n\n                    hist[iyp+1]  [_ixp[3]  ](_best_o[3]) += _v11[3];\n                    hist[iyp+1+1][_ixp[3]  ](_best_o[3]) += _v01[3];\n                    hist[iyp+1]  [_ixp[3]+1](_best_o[3]) += _v10[3];\n                    hist[iyp+1+1][_ixp[3]+1](_best_o[3]) += _v00[3];\n                }\n                // Now process the right columns that don't fit into simd registers.\n                for (; x < visible_nc; x++) \n                {\n                    matrix<double,2,1> grad;\n                    double v;\n                    get_gradient(y,x,img,grad,v);\n\n                    // snap to one of 18 orientations\n                    double best_dot = 0;\n                    int best_o = 0;\n                    for (int o = 0; o < 9; o++) \n                    {\n                        const double dot = dlib::dot(directions[o], grad); \n                        if (dot > best_dot) \n                        {\n                            best_dot = dot;\n                            best_o = o;\n                        } \n                        else if (-dot > best_dot) \n                        {\n                            best_dot = -dot;\n                            best_o = o+9;\n                        }\n                    }\n\n                    v = std::sqrt(v);\n                    // add to 4 histograms around pixel using bilinear interpolation\n                    const double xp = ((double)x+0.5)/(double)cell_size - 0.5;\n                    const int ixp = (int)std::floor(xp);\n                    const double vx0 = xp-ixp;\n                    const double vx1 = 1.0-vx0;\n\n                    hist[iyp+1][ixp+1](best_o) += vy1*vx1*v;\n                    hist[iyp+1+1][ixp+1](best_o) += vy0*vx1*v;\n                    hist[iyp+1][ixp+1+1](best_o) += vy1*vx0*v;\n                    hist[iyp+1+1][ixp+1+1](best_o) += vy0*vx0*v;\n                }\n            }\n\n            // compute energy in each block by summing over orientations\n            for (int r = 0; r < cells_nr; ++r)\n            {\n                for (int c = 0; c < cells_nc; ++c)\n                {\n                    for (int o = 0; o < 9; o++) \n                    {\n                        norm[r][c] += (hist[r+1][c+1](o) + hist[r+1][c+1](o+9)) * (hist[r+1][c+1](o) + hist[r+1][c+1](o+9));\n                    }\n                }\n            }\n\n            const double eps = 0.0001;\n            // compute features\n            for (int y = 0; y < hog_nr; y++) \n            {\n                const int yy = y+padding_rows_offset; \n                for (int x = 0; x < hog_nc; x++) \n                {\n                    const simd4f z1(norm[y+1][x+1],\n                                    norm[y][x+1], \n                                    norm[y+1][x],  \n                                    norm[y][x]);\n\n                    const simd4f z2(norm[y+1][x+2],\n                                    norm[y][x+2],\n                                    norm[y+1][x+1],\n                                    norm[y][x+1]);\n\n                    const simd4f z3(norm[y+2][x+1],\n                                    norm[y+1][x+1],\n                                    norm[y+2][x],\n                                    norm[y+1][x]);\n\n                    const simd4f z4(norm[y+2][x+2],\n                                    norm[y+1][x+2],\n                                    norm[y+2][x+1],\n                                    norm[y+1][x+1]);\n\n                    const simd4f nn = 0.2*sqrt(z1+z2+z3+z4+eps);\n                    const simd4f n = 0.1/nn;\n\n                    simd4f t = 0;\n\n                    const int xx = x+padding_cols_offset; \n\n                    // contrast-sensitive features\n                    for (int o = 0; o < 18; o+=3) \n                    {\n                        simd4f temp0(hist[y+1+1][x+1+1](o));\n                        simd4f temp1(hist[y+1+1][x+1+1](o+1));\n                        simd4f temp2(hist[y+1+1][x+1+1](o+2));\n                        simd4f h0 = min(temp0,nn)*n;\n                        simd4f h1 = min(temp1,nn)*n;\n                        simd4f h2 = min(temp2,nn)*n;\n                        set_hog(hog,o,xx,yy,   sum(h0));\n                        set_hog(hog,o+1,xx,yy, sum(h1));\n                        set_hog(hog,o+2,xx,yy, sum(h2));\n                        t += h0+h1+h2;\n                    }\n\n                    t *= 2*0.2357;\n\n                    // contrast-insensitive features\n                    for (int o = 0; o < 9; o+=3) \n                    {\n                        simd4f temp0 = hist[y+1+1][x+1+1](o)   + hist[y+1+1][x+1+1](o+9);\n                        simd4f temp1 = hist[y+1+1][x+1+1](o+1) + hist[y+1+1][x+1+1](o+9+1);\n                        simd4f temp2 = hist[y+1+1][x+1+1](o+2) + hist[y+1+1][x+1+1](o+9+2);\n                        simd4f h0 = min(temp0,nn)*n;\n                        simd4f h1 = min(temp1,nn)*n;\n                        simd4f h2 = min(temp2,nn)*n;\n                        set_hog(hog,o+18,xx,yy, sum(h0));\n                        set_hog(hog,o+18+1,xx,yy, sum(h1));\n                        set_hog(hog,o+18+2,xx,yy, sum(h2));\n                    }\n\n\n                    float temp[4];\n                    t.store(temp);\n\n                    // texture features\n                    set_hog(hog,27,xx,yy, temp[0]);\n                    set_hog(hog,28,xx,yy, temp[1]);\n                    set_hog(hog,29,xx,yy, temp[2]);\n                    set_hog(hog,30,xx,yy, temp[3]);\n                }\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline void create_fhog_bar_images (\n            dlib::array<matrix<float> >& mbars,\n            const long w\n        )\n        {\n            const long bdims = 9;\n            // Make the oriented lines we use to draw on each HOG cell.\n            mbars.resize(bdims);\n            dlib::array<array2d<unsigned char> > bars(bdims);\n            array2d<unsigned char> temp(w,w);\n            for (unsigned long i = 0; i < bars.size(); ++i)\n            {\n                assign_all_pixels(temp, 0);\n                draw_line(temp, point(w/2,0), point(w/2,w-1), 255);\n                rotate_image(temp, bars[i], i*-pi/bars.size());\n\n                mbars[i] = subm(matrix_cast<float>(mat(bars[i])), centered_rect(get_rect(bars[i]),w,w) );\n            }\n        }\n\n    } // end namespace impl_fhog\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename T, \n        typename mm1, \n        typename mm2\n        >\n    void extract_fhog_features(\n        const image_type& img, \n        dlib::array<array2d<T,mm1>,mm2>& hog, \n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    ) \n    {\n        impl_fhog::impl_extract_fhog_features(img, hog, cell_size, filter_rows_padding, filter_cols_padding);\n        // If the image is too small then the above function outputs an empty feature map.\n        // But to make things very uniform in usage we require the output to still have the\n        // 31 planes (but they are just empty).\n        if (hog.size() == 0)\n            hog.resize(31);\n    }\n\n    template <\n        typename image_type, \n        typename T, \n        typename mm\n        >\n    void extract_fhog_features(\n        const image_type& img, \n        array2d<matrix<T,31,1>,mm>& hog, \n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    ) \n    {\n        impl_fhog::impl_extract_fhog_features(img, hog, cell_size, filter_rows_padding, filter_cols_padding);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename T\n        >\n    void extract_fhog_features(\n        const image_type& img, \n        matrix<T,0,1>& feats,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    )\n    {\n        dlib::array<array2d<T> > hog;\n        extract_fhog_features(img, hog, cell_size, filter_rows_padding, filter_cols_padding);\n        feats.set_size(hog.size()*hog[0].size());\n        for (unsigned long i = 0; i < hog.size(); ++i)\n        {\n            const long size = hog[i].size();\n            set_rowm(feats, range(i*size, (i+1)*size-1)) = reshape_to_column_vector(mat(hog[i]));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    matrix<double,0,1> extract_fhog_features(\n        const image_type& img, \n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    )\n    {\n        matrix<double,0,1> feats;\n        extract_fhog_features(img, feats, cell_size, filter_rows_padding, filter_cols_padding);\n        return feats;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    inline point image_to_fhog (\n        point p,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( cell_size > 0 &&\n            filter_rows_padding > 0 &&\n            filter_cols_padding > 0 ,\n            \"\\t point image_to_fhog()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t cell_size: \" << cell_size \n            << \"\\n\\t filter_rows_padding: \" << filter_rows_padding \n            << \"\\n\\t filter_cols_padding: \" << filter_cols_padding \n        );\n\n        // There is a one pixel border around the image.\n        p -= point(1,1);\n        // There is also a 1 \"cell\" border around the HOG image formation.\n        return p/cell_size - point(1,1) + point((filter_cols_padding-1)/2,(filter_rows_padding-1)/2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle image_to_fhog (\n        const rectangle& rect,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( cell_size > 0 &&\n            filter_rows_padding > 0 &&\n            filter_cols_padding > 0 ,\n            \"\\t rectangle image_to_fhog()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t cell_size: \" << cell_size \n            << \"\\n\\t filter_rows_padding: \" << filter_rows_padding \n            << \"\\n\\t filter_cols_padding: \" << filter_cols_padding \n        );\n\n        return rectangle(image_to_fhog(rect.tl_corner(),cell_size,filter_rows_padding,filter_cols_padding),\n                         image_to_fhog(rect.br_corner(),cell_size,filter_rows_padding,filter_cols_padding));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline point fhog_to_image (\n        point p,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( cell_size > 0 &&\n            filter_rows_padding > 0 &&\n            filter_cols_padding > 0 ,\n            \"\\t point fhog_to_image()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t cell_size: \" << cell_size \n            << \"\\n\\t filter_rows_padding: \" << filter_rows_padding \n            << \"\\n\\t filter_cols_padding: \" << filter_cols_padding \n        );\n\n        // Convert to image space and then set to the center of the cell.\n        point offset;\n        \n        p = (p+point(1,1)-point((filter_cols_padding-1)/2,(filter_rows_padding-1)/2))*cell_size + point(1,1);\n        if (p.x() >= 0 && p.y() >= 0) offset = point(cell_size/2,cell_size/2);\n        if (p.x() <  0 && p.y() >= 0) offset = point(-cell_size/2,cell_size/2);\n        if (p.x() >= 0 && p.y() <  0) offset = point(cell_size/2,-cell_size/2);\n        if (p.x() <  0 && p.y() <  0) offset = point(-cell_size/2,-cell_size/2);\n        return p + offset;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle fhog_to_image (\n        const rectangle& rect,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( cell_size > 0 &&\n            filter_rows_padding > 0 &&\n            filter_cols_padding > 0 ,\n            \"\\t rectangle fhog_to_image()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t cell_size: \" << cell_size \n            << \"\\n\\t filter_rows_padding: \" << filter_rows_padding \n            << \"\\n\\t filter_cols_padding: \" << filter_cols_padding \n        );\n\n        return rectangle(fhog_to_image(rect.tl_corner(),cell_size,filter_rows_padding,filter_cols_padding),\n                         fhog_to_image(rect.br_corner(),cell_size,filter_rows_padding,filter_cols_padding));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename mm1, \n        typename mm2\n        >\n    matrix<unsigned char> draw_fhog(\n        const dlib::array<array2d<T,mm1>,mm2>& hog,\n        const long cell_draw_size = 15\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( cell_draw_size > 0 && hog.size()==31,\n            \"\\t matrix<unsigned char> draw_fhog()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t cell_draw_size: \" << cell_draw_size \n            << \"\\n\\t hog.size(): \" << hog.size() \n        );\n\n        dlib::array<matrix<float> > mbars;\n        impl_fhog::create_fhog_bar_images(mbars,cell_draw_size);\n\n        // now draw the bars onto the HOG cells\n        matrix<float> himg(hog[0].nr()*cell_draw_size, hog[0].nc()*cell_draw_size);\n        himg = 0;\n        for (unsigned long d = 0; d < mbars.size(); ++d)\n        {\n            for (long r = 0; r < himg.nr(); r+=cell_draw_size)\n            {\n                for (long c = 0; c < himg.nc(); c+=cell_draw_size)\n                {\n                    const float val = hog[d][r/cell_draw_size][c/cell_draw_size] +\n                        hog[d+mbars.size()][r/cell_draw_size][c/cell_draw_size] +\n                        hog[d+mbars.size()*2][r/cell_draw_size][c/cell_draw_size];\n                    if (val > 0)\n                    {\n                        set_subm(himg, r, c, cell_draw_size, cell_draw_size) += val*mbars[d%mbars.size()];\n                    }\n                }\n            }\n        }\n\n        const double thresh = mean(himg) + 4*stddev(himg);\n        if (thresh != 0)\n            return matrix_cast<unsigned char>(upperbound(round(himg*255/thresh),255));\n        else\n            return matrix_cast<unsigned char>(himg);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    matrix<unsigned char> draw_fhog (\n        const std::vector<matrix<T> >& hog,\n        const long cell_draw_size = 15\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( cell_draw_size > 0 && hog.size()==31,\n            \"\\t matrix<unsigned char> draw_fhog()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t cell_draw_size: \" << cell_draw_size \n            << \"\\n\\t hog.size(): \" << hog.size() \n        );\n\n        // Just convert the input into the right object and then call the above draw_fhog()\n        // function on it.\n        dlib::array<array2d<T> > temp(hog.size());\n        for (unsigned long i = 0; i < temp.size(); ++i)\n        {\n            temp[i].set_size(hog[i].nr(), hog[i].nc());\n            for (long r = 0; r < hog[i].nr(); ++r)\n            {\n                for (long c = 0; c < hog[i].nc(); ++c)\n                {\n                    temp[i][r][c] = hog[i](r,c);\n                }\n            }\n        }\n        return draw_fhog(temp,cell_draw_size);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename mm\n        >\n    matrix<unsigned char> draw_fhog(\n        const array2d<matrix<T,31,1>,mm>& hog,\n        const long cell_draw_size = 15\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( cell_draw_size > 0,\n            \"\\t matrix<unsigned char> draw_fhog()\"\n            << \"\\n\\t Invalid inputs were given to this function. \"\n            << \"\\n\\t cell_draw_size: \" << cell_draw_size \n        );\n\n        dlib::array<matrix<float> > mbars;\n        impl_fhog::create_fhog_bar_images(mbars,cell_draw_size);\n\n        // now draw the bars onto the HOG cells\n        matrix<float> himg(hog.nr()*cell_draw_size, hog.nc()*cell_draw_size);\n        himg = 0;\n        for (unsigned long d = 0; d < mbars.size(); ++d)\n        {\n            for (long r = 0; r < himg.nr(); r+=cell_draw_size)\n            {\n                for (long c = 0; c < himg.nc(); c+=cell_draw_size)\n                {\n                    const float val = hog[r/cell_draw_size][c/cell_draw_size](d) +\n                        hog[r/cell_draw_size][c/cell_draw_size](d+mbars.size()) +\n                        hog[r/cell_draw_size][c/cell_draw_size](d+mbars.size()*2);\n                    if (val > 0)\n                    {\n                        set_subm(himg, r, c, cell_draw_size, cell_draw_size) += val*mbars[d%mbars.size()];\n                    }\n                }\n            }\n        }\n\n        const double thresh = mean(himg) + 4*stddev(himg);\n        if (thresh != 0)\n            return matrix_cast<unsigned char>(upperbound(round(himg*255/thresh),255));\n        else\n            return matrix_cast<unsigned char>(himg);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_fHOG_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/fhog_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_fHOG_ABSTRACT_Hh_\n#ifdef DLIB_fHOG_ABSTRACT_Hh_\n\n#include \"../matrix/matrix_abstract.h\"\n#include \"../array2d/array2d_kernel_abstract.h\"\n#include \"../array/array_kernel_abstract.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename T, \n        typename mm\n        >\n    void extract_fhog_features(\n        const image_type& img, \n        array2d<matrix<T,31,1>,mm>& hog, \n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    );\n    /*!\n        requires\n            - cell_size > 0\n            - filter_rows_padding > 0\n            - filter_cols_padding > 0\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - T should be float or double\n        ensures\n            - This function implements the HOG feature extraction method described in \n              the paper:\n                Object Detection with Discriminatively Trained Part Based Models by\n                P. Felzenszwalb, R. Girshick, D. McAllester, D. Ramanan\n                IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 32, No. 9, Sep. 2010\n              This means that it takes an input image img and outputs Felzenszwalb's\n              31 dimensional version of HOG features, which are stored into #hog.\n            - The input image is broken into cells that are cell_size by cell_size pixels\n              and within each cell we compute a 31 dimensional FHOG vector.  This vector\n              describes the gradient structure within the cell.  \n            - A common task is to convolve each channel of the hog image with a linear\n              filter.  This is made more convenient if the contents of #hog includes extra\n              rows and columns of zero padding along the borders.  This extra padding\n              allows for more efficient convolution code since the code does not need to\n              perform expensive boundary checking.  Therefore, you can set\n              filter_rows_padding and filter_cols_padding to indicate the size of the\n              filter you wish to use and this function will ensure #hog has the appropriate\n              extra zero padding along the borders.  In particular, it will include the\n              following extra padding:\n                - (filter_rows_padding-1)/2 extra rows of zeros on the top of #hog.\n                - (filter_cols_padding-1)/2 extra columns of zeros on the left of #hog.\n                - filter_rows_padding/2 extra rows of zeros on the bottom of #hog.\n                - filter_cols_padding/2 extra columns of zeros on the right of #hog.\n              Therefore, the extra padding is done such that functions like\n              spatially_filter_image() apply their filters to the entire content containing\n              area of a hog image (note that you should use the following planar version of\n              extract_fhog_features() instead of the interlaced version if you want to use\n              spatially_filter_image() on a hog image).\n            - #hog.nr() == max(round(img.nr()/(double)cell_size)-2,0) + filter_rows_padding-1.\n            - #hog.nc() == max(round(img.nc()/(double)cell_size)-2,0) + filter_cols_padding-1.\n              (i.e.  Each output dimension is roughly 1/cell_size the original size but\n              there is a one cell_size border all around the image that is lost and then we\n              add on any additional padding that is requested.)\n            - for all valid r and c:\n                - #hog[r][c] == the FHOG vector describing the cell centered at the pixel location \n                  fhog_to_image(point(c,r),cell_size,filter_rows_padding,filter_cols_padding) in img.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename T, \n        typename mm1, \n        typename mm2\n        >\n    void extract_fhog_features(\n        const image_type& img, \n        dlib::array<array2d<T,mm1>,mm2>& hog, \n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    );\n    /*!\n        requires\n            - cell_size > 0\n            - filter_rows_padding > 0\n            - filter_cols_padding > 0\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - T should be float or double\n        ensures\n            - This function is identical to the above extract_fhog_features() routine\n              except that it outputs the results in a planar format rather than the\n              interlaced format used above.  That is, each element of the hog vector is\n              placed into one of 31 images inside #hog.  To be precise, if vhog is the\n              output of the above interlaced version of extract_fhog_features() then we\n              will have, for all valid r and c:\n                - #hog[i][r][c] == vhog[r][c](i)\n                  (where 0 <= i < 31)\n            - #hog.size() == 31\n            - for all valid i:\n                - #hog[i].nr() == hog[0].nr()\n                - #hog[i].nc() == hog[0].nc()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    matrix<double,0,1> extract_fhog_features(\n        const image_type& img, \n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    );\n    /*!\n        requires\n            - cell_size > 0\n            - filter_rows_padding > 0\n            - filter_cols_padding > 0\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - This function calls the above extract_fhog_features() routine and simply\n              packages the entire output into a dlib::matrix.  The matrix is constructed\n              using the planar version of extract_fhog_features() and then each output\n              plane is converted into a column vector and subsequently all 31 column\n              vectors are concatenated together and returned.\n            - Each plane is converted into a column vector using reshape_to_column_vector(), \n              and is therefore represented in row major order inside the returned vector.  \n            - If H is the array<array2d<double>> object output by the planar\n              extract_fhog_features() then the returned vector is composed by concatenating\n              H[0], then H[1], then H[2], and so on in ascending index order.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename T\n        >\n    void extract_fhog_features(\n        const image_type& img, \n        matrix<T,0,1>& feats,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    );\n    /*!\n        requires\n            - cell_size > 0\n            - filter_rows_padding > 0\n            - filter_cols_padding > 0\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - T is float, double, or long double\n        ensures\n            - This function is identical to the above version of extract_fhog_features()\n              that returns a matrix<double,0,1> except that it returns the matrix here\n              through a reference argument instead of returning it by value.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline point image_to_fhog (\n        point p,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    );\n    /*!\n        requires\n            - cell_size > 0\n            - filter_rows_padding > 0\n            - filter_cols_padding > 0\n        ensures\n            - When using extract_fhog_features(), each FHOG cell is extracted from a\n              certain region in the input image.  image_to_fhog() returns the identity of\n              the FHOG cell containing the image pixel at location p.  Or in other words,\n              let P == image_to_fhog(p) and hog be a FHOG feature map output by\n              extract_fhog_features(), then hog[P.y()][P.x()] == the FHOG vector/cell\n              containing the point p in the input image.  Note that some image points\n              might not have corresponding feature locations.  E.g. border points or points\n              outside the image.  In these cases the returned point will be outside the\n              input image.\n            - Note that you should use the same values of cell_size, filter_rows_padding,\n              and filter_cols_padding that you used with extract_fhog_features().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle image_to_fhog (\n        const rectangle& rect,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    );\n    /*!\n        requires\n            - cell_size > 0\n            - filter_rows_padding > 0\n            - filter_cols_padding > 0\n        ensures\n            - maps a rectangle from image space to fhog space.  In particular this function returns:\n              rectangle(image_to_fhog(rect.tl_corner(),cell_size,filter_rows_padding,filter_cols_padding), \n                        image_to_fhog(rect.br_corner(),cell_size,filter_rows_padding,filter_cols_padding))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline point fhog_to_image (\n        point p,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    );\n    /*!\n        requires\n            - cell_size > 0\n            - filter_rows_padding > 0\n            - filter_cols_padding > 0\n        ensures\n            - Maps a pixel in a FHOG image (produced by extract_fhog_features()) back to the\n              corresponding original input pixel.  Note that since FHOG images are\n              spatially downsampled by aggregation into cells the mapping is not totally\n              invertible.  Therefore, the returned location will be the center of the cell\n              in the original image that contained the FHOG vector at position p.  Moreover,\n              cell_size, filter_rows_padding, and filter_cols_padding should be set to the\n              values used by the call to extract_fhog_features().\n            - Mapping from fhog space to image space is an invertible transformation.  That\n              is, for any point P we have P == image_to_fhog(fhog_to_image(P,cell_size,filter_rows_padding,filter_cols_padding),\n                                                             cell_size,filter_rows_padding,filter_cols_padding).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline rectangle fhog_to_image (\n        const rectangle& rect,\n        int cell_size = 8,\n        int filter_rows_padding = 1,\n        int filter_cols_padding = 1\n    );\n    /*!\n        requires\n            - cell_size > 0\n            - filter_rows_padding > 0\n            - filter_cols_padding > 0\n        ensures\n            - maps a rectangle from fhog space to image space.  In particular this function returns:\n              rectangle(fhog_to_image(rect.tl_corner(),cell_size,filter_rows_padding,filter_cols_padding), \n                        fhog_to_image(rect.br_corner(),cell_size,filter_rows_padding,filter_cols_padding))\n            - Mapping from fhog space to image space is an invertible transformation.  That\n              is, for any rectangle R we have R == image_to_fhog(fhog_to_image(R,cell_size,filter_rows_padding,filter_cols_padding),\n                                                                 cell_size,filter_rows_padding,filter_cols_padding).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename mm1, \n        typename mm2\n        >\n    matrix<unsigned char> draw_fhog(\n        const dlib::array<array2d<T,mm1>,mm2>& hog,\n        const long cell_draw_size = 15\n    );\n    /*!\n        requires\n            - cell_draw_size > 0\n            - hog.size() == 31\n        ensures\n            - Interprets hog as a FHOG feature map output by extract_fhog_features() and\n              converts it into an image suitable for display on the screen.  In particular,\n              we draw all the hog cells into a grayscale image in a way that shows the\n              magnitude and orientation of the gradient energy in each cell.  The result is\n              then returned.\n            - The size of the cells in the output image will be rendered as cell_draw_size \n              pixels wide and tall.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    matrix<unsigned char> draw_fhog (\n        const std::vector<matrix<T> >& hog,\n        const long cell_draw_size = 15\n    );\n    /*!\n        requires\n            - cell_draw_size > 0\n            - hog.size() == 31\n        ensures\n            - This function just converts the given hog object into an array<array2d<T>>\n              and passes it to the above draw_fhog() routine and returns the results.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename mm\n        >\n    matrix<unsigned char> draw_fhog(\n        const array2d<matrix<T,31,1>,mm>& hog,\n        const long cell_draw_size = 15\n    );\n    /*!\n        requires\n            - cell_draw_size > 0\n        ensures\n            - Interprets hog as a FHOG feature map output by extract_fhog_features() and\n              converts it into an image suitable for display on the screen.  In particular,\n              we draw all the hog cells into a grayscale image in a way that shows the\n              magnitude and orientation of the gradient energy in each cell.  The result is \n              then returned.\n            - The size of the cells in the output image will be rendered as cell_draw_size \n              pixels wide and tall.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_fHOG_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/image_pyramid.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGE_PYRaMID_Hh_\n#define DLIB_IMAGE_PYRaMID_Hh_\n\n#include \"image_pyramid_abstract.h\"\n#include \"../pixel.h\"\n#include \"../array2d.h\"\n#include \"../geometry.h\"\n#include \"spatial_filtering.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class pyramid_disable : noncopyable\n    {\n    public:\n\n        template <typename T>\n        vector<double,2> point_down (\n            const vector<T,2>& \n        ) const\n        {\n            return vector<double,2>(0,0);\n        }\n\n        template <typename T>\n        vector<double,2> point_up (\n            const vector<T,2>& \n        ) const\n        {\n            return vector<double,2>(0,0);\n        }\n\n    // -----------------------------\n\n        template <typename T>\n        vector<double,2> point_down (\n            const vector<T,2>& p,\n            unsigned int levels\n        ) const\n        {\n            if (levels == 0)\n                return p;\n            else\n                return vector<double,2>(0,0);\n        }\n\n        template <typename T>\n        vector<double,2> point_up (\n            const vector<T,2>& p,\n            unsigned int levels\n        ) const\n        {\n            if (levels == 0)\n                return p;\n            else\n                return vector<double,2>(0,0);\n        }\n\n    // -----------------------------\n\n        rectangle rect_up (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(point_up(rect.tl_corner()), point_up(rect.br_corner()));\n        }\n\n        rectangle rect_up (\n            const rectangle& rect,\n            unsigned int levels\n        ) const\n        {\n            return rectangle(point_up(rect.tl_corner(),levels), point_up(rect.br_corner(),levels));\n        }\n\n    // -----------------------------\n\n        rectangle rect_down (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(point_down(rect.tl_corner()), point_down(rect.br_corner()));\n        }\n\n        rectangle rect_down (\n            const rectangle& rect,\n            unsigned int levels\n        ) const\n        {\n            return rectangle(point_down(rect.tl_corner(),levels), point_down(rect.br_corner(),levels));\n        }\n\n    // -----------------------------\n\n    public:\n\n        template <\n            typename in_image_type,\n            typename out_image_type\n            >\n        void operator() (\n            // we do this #ifdef stuff to avoid compiler warnings about unused variables.\n#ifdef ENABLE_ASSERTS\n            const in_image_type& original,\n#else\n            const in_image_type& ,\n#endif\n            out_image_type& down\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_same_object(original, down) == false, \n                        \"\\t void pyramid_disable::operator()\"\n                        << \"\\n\\t is_same_object(original, down): \" << is_same_object(original, down) \n                        << \"\\n\\t this:                           \" << this\n                        );\n\n            typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n            typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n            COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n            COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n            set_image_size(down, 0, 0);\n        }\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            image_type& img\n        ) const\n        {\n            typedef typename image_traits<image_type>::pixel_type pixel_type;\n            COMPILE_TIME_ASSERT( pixel_traits<pixel_type>::has_alpha == false );\n            set_image_size(img, 0, 0);\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n\n        class pyramid_down_2_1 : noncopyable\n        {\n        public:\n\n            template <typename T>\n            vector<double,2> point_down (\n                const vector<T,2>& p\n            ) const\n            {\n                //do return (p - vector<T,2>(2,2))/2.0;\n                return p/2.0 - vector<double,2>(1,1);\n            }\n\n            template <typename T>\n            vector<double,2> point_up (\n                const vector<T,2>& p\n            ) const\n            {\n                return p*2 + vector<T,2>(2,2);\n            }\n\n        // -----------------------------\n\n            template <typename T>\n            vector<double,2> point_down (\n                const vector<T,2>& p,\n                unsigned int levels\n            ) const\n            {\n                vector<double,2> temp = p;\n                for (unsigned int i = 0; i < levels; ++i)\n                    temp = point_down(temp);\n                return temp;\n            }\n\n            template <typename T>\n            vector<double,2> point_up (\n                const vector<T,2>& p,\n                unsigned int levels\n            ) const\n            {\n                vector<double,2> temp = p;\n                for (unsigned int i = 0; i < levels; ++i)\n                    temp = point_up(temp);\n                return temp;\n            }\n\n        // -----------------------------\n\n            rectangle rect_up (\n                const rectangle& rect\n            ) const\n            {\n                return rectangle(point_up(rect.tl_corner()), point_up(rect.br_corner()));\n            }\n\n            rectangle rect_up (\n                const rectangle& rect,\n                unsigned int levels\n            ) const\n            {\n                return rectangle(point_up(rect.tl_corner(),levels), point_up(rect.br_corner(),levels));\n            }\n\n        // -----------------------------\n\n            rectangle rect_down (\n                const rectangle& rect\n            ) const\n            {\n                return rectangle(point_down(rect.tl_corner()), point_down(rect.br_corner()));\n            }\n\n            rectangle rect_down (\n                const rectangle& rect,\n                unsigned int levels\n            ) const\n            {\n                return rectangle(point_down(rect.tl_corner(),levels), point_down(rect.br_corner(),levels));\n            }\n\n        // -----------------------------\n\n        private:\n            template <typename T, typename U>\n            struct both_images_rgb\n            {\n                typedef typename image_traits<T>::pixel_type T_pix;\n                typedef typename image_traits<U>::pixel_type U_pix;\n                const static bool value = pixel_traits<T_pix>::rgb && pixel_traits<U_pix>::rgb;\n            };\n        public:\n\n            template <\n                typename in_image_type,\n                typename out_image_type\n                >\n            typename disable_if<both_images_rgb<in_image_type,out_image_type> >::type operator() (\n                const in_image_type& original_,\n                out_image_type& down_\n            ) const\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT( is_same_object(original_, down_) == false, \n                            \"\\t void pyramid_down_2_1::operator()\"\n                            << \"\\n\\t is_same_object(original_, down_): \" << is_same_object(original_, down_) \n                            << \"\\n\\t this:                           \" << this\n                            );\n\n                typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n                typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n                COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n                COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n                const_image_view<in_image_type> original(original_);\n                image_view<out_image_type> down(down_);\n\n                if (original.nr() <= 8 || original.nc() <= 8)\n                {\n                    down.clear();\n                    return;\n                }\n\n                typedef typename pixel_traits<in_pixel_type>::basic_pixel_type bp_type;\n                typedef typename promote<bp_type>::type ptype;\n                array2d<ptype> temp_img;\n                temp_img.set_size(original.nr(), (original.nc()-3)/2);\n                down.set_size((original.nr()-3)/2, (original.nc()-3)/2);\n\n\n                // This function applies a 5x5 Gaussian filter to the image.  It\n                // does this by separating the filter into its horizontal and vertical\n                // components and then downsamples the image by dropping every other\n                // row and column.  Note that we can do these things all together in\n                // one step.\n\n                // apply row filter\n                for (long r = 0; r < temp_img.nr(); ++r)\n                {\n                    long oc = 0;\n                    for (long c = 0; c < temp_img.nc(); ++c)\n                    {\n                        ptype pix1;\n                        ptype pix2;\n                        ptype pix3;\n                        ptype pix4;\n                        ptype pix5;\n\n                        assign_pixel(pix1, original[r][oc]);\n                        assign_pixel(pix2, original[r][oc+1]);\n                        assign_pixel(pix3, original[r][oc+2]);\n                        assign_pixel(pix4, original[r][oc+3]);\n                        assign_pixel(pix5, original[r][oc+4]);\n\n                        pix2 *= 4;\n                        pix3 *= 6;\n                        pix4 *= 4;\n                        \n                        assign_pixel(temp_img[r][c], pix1 + pix2 + pix3 + pix4 + pix5);\n                        oc += 2;\n                    }\n                }\n\n\n                // apply column filter\n                long dr = 0;\n                for (long r = 2; r < temp_img.nr()-2; r += 2)\n                {\n                    for (long c = 0; c < temp_img.nc(); ++c)\n                    {\n                        ptype temp = temp_img[r-2][c] + \n                                    temp_img[r-1][c]*4 +  \n                                    temp_img[r  ][c]*6 +  \n                                    temp_img[r-1][c]*4 +  \n                                    temp_img[r-2][c];  \n\n                        assign_pixel(down[dr][c],temp/256);\n                    }\n                    ++dr;\n                }\n\n            }\n\n        private:\n            struct rgbptype \n            {\n                uint16 red;\n                uint16 green;\n                uint16 blue;\n            };\n        public:\n        // ------------------------------------------\n        //       OVERLOAD FOR RGB TO RGB IMAGES\n        // ------------------------------------------\n            template <\n                typename in_image_type,\n                typename out_image_type\n                >\n            typename enable_if<both_images_rgb<in_image_type,out_image_type> >::type operator() (\n                const in_image_type& original_,\n                out_image_type& down_\n            ) const\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT( is_same_object(original_, down_) == false, \n                            \"\\t void pyramid_down_2_1::operator()\"\n                            << \"\\n\\t is_same_object(original_, down_): \" << is_same_object(original_, down_) \n                            << \"\\n\\t this:                           \" << this\n                            );\n\n                typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n                typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n                COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n                COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n                const_image_view<in_image_type> original(original_);\n                image_view<out_image_type> down(down_);\n\n                if (original.nr() <= 8 || original.nc() <= 8)\n                {\n                    down.clear();\n                    return;\n                }\n\n                array2d<rgbptype> temp_img;\n                temp_img.set_size(original.nr(), (original.nc()-3)/2);\n                down.set_size((original.nr()-3)/2, (original.nc()-3)/2);\n\n\n                // This function applies a 5x5 Gaussian filter to the image.  It\n                // does this by separating the filter into its horizontal and vertical\n                // components and then downsamples the image by dropping every other\n                // row and column.  Note that we can do these things all together in\n                // one step.\n\n                // apply row filter\n                for (long r = 0; r < temp_img.nr(); ++r)\n                {\n                    long oc = 0;\n                    for (long c = 0; c < temp_img.nc(); ++c)\n                    {\n                        rgbptype pix1;\n                        rgbptype pix2;\n                        rgbptype pix3;\n                        rgbptype pix4;\n                        rgbptype pix5;\n\n                        pix1.red = original[r][oc].red;\n                        pix2.red = original[r][oc+1].red;\n                        pix3.red = original[r][oc+2].red;\n                        pix4.red = original[r][oc+3].red;\n                        pix5.red = original[r][oc+4].red;\n                        pix1.green = original[r][oc].green;\n                        pix2.green = original[r][oc+1].green;\n                        pix3.green = original[r][oc+2].green;\n                        pix4.green = original[r][oc+3].green;\n                        pix5.green = original[r][oc+4].green;\n                        pix1.blue = original[r][oc].blue;\n                        pix2.blue = original[r][oc+1].blue;\n                        pix3.blue = original[r][oc+2].blue;\n                        pix4.blue = original[r][oc+3].blue;\n                        pix5.blue = original[r][oc+4].blue;\n\n                        pix2.red *= 4;\n                        pix3.red *= 6;\n                        pix4.red *= 4;\n\n                        pix2.green *= 4;\n                        pix3.green *= 6;\n                        pix4.green *= 4;\n\n                        pix2.blue *= 4;\n                        pix3.blue *= 6;\n                        pix4.blue *= 4;\n                        \n                        rgbptype temp;\n                        temp.red = pix1.red + pix2.red + pix3.red + pix4.red + pix5.red;\n                        temp.green = pix1.green + pix2.green + pix3.green + pix4.green + pix5.green;\n                        temp.blue = pix1.blue + pix2.blue + pix3.blue + pix4.blue + pix5.blue;\n\n                        temp_img[r][c] = temp;\n\n                        oc += 2;\n                    }\n                }\n\n\n                // apply column filter\n                long dr = 0;\n                for (long r = 2; r < temp_img.nr()-2; r += 2)\n                {\n                    for (long c = 0; c < temp_img.nc(); ++c)\n                    {\n                        rgbptype temp;\n                        temp.red = temp_img[r-2][c].red + \n                                temp_img[r-1][c].red*4 +  \n                                temp_img[r  ][c].red*6 +  \n                                temp_img[r-1][c].red*4 +  \n                                temp_img[r-2][c].red;  \n                        temp.green = temp_img[r-2][c].green + \n                                    temp_img[r-1][c].green*4 +  \n                                    temp_img[r  ][c].green*6 +  \n                                    temp_img[r-1][c].green*4 +  \n                                    temp_img[r-2][c].green;  \n                        temp.blue = temp_img[r-2][c].blue + \n                                    temp_img[r-1][c].blue*4 +  \n                                    temp_img[r  ][c].blue*6 +  \n                                    temp_img[r-1][c].blue*4 +  \n                                    temp_img[r-2][c].blue;  \n\n                        down[dr][c].red = temp.red/256;\n                        down[dr][c].green = temp.green/256;\n                        down[dr][c].blue = temp.blue/256;\n                    }\n                    ++dr;\n                }\n\n            }\n\n            template <\n                typename image_type\n                >\n            void operator() (\n                image_type& img\n            ) const\n            {\n                image_type temp;\n                (*this)(img, temp);\n                swap(temp, img);\n            }\n\n        private:\n\n\n        };\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        class pyramid_down_3_2 : noncopyable\n        {\n        public:\n\n            template <typename T>\n            vector<double,2> point_down (\n                const vector<T,2>& p\n            ) const\n            {\n                const double ratio = 2.0/3.0;\n                //do return (p - vector<T,2>(1,1))*ratio;\n                return p*ratio - vector<double,2>(ratio,ratio);\n            }\n\n            template <typename T>\n            vector<double,2> point_up (\n                const vector<T,2>& p\n            ) const\n            {\n                const double ratio = 3.0/2.0;\n                return p*ratio + vector<T,2>(1,1);\n            }\n\n        // -----------------------------\n\n            template <typename T>\n            vector<double,2> point_down (\n                const vector<T,2>& p,\n                unsigned int levels\n            ) const\n            {\n                vector<double,2> temp = p;\n                for (unsigned int i = 0; i < levels; ++i)\n                    temp = point_down(temp);\n                return temp;\n            }\n\n            template <typename T>\n            vector<double,2> point_up (\n                const vector<T,2>& p,\n                unsigned int levels\n            ) const\n            {\n                vector<double,2> temp = p;\n                for (unsigned int i = 0; i < levels; ++i)\n                    temp = point_up(temp);\n                return temp;\n            }\n\n        // -----------------------------\n\n            rectangle rect_up (\n                const rectangle& rect\n            ) const\n            {\n                return rectangle(point_up(rect.tl_corner()), point_up(rect.br_corner()));\n            }\n\n            rectangle rect_up (\n                const rectangle& rect,\n                unsigned int levels\n            ) const\n            {\n                return rectangle(point_up(rect.tl_corner(),levels), point_up(rect.br_corner(),levels));\n            }\n\n        // -----------------------------\n\n            rectangle rect_down (\n                const rectangle& rect\n            ) const\n            {\n                return rectangle(point_down(rect.tl_corner()), point_down(rect.br_corner()));\n            }\n\n            rectangle rect_down (\n                const rectangle& rect,\n                unsigned int levels\n            ) const\n            {\n                return rectangle(point_down(rect.tl_corner(),levels), point_down(rect.br_corner(),levels));\n            }\n\n        // -----------------------------\n\n        private:\n            template <typename T, typename U>\n            struct both_images_rgb\n            {\n                typedef typename image_traits<T>::pixel_type T_pix;\n                typedef typename image_traits<U>::pixel_type U_pix;\n                const static bool value = pixel_traits<T_pix>::rgb && pixel_traits<U_pix>::rgb;\n            };\n        public:\n\n            template <\n                typename in_image_type,\n                typename out_image_type\n                >\n            typename disable_if<both_images_rgb<in_image_type,out_image_type> >::type operator() (\n                const in_image_type& original_,\n                out_image_type& down_\n            ) const\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT(is_same_object(original_, down_) == false, \n                            \"\\t void pyramid_down_3_2::operator()\"\n                            << \"\\n\\t is_same_object(original_, down_): \" << is_same_object(original_, down_) \n                            << \"\\n\\t this:                           \" << this\n                            );\n\n                typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n                typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n                COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n                COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n                const_image_view<in_image_type> original(original_);\n                image_view<out_image_type> down(down_);\n\n                if (original.nr() <= 8 || original.nc() <= 8)\n                {\n                    down.clear();\n                    return;\n                }\n\n                const long size_in = 3;\n                const long size_out = 2;\n\n                typedef typename pixel_traits<in_pixel_type>::basic_pixel_type bp_type;\n                typedef typename promote<bp_type>::type ptype;\n                const long full_nr =  size_out*((original.nr()-2)/size_in);\n                const long part_nr = (size_out*(original.nr()-2))/size_in;\n                const long full_nc =  size_out*((original.nc()-2)/size_in);\n                const long part_nc = (size_out*(original.nc()-2))/size_in;\n                down.set_size(part_nr, part_nc);\n\n\n                long rr = 1;\n                long r;\n                for (r = 0; r < full_nr; r+=size_out)\n                {\n                    long cc = 1;\n                    long c;\n                    for (c = 0; c < full_nc; c+=size_out)\n                    {\n                        ptype block[size_in][size_in];\n                        separable_3x3_filter_block_grayscale(block, original_, rr, cc, 2, 12, 2);\n\n                        // bi-linearly interpolate block \n                        assign_pixel(down[r][c]     , (block[0][0]*9 + block[1][0]*3 + block[0][1]*3 + block[1][1])/(16*256));\n                        assign_pixel(down[r][c+1]   , (block[0][2]*9 + block[1][2]*3 + block[0][1]*3 + block[1][1])/(16*256));\n                        assign_pixel(down[r+1][c]   , (block[2][0]*9 + block[1][0]*3 + block[2][1]*3 + block[1][1])/(16*256));\n                        assign_pixel(down[r+1][c+1] , (block[2][2]*9 + block[1][2]*3 + block[2][1]*3 + block[1][1])/(16*256));\n\n                        cc += size_in;\n                    }\n                    if (part_nc - full_nc == 1)\n                    {\n                        ptype block[size_in][2];\n                        separable_3x3_filter_block_grayscale(block, original_, rr, cc, 2, 12, 2);\n\n                        // bi-linearly interpolate partial block \n                        assign_pixel(down[r][c]     , (block[0][0]*9 + block[1][0]*3 + block[0][1]*3 + block[1][1])/(16*256));\n                        assign_pixel(down[r+1][c]   , (block[2][0]*9 + block[1][0]*3 + block[2][1]*3 + block[1][1])/(16*256));\n                    }\n                    rr += size_in;\n                }\n                if (part_nr - full_nr == 1)\n                {\n                    long cc = 1;\n                    long c;\n                    for (c = 0; c < full_nc; c+=size_out)\n                    {\n                        ptype block[2][size_in];\n                        separable_3x3_filter_block_grayscale(block, original_, rr, cc, 2, 12, 2);\n\n                        // bi-linearly interpolate partial block \n                        assign_pixel(down[r][c]     , (block[0][0]*9 + block[1][0]*3 + block[0][1]*3 + block[1][1])/(16*256));\n                        assign_pixel(down[r][c+1]   , (block[0][2]*9 + block[1][2]*3 + block[0][1]*3 + block[1][1])/(16*256));\n\n                        cc += size_in;\n                    }\n                    if (part_nc - full_nc == 1)\n                    {\n                        ptype block[2][2];\n                        separable_3x3_filter_block_grayscale(block, original_, rr, cc, 2, 12, 2);\n\n                        // bi-linearly interpolate partial block \n                        assign_pixel(down[r][c]     , (block[0][0]*9 + block[1][0]*3 + block[0][1]*3 + block[1][1])/(16*256));\n                    }\n                }\n\n            }\n\n        private:\n            struct rgbptype \n            {\n                uint32 red;\n                uint32 green;\n                uint32 blue;\n            };\n\n        public:\n        // ------------------------------------------\n        //       OVERLOAD FOR RGB TO RGB IMAGES\n        // ------------------------------------------\n            template <\n                typename in_image_type,\n                typename out_image_type\n                >\n            typename enable_if<both_images_rgb<in_image_type,out_image_type> >::type operator() (\n                const in_image_type& original_,\n                out_image_type& down_\n            ) const\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT( is_same_object(original_, down_) == false, \n                            \"\\t void pyramid_down_3_2::operator()\"\n                            << \"\\n\\t is_same_object(original_, down_): \" << is_same_object(original_, down_) \n                            << \"\\n\\t this:                           \" << this\n                            );\n\n                typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n                typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n                COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n                COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n                const_image_view<in_image_type> original(original_);\n                image_view<out_image_type> down(down_);\n\n                if (original.nr() <= 8 || original.nc() <= 8)\n                {\n                    down.clear();\n                    return;\n                }\n\n                const long size_in = 3;\n                const long size_out = 2;\n\n                const long full_nr =  size_out*((original.nr()-2)/size_in);\n                const long part_nr = (size_out*(original.nr()-2))/size_in;\n                const long full_nc =  size_out*((original.nc()-2)/size_in);\n                const long part_nc = (size_out*(original.nc()-2))/size_in;\n                down.set_size(part_nr, part_nc);\n\n\n                long rr = 1;\n                long r;\n                for (r = 0; r < full_nr; r+=size_out)\n                {\n                    long cc = 1;\n                    long c;\n                    for (c = 0; c < full_nc; c+=size_out)\n                    {\n                        rgbptype block[size_in][size_in];\n                        separable_3x3_filter_block_rgb(block, original_, rr, cc, 2, 12, 2);\n\n                        // bi-linearly interpolate block \n                        down[r][c].red       = (block[0][0].red*9   + block[1][0].red*3   + block[0][1].red*3   + block[1][1].red)/(16*256);\n                        down[r][c].green     = (block[0][0].green*9 + block[1][0].green*3 + block[0][1].green*3 + block[1][1].green)/(16*256);\n                        down[r][c].blue      = (block[0][0].blue*9  + block[1][0].blue*3  + block[0][1].blue*3  + block[1][1].blue)/(16*256);\n\n                        down[r][c+1].red     = (block[0][2].red*9   + block[1][2].red*3   + block[0][1].red*3   + block[1][1].red)/(16*256);\n                        down[r][c+1].green   = (block[0][2].green*9 + block[1][2].green*3 + block[0][1].green*3 + block[1][1].green)/(16*256);\n                        down[r][c+1].blue    = (block[0][2].blue*9  + block[1][2].blue*3  + block[0][1].blue*3  + block[1][1].blue)/(16*256);\n\n                        down[r+1][c].red     = (block[2][0].red*9   + block[1][0].red*3   + block[2][1].red*3   + block[1][1].red)/(16*256);\n                        down[r+1][c].green   = (block[2][0].green*9 + block[1][0].green*3 + block[2][1].green*3 + block[1][1].green)/(16*256);\n                        down[r+1][c].blue    = (block[2][0].blue*9  + block[1][0].blue*3  + block[2][1].blue*3  + block[1][1].blue)/(16*256);\n\n                        down[r+1][c+1].red   = (block[2][2].red*9   + block[1][2].red*3   + block[2][1].red*3   + block[1][1].red)/(16*256);\n                        down[r+1][c+1].green = (block[2][2].green*9 + block[1][2].green*3 + block[2][1].green*3 + block[1][1].green)/(16*256);\n                        down[r+1][c+1].blue  = (block[2][2].blue*9  + block[1][2].blue*3  + block[2][1].blue*3  + block[1][1].blue)/(16*256);\n\n                        cc += size_in;\n                    }\n                    if (part_nc - full_nc == 1)\n                    {\n                        rgbptype block[size_in][2];\n                        separable_3x3_filter_block_rgb(block, original_, rr, cc, 2, 12, 2);\n\n                        // bi-linearly interpolate partial block \n                        down[r][c].red       = (block[0][0].red*9   + block[1][0].red*3   + block[0][1].red*3   + block[1][1].red)/(16*256);\n                        down[r][c].green     = (block[0][0].green*9 + block[1][0].green*3 + block[0][1].green*3 + block[1][1].green)/(16*256);\n                        down[r][c].blue      = (block[0][0].blue*9  + block[1][0].blue*3  + block[0][1].blue*3  + block[1][1].blue)/(16*256);\n\n                        down[r+1][c].red     = (block[2][0].red*9   + block[1][0].red*3   + block[2][1].red*3   + block[1][1].red)/(16*256);\n                        down[r+1][c].green   = (block[2][0].green*9 + block[1][0].green*3 + block[2][1].green*3 + block[1][1].green)/(16*256);\n                        down[r+1][c].blue    = (block[2][0].blue*9  + block[1][0].blue*3  + block[2][1].blue*3  + block[1][1].blue)/(16*256);\n                    }\n                    rr += size_in;\n                }\n                if (part_nr - full_nr == 1)\n                {\n                    long cc = 1;\n                    long c;\n                    for (c = 0; c < full_nc; c+=size_out)\n                    {\n                        rgbptype block[2][size_in];\n                        separable_3x3_filter_block_rgb(block, original_, rr, cc, 2, 12, 2);\n\n                        // bi-linearly interpolate partial block \n                        down[r][c].red       = (block[0][0].red*9   + block[1][0].red*3   + block[0][1].red*3   + block[1][1].red)/(16*256);\n                        down[r][c].green     = (block[0][0].green*9 + block[1][0].green*3 + block[0][1].green*3 + block[1][1].green)/(16*256);\n                        down[r][c].blue      = (block[0][0].blue*9  + block[1][0].blue*3  + block[0][1].blue*3  + block[1][1].blue)/(16*256);\n\n                        down[r][c+1].red     = (block[0][2].red*9   + block[1][2].red*3   + block[0][1].red*3   + block[1][1].red)/(16*256);\n                        down[r][c+1].green   = (block[0][2].green*9 + block[1][2].green*3 + block[0][1].green*3 + block[1][1].green)/(16*256);\n                        down[r][c+1].blue    = (block[0][2].blue*9  + block[1][2].blue*3  + block[0][1].blue*3  + block[1][1].blue)/(16*256);\n\n                        cc += size_in;\n                    }\n                    if (part_nc - full_nc == 1)\n                    {\n                        rgbptype block[2][2];\n                        separable_3x3_filter_block_rgb(block, original_, rr, cc, 2, 12, 2);\n\n                        // bi-linearly interpolate partial block \n                        down[r][c].red       = (block[0][0].red*9   + block[1][0].red*3   + block[0][1].red*3   + block[1][1].red)/(16*256);\n                        down[r][c].green     = (block[0][0].green*9 + block[1][0].green*3 + block[0][1].green*3 + block[1][1].green)/(16*256);\n                        down[r][c].blue      = (block[0][0].blue*9  + block[1][0].blue*3  + block[0][1].blue*3  + block[1][1].blue)/(16*256);\n                    }\n                }\n            }\n\n            template <\n                typename image_type\n                >\n            void operator() (\n                image_type& img\n            ) const\n            {\n                image_type temp;\n                (*this)(img, temp);\n                swap(temp, img);\n            }\n        private:\n\n\n        };\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned int N\n        >\n    class pyramid_down : noncopyable\n    {\n    public:\n\n        COMPILE_TIME_ASSERT(N > 0);\n\n        template <typename T>\n        vector<double,2> point_down (\n            const vector<T,2>& p\n        ) const\n        {\n            const double ratio = (N-1.0)/N;\n            return p*ratio;\n        }\n\n        template <typename T>\n        vector<double,2> point_up (\n            const vector<T,2>& p\n        ) const\n        {\n            const double ratio = N/(N-1.0);\n            return p*ratio;\n        }\n\n    // -----------------------------\n\n        template <typename T>\n        vector<double,2> point_down (\n            const vector<T,2>& p,\n            unsigned int levels\n        ) const\n        {\n            vector<double,2> temp = p;\n            for (unsigned int i = 0; i < levels; ++i)\n                temp = point_down(temp);\n            return temp;\n        }\n\n        template <typename T>\n        vector<double,2> point_up (\n            const vector<T,2>& p,\n            unsigned int levels\n        ) const\n        {\n            vector<double,2> temp = p;\n            for (unsigned int i = 0; i < levels; ++i)\n                temp = point_up(temp);\n            return temp;\n        }\n\n    // -----------------------------\n\n        rectangle rect_up (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(point_up(rect.tl_corner()), point_up(rect.br_corner()));\n        }\n\n        rectangle rect_up (\n            const rectangle& rect,\n            unsigned int levels\n        ) const\n        {\n            return rectangle(point_up(rect.tl_corner(),levels), point_up(rect.br_corner(),levels));\n        }\n\n    // -----------------------------\n\n        rectangle rect_down (\n            const rectangle& rect\n        ) const\n        {\n            return rectangle(point_down(rect.tl_corner()), point_down(rect.br_corner()));\n        }\n\n        rectangle rect_down (\n            const rectangle& rect,\n            unsigned int levels\n        ) const\n        {\n            return rectangle(point_down(rect.tl_corner(),levels), point_down(rect.br_corner(),levels));\n        }\n\n        template <\n            typename in_image_type,\n            typename out_image_type\n            >\n        void operator() (\n            const in_image_type& original,\n            out_image_type& down\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_same_object(original, down) == false, \n                        \"\\t void pyramid_down::operator()\"\n                        << \"\\n\\t is_same_object(original, down): \" << is_same_object(original, down) \n                        << \"\\n\\t this:                           \" << this\n                        );\n\n            typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n            typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n            COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n            COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n\n            set_image_size(down, ((N-1)*num_rows(original))/N, ((N-1)*num_columns(original))/N);\n            resize_image(original, down);\n        }\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            image_type& img\n        ) const\n        {\n            image_type temp;\n            (*this)(img, temp);\n            swap(temp, img);\n        }\n    };\n\n    template <>\n    class pyramid_down<1> : public pyramid_disable {};\n\n    template <>\n    class pyramid_down<2> : public dlib::impl::pyramid_down_2_1 {};\n\n    template <>\n    class pyramid_down<3> : public dlib::impl::pyramid_down_3_2 {};\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IMAGE_PYRaMID_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/image_pyramid_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_IMAGE_PYRaMID_ABSTRACT_Hh_\n#ifdef DLIB_IMAGE_PYRaMID_ABSTRACT_Hh_\n\n#include \"../pixel.h\"\n#include \"../array2d.h\"\n#include \"../geometry.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n    template <\n        unsigned int N\n        >\n    class pyramid_down : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON N\n                N > 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple functor to help create image pyramids.  In particular, it\n                downsamples images at a ratio of N to N-1.\n\n                Note that setting N to 1 means that this object functions like\n                pyramid_disable (defined at the bottom of this file).  \n\n                WARNING, when mapping rectangles from one layer of a pyramid\n                to another you might end up with rectangles which extend slightly \n                outside your images.  This is because points on the border of an \n                image at a higher pyramid layer might correspond to points outside \n                images at lower layers.  So just keep this in mind.  Note also\n                that it's easy to deal with.  Just say something like this:\n                    rect = rect.intersect(get_rect(my_image)); // keep rect inside my_image \n        !*/\n    public:\n\n        template <\n            typename in_image_type,\n            typename out_image_type\n            >\n        void operator() (\n            const in_image_type& original,\n            out_image_type& down\n        ) const;\n        /*!\n            requires\n                - is_same_object(original, down) == false\n                - in_image_type == an image object that implements the interface defined in\n                  dlib/image_processing/generic_image.h \n                - out_image_type == an image object that implements the interface defined in\n                  dlib/image_processing/generic_image.h \n                - for both pixel types P in the input and output images, we require:\n                    - pixel_traits<P>::has_alpha == false\n            ensures\n                - #down will contain an image that is roughly (N-1)/N times the size of the\n                  original image.  \n                - If both input and output images contain RGB pixels then the downsampled image will\n                  be in color.  Otherwise, the downsampling will be performed in a grayscale mode.\n                - The location of a point P in original image will show up at point point_down(P)\n                  in the #down image.  \n                - Note that some points on the border of the original image might correspond to \n                  points outside the #down image.  \n        !*/\n\n        template <\n            typename image_type\n            >\n        void operator() (\n            image_type& img\n        ) const;\n        /*!\n            requires\n                - image_type == an image object that implements the interface defined in\n                  dlib/image_processing/generic_image.h \n                - pixel_traits<typename image_traits<image_type>::pixel_type>::has_alpha == false\n            ensures\n                - This function downsamples the given image and stores the results in #img.\n                  In particular, it is equivalent to performing: \n                    (*this)(img, temp); \n                    swap(img, temp);\n        !*/\n\n    // -------------------------------\n\n        template <typename T>\n        vector<double,2> point_down (\n            const vector<T,2>& p\n        ) const;\n        /*!\n            ensures\n                - interprets p as a point in a parent image and returns the\n                  point in a downsampled image which corresponds to p.\n                - This function is the inverse of point_up().  I.e. for a point P:\n                  point_down(point_up(P)) == P\n        !*/\n\n        template <typename T>\n        vector<double,2> point_up (\n            const vector<T,2>& p\n        ) const;\n        /*!\n            ensures\n                - interprets p as a point in a downsampled image and returns the\n                  point in a parent image which corresponds to p.\n                - This function is the inverse of point_down().  I.e. for a point P:\n                  point_up(point_down(P)) == P\n        !*/\n\n        rectangle rect_down (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns rectangle(point_down(rect.tl_corner()), point_down(rect.br_corner()));\n                  (i.e. maps rect into a downsampled)\n        !*/\n\n        rectangle rect_up (\n            const rectangle& rect\n        ) const;\n        /*!\n            ensures\n                - returns rectangle(point_up(rect.tl_corner()), point_up(rect.br_corner()));\n                  (i.e. maps rect into a parent image)\n        !*/\n\n    // -------------------------------\n\n        template <typename T>\n        vector<double,2> point_down (\n            const vector<T,2>& p,\n            unsigned int levels\n        ) const;\n        /*!\n            ensures\n                - applies point_down() to p levels times and returns the result.\n                  (i.e. point_down(p,2) == point_down(point_down(p)),\n                        point_down(p,1) == point_down(p),\n                        point_down(p,0) == p,  etc. )\n        !*/\n\n        template <typename T>\n        vector<double,2> point_up (\n            const vector<T,2>& p,\n            unsigned int levels\n        ) const;\n        /*!\n            ensures\n                - applies point_up() to p levels times and returns the result.\n                  (i.e. point_up(p,2) == point_up(point_up(p)),\n                        point_up(p,1) == point_up(p),\n                        point_up(p,0) == p,  etc. )\n        !*/\n\n        rectangle rect_down (\n            const rectangle& rect,\n            unsigned int levels\n        ) const;\n        /*!\n            ensures\n                - returns rectangle(point_down(rect.tl_corner(),levels), point_down(rect.br_corner(),levels));\n                  (i.e. Basically applies rect_down() to rect levels times and returns the result.)\n        !*/\n\n        rectangle rect_up (\n            const rectangle& rect,\n            unsigned int levels\n        ) const;\n        /*!\n            ensures\n                - returns rectangle(point_up(rect.tl_corner(),levels), point_up(rect.br_corner(),levels));\n                  (i.e. Basically applies rect_up() to rect levels times and returns the result.)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class pyramid_disable : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a function object with an interface identical to pyramid_down (defined\n                at the top of this file) except that it downsamples images at a ratio of infinity\n                to 1.  That means it always outputs images of size 0 regardless of the size\n                of the inputs.  \n                \n                This is useful because it can be supplied to routines which take a pyramid_down \n                function object and it will essentially disable pyramid processing.  This way, \n                a pyramid oriented function can be turned into a regular routine which processes\n                just the original undownsampled image.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IMAGE_PYRaMID_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/integral_image.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_INTEGRAL_IMAGE\n#define DLIB_INTEGRAL_IMAGE\n\n#include \"integral_image_abstract.h\"\n\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include \"../geometry.h\"\n#include \"../array2d.h\"\n#include \"../matrix.h\"\n#include \"../pixel.h\"\n#include \"../noncopyable.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class integral_image_generic : noncopyable\n    {\n    public:\n        typedef T value_type;\n\n        long nr() const { return int_img.nr(); }\n        long nc() const { return int_img.nc(); }\n\n        template <typename image_type>\n        void load (\n            const image_type& img_\n        )\n        {\n            const_image_view<image_type> img(img_);\n            T pixel;\n            int_img.set_size(img.nr(), img.nc());\n\n            // compute the first row of the integral image\n            T temp = 0;\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                assign_pixel(pixel, img[0][c]);\n                temp += pixel;\n                int_img[0][c] = temp;\n            }\n\n            // now compute the rest of the integral image\n            for (long r = 1; r < img.nr(); ++r)\n            {\n                temp = 0;\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    assign_pixel(pixel, img[r][c]);\n                    temp += pixel;\n                    int_img[r][c] = temp + int_img[r-1][c];\n                }\n            }\n\n        }\n\n        value_type get_sum_of_area (\n            const rectangle& rect\n        ) const\n        {\n            DLIB_ASSERT(get_rect(*this).contains(rect) == true && rect.is_empty() == false,\n                \"\\tvalue_type get_sum_of_area(rect)\"\n                << \"\\n\\tYou have given a rectangle that goes outside the image\"\n                << \"\\n\\tthis:            \" << this\n                << \"\\n\\trect.is_empty(): \" << rect.is_empty()\n                << \"\\n\\trect:            \" << rect \n                << \"\\n\\tget_rect(*this): \" << get_rect(*this) \n            );\n\n            T top_left = 0, top_right = 0, bottom_left = 0, bottom_right = 0;\n\n            bottom_right = int_img[rect.bottom()][rect.right()];\n            if (rect.left()-1 >= 0 && rect.top()-1 >= 0)\n            {\n                top_left = int_img[rect.top()-1][rect.left()-1];\n                bottom_left = int_img[rect.bottom()][rect.left()-1];\n                top_right = int_img[rect.top()-1][rect.right()];\n            }\n            else if (rect.left()-1 >= 0)\n            {\n                bottom_left = int_img[rect.bottom()][rect.left()-1];\n            }\n            else if (rect.top()-1 >= 0)\n            {\n                top_right = int_img[rect.top()-1][rect.right()];\n            }\n\n            return bottom_right - bottom_left - top_right + top_left;\n        }\n\n        void swap(integral_image_generic& item)\n        {\n            int_img.swap(item.int_img);\n        }\n\n    private:\n\n        array2d<T> int_img;\n    };\n\n\n    template <\n        typename T\n        >\n    void swap (\n        integral_image_generic<T>& a,\n        integral_image_generic<T>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    typedef integral_image_generic<long> integral_image;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename integral_image_type>\n    typename integral_image_type::value_type haar_x (\n        const integral_image_type& img,\n        const point& p,\n        long width\n    )\n    {\n        DLIB_ASSERT(get_rect(img).contains(centered_rect(p,width,width)) == true,\n            \"\\tlong haar_x(img,p,width)\"\n            << \"\\n\\tYou have given a point and with that goes outside the image\"\n            << \"\\n\\tget_rect(img):  \" << get_rect(img) \n            << \"\\n\\tp:              \" << p \n            << \"\\n\\twidth:          \" << width \n        );\n\n        rectangle left_rect;\n        left_rect.set_left ( p.x() - width / 2 );\n        left_rect.set_top ( p.y() - width / 2 );\n        left_rect.set_right ( p.x()-1 );\n        left_rect.set_bottom ( left_rect.top() + width - 1 );\n\n        rectangle right_rect;\n        right_rect.set_left ( p.x() );\n        right_rect.set_top ( left_rect.top() );\n        right_rect.set_right ( left_rect.left() + width -1 );\n        right_rect.set_bottom ( left_rect.bottom() );\n\n        return img.get_sum_of_area(right_rect) - img.get_sum_of_area(left_rect);\n    }\n\n    //  ----------------------------------------------------------------------------\n\n    template <typename integral_image_type>\n    typename integral_image_type::value_type haar_y (\n        const integral_image_type& img,\n        const point& p,\n        long width\n    )\n    {\n        DLIB_ASSERT(get_rect(img).contains(centered_rect(p,width,width)) == true,\n            \"\\tlong haar_y(img,p,width)\"\n            << \"\\n\\tYou have given a point and with that goes outside the image\"\n            << \"\\n\\tget_rect(img):  \" << get_rect(img) \n            << \"\\n\\tp:              \" << p \n            << \"\\n\\twidth:          \" << width \n        );\n\n        rectangle top_rect;\n        top_rect.set_left ( p.x() - width / 2 );\n        top_rect.set_top ( p.y() - width / 2 );\n        top_rect.set_right ( top_rect.left() + width - 1 );\n        top_rect.set_bottom ( p.y()-1 );\n\n        rectangle bottom_rect;\n        bottom_rect.set_left ( top_rect.left() );\n        bottom_rect.set_top ( p.y() );\n        bottom_rect.set_right ( top_rect.right() );\n        bottom_rect.set_bottom ( top_rect.top() + width - 1 );\n\n        return img.get_sum_of_area(bottom_rect) - img.get_sum_of_area(top_rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_INTEGRAL_IMAGE\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/integral_image_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_INTEGRAL_IMAGe_ABSTRACT_\n#ifdef DLIB_INTEGRAL_IMAGe_ABSTRACT_\n\n#include \"../geometry/rectangle_abstract.h\"\n#include \"../array2d/array2d_kernel_abstract.h\"\n#include \"../pixel.h\"\n#include \"../noncopyable.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class integral_image_generic : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON T\n                T should be a built in scalar type.  Moreover, it should\n                be capable of storing sums of whatever kind of pixel\n                you will be dealing with.\n\n            INITIAL VALUE\n                - nr() == 0\n                - nc() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is an alternate way of representing image data\n                that allows for very fast computations of sums of pixels in \n                rectangular regions.  To use this object you load it with a\n                normal image and then you can use the get_sum_of_area()\n                function to compute sums of pixels in a given area in\n                constant time.\n        !*/\n    public:\n        typedef T value_type;\n\n        const long nr(\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in this integral image object\n        !*/\n\n        const long nc(\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns in this integral image object\n        !*/\n\n        template <typename image_type>\n        void load (\n            const image_type& img\n        );\n        /*!\n            requires\n                - image_type == an image object that implements the interface defined in\n                  dlib/image_processing/generic_image.h \n                - Let P denote the type of pixel in img, then we require:\n                    - pixel_traits<P>::has_alpha == false \n            ensures\n                - #nr() == img.nr()\n                - #nc() == img.nc()\n                - #*this will now contain an \"integral image\" representation of the\n                  given input image.  \n        !*/\n\n        value_type get_sum_of_area (\n            const rectangle& rect\n        ) const;\n        /*!\n            requires\n                - rect.is_empty() == false\n                - get_rect(*this).contains(rect) == true\n                  (i.e. rect must not be outside the integral image)\n            ensures\n                - Let O denote the image this integral image was generated from.\n                  Then this function returns sum(subm(mat(O),rect)).\n                  That is, this function returns the sum of the pixels in O that\n                  are contained within the given rectangle.\n        !*/\n\n        void swap(\n            integral_image_generic& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template < typename T >\n    void swap (\n        integral_image_generic<T>& a,\n        integral_image_generic<T>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/ \n\n// ----------------------------------------------------------------------------------------\n\n    typedef integral_image_generic<long> integral_image;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename integral_image_type>\n    typename integral_image_type::value_type haar_x (\n        const integral_image_type& img,\n        const point& p,\n        long width\n    )\n    /*!\n        requires\n            - get_rect(img).contains(centered_rect(p,width,width)) == true\n            - integral_image_type == a type that implements the integral_image_generic \n              interface defined above\n        ensures\n            - returns the response of a Haar wavelet centered at the point p\n              with the given width.  The wavelet is oriented along the X axis\n              and has the following shape:\n                ----++++\n                ----++++\n                ----++++\n                ----++++\n              That is, the wavelet is square and computes the sum of pixels on the\n              right minus the sum of pixels on the left.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename integral_image_type>\n    typename integral_image_type::value_type haar_y (\n        const integral_image_type& img,\n        const point& p,\n        long width\n    )\n    /*!\n        requires\n            - get_rect(img).contains(centered_rect(p,width,width)) == true\n            - integral_image_type == a type that implements the integral_image_generic \n              interface defined above\n        ensures\n            - returns the response of a Haar wavelet centered at the point p\n              with the given width in the given image.  The wavelet is oriented \n              along the Y axis and has the following shape:\n                --------\n                --------\n                ++++++++\n                ++++++++\n              That is, the wavelet is square and computes the sum of pixels on the\n              bottom minus the sum of pixels on the top.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_INTEGRAL_IMAGe_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/interpolation.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_INTERPOlATIONh_\n#define DLIB_INTERPOlATIONh_ \n\n#include \"interpolation_abstract.h\"\n#include \"../pixel.h\"\n#include \"../matrix.h\"\n#include \"assign_image.h\"\n#include \"image_pyramid.h\"\n#include \"../simd.h\"\n#include \"../image_processing/full_object_detection.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class interpolate_nearest_neighbor\n    {\n    public:\n\n        template <typename image_view_type, typename pixel_type>\n        bool operator() (\n            const image_view_type& img,\n            const dlib::point& p,\n            pixel_type& result\n        ) const\n        {\n            COMPILE_TIME_ASSERT(pixel_traits<typename image_view_type::pixel_type>::has_alpha == false);\n\n            if (get_rect(img).contains(p))\n            {\n                assign_pixel(result, img[p.y()][p.x()]);\n                return true;\n            }\n            else\n            {\n                return false;\n            }\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class interpolate_bilinear\n    {\n        template <typename T>\n        struct is_rgb_image \n        {\n            const static bool value = pixel_traits<typename T::pixel_type>::rgb;\n        };\n\n    public:\n\n        template <typename T, typename image_view_type, typename pixel_type>\n        typename disable_if<is_rgb_image<image_view_type>,bool>::type operator() (\n            const image_view_type& img,\n            const dlib::vector<T,2>& p,\n            pixel_type& result\n        ) const\n        {\n            COMPILE_TIME_ASSERT(pixel_traits<typename image_view_type::pixel_type>::has_alpha == false);\n\n            const long left   = static_cast<long>(std::floor(p.x()));\n            const long top    = static_cast<long>(std::floor(p.y()));\n            const long right  = left+1;\n            const long bottom = top+1;\n\n\n            // if the interpolation goes outside img \n            if (!(left >= 0 && top >= 0 && right < img.nc() && bottom < img.nr()))\n                return false;\n\n            const double lr_frac = p.x() - left;\n            const double tb_frac = p.y() - top;\n\n            double tl = 0, tr = 0, bl = 0, br = 0;\n\n            assign_pixel(tl, img[top][left]);\n            assign_pixel(tr, img[top][right]);\n            assign_pixel(bl, img[bottom][left]);\n            assign_pixel(br, img[bottom][right]);\n            \n            double temp = (1-tb_frac)*((1-lr_frac)*tl + lr_frac*tr) + \n                              tb_frac*((1-lr_frac)*bl + lr_frac*br);\n                            \n            assign_pixel(result, temp);\n            return true;\n        }\n\n        template <typename T, typename image_view_type, typename pixel_type>\n        typename enable_if<is_rgb_image<image_view_type>,bool>::type operator() (\n            const image_view_type& img,\n            const dlib::vector<T,2>& p,\n            pixel_type& result\n        ) const\n        {\n            COMPILE_TIME_ASSERT(pixel_traits<typename image_view_type::pixel_type>::has_alpha == false);\n\n            const long left   = static_cast<long>(std::floor(p.x()));\n            const long top    = static_cast<long>(std::floor(p.y()));\n            const long right  = left+1;\n            const long bottom = top+1;\n\n\n            // if the interpolation goes outside img \n            if (!(left >= 0 && top >= 0 && right < img.nc() && bottom < img.nr()))\n                return false;\n\n            const double lr_frac = p.x() - left;\n            const double tb_frac = p.y() - top;\n\n            double tl, tr, bl, br;\n\n            tl = img[top][left].red;\n            tr = img[top][right].red;\n            bl = img[bottom][left].red;\n            br = img[bottom][right].red;\n            const double red = (1-tb_frac)*((1-lr_frac)*tl + lr_frac*tr) + \n                                   tb_frac*((1-lr_frac)*bl + lr_frac*br);\n\n            tl = img[top][left].green;\n            tr = img[top][right].green;\n            bl = img[bottom][left].green;\n            br = img[bottom][right].green;\n            const double green = (1-tb_frac)*((1-lr_frac)*tl + lr_frac*tr) + \n                                   tb_frac*((1-lr_frac)*bl + lr_frac*br);\n\n            tl = img[top][left].blue;\n            tr = img[top][right].blue;\n            bl = img[bottom][left].blue;\n            br = img[bottom][right].blue;\n            const double blue = (1-tb_frac)*((1-lr_frac)*tl + lr_frac*tr) + \n                                   tb_frac*((1-lr_frac)*bl + lr_frac*br);\n                            \n            rgb_pixel temp;\n            assign_pixel(temp.red, red);\n            assign_pixel(temp.green, green);\n            assign_pixel(temp.blue, blue);\n            assign_pixel(result, temp);\n            return true;\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class interpolate_quadratic\n    {\n        template <typename T>\n        struct is_rgb_image \n        {\n            const static bool value = pixel_traits<typename T::pixel_type>::rgb;\n        };\n\n    public:\n\n        template <typename T, typename image_view_type, typename pixel_type>\n        typename disable_if<is_rgb_image<image_view_type>,bool>::type operator() (\n            const image_view_type& img,\n            const dlib::vector<T,2>& p,\n            pixel_type& result\n        ) const\n        {\n            COMPILE_TIME_ASSERT(pixel_traits<typename image_view_type::pixel_type>::has_alpha == false);\n\n            const point pp(p);\n\n            // if the interpolation goes outside img \n            if (!get_rect(img).contains(grow_rect(pp,1))) \n                return false;\n\n            const long r = pp.y();\n            const long c = pp.x();\n\n            const double temp = interpolate(p-pp, \n                                    img[r-1][c-1],\n                                    img[r-1][c  ],\n                                    img[r-1][c+1],\n                                    img[r  ][c-1],\n                                    img[r  ][c  ],\n                                    img[r  ][c+1],\n                                    img[r+1][c-1],\n                                    img[r+1][c  ],\n                                    img[r+1][c+1]);\n\n            assign_pixel(result, temp);\n            return true;\n        }\n\n        template <typename T, typename image_view_type, typename pixel_type>\n        typename enable_if<is_rgb_image<image_view_type>,bool>::type operator() (\n            const image_view_type& img,\n            const dlib::vector<T,2>& p,\n            pixel_type& result\n        ) const\n        {\n            COMPILE_TIME_ASSERT(pixel_traits<typename image_view_type::pixel_type>::has_alpha == false);\n\n            const point pp(p);\n\n            // if the interpolation goes outside img \n            if (!get_rect(img).contains(grow_rect(pp,1))) \n                return false;\n\n            const long r = pp.y();\n            const long c = pp.x();\n\n            const double red = interpolate(p-pp, \n                            img[r-1][c-1].red,\n                            img[r-1][c  ].red,\n                            img[r-1][c+1].red,\n                            img[r  ][c-1].red,\n                            img[r  ][c  ].red,\n                            img[r  ][c+1].red,\n                            img[r+1][c-1].red,\n                            img[r+1][c  ].red,\n                            img[r+1][c+1].red);\n            const double green = interpolate(p-pp, \n                            img[r-1][c-1].green,\n                            img[r-1][c  ].green,\n                            img[r-1][c+1].green,\n                            img[r  ][c-1].green,\n                            img[r  ][c  ].green,\n                            img[r  ][c+1].green,\n                            img[r+1][c-1].green,\n                            img[r+1][c  ].green,\n                            img[r+1][c+1].green);\n            const double blue = interpolate(p-pp, \n                            img[r-1][c-1].blue,\n                            img[r-1][c  ].blue,\n                            img[r-1][c+1].blue,\n                            img[r  ][c-1].blue,\n                            img[r  ][c  ].blue,\n                            img[r  ][c+1].blue,\n                            img[r+1][c-1].blue,\n                            img[r+1][c  ].blue,\n                            img[r+1][c+1].blue);\n\n\n            rgb_pixel temp;\n            assign_pixel(temp.red, red);\n            assign_pixel(temp.green, green);\n            assign_pixel(temp.blue, blue);\n            assign_pixel(result, temp);\n\n            return true;\n        }\n\n    private:\n\n        /*  tl tm tr\n            ml mm mr\n            bl bm br\n        */\n        // The above is the pixel layout in our little 3x3 neighborhood.  interpolate() will \n        // fit a quadratic to these 9 pixels and then use that quadratic to find the interpolated \n        // value at point p.\n        inline double interpolate(\n            const dlib::vector<double,2>& p,\n            double tl, double tm, double tr, \n            double ml, double mm, double mr, \n            double bl, double bm, double br\n        ) const\n        {\n            matrix<double,6,1> w;\n            // x\n            w(0) = (tr + mr + br - tl - ml - bl)*0.16666666666;\n            // y\n            w(1) = (bl + bm + br - tl - tm - tr)*0.16666666666;\n            // x^2\n            w(2) = (tl + tr + ml + mr + bl + br)*0.16666666666 - (tm + mm + bm)*0.333333333;\n            // x*y\n            w(3) = (tl - tr - bl + br)*0.25;\n            // y^2\n            w(4) = (tl + tm + tr + bl + bm + br)*0.16666666666 - (ml + mm + mr)*0.333333333;\n            // 1 (constant term)\n            w(5) = (tm + ml + mr + bm)*0.222222222 - (tl + tr + bl + br)*0.11111111 + (mm)*0.55555556;\n\n            const double x = p.x();\n            const double y = p.y();\n\n            matrix<double,6,1> z;\n            z = x, y, x*x, x*y, y*y, 1.0;\n                            \n            return dot(w,z);\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class black_background\n    {\n    public:\n        template <typename pixel_type>\n        void operator() ( pixel_type& p) const { assign_pixel(p, 0); }\n    };\n\n    class white_background\n    {\n    public:\n        template <typename pixel_type>\n        void operator() ( pixel_type& p) const { assign_pixel(p, 255); }\n    };\n\n    class no_background\n    {\n    public:\n        template <typename pixel_type>\n        void operator() ( pixel_type& ) const { }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type,\n        typename point_mapping_type,\n        typename background_type\n        >\n    void transform_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const interpolation_type& interp,\n        const point_mapping_type& map_point,\n        const background_type& set_background,\n        const rectangle& area\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( get_rect(out_img).contains(area) == true &&\n                     is_same_object(in_img, out_img) == false ,\n            \"\\t void transform_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t get_rect(out_img).contains(area): \" << get_rect(out_img).contains(area)\n            << \"\\n\\t get_rect(out_img): \" << get_rect(out_img)\n            << \"\\n\\t area:              \" << area\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        const_image_view<image_type1> imgv(in_img);\n        image_view<image_type2> out_imgv(out_img);\n\n        for (long r = area.top(); r <= area.bottom(); ++r)\n        {\n            for (long c = area.left(); c <= area.right(); ++c)\n            {\n                if (!interp(imgv, map_point(dlib::vector<double,2>(c,r)), out_imgv[r][c]))\n                    set_background(out_imgv[r][c]);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type,\n        typename point_mapping_type,\n        typename background_type\n        >\n    void transform_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const interpolation_type& interp,\n        const point_mapping_type& map_point,\n        const background_type& set_background\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t void transform_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        transform_image(in_img, out_img, interp, map_point, set_background, get_rect(out_img));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type,\n        typename point_mapping_type\n        >\n    void transform_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const interpolation_type& interp,\n        const point_mapping_type& map_point\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t void transform_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n\n        transform_image(in_img, out_img, interp, map_point, black_background(), get_rect(out_img));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type\n        >\n    point_transform_affine rotate_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        double angle,\n        const interpolation_type& interp\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t point_transform_affine rotate_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        const rectangle rimg = get_rect(in_img);\n\n\n        // figure out bounding box for rotated rectangle\n        rectangle rect;\n        rect += rotate_point(center(rimg), rimg.tl_corner(), -angle);\n        rect += rotate_point(center(rimg), rimg.tr_corner(), -angle);\n        rect += rotate_point(center(rimg), rimg.bl_corner(), -angle);\n        rect += rotate_point(center(rimg), rimg.br_corner(), -angle);\n        out_img.set_size(rect.height(), rect.width());\n\n        const matrix<double,2,2> R = rotation_matrix(angle);\n\n        point_transform_affine trans = point_transform_affine(R, -R*dcenter(get_rect(out_img)) + dcenter(rimg));\n        transform_image(in_img, out_img, interp, trans);\n        return inv(trans);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    point_transform_affine rotate_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        double angle\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t point_transform_affine rotate_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        return rotate_image(in_img, out_img, angle, interpolate_quadratic());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        class helper_resize_image \n        {\n        public:\n            helper_resize_image(\n                double x_scale_,\n                double y_scale_\n            ):\n                x_scale(x_scale_),\n                y_scale(y_scale_)\n            {}\n\n            dlib::vector<double,2> operator() (\n                const dlib::vector<double,2>& p\n            ) const\n            {\n                return dlib::vector<double,2>(p.x()*x_scale, p.y()*y_scale);\n            }\n\n        private:\n            const double x_scale;\n            const double y_scale;\n        };\n    }\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type\n        >\n    void resize_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const interpolation_type& interp\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t void resize_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        const double x_scale = (num_columns(in_img)-1)/(double)std::max<long>((num_columns(out_img)-1),1);\n        const double y_scale = (num_rows(in_img)-1)/(double)std::max<long>((num_rows(out_img)-1),1);\n        transform_image(in_img, out_img, interp, \n                        dlib::impl::helper_resize_image(x_scale,y_scale));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    struct is_rgb_image { const static bool value = pixel_traits<typename image_traits<image_type>::pixel_type>::rgb; };\n    template <typename image_type>\n    struct is_grayscale_image { const static bool value = pixel_traits<typename image_traits<image_type>::pixel_type>::grayscale; };\n\n    // This is an optimized version of resize_image for the case where bilinear\n    // interpolation is used.\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    typename disable_if_c<(is_rgb_image<image_type1>::value&&is_rgb_image<image_type2>::value) || \n                          (is_grayscale_image<image_type1>::value&&is_grayscale_image<image_type2>::value)>::type \n    resize_image (\n        const image_type1& in_img_,\n        image_type2& out_img_,\n        interpolate_bilinear\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img_, out_img_) == false ,\n            \"\\t void resize_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img_, out_img_):  \" << is_same_object(in_img_, out_img_)\n            );\n\n        const_image_view<image_type1> in_img(in_img_);\n        image_view<image_type2> out_img(out_img_);\n\n        if (out_img.nr() <= 1 || out_img.nc() <= 1)\n        {\n            assign_all_pixels(out_img, 0);\n            return;\n        }\n\n\n        typedef typename image_traits<image_type1>::pixel_type T;\n        typedef typename image_traits<image_type2>::pixel_type U;\n        const double x_scale = (in_img.nc()-1)/(double)std::max<long>((out_img.nc()-1),1);\n        const double y_scale = (in_img.nr()-1)/(double)std::max<long>((out_img.nr()-1),1);\n        double y = -y_scale;\n        for (long r = 0; r < out_img.nr(); ++r)\n        {\n            y += y_scale;\n            const long top    = static_cast<long>(std::floor(y));\n            const long bottom = std::min(top+1, in_img.nr()-1);\n            const double tb_frac = y - top;\n            double x = -x_scale;\n            if (pixel_traits<U>::grayscale)\n            {\n                for (long c = 0; c < out_img.nc(); ++c)\n                {\n                    x += x_scale;\n                    const long left   = static_cast<long>(std::floor(x));\n                    const long right  = std::min(left+1, in_img.nc()-1);\n                    const double lr_frac = x - left;\n\n                    double tl = 0, tr = 0, bl = 0, br = 0;\n\n                    assign_pixel(tl, in_img[top][left]);\n                    assign_pixel(tr, in_img[top][right]);\n                    assign_pixel(bl, in_img[bottom][left]);\n                    assign_pixel(br, in_img[bottom][right]);\n\n                    double temp = (1-tb_frac)*((1-lr_frac)*tl + lr_frac*tr) + \n                        tb_frac*((1-lr_frac)*bl + lr_frac*br);\n\n                    assign_pixel(out_img[r][c], temp);\n                }\n            }\n            else\n            {\n                for (long c = 0; c < out_img.nc(); ++c)\n                {\n                    x += x_scale;\n                    const long left   = static_cast<long>(std::floor(x));\n                    const long right  = std::min(left+1, in_img.nc()-1);\n                    const double lr_frac = x - left;\n\n                    const T tl = in_img[top][left];\n                    const T tr = in_img[top][right];\n                    const T bl = in_img[bottom][left];\n                    const T br = in_img[bottom][right];\n\n                    T temp;\n                    assign_pixel(temp, 0);\n                    vector_to_pixel(temp, \n                        (1-tb_frac)*((1-lr_frac)*pixel_to_vector<double>(tl) + lr_frac*pixel_to_vector<double>(tr)) + \n                            tb_frac*((1-lr_frac)*pixel_to_vector<double>(bl) + lr_frac*pixel_to_vector<double>(br)));\n                    assign_pixel(out_img[r][c], temp);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    typename enable_if<is_grayscale_image<image_type> >::type resize_image (\n        const image_type& in_img_,\n        image_type& out_img_,\n        interpolate_bilinear\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img_, out_img_) == false ,\n            \"\\t void resize_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img_, out_img_):  \" << is_same_object(in_img_, out_img_)\n            );\n\n        const_image_view<image_type> in_img(in_img_);\n        image_view<image_type> out_img(out_img_);\n\n        if (out_img.nr() <= 1 || out_img.nc() <= 1)\n        {\n            assign_all_pixels(out_img, 0);\n            return;\n        }\n\n        typedef typename image_traits<image_type>::pixel_type T;\n        const double x_scale = (in_img.nc()-1)/(double)std::max<long>((out_img.nc()-1),1);\n        const double y_scale = (in_img.nr()-1)/(double)std::max<long>((out_img.nr()-1),1);\n        double y = -y_scale;\n        for (long r = 0; r < out_img.nr(); ++r)\n        {\n            y += y_scale;\n            const long top    = static_cast<long>(std::floor(y));\n            const long bottom = std::min(top+1, in_img.nr()-1);\n            const double tb_frac = y - top;\n            double x = -4*x_scale;\n\n            const simd4f _tb_frac = tb_frac;\n            const simd4f _inv_tb_frac = 1-tb_frac;\n            const simd4f _x_scale = 4*x_scale;\n            simd4f _x(x, x+x_scale, x+2*x_scale, x+3*x_scale);\n            long c = 0;\n            for (;; c+=4)\n            {\n                _x += _x_scale;\n                simd4i left = simd4i(_x);\n\n                simd4f _lr_frac = _x-left;\n                simd4f _inv_lr_frac = 1-_lr_frac; \n                simd4i right = left+1;\n\n                simd4f tlf = _inv_tb_frac*_inv_lr_frac;\n                simd4f trf = _inv_tb_frac*_lr_frac;\n                simd4f blf = _tb_frac*_inv_lr_frac;\n                simd4f brf = _tb_frac*_lr_frac;\n\n                int32 fleft[4];\n                int32 fright[4];\n                left.store(fleft);\n                right.store(fright);\n\n                if (fright[3] >= in_img.nc())\n                    break;\n                simd4f tl(in_img[top][fleft[0]],     in_img[top][fleft[1]],     in_img[top][fleft[2]],     in_img[top][fleft[3]]);\n                simd4f tr(in_img[top][fright[0]],    in_img[top][fright[1]],    in_img[top][fright[2]],    in_img[top][fright[3]]);\n                simd4f bl(in_img[bottom][fleft[0]],  in_img[bottom][fleft[1]],  in_img[bottom][fleft[2]],  in_img[bottom][fleft[3]]);\n                simd4f br(in_img[bottom][fright[0]], in_img[bottom][fright[1]], in_img[bottom][fright[2]], in_img[bottom][fright[3]]);\n\n                simd4i out = simd4i(tlf*tl + trf*tr + blf*bl + brf*br);\n                int32 fout[4];\n                out.store(fout);\n\n                out_img[r][c]   = static_cast<T>(fout[0]);\n                out_img[r][c+1] = static_cast<T>(fout[1]);\n                out_img[r][c+2] = static_cast<T>(fout[2]);\n                out_img[r][c+3] = static_cast<T>(fout[3]);\n            }\n            x = -x_scale + c*x_scale;\n            for (; c < out_img.nc(); ++c)\n            {\n                x += x_scale;\n                const long left   = static_cast<long>(std::floor(x));\n                const long right  = std::min(left+1, in_img.nc()-1);\n                const float lr_frac = x - left;\n\n                float tl = 0, tr = 0, bl = 0, br = 0;\n\n                assign_pixel(tl, in_img[top][left]);\n                assign_pixel(tr, in_img[top][right]);\n                assign_pixel(bl, in_img[bottom][left]);\n                assign_pixel(br, in_img[bottom][right]);\n\n                float temp = (1-tb_frac)*((1-lr_frac)*tl + lr_frac*tr) + \n                    tb_frac*((1-lr_frac)*bl + lr_frac*br);\n\n                assign_pixel(out_img[r][c], temp);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    typename enable_if<is_rgb_image<image_type> >::type resize_image (\n        const image_type& in_img_,\n        image_type& out_img_,\n        interpolate_bilinear\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img_, out_img_) == false ,\n            \"\\t void resize_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img_, out_img_):  \" << is_same_object(in_img_, out_img_)\n            );\n\n        const_image_view<image_type> in_img(in_img_);\n        image_view<image_type> out_img(out_img_);\n\n        if (out_img.nr() <= 1 || out_img.nc() <= 1)\n        {\n            assign_all_pixels(out_img, 0);\n            return;\n        }\n\n\n        typedef typename image_traits<image_type>::pixel_type T;\n        const double x_scale = (in_img.nc()-1)/(double)std::max<long>((out_img.nc()-1),1);\n        const double y_scale = (in_img.nr()-1)/(double)std::max<long>((out_img.nr()-1),1);\n        double y = -y_scale;\n        for (long r = 0; r < out_img.nr(); ++r)\n        {\n            y += y_scale;\n            const long top    = static_cast<long>(std::floor(y));\n            const long bottom = std::min(top+1, in_img.nr()-1);\n            const double tb_frac = y - top;\n            double x = -4*x_scale;\n\n            const simd4f _tb_frac = tb_frac;\n            const simd4f _inv_tb_frac = 1-tb_frac;\n            const simd4f _x_scale = 4*x_scale;\n            simd4f _x(x, x+x_scale, x+2*x_scale, x+3*x_scale);\n            long c = 0;\n            for (;; c+=4)\n            {\n                _x += _x_scale;\n                simd4i left = simd4i(_x);\n                simd4f lr_frac = _x-left;\n                simd4f _inv_lr_frac = 1-lr_frac; \n                simd4i right = left+1;\n\n                simd4f tlf = _inv_tb_frac*_inv_lr_frac;\n                simd4f trf = _inv_tb_frac*lr_frac;\n                simd4f blf = _tb_frac*_inv_lr_frac;\n                simd4f brf = _tb_frac*lr_frac;\n\n                int32 fleft[4];\n                int32 fright[4];\n                left.store(fleft);\n                right.store(fright);\n\n                if (fright[3] >= in_img.nc())\n                    break;\n                simd4f tl(in_img[top][fleft[0]].red,     in_img[top][fleft[1]].red,     in_img[top][fleft[2]].red,     in_img[top][fleft[3]].red);\n                simd4f tr(in_img[top][fright[0]].red,    in_img[top][fright[1]].red,    in_img[top][fright[2]].red,    in_img[top][fright[3]].red);\n                simd4f bl(in_img[bottom][fleft[0]].red,  in_img[bottom][fleft[1]].red,  in_img[bottom][fleft[2]].red,  in_img[bottom][fleft[3]].red);\n                simd4f br(in_img[bottom][fright[0]].red, in_img[bottom][fright[1]].red, in_img[bottom][fright[2]].red, in_img[bottom][fright[3]].red);\n\n                simd4i out = simd4i(tlf*tl + trf*tr + blf*bl + brf*br);\n                int32 fout[4];\n                out.store(fout);\n\n                out_img[r][c].red   = static_cast<unsigned char>(fout[0]);\n                out_img[r][c+1].red = static_cast<unsigned char>(fout[1]);\n                out_img[r][c+2].red = static_cast<unsigned char>(fout[2]);\n                out_img[r][c+3].red = static_cast<unsigned char>(fout[3]);\n\n\n                tl = simd4f(in_img[top][fleft[0]].green,    in_img[top][fleft[1]].green,    in_img[top][fleft[2]].green,    in_img[top][fleft[3]].green);\n                tr = simd4f(in_img[top][fright[0]].green,   in_img[top][fright[1]].green,   in_img[top][fright[2]].green,   in_img[top][fright[3]].green);\n                bl = simd4f(in_img[bottom][fleft[0]].green, in_img[bottom][fleft[1]].green, in_img[bottom][fleft[2]].green, in_img[bottom][fleft[3]].green);\n                br = simd4f(in_img[bottom][fright[0]].green, in_img[bottom][fright[1]].green, in_img[bottom][fright[2]].green, in_img[bottom][fright[3]].green);\n                out = simd4i(tlf*tl + trf*tr + blf*bl + brf*br);\n                out.store(fout);\n                out_img[r][c].green   = static_cast<unsigned char>(fout[0]);\n                out_img[r][c+1].green = static_cast<unsigned char>(fout[1]);\n                out_img[r][c+2].green = static_cast<unsigned char>(fout[2]);\n                out_img[r][c+3].green = static_cast<unsigned char>(fout[3]);\n\n\n                tl = simd4f(in_img[top][fleft[0]].blue,     in_img[top][fleft[1]].blue,     in_img[top][fleft[2]].blue,     in_img[top][fleft[3]].blue);\n                tr = simd4f(in_img[top][fright[0]].blue,    in_img[top][fright[1]].blue,    in_img[top][fright[2]].blue,    in_img[top][fright[3]].blue);\n                bl = simd4f(in_img[bottom][fleft[0]].blue,  in_img[bottom][fleft[1]].blue,  in_img[bottom][fleft[2]].blue,  in_img[bottom][fleft[3]].blue);\n                br = simd4f(in_img[bottom][fright[0]].blue, in_img[bottom][fright[1]].blue, in_img[bottom][fright[2]].blue, in_img[bottom][fright[3]].blue);\n                out = simd4i(tlf*tl + trf*tr + blf*bl + brf*br);\n                out.store(fout);\n                out_img[r][c].blue   = static_cast<unsigned char>(fout[0]);\n                out_img[r][c+1].blue = static_cast<unsigned char>(fout[1]);\n                out_img[r][c+2].blue = static_cast<unsigned char>(fout[2]);\n                out_img[r][c+3].blue = static_cast<unsigned char>(fout[3]);\n            }\n            x = -x_scale + c*x_scale;\n            for (; c < out_img.nc(); ++c)\n            {\n                x += x_scale;\n                const long left   = static_cast<long>(std::floor(x));\n                const long right  = std::min(left+1, in_img.nc()-1);\n                const double lr_frac = x - left;\n\n                const T tl = in_img[top][left];\n                const T tr = in_img[top][right];\n                const T bl = in_img[bottom][left];\n                const T br = in_img[bottom][right];\n\n                T temp;\n                assign_pixel(temp, 0);\n                vector_to_pixel(temp, \n                    (1-tb_frac)*((1-lr_frac)*pixel_to_vector<double>(tl) + lr_frac*pixel_to_vector<double>(tr)) + \n                    tb_frac*((1-lr_frac)*pixel_to_vector<double>(bl) + lr_frac*pixel_to_vector<double>(br)));\n                assign_pixel(out_img[r][c], temp);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    void resize_image (\n        const image_type1& in_img,\n        image_type2& out_img\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t void resize_image()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        resize_image(in_img, out_img, interpolate_bilinear());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    point_transform_affine flip_image_left_right (\n        const image_type1& in_img,\n        image_type2& out_img\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t void flip_image_left_right()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        assign_image(out_img, fliplr(mat(in_img)));\n        std::vector<dlib::vector<double,2> > from, to;\n        rectangle r = get_rect(in_img);\n        from.push_back(r.tl_corner()); to.push_back(r.tr_corner());\n        from.push_back(r.bl_corner()); to.push_back(r.br_corner());\n        from.push_back(r.tr_corner()); to.push_back(r.tl_corner());\n        from.push_back(r.br_corner()); to.push_back(r.bl_corner());\n        return find_affine_transform(from,to);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    void flip_image_up_down (\n        const image_type1& in_img,\n        image_type2& out_img\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t void flip_image_up_down()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        assign_image(out_img, flipud(mat(in_img)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline rectangle flip_rect_left_right (\n            const rectangle& rect,\n            const rectangle& window \n        )\n        {\n            rectangle temp;\n            temp.top() = rect.top();\n            temp.bottom() = rect.bottom();\n\n            const long left_dist = rect.left()-window.left();\n\n            temp.right() = window.right()-left_dist; \n            temp.left()  = temp.right()-rect.width()+1; \n            return temp;\n        }\n\n        inline rectangle tform_object (\n            const point_transform_affine& tran,\n            const rectangle& rect\n        )\n        {\n            return centered_rect(tran(center(rect)), rect.width(), rect.height());\n        }\n\n        inline full_object_detection tform_object(\n            const point_transform_affine& tran,\n            const full_object_detection& obj\n        )\n        {\n            std::vector<point> parts; \n            parts.reserve(obj.num_parts());\n            for (unsigned long i = 0; i < obj.num_parts(); ++i)\n            {\n                parts.push_back(tran(obj.part(i)));\n            }\n            return full_object_detection(tform_object(tran,obj.get_rect()), parts);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename T\n        >\n    void add_image_left_right_flips (\n        dlib::array<image_type>& images,\n        std::vector<std::vector<T> >& objects\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( images.size() == objects.size(),\n            \"\\t void add_image_left_right_flips()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t images.size():  \" << images.size() \n            << \"\\n\\t objects.size(): \" << objects.size() \n            );\n\n        image_type temp;\n        std::vector<T> rects;\n\n        const unsigned long num = images.size();\n        for (unsigned long j = 0; j < num; ++j)\n        {\n            const point_transform_affine tran = flip_image_left_right(images[j], temp);\n\n            rects.clear();\n            for (unsigned long i = 0; i < objects[j].size(); ++i)\n                rects.push_back(impl::tform_object(tran, objects[j][i]));\n\n            images.push_back(temp);\n            objects.push_back(rects);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename T,\n        typename U\n        >\n    void add_image_left_right_flips (\n        dlib::array<image_type>& images,\n        std::vector<std::vector<T> >& objects,\n        std::vector<std::vector<U> >& objects2\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( images.size() == objects.size() &&\n                     images.size() == objects2.size(),\n            \"\\t void add_image_left_right_flips()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t images.size():   \" << images.size() \n            << \"\\n\\t objects.size():  \" << objects.size() \n            << \"\\n\\t objects2.size(): \" << objects2.size() \n            );\n\n        image_type temp;\n        std::vector<T> rects;\n        std::vector<U> rects2;\n\n        const unsigned long num = images.size();\n        for (unsigned long j = 0; j < num; ++j)\n        {\n            const point_transform_affine tran = flip_image_left_right(images[j], temp);\n            images.push_back(temp);\n\n            rects.clear();\n            for (unsigned long i = 0; i < objects[j].size(); ++i)\n                rects.push_back(impl::tform_object(tran, objects[j][i]));\n            objects.push_back(rects);\n\n            rects2.clear();\n            for (unsigned long i = 0; i < objects2[j].size(); ++i)\n                rects2.push_back(impl::tform_object(tran, objects2[j][i]));\n            objects2.push_back(rects2);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void flip_image_dataset_left_right (\n        dlib::array<image_type>& images, \n        std::vector<std::vector<rectangle> >& objects\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( images.size() == objects.size(),\n            \"\\t void flip_image_dataset_left_right()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t images.size():   \" << images.size() \n            << \"\\n\\t objects.size():  \" << objects.size() \n            );\n\n        image_type temp;\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            flip_image_left_right(images[i], temp); \n            swap(temp,images[i]);\n            for (unsigned long j = 0; j < objects[i].size(); ++j)\n            {\n                objects[i][j] = impl::flip_rect_left_right(objects[i][j], get_rect(images[i]));\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void flip_image_dataset_left_right (\n        dlib::array<image_type>& images, \n        std::vector<std::vector<rectangle> >& objects,\n        std::vector<std::vector<rectangle> >& objects2\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( images.size() == objects.size() &&\n                     images.size() == objects2.size(),\n            \"\\t void flip_image_dataset_left_right()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t images.size():   \" << images.size() \n            << \"\\n\\t objects.size():  \" << objects.size() \n            << \"\\n\\t objects2.size(): \" << objects2.size() \n            );\n\n        image_type temp;\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            flip_image_left_right(images[i], temp); \n            swap(temp, images[i]);\n            for (unsigned long j = 0; j < objects[i].size(); ++j)\n            {\n                objects[i][j] = impl::flip_rect_left_right(objects[i][j], get_rect(images[i]));\n            }\n            for (unsigned long j = 0; j < objects2[i].size(); ++j)\n            {\n                objects2[i][j] = impl::flip_rect_left_right(objects2[i][j], get_rect(images[i]));\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pyramid_type,\n        typename image_type\n        >\n    void upsample_image_dataset (\n        dlib::array<image_type>& images,\n        std::vector<std::vector<rectangle> >& objects\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( images.size() == objects.size(),\n            \"\\t void upsample_image_dataset()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t images.size():   \" << images.size() \n            << \"\\n\\t objects.size():  \" << objects.size() \n            );\n\n        image_type temp;\n        pyramid_type pyr;\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            pyramid_up(images[i], temp, pyr);\n            swap(temp, images[i]);\n            for (unsigned long j = 0; j < objects[i].size(); ++j)\n            {\n                objects[i][j] = pyr.rect_up(objects[i][j]);\n            }\n        }\n    }\n\n    template <\n        typename pyramid_type,\n        typename image_type\n        >\n    void upsample_image_dataset (\n        dlib::array<image_type>& images,\n        std::vector<std::vector<rectangle> >& objects,\n        std::vector<std::vector<rectangle> >& objects2 \n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( images.size() == objects.size() &&\n                     images.size() == objects2.size(),\n            \"\\t void upsample_image_dataset()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t images.size():   \" << images.size() \n            << \"\\n\\t objects.size():  \" << objects.size() \n            << \"\\n\\t objects2.size(): \" << objects2.size() \n            );\n\n        image_type temp;\n        pyramid_type pyr;\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            pyramid_up(images[i], temp, pyr);\n            swap(temp, images[i]);\n            for (unsigned long j = 0; j < objects[i].size(); ++j)\n            {\n                objects[i][j] = pyr.rect_up(objects[i][j]);\n            }\n            for (unsigned long j = 0; j < objects2[i].size(); ++j)\n            {\n                objects2[i][j] = pyr.rect_up(objects2[i][j]);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void rotate_image_dataset (\n        double angle,\n        dlib::array<image_type>& images,\n        std::vector<std::vector<rectangle> >& objects\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( images.size() == objects.size(),\n            \"\\t void rotate_image_dataset()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t images.size():   \" << images.size() \n            << \"\\n\\t objects.size():  \" << objects.size() \n            );\n\n        image_type temp;\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            const point_transform_affine tran = rotate_image(images[i], temp, angle);\n            swap(temp, images[i]);\n            for (unsigned long j = 0; j < objects[i].size(); ++j)\n            {\n                const rectangle rect = objects[i][j];\n                objects[i][j] = centered_rect(tran(center(rect)), rect.width(), rect.height());\n            }\n        }\n    }\n\n    template <typename image_type>\n    void rotate_image_dataset (\n        double angle,\n        dlib::array<image_type>& images,\n        std::vector<std::vector<rectangle> >& objects,\n        std::vector<std::vector<rectangle> >& objects2\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( images.size() == objects.size() &&\n                     images.size() == objects2.size(),\n            \"\\t void rotate_image_dataset()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t images.size():   \" << images.size() \n            << \"\\n\\t objects.size():  \" << objects.size() \n            << \"\\n\\t objects2.size(): \" << objects2.size() \n            );\n\n        image_type temp;\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            const point_transform_affine tran = rotate_image(images[i], temp, angle);\n            swap(temp, images[i]);\n            for (unsigned long j = 0; j < objects[i].size(); ++j)\n            {\n                const rectangle rect = objects[i][j];\n                objects[i][j] = centered_rect(tran(center(rect)), rect.width(), rect.height());\n            }\n            for (unsigned long j = 0; j < objects2[i].size(); ++j)\n            {\n                const rectangle rect = objects2[i][j];\n                objects2[i][j] = centered_rect(tran(center(rect)), rect.width(), rect.height());\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename EXP, \n        typename T, \n        typename U\n        >\n    void add_image_rotations (\n        const matrix_exp<EXP>& angles,\n        dlib::array<image_type>& images,\n        std::vector<std::vector<T> >& objects,\n        std::vector<std::vector<U> >& objects2\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_vector(angles) && angles.size() > 0 && \n                     images.size() == objects.size() &&\n                     images.size() == objects2.size(),\n            \"\\t void add_image_rotations()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_vector(angles): \" << is_vector(angles) \n            << \"\\n\\t angles.size():     \" << angles.size() \n            << \"\\n\\t images.size():     \" << images.size() \n            << \"\\n\\t objects.size():    \" << objects.size() \n            << \"\\n\\t objects2.size():   \" << objects2.size() \n            );\n\n        dlib::array<image_type> new_images;\n        std::vector<std::vector<T> > new_objects;\n        std::vector<std::vector<U> > new_objects2;\n\n        using namespace impl; \n\n        std::vector<T> objtemp;\n        std::vector<U> objtemp2;\n        image_type temp;\n        for (long i = 0; i < angles.size(); ++i)\n        {\n            for (unsigned long j = 0; j < images.size(); ++j)\n            {\n                const point_transform_affine tran = rotate_image(images[j], temp, angles(i));\n                new_images.push_back(temp);\n\n                objtemp.clear();\n                for (unsigned long k = 0; k < objects[j].size(); ++k)\n                    objtemp.push_back(tform_object(tran, objects[j][k]));\n                new_objects.push_back(objtemp);\n\n                objtemp2.clear();\n                for (unsigned long k = 0; k < objects2[j].size(); ++k)\n                    objtemp2.push_back(tform_object(tran, objects2[j][k]));\n                new_objects2.push_back(objtemp2);\n            }\n        }\n\n        new_images.swap(images);\n        new_objects.swap(objects);\n        new_objects2.swap(objects2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename EXP,\n        typename T\n        >\n    void add_image_rotations (\n        const matrix_exp<EXP>& angles,\n        dlib::array<image_type>& images,\n        std::vector<std::vector<T> >& objects\n    )\n    {\n        std::vector<std::vector<T> > objects2(objects.size());\n        add_image_rotations(angles, images, objects, objects2);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename pyramid_type,\n        typename interpolation_type\n        >\n    void pyramid_up (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const pyramid_type& pyr,\n        const interpolation_type& interp\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t void pyramid_up()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        if (image_size(in_img) == 0)\n        {\n            set_image_size(out_img, 0, 0);\n            return;\n        }\n\n        rectangle rect = get_rect(in_img);\n        rectangle uprect = pyr.rect_up(rect);\n        if (uprect.is_empty())\n        {\n            set_image_size(out_img, 0, 0);\n            return;\n        }\n        set_image_size(out_img, uprect.bottom()+1, uprect.right()+1);\n\n        resize_image(in_img, out_img, interp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename pyramid_type\n        >\n    void pyramid_up (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const pyramid_type& pyr\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_same_object(in_img, out_img) == false ,\n            \"\\t void pyramid_up()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_same_object(in_img, out_img):  \" << is_same_object(in_img, out_img)\n            );\n\n        pyramid_up(in_img, out_img, pyr, interpolate_bilinear());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pyramid_type\n        >\n    void pyramid_up (\n        image_type& img,\n        const pyramid_type& pyr\n    )\n    {\n        image_type temp;\n        pyramid_up(img, temp, pyr);\n        swap(temp, img);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void pyramid_up (\n        image_type& img\n    )\n    {\n        pyramid_down<2> pyr;\n        pyramid_up(img, pyr);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    struct chip_dims\n    {\n        chip_dims (\n            unsigned long rows_,\n            unsigned long cols_\n        ) : rows(rows_), cols(cols_) { }\n\n        unsigned long rows;\n        unsigned long cols;\n    };\n\n    struct chip_details\n    {\n        chip_details() : angle(0), rows(0), cols(0) {}\n        chip_details(const rectangle& rect_, unsigned long size) : rect(rect_),angle(0) \n        { compute_dims_from_size(size); }\n        chip_details(const rectangle& rect_, unsigned long size, double angle_) : rect(rect_),angle(angle_) \n        { compute_dims_from_size(size); }\n\n        chip_details(const rectangle& rect_, const chip_dims& dims) : \n            rect(rect_),angle(0),rows(dims.rows), cols(dims.cols) {}\n        chip_details(const rectangle& rect_, const chip_dims& dims, double angle_) : \n            rect(rect_),angle(angle_),rows(dims.rows), cols(dims.cols) {}\n\n        rectangle rect;\n        double angle;\n        unsigned long rows; \n        unsigned long cols;\n\n        inline unsigned long size() const \n        {\n            return rows*cols;\n        }\n\n    private:\n        void compute_dims_from_size (\n            unsigned long size\n        ) \n        {\n            const double relative_size = std::sqrt(size/(double)rect.area());\n            rows = static_cast<unsigned long>(rect.height()*relative_size + 0.5);\n            cols  = static_cast<unsigned long>(size/(double)rows + 0.5);\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    void extract_image_chips (\n        const image_type1& img,\n        const std::vector<chip_details>& chip_locations,\n        dlib::array<image_type2>& chips\n    )\n    {\n        // make sure requires clause is not broken\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < chip_locations.size(); ++i)\n        {\n            DLIB_CASSERT(chip_locations[i].size() != 0 &&\n                         chip_locations[i].rect.is_empty() == false,\n            \"\\t void extract_image_chips()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t chip_locations[\"<<i<<\"].size():            \" << chip_locations[i].size()\n            << \"\\n\\t chip_locations[\"<<i<<\"].rect.is_empty(): \" << chip_locations[i].rect.is_empty()\n            );\n        }\n#endif \n\n        pyramid_down<2> pyr;\n        long max_depth = 0;\n        // If the chip is supposed to be much smaller than the source subwindow then you\n        // can't just extract it using bilinear interpolation since at a high enough\n        // downsampling amount it would effectively turn into nearest neighbor\n        // interpolation.  So we use an image pyramid to make sure the interpolation is\n        // fast but also high quality.  The first thing we do is figure out how deep the\n        // image pyramid needs to be.\n        for (unsigned long i = 0; i < chip_locations.size(); ++i)\n        {\n            long depth = 0;\n            rectangle rect = pyr.rect_down(chip_locations[i].rect);\n            while (rect.area() > chip_locations[i].size())\n            {\n                rect = pyr.rect_down(rect);\n                ++depth;\n            }\n            max_depth = std::max(depth,max_depth);\n        }\n\n        // now make an image pyramid\n        dlib::array<image_type1> levels(max_depth);\n        if (levels.size() != 0)\n            pyr(img,levels[0]);\n        for (unsigned long i = 1; i < levels.size(); ++i)\n            pyr(levels[i-1],levels[i]);\n\n        std::vector<dlib::vector<double,2> > from, to;\n\n        // now pull out the chips\n        chips.resize(chip_locations.size());\n        for (unsigned long i = 0; i < chips.size(); ++i)\n        {\n            set_image_size(chips[i], chip_locations[i].rows, chip_locations[i].cols);\n\n            // figure out which level in the pyramid to use to extract the chip\n            int level = -1;\n            rectangle rect = chip_locations[i].rect;\n            while (pyr.rect_down(rect).area() > chip_locations[i].size())\n            {\n                ++level;\n                rect = pyr.rect_down(rect);\n            }\n\n            // find the appropriate transformation that maps from the chip to the input\n            // image\n            from.clear();\n            to.clear();\n            from.push_back(get_rect(chips[i]).tl_corner());  to.push_back(rotate_point<double>(center(rect),rect.tl_corner(),chip_locations[i].angle));\n            from.push_back(get_rect(chips[i]).tr_corner());  to.push_back(rotate_point<double>(center(rect),rect.tr_corner(),chip_locations[i].angle));\n            from.push_back(get_rect(chips[i]).bl_corner());  to.push_back(rotate_point<double>(center(rect),rect.bl_corner(),chip_locations[i].angle));\n            point_transform_affine trns = find_affine_transform(from,to);\n\n            // now extract the actual chip\n            if (level == -1)\n                transform_image(img,chips[i],interpolate_bilinear(),trns);\n            else\n                transform_image(levels[level],chips[i],interpolate_bilinear(),trns);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    void extract_image_chip (\n        const image_type1& img,\n        const chip_details& location,\n        image_type2& chip\n    )\n    {\n        std::vector<chip_details> chip_locations(1,location);\n        dlib::array<image_type2> chips;\n        extract_image_chips(img, chip_locations, chips);\n        swap(chips[0], chip);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_INTERPOlATIONh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/interpolation_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_INTERPOlATION_ABSTRACT_\n#ifdef DLIB_INTERPOlATION_ABSTRACT_ \n\n#include \"../pixel.h\"\n#include \"../image_processing/full_object_detection_abstract.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class interpolate_nearest_neighbor\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for performing nearest neighbor interpolation\n                on an image.  \n        !*/\n\n    public:\n\n        template <\n            typename image_view_type, \n            typename pixel_type\n            >\n        bool operator() (\n            const image_view_type& img,\n            const dlib::point& p,\n            pixel_type& result\n        ) const;\n        /*!\n            requires\n                - image_view_type == an image_view or const_image_view object. \n                - pixel_traits<typename image_view_type::pixel_type>::has_alpha == false\n                - pixel_traits<pixel_type> is defined\n            ensures\n                - if (p is located inside img) then\n                    - #result == img[p.y()][p.x()]\n                      (This assignment is done using assign_pixel(#result, img[p.y()][p.x()]), \n                      therefore any necessary color space conversion will be performed)\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class interpolate_bilinear\n    {\n\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for performing bilinear interpolation\n                on an image.  This is performed by looking at the 4 pixels\n                nearest to a point and deriving an interpolated value from them.\n        !*/\n\n    public:\n\n        template <\n            typename T, \n            typename image_view_type,\n            typename pixel_type\n            >\n        bool operator() (\n            const image_view_type& img,\n            const dlib::vector<T,2>& p,\n            pixel_type& result\n        ) const;\n        /*!\n            requires\n                - image_view_type == an image_view or const_image_view object \n                - pixel_traits<typename image_view_type::pixel_type>::has_alpha == false\n                - pixel_traits<pixel_type> is defined\n            ensures\n                - if (there is an interpolatable image location at point p in img) then\n                    - #result == the interpolated pixel value from img at point p.\n                    - assign_pixel() will be used to write to #result, therefore any\n                      necessary color space conversion will be performed.\n                    - returns true\n                    - if img contains RGB pixels then the interpolation will be in color.\n                      Otherwise, the interpolation will be performed in a grayscale mode.\n                - else\n                    - returns false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class interpolate_quadratic\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for performing quadratic interpolation\n                on an image.  This is performed by looking at the 9 pixels\n                nearest to a point and deriving an interpolated value from them.\n        !*/\n\n    public:\n\n        template <\n            typename T, \n            typename image_view_type,\n            typename pixel_type\n            >\n        bool operator() (\n            const image_view_type& img,\n            const dlib::vector<T,2>& p,\n            pixel_type& result\n        ) const;\n        /*!\n            requires\n                - image_view_type == an image_view or const_image_view object. \n                - pixel_traits<typename image_view_type::pixel_type>::has_alpha == false\n                - pixel_traits<pixel_type> is defined\n            ensures\n                - if (there is an interpolatable image location at point p in img) then\n                    - #result == the interpolated pixel value from img at point p\n                    - assign_pixel() will be used to write to #result, therefore any\n                      necessary color space conversion will be performed.\n                    - returns true\n                    - if img contains RGB pixels then the interpolation will be in color.\n                      Otherwise, the interpolation will be performed in a grayscale mode.\n                - else\n                    - returns false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class black_background\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a function object which simply sets a pixel \n                to have a black value.\n        !*/\n\n    public:\n        template <typename pixel_type>\n        void operator() ( pixel_type& p) const { assign_pixel(p, 0); }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class white_background\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a function object which simply sets a pixel \n                to have a white value.\n        !*/\n\n    public:\n        template <typename pixel_type>\n        void operator() ( pixel_type& p) const { assign_pixel(p, 255); }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class no_background\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a function object which does nothing.  It is useful\n                when used with the transform_image() routine defined below\n                if no modification of uninterpolated output pixels is desired.\n        !*/\n    public:\n        template <typename pixel_type>\n        void operator() ( pixel_type& ) const { }\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type,\n        typename point_mapping_type,\n        typename background_type\n        >\n    void transform_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const interpolation_type& interp,\n        const point_mapping_type& map_point,\n        const background_type& set_background,\n        const rectangle& area\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - interpolation_type == interpolate_nearest_neighbor, interpolate_bilinear, \n              interpolate_quadratic, or a type with a compatible interface.\n            - map_point should be a function which takes dlib::vector<T,2> objects and\n              returns dlib::vector<T,2> objects.  An example is point_transform_affine.\n            - set_background should be a function which can take a single argument of\n              type image_traits<image_type2>::pixel_type.  Examples are black_background,\n              white_background, and no_background.\n            - get_rect(out_img).contains(area) == true\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - The map_point function defines a mapping from pixels in out_img to pixels\n              in in_img.  transform_image() uses this mapping, along with the supplied\n              interpolation routine interp, to fill the region of out_img defined by\n              area with an interpolated copy of in_img.  \n            - This function does not change the size of out_img.\n            - Only pixels inside the region defined by area in out_img are modified.\n            - For all locations r and c such that area.contains(c,r) but have no corresponding \n              locations in in_img:\n                - set_background(out_img[r][c]) is invoked\n                  (i.e. some parts of out_img might correspond to areas outside in_img and\n                  therefore can't supply interpolated values.  In these cases, these\n                  pixels can be assigned a value by the supplied set_background() routine)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type,\n        typename point_mapping_type,\n        typename background_type\n        >\n    void transform_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const interpolation_type& interp,\n        const point_mapping_type& map_point,\n        const background_type& set_background\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - interpolation_type == interpolate_nearest_neighbor, interpolate_bilinear, \n              interpolate_quadratic, or a type with a compatible interface.\n            - map_point should be a function which takes dlib::vector<T,2> objects and\n              returns dlib::vector<T,2> objects.  An example is point_transform_affine.\n            - set_background should be a function which can take a single argument of\n              type image_traits<image_type2>::pixel_type.  Examples are black_background, white_background,\n              and no_background.\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - performs: \n              transform_image(in_img, out_img, interp, map_point, set_background, get_rect(out_img));\n              (i.e. runs transform_image() on the entire out_img)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type,\n        typename point_mapping_type\n        >\n    void transform_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const interpolation_type& interp,\n        const point_mapping_type& map_point\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - interpolation_type == interpolate_nearest_neighbor, interpolate_bilinear, \n              interpolate_quadratic, or a type with a compatible interface.\n            - map_point should be a function which takes dlib::vector<T,2> objects and\n              returns dlib::vector<T,2> objects.  An example is point_transform_affine.\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - performs: \n              transform_image(in_img, out_img, interp, map_point, black_background(), get_rect(out_img));\n              (i.e. runs transform_image() on the entire out_img and sets non-interpolated\n              pixels to black)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type\n        >\n    point_transform_affine rotate_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        double angle,\n        const interpolation_type& interp\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - interpolation_type == interpolate_nearest_neighbor, interpolate_bilinear, \n              interpolate_quadratic, or a type with a compatible interface.\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - #out_img == a copy of in_img which has been rotated angle radians counter clockwise.\n              The rotation is performed with respect to the center of the image.  \n            - Parts of #out_img which have no corresponding locations in in_img are set to black.\n            - uses the supplied interpolation routine interp to perform the necessary\n              pixel interpolation.\n            - returns a transformation object that maps points in in_img into their corresponding \n              location in #out_img.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    point_transform_affine rotate_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        double angle\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - pixel_traits<typename image_traits<image_type1>::pixel_type>::has_alpha == false\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - #out_img == a copy of in_img which has been rotated angle radians counter clockwise.\n              The rotation is performed with respect to the center of the image.  \n            - Parts of #out_img which have no corresponding locations in in_img are set to black.\n            - uses the interpolate_quadratic object to perform the necessary pixel interpolation.\n            - returns a transformation object that maps points in in_img into their corresponding \n              location in #out_img.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename interpolation_type\n        >\n    void resize_image (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const interpolation_type& interp\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - interpolation_type == interpolate_nearest_neighbor, interpolate_bilinear, \n              interpolate_quadratic, or a type with a compatible interface.\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - #out_img == A copy of in_img which has been stretched so that it \n              fits exactly into out_img.   \n            - The size of out_img is not modified.  I.e. \n                - #out_img.nr() == out_img.nr()\n                - #out_img.nc() == out_img.nc()\n            - uses the supplied interpolation routine interp to perform the necessary\n              pixel interpolation.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    void resize_image (\n        const image_type1& in_img,\n        image_type2& out_img\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - pixel_traits<typename image_traits<image_type1>::pixel_type>::has_alpha == false\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - #out_img == A copy of in_img which has been stretched so that it \n              fits exactly into out_img.   \n            - The size of out_img is not modified.  I.e. \n                - #out_img.nr() == out_img.nr()\n                - #out_img.nc() == out_img.nc()\n            - Uses the bilinear interpolation to perform the necessary pixel interpolation.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    point_transform_affine flip_image_left_right (\n        const image_type1& in_img,\n        image_type2& out_img\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - is_same_object(in_img, out_img) == false\n        ensures\n            - #out_img.nr() == in_img.nr()\n            - #out_img.nc() == in_img.nc()\n            - #out_img == a copy of in_img which has been flipped from left to right.  \n              (i.e. it is flipped as if viewed though a mirror)\n            - returns a transformation object that maps points in in_img into their\n              corresponding location in #out_img.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename T\n        >\n    void add_image_left_right_flips (\n        dlib::array<image_type>& images,\n        std::vector<std::vector<T> >& objects\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - T == rectangle or full_object_detection\n            - images.size() == objects.size()\n        ensures\n            - This function computes all the left/right flips of the contents of images and\n              then appends them onto the end of the images array.  It also finds the\n              left/right flips of the rectangles in objects and similarly appends them into\n              objects.  That is, we assume objects[i] is the set of bounding boxes in\n              images[i] and we flip the bounding boxes so that they still bound the same\n              objects in the new flipped images.\n            - #images.size() == images.size()*2\n            - #objects.size() == objects.size()*2\n            - All the original elements of images and objects are left unmodified.  That\n              is, this function only appends new elements to each of these containers.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename T,\n        typename U\n        >\n    void add_image_left_right_flips (\n        dlib::array<image_type>& images,\n        std::vector<std::vector<T> >& objects,\n        std::vector<std::vector<U> >& objects2\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - images.size() == objects.size()\n            - images.size() == objects2.size()\n            - T == rectangle or full_object_detection\n            - U == rectangle or full_object_detection\n        ensures\n            - This function computes all the left/right flips of the contents of images and\n              then appends them onto the end of the images array.  It also finds the\n              left/right flips of the rectangles in objects and objects2 and similarly\n              appends them into objects and objects2 respectively.  That is, we assume\n              objects[i] is the set of bounding boxes in images[i] and we flip the bounding\n              boxes so that they still bound the same objects in the new flipped images.\n              We similarly flip the boxes in objects2.\n            - #images.size()   == images.size()*2\n            - #objects.size()  == objects.size()*2\n            - #objects2.size() == objects2.size()*2\n            - All the original elements of images, objects, and objects2 are left unmodified.\n              That is, this function only appends new elements to each of these containers.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename EXP, \n        typename T, \n        typename U\n        >\n    void add_image_rotations (\n        const matrix_exp<EXP>& angles,\n        dlib::array<image_type>& images,\n        std::vector<std::vector<T> >& objects,\n        std::vector<std::vector<U> >& objects2\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - is_vector(angles) == true\n            - angles.size() > 0\n            - images.size() == objects.size()\n            - images.size() == objects2.size()\n            - T == rectangle or full_object_detection\n            - U == rectangle or full_object_detection\n        ensures\n            - This function computes angles.size() different rotations of all the given\n              images and then replaces the contents of images with those rotations of the\n              input dataset.  We will also adjust the rectangles inside objects and\n              objects2 so that they still bound the same objects in the new rotated images.\n              That is, we assume objects[i] and objects2[i] are bounding boxes for things\n              in images[i].  So we will adjust the positions of the boxes in objects and\n              objects2 accordingly.\n            - The elements of angles are interpreted as angles in radians and we will\n              rotate the images around their center using the values in angles.  Moreover,\n              the rotation is done counter clockwise.\n            - #images.size()   == images.size()*angles.size()\n            - #objects.size()  == objects.size()*angles.size()\n            - #objects2.size() == objects2.size()*angles.size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type, \n        typename EXP,\n        typename T\n        >\n    void add_image_rotations (\n        const matrix_exp<EXP>& angles,\n        dlib::array<image_type>& images,\n        std::vector<std::vector<T> >& objects\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - is_vector(angles) == true\n            - angles.size() > 0\n            - images.size() == objects.size()\n            - T == rectangle or full_object_detection\n        ensures\n            - This function is identical to the add_image_rotations() define above except\n              that it doesn't have objects2 as an argument.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void flip_image_dataset_left_right (\n        dlib::array<image_type>& images, \n        std::vector<std::vector<rectangle> >& objects\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - images.size() == objects.size()\n        ensures\n            - This function replaces each image in images with the left/right flipped\n              version of the image.  Therefore, #images[i] will contain the left/right\n              flipped version of images[i].  It also flips all the rectangles in objects so\n              that they still bound the same visual objects in each image.\n            - #images.size() == image.size()\n            - #objects.size() == objects.size()\n            - for all valid i:\n                #objects[i].size() == objects[i].size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void flip_image_dataset_left_right (\n        dlib::array<image_type>& images, \n        std::vector<std::vector<rectangle> >& objects,\n        std::vector<std::vector<rectangle> >& objects2\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - images.size() == objects.size()\n            - images.size() == objects2.size()\n        ensures\n            - This function replaces each image in images with the left/right flipped\n              version of the image.  Therefore, #images[i] will contain the left/right\n              flipped version of images[i].  It also flips all the rectangles in objects\n              and objects2 so that they still bound the same visual objects in each image.\n            - #images.size() == image.size()\n            - #objects.size() == objects.size()\n            - #objects2.size() == objects2.size()\n            - for all valid i:\n                #objects[i].size() == objects[i].size()\n            - for all valid i:\n                #objects2[i].size() == objects2[i].size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pyramid_type,\n        typename image_type\n        >\n    void upsample_image_dataset (\n        dlib::array<image_type>& images,\n        std::vector<std::vector<rectangle> >& objects\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - images.size() == objects.size()\n        ensures\n            - This function replaces each image in images with an upsampled version of that\n              image.  Each image is upsampled using pyramid_up() and the given\n              pyramid_type.  Therefore, #images[i] will contain the larger upsampled\n              version of images[i].  It also adjusts all the rectangles in objects so that\n              they still bound the same visual objects in each image.\n            - #images.size() == image.size()\n            - #objects.size() == objects.size()\n            - for all valid i:\n                #objects[i].size() == objects[i].size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pyramid_type,\n        typename image_type\n        >\n    void upsample_image_dataset (\n        dlib::array<image_type>& images,\n        std::vector<std::vector<rectangle> >& objects,\n        std::vector<std::vector<rectangle> >& objects2 \n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - images.size() == objects.size()\n            - images.size() == objects2.size()\n        ensures\n            - This function replaces each image in images with an upsampled version of that\n              image.  Each image is upsampled using pyramid_up() and the given\n              pyramid_type.  Therefore, #images[i] will contain the larger upsampled\n              version of images[i].  It also adjusts all the rectangles in objects and\n              objects2 so that they still bound the same visual objects in each image.\n            - #images.size() == image.size()\n            - #objects.size() == objects.size()\n            - #objects2.size() == objects2.size()\n            - for all valid i:\n                #objects[i].size() == objects[i].size()\n            - for all valid i:\n                #objects2[i].size() == objects2[i].size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void rotate_image_dataset (\n        double angle,\n        dlib::array<image_type>& images,\n        std::vector<std::vector<rectangle> >& objects\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - images.size() == objects.size()\n        ensures\n            - This function replaces each image in images with a rotated version of that\n              image.  In particular, each image is rotated using\n              rotate_image(original,rotated,angle).  Therefore, the images are rotated\n              angle radians counter clockwise around their centers. That is, #images[i]\n              will contain the rotated version of images[i].  It also adjusts all\n              the rectangles in objects so that they still bound the same visual objects in\n              each image.\n            - All the rectangles will still have the same sizes and aspect ratios after\n              rotation.  They will simply have had their positions adjusted so they still\n              fall on the same objects.\n            - #images.size() == image.size()\n            - #objects.size() == objects.size()\n            - for all valid i:\n                #objects[i].size() == objects[i].size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    void rotate_image_dataset (\n        double angle,\n        dlib::array<image_type>& images,\n        std::vector<std::vector<rectangle> >& objects,\n        std::vector<std::vector<rectangle> >& objects2\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - images.size() == objects.size()\n            - images.size() == objects2.size()\n        ensures\n            - This function replaces each image in images with a rotated version of that\n              image.  In particular, each image is rotated using\n              rotate_image(original,rotated,angle).  Therefore, the images are rotated\n              angle radians counter clockwise around their centers. That is, #images[i]\n              will contain the rotated version of images[i].  It also adjusts all\n              the rectangles in objects and objects2 so that they still bound the same\n              visual objects in each image.\n            - All the rectangles will still have the same sizes and aspect ratios after\n              rotation.  They will simply have had their positions adjusted so they still\n              fall on the same objects.\n            - #images.size() == image.size()\n            - #objects.size() == objects.size()\n            - #objects2.size() == objects2.size()\n            - for all valid i:\n                #objects[i].size() == objects[i].size()\n            - for all valid i:\n                #objects2[i].size() == objects2[i].size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    void flip_image_up_down (\n        const image_type1& in_img,\n        image_type2& out_img\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - is_same_object(in_img, out_img) == false\n        ensures\n            - #out_img.nr() == in_img.nr()\n            - #out_img.nc() == in_img.nc()\n            - #out_img == a copy of in_img which has been flipped upside down.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename pyramid_type,\n        typename interpolation_type\n        >\n    void pyramid_up (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const pyramid_type& pyr,\n        const interpolation_type& interp\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - pyramid_type == a type compatible with the image pyramid objects defined \n              in dlib/image_transforms/image_pyramid_abstract.h\n            - interpolation_type == interpolate_nearest_neighbor, interpolate_bilinear, \n              interpolate_quadratic, or a type with a compatible interface.\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - This function inverts the downsampling transformation performed by pyr().\n              In particular, it attempts to make an image, out_img, which would result\n              in in_img when downsampled with pyr().  \n            - #out_img == An upsampled copy of in_img.  In particular, downsampling\n              #out_img 1 time with pyr() should result in a final image which looks like\n              in_img.\n            - Uses the supplied interpolation routine interp to perform the necessary\n              pixel interpolation.\n            - Note that downsampling an image with pyr() and then upsampling it with \n              pyramid_up() will not necessarily result in a final image which is\n              the same size as the original.  This is because the exact size of the\n              original image cannot be determined based on the downsampled image.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2,\n        typename pyramid_type\n        >\n    void pyramid_up (\n        const image_type1& in_img,\n        image_type2& out_img,\n        const pyramid_type& pyr\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - pyramid_type == a type compatible with the image pyramid objects defined \n              in dlib/image_transforms/image_pyramid_abstract.h\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - performs: pyramid_up(in_img, out_img, pyr, interpolate_bilinear());\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename pyramid_type\n        >\n    void pyramid_up (\n        image_type& img,\n        const pyramid_type& pyr\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - pyramid_type == a type compatible with the image pyramid objects defined \n              in dlib/image_transforms/image_pyramid_abstract.h\n        ensures\n            - Performs an in-place version of pyramid_up() on the given image.  In\n              particular, this function is equivalent to:\n                pyramid_up(img, temp, pyr); \n                temp.swap(img);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void pyramid_up (\n        image_type& img\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n        ensures\n            - performs: pyramid_up(img, pyramid_down<2>());\n              (i.e. it upsamples the given image and doubles it in size.)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    struct chip_dims\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple tool for passing in a pair of row and column values to the\n                chip_details constructor.\n        !*/\n\n        chip_dims (\n            unsigned long rows_,\n            unsigned long cols_\n        ) : rows(rows_), cols(cols_) { }\n\n        unsigned long rows;\n        unsigned long cols;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct chip_details\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object describes where an image chip is to be extracted from within\n                another image.  In particular, it specifies that the image chip is\n                contained within the rectangle this->rect and that prior to extraction the\n                image should be rotated counter-clockwise by this->angle radians.  Finally,\n                the extracted chip should have this->rows rows and this->cols columns in it\n                regardless of the shape of this->rect.\n\n        !*/\n\n        chip_details(\n        ); \n        /*!\n            ensures\n                - #rect.is_empty() == true\n                - #size() == 0\n                - #angle == 0\n                - #rows == 0\n                - #cols == 0\n        !*/\n\n        chip_details(\n            const rectangle& rect_, \n            unsigned long size_\n        );\n        /*!\n            ensures\n                - #rect == rect_\n                - #size() == size_\n                - #angle == 0\n                - #rows and #cols is set such that the total size of the chip is as close\n                  to size_ as possible but still matches the aspect ratio of rect_.\n                - As long as size_ and the aspect ratio of of rect_ stays constant then\n                  #rows and #cols will always have the same values.  This means that, for\n                  example, if you want all your chips to have the same dimensions then\n                  ensure that size_ is always the same and also that rect_ always has the\n                  same aspect ratio.  Otherwise the calculated values of #rows and #cols\n                  may be different for different chips.  Alternatively, you can use the\n                  chip_details constructor below that lets you specify the exact values for\n                  rows and cols.\n        !*/\n\n        chip_details(\n            const rectangle& rect_, \n            unsigned long size_,\n            double angle_\n        );\n        /*!\n            ensures\n                - #rect == rect_\n                - #size() == size_\n                - #angle == angle_\n                - #rows and #cols is set such that the total size of the chip is as close\n                  to size_ as possible but still matches the aspect ratio of rect_.\n                - As long as size_ and the aspect ratio of of rect_ stays constant then\n                  #rows and #cols will always have the same values.  This means that, for\n                  example, if you want all your chips to have the same dimensions then\n                  ensure that size_ is always the same and also that rect_ always has the\n                  same aspect ratio.  Otherwise the calculated values of #rows and #cols\n                  may be different for different chips.  Alternatively, you can use the\n                  chip_details constructor below that lets you specify the exact values for\n                  rows and cols.\n        !*/\n\n        chip_details(\n            const rectangle& rect_, \n            const chip_dims& dims\n        ); \n        /*!\n            ensures\n                - #rect == rect_\n                - #size() == dims.rows*dims.cols \n                - #angle == 0\n                - #rows == dims.rows\n                - #cols == dims.cols\n        !*/\n\n        chip_details(\n            const rectangle& rect_, \n            const chip_dims& dims,\n            double angle_\n        ); \n        /*!\n            ensures\n                - #rect == rect_\n                - #size() == dims.rows*dims.cols \n                - #angle == angle_\n                - #rows == dims.rows\n                - #cols == dims.cols\n        !*/\n\n        inline unsigned long size() const { return rows*cols; }\n        /*!\n            ensures\n                - returns the number of pixels in this chip.  This is just rows*cols.\n        !*/\n\n        rectangle rect;\n        double angle;\n        unsigned long rows; \n        unsigned long cols;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    void extract_image_chips (\n        const image_type1& img,\n        const std::vector<chip_details>& chip_locations,\n        dlib::array<image_type2>& chips\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - pixel_traits<typename image_traits<image_type1>::pixel_type>::has_alpha == false\n            - for all valid i: \n                - chip_locations[i].rect.is_empty() == false\n                - chip_locations[i].size != 0\n        ensures\n            - This function extracts \"chips\" from an image.  That is, it takes a list of\n              rectangular sub-windows (i.e. chips) within an image and extracts those\n              sub-windows, storing each into its own image.  It also scales and rotates the\n              image chips according to the instructions inside each chip_details object.\n            - #chips == the extracted image chips\n            - #chips.size() == chip_locations.size()\n            - for all valid i:\n                - #chips[i] == The image chip extracted from the position\n                  chip_locations[i].rect in img.\n                - #chips[i].nr() == chip_locations[i].rows\n                - #chips[i].nc() == chip_locations[i].cols\n                - The image will have been rotated counter-clockwise by\n                  chip_locations[i].angle radians, around the center of\n                  chip_locations[i].rect, before the chip was extracted. \n            - Any pixels in an image chip that go outside img are set to 0 (i.e. black).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1,\n        typename image_type2\n        >\n    void extract_image_chip (\n        const image_type1& img,\n        const chip_details& chip_location,\n        image_type2& chip\n    );\n    /*!\n        ensures\n            - This function simply calls extract_image_chips() with a single chip location\n              and stores the single output chip into #chip.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_INTERPOlATION_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/label_connected_blobs.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LABEL_CONNeCTED_BLOBS_H_\n#define DLIB_LABEL_CONNeCTED_BLOBS_H_\n\n#include \"label_connected_blobs_abstract.h\"\n#include \"../geometry.h\"\n#include <stack>\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct neighbors_8 \n    {\n        void operator() (\n            const point& p,\n            std::vector<point>& neighbors\n        ) const\n        {\n            neighbors.push_back(point(p.x()+1,p.y()+1));\n            neighbors.push_back(point(p.x()+1,p.y()  ));\n            neighbors.push_back(point(p.x()+1,p.y()-1));\n\n            neighbors.push_back(point(p.x(),p.y()+1));\n            neighbors.push_back(point(p.x(),p.y()-1));\n\n            neighbors.push_back(point(p.x()-1,p.y()+1));\n            neighbors.push_back(point(p.x()-1,p.y()  ));\n            neighbors.push_back(point(p.x()-1,p.y()-1));\n        }\n    };\n\n    struct neighbors_4 \n    {\n        void operator() (\n            const point& p,\n            std::vector<point>& neighbors\n        ) const\n        {\n            neighbors.push_back(point(p.x()+1,p.y()));\n            neighbors.push_back(point(p.x()-1,p.y()));\n            neighbors.push_back(point(p.x(),p.y()+1));\n            neighbors.push_back(point(p.x(),p.y()-1));\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct connected_if_both_not_zero\n    {\n        template <typename image_type>\n        bool operator() (\n            const image_type& img,\n            const point& a,\n            const point& b\n        ) const\n        {\n            return (img[a.y()][a.x()] != 0 && img[b.y()][b.x()] != 0);\n        }\n    };\n\n    struct connected_if_equal\n    {\n        template <typename image_type>\n        bool operator() (\n            const image_type& img,\n            const point& a,\n            const point& b\n        ) const\n        {\n            return (img[a.y()][a.x()] == img[b.y()][b.x()]);\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct zero_pixels_are_background\n    {\n        template <typename image_type>\n        bool operator() (\n            const image_type& img,\n            const point& p\n        ) const\n        {\n            return img[p.y()][p.x()] == 0;\n        }\n\n    };\n\n    struct nothing_is_background \n    {\n        template <typename image_type>\n        bool operator() (\n            const image_type&, \n            const point& \n        ) const\n        {\n            return false;\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename label_image_type,\n        typename background_functor_type,\n        typename neighbors_functor_type,\n        typename connected_functor_type\n        >\n    unsigned long label_connected_blobs (\n        const image_type& img_,\n        const background_functor_type& is_background,\n        const neighbors_functor_type&  get_neighbors,\n        const connected_functor_type&  is_connected,\n        label_image_type& label_img_\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_same_object(img_, label_img_) == false,\n            \"\\t unsigned long label_connected_blobs()\"\n            << \"\\n\\t The input image and output label image can't be the same object.\"\n            );\n\n        const_image_view<image_type> img(img_);\n        image_view<label_image_type> label_img(label_img_);\n\n        std::stack<point> neighbors;\n        label_img.set_size(img.nr(), img.nc());\n        assign_all_pixels(label_img, 0);\n        unsigned long next = 1;\n\n        if (img.size() == 0)\n            return 0;\n\n        const rectangle area = get_rect(img);\n\n        std::vector<point> window;\n\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                // skip already labeled pixels or background pixels\n                if (label_img[r][c] != 0 || is_background(img,point(c,r)))\n                    continue;\n\n                label_img[r][c] = next;\n\n                // label all the neighbors of this point \n                neighbors.push(point(c,r));\n                while (neighbors.size() > 0)\n                {\n                    const point p = neighbors.top();\n                    neighbors.pop();\n\n                    window.clear();\n                    get_neighbors(p, window);\n\n                    for (unsigned long i = 0; i < window.size(); ++i)\n                    {\n                        if (area.contains(window[i]) &&                     // point in image.\n                            !is_background(img,window[i]) &&                // isn't background.\n                            label_img[window[i].y()][window[i].x()] == 0 && // haven't already labeled it.\n                            is_connected(img, p, window[i]))                // it's connected.\n                        {\n                            label_img[window[i].y()][window[i].x()] = next;\n                            neighbors.push(window[i]);\n                        }\n                    }\n                }\n\n                ++next;\n            }\n        }\n\n        return next;\n    }\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LABEL_CONNeCTED_BLOBS_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/label_connected_blobs_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LABEL_CONNeCTED_BLOBS_ABSTRACT_H_\n#ifdef DLIB_LABEL_CONNeCTED_BLOBS_ABSTRACT_H_\n\n#include \"../geometry.h\"\n#include <vector>\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct neighbors_8 \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a pixel neighborhood generating functor for \n                use with the label_connected_blobs() routine defined below.\n        !*/\n\n        void operator() (\n            const point& p,\n            std::vector<point>& neighbors\n        ) const;\n        /*!\n            ensures\n                - adds the 8 neighboring pixels surrounding p into neighbors\n        !*/\n    };\n\n    struct neighbors_4 \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a pixel neighborhood generating functor for \n                use with the label_connected_blobs() routine defined below.\n        !*/\n\n        void operator() (\n            const point& p,\n            std::vector<point>& neighbors\n        ) const;\n        /*!\n            ensures\n                - adds the 4 neighboring pixels of p into neighbors.  These\n                  are the ones immediately to the left, top, right, and bottom.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct connected_if_both_not_zero\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a pixel connection testing functor for use\n                with the label_connected_blobs() routine defined below.\n        !*/\n\n        template <typename image_view_type>\n        bool operator() (\n            const image_view_type& img,\n            const point& a,\n            const point& b\n        ) const\n        {\n            return (img[a.y()][a.x()] != 0 && img[b.y()][b.x()] != 0);\n        }\n    };\n\n    struct connected_if_equal\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a pixel connection testing functor for use\n                with the label_connected_blobs() routine defined below.\n        !*/\n\n        template <typename image_view_type>\n        bool operator() (\n            const image_view_type& img,\n            const point& a,\n            const point& b\n        ) const\n        {\n            return (img[a.y()][a.x()] == img[b.y()][b.x()]);\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct zero_pixels_are_background\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a background testing functor for use\n                with the label_connected_blobs() routine defined below.\n        !*/\n\n        template <typename image_view_type>\n        bool operator() (\n            const image_view_type& img,\n            const point& p\n        ) const\n        {\n            return img[p.y()][p.x()] == 0;\n        }\n\n    };\n\n    struct nothing_is_background \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a background testing functor for use\n                with the label_connected_blobs() routine defined below.\n        !*/\n\n        template <typename image_view_type>\n        bool operator() (\n            const image_view_type&, \n            const point& \n        ) const\n        {\n            return false;\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type,\n        typename label_image_type,\n        typename background_functor_type,\n        typename neighbors_functor_type,\n        typename connected_functor_type\n        >\n    unsigned long label_connected_blobs (\n        const image_type& img,\n        const background_functor_type& is_background,\n        const neighbors_functor_type&  get_neighbors,\n        const connected_functor_type&  is_connected,\n        label_image_type& label_img\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - label_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h and it must contain integer pixels.\n            - is_background(img, point(c,r)) is a legal expression that evaluates to a bool.\n            - is_connected(img, point(c,r), point(c2,r2)) is a legal expression that\n              evaluates to a bool.\n            - get_neighbors(point(c,r), neighbors) is a legal expression where neighbors \n              is of type std::vector<point>.\n            - is_same_object(img, label_img) == false\n        ensures\n            - This function labels each of the connected blobs in img with a unique integer \n              label.  \n            - An image can be thought of as a graph where pixels A and B are connected if \n              and only if the following two statements are satisfied:\n                - is_connected(img,A,B) == true\n                - get_neighbors(A, neighbors) results in neighbors containing B or\n                  get_neighbors(B, neighbors) results in neighbors containing A.\n              Then this function can be understood as labeling all the connected components \n              of this pixel graph such that all pixels in a component get the same label while\n              pixels in different components get different labels.  Note that there is a \n              special \"background\" component determined by is_background().  Any pixels which \n              are \"background\" always get a blob id of 0 regardless of any other considerations.\n            - #label_img.nr() == img.nr()\n            - #label_img.nc() == img.nc()\n            - for all valid r and c:\n                - #label_img[r][c] == the blob label number for pixel img[r][c].  \n                - #label_img[r][c] >= 0\n                - if (is_background(img, point(c,r))) then\n                    - #label_img[r][c] == 0\n                - else\n                    - #label_img[r][c] != 0\n            - if (img.size() != 0) then \n                - returns max(mat(#label_img))+1\n                  (i.e. returns a number one greater than the maximum blob id number, \n                  this is the number of blobs found.)\n            - else\n                - returns 0\n            - blob labels are contiguous, therefore, the number returned by this function is\n              the number of blobs in the image (including the background blob).\n            - It is guaranteed that is_connected() and is_background() will never be \n              called with points outside the image.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LABEL_CONNeCTED_BLOBS_ABSTRACT_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/morphological_operations.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MORPHOLOGICAL_OPERATIONs_\n#define DLIB_MORPHOLOGICAL_OPERATIONs_\n\n#include \"../pixel.h\"\n#include \"thresholding.h\"\n#include \"morphological_operations_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace morphological_operations_helpers\n    {\n        template <typename image_type>\n        bool is_binary_image (\n            const image_type& img_\n        )\n        /*!\n            ensures\n                - returns true if img_ contains only on_pixel and off_pixel values.\n                - returns false otherwise\n        !*/\n        {\n            const_image_view<image_type> img(img_);\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    if (img[r][c] != on_pixel && img[r][c] != off_pixel)\n                    {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        }\n\n        template <\n            long M,\n            long N\n            >\n        bool is_binary_image (\n            const unsigned char (&structuring_element)[M][N]\n        )\n        /*!\n            ensures\n                - returns true if structuring_element contains only on_pixel and off_pixel values.\n                - returns false otherwise\n        !*/\n        {\n            for (long m = 0; m < M; ++m)\n            {\n                for (long n = 0; n < N; ++n)\n                {\n                    if (structuring_element[m][n] != on_pixel &&\n                        structuring_element[m][n] != off_pixel)\n                    {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        long M,\n        long N\n        >\n    void binary_dilation (\n        const in_image_type& in_img_,\n        out_image_type& out_img_,\n        const unsigned char (&structuring_element)[M][N]\n    )\n    {\n        typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n        typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n        using namespace morphological_operations_helpers;\n        COMPILE_TIME_ASSERT(M%2 == 1);\n        COMPILE_TIME_ASSERT(N%2 == 1);\n        DLIB_ASSERT(is_same_object(in_img_,out_img_) == false,\n            \"\\tvoid binary_dilation()\"\n            << \"\\n\\tYou must give two different image objects\"\n            );\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type>::grayscale);\n        DLIB_ASSERT(is_binary_image(in_img_) ,\n            \"\\tvoid binary_dilation()\"\n            << \"\\n\\tin_img must be a binary image\"\n            );\n        DLIB_ASSERT(is_binary_image(structuring_element) ,\n            \"\\tvoid binary_dilation()\"\n            << \"\\n\\tthe structuring_element must be a binary image\"\n            );\n\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(in_img.nr(),in_img.nc());\n\n        // apply the filter to the image\n        for (long r = 0; r < in_img.nr(); ++r)\n        {\n            for (long c = 0; c < in_img.nc(); ++c)\n            {\n                unsigned char out_pixel = off_pixel;\n                for (long m = 0; m < M && out_pixel == off_pixel; ++m)\n                {\n                    for (long n = 0; n < N && out_pixel == off_pixel; ++n)\n                    {\n                        if (structuring_element[m][n] == on_pixel)\n                        {\n                            // if this pixel is inside the image then get it from the image\n                            // but if it isn't just pretend it was an off_pixel value\n                            if (r+m >= M/2 && c+n >= N/2 &&\n                                r+m-M/2 < in_img.nr() && c+n-N/2 < in_img.nc())\n                            {\n                                out_pixel = in_img[r+m-M/2][c+n-N/2];\n                            }\n                        }\n                    }\n                }\n                assign_pixel(out_img[r][c], out_pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        long M,\n        long N\n        >\n    void binary_erosion (\n        const in_image_type& in_img_,\n        out_image_type& out_img_,\n        const unsigned char (&structuring_element)[M][N]\n    )\n    {\n        typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n        typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n        using namespace morphological_operations_helpers;\n        COMPILE_TIME_ASSERT(M%2 == 1);\n        COMPILE_TIME_ASSERT(N%2 == 1);\n        DLIB_ASSERT(is_same_object(in_img_,out_img_) == false,\n            \"\\tvoid binary_erosion()\"\n            << \"\\n\\tYou must give two different image objects\"\n            );\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type>::grayscale);\n        DLIB_ASSERT(is_binary_image(in_img_) ,\n            \"\\tvoid binary_erosion()\"\n            << \"\\n\\tin_img must be a binary image\"\n            );\n        DLIB_ASSERT(is_binary_image(structuring_element) ,\n            \"\\tvoid binary_erosion()\"\n            << \"\\n\\tthe structuring_element must be a binary image\"\n            );\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(in_img.nr(),in_img.nc());\n\n        // apply the filter to the image\n        for (long r = 0; r < in_img.nr(); ++r)\n        {\n            for (long c = 0; c < in_img.nc(); ++c)\n            {\n                unsigned char out_pixel = on_pixel;\n                for (long m = 0; m < M && out_pixel == on_pixel; ++m)\n                {\n                    for (long n = 0; n < N && out_pixel == on_pixel; ++n)\n                    {\n                        if (structuring_element[m][n] == on_pixel)\n                        {\n                            // if this pixel is inside the image then get it from the image\n                            // but if it isn't just pretend it was an off_pixel value\n                            if (r+m >= M/2 && c+n >= N/2 &&\n                                r+m-M/2 < in_img.nr() && c+n-N/2 < in_img.nc())\n                            {\n                                out_pixel = in_img[r+m-M/2][c+n-N/2];\n                            }\n                            else\n                            {\n                                out_pixel = off_pixel;\n                            }\n                        }\n                    }\n                }\n                assign_pixel(out_img[r][c], out_pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        long M,\n        long N\n        >\n    void binary_open (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const unsigned char (&structuring_element)[M][N],\n        const unsigned long iter = 1\n    )\n    {\n        typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n        typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n        using namespace morphological_operations_helpers;\n        COMPILE_TIME_ASSERT(M%2 == 1);\n        COMPILE_TIME_ASSERT(N%2 == 1);\n        DLIB_ASSERT(is_same_object(in_img,out_img) == false,\n            \"\\tvoid binary_open()\"\n            << \"\\n\\tYou must give two different image objects\"\n            );\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type>::grayscale);\n        DLIB_ASSERT(is_binary_image(in_img) ,\n            \"\\tvoid binary_open()\"\n            << \"\\n\\tin_img must be a binary image\"\n            );\n        DLIB_ASSERT(is_binary_image(structuring_element) ,\n            \"\\tvoid binary_open()\"\n            << \"\\n\\tthe structuring_element must be a binary image\"\n            );\n\n\n        // if there isn't any input image then don't do anything\n        if (num_rows(in_img)*num_columns(in_img) == 0)\n        {\n            set_image_size(out_img, 0,0);\n            return;\n        }\n\n        set_image_size(out_img, num_rows(in_img), num_columns(in_img));\n\n        if (iter == 0)\n        {\n            // just copy the image over\n            assign_image(out_img, in_img);\n        }\n        else if (iter == 1)\n        {\n            in_image_type temp;\n            binary_erosion(in_img,temp,structuring_element);\n            binary_dilation(temp,out_img,structuring_element);\n        }\n        else\n        {\n            in_image_type temp1, temp2;\n            binary_erosion(in_img,temp1,structuring_element);\n\n            // do the extra erosions\n            for (unsigned long i = 1; i < iter; ++i)\n            {\n                swap(temp1, temp2);\n                binary_erosion(temp2,temp1,structuring_element);\n            }\n\n            // do the extra dilations \n            for (unsigned long i = 1; i < iter; ++i)\n            {\n                swap(temp1, temp2);\n                binary_dilation(temp2,temp1,structuring_element);\n            }\n\n            binary_dilation(temp1,out_img,structuring_element);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        long M,\n        long N\n        >\n    void binary_close (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const unsigned char (&structuring_element)[M][N],\n        const unsigned long iter = 1\n    )\n    {\n        typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n        typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n\n        using namespace morphological_operations_helpers;\n        COMPILE_TIME_ASSERT(M%2 == 1);\n        COMPILE_TIME_ASSERT(N%2 == 1);\n        DLIB_ASSERT(is_same_object(in_img,out_img) == false,\n            \"\\tvoid binary_close()\"\n            << \"\\n\\tYou must give two different image objects\"\n            );\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type>::grayscale);\n        DLIB_ASSERT(is_binary_image(in_img) ,\n            \"\\tvoid binary_close()\"\n            << \"\\n\\tin_img must be a binary image\"\n            );\n        DLIB_ASSERT(is_binary_image(structuring_element) ,\n            \"\\tvoid binary_close()\"\n            << \"\\n\\tthe structuring_element must be a binary image\"\n            );\n\n\n        // if there isn't any input image then don't do anything\n        if (num_rows(in_img)*num_columns(in_img) == 0)\n        {\n            set_image_size(out_img, 0,0);\n            return;\n        }\n\n        set_image_size(out_img, num_rows(in_img), num_columns(in_img));\n\n        if (iter == 0)\n        {\n            // just copy the image over\n            assign_image(out_img, in_img);\n        }\n        else if (iter == 1)\n        {\n            in_image_type temp;\n            binary_dilation(in_img,temp,structuring_element);\n            binary_erosion(temp,out_img,structuring_element);\n        }\n        else\n        {\n            in_image_type temp1, temp2;\n            binary_dilation(in_img,temp1,structuring_element);\n\n            // do the extra dilations \n            for (unsigned long i = 1; i < iter; ++i)\n            {\n                swap(temp1, temp2);\n                binary_dilation(temp2,temp1,structuring_element);\n            }\n\n            // do the extra erosions \n            for (unsigned long i = 1; i < iter; ++i)\n            {\n                swap(temp1, temp2);\n                binary_erosion(temp2,temp1,structuring_element);\n            }\n\n            binary_erosion(temp1,out_img,structuring_element);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type1,\n        typename in_image_type2,\n        typename out_image_type\n        >\n    void binary_intersection (\n        const in_image_type1& in_img1_,\n        const in_image_type2& in_img2_,\n        out_image_type& out_img_\n    )\n    {\n        typedef typename image_traits<in_image_type1>::pixel_type in_pixel_type1;\n        typedef typename image_traits<in_image_type2>::pixel_type in_pixel_type2;\n        typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type1>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type2>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n        using namespace morphological_operations_helpers;\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type1>::grayscale);\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type2>::grayscale);\n        DLIB_ASSERT(is_binary_image(in_img1_) ,\n            \"\\tvoid binary_intersection()\"\n            << \"\\n\\tin_img1 must be a binary image\"\n            );\n        DLIB_ASSERT(is_binary_image(in_img2_) ,\n            \"\\tvoid binary_intersection()\"\n            << \"\\n\\tin_img2 must be a binary image\"\n            );\n\n        const_image_view<in_image_type1> in_img1(in_img1_);\n        const_image_view<in_image_type2> in_img2(in_img2_);\n        image_view<out_image_type> out_img(out_img_);\n\n        DLIB_ASSERT(in_img1.nc() == in_img2.nc(),\n            \"\\tvoid binary_intersection()\"\n            << \"\\n\\tin_img1 and in_img2 must have the same ncs.\"\n            << \"\\n\\tin_img1.nc(): \" << in_img1.nc()\n            << \"\\n\\tin_img2.nc(): \" << in_img2.nc()\n            );\n        DLIB_ASSERT(in_img1.nr() == in_img2.nr(),\n            \"\\tvoid binary_intersection()\"\n            << \"\\n\\tin_img1 and in_img2 must have the same nrs.\"\n            << \"\\n\\tin_img1.nr(): \" << in_img1.nr()\n            << \"\\n\\tin_img2.nr(): \" << in_img2.nr()\n            );\n            \n\n\n        // if there isn't any input image then don't do anything\n        if (in_img1.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(in_img1.nr(),in_img1.nc());\n\n        for (long r = 0; r < in_img1.nr(); ++r)\n        {\n            for (long c = 0; c < in_img1.nc(); ++c)\n            {\n                if (in_img1[r][c] == on_pixel && in_img2[r][c] == on_pixel)\n                    assign_pixel(out_img[r][c], on_pixel);\n                else\n                    assign_pixel(out_img[r][c], off_pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type1,\n        typename in_image_type2,\n        typename out_image_type\n        >\n    void binary_union (\n        const in_image_type1& in_img1_,\n        const in_image_type2& in_img2_,\n        out_image_type& out_img_\n    )\n    {\n        typedef typename image_traits<in_image_type1>::pixel_type in_pixel_type1;\n        typedef typename image_traits<in_image_type2>::pixel_type in_pixel_type2;\n        typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type1>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type2>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n\n        using namespace morphological_operations_helpers;\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type1>::grayscale);\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type2>::grayscale);\n        DLIB_ASSERT(is_binary_image(in_img1_) ,\n            \"\\tvoid binary_intersection()\"\n            << \"\\n\\tin_img1 must be a binary image\"\n            );\n        DLIB_ASSERT(is_binary_image(in_img2_) ,\n            \"\\tvoid binary_intersection()\"\n            << \"\\n\\tin_img2 must be a binary image\"\n            );\n\n        const_image_view<in_image_type1> in_img1(in_img1_);\n        const_image_view<in_image_type2> in_img2(in_img2_);\n        image_view<out_image_type> out_img(out_img_);\n\n        DLIB_ASSERT(in_img1.nc() == in_img2.nc(),\n            \"\\tvoid binary_intersection()\"\n            << \"\\n\\tin_img1 and in_img2 must have the same ncs.\"\n            << \"\\n\\tin_img1.nc(): \" << in_img1.nc()\n            << \"\\n\\tin_img2.nc(): \" << in_img2.nc()\n            );\n        DLIB_ASSERT(in_img1.nr() == in_img2.nr(),\n            \"\\tvoid binary_intersection()\"\n            << \"\\n\\tin_img1 and in_img2 must have the same nrs.\"\n            << \"\\n\\tin_img1.nr(): \" << in_img1.nr()\n            << \"\\n\\tin_img2.nr(): \" << in_img2.nr()\n            );\n            \n\n\n        // if there isn't any input image then don't do anything\n        if (in_img1.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(in_img1.nr(),in_img1.nc());\n\n        for (long r = 0; r < in_img1.nr(); ++r)\n        {\n            for (long c = 0; c < in_img1.nc(); ++c)\n            {\n                if (in_img1[r][c] == on_pixel || in_img2[r][c] == on_pixel)\n                    assign_pixel(out_img[r][c], on_pixel);\n                else\n                    assign_pixel(out_img[r][c], off_pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type1,\n        typename in_image_type2,\n        typename out_image_type\n        >\n    void binary_difference (\n        const in_image_type1& in_img1_,\n        const in_image_type2& in_img2_,\n        out_image_type& out_img_\n    )\n    {\n        typedef typename image_traits<in_image_type1>::pixel_type in_pixel_type1;\n        typedef typename image_traits<in_image_type2>::pixel_type in_pixel_type2;\n        typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type1>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type2>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n        using namespace morphological_operations_helpers;\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type1>::grayscale);\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type2>::grayscale);\n        DLIB_ASSERT(is_binary_image(in_img1_) ,\n            \"\\tvoid binary_difference()\"\n            << \"\\n\\tin_img1 must be a binary image\"\n            );\n        DLIB_ASSERT(is_binary_image(in_img2_) ,\n            \"\\tvoid binary_difference()\"\n            << \"\\n\\tin_img2 must be a binary image\"\n            );\n\n        const_image_view<in_image_type1> in_img1(in_img1_);\n        const_image_view<in_image_type2> in_img2(in_img2_);\n        image_view<out_image_type> out_img(out_img_);\n\n        DLIB_ASSERT(in_img1.nc() == in_img2.nc(),\n            \"\\tvoid binary_difference()\"\n            << \"\\n\\tin_img1 and in_img2 must have the same ncs.\"\n            << \"\\n\\tin_img1.nc(): \" << in_img1.nc()\n            << \"\\n\\tin_img2.nc(): \" << in_img2.nc()\n            );\n        DLIB_ASSERT(in_img1.nr() == in_img2.nr(),\n            \"\\tvoid binary_difference()\"\n            << \"\\n\\tin_img1 and in_img2 must have the same nrs.\"\n            << \"\\n\\tin_img1.nr(): \" << in_img1.nr()\n            << \"\\n\\tin_img2.nr(): \" << in_img2.nr()\n            );\n            \n\n\n        // if there isn't any input image then don't do anything\n        if (in_img1.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(in_img1.nr(),in_img1.nc());\n\n        for (long r = 0; r < in_img1.nr(); ++r)\n        {\n            for (long c = 0; c < in_img1.nc(); ++c)\n            {\n                if (in_img1[r][c] == on_pixel && in_img2[r][c] == off_pixel)\n                    assign_pixel(out_img[r][c], on_pixel);\n                else\n                    assign_pixel(out_img[r][c], off_pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void binary_complement (\n        const in_image_type& in_img_,\n        out_image_type& out_img_\n    )\n    {\n        typedef typename image_traits<in_image_type>::pixel_type in_pixel_type;\n        typedef typename image_traits<out_image_type>::pixel_type out_pixel_type;\n        COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<out_pixel_type>::has_alpha == false );\n\n\n        using namespace morphological_operations_helpers;\n        COMPILE_TIME_ASSERT(pixel_traits<in_pixel_type>::grayscale);\n        DLIB_ASSERT(is_binary_image(in_img_) ,\n            \"\\tvoid binary_complement()\"\n            << \"\\n\\tin_img must be a binary image\"\n            );\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(in_img.nr(),in_img.nc());\n\n        for (long r = 0; r < in_img.nr(); ++r)\n        {\n            for (long c = 0; c < in_img.nc(); ++c)\n            {\n                if (in_img[r][c] == on_pixel)\n                    assign_pixel(out_img[r][c], off_pixel);\n                else\n                    assign_pixel(out_img[r][c], on_pixel);\n            }\n        }\n    }\n\n    template <\n        typename image_type\n        >\n    void binary_complement (\n        image_type& img\n    )\n    {\n        binary_complement(img,img);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MORPHOLOGICAL_OPERATIONs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/morphological_operations_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MORPHOLOGICAL_OPERATIONs_ABSTRACT_\n#ifdef DLIB_MORPHOLOGICAL_OPERATIONs_ABSTRACT_\n\n#include \"../pixel.h\"\n#include \"thresholding_abstract.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        long M,\n        long N\n        >\n    void binary_dilation (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const unsigned char (&structuring_element)[M][N]\n    );\n    /*!\n        requires\n            - in_image_type and out_image_type are image objects that implement the\n              interface defined in dlib/image_processing/generic_image.h \n            - in_img must contain a grayscale pixel type.\n            - both in_img and out_img must contain pixels with no alpha channel.\n              (i.e. pixel_traits::has_alpha==false for their pixels)\n            - is_same_object(in_img,out_img) == false\n            - M % 2 == 1  (i.e. M must be odd)\n            - N % 2 == 1  (i.e. N must be odd)\n            - all pixels in in_img are set to either on_pixel or off_pixel\n              (i.e. it must be a binary image)\n            - all pixels in structuring_element are set to either on_pixel or off_pixel\n              (i.e. it must be a binary image)\n        ensures\n            - Does a binary dilation of in_img using the given structuring element and \n              stores the result in out_img.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        long M,\n        long N\n        >\n    void binary_erosion (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const unsigned char (&structuring_element)[M][N]\n    );\n    /*!\n        requires\n            - in_image_type and out_image_type are image objects that implement the\n              interface defined in dlib/image_processing/generic_image.h \n            - in_img must contain a grayscale pixel type.\n            - both in_img and out_img must contain pixels with no alpha channel.\n              (i.e. pixel_traits::has_alpha==false for their pixels)\n            - is_same_object(in_img,out_img) == false\n            - M % 2 == 1  (i.e. M must be odd)\n            - N % 2 == 1  (i.e. N must be odd)\n            - all pixels in in_img are set to either on_pixel or off_pixel\n              (i.e. it must be a binary image)\n            - all pixels in structuring_element are set to either on_pixel or off_pixel\n              (i.e. it must be a binary image)\n        ensures\n            - Does a binary erosion of in_img using the given structuring element and \n              stores the result in out_img.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        long M,\n        long N\n        >\n    void binary_open (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const unsigned char (&structuring_element)[M][N],\n        const unsigned long iter = 1\n    );\n    /*!\n        requires\n            - in_image_type and out_image_type are image objects that implement the\n              interface defined in dlib/image_processing/generic_image.h \n            - in_img must contain a grayscale pixel type.\n            - both in_img and out_img must contain pixels with no alpha channel.\n              (i.e. pixel_traits::has_alpha==false for their pixels)\n            - is_same_object(in_img,out_img) == false\n            - M % 2 == 1  (i.e. M must be odd)\n            - N % 2 == 1  (i.e. N must be odd)\n            - all pixels in in_img are set to either on_pixel or off_pixel\n              (i.e. it must be a binary image)\n            - all pixels in structuring_element are set to either on_pixel or off_pixel\n              (i.e. it must be a binary image)\n        ensures\n            - Does a binary open of in_img using the given structuring element and \n              stores the result in out_img.  Specifically, iter iterations of binary \n              erosion are applied and then iter iterations of binary dilation.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        long M,\n        long N\n        >\n    void binary_close (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const unsigned char (&structuring_element)[M][N],\n        const unsigned long iter = 1\n    );\n    /*!\n        requires\n            - in_image_type and out_image_type are image objects that implement the\n              interface defined in dlib/image_processing/generic_image.h \n            - in_img must contain a grayscale pixel type.\n            - both in_img and out_img must contain pixels with no alpha channel.\n              (i.e. pixel_traits::has_alpha==false for their pixels)\n            - is_same_object(in_img,out_img) == false\n            - M % 2 == 1  (i.e. M must be odd)\n            - N % 2 == 1  (i.e. N must be odd)\n            - all pixels in in_img are set to either on_pixel or off_pixel\n              (i.e. it must be a binary image)\n            - all pixels in structuring_element are set to either on_pixel or off_pixel\n              (i.e. it must be a binary image)\n        ensures\n            - Does a binary close of in_img using the given structuring element and \n              stores the result in out_img.  Specifically, iter iterations of binary \n              dilation are applied and then iter iterations of binary erosion.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type1,\n        typename in_image_type2,\n        typename out_image_type\n        >\n    void binary_intersection (\n        const in_image_type1& in_img1,\n        const in_image_type2& in_img2,\n        out_image_type& out_img\n    );\n    /*!\n        requires\n            - in_image_type1, in_image_type2, and out_image_type are image objects that\n              implement the interface defined in dlib/image_processing/generic_image.h \n            - in_img1 and in_img2 must contain grayscale pixel types.\n            - in_img1, in_img2, and out_img must contain pixels with no alpha channel.\n              (i.e. pixel_traits::has_alpha==false for their pixels)\n            - all pixels in in_img1 and in_img2 are set to either on_pixel or off_pixel\n              (i.e. they must be binary images)\n            - in_img1.nc() == in_img2.nc()\n            - in_img1.nr() == in_img2.nr()\n        ensures\n            - #out_img == the binary intersection of in_img1 and in_img2.  (i.e. All\n              the pixels that are set to on_pixel in both in_img1 and in_img2 will be set\n              to on_pixel in #out_img.  All other pixels will be set to off_pixel)\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type1,\n        typename in_image_type2,\n        typename out_image_type\n        >\n    void binary_union (\n        const in_image_type1& in_img1,\n        const in_image_type2& in_img2,\n        out_image_type& out_img\n    );\n    /*!\n        requires\n            - in_image_type1, in_image_type2, and out_image_type are image objects that\n              implement the interface defined in dlib/image_processing/generic_image.h \n            - in_img1 and in_img2 must contain grayscale pixel types.\n            - in_img1, in_img2, and out_img must contain pixels with no alpha channel.\n              (i.e. pixel_traits::has_alpha==false for their pixels)\n            - all pixels in in_img1 and in_img2 are set to either on_pixel or off_pixel\n              (i.e. they must be binary images)\n            - in_img1.nc() == in_img2.nc()\n            - in_img1.nr() == in_img2.nr()\n        ensures\n            - #out_img == the binary union of in_img1 and in_img2.  (i.e. All\n              the pixels that are set to on_pixel in in_img1 and/or in_img2 will be set\n              to on_pixel in #out_img.  All other pixels will be set to off_pixel)\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type1,\n        typename in_image_type2,\n        typename out_image_type\n        >\n    void binary_difference (\n        const in_image_type1& in_img1,\n        const in_image_type2& in_img2,\n        out_image_type& out_img\n    );\n    /*!\n        requires\n            - in_image_type1, in_image_type2, and out_image_type are image objects that\n              implement the interface defined in dlib/image_processing/generic_image.h \n            - in_img1 and in_img2 must contain grayscale pixel types.\n            - in_img1, in_img2, and out_img must contain pixels with no alpha channel.\n              (i.e. pixel_traits::has_alpha==false for their pixels)\n            - all pixels in in_img1 and in_img2 are set to either on_pixel or off_pixel\n              (i.e. they must be binary images)\n            - in_img1.nc() == in_img2.nc()\n            - in_img1.nr() == in_img2.nr()\n        ensures\n            - #out_img == the binary difference of in_img1 and in_img2.  (i.e. #out_img\n              will be a copy of in_img1 except that any pixels in in_img2 that are set to \n              on_pixel will be set to off_pixel)\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void binary_complement (\n        const in_image_type& in_img,\n        out_image_type& out_img\n    );\n    /*!\n        requires\n            - in_image_type and out_image_type are image objects that implement the\n              interface defined in dlib/image_processing/generic_image.h \n            - in_img must contain a grayscale pixel type.\n            - both in_img and out_img must contain pixels with no alpha channel.\n              (i.e. pixel_traits::has_alpha==false for their pixels)\n            - all pixels in in_img are set to either on_pixel or off_pixel\n              (i.e. it must be a binary image)\n        ensures\n            - #out_img == the binary complement of in_img.  (i.e. For each pixel in\n              in_img, if it is on_pixel then it will be set to off_pixel in #out_img and\n              if it was off_pixel in in_img then it will be on_pixel in #out_img)\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n    template <\n        typename image_type\n        >\n    void binary_complement (\n        image_type& img\n    );\n    /*!\n        requires\n            - it must be valid to call binary_complement(img,img);\n        ensures\n            - calls binary_complement(img,img);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MORPHOLOGICAL_OPERATIONs_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/segment_image.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEGMENT_ImAGE_Hh_\n#define DLIB_SEGMENT_ImAGE_Hh_\n\n#include \"segment_image_abstract.h\"\n#include \"../algs.h\"\n#include <vector>\n#include \"../geometry.h\"\n#include \"../disjoint_subsets.h\"\n#include \"../set.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T>\n        inline T edge_diff_uint(\n            const T& a,\n            const T& b\n        )\n        {\n            if (a > b)\n                return a - b;\n            else\n                return b - a;\n        }\n\n    // ----------------------------------------\n\n        template <typename T, typename enabled = void>\n        struct edge_diff_funct \n        {\n            typedef double diff_type;\n\n            template <typename pixel_type>\n            double operator()(\n                const pixel_type& a,\n                const pixel_type& b\n            ) const\n            {\n                return length(pixel_to_vector<double>(a) - pixel_to_vector<double>(b));\n            }\n        };\n\n        template <>\n        struct edge_diff_funct<uint8,void>\n        { \n            typedef uint8 diff_type; \n            uint8 operator()( const uint8& a, const uint8& b) const { return edge_diff_uint(a,b); } \n        };\n\n        template <>\n        struct edge_diff_funct<uint16,void>\n        { \n            typedef uint16 diff_type; \n            uint16 operator()( const uint16& a, const uint16& b) const { return edge_diff_uint(a,b); } \n        };\n\n        template <>\n        struct edge_diff_funct<uint32,void>\n        { \n            typedef uint32 diff_type; \n            uint32 operator()( const uint32& a, const uint32& b) const { return edge_diff_uint(a,b); } \n        };\n\n        template <>\n        struct edge_diff_funct<double,void>\n        { \n            typedef double diff_type; \n            double operator()( const double& a, const double& b) const { return std::abs(a-b); } \n        };\n\n        template <typename T>\n        struct edge_diff_funct<T, typename enable_if<is_matrix<T> >::type>\n        {\n            typedef double diff_type;\n            double operator()(\n                const T& a,\n                const T& b\n            ) const\n            {\n                return length(a-b);\n            }\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        struct graph_image_segmentation_data_T\n        {\n            graph_image_segmentation_data_T() : component_size(1), internal_diff(0) {}\n            unsigned long component_size;\n            T internal_diff;\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        struct segment_image_edge_data_T\n        {\n            segment_image_edge_data_T (){}\n\n            segment_image_edge_data_T (\n                const rectangle& rect,\n                const point& p1,\n                const point& p2,\n                const T& diff_\n            ) :\n                idx1(p1.y()*rect.width() + p1.x()),\n                idx2(p2.y()*rect.width() + p2.x()),\n                diff(diff_)\n            {}\n\n            bool operator<(const segment_image_edge_data_T& item) const\n            { return diff < item.diff; }\n\n            unsigned long idx1;\n            unsigned long idx2;\n            T diff;\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename image_view_type>\n        struct uint8_or_uint16_pixels\n        {\n            typedef typename image_view_type::pixel_type pixel_type;\n            const static bool value = is_same_type<pixel_type,uint8>::value ||\n                is_same_type<pixel_type,uint16>::value;\n        };\n\n        // This is an overload of get_pixel_edges() that is optimized to segment images\n        // with 8bit or 16bit  pixels very quickly.  We do this by using a radix sort\n        // instead of quicksort.\n        template <typename in_image_type, typename T>\n        typename enable_if<uint8_or_uint16_pixels<in_image_type> >::type \n        get_pixel_edges (\n            const in_image_type& in_img,\n            std::vector<segment_image_edge_data_T<T> >& sorted_edges\n        )\n        {\n            typedef typename in_image_type::pixel_type ptype;\n            typedef T diff_type;\n            std::vector<unsigned long> counts(std::numeric_limits<ptype>::max()+1, 0);\n\n            edge_diff_funct<ptype> edge_diff;\n\n            border_enumerator be(get_rect(in_img), 1);\n            // we are going to do a radix sort on the edge weights.  So the first step\n            // is to accumulate them into count.\n            const rectangle area = get_rect(in_img);\n            while (be.move_next())\n            {\n                const long r = be.element().y();\n                const long c = be.element().x();\n                const ptype pix = in_img[r][c];\n                if (area.contains(c-1,r))   counts[edge_diff(pix, in_img[r  ][c-1])] += 1;\n                if (area.contains(c+1,r))   counts[edge_diff(pix, in_img[r  ][c+1])] += 1;\n                if (area.contains(c  ,r-1)) counts[edge_diff(pix, in_img[r-1][c  ])] += 1;\n                if (area.contains(c  ,r+1)) counts[edge_diff(pix, in_img[r+1][c  ])] += 1;\n            }\n            for (long r = 1; r+1 < in_img.nr(); ++r)\n            {\n                for (long c = 1; c+1 < in_img.nc(); ++c)\n                {\n                    const ptype pix = in_img[r][c];\n                    counts[edge_diff(pix, in_img[r-1][c+1])] += 1;\n                    counts[edge_diff(pix, in_img[r  ][c+1])] += 1;\n                    counts[edge_diff(pix, in_img[r+1][c  ])] += 1;\n                    counts[edge_diff(pix, in_img[r+1][c+1])] += 1;\n                }\n            }\n\n            const unsigned long num_edges = shrink_rect(area,1).area()*4 + in_img.nr()*2*3 - 4 + (in_img.nc()-2)*2*3;\n            typedef segment_image_edge_data_T<T> segment_image_edge_data;\n            sorted_edges.resize(num_edges);\n\n            // integrate counts.  The idea is to have sorted_edges[counts[i]] be the location that edges\n            // with an edge_diff of i go.  So counts[0] == 0, counts[1] == number of 0 edge diff edges, etc.\n            unsigned long prev = counts[0];\n            for (unsigned long i = 1; i < counts.size(); ++i)\n            {\n                const unsigned long temp = counts[i];\n                counts[i] += counts[i-1];\n                counts[i-1] -= prev;\n                prev = temp;\n            }\n            counts[counts.size()-1] -= prev;\n\n\n            // now build a sorted list of all the edges\n            be.reset();\n            while(be.move_next())\n            {\n                const point p = be.element();\n                const long r = p.y();\n                const long c = p.x();\n                const ptype pix = in_img[r][c];\n                if (area.contains(c-1,r))\n                {\n                    const diff_type diff = edge_diff(pix, in_img[r  ][c-1]);\n                    sorted_edges[counts[diff]++] = segment_image_edge_data(area,p,point(c-1,r),diff);\n                }\n\n                if (area.contains(c+1,r))\n                {\n                    const diff_type diff = edge_diff(pix, in_img[r  ][c+1]);\n                    sorted_edges[counts[diff]++] = segment_image_edge_data(area,p,point(c+1,r),diff);\n                }\n\n                if (area.contains(c  ,r-1))\n                {\n                    const diff_type diff = edge_diff(pix, in_img[r-1][c  ]);\n                    sorted_edges[counts[diff]++] = segment_image_edge_data(area,p,point(c  ,r-1),diff);\n                }\n\n                if (area.contains(c  ,r+1))\n                {\n                    const diff_type diff = edge_diff(pix, in_img[r+1][c  ]);\n                    sorted_edges[counts[diff]++] = segment_image_edge_data(area,p,point(c  ,r+1),diff);\n                }\n            }\n            // same thing as the above loop but now we do it on the interior of the image and therefore\n            // don't have to include the boundary checking if statements used above.\n            for (long r = 1; r+1 < in_img.nr(); ++r)\n            {\n                for (long c = 1; c+1 < in_img.nc(); ++c)\n                {\n                    const point p(c,r);\n                    const ptype pix = in_img[r][c];\n                    diff_type diff;\n\n                    diff = edge_diff(pix, in_img[r  ][c+1]);\n                    sorted_edges[counts[diff]++] = segment_image_edge_data(area,p,point(c+1,r),diff);\n                    diff = edge_diff(pix, in_img[r-1][c+1]);\n                    sorted_edges[counts[diff]++] = segment_image_edge_data(area,p,point(c+1,r-1),diff);\n                    diff = edge_diff(pix, in_img[r+1][c+1]);\n                    sorted_edges[counts[diff]++] = segment_image_edge_data(area,p,point(c+1,r+1),diff);\n                    diff = edge_diff(pix, in_img[r+1][c  ]);\n                    sorted_edges[counts[diff]++] = segment_image_edge_data(area,p,point(c  ,r+1),diff);\n                }\n            }\n        }\n        \n    // ----------------------------------------------------------------------------------------\n\n        // This is the general purpose version of get_pixel_edges().  It handles all pixel types.\n        template <typename in_image_type, typename T>\n        typename disable_if<uint8_or_uint16_pixels<in_image_type> >::type \n        get_pixel_edges (\n            const in_image_type& in_img,\n            std::vector<segment_image_edge_data_T<T> >& sorted_edges\n        )\n        {   \n            const rectangle area = get_rect(in_img);\n            sorted_edges.reserve(area.area()*4);\n\n            typedef typename in_image_type::pixel_type ptype;\n            edge_diff_funct<ptype> edge_diff;\n            typedef T diff_type;\n            typedef segment_image_edge_data_T<T> segment_image_edge_data;\n\n            border_enumerator be(get_rect(in_img), 1);\n\n            // now build a sorted list of all the edges\n            be.reset();\n            while(be.move_next())\n            {\n                const point p = be.element();\n                const long r = p.y();\n                const long c = p.x();\n                const ptype& pix = in_img[r][c];\n                if (area.contains(c-1,r))\n                {\n                    const diff_type diff = edge_diff(pix, in_img[r  ][c-1]);\n                    sorted_edges.push_back(segment_image_edge_data(area,p,point(c-1,r),diff));\n                }\n\n                if (area.contains(c+1,r))\n                {\n                    const diff_type diff = edge_diff(pix, in_img[r  ][c+1]);\n                    sorted_edges.push_back(segment_image_edge_data(area,p,point(c+1,r),diff));\n                }\n\n                if (area.contains(c  ,r-1))\n                {\n                    const diff_type diff = edge_diff(pix, in_img[r-1][c  ]);\n                    sorted_edges.push_back( segment_image_edge_data(area,p,point(c  ,r-1),diff));\n                }\n                if (area.contains(c  ,r+1))\n                {\n                    const diff_type diff = edge_diff(pix, in_img[r+1][c  ]);\n                    sorted_edges.push_back( segment_image_edge_data(area,p,point(c  ,r+1),diff));\n                }\n            }\n            // same thing as the above loop but now we do it on the interior of the image and therefore\n            // don't have to include the boundary checking if statements used above.\n            for (long r = 1; r+1 < in_img.nr(); ++r)\n            {\n                for (long c = 1; c+1 < in_img.nc(); ++c)\n                {\n                    const point p(c,r);\n                    const ptype& pix = in_img[r][c];\n                    diff_type diff;\n\n                    diff = edge_diff(pix, in_img[r  ][c+1]);\n                    sorted_edges.push_back( segment_image_edge_data(area,p,point(c+1,r),diff));\n                    diff = edge_diff(pix, in_img[r+1][c+1]);\n                    sorted_edges.push_back( segment_image_edge_data(area,p,point(c+1,r+1),diff));\n                    diff = edge_diff(pix, in_img[r+1][c  ]);\n                    sorted_edges.push_back( segment_image_edge_data(area,p,point(c  ,r+1),diff));\n                    diff = edge_diff(pix, in_img[r-1][c+1]);\n                    sorted_edges.push_back( segment_image_edge_data(area,p,point(c+1,r-1),diff));\n                }\n            }\n\n            std::sort(sorted_edges.begin(), sorted_edges.end());\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    } // end of namespace impl\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void segment_image (\n        const in_image_type& in_img_,\n        out_image_type& out_img_,\n        const double k = 200,\n        const unsigned long min_size = 10\n    )\n    {\n        using namespace dlib::impl;\n        typedef typename image_traits<in_image_type>::pixel_type ptype;\n        typedef typename edge_diff_funct<ptype>::diff_type diff_type;\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_same_object(in_img_, out_img_) == false,\n            \"\\t void segment_image()\"\n            << \"\\n\\t The input images can't be the same object.\"\n            );\n\n        COMPILE_TIME_ASSERT(is_unsigned_type<typename image_traits<out_image_type>::pixel_type>::value);\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        out_img.set_size(in_img.nr(), in_img.nc());\n        // don't bother doing anything if the image is too small\n        if (in_img.nr() < 2 || in_img.nc() < 2)\n        {\n            assign_all_pixels(out_img,0);\n            return;\n        }\n\n        disjoint_subsets sets;\n        sets.set_size(in_img.size());\n\n        std::vector<segment_image_edge_data_T<diff_type> > sorted_edges;\n        get_pixel_edges(in_img, sorted_edges);\n\n        std::vector<graph_image_segmentation_data_T<diff_type> > data(in_img.size());\n\n        // now start connecting blobs together to make a minimum spanning tree.\n        for (unsigned long i = 0; i < sorted_edges.size(); ++i)\n        {\n            const unsigned long idx1 = sorted_edges[i].idx1;\n            const unsigned long idx2 = sorted_edges[i].idx2;\n\n            unsigned long set1 = sets.find_set(idx1);\n            unsigned long set2 = sets.find_set(idx2);\n            if (set1 != set2)\n            {\n                const diff_type diff = sorted_edges[i].diff;\n                const diff_type tau1 = static_cast<diff_type>(k/data[set1].component_size);\n                const diff_type tau2 = static_cast<diff_type>(k/data[set2].component_size);\n\n                const diff_type mint = std::min(data[set1].internal_diff + tau1, \n                                                data[set2].internal_diff + tau2);\n                if (diff <= mint)\n                {\n                    const unsigned long new_set = sets.merge_sets(set1, set2);\n                    data[new_set].component_size = data[set1].component_size + data[set2].component_size;\n                    data[new_set].internal_diff = diff;\n                }\n            }\n        }\n\n        // now merge any really small blobs\n        if (min_size != 0)\n        {\n            for (unsigned long i = 0; i < sorted_edges.size(); ++i)\n            {\n                const unsigned long idx1 = sorted_edges[i].idx1;\n                const unsigned long idx2 = sorted_edges[i].idx2;\n\n                unsigned long set1 = sets.find_set(idx1);\n                unsigned long set2 = sets.find_set(idx2);\n                if (set1 != set2 && (data[set1].component_size < min_size || data[set2].component_size < min_size))\n                {\n                    const unsigned long new_set = sets.merge_sets(set1, set2);\n                    data[new_set].component_size = data[set1].component_size + data[set2].component_size;\n                    //data[new_set].internal_diff = sorted_edges[i].diff;\n                }\n            }\n        }\n\n        unsigned long idx = 0;\n        for (long r = 0; r < out_img.nr(); ++r)\n        {\n            for (long c = 0; c < out_img.nc(); ++c)\n            {\n                out_img[r][c] = sets.find_set(idx++);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                     Candidate object location generation code.\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        struct edge_data\n        {\n            double edge_diff;\n            unsigned long set1;  \n            unsigned long set2;\n            bool operator<(const edge_data& item) const\n            {\n                return edge_diff < item.edge_diff;\n            }\n        };\n\n        template <\n            typename in_image_type,\n            typename diff_type\n            >\n        void find_basic_candidate_object_locations (\n            const in_image_type& in_img,\n            const std::vector<dlib::impl::segment_image_edge_data_T<diff_type> >& sorted_edges,\n            std::vector<rectangle>& out_rects,\n            std::vector<edge_data>& edges,\n            const double k,\n            const unsigned long min_size \n        )\n        {\n            using namespace dlib::impl;\n\n            std::vector<dlib::impl::segment_image_edge_data_T<diff_type> > rejected_edges;\n            rejected_edges.reserve(sorted_edges.size());\n\n            out_rects.clear();\n            edges.clear();\n\n            // don't bother doing anything if the image is too small\n            if (in_img.nr() < 2 || in_img.nc() < 2)\n            {\n                return;\n            }\n\n            disjoint_subsets sets;\n            sets.set_size(in_img.size());\n\n\n            std::vector<graph_image_segmentation_data_T<diff_type> > data(in_img.size());\n\n\n\n            std::pair<unsigned long,unsigned long> last_blob_edge(std::numeric_limits<unsigned long>::max(),\n                                                                  std::numeric_limits<unsigned long>::max());;\n            // now start connecting blobs together to make a minimum spanning tree.\n            for (unsigned long i = 0; i < sorted_edges.size(); ++i)\n            {\n                const unsigned long idx1 = sorted_edges[i].idx1;\n                const unsigned long idx2 = sorted_edges[i].idx2;\n\n                unsigned long set1 = sets.find_set(idx1);\n                unsigned long set2 = sets.find_set(idx2);\n                if (set1 != set2)\n                {\n                    const diff_type diff = sorted_edges[i].diff;\n                    const diff_type tau1 = static_cast<diff_type>(k/data[set1].component_size);\n                    const diff_type tau2 = static_cast<diff_type>(k/data[set2].component_size);\n\n                    const diff_type mint = std::min(data[set1].internal_diff + tau1, \n                        data[set2].internal_diff + tau2);\n                    if (diff <= mint)\n                    {\n                        const unsigned long new_set = sets.merge_sets(set1, set2);\n                        data[new_set].component_size = data[set1].component_size + data[set2].component_size;\n                        data[new_set].internal_diff = diff;\n                    }\n                    else\n                    {\n                        // Don't bother keeping multiple edges from the same pair of blobs, we\n                        // only need one for what we will do later.\n                        if (std::make_pair(set1,set2) != last_blob_edge)\n                        {\n                            segment_image_edge_data_T<diff_type> temp = sorted_edges[i];\n                            temp.idx1 = set1;\n                            temp.idx2 = set2;\n                            rejected_edges.push_back(temp);\n                            last_blob_edge = std::make_pair(set1,set2);\n                        }\n                    }\n                }\n            }\n\n\n            // merge small blobs\n            for (unsigned long i = 0; i < rejected_edges.size(); ++i)\n            {\n                const unsigned long idx1 = rejected_edges[i].idx1;\n                const unsigned long idx2 = rejected_edges[i].idx2;\n\n                unsigned long set1 = sets.find_set(idx1);\n                unsigned long set2 = sets.find_set(idx2);\n                rejected_edges[i].idx1 = set1;\n                rejected_edges[i].idx2 = set2;\n                if (set1 != set2 && (data[set1].component_size < min_size || data[set2].component_size < min_size))\n                {\n                    const unsigned long new_set = sets.merge_sets(set1, set2);\n                    data[new_set].component_size = data[set1].component_size + data[set2].component_size;\n                    data[new_set].internal_diff = rejected_edges[i].diff;\n                }\n            }\n\n            // find bounding boxes of each blob\n            std::map<unsigned long, rectangle> boxes;\n            std::map<unsigned long, unsigned long> box_id_map;\n            unsigned long idx = 0;\n            for (long r = 0; r < in_img.nr(); ++r)\n            {\n                for (long c = 0; c < in_img.nc(); ++c)\n                {\n                    const unsigned long id = sets.find_set(idx++);\n                    // Accumulate the current point into its box and if it is the first point\n                    // in the box then also record the id number for this box.\n                    if ((boxes[id] += point(c,r)).area() == 1)\n                        box_id_map[id] = boxes.size()-1;\n                }\n            }\n\n            // copy boxes into out_rects\n            out_rects.resize(boxes.size());\n            for (std::map<unsigned long,rectangle>::iterator i = boxes.begin(); i != boxes.end(); ++i)\n            {\n                out_rects[box_id_map[i->first]] = i->second;\n            }\n\n            // Now find the edges between the boxes \n            typedef dlib::memory_manager<char>::kernel_2c mm_type;\n            dlib::set<std::pair<unsigned long, unsigned long>, mm_type>::kernel_1a neighbors_final;\n            for (unsigned long i = 0; i < rejected_edges.size(); ++i)\n            {\n                const unsigned long idx1 = rejected_edges[i].idx1;\n                const unsigned long idx2 = rejected_edges[i].idx2;\n\n                unsigned long set1 = sets.find_set(idx1);\n                unsigned long set2 = sets.find_set(idx2);\n                if (set1 != set2)\n                {\n                    std::pair<unsigned long, unsigned long> p = std::make_pair(set1,set2);\n                    if (!neighbors_final.is_member(p))\n                    {\n                        neighbors_final.add(p);\n\n                        edge_data temp;\n                        const diff_type mint = std::min(data[set1].internal_diff , \n                                                        data[set2].internal_diff );\n                        temp.edge_diff = rejected_edges[i].diff - mint;\n                        temp.set1 = box_id_map[set1];\n                        temp.set2 = box_id_map[set2];\n                        edges.push_back(temp);\n                    }\n                }\n            }\n\n            std::sort(edges.begin(), edges.end());\n        }\n    } // end namespace impl\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename alloc>\n    void remove_duplicates (\n        std::vector<rectangle,alloc>& rects\n    )\n    {\n        std::sort(rects.begin(), rects.end(), std::less<rectangle>());\n        unsigned long num_unique = 1;\n        for (unsigned long i = 1; i < rects.size(); ++i)\n        {\n            if (rects[i] != rects[i-1])\n            {\n                rects[num_unique++] = rects[i];\n            }\n        }\n        if (rects.size() != 0)\n            rects.resize(num_unique);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename EXP\n        >\n    void find_candidate_object_locations (\n        const in_image_type& in_img_,\n        std::vector<rectangle>& rects,\n        const matrix_exp<EXP>& kvals,\n        const unsigned long min_size = 20,\n        const unsigned long max_merging_iterations = 50\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(kvals) && kvals.size() > 0,\n            \"\\t void find_candidate_object_locations()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t is_vector(kvals): \" << is_vector(kvals)\n            << \"\\n\\t kvals.size():     \" << kvals.size()\n            );\n\n        typedef dlib::memory_manager<char>::kernel_2c mm_type;\n        typedef dlib::set<rectangle, mm_type>::kernel_1a set_of_rects;\n\n        using namespace dlib::impl;\n        typedef typename image_traits<in_image_type>::pixel_type ptype;\n        typedef typename edge_diff_funct<ptype>::diff_type diff_type;\n\n        const_image_view<in_image_type> in_img(in_img_);\n\n        // don't bother doing anything if the image is too small\n        if (in_img.nr() < 2 || in_img.nc() < 2)\n        {\n            return;\n        }\n\n        std::vector<edge_data> edges;\n        std::vector<rectangle> working_rects;\n        std::vector<segment_image_edge_data_T<diff_type> > sorted_edges;\n        get_pixel_edges(in_img, sorted_edges);\n\n        disjoint_subsets sets;\n\n        for (long j = 0; j < kvals.size(); ++j)\n        {\n            const double k = kvals(j);\n\n            find_basic_candidate_object_locations(in_img, sorted_edges, working_rects, edges, k, min_size);\n            rects.insert(rects.end(), working_rects.begin(), working_rects.end());\n\n\n            // Now iteratively merge all the rectangles we have and record the results.\n            // Note that, unlike what is described in the paper \n            //    Segmentation as Selective Search for Object Recognition\" by Koen E. A. van de Sande, et al.\n            // we don't use any kind of histogram/SIFT like thing to order the edges\n            // between the blobs.  Here we simply order by the pixel difference value.\n            // Additionally, note that we keep progressively merging boxes in the outer\n            // loop rather than performing just a single iteration as indicated in the\n            // paper.\n            set_of_rects detected_rects;\n            bool did_merge = true;\n            for (unsigned long iter = 0; did_merge && iter < max_merging_iterations; ++iter) \n            {\n                did_merge = false;\n                sets.clear();\n                sets.set_size(working_rects.size());\n\n                // recursively merge neighboring blobs until we have merged everything\n                for (unsigned long i = 0; i < edges.size(); ++i)\n                {\n                    edge_data temp = edges[i];\n\n                    temp.set1 = sets.find_set(temp.set1);\n                    temp.set2 = sets.find_set(temp.set2);\n                    if (temp.set1 != temp.set2)\n                    {\n                        rectangle merged_rect = working_rects[temp.set1] + working_rects[temp.set2];\n                        // Skip merging this pair of blobs if it was merged in a previous\n                        // iteration.  Doing this lets us consider other possible blob\n                        // merges.\n                        if (!detected_rects.is_member(merged_rect))\n                        {\n                            const unsigned long new_set = sets.merge_sets(temp.set1, temp.set2);\n                            rects.push_back(merged_rect);\n                            working_rects[new_set] = merged_rect;\n                            did_merge = true;\n                            detected_rects.add(merged_rect);\n                        }\n                    }\n                }\n            }\n        }\n\n        remove_duplicates(rects);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type\n        >\n    void find_candidate_object_locations (\n        const in_image_type& in_img,\n        std::vector<rectangle>& rects\n    )\n    {\n        find_candidate_object_locations(in_img, rects, linspace(50, 200, 3));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEGMENT_ImAGE_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/segment_image_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SEGMENT_ImAGE_ABSTRACT_Hh_\n#ifdef DLIB_SEGMENT_ImAGE_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void segment_image (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const double k = 200,\n        const unsigned long min_size = 10\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - in_image_type can contain any pixel type with a pixel_traits specialization\n              or a dlib matrix object representing a row or column vector.\n            - out_image_type must contain an unsigned integer pixel type.\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - Attempts to segment in_img into regions which have some visual consistency to\n              them.  In particular, this function implements the algorithm described in the\n              paper: Efficient Graph-Based Image Segmentation by Felzenszwalb and Huttenlocher.\n            - #out_img.nr() == in_img.nr()\n            - #out_img.nc() == in_img.nc()\n            - for all valid r and c:\n                - #out_img[r][c] == an integer value indicating the identity of the segment\n                  containing the pixel in_img[r][c].  \n            - The k parameter is a measure used to influence how large the segment regions\n              will be.  Larger k generally results in larger segments being produced.  For\n              a deeper discussion of the k parameter you should consult the above\n              referenced paper.\n            - min_size is a lower bound on the size of the output segments.  That is, it is\n              guaranteed that all output segments will have at least min_size pixels in\n              them (unless the whole image contains fewer than min_size pixels, in this\n              case the entire image will be put into a single segment).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename EXP\n        >\n    void find_candidate_object_locations (\n        const in_image_type& in_img,\n        std::vector<rectangle>& rects,\n        const matrix_exp<EXP>& kvals = linspace(50, 200, 3),\n        const unsigned long min_size = 20,\n        const unsigned long max_merging_iterations = 50\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - is_vector(kvals) == true\n            - kvals.size() > 0\n        ensures\n            - This function takes an input image and generates a set of candidate\n              rectangles which are expected to bound any objects in the image.  It does\n              this by running a version of the segment_image() routine on the image and\n              then reports rectangles containing each of the segments as well as rectangles\n              containing unions of adjacent segments.  The basic idea is described in the\n              paper: \n                  Segmentation as Selective Search for Object Recognition by Koen E. A. van de Sande, et al.\n              Note that this function deviates from what is described in the paper slightly. \n              See the code for details.\n            - The basic segmentation is performed kvals.size() times, each time with the k\n              parameter (see segment_image() and the Felzenszwalb paper for details on k)\n              set to a different value from kvals.   \n            - When doing the basic segmentations prior to any box merging, we discard all\n              rectangles that have an area < min_size.  Therefore, all outputs and\n              subsequent merged rectangles are built out of rectangles that contain at\n              least min_size pixels.  Note that setting min_size to a smaller value than\n              you might otherwise be interested in using can be useful since it allows a\n              larger number of possible merged boxes to be created.\n            - There are max_merging_iterations rounds of neighboring blob merging.\n              Therefore, this parameter has some effect on the number of output rectangles\n              you get, with larger values of the parameter giving more output rectangles.\n            - This function appends the output rectangles into #rects.  This means that any\n              rectangles in rects before this function was called will still be in there\n              after it terminates.  Note further that #rects will not contain any duplicate\n              rectangles.  That is, for all valid i and j where i != j it will be true\n              that:\n                - #rects[i] != rects[j]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename alloc\n        >\n    void remove_duplicates (\n        std::vector<rectangle,alloc>& rects\n    );\n    /*!\n        ensures\n            - This function finds any duplicate rectangles in rects and removes the extra\n              instances.  This way, the result is that rects contains only unique rectangle\n              instances.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEGMENT_ImAGE_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/spatial_filtering.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SPATIAL_FILTERINg_H_\n#define DLIB_SPATIAL_FILTERINg_H_\n\n#include \"../pixel.h\"\n#include \"spatial_filtering_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include \"../array2d.h\"\n#include \"../matrix.h\"\n#include \"../geometry/border_enumerator.h\"\n#include \"../simd.h\"\n#include <limits>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename in_image_type,\n            typename out_image_type,\n            typename EXP,\n            typename T\n            >\n        rectangle grayscale_spatially_filter_image (\n            const in_image_type& in_img_,\n            out_image_type& out_img_,\n            const matrix_exp<EXP>& filter_,\n            T scale,\n            bool use_abs,\n            bool add_to\n        )\n        {\n            const_temp_matrix<EXP> filter(filter_);\n            COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false );\n            COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false );\n\n            DLIB_ASSERT(scale != 0 && filter.size() != 0,\n                \"\\trectangle spatially_filter_image()\"\n                << \"\\n\\t You can't give a scale of zero or an empty filter.\"\n                << \"\\n\\t scale: \"<< scale\n                << \"\\n\\t filter.nr(): \"<< filter.nr()\n                << \"\\n\\t filter.nc(): \"<< filter.nc()\n            );\n            DLIB_ASSERT(is_same_object(in_img_, out_img_) == false,\n                \"\\trectangle spatially_filter_image()\"\n                << \"\\n\\tYou must give two different image objects\"\n            );\n\n\n            const_image_view<in_image_type> in_img(in_img_);\n            image_view<out_image_type> out_img(out_img_);\n\n            // if there isn't any input image then don't do anything\n            if (in_img.size() == 0)\n            {\n                out_img.clear();\n                return rectangle();\n            }\n\n            out_img.set_size(in_img.nr(),in_img.nc());\n\n\n            // figure out the range that we should apply the filter to\n            const long first_row = filter.nr()/2;\n            const long first_col = filter.nc()/2;\n            const long last_row = in_img.nr() - ((filter.nr()-1)/2);\n            const long last_col = in_img.nc() - ((filter.nc()-1)/2);\n\n            const rectangle non_border = rectangle(first_col, first_row, last_col-1, last_row-1);\n            if (!add_to)\n                zero_border_pixels(out_img_, non_border); \n\n            // apply the filter to the image\n            for (long r = first_row; r < last_row; ++r)\n            {\n                for (long c = first_col; c < last_col; ++c)\n                {\n                    typedef typename EXP::type ptype;\n                    ptype p;\n                    ptype temp = 0;\n                    for (long m = 0; m < filter.nr(); ++m)\n                    {\n                        for (long n = 0; n < filter.nc(); ++n)\n                        {\n                            // pull out the current pixel and put it into p\n                            p = get_pixel_intensity(in_img[r-first_row+m][c-first_col+n]);\n                            temp += p*filter(m,n);\n                        }\n                    }\n\n                    temp /= scale;\n\n                    if (use_abs && temp < 0)\n                    {\n                        temp = -temp;\n                    }\n\n                    // save this pixel to the output image\n                    if (add_to == false)\n                    {\n                        assign_pixel(out_img[r][c], temp);\n                    }\n                    else\n                    {\n                        assign_pixel(out_img[r][c], temp + out_img[r][c]);\n                    }\n                }\n            }\n\n            return non_border;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename in_image_type,\n            typename out_image_type,\n            typename EXP\n            >\n        rectangle float_spatially_filter_image (\n            const in_image_type& in_img_,\n            out_image_type& out_img_,\n            const matrix_exp<EXP>& filter_,\n            bool add_to\n        )\n        {\n\n            const_temp_matrix<EXP> filter(filter_);\n            DLIB_ASSERT(filter.size() != 0,\n                \"\\trectangle spatially_filter_image()\"\n                << \"\\n\\t You can't give an empty filter.\"\n                << \"\\n\\t filter.nr(): \"<< filter.nr()\n                << \"\\n\\t filter.nc(): \"<< filter.nc()\n            );\n            DLIB_ASSERT(is_same_object(in_img_, out_img_) == false,\n                \"\\trectangle spatially_filter_image()\"\n                << \"\\n\\tYou must give two different image objects\"\n            );\n\n\n            const_image_view<in_image_type> in_img(in_img_);\n            image_view<out_image_type> out_img(out_img_);\n\n            // if there isn't any input image then don't do anything\n            if (in_img.size() == 0)\n            {\n                out_img.clear();\n                return rectangle();\n            }\n\n            out_img.set_size(in_img.nr(),in_img.nc());\n\n\n            // figure out the range that we should apply the filter to\n            const long first_row = filter.nr()/2;\n            const long first_col = filter.nc()/2;\n            const long last_row = in_img.nr() - ((filter.nr()-1)/2);\n            const long last_col = in_img.nc() - ((filter.nc()-1)/2);\n\n            const rectangle non_border = rectangle(first_col, first_row, last_col-1, last_row-1);\n            if (!add_to)\n                zero_border_pixels(out_img_, non_border); \n\n            // apply the filter to the image\n            for (long r = first_row; r < last_row; ++r)\n            {\n                long c = first_col;\n                for (; c < last_col-7; c+=8)\n                {\n                    simd8f p,p2,p3;\n                    simd8f temp = 0, temp2=0, temp3=0;\n                    for (long m = 0; m < filter.nr(); ++m)\n                    {\n                        long n = 0;\n                        for (; n < filter.nc()-2; n+=3)\n                        {\n                            // pull out the current pixel and put it into p\n                            p.load(&in_img[r-first_row+m][c-first_col+n]);\n                            p2.load(&in_img[r-first_row+m][c-first_col+n+1]);\n                            p3.load(&in_img[r-first_row+m][c-first_col+n+2]);\n                            temp += p*filter(m,n);\n                            temp2 += p2*filter(m,n+1);\n                            temp3 += p3*filter(m,n+2);\n                        }\n                        for (; n < filter.nc(); ++n)\n                        {\n                            // pull out the current pixel and put it into p\n                            p.load(&in_img[r-first_row+m][c-first_col+n]);\n                            temp += p*filter(m,n);\n                        }\n                    }\n                    temp += temp2+temp3;\n\n                    // save this pixel to the output image\n                    if (add_to == false)\n                    {\n                        temp.store(&out_img[r][c]);\n                    }\n                    else\n                    {\n                        p.load(&out_img[r][c]);\n                        temp += p;\n                        temp.store(&out_img[r][c]);\n                    }\n                }\n                for (; c < last_col; ++c)\n                {\n                    float p;\n                    float temp = 0;\n                    for (long m = 0; m < filter.nr(); ++m)\n                    {\n                        for (long n = 0; n < filter.nc(); ++n)\n                        {\n                            // pull out the current pixel and put it into p\n                            p = in_img[r-first_row+m][c-first_col+n];\n                            temp += p*filter(m,n);\n                        }\n                    }\n\n                    // save this pixel to the output image\n                    if (add_to == false)\n                    {\n                        out_img[r][c] = temp;\n                    }\n                    else\n                    {\n                        out_img[r][c] += temp;\n                    }\n                }\n            }\n\n            return non_border;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP\n        >\n    struct is_float_filtering2\n    {\n        const static bool value = is_same_type<typename image_traits<in_image_type>::pixel_type,float>::value &&\n                                  is_same_type<typename image_traits<out_image_type>::pixel_type,float>::value &&\n                                  is_same_type<typename EXP::type,float>::value;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP,\n        typename T\n        >\n    typename enable_if_c<pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale && \n                         is_float_filtering2<in_image_type,out_image_type,EXP>::value,rectangle>::type \n    spatially_filter_image (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP>& filter,\n        T scale,\n        bool use_abs = false,\n        bool add_to = false\n    )\n    {\n        if (use_abs == false)\n        {\n            if (scale == 1)\n                return impl::float_spatially_filter_image(in_img, out_img, filter, add_to);\n            else\n                return impl::float_spatially_filter_image(in_img, out_img, filter/scale, add_to);\n        }\n        else\n        {\n            return impl::grayscale_spatially_filter_image(in_img, out_img, filter, scale, true, add_to);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP,\n        typename T\n        >\n    typename enable_if_c<pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale && \n                         !is_float_filtering2<in_image_type,out_image_type,EXP>::value,rectangle>::type \n    spatially_filter_image (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP>& filter,\n        T scale,\n        bool use_abs = false,\n        bool add_to = false\n    )\n    {\n        return impl::grayscale_spatially_filter_image(in_img,out_img,filter,scale,use_abs,add_to);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP,\n        typename T\n        >\n    typename disable_if_c<pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale,rectangle>::type \n    spatially_filter_image (\n        const in_image_type& in_img_,\n        out_image_type& out_img_,\n        const matrix_exp<EXP>& filter_,\n        T scale\n    )\n    {\n        const_temp_matrix<EXP> filter(filter_);\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false );\n\n        DLIB_ASSERT(scale != 0 && filter.size() != 0,\n            \"\\trectangle spatially_filter_image()\"\n            << \"\\n\\t You can't give a scale of zero or an empty filter.\"\n            << \"\\n\\t scale: \"<< scale\n            << \"\\n\\t filter.nr(): \"<< filter.nr()\n            << \"\\n\\t filter.nc(): \"<< filter.nc()\n            );\n        DLIB_ASSERT(is_same_object(in_img_, out_img_) == false,\n            \"\\trectangle spatially_filter_image()\"\n            << \"\\n\\tYou must give two different image objects\"\n            );\n\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return rectangle();\n        }\n\n        out_img.set_size(in_img.nr(),in_img.nc());\n\n\n        // figure out the range that we should apply the filter to\n        const long first_row = filter.nr()/2;\n        const long first_col = filter.nc()/2;\n        const long last_row = in_img.nr() - ((filter.nr()-1)/2);\n        const long last_col = in_img.nc() - ((filter.nc()-1)/2);\n\n        const rectangle non_border = rectangle(first_col, first_row, last_col-1, last_row-1);\n        zero_border_pixels(out_img, non_border); \n\n        // apply the filter to the image\n        for (long r = first_row; r < last_row; ++r)\n        {\n            for (long c = first_col; c < last_col; ++c)\n            {\n                typedef typename image_traits<in_image_type>::pixel_type pixel_type;\n                typedef matrix<typename EXP::type,pixel_traits<pixel_type>::num,1> ptype;\n                ptype p;\n                ptype temp;\n                temp = 0;\n                for (long m = 0; m < filter.nr(); ++m)\n                {\n                    for (long n = 0; n < filter.nc(); ++n)\n                    {\n                        // pull out the current pixel and put it into p\n                        p = pixel_to_vector<typename EXP::type>(in_img[r-first_row+m][c-first_col+n]);\n                        temp += p*filter(m,n);\n                    }\n                }\n\n                temp /= scale;\n\n                pixel_type pp;\n                vector_to_pixel(pp, temp);\n                assign_pixel(out_img[r][c], pp);\n            }\n        }\n\n        return non_border;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP\n        >\n    rectangle spatially_filter_image (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP>& filter\n    )\n    {\n        return spatially_filter_image(in_img,out_img,filter,1);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename in_image_type,\n            typename out_image_type,\n            typename EXP1,\n            typename EXP2,\n            typename T\n            >\n        rectangle grayscale_spatially_filter_image_separable (\n            const in_image_type& in_img_,\n            out_image_type& out_img_,\n            const matrix_exp<EXP1>& _row_filter,\n            const matrix_exp<EXP2>& _col_filter,\n            T scale,\n            bool use_abs,\n            bool add_to \n        )\n        {\n            const_temp_matrix<EXP1> row_filter(_row_filter);\n            const_temp_matrix<EXP2> col_filter(_col_filter);\n            COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false );\n            COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false );\n\n            DLIB_ASSERT(scale != 0 && row_filter.size() != 0 && col_filter.size() != 0 &&\n                is_vector(row_filter) &&\n                is_vector(col_filter),\n                \"\\trectangle spatially_filter_image_separable()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n                << \"\\n\\t scale: \"<< scale\n                << \"\\n\\t row_filter.size(): \"<< row_filter.size()\n                << \"\\n\\t col_filter.size(): \"<< col_filter.size()\n                << \"\\n\\t is_vector(row_filter): \"<< is_vector(row_filter)\n                << \"\\n\\t is_vector(col_filter): \"<< is_vector(col_filter)\n            );\n            DLIB_ASSERT(is_same_object(in_img_, out_img_) == false,\n                \"\\trectangle spatially_filter_image_separable()\"\n                << \"\\n\\tYou must give two different image objects\"\n            );\n\n\n            const_image_view<in_image_type> in_img(in_img_);\n            image_view<out_image_type> out_img(out_img_);\n\n            // if there isn't any input image then don't do anything\n            if (in_img.size() == 0)\n            {\n                out_img.clear();\n                return rectangle();\n            }\n\n            out_img.set_size(in_img.nr(),in_img.nc());\n\n\n            // figure out the range that we should apply the filter to\n            const long first_row = col_filter.size()/2;\n            const long first_col = row_filter.size()/2;\n            const long last_row = in_img.nr() - ((col_filter.size()-1)/2);\n            const long last_col = in_img.nc() - ((row_filter.size()-1)/2);\n\n            const rectangle non_border = rectangle(first_col, first_row, last_col-1, last_row-1);\n            if (!add_to)\n                zero_border_pixels(out_img, non_border); \n\n            typedef typename EXP1::type ptype;\n\n            array2d<ptype> temp_img;\n            temp_img.set_size(in_img.nr(), in_img.nc());\n\n            // apply the row filter\n            for (long r = 0; r < in_img.nr(); ++r)\n            {\n                for (long c = first_col; c < last_col; ++c)\n                {\n                    ptype p;\n                    ptype temp = 0;\n                    for (long n = 0; n < row_filter.size(); ++n)\n                    {\n                        // pull out the current pixel and put it into p\n                        p = get_pixel_intensity(in_img[r][c-first_col+n]);\n                        temp += p*row_filter(n);\n                    }\n                    temp_img[r][c] = temp;\n                }\n            }\n\n            // apply the column filter \n            for (long r = first_row; r < last_row; ++r)\n            {\n                for (long c = first_col; c < last_col; ++c)\n                {\n                    ptype temp = 0;\n                    for (long m = 0; m < col_filter.size(); ++m)\n                    {\n                        temp += temp_img[r-first_row+m][c]*col_filter(m);\n                    }\n\n                    temp /= scale;\n\n                    if (use_abs && temp < 0)\n                    {\n                        temp = -temp;\n                    }\n\n                    // save this pixel to the output image\n                    if (add_to == false)\n                    {\n                        assign_pixel(out_img[r][c], temp);\n                    }\n                    else\n                    {\n                        assign_pixel(out_img[r][c], temp + out_img[r][c]);\n                    }\n                }\n            }\n            return non_border;\n        }\n\n    } // namespace impl\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2\n        >\n    struct is_float_filtering\n    {\n        const static bool value = is_same_type<typename image_traits<in_image_type>::pixel_type,float>::value &&\n                                  is_same_type<typename image_traits<out_image_type>::pixel_type,float>::value &&\n                                  is_same_type<typename EXP1::type,float>::value &&\n                                  is_same_type<typename EXP2::type,float>::value;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    // This overload is optimized to use SIMD instructions when filtering float images with\n    // float filters.\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2\n        >\n    rectangle float_spatially_filter_image_separable (\n        const in_image_type& in_img_,\n        out_image_type& out_img_,\n        const matrix_exp<EXP1>& _row_filter,\n        const matrix_exp<EXP2>& _col_filter,\n        out_image_type& scratch_,\n        bool add_to = false\n    )\n    {\n        // You can only use this function with images and filters containing float\n        // variables.\n        COMPILE_TIME_ASSERT((is_float_filtering<in_image_type,out_image_type,EXP1,EXP2>::value == true));\n\n\n        const_temp_matrix<EXP1> row_filter(_row_filter);\n        const_temp_matrix<EXP2> col_filter(_col_filter);\n        DLIB_ASSERT(row_filter.size() != 0 && col_filter.size() != 0 &&\n            is_vector(row_filter) &&\n            is_vector(col_filter),\n            \"\\trectangle float_spatially_filter_image_separable()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t row_filter.size(): \"<< row_filter.size()\n            << \"\\n\\t col_filter.size(): \"<< col_filter.size()\n            << \"\\n\\t is_vector(row_filter): \"<< is_vector(row_filter)\n            << \"\\n\\t is_vector(col_filter): \"<< is_vector(col_filter)\n        );\n        DLIB_ASSERT(is_same_object(in_img_, out_img_) == false,\n            \"\\trectangle float_spatially_filter_image_separable()\"\n            << \"\\n\\tYou must give two different image objects\"\n        );\n\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return rectangle();\n        }\n\n        out_img.set_size(in_img.nr(),in_img.nc());\n\n        // figure out the range that we should apply the filter to\n        const long first_row = col_filter.size()/2;\n        const long first_col = row_filter.size()/2;\n        const long last_row = in_img.nr() - ((col_filter.size()-1)/2);\n        const long last_col = in_img.nc() - ((row_filter.size()-1)/2);\n\n        const rectangle non_border = rectangle(first_col, first_row, last_col-1, last_row-1);\n        if (!add_to)\n            zero_border_pixels(out_img, non_border); \n\n        image_view<out_image_type> scratch(scratch_);\n        scratch.set_size(in_img.nr(), in_img.nc());\n\n        // apply the row filter\n        for (long r = 0; r < in_img.nr(); ++r)\n        {\n            long c = first_col;\n            for (; c < last_col-7; c+=8)\n            {\n                simd8f p,p2,p3, temp = 0, temp2=0, temp3=0;\n                long n = 0;\n                for (; n < row_filter.size()-2; n+=3)\n                {\n                    // pull out the current pixel and put it into p\n                    p.load(&in_img[r][c-first_col+n]);\n                    p2.load(&in_img[r][c-first_col+n+1]);\n                    p3.load(&in_img[r][c-first_col+n+2]);\n                    temp += p*row_filter(n);\n                    temp2 += p2*row_filter(n+1);\n                    temp3 += p3*row_filter(n+2);\n                }\n                for (; n < row_filter.size(); ++n)\n                {\n                    // pull out the current pixel and put it into p\n                    p.load(&in_img[r][c-first_col+n]);\n                    temp += p*row_filter(n);\n                }\n                temp += temp2 + temp3;\n                temp.store(&scratch[r][c]);\n            }\n            for (; c < last_col; ++c)\n            {\n                float p;\n                float temp = 0;\n                for (long n = 0; n < row_filter.size(); ++n)\n                {\n                    // pull out the current pixel and put it into p\n                    p = in_img[r][c-first_col+n];\n                    temp += p*row_filter(n);\n                }\n                scratch[r][c] = temp;\n            }\n        }\n\n        // apply the column filter \n        for (long r = first_row; r < last_row; ++r)\n        {\n            long c = first_col;\n            for (; c < last_col-7; c+=8)\n            {\n                simd8f p, p2, p3, temp = 0, temp2 = 0, temp3 = 0;\n                long m = 0;\n                for (; m < col_filter.size()-2; m+=3)\n                {\n                    p.load(&scratch[r-first_row+m][c]);\n                    p2.load(&scratch[r-first_row+m+1][c]);\n                    p3.load(&scratch[r-first_row+m+2][c]);\n                    temp += p*col_filter(m);\n                    temp2 += p2*col_filter(m+1);\n                    temp3 += p3*col_filter(m+2);\n                }\n                for (; m < col_filter.size(); ++m)\n                {\n                    p.load(&scratch[r-first_row+m][c]);\n                    temp += p*col_filter(m);\n                }\n                temp += temp2+temp3;\n\n                // save this pixel to the output image\n                if (add_to == false)\n                {\n                    temp.store(&out_img[r][c]);\n                }\n                else\n                {\n                    p.load(&out_img[r][c]);\n                    temp += p;\n                    temp.store(&out_img[r][c]);\n                }\n            }\n            for (; c < last_col; ++c)\n            {\n                float temp = 0;\n                for (long m = 0; m < col_filter.size(); ++m)\n                {\n                    temp += scratch[r-first_row+m][c]*col_filter(m);\n                }\n\n                // save this pixel to the output image\n                if (add_to == false)\n                {\n                    out_img[r][c] = temp;\n                }\n                else\n                {\n                    out_img[r][c] += temp;\n                }\n            }\n        }\n        return non_border;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2,\n        typename T\n        >\n    typename enable_if_c<pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale && \n                         is_float_filtering<in_image_type,out_image_type,EXP1,EXP2>::value,rectangle>::type \n    spatially_filter_image_separable (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP1>& row_filter,\n        const matrix_exp<EXP2>& col_filter,\n        T scale,\n        bool use_abs = false,\n        bool add_to = false\n    )\n    {\n        if (use_abs == false)\n        {\n            out_image_type scratch;\n            if (scale == 1)\n                return float_spatially_filter_image_separable(in_img, out_img, row_filter, col_filter, scratch, add_to);\n            else\n                return float_spatially_filter_image_separable(in_img, out_img, row_filter/scale, col_filter, scratch,  add_to);\n        }\n        else\n        {\n            return impl::grayscale_spatially_filter_image_separable(in_img, out_img, row_filter, col_filter, scale, true, add_to);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2,\n        typename T\n        >\n    typename enable_if_c<pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale && \n                         !is_float_filtering<in_image_type,out_image_type,EXP1,EXP2>::value,rectangle>::type \n    spatially_filter_image_separable (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP1>& row_filter,\n        const matrix_exp<EXP2>& col_filter,\n        T scale,\n        bool use_abs = false,\n        bool add_to = false\n    )\n    {\n        return impl::grayscale_spatially_filter_image_separable(in_img,out_img, row_filter, col_filter, scale, use_abs, add_to);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2,\n        typename T\n        >\n    typename disable_if_c<pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale,rectangle>::type \n    spatially_filter_image_separable (\n        const in_image_type& in_img_,\n        out_image_type& out_img_,\n        const matrix_exp<EXP1>& _row_filter,\n        const matrix_exp<EXP2>& _col_filter,\n        T scale\n    )\n    {\n        const_temp_matrix<EXP1> row_filter(_row_filter);\n        const_temp_matrix<EXP2> col_filter(_col_filter);\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false );\n\n        DLIB_ASSERT(scale != 0 && row_filter.size() != 0 && col_filter.size() != 0 &&\n                    is_vector(row_filter) &&\n                    is_vector(col_filter),\n            \"\\trectangle spatially_filter_image_separable()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t scale: \"<< scale\n            << \"\\n\\t row_filter.size(): \"<< row_filter.size()\n            << \"\\n\\t col_filter.size(): \"<< col_filter.size()\n            << \"\\n\\t is_vector(row_filter): \"<< is_vector(row_filter)\n            << \"\\n\\t is_vector(col_filter): \"<< is_vector(col_filter)\n            );\n        DLIB_ASSERT(is_same_object(in_img_, out_img_) == false,\n            \"\\trectangle spatially_filter_image_separable()\"\n            << \"\\n\\tYou must give two different image objects\"\n            );\n\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return rectangle();\n        }\n\n        out_img.set_size(in_img.nr(),in_img.nc());\n\n\n        // figure out the range that we should apply the filter to\n        const long first_row = col_filter.size()/2;\n        const long first_col = row_filter.size()/2;\n        const long last_row = in_img.nr() - ((col_filter.size()-1)/2);\n        const long last_col = in_img.nc() - ((row_filter.size()-1)/2);\n\n        const rectangle non_border = rectangle(first_col, first_row, last_col-1, last_row-1);\n        zero_border_pixels(out_img, non_border); \n\n        typedef typename image_traits<in_image_type>::pixel_type pixel_type;\n        typedef matrix<typename EXP1::type,pixel_traits<pixel_type>::num,1> ptype;\n\n        array2d<ptype> temp_img;\n        temp_img.set_size(in_img.nr(), in_img.nc());\n\n        // apply the row filter\n        for (long r = 0; r < in_img.nr(); ++r)\n        {\n            for (long c = first_col; c < last_col; ++c)\n            {\n                ptype p;\n                ptype temp;\n                temp = 0;\n                for (long n = 0; n < row_filter.size(); ++n)\n                {\n                    // pull out the current pixel and put it into p\n                    p = pixel_to_vector<typename EXP1::type>(in_img[r][c-first_col+n]);\n                    temp += p*row_filter(n);\n                }\n                temp_img[r][c] = temp;\n            }\n        }\n\n        // apply the column filter \n        for (long r = first_row; r < last_row; ++r)\n        {\n            for (long c = first_col; c < last_col; ++c)\n            {\n                ptype temp;\n                temp = 0;\n                for (long m = 0; m < col_filter.size(); ++m)\n                {\n                    temp += temp_img[r-first_row+m][c]*col_filter(m);\n                }\n\n                temp /= scale;\n\n\n                // save this pixel to the output image\n                pixel_type p;\n                vector_to_pixel(p, temp);\n                assign_pixel(out_img[r][c], p);\n            }\n        }\n        return non_border;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2\n        >\n    rectangle spatially_filter_image_separable (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP1>& row_filter,\n        const matrix_exp<EXP2>& col_filter\n    )\n    {\n        return spatially_filter_image_separable(in_img,out_img,row_filter,col_filter,1);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2,\n        typename T\n        >\n    rectangle spatially_filter_image_separable_down (\n        const unsigned long downsample,\n        const in_image_type& in_img_,\n        out_image_type& out_img_,\n        const matrix_exp<EXP1>& row_filter,\n        const matrix_exp<EXP2>& col_filter,\n        T scale,\n        bool use_abs = false,\n        bool add_to = false\n    )\n    {\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale == true );\n\n        DLIB_ASSERT(downsample > 0 &&\n                    scale != 0 &&\n                    row_filter.size()%2 == 1 &&\n                    col_filter.size()%2 == 1 &&\n                    is_vector(row_filter) &&\n                    is_vector(col_filter),\n            \"\\trectangle spatially_filter_image_separable_down()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t downsample: \"<< downsample\n            << \"\\n\\t scale: \"<< scale\n            << \"\\n\\t row_filter.size(): \"<< row_filter.size()\n            << \"\\n\\t col_filter.size(): \"<< col_filter.size()\n            << \"\\n\\t is_vector(row_filter): \"<< is_vector(row_filter)\n            << \"\\n\\t is_vector(col_filter): \"<< is_vector(col_filter)\n            );\n        DLIB_ASSERT(is_same_object(in_img_, out_img_) == false,\n            \"\\trectangle spatially_filter_image_separable_down()\"\n            << \"\\n\\tYou must give two different image objects\"\n            );\n\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return rectangle();\n        }\n\n        out_img.set_size((long)(std::ceil((double)in_img.nr()/downsample)),\n                         (long)(std::ceil((double)in_img.nc()/downsample)));\n\n        const double col_border = std::floor(col_filter.size()/2.0);\n        const double row_border = std::floor(row_filter.size()/2.0);\n\n        // figure out the range that we should apply the filter to\n        const long first_row = (long)std::ceil(col_border/downsample);\n        const long first_col = (long)std::ceil(row_border/downsample);\n        const long last_row  = (long)std::ceil((in_img.nr() - col_border)/downsample) - 1;\n        const long last_col  = (long)std::ceil((in_img.nc() - row_border)/downsample) - 1;\n\n        // zero border pixels\n        const rectangle non_border = rectangle(first_col, first_row, last_col, last_row);\n        zero_border_pixels(out_img,non_border);\n\n        typedef typename EXP1::type ptype;\n\n        array2d<ptype> temp_img;\n        temp_img.set_size(in_img.nr(), out_img.nc());\n\n        // apply the row filter\n        for (long r = 0; r < temp_img.nr(); ++r)\n        {\n            for (long c = non_border.left(); c <= non_border.right(); ++c)\n            {\n                ptype p;\n                ptype temp = 0;\n                for (long n = 0; n < row_filter.size(); ++n)\n                {\n                    // pull out the current pixel and put it into p\n                    p = get_pixel_intensity(in_img[r][c*downsample-row_filter.size()/2+n]);\n                    temp += p*row_filter(n);\n                }\n                temp_img[r][c] = temp;\n            }\n        }\n\n        // apply the column filter \n        for (long r = non_border.top(); r <= non_border.bottom(); ++r)\n        {\n            for (long c = non_border.left(); c <= non_border.right(); ++c)\n            {\n                ptype temp = 0;\n                for (long m = 0; m < col_filter.size(); ++m)\n                {\n                    temp += temp_img[r*downsample-col_filter.size()/2+m][c]*col_filter(m);\n                }\n\n                temp /= scale;\n\n                if (use_abs && temp < 0)\n                {\n                    temp = -temp;\n                }\n\n                // save this pixel to the output image\n                if (add_to == false)\n                {\n                    assign_pixel(out_img[r][c], temp);\n                }\n                else\n                {\n                    assign_pixel(out_img[r][c], temp + out_img[r][c]);\n                }\n            }\n        }\n\n        return non_border;\n    }\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2\n        >\n    rectangle spatially_filter_image_separable_down (\n        const unsigned long downsample,\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP1>& row_filter,\n        const matrix_exp<EXP2>& col_filter\n    )\n    {\n        return spatially_filter_image_separable_down(downsample,in_img,out_img,row_filter,col_filter,1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long NR,\n        long NC,\n        typename T,\n        typename U,\n        typename in_image_type\n        >\n    inline void separable_3x3_filter_block_grayscale (\n        T (&block)[NR][NC],\n        const in_image_type& img_,\n        const long& r,\n        const long& c,\n        const U& fe1, // separable filter end\n        const U& fm,  // separable filter middle \n        const U& fe2 // separable filter end 2\n    ) \n    {\n        const_image_view<in_image_type> img(img_);\n        // make sure requires clause is not broken\n        DLIB_ASSERT(shrink_rect(get_rect(img),1).contains(c,r) &&\n                    shrink_rect(get_rect(img),1).contains(c+NC-1,r+NR-1),\n            \"\\t void separable_3x3_filter_block_grayscale()\"\n            << \"\\n\\t The sub-window doesn't fit inside the given image.\"\n            << \"\\n\\t get_rect(img):       \" << get_rect(img) \n            << \"\\n\\t (c,r):               \" << point(c,r) \n            << \"\\n\\t (c+NC-1,r+NR-1): \" << point(c+NC-1,r+NR-1) \n            );\n\n\n        T row_filt[NR+2][NC];\n        for (long rr = 0; rr < NR+2; ++rr)\n        {\n            for (long cc = 0; cc < NC; ++cc)\n            {\n                row_filt[rr][cc] = get_pixel_intensity(img[r+rr-1][c+cc-1])*fe1 + \n                                   get_pixel_intensity(img[r+rr-1][c+cc])*fm + \n                                   get_pixel_intensity(img[r+rr-1][c+cc+1])*fe2;\n            }\n        }\n\n        for (long rr = 0; rr < NR; ++rr)\n        {\n            for (long cc = 0; cc < NC; ++cc)\n            {\n                block[rr][cc] = (row_filt[rr][cc]*fe1 + \n                                row_filt[rr+1][cc]*fm + \n                                row_filt[rr+2][cc]*fe2);\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long NR,\n        long NC,\n        typename T,\n        typename U,\n        typename in_image_type\n        >\n    inline void separable_3x3_filter_block_rgb (\n        T (&block)[NR][NC],\n        const in_image_type& img_,\n        const long& r,\n        const long& c,\n        const U& fe1, // separable filter end\n        const U& fm,  // separable filter middle \n        const U& fe2  // separable filter end 2\n    ) \n    {\n        const_image_view<in_image_type> img(img_);\n        // make sure requires clause is not broken\n        DLIB_ASSERT(shrink_rect(get_rect(img),1).contains(c,r) &&\n                    shrink_rect(get_rect(img),1).contains(c+NC-1,r+NR-1),\n            \"\\t void separable_3x3_filter_block_rgb()\"\n            << \"\\n\\t The sub-window doesn't fit inside the given image.\"\n            << \"\\n\\t get_rect(img):       \" << get_rect(img) \n            << \"\\n\\t (c,r):               \" << point(c,r) \n            << \"\\n\\t (c+NC-1,r+NR-1): \" << point(c+NC-1,r+NR-1) \n            );\n\n        T row_filt[NR+2][NC];\n        for (long rr = 0; rr < NR+2; ++rr)\n        {\n            for (long cc = 0; cc < NC; ++cc)\n            {\n                row_filt[rr][cc].red   = img[r+rr-1][c+cc-1].red*fe1   + img[r+rr-1][c+cc].red*fm   + img[r+rr-1][c+cc+1].red*fe2;\n                row_filt[rr][cc].green = img[r+rr-1][c+cc-1].green*fe1 + img[r+rr-1][c+cc].green*fm + img[r+rr-1][c+cc+1].green*fe2;\n                row_filt[rr][cc].blue  = img[r+rr-1][c+cc-1].blue*fe1  + img[r+rr-1][c+cc].blue*fm  + img[r+rr-1][c+cc+1].blue*fe2;\n            }\n        }\n\n        for (long rr = 0; rr < NR; ++rr)\n        {\n            for (long cc = 0; cc < NC; ++cc)\n            {\n                block[rr][cc].red   = row_filt[rr][cc].red*fe1   + row_filt[rr+1][cc].red*fm   + row_filt[rr+2][cc].red*fe2;\n                block[rr][cc].green = row_filt[rr][cc].green*fe1 + row_filt[rr+1][cc].green*fm + row_filt[rr+2][cc].green*fe2;\n                block[rr][cc].blue  = row_filt[rr][cc].blue*fe1  + row_filt[rr+1][cc].blue*fm  + row_filt[rr+2][cc].blue*fe2;\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double gaussian (\n        double x, \n        double sigma\n    )\n    {\n        DLIB_ASSERT(sigma > 0,\n            \"\\tdouble gaussian(x)\"\n            << \"\\n\\t sigma must be bigger than 0\"\n            << \"\\n\\t sigma: \" << sigma \n        );\n        const double sqrt_2_pi = 2.5066282746310002416123552393401041626930;\n        return 1.0/(sigma*sqrt_2_pi) * std::exp( -(x*x)/(2*sigma*sigma));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    matrix<T,0,1> create_gaussian_filter (\n        double sigma,\n        int max_size \n    )\n    {\n        DLIB_ASSERT(sigma > 0 && max_size > 0 && (max_size%2)==1,\n            \"\\t matrix<T,0,1> create_gaussian_filter()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t sigma: \" << sigma \n            << \"\\n\\t max_size:  \" << max_size \n        );\n\n        // Adjust the size so that the ratio of the gaussian values isn't huge.  \n        // This only matters when T is an integer type.  However, we do it for\n        // all types so that the behavior of this function is always relatively\n        // the same.\n        while (gaussian(0,sigma)/gaussian(max_size/2,sigma) > 50)\n            --max_size;\n\n\n        matrix<double,0,1> f(max_size);\n        for (long i = 0; i < f.size(); ++i)\n        {\n            f(i) = gaussian(i-max_size/2, sigma);\n        }\n\n        if (is_float_type<T>::value == false)\n        {\n            f /= f(0);\n            return matrix_cast<T>(round(f));\n        }\n        else\n        {\n            return matrix_cast<T>(f);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void gaussian_blur (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        double sigma = 1,\n        int max_size = 1001\n    )\n    {\n        DLIB_ASSERT(sigma > 0 && max_size > 0 && (max_size%2)==1 &&\n                    is_same_object(in_img, out_img) == false,\n            \"\\t void gaussian_blur()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t sigma: \" << sigma \n            << \"\\n\\t max_size:  \" << max_size \n            << \"\\n\\t is_same_object(in_img,out_img): \" << is_same_object(in_img,out_img) \n        );\n\n        typedef typename pixel_traits<typename image_traits<out_image_type>::pixel_type>::basic_pixel_type type;\n        typedef typename promote<type>::type ptype;\n\n        const matrix<ptype,0,1>& filt = create_gaussian_filter<ptype>(sigma, max_size);\n\n        ptype scale = sum(filt);\n        scale = scale*scale;\n\n        spatially_filter_image_separable(in_img, out_img, filt, filt, scale);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n    template <\n        bool add_to,\n        typename image_type1, \n        typename image_type2\n        >\n    void sum_filter (\n        const image_type1& img_,\n        image_type2& out_,\n        const rectangle& rect\n    )\n    {\n        const_image_view<image_type1> img(img_);\n        image_view<image_type2> out(out_);\n        DLIB_ASSERT(img.nr() == out.nr() &&\n                    img.nc() == out.nc() &&\n                    is_same_object(img_,out_) == false,\n            \"\\t void sum_filter()\"\n            << \"\\n\\t Invalid arguments given to this function.\"\n            << \"\\n\\t img.nr(): \" << img.nr() \n            << \"\\n\\t img.nc(): \" << img.nc() \n            << \"\\n\\t out.nr(): \" << out.nr() \n            << \"\\n\\t out.nc(): \" << out.nc() \n            << \"\\n\\t is_same_object(img_,out_): \" << is_same_object(img_,out_) \n        );\n\n        typedef typename image_traits<image_type1>::pixel_type pixel_type;\n        typedef typename promote<pixel_type>::type ptype;\n\n        std::vector<ptype> column_sum;\n        column_sum.resize(img.nc() + rect.width(),0);\n\n        const long top    = -1 + rect.top();\n        const long bottom = -1 + rect.bottom();\n        long left = rect.left()-1;\n\n        // initialize column_sum at row -1\n        for (unsigned long j = 0; j < column_sum.size(); ++j)\n        {\n            rectangle strip(left,top,left,bottom);\n            strip = strip.intersect(get_rect(img));\n            if (!strip.is_empty())\n            {\n                column_sum[j] = sum(matrix_cast<ptype>(subm(mat(img),strip)));\n            }\n\n            ++left;\n        }\n\n\n        const rectangle area = get_rect(img);\n\n        // Save width to avoid computing it over and over.\n        const long width = rect.width();\n\n\n        // Now do the bulk of the filtering work.\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            // set to sum at point(-1,r). i.e. should be equal to sum(mat(img), translate_rect(rect, point(-1,r)))\n            // We compute it's value in the next loop.\n            ptype cur_sum = 0; \n\n            // Update the first part of column_sum since we only work on the c+width part of column_sum\n            // in the main loop.\n            const long top    = r + rect.top() - 1;\n            const long bottom = r + rect.bottom();\n            for (long k = 0; k < width; ++k)\n            {\n                const long right  = k-width + rect.right();\n\n                const ptype br_corner = area.contains(right,bottom) ? img[bottom][right] : 0;\n                const ptype tr_corner = area.contains(right,top)    ? img[top][right]    : 0;\n                // update the sum in this column now that we are on the next row\n                column_sum[k] = column_sum[k] + br_corner - tr_corner;\n                cur_sum += column_sum[k];\n            }\n\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                const long top    = r + rect.top() - 1;\n                const long bottom = r + rect.bottom();\n                const long right  = c + rect.right();\n\n                const ptype br_corner = area.contains(right,bottom) ? img[bottom][right] : 0;\n                const ptype tr_corner = area.contains(right,top)    ? img[top][right]    : 0;\n\n                // update the sum in this column now that we are on the next row\n                column_sum[c+width] = column_sum[c+width] + br_corner - tr_corner;\n\n                // add in the new right side of the rect and subtract the old right side.\n                cur_sum = cur_sum + column_sum[c+width] - column_sum[c];\n\n                if (add_to)\n                    out[r][c] += static_cast<typename image_traits<image_type2>::pixel_type>(cur_sum);\n                else\n                    out[r][c] = static_cast<typename image_traits<image_type2>::pixel_type>(cur_sum);\n            }\n        }\n    }\n    }\n\n    template <\n        typename image_type1, \n        typename image_type2\n        >\n    void sum_filter (\n        const image_type1& img,\n        image_type2& out,\n        const rectangle& rect\n    )\n    {\n        impl::sum_filter<true>(img,out,rect);\n    }\n\n    template <\n        typename image_type1, \n        typename image_type2\n        >\n    void sum_filter_assign (\n        const image_type1& img,\n        image_type2& out,\n        const rectangle& rect\n    )\n    {\n        set_image_size(out, num_rows(img), num_columns(img));\n        impl::sum_filter<false>(img,out,rect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T>\n        class fast_deque\n        {\n        /*\n            This is a fast and minimal implementation of std::deque for \n            use with the max_filter.  \n\n            This object assumes that no more than max_size elements\n            will ever be pushed into it at a time.\n        */\n        public:\n\n            explicit fast_deque(unsigned long max_size)\n            {\n                // find a power of two that upper bounds max_size\n                mask = 2;\n                while (mask < max_size)\n                    mask *= 2;\n\n                clear();\n\n                data.resize(mask);\n                --mask;  // make into bit mask\n            }\n\n            void clear()\n            {\n                first = 1;\n                last = 0;\n                size = 0;\n            }\n\n            bool empty() const\n            {\n                return size == 0;\n            }\n\n            void pop_back()\n            {\n                last = (last-1)&mask;\n                --size;\n            }\n\n            void push_back(const T& item)\n            {\n                last = (last+1)&mask;\n                ++size;\n                data[last] = item;\n            }\n\n            void pop_front()\n            {\n                first = (first+1)&mask;\n                --size;\n            }\n\n            const T& front() const\n            {\n                return data[first];\n            }\n\n            const T& back() const\n            {\n                return data[last];\n            }\n\n        private:\n\n            std::vector<T> data;\n            unsigned long mask;\n            unsigned long first;\n            unsigned long last;\n            unsigned long size;\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1, \n        typename image_type2\n        >\n    void max_filter (\n        image_type1& img_,\n        image_type2& out_,\n        const long width,\n        const long height,\n        const typename image_traits<image_type1>::pixel_type& thresh\n    )\n    {\n        image_view<image_type1> img(img_);\n        image_view<image_type2> out(out_);\n        DLIB_ASSERT( width > 0 &&\n                     height > 0 &&\n                     out.nr() == img.nr() &&\n                     out.nc() == img.nc() &&\n                     is_same_object(img_,out_) == false,\n                \"\\t void max_filter()\"\n                << \"\\n\\t Invalid arguments given to this function.\"\n                << \"\\n\\t img.nr(): \" << img.nr() \n                << \"\\n\\t img.nc(): \" << img.nc() \n                << \"\\n\\t out.nr(): \" << out.nr() \n                << \"\\n\\t out.nc(): \" << out.nc() \n                << \"\\n\\t width:    \" << width \n                << \"\\n\\t height:   \" << height \n                << \"\\n\\t is_same_object(img_,out_): \" << is_same_object(img_,out_) \n                     );\n\n        typedef typename image_traits<image_type1>::pixel_type pixel_type;\n\n\n        dlib::impl::fast_deque<std::pair<long,pixel_type> > Q(std::max(width,height));\n\n        const long last_col = std::max(img.nc(), ((width-1)/2));\n        const long last_row = std::max(img.nr(), ((height-1)/2));\n\n        // run max filter along rows of img\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            Q.clear();\n            for (long c = 0; c < (width-1)/2 && c < img.nc(); ++c)\n            {\n                while (!Q.empty() && img[r][c] >= Q.back().second)\n                    Q.pop_back();\n                Q.push_back(std::make_pair(c,img[r][c]));\n            }\n\n            for (long c = (width-1)/2; c < img.nc(); ++c)\n            {\n                while (!Q.empty() && img[r][c] >= Q.back().second)\n                    Q.pop_back();\n                while (!Q.empty() && Q.front().first <= c-width)\n                    Q.pop_front();\n                Q.push_back(std::make_pair(c,img[r][c]));\n\n                img[r][c-((width-1)/2)] = Q.front().second;\n            }\n\n            for (long c = last_col; c < img.nc() + ((width-1)/2); ++c)\n            {\n                while (!Q.empty() && Q.front().first <= c-width)\n                    Q.pop_front();\n\n                img[r][c-((width-1)/2)] = Q.front().second;\n            }\n        }\n\n        // run max filter along columns of img.  Store result in out.\n        for (long cc = 0; cc < img.nc(); ++cc)\n        {\n            Q.clear();\n            for (long rr = 0; rr < (height-1)/2 && rr < img.nr(); ++rr)\n            {\n                while (!Q.empty() && img[rr][cc] >= Q.back().second)\n                    Q.pop_back();\n                Q.push_back(std::make_pair(rr,img[rr][cc]));\n            }\n\n            for (long rr = (height-1)/2; rr < img.nr(); ++rr)\n            {\n                while (!Q.empty() && img[rr][cc] >= Q.back().second)\n                    Q.pop_back();\n                while (!Q.empty() && Q.front().first <= rr-height)\n                    Q.pop_front();\n                Q.push_back(std::make_pair(rr,img[rr][cc]));\n\n                out[rr-((height-1)/2)][cc] += std::max(Q.front().second, thresh);\n            }\n\n            for (long rr = last_row; rr < img.nr() + ((height-1)/2); ++rr)\n            {\n                while (!Q.empty() && Q.front().first <= rr-height)\n                    Q.pop_front();\n\n                out[rr-((height-1)/2)][cc] += std::max(Q.front().second, thresh);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SPATIAL_FILTERINg_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/spatial_filtering_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SPATIAL_FILTERINg_ABSTRACT_\n#ifdef DLIB_SPATIAL_FILTERINg_ABSTRACT_\n\n#include \"../pixel.h\"\n#include \"../matrix.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP,\n        typename T\n        >\n    rectangle spatially_filter_image (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP>& filter,\n        T scale = 1,\n        bool use_abs = false,\n        bool add_to = false\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - in_img and out_img do not contain pixels with an alpha channel.  That is,\n              pixel_traits::has_alpha is false for the pixels in these objects.\n            - is_same_object(in_img, out_img) == false \n            - T must be some scalar type\n            - filter.size() != 0\n            - scale != 0\n            - if (in_img doesn't contain grayscale pixels) then\n                - use_abs == false && add_to == false\n                  (i.e. You can only use the use_abs and add_to options with grayscale images)\n        ensures\n            - Applies the given spatial filter to in_img and stores the result in out_img (i.e.\n              cross-correlates in_img with filter).  Also divides each resulting pixel by scale.  \n            - The intermediate filter computations will be carried out using variables of type EXP::type.\n              This is whatever scalar type is used inside the filter matrix. \n            - Pixel values are stored into out_img using the assign_pixel() function and therefore\n              any applicable color space conversion or value saturation is performed.  Note that if \n              add_to is true then the filtered output value will be added to out_img rather than \n              overwriting the original value.\n            - if (in_img doesn't contain grayscale pixels) then\n                - The filter is applied to each color channel independently.\n            - if (use_abs == true) then\n                - pixel values after filtering that are < 0 are converted to their absolute values.\n            - The filter is applied such that it's centered over the pixel it writes its\n              output into.  For centering purposes, we consider the center element of the\n              filter to be filter(filter.nr()/2,filter.nc()/2).  This means that the filter\n              that writes its output to a pixel at location point(c,r) and is W by H (width\n              by height) pixels in size operates on exactly the pixels in the rectangle\n              centered_rect(point(c,r),W,H) within in_img.\n            - Pixels close enough to the edge of in_img to not have the filter still fit \n              inside the image are always set to zero.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n            - returns a rectangle which indicates what pixels in #out_img are considered \n              non-border pixels and therefore contain output from the filter.\n            - if (use_abs == false && all images and filers contain float types) then\n                - This function will use SIMD instructions and is particularly fast.  So if\n                  you can use this form of the function it can give a decent speed boost.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2,\n        typename T\n        >\n    rectangle spatially_filter_image_separable (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP1>& row_filter,\n        const matrix_exp<EXP2>& col_filter,\n        T scale = 1,\n        bool use_abs = false,\n        bool add_to = false\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - in_img and out_img do not contain pixels with an alpha channel.  That is,\n              pixel_traits::has_alpha is false for the pixels in these objects.\n            - is_same_object(in_img, out_img) == false \n            - T must be some scalar type\n            - scale != 0\n            - row_filter.size() != 0\n            - col_filter.size() != 0\n            - is_vector(row_filter) == true\n            - is_vector(col_filter) == true\n            - if (in_img doesn't contain grayscale pixels) then\n                - use_abs == false && add_to == false\n                  (i.e. You can only use the use_abs and add_to options with grayscale images)\n        ensures\n            - Applies the given separable spatial filter to in_img and stores the result in out_img.  \n              Also divides each resulting pixel by scale.  Calling this function has the same\n              effect as calling the regular spatially_filter_image() routine with a filter,\n              FILT, defined as follows: \n                - FILT(r,c) == col_filter(r)*row_filter(c)\n            - The intermediate filter computations will be carried out using variables of type EXP1::type.\n              This is whatever scalar type is used inside the row_filter matrix. \n            - Pixel values are stored into out_img using the assign_pixel() function and therefore\n              any applicable color space conversion or value saturation is performed.  Note that if \n              add_to is true then the filtered output value will be added to out_img rather than \n              overwriting the original value.\n            - if (in_img doesn't contain grayscale pixels) then\n                - The filter is applied to each color channel independently.\n            - if (use_abs == true) then\n                - pixel values after filtering that are < 0 are converted to their absolute values\n            - The filter is applied such that it's centered over the pixel it writes its\n              output into.  For centering purposes, we consider the center element of the\n              filter to be FILT(col_filter.size()/2,row_filter.size()/2).  This means that\n              the filter that writes its output to a pixel at location point(c,r) and is W\n              by H (width by height) pixels in size operates on exactly the pixels in the\n              rectangle centered_rect(point(c,r),W,H) within in_img.\n            - Pixels close enough to the edge of in_img to not have the filter still fit \n              inside the image are always set to zero.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n            - returns a rectangle which indicates what pixels in #out_img are considered \n              non-border pixels and therefore contain output from the filter.\n            - if (use_abs == false && all images and filers contain float types) then\n                - This function will use SIMD instructions and is particularly fast.  So if\n                  you can use this form of the function it can give a decent speed boost.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2\n        >\n    rectangle float_spatially_filter_image_separable (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP1>& row_filter,\n        const matrix_exp<EXP2>& col_filter,\n        out_image_type& scratch,\n        bool add_to = false\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - in_img, out_img, row_filter, and col_filter must all contain float type elements.\n            - is_same_object(in_img, out_img) == false \n            - row_filter.size() != 0\n            - col_filter.size() != 0\n            - is_vector(row_filter) == true\n            - is_vector(col_filter) == true\n        ensures\n            - This function is identical to the above spatially_filter_image_separable()\n              function except that it can only be invoked on float images with float\n              filters.  In fact, spatially_filter_image_separable() invokes\n              float_spatially_filter_image_separable() in those cases.  So why is\n              float_spatially_filter_image_separable() in the public API?  The reason is\n              because the separable filtering routines internally allocate an image each\n              time they are called.  If you want to avoid this memory allocation then you\n              can call float_spatially_filter_image_separable() and provide the scratch\n              image as input.  This allows you to reuse the same scratch image for many\n              calls to float_spatially_filter_image_separable() and thereby avoid having it\n              allocated and freed for each call.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2,\n        typename T\n        >\n    rectangle spatially_filter_image_separable_down (\n        const unsigned long downsample,\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP1>& row_filter,\n        const matrix_exp<EXP2>& col_filter,\n        T scale = 1,\n        bool use_abs = false,\n        bool add_to = false\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - in_img and out_img do not contain pixels with an alpha channel.  That is,\n              pixel_traits::has_alpha is false for the pixels in these objects.\n            - out_img contains grayscale pixels.\n            - is_same_object(in_img, out_img) == false \n            - T must be some scalar type\n            - scale != 0\n            - is_vector(row_filter) == true\n            - is_vector(col_filter) == true\n            - row_filter.size() % 2 == 1  (i.e. must be odd)\n            - col_filter.size() % 2 == 1  (i.e. must be odd)\n            - downsample > 0\n        ensures\n            - This function is equivalent to calling \n              spatially_filter_image_separable(in_img,out_img,row_filter,col_filter,scale,use_abs,add_to)\n              and then downsampling the output image by a factor of downsample.  Therefore, \n              we will have that:\n                - #out_img.nr() == ceil((double)in_img.nr()/downsample)\n                - #out_img.nc() == ceil((double)in_img.nc()/downsample)\n                - #out_img[r][c] == filtered pixel corresponding to in_img[r*downsample][c*downsample]\n            - returns a rectangle which indicates what pixels in #out_img are considered \n              non-border pixels and therefore contain output from the filter.\n            - Note that the first row and column of non-zero padded data are the following\n                - first_row == ceil(floor(col_filter.size()/2.0)/downsample)\n                - first_col == ceil(floor(row_filter.size()/2.0)/downsample)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long NR,\n        long NC,\n        typename T,\n        typename U,\n        typename in_image_type\n        >\n    inline void separable_3x3_filter_block_grayscale (\n        T (&block)[NR][NC],\n        const in_image_type& img,\n        const long& r,\n        const long& c,\n        const U& fe1, \n        const U& fm,  \n        const U& fe2 \n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - T and U should be scalar types\n            - shrink_rect(get_rect(img),1).contains(c,r)\n            - shrink_rect(get_rect(img),1).contains(c+NC-1,r+NR-1)\n        ensures\n            - Filters the image in the sub-window of img defined by a rectangle \n              with its upper left corner at (c,r) and lower right at (c+NC-1,r+NR-1).\n            - The output of the filter is stored in #block.  Note that img will be \n              interpreted as a grayscale image.\n            - The filter used is defined by the separable filter [fe1 fm fe2].  So the\n              spatial filter is thus:\n                fe1*fe1  fe1*fm  fe2*fe1\n                fe1*fm   fm*fm   fe2*fm\n                fe1*fe2  fe2*fm  fe2*fe2\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long NR,\n        long NC,\n        typename T,\n        typename U,\n        typename in_image_type\n        >\n    inline void separable_3x3_filter_block_rgb (\n        T (&block)[NR][NC],\n        const in_image_type& img,\n        const long& r,\n        const long& c,\n        const U& fe1, \n        const U& fm, \n        const U& fe2\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - img must contain RGB pixels, that is pixel_traits::rgb == true for the pixels\n              in img.\n            - T should be a struct with .red .green and .blue members.\n            - U should be a scalar type\n            - shrink_rect(get_rect(img),1).contains(c,r)\n            - shrink_rect(get_rect(img),1).contains(c+NC-1,r+NR-1)\n        ensures\n            - Filters the image in the sub-window of img defined by a rectangle \n              with its upper left corner at (c,r) and lower right at (c+NC-1,r+NR-1).\n            - The output of the filter is stored in #block.  Note that the filter is applied\n              to each color component independently.\n            - The filter used is defined by the separable filter [fe1 fm fe2].  So the\n              spatial filter is thus:\n                fe1*fe1  fe1*fm  fe2*fe1\n                fe1*fm   fm*fm   fe2*fm\n                fe1*fe2  fe2*fm  fe2*fe2\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline double gaussian (\n        double x, \n        double sigma\n    );\n    /*!\n        requires\n            - sigma > 0\n        ensures\n            - computes and returns the value of a 1D Gaussian function with mean 0 \n              and standard deviation sigma at the given x value.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    matrix<T,0,1> create_gaussian_filter (\n        double sigma,\n        int size \n    );\n    /*!\n        requires\n            - sigma > 0\n            - size > 0 \n            - size is an odd number\n        ensures\n            - returns a separable Gaussian filter F such that:\n                - is_vector(F) == true \n                - F.size() == size \n                - F is suitable for use with the spatially_filter_image_separable() routine\n                  and its use with this function corresponds to running a Gaussian filter \n                  of sigma width over an image.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void gaussian_blur (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        double sigma = 1,\n        int max_size = 1001\n    );\n    /*!\n        requires\n            - in_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - out_image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h \n            - in_img and out_img do not contain pixels with an alpha channel.  That is,\n              pixel_traits::has_alpha is false for the pixels in these objects.\n            - is_same_object(in_img, out_img) == false \n            - sigma > 0\n            - max_size > 0\n            - max_size is an odd number\n        ensures\n            - Filters in_img with a Gaussian filter of sigma width.  The actual spatial filter will\n              be applied to pixel blocks that are at most max_size wide and max_size tall (note that\n              this function will automatically select a smaller block size as appropriate).  The \n              results are stored into #out_img.\n            - Pixel values are stored into out_img using the assign_pixel() function and therefore\n              any applicable color space conversion or value saturation is performed.\n            - if (in_img doesn't contain grayscale pixels) then\n                - The filter is applied to each color channel independently.\n            - Pixels close enough to the edge of in_img to not have the filter still fit \n              inside the image are set to zero.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1, \n        typename image_type2\n        >\n    void sum_filter (\n        const image_type1& img,\n        image_type2& out,\n        const rectangle& rect\n    );\n    /*!\n        requires\n            - out.nr() == img.nr() \n            - out.nc() == img.nc()\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h and it must contain grayscale pixels.\n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h and it must contain grayscale pixels.\n            - is_same_object(img,out) == false\n        ensures\n            - for all valid r and c:\n                - let SUM(r,c) == sum of pixels from img which are inside the rectangle \n                  translate_rect(rect, point(c,r)).\n                - #out[r][c] == out[r][c] + SUM(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1, \n        typename image_type2\n        >\n    void sum_filter_assign (\n        const image_type1& img,\n        image_type2& out,\n        const rectangle& rect\n    );\n    /*!\n        requires\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h and it must contain grayscale pixels.\n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h and it must contain grayscale pixels.\n            - is_same_object(img,out) == false\n        ensures\n            - #out.nr() == img.nr() \n            - #out.nc() == img.nc()\n            - for all valid r and c:\n                - let SUM(r,c) == sum of pixels from img which are inside the rectangle \n                  translate_rect(rect, point(c,r)).\n                - #out[r][c] == SUM(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1, \n        typename image_type2\n        >\n    void max_filter (\n        image_type1& img,\n        image_type2& out,\n        const long width,\n        const long height,\n        const typename image_traits<image_type1>::pixel_type& thresh\n    );\n    /*!\n        requires\n            - out.nr() == img.nr() \n            - out.nc() == img.nc()\n            - image_type1 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h and it must contain grayscale pixels.\n            - image_type2 == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h and it must contain grayscale pixels.\n            - is_same_object(img,out) == false\n            - width > 0 && height > 0\n        ensures\n            - for all valid r and c:\n                - let MAX(r,c) == maximum of pixels from img which are inside the rectangle \n                  centered_rect(point(c,r), width, height)\n                - if (MAX(r,c) >= thresh)\n                    - #out[r][c] == out[r][c] + MAX(r,c)\n                - else\n                    - #out[r][c] == out[r][c] + thresh \n            - Does not change the size of img.\n            - Uses img as scratch space.  Therefore, the pixel values in img will have\n              been modified by this function.  That is, max_filter() destroys the contents\n              of img. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SPATIAL_FILTERINg_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/thresholding.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THRESHOLDINg_\n#define DLIB_THRESHOLDINg_ \n\n#include \"../pixel.h\"\n#include \"thresholding_abstract.h\"\n#include \"equalize_histogram.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    const unsigned char on_pixel = 255;\n    const unsigned char off_pixel = 0;\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void threshold_image (\n        const in_image_type& in_img_,\n        out_image_type& out_img_,\n        typename pixel_traits<typename image_traits<in_image_type>::pixel_type>::basic_pixel_type thresh\n    )\n    {\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false );\n\n        COMPILE_TIME_ASSERT(pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale);\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(in_img.nr(),in_img.nc());\n\n        for (long r = 0; r < in_img.nr(); ++r)\n        {\n            for (long c = 0; c < in_img.nc(); ++c)\n            {\n                if (get_pixel_intensity(in_img[r][c]) >= thresh)\n                    assign_pixel(out_img[r][c], on_pixel);\n                else\n                    assign_pixel(out_img[r][c], off_pixel);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    void threshold_image (\n        image_type& img,\n        typename pixel_traits<typename image_traits<image_type>::pixel_type>::basic_pixel_type thresh\n    )\n    {\n        threshold_image(img,img,thresh);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void auto_threshold_image (\n        const in_image_type& in_img_,\n        out_image_type& out_img_\n    )\n    {\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<in_image_type>::pixel_type>::is_unsigned == true );\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::is_unsigned == true );\n\n        COMPILE_TIME_ASSERT(pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale);\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        unsigned long thresh;\n        // find the threshold we should use\n        matrix<unsigned long,1> hist;\n        get_histogram(in_img,hist);\n\n        // Start our two means (a and b) out at the ends of the histogram\n        long a = 0;\n        long b = hist.size()-1;\n        bool moved_a = true;\n        bool moved_b = true;\n        while (moved_a || moved_b)\n        {\n            moved_a = false;\n            moved_b = false;\n\n            // catch the degenerate case where the histogram is empty\n            if (a >= b)\n                break;\n\n            if (hist(a) == 0)\n            {\n                ++a;\n                moved_a = true;\n            }\n\n            if (hist(b) == 0)\n            {\n                --b;\n                moved_b = true;\n            }\n        }\n        \n        // now do k-means clustering with k = 2 on the histogram. \n        moved_a = true;\n        moved_b = true;\n        while (moved_a || moved_b)\n        {\n            moved_a = false;\n            moved_b = false;\n\n            int64 a_hits = 0;\n            int64 b_hits = 0;\n            int64 a_mass = 0;\n            int64 b_mass = 0;\n\n            for (long i = 0; i < hist.size(); ++i)\n            {\n                // if i is closer to a\n                if (std::abs(i-a) < std::abs(i-b))\n                {\n                    a_mass += hist(i)*i;\n                    a_hits += hist(i);\n                }\n                else // if i is closer to b\n                {\n                    b_mass += hist(i)*i;\n                    b_hits += hist(i);\n                }\n            }\n\n            long new_a = (a_mass + a_hits/2)/a_hits;\n            long new_b = (b_mass + b_hits/2)/b_hits;\n\n            if (new_a != a)\n            {\n                moved_a = true;\n                a = new_a;\n            }\n\n            if (new_b != b)\n            {\n                moved_b = true;\n                b = new_b;\n            }\n        }\n        \n        // put the threshold between the two means we found\n        thresh = (a + b)/2;\n\n        // now actually apply the threshold\n        threshold_image(in_img_,out_img_,thresh);\n    }\n\n    template <\n        typename image_type\n        >\n    void auto_threshold_image (\n        image_type& img\n    )\n    {\n        auto_threshold_image(img,img);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void hysteresis_threshold (\n        const in_image_type& in_img_,\n        out_image_type& out_img_,\n        typename pixel_traits<typename image_traits<in_image_type>::pixel_type>::basic_pixel_type lower_thresh,\n        typename pixel_traits<typename image_traits<in_image_type>::pixel_type>::basic_pixel_type upper_thresh\n    )\n    {\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false );\n        COMPILE_TIME_ASSERT( pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false );\n\n        COMPILE_TIME_ASSERT(pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale);\n\n        DLIB_ASSERT( lower_thresh <= upper_thresh && is_same_object(in_img_, out_img_) == false,\n            \"\\tvoid hysteresis_threshold(in_img_, out_img_, lower_thresh, upper_thresh)\"\n            << \"\\n\\tYou can't use an upper_thresh that is less than your lower_thresh\"\n            << \"\\n\\tlower_thresh: \" << lower_thresh \n            << \"\\n\\tupper_thresh: \" << upper_thresh \n            << \"\\n\\tis_same_object(in_img_,out_img_): \" << is_same_object(in_img_,out_img_) \n            );\n\n        const_image_view<in_image_type> in_img(in_img_);\n        image_view<out_image_type> out_img(out_img_);\n\n        // if there isn't any input image then don't do anything\n        if (in_img.size() == 0)\n        {\n            out_img.clear();\n            return;\n        }\n\n        out_img.set_size(in_img.nr(),in_img.nc());\n        assign_all_pixels(out_img, off_pixel);\n\n        const long size = 1000;\n        long rstack[size];\n        long cstack[size];\n\n        // now do the thresholding\n        for (long r = 0; r < in_img.nr(); ++r)\n        {\n            for (long c = 0; c < in_img.nc(); ++c)\n            {\n                typename pixel_traits<typename image_traits<in_image_type>::pixel_type>::basic_pixel_type p;\n                assign_pixel(p,in_img[r][c]);\n                if (p >= upper_thresh)\n                {\n                    // now do line following for pixels >= lower_thresh.\n                    // set the stack position to 0.\n                    long pos = 1;\n                    rstack[0] = r;\n                    cstack[0] = c;\n\n                    while (pos > 0)\n                    {\n                        --pos;\n                        const long r = rstack[pos];\n                        const long c = cstack[pos];\n\n                        // This is the base case of our recursion.  We want to stop if we hit a\n                        // pixel we have already visited.\n                        if (out_img[r][c] == on_pixel)\n                            continue;\n\n                        out_img[r][c] = on_pixel;\n\n                        // put the neighbors of this pixel on the stack if they are bright enough\n                        if (r-1 >= 0)\n                        {\n                            if (pos < size && get_pixel_intensity(in_img[r-1][c]) >= lower_thresh)\n                            {\n                                rstack[pos] = r-1;\n                                cstack[pos] = c;\n                                ++pos;\n                            }\n                            if (pos < size && c-1 >= 0 && get_pixel_intensity(in_img[r-1][c-1]) >= lower_thresh)\n                            {\n                                rstack[pos] = r-1;\n                                cstack[pos] = c-1;\n                                ++pos;\n                            }\n                            if (pos < size && c+1 < in_img.nc() && get_pixel_intensity(in_img[r-1][c+1]) >= lower_thresh)\n                            {\n                                rstack[pos] = r-1;\n                                cstack[pos] = c+1;\n                                ++pos;\n                            }\n                        }\n\n                        if (pos < size && c-1 >= 0 && get_pixel_intensity(in_img[r][c-1]) >= lower_thresh)\n                        {\n                            rstack[pos] = r;\n                            cstack[pos] = c-1;\n                            ++pos;\n                        }\n                        if (pos < size && c+1 < in_img.nc() && get_pixel_intensity(in_img[r][c+1]) >= lower_thresh)\n                        {\n                            rstack[pos] = r;\n                            cstack[pos] = c+1;\n                            ++pos;\n                        }\n\n                        if (r+1 < in_img.nr())\n                        {\n                            if (pos < size && get_pixel_intensity(in_img[r+1][c]) >= lower_thresh)\n                            {\n                                rstack[pos] = r+1;\n                                cstack[pos] = c;\n                                ++pos;\n                            }\n                            if (pos < size && c-1 >= 0 && get_pixel_intensity(in_img[r+1][c-1]) >= lower_thresh)\n                            {\n                                rstack[pos] = r+1;\n                                cstack[pos] = c-1;\n                                ++pos;\n                            }\n                            if (pos < size && c+1 < in_img.nc() && get_pixel_intensity(in_img[r+1][c+1]) >= lower_thresh)\n                            {\n                                rstack[pos] = r+1;\n                                cstack[pos] = c+1;\n                                ++pos;\n                            }\n                        }\n\n                    } // end while (pos >= 0)\n\n                }\n                else\n                {\n                    out_img[r][c] = off_pixel;\n                }\n\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THRESHOLDINg_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms/thresholding_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_THRESHOLDINg_ABSTRACT_\n#ifdef DLIB_THRESHOLDINg_ABSTRACT_ \n\n#include \"../pixel.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    const unsigned char on_pixel = 255;\n    const unsigned char off_pixel = 0;\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void threshold_image (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        typename pixel_traits<typename image_traits<in_image_type>::pixel_type>::basic_pixel_type thresh\n    );\n    /*!\n        requires\n            - in_image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - out_image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale == true  \n            - pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false\n            - pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false \n        ensures\n            - #out_img == the thresholded version of in_img (in_img is converted to a grayscale\n              intensity image if it is color).  Pixels in in_img with grayscale values >= thresh \n              have an output value of on_pixel and all others have a value of off_pixel.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n    template <\n        typename image_type\n        >\n    void threshold_image (\n        image_type& img,\n        typename pixel_traits<typename image_traits<image_type>::pixel_type>::basic_pixel_type thresh\n    );\n    /*!\n        requires\n            - it is valid to call threshold_image(img,img,thresh);\n        ensures\n            - calls threshold_image(img,img,thresh);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void auto_threshold_image (\n        const in_image_type& in_img,\n        out_image_type& out_img\n    );\n    /*!\n        requires\n            - in_image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - out_image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_traits<in_image_type>::pixel_type>::max() <= 65535 \n            - pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha   == false\n            - pixel_traits<typename image_traits<in_image_type>::pixel_type>::is_unsigned == true \n            - pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale  == true  \n            - pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha  == false \n            - pixel_traits<typename image_traits<out_image_type>::pixel_type>::is_unsigned == true \n        ensures\n            - #out_img == the thresholded version of in_img (in_img is converted to a grayscale\n              intensity image if it is color).  Pixels in in_img with grayscale values >= thresh \n              have an output value of on_pixel and all others have a value of off_pixel.\n            - The thresh value used is determined by performing a k-means clustering\n              on the input image histogram with a k of 2.  The point between the two\n              means found is used as the thresh value.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n    template <\n        typename image_type\n        >\n    void auto_threshold_image (\n        image_type& img\n    );\n    /*!\n        requires\n            - it is valid to call auto_threshold_image(img,img);\n        ensures\n            - calls auto_threshold_image(img,img);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void hysteresis_threshold (\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        typename pixel_traits<typename image_traits<in_image_type>::pixel_type>::basic_pixel_type lower_thresh,\n        typename pixel_traits<typename image_traits<in_image_type>::pixel_type>::basic_pixel_type upper_thresh\n    );\n    /*!\n        requires\n            - in_image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - out_image_type == is an implementation of array2d/array2d_kernel_abstract.h\n            - pixel_traits<typename image_traits<out_image_type>::pixel_type>::grayscale == true  \n            - pixel_traits<typename image_traits<in_image_type>::pixel_type>::has_alpha == false\n            - pixel_traits<typename image_traits<out_image_type>::pixel_type>::has_alpha == false \n            - lower_thresh <= upper_thresh\n            - is_same_object(in_img, out_img) == false\n        ensures\n            - #out_img == the hysteresis thresholded version of in_img (in_img is converted to a \n              grayscale intensity image if it is color). Pixels in in_img with grayscale \n              values >= upper_thresh have an output value of on_pixel and all others have a \n              value of off_pixel unless they are >= lower_thresh and are adjacent to a pixel\n              with a value >= upper_thresh in which case they have a value of on_pixel.\n            - #out_img.nc() == in_img.nc()\n            - #out_img.nr() == in_img.nr()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THRESHOLDINg_ABSTRACT_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/image_transforms.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGE_TRANSFORMs_\n#define DLIB_IMAGE_TRANSFORMs_ \n\n#include \"image_transforms/assign_image.h\"\n#include \"image_transforms/equalize_histogram.h\"\n#include \"image_transforms/morphological_operations.h\"\n#include \"image_transforms/spatial_filtering.h\"\n#include \"image_transforms/thresholding.h\"\n#include \"image_transforms/edge_detector.h\"\n#include \"image_transforms/draw.h\"\n#include \"image_transforms/integral_image.h\"\n#include \"image_transforms/image_pyramid.h\"\n#include \"image_transforms/label_connected_blobs.h\"\n#include \"image_transforms/colormaps.h\"\n#include \"image_transforms/segment_image.h\"\n#include \"image_transforms/interpolation.h\"\n#include \"image_transforms/fhog.h\"\n\n#endif // DLIB_IMAGE_TRANSFORMs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/interfaces/cmd_line_parser_option.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CMD_LINE_PARSER_OPTIOn_\n#define DLIB_CMD_LINE_PARSER_OPTIOn_\n\n#include <string>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT\n        >\n    class cmd_line_parser_option\n    {\n        /*!\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                None of the functions in cmd_line_parser_option will invalidate\n                pointers or references to internal data when called.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a command line option.  \n        !*/\n\n    public:\n\n        typedef charT char_type;\n        typedef std::basic_string<charT> string_type;\n\n        virtual ~cmd_line_parser_option (\n        ) = 0;\n\n        virtual const string_type& name (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the name of this option\n        !*/\n\n        virtual const string_type& group_name (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the name of the group this option is in.  If no group was set for\n                  this option then this function returns \"\".\n        !*/\n\n        virtual const string_type& description (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the description for this option\n        !*/\n\n        virtual unsigned long number_of_arguments( \n        ) const = 0;\n        /*!\n            ensures\n                - returns the number of arguments for this option\n        !*/\n\n        virtual unsigned long count(\n        ) const = 0;\n        /*!\n            ensures\n                - returns the number of times this option appears on the command line.\n        !*/\n\n        virtual const string_type& argument (\n            unsigned long arg = 0,\n            unsigned long N = 0\n        ) const = 0;\n        /*!\n            requires\n                - arg < number_of_arguments()\n                - N < count()\n            ensures\n                - returns the arg-th argument to the Nth occurrence of this \n                  option on the command line.\n        !*/\n\n        inline operator bool (\n        ) const { return count() > 0; }\n        /*!\n            ensures\n                - returns true if this option appears on the command line at all\n        !*/\n\n    protected:\n\n        // restricted functions\n        cmd_line_parser_option& operator=(const cmd_line_parser_option&){return *this;}\n\n    };\n\n    // destructor does nothing\n    template < typename charT >\n    cmd_line_parser_option<charT>::~cmd_line_parser_option() {}\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CMD_LINE_PARSER_OPTIOn_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/interfaces/enumerable.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ENUMERABLe_INTERFACE_\n#define DLIB_ENUMERABLe_INTERFACE_\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class enumerable\n    {\n        /*!\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                - if (at_start()) then\n                    - all pointers and references to data returned via element() are \n                      invalid.\n                - calling move_next() or reset() invalidates pointers and references to \n                  data returned via element() and only data returned via element().\n                - calling at_start(), current_element_valid(), size(), or element() \n                  does NOT invalidate pointers or references to any internal data.\n\n            INITIAL VALUE\n                current_element_valid() == false \n                at_start() == true\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represent an interface for iterating through the \n                elements in a container.  It starts out one before the first element\n                in the container. \n\n\n                EXAMPLE:  The following loops though all elements in the container\n                          and prints them to cout.\n\n                    container.reset();\n                    while(container.move_next()) {\n                        cout << container.element();\n                    }\n        !*/\n\n    public:\n        typedef T type;\n\n        inline virtual ~enumerable(\n        ) = 0;\n\n        virtual bool at_start (\n        ) const = 0;\n        /*!\n            ensures\n                - returns true if *this represents one position before the first element\n                  in the container (this would also make the current element invalid) \n                  else returns false                \n        !*/\n\n        virtual void reset (\n        ) const = 0;\n        /*!\n            ensures\n                - #current_element_valid() == false \n                - #at_start() == true\n        !*/\n\n        virtual bool current_element_valid (\n        ) const = 0;\n        /*!\n            ensures\n                - returns true if we are currently at a valid element else\n                  returns false \n        !*/\n\n        virtual const T& element (\n        ) const = 0;\n        /*!\n            requires\n                - current_element_valid() == true\n            ensures\n                - returns a const reference to the current element\n        !*/\n\n        virtual T& element (\n        ) = 0;\n        /*!\n            requires\n                - current_element_valid() == true\n            ensures\n                - returns a non-const reference to the current element\n        !*/\n\n        virtual bool move_next (\n        ) const = 0;\n        /*!\n            ensures\n                - moves to the next element.  i.e. #element() will now \n                  return the next element in the container \n                - the return value will be equal to #current_element_valid() \n                - #at_start() == false \n\n                - returns true if there is another element \n                - returns false if there are no more elements in the container\n        !*/\n\n        virtual unsigned long size (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the number of elements in *this\n        !*/\n\n    protected:\n\n        // restricted functions\n        enumerable& operator=(const enumerable&) {return *this;} // no assignment operator\n\n    };\n\n    // destructor does nothing\n    template <typename T>\n    enumerable<T>::~enumerable() {}\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ENUMERABLe_INTERFACE_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/interfaces/map_pair.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MAP_PAIr_INTERFACE_\n#define DLIB_MAP_PAIr_INTERFACE_\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename T1,\n        typename T2\n        >\n    class map_pair  \n    {\n        /*!\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                None of the functions in map_pair will invalidate\n                pointers or references to internal data when called.\n\n            WHAT THIS OBJECT REPRESENTS\n                this object is used to return the key/value pair used in the \n                map and hash_map containers when using the enumerable interface.\n\n                note that the enumerable interface is defined in\n                interfaces/enumerable.h\n        !*/\n\n    public:\n        typedef T1 key_type;\n        typedef T2 value_type;\n\n        virtual ~map_pair(\n        )=0;\n\n        virtual const T1& key( \n        ) const =0;\n        /*!\n            ensures\n                - returns a const reference to the key\n        !*/\n\n        virtual const T2& value(\n        ) const =0;\n        /*!\n            ensures\n                - returns a const reference to the value associated with key\n        !*/\n\n        virtual T2& value(\n        )=0;\n        /*!\n            ensures\n                - returns a non-const reference to the value associated with key\n        !*/\n\n    protected:\n\n        // restricted functions\n        map_pair<T1,T2>& operator=(const map_pair<T1,T2>&) {return *this;} // no assignment operator\n\n    };\n\n    // destructor does nothing\n    template <typename T1,typename T2> \n    map_pair<T1,T2>::~map_pair () {}\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MAP_PAIr_INTERFACE_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/interfaces/remover.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_REMOVER_KERNEl_INTERFACE_\n#define DLIB_REMOVER_KERNEl_INTERFACE_\n\n#include <functional>\n\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class remover \n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T is swappable by a global swap() and                \n                T must have a default constructor\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                The size() function does not invalidate pointers or \n                references to internal data.  All other functions have no such \n                guarantee.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents some generalized interface for removing\n                single items from container classes.                  \n        !*/\n        \n\n        public:\n            typedef T type;\n\n            virtual ~remover(\n            ); \n            /*!\n                ensures\n                    - all resources associated with *this have been released.\n            !*/\n\n            virtual void remove_any (\n                T& item\n            ) = 0;\n            /*!\n                requires \n                    - size() != 0\n                ensures\n                    - #size() == size() - 1\n                    - removes an element from *this and swaps it into item.  \n                    - if (*this implements the enumerable interface) then\n                        - #at_start() == true\n            !*/\n\n            virtual unsigned long size (\n            ) const = 0;\n            /*!\n                ensures\n                    - returns the number of elements in *this\n            !*/\n\n        protected:\n\n            // restricted functions\n            remover& operator=(const remover&) {return *this;}    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    class asc_remover : public remover<T>\n    {\n        /*!\n            REQUIREMENTS ON T\n                T is swappable by a global swap() and                \n                T must have a default constructor and\n                T must be comparable by compare where compare is a functor compatible with std::less \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents the same thing as remover except\n                that remove_any() will remove elements in ascending order\n                according to the compare functor.  \n        !*/\n    public:\n        typedef compare compare_type;\n\n    protected:\n        // restricted functions\n        asc_remover& operator=(const asc_remover&) {return *this;}    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range\n        >\n    class pair_remover \n    {\n\n        /*!\n            REQUIREMENTS ON domain\n                domain is swappable by a global swap() and                \n                domain must have a default constructor\n\n            REQUIREMENTS ON range\n                range is swappable by a global swap() and\n                range must have a default constructor\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                The size() function does not invalidate pointers or \n                references to internal data.  All other functions have no such \n                guarantee.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents some generalized interface for removing\n                pairs from container classes which enforce some kind of pairing on\n                the elements that they contain.  \n        !*/\n        \n        public:\n            typedef domain domain_type;\n            typedef range range_type;\n\n            virtual ~pair_remover(\n            ); \n            /*!\n                ensures\n                    - all resources associated with *this have been released.\n            !*/\n\n            virtual void remove_any (\n                domain& d,\n                range& r\n            ) = 0;\n            /*!\n                requires                     \n                    - &d != &r (i.e. d and r cannot be the same variable) \n                    - size() != 0\n                ensures\n                    - #size() == size() - 1\n                    - removes an element from the domain of *this and swaps it\n                      into d.  \n                    - removes the element in *this's range that is associated \n                      with #d and swaps it into r.\n                    - if (*this implements the enumerable interface) then\n                        - #at_start() == true\n            !*/\n\n            virtual unsigned long size (\n            ) const = 0;\n            /*!\n                ensures\n                    - returns the number of elements in *this \n            !*/\n\n\n        protected:\n\n            // restricted functions\n            pair_remover& operator=(const pair_remover&) {return *this;}    // assignment operator\n\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    class asc_pair_remover : public pair_remover<domain,range>\n    {\n        /*!\n            REQUIREMENTS ON domain\n                domain is swappable by a global swap() and                \n                domain must have a default constructor and\n                domain must be comparable by compare where compare is a functor compatible with std::less \n\n            REQUIREMENTS ON range\n                range is swappable by a global swap() and\n                range must have a default constructor\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents the same thing as pair_remover except\n                that remove_any() will remove domain elements in ascending \n                order according to the compare functor.  \n        !*/\n    public:\n        typedef compare compare_type;\n\n    protected:\n        // restricted functions\n        asc_pair_remover& operator=(const asc_pair_remover&) {return *this;}    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    // destructor does nothing\n    template <typename T>\n    remover<T>::~remover() {}\n\n    // destructor does nothing\n    template <typename domain, typename range>\n    pair_remover<domain,range>::~pair_remover() {}\n\n\n// ----------------------------------------------------------------------------------------\n\n\n}\n\n#endif // DLIB_REMOVER_KERNEl_INTERFACE_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/iomanip",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/iosfwd",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/iosockstream/iosockstream.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IOSOCKSTrEAM_Hh_\n#define DLIB_IOSOCKSTrEAM_Hh_\n\n#include \"iosockstream_abstract.h\"\n\n#include <iostream>\n#include \"../sockstreambuf.h\"\n#include \"../smart_pointers_thread_safe.h\"\n#include \"../timeout.h\"\n\n#ifdef _MSC_VER\n// Disable the warning about inheriting from std::iostream 'via dominance' since this warning is a warning about\n// visual studio conforming to the standard and is ignorable.  \n// See http://connect.microsoft.com/VisualStudio/feedback/details/733720/inheriting-from-std-fstream-produces-c4250-warning\n// for further details if interested.\n#pragma warning(disable : 4250)\n#endif // _MSC_VER\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n\n    class iosockstream : public std::iostream\n    {\n    public:\n\n        iosockstream(\n        ) :\n            std::iostream(0)\n        {\n        }\n\n        iosockstream( \n            const network_address& addr\n        ) :\n            std::iostream(0)\n        { \n            open(addr); \n        }\n\n        iosockstream( \n            const network_address& addr,\n            unsigned long timeout \n        ) :\n            std::iostream(0)\n        { \n            open(addr, timeout); \n        }\n\n        ~iosockstream()\n        {\n            close();\n        }\n\n        void open (\n            const network_address& addr\n        )\n        {\n            close();\n            con.reset(connect(addr));\n            buf.reset(new sockstreambuf(con.get()));\n            // Note that we use the sockstreambuf's ability to autoflush instead of \n            // telling the iostream::tie() function to tie the stream to itself even though\n            // that should work fine.  The reason we do it this way is because there is a\n            // bug in visual studio 2012 that causes a program to crash when a stream is\n            // tied to itself and then used.  See\n            // http://connect.microsoft.com/VisualStudio/feedback/details/772293/tying-a-c-iostream-object-to-itself-causes-a-stack-overflow-in-visual-studio-2012\n            // for further details.\n            buf->flush_output_on_read();\n            rdbuf(buf.get());\n            clear();\n        }\n\n        void open (\n            const network_address& addr,\n            unsigned long timeout\n        )\n        {\n            close(timeout);\n            con.reset(connect(addr.host_address, addr.port, timeout));\n            buf.reset(new sockstreambuf(con.get()));\n            buf->flush_output_on_read();\n            rdbuf(buf.get());\n            clear();\n        }\n\n        void close(\n            unsigned long timeout = 10000\n        )\n        {\n            rdbuf(0);\n            try\n            {\n                if (buf)\n                {\n                    dlib::timeout t(*con,&connection::shutdown,timeout);\n\n                    // This will flush the sockstreambuf and also destroy it.\n                    buf.reset();\n\n                    if(con->shutdown_outgoing())\n                    {\n                        // there was an error so just close it now and return\n                        con->shutdown();\n                    }\n                    else\n                    {\n                        char junk[100];\n                        // wait for the other end to close their side\n                        while (con->read(junk,sizeof(junk)) > 0);\n                    }\n                }\n            }\n            catch (...)\n            {\n                con.reset();\n                throw;\n            }\n            con.reset();\n        }\n\n        void terminate_connection_after_timeout (\n            unsigned long timeout\n        )\n        {\n            if (con)\n            {\n                con_timeout.reset(new dlib::timeout(*this,&iosockstream::terminate_connection,timeout,con));\n            }\n        }\n\n    private:\n\n        void terminate_connection(\n            shared_ptr_thread_safe<connection> thecon\n        )\n        {\n            thecon->shutdown();\n        }\n\n        scoped_ptr<timeout> con_timeout;\n        shared_ptr_thread_safe<connection> con;\n        scoped_ptr<sockstreambuf> buf;\n\n    };\n\n// ---------------------------------------------------------------------------------------- \n\n}\n\n\n#endif // DLIB_IOSOCKSTrEAM_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/iosockstream/iosockstream_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_IOSOCKSTrEAM_ABSTRACT_Hh_\n#ifdef DLIB_IOSOCKSTrEAM_ABSTRACT_Hh_\n\n#include \"../sockstreambuf/sockstreambuf_abstract.h\"\n\n#include <iostream>\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n\n    class iosockstream : public std::iostream\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an iostream object that reads/writes from a TCP network connection.\n\n                Note that any attempt to read from this stream will automatically flush the\n                stream's output buffers.  \n\n            THREAD SAFETY\n                It is not safe to touch this object from more than one thread at a time.\n                Therefore, you should mutex lock it if you need to do so.  \n        !*/\n\n    public:\n\n        iosockstream(\n        );\n        /*!\n            ensures\n                - #good() == false\n        !*/\n\n        iosockstream( \n            const network_address& addr\n        );\n        /*!\n            ensures\n                - Attempts to connect to the given network address. \n                - Calling this constructor is equivalent to calling the default constructor\n                  and then invoking open(addr).\n                - #good() == true \n            throws\n                - dlib::socket_error\n                    This exception is thrown if there is some problem that prevents us from\n                    creating the connection.  \n        !*/\n\n        iosockstream( \n            const network_address& addr,\n            unsigned long timeout\n        ); \n        /*!\n            ensures\n                - Attempts to connect to the given network address. \n                - Calling this constructor is equivalent to calling the default constructor\n                  and then invoking open(addr, timeout).\n                - #good() == true \n            throws\n                - dlib::socket_error\n                    This exception is thrown if there is some problem that prevents us from\n                    creating the connection or if timeout milliseconds elapses before the\n                    connect is successful.\n        !*/\n\n        ~iosockstream(\n        );\n        /*!\n            ensures\n                - Invokes close() before destructing the stream.  Therefore, any open\n                  connection will be gracefully closed using the default timeout time.\n                  This also means any data in the stream will be flushed to the connection.\n        !*/\n\n        void open (\n            const network_address& addr\n        );\n        /*!\n            ensures\n                - This object will attempt to create a TCP connection with the remote host\n                  indicated by addr.  \n                - Any previous connection in this iosockstream is closed by calling close()\n                  before we make any new connection.\n                - #good() == true\n                  (i.e. the error flags are reset by calling open())\n            throws\n                - dlib::socket_error\n                    This exception is thrown if there is some problem that prevents us from\n                    creating the connection.  \n        !*/\n\n        void open (\n            const network_address& addr,\n            unsigned long timeout \n        );\n        /*!\n            ensures\n                - This object will attempt to create a TCP connection with the remote host\n                  indicated by addr.  \n                - Any previous connection in this iosockstream is closed by calling close()\n                  before we make any new connection.\n                - #good() == true\n                  (i.e. the error flags are reset by calling open())\n            throws\n                - dlib::socket_error\n                    This exception is thrown if there is some problem that prevents us from\n                    creating the connection or if timeout milliseconds elapses before the\n                    connect is successful.\n        !*/\n\n        void close(\n            unsigned long timeout = 10000\n        );\n        /*!\n            ensures\n                - #good() == false \n                - if (there is an active TCP connection) then\n                    - Flushes any data buffered in the output part of the stream\n                      to the connection.  \n                    - Performs a proper graceful close (i.e. like dlib::close_gracefully()).\n                    - Will only wait timeout milliseconds for the buffer flush and graceful\n                      close to finish before the connection is terminated forcefully.\n                      Therefore, close() will only block for at most timeout milliseconds.\n        !*/\n\n        void terminate_connection_after_timeout (\n            unsigned long timeout\n        );\n        /*!\n            ensures\n                - if (there is an active TCP connection) then\n                    - Any operations on this TCP connection will return error or\n                      end-of-file once timeout milliseconds have elapsed from this call to\n                      terminate_connection_after_timeout().  This is true unless another\n                      call to terminate_connection_after_timeout() is made which gives a\n                      new time.  In this case, the previous call is forgotten and the\n                      timeout is reset.\n                    - This timeout only applies to the current TCP connection.  That is, if\n                      the iosockstream is closed and a new connection is established, any\n                      previous timeouts setup by terminate_connection_after_timeout() do\n                      not apply. \n                - else\n                    - This function has no effect on this object.\n        !*/\n\n    };\n\n// ---------------------------------------------------------------------------------------- \n\n}\n\n\n#endif // DLIB_IOSOCKSTrEAM_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/iosockstream.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IOSOCkSTREAM_H_h_\n#define DLIB_IOSOCkSTREAM_H_h_\n\n#include \"iosockstream/iosockstream.h\"\n\n\n#endif // DLIB_IOSOCkSTREAM_H_h_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/iostream",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/is_kind.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IS_KINd_H_\n#define DLIB_IS_KINd_H_\n\n#include <vector>\n\nnamespace dlib\n{\n    /*!\n        This file contains a set of templates that enable you to determine if\n        a given type implements an abstract interface defined in one of the\n        dlib *_abstract.h files.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    struct default_is_kind_value { static const bool value = false; };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct is_graph : public default_is_kind_value\n    {\n        /*!\n            - if (T is an implementation of graph/graph_kernel_abstract.h) then\n                - is_graph<T>::value == true\n            - else\n                - is_graph<T>::value == false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct is_directed_graph : public default_is_kind_value\n    {\n        /*!\n            - if (T is an implementation of directed_graph/directed_graph_kernel_abstract.h) then\n                - is_directed_graph<T>::value == true\n            - else\n                - is_directed_graph<T>::value == false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename helper = void>\n    struct is_matrix : public default_is_kind_value  \n    {\n        /*!\n            - if (T is some kind of matrix expression from the matrix/matrix_exp_abstract.h component) then\n                - is_matrix<T>::value == true\n            - else\n                - is_matrix<T>::value == false\n        !*/\n\n        // Don't set the helper to anything.  Just let it be void.\n        ASSERT_ARE_SAME_TYPE(helper,void);\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct is_array2d : public default_is_kind_value  \n    {\n        /*!\n            - if (T is an implementation of array2d/array2d_kernel_abstract.h) then\n                - is_array2d<T>::value == true\n            - else\n                - is_array2d<T>::value == false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct is_array : public default_is_kind_value  \n    {\n        /*!\n            - if (T is an implementation of array/array_kernel_abstract.h) then\n                - is_array<T>::value == true\n            - else\n                - is_array<T>::value == false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct is_std_vector : public default_is_kind_value  \n    {\n        /*!\n            - if (T is an implementation of the standard C++ std::vector object) then\n                - is_std_vector<T>::value == true\n            - else\n                - is_std_vector<T>::value == false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct is_pair : public default_is_kind_value  \n    {\n        /*!\n            - if (T is a std::pair object) then\n                - is_std_vector<T>::value == true\n            - else\n                - is_std_vector<T>::value == false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct is_rand : public default_is_kind_value  \n    {\n        /*!\n            - if (T is an implementation of rand/rand_kernel_abstract.h) then\n                - is_rand<T>::value == true\n            - else\n                - is_rand<T>::value == false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct is_config_reader : public default_is_kind_value  \n    {\n        /*!\n            - if (T is an implementation of config_reader/config_reader_kernel_abstract.h) then\n                - is_config_reader<T>::value == true\n            - else\n                - is_config_reader<T>::value == false\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                              Implementation details\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc> \n    struct is_std_vector<std::vector<T,alloc> >         { const static bool value = true; };\n    template <typename T> struct is_std_vector<T&>      { const static bool value = is_std_vector<T>::value; };\n    template <typename T> struct is_std_vector<const T&>{ const static bool value = is_std_vector<T>::value; };\n    template <typename T> struct is_std_vector<const T> { const static bool value = is_std_vector<T>::value; };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    struct is_pair<std::pair<T,U> > { const static bool value = true; };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IS_KINd_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/istream",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/linker/linker_kernel_1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LINKER_KERNEL_1_CPp_\n#define DLIB_LINKER_KERNEL_1_CPp_\n#include \"linker_kernel_1.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    linker::\n    linker (\n    ) :\n        running(false),\n        running_signaler(running_mutex),\n        A(0),\n        B(0),\n        service_connection_running_signaler(service_connection_running_mutex)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    linker::\n    linker (\n        connection& a,\n        connection& b\n    ) :\n        running(false),\n        running_signaler(running_mutex),\n        A(0),\n        B(0),\n        service_connection_running_signaler(service_connection_running_mutex)\n    {\n        link(a,b);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    linker::\n    ~linker (\n    )\n    {\n        clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void linker::\n    clear (\n    )\n    {\n\n        // shutdown the connections\n        cons_mutex.lock();\n        if (A != 0 )\n        {\n            A->shutdown();\n            A = 0;\n        }\n        if (B != 0)\n        {\n            B->shutdown();\n            B = 0;\n        }\n        cons_mutex.unlock();\n       \n\n        // wait for the other threads to signal that they have ended\n        running_mutex.lock();\n        while (running == true)\n        {\n            running_signaler.wait();\n        }\n        running_mutex.unlock();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool linker::\n    is_running (\n    ) const\n    {\n        running_mutex.lock();\n        bool temp = running;\n        running_mutex.unlock();\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void linker::\n    link (\n        connection& a,\n        connection& b\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( \n            this->is_running() == false ,\n            \"\\tvoid linker::link\"\n            << \"\\n\\tis_running() == \" << this->is_running() \n            << \"\\n\\tthis: \" << this\n            );\n\n        running_mutex.lock();\n        running = true;\n        running_mutex.unlock();\n\n        cons_mutex.lock();\n        A = &a;\n        B = &b;\n        cons_mutex.unlock();\n\n        \n\n        service_connection_running_mutex.lock();\n        service_connection_running = true;\n        service_connection_running_mutex.unlock();\n\n        service_connection_error_mutex.lock();\n        service_connection_error = false;\n        service_connection_error_mutex.unlock();\n\n        // if we fail to make the thread\n        if (!create_new_thread(service_connection,this))\n        {\n            a.shutdown();\n            b.shutdown();\n\n            service_connection_running_mutex.lock();\n            service_connection_running = false;\n            service_connection_running_mutex.unlock();\n\n            cons_mutex.lock();\n            A = 0;\n            B = 0;\n            cons_mutex.unlock();  \n\n            running_mutex.lock();\n            running = false;\n            running_mutex.unlock();\n\n\n\n            throw dlib::thread_error (\n                ECREATE_THREAD,\n                \"failed to make new thread in linker::link()\"\n                );\n        }\n\n\n\n        // forward data from a to b\n        char buf[200];\n        int status;\n        bool error = false; // becomes true if one of the connections returns an error\n        while (true)\n        {\n            status = a.read(buf,sizeof(buf));\n            // if there was an error reading from the socket\n            if (status == OTHER_ERROR)\n            {\n                error = true;\n                break;\n            }\n            else if (status == SHUTDOWN)\n            {\n                b.shutdown();\n            }\n\n            if (status <= 0)\n            {\n                // if a has closed normally\n                if (status == 0)\n                    b.shutdown_outgoing();\n                break;            \n            }\n\n            status = b.write(buf,status);\n            // if there was an error writing to the socket then break\n            if (status == OTHER_ERROR)\n            {\n                error = true;\n                break;\n            }\n            \n            if (status <= 0)\n                break;            \n        }\n\n\n        // if there was an error then shutdown both connections\n        if (error)\n        {\n            a.shutdown();\n            b.shutdown();\n        }\n\n\n\n\n        // wait for the other thread to end\n        service_connection_running_mutex.lock();\n        while(service_connection_running)\n        {\n            service_connection_running_signaler.wait();\n        }\n        service_connection_running_mutex.unlock();\n\n\n        // make sure connections are shutdown\n        a.shutdown();\n        b.shutdown();\n\n\n        // both threads have ended so the connections are no longer needed\n        cons_mutex.lock();\n        A = 0;\n        B = 0;\n        cons_mutex.unlock();\n\n\n        // if service_connection terminated due to an error then set error to true\n        service_connection_error_mutex.lock();\n        if (service_connection_error)\n            error = true;\n        service_connection_error_mutex.unlock();\n\n\n        // if we are ending because of an error\n        if (error)\n        {\n\n            // signal that the link() function is ending\n            running_mutex.lock();\n            running = false;\n            running_signaler.broadcast();\n            running_mutex.unlock();\n\n            // throw the exception for this error\n            throw dlib::socket_error (\n                ECONNECTION,\n                \"a connection returned an error in linker::link()\"\n                );\n         \n        }\n\n        // signal that the link() function is ending\n        running_mutex.lock();\n        running = false;\n        running_signaler.broadcast();\n        running_mutex.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void linker::\n    service_connection (\n        void* param\n    )\n    {\n        linker& p = *static_cast<linker*>(param);\n\n        p.cons_mutex.lock();\n        // if the connections are gone for whatever reason then return\n        if (p.A == 0 || p.B == 0)\n        {\n            // signal that this function is ending\n            p.service_connection_running_mutex.lock();\n            p.service_connection_running = false;\n            p.service_connection_running_signaler.broadcast();\n            p.service_connection_running_mutex.unlock();\n            return;\n        }\n        connection& a = *p.A;\n        connection& b = *p.B;\n        p.cons_mutex.unlock();\n\n\n\n        // forward data from b to a\n        char buf[200];\n        int status;\n        bool error = false;\n        while (true)\n        {\n            status = b.read(buf,sizeof(buf));\n            // if there was an error reading from the socket\n            if (status == OTHER_ERROR)\n            {\n                error = true;\n                break;\n            }\n            else if (status == SHUTDOWN)\n            {\n                a.shutdown();\n            }\n\n\n            if (status <= 0)\n            {\n                // if b has closed normally \n                if (status == 0)\n                    a.shutdown_outgoing();\n                break;            \n            }\n\n\n            status = a.write(buf,status);\n            // if there was an error writing to the socket then break\n            if (status == OTHER_ERROR)\n            {\n                error = true;\n                break;\n            }\n            \n            if (status <= 0)\n                break;            \n        }\n\n\n        // if there was an error then shutdown both connections\n        if (error)\n        {\n            a.shutdown();\n            b.shutdown();\n        }\n\n\n        // if there was an error then signal that\n        if (error)\n        {\n            p.service_connection_error_mutex.lock();\n            p.service_connection_error = true;\n            p.service_connection_error_mutex.unlock();\n        }\n\n        // signal that this function is ending\n        p.service_connection_running_mutex.lock();\n        p.service_connection_running = false;\n        p.service_connection_running_signaler.broadcast();\n        p.service_connection_running_mutex.unlock();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif // DLIB_LINKER_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/linker/linker_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LINKER_KERNEl_1_\n#define DLIB_LINKER_KERNEl_1_\n\n#include \"linker_kernel_abstract.h\"\n#include \"../threads.h\"\n#include \"../sockets.h\"\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n\n    class linker \n    {\n\n        /*!\n            INITIAL VALUE\n                running             == false\n                A                   == 0\n                B                   == 0\n                running_mutex       == a mutex \n                running_signaler    == a signaler associated with running_mutex\n                cons_mutex          == a mutex\n                service_connection_running          == false\n                service_connection_running_mutex    == a mutex\n                service_connection_running_signaler == a signaler associated with \n                                                       service_connection_running_mutex\n\n                service_connection_error        == false\n                service_connection_error_mutex  == a mutex\n\n               \n\n            CONVENTION\n                running             == is_running()\n                running_mutex       == a mutex for running\n                running_signaler    == a signaler for signaling when\n                                       running becomes false and is associated with\n                                       running_mutex\n                cons_mutex          == a mutex for A and B\n\n                service_connection_running          == true when service_connection() is\n                                                       running or is about to run else\n                                                       false\n                service_connection_running_mutex    == a mutex for service_connection_running\n                service_connection_running_signaler == a signaler associated with \n                                                       service_connection_running_mutex\n\n                if (running) then\n                    A               == address of a from link()\n                    B               == address of b from link()\n                else\n                    A               == 0\n                    B               == 0\n\n                service_connection_error        == service_connection uses this bool\n                                                   to indicate if it terminated due to \n                                                   an error or not\n                service_connection_error_mutex  == a mutex for service_connection_error\n\n\n        !*/\n\n        public:\n\n            // These two typedefs are here for backwards compatibility with previous\n            // versions of dlib.\n            typedef linker kernel_1a;\n            typedef linker kernel_1a_c;\n\n            linker(\n            );\n\n            linker (\n                connection& a,\n                connection& b\n            );\n\n            virtual ~linker(\n            ); \n\n            void clear(\n            );\n\n            bool is_running(\n            ) const;\n\n            void link (\n                connection& a,\n                connection& b\n            );\n\n\n        private:\n\n            static void service_connection (\n                void* param\n            );\n            /*!\n                requires\n                    param == pointer to a linker object\n                ensures\n                    waits for data from b and forwards it to a and\n                    if (b closes normally or is shutdown()) service_connection ends and\n                    if (b closes normally) then a.shutdown_outgoing() is called and\n                    if (a or b returns an error) then a and b are shutdown() \n            !*/\n\n\n            // data members\n            bool running;\n            mutex running_mutex;\n            signaler running_signaler;\n            connection* A;\n            connection* B;\n            mutex cons_mutex;\n\n            bool service_connection_running;\n            mutex service_connection_running_mutex;\n            signaler service_connection_running_signaler;\n\n            bool service_connection_error;\n            mutex service_connection_error_mutex;\n\n            // restricted functions\n            linker(linker&);        // copy constructor\n            linker& operator=(linker&);    // assignment operator\n    };\n\n\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"linker_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_LINKER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/linker/linker_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LINKER_KERNEl_ABSTRACT_\n#ifdef DLIB_LINKER_KERNEl_ABSTRACT_\n\n#include \"../threads/threads_kernel_abstract.h\"\n#include \"../sockets/sockets_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    class linker \n    {\n\n        /*!\n            INITIAL VALUE\n                is_running() == false\n\n               \n            WHAT THIS OBJECT REPRESENTS\n                This object represents something that takes two connections and lets\n                them talk to each other.  i.e. any incoming data from one connection is\n                passed unaltered to the other and vice versa.\n\n                note that linker objects are not swappable.\n\n                Also note that when one connection is closed shutdown_outgoing()\n                is called on the other to signal that no more data will be sent\n                in that direction on the connection.\n                (i.e. the FIN packet is effectively also forwarded by the linker object)\n\n            THREAD SAFETY\n                all member functions are thread-safe.\n\n        !*/\n\n        public:\n\n            linker(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc\n                    - dlib::thread_error\n            !*/\n\n            linker (\n                connection& a,\n                connection& b\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                    - immediately invokes link(a,b); \n                      (i.e. using this constructor is the same as creating a linker with\n                      the default constructor and then immediately invoking link() on it)\n                throws\n                    - std::bad_alloc\n                    - dlib::thread_error\n            !*/\n\n            virtual ~linker(\n            ); \n            /*!\n                ensures\n                    - all resources associated with *this have been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value \n                    - if (is_running()) then \n                        - the two connections being linked will be shutdown()\n                throws\n                    - std::bad_alloc\n                        if this exception is thrown then the linker object is unusable\n                        until clear() is called and succeeds and\n                        if is_running() then the connections will STILL be shutdown() \n                        even though an exception is being thrown\n            !*/\n\n            bool is_running(\n            ) const;\n            /*!\n                ensures\n                    - returns true if link() is running else\n                    - returns false if link() is not running or has released all its \n                      resources and is about to terminate\n                throws\n                    - std::bad_alloc\n            !*/\n\n\n            void link (\n                connection& a,\n                connection& b\n            );\n            /*!\n                requires\n                    - is_running() == false\n                ensures\n                    - all incoming data from connection a will be forwarded to b \n                    - all incoming data from connection b will be forwarded to a \n                    - #a and #b will have been shutdown() \n                    - link() will block until both of the connections have ended\n                      or an error occurs                     \n                throws\n                    - std::bad_alloc\n                        link() may throw this exception and if it does then the object \n                        will be unusable until clear() is called and succeeds and\n                        connections a and b will be shutdown()\n                    - dlib::socket_error\n                        link() will throw a this exception if one of the connections\n                        returns an error value (being shutdown is not an error). \n                        If this happens then the linker object will be cleared and \n                        have its initial value.  note that if this happens then the \n                        connections being linked will be shutdown()\n                    - dlib::thread_error\n                        link() will throw a this exception if there is a problem \n                        creating new threads.  Or it may throw this exception if there\n                        is a problem creating threading objects. If this happens \n                        then the linker object will be cleared and have its initial value.\n                        note that if this happens then the connections being linked will\n                        be shutdown().\n            !*/\n\n        private:\n\n            // restricted functions\n            linker(linker&);        // copy constructor\n            linker& operator=(linker&);    // assignment operator\n    };\n\n}\n\n#endif // DLIB_LINKER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/linker.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LINKEr_\n#define DLIB_LINKEr_\n\n#include \"linker/linker_kernel_1.h\"\n\n#endif // DLIB_LINKEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/locale",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/logger/extra_logger_headers.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_EXTRA_LOGGER_HEADERs_CPP_\n#define DLIB_EXTRA_LOGGER_HEADERs_CPP_\n\n#include \"extra_logger_headers.h\"\n#include <ctime>\n#include <cstring>\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    void print_datetime_logger_header (\n        std::ostream& out,\n        const std::string& logger_name,\n        const log_level& l,\n        const uint64 thread_id\n    )\n    {\n        using namespace std;\n        char* buf;\n\n        time_t t = time(0);\n        buf = ctime(&t);\n        // remove the trailing '\\n'\n        size_t size = strlen(buf);\n        buf[size-1] = '\\0';\n\n        out << l.name << \" (\" << buf << \") [\" << thread_id << \"] \" << logger_name << \": \";\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_EXTRA_LOGGER_HEADERs_CPP_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/logger/extra_logger_headers.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_EXTRA_LOGGER_HEADERs_\n#define DLIB_EXTRA_LOGGER_HEADERs_\n\n#include \"logger_kernel_abstract.h\"\n#include \"logger_kernel_1.h\"\n#include <iostream>\n#include <string>\n#include \"../uintn.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    void print_datetime_logger_header (\n        std::ostream& out,\n        const std::string& logger_name,\n        const log_level& l,\n        const uint64 thread_id\n    );\n    /*!\n        requires\n            - is not called more than once at a time (i.e. is not called from multiple\n              threads at the same time).\n        ensures\n            - let DATE be the current date and time (e.g. Thu Aug 31 16:41:52 2006).  \n            - prints a string to out in the form:  \"l.name (DATE) [thread_id] logger_name:\"\n    !*/\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#ifdef NO_MAKEFILE\n#include \"extra_logger_headers.cpp\"\n#endif\n\n#endif // DLIB_EXTRA_LOGGER_HEADERs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/logger/logger_config_file.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LOGGER_CONFIg_FILE_CPP\n#define DLIB_LOGGER_CONFIg_FILE_CPP\n\n#include \"logger_config_file.h\"\n#include <string>\n#include \"../config_reader.h\"\n#include <fstream>\n#include <sstream>\n#include \"../error.h\"\n#include \"../map.h\"\n#include \"../string.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    namespace logger_config_file_helpers \n    {\n        typedef config_reader::kernel_1a cr_type;\n\n// ----------------------------------------------------------------------------------------\n\n        std::ostream& get_file_stream (\n            const std::string& file_name\n        )\n        {\n            using namespace std;\n            static dlib::mutex m;\n            auto_mutex M(m);\n            static dlib::map<string,ostream*>::kernel_1a_c file_map;\n\n            if (file_map.is_in_domain(file_name) == false)\n            {\n                // We won't ever delete this output stream.  It should be around for the\n                // entire life of the program so just let the OS take care of it.\n                ostream* fout = new ofstream(file_name.c_str());\n                if (!(*fout))\n                {\n                    delete fout;\n                    throw error(\"logger_config: unable to open output file \" + file_name);\n                }\n\n                // add this file to our file map\n                string temp(file_name);\n                file_map.add(temp,fout);\n            }\n\n            return *file_map[file_name];\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        log_level string_to_log_level (\n            const std::string& level \n        )\n        {\n            using namespace std;\n            if (level == \"LALL\" || level == \"ALL\" || level == \"all\")\n                return LALL;\n            else if (level == \"LNONE\" || level == \"NONE\" || level == \"none\")\n                return LNONE;\n            else if (level == \"LTRACE\" || level == \"TRACE\" || level == \"trace\")\n                return LTRACE;\n            else if (level == \"LDEBUG\" || level == \"DEBUG\" || level == \"debug\")\n                return LDEBUG;\n            else if (level == \"LINFO\" || level == \"INFO\" || level == \"info\")\n                return LINFO;\n            else if (level == \"LWARN\" || level == \"WARN\" || level == \"warn\")\n                return LWARN;\n            else if (level == \"LERROR\" || level == \"ERROR\" || level == \"error\")\n                return LERROR;\n            else if (level == \"LFATAL\" || level == \"FATAL\" || level == \"fatal\")\n                return LFATAL;\n            else\n            {\n                const int priority = string_cast<int>(level);\n                return log_level(priority,\"CONFIG_FILE_DEFINED\");\n            }\n        }\n\n// ----------------------------------------------------------------------------------------\n        \n        void configure_sub_blocks (\n            const cr_type& cr,\n            const std::string& name \n        )\n        {\n            using namespace std;\n\n            logger dlog(name.c_str());\n\n            if (cr.is_key_defined(\"logging_level\"))\n            {\n                dlog.set_level(string_to_log_level(cr[\"logging_level\"]));\n            }\n\n            if (cr.is_key_defined(\"output\"))\n            {\n                string output = cr[\"output\"];\n                if (output == \"cout\")\n                    dlog.set_output_stream(cout);\n                else if (output == \"cerr\")\n                    dlog.set_output_stream(cerr);\n                else if (output == \"clog\")\n                    dlog.set_output_stream(clog);\n                else\n                {\n                    istringstream sin(output);\n                    string one, two, three;\n                    sin >> one;\n                    sin >> two;\n                    sin >> three;\n                    if (one == \"file\" && three.size() == 0)\n                        dlog.set_output_stream(get_file_stream(two));\n                    else\n                        throw error(\"logger_config: invalid argument to output option: \" + output);\n                }\n\n            } // if (cr.is_key_defined(\"output\"))\n\n            // now configure all the sub-blocks\n            std_vector_c<std::string> blocks;\n            cr.get_blocks(blocks);\n            for (unsigned long i = 0; i < blocks.size(); ++i)\n            {\n                configure_sub_blocks(cr.block(blocks[i]), name + \".\" + blocks[i]);\n            }\n\n        }\n\n// ----------------------------------------------------------------------------------------\n\n    } // namespace\n\n// ----------------------------------------------------------------------------------------\n\n    void configure_loggers_from_file (\n        const std::string& file_name\n    )\n    {\n        using namespace logger_config_file_helpers;\n        using namespace std;\n        ifstream fin(file_name.c_str());\n\n        if (!fin)\n            throw logger_config_file_error(\"logger_config: unable to open config file \" + file_name);\n\n\n        cr_type main_cr;\n        main_cr.load_from(fin);\n\n\n        if (main_cr.is_block_defined(\"logger_config\"))\n        {\n            const cr_type& cr = main_cr.block(\"logger_config\");\n\n            if (cr.is_key_defined(\"logging_level\"))\n            {\n                set_all_logging_levels(string_to_log_level(cr[\"logging_level\"]));\n            }\n\n            if (cr.is_key_defined(\"output\"))\n            {\n                string output = cr[\"output\"];\n                if (output == \"cout\")\n                    set_all_logging_output_streams(cout);\n                else if (output == \"cerr\")\n                    set_all_logging_output_streams(cerr);\n                else if (output == \"clog\")\n                    set_all_logging_output_streams(clog);\n                else\n                {\n                    istringstream sin(output);\n                    string one, two, three;\n                    sin >> one;\n                    sin >> two;\n                    sin >> three;\n                    if (one == \"file\" && three.size() == 0)\n                        set_all_logging_output_streams(get_file_stream(two));\n                    else\n                        throw logger_config_file_error(\"logger_config: invalid argument to output option: \" + output);\n                }\n\n            } // if (cr.is_key_defined(\"output\"))\n\n            // now configure all the sub-blocks\n            std_vector_c<std::string> blocks;\n            cr.get_blocks(blocks);\n            for (unsigned long i = 0; i < blocks.size(); ++i)\n            {\n                configure_sub_blocks(cr.block(blocks[i]), blocks[i]);\n            }\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LOGGER_CONFIg_FILE_CPP\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/logger/logger_config_file.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LOGGER_CONFIg_FILE_\n#define DLIB_LOGGER_CONFIg_FILE_ \n\n#include \"logger_kernel_abstract.h\"\n#include \"logger_kernel_1.h\"\n#include <string>\n#include \"../config_reader.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    class logger_config_file_error : public error \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is the exception class used by the configure_loggers_from_file()\n                function defined below.\n        !*/\n    public: \n        logger_config_file_error(const std::string& s):error(s){}\n    };\n\n    void configure_loggers_from_file (\n        const std::string& file_name\n    );\n    /*!\n        ensures\n            - configures the loggers with the contents of the file_name file\n        throws\n            - dlib::logger_config_file_error\n                this exception is thrown if there is a problem reading the config file\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    /*!  \n        #  -----------------------------------------------\n        #  ------------- EXAMPLE CONFIG FILE -------------\n        #  -----------------------------------------------\n\n        # The overall format of the config file is the same as the one defined by\n        # the config_reader component of this library.  \n        \n        # This line is a comment line\n\n        # The config file always has a block named logger_config.  This is where all the \n        # config data for the loggers reside.\n        logger_config\n        {\n            # This sets all loggers to the level LINFO since it is just inside the \n            # logger_config block\n            logging_level = info\n\n            # Alternatively we could specify a user defined logging level by\n            # supplying a priority number.  The following line would specify \n            # that only logging levels at or above 100 are printed.  (note that \n            # you would have to comment out the logging_level statement above \n            # to avoid a conflict).\n            # logging_level = 100 \n\n            parent_logger \n            {\n                # This sets all loggers named \"parent_logger\" or children of\n                # loggers with that name to not log at all (i.e. to logging level\n                # LNONE).\n                logging_level = none\n            }\n\n\n            parent_logger2\n            {\n                # set loggers named \"parent_logger2\" and its children loggers\n                # to write their output to a file named out.txt\n                output = file out.txt \n\n                child_logger\n                {\n                    # Set loggers named \"parent_logger2.child_logger\" and children of loggers\n                    # with this name to logging level LALL\n                    logging_level = all\n\n                    # Note that this logger will also log to out.txt because that is what\n                    # its parent does and we haven't overridden it here with something else.\n                    # if we wanted this logger to write to cout instead we could uncomment\n                    # the following line:\n                    # output = cout\n                }\n            }\n        }\n\n        # So in summary, all logger config stuff goes inside a block named logger_config.  Then\n        # inside that block all blocks must be the names of loggers.  There are only two keys,\n        # logging_level and output.\n        #\n        # The valid values of logging_level are:\n        #   \"LALL\", \"LNONE\", \"LTRACE\", \"LDEBUG\", \"LINFO\", \"LWARN\", \"LERROR\", \"LFATAL\",  \n        #   \"ALL\",   \"NONE\",  \"TRACE\",  \"DEBUG\",  \"INFO\",  \"WARN\",  \"ERROR\",  \"FATAL\", \n        #   \"all\",   \"none\",  \"trace\",  \"debug\",  \"info\",  \"warn\",  \"error\",  \"fatal\", or  \n        #   any integral value\n        # \n        # The valid values of output are:\n        #   \"cout\", \"cerr\", \"clog\", or a string of the form \"file some_file_name\"\n        #   which causes the output to be logged to the specified file.\n        #\n    !*/\n\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#ifdef NO_MAKEFILE\n#include \"logger_config_file.cpp\"\n#endif\n\n#endif // DLIB_LOGGER_CONFIg_FILE_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/logger/logger_kernel_1.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LOGGER_KERNEL_1_CPp_\n#define DLIB_LOGGER_KERNEL_1_CPp_\n\n#include \"logger_kernel_1.h\"\n#include <iostream>\n#include <sstream>\n\nnamespace dlib\n{\n    \n// ----------------------------------------------------------------------------------------\n\n    void set_all_logging_output_streams (\n        std::ostream& out_\n    )\n    {\n        logger::global_data& gd = logger::get_global_data();\n        auto_mutex M(gd.m);\n        gd.loggers.reset();\n        while (gd.loggers.move_next())\n        {\n            gd.loggers.element()->out.rdbuf(out_.rdbuf());\n            gd.loggers.element()->hook.clear();\n        }\n\n        gd.set_output_stream(\"\",out_);\n\n        // set the default hook to be an empty member function pointer\n        logger::hook_mfp hook;\n        gd.set_output_hook(\"\",hook);\n    }\n\n    void set_all_logging_levels (\n        const log_level& new_level\n    )\n    {\n        logger::global_data& gd = logger::get_global_data();\n        auto_mutex M(gd.m);\n        gd.loggers.reset();\n        while (gd.loggers.move_next())\n        {\n            gd.loggers.element()->cur_level = new_level;\n        }\n\n        gd.set_level(\"\",new_level);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace logger_helper_stuff\n    {\n        class helper\n        {\n        public:\n            helper()\n            {\n                std::ostringstream sout;\n                print_default_logger_header(sout,\"some_name\",LDEBUG,0);\n            }\n        };\n        // do this to make sure all the static members of print_default_logger_header get \n        // initialized when the program turns on.\n        static helper a;\n        // make a logger to make extra sure the static global_data object gets\n        // initialized before any threads start up.  Also do this so that there is always\n        // at least one logger so that the global data won't be deleted until the \n        // program is terminating.\n        static logger log(\"dlib\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void print_default_logger_header (\n        std::ostream& out,\n        const std::string& logger_name,\n        const log_level& l,\n        const uint64 thread_id\n    )\n    {\n        using namespace std;\n        static timestamper ts;\n        static const uint64 first_time = ts.get_timestamp();\n\n        const uint64 cur_time = (ts.get_timestamp() - first_time)/1000;\n        streamsize old_width = out.width(); out.width(5);\n        out << cur_time << \" \" << l.name; \n        out.width(old_width);\n\n        out << \" [\" << thread_id << \"] \" << logger_name << \": \";\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                 global_data stuff\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    logger::global_data::\n    ~global_data (\n    )\n    {\n        unregister_thread_end_handler(*this,&global_data::thread_end_handler);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    logger::global_data::\n    global_data(\n    ) : \n        next_thread_name(1) \n    { \n        // make sure the main program thread always has id 0.  Since there is\n        // a global logger object declared in this file we should expect that \n        // the global_data object will be initialized in the main program thread\n        // so if we call get_thread_id() now we should get the main thread id.\n        thread_id_type main_id = get_thread_id();\n        uint64 id_zero = 0;\n        thread_names.add(main_id,id_zero);\n\n        // set up the defaults\n        auto_flush_table.val = true;\n        streambuf_table.val = std::cout.rdbuf(); \n        header_table.val = print_default_logger_header;\n\n        // also allocate an initial buffer for hook based logging\n        hookbuf.buffer.reserve(1000);\n    }\n\n    logger::global_data::level_container::\n    level_container (\n    ) : val(300,\"ERROR\") {}\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    const T& search_tables (\n        const T& c,\n        const std::string& name\n    )\n    {\n        if (c.table.size() == 0 || name.size() == 0)\n            return c;\n\n        const std::string::size_type pos = name.find_first_of(\".\");\n        const std::string first = name.substr(0,pos);\n        std::string last;\n        if (pos != std::string::npos)\n            last = name.substr(pos+1);\n\n        if (c.table.is_in_domain(first))\n        {\n            return search_tables(*c.table[first], last); \n        }\n        else\n        {\n            return c;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    void assign_tables (\n        T& c,\n        const std::string& name,\n        const U& val\n    )\n    {\n        if (name.size() == 0)\n        {\n            c.val = val;\n            c.table.clear();\n            return;\n        }\n\n        const std::string::size_type pos = name.find_first_of(\".\");\n        std::string first = name.substr(0,pos);\n        std::string last;\n        if (pos != std::string::npos)\n            last = name.substr(pos+1);\n\n        if (c.table.is_in_domain(first))\n        {\n            assign_tables(*c.table[first], last, val); \n        }\n        else\n        {\n            scoped_ptr<T> temp (new T);\n            temp->val = c.val;\n            assign_tables(*temp, last, val);\n            c.table.add(first,temp);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const log_level logger::global_data::\n    level (\n        const std::string& name\n    ) const \n    {  \n        auto_mutex M(m);\n        return search_tables(level_table, name).val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void logger::global_data::\n    set_level (\n        const std::string& name,\n        const log_level& new_level\n    )\n    {\n        auto_mutex M(m);\n        assign_tables(level_table, name, new_level);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool logger::global_data::\n    auto_flush (\n        const std::string& name\n    ) const\n    {\n        auto_mutex M(m);\n        return search_tables(auto_flush_table, name).val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void logger::global_data::\n    set_auto_flush (\n        const std::string& name,\n        bool enabled\n    )\n    {\n        auto_mutex M(m);\n        assign_tables(auto_flush_table, name, enabled);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::streambuf* logger::global_data::\n    output_streambuf (\n        const std::string& name\n    )\n    {\n        auto_mutex M(m);\n        return search_tables(streambuf_table, name).val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void logger::global_data::\n    set_output_stream (\n        const std::string& name,\n        std::ostream& out_\n    )\n    {\n        auto_mutex M(m);\n        assign_tables( streambuf_table, name, out_.rdbuf());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void logger::global_data::\n    set_output_stream (\n        const std::string& name,\n        std::streambuf& buf \n    )\n    {\n        auto_mutex M(m);\n        assign_tables( streambuf_table, name, &buf);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    logger::hook_mfp logger::global_data::\n    output_hook (\n        const std::string& name\n    )\n    {\n        auto_mutex M(m);\n        return search_tables(hook_table, name).val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void logger::global_data::\n    set_output_hook (\n        const std::string& name,\n        const hook_mfp& hook\n    )\n    {\n        auto_mutex M(m);\n        assign_tables( hook_table, name, hook);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    logger::print_header_type logger::global_data::\n    logger_header (\n        const std::string& name\n    )\n    {\n        auto_mutex M(m);\n        return search_tables(header_table, name).val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void logger::global_data::\n    set_logger_header (\n        const std::string& name,\n        print_header_type ph\n    )\n    {\n        auto_mutex M(m);\n        assign_tables(header_table, name, ph);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    logger::global_data& logger::get_global_data()\n    {\n        // Allocate the global_data on the heap rather than on the stack because\n        // we want to guard against the case where this static object would be destroyed\n        // during program termination BEFORE all logger objects are destroyed.\n        static global_data* gd = new global_data;\n        return *gd;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void logger::global_data::\n    thread_end_handler (\n    )\n    {\n        auto_mutex M(m);\n        thread_id_type id = get_thread_id();\n        thread_id_type junkd;\n        uint64 junkr;\n        thread_names.remove(id,junkd,junkr);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    uint64 logger::global_data::\n    get_thread_name (\n    )\n    {\n        thread_id_type id = get_thread_id();\n        uint64 thread_name;\n        if (thread_names.is_in_domain(id))\n        {\n            thread_name = thread_names[id];\n        }\n        else\n        {\n            if (is_dlib_thread(id))\n                register_thread_end_handler(*this,&global_data::thread_end_handler);\n            thread_name = next_thread_name;\n            thread_names.add(id,thread_name);\n            thread_name = next_thread_name;\n            ++next_thread_name;\n        }\n        return thread_name;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//               logger_stream stuff\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void logger::logger_stream::\n    print_header_and_stuff (\n    )\n    {\n        if (!been_used)\n        {\n            log.gd.m.lock();\n\n            // Check if the output hook is setup.  If it isn't then we print the logger\n            // header like normal.  Otherwise we need to remember to clear out the output\n            // stringstream we always write to.\n            if (log.hook.is_set() == false)\n            {\n                log.logger_header()(log.out,log.name(),l,log.gd.get_thread_name());\n            }\n            else\n            {\n                // Make sure the hook buffer doesn't have any old data in it before we start\n                // logging a new message into it.\n                log.gd.hookbuf.buffer.resize(0);\n            }\n            been_used = true;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void logger::logger_stream::\n    print_end_of_line (\n    )\n    {\n        auto_unlock M(log.gd.m);\n\n        if (log.hook.is_set() == false)\n        {\n            if (log.auto_flush_enabled)\n                log.out << std::endl;\n            else\n                log.out << \"\\n\";\n        }\n        else\n        {\n            // Make sure the buffer is a proper C-string\n            log.gd.hookbuf.buffer.push_back('\\0');\n            // call the output hook with all the info regarding this log message.\n            log.hook(log.name(), l, log.gd.get_thread_name(), &log.gd.hookbuf.buffer[0]);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//         logger stuff\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    logger::\n    logger (  \n        const char* name_\n    ) : \n        gd(get_global_data()),\n        logger_name(name_),\n        out(gd.output_streambuf(logger_name)),\n        cur_level(gd.level(logger_name))\n    {\n        DLIB_ASSERT(name_[0] != '\\0',\n                    \"\\tlogger::logger()\"\n                    << \"\\n\\tYou can't make a logger with an empty name\"\n                    << \"\\n\\tthis: \" << this\n        );\n\n        auto_mutex M(gd.m);\n        logger* temp = this;\n        gd.loggers.add(temp);\n\n        // load the appropriate settings\n        print_header        = gd.logger_header(logger_name);\n        auto_flush_enabled  = gd.auto_flush(logger_name);\n        hook                = gd.output_hook(logger_name);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    logger::\n    ~logger (\n    ) \n    { \n        gd.m.lock();\n        gd.loggers.destroy(this);            \n        // if this was the last logger then delete the global data\n        if (gd.loggers.size() == 0)\n        {\n            gd.m.unlock();\n            delete &gd;\n        }\n        else\n        {\n            gd.m.unlock();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LOGGER_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/logger/logger_kernel_1.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LOGGER_KERNEl_1_\n#define DLIB_LOGGER_KERNEl_1_\n\n#include \"../threads.h\"\n#include \"../misc_api.h\"\n#include \"../set.h\"\n#include \"logger_kernel_abstract.h\"\n#include <limits>\n#include <cstring>\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include \"../uintn.h\"\n#include \"../map.h\"\n#include \"../smart_pointers.h\"\n#include \"../member_function_pointer.h\"\n#include <streambuf>\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class log_level\n    {\n    public:\n        log_level(\n            int priority_, \n            const char* name_\n        ) : \n            priority(priority_)\n        {\n            strncpy(name,name_,19);\n            name[19] = '\\0';\n        }\n\n        bool operator< (const log_level& rhs) const { return priority <  rhs.priority; }\n        bool operator<=(const log_level& rhs) const { return priority <= rhs.priority; }\n        bool operator> (const log_level& rhs) const { return priority >  rhs.priority; }\n        bool operator>=(const log_level& rhs) const { return priority >= rhs.priority; }\n\n        int priority;\n        char name[20];\n    };\n\n    inline std::ostream& operator<< (std::ostream& out, const log_level& item)\n    {\n        out << item.name;\n        return out;\n    }\n\n    const log_level LALL  (std::numeric_limits<int>::min(),\"ALL\");\n    const log_level LNONE (std::numeric_limits<int>::max(),\"NONE\");\n    const log_level LTRACE(-100,\"TRACE\");\n    const log_level LDEBUG(0  ,\"DEBUG\");\n    const log_level LINFO (100,\"INFO \");\n    const log_level LWARN (200,\"WARN \");\n    const log_level LERROR(300,\"ERROR\");\n    const log_level LFATAL(400,\"FATAL\");\n\n// ----------------------------------------------------------------------------------------\n\n    void set_all_logging_output_streams (\n        std::ostream& out\n    );\n\n    void set_all_logging_levels (\n        const log_level& new_level\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    void print_default_logger_header (\n        std::ostream& out,\n        const std::string& logger_name,\n        const log_level& l,\n        const uint64 thread_id\n    );\n\n    template <\n        typename T\n        >\n    void set_all_logging_output_hooks (\n        T& object,\n        void (T::*hook_)(const std::string& logger_name, \n                         const log_level& l,\n                         const uint64 thread_id,\n                         const char* message_to_log)\n    );\n\n    template <\n        typename T\n        >\n    void set_all_logging_output_hooks (\n        T& object\n    )\n    {\n        set_all_logging_output_hooks(object, &T::log);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class logger \n    {\n        /*!\n            INITIAL VALUE\n                - print_header == print_default_logger_header\n                - out.rdbuf() == std::cout.rdbuf()\n                - cur_level == LERROR\n                - auto_flush_enabled == true \n                - hook.is_set() == false\n\n            CONVENTION\n                - print_header == logger_header()\n                - if (hook.is_set() == false) then\n                    - out.rdbuf() == output_streambuf()\n                - else\n                    - out.rdbuf() == &gd.hookbuf\n                    - output_streambuf() == 0\n\n                - cur_level == level()\n                - logger_name == name()\n                - auto_flush_enabled == auto_flush()\n\n                - logger::gd::loggers == a set containing all currently existing loggers.\n                - logger::gd::m == the mutex used to lock everything in the logger\n                - logger::gd::thread_names == a map of thread ids to thread names.  \n                - logger::gd::next_thread_name == the next thread name that will be given out\n                  to a thread when we find that it isn't already in thread_names.\n        !*/\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        class logger_stream\n        {\n            /*!\n                INITIAL VALUE\n                    - been_used == false\n\n                CONVENTION\n                    - enabled == is_enabled()\n                    - if (been_used) then\n                        - logger::gd::m is locked\n                        - someone has used the << operator to write something to the\n                          output stream.\n            !*/\n        public:\n            logger_stream (\n                const log_level& l_,\n                logger& log_\n            ) :\n                l(l_),\n                log(log_),\n                been_used(false),\n                enabled (l.priority >= log.cur_level.priority)\n            {}\n\n            inline ~logger_stream(\n            )\n            {\n                if (!been_used)\n                {\n                    return;\n                }\n                else\n                {\n                    print_end_of_line();\n                }\n            }\n\n            bool is_enabled (\n            ) const { return enabled; }\n\n            template <typename T>\n            inline logger_stream& operator << (\n                const T& item\n            )\n            {\n                if (!enabled)\n                {\n                    return *this;\n                }\n                else\n                {\n                    print_header_and_stuff();\n                    log.out << item;\n                    return *this;\n                }\n            }\n\n        private:\n\n            void print_header_and_stuff (\n            );\n            /*!\n                ensures\n                    - if (!been_used) then\n                        - prints the logger header \n                        - locks log.gd.m\n                        - #been_used == true\n            !*/\n\n            void print_end_of_line (\n            );\n            /*!\n                ensures\n                    - prints a newline to log.out\n                    - unlocks log.gd.m\n            !*/\n\n            const log_level& l;\n            logger& log;\n            bool been_used;\n            const bool enabled;\n        }; // end of class logger_stream\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        friend class logger_stream;\n    public:\n\n        typedef member_function_pointer<const std::string&, const log_level&, \n                                        const uint64, const char*> hook_mfp;\n\n        logger (  \n            const char* name_\n        );\n\n        virtual ~logger (\n        ); \n\n        const std::string& name (\n        ) const { return logger_name; }\n\n        logger_stream operator << (\n            const log_level& l\n        ) const { return logger_stream(l,const_cast<logger&>(*this)); }\n\n        bool is_child_of (\n            const logger& log\n        ) const\n        {\n            return (name().find(log.name() + \".\") == 0) || (log.name() == name());\n        }\n\n        const log_level level (\n        ) const \n        { \n            auto_mutex M(gd.m);\n            return log_level(cur_level); \n        };\n\n        void set_level (\n            const log_level& new_level\n        )\n        {\n            auto_mutex M(gd.m);\n            gd.loggers.reset();\n            while (gd.loggers.move_next())\n            {\n                if (gd.loggers.element()->is_child_of(*this))\n                    gd.loggers.element()->cur_level = new_level;\n            }\n\n            gd.set_level(logger_name, new_level);\n        }\n\n        bool auto_flush (\n        ) const \n        { \n            auto_mutex M(gd.m);\n            return auto_flush_enabled;\n        };\n\n        void set_auto_flush (\n            bool enabled\n        )\n        {\n            auto_mutex M(gd.m);\n            gd.loggers.reset();\n            while (gd.loggers.move_next())\n            {\n                if (gd.loggers.element()->is_child_of(*this))\n                    gd.loggers.element()->auto_flush_enabled = enabled;\n            }\n\n            gd.set_auto_flush(logger_name, enabled);\n        }\n\n        std::streambuf* output_streambuf (\n        )\n        {\n            auto_mutex M(gd.m);\n\n            // if there is an output hook set then we are supposed to return 0.\n            if (hook)\n                return 0;\n            else\n                return out.rdbuf();\n        }\n\n        template <\n            typename T\n            >\n        void set_output_hook (\n            T& object,\n            void (T::*hook_)(const std::string& logger_name, \n                            const log_level& l,\n                            const uint64 thread_id,\n                            const char* message_to_log)\n        )\n        {\n            auto_mutex M(gd.m);\n            hook.set(object, hook_);\n\n            gd.loggers.reset();\n            while (gd.loggers.move_next())\n            {\n                if (gd.loggers.element()->is_child_of(*this))\n                {\n                    gd.loggers.element()->out.rdbuf(&gd.hookbuf);\n                    gd.loggers.element()->hook = hook;\n                }\n            }\n\n            gd.set_output_hook(logger_name, hook);\n            gd.set_output_stream(logger_name, gd.hookbuf);\n        }\n\n        void set_output_stream (\n            std::ostream& out_\n        ) \n        {\n            auto_mutex M(gd.m);\n            gd.loggers.reset();\n            while (gd.loggers.move_next())\n            {\n                if (gd.loggers.element()->is_child_of(*this))\n                {\n                    gd.loggers.element()->out.rdbuf(out_.rdbuf());\n                    gd.loggers.element()->hook.clear();\n                }\n            }\n\n            gd.set_output_stream(logger_name, out_);\n\n            hook.clear();\n            gd.set_output_hook(logger_name, hook);\n        }\n\n        typedef void (*print_header_type)(\n            std::ostream& out, \n            const std::string& logger_name, \n            const log_level& l,\n            const uint64 thread_id\n        );\n\n        print_header_type logger_header (\n        ) const { return print_header; }\n\n        void set_logger_header (\n            print_header_type ph\n        )\n        {\n            auto_mutex M(gd.m);\n            gd.loggers.reset();\n            while (gd.loggers.move_next())\n            {\n                if (gd.loggers.element()->is_child_of(*this))\n                    gd.loggers.element()->print_header = ph;\n            }\n\n            gd.set_logger_header(logger_name, ph);\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        struct global_data\n        {\n            rmutex m;\n            set<logger*>::kernel_1b loggers;\n            map<thread_id_type,uint64>::kernel_1b thread_names;\n            uint64 next_thread_name;\n\n            // Make a very simple streambuf that writes characters into a std::vector<char>.  We can\n            // use this as the output target for hooks.  The reason we don't just use a std::ostringstream\n            // instead is that this way we can be guaranteed that logging doesn't perform memory allocations.\n            // This is because a std::vector never frees memory.  I.e. its capacity() doesn't go down when\n            // you resize it back to 0.  It just stays the same.\n            class hook_streambuf : public std::streambuf\n            {\n            public:\n                std::vector<char> buffer;\n                int_type overflow ( int_type c)\n                {\n                    if (c != EOF) buffer.push_back(static_cast<char>(c));\n                    return c;\n                }\n\n                std::streamsize xsputn ( const char* s, std::streamsize num)\n                {\n                    buffer.insert(buffer.end(), s, s+num);\n                    return num;\n                }\n            };\n\n            hook_streambuf hookbuf;\n\n            global_data (\n            );\n\n            ~global_data(\n            );\n\n            uint64 get_thread_name (\n            );\n            /*!\n                requires\n                    - m is locked\n                ensures\n                    - returns a unique id for the calling thread.  also makes the number\n                      small and nice unlike what you get from get_thread_id()\n            !*/\n\n            void thread_end_handler (\n            );\n            /*!\n                ensures\n                    - removes the terminated thread from thread_names\n            !*/\n\n            struct level_container\n            {\n                level_container ();\n\n                log_level val;\n                map<std::string,scoped_ptr<level_container> >::kernel_1b_c table;\n            } level_table;\n\n            const log_level level (\n                const std::string& name\n            ) const; \n            /*!\n                ensures\n                    - returns the level loggers with the given name are supposed \n                      to have\n            !*/\n\n            void set_level (\n                const std::string& name,\n                const log_level& new_level\n            );\n            /*!\n                ensures\n                    - for all children C of name:\n                        - #level(C) == new_level\n                    - if name == \"\" then\n                        - for all loggers L:\n                            - #level(L) == new_level\n            !*/\n\n            struct auto_flush_container\n            {\n                bool val;\n                map<std::string,scoped_ptr<auto_flush_container> >::kernel_1b_c table;\n            } auto_flush_table;\n\n            bool auto_flush (\n                const std::string& name\n            ) const;\n            /*!\n                ensures\n                    - returns the auto_flush value loggers with the given name are supposed \n                      to have\n            !*/\n\n            void set_auto_flush (\n                const std::string& name,\n                bool enabled\n            );\n            /*!\n                ensures\n                    - for all children C of name:\n                        - #auto_flush_enabled(C) == enabled \n                    - if name == \"\" then\n                        - for all loggers L:\n                            - #auto_flush_enabled(L) == enabled \n            !*/\n\n            struct output_streambuf_container\n            {\n                std::streambuf* val;\n                map<std::string,scoped_ptr<output_streambuf_container> >::kernel_1b_c table;\n            } streambuf_table;\n\n            std::streambuf* output_streambuf (\n                const std::string& name\n            );\n            /*!\n                ensures\n                    - returns the streambuf loggers with the given name are supposed \n                      to have\n            !*/\n\n            void set_output_stream (\n                const std::string& name,\n                std::ostream& out_\n            );\n            /*!\n                ensures\n                    - for all children C of name:\n                        - #output_streambuf(C) == out_.rdbuf() \n                    - if name == \"\" then\n                        - for all loggers L:\n                            - #output_streambuf(L) == out_.rdbuf() \n            !*/\n\n            void set_output_stream (\n                const std::string& name,\n                std::streambuf& buf \n            );\n            /*!\n                ensures\n                    - for all children C of name:\n                        - #output_streambuf(C) == &buf \n                    - if name == \"\" then\n                        - for all loggers L:\n                            - #output_streambuf(L) == &buf \n            !*/\n\n            struct output_hook_container\n            {\n                hook_mfp val;\n                map<std::string,scoped_ptr<output_hook_container> >::kernel_1b_c table;\n            } hook_table;\n\n            hook_mfp output_hook (\n                const std::string& name\n            );\n            /*!\n                ensures\n                    - returns the hook loggers with the given name are supposed \n                      to have\n            !*/\n\n            void set_output_hook (\n                const std::string& name,\n                const hook_mfp& hook\n            );\n            /*!\n                ensures\n                    - for all children C of name:\n                        - #output_hook(C) == hook \n                    - if name == \"\" then\n                        - for all loggers L:\n                            - #output_hook(L) == hook \n            !*/\n\n            struct logger_header_container\n            {\n                print_header_type val;\n                map<std::string,scoped_ptr<logger_header_container> >::kernel_1b_c table;\n            } header_table;\n\n            print_header_type logger_header (\n                const std::string& name\n            );\n            /*!\n                ensures\n                    - returns the header function loggers with the given name are supposed \n                      to have\n            !*/\n\n            void set_logger_header (\n                const std::string& name,\n                print_header_type ph\n            );\n            /*!\n                ensures\n                    - for all children C of name:\n                        - #logger_header(C) == ph \n                    - if name == \"\" then\n                        - for all loggers L:\n                            - #logger_header(L) == ph \n            !*/\n\n        }; // end of struct global_data\n\n        static global_data& get_global_data();\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        friend void set_all_logging_levels (\n            const log_level& new_level\n        );\n\n        friend void set_all_logging_output_streams (\n            std::ostream& out\n        );\n\n        template <\n            typename T\n            >\n        friend void set_all_logging_output_hooks (\n            T& object,\n            void (T::*hook_)(const std::string& logger_name, \n                            const log_level& l,\n                            const uint64 thread_id,\n                            const char* message_to_log)\n        )\n        {\n            logger::hook_mfp hook;\n\n            // There is a bug in one of the versions (but not all apparently) of \n            // Visual studio 2005 that causes it to error out if <T> isn't in the\n            // following line of code.  However, there is also a bug in gcc-3.3 \n            // that causes it to error out if <T> is present.  So this works around\n            // this problem.\n#if defined(_MSC_VER) && _MSC_VER == 1400\n            hook.set<T>(object, hook_);\n#else\n            hook.set(object, hook_);\n#endif\n\n            logger::global_data& gd = logger::get_global_data();\n            auto_mutex M(gd.m);\n            gd.loggers.reset();\n            while (gd.loggers.move_next())\n            {\n                gd.loggers.element()->out.rdbuf(&gd.hookbuf);\n                gd.loggers.element()->hook = hook;\n            }\n\n            gd.set_output_stream(\"\",gd.hookbuf);\n            gd.set_output_hook(\"\",hook);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        global_data& gd;\n\n        const std::string logger_name;\n\n        print_header_type print_header;\n        bool auto_flush_enabled;\n        std::ostream out;\n        log_level cur_level;\n\n        hook_mfp hook;\n\n\n        // restricted functions\n        logger(const logger&);        // copy constructor\n        logger& operator=(const logger&);    // assignment operator\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n\n\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"logger_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_LOGGER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/logger/logger_kernel_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LOGGER_KERNEl_ABSTRACT_\n#ifdef DLIB_LOGGER_KERNEl_ABSTRACT_\n\n#include \"../threads.h\"\n#include <limits>\n#include <string>\n#include <iostream>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class log_level\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple named level to log at.  It contains a numeric \n                priority and a name to use in the logging messages.\n        !*/\n    public:\n        log_level(\n            int priority_, \n            const char* name_\n        );  \n        /*!\n            ensures\n                - #priority = priority_\n                - the first 19 characters of name_ are copied into name and name\n                  is null terminated.\n        !*/\n\n        bool operator< (const log_level& rhs) const { return priority <  rhs.priority; }\n        bool operator<=(const log_level& rhs) const { return priority <= rhs.priority; }\n        bool operator> (const log_level& rhs) const { return priority >  rhs.priority; }\n        bool operator>=(const log_level& rhs) const { return priority >= rhs.priority; }\n\n        int priority;\n        char name[20];\n    };\n\n    inline std::ostream& operator<< (std::ostream& out, const log_level& item);\n    /*!\n        ensures\n            - performs out << item.name\n            - returns out\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const log_level LALL  (std::numeric_limits<int>::min(),\"ALL\");\n    const log_level LNONE (std::numeric_limits<int>::max(),\"NONE\");\n    const log_level LTRACE(-100,\"TRACE\");\n    const log_level LDEBUG(0   ,\"DEBUG\");\n    const log_level LINFO (100 ,\"INFO \");\n    const log_level LWARN (200 ,\"WARN \");\n    const log_level LERROR(300 ,\"ERROR\");\n    const log_level LFATAL(400 ,\"FATAL\");\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void set_all_logging_output_streams (\n        std::ostream& out\n    );\n    /*!\n        ensures\n            - for all loggers L (even loggers not yet constructed):\n                - #L.output_streambuf() == out.rdbuf() \n                - Removes any previous output hook from L.  So now the logger\n                  L will write all its messages to the given output stream.\n        throws\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void set_all_logging_output_hooks (\n        T& object,\n        void (T::*hook)(const std::string& logger_name, \n                        const log_level& l,\n                        const uint64 thread_id,\n                        const char* message_to_log)\n    );\n    /*!\n        ensures\n            - for all loggers L (even loggers not yet constructed):\n                - #L.output_streambuf() == 0\n                - performs the equivalent to calling L.set_output_hook(object, hook);\n                  (i.e. sets all loggers so that they will use the given hook function)\n        throws\n            - std::bad_alloc\n    !*/\n\n    template <\n        typename T\n        >\n    void set_all_logging_output_hooks (\n        T& object\n    );\n    /*!\n        ensures\n            - calls set_all_logging_output_hooks(object, &T::log);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void set_all_logging_levels (\n        const log_level& new_level\n    );\n    /*!\n        ensures\n            - for all loggers L (even loggers not yet constructed):\n                - #L.level() == new_level\n        throws\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void print_default_logger_header (\n        std::ostream& out,\n        const std::string& logger_name,\n        const log_level& l,\n        const uint64 thread_id\n    );\n    /*!\n        requires\n            - is not called more than once at a time (i.e. is not called from multiple\n              threads at the same time).\n        ensures\n            - let MS be the number of milliseconds since program start.  \n            - prints a string to out in the form:  \"MS l.name [thread_id] logger_name:\"\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class logger \n    {\n        /*!\n            INITIAL VALUE\n                - name() == a user supplied value given to the constructor\n                - The values of level(), output_streambuf(), logger_header(), and\n                  auto_flush() are inherited from the parent of this logger. \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a logging output stream in the style of the log4j\n                logger available for Java.  \n                \n                Additionally, the logger doesn't perform any memory allocations during\n                each logging action.  It just writes directly into the user supplied output\n                stream.  Alternatively, if you use a logging output hook no memory allocations\n                are performed either.  Logging just goes straight into a memory buffer\n                which gets passed to the user supplied logging hook.\n\n            DEFAULTS\n                If the user hasn't specified values for the four inherited values level(),\n                output_streambuf(), logger_header(), or auto_flush() then the default\n                values will be used.  The defaults are as follows:\n                - level() == LERROR\n                - output_streambuf() == std::cout.rdbuf() (i.e. the default is to log\n                  to standard output).  \n                - logger_header() == print_default_logger_header\n                - auto_flush() == true\n            \n            THREAD SAFETY\n                All methods of this class are thread safe.  Note that it is safe to \n                chain calls to operator << such as:\n                    log << LINFO << \"message \" << variable << \" more message\";\n                The logger ensures that the entire statement executes atomically so the \n                message won't be broken up by other loggers in other threads.\n        !*/\n\n        class logger_stream\n        {\n        public:\n\n            bool is_enabled (\n            ) const;\n            /*!\n                ensures\n                    - returns true if this logger stream will print out items\n                      given to it by the << operator.  returns false otherwise.\n            !*/\n\n            template <typename T>\n            logger_stream& operator << (\n                const T& item\n            );\n            /*!\n                ensures\n                    - if (is_enabled()) then\n                        - writes item to this output stream\n                    - returns *this\n            !*/\n        };\n\n    public:\n\n        logger (  \n            const char* name_\n        );\n        /*!\n            requires\n                - name_ != \"\"\n            ensures                \n                - #*this is properly initialized\n                - #name() == name_\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~logger (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        const std::string& name (\n        ) const;\n        /*!\n            ensures\n                - returns the name of this logger\n        !*/\n\n        logger_stream operator << (\n            const log_level& l\n        ) const;\n        /*!\n            ensures\n                - if (l.priority >= level().priority) then\n                    - returns a logger_stream with is_enabled() == true.  I.e. this\n                      returned stream will write its output to the I/O destination \n                      used by this logger object.\n                - else\n                    - returns a logger stream with is_enabled() == false \n            throws\n                - std::bad_alloc\n        !*/\n\n        bool is_child_of (\n            const logger& log\n        ) const;\n        /*!\n            ensures\n                - if ( (name().find(log.name() + \".\") == 0) || (log.name() == name()) ) then\n                    - returns true\n                      (i.e. if log.name() + \".\" is a prefix of name() or if both *this and log\n                      have the same name then return true)\n                - else\n                    - returns false\n        !*/\n\n        const log_level level (\n        ) const;\n        /*!\n            ensures\n                - returns the current log level of this logger.\n        !*/\n\n        void set_level (\n            const log_level& new_level\n        );\n        /*!\n            ensures\n                - for all loggers L such that L.is_child_of(*this) == true:\n                    - #L.level() == new_level\n            throws\n                - std::bad_alloc\n        !*/\n\n        bool auto_flush (\n        );\n        /*!\n            ensures\n                - returns true if the output stream is flushed after every logged message.\n                  returns false otherwise.  (Note that flushing only does anything if\n                  the logger is set to use an output stream rather than a hook)\n        !*/\n\n        void set_auto_flush (\n            bool enabled\n        );\n        /*!\n            ensures\n                - for all loggers L such that L.is_child_of(*this) == true:\n                    - #L.auto_flush() == enabled \n            throws\n                - std::bad_alloc\n        !*/\n\n                \n        template <\n            typename T\n            >\n        void set_output_hook (\n            T& object,\n            void (T::*hook)(const std::string& logger_name, \n                            const log_level& l,\n                            const uint64 thread_id,\n                            const char* message_to_log)\n        );\n        /*!\n            requires\n                - hook is a valid pointer to a member function in T \n            ensures\n                - for all loggers L such that L.is_child_of(*this) == true:\n                    - #L.output_streambuf() == 0\n                    - #L will not send its log messages to an ostream object anymore.  Instead\n                      it will call the given hook member function (i.e. (object.*hook)(name,l,id,msg) )\n                      for each message that needs to be logged.\n                    - The arguments to the hook function have the following meanings:\n                        - logger_name == The name of the logger that is printing the log message.\n                        - l == The level of the logger that is printing the log message.\n                        - thread_id == A number that uniquely identifies the thread trying to log\n                          the message.  Note that this number is unique among all threads, past and\n                          present.  Also note that this id is not the same one returned by\n                          get_thread_id().\n                        - message_to_log == the actual text of the message the user is giving to\n                          the logger object to log.\n                    - All hook functions will also only be called one at a time. This means\n                      that hook functions don't need to be thread safe.\n        !*/\n\n        std::streambuf* output_streambuf (\n        );\n        /*!\n            ensures\n                - if (an output hook isn't set) then\n                    - returns the output stream buffer that this logger writes all\n                      messages to.\n                - else\n                    - returns 0\n        !*/\n\n        void set_output_stream (\n            std::ostream& out\n        );\n        /*!\n            ensures\n                - for all loggers L such that L.is_child_of(*this) == true:\n                    - #L.output_streambuf() == out.rdbuf() \n                    - Removes any previous output hook from L.  So now the logger\n                      L will write all its messages to the given output stream.\n            throws\n                - std::bad_alloc\n        !*/\n\n        typedef void (*print_header_type)(\n                std::ostream& out, \n                const std::string& logger_name, \n                const log_level& l,\n                const uint64 thread_id\n                );\n\n        print_header_type logger_header (\n        ) const;\n        /*!\n            ensures\n                - returns the function that is called to print the header information \n                  onto each logged message.  The arguments to the function have the following\n                  meanings:\n                    - out == The output stream this function writes the header to.\n                    - logger_name == The name of the logger that is printing the log message.\n                    - l == The level of the logger that is printing the log message.\n                    - thread_id == A number that uniquely identifies the thread trying to log\n                      the message.  Note that this number is unique among all threads, past and\n                      present.  Also note that this id is not the same one returned by\n                      get_thread_id().\n                - This logger_header function will also only be called once at a time. This means\n                  the logger_header function doesn't need to be thread safe.\n                - the logger_header function is only used when output_streambuf() != 0\n        !*/\n\n        void set_logger_header (\n            print_header_type print_header\n        );\n        /*!\n            ensures\n                - for all loggers L such that L.is_child_of(*this) == true:\n                    - #L.logger_header() == print_header \n            throws\n                - std::bad_alloc\n        !*/\n\n    private:\n\n        // restricted functions\n        logger(const logger&);        // copy constructor\n        logger& operator=(const logger&);    // assignment operator\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LOGGER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/logger.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LOGGEr_\n#define DLIB_LOGGEr_\n\n#include \"logger/logger_kernel_1.h\"\n#include \"logger/extra_logger_headers.h\"\n#include \"logger/logger_config_file.h\"\n\n#endif // DLIB_LOGGEr_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lsh/create_random_projection_hash.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CREATE_RANDOM_PROJECTION_HAsH_Hh_\n#define DLIB_CREATE_RANDOM_PROJECTION_HAsH_Hh_\n\n#include \"create_random_projection_hash_abstract.h\"\n#include \"projection_hash.h\"\n#include \"../matrix.h\"\n#include \"../rand.h\"\n#include \"../statistics.h\"\n#include \"../svm.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    projection_hash create_random_projection_hash (\n        const vector_type& v,\n        const int bits,\n        dlib::rand& rnd\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 < bits && bits <= 32 &&\n                    v.size() > 1,\n            \"\\t projection_hash create_random_projection_hash()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            << \"\\n\\t bits: \" << bits\n            << \"\\n\\t v.size(): \" << v.size() \n            );\n\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < v.size(); ++i)\n        {\n            DLIB_ASSERT(v[0].size() == v[i].size() && v[i].size() > 0 && is_col_vector(v[i]), \n                    \"\\t projection_hash create_random_projection_hash()\"\n                   << \"\\n\\t Invalid arguments were given to this function.\"\n                   << \"\\n\\t m(0).size(): \" << v[0].size()\n                   << \"\\n\\t m(\"<<i<<\").size(): \" << v[i].size() \n                   << \"\\n\\t is_col_vector(v[\"<<i<<\"]): \" << is_col_vector(v[i]) \n                );\n        }\n#endif\n\n        running_covariance<matrix<double> > rc;\n        for (unsigned long i = 0; i < v.size(); ++i)\n            rc.add(matrix_cast<double>(v[i]));\n\n        // compute a whitening matrix\n        matrix<double> whiten = trans(chol(pinv(rc.covariance())));\n\n\n        // hashes\n        std::vector<unsigned long> h(v.size(),0);\n\n        std::vector<double> vals(v.size(),0);\n\n        // number of hits for each hash value\n        std::vector<unsigned long> counts;\n\n        std::vector<double> temp;\n\n        // build a random projection matrix\n        matrix<double> proj(bits, v[0].size());\n        for (long r = 0; r < proj.nr(); ++r)\n            for (long c = 0; c < proj.nc(); ++c)\n                proj(r,c) = rnd.get_random_gaussian();\n\n        // merge whitening matrix with projection matrix\n        proj = proj*whiten;\n\n        matrix<double,0,1> offset(bits);\n\n\n        // figure out what the offset values should be\n        for (int itr = 0; itr < offset.size(); ++itr)\n        {\n            counts.assign(static_cast<unsigned long>(std::pow(2.0,bits)), 0);\n            // count the popularity of each hash value\n            for (unsigned long i = 0; i < h.size(); ++i)\n            {\n                h[i] <<= 1;\n                counts[h[i]] += 1;\n            }\n\n            const unsigned long max_h = index_of_max(mat(counts));\n\n            temp.clear();\n            for (unsigned long i = 0; i < v.size(); ++i)\n            {\n                vals[i] = dot(rowm(proj,itr), matrix_cast<double>(v[i]));\n                if (h[i] == max_h)\n                    temp.push_back(vals[i]);\n            }\n\n            // split down the middle\n            std::sort(temp.begin(), temp.end());\n            const double split = temp[temp.size()/2];\n            offset(itr) = -split;\n\n            for (unsigned long i = 0; i < vals.size(); ++i)\n            {\n                if (vals[i] - split > 0)\n                    h[i] |= 1;\n            }\n        }\n\n\n        return projection_hash(proj, offset);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    projection_hash create_random_projection_hash (\n        const vector_type& v,\n        const int bits\n    ) \n    {\n        dlib::rand rnd;\n        return create_random_projection_hash(v,bits,rnd);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    projection_hash create_max_margin_projection_hash (\n        const vector_type& v,\n        const int bits,\n        const double C,\n        dlib::rand& rnd\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(0 < bits && bits <= 32 &&\n                    v.size() > 1,\n            \"\\t projection_hash create_max_margin_projection_hash()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            << \"\\n\\t bits: \" << bits\n            << \"\\n\\t v.size(): \" << v.size() \n            );\n\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < v.size(); ++i)\n        {\n            DLIB_ASSERT(v[0].size() == v[i].size() && v[i].size() > 0 && is_col_vector(v[i]), \n                    \"\\t projection_hash create_max_margin_projection_hash()\"\n                   << \"\\n\\t Invalid arguments were given to this function.\"\n                   << \"\\n\\t m(0).size(): \" << v[0].size()\n                   << \"\\n\\t m(\"<<i<<\").size(): \" << v[i].size() \n                   << \"\\n\\t is_col_vector(v[\"<<i<<\"]): \" << is_col_vector(v[i]) \n                );\n        }\n#endif\n\n        running_covariance<matrix<double> > rc;\n        for (unsigned long i = 0; i < v.size(); ++i)\n            rc.add(matrix_cast<double>(v[i]));\n\n        // compute a whitening matrix\n        matrix<double> whiten = trans(chol(pinv(rc.covariance())));\n        const matrix<double,0,1> meanval = whiten*rc.mean();\n\n\n\n        typedef matrix<double,0,1> sample_type;\n        random_subset_selector<sample_type> training_samples;\n        random_subset_selector<double> training_labels;\n        // We set this up to use enough samples to cover the vector space used by elements\n        // of v.  \n        training_samples.set_max_size(v[0].size()*10);\n        training_labels.set_max_size(v[0].size()*10);\n\n        matrix<double> proj(bits, v[0].size());\n        matrix<double,0,1> offset(bits);\n\n        // learn the random planes and put them into proj and offset.\n        for (int itr = 0; itr < offset.size(); ++itr)\n        {\n            training_samples.make_empty();\n            training_labels.make_empty();\n            // pick random training data and give each sample a random label.\n            for (unsigned long i = 0; i < v.size(); ++i)\n            {\n                training_samples.add(whiten*v[i]-meanval);\n                if (rnd.get_random_double() > 0.5)\n                    training_labels.add(+1);\n                else\n                    training_labels.add(-1);\n            }\n\n            svm_c_linear_dcd_trainer<linear_kernel<sample_type> > trainer;\n            trainer.set_c(C);\n            decision_function<linear_kernel<sample_type> > df = trainer.train(training_samples, training_labels);\n            offset(itr) = -df.b;\n            set_rowm(proj,itr) = trans(df.basis_vectors(0));\n        }\n\n\n        return projection_hash(proj*whiten, offset-proj*meanval);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    projection_hash create_max_margin_projection_hash (\n        const vector_type& v,\n        const int bits,\n        const double C = 10\n    ) \n    {\n        dlib::rand rnd;\n        return create_max_margin_projection_hash(v,bits,C,rnd);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CREATE_RANDOM_PROJECTION_HAsH_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lsh/create_random_projection_hash_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CREATE_RANDOM_PROJECTION_HAsH_ABSTRACT_Hh_\n#ifdef DLIB_CREATE_RANDOM_PROJECTION_HAsH_ABSTRACT_Hh_\n\n#include \"projection_hash_abstract.h\"\n#include \"../rand.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    projection_hash create_random_projection_hash (\n        const vector_type& v,\n        const int bits,\n        dlib::rand& rnd\n    );\n    /*!\n        requires\n            - 0 < bits <= 32\n            - v.size() > 1\n            - vector_type == a std::vector or compatible type containing dlib::matrix \n              objects, each representing a column vector of the same size.\n            - for all valid i, j:\n                - is_col_vector(v[i]) == true \n                - v[i].size() > 0\n                - v[i].size() == v[j].size() \n                - i.e. v contains only column vectors and all the column vectors\n                  have the same non-zero length\n            - rand_type == a type that implements the dlib/rand/rand_kernel_abstract.h interface\n        ensures\n            - returns a hash function H such that:\n                - H.num_hash_bins() == pow(2,bits)\n                - H will be setup so that it hashes the contents of v such that each bin\n                  ends up with roughly the same number of elements in it.  This is\n                  accomplished by picking random hyperplanes passing though the data.  In\n                  particular, each plane normal vector is filled with Gaussian random\n                  numbers and we also perform basic centering to ensure the plane passes\n                  though the data.\n            - This function uses the supplied random number generator, rnd, to drive part\n              of it's processing.  Therefore, giving different random number generators\n              will produce different outputs.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    projection_hash create_random_projection_hash (\n        const vector_type& v,\n        const int bits\n    );\n    /*!\n        requires\n            - 0 < bits <= 32\n            - v.size() > 1\n            - vector_type == a std::vector or compatible type containing dlib::matrix \n              objects, each representing a column vector of the same size.\n            - for all valid i, j:\n                - is_col_vector(v[i]) == true \n                - v[i].size() > 0\n                - v[i].size() == v[j].size() \n                - i.e. v contains only column vectors and all the column vectors\n                  have the same non-zero length\n        ensures\n            - returns create_random_projection_hash(v,bits,dlib::rand())\n              (i.e. calls the above function with a default initialized random number generator)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    projection_hash create_max_margin_projection_hash (\n        const vector_type& v,\n        const int bits,\n        const double C,\n        dlib::rand& rnd\n    );\n    /*!\n        requires\n            - 0 < bits <= 32\n            - v.size() > 1\n            - vector_type == a std::vector or compatible type containing dlib::matrix \n              objects, each representing a column vector of the same size.\n            - for all valid i, j:\n                - is_col_vector(v[i]) == true \n                - v[i].size() > 0\n                - v[i].size() == v[j].size() \n                - i.e. v contains only column vectors and all the column vectors\n                  have the same non-zero length\n            - rand_type == a type that implements the dlib/rand/rand_kernel_abstract.h interface\n        ensures\n            - returns a hash function H such that:\n                - H.num_hash_bins() == pow(2,bits)\n                - H will be setup so that it hashes the contents of v such that\n                  each bin ends up with roughly the same number of elements\n                  in it.  This is accomplished using a variation on the random hyperplane\n                  generation technique from the paper:\n                    Random Maximum Margin Hashing by Alexis Joly and Olivier Buisson\n                  In particular, we use the svm_c_linear_dcd_trainer to generate planes.\n                  We train it on randomly selected and randomly labeled points from v.\n                  The C SVM parameter is set to the given C argument.\n            - This function uses the supplied random number generator, rnd, to drive part\n              of it's processing.  Therefore, giving different random number generators\n              will produce different outputs.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    projection_hash create_max_margin_projection_hash (\n        const vector_type& v,\n        const int bits,\n        const double C = 10\n    );\n    /*!\n        requires\n            - 0 < bits <= 32\n            - v.size() > 1\n            - vector_type == a std::vector or compatible type containing dlib::matrix \n              objects, each representing a column vector of the same size.\n            - for all valid i, j:\n                - is_col_vector(v[i]) == true \n                - v[i].size() > 0\n                - v[i].size() == v[j].size() \n                - i.e. v contains only column vectors and all the column vectors\n                  have the same non-zero length\n        ensures\n            - returns create_max_margin_projection_hash(v,bits,C,dlib::rand())\n              (i.e. calls the above function with a default initialized random number generator)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CREATE_RANDOM_PROJECTION_HAsH_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lsh/hashes.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LSH_HAShES_Hh_\n#define DLIB_LSH_HAShES_Hh_\n\n#include \"hashes_abstract.h\"\n#include \"../hash.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class hash_similar_angles_64\n    {\n    public:\n        hash_similar_angles_64 (\n        ) : seed(0) {}\n\n        hash_similar_angles_64 (\n            const uint64 seed_ \n        ) : seed(seed_) {}\n\n        uint64 get_seed (\n        ) const { return seed; }\n\n\n        typedef uint64 result_type;\n\n        template <\n            typename sparse_vector_type\n            >\n        typename disable_if<is_matrix<sparse_vector_type>,uint64>::type operator() (\n            const sparse_vector_type& v\n        ) const\n        {\n            typedef typename sparse_vector_type::value_type::second_type scalar_type;\n\n            uint64 temp = 0;\n            for (int i = 0; i < 64; ++i)\n            {\n                // compute the dot product between v and a Gaussian random vector.\n                scalar_type val = 0;\n                for (typename sparse_vector_type::const_iterator j = v.begin(); j != v.end(); ++j)\n                    val += j->second*gaussian_random_hash(j->first, i, seed);\n\n                if (val > 0)\n                    temp |= 1;\n                temp <<= 1;\n            }\n            return temp;\n        }\n\n        template <typename EXP>\n        uint64 operator() ( \n            const matrix_exp<EXP>& v\n        ) const\n        {\n            typedef typename EXP::type T;\n            uint64 temp = 0;\n            for (unsigned long i = 0; i < 64; ++i)\n            {\n                if (dot(matrix_cast<T>(gaussian_randm(v.size(),1,i+seed*64)), v) > 0)\n                    temp |= 1;\n                temp <<= 1;\n            }\n            return temp;\n        }\n\n        unsigned int distance (\n            const result_type& a,\n            const result_type& b\n        ) const\n        {\n            return hamming_distance(a,b);\n        }\n\n    private:\n        const uint64 seed;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class hash_similar_angles_128\n    {\n    public:\n        hash_similar_angles_128 (\n        ) : seed(0),hasher1(0), hasher2(1) {}\n\n        hash_similar_angles_128 (\n            const uint64 seed_\n        ) : seed(seed_),hasher1(2*seed),hasher2(2*seed+1) {}\n\n        uint64 get_seed (\n        ) const { return seed; }\n\n        typedef std::pair<uint64,uint64> result_type;\n\n        template <\n            typename vector_type \n            >\n        result_type operator() (\n            const vector_type& v\n        ) const\n        {\n            return std::make_pair(hasher1(v), hasher2(v));\n        }\n\n        unsigned int distance (\n            const result_type& a,\n            const result_type& b\n        ) const\n        {\n            return hamming_distance(a.first,b.first) + \n                   hamming_distance(a.second,b.second);\n        }\n\n    private:\n        const uint64 seed;\n        hash_similar_angles_64 hasher1;\n        hash_similar_angles_64 hasher2;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class hash_similar_angles_256\n    {\n    public:\n        hash_similar_angles_256 (\n        ) : seed(0), hasher1(0), hasher2(1) {}\n\n        hash_similar_angles_256 (\n            const uint64 seed_\n        ) : seed(seed_),hasher1(2*seed),hasher2(2*seed+1) {}\n\n        uint64 get_seed (\n        ) const { return seed; }\n\n        typedef std::pair<uint64,uint64> hash128_type;\n        typedef std::pair<hash128_type,hash128_type> result_type;\n\n        template <\n            typename vector_type \n            >\n        result_type operator() (\n            const vector_type& v\n        ) const\n        {\n            return std::make_pair(hasher1(v), hasher2(v));\n        }\n\n        unsigned int distance (\n            const result_type& a,\n            const result_type& b\n        ) const\n        {\n            return hasher1.distance(a.first,b.first) + \n                   hasher1.distance(a.second,b.second);\n        }\n\n    private:\n        const uint64 seed;\n        hash_similar_angles_128 hasher1;\n        hash_similar_angles_128 hasher2;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class hash_similar_angles_512\n    {\n    public:\n        hash_similar_angles_512 (\n        ) : seed(0), hasher1(0), hasher2(1) {}\n\n        hash_similar_angles_512 (\n            const uint64 seed_\n        ) : seed(seed_),hasher1(2*seed),hasher2(2*seed+1) {}\n\n        uint64 get_seed (\n        ) const { return seed; }\n\n\n        typedef hash_similar_angles_256::result_type hash256_type;\n        typedef std::pair<hash256_type,hash256_type> result_type;\n\n        template <\n            typename vector_type \n            >\n        result_type operator() (\n            const vector_type& v\n        ) const\n        {\n            return std::make_pair(hasher1(v), hasher2(v));\n        }\n\n        unsigned int distance (\n            const result_type& a,\n            const result_type& b\n        ) const\n        {\n            return hasher1.distance(a.first,b.first) + \n                   hasher1.distance(a.second,b.second);\n        }\n\n    private:\n        const uint64 seed;\n        hash_similar_angles_256 hasher1;\n        hash_similar_angles_256 hasher2;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LSH_HAShES_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lsh/hashes_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LSH_HAShES_ABSTRACT_Hh_\n#ifdef DLIB_LSH_HAShES_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class hash_similar_angles_64\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for computing locality sensitive hashes that give\n                vectors with small angles between each other similar hash values.  In\n                particular, this object creates 64 random planes which pass though the\n                origin and uses them to create a 64bit hash.  To compute the hash for a new\n                vector, this object checks which side of each plane the vector falls on and\n                records this information into a 64bit integer.  \n        !*/\n\n    public:\n\n        hash_similar_angles_64 (\n        ); \n        /*!\n            ensures\n                - #get_seed() == 0\n        !*/\n\n        hash_similar_angles_64 (\n            const uint64 seed\n        );\n        /*!\n            ensures\n                - #get_seed() == seed\n        !*/\n\n        uint64 get_seed (\n        ) const;\n        /*!\n            ensures\n                - returns the random seed used to generate the random planes used for\n                  hashing.\n        !*/\n\n        typedef uint64 result_type;\n\n        template <typename vector_type>\n        result_type perator() (\n            const vector_type& v\n        ) const;\n        /*!\n            requires\n                - v is an unsorted sparse vector or a dlib matrix representing either a\n                  column or row vector.\n            ensures\n                - returns a 64 bit hash of the input vector v.  The bits in the hash record\n                  which side of each random plane v falls on.  \n\n        !*/\n\n        unsigned int distance (\n            const result_type& a,\n            const result_type& b\n        ) const;\n        /*!\n            ensures\n                - returns the Hamming distance between the two hashes given to this\n                  function.  That is, we return the number of bits in a and b which differ.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct hash_similar_angles_128\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for computing locality sensitive hashes that give\n                vectors with small angles between each other similar hash values.  In\n                particular, this object creates 128 random planes which pass though the\n                origin and uses them to create a 128bit hash.  To compute the hash for a new\n                vector, this object checks which side of each plane the vector falls on and\n                records this information into a 128bit integer.  \n        !*/\n\n    public:\n\n        hash_similar_angles_128 (\n        ); \n        /*!\n            ensures\n                - #get_seed() == 0\n        !*/\n\n        hash_similar_angles_128 (\n            const uint64 seed\n        );\n        /*!\n            ensures\n                - #get_seed() == seed\n        !*/\n\n        uint64 get_seed (\n        ) const;\n        /*!\n            ensures\n                - returns the random seed used to generate the random planes used for\n                  hashing.\n        !*/\n\n        typedef std::pair<uint64,uint64> result_type;\n\n        template <typename vector_type>\n        result_type perator() (\n            const vector_type& v\n        ) const;\n        /*!\n            requires\n                - v is an unsorted sparse vector or a dlib matrix representing either a\n                  column or row vector.\n            ensures\n                - returns a 128 bit hash of the input vector v.  The bits in the hash record\n                  which side of each random plane v falls on.  \n\n        !*/\n\n        unsigned int distance (\n            const result_type& a,\n            const result_type& b\n        ) const;\n        /*!\n            ensures\n                - returns the Hamming distance between the two hashes given to this\n                  function.  That is, we return the number of bits in a and b which differ.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct hash_similar_angles_256\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for computing locality sensitive hashes that give\n                vectors with small angles between each other similar hash values.  In\n                particular, this object creates 256 random planes which pass though the\n                origin and uses them to create a 256bit hash.  To compute the hash for a new\n                vector, this object checks which side of each plane the vector falls on and\n                records this information into a 256bit integer.  \n        !*/\n\n    public:\n\n        hash_similar_angles_256 (\n        ); \n        /*!\n            ensures\n                - #get_seed() == 0\n        !*/\n\n        hash_similar_angles_256 (\n            const uint64 seed\n        );\n        /*!\n            ensures\n                - #get_seed() == seed\n        !*/\n\n        uint64 get_seed (\n        ) const;\n        /*!\n            ensures\n                - returns the random seed used to generate the random planes used for\n                  hashing.\n        !*/\n\n        typedef std::pair<uint64,uint64> hash128_type;\n        typedef std::pair<hash128_type,hash128_type> result_type;\n\n        template <typename vector_type>\n        result_type perator() (\n            const vector_type& v\n        ) const;\n        /*!\n            requires\n                - v is an unsorted sparse vector or a dlib matrix representing either a\n                  column or row vector.\n            ensures\n                - returns a 256 bit hash of the input vector v.  The bits in the hash record\n                  which side of each random plane v falls on.  \n\n        !*/\n\n        unsigned int distance (\n            const result_type& a,\n            const result_type& b\n        ) const;\n        /*!\n            ensures\n                - returns the Hamming distance between the two hashes given to this\n                  function.  That is, we return the number of bits in a and b which differ.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct hash_similar_angles_512\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for computing locality sensitive hashes that give\n                vectors with small angles between each other similar hash values.  In\n                particular, this object creates 512 random planes which pass though the\n                origin and uses them to create a 512bit hash.  To compute the hash for a new\n                vector, this object checks which side of each plane the vector falls on and\n                records this information into a 512bit integer.  \n        !*/\n\n    public:\n\n        hash_similar_angles_512 (\n        ); \n        /*!\n            ensures\n                - #get_seed() == 0\n        !*/\n\n        hash_similar_angles_512 (\n            const uint64 seed\n        );\n        /*!\n            ensures\n                - #get_seed() == seed\n        !*/\n\n        uint64 get_seed (\n        ) const;\n        /*!\n            ensures\n                - returns the random seed used to generate the random planes used for\n                  hashing.\n        !*/\n\n        typedef hash_similar_angles_256::result_type hash256_type;\n        typedef std::pair<hash256_type,hash256_type> result_type;\n\n        template <typename vector_type>\n        result_type perator() (\n            const vector_type& v\n        ) const;\n        /*!\n            requires\n                - v is an unsorted sparse vector or a dlib matrix representing either a\n                  column or row vector.\n            ensures\n                - returns a 512 bit hash of the input vector v.  The bits in the hash record\n                  which side of each random plane v falls on.  \n\n        !*/\n\n        unsigned int distance (\n            const result_type& a,\n            const result_type& b\n        ) const;\n        /*!\n            ensures\n                - returns the Hamming distance between the two hashes given to this\n                  function.  That is, we return the number of bits in a and b which differ.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LSH_HAShES_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lsh/projection_hash.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PROJECTION_HASh_Hh_\n#define DLIB_PROJECTION_HASh_Hh_\n\n#include \"projection_hash_abstract.h\"\n#include \"../matrix.h\"\n#include \"../rand.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class projection_hash\n    {\n    public:\n\n        projection_hash() {}\n\n        template <typename EXP1, typename EXP2>\n        projection_hash(\n            const matrix_exp<EXP1>& proj_,\n            const matrix_exp<EXP2>& offset_\n        ) : proj(proj_), offset(offset_) \n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(proj.nr() == offset.nr(),\n                \"\\t projection_hash::projection_hash()\"\n                << \"\\n\\t Invalid arguments were given to this function.\"\n                << \"\\n\\t proj.nr():   \" << proj.nr() \n                << \"\\n\\t offset.nr(): \" << offset.nr() \n                );\n\n        }\n\n        const matrix<double>& get_projection_matrix (\n        ) const { return proj; }\n\n        const matrix<double,0,1>& get_offset_matrix (\n        ) const { return offset; }\n\n        unsigned long num_hash_bins (\n        ) const\n        {\n            return static_cast<unsigned long>(std::pow(2.0, (double)offset.size()));\n        }\n\n        template <typename EXP>\n        unsigned long operator() (\n            const matrix_exp<EXP>& v\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(v) && \n                        v.size() == get_projection_matrix().nc() &&\n                        v.size() > 0,\n                \"\\t unsigned long projection_hash::operator()(v)\"\n                << \"\\n\\t Invalid arguments were given to this function.\"\n                << \"\\n\\t is_col_vector(v):             \" << is_col_vector(v) \n                << \"\\n\\t get_projection_matrix().nc(): \" << get_projection_matrix().nc() \n                << \"\\n\\t v.size():                     \" << v.size() \n                );\n\n            return do_hash(proj*matrix_cast<double>(v) + offset);\n        }\n\n    private:\n\n        template <typename EXP>\n        unsigned long do_hash (\n            const matrix_exp<EXP>& v\n        ) const\n        {\n            unsigned long h = 0;\n            for (long i = 0; i < v.size(); ++i)\n            {\n                h <<= 1;\n                if (v(i) > 0)\n                    h |= 1;\n            }\n            return h;\n        }\n\n        matrix<double> proj;\n        matrix<double,0,1> offset;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const projection_hash& item,\n        std::ostream& out\n    )\n    {\n        serialize(item.get_projection_matrix(), out);\n        serialize(item.get_offset_matrix(), out);\n    }\n\n    inline void deserialize (\n        projection_hash& item,\n        std::istream& in \n    )\n    {\n        matrix<double> proj;\n        matrix<double,0,1> offset;\n        deserialize(proj, in);\n        deserialize(offset, in);\n        item = projection_hash(proj, offset);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_PROJECTION_HASh_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lsh/projection_hash_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_PROJECTION_HASh_ABSTRACT_Hh_\n#ifdef DLIB_PROJECTION_HASh_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class projection_hash\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a tool for hashing elements of a vector space into the integers.  \n                It is intended to represent locality sensitive hashing functions such as \n                the popular random projection hashing method.\n                \n                In particular, it represents hash functions of the form:\n                    hash bit 0 = sign(rowm(P*v + O,0))\n                    hash bit 1 = sign(rowm(P*v + O,1))\n                    hash bit 2 = sign(rowm(P*v + O,2))\n                    ...\n                Where v is the vector to be hashed.  The parameters of the projection\n                hash are the P and O matrices.  \n\n            THREAD SAFETY\n                The const members of this object can be called concurrently from multiple\n                threads, however, any operation that modifies the state of an instance of\n                this object must serialize access to that instance.\n        !*/\n    public:\n\n        projection_hash(\n        );\n        /*!\n            ensures\n                - #get_projection_matrix().size() == 0\n                - #get_offset_matrix().size() == 0\n        !*/\n\n        template <typename EXP1, typename EXP2>\n        projection_hash(\n            const matrix_exp<EXP1>& proj,\n            const matrix_exp<EXP2>& offset\n        ); \n        /*!\n            requires\n                - proj.nr() == offset.nr()\n            ensures\n                - #get_projection_matrix() == proj\n                - #get_offset_matrix() == offset\n        !*/\n\n        const matrix<double>& get_projection_matrix (\n        ) const;\n        /*!\n            ensures\n                - returns the P matrix discussed above in the WHAT THIS OBJECT REPRESENTS\n                  section.\n        !*/\n\n        const matrix<double,0,1>& get_offset_matrix (\n        ) const; \n        /*!\n            ensures\n                - returns the O matrix discussed above in the WHAT THIS OBJECT REPRESENTS\n                  section.\n        !*/\n\n        unsigned long num_hash_bins (\n        ) const;\n        /*!\n            ensures\n                - returns the number of possible outputs from this hashing function.\n                - Specifically, returns: std::pow(2, get_offset_matrix().size())\n        !*/\n\n        template <typename EXP>\n        unsigned long operator() (\n            const matrix_exp<EXP>& v\n        ) const;\n        /*!\n            requires\n                - is_col_vector(v) == true\n                - v.size() == get_projection_matrix().nc()\n                - v.size() > 0\n            ensures\n                - hashes v into the range [0, num_hash_bins()) using the method\n                  discussed in the WHAT THIS OBJECT REPRESENTS section.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const projection_hash& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        projection_hash& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_PROJECTION_HASh_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lsh.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LSh_\n#define DLIB_LSh_\n\n\n#include \"lsh/projection_hash.h\"\n#include \"lsh/create_random_projection_hash.h\"\n#include \"lsh/hashes.h\"\n\n\n#endif // DLIB_LSh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lz77_buffer/lz77_buffer_kernel_1.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LZ77_BUFFER_KERNEl_1_\n#define DLIB_LZ77_BUFFER_KERNEl_1_\n\n#include \"lz77_buffer_kernel_abstract.h\"\n#include \"../algs.h\"\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename sliding_buffer\n        >\n    class lz77_buffer_kernel_1 \n    {\n        /*!\n            REQUIREMENTS ON sliding_buffer\n                sliding_buffer must be an implementation of sliding_buffer/sliding_buffer_kernel_abstract.h\n\n            INITIAL VALUE\n                history_limit == defined by constructor arguments\n                lookahead_limit == defined by constructor arguments\n                history_size == 0\n                lookahead_size == 0\n                buffer.size() == history_limit + lookahead_limit\n\n\n            CONVENTION           \n                history_limit == get_history_buffer_limit()\n                lookahead_limit == get_lookahead_buffer_limit()\n                history_size == get_history_buffer_size()\n                lookahead_limit == get_lookahead_buffer_size()\n                              \n                buffer.size() == history_limit + lookahead_limit\n\n                lookahead_buffer(i) == buffer[lookahead_limit-1-i]\n                history_buffer(i) == buffer[lookahead_limit+i]\n        !*/\n\n    public:\n\n        lz77_buffer_kernel_1 (\n            unsigned long total_limit_,\n            unsigned long lookahead_limit_  \n        );\n\n        virtual ~lz77_buffer_kernel_1 (\n        ) {}\n\n        void clear(\n        );\n\n        void add (\n            unsigned char symbol\n        );\n\n        void find_match (\n            unsigned long& index,\n            unsigned long& length,\n            unsigned long min_match_length\n        );\n\n        inline unsigned long get_history_buffer_limit (\n        ) const { return history_limit; }\n\n        inline unsigned long get_lookahead_buffer_limit (\n        ) const { return lookahead_limit; }\n\n        inline unsigned long get_history_buffer_size (\n        ) const { return history_size; }\n\n        inline unsigned long get_lookahead_buffer_size (\n        ) const { return lookahead_size; }\n\n        inline unsigned char lookahead_buffer (\n            unsigned long index\n        ) const { return buffer[lookahead_limit-1-index]; }\n\n        inline unsigned char history_buffer (\n            unsigned long index\n        ) const { return buffer[lookahead_limit+index]; }\n\n\n        inline void shift_buffers (\n            unsigned long N\n        ) { shift_buffer(N); }\n\n    private:\n\n\n        inline void shift_buffer (\n            unsigned long N\n        )\n        /*!\n            requires\n                - N <= lookahead_size\n            ensuers\n                - #lookahead_size == lookahead_size - N\n                - if (history_size+N < history_limit) then\n                    - #history_size == history_size+N\n                - else\n                    - #history_size == history_limit\n                - for all i where 0 <= i < N:\n                  #history_buffer(N-1-i) == lookahead_buffer(i)\n                - for all i where 0 <= i < #history_size-N:\n                  #history_buffer(N+i) == history_buffer(i)\n                - for all i where 0 <= i < #lookahead_size\n                  #lookahead_buffer(i) == lookahead_buffer(N+i)                \n        !*/\n        {\n            unsigned long temp = history_size+N;\n            buffer.rotate_left(N);\n            lookahead_size -= N;\n            if (temp < history_limit)\n                history_size = temp;\n            else\n                history_size = history_limit;\n        }\n\n\n        // member data        \n        sliding_buffer buffer;\n        unsigned long lookahead_limit;\n        unsigned long history_limit;\n        \n\n        unsigned long lookahead_size;\n        unsigned long history_size;\n\n\n        // restricted functions\n        lz77_buffer_kernel_1(lz77_buffer_kernel_1<sliding_buffer>&);        // copy constructor\n        lz77_buffer_kernel_1<sliding_buffer>& operator=(lz77_buffer_kernel_1<sliding_buffer>&);    // assignment operator\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename sliding_buffer\n        >\n    lz77_buffer_kernel_1<sliding_buffer>::\n    lz77_buffer_kernel_1 (\n        unsigned long total_limit_,\n        unsigned long lookahead_limit_  \n    ) :        \n        lookahead_size(0), \n        history_size(0)\n    {\n        buffer.set_size(total_limit_);\n        lookahead_limit = lookahead_limit_;\n        history_limit = buffer.size() - lookahead_limit_;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename sliding_buffer\n        >\n    void lz77_buffer_kernel_1<sliding_buffer>::\n    clear(\n    )\n    {\n        lookahead_size = 0;\n        history_size = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename sliding_buffer\n        >\n    void lz77_buffer_kernel_1<sliding_buffer>::\n    add (\n        unsigned char symbol\n    )\n    {\n        if (lookahead_size == lookahead_limit)\n        {\n            shift_buffer(1);            \n        }\n        buffer[lookahead_limit-1-lookahead_size] = symbol;\n        ++lookahead_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename sliding_buffer\n        >\n    void lz77_buffer_kernel_1<sliding_buffer>::\n    find_match (\n        unsigned long& index,\n        unsigned long& length,\n        unsigned long min_match_length\n    )\n    {\n        unsigned long hpos = history_size;  // current position in the history buffer\n        unsigned long lpos = 0;             // current position in the lookahead buffer\n\n        unsigned long match_length = 0;   // the length of the longest match we find\n        unsigned long match_index = 0;    // the index of the longest match we find\n\n        // try to find a match\n        while (hpos != 0)\n        {\n            --hpos;\n            // if we are finding a match\n            if (history_buffer(hpos) == lookahead_buffer(lpos))\n            {\n                ++lpos;   \n                // if we have found a match that is as long as the lookahead buffer\n                // then we are done\n                if (lpos == lookahead_size)\n                    break;\n            }\n            // else if we found the end of a match\n            else if (lpos > 0)\n            {\n                // if this match is longer than the last match we saw\n                if (lpos > match_length)\n                {\n                    match_length = lpos;\n                    match_index = hpos + lpos;\n                }\n                lpos = 0;\n            }\n        } // while (hpos != 0)\n\n        // if we found a match at the end of the loop that is greater than \n        // the match in match_index\n        if (lpos > match_length)\n        {\n            match_length = lpos;\n            match_index = hpos + lpos - 1;\n        }\n\n\n        // if we found a match that was long enough then report it\n        if (match_length >= min_match_length)\n        {\n            shift_buffer(match_length);\n            index = match_index;\n            length = match_length;\n        }\n        else\n        {\n            length = 0;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LZ77_BUFFER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lz77_buffer/lz77_buffer_kernel_2.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LZ77_BUFFER_KERNEl_2_\n#define DLIB_LZ77_BUFFER_KERNEl_2_\n\n#include \"lz77_buffer_kernel_abstract.h\"\n#include \"../algs.h\"\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename sliding_buffer\n        >\n    class lz77_buffer_kernel_2 \n    {\n        /*!\n            REQUIREMENTS ON sliding_buffer\n                sliding_buffer must be an implementation of sliding_buffer/sliding_buffer_kernel_abstract.h\n                and must be instantiated to contain unsigned char data\n\n            INITIAL VALUE\n                history_limit == defined by constructor arguments\n                lookahead_limit == defined by constructor arguments\n                history_size == 0\n                lookahead_size == 0\n                buffer.size() == history_limit + lookahead_limit\n                buffer[i] == 0 for all valid i\n\n                nodes == an array of history_limit-3 nodes\n                id_table == an array of buffer.size() pointers\n                hash_table == an array of buffer.size() pointers and all are set to 0\n                mask == buffer.size() - 1\n                next_free_node == 0\n\n\n            CONVENTION           \n                history_limit == get_history_buffer_limit()\n                lookahead_limit == get_lookahead_buffer_limit()\n                history_size == get_history_buffer_size()\n                lookahead_limit == get_lookahead_buffer_size()\n                              \n                buffer.size() == history_limit + lookahead_limit\n\n                lookahead_buffer(i) == buffer[lookahead_limit-1-i]\n                history_buffer(i) == buffer[lookahead_limit+i]\n\n\n                hash_table[hash(a,b,c,d)] points to the head of a linked list.\n                    Each node in this linked list tells the location in the buffer\n                    of a string that begins with abcd or a string who's first four\n                    letters have the same hash.  The linked list is terminated by a\n                    node with a null next pointer.\n\n                hash_table[i] == 0 if there is no linked list for this element of the hash\n                    table.\n\n                each node in the hash table is allocated from the array nodes.\n                When adding a node to hash_table:\n                    if (if all nodes aren't already in the hash_table) then\n                    {\n                        the next node to use is nodes[next_free_node].                \n                    }\n                    else\n                    {\n                        recycle nodes from the hash_table itself.  This works because\n                        when we add new nodes we also have to remove nodes.\n                    }\n\n                if (there is a node defined with an id of i) then\n                {\n                    if (id_table[i] != 0) then\n                        id_table[i]->next->id == i\n                    else\n                        hash_table[some_hash]->id == i\n                }\n        !*/\n\n    public:\n\n        lz77_buffer_kernel_2 (\n            unsigned long total_limit_,\n            unsigned long lookahead_limit_  \n        );\n\n        virtual ~lz77_buffer_kernel_2 (\n        );\n\n        void clear(\n        );\n\n        void add (\n            unsigned char symbol\n        );\n\n        void find_match (\n            unsigned long& index,\n            unsigned long& length,\n            unsigned long min_match_length\n        );\n\n        inline unsigned long get_history_buffer_limit (\n        ) const { return history_limit; }\n\n        inline unsigned long get_lookahead_buffer_limit (\n        ) const { return lookahead_limit; }\n\n        inline unsigned long get_history_buffer_size (\n        ) const { return history_size; }\n\n        inline unsigned long get_lookahead_buffer_size (\n        ) const { return lookahead_size; }\n\n        inline unsigned char lookahead_buffer (\n            unsigned long index\n        ) const { return buffer[lookahead_limit-1-index]; }\n\n        inline unsigned char history_buffer (\n            unsigned long index\n        ) const { return buffer[lookahead_limit+index]; }\n\n\n        inline void shift_buffers (\n            unsigned long N\n        ) { shift_buffer(N); }\n\n    private:\n\n        inline unsigned long hash (\n            unsigned char a,\n            unsigned char b,\n            unsigned char c,\n            unsigned char d\n        ) const\n        /*!\n            ensures\n                - returns a hash of the 4 arguments and the hash is in the range\n        !*/\n        {\n            unsigned long B = b << 3;\n            unsigned long C = c << 6;\n            unsigned long D = d << 9;\n\n            unsigned long temp = a + B;\n            temp += C;\n            temp += D;\n\n            return (temp&mask); /**/\n        }\n\n        void shift_buffer (\n            unsigned long N\n        );\n        /*!\n            requires\n                - N <= lookahead_size\n            ensuers\n                - #lookahead_size == lookahead_size - N\n                - if (history_size+N < history_limit) then\n                    - #history_size == history_size+N\n                - else\n                    - #history_size == history_limit\n                - for all i where 0 <= i < N:\n                  #history_buffer(N-1-i) == lookahead_buffer(i)\n                - for all i where 0 <= i < #history_size-N:\n                  #history_buffer(N+i) == history_buffer(i)\n                - for all i where 0 <= i < #lookahead_size\n                  #lookahead_buffer(i) == lookahead_buffer(N+i)                \n        !*/\n\n\n\n        // member data        \n        sliding_buffer buffer;\n        unsigned long lookahead_limit;\n        unsigned long history_limit;\n\n        struct node\n        {\n            unsigned long id;\n            node* next;\n        };\n        \n        node** hash_table;\n        node* nodes;\n        node** id_table;\n        unsigned long next_free_node;\n        unsigned long mask;\n\n        unsigned long lookahead_size;\n        unsigned long history_size;\n\n\n        // restricted functions\n        lz77_buffer_kernel_2(lz77_buffer_kernel_2<sliding_buffer>&);        // copy constructor\n        lz77_buffer_kernel_2<sliding_buffer>& operator=(lz77_buffer_kernel_2<sliding_buffer>&);    // assignment operator\n    };   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename sliding_buffer\n        >\n    lz77_buffer_kernel_2<sliding_buffer>::\n    lz77_buffer_kernel_2 (\n        unsigned long total_limit_,\n        unsigned long lookahead_limit_  \n    ) :        \n        lookahead_size(0),       \n        history_size(0)\n    {\n        buffer.set_size(total_limit_);\n        lookahead_limit = lookahead_limit_;\n        history_limit = buffer.size() - lookahead_limit_;\n\n        nodes = new node[history_limit-3];\n\n        try { id_table = new node*[buffer.size()]; }\n        catch (...) { delete [] nodes; throw; }\n\n        try { hash_table = new node*[buffer.size()]; }\n        catch (...) { delete [] id_table; delete [] nodes; throw; }\n\n        mask = buffer.size()-1;\n        next_free_node = 0;\n\n            \n        node** start = hash_table;\n        node** end = hash_table + buffer.size();\n        while (start != end)\n        {\n            *start = 0;\n            ++start;\n        }\n\n        for (unsigned long i = 0; i < buffer.size(); ++i)\n            buffer[i] = 0;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sliding_buffer\n        >\n    lz77_buffer_kernel_2<sliding_buffer>::\n    ~lz77_buffer_kernel_2 (\n    )      \n    {\n        delete [] nodes;\n        delete [] hash_table;\n        delete [] id_table;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename sliding_buffer\n        >\n    void lz77_buffer_kernel_2<sliding_buffer>::\n    clear(\n    )\n    {\n        lookahead_size = 0;\n        history_size = 0;\n        next_free_node = 0;\n\n        node** start = hash_table;\n        node** end = hash_table + buffer.size();\n        while (start != end)\n        {\n            *start = 0;\n            ++start;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n      \n    template <\n        typename sliding_buffer\n        >      \n    void lz77_buffer_kernel_2<sliding_buffer>::\n    shift_buffer (\n        unsigned long N\n    )        \n    {\n        unsigned long old_history_size = history_size;\n        unsigned long temp = history_size+N;    \n        unsigned long new_nodes; // the number of nodes to pull from the nodes array\n        unsigned long recycled_nodes; // the number of nodes to pull from hash_table\n        lookahead_size -= N;\n        if (temp <= history_limit)\n        {               \n            if (history_size <= 3)\n            {\n                if ((3-history_size) >= N)\n                    new_nodes = 0;\n                else\n                    new_nodes = N - (3-history_size);\n            }\n            else\n            {\n                new_nodes = N;\n            }\n                \n            recycled_nodes = 0;\n            history_size = temp;\n        }\n        else\n        {\n            if (history_size != history_limit)\n            {\n                new_nodes = history_limit - history_size;\n                recycled_nodes = temp - history_limit;\n                history_size = history_limit;                \n            }\n            else\n            {\n                new_nodes = 0;\n                recycled_nodes = N;\n            }\n        }\n\n        unsigned long i = lookahead_limit + 2;\n    \n        // if there are any \"new\" nodes to add to the hash table \n        if (new_nodes != 0)\n        {\n            unsigned long stop = i - new_nodes;             \n            for (; i > stop; --i)\n            {\n                nodes[next_free_node].next = 0;\n                nodes[next_free_node].id = buffer.get_element_id(i);\n                id_table[nodes[next_free_node].id] = 0;\n\n                unsigned long new_hash = hash(buffer[i],buffer[i-1],buffer[i-2],buffer[i-3]);\n\n                if (hash_table[new_hash] != 0)\n                    id_table[hash_table[new_hash]->id] = &nodes[next_free_node];\n                nodes[next_free_node].next = hash_table[new_hash];\n                hash_table[new_hash] = &nodes[next_free_node];\n\n                ++next_free_node;                \n            }\n        } // if (new_nodes != 0)\n\n\n    \n        unsigned long stop = i - recycled_nodes;     \n        unsigned long old = old_history_size-1+lookahead_limit;\n        for (; i > stop; --i)\n        {            \n            // find the next node to recycle in hash_table\n            node* recycled_node;\n            \n            \n            unsigned long old_id = buffer.get_element_id(old);\n            \n            // find the node with id old_id  \n            if (id_table[old_id] == 0)\n            {\n                unsigned long old_hash = hash(buffer[old],buffer[old-1],buffer[old-2],buffer[old-3]);\n                recycled_node = hash_table[old_hash];\n\n                // fill the gap left by removing this node\n                hash_table[old_hash] = recycled_node->next;\n            }\n            else\n            {\n                recycled_node = id_table[old_id]->next;\n\n                // fill the gap left by removing this node\n                id_table[old_id]->next = recycled_node->next;\n            }\n\n            --old;\n\n\n\n\n\n\n            recycled_node->next = 0;\n            recycled_node->id = buffer.get_element_id(i);\n            id_table[recycled_node->id] = 0;\n\n            unsigned long new_hash = hash(buffer[i],buffer[i-1],buffer[i-2],buffer[i-3]);\n\n            if (hash_table[new_hash] != 0) \n                id_table[hash_table[new_hash]->id] = recycled_node;\n\n            recycled_node->next = hash_table[new_hash];\n            hash_table[new_hash] = recycled_node;\n       \n        } // for (; i > stop; --i)\n\n\n\n\n        buffer.rotate_left(N);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sliding_buffer\n        >\n    void lz77_buffer_kernel_2<sliding_buffer>::\n    add (\n        unsigned char symbol\n    )\n    {\n        if (lookahead_size == lookahead_limit)\n        {\n            shift_buffer(1);            \n        }\n        buffer[lookahead_limit-1-lookahead_size] = symbol;\n        ++lookahead_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename sliding_buffer\n        >\n    void lz77_buffer_kernel_2<sliding_buffer>::\n    find_match (\n        unsigned long& index,\n        unsigned long& length,\n        unsigned long min_match_length\n    )\n    {\n        unsigned long match_length = 0;   // the length of the longest match we find\n        unsigned long match_index = 0;    // the index of the longest match we find\n\n \n        const unsigned long hash_value = hash(lookahead_buffer(0),\n                                              lookahead_buffer(1),\n                                              lookahead_buffer(2),\n                                              lookahead_buffer(3)\n                                              );\n\n\n \n        node* temp = hash_table[hash_value];\n        while (temp != 0)\n        {             \n            // current position in the history buffer\n            unsigned long hpos = buffer.get_element_index(temp->id)-lookahead_limit;  \n            // current position in the lookahead buffer\n            unsigned long lpos = 0;             \n\n            // find length of this match\n            while (history_buffer(hpos) == lookahead_buffer(lpos))\n            {\n                ++lpos;\n                if (hpos == 0)\n                    break;\n                --hpos;\n                if (lpos == lookahead_size)\n                    break;                    \n            }\n\n            if (lpos > match_length)\n            {\n                match_length = lpos;\n                match_index = buffer.get_element_index(temp->id)-lookahead_limit;\n                // if this is the longest possible match then stop looking\n                if (lpos == lookahead_limit)\n                    break;\n            }\n            \n\n            temp = temp->next;\n        } // while (temp != 0)\n\n\n\n\n        // if we found a match that was long enough then report it\n        if (match_length >= min_match_length)\n        {\n            shift_buffer(match_length);\n            index = match_index;\n            length = match_length;\n        }\n        else\n        {\n            length = 0;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LZ77_BUFFER_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lz77_buffer/lz77_buffer_kernel_abstract.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LZ77_BUFFER_KERNEl_ABSTRACT_\n#ifdef DLIB_LZ77_BUFFER_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    class lz77_buffer \n    {\n        /*!\n            INITIAL VALUE\n                get_history_buffer_limit() == defined by constructor arguments\n                get_lookahead_buffer_limit() == defined by constructor arguments\n                get_history_buffer_size() == 0\n                get_lookahead_buffer_size() == 0\n\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a pair of buffers (history and lookahead buffers) \n                used during lz77 style compression.\n\n                It's main function is to search the history buffer for long strings which\n                match the contents (or a part of the contents) of the lookahead buffer.\n                \n\n            HISTORY AND LOOKAHEAD BUFFERS\n                The buffers have the following structure:\n                | history buffer | lookahead buffer |  <-- contents of buffers\n                |  ...9876543210 | 0123456789...    |  <-- index numbers\n\n                So this means that history_buffer(0) == 'r', history_buffer(1) == 'e'\n                and so on.  And lookahead_buffer(0) == 'l', lookahead_buffer(1) == 'o'\n                and so on.\n\n\n                What shift_buffers() does in english:\n                    This function just means that the buffers have their contents shifted\n                    left by N elements and that elements shifted out of the lookahead buffer \n                    go into the history buffer.   An example will make it clearer.\n\n                    Suppose that we have the following buffers before we apply shift_buffers()\n                        history_buffer() == \"hey\" and\n                        lookahead_buffer() == \"lookahead buffer\"\n                    And in the same format as the above diagram it would be\n                        | hey | lookahead buffer |  <-- contents of buffers\n                        | 210 | 0123456789...    |  <-- index numbers\n\n                    Applying shift_buffers(4) will give\n                        lookahead_buffer() == \"ahead buffer\"\n                        history_buffer() == \"heylook\" or \"eylook\" or \"ylook\" or \"look\"\n\n                    You might be wondering why the history_buffer can resize itself in \n                    such a nondeterministic way.  It is just to allow a lot of freedom in the \n                    implementations of this object.                                  \n        !*/\n\n    public:\n\n        lz77_buffer (\n            unsigned long total_limit,\n            unsigned long lookahead_limit            \n        );\n        /*!\n            requires\n                - 6 < total_limit < 32\n                - 15 < lookahead_limit <= 2^(total_limit-2)\n            ensures                \n                - #*this is properly initialized\n                - #get_history_buffer_limit() == 2^total_limit  - lookahead_limit\n                - #get_lookahead_buffer_limit() == lookahead_limit\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~lz77_buffer (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void shift_buffers (\n            unsigned long N\n        );\n        /*!\n            requires\n                - N <= get_lookahead_buffer_size()\n            ensures\n                - #get_lookahead_buffer_size() == get_lookahead_buffer_size() - N\n                - #get_history_buffer_size() >= N\n                - #get_history_buffer_size() <= get_history_buffer_size()+N\n                - #get_history_buffer_size() <= get_history_buffer_limit()\n                - for all i where 0 <= i < N:\n                    #history_buffer(N-1-i) == lookahead_buffer(i)\n                - for all i where 0 <= i < #get_history_buffer_size()-N:\n                    #history_buffer(N+i) == history_buffer(i)\n                - for all i where 0 <= i < #get_lookahead_buffer_size()\n                    #lookahead_buffer(i) == lookahead_buffer(N+i)            \n        !*/\n\n        void add (\n            unsigned char symbol\n        );\n        /*!\n            ensures\n                - if (get_lookahead_buffer_size() == get_lookahead_buffer_limit()) then\n                    - performs shift_buffers(1)\n                    - #lookahead_buffer(get_lookahead_buffer_limit()-1) == symbol\n                    - #get_lookahead_buffer_size() == get_lookahead_buffer_size()\n                - else\n                    - #lookahead_buffer(get_lookahead_buffer_size()) == symbol\n                    - #get_lookahead_buffer_size() == get_lookahead_buffer_size() + 1                                    \n            throws\n                - std::bad_alloc\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void find_match (\n            unsigned long& index,\n            unsigned long& length,\n            unsigned long min_match_length\n        );\n        /*!\n            ensures\n                - if (#length != 0) then\n                    - #length >= min_match_length\n                    - for all i where 0 <= i < #length:\n                      history_buffer(#index-i) == lookahead_buffer(i)\n                    - performs shift_buffers(#length)\n            throws\n                - std::bad_alloc\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        unsigned long get_history_buffer_limit (\n        ) const;\n        /*!\n            ensures\n                - returns the max number of symbols that can fit in the history buffer\n        !*/\n\n        unsigned long get_lookahead_buffer_limit (\n        ) const;\n        /*!\n            ensures\n                - returns the max number of symbols that can fit in the lookahead buffer\n        !*/\n\n        unsigned long get_history_buffer_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of symbols currently in the history buffer\n        !*/\n\n        unsigned long get_lookahead_buffer_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of symbols currently in the lookahead buffer\n        !*/\n\n        unsigned char lookahead_buffer (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < get_lookahead_buffer_size()\n            ensures\n                - returns the symbol in the lookahead buffer at location index\n        !*/\n\n        unsigned char history_buffer (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < get_history_buffer_size()\n            ensures\n                - returns the symbol in the history buffer at location index\n        !*/\n\n\n    private:\n\n        // restricted functions\n        lz77_buffer(lz77_buffer&);        // copy constructor\n        lz77_buffer& operator=(lz77_buffer&);    // assignment operator\n\n    };      \n}\n\n#endif // DLIB_LZ77_BUFFER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lz77_buffer/lz77_buffer_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LZ77_BUFFER_KERNEl_C_\n#define DLIB_LZ77_BUFFER_KERNEl_C_\n\n#include \"lz77_buffer_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename lz77_base\n        >\n    class lz77_buffer_kernel_c : public lz77_base\n    {\n        \n        public:\n        lz77_buffer_kernel_c (\n            unsigned long total_limit,\n            unsigned long lookahead_limit            \n        );\n\n        unsigned char lookahead_buffer (\n            unsigned long index\n        ) const;\n\n        unsigned char history_buffer (\n            unsigned long index\n        ) const;\n\n        void shift_buffers (\n            unsigned long N\n        );\n\n\n\n        unsigned long make_safe (\n            unsigned long total_limit,\n            unsigned long lookahead_limit\n        )\n        /*!\n            ensures\n                - if ( 6 < total_limit < 32 && \n                       15 < lookahead_limit <= 2^(total_limit-2) \n                       ) then\n                    - returns total_limit\n                - else\n                    - throws due to failed CASSERT\n        !*/\n        {\n            unsigned long exp_size = (total_limit!=0)?total_limit-2:0;\n            unsigned long two_pow_total_limit_minus_2 = 1;\n            while (exp_size != 0)\n            {\n                --exp_size;\n                two_pow_total_limit_minus_2 <<= 1;            \n            }\n\n            // make sure requires clause is not broken\n            DLIB_CASSERT( 6 < total_limit && total_limit < 32 &&\n                    15 < lookahead_limit && lookahead_limit <= two_pow_total_limit_minus_2,\n                \"\\tlz77_buffer::lz77_buffer(unsigned long,unsigned long)\"\n                << \"\\n\\ttotal_limit must be in the range 7 to 31 and \\n\\tlookahead_limit in the range 15 to 2^(total_limit-2)\"\n                << \"\\n\\tthis:            \" << this\n                << \"\\n\\ttotal_limit:     \" << total_limit\n                << \"\\n\\tlookahead_limit: \" << lookahead_limit\n                );\n\n            return total_limit;\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lz77_base\n        >\n    void lz77_buffer_kernel_c<lz77_base>::\n    shift_buffers (\n            unsigned long N\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( N <= this->get_lookahead_buffer_size(),\n            \"\\tvoid lz77_buffer::shift_buffers(unsigned long)\"\n            << \"\\n\\tN must be <= the number of chars in the lookahead buffer\"\n            << \"\\n\\tthis:                        \" << this\n            << \"\\n\\tget_lookahead_buffer_size(): \" << this->get_lookahead_buffer_size()\n            << \"\\n\\tN:                           \" << N\n            );\n\n        // call the real function\n        lz77_base::shift_buffers(N);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lz77_base\n        >\n    unsigned char lz77_buffer_kernel_c<lz77_base>::\n    history_buffer (\n            unsigned long index\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( index < this->get_history_buffer_size(),\n            \"\\tunsigned char lz77_buffer::history_buffer(unsigned long) const\"\n            << \"\\n\\tindex must be in the range 0 to get_history_buffer_size()-1\"\n            << \"\\n\\tthis:                      \" << this\n            << \"\\n\\tget_history_buffer_size(): \" << this->get_history_buffer_size()\n            << \"\\n\\tindex:                     \" << index\n            );\n\n        // call the real function\n        return lz77_base::history_buffer(index);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lz77_base\n        >\n    unsigned char lz77_buffer_kernel_c<lz77_base>::\n    lookahead_buffer (\n            unsigned long index\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( index < this->get_lookahead_buffer_size(),\n            \"\\tunsigned char lz77_buffer::lookahead_buffer(unsigned long) const\"\n            << \"\\n\\tindex must be in the range 0 to get_lookahead_buffer_size()-1\"\n            << \"\\n\\tthis:                        \" << this\n            << \"\\n\\tget_lookahead_buffer_size(): \" << this->get_lookahead_buffer_size()\n            << \"\\n\\tindex:                       \" << index\n            );\n\n        // call the real function\n        return lz77_base::lookahead_buffer(index);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lz77_base\n        >\n    lz77_buffer_kernel_c<lz77_base>::\n    lz77_buffer_kernel_c (\n        unsigned long total_limit,\n        unsigned long lookahead_limit  \n    ) :\n        lz77_base(make_safe(total_limit,lookahead_limit),lookahead_limit)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LZ77_BUFFER_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lz77_buffer.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LZ77_BUFFEr_\n#define DLIB_LZ77_BUFFEr_\n\n\n#include \"lz77_buffer/lz77_buffer_kernel_1.h\"\n#include \"lz77_buffer/lz77_buffer_kernel_2.h\"\n#include \"lz77_buffer/lz77_buffer_kernel_c.h\"\n\n#include \"sliding_buffer.h\"\n\n\nnamespace dlib\n{\n\n\n    class lz77_buffer\n    {\n\n        lz77_buffer() {}\n\n        typedef sliding_buffer<unsigned char>::kernel_1a sb1;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     lz77_buffer_kernel_1<sb1>   \n                    kernel_1a;\n        typedef     lz77_buffer_kernel_c<kernel_1a>\n                    kernel_1a_c;\n\n\n        // kernel_2a        \n        typedef     lz77_buffer_kernel_2<sb1>   \n                    kernel_2a;\n        typedef     lz77_buffer_kernel_c<kernel_2a>\n                    kernel_2a_c;\n   \n\n    };\n}\n\n#endif // DLIB_LZ77_BUFFEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lzp_buffer/lzp_buffer_kernel_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LZP_BUFFER_KERNEl_1_\n#define DLIB_LZP_BUFFER_KERNEl_1_\n\n#include \"../algs.h\"\n#include \"lzp_buffer_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename sbuf\n        >\n    class lzp_buffer_kernel_1 \n    {\n        /*!\n            REQUIREMENTS ON sbuf\n                sbuf is an implementation of sliding_buffer/sliding_buffer_kernel_abstract.h\n                T == unsigned char\n\n            INITIAL VALUE\n                - buffer.size() == the size as defined by the constructor\n                - table_size == the number of elements in the table array\n                - for all i: buffer[i] == 0\n                - for all i: table[i] == buffer.size()                \n\n            CONVENTION\n                - table_size == the number of elements in the table array\n                - size() == buffer.size()\n                - operator[](i) == buffer[i]\n\n                - if (table[hash()] != buffer.size()) then\n                    - buffer.get_element_index(table[hash()]) == the index we will \n                      predict for the current context\n                - else\n                    - there is no prediction for the current context\n\n                - last_element == buffer.size()-1\n\n                \n                This is LZP with just an order-3 model without context confirmation.\n        \n        !*/\n\n    public:\n\n        explicit lzp_buffer_kernel_1 (\n            unsigned long buffer_size           \n        );\n\n        virtual ~lzp_buffer_kernel_1 (\n        );\n\n        void clear(\n        );\n\n        inline void add (\n            unsigned char symbol\n        );\n\n        inline unsigned long predict_match (\n            unsigned long& index\n        );\n\n        inline unsigned long size (\n        ) const;\n\n        inline unsigned char operator[] (\n            unsigned long index\n        ) const;\n\n    private:\n\n        inline unsigned long hash (\n        ) const\n        /*!\n            ensures\n                - returns a hash computed from the current context.  This hash\n                  is always in the range for table.\n        !*/\n        {\n            unsigned long temp = buffer[0];\n            temp <<= 16;\n            unsigned long temp2 = buffer[1];\n            temp2 <<= 8;\n            unsigned long temp3 = buffer[2];\n            temp = temp|temp2|temp3;\n\n            temp = ((temp>>11)^temp)&0xFFFF;\n           \n            return temp;\n        }\n\n        sbuf buffer;\n        const unsigned long table_size;\n        unsigned long* const table;\n        unsigned long last_element;\n\n        // restricted functions\n        lzp_buffer_kernel_1(const lzp_buffer_kernel_1<sbuf>&);        // copy constructor\n        lzp_buffer_kernel_1<sbuf>& operator=(const lzp_buffer_kernel_1<sbuf>&);    // assignment operator\n\n    };      \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    lzp_buffer_kernel_1<sbuf>::\n    lzp_buffer_kernel_1 (\n        unsigned long buffer_size           \n    ) :\n        table_size(65536),\n        table(new unsigned long[table_size])\n    {\n        buffer.set_size(buffer_size);\n\n        for (unsigned long i = 0; i < buffer.size(); ++i)\n            buffer[i] = 0;\n\n        for (unsigned long i = 0; i < table_size; ++i)\n            table[i] = buffer.size();\n\n        last_element = buffer.size()-1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    lzp_buffer_kernel_1<sbuf>::\n    ~lzp_buffer_kernel_1 (\n    )\n    {\n        delete [] table;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    void lzp_buffer_kernel_1<sbuf>::\n    clear(\n    )\n    {\n        for (unsigned long i = 0; i < buffer.size(); ++i)\n            buffer[i] = 0;\n\n        for (unsigned long i = 0; i < table_size; ++i)\n            table[i] = buffer.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    void lzp_buffer_kernel_1<sbuf>::\n    add (\n        unsigned char symbol\n    ) \n    { \n        buffer.rotate_left(1); \n        buffer[0] = symbol; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    unsigned long lzp_buffer_kernel_1<sbuf>::\n    predict_match (\n        unsigned long& index\n    )\n    {\n        const unsigned long i = hash();\n\n        if (table[i] != buffer.size())\n        {\n            index = buffer.get_element_index(table[i]);\n\n            if (index > 20)\n            {\n                // update the prediction for this context\n                table[i] = buffer.get_element_id(last_element);\n            }\n            return 3;\n        }\n        else\n        {\n            // update the prediction for this context\n            table[i] = buffer.get_element_id(last_element);\n            return 0;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    unsigned long lzp_buffer_kernel_1<sbuf>::\n    size (\n    ) const \n    { \n        return buffer.size(); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    unsigned char lzp_buffer_kernel_1<sbuf>::\n    operator[] (\n        unsigned long index\n    ) const \n    { \n        return buffer[index]; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LZP_BUFFER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lzp_buffer/lzp_buffer_kernel_2.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LZP_BUFFER_KERNEl_2_\n#define DLIB_LZP_BUFFER_KERNEl_2_\n\n#include \"../algs.h\"\n#include \"lzp_buffer_kernel_abstract.h\"\n#include <new>\n\nnamespace dlib\n{\n\n    template <\n        typename sbuf\n        >\n    class lzp_buffer_kernel_2 \n    {\n        /*!\n            REQUIREMENTS ON sbuf\n                sbuf is an implementation of sliding_buffer/sliding_buffer_kernel_abstract.h\n                T == unsigned char\n\n            INITIAL VALUE\n                - buffer.size() == the size as defined by the constructor\n                - table_size == the number of elements in the table3 and table4 arrays\n                - for all i: buffer[i] == 0\n                - for all i: table3[i] == buffer.size()\n                - for all i: table4[i] == buffer.size()\n\n            CONVENTION\n                - table_size == the number of elements in the table3 and table4 arrays\n                - size() == buffer.size()\n                - operator[](i) == buffer[i]\n\n                \n\n                - last_element == buffer.size()-1\n\n                \n                This is LZP with an order-5-4-3 model with context confirmation.\n                To save memory the order5 and order3 predictions exist in the same\n                table, that is, table3.\n        \n        !*/\n\n    public:\n\n        explicit lzp_buffer_kernel_2 (\n            unsigned long buffer_size           \n        );\n\n        virtual ~lzp_buffer_kernel_2 (\n        );\n\n        void clear(\n        );\n\n        inline void add (\n            unsigned char symbol\n        );\n\n        inline unsigned long predict_match (\n            unsigned long& index\n        );\n\n        inline unsigned long size (\n        ) const;\n\n        inline unsigned char operator[] (\n            unsigned long index\n        ) const;\n\n    private:\n\n        inline bool verify (\n            unsigned long index\n        ) const\n        /*!\n            ensures\n                - returns true if buffer[index]'s context matches the current context\n        !*/\n        { \n            if (index+3 < buffer.size())\n            {\n                if (buffer[0] != buffer[index+1])\n                    return false;\n                if (buffer[1] != buffer[index+2])\n                    return false;\n                if (buffer[2] != buffer[index+3])\n                    return false;\n                return true;\n            }\n            else\n            {\n                // just call this a match\n                return true;\n            }\n        }\n\n\n        sbuf buffer;        \n        unsigned long* table3;\n        unsigned long* table4;\n        unsigned long last_element;\n        const unsigned long table_size;\n\n        // restricted functions\n        lzp_buffer_kernel_2(const lzp_buffer_kernel_2<sbuf>&);        // copy constructor\n        lzp_buffer_kernel_2<sbuf>& operator=(const lzp_buffer_kernel_2<sbuf>&);    // assignment operator\n\n    };      \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    lzp_buffer_kernel_2<sbuf>::\n    lzp_buffer_kernel_2 (\n        unsigned long buffer_size           \n    ) :\n        table3(0),\n        table4(0),\n        table_size(65536)\n    {\n        buffer.set_size(buffer_size);\n\n        table3 = new (std::nothrow) unsigned long[table_size];\n        table4 = new (std::nothrow) unsigned long[table_size];\n\n        if (!table3 || !table4)\n        {\n            if (!table3)\n                delete [] table3;\n            if (!table4)\n                delete [] table4;\n\n            throw std::bad_alloc();\n        }\n        \n        \n\n        for (unsigned long i = 0; i < buffer.size(); ++i)\n            buffer[i] = 0;\n\n        for (unsigned long i = 0; i < table_size; ++i)\n        {\n            table3[i] = buffer.size();\n            table4[i] = buffer.size();\n        }\n\n        last_element = buffer.size()-1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    lzp_buffer_kernel_2<sbuf>::\n    ~lzp_buffer_kernel_2 (\n    )\n    {\n        delete [] table3;\n        delete [] table4;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    void lzp_buffer_kernel_2<sbuf>::\n    clear(\n    )\n    {\n        for (unsigned long i = 0; i < buffer.size(); ++i)\n            buffer[i] = 0;\n\n        for (unsigned long i = 0; i < table_size; ++i)\n        {\n            table3[i] = buffer.size();\n            table4[i] = buffer.size();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    void lzp_buffer_kernel_2<sbuf>::\n    add (\n        unsigned char symbol\n    ) \n    { \n        buffer.rotate_left(1); \n        buffer[0] = symbol; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    unsigned long lzp_buffer_kernel_2<sbuf>::\n    predict_match (\n        unsigned long& index\n    )\n    {\n        unsigned long temp1 = buffer[0];\n        unsigned long temp2 = buffer[1];\n        temp2 <<= 8;\n        unsigned long temp3 = buffer[2];\n        temp3 <<= 16;\n        unsigned long temp4 = buffer[3];\n        temp4 <<= 24;\n        unsigned long temp5 = buffer[4];\n        temp5 <<= 12;\n        \n        unsigned long context1 = temp1|temp2|temp3;    \n        unsigned long context2 = context1|temp4;\n\n\n        const unsigned long i5 = ((temp5|(context2>>20))^context2)&0xFFFF;\n        const unsigned long i4 = ((context2>>15)^context2)&0xFFFF;\n        const unsigned long i3 = ((context1>>11)^context1)&0xFFFF;\n      \n\n\n        // check the 5-order context's prediction\n        if (table3[i5] != buffer.size() && \n            verify(buffer.get_element_index(table3[i5])) )\n        {\n            index = buffer.get_element_index(table3[i5]);\n            if (index > 20)\n            {\n                // update the prediction for this context\n                table3[i3] = buffer.get_element_id(last_element);\n                table4[i4] = table3[i3];     \n                table3[i5] = table3[i3];\n            }\n            return 5;\n        }\n        // check the 4-order context's prediction\n        else if (table4[i4] != buffer.size() && \n            verify(buffer.get_element_index(table4[i4])) )\n        {\n            index = buffer.get_element_index(table4[i4]);\n            if (index > 20)\n            {\n                // update the prediction for this context\n                table3[i3] = buffer.get_element_id(last_element);\n                table4[i4] = table3[i3];           \n                table3[i5] = table3[i3];          \n            }\n            return 4;\n        }\n        // check the 3-order context's prediction\n        else if (table3[i3] != buffer.size() &&\n            verify(buffer.get_element_index(table3[i3])))\n        {\n            index = buffer.get_element_index(table3[i3]);\n            \n            if (index > 20)\n            {\n                // update the prediction for this context\n                table3[i3] = buffer.get_element_id(last_element);\n                table4[i4] = table3[i3];        \n                table3[i5] = table3[i3];             \n            }\n            return 3;\n        } \n        else\n        {\n            // update the prediction for this context\n            table3[i3] = buffer.get_element_id(last_element);\n            table4[i4] = table3[i3];            \n            table3[i5] = table3[i3];         \n            \n            return 0;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    unsigned long lzp_buffer_kernel_2<sbuf>::\n    size (\n    ) const \n    { \n        return buffer.size(); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sbuf\n        >\n    unsigned char lzp_buffer_kernel_2<sbuf>::\n    operator[] (\n        unsigned long index\n    ) const \n    { \n        return buffer[index]; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LZP_BUFFER_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lzp_buffer/lzp_buffer_kernel_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LZP_BUFFER_KERNEl_ABSTRACT_\n#ifdef DLIB_LZP_BUFFER_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    class lzp_buffer \n    {\n        /*!\n            INITIAL VALUE\n                size() == some value defined by the constructor argument\n                Initially this object is at some predefined empty or ground state.\n                for all i: (*this)[i] == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents some varation on the LZP algorithm\n                described by Charles Bloom in his paper \"LZP: a new data\n                compression algorithm\"\n\n                The LZP algorithm is a lot like lz77 except there is no need to pass\n                the location of matches in the history buffer to the decoder because\n                LZP uses the data it has already seen to predict the location of the\n                next match.  \n\n            NOTE\n                The add() and predict_match() functions must be called in the same\n                order by the coder and decoder.  If they aren't the state of the \n                lzp_buffer objects in the coder and decoder may differ and the decoder \n                won't be able to correctly decode the data stream.\n        !*/\n\n    public:\n\n        explicit lzp_buffer (\n            unsigned long buffer_size           \n        );\n        /*!\n            requires\n                - 10 < buffer_size < 32\n            ensures                \n                - #*this is properly initialized\n                - #size() == 2^buffer_size\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~lzp_buffer (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void add (\n            unsigned char symbol\n        );\n        /*!\n            ensures\n                - shifts everything in the history buffer left 1.\n                  (i.e. #(*this)[i+1] == (*this)[i])\n                - #(*this)[0] == symbol\n            throws\n                - std::bad_alloc\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds  \n        !*/\n\n        unsigned long predict_match (\n            unsigned long& index\n        );\n        /*!\n            ensures\n                - updates the prediction for the current context.\n                  (the current context is the last few symbols seen. i.e. (*this)[0], \n                   (*this)[1], etc.)\n                - if (*this can generate a prediction) then\n                    - #index == the predicted location of a match in the history buffer.\n                      (i.e. (*this)[#index] is the first symbol of the predicted match)\n                    - returns the order this prediction came from\n                - else\n                    - returns 0\n            throws\n                - std::bad_alloc\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds            \n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns the size of the history buffer\n        !*/\n\n        unsigned char operator[] (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < size()\n            ensures\n                - returns the symbol at the given index in the history buffer\n        !*/\n\n    private:\n\n        // restricted functions\n        lzp_buffer(const lzp_buffer&);        // copy constructor\n        lzp_buffer& operator=(const lzp_buffer&);    // assignment operator\n\n    };      \n}\n\n#endif // DLIB_LZP_BUFFER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lzp_buffer/lzp_buffer_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LZP_BUFFER_KERNEl_C_\n#define DLIB_LZP_BUFFER_KERNEl_C_\n\n#include \"lzp_buffer_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename lzp_base\n        >\n    class lzp_buffer_kernel_c : public lzp_base\n    {\n        \n        public:\n        lzp_buffer_kernel_c (\n            unsigned long buffer_size         \n        );\n\n     \n        unsigned char operator[] (\n            unsigned long index\n        ) const;\n\n\n        unsigned long make_safe (\n            unsigned long buffer_size\n        )\n        /*!\n            ensures\n                - if ( 10 < buffer_size < 32) then\n                    - returns buffer_size\n                - else\n                    - throws due to failed CASSERT\n        !*/\n        {\n\n            // make sure requires clause is not broken\n            DLIB_CASSERT( 10 < buffer_size && buffer_size < 32,\n                \"\\tlzp_buffer::lzp_buffer(unsigned long)\"\n                << \"\\n\\tbuffer_size must be in the range 11 to 31.\"\n                << \"\\n\\tthis:         \" << this\n                << \"\\n\\tbuffer_size:  \" << buffer_size\n                );\n\n            return buffer_size;\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lzp_base\n        >\n    unsigned char lzp_buffer_kernel_c<lzp_base>::\n    operator[] (\n            unsigned long index\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( index < this->size(),\n            \"\\tunsigned char lzp_buffer::operator[](unsigned long) const\"\n            << \"\\n\\tindex must be in the range 0 to size()()-1\"\n            << \"\\n\\tthis:    \" << this\n            << \"\\n\\tsize():  \" << this->size()\n            << \"\\n\\tindex:   \" << index\n            );\n\n        // call the real function\n        return lzp_base::operator[](index);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lzp_base\n        >\n    lzp_buffer_kernel_c<lzp_base>::\n    lzp_buffer_kernel_c (\n        unsigned long buffer_size\n    ) :\n        lzp_base(make_safe(buffer_size))\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LZP_BUFFER_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/lzp_buffer.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LZP_BUFFEr_\n#define DLIB_LZP_BUFFEr_\n\n\n#include \"lzp_buffer/lzp_buffer_kernel_1.h\"\n#include \"lzp_buffer/lzp_buffer_kernel_2.h\"\n#include \"lzp_buffer/lzp_buffer_kernel_c.h\"\n\n#include \"sliding_buffer.h\"\n\n\nnamespace dlib\n{\n\n\n    class lzp_buffer\n    {\n\n        lzp_buffer() {}\n\n        typedef sliding_buffer<unsigned char>::kernel_1a sb1;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     lzp_buffer_kernel_1<sb1>   \n                    kernel_1a;\n        typedef     lzp_buffer_kernel_c<kernel_1a>\n                    kernel_1a_c;\n\n        // kernel_2a        \n        typedef     lzp_buffer_kernel_2<sb1>   \n                    kernel_2a;\n        typedef     lzp_buffer_kernel_c<kernel_2a>\n                    kernel_2a_c;\n  \n\n    };\n}\n\n#endif // DLIB_LZP_BUFFEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/manifold_regularization/linear_manifold_regularizer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LINEAR_MANIFOLD_ReGULARIZER_Hh_\n#define DLIB_LINEAR_MANIFOLD_ReGULARIZER_Hh_\n\n#include \"linear_manifold_regularizer_abstract.h\"\n#include <limits>\n#include <vector>\n#include \"../serialize.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace impl\n    {\n        class undirected_adjacency_list\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This object is simply a tool for turning a vector of sample_pair objects\n                    into an adjacency list with floating point weights on each edge.  \n            !*/\n        public:\n\n            undirected_adjacency_list (\n            )\n            {\n                _size = 0;\n                sum_edge_weights = 0;\n            }\n\n            struct neighbor \n            {\n                neighbor(unsigned long idx, double w):index(idx), weight(w) {}\n                neighbor():index(0), weight(0) {}\n\n                unsigned long index;\n                double weight;\n            };\n\n            typedef std::vector<neighbor>::const_iterator const_iterator;\n\n            unsigned long size (\n            ) const\n            /*!\n                ensures\n                    - returns the number of vertices in this graph\n            !*/\n            {\n                return _size;\n            }\n\n            const_iterator begin(\n                unsigned long idx\n            ) const\n            /*!\n                requires\n                    - idx < size()\n                ensures\n                    - returns an iterator that points to the first neighbor of \n                      the idx'th vertex.\n            !*/\n            {\n                return blocks[idx];\n            }\n\n            const_iterator end(\n                unsigned long idx\n            ) const\n            /*!\n                requires\n                    - idx < size()\n                ensures\n                    - returns an iterator that points one past the last neighbor\n                      of the idx'th vertex.\n            !*/\n            {\n                return blocks[idx+1];\n            }\n\n\n            template <typename vector_type, typename weight_function_type>\n            void build (\n                const vector_type& edges,\n                const weight_function_type& weight_funct\n            ) \n            /*!\n                requires\n                    - vector_type == a type with an interface compatible with std::vector and \n                      it must in turn contain objects with an interface compatible with dlib::sample_pair\n                    - edges.size() > 0\n                    - contains_duplicate_pairs(edges) == false\n                    - weight_funct(edges[i]) must be a valid expression that evaluates to a\n                      floating point number >= 0\n                ensures\n                    - #size() == one greater than the max index in edges.\n                    - builds the adjacency list so that it contains all the given edges.\n                    - The weight in each neighbor is set to the output of the weight_funct()\n                      for the associated edge.\n            !*/\n            {\n\n\n                // Figure out how many neighbors each sample ultimately has.  We do this so \n                // we will know how much space to allocate in the data vector.\n                std::vector<unsigned long> num_neighbors;\n                num_neighbors.reserve(edges.size());\n\n                for (unsigned long i = 0; i < edges.size(); ++i)\n                {\n                    // make sure num_neighbors is always big enough \n                    const unsigned long min_size = std::max(edges[i].index1(), edges[i].index2())+1;\n                    if (num_neighbors.size() < min_size)\n                        num_neighbors.resize(min_size,  0);\n\n                    num_neighbors[edges[i].index1()] += 1;\n                    num_neighbors[edges[i].index2()] += 1;\n                }\n\n                _size = num_neighbors.size();\n\n                // Now setup the iterators in blocks.  Also setup a version of blocks that holds\n                // non-const iterators so we can use it below when we populate data.\n                std::vector<std::vector<neighbor>::iterator> mutable_blocks;\n                data.resize(edges.size()*2); // each edge will show up twice \n                blocks.resize(_size + 1);\n                blocks[0] = data.begin();\n                mutable_blocks.resize(_size + 1);\n                mutable_blocks[0] = data.begin();\n                for (unsigned long i = 0; i < num_neighbors.size(); ++i)\n                {\n                    blocks[i+1]         = blocks[i]         + num_neighbors[i];\n                    mutable_blocks[i+1] = mutable_blocks[i] + num_neighbors[i];\n                }\n\n                sum_edge_weights = 0;\n                // finally, put the edges into data\n                for (unsigned long i = 0; i < edges.size(); ++i)\n                {\n                    const double weight = weight_funct(edges[i]);\n                    sum_edge_weights += weight;\n\n                    // make sure requires clause is not broken\n                    DLIB_ASSERT(weight >= 0,\n                        \"\\t void linear_manifold_regularizer::build()\"\n                        << \"\\n\\t You supplied a weight_funct() that generated a negative weight.\"\n                        << \"\\n\\t weight: \" << weight \n                        );\n\n                    *mutable_blocks[edges[i].index1()]++ = neighbor(edges[i].index2(), weight);\n                    *mutable_blocks[edges[i].index2()]++ = neighbor(edges[i].index1(), weight);\n                }\n\n            }\n\n            double sum_of_edge_weights (\n            ) const\n            {\n                return sum_edge_weights;\n            }\n\n        private:\n\n            /*!\n                INITIAL VALUE\n                    - _size == 0\n                    - data.size() == 0\n                    - blocks.size() == 0\n                    - sum_edge_weights == 0\n\n                CONVENTION\n                    - size() == _size\n                    - blocks.size() == _size + 1\n                    - sum_of_edge_weights() == sum_edge_weights\n                    - blocks == a vector of iterators that point into data.  \n                      For all valid i:\n                        - The iterator range [blocks[i], blocks[i+1]) contains all the edges\n                          for the i'th node in the graph\n            !*/\n\n            std::vector<neighbor> data;\n            std::vector<const_iterator> blocks; \n            unsigned long _size;\n\n            double sum_edge_weights;\n        };\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class linear_manifold_regularizer\n    {\n\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n\n\n        template <\n            typename vector_type1, \n            typename vector_type2, \n            typename weight_function_type\n            >\n        void build (\n            const vector_type1& samples,\n            const vector_type2& edges,\n            const weight_function_type& weight_funct\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(edges.size() > 0 &&\n                        contains_duplicate_pairs(edges) == false &&\n                        max_index_plus_one(edges) <= samples.size(),\n                \"\\t void linear_manifold_regularizer::build()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n                << \"\\n\\t edges.size():                    \" << edges.size()\n                << \"\\n\\t samples.size():                  \" << samples.size()\n                << \"\\n\\t contains_duplicate_pairs(edges): \" << contains_duplicate_pairs(edges) \n                << \"\\n\\t max_index_plus_one(edges):       \" << max_index_plus_one(edges) \n                );\n\n\n            impl::undirected_adjacency_list graph;\n            graph.build(edges, weight_funct);\n\n            sum_edge_weights = graph.sum_of_edge_weights();\n\n            make_mr_matrix(samples, graph);\n        }\n\n        long dimensionality (\n        ) const { return reg_mat.nr(); }\n\n        general_matrix get_transformation_matrix (\n            scalar_type intrinsic_regularization_strength\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(intrinsic_regularization_strength >= 0,\n                \"\\t matrix linear_manifold_regularizer::get_transformation_matrix()\"\n                << \"\\n\\t This value must not be negative\"\n                << \"\\n\\t intrinsic_regularization_strength: \" << intrinsic_regularization_strength \n                );\n\n            if (dimensionality() == 0)\n                return general_matrix();\n\n\n            // This isn't how it's defined in the referenced paper but normalizing these kinds of\n            // sums is typical of most machine learning algorithms.  Moreover, doing this makes\n            // the argument to this function more invariant to the size of the edge set.  So it\n            // should make it easier for the user.\n            intrinsic_regularization_strength /= sum_edge_weights;\n\n            return inv_lower_triangular(chol(identity_matrix<scalar_type>(reg_mat.nr()) + intrinsic_regularization_strength*reg_mat));\n        }\n\n    private:\n\n        template <typename vector_type>\n        void make_mr_matrix (\n            const vector_type& samples,\n            const impl::undirected_adjacency_list& graph\n        )\n        /*!\n            requires\n                - samples.size() == graph.size()\n            ensures\n                - computes trans(X)*lap(graph)*X where X is the data matrix \n                  (i.e. the matrix that contains all the samples in its rows)\n                  and lap(graph) is the laplacian matrix of the graph.  The\n                  resulting matrix is stored in reg_mat.\n        !*/\n        {\n            const unsigned long dims = samples[0].size();\n            reg_mat.set_size(dims,dims);\n            reg_mat = 0;\n\n\n            typename impl::undirected_adjacency_list::const_iterator beg, end;\n\n            // loop over the columns of the X matrix\n            for (unsigned long d = 0; d < dims; ++d)\n            {\n                // loop down the row of X\n                for (unsigned long i = 0; i < graph.size(); ++i)\n                {\n                    beg = graph.begin(i);\n                    end = graph.end(i);\n\n                    // if this node in the graph has any neighbors\n                    if (beg != end)\n                    {\n                        double weight_sum = 0;\n                        double val = 0;\n                        for (; beg != end; ++beg)\n                        {\n                            val -= beg->weight * samples[beg->index](d);\n                            weight_sum += beg->weight;\n                        }\n                        val += weight_sum * samples[i](d);\n\n                        for (unsigned long j = 0; j < dims; ++j)\n                        {\n                            reg_mat(d,j) += val*samples[i](j);\n                        }\n                    }\n                }\n            }\n\n        }\n\n        general_matrix reg_mat;\n        double sum_edge_weights;\n    };\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LINEAR_MANIFOLD_ReGULARIZER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/manifold_regularization/linear_manifold_regularizer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LINEAR_MANIFOLD_ReGULARIZER_ABSTRACT_Hh_\n#ifdef DLIB_LINEAR_MANIFOLD_ReGULARIZER_ABSTRACT_Hh_\n\n#include <limits>\n#include <vector>\n#include \"../serialize.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class linear_manifold_regularizer\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                Must be some type of dlib::matrix.\n\n            INITIAL VALUE\n                - dimensionality() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                Many learning algorithms attempt to minimize a function that, at a high \n                level, looks like this:   \n                    f(w) == complexity + training_set_error\n\n                The idea is to find the set of parameters, w, that gives low error on \n                your training data but also is not \"complex\" according to some particular\n                measure of complexity.  This strategy of penalizing complexity is \n                usually called regularization.\n\n                In the above setting, all the training data consists of labeled samples.  \n                However, it would be nice to be able to benefit from unlabeled data.  \n                The idea of manifold regularization is to extract useful information from \n                unlabeled data by first defining which data samples are \"close\" to each other \n                (perhaps by using their 3 nearest neighbors) and then adding a term to \n                the above function that penalizes any decision rule which produces \n                different outputs on data samples which we have designated as being close.\n                \n                It turns out that it is possible to transform these manifold regularized \n                learning problems into the normal form shown above by applying a certain kind \n                of preprocessing to all our data samples.  Once this is done we can use a \n                normal learning algorithm, such as the svm_c_linear_trainer, on just the\n                labeled data samples and obtain the same output as the manifold regularized\n                learner would have produced.  \n                \n                The linear_manifold_regularizer is a tool for creating this preprocessing \n                transformation.  In particular, the transformation is linear.  That is, it \n                is just a matrix you multiply with all your samples.  For a more detailed \n                discussion of this topic you should consult the following paper.  In \n                particular, see section 4.2.  This object computes the inverse T matrix \n                described in that section.\n\n                    Linear Manifold Regularization for Large Scale Semi-supervised Learning\n                    by Vikas Sindhwani, Partha Niyogi, and Mikhail Belkin\n        !*/\n\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n\n        template <\n            typename vector_type1, \n            typename vector_type2, \n            typename weight_function_type\n            >\n        void build (\n            const vector_type1& samples,\n            const vector_type2& edges,\n            const weight_function_type& weight_funct\n        );\n        /*!\n            requires\n                - vector_type1 == a type with an interface compatible with std::vector and it must\n                  in turn contain dlib::matrix objects.\n                - vector_type2 == a type with an interface compatible with std::vector and \n                  it must in turn contain objects with an interface compatible with dlib::sample_pair\n                - edges.size() > 0\n                - contains_duplicate_pairs(edges) == false\n                - max_index_plus_one(edges) <= samples.size()\n                - weight_funct(edges[i]) must be a valid expression that evaluates to a\n                  floating point number >= 0\n            ensures\n                - #dimensionality() == samples[0].size()\n                - This function sets up the transformation matrix describe above.  The manifold\n                  regularization is done assuming that the samples are meant to be \"close\" \n                  according to the graph defined by the given edges.  I.e:\n                    - for all valid i:  samples[edges[i].index1()] is close to samples[edges[i].index2()].\n                      How much we care about these two samples having similar outputs according\n                      to the learned rule is given by weight_funct(edges[i]).  Bigger weights mean\n                      we care more.\n        !*/\n\n        long dimensionality (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows and columns in the transformation matrix\n                  produced by this object.\n        !*/\n\n        general_matrix get_transformation_matrix (\n            scalar_type intrinsic_regularization_strength\n        ) const;\n        /*!\n            requires\n                - intrinsic_regularization_strength >= 0\n            ensures\n                - returns a matrix that represents the preprocessing transformation described above.\n                - You must choose how important the manifold regularizer is relative to the basic\n                  \"don't be complex\" regularizer described above.  The intrinsic_regularization_strength\n                  is the parameter that controls this trade-off.  A large value of \n                  intrinsic_regularization_strength means that more emphasis should be placed on\n                  finding decision rules which produce the same output on similar samples.  On \n                  the other hand, a small value would mean that we don't care much about the \n                  manifold regularizer.  For example, using 0 will cause this function to return the \n                  identity matrix.\n                - The returned matrix will have dimensionality() rows and columns.\n        !*/\n\n    };\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LINEAR_MANIFOLD_ReGULARIZER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/manifold_regularization.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MANIFOLD_REGULARIzATION_HEADER\n#define DLIB_MANIFOLD_REGULARIzATION_HEADER\n\n#include \"graph_utils/edge_list_graphs.h\"\n#include \"manifold_regularization/linear_manifold_regularizer.h\"\n#include \"graph_utils/function_objects.h\"\n\n#endif // DLIB_MANIFOLD_REGULARIzATION_HEADER\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/map/map_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MAP_KERNEl_1_\n#define DLIB_MAP_KERNEl_1_\n\n#include \"map_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,  \n        typename mem_manager = default_memory_manager \n        >\n    class map_kernel_1 : public enumerable<map_pair<domain,range> >,\n                         public asc_pair_remover<domain,range,typename bst_base::compare_type>\n    {\n\n        /*!\n            REQUIREMENTS ON BST_BASE\n                bst_base is instantiated with domain and range and\n                implements binary_search_tree/binary_search_tree_kernel_abstract.h\n\n            INITIAL VALUE\n                bst has its initial value\n\n            CONVENTION\n                bst.size() == the number of elements in the map and\n                the elements in map are stored in bst_base\n        !*/\n        \n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef typename bst_base::compare_type compare_type;\n            typedef mem_manager mem_manager_type;\n\n            map_kernel_1(\n            ) \n            {}\n\n            virtual ~map_kernel_1(\n            )\n            {}\n\n            inline void clear(\n            );            \n\n            inline void add (\n                domain& d,\n                range& r\n            );\n\n            inline bool is_in_domain (\n                const domain& d\n            ) const;\n\n            inline void remove_any (\n                domain& d,\n                range& r\n            );\n\n            inline void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n \n            inline void destroy (\n                const domain& d\n            );\n \n            inline range& operator[] (\n                const domain& d\n            );\n\n            inline const range& operator[] (\n                const domain& d\n            ) const;\n\n            inline void swap (\n                map_kernel_1& item\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            inline bool current_element_valid (\n            ) const;\n\n            inline const map_pair<domain,range>& element (\n            ) const;\n\n            inline map_pair<domain,range>& element (\n            );\n\n            inline bool move_next (\n            ) const;\n\n\n        private:\n\n            bst_base bst;\n\n            // restricted functions\n            map_kernel_1(map_kernel_1&);      \n            map_kernel_1& operator= ( map_kernel_1&);\n    };\n\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    inline void swap (\n        map_kernel_1<domain,range,bst_base,mem_manager>& a, \n        map_kernel_1<domain,range,bst_base,mem_manager>& b \n    ) { a.swap(b); }   \n\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    void deserialize (\n        map_kernel_1<domain,range,bst_base,mem_manager>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            domain d;\n            range r;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(d,in);\n                deserialize(r,in);\n                item.add(d,r);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type map_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    void map_kernel_1<domain,range,bst_base,mem_manager>::\n    clear (\n    )\n    {\n        bst.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    void map_kernel_1<domain,range,bst_base,mem_manager>::\n    add(\n        domain& d,\n        range& r\n    )\n    {\n        // try to add pair to bst_base\n        bst.add(d,r); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    bool map_kernel_1<domain,range,bst_base,mem_manager>::\n    is_in_domain(\n        const domain& d\n    ) const\n    {\n        return (bst[d] != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    void map_kernel_1<domain,range,bst_base,mem_manager>::\n    remove_any(\n        domain& d,\n        range& r\n    )\n    {\n        bst.remove_any(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    void map_kernel_1<domain,range,bst_base,mem_manager>::\n    remove (\n        const domain& d,\n        domain& d_copy,\n        range& r\n    )\n    {\n        bst.remove(d,d_copy,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    void map_kernel_1<domain,range,bst_base,mem_manager>::\n    destroy (\n        const domain& d\n    )\n    {\n        bst.destroy(d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    range& map_kernel_1<domain,range,bst_base,mem_manager>::\n    operator[](\n        const domain& d\n    )\n    {\n        return *bst[d];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    const range& map_kernel_1<domain,range,bst_base,mem_manager>::\n    operator[](\n        const domain& d\n    ) const\n    {\n        return *bst[d];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    unsigned long map_kernel_1<domain,range,bst_base,mem_manager>::\n    size (\n    ) const\n    {\n        return bst.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    void map_kernel_1<domain,range,bst_base,mem_manager>::\n    swap (\n        map_kernel_1<domain,range,bst_base,mem_manager>& item\n    )\n    {\n        bst.swap(item.bst);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    bool map_kernel_1<domain,range,bst_base,mem_manager>::\n    at_start (\n    ) const\n    {\n        return bst.at_start();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    void map_kernel_1<domain,range,bst_base,mem_manager>::\n    reset (\n    ) const\n    {\n        bst.reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    bool map_kernel_1<domain,range,bst_base,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return bst.current_element_valid();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    const map_pair<domain,range>& map_kernel_1<domain,range,bst_base,mem_manager>::\n    element (\n    ) const\n    {\n        return bst.element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    map_pair<domain,range>& map_kernel_1<domain,range,bst_base,mem_manager>::\n    element (\n    )\n    {\n        return bst.element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename bst_base,\n        typename mem_manager\n        >\n    bool map_kernel_1<domain,range,bst_base,mem_manager>::\n    move_next (\n    ) const\n    {\n        return bst.move_next();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MAP_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/map/map_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MAP_KERNEl_ABSTRACT_\n#ifdef DLIB_MAP_KERNEl_ABSTRACT_\n\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<domain>\n        >\n    class map : public enumerable<map_pair<domain,range> >, \n                public asc_pair_remover<domain,range,compare>\n    {\n\n        /*!\n            REQUIREMENTS ON domain\n                domain must be comparable by compare where compare is a functor compatible with std::less and\n                domain is swappable by a global swap() and                \n                domain must have a default constructor\n\n            REQUIREMENTS ON range\n                range is swappable by a global swap() and\n                range must have a default constructor\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap(), is_in_domain(), and operator[] functions do not invalidate \n                pointers or references to internal data.\n                All other functions have no such guarantee.\n\n            INITIAL VALUE\n                size() == 0\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the domain (and each associated\n                range element) elements in ascending order according to the compare functor. \n                (i.e. the elements are enumerated in sorted order)\n\n            WHAT THIS OBJECT REPRESENTS\n                map contains items of type domain and range\n\n                This object is similar an array.  It maps items of type domain on to \n                items of type range.   \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n\n                definition of equivalent:\n                a is equivalent to b if\n                a < b == false and\n                b < a == false\n        !*/\n        \n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef compare compare_type;\n            typedef mem_manager mem_manager_type;\n\n            map(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n            !*/\n\n            virtual ~map(\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            void add (\n                domain& d,\n                range& r\n            );\n            /*!\n                requires\n                    - &d != &r (i.e. d and r cannot be the same variable)\n                    - is_in_domain(d)  == false\n                ensures\n                    - #is_in_domain(d) == true\n                    - #operator[](d)   == r\n                    - #d and #r have initial values for their types \n                    - #size() == size() + 1\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n                        if add() throws then it has no effect\n            !*/\n\n            bool is_in_domain (\n                const domain& d\n            ) const;\n            /*!\n                ensures\n                    - returns whether or not an element equivalent to d is in the \n                      domain of *this\n            !*/\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n            /*!\n                requires\n                    - &d != &r (i.e. d and r cannot be the same variable) \n                    - &d != &d_copy (i.e. d and d_copy cannot be the same variable) \n                    - &r != &d_copy (i.e. r and d_copy cannot be the same variable) \n                    - is_in_domain(d) == true\n                ensures\n                    - #is_in_domain(d) == false \n                    - #d_copy is equivalent to d \n                    - the element in the range of *this associated with #d_copy has been \n                      swapped into #r \n                    - #size() == size() - 1\n                    - #at_start() == true\n            !*/\n\n            void destroy (\n                const domain& d\n            );\n            /*!\n                requires\n                    - is_in_domain(d) == true\n                ensures\n                    - #is_in_domain(d) == false \n                    - #size() == size() - 1\n                    - #at_start() == true\n            !*/\n\n            range& operator[] (\n                const domain& d\n            );\n            /*!\n                requires\n                    - is_in_domain(d) == true\n                ensures\n                    - returns a non-const reference to the element in the range of *this \n                      associated with the element equivalent to d\n            !*/\n\n            const range& operator[] (\n                const domain& d\n            ) const;\n            /*!\n                requires\n                    - is_in_domain(d) == true\n                ensures\n                    - returns a const reference to the element in the range of *this \n                      associated with the element equivalent to d\n            !*/\n\n            void swap (\n                map& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n    \n        private:\n\n            // restricted functions\n            map(map&);        // copy constructor\n            map& operator=(map&);    // assignment operator\n    };\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    inline void swap (\n        map<domain,range,mem_manager,compare>& a, \n        map<domain,range,mem_manager,compare>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager,\n        typename compare\n        >\n    void deserialize (\n        map<domain,range,mem_manager,compare>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_MAP_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/map/map_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MAP_KERNEl_C_\n#define DLIB_MAP_KERNEl_C_\n\n#include \"map_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include \"../interfaces/map_pair.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename map_base\n        >\n    class map_kernel_c : public map_base\n    {\n\n        typedef typename map_base::domain_type domain;\n        typedef typename map_base::range_type range;\n        \n        public:\n            void add (\n                domain& d,\n                range& r\n            );\n\n            void remove_any (\n                domain& d,\n                range& r\n            );\n\n            void remove (\n                const domain& d,\n                domain& d_copy,\n                range& r\n            );\n\n            void destroy (\n                const domain& d\n            );\n\n            range& operator[] (\n                const domain& d\n            );\n\n            const range& operator[] (\n                const domain& d\n            ) const;\n\n            const map_pair<domain,range>& element (\n            ) const\n            {\n                // make sure requires clause is not broken\n                DLIB_CASSERT(this->current_element_valid() == true,\n                    \"\\tconst map_pair<domain,range>& map::element\"\n                    << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                    << \"\\n\\tthis: \" << this\n                    );\n\n                // call the real function\n                return map_base::element();\n            }\n\n            map_pair<domain,range>& element (\n            )\n            {\n                // make sure requires clause is not broken\n                DLIB_CASSERT(this->current_element_valid() == true,\n                    \"\\tmap_pair<domain,range>& map::element\"\n                    << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                    << \"\\n\\tthis: \" << this\n                    );\n\n                // call the real function\n                return map_base::element();\n            }\n\n    };\n\n    template <\n        typename map_base\n        >\n    inline void swap (\n        map_kernel_c<map_base>& a, \n        map_kernel_c<map_base>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_base\n        >\n    void map_kernel_c<map_base>::\n    add (\n        domain& d,\n        range& r\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (!this->is_in_domain(d)) &&\n                (static_cast<void*>(&d) != static_cast<void*>(&r)),\n            \"\\tvoid map::add\"\n            << \"\\n\\tdomain element being added must not already be in the map\"\n            << \"\\n\\tand d and r must not be the same variable\"\n            << \"\\n\\tis_in_domain(d): \" << (this->is_in_domain(d) ? \"true\" : \"false\")\n            << \"\\n\\tthis: \" << this\n            << \"\\n\\t&d:   \" << static_cast<void*>(&d)\n            << \"\\n\\t&r:   \" << static_cast<void*>(&r)\n            );\n\n        // call the real function\n        map_base::add(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_base\n        >\n    void map_kernel_c<map_base>::\n    remove_any (\n        domain& d,\n        range& r\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (this->size() > 0)  &&\n                (static_cast<void*>(&d) != static_cast<void*>(&r)),\n            \"\\tvoid map::remove_any\"\n            << \"\\n\\tsize() must be greater than zero if something is going to be removed\"\n            << \"\\n\\tand d and r must not be the same variable.\"\n            << \"\\n\\tsize(): \" << this->size() \n            << \"\\n\\tthis:   \" << this\n            << \"\\n\\t&d:     \" << static_cast<void*>(&d)\n            << \"\\n\\t&r:     \" << static_cast<void*>(&r)\n            );\n\n        // call the real function\n        map_base::remove_any(d,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_base\n        >\n    void map_kernel_c<map_base>::\n    remove (\n        const domain& d,\n        domain& d_copy,\n        range& r\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (this->is_in_domain(d)) &&\n                (static_cast<const void*>(&d) != static_cast<void*>(&r)) &&\n                (static_cast<void*>(&r) != static_cast<void*>(&d_copy)) &&\n                (static_cast<const void*>(&d) != static_cast<void*>(&d_copy)),\n            \"\\tvoid map::remove\"\n            << \"\\n\\tcan't remove something that isn't in the map or if the paremeters actually\"\n            << \"\\n\\tare the same variable.  Either way can't remove.\"\n            << \"\\n\\tis_in_domain(d): \" << (this->is_in_domain(d) ? \"true\" : \"false\")\n            << \"\\n\\tthis:      \" << this\n            << \"\\n\\t&d:        \" << static_cast<const void*>(&d)\n            << \"\\n\\t&r:        \" << static_cast<void*>(&r)\n            << \"\\n\\t&d_copy:   \" << static_cast<void*>(&d_copy)\n            );\n\n        // call the real function\n        map_base::remove(d,d_copy,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_base\n        >\n    void map_kernel_c<map_base>::\n    destroy (\n        const domain& d\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->is_in_domain(d),\n            \"\\tvoid map::destroy\"\n            << \"\\n\\tcan't remove something that isn't in the map\"\n            << \"\\n\\tthis:      \" << this\n            << \"\\n\\t&d:        \" << static_cast<const void*>(&d)\n            );\n\n        // call the real function\n        map_base::destroy(d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_base\n        >\n    typename map_base::range_type& map_kernel_c<map_base>::\n    operator[] (\n        const domain& d\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->is_in_domain(d),\n            \"\\trange& map::operator[]\"\n            << \"\\n\\td must be in the domain of the map\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return map_base::operator[](d);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_base\n        >\n    const typename map_base::range_type& map_kernel_c<map_base>::\n    operator[] (\n        const domain& d\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->is_in_domain(d),\n            \"\\tconst range& map::operator[]\"\n            << \"\\n\\td must be in the domain of the map\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return map_base::operator[](d);\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MAP_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/map.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MAp_\n#define DLIB_MAp_\n\n#include \"map/map_kernel_1.h\"\n#include \"map/map_kernel_c.h\"\n\n#include \"binary_search_tree.h\"\n\n\n#include \"algs.h\"\n#include <functional>\n\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<domain>\n        >\n    class map\n    {\n        map() {}\n                \n\n        // a typedef for the binary search tree used by kernel_2\n        typedef typename binary_search_tree<domain,range,mem_manager,compare>::kernel_1a\n                binary_search_tree_1;\n\n        // a typedef for the binary search tree used by kernel_2\n        typedef typename binary_search_tree<domain,range,mem_manager,compare>::kernel_2a\n                binary_search_tree_2;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     map_kernel_1<domain,range,binary_search_tree_1,mem_manager>    \n                    kernel_1a;\n        typedef     map_kernel_c<kernel_1a >\n                    kernel_1a_c;   \n\n        // kernel_1b        \n        typedef     map_kernel_1<domain,range,binary_search_tree_2,mem_manager>    \n                    kernel_1b;\n        typedef     map_kernel_c<kernel_1b >\n                    kernel_1b_c;   \n\n\n    };\n}\n\n#endif // DLIB_MAp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/cblas_constants.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CBLAS_CONSTAnTS_Hh_\n#define DLIB_CBLAS_CONSTAnTS_Hh_\n\nnamespace dlib\n{\n    namespace blas_bindings\n    {\n        enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102};\n        enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113};\n        enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};\n        enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};\n        enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};\n\n    }\n}\n\n#endif // DLIB_CBLAS_CONSTAnTS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/fortran_id.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BOOST_NUMERIC_BINDINGS_TRAITS_FORTRAN_H\n#define DLIB_BOOST_NUMERIC_BINDINGS_TRAITS_FORTRAN_H\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//       FORTRAN BINDING STUFF FROM BOOST \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n//  Permission to copy, use, modify, sell and\n//  distribute this software is granted provided this copyright notice appears\n//  in all copies. This software is provided \"as is\" without express or implied\n//  warranty, and with no claim as to its suitability for any purpose.\n//  Copyright (C) 2002, 2003 Si-Lab b.v.b.a., Toon Knapen and Kresimir Fresl \n\n\n// First we need to know what the conventions for linking\n// C with Fortran is on this platform/toolset\n#if defined(__GNUC__) || defined(__ICC) || defined(__sgi) || defined(__COMO__) || defined(__KCC)\n#define DLIB_BIND_FORTRAN_LOWERCASE_UNDERSCORE\n#elif defined(__IBMCPP__) || defined(_MSC_VER)\n#define DLIB_BIND_FORTRAN_LOWERCASE\n#else\n#error do not know how to link with fortran for the given platform\n#endif\n\n// Next we define macros to convert our symbols to \n// the current convention\n#if defined(DLIB_BIND_FORTRAN_LOWERCASE_UNDERSCORE)\n#define DLIB_FORTRAN_ID( id ) id##_\n#elif defined(DLIB_BIND_FORTRAN_LOWERCASE)\n#define DLIB_FORTRAN_ID( id ) id\n#else\n#error do not know how to bind to fortran calling convention\n#endif\n\n\n\nnamespace dlib\n{\n    namespace lapack\n    {\n            // stuff from f2c used to define what exactly is an integer in fortran\n#if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__)\n            typedef int integer;\n            typedef unsigned int uinteger;\n#else\n            typedef long int integer;\n            typedef unsigned long int uinteger;\n#endif\n\n    }\n}\n\n#endif // DLIB_BOOST_NUMERIC_BINDINGS_TRAITS_FORTRAN_H\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/gees.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_ES_Hh_\n#define DLIB_LAPACk_ES_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n#if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__)\n            typedef int logical;\n#else\n            typedef long int logical;\n#endif\n            typedef logical (*L_fp)(...);\n\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dgees) (char *jobvs, char *sort, L_fp select, integer *n, \n                                             double *a, integer *lda, integer *sdim, double *wr, \n                                             double *wi, double *vs, integer *ldvs, double *work, \n                                             integer *lwork, logical *bwork, integer *info);\n\n                void DLIB_FORTRAN_ID(sgees) (char *jobvs, char *sort, L_fp select, integer *n, \n                                             float *a, integer *lda, integer *sdim, float *wr, \n                                             float *wi, float *vs, integer *ldvs, float *work, \n                                             integer *lwork, logical *bwork, integer *info);\n\n            }\n\n            inline int gees (char jobvs, integer n, \n                             double *a, integer lda, double *wr, \n                             double *wi, double *vs, integer ldvs, double *work, \n                             integer lwork)\n            {\n                // No sorting allowed\n                integer info = 0;\n                char sort = 'N';\n                L_fp fnil = 0;\n                logical nil = 0;\n                integer sdim = 0;\n                DLIB_FORTRAN_ID(dgees)(&jobvs, &sort, fnil, &n,\n                                       a, &lda, &sdim, wr,\n                                       wi, vs, &ldvs, work,\n                                       &lwork, &nil, &info);\n                return info;\n            }\n\n\n            inline int gees (char jobvs, integer n, \n                             float *a, integer lda, float *wr, \n                             float *wi, float *vs, integer ldvs, float *work, \n                             integer lwork)\n            {\n                // No sorting allowed\n                integer info = 0;\n                char sort = 'N';\n                L_fp fnil = 0;\n                logical nil = 0;\n                integer sdim = 0;\n                DLIB_FORTRAN_ID(sgees)(&jobvs, &sort, fnil, &n,\n                                       a, &lda, &sdim, wr,\n                                       wi, vs, &ldvs, work,\n                                       &lwork, &nil, &info);\n                return info;\n            }\n\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n/*  -- LAPACK driver routine (version 3.1) -- */\n/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */\n/*     November 2006 */\n\n/*     .. Scalar Arguments .. */\n/*     .. */\n/*     .. Array Arguments .. */\n/*     .. */\n/*     .. Function Arguments .. */\n/*     .. */\n\n/*  Purpose */\n/*  ======= */\n\n/*  DGEES computes for an N-by-N real nonsymmetric matrix A, the */\n/*  eigenvalues, the real Schur form T, and, optionally, the matrix of */\n/*  Schur vectors Z.  This gives the Schur factorization A = Z*T*(Z**T). */\n\n/*  Optionally, it also orders the eigenvalues on the diagonal of the */\n/*  real Schur form so that selected eigenvalues are at the top left. */\n/*  The leading columns of Z then form an orthonormal basis for the */\n/*  invariant subspace corresponding to the selected eigenvalues. */\n\n/*  A matrix is in real Schur form if it is upper quasi-triangular with */\n/*  1-by-1 and 2-by-2 blocks. 2-by-2 blocks will be standardized in the */\n/*  form */\n/*          [  a  b  ] */\n/*          [  c  a  ] */\n\n/*  where b*c < 0. The eigenvalues of such a block are a +- sqrt(bc). */\n\n/*  Arguments */\n/*  ========= */\n\n/*  JOBVS   (input) CHARACTER*1 */\n/*          = 'N': Schur vectors are not computed; */\n/*          = 'V': Schur vectors are computed. */\n\n/*  SORT    (input) CHARACTER*1 */\n/*          Specifies whether or not to order the eigenvalues on the */\n/*          diagonal of the Schur form. */\n/*          = 'N': Eigenvalues are not ordered; */\n/*          = 'S': Eigenvalues are ordered (see SELECT). */\n\n/*  SELECT  (external procedure) LOGICAL FUNCTION of two DOUBLE PRECISION arguments */\n/*          SELECT must be declared EXTERNAL in the calling subroutine. */\n/*          If SORT = 'S', SELECT is used to select eigenvalues to sort */\n/*          to the top left of the Schur form. */\n/*          If SORT = 'N', SELECT is not referenced. */\n/*          An eigenvalue WR(j)+sqrt(-1)*WI(j) is selected if */\n/*          SELECT(WR(j),WI(j)) is true; i.e., if either one of a complex */\n/*          conjugate pair of eigenvalues is selected, then both complex */\n/*          eigenvalues are selected. */\n/*          Note that a selected complex eigenvalue may no longer */\n/*          satisfy SELECT(WR(j),WI(j)) = .TRUE. after ordering, since */\n/*          ordering may change the value of complex eigenvalues */\n/*          (especially if the eigenvalue is ill-conditioned); in this */\n/*          case INFO is set to N+2 (see INFO below). */\n\n/*  N       (input) INTEGER */\n/*          The order of the matrix A. N >= 0. */\n\n/*  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N) */\n/*          On entry, the N-by-N matrix A. */\n/*          On exit, A has been overwritten by its real Schur form T. */\n\n/*  LDA     (input) INTEGER */\n/*          The leading dimension of the array A.  LDA >= max(1,N). */\n\n/*  SDIM    (output) INTEGER */\n/*          If SORT = 'N', SDIM = 0. */\n/*          If SORT = 'S', SDIM = number of eigenvalues (after sorting) */\n/*                         for which SELECT is true. (Complex conjugate */\n/*                         pairs for which SELECT is true for either */\n/*                         eigenvalue count as 2.) */\n\n/*  WR      (output) DOUBLE PRECISION array, dimension (N) */\n/*  WI      (output) DOUBLE PRECISION array, dimension (N) */\n/*          WR and WI contain the real and imaginary parts, */\n/*          respectively, of the computed eigenvalues in the same order */\n/*          that they appear on the diagonal of the output Schur form T. */\n/*          Complex conjugate pairs of eigenvalues will appear */\n/*          consecutively with the eigenvalue having the positive */\n/*          imaginary part first. */\n\n/*  VS      (output) DOUBLE PRECISION array, dimension (LDVS,N) */\n/*          If JOBVS = 'V', VS contains the orthogonal matrix Z of Schur */\n/*          vectors. */\n/*          If JOBVS = 'N', VS is not referenced. */\n\n/*  LDVS    (input) INTEGER */\n/*          The leading dimension of the array VS.  LDVS >= 1; if */\n/*          JOBVS = 'V', LDVS >= N. */\n\n/*  WORK    (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) */\n/*          On exit, if INFO = 0, WORK(1) contains the optimal LWORK. */\n\n/*  LWORK   (input) INTEGER */\n/*          The dimension of the array WORK.  LWORK >= max(1,3*N). */\n/*          For good performance, LWORK must generally be larger. */\n\n/*          If LWORK = -1, then a workspace query is assumed; the routine */\n/*          only calculates the optimal size of the WORK array, returns */\n/*          this value as the first entry of the WORK array, and no error */\n/*          message related to LWORK is issued by XERBLA. */\n\n/*  BWORK   (workspace) LOGICAL array, dimension (N) */\n/*          Not referenced if SORT = 'N'. */\n\n/*  INFO    (output) INTEGER */\n/*          = 0: successful exit */\n/*          < 0: if INFO = -i, the i-th argument had an illegal value. */\n/*          > 0: if INFO = i, and i is */\n/*             <= N: the QR algorithm failed to compute all the */\n/*                   eigenvalues; elements 1:ILO-1 and i+1:N of WR and WI */\n/*                   contain those eigenvalues which have converged; if */\n/*                   JOBVS = 'V', VS contains the matrix which reduces A */\n/*                   to its partially converged Schur form. */\n/*             = N+1: the eigenvalues could not be reordered because some */\n/*                   eigenvalues were too close to separate (the problem */\n/*                   is very ill-conditioned); */\n/*             = N+2: after reordering, roundoff changed values of some */\n/*                   complex eigenvalues so that leading eigenvalues in */\n/*                   the Schur form no longer satisfy SELECT=.TRUE.  This */\n/*                   could also be caused by underflow due to scaling. */\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, long NR3, long NR4,\n            long NC1, long NC2, long NC3, long NC4,\n            typename MM,\n            typename layout\n            >\n        int gees (\n            const char jobz,\n            matrix<T,NR1,NC1,MM,column_major_layout>& a,\n            matrix<T,NR2,NC2,MM,layout>& wr,\n            matrix<T,NR3,NC3,MM,layout>& wi,\n            matrix<T,NR4,NC4,MM,column_major_layout>& vs\n        )\n        {\n            matrix<T,0,1,MM,column_major_layout> work;\n\n            const long n = a.nr();\n\n            wr.set_size(n,1);\n            wi.set_size(n,1);\n\n            if (jobz == 'V')\n                vs.set_size(n,n);\n            else\n                vs.set_size(NR4?NR4:1, NC4?NC4:1);\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::gees(jobz, n, \n                                     &a(0,0), a.nr(), &wr(0,0), \n                                     &wi(0,0), &vs(0,0), vs.nr(), &work_size, \n                                     -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual decomposition \n            info = binding::gees(jobz, n, \n                                 &a(0,0), a.nr(), &wr(0,0), \n                                 &wi(0,0), &vs(0,0), vs.nr(), &work(0,0), \n                                 work.size());\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_ES_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/geev.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_GEEV_Hh_\n#define DLIB_LAPACk_GEEV_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dgeev) (char *jobvl, char *jobvr, integer *n, double * a, \n                                             integer *lda, double *wr, double *wi, double *vl, \n                                             integer *ldvl, double *vr, integer *ldvr, double *work, \n                                             integer *lwork, integer *info);\n\n                void DLIB_FORTRAN_ID(sgeev) (char *jobvl, char *jobvr, integer *n, float * a, \n                                             integer *lda, float *wr, float *wi, float *vl, \n                                             integer *ldvl, float *vr, integer *ldvr, float *work, \n                                             integer *lwork, integer *info);\n\n            }\n\n            inline int geev (char jobvl, char jobvr, integer n, double *a, \n                             integer lda, double *wr, double *wi, double *vl, \n                             integer ldvl, double *vr, integer ldvr, double *work, \n                             integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(dgeev)(&jobvl, &jobvr, &n, a,\n                                       &lda, wr, wi, vl, \n                                       &ldvl, vr, &ldvr, work,\n                                       &lwork, &info);\n                return info;\n            }\n\n            inline int geev (char jobvl, char jobvr, integer n, float *a, \n                             integer lda, float *wr, float *wi, float *vl, \n                             integer ldvl, float *vr, integer ldvr, float *work, \n                             integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(sgeev)(&jobvl, &jobvr, &n, a,\n                                       &lda, wr, wi, vl, \n                                       &ldvl, vr, &ldvr, work,\n                                       &lwork, &info);\n                return info;\n            }\n\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n/*  -- LAPACK driver routine (version 3.1) -- */\n/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */\n/*     November 2006 */\n\n/*     .. Scalar Arguments .. */\n/*     .. */\n/*     .. Array Arguments .. */\n/*     .. */\n\n/*  Purpose */\n/*  ======= */\n\n/*  DGEEV computes for an N-by-N real nonsymmetric matrix A, the */\n/*  eigenvalues and, optionally, the left and/or right eigenvectors. */\n\n/*  The right eigenvector v(j) of A satisfies */\n/*                   A * v(j) = lambda(j) * v(j) */\n/*  where lambda(j) is its eigenvalue. */\n/*  The left eigenvector u(j) of A satisfies */\n/*                u(j)**H * A = lambda(j) * u(j)**H */\n/*  where u(j)**H denotes the conjugate transpose of u(j). */\n\n/*  The computed eigenvectors are normalized to have Euclidean norm */\n/*  equal to 1 and largest component real. */\n\n/*  Arguments */\n/*  ========= */\n\n/*  JOBVL   (input) CHARACTER*1 */\n/*          = 'N': left eigenvectors of A are not computed; */\n/*          = 'V': left eigenvectors of A are computed. */\n\n/*  JOBVR   (input) CHARACTER*1 */\n/*          = 'N': right eigenvectors of A are not computed; */\n/*          = 'V': right eigenvectors of A are computed. */\n\n/*  N       (input) INTEGER */\n/*          The order of the matrix A. N >= 0. */\n\n/*  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N) */\n/*          On entry, the N-by-N matrix A. */\n/*          On exit, A has been overwritten. */\n\n/*  LDA     (input) INTEGER */\n/*          The leading dimension of the array A.  LDA >= max(1,N). */\n\n/*  WR      (output) DOUBLE PRECISION array, dimension (N) */\n/*  WI      (output) DOUBLE PRECISION array, dimension (N) */\n/*          WR and WI contain the real and imaginary parts, */\n/*          respectively, of the computed eigenvalues.  Complex */\n/*          conjugate pairs of eigenvalues appear consecutively */\n/*          with the eigenvalue having the positive imaginary part */\n/*          first. */\n\n/*  VL      (output) DOUBLE PRECISION array, dimension (LDVL,N) */\n/*          If JOBVL = 'V', the left eigenvectors u(j) are stored one */\n/*          after another in the columns of VL, in the same order */\n/*          as their eigenvalues. */\n/*          If JOBVL = 'N', VL is not referenced. */\n/*          If the j-th eigenvalue is real, then u(j) = VL(:,j), */\n/*          the j-th column of VL. */\n/*          If the j-th and (j+1)-st eigenvalues form a complex */\n/*          conjugate pair, then u(j) = VL(:,j) + i*VL(:,j+1) and */\n/*          u(j+1) = VL(:,j) - i*VL(:,j+1). */\n\n/*  LDVL    (input) INTEGER */\n/*          The leading dimension of the array VL.  LDVL >= 1; if */\n/*          JOBVL = 'V', LDVL >= N. */\n\n/*  VR      (output) DOUBLE PRECISION array, dimension (LDVR,N) */\n/*          If JOBVR = 'V', the right eigenvectors v(j) are stored one */\n/*          after another in the columns of VR, in the same order */\n/*          as their eigenvalues. */\n/*          If JOBVR = 'N', VR is not referenced. */\n/*          If the j-th eigenvalue is real, then v(j) = VR(:,j), */\n/*          the j-th column of VR. */\n/*          If the j-th and (j+1)-st eigenvalues form a complex */\n/*          conjugate pair, then v(j) = VR(:,j) + i*VR(:,j+1) and */\n/*          v(j+1) = VR(:,j) - i*VR(:,j+1). */\n\n/*  LDVR    (input) INTEGER */\n/*          The leading dimension of the array VR.  LDVR >= 1; if */\n/*          JOBVR = 'V', LDVR >= N. */\n\n/*  WORK    (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) */\n/*          On exit, if INFO = 0, WORK(1) returns the optimal LWORK. */\n\n/*  LWORK   (input) INTEGER */\n/*          The dimension of the array WORK.  LWORK >= max(1,3*N), and */\n/*          if JOBVL = 'V' or JOBVR = 'V', LWORK >= 4*N.  For good */\n/*          performance, LWORK must generally be larger. */\n\n/*          If LWORK = -1, then a workspace query is assumed; the routine */\n/*          only calculates the optimal size of the WORK array, returns */\n/*          this value as the first entry of the WORK array, and no error */\n/*          message related to LWORK is issued by XERBLA. */\n\n/*  INFO    (output) INTEGER */\n/*          = 0:  successful exit */\n/*          < 0:  if INFO = -i, the i-th argument had an illegal value. */\n/*          > 0:  if INFO = i, the QR algorithm failed to compute all the */\n/*                eigenvalues, and no eigenvectors have been computed; */\n/*                elements i+1:N of WR and WI contain eigenvalues which */\n/*                have converged. */\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, long NR3, long NR4, long NR5,\n            long NC1, long NC2, long NC3, long NC4, long NC5,\n            typename MM,\n            typename layout\n            >\n        int geev (\n            const char jobvl,\n            const char jobvr,\n            matrix<T,NR1,NC1,MM,column_major_layout>& a,\n            matrix<T,NR2,NC2,MM,layout>& wr,\n            matrix<T,NR3,NC3,MM,layout>& wi,\n            matrix<T,NR4,NC4,MM,column_major_layout>& vl,\n            matrix<T,NR5,NC5,MM,column_major_layout>& vr\n        )\n        {\n            matrix<T,0,1,MM,column_major_layout> work;\n\n            const long n = a.nr();\n\n            wr.set_size(n,1);\n            wi.set_size(n,1);\n\n            if (jobvl == 'V')\n                vl.set_size(n,n);\n            else\n                vl.set_size(NR4?NR4:1, NC4?NC4:1);\n\n            if (jobvr == 'V')\n                vr.set_size(n,n);\n            else\n                vr.set_size(NR5?NR5:1, NC5?NC5:1);\n\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::geev(jobvl, jobvr, n, &a(0,0),\n                                     a.nr(), &wr(0,0), &wi(0,0), &vl(0,0),\n                                     vl.nr(), &vr(0,0), vr.nr(), &work_size, \n                                     -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual decomposition \n            info = binding::geev(jobvl, jobvr, n, &a(0,0),\n                                 a.nr(), &wr(0,0), &wi(0,0), &vl(0,0),\n                                 vl.nr(), &vr(0,0), vr.nr(), &work(0,0), \n                                 work.size());\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_GEEV_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/geqrf.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_GEQRF_Hh_\n#define DLIB_LAPACk_GEQRF_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dgeqrf) (integer *m, integer *n, double *a, integer *\n                                              lda, double *tau, double *work, integer *lwork, \n                                              integer *info);\n\n                void DLIB_FORTRAN_ID(sgeqrf) (integer *m, integer *n, float *a, integer *\n                                              lda, float *tau, float *work, integer *lwork, \n                                              integer *info);\n            }\n\n            inline int geqrf (integer m, integer n, double *a, integer lda, \n                              double *tau, double *work, integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(dgeqrf)(&m, &n, a, &lda,\n                                        tau, work, &lwork, &info);\n                return info;\n            }\n\n            inline int geqrf (integer m, integer n, float *a, integer lda, \n                              float *tau, float *work, integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(sgeqrf)(&m, &n, a, &lda,\n                                        tau, work, &lwork, &info);\n                return info;\n            }\n\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n/*  -- LAPACK routine (version 3.1) -- */\n/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */\n/*     November 2006 */\n\n/*     .. Scalar Arguments .. */\n/*     .. */\n/*     .. Array Arguments .. */\n/*     .. */\n\n/*  Purpose */\n/*  ======= */\n\n/*  DGEQRF computes a QR factorization of a real M-by-N matrix A: */\n/*  A = Q * R. */\n\n/*  Arguments */\n/*  ========= */\n\n/*  M       (input) INTEGER */\n/*          The number of rows of the matrix A.  M >= 0. */\n\n/*  N       (input) INTEGER */\n/*          The number of columns of the matrix A.  N >= 0. */\n\n/*  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N) */\n/*          On entry, the M-by-N matrix A. */\n/*          On exit, the elements on and above the diagonal of the array */\n/*          contain the min(M,N)-by-N upper trapezoidal matrix R (R is */\n/*          upper triangular if m >= n); the elements below the diagonal, */\n/*          with the array TAU, represent the orthogonal matrix Q as a */\n/*          product of min(m,n) elementary reflectors (see Further */\n/*          Details). */\n\n/*  LDA     (input) INTEGER */\n/*          The leading dimension of the array A.  LDA >= max(1,M). */\n\n/*  TAU     (output) DOUBLE PRECISION array, dimension (min(M,N)) */\n/*          The scalar factors of the elementary reflectors (see Further */\n/*          Details). */\n\n/*  WORK    (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) */\n/*          On exit, if INFO = 0, WORK(1) returns the optimal LWORK. */\n\n/*  LWORK   (input) INTEGER */\n/*          The dimension of the array WORK.  LWORK >= max(1,N). */\n/*          For optimum performance LWORK >= N*NB, where NB is */\n/*          the optimal blocksize. */\n\n/*          If LWORK = -1, then a workspace query is assumed; the routine */\n/*          only calculates the optimal size of the WORK array, returns */\n/*          this value as the first entry of the WORK array, and no error */\n/*          message related to LWORK is issued by XERBLA. */\n\n/*  INFO    (output) INTEGER */\n/*          = 0:  successful exit */\n/*          < 0:  if INFO = -i, the i-th argument had an illegal value */\n\n/*  Further Details */\n/*  =============== */\n\n/*  The matrix Q is represented as a product of elementary reflectors */\n\n/*     Q = H(1) H(2) . . . H(k), where k = min(m,n). */\n\n/*  Each H(i) has the form */\n\n/*     H(i) = I - tau * v * v' */\n\n/*  where tau is a real scalar, and v is a real vector with */\n/*  v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), */\n/*  and tau in TAU(i). */\n\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2,\n            long NC1, long NC2,\n            typename MM\n            >\n        int geqrf (\n            matrix<T,NR1,NC1,MM,column_major_layout>& a,\n            matrix<T,NR2,NC2,MM,column_major_layout>& tau\n        )\n        {\n            matrix<T,0,1,MM,column_major_layout> work;\n\n            tau.set_size(std::min(a.nr(), a.nc()), 1);\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::geqrf(a.nr(), a.nc(), &a(0,0), a.nr(),\n                                      &tau(0,0), &work_size, -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual decomposition \n            info = binding::geqrf(a.nr(), a.nc(), &a(0,0), a.nr(),\n                                  &tau(0,0), &work(0,0), work.size());\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_GEQRF_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/gesdd.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_SDD_Hh_\n#define DLIB_LAPACk_SDD_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dgesdd) (char const* jobz, \n                                              const integer* m, const integer* n, double* a, const integer* lda,\n                                              double* s, double* u, const integer* ldu,\n                                              double* vt, const integer* ldvt,\n                                              double* work, const integer* lwork, integer* iwork, integer* info);\n\n                void DLIB_FORTRAN_ID(sgesdd) (char const* jobz, \n                                              const integer* m, const integer* n, float* a, const integer* lda,\n                                              float* s, float* u, const integer* ldu,\n                                              float* vt, const integer* ldvt,\n                                              float* work, const integer* lwork, integer* iwork, integer* info);\n\n            }\n\n            inline integer gesdd (const char jobz, \n                              const integer m, const integer n, double* a, const integer lda,\n                              double* s, double* u, const integer ldu,\n                              double* vt, const integer ldvt,\n                              double* work, const integer lwork, integer* iwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(dgesdd)(&jobz, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, iwork, &info);\n                return info;\n            }\n\n            inline integer gesdd (const char jobz, \n                              const integer m, const integer n, float* a, const integer lda,\n                              float* s, float* u, const integer ldu,\n                              float* vt, const integer ldvt,\n                              float* work, const integer lwork, integer* iwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(sgesdd)(&jobz, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, iwork, &info);\n                return info;\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n/*  -- LAPACK driver routine (version 3.1) -- */\n/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */\n/*     November 2006 */\n\n/*     .. Scalar Arguments .. */\n/*     .. */\n/*     .. Array Arguments .. */\n/*     .. */\n\n/*  Purpose */\n/*  ======= */\n\n/*  DGESDD computes the singular value decomposition (SVD) of a real */\n/*  M-by-N matrix A, optionally computing the left and right singular */\n/*  vectors.  If singular vectors are desired, it uses a */\n/*  divide-and-conquer algorithm. */\n\n/*  The SVD is written */\n\n/*       A = U * SIGMA * transpose(V) */\n\n/*  where SIGMA is an M-by-N matrix which is zero except for its */\n/*  min(m,n) diagonal elements, U is an M-by-M orthogonal matrix, and */\n/*  V is an N-by-N orthogonal matrix.  The diagonal elements of SIGMA */\n/*  are the singular values of A; they are real and non-negative, and */\n/*  are returned in descending order.  The first min(m,n) columns of */\n/*  U and V are the left and right singular vectors of A. */\n\n/*  Note that the routine returns VT = V**T, not V. */\n\n/*  The divide and conquer algorithm makes very mild assumptions about */\n/*  floating point arithmetic. It will work on machines with a guard */\n/*  digit in add/subtract, or on those binary machines without guard */\n/*  digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or */\n/*  Cray-2. It could conceivably fail on hexadecimal or decimal machines */\n/*  without guard digits, but we know of none. */\n\n/*  Arguments */\n/*  ========= */\n\n/*  JOBZ    (input) CHARACTER*1 */\n/*          Specifies options for computing all or part of the matrix U: */\n/*          = 'A':  all M columns of U and all N rows of V**T are */\n/*                  returned in the arrays U and VT; */\n/*          = 'S':  the first min(M,N) columns of U and the first */\n/*                  min(M,N) rows of V**T are returned in the arrays U */\n/*                  and VT; */\n/*          = 'O':  If M >= N, the first N columns of U are overwritten */\n/*                  on the array A and all rows of V**T are returned in */\n/*                  the array VT; */\n/*                  otherwise, all columns of U are returned in the */\n/*                  array U and the first M rows of V**T are overwritten */\n/*                  in the array A; */\n/*          = 'N':  no columns of U or rows of V**T are computed. */\n\n/*  M       (input) INTEGER */\n/*          The number of rows of the input matrix A.  M >= 0. */\n\n/*  N       (input) INTEGER */\n/*          The number of columns of the input matrix A.  N >= 0. */\n\n/*  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N) */\n/*          On entry, the M-by-N matrix A. */\n/*          On exit, */\n/*          if JOBZ = 'O',  A is overwritten with the first N columns */\n/*                          of U (the left singular vectors, stored */\n/*                          columnwise) if M >= N; */\n/*                          A is overwritten with the first M rows */\n/*                          of V**T (the right singular vectors, stored */\n/*                          rowwise) otherwise. */\n/*          if JOBZ .ne. 'O', the contents of A are destroyed. */\n\n/*  LDA     (input) INTEGER */\n/*          The leading dimension of the array A.  LDA >= max(1,M). */\n\n/*  S       (output) DOUBLE PRECISION array, dimension (min(M,N)) */\n/*          The singular values of A, sorted so that S(i) >= S(i+1). */\n\n/*  U       (output) DOUBLE PRECISION array, dimension (LDU,UCOL) */\n/*          UCOL = M if JOBZ = 'A' or JOBZ = 'O' and M < N; */\n/*          UCOL = min(M,N) if JOBZ = 'S'. */\n/*          If JOBZ = 'A' or JOBZ = 'O' and M < N, U contains the M-by-M */\n/*          orthogonal matrix U; */\n/*          if JOBZ = 'S', U contains the first min(M,N) columns of U */\n/*          (the left singular vectors, stored columnwise); */\n/*          if JOBZ = 'O' and M >= N, or JOBZ = 'N', U is not referenced. */\n\n/*  LDU     (input) INTEGER */\n/*          The leading dimension of the array U.  LDU >= 1; if */\n/*          JOBZ = 'S' or 'A' or JOBZ = 'O' and M < N, LDU >= M. */\n\n/*  VT      (output) DOUBLE PRECISION array, dimension (LDVT,N) */\n/*          If JOBZ = 'A' or JOBZ = 'O' and M >= N, VT contains the */\n/*          N-by-N orthogonal matrix V**T; */\n/*          if JOBZ = 'S', VT contains the first min(M,N) rows of */\n/*          V**T (the right singular vectors, stored rowwise); */\n/*          if JOBZ = 'O' and M < N, or JOBZ = 'N', VT is not referenced. */\n\n/*  LDVT    (input) INTEGER */\n/*          The leading dimension of the array VT.  LDVT >= 1; if */\n/*          JOBZ = 'A' or JOBZ = 'O' and M >= N, LDVT >= N; */\n/*          if JOBZ = 'S', LDVT >= min(M,N). */\n\n/*  WORK    (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) */\n/*          On exit, if INFO = 0, WORK(1) returns the optimal LWORK; */\n\n/*  LWORK   (input) INTEGER */\n/*          The dimension of the array WORK. LWORK >= 1. */\n/*          If JOBZ = 'N', */\n/*            LWORK >= 3*min(M,N) + max(max(M,N),7*min(M,N)). */\n/*          If JOBZ = 'O', */\n/*            LWORK >= 3*min(M,N)*min(M,N) + */\n/*                     max(max(M,N),5*min(M,N)*min(M,N)+4*min(M,N)). */\n/*          If JOBZ = 'S' or 'A' */\n/*            LWORK >= 3*min(M,N)*min(M,N) + */\n/*                     max(max(M,N),4*min(M,N)*min(M,N)+4*min(M,N)). */\n/*          For good performance, LWORK should generally be larger. */\n/*          If LWORK = -1 but other input arguments are legal, WORK(1) */\n/*          returns the optimal LWORK. */\n\n/*  IWORK   (workspace) INTEGER array, dimension (8*min(M,N)) */\n\n/*  INFO    (output) INTEGER */\n/*          = 0:  successful exit. */\n/*          < 0:  if INFO = -i, the i-th argument had an illegal value. */\n/*          > 0:  DBDSDC did not converge, updating process failed. */\n\n/*  Further Details */\n/*  =============== */\n\n/*  Based on contributions by */\n/*     Ming Gu and Huan Ren, Computer Science Division, University of */\n/*     California at Berkeley, USA */\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, long NR3, long NR4,\n            long NC1, long NC2, long NC3, long NC4,\n            typename MM\n            >\n        int gesdd (\n            const char jobz,\n            matrix<T,NR1,NC1,MM,column_major_layout>& a,\n            matrix<T,NR2,NC2,MM,column_major_layout>& s,\n            matrix<T,NR3,NC3,MM,column_major_layout>& u,\n            matrix<T,NR4,NC4,MM,column_major_layout>& vt\n        )\n        {\n            matrix<T,0,1,MM,column_major_layout> work;\n            matrix<integer,0,1,MM,column_major_layout> iwork;\n\n            const long m = a.nr();\n            const long n = a.nc();\n            s.set_size(std::min(m,n), 1);\n\n            // make sure the iwork memory block is big enough\n            if (iwork.size() < 8*std::min(m,n))\n                iwork.set_size(8*std::min(m,n), 1);\n\n            if (jobz == 'A')\n            {\n                u.set_size(m,m);\n                vt.set_size(n,n);\n            }\n            else if (jobz == 'S')\n            {\n                u.set_size(m, std::min(m,n));\n                vt.set_size(std::min(m,n), n);\n            }\n            else if (jobz == 'O')\n            {\n                DLIB_CASSERT(false, \"jobz == 'O' not supported\");\n            }\n            else\n            {\n                u.set_size(NR3?NR3:1, NC3?NC3:1);\n                vt.set_size(NR4?NR4:1, NC4?NC4:1);\n            }\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::gesdd(jobz, a.nr(), a.nc(), &a(0,0), a.nr(),\n                                      &s(0,0), &u(0,0), u.nr(), &vt(0,0), vt.nr(),\n                                      &work_size, -1, &iwork(0,0));\n\n            if (info != 0)\n                return info;\n\n            // There is a bug in an older version of LAPACK in Debian etch \n            // that causes the gesdd to return the wrong value for work_size\n            // when jobz == 'N'.  So verify the value of work_size.\n            if (jobz == 'N')\n            {\n                using std::min; \n                using std::max; \n                const T min_work_size = 3*min(m,n) + max(max(m,n),7*min(m,n));\n                if (work_size < min_work_size)\n                    work_size = min_work_size;\n            }\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual SVD\n            info = binding::gesdd(jobz, a.nr(), a.nc(), &a(0,0), a.nr(),\n                                  &s(0,0), &u(0,0), u.nr(), &vt(0,0), vt.nr(),\n                                  &work(0,0), work.size(), &iwork(0,0));\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, long NR3, long NR4,\n            long NC1, long NC2, long NC3, long NC4,\n            typename MM\n            >\n        int gesdd (\n            const char jobz,\n            matrix<T,NR1,NC1,MM,row_major_layout>& a,\n            matrix<T,NR2,NC2,MM,row_major_layout>& s,\n            matrix<T,NR3,NC3,MM,row_major_layout>& u_,\n            matrix<T,NR4,NC4,MM,row_major_layout>& vt_\n        )\n        {\n            matrix<T,0,1,MM,row_major_layout> work;\n            matrix<integer,0,1,MM,row_major_layout> iwork;\n\n            // Row major order matrices are transposed from LAPACK's point of view.\n            matrix<T,NR4,NC4,MM,row_major_layout>& u = vt_;\n            matrix<T,NR3,NC3,MM,row_major_layout>& vt = u_;\n\n\n            const long m = a.nc();\n            const long n = a.nr();\n            s.set_size(std::min(m,n), 1);\n\n            // make sure the iwork memory block is big enough\n            if (iwork.size() < 8*std::min(m,n))\n                iwork.set_size(8*std::min(m,n), 1);\n\n            if (jobz == 'A')\n            {\n                u.set_size(m,m);\n                vt.set_size(n,n);\n            }\n            else if (jobz == 'S')\n            {\n                u.set_size(std::min(m,n), m);\n                vt.set_size(n, std::min(m,n));\n            }\n            else if (jobz == 'O')\n            {\n                DLIB_CASSERT(false, \"jobz == 'O' not supported\");\n            }\n            else\n            {\n                u.set_size(NR4?NR4:1, NC4?NC4:1);\n                vt.set_size(NR3?NR3:1, NC3?NC3:1);\n            }\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::gesdd(jobz, m, n, &a(0,0), a.nc(),\n                                      &s(0,0), &u(0,0), u.nc(), &vt(0,0), vt.nc(),\n                                      &work_size, -1, &iwork(0,0));\n\n            if (info != 0)\n                return info;\n\n            // There is a bug in an older version of LAPACK in Debian etch \n            // that causes the gesdd to return the wrong value for work_size\n            // when jobz == 'N'.  So verify the value of work_size.\n            if (jobz == 'N')\n            {\n                using std::min; \n                using std::max; \n                const T min_work_size = 3*min(m,n) + max(max(m,n),7*min(m,n));\n                if (work_size < min_work_size)\n                    work_size = min_work_size;\n            }\n\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual SVD\n            info = binding::gesdd(jobz, m, n, &a(0,0), a.nc(),\n                                  &s(0,0), &u(0,0), u.nc(), &vt(0,0), vt.nc(),\n                                  &work(0,0), work.size(), &iwork(0,0));\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_SDD_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/gesvd.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_SVD_Hh_\n#define DLIB_LAPACk_SVD_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dgesvd) (const char* jobu, const char* jobvt,\n                                              const integer* m, const integer* n, double* a, const integer* lda,\n                                              double* s, double* u, const integer* ldu,\n                                              double* vt, const integer* ldvt,\n                                              double* work, const integer* lwork, integer* info);\n\n                void DLIB_FORTRAN_ID(sgesvd) (const char* jobu, const char* jobvt,\n                                              const integer* m, const integer* n, float* a, const integer* lda,\n                                              float* s, float* u, const integer* ldu,\n                                              float* vt, const integer* ldvt,\n                                              float* work, const integer* lwork, integer* info);\n\n            }\n\n            inline integer gesvd (const char jobu, const char jobvt,\n                              const integer m, const integer n, double* a, const integer lda,\n                              double* s, double* u, const integer ldu,\n                              double* vt, const integer ldvt,\n                              double* work, const integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(dgesvd)(&jobu, &jobvt, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, &info);\n                return info;\n            }\n\n            inline integer gesvd (const char jobu, const char jobvt,\n                              const integer m, const integer n, float* a, const integer lda,\n                              float* s, float* u, const integer ldu,\n                              float* vt, const integer ldvt,\n                              float* work, const integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(sgesvd)(&jobu, &jobvt, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, &info);\n                return info;\n            }\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n/*  -- LAPACK driver routine (version 3.1) -- */\n/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */\n/*     November 2006 */\n\n/*     .. Scalar Arguments .. */\n/*     .. */\n/*     .. Array Arguments .. */\n/*     .. */\n\n/*  Purpose */\n/*  ======= */\n\n/*  DGESVD computes the singular value decomposition (SVD) of a real */\n/*  M-by-N matrix A, optionally computing the left and/or right singular */\n/*  vectors. The SVD is written */\n\n/*       A = U * SIGMA * transpose(V) */\n\n/*  where SIGMA is an M-by-N matrix which is zero except for its */\n/*  min(m,n) diagonal elements, U is an M-by-M orthogonal matrix, and */\n/*  V is an N-by-N orthogonal matrix.  The diagonal elements of SIGMA */\n/*  are the singular values of A; they are real and non-negative, and */\n/*  are returned in descending order.  The first min(m,n) columns of */\n/*  U and V are the left and right singular vectors of A. */\n\n/*  Note that the routine returns V**T, not V. */\n\n/*  Arguments */\n/*  ========= */\n\n/*  JOBU    (input) CHARACTER*1 */\n/*          Specifies options for computing all or part of the matrix U: */\n/*          = 'A':  all M columns of U are returned in array U: */\n/*          = 'S':  the first min(m,n) columns of U (the left singular */\n/*                  vectors) are returned in the array U; */\n/*          = 'O':  the first min(m,n) columns of U (the left singular */\n/*                  vectors) are overwritten on the array A; */\n/*          = 'N':  no columns of U (no left singular vectors) are */\n/*                  computed. */\n\n/*  JOBVT   (input) CHARACTER*1 */\n/*          Specifies options for computing all or part of the matrix */\n/*          V**T: */\n/*          = 'A':  all N rows of V**T are returned in the array VT; */\n/*          = 'S':  the first min(m,n) rows of V**T (the right singular */\n/*                  vectors) are returned in the array VT; */\n/*          = 'O':  the first min(m,n) rows of V**T (the right singular */\n/*                  vectors) are overwritten on the array A; */\n/*          = 'N':  no rows of V**T (no right singular vectors) are */\n/*                  computed. */\n\n/*          JOBVT and JOBU cannot both be 'O'. */\n\n/*  M       (input) INTEGER */\n/*          The number of rows of the input matrix A.  M >= 0. */\n\n/*  N       (input) INTEGER */\n/*          The number of columns of the input matrix A.  N >= 0. */\n\n/*  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N) */\n/*          On entry, the M-by-N matrix A. */\n/*          On exit, */\n/*          if JOBU = 'O',  A is overwritten with the first min(m,n) */\n/*                          columns of U (the left singular vectors, */\n/*                          stored columnwise); */\n/*          if JOBVT = 'O', A is overwritten with the first min(m,n) */\n/*                          rows of V**T (the right singular vectors, */\n/*                          stored rowwise); */\n/*          if JOBU .ne. 'O' and JOBVT .ne. 'O', the contents of A */\n/*                          are destroyed. */\n\n/*  LDA     (input) INTEGER */\n/*          The leading dimension of the array A.  LDA >= max(1,M). */\n\n/*  S       (output) DOUBLE PRECISION array, dimension (min(M,N)) */\n/*          The singular values of A, sorted so that S(i) >= S(i+1). */\n\n/*  U       (output) DOUBLE PRECISION array, dimension (LDU,UCOL) */\n/*          (LDU,M) if JOBU = 'A' or (LDU,min(M,N)) if JOBU = 'S'. */\n/*          If JOBU = 'A', U contains the M-by-M orthogonal matrix U; */\n/*          if JOBU = 'S', U contains the first min(m,n) columns of U */\n/*          (the left singular vectors, stored columnwise); */\n/*          if JOBU = 'N' or 'O', U is not referenced. */\n\n/*  LDU     (input) INTEGER */\n/*          The leading dimension of the array U.  LDU >= 1; if */\n/*          JOBU = 'S' or 'A', LDU >= M. */\n\n/*  VT      (output) DOUBLE PRECISION array, dimension (LDVT,N) */\n/*          If JOBVT = 'A', VT contains the N-by-N orthogonal matrix */\n/*          V**T; */\n/*          if JOBVT = 'S', VT contains the first min(m,n) rows of */\n/*          V**T (the right singular vectors, stored rowwise); */\n/*          if JOBVT = 'N' or 'O', VT is not referenced. */\n\n/*  LDVT    (input) INTEGER */\n/*          The leading dimension of the array VT.  LDVT >= 1; if */\n/*          JOBVT = 'A', LDVT >= N; if JOBVT = 'S', LDVT >= min(M,N). */\n\n/*  WORK    (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) */\n/*          On exit, if INFO = 0, WORK(1) returns the optimal LWORK; */\n/*          if INFO > 0, WORK(2:MIN(M,N)) contains the unconverged */\n/*          superdiagonal elements of an upper bidiagonal matrix B */\n/*          whose diagonal is in S (not necessarily sorted). B */\n/*          satisfies A = U * B * VT, so it has the same singular values */\n/*          as A, and singular vectors related by U and VT. */\n\n/*  LWORK   (input) INTEGER */\n/*          The dimension of the array WORK. */\n/*          LWORK >= MAX(1,3*MIN(M,N)+MAX(M,N),5*MIN(M,N)). */\n/*          For good performance, LWORK should generally be larger. */\n\n/*          If LWORK = -1, then a workspace query is assumed; the routine */\n/*          only calculates the optimal size of the WORK array, returns */\n/*          this value as the first entry of the WORK array, and no error */\n/*          message related to LWORK is issued by XERBLA. */\n\n/*  INFO    (output) INTEGER */\n/*          = 0:  successful exit. */\n/*          < 0:  if INFO = -i, the i-th argument had an illegal value. */\n/*          > 0:  if DBDSQR did not converge, INFO specifies how many */\n/*                superdiagonals of an intermediate bidiagonal form B */\n/*                did not converge to zero. See the description of WORK */\n/*                above for details. */\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, long NR3, long NR4,\n            long NC1, long NC2, long NC3, long NC4,\n            typename MM\n            >\n        int gesvd (\n            const char jobu,\n            const char jobvt,\n            matrix<T,NR1,NC1,MM,column_major_layout>& a,\n            matrix<T,NR2,NC2,MM,column_major_layout>& s,\n            matrix<T,NR3,NC3,MM,column_major_layout>& u,\n            matrix<T,NR4,NC4,MM,column_major_layout>& vt\n        )\n        {\n            matrix<T,0,1,MM,column_major_layout> work;\n\n            const long m = a.nr();\n            const long n = a.nc();\n            s.set_size(std::min(m,n), 1);\n\n            if (jobu == 'A')\n                u.set_size(m,m);\n            else if (jobu == 'S')\n                u.set_size(m, std::min(m,n));\n            else\n                u.set_size(NR3?NR3:1, NC3?NC3:1);\n\n            if (jobvt == 'A')\n                vt.set_size(n,n);\n            else if (jobvt == 'S')\n                vt.set_size(std::min(m,n), n);\n            else\n                vt.set_size(NR4?NR4:1, NC4?NC4:1);\n\n\n            if (jobu == 'O' || jobvt == 'O')\n            {\n                DLIB_CASSERT(false, \"job == 'O' not supported\");\n            }\n\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::gesvd(jobu, jobvt, a.nr(), a.nc(), &a(0,0), a.nr(),\n                                      &s(0,0), &u(0,0), u.nr(), &vt(0,0), vt.nr(),\n                                      &work_size, -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual SVD\n            info = binding::gesvd(jobu, jobvt, a.nr(), a.nc(), &a(0,0), a.nr(),\n                                  &s(0,0), &u(0,0), u.nr(), &vt(0,0), vt.nr(),\n                                  &work(0,0), work.size());\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, long NR3, long NR4,\n            long NC1, long NC2, long NC3, long NC4,\n            typename MM\n            >\n        int gesvd (\n            char jobu,\n            char jobvt,\n            matrix<T,NR1,NC1,MM,row_major_layout>& a,\n            matrix<T,NR2,NC2,MM,row_major_layout>& s,\n            matrix<T,NR3,NC3,MM,row_major_layout>& u_,\n            matrix<T,NR4,NC4,MM,row_major_layout>& vt_\n        )\n        {\n            matrix<T,0,1,MM,row_major_layout> work;\n\n            // Row major order matrices are transposed from LAPACK's point of view.\n            matrix<T,NR4,NC4,MM,row_major_layout>& u = vt_;\n            matrix<T,NR3,NC3,MM,row_major_layout>& vt = u_;\n            std::swap(jobu, jobvt);\n\n            const long m = a.nc();\n            const long n = a.nr();\n            s.set_size(std::min(m,n), 1);\n\n            if (jobu == 'A')\n                u.set_size(m,m);\n            else if (jobu == 'S')\n                u.set_size(std::min(m,n), m);\n            else\n                u.set_size(NR4?NR4:1, NC4?NC4:1);\n\n            if (jobvt == 'A')\n                vt.set_size(n,n);\n            else if (jobvt == 'S')\n                vt.set_size(n, std::min(m,n));\n            else\n                vt.set_size(NR3?NR3:1, NC3?NC3:1);\n\n            if (jobu == 'O' || jobvt == 'O')\n            {\n                DLIB_CASSERT(false, \"job == 'O' not supported\");\n            }\n\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::gesvd(jobu, jobvt, m, n, &a(0,0), a.nc(),\n                                      &s(0,0), &u(0,0), u.nc(), &vt(0,0), vt.nc(),\n                                      &work_size, -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual SVD\n            info = binding::gesvd(jobu, jobvt, m, n, &a(0,0), a.nc(),\n                                  &s(0,0), &u(0,0), u.nc(), &vt(0,0), vt.nc(),\n                                  &work(0,0), work.size());\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_SVD_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/getrf.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_GETRF_Hh_\n#define DLIB_LAPACk_GETRF_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dgetrf) (integer* m, integer *n, double *a, \n                                             integer* lda, integer *ipiv, integer *info);\n\n                void DLIB_FORTRAN_ID(sgetrf) (integer* m, integer *n, float *a, \n                                             integer* lda, integer *ipiv, integer *info);\n\n            }\n\n            inline int getrf (integer m, integer n, double *a, \n                              integer lda, integer *ipiv)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(dgetrf)(&m, &n, a, &lda, ipiv, &info);\n                return info;\n            }\n\n            inline int getrf (integer m, integer n, float *a, \n                              integer lda, integer *ipiv)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(sgetrf)(&m, &n, a, &lda, ipiv, &info);\n                return info;\n            }\n\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n\n/*  -- LAPACK routine (version 3.1) -- */\n/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */\n/*     November 2006 */\n\n/*     .. Scalar Arguments .. */\n/*     .. */\n/*     .. Array Arguments .. */\n/*     .. */\n\n/*  Purpose */\n/*  ======= */\n\n/*  DGETRF computes an LU factorization of a general M-by-N matrix A */\n/*  using partial pivoting with row interchanges. */\n\n/*  The factorization has the form */\n/*     A = P * L * U */\n/*  where P is a permutation matrix, L is lower triangular with unit */\n/*  diagonal elements (lower trapezoidal if m > n), and U is upper */\n/*  triangular (upper trapezoidal if m < n). */\n\n/*  This is the right-looking Level 3 BLAS version of the algorithm. */\n\n/*  Arguments */\n/*  ========= */\n\n/*  M       (input) INTEGER */\n/*          The number of rows of the matrix A.  M >= 0. */\n\n/*  N       (input) INTEGER */\n/*          The number of columns of the matrix A.  N >= 0. */\n\n/*  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N) */\n/*          On entry, the M-by-N matrix to be factored. */\n/*          On exit, the factors L and U from the factorization */\n/*          A = P*L*U; the unit diagonal elements of L are not stored. */\n\n/*  LDA     (input) INTEGER */\n/*          The leading dimension of the array A.  LDA >= max(1,M). */\n\n/*  IPIV    (output) INTEGER array, dimension (min(M,N)) */\n/*          The pivot indices; for 1 <= i <= min(M,N), row i of the */\n/*          matrix was interchanged with row IPIV(i). */\n\n/*  INFO    (output) INTEGER */\n/*          = 0:  successful exit */\n/*          < 0:  if INFO = -i, the i-th argument had an illegal value */\n/*          > 0:  if INFO = i, U(i,i) is exactly zero. The factorization */\n/*                has been completed, but the factor U is exactly */\n/*                singular, and division by zero will occur if it is used */\n/*                to solve a system of equations. */\n\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2,\n            long NC1, long NC2, \n            typename MM,\n            typename layout\n            >\n        int getrf (\n            matrix<T,NR1,NC1,MM,column_major_layout>& a,\n            matrix<integer,NR2,NC2,MM,layout>& ipiv \n        )\n        {\n            const long m = a.nr();\n            const long n = a.nc();\n\n            ipiv.set_size(std::min(m,n), 1);\n\n            // compute the actual decomposition \n            return binding::getrf(m, n, &a(0,0), a.nr(), &ipiv(0,0));\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_GETRF_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/ormqr.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_ORMQR_Hh_\n#define DLIB_LAPACk_ORMQR_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dormqr) (char *side, char *trans, integer *m, integer *n, \n                                              integer *k, const double *a, integer *lda, const double *tau, \n                                              double * c_, integer *ldc, double *work, integer *lwork, \n                                              integer *info);\n\n                void DLIB_FORTRAN_ID(sormqr) (char *side, char *trans, integer *m, integer *n, \n                                              integer *k, const float *a, integer *lda, const float *tau, \n                                              float * c_, integer *ldc, float *work, integer *lwork, \n                                              integer *info);\n\n            }\n\n            inline int ormqr (char side, char trans, integer m, integer n, \n                              integer k, const double *a, integer lda, const double *tau, \n                              double *c_, integer ldc, double *work, integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(dormqr)(&side, &trans, &m, &n,\n                                        &k, a, &lda, tau,\n                                        c_, &ldc, work, &lwork, &info);\n                return info;\n            }\n\n            inline int ormqr (char side, char trans, integer m, integer n, \n                              integer k, const float *a, integer lda, const float *tau, \n                              float *c_, integer ldc, float *work, integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(sormqr)(&side, &trans, &m, &n,\n                                        &k, a, &lda, tau,\n                                        c_, &ldc, work, &lwork, &info);\n                return info;\n            }\n\n\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n/*  -- LAPACK routine (version 3.1) -- */\n/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */\n/*     November 2006 */\n\n/*     .. Scalar Arguments .. */\n/*     .. */\n/*     .. Array Arguments .. */\n/*     .. */\n\n/*  Purpose */\n/*  ======= */\n\n/*  DORMQR overwrites the general real M-by-N matrix C with */\n\n/*                  SIDE = 'L'     SIDE = 'R' */\n/*  TRANS = 'N':      Q * C          C * Q */\n/*  TRANS = 'T':      Q**T * C       C * Q**T */\n\n/*  where Q is a real orthogonal matrix defined as the product of k */\n/*  elementary reflectors */\n\n/*        Q = H(1) H(2) . . . H(k) */\n\n/*  as returned by DGEQRF. Q is of order M if SIDE = 'L' and of order N */\n/*  if SIDE = 'R'. */\n\n/*  Arguments */\n/*  ========= */\n\n/*  SIDE    (input) CHARACTER*1 */\n/*          = 'L': apply Q or Q**T from the Left; */\n/*          = 'R': apply Q or Q**T from the Right. */\n\n/*  TRANS   (input) CHARACTER*1 */\n/*          = 'N':  No transpose, apply Q; */\n/*          = 'T':  Transpose, apply Q**T. */\n\n/*  M       (input) INTEGER */\n/*          The number of rows of the matrix C. M >= 0. */\n\n/*  N       (input) INTEGER */\n/*          The number of columns of the matrix C. N >= 0. */\n\n/*  K       (input) INTEGER */\n/*          The number of elementary reflectors whose product defines */\n/*          the matrix Q. */\n/*          If SIDE = 'L', M >= K >= 0; */\n/*          if SIDE = 'R', N >= K >= 0. */\n\n/*  A       (input) DOUBLE PRECISION array, dimension (LDA,K) */\n/*          The i-th column must contain the vector which defines the */\n/*          elementary reflector H(i), for i = 1,2,...,k, as returned by */\n/*          DGEQRF in the first k columns of its array argument A. */\n/*          A is modified by the routine but restored on exit. */\n\n/*  LDA     (input) INTEGER */\n/*          The leading dimension of the array A. */\n/*          If SIDE = 'L', LDA >= max(1,M); */\n/*          if SIDE = 'R', LDA >= max(1,N). */\n\n/*  TAU     (input) DOUBLE PRECISION array, dimension (K) */\n/*          TAU(i) must contain the scalar factor of the elementary */\n/*          reflector H(i), as returned by DGEQRF. */\n\n/*  C       (input/output) DOUBLE PRECISION array, dimension (LDC,N) */\n/*          On entry, the M-by-N matrix C. */\n/*          On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q. */\n\n/*  LDC     (input) INTEGER */\n/*          The leading dimension of the array C. LDC >= max(1,M). */\n\n/*  WORK    (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) */\n/*          On exit, if INFO = 0, WORK(1) returns the optimal LWORK. */\n\n/*  LWORK   (input) INTEGER */\n/*          The dimension of the array WORK. */\n/*          If SIDE = 'L', LWORK >= max(1,N); */\n/*          if SIDE = 'R', LWORK >= max(1,M). */\n/*          For optimum performance LWORK >= N*NB if SIDE = 'L', and */\n/*          LWORK >= M*NB if SIDE = 'R', where NB is the optimal */\n/*          blocksize. */\n\n/*          If LWORK = -1, then a workspace query is assumed; the routine */\n/*          only calculates the optimal size of the WORK array, returns */\n/*          this value as the first entry of the WORK array, and no error */\n/*          message related to LWORK is issued by XERBLA. */\n\n/*  INFO    (output) INTEGER */\n/*          = 0:  successful exit */\n/*          < 0:  if INFO = -i, the i-th argument had an illegal value */\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, long NR3,\n            long NC1, long NC2, long NC3,\n            typename MM,\n            typename C_LAYOUT\n            >\n        int ormqr (\n            char side, \n            char trans,\n            const matrix<T,NR1,NC1,MM,column_major_layout>& a,\n            const matrix<T,NR2,NC2,MM,column_major_layout>& tau,\n            matrix<T,NR3,NC3,MM,C_LAYOUT>& c \n        )\n        {\n            long m = c.nr();\n            long n = c.nc();\n            const long k = a.nc();\n            long ldc;\n            if (is_same_type<C_LAYOUT,column_major_layout>::value)\n            {\n                ldc = c.nr();\n            }\n            else\n            {\n                // Since lapack expects c to be in column major layout we have to \n                // do something to make this work.  Since a row major layout matrix\n                // will look just like a transposed C we can just swap a few things around.\n\n                ldc = c.nc();\n                swap(m,n);\n\n                if (side == 'L')\n                    side = 'R';\n                else\n                    side = 'L';\n\n                if (trans == 'T')\n                    trans = 'N';\n                else\n                    trans = 'T';\n            }\n\n            matrix<T,0,1,MM,column_major_layout> work;\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::ormqr(side, trans, m, n, \n                                      k, &a(0,0), a.nr(), &tau(0,0),\n                                      &c(0,0), ldc, &work_size, -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual result \n            info = binding::ormqr(side, trans, m, n, \n                                  k, &a(0,0), a.nr(), &tau(0,0),\n                                  &c(0,0), ldc, &work(0,0), work.size());\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_ORMQR_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/potrf.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_POTRF_Hh_\n#define DLIB_LAPACk_POTRF_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dpotrf) (char *uplo, integer *n, double *a, \n                                              integer* lda, integer *info);\n\n                void DLIB_FORTRAN_ID(spotrf) (char *uplo, integer *n, float *a, \n                                              integer* lda, integer *info);\n\n            }\n\n            inline int potrf (char uplo, integer n, double *a, integer lda)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(dpotrf)(&uplo, &n, a, &lda, &info);\n                return info;\n            }\n\n            inline int potrf (char uplo, integer n, float *a, integer lda)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(spotrf)(&uplo, &n, a, &lda, &info);\n                return info;\n            }\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n/*  -- LAPACK routine (version 3.1) -- */\n/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */\n/*     November 2006 */\n\n/*     .. Scalar Arguments .. */\n/*     .. */\n/*     .. Array Arguments .. */\n/*     .. */\n\n/*  Purpose */\n/*  ======= */\n\n/*  DPOTRF computes the Cholesky factorization of a real symmetric */\n/*  positive definite matrix A. */\n\n/*  The factorization has the form */\n/*     A = U**T * U,  if UPLO = 'U', or */\n/*     A = L  * L**T,  if UPLO = 'L', */\n/*  where U is an upper triangular matrix and L is lower triangular. */\n\n/*  This is the block version of the algorithm, calling Level 3 BLAS. */\n\n/*  Arguments */\n/*  ========= */\n\n/*  UPLO    (input) CHARACTER*1 */\n/*          = 'U':  Upper triangle of A is stored; */\n/*          = 'L':  Lower triangle of A is stored. */\n\n/*  N       (input) INTEGER */\n/*          The order of the matrix A.  N >= 0. */\n\n/*  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N) */\n/*          On entry, the symmetric matrix A.  If UPLO = 'U', the leading */\n/*          N-by-N upper triangular part of A contains the upper */\n/*          triangular part of the matrix A, and the strictly lower */\n/*          triangular part of A is not referenced.  If UPLO = 'L', the */\n/*          leading N-by-N lower triangular part of A contains the lower */\n/*          triangular part of the matrix A, and the strictly upper */\n/*          triangular part of A is not referenced. */\n\n/*          On exit, if INFO = 0, the factor U or L from the Cholesky */\n/*          factorization A = U**T*U or A = L*L**T. */\n\n/*  LDA     (input) INTEGER */\n/*          The leading dimension of the array A.  LDA >= max(1,N). */\n\n/*  INFO    (output) INTEGER */\n/*          = 0:  successful exit */\n/*          < 0:  if INFO = -i, the i-th argument had an illegal value */\n/*          > 0:  if INFO = i, the leading minor of order i is not */\n/*                positive definite, and the factorization could not be */\n/*                completed. */\n\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1,\n            long NC1, \n            typename MM\n            >\n        int potrf (\n            char uplo,\n            matrix<T,NR1,NC1,MM,column_major_layout>& a\n        )\n        {\n            // compute the actual decomposition \n            int info = binding::potrf(uplo, a.nr(), &a(0,0), a.nr());\n\n            // If it fails part way though the factorization then make sure\n            // the end of the matrix gets properly initialized with zeros.\n            if (info > 0)\n            {\n                if (uplo == 'L')\n                    set_colm(a, range(info-1, a.nc()-1)) = 0;\n                else\n                    set_rowm(a, range(info-1, a.nr()-1)) = 0;\n            }\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1,\n            long NC1, \n            typename MM\n            >\n        int potrf (\n            char uplo,\n            matrix<T,NR1,NC1,MM,row_major_layout>& a\n        )\n        {\n            // since we are working on a row major order matrix we need to ask\n            // LAPACK for the transpose of whatever the user asked for.\n\n            if (uplo == 'L')\n                uplo = 'U';\n            else\n                uplo = 'L';\n\n            // compute the actual decomposition \n            int info = binding::potrf(uplo, a.nr(), &a(0,0), a.nr());\n\n            // If it fails part way though the factorization then make sure\n            // the end of the matrix gets properly initialized with zeros.\n            if (info > 0)\n            {\n                if (uplo == 'U')\n                    set_colm(a, range(info-1, a.nc()-1)) = 0;\n                else\n                    set_rowm(a, range(info-1, a.nr()-1)) = 0;\n            }\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_POTRF_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/syev.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_EV_Hh_\n#define DLIB_LAPACk_EV_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dsyev) (char *jobz, char *uplo, integer *n, double *a,\n                                             integer *lda, double *w, double *work, integer *lwork, \n                                             integer *info);\n\n                void DLIB_FORTRAN_ID(ssyev) (char *jobz, char *uplo, integer *n, float *a,\n                                             integer *lda, float *w, float *work, integer *lwork, \n                                             integer *info);\n\n            }\n\n            inline int syev (char jobz, char uplo, integer n, double *a,\n                             integer lda, double *w, double *work, integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(dsyev)(&jobz, &uplo, &n, a,\n                                       &lda, w, work, &lwork, &info);\n                return info;\n            }\n\n            inline int syev (char jobz, char uplo, integer n, float *a,\n                             integer lda, float *w, float *work, integer lwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(ssyev)(&jobz, &uplo, &n, a,\n                                       &lda, w, work, &lwork, &info);\n                return info;\n            }\n\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n/*  -- LAPACK driver routine (version 3.1) -- */\n/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */\n/*     November 2006 */\n\n/*     .. Scalar Arguments .. */\n/*     .. */\n/*     .. Array Arguments .. */\n/*     .. */\n\n/*  Purpose */\n/*  ======= */\n\n/*  DSYEV computes all eigenvalues and, optionally, eigenvectors of a */\n/*  real symmetric matrix A. */\n\n/*  Arguments */\n/*  ========= */\n\n/*  JOBZ    (input) CHARACTER*1 */\n/*          = 'N':  Compute eigenvalues only; */\n/*          = 'V':  Compute eigenvalues and eigenvectors. */\n\n/*  UPLO    (input) CHARACTER*1 */\n/*          = 'U':  Upper triangle of A is stored; */\n/*          = 'L':  Lower triangle of A is stored. */\n\n/*  N       (input) INTEGER */\n/*          The order of the matrix A.  N >= 0. */\n\n/*  A       (input/output) DOUBLE PRECISION array, dimension (LDA, N) */\n/*          On entry, the symmetric matrix A.  If UPLO = 'U', the */\n/*          leading N-by-N upper triangular part of A contains the */\n/*          upper triangular part of the matrix A.  If UPLO = 'L', */\n/*          the leading N-by-N lower triangular part of A contains */\n/*          the lower triangular part of the matrix A. */\n/*          On exit, if JOBZ = 'V', then if INFO = 0, A contains the */\n/*          orthonormal eigenvectors of the matrix A. */\n/*          If JOBZ = 'N', then on exit the lower triangle (if UPLO='L') */\n/*          or the upper triangle (if UPLO='U') of A, including the */\n/*          diagonal, is destroyed. */\n\n/*  LDA     (input) INTEGER */\n/*          The leading dimension of the array A.  LDA >= max(1,N). */\n\n/*  W       (output) DOUBLE PRECISION array, dimension (N) */\n/*          If INFO = 0, the eigenvalues in ascending order. */\n\n/*  WORK    (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) */\n/*          On exit, if INFO = 0, WORK(1) returns the optimal LWORK. */\n\n/*  LWORK   (input) INTEGER */\n/*          The length of the array WORK.  LWORK >= max(1,3*N-1). */\n/*          For optimal efficiency, LWORK >= (NB+2)*N, */\n/*          where NB is the blocksize for DSYTRD returned by ILAENV. */\n\n/*          If LWORK = -1, then a workspace query is assumed; the routine */\n/*          only calculates the optimal size of the WORK array, returns */\n/*          this value as the first entry of the WORK array, and no error */\n/*          message related to LWORK is issued by XERBLA. */\n\n/*  INFO    (output) INTEGER */\n/*          = 0:  successful exit */\n/*          < 0:  if INFO = -i, the i-th argument had an illegal value */\n/*          > 0:  if INFO = i, the algorithm failed to converge; i */\n/*                off-diagonal elements of an intermediate tridiagonal */\n/*                form did not converge to zero. */\n\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, \n            long NC1, long NC2,\n            typename MM\n            >\n        int syev (\n            const char jobz,\n            const char uplo,\n            matrix<T,NR1,NC1,MM,column_major_layout>& a,\n            matrix<T,NR2,NC2,MM,column_major_layout>& w\n        )\n        {\n            matrix<T,0,1,MM,column_major_layout> work;\n\n            const long n = a.nr();\n\n            w.set_size(n,1);\n\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::syev(jobz, uplo, n, &a(0,0),\n                                     a.nr(), &w(0,0), &work_size, -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual decomposition \n            info = binding::syev(jobz, uplo, n, &a(0,0),\n                                 a.nr(), &w(0,0), &work(0,0), work.size());\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, \n            long NC1, long NC2,\n            typename MM\n            >\n        int syev (\n            char jobz,\n            char uplo,\n            matrix<T,NR1,NC1,MM,row_major_layout>& a,\n            matrix<T,NR2,NC2,MM,row_major_layout>& w\n        )\n        {\n            matrix<T,0,1,MM,row_major_layout> work;\n\n            if (uplo == 'L')\n                uplo = 'U';\n            else\n                uplo = 'L';\n\n            const long n = a.nr();\n\n            w.set_size(n,1);\n\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            int info = binding::syev(jobz, uplo, n, &a(0,0),\n                                     a.nc(), &w(0,0), &work_size, -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n\n            // compute the actual decomposition \n            info = binding::syev(jobz, uplo, n, &a(0,0),\n                                 a.nc(), &w(0,0), &work(0,0), work.size());\n\n\n            a = trans(a);\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_EV_Hh_\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/lapack/syevr.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LAPACk_EVR_Hh_\n#define DLIB_LAPACk_EVR_Hh_\n\n#include \"fortran_id.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n    namespace lapack\n    {\n        namespace binding\n        {\n            extern \"C\"\n            {\n                void DLIB_FORTRAN_ID(dsyevr) (char *jobz, char *range, char *uplo, integer *n, \n                                              double *a, integer *lda, double *vl, double *vu, integer * il, \n                                              integer *iu, double *abstol, integer *m, double *w, \n                                              double *z_, integer *ldz, integer *isuppz, double *work, \n                                              integer *lwork, integer *iwork, integer *liwork, integer *info);\n\n                void DLIB_FORTRAN_ID(ssyevr) (char *jobz, char *range, char *uplo, integer *n, \n                                              float *a, integer *lda, float *vl, float *vu, integer * il, \n                                              integer *iu, float *abstol, integer *m, float *w, \n                                              float *z_, integer *ldz, integer *isuppz, float *work, \n                                              integer *lwork, integer *iwork, integer *liwork, integer *info);\n            }\n\n            inline int syevr (char jobz, char range, char uplo, integer n, \n                              double* a, integer lda, double vl, double vu, integer il, \n                              integer iu, double abstol, integer *m, double *w, \n                              double *z, integer ldz, integer *isuppz, double *work, \n                              integer lwork, integer *iwork, integer liwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(dsyevr)(&jobz, &range, &uplo, &n,\n                                        a, &lda, &vl, &vu, &il,\n                                        &iu, &abstol, m, w,\n                                        z, &ldz, isuppz, work,\n                                        &lwork, iwork, &liwork, &info);\n                return info;\n            }\n\n            inline int syevr (char jobz, char range, char uplo, integer n, \n                              float* a, integer lda, float vl, float vu, integer il, \n                              integer iu, float abstol, integer *m, float *w, \n                              float *z, integer ldz, integer *isuppz, float *work, \n                              integer lwork, integer *iwork, integer liwork)\n            {\n                integer info = 0;\n                DLIB_FORTRAN_ID(ssyevr)(&jobz, &range, &uplo, &n,\n                                        a, &lda, &vl, &vu, &il,\n                                        &iu, &abstol, m, w,\n                                        z, &ldz, isuppz, work,\n                                        &lwork, iwork, &liwork, &info);\n                return info;\n            }\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        /*\n\n*  -- LAPACK driver routine (version 3.1) --\n*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..\n*     November 2006\n*\n*     .. Scalar Arguments ..\n      CHARACTER          JOBZ, RANGE, UPLO\n      INTEGER            IL, INFO, IU, LDA, LDZ, LIWORK, LWORK, M, N\n      DOUBLE PRECISION   ABSTOL, VL, VU\n*     ..\n*     .. Array Arguments ..\n      INTEGER            ISUPPZ( * ), IWORK( * )\n      DOUBLE PRECISION   A( LDA, * ), W( * ), WORK( * ), Z( LDZ, * )\n*     ..\n*\n*  Purpose\n*  =======\n*\n*  DSYEVR computes selected eigenvalues and, optionally, eigenvectors\n*  of a real symmetric matrix A.  Eigenvalues and eigenvectors can be\n*  selected by specifying either a range of values or a range of\n*  indices for the desired eigenvalues.\n*\n*  DSYEVR first reduces the matrix A to tridiagonal form T with a call\n*  to DSYTRD.  Then, whenever possible, DSYEVR calls DSTEMR to compute\n*  the eigenspectrum using Relatively Robust Representations.  DSTEMR\n*  computes eigenvalues by the dqds algorithm, while orthogonal\n*  eigenvectors are computed from various \"good\" L D L^T representations\n*  (also known as Relatively Robust Representations). Gram-Schmidt\n*  orthogonalization is avoided as far as possible. More specifically,\n*  the various steps of the algorithm are as follows.\n*\n*  For each unreduced block (submatrix) of T,\n*     (a) Compute T - sigma I  = L D L^T, so that L and D\n*         define all the wanted eigenvalues to high relative accuracy.\n*         This means that small relative changes in the entries of D and L\n*         cause only small relative changes in the eigenvalues and\n*         eigenvectors. The standard (unfactored) representation of the\n*         tridiagonal matrix T does not have this property in general.\n*     (b) Compute the eigenvalues to suitable accuracy.\n*         If the eigenvectors are desired, the algorithm attains full\n*         accuracy of the computed eigenvalues only right before\n*         the corresponding vectors have to be computed, see steps c) and d).\n*     (c) For each cluster of close eigenvalues, select a new\n*         shift close to the cluster, find a new factorization, and refine\n*         the shifted eigenvalues to suitable accuracy.\n*     (d) For each eigenvalue with a large enough relative separation compute\n*         the corresponding eigenvector by forming a rank revealing twisted\n*         factorization. Go back to (c) for any clusters that remain.\n*\n*  The desired accuracy of the output can be specified by the input\n*  parameter ABSTOL.\n*\n*  For more details, see DSTEMR's documentation and:\n*  - Inderjit S. Dhillon and Beresford N. Parlett: \"Multiple representations\n*    to compute orthogonal eigenvectors of symmetric tridiagonal matrices,\"\n*    Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.\n*  - Inderjit Dhillon and Beresford Parlett: \"Orthogonal Eigenvectors and\n*    Relative Gaps,\" SIAM Journal on Matrix Analysis and Applications, Vol. 25,\n*    2004.  Also LAPACK Working Note 154.\n*  - Inderjit Dhillon: \"A new O(n^2) algorithm for the symmetric\n*    tridiagonal eigenvalue/eigenvector problem\",\n*    Computer Science Division Technical Report No. UCB/CSD-97-971,\n*    UC Berkeley, May 1997.\n*\n*\n*  Note 1 : DSYEVR calls DSTEMR when the full spectrum is requested\n*  on machines which conform to the ieee-754 floating point standard.\n*  DSYEVR calls DSTEBZ and SSTEIN on non-ieee machines and\n*  when partial spectrum requests are made.\n*\n*  Normal execution of DSTEMR may create NaNs and infinities and\n*  hence may abort due to a floating point exception in environments\n*  which do not handle NaNs and infinities in the ieee standard default\n*  manner.\n*\n*  Arguments\n*  =========\n*\n*  JOBZ    (input) CHARACTER*1\n*          = 'N':  Compute eigenvalues only;\n*          = 'V':  Compute eigenvalues and eigenvectors.\n*\n*  RANGE   (input) CHARACTER*1\n*          = 'A': all eigenvalues will be found.\n*          = 'V': all eigenvalues in the half-open interval (VL,VU]\n*                 will be found.\n*          = 'I': the IL-th through IU-th eigenvalues will be found.\n********** For RANGE = 'V' or 'I' and IU - IL < N - 1, DSTEBZ and\n********** DSTEIN are called\n*\n*  UPLO    (input) CHARACTER*1\n*          = 'U':  Upper triangle of A is stored;\n*          = 'L':  Lower triangle of A is stored.\n*\n*  N       (input) INTEGER\n*          The order of the matrix A.  N >= 0.\n*\n*  A       (input/output) DOUBLE PRECISION array, dimension (LDA, N)\n*          On entry, the symmetric matrix A.  If UPLO = 'U', the\n*          leading N-by-N upper triangular part of A contains the\n*          upper triangular part of the matrix A.  If UPLO = 'L',\n*          the leading N-by-N lower triangular part of A contains\n*          the lower triangular part of the matrix A.\n*          On exit, the lower triangle (if UPLO='L') or the upper\n*          triangle (if UPLO='U') of A, including the diagonal, is\n*          destroyed.\n*\n*  LDA     (input) INTEGER\n*          The leading dimension of the array A.  LDA >= max(1,N).\n*\n*  VL      (input) DOUBLE PRECISION\n*  VU      (input) DOUBLE PRECISION\n*          If RANGE='V', the lower and upper bounds of the interval to\n*          be searched for eigenvalues. VL < VU.\n*          Not referenced if RANGE = 'A' or 'I'.\n*\n*  IL      (input) INTEGER\n*  IU      (input) INTEGER\n*          If RANGE='I', the indices (in ascending order) of the\n*          smallest and largest eigenvalues to be returned.\n*          1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.\n*          Not referenced if RANGE = 'A' or 'V'.\n*\n*  ABSTOL  (input) DOUBLE PRECISION\n*          The absolute error tolerance for the eigenvalues.\n*          An approximate eigenvalue is accepted as converged\n*          when it is determined to lie in an interval [a,b]\n*          of width less than or equal to\n*\n*                  ABSTOL + EPS *   max( |a|,|b| ) ,\n*\n*          where EPS is the machine precision.  If ABSTOL is less than\n*          or equal to zero, then  EPS*|T|  will be used in its place,\n*          where |T| is the 1-norm of the tridiagonal matrix obtained\n*          by reducing A to tridiagonal form.\n*\n*          See \"Computing Small Singular Values of Bidiagonal Matrices\n*          with Guaranteed High Relative Accuracy,\" by Demmel and\n*          Kahan, LAPACK Working Note #3.\n*\n*          If high relative accuracy is important, set ABSTOL to\n*          DLAMCH( 'Safe minimum' ).  Doing so will guarantee that\n*          eigenvalues are computed to high relative accuracy when\n*          possible in future releases.  The current code does not\n*          make any guarantees about high relative accuracy, but\n*          future releases will. See J. Barlow and J. Demmel,\n*          \"Computing Accurate Eigensystems of Scaled Diagonally\n*          Dominant Matrices\", LAPACK Working Note #7, for a discussion\n*          of which matrices define their eigenvalues to high relative\n*          accuracy.\n*\n*  M       (output) INTEGER\n*          The total number of eigenvalues found.  0 <= M <= N.\n*          If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.\n*\n*  W       (output) DOUBLE PRECISION array, dimension (N)\n*          The first M elements contain the selected eigenvalues in\n*          ascending order.\n*\n*  Z       (output) DOUBLE PRECISION array, dimension (LDZ, max(1,M))\n*          If JOBZ = 'V', then if INFO = 0, the first M columns of Z\n*          contain the orthonormal eigenvectors of the matrix A\n*          corresponding to the selected eigenvalues, with the i-th\n*          column of Z holding the eigenvector associated with W(i).\n*          If JOBZ = 'N', then Z is not referenced.\n*          Note: the user must ensure that at least max(1,M) columns are\n*          supplied in the array Z; if RANGE = 'V', the exact value of M\n*          is not known in advance and an upper bound must be used.\n*          Supplying N columns is always safe.\n*\n*  LDZ     (input) INTEGER\n*          The leading dimension of the array Z.  LDZ >= 1, and if\n*          JOBZ = 'V', LDZ >= max(1,N).\n*\n*  ISUPPZ  (output) INTEGER array, dimension ( 2*max(1,M) )\n*          The support of the eigenvectors in Z, i.e., the indices\n*          indicating the nonzero elements in Z. The i-th eigenvector\n*          is nonzero only in elements ISUPPZ( 2*i-1 ) through\n*          ISUPPZ( 2*i ).\n********** Implemented only for RANGE = 'A' or 'I' and IU - IL = N - 1\n*\n*  WORK    (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK))\n*          On exit, if INFO = 0, WORK(1) returns the optimal LWORK.\n*\n*  LWORK   (input) INTEGER\n*          The dimension of the array WORK.  LWORK >= max(1,26*N).\n*          For optimal efficiency, LWORK >= (NB+6)*N,\n*          where NB is the max of the blocksize for DSYTRD and DORMTR\n*          returned by ILAENV.\n*\n*          If LWORK = -1, then a workspace query is assumed; the routine\n*          only calculates the optimal size of the WORK array, returns\n*          this value as the first entry of the WORK array, and no error\n*          message related to LWORK is issued by XERBLA.\n*\n*  IWORK   (workspace/output) INTEGER array, dimension (MAX(1,LIWORK))\n*          On exit, if INFO = 0, IWORK(1) returns the optimal LWORK.\n*\n*  LIWORK  (input) INTEGER\n*          The dimension of the array IWORK.  LIWORK >= max(1,10*N).\n*\n*          If LIWORK = -1, then a workspace query is assumed; the\n*          routine only calculates the optimal size of the IWORK array,\n*          returns this value as the first entry of the IWORK array, and\n*          no error message related to LIWORK is issued by XERBLA.\n*\n*  INFO    (output) INTEGER\n*          = 0:  successful exit\n*          < 0:  if INFO = -i, the i-th argument had an illegal value\n*          > 0:  Internal error\n*\n*  Further Details\n*  ===============\n*\n*  Based on contributions by\n*     Inderjit Dhillon, IBM Almaden, USA\n*     Osni Marques, LBNL/NERSC, USA\n*     Ken Stanley, Computer Science Division, University of\n*       California at Berkeley, USA\n*     Jason Riedy, Computer Science Division, University of\n*       California at Berkeley, USA\n*\n* =====================================================================\n\n        */\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, long NR3, long NR4,\n            long NC1, long NC2, long NC3, long NC4,\n            typename MM\n            >\n        int syevr (\n            const char jobz,\n            const char range,\n            const char uplo,\n            matrix<T,NR1,NC1,MM,column_major_layout>& a,\n            const double vl,\n            const double vu,\n            const integer il,\n            const integer iu,\n            const double abstol,\n            integer& num_eigenvalues_found,\n            matrix<T,NR2,NC2,MM,column_major_layout>& w,\n            matrix<T,NR3,NC3,MM,column_major_layout>& z,\n            matrix<integer,NR4,NC4,MM,column_major_layout>& isuppz\n        )\n        {\n            matrix<T,0,1,MM,column_major_layout> work;\n            matrix<integer,0,1,MM,column_major_layout> iwork;\n\n            const long n = a.nr();\n\n            w.set_size(n,1);\n\n            isuppz.set_size(2*n, 1);\n\n            if (jobz == 'V')\n            {\n                z.set_size(n,n);\n            }\n            else\n            {\n                z.set_size(NR3?NR3:1, NC3?NC3:1);\n            }\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            integer iwork_size = 1;\n            int info = binding::syevr(jobz, range, uplo, n, &a(0,0),\n                                      a.nr(), vl, vu, il, iu, abstol, &num_eigenvalues_found,\n                                      &w(0,0), &z(0,0), z.nr(), &isuppz(0,0), &work_size, -1,\n                                      &iwork_size, -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n            if (iwork.size() < iwork_size)\n                iwork.set_size(iwork_size, 1);\n\n            // compute the actual decomposition \n            info = binding::syevr(jobz, range, uplo, n, &a(0,0),\n                                  a.nr(), vl, vu, il, iu, abstol, &num_eigenvalues_found,\n                                  &w(0,0), &z(0,0), z.nr(), &isuppz(0,0), &work(0,0), work.size(),\n                                  &iwork(0,0), iwork.size());\n\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, \n            long NR1, long NR2, long NR3, long NR4,\n            long NC1, long NC2, long NC3, long NC4,\n            typename MM\n            >\n        int syevr (\n            const char jobz,\n            const char range,\n            char uplo,\n            matrix<T,NR1,NC1,MM,row_major_layout>& a,\n            const double vl,\n            const double vu,\n            const integer il,\n            const integer iu,\n            const double abstol,\n            integer& num_eigenvalues_found,\n            matrix<T,NR2,NC2,MM,row_major_layout>& w,\n            matrix<T,NR3,NC3,MM,row_major_layout>& z,\n            matrix<integer,NR4,NC4,MM,row_major_layout>& isuppz\n        )\n        {\n            matrix<T,0,1,MM,row_major_layout> work;\n            matrix<integer,0,1,MM,row_major_layout> iwork;\n\n            if (uplo == 'L')\n                uplo = 'U';\n            else\n                uplo = 'L';\n\n            const long n = a.nr();\n\n            w.set_size(n,1);\n\n            isuppz.set_size(2*n, 1);\n\n            if (jobz == 'V')\n            {\n                z.set_size(n,n);\n            }\n            else\n            {\n                z.set_size(NR3?NR3:1, NC3?NC3:1);\n            }\n\n            // figure out how big the workspace needs to be.\n            T work_size = 1;\n            integer iwork_size = 1;\n            int info = binding::syevr(jobz, range, uplo, n, &a(0,0),\n                                      a.nc(), vl, vu, il, iu, abstol, &num_eigenvalues_found,\n                                      &w(0,0), &z(0,0), z.nc(), &isuppz(0,0), &work_size, -1,\n                                      &iwork_size, -1);\n\n            if (info != 0)\n                return info;\n\n            if (work.size() < work_size)\n                work.set_size(static_cast<long>(work_size), 1);\n            if (iwork.size() < iwork_size)\n                iwork.set_size(iwork_size, 1);\n\n            // compute the actual decomposition \n            info = binding::syevr(jobz, range, uplo, n, &a(0,0),\n                                  a.nc(), vl, vu, il, iu, abstol, &num_eigenvalues_found,\n                                  &w(0,0), &z(0,0), z.nc(), &isuppz(0,0), &work(0,0), work.size(),\n                                  &iwork(0,0), iwork.size());\n\n            z = trans(z);\n\n            return info;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_LAPACk_EVR_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_\n#define DLIB_MATRIx_\n\n#include \"matrix_exp.h\"\n#include \"matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../enable_if.h\"\n#include <sstream>\n#include <algorithm>\n#include \"../memory_manager.h\"\n#include \"../is_kind.h\"\n#include \"matrix_data_layout.h\"\n#include \"matrix_assign_fwd.h\"\n#include \"matrix_op.h\"\n\n#ifdef _MSC_VER\n// Disable the following warnings for Visual Studio\n\n// This warning is:\n//    \"warning C4355: 'this' : used in base member initializer list\"\n// Which we get from this code but it is not an error so I'm turning this\n// warning off and then turning it back on at the end of the file.\n#pragma warning(disable : 4355)\n\n#endif\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    // This template will perform the needed loop for element multiplication using whichever\n    // dimension is provided as a compile time constant (if one is at all).\n    template <\n        typename LHS,\n        typename RHS,\n        long lhs_nc = LHS::NC,\n        long rhs_nr = RHS::NR\n        >\n    struct matrix_multiply_helper \n    {\n        typedef typename LHS::type type;\n        template <typename RHS_, typename LHS_>\n        inline const static type  eval (\n            const RHS_& rhs,\n            const LHS_& lhs,\n            const long r, \n            const long c\n        )  \n        { \n            type temp = lhs(r,0)*rhs(0,c);\n            for (long i = 1; i < rhs.nr(); ++i)\n            {\n                temp += lhs(r,i)*rhs(i,c);\n            }\n            return temp;\n        }\n    };\n\n    template <\n        typename LHS,\n        typename RHS,\n        long lhs_nc \n        >\n    struct matrix_multiply_helper <LHS,RHS,lhs_nc,0>\n    {\n        typedef typename LHS::type type;\n        template <typename RHS_, typename LHS_>\n        inline const static type  eval (\n            const RHS_& rhs,\n            const LHS_& lhs,\n            const long r, \n            const long c\n        )  \n        { \n            type temp = lhs(r,0)*rhs(0,c);\n            for (long i = 1; i < lhs.nc(); ++i)\n            {\n                temp += lhs(r,i)*rhs(i,c);\n            }\n            return temp;\n        }\n    };\n\n    template <typename LHS, typename RHS>\n    class matrix_multiply_exp;\n\n    template <typename LHS, typename RHS>\n    struct matrix_traits<matrix_multiply_exp<LHS,RHS> >\n    {\n        typedef typename LHS::type type;\n        typedef typename LHS::type const_ret_type;\n        typedef typename LHS::mem_manager_type mem_manager_type;\n        typedef typename LHS::layout_type layout_type;\n        const static long NR = LHS::NR;\n        const static long NC = RHS::NC;\n\n#ifdef DLIB_USE_BLAS\n        // if there are BLAS functions to be called then we want to make sure we\n        // always evaluate any complex expressions so that the BLAS bindings can happen.\n        const static bool lhs_is_costly = (LHS::cost > 2)&&(RHS::NC != 1 || LHS::cost >= 10000);\n        const static bool rhs_is_costly = (RHS::cost > 2)&&(LHS::NR != 1 || RHS::cost >= 10000);\n#else\n        const static bool lhs_is_costly = (LHS::cost > 4)&&(RHS::NC != 1);\n        const static bool rhs_is_costly = (RHS::cost > 4)&&(LHS::NR != 1);\n#endif\n\n        // Note that if we decide that one of the matrices is too costly we will evaluate it\n        // into a temporary.  Doing this resets its cost back to 1.\n        const static long lhs_cost = ((lhs_is_costly==true)? 1 : (LHS::cost));\n        const static long rhs_cost = ((rhs_is_costly==true)? 1 : (RHS::cost));\n\n        // The cost of evaluating an element of a matrix multiply is the cost of evaluating elements from\n        // RHS and LHS times the number of rows/columns in the RHS/LHS matrix.  If we don't know the matrix\n        // dimensions then just assume it is really large.\n        const static long cost = ((tmax<LHS::NC,RHS::NR>::value!=0)? ((lhs_cost+rhs_cost)*tmax<LHS::NC,RHS::NR>::value):(10000));\n    };\n\n    template <typename T, bool is_ref> struct conditional_matrix_temp { typedef typename T::matrix_type type; };\n    template <typename T> struct conditional_matrix_temp<T,true>      { typedef T& type; };\n\n    template <\n        typename LHS,\n        typename RHS\n        >\n    class matrix_multiply_exp : public matrix_exp<matrix_multiply_exp<LHS,RHS> >\n    {\n        /*!\n            REQUIREMENTS ON LHS AND RHS\n                - must be matrix_exp objects.\n        !*/\n    public:\n\n        typedef typename matrix_traits<matrix_multiply_exp>::type type;\n        typedef typename matrix_traits<matrix_multiply_exp>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_multiply_exp>::mem_manager_type mem_manager_type;\n        const static long NR = matrix_traits<matrix_multiply_exp>::NR;\n        const static long NC = matrix_traits<matrix_multiply_exp>::NC;\n        const static long cost = matrix_traits<matrix_multiply_exp>::cost;\n        typedef typename matrix_traits<matrix_multiply_exp>::layout_type layout_type;\n\n\n        const static bool lhs_is_costly = matrix_traits<matrix_multiply_exp>::lhs_is_costly;\n        const static bool rhs_is_costly = matrix_traits<matrix_multiply_exp>::rhs_is_costly;\n        const static bool either_is_costly = lhs_is_costly || rhs_is_costly;\n        const static bool both_are_costly = lhs_is_costly && rhs_is_costly;\n\n        typedef typename conditional_matrix_temp<const LHS,lhs_is_costly == false>::type LHS_ref_type;\n        typedef typename conditional_matrix_temp<const RHS,rhs_is_costly == false>::type RHS_ref_type;\n\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of objects.\n        template <typename T1, typename T2>\n        matrix_multiply_exp (T1,T2); \n\n        inline matrix_multiply_exp (\n            const LHS& lhs_,\n            const RHS& rhs_\n        ) :\n            lhs(lhs_),\n            rhs(rhs_)\n        {\n            // You are trying to multiply two incompatible matrices together.  The number of columns \n            // in the matrix on the left must match the number of rows in the matrix on the right.\n            COMPILE_TIME_ASSERT(LHS::NC == RHS::NR || LHS::NC*RHS::NR == 0);\n            DLIB_ASSERT(lhs.nc() == rhs.nr() && lhs.size() > 0 && rhs.size() > 0, \n                \"\\tconst matrix_exp operator*(const matrix_exp& lhs, const matrix_exp& rhs)\"\n                << \"\\n\\tYou are trying to multiply two incompatible matrices together\"\n                << \"\\n\\tlhs.nr(): \" << lhs.nr()\n                << \"\\n\\tlhs.nc(): \" << lhs.nc()\n                << \"\\n\\trhs.nr(): \" << rhs.nr()\n                << \"\\n\\trhs.nc(): \" << rhs.nc()\n                << \"\\n\\t&lhs: \" << &lhs \n                << \"\\n\\t&rhs: \" << &rhs \n                );\n\n            // You can't multiply matrices together if they don't both contain the same type of elements.\n            COMPILE_TIME_ASSERT((is_same_type<typename LHS::type, typename RHS::type>::value == true));\n        }\n\n        inline const type operator() (\n            const long r, \n            const long c\n        ) const \n        { \n            return matrix_multiply_helper<LHS,RHS>::eval(rhs,lhs,r,c);\n        }\n\n        inline const type operator() ( long i ) const \n        { return matrix_exp<matrix_multiply_exp>::operator()(i); }\n\n        long nr (\n        ) const { return lhs.nr(); }\n\n        long nc (\n        ) const { return rhs.nc(); }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const { return lhs.aliases(item) || rhs.aliases(item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const { return aliases(item); }\n\n        LHS_ref_type lhs;\n        RHS_ref_type rhs;\n    };\n\n    template < typename EXP1, typename EXP2 >\n    inline const matrix_multiply_exp<EXP1, EXP2> operator* (\n        const matrix_exp<EXP1>& m1,\n        const matrix_exp<EXP2>& m2\n    )\n    {\n        return matrix_multiply_exp<EXP1, EXP2>(m1.ref(), m2.ref());\n    }\n\n    template <typename M, bool use_reference = true>\n    class matrix_mul_scal_exp;\n\n    // -------------------------\n\n    // Now we declare some overloads that cause any scalar multiplications to percolate \n    // up and outside of any matrix multiplies.  Note that we are using the non-reference containing\n    // mode of the matrix_mul_scal_exp object since we are passing in locally constructed matrix_multiply_exp \n    // objects.  So the matrix_mul_scal_exp object will contain copies of matrix_multiply_exp objects\n    // rather than references to them.  This could result in extra matrix copies if the matrix_multiply_exp\n    // decided it should evaluate any of its arguments.  So we also try to not apply this percolating operation \n    // if the matrix_multiply_exp would contain a fully evaluated copy of the original matrix_mul_scal_exp \n    // expression.\n    // \n    // Also, the reason we want to apply this transformation in the first place is because it (1) makes\n    // the expressions going into matrix multiply expressions simpler and (2) it makes it a lot more\n    // straightforward to bind BLAS calls to matrix expressions involving scalar multiplies.\n    template < typename EXP1, typename EXP2 >\n    inline const typename disable_if_c< matrix_multiply_exp<matrix_mul_scal_exp<EXP1>, matrix_mul_scal_exp<EXP2> >::both_are_costly ,      \n                                        matrix_mul_scal_exp<matrix_multiply_exp<EXP1, EXP2>,false> >::type operator* (\n        const matrix_mul_scal_exp<EXP1>& m1,\n        const matrix_mul_scal_exp<EXP2>& m2\n    )\n    {\n        typedef matrix_multiply_exp<EXP1, EXP2> exp1;\n        typedef matrix_mul_scal_exp<exp1,false> exp2;\n        return exp2(exp1(m1.m, m2.m), m1.s*m2.s);\n    }\n\n    template < typename EXP1, typename EXP2 >\n    inline const typename disable_if_c< matrix_multiply_exp<matrix_mul_scal_exp<EXP1>, EXP2 >::lhs_is_costly ,      \n                                      matrix_mul_scal_exp<matrix_multiply_exp<EXP1, EXP2>,false> >::type operator* (\n        const matrix_mul_scal_exp<EXP1>& m1,\n        const matrix_exp<EXP2>& m2\n    )\n    {\n        typedef matrix_multiply_exp<EXP1, EXP2> exp1;\n        typedef matrix_mul_scal_exp<exp1,false> exp2;\n        return exp2(exp1(m1.m, m2.ref()), m1.s);\n    }\n\n    template < typename EXP1, typename EXP2 >\n    inline const typename disable_if_c< matrix_multiply_exp<EXP1, matrix_mul_scal_exp<EXP2> >::rhs_is_costly ,      \n                                      matrix_mul_scal_exp<matrix_multiply_exp<EXP1, EXP2>,false> >::type operator* (\n        const matrix_exp<EXP1>& m1,\n        const matrix_mul_scal_exp<EXP2>& m2\n    )\n    {\n        typedef matrix_multiply_exp<EXP1, EXP2> exp1;\n        typedef matrix_mul_scal_exp<exp1,false> exp2;\n        return exp2(exp1(m1.ref(), m2.m), m2.s);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename LHS, typename RHS>\n    class matrix_add_exp;\n\n    template <typename LHS, typename RHS>\n    struct matrix_traits<matrix_add_exp<LHS,RHS> >\n    {\n        typedef typename LHS::type type;\n        typedef typename LHS::type const_ret_type;\n        typedef typename LHS::mem_manager_type mem_manager_type;\n        typedef typename LHS::layout_type layout_type;\n        const static long NR = (RHS::NR > LHS::NR) ? RHS::NR : LHS::NR;\n        const static long NC = (RHS::NC > LHS::NC) ? RHS::NC : LHS::NC;\n        const static long cost = LHS::cost+RHS::cost+1;\n    };\n\n    template <\n        typename LHS,\n        typename RHS\n        >\n    class matrix_add_exp : public matrix_exp<matrix_add_exp<LHS,RHS> >\n    {\n        /*!\n            REQUIREMENTS ON LHS AND RHS\n                - must be matrix_exp objects. \n        !*/\n    public:\n        typedef typename matrix_traits<matrix_add_exp>::type type;\n        typedef typename matrix_traits<matrix_add_exp>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_add_exp>::mem_manager_type mem_manager_type;\n        const static long NR = matrix_traits<matrix_add_exp>::NR;\n        const static long NC = matrix_traits<matrix_add_exp>::NC;\n        const static long cost = matrix_traits<matrix_add_exp>::cost;\n        typedef typename matrix_traits<matrix_add_exp>::layout_type layout_type;\n\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of objects.\n        template <typename T1, typename T2>\n        matrix_add_exp (T1,T2); \n\n        matrix_add_exp (\n            const LHS& lhs_,\n            const RHS& rhs_\n        ) :\n            lhs(lhs_),\n            rhs(rhs_)\n        {\n            // You can only add matrices together if they both have the same number of rows and columns.\n            COMPILE_TIME_ASSERT(LHS::NR == RHS::NR || LHS::NR == 0 || RHS::NR == 0);\n            COMPILE_TIME_ASSERT(LHS::NC == RHS::NC || LHS::NC == 0 || RHS::NC == 0);\n            DLIB_ASSERT(lhs.nc() == rhs.nc() &&\n                   lhs.nr() == rhs.nr(), \n                \"\\tconst matrix_exp operator+(const matrix_exp& lhs, const matrix_exp& rhs)\"\n                << \"\\n\\tYou are trying to add two incompatible matrices together\"\n                << \"\\n\\tlhs.nr(): \" << lhs.nr()\n                << \"\\n\\tlhs.nc(): \" << lhs.nc()\n                << \"\\n\\trhs.nr(): \" << rhs.nr()\n                << \"\\n\\trhs.nc(): \" << rhs.nc()\n                << \"\\n\\t&lhs: \" << &lhs \n                << \"\\n\\t&rhs: \" << &rhs \n                );\n\n            // You can only add matrices together if they both contain the same types of elements.\n            COMPILE_TIME_ASSERT((is_same_type<typename LHS::type, typename RHS::type>::value == true));\n        }\n\n        const type operator() (\n            long r, \n            long c\n        ) const { return lhs(r,c) + rhs(r,c); }\n\n        inline const type operator() ( long i ) const \n        { return matrix_exp<matrix_add_exp>::operator()(i); }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const { return lhs.aliases(item) || rhs.aliases(item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const { return lhs.destructively_aliases(item) || rhs.destructively_aliases(item); }\n\n        long nr (\n        ) const { return lhs.nr(); }\n\n        long nc (\n        ) const { return lhs.nc(); }\n\n        const LHS& lhs;\n        const RHS& rhs;\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    inline const matrix_add_exp<EXP1, EXP2> operator+ (\n        const matrix_exp<EXP1>& m1,\n        const matrix_exp<EXP2>& m2\n    )\n    {\n        return matrix_add_exp<EXP1, EXP2>(m1.ref(),m2.ref());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename LHS, typename RHS>\n    class matrix_subtract_exp;\n\n    template <typename LHS, typename RHS>\n    struct matrix_traits<matrix_subtract_exp<LHS,RHS> >\n    {\n        typedef typename LHS::type type;\n        typedef typename LHS::type const_ret_type;\n        typedef typename LHS::mem_manager_type mem_manager_type;\n        typedef typename LHS::layout_type layout_type;\n        const static long NR = (RHS::NR > LHS::NR) ? RHS::NR : LHS::NR;\n        const static long NC = (RHS::NC > LHS::NC) ? RHS::NC : LHS::NC;\n        const static long cost = LHS::cost+RHS::cost+1;\n    };\n\n    template <\n        typename LHS,\n        typename RHS\n        >\n    class matrix_subtract_exp : public matrix_exp<matrix_subtract_exp<LHS,RHS> >\n    {\n        /*!\n            REQUIREMENTS ON LHS AND RHS\n                - must be matrix_exp objects. \n        !*/\n    public:\n        typedef typename matrix_traits<matrix_subtract_exp>::type type;\n        typedef typename matrix_traits<matrix_subtract_exp>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_subtract_exp>::mem_manager_type mem_manager_type;\n        const static long NR = matrix_traits<matrix_subtract_exp>::NR;\n        const static long NC = matrix_traits<matrix_subtract_exp>::NC;\n        const static long cost = matrix_traits<matrix_subtract_exp>::cost;\n        typedef typename matrix_traits<matrix_subtract_exp>::layout_type layout_type;\n\n\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of objects.\n        template <typename T1, typename T2>\n        matrix_subtract_exp (T1,T2); \n\n        matrix_subtract_exp (\n            const LHS& lhs_,\n            const RHS& rhs_\n        ) : \n            lhs(lhs_),\n            rhs(rhs_)\n        {\n            // You can only subtract one matrix from another if they both have the same number of rows and columns.\n            COMPILE_TIME_ASSERT(LHS::NR == RHS::NR || LHS::NR == 0 || RHS::NR == 0);\n            COMPILE_TIME_ASSERT(LHS::NC == RHS::NC || LHS::NC == 0 || RHS::NC == 0);\n            DLIB_ASSERT(lhs.nc() == rhs.nc() &&\n                   lhs.nr() == rhs.nr(), \n                \"\\tconst matrix_exp operator-(const matrix_exp& lhs, const matrix_exp& rhs)\"\n                << \"\\n\\tYou are trying to subtract two incompatible matrices\"\n                << \"\\n\\tlhs.nr(): \" << lhs.nr()\n                << \"\\n\\tlhs.nc(): \" << lhs.nc()\n                << \"\\n\\trhs.nr(): \" << rhs.nr()\n                << \"\\n\\trhs.nc(): \" << rhs.nc()\n                << \"\\n\\t&lhs: \" << &lhs \n                << \"\\n\\t&rhs: \" << &rhs \n                );\n\n            // You can only subtract one matrix from another if they both contain elements of the same type.\n            COMPILE_TIME_ASSERT((is_same_type<typename LHS::type, typename RHS::type>::value == true));\n        }\n\n        const type operator() (\n            long r, \n            long c\n        ) const { return lhs(r,c) - rhs(r,c); }\n\n        inline const type operator() ( long i ) const \n        { return matrix_exp<matrix_subtract_exp>::operator()(i); }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const { return lhs.aliases(item) || rhs.aliases(item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const { return lhs.destructively_aliases(item) || rhs.destructively_aliases(item); }\n\n        long nr (\n        ) const { return lhs.nr(); }\n\n        long nc (\n        ) const { return lhs.nc(); }\n\n        const LHS& lhs;\n        const RHS& rhs;\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    inline const matrix_subtract_exp<EXP1, EXP2> operator- (\n        const matrix_exp<EXP1>& m1,\n        const matrix_exp<EXP2>& m2\n    )\n    {\n        return matrix_subtract_exp<EXP1, EXP2>(m1.ref(),m2.ref());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    class matrix_div_scal_exp;\n\n    template <typename M>\n    struct matrix_traits<matrix_div_scal_exp<M> >\n    {\n        typedef typename M::type type;\n        typedef typename M::type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const static long NR = M::NR;\n        const static long NC = M::NC;\n        const static long cost = M::cost+1;\n    };\n\n    template <\n        typename M\n        >\n    class matrix_div_scal_exp : public matrix_exp<matrix_div_scal_exp<M> >\n    {\n        /*!\n            REQUIREMENTS ON M \n                - must be a matrix_exp object.\n        !*/\n    public:\n        typedef typename matrix_traits<matrix_div_scal_exp>::type type;\n        typedef typename matrix_traits<matrix_div_scal_exp>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_div_scal_exp>::mem_manager_type mem_manager_type;\n        const static long NR = matrix_traits<matrix_div_scal_exp>::NR;\n        const static long NC = matrix_traits<matrix_div_scal_exp>::NC;\n        const static long cost = matrix_traits<matrix_div_scal_exp>::cost;\n        typedef typename matrix_traits<matrix_div_scal_exp>::layout_type layout_type;\n\n\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of objects.\n        template <typename T1>\n        matrix_div_scal_exp (T1, const type&); \n\n        matrix_div_scal_exp (\n            const M& m_,\n            const type& s_\n        ) :\n            m(m_),\n            s(s_)\n        {}\n\n        const type operator() (\n            long r, \n            long c\n        ) const { return m(r,c)/s; }\n\n        inline const type operator() ( long i ) const \n        { return matrix_exp<matrix_div_scal_exp>::operator()(i); }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const { return m.aliases(item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const { return m.destructively_aliases(item); }\n\n        long nr (\n        ) const { return m.nr(); }\n\n        long nc (\n        ) const { return m.nc(); }\n\n        const M& m;\n        const type s;\n    };\n\n    template <\n        typename EXP,\n        typename S\n        >\n    inline const typename enable_if_c<std::numeric_limits<typename EXP::type>::is_integer, matrix_div_scal_exp<EXP> >::type operator/ (\n        const matrix_exp<EXP>& m,\n        const S& s\n    )\n    {\n        return matrix_div_scal_exp<EXP>(m.ref(),static_cast<typename EXP::type>(s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, bool use_reference >\n    struct matrix_traits<matrix_mul_scal_exp<M,use_reference> >\n    {\n        typedef typename M::type type;\n        typedef typename M::type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const static long NR = M::NR;\n        const static long NC = M::NC;\n        const static long cost = M::cost+1;\n    };\n\n    template <typename T, bool is_ref> struct conditional_reference { typedef T type; };\n    template <typename T> struct conditional_reference<T,true>      { typedef T& type; };\n\n\n    template <\n        typename M,\n        bool use_reference\n        >\n    class matrix_mul_scal_exp : public matrix_exp<matrix_mul_scal_exp<M,use_reference> >\n    {\n        /*!\n            REQUIREMENTS ON M \n                - must be a matrix_exp object.\n\n        !*/\n    public:\n        typedef typename matrix_traits<matrix_mul_scal_exp>::type type;\n        typedef typename matrix_traits<matrix_mul_scal_exp>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_mul_scal_exp>::mem_manager_type mem_manager_type;\n        const static long NR = matrix_traits<matrix_mul_scal_exp>::NR;\n        const static long NC = matrix_traits<matrix_mul_scal_exp>::NC;\n        const static long cost = matrix_traits<matrix_mul_scal_exp>::cost;\n        typedef typename matrix_traits<matrix_mul_scal_exp>::layout_type layout_type;\n\n        // You aren't allowed to multiply a matrix of matrices by a scalar.   \n        COMPILE_TIME_ASSERT(is_matrix<type>::value == false);\n\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of objects.\n        template <typename T1>\n        matrix_mul_scal_exp (T1, const type&); \n\n        matrix_mul_scal_exp (\n            const M& m_,\n            const type& s_\n        ) :\n            m(m_),\n            s(s_)\n        {}\n\n        const type operator() (\n            long r, \n            long c\n        ) const { return m(r,c)*s; }\n\n        inline const type operator() ( long i ) const \n        { return matrix_exp<matrix_mul_scal_exp>::operator()(i); }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const { return m.aliases(item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const { return m.destructively_aliases(item); }\n\n        long nr (\n        ) const { return m.nr(); }\n\n        long nc (\n        ) const { return m.nc(); }\n\n        typedef typename conditional_reference<const M,use_reference>::type M_ref_type;\n\n        M_ref_type m;\n        const type s;\n    };\n\n    template <\n        typename EXP,\n        typename S \n        >\n    inline typename disable_if<is_matrix<S>, const matrix_mul_scal_exp<EXP> >::type operator* (\n        const matrix_exp<EXP>& m,\n        const S& s\n    )\n    {\n        typedef typename EXP::type type;\n        return matrix_mul_scal_exp<EXP>(m.ref(),static_cast<type>(s));\n    }\n\n    template <\n        typename EXP,\n        typename S,\n        bool B\n        >\n    inline typename disable_if<is_matrix<S>, const matrix_mul_scal_exp<EXP> >::type operator* (\n        const matrix_mul_scal_exp<EXP,B>& m,\n        const S& s\n    )\n    {\n        typedef typename EXP::type type;\n        return matrix_mul_scal_exp<EXP>(m.m,static_cast<type>(s)*m.s);\n    }\n\n    template <\n        typename EXP,\n        typename S \n        >\n    inline typename disable_if<is_matrix<S>, const matrix_mul_scal_exp<EXP> >::type operator* (\n        const S& s,\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef typename EXP::type type;\n        return matrix_mul_scal_exp<EXP>(m.ref(),static_cast<type>(s));\n    }\n\n    template <\n        typename EXP,\n        typename S,\n        bool B\n        >\n    inline typename disable_if<is_matrix<S>, const matrix_mul_scal_exp<EXP> >::type operator* (\n        const S& s,\n        const matrix_mul_scal_exp<EXP,B>& m\n    )\n    {\n        typedef typename EXP::type type;\n        return matrix_mul_scal_exp<EXP>(m.m,static_cast<type>(s)*m.s);\n    }\n\n    template <\n        typename EXP ,\n        typename S\n        >\n    inline const typename disable_if_c<std::numeric_limits<typename EXP::type>::is_integer, matrix_mul_scal_exp<EXP> >::type operator/ (\n        const matrix_exp<EXP>& m,\n        const S& s\n    )\n    {\n        typedef typename EXP::type type;\n        const type one = 1;\n        return matrix_mul_scal_exp<EXP>(m.ref(),one/static_cast<type>(s));\n    }\n\n    template <\n        typename EXP,\n        bool B,\n        typename S\n        >\n    inline const typename disable_if_c<std::numeric_limits<typename EXP::type>::is_integer, matrix_mul_scal_exp<EXP> >::type operator/ (\n        const matrix_mul_scal_exp<EXP,B>& m,\n        const S& s\n    )\n    {\n        typedef typename EXP::type type;\n        return matrix_mul_scal_exp<EXP>(m.m,m.s/static_cast<type>(s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_s_div_m : basic_op_m<M> \n    {\n        typedef typename M::type type;\n\n        op_s_div_m( const M& m_, const type& s_) : basic_op_m<M>(m_), s(s_){}\n\n        const type s;\n\n        const static long cost = M::cost+1;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply (long r, long c) const\n        { \n            return s/this->m(r,c);\n        }\n    };\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename disable_if<is_matrix<S>, matrix_op<op_s_div_m<EXP> > >::type operator/ (\n        const S& val,\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef typename EXP::type type;\n\n        typedef op_s_div_m<EXP> op;\n        return matrix_op<op>(op(m.ref(), static_cast<type>(val)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    inline const matrix_mul_scal_exp<EXP> operator- (\n        const matrix_exp<EXP>& m\n    )\n    {\n        return matrix_mul_scal_exp<EXP>(m.ref(),-1);\n    }\n\n    template <\n        typename EXP,\n        bool B\n        >\n    inline const matrix_mul_scal_exp<EXP> operator- (\n        const matrix_mul_scal_exp<EXP,B>& m\n    )\n    {\n        return matrix_mul_scal_exp<EXP>(m.m,-1*m.s);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_add_scalar : basic_op_m<M> \n    {\n        typedef typename M::type type;\n\n        op_add_scalar( const M& m_, const type& s_) : basic_op_m<M>(m_), s(s_){}\n\n        const type s;\n\n        const static long cost = M::cost+1;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply (long r, long c) const\n        { \n            return this->m(r,c) + s;\n        }\n    };\n\n    template <\n        typename EXP,\n        typename T\n        >\n    const typename disable_if<is_matrix<T>, matrix_op<op_add_scalar<EXP> > >::type operator+ (\n        const matrix_exp<EXP>& m,\n        const T& val\n    )\n    {\n        typedef typename EXP::type type;\n\n        typedef op_add_scalar<EXP> op;\n        return matrix_op<op>(op(m.ref(), static_cast<type>(val)));\n    }\n\n    template <\n        typename EXP,\n        typename T\n        >\n    const typename disable_if<is_matrix<T>, matrix_op<op_add_scalar<EXP> > >::type operator+ (\n        const T& val,\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef typename EXP::type type;\n\n        typedef op_add_scalar<EXP> op;\n        return matrix_op<op>(op(m.ref(), static_cast<type>(val)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_subl_scalar : basic_op_m<M> \n    {\n        typedef typename M::type type;\n\n        op_subl_scalar( const M& m_, const type& s_) : basic_op_m<M>(m_), s(s_){}\n\n        const type s;\n\n        const static long cost = M::cost+1;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply (long r, long c) const\n        { \n            return s - this->m(r,c) ;\n        }\n    };\n\n    template <\n        typename EXP,\n        typename T\n        >\n    const typename disable_if<is_matrix<T>, matrix_op<op_subl_scalar<EXP> > >::type operator- (\n        const T& val,\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef typename EXP::type type;\n\n        typedef op_subl_scalar<EXP> op;\n        return matrix_op<op>(op(m.ref(), static_cast<type>(val)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_subr_scalar : basic_op_m<M> \n    {\n        typedef typename M::type type;\n\n        op_subr_scalar( const M& m_, const type& s_) : basic_op_m<M>(m_), s(s_){}\n\n        const type s;\n\n        const static long cost = M::cost+1;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply (long r, long c) const\n        { \n            return this->m(r,c) - s;\n        }\n    };\n\n    template <\n        typename EXP,\n        typename T\n        >\n    const typename disable_if<is_matrix<T>, matrix_op<op_subr_scalar<EXP> > >::type operator- (\n        const matrix_exp<EXP>& m,\n        const T& val\n    )\n    {\n        typedef typename EXP::type type;\n\n        typedef op_subr_scalar<EXP> op;\n        return matrix_op<op>(op(m.ref(), static_cast<type>(val)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    bool operator== (\n        const matrix_exp<EXP1>& m1,\n        const matrix_exp<EXP2>& m2\n    )\n    {\n        if (m1.nr() == m2.nr() && m1.nc() == m2.nc())\n        {\n            for (long r = 0; r < m1.nr(); ++r)\n            {\n                for (long c = 0; c < m1.nc(); ++c)\n                {\n                    if (m1(r,c) != m2(r,c))\n                        return false;\n                }\n            }\n            return true;\n        }\n        return false;\n    }\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    inline bool operator!= (\n        const matrix_exp<EXP1>& m1,\n        const matrix_exp<EXP2>& m2\n    ) { return !(m1 == m2); }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long num_rows,\n        long num_cols,\n        typename mem_manager,\n        typename layout\n        >\n    struct matrix_traits<matrix<T,num_rows, num_cols, mem_manager, layout> >\n    {\n        typedef T type;\n        typedef const T& const_ret_type;\n        typedef mem_manager mem_manager_type;\n        typedef layout layout_type;\n        const static long NR = num_rows;\n        const static long NC = num_cols;\n        const static long cost = 1;\n\n    };\n\n    template <\n        typename T,\n        long num_rows,\n        long num_cols,\n        typename mem_manager,\n        typename layout\n        >\n    class matrix : public matrix_exp<matrix<T,num_rows,num_cols, mem_manager,layout> > \n    {\n\n        COMPILE_TIME_ASSERT(num_rows >= 0 && num_cols >= 0); \n\n    public:\n        typedef typename matrix_traits<matrix>::type type;\n        typedef typename matrix_traits<matrix>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix>::mem_manager_type mem_manager_type;\n        typedef typename matrix_traits<matrix>::layout_type layout_type;\n        const static long NR = matrix_traits<matrix>::NR;\n        const static long NC = matrix_traits<matrix>::NC;\n        const static long cost = matrix_traits<matrix>::cost;\n        typedef T*          iterator;       \n        typedef const T*    const_iterator; \n\n        matrix () \n        {\n        }\n\n        explicit matrix (\n            long length \n        ) \n        {\n            // This object you are trying to call matrix(length) on is not a column or \n            // row vector.\n            COMPILE_TIME_ASSERT(NR == 1 || NC == 1);\n            DLIB_ASSERT( length >= 0, \n                \"\\tmatrix::matrix(length)\"\n                << \"\\n\\tlength must be at least 0\"\n                << \"\\n\\tlength: \" << length \n                << \"\\n\\tNR:     \" << NR \n                << \"\\n\\tNC:     \" << NC \n                << \"\\n\\tthis:   \" << this\n                );\n\n            if (NR == 1)\n            {\n                DLIB_ASSERT(NC == 0 || NC == length,\n                    \"\\tmatrix::matrix(length)\"\n                    << \"\\n\\tSince this is a statically sized matrix length must equal NC\"\n                    << \"\\n\\tlength: \" << length \n                    << \"\\n\\tNR:     \" << NR \n                    << \"\\n\\tNC:     \" << NC \n                    << \"\\n\\tthis:   \" << this\n                    );\n\n                data.set_size(1,length);\n            }\n            else\n            {\n                DLIB_ASSERT(NR == 0 || NR == length,\n                    \"\\tvoid matrix::set_size(length)\"\n                    << \"\\n\\tSince this is a statically sized matrix length must equal NR\"\n                    << \"\\n\\tlength: \" << length \n                    << \"\\n\\tNR:     \" << NR \n                    << \"\\n\\tNC:     \" << NC \n                    << \"\\n\\tthis:   \" << this\n                    );\n\n                data.set_size(length,1);\n            }\n        }\n\n        matrix (\n            long rows,\n            long cols \n        )  \n        {\n            DLIB_ASSERT( (NR == 0 || NR == rows) && ( NC == 0 || NC == cols) && \n                    rows >= 0 && cols >= 0, \n                \"\\tvoid matrix::matrix(rows, cols)\"\n                << \"\\n\\tYou have supplied conflicting matrix dimensions\"\n                << \"\\n\\trows: \" << rows\n                << \"\\n\\tcols: \" << cols\n                << \"\\n\\tNR:   \" << NR \n                << \"\\n\\tNC:   \" << NC \n                );\n            data.set_size(rows,cols);\n        }\n\n        template <typename EXP>\n        matrix (\n            const matrix_exp<EXP>& m\n        )\n        {\n            // You get an error on this line if the matrix m contains a type that isn't\n            // the same as the type contained in the target matrix.\n            COMPILE_TIME_ASSERT((is_same_type<typename EXP::type,type>::value == true) ||\n                                (is_matrix<typename EXP::type>::value == true));\n\n            // The matrix you are trying to assign m to is a statically sized matrix and \n            // m's dimensions don't match that of *this. \n            COMPILE_TIME_ASSERT(EXP::NR == NR || NR == 0 || EXP::NR == 0);\n            COMPILE_TIME_ASSERT(EXP::NC == NC || NC == 0 || EXP::NC == 0);\n            DLIB_ASSERT((NR == 0 || NR == m.nr()) && (NC == 0 || NC == m.nc()), \n                \"\\tmatrix& matrix::matrix(const matrix_exp& m)\"\n                << \"\\n\\tYou are trying to assign a dynamically sized matrix to a statically sized matrix with the wrong size\"\n                << \"\\n\\tNR:     \" << NR\n                << \"\\n\\tNC:     \" << NC\n                << \"\\n\\tm.nr(): \" << m.nr()\n                << \"\\n\\tm.nc(): \" << m.nc()\n                << \"\\n\\tthis:   \" << this\n                );\n\n            data.set_size(m.nr(),m.nc());\n\n            matrix_assign(*this, m);\n        }\n\n        matrix (\n            const matrix& m\n        ) : matrix_exp<matrix>(*this) \n        {\n            data.set_size(m.nr(),m.nc());\n            matrix_assign(*this, m);\n        }\n\n        template <typename U, size_t len>\n        explicit matrix (\n            U (&array)[len]\n        ) \n        {\n            COMPILE_TIME_ASSERT(NR*NC == len && len > 0);\n            size_t idx = 0;\n            for (long r = 0; r < NR; ++r)\n            {\n                for (long c = 0; c < NC; ++c)\n                {\n                    data(r,c) = static_cast<T>(array[idx]);\n                    ++idx;\n                }\n            }\n        }\n\n        T& operator() (\n            long r, \n            long c\n        ) \n        { \n            DLIB_ASSERT(r < nr() && c < nc() &&\n                   r >= 0 && c >= 0, \n                \"\\tT& matrix::operator(r,c)\"\n                << \"\\n\\tYou must give a valid row and column\"\n                << \"\\n\\tr:    \" << r \n                << \"\\n\\tc:    \" << c\n                << \"\\n\\tnr(): \" << nr()\n                << \"\\n\\tnc(): \" << nc() \n                << \"\\n\\tthis: \" << this\n                );\n            return data(r,c); \n        }\n\n        const T& operator() (\n            long r, \n            long c\n        ) const \n        { \n            DLIB_ASSERT(r < nr() && c < nc() &&\n                   r >= 0 && c >= 0, \n                \"\\tconst T& matrix::operator(r,c)\"\n                << \"\\n\\tYou must give a valid row and column\"\n                << \"\\n\\tr:    \" << r \n                << \"\\n\\tc:    \" << c\n                << \"\\n\\tnr(): \" << nr()\n                << \"\\n\\tnc(): \" << nc() \n                << \"\\n\\tthis: \" << this\n                );\n            return data(r,c);\n        }\n\n        T& operator() (\n            long i\n        ) \n        {\n            // You can only use this operator on column vectors.\n            COMPILE_TIME_ASSERT(NC == 1 || NC == 0 || NR == 1 || NR == 0);\n            DLIB_ASSERT(nc() == 1 || nr() == 1, \n                \"\\tconst type matrix::operator(i)\"\n                << \"\\n\\tYou can only use this operator on column or row vectors\"\n                << \"\\n\\ti:    \" << i\n                << \"\\n\\tnr(): \" << nr()\n                << \"\\n\\tnc(): \" << nc()\n                << \"\\n\\tthis: \" << this\n                );\n            DLIB_ASSERT( 0 <= i && i < size(), \n                \"\\tconst type matrix::operator(i)\"\n                << \"\\n\\tYou must give a valid row/column number\"\n                << \"\\n\\ti:      \" << i\n                << \"\\n\\tsize(): \" << size()\n                << \"\\n\\tthis:   \" << this\n                );\n            return data(i);\n        }\n\n        const T& operator() (\n            long i\n        ) const\n        {\n            // You can only use this operator on column vectors.\n            COMPILE_TIME_ASSERT(NC == 1 || NC == 0 || NR == 1 || NR == 0);\n            DLIB_ASSERT(nc() == 1 || nr() == 1, \n                \"\\tconst type matrix::operator(i)\"\n                << \"\\n\\tYou can only use this operator on column or row vectors\"\n                << \"\\n\\ti:    \" << i\n                << \"\\n\\tnr(): \" << nr()\n                << \"\\n\\tnc(): \" << nc()\n                << \"\\n\\tthis: \" << this\n                );\n            DLIB_ASSERT( 0 <= i && i < size(), \n                \"\\tconst type matrix::operator(i)\"\n                << \"\\n\\tYou must give a valid row/column number\"\n                << \"\\n\\ti:      \" << i\n                << \"\\n\\tsize(): \" << size()\n                << \"\\n\\tthis:   \" << this\n                );\n            return data(i);\n        }\n\n        inline operator const type (\n        ) const \n        {\n            COMPILE_TIME_ASSERT(NC == 1 || NC == 0);\n            COMPILE_TIME_ASSERT(NR == 1 || NR == 0);\n            DLIB_ASSERT( nr() == 1 && nc() == 1 , \n                \"\\tmatrix::operator const type\"\n                << \"\\n\\tYou can only attempt to implicit convert a matrix to a scalar if\"\n                << \"\\n\\tthe matrix is a 1x1 matrix\"\n                << \"\\n\\tnr(): \" << nr() \n                << \"\\n\\tnc(): \" << nc() \n                << \"\\n\\tthis: \" << this\n                );\n            return data(0);\n        }\n\n        void set_size (\n            long rows,\n            long cols\n        )\n        {\n            DLIB_ASSERT( (NR == 0 || NR == rows) && ( NC == 0 || NC == cols) &&\n                    rows >= 0 && cols >= 0, \n                \"\\tvoid matrix::set_size(rows, cols)\"\n                << \"\\n\\tYou have supplied conflicting matrix dimensions\"\n                << \"\\n\\trows: \" << rows\n                << \"\\n\\tcols: \" << cols\n                << \"\\n\\tNR:   \" << NR \n                << \"\\n\\tNC:   \" << NC \n                << \"\\n\\tthis: \" << this\n                );\n            if (nr() != rows || nc() != cols)\n                data.set_size(rows,cols);\n        }\n\n        void set_size (\n            long length\n        )\n        {\n            // This object you are trying to call set_size(length) on is not a column or \n            // row vector.\n            COMPILE_TIME_ASSERT(NR == 1 || NC == 1);\n            DLIB_ASSERT( length >= 0, \n                \"\\tvoid matrix::set_size(length)\"\n                << \"\\n\\tlength must be at least 0\"\n                << \"\\n\\tlength: \" << length \n                << \"\\n\\tNR:     \" << NR \n                << \"\\n\\tNC:     \" << NC \n                << \"\\n\\tthis:   \" << this\n                );\n\n            if (NR == 1)\n            {\n                DLIB_ASSERT(NC == 0 || NC == length,\n                    \"\\tvoid matrix::set_size(length)\"\n                    << \"\\n\\tSince this is a statically sized matrix length must equal NC\"\n                    << \"\\n\\tlength: \" << length \n                    << \"\\n\\tNR:     \" << NR \n                    << \"\\n\\tNC:     \" << NC \n                    << \"\\n\\tthis:   \" << this\n                    );\n\n                if (nc() != length)\n                    data.set_size(1,length);\n            }\n            else\n            {\n                DLIB_ASSERT(NR == 0 || NR == length,\n                    \"\\tvoid matrix::set_size(length)\"\n                    << \"\\n\\tSince this is a statically sized matrix length must equal NR\"\n                    << \"\\n\\tlength: \" << length \n                    << \"\\n\\tNR:     \" << NR \n                    << \"\\n\\tNC:     \" << NC \n                    << \"\\n\\tthis:   \" << this\n                    );\n\n                if (nr() != length)\n                    data.set_size(length,1);\n            }\n        }\n\n        long nr (\n        ) const { return data.nr(); }\n\n        long nc (\n        ) const { return data.nc(); }\n\n        long size (\n        ) const { return data.nr()*data.nc(); }\n\n        template <typename U, size_t len>\n        matrix& operator= (\n            U (&array)[len]\n        )\n        {\n            COMPILE_TIME_ASSERT(NR*NC == len && len > 0);\n            size_t idx = 0;\n            for (long r = 0; r < NR; ++r)\n            {\n                for (long c = 0; c < NC; ++c)\n                {\n                    data(r,c) = static_cast<T>(array[idx]);\n                    ++idx;\n                }\n            }\n            return *this;\n        }\n\n        template <typename EXP>\n        matrix& operator= (\n            const matrix_exp<EXP>& m\n        )\n        {\n            // You get an error on this line if the matrix you are trying to \n            // assign m to is a statically sized matrix and  m's dimensions don't \n            // match that of *this. \n            COMPILE_TIME_ASSERT(EXP::NR == NR || NR == 0 || EXP::NR == 0);\n            COMPILE_TIME_ASSERT(EXP::NC == NC || NC == 0 || EXP::NC == 0);\n            DLIB_ASSERT((NR == 0 || nr() == m.nr()) && \n                   (NC == 0 || nc() == m.nc()), \n                \"\\tmatrix& matrix::operator=(const matrix_exp& m)\"\n                << \"\\n\\tYou are trying to assign a dynamically sized matrix to a statically sized matrix with the wrong size\"\n                << \"\\n\\tnr():   \" << nr()\n                << \"\\n\\tnc():   \" << nc()\n                << \"\\n\\tm.nr(): \" << m.nr()\n                << \"\\n\\tm.nc(): \" << m.nc()\n                << \"\\n\\tthis:   \" << this\n                );\n\n            // You get an error on this line if the matrix m contains a type that isn't\n            // the same as the type contained in the target matrix.\n            COMPILE_TIME_ASSERT((is_same_type<typename EXP::type,type>::value == true) ||\n                                (is_matrix<typename EXP::type>::value == true));\n            if (m.destructively_aliases(*this) == false)\n            {\n                // This if statement is seemingly unnecessary since set_size() contains this\n                // exact same if statement.  However, structuring the code this way causes\n                // gcc to handle the way it inlines this function in a much more favorable way.\n                if (data.nr() == m.nr() && data.nc() == m.nc())\n                {\n                    matrix_assign(*this, m);\n                }\n                else\n                {\n                    set_size(m.nr(),m.nc());\n                    matrix_assign(*this, m);\n                }\n            }\n            else\n            {\n                // we have to use a temporary matrix object here because\n                // *this is aliased inside the matrix_exp m somewhere.\n                matrix temp;\n                temp.set_size(m.nr(),m.nc());\n                matrix_assign(temp, m);\n                temp.swap(*this);\n            }\n            return *this;\n        }\n\n        template <typename EXP>\n        matrix& operator += (\n            const matrix_exp<EXP>& m\n        )\n        {\n            // The matrix you are trying to assign m to is a statically sized matrix and \n            // m's dimensions don't match that of *this. \n            COMPILE_TIME_ASSERT(EXP::NR == NR || NR == 0 || EXP::NR == 0);\n            COMPILE_TIME_ASSERT(EXP::NC == NC || NC == 0 || EXP::NC == 0);\n            COMPILE_TIME_ASSERT((is_same_type<typename EXP::type,type>::value == true));\n            if (nr() == m.nr() && nc() == m.nc())\n            {\n                if (m.destructively_aliases(*this) == false)\n                {\n                    matrix_assign(*this, *this + m);\n                }\n                else\n                {\n                    // we have to use a temporary matrix object here because\n                    // this->data is aliased inside the matrix_exp m somewhere.\n                    matrix temp;\n                    temp.set_size(m.nr(),m.nc());\n                    matrix_assign(temp, *this + m);\n                    temp.swap(*this);\n                }\n            }\n            else\n            {\n                *this = m;\n            }\n            return *this;\n        }\n\n\n        template <typename EXP>\n        matrix& operator -= (\n            const matrix_exp<EXP>& m\n        )\n        {\n            // The matrix you are trying to assign m to is a statically sized matrix and \n            // m's dimensions don't match that of *this. \n            COMPILE_TIME_ASSERT(EXP::NR == NR || NR == 0 || EXP::NR == 0);\n            COMPILE_TIME_ASSERT(EXP::NC == NC || NC == 0 || EXP::NC == 0);\n            COMPILE_TIME_ASSERT((is_same_type<typename EXP::type,type>::value == true));\n            if (nr() == m.nr() && nc() == m.nc())\n            {\n                if (m.destructively_aliases(*this) == false)\n                {\n                    matrix_assign(*this, *this - m);\n                }\n                else\n                {\n                    // we have to use a temporary matrix object here because\n                    // this->data is aliased inside the matrix_exp m somewhere.\n                    matrix temp;\n                    temp.set_size(m.nr(),m.nc());\n                    matrix_assign(temp, *this - m);\n                    temp.swap(*this);\n                }\n            }\n            else\n            {\n                *this = -m;\n            }\n            return *this;\n        }\n\n        template <typename EXP>\n        matrix& operator *= (\n            const matrix_exp<EXP>& m\n        )\n        {\n            *this = *this * m;\n            return *this;\n        }\n\n        matrix& operator += (\n            const matrix& m\n        )\n        {\n            const long size = m.nr()*m.nc();\n            if (nr() == m.nr() && nc() == m.nc())\n            {\n                for (long i = 0; i < size; ++i)\n                    data(i) += m.data(i);\n            }\n            else\n            {\n                set_size(m.nr(), m.nc());\n                for (long i = 0; i < size; ++i)\n                    data(i) = m.data(i);\n            }\n            return *this;\n        }\n\n        matrix& operator -= (\n            const matrix& m\n        )\n        {\n            const long size = m.nr()*m.nc();\n            if (nr() == m.nr() && nc() == m.nc())\n            {\n                for (long i = 0; i < size; ++i)\n                    data(i) -= m.data(i);\n            }\n            else\n            {\n                set_size(m.nr(), m.nc());\n                for (long i = 0; i < size; ++i)\n                    data(i) = -m.data(i);\n            }\n            return *this;\n        }\n\n        matrix& operator += (\n            const T val\n        )\n        {\n            const long size = nr()*nc();\n            for (long i = 0; i < size; ++i)\n                data(i) += val;\n\n            return *this;\n        }\n\n        matrix& operator -= (\n            const T val\n        )\n        {\n            const long size = nr()*nc();\n            for (long i = 0; i < size; ++i)\n                data(i) -= val;\n\n            return *this;\n        }\n\n        matrix& operator *= (\n            const T a\n        )\n        {\n            *this = *this * a;\n            return *this;\n        }\n\n        matrix& operator /= (\n            const T a\n        )\n        {\n            *this = *this / a;\n            return *this;\n        }\n\n        matrix& operator= (\n            const matrix& m\n        )\n        {\n            if (this != &m)\n            {\n                set_size(m.nr(),m.nc());\n                const long size = m.nr()*m.nc();\n                for (long i = 0; i < size; ++i)\n                    data(i) = m.data(i);\n            }\n            return *this;\n        }\n\n        void swap (\n            matrix& item\n        )\n        {\n            data.swap(item.data);\n        }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& \n        ) const { return false; }\n\n        bool aliases (\n            const matrix_exp<matrix<T,num_rows,num_cols, mem_manager,layout> >& item\n        ) const { return (this == &item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& \n        ) const { return false; }\n\n\n        iterator begin() \n        {\n            if (size() != 0)\n                return &data(0,0);\n            else\n                return 0;\n        }\n\n        iterator end()\n        {\n            if (size() != 0)\n                return &data(0,0)+size();\n            else\n                return 0;\n        }\n\n        const_iterator begin()  const\n        {\n            if (size() != 0)\n                return &data(0,0);\n            else\n                return 0;\n        }\n\n        const_iterator end() const\n        {\n            if (size() != 0)\n                return &data(0,0)+size();\n            else\n                return 0;\n        }\n\n    private:\n        struct literal_assign_helper\n        {\n            /*\n                This struct is a helper struct returned by the operator<<() function below.  It is\n                used primarily to enable us to put DLIB_CASSERT statements on the usage of the\n                operator<< form of matrix assignment.\n            */\n\n            literal_assign_helper(const literal_assign_helper& item) : m(item.m), r(item.r), c(item.c), has_been_used(false) {}\n            explicit literal_assign_helper(matrix* m_): m(m_), r(0), c(0),has_been_used(false) {next();}\n            ~literal_assign_helper()\n            {\n\t\t\t\tassert(!has_been_used || r == m->nr());\n                //DLIB_CASSERT(!has_been_used || r == m->nr(),\n                //             \"You have used the matrix comma based assignment incorrectly by failing to\\n\"\n                //             \"supply a full set of values for every element of a matrix object.\\n\");\n            }\n\n            const literal_assign_helper& operator, (\n                const T& val\n            ) const\n            {\n                DLIB_CASSERT(r < m->nr() && c < m->nc(),\n                             \"You have used the matrix comma based assignment incorrectly by attempting to\\n\" <<\n                             \"supply more values than there are elements in the matrix object being assigned to.\\n\\n\" <<\n                             \"Did you forget to call set_size()?\" \n                             << \"\\n\\t r: \" << r \n                             << \"\\n\\t c: \" << c \n                             << \"\\n\\t m->nr(): \" << m->nr()\n                             << \"\\n\\t m->nc(): \" << m->nc());\n                (*m)(r,c) = val;\n                next();\n                has_been_used = true;\n                return *this;\n            }\n\n        private:\n\n            friend class matrix;\n\n            void next (\n            ) const\n            {\n                ++c;\n                if (c == m->nc())\n                {\n                    c = 0;\n                    ++r;\n                }\n            }\n\n            matrix* m;\n            mutable long r;\n            mutable long c;\n            mutable bool has_been_used;\n        };\n\n    public:\n\n        matrix& operator = (\n            const literal_assign_helper& val\n        ) \n        {  \n            *this = *val.m;\n            return *this;\n        }\n\n        const literal_assign_helper operator = (\n            const T& val\n        ) \n        {  \n            // assign the given value to every spot in this matrix\n            for (long r = 0; r < nr(); ++r)\n            {\n                for (long c = 0; c < nc(); ++c)\n                {\n                    data(r,c) = val;\n                }\n            }\n\n            // Now return the literal_assign_helper so that the user\n            // can use the overloaded comma notation to initialize \n            // the matrix if they want to.\n            return literal_assign_helper(this); \n        }\n\n    private:\n\n\n        typename layout::template layout<T,NR,NC,mem_manager> data;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename mm,\n        typename l\n        >\n    void swap(\n        matrix<T,NR,NC,mm,l>& a,\n        matrix<T,NR,NC,mm,l>& b\n    ) { a.swap(b); }\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename mm,\n        typename l\n        >\n    void serialize (\n        const matrix<T,NR,NC,mm,l>& item, \n        std::ostream& out\n    )\n    {\n        try\n        {\n            // The reason the serialization is a little funny is because we are trying to\n            // maintain backwards compatibility with an older serialization format used by\n            // dlib while also encoding things in a way that lets the array2d and matrix\n            // objects have compatible serialization formats.\n            serialize(-item.nr(),out);\n            serialize(-item.nc(),out);\n            for (long r = 0; r < item.nr(); ++r)\n            {\n                for (long c = 0; c < item.nc(); ++c)\n                {\n                    serialize(item(r,c),out);\n                }\n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing dlib::matrix\");\n        }\n    }\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename mm,\n        typename l\n        >\n    void deserialize (\n        matrix<T,NR,NC,mm,l>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            long nr, nc;\n            deserialize(nr,in); \n            deserialize(nc,in); \n\n            // this is the newer serialization format\n            if (nr < 0 || nc < 0)\n            {\n                nr *= -1;\n                nc *= -1;\n            }\n\n            if (NR != 0 && nr != NR)\n                throw serialization_error(\"Error while deserializing a dlib::matrix.  Invalid rows\");\n            if (NC != 0 && nc != NC)\n                throw serialization_error(\"Error while deserializing a dlib::matrix.  Invalid columns\");\n\n            item.set_size(nr,nc);\n            for (long r = 0; r < nr; ++r)\n            {\n                for (long c = 0; c < nc; ++c)\n                {\n                    deserialize(item(r,c),in);\n                }\n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing a dlib::matrix\");\n        }\n    }\n\n    template <\n        typename EXP\n        >\n    std::ostream& operator<< (\n        std::ostream& out,\n        const matrix_exp<EXP>& m\n    )\n    {\n        using namespace std;\n        const streamsize old = out.width();\n\n        // first figure out how wide we should make each field\n        string::size_type w = 0;\n        ostringstream sout;\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                sout << m(r,c); \n                w = std::max(sout.str().size(),w);\n                sout.str(\"\");\n            }\n        }\n\n        // now actually print it\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                out.width(static_cast<streamsize>(w));\n                out << m(r,c) << \" \";\n            }\n            out << \"\\n\";\n        }\n        out.width(old);\n        return out;\n    }\n\n    /*\n    template <\n        typename T, \n        long NR, \n        long NC,\n        typename MM,\n        typename L\n        >\n    std::istream& operator>> (\n        std::istream& in,\n        matrix<T,NR,NC,MM,L>& m\n    );\n\n    This function is defined inside the matrix_read_from_istream.h file.\n    */\n\n// ----------------------------------------------------------------------------------------\n\n    class print_matrix_as_csv_helper \n    {\n        /*!\n            This object is used to define an io manipulator for matrix expressions.\n            In particular, this code allows you to write statements like:\n                cout << csv << yourmatrix;\n            and have it print the matrix with commas separating each element.\n        !*/\n    public:\n        print_matrix_as_csv_helper (std::ostream& out_) : out(out_) {}\n\n        template <typename EXP>\n        std::ostream& operator<< (\n            const matrix_exp<EXP>& m\n        ) \n        {\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    if (c+1 == m.nc())\n                        out << m(r,c) << \"\\n\";\n                    else\n                        out << m(r,c) << \", \";\n                }\n            }\n            return out;\n        }\n\n    private:\n        std::ostream& out;\n    };\n\n    class print_matrix_as_csv {};\n    const print_matrix_as_csv csv = print_matrix_as_csv();\n    inline print_matrix_as_csv_helper operator<< (\n        std::ostream& out,\n        const print_matrix_as_csv& \n    )\n    {\n        return print_matrix_as_csv_helper(out);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    class const_temp_matrix;\n\n    template <\n        typename EXP\n        >\n    struct matrix_traits<const_temp_matrix<EXP> >\n    {\n        typedef typename EXP::type type;\n        typedef typename EXP::const_ret_type const_ret_type;\n        typedef typename EXP::mem_manager_type mem_manager_type;\n        typedef typename EXP::layout_type layout_type;\n        const static long NR = EXP::NR;\n        const static long NC = EXP::NC;\n        const static long cost = 1;\n    };\n\n    template <typename EXP>\n    class const_temp_matrix : public matrix_exp<const_temp_matrix<EXP> >, noncopyable \n    {\n    public:\n        typedef typename matrix_traits<const_temp_matrix>::type type;\n        typedef typename matrix_traits<const_temp_matrix>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<const_temp_matrix>::mem_manager_type mem_manager_type;\n        typedef typename matrix_traits<const_temp_matrix>::layout_type layout_type;\n        const static long NR = matrix_traits<const_temp_matrix>::NR;\n        const static long NC = matrix_traits<const_temp_matrix>::NC;\n        const static long cost = matrix_traits<const_temp_matrix>::cost;\n\n        const_temp_matrix (\n            const matrix_exp<EXP>& item\n        ) :\n            ref_(item.ref())\n        {}\n        const_temp_matrix (\n            const EXP& item\n        ) :\n            ref_(item)\n        {}\n\n        const_ret_type operator() (\n            long r, \n            long c\n        ) const { return ref_(r,c); }\n\n        const_ret_type operator() ( long i ) const \n        { return ref_(i); }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const { return ref_.aliases(item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const { return ref_.destructively_aliases(item); }\n\n        long nr (\n        ) const { return ref_.nr(); }\n\n        long nc (\n        ) const { return ref_.nc(); }\n\n    private:\n\n        typename conditional_matrix_temp<const EXP, (EXP::cost <= 1)>::type ref_;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef _MSC_VER\n// put that warning back to its default setting\n#pragma warning(default : 4355)\n#endif\n\n#endif // DLIB_MATRIx_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MATRIx_ABSTRACT_\n#ifdef DLIB_MATRIx_ABSTRACT_\n\n#include \"matrix_exp_abstract.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include \"matrix_data_layout_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*\n        Note that these operator prototypes are not correct C++ (the real versions, which \n        you can see in the implementation are really complex and so probably would \n        distract/confuse people if shown here).  Think of this as just a list of the \n        operators available to you and what they do.\n    */\n\n    const matrix_exp operator* (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - m1.nc() == m2.nr()\n            - m1.size() > 0 && m2.size() > 0\n              (you can't multiply any sort of empty matrices together)\n            - m1 and m2 both contain elements of the same type\n        ensures\n            - returns the result of doing the matrix multiplication m1*m2.  The resulting\n              matrix will have m1.nr() rows and m2.nc() columns.\n    !*/\n\n    const matrix_exp operator+ (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - m1.nr() == m2.nr()\n            - m1.nc() == m2.nc()\n            - m1 and m2 both contain elements of the same type\n        ensures\n            - returns a matrix R such that for all valid r and c:\n              R(r,c) == m1(r,c) + m2(r,c)\n              (i.e. returns the result of doing a pairwise addition of the matrices m1 and m2.)\n              The resulting matrix will have the same dimensions as the originals.\n    !*/\n\n    const matrix_exp operator- (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - m1.nr() == m2.nr()\n            - m1.nc() == m2.nc()\n            - m1 and m2 both contain elements of the same type\n        ensures\n            - returns a matrix R such that for all valid r and c:\n              R(r,c) == m1(r,c) - m2(r,c)\n              (i.e. returns the result of doing a pairwise subtraction of the matrices m1 and m2.)\n              The resulting matrix will have the same dimensions as the originals.\n    !*/\n\n    template <typename T>\n    const matrix_exp operator* (\n        const matrix_exp& m,\n        const T& value\n    );\n    /*!\n        ensures\n            - returns the result of multiplying all the elements of matrix m by the given \n              scalar value.  The resulting matrix will have the same dimensions as m.\n    !*/\n\n    template <typename T>\n    const matrix_exp operator* (\n        const T& value,\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns the result of multiplying all the elements of matrix m by the given \n              scalar value.  The resulting matrix will have the same dimensions as m.\n    !*/\n\n    const matrix_exp operator- (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns -1*m\n    !*/\n\n    template <typename T>\n    const matrix_exp operator/ (\n        const matrix_exp& m,\n        const T& value\n    );\n    /*!\n        ensures\n            - returns the result of dividing all the elements of matrix m by the given \n              scalar value.  The resulting matrix will have the same dimensions as m.\n    !*/\n\n    template <typename T>\n    const matrix_exp operator/ (\n        const T& value,\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns the result of dividing the given scalar value by all the elements \n              of matrix m.  The resulting matrix will have the same dimensions as m.\n    !*/\n\n    template <typename T>\n    const matrix_exp operator+ (\n        const matrix_exp& m,\n        const T& value\n    );\n    /*!\n        ensures\n            - returns the result of adding value to all the elements of matrix m.  \n              The resulting matrix will have the same dimensions as m.\n    !*/\n\n    template <typename T>\n    const matrix_exp operator+ (\n        const T& value,\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns the result of adding value to all the elements of matrix m.  \n              The resulting matrix will have the same dimensions as m.\n    !*/\n\n    template <typename T>\n    const matrix_exp operator- (\n        const matrix_exp& m,\n        const T& value\n    );\n    /*!\n        ensures\n            - returns the result of subtracting value from all the elements of matrix m.  \n              The resulting matrix will have the same dimensions as m.\n    !*/\n\n    template <typename T>\n    const matrix_exp operator- (\n        const T& value,\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - Returns a matrix M such that:\n                - M has the same dimensions as m\n                - M contains the same type of element as m\n                - for all valid r and c:\n                    - M(r,c) == value - m(r,c)\n    !*/\n\n    bool operator== (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        ensures\n            - if (m1.nr() == m2.nr() && m1.nc() == m2.nc() &&\n              for all valid r and c:  m1(r,c) == m2(r,c) ) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n    bool operator!= (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        ensures\n            - returns !(m1 == m2)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long num_rows = 0,\n        long num_cols = 0,\n        typename mem_manager = default_memory_manager,\n        typename layout = row_major_layout \n        >\n    class matrix : public matrix_exp<matrix<T,num_rows,num_cols,mem_manager,layout> > \n    {\n        /*!\n            REQUIREMENTS ON num_rows and num_cols\n                both must be bigger than or equal to 0\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            REQUIREMENTS ON layout\n                Must be either row_major_layout or column_major_layout\n\n            INITIAL VALUE\n                - if (num_rows > 0) then\n                    - nr() == num_rows\n                - else\n                    - nr() == 0\n\n                - if (num_cols > 0) then\n                    - nc() == num_cols\n                - else\n                    - nc() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a matrix of nr() rows and nc() columns.  This object\n                is also a matrix_exp.  Thus it can be used in all of the above\n                global operators.\n\n                The number of rows and columns of this object are determined by the template\n                arguments num_rows and num_cols.  If num_rows or num_cols are 0 then\n                the matrix starts out empty (i.e. nr() == 0 and nc() == 0) and you may change\n                its size via the set_size() member function. \n                \n                Setting num_rows or num_cols to something other than 0 causes that dimension\n                to have a fixed size.  Setting a fixed size at compile time is useful because \n                any errors related to operating on matrices with incompatible dimensions will \n                be detected at compile time.  It also allows the compiler to perform loop \n                unrolling which can result in substantially faster code.\n\n                Also note that the elements of this matrix are laid out in memory by the layout \n                object supplied as a template argument to this class.  The row_major_layout  \n                sets elements down contiguously in memory and in row major order.  Additionally, \n                all memory allocations are performed using the memory manager object supplied as \n                a template argument to this class.\n        !*/\n\n    public:\n        typedef T type;\n        typedef mem_manager mem_manager_type;\n        typedef layout layout_type;\n        const static long NR = num_rows;\n        const static long NC = num_cols;\n        const static long cost = 1;\n        typedef T*          iterator;       \n        typedef const T*    const_iterator; \n\n        matrix (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - #aliases(*this) == true\n                - #ref().aliases(*this) == true\n        !*/\n\n        explicit matrix (\n            long length \n        );\n        /*!\n            requires\n                - NR == 1 || NC == 1 (i.e. this must be a column or row vector)\n                - length >= 0 \n                - if (NR == 1 && NC > 0) then\n                    - length == NC\n                - if (NC == 1 && NR > 0) then\n                    - length == NR\n            ensures\n                - #*this is properly initialized\n                - #aliases(*this) == true\n                - #ref().aliases(*this) == true\n                - if (NR == 1) then\n                    - #nr() == 1\n                    - #nc() == length\n                - else\n                    - #nr() == length\n                    - #nc() == 1\n        !*/\n\n        matrix (\n            long rows,\n            long cols\n        );\n        /*!\n            requires\n                - rows == NR || NR == 0\n                - cols == NC || NC == 0\n                - rows >= 0 && cols >= 0\n            ensures\n                - #*this is properly initialized\n                - #aliases(*this) == true\n                - #ref().aliases(*this) == true\n                - #nr() == rows\n                - #nc() == cols\n        !*/\n\n        template <typename EXP>\n        matrix (\n            const matrix_exp<EXP>& m\n        );\n        /*!\n            requires\n                - matrix_exp<EXP>::type == T\n                  (i.e. m contains the same type as *this does)\n                - if (NR != 0) then NR == m.nr()\n                - if (NC != 0) then NC == m.nc()\n            ensures\n                - #*this == m\n                - #aliases(*this) == true\n                - #ref().aliases(*this) == true\n        !*/\n\n        template <typename U, size_t len>\n        explicit matrix (\n            U (&array)[len]\n        );\n        /*!\n            requires\n                - NR != 0 && NC != 0 (i.e. you can only use this constructor on statically sized matrices)\n                - len == nr()*nc()  (i.e. the array you give here must be the right size)\n            ensures\n                - for all valid r and c:\n                  #(*this)(r,c) == array[r*nc() + c]\n                  (i.e. initializes this matrix with the contents of the given array)\n                - #aliases(*this) == true\n                - #ref().aliases(*this) == true\n        !*/\n\n        T& operator() (\n            long r, \n            long c\n        ); \n        /*!\n            requires\n                - 0 <= r < nr()\n                - 0 <= c < nc()\n            ensures\n                - returns a reference to the value at the given row and column in \n                  this matrix.\n        !*/\n\n        const T& operator() (\n            long r, \n            long c\n        ) const;\n        /*!\n            requires\n                - 0 <= r < nr()\n                - 0 <= c < nc()\n            ensures\n                - returns a const reference to the value at the given row and column in \n                  this matrix.\n        !*/\n\n        T& operator() (\n            long i\n        ); \n        /*!\n            requires\n                - nc() == 1 || nr() == 1 (i.e. this must be a column or row vector)\n                - 0 <= i < size()\n            ensures\n                - if (nc() == 1) then\n                    - returns a reference to (*this)(i,0)\n                - else\n                    - returns a reference to (*this)(0,i)\n        !*/\n\n        const T& operator() (\n            long i\n        ) const;\n        /*!\n            requires\n                - nc() == 1 || nr() == 1 (i.e. this must be a column or row vector)\n                - 0 <= i < size()\n            ensures\n                - if (nc() == 1) then\n                    - returns a reference to (*this)(i,0)\n                - else\n                    - returns a reference to (*this)(0,i)\n        !*/\n\n        operator const type (\n        ) const;\n        /*!\n            requires\n                - nr() == 1\n                - nc() == 1\n            ensures\n                - returns (*this)(0,0)\n        !*/\n\n        long nr(\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in this matrix\n        !*/\n\n        long nc(\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns in this matrix\n        !*/\n\n        long size (\n        ) const;\n        /*!\n            ensures\n                - returns nr()*nc()\n        !*/\n\n        void set_size (\n            long rows,\n            long cols\n        );\n        /*!\n            requires\n                - rows == NR || NR == 0\n                - cols == NC || NC == 0\n                - rows >= 0 && cols >= 0\n            ensures\n                - #nr() == rows\n                - #nc() == cols\n        !*/\n\n        void set_size (\n            long length\n        );\n        /*!\n            requires\n                - NR == 1 || NC == 1 (i.e. this must be a column or row vector)\n                - length >= 0 \n                - if (NR == 1 && NC > 0) then\n                    - length == NC\n                - if (NC == 1 && NR > 0) then\n                    - length == NR\n            ensures\n                - if (NR == 1) then\n                    - #nr() == 1\n                    - #nc() == length\n                - else\n                    - #nr() == length\n                    - #nc() == 1\n        !*/\n\n        template <typename U, size_t len>\n        matrix& operator= (\n            U (&array)[len]\n        );\n        /*!\n            requires\n                - len == nr()*nc()  (i.e. the array you give here must be the right size)\n            ensures\n                - for all valid r and c:\n                  #(*this)(r,c) == array[r*nc() + c]\n                  (i.e. loads this matrix with the contents of the given array)\n                - returns *this\n        !*/\n\n        template <typename EXP>\n        matrix& operator= (\n            const matrix_exp<EXP>& m\n        );\n        /*!\n            requires\n                - matrix_exp<EXP>::type == T\n                  (i.e. m contains the same type as *this does)\n                - if (NR != 0) then NR == m.nr()\n                - if (NC != 0) then NC == m.nc()\n            ensures\n                - copies the given matrix expression m to *this\n                - returns *this\n        !*/\n\n        template <typename EXP>\n        matrix& operator += (\n            const matrix_exp<EXP>& m\n        );\n        /*!\n            requires\n                - matrix_exp<EXP>::type == T\n            ensures\n                - if (nr() == m.nr() && nc() == m.nc()) then\n                    - #(*this) == *this + m\n                - else\n                    - #(*this) == m\n                      (i.e. if the dimensions don't match then this function performs a \n                      normal assignment)\n                - returns *this\n        !*/\n\n        template <typename EXP>\n        matrix& operator -= (\n            const matrix_exp<EXP>& m\n        );\n        /*!\n            requires\n                - matrix_exp<EXP>::type == T\n            ensures\n                - if (nr() == m.nr() && nc() == m.nc()) then\n                    - #(*this) == *this - m\n                - else\n                    - #(*this) == -m\n                - returns *this\n        !*/\n\n        template <typename EXP>\n        matrix& operator *= (\n            const matrix_exp<EXP>& m\n        );\n        /*!\n            requires\n                - matrix_exp<EXP>::type == T\n                  (i.e. m must contain the same type of element as *this)\n                - nc() == m.nr()\n                - size() > 0 && m.size() > 0\n                  (you can't multiply any sort of empty matrices together)\n            ensures\n                - #(*this) == *this * m\n                - returns *this\n        !*/\n\n        matrix& operator *= (\n            const T& a\n        );\n        /*!\n            ensures\n                - #(*this) == *this * a\n                - returns *this\n        !*/\n\n        matrix& operator /= (\n            const T& a\n        );\n        /*!\n            ensures\n                - #(*this) == *this / a\n                - returns *this\n        !*/\n\n        matrix& operator += (\n            const T& a\n        );\n        /*!\n            ensures\n                - #(*this) == *this + a\n                - returns *this\n        !*/\n\n        matrix& operator -= (\n            const T& a\n        );\n        /*!\n            ensures\n                - #(*this) == *this - a\n                - returns *this\n        !*/\n\n        const literal_assign_helper operator = (\n            const T& val\n        );\n        /*!\n            This function is somewhat different than all the others defined in this file.\n            The purpose of this function is to enable you to easily initialize a matrix object.\n            For example:\n                matrix<double> m(2,3);\n                m = 1,2,3,\n                    4,5,6;\n\n            The above code creates a matrix m with 2 rows and 3 columns and sets it so that\n            it contains the matrix | 1 2 3 |\n                                   | 4 5 6 |\n\n            You can also use this function to assign to all elements of a matrix.  So\n            saying m = 3; would assign all elements of m equal to 3.\n\n            Note that to use this method of assignment it is required that you supply \n            exactly m.size() or 1 values so that the matrix is fully initialized.  Supplying \n            fewer or more than that is an error that will cause a dlib::fatal_error to be \n            thrown.\n\n            Note also that using an expression of the form m = scalar; when m.size() == 0\n            is legal but has no effect on m.\n        !*/\n\n        void swap (\n            matrix& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n        iterator begin(\n        );\n        /*!\n            ensures\n                - returns a random access iterator pointing to the first element in this\n                  matrix.\n                - The iterator will iterate over the elements of the matrix in row major\n                  order if layout is row_major_layout or in column major order if layout is\n                  column_major_layout.\n        !*/\n\n        iterator end(\n        );\n        /*!\n            ensures\n                - returns a random access iterator pointing to one past the end of the last\n                  element in this matrix.\n        !*/\n\n        const_iterator begin(\n        ) const;\n        /*!\n            ensures\n                - returns a random access iterator pointing to the first element in this\n                  matrix.  \n                - The iterator will iterate over the elements of the matrix in row major\n                  order if layout is row_major_layout or in column major order if layout is\n                  column_major_layout.\n        !*/\n\n        const_iterator end(\n        ) const;\n        /*!\n            ensures\n                - returns a random access iterator pointing to one past the end of the last\n                  element in this matrix.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename mm,\n        typename l\n        >\n    void swap(\n        matrix<T,NR,NC,mm,l>& a,\n        matrix<T,NR,NC,mm,l>& b\n    ) { a.swap(b); }\n    /*!\n        Provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename mm,\n        typename l\n        >\n    void serialize (\n        const matrix<T,NR,NC,mm,l>& item, \n        std::ostream& out\n    );   \n    /*!\n        Provides serialization support.  Note that the serialization formats used by the\n        dlib::matrix and dlib::array2d objects are compatible.  That means you can load the\n        serialized data from one into another and it will work properly.\n    !*/\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename mm,\n        typename l\n        >\n    void deserialize (\n        matrix<T,NR,NC,mm,l>& item, \n        std::istream& in\n    );   \n    /*!\n        Provides deserialization support \n    !*/\n\n    template <\n        typename EXP\n        >\n    std::ostream& operator<< (\n        std::ostream& out,\n        const matrix_exp<EXP>& m\n    );\n    /*!\n        ensures\n            - writes m to the given out stream in a form suitable for human consumption.\n            - returns out\n    !*/\n\n    template <\n        typename T, \n        long NR, \n        long NC,\n        typename MM,\n        typename L\n        >\n    std::istream& operator>> (\n        std::istream& in,\n        matrix<T,NR,NC,MM,L>& m\n    );\n    /*!\n        ensures\n            - Tries to read a matrix from the given input stream and store it into #m.\n            - The format expected is the text format output by the above operator<<().\n              That is, the format should be a grid of text such as:\n                2 3 4\n                5 2 6 \n            - The separation between numbers can be any number of whitespace characters or\n              commas.      \n            - The matrix data is assumed to end upon the first blank line or end-of-file,\n              whichever comes first.  This means you can create an input stream with\n              multiple matrices in it by separating them with empty lines.\n            - returns in. \n            - If there was a formatting error or something which prevents the input data\n              from being parsed into a matrix then #in.fail() == true.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    class const_temp_matrix : public matrix_exp<const_temp_matrix<EXP> >, noncopyable \n    {\n        /*!\n            REQUIREMENTS ON EXP\n                - must be an object that inherits publicly from matrix_exp.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a copy of a matrix expression.  The twist\n                is that it only actually makes a copy of its input matrix expression\n                if that matrix expression is costly to evaluate.  If it has\n                low cost then this object just stores a reference.  \n\n                This class is useful in cases where you write a function that\n                takes a matrix_exp object as input and you want to do some\n                intensive computation that looks at each element of that matrix_exp\n                many times.  If the input matrix_exp has a high cost then you want\n                to store it into a temporary matrix.  But if it has low cost then\n                it is faster if you just use a reference to it.  The const_temp_matrix\n                makes doing this easy.\n        !*/\n    public:\n\n        const_temp_matrix (\n            const matrix_exp<EXP>& item\n        );\n        /*!\n            ensures\n                - #*this == item\n                - if (EXP::cost <= 1) then\n                    - this const_temp_matrix stores a reference to the item matrix\n                - else\n                    - this const_temp_matrix creates a temporary matrix and copies \n                      item into it\n        !*/\n\n        const_temp_matrix (\n            const EXP& item\n        );\n        /*!\n            ensures\n                - #*this == item\n                - if (EXP::cost <= 1) then\n                    - this const_temp_matrix stores a reference to the item matrix\n                - else\n                    - this const_temp_matrix creates a temporary matrix and copies \n                      item into it\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_assign.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_ASSIGn_\n#define DLIB_MATRIx_ASSIGn_\n\n#include \"matrix.h\"\n#include \"matrix_utilities.h\"\n#include \"matrix_subexp.h\"\n#include \"../enable_if.h\"\n#include \"matrix_assign_fwd.h\"\n#include \"matrix_default_mul.h\"\n#include \"matrix_conj_trans.h\"\n#include \"matrix_mat.h\"\n\nnamespace dlib\n{\n    /*\n        This file contains some templates that are used inside the matrix_blas_bindings.h\n        file to bind various matrix expressions to optimized code for carrying them out.\n    */\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace blas_bindings \n    {\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        void zero_matrix (\n            T& m\n        )\n        {\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = 0;\n                }\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    // This template struct is used to tell us if a matrix expression contains a matrix multiply.\n        template <typename T>\n        struct has_matrix_multiply\n        {\n            const static bool value = false;\n        };\n\n        template <typename T, typename U> \n        struct has_matrix_multiply<matrix_multiply_exp<T,U> > \n        { const static bool value = true; };\n\n        template <typename T, typename U> \n        struct has_matrix_multiply<matrix_add_exp<T,U> >  \n        { const static bool value = has_matrix_multiply<T>::value || has_matrix_multiply<U>::value; };\n\n        template <typename T, typename U> \n        struct has_matrix_multiply<matrix_subtract_exp<T,U> >  \n        { const static bool value = has_matrix_multiply<T>::value || has_matrix_multiply<U>::value; };\n\n        template <typename T, bool Tb> \n        struct has_matrix_multiply<matrix_mul_scal_exp<T,Tb> >  \n        { const static bool value = true; };\n\n        template <typename T> \n        struct has_matrix_multiply<matrix_div_scal_exp<T> >  \n        { const static bool value = has_matrix_multiply<T>::value; };\n\n        template <typename T> \n        struct has_matrix_multiply<matrix_op<T> >  \n        { const static bool value = has_matrix_multiply<T>::value; };\n\n        template <typename T> \n        struct has_matrix_multiply<op_trans<T> >  \n        { const static bool value = has_matrix_multiply<T>::value; };\n\n        template <typename T> \n        struct has_matrix_multiply<op_conj_trans<T> >  \n        { const static bool value = has_matrix_multiply<T>::value; };\n\n        template <typename T> \n        struct has_matrix_multiply<op_conj<T> >  \n        { const static bool value = has_matrix_multiply<T>::value; };\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        const int unknown_matrix = 0;\n        const int general_matrix = 1;\n        const int row_matrix = 2;\n        const int column_matrix = 3;\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        struct matrix_type_id\n        {\n            const static int value = unknown_matrix;\n        };\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        struct matrix_type_id<matrix<T,NR,NC,MM,L> >\n        {\n            const static int value = general_matrix;\n        };\n\n        template <typename T, long NR, typename MM, typename L>\n        struct matrix_type_id<matrix<T,NR,1,MM,L> >\n        {\n            const static int value = column_matrix;\n        };\n\n        template <typename T, typename MM, typename L>\n        struct matrix_type_id<matrix<T,1,1,MM,L> >\n        {\n            const static int value = column_matrix;\n        };\n\n        template <typename T, long NC, typename MM, typename L>\n        struct matrix_type_id<matrix<T,1,NC,MM,L> >\n        {\n            const static int value = row_matrix;\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        struct matrix_type_id<matrix_op<op_colm<matrix<T,NR,NC,MM,L> > > >\n        {\n            const static int value = column_matrix;\n        };\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        struct matrix_type_id<matrix_op<op_rowm<matrix<T,NR,NC,MM,L> > > >\n        {\n            const static int value = row_matrix;\n        };\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        struct matrix_type_id<matrix_op<op_colm2<matrix<T,NR,NC,MM,L> > > >\n        {\n            const static int value = column_matrix;\n        };\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        struct matrix_type_id<matrix_op<op_rowm2<matrix<T,NR,NC,MM,L> > > >\n        {\n            const static int value = row_matrix;\n        };\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        struct matrix_type_id<matrix_op<op_subm<matrix<T,NR,NC,MM,L> > > >\n        {\n            const static int value = general_matrix;\n        };\n\n        template < typename T, typename MM >\n        struct matrix_type_id<matrix_op<op_array2d_to_mat<array2d<T,MM> > > >\n        { const static int value = general_matrix; };\n\n        template < typename T, typename MM >\n        struct matrix_type_id<matrix_op<op_array_to_mat<array<T,MM> > > >\n        { const static int value = column_matrix; };\n\n        template < typename value_type, typename alloc >\n        struct matrix_type_id<matrix_op<op_std_vect_to_mat<std::vector<value_type,alloc> > > >\n        { const static int value = column_matrix; };\n\n        template < typename value_type, typename alloc >\n        struct matrix_type_id<matrix_op<op_std_vect_to_mat<std_vector_c<value_type,alloc> > > >\n        { const static int value = column_matrix; };\n\n        template < typename T >\n        struct matrix_type_id<matrix_op<op_pointer_to_col_vect<T> > >\n        { const static int value = column_matrix; };\n        template < typename T >\n        struct matrix_type_id<matrix_op<op_pointer_to_mat<T> > >\n        { const static int value = general_matrix; };\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T, typename U>\n        struct same_matrix\n        {\n            const static int T_id = matrix_type_id<T>::value;\n            const static int U_id = matrix_type_id<U>::value;\n            // The check for unknown_matrix is here so that we can be sure that matrix types\n            // other than the ones specifically enumerated above never get pushed into\n            // any of the BLAS bindings.  So saying they are never the same as anything\n            // else prevents them from matching any of the BLAS bindings.\n            const static bool value = (T_id == U_id) && (T_id != unknown_matrix);\n        };\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n    // This template struct is used to tell us if two matrix expressions both contain the same\n    // sequence of operators, expressions.    It also only has a value of true if the T expression\n    // contains only matrices with the given layout. \n        template <typename T, typename U, typename layout>\n        struct same_exp\n        {\n            const static bool value = (is_same_type<typename T::exp_type, typename U::exp_type>::value ||\n                                       same_matrix<typename T::exp_type, typename U::exp_type>::value) &&\n                                is_same_type<typename T::layout_type,layout>::value;\n\n        };\n\n        // Used only below.  They help strip off the const and & qualifiers that can show up \n        // in the LHS_ref_type and RHS_ref_type typedefs.\n        template <typename T> struct noref{ typedef T type;};\n        template <typename T> struct noref<T&>{ typedef T type;}; \n        template <typename T> struct noref<const T&>{ typedef T type;}; \n        template <typename T> struct noref<const T>{ typedef T type;}; \n\n        template <typename Tlhs, typename Ulhs, typename Trhs, typename Urhs, typename layout> \n        struct same_exp<matrix_multiply_exp<Tlhs,Trhs>, matrix_multiply_exp<Ulhs,Urhs>,layout > \n        { \n            // The reason this case is more complex than the others is because the matrix_multiply_exp \n            // will use a temporary matrix instead of Tlhs or Trhs in the event that one of these \n            // types corresponds to an expensive expression.  So we have to use the type that really\n            // gets used.  The following typedefs are here to pick out that true type.\n            typedef typename matrix_multiply_exp<Tlhs,Trhs>::LHS_ref_type T_LHS_ref_type;\n            typedef typename matrix_multiply_exp<Tlhs,Trhs>::RHS_ref_type T_RHS_ref_type;\n            typedef typename noref<T_LHS_ref_type>::type T_lhs_type;\n            typedef typename noref<T_RHS_ref_type>::type T_rhs_type;\n\n            typedef typename matrix_multiply_exp<Ulhs,Urhs>::LHS_ref_type U_LHS_ref_type;\n            typedef typename matrix_multiply_exp<Ulhs,Urhs>::RHS_ref_type U_RHS_ref_type;\n            typedef typename noref<U_LHS_ref_type>::type U_lhs_type;\n            typedef typename noref<U_RHS_ref_type>::type U_rhs_type;\n\n            const static bool value = same_exp<T_lhs_type,U_lhs_type,layout>::value && \n                                      same_exp<T_rhs_type,U_rhs_type,layout>::value; \n        };\n\n        template <typename Tlhs, typename Ulhs, typename Trhs, typename Urhs, typename layout> \n        struct same_exp<matrix_add_exp<Tlhs,Trhs>, matrix_add_exp<Ulhs,Urhs>, layout > \n        { const static bool value = same_exp<Tlhs,Ulhs,layout>::value && same_exp<Trhs,Urhs,layout>::value; };\n\n        template <typename Tlhs, typename Ulhs, typename Trhs, typename Urhs, typename layout> \n        struct same_exp<matrix_subtract_exp<Tlhs,Trhs>, matrix_subtract_exp<Ulhs,Urhs>, layout > \n        { const static bool value = same_exp<Tlhs,Ulhs,layout>::value && same_exp<Trhs,Urhs,layout>::value; };\n\n        template <typename T, typename U, bool Tb, bool Ub, typename layout> \n        struct same_exp<matrix_mul_scal_exp<T,Tb>, matrix_mul_scal_exp<U,Ub>, layout > \n        { const static bool value = same_exp<T,U,layout>::value; };\n\n        template <typename T, typename U, typename layout> \n        struct same_exp<matrix_div_scal_exp<T>, matrix_div_scal_exp<U>, layout > \n        { const static bool value = same_exp<T,U,layout>::value; };\n\n        template <typename T, typename U, typename layout> \n        struct same_exp<matrix_op<op_trans<T> >, matrix_op<op_trans<U> >, layout > \n        { const static bool value = same_exp<T,U,layout>::value; };\n\n        template <typename T, typename U, typename layout> \n        struct same_exp<matrix_op<op_conj<T> >, matrix_op<op_conj<U> >, layout > \n        { const static bool value = same_exp<T,U,layout>::value; };\n\n        template <typename T, typename U, typename layout> \n        struct same_exp<matrix_op<op_conj_trans<T> >, matrix_op<op_conj_trans<U> >, layout > \n        { const static bool value = same_exp<T,U,layout>::value; };\n\n    // ------------------------------------------------------------------------------------\n\n        struct yes_type\n        {\n            char ch;\n        };\n        struct no_type\n        {\n            yes_type a, b;\n        };\n\n        // This is a helper that is used below to apply the same_exp template to matrix expressions.\n        template <typename T, typename layout, typename U>\n        typename enable_if<same_exp<T,U,layout>,yes_type>::type test(U);\n        template <typename T, typename layout, typename U>\n        typename disable_if<same_exp<T,U,layout>,no_type>::type test(U);\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename dest_exp,\n            typename src_exp,\n            typename enabled = void\n            >\n        struct matrix_assign_blas_helper\n        {\n            // We are in the default version of the blas helper so this\n            // means there wasn't any more specific overload.  So just\n            // let the default matrix assignment happen.\n            template <typename EXP>\n            static void assign (\n                dest_exp& dest,\n                const EXP& src,\n                typename src_exp::type alpha,\n                bool add_to,\n                bool transpose\n            )\n            {\n                if (transpose == false)\n                    matrix_assign_default(dest,src,alpha,add_to);\n                else\n                    matrix_assign_default(dest,trans(src),alpha,add_to);\n            }\n\n            // If we know this is a matrix multiply then apply the\n            // default dlib matrix multiply to speed things up a bit more\n            // than the above default function would.\n            template <typename EXP1, typename EXP2>\n            static void assign (\n                dest_exp& dest,\n                const matrix_multiply_exp<EXP1,EXP2>& src,\n                typename src_exp::type alpha,\n                bool add_to,\n                bool transpose\n            )\n            {\n                // At some point I need to improve the default (i.e. non BLAS) matrix \n                // multiplication algorithm...\n\n                if (alpha == static_cast<typename src_exp::type>(1))\n                {\n                    if (add_to == false)\n                    {\n                        zero_matrix(dest);\n                    }\n\n                    if (transpose == false)\n                        default_matrix_multiply(dest, src.lhs, src.rhs);\n                    else\n                        default_matrix_multiply(dest, trans(src.rhs), trans(src.lhs));\n                }\n                else\n                {\n                    if (add_to)\n                    {\n                        typename dest_exp::matrix_type temp(dest.nr(),dest.nc());\n                        zero_matrix(temp);\n\n                        if (transpose == false)\n                            default_matrix_multiply(temp, src.lhs, src.rhs);\n                        else\n                            default_matrix_multiply(temp, trans(src.rhs), trans(src.lhs));\n\n                        matrix_assign_default(dest,temp, alpha,true);\n                    }\n                    else\n                    {\n                        zero_matrix(dest);\n                        \n                        if (transpose == false)\n                            default_matrix_multiply(dest, src.lhs, src.rhs);\n                        else\n                            default_matrix_multiply(dest, trans(src.rhs), trans(src.lhs));\n\n                        matrix_assign_default(dest,dest, alpha, false);\n                    }\n                }\n            }\n        };\n\n        // This is a macro to help us add overloads for the matrix_assign_blas_helper template.  \n        // Using this macro it is easy to add overloads for arbitrary matrix expressions.\n#define DLIB_ADD_BLAS_BINDING(src_expression)                                               \\\n    template <typename T, typename L> struct BOOST_JOIN(blas,__LINE__)                      \\\n    { const static bool value = sizeof(yes_type) == sizeof(test<T,L>(src_expression)); };   \\\n                                                                                            \\\n    template < typename dest_exp, typename src_exp >                                       \\\n    struct matrix_assign_blas_helper<dest_exp, src_exp,                                    \\\n    typename enable_if<BOOST_JOIN(blas,__LINE__)<src_exp,typename dest_exp::layout_type> >::type > {   \\\n        static void assign (                                                                \\\n            dest_exp& dest,                                                                \\\n            const src_exp& src,                                                             \\\n            typename src_exp::type alpha,                                                   \\\n            bool add_to,                                                                    \\\n            bool DLIB_NO_WARN_UNUSED transpose                      \\\n        ) {                                                                                 \\\n            DLIB_NO_WARN_UNUSED typedef typename dest_exp::type T;                                             \n\n#define DLIB_END_BLAS_BINDING }};\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n    // ------------------- Forward Declarations -------------------\n\n        template <\n            typename dest_exp,\n            typename src_exp \n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const src_exp& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        );\n        /*!\n            requires\n                - src.aliases(dest) == false\n                - dest.nr() == src.nr()\n                - dest.nc() == src.nc()\n        !*/\n\n        template <\n            typename dest_exp,\n            typename src_exp, typename src_exp2 \n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const matrix_add_exp<src_exp, src_exp2>& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        );\n        /*!\n            requires\n                - src.aliases(dest) == false\n                - dest.nr() == src.nr()\n                - dest.nc() == src.nc()\n        !*/\n\n        template <\n            typename dest_exp,\n            typename src_exp, bool Sb \n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const matrix_mul_scal_exp<src_exp,Sb>& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        );\n        /*!\n            requires\n                - src.aliases(dest) == false\n                - dest.nr() == src.nr()\n                - dest.nc() == src.nc()\n        !*/\n\n        template <\n            typename dest_exp,\n            typename src_exp\n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const matrix_op<op_trans<src_exp> >& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        );\n        /*!\n            requires\n                - src.aliases(dest) == false\n                - dest.nr() == src.nr()\n                - dest.nc() == src.nc()\n        !*/\n\n        template <\n            typename dest_exp,\n            typename src_exp, typename src_exp2 \n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const matrix_subtract_exp<src_exp, src_exp2>& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        );\n        /*!\n            requires\n                - src.aliases(dest) == false\n                - dest.nr() == src.nr()\n                - dest.nc() == src.nc()\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            matrix<T,NR,NC,MM,L>& dest,\n            const src_exp& src\n        );\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            matrix<T,NR,NC,MM,L>& dest,\n            const matrix_add_exp<matrix<T,NR,NC,MM,L> ,src_exp>& src\n        );\n        /*!\n            This function catches the expressions of the form:  \n                M = M + exp; \n            and converts them into the appropriate matrix_assign_blas() call.\n            This is an important case to catch because it is the expression used\n            to represent the += matrix operator.\n        !*/\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            matrix<T,NR,NC,MM,L>& dest,\n            const matrix_add_exp<src_exp, matrix<T,NR,NC,MM,L> >& src\n        );\n        /*!\n            This function catches the expressions of the form:  \n                M = exp + M; \n            and converts them into the appropriate matrix_assign_blas() call.\n            This is an important case to catch because it is the expression used\n            to represent the += matrix operator.\n        !*/\n            \n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            matrix<T,NR,NC,MM,L>& dest,\n            const matrix_subtract_exp<matrix<T,NR,NC,MM,L> ,src_exp>& src\n        );\n        /*!\n            This function catches the expressions of the form:  \n                M = M - exp; \n            and converts them into the appropriate matrix_assign_blas() call.\n            This is an important case to catch because it is the expression used\n            to represent the -= matrix operator.\n        !*/\n\n\n        //   End of forward declarations for overloaded matrix_assign_blas functions\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename dest_exp,\n            typename src_exp \n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const src_exp& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        )\n        {\n            matrix_assign_blas_helper<dest_exp,src_exp>::assign(dest,src,alpha,add_to, transpose);\n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename dest_exp,\n            typename src_exp, typename src_exp2 \n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const matrix_add_exp<src_exp, src_exp2>& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        )\n        {\n            if (has_matrix_multiply<src_exp>::value || has_matrix_multiply<src_exp2>::value)\n            {\n                matrix_assign_blas_proxy(dest, src.lhs, alpha, add_to, transpose);\n                matrix_assign_blas_proxy(dest, src.rhs, alpha, true, transpose);\n            }\n            else\n            {\n                if (transpose == false)\n                    matrix_assign_default(dest, src, alpha, add_to);\n                else\n                    matrix_assign_default(dest, trans(src), alpha, add_to);\n            }\n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename dest_exp,\n            typename src_exp, bool Sb \n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const matrix_mul_scal_exp<src_exp,Sb>& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        )\n        {\n            matrix_assign_blas_proxy(dest, src.m, alpha*src.s, add_to, transpose);\n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename dest_exp,\n            typename src_exp\n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const matrix_op<op_trans<src_exp> >& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        )\n        {\n            matrix_assign_blas_proxy(dest, src.op.m, alpha, add_to, !transpose);\n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename dest_exp,\n            typename src_exp, typename src_exp2 \n            >\n        void matrix_assign_blas_proxy (\n            dest_exp& dest,\n            const matrix_subtract_exp<src_exp, src_exp2>& src,\n            typename src_exp::type alpha,\n            bool add_to,\n            bool transpose\n        )\n        {\n            \n            if (has_matrix_multiply<src_exp>::value || has_matrix_multiply<src_exp2>::value)\n            {\n                matrix_assign_blas_proxy(dest, src.lhs, alpha, add_to, transpose);\n                matrix_assign_blas_proxy(dest, src.rhs, -alpha, true, transpose);\n            }\n            else\n            {\n                if (transpose == false)\n                    matrix_assign_default(dest, src, alpha, add_to);\n                else\n                    matrix_assign_default(dest, trans(src), alpha, add_to);\n            }\n        }\n            \n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n    // Once we get into this function it means that we are dealing with a matrix of float,\n    // double, complex<float>, or complex<double> and the src_exp contains at least one\n    // matrix multiply.\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            long NR2, long NC2, bool Sb\n            >\n        void matrix_assign_blas (\n            matrix<T,NR,NC,MM,L>& dest,\n            const matrix_mul_scal_exp<matrix<T,NR2,NC2,MM,L>,Sb>& src\n        )\n        {\n            // It's ok that we don't check for aliasing in this case because there isn't\n            // any complex unrolling of successive + or - operators in this expression.\n            matrix_assign_blas_proxy(dest,src.m,src.s,false, false);\n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            matrix<T,NR,NC,MM,L>& dest,\n            const src_exp& src\n        )\n        {\n            if (src.aliases(dest))\n            {\n                matrix<T,NR,NC,MM,L> temp(dest.nr(),dest.nc());\n                matrix_assign_blas_proxy(temp,src,1,false, false);\n                temp.swap(dest);\n            }\n            else\n            {\n                matrix_assign_blas_proxy(dest,src,1,false, false);\n            }\n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            assignable_sub_matrix<T,NR,NC,MM,L>& dest,\n            const src_exp& src\n        )\n        {\n            if (src.aliases(dest.m))\n            {\n                matrix<T,NR,NC,MM,L> temp(dest.nr(),dest.nc());\n                matrix_assign_blas_proxy(temp,src,1,false, false);\n                matrix_assign_default(dest,temp);\n            }\n            else\n            {\n                matrix_assign_blas_proxy(dest,src,1,false, false);\n            }\n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            assignable_row_matrix<T,NR,NC,MM,L>& dest,\n            const src_exp& src\n        )\n        {\n            if (src.aliases(dest.m))\n            {\n                matrix<T,NR,NC,MM,L> temp(dest.nr(),dest.nc());\n                matrix_assign_blas_proxy(temp,src,1,false, false);\n                matrix_assign_default(dest,temp);\n            }\n            else\n            {\n                matrix_assign_blas_proxy(dest,src,1,false, false);\n            }\n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            assignable_col_matrix<T,NR,NC,MM,L>& dest,\n            const src_exp& src\n        )\n        {\n            if (src.aliases(dest.m))\n            {\n                matrix<T,NR,NC,MM,L> temp(dest.nr(),dest.nc());\n                matrix_assign_blas_proxy(temp,src,1,false, false);\n                matrix_assign_default(dest,temp);\n            }\n            else\n            {\n                matrix_assign_blas_proxy(dest,src,1,false, false);\n            }\n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            matrix<T,NR,NC,MM,L>& dest,\n            const matrix_add_exp<matrix<T,NR,NC,MM,L> ,src_exp>& src\n        )\n        {\n            if (src.rhs.aliases(dest) == false)\n            {\n                if (&src.lhs != &dest)\n                {\n                    dest = src.lhs;\n                }\n\n                matrix_assign_blas_proxy(dest, src.rhs, 1, true, false);\n            }\n            else\n            {\n                matrix<T,NR,NC,MM,L> temp(src.lhs);\n                matrix_assign_blas_proxy(temp, src.rhs, 1, true, false);\n                temp.swap(dest);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            matrix<T,NR,NC,MM,L>& dest,\n            const matrix_add_exp<src_exp, matrix<T,NR,NC,MM,L> >& src\n        )\n        {\n            // Just switch around the left and right hand sides of the incoming \n            // add expression and pass it back into matrix_assign_blas() so that\n            // the above function will be called.\n            typedef matrix_add_exp<matrix<T,NR,NC,MM,L> ,src_exp> swapped_add_exp;\n            matrix_assign_blas(dest, swapped_add_exp(src.rhs, src.lhs)); \n        }\n            \n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T, long NR, long NC, typename MM, typename L,\n            typename src_exp \n            >\n        void matrix_assign_blas (\n            matrix<T,NR,NC,MM,L>& dest,\n            const matrix_subtract_exp<matrix<T,NR,NC,MM,L> ,src_exp>& src\n        )\n        {\n            if (src.rhs.aliases(dest) == false)\n            {\n                if (&src.lhs != &dest)\n                {\n                    dest = src.lhs;\n                }\n\n                matrix_assign_blas_proxy(dest, src.rhs, -1, true, false);\n            }\n            else\n            {\n                matrix<T,NR,NC,MM,L> temp(src.lhs);\n                matrix_assign_blas_proxy(temp, src.rhs, -1, true, false);\n                temp.swap(dest);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n    } // end of namespace blas_bindings \n\n    // ------------------------------------------------------------------------------------\n\n    template <\n        typename T, long NR, long NC, typename MM, typename L,\n        typename src_exp \n        >\n    inline typename enable_if_c<(is_same_type<T,float>::value ||\n                                is_same_type<T,double>::value ||\n                                is_same_type<T,std::complex<float> >::value ||\n                                is_same_type<T,std::complex<double> >::value) &&\n                                blas_bindings::has_matrix_multiply<src_exp>::value\n    >::type matrix_assign_big (\n        matrix<T,NR,NC,MM,L>& dest,\n        const src_exp& src\n    )\n    {\n        blas_bindings::matrix_assign_blas(dest,src);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, long NR, long NC, typename MM, typename L,\n        typename src_exp \n        >\n    inline typename enable_if_c<(is_same_type<T,float>::value ||\n                                is_same_type<T,double>::value ||\n                                is_same_type<T,std::complex<float> >::value ||\n                                is_same_type<T,std::complex<double> >::value) &&\n                                blas_bindings::has_matrix_multiply<src_exp>::value\n    >::type matrix_assign_big (\n        assignable_sub_matrix<T,NR,NC,MM,L>& dest,\n        const src_exp& src\n    )\n    {\n        blas_bindings::matrix_assign_blas(dest,src);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, long NR, long NC, typename MM, typename L,\n        typename src_exp \n        >\n    inline typename enable_if_c<(is_same_type<T,float>::value ||\n                                is_same_type<T,double>::value ||\n                                is_same_type<T,std::complex<float> >::value ||\n                                is_same_type<T,std::complex<double> >::value) &&\n                                blas_bindings::has_matrix_multiply<src_exp>::value\n    >::type matrix_assign_big (\n        assignable_row_matrix<T,NR,NC,MM,L>& dest,\n        const src_exp& src\n    )\n    {\n        blas_bindings::matrix_assign_blas(dest,src);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, long NR, long NC, typename MM, typename L,\n        typename src_exp \n        >\n    inline typename enable_if_c<(is_same_type<T,float>::value ||\n                                is_same_type<T,double>::value ||\n                                is_same_type<T,std::complex<float> >::value ||\n                                is_same_type<T,std::complex<double> >::value) &&\n                                blas_bindings::has_matrix_multiply<src_exp>::value\n    >::type matrix_assign_big (\n        assignable_col_matrix<T,NR,NC,MM,L>& dest,\n        const src_exp& src\n    )\n    {\n        blas_bindings::matrix_assign_blas(dest,src);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_ASSIGn_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_assign_fwd.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_ASSIGn_FWD_\n#define DLIB_MATRIx_ASSIGn_FWD_\n\n// GCC 4.8 gives false alarms about some variables being uninitialized.  Disable these\n// false warnings.\n#if ( defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 8)\n    #pragma GCC diagnostic ignored \"-Wmaybe-uninitialized\"\n#endif\n\n#include \"../enable_if.h\"\n#include \"matrix_data_layout.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n    \n    /*\n        The point of the matrix_assign() functions is to contain all the various \n        optimizations that help the matrix assign a matrix_exp to an actual matrix \n        object quickly.\n    */\n\n// ----------------------------------------------------------------------------------------\n\n    namespace ma\n    {\n        // This template here controls how big a compile time sized matrix needs\n        // to be for it to get passed into the optimized versions of the \n        // matrix_assign() function.  So small matrices are evaluated with a simple\n        // loop like the ones in this file and bigger matrices may get sent to BLAS\n        // routines or some other kind of optimized thing.\n        template < typename EXP, typename enable = void >\n        struct is_small_matrix { static const bool value = false; };\n        template < typename EXP >\n        struct is_small_matrix<EXP, typename enable_if_c<EXP::NR>=1 && EXP::NC>=1 &&\n        EXP::NR<=17 && EXP::NC<=17 && (EXP::cost <= 70)>::type> { static const bool value = true; };\n\n        // I wouldn't use this mul object to do the multiply but visual studio 7.1 wouldn't\n        // compile otherwise.\n        template <long a, long b>\n        struct mul { const static long value = a*b; };\n\n        template < typename EXP, typename enable = void >\n        struct is_very_small_matrix { static const bool value = false; };\n        template < typename EXP >\n        struct is_very_small_matrix<EXP, typename enable_if_c<EXP::NR>=1 && EXP::NC>=1 &&\n        (mul<EXP::NR,EXP::NC>::value <= 16) && (EXP::cost <= 70)>::type> { static const bool value = true; };\n\n\n        template < typename EXP, typename enable = void >\n        struct has_column_major_layout { static const bool value = false; };\n        template < typename EXP >\n        struct has_column_major_layout<EXP, typename enable_if<is_same_type<typename EXP::layout_type, column_major_layout> >::type > \n        { static const bool value = true; };\n\n\n        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    class matrix_exp;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP1, typename EXP2>\n    inline typename disable_if<ma::has_column_major_layout<EXP1> >::type  \n    matrix_assign_default (\n        EXP1& dest,\n        const EXP2& src\n    )\n    /*!\n        requires\n            - src.destructively_aliases(dest) == false\n            - dest.nr() == src.nr()\n            - dest.nc() == src.nc()\n        ensures\n            - #dest == src\n    !*/\n    {\n        for (long r = 0; r < src.nr(); ++r)\n        {\n            for (long c = 0; c < src.nc(); ++c)\n            {\n                dest(r,c) = src(r,c);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP1, typename EXP2>\n    inline typename enable_if<ma::has_column_major_layout<EXP1> >::type  \n    matrix_assign_default (\n        EXP1& dest,\n        const EXP2& src\n    )\n    /*!\n        requires\n            - src.destructively_aliases(dest) == false\n            - dest.nr() == src.nr()\n            - dest.nc() == src.nc()\n        ensures\n            - #dest == src\n    !*/\n    {\n        for (long c = 0; c < src.nc(); ++c)\n        {\n            for (long r = 0; r < src.nr(); ++r)\n            {\n                dest(r,c) = src(r,c);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP1, typename EXP2>\n    inline typename disable_if<ma::has_column_major_layout<EXP1> >::type  \n    matrix_assign_default (\n        EXP1& dest,\n        const EXP2& src,\n        typename EXP2::type alpha,\n        bool add_to\n    )\n    /*!\n        requires\n            - src.destructively_aliases(dest) == false\n            - dest.nr() == src.nr()\n            - dest.nc() == src.nc()\n        ensures\n            - if (add_to == false) then\n                - #dest == alpha*src\n            - else\n                - #dest == dest + alpha*src\n    !*/\n    {\n        if (add_to)\n        {\n            if (alpha == static_cast<typename EXP2::type>(1))\n            {\n                for (long r = 0; r < src.nr(); ++r)\n                {\n                    for (long c = 0; c < src.nc(); ++c)\n                    {\n                        dest(r,c) += src(r,c);\n                    }\n                }\n            }\n            else if (alpha == static_cast<typename EXP2::type>(-1))\n            {\n                for (long r = 0; r < src.nr(); ++r)\n                {\n                    for (long c = 0; c < src.nc(); ++c)\n                    {\n                        dest(r,c) -= src(r,c);\n                    }\n                }\n            }\n            else\n            {\n                for (long r = 0; r < src.nr(); ++r)\n                {\n                    for (long c = 0; c < src.nc(); ++c)\n                    {\n                        dest(r,c) += alpha*src(r,c);\n                    }\n                }\n            }\n        }\n        else\n        {\n            if (alpha == static_cast<typename EXP2::type>(1))\n            {\n                for (long r = 0; r < src.nr(); ++r)\n                {\n                    for (long c = 0; c < src.nc(); ++c)\n                    {\n                        dest(r,c) = src(r,c);\n                    }\n                }\n            }\n            else\n            {\n                for (long r = 0; r < src.nr(); ++r)\n                {\n                    for (long c = 0; c < src.nc(); ++c)\n                    {\n                        dest(r,c) = alpha*src(r,c);\n                    }\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP1, typename EXP2>\n    inline typename enable_if<ma::has_column_major_layout<EXP1> >::type  \n    matrix_assign_default (\n        EXP1& dest,\n        const EXP2& src,\n        typename EXP2::type alpha,\n        bool add_to\n    )\n    /*!\n        requires\n            - src.destructively_aliases(dest) == false\n            - dest.nr() == src.nr()\n            - dest.nc() == src.nc()\n        ensures\n            - if (add_to == false) then\n                - #dest == alpha*src\n            - else\n                - #dest == dest + alpha*src\n    !*/\n    {\n        if (add_to)\n        {\n            if (alpha == static_cast<typename EXP2::type>(1))\n            {\n                for (long c = 0; c < src.nc(); ++c)\n                {\n                    for (long r = 0; r < src.nr(); ++r)\n                    {\n                        dest(r,c) += src(r,c);\n                    }\n                }\n            }\n            else if (alpha == static_cast<typename EXP2::type>(-1))\n            {\n                for (long c = 0; c < src.nc(); ++c)\n                {\n                    for (long r = 0; r < src.nr(); ++r)\n                    {\n                        dest(r,c) -= src(r,c);\n                    }\n                }\n            }\n            else\n            {\n                for (long c = 0; c < src.nc(); ++c)\n                {\n                    for (long r = 0; r < src.nr(); ++r)\n                    {\n                        dest(r,c) += alpha*src(r,c);\n                    }\n                }\n            }\n        }\n        else\n        {\n            if (alpha == static_cast<typename EXP2::type>(1))\n            {\n                for (long c = 0; c < src.nc(); ++c)\n                {\n                    for (long r = 0; r < src.nr(); ++r)\n                    {\n                        dest(r,c) = src(r,c);\n                    }\n                }\n            }\n            else\n            {\n                for (long c = 0; c < src.nc(); ++c)\n                {\n                    for (long r = 0; r < src.nr(); ++r)\n                    {\n                        dest(r,c) = alpha*src(r,c);\n                    }\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_dest_type,\n        typename src_exp \n        >\n    void matrix_assign_big (\n        matrix_dest_type& dest,\n        const matrix_exp<src_exp>& src\n    )\n    {\n        matrix_assign_default(dest,src);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_dest_type,\n        typename src_exp \n        >\n    inline typename disable_if<ma::is_small_matrix<src_exp> >::type matrix_assign (\n        matrix_dest_type& dest,\n        const matrix_exp<src_exp>& src\n    )\n    /*!\n        requires\n            - src.destructively_aliases(dest) == false\n            - dest.nr() == src.nr()\n            - dest.nc() == src.nc()\n        ensures\n            - #dest == src\n    !*/\n    {\n        // Call src.ref() here so that the derived type of the matrix_exp shows \n        // up so we can overload matrix_assign_big() based on various matrix expression\n        // types.\n        matrix_assign_big(dest,src.ref());\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n// this code is here to perform an unrolled version of the matrix_assign() function\n    template < typename DEST, typename SRC, long NR, long NC,\n    long R = 0, long C = 0, bool base_case = (R==NR) >\n    struct matrix_unroll_helper\n    {\n        inline static void go ( DEST& dest, const SRC& src)\n        {\n            dest(R,C) = src(R,C);\n            matrix_unroll_helper<DEST,SRC,NR,NC, R + (C+1)/NC,  (C+1)%NC>::go(dest,src);\n        }\n    };\n\n    template < typename DEST, typename SRC, long NR, long NC, long R, long C >\n    struct matrix_unroll_helper<DEST,SRC,NR,NC,R,C,true>\n    { inline static void go ( DEST& , const SRC& ) {} };\n\n    template <typename DEST, typename SRC>\n    inline void matrix_assign_unrolled (\n        DEST& dest,\n        const SRC& src\n    )\n    /*!\n        requires\n            - src.destructively_aliases(dest) == false\n            - dest.nr() == src.nr()\n            - dest.nc() == src.nc()\n        ensures\n            - #dest == src\n    !*/\n    {\n        COMPILE_TIME_ASSERT(SRC::NR*SRC::NC != 0);\n        matrix_unroll_helper<DEST,SRC, SRC::NR, SRC::NC>::go(dest,src);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_dest_type,\n        typename src_exp \n        >\n    inline typename enable_if_c<ma::is_small_matrix<src_exp>::value && ma::is_very_small_matrix<src_exp>::value==false >::type matrix_assign (\n        matrix_dest_type& dest,\n        const matrix_exp<src_exp>& src\n    )\n    /*!\n        requires\n            - src.destructively_aliases(dest) == false\n            - dest.nr() == src.nr()\n            - dest.nc() == src.nc()\n        ensures\n            - #dest == src\n    !*/\n    {\n        matrix_assign_default(dest,src.ref());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_dest_type,\n        typename src_exp \n        >\n    inline typename enable_if_c<ma::is_small_matrix<src_exp>::value && ma::is_very_small_matrix<src_exp>::value==true >::type matrix_assign (\n        matrix_dest_type& dest,\n        const matrix_exp<src_exp>& src\n    )\n    /*!\n        requires\n            - src.destructively_aliases(dest) == false\n            - dest.nr() == src.nr()\n            - dest.nc() == src.nc()\n        ensures\n            - #dest == src\n    !*/\n    {\n        matrix_assign_unrolled(dest,src.ref());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_ASSIGn_FWD_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_blas_bindings.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_BLAS_BINDINGS_\n#define DLIB_MATRIx_BLAS_BINDINGS_\n\n#ifndef DLIB_USE_BLAS\n#error \"DLIB_USE_BLAS should be defined if you want to use the BLAS bindings\"\n#endif\n\n#include \"matrix_assign.h\"\n#include \"matrix_conj_trans.h\"\n#include \"cblas_constants.h\"\n\n//#include <iostream>\n//using namespace std;\n\nnamespace dlib\n{\n\n\n    namespace blas_bindings \n    {\n\n#ifdef DLIB_TEST_BLAS_BINDINGS\n        int& counter_gemm();\n        int& counter_gemv();\n        int& counter_ger();\n        int& counter_dot();\n        int& counter_axpy();\n        int& counter_scal();\n\n        #define DLIB_TEST_BLAS_BINDING_GEMM ++counter_gemm();\n        #define DLIB_TEST_BLAS_BINDING_GEMV ++counter_gemv();\n        #define DLIB_TEST_BLAS_BINDING_GER ++counter_ger();\n        #define DLIB_TEST_BLAS_BINDING_DOT ++counter_dot();\n        #define DLIB_TEST_BLAS_BINDING_AXPY ++counter_axpy();\n        #define DLIB_TEST_BLAS_BINDING_SCAL ++counter_scal();\n#else\n        #define DLIB_TEST_BLAS_BINDING_GEMM \n        #define DLIB_TEST_BLAS_BINDING_GEMV \n        #define DLIB_TEST_BLAS_BINDING_GER \n        #define DLIB_TEST_BLAS_BINDING_DOT \n        #define DLIB_TEST_BLAS_BINDING_AXPY\n        #define DLIB_TEST_BLAS_BINDING_SCAL\n#endif\n\n        extern \"C\"\n        {\n            // Here we declare the prototypes for the CBLAS calls used by the BLAS bindings below\n\n            void cblas_saxpy(const int N, const float alpha, const float *X,\n                            const int incX, float *Y, const int incY);\n            void cblas_daxpy(const int N, const double alpha, const double *X,\n                            const int incX, double *Y, const int incY);\n            void cblas_caxpy(const int N, const void *alpha, const void *X,\n                            const int incX, void *Y, const int incY);\n            void cblas_zaxpy(const int N, const void *alpha, const void *X,\n                            const int incX, void *Y, const int incY);\n\n            void cblas_sscal(const int N, const float alpha, float *X, const int incX);\n            void cblas_dscal(const int N, const double alpha, double *X, const int incX);\n            void cblas_cscal(const int N, const void *alpha, void *X, const int incX);\n            void cblas_zscal(const int N, const void *alpha, void *X, const int incX);\n\n            void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,\n                             const enum CBLAS_TRANSPOSE TransB, const int M, const int N,\n                             const int K, const float alpha, const float *A,\n                             const int lda, const float *B, const int ldb,\n                             const float beta, float *C, const int ldc);\n            void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,\n                             const enum CBLAS_TRANSPOSE TransB, const int M, const int N,\n                             const int K, const double alpha, const double *A,\n                             const int lda, const double *B, const int ldb,\n                             const double beta, double *C, const int ldc);\n            void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,\n                             const enum CBLAS_TRANSPOSE TransB, const int M, const int N,\n                             const int K, const void *alpha, const void *A,\n                             const int lda, const void *B, const int ldb,\n                             const void *beta, void *C, const int ldc);\n            void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,\n                             const enum CBLAS_TRANSPOSE TransB, const int M, const int N,\n                             const int K, const void *alpha, const void *A,\n                             const int lda, const void *B, const int ldb,\n                             const void *beta, void *C, const int ldc);\n            void cblas_sgemv(const enum CBLAS_ORDER order,\n                             const enum CBLAS_TRANSPOSE TransA, const int M, const int N,\n                             const float alpha, const float *A, const int lda,\n                             const float *X, const int incX, const float beta,\n                             float *Y, const int incY);\n            void cblas_dgemv(const enum CBLAS_ORDER order,\n                             const enum CBLAS_TRANSPOSE TransA, const int M, const int N,\n                             const double alpha, const double *A, const int lda,\n                             const double *X, const int incX, const double beta,\n                             double *Y, const int incY);\n            void cblas_cgemv(const enum CBLAS_ORDER order,\n                             const enum CBLAS_TRANSPOSE TransA, const int M, const int N,\n                             const void *alpha, const void *A, const int lda,\n                             const void *X, const int incX, const void *beta,\n                             void *Y, const int incY);\n            void cblas_zgemv(const enum CBLAS_ORDER order,\n                             const enum CBLAS_TRANSPOSE TransA, const int M, const int N,\n                             const void *alpha, const void *A, const int lda,\n                             const void *X, const int incX, const void *beta,\n                             void *Y, const int incY);\n            void cblas_sger(const enum CBLAS_ORDER order, const int M, const int N,\n                            const float alpha, const float *X, const int incX,\n                            const float *Y, const int incY, float *A, const int lda);\n            void cblas_dger(const enum CBLAS_ORDER order, const int M, const int N,\n                            const double alpha, const double *X, const int incX,\n                            const double *Y, const int incY, double *A, const int lda);\n            void cblas_cgerc(const enum CBLAS_ORDER order, const int M, const int N,\n                             const void *alpha, const void *X, const int incX,\n                             const void *Y, const int incY, void *A, const int lda);\n            void cblas_zgerc(const enum CBLAS_ORDER order, const int M, const int N,\n                             const void *alpha, const void *X, const int incX,\n                             const void *Y, const int incY, void *A, const int lda);\n            float  cblas_sdot(const int N, const float  *X, const int incX,\n                              const float  *Y, const int incY);\n            double cblas_ddot(const int N, const double *X, const int incX,\n                              const double *Y, const int incY);\n            void   cblas_cdotu_sub(const int N, const void *X, const int incX,\n                                   const void *Y, const int incY, void *dotu);\n            void   cblas_zdotu_sub(const int N, const void *X, const int incX,\n                                   const void *Y, const int incY, void *dotu);\n            void   cblas_cdotc_sub(const int N, const void *X, const int incX,\n                                   const void *Y, const int incY, void *dotc);\n            void   cblas_zdotc_sub(const int N, const void *X, const int incX,\n                                   const void *Y, const int incY, void *dotc);\n            void cblas_cgeru(const enum CBLAS_ORDER order, const int M, const int N,\n                             const void *alpha, const void *X, const int incX,\n                             const void *Y, const int incY, void *A, const int lda);\n            void cblas_zgeru(const enum CBLAS_ORDER order, const int M, const int N,\n                             const void *alpha, const void *X, const int incX,\n                             const void *Y, const int incY, void *A, const int lda);\n        }\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        inline void cblas_axpy(const int N, const float alpha, const float *X,\n                        const int incX, float *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_AXPY;\n            cblas_saxpy(N, alpha, X, incX, Y, incY);\n        }\n\n        inline void cblas_axpy(const int N, const double alpha, const double *X,\n                        const int incX, double *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_AXPY;\n            cblas_daxpy(N, alpha, X, incX, Y, incY);\n        }\n\n        inline void cblas_axpy(const int N, const std::complex<float>& alpha, const std::complex<float> *X,\n                        const int incX, std::complex<float> *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_AXPY;\n            cblas_caxpy(N, &alpha, X, incX, Y, incY);\n        }\n\n        inline void cblas_axpy(const int N, const std::complex<double>& alpha, const std::complex<double> *X,\n                        const int incX, std::complex<double> *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_AXPY;\n            cblas_zaxpy(N, &alpha, X, incX, Y, incY);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        inline void cblas_scal(const int N, const float alpha, float *X)\n        {\n            DLIB_TEST_BLAS_BINDING_SCAL;\n            cblas_sscal(N, alpha, X, 1);\n        }\n\n        inline void cblas_scal(const int N, const double alpha, double *X)\n        {\n            DLIB_TEST_BLAS_BINDING_SCAL;\n            cblas_dscal(N, alpha, X, 1);\n        }\n\n        inline void cblas_scal(const int N, const std::complex<float>& alpha, std::complex<float> *X)\n        {\n            DLIB_TEST_BLAS_BINDING_SCAL;\n            cblas_cscal(N, &alpha, X, 1);\n        }\n\n        inline void cblas_scal(const int N, const std::complex<double>& alpha, std::complex<double> *X)\n        {\n            DLIB_TEST_BLAS_BINDING_SCAL;\n            cblas_zscal(N, &alpha, X, 1);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        inline void cblas_gemm( const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,\n                                const enum CBLAS_TRANSPOSE TransB, const int M, const int N,\n                                const int K, const float alpha, const float *A,\n                                const int lda, const float *B, const int ldb,\n                                const float beta, float *C, const int ldc)\n        {\n            DLIB_TEST_BLAS_BINDING_GEMM;\n            cblas_sgemm( Order, TransA, TransB,  M,  N,\n                          K,  alpha, A, lda, B,  ldb, beta, C,  ldc);\n        }\n\n        inline void cblas_gemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,\n                         const enum CBLAS_TRANSPOSE TransB, const int M, const int N,\n                         const int K, const double alpha, const double *A,\n                         const int lda, const double *B, const int ldb,\n                         const double beta, double *C, const int ldc)\n        {\n            DLIB_TEST_BLAS_BINDING_GEMM;\n            cblas_dgemm( Order, TransA, TransB,  M,  N,\n                          K,  alpha, A, lda, B,  ldb, beta, C,  ldc);\n        }\n\n        inline void cblas_gemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,\n                         const enum CBLAS_TRANSPOSE TransB, const int M, const int N,\n                         const int K, const std::complex<float>& alpha, const std::complex<float> *A,\n                         const int lda, const std::complex<float> *B, const int ldb,\n                         const std::complex<float>& beta, std::complex<float> *C, const int ldc)\n        {\n            DLIB_TEST_BLAS_BINDING_GEMM;\n            cblas_cgemm( Order, TransA, TransB,  M,  N,\n                          K,  &alpha, A, lda, B,  ldb, &beta, C,  ldc);\n        }\n\n        inline void cblas_gemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,\n                         const enum CBLAS_TRANSPOSE TransB, const int M, const int N,\n                         const int K, const std::complex<double>& alpha, const std::complex<double> *A,\n                         const int lda, const std::complex<double> *B, const int ldb,\n                         const std::complex<double>& beta, std::complex<double> *C, const int ldc)\n        {\n            DLIB_TEST_BLAS_BINDING_GEMM;\n            cblas_zgemm( Order, TransA, TransB,  M,  N,\n                          K,  &alpha, A, lda, B,  ldb, &beta, C,  ldc);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        inline void cblas_gemv(const enum CBLAS_ORDER order,\n                        const enum CBLAS_TRANSPOSE TransA, const int M, const int N,\n                        const float alpha, const float *A, const int lda,\n                        const float *X, const int incX, const float beta,\n                        float *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_GEMV;\n            cblas_sgemv(order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        }\n\n        inline void cblas_gemv(const enum CBLAS_ORDER order,\n                        const enum CBLAS_TRANSPOSE TransA, const int M, const int N,\n                        const double alpha, const double *A, const int lda,\n                        const double *X, const int incX, const double beta,\n                        double *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_GEMV;\n            cblas_dgemv(order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        }\n\n        inline void cblas_gemv(const enum CBLAS_ORDER order,\n                        const enum CBLAS_TRANSPOSE TransA, const int M, const int N,\n                        const std::complex<float>& alpha, const std::complex<float> *A, const int lda,\n                        const std::complex<float> *X, const int incX, const std::complex<float>& beta,\n                        std::complex<float> *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_GEMV;\n            cblas_cgemv(order, TransA, M, N, &alpha, A, lda, X, incX, &beta, Y, incY);\n        }\n\n        inline void cblas_gemv(const enum CBLAS_ORDER order,\n                        const enum CBLAS_TRANSPOSE TransA, const int M, const int N,\n                        const std::complex<double>& alpha, const std::complex<double> *A, const int lda,\n                        const std::complex<double> *X, const int incX, const std::complex<double>& beta,\n                        std::complex<double> *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_GEMV;\n            cblas_zgemv(order, TransA, M, N, &alpha, A, lda, X, incX, &beta, Y, incY);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        inline void cblas_ger(const enum CBLAS_ORDER order, const int M, const int N,\n                        const std::complex<float>& alpha, const std::complex<float> *X, const int incX,\n                        const std::complex<float> *Y, const int incY, std::complex<float> *A, const int lda)\n        {\n            DLIB_TEST_BLAS_BINDING_GER;\n            cblas_cgeru (order,  M, N, &alpha, X, incX, Y, incY, A, lda);\n        }\n\n        inline void cblas_ger(const enum CBLAS_ORDER order, const int M, const int N,\n                        const std::complex<double>& alpha, const std::complex<double> *X, const int incX,\n                        const std::complex<double> *Y, const int incY, std::complex<double> *A, const int lda)\n        {\n            DLIB_TEST_BLAS_BINDING_GER;\n            cblas_zgeru (order,  M, N, &alpha, X, incX, Y, incY, A, lda);\n        }\n\n        inline void cblas_ger(const enum CBLAS_ORDER order, const int M, const int N,\n                        const float alpha, const float *X, const int incX,\n                        const float *Y, const int incY, float *A, const int lda)\n        {\n            DLIB_TEST_BLAS_BINDING_GER;\n            cblas_sger (order,  M, N, alpha, X, incX, Y, incY, A, lda);\n        }\n\n        inline void cblas_ger(const enum CBLAS_ORDER order, const int M, const int N,\n                        const double alpha, const double *X, const int incX,\n                        const double *Y, const int incY, double *A, const int lda)\n        {\n            DLIB_TEST_BLAS_BINDING_GER;\n            cblas_dger (order,  M, N, alpha, X, incX, Y, incY, A, lda);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        inline void cblas_gerc(const enum CBLAS_ORDER order, const int M, const int N,\n                        const std::complex<float>& alpha, const std::complex<float> *X, const int incX,\n                        const std::complex<float> *Y, const int incY, std::complex<float> *A, const int lda)\n        {\n            DLIB_TEST_BLAS_BINDING_GER;\n            cblas_cgerc (order,  M, N, &alpha, X, incX, Y, incY, A, lda);\n        }\n\n        inline void cblas_gerc(const enum CBLAS_ORDER order, const int M, const int N,\n                        const std::complex<double>& alpha, const std::complex<double> *X, const int incX,\n                        const std::complex<double> *Y, const int incY, std::complex<double> *A, const int lda)\n        {\n            DLIB_TEST_BLAS_BINDING_GER;\n            cblas_zgerc (order,  M, N, &alpha, X, incX, Y, incY, A, lda);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        inline float cblas_dot(const int N, const float  *X, const int incX,\n                        const float  *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_DOT;\n            return cblas_sdot(N, X, incX, Y, incY);\n        }\n\n        inline double cblas_dot(const int N, const double *X, const int incX,\n                        const double *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_DOT;\n            return cblas_ddot(N, X, incX, Y, incY);\n        }\n\n        inline std::complex<float> cblas_dot(const int N, const std::complex<float> *X, const int incX,\n                            const std::complex<float> *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_DOT;\n            std::complex<float> result;\n            cblas_cdotu_sub(N, X, incX, Y, incY, &result);\n            return result;\n        }\n\n        inline std::complex<double> cblas_dot(const int N, const std::complex<double> *X, const int incX,\n                            const std::complex<double> *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_DOT;\n            std::complex<double> result;\n            cblas_zdotu_sub(N, X, incX, Y, incY, &result);\n            return result;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        inline std::complex<float> cblas_dotc(const int N, const std::complex<float> *X, const int incX,\n                            const std::complex<float> *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_DOT;\n            std::complex<float> result;\n            cblas_cdotc_sub(N, X, incX, Y, incY, &result);\n            return result;\n        }\n\n        inline std::complex<double> cblas_dotc(const int N, const std::complex<double> *X, const int incX,\n                            const std::complex<double> *Y, const int incY)\n        {\n            DLIB_TEST_BLAS_BINDING_DOT;\n            std::complex<double> result;\n            cblas_zdotc_sub(N, X, incX, Y, incY, &result);\n            return result;\n        }\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // Helpers for determining the data pointer, LDA, and incX arguments to BLAS functions.\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_ld (const matrix<T,NR,NC,MM,row_major_layout>& m) { return m.nc(); }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_ld (const matrix<T,NR,NC,MM,column_major_layout>& m) { return m.nr(); }\n\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_ld (const matrix_op<op_subm<matrix<T,NR,NC,MM,row_major_layout> > >& m) { return m.op.m.nc(); }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_ld (const matrix_op<op_subm<matrix<T,NR,NC,MM,column_major_layout> > >& m) { return m.op.m.nr(); }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_ld (const assignable_sub_matrix<T,NR,NC,MM,row_major_layout>& m) { return m.m.nc(); }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_ld (const assignable_sub_matrix<T,NR,NC,MM,column_major_layout>& m) { return m.m.nr(); }\n\n        template <typename T, typename MM>\n        int get_ld (const matrix_op<op_array2d_to_mat<array2d<T,MM> > >& m) { return m.nc(); }\n        template <typename T, typename MM>\n        int get_ld (const matrix_op<op_array_to_mat<array<T,MM> > >& m) { return m.nc(); }\n        template < typename value_type, typename alloc >\n        int get_ld (const matrix_op<op_std_vect_to_mat<std::vector<value_type,alloc> > >& m) { return m.nc(); }\n        template < typename value_type, typename alloc >\n        int get_ld (const matrix_op<op_std_vect_to_mat<std_vector_c<value_type,alloc> > >& m) { return m.nc(); }\n        template <typename T>\n        int get_ld (const matrix_op<op_pointer_to_col_vect<T> >& m) { return m.nc(); }\n        template <typename T>\n        int get_ld (const matrix_op<op_pointer_to_mat<T> >& m) { return m.nc(); }\n\n        // --------\n\n        template <typename T, typename MM>\n        int get_inc (const matrix_op<op_array2d_to_mat<array2d<T,MM> > >& ) { return 1; }\n        template <typename T, typename MM>\n        int get_inc (const matrix_op<op_array_to_mat<array<T,MM> > >& ) { return 1; }\n        template < typename value_type, typename alloc >\n        int get_inc (const matrix_op<op_std_vect_to_mat<std::vector<value_type,alloc> > >& ) { return 1; }\n        template < typename value_type, typename alloc >\n        int get_inc (const matrix_op<op_std_vect_to_mat<std_vector_c<value_type,alloc> > >& ) { return 1; }\n        template <typename T>\n        int get_inc (const matrix_op<op_pointer_to_col_vect<T> >& ) { return 1; }\n        template <typename T>\n        int get_inc (const matrix_op<op_pointer_to_mat<T> >& ) { return 1; }\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        int get_inc (const matrix<T,NR,NC,MM,L>& ) { return 1; }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const matrix_op<op_colm<matrix<T,NR,NC,MM,row_major_layout> > >& m)\n        {\n            return m.op.m.nc();\n        }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const matrix_op<op_rowm<matrix<T,NR,NC,MM,row_major_layout> > >& )\n        {\n            return 1;\n        }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const matrix_op<op_colm2<matrix<T,NR,NC,MM,row_major_layout> > >& m)\n        {\n            return m.op.m.nc();\n        }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const matrix_op<op_rowm2<matrix<T,NR,NC,MM,row_major_layout> > >& )\n        {\n            return 1;\n        }\n\n\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const matrix_op<op_colm<matrix<T,NR,NC,MM,column_major_layout> > >& )\n        {\n            return 1;\n        }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const matrix_op<op_rowm<matrix<T,NR,NC,MM,column_major_layout> > >& m)\n        {\n            return m.op.m.nr();\n        }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const matrix_op<op_colm2<matrix<T,NR,NC,MM,column_major_layout> > >& )\n        {\n            return 1;\n        }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const matrix_op<op_rowm2<matrix<T,NR,NC,MM,column_major_layout> > >& m)\n        {\n            return m.op.m.nr();\n        }\n\n\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const assignable_row_matrix<T,NR,NC,MM,row_major_layout>& )\n        {\n            return 1;\n        }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const assignable_row_matrix<T,NR,NC,MM,column_major_layout>& m)\n        {\n            return m.m.nr();\n        }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const assignable_col_matrix<T,NR,NC,MM,row_major_layout>& m)\n        {\n            return m.m.nc();\n        }\n\n        template <typename T, long NR, long NC, typename MM>\n        int get_inc(const assignable_col_matrix<T,NR,NC,MM,column_major_layout>& )\n        {\n            return 1;\n        }\n\n        // --------\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        const T* get_ptr (const matrix<T,NR,NC,MM,L>& m) { return &m(0,0); }\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        T* get_ptr (matrix<T,NR,NC,MM,L>& m) { return &m(0,0); }\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        const T* get_ptr (const matrix_op<op_subm<matrix<T,NR,NC,MM,L> > >& m) { return &m.op.m(m.op.r_,m.op.c_); }\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        const T* get_ptr (const matrix_op<op_colm<matrix<T,NR,NC,MM,L> > >& m) { return &m.op.m(0,m.op.col); }\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        const T* get_ptr (const matrix_op<op_rowm<matrix<T,NR,NC,MM,L> > >& m) { return &m.op.m(m.op.row,0); }\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        const T* get_ptr (const matrix_op<op_colm2<matrix<T,NR,NC,MM,L> > >& m) { return &m.op.m(0,m.op.col); }\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        const T* get_ptr (const matrix_op<op_rowm2<matrix<T,NR,NC,MM,L> > >& m) { return &m.op.m(m.op.row,0); }\n\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        T* get_ptr (assignable_col_matrix<T,NR,NC,MM,L>& m) { return &m(0,0); }\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        T* get_ptr (assignable_row_matrix<T,NR,NC,MM,L>& m) { return &m(0,0); }\n\n        template <typename T, long NR, long NC, typename MM, typename L>\n        T* get_ptr (assignable_sub_matrix<T,NR,NC,MM,L>& m) { return &m(0,0); }\n\n        template <typename T, typename MM>\n        const T* get_ptr (const matrix_op<op_array2d_to_mat<array2d<T,MM> > >& m) { return &m.op.array[0][0]; }\n        template <typename T, typename MM>\n        const T* get_ptr (const matrix_op<op_array_to_mat<array<T,MM> > >& m) { return &m.op.vect[0]; }\n        template < typename T, typename alloc >\n        const T* get_ptr (const matrix_op<op_std_vect_to_mat<std::vector<T,alloc> > >& m) { return &m.op.vect[0]; }\n        template < typename T, typename alloc >\n        const T* get_ptr (const matrix_op<op_std_vect_to_mat<std_vector_c<T,alloc> > >& m) { return &m.op.vect[0]; }\n        template <typename T>\n        const T* get_ptr (const matrix_op<op_pointer_to_col_vect<T> >& m) { return m.op.ptr; }\n        template <typename T>\n        const T* get_ptr (const matrix_op<op_pointer_to_mat<T> >& m) { return m.op.ptr; }\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        // Here we declare some matrix objects for use in the DLIB_ADD_BLAS_BINDING macro.  These\n        // extern declarations don't actually correspond to any real matrix objects.  They are\n        // simply here so we can build matrix expressions with the DLIB_ADD_BLAS_BINDING marco.\n\n\n        // Note that the fact that these are double matrices isn't important, it is just a placeholder in this case.  \n        extern matrix<double> m;     // general matrix \n        extern matrix<double,1,0> rv;  // general row vector\n        extern matrix<double,0,1> cv;  // general column vector\n        extern const double s;\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    //                       AXPY/SCAL overloads\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(m)\n        {\n\n            const int N = static_cast<int>(src.size());\n            if (transpose == false && N != 0)\n            {\n                if (add_to)\n                {\n                    cblas_axpy(N, alpha, get_ptr(src), 1, get_ptr(dest), 1);\n                }\n                else\n                {\n                    if (get_ptr(src) == get_ptr(dest))\n                    {\n                        cblas_scal(N, alpha, get_ptr(dest));\n                    }\n                    else\n                    {\n                        matrix_assign_default(dest, src, alpha, add_to);\n                    }\n                }\n            }\n            else\n            {\n                matrix_assign_default(dest, trans(src), alpha, add_to);\n            }\n\n        } DLIB_END_BLAS_BINDING\n\n        DLIB_ADD_BLAS_BINDING(rv)\n        {\n\n            const int N = static_cast<int>(src.size());\n            if (transpose == false && N != 0)\n            {\n                if (add_to)\n                {\n                    cblas_axpy(N, alpha, get_ptr(src), 1, get_ptr(dest), 1);\n                }\n                else\n                {\n                    if (get_ptr(src) == get_ptr(dest))\n                    {\n                        cblas_scal(N, alpha, get_ptr(dest));\n                    }\n                    else\n                    {\n                        matrix_assign_default(dest, src, alpha, add_to);\n                    }\n                }\n            }\n            else\n            {\n                matrix_assign_default(dest, trans(src), alpha, add_to);\n            }\n\n        } DLIB_END_BLAS_BINDING\n\n        DLIB_ADD_BLAS_BINDING(cv)\n        {\n\n            const int N = static_cast<int>(src.size());\n            if (transpose == false && N != 0)\n            {\n                if (add_to)\n                {\n                    cblas_axpy(N, alpha, get_ptr(src), 1, get_ptr(dest), 1);\n                }\n                else\n                {\n                    if (get_ptr(src) == get_ptr(dest))\n                    {\n                        cblas_scal(N, alpha, get_ptr(dest));\n                    }\n                    else\n                    {\n                        matrix_assign_default(dest, src, alpha, add_to);\n                    }\n                }\n            }\n            else\n            {\n                matrix_assign_default(dest, trans(src), alpha, add_to);\n            }\n\n        } DLIB_END_BLAS_BINDING\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    //                       GEMM overloads\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(m*m)\n        {\n            //cout << \"BLAS GEMM: m*m\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(src.nr());\n            const int N = static_cast<int>(src.nc());\n            const int K = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs);\n            const int lda = get_ld(src.lhs);\n            const T* B = get_ptr(src.rhs);\n            const int ldb = get_ld(src.rhs);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* C = get_ptr(dest);\n            const int ldc = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gemm(Order, CblasNoTrans, CblasNoTrans, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);\n            else\n                cblas_gemm(Order, CblasTrans, CblasTrans, N, M, K, alpha, B, ldb, A, lda, beta, C, ldc);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(m)*m)\n        {\n            //cout << \"BLAS GEMM: trans(m)*m\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasTrans;\n            const CBLAS_TRANSPOSE TransB = CblasNoTrans;\n            const int M = static_cast<int>(src.nr());\n            const int N = static_cast<int>(src.nc());\n            const int K = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* B = get_ptr(src.rhs);\n            const int ldb = get_ld(src.rhs);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* C = get_ptr(dest);\n            const int ldc = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gemm(Order, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);\n            else\n                cblas_gemm(Order, TransA, TransB, N, M, K, alpha, B, ldb, A, lda, beta, C, ldc);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(m*trans(m))\n        {\n            //cout << \"BLAS GEMM: m*trans(m)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasNoTrans;\n            const CBLAS_TRANSPOSE TransB = CblasTrans;\n            const int M = static_cast<int>(src.nr());\n            const int N = static_cast<int>(src.nc());\n            const int K = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs);\n            const int lda = get_ld(src.lhs);\n            const T* B = get_ptr(src.rhs.op.m);\n            const int ldb = get_ld(src.rhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* C = get_ptr(dest);\n            const int ldc = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gemm(Order, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);\n            else\n                cblas_gemm(Order, TransA, TransB, N, M, K, alpha, B, ldb, A, lda, beta, C, ldc);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(m)*trans(m))\n        {\n            //cout << \"BLAS GEMM: trans(m)*trans(m)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(src.nr());\n            const int N = static_cast<int>(src.nc());\n            const int K = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* B = get_ptr(src.rhs.op.m);\n            const int ldb = get_ld(src.rhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* C = get_ptr(dest);\n            const int ldc = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gemm(Order, CblasTrans, CblasTrans, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);\n            else\n                cblas_gemm(Order, CblasNoTrans, CblasNoTrans, N, M, K, alpha, B, ldb, A, lda, beta, C, ldc);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n        // --------------------------------------\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(conj(m))*m)\n        {\n            //cout << \"BLAS GEMM: trans(conj(m))*m\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasConjTrans;\n            const CBLAS_TRANSPOSE TransB = CblasNoTrans;\n            const int M = static_cast<int>(src.nr());\n            const int N = static_cast<int>(src.nc());\n            const int K = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* B = get_ptr(src.rhs);\n            const int ldb = get_ld(src.rhs);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* C = get_ptr(dest);\n            const int ldc = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gemm(Order, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);\n            else\n                matrix_assign_default(dest, trans(src), alpha, add_to);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(conj(m))*trans(m))\n        {\n            //cout << \"BLAS GEMM: trans(conj(m))*trans(m)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasConjTrans;\n            const CBLAS_TRANSPOSE TransB = CblasTrans;\n            const int M = static_cast<int>(src.nr());\n            const int N = static_cast<int>(src.nc());\n            const int K = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* B = get_ptr(src.rhs.op.m);\n            const int ldb = get_ld(src.rhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* C = get_ptr(dest);\n            const int ldc = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gemm(Order, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);\n            else\n                matrix_assign_default(dest, trans(src), alpha, add_to);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(m*trans(conj(m)))\n        {\n            //cout << \"BLAS GEMM: m*trans(conj(m))\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasNoTrans;\n            const CBLAS_TRANSPOSE TransB = CblasConjTrans;\n            const int M = static_cast<int>(src.nr());\n            const int N = static_cast<int>(src.nc());\n            const int K = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs);\n            const int lda = get_ld(src.lhs);\n            const T* B = get_ptr(src.rhs.op.m);\n            const int ldb = get_ld(src.rhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* C = get_ptr(dest);\n            const int ldc = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gemm(Order, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);\n            else\n                matrix_assign_default(dest, trans(src), alpha, add_to);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(m)*trans(conj(m)))\n        {\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasTrans;\n            const CBLAS_TRANSPOSE TransB = CblasConjTrans;\n            const int M = static_cast<int>(src.nr());\n            const int N = static_cast<int>(src.nc());\n            const int K = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* B = get_ptr(src.rhs.op.m);\n            const int ldb = get_ld(src.rhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* C = get_ptr(dest);\n            const int ldc = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gemm(Order, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);\n            else\n                matrix_assign_default(dest, trans(src), alpha, add_to);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(conj(m))*trans(conj(m)))\n        {\n            //cout << \"BLAS GEMM: trans(conj(m))*trans(conj(m))\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasConjTrans;\n            const CBLAS_TRANSPOSE TransB = CblasConjTrans;\n            const int M = static_cast<int>(src.nr());\n            const int N = static_cast<int>(src.nc());\n            const int K = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* B = get_ptr(src.rhs.op.m);\n            const int ldb = get_ld(src.rhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* C = get_ptr(dest);\n            const int ldc = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gemm(Order, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);\n            else\n                matrix_assign_default(dest, trans(src), alpha, add_to);\n        } DLIB_END_BLAS_BINDING\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    //                       GEMV overloads\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(m*cv)\n        {\n            //cout << \"BLAS GEMV: m*cv\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasNoTrans;\n            const int M = static_cast<int>(src.lhs.nr());\n            const int N = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs);\n            const int lda = get_ld(src.lhs);\n            const T* X = get_ptr(src.rhs);\n            const int incX = get_inc(src.rhs);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(rv*m)\n        {\n            // Note that rv*m is the same as trans(m)*trans(rv)\n\n            //cout << \"BLAS GEMV: rv*m\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasTrans;\n            const int M = static_cast<int>(src.rhs.nr());\n            const int N = static_cast<int>(src.rhs.nc());\n            const T* A = get_ptr(src.rhs);\n            const int lda = get_ld(src.rhs);\n            const T* X = get_ptr(src.lhs);\n            const int incX = get_inc(src.lhs);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(cv)*m)\n        {\n            // Note that trans(cv)*m is the same as trans(m)*cv\n\n            //cout << \"BLAS GEMV: trans(cv)*m\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasTrans;\n            const int M = static_cast<int>(src.rhs.nr());\n            const int N = static_cast<int>(src.rhs.nc());\n            const T* A = get_ptr(src.rhs);\n            const int lda = get_ld(src.rhs);\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(m*trans(rv))\n        {\n            //cout << \"BLAS GEMV: m*trans(rv)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasNoTrans;\n            const int M = static_cast<int>(src.lhs.nr());\n            const int N = static_cast<int>(src.lhs.nc());\n            const T* A = get_ptr(src.lhs);\n            const int lda = get_ld(src.lhs);\n            const T* X = get_ptr(src.rhs.op.m);\n            const int incX = get_inc(src.rhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n        // --------------------------------------\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(m)*cv)\n        {\n            //cout << \"BLAS GEMV: trans(m)*cv\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasTrans;\n            const int M = static_cast<int>(src.lhs.op.m.nr());\n            const int N = static_cast<int>(src.lhs.op.m.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* X = get_ptr(src.rhs);\n            const int incX = get_inc(src.rhs);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(rv*trans(m))\n        {\n            // Note that rv*trans(m) is the same as m*trans(rv)\n\n            //cout << \"BLAS GEMV: rv*trans(m)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasNoTrans;\n            const int M = static_cast<int>(src.rhs.op.m.nr());\n            const int N = static_cast<int>(src.rhs.op.m.nc());\n            const T* A = get_ptr(src.rhs.op.m);\n            const int lda = get_ld(src.rhs.op.m);\n            const T* X = get_ptr(src.lhs);\n            const int incX = get_inc(src.lhs);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(cv)*trans(m))\n        {\n            // Note that trans(cv)*trans(m) is the same as m*cv\n\n            //cout << \"BLAS GEMV: trans(cv)*trans(m)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasNoTrans;\n            const int M = static_cast<int>(src.rhs.op.m.nr());\n            const int N = static_cast<int>(src.rhs.op.m.nc());\n            const T* A = get_ptr(src.rhs.op.m);\n            const int lda = get_ld(src.rhs.op.m);\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(m)*trans(rv))\n        {\n            //cout << \"BLAS GEMV: trans(m)*trans(rv)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasTrans;\n            const int M = static_cast<int>(src.lhs.op.m.nr());\n            const int N = static_cast<int>(src.lhs.op.m.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* X = get_ptr(src.rhs.op.m);\n            const int incX = get_inc(src.rhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n        // --------------------------------------\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(cv)*conj(m))\n        {\n            // Note that trans(cv)*conj(m) == conj(trans(m))*cv\n            //cout << \"BLAS GEMV: trans(cv)*conj(m)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasConjTrans;\n            const int M = static_cast<int>(src.rhs.op.m.nr());\n            const int N = static_cast<int>(src.rhs.op.m.nc());\n            const T* A = get_ptr(src.rhs.op.m);\n            const int lda = get_ld(src.rhs.op.m);\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(rv*conj(m))\n        {\n            // Note that rv*conj(m) == conj(trans(m))*cv\n            //cout << \"BLAS GEMV: rv*conj(m)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasConjTrans;\n            const int M = static_cast<int>(src.rhs.op.m.nr());\n            const int N = static_cast<int>(src.rhs.op.m.nc());\n            const T* A = get_ptr(src.rhs.op.m);\n            const int lda = get_ld(src.rhs.op.m);\n            const T* X = get_ptr(src.lhs);\n            const int incX = get_inc(src.lhs);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(conj(m))*cv)\n        {\n            //cout << \"BLAS GEMV: trans(conj(m))*cv\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasConjTrans;\n            const int M = static_cast<int>(src.lhs.op.m.nr());\n            const int N = static_cast<int>(src.lhs.op.m.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* X = get_ptr(src.rhs);\n            const int incX = get_inc(src.rhs);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(conj(m))*trans(rv))\n        {\n            //cout << \"BLAS GEMV: trans(conj(m))*trans(rv)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const CBLAS_TRANSPOSE TransA = CblasConjTrans;\n            const int M = static_cast<int>(src.lhs.op.m.nr());\n            const int N = static_cast<int>(src.lhs.op.m.nc());\n            const T* A = get_ptr(src.lhs.op.m);\n            const int lda = get_ld(src.lhs.op.m);\n            const T* X = get_ptr(src.rhs.op.m);\n            const int incX = get_inc(src.rhs.op.m);\n\n            const T beta = static_cast<T>(add_to?1:0);\n            T* Y = get_ptr(dest);\n            const int incY = get_inc(dest);\n\n            cblas_gemv(Order, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);\n        } DLIB_END_BLAS_BINDING\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    //                       GER overloads\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(cv*rv)\n        {\n            //cout << \"BLAS GER: cv*rv\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(dest.nr());\n            const int N = static_cast<int>(dest.nc());\n            const T* X = get_ptr(src.lhs);\n            const int incX = get_inc(src.lhs);\n            const T* Y = get_ptr(src.rhs);\n            const int incY = get_inc(src.rhs);\n\n            if (add_to == false)\n                zero_matrix(dest);\n\n            T* A = get_ptr(dest);\n            const int lda = get_ld(dest);\n\n            if (transpose == false)\n                cblas_ger(Order, M, N, alpha, X, incX, Y, incY, A, lda);\n            else\n                cblas_ger(Order, M, N, alpha, Y, incY, X, incX, A, lda);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(rv)*rv)\n        {\n            //cout << \"BLAS GER: trans(rv)*rv\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(dest.nr());\n            const int N = static_cast<int>(dest.nc());\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n            const T* Y = get_ptr(src.rhs);\n            const int incY = get_inc(src.rhs);\n\n            if (add_to == false)\n                zero_matrix(dest);\n\n            T* A = get_ptr(dest);\n            const int lda = get_ld(dest);\n\n            if (transpose == false)\n                cblas_ger(Order, M, N, alpha, X, incX, Y, incY, A, lda);\n            else\n                cblas_ger(Order, M, N, alpha, Y, incY, X, incX, A, lda);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(cv*trans(cv))\n        {\n            //cout << \"BLAS GER: cv*trans(cv)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(dest.nr());\n            const int N = static_cast<int>(dest.nc());\n            const T* X = get_ptr(src.lhs);\n            const int incX = get_inc(src.lhs);\n            const T* Y = get_ptr(src.rhs.op.m);\n            const int incY = get_inc(src.rhs.op.m);\n\n            if (add_to == false)\n                zero_matrix(dest);\n\n            T* A = get_ptr(dest);\n            const int lda = get_ld(dest);\n\n            if (transpose == false)\n                cblas_ger(Order, M, N, alpha, X, incX, Y, incY, A, lda);\n            else\n                cblas_ger(Order, M, N, alpha, Y, incY, X, incX, A, lda);\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(rv)*trans(cv))\n        {\n            //cout << \"BLAS GER: trans(rv)*trans(cv)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(dest.nr());\n            const int N = static_cast<int>(dest.nc());\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n            const T* Y = get_ptr(src.rhs.op.m);\n            const int incY = get_inc(src.rhs.op.m);\n\n            if (add_to == false)\n                zero_matrix(dest);\n\n            T* A = get_ptr(dest);\n            const int lda = get_ld(dest);\n\n            if (transpose == false)\n                cblas_ger(Order, M, N, alpha, X, incX, Y, incY, A, lda);\n            else\n                cblas_ger(Order, M, N, alpha, Y, incY, X, incX, A, lda);\n        } DLIB_END_BLAS_BINDING\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    //                       GERC overloads\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        /*\n        DLIB_ADD_BLAS_BINDING(cv*conj(rv))\n        {\n            //cout << \"BLAS GERC: cv*conj(rv)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(dest.nr());\n            const int N = static_cast<int>(dest.nc());\n            const T* X = get_ptr(src.lhs);\n            const int incX = get_inc(src.lhs);\n            const T* Y = get_ptr(src.rhs.op.m);\n            const int incY = get_inc(src.rhs.op.m);\n\n            if (add_to == false)\n                zero_matrix(dest);\n\n            T* A = get_ptr(dest);\n            const int lda = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gerc(Order, M, N, alpha, X, incX, Y, incY, A, lda);\n            else\n                cblas_gerc(Order, M, N, alpha, Y, incY, X, incX, A, lda);\n        } DLIB_END_BLAS_BINDING\n        */\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(cv*conj(trans(cv)))\n        {\n            //cout << \"BLAS GERC: cv*conj(trans(cv))\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(dest.nr());\n            const int N = static_cast<int>(dest.nc());\n            const T* X = get_ptr(src.lhs);\n            const int incX = get_inc(src.lhs);\n            const T* Y = get_ptr(src.rhs.op.m);\n            const int incY = get_inc(src.rhs.op.m);\n\n\n            if (transpose == false)\n            {\n                T* A = get_ptr(dest);\n                const int lda = get_ld(dest);\n\n                if (add_to == false)\n                    zero_matrix(dest);\n\n                cblas_gerc(Order, M, N, alpha, X, incX, Y, incY, A, lda);\n            }\n            else\n            {\n                matrix_assign_default(dest,trans(src),alpha,add_to);\n                //cblas_gerc(Order, M, N, alpha, Y, incY, X, incX, A, lda);\n            }\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(rv)*conj(trans(cv)))\n        {\n            //cout << \"BLAS GERC: trans(rv)*conj(trans(cv))\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(dest.nr());\n            const int N = static_cast<int>(dest.nc());\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n            const T* Y = get_ptr(src.rhs.op.m);\n            const int incY = get_inc(src.rhs.op.m);\n\n\n            if (transpose == false)\n            {\n                if (add_to == false)\n                    zero_matrix(dest);\n\n                T* A = get_ptr(dest);\n                const int lda = get_ld(dest);\n\n                cblas_gerc(Order, M, N, alpha, X, incX, Y, incY, A, lda);\n            }\n            else\n            {\n                matrix_assign_default(dest,trans(src),alpha,add_to);\n                //cblas_gerc(Order, M, N, alpha, Y, incY, X, incX, A, lda);\n            }\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        /*\n        DLIB_ADD_BLAS_BINDING(trans(rv)*conj(rv))\n        {\n            //cout << \"BLAS GERC: trans(rv)*conj(rv)\" << endl;\n            const bool is_row_major_order = is_same_type<typename dest_exp::layout_type,row_major_layout>::value;  \n            const CBLAS_ORDER Order = is_row_major_order ? CblasRowMajor : CblasColMajor;\n            const int M = static_cast<int>(dest.nr());\n            const int N = static_cast<int>(dest.nc());\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n            const T* Y = get_ptr(src.rhs.op.m);\n            const int incY = get_inc(src.rhs.op.m);\n\n            if (add_to == false)\n                zero_matrix(dest);\n\n            T* A = get_ptr(dest);\n            const int lda = get_ld(dest);\n\n            if (transpose == false)\n                cblas_gerc(Order, M, N, alpha, X, incX, Y, incY, A, lda);\n            else\n                cblas_gerc(Order, M, N, alpha, Y, incY, X, incX, A, lda);\n        } DLIB_END_BLAS_BINDING\n        */\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    //                       DOT overloads\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(rv*cv)\n        {\n            //cout << \"BLAS DOT: rv*cv\" << endl;\n            const int N = static_cast<int>(src.lhs.size());\n            const T* X = get_ptr(src.lhs);\n            const int incX = get_inc(src.lhs);\n            const T* Y = get_ptr(src.rhs);\n            const int incY = get_inc(src.rhs);\n\n            if (add_to == false)\n                dest(0) = alpha*cblas_dot(N, X, incX, Y, incY);\n            else\n                dest(0) += alpha*cblas_dot(N, X, incX, Y, incY);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(cv)*cv)\n        {\n            //cout << \"BLAS DOT: trans(cv)*cv\" << endl;\n            const int N = static_cast<int>(src.lhs.size());\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n            const T* Y = get_ptr(src.rhs);\n            const int incY = get_inc(src.rhs);\n\n            if (add_to == false)\n                dest(0) = alpha*cblas_dot(N, X, incX, Y, incY);\n            else\n                dest(0) += alpha*cblas_dot(N, X, incX, Y, incY);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(rv*trans(rv))\n        {\n            //cout << \"BLAS DOT: rv*trans(rv)\" << endl;\n            const int N = static_cast<int>(src.lhs.size());\n            const T* X = get_ptr(src.lhs);\n            const int incX = get_inc(src.lhs);\n            const T* Y = get_ptr(src.rhs.op.m);\n            const int incY = get_inc(src.rhs.op.m);\n\n            if (add_to == false)\n                dest(0) = alpha*cblas_dot(N, X, incX, Y, incY);\n            else\n                dest(0) += alpha*cblas_dot(N, X, incX, Y, incY);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(cv)*trans(rv))\n        {\n            //cout << \"BLAS DOT: trans(cv)*trans(rv)\" << endl;\n            const int N = static_cast<int>(src.lhs.op.m.size());\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n            const T* Y = get_ptr(src.rhs.op.m);\n            const int incY = get_inc(src.rhs.op.m);\n\n            if (add_to == false)\n                dest(0) = alpha*cblas_dot(N, X, incX, Y, incY);\n            else\n                dest(0) += alpha*cblas_dot(N, X, incX, Y, incY);\n\n        } DLIB_END_BLAS_BINDING\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    //                       DOTC overloads\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(conj(rv)*cv)\n        {\n            //cout << \"BLAS DOTC: conj(rv)*cv\" << endl;\n            const int N = static_cast<int>(src.lhs.op.m.size());\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n            const T* Y = get_ptr(src.rhs);\n            const int incY = get_inc(src.rhs);\n\n            if (add_to == false)\n                dest(0) = alpha*cblas_dotc(N, X, incX, Y, incY);\n            else\n                dest(0) += alpha*cblas_dotc(N, X, incX, Y, incY);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(conj(trans(cv))*cv)\n        {\n            //cout << \"BLAS DOTC: conj(trans(cv))*cv\" << endl;\n            const int N = static_cast<int>(src.lhs.op.m.size());\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n            const T* Y = get_ptr(src.rhs);\n            const int incY = get_inc(src.rhs);\n\n            if (add_to == false)\n                dest(0) = alpha*cblas_dotc(N, X, incX, Y, incY);\n            else\n                dest(0) += alpha*cblas_dotc(N, X, incX, Y, incY);\n\n        } DLIB_END_BLAS_BINDING\n\n        // --------------------------------------\n\n        DLIB_ADD_BLAS_BINDING(trans(conj(cv))*trans(rv))\n        {\n            //cout << \"BLAS DOTC: trans(conj(cv))*trans(rv)\" << endl;\n            const int N = static_cast<int>(src.lhs.op.m.size());\n            const T* X = get_ptr(src.lhs.op.m);\n            const int incX = get_inc(src.lhs.op.m);\n            const T* Y = get_ptr(src.rhs.op.m);\n            const int incY = get_inc(src.rhs.op.m);\n\n            if (add_to == false)\n                dest(0) = alpha*cblas_dotc(N, X, incX, Y, incY);\n            else\n                dest(0) += alpha*cblas_dotc(N, X, incX, Y, incY);\n\n        } DLIB_END_BLAS_BINDING\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_BLAS_BINDINGS_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_cholesky.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n// This code was adapted from code from the JAMA part of NIST's TNT library.\n//    See: http://math.nist.gov/tnt/ \n#ifndef DLIB_MATRIX_CHOLESKY_DECOMPOSITION_H\n#define DLIB_MATRIX_CHOLESKY_DECOMPOSITION_H\n\n#include \"matrix.h\" \n#include \"matrix_utilities.h\"\n#include \"matrix_subexp.h\"\n#include <cmath>\n\n#ifdef DLIB_USE_LAPACK\n#include \"lapack/potrf.h\"\n#endif\n\n#include \"matrix_trsm.h\"\n\nnamespace dlib \n{\n\n    template <\n        typename matrix_exp_type\n        >\n    class cholesky_decomposition\n    {\n\n    public:\n\n        const static long NR = matrix_exp_type::NR;\n        const static long NC = matrix_exp_type::NC;\n        typedef typename matrix_exp_type::type type;\n        typedef typename matrix_exp_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_exp_type::layout_type layout_type;\n\n        typedef matrix<type,0,0,mem_manager_type,layout_type>  matrix_type;\n        typedef matrix<type,NR,1,mem_manager_type,layout_type> column_vector_type;\n\n        // You have supplied an invalid type of matrix_exp_type.  You have\n        // to use this object with matrices that contain float or double type data.\n        COMPILE_TIME_ASSERT((is_same_type<float, type>::value || \n                             is_same_type<double, type>::value ));\n\n\n\n        template <typename EXP>\n        cholesky_decomposition(\n            const matrix_exp<EXP>& A\n        );\n\n        bool is_spd(\n        ) const;\n\n        const matrix_type& get_l(\n        ) const;\n\n        template <typename EXP>\n        const typename EXP::matrix_type solve (\n            const matrix_exp<EXP>& B\n        ) const;\n\n    private:\n\n        matrix_type L_;     // lower triangular factor\n        bool isspd;         // true if matrix to be factored was SPD\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                      Member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    bool cholesky_decomposition<matrix_exp_type>::\n    is_spd(\n    ) const\n    {\n        return isspd;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename cholesky_decomposition<matrix_exp_type>::matrix_type& cholesky_decomposition<matrix_exp_type>::\n    get_l(\n    ) const\n    {\n        return L_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    cholesky_decomposition<matrix_exp_type>::\n    cholesky_decomposition(\n        const matrix_exp<EXP>& A_\n    )\n    {\n        using std::sqrt;\n        COMPILE_TIME_ASSERT((is_same_type<type, typename EXP::type>::value));\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(A_.nr() == A_.nc() && A_.size() > 0,\n            \"\\tcholesky_decomposition::cholesky_decomposition(A_)\"\n            << \"\\n\\tYou can only use this on square matrices\"\n            << \"\\n\\tA_.nr():   \" << A_.nr()\n            << \"\\n\\tA_.nc():   \" << A_.nc()\n            << \"\\n\\tA_.size(): \" << A_.size()\n            << \"\\n\\tthis:      \" << this\n            );\n\n#ifdef DLIB_USE_LAPACK\n        L_ = A_;\n        const type eps = max(abs(diag(L_)))*std::sqrt(std::numeric_limits<type>::epsilon())/100;\n\n        // check if the matrix is actually symmetric\n        bool is_symmetric = true;\n        for (long r = 0; r < L_.nr() && is_symmetric; ++r)\n        {\n            for (long c = r+1; c < L_.nc() && is_symmetric; ++c)\n            {\n                // this is approximately doing: is_symmetric = is_symmetric && ( L_(k,j) == L_(j,k))\n                is_symmetric = is_symmetric && (std::abs(L_(r,c) - L_(c,r)) < eps ); \n            }\n        }\n\n        // now compute the actual cholesky decomposition\n        int info = lapack::potrf('L', L_);\n\n        // check if it's really SPD\n        if (info == 0 && is_symmetric && min(abs(diag(L_))) > eps*100)\n            isspd = true;\n        else\n            isspd = false;\n\n        L_ = lowerm(L_);\n#else\n        const_temp_matrix<EXP> A(A_);\n\n\n        isspd = true;\n\n        const long n = A.nc();\n        L_.set_size(n,n); \n\n        const type eps = max(abs(diag(A)))*std::sqrt(std::numeric_limits<type>::epsilon())/100;\n\n        // Main loop.\n        for (long j = 0; j < n; j++) \n        {\n            type d(0.0);\n            for (long k = 0; k < j; k++) \n            {\n                type s(0.0);\n                for (long i = 0; i < k; i++) \n                {\n                    s += L_(k,i)*L_(j,i);\n                }\n\n                // if L_(k,k) != 0\n                if (std::abs(L_(k,k)) > eps)\n                {\n                    s = (A(j,k) - s)/L_(k,k);\n                }\n                else\n                {\n                    s = (A(j,k) - s);\n                    isspd = false;\n                }\n\n                L_(j,k) = s;\n\n                d = d + s*s;\n\n                // this is approximately doing: isspd = isspd && ( A(k,j) == A(j,k))\n                isspd = isspd && (std::abs(A(k,j) - A(j,k)) < eps ); \n            }\n            d = A(j,j) - d;\n            isspd = isspd && (d > eps);\n            L_(j,j) = sqrt(d > 0.0 ? d : 0.0);\n            for (long k = j+1; k < n; k++) \n            {\n                L_(j,k) = 0.0;\n            }\n        }\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    const typename EXP::matrix_type cholesky_decomposition<matrix_exp_type>::\n    solve(\n        const matrix_exp<EXP>& B\n    ) const\n    {\n        COMPILE_TIME_ASSERT((is_same_type<type, typename EXP::type>::value));\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(L_.nr() == B.nr(),\n            \"\\tconst matrix cholesky_decomposition::solve(B)\"\n            << \"\\n\\tInvalid arguments were given to this function.\"\n            << \"\\n\\tL_.nr():  \" << L_.nr() \n            << \"\\n\\tB.nr():   \" << B.nr() \n            << \"\\n\\tthis:     \" << this\n            );\n\n        matrix<type, NR, EXP::NC, mem_manager_type, layout_type>  X(B); \n\n        using namespace blas_bindings;\n        // Solve L*y = b;\n        triangular_solver(CblasLeft, CblasLower, CblasNoTrans, CblasNonUnit, L_, X);\n        // Solve L'*X = Y;\n        triangular_solver(CblasLeft, CblasLower, CblasTrans, CblasNonUnit, L_, X);\n        return X;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n\n} \n\n#endif // DLIB_MATRIX_CHOLESKY_DECOMPOSITION_H \n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_conj_trans.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_CONJ_TRANS_FUNCTIONS\n#define DLIB_MATRIx_CONJ_TRANS_FUNCTIONS \n\n#include \"matrix_utilities.h\"\n#include \"matrix_math_functions.h\"\n#include \"matrix.h\"\n#include \"../algs.h\"\n#include <cmath>\n#include <complex>\n#include <limits>\n\n\nnamespace dlib\n{\n    /*!\n        The point of the two functions defined in this file is to make statements\n        of the form conj(trans(m)) and trans(conj(m)) look the same so that it is\n        easier to map them to BLAS functions later on.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_conj_trans \n    {\n        op_conj_trans( const M& m_) : m(m_){}\n        const M& m;\n\n        const static long cost = M::cost+1;\n        const static long NR = M::NC;\n        const static long NC = M::NR;\n        typedef typename M::type type;\n        typedef typename M::type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply (long r, long c) const { return std::conj(m(c,r)); }\n\n        long nr () const { return m.nc(); }\n        long nc () const { return m.nr(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    }; \n\n    template <typename EXP>\n    const matrix_op<op_conj_trans<EXP> > trans (\n        const matrix_op<op_conj<EXP> >& m\n    )\n    {\n        typedef op_conj_trans<EXP> op;\n        return matrix_op<op>(op(m.op.m));\n    }\n\n    template <typename EXP>\n    const matrix_op<op_conj_trans<EXP> > conj (\n        const matrix_op<op_trans<EXP> >& m\n    )\n    {\n        typedef op_conj_trans<EXP> op;\n        return matrix_op<op>(op(m.op.m));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_CONJ_TRANS_FUNCTIONS\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_conv.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_CONV_Hh_\n#define DLIB_MATRIx_CONV_Hh_\n\n#include \"matrix_conv_abstract.h\"\n#include \"matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T>\n        const T& conj(const T& item) { return item; }\n        template <typename T>\n        std::complex<T> conj(const std::complex<T>& item) { return std::conj(item); }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, bool flip_m2 = false>\n    struct op_conv \n    {\n        op_conv( const M1& m1_, const M2& m2_) : \n            m1(m1_),\n            m2(m2_), \n            nr_(m1.nr()+m2.nr()-1),\n            nc_(m1.nc()+m2.nc()-1)\n        {\n            if (nr_ < 0 || m1.size() == 0 || m2.size() == 0)\n                nr_ = 0;\n            if (nc_ < 0 || m1.size() == 0 || m2.size() == 0)\n                nc_ = 0;\n        }\n\n        const M1& m1;\n        const M2& m2;\n        long nr_; \n        long nc_;\n\n        const static long cost = (M1::cost+M2::cost)*10;\n        const static long NR = (M1::NR*M2::NR==0) ? (0) : (M1::NR+M2::NR-1);\n        const static long NC = (M1::NC*M2::NC==0) ? (0) : (M1::NC+M2::NC-1);\n        typedef typename M1::type type;\n        typedef type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n\n        const_ret_type apply (long r, long c) const \n        { \n            type temp = 0;\n\n            const long min_rr = std::max<long>(r-m2.nr()+1, 0);\n            const long max_rr = std::min<long>(m1.nr()-1, r);\n\n            const long min_cc = std::max<long>(c-m2.nc()+1, 0);\n            const long max_cc = std::min<long>(m1.nc()-1, c);\n\n            for (long rr = min_rr; rr <= max_rr; ++rr)\n            {\n                for (long cc = min_cc; cc <= max_cc; ++cc)\n                {\n                    if (flip_m2)\n                        temp += m1(rr,cc)*dlib::impl::conj(m2(m2.nr()-r+rr-1, m2.nc()-c+cc-1));\n                    else\n                        temp += m1(rr,cc)*m2(r-rr,c-cc);\n                }\n            }\n\n            return temp; \n        }\n\n        long nr () const { return nr_; }\n        long nc () const { return nc_; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m1.aliases(item) || m2.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m1.aliases(item) || m2.aliases(item); }\n\n    }; \n\n    template <\n        typename M1,\n        typename M2\n        >\n    const matrix_op<op_conv<M1,M2> > conv (\n        const matrix_exp<M1>& m1,\n        const matrix_exp<M2>& m2\n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename M1::type,typename M2::type>::value == true));\n\n        typedef op_conv<M1,M2> op;\n        return matrix_op<op>(op(m1.ref(),m2.ref()));\n    }\n\n    template <\n        typename M1,\n        typename M2\n        >\n    const matrix_op<op_conv<M1,M2,true> > xcorr (\n        const matrix_exp<M1>& m1,\n        const matrix_exp<M2>& m2\n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename M1::type,typename M2::type>::value == true));\n\n        typedef op_conv<M1,M2,true> op;\n        return matrix_op<op>(op(m1.ref(),m2.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, bool flip_m2 = false>\n    struct op_conv_same \n    {\n        op_conv_same( const M1& m1_, const M2& m2_) : m1(m1_),m2(m2_),nr_(m1.nr()),nc_(m1.nc())\n        {\n            if (m1.size() == 0 || m2.size() == 0)\n                nr_ = 0;\n            if (m1.size() == 0 || m2.size() == 0)\n                nc_ = 0;\n        }\n\n        const M1& m1;\n        const M2& m2;\n        long nr_;\n        long nc_;\n\n        const static long cost = (M1::cost+M2::cost)*10;\n        const static long NR = M1::NR;\n        const static long NC = M1::NC;\n        typedef typename M1::type type;\n        typedef type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n\n        const_ret_type apply (long r, long c) const \n        { \n            r += m2.nr()/2;\n            c += m2.nc()/2;\n\n            type temp = 0;\n\n            const long min_rr = std::max<long>(r-m2.nr()+1, 0);\n            const long max_rr = std::min<long>(m1.nr()-1, r);\n\n            const long min_cc = std::max<long>(c-m2.nc()+1, 0);\n            const long max_cc = std::min<long>(m1.nc()-1, c);\n\n            for (long rr = min_rr; rr <= max_rr; ++rr)\n            {\n                for (long cc = min_cc; cc <= max_cc; ++cc)\n                {\n                    if (flip_m2)\n                        temp += m1(rr,cc)*dlib::impl::conj(m2(m2.nr()-r+rr-1, m2.nc()-c+cc-1));\n                    else\n                        temp += m1(rr,cc)*m2(r-rr,c-cc);\n                }\n            }\n\n            return temp; \n        }\n\n        long nr () const { return nr_; }\n        long nc () const { return nc_; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m1.aliases(item) || m2.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m1.aliases(item) || m2.aliases(item); }\n\n    }; \n\n    template <\n        typename M1,\n        typename M2\n        >\n    const matrix_op<op_conv_same<M1,M2> > conv_same (\n        const matrix_exp<M1>& m1,\n        const matrix_exp<M2>& m2\n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename M1::type,typename M2::type>::value == true));\n\n        typedef op_conv_same<M1,M2> op;\n        return matrix_op<op>(op(m1.ref(),m2.ref()));\n    }\n\n    template <\n        typename M1,\n        typename M2\n        >\n    const matrix_op<op_conv_same<M1,M2,true> > xcorr_same (\n        const matrix_exp<M1>& m1,\n        const matrix_exp<M2>& m2\n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename M1::type,typename M2::type>::value == true));\n\n        typedef op_conv_same<M1,M2,true> op;\n        return matrix_op<op>(op(m1.ref(),m2.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, bool flip_m2 = false>\n    struct op_conv_valid \n    {\n        op_conv_valid( const M1& m1_, const M2& m2_) : \n            m1(m1_),m2(m2_),\n            nr_(m1.nr()-m2.nr()+1),\n            nc_(m1.nc()-m2.nc()+1)\n        {\n            if (nr_ < 0 || nc_ <= 0 || m1.size() == 0 || m2.size() == 0)\n                nr_ = 0;\n            if (nc_ < 0 || nr_ <= 0 || m1.size() == 0 || m2.size() == 0)\n                nc_ = 0;\n        }\n\n        const M1& m1;\n        const M2& m2;\n        long nr_; \n        long nc_;\n\n        const static long cost = (M1::cost+M2::cost)*10;\n        const static long NR = (M1::NR*M2::NR==0) ? (0) : (M1::NR-M2::NR+1);\n        const static long NC = (M1::NC*M2::NC==0) ? (0) : (M1::NC-M2::NC+1);\n        typedef typename M1::type type;\n        typedef type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n\n        const_ret_type apply (long r, long c) const \n        { \n            r += m2.nr()-1;\n            c += m2.nc()-1;\n\n            type temp = 0;\n\n            const long min_rr = std::max<long>(r-m2.nr()+1, 0);\n            const long max_rr = std::min<long>(m1.nr()-1, r);\n\n            const long min_cc = std::max<long>(c-m2.nc()+1, 0);\n            const long max_cc = std::min<long>(m1.nc()-1, c);\n\n            for (long rr = min_rr; rr <= max_rr; ++rr)\n            {\n                for (long cc = min_cc; cc <= max_cc; ++cc)\n                {\n                    if (flip_m2)\n                        temp += m1(rr,cc)*dlib::impl::conj(m2(m2.nr()-r+rr-1, m2.nc()-c+cc-1));\n                    else\n                        temp += m1(rr,cc)*m2(r-rr,c-cc);\n                }\n            }\n\n            return temp; \n        }\n\n        long nr () const { return nr_; }\n        long nc () const { return nc_; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m1.aliases(item) || m2.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m1.aliases(item) || m2.aliases(item); }\n\n    }; \n\n    template <\n        typename M1,\n        typename M2\n        >\n    const matrix_op<op_conv_valid<M1,M2> > conv_valid (\n        const matrix_exp<M1>& m1,\n        const matrix_exp<M2>& m2\n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename M1::type,typename M2::type>::value == true));\n\n        typedef op_conv_valid<M1,M2> op;\n        return matrix_op<op>(op(m1.ref(),m2.ref()));\n    }\n\n    template <\n        typename M1,\n        typename M2\n        >\n    const matrix_op<op_conv_valid<M1,M2,true> > xcorr_valid (\n        const matrix_exp<M1>& m1,\n        const matrix_exp<M2>& m2\n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename M1::type,typename M2::type>::value == true));\n\n        typedef op_conv_valid<M1,M2,true> op;\n        return matrix_op<op>(op(m1.ref(),m2.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_CONV_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_conv_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MATRIx_CONV_ABSTRACT_Hh_\n#ifdef DLIB_MATRIx_CONV_ABSTRACT_Hh_\n\n#include \"matrix_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp conv (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - m1 and m2 both contain elements of the same type\n        ensures\n            - returns a matrix R such that:\n                - R is the convolution of m1 with m2.  In particular, this function is \n                  equivalent to performing the following in matlab: R = conv2(m1,m2).\n                - R::type == the same type that was in m1 and m2.\n                - R.nr() == m1.nr()+m2.nr()-1\n                - R.nc() == m1.nc()+m2.nc()-1\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp xcorr (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - m1 and m2 both contain elements of the same type\n        ensures\n            - returns a matrix R such that:\n                - R is the cross-correlation of m1 with m2.  In particular, this\n                  function returns conv(m1,flip(m2)) if the matrices contain real\n                  elements and conv(m1,flip(conj(m2))) if they are complex.\n                - R::type == the same type that was in m1 and m2.\n                - R.nr() == m1.nr()+m2.nr()-1\n                - R.nc() == m1.nc()+m2.nc()-1\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp conv_same (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - m1 and m2 both contain elements of the same type\n        ensures\n            - returns a matrix R such that:\n                - R is the convolution of m1 with m2.  In particular, this function is \n                  equivalent to performing the following in matlab: R = conv2(m1,m2,'same').\n                  In particular, this means the result will have the same dimensions as m1 and will\n                  contain the central part of the full convolution.  Therefore, conv_same(m1,m2) is \n                  equivalent to subm(conv(m1,m2), m2.nr()/2, m2.nc()/2, m1.nr(), m1.nc()).\n                - R::type == the same type that was in m1 and m2.\n                - R.nr() == m1.nr()\n                - R.nc() == m1.nc()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp xcorr_same (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - m1 and m2 both contain elements of the same type\n        ensures\n            - returns a matrix R such that:\n                - R is the cross-correlation of m1 with m2.  In particular, this\n                  function returns conv_same(m1,flip(m2)) if the matrices contain real\n                  elements and conv_same(m1,flip(conj(m2))) if they are complex.\n                - R::type == the same type that was in m1 and m2.\n                - R.nr() == m1.nr()\n                - R.nc() == m1.nc()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp conv_valid (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - m1 and m2 both contain elements of the same type\n        ensures\n            - returns a matrix R such that:\n                - R is the convolution of m1 with m2.  In particular, this function is \n                  equivalent to performing the following in matlab: R = conv2(m1,m2,'valid').\n                  In particular, this means only elements of the convolution which don't require \n                  zero padding are included in the result.\n                - R::type == the same type that was in m1 and m2.\n                - if (m1 has larger dimensions than m2) then\n                    - R.nr() == m1.nr()-m2.nr()+1\n                    - R.nc() == m1.nc()-m2.nc()+1\n                - else\n                    - R.nr() == 0\n                    - R.nc() == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp xcorr_valid (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - m1 and m2 both contain elements of the same type\n        ensures\n            - returns a matrix R such that:\n                - R is the cross-correlation of m1 with m2.  In particular, this\n                  function returns conv_valid(m1,flip(m2)) if the matrices contain real\n                  elements and conv_valid(m1,flip(conj(m2))) if they are complex.\n                - R::type == the same type that was in m1 and m2.\n                - if (m1 has larger dimensions than m2) then\n                    - R.nr() == m1.nr()-m2.nr()+1\n                    - R.nc() == m1.nc()-m2.nc()+1\n                - else\n                    - R.nr() == 0\n                    - R.nc() == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_CONV_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_data_layout.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_DATA_LAYOUT_\n#define DLIB_MATRIx_DATA_LAYOUT_\n\n#include \"../algs.h\"\n#include \"matrix_fwd.h\"\n#include \"matrix_data_layout_abstract.h\"\n\n// GCC 4.8 gives false alarms about some matrix operations going out of bounds.  Disable\n// these false warnings.\n#if ( defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 8)\n    #pragma GCC diagnostic ignored \"-Warray-bounds\"\n#endif\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*!\n        A matrix layout object is any object that contains a templated class called \"layout\"\n        with an interface identical to one below:\n        (Note that all the template arguments are just the template arguments from the dlib::matrix \n        object and the member functions are defined identically to the ones with the same \n        signatures inside the matrix object.)\n\n        struct matrix_layout\n        {\n            template <\n                typename T,\n                long num_rows,\n                long num_cols,\n                typename mem_manager\n                >\n            class layout \n            {\n            public:\n\n                T& operator() (\n                    long r, \n                    long c\n                );\n\n                const T& operator() (\n                    long r, \n                    long c\n                );\n\n                T& operator() (\n                    long i \n                );\n\n                const T& operator() (\n                    long i\n                ) const;\n\n                void swap(\n                    layout& item\n                );\n\n                long nr (\n                ) const;\n\n                long nc (\n                ) const;\n\n                void set_size (\n                    long nr_,\n                    long nc_\n                );\n            };\n        };\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    struct row_major_layout\n    {\n        // if a matrix is bigger than this many bytes then don't put it on the stack\n        const static size_t max_stack_based_size = 256;\n\n        // this is a hack to avoid a compile time error in visual studio 8.  I would just \n        // use sizeof(T) and be done with it but that won't compile.  The idea here \n        // is to avoid using the stack allocation of the layout object if it \n        // is going to contain another matrix and also avoid asking for the sizeof()\n        // the contained matrix.\n        template <typename T>\n        struct get_sizeof_helper\n        {\n            const static std::size_t val = sizeof(T);\n        };\n\n        template <typename T, long NR, long NC, typename mm, typename l>\n        struct get_sizeof_helper<matrix<T,NR,NC,mm,l> >\n        {\n            const static std::size_t val = 1000000;\n        };\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager,\n            int val = static_switch <\n                // when the sizes are all non zero and small\n                (num_rows*num_cols*get_sizeof_helper<T>::val <= max_stack_based_size) && (num_rows != 0 && num_cols != 0),\n            // when the sizes are all non zero and big \n            (num_rows*num_cols*get_sizeof_helper<T>::val >  max_stack_based_size) && (num_rows != 0 && num_cols != 0),\n            num_rows == 0 && num_cols != 0,\n            num_rows != 0 && num_cols == 0,\n            num_rows == 0 && num_cols == 0\n            >::value\n            >\n        class layout ;\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents the actual allocation of space for a matrix.\n                Small matrices allocate all their data on the stack and bigger ones\n                use a memory_manager to get their memory.\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,1> : noncopyable // when the sizes are all non zero and small\n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout() {}\n\n            T& operator() (\n                long r, \n                long c\n            ) { return *(data+r*num_cols + c); }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return *(data+r*num_cols + c); }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i\n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                for (long r = 0; r < num_rows; ++r)\n                {\n                    for (long c = 0; c < num_cols; ++c)\n                    {\n                        exchange((*this)(r,c),item(r,c));\n                    }\n                }\n            }\n\n            long nr (\n            ) const { return num_rows; }\n\n            long nc (\n            ) const { return num_cols; }\n\n            void set_size (\n                long ,\n                long \n            )\n            {\n            }\n\n        private:\n            T data[num_rows*num_cols];\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,2> : noncopyable // when the sizes are all non zero and big \n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout (\n            ) { data = pool.allocate_array(num_rows*num_cols); }\n\n            ~layout ()\n            { pool.deallocate_array(data); }\n\n            T& operator() (\n                long r, \n                long c\n            ) { return data[r*num_cols + c]; }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return data[r*num_cols + c]; }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i \n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                std::swap(item.data,data);\n                pool.swap(item.pool);\n            }\n\n            long nr (\n            ) const { return num_rows; }\n\n            long nc (\n            ) const { return num_cols; }\n\n            void set_size (\n                long ,\n                long \n            )\n            {\n            }\n\n        private:\n\n            T* data;\n            typename mem_manager::template rebind<T>::other pool;\n            };\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,3> : noncopyable // when num_rows == 0 && num_cols != 0,\n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout (\n            ):data(0), nr_(0) { }\n\n            ~layout ()\n            { \n                if (data) \n                    pool.deallocate_array(data); \n            }\n\n            T& operator() (\n                long r, \n                long c\n            ) { return data[r*num_cols + c]; }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return data[r*num_cols + c]; }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i \n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                std::swap(item.data,data);\n                std::swap(item.nr_,nr_);\n                pool.swap(item.pool);\n            }\n\n            long nr (\n            ) const { return nr_; }\n\n            long nc (\n            ) const { return num_cols; }\n\n            void set_size (\n                long nr,\n                long nc\n            )\n            {\n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n                data = pool.allocate_array(nr*nc);\n                nr_ = nr;\n            }\n\n        private:\n\n            T* data;\n            long nr_;\n            typename mem_manager::template rebind<T>::other pool;\n            };\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,4> : noncopyable // when num_rows != 0 && num_cols == 0\n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout (\n            ):data(0), nc_(0) { }\n\n            ~layout ()\n            { \n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n            }\n\n            T& operator() (\n                long r, \n                long c\n            ) { return data[r*nc_ + c]; }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return data[r*nc_ + c]; }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i \n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                std::swap(item.data,data);\n                std::swap(item.nc_,nc_);\n                pool.swap(item.pool);\n            }\n\n            long nr (\n            ) const { return num_rows; }\n\n            long nc (\n            ) const { return nc_; }\n\n            void set_size (\n                long nr,\n                long nc\n            )\n            {\n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n                data = pool.allocate_array(nr*nc);\n                nc_ = nc;\n            }\n\n        private:\n\n            T* data;\n            long nc_;\n            typename mem_manager::template rebind<T>::other pool;\n            };\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,5> : noncopyable // when num_rows == 0 && num_cols == 0\n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout (\n            ):data(0), nr_(0), nc_(0) { }\n\n            ~layout ()\n            { \n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n            }\n\n            T& operator() (\n                long r, \n                long c\n            ) { return data[r*nc_ + c]; }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return data[r*nc_ + c]; }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i \n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                std::swap(item.data,data);\n                std::swap(item.nc_,nc_);\n                std::swap(item.nr_,nr_);\n                pool.swap(item.pool);\n            }\n\n            long nr (\n            ) const { return nr_; }\n\n            long nc (\n            ) const { return nc_; }\n\n            void set_size (\n                long nr,\n                long nc\n            )\n            {\n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n                data = pool.allocate_array(nr*nc);\n                nr_ = nr;\n                nc_ = nc;\n            }\n\n        private:\n            T* data;\n            long nr_;\n            long nc_;\n            typename mem_manager::template rebind<T>::other pool;\n            };\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct column_major_layout\n    {\n        // if a matrix is bigger than this many bytes then don't put it on the stack\n        const static size_t max_stack_based_size = 256;\n\n\n        // this is a hack to avoid a compile time error in visual studio 8.  I would just \n        // use sizeof(T) and be done with it but that won't compile.  The idea here \n        // is to avoid using the stack allocation of the layout object if it \n        // is going to contain another matrix and also avoid asking for the sizeof()\n        // the contained matrix.\n        template <typename T>\n        struct get_sizeof_helper\n        {\n            const static std::size_t val = sizeof(T);\n        };\n\n        template <typename T, long NR, long NC, typename mm, typename l>\n        struct get_sizeof_helper<matrix<T,NR,NC,mm,l> >\n        {\n            const static std::size_t val = 1000000;\n        };\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager,\n            int val = static_switch <\n                // when the sizes are all non zero and small\n                (num_rows*num_cols*get_sizeof_helper<T>::val <= max_stack_based_size) && (num_rows != 0 && num_cols != 0),\n            // when the sizes are all non zero and big \n            (num_rows*num_cols*get_sizeof_helper<T>::val > max_stack_based_size) && (num_rows != 0 && num_cols != 0),\n            num_rows == 0 && num_cols != 0,\n            num_rows != 0 && num_cols == 0,\n            num_rows == 0 && num_cols == 0\n            >::value\n            >\n        class layout ;\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents the actual allocation of space for a matrix.\n                Small matrices allocate all their data on the stack and bigger ones\n                use a memory_manager to get their memory.\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,1> : noncopyable // when the sizes are all non zero and small\n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout() {}\n\n            T& operator() (\n                long r, \n                long c\n            ) { return *(data+c*num_rows + r); }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return *(data+c*num_rows + r); }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i\n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                for (long r = 0; r < num_rows; ++r)\n                {\n                    for (long c = 0; c < num_cols; ++c)\n                    {\n                        exchange((*this)(r,c),item(r,c));\n                    }\n                }\n            }\n\n            long nr (\n            ) const { return num_rows; }\n\n            long nc (\n            ) const { return num_cols; }\n\n            void set_size (\n                long,\n                long \n            )\n            {\n            }\n\n        private:\n            T data[num_cols*num_rows];\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,2> : noncopyable // when the sizes are all non zero and big \n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout (\n            ) { data = pool.allocate_array(num_rows*num_cols); }\n\n            ~layout ()\n            { pool.deallocate_array(data); }\n\n            T& operator() (\n                long r, \n                long c\n            ) { return data[c*num_rows + r]; }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return data[c*num_rows + r]; }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i \n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                std::swap(item.data,data);\n                pool.swap(item.pool);\n            }\n\n            long nr (\n            ) const { return num_rows; }\n\n            long nc (\n            ) const { return num_cols; }\n\n            void set_size (\n                long ,\n                long \n            )\n            {\n            }\n\n        private:\n\n            T* data;\n            typename mem_manager::template rebind<T>::other pool;\n            };\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,3> : noncopyable // when num_rows == 0 && num_cols != 0,\n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout (\n            ):data(0), nr_(0) { }\n\n            ~layout ()\n            { \n                if (data) \n                    pool.deallocate_array(data); \n            }\n\n            T& operator() (\n                long r, \n                long c\n            ) { return data[c*nr_ + r]; }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return data[c*nr_ + r]; }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i \n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                std::swap(item.data,data);\n                std::swap(item.nr_,nr_);\n                pool.swap(item.pool);\n            }\n\n            long nr (\n            ) const { return nr_; }\n\n            long nc (\n            ) const { return num_cols; }\n\n            void set_size (\n                long nr,\n                long nc\n            )\n            {\n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n                data = pool.allocate_array(nr*nc);\n                nr_ = nr;\n            }\n\n        private:\n\n            T* data;\n            long nr_;\n            typename mem_manager::template rebind<T>::other pool;\n            };\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,4> : noncopyable // when num_rows != 0 && num_cols == 0\n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout (\n            ):data(0), nc_(0) { }\n\n            ~layout ()\n            { \n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n            }\n\n            T& operator() (\n                long r, \n                long c\n            ) { return data[c*num_rows + r]; }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return data[c*num_rows + r]; }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i \n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                std::swap(item.data,data);\n                std::swap(item.nc_,nc_);\n                pool.swap(item.pool);\n            }\n\n            long nr (\n            ) const { return num_rows; }\n\n            long nc (\n            ) const { return nc_; }\n\n            void set_size (\n                long nr,\n                long nc\n            )\n            {\n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n                data = pool.allocate_array(nr*nc);\n                nc_ = nc;\n            }\n\n        private:\n\n            T* data;\n            long nc_;\n            typename mem_manager::template rebind<T>::other pool;\n            };\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long num_rows,\n            long num_cols,\n            typename mem_manager\n            >\n        class layout<T,num_rows,num_cols,mem_manager,5> : noncopyable // when num_rows == 0 && num_cols == 0\n        {\n        public:\n            const static long NR = num_rows;\n            const static long NC = num_cols;\n\n            layout (\n            ):data(0), nr_(0), nc_(0) { }\n\n            ~layout ()\n            { \n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n            }\n\n            T& operator() (\n                long r, \n                long c\n            ) { return data[c*nr_ + r]; }\n\n            const T& operator() (\n                long r, \n                long c\n            ) const { return data[c*nr_ + r]; }\n\n            T& operator() (\n                long i \n            ) { return data[i]; }\n\n            const T& operator() (\n                long i \n            ) const { return data[i]; }\n\n            void swap(\n                layout& item\n            )\n            {\n                std::swap(item.data,data);\n                std::swap(item.nc_,nc_);\n                std::swap(item.nr_,nr_);\n                pool.swap(item.pool);\n            }\n\n            long nr (\n            ) const { return nr_; }\n\n            long nc (\n            ) const { return nc_; }\n\n            void set_size (\n                long nr,\n                long nc\n            )\n            {\n                if (data) \n                {\n                    pool.deallocate_array(data);\n                }\n                data = pool.allocate_array(nr*nc);\n                nr_ = nr;\n                nc_ = nc;\n            }\n\n        private:\n            T* data;\n            long nr_;\n            long nc_;\n            typename mem_manager::template rebind<T>::other pool;\n            };\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_DATA_LAYOUT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_data_layout_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MATRIx_DATA_LAYOUT_ABSTRACT_\n#ifdef DLIB_MATRIx_DATA_LAYOUT_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct row_major_layout\n    {\n        /*!\n            This is the default matrix layout.  Any matrix object that uses this\n            layout will be laid out in memory in row major order.  Additionally,\n            all elements are contiguous (e.g. there isn't any padding at the ends of\n            rows or anything like that)\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct column_major_layout\n    {\n        /*!\n            Any matrix object that uses this layout will be laid out in memory in \n            column major order.  Additionally, all elements are contiguous (e.g. \n            there isn't any padding at the ends of rows or anything like that)\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_DATA_LAYOUT_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_default_mul.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_DEFAULT_MULTIPLY_\n#define DLIB_MATRIx_DEFAULT_MULTIPLY_\n\n#include \"../geometry/rectangle.h\"\n#include \"matrix.h\"\n#include \"matrix_utilities.h\"\n#include \"../enable_if.h\"\n\nnamespace dlib\n{\n\n// ------------------------------------------------------------------------------------\n\n    namespace ma\n    {\n        template < typename EXP, typename enable = void >\n        struct matrix_is_vector { static const bool value = false; };\n        template < typename EXP >\n        struct matrix_is_vector<EXP, typename enable_if_c<EXP::NR==1 || EXP::NC==1>::type > { static const bool value = true; };\n    }\n\n// ------------------------------------------------------------------------------------\n\n    /*!  This file defines the default_matrix_multiply() function.  It is a function \n         that conforms to the following definition:\n\n        template <\n            typename matrix_dest_type,\n            typename EXP1,\n            typename EXP2\n            >\n        void default_matrix_multiply (\n            matrix_dest_type& dest,\n            const EXP1& lhs,\n            const EXP2& rhs\n        );\n            requires\n                - (lhs*rhs).destructively_aliases(dest) == false\n                - dest.nr() == (lhs*rhs).nr()\n                - dest.nc() == (lhs*rhs).nc()\n            ensures\n                - #dest == dest + lhs*rhs\n    !*/\n\n// ------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_dest_type,\n        typename EXP1,\n        typename EXP2\n        >\n    typename enable_if_c<ma::matrix_is_vector<EXP1>::value == true || ma::matrix_is_vector<EXP2>::value == true>::type \n    default_matrix_multiply (\n        matrix_dest_type& dest,\n        const EXP1& lhs,\n        const EXP2& rhs\n    )\n    {\n        matrix_assign_default(dest, lhs*rhs, 1, true);\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_dest_type,\n        typename EXP1,\n        typename EXP2\n        >\n    typename enable_if_c<ma::matrix_is_vector<EXP1>::value == false && ma::matrix_is_vector<EXP2>::value == false>::type \n    default_matrix_multiply (\n        matrix_dest_type& dest,\n        const EXP1& lhs,\n        const EXP2& rhs\n    )\n    {\n        const long bs = 90;\n\n        // if the matrices are small enough then just use the simple multiply algorithm\n        if (lhs.nc() <= 2 || rhs.nc() <= 2 || lhs.nr() <= 2 || rhs.nr() <= 2 || (lhs.size() <= bs*10 && rhs.size() <= bs*10) )\n        {\n            matrix_assign_default(dest, lhs*rhs, 1, true);\n        }\n        else\n        {\n            // if the lhs and rhs matrices are big enough we should use a cache friendly\n            // algorithm that computes the matrix multiply in blocks.  \n\n\n            // Loop over all the blocks in the lhs matrix\n            for (long r = 0; r < lhs.nr(); r+=bs)\n            {\n                for (long c = 0; c < lhs.nc(); c+=bs)\n                {\n                    // make a rect for the block from lhs \n                    rectangle lhs_block(c, r, std::min(c+bs-1,lhs.nc()-1), std::min(r+bs-1,lhs.nr()-1));\n\n                    // now loop over all the rhs blocks we have to multiply with the current lhs block\n                    for (long i = 0; i < rhs.nc(); i += bs)\n                    {\n                        // make a rect for the block from rhs \n                        rectangle rhs_block(i, c, std::min(i+bs-1,rhs.nc()-1), std::min(c+bs-1,rhs.nr()-1));\n\n                        // make a target rect in res\n                        rectangle res_block(rhs_block.left(),lhs_block.top(), rhs_block.right(), lhs_block.bottom());\n\n                        // This loop is optimized assuming that the data is laid out in \n                        // row major order in memory.\n                        for (long r = lhs_block.top(); r <= lhs_block.bottom(); ++r)\n                        {\n                            for (long c = lhs_block.left(); c<= lhs_block.right(); ++c)\n                            {\n                                const typename EXP2::type temp = lhs(r,c);\n                                for (long i = rhs_block.left(); i <= rhs_block.right(); ++i)\n                                {\n                                    dest(r,i) += rhs(c,i)*temp;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n\n    }\n\n// ------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_DEFAULT_MULTIPLY_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_eigenvalue.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n// This code was adapted from code from the JAMA part of NIST's TNT library.\n//    See: http://math.nist.gov/tnt/ \n#ifndef DLIB_MATRIX_EIGENVALUE_DECOMPOSITION_H\n#define DLIB_MATRIX_EIGENVALUE_DECOMPOSITION_H\n\n#include \"matrix.h\" \n#include \"matrix_utilities.h\"\n#include \"matrix_subexp.h\"\n#include <algorithm>\n#include <complex>\n#include <cmath>\n\n#ifdef DLIB_USE_LAPACK\n#include \"lapack/geev.h\"\n#include \"lapack/syev.h\"\n#include \"lapack/syevr.h\"\n#endif\n\n#define DLIB_LAPACK_EIGENVALUE_DECOMP_SIZE_THRESH 4\n\nnamespace dlib \n{\n\n    template <\n        typename matrix_exp_type\n        >\n    class eigenvalue_decomposition\n    {\n\n    public:\n\n        const static long NR = matrix_exp_type::NR;\n        const static long NC = matrix_exp_type::NC;\n        typedef typename matrix_exp_type::type type;\n        typedef typename matrix_exp_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_exp_type::layout_type layout_type;\n\n        typedef typename matrix_exp_type::matrix_type matrix_type;\n        typedef matrix<type,NR,1,mem_manager_type,layout_type> column_vector_type;\n\n        typedef matrix<std::complex<type>,0,0,mem_manager_type,layout_type> complex_matrix_type;\n        typedef matrix<std::complex<type>,NR,1,mem_manager_type,layout_type> complex_column_vector_type;\n\n\n        // You have supplied an invalid type of matrix_exp_type.  You have\n        // to use this object with matrices that contain float or double type data.\n        COMPILE_TIME_ASSERT((is_same_type<float, type>::value || \n                             is_same_type<double, type>::value ));\n\n\n        template <typename EXP>\n        eigenvalue_decomposition(\n            const matrix_exp<EXP>& A\n        ); \n\n        template <typename EXP>\n        eigenvalue_decomposition(\n            const matrix_op<op_make_symmetric<EXP> >& A\n        ); \n\n        long dim (\n        ) const;\n\n        const complex_column_vector_type get_eigenvalues (\n        ) const;\n\n        const column_vector_type& get_real_eigenvalues (\n        ) const;\n\n        const column_vector_type& get_imag_eigenvalues (\n        ) const;\n\n        const complex_matrix_type get_v (\n        ) const;\n\n        const complex_matrix_type get_d (\n        ) const; \n\n        const matrix_type& get_pseudo_v (\n        ) const;\n\n        const matrix_type get_pseudo_d (\n        ) const; \n\n    private:\n\n        /** Row and column dimension (square matrix).  */\n        long n;\n\n        bool issymmetric; \n\n        /** Arrays for internal storage of eigenvalues. */\n\n        column_vector_type d;         /* real part */\n        column_vector_type e;         /* img part */\n\n        /** Array for internal storage of eigenvectors. */\n        matrix_type V;\n\n        /** Array for internal storage of nonsymmetric Hessenberg form.\n        @serial internal storage of nonsymmetric Hessenberg form.\n        */\n        matrix_type H;\n\n\n        /** Working storage for nonsymmetric algorithm.\n        @serial working storage for nonsymmetric algorithm.\n        */\n        column_vector_type ort;\n\n        // Symmetric Householder reduction to tridiagonal form.\n        void tred2();\n\n\n        // Symmetric tridiagonal QL algorithm.\n        void tql2 ();\n\n\n        // Nonsymmetric reduction to Hessenberg form.\n        void orthes ();\n\n\n        // Complex scalar division.\n        type cdivr, cdivi;\n        void cdiv_(type xr, type xi, type yr, type yi);\n\n\n        // Nonsymmetric reduction from Hessenberg to real Schur form.\n        void hqr2 (); \n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                        Public member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    eigenvalue_decomposition<matrix_exp_type>::\n    eigenvalue_decomposition(\n        const matrix_exp<EXP>& A_\n    ) \n    {\n        COMPILE_TIME_ASSERT((is_same_type<type, typename EXP::type>::value));\n\n\n        const_temp_matrix<EXP> A(A_);\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(A.nr() == A.nc() && A.size() > 0,\n            \"\\teigenvalue_decomposition::eigenvalue_decomposition(A)\"\n            << \"\\n\\tYou can only use this on square matrices\"\n            << \"\\n\\tA.nr():   \" << A.nr()\n            << \"\\n\\tA.nc():   \" << A.nc()\n            << \"\\n\\tA.size(): \" << A.size()\n            << \"\\n\\tthis:     \" << this\n            );\n\n\n        n = A.nc();\n        V.set_size(n,n);\n        d.set_size(n);\n        e.set_size(n);\n\n\n        issymmetric = true;\n        for (long j = 0; (j < n) && issymmetric; j++) \n        {\n            for (long i = 0; (i < n) && issymmetric; i++) \n            {\n                issymmetric = (A(i,j) == A(j,i));\n            }\n        }\n\n        if (issymmetric) \n        {\n            V = A;\n\n#ifdef DLIB_USE_LAPACK\n            if (A.nr() > DLIB_LAPACK_EIGENVALUE_DECOMP_SIZE_THRESH)\n            {\n                e = 0;\n\n                // We could compute the result using syev()\n                //lapack::syev('V', 'L', V,  d);\n\n                // Instead, we use syevr because its faster and maybe more stable.\n                matrix_type tempA(A);\n                matrix<lapack::integer,0,0,mem_manager_type,layout_type> isupz;\n\n                lapack::integer temp;\n                lapack::syevr('V','A','L',tempA,0,0,0,0,-1,temp,d,V,isupz);\n            }\n#endif\n            // Tridiagonalize.\n            tred2();\n\n            // Diagonalize.\n            tql2();\n\n        } \n        else \n        {\n\n#ifdef DLIB_USE_LAPACK\n            if (A.nr() > DLIB_LAPACK_EIGENVALUE_DECOMP_SIZE_THRESH)\n            {\n                matrix<type,0,0,mem_manager_type, column_major_layout> temp, vl, vr;\n                temp = A;\n                lapack::geev('N', 'V', temp, d, e, vl, vr);\n                V = vr;\n                return;\n            }\n#endif\n            H = A;\n\n            ort.set_size(n);\n\n            // Reduce to Hessenberg form.\n            orthes();\n\n            // Reduce Hessenberg to real Schur form.\n            hqr2();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    eigenvalue_decomposition<matrix_exp_type>::\n    eigenvalue_decomposition(\n        const matrix_op<op_make_symmetric<EXP> >& A\n    ) \n    {\n        COMPILE_TIME_ASSERT((is_same_type<type, typename EXP::type>::value));\n\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(A.nr() == A.nc() && A.size() > 0,\n            \"\\teigenvalue_decomposition::eigenvalue_decomposition(A)\"\n            << \"\\n\\tYou can only use this on square matrices\"\n            << \"\\n\\tA.nr():   \" << A.nr()\n            << \"\\n\\tA.nc():   \" << A.nc()\n            << \"\\n\\tA.size(): \" << A.size()\n            << \"\\n\\tthis:     \" << this\n            );\n\n\n        n = A.nc();\n        V.set_size(n,n);\n        d.set_size(n);\n        e.set_size(n);\n\n\n        V = A;\n\n#ifdef DLIB_USE_LAPACK\n        if (A.nr() > DLIB_LAPACK_EIGENVALUE_DECOMP_SIZE_THRESH)\n        {\n            e = 0;\n\n            // We could compute the result using syev()\n            //lapack::syev('V', 'L', V,  d);\n\n            // Instead, we use syevr because its faster and maybe more stable.\n            matrix_type tempA(A);\n            matrix<lapack::integer,0,0,mem_manager_type,layout_type> isupz;\n\n            lapack::integer temp;\n            lapack::syevr('V','A','L',tempA,0,0,0,0,-1,temp,d,V,isupz);\n            return;\n        }\n#endif\n        // Tridiagonalize.\n        tred2();\n\n        // Diagonalize.\n        tql2();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename eigenvalue_decomposition<matrix_exp_type>::matrix_type& eigenvalue_decomposition<matrix_exp_type>::\n    get_pseudo_v (\n    ) const\n    {\n        return V;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    long eigenvalue_decomposition<matrix_exp_type>::\n    dim (\n    ) const\n    {\n        return V.nr();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename eigenvalue_decomposition<matrix_exp_type>::complex_column_vector_type eigenvalue_decomposition<matrix_exp_type>::\n    get_eigenvalues (\n    ) const\n    {\n        return complex_matrix(get_real_eigenvalues(), get_imag_eigenvalues());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename eigenvalue_decomposition<matrix_exp_type>::column_vector_type& eigenvalue_decomposition<matrix_exp_type>::\n    get_real_eigenvalues (\n    ) const\n    {\n        return d;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename eigenvalue_decomposition<matrix_exp_type>::column_vector_type& eigenvalue_decomposition<matrix_exp_type>::\n    get_imag_eigenvalues (\n    ) const\n    {\n        return e;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename eigenvalue_decomposition<matrix_exp_type>::complex_matrix_type eigenvalue_decomposition<matrix_exp_type>::\n    get_d (\n    ) const \n    {\n        return diagm(complex_matrix(get_real_eigenvalues(), get_imag_eigenvalues()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename eigenvalue_decomposition<matrix_exp_type>::complex_matrix_type eigenvalue_decomposition<matrix_exp_type>::\n    get_v (\n    ) const \n    {\n        complex_matrix_type CV(n,n);\n\n        for (long i = 0; i < n; i++) \n        {\n            if (e(i) > 0) \n            {\n                set_colm(CV,i) = complex_matrix(colm(V,i), colm(V,i+1));\n            } \n            else if (e(i) < 0) \n            {\n                set_colm(CV,i) = complex_matrix(colm(V,i), colm(V,i-1));\n            }\n            else\n            {\n                set_colm(CV,i) = complex_matrix(colm(V,i), uniform_matrix<type>(n,1,0));\n            }\n        }\n\n        return CV;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename eigenvalue_decomposition<matrix_exp_type>::matrix_type eigenvalue_decomposition<matrix_exp_type>::\n    get_pseudo_d (\n    ) const \n    {\n        matrix_type D(n,n);\n\n        for (long i = 0; i < n; i++) \n        {\n            for (long j = 0; j < n; j++) \n            {\n                D(i,j) = 0.0;\n            }\n            D(i,i) = d(i);\n            if (e(i) > 0) \n            {\n                D(i,i+1) = e(i);\n            } \n            else if (e(i) < 0) \n            {\n                D(i,i-1) = e(i);\n            }\n        }\n\n        return D;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                        Private member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n// Symmetric Householder reduction to tridiagonal form.\n    template <typename matrix_exp_type>\n    void eigenvalue_decomposition<matrix_exp_type>::\n    tred2() \n    {\n        using std::abs;\n        using std::sqrt;\n\n        //  This is derived from the Algol procedures tred2 by\n        //  Bowdler, Martin, Reinsch, and Wilkinson, Handbook for\n        //  Auto. Comp., Vol.ii-Linear Algebra, and the corresponding\n        //  Fortran subroutine in EISPACK.\n\n        for (long j = 0; j < n; j++) \n        {\n            d(j) = V(n-1,j);\n        }\n\n        // Householder reduction to tridiagonal form.\n\n        for (long i = n-1; i > 0; i--) \n        {\n\n            // Scale to avoid under/overflow.\n\n            type scale = 0.0;\n            type h = 0.0;\n            for (long k = 0; k < i; k++) \n            {\n                scale = scale + abs(d(k));\n            }\n            if (scale == 0.0) \n            {\n                e(i) = d(i-1);\n                for (long j = 0; j < i; j++) \n                {\n                    d(j) = V(i-1,j);\n                    V(i,j) = 0.0;\n                    V(j,i) = 0.0;\n                }\n            }\n            else \n            {\n\n                // Generate Householder vector.\n\n                for (long k = 0; k < i; k++) \n                {\n                    d(k) /= scale;\n                    h += d(k) * d(k);\n                }\n                type f = d(i-1);\n                type g = sqrt(h);\n                if (f > 0) \n                {\n                    g = -g;\n                }\n                e(i) = scale * g;\n                h = h - f * g;\n                d(i-1) = f - g;\n                for (long j = 0; j < i; j++) \n                {\n                    e(j) = 0.0;\n                }\n\n                // Apply similarity transformation to remaining columns.\n\n                for (long j = 0; j < i; j++) \n                {\n                    f = d(j);\n                    V(j,i) = f;\n                    g = e(j) + V(j,j) * f;\n                    for (long k = j+1; k <= i-1; k++) \n                    {\n                        g += V(k,j) * d(k);\n                        e(k) += V(k,j) * f;\n                    }\n                    e(j) = g;\n                }\n                f = 0.0;\n                for (long j = 0; j < i; j++) \n                {\n                    e(j) /= h;\n                    f += e(j) * d(j);\n                }\n                type hh = f / (h + h);\n                for (long j = 0; j < i; j++) \n                {\n                    e(j) -= hh * d(j);\n                }\n                for (long j = 0; j < i; j++) \n                {\n                    f = d(j);\n                    g = e(j);\n                    for (long k = j; k <= i-1; k++) \n                    {\n                        V(k,j) -= (f * e(k) + g * d(k));\n                    }\n                    d(j) = V(i-1,j);\n                    V(i,j) = 0.0;\n                }\n            }\n            d(i) = h;\n        }\n\n        // Accumulate transformations.\n\n        for (long i = 0; i < n-1; i++) \n        {\n            V(n-1,i) = V(i,i);\n            V(i,i) = 1.0;\n            type h = d(i+1);\n            if (h != 0.0) \n            {\n                for (long k = 0; k <= i; k++) \n                {\n                    d(k) = V(k,i+1) / h;\n                }\n                for (long j = 0; j <= i; j++) \n                {\n                    type g = 0.0;\n                    for (long k = 0; k <= i; k++) \n                    {\n                        g += V(k,i+1) * V(k,j);\n                    }\n                    for (long k = 0; k <= i; k++) \n                    {\n                        V(k,j) -= g * d(k);\n                    }\n                }\n            }\n            for (long k = 0; k <= i; k++) \n            {\n                V(k,i+1) = 0.0;\n            }\n        }\n        for (long j = 0; j < n; j++) \n        {\n            d(j) = V(n-1,j);\n            V(n-1,j) = 0.0;\n        }\n        V(n-1,n-1) = 1.0;\n        e(0) = 0.0;\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    void eigenvalue_decomposition<matrix_exp_type>::\n    tql2 () \n    {\n        using std::pow;\n        using std::min;\n        using std::max;\n        using std::abs;\n\n        //  This is derived from the Algol procedures tql2, by\n        //  Bowdler, Martin, Reinsch, and Wilkinson, Handbook for\n        //  Auto. Comp., Vol.ii-Linear Algebra, and the corresponding\n        //  Fortran subroutine in EISPACK.\n\n        for (long i = 1; i < n; i++) \n        {\n            e(i-1) = e(i);\n        }\n        e(n-1) = 0.0;\n\n        type f = 0.0;\n        type tst1 = 0.0;\n        const type eps = std::numeric_limits<type>::epsilon();\n        for (long l = 0; l < n; l++) \n        {\n\n            // Find small subdiagonal element\n\n            tst1 = max(tst1,abs(d(l)) + abs(e(l)));\n            long m = l;\n\n            // Original while-loop from Java code\n            while (m < n) \n            {\n                if (abs(e(m)) <= eps*tst1) \n                {\n                    break;\n                }\n                m++;\n            }\n            if (m == n)\n                --m;\n\n\n            // If m == l, d(l) is an eigenvalue,\n            // otherwise, iterate.\n\n            if (m > l) \n            {\n                long iter = 0;\n                do \n                {\n                    iter = iter + 1;  // (Could check iteration count here.)\n\n                    // Compute implicit shift\n\n                    type g = d(l);\n                    type p = (d(l+1) - g) / (2.0 * e(l));\n                    type r = hypot(p,1.0);\n                    if (p < 0) \n                    {\n                        r = -r;\n                    }\n                    d(l) = e(l) / (p + r);\n                    d(l+1) = e(l) * (p + r);\n                    type dl1 = d(l+1);\n                    type h = g - d(l);\n                    for (long i = l+2; i < n; i++) \n                    {\n                        d(i) -= h;\n                    }\n                    f = f + h;\n\n                    // Implicit QL transformation.\n\n                    p = d(m);\n                    type c = 1.0;\n                    type c2 = c;\n                    type c3 = c;\n                    type el1 = e(l+1);\n                    type s = 0.0;\n                    type s2 = 0.0;\n                    for (long i = m-1; i >= l; i--) \n                    {\n                        c3 = c2;\n                        c2 = c;\n                        s2 = s;\n                        g = c * e(i);\n                        h = c * p;\n                        r = hypot(p,e(i));\n                        e(i+1) = s * r;\n                        s = e(i) / r;\n                        c = p / r;\n                        p = c * d(i) - s * g;\n                        d(i+1) = h + s * (c * g + s * d(i));\n\n                        // Accumulate transformation.\n\n                        for (long k = 0; k < n; k++) \n                        {\n                            h = V(k,i+1);\n                            V(k,i+1) = s * V(k,i) + c * h;\n                            V(k,i) = c * V(k,i) - s * h;\n                        }\n                    }\n                    p = -s * s2 * c3 * el1 * e(l) / dl1;\n                    e(l) = s * p;\n                    d(l) = c * p;\n\n                    // Check for convergence.\n\n                } while (abs(e(l)) > eps*tst1);\n            }\n            d(l) = d(l) + f;\n            e(l) = 0.0;\n        }\n\n        /*\n            The code to sort the eigenvalues and eigenvectors \n            has been removed from here since, in the non-symmetric case,\n            we can't sort the eigenvalues in a meaningful way.  If we left this\n            code in here then the user might supply what they thought was a symmetric\n            matrix but was actually slightly non-symmetric due to rounding error\n            and then they would end up in the non-symmetric eigenvalue solver\n            where the eigenvalues don't end up getting sorted.  So to avoid\n            any possible user confusion I'm just removing this.\n        */\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    void eigenvalue_decomposition<matrix_exp_type>::\n    orthes () \n    {\n        using std::abs;\n        using std::sqrt;\n\n        //  This is derived from the Algol procedures orthes and ortran,\n        //  by Martin and Wilkinson, Handbook for Auto. Comp.,\n        //  Vol.ii-Linear Algebra, and the corresponding\n        //  Fortran subroutines in EISPACK.\n\n        long low = 0;\n        long high = n-1;\n\n        for (long m = low+1; m <= high-1; m++) \n        {\n\n            // Scale column.\n\n            type scale = 0.0;\n            for (long i = m; i <= high; i++) \n            {\n                scale = scale + abs(H(i,m-1));\n            }\n            if (scale != 0.0) \n            {\n\n                // Compute Householder transformation.\n\n                type h = 0.0;\n                for (long i = high; i >= m; i--) \n                {\n                    ort(i) = H(i,m-1)/scale;\n                    h += ort(i) * ort(i);\n                }\n                type g = sqrt(h);\n                if (ort(m) > 0) \n                {\n                    g = -g;\n                }\n                h = h - ort(m) * g;\n                ort(m) = ort(m) - g;\n\n                // Apply Householder similarity transformation\n                // H = (I-u*u'/h)*H*(I-u*u')/h)\n\n                for (long j = m; j < n; j++) \n                {\n                    type f = 0.0;\n                    for (long i = high; i >= m; i--) \n                    {\n                        f += ort(i)*H(i,j);\n                    }\n                    f = f/h;\n                    for (long i = m; i <= high; i++) \n                    {\n                        H(i,j) -= f*ort(i);\n                    }\n                }\n\n                for (long i = 0; i <= high; i++) \n                {\n                    type f = 0.0;\n                    for (long j = high; j >= m; j--) \n                    {\n                        f += ort(j)*H(i,j);\n                    }\n                    f = f/h;\n                    for (long j = m; j <= high; j++) \n                    {\n                        H(i,j) -= f*ort(j);\n                    }\n                }\n                ort(m) = scale*ort(m);\n                H(m,m-1) = scale*g;\n            }\n        }\n\n        // Accumulate transformations (Algol's ortran).\n\n        for (long i = 0; i < n; i++) \n        {\n            for (long j = 0; j < n; j++) \n            {\n                V(i,j) = (i == j ? 1.0 : 0.0);\n            }\n        }\n\n        for (long m = high-1; m >= low+1; m--) \n        {\n            if (H(m,m-1) != 0.0) \n            {\n                for (long i = m+1; i <= high; i++) \n                {\n                    ort(i) = H(i,m-1);\n                }\n                for (long j = m; j <= high; j++) \n                {\n                    type g = 0.0;\n                    for (long i = m; i <= high; i++) \n                    {\n                        g += ort(i) * V(i,j);\n                    }\n                    // Double division avoids possible underflow\n                    g = (g / ort(m)) / H(m,m-1);\n                    for (long i = m; i <= high; i++) \n                    {\n                        V(i,j) += g * ort(i);\n                    }\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    void eigenvalue_decomposition<matrix_exp_type>::\n    cdiv_(type xr, type xi, type yr, type yi)  \n    {\n        using std::abs;\n        type r,d;\n        if (abs(yr) > abs(yi)) \n        {\n            r = yi/yr;\n            d = yr + r*yi;\n            cdivr = (xr + r*xi)/d;\n            cdivi = (xi - r*xr)/d;\n        } \n        else \n        {\n            r = yr/yi;\n            d = yi + r*yr;\n            cdivr = (r*xr + xi)/d;\n            cdivi = (r*xi - xr)/d;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    void eigenvalue_decomposition<matrix_exp_type>::\n    hqr2 ()\n    {\n        using std::pow;\n        using std::min;\n        using std::max;\n        using std::abs;\n        using std::sqrt;\n\n        //  This is derived from the Algol procedure hqr2,\n        //  by Martin and Wilkinson, Handbook for Auto. Comp.,\n        //  Vol.ii-Linear Algebra, and the corresponding\n        //  Fortran subroutine in EISPACK.\n\n        // Initialize\n\n        long nn = this->n;\n        long n = nn-1;\n        long low = 0;\n        long high = nn-1;\n        const type eps = std::numeric_limits<type>::epsilon();\n        type exshift = 0.0;\n        type p=0,q=0,r=0,s=0,z=0,t,w,x,y;\n\n        // Store roots isolated by balanc and compute matrix norm\n\n        type norm = 0.0;\n        for (long i = 0; i < nn; i++) \n        {\n            if ((i < low) || (i > high)) \n            {\n                d(i) = H(i,i);\n                e(i) = 0.0;\n            }\n            for (long j = max(i-1,0L); j < nn; j++) \n            {\n                norm = norm + abs(H(i,j));\n            }\n        }\n\n        // Outer loop over eigenvalue index\n\n        long iter = 0;\n        while (n >= low) \n        {\n\n            // Look for single small sub-diagonal element\n\n            long l = n;\n            while (l > low) \n            {\n                s = abs(H(l-1,l-1)) + abs(H(l,l));\n                if (s == 0.0) \n                {\n                    s = norm;\n                }\n                if (abs(H(l,l-1)) < eps * s) \n                {\n                    break;\n                }\n                l--;\n            }\n\n            // Check for convergence\n            // One root found\n\n            if (l == n) \n            {\n                H(n,n) = H(n,n) + exshift;\n                d(n) = H(n,n);\n                e(n) = 0.0;\n                n--;\n                iter = 0;\n\n                // Two roots found\n\n            } \n            else if (l == n-1) \n            {\n                w = H(n,n-1) * H(n-1,n);\n                p = (H(n-1,n-1) - H(n,n)) / 2.0;\n                q = p * p + w;\n                z = sqrt(abs(q));\n                H(n,n) = H(n,n) + exshift;\n                H(n-1,n-1) = H(n-1,n-1) + exshift;\n                x = H(n,n);\n\n                // type pair\n\n                if (q >= 0) \n                {\n                    if (p >= 0) \n                    {\n                        z = p + z;\n                    } \n                    else \n                    {\n                        z = p - z;\n                    }\n                    d(n-1) = x + z;\n                    d(n) = d(n-1);\n                    if (z != 0.0) \n                    {\n                        d(n) = x - w / z;\n                    }\n                    e(n-1) = 0.0;\n                    e(n) = 0.0;\n                    x = H(n,n-1);\n                    s = abs(x) + abs(z);\n                    p = x / s;\n                    q = z / s;\n                    r = sqrt(p * p+q * q);\n                    p = p / r;\n                    q = q / r;\n\n                    // Row modification\n\n                    for (long j = n-1; j < nn; j++) \n                    {\n                        z = H(n-1,j);\n                        H(n-1,j) = q * z + p * H(n,j);\n                        H(n,j) = q * H(n,j) - p * z;\n                    }\n\n                    // Column modification\n\n                    for (long i = 0; i <= n; i++) \n                    {\n                        z = H(i,n-1);\n                        H(i,n-1) = q * z + p * H(i,n);\n                        H(i,n) = q * H(i,n) - p * z;\n                    }\n\n                    // Accumulate transformations\n\n                    for (long i = low; i <= high; i++) \n                    {\n                        z = V(i,n-1);\n                        V(i,n-1) = q * z + p * V(i,n);\n                        V(i,n) = q * V(i,n) - p * z;\n                    }\n\n                    // Complex pair\n\n                } \n                else \n                {\n                    d(n-1) = x + p;\n                    d(n) = x + p;\n                    e(n-1) = z;\n                    e(n) = -z;\n                }\n                n = n - 2;\n                iter = 0;\n\n                // No convergence yet\n\n            } \n            else \n            {\n\n                // Form shift\n\n                x = H(n,n);\n                y = 0.0;\n                w = 0.0;\n                if (l < n) \n                {\n                    y = H(n-1,n-1);\n                    w = H(n,n-1) * H(n-1,n);\n                }\n\n                // Wilkinson's original ad hoc shift\n\n                if (iter == 10) \n                {\n                    exshift += x;\n                    for (long i = low; i <= n; i++) \n                    {\n                        H(i,i) -= x;\n                    }\n                    s = abs(H(n,n-1)) + abs(H(n-1,n-2));\n                    x = y = 0.75 * s;\n                    w = -0.4375 * s * s;\n                }\n\n                // MATLAB's new ad hoc shift\n\n                if (iter == 30) \n                {\n                    s = (y - x) / 2.0;\n                    s = s * s + w;\n                    if (s > 0) \n                    {\n                        s = sqrt(s);\n                        if (y < x) \n                        {\n                            s = -s;\n                        }\n                        s = x - w / ((y - x) / 2.0 + s);\n                        for (long i = low; i <= n; i++) \n                        {\n                            H(i,i) -= s;\n                        }\n                        exshift += s;\n                        x = y = w = 0.964;\n                    }\n                }\n\n                iter = iter + 1;   // (Could check iteration count here.)\n\n                // Look for two consecutive small sub-diagonal elements\n\n                long m = n-2;\n                while (m >= l) \n                {\n                    z = H(m,m);\n                    r = x - z;\n                    s = y - z;\n                    p = (r * s - w) / H(m+1,m) + H(m,m+1);\n                    q = H(m+1,m+1) - z - r - s;\n                    r = H(m+2,m+1);\n                    s = abs(p) + abs(q) + abs(r);\n                    p = p / s;\n                    q = q / s;\n                    r = r / s;\n                    if (m == l) \n                    {\n                        break;\n                    }\n                    if (abs(H(m,m-1)) * (abs(q) + abs(r)) <\n                        eps * (abs(p) * (abs(H(m-1,m-1)) + abs(z) +\n                                         abs(H(m+1,m+1))))) \n                    {\n                        break;\n                    }\n                    m--;\n                }\n\n                for (long i = m+2; i <= n; i++) \n                {\n                    H(i,i-2) = 0.0;\n                    if (i > m+2) \n                    {\n                        H(i,i-3) = 0.0;\n                    }\n                }\n\n                // Double QR step involving rows l:n and columns m:n\n\n                for (long k = m; k <= n-1; k++) \n                {\n                    long notlast = (k != n-1);\n                    if (k != m) \n                    {\n                        p = H(k,k-1);\n                        q = H(k+1,k-1);\n                        r = (notlast ? H(k+2,k-1) : 0.0);\n                        x = abs(p) + abs(q) + abs(r);\n                        if (x != 0.0) \n                        {\n                            p = p / x;\n                            q = q / x;\n                            r = r / x;\n                        }\n                    }\n                    if (x == 0.0) \n                    {\n                        break;\n                    }\n                    s = sqrt(p * p + q * q + r * r);\n                    if (p < 0) \n                    {\n                        s = -s;\n                    }\n                    if (s != 0) \n                    {\n                        if (k != m) \n                        {\n                            H(k,k-1) = -s * x;\n                        } \n                        else if (l != m) \n                        {\n                            H(k,k-1) = -H(k,k-1);\n                        }\n                        p = p + s;\n                        x = p / s;\n                        y = q / s;\n                        z = r / s;\n                        q = q / p;\n                        r = r / p;\n\n                        // Row modification\n\n                        for (long j = k; j < nn; j++) \n                        {\n                            p = H(k,j) + q * H(k+1,j);\n                            if (notlast) \n                            {\n                                p = p + r * H(k+2,j);\n                                H(k+2,j) = H(k+2,j) - p * z;\n                            }\n                            H(k,j) = H(k,j) - p * x;\n                            H(k+1,j) = H(k+1,j) - p * y;\n                        }\n\n                        // Column modification\n\n                        for (long i = 0; i <= min(n,k+3); i++) \n                        {\n                            p = x * H(i,k) + y * H(i,k+1);\n                            if (notlast) \n                            {\n                                p = p + z * H(i,k+2);\n                                H(i,k+2) = H(i,k+2) - p * r;\n                            }\n                            H(i,k) = H(i,k) - p;\n                            H(i,k+1) = H(i,k+1) - p * q;\n                        }\n\n                        // Accumulate transformations\n\n                        for (long i = low; i <= high; i++) \n                        {\n                            p = x * V(i,k) + y * V(i,k+1);\n                            if (notlast) \n                            {\n                                p = p + z * V(i,k+2);\n                                V(i,k+2) = V(i,k+2) - p * r;\n                            }\n                            V(i,k) = V(i,k) - p;\n                            V(i,k+1) = V(i,k+1) - p * q;\n                        }\n                    }  // (s != 0)\n                }  // k loop\n            }  // check convergence\n        }  // while (n >= low)\n\n        // Backsubstitute to find vectors of upper triangular form\n\n        if (norm == 0.0) \n        {\n            return;\n        }\n\n        for (n = nn-1; n >= 0; n--) \n        {\n            p = d(n);\n            q = e(n);\n\n            // Real vector\n\n            if (q == 0) \n            {\n                long l = n;\n                H(n,n) = 1.0;\n                for (long i = n-1; i >= 0; i--) \n                {\n                    w = H(i,i) - p;\n                    r = 0.0;\n                    for (long j = l; j <= n; j++) \n                    {\n                        r = r + H(i,j) * H(j,n);\n                    }\n                    if (e(i) < 0.0) \n                    {\n                        z = w;\n                        s = r;\n                    } \n                    else \n                    {\n                        l = i;\n                        if (e(i) == 0.0) \n                        {\n                            if (w != 0.0) \n                            {\n                                H(i,n) = -r / w;\n                            } \n                            else \n                            {\n                                H(i,n) = -r / (eps * norm);\n                            }\n\n                            // Solve real equations\n\n                        } \n                        else \n                        {\n                            x = H(i,i+1);\n                            y = H(i+1,i);\n                            q = (d(i) - p) * (d(i) - p) + e(i) * e(i);\n                            t = (x * s - z * r) / q;\n                            H(i,n) = t;\n                            if (abs(x) > abs(z)) \n                            {\n                                H(i+1,n) = (-r - w * t) / x;\n                            } \n                            else \n                            {\n                                H(i+1,n) = (-s - y * t) / z;\n                            }\n                        }\n\n                        // Overflow control\n\n                        t = abs(H(i,n));\n                        if ((eps * t) * t > 1) \n                        {\n                            for (long j = i; j <= n; j++) \n                            {\n                                H(j,n) = H(j,n) / t;\n                            }\n                        }\n                    }\n                }\n\n                // Complex vector\n\n            } \n            else if (q < 0) \n            {\n                long l = n-1;\n\n                // Last vector component imaginary so matrix is triangular\n\n                if (abs(H(n,n-1)) > abs(H(n-1,n))) \n                {\n                    H(n-1,n-1) = q / H(n,n-1);\n                    H(n-1,n) = -(H(n,n) - p) / H(n,n-1);\n                } \n                else \n                {\n                    cdiv_(0.0,-H(n-1,n),H(n-1,n-1)-p,q);\n                    H(n-1,n-1) = cdivr;\n                    H(n-1,n) = cdivi;\n                }\n                H(n,n-1) = 0.0;\n                H(n,n) = 1.0;\n                for (long i = n-2; i >= 0; i--) \n                {\n                    type ra,sa,vr,vi;\n                    ra = 0.0;\n                    sa = 0.0;\n                    for (long j = l; j <= n; j++) \n                    {\n                        ra = ra + H(i,j) * H(j,n-1);\n                        sa = sa + H(i,j) * H(j,n);\n                    }\n                    w = H(i,i) - p;\n\n                    if (e(i) < 0.0) \n                    {\n                        z = w;\n                        r = ra;\n                        s = sa;\n                    } \n                    else \n                    {\n                        l = i;\n                        if (e(i) == 0) \n                        {\n                            cdiv_(-ra,-sa,w,q);\n                            H(i,n-1) = cdivr;\n                            H(i,n) = cdivi;\n                        } \n                        else \n                        {\n\n                            // Solve complex equations\n\n                            x = H(i,i+1);\n                            y = H(i+1,i);\n                            vr = (d(i) - p) * (d(i) - p) + e(i) * e(i) - q * q;\n                            vi = (d(i) - p) * 2.0 * q;\n                            if ((vr == 0.0) && (vi == 0.0)) \n                            {\n                                vr = eps * norm * (abs(w) + abs(q) +\n                                                   abs(x) + abs(y) + abs(z));\n                            }\n                            cdiv_(x*r-z*ra+q*sa,x*s-z*sa-q*ra,vr,vi);\n                            H(i,n-1) = cdivr;\n                            H(i,n) = cdivi;\n                            if (abs(x) > (abs(z) + abs(q))) \n                            {\n                                H(i+1,n-1) = (-ra - w * H(i,n-1) + q * H(i,n)) / x;\n                                H(i+1,n) = (-sa - w * H(i,n) - q * H(i,n-1)) / x;\n                            }\n                            else \n                            {\n                                cdiv_(-r-y*H(i,n-1),-s-y*H(i,n),z,q);\n                                H(i+1,n-1) = cdivr;\n                                H(i+1,n) = cdivi;\n                            }\n                        }\n\n                        // Overflow control\n\n                        t = max(abs(H(i,n-1)),abs(H(i,n)));\n                        if ((eps * t) * t > 1) \n                        {\n                            for (long j = i; j <= n; j++) \n                            {\n                                H(j,n-1) = H(j,n-1) / t;\n                                H(j,n) = H(j,n) / t;\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        // Vectors of isolated roots\n\n        for (long i = 0; i < nn; i++) \n        {\n            if (i < low || i > high) \n            {\n                for (long j = i; j < nn; j++) \n                {\n                    V(i,j) = H(i,j);\n                }\n            }\n        }\n\n        // Back transformation to get eigenvectors of original matrix\n\n        for (long j = nn-1; j >= low; j--) \n        {\n            for (long i = low; i <= high; i++) \n            {\n                z = 0.0;\n                for (long k = low; k <= min(j,high); k++) \n                {\n                    z = z + V(i,k) * H(k,j);\n                }\n                V(i,j) = z;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n} \n\n#endif // DLIB_MATRIX_EIGENVALUE_DECOMPOSITION_H \n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_exp.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_EXP_h_\n#define DLIB_MATRIx_EXP_h_\n\n#include \"../algs.h\"\n#include \"../is_kind.h\"\n#include \"matrix_fwd.h\"\n#include \"matrix_exp_abstract.h\"\n#include <iterator>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    // We want to return the compile time constant if our NR and NC dimensions\n    // aren't zero but if they are then we want to call ref_.nx() and return\n    // the correct values. \n    template < typename exp_type, long NR >\n    struct get_nr_helper\n    {\n        static inline long get(const exp_type&) { return NR; }\n    };\n\n    template < typename exp_type >\n    struct get_nr_helper<exp_type,0>\n    {\n        static inline long get(const exp_type& m) { return m.nr(); }\n    };\n\n    template < typename exp_type, long NC >\n    struct get_nc_helper\n    {\n        static inline long get(const exp_type&) { return NC; }\n    };\n\n    template < typename exp_type >\n    struct get_nc_helper<exp_type,0>\n    {\n        static inline long get(const exp_type& m) { return m.nc(); }\n    };\n\n    template <typename EXP>\n    struct matrix_traits\n    {\n        typedef typename EXP::type type;\n        typedef typename EXP::const_ret_type const_ret_type;\n        typedef typename EXP::mem_manager_type mem_manager_type;\n        typedef typename EXP::layout_type layout_type;\n        const static long NR = EXP::NR;\n        const static long NC = EXP::NC;\n        const static long cost = EXP::cost;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP> class matrix_exp;\n    template <typename EXP>\n    class matrix_exp_iterator : public std::iterator<std::forward_iterator_tag, typename matrix_traits<EXP>::type>\n    {\n        friend class matrix_exp<EXP>;\n        matrix_exp_iterator(const EXP& m_, long r_, long c_)\n        {\n            r = r_;\n            c = c_;\n            nc = m_.nc();\n            m = &m_;\n        }\n\n    public:\n\n        matrix_exp_iterator() : r(0), c(0), nc(0), m(0) {}\n\n        typedef typename matrix_traits<EXP>::type type;\n        typedef type value_type;\n        typedef typename matrix_traits<EXP>::const_ret_type const_ret_type;\n\n\n        bool operator == ( const matrix_exp_iterator& itr) const\n        { return r == itr.r && c == itr.c; }\n\n        bool operator != ( const matrix_exp_iterator& itr) const\n        { return !(*this == itr); }\n\n        matrix_exp_iterator& operator++()\n        {\n            ++c;\n            if (c==nc)\n            {\n                c = 0;\n                ++r;\n            }\n            return *this;\n        }\n\n        matrix_exp_iterator operator++(int)\n        {\n            matrix_exp_iterator temp(*this);\n            ++(*this);\n            return temp;\n        }\n\n        const_ret_type operator* () const { return (*m)(r,c); }\n\n    private:\n        long r, c;\n        long nc;\n        const EXP* m;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    class matrix_exp \n    {\n        /*!\n            REQUIREMENTS ON EXP\n                EXP should be something convertible to a matrix_exp.  That is,\n                it should inherit from matrix_exp\n        !*/\n\n    public:\n        typedef typename matrix_traits<EXP>::type type;\n        typedef type value_type;\n        typedef typename matrix_traits<EXP>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<EXP>::mem_manager_type mem_manager_type;\n        typedef typename matrix_traits<EXP>::layout_type layout_type;\n        const static long NR = matrix_traits<EXP>::NR;\n        const static long NC = matrix_traits<EXP>::NC;\n        const static long cost = matrix_traits<EXP>::cost;\n\n        typedef matrix<type,NR,NC,mem_manager_type,layout_type> matrix_type;\n        typedef EXP exp_type;\n        typedef matrix_exp_iterator<EXP> iterator;\n        typedef matrix_exp_iterator<EXP> const_iterator;\n\n        inline const_ret_type operator() (\n            long r,\n            long c\n        ) const \n        { \n            DLIB_ASSERT(r < nr() && c < nc() && r >= 0 && c >= 0, \n                \"\\tconst type matrix_exp::operator(r,c)\"\n                << \"\\n\\tYou must give a valid row and column\"\n                << \"\\n\\tr:    \" << r \n                << \"\\n\\tc:    \" << c\n                << \"\\n\\tnr(): \" << nr()\n                << \"\\n\\tnc(): \" << nc() \n                << \"\\n\\tthis: \" << this\n                );\n            return ref()(r,c); \n        }\n\n        const_ret_type operator() (\n            long i\n        ) const \n        {\n            COMPILE_TIME_ASSERT(NC == 1 || NC == 0 || NR == 1 || NR == 0);\n            DLIB_ASSERT(nc() == 1 || nr() == 1, \n                \"\\tconst type matrix_exp::operator(i)\"\n                << \"\\n\\tYou can only use this operator on column or row vectors\"\n                << \"\\n\\ti:    \" << i\n                << \"\\n\\tnr(): \" << nr()\n                << \"\\n\\tnc(): \" << nc()\n                << \"\\n\\tthis: \" << this\n                );\n            DLIB_ASSERT( ((nc() == 1 && i < nr()) || (nr() == 1 && i < nc())) && i >= 0, \n                \"\\tconst type matrix_exp::operator(i)\"\n                << \"\\n\\tYou must give a valid row/column number\"\n                << \"\\n\\ti:    \" << i\n                << \"\\n\\tnr(): \" << nr()\n                << \"\\n\\tnc(): \" << nc()\n                << \"\\n\\tthis: \" << this\n                );\n            if (nc() == 1)\n                return ref()(i,0);\n            else\n                return ref()(0,i);\n        }\n\n        long size (\n        ) const { return nr()*nc(); }\n\n        long nr (\n        ) const { return get_nr_helper<exp_type,NR>::get(ref()); }\n\n        long nc (\n        ) const { return get_nc_helper<exp_type,NC>::get(ref()); }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const { return ref().aliases(item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const { return ref().destructively_aliases(item); }\n\n        inline const exp_type& ref (\n        ) const { return *static_cast<const exp_type*>(this); }\n\n        inline operator const type (\n        ) const \n        {\n            COMPILE_TIME_ASSERT(NC == 1 || NC == 0);\n            COMPILE_TIME_ASSERT(NR == 1 || NR == 0);\n            DLIB_ASSERT(nr() == 1 && nc() == 1, \n                \"\\tmatrix_exp::operator const type() const\"\n                << \"\\n\\tYou can only use this operator on a 1x1 matrix\"\n                << \"\\n\\tnr(): \" << nr()\n                << \"\\n\\tnc(): \" << nc()\n                << \"\\n\\tthis: \" << this\n                );\n\n            // Put the expression contained in this matrix_exp into\n            // a temporary 1x1 matrix so that the expression will encounter\n            // all the overloads of matrix_assign() and have the chance to\n            // go through any applicable optimizations.\n            matrix<type,1,1,mem_manager_type,layout_type> temp(ref());\n            return temp(0);\n        }\n\n        const_iterator begin() const { return matrix_exp_iterator<EXP>(ref(),0,0); }\n        const_iterator end()   const { return matrix_exp_iterator<EXP>(ref(),nr(),0); }\n\n    protected:\n        matrix_exp() {}\n        matrix_exp(const matrix_exp& ) {}\n\n    private:\n\n        matrix_exp& operator= (const matrix_exp&);\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    // something is a matrix if it is convertible to a matrix_exp object\n    template <typename T>\n    struct is_matrix<T, typename enable_if<is_convertible<T, const matrix_exp<typename T::exp_type>& > >::type > \n    { static const bool value = true; }; \n    /*\n        is_matrix<T>::value == 1 if T is a matrix type else 0\n    */\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    class matrix_diag_exp : public matrix_exp<EXP> \n    {\n        /*!\n            This is a matrix expression type used to represent diagonal matrices.\n            That is, square matrices with all off diagonal elements equal to 0.\n        !*/\n\n    protected:\n        matrix_diag_exp() {}\n        matrix_diag_exp(const matrix_diag_exp& item ):matrix_exp<EXP>(item) {}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_EXP_h_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_exp_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MATRIx_EXP_ABSTRACT_\n#ifdef DLIB_MATRIx_EXP_ABSTRACT_\n\n#include \"matrix_fwd.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    class matrix_exp\n    {\n        /*!\n            REQUIREMENTS ON EXP\n                - must be an object that inherits publicly from matrix_exp (this class).\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an expression that evaluates to a matrix \n                of nr() rows and nc() columns.  \n                \n                The reason for having an object that represents an expression is that it \n                allows us to use the \"expression templates\" technique to eliminate the \n                temporary matrix objects that would normally be returned from expressions \n                such as M = A+B+C+D;  Normally each invocation of the + operator would\n                construct and return a temporary matrix object but using this technique we \n                can avoid creating all of these temporary objects and receive a large \n                speed boost.\n\n                Note that every time you invoke operator() on this object it recomputes \n                its result which may not be what you want to do.  For example, if you \n                are going to be accessing the same element over and over it might \n                be faster to assign the matrix_exp to a temporary matrix and then \n                use that temporary.\n\n\n                const_ret_type typedef (defined below)\n                    The purpose of the const_ret_type typedef is to allow matrix expressions\n                    to return their elements by reference when appropriate.  So const_ret_type \n                    should be one of the following types:\n                        - const type\n                        - const type& \n        !*/\n\n    public:\n        typedef typename EXP::type type;\n        typedef type value_type; // Redefined for compatibility with the STL\n        typedef typename EXP::const_ret_type const_ret_type;\n        typedef typename EXP::mem_manager_type mem_manager_type;\n        typedef typename EXP::layout_type layout_type;\n        const static long cost = EXP::cost;\n        const static long NR = EXP::NR;\n        const static long NC = EXP::NC;\n        typedef matrix<type,NR,NC, mem_manager_type,layout_type> matrix_type;\n        typedef EXP exp_type;\n        typedef matrix_exp_iterator<EXP> iterator;\n        typedef matrix_exp_iterator<EXP> const_iterator;\n\n        const_ret_type operator() (\n            long r,\n            long c\n        ) const;\n        /*!\n            requires\n                - 0 <= r < nr()\n                - 0 <= c < nc()\n            ensures\n                - returns ref()(r,c)\n                  (i.e. returns the value at the given row and column that would be in\n                  the matrix represented by this matrix expression)\n        !*/\n\n        const_ret_type operator() (\n            long i\n        ) const;\n        /*!\n            requires\n                - nc() == 1 || nr() == 1 (i.e. this must be a column or row vector)\n                - if (nc() == 1) then\n                    - 0 <= i < nr()\n                - else\n                    - 0 <= i < nc()\n            ensures\n                - if (nc() == 1) then\n                    - returns (*this)(i,0)\n                - else\n                    - returns (*this)(0,i)\n        !*/\n\n        operator const type (\n        ) const;\n        /*!\n            requires\n                - nr() == 1\n                - nc() == 1\n            ensures\n                - returns (*this)(0,0)\n        !*/\n\n        long nr (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in this matrix expression. \n        !*/\n\n        long nc (\n        ) const; \n        /*!\n            ensures\n                - returns the number of columns in this matrix expression.\n        !*/\n\n        long size (\n        ) const;\n        /*!\n            ensures\n                - returns nr()*nc()\n        !*/\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const;\n        /*!\n            ensures\n                - if (A change to the state of item could cause a change to the state of *this\n                      matrix_exp object.  ) then\n                    - returns true\n                    - This happens when this matrix_exp contains item in some way. \n                - else\n                    - returns false\n        !*/\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const; \n        /*!\n            ensures\n                - if (aliases(item)) then \n                    - if (nr() != item.nr() || nc() != item.nc()\n                        - returns true\n                          (i.e. if this expression has different dimensions than item then\n                          we have destructive aliasing)\n\n                    - returns true if the following assignment would evaluate incorrectly:\n                      for (long r = 0; r < nr(); ++r)\n                        for (long c = 0; c < nc(); ++c)\n                          item(r,c) = (*this)(r,c)\n                    - That is, if this matrix expression aliases item in such a way that a modification\n                      to element item(r,c) causes a change in the value of something other than\n                      (*this)(r,c) then this function returns true.  \n\n                    - returns false if none of the above conditions say we should return true\n                - else\n                    - returns false\n        !*/\n\n        inline const exp_type& ref (\n        ) const; \n        /*!\n            ensures\n                - returns a reference to the expression contained in *this.\n                  (i.e. returns *static_cast<const exp_type*>(this) )\n        !*/\n\n        const_iterator begin(\n        ) const;\n        /*!\n            ensures\n                - returns a forward access iterator pointing to the first element in this\n                  matrix expression.\n                - Since matrix_exp objects represent immutable views of a matrix, the\n                  returned iterator does not allow the user to modify the matrix\n                  expression's elements.\n                - The iterator will iterate over the elements of the matrix in row major\n                  order.\n        !*/\n\n        const_iterator end(\n        ) const;\n        /*!\n            ensures\n                - returns a forward access iterator pointing to one past the end of the\n                  last element in this matrix expression.\n        !*/\n\n    protected:\n\n        // Only derived classes of matrix_exp may call the matrix_exp constructors.\n        matrix_exp(const matrix_exp&); \n        matrix_exp();\n\n    private:\n        // no one may ever use the assignment operator on a matrix_exp\n        matrix_exp& operator= (const matrix_exp&);\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_EXP_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_expressions.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_EXPRESSIONS_H_\n#define DLIB_MATRIx_EXPRESSIONS_H_\n\n#include \"matrix_fwd.h\"\n\n#ifdef _MSC_VER\n// This #pragma directive is also located in the algs.h file but for whatever\n// reason visual studio 9 just ignores it when it is only there. \n\n// this is to disable the \"'this' : used in base member initializer list\"\n// warning you get from some of the GUI objects since all the objects\n// require that their parent class be passed into their constructor. \n// In this case though it is totally safe so it is ok to disable this warning.\n#pragma warning(disable : 4355)\n#endif\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//            Helper templates for making operators used by expression objects\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class matrix_range_exp;\n\n    template <typename T>\n    struct matrix_traits<matrix_range_exp<T> >\n    {\n        typedef T type;\n        typedef const T const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n        const static long NR = 1;\n        const static long NC = 0;\n        const static long cost = 1;\n    };\n\n    template <typename T>\n    class matrix_range_exp : public matrix_exp<matrix_range_exp<T> >\n    {\n    public:\n        typedef typename matrix_traits<matrix_range_exp>::type type;\n        typedef typename matrix_traits<matrix_range_exp>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_range_exp>::mem_manager_type mem_manager_type;\n        const static long NR = matrix_traits<matrix_range_exp>::NR;\n        const static long NC = matrix_traits<matrix_range_exp>::NC;\n        const static long cost = matrix_traits<matrix_range_exp>::cost;\n        typedef typename matrix_traits<matrix_range_exp>::layout_type layout_type;\n\n\n        matrix_range_exp (\n            T start_,\n            T end_\n        ) \n        {\n            start = start_;\n            if (start_ <= end_)\n                inc = 1;\n            else \n                inc = -1;\n            nc_ = std::abs(end_ - start_) + 1;\n        }\n        matrix_range_exp (\n            T start_,\n            T inc_,\n            T end_\n        ) \n        {\n            start = start_;\n            nc_ = std::abs(end_ - start_)/inc_ + 1;\n            if (start_ <= end_)\n                inc = inc_;\n            else\n                inc = -inc_;\n        }\n\n        matrix_range_exp (\n            T start_,\n            T end_,\n            long num,\n            bool\n        ) \n        {\n            start = start_;\n            nc_ = num;\n            if (num > 1)\n            {\n                inc = (end_-start_)/(num-1);\n            }\n            else \n            {\n                inc = 0;\n                start = end_;\n            }\n\n        }\n\n        const_ret_type operator() (\n            long, \n            long c\n        ) const { return start + c*inc;  }\n\n        const_ret_type operator() (\n            long c\n        ) const { return start + c*inc;  }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& \n        ) const { return false; }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& \n        ) const { return false; }\n\n        long nr (\n        ) const { return NR; }\n\n        long nc (\n        ) const { return nc_; }\n\n        long nc_;\n        T start;\n        T inc;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class matrix_log_range_exp;\n\n    template <typename T>\n    struct matrix_traits<matrix_log_range_exp<T> >\n    {\n        typedef T type;\n        typedef const T const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n        const static long NR = 1;\n        const static long NC = 0;\n        const static long cost = 1;\n    };\n\n    template <typename T>\n    class matrix_log_range_exp : public matrix_exp<matrix_log_range_exp<T> >\n    {\n    public:\n        typedef typename matrix_traits<matrix_log_range_exp>::type type;\n        typedef typename matrix_traits<matrix_log_range_exp>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_log_range_exp>::mem_manager_type mem_manager_type;\n        const static long NR = matrix_traits<matrix_log_range_exp>::NR;\n        const static long NC = matrix_traits<matrix_log_range_exp>::NC;\n        const static long cost = matrix_traits<matrix_log_range_exp>::cost;\n        typedef typename matrix_traits<matrix_log_range_exp>::layout_type layout_type;\n\n\n        matrix_log_range_exp (\n            T start_,\n            T end_,\n            long num\n        ) \n        {\n            start = start_;\n            nc_ = num;\n            if (num > 1)\n            {\n                inc = (end_-start_)/(num-1);\n            }\n            else \n            {\n                inc = 0;\n                start = end_;\n            }\n\n        }\n\n        const_ret_type operator() (\n            long,\n            long c\n        ) const { return std::pow((T)10,start + c*inc);  }\n\n        const_ret_type operator() (\n            long c\n        ) const { return std::pow((T)10,start + c*inc);  }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& \n        ) const { return false; }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& \n        ) const { return false; }\n\n        long nr (\n        ) const { return NR; }\n\n        long nc (\n        ) const { return nc_; }\n\n        long nc_;\n        T start;\n        T inc;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <long start, long inc_, long end>\n    class matrix_range_static_exp;\n\n    template <long start, long inc_, long end>\n    struct matrix_traits<matrix_range_static_exp<start,inc_,end> >\n    {\n        typedef long type;\n        typedef const long const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        const static long NR = 1;\n        const static long NC = tabs<(end - start)>::value/inc_ + 1;\n        const static long cost = 1;\n        typedef row_major_layout layout_type;\n    };\n\n    template <long start, long inc_, long end_>\n    class matrix_range_static_exp : public matrix_exp<matrix_range_static_exp<start,inc_,end_> > \n    {\n    public:\n        typedef typename matrix_traits<matrix_range_static_exp>::type type;\n        typedef typename matrix_traits<matrix_range_static_exp>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_range_static_exp>::mem_manager_type mem_manager_type;\n        const static long NR = matrix_traits<matrix_range_static_exp>::NR;\n        const static long NC = matrix_traits<matrix_range_static_exp>::NC;\n        const static long cost = matrix_traits<matrix_range_static_exp>::cost;\n        typedef typename matrix_traits<matrix_range_static_exp>::layout_type layout_type;\n\n        const static long inc = (start <= end_)?inc_:-inc_;\n\n\n        matrix_range_static_exp (\n        ) {}\n\n        const_ret_type operator() (\n            long , \n            long c\n        ) const { return start + c*inc;  }\n\n        const_ret_type operator() (\n            long c\n        ) const { return start + c*inc;  }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& \n        ) const { return false; }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& \n        ) const { return false; }\n\n        long nr (\n        ) const { return NR; }\n\n        long nc (\n        ) const { return NC; }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_EXPRESSIONS_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_fft.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FFt_Hh_\n#define DLIB_FFt_Hh_\n\n#include \"matrix_fft_abstract.h\"\n#include \"matrix_utilities.h\"\n#include \"../hash.h\"\n#include \"../algs.h\"\n\n#ifdef DLIB_USE_FFTW\n#include <fftw3.h>\n#endif // DLIB_USE_FFTW\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline unsigned long reverse_bits (\n            unsigned long val,\n            unsigned long num\n        )\n        {\n            unsigned long temp = 0;\n            for (unsigned long i = 0; i < num; ++i)\n            {\n                temp <<= 1;\n                temp |= val&0x1;\n                val >>= 1;\n            }\n            return temp;\n        }\n\n        template <typename EXP>\n        void permute (\n            const matrix_exp<EXP>& data, \n            typename EXP::matrix_type& outdata \n        )  \n        {\n            outdata.set_size(data.size());\n            if (data.size() == 0)\n                return;\n\n            const unsigned long num = static_cast<unsigned long>(std::log((double)data.size())/std::log(2.0) + 0.5);\n            for (unsigned long i = 0; i < (unsigned long)data.size(); ++i)\n            {\n                outdata(impl::reverse_bits(i,num)) = data(i);\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool is_power_of_two (\n        const unsigned long& value\n    )\n    {\n        if (value == 0)\n            return true;\n        else\n            return count_bits(value) == 1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    typename EXP::matrix_type fft (\n        const matrix_exp<EXP>& data\n    )  \n    {\n        if (data.size() == 0)\n            return data;\n\n        // You have to give a complex matrix\n        COMPILE_TIME_ASSERT(is_complex<typename EXP::type>::value);\n        // make sure requires clause is not broken\n        DLIB_CASSERT(is_vector(data) && is_power_of_two(data.size()),\n            \"\\t void ifft(data)\"\n            << \"\\n\\t data must be a vector with a size that is a power of two.\"\n            << \"\\n\\t is_vector(data): \" << is_vector(data)\n            << \"\\n\\t data.size():     \" << data.size()\n            );\n\n        typedef typename EXP::type::value_type T;\n\n        typename EXP::matrix_type outdata(data);\n\n        const long half = outdata.size()/2;\n\n        typedef std::complex<T> ct;\n        matrix<ct,0,1,typename EXP::mem_manager_type> twiddle_factors(half);\n\n        // compute the complex root of unity w\n        const T temp = -2.0*pi/outdata.size();\n        ct w = ct(std::cos(temp),std::sin(temp));\n\n        ct w_pow = 1;\n\n        // compute the twiddle factors\n        for (long j = 0; j < twiddle_factors.size(); ++j)\n        {\n            twiddle_factors(j) = w_pow; \n            w_pow *= w;\n        }\n\n\n        // now compute the decimation in frequency.  This first\n        // outer loop loops log2(outdata.size()) number of times\n        long skip = 1;\n        for (long step = half; step != 0; step >>= 1)\n        {\n            // do blocks of butterflies in this loop\n            for (long j = 0; j < outdata.size(); j += step*2)\n            {\n                // do step butterflies\n                for (long k = 0; k < step; ++k)\n                {\n                    const long a_idx = j+k;\n                    const long b_idx = j+k+step;\n                    const ct a = outdata(a_idx) + outdata(b_idx);\n                    const ct b = (outdata(a_idx) - outdata(b_idx))*twiddle_factors(k*skip);\n                    outdata(a_idx) = a;\n                    outdata(b_idx) = b;\n                }\n            }\n            skip *= 2;\n        }\n\n        typename EXP::matrix_type outperm;\n        impl::permute(outdata, outperm);\n        return outperm;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    typename EXP::matrix_type ifft (\n        const matrix_exp<EXP>& data\n    )  \n    {\n        if (data.size() == 0)\n            return data;\n\n        // You have to give a complex matrix\n        COMPILE_TIME_ASSERT(is_complex<typename EXP::type>::value);\n        // make sure requires clause is not broken\n        DLIB_CASSERT(is_vector(data) && is_power_of_two(data.size()),\n            \"\\t void ifft(data)\"\n            << \"\\n\\t data must be a vector with a size that is a power of two.\"\n            << \"\\n\\t is_vector(data): \" << is_vector(data)\n            << \"\\n\\t data.size():     \" << data.size()\n            );\n\n\n        typedef typename EXP::type::value_type T;\n\n        typename EXP::matrix_type outdata;\n        impl::permute(data,outdata);\n\n        const long half = outdata.size()/2;\n\n        typedef std::complex<T> ct;\n        matrix<ct,0,1,typename EXP::mem_manager_type> twiddle_factors(half);\n\n        // compute the complex root of unity w\n        const T temp = 2.0*pi/outdata.size();\n        ct w = ct(std::cos(temp),std::sin(temp));\n\n        ct w_pow = 1;\n\n        // compute the twiddle factors\n        for (long j = 0; j < twiddle_factors.size(); ++j)\n        {\n            twiddle_factors(j) = w_pow; \n            w_pow *= w;\n        }\n\n        // now compute the inverse decimation in frequency.  This first\n        // outer loop loops log2(outdata.size()) number of times\n        long skip = half;\n        for (long step = 1; step <= half; step <<= 1)\n        {\n            // do blocks of butterflies in this loop\n            for (long j = 0; j < outdata.size(); j += step*2)\n            {\n                // do step butterflies\n                for (long k = 0; k < step; ++k)\n                {\n                    const long a_idx = j+k;\n                    const long b_idx = j+k+step;\n                    outdata(b_idx) *= twiddle_factors(k*skip);\n                    const ct a = outdata(a_idx) + outdata(b_idx);\n                    const ct b = outdata(a_idx) - outdata(b_idx);\n                    outdata(a_idx) = a;\n                    outdata(b_idx) = b;\n                }\n            }\n            skip /= 2;\n        }\n\n        outdata /= outdata.size();\n        return outdata;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n#ifdef DLIB_USE_FFTW\n\n    template <long NR, long NC, typename MM, typename L>\n    matrix<std::complex<double>,NR,NC,MM,L> call_fftw_fft(\n        const matrix<std::complex<double>,NR,NC,MM,L>& data\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(is_vector(data) && is_power_of_two(data.size()),\n            \"\\t void fft(data)\"\n            << \"\\n\\t data must be a vector with a size that is a power of two.\"\n            << \"\\n\\t is_vector(data): \" << is_vector(data)\n            << \"\\n\\t data.size():     \" << data.size()\n            );\n\n        matrix<std::complex<double>,NR,NC,MM,L> m2(data.nr(),data.nc());\n        fftw_complex *in, *out;\n        fftw_plan p;\n        in = (fftw_complex*)&data(0);\n        out = (fftw_complex*)&m2(0);\n        p = fftw_plan_dft_1d(data.size(), in, out, FFTW_FORWARD, FFTW_ESTIMATE);\n        fftw_execute(p); \n        fftw_destroy_plan(p);\n        return m2;\n    }\n\n    template <long NR, long NC, typename MM, typename L>\n    matrix<std::complex<double>,NR,NC,MM,L> call_fftw_ifft(\n        const matrix<std::complex<double>,NR,NC,MM,L>& data\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(is_vector(data) && is_power_of_two(data.size()),\n            \"\\t void ifft(data)\"\n            << \"\\n\\t data must be a vector with a size that is a power of two.\"\n            << \"\\n\\t is_vector(data): \" << is_vector(data)\n            << \"\\n\\t data.size():     \" << data.size()\n            );\n\n        matrix<std::complex<double>,NR,NC,MM,L> m2(data.nr(),data.nc());\n        fftw_complex *in, *out;\n        fftw_plan p;\n        in = (fftw_complex*)&data(0);\n        out = (fftw_complex*)&m2(0);\n        p = fftw_plan_dft_1d(data.size(), in, out, FFTW_BACKWARD, FFTW_ESTIMATE);\n        fftw_execute(p); \n        fftw_destroy_plan(p);\n        return m2/data.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// call FFTW for these cases:\n    inline matrix<std::complex<double>,0,1> fft (const matrix<std::complex<double>,0,1>& data) {return call_fftw_fft(data);}\n    inline matrix<std::complex<double>,0,1> ifft(const matrix<std::complex<double>,0,1>& data) {return call_fftw_ifft(data);}\n    inline matrix<std::complex<double>,1,0> fft (const matrix<std::complex<double>,1,0>& data) {return call_fftw_fft(data);}\n    inline matrix<std::complex<double>,1,0> ifft(const matrix<std::complex<double>,1,0>& data) {return call_fftw_ifft(data);}\n    inline matrix<std::complex<double> > fft (const matrix<std::complex<double> >& data) {return call_fftw_fft(data);}\n    inline matrix<std::complex<double> > ifft(const matrix<std::complex<double> >& data) {return call_fftw_ifft(data);}\n\n#endif // DLIB_USE_FFTW\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FFt_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_fft_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FFt_ABSTRACT_Hh_\n#ifdef DLIB_FFt_ABSTRACT_Hh_\n\n#include \"matrix_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    bool is_power_of_two (\n        const unsigned long& value\n    );\n    /*!\n        ensures\n            - returns true if value contains a power of two and false otherwise.  As a\n              special case, we also consider 0 to be a power of two.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    typename EXP::matrix_type fft (\n        const matrix_exp<EXP>& data\n    );  \n    /*!\n        requires\n            - data contains elements of type std::complex<>\n            - is_vector(data) == true\n            - is_power_of_two(data.size()) == true\n        ensures\n            - Computes the discrete Fourier transform of the given data vector and\n              returns it.  In particular, we return a matrix D such that:\n                - D.nr() == data.nr()\n                - D.nc() == data.nc()\n                - D(0) == the DC term of the Fourier transform.\n                - starting with D(0), D contains progressively higher frequency components\n                  of the input data.\n                - ifft(D) == D\n            - if DLIB_USE_FFTW is #defined then this function will use the very fast fftw\n              library when given double precision matrices instead of dlib's default fft\n              implementation.  Note that you must also link to the fftw3 library to use\n              this feature.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    typename EXP::matrix_type ifft (\n        const matrix_exp<EXP>& data\n    );  \n    /*!\n        requires\n            - data contains elements of type std::complex<>\n            - is_vector(data) == true\n            - is_power_of_two(data.size()) == true\n        ensures\n            - Computes the inverse discrete Fourier transform of the given data vector and\n              returns it.  In particular, we return a matrix D such that:\n                - D.nr() == data.nr()\n                - D.nc() == data.nc()\n                - fft(D) == data \n            - if DLIB_USE_FFTW is #defined then this function will use the very fast fftw\n              library when given double precision matrices instead of dlib's default fft\n              implementation.  Note that you must also link to the fftw3 library to use\n              this feature.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FFt_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_fwd.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_FWD\n#define DLIB_MATRIx_FWD\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct row_major_layout;\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long num_rows = 0,\n        long num_cols = 0,\n        typename mem_manager = default_memory_manager,\n        typename layout = row_major_layout \n        >\n    class matrix; \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_FWD\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_generic_image.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIX_GENERIC_iMAGE_Hh_\n#define DLIB_MATRIX_GENERIC_iMAGE_Hh_\n\n#include \"matrix.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM\n        >\n    struct image_traits<matrix<T,NR,NC,MM> >\n    {\n        typedef T pixel_type;\n    };\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM\n        >\n    inline long num_rows( const matrix<T,NR,NC,MM>& img) { return img.nr(); }\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM\n        >\n    inline long num_columns( const matrix<T,NR,NC,MM>& img) { return img.nc(); }\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM\n        >\n    inline void set_image_size(\n        matrix<T,NR,NC,MM>& img,\n        long rows,\n        long cols \n    ) { img.set_size(rows,cols); }\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM\n        >\n    inline void* image_data(\n        matrix<T,NR,NC,MM>& img\n    )\n    {\n        if (img.size() != 0)\n            return &img(0,0);\n        else\n            return 0;\n    }\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM\n        >\n    inline const void* image_data(\n        const matrix<T,NR,NC,MM>& img\n    )\n    {\n        if (img.size() != 0)\n            return &img(0,0);\n        else\n            return 0;\n    }\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM\n        >\n    inline long width_step(\n        const matrix<T,NR,NC,MM>& img\n    ) \n    { \n        return img.nc()*sizeof(T);\n    }\n\n}\n\n#endif // DLIB_MATRIX_GENERIC_iMAGE_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_la.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_LA_FUNCTS_\n#define DLIB_MATRIx_LA_FUNCTS_ \n\n#include \"matrix_la_abstract.h\"\n#include \"matrix_utilities.h\"\n#include \"../sparse_vector.h\"\n\n// The 4 decomposition objects described in the matrix_la_abstract.h file are\n// actually implemented in the following 4 files.  \n#include \"matrix_lu.h\"\n#include \"matrix_qr.h\"\n#include \"matrix_cholesky.h\"\n#include \"matrix_eigenvalue.h\"\n\n#ifdef DLIB_USE_LAPACK\n#include \"lapack/potrf.h\"\n#include \"lapack/gesdd.h\"\n#include \"lapack/gesvd.h\"\n#endif\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace nric\n    {\n        // This namespace contains stuff adapted from the algorithms \n        // described in the book Numerical Recipes in C\n\n        template <typename T>\n        inline T pythag(const T& a, const T& b)\n        {\n            T absa,absb;\n            absa=std::abs(a);\n            absb=std::abs(b);\n            if (absa > absb) \n            {\n                T val = absb/absa;\n                val *= val;\n                return absa*std::sqrt(1.0+val);\n            }\n            else \n            {\n                if (absb == 0.0)\n                {\n                    return 0.0;\n                }\n                else\n                {\n                    T val = absa/absb;\n                    val *= val;\n                    return  absb*std::sqrt(1.0+val);\n                }\n            }\n        }\n\n        template <typename T>\n        inline T sign(const T& a, const T& b)\n        {\n            if (b < 0)\n            {\n                return -std::abs(a);\n            }\n            else\n            {\n                return std::abs(a);\n            }\n        }\n\n\n        template <\n            typename T,\n            long M, long N,\n            long wN, long wX,\n            long vN, \n            long rN, long rX,\n            typename MM1,\n            typename MM2,\n            typename MM3,\n            typename MM4,\n            typename L1,\n            typename L2,\n            typename L3,\n            typename L4\n            >\n        bool svdcmp(\n            matrix<T,M,N,MM1,L1>& a,  \n            matrix<T,wN,wX,MM2,L2>& w,\n            matrix<T,vN,vN,MM3,L3>& v,\n            matrix<T,rN,rX,MM4,L4>& rv1\n        )\n        /*!  ( this function is derived from the one in numerical recipes in C chapter 2.6)\n            requires\n                - w.nr() == a.nc()\n                - w.nc() == 1\n                - v.nr() == a.nc()\n                - v.nc() == a.nc()\n                - rv1.nr() == a.nc()\n                - rv1.nc() == 1\n            ensures\n                - computes the singular value decomposition of a\n                - let W be the matrix such that diag(W) == #w then:\n                    - a == #a*W*trans(#v)\n                - trans(#a)*#a == identity matrix\n                - trans(#v)*#v == identity matrix\n                - #rv1 == some undefined value\n                - returns true for success and false for failure\n        !*/\n        {\n\n            DLIB_ASSERT(\n                 w.nr() == a.nc() &&\n                 w.nc() == 1 &&\n                 v.nr() == a.nc() &&\n                 v.nc() == a.nc() &&\n                 rv1.nr() == a.nc() &&\n                 rv1.nc() == 1, \"\");\n\n            COMPILE_TIME_ASSERT(wX == 0 || wX == 1);\n            COMPILE_TIME_ASSERT(rX == 0 || rX == 1);\n\n            const T one = 1.0;\n            const long max_iter = 300;\n            const long n = a.nc();\n            const long m = a.nr();\n            const T eps = std::numeric_limits<T>::epsilon();\n            long nm = 0, l = 0;\n            bool flag;\n            T anorm,c,f,g,h,s,scale,x,y,z;\n            g = 0.0;\n            scale = 0.0;\n            anorm = 0.0; \n\n            for (long i = 0; i < n; ++i) \n            {\n                l = i+1;\n                rv1(i) = scale*g;\n                g = s = scale = 0.0;\n                if (i < m) \n                {\n                    for (long k = i; k < m; ++k) \n                        scale += std::abs(a(k,i));\n\n                    if (scale) \n                    {\n                        for (long k = i; k < m; ++k) \n                        {\n                            a(k,i) /= scale;\n                            s += a(k,i)*a(k,i);\n                        }\n                        f = a(i,i);\n                        g = -sign(std::sqrt(s),f);\n                        h = f*g - s;\n                        a(i,i) = f - g;\n                        for (long j = l; j < n; ++j) \n                        {\n                            s = 0.0;\n                            for (long k = i; k < m; ++k) \n                                s += a(k,i)*a(k,j);\n\n                            f = s/h;\n\n                            for (long k = i; k < m; ++k) \n                                a(k,j) += f*a(k,i);\n                        }\n                        for (long k = i; k < m; ++k) \n                            a(k,i) *= scale;\n                    }\n                }\n\n                w(i) = scale *g;\n\n                g=s=scale=0.0;\n\n                if (i < m && i < n-1) \n                {\n                    for (long k = l; k < n; ++k) \n                        scale += std::abs(a(i,k));\n\n                    if (scale) \n                    {\n                        for (long k = l; k < n; ++k) \n                        {\n                            a(i,k) /= scale;\n                            s += a(i,k)*a(i,k);\n                        }\n                        f = a(i,l);\n                        g = -sign(std::sqrt(s),f);\n                        h = f*g - s;\n                        a(i,l) = f - g;\n\n                        for (long k = l; k < n; ++k) \n                            rv1(k) = a(i,k)/h;\n\n                        for (long j = l; j < m; ++j) \n                        {\n                            s = 0.0;\n                            for (long k = l; k < n; ++k) \n                                s += a(j,k)*a(i,k);\n\n                            for (long k = l; k < n; ++k) \n                                a(j,k) += s*rv1(k);\n                        }\n                        for (long k = l; k < n; ++k) \n                            a(i,k) *= scale;\n                    }\n                }\n                anorm = std::max(anorm,(std::abs(w(i))+std::abs(rv1(i))));\n            }\n            for (long i = n-1; i >= 0; --i) \n            { \n                if (i < n-1) \n                {\n                    if (g != 0) \n                    {\n                        for (long j = l; j < n ; ++j) \n                            v(j,i) = (a(i,j)/a(i,l))/g;\n\n                        for (long j = l; j < n; ++j) \n                        {\n                            s = 0.0;\n                            for (long k = l; k < n; ++k) \n                                s += a(i,k)*v(k,j);\n\n                            for (long k = l; k < n; ++k) \n                                v(k,j) += s*v(k,i);\n                        }\n                    }\n\n                    for (long j = l; j < n; ++j) \n                        v(i,j) = v(j,i) = 0.0;\n                }\n\n                v(i,i) = 1.0;\n                g = rv1(i);\n                l = i;\n            }\n\n            for (long i = std::min(m,n)-1; i >= 0; --i) \n            { \n                l = i + 1;\n                g = w(i);\n\n                for (long j = l; j < n; ++j) \n                    a(i,j) = 0.0;\n\n                if (g != 0) \n                {\n                    g = 1.0/g;\n\n                    for (long j = l; j < n; ++j) \n                    {\n                        s = 0.0;\n                        for (long k = l; k < m; ++k) \n                            s += a(k,i)*a(k,j);\n\n                        f=(s/a(i,i))*g;\n\n                        for (long k = i; k < m; ++k) \n                            a(k,j) += f*a(k,i);\n                    }\n                    for (long j = i; j < m; ++j) \n                        a(j,i) *= g;\n                } \n                else \n                {\n                    for (long j = i; j < m; ++j) \n                        a(j,i) = 0.0;\n                }\n\n                ++a(i,i);\n            }\n\n            for (long k = n-1; k >= 0; --k) \n            { \n                for (long its = 1; its <= max_iter; ++its) \n                { \n                    flag = true;\n                    for (l = k; l >= 1; --l) \n                    { \n                        nm = l - 1; \n                        if (std::abs(rv1(l)) <= eps*anorm) \n                        {\n                            flag = false;\n                            break;\n                        }\n                        if (std::abs(w(nm)) <= eps*anorm) \n                        {\n                            break;\n                        }\n                    }\n\n                    if (flag) \n                    {\n                        c = 0.0;  \n                        s = 1.0;\n                        for (long i = l; i <= k; ++i) \n                        {\n                            f = s*rv1(i);\n                            rv1(i) = c*rv1(i);\n                            if (std::abs(f) <= eps*anorm) \n                                break;\n\n                            g = w(i);\n                            h = pythag(f,g);\n                            w(i) = h;\n                            h = 1.0/h;\n                            c = g*h;\n                            s = -f*h;\n                            for (long j = 0; j < m; ++j) \n                            {\n                                y = a(j,nm);\n                                z = a(j,i);\n                                a(j,nm) = y*c + z*s;\n                                a(j,i) = z*c - y*s;\n                            }\n                        }\n                    }\n\n                    z = w(k);\n                    if (l == k) \n                    { \n                        if (z < 0.0) \n                        {\n                            w(k) = -z;\n                            for (long j = 0; j < n; ++j) \n                                v(j,k) = -v(j,k);\n                        }\n                        break;\n                    }\n\n                    if (its == max_iter) \n                        return false;\n\n                    x = w(l); \n                    nm = k - 1;\n                    y = w(nm);\n                    g = rv1(nm);\n                    h = rv1(k);\n                    f = ((y-z)*(y+z) + (g-h)*(g+h))/(2.0*h*y);\n                    g = pythag(f,one);\n                    f = ((x-z)*(x+z) + h*((y/(f+sign(g,f)))-h))/x;\n                    c = s = 1.0; \n                    for (long j = l; j <= nm; ++j) \n                    {\n                        long i = j + 1;\n                        g = rv1(i);\n                        y = w(i);\n                        h = s*g;\n                        g = c*g;\n                        z = pythag(f,h);\n                        rv1(j) = z;\n                        c = f/z;\n                        s = h/z;\n                        f = x*c + g*s;\n                        g = g*c - x*s;\n                        h = y*s;\n                        y *= c;\n                        for (long jj = 0; jj < n; ++jj) \n                        {\n                            x = v(jj,j);\n                            z = v(jj,i);\n                            v(jj,j) = x*c + z*s;\n                            v(jj,i) = z*c - x*s;\n                        }\n                        z = pythag(f,h);\n                        w(j) = z; \n                        if (z != 0) \n                        {\n                            z = 1.0/z;\n                            c = f*z;\n                            s = h*z;\n                        }\n                        f = c*g + s*y;\n                        x = c*y - s*g;\n                        for (long jj = 0; jj < m; ++jj) \n                        {\n                            y = a(jj,j);\n                            z = a(jj,i);\n                            a(jj,j) = y*c + z*s;\n                            a(jj,i) = z*c - y*s;\n                        }\n                    }\n                    rv1(l) = 0.0;\n                    rv1(k) = f;\n                    w(k) = x;\n                }\n            }\n            return true;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        long qN, long qX,\n        long uM, \n        long vN, \n        typename MM1,\n        typename MM2,\n        typename MM3,\n        typename L1\n        >\n    long svd2 (\n        bool withu, \n        bool withv, \n        const matrix_exp<EXP>& a,\n        matrix<typename EXP::type,uM,uM,MM1,L1>& u, \n        matrix<typename EXP::type,qN,qX,MM2,L1>& q, \n        matrix<typename EXP::type,vN,vN,MM3,L1>& v\n    )\n    {\n        /*  \n            Singular value decomposition. Translated to 'C' from the\n            original Algol code in \"Handbook for Automatic Computation,\n            vol. II, Linear Algebra\", Springer-Verlag.  Note that this\n            published algorithm is considered to be the best and numerically\n            stable approach to computing the real-valued svd and is referenced\n            repeatedly in ieee journal papers, etc where the svd is used.\n\n            This is almost an exact translation from the original, except that\n            an iteration counter is added to prevent stalls. This corresponds\n            to similar changes in other translations.\n\n            Returns an error code = 0, if no errors and 'k' if a failure to\n            converge at the 'kth' singular value.\n\n            USAGE: given the singular value decomposition a = u * diagm(q) * trans(v) for an m*n \n                    matrix a with m >= n ...  \n                    After the svd call u is an m x m matrix which is columnwise \n                    orthogonal. q will be an n element vector consisting of singular values \n                    and v an n x n orthogonal matrix. eps and tol are tolerance constants. \n                    Suitable values are eps=1e-16 and tol=(1e-300)/eps if T == double. \n\n                    If withu == false then u won't be computed and similarly if withv == false\n                    then v won't be computed.\n        */\n\n        const long NR = matrix_exp<EXP>::NR;\n        const long NC = matrix_exp<EXP>::NC;\n\n        // make sure the output matrices have valid dimensions if they are statically dimensioned\n        COMPILE_TIME_ASSERT(qX == 0 || qX == 1);\n        COMPILE_TIME_ASSERT(NR == 0 || uM == 0 || NR == uM);\n        COMPILE_TIME_ASSERT(NC == 0 || vN == 0 || NC == vN);\n\n        DLIB_ASSERT(a.nr() >= a.nc(), \n            \"\\tconst matrix_exp svd2()\"\n            << \"\\n\\tYou have given an invalidly sized matrix\"\n            << \"\\n\\ta.nr(): \" << a.nr()\n            << \"\\n\\ta.nc(): \" << a.nc() \n            );\n\n\n        typedef typename EXP::type T;\n\n#ifdef DLIB_USE_LAPACK\n        matrix<typename EXP::type,0,0,MM1,L1> temp(a);\n\n        char jobu = 'A';\n        char jobvt = 'A';\n        if (withu == false)\n            jobu = 'N';\n        if (withv == false)\n            jobvt = 'N';\n\n        int info;\n        if (withu == withv)\n        {\n            info = lapack::gesdd(jobu, temp, q, u, v);\n        }\n        else\n        {\n            info = lapack::gesvd(jobu, jobvt, temp, q, u, v);\n        }\n\n        // pad q with zeros if it isn't the length we want\n        if (q.nr() < a.nc())\n            q = join_cols(q, zeros_matrix<T>(a.nc()-q.nr(),1));\n\n        v = trans(v);\n\n        return info;\n#else\n        using std::abs;\n        using std::sqrt;\n\n        T eps = std::numeric_limits<T>::epsilon();\n        T tol = std::numeric_limits<T>::min()/eps;\n\n        const long m = a.nr();\n        const long n = a.nc();\n        long i, j, k, l = 0, l1, iter, retval;\n        T c, f, g, h, s, x, y, z;\n\n        matrix<T,qN,1,MM2> e(n,1); \n        q.set_size(n,1);\n        u.set_size(m,m);\n        retval = 0;\n\n        if (withv)\n        {\n            v.set_size(n,n);\n        }\n\n        /* Copy 'a' to 'u' */    \n        for (i=0; i<m; i++) \n        {\n            for (j=0; j<n; j++)\n                u(i,j) = a(i,j);\n        }\n\n        /* Householder's reduction to bidiagonal form. */\n        g = x = 0.0;    \n        for (i=0; i<n; i++) \n        {\n            e(i) = g;\n            s = 0.0;\n            l = i + 1;\n\n            for (j=i; j<m; j++)\n                s += (u(j,i) * u(j,i));\n\n            if (s < tol)\n                g = 0.0;\n            else \n            {\n                f = u(i,i);\n                g = (f < 0) ? sqrt(s) : -sqrt(s);\n                h = f * g - s;\n                u(i,i) = f - g;\n\n                for (j=l; j<n; j++) \n                {\n                    s = 0.0;\n\n                    for (k=i; k<m; k++)\n                        s += (u(k,i) * u(k,j));\n\n                    f = s / h;\n\n                    for (k=i; k<m; k++)\n                        u(k,j) += (f * u(k,i));\n                } /* end j */\n            } /* end s */\n\n            q(i) = g;\n            s = 0.0;\n\n            for (j=l; j<n; j++)\n                s += (u(i,j) * u(i,j));\n\n            if (s < tol)\n                g = 0.0;\n            else \n            {\n                f = u(i,i+1);\n                g = (f < 0) ? sqrt(s) : -sqrt(s);\n                h = f * g - s;\n                u(i,i+1) = f - g;\n\n                for (j=l; j<n; j++) \n                    e(j) = u(i,j) / h;\n\n                for (j=l; j<m; j++) \n                {\n                    s = 0.0;\n\n                    for (k=l; k<n; k++) \n                        s += (u(j,k) * u(i,k));\n\n                    for (k=l; k<n; k++)\n                        u(j,k) += (s * e(k));\n                } /* end j */\n            } /* end s */\n\n            y = abs(q(i)) + abs(e(i));                         \n            if (y > x)\n                x = y;\n        } /* end i */\n\n        /* accumulation of right-hand transformations */\n        if (withv) \n        {\n            for (i=n-1; i>=0; i--) \n            {\n                if (g != 0.0) \n                {\n                    h = u(i,i+1) * g;\n\n                    for (j=l; j<n; j++)\n                        v(j,i) = u(i,j)/h;\n\n                    for (j=l; j<n; j++) \n                    {\n                        s = 0.0;\n\n                        for (k=l; k<n; k++) \n                            s += (u(i,k) * v(k,j));\n\n                        for (k=l; k<n; k++)\n                            v(k,j) += (s * v(k,i));\n                    } /* end j */\n                } /* end g */\n\n                for (j=l; j<n; j++)\n                    v(i,j) = v(j,i) = 0.0;\n\n                v(i,i) = 1.0;\n                g = e(i);\n                l = i;\n            } /* end i */\n        } /* end withv, parens added for clarity */\n\n        /* accumulation of left-hand transformations */\n        if (withu) \n        {\n            for (i=n; i<m; i++) \n            {\n                for (j=n;j<m;j++)\n                    u(i,j) = 0.0;\n\n                u(i,i) = 1.0;\n            }\n        }\n\n        if (withu) \n        {\n            for (i=n-1; i>=0; i--) \n            {\n                l = i + 1;\n                g = q(i);\n\n                for (j=l; j<m; j++)  /* upper limit was 'n' */\n                    u(i,j) = 0.0;\n\n                if (g != 0.0) \n                {\n                    h = u(i,i) * g;\n\n                    for (j=l; j<m; j++) \n                    { /* upper limit was 'n' */\n                        s = 0.0;\n\n                        for (k=l; k<m; k++)\n                            s += (u(k,i) * u(k,j));\n\n                        f = s / h;\n\n                        for (k=i; k<m; k++) \n                            u(k,j) += (f * u(k,i));\n                    } /* end j */\n\n                    for (j=i; j<m; j++) \n                        u(j,i) /= g;\n                } /* end g */\n                else \n                {\n                    for (j=i; j<m; j++)\n                        u(j,i) = 0.0;\n                }\n\n                u(i,i) += 1.0;\n            } /* end i*/\n        } /* end withu, parens added for clarity */\n\n        /* diagonalization of the bidiagonal form */\n        eps *= x;\n\n        for (k=n-1; k>=0; k--) \n        {\n            iter = 0;\n\ntest_f_splitting:\n\n            for (l=k; l>=0; l--) \n            {\n                if (abs(e(l)) <= eps) \n                    goto test_f_convergence;\n\n                if (abs(q(l-1)) <= eps) \n                    goto cancellation;\n            } /* end l */\n\n            /* cancellation of e(l) if l > 0 */\n\ncancellation:\n\n            c = 0.0;\n            s = 1.0;\n            l1 = l - 1;\n\n            for (i=l; i<=k; i++) \n            {\n                f = s * e(i);\n                e(i) *= c;\n\n                if (abs(f) <= eps) \n                    goto test_f_convergence;\n\n                g = q(i);\n                h = q(i) = sqrt(f*f + g*g);\n                c = g / h;\n                s = -f / h;\n\n                if (withu) \n                {\n                    for (j=0; j<m; j++) \n                    {\n                        y = u(j,l1);\n                        z = u(j,i);\n                        u(j,l1) = y * c + z * s;\n                        u(j,i) = -y * s + z * c;\n                    } /* end j */\n                } /* end withu, parens added for clarity */\n            } /* end i */\n\ntest_f_convergence:\n\n            z = q(k);\n            if (l == k) \n                goto convergence;\n\n            /* shift from bottom 2x2 minor */\n            iter++;\n            if (iter > 300) \n            {\n                retval = k;\n                break;\n            }\n            x = q(l);\n            y = q(k-1);\n            g = e(k-1);\n            h = e(k);\n            f = ((y - z) * (y + z) + (g - h) * (g + h)) / (2 * h * y);\n            g = sqrt(f * f + 1.0);\n            f = ((x - z) * (x + z) + h * (y / ((f < 0)?(f - g) : (f + g)) - h)) / x;\n\n            /* next QR transformation */\n            c = s = 1.0;\n\n            for (i=l+1; i<=k; i++) \n            {\n                g = e(i);\n                y = q(i);\n                h = s * g;\n                g *= c;\n                e(i-1) = z = sqrt(f * f + h * h);\n                c = f / z;\n                s = h / z;\n                f = x * c + g * s;\n                g = -x * s + g * c;\n                h = y * s;\n                y *= c;\n\n                if (withv) \n                {\n                    for (j=0;j<n;j++) \n                    {\n                        x = v(j,i-1);\n                        z = v(j,i);\n                        v(j,i-1) = x * c + z * s;\n                        v(j,i) = -x * s + z * c;\n                    } /* end j */\n                } /* end withv, parens added for clarity */\n\n                q(i-1) = z = sqrt(f * f + h * h);\n                c = f / z;\n                s = h / z;\n                f = c * g + s * y;\n                x = -s * g + c * y;\n                if (withu) \n                {\n                    for (j=0; j<m; j++) \n                    {\n                        y = u(j,i-1);\n                        z = u(j,i);\n                        u(j,i-1) = y * c + z * s;\n                        u(j,i) = -y * s + z * c;\n                    } /* end j */\n                } /* end withu, parens added for clarity */\n            } /* end i */\n\n            e(l) = 0.0;\n            e(k) = f;\n            q(k) = x;\n\n            goto test_f_splitting;\n\nconvergence:\n\n            if (z < 0.0) \n            {\n                /* q(k) is made non-negative */\n                q(k) = -z;\n                if (withv) \n                {\n                    for (j=0; j<n; j++)\n                        v(j,k) = -v(j,k);\n                } /* end withv, parens added for clarity */\n            } /* end z */\n        } /* end k */\n\n        return retval;\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM,\n        typename L\n        >\n    void orthogonalize (\n        matrix<T,NR,NC,MM,L>& m\n    )\n    {\n        qr_decomposition<matrix<T,NR,NC,MM,L> >(m).get_q(m);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long Anr, long Anc,\n        typename MM,\n        typename L\n        >\n    void find_matrix_range (\n        const matrix<T,Anr,Anc,MM,L>& A,\n        unsigned long l,\n        matrix<T,Anr,0,MM,L>& Q,\n        unsigned long q \n    )\n    /*!\n        requires\n            - A.nr() >= l\n        ensures\n            - #Q.nr() == A.nr() \n            - #Q.nc() == l\n            - #Q == an orthonormal matrix whose range approximates the range of the\n              matrix A.  \n            - This function implements the randomized subspace iteration defined \n              in the algorithm 4.4 box of the paper: \n                Finding Structure with Randomness: Probabilistic Algorithms for\n                Constructing Approximate Matrix Decompositions by Halko et al.\n            - q defines the number of extra subspace iterations this algorithm will\n              perform.  Often q == 0 is fine, but performing more iterations can lead to a\n              more accurate approximation of the range of A if A has slowly decaying\n              singular values.  In these cases, using a q of 1 or 2 is good.\n    !*/\n    {\n        DLIB_ASSERT(A.nr() >= (long)l, \"Invalid inputs were given to this function.\");\n        Q = A*matrix_cast<T>(gaussian_randm(A.nc(), l));\n\n        orthogonalize(Q);\n\n        // Do some extra iterations of the power method to make sure we get Q into the \n        // span of the most important singular vectors of A.\n        if (q != 0)\n        {\n            for (unsigned long itr = 0; itr < q; ++itr)\n            {\n                Q = trans(A)*Q;\n                orthogonalize(Q);\n\n                Q = A*Q;\n                orthogonalize(Q);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long Anr, long Anc,\n        long Unr, long Unc,\n        long Wnr, long Wnc,\n        long Vnr, long Vnc,\n        typename MM,\n        typename L\n        >\n    void svd_fast (\n        const matrix<T,Anr,Anc,MM,L>& A,\n        matrix<T,Unr,Unc,MM,L>& u,\n        matrix<T,Wnr,Wnc,MM,L>& w,\n        matrix<T,Vnr,Vnc,MM,L>& v,\n        unsigned long l,\n        unsigned long q = 1\n    )\n    {\n        const unsigned long k = std::min(l, std::min<unsigned long>(A.nr(),A.nc()));\n\n        DLIB_ASSERT(l > 0 && A.size() > 0, \n            \"\\t void svd_fast()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t l: \" << l \n            << \"\\n\\t A.size(): \" << A.size() \n            );\n\n        matrix<T,Anr,0,MM,L> Q;\n        find_matrix_range(A, k, Q, q);\n\n        // Compute trans(B) = trans(Q)*A.   The reason we store B transposed\n        // is so that when we take its SVD later using svd3() it doesn't consume\n        // a whole lot of RAM.  That is, we make sure the square matrix coming out\n        // of svd3() has size lxl rather than the potentially much larger nxn.\n        matrix<T,0,0,MM,L> B = trans(A)*Q;\n        svd3(B, v,w,u);\n        u = Q*u;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sparse_vector_type, \n        typename T,\n        typename MM,\n        typename L\n        >\n    void find_matrix_range (\n        const std::vector<sparse_vector_type>& A,\n        unsigned long l,\n        matrix<T,0,0,MM,L>& Q,\n        unsigned long q \n    )\n    /*!\n        requires\n            - A.size() >= l\n        ensures\n            - #Q.nr() == A.size()\n            - #Q.nc() == l\n            - #Q == an orthonormal matrix whose range approximates the range of the\n              matrix A.  In this case, we interpret A as a matrix of A.size() rows,\n              where each row is defined by a sparse vector.\n            - This function implements the randomized subspace iteration defined \n              in the algorithm 4.4 box of the paper: \n                Finding Structure with Randomness: Probabilistic Algorithms for\n                Constructing Approximate Matrix Decompositions by Halko et al.\n            - q defines the number of extra subspace iterations this algorithm will\n              perform.  Often q == 0 is fine, but performing more iterations can lead to a\n              more accurate approximation of the range of A if A has slowly decaying\n              singular values.  In these cases, using a q of 1 or 2 is good.\n    !*/\n    {\n        DLIB_ASSERT(A.size() >= l, \"Invalid inputs were given to this function.\");\n        Q.set_size(A.size(), l);\n\n        // Compute Q = A*gaussian_randm()\n        for (long r = 0; r < Q.nr(); ++r)\n        {\n            for (long c = 0; c < Q.nc(); ++c)\n            {\n                Q(r,c) = dot(A[r], gaussian_randm(std::numeric_limits<long>::max(), 1, c));\n            }\n        }\n\n        orthogonalize(Q);\n\n        // Do some extra iterations of the power method to make sure we get Q into the \n        // span of the most important singular vectors of A.\n        if (q != 0)\n        {\n            const unsigned long n = max_index_plus_one(A);\n            for (unsigned long itr = 0; itr < q; ++itr)\n            {\n                matrix<T,0,0,MM,L> Z(n, l);\n                // Compute Z = trans(A)*Q\n                Z = 0;\n                for (unsigned long m = 0; m < A.size(); ++m)\n                {\n                    for (unsigned long r = 0; r < l; ++r)\n                    {\n                        typename sparse_vector_type::const_iterator i;\n                        for (i = A[m].begin(); i != A[m].end(); ++i)\n                        {\n                            const unsigned long c = i->first;\n                            const T val = i->second;\n\n                            Z(c,r) += Q(m,r)*val;\n                        }\n                    }\n                }\n\n                Q.set_size(0,0); // free RAM\n                orthogonalize(Z);\n\n                // Compute Q = A*Z\n                Q.set_size(A.size(), l);\n                for (long r = 0; r < Q.nr(); ++r)\n                {\n                    for (long c = 0; c < Q.nc(); ++c)\n                    {\n                        Q(r,c) = dot(A[r], colm(Z,c));\n                    }\n                }\n\n                Z.set_size(0,0); // free RAM\n                orthogonalize(Q);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sparse_vector_type, \n        typename T,\n        long Unr, long Unc,\n        long Wnr, long Wnc,\n        long Vnr, long Vnc,\n        typename MM,\n        typename L\n        >\n    void svd_fast (\n        const std::vector<sparse_vector_type>& A,\n        matrix<T,Unr,Unc,MM,L>& u,\n        matrix<T,Wnr,Wnc,MM,L>& w,\n        matrix<T,Vnr,Vnc,MM,L>& v,\n        unsigned long l,\n        unsigned long q = 1\n    )\n    {\n        const long n = max_index_plus_one(A);\n        const unsigned long k = std::min(l, std::min<unsigned long>(A.size(),n));\n\n        DLIB_ASSERT(l > 0 && A.size() > 0 && n > 0, \n            \"\\t void svd_fast()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t l: \" << l \n            << \"\\n\\t n (i.e. max_index_plus_one(A)): \" << n \n            << \"\\n\\t A.size(): \" << A.size() \n            );\n\n        matrix<T,0,0,MM,L> Q;\n        find_matrix_range(A, k, Q, q);\n\n        // Compute trans(B) = trans(Q)*A.   The reason we store B transposed\n        // is so that when we take its SVD later using svd3() it doesn't consume\n        // a whole lot of RAM.  That is, we make sure the square matrix coming out\n        // of svd3() has size lxl rather than the potentially much larger nxn.\n        matrix<T,0,0,MM,L> B(n,k);\n        B = 0;\n        for (unsigned long m = 0; m < A.size(); ++m)\n        {\n            for (unsigned long r = 0; r < k; ++r)\n            {\n                typename sparse_vector_type::const_iterator i;\n                for (i = A[m].begin(); i != A[m].end(); ++i)\n                {\n                    const unsigned long c = i->first;\n                    const T val = i->second;\n\n                    B(c,r) += Q(m,r)*val;\n                }\n            }\n        }\n\n        svd3(B, v,w,u);\n        u = Q*u;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        long N\n        >\n    struct inv_helper\n    {\n        static const typename matrix_exp<EXP>::matrix_type inv (\n            const matrix_exp<EXP>& m\n        )\n        {\n            using namespace nric;\n            // you can't invert a non-square matrix\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC || \n                                matrix_exp<EXP>::NR == 0 ||\n                                matrix_exp<EXP>::NC == 0);\n            DLIB_ASSERT(m.nr() == m.nc(), \n                \"\\tconst matrix_exp::type inv(const matrix_exp& m)\"\n                << \"\\n\\tYou can only apply inv() to a square matrix\"\n                << \"\\n\\tm.nr(): \" << m.nr()\n                << \"\\n\\tm.nc(): \" << m.nc() \n                );\n            typedef typename matrix_exp<EXP>::type type;\n\n            lu_decomposition<EXP> lu(m);\n            return lu.solve(identity_matrix<type>(m.nr()));\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    struct inv_helper<EXP,1>\n    {\n        static const typename matrix_exp<EXP>::matrix_type inv (\n            const matrix_exp<EXP>& m\n        )\n        {\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC);\n            typedef typename matrix_exp<EXP>::type type;\n\n            matrix<type, 1, 1, typename EXP::mem_manager_type> a;\n            // if m is invertible\n            if (m(0) != 0)\n                a(0) = 1/m(0);\n            else\n                a(0) = 1;\n            return a;\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    struct inv_helper<EXP,2>\n    {\n        static const typename matrix_exp<EXP>::matrix_type inv (\n            const matrix_exp<EXP>& m\n        )\n        {\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC);\n            typedef typename matrix_exp<EXP>::type type;\n\n            matrix<type, 2, 2, typename EXP::mem_manager_type> a;\n            type d = det(m);\n            if (d != 0)\n            {\n                d = static_cast<type>(1.0/d);\n                a(0,0) = m(1,1)*d;\n                a(0,1) = m(0,1)*-d;\n                a(1,0) = m(1,0)*-d;\n                a(1,1) = m(0,0)*d;\n            }\n            else\n            {\n                // Matrix isn't invertible so just return the identity matrix.\n                a = identity_matrix<type,2>();\n            }\n            return a;\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    struct inv_helper<EXP,3>\n    {\n        static const typename matrix_exp<EXP>::matrix_type inv (\n            const matrix_exp<EXP>& m\n        )\n        {\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC);\n            typedef typename matrix_exp<EXP>::type type;\n\n            matrix<type, 3, 3, typename EXP::mem_manager_type> ret;\n            type de = det(m);\n            if (de != 0)\n            {\n                de = static_cast<type>(1.0/de);\n                const type a = m(0,0);\n                const type b = m(0,1);\n                const type c = m(0,2);\n                const type d = m(1,0);\n                const type e = m(1,1);\n                const type f = m(1,2);\n                const type g = m(2,0);\n                const type h = m(2,1);\n                const type i = m(2,2);\n\n                ret(0,0) = (e*i - f*h)*de;\n                ret(1,0) = (f*g - d*i)*de;\n                ret(2,0) = (d*h - e*g)*de;\n\n                ret(0,1) = (c*h - b*i)*de;\n                ret(1,1) = (a*i - c*g)*de;\n                ret(2,1) = (b*g - a*h)*de;\n\n                ret(0,2) = (b*f - c*e)*de;\n                ret(1,2) = (c*d - a*f)*de;\n                ret(2,2) = (a*e - b*d)*de;\n            }\n            else\n            {\n                ret = identity_matrix<type,3>();\n            }\n\n            return ret;\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    struct inv_helper<EXP,4>\n    {\n        static const typename matrix_exp<EXP>::matrix_type inv (\n            const matrix_exp<EXP>& m\n        )\n        {\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC);\n            typedef typename matrix_exp<EXP>::type type;\n\n            matrix<type, 4, 4, typename EXP::mem_manager_type> ret;\n            type de = det(m);\n            if (de != 0)\n            {\n                de = static_cast<type>(1.0/de);\n                ret(0,0) =  det(removerc<0,0>(m));\n                ret(0,1) = -det(removerc<0,1>(m));\n                ret(0,2) =  det(removerc<0,2>(m));\n                ret(0,3) = -det(removerc<0,3>(m));\n\n                ret(1,0) = -det(removerc<1,0>(m));\n                ret(1,1) =  det(removerc<1,1>(m));\n                ret(1,2) = -det(removerc<1,2>(m));\n                ret(1,3) =  det(removerc<1,3>(m));\n\n                ret(2,0) =  det(removerc<2,0>(m));\n                ret(2,1) = -det(removerc<2,1>(m));\n                ret(2,2) =  det(removerc<2,2>(m));\n                ret(2,3) = -det(removerc<2,3>(m));\n\n                ret(3,0) = -det(removerc<3,0>(m));\n                ret(3,1) =  det(removerc<3,1>(m));\n                ret(3,2) = -det(removerc<3,2>(m));\n                ret(3,3) =  det(removerc<3,3>(m));\n\n                return trans(ret)*de;\n            }\n            else\n            {\n                return identity_matrix<type,4>();\n            }\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    inline const typename matrix_exp<EXP>::matrix_type inv (\n        const matrix_exp<EXP>& m\n    ) { return inv_helper<EXP,matrix_exp<EXP>::NR>::inv(m); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_diag_inv\n    {\n        template <typename EXP>\n        op_diag_inv( const matrix_exp<EXP>& m_) : m(m_){}\n\n\n        const static long cost = 1;\n        const static long NR = ((M::NC!=0)&&(M::NR!=0))? (tmax<M::NR,M::NC>::value) : (0);\n        const static long NC = NR;\n        typedef typename M::type type;\n        typedef const type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n\n\n        // hold the matrix by value\n        const matrix<type,NR,1,mem_manager_type,layout_type> m;\n\n        const_ret_type apply ( long r, long c) const \n        { \n            if (r==c)\n                return m(r);\n            else\n                return 0;\n        }\n\n        long nr () const { return m.size(); }\n        long nc () const { return m.size(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_diag_op<op_diag_inv<EXP> > inv (\n        const matrix_diag_exp<EXP>& m\n    ) \n    { \n        typedef op_diag_inv<EXP> op;\n        return matrix_diag_op<op>(op(reciprocal(diag(m))));\n    }\n\n    template <\n        typename EXP\n        >\n    const matrix_diag_op<op_diag_inv<EXP> > pinv (\n        const matrix_diag_exp<EXP>& m\n    ) \n    { \n        typedef op_diag_inv<EXP> op;\n        return matrix_diag_op<op>(op(reciprocal(diag(m))));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const matrix_diag_op<op_diag_inv<EXP> > pinv (\n        const matrix_diag_exp<EXP>& m,\n        double tol\n    ) \n    { \n        DLIB_ASSERT(tol >= 0, \n            \"\\tconst matrix_exp::type pinv(const matrix_exp& m)\"\n            << \"\\n\\t tol can't be negative\"\n            << \"\\n\\t tol: \"<<tol \n            );\n        typedef op_diag_inv<EXP> op;\n        return matrix_diag_op<op>(op(reciprocal(round_zeros(diag(m),tol))));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    const typename matrix_exp<EXP>::matrix_type  inv_lower_triangular (\n        const matrix_exp<EXP>& A \n    )\n    {\n        DLIB_ASSERT(A.nr() == A.nc(), \n            \"\\tconst matrix inv_lower_triangular(const matrix_exp& A)\"\n            << \"\\n\\tA must be a square matrix\"\n            << \"\\n\\tA.nr(): \" << A.nr()\n            << \"\\n\\tA.nc(): \" << A.nc() \n            );\n\n        typedef typename matrix_exp<EXP>::matrix_type matrix_type;\n\n        matrix_type m(A);\n\n        for(long c = 0; c < m.nc(); ++c)\n        {\n            if( m(c,c) == 0 )\n            {\n                // there isn't an inverse so just give up\n                return m;\n            }\n\n            // compute m(c,c)\n            m(c,c) = 1/m(c,c);\n\n            // compute the values in column c that are below m(c,c).\n            // We do this by just doing the same thing we do for upper triangular\n            // matrices because we take the transpose of m which turns m into an\n            // upper triangular matrix.\n            for(long r = 0; r < c; ++r)\n            {\n                const long n = c-r;\n                m(c,r) = -m(c,c)*subm(trans(m),r,r,1,n)*subm(trans(m),r,c,n,1);\n            }\n        }\n\n        return m;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    const typename matrix_exp<EXP>::matrix_type  inv_upper_triangular (\n        const matrix_exp<EXP>& A \n    )\n    {\n        DLIB_ASSERT(A.nr() == A.nc(), \n            \"\\tconst matrix inv_upper_triangular(const matrix_exp& A)\"\n            << \"\\n\\tA must be a square matrix\"\n            << \"\\n\\tA.nr(): \" << A.nr()\n            << \"\\n\\tA.nc(): \" << A.nc() \n            );\n\n        typedef typename matrix_exp<EXP>::matrix_type matrix_type;\n\n        matrix_type m(A);\n\n        for(long c = 0; c < m.nc(); ++c)\n        {\n            if( m(c,c) == 0 )\n            {\n                // there isn't an inverse so just give up\n                return m;\n            }\n\n            // compute m(c,c)\n            m(c,c) = 1/m(c,c);\n\n            // compute the values in column c that are above m(c,c)\n            for(long r = 0; r < c; ++r)\n            {\n                const long n = c-r;\n                m(r,c) = -m(c,c)*subm(m,r,r,1,n)*subm(m,r,c,n,1);\n            }\n        }\n\n        return m;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    inline const typename matrix_exp<EXP>::matrix_type chol (\n        const matrix_exp<EXP>& A\n    )\n    {\n        DLIB_ASSERT(A.nr() == A.nc(), \n            \"\\tconst matrix chol(const matrix_exp& A)\"\n            << \"\\n\\tYou can only apply the chol to a square matrix\"\n            << \"\\n\\tA.nr(): \" << A.nr()\n            << \"\\n\\tA.nc(): \" << A.nc() \n            );\n        typename matrix_exp<EXP>::matrix_type L(A.nr(),A.nc());\n\n#ifdef DLIB_USE_LAPACK\n        // Only call LAPACK if the matrix is big enough.  Otherwise,\n        // our own code is faster, especially for statically dimensioned \n        // matrices.\n        if (A.nr() > 4)\n        {\n            L = A;\n            lapack::potrf('L', L);\n            // mask out upper triangular area\n            return lowerm(L);\n        }\n#endif\n        typedef typename EXP::type T;\n        set_all_elements(L,0);\n\n        // do nothing if the matrix is empty\n        if (A.size() == 0)\n            return L;\n\n        const T eps = std::numeric_limits<T>::epsilon();\n\n        // compute the upper left corner\n        if (A(0,0) > 0)\n            L(0,0) = std::sqrt(A(0,0));\n\n        // compute the first column\n        for (long r = 1; r < A.nr(); ++r)\n        {\n            // if (L(0,0) > 0)\n            if (L(0,0) > eps*std::abs(A(r,0)))\n                L(r,0) = A(r,0)/L(0,0);\n            else\n                return L;\n        }\n\n        // now compute all the other columns\n        for (long c = 1; c < A.nc(); ++c)\n        {\n            // compute the diagonal element\n            T temp = A(c,c);\n            for (long i = 0; i < c; ++i)\n            {\n                temp -= L(c,i)*L(c,i);\n            }\n            if (temp > 0)\n                L(c,c) = std::sqrt(temp);\n\n            // compute the non diagonal elements\n            for (long r = c+1; r < A.nr(); ++r)\n            {\n                temp = A(r,c);\n                for (long i = 0; i < c; ++i)\n                {\n                    temp -= L(r,i)*L(c,i);\n                }\n\n                // if (L(c,c) > 0)\n                if (L(c,c) > eps*std::abs(temp))\n                    L(r,c) = temp/L(c,c);\n                else\n                    return L;\n            }\n        }\n\n        return L;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        long uNR, \n        long uNC,\n        long wN, \n        long vN,\n        long wX,\n        typename MM1,\n        typename MM2,\n        typename MM3,\n        typename L1\n        >\n    inline void svd3 (\n        const matrix_exp<EXP>& m,\n        matrix<typename matrix_exp<EXP>::type, uNR, uNC,MM1,L1>& u,\n        matrix<typename matrix_exp<EXP>::type, wN, wX,MM2,L1>& w,\n        matrix<typename matrix_exp<EXP>::type, vN, vN,MM3,L1>& v\n    )\n    {\n        typedef typename matrix_exp<EXP>::type T;\n        const long NR = matrix_exp<EXP>::NR;\n        const long NC = matrix_exp<EXP>::NC;\n\n        // make sure the output matrices have valid dimensions if they are statically dimensioned\n        COMPILE_TIME_ASSERT(NR == 0 || uNR == 0 || NR == uNR);\n        COMPILE_TIME_ASSERT(NC == 0 || uNC == 0 || NC == uNC);\n        COMPILE_TIME_ASSERT(NC == 0 || wN == 0 || NC == wN);\n        COMPILE_TIME_ASSERT(NC == 0 || vN == 0 || NC == vN);\n        COMPILE_TIME_ASSERT(wX == 0 || wX == 1);\n\n#ifdef DLIB_USE_LAPACK\n        // use LAPACK but only if it isn't a really small matrix we are taking the SVD of.\n        if (NR*NC == 0 || NR*NC > 3*3)\n        {\n            matrix<typename matrix_exp<EXP>::type, uNR, uNC,MM1,L1> temp(m);\n            lapack::gesvd('S','A', temp, w, u, v);\n            v = trans(v);\n            // if u isn't the size we want then pad it (and v) with zeros\n            if (u.nc() < m.nc())\n            {\n                w = join_cols(w, zeros_matrix<T>(m.nc()-u.nc(),1));\n                u = join_rows(u, zeros_matrix<T>(u.nr(), m.nc()-u.nc()));\n            }\n            return;\n        }\n#endif\n        v.set_size(m.nc(),m.nc());\n\n        u = m;\n\n        w.set_size(m.nc(),1);\n        matrix<T,matrix_exp<EXP>::NC,1,MM1> rv1(m.nc(),1);\n        nric::svdcmp(u,w,v,rv1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const matrix<typename EXP::type,EXP::NC,EXP::NR,typename EXP::mem_manager_type> pinv_helper ( \n        const matrix_exp<EXP>& m,\n        double tol\n    )\n    /*!\n        ensures\n            - computes the results of pinv(m) but does so using a method that is fastest\n              when m.nc() <= m.nr().  So if m.nc() > m.nr() then it is best to use\n              trans(pinv_helper(trans(m))) to compute pinv(m).\n    !*/\n    { \n        typename matrix_exp<EXP>::matrix_type u;\n        typedef typename EXP::mem_manager_type MM1;\n        typedef typename EXP::layout_type layout_type;\n        matrix<typename EXP::type, EXP::NC, EXP::NC,MM1, layout_type > v;\n\n        typedef typename matrix_exp<EXP>::type T;\n\n        matrix<T,matrix_exp<EXP>::NC,1,MM1, layout_type> w;\n\n        svd3(m, u,w,v);\n\n        const double machine_eps = std::numeric_limits<typename EXP::type>::epsilon();\n        // compute a reasonable epsilon below which we round to zero before doing the\n        // reciprocal.  Unless a non-zero tol is given then we just use tol.\n        const double eps = (tol!=0) ? tol :  machine_eps*std::max(m.nr(),m.nc())*max(w);\n\n        // now compute the pseudoinverse\n        return tmp(scale_columns(v,reciprocal(round_zeros(w,eps))))*trans(u);\n    }\n\n    template <\n        typename EXP\n        >\n    const matrix<typename EXP::type,EXP::NC,EXP::NR,typename EXP::mem_manager_type> pinv ( \n        const matrix_exp<EXP>& m,\n        double tol = 0\n    )\n    { \n        DLIB_ASSERT(tol >= 0, \n            \"\\tconst matrix_exp::type pinv(const matrix_exp& m)\"\n            << \"\\n\\t tol can't be negative\"\n            << \"\\n\\t tol: \"<<tol \n            );\n        // if m has more columns then rows then it is more efficient to\n        // compute the pseudo-inverse of its transpose (given the way I'm doing it below).\n        if (m.nc() > m.nr())\n            return trans(pinv_helper(trans(m),tol));\n        else\n            return pinv_helper(m,tol);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        long uNR, \n        long uNC,\n        long wN, \n        long vN,\n        typename MM1,\n        typename MM2,\n        typename MM3,\n        typename L1\n        >\n    inline void svd (\n        const matrix_exp<EXP>& m,\n        matrix<typename matrix_exp<EXP>::type, uNR, uNC,MM1,L1>& u,\n        matrix<typename matrix_exp<EXP>::type, wN, wN,MM2,L1>& w,\n        matrix<typename matrix_exp<EXP>::type, vN, vN,MM3,L1>& v\n    )\n    {\n        typedef typename matrix_exp<EXP>::type T;\n        const long NR = matrix_exp<EXP>::NR;\n        const long NC = matrix_exp<EXP>::NC;\n\n        // make sure the output matrices have valid dimensions if they are statically dimensioned\n        COMPILE_TIME_ASSERT(NR == 0 || uNR == 0 || NR == uNR);\n        COMPILE_TIME_ASSERT(NC == 0 || uNC == 0 || NC == uNC);\n        COMPILE_TIME_ASSERT(NC == 0 || wN == 0 || NC == wN);\n        COMPILE_TIME_ASSERT(NC == 0 || vN == 0 || NC == vN);\n\n        matrix<T,matrix_exp<EXP>::NC,1,MM1, L1> W;\n        svd3(m,u,W,v);\n        w = diagm(W);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const typename matrix_exp<EXP>::type trace (\n        const matrix_exp<EXP>& m\n    ) \n    { \n        COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC ||\n                            matrix_exp<EXP>::NR == 0 ||\n                            matrix_exp<EXP>::NC == 0 \n                            );\n        DLIB_ASSERT(m.nr() == m.nc(), \n            \"\\tconst matrix_exp::type trace(const matrix_exp& m)\"\n            << \"\\n\\tYou can only apply trace() to a square matrix\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            );\n        return sum(diag(m));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        long N = EXP::NR\n        >\n    struct det_helper\n    {\n        static const typename matrix_exp<EXP>::type det (\n            const matrix_exp<EXP>& m\n        )\n        {\n            using namespace nric;\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC ||\n                                matrix_exp<EXP>::NR == 0 ||\n                                matrix_exp<EXP>::NC == 0 \n                                );\n            DLIB_ASSERT(m.nr() == m.nc(), \n                \"\\tconst matrix_exp::type det(const matrix_exp& m)\"\n                << \"\\n\\tYou can only apply det() to a square matrix\"\n                << \"\\n\\tm.nr(): \" << m.nr()\n                << \"\\n\\tm.nc(): \" << m.nc() \n                );\n\n            return lu_decomposition<EXP>(m).det();\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    struct det_helper<EXP,1>\n    {\n        static const typename matrix_exp<EXP>::type det (\n            const matrix_exp<EXP>& m\n        )\n        {\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC);\n\n            return m(0);\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    struct det_helper<EXP,2>\n    {\n        static const typename matrix_exp<EXP>::type det (\n            const matrix_exp<EXP>& m\n        )\n        {\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC);\n\n            return m(0,0)*m(1,1) - m(0,1)*m(1,0);\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    struct det_helper<EXP,3>\n    {\n        static const typename matrix_exp<EXP>::type det (\n            const matrix_exp<EXP>& m\n        )\n        {\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC);\n            typedef typename matrix_exp<EXP>::type type;\n\n            type temp = m(0,0)*(m(1,1)*m(2,2) - m(1,2)*m(2,1)) -\n                        m(0,1)*(m(1,0)*m(2,2) - m(1,2)*m(2,0)) +\n                        m(0,2)*(m(1,0)*m(2,1) - m(1,1)*m(2,0));\n            return temp;\n        }\n    };\n\n\n    template <\n        typename EXP\n        >\n    inline const typename matrix_exp<EXP>::type det (\n        const matrix_exp<EXP>& m\n    ) { return det_helper<EXP>::det(m); }\n\n\n    template <\n        typename EXP\n        >\n    struct det_helper<EXP,4>\n    {\n        static const typename matrix_exp<EXP>::type det (\n            const matrix_exp<EXP>& m\n        )\n        {\n            COMPILE_TIME_ASSERT(matrix_exp<EXP>::NR == matrix_exp<EXP>::NC);\n            typedef typename matrix_exp<EXP>::type type;\n\n            type temp = m(0,0)*(dlib::det(removerc<0,0>(m))) -\n                        m(0,1)*(dlib::det(removerc<0,1>(m))) +\n                        m(0,2)*(dlib::det(removerc<0,2>(m))) -\n                        m(0,3)*(dlib::det(removerc<0,3>(m)));\n            return temp;\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    const matrix<typename EXP::type, EXP::NR, 1, typename EXP::mem_manager_type, typename EXP::layout_type> real_eigenvalues (\n        const matrix_exp<EXP>& m\n    )\n    {\n        // You can only use this function with matrices that contain float or double values\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP::type, float>::value ||\n                             is_same_type<typename EXP::type, double>::value));\n\n        DLIB_ASSERT(m.nr() == m.nc(), \n            \"\\tconst matrix real_eigenvalues()\"\n            << \"\\n\\tYou have given an invalidly sized matrix\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            );\n\n        if (m.nr() == 2)\n        {\n            typedef typename EXP::type T;\n            const T m00 = m(0,0);\n            const T m01 = m(0,1);\n            const T m10 = m(1,0);\n            const T m11 = m(1,1);\n\n            const T b = -(m00 + m11);\n            const T c = m00*m11 - m01*m10;\n            matrix<T,EXP::NR,1, typename EXP::mem_manager_type, typename EXP::layout_type> v(2);\n\n\n            T disc = b*b - 4*c;\n            if (disc >= 0)\n                disc = std::sqrt(disc);\n            else\n                disc = 0;\n\n            v(0) = (-b + disc)/2;\n            v(1) = (-b - disc)/2;\n            return v;\n        }\n        else\n        {\n            // Call .ref() so that the symmetric matrix overload can take effect if m \n            // has the appropriate type.\n            return eigenvalue_decomposition<EXP>(m.ref()).get_real_eigenvalues();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_LA_FUNCTS_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_la_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MATRIx_LA_FUNCTS_ABSTRACT_\n#ifdef DLIB_MATRIx_LA_FUNCTS_ABSTRACT_ \n\n#include \"matrix_abstract.h\"\n#include <complex>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                             Global linear algebra functions \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::matrix_type inv (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m is a square matrix\n        ensures\n            - returns the inverse of m \n              (Note that if m is singular or so close to being singular that there\n              is a lot of numerical error then the returned matrix will be bogus.  \n              You can check by seeing if m*inv(m) is an identity matrix)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix pinv (\n        const matrix_exp& m,\n        double tol = 0\n    );\n    /*!\n        requires\n            - tol >= 0\n        ensures\n            - returns the Moore-Penrose pseudoinverse of m.\n            - The returned matrix has m.nc() rows and m.nr() columns.\n            - if (tol == 0) then\n                - singular values less than max(m.nr(),m.nc()) times the machine epsilon \n                  times the largest singular value are ignored.  \n            - else\n                - singular values less than tol are ignored.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void svd (\n        const matrix_exp& m,\n        matrix<matrix_exp::type>& u,\n        matrix<matrix_exp::type>& w,\n        matrix<matrix_exp::type>& v\n    );\n    /*!\n        ensures\n            - computes the singular value decomposition of m\n            - m == #u*#w*trans(#v)\n            - trans(#u)*#u == identity matrix\n            - trans(#v)*#v == identity matrix\n            - diag(#w) == the singular values of the matrix m in no \n              particular order.  All non-diagonal elements of #w are\n              set to 0.\n            - #u.nr() == m.nr()\n            - #u.nc() == m.nc()\n            - #w.nr() == m.nc()\n            - #w.nc() == m.nc()\n            - #v.nr() == m.nc()\n            - #v.nc() == m.nc()\n            - if DLIB_USE_LAPACK is #defined then the xGESVD routine\n              from LAPACK is used to compute the SVD.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    long svd2 (\n        bool withu, \n        bool withv, \n        const matrix_exp& m,\n        matrix<matrix_exp::type>& u,\n        matrix<matrix_exp::type>& w,\n        matrix<matrix_exp::type>& v\n    );\n    /*!\n        requires\n            - m.nr() >= m.nc()\n        ensures\n            - computes the singular value decomposition of matrix m\n            - m == subm(#u,get_rect(m))*diagm(#w)*trans(#v)\n            - trans(#u)*#u == identity matrix\n            - trans(#v)*#v == identity matrix\n            - #w == the singular values of the matrix m in no \n              particular order.  \n            - #u.nr() == m.nr()\n            - #u.nc() == m.nr()\n            - #w.nr() == m.nc()\n            - #w.nc() == 1 \n            - #v.nr() == m.nc()\n            - #v.nc() == m.nc()\n            - if (widthu == false) then\n                - ignore the above regarding #u, it isn't computed and its\n                  output state is undefined.\n            - if (widthv == false) then\n                - ignore the above regarding #v, it isn't computed and its\n                  output state is undefined.\n            - returns an error code of 0, if no errors and 'k' if we fail to\n              converge at the 'kth' singular value.\n            - if (DLIB_USE_LAPACK is #defined) then \n                - if (withu == withv) then\n                    - the xGESDD routine from LAPACK is used to compute the SVD.\n                - else\n                    - the xGESVD routine from LAPACK is used to compute the SVD.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void svd3 (\n        const matrix_exp& m,\n        matrix<matrix_exp::type>& u,\n        matrix<matrix_exp::type>& w,\n        matrix<matrix_exp::type>& v\n    );\n    /*!\n        ensures\n            - computes the singular value decomposition of m\n            - m == #u*diagm(#w)*trans(#v)\n            - trans(#u)*#u == identity matrix\n            - trans(#v)*#v == identity matrix\n            - #w == the singular values of the matrix m in no \n              particular order.  \n            - #u.nr() == m.nr()\n            - #u.nc() == m.nc()\n            - #w.nr() == m.nc()\n            - #w.nc() == 1 \n            - #v.nr() == m.nc()\n            - #v.nc() == m.nc()\n            - if DLIB_USE_LAPACK is #defined then the xGESVD routine\n              from LAPACK is used to compute the SVD.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void svd_fast (\n        const matrix<T>& A,\n        matrix<T>& u,\n        matrix<T>& w,\n        matrix<T>& v,\n        unsigned long l,\n        unsigned long q = 1\n    );\n    /*!\n        requires\n            - l > 0\n            - A.size() > 0 \n              (i.e. A can't be an empty matrix)\n        ensures\n            - computes the singular value decomposition of A.  \n            - Lets define some constants we use to document the behavior of svd_fast():\n                - Let m = A.nr()\n                - Let n = A.nc() \n                - Let k = min(l, min(m,n))\n                - Therefore, A represents an m by n matrix and svd_fast() is designed\n                  to find a rank-k representation of it.\n            - if (the rank of A is <= k) then \n                - A == #u*diagm(#w)*trans(#v)\n            - else\n                - A is approximated by #u*diagm(#w)*trans(#v)\n                  (i.e. In this case A can't be represented with a rank-k matrix, so the\n                  matrix you get by trying to reconstruct A from the output of the SVD is\n                  not exactly the same.)\n            - trans(#u)*#u == identity matrix\n            - trans(#v)*#v == identity matrix\n            - #w == the top k singular values of the matrix A (in no particular order).  \n            - #u.nr() == m \n            - #u.nc() == k \n            - #w.nr() == k \n            - #w.nc() == 1 \n            - #v.nr() == n \n            - #v.nc() == k \n            - This function implements the randomized subspace iteration defined in the\n              algorithm 4.4 and 5.1 boxes of the paper: \n                Finding Structure with Randomness: Probabilistic Algorithms for\n                Constructing Approximate Matrix Decompositions by Halko et al.\n              Therefore, it is very fast and suitable for use with very large matrices.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sparse_vector_type, \n        typename T\n        >\n    void svd_fast (\n        const std::vector<sparse_vector_type>& A,\n        matrix<T>& u,\n        matrix<T>& w,\n        matrix<T>& v,\n        unsigned long l,\n        unsigned long q = 1\n    );\n    /*!\n        requires\n            - A contains a set of sparse vectors.  See dlib/svm/sparse_vector_abstract.h\n              for a definition of what constitutes a sparse vector.\n            - l > 0\n            - max_index_plus_one(A) > 0\n              (i.e. A can't be an empty matrix)\n        ensures\n            - computes the singular value decomposition of A.  In this case, we interpret A\n              as a matrix of A.size() rows, where each row is defined by a sparse vector.\n            - Lets define some constants we use to document the behavior of svd_fast():\n                - Let m = A.size()\n                - Let n = max_index_plus_one(A)\n                - Let k = min(l, min(m,n))\n                - Therefore, A represents an m by n matrix and svd_fast() is designed\n                  to find a rank-k representation of it.\n            - if (the rank of A is <= k) then \n                - A == #u*diagm(#w)*trans(#v)\n            - else\n                - A is approximated by #u*diagm(#w)*trans(#v)\n                  (i.e. In this case A can't be represented with a rank-k matrix, so the\n                  matrix you get by trying to reconstruct A from the output of the SVD is\n                  not exactly the same.)\n            - trans(#u)*#u == identity matrix\n            - trans(#v)*#v == identity matrix\n            - #w == the top k singular values of the matrix A (in no particular order).  \n            - #u.nr() == m \n            - #u.nc() == k \n            - #w.nr() == k \n            - #w.nc() == 1 \n            - #v.nr() == n \n            - #v.nc() == k \n            - This function implements the randomized subspace iteration defined in the\n              algorithm 4.4 and 5.1 boxes of the paper: \n                Finding Structure with Randomness: Probabilistic Algorithms for\n                Constructing Approximate Matrix Decompositions by Halko et al.\n              Therefore, it is very fast and suitable for use with very large matrices.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM,\n        typename L\n        >\n    void orthogonalize (\n        matrix<T,NR,NC,MM,L>& m\n    );\n    /*!\n        requires\n            - m.nr() >= m.nc()\n            - m.size() > 0\n        ensures\n            - #m == an orthogonal matrix with the same dimensions as m.  In particular,\n              the columns of #m have the same span as the columns of m.\n            - trans(#m)*#m == identity matrix\n            - This function is just shorthand for computing the QR decomposition of m\n              and then storing the Q factor into #m.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix real_eigenvalues (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m.nr() == m.nc()\n            - matrix_exp::type == float or double\n        ensures\n            - returns a matrix E such that:\n                - E.nr() == m.nr()\n                - E.nc() == 1\n                - E contains the real part of all eigenvalues of the matrix m.\n                  (note that the eigenvalues are not sorted)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type det (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m is a square matrix\n        ensures\n            - returns the determinant of m\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type trace (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m is a square matrix\n        ensures\n            - returns the trace of m\n              (i.e. returns sum(diag(m)))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::matrix_type chol (\n        const matrix_exp& A\n    );\n    /*!\n        requires\n            - A is a square matrix\n        ensures\n            - if (A has a Cholesky Decomposition) then\n                - returns the decomposition of A.  That is, returns a matrix L\n                  such that L*trans(L) == A.  L will also be lower triangular.\n            - else\n                - returns a matrix with the same dimensions as A but it \n                  will have a bogus value.  I.e. it won't be a decomposition.\n                  In this case the algorithm returns a partial decomposition.\n                - You can tell when chol fails by looking at the lower right\n                  element of the returned matrix.  If it is 0 then it means\n                  A does not have a cholesky decomposition.  \n\n            - If DLIB_USE_LAPACK is defined then the LAPACK routine xPOTRF \n              is used to compute the cholesky decomposition.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::matrix_type inv_lower_triangular (\n        const matrix_exp& A\n    );\n    /*!\n        requires\n            - A is a square matrix\n        ensures\n            - if (A is lower triangular) then\n                - returns the inverse of A. \n            - else\n                - returns a matrix with the same dimensions as A but it \n                  will have a bogus value.  I.e. it won't be an inverse.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::matrix_type inv_upper_triangular (\n        const matrix_exp& A\n    );\n    /*!\n        requires\n            - A is a square matrix\n        ensures\n            - if (A is upper triangular) then\n                - returns the inverse of A. \n            - else\n                - returns a matrix with the same dimensions as A but it \n                  will have a bogus value.  I.e. it won't be an inverse.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                             Matrix decomposition classes \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_exp_type\n        >\n    class lu_decomposition\n    {\n        /*!\n            REQUIREMENTS ON matrix_exp_type\n                must be some kind of matrix expression as defined in the \n                dlib/matrix/matrix_abstract.h file.   (e.g. a dlib::matrix object)\n                The matrix type must also contain float or double values.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents something that can compute an LU \n                decomposition of a real valued matrix.  That is, for any \n                matrix A it computes matrices L, U, and a pivot vector P such \n                that rowm(A,P) == L*U.\n\n                The LU decomposition with pivoting always exists, even if the matrix is\n                singular, so the constructor will never fail.  The primary use of the\n                LU decomposition is in the solution of square systems of simultaneous\n                linear equations.  This will fail if is_singular() returns true (or\n                if A is very nearly singular).\n\n                If DLIB_USE_LAPACK is defined then the LAPACK routine xGETRF \n                is used to compute the LU decomposition.\n        !*/\n\n    public:\n\n        const static long NR = matrix_exp_type::NR;\n        const static long NC = matrix_exp_type::NC;\n        typedef typename matrix_exp_type::type type;\n        typedef typename matrix_exp_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_exp_type::layout_type layout_type;\n\n        typedef matrix<type,0,0,mem_manager_type,layout_type>  matrix_type;\n        typedef matrix<type,NR,1,mem_manager_type,layout_type> column_vector_type;\n        typedef matrix<long,NR,1,mem_manager_type,layout_type> pivot_column_vector_type;\n\n        template <typename EXP>\n        lu_decomposition (\n            const matrix_exp<EXP> &A\n        );\n        /*!\n            requires\n                - EXP::type == lu_decomposition::type \n                - A.size() > 0\n            ensures\n                - #nr() == A.nr()\n                - #nc() == A.nc()\n                - #is_square() == (A.nr() == A.nc())\n                - computes the LU factorization of the given A matrix.\n        !*/\n\n        bool is_square (\n        ) const;\n        /*!\n            ensures\n                - if (the input A matrix was a square matrix) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool is_singular (\n        ) const;\n        /*!\n            requires\n                - is_square() == true\n            ensures\n                - if (the input A matrix is singular) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        long nr(\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in the input matrix\n        !*/\n\n        long nc(\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns in the input matrix\n        !*/\n\n        const matrix_type get_l (\n        ) const; \n        /*!\n            ensures\n                - returns the lower triangular L factor of the LU factorization.  \n                - L.nr() == nr()\n                - L.nc() == min(nr(),nc())\n        !*/\n\n        const matrix_type get_u (\n        ) const;\n        /*!\n            ensures\n                - returns the upper triangular U factor of the LU factorization.  \n                - U.nr() == min(nr(),nc())\n                - U.nc() == nc()\n        !*/\n\n        const pivot_column_vector_type& get_pivot (\n        ) const;\n        /*!\n            ensures\n                - returns the pivot permutation vector.  That is,\n                  if A is the input matrix then this function \n                  returns a vector P such that:\n                    - rowm(A,P) == get_l()*get_u() \n                    - P.nr() == A.nr()\n        !*/\n\n        type det (\n        ) const;\n        /*!\n            requires\n                - is_square() == true\n            ensures\n                - computes and returns the determinant of the input \n                  matrix using LU factors.\n        !*/\n\n        template <typename EXP>\n        const matrix_type solve (\n            const matrix_exp<EXP> &B\n        ) const;\n        /*!\n            requires\n                - EXP::type == lu_decomposition::type\n                - is_square() == true\n                - B.nr() == nr()\n            ensures\n                - Let A denote the input matrix to this class's constructor.  \n                  Then this function solves A*X == B for X and returns X.  \n                - Note that if A is singular (or very close to singular) then\n                  the X returned by this function won't fit A*X == B very well (if at all).\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_exp_type\n        >\n    class cholesky_decomposition\n    {\n        /*! \n            REQUIREMENTS ON matrix_exp_type\n                must be some kind of matrix expression as defined in the \n                dlib/matrix/matrix_abstract.h file.   (e.g. a dlib::matrix object)\n                The matrix type must also contain float or double values.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents something that can compute a cholesky \n                decomposition of a real valued matrix.  That is, for any \n                symmetric, positive definite matrix A, it computes a lower \n                triangular matrix L such that A == L*trans(L).\n                \n                If the matrix is not symmetric or positive definite, the function\n                computes only a partial decomposition.  This can be tested with\n                the is_spd() flag.\n            \n                If DLIB_USE_LAPACK is defined then the LAPACK routine xPOTRF \n                is used to compute the cholesky decomposition.\n        !*/\n\n    public:\n\n        const static long NR = matrix_exp_type::NR;\n        const static long NC = matrix_exp_type::NC;\n        typedef typename matrix_exp_type::type type;\n        typedef typename matrix_exp_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_exp_type::layout_type layout_type;\n\n        typedef typename matrix_exp_type::matrix_type matrix_type;\n        typedef matrix<type,NR,1,mem_manager_type,layout_type> column_vector_type;\n\n        template <typename EXP>\n        cholesky_decomposition(\n            const matrix_exp<EXP>& A\n        );\n        /*!\n            requires\n                - EXP::type == cholesky_decomposition::type \n                - A.size() > 0\n                - A.nr() == A.nc() \n                  (i.e. A must be a square matrix)\n            ensures\n                - if (A is symmetric positive-definite) then\n                    - #is_spd() == true \n                    - Constructs a lower triangular matrix L, such that L*trans(L) == A.\n                      and #get_l() == L\n                - else\n                    - #is_spd() == false\n        !*/\n\n        bool is_spd(\n        ) const;\n        /*!\n            ensures\n                - if (the input matrix was symmetric positive-definite) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        const matrix_type& get_l(\n        ) const;\n        /*!\n            ensures\n                - returns the lower triangular factor, L, such that L*trans(L) == A\n                  (where A is the input matrix to this class's constructor)\n                - Note that if A is not symmetric positive definite or positive semi-definite\n                  then the equation L*trans(L) == A won't hold.  \n        !*/\n\n        template <typename EXP>\n        const matrix solve (\n            const matrix_exp<EXP>& B\n        ) const;\n        /*!\n            requires\n                - EXP::type == cholesky_decomposition::type\n                - B.nr() == get_l().nr()\n                  (i.e. the number of rows in B must match the number of rows in the\n                  input matrix A)\n            ensures\n                - Let A denote the input matrix to this class's constructor.  Then \n                  this function solves A*X = B for X and returns X.  \n                - Note that if is_spd() == false or A was really close to being\n                  non-SPD then the solver will fail to find an accurate solution.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_exp_type\n        >\n    class qr_decomposition \n    {\n        /*! \n            REQUIREMENTS ON matrix_exp_type\n                must be some kind of matrix expression as defined in the \n                dlib/matrix/matrix_abstract.h file.   (e.g. a dlib::matrix object)\n                The matrix type must also contain float or double values.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents something that can compute a classical\n                QR decomposition of an m-by-n real valued matrix A with m >= n.  \n\n                The QR decomposition is an m-by-n orthogonal matrix Q and an \n                n-by-n upper triangular matrix R so that A == Q*R. The QR decomposition \n                always exists, even if the matrix does not have full rank, so the \n                constructor will never fail.  The primary use of the QR decomposition \n                is in the least squares solution of non-square systems of simultaneous \n                linear equations.  This will fail if is_full_rank() returns false or\n                A is very nearly not full rank.\n\n                The Q and R factors can be retrieved via the get_q() and get_r()\n                methods. Furthermore, a solve() method is provided to find the\n                least squares solution of Ax=b using the QR factors.  \n\n                If DLIB_USE_LAPACK is #defined then the xGEQRF routine\n                from LAPACK is used to compute the QR decomposition.\n        !*/\n\n    public:\n\n        const static long NR = matrix_exp_type::NR;\n        const static long NC = matrix_exp_type::NC;\n        typedef typename matrix_exp_type::type type;\n        typedef typename matrix_exp_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_exp_type::layout_type layout_type;\n\n        typedef matrix<type,0,0,mem_manager_type,layout_type> matrix_type;\n\n        template <typename EXP>\n        qr_decomposition(\n            const matrix_exp<EXP>& A\n        );\n        /*!\n            requires\n                - EXP::type == qr_decomposition::type\n                - A.nr() >= A.nc()\n                - A.size() > 0\n            ensures\n                - #nr() == A.nr()\n                - #nc() == A.nc()\n                - computes the QR decomposition of the given A matrix.\n        !*/\n\n        bool is_full_rank(\n        ) const;\n        /*!\n            ensures\n                - if (the input A matrix had full rank) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        long nr(\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in the input matrix\n        !*/\n\n        long nc(\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns in the input matrix\n        !*/\n\n        const matrix_type get_r (\n        ) const;\n        /*!\n            ensures\n                - returns a matrix R such that: \n                    - R is the upper triangular factor, R, of the QR factorization\n                    - get_q()*R == input matrix A\n                    - R.nr() == nc()\n                    - R.nc() == nc()\n        !*/\n\n        const matrix_type get_q (\n        ) const;\n        /*!\n            ensures\n                - returns a matrix Q such that:\n                    - Q is the economy-sized orthogonal factor Q from the QR \n                      factorization.  \n                    - trans(Q)*Q == identity matrix\n                    - Q*get_r() == input matrix A \n                    - Q.nr() == nr()\n                    - Q.nc() == nc()\n        !*/\n\n        void get_q (\n            matrix_type& Q\n        ) const;\n        /*!\n            ensures\n                - #Q == get_q()\n                - This function exists to allow a user to get the Q matrix without the\n                  overhead of returning a matrix by value.\n        !*/\n\n        template <typename EXP>\n        const matrix_type solve (\n            const matrix_exp<EXP>& B\n        ) const;\n        /*!\n            requires\n                - EXP::type == qr_decomposition::type\n                - B.nr() == nr()\n            ensures\n                - Let A denote the input matrix to this class's constructor.  \n                  Then this function finds the least squares solution to the equation A*X = B \n                  and returns X.  X has the following properties: \n                    - X is the matrix that minimizes the two norm of A*X-B.  That is, it\n                      minimizes sum(squared(A*X - B)).\n                    - X.nr() == nc()\n                    - X.nc() == B.nc()\n                - Note that this function will fail to output a good solution if is_full_rank() == false\n                  or the A matrix is close to not being full rank.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_exp_type\n        >\n    class eigenvalue_decomposition\n    {\n        /*!\n            REQUIREMENTS ON matrix_exp_type\n                must be some kind of matrix expression as defined in the \n                dlib/matrix/matrix_abstract.h file.   (e.g. a dlib::matrix object)\n                The matrix type must also contain float or double values.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents something that can compute an eigenvalue \n                decomposition of a real valued matrix.   So it gives \n                you the set of eigenvalues and eigenvectors for a matrix.   \n\n                Let A denote the input matrix to this object's constructor.  Then \n                what this object does is it finds two matrices, D and V, such that\n                    - A*V == V*D\n                Where V is a square matrix that contains all the eigenvectors\n                of the A matrix (each column of V is an eigenvector) and\n                D is a diagonal matrix containing the eigenvalues of A.\n\n\n                It is important to note that if A is symmetric or non-symmetric you\n                get somewhat different results.  If A is a symmetric matrix (i.e. A == trans(A))\n                then:\n                    - All the eigenvalues and eigenvectors of A are real numbers. \n                        - Because of this there isn't really any point in using the\n                          part of this class's interface that returns complex matrices.\n                          All you need are the get_real_eigenvalues() and\n                          get_pseudo_v() functions.  \n                    - V*trans(V) should be equal to the identity matrix.  That is, all the\n                      eigenvectors in V should be orthonormal. \n                        - So A == V*D*trans(V)\n                    - If DLIB_USE_LAPACK is #defined then this object uses the xSYEVR LAPACK\n                      routine.\n\n                On the other hand, if A is not symmetric then:\n                    - Some of the eigenvalues and eigenvectors might be complex numbers.  \n                        - An eigenvalue is complex if and only if its corresponding eigenvector \n                          is complex.  So you can check for this case by just checking \n                          get_imag_eigenvalues() to see if any values are non-zero.  You don't \n                          have to check the V matrix as well.\n                    - V*trans(V) won't be equal to the identity matrix but it is usually\n                      invertible.  So A == V*D*inv(V) is usually a valid statement but\n                      A == V*D*trans(V) won't be.\n                    - If DLIB_USE_LAPACK is #defined then this object uses the xGEEV LAPACK\n                      routine.\n        !*/\n\n    public:\n\n        const static long NR = matrix_exp_type::NR;\n        const static long NC = matrix_exp_type::NC;\n        typedef typename matrix_exp_type::type type;\n        typedef typename matrix_exp_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_exp_type::layout_type layout_type;\n\n        typedef typename matrix_exp_type::matrix_type matrix_type;\n        typedef matrix<type,NR,1,mem_manager_type,layout_type> column_vector_type;\n\n        typedef matrix<std::complex<type>,0,0,mem_manager_type,layout_type> complex_matrix_type;\n        typedef matrix<std::complex<type>,NR,1,mem_manager_type,layout_type> complex_column_vector_type;\n\n\n        template <typename EXP>\n        eigenvalue_decomposition(\n            const matrix_exp<EXP>& A\n        ); \n        /*!\n            requires\n                - A.nr() == A.nc() \n                - A.size() > 0\n                - EXP::type == eigenvalue_decomposition::type \n            ensures\n                - #dim() == A.nr()\n                - computes the eigenvalue decomposition of A.  \n                - #get_eigenvalues() == the eigenvalues of A\n                - #get_v() == all the eigenvectors of A\n        !*/\n\n        template <typename EXP>\n        eigenvalue_decomposition(\n            const matrix_op<op_make_symmetric<EXP> >& A\n        ); \n        /*!\n            requires\n                - A.nr() == A.nc() \n                - A.size() > 0\n                - EXP::type == eigenvalue_decomposition::type \n            ensures\n                - #dim() == A.nr()\n                - computes the eigenvalue decomposition of the symmetric matrix A.  Does so\n                  using a method optimized for symmetric matrices.\n                - #get_eigenvalues() == the eigenvalues of A\n                - #get_v() == all the eigenvectors of A\n                - moreover, since A is symmetric there won't be any imaginary eigenvalues. So \n                  we will have:\n                    - #get_imag_eigenvalues() == 0\n                    - #get_real_eigenvalues() == the eigenvalues of A\n                    - #get_pseudo_v() == all the eigenvectors of A\n                    - diagm(#get_real_eigenvalues()) == #get_pseudo_d()\n\n                Note that the symmetric matrix operator is created by the\n                dlib::make_symmetric() function.  This function simply reflects\n                the lower triangular part of a square matrix into the upper triangular\n                part to create a symmetric matrix.  It can also be used to denote that a \n                matrix is already symmetric using the C++ type system.\n        !*/\n\n        long dim (\n        ) const;\n        /*!\n            ensures\n                - dim() == the number of rows/columns in the input matrix A \n        !*/\n\n        const complex_column_vector_type get_eigenvalues (\n        ) const;\n        /*!\n            ensures\n                - returns diag(get_d()).  That is, returns a \n                  vector that contains the eigenvalues of the input \n                  matrix.\n                - the returned vector has dim() rows\n                - the eigenvalues are not sorted in any particular way\n        !*/\n\n        const column_vector_type& get_real_eigenvalues (\n        ) const;\n        /*! \n            ensures\n                - returns the real parts of the eigenvalues.  That is,\n                  returns real(get_eigenvalues()) \n                - the returned vector has dim() rows\n                - the eigenvalues are not sorted in any particular way\n        !*/\n\n        const column_vector_type& get_imag_eigenvalues (\n        ) const;\n        /*! \n            ensures\n                - returns the imaginary parts of the eigenvalues.  That is,\n                  returns imag(get_eigenvalues()) \n                - the returned vector has dim() rows\n                - the eigenvalues are not sorted in any particular way\n        !*/\n\n        const complex_matrix_type get_v (\n        ) const;\n        /*!\n            ensures\n                - returns the eigenvector matrix V that is \n                  dim() rows by dim() columns\n                - Each column in V is one of the eigenvectors of the input \n                  matrix\n        !*/\n\n        const complex_matrix_type get_d (\n        ) const; \n        /*!\n            ensures\n                - returns a matrix D such that:\n                    - D.nr() == dim()\n                    - D.nc() == dim()\n                    - diag(D) == get_eigenvalues()\n                      (i.e. the diagonal of D contains all the eigenvalues in the input matrix)\n                    - all off diagonal elements of D are set to 0\n        !*/\n\n        const matrix_type& get_pseudo_v (\n        ) const;\n        /*!\n            ensures\n                - returns a matrix that is dim() rows by dim() columns\n                - Let A denote the input matrix given to this object's constructor.\n                - if (A has any imaginary eigenvalues) then\n                    - returns the pseudo-eigenvector matrix V  \n                    - The matrix V returned by this function is structured such that:\n                        - A*V == V*get_pseudo_d()\n                - else\n                    - returns the eigenvector matrix V with A's eigenvectors as\n                      the columns of V\n                    - A*V == V*diagm(get_real_eigenvalues())\n        !*/\n\n        const matrix_type get_pseudo_d (\n        ) const; \n        /*!\n            ensures\n                - The returned matrix is dim() rows by dim() columns\n                - Computes and returns the block diagonal eigenvalue matrix.\n                  If the original matrix A is not symmetric, then the eigenvalue \n                  matrix D is block diagonal with the real eigenvalues in 1-by-1 \n                  blocks and any complex eigenvalues,\n                  a + i*b, in 2-by-2 blocks, (a, b; -b, a).  That is, if the complex\n                  eigenvalues look like\n\n                      u + iv     .        .          .      .    .\n                        .      u - iv     .          .      .    .\n                        .        .      a + ib       .      .    .\n                        .        .        .        a - ib   .    .\n                        .        .        .          .      x    .\n                        .        .        .          .      .    y\n\n                  Then D looks like\n\n                        u        v        .          .      .    .\n                       -v        u        .          .      .    . \n                        .        .        a          b      .    .\n                        .        .       -b          a      .    .\n                        .        .        .          .      x    .\n                        .        .        .          .      .    y\n\n                  This keeps V (The V you get from get_pseudo_v()) a real matrix in both \n                  symmetric and non-symmetric cases, and A*V = V*D.\n                - the eigenvalues are not sorted in any particular way\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_LA_FUNCTS_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_lu.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n// This code was adapted from code from the JAMA part of NIST's TNT library.\n//    See: http://math.nist.gov/tnt/ \n#ifndef DLIB_MATRIX_LU_DECOMPOSITION_H\n#define DLIB_MATRIX_LU_DECOMPOSITION_H\n\n#include \"matrix.h\" \n#include \"matrix_utilities.h\"\n#include \"matrix_subexp.h\"\n#include \"matrix_trsm.h\"\n#include <algorithm>\n\n#ifdef DLIB_USE_LAPACK \n#include \"lapack/getrf.h\"\n#endif\n\n\nnamespace dlib \n{\n\n    template <\n        typename matrix_exp_type\n        >\n    class lu_decomposition\n    {\n    public:\n\n        const static long NR = matrix_exp_type::NR;\n        const static long NC = matrix_exp_type::NC;\n        typedef typename matrix_exp_type::type type;\n        typedef typename matrix_exp_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_exp_type::layout_type layout_type;\n\n        typedef matrix<type,0,0,mem_manager_type,layout_type>  matrix_type;\n        typedef matrix<type,NR,1,mem_manager_type,layout_type> column_vector_type;\n        typedef matrix<long,NR,1,mem_manager_type,layout_type> pivot_column_vector_type;\n\n        // You have supplied an invalid type of matrix_exp_type.  You have\n        // to use this object with matrices that contain float or double type data.\n        COMPILE_TIME_ASSERT((is_same_type<float, type>::value || \n                             is_same_type<double, type>::value ));\n\n        template <typename EXP>\n        lu_decomposition (\n            const matrix_exp<EXP> &A\n        );\n\n        bool is_square (\n        ) const;\n\n        bool is_singular (\n        ) const;\n\n        long nr(\n        ) const;\n\n        long nc(\n        ) const;\n\n        const matrix_type get_l (\n        ) const; \n\n        const matrix_type get_u (\n        ) const;\n\n        const pivot_column_vector_type& get_pivot (\n        ) const;\n\n        type det (\n        ) const;\n\n        template <typename EXP>\n        const matrix_type solve (\n            const matrix_exp<EXP> &B\n        ) const;\n\n    private:\n\n        /* Array for internal storage of decomposition.  */\n        matrix<type,0,0,mem_manager_type,column_major_layout>  LU;\n        long m, n, pivsign; \n        pivot_column_vector_type piv;\n\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                              Public member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    lu_decomposition<matrix_exp_type>::\n    lu_decomposition (\n        const matrix_exp<EXP>& A\n    ) : \n        LU(A),\n        m(A.nr()),\n        n(A.nc())\n    {\n        using namespace std;\n        using std::abs;\n\n        COMPILE_TIME_ASSERT((is_same_type<type, typename EXP::type>::value));\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(A.size() > 0,\n            \"\\tlu_decomposition::lu_decomposition(A)\"\n            << \"\\n\\tInvalid inputs were given to this function\"\n            << \"\\n\\tA.size(): \" << A.size()\n            << \"\\n\\tthis:     \" << this\n            );\n\n#ifdef DLIB_USE_LAPACK\n        matrix<lapack::integer,0,1,mem_manager_type,layout_type> piv_temp;\n        lapack::getrf(LU, piv_temp);\n\n        pivsign = 1;\n\n        // Turn the piv_temp vector into a more useful form.  This way we will have the identity\n        // rowm(A,piv) == L*U.  The permutation vector that comes out of LAPACK is somewhat\n        // different.\n        piv = trans(range(0,m-1));\n        for (long i = 0; i < piv_temp.size(); ++i)\n        {\n            // -1 because FORTRAN is indexed starting with 1 instead of 0\n            if (piv(piv_temp(i)-1) != piv(i))\n            {\n                std::swap(piv(i), piv(piv_temp(i)-1));\n                pivsign = -pivsign;\n            }\n        }\n\n#else\n\n        // Use a \"left-looking\", dot-product, Crout/Doolittle algorithm.\n\n\n        piv = trans(range(0,m-1));\n        pivsign = 1;\n\n        column_vector_type LUcolj(m);\n\n        // Outer loop.\n        for (long j = 0; j < n; j++) \n        {\n\n            // Make a copy of the j-th column to localize references.\n            LUcolj = colm(LU,j);\n\n            // Apply previous transformations.\n            for (long i = 0; i < m; i++) \n            {\n                // Most of the time is spent in the following dot product.\n                const long kmax = std::min(i,j);\n                type s;\n                if (kmax > 0)\n                    s = rowm(LU,i, kmax)*colm(LUcolj,0,kmax);\n                else \n                    s = 0;\n\n                LU(i,j) = LUcolj(i) -= s;\n            }\n\n            // Find pivot and exchange if necessary.\n            long p = j;\n            for (long i = j+1; i < m; i++) \n            {\n                if (abs(LUcolj(i)) > abs(LUcolj(p))) \n                {\n                    p = i;\n                }\n            }\n            if (p != j) \n            {\n                long k=0;\n                for (k = 0; k < n; k++) \n                {\n                    type t = LU(p,k); \n                    LU(p,k) = LU(j,k); \n                    LU(j,k) = t;\n                }\n                k = piv(p); \n                piv(p) = piv(j); \n                piv(j) = k;\n                pivsign = -pivsign;\n            }\n\n            // Compute multipliers.\n            if ((j < m) && (LU(j,j) != 0.0)) \n            {\n                for (long i = j+1; i < m; i++) \n                {\n                    LU(i,j) /= LU(j,j);\n                }\n            }\n        }\n\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    bool lu_decomposition<matrix_exp_type>::\n    is_square (\n    ) const\n    {\n        return m == n;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    long lu_decomposition<matrix_exp_type>::\n    nr (\n    ) const\n    {\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    long lu_decomposition<matrix_exp_type>::\n    nc (\n    ) const\n    {\n        return n;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    bool lu_decomposition<matrix_exp_type>::\n    is_singular (\n    ) const\n    {\n        /* Is the matrix singular?\n          if upper triangular factor U (and hence A) is singular, false otherwise.\n        */\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_square() == true,\n            \"\\tbool lu_decomposition::is_singular()\"\n            << \"\\n\\tYou can only use this on square matrices\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        type max_val, min_val;\n        find_min_and_max (abs(diag(LU)), min_val, max_val);\n        type eps = max_val;\n        if (eps != 0)\n            eps *= std::sqrt(std::numeric_limits<type>::epsilon())/10;\n        else\n            eps = 1;  // there is no max so just use 1\n\n        return min_val < eps;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename lu_decomposition<matrix_exp_type>::matrix_type lu_decomposition<matrix_exp_type>::\n    get_l (\n    ) const\n    {\n        if (LU.nr() >= LU.nc())\n            return lowerm(LU,1.0);\n        else\n            return lowerm(subm(LU,0,0,m,m), 1.0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename lu_decomposition<matrix_exp_type>::matrix_type lu_decomposition<matrix_exp_type>::\n    get_u (\n    ) const \n    {\n        if (LU.nr() >= LU.nc())\n            return upperm(subm(LU,0,0,n,n));\n        else\n            return upperm(LU);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename lu_decomposition<matrix_exp_type>::pivot_column_vector_type& lu_decomposition<matrix_exp_type>::\n    get_pivot (\n    ) const\n    {\n        return piv;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    typename lu_decomposition<matrix_exp_type>::type lu_decomposition<matrix_exp_type>::\n    det (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_square() == true,\n            \"\\ttype lu_decomposition::det()\"\n            << \"\\n\\tYou can only use this on square matrices\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // Check if it is singular and if it is just return 0.  \n        // We want to do this because a prod() operation can easily\n        // overcome a single diagonal element that is effectively 0 when\n        // LU is a big enough matrix.\n        if (is_singular())\n            return 0;\n\n        return prod(diag(LU))*static_cast<type>(pivsign);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    const typename lu_decomposition<matrix_exp_type>::matrix_type lu_decomposition<matrix_exp_type>::\n    solve (\n        const matrix_exp<EXP> &B\n    ) const\n    {\n        COMPILE_TIME_ASSERT((is_same_type<type, typename EXP::type>::value));\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_square() == true && B.nr() == nr(),\n            \"\\ttype lu_decomposition::solve()\"\n            << \"\\n\\tInvalid arguments to this function\"\n            << \"\\n\\tis_square():   \" << (is_square()? \"true\":\"false\" )\n            << \"\\n\\tB.nr():        \" << B.nr() \n            << \"\\n\\tnr():          \" << nr() \n            << \"\\n\\tthis:          \" << this\n            );\n\n        // Copy right hand side with pivoting\n        matrix<type,0,0,mem_manager_type,column_major_layout> X(rowm(B, piv));\n\n        using namespace blas_bindings;\n        // Solve L*Y = B(piv,:)\n        triangular_solver(CblasLeft, CblasLower, CblasNoTrans, CblasUnit, LU, X);\n        // Solve U*X = Y;\n        triangular_solver(CblasLeft, CblasUpper, CblasNoTrans, CblasNonUnit, LU, X);\n        return X;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n} \n\n#endif // DLIB_MATRIX_LU_DECOMPOSITION_H \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_mat.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_MAT_Hh_\n#define DLIB_MATRIx_MAT_Hh_\n\n#include \"matrix_mat_abstract.h\"\n#include \"../stl_checked.h\"\n#include <vector>\n#include \"matrix_op.h\"\n#include \"../array2d.h\"\n#include \"../array.h\"\n#include \"../image_processing/generic_image.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename EXP\n        >\n    const matrix_exp<EXP>& mat (\n        const matrix_exp<EXP>& m\n    )\n    {\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type, typename pixel_type>\n    struct op_image_to_mat : does_not_alias \n    {\n        op_image_to_mat( const image_type& img) : imgview(img){}\n\n        const_image_view<image_type> imgview;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef pixel_type type;\n        typedef const pixel_type& const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const { return imgview[r][c]; }\n\n        long nr () const { return imgview.nr(); }\n        long nc () const { return imgview.nc(); }\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        > // The reason we disable this if it is a matrix is because this matrix_op claims\n          // to not alias any matrix.  But obviously that would be a problem if we let it\n          // take a matrix.\n    const typename disable_if<is_matrix<image_type>,matrix_op<op_image_to_mat<image_type, typename image_traits<image_type>::pixel_type> > >::type mat (\n        const image_type& img \n    )\n    {\n        typedef op_image_to_mat<image_type, typename image_traits<image_type>::pixel_type> op;\n        return matrix_op<op>(op(img));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    struct op_image_view_to_mat : does_not_alias \n    {\n        op_image_view_to_mat( const image_view<image_type>& img) : imgview(img){}\n\n        typedef typename image_traits<image_type>::pixel_type pixel_type;\n\n        const image_view<image_type>& imgview;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef pixel_type type;\n        typedef const pixel_type& const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const { return imgview[r][c]; }\n\n        long nr () const { return imgview.nr(); }\n        long nc () const { return imgview.nc(); }\n    }; \n\n    template <\n        typename image_type\n        > \n    const matrix_op<op_image_view_to_mat<image_type> > mat (\n        const image_view<image_type>& img \n    )\n    {\n        typedef op_image_view_to_mat<image_type> op;\n        return matrix_op<op>(op(img));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type>\n    struct op_const_image_view_to_mat : does_not_alias \n    {\n        op_const_image_view_to_mat( const const_image_view<image_type>& img) : imgview(img){}\n\n        typedef typename image_traits<image_type>::pixel_type pixel_type;\n\n        const const_image_view<image_type>& imgview;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef pixel_type type;\n        typedef const pixel_type& const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const { return imgview[r][c]; }\n\n        long nr () const { return imgview.nr(); }\n        long nc () const { return imgview.nc(); }\n    }; \n\n    template <\n        typename image_type\n        > \n    const matrix_op<op_const_image_view_to_mat<image_type> > mat (\n        const const_image_view<image_type>& img \n    )\n    {\n        typedef op_const_image_view_to_mat<image_type> op;\n        return matrix_op<op>(op(img));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct op_array_to_mat : does_not_alias \n    {\n        op_array_to_mat( const T& vect_) : vect(vect_){}\n\n        const T& vect;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 1;\n        typedef typename T::type type;\n        typedef const typename T::type& const_ret_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long  ) const { return vect[r]; }\n\n        long nr () const { return vect.size(); }\n        long nc () const { return 1; }\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename MM\n        >\n    const matrix_op<op_array_to_mat<array<T,MM> > > mat (\n        const array<T,MM>& m \n    )\n    {\n        typedef op_array_to_mat<array<T,MM> > op;\n        return matrix_op<op>(op(m));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename U>\n        struct not_bool { typedef U type; };\n        template <>\n        struct not_bool<const bool&> { typedef bool type; };\n    }\n\n    template <typename T>\n    struct op_std_vect_to_mat : does_not_alias \n    {\n        op_std_vect_to_mat( const T& vect_) : vect(vect_){}\n\n        const T& vect;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 1;\n        typedef typename T::value_type type;\n        // Since std::vector returns a proxy for bool types we need to make sure we don't\n        // return an element by reference if it is a bool type.\n        typedef typename impl::not_bool<const typename T::value_type&>::type const_ret_type;\n\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long ) const { return vect[r]; }\n\n        long nr () const { return vect.size(); }\n        long nc () const { return 1; }\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename value_type,\n        typename alloc\n        >\n    const matrix_op<op_std_vect_to_mat<std::vector<value_type,alloc> > > mat (\n        const std::vector<value_type,alloc>& vector\n    )\n    {\n        typedef op_std_vect_to_mat<std::vector<value_type,alloc> > op;\n        return matrix_op<op>(op(vector));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename value_type,\n        typename alloc\n        >\n    const matrix_op<op_std_vect_to_mat<std_vector_c<value_type,alloc> > > mat (\n        const std_vector_c<value_type,alloc>& vector\n    )\n    {\n        typedef op_std_vect_to_mat<std_vector_c<value_type,alloc> > op;\n        return matrix_op<op>(op(vector));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct op_pointer_to_col_vect : does_not_alias \n    {\n        op_pointer_to_col_vect(\n            const T* ptr_,\n            const long size_\n        ) : ptr(ptr_), size(size_){}\n\n        const T* ptr;\n        const long size;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 1;\n        typedef T type;\n        typedef const T& const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long ) const { return ptr[r]; }\n\n        long nr () const { return size; }\n        long nc () const { return 1; }\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_pointer_to_col_vect<T> > mat (\n        const T* ptr,\n        long nr\n    )\n    {\n        DLIB_ASSERT(nr > 0 , \n                    \"\\tconst matrix_exp mat(ptr, nr)\"\n                    << \"\\n\\t nr must be bigger than 0\"\n                    << \"\\n\\t nr: \" << nr\n        );\n        typedef op_pointer_to_col_vect<T> op;\n        return matrix_op<op>(op(ptr, nr));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct op_pointer_to_mat : does_not_alias \n    {\n        op_pointer_to_mat(\n            const T* ptr_,\n            const long nr_,\n            const long nc_ \n        ) : ptr(ptr_), rows(nr_), cols(nc_){}\n\n        const T* ptr;\n        const long rows;\n        const long cols;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef T type;\n        typedef const T& const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c) const { return ptr[r*cols + c]; }\n\n        long nr () const { return rows; }\n        long nc () const { return cols; }\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_pointer_to_mat<T> > mat (\n        const T* ptr,\n        long nr,\n        long nc\n    )\n    {\n        DLIB_ASSERT(nr > 0 && nc > 0 , \n                    \"\\tconst matrix_exp mat(ptr, nr, nc)\"\n                    << \"\\n\\t nr and nc must be bigger than 0\"\n                    << \"\\n\\t nr: \" << nr\n                    << \"\\n\\t nc: \" << nc\n        );\n        typedef op_pointer_to_mat<T> op;\n        return matrix_op<op>(op(ptr,nr,nc));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\nnamespace arma\n{\n    template <typename T> class Mat;\n}\nnamespace dlib\n{\n    template <typename T>\n    struct op_arma_Mat_to_mat : does_not_alias \n    {\n        op_arma_Mat_to_mat( const T& array_) : array(array_){}\n\n        const T& array;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef typename T::elem_type type;\n        typedef typename T::elem_type const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const { return array(r,c); }\n\n        long nr () const { return array.n_rows; }\n        long nc () const { return array.n_cols; }\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_arma_Mat_to_mat< ::arma::Mat<T> > > mat (\n        const ::arma::Mat<T>& array\n    )\n    {\n        typedef op_arma_Mat_to_mat< ::arma::Mat<T> > op;\n        return matrix_op<op>(op(array));\n    }\n}\n\nnamespace Eigen\n{\n    template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>\n    class Matrix;\n}\n\nnamespace dlib\n{\n    template <typename T, int _Rows, int _Cols>\n    struct op_eigen_Matrix_to_mat : does_not_alias \n    {\n        op_eigen_Matrix_to_mat( const T& array_) : m(array_){}\n\n        const T& m;\n\n        const static long cost = 1;\n        const static long NR = (_Rows > 0) ? _Rows : 0;\n        const static long NC = (_Cols > 0) ? _Cols : 0;\n        typedef typename T::Scalar type;\n        typedef typename T::Scalar const_ret_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const { return m(r,c); }\n\n        long nr () const { return m.rows(); }\n        long nc () const { return m.cols(); }\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols\n        >\n    const matrix_op<op_eigen_Matrix_to_mat< ::Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols>,_Rows,_Cols > > mat (\n        const ::Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols>& m\n    )\n    {\n        typedef op_eigen_Matrix_to_mat< ::Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols>,_Rows,_Cols > op;\n        return matrix_op<op>(op(m));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                  DEPRECATED FUNCTIONS\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n// vector_to_matrix(), array_to_matrix(), pointer_to_matrix(), and\n// pointer_to_column_vector() have been deprecated in favor of the more uniform mat()\n// function.  But they are here for backwards compatibility.\n\n    template <\n        typename vector_type\n        >\n    const typename disable_if<is_matrix<vector_type>, matrix_op<op_array_to_mat<vector_type> > >::type \n    vector_to_matrix (\n        const vector_type& vector\n    )\n    {\n        typedef op_array_to_mat<vector_type> op;\n        return matrix_op<op>(op(vector));\n    }\n\n    template <\n        typename vector_type\n        >\n    const typename enable_if<is_matrix<vector_type>,vector_type>::type& vector_to_matrix (\n        const vector_type& vector\n    )\n    /*!\n        This overload catches the case where the argument to this function is\n        already a matrix.\n    !*/\n    {\n        return vector;\n    }\n\n    template <\n        typename value_type,\n        typename alloc\n        >\n    const matrix_op<op_std_vect_to_mat<std::vector<value_type,alloc> > > vector_to_matrix (\n        const std::vector<value_type,alloc>& vector\n    )\n    {\n        typedef op_std_vect_to_mat<std::vector<value_type,alloc> > op;\n        return matrix_op<op>(op(vector));\n    }\n\n    template <\n        typename value_type,\n        typename alloc\n        >\n    const matrix_op<op_std_vect_to_mat<std_vector_c<value_type,alloc> > > vector_to_matrix (\n        const std_vector_c<value_type,alloc>& vector\n    )\n    {\n        typedef op_std_vect_to_mat<std_vector_c<value_type,alloc> > op;\n        return matrix_op<op>(op(vector));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename array_type\n        >\n    const typename enable_if<is_matrix<array_type>,array_type>::type& \n    array_to_matrix (\n        const array_type& array\n    )\n    {\n        return array;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct op_array2d_to_mat : does_not_alias \n    {\n        op_array2d_to_mat( const T& array_) : array(array_){}\n\n        const T& array;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef typename T::type type;\n        typedef const typename T::type& const_ret_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const { return array[r][c]; }\n\n        long nr () const { return array.nr(); }\n        long nc () const { return array.nc(); }\n    }; \n\n    // Note that we have this version of mat() because it's slightly faster executing\n    // than the general one that handles any generic image.  This is because it avoids\n    // calling image_data() which for array2d involves a single if statement but this\n    // version here has no if statement in its construction.\n    template < typename T, typename MM >\n    const matrix_op<op_array2d_to_mat<array2d<T,MM> > > mat (\n        const array2d<T,MM>& array\n    )\n    {\n        typedef op_array2d_to_mat<array2d<T,MM> > op;\n        return matrix_op<op>(op(array));\n    }\n\n    template <\n        typename array_type\n        >\n    const typename disable_if<is_matrix<array_type>,matrix_op<op_array2d_to_mat<array_type> > >::type \n    array_to_matrix (\n        const array_type& array\n    )\n    {\n        typedef op_array2d_to_mat<array_type> op;\n        return matrix_op<op>(op(array));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_pointer_to_mat<T> > pointer_to_matrix (\n        const T* ptr,\n        long nr,\n        long nc\n    )\n    {\n        DLIB_ASSERT(nr > 0 && nc > 0 , \n                    \"\\tconst matrix_exp pointer_to_matrix(ptr, nr, nc)\"\n                    << \"\\n\\t nr and nc must be bigger than 0\"\n                    << \"\\n\\t nr: \" << nr\n                    << \"\\n\\t nc: \" << nc\n        );\n        typedef op_pointer_to_mat<T> op;\n        return matrix_op<op>(op(ptr,nr,nc));\n    }\n\n    template <\n        typename T\n        >\n    const matrix_op<op_pointer_to_col_vect<T> > pointer_to_column_vector (\n        const T* ptr,\n        long nr\n    )\n    {\n        DLIB_ASSERT(nr > 0 , \n                    \"\\tconst matrix_exp pointer_to_column_vector(ptr, nr)\"\n                    << \"\\n\\t nr must be bigger than 0\"\n                    << \"\\n\\t nr: \" << nr\n        );\n        typedef op_pointer_to_col_vect<T> op;\n        return matrix_op<op>(op(ptr, nr));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    inline matrix<double,1,1> mat (\n        double value\n    )\n    {\n        matrix<double,1,1> temp;\n        temp(0) = value;\n        return temp;\n    }\n\n    inline matrix<float,1,1> mat (\n        float value\n    )\n    {\n        matrix<float,1,1> temp;\n        temp(0) = value;\n        return temp;\n    }\n\n    inline matrix<long double,1,1> mat (\n        long double value\n    )\n    {\n        matrix<long double,1,1> temp;\n        temp(0) = value;\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_MAT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_mat_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MATRIx_MAT_ABSTRACT_Hh_\n#ifdef DLIB_MATRIx_MAT_ABSTRACT_Hh_\n\n#include \"matrix_abstract.h\"\n#inclue <vector>\n#include \"../array/array_kernel_abstract.h\"\n#include \"../array2d/array2d_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const matrix_exp<EXP>& mat (\n        const matrix_exp<EXP>& m\n    );\n    /*!\n        ensures\n            - returns m\n              (i.e. this function just returns the input matrix without any modifications)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    const matrix_exp mat (\n        const image_type& img\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or image_type is a image_view or\n              const_image_view object.\n        ensures\n            - This function converts any kind of generic image object into a dlib::matrix\n              expression.  Therefore, it is capable of converting objects like dlib::array2d\n              of dlib::cv_image.\n            - returns a matrix R such that:\n                - R.nr() == array.nr() \n                - R.nc() == array.nc()\n                - for all valid r and c:\n                  R(r, c) == array[r][c]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename MM\n        >\n    const matrix_exp mat (\n        const array<T,MM>& m \n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - is_col_vector(R) == true \n                - R.size() == m.size()\n                - for all valid r:\n                  R(r) == m[r]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename value_type,\n        typename alloc\n        >\n    const matrix_exp mat (\n        const std::vector<value_type,alloc>& vector\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - is_col_vector(R) == true \n                - R.size() == vector.size()\n                - for all valid r:\n                  R(r) == vector[r]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename value_type,\n        typename alloc\n        >\n    const matrix_exp mat (\n        const std_vector_c<value_type,alloc>& vector\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - is_col_vector(R) == true \n                - R.size() == vector.size()\n                - for all valid r:\n                  R(r) == vector[r]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp mat (\n        const T* ptr,\n        long nr\n    );\n    /*!\n        requires\n            - nr > 0\n            - ptr == a pointer to at least nr T objects\n        ensures\n            - returns a matrix M such that:\n                - M.nr() == nr\n                - m.nc() == 1\n                - for all valid i:\n                  M(i) == ptr[i]\n            - Note that the returned matrix doesn't take \"ownership\" of\n              the pointer and thus will not delete or free it.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp mat (\n        const T* ptr,\n        long nr,\n        long nc\n    );\n    /*!\n        requires\n            - nr > 0\n            - nc > 0\n            - ptr == a pointer to at least nr*nc T objects\n        ensures\n            - returns a matrix M such that:\n                - M.nr() == nr\n                - m.nc() == nc \n                - for all valid r and c:\n                  M(r,c) == ptr[r*nc + c]\n                  (i.e. the pointer is interpreted as a matrix laid out in memory\n                  in row major order)\n            - Note that the returned matrix doesn't take \"ownership\" of\n              the pointer and thus will not delete or free it.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp mat (\n        const ::arma::Mat<T>& m\n    );\n    /*!\n        ensures\n            - Converts a matrix from the Armadillo library into a dlib matrix.\n            - returns a matrix R such that:\n                - R.nr() == m.n_rows \n                - R.nc() == m.n_cols\n                - for all valid r:\n                  R(r,c) == m(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename _Scalar, \n        int _Rows, \n        int _Cols, \n        int _Options, \n        int _MaxRows, \n        int _MaxCols\n        >\n    const matrix_exp mat (\n        const ::Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols>& m\n    );\n    /*!\n        ensures\n            - Converts a matrix from the Eigen library into a dlib matrix.\n            - returns a matrix R such that:\n                - R.nr() == m.rows()\n                - R.nc() == m.cols()\n                - for all valid r:\n                  R(r,c) == m(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    matrix<double,1,1>      mat (double value);\n    matrix<float,1,1>       mat (float value);\n    matrix<long double,1,1> mat (long double value);\n    /*!\n        ensures\n            - Converts a scalar into a matrix containing just that scalar and returns the\n              results.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_MAT_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_math_functions.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_MATH_FUNCTIONS\n#define DLIB_MATRIx_MATH_FUNCTIONS \n\n#include \"matrix_math_functions_abstract.h\"\n#include \"matrix_op.h\"\n#include \"matrix_utilities.h\"\n#include \"matrix.h\"\n#include \"../algs.h\"\n#include <cmath>\n#include <complex>\n#include <limits>\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    DLIB_DEFINE_FUNCTION_M(op_sqrt, sqrt, std::sqrt ,7);\n    DLIB_DEFINE_FUNCTION_M(op_log, log, std::log ,7);\n    DLIB_DEFINE_FUNCTION_M(op_log10, log10, std::log10 ,7);\n    DLIB_DEFINE_FUNCTION_M(op_exp, exp, std::exp ,7);\n\n    DLIB_DEFINE_FUNCTION_M(op_conj, conj, std::conj ,2);\n\n    DLIB_DEFINE_FUNCTION_M(op_ceil, ceil, std::ceil ,7);\n    DLIB_DEFINE_FUNCTION_M(op_floor, floor, std::floor ,7);\n\n    DLIB_DEFINE_FUNCTION_M(op_sin, sin, std::sin ,7);\n    DLIB_DEFINE_FUNCTION_M(op_cos, cos, std::cos ,7);\n    DLIB_DEFINE_FUNCTION_M(op_tan, tan, std::tan ,7);\n    DLIB_DEFINE_FUNCTION_M(op_sinh, sinh, std::sinh ,7);\n    DLIB_DEFINE_FUNCTION_M(op_cosh, cosh, std::cosh ,7);\n    DLIB_DEFINE_FUNCTION_M(op_tanh, tanh, std::tanh ,7);\n    DLIB_DEFINE_FUNCTION_M(op_asin, asin, std::asin ,7);\n    DLIB_DEFINE_FUNCTION_M(op_acos, acos, std::acos ,7);\n    DLIB_DEFINE_FUNCTION_M(op_atan, atan, std::atan ,7);\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename type>\n        inline type sigmoid (const type& val)\n        {\n            return static_cast<type>(1/(1 + std::exp(-val)));\n        }\n\n        template <typename type, typename S>\n        inline type round_zeros_eps (const type& val, const S& eps)\n        {\n            // you can only round matrices that contain built in scalar types like double, long, float, etc.\n            COMPILE_TIME_ASSERT(is_built_in_scalar_type<type>::value);\n\n            if (val >= eps || val <= -eps)\n                return val;\n            else\n                return 0;\n        }\n\n        template <typename type>\n        inline type round_zeros (const type& val)\n        {\n            // you can only round matrices that contain built in scalar types like double, long, float, etc.\n            COMPILE_TIME_ASSERT(is_built_in_scalar_type<type>::value);\n\n            const type eps = 10*std::numeric_limits<type>::epsilon();\n            if (val >= eps || val <= -eps)\n                return val;\n            else\n                return 0;\n        }\n\n        template <typename type>\n        inline type squared (const type& val)\n        {\n            return val*val;\n        }\n\n        template <typename type>\n        inline type sign (const type& val)\n        {\n            if (val >= 0)\n                return +1;\n            else\n                return -1;\n        }\n\n        template <typename type>\n        type cubed (const type& val)\n        {\n            return val*val*val;\n        }\n\n        template <typename type, typename S>\n        inline type pow1 (const type& val, const S& s)\n        {\n            // you can only call pow() on matrices that contain floats, doubles or long doubles.\n            COMPILE_TIME_ASSERT((\n                    is_same_type<type,float>::value == true || \n                    is_same_type<type,double>::value == true || \n                    is_same_type<type,long double>::value == true \n            ));\n\n            return std::pow(val,static_cast<type>(s));\n        }\n\n        template <typename type, typename S>\n        inline type pow2 (const S& s, const type& val)\n        {\n            // you can only call pow() on matrices that contain floats, doubles or long doubles.\n            COMPILE_TIME_ASSERT((\n                    is_same_type<type,float>::value == true || \n                    is_same_type<type,double>::value == true || \n                    is_same_type<type,long double>::value == true \n            ));\n\n            return std::pow(static_cast<type>(s),val);\n        }\n\n        template <typename type>\n        inline type reciprocal (const type& val)\n        {\n            // you can only compute reciprocal matrices that contain floats, doubles or long doubles.\n            COMPILE_TIME_ASSERT((\n                    is_same_type<type,float>::value == true || \n                    is_same_type<type,double>::value == true || \n                    is_same_type<type,long double>::value == true  ||\n                    is_same_type<type,std::complex<float> >::value == true || \n                    is_same_type<type,std::complex<double> >::value == true || \n                    is_same_type<type,std::complex<long double> >::value == true \n            ));\n\n            if (val != static_cast<type>(0))\n                return static_cast<type>((type)1.0/val);\n            else\n                return 0;\n        }\n\n        template <typename type>\n        inline type reciprocal_max (const type& val)\n        {\n            // you can only compute reciprocal_max matrices that contain floats, doubles or long doubles.\n            COMPILE_TIME_ASSERT((\n                    is_same_type<type,float>::value == true || \n                    is_same_type<type,double>::value == true || \n                    is_same_type<type,long double>::value == true \n            ));\n\n            if (val != static_cast<type>(0))\n                return static_cast<type>((type)1.0/val);\n            else\n                return std::numeric_limits<type>::max();\n        }\n\n    }\n\n    DLIB_DEFINE_FUNCTION_M(op_sigmoid, sigmoid, impl::sigmoid, 7);\n    DLIB_DEFINE_FUNCTION_MS(op_round_zeros, round_zeros, impl::round_zeros_eps, 7);\n    DLIB_DEFINE_FUNCTION_M(op_round_zeros2, round_zeros, impl::round_zeros, 7);\n    DLIB_DEFINE_FUNCTION_M(op_cubed, cubed, impl::cubed, 7);\n    DLIB_DEFINE_FUNCTION_M(op_squared, squared, impl::squared, 6);\n    DLIB_DEFINE_FUNCTION_M(op_sign, sign, impl::sign, 6);\n    DLIB_DEFINE_FUNCTION_MS(op_pow1, pow, impl::pow1, 7);\n    DLIB_DEFINE_FUNCTION_SM(op_pow2, pow, impl::pow2, 7);\n    DLIB_DEFINE_FUNCTION_M(op_reciprocal, reciprocal, impl::reciprocal, 6);\n    DLIB_DEFINE_FUNCTION_M(op_reciprocal_max, reciprocal_max, impl::reciprocal_max, 6);\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, typename enabled = void>\n    struct op_round : basic_op_m<M> \n    {\n        op_round( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost+7;\n        typedef typename M::type type;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply (long r, long c) const\n        { \n            return static_cast<type>(std::floor(this->m(r,c)+0.5)); \n        }\n    };\n\n    template <typename M>\n    struct op_round<M,typename enable_if_c<std::numeric_limits<typename M::type>::is_integer>::type > \n    : basic_op_m<M>\n    {\n        op_round( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        const_ret_type apply (long r, long c) const\n        { \n            return this->m(r,c);\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_round<EXP> > round (\n        const matrix_exp<EXP>& m\n    )\n    {\n        // you can only round matrices that contain built in scalar types like double, long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_round<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_normalize : basic_op_m<M> \n    {\n        typedef typename M::type type;\n\n        op_normalize( const M& m_, const type& s_) : basic_op_m<M>(m_), s(s_){}\n\n        const type s;\n\n        const static long cost = M::cost+5;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply (long r, long c) const\n        { \n            return this->m(r,c)*s;\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_normalize<EXP> > normalize (\n        const matrix_exp<EXP>& m\n    )\n    {\n        // you can only compute normalized matrices that contain floats, doubles or long doubles.\n        COMPILE_TIME_ASSERT((\n                is_same_type<typename EXP::type,float>::value == true || \n                is_same_type<typename EXP::type,double>::value == true || \n                is_same_type<typename EXP::type,long double>::value == true \n        ));\n\n\n        typedef op_normalize<EXP> op;\n        typename EXP::type temp = std::sqrt(sum(squared(m)));\n        if (temp != 0.0)\n            temp = 1.0/temp;\n\n        return matrix_op<op>(op(m.ref(),temp));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, typename return_type = typename M::type>\n    struct op_abs : basic_op_m<M>\n    {\n        op_abs( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost+7;\n        typedef typename M::type type;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            return static_cast<type>(std::abs(this->m(r,c))); \n        }\n    };\n\n    template <typename M, typename T>\n    struct op_abs<M, std::complex<T> > : basic_op_m<M>\n    {\n        op_abs( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost;\n        typedef T type;\n        typedef const T const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            return static_cast<type>(std::abs(this->m(r,c))); \n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_abs<EXP> > abs (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_abs<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_complex_matrix : basic_op_m<M>\n    {\n        op_complex_matrix( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost+1;\n        typedef std::complex<typename M::type> type;\n        typedef const std::complex<typename M::type> const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            return type(this->m(r,c));\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_complex_matrix<EXP> > complex_matrix (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_complex_matrix<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_complex_matrix2 : basic_op_mm<M1,M2>\n    {\n        op_complex_matrix2( const M1& m1_, const M2& m2_) : basic_op_mm<M1,M2>(m1_,m2_){}\n\n        const static long cost = M1::cost+M2::cost+1;\n        typedef std::complex<typename M1::type> type;\n        typedef const std::complex<typename M1::type> const_ret_type;\n\n        const_ret_type apply ( long r, long c) const\n        { return type(this->m1(r,c), this->m2(r,c)); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    const matrix_op<op_complex_matrix2<EXP1,EXP2> > complex_matrix (\n        const matrix_exp<EXP1>& real_part,\n        const matrix_exp<EXP2>& imag_part \n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n        COMPILE_TIME_ASSERT(EXP1::NR == EXP2::NR || EXP1::NR == 0 || EXP2::NR == 0);\n        COMPILE_TIME_ASSERT(EXP1::NC == EXP2::NC || EXP1::NC == 0 || EXP2::NC == 0);\n\n        DLIB_ASSERT(real_part.nr() == imag_part.nr() &&\n               real_part.nc() == imag_part.nc(), \n            \"\\tconst matrix_exp::type complex_matrix(real_part, imag_part)\"\n            << \"\\n\\tYou can only make a complex matrix from two equally sized matrices\"\n            << \"\\n\\treal_part.nr(): \" << real_part.nr()\n            << \"\\n\\treal_part.nc(): \" << real_part.nc() \n            << \"\\n\\timag_part.nr(): \" << imag_part.nr()\n            << \"\\n\\timag_part.nc(): \" << imag_part.nc() \n            );\n\n        typedef op_complex_matrix2<EXP1,EXP2> op;\n        return matrix_op<op>(op(real_part.ref(),imag_part.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_norm : basic_op_m<M>\n    {\n        op_norm( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost+6;\n        typedef typename M::type::value_type type;\n        typedef const typename M::type::value_type const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { return std::norm(this->m(r,c)); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_norm<EXP> > norm (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_norm<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_real : basic_op_m<M>\n    {\n        op_real( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost;\n        typedef typename M::type::value_type type;\n        typedef const typename M::type::value_type const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { return std::real(this->m(r,c)); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_real<EXP> > real (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_real<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_imag : basic_op_m<M>\n    {\n        op_imag( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost;\n        typedef typename M::type::value_type type;\n        typedef const typename M::type::value_type const_ret_type;\n        const_ret_type apply (long r, long c) const\n        { return std::imag(this->m(r,c)); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_imag<EXP> > imag (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_imag<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_MATH_FUNCTIONS\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_math_functions_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MATRIx_MATH_FUNCTIONS_ABSTRACT_\n#ifdef DLIB_MATRIx_MATH_FUNCTIONS_ABSTRACT_\n\n#include \"matrix_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                          Exponential Functions \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp exp (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::exp(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp log10 (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::log10(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp log (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::log(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp sqrt (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == sqrt(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    const matrix_exp pow (\n        const matrix_exp& m,\n        const T& e\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == pow(m(r,c),e) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    const matrix_exp pow (\n        const T& b,\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == pow(b, m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp squared (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == m(r,c)*m(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp cubed (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == m(r,c)*m(r,c)*m(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                               Miscellaneous\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp sign (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix that tells the sign of each element in m. In particular:\n              returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                    - if (m(r,c) >= 0) then\n                        - R(r,c) == +1\n                    - else\n                        - R(r,c) == -1\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp sigmoid (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == 1/(1 + exp(-m(r,c))) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp abs (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - if (m contains std::complex<T> objects) then\n                    - R::type == T \n                - else\n                    - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::abs(m(r,c)) \n                  (note that if m is complex then std::abs(val) performs sqrt(std::norm(val))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp reciprocal (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, long double, std::complex<float>,\n              std::complex<double>, or std::complex<long double>\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                    - if (m(r,c) != 0) then\n                        - R(r,c) == 1.0/m(r,c) \n                    - else\n                        - R(r,c) == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp reciprocal_max (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, long double\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                    - if (m(r,c) != 0) then\n                        - R(r,c) == 1.0/m(r,c) \n                    - else\n                        - R(r,c) == std::numeric_limits<R::type>::max() \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp normalize (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - if (sqrt(sum(squared(m))) != 0) then\n                - returns m/sqrt(sum(squared(m)))\n            - else\n                - returns m\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                          Rounding numbers one way or another\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp round (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n              (i.e. m must contain a type like int, float, double, long, etc.)\n        ensures\n            - if (m contains integers) then\n                - returns m unmodified\n            - else\n                - returns a matrix R such that:\n                    - R::type == the same type that was in m\n                    - R has the same dimensions as m\n                    - for all valid r and c:\n                      R(r,c) == m(r,c) rounded to the nearest integral value\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp ceil (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::ceil(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp floor (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::floor(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp round_zeros (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n              (i.e. m must contain a type like int, float, double, long, etc.)\n        ensures\n            - if (m contains integers) then\n                - returns m unmodified\n            - else\n                - returns a matrix R such that:\n                    - R::type == the same type that was in m\n                    - R has the same dimensions as m\n                    - let eps == 10*std::numeric_limits<matrix_exp::type>::epsilon()\n                    - for all valid r and c:\n                        - if (abs(m(r,c)) >= eps) then\n                            - R(r,c) == m(r,c)\n                        - else\n                            - R(r,c) == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp round_zeros (\n        const matrix_exp& m,\n        matrix_exp::type eps \n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n              (i.e. m must contain a type like int, float, double, long, etc.)\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                    - if (abs(m(r,c)) >= eps) then\n                        - R(r,c) == m(r,c)\n                    - else\n                        - R(r,c) == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                              Complex number utility functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp conj (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == std::complex<T>\n        ensures\n            - returns a matrix R such that:\n                - R::type == std::complex<T>\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::conj(m(r,c))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp norm (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == std::complex<T>\n        ensures\n            - returns a matrix R such that:\n                - R::type == T\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::norm(m(r,c))\n                  (note that std::norm(val) == val.real()*val.real() + val.imag()*val.imag())\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp imag (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == std::complex<T>\n        ensures\n            - returns a matrix R such that:\n                - R::type == T\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::imag(m(r,c))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp real (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == std::complex<T>\n        ensures\n            - returns a matrix R such that:\n                - R::type == T\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::real(m(r,c))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp complex_matrix (\n        const matrix_exp& real_part\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == std::complex<T> where T is whatever type real_part used.\n                - R has the same dimensions as real_part. \n                - for all valid r and c:\n                  R(r,c) == std::complex(real_part(r,c), 0)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp complex_matrix (\n        const matrix_exp& real_part,\n        const matrix_exp& imag_part\n    );\n    /*!\n        requires\n            - real_part.nr() == imag_part.nr()\n            - real_part.nc() == imag_part.nc()\n            - real_part and imag_part both contain the same type of element\n        ensures\n            - returns a matrix R such that:\n                - R::type == std::complex<T> where T is whatever type real_part and imag_part used.\n                - R has the same dimensions as real_part and imag_part\n                - for all valid r and c:\n                  R(r,c) == std::complex(real_part(r,c),imag_part(r,c))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                              Trigonometric Functions \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp sin (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::sin(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp cos (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::cos(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp tan (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::tan(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp asin (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::asin(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp acos (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::acos(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp atan (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::atan(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp sinh (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::sinh(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp cosh (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::cosh(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp tanh (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == float, double, or long double \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R(r,c) == std::tanh(m(r,c)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_MATH_FUNCTIONS_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_op.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_OP_H_\n#define DLIB_MATRIx_OP_H_\n\n#include \"matrix_exp.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename OP >\n    class matrix_op;\n\n    template < typename OP >\n    struct matrix_traits<matrix_op<OP> >\n    {\n        typedef typename OP::type type;\n        typedef typename OP::const_ret_type const_ret_type;\n        typedef typename OP::mem_manager_type mem_manager_type;\n        typedef typename OP::layout_type layout_type;\n        const static long NR = OP::NR;\n        const static long NC = OP::NC;\n        const static long cost = OP::cost;\n    };\n\n    template <\n        typename OP\n        >\n    class matrix_op : public matrix_exp<matrix_op<OP> >\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                The matrix_op is simply a tool for reducing the amount of boilerplate\n                you need to write when creating matrix expressions.  \n        !*/\n\n    public:\n        typedef typename matrix_traits<matrix_op>::type type;\n        typedef typename matrix_traits<matrix_op>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_op>::mem_manager_type mem_manager_type;\n        typedef typename matrix_traits<matrix_op>::layout_type layout_type;\n        const static long NR = matrix_traits<matrix_op>::NR;\n        const static long NC = matrix_traits<matrix_op>::NC;\n        const static long cost = matrix_traits<matrix_op>::cost;\n\n    private:\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of object.\n        template <typename T1>\n        matrix_op (T1); \n    public:\n\n        matrix_op (\n            const OP& op_\n        ) :\n            op(op_)\n        {}\n\n        const_ret_type operator() (\n            long r, \n            long c\n        ) const { return op.apply(r,c); }\n\n        const_ret_type operator() ( long i ) const \n        { return matrix_exp<matrix_op>::operator()(i); }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const { return op.aliases(item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const { return op.destructively_aliases(item); }\n\n        long nr (\n        ) const { return op.nr(); }\n\n        long nc (\n        ) const { return op.nc(); }\n\n\n        const OP op;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename OP >\n    class matrix_diag_op;\n\n    template < typename OP >\n    struct matrix_traits<matrix_diag_op<OP> >\n    {\n        typedef typename OP::type type;\n        typedef typename OP::const_ret_type const_ret_type;\n        typedef typename OP::mem_manager_type mem_manager_type;\n        typedef typename OP::layout_type layout_type;\n        const static long NR = OP::NR;\n        const static long NC = OP::NC;\n        const static long cost = OP::cost;\n    };\n\n    template <\n        typename OP\n        >\n    class matrix_diag_op : public matrix_diag_exp<matrix_diag_op<OP> >\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                The matrix_diag_op is simply a tool for reducing the amount of boilerplate\n                you need to write when creating matrix expressions.  \n        !*/\n\n    public:\n        typedef typename matrix_traits<matrix_diag_op>::type type;\n        typedef typename matrix_traits<matrix_diag_op>::const_ret_type const_ret_type;\n        typedef typename matrix_traits<matrix_diag_op>::mem_manager_type mem_manager_type;\n        typedef typename matrix_traits<matrix_diag_op>::layout_type layout_type;\n        const static long NR = matrix_traits<matrix_diag_op>::NR;\n        const static long NC = matrix_traits<matrix_diag_op>::NC;\n        const static long cost = matrix_traits<matrix_diag_op>::cost;\n\n    private:\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of object.\n        template <typename T1>\n        matrix_diag_op (T1); \n    public:\n\n        matrix_diag_op (\n            const OP& op_\n        ) :\n            op(op_)\n        {}\n\n        const_ret_type operator() (\n            long r, \n            long c\n        ) const { return op.apply(r,c); }\n\n        const_ret_type operator() ( long i ) const \n        { return matrix_exp<matrix_diag_op>::operator()(i); }\n\n        template <typename U>\n        bool aliases (\n            const matrix_exp<U>& item\n        ) const { return op.aliases(item); }\n\n        template <typename U>\n        bool destructively_aliases (\n            const matrix_exp<U>& item\n        ) const { return op.destructively_aliases(item); }\n\n        long nr (\n        ) const { return op.nr(); }\n\n        long nc (\n        ) const { return op.nc(); }\n\n\n        const OP op;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct does_not_alias \n    {\n        /*!\n            This is a partial implementation of a matrix operator that never aliases\n            another expression.\n        !*/\n\n        template <typename U> bool aliases               ( const U& ) const { return false; }\n        template <typename U> bool destructively_aliases ( const U& ) const { return false; }\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct basic_op_m \n    {\n        /*!\n            This is a partial implementation of a matrix operator that preserves\n            the dimensions of its argument and doesn't have destructive aliasing.\n        !*/\n\n    private:\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of object.\n        template <typename T1>\n        basic_op_m (T1); \n    public:\n\n        basic_op_m(\n            const M& m_\n        ) : m(m_){}\n\n        const M& m;\n\n        const static long NR = M::NR;\n        const static long NC = M::NC;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n\n        long nr () const { return m.nr(); }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m.destructively_aliases(item); }\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct basic_op_mm \n    {\n        /*!\n            This is a partial implementation of a matrix operator that preserves\n            the dimensions of its arguments and doesn't have destructive aliasing.\n        !*/\n\n    private:\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of object.\n        template <typename T1, typename T2>\n        basic_op_mm (T1, T2); \n    public:\n\n        basic_op_mm(\n            const M1& m1_,\n            const M2& m2_\n        ) : m1(m1_), m2(m2_){}\n\n        const M1& m1;\n        const M2& m2;\n\n        const static long NR = M1::NR;\n        const static long NC = M1::NC;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n\n        long nr () const { return m1.nr(); }\n        long nc () const { return m1.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.destructively_aliases(item) || m2.destructively_aliases(item); }\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, typename M3>\n    struct basic_op_mmm \n    {\n        /*!\n            This is a partial implementation of a matrix operator that preserves\n            the dimensions of its arguments and doesn't have destructive aliasing.\n        !*/\n\n    private:\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of object.\n        template <typename T1, typename T2, typename T3>\n        basic_op_mmm (T1, T2, T3); \n    public:\n\n        basic_op_mmm(\n            const M1& m1_,\n            const M2& m2_,\n            const M3& m3_\n        ) : m1(m1_), m2(m2_), m3(m3_){}\n\n        const M1& m1;\n        const M2& m2;\n        const M3& m3;\n\n        const static long NR = M1::NR;\n        const static long NC = M1::NC;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n\n        long nr () const { return m1.nr(); }\n        long nc () const { return m1.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item) || m3.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.destructively_aliases(item) || m2.destructively_aliases(item) ||\n                 m3.destructively_aliases(item);}\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, typename M3, typename M4>\n    struct basic_op_mmmm \n    {\n        /*!\n            This is a partial implementation of a matrix operator that preserves\n            the dimensions of its arguments and doesn't have destructive aliasing.\n        !*/\n\n    private:\n        // This constructor exists simply for the purpose of causing a compile time error if\n        // someone tries to create an instance of this object with the wrong kind of object.\n        template <typename T1, typename T2, typename T3, typename T4>\n        basic_op_mmmm (T1, T2, T3, T4); \n    public:\n\n        basic_op_mmmm(\n            const M1& m1_,\n            const M2& m2_,\n            const M3& m3_,\n            const M4& m4_\n        ) : m1(m1_), m2(m2_), m3(m3_), m4(m4_){}\n\n        const M1& m1;\n        const M2& m2;\n        const M3& m3;\n        const M4& m4;\n\n        const static long NR = M1::NR;\n        const static long NC = M1::NC;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n\n        long nr () const { return m1.nr(); }\n        long nc () const { return m1.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item) || m3.aliases(item) || m4.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.destructively_aliases(item) || m2.destructively_aliases(item) ||\n                 m3.destructively_aliases(item) || m4.destructively_aliases(item);}\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n#define DLIB_DEFINE_OP_M(op_name, function, extra_cost)                                         \\\n    template <typename M>                                                                       \\\n    struct op_name                                                                              \\\n    {                                                                                           \\\n        op_name(                                                                                \\\n            const M& m_                                                                         \\\n        ) : m(m_){}                                                                             \\\n                                                                                                \\\n        const M& m;                                                                             \\\n                                                                                                \\\n        const static long cost = M::cost+(extra_cost);                                          \\\n        const static long NR = M::NR;                                                           \\\n        const static long NC = M::NC;                                                           \\\n        typedef typename M::type type;                                                          \\\n        typedef const typename M::type const_ret_type;                                          \\\n        typedef typename M::mem_manager_type mem_manager_type;                                  \\\n        typedef typename M::layout_type layout_type;                                            \\\n                                                                                                \\\n        const_ret_type apply (long r, long c) const { return function(m(r,c)); }                \\\n                                                                                                \\\n        long nr () const { return m.nr(); }                                                     \\\n        long nc () const { return m.nc(); }                                                     \\\n                                                                                                \\\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const     \\\n        { return m.aliases(item); }                                                             \\\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const     \\\n        { return m.destructively_aliases(item); }                                               \\\n                                                                                                \\\n    };                                                                                          \n\n#define DLIB_DEFINE_FUNCTION_M(op_name, name, function, extra_cost)                             \\\n    DLIB_DEFINE_OP_M(op_name, function, extra_cost)                                             \\\n    template < typename M >                                                                     \\\n    const matrix_op<op_name<M> > name ( const matrix_exp<M>& m)                                 \\\n    {                                                                                           \\\n        typedef op_name<M> op;                                                                  \\\n        return matrix_op<op>(op(m.ref()));                                                      \\\n    }\n\n// ----------------------------------------------------------------------------------------\n\n#define DLIB_DEFINE_OP_MS(op_name, function, extra_cost)                                        \\\n    template <typename M, typename S>                                                           \\\n    struct op_name                                                                              \\\n    {                                                                                           \\\n        op_name(                                                                                \\\n            const M& m_,                                                                        \\\n            const S& s_                                                                         \\\n        ) : m(m_), s(s_){}                                                                      \\\n                                                                                                \\\n        const M& m;                                                                             \\\n        const S s;                                                                              \\\n                                                                                                \\\n        const static long cost = M::cost+(extra_cost);                                          \\\n        const static long NR = M::NR;                                                           \\\n        const static long NC = M::NC;                                                           \\\n        typedef typename M::type type;                                                          \\\n        typedef const typename M::type const_ret_type;                                          \\\n        typedef typename M::mem_manager_type mem_manager_type;                                  \\\n        typedef typename M::layout_type layout_type;                                            \\\n                                                                                                \\\n        const_ret_type apply (long r, long c) const { return function(m(r,c), s); }             \\\n                                                                                                \\\n        long nr () const { return m.nr(); }                                                     \\\n        long nc () const { return m.nc(); }                                                     \\\n                                                                                                \\\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const     \\\n        { return m.aliases(item); }                                                             \\\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const     \\\n        { return m.destructively_aliases(item); }                                               \\\n                                                                                                \\\n    };                                                                                          \n                                                                                                \n#define DLIB_DEFINE_FUNCTION_MS(op_name, name, function, extra_cost)                            \\\n    DLIB_DEFINE_OP_MS(op_name, function, extra_cost)                                            \\\n    template < typename M, typename S >                                                         \\\n    const matrix_op<op_name<M, S> > name ( const matrix_exp<M>& m, const S& s)                  \\\n    {                                                                                           \\\n        typedef op_name<M, S> op;                                                               \\\n        return matrix_op<op>(op(m.ref(), s));                                                   \\\n    }\n\n// ----------------------------------------------------------------------------------------\n\n#define DLIB_DEFINE_OP_SM(op_name, function, extra_cost)                                        \\\n    template <typename S, typename M>                                                           \\\n    struct op_name                                                                              \\\n    {                                                                                           \\\n        op_name(                                                                                \\\n            const S& s_,                                                                        \\\n            const M& m_                                                                         \\\n        ) : m(m_), s(s_){}                                                                      \\\n                                                                                                \\\n        const M& m;                                                                             \\\n        const S s;                                                                              \\\n                                                                                                \\\n        const static long cost = M::cost+(extra_cost);                                          \\\n        const static long NR = M::NR;                                                           \\\n        const static long NC = M::NC;                                                           \\\n        typedef typename M::type type;                                                          \\\n        typedef const typename M::type const_ret_type;                                          \\\n        typedef typename M::mem_manager_type mem_manager_type;                                  \\\n        typedef typename M::layout_type layout_type;                                            \\\n                                                                                                \\\n        const_ret_type apply (long r, long c) const { return function(s, m(r,c)); }             \\\n                                                                                                \\\n        long nr () const { return m.nr(); }                                                     \\\n        long nc () const { return m.nc(); }                                                     \\\n                                                                                                \\\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const     \\\n        { return m.aliases(item); }                                                             \\\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const     \\\n        { return m.destructively_aliases(item); }                                               \\\n                                                                                                \\\n    };                                                                                          \n                                                                                                \n#define DLIB_DEFINE_FUNCTION_SM(op_name, name, function, extra_cost)                            \\\n    DLIB_DEFINE_OP_SM(op_name, function, extra_cost)                                            \\\n    template < typename S, typename M >                                                         \\\n    const matrix_op<op_name<S, M> > name (const S& s, const matrix_exp<M>& m)                   \\\n    {                                                                                           \\\n        typedef op_name<S, M> op;                                                               \\\n        return matrix_op<op>(op(s, m.ref()));                                                   \\\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_OP_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_qr.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n// This code was adapted from code from the JAMA part of NIST's TNT library.\n//    See: http://math.nist.gov/tnt/ \n#ifndef DLIB_MATRIX_QR_DECOMPOSITION_H\n#define DLIB_MATRIX_QR_DECOMPOSITION_H\n\n#include \"matrix.h\" \n#include \"matrix_utilities.h\"\n#include \"matrix_subexp.h\"\n\n#ifdef DLIB_USE_LAPACK\n#include \"lapack/geqrf.h\"\n#include \"lapack/ormqr.h\"\n#endif\n\n#include \"matrix_trsm.h\"\n\nnamespace dlib \n{\n\n    template <\n        typename matrix_exp_type\n        >\n    class qr_decomposition \n    {\n\n    public:\n\n        const static long NR = matrix_exp_type::NR;\n        const static long NC = matrix_exp_type::NC;\n        typedef typename matrix_exp_type::type type;\n        typedef typename matrix_exp_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_exp_type::layout_type layout_type;\n\n        typedef matrix<type,0,0,mem_manager_type,layout_type>  matrix_type;\n\n        // You have supplied an invalid type of matrix_exp_type.  You have\n        // to use this object with matrices that contain float or double type data.\n        COMPILE_TIME_ASSERT((is_same_type<float, type>::value || \n                             is_same_type<double, type>::value ));\n\n\n\n        template <typename EXP>\n        qr_decomposition(\n            const matrix_exp<EXP>& A\n        );\n\n        bool is_full_rank(\n        ) const;\n\n        long nr(\n        ) const;\n\n        long nc(\n        ) const;\n\n        const matrix_type get_r (\n        ) const;\n\n        const matrix_type get_q (\n        ) const;\n\n        void get_q (\n            matrix_type& Q\n        ) const;\n\n        template <typename EXP>\n        const matrix_type solve (\n            const matrix_exp<EXP>& B\n        ) const;\n\n    private:\n\n#ifndef DLIB_USE_LAPACK\n        template <typename EXP>\n        const matrix_type solve_mat (\n            const matrix_exp<EXP>& B\n        ) const;\n\n        template <typename EXP>\n        const matrix_type solve_vect (\n            const matrix_exp<EXP>& B\n        ) const;\n#endif\n\n\n        /** Array for internal storage of decomposition.\n        @serial internal array storage.\n        */\n        matrix<type,0,0,mem_manager_type,column_major_layout> QR_;\n\n        /** Row and column dimensions.\n        @serial column dimension.\n        @serial row dimension.\n        */\n        long m, n;\n\n        /** Array for internal storage of diagonal of R.\n        @serial diagonal of R.\n        */\n        typedef matrix<type,0,1,mem_manager_type,column_major_layout> column_vector_type;\n        column_vector_type tau;\n        column_vector_type Rdiag;\n\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                      Member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    qr_decomposition<matrix_exp_type>::\n    qr_decomposition(\n        const matrix_exp<EXP>& A\n    )\t\t\n    {\n        COMPILE_TIME_ASSERT((is_same_type<type, typename EXP::type>::value));\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(A.nr() >= A.nc() && A.size() > 0,\n            \"\\tqr_decomposition::qr_decomposition(A)\"\n            << \"\\n\\tInvalid inputs were given to this function\"\n            << \"\\n\\tA.nr():   \" << A.nr()\n            << \"\\n\\tA.nc():   \" << A.nc()\n            << \"\\n\\tA.size(): \" << A.size()\n            << \"\\n\\tthis:     \" << this\n            );\n\n\n        QR_ = A;\n        m = A.nr();\n        n = A.nc();\n\n#ifdef DLIB_USE_LAPACK\n\n        lapack::geqrf(QR_, tau);\n        Rdiag = diag(QR_);\n\n#else\n        Rdiag.set_size(n);\n        long i=0, j=0, k=0;\n\n        // Main loop.\n        for (k = 0; k < n; k++) \n        {\n            // Compute 2-norm of k-th column without under/overflow.\n            type nrm = 0;\n            for (i = k; i < m; i++) \n            {\n                nrm = hypot(nrm,QR_(i,k));\n            }\n\n            if (nrm != 0.0) \n            {\n                // Form k-th Householder vector.\n                if (QR_(k,k) < 0) \n                {\n                    nrm = -nrm;\n                }\n                for (i = k; i < m; i++) \n                {\n                    QR_(i,k) /= nrm;\n                }\n                QR_(k,k) += 1.0;\n\n                // Apply transformation to remaining columns.\n                for (j = k+1; j < n; j++) \n                {\n                    type s = 0.0; \n                    for (i = k; i < m; i++) \n                    {\n                        s += QR_(i,k)*QR_(i,j);\n                    }\n                    s = -s/QR_(k,k);\n                    for (i = k; i < m; i++) \n                    {\n                        QR_(i,j) += s*QR_(i,k);\n                    }\n                }\n            }\n            Rdiag(k) = -nrm;\n        }\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    long qr_decomposition<matrix_exp_type>::\n    nr (\n    ) const\n    {\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    long qr_decomposition<matrix_exp_type>::\n    nc (\n    ) const\n    {\n        return n;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    bool qr_decomposition<matrix_exp_type>::\n    is_full_rank(\n    ) const\t\t\n    {\n        type eps = max(abs(Rdiag));\n        if (eps != 0)\n            eps *= std::sqrt(std::numeric_limits<type>::epsilon())/100;\n        else\n            eps = 1;  // there is no max so just use 1\n\n        // check if any of the elements of Rdiag are effectively 0\n        return min(abs(Rdiag)) > eps;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename qr_decomposition<matrix_exp_type>::matrix_type qr_decomposition<matrix_exp_type>::\n    get_r(\n    ) const\n    {\n        matrix_type R(n,n);\n        for (long i = 0; i < n; i++) \n        {\n            for (long j = 0; j < n; j++) \n            {\n                if (i < j) \n                {\n                    R(i,j) = QR_(i,j);\n                } \n                else if (i == j) \n                {\n                    R(i,j) = Rdiag(i);\n                } \n                else \n                {\n                    R(i,j) = 0.0;\n                }\n            }\n        }\n        return R;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    const typename qr_decomposition<matrix_exp_type>::matrix_type qr_decomposition<matrix_exp_type>::\n    get_q(\n    ) const\n    {\n        matrix_type Q;\n        get_q(Q);\n        return Q;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    void qr_decomposition<matrix_exp_type>::\n    get_q(\n        matrix_type& X\n    ) const\n    {\n#ifdef DLIB_USE_LAPACK\n        // Take only the first n columns of an identity matrix.  This way\n        // X ends up being an m by n matrix.\n        X = colm(identity_matrix<type>(m), range(0,n-1));\n\n        // Compute Y = Q*X \n        lapack::ormqr('L','N', QR_, tau, X);\n\n#else\n        long i=0, j=0, k=0;\n\n        X.set_size(m,n);\n        for (k = n-1; k >= 0; k--) \n        {\n            for (i = 0; i < m; i++) \n            {\n                X(i,k) = 0.0;\n            }\n            X(k,k) = 1.0;\n            for (j = k; j < n; j++) \n            {\n                if (QR_(k,k) != 0) \n                {\n                    type s = 0.0;\n                    for (i = k; i < m; i++) \n                    {\n                        s += QR_(i,k)*X(i,j);\n                    }\n                    s = -s/QR_(k,k);\n                    for (i = k; i < m; i++) \n                    {\n                        X(i,j) += s*QR_(i,k);\n                    }\n                }\n            }\n        }\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    const typename qr_decomposition<matrix_exp_type>::matrix_type qr_decomposition<matrix_exp_type>::\n    solve(\n        const matrix_exp<EXP>& B\n    ) const\n    {\n        COMPILE_TIME_ASSERT((is_same_type<type, typename EXP::type>::value));\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(B.nr() == nr(),\n            \"\\tconst matrix_type qr_decomposition::solve(B)\"\n            << \"\\n\\tInvalid inputs were given to this function\"\n            << \"\\n\\tB.nr():         \" << B.nr()\n            << \"\\n\\tnr():           \" << nr()\n            << \"\\n\\tthis:           \" << this\n            );\n\n#ifdef DLIB_USE_LAPACK\n\n        using namespace blas_bindings;\n        matrix<type,0,0,mem_manager_type,column_major_layout> X(B);\n        // Compute Y = transpose(Q)*B\n        lapack::ormqr('L','T',QR_, tau, X);\n        // Solve R*X = Y;\n        triangular_solver(CblasLeft, CblasUpper, CblasNoTrans, CblasNonUnit, QR_, X, n);\n\n        /* return n x nx portion of X */\n        return subm(X,0,0,n,B.nc());\n\n#else\n        // just call the right version of the solve function\n        if (B.nc() == 1)\n            return solve_vect(B);\n        else\n            return solve_mat(B);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                           Private member functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n#ifndef DLIB_USE_LAPACK\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    const typename qr_decomposition<matrix_exp_type>::matrix_type qr_decomposition<matrix_exp_type>::\n    solve_vect(\n        const matrix_exp<EXP>& B\n    ) const\n    {\n\n        column_vector_type x(B);\n\n        // Compute Y = transpose(Q)*B\n        for (long k = 0; k < n; k++) \n        {\n            type s = 0.0; \n            for (long i = k; i < m; i++) \n            {\n                s += QR_(i,k)*x(i);\n            }\n            s = -s/QR_(k,k);\n            for (long i = k; i < m; i++) \n            {\n                x(i) += s*QR_(i,k);\n            }\n        }\n        // Solve R*X = Y;\n        for (long k = n-1; k >= 0; k--) \n        {\n            x(k) /= Rdiag(k);\n            for (long i = 0; i < k; i++) \n            {\n                x(i) -= x(k)*QR_(i,k);\n            }\n        }\n\n\n        /* return n x 1 portion of x */\n        return colm(x,0,n);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_exp_type>\n    template <typename EXP>\n    const typename qr_decomposition<matrix_exp_type>::matrix_type qr_decomposition<matrix_exp_type>::\n    solve_mat(\n        const matrix_exp<EXP>& B\n    ) const\n    {\n        const long nx = B.nc(); \n        matrix_type X(B);\n        long i=0, j=0, k=0;\n\n        // Compute Y = transpose(Q)*B\n        for (k = 0; k < n; k++) \n        {\n            for (j = 0; j < nx; j++) \n            {\n                type s = 0.0; \n                for (i = k; i < m; i++) \n                {\n                    s += QR_(i,k)*X(i,j);\n                }\n                s = -s/QR_(k,k);\n                for (i = k; i < m; i++) \n                {\n                    X(i,j) += s*QR_(i,k);\n                }\n            }\n        }\n        // Solve R*X = Y;\n        for (k = n-1; k >= 0; k--) \n        {\n            for (j = 0; j < nx; j++) \n            {\n                X(k,j) /= Rdiag(k);\n            }\n            for (i = 0; i < k; i++) \n            {\n                for (j = 0; j < nx; j++) \n                {\n                    X(i,j) -= X(k,j)*QR_(i,k);\n                }\n            }\n        }\n\n        /* return n x nx portion of X */\n        return subm(X,0,0,n,nx);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_USE_LAPACK not defined\n\n} \n\n#endif // DLIB_MATRIX_QR_DECOMPOSITION_H \n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_read_from_istream.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_READ_FROM_ISTREAM_H_h_\n#define DLIB_MATRIx_READ_FROM_ISTREAM_H_h_\n\n#include \"matrix.h\"\n#include <vector>\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline bool next_is_whitespace (\n            std::istream& in\n        )\n        {\n            return in.peek() == '\\n' ||\n                in.peek() == ' ' || \n                in.peek() == ',' || \n                in.peek() == '\\t' ||\n                in.peek() == '\\r';\n        }\n    }\n\n    template <typename T, long NR, long NC, typename MM, typename L>\n    std::istream& operator>> (\n        std::istream& in,\n        matrix<T,NR,NC,MM,L>& m\n    )\n    {\n        using namespace dlib::impl;\n        long num_rows = 0;\n        std::vector<T> buf;\n        buf.reserve(100);\n\n        // eat any leading whitespace\n        while (next_is_whitespace(in))\n            in.get();\n\n        bool at_start_of_line = true;\n        bool stop = false;\n        while(!stop && in.peek() != EOF)\n        {\n            T temp;\n            in >> temp;\n            if (!in)\n                return in;\n\n            buf.push_back(temp);\n            if (at_start_of_line)\n            {\n                at_start_of_line = false;\n                ++num_rows;\n            }\n\n            // Eat next block of whitespace but also note if we hit the start of the next\n            // line. \n            while (next_is_whitespace(in))\n            {\n                if (at_start_of_line && in.peek() == '\\n')\n                {\n                    stop = true;\n                    break;\n                }\n\n                if (in.get() == '\\n')\n                    at_start_of_line = true;\n            }\n        }\n\n        // It's an error for there to not be any matrix data in the input stream\n        if (num_rows == 0)\n        {\n            in.clear(in.rdstate() | std::ios::failbit);\n            return in;\n        }\n\n        const long num_cols = buf.size()/num_rows;\n        // It's also an error if the sizes don't make sense.\n        if (num_rows*num_cols != (long)buf.size() ||\n            (NR != 0 && NR != num_rows) ||\n            (NC != 0 && NC != num_cols))\n        {\n            in.clear(in.rdstate() | std::ios::failbit);\n            return in;\n        }\n\n\n        m = reshape(mat(buf),num_rows, buf.size()/num_rows);\n\n        if (in.eof())\n        {\n            // Clear the eof and fail bits since this is caused by peeking at the EOF.\n            // But in the current case, we have successfully read the matrix.\n            in.clear(in.rdstate() & (~(std::ios::eofbit | std::ios::failbit)));\n        }\n        return in;\n    }\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_MATRIx_READ_FROM_ISTREAM_H_h_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_subexp.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_SUBEXP_\n#define DLIB_MATRIx_SUBEXP_\n\n#include \"matrix_subexp_abstract.h\"\n#include \"matrix_op.h\"\n#include \"matrix.h\"\n#include \"../geometry/rectangle.h\"\n#include \"matrix_expressions.h\"\n\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    template <long start, long inc, long end>\n    const matrix_range_static_exp<start,inc,end> range (\n    ) \n    { \n        COMPILE_TIME_ASSERT(inc > 0);\n        return matrix_range_static_exp<start,inc,end>(); \n    }\n\n    template <long start, long end>\n    const matrix_range_static_exp<start,1,end> range (\n    ) \n    { \n        return matrix_range_static_exp<start,1,end>(); \n    }\n\n    inline const matrix_range_exp<long> range (\n        long start,\n        long end\n    ) \n    { \n        return matrix_range_exp<long>(start,end); \n    }\n\n    inline const matrix_range_exp<long> range (\n        long start,\n        long inc,\n        long end\n    ) \n    { \n        DLIB_ASSERT(inc > 0, \n            \"\\tconst matrix_exp range(start, inc, end)\"\n            << \"\\n\\tInvalid inputs to this function\"\n            << \"\\n\\tstart: \" << start \n            << \"\\n\\tinc:   \" << inc\n            << \"\\n\\tend:   \" << end\n            );\n\n        return matrix_range_exp<long>(start,inc,end); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_subm \n    {\n        op_subm (\n            const M& m_x,\n            const long& r_x,\n            const long& c_x,\n            const long& nr_x,\n            const long& nc_x\n        ) : m(m_x), r_(r_x), c_(c_x), nr_(nr_x), nc_(nc_x) { }\n\n        const M& m;\n        const long r_;\n        const long c_;\n        const long nr_;\n        const long nc_;\n\n        const static long cost = M::cost+1;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const static long NR = 0;\n        const static long NC = 0;\n\n        const_ret_type apply ( long r, long c) const { return m(r+r_,c+c_); }\n\n        long nr () const { return nr_; }\n        long nc () const { return nc_; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); } \n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_subm<EXP> > subm (\n        const matrix_exp<EXP>& m,\n        long r, \n        long c,\n        long nr,\n        long nc\n    )\n    {\n        DLIB_ASSERT(r >= 0 && c >= 0 && nr >= 0 && nc >= 0 && r+nr <= m.nr() && c+nc <= m.nc(), \n            \"\\tconst matrix_exp subm(const matrix_exp& m, r, c, nr, nc)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tr:      \" << r \n            << \"\\n\\tc:      \" << c \n            << \"\\n\\tnr:     \" << nr \n            << \"\\n\\tnc:     \" << nc \n            );\n\n        typedef op_subm<EXP> op;\n        return matrix_op<op>(op(m.ref(),r,c,nr,nc));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_subm<EXP> > subm (\n        const matrix_exp<EXP>& m,\n        const rectangle& rect\n    )\n    {\n        DLIB_ASSERT(get_rect(m).contains(rect) == true, \n            \"\\tconst matrix_exp subm(const matrix_exp& m, const rectangle& rect)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\trect.left():   \" << rect.left()\n            << \"\\n\\trect.top():    \" << rect.top()\n            << \"\\n\\trect.right():  \" << rect.right()\n            << \"\\n\\trect.bottom(): \" << rect.bottom()\n            );\n\n        typedef op_subm<EXP> op;\n        return matrix_op<op>(op(m.ref(),rect.top(),rect.left(),rect.height(),rect.width()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, typename M3>\n    struct op_subm_range \n    {\n        op_subm_range( const M1& m1_, const M2& rows_, const M3& cols_) : \n            m1(m1_), rows(rows_), cols(cols_) {}\n        const M1& m1;\n        const M2& rows;\n        const M3& cols;\n\n        const static long cost = M1::cost+M2::cost+M3::cost;\n        typedef typename M1::type type;\n        typedef typename M1::const_ret_type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n        const static long NR = M2::NC*M2::NR;\n        const static long NC = M3::NC*M3::NR;\n\n        const_ret_type apply ( long r, long c) const { return m1(rows(r),cols(c)); }\n\n        long nr () const { return rows.size(); }\n        long nc () const { return cols.size(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || rows.aliases(item) || cols.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || rows.aliases(item) || cols.aliases(item); }\n    };\n\n    template <\n        typename EXP,\n        typename EXPr,\n        typename EXPc\n        >\n    const matrix_op<op_subm_range<EXP,EXPr,EXPc> > subm (\n        const matrix_exp<EXP>& m,\n        const matrix_exp<EXPr>& rows,\n        const matrix_exp<EXPc>& cols\n    )\n    {\n        // the rows and cols matrices must contain integer elements \n        COMPILE_TIME_ASSERT(std::numeric_limits<typename EXPr::type>::is_integer);\n        COMPILE_TIME_ASSERT(std::numeric_limits<typename EXPc::type>::is_integer);\n\n        DLIB_ASSERT(0 <= min(rows) && max(rows) < m.nr() && 0 <= min(cols) && max(cols) < m.nc() &&\n                    (rows.nr() == 1 || rows.nc() == 1) && (cols.nr() == 1 || cols.nc() == 1), \n            \"\\tconst matrix_exp subm(const matrix_exp& m, const matrix_exp& rows, const matrix_exp& cols)\"\n            << \"\\n\\tYou have given invalid arguments to this function\"\n            << \"\\n\\tm.nr():     \" << m.nr()\n            << \"\\n\\tm.nc():     \" << m.nc() \n            << \"\\n\\tmin(rows):  \" << min(rows) \n            << \"\\n\\tmax(rows):  \" << max(rows) \n            << \"\\n\\tmin(cols):  \" << min(cols) \n            << \"\\n\\tmax(cols):  \" << max(cols) \n            << \"\\n\\trows.nr():  \" << rows.nr()\n            << \"\\n\\trows.nc():  \" << rows.nc()\n            << \"\\n\\tcols.nr():  \" << cols.nr()\n            << \"\\n\\tcols.nc():  \" << cols.nc()\n            );\n\n        typedef op_subm_range<EXP,EXPr,EXPc> op;\n        return matrix_op<op>(op(m.ref(),rows.ref(),cols.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_rowm \n    {\n        op_rowm(const M& m_, const long& row_) : m(m_), row(row_) {}\n        const M& m;\n        const long row;\n\n        const static long cost = M::cost;\n        const static long NR = 1;\n        const static long NC = M::NC;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long, long c) const { return m(row,c); }\n\n        long nr () const { return 1; }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_rowm<EXP> > rowm (\n        const matrix_exp<EXP>& m,\n        long row\n    )\n    {\n        DLIB_ASSERT(row >= 0 && row < m.nr(), \n            \"\\tconst matrix_exp rowm(const matrix_exp& m, row)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\trow:    \" << row \n            );\n\n        typedef op_rowm<EXP> op;\n        return matrix_op<op>(op(m.ref(),row));\n    }\n\n    template <typename EXP>\n    struct rowm_exp\n    {\n        typedef matrix_op<op_rowm<EXP> > type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_rowm2 \n    {\n        op_rowm2(const M& m_, const long& row_, const long& len) : m(m_), row(row_), length(len) {}\n        const M& m;\n        const long row;\n        const long length;\n\n        const static long cost = M::cost;\n        const static long NR = 1;\n        const static long NC = 0;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long , long c) const { return m(row,c); }\n\n        long nr () const { return 1; }\n        long nc () const { return length; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_rowm2<EXP> > rowm (\n        const matrix_exp<EXP>& m,\n        long row,\n        long length\n    )\n    {\n        DLIB_ASSERT(row >= 0 && row < m.nr() && \n                    length >= 0 && length <= m.nc(), \n            \"\\tconst matrix_exp rowm(const matrix_exp& m, row, length)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\trow:    \" << row \n            << \"\\n\\tlength: \" << length \n            );\n\n        typedef op_rowm2<EXP> op;\n        return matrix_op<op>(op(m.ref(), row, length));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_rowm_range \n    {\n        op_rowm_range( const M1& m1_, const M2& rows_) : m1(m1_), rows(rows_) {}\n        const M1& m1;\n        const M2& rows;\n\n        const static long cost = M1::cost+M2::cost;\n        typedef typename M1::type type;\n        typedef typename M1::const_ret_type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n        const static long NR = M2::NC*M2::NR;\n        const static long NC = M1::NC;\n\n        const_ret_type apply ( long r, long c) const { return m1(rows(r),c); }\n\n        long nr () const { return rows.size(); }\n        long nc () const { return m1.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || rows.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || rows.aliases(item); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    const matrix_op<op_rowm_range<EXP1,EXP2> > rowm (\n        const matrix_exp<EXP1>& m,\n        const matrix_exp<EXP2>& rows\n    )\n    {\n        // the rows matrix must contain integer elements \n        COMPILE_TIME_ASSERT(std::numeric_limits<typename EXP2::type>::is_integer);\n\n        DLIB_ASSERT(0 <= min(rows) && max(rows) < m.nr() && (rows.nr() == 1 || rows.nc() == 1), \n            \"\\tconst matrix_exp rowm(const matrix_exp& m, const matrix_exp& rows)\"\n            << \"\\n\\tYou have given invalid arguments to this function\"\n            << \"\\n\\tm.nr():     \" << m.nr()\n            << \"\\n\\tm.nc():     \" << m.nc() \n            << \"\\n\\tmin(rows):  \" << min(rows) \n            << \"\\n\\tmax(rows):  \" << max(rows) \n            << \"\\n\\trows.nr():  \" << rows.nr()\n            << \"\\n\\trows.nc():  \" << rows.nc()\n            );\n\n        typedef op_rowm_range<EXP1,EXP2> op;\n        return matrix_op<op>(op(m.ref(),rows.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_colm \n    {\n        op_colm(const M& m_, const long& col_) : m(m_), col(col_) {}\n        const M& m;\n        const long col;\n\n        const static long cost = M::cost;\n        const static long NR = M::NR;\n        const static long NC = 1;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long) const { return m(r,col); }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_colm<EXP> > colm (\n        const matrix_exp<EXP>& m,\n        long col \n    )\n    {\n        DLIB_ASSERT(col >= 0 && col < m.nc(), \n            \"\\tconst matrix_exp colm(const matrix_exp& m, row)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tcol:    \" << col \n            );\n\n        typedef op_colm<EXP> op;\n        return matrix_op<op>(op(m.ref(),col));\n    }\n\n    template <typename EXP>\n    struct colm_exp\n    {\n        typedef matrix_op<op_colm<EXP> > type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_colm2 \n    {\n        op_colm2(const M& m_, const long& col_, const long& len) : m(m_), col(col_), length(len) {}\n        const M& m;\n        const long col;\n        const long length;\n\n        const static long cost = M::cost;\n        const static long NR = 0;\n        const static long NC = 1;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long ) const { return m(r,col); }\n\n        long nr () const { return length; }\n        long nc () const { return 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_colm2<EXP> > colm (\n        const matrix_exp<EXP>& m,\n        long col,\n        long length\n    )\n    {\n        DLIB_ASSERT(col >= 0 && col < m.nc() && \n                    length >= 0 && length <= m.nr(), \n            \"\\tconst matrix_exp colm(const matrix_exp& m, col, length)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tcol:    \" << col \n            << \"\\n\\tlength: \" << length \n            );\n\n        typedef op_colm2<EXP> op;\n        return matrix_op<op>(op(m.ref(),col, length));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_colm_range \n    {\n        op_colm_range( const M1& m1_, const M2& cols_) : m1(m1_), cols(cols_) {}\n        const M1& m1;\n        const M2& cols;\n\n        typedef typename M1::type type;\n        typedef typename M1::const_ret_type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n        const static long NR = M1::NR;\n        const static long NC = M2::NC*M2::NR;\n        const static long cost = M1::cost+M2::cost;\n\n        const_ret_type apply (long r, long c) const { return m1(r,cols(c)); }\n\n        long nr () const { return m1.nr(); }\n        long nc () const { return cols.size(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || cols.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || cols.aliases(item); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    const matrix_op<op_colm_range<EXP1,EXP2> > colm (\n        const matrix_exp<EXP1>& m,\n        const matrix_exp<EXP2>& cols\n    )\n    {\n        // the rows matrix must contain integer elements \n        COMPILE_TIME_ASSERT(std::numeric_limits<typename EXP2::type>::is_integer);\n\n        DLIB_ASSERT(0 <= min(cols) && max(cols) < m.nc() && (cols.nr() == 1 || cols.nc() == 1), \n            \"\\tconst matrix_exp colm(const matrix_exp& m, const matrix_exp& cols)\"\n            << \"\\n\\tYou have given invalid arguments to this function\"\n            << \"\\n\\tm.nr():     \" << m.nr()\n            << \"\\n\\tm.nc():     \" << m.nc() \n            << \"\\n\\tmin(cols):  \" << min(cols) \n            << \"\\n\\tmax(cols):  \" << max(cols) \n            << \"\\n\\tcols.nr():  \" << cols.nr()\n            << \"\\n\\tcols.nc():  \" << cols.nc()\n            );\n\n        typedef op_colm_range<EXP1,EXP2> op;\n        return matrix_op<op>(op(m.ref(),cols.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <typename T, long NR, long NC, typename mm, typename l>\n    class assignable_sub_matrix\n    {\n    public:\n        typedef T type;\n        typedef l layout_type;\n        typedef matrix<T,NR,NC,mm,l> matrix_type;\n\n        assignable_sub_matrix(\n            matrix<T,NR,NC,mm,l>& m_,\n            long top_,\n            long left_,\n            long height_,\n            long width_\n        ) : m(m_), left(left_), top(top_), width(width_), height(height_) {}\n\n        T& operator() (\n            long r,\n            long c\n        )\n        {\n            return m(r+top,c+left);\n        }\n\n        const T& operator() (\n            long r,\n            long c\n        ) const\n        {\n            return m(r+top,c+left);\n        }\n\n        long nr() const { return height; }\n        long nc() const { return width; }\n\n        template <typename EXP>\n        assignable_sub_matrix& operator= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nr() == height && exp.nc() == width,\n                \"\\tassignable_matrix_expression set_subm()\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\twidth (target matrix):    \" << width\n                << \"\\n\\theight (target matrix):   \" << height\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, exp); \n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        template <typename EXP>\n        assignable_sub_matrix& operator+= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nr() == height && exp.nc() == width,\n                \"\\tassignable_matrix_expression set_subm()\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\twidth (target matrix):    \" << width\n                << \"\\n\\theight (target matrix):   \" << height\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, subm(m,top,left,height,width)+exp); \n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator+=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        template <typename EXP>\n        assignable_sub_matrix& operator-= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nr() == height && exp.nc() == width,\n                \"\\tassignable_matrix_expression set_subm()\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\twidth (target matrix):    \" << width\n                << \"\\n\\theight (target matrix):   \" << height\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, subm(m,top,left,height,width)-exp); \n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator-=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        assignable_sub_matrix& operator= (\n            const T& value\n        )\n        {\n            const long bottom = top+height-1;\n            const long right = left+width-1;\n            for (long r = top; r <= bottom; ++r)\n            {\n                for (long c = left; c <= right; ++c)\n                {\n                    m(r,c) = value;\n                }\n            }\n\n            return *this;\n        }\n\n        assignable_sub_matrix& operator+= (\n            const T& value\n        )\n        {\n            const long bottom = top+height-1;\n            const long right = left+width-1;\n            for (long r = top; r <= bottom; ++r)\n            {\n                for (long c = left; c <= right; ++c)\n                {\n                    m(r,c) += value;\n                }\n            }\n\n            return *this;\n        }\n\n        assignable_sub_matrix& operator-= (\n            const T& value\n        )\n        {\n            const long bottom = top+height-1;\n            const long right = left+width-1;\n            for (long r = top; r <= bottom; ++r)\n            {\n                for (long c = left; c <= right; ++c)\n                {\n                    m(r,c) -= value;\n                }\n            }\n\n            return *this;\n        }\n\n\n        matrix<T,NR,NC,mm,l>& m;\n        const long left, top, width, height;\n    };\n\n\n    template <typename T, long NR, long NC, typename mm, typename l>\n    assignable_sub_matrix<T,NR,NC,mm,l> set_subm (\n        matrix<T,NR,NC,mm,l>& m,\n        const rectangle& rect\n    )\n    {\n        DLIB_ASSERT(get_rect(m).contains(rect) == true, \n            \"\\tassignable_matrix_expression set_subm(matrix& m, const rectangle& rect)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\trect.left():   \" << rect.left()\n            << \"\\n\\trect.top():    \" << rect.top()\n            << \"\\n\\trect.right():  \" << rect.right()\n            << \"\\n\\trect.bottom(): \" << rect.bottom()\n            );\n\n\n        return assignable_sub_matrix<T,NR,NC,mm,l>(m,rect.top(), rect.left(), rect.height(), rect.width());\n    }\n\n\n    template <typename T, long NR, long NC, typename mm, typename l>\n    assignable_sub_matrix<T,NR,NC,mm,l> set_subm (\n        matrix<T,NR,NC,mm,l>& m,\n        long r, \n        long c,\n        long nr,\n        long nc\n    )\n    {\n        DLIB_ASSERT(r >= 0 && c >= 0 && nr >= 0 && nc >= 0 && r+nr <= m.nr() && c+nc <= m.nc(), \n                    \"\\tassignable_matrix_expression set_subm(matrix& m, r, c, nr, nc)\"\n                    << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n                    << \"\\n\\tm.nr(): \" << m.nr()\n                    << \"\\n\\tm.nc(): \" << m.nc() \n                    << \"\\n\\tr:      \" << r \n                    << \"\\n\\tc:      \" << c \n                    << \"\\n\\tnr:     \" << nr \n                    << \"\\n\\tnc:     \" << nc \n        );\n\n        return assignable_sub_matrix<T,NR,NC,mm,l>(m,r,c, nr, nc);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename mm, typename l, typename EXPr, typename EXPc>\n    class assignable_sub_range_matrix\n    {\n    public:\n        typedef T type;\n        typedef l layout_type;\n        typedef matrix<T,NR,NC,mm,l> matrix_type;\n\n        assignable_sub_range_matrix(\n            matrix<T,NR,NC,mm,l>& m_,\n            const EXPr& rows_,\n            const EXPc& cols_\n        ) : m(m_), rows(rows_), cols(cols_) {}\n\n        T& operator() (\n            long r,\n            long c\n        )\n        {\n            return m(rows(r),cols(c));\n        }\n\n        long nr() const { return rows.size(); }\n        long nc() const { return cols.size(); }\n\n\n        template <typename EXP>\n        assignable_sub_range_matrix& operator= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nr() == rows.size() && exp.nc() == cols.size(),\n                \"\\tassignable_matrix_expression set_subm(matrix& m, const matrix_exp rows, const matrix_exp cols)\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\trows.size() (target matrix):  \" << rows.size()\n                << \"\\n\\tcols.size() (target matrix):  \" << cols.size()\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, exp);\n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        template <typename EXP>\n        assignable_sub_range_matrix& operator+= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nr() == rows.size() && exp.nc() == cols.size(),\n                \"\\tassignable_matrix_expression set_subm(matrix& m, const matrix_exp rows, const matrix_exp cols)\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\trows.size() (target matrix):  \" << rows.size()\n                << \"\\n\\tcols.size() (target matrix):  \" << cols.size()\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, subm(m,rows,cols)+exp);\n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator+=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        template <typename EXP>\n        assignable_sub_range_matrix& operator-= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nr() == rows.size() && exp.nc() == cols.size(),\n                \"\\tassignable_matrix_expression set_subm(matrix& m, const matrix_exp rows, const matrix_exp cols)\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\trows.size() (target matrix):  \" << rows.size()\n                << \"\\n\\tcols.size() (target matrix):  \" << cols.size()\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, subm(m,rows,cols)-exp);\n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator-=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        assignable_sub_range_matrix& operator= (\n            const T& value\n        )\n        {\n            for (long r = 0; r < rows.size(); ++r)\n            {\n                for (long c = 0; c < cols.size(); ++c)\n                {\n                    m(rows(r),cols(c)) = value;\n                }\n            }\n\n            return *this;\n        }\n\n        assignable_sub_range_matrix& operator+= (\n            const T& value\n        )\n        {\n            for (long r = 0; r < rows.size(); ++r)\n            {\n                for (long c = 0; c < cols.size(); ++c)\n                {\n                    m(rows(r),cols(c)) += value;\n                }\n            }\n\n            return *this;\n        }\n\n        assignable_sub_range_matrix& operator-= (\n            const T& value\n        )\n        {\n            for (long r = 0; r < rows.size(); ++r)\n            {\n                for (long c = 0; c < cols.size(); ++c)\n                {\n                    m(rows(r),cols(c)) -= value;\n                }\n            }\n\n            return *this;\n        }\n\n    private:\n\n        matrix<T,NR,NC,mm,l>& m;\n        const EXPr rows;\n        const EXPc cols;\n    };\n\n    template <typename T, long NR, long NC, typename mm, typename l, typename EXPr, typename EXPc>\n    assignable_sub_range_matrix<T,NR,NC,mm,l,EXPr,EXPc > set_subm (\n        matrix<T,NR,NC,mm,l>& m,\n        const matrix_exp<EXPr>& rows,\n        const matrix_exp<EXPc>& cols\n    )\n    {\n        DLIB_ASSERT(0 <= min(rows) && max(rows) < m.nr() && 0 <= min(cols) && max(cols) < m.nc() &&\n                    (rows.nr() == 1 || rows.nc() == 1) && (cols.nr() == 1 || cols.nc() == 1), \n            \"\\tassignable_matrix_expression set_subm(matrix& m, const matrix_exp& rows, const matrix_exp& cols)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr():     \" << m.nr()\n            << \"\\n\\tm.nc():     \" << m.nc() \n            << \"\\n\\tmin(rows):  \" << min(rows) \n            << \"\\n\\tmax(rows):  \" << max(rows) \n            << \"\\n\\tmin(cols):  \" << min(cols) \n            << \"\\n\\tmax(cols):  \" << max(cols) \n            << \"\\n\\trows.nr():  \" << rows.nr()\n            << \"\\n\\trows.nc():  \" << rows.nc()\n            << \"\\n\\tcols.nr():  \" << cols.nr()\n            << \"\\n\\tcols.nc():  \" << cols.nc()\n            );\n\n        return assignable_sub_range_matrix<T,NR,NC,mm,l,EXPr,EXPc >(m,rows.ref(),cols.ref());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename mm, typename l, typename EXPr>\n    assignable_sub_range_matrix<T,NR,NC,mm,l,EXPr,matrix_range_exp<long> > set_rowm (\n        matrix<T,NR,NC,mm,l>& m,\n        const matrix_exp<EXPr>& rows\n    )\n    {\n        DLIB_ASSERT(0 <= min(rows) && max(rows) < m.nr() && (rows.nr() == 1 || rows.nc() == 1), \n            \"\\tassignable_matrix_expression set_rowm(matrix& m, const matrix_exp& rows)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr():     \" << m.nr()\n            << \"\\n\\tm.nc():     \" << m.nc() \n            << \"\\n\\tmin(rows):  \" << min(rows) \n            << \"\\n\\tmax(rows):  \" << max(rows) \n            << \"\\n\\trows.nr():  \" << rows.nr()\n            << \"\\n\\trows.nc():  \" << rows.nc()\n            );\n\n        return assignable_sub_range_matrix<T,NR,NC,mm,l,EXPr,matrix_range_exp<long> >(m,rows.ref(),range(0,m.nc()-1));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename mm, typename l, typename EXPc>\n    assignable_sub_range_matrix<T,NR,NC,mm,l,matrix_range_exp<long>,EXPc > set_colm (\n        matrix<T,NR,NC,mm,l>& m,\n        const matrix_exp<EXPc>& cols\n    )\n    {\n        DLIB_ASSERT(0 <= min(cols) && max(cols) < m.nc() && (cols.nr() == 1 || cols.nc() == 1), \n            \"\\tassignable_matrix_expression set_colm(matrix& m, const matrix_exp& cols)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr():     \" << m.nr()\n            << \"\\n\\tm.nc():     \" << m.nc() \n            << \"\\n\\tmin(cols):  \" << min(cols) \n            << \"\\n\\tmax(cols):  \" << max(cols) \n            << \"\\n\\tcols.nr():  \" << cols.nr()\n            << \"\\n\\tcols.nc():  \" << cols.nc()\n            );\n\n        return assignable_sub_range_matrix<T,NR,NC,mm,l,matrix_range_exp<long>,EXPc >(m,range(0,m.nr()-1),cols.ref());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename mm, typename l>\n    class assignable_col_matrix\n    {\n    public:\n        typedef T type;\n        typedef l layout_type;\n        typedef matrix<T,NR,NC,mm,l> matrix_type;\n\n        assignable_col_matrix(\n            matrix<T,NR,NC,mm,l>& m_,\n            const long col_ \n        ) : m(m_), col(col_) {}\n\n        T& operator() (\n            long r,\n            long \n        )\n        {\n            return m(r,col);\n        }\n\n        const T& operator() (\n            long r,\n            long \n        ) const\n        {\n            return m(r,col);\n        }\n\n        long nr() const { return m.nr(); }\n        long nc() const { return 1; }\n\n        template <typename EXP>\n        assignable_col_matrix& operator= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nc() == 1 && exp.nr() == m.nr(),\n                \"\\tassignable_matrix_expression set_colm()\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\tm.nr() (target matrix):   \" << m.nr()\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, exp); \n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        template <typename EXP>\n        assignable_col_matrix& operator+= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nc() == 1 && exp.nr() == m.nr(),\n                \"\\tassignable_matrix_expression set_colm()\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\tm.nr() (target matrix):   \" << m.nr()\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, colm(m,col)+exp); \n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator+=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        template <typename EXP>\n        assignable_col_matrix& operator-= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nc() == 1 && exp.nr() == m.nr(),\n                \"\\tassignable_matrix_expression set_colm()\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\tm.nr() (target matrix):   \" << m.nr()\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, colm(m,col)-exp); \n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator-=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        assignable_col_matrix& operator= (\n            const T& value\n        )\n        {\n            for (long i = 0; i < m.nr(); ++i)\n            {\n                m(i,col) = value;\n            }\n\n            return *this;\n        }\n\n        assignable_col_matrix& operator+= (\n            const T& value\n        )\n        {\n            for (long i = 0; i < m.nr(); ++i)\n            {\n                m(i,col) += value;\n            }\n\n            return *this;\n        }\n\n        assignable_col_matrix& operator-= (\n            const T& value\n        )\n        {\n            for (long i = 0; i < m.nr(); ++i)\n            {\n                m(i,col) -= value;\n            }\n\n            return *this;\n        }\n\n\n        matrix<T,NR,NC,mm,l>& m;\n        const long col;\n    };\n\n\n    template <typename T, long NR, long NC, typename mm, typename l>\n    assignable_col_matrix<T,NR,NC,mm,l> set_colm (\n        matrix<T,NR,NC,mm,l>& m,\n        const long col \n    )\n    {\n        DLIB_ASSERT(col >= 0 && col < m.nc(), \n            \"\\tassignable_matrix_expression set_colm(matrix& m, col)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tcol:    \" << col \n            );\n\n\n        return assignable_col_matrix<T,NR,NC,mm,l>(m,col);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <typename T, long NR, long NC, typename mm, typename l>\n    class assignable_row_matrix\n    {\n    public:\n        typedef T type;\n        typedef l layout_type;\n        typedef matrix<T,NR,NC,mm,l> matrix_type;\n\n        assignable_row_matrix(\n            matrix<T,NR,NC,mm,l>& m_,\n            const long row_ \n        ) : m(m_), row(row_) {}\n\n\n        T& operator() (\n            long ,\n            long c\n        )\n        {\n            return m(row,c);\n        }\n\n        const T& operator() (\n            long ,\n            long c\n        ) const\n        {\n            return m(row,c);\n        }\n\n        long nr() const { return 1; }\n        long nc() const { return m.nc(); }\n\n\n        template <typename EXP>\n        assignable_row_matrix& operator= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nr() == 1 && exp.nc() == m.nc(),\n                \"\\tassignable_matrix_expression set_rowm()\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\tm.nc() (target matrix):   \" << m.nc()\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, exp); \n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        template <typename EXP>\n        assignable_row_matrix& operator+= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nr() == 1 && exp.nc() == m.nc(),\n                \"\\tassignable_matrix_expression set_rowm()\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\tm.nc() (target matrix):   \" << m.nc()\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, rowm(m,row)+exp); \n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator+=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        template <typename EXP>\n        assignable_row_matrix& operator-= (\n            const matrix_exp<EXP>& exp\n        ) \n        {\n            DLIB_ASSERT( exp.nr() == 1 && exp.nc() == m.nc(),\n                \"\\tassignable_matrix_expression set_rowm()\"\n                << \"\\n\\tYou have tried to assign to this object using a matrix that isn't the right size\"\n                << \"\\n\\texp.nr() (source matrix): \" << exp.nr()\n                << \"\\n\\texp.nc() (source matrix): \" << exp.nc() \n                << \"\\n\\tm.nc() (target matrix):   \" << m.nc()\n                );\n\n            if (exp.destructively_aliases(m) == false)\n            {\n                matrix_assign(*this, rowm(m,row)-exp); \n            }\n            else\n            {\n                // make a temporary copy of the matrix we are going to assign to m to \n                // avoid aliasing issues during the copy\n                this->operator-=(tmp(exp));\n            }\n\n            return *this;\n        }\n\n        assignable_row_matrix& operator= (\n            const T& value\n        )\n        {\n            for (long i = 0; i < m.nc(); ++i)\n            {\n                m(row,i) = value;\n            }\n\n            return *this;\n        }\n\n        assignable_row_matrix& operator+= (\n            const T& value\n        )\n        {\n            for (long i = 0; i < m.nc(); ++i)\n            {\n                m(row,i) += value;\n            }\n\n            return *this;\n        }\n\n        assignable_row_matrix& operator-= (\n            const T& value\n        )\n        {\n            for (long i = 0; i < m.nc(); ++i)\n            {\n                m(row,i) -= value;\n            }\n\n            return *this;\n        }\n\n\n        matrix<T,NR,NC,mm,l>& m;\n        const long row;\n    };\n\n\n    template <typename T, long NR, long NC, typename mm, typename l>\n    assignable_row_matrix<T,NR,NC,mm,l> set_rowm (\n        matrix<T,NR,NC,mm,l>& m,\n        const long row \n    )\n    {\n        DLIB_ASSERT(row >= 0 && row < m.nr(), \n            \"\\tassignable_matrix_expression set_rowm(matrix& m, row)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\trow:    \" << row \n            );\n\n\n        return assignable_row_matrix<T,NR,NC,mm,l>(m,row);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_SUBEXP_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_subexp_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MATRIx_SUBEXP_ABSTRACT_\n#ifdef DLIB_MATRIx_SUBEXP_ABSTRACT_\n\n#include \"matrix_abstract.h\"\n#include \"../geometry/rectangle.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <long start, long inc, long end>\n    const matrix_exp range (\n    );\n    /*!\n        requires\n            - inc > 0\n        ensures\n            - returns a matrix R such that:\n                - R::type == long\n                - R.nr() == 1\n                - R.nc() == abs(end - start)/inc + 1\n                - if (start <= end) then\n                    - R(i) == start + i*inc\n                - else\n                    - R(i) == start - i*inc\n    !*/\n\n    template <long start, long end>\n    const matrix_exp range (\n    ) { return range<start,1,end>(); }\n\n    const matrix_exp range (\n        long start,\n        long inc,\n        long end\n    ); \n    /*!\n        requires\n            - inc > 0\n        ensures\n            - returns a matrix R such that:\n                - R::type == long\n                - R.nr() == 1\n                - R.nc() == abs(end - start)/inc + 1\n                - if (start <= end) then\n                    - R(i) == start + i*inc\n                - else\n                    - R(i) == start - i*inc\n    !*/\n\n    const matrix_exp range (\n        long start,\n        long end\n    ) { return range(start,1,end); }\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp subm (\n        const matrix_exp& m,\n        const matrix_exp& rows,\n        const matrix_exp& cols,\n    );\n    /*!\n        requires\n            - rows and cols contain integral elements (e.g. int, long)\n            - 0 <= min(rows) && max(rows) < m.nr() \n            - 0 <= min(cols) && max(cols) < m.nc()\n            - rows.nr() == 1 || rows.nc() == 1\n            - cols.nr() == 1 || cols.nc() == 1\n              (i.e. rows and cols must be vectors)\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R.nr() == rows.size()\n                - R.nc() == cols.size()\n                - for all valid r and c:\n                  R(r,c) == m(rows(r),cols(c))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp subm (\n        const matrix_exp& m,\n        long row,\n        long col,\n        long nr,\n        long nc\n    );\n    /*!\n        requires\n            - row >= 0\n            - col >= 0\n            - nr >= 0\n            - nc >= 0\n            - row + nr <= m.nr()\n            - col + nc <= m.nc()\n        ensures\n            - returns a matrix R such that:\n                - R.nr() == nr \n                - R.nc() == nc\n                - for all valid r and c:\n                  R(r, c) == m(r+row,c+col)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp subm (\n        const matrix_exp& m,\n        const rectangle& rect\n    );\n    /*!\n        requires\n            - get_rect(m).contains(rect) == true\n              (i.e. rect is a region inside the matrix m)\n        ensures\n            - returns a matrix R such that:\n                - R.nr() == rect.height()  \n                - R.nc() == rect.width()\n                - for all valid r and c:\n                  R(r, c) == m(r+rect.top(), c+rect.left())\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp rowm (\n        const matrix_exp& m,\n        long row\n    );\n    /*!\n        requires\n            - 0 <= row < m.nr()\n        ensures\n            - returns a matrix R such that:\n                - R.nr() == 1\n                - R.nc() == m.nc()\n                - for all valid i:\n                  R(i) == m(row,i)\n    !*/\n\n    template <typename EXP>\n    struct rowm_exp\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This struct allows you to determine the type of matrix expression \n                object returned from the rowm(m,row) function.  An example makes its\n                use clear:\n\n                template <typename EXP>\n                void do_something( const matrix_exp<EXP>& mat)\n                {\n                    // r is a matrix expression that aliases mat.\n                    typename rowm_exp<EXP>::type r = rowm(mat,0);\n\n                    // Print the first row of mat.  So we see that by using\n                    // rowm_exp we can save the object returned by rowm() in\n                    // a local variable.    \n                    cout << r << endl;\n\n                    // Note that you can only save the return value of rowm() to\n                    // a local variable if the argument to rowm() has a lifetime\n                    // beyond the rowm() expression.  The example shown above is\n                    // OK but the following would result in undefined behavior:\n                    typename rowm_exp<EXP>::type bad = rowm(mat + mat,0);\n                }\n        !*/\n        typedef type_of_expression_returned_by_rowm type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp rowm (\n        const matrix_exp& m,\n        long row,\n        long length\n    );\n    /*!\n        requires\n            - 0 <= row < m.nr()\n            - 0 <= length <= m.nc()\n        ensures\n            - returns a matrix R such that:\n                - R.nr() == 1\n                - R.nc() == length\n                - for all valid i:\n                  R(i) == m(row,i)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp rowm (\n        const matrix_exp& m,\n        const matrix_exp& rows\n    );\n    /*!\n        requires\n            - rows contains integral elements (e.g. int, long)\n            - 0 <= min(rows) && max(rows) < m.nr() \n            - rows.nr() == 1 || rows.nc() == 1\n              (i.e. rows must be a vector)\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R.nr() == rows.size()\n                - R.nc() == m.nc() \n                - for all valid r and c:\n                  R(r,c) == m(rows(r),c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp colm (\n        const matrix_exp& m,\n        long col \n    );\n    /*!\n        requires\n            - 0 <= col < m.nc()\n        ensures\n            - returns a matrix R such that:\n                - R.nr() == m.nr() \n                - R.nc() == 1\n                - for all valid i:\n                  R(i) == m(i,col)\n    !*/\n\n    template <typename EXP>\n    struct colm_exp\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This struct allows you to determine the type of matrix expression \n                object returned from the colm(m,col) function.  An example makes its\n                use clear:\n\n                template <typename EXP>\n                void do_something( const matrix_exp<EXP>& mat)\n                {\n                    // c is a matrix expression that aliases mat.\n                    typename colm_exp<EXP>::type c = colm(mat,0);\n\n                    // Print the first column of mat.  So we see that by using\n                    // colm_exp we can save the object returned by colm() in\n                    // a local variable.    \n                    cout << c << endl;\n\n                    // Note that you can only save the return value of colm() to\n                    // a local variable if the argument to colm() has a lifetime\n                    // beyond the colm() expression.  The example shown above is\n                    // OK but the following would result in undefined behavior:\n                    typename colm_exp<EXP>::type bad = colm(mat + mat,0);\n                }\n        !*/\n        typedef type_of_expression_returned_by_colm type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp colm (\n        const matrix_exp& m,\n        long col,\n        long length\n    );\n    /*!\n        requires\n            - 0 <= col < m.nc()\n            - 0 <= length <= m.nr()\n        ensures\n            - returns a matrix R such that:\n                - R.nr() == length \n                - R.nc() == 1\n                - for all valid i:\n                  R(i) == m(i,col)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp colm (\n        const matrix_exp& m,\n        const matrix_exp& cols\n    );\n    /*!\n        requires\n            - cols contains integral elements (e.g. int, long)\n            - 0 <= min(cols) && max(cols) < m.nc() \n            - cols.nr() == 1 || cols.nc() == 1\n              (i.e. cols must be a vector)\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R.nr() == m.nr()\n                - R.nc() == cols.size()\n                - for all valid r and c:\n                  R(r,c) == m(r,cols(c))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    assignable_matrix_expression set_subm (\n        matrix& m,\n        long row,\n        long col,\n        long nr,\n        long nc\n    );\n    /*!\n        requires\n            - row >= 0\n            - col >= 0\n            - nr >= 0\n            - nc >= 0\n            - row + nr <= m.nr()\n            - col + nc <= m.nc()\n        ensures\n            - statements of the following form:\n                - set_subm(m,row,col,nr,nc) = some_matrix;\n              result in it being the case that:\n                - subm(m,row,col,nr,nc) == some_matrix.\n\n            - statements of the following form:\n                - set_subm(m,row,col,nr,nc) = scalar_value;\n              result in it being the case that:\n                - subm(m,row,col,nr,nc) == uniform_matrix<matrix::type>(nr,nc,scalar_value).\n\n            - In addition to the normal assignment statements using the = symbol, you may\n              also use the usual += and -= versions of the assignment operator.  In these\n              cases, they have their usual effect.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    assignable_matrix_expression set_subm (\n        matrix& m,\n        const rectangle& rect\n    );\n    /*!\n        requires\n            - get_rect(m).contains(rect) == true\n              (i.e. rect is a region inside the matrix m)\n        ensures\n            - statements of the following form:\n                - set_subm(m,rect) = some_matrix;\n              result in it being the case that:\n                - subm(m,rect) == some_matrix.\n\n            - statements of the following form:\n                - set_subm(m,rect) = scalar_value;\n              result in it being the case that:\n                - subm(m,rect) == uniform_matrix<matrix::type>(nr,nc,scalar_value).\n\n            - In addition to the normal assignment statements using the = symbol, you may\n              also use the usual += and -= versions of the assignment operator.  In these\n              cases, they have their usual effect.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    assignable_matrix_expression set_subm (\n        matrix& m,\n        const matrix_exp& rows,\n        const matrix_exp& cols\n    );\n    /*!\n        requires\n            - rows and cols contain integral elements (e.g. int, long)\n            - 0 <= min(rows) && max(rows) < m.nr() \n            - 0 <= min(cols) && max(cols) < m.nc()\n            - rows.nr() == 1 || rows.nc() == 1\n            - cols.nr() == 1 || cols.nc() == 1\n              (i.e. rows and cols must be vectors)\n        ensures\n            - statements of the following form:\n                - set_subm(m,rows,cols) = some_matrix;\n              result in it being the case that:\n                - subm(m,rows,cols) == some_matrix.\n\n            - statements of the following form:\n                - set_subm(m,rows,cols) = scalar_value;\n              result in it being the case that:\n                - subm(m,rows,cols) == uniform_matrix<matrix::type>(nr,nc,scalar_value).\n\n            - In addition to the normal assignment statements using the = symbol, you may\n              also use the usual += and -= versions of the assignment operator.  In these\n              cases, they have their usual effect.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    assignable_matrix_expression set_rowm (\n        matrix& m,\n        long row\n    );\n    /*!\n        requires\n            - 0 <= row < m.nr()\n        ensures\n            - statements of the following form:\n                - set_rowm(m,row) = some_matrix;\n              result in it being the case that:\n                - rowm(m,row) == some_matrix.\n\n            - statements of the following form:\n                - set_rowm(m,row) = scalar_value;\n              result in it being the case that:\n                - rowm(m,row) == uniform_matrix<matrix::type>(1,nc,scalar_value).\n\n            - In addition to the normal assignment statements using the = symbol, you may\n              also use the usual += and -= versions of the assignment operator.  In these\n              cases, they have their usual effect.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    assignable_matrix_expression set_rowm (\n        matrix& m,\n        const matrix_exp& rows\n    );\n    /*!\n        requires\n            - rows contains integral elements (e.g. int, long)\n            - 0 <= min(rows) && max(rows) < m.nr() \n            - rows.nr() == 1 || rows.nc() == 1\n              (i.e. rows must be a vector)\n        ensures\n            - statements of the following form:\n                - set_rowm(m,rows) = some_matrix;\n              result in it being the case that:\n                - rowm(m,rows) == some_matrix.\n\n            - statements of the following form:\n                - set_rowm(m,rows) = scalar_value;\n              result in it being the case that:\n                - rowm(m,rows) == uniform_matrix<matrix::type>(nr,nc,scalar_value).\n\n            - In addition to the normal assignment statements using the = symbol, you may\n              also use the usual += and -= versions of the assignment operator.  In these\n              cases, they have their usual effect.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    assignable_matrix_expression set_colm (\n        matrix& m,\n        long col \n    );\n    /*!\n        requires\n            - 0 <= col < m.nr()\n        ensures\n            - statements of the following form:\n                - set_colm(m,col) = some_matrix;\n              result in it being the case that:\n                - colm(m,col) == some_matrix.\n\n            - statements of the following form:\n                - set_colm(m,col) = scalar_value;\n              result in it being the case that:\n                - colm(m,col) == uniform_matrix<matrix::type>(nr,1,scalar_value).\n\n            - In addition to the normal assignment statements using the = symbol, you may\n              also use the usual += and -= versions of the assignment operator.  In these\n              cases, they have their usual effect.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    assignable_matrix_expression set_colm (\n        matrix& m,\n        const matrix_exp& cols\n    );\n    /*!\n        requires\n            - cols contains integral elements (e.g. int, long)\n            - 0 <= min(cols) && max(cols) < m.nc() \n            - cols.nr() == 1 || cols.nc() == 1\n              (i.e. cols must be a vector)\n        ensures\n            - statements of the following form:\n                - set_colm(m,cols) = some_matrix;\n              result in it being the case that:\n                - colm(m,cols) == some_matrix.\n\n            - statements of the following form:\n                - set_colm(m,cols) = scalar_value;\n              result in it being the case that:\n                - colm(m,cols) == uniform_matrix<matrix::type>(nr,nc,scalar_value).\n\n            - In addition to the normal assignment statements using the = symbol, you may\n              also use the usual += and -= versions of the assignment operator.  In these\n              cases, they have their usual effect.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_SUBEXP_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_trsm.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRiX_TRSM_Hh_\n#define DLIB_MATRiX_TRSM_Hh_\n#include \"lapack/fortran_id.h\"\n#include \"cblas_constants.h\"\n\nnamespace dlib\n{\n    namespace blas_bindings\n    {\n\n        extern \"C\"\n        {\n            void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,\n                             const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,\n                             const enum CBLAS_DIAG Diag, const int M, const int N,\n                             const float alpha, const float *A, const int lda,\n                             float *B, const int ldb);\n\n            void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,\n                             const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,\n                             const enum CBLAS_DIAG Diag, const int M, const int N,\n                             const double alpha, const double *A, const int lda,\n                             double *B, const int ldb);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n/*  Purpose */\n/*  ======= */\n\n/*  DTRSM  solves one of the matrix equations */\n\n/*     op( A )*X = alpha*B,   or   X*op( A ) = alpha*B, */\n\n/*  where alpha is a scalar, X and B are m by n matrices, A is a unit, or */\n/*  non-unit,  upper or lower triangular matrix  and  op( A )  is one  of */\n\n/*     op( A ) = A   or   op( A ) = A'. */\n\n/*  The matrix X is overwritten on B. */\n\n/*  Arguments */\n/*  ========== */\n\n/*  SIDE   - CHARACTER*1. */\n/*           On entry, SIDE specifies whether op( A ) appears on the left */\n/*           or right of X as follows: */\n\n/*              SIDE = 'L' or 'l'   op( A )*X = alpha*B. */\n\n/*              SIDE = 'R' or 'r'   X*op( A ) = alpha*B. */\n\n/*           Unchanged on exit. */\n\n/*  UPLO   - CHARACTER*1. */\n/*           On entry, UPLO specifies whether the matrix A is an upper or */\n/*           lower triangular matrix as follows: */\n\n/*              UPLO = 'U' or 'u'   A is an upper triangular matrix. */\n\n/*              UPLO = 'L' or 'l'   A is a lower triangular matrix. */\n\n/*           Unchanged on exit. */\n\n/*  TRANSA - CHARACTER*1. */\n/*           On entry, TRANSA specifies the form of op( A ) to be used in */\n/*           the matrix multiplication as follows: */\n\n/*              TRANSA = 'N' or 'n'   op( A ) = A. */\n\n/*              TRANSA = 'T' or 't'   op( A ) = A'. */\n\n/*              TRANSA = 'C' or 'c'   op( A ) = A'. */\n\n/*           Unchanged on exit. */\n\n/*  DIAG   - CHARACTER*1. */\n/*           On entry, DIAG specifies whether or not A is unit triangular */\n/*           as follows: */\n\n/*              DIAG = 'U' or 'u'   A is assumed to be unit triangular. */\n\n/*              DIAG = 'N' or 'n'   A is not assumed to be unit */\n/*                                  triangular. */\n\n/*           Unchanged on exit. */\n\n/*  M      - INTEGER. */\n/*           On entry, M specifies the number of rows of B. M must be at */\n/*           least zero. */\n/*           Unchanged on exit. */\n\n/*  N      - INTEGER. */\n/*           On entry, N specifies the number of columns of B.  N must be */\n/*           at least zero. */\n/*           Unchanged on exit. */\n\n/*  ALPHA  - DOUBLE PRECISION. */\n/*           On entry,  ALPHA specifies the scalar  alpha. When  alpha is */\n/*           zero then  A is not referenced and  B need not be set before */\n/*           entry. */\n/*           Unchanged on exit. */\n\n/*  A      - DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m */\n/*           when  SIDE = 'L' or 'l'  and is  n  when  SIDE = 'R' or 'r'. */\n/*           Before entry  with  UPLO = 'U' or 'u',  the  leading  k by k */\n/*           upper triangular part of the array  A must contain the upper */\n/*           triangular matrix  and the strictly lower triangular part of */\n/*           A is not referenced. */\n/*           Before entry  with  UPLO = 'L' or 'l',  the  leading  k by k */\n/*           lower triangular part of the array  A must contain the lower */\n/*           triangular matrix  and the strictly upper triangular part of */\n/*           A is not referenced. */\n/*           Note that when  DIAG = 'U' or 'u',  the diagonal elements of */\n/*           A  are not referenced either,  but are assumed to be  unity. */\n/*           Unchanged on exit. */\n\n/*  LDA    - INTEGER. */\n/*           On entry, LDA specifies the first dimension of A as declared */\n/*           in the calling (sub) program.  When  SIDE = 'L' or 'l'  then */\n/*           LDA  must be at least  max( 1, m ),  when  SIDE = 'R' or 'r' */\n/*           then LDA must be at least max( 1, n ). */\n/*           Unchanged on exit. */\n\n/*  B      - DOUBLE PRECISION array of DIMENSION ( LDB, n ). */\n/*           Before entry,  the leading  m by n part of the array  B must */\n/*           contain  the  right-hand  side  matrix  B,  and  on exit  is */\n/*           overwritten by the solution matrix  X. */\n\n/*  LDB    - INTEGER. */\n/*           On entry, LDB specifies the first dimension of B as declared */\n/*           in  the  calling  (sub)  program.   LDB  must  be  at  least */\n/*           max( 1, m ). */\n/*           Unchanged on exit. */\n\n\n/*  Level 3 Blas routine. */\n\n\n/*  -- Written on 8-February-1989. */\n/*     Jack Dongarra, Argonne National Laboratory. */\n/*     Iain Duff, AERE Harwell. */\n/*     Jeremy Du Croz, Numerical Algorithms Group Ltd. */\n/*     Sven Hammarling, Numerical Algorithms Group Ltd. */\n\n        template <typename T>\n        void local_trsm(\n            const enum CBLAS_ORDER Order,\n            enum CBLAS_SIDE Side,\n            enum CBLAS_UPLO Uplo, \n            const enum CBLAS_TRANSPOSE TransA,\n            const enum CBLAS_DIAG Diag, \n            long m, \n            long n, \n            T alpha, \n            const T *a, \n            long lda, \n            T *b, \n            long ldb\n        )\n        /*!\n            This is a copy of the dtrsm routine from the netlib.org BLAS which was run though\n            f2c and converted into this form for use when a BLAS library is not available.\n        !*/\n        {\n            if (Order == CblasRowMajor)\n            {\n                // since row major ordering looks like transposition to FORTRAN we need to flip a\n                // few things.\n                if (Side == CblasLeft)\n                    Side = CblasRight;\n                else\n                    Side = CblasLeft;\n\n                if (Uplo == CblasUpper)\n                    Uplo = CblasLower;\n                else\n                    Uplo = CblasUpper;\n\n                std::swap(m,n);\n            }\n\n            /* System generated locals */\n            long a_dim1, a_offset, b_dim1, b_offset, i__1, i__2, i__3;\n\n            /* Local variables */\n            long i__, j, k, info;\n            T temp;\n            bool lside;\n            long nrowa;\n            bool upper;\n            bool nounit;\n\n            /* Parameter adjustments */\n            a_dim1 = lda;\n            a_offset = 1 + a_dim1;\n            a -= a_offset;\n            b_dim1 = ldb;\n            b_offset = 1 + b_dim1;\n            b -= b_offset;\n\n            /* Function Body */\n            lside = (Side == CblasLeft);\n            if (lside) \n            {\n                nrowa = m;\n            } else \n            {\n                nrowa = n;\n            }\n            nounit = (Diag == CblasNonUnit); \n            upper = (Uplo == CblasUpper); \n\n            info = 0;\n            if (! lside && ! (Side == CblasRight)) {\n                info = 1;\n            } else if (! upper && !(Uplo == CblasLower) ) {\n                info = 2;\n            } else if (!(TransA == CblasNoTrans) && \n                       !(TransA == CblasTrans) && \n                       !(TransA == CblasConjTrans))  {\n                info = 3;\n            } else if (!(Diag == CblasUnit) && \n                       !(Diag == CblasNonUnit) ) {\n                info = 4;\n            } else if (m < 0) {\n                info = 5;\n            } else if (n < 0) {\n                info = 6;\n            } else if (lda < std::max<long>(1,nrowa)) {\n                info = 9;\n            } else if (ldb < std::max<long>(1,m)) {\n                info = 11;\n            }\n            DLIB_CASSERT( info == 0, \"Invalid inputs given to local_trsm\");\n\n            /*     Quick return if possible. */\n\n            if (m == 0 || n == 0) {\n                return;\n            }\n\n            /*     And when  alpha.eq.zero. */\n\n            if (alpha == 0.) {\n                i__1 = n;\n                for (j = 1; j <= i__1; ++j) {\n                    i__2 = m;\n                    for (i__ = 1; i__ <= i__2; ++i__) {\n                        b[i__ + j * b_dim1] = 0.;\n                        /* L10: */\n                    }\n                    /* L20: */\n                }\n                return;\n            }\n\n            /*     Start the operations. */\n\n            if (lside) {\n                if (TransA == CblasNoTrans) {\n\n                    /*           Form  B := alpha*inv( A )*B. */\n\n                    if (upper) {\n                        i__1 = n;\n                        for (j = 1; j <= i__1; ++j) {\n                            if (alpha != 1.) {\n                                i__2 = m;\n                                for (i__ = 1; i__ <= i__2; ++i__) {\n                                    b[i__ + j * b_dim1] = alpha * b[i__ + j * b_dim1]\n                                        ;\n                                    /* L30: */\n                                }\n                            }\n                            for (k = m; k >= 1; --k) {\n                                if (b[k + j * b_dim1] != 0.) {\n                                    if (nounit) {\n                                        b[k + j * b_dim1] /= a[k + k * a_dim1];\n                                    }\n                                    i__2 = k - 1;\n                                    for (i__ = 1; i__ <= i__2; ++i__) {\n                                        b[i__ + j * b_dim1] -= b[k + j * b_dim1] * a[\n                                            i__ + k * a_dim1];\n                                        /* L40: */\n                                    }\n                                }\n                                /* L50: */\n                            }\n                            /* L60: */\n                        }\n                    } else {\n                        i__1 = n;\n                        for (j = 1; j <= i__1; ++j) {\n                            if (alpha != 1.) {\n                                i__2 = m;\n                                for (i__ = 1; i__ <= i__2; ++i__) {\n                                    b[i__ + j * b_dim1] = alpha * b[i__ + j * b_dim1]\n                                        ;\n                                    /* L70: */\n                                }\n                            }\n                            i__2 = m;\n                            for (k = 1; k <= i__2; ++k) {\n                                if (b[k + j * b_dim1] != 0.) {\n                                    if (nounit) {\n                                        b[k + j * b_dim1] /= a[k + k * a_dim1];\n                                    }\n                                    i__3 = m;\n                                    for (i__ = k + 1; i__ <= i__3; ++i__) {\n                                        b[i__ + j * b_dim1] -= b[k + j * b_dim1] * a[\n                                            i__ + k * a_dim1];\n                                        /* L80: */\n                                    }\n                                }\n                                /* L90: */\n                            }\n                            /* L100: */\n                        }\n                    }\n                } else {\n\n                    /*           Form  B := alpha*inv( A' )*B. */\n\n                    if (upper) {\n                        i__1 = n;\n                        for (j = 1; j <= i__1; ++j) {\n                            i__2 = m;\n                            for (i__ = 1; i__ <= i__2; ++i__) {\n                                temp = alpha * b[i__ + j * b_dim1];\n                                i__3 = i__ - 1;\n                                for (k = 1; k <= i__3; ++k) {\n                                    temp -= a[k + i__ * a_dim1] * b[k + j * b_dim1];\n                                    /* L110: */\n                                }\n                                if (nounit) {\n                                    temp /= a[i__ + i__ * a_dim1];\n                                }\n                                b[i__ + j * b_dim1] = temp;\n                                /* L120: */\n                            }\n                            /* L130: */\n                        }\n                    } else {\n                        i__1 = n;\n                        for (j = 1; j <= i__1; ++j) {\n                            for (i__ = m; i__ >= 1; --i__) {\n                                temp = alpha * b[i__ + j * b_dim1];\n                                i__2 = m;\n                                for (k = i__ + 1; k <= i__2; ++k) {\n                                    temp -= a[k + i__ * a_dim1] * b[k + j * b_dim1];\n                                    /* L140: */\n                                }\n                                if (nounit) {\n                                    temp /= a[i__ + i__ * a_dim1];\n                                }\n                                b[i__ + j * b_dim1] = temp;\n                                /* L150: */\n                            }\n                            /* L160: */\n                        }\n                    }\n                }\n            } else {\n                if (TransA == CblasNoTrans) {\n\n                    /*           Form  B := alpha*B*inv( A ). */\n\n                    if (upper) {\n                        i__1 = n;\n                        for (j = 1; j <= i__1; ++j) {\n                            if (alpha != 1.) {\n                                i__2 = m;\n                                for (i__ = 1; i__ <= i__2; ++i__) {\n                                    b[i__ + j * b_dim1] = alpha * b[i__ + j * b_dim1]\n                                        ;\n                                    /* L170: */\n                                }\n                            }\n                            i__2 = j - 1;\n                            for (k = 1; k <= i__2; ++k) {\n                                if (a[k + j * a_dim1] != 0.) {\n                                    i__3 = m;\n                                    for (i__ = 1; i__ <= i__3; ++i__) {\n                                        b[i__ + j * b_dim1] -= a[k + j * a_dim1] * b[\n                                            i__ + k * b_dim1];\n                                        /* L180: */\n                                    }\n                                }\n                                /* L190: */\n                            }\n                            if (nounit) {\n                                temp = 1. / a[j + j * a_dim1];\n                                i__2 = m;\n                                for (i__ = 1; i__ <= i__2; ++i__) {\n                                    b[i__ + j * b_dim1] = temp * b[i__ + j * b_dim1];\n                                    /* L200: */\n                                }\n                            }\n                            /* L210: */\n                        }\n                    } else {\n                        for (j = n; j >= 1; --j) {\n                            if (alpha != 1.) {\n                                i__1 = m;\n                                for (i__ = 1; i__ <= i__1; ++i__) {\n                                    b[i__ + j * b_dim1] = alpha * b[i__ + j * b_dim1]\n                                        ;\n                                    /* L220: */\n                                }\n                            }\n                            i__1 = n;\n                            for (k = j + 1; k <= i__1; ++k) {\n                                if (a[k + j * a_dim1] != 0.) {\n                                    i__2 = m;\n                                    for (i__ = 1; i__ <= i__2; ++i__) {\n                                        b[i__ + j * b_dim1] -= a[k + j * a_dim1] * b[\n                                            i__ + k * b_dim1];\n                                        /* L230: */\n                                    }\n                                }\n                                /* L240: */\n                            }\n                            if (nounit) {\n                                temp = 1. / a[j + j * a_dim1];\n                                i__1 = m;\n                                for (i__ = 1; i__ <= i__1; ++i__) {\n                                    b[i__ + j * b_dim1] = temp * b[i__ + j * b_dim1];\n                                    /* L250: */\n                                }\n                            }\n                            /* L260: */\n                        }\n                    }\n                } else {\n\n                    /*           Form  B := alpha*B*inv( A' ). */\n\n                    if (upper) {\n                        for (k = n; k >= 1; --k) {\n                            if (nounit) {\n                                temp = 1. / a[k + k * a_dim1];\n                                i__1 = m;\n                                for (i__ = 1; i__ <= i__1; ++i__) {\n                                    b[i__ + k * b_dim1] = temp * b[i__ + k * b_dim1];\n                                    /* L270: */\n                                }\n                            }\n                            i__1 = k - 1;\n                            for (j = 1; j <= i__1; ++j) {\n                                if (a[j + k * a_dim1] != 0.) {\n                                    temp = a[j + k * a_dim1];\n                                    i__2 = m;\n                                    for (i__ = 1; i__ <= i__2; ++i__) {\n                                        b[i__ + j * b_dim1] -= temp * b[i__ + k * \n                                            b_dim1];\n                                        /* L280: */\n                                    }\n                                }\n                                /* L290: */\n                            }\n                            if (alpha != 1.) {\n                                i__1 = m;\n                                for (i__ = 1; i__ <= i__1; ++i__) {\n                                    b[i__ + k * b_dim1] = alpha * b[i__ + k * b_dim1]\n                                        ;\n                                    /* L300: */\n                                }\n                            }\n                            /* L310: */\n                        }\n                    } else {\n                        i__1 = n;\n                        for (k = 1; k <= i__1; ++k) {\n                            if (nounit) {\n                                temp = 1. / a[k + k * a_dim1];\n                                i__2 = m;\n                                for (i__ = 1; i__ <= i__2; ++i__) {\n                                    b[i__ + k * b_dim1] = temp * b[i__ + k * b_dim1];\n                                    /* L320: */\n                                }\n                            }\n                            i__2 = n;\n                            for (j = k + 1; j <= i__2; ++j) {\n                                if (a[j + k * a_dim1] != 0.) {\n                                    temp = a[j + k * a_dim1];\n                                    i__3 = m;\n                                    for (i__ = 1; i__ <= i__3; ++i__) {\n                                        b[i__ + j * b_dim1] -= temp * b[i__ + k * \n                                            b_dim1];\n                                        /* L330: */\n                                    }\n                                }\n                                /* L340: */\n                            }\n                            if (alpha != 1.) {\n                                i__2 = m;\n                                for (i__ = 1; i__ <= i__2; ++i__) {\n                                    b[i__ + k * b_dim1] = alpha * b[i__ + k * b_dim1]\n                                        ;\n                                    /* L350: */\n                                }\n                            }\n                            /* L360: */\n                        }\n                    }\n                }\n            }\n        } \n\n    // ------------------------------------------------------------------------------------\n\n        inline void cblas_trsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,\n                               const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,\n                               const enum CBLAS_DIAG Diag, const int M, const int N,\n                               const float alpha, const float *A, const int lda,\n                               float *B, const int ldb)\n        {\n#ifdef DLIB_USE_BLAS\n            if (M > 4)\n            {\n                cblas_strsm(Order, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);\n                return;\n            }\n#endif\n            local_trsm(Order, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);\n        }\n\n        inline void cblas_trsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,\n                               const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,\n                               const enum CBLAS_DIAG Diag, const int M, const int N,\n                               const double alpha, const double *A, const int lda,\n                               double *B, const int ldb)\n        {\n#ifdef DLIB_USE_BLAS\n            if (M > 4)\n            {\n                cblas_dtrsm(Order, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);\n                return;\n            }\n#endif\n            local_trsm(Order, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);\n        }\n\n        inline void cblas_trsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,\n                               const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,\n                               const enum CBLAS_DIAG Diag, const int M, const int N,\n                               const long double alpha, const long double *A, const int lda,\n                               long double *B, const int ldb)\n        {\n            local_trsm(Order, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long NR1, long NR2,\n            long NC1, long NC2,\n            typename MM\n            >\n        inline void triangular_solver (\n            const enum CBLAS_SIDE Side,\n            const enum CBLAS_UPLO Uplo, \n            const enum CBLAS_TRANSPOSE TransA,\n            const enum CBLAS_DIAG Diag,\n            const matrix<T,NR1,NC1,MM,row_major_layout>& A,\n            const T alpha,\n            matrix<T,NR2,NC2,MM,row_major_layout>& B\n        )\n        {\n            cblas_trsm(CblasRowMajor, Side,  Uplo, TransA, Diag, B.nr(), B.nc(),\n                       alpha, &A(0,0), A.nc(), &B(0,0), B.nc());\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long NR1, long NR2,\n            long NC1, long NC2,\n            typename MM\n            >\n        inline void triangular_solver (\n            const enum CBLAS_SIDE Side,\n            const enum CBLAS_UPLO Uplo, \n            const enum CBLAS_TRANSPOSE TransA,\n            const enum CBLAS_DIAG Diag,\n            const matrix<T,NR1,NC1,MM,column_major_layout>& A,\n            const T alpha,\n            matrix<T,NR2,NC2,MM,column_major_layout>& B\n        )\n        {\n            cblas_trsm(CblasColMajor, Side,  Uplo, TransA, Diag, B.nr(), B.nc(),\n                       alpha, &A(0,0), A.nr(), &B(0,0), B.nr());\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long NR1, long NR2,\n            long NC1, long NC2,\n            typename MM\n            >\n        inline void triangular_solver (\n            const enum CBLAS_SIDE Side,\n            const enum CBLAS_UPLO Uplo, \n            const enum CBLAS_TRANSPOSE TransA,\n            const enum CBLAS_DIAG Diag,\n            const matrix<T,NR1,NC1,MM,column_major_layout>& A,\n            matrix<T,NR2,NC2,MM,column_major_layout>& B,\n            long rows_of_B\n        )\n        {\n            const T alpha = 1;\n            cblas_trsm(CblasColMajor, Side,  Uplo, TransA, Diag, rows_of_B, B.nc(),\n                       alpha, &A(0,0), A.nr(), &B(0,0), B.nr());\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            long NR1, long NR2,\n            long NC1, long NC2,\n            typename MM,\n            typename layout\n            >\n        inline void triangular_solver (\n            const enum CBLAS_SIDE Side,\n            const enum CBLAS_UPLO Uplo, \n            const enum CBLAS_TRANSPOSE TransA,\n            const enum CBLAS_DIAG Diag,\n            const matrix<T,NR1,NC1,MM,layout>& A,\n            matrix<T,NR2,NC2,MM,layout>& B\n        )\n        {\n            const T alpha = 1;\n            triangular_solver(Side, Uplo, TransA, Diag, A, alpha, B);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n}\n\n#endif // DLIB_MATRiX_TRSM_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_utilities.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_UTILITIES_\n#define DLIB_MATRIx_UTILITIES_\n\n#include \"matrix_utilities_abstract.h\"\n#include \"matrix.h\"\n#include <cmath>\n#include <complex>\n#include <limits>\n#include \"../pixel.h\"\n#include \"../stl_checked.h\"\n#include <vector>\n#include <algorithm>\n#include \"../std_allocator.h\"\n#include \"matrix_expressions.h\"\n#include \"matrix_math_functions.h\"\n#include \"matrix_op.h\"\n#include \"../general_hash/random_hashing.h\"\n#include \"matrix_mat.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A is_complex\n        This is a template that can be used to determine if a type is a specialization\n        of the std::complex template class.\n\n        For example:\n            is_complex<float>::value == false              \n            is_complex<std::complex<float> >::value == true   \n    !*/\n\n    template <typename T>\n    struct is_complex { static const bool value = false; };\n\n    template <typename T>\n    struct is_complex<std::complex<T> >         { static const bool value = true; };\n    template <typename T>\n    struct is_complex<std::complex<T>& >        { static const bool value = true; };\n    template <typename T>\n    struct is_complex<const std::complex<T>& >  { static const bool value = true; };\n    template <typename T>\n    struct is_complex<const std::complex<T> >   { static const bool value = true; };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    inline bool is_row_vector (\n        const matrix_exp<EXP>& m\n    ) { return m.nr() == 1; }\n\n    template <typename EXP>\n    inline bool is_col_vector (\n        const matrix_exp<EXP>& m\n    ) { return m.nc() == 1; }\n\n    template <typename EXP>\n    inline bool is_vector (\n        const matrix_exp<EXP>& m\n    ) { return is_row_vector(m) || is_col_vector(m); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    inline bool is_finite (\n        const matrix_exp<EXP>& m\n    ) \n    { \n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                if (!is_finite(m(r,c)))\n                    return false;\n            }\n        }\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T>\n        const T& magnitude (const T& item) { return item; }\n        template <typename T>\n        T magnitude (const std::complex<T>& item) { return std::norm(item); }\n    }\n\n    template <\n        typename EXP\n        >\n    void find_min_and_max (\n        const matrix_exp<EXP>& m,\n        typename EXP::type& min_val,\n        typename EXP::type& max_val\n    )\n    {\n        DLIB_ASSERT(m.size() > 0, \n            \"\\ttype find_min_and_max(const matrix_exp& m, min_val, max_val)\"\n            << \"\\n\\tYou can't ask for the min and max of an empty matrix\"\n            << \"\\n\\tm.size():     \" << m.size() \n            );\n        typedef typename matrix_exp<EXP>::type type;\n\n        min_val = m(0,0);\n        max_val = min_val;\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                type temp = m(r,c);\n                if (dlib::impl::magnitude(temp) > dlib::impl::magnitude(max_val))\n                    max_val = temp;\n                if (dlib::impl::magnitude(temp) < dlib::impl::magnitude(min_val))\n                    min_val = temp;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    long index_of_max (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(m.size() > 0 && is_vector(m) == true, \n            \"\\tlong index_of_max(const matrix_exp& m)\"\n            << \"\\n\\tm must be a row or column matrix\"\n            << \"\\n\\tm.size():   \" << m.size() \n            << \"\\n\\tm.nr():     \" << m.nr() \n            << \"\\n\\tm.nc():     \" << m.nc() \n            );\n        typedef typename matrix_exp<EXP>::type type;\n\n        type val = m(0);\n        long best_idx = 0;\n        for (long i = 1; i < m.size(); ++i)\n        {\n            type temp = m(i);\n            if (dlib::impl::magnitude(temp) > dlib::impl::magnitude(val))\n            {\n                val = temp;\n                best_idx = i;\n            }\n        }\n        return best_idx;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    long index_of_min (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(m.size() > 0 && is_vector(m), \n            \"\\tlong index_of_min(const matrix_exp& m)\"\n            << \"\\n\\tm must be a row or column matrix\"\n            << \"\\n\\tm.size():   \" << m.size() \n            << \"\\n\\tm.nr():     \" << m.nr() \n            << \"\\n\\tm.nc():     \" << m.nc() \n            );\n        typedef typename matrix_exp<EXP>::type type;\n\n        type val = m(0);\n        long best_idx = 0;\n        for (long i = 1; i < m.size(); ++i)\n        {\n            type temp = m(i);\n            if (dlib::impl::magnitude(temp) < dlib::impl::magnitude(val))\n            {\n                val = temp;\n                best_idx = i;\n            }\n        }\n        return best_idx;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const typename matrix_exp<EXP>::type max (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(m.size() > 0, \n            \"\\ttype max(const matrix_exp& m)\"\n            << \"\\n\\tYou can't ask for the max() of an empty matrix\"\n            << \"\\n\\tm.size():     \" << m.size() \n            );\n        typedef typename matrix_exp<EXP>::type type;\n\n        type val = m(0,0);\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                type temp = m(r,c);\n                if (dlib::impl::magnitude(temp) > dlib::impl::magnitude(val))\n                    val = temp;\n            }\n        }\n        return val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const typename matrix_exp<EXP>::type min (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(m.size() > 0, \n            \"\\ttype min(const matrix_exp& m)\"\n            << \"\\n\\tYou can't ask for the min() of an empty matrix\"\n            << \"\\n\\tm.size():     \" << m.size() \n            );\n        typedef typename matrix_exp<EXP>::type type;\n\n        type val = m(0,0);\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                type temp = m(r,c);\n                if (dlib::impl::magnitude(temp) < dlib::impl::magnitude(val))\n                    val = temp;\n            }\n        }\n        return val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    typename enable_if_c<std::numeric_limits<typename EXP::type>::is_integer, double>::type length (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(is_vector(m) == true, \n            \"\\ttype length(const matrix_exp& m)\"\n            << \"\\n\\tm must be a row or column vector\"\n            << \"\\n\\tm.nr():     \" << m.nr() \n            << \"\\n\\tm.nc():     \" << m.nc() \n            );\n        \n        return std::sqrt(static_cast<double>(sum(squared(m))));\n    }\n    \n    template <\n        typename EXP\n        >\n    typename disable_if_c<std::numeric_limits<typename EXP::type>::is_integer, const typename EXP::type>::type length (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(is_vector(m) == true, \n            \"\\ttype length(const matrix_exp& m)\"\n            << \"\\n\\tm must be a row or column vector\"\n            << \"\\n\\tm.nr():     \" << m.nr() \n            << \"\\n\\tm.nc():     \" << m.nc() \n            );\n        return std::sqrt(sum(squared(m)));\n    }\n \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const typename matrix_exp<EXP>::type length_squared (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(is_vector(m) == true, \n            \"\\ttype length_squared(const matrix_exp& m)\"\n            << \"\\n\\tm must be a row or column vector\"\n            << \"\\n\\tm.nr():     \" << m.nr() \n            << \"\\n\\tm.nc():     \" << m.nc() \n            );\n        return sum(squared(m));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    template <typename M>\n    struct op_trans \n    {\n        op_trans( const M& m_) : m(m_){}\n\n        const M& m;\n\n        const static long cost = M::cost;\n        const static long NR = M::NC;\n        const static long NC = M::NR;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n\n        const_ret_type apply (long r, long c) const { return m(c,r); }\n\n        long nr () const { return m.nc(); }\n        long nc () const { return m.nr(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n\n    }; \n\n    template <\n        typename M\n        >\n    const matrix_op<op_trans<M> > trans (\n        const matrix_exp<M>& m\n    )\n    {\n        typedef op_trans<M> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// don't to anything at all for diagonal matrices\n    template <\n        typename M\n        >\n    const matrix_diag_exp<M>& trans (\n        const matrix_diag_exp<M>& m\n    )\n    {\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// I introduced this struct because it avoids an inane compiler warning from gcc\n    template <typename EXP>\n    struct is_not_ct_vector{ static const bool value = (EXP::NR != 1 && EXP::NC != 1); };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    typename enable_if_c<(is_not_ct_vector<EXP1>::value) || (is_not_ct_vector<EXP2>::value),\n                         typename EXP1::type>::type \n    dot (\n        const matrix_exp<EXP1>& m1,\n        const matrix_exp<EXP2>& m2\n    )\n    {\n        // You are getting an error on this line because you are trying to \n        // compute the dot product between two matrices that aren't both vectors (i.e. \n        // they aren't column or row matrices).\n        COMPILE_TIME_ASSERT(EXP1::NR*EXP1::NC == 0 ||\n                            EXP2::NR*EXP2::NC == 0);\n\n        DLIB_ASSERT(is_vector(m1) && is_vector(m2) && m1.size() == m2.size() &&\n                    m1.size() > 0, \n            \"\\t type dot(const matrix_exp& m1, const matrix_exp& m2)\"\n            << \"\\n\\t You can only compute the dot product between non-empty vectors of equal length.\"\n            << \"\\n\\t is_vector(m1): \" << is_vector(m1) \n            << \"\\n\\t is_vector(m2): \" << is_vector(m2) \n            << \"\\n\\t m1.size():     \" << m1.size() \n            << \"\\n\\t m2.size():     \" << m2.size() \n            );\n\n        if (is_col_vector(m1) && is_col_vector(m2)) return (trans(m1)*m2)(0);\n        if (is_col_vector(m1) && is_row_vector(m2)) return (m2*m1)(0);\n        if (is_row_vector(m1) && is_col_vector(m2)) return (m1*m2)(0);\n\n        //if (is_row_vector(m1) && is_row_vector(m2)) \n        return (m1*trans(m2))(0);\n    }\n\n    template < typename EXP1, typename EXP2 >\n    typename enable_if_c<EXP1::NR == 1 && EXP2::NR == 1 && EXP1::NC != 1 && EXP2::NC != 1, typename EXP1::type>::type \n    dot ( const matrix_exp<EXP1>& m1, const matrix_exp<EXP2>& m2) \n    { \n        DLIB_ASSERT(m1.size() == m2.size(), \n            \"\\t type dot(const matrix_exp& m1, const matrix_exp& m2)\"\n            << \"\\n\\t You can only compute the dot product between vectors of equal length\"\n            << \"\\n\\t m1.size():     \" << m1.size() \n            << \"\\n\\t m2.size():     \" << m2.size() \n            );\n        \n        return m1*trans(m2); \n    }\n\n    template < typename EXP1, typename EXP2 >\n    typename enable_if_c<EXP1::NR == 1 && EXP2::NC == 1 && EXP1::NC != 1 && EXP2::NR != 1, typename EXP1::type>::type \n    dot ( const matrix_exp<EXP1>& m1, const matrix_exp<EXP2>& m2) \n    { \n        DLIB_ASSERT(m1.size() == m2.size(), \n            \"\\t type dot(const matrix_exp& m1, const matrix_exp& m2)\"\n            << \"\\n\\t You can only compute the dot product between vectors of equal length\"\n            << \"\\n\\t m1.size():     \" << m1.size() \n            << \"\\n\\t m2.size():     \" << m2.size() \n            );\n        \n        return m1*m2; \n    }\n\n    template < typename EXP1, typename EXP2 >\n    typename enable_if_c<EXP1::NC == 1 && EXP2::NR == 1 && EXP1::NR != 1 && EXP2::NC != 1, typename EXP1::type>::type \n    dot ( const matrix_exp<EXP1>& m1, const matrix_exp<EXP2>& m2) \n    { \n        DLIB_ASSERT(m1.size() == m2.size(), \n            \"\\t type dot(const matrix_exp& m1, const matrix_exp& m2)\"\n            << \"\\n\\t You can only compute the dot product between vectors of equal length\"\n            << \"\\n\\t m1.size():     \" << m1.size() \n            << \"\\n\\t m2.size():     \" << m2.size() \n            );\n        \n        return m2*m1; \n    }\n\n    template < typename EXP1, typename EXP2 >\n    typename enable_if_c<EXP1::NC == 1 && EXP2::NC == 1 && EXP1::NR != 1 && EXP2::NR != 1, typename EXP1::type>::type \n    dot ( const matrix_exp<EXP1>& m1, const matrix_exp<EXP2>& m2) \n    { \n        DLIB_ASSERT(m1.size() == m2.size(), \n            \"\\t type dot(const matrix_exp& m1, const matrix_exp& m2)\"\n            << \"\\n\\t You can only compute the dot product between vectors of equal length\"\n            << \"\\n\\t m1.size():     \" << m1.size() \n            << \"\\n\\t m2.size():     \" << m2.size() \n            );\n        \n        return trans(m1)*m2; \n    }\n\n    template < typename EXP1, typename EXP2 >\n    typename enable_if_c<(EXP1::NC*EXP1::NR == 1) || (EXP2::NC*EXP2::NR == 1), typename EXP1::type>::type \n    dot ( const matrix_exp<EXP1>& m1, const matrix_exp<EXP2>& m2) \n    { \n        DLIB_ASSERT(m1.size() == m2.size(), \n            \"\\t type dot(const matrix_exp& m1, const matrix_exp& m2)\"\n            << \"\\n\\t You can only compute the dot product between vectors of equal length\"\n            << \"\\n\\t m1.size():     \" << m1.size() \n            << \"\\n\\t m2.size():     \" << m2.size() \n            );\n        \n        return m1(0)*m2(0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, long R, long C>\n    struct op_removerc \n    {\n        op_removerc( const M& m_) : m(m_){}\n\n        const M& m;\n\n        const static long cost = M::cost+2;\n        const static long NR = (M::NR==0) ? 0 : (M::NR - 1);\n        const static long NC = (M::NC==0) ? 0 : (M::NC - 1);\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply (long r, long c) const\n        { \n            if (r < R)\n            {\n                if (c < C)\n                    return m(r,c); \n                else\n                    return m(r,c+1); \n            }\n            else\n            {\n                if (c < C)\n                    return m(r+1,c); \n                else\n                    return m(r+1,c+1); \n            }\n        }\n\n        long nr () const { return m.nr() - 1; }\n        long nc () const { return m.nc() - 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <typename M>\n    struct op_removerc2 \n    {\n        op_removerc2( const M& m_, const long R_, const long C_) : m(m_), R(R_), C(C_){}\n        const M& m;\n        const long R;\n        const long C;\n\n        const static long cost = M::cost+2;\n        const static long NR = (M::NR==0) ? 0 : (M::NR - 1);\n        const static long NC = (M::NC==0) ? 0 : (M::NC - 1);\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply (long r, long c) const\n        { \n            if (r < R)\n            {\n                if (c < C)\n                    return m(r,c); \n                else\n                    return m(r,c+1); \n            }\n            else\n            {\n                if (c < C)\n                    return m(r+1,c); \n                else\n                    return m(r+1,c+1); \n            }\n        }\n\n        long nr () const { return m.nr() - 1; }\n        long nc () const { return m.nc() - 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        long R,\n        long C,\n        typename EXP\n        >\n    const matrix_op<op_removerc<EXP,R,C> > removerc (\n        const matrix_exp<EXP>& m\n    )\n    {\n        // you can't remove a row from a matrix with only one row\n        COMPILE_TIME_ASSERT((EXP::NR > R && R >= 0) || EXP::NR == 0);\n        // you can't remove a column from a matrix with only one column \n        COMPILE_TIME_ASSERT((EXP::NC > C && C >= 0) || EXP::NR == 0);\n        DLIB_ASSERT(m.nr() > R && R >= 0 && m.nc() > C && C >= 0, \n            \"\\tconst matrix_exp removerc<R,C>(const matrix_exp& m)\"\n            << \"\\n\\tYou can't remove a row/column from a matrix if it doesn't have that row/column\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tR:      \" << R \n            << \"\\n\\tC:      \" << C \n            );\n        typedef op_removerc<EXP,R,C> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_removerc2<EXP> >  removerc (\n        const matrix_exp<EXP>& m,\n        long R,\n        long C\n    )\n    {\n        DLIB_ASSERT(m.nr() > R && R >= 0 && m.nc() > C && C >= 0, \n            \"\\tconst matrix_exp removerc(const matrix_exp& m,R,C)\"\n            << \"\\n\\tYou can't remove a row/column from a matrix if it doesn't have that row/column\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tR:      \" << R \n            << \"\\n\\tC:      \" << C \n            );\n        typedef op_removerc2<EXP> op;\n        return matrix_op<op>(op(m.ref(),R,C));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, long C>\n    struct op_remove_col \n    {\n        op_remove_col( const M& m_) : m(m_){}\n        const M& m;\n\n        const static long cost = M::cost+2;\n        const static long NR = M::NR;\n        const static long NC = (M::NC==0) ? 0 : (M::NC - 1);\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (c < C)\n            {\n                return m(r,c); \n            }\n            else\n            {\n                return m(r,c+1); \n            }\n        }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return m.nc() - 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <typename M>\n    struct op_remove_col2 \n    {\n        op_remove_col2( const M& m_,  const long C_) : m(m_), C(C_){}\n        const M& m;\n        const long C;\n\n        const static long cost = M::cost+2;\n        const static long NR = M::NR;\n        const static long NC = (M::NC==0) ? 0 : (M::NC - 1);\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (c < C)\n            {\n                return m(r,c); \n            }\n            else\n            {\n                return m(r,c+1); \n            }\n        }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return m.nc() - 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        long C,\n        typename EXP\n        >\n    const matrix_op<op_remove_col<EXP, C> > remove_col (\n        const matrix_exp<EXP>& m\n    )\n    {\n        // You can't remove the given column from the matrix because the matrix doesn't\n        // have a column with that index.\n        COMPILE_TIME_ASSERT((EXP::NC > C && C >= 0) || EXP::NC == 0);\n        DLIB_ASSERT(m.nc() > C && C >= 0 , \n            \"\\tconst matrix_exp remove_col<C>(const matrix_exp& m)\"\n            << \"\\n\\tYou can't remove a col from a matrix if it doesn't have it\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tC:      \" << C \n            );\n        typedef op_remove_col<EXP,C> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_remove_col2<EXP> > remove_col (\n        const matrix_exp<EXP>& m,\n        long C\n    )\n    {\n        DLIB_ASSERT(m.nc() > C && C >= 0 , \n            \"\\tconst matrix_exp remove_col(const matrix_exp& m,C)\"\n            << \"\\n\\tYou can't remove a col from a matrix if it doesn't have it\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tC:      \" << C \n            );\n        typedef op_remove_col2<EXP> op;\n        return matrix_op<op>(op(m.ref(),C));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, long R>\n    struct op_remove_row \n    {\n        op_remove_row( const M& m_) : m(m_){}\n        const M& m;\n\n        const static long cost = M::cost+2;\n        const static long NR = (M::NR==0) ? 0 : (M::NR - 1);\n        const static long NC = M::NC;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r < R)\n            {\n                return m(r,c); \n            }\n            else\n            {\n                return m(r+1,c); \n            }\n        }\n\n        long nr () const { return m.nr() - 1; }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <typename M>\n    struct op_remove_row2 \n    {\n        op_remove_row2( const M& m_,  const long R_) : m(m_), R(R_){}\n        const M& m;\n        const long R;\n\n        const static long cost = M::cost+2;\n        const static long NR = (M::NR==0) ? 0 : (M::NR - 1);\n        const static long NC = M::NC;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r < R)\n            {\n                return m(r,c); \n            }\n            else\n            {\n                return m(r+1,c); \n            }\n        }\n\n        long nr () const { return m.nr() - 1; }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        long R,\n        typename EXP\n        >\n    const matrix_op<op_remove_row<EXP,R> > remove_row (\n        const matrix_exp<EXP>& m\n    )\n    {\n        // You can't remove the given row from the matrix because the matrix doesn't\n        // have a row with that index.\n        COMPILE_TIME_ASSERT((EXP::NR > R && R >= 0) || EXP::NR == 0);\n        DLIB_ASSERT(m.nr() > R && R >= 0, \n            \"\\tconst matrix_exp remove_row<R>(const matrix_exp& m)\"\n            << \"\\n\\tYou can't remove a row from a matrix if it doesn't have it\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tR:      \" << R \n            );\n        typedef op_remove_row<EXP,R> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_remove_row2<EXP> > remove_row (\n        const matrix_exp<EXP>& m,\n        long R\n    )\n    {\n        DLIB_ASSERT(m.nr() > R && R >= 0, \n            \"\\tconst matrix_exp remove_row(const matrix_exp& m, long R)\"\n            << \"\\n\\tYou can't remove a row from a matrix if it doesn't have it\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tR:      \" << R \n            );\n        typedef op_remove_row2<EXP> op;\n        return matrix_op<op>(op(m.ref(),R));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_diagm \n    {\n        op_diagm( const M& m_) : m(m_){}\n        const M& m;\n\n        const static long cost = M::cost+2;\n        const static long N = M::NC*M::NR;\n        const static long NR = N;\n        const static long NC = N;\n        typedef typename M::type type;\n        typedef const typename M::type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r==c)\n                return m(r); \n            else\n                return 0;\n        }\n\n        long nr () const { return (m.nr()>m.nc())? m.nr():m.nc(); }\n        long nc () const { return (m.nr()>m.nc())? m.nr():m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_diag_op<op_diagm<EXP> > diagm (\n        const matrix_exp<EXP>& m\n    )\n    {\n        // You can only make a diagonal matrix out of a row or column vector\n        COMPILE_TIME_ASSERT(EXP::NR == 0 || EXP::NR == 1 || EXP::NC == 1 || EXP::NC == 0);\n        DLIB_ASSERT(is_vector(m), \n            \"\\tconst matrix_exp diagm(const matrix_exp& m)\"\n            << \"\\n\\tYou can only apply diagm() to a row or column matrix\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            );\n        typedef op_diagm<EXP> op;\n        return matrix_diag_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_diagm_mult : basic_op_mm<M1,M2>\n    {\n        op_diagm_mult( const M1& m1_, const M2& m2_) : basic_op_mm<M1,M2>(m1_,m2_){}\n\n        typedef typename M1::type type;\n        typedef const type const_ret_type;\n        const static long cost = M1::cost + M2::cost + 1;\n\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r == c)\n                return this->m1(r,c)*this->m2(r,c); \n            else\n                return 0;\n        }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    inline const matrix_diag_op<op_diagm_mult<EXP1,EXP2> > operator* (\n        const matrix_diag_exp<EXP1>& a,\n        const matrix_diag_exp<EXP2>& b \n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type, typename EXP2::type>::value));\n        COMPILE_TIME_ASSERT(EXP1::NR == EXP2::NR || EXP1::NR == 0 || EXP2::NR == 0);\n        COMPILE_TIME_ASSERT(EXP1::NC == EXP2::NC || EXP1::NC == 0 || EXP2::NC == 0);\n        DLIB_ASSERT(a.nr() == b.nr() &&\n                    a.nc() == b.nc(), \n            \"\\tconst matrix_exp operator(const matrix_diag_exp& a, const matrix_diag_exp& b)\"\n            << \"\\n\\tYou can only multiply diagonal matrices together if they are the same size\"\n            << \"\\n\\ta.nr(): \" << a.nr()\n            << \"\\n\\ta.nc(): \" << a.nc() \n            << \"\\n\\tb.nr(): \" << b.nr()\n            << \"\\n\\tb.nc(): \" << b.nc() \n            );\n        typedef op_diagm_mult<EXP1,EXP2> op;\n        return matrix_diag_op<op>(op(a.ref(),b.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_diag \n    {\n        op_diag( const M& m_) : m(m_){}\n        const M& m;\n\n        const static long cost = M::cost;\n        const static long NR = tmin<M::NR,M::NC>::value;\n        const static long NC = 1;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long ) const { return m(r,r); }\n\n        long nr () const { return std::min(m.nc(),m.nr()); }\n        long nc () const { return 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_diag<EXP> > diag (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_diag<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n    template <typename EXP>\n    struct diag_exp\n    {\n        typedef matrix_op<op_diag<EXP> > type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, typename target_type>\n    struct op_cast \n    {\n        op_cast( const M& m_) : m(m_){}\n        const M& m;\n\n        const static long cost = M::cost+2;\n        const static long NR = M::NR;\n        const static long NC = M::NC;\n        typedef target_type type;\n        typedef const target_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long c) const { return static_cast<target_type>(m(r,c)); }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.destructively_aliases(item); }\n    };\n\n    template <\n        typename target_type,\n        typename EXP\n        >\n    const matrix_op<op_cast<EXP, target_type> > matrix_cast (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_cast<EXP, target_type> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename type, typename S>\n        inline type lessthan(const type& val, const S& s)\n        {\n            if (val < s)\n                return 1;\n            else\n                return 0;\n        }\n        \n    }\n    DLIB_DEFINE_OP_MS(op_lessthan, impl::lessthan, 1);\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_lessthan<EXP,S> > >::type operator< (\n        const matrix_exp<EXP>& m,\n        const S& s\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_lessthan<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_lessthan<EXP,S> > >::type operator> (\n        const S& s,\n        const matrix_exp<EXP>& m\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_lessthan<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename type, typename S>\n        inline type lessthan_eq(const type& val, const S& s)\n        {\n            if (val <= s)\n                return 1;\n            else\n                return 0;\n        }\n        \n    }\n    DLIB_DEFINE_OP_MS(op_lessthan_eq, impl::lessthan_eq, 1);\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_lessthan_eq<EXP,S> > >::type operator<= (\n        const matrix_exp<EXP>& m,\n        const S& s\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_lessthan_eq<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_lessthan_eq<EXP,S> > >::type operator>= (\n        const S& s,\n        const matrix_exp<EXP>& m\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_lessthan_eq<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename type, typename S>\n        inline type greaterthan(const type& val, const S& s)\n        {\n            if (val > s)\n                return 1;\n            else\n                return 0;\n        }\n        \n    }\n    DLIB_DEFINE_OP_MS(op_greaterthan, impl::greaterthan, 1);\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_greaterthan<EXP,S> > >::type operator> (\n        const matrix_exp<EXP>& m,\n        const S& s\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_greaterthan<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_greaterthan<EXP,S> > >::type operator< (\n        const S& s,\n        const matrix_exp<EXP>& m\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_greaterthan<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename type, typename S>\n        inline type greaterthan_eq(const type& val, const S& s)\n        {\n            if (val >= s)\n                return 1;\n            else\n                return 0;\n        }\n        \n    }\n    DLIB_DEFINE_OP_MS(op_greaterthan_eq, impl::greaterthan_eq, 1);\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_greaterthan_eq<EXP,S> > >::type operator>= (\n        const matrix_exp<EXP>& m,\n        const S& s\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_greaterthan_eq<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_greaterthan_eq<EXP,S> > >::type operator<= (\n        const S& s,\n        const matrix_exp<EXP>& m\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_greaterthan_eq<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename type, typename S>\n        inline type equal_to(const type& val, const S& s)\n        {\n            if (val == s)\n                return 1;\n            else\n                return 0;\n        }\n        \n    }\n    DLIB_DEFINE_OP_MS(op_equal_to, impl::equal_to, 1);\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_equal_to<EXP,S> > >::type operator== (\n        const matrix_exp<EXP>& m,\n        const S& s\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT( is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_equal_to<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_equal_to<EXP,S> > >::type operator== (\n        const S& s,\n        const matrix_exp<EXP>& m\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT( is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_equal_to<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename type, typename S>\n        inline type not_equal_to(const type& val, const S& s)\n        {\n            if (val != s)\n                return 1;\n            else\n                return 0;\n        }\n        \n    }\n    DLIB_DEFINE_OP_MS(op_not_equal_to, impl::not_equal_to, 1);\n\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_not_equal_to<EXP,S> > >::type operator!= (\n        const matrix_exp<EXP>& m,\n        const S& s\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_not_equal_to<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n    template <\n        typename EXP,\n        typename S\n        >\n    const typename enable_if<is_built_in_scalar_type<S>, matrix_op<op_not_equal_to<EXP,S> > >::type operator!= (\n        const S& s,\n        const matrix_exp<EXP>& m\n    )\n    {\n        // you can only use this relational operator with the built in scalar types like\n        // long, float, etc.\n        COMPILE_TIME_ASSERT(is_built_in_scalar_type<typename EXP::type>::value);\n\n        typedef op_not_equal_to<EXP,S> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM,\n        typename U,\n        typename L\n        >\n    typename disable_if<is_matrix<U>,void>::type set_all_elements (\n        matrix<T,NR,NC,MM,L>& m,\n        const U& value\n    )\n    {\n        // The value you are trying to assign to each element of the m matrix\n        // doesn't have the appropriate type.\n        COMPILE_TIME_ASSERT(is_matrix<T>::value == is_matrix<U>::value);\n\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                m(r,c) = static_cast<T>(value);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM,\n        typename U,\n        typename L\n        >\n    typename enable_if<is_matrix<U>,void>::type set_all_elements (\n        matrix<T,NR,NC,MM,L>& m,\n        const U& value\n    )\n    {\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                m(r,c) = value;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    inline const typename matrix_exp<EXP>::matrix_type tmp (\n        const matrix_exp<EXP>& m\n    )\n    {\n        return typename matrix_exp<EXP>::matrix_type (m);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const typename lazy_disable_if<is_matrix<typename EXP::type>, EXP>::type sum (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef typename matrix_exp<EXP>::type type;\n\n        type val = 0;\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                val += m(r,c);\n            }\n        }\n        return val;\n    }\n\n    template <\n        typename EXP\n        >\n    const typename lazy_enable_if<is_matrix<typename EXP::type>, EXP>::type sum (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef typename matrix_exp<EXP>::type type;\n\n        type val;\n        if (m.size() > 0)\n            val.set_size(m(0,0).nr(),m(0,0).nc()); \n        set_all_elements(val,0);\n\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                val += m(r,c);\n            }\n        }\n        return val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_sumr \n    {\n        op_sumr(const M& m_) : m(m_) {}\n        const M& m;\n\n        const static long cost = M::cost+10;\n        const static long NR = 1;\n        const static long NC = M::NC;\n        typedef typename M::type type;\n        typedef const typename M::type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long , long c) const\n        { \n            type temp = m(0,c);\n            for (long r = 1; r < m.nr(); ++r)\n                temp += m(r,c);\n            return temp; \n        }\n\n        long nr () const { return 1; }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    }; \n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_sumr<EXP> > sum_rows (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(m.size() > 0 , \n                    \"\\tconst matrix_exp sum_rows(m)\"\n                    << \"\\n\\t The matrix can't be empty\"\n                    << \"\\n\\t m.size(): \" << m.size() \n        );\n        typedef op_sumr<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_sumc \n    {\n        op_sumc(const M& m_) : m(m_) {}\n        const M& m;\n\n        const static long cost = M::cost + 10;\n        const static long NR = M::NR;\n        const static long NC = 1;\n        typedef typename M::type type;\n        typedef const typename M::type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long ) const\n        { \n            type temp = m(r,0);\n            for (long c = 1; c < m.nc(); ++c)\n                temp += m(r,c);\n            return temp; \n        }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    }; \n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_sumc<EXP> > sum_cols (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(m.size() > 0 , \n                    \"\\tconst matrix_exp sum_cols(m)\"\n                    << \"\\n\\t The matrix can't be empty\"\n                    << \"\\n\\t m.size(): \" << m.size() \n        );\n        typedef op_sumc<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    inline const typename disable_if<is_complex<typename EXP::type>, typename matrix_exp<EXP>::type>::type mean (\n        const matrix_exp<EXP>& m\n    )\n    {\n        return sum(m)/(m.nr()*m.nc());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    inline const typename enable_if<is_complex<typename EXP::type>, typename matrix_exp<EXP>::type>::type mean (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef typename EXP::type::value_type type;\n        return sum(m)/(type)(m.nr()*m.nc());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const typename matrix_exp<EXP>::type variance (\n        const matrix_exp<EXP>& m\n    )\n    {\n        using std::pow;\n        using dlib::pow;\n        const typename matrix_exp<EXP>::type avg = mean(m);\n\n        typedef typename matrix_exp<EXP>::type type;\n\n        type val;\n        val = 0;\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                val += pow(m(r,c) - avg,2);\n            }\n        }\n\n        if (m.nr() * m.nc() <= 1)\n        {\n            return val;\n        }\n        else\n        {\n            // Note, for some reason, in gcc 4.1 performing this division using a\n            // double instead of a long value avoids a segmentation fault.  That is, \n            // using 1.0 instead of 1 does the trick.\n            return val/(m.nr()*m.nc() - 1.0);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const typename matrix_exp<EXP>::type stddev (\n        const matrix_exp<EXP>& m\n    )\n    {\n        using std::sqrt;\n        using dlib::sqrt;\n        return sqrt(variance(m));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// this is a workaround for a bug in visual studio 7.1\n    template <typename EXP>\n    struct visual_studio_sucks_cov_helper\n    {\n        typedef typename EXP::type inner_type;\n        typedef matrix<typename inner_type::type, inner_type::NR, inner_type::NR, typename EXP::mem_manager_type> type;\n    };\n\n    template <\n        typename EXP\n        >\n    const typename visual_studio_sucks_cov_helper<EXP>::type covariance (\n        const matrix_exp<EXP>& m\n    )\n    {\n        // perform static checks to make sure m is a column vector \n        COMPILE_TIME_ASSERT(EXP::NR == 0 || EXP::NR > 1);\n        COMPILE_TIME_ASSERT(EXP::NC == 1 || EXP::NC == 0);\n\n        // perform static checks to make sure the matrices contained in m are column vectors\n        COMPILE_TIME_ASSERT(EXP::type::NC == 1 || EXP::type::NC == 0 );\n\n        DLIB_ASSERT(m.size() > 1 && is_col_vector(m), \n            \"\\tconst matrix covariance(const matrix_exp& m)\"\n            << \"\\n\\tYou can only apply covariance() to a column matrix\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            );\n#ifdef ENABLE_ASSERTS\n        for (long i = 0; i < m.nr(); ++i)\n        {\n            DLIB_ASSERT(m(0).size() == m(i).size() && m(i).size() > 0 && is_col_vector(m(i)), \n                   \"\\tconst matrix covariance(const matrix_exp& m)\"\n                   << \"\\n\\tYou can only apply covariance() to a column matrix of column matrices\"\n                   << \"\\n\\tm(0).size(): \" << m(0).size()\n                   << \"\\n\\tm(i).size(): \" << m(i).size() \n                   << \"\\n\\tis_col_vector(m(i)): \" << (is_col_vector(m(i)) ? \"true\" : \"false\")\n                   << \"\\n\\ti:         \" << i \n                );\n        }\n#endif\n\n        // now perform the actual calculation of the covariance matrix.\n        typename visual_studio_sucks_cov_helper<EXP>::type cov(m(0).nr(),m(0).nr());\n        set_all_elements(cov,0);\n\n        const typename EXP::type avg = mean(m);\n\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            cov += (m(r) - avg)*trans(m(r) - avg);\n        }\n\n        cov *= 1.0 / (m.nr() - 1.0);\n        return cov;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const typename matrix_exp<EXP>::type prod (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef typename matrix_exp<EXP>::type type;\n\n        type val = 1;\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                val *= m(r,c);\n            }\n        }\n        return val;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T \n        >\n    struct op_uniform_matrix_3 : does_not_alias \n    {\n        op_uniform_matrix_3(const long& rows_, const long& cols_, const T& val_ ) : \n            rows(rows_), cols(cols_), val(val_)  {}\n\n        const long rows;\n        const long cols;\n        const T val;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n        typedef T type;\n        typedef const T& const_ret_type;\n        const_ret_type apply (long, long ) const { return val; }\n\n        long nr() const { return rows; }\n        long nc() const { return cols; }\n    };\n\n    template <\n        typename T\n        >\n    const matrix_op<op_uniform_matrix_3<T> > uniform_matrix (\n        long nr,\n        long nc,\n        const T& val\n    )\n    {\n        DLIB_ASSERT(nr >= 0 && nc >= 0, \n            \"\\tconst matrix_exp uniform_matrix<T>(nr, nc, val)\"\n            << \"\\n\\tnr and nc have to be bigger than 0\"\n            << \"\\n\\tnr: \" << nr\n            << \"\\n\\tnc: \" << nc\n            );\n        typedef op_uniform_matrix_3<T> op;\n        return matrix_op<op>(op(nr, nc, val));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_uniform_matrix_3<T> > zeros_matrix (\n        long nr,\n        long nc\n    )\n    {\n        DLIB_ASSERT(nr >= 0 && nc >= 0, \n            \"\\tconst matrix_exp zeros_matrix<T>(nr, nc)\"\n            << \"\\n\\tnr and nc have to be >= 0\"\n            << \"\\n\\tnr: \" << nr\n            << \"\\n\\tnc: \" << nc\n            );\n        typedef op_uniform_matrix_3<T> op;\n        return matrix_op<op>(op(nr, nc, 0));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_uniform_matrix_3<typename EXP::type> > zeros_matrix (\n        const matrix_exp<EXP>& mat\n    )\n    {\n        DLIB_ASSERT(mat.nr() >= 0 && mat.nc() >= 0, \n            \"\\tconst matrix_exp zeros_matrix(mat)\"\n            << \"\\n\\t nr and nc have to be >= 0\"\n            << \"\\n\\t mat.nr(): \" << mat.nr()\n            << \"\\n\\t mat.nc(): \" << mat.nc()\n            );\n        typedef typename EXP::type T;\n        typedef op_uniform_matrix_3<T> op;\n        return matrix_op<op>(op(mat.nr(), mat.nc(), 0));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_uniform_matrix_3<T> > ones_matrix (\n        long nr,\n        long nc\n    )\n    {\n        DLIB_ASSERT(nr >= 0 && nc >= 0, \n            \"\\tconst matrix_exp ones_matrix<T>(nr, nc)\"\n            << \"\\n\\tnr and nc have to be >= 0\"\n            << \"\\n\\tnr: \" << nr\n            << \"\\n\\tnc: \" << nc\n            );\n        typedef op_uniform_matrix_3<T> op;\n        return matrix_op<op>(op(nr, nc, 1));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_uniform_matrix_3<typename EXP::type> > ones_matrix (\n        const matrix_exp<EXP>& mat\n    )\n    {\n        DLIB_ASSERT(mat.nr() >= 0 && mat.nc() >= 0, \n            \"\\tconst matrix_exp ones_matrix(mat)\"\n            << \"\\n\\t nr and nc have to be >= 0\"\n            << \"\\n\\t mat.nr(): \" << mat.nr()\n            << \"\\n\\t mat.nc(): \" << mat.nc()\n            );\n        typedef typename EXP::type T;\n        typedef op_uniform_matrix_3<T> op;\n        return matrix_op<op>(op(mat.nr(), mat.nc(), 1));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        long NR_, \n        long NC_ \n        >\n    struct op_uniform_matrix_2 : does_not_alias \n    {\n        op_uniform_matrix_2( const T& val_ ) : val(val_) {}\n        const T val;\n\n        const static long cost = 1;\n        const static long NR = NR_;\n        const static long NC = NC_;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n        typedef T type;\n        typedef const T& const_ret_type;\n\n        const_ret_type apply (long , long ) const { return val; }\n\n        long nr() const { return NR; }\n        long nc() const { return NC; }\n    };\n\n    template <\n        typename T,\n        long NR, \n        long NC\n        >\n    const matrix_op<op_uniform_matrix_2<T,NR,NC> > uniform_matrix (\n        const T& val\n    )\n    {\n        COMPILE_TIME_ASSERT(NR > 0 && NC > 0);\n\n        typedef op_uniform_matrix_2<T,NR,NC> op;\n        return matrix_op<op>(op(val));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        long NR_, \n        long NC_, \n        T val\n        >\n    struct op_uniform_matrix : does_not_alias \n    {\n        const static long cost = 1;\n        const static long NR = NR_;\n        const static long NC = NC_;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n        typedef T type;\n        typedef const T const_ret_type;\n        const_ret_type apply ( long , long ) const { return val; }\n\n        long nr() const { return NR; }\n        long nc() const { return NC; }\n    };\n\n    template <\n        typename T, \n        long NR, \n        long NC, \n        T val\n        >\n    const matrix_op<op_uniform_matrix<T,NR,NC,val> > uniform_matrix (\n    )\n    {\n        COMPILE_TIME_ASSERT(NR > 0 && NC > 0);\n        typedef op_uniform_matrix<T,NR,NC,val> op;\n        return matrix_op<op>(op());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    struct op_gaussian_randm : does_not_alias \n    {\n        op_gaussian_randm (\n            long nr_,\n            long nc_,\n            unsigned long seed_\n        ) :_nr(nr_), _nc(nc_), seed(seed_){}\n\n        const long _nr;\n        const long _nc;\n        const unsigned long seed;\n\n        const static long cost = 100;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n        typedef double type;\n        typedef double const_ret_type;\n        const_ret_type apply ( long r, long c) const { return gaussian_random_hash(r,c,seed); }\n\n        long nr() const { return _nr; }\n        long nc() const { return _nc; }\n    };\n\n    inline const matrix_op<op_gaussian_randm> gaussian_randm (\n        long nr,\n        long nc,\n        unsigned long seed = 0\n    )\n    {\n        DLIB_ASSERT(nr >= 0 && nc >= 0, \n            \"\\tmatrix_exp gaussian_randm(nr, nc, seed)\"\n            << \"\\n\\tInvalid inputs to this function\"\n            << \"\\n\\tnr: \" << nr \n            << \"\\n\\tnc: \" << nc \n            );\n\n        typedef op_gaussian_randm op;\n        return matrix_op<op>(op(nr,nc,seed));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_add_diag \n    {\n        op_add_diag( const M& m_, const typename M::type& value_) : m(m_), value(value_){}\n        const M& m;\n        const typename M::type value;\n\n        const static long cost = M::cost+1;\n        const static long NR = M::NR;\n        const static long NC = M::NC;\n        typedef typename M::type type;\n        typedef const typename M::type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r==c)\n                return m(r,c)+value; \n            else\n                return m(r,c);\n        }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.destructively_aliases(item); }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T \n        >\n    struct op_identity_matrix_2 : does_not_alias \n    {\n        op_identity_matrix_2(const long& size_) : size(size_) {}\n\n        const long size;\n\n        const static long cost = 1;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n        typedef T type;\n        typedef const T const_ret_type;\n        const_ret_type apply (long r, long c) const { return static_cast<type>(r == c); }\n\n        long nr() const { return size; }\n        long nc() const { return size; }\n    };\n\n    template <\n        typename T,\n        typename U\n        >\n    const matrix_diag_op<op_identity_matrix_2<T> > identity_matrix (\n        const U& size \n    )\n    {\n        // the size argument must be some scalar value, not a matrix!\n        COMPILE_TIME_ASSERT(is_matrix<U>::value == false);\n\n        DLIB_ASSERT(size > 0, \n            \"\\tconst matrix_exp identity_matrix<T>(size)\"\n            << \"\\n\\tsize must be bigger than 0\"\n            << \"\\n\\tsize: \" << size \n            );\n        typedef op_identity_matrix_2<T> op;\n        return matrix_diag_op<op>(op(size));\n    }\n\n    template <\n        typename EXP \n        >\n    const matrix_diag_op<op_identity_matrix_2<typename EXP::type> > identity_matrix (\n        const matrix_exp<EXP>& mat\n    )\n    {\n        DLIB_ASSERT(mat.nr() == mat.nc(), \n            \"\\tconst matrix_exp identity_matrix(mat)\"\n            << \"\\n\\t mat must be a square matrix.\"\n            << \"\\n\\t mat.nr(): \" << mat.nr() \n            << \"\\n\\t mat.nc(): \" << mat.nc() \n            );\n        typedef typename EXP::type T;\n        typedef op_identity_matrix_2<T> op;\n        return matrix_diag_op<op>(op(mat.nr()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        typename T\n        >\n    const matrix_op<op_add_diag<EXP> > operator+ (\n        const matrix_exp<EXP>& lhs,\n        const matrix_exp<matrix_diag_op<op_identity_matrix_2<T> > >& DLIB_IF_ASSERT(rhs)\n    )\n    {\n        // both matrices must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<T,typename EXP::type>::value == true));\n\n        // You can only add matrices together if they both have the same number of rows and columns.\n        DLIB_ASSERT(lhs.nc() == rhs.nc() &&\n                    lhs.nr() == rhs.nr(), \n            \"\\tconst matrix_exp operator+(const matrix_exp& lhs, const matrix_exp& rhs)\"\n            << \"\\n\\tYou are trying to add two incompatible matrices together\"\n            << \"\\n\\tlhs.nr(): \" << lhs.nr()\n            << \"\\n\\tlhs.nc(): \" << lhs.nc()\n            << \"\\n\\trhs.nr(): \" << rhs.nr()\n            << \"\\n\\trhs.nc(): \" << rhs.nc()\n            << \"\\n\\t&lhs: \" << &lhs \n            << \"\\n\\t&rhs: \" << &rhs \n            );\n\n\n        typedef op_add_diag<EXP> op;\n        return matrix_op<op>(op(lhs.ref(),1));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        typename T\n        >\n    const matrix_op<op_add_diag<EXP> > operator+ (\n        const matrix_exp<matrix_diag_op<op_identity_matrix_2<T> > >& DLIB_IF_ASSERT(lhs), \n        const matrix_exp<EXP>& rhs\n    )\n    {\n        // both matrices must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<T,typename EXP::type>::value == true));\n\n        // You can only add matrices together if they both have the same number of rows and columns.\n        DLIB_ASSERT(lhs.nc() == rhs.nc() &&\n                    lhs.nr() == rhs.nr(), \n            \"\\tconst matrix_exp operator+(const matrix_exp& lhs, const matrix_exp& rhs)\"\n            << \"\\n\\tYou are trying to add two incompatible matrices together\"\n            << \"\\n\\tlhs.nr(): \" << lhs.nr()\n            << \"\\n\\tlhs.nc(): \" << lhs.nc()\n            << \"\\n\\trhs.nr(): \" << rhs.nr()\n            << \"\\n\\trhs.nc(): \" << rhs.nc()\n            << \"\\n\\t&lhs: \" << &lhs \n            << \"\\n\\t&rhs: \" << &rhs \n            );\n\n\n        typedef op_add_diag<EXP> op;\n        return matrix_op<op>(op(rhs.ref(),1));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long N\n        >\n    struct op_const_diag_matrix : does_not_alias \n    {\n        op_const_diag_matrix(const long& size_, const T& value_) : size(size_),value(value_) {}\n\n        const long size;\n        const T value;\n\n        const static long cost = 1;\n        const static long NR = N;\n        const static long NC = N;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n        typedef T type;\n        typedef const T const_ret_type;\n        const_ret_type apply (long r, long c) const \n        { \n            if (r == c)\n                return value;\n            else\n                return 0;\n        }\n\n        long nr() const { return size; }\n        long nc() const { return size; }\n    };\n\n    template <\n        typename T,\n        typename U\n        >\n    const typename disable_if<is_matrix<U>, matrix_diag_op<op_const_diag_matrix<T,0> > >::type operator* (\n        const matrix_exp<matrix_diag_op<op_identity_matrix_2<T> > >& m,\n        const U& value\n    )\n    {\n        typedef op_const_diag_matrix<T,0> op;\n        return matrix_diag_op<op>(op(m.nr(), value));\n    }\n\n    template <\n        typename T,\n        typename U\n        >\n    const typename disable_if<is_matrix<U>, matrix_diag_op<op_const_diag_matrix<T,0> > >::type operator* (\n        const U& value,\n        const matrix_exp<matrix_diag_op<op_identity_matrix_2<T> > >& m\n    )\n    {\n        typedef op_const_diag_matrix<T,0> op;\n        return matrix_diag_op<op>(op(m.nr(), value));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        typename T,\n        long N\n        >\n    const matrix_op<op_add_diag<EXP> > operator+ (\n        const matrix_exp<EXP>& lhs,\n        const matrix_exp<matrix_diag_op<op_const_diag_matrix<T,N> > >& rhs \n    )\n    {\n        // both matrices must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<T,typename EXP::type>::value == true));\n\n        // You can only add matrices together if they both have the same number of rows and columns.\n        DLIB_ASSERT(lhs.nc() == rhs.nc() &&\n                    lhs.nr() == rhs.nr(), \n            \"\\tconst matrix_exp operator+(const matrix_exp& lhs, const matrix_exp& rhs)\"\n            << \"\\n\\tYou are trying to add two incompatible matrices together\"\n            << \"\\n\\tlhs.nr(): \" << lhs.nr()\n            << \"\\n\\tlhs.nc(): \" << lhs.nc()\n            << \"\\n\\trhs.nr(): \" << rhs.nr()\n            << \"\\n\\trhs.nc(): \" << rhs.nc()\n            << \"\\n\\t&lhs: \" << &lhs \n            << \"\\n\\t&rhs: \" << &rhs \n            );\n\n\n        typedef op_add_diag<EXP> op;\n        return matrix_op<op>(op(lhs.ref(),rhs.ref().op.value));\n    }\n\n    template <\n        typename EXP,\n        typename T,\n        long N\n        >\n    const matrix_op<op_add_diag<EXP> > operator+ (\n        const matrix_exp<matrix_diag_op<op_const_diag_matrix<T,N> > >& lhs, \n        const matrix_exp<EXP>& rhs\n    )\n    {\n        // both matrices must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<T,typename EXP::type>::value == true));\n\n        // You can only add matrices together if they both have the same number of rows and columns.\n        DLIB_ASSERT(lhs.nc() == rhs.nc() &&\n                    lhs.nr() == rhs.nr(), \n            \"\\tconst matrix_exp operator+(const matrix_exp& lhs, const matrix_exp& rhs)\"\n            << \"\\n\\tYou are trying to add two incompatible matrices together\"\n            << \"\\n\\tlhs.nr(): \" << lhs.nr()\n            << \"\\n\\tlhs.nc(): \" << lhs.nc()\n            << \"\\n\\trhs.nr(): \" << rhs.nr()\n            << \"\\n\\trhs.nc(): \" << rhs.nc()\n            << \"\\n\\t&lhs: \" << &lhs \n            << \"\\n\\t&rhs: \" << &rhs \n            );\n\n\n        typedef op_add_diag<EXP> op;\n        return matrix_op<op>(op(rhs.ref(),lhs.ref().op.value));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        long N\n        >\n    struct op_identity_matrix : does_not_alias \n    {\n        const static long cost = 1;\n        const static long NR = N;\n        const static long NC = N;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n        typedef T type;\n        typedef const T const_ret_type;\n        const_ret_type apply ( long r, long c) const { return static_cast<type>(r == c); }\n\n        long nr () const { return NR; }\n        long nc () const { return NC; }\n    };\n\n    template <\n        typename T, \n        long N\n        >\n    const matrix_diag_op<op_identity_matrix<T,N> > identity_matrix (\n    )\n    {\n        COMPILE_TIME_ASSERT(N > 0);\n\n        typedef op_identity_matrix<T,N> op;\n        return matrix_diag_op<op>(op());\n    }\n\n    template <\n        typename T,\n        typename U,\n        long N\n        >\n    const typename disable_if<is_matrix<U>, matrix_diag_op<op_const_diag_matrix<T,N> > >::type operator* (\n        const matrix_exp<matrix_diag_op<op_identity_matrix<T,N> > >& m,\n        const U& value\n    )\n    {\n        typedef op_const_diag_matrix<T,N> op;\n        return matrix_diag_op<op>(op(m.nr(), value));\n    }\n\n    template <\n        typename T,\n        typename U,\n        long N\n        >\n    const typename disable_if<is_matrix<U>, matrix_diag_op<op_const_diag_matrix<T,N> > >::type operator* (\n        const U& value,\n        const matrix_exp<matrix_diag_op<op_identity_matrix<T,N> > >& m\n    )\n    {\n        typedef op_const_diag_matrix<T,N> op;\n        return matrix_diag_op<op>(op(m.nr(), value));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        typename T,\n        long N\n        >\n    const matrix_op<op_add_diag<EXP> > operator+ (\n        const matrix_exp<matrix_diag_op<op_identity_matrix<T,N> > >& DLIB_IF_ASSERT(lhs), \n        const matrix_exp<EXP>& rhs\n    )\n    {\n        // both matrices must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<T,typename EXP::type>::value == true));\n\n        // You can only add matrices together if they both have the same number of rows and columns.\n        DLIB_ASSERT(lhs.nc() == rhs.nc() &&\n                    lhs.nr() == rhs.nr(), \n            \"\\tconst matrix_exp operator+(const matrix_exp& lhs, const matrix_exp& rhs)\"\n            << \"\\n\\tYou are trying to add two incompatible matrices together\"\n            << \"\\n\\tlhs.nr(): \" << lhs.nr()\n            << \"\\n\\tlhs.nc(): \" << lhs.nc()\n            << \"\\n\\trhs.nr(): \" << rhs.nr()\n            << \"\\n\\trhs.nc(): \" << rhs.nc()\n            << \"\\n\\t&lhs: \" << &lhs \n            << \"\\n\\t&rhs: \" << &rhs \n            );\n\n\n        typedef op_add_diag<EXP> op;\n        return matrix_op<op>(op(rhs.ref(),1));\n    }\n\n    template <\n        typename EXP,\n        typename T,\n        long N\n        >\n    const matrix_op<op_add_diag<EXP> > operator+ (\n        const matrix_exp<EXP>& lhs,\n        const matrix_exp<matrix_diag_op<op_identity_matrix<T,N> > >& DLIB_IF_ASSERT(rhs)\n    )\n    {\n        // both matrices must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<T,typename EXP::type>::value == true));\n\n        // You can only add matrices together if they both have the same number of rows and columns.\n        DLIB_ASSERT(lhs.nc() == rhs.nc() &&\n                    lhs.nr() == rhs.nr(), \n            \"\\tconst matrix_exp operator+(const matrix_exp& lhs, const matrix_exp& rhs)\"\n            << \"\\n\\tYou are trying to add two incompatible matrices together\"\n            << \"\\n\\tlhs.nr(): \" << lhs.nr()\n            << \"\\n\\tlhs.nc(): \" << lhs.nc()\n            << \"\\n\\trhs.nr(): \" << rhs.nr()\n            << \"\\n\\trhs.nc(): \" << rhs.nc()\n            << \"\\n\\t&lhs: \" << &lhs \n            << \"\\n\\t&rhs: \" << &rhs \n            );\n\n\n        typedef op_add_diag<EXP> op;\n        return matrix_op<op>(op(lhs.ref(),1));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, long R, long C>\n    struct op_rotate \n    {\n        op_rotate(const M& m_) : m(m_) {}\n        const M& m;\n\n        const static long cost = M::cost + 2;\n        const static long NR = M::NR;\n        const static long NC = M::NC;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        const_ret_type apply ( long r, long c) const { return m((r+R)%m.nr(),(c+C)%m.nc()); }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        long R,\n        long C,\n        typename EXP\n        >\n    const matrix_op<op_rotate<EXP,R,C> > rotate (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_rotate<EXP,R,C> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        // A template to tell me if two types can be multiplied together in a sensible way.  Here\n        // I'm saying it is ok if they are both the same type or one is the complex version of the other.\n        template <typename T, typename U> struct compatible { static const bool value = false;  typedef T type; };\n        template <typename T>             struct compatible<T,T> { static const bool value = true; typedef T type; };\n        template <typename T>             struct compatible<std::complex<T>,T> { static const bool value = true; typedef std::complex<T> type;  };\n        template <typename T>             struct compatible<T,std::complex<T> > { static const bool value = true; typedef std::complex<T> type; };\n    }\n\n\n    template <typename M1, typename M2>\n    struct op_pointwise_multiply : basic_op_mm<M1,M2>\n    {\n        op_pointwise_multiply( const M1& m1_, const M2& m2_) : basic_op_mm<M1,M2>(m1_,m2_){}\n\n        typedef typename impl::compatible<typename M1::type, typename M2::type>::type type;\n        typedef const type const_ret_type;\n        const static long cost = M1::cost + M2::cost + 1;\n\n        const_ret_type apply ( long r, long c) const\n        { return this->m1(r,c)*this->m2(r,c); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    inline const matrix_op<op_pointwise_multiply<EXP1,EXP2> > pointwise_multiply (\n        const matrix_exp<EXP1>& a,\n        const matrix_exp<EXP2>& b \n    )\n    {\n        COMPILE_TIME_ASSERT((impl::compatible<typename EXP1::type,typename EXP2::type>::value == true));\n        COMPILE_TIME_ASSERT(EXP1::NR == EXP2::NR || EXP1::NR == 0 || EXP2::NR == 0);\n        COMPILE_TIME_ASSERT(EXP1::NC == EXP2::NC || EXP1::NC == 0 || EXP2::NC == 0);\n        DLIB_ASSERT(a.nr() == b.nr() &&\n               a.nc() == b.nc(), \n            \"\\tconst matrix_exp pointwise_multiply(const matrix_exp& a, const matrix_exp& b)\"\n            << \"\\n\\tYou can only make a do a pointwise multiply with two equally sized matrices\"\n            << \"\\n\\ta.nr(): \" << a.nr()\n            << \"\\n\\ta.nc(): \" << a.nc() \n            << \"\\n\\tb.nr(): \" << b.nr()\n            << \"\\n\\tb.nc(): \" << b.nc() \n            );\n        typedef op_pointwise_multiply<EXP1,EXP2> op;\n        return matrix_op<op>(op(a.ref(),b.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, typename M3>\n    struct op_pointwise_multiply3 : basic_op_mmm<M1,M2,M3>\n    {\n        op_pointwise_multiply3( const M1& m1_, const M2& m2_, const M3& m3_) : \n            basic_op_mmm<M1,M2,M3>(m1_,m2_,m3_){}\n\n        typedef typename M1::type type;\n        typedef const typename M1::type const_ret_type;\n        const static long cost = M1::cost + M2::cost + M3::cost + 2;\n\n        const_ret_type apply (long r, long c) const\n        { return this->m1(r,c)*this->m2(r,c)*this->m3(r,c); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename EXP3\n        >\n    inline const matrix_op<op_pointwise_multiply3<EXP1,EXP2,EXP3> > \n        pointwise_multiply (\n        const matrix_exp<EXP1>& a,\n        const matrix_exp<EXP2>& b, \n        const matrix_exp<EXP3>& c\n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP2::type,typename EXP3::type>::value == true));\n        COMPILE_TIME_ASSERT(EXP1::NR == EXP2::NR || EXP1::NR == 0 || EXP2::NR == 0);\n        COMPILE_TIME_ASSERT(EXP1::NC == EXP2::NC || EXP1::NR == 0 || EXP2::NC == 0);\n        COMPILE_TIME_ASSERT(EXP2::NR == EXP3::NR || EXP2::NR == 0 || EXP3::NR == 0);\n        COMPILE_TIME_ASSERT(EXP2::NC == EXP3::NC || EXP2::NC == 0 || EXP3::NC == 0);\n        DLIB_ASSERT(a.nr() == b.nr() &&\n               a.nc() == b.nc() &&\n               b.nr() == c.nr() &&\n               b.nc() == c.nc(), \n            \"\\tconst matrix_exp pointwise_multiply(a,b,c)\"\n            << \"\\n\\tYou can only make a do a pointwise multiply between equally sized matrices\"\n            << \"\\n\\ta.nr(): \" << a.nr()\n            << \"\\n\\ta.nc(): \" << a.nc() \n            << \"\\n\\tb.nr(): \" << b.nr()\n            << \"\\n\\tb.nc(): \" << b.nc() \n            << \"\\n\\tc.nr(): \" << c.nr()\n            << \"\\n\\tc.nc(): \" << c.nc() \n            );\n\n        typedef op_pointwise_multiply3<EXP1,EXP2,EXP3> op;\n        return matrix_op<op>(op(a.ref(),b.ref(),c.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, typename M3, typename M4>\n    struct op_pointwise_multiply4 : basic_op_mmmm<M1,M2,M3,M4>\n    {\n        op_pointwise_multiply4( const M1& m1_, const M2& m2_, const M3& m3_, const M4& m4_) : \n            basic_op_mmmm<M1,M2,M3,M4>(m1_,m2_,m3_,m4_){}\n\n        typedef typename M1::type type;\n        typedef const typename M1::type const_ret_type;\n        const static long cost = M1::cost + M2::cost + M3::cost + M4::cost + 3;\n\n        const_ret_type apply (long r, long c) const\n        { return this->m1(r,c)*this->m2(r,c)*this->m3(r,c)*this->m4(r,c); }\n    };\n\n\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename EXP3,\n        typename EXP4\n        >\n    inline const matrix_op<op_pointwise_multiply4<EXP1,EXP2,EXP3,EXP4> > pointwise_multiply (\n        const matrix_exp<EXP1>& a,\n        const matrix_exp<EXP2>& b, \n        const matrix_exp<EXP3>& c,\n        const matrix_exp<EXP4>& d\n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP2::type,typename EXP3::type>::value == true));\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP3::type,typename EXP4::type>::value == true));\n        COMPILE_TIME_ASSERT(EXP1::NR == EXP2::NR || EXP1::NR == 0 || EXP2::NR == 0);\n        COMPILE_TIME_ASSERT(EXP1::NC == EXP2::NC || EXP1::NC == 0 || EXP2::NC == 0 );\n        COMPILE_TIME_ASSERT(EXP2::NR == EXP3::NR || EXP2::NR == 0 || EXP3::NR == 0);\n        COMPILE_TIME_ASSERT(EXP2::NC == EXP3::NC || EXP2::NC == 0 || EXP3::NC == 0);\n        COMPILE_TIME_ASSERT(EXP3::NR == EXP4::NR || EXP3::NR == 0 || EXP4::NR == 0);\n        COMPILE_TIME_ASSERT(EXP3::NC == EXP4::NC || EXP3::NC == 0 || EXP4::NC == 0);\n        DLIB_ASSERT(a.nr() == b.nr() &&\n               a.nc() == b.nc() &&\n               b.nr() == c.nr() &&\n               b.nc() == c.nc() &&\n               c.nr() == d.nr() &&\n               c.nc() == d.nc(), \n            \"\\tconst matrix_exp pointwise_multiply(a,b,c,d)\"\n            << \"\\n\\tYou can only make a do a pointwise multiply between equally sized matrices\"\n            << \"\\n\\ta.nr(): \" << a.nr()\n            << \"\\n\\ta.nc(): \" << a.nc() \n            << \"\\n\\tb.nr(): \" << b.nr()\n            << \"\\n\\tb.nc(): \" << b.nc() \n            << \"\\n\\tc.nr(): \" << c.nr()\n            << \"\\n\\tc.nc(): \" << c.nc() \n            << \"\\n\\td.nr(): \" << d.nr()\n            << \"\\n\\td.nc(): \" << d.nc() \n            );\n\n        typedef op_pointwise_multiply4<EXP1,EXP2,EXP3,EXP4> op;\n        return matrix_op<op>(op(a.ref(),b.ref(),c.ref(),d.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename P,\n        int type = static_switch<\n            pixel_traits<P>::grayscale,\n            pixel_traits<P>::rgb,\n            pixel_traits<P>::hsi,\n            pixel_traits<P>::rgb_alpha\n            >::value\n        >\n    struct pixel_to_vector_helper;\n\n    template <typename P>\n    struct pixel_to_vector_helper<P,1>\n    {\n        template <typename M>\n        static void assign (\n            M& m,\n            const P& pixel\n        )\n        {\n            m(0) = static_cast<typename M::type>(pixel);\n        }\n    };\n\n    template <typename P>\n    struct pixel_to_vector_helper<P,2>\n    {\n        template <typename M>\n        static void assign (\n            M& m,\n            const P& pixel\n        )\n        {\n            m(0) = static_cast<typename M::type>(pixel.red);\n            m(1) = static_cast<typename M::type>(pixel.green);\n            m(2) = static_cast<typename M::type>(pixel.blue);\n        }\n    };\n\n    template <typename P>\n    struct pixel_to_vector_helper<P,3>\n    {\n        template <typename M>\n        static void assign (\n            M& m,\n            const P& pixel\n        )\n        {\n            m(0) = static_cast<typename M::type>(pixel.h);\n            m(1) = static_cast<typename M::type>(pixel.s);\n            m(2) = static_cast<typename M::type>(pixel.i);\n        }\n    };\n\n    template <typename P>\n    struct pixel_to_vector_helper<P,4>\n    {\n        template <typename M>\n        static void assign (\n            M& m,\n            const P& pixel\n        )\n        {\n            m(0) = static_cast<typename M::type>(pixel.red);\n            m(1) = static_cast<typename M::type>(pixel.green);\n            m(2) = static_cast<typename M::type>(pixel.blue);\n            m(3) = static_cast<typename M::type>(pixel.alpha);\n        }\n    };\n\n\n    template <\n        typename T,\n        typename P\n        >\n    inline const matrix<T,pixel_traits<P>::num,1> pixel_to_vector (\n        const P& pixel\n    )\n    {\n        COMPILE_TIME_ASSERT(pixel_traits<P>::num > 0);\n        matrix<T,pixel_traits<P>::num,1> m;\n        pixel_to_vector_helper<P>::assign(m,pixel);\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename P,\n        int type = static_switch<\n            pixel_traits<P>::grayscale,\n            pixel_traits<P>::rgb,\n            pixel_traits<P>::hsi,\n            pixel_traits<P>::rgb_alpha\n            >::value\n        >\n    struct vector_to_pixel_helper;\n\n    template <typename P>\n    struct vector_to_pixel_helper<P,1>\n    {\n        template <typename M>\n        static void assign (\n            P& pixel,\n            const M& m\n        )\n        {\n            pixel = static_cast<unsigned char>(m(0));\n        }\n    };\n\n    template <typename P>\n    struct vector_to_pixel_helper<P,2>\n    {\n        template <typename M>\n        static void assign (\n            P& pixel,\n            const M& m\n        )\n        {\n            pixel.red = static_cast<unsigned char>(m(0));\n            pixel.green = static_cast<unsigned char>(m(1));\n            pixel.blue = static_cast<unsigned char>(m(2));\n        }\n    };\n\n    template <typename P>\n    struct vector_to_pixel_helper<P,3>\n    {\n        template <typename M>\n        static void assign (\n            P& pixel,\n            const M& m\n        )\n        {\n            pixel.h = static_cast<unsigned char>(m(0));\n            pixel.s = static_cast<unsigned char>(m(1));\n            pixel.i = static_cast<unsigned char>(m(2));\n        }\n    };\n\n    template <typename P>\n    struct vector_to_pixel_helper<P,4>\n    {\n        template <typename M>\n        static void assign (\n            P& pixel,\n            const M& m\n        )\n        {\n            pixel.red = static_cast<unsigned char>(m(0));\n            pixel.green = static_cast<unsigned char>(m(1));\n            pixel.blue = static_cast<unsigned char>(m(2));\n            pixel.alpha = static_cast<unsigned char>(m(3));\n        }\n    };\n\n    template <\n        typename P,\n        typename EXP\n        >\n    inline void vector_to_pixel (\n        P& pixel,\n        const matrix_exp<EXP>& vector \n    )\n    {\n        COMPILE_TIME_ASSERT(pixel_traits<P>::num == matrix_exp<EXP>::NR);\n        COMPILE_TIME_ASSERT(matrix_exp<EXP>::NC == 1);\n        vector_to_pixel_helper<P>::assign(pixel,vector);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, long lower, long upper>\n    struct op_clamp : basic_op_m<M>\n    {\n        op_clamp( const M& m_) : basic_op_m<M>(m_){}\n\n        typedef typename M::type type;\n        typedef const typename M::type const_ret_type;\n        const static long cost = M::cost + 2;\n\n        const_ret_type apply ( long r, long c) const\n        { \n            const type temp = this->m(r,c);\n            if (temp > static_cast<type>(upper))\n                return static_cast<type>(upper);\n            else if (temp < static_cast<type>(lower))\n                return static_cast<type>(lower);\n            else\n                return temp;\n        }\n    };\n\n    template <\n        long l, \n        long u,\n        typename EXP\n        >\n    const matrix_op<op_clamp<EXP,l,u> > clamp (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_clamp<EXP,l,u> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_clamp2 : basic_op_m<M>\n    {\n        typedef typename M::type type;\n\n        op_clamp2( const M& m_, const type& l, const type& u) : \n            basic_op_m<M>(m_), lower(l), upper(u){}\n\n        const type& lower;\n        const type& upper;\n\n        typedef const typename M::type const_ret_type;\n        const static long cost = M::cost + 2;\n\n        const_ret_type apply ( long r, long c) const\n        { \n            const type temp = this->m(r,c);\n            if (temp > upper)\n                return upper;\n            else if (temp < lower)\n                return lower;\n            else\n                return temp;\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_clamp2<EXP> > clamp (\n        const matrix_exp<EXP>& m,\n        const typename EXP::type& lower,\n        const typename EXP::type& upper\n    )\n    {\n        typedef op_clamp2<EXP> op;\n        return matrix_op<op>(op(m.ref(),lower, upper));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, typename M3>\n    struct op_clamp_m : basic_op_mmm<M1,M2,M3>\n    {\n        op_clamp_m( const M1& m1_, const M2& m2_, const M3& m3_) : \n            basic_op_mmm<M1,M2,M3>(m1_,m2_,m3_){}\n\n        typedef typename M1::type type;\n        typedef const typename M1::type const_ret_type;\n        const static long cost = M1::cost + M2::cost + M3::cost + 2;\n\n        const_ret_type apply (long r, long c) const\n        { \n            const type val = this->m1(r,c);\n            const type lower = this->m2(r,c);\n            const type upper = this->m3(r,c);\n            if (val <= upper)\n            {\n                if (lower <= val)\n                    return val;\n                else\n                    return lower;\n            }\n            else \n            {\n                return upper;\n            }\n        }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename EXP3\n        >\n    const matrix_op<op_clamp_m<EXP1,EXP2,EXP3> > \n    clamp (\n        const matrix_exp<EXP1>& m,\n        const matrix_exp<EXP2>& lower, \n        const matrix_exp<EXP3>& upper\n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP2::type,typename EXP3::type>::value == true));\n        COMPILE_TIME_ASSERT(EXP1::NR == EXP2::NR || EXP1::NR == 0 || EXP2::NR == 0);\n        COMPILE_TIME_ASSERT(EXP1::NC == EXP2::NC || EXP1::NR == 0 || EXP2::NC == 0);\n        COMPILE_TIME_ASSERT(EXP2::NR == EXP3::NR || EXP2::NR == 0 || EXP3::NR == 0);\n        COMPILE_TIME_ASSERT(EXP2::NC == EXP3::NC || EXP2::NC == 0 || EXP3::NC == 0);\n        DLIB_ASSERT(m.nr() == lower.nr() &&\n                    m.nc() == lower.nc() &&\n                    m.nr() == upper.nr() &&\n                    m.nc() == upper.nc(),\n            \"\\tconst matrix_exp clamp(m,lower,upper)\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t m.nr():     \" << m.nr()\n            << \"\\n\\t m.nc():     \" << m.nc() \n            << \"\\n\\t lower.nr(): \" << lower.nr()\n            << \"\\n\\t lower.nc(): \" << lower.nc() \n            << \"\\n\\t upper.nr(): \" << upper.nr()\n            << \"\\n\\t upper.nc(): \" << upper.nc() \n            );\n\n        typedef op_clamp_m<EXP1,EXP2,EXP3> op;\n        return matrix_op<op>(op(m.ref(),lower.ref(),upper.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_lowerbound : basic_op_m<M>\n    {\n        typedef typename M::type type;\n\n        op_lowerbound( const M& m_, const type& thresh_) : \n            basic_op_m<M>(m_), thresh(thresh_){}\n\n        const type& thresh;\n\n        typedef const typename M::type const_ret_type;\n        const static long cost = M::cost + 2;\n\n        const_ret_type apply ( long r, long c) const\n        { \n            const type temp = this->m(r,c);\n            if (temp >= thresh)\n                return temp;\n            else\n                return thresh;\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_lowerbound<EXP> > lowerbound (\n        const matrix_exp<EXP>& m,\n        const typename EXP::type& thresh\n    )\n    {\n        typedef op_lowerbound<EXP> op;\n        return matrix_op<op>(op(m.ref(), thresh));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_upperbound : basic_op_m<M>\n    {\n        typedef typename M::type type;\n\n        op_upperbound( const M& m_, const type& thresh_) : \n            basic_op_m<M>(m_), thresh(thresh_){}\n\n        const type& thresh;\n\n        typedef const typename M::type const_ret_type;\n        const static long cost = M::cost + 2;\n\n        const_ret_type apply ( long r, long c) const\n        { \n            const type temp = this->m(r,c);\n            if (temp <= thresh)\n                return temp;\n            else\n                return thresh;\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_upperbound<EXP> > upperbound (\n        const matrix_exp<EXP>& m,\n        const typename EXP::type& thresh\n    )\n    {\n        typedef op_upperbound<EXP> op;\n        return matrix_op<op>(op(m.ref(), thresh));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_reshape \n    {\n        op_reshape(const M& m_, const long& rows_, const long& cols_) : m(m_),rows(rows_),cols(cols_) {}\n        const M& m;\n        const long rows;\n        const long cols;\n\n        const static long cost = M::cost+2;\n        const static long NR = 0;\n        const static long NC = 0;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n\n        const_ret_type apply ( long r, long c) const\n        { \n            const long idx = r*cols + c;\n            return m(idx/m.nc(), idx%m.nc());\n        }\n\n        long nr () const { return rows; }\n        long nc () const { return cols; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_reshape<EXP> > reshape (\n        const matrix_exp<EXP>& m,\n        const long& rows,\n        const long& cols \n    )\n    {\n        DLIB_ASSERT(m.size() == rows*cols && rows > 0 && cols > 0, \n            \"\\tconst matrix_exp reshape(m, rows, cols)\"\n            << \"\\n\\t The size of m must match the dimensions you want to reshape it into.\"\n            << \"\\n\\t m.size():  \" << m.size()\n            << \"\\n\\t rows*cols: \" << rows*cols \n            << \"\\n\\t rows:      \" << rows \n            << \"\\n\\t cols:      \" << cols \n            );\n\n        typedef op_reshape<EXP> op;\n        return matrix_op<op>(op(m.ref(), rows, cols));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    typename disable_if<is_complex<typename EXP1::type>,bool>::type equal (\n        const matrix_exp<EXP1>& a,\n        const matrix_exp<EXP2>& b,\n        const typename EXP1::type eps = 100*std::numeric_limits<typename EXP1::type>::epsilon()\n    )\n    {\n        // check if the dimensions don't match\n        if (a.nr() != b.nr() || a.nc() != b.nc())\n            return false;\n\n        for (long r = 0; r < a.nr(); ++r)\n        {\n            for (long c = 0; c < a.nc(); ++c)\n            {\n                if (std::abs(a(r,c)-b(r,c)) > eps)\n                    return false;\n            }\n        }\n\n        // no non-equal points found so we return true \n        return true;\n    }\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    typename enable_if<is_complex<typename EXP1::type>,bool>::type equal (\n        const matrix_exp<EXP1>& a,\n        const matrix_exp<EXP2>& b,\n        const typename EXP1::type::value_type eps = 100*std::numeric_limits<typename EXP1::type::value_type>::epsilon()\n    )\n    {\n        // check if the dimensions don't match\n        if (a.nr() != b.nr() || a.nc() != b.nc())\n            return false;\n\n        for (long r = 0; r < a.nr(); ++r)\n        {\n            for (long c = 0; c < a.nc(); ++c)\n            {\n                if (std::abs(real(a(r,c)-b(r,c))) > eps ||\n                    std::abs(imag(a(r,c)-b(r,c))) > eps)\n                    return false;\n            }\n        }\n\n        // no non-equal points found so we return true \n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_scale_columns  \n    {\n        op_scale_columns(const M1& m1_, const M2& m2_) : m1(m1_), m2(m2_) {}\n        const M1& m1;\n        const M2& m2;\n\n        const static long cost = M1::cost + M2::cost + 1;\n        typedef typename M1::type type;\n        typedef const typename M1::type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n        const static long NR = M1::NR;\n        const static long NC = M1::NC;\n\n        const_ret_type apply ( long r, long c) const { return m1(r,c)*m2(c); }\n\n        long nr () const { return m1.nr(); }\n        long nc () const { return m1.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item) ; }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.destructively_aliases(item) || m2.aliases(item); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    const matrix_op<op_scale_columns<EXP1,EXP2> > scale_columns (\n        const matrix_exp<EXP1>& m,\n        const matrix_exp<EXP2>& v \n    )\n    {\n        // Both arguments to this function must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n        // The v argument must be a row or column vector.\n        COMPILE_TIME_ASSERT((EXP2::NC == 1 || EXP2::NC == 0) || (EXP2::NR == 1 || EXP2::NR == 0));\n\n        // figure out the compile time known length of v\n        const long v_len = ((EXP2::NR)*(EXP2::NC) == 0)? 0 : (tmax<EXP2::NR,EXP2::NC>::value);\n\n        // the length of v must match the number of columns in m\n        COMPILE_TIME_ASSERT(EXP1::NC == v_len || EXP1::NC == 0 || v_len == 0);\n\n        DLIB_ASSERT(is_vector(v) == true && v.size() == m.nc(), \n            \"\\tconst matrix_exp scale_columns(m, v)\"\n            << \"\\n\\tv must be a row or column vector and its length must match the number of columns in m\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tv.nr(): \" << v.nr()\n            << \"\\n\\tv.nc(): \" << v.nc() \n            );\n        typedef op_scale_columns<EXP1,EXP2> op;\n        return matrix_op<op>(op(m.ref(),v.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_scale_columns_diag  \n    {\n        op_scale_columns_diag(const M1& m1_, const M2& m2_) : m1(m1_), m2(m2_) {}\n        const M1& m1;\n        const M2& m2;\n\n        const static long cost = M1::cost + M2::cost + 1;\n        typedef typename M1::type type;\n        typedef const typename M1::type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n        const static long NR = M1::NR;\n        const static long NC = M1::NC;\n\n        const_ret_type apply ( long r, long c) const { return m1(r,c)*m2(c,c); }\n\n        long nr () const { return m1.nr(); }\n        long nc () const { return m1.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item) ; }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.destructively_aliases(item) || m2.aliases(item); }\n    };\n\n// turn expressions of the form mat*diagonal_matrix into scale_columns(mat, d)\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    const matrix_op<op_scale_columns_diag<EXP1,EXP2> > operator* (\n        const matrix_exp<EXP1>& m,\n        const matrix_diag_exp<EXP2>& d \n    )\n    {\n        // Both arguments to this function must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n\n        // figure out the compile time known length of d\n        const long v_len = ((EXP2::NR)*(EXP2::NC) == 0)? 0 : (tmax<EXP2::NR,EXP2::NC>::value);\n\n        // the length of d must match the number of columns in m\n        COMPILE_TIME_ASSERT(EXP1::NC == v_len || EXP1::NC == 0 || v_len == 0);\n\n        DLIB_ASSERT(m.nc() == d.nr(), \n            \"\\tconst matrix_exp operator*(m, d)\"\n            << \"\\n\\tmatrix dimensions don't match\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\td.nr(): \" << d.nr()\n            << \"\\n\\td.nc(): \" << d.nc() \n            );\n        typedef op_scale_columns_diag<EXP1,EXP2> op;\n        return matrix_op<op>(op(m.ref(),d.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_scale_rows  \n    {\n        op_scale_rows(const M1& m1_, const M2& m2_) : m1(m1_), m2(m2_) {}\n        const M1& m1;\n        const M2& m2;\n\n        const static long cost = M1::cost + M2::cost + 1;\n        typedef typename M1::type type;\n        typedef const typename M1::type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n        const static long NR = M1::NR;\n        const static long NC = M1::NC;\n\n        const_ret_type apply ( long r, long c) const { return m1(r,c)*m2(r); }\n\n        long nr () const { return m1.nr(); }\n        long nc () const { return m1.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item) ; }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.destructively_aliases(item) || m2.aliases(item); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    const matrix_op<op_scale_rows<EXP1,EXP2> > scale_rows (\n        const matrix_exp<EXP1>& m,\n        const matrix_exp<EXP2>& v \n    )\n    {\n        // Both arguments to this function must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n        // The v argument must be a row or column vector.\n        COMPILE_TIME_ASSERT((EXP2::NC == 1 || EXP2::NC == 0) || (EXP2::NR == 1 || EXP2::NR == 0));\n\n        // figure out the compile time known length of v\n        const long v_len = ((EXP2::NR)*(EXP2::NC) == 0)? 0 : (tmax<EXP2::NR,EXP2::NC>::value);\n\n        // the length of v must match the number of rows in m\n        COMPILE_TIME_ASSERT(EXP1::NR == v_len || EXP1::NR == 0 || v_len == 0);\n\n        DLIB_ASSERT(is_vector(v) == true && v.size() == m.nr(), \n            \"\\tconst matrix_exp scale_rows(m, v)\"\n            << \"\\n\\tv must be a row or column vector and its length must match the number of rows in m\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tv.nr(): \" << v.nr()\n            << \"\\n\\tv.nc(): \" << v.nc() \n            );\n        typedef op_scale_rows<EXP1,EXP2> op;\n        return matrix_op<op>(op(m.ref(),v.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_scale_rows_diag  \n    {\n        op_scale_rows_diag(const M1& m1_, const M2& m2_) : m1(m1_), m2(m2_) {}\n        const M1& m1;\n        const M2& m2;\n\n        const static long cost = M1::cost + M2::cost + 1;\n        typedef typename M1::type type;\n        typedef const typename M1::type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n        const static long NR = M1::NR;\n        const static long NC = M1::NC;\n\n        const_ret_type apply ( long r, long c) const { return m1(r,c)*m2(r,r); }\n\n        long nr () const { return m1.nr(); }\n        long nc () const { return m1.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item) ; }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.destructively_aliases(item) || m2.aliases(item); }\n    };\n\n// turn expressions of the form diagonal_matrix*mat into scale_rows(mat, d)\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    const matrix_op<op_scale_rows_diag<EXP1,EXP2> > operator* (\n        const matrix_diag_exp<EXP2>& d, \n        const matrix_exp<EXP1>& m\n    )\n    {\n        // Both arguments to this function must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n\n        // figure out the compile time known length of d\n        const long v_len = ((EXP2::NR)*(EXP2::NC) == 0)? 0 : (tmax<EXP2::NR,EXP2::NC>::value);\n\n        // the length of d must match the number of rows in m\n        COMPILE_TIME_ASSERT(EXP1::NR == v_len || EXP1::NR == 0 || v_len == 0);\n\n        DLIB_ASSERT(d.nc() == m.nr(), \n            \"\\tconst matrix_exp operator*(d, m)\"\n            << \"\\n\\tThe dimensions of the d and m matrices don't match.\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\td.nr(): \" << d.nr()\n            << \"\\n\\td.nc(): \" << d.nc() \n            );\n        typedef op_scale_rows_diag<EXP1,EXP2> op;\n        return matrix_op<op>(op(m.ref(),d.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    /*\n        The idea here is to catch expressions of the form d*M*d where d is diagonal and M\n        is some square matrix and turn them into something equivalent to \n        pointwise_multiply(diag(d)*trans(diag(d)), M).\n\n        The reason for this is that doing it this way is more numerically stable.  In particular,\n        doing 2 matrix multiplies as suggested by d*M*d could result in an asymmetric matrix even \n        if M is symmetric to begin with. \n    */\n\n    template <typename M1, typename M2, typename M3>\n    struct op_diag_m_diag  \n    {\n        // This operator represents M1*M2*M3 where M1 and M3 are diagonal\n\n        op_diag_m_diag(const M1& m1_, const M2& m2_, const M3& m3_) : m1(m1_), m2(m2_), m3(m3_) {}\n        const M1& m1;\n        const M2& m2;\n        const M3& m3;\n\n        const static long cost = M1::cost + M2::cost + M3::cost + 1;\n        typedef typename M2::type type;\n        typedef const typename M2::type const_ret_type;\n        typedef typename M2::mem_manager_type mem_manager_type;\n        typedef typename M2::layout_type layout_type;\n        const static long NR = M2::NR;\n        const static long NC = M2::NC;\n\n        const_ret_type apply ( long r, long c) const { return (m1(r,r)*m3(c,c))*m2(r,c); }\n\n        long nr () const { return m2.nr(); }\n        long nc () const { return m2.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item) || m3.aliases(item) ; }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m2.destructively_aliases(item) || m1.aliases(item) || m3.aliases(item) ; }\n    };\n\n    // catch d*(M*d) = EXP1*EXP2*EXP3\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename EXP3\n        >\n    const matrix_op<op_diag_m_diag<EXP1,EXP2,EXP3> > operator* (\n        const matrix_diag_exp<EXP1>& d,\n        const matrix_exp<matrix_op<op_scale_columns_diag<EXP2,EXP3> > >& m\n    )\n    {\n        // Both arguments to this function must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n\n        // figure out the compile time known length of d\n        const long v_len = ((EXP1::NR)*(EXP1::NC) == 0)? 0 : (tmax<EXP1::NR,EXP1::NC>::value);\n\n        // the length of d must match the number of rows in m\n        COMPILE_TIME_ASSERT(EXP2::NR == v_len || EXP2::NR == 0 || v_len == 0);\n\n        DLIB_ASSERT(d.nc() == m.nr(), \n            \"\\tconst matrix_exp operator*(d, m)\"\n            << \"\\n\\tmatrix dimensions don't match\"\n            << \"\\n\\td.nr(): \" << d.nr()\n            << \"\\n\\td.nc(): \" << d.nc() \n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            );\n        typedef op_diag_m_diag<EXP1,EXP2,EXP3> op;\n        return matrix_op<op>(op(d.ref(), m.ref().op.m1, m.ref().op.m2));\n    }\n\n    // catch (d*M)*d = EXP1*EXP2*EXP3\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename EXP3\n        >\n    const matrix_op<op_diag_m_diag<EXP1,EXP2,EXP3> > operator* (\n        const matrix_exp<matrix_op<op_scale_rows_diag<EXP2,EXP1> > >& m,\n        const matrix_diag_exp<EXP3>& d \n    )\n    {\n        // Both arguments to this function must contain the same type of element\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP3::type,typename EXP2::type>::value == true));\n\n        // figure out the compile time known length of d\n        const long v_len = ((EXP3::NR)*(EXP3::NC) == 0)? 0 : (tmax<EXP3::NR,EXP3::NC>::value);\n\n        // the length of d must match the number of columns in m\n        COMPILE_TIME_ASSERT(EXP2::NC == v_len || EXP2::NC == 0 || v_len == 0);\n\n        DLIB_ASSERT(m.nc() == d.nr(), \n            \"\\tconst matrix_exp operator*(m, d)\"\n            << \"\\n\\tmatrix dimensions don't match\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\td.nr(): \" << d.nr()\n            << \"\\n\\td.nc(): \" << d.nc() \n            );\n        typedef op_diag_m_diag<EXP1,EXP2,EXP3> op;\n        return matrix_op<op>(op(m.ref().op.m2, m.ref().op.m1, d.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    struct sort_columns_sort_helper\n    {\n        template <typename T>\n        bool operator() (\n            const T& item1,\n            const T& item2\n        ) const\n        {\n            return item1.first < item2.first;\n        }\n    };\n\n    template <\n        typename T, long NR, long NC, typename mm, typename l1,\n        long NR2, long NC2, typename mm2, typename l2\n        >\n    void sort_columns (\n        matrix<T,NR,NC,mm,l1>& m,\n        matrix<T,NR2,NC2,mm2,l2>& v\n    )\n    {\n        COMPILE_TIME_ASSERT(NC2 == 1 || NC2 == 0);\n        COMPILE_TIME_ASSERT(NC == NR2 || NC == 0 || NR2 == 0);\n\n        DLIB_ASSERT(is_col_vector(v) == true && v.size() == m.nc(), \n            \"\\tconst matrix_exp sort_columns(m, v)\"\n            << \"\\n\\tv must be a column vector and its length must match the number of columns in m\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tv.nr(): \" << v.nr()\n            << \"\\n\\tv.nc(): \" << v.nc() \n            );\n\n\n\n        // Now we have to sort the given vectors in the m matrix according\n        // to how big their corresponding v(column index) values are.\n        typedef std::pair<T, matrix<T,0,1,mm> > col_pair;\n        typedef std_allocator<col_pair, mm> alloc;\n        std::vector<col_pair,alloc> colvalues;\n        col_pair p;\n        for (long r = 0; r < v.nr(); ++r)\n        {\n            p.first = v(r);\n            p.second = colm(m,r);\n            colvalues.push_back(p);\n        }\n        std::sort(colvalues.begin(), colvalues.end(), sort_columns_sort_helper());\n        \n        for (long i = 0; i < v.nr(); ++i)\n        {\n            v(i) = colvalues[i].first;\n            set_colm(m,i) = colvalues[i].second;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, long NR, long NC, typename mm, typename l1,\n        long NR2, long NC2, typename mm2, typename l2\n        >\n    void rsort_columns (\n        matrix<T,NR,NC,mm,l1>& m,\n        matrix<T,NR2,NC2,mm2,l2>& v\n    )\n    {\n        COMPILE_TIME_ASSERT(NC2 == 1 || NC2 == 0);\n        COMPILE_TIME_ASSERT(NC == NR2 || NC == 0 || NR2 == 0);\n\n        DLIB_ASSERT(is_col_vector(v) == true && v.size() == m.nc(), \n            \"\\tconst matrix_exp rsort_columns(m, v)\"\n            << \"\\n\\tv must be a column vector and its length must match the number of columns in m\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tv.nr(): \" << v.nr()\n            << \"\\n\\tv.nc(): \" << v.nc() \n            );\n\n\n\n        // Now we have to sort the given vectors in the m matrix according\n        // to how big their corresponding v(column index) values are.\n        typedef std::pair<T, matrix<T,0,1,mm> > col_pair;\n        typedef std_allocator<col_pair, mm> alloc;\n        std::vector<col_pair,alloc> colvalues;\n        col_pair p;\n        for (long r = 0; r < v.nr(); ++r)\n        {\n            p.first = v(r);\n            p.second = colm(m,r);\n            colvalues.push_back(p);\n        }\n        std::sort(colvalues.rbegin(), colvalues.rend(), sort_columns_sort_helper());\n        \n        for (long i = 0; i < v.nr(); ++i)\n        {\n            v(i) = colvalues[i].first;\n            set_colm(m,i) = colvalues[i].second;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_tensor_product \n    {\n        op_tensor_product(const M1& m1_, const M2& m2_) : m1(m1_),m2(m2_) {}\n        const M1& m1;\n        const M2& m2;\n\n        const static long cost = M1::cost + M2::cost + 1;\n        const static long NR = M1::NR*M2::NR;\n        const static long NC = M1::NC*M2::NC;\n        typedef typename M1::type type;\n        typedef const typename M1::type const_ret_type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n\n        const_ret_type apply ( long r, long c) const\n        { \n            return m1(r/m2.nr(),c/m2.nc())*m2(r%m2.nr(),c%m2.nc()); \n        }\n\n        long nr () const { return m1.nr()*m2.nr(); }\n        long nc () const { return m1.nc()*m2.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    inline const matrix_op<op_tensor_product<EXP1,EXP2> > tensor_product (\n        const matrix_exp<EXP1>& a,\n        const matrix_exp<EXP2>& b \n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n        typedef op_tensor_product<EXP1,EXP2> op;\n        return matrix_op<op>(op(a.ref(),b.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_make_symmetric : basic_op_m<M>\n    {\n        op_make_symmetric ( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost+1;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r >= c)\n                return this->m(r,c);\n            else\n                return this->m(c,r);\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_make_symmetric<EXP> > make_symmetric (\n        const matrix_exp<EXP>& m\n    )\n    {\n        DLIB_ASSERT(m.nr() == m.nc(), \n            \"\\tconst matrix make_symmetric(m)\"\n            << \"\\n\\t m must be a square matrix\"\n            << \"\\n\\t m.nr(): \" << m.nr()\n            << \"\\n\\t m.nc(): \" << m.nc()\n            );\n\n        typedef op_make_symmetric<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_lowerm : basic_op_m<M>\n    {\n        op_lowerm( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost+2;\n        typedef typename M::type type;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r >= c)\n                return this->m(r,c); \n            else\n                return 0;\n        }\n    };\n\n    template <typename M>\n    struct op_lowerm_s : basic_op_m<M>\n    {\n        typedef typename M::type type;\n        op_lowerm_s( const M& m_, const type& s_) : basic_op_m<M>(m_), s(s_){}\n\n        const type s;\n\n        const static long cost = M::cost+2;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r > c)\n                return this->m(r,c); \n            else if (r==c)\n                return s;\n            else\n                return 0;\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_lowerm<EXP> > lowerm (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_lowerm<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_lowerm_s<EXP> > lowerm (\n        const matrix_exp<EXP>& m,\n        typename EXP::type s\n        )\n    {\n        typedef op_lowerm_s<EXP> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_upperm : basic_op_m<M>\n    {\n        op_upperm( const M& m_) : basic_op_m<M>(m_){}\n\n        const static long cost = M::cost+2;\n        typedef typename M::type type;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r <= c)\n                return this->m(r,c); \n            else\n                return 0;\n        }\n    };\n\n    template <typename M>\n    struct op_upperm_s : basic_op_m<M>\n    {\n        typedef typename M::type type;\n        op_upperm_s( const M& m_, const type& s_) : basic_op_m<M>(m_), s(s_){}\n\n        const type s;\n\n        const static long cost = M::cost+2;\n        typedef const typename M::type const_ret_type;\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r < c)\n                return this->m(r,c); \n            else if (r==c)\n                return s;\n            else\n                return 0;\n        }\n    };\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_upperm<EXP> > upperm (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_upperm<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_upperm_s<EXP> > upperm (\n        const matrix_exp<EXP>& m,\n        typename EXP::type s\n        )\n    {\n        typedef op_upperm_s<EXP> op;\n        return matrix_op<op>(op(m.ref(),s));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename rand_gen>\n    inline const matrix<double> randm( \n        long nr,\n        long nc,\n        rand_gen& rnd\n    )\n    {\n        DLIB_ASSERT(nr >= 0 && nc >= 0, \n            \"\\tconst matrix randm(nr, nc, rnd)\"\n            << \"\\n\\tInvalid inputs to this function\"\n            << \"\\n\\tnr: \" << nr \n            << \"\\n\\tnc: \" << nc \n            );\n\n        matrix<double> m(nr,nc);\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                m(r,c) = rnd.get_random_double();\n            }\n        }\n\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const matrix<double> randm( \n        long nr,\n        long nc\n    )\n    {\n        DLIB_ASSERT(nr >= 0 && nc >= 0, \n            \"\\tconst matrix randm(nr, nc)\"\n            << \"\\n\\tInvalid inputs to this function\"\n            << \"\\n\\tnr: \" << nr \n            << \"\\n\\tnc: \" << nc \n            );\n\n        matrix<double> m(nr,nc);\n        // make a double that contains RAND_MAX + the smallest number that still\n        // makes the resulting double slightly bigger than static_cast<double>(RAND_MAX)\n        double max_val = RAND_MAX;\n        max_val += std::numeric_limits<double>::epsilon()*RAND_MAX;\n\n        for (long r = 0; r < m.nr(); ++r)\n        {\n            for (long c = 0; c < m.nc(); ++c)\n            {\n                m(r,c) = std::rand()/max_val;\n            }\n        }\n\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const matrix_range_exp<double> linspace (\n        double start,\n        double end,\n        long num\n    ) \n    { \n        DLIB_ASSERT(num >= 0, \n            \"\\tconst matrix_exp linspace(start, end, num)\"\n            << \"\\n\\tInvalid inputs to this function\"\n            << \"\\n\\tstart: \" << start \n            << \"\\n\\tend:   \" << end\n            << \"\\n\\tnum:   \" << num \n            );\n\n        return matrix_range_exp<double>(start,end,num,false); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_linpiece  \n    {\n        op_linpiece(const double val_, const M& joints_) : joints(joints_), val(val_){}\n\n        const M& joints;\n        const double val;\n\n        const static long cost = 10; \n\n        const static long NR = (M::NR*M::NC==0) ? (0) : (M::NR*M::NC-1); \n        const static long NC = 1; \n        typedef typename M::type type;\n        typedef default_memory_manager mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        typedef type const_ret_type;\n        const_ret_type apply (long i, long ) const \n        { \n            if (joints(i) < val)\n                return std::min<type>(val,joints(i+1)) - joints(i);\n            else\n                return 0;\n        }\n\n        long nr () const { return joints.size()-1; }\n        long nc () const { return 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return joints.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return joints.aliases(item); }\n    }; \n\n    template < typename EXP >\n    const matrix_op<op_linpiece<EXP> > linpiece (\n        const double val,\n        const matrix_exp<EXP>& joints\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(joints) && joints.size() >= 2, \n            \"\\t matrix_exp linpiece()\"\n            << \"\\n\\t Invalid inputs were given to this function \"\n            << \"\\n\\t is_vector(joints): \" << is_vector(joints) \n            << \"\\n\\t joints.size():     \" << joints.size() \n            );\n#ifdef ENABLE_ASSERTS\n        for (long i = 1; i < joints.size(); ++i)\n        {\n            DLIB_ASSERT(joints(i-1) < joints(i), \n                \"\\t matrix_exp linpiece()\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t joints(\"<<i-1<<\"): \" << joints(i-1) \n                << \"\\n\\t joints(\"<<i<<\"): \" << joints(i) \n            );\n        }\n#endif\n        \n        typedef op_linpiece<EXP> op;\n        return matrix_op<op>(op(val,joints.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    inline const matrix_log_range_exp<double> logspace (\n        double start,\n        double end,\n        long num\n    ) \n    { \n        DLIB_ASSERT(num >= 0, \n            \"\\tconst matrix_exp logspace(start, end, num)\"\n            << \"\\n\\tInvalid inputs to this function\"\n            << \"\\n\\tstart: \" << start \n            << \"\\n\\tend:   \" << end\n            << \"\\n\\tnum:   \" << num \n            );\n\n        return matrix_log_range_exp<double>(start,end,num); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_cart_prod  \n    {\n        op_cart_prod(const M1& m1_, const M2& m2_) : m1(m1_),m2(m2_) {}\n        const M1& m1;\n        const M2& m2;\n\n        const static long cost = M1::cost+M2::cost+1;\n        typedef typename M1::type type;\n        typedef const typename M1::const_ret_type const_ret_type;\n\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n        const static long NR = M1::NR+M2::NR;\n        const static long NC = M1::NC*M2::NC;\n\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r < m1.nr())\n                return m1(r, c/m2.nc());\n            else\n                return m2(r-m1.nr(), c%m2.nc());\n        }\n\n        long nr () const { return m1.nr() + m2.nr(); }\n        long nc () const { return m1.nc() * m2.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    const matrix_op<op_cart_prod<EXP1,EXP2> > cartesian_product (\n        const matrix_exp<EXP1>& a,\n        const matrix_exp<EXP2>& b \n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n\n        typedef op_cart_prod<EXP1,EXP2> op;\n        return matrix_op<op>(op(a.ref(),b.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_mat_to_vect \n    {\n        op_mat_to_vect(const M& m_) : m(m_) {}\n        const M& m;\n\n        const static long cost = M::cost+2;\n        const static long NR = M::NC*M::NR;\n        const static long NC = 1;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n\n        const_ret_type apply ( long r, long ) const { return m(r/m.nc(), r%m.nc()); }\n\n        long nr () const { return m.size(); }\n        long nc () const { return 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    }; \n\n    template <\n        typename EXP\n        >\n    const matrix_op<op_mat_to_vect<EXP> > reshape_to_column_vector (\n        const matrix_exp<EXP>& m\n    )\n    {\n        typedef op_mat_to_vect<EXP> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long NR_,\n        long NC_,\n        typename MM\n        >\n    struct op_mat_to_vect2\n    {\n        typedef matrix<T,NR_,NC_,MM,row_major_layout> M;\n        op_mat_to_vect2(const M& m_) : m(m_) {}\n        const M& m;\n\n        const static long cost = M::cost+2;\n        const static long NR = M::NC*M::NR;\n        const static long NC = 1;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n\n        const_ret_type apply ( long r, long ) const { return (&m(0,0))[r]; }\n\n        long nr () const { return m.size(); }\n        long nc () const { return 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    }; \n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM\n        >\n    const matrix_op<op_mat_to_vect2<T,NR,NC,MM> > reshape_to_column_vector (\n        const matrix<T,NR,NC,MM,row_major_layout>& m\n    )\n    {\n        typedef op_mat_to_vect2<T,NR,NC,MM> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_join_rows \n    {\n        op_join_rows(const M1& m1_, const M2& m2_) : m1(m1_),m2(m2_) {}\n        const M1& m1;\n        const M2& m2;\n\n        template <typename T, typename U, bool selection>\n        struct type_selector;\n        template <typename T, typename U>\n        struct type_selector<T,U,true> { typedef T type; };\n        template <typename T, typename U>\n        struct type_selector<T,U,false> { typedef U type; };\n\n        // If both const_ret_types are references then we should use them as the const_ret_type type\n        // but otherwise we should use the normal type.  \n        typedef typename M1::const_ret_type T1;\n        typedef typename M1::type T2;\n        typedef typename M2::const_ret_type T3;\n        typedef typename type_selector<T1, T2, is_reference_type<T1>::value && is_reference_type<T3>::value>::type const_ret_type;\n\n        const static long cost = M1::cost + M2::cost + 1;\n        const static long NR = tmax<M1::NR, M2::NR>::value;\n        const static long NC = (M1::NC*M2::NC != 0)? (M1::NC+M2::NC) : (0);\n        typedef typename M1::type type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n\n        const_ret_type apply (long r, long c) const\n        { \n            if (c < m1.nc())\n                return m1(r,c);\n            else\n                return m2(r,c-m1.nc());\n        }\n\n        long nr () const { return m1.nr(); }\n        long nc () const { return m1.nc()+m2.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    inline const matrix_op<op_join_rows<EXP1,EXP2> > join_rows (\n        const matrix_exp<EXP1>& a,\n        const matrix_exp<EXP2>& b \n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n        // You are getting an error on this line because you are trying to join two matrices that\n        // don't have the same number of rows\n        COMPILE_TIME_ASSERT(EXP1::NR == EXP2::NR || (EXP1::NR*EXP2::NR == 0));\n\n        DLIB_ASSERT(a.nr() == b.nr() || a.size() == 0 || b.size() == 0,\n            \"\\tconst matrix_exp join_rows(const matrix_exp& a, const matrix_exp& b)\"\n            << \"\\n\\tYou can only use join_rows() if both matrices have the same number of rows\"\n            << \"\\n\\ta.nr(): \" << a.nr()\n            << \"\\n\\tb.nr(): \" << b.nr()\n            << \"\\n\\ta.nc(): \" << a.nc()\n            << \"\\n\\tb.nc(): \" << b.nc()\n            );\n\n        typedef op_join_rows<EXP1,EXP2> op;\n        return matrix_op<op>(op(a.ref(),b.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2>\n    struct op_join_cols \n    {\n        op_join_cols(const M1& m1_, const M2& m2_) : m1(m1_),m2(m2_) {}\n        const M1& m1;\n        const M2& m2;\n\n        template <typename T, typename U, bool selection>\n        struct type_selector;\n        template <typename T, typename U>\n        struct type_selector<T,U,true> { typedef T type; };\n        template <typename T, typename U>\n        struct type_selector<T,U,false> { typedef U type; };\n\n        // If both const_ret_types are references then we should use them as the const_ret_type type\n        // but otherwise we should use the normal type.  \n        typedef typename M1::const_ret_type T1;\n        typedef typename M1::type T2;\n        typedef typename M2::const_ret_type T3;\n        typedef typename type_selector<T1, T2, is_reference_type<T1>::value && is_reference_type<T3>::value>::type const_ret_type;\n\n\n\n        const static long cost = M1::cost + M2::cost + 1;\n        const static long NC = tmax<M1::NC, M2::NC>::value;\n        const static long NR = (M1::NR*M2::NR != 0)? (M1::NR+M2::NR) : (0);\n        typedef typename M1::type type;\n        typedef typename M1::mem_manager_type mem_manager_type;\n        typedef typename M1::layout_type layout_type;\n\n        const_ret_type apply ( long r, long c) const\n        { \n            if (r < m1.nr())\n                return m1(r,c);\n            else\n                return m2(r-m1.nr(),c);\n        }\n\n        long nr () const { return m1.nr()+m2.nr(); }\n        long nc () const { return m1.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n        { return m1.aliases(item) || m2.aliases(item); }\n    };\n\n    template <\n        typename EXP1,\n        typename EXP2\n        >\n    inline const matrix_op<op_join_cols<EXP1,EXP2> > join_cols (\n        const matrix_exp<EXP1>& a,\n        const matrix_exp<EXP2>& b \n    )\n    {\n        COMPILE_TIME_ASSERT((is_same_type<typename EXP1::type,typename EXP2::type>::value == true));\n        // You are getting an error on this line because you are trying to join two matrices that\n        // don't have the same number of columns \n        COMPILE_TIME_ASSERT(EXP1::NC == EXP2::NC || (EXP1::NC*EXP2::NC == 0));\n\n        DLIB_ASSERT(a.nc() == b.nc() || a.size() == 0 || b.size() == 0,\n            \"\\tconst matrix_exp join_cols(const matrix_exp& a, const matrix_exp& b)\"\n            << \"\\n\\tYou can only use join_cols() if both matrices have the same number of columns\"\n            << \"\\n\\ta.nr(): \" << a.nr()\n            << \"\\n\\tb.nr(): \" << b.nr()\n            << \"\\n\\ta.nc(): \" << a.nc()\n            << \"\\n\\tb.nc(): \" << b.nc()\n            );\n\n        typedef op_join_cols<EXP1,EXP2> op;\n        return matrix_op<op>(op(a.ref(),b.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_fliplr \n    {\n        op_fliplr( const M& m_) : m(m_){}\n\n        const M& m;\n\n        const static long cost = M::cost;\n        const static long NR = M::NR;\n        const static long NC = M::NC;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n\n        const_ret_type apply (long r, long c) const { return m(r,m.nc()-c-1); }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n\n    }; \n\n    template <\n        typename M\n        >\n    const matrix_op<op_fliplr<M> > fliplr (\n        const matrix_exp<M>& m\n    )\n    {\n        typedef op_fliplr<M> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_flipud \n    {\n        op_flipud( const M& m_) : m(m_){}\n\n        const M& m;\n\n        const static long cost = M::cost;\n        const static long NR = M::NR;\n        const static long NC = M::NC;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n\n        const_ret_type apply (long r, long c) const { return m(m.nr()-r-1,c); }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n\n    }; \n\n    template <\n        typename M\n        >\n    const matrix_op<op_flipud<M> > flipud (\n        const matrix_exp<M>& m\n    )\n    {\n        typedef op_flipud<M> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M>\n    struct op_flip \n    {\n        op_flip( const M& m_) : m(m_){}\n\n        const M& m;\n\n        const static long cost = M::cost;\n        const static long NR = M::NR;\n        const static long NC = M::NC;\n        typedef typename M::type type;\n        typedef typename M::const_ret_type const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n\n        const_ret_type apply (long r, long c) const { return m(m.nr()-r-1, m.nc()-c-1); }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n\n    }; \n\n    template <\n        typename M\n        >\n    const matrix_op<op_flip<M> > flip (\n        const matrix_exp<M>& m\n    )\n    {\n        typedef op_flip<M> op;\n        return matrix_op<op>(op(m.ref()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename MM, typename L>\n    uint32 hash (\n        const matrix<T,NR,NC,MM,L>& item,\n        uint32 seed = 0\n    )\n    {\n        DLIB_ASSERT_HAS_STANDARD_LAYOUT(T);\n\n        if (item.size() == 0)\n            return 0;\n        else\n            return murmur_hash3(&item(0,0), sizeof(T)*item.size(), seed);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_UTILITIES_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/matrix_utilities_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MATRIx_UTILITIES_ABSTRACT_\n#ifdef DLIB_MATRIx_UTILITIES_ABSTRACT_\n\n#include \"matrix_abstract.h\"\n#include <complex>\n#include \"../pixel.h\"\n#include \"../geometry/rectangle.h\"\n#inclue <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                   Simple matrix utilities \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp diag (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a column vector R that contains the elements from the diagonal \n              of m in the order R(0)==m(0,0), R(1)==m(1,1), R(2)==m(2,2) and so on.\n    !*/\n\n    template <typename EXP>\n    struct diag_exp\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This struct allows you to determine the type of matrix expression \n                object returned from the diag() function.  An example makes its\n                use clear:\n\n                template <typename EXP>\n                void do_something( const matrix_exp<EXP>& mat)\n                {\n                    // d is a matrix expression that aliases mat.\n                    typename diag_exp<EXP>::type d = diag(mat);\n\n                    // Print the diagonal of mat.  So we see that by using\n                    // diag_exp we can save the object returned by diag() in\n                    // a local variable.    \n                    cout << d << endl;\n\n                    // Note that you can only save the return value of diag() to\n                    // a local variable if the argument to diag() has a lifetime\n                    // beyond the diag() expression.  The example shown above is\n                    // OK but the following would result in undefined behavior:\n                    typename diag_exp<EXP>::type bad = diag(mat + mat);\n                }\n        !*/\n        typedef type_of_expression_returned_by_diag type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp diagm (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_vector(m) == true\n              (i.e. m is a row or column matrix)\n        ensures\n            - returns a square matrix M such that:\n                - diag(M) == m\n                - non diagonal elements of M are 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp trans (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns the transpose of the matrix m\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_type::type dot (\n        const matrix_exp& m1,\n        const matrix_exp& m2\n    );\n    /*!\n        requires\n            - is_vector(m1) == true\n            - is_vector(m2) == true\n            - m1.size() == m2.size()\n            - m1.size() > 0\n        ensures\n            - returns the dot product between m1 and m2. That is, this function \n              computes and returns the sum, for all i, of m1(i)*m2(i).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp lowerm (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix M such that:\n                - M::type == the same type that was in m\n                - M has the same dimensions as m\n                - M is the lower triangular part of m.  That is:\n                    - if (r >= c) then\n                        - M(r,c) == m(r,c)\n                    - else\n                        - M(r,c) == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp lowerm (\n        const matrix_exp& m,\n        const matrix_exp::type scalar_value\n    );\n    /*!\n        ensures\n            - returns a matrix M such that:\n                - M::type == the same type that was in m\n                - M has the same dimensions as m\n                - M is the lower triangular part of m except that the diagonal has\n                  been set to scalar_value.  That is:\n                    - if (r > c) then\n                        - M(r,c) == m(r,c)\n                    - else if (r == c) then\n                        - M(r,c) == scalar_value \n                    - else\n                        - M(r,c) == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp upperm (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix M such that:\n                - M::type == the same type that was in m\n                - M has the same dimensions as m\n                - M is the upper triangular part of m.  That is:\n                    - if (r <= c) then\n                        - M(r,c) == m(r,c)\n                    - else\n                        - M(r,c) == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp upperm (\n        const matrix_exp& m,\n        const matrix_exp::type scalar_value\n    );\n    /*!\n        ensures\n            - returns a matrix M such that:\n                - M::type == the same type that was in m\n                - M has the same dimensions as m\n                - M is the upper triangular part of m except that the diagonal has\n                  been set to scalar_value.  That is:\n                    - if (r < c) then\n                        - M(r,c) == m(r,c)\n                    - else if (r == c) then\n                        - M(r,c) == scalar_value \n                    - else\n                        - M(r,c) == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp make_symmetric (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m.nr() == m.nc()\n              (i.e. m must be a square matrix)\n        ensures\n            - returns a matrix M such that:\n                - M::type == the same type that was in m\n                - M has the same dimensions as m\n                - M is a symmetric matrix, that is, M == trans(M) and\n                  it is constructed from the lower triangular part of m.  Specifically,\n                  we have:\n                    - lowerm(M) == lowerm(m)\n                    - upperm(M) == trans(lowerm(m))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        long NR, \n        long NC, \n        T val\n        >\n    const matrix_exp uniform_matrix (\n    );\n    /*!\n        requires\n            - NR > 0 && NC > 0\n        ensures\n            - returns an NR by NC matrix with elements of type T and all set to val.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long NR, \n        long NC\n        >\n    const matrix_exp uniform_matrix (\n        const T& val\n    );\n    /*!\n        requires\n            - NR > 0 && NC > 0\n        ensures\n            - returns an NR by NC matrix with elements of type T and all set to val.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp uniform_matrix (\n        long nr,\n        long nc,\n        const T& val\n    );\n    /*!\n        requires\n            - nr >= 0 && nc >= 0\n        ensures\n            - returns an nr by nc matrix with elements of type T and all set to val.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp ones_matrix (\n        const matrix_exp& mat\n    );\n    /*!\n        requires\n            - mat.nr() >= 0 && mat.nc() >= 0\n        ensures\n            - Let T denote the type of element in mat. Then this function\n              returns uniform_matrix<T>(mat.nr(), mat.nc(), 1)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp ones_matrix (\n        long nr,\n        long nc\n    );\n    /*!\n        requires\n            - nr >= 0 && nc >= 0\n        ensures\n            - returns uniform_matrix<T>(nr, nc, 1)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp zeros_matrix (\n        const matrix_exp& mat\n    );\n    /*!\n        requires\n            - mat.nr() >= 0 && mat.nc() >= 0\n        ensures\n            - Let T denote the type of element in mat. Then this function\n              returns uniform_matrix<T>(mat.nr(), mat.nc(), 0)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp zeros_matrix (\n        long nr,\n        long nc\n    );\n    /*!\n        requires\n            - nr >= 0 && nc >= 0\n        ensures\n            - returns uniform_matrix<T>(nr, nc, 0)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp identity_matrix (\n        const matrix_exp& mat\n    );\n    /*!\n        requires\n            - mat.nr() == mat.nc()\n        ensures\n            - returns an identity matrix with the same dimensions as mat and\n              containing the same type of elements as mat.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp identity_matrix (\n        long N\n    );\n    /*!\n        requires\n            - N > 0\n        ensures\n            - returns an N by N identity matrix with elements of type T.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        long N\n        >\n    const matrix_exp identity_matrix (\n    );\n    /*!\n        requires\n            - N > 0\n        ensures\n            - returns an N by N identity matrix with elements of type T.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp linspace (\n        double start,\n        double end,\n        long num\n    );\n    /*!\n        requires\n            - num >= 0\n        ensures\n            - returns a matrix M such that:\n                - M::type == double \n                - is_row_vector(M) == true\n                - M.size() == num\n                - M == a row vector with num linearly spaced values beginning with start\n                  and stopping with end.  \n                - M(num-1) == end \n                - if (num > 1) then\n                    - M(0) == start\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp logspace (\n        double start,\n        double end,\n        long num\n    );\n    /*!\n        requires\n            - num >= 0\n        ensures\n            - returns a matrix M such that:\n                - M::type == double \n                - is_row_vector(M) == true\n                - M.size() == num\n                - M == a row vector with num logarithmically spaced values beginning with \n                  10^start and stopping with 10^end.  \n                  (i.e. M == pow(10, linspace(start, end, num)))\n                - M(num-1) == 10^end\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp linpiece (\n        const double val,\n        const matrix_exp& joints\n    );\n    /*!\n        requires\n            - is_vector(joints) == true\n            - joints.size() >= 2\n            - for all valid i < j:\n                - joints(i) < joints(j)\n        ensures\n            - linpiece() is useful for creating piecewise linear functions of val.  For\n              example, if w is a parameter vector then you can represent a piecewise linear\n              function of val as: f(val) = dot(w, linpiece(val, linspace(0,100,5))).  In\n              this case, f(val) is piecewise linear on the intervals [0,25], [25,50],\n              [50,75], [75,100].  Moreover, w(i) defines the derivative of f(val) in the\n              i-th interval.  Finally, outside the interval [0,100] f(val) has a derivative\n              of zero and f(0) == 0.\n            - To be precise, this function returns a column vector L such that:\n                - L.size() == joints.size()-1\n                - is_col_vector(L) == true\n                - L contains the same type of elements as joints.\n                - for all valid i:\n                - if (joints(i) < val)\n                    - L(i) == min(val,joints(i+1)) - joints(i)\n                - else\n                    - L(i) == 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long R,\n        long C\n        >\n    const matrix_exp rotate (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                  R( (r+R)%m.nr() , (c+C)%m.nc() ) == m(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp fliplr (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - flips the matrix m from left to right and returns the result.  \n              I.e. reverses the order of the columns.\n            - returns a matrix M such that:\n                - M::type == the same type that was in m\n                - M has the same dimensions as m\n                - for all valid r and c:\n                  M(r,c) == m(r, m.nc()-c-1)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp flipud (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - flips the matrix m from up to down and returns the result.  \n              I.e. reverses the order of the rows.\n            - returns a matrix M such that:\n                - M::type == the same type that was in m\n                - M has the same dimensions as m\n                - for all valid r and c:\n                  M(r,c) == m(m.nr()-r-1, c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp flip (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - flips the matrix m from up to down and left to right and returns the \n              result.  I.e. returns flipud(fliplr(m)).\n            - returns a matrix M such that:\n                - M::type == the same type that was in m\n                - M has the same dimensions as m\n                - for all valid r and c:\n                  M(r,c) == m(m.nr()-r-1, m.nc()-c-1)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp reshape (\n        const matrix_exp& m,\n        long rows,\n        long cols\n    );\n    /*!\n        requires\n            - m.size() == rows*cols\n            - rows > 0\n            - cols > 0\n        ensures\n            - returns a matrix M such that: \n                - M.nr() == rows\n                - M.nc() == cols\n                - M.size() == m.size()\n                - for all valid r and c:\n                    - let IDX = r*cols + c\n                    - M(r,c) == m(IDX/m.nc(), IDX%m.nc())\n\n            - i.e. The matrix m is reshaped into a new matrix of rows by cols\n              dimension.  Additionally, the elements of m are laid into M in row major \n              order.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp reshape_to_column_vector (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix M such that: \n                - is_col_vector(M) == true\n                - M.size() == m.size()\n                - for all valid r and c:\n                    - m(r,c) == M(r*m.nc() + c)\n\n            - i.e. The matrix m is reshaped into a column vector.  Note that\n              the elements are pulled out in row major order.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long R,\n        long C\n        >\n    const matrix_exp removerc (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m.nr() > R >= 0\n            - m.nc() > C >= 0\n        ensures\n            - returns a matrix M such that:\n                - M.nr() == m.nr() - 1\n                - M.nc() == m.nc() - 1\n                - M == m with its R row and C column removed\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp removerc (\n        const matrix_exp& m,\n        long R,\n        long C\n    );\n    /*!\n        requires\n            - m.nr() > R >= 0\n            - m.nc() > C >= 0\n        ensures\n            - returns a matrix M such that:\n                - M.nr() == m.nr() - 1\n                - M.nc() == m.nc() - 1\n                - M == m with its R row and C column removed\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long R\n        >\n    const matrix_exp remove_row (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m.nr() > R >= 0\n        ensures\n            - returns a matrix M such that:\n                - M.nr() == m.nr() - 1\n                - M.nc() == m.nc() \n                - M == m with its R row removed\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp remove_row (\n        const matrix_exp& m,\n        long R\n    );\n    /*!\n        requires\n            - m.nr() > R >= 0\n        ensures\n            - returns a matrix M such that:\n                - M.nr() == m.nr() - 1\n                - M.nc() == m.nc() \n                - M == m with its R row removed\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long C\n        >\n    const matrix_exp remove_col (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m.nc() > C >= 0\n        ensures\n            - returns a matrix M such that:\n                - M.nr() == m.nr() \n                - M.nc() == m.nc() - 1 \n                - M == m with its C column removed\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp remove_col (\n        const matrix_exp& m,\n        long C\n    );\n    /*!\n        requires\n            - m.nc() > C >= 0\n        ensures\n            - returns a matrix M such that:\n                - M.nr() == m.nr() \n                - M.nc() == m.nc() - 1 \n                - M == m with its C column removed\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n       typename target_type\n       >\n    const matrix_exp matrix_cast (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R where for all valid r and c:\n              R(r,c) == static_cast<target_type>(m(r,c))\n              also, R has the same dimensions as m.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        long NR,\n        long NC,\n        typename MM,\n        typename U,\n        typename L\n        >\n    void set_all_elements (\n        matrix<T,NR,NC,MM,L>& m,\n        U value\n    );\n    /*!\n        ensures\n            - for all valid r and c:\n              m(r,c) == value\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::matrix_type tmp (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a temporary matrix object that is a copy of m. \n              (This allows you to easily force a matrix_exp to fully evaluate)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        long NR, \n        long NC, \n        typename MM, \n        typename L\n        >\n    uint32 hash (\n        const matrix<T,NR,NC,MM,L>& item,\n        uint32 seed = 0\n    );\n    /*!\n        requires\n            - T is a standard layout type (e.g. a POD type like int, float, \n              or a simple struct).\n        ensures\n            - returns a 32bit hash of the data stored in item.  \n            - Each value of seed results in a different hash function being used.  \n              (e.g. hash(item,0) should generally not be equal to hash(item,1))\n            - uses the murmur_hash3() routine to compute the actual hash.\n            - Note that if the memory layout of the elements in item change between\n              hardware platforms then hash() will give different outputs.  If you want\n              hash() to always give the same output for the same input then you must \n              ensure that elements of item always have the same layout in memory.\n              Typically this means using fixed width types and performing byte swapping\n              to account for endianness before passing item to hash().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    // if matrix_exp contains non-complex types (e.g. float, double)\n    bool equal (\n        const matrix_exp& a,\n        const matrix_exp& b,\n        const matrix_exp::type epsilon = 100*std::numeric_limits<matrix_exp::type>::epsilon()\n    );\n    /*!\n        ensures\n            - if (a and b don't have the same dimensions) then\n                - returns false\n            - else if (there exists an r and c such that abs(a(r,c)-b(r,c)) > epsilon) then\n                - returns false\n            - else\n                - returns true\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    // if matrix_exp contains std::complex types \n    bool equal (\n        const matrix_exp& a,\n        const matrix_exp& b,\n        const matrix_exp::type::value_type epsilon = 100*std::numeric_limits<matrix_exp::type::value_type>::epsilon()\n    );\n    /*!\n        ensures\n            - if (a and b don't have the same dimensions) then\n                - returns false\n            - else if (there exists an r and c such that abs(real(a(r,c)-b(r,c))) > epsilon \n              or abs(imag(a(r,c)-b(r,c))) > epsilon) then\n                - returns false\n            - else\n                - returns true\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp pointwise_multiply (\n        const matrix_exp& a,\n        const matrix_exp& b \n    );\n    /*!\n        requires\n            - a.nr() == b.nr()\n            - a.nc() == b.nc()\n            - a and b both contain the same type of element (one or both\n              can also be of type std::complex so long as the underlying type\n              in them is the same)\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in a and b.\n                - R has the same dimensions as a and b. \n                - for all valid r and c:\n                  R(r,c) == a(r,c) * b(r,c)\n    !*/\n\n    const matrix_exp pointwise_multiply (\n        const matrix_exp& a,\n        const matrix_exp& b,\n        const matrix_exp& c \n    );\n    /*!\n        performs pointwise_multiply(a,pointwise_multiply(b,c));\n    !*/\n\n    const matrix_exp pointwise_multiply (\n        const matrix_exp& a,\n        const matrix_exp& b,\n        const matrix_exp& c,\n        const matrix_exp& d \n    );\n    /*!\n        performs pointwise_multiply(pointwise_multiply(a,b),pointwise_multiply(c,d));\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp join_rows (\n        const matrix_exp& a,\n        const matrix_exp& b \n    );\n    /*!\n        requires\n            - a.nr() == b.nr() || a.size() == 0 || b.size() == 0\n            - a and b both contain the same type of element\n        ensures\n            - This function joins two matrices together by concatenating their rows.\n            - returns a matrix R such that:\n                - R::type == the same type that was in a and b.\n                - R.nr() == a.nr() == b.nr()\n                - R.nc() == a.nc() + b.nc()\n                - for all valid r and c:\n                    - if (c < a.nc()) then\n                        - R(r,c) == a(r,c) \n                    - else\n                        - R(r,c) == b(r, c-a.nc()) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp join_cols (\n        const matrix_exp& a,\n        const matrix_exp& b \n    );\n    /*!\n        requires\n            - a.nc() == b.nc() || a.size() == 0 || b.size() == 0\n            - a and b both contain the same type of element\n        ensures\n            - This function joins two matrices together by concatenating their columns.\n            - returns a matrix R such that:\n                - R::type == the same type that was in a and b.\n                - R.nr() == a.nr() + b.nr()\n                - R.nc() == a.nc() == b.nc()\n                - for all valid r and c:\n                    - if (r < a.nr()) then\n                        - R(r,c) == a(r,c) \n                    - else\n                        - R(r,c) == b(r-a.nr(), c) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp tensor_product (\n        const matrix_exp& a,\n        const matrix_exp& b \n    );\n    /*!\n        requires\n            - a and b both contain the same type of element\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in a and b.\n                - R.nr() == a.nr() * b.nr()  \n                - R.nc() == a.nc() * b.nc()  \n                - for all valid r and c:\n                  R(r,c) == a(r/b.nr(), c/b.nc()) * b(r%b.nr(), c%b.nc())\n                - I.e. R is the tensor product of matrix a with matrix b\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp cartesian_product (\n        const matrix_exp& A,\n        const matrix_exp& B \n    );\n    /*!\n        requires\n            - A and B both contain the same type of element\n        ensures\n            - Think of A and B as sets of column vectors.  Then this function \n              returns a matrix that contains a set of column vectors that is\n              the Cartesian product of the sets A and B.  That is, the resulting\n              matrix contains every possible combination of vectors from both A and\n              B.\n            - returns a matrix R such that:\n                - R::type == the same type that was in A and B.\n                - R.nr() == A.nr() + B.nr()  \n                - R.nc() == A.nc() * B.nc()  \n                - Each column of R is the concatenation of a column vector\n                  from A with a column vector from B.  \n                - for all valid r and c:\n                    - if (r < A.nr()) then\n                        - R(r,c) == A(r, c/B.nc())\n                    - else\n                        - R(r,c) == B(r-A.nr(), c%B.nc())\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp scale_columns (\n        const matrix_exp& m,\n        const matrix_exp& v\n    );\n    /*!\n        requires\n            - is_vector(v) == true\n            - v.size() == m.nc()\n            - m and v both contain the same type of element\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m and v.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                  R(r,c) == m(r,c) * v(c)\n                - i.e. R is the result of multiplying each of m's columns by\n                  the corresponding scalar in v.\n\n            - Note that this function is identical to the expression m*diagm(v).  \n              That is, the * operator is overloaded for this case and will invoke\n              scale_columns() automatically as appropriate.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp scale_rows (\n        const matrix_exp& m,\n        const matrix_exp& v\n    );\n    /*!\n        requires\n            - is_vector(v) == true\n            - v.size() == m.nr()\n            - m and v both contain the same type of element\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m and v.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                  R(r,c) == m(r,c) * v(r)\n                - i.e. R is the result of multiplying each of m's rows by\n                  the corresponding scalar in v.\n\n            - Note that this function is identical to the expression diagm(v)*m.  \n              That is, the * operator is overloaded for this case and will invoke\n              scale_rows() automatically as appropriate.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void sort_columns (\n        matrix<T>& m,\n        matrix<T>& v\n    );\n    /*!\n        requires\n            - is_col_vector(v) == true\n            - v.size() == m.nc()\n            - m and v both contain the same type of element\n        ensures\n            - the dimensions for m and v are not changed\n            - sorts the columns of m according to the values in v.\n              i.e. \n                - #v == the contents of v but in sorted order according to\n                  operator<.  So smaller elements come first.\n                - Let #v(new(i)) == v(i) (i.e. new(i) is the index element i moved to)\n                - colm(#m,new(i)) == colm(m,i) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void rsort_columns (\n        matrix<T>& m,\n        matrix<T>& v\n    );\n    /*!\n        requires\n            - is_col_vector(v) == true\n            - v.size() == m.nc()\n            - m and v both contain the same type of element\n        ensures\n            - the dimensions for m and v are not changed\n            - sorts the columns of m according to the values in v.\n              i.e. \n                - #v == the contents of v but in sorted order according to\n                  operator>.  So larger elements come first.\n                - Let #v(new(i)) == v(i) (i.e. new(i) is the index element i moved to)\n                - colm(#m,new(i)) == colm(m,i) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type length_squared (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_vector(m) == true\n        ensures\n            - returns sum(squared(m))\n              (i.e. returns the square of the length of the vector m)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type length (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_vector(m) == true\n        ensures\n            - returns sqrt(sum(squared(m)))\n              (i.e. returns the length of the vector m)\n            - if (m contains integer valued elements) then  \n                - The return type is a double that represents the length.  Therefore, the\n                  return value of length() is always represented using a floating point\n                  type. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    bool is_row_vector (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - if (m.nr() == 1) then\n                - return true\n            - else\n                - returns false\n    !*/\n\n    bool is_col_vector (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - if (m.nc() == 1) then\n                - return true\n            - else\n                - returns false\n    !*/\n\n    bool is_vector (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - if (is_row_vector(m) || is_col_vector(m)) then\n                - return true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    bool is_finite (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns true if all the values in m are finite values and also not any kind\n              of NaN value.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                      Thresholding relational operators \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator< (\n        const matrix_exp& m,\n        const S& s\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (m(r,c) < s) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator< (\n        const S& s,\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (s < m(r,c)) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator<= (\n        const matrix_exp& m,\n        const S& s\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (m(r,c) <= s) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator<= (\n        const S& s,\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (s <= m(r,c)) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator> (\n        const matrix_exp& m,\n        const S& s\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (m(r,c) > s) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator> (\n        const S& s,\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (s > m(r,c)) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator>= (\n        const matrix_exp& m,\n        const S& s\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (m(r,c) >= s) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator>= (\n        const S& s,\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (s >= m(r,c)) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator== (\n        const matrix_exp& m,\n        const S& s\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (m(r,c) == s) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator== (\n        const S& s,\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (s == m(r,c)) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator!= (\n        const matrix_exp& m,\n        const S& s\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (m(r,c) != s) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename S>\n    const matrix_exp operator!= (\n        const S& s,\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_built_in_scalar_type<S>::value == true \n            - is_built_in_scalar_type<matrix_exp::type>::value == true\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m.\n                - R has the same dimensions as m. \n                - for all valid r and c:\n                    - if (s != m(r,c)) then\n                        - R(r,c) == 1\n                    - else\n                        - R(r,c) == 0\n                - i.e. R is a binary matrix of all 1s or 0s.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                              Statistics\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type min (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m.size() > 0\n        ensures\n            - returns the value of the smallest element of m.  If m contains complex\n              elements then the element returned is the one with the smallest norm\n              according to std::norm().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type max (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m.size() > 0\n        ensures\n            - returns the value of the biggest element of m.  If m contains complex\n              elements then the element returned is the one with the largest norm\n              according to std::norm().\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void find_min_and_max (\n        const matrix_exp& m,\n        matrix_exp::type& min_val,\n        matrix_exp::type& max_val\n    );\n    /*!\n        requires\n            - m.size() > 0\n        ensures\n            - #min_val == min(m)\n            - #max_val == max(m)\n            - This function computes both the min and max in just one pass\n              over the elements of the matrix m.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    long index_of_max (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_vector(m) == true\n            - m.size() > 0 \n        ensures\n            - returns the index of the largest element in m.  \n              (i.e. m(index_of_max(m)) == max(m))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    long index_of_min (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - is_vector(m) == true\n            - m.size() > 0 \n        ensures\n            - returns the index of the smallest element in m.  \n              (i.e. m(index_of_min(m)) == min(m))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type sum (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns the sum of all elements in m\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp sum_rows (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m.size() > 0\n        ensures\n            - returns a row matrix that contains the sum of all the rows in m. \n            - returns a matrix M such that\n                - M::type == the same type that was in m\n                - M.nr() == 1\n                - M.nc() == m.nc()\n                - for all valid i:\n                    - M(i) == sum(colm(m,i)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp sum_cols (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - m.size() > 0\n        ensures\n            - returns a column matrix that contains the sum of all the columns in m. \n            - returns a matrix M such that\n                - M::type == the same type that was in m\n                - M.nr() == m.nr() \n                - M.nc() == 1\n                - for all valid i:\n                    - M(i) == sum(rowm(m,i)) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type prod (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns the results of multiplying all elements of m together. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type mean (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns the mean of all elements in m. \n              (i.e. returns sum(m)/(m.nr()*m.nc()))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type variance (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns the unbiased sample variance of all elements in m \n              (i.e. 1.0/(m.nr()*m.nc() - 1)*(sum of all pow(m(i,j) - mean(m),2)))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp::type stddev (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns sqrt(variance(m))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix covariance (\n        const matrix_exp& m\n    );\n    /*!\n        requires\n            - matrix_exp::type == a dlib::matrix object\n            - is_col_vector(m) == true\n            - m.size() > 1\n            - for all valid i, j:\n                - is_col_vector(m(i)) == true \n                - m(i).size() > 0\n                - m(i).size() == m(j).size() \n                - i.e. m contains only column vectors and all the column vectors\n                  have the same non-zero length\n        ensures\n            - returns the unbiased sample covariance matrix for the set of samples\n              in m.  \n              (i.e. 1.0/(m.nr()-1)*(sum of all (m(i) - mean(m))*trans(m(i) - mean(m))))\n            - the returned matrix will contain elements of type matrix_exp::type::type.\n            - the returned matrix will have m(0).nr() rows and columns.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename rand_gen>\n    const matrix<double> randm( \n        long nr,\n        long nc,\n        rand_gen& rnd\n    );\n    /*!\n        requires\n            - nr >= 0\n            - nc >= 0\n            - rand_gen == an object that implements the rand/rand_float_abstract.h interface\n        ensures\n            - generates a random matrix using the given rnd random number generator\n            - returns a matrix M such that\n                - M::type == double\n                - M.nr() == nr\n                - M.nc() == nc\n                - for all valid i, j:\n                    - M(i,j) == a random number such that 0 <= M(i,j) < 1\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline const matrix<double> randm( \n        long nr,\n        long nc\n    );\n    /*!\n        requires\n            - nr >= 0\n            - nc >= 0\n        ensures\n            - generates a random matrix using std::rand() \n            - returns a matrix M such that\n                - M::type == double\n                - M.nr() == nr\n                - M.nc() == nc\n                - for all valid i, j:\n                    - M(i,j) == a random number such that 0 <= M(i,j) < 1\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline const matrix_exp gaussian_randm (\n        long nr,\n        long nc,\n        unsigned long seed = 0\n    );\n    /*!\n        requires\n            - nr >= 0\n            - nc >= 0\n        ensures\n            - returns a matrix with its values filled with 0 mean unit variance Gaussian\n              random numbers.  \n            - Each setting of the seed results in a different random matrix.\n            - The returned matrix is lazily evaluated using the expression templates\n              technique.  This means that the returned matrix doesn't take up any memory\n              and is only an expression template.  The values themselves are computed on\n              demand using the gaussian_random_hash() routine.  \n            - returns a matrix M such that\n                - M::type == double\n                - M.nr() == nr\n                - M.nc() == nc\n                - for all valid i, j:\n                    - M(i,j) == gaussian_random_hash(i,j,seed) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                 Pixel and Image Utilities\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename P\n        >\n    const matrix_exp pixel_to_vector (\n        const P& pixel\n    );\n    /*!\n        requires\n            - pixel_traits<P> must be defined\n        ensures\n            - returns a matrix M such that:\n                - M::type == T\n                - M::NC == 1 \n                - M::NR == pixel_traits<P>::num\n                - if (pixel_traits<P>::grayscale) then\n                    - M(0) == pixel \n                - if (pixel_traits<P>::rgb) then\n                    - M(0) == pixel.red \n                    - M(1) == pixel.green \n                    - M(2) == pixel.blue \n                - if (pixel_traits<P>::hsi) then\n                    - M(0) == pixel.h \n                    - M(1) == pixel.s \n                    - M(2) == pixel.i \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename P\n        >\n    void vector_to_pixel (\n        P& pixel,\n        const matrix_exp& vector \n    );\n    /*!\n        requires\n            - vector::NR == pixel_traits<P>::num\n            - vector::NC == 1 \n              (i.e. you have to use a statically dimensioned vector)\n        ensures\n            - if (pixel_traits<P>::grayscale) then\n                - pixel == M(0) \n            - if (pixel_traits<P>::rgb) then\n                - pixel.red   == M(0)  \n                - pixel.green == M(1) \n                - pixel.blue  == M(2)  \n            - if (pixel_traits<P>::hsi) then\n                - pixel.h == M(0)\n                - pixel.s == M(1)\n                - pixel.i == M(2)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        long lower,\n        long upper \n        >\n    const matrix_exp clamp (\n        const matrix_exp& m\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                    - if (m(r,c) > upper) then\n                        - R(r,c) == upper\n                    - else if (m(r,c) < lower) then\n                        - R(r,c) == lower\n                    - else\n                        - R(r,c) == m(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp clamp (\n        const matrix_exp& m,\n        const matrix_exp::type& lower,\n        const matrix_exp::type& upper\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                    - if (m(r,c) > upper) then\n                        - R(r,c) == upper\n                    - else if (m(r,c) < lower) then\n                        - R(r,c) == lower\n                    - else\n                        - R(r,c) == m(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp clamp (\n        const matrix_exp& m,\n        const matrix_exp& lower,\n        const matrix_exp& upper\n    );\n    /*!\n        requires\n            - m.nr() == lower.nr()\n            - m.nc() == lower.nc()\n            - m.nr() == upper.nr()\n            - m.nc() == upper.nc()\n            - m, lower, and upper all contain the same type of elements. \n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                    - if (m(r,c) > upper(r,c)) then\n                        - R(r,c) == upper(r,c)\n                    - else if (m(r,c) < lower(r,c)) then\n                        - R(r,c) == lower(r,c)\n                    - else\n                        - R(r,c) == m(r,c)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp lowerbound (\n        const matrix_exp& m,\n        const matrix_exp::type& thresh \n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                    - if (m(r,c) >= thresh) then\n                        - R(r,c) == m(r,c)\n                    - else\n                        - R(r,c) == thresh\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const matrix_exp upperbound (\n        const matrix_exp& m,\n        const matrix_exp::type& thresh \n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R::type == the same type that was in m\n                - R has the same dimensions as m\n                - for all valid r and c:\n                    - if (m(r,c) <= thresh) then\n                        - R(r,c) == m(r,c)\n                    - else\n                        - R(r,c) == thresh\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MATRIx_UTILITIES_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/symmetric_matrix_cache.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SYMMETRIC_MATRIX_CAcHE_Hh_\n#define DLIB_SYMMETRIC_MATRIX_CAcHE_Hh_\n\n#include \"symmetric_matrix_cache_abstract.h\"\n#include <vector>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"../array.h\"\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, typename cache_element_type>\n    struct op_symm_cache : basic_op_m<M>\n    {\n        inline op_symm_cache( \n            const M& m_,\n            long max_size_megabytes_\n        ) : \n            basic_op_m<M>(m_),\n            max_size_megabytes(max_size_megabytes_),\n            is_initialized(false)\n        {\n            lookup.assign(this->m.nr(), -1);\n\n            diag_cache = matrix_cast<cache_element_type>(dlib::diag(m_));\n        }\n\n        op_symm_cache (\n            const op_symm_cache& item\n        ) :\n            basic_op_m<M>(item.m),\n            diag_cache(item.diag_cache),\n            max_size_megabytes(item.max_size_megabytes),\n            is_initialized(false)\n        {\n            lookup.assign(this->m.nr(), -1);\n        }\n\n        typedef cache_element_type type;\n        typedef const cache_element_type& const_ret_type;\n        const static long cost = M::cost + 3;\n\n        inline const_ret_type apply ( long r, long c) const\n        { \n            if (lookup[c] != -1)\n            {\n                return cache[lookup[c]](r);\n            }\n            else if (r == c)\n            {\n                return diag_cache(r);\n            }\n            else if (lookup[r] != -1)\n            {\n                // the matrix is symmetric so this is legit\n                return cache[lookup[r]](c);\n            }\n            else\n            {\n                add_col_to_cache(c);\n                return cache[lookup[c]](r);\n            }\n        }\n\n        inline std::pair<const type*,long*> col(long i) const \n        /*!\n            requires\n                - 0 <= i < nc()\n            ensures\n                - returns a pair P such that:\n                    - P.first == a pointer to the first element of the ith column\n                    - P.second == a pointer to the integer used to count the number of\n                      outstanding references to the ith column.\n        !*/\n        { \n            if (is_cached(i) == false)\n                add_col_to_cache(i);\n\n            // find where this column is in the cache\n            long idx = lookup[i];\n            if (idx == next)\n            {\n                // if this column was the next to be replaced\n                // then make sure that doesn't happen\n                next = (next + 1)%cache.size();\n            }\n\n            return std::make_pair(&cache[idx](0), &references[idx]); \n        }\n\n        const type* diag() const { init(); return &diag_cache(0); }\n\n        long* diag_ref_count() const\n        {\n            return &diag_reference_count;\n        }\n\n    private:\n        inline bool is_cached (\n            long r\n        ) const\n        {\n            return (lookup[r] != -1);\n        }\n\n        inline void init() const\n        {\n            if (is_initialized == false)\n            {\n                // figure out how many columns of the matrix we can have\n                // with the given amount of memory.\n                long max_size = (max_size_megabytes*1024*1024)/(this->m.nr()*sizeof(type));\n                // don't let it be 0 or 1\n                if (max_size <= 1)\n                    max_size = 2;\n\n                const long size = std::min(max_size,this->m.nr());\n\n                diag_reference_count = 0;\n\n                references.set_max_size(this->m.nr());\n                references.set_size(size);\n                for (unsigned long i = 0; i < references.size(); ++i)\n                    references[i] = 0;\n\n                cache.set_max_size(this->m.nr());\n                cache.set_size(size);\n\n                rlookup.assign(size,-1);\n                next = 0;\n\n                is_initialized = true;\n            }\n        }\n\n        void make_sure_next_is_unreferenced (\n        ) const\n        {\n            if (references[next] != 0)\n            {\n                // find an unreferenced element of the cache\n                unsigned long i;\n                for (i = 1; i < references.size(); ++i)\n                {\n                    const unsigned long idx = (next+i)%references.size();\n                    if (references[idx] == 0)\n                    {\n                        next = idx;\n                        break;\n                    }\n                }\n\n                // if all elements of the cache are referenced then make the cache bigger\n                // and use the new element.\n                if (references[next] != 0)\n                {\n                    cache.resize(cache.size()+1);\n\n                    next = references.size();\n                    references.resize(references.size()+1);\n                    references[next] = 0;\n\n                    rlookup.push_back(-1);\n                }\n            }\n        }\n\n        inline void add_col_to_cache(\n            long c\n        ) const\n        {\n            init();\n            make_sure_next_is_unreferenced();\n\n            // if the lookup table is pointing to cache[next] then clear lookup[next]\n            if (rlookup[next] != -1)\n                lookup[rlookup[next]] = -1;\n\n            // make the lookup table so that it says c is now cached at the spot indicated by next\n            lookup[c] = next;\n            rlookup[next] = c;\n\n            // compute this column in the matrix and store it in the cache\n            cache[next] = matrix_cast<cache_element_type>(colm(this->m,c));\n\n            next = (next + 1)%cache.size();\n        }\n\n        /*!\n        INITIAL VALUE\n            - for all valid x:\n                - lookup(x) == -1 \n\n            - diag_cache == the diagonal of the original matrix\n            - is_initialized == false \n            - max_size_megabytes == the max_size_megabytes from symmetric_matrix_cache()\n\n        CONVENTION\n            - diag_cache == the diagonal of the original matrix\n            - lookup.size() == diag_cache.size()\n\n            - if (is_initialized) then\n                - if (lookup[c] != -1) then\n                    - cache[lookup[c]] == the cached column c of the matrix\n                    - rlookup[lookup[c]] == c\n\n                - if (rlookup[x] != -1) then\n                    - lookup[rlookup[x]] == x\n                    - cache[x] == the cached column rlookup[x] of the matrix\n\n                - next == the next element in the cache table to use to cache something \n                - references[i] == the number of outstanding references to cache element cache[i]\n\n                - diag_reference_count == the number of outstanding references to diag_cache. \n                  (this isn't really needed.  It's just here so that we can reuse the matrix\n                  expression from colm() to implement diag())\n        !*/\n\n\n        mutable array<matrix<type,0,1,typename M::mem_manager_type> > cache;\n        mutable array<long> references;\n        matrix<type,0,1,typename M::mem_manager_type> diag_cache;\n        mutable std::vector<long> lookup;\n        mutable std::vector<long> rlookup;\n        mutable long next;\n\n        const long max_size_megabytes;\n        mutable bool is_initialized;\n        mutable long diag_reference_count;\n\n    };\n\n    template <\n        typename cache_element_type,\n        typename EXP\n        >\n    const matrix_op<op_symm_cache<EXP,cache_element_type> >  symmetric_matrix_cache (\n        const matrix_exp<EXP>& m,\n        long max_size_megabytes\n    )\n    {\n        // Don't check that m is symmetric since doing so would be extremely onerous for the\n        // kinds of matrices intended for use with the symmetric_matrix_cache.  Check everything\n        // else though.\n        DLIB_ASSERT(m.size() > 0 && m.nr() == m.nc() && max_size_megabytes >= 0, \n            \"\\tconst matrix_exp symmetric_matrix_cache(const matrix_exp& m, max_size_megabytes)\"\n            << \"\\n\\t You have given invalid arguments to this function\"\n            << \"\\n\\t m.nr():             \" << m.nr()\n            << \"\\n\\t m.nc():             \" << m.nc() \n            << \"\\n\\t m.size():           \" << m.size() \n            << \"\\n\\t max_size_megabytes: \" << max_size_megabytes \n            );\n\n        typedef op_symm_cache<EXP,cache_element_type> op;\n        return matrix_op<op>(op(m.ref(), max_size_megabytes));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, typename cache_element_type>\n    struct op_colm_symm_cache \n    {\n        typedef cache_element_type type;\n\n        op_colm_symm_cache(\n            const M& m_,\n            const type* data_,\n            long* ref_count_ \n        ) : \n            m(m_), \n            data(data_),\n            ref_count(ref_count_)\n        {\n            *ref_count += 1;\n        }\n\n        op_colm_symm_cache (\n            const op_colm_symm_cache& item\n        ) :\n            m(item.m), \n            data(item.data),\n            ref_count(item.ref_count)\n        {\n            *ref_count += 1;\n        }\n\n        ~op_colm_symm_cache(\n        )\n        {\n            *ref_count -= 1;\n        }\n\n        const M& m;\n\n        const type* const data;\n        long* const ref_count;\n\n        const static long cost = M::cost;\n        const static long NR = M::NR;\n        const static long NC = 1;\n        typedef const type& const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        inline const_ret_type apply ( long r, long) const { return data[r]; }\n\n        long nr () const { return m.nr(); }\n        long nc () const { return 1; }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP,\n        typename cache_element_type\n        >\n    inline const matrix_op<op_colm_symm_cache<EXP,cache_element_type> > colm (\n        const matrix_exp<matrix_op<op_symm_cache<EXP,cache_element_type> > >& m,\n        long col \n    )\n    {\n        DLIB_ASSERT(col >= 0 && col < m.nc(), \n            \"\\tconst matrix_exp colm(const matrix_exp& m, row)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\tcol:    \" << col \n            );\n\n        std::pair<const cache_element_type*,long*> p = m.ref().op.col(col);\n\n        typedef op_colm_symm_cache<EXP,cache_element_type> op;\n        return matrix_op<op>(op(m.ref().op.m, \n                                p.first,\n                                p.second));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP,\n        typename cache_element_type\n        >\n    inline const matrix_op<op_colm_symm_cache<EXP,cache_element_type> > diag (\n        const matrix_exp<matrix_op<op_symm_cache<EXP,cache_element_type> > >& m\n    )\n    {\n        typedef op_colm_symm_cache<EXP,cache_element_type> op;\n        return matrix_op<op>(op(m.ref().op.m, \n                                m.ref().op.diag(),\n                                m.ref().op.diag_ref_count()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename M, typename cache_element_type>\n    struct op_rowm_symm_cache \n    {\n        typedef cache_element_type type;\n\n        op_rowm_symm_cache(\n            const M& m_,\n            const type* data_,\n            long* ref_count_ \n        ) : \n            m(m_), \n            data(data_),\n            ref_count(ref_count_)\n        {\n            *ref_count += 1;\n        }\n\n        op_rowm_symm_cache (\n            const op_rowm_symm_cache& item\n        ) :\n            m(item.m), \n            data(item.data),\n            ref_count(item.ref_count)\n        {\n            *ref_count += 1;\n        }\n\n        ~op_rowm_symm_cache(\n        )\n        {\n            *ref_count -= 1;\n        }\n\n        const M& m;\n\n        const type* const data;\n        long* const ref_count;\n\n        const static long cost = M::cost;\n        const static long NR = 1;\n        const static long NC = M::NC;\n        typedef const type& const_ret_type;\n        typedef typename M::mem_manager_type mem_manager_type;\n        typedef typename M::layout_type layout_type;\n        inline const_ret_type apply ( long , long c) const { return data[c]; }\n\n        long nr () const { return 1; }\n        long nc () const { return m.nc(); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item) const { return m.aliases(item); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const { return m.aliases(item); }\n    };\n\n    template <\n        typename EXP,\n        typename cache_element_type\n        >\n    inline const matrix_op<op_rowm_symm_cache<EXP,cache_element_type> > rowm (\n        const matrix_exp<matrix_op<op_symm_cache<EXP,cache_element_type> > >& m,\n        long row \n    )\n    {\n        DLIB_ASSERT(row >= 0 && row < m.nr(), \n            \"\\tconst matrix_exp rowm(const matrix_exp& m, row)\"\n            << \"\\n\\tYou have specified invalid sub matrix dimensions\"\n            << \"\\n\\tm.nr(): \" << m.nr()\n            << \"\\n\\tm.nc(): \" << m.nc() \n            << \"\\n\\trow:    \" << row \n            );\n\n        std::pair<const cache_element_type*,long*> p = m.ref().op.col(row);\n\n        typedef op_rowm_symm_cache<EXP,cache_element_type> op;\n        return matrix_op<op>(op(m.ref().op.m, \n                                p.first,\n                                p.second));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP, typename cache_element_type>\n    struct colm_exp<matrix_op<op_symm_cache<EXP, cache_element_type> > >\n    {\n        typedef matrix_op<op_colm_symm_cache<EXP, cache_element_type> > type;\n    };\n\n    template <typename EXP, typename cache_element_type>\n    struct rowm_exp<matrix_op<op_symm_cache<EXP, cache_element_type> > >\n    {\n        typedef matrix_op<op_rowm_symm_cache<EXP, cache_element_type> > type;\n    };\n\n    template <typename EXP, typename cache_element_type>\n    struct diag_exp<matrix_op<op_symm_cache<EXP, cache_element_type> > >\n    {\n        typedef matrix_op<op_colm_symm_cache<EXP, cache_element_type> > type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SYMMETRIC_MATRIX_CAcHE_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix/symmetric_matrix_cache_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#define DLIB_SYMMETRIC_MATRIX_CAcHE_ABSTRACT_Hh_\n#ifndef DLIB_SYMMETRIC_MATRIX_CAcHE_ABSTRACT_Hh_\n\n#include \"matrix_abstract.h\"\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename cache_element_type\n        >\n    const matrix_exp symmetric_matrix_cache (\n        const matrix_exp& m,\n        long max_size_megabytes\n    );\n    /*!\n        requires\n            - m.size() > 0\n            - m.nr() == m.nc()\n            - max_size_megabytes >= 0\n        ensures\n            - This function assumes that m is symmetric.  If m is not symmetric then it won't\n              crash but you will get incorrect results.\n            - This method creates a matrix expression which internally caches the elements\n              of m so that they can be accessed quickly.  It is useful if m is some kind of\n              complex matrix expression which is both very large and expensive to evaluate.\n              An example would be a kernel_matrix() expression with an expensive kernel and\n              a large number of samples.  Such an expression would result in a huge matrix,\n              potentially too big to store in memory.  The symmetric_matrix_cache() then makes\n              it easy to store just the parts of a matrix expression which are accessed most \n              often in memory.  The specific details are defined below.\n            - returns a matrix M such that\n                - M == m\n                  (i.e. M represents the same matrix as m)\n                - M will cache elements of m and hold them internally so they can be quickly \n                  accessed.  In particular, M will attempt to allocate no more than \n                  max_size_megabytes megabytes of memory for the purposes of caching\n                  elements of m.  When an element of the matrix is accessed it is either\n                  retrieved from the cache, or if this is not possible, then an entire\n                  column of m is loaded into a part of the cache which hasn't been used\n                  recently and the needed element returned.\n                - diag(m) is always loaded into the cache and is stored separately from \n                  the cached columns.  That means accesses to the diagonal elements of m\n                  are always fast.\n                - M will store the cached elements of m as cache_element_type objects.\n                  Typically, cache_element_type will be float or double.  \n                - To avoid repeated cache lookups, the following operations are optimized for\n                  use with the symmetric_matrix_cache():\n                    - diag(M), rowm(M,row_idx), colm(M,col_idx)\n                      These methods will perform only one cache lookup operation for an\n                      entire row/column/diagonal worth of data.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SYMMETRIC_MATRIX_CAcHE_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/matrix.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MATRIx_HEADER\n#define DLIB_MATRIx_HEADER\n\n#include \"matrix/matrix.h\"\n#include \"matrix/matrix_utilities.h\"\n#include \"matrix/matrix_subexp.h\"\n#include \"matrix/matrix_math_functions.h\"\n#include \"matrix/matrix_assign.h\"\n#include \"matrix/matrix_la.h\"\n#include \"matrix/symmetric_matrix_cache.h\"\n#include \"matrix/matrix_conv.h\"\n#include \"matrix/matrix_read_from_istream.h\"\n#include \"matrix/matrix_fft.h\"\n#include \"matrix/matrix_generic_image.h\"\n\n#ifdef DLIB_USE_BLAS\n#include \"matrix/matrix_blas_bindings.h\"\n#endif\n\n#endif // DLIB_MATRIx_HEADER\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/md5/md5_kernel_1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MD5_KERNEL_1_CPp_\n#define DLIB_MD5_KERNEL_1_CPp_\n#include \"md5_kernel_1.h\"\n#include \"../uintn.h\"\n\n#include <sstream>\n#include <cstring>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace md5_stuff\n    {\n        \n        inline uint32 F (\n            uint32 x, \n            uint32 y, \n            uint32 z\n        )\n        {\n            return ( (x&y) | ((~x)&z) );\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline uint32 G (\n            uint32 x, \n            uint32 y, \n            uint32 z\n        )\n        {\n            return ( (x&z) | (y&(~z)) );\n        }\n\n    // ------------------------------------------------------------------------------------\n        \n        inline uint32 H (\n            uint32 x, \n            uint32 y, \n            uint32 z\n        ) \n        {\n            return ( x^y^z );\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline uint32 I (\n            uint32 x, \n            uint32 y, \n            uint32 z\n        )\n        {\n            return ( y ^ (x|(~z)) );\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline uint32 rotate_left (\n            uint32 x, \n            uint32 n\n        )\n        {\n            return  ( (x<<n) | (x>>(32-n)) );\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline void FF (\n            uint32& a, \n            uint32 b, \n            uint32 c, \n            uint32 d, \n            uint32 x, \n            uint32 s, \n            uint32 ac\n        ) \n        { \n            a += F(b, c, d) + x + ac; \n            a = rotate_left(a, s); \n            a += b; \n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline void GG (\n            uint32& a, \n            uint32 b, \n            uint32 c, \n            uint32 d, \n            uint32 x, \n            uint32 s, \n            uint32 ac\n        ) \n        { \n            a += G(b, c, d) + x + ac; \n            a = rotate_left(a, s); \n            a += b; \n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline void HH (\n            uint32& a, \n            uint32 b, \n            uint32 c, \n            uint32 d, \n            uint32 x, \n            uint32 s, \n            uint32 ac\n        ) \n        { \n            a += H(b, c, d) + x + ac; \n            a = rotate_left(a, s); \n            a += b; \n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline void II (\n            uint32& a, \n            uint32 b, \n            uint32 c, \n            uint32 d, \n            uint32 x, \n            uint32 s, \n            uint32 ac\n        ) \n        { \n            a += I(b, c, d) + x + ac; \n            a = rotate_left(a, s); \n            a += b; \n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void scramble_block (\n            uint32& a,\n            uint32& b,\n            uint32& c,\n            uint32& d,\n            uint32* x\n        )\n        {\n            const uint32 S11 = 7;\n            const uint32 S12 = 12;\n            const uint32 S13 = 17;\n            const uint32 S14 = 22;\n            const uint32 S21 = 5;\n            const uint32 S22 = 9;\n            const uint32 S23 = 14;\n            const uint32 S24 = 20;\n            const uint32 S31 = 4;\n            const uint32 S32 = 11;\n            const uint32 S33 = 16;\n            const uint32 S34 = 23;\n            const uint32 S41 = 6;\n            const uint32 S42 = 10;\n            const uint32 S43 = 15;\n            const uint32 S44 = 21;\n\n\n            // round 1\n            FF (a, b, c, d, x[ 0], S11, 0xd76aa478); // 1\n            FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); // 2\n            FF (c, d, a, b, x[ 2], S13, 0x242070db); // 3\n            FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); // 4\n            FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); // 5\n            FF (d, a, b, c, x[ 5], S12, 0x4787c62a); // 6\n            FF (c, d, a, b, x[ 6], S13, 0xa8304613); // 7\n            FF (b, c, d, a, x[ 7], S14, 0xfd469501); // 8\n            FF (a, b, c, d, x[ 8], S11, 0x698098d8); // 9\n            FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); // 10\n            FF (c, d, a, b, x[10], S13, 0xffff5bb1); // 11\n            FF (b, c, d, a, x[11], S14, 0x895cd7be); // 12\n            FF (a, b, c, d, x[12], S11, 0x6b901122); // 13\n            FF (d, a, b, c, x[13], S12, 0xfd987193); // 14\n            FF (c, d, a, b, x[14], S13, 0xa679438e); // 15\n            FF (b, c, d, a, x[15], S14, 0x49b40821); // 16\n\n            // Round 2 \n            GG (a, b, c, d, x[ 1], S21, 0xf61e2562); // 17\n            GG (d, a, b, c, x[ 6], S22, 0xc040b340); // 18\n            GG (c, d, a, b, x[11], S23, 0x265e5a51); // 19\n            GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); // 20\n            GG (a, b, c, d, x[ 5], S21, 0xd62f105d); // 21\n            GG (d, a, b, c, x[10], S22,  0x2441453); // 22\n            GG (c, d, a, b, x[15], S23, 0xd8a1e681); // 23\n            GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); // 24\n            GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); // 25\n            GG (d, a, b, c, x[14], S22, 0xc33707d6); // 26\n            GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); // 27\n            GG (b, c, d, a, x[ 8], S24, 0x455a14ed); // 28\n            GG (a, b, c, d, x[13], S21, 0xa9e3e905); // 29\n            GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); // 30\n            GG (c, d, a, b, x[ 7], S23, 0x676f02d9); // 31\n            GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); // 32\n\n            // Round 3 \n            HH (a, b, c, d, x[ 5], S31, 0xfffa3942); // 33\n            HH (d, a, b, c, x[ 8], S32, 0x8771f681); // 34\n            HH (c, d, a, b, x[11], S33, 0x6d9d6122); // 35\n            HH (b, c, d, a, x[14], S34, 0xfde5380c); // 36\n            HH (a, b, c, d, x[ 1], S31, 0xa4beea44); // 37\n            HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); // 38\n            HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); // 39\n            HH (b, c, d, a, x[10], S34, 0xbebfbc70); // 40\n            HH (a, b, c, d, x[13], S31, 0x289b7ec6); // 41\n            HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); // 42\n            HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); // 43\n            HH (b, c, d, a, x[ 6], S34,  0x4881d05); // 44\n            HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); // 45\n            HH (d, a, b, c, x[12], S32, 0xe6db99e5); // 46\n            HH (c, d, a, b, x[15], S33, 0x1fa27cf8); // 47\n            HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); // 48\n\n            // Round 4 \n            II (a, b, c, d, x[ 0], S41, 0xf4292244); // 49\n            II (d, a, b, c, x[ 7], S42, 0x432aff97); // 50\n            II (c, d, a, b, x[14], S43, 0xab9423a7); // 51\n            II (b, c, d, a, x[ 5], S44, 0xfc93a039); // 52\n            II (a, b, c, d, x[12], S41, 0x655b59c3); // 53\n            II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); // 54\n            II (c, d, a, b, x[10], S43, 0xffeff47d); // 55\n            II (b, c, d, a, x[ 1], S44, 0x85845dd1); // 56\n            II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); // 57\n            II (d, a, b, c, x[15], S42, 0xfe2ce6e0); // 58\n            II (c, d, a, b, x[ 6], S43, 0xa3014314); // 59\n            II (b, c, d, a, x[13], S44, 0x4e0811a1); // 60\n            II (a, b, c, d, x[ 4], S41, 0xf7537e82); // 61\n            II (d, a, b, c, x[11], S42, 0xbd3af235); // 62\n            II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); // 63\n            II (b, c, d, a, x[ 9], S44, 0xeb86d391); // 64\n        }\n\n    } \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n\n    const std::string md5 (\n        const std::string& input\n    )\n    {\n        unsigned char output[16];\n        md5 ( \n            reinterpret_cast<const unsigned char*>(input.data()),\n            static_cast<unsigned long>(input.size()),\n            output\n            );\n\n        \n        std::stringstream temp;\n        for (int i = 0; i < 16; ++i)\n        {\n            temp.fill('0');\n            temp.width(2);\n            temp << std::hex << static_cast<unsigned int>(output[i]);\n        }\n        \n        return temp.str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void md5 (\n        const unsigned char* input,\n        unsigned long len,\n        unsigned char* output\n    )\n    {\n        using namespace md5_stuff;\n\n\n\n\n        // make a temp version of input with enough space for padding and len appended\n        unsigned long extra_len = 64-len%64;\n        if (extra_len <= 8)\n            extra_len += 64;\n        unsigned char* temp = new unsigned char[extra_len + len];\n\n        // number of 16 word blocks\n        const unsigned long N = (extra_len + len)/64;\n\n        const unsigned char* input2 = input;\n        unsigned char* temp2 = temp;\n        unsigned char* end = temp+len;\n\n        // copy input into temp\n        while (temp2 != end)\n        {\n            *temp2 = *input2;\n            ++temp2;\n            ++input2;\n        }\n\n        // pad temp\n        end += extra_len-8;\n        *temp2 = static_cast<unsigned char>(0x80);\n        ++temp2;\n        while (temp2 != end)\n        {\n            *temp2 = 0;\n            ++temp2;\n        }\n\n        // make len the number of bits in the original message\n        // but first multiply len by 8 and since len is only 32 bits the number might\n        // overflow so we will carry out the multiplication manually and end up with\n        // the result in the base 65536 number with three digits\n        // result = low + high*65536 + upper*65536*65536\n        unsigned long low = len & 0xFFFF;\n        unsigned long high = len >> 16;\n        unsigned long upper;\n        unsigned long tmp;\n        tmp = low * 8;\n        low = tmp & 0xFFFF;\n        tmp = high * 8 + (tmp>>16);\n        high = tmp & 0xFFFF;\n        upper = tmp >> 16;\n        \n\n        // append the length\n        *temp2 = static_cast<unsigned char>(low&0xFF);\n        ++temp2;\n        *temp2 = static_cast<unsigned char>((low>>8)&0xFF);\n        ++temp2;\n        *temp2 = static_cast<unsigned char>((high)&0xFF);\n        ++temp2;\n        *temp2 = static_cast<unsigned char>((high>>8)&0xFF);\n        ++temp2;\n        *temp2 = static_cast<unsigned char>((upper)&0xFF);;\n        ++temp2;\n        *temp2 = static_cast<unsigned char>((upper>>8)&0xFF);;\n        ++temp2;\n        *temp2 = 0;\n        ++temp2;\n        *temp2 = 0;\n        \n\n        uint32 a = 0x67452301;\n        uint32 b = 0xefcdab89;\n        uint32 c = 0x98badcfe;\n        uint32 d = 0x10325476;\n\n\n        // an array of 16 words\n        uint32 x[16];\n\n        for (unsigned long i = 0; i < N; ++i)\n        {\n    \n            // copy a block of 16 words from m into x\n            for (unsigned long j = 0; j < 16; ++j)\n            {\n                x[j] = (\n                    (static_cast<uint32>(temp[4*(j + 16*i) + 3]) << 24) |\n                    (static_cast<uint32>(temp[4*(j + 16*i) + 2]) << 16) |\n                    (static_cast<uint32>(temp[4*(j + 16*i) + 1]) << 8 ) |\n                    (static_cast<uint32>(temp[4*(j + 16*i)    ])      )\n                    );               \n            }\n\n            uint32 aa = a;\n            uint32 bb = b;\n            uint32 cc = c;\n            uint32 dd = d;\n\n\n            scramble_block(a,b,c,d,x);\n\n\n            a = a + aa;\n            b = b + bb;\n            c = c + cc;\n            d = d + dd;\n\n        }\n\n\n        // put a, b, c, and d into output\n        output[0]   = static_cast<unsigned char>((a)    &0xFF);\n        output[1]   = static_cast<unsigned char>((a>>8) &0xFF);\n        output[2]   = static_cast<unsigned char>((a>>16)&0xFF);\n        output[3]   = static_cast<unsigned char>((a>>24)&0xFF);\n\n        output[4]   = static_cast<unsigned char>((b)    &0xFF);\n        output[5]   = static_cast<unsigned char>((b>>8) &0xFF);\n        output[6]   = static_cast<unsigned char>((b>>16)&0xFF);\n        output[7]   = static_cast<unsigned char>((b>>24)&0xFF);\n\n        output[8]   = static_cast<unsigned char>((c)    &0xFF);\n        output[9]   = static_cast<unsigned char>((c>>8) &0xFF);\n        output[10]  = static_cast<unsigned char>((c>>16)&0xFF);\n        output[11]  = static_cast<unsigned char>((c>>24)&0xFF);\n\n        output[12]  = static_cast<unsigned char>((d)    &0xFF);\n        output[13]  = static_cast<unsigned char>((d>>8) &0xFF);\n        output[14]  = static_cast<unsigned char>((d>>16)&0xFF);\n        output[15]  = static_cast<unsigned char>((d>>24)&0xFF);\n\n        delete [] temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string md5 (\n        std::istream& input\n    )\n    {\n        unsigned char output[16];\n        md5 ( \n            input,\n            output\n            );\n\n        \n        std::stringstream temp;\n        for (int i = 0; i < 16; ++i)\n        {\n            temp.fill('0');\n            temp.width(2);\n            temp << std::hex << static_cast<unsigned int>(output[i]);\n        }\n        \n        return temp.str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void md5 (\n        std::istream& input,\n        unsigned char* output\n    )\n    {\n        using namespace md5_stuff;\n\n\n                \n\n        uint32 a = 0x67452301;\n        uint32 b = 0xefcdab89;\n        uint32 c = 0x98badcfe;\n        uint32 d = 0x10325476;\n\n\n\n        unsigned long len = 0;\n\n        // an array of 16 words\n        uint32 x[16];\n        unsigned char temp[64];\n\n\n\n        bool write_length = false;\n        bool at_end = false;\n        std::streambuf& inputbuf = *input.rdbuf();\n        while(!at_end)\n        {\n            int num = inputbuf.sgetn(reinterpret_cast<char*>(temp),64);\n            len += num;\n\n            // if we hit the end of the stream then pad and add length\n            if (num < 64)\n            {\n                at_end = true;\n                unsigned char* temp2 = temp;\n                unsigned char* end;\n                if (num < 56)\n                    end = temp+56;\n                else\n                    end = temp+64;\n\n                temp2 += num;\n\n                // apply padding\n                *temp2 = 0x80;\n                ++temp2;\n                while (temp2 != end)\n                {\n                    *temp2 = 0;\n                    ++temp2;\n                }\n\n\n                if (num < 56)\n                {\n                    write_length = true;\n                    // make len the number of bits in the original message\n                    // but first multiply len by 8 and since len is only 32 bits the number might\n                    // overflow so we will carry out the multiplication manually and end up with\n                    // the result in the base 65536 number with three digits\n                    // result = low + high*65536 + upper*65536*65536\n                    unsigned long low = len & 0xFFFF;\n                    unsigned long high = len >> 16;\n                    unsigned long upper;\n                    unsigned long tmp;\n                    tmp = low * 8;\n                    low = tmp & 0xFFFF;\n                    tmp = high * 8 + (tmp>>16);\n                    high = tmp & 0xFFFF;\n                    upper = tmp >> 16;\n\n\n                    // append the length\n                    *temp2 = static_cast<unsigned char>(low&0xFF);\n                    ++temp2;\n                    *temp2 = static_cast<unsigned char>((low>>8)&0xFF);\n                    ++temp2;\n                    *temp2 = static_cast<unsigned char>((high)&0xFF);\n                    ++temp2;\n                    *temp2 = static_cast<unsigned char>((high>>8)&0xFF);\n                    ++temp2;\n                    *temp2 = static_cast<unsigned char>((upper)&0xFF);;\n                    ++temp2;\n                    *temp2 = static_cast<unsigned char>((upper>>8)&0xFF);;\n                    ++temp2;\n                    *temp2 = 0;\n                    ++temp2;\n                    *temp2 = 0;\n                }\n\n\n            }\n\n\n            // copy a block of 16 words from m into x\n            for (unsigned long i = 0; i < 16; ++i)\n            {\n                x[i] = (\n                    (static_cast<uint32>(temp[4*i + 3]) << 24) |\n                    (static_cast<uint32>(temp[4*i + 2]) << 16) |\n                    (static_cast<uint32>(temp[4*i + 1]) << 8 ) |\n                    (static_cast<uint32>(temp[4*i    ])      )\n                    );               \n            }\n            \n\n            uint32 aa = a;\n            uint32 bb = b;\n            uint32 cc = c;\n            uint32 dd = d;\n\n\n            scramble_block(a,b,c,d,x);\n\n\n            a = a + aa;\n            b = b + bb;\n            c = c + cc;\n            d = d + dd;\n\n        }\n\n        if (!write_length)\n        {\n            uint64 temp = len*8;\n\n            uint32 aa = a;\n            uint32 bb = b;\n            uint32 cc = c;\n            uint32 dd = d;\n\n            std::memset(x, 0, sizeof(x));\n            x[15] = (temp>>32);\n            x[14] = (temp&0xFFFFFFFF);\n\n            scramble_block(a,b,c,d,x);\n\n\n            a = a + aa;\n            b = b + bb;\n            c = c + cc;\n            d = d + dd;\n\n        }\n\n\n        // put a, b, c, and d into output\n        output[0]   = static_cast<unsigned char>((a)    &0xFF);\n        output[1]   = static_cast<unsigned char>((a>>8) &0xFF);\n        output[2]   = static_cast<unsigned char>((a>>16)&0xFF);\n        output[3]   = static_cast<unsigned char>((a>>24)&0xFF);\n\n        output[4]   = static_cast<unsigned char>((b)    &0xFF);\n        output[5]   = static_cast<unsigned char>((b>>8) &0xFF);\n        output[6]   = static_cast<unsigned char>((b>>16)&0xFF);\n        output[7]   = static_cast<unsigned char>((b>>24)&0xFF);\n\n        output[8]   = static_cast<unsigned char>((c)    &0xFF);\n        output[9]   = static_cast<unsigned char>((c>>8) &0xFF);\n        output[10]  = static_cast<unsigned char>((c>>16)&0xFF);\n        output[11]  = static_cast<unsigned char>((c>>24)&0xFF);\n\n        output[12]  = static_cast<unsigned char>((d)    &0xFF);\n        output[13]  = static_cast<unsigned char>((d>>8) &0xFF);\n        output[14]  = static_cast<unsigned char>((d>>16)&0xFF);\n        output[15]  = static_cast<unsigned char>((d>>24)&0xFF);\n\n        input.clear(std::ios::eofbit);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif // DLIB_MD5_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/md5/md5_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MD5_KERNEl_1_\n#define DLIB_MD5_KERNEl_1_\n\n#include \"md5_kernel_abstract.h\"\n#include <string>\n#include <iosfwd>\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string md5 (\n        const std::string& input\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    void md5 (\n        const unsigned char* input,\n        unsigned long len,\n        unsigned char* output\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string md5 (\n        std::istream& input\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    void md5 (\n        std::istream& input,\n        unsigned char* output\n    );\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"md5_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_MD5_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/md5/md5_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MD5_KERNEl_ABSTRACT_\n#ifdef DLIB_MD5_KERNEl_ABSTRACT_\n\n#include <string>\n#include <iosfwd>\n\nnamespace dlib\n{\n\n    /*!\n        NOTE:\n        This is the RSA Data Security, Inc. MD5 Message-Digest Algorithm\n        as described in rfc1321\n\n        For the functions which return a unsigned char*.  The array contains \n        the 16 bytes of the digest and are in the correct order.  \n        i.e.  output[0], output[1], output[2], ...\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string md5 (\n        const std::string& input\n    );\n    /*!\n        ensures\n            - returns the md5 digest of input as a hexadecimal string\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void md5 (\n        const unsigned char* input,\n        unsigned long len,\n        unsigned char* output\n    );\n    /*!\n        requires\n            - input  == pointer to len bytes \n            - output == pointer to 16 bytes \n            - input != output\n        ensures\n            - #output == the md5 digest of input.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string md5 (\n        std::istream& input\n    );\n    /*!\n        requires\n            - input.fail() == false\n        ensures\n            - returns the md5 digest of input as a hexadecimal string\n            - #input.eof()     == true \n            - #input.fail()    == false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void md5 (\n        std::istream& input\n        unsigned char* output\n    );\n    /*!\n        requires\n            - input.fail() == false\n            - output       == pointer to 16 bytes\n        ensures\n            - #output       == the md5 digest of input \n            - #input.eof()  == true \n            - #input.fail() == false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MD5_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/md5.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include \"md5/md5_kernel_1.h\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/member_function_pointer/make_mfp.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MAKE_MFp_H_\n#define DLIB_MAKE_MFp_H_\n\n#include \"member_function_pointer_kernel_1.h\"\n#include \"make_mfp_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    member_function_pointer<> make_mfp (\n        T& object,\n        void (T::*cb)()\n    )\n    {\n        member_function_pointer<> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n    template <\n        typename T\n        >\n    member_function_pointer<> make_mfp (\n        const T& object,\n        void (T::*cb)()const\n    )\n    {\n        member_function_pointer<> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename A1\n        >\n    member_function_pointer<A1> make_mfp (\n        T& object,\n        void (T::*cb)(A1)\n    )\n    {\n        member_function_pointer<A1> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n    template <\n        typename T,\n        typename A1\n        >\n    member_function_pointer<A1> make_mfp (\n        const T& object,\n        void (T::*cb)(A1)const\n    )\n    {\n        member_function_pointer<A1> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename A1,\n        typename A2\n        >\n    member_function_pointer<A1,A2> make_mfp (\n        T& object,\n        void (T::*cb)(A1,A2)\n    )\n    {\n        member_function_pointer<A1,A2> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n    template <\n        typename T,\n        typename A1,\n        typename A2\n        >\n    member_function_pointer<A1,A2> make_mfp (\n        const T& object,\n        void (T::*cb)(A1,A2)const\n    )\n    {\n        member_function_pointer<A1,A2> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename A1,\n        typename A2,\n        typename A3\n        >\n    member_function_pointer<A1,A2,A3> make_mfp (\n        T& object,\n        void (T::*cb)(A1,A2,A3)\n    )\n    {\n        member_function_pointer<A1,A2,A3> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n    template <\n        typename T,\n        typename A1,\n        typename A2,\n        typename A3\n        >\n    member_function_pointer<A1,A2,A3> make_mfp (\n        const T& object,\n        void (T::*cb)(A1,A2,A3)const\n    )\n    {\n        member_function_pointer<A1,A2,A3> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename A1,\n        typename A2,\n        typename A3,\n        typename A4\n        >\n    member_function_pointer<A1,A2,A3,A4> make_mfp (\n        T& object,\n        void (T::*cb)(A1,A2,A3,A4)\n    )\n    {\n        member_function_pointer<A1,A2,A3,A4> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n    template <\n        typename T,\n        typename A1,\n        typename A2,\n        typename A3,\n        typename A4\n        >\n    member_function_pointer<A1,A2,A3,A4> make_mfp (\n        const T& object,\n        void (T::*cb)(A1,A2,A3,A4)const\n    )\n    {\n        member_function_pointer<A1,A2,A3,A4> temp;\n        temp.set(object, cb);\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MAKE_MFp_H_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/member_function_pointer/make_mfp_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MAKE_MFp_ABSTRACT_\n#ifdef DLIB_MAKE_MFp_ABSTRACT_\n\n#include \"member_function_pointer_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    member_function_pointer<> make_mfp (\n        T& object,\n        void (T::*cb)()\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP() will call (object.*cb)()\n    !*/\n\n    template <\n        typename T\n        >\n    member_function_pointer<> make_mfp (\n        const T& object,\n        void (T::*cb)()const\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP() will call (object.*cb)()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename A1\n        >\n    member_function_pointer<A1> make_mfp (\n        T& object,\n        void (T::*cb)(A1 a1)\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP(a1) will call (object.*cb)(a1)\n    !*/\n\n    template <\n        typename T,\n        typename A1\n        >\n    member_function_pointer<A1> make_mfp (\n        const T& object,\n        void (T::*cb)(A1 a1)const\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP(a1) will call (object.*cb)(a1)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename A1,\n        typename A2\n        >\n    member_function_pointer<A1,A2> make_mfp (\n        T& object,\n        void (T::*cb)(A1 a1, A2 a2)\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP(a1,a2) will call (object.*cb)(a1,a2)\n    !*/\n\n    template <\n        typename T,\n        typename A1,\n        typename A2\n        >\n    member_function_pointer<A1,A2> make_mfp (\n        const T& object,\n        void (T::*cb)(A1 a1, A2 a2)const\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP(a1,a2) will call (object.*cb)(a1,a2)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename A1,\n        typename A2,\n        typename A3\n        >\n    member_function_pointer<A1,A2,A3> make_mfp (\n        T& object,\n        void (T::*cb)(A1 a1, A2 a2, A3 a3)\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP(a1,a2,a3) will call (object.*cb)(a1,a2,a3)\n    !*/\n\n    template <\n        typename T,\n        typename A1,\n        typename A2,\n        typename A3\n        >\n    member_function_pointer<A1,A2,A3> make_mfp (\n        const T& object,\n        void (T::*cb)(A1 a1, A2 a2, A3 a3)const\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP(a1,a2,a3) will call (object.*cb)(a1,a2,a3)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename A1,\n        typename A2,\n        typename A3,\n        typename A4\n        >\n    member_function_pointer<A1,A2,A3,A4> make_mfp (\n        T& object,\n        void (T::*cb)(A1 a1, A2 a2, A3 a3, A4 a4)\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP(a1,a2,a3,a4) will call (object.*cb)(a1,a2,a3,a4)\n    !*/\n\n    template <\n        typename T,\n        typename A1,\n        typename A2,\n        typename A3,\n        typename A4\n        >\n    member_function_pointer<A1,A2,A3,A4> make_mfp (\n        const T& object,\n        void (T::*cb)(A1 a1, A2 a2, A3 a3, A4 a4)const\n    );\n    /*!\n        requires\n            - cb == a valid member function pointer for class T\n        ensures\n            - returns a member function pointer object MFP such that:\n                - MFP.is_set() == true\n                - calls to MFP(a1,a2,a3,a4) will call (object.*cb)(a1,a2,a3,a4)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MAKE_MFp_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/member_function_pointer/member_function_pointer_kernel_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMBER_FUNCTION_POINTER_KERNEl_1_\n#define DLIB_MEMBER_FUNCTION_POINTER_KERNEl_1_\n\n#include \"../algs.h\"\n#include \"member_function_pointer_kernel_abstract.h\"\n#include \"../enable_if.h\"\n#include <new>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1 = void,\n        typename PARAM2 = void,\n        typename PARAM3 = void,\n        typename PARAM4 = void\n        >\n    class member_function_pointer;\n\n// ----------------------------------------------------------------------------------------\n\n#define DLIB_MFP_SC DLIB_ASSERT(cb != 0,                                \\\n                   \"\\tvoid member_function_pointer::set\"                \\\n                   << \"\\n\\tthe member function pointer can't be null\"   \\\n                   << \"\\n\\tthis: \" << this   );\n\n\n#define DLIB_MFP_OC DLIB_ASSERT(this->is_set() == true ,                            \\\n                   \"\\tvoid member_function_pointer::operator()\"                     \\\n                   << \"\\n\\tYou must call set() before you can use this function\"    \\\n                   << \"\\n\\tthis: \" << this);\n\n// ----------------------------------------------------------------------------------------\n\n    template <unsigned long num_args>\n    class mfp_kernel_1_base_class\n    {\n        /*\n            All member function pointer classes inherit from this class.  This\n            is where most of the things in a member function pointer are defined.\n\n            The reason for the num_args template argument to this class is to prevent\n            any sort of implicit casting between derived member function pointer classes\n            that take different numbers of arguments.\n        */\n    protected:\n        enum mfp_type { mfp_nonconst, mfp_const, mfp_null};\n\n        class mp_base_base\n        {\n        public:\n            mp_base_base(void* ptr, mfp_type type_) : o(ptr),type(type_) {}\n            virtual ~mp_base_base(){}\n            virtual void clone(void* ptr) const = 0;\n            virtual bool is_same (const mp_base_base* item) const = 0;\n            bool is_set () const { return o!=0; }\n\n            void* const o;\n            const mfp_type type;\n        };\n\n        template <typename T>\n        class mp_null : public mp_base_base \n        {\n        public:\n            typedef void (T::*mfp_pointer_type)() ;\n\n            mp_null (void* , mfp_pointer_type ) : mp_base_base(0,mfp_null), callback(0) {}\n            mp_null () : mp_base_base(0,mfp_null), callback(0) {}\n\n            const mfp_pointer_type callback;\n        };\n\n        template <typename mp_impl>\n        class mp_impl_T : public mp_impl \n        {\n            /*\n                This class supplies the implementations clone() and is_same() for any\n                classes that inherit from mp_base_base.  It does this in a very\n                roundabout way...\n            */\n               \n        public:\n            typedef typename mp_impl::mfp_pointer_type mfp_pointer_type;\n\n            mp_impl_T() : mp_impl(0,0) {}\n            mp_impl_T(void* ptr, mfp_pointer_type cb) : mp_impl(ptr,cb) {}\n\n            template <unsigned long mem_size>\n            void safe_clone(stack_based_memory_block<mem_size>& buf)\n            {\n                // This is here just to validate the assumption that our block of memory we have made\n                // in mp_memory is the right size to store the data for this object.  If you\n                // get a compiler error on this line then email me :)\n                COMPILE_TIME_ASSERT(sizeof(mp_impl_T) <= mem_size);\n                clone(buf.get());\n            }\n\n            void clone   (void* ptr) const  { new(ptr) mp_impl_T(this->o,this->callback); }\n            bool is_same (const mp_base_base* item) const \n            {\n                if (item->o == 0 && this->o == 0)\n                {\n                    return true;\n                }\n                else if (item->o == this->o && this->type == item->type)\n                {\n                    const mp_impl* i = reinterpret_cast<const mp_impl*>(item);\n                    return (i->callback == this->callback);\n                }\n                return false;\n            }\n        };\n\n        struct dummy_base { virtual void nonnull() {}; virtual ~dummy_base(){}; int a; };\n        struct dummy : virtual public dummy_base{ void nonnull() {}; };\n\n        typedef mp_impl_T<mp_null<dummy> > mp_null_impl;\n    public:\n\n        mfp_kernel_1_base_class (\n            const mfp_kernel_1_base_class& item\n        ) { item.mp()->clone(mp_memory.get()); }\n\n        mfp_kernel_1_base_class (  \n        ) { mp_null_impl().safe_clone(mp_memory); }\n\n        bool operator == (\n            const mfp_kernel_1_base_class& item\n        ) const { return mp()->is_same(item.mp()); }\n\n        bool operator != (\n            const mfp_kernel_1_base_class& item\n        ) const { return !(*this == item); }\n\n        mfp_kernel_1_base_class& operator= (\n            const mfp_kernel_1_base_class& item\n        ) { mfp_kernel_1_base_class(item).swap(*this); return *this;  }\n\n        ~mfp_kernel_1_base_class (\n        ) { destroy_mp_memory(); }\n\n        void clear(\n        ) { mfp_kernel_1_base_class().swap(*this); }\n\n        bool is_set (\n        ) const { return mp()->is_set(); } \n\n    private:\n        typedef void (dummy::*safe_bool)();\n\n    public:\n        operator safe_bool () const { return is_set() ? &dummy::nonnull : 0; }\n        bool operator!() const { return !is_set(); }\n\n        void swap (\n            mfp_kernel_1_base_class& item\n        ) \n        {  \n            // make a temp copy of item\n            mfp_kernel_1_base_class temp(item);\n\n            // destory the stuff in item\n            item.destroy_mp_memory();\n            // copy *this into item\n            mp()->clone(item.mp_memory.get());\n\n            // destory the stuff in this \n            destroy_mp_memory();\n            // copy temp into *this\n            temp.mp()->clone(mp_memory.get());\n        }\n\n    protected:\n\n        // The reason for adding 1 here is because visual studio 2003 will sometimes\n        // try to compile this code with sizeof(mp_null_impl) == 0 (which is a bug in visual studio).\n        // Fortunately, no actual real instances of this template seem to end up with that screwed up\n        // value so everything works fine if we just add 1 so that this degenerate case doesn't cause\n        // trouble.  Note that we know it all works fine because safe_clone() checks the size of this\n        // memory block whenever the member function pointer is used.  \n        stack_based_memory_block<sizeof(mp_null_impl)+1> mp_memory;\n\n        void destroy_mp_memory (\n        )\n        {\n            // Honestly this probably doesn't even do anything but I'm putting\n            // it here just for good measure.\n            mp()->~mp_base_base();\n        }\n\n        mp_base_base*       mp ()       { return static_cast<mp_base_base*>(mp_memory.get()); }\n        const mp_base_base* mp () const { return static_cast<const mp_base_base*>(mp_memory.get()); }\n        \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <>\n    class member_function_pointer<void,void,void,void> : public mfp_kernel_1_base_class<0>\n    {\n        class mp_base : public mp_base_base {\n        public:\n            mp_base(void* ptr, mfp_type type_) : mp_base_base(ptr,type_) {}\n            virtual void call() const = 0;\n        };\n\n        template <typename T>\n        class mp_impl : public mp_base {\n        public:\n            typedef void (T::*mfp_pointer_type)() ;\n            void call () const { (static_cast<T*>(this->o)->*callback)(); }\n\n            mp_impl      ( void* object, mfp_pointer_type cb) : mp_base(object, mfp_nonconst), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n        template <typename T>\n        class mp_impl_const : public mp_base {\n        public:\n            typedef void ((T::*mfp_pointer_type)()const);\n            void call () const  { (static_cast<const T*>(this->o)->*callback)(); }\n\n            mp_impl_const ( void* object, mfp_pointer_type cb) : mp_base(object,mfp_const), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n    public:\n        typedef void param1_type;\n        typedef void param2_type;\n        typedef void param3_type;\n        typedef void param4_type;\n\n        // These two typedefs are here for backwards compatibility with previous versions\n        // of dlib.\n        typedef member_function_pointer kernel_1a;\n        typedef member_function_pointer kernel_1a_c;\n\n\n        void operator() () const { DLIB_MFP_OC; static_cast<const mp_base*>(mp_memory.get())->call(); }\n\n        // the reason for putting disable_if on this function is that it avoids an overload\n        // resolution bug in visual studio.\n        template <typename T> typename disable_if<is_const_type<T>,void>::type \n        set(T& object, typename mp_impl<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl<T> >(&object,cb).safe_clone(mp_memory); }\n\n        template <typename T> void set(const T& object, typename mp_impl_const<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl_const<T> >((void*)&object,cb).safe_clone(mp_memory); }\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1\n        >\n    class member_function_pointer<PARAM1,void,void,void> : public mfp_kernel_1_base_class<1>\n    {\n        class mp_base : public mp_base_base {\n        public:\n            mp_base(void* ptr, mfp_type type_) : mp_base_base(ptr,type_) {}\n            virtual void call(PARAM1) const = 0;\n        };\n\n        template <typename T>\n        class mp_impl : public mp_base {\n        public:\n            typedef void (T::*mfp_pointer_type)(PARAM1) ;\n            void call (PARAM1 p1) const { (static_cast<T*>(this->o)->*callback)(p1); }\n\n            mp_impl      ( void* object, mfp_pointer_type cb) : mp_base(object, mfp_nonconst), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n        template <typename T>\n        class mp_impl_const : public mp_base {\n        public:\n            typedef void ((T::*mfp_pointer_type)(PARAM1)const);\n            void call (PARAM1 p1) const  { (static_cast<const T*>(this->o)->*callback)(p1); }\n\n            mp_impl_const ( void* object, mfp_pointer_type cb) : mp_base(object,mfp_const), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n    public:\n        typedef PARAM1 param1_type;\n        typedef void param2_type;\n        typedef void param3_type;\n        typedef void param4_type;\n\n        // These two typedefs are here for backwards compatibility with previous versions\n        // of dlib.\n        typedef member_function_pointer kernel_1a;\n        typedef member_function_pointer kernel_1a_c;\n\n\n        void operator() (PARAM1 p1) const { DLIB_MFP_OC;  static_cast<const mp_base*>(mp_memory.get())->call(p1); }\n\n        // the reason for putting disable_if on this function is that it avoids an overload\n        // resolution bug in visual studio.\n        template <typename T> typename disable_if<is_const_type<T>,void>::type \n        set(T& object, typename mp_impl<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl<T> >(&object,cb).safe_clone(mp_memory); }\n\n        template <typename T> void set(const T& object, typename mp_impl_const<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl_const<T> >((void*)&object,cb).safe_clone(mp_memory); }\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1,\n        typename PARAM2\n        >\n    class member_function_pointer<PARAM1,PARAM2,void,void> : public mfp_kernel_1_base_class<2>\n    {\n        class mp_base : public mp_base_base {\n        public:\n            mp_base(void* ptr, mfp_type type_) : mp_base_base(ptr,type_) {}\n            virtual void call(PARAM1,PARAM2) const = 0;\n        };\n\n        template <typename T>\n        class mp_impl : public mp_base {\n        public:\n            typedef void (T::*mfp_pointer_type)(PARAM1,PARAM2) ;\n            void call (PARAM1 p1, PARAM2 p2) const { (static_cast<T*>(this->o)->*callback)(p1,p2); }\n\n            mp_impl      ( void* object, mfp_pointer_type cb) : mp_base(object, mfp_nonconst), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n        template <typename T>\n        class mp_impl_const : public mp_base {\n        public:\n            typedef void ((T::*mfp_pointer_type)(PARAM1,PARAM2)const);\n            void call (PARAM1 p1, PARAM2 p2) const  { (static_cast<const T*>(this->o)->*callback)(p1,p2); }\n\n            mp_impl_const ( void* object, mfp_pointer_type cb) : mp_base(object,mfp_const), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n    public:\n        typedef PARAM1 param1_type;\n        typedef PARAM2 param2_type;\n        typedef void param3_type;\n        typedef void param4_type;\n\n        // These two typedefs are here for backwards compatibility with previous versions\n        // of dlib.\n        typedef member_function_pointer kernel_1a;\n        typedef member_function_pointer kernel_1a_c;\n\n        void operator() (PARAM1 p1, PARAM2 p2) const { DLIB_MFP_OC;  static_cast<const mp_base*>(mp_memory.get())->call(p1,p2); }\n\n        // the reason for putting disable_if on this function is that it avoids an overload\n        // resolution bug in visual studio.\n        template <typename T> typename disable_if<is_const_type<T>,void>::type \n        set(T& object, typename mp_impl<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl<T> >(&object,cb).safe_clone(mp_memory); }\n\n        template <typename T> void set(const T& object, typename mp_impl_const<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl_const<T> >((void*)&object,cb).safe_clone(mp_memory); }\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1,\n        typename PARAM2,\n        typename PARAM3\n        >\n    class member_function_pointer<PARAM1,PARAM2,PARAM3,void> : public mfp_kernel_1_base_class<3>\n    {\n        class mp_base : public mp_base_base {\n        public:\n            mp_base(void* ptr, mfp_type type_) : mp_base_base(ptr,type_) {}\n            virtual void call(PARAM1,PARAM2,PARAM3) const = 0;\n        };\n\n        template <typename T>\n        class mp_impl : public mp_base {\n        public:\n            typedef void (T::*mfp_pointer_type)(PARAM1,PARAM2,PARAM3) ;\n            void call (PARAM1 p1, PARAM2 p2, PARAM3 p3) const { (static_cast<T*>(this->o)->*callback)(p1,p2,p3); }\n\n            mp_impl      ( void* object, mfp_pointer_type cb) : mp_base(object, mfp_nonconst), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n        template <typename T>\n        class mp_impl_const : public mp_base {\n        public:\n            typedef void ((T::*mfp_pointer_type)(PARAM1,PARAM2,PARAM3)const);\n            void call (PARAM1 p1, PARAM2 p2, PARAM3 p3) const  { (static_cast<const T*>(this->o)->*callback)(p1,p2,p3); }\n\n            mp_impl_const ( void* object, mfp_pointer_type cb) : mp_base(object,mfp_const), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n    public:\n        typedef PARAM1 param1_type;\n        typedef PARAM2 param2_type;\n        typedef PARAM3 param3_type;\n        typedef void param4_type;\n\n        // These two typedefs are here for backwards compatibility with previous versions\n        // of dlib.\n        typedef member_function_pointer kernel_1a;\n        typedef member_function_pointer kernel_1a_c;\n\n        void operator() (PARAM1 p1, PARAM2 p2, PARAM3 p3) const { DLIB_MFP_OC;  static_cast<const mp_base*>(mp_memory.get())->call(p1,p2,p3); }\n\n        // the reason for putting disable_if on this function is that it avoids an overload\n        // resolution bug in visual studio.\n        template <typename T> typename disable_if<is_const_type<T>,void>::type \n        set(T& object, typename mp_impl<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl<T> >(&object,cb).safe_clone(mp_memory); }\n\n        template <typename T> void set(const T& object, typename mp_impl_const<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl_const<T> >((void*)&object,cb).safe_clone(mp_memory); }\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1,\n        typename PARAM2,\n        typename PARAM3,\n        typename PARAM4\n        >\n    class member_function_pointer : public mfp_kernel_1_base_class<4>\n    {\n        class mp_base : public mp_base_base {\n        public:\n            mp_base(void* ptr, mfp_type type_) : mp_base_base(ptr,type_) {}\n            virtual void call(PARAM1,PARAM2,PARAM3,PARAM4) const = 0;\n        };\n\n        template <typename T>\n        class mp_impl : public mp_base {\n        public:\n            typedef void (T::*mfp_pointer_type)(PARAM1,PARAM2,PARAM3, PARAM4) ;\n            void call (PARAM1 p1, PARAM2 p2, PARAM3 p3, PARAM4 p4) const { (static_cast<T*>(this->o)->*callback)(p1,p2,p3,p4); }\n\n            mp_impl      ( void* object, mfp_pointer_type cb) : mp_base(object, mfp_nonconst), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n        template <typename T>\n        class mp_impl_const : public mp_base {\n        public:\n            typedef void ((T::*mfp_pointer_type)(PARAM1,PARAM2,PARAM3,PARAM4)const);\n            void call (PARAM1 p1, PARAM2 p2, PARAM3 p3, PARAM4 p4) const  { (static_cast<const T*>(this->o)->*callback)(p1,p2,p3,p4); }\n\n            mp_impl_const ( void* object, mfp_pointer_type cb) : mp_base(object,mfp_const), callback(cb) {}\n            const mfp_pointer_type callback;\n        };\n\n    public:\n        typedef PARAM1 param1_type;\n        typedef PARAM2 param2_type;\n        typedef PARAM3 param3_type;\n        typedef PARAM4 param4_type;\n\n        // These two typedefs are here for backwards compatibility with previous versions\n        // of dlib.\n        typedef member_function_pointer kernel_1a;\n        typedef member_function_pointer kernel_1a_c;\n\n        void operator() (PARAM1 p1, PARAM2 p2, PARAM3 p3, PARAM4 p4) const \n        { DLIB_MFP_OC;  static_cast<const mp_base*>(mp_memory.get())->call(p1,p2,p3,p4); }\n\n        // the reason for putting disable_if on this function is that it avoids an overload\n        // resolution bug in visual studio.\n        template <typename T> typename disable_if<is_const_type<T>,void>::type \n        set(T& object, typename mp_impl<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl<T> >(&object,cb).safe_clone(mp_memory); }\n\n        template <typename T> void set(const T& object, typename mp_impl_const<T>::mfp_pointer_type cb) \n        { DLIB_MFP_SC;  destroy_mp_memory(); mp_impl_T<mp_impl_const<T> >((void*)&object,cb).safe_clone(mp_memory); }\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MEMBER_FUNCTION_POINTER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/member_function_pointer/member_function_pointer_kernel_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MEMBER_FUNCTION_POINTER_KERNEl_ABSTRACT_\n#ifdef DLIB_MEMBER_FUNCTION_POINTER_KERNEl_ABSTRACT_\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1 = void,\n        typename PARAM2 = void,\n        typename PARAM3 = void,\n        typename PARAM4 = void\n        >\n    class member_function_pointer;\n\n// ----------------------------------------------------------------------------------------\n\n    template <>\n    class member_function_pointer<void,void,void,void>\n    {\n        /*!\n            INITIAL VALUE\n                is_set() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a member function pointer.  It is useful because\n                instances of this object can be created without needing to know the type\n                of object whose member function we will be calling.\n\n                There are five template specializations of this object.  The first \n                represents a pointer to a member function taking no parameters, the\n                second represents a pointer to a member function taking one parameter, \n                the third to one taking two parameters, and so on.\n\n                You specify the parameters to your member function pointer by filling in\n                the PARAM template parameters.  For example:\n\n                    To use a pointer to a function with no parameters you would say:\n                        member_function_pointer<> my_pointer;\n                    To use a pointer to a function that takes a single int you would say:\n                        member_function_pointer<int> my_pointer;\n                    To use a pointer to a function that takes an int and then a reference\n                    to a string you would say:\n                        member_function_pointer<int,string&> my_pointer;\n\n                Also note that the formal comments are only present for the first \n                template specialization.  They are all exactly the same except for the \n                number of parameters each takes in its member function pointer.\n        !*/\n\n    public:\n        typedef void param1_type;\n        typedef void param2_type;\n        typedef void param3_type;\n        typedef void param4_type;\n\n        member_function_pointer (  \n        );\n        /*!\n            ensures                \n                - #*this is properly initialized\n        !*/\n\n        member_function_pointer(\n            const member_function_pointer& item\n        );\n        /*!\n            ensures\n                - *this == item\n        !*/\n\n        ~member_function_pointer (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        member_function_pointer& operator=(\n            const member_function_pointer& item\n        );\n        /*!\n            ensures\n                - *this == item\n        !*/\n\n        bool operator == (\n            const member_function_pointer& item\n        ) const;\n        /*!\n            ensures\n                - if (is_set() == false && item.is_set() == false) then\n                    - returns true\n                - else if (both *this and item point to the same member function\n                  in the same object instance) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool operator != (\n            const member_function_pointer& item\n        ) const;\n        /*!\n            ensures\n                - returns !(*this == item)\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n        !*/\n\n        bool is_set (\n        ) const;\n        /*!\n            ensures\n                - if (this->set() has been called) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        template <\n            typename T\n            >\n        void set (\n            T& object,\n            void (T::*cb)()\n        );\n        /*!\n            requires\n                - cb == a valid member function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*cb)()\n        !*/\n\n        template <\n            typename T\n            >\n        void set (\n            const T& object,\n            void (T::*cb)()const\n        );\n        /*!\n            requires\n                - cb == a valid member function pointer for class T\n            ensures\n                - #is_set() == true\n                - calls to this->operator() will call (object.*cb)()\n        !*/\n\n        operator some_undefined_pointer_type (\n        ) const;\n        /*!\n            ensures\n                - if (is_set()) then\n                    - returns a non 0 value\n                - else\n                    - returns a 0 value\n        !*/\n\n        bool operator! (\n        ) const;\n        /*!\n            ensures\n                - returns !is_set()\n        !*/\n\n        void operator () (\n        ) const;\n        /*!\n            requires\n                - is_set() == true\n            ensures\n                - calls the member function on the object specified by the last \n                  call to this->set()\n            throws\n                - any exception thrown by the member function specified by\n                  the previous call to this->set().\n                    If any of these exceptions are thrown then the call to this \n                    function will have no effect on *this.                  \n        !*/\n\n        void swap (\n            member_function_pointer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1\n        >\n    class member_function_pointer<PARAM1,void,void,void>\n    {\n    public:\n        typedef PARAM1 param1_type;\n        typedef void param2_type;\n        typedef void param3_type;\n        typedef void param4_type;\n\n        member_function_pointer ();\n\n        member_function_pointer(\n            const member_function_pointer& item\n        );\n\n        ~member_function_pointer (\n        );\n\n        member_function_pointer& operator=(\n            const member_function_pointer& item\n        );\n\n        bool operator == (\n            const member_function_pointer& item\n        ) const;\n\n        bool operator != (\n            const member_function_pointer& item\n        ) const;\n\n        void clear();\n\n        bool is_set () const;\n\n        template <typename T>\n        void set (\n            T& object,\n            void (T::*cb)(PARAM1)\n        );\n\n        template <typename T>\n        void set (\n            const T& object,\n            void (T::*cb)(PARAM1)const\n        );\n\n        operator some_undefined_pointer_type (\n        ) const;\n\n        bool operator! (\n        ) const;\n\n        void operator () (\n            PARAM1 param1\n        ) const;\n\n        void swap (\n            member_function_pointer& item\n        );\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1,\n        typename PARAM2\n        >\n    class member_function_pointer<PARAM1,PARAM2,void,void>\n    {\n    public:\n        typedef PARAM1 param1_type;\n        typedef PARAM2 param2_type;\n        typedef void param3_type;\n        typedef void param4_type;\n\n        member_function_pointer ();\n\n        member_function_pointer(\n            const member_function_pointer& item\n        );\n\n        ~member_function_pointer (\n        );\n\n        member_function_pointer& operator=(\n            const member_function_pointer& item\n        );\n\n        bool operator == (\n            const member_function_pointer& item\n        ) const;\n\n        bool operator != (\n            const member_function_pointer& item\n        ) const;\n\n        void clear();\n\n        bool is_set () const;\n\n        template <typename T>\n        void set (\n            T& object,\n            void (T::*cb)(PARAM1,PARAM2)\n        );\n\n        template <typename T>\n        void set (\n            const T& object,\n            void (T::*cb)(PARAM1,PARAM2)const\n        );\n\n        operator some_undefined_pointer_type (\n        ) const;\n\n        bool operator! (\n        ) const;\n\n        void operator () (\n            PARAM1 param1,\n            PARAM2 param2\n        ) const;\n\n        void swap (\n            member_function_pointer& item\n        );\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1,\n        typename PARAM2,\n        typename PARAM3\n        >\n    class member_function_pointer<PARAM1,PARAM2,PARAM3,void>\n    {\n    public:\n        typedef PARAM1 param1_type;\n        typedef PARAM2 param2_type;\n        typedef PARAM3 param3_type;\n        typedef void param4_type;\n\n        member_function_pointer ();\n\n        member_function_pointer(\n            const member_function_pointer& item\n        );\n\n        ~member_function_pointer (\n        );\n\n        member_function_pointer& operator=(\n            const member_function_pointer& item\n        );\n\n        bool operator == (\n            const member_function_pointer& item\n        ) const;\n\n        bool operator != (\n            const member_function_pointer& item\n        ) const;\n\n        void clear();\n\n        bool is_set () const;\n\n        template <typename T>\n        void set (\n            T& object,\n            void (T::*cb)(PARAM1,PARAM2,PARAM3)\n        );\n\n        template <typename T>\n        void set (\n            const T& object,\n            void (T::*cb)(PARAM1,PARAM2,PARAM3)const\n        );\n\n        operator some_undefined_pointer_type (\n        ) const;\n\n        bool operator! (\n        ) const;\n\n        void operator () (\n            PARAM1 param1,\n            PARAM2 param2,\n            PARAM2 param3\n        ) const;\n\n        void swap (\n            member_function_pointer& item\n        );\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename PARAM1,\n        typename PARAM2,\n        typename PARAM3,\n        typename PARAM4\n        >\n    class member_function_pointer\n    {\n    public:\n        typedef PARAM1 param1_type;\n        typedef PARAM2 param2_type;\n        typedef PARAM3 param3_type;\n        typedef PARAM4 param4_type;\n\n        member_function_pointer ();\n\n        member_function_pointer(\n            const member_function_pointer& item\n        );\n\n        ~member_function_pointer (\n        );\n\n        member_function_pointer& operator=(\n            const member_function_pointer& item\n        );\n\n        bool operator == (\n            const member_function_pointer& item\n        ) const;\n\n        bool operator != (\n            const member_function_pointer& item\n        ) const;\n\n        void clear();\n\n        bool is_set () const;\n\n        template <typename T>\n        void set (\n            T& object,\n            void (T::*cb)(PARAM1,PARAM2,PARAM3,PARAM4)\n        );\n\n        template <typename T>\n        void set (\n            const T& object,\n            void (T::*cb)(PARAM1,PARAM2,PARAM3,PARAM4)const\n        );\n\n        operator some_undefined_pointer_type (\n        ) const;\n\n        bool operator! (\n        ) const;\n\n        void operator () (\n            PARAM1 param1,\n            PARAM2 param2,\n            PARAM2 param3,\n            PARAM2 param4\n        ) const;\n\n        void swap (\n            member_function_pointer& item\n        );\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n\n}\n\n#endif // DLIB_MEMBER_FUNCTION_POINTER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/member_function_pointer.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMBER_FUNCTION_POINTEr_\n#define DLIB_MEMBER_FUNCTION_POINTEr_\n\n#include \"member_function_pointer/member_function_pointer_kernel_1.h\"\n#include \"member_function_pointer/make_mfp.h\"\n\n#endif // DLIB_MEMBER_FUNCTION_POINTEr_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager/memory_manager_kernel_1.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMORY_MANAGER_KERNEl_1_\n#define DLIB_MEMORY_MANAGER_KERNEl_1_\n\n#include \"../algs.h\"\n#include \"memory_manager_kernel_abstract.h\"\n#include \"../assert.h\"\n#include <new>\n\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        unsigned long max_pool_size\n        >\n    class memory_manager_kernel_1\n    {\n        /*!            \n            INITIAL VALUE\n                allocations == 0\n                next == 0\n                pool_size == 0\n\n            REQUIREMENTS ON max_pool_size \n                max_pool_size is the maximum number of nodes we will keep in our linked list at once.\n                So you can put any value in for this argument.\n\n            CONVENTION\n                This memory manager implementation allocates T objects one at a time when there are\n                allocation requests.  Then when there is a deallocate request the returning T object\n                is place into a list of free blocks if that list has less than max_pool_size \n                blocks in it.  subsequent allocation requests will be serviced by drawing from the\n                free list whenever it isn't empty.\n\n\n                allocations == get_number_of_allocations()\n\n                - if (next != 0) then\n                    - next == the next pointer to return from allocate()\n                      and next == pointer to the first node in a linked list.  each node\n                      is one item in the memory pool.    \n                    - the last node in the linked list has next set to 0\n                    - pool_size == the number of nodes in the linked list\n                    - pool_size <= max_pool_size\n                - else\n                    - we need to call new to get the next pointer to return from allocate()\n\n        !*/\n\n        union node\n        {\n            node* next;\n            char item[sizeof(T)];\n        };\n\n    public:\n\n        typedef T type;\n\n        template <typename U>\n        struct rebind {\n            typedef memory_manager_kernel_1<U,max_pool_size> other;\n        };\n\n\n        memory_manager_kernel_1(\n        ) :\n            allocations(0),\n            next(0),\n            pool_size(0)\n        {\n        }\n\n        virtual ~memory_manager_kernel_1(\n        )\n        {\n\n            while (next != 0)\n            {\n                node* temp = next;\n                next = next->next;\n                ::operator delete ( static_cast<void*>(temp));\n            }\n        }\n\n        unsigned long get_number_of_allocations (\n        ) const { return allocations; }\n\n        T* allocate_array (\n            unsigned long size\n        )\n        {\n            T* temp = new T[size];\n            ++allocations;\n            return temp;\n        }\n\n        void deallocate_array (\n            T* item\n        )\n        {\n            --allocations;\n            delete [] item;\n        }\n\n        T* allocate (\n        ) \n        {              \n            T* temp;\n            if (next != 0)\n            {\n                temp = reinterpret_cast<T*>(next);\n\n                node* n = next->next;\n\n                try\n                {\n                    // construct this new T object with placement new.\n                    new (static_cast<void*>(temp))T();\n                }\n                catch (...)\n                {\n                    next->next = n;\n                    throw;\n                }\n\n                next = n;\n\n                --pool_size;\n            }\n            else\n            {\n                temp = static_cast<T*>(::operator new(sizeof(node)));\n                try\n                {\n                    // construct this new T object with placement new.\n                    new (static_cast<void*>(temp))T();\n                }\n                catch (...)\n                {\n                    // construction of the new object threw so delete the block of memory\n                    ::operator delete ( static_cast<void*>(temp));\n                    throw;\n                }\n            }\n\n            ++allocations;\n            return temp;\n        }\n\n        void deallocate (\n            T* item\n        ) \n        { \n            --allocations;  \n            item->~T();\n\n            if (pool_size >= max_pool_size)\n            {\n                ::operator delete ( static_cast<void*>(item));\n                return;\n            }\n\n            // add this memory chunk into our linked list.\n            node* temp = reinterpret_cast<node*>(item);\n            temp->next = next;\n            next = temp;                \n            ++pool_size;\n        }\n\n        void swap (\n            memory_manager_kernel_1& item\n        ) \n        { \n            exchange(allocations,item.allocations); \n            exchange(next,item.next); \n            exchange(pool_size,item.pool_size);\n        }\n\n    private:\n\n        // data members\n        unsigned long allocations;\n        node* next;\n        unsigned long pool_size;\n\n        // restricted functions\n        memory_manager_kernel_1(memory_manager_kernel_1&);        // copy constructor\n        memory_manager_kernel_1& operator=(memory_manager_kernel_1&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class memory_manager_kernel_1<T,0>\n    {\n        /*!            \n            INITIAL VALUE\n                allocations == 0\n\n            CONVENTION\n                This memory manager just calls new and delete directly so it doesn't \n                really do anything.\n\n                allocations == get_number_of_allocations()\n        !*/\n\n    public:\n\n        typedef T type;\n\n        template <typename U>\n        struct rebind {\n            typedef memory_manager_kernel_1<U,0> other;\n        };\n\n\n        memory_manager_kernel_1(\n        ) :\n            allocations(0)\n        {\n        }\n\n        virtual ~memory_manager_kernel_1(\n        )\n        {\n        }\n\n        unsigned long get_number_of_allocations (\n        ) const { return allocations; }\n\n        T* allocate_array (\n            unsigned long size\n        )\n        {\n            T* temp = new T[size];\n            ++allocations;\n            return temp;\n        }\n\n        void deallocate_array (\n            T* item\n        )\n        {\n            --allocations;\n            delete [] item;\n        }\n\n        T* allocate (\n        ) \n        {              \n            T* temp = new T;\n            ++allocations;\n            return temp;\n        }\n\n        void deallocate (\n            T* item\n        ) \n        { \n            delete item;\n            --allocations;  \n        }\n\n        void swap (\n            memory_manager_kernel_1& item\n        ) \n        { \n            exchange(allocations,item.allocations); \n        }\n\n    private:\n\n        // data members\n        unsigned long allocations;\n\n        // restricted functions\n        memory_manager_kernel_1(memory_manager_kernel_1&);        // copy constructor\n        memory_manager_kernel_1& operator=(memory_manager_kernel_1&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long max_pool_size\n        >\n    inline void swap (\n        memory_manager_kernel_1<T,max_pool_size>& a, \n        memory_manager_kernel_1<T,max_pool_size>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MEMORY_MANAGER_KERNEl_1_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager/memory_manager_kernel_2.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMORY_MANAGER_KERNEl_2_\n#define DLIB_MEMORY_MANAGER_KERNEl_2_\n\n#include \"../algs.h\"\n#include \"memory_manager_kernel_abstract.h\"\n#include \"../assert.h\"\n#include <new>\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        unsigned long chunk_size\n        >\n    class memory_manager_kernel_2\n    {\n        /*!            \n            INITIAL VALUE\n                allocations == 0\n                next == 0\n                first_chunk == 0\n\n            REQUIREMENTS ON chunk_size\n                chunk_size is the number of items of type T we will allocate at a time. so\n                it must be > 0.\n\n            CONVENTION\n                This memory manager implementation allocates memory in blocks of chunk_size*sizeof(T)\n                bytes.  All the sizeof(T) subblocks are kept in a linked list of free memory blocks\n                and are given out whenever an allocation request occurs.  Also, memory is not freed\n                until this object is destructed.  \n\n                Note that array allocations are not memory managed.\n                \n\n\n                allocations == get_number_of_allocations()\n\n                - if (next != 0) then\n                    - next == the next pointer to return from allocate()\n                      and next == pointer to the first node in a linked list.  each node\n                      is one item in the memory pool.    \n                    - the last node in the linked list has next set to 0\n                - else\n                    - we need to call new to get the next pointer to return from allocate()\n\n\n                - if (first_chunk != 0) then\n                    - first_chunk == the first node in a linked list that contains pointers \n                      to all the chunks we have ever allocated.  The last link in the list\n                      has its next pointer set to 0.\n        !*/\n\n        union node\n        {\n            node* next;\n            char item[sizeof(T)];\n        };\n\n        struct chunk_node\n        {\n            node* chunk;\n            chunk_node* next;\n        };\n\n    public:\n\n        typedef T type;\n\n        template <typename U>\n        struct rebind {\n            typedef memory_manager_kernel_2<U,chunk_size> other;\n        };\n\n\n        memory_manager_kernel_2(\n        ) :\n            allocations(0),\n            next(0),\n            first_chunk(0)\n        {\n            // You FOOL!  You can't have a zero chunk_size.\n            COMPILE_TIME_ASSERT(chunk_size > 0);\n        }\n\n        virtual ~memory_manager_kernel_2(\n        )\n        {\n            if (allocations == 0)\n            {\n                while (first_chunk != 0)\n                {\n                    chunk_node* temp = first_chunk;\n                    first_chunk = first_chunk->next;\n                    // delete the memory chunk \n                    ::operator delete ( static_cast<void*>(temp->chunk));\n                    // delete the chunk_node\n                    delete temp;\n                }\n            }\n        }\n\n        unsigned long get_number_of_allocations (\n        ) const { return allocations; }\n\n        T* allocate_array (\n            unsigned long size\n        )\n        {\n            T* temp = new T[size];\n            ++allocations;\n            return temp;\n        }\n\n        void deallocate_array (\n            T* item\n        )\n        {\n            --allocations;\n            delete [] item;\n        }\n\n        T* allocate (\n        ) \n        {              \n            T* temp = 0;\n            if (next != 0)\n            {\n                temp = reinterpret_cast<T*>(next);\n                node* n = next->next;\n\n                try\n                {\n                    // construct this new T object with placement new.\n                    new (static_cast<void*>(temp))T();\n                }\n                catch (...)\n                {\n                    next->next = n;\n                    throw;\n                }\n\n                next = n;\n            }\n            else\n            {\n                // the linked list is empty so we need to allocate some more memory\n                node* block = 0;\n                block = static_cast<node*>(::operator new (sizeof(node)*chunk_size));\n\n                // the first part of this block can be our new object\n                temp = reinterpret_cast<T*>(block);\n\n                try\n                {\n                    // construct this new T object with placement new.\n                    new (static_cast<void*>(temp))T();\n                }\n                catch (...)\n                {\n                    // construction of the new object threw so delete the block of memory\n                    ::operator delete ( static_cast<void*>(block));\n                    throw;\n                }\n\n                // allocate a new chunk_node\n                chunk_node* chunk;\n                try {chunk = new chunk_node; }\n                catch (...) \n                { \n                    temp->~T();\n                    ::operator delete ( static_cast<void*>(block));\n                    throw;\n                }\n\n                // add this block into the chunk list\n                chunk->chunk = block;\n                chunk->next = first_chunk;\n                first_chunk = chunk;\n\n\n                ++block;\n                // now add the rest of the block into the linked list of free nodes.\n                for (unsigned long i = 0; i < chunk_size-1; ++i)\n                {\n                    block->next = next;\n                    next = block;\n                    ++block;\n                }\n\n            }\n\n\n            ++allocations;\n            return temp;\n        }\n\n        void deallocate (\n            T* item\n        ) \n        { \n            --allocations;  \n            item->~T();\n\n            // add this memory into our linked list.\n            node* temp = reinterpret_cast<node*>(item);\n            temp->next = next;\n            next = temp;                \n        }\n\n        void swap (\n            memory_manager_kernel_2& item\n        ) \n        { \n            exchange(allocations,item.allocations); \n            exchange(next,item.next); \n            exchange(first_chunk,item.first_chunk);\n        }\n\n    private:\n\n        // data members\n        unsigned long allocations;\n        node* next;\n\n        chunk_node* first_chunk;\n\n\n\n\n        // restricted functions\n        memory_manager_kernel_2(memory_manager_kernel_2&);        // copy constructor\n        memory_manager_kernel_2& operator=(memory_manager_kernel_2&);    // assignment operator\n    };\n\n    template <\n        typename T,\n        unsigned long chunk_size\n        >\n    inline void swap (\n        memory_manager_kernel_2<T,chunk_size>& a, \n        memory_manager_kernel_2<T,chunk_size>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MEMORY_MANAGER_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager/memory_manager_kernel_3.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMORY_MANAGER_KERNEl_3_\n#define DLIB_MEMORY_MANAGER_KERNEl_3_\n\n#include \"../algs.h\"\n#include \"memory_manager_kernel_abstract.h\"\n#include \"../assert.h\"\n#include <new>\n#include \"memory_manager_kernel_2.h\"\n#include \"../binary_search_tree/binary_search_tree_kernel_2.h\"\n\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        unsigned long chunk_size\n        >\n    class memory_manager_kernel_3\n    {\n        /*!            \n            INITIAL VALUE\n                allocations == 0\n                next == 0\n                first_chunk == 0\n                bst_of_arrays == 0\n\n            REQUIREMENTS ON chunk_size\n                chunk_size is the number of items of type T we will allocate at a time. so\n                it must be > 0.\n\n            CONVENTION\n                This memory manager implementation allocates memory in blocks of chunk_size*sizeof(T)\n                bytes.  All the sizeof(T) subblocks are kept in a linked list of free memory blocks\n                and are given out whenever an allocation request occurs.  Also, memory is not freed\n                until this object is destructed.  \n                \n\n\n                allocations == get_number_of_allocations()\n\n                - if (next != 0) then\n                    - next == the next pointer to return from allocate()\n                      and next == pointer to the first node in a linked list.  each node\n                      is one item in the memory pool.    \n                    - the last node in the linked list has next set to 0\n                - else\n                    - we need to call new to get the next pointer to return from allocate()\n\n                - if (arrays != 0) then\n                    - someone has called allocate_array()\n                    - (*arrays)[size] == an array of size bytes of memory  \n\n                - if (first_chunk != 0) then\n                    - first_chunk == the first node in a linked list that contains pointers \n                      to all the chunks we have ever allocated.  The last link in the list\n                      has its next pointer set to 0.\n        !*/\n\n        union node\n        {\n            node* next;\n            char item[sizeof(T)];\n        };\n\n        struct chunk_node\n        {\n            node* chunk;\n            chunk_node* next;\n        };\n\n\n        typedef binary_search_tree_kernel_2<\n            size_t,\n            char*,\n            memory_manager_kernel_2<char,5>\n            > bst_of_arrays; \n\n    public:\n\n        typedef T type;\n\n        template <typename U>\n        struct rebind {\n            typedef memory_manager_kernel_3<U,chunk_size> other;\n        };\n\n\n        memory_manager_kernel_3(\n        ) :\n            allocations(0),\n            next(0),\n            first_chunk(0),\n            arrays(0)\n        {\n            // You FOOL!  You can't have a zero chunk_size.\n            COMPILE_TIME_ASSERT(chunk_size > 0);\n        }\n\n        virtual ~memory_manager_kernel_3(\n        )\n        {\n            if (allocations == 0)\n            {\n                while (first_chunk != 0)\n                {\n                    chunk_node* temp = first_chunk;\n                    first_chunk = first_chunk->next;\n                    // delete the memory chunk \n                    ::operator delete ( static_cast<void*>(temp->chunk));\n                    // delete the chunk_node\n                    delete temp;\n                }\n            }\n\n            if (arrays)\n            {\n                arrays->reset();\n                while (arrays->move_next())\n                {\n                    ::operator delete (arrays->element().value());\n                }\n                delete arrays;\n            }\n        }\n\n        unsigned long get_number_of_allocations (\n        ) const { return allocations; }\n\n        T* allocate_array (\n            unsigned long size\n        )\n        {\n            size_t block_size = sizeof(T)*size + sizeof(size_t)*2;\n\n            // make sure we have initialized the arrays object.\n            if (arrays == 0)\n            {\n                arrays = new bst_of_arrays;\n            }\n\n            char* temp;\n\n            // see if we have a suitable block of memory already.\n            arrays->position_enumerator(block_size);\n            if (arrays->current_element_valid())\n            {\n                // we have a suitable block of memory already so use that one.\n                arrays->remove_current_element(block_size,temp); \n            }\n            else\n            {\n                temp = static_cast<char*>(::operator new(block_size));\n            }\n\n            reinterpret_cast<size_t*>(temp)[0] = block_size;\n            reinterpret_cast<size_t*>(temp)[1] = size;\n            temp += sizeof(size_t)*2;\n\n            try\n            {\n                initialize_array(reinterpret_cast<T*>(temp),size);\n            }\n            catch (...)\n            {\n                // something was thrown while we were initializing the array so\n                // stick our memory block into arrays and rethrow the exception\n                temp -= sizeof(size_t)*2;\n                arrays->add(block_size,temp);\n                throw;\n            }\n\n            ++allocations;\n            return reinterpret_cast<T*>(temp);\n        }\n\n        void deallocate_array (\n            T* item\n        )\n        {\n            char* temp = reinterpret_cast<char*>(item);\n            temp -= sizeof(size_t)*2;\n            size_t block_size = reinterpret_cast<size_t*>(temp)[0];\n            size_t size = reinterpret_cast<size_t*>(temp)[1];\n\n            deinitialize_array(item,size);\n\n            arrays->add(block_size,temp);\n            \n            --allocations;\n        }\n\n        T* allocate (\n        ) \n        {              \n            T* temp;\n            if (next != 0)\n            {\n                temp = reinterpret_cast<T*>(next);\n                node* n = next->next;\n\n                try\n                {\n                    // construct this new T object with placement new.\n                    new (static_cast<void*>(temp))T();\n                }\n                catch (...)\n                {\n                    next->next = n;\n                    throw;\n                }\n\n                next = n;\n            }\n            else\n            {\n                // the linked list is empty so we need to allocate some more memory\n                node* block = static_cast<node*>(::operator new (sizeof(node)*chunk_size));\n\n                // the first part of this block can be our new object\n                temp = reinterpret_cast<T*>(block);\n\n                try\n                {\n                    // construct this new T object with placement new.\n                    new (static_cast<void*>(temp))T();\n                }\n                catch (...)\n                {\n                    // construction of the new object threw so delete the block of memory\n                    ::operator delete ( static_cast<void*>(block));\n                    throw;\n                }\n\n                // allocate a new chunk_node\n                chunk_node* chunk;\n                try {chunk = new chunk_node; }\n                catch (...) \n                { \n                    temp->~T();\n                    ::operator delete ( static_cast<void*>(block));\n                    throw;\n                }\n\n                // add this block into the chunk list\n                chunk->chunk = block;\n                chunk->next = first_chunk;\n                first_chunk = chunk;\n\n\n                ++block;\n                // now add the rest of the block into the linked list of free nodes.\n                for (unsigned long i = 0; i < chunk_size-1; ++i)\n                {\n                    block->next = next;\n                    next = block;\n                    ++block;\n                }\n\n            }\n\n\n            ++allocations;\n            return temp;\n        }\n\n        void deallocate (\n            T* item\n        ) \n        { \n            --allocations;  \n            item->~T();\n\n            // add this memory into our linked list.\n            node* temp = reinterpret_cast<node*>(item);\n            temp->next = next;\n            next = temp;                \n        }\n\n        void swap (\n            memory_manager_kernel_3& item\n        ) \n        { \n            exchange(allocations,item.allocations); \n            exchange(next,item.next); \n            exchange(first_chunk,item.first_chunk);\n            exchange(arrays,item.arrays);\n        }\n\n    private:\n\n        // data members\n        unsigned long allocations;\n        node* next;\n\n        chunk_node* first_chunk;\n        bst_of_arrays* arrays;\n\n\n        void initialize_array (\n            T* array,\n            size_t size\n        ) const\n        {\n            size_t i;\n            try\n            {\n                for (i = 0; i < size; ++i)\n                {\n                    // construct this new T object with placement new.\n                    new (static_cast<void*>(array+i))T();\n                }\n            }\n            catch (...)\n            {\n                // Catch any exceptions thrown during the construction process\n                // and then destruct any T objects that actually were successfully\n                // constructed.\n                for (size_t j = 0; j < i; ++j)\n                {\n                    array[i].~T();\n                }\n                throw;\n            }\n        }\n\n        void deinitialize_array (\n            T* array,\n            size_t size\n        ) const\n        {\n            for (size_t i = 0; i < size; ++i)\n            {\n                array[i].~T();\n            }\n        }\n\n        // don't do any initialization for the built in types\n        void initialize_array(unsigned char*, size_t) {} \n        void deinitialize_array(unsigned char*, size_t) {}\n        void initialize_array(signed char*, size_t) {} \n        void deinitialize_array(signed char*, size_t) {}\n        void initialize_array(char*, size_t) {} \n        void deinitialize_array(char*, size_t) {}\n        void initialize_array(int*, size_t) {} \n        void deinitialize_array(int*, size_t) {}\n        void initialize_array(unsigned int*, size_t) {} \n        void deinitialize_array(unsigned int*, size_t) {}\n        void initialize_array(unsigned long*, size_t) {} \n        void deinitialize_array(unsigned long*, size_t) {}\n        void initialize_array(long*, size_t) {} \n        void deinitialize_array(long*, size_t) {}\n        void initialize_array(float*, size_t) {} \n        void deinitialize_array(float*, size_t) {}\n        void initialize_array(double*, size_t) {} \n        void deinitialize_array(double*, size_t) {}\n        void initialize_array(short*, size_t) {} \n        void deinitialize_array(short*, size_t) {}\n        void initialize_array(unsigned short*, size_t) {} \n        void deinitialize_array(unsigned short*, size_t) {}\n\n\n\n        // restricted functions\n        memory_manager_kernel_3(memory_manager_kernel_3&);        // copy constructor\n        memory_manager_kernel_3& operator=(memory_manager_kernel_3&);    // assignment operator\n    };\n\n    template <\n        typename T,\n        unsigned long chunk_size\n        >\n    inline void swap (\n        memory_manager_kernel_3<T,chunk_size>& a, \n        memory_manager_kernel_3<T,chunk_size>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MEMORY_MANAGER_KERNEl_3_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager/memory_manager_kernel_abstract.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MEMORY_MANAGER_KERNEl_ABSTRACT_\n#ifdef DLIB_MEMORY_MANAGER_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n    template <\n        typename T\n        >\n    class memory_manager\n    {\n        /*!      \n            REQUIREMENTS ON T\n                T must have a default constructor.      \n\n            INITIAL VALUE\n                get_number_of_allocations() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents some kind of memory manager or memory pool.\n        !*/\n        \n        public:\n\n            typedef T type;\n\n            template <typename U>\n            struct rebind {\n                typedef memory_manager<U> other;\n            };\n\n            memory_manager(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc\n            !*/\n\n            virtual ~memory_manager(\n            ); \n            /*!\n                ensures\n                    - if (get_number_of_allocations() == 0) then\n                        - all resources associated with *this have been released.\n                    - else\n                        - The memory still allocated will not be deleted and this\n                          causes a memory leak. \n            !*/\n\n            unsigned long get_number_of_allocations (\n            ) const;\n            /*!\n                ensures\n                    - returns the current number of outstanding allocations\n            !*/\n \n            T* allocate (\n            );\n            /*!\n                ensures\n                    - allocates a new object of type T and returns a pointer to it.\n                    - #get_number_of_allocations() == get_number_of_allocations() + 1\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                        If this exception is thrown then the call to allocate() \n                        has no effect on #*this.\n            !*/\n\n            void deallocate (\n                T* item\n            );\n            /*!\n                requires\n                    - item == is a pointer to memory that was obtained from a call to\n                      this->allocate(). (i.e. you can't deallocate a pointer you\n                      got from a different memory_manager instance.)\n                    - the memory pointed to by item hasn't already been deallocated.\n                ensures\n                    - deallocates the object pointed to by item\n                    - #get_number_of_allocations() == get_number_of_allocations() - 1\n            !*/\n\n            T* allocate_array (\n                unsigned long size\n            );\n            /*!\n                ensures\n                    - allocates a new array of size objects of type T and returns a \n                      pointer to it.\n                    - #get_number_of_allocations() == get_number_of_allocations() + 1\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                        If this exception is thrown then the call to allocate() \n                        has no effect on #*this.\n            !*/\n\n            void deallocate_array (\n                T* item\n            );\n            /*!\n                requires\n                    - item == is a pointer to memory that was obtained from a call to\n                      this->allocate_array(). (i.e. you can't deallocate a pointer you\n                      got from a different memory_manager instance and it must be an\n                      array.)\n                    - the memory pointed to by item hasn't already been deallocated.\n                ensures\n                    - deallocates the array pointed to by item\n                    - #get_number_of_allocations() == get_number_of_allocations() - 1\n            !*/\n\n            void swap (\n                memory_manager& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n        private:\n\n            // restricted functions\n            memory_manager(memory_manager&);        // copy constructor\n            memory_manager& operator=(memory_manager&);    // assignment operator\n    };\n\n    template <\n        typename T\n        >\n    inline void swap (\n        memory_manager<T>& a, \n        memory_manager<T>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_MEMORY_MANAGER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMORY_MANAGEr_\n#define DLIB_MEMORY_MANAGEr_\n\n#include \"memory_manager/memory_manager_kernel_1.h\"\n#include \"memory_manager/memory_manager_kernel_2.h\"\n#include \"memory_manager/memory_manager_kernel_3.h\"\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class memory_manager\n    {\n        memory_manager() {}\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1        \n        typedef      memory_manager_kernel_1<T,0>\n                     kernel_1a;\n        typedef      memory_manager_kernel_1<T,10>\n                     kernel_1b;\n        typedef      memory_manager_kernel_1<T,100>\n                     kernel_1c;\n        typedef      memory_manager_kernel_1<T,1000>\n                     kernel_1d;\n        typedef      memory_manager_kernel_1<T,10000>\n                     kernel_1e;\n        typedef      memory_manager_kernel_1<T,100000>\n                     kernel_1f;\n      \n        // kernel_2        \n        typedef      memory_manager_kernel_2<T,10>\n                     kernel_2a;\n        typedef      memory_manager_kernel_2<T,100>\n                     kernel_2b;\n        typedef      memory_manager_kernel_2<T,1000>\n                     kernel_2c;\n        typedef      memory_manager_kernel_2<T,10000>\n                     kernel_2d;\n        typedef      memory_manager_kernel_2<T,100000>\n                     kernel_2e;\n      \n      \n        // kernel_3        \n        typedef      memory_manager_kernel_3<T,10>\n                     kernel_3a;\n        typedef      memory_manager_kernel_3<T,100>\n                     kernel_3b;\n        typedef      memory_manager_kernel_3<T,1000>\n                     kernel_3c;\n        typedef      memory_manager_kernel_3<T,10000>\n                     kernel_3d;\n        typedef      memory_manager_kernel_3<T,100000>\n                     kernel_3e;\n      \n      \n           \n\n    };\n}\n\n#endif // DLIB_MEMORY_MANAGEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager_global/memory_manager_global_kernel_1.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMORY_MANAGER_GLOBAl_1_\n#define DLIB_MEMORY_MANAGER_GLOBAl_1_\n\n#include \"../algs.h\"\n#include \"../memory_manager/memory_manager_kernel_abstract.h\"\n#include \"memory_manager_global_kernel_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename T,\n        typename factory\n        >\n    class memory_manager_global_kernel_1\n    {\n        /*!      \n            INITIAL VALUE\n                - *global_mm == get_global_memory_manager()\n\n            CONVENTION\n                - global_mm->get_number_of_allocations() == get_number_of_allocations()\n                - *global_mm == get_global_memory_manager()\n        !*/\n        \n        public:\n\n            typedef typename factory::template return_type<T>::type mm_global_type; \n\n            typedef T type;\n\n            template <typename U>\n            struct rebind {\n                typedef memory_manager_global_kernel_1<U,factory> other;\n            };\n\n            memory_manager_global_kernel_1(\n            ) :\n                global_mm(factory::template get_instance<T>())\n            {}\n\n            virtual ~memory_manager_global_kernel_1(\n            )  {}\n\n            unsigned long get_number_of_allocations (\n            ) const { return global_mm->get_number_of_allocations(); }\n\n            mm_global_type& get_global_memory_manager (\n            ) { return *global_mm; }\n\n            T* allocate (\n            )\n            {\n                return global_mm->allocate(); \n            }\n\n            void deallocate (\n                T* item\n            )\n            {\n                global_mm->deallocate(item); \n            }\n\n            T* allocate_array (\n                unsigned long size\n            ) \n            { \n                return global_mm->allocate_array(size); \n            }\n\n            void deallocate_array (\n                T* item\n            ) \n            { \n                global_mm->deallocate_array(item); \n            }\n\n            void swap (\n                memory_manager_global_kernel_1& item\n            )\n            {\n                exchange(item.global_mm, global_mm);\n            }\n\n        private:\n\n            mm_global_type* global_mm;\n\n\n            // restricted functions\n            memory_manager_global_kernel_1(memory_manager_global_kernel_1&);        // copy constructor\n            memory_manager_global_kernel_1& operator=(memory_manager_global_kernel_1&);    // assignment operator\n    };\n\n    template <\n        typename T,\n        typename factory\n        >\n    inline void swap (\n        memory_manager_global_kernel_1<T,factory>& a, \n        memory_manager_global_kernel_1<T,factory>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_MEMORY_MANAGER_GLOBAl_1_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager_global/memory_manager_global_kernel_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MEMORY_MANAGER_GLOBAl_ABSTRACT_\n#ifdef DLIB_MEMORY_MANAGER_GLOBAl_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"../memory_manager/memory_manager_kernel_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename T,\n        typename factory\n        >\n    class memory_manager_global\n    {\n        /*!      \n            REQUIREMENTS ON T\n                T must have a default constructor.      \n\n            REQUIREMENTS ON factory\n                factory must be defined as follows:\n                struct factory\n                {\n                    template <typename U>\n                    struct return_type {\n                        typedef typename memory_manager_type<U> type;\n                    };\n\n                    template <typename U>\n                    static typename return_type<U>::type* get_instance (\n                    );\n                    / *!\n                        ensures\n                            - returns a pointer to an instance of a memory_manager object\n                              where memory_manager_type implements the interface defined \n                              by dlib/memory_manager/memory_manager_kernel_abstract.h\n                    !* /\n                };\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents some kind of global memory manager or memory pool.  \n                It is identical to the memory_manager object except that it gets all of \n                its allocations from a global instance of a memory_manager object which \n                is provided by the factory object's static member get_instance().\n\n            THREAD SAFETY\n                This object is, by itself, threadsafe.  However, if you want to use this\n                object in multiple threads then you must ensure that your factory is\n                threadsafe.  This means its factory::get_instance() method should be \n                threadsafe and the memory_manager object it returns must also be threadsafe.\n        !*/\n        \n        public:\n\n            typedef typename factory::template return_type<T>::type mm_global_type; \n\n            typedef T type;\n\n            template <typename U>\n            struct rebind {\n                typedef memory_manager_global<U,factory> other;\n            };\n\n            memory_manager_global(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                    - #get_global_memory_manager() == the memory manager that was \n                      returned by a call to factory::get_instance<T>()\n                throws\n                    - std::bad_alloc\n            !*/\n\n            virtual ~memory_manager_global(\n            ); \n            /*!\n                ensures\n                    - This destructor has no effect on the global memory_manager\n                      get_global_memory_manager().\n            !*/\n\n            unsigned long get_number_of_allocations (\n            ) const;\n            /*!\n                ensures\n                    - returns get_global_memory_manager().get_number_of_allocations()\n            !*/\n\n            mm_global_type& get_global_memory_manager (\n            );\n            /*!\n                ensures\n                    - returns a reference to the global memory manager instance being\n                      used by *this.\n            !*/\n\n            T* allocate (\n            );\n            /*!\n                ensures\n                    - #get_number_of_allocations() == get_number_of_allocations() + 1\n                    - returns get_global_memory_manager().allocate()\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                        If this exception is thrown then the call to allocate() \n                        has no effect on #*this.\n            !*/\n\n            void deallocate (\n                T* item\n            );\n            /*!\n                requires\n                    - item == is a pointer to memory that was obtained from a call to\n                      the get_global_memory_manager() object's allocate() method.\n                    - the memory pointed to by item hasn't already been deallocated.\n                ensures\n                    - calls get_global_memory_manager().deallocate(item)\n                    - #get_number_of_allocations() == get_number_of_allocations() - 1\n            !*/\n\n            T* allocate_array (\n                unsigned long size\n            );\n            /*!\n                ensures\n                    - #get_number_of_allocations() == get_number_of_allocations() + 1\n                    - returns get_global_memory_manager().allocate_array()\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                        If this exception is thrown then the call to allocate_array() \n                        has no effect on #*this.\n            !*/\n\n            void deallocate_array (\n                T* item\n            );\n            /*!\n                requires\n                    - item == is a pointer to memory that was obtained from a call to\n                      the get_global_memory_manager() object's allocate_array() method.\n                    - the memory pointed to by item hasn't already been deallocated.\n                ensures\n                    - calls get_global_memory_manager().deallocate_array(item)\n                    - #get_number_of_allocations() == get_number_of_allocations() - 1\n            !*/\n\n            void swap (\n                memory_manager_global& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n        private:\n\n            // restricted functions\n            memory_manager_global(memory_manager_global&);        // copy constructor\n            memory_manager_global& operator=(memory_manager_global&);    // assignment operator\n    };\n\n    template <\n        typename T,\n        typename factory\n        >\n    inline void swap (\n        memory_manager_global<T,factory>& a, \n        memory_manager_global<T,factory>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_MEMORY_MANAGER_GLOBAl_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager_global.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMORY_MANAGER_GLOBAl_\n#define DLIB_MEMORY_MANAGER_GLOBAl_\n\n#include \"memory_manager_global/memory_manager_global_kernel_1.h\"\n#include \"memory_manager.h\"\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename factory\n        >\n    class memory_manager_global\n    {\n        memory_manager_global() {}\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1        \n        typedef      memory_manager_global_kernel_1<T,factory>\n                     kernel_1a;\n      \n      \n           \n\n    };\n}\n\n#endif // DLIB_MEMORY_MANAGER_GLOBAl_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager_stateless/memory_manager_stateless_kernel_1.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMORY_MANAGER_STATELESs_1_\n#define DLIB_MEMORY_MANAGER_STATELESs_1_\n\n#include \"memory_manager_stateless_kernel_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename T\n        >\n    class memory_manager_stateless_kernel_1\n    {\n        /*!      \n            this implementation just calls new and delete directly\n        !*/\n        \n        public:\n\n            typedef T type;\n            const static bool is_stateless = true;\n\n            template <typename U>\n            struct rebind {\n                typedef memory_manager_stateless_kernel_1<U> other;\n            };\n\n            memory_manager_stateless_kernel_1(\n            )\n            {}\n\n            virtual ~memory_manager_stateless_kernel_1(\n            ) {}\n\n            T* allocate (\n            )\n            {\n                return new T; \n            }\n\n            void deallocate (\n                T* item\n            )\n            {\n                delete item;\n            }\n\n            T* allocate_array (\n                unsigned long size\n            ) \n            { \n                return new T[size];\n            }\n\n            void deallocate_array (\n                T* item\n            ) \n            { \n                delete [] item;\n            }\n\n            void swap (memory_manager_stateless_kernel_1&)\n            {}\n\n        private:\n\n            // restricted functions\n            memory_manager_stateless_kernel_1(memory_manager_stateless_kernel_1&);        // copy constructor\n            memory_manager_stateless_kernel_1& operator=(memory_manager_stateless_kernel_1&);    // assignment operator\n    };\n\n    template <\n        typename T\n        >\n    inline void swap (\n        memory_manager_stateless_kernel_1<T>& a, \n        memory_manager_stateless_kernel_1<T>& b \n    ) { a.swap(b); }   \n\n}\n\n#endif // DLIB_MEMORY_MANAGER_STATELESs_1_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager_stateless/memory_manager_stateless_kernel_2.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMORY_MANAGER_STATELESs_2_\n#define DLIB_MEMORY_MANAGER_STATELESs_2_\n\n#include \"../algs.h\"\n#include \"memory_manager_stateless_kernel_abstract.h\"\n#include \"../threads.h\"\n\nnamespace dlib\n{\n    template <\n        typename T,\n        typename mem_manager \n        >\n    class memory_manager_stateless_kernel_2\n    {\n        /*!      \n            REQUIREMENTS ON mem_manager\n                mem_manager must be an implementation of memory_manager/memory_manager_kernel_abstract.h\n\n            CONVENTION\n                this object has a single global instance of mem_manager \n        !*/\n\n        public:\n\n            typedef T type;\n            const static bool is_stateless = true;\n\n            template <typename U>\n            struct rebind {\n                typedef memory_manager_stateless_kernel_2<U,mem_manager> other;\n            };\n\n            memory_manager_stateless_kernel_2(\n            )\n            { \n                // call this just to make sure the mutex is is initialized before \n                // multiple threads start calling the member functions.\n                global_mutex();\n            }\n\n            virtual ~memory_manager_stateless_kernel_2(\n            ) {}\n\n            T* allocate (\n            )\n            {\n                auto_mutex M(global_mutex());\n                return global_mm().allocate();\n            }\n\n            void deallocate (\n                T* item\n            )\n            {\n                auto_mutex M(global_mutex());\n                return global_mm().deallocate(item);\n            }\n\n            T* allocate_array (\n                unsigned long size\n            ) \n            { \n                auto_mutex M(global_mutex());\n                return global_mm().allocate_array(size);\n            }\n\n            void deallocate_array (\n                T* item\n            ) \n            { \n                auto_mutex M(global_mutex());\n                return global_mm().deallocate_array(item);\n            }\n\n            void swap (memory_manager_stateless_kernel_2&)\n            {}\n\n        private:\n\n            static mutex& global_mutex (\n            )\n            {\n                static mutex lock;\n                return lock;\n            }\n\n            typedef typename mem_manager::template rebind<T>::other rebound_mm_type; \n\n            static rebound_mm_type& global_mm (\n            ) \n            {\n                static rebound_mm_type mm;\n                return mm;\n            }\n\n            // restricted functions\n            memory_manager_stateless_kernel_2(memory_manager_stateless_kernel_2&);        // copy constructor\n            memory_manager_stateless_kernel_2& operator=(memory_manager_stateless_kernel_2&);    // assignment operator\n    };\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        memory_manager_stateless_kernel_2<T,mem_manager>& a, \n        memory_manager_stateless_kernel_2<T,mem_manager>& b \n    ) { a.swap(b); }   \n\n}\n\n#endif // DLIB_MEMORY_MANAGER_STATELESs_2_\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager_stateless/memory_manager_stateless_kernel_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MEMORY_MANAGER_STATELESs_ABSTRACT_\n#ifdef DLIB_MEMORY_MANAGER_STATELESs_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n    template <\n        typename T\n        >\n    class memory_manager_stateless\n    {\n        /*!      \n            REQUIREMENTS ON T\n                T must have a default constructor.      \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents some kind of stateless memory manager or memory pool.  \n                Stateless means that all instances (instances of the same kernel implementation that is) \n                of this object are identical and can be used interchangeably.  Note that \n                implementations are allowed to have some shared global state such as a \n                global memory pool.\n\n            THREAD SAFETY\n                This object is thread safe.  You may access it from any thread at any time\n                without synchronizing access.\n        !*/\n        \n        public:\n\n            typedef T type;\n            const static bool is_stateless = true;\n\n            template <typename U>\n            struct rebind {\n                typedef memory_manager_stateless<U> other;\n            };\n\n            memory_manager_stateless(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc\n            !*/\n\n            virtual ~memory_manager_stateless(\n            ); \n            /*!\n                ensures\n                    - frees any resources used by *this but has no effect on any shared global\n                      resources used by the implementation.\n            !*/\n\n            T* allocate (\n            );\n            /*!\n                ensures\n                    - allocates a new object of type T and returns a pointer to it.\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                        If this exception is thrown then the call to allocate() \n                        has no effect on #*this.\n            !*/\n\n            void deallocate (\n                T* item\n            );\n            /*!\n                requires\n                    - item == is a pointer to memory that was obtained from a call to\n                      allocate(). (i.e. The pointer you are deallocating must have\n                      come from the same implementation of memory_manager_stateless\n                      that is trying to deallocate it.)\n                    - the memory pointed to by item hasn't already been deallocated.\n                ensures\n                    - deallocates the object pointed to by item\n            !*/\n\n            T* allocate_array (\n                unsigned long size\n            );\n            /*!\n                ensures\n                    - allocates a new array of size objects of type T and returns a \n                      pointer to it.\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                        If this exception is thrown then the call to allocate() \n                        has no effect on #*this.\n            !*/\n\n            void deallocate_array (\n                T* item\n            );\n            /*!\n                requires\n                    - item == is a pointer to memory that was obtained from a call to\n                      allocate_array(). (i.e. The pointer you are deallocating must have\n                      come from the same implementation of memory_manager_stateless\n                      that is trying to deallocate it.)\n                    - the memory pointed to by item hasn't already been deallocated.\n                ensures\n                    - deallocates the array pointed to by item\n            !*/\n\n            void swap (\n                memory_manager_stateless& item\n            );\n            /*!\n                ensures\n                    - this function has no effect on *this or item.  It is just provided \n                      to make this object's interface more compatable with the other \n                      memory managers.\n            !*/ \n\n        private:\n\n            // restricted functions\n            memory_manager_stateless(memory_manager_stateless&);        // copy constructor\n            memory_manager_stateless& operator=(memory_manager_stateless&);    // assignment operator\n    };\n\n    template <\n        typename T\n        >\n    inline void swap (\n        memory_manager_stateless<T>& a, \n        memory_manager_stateless<T>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_MEMORY_MANAGER_STATELESs_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/memory_manager_stateless.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MEMORY_MANAGER_STATELESs_\n#define DLIB_MEMORY_MANAGER_STATELESs_\n\n#include \"memory_manager_stateless/memory_manager_stateless_kernel_1.h\"\n#include \"memory_manager_stateless/memory_manager_stateless_kernel_2.h\"\n#include \"memory_manager.h\"\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class memory_manager_stateless\n    {\n        memory_manager_stateless() {}\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1        \n        typedef      memory_manager_stateless_kernel_1<T>\n                     kernel_1a;\n      \n        // kernel_2        \n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_1a>\n                     kernel_2_1a;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_1b>\n                     kernel_2_1b;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_1c>\n                     kernel_2_1c;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_1d>\n                     kernel_2_1d;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_1e>\n                     kernel_2_1e;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_1f>\n                     kernel_2_1f;\n\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_2a>\n                     kernel_2_2a;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_2b>\n                     kernel_2_2b;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_2c>\n                     kernel_2_2c;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_2d>\n                     kernel_2_2d;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_2e>\n                     kernel_2_2e;\n      \n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_3a>\n                     kernel_2_3a;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_3b>\n                     kernel_2_3b;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_3c>\n                     kernel_2_3c;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_3d>\n                     kernel_2_3d;\n        typedef      memory_manager_stateless_kernel_2<T,memory_manager<char>::kernel_3e>\n                     kernel_2_3e;\n      \n\n    };\n}\n\n#endif // DLIB_MEMORY_MANAGER_STATELESs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/misc_api/misc_api_kernel_1.cpp",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MISC_API_KERNEL_1_CPp_\n#define DLIB_MISC_API_KERNEL_1_CPp_\n\n#include \"../platform.h\"\n#include \"../threads.h\"\n\n#ifdef WIN32\n\n#include \"misc_api_kernel_1.h\"\n\n#include \"../windows_magic.h\"\n#include <windows.h>\n\n#ifdef __BORLANDC__\n// Apparently the borland compiler doesn't define this.\n#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)\n#endif\n\nnamespace dlib\n{\n// ----------------------------------------------------------------------------------------\n\n    void sleep (\n        unsigned long milliseconds\n    )\n    {\n        ::Sleep(milliseconds);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace\n    {\n        mutex& cwd_mutex()\n        {\n            static mutex m;\n            return m;\n        }\n        // Make sure the above mutex gets constructed before main() \n        // starts.  This way we can be pretty sure it will be constructed\n        // before any threads could possibly call set_current_dir() or\n        // get_current_dir() simultaneously.\n        struct construct_cwd_mutex\n        {\n            construct_cwd_mutex()\n            {\n                cwd_mutex();\n            }\n        } oaimvweoinvwe;\n    }\n\n    std::string get_current_dir (\n    )\n    {\n        // need to lock a mutex here because getting and setting the\n        // current working directory is not thread safe on windows.\n        auto_mutex lock(cwd_mutex());\n        char buf[1024];\n        if (GetCurrentDirectoryA(sizeof(buf),buf) == 0)\n        {\n            return std::string();\n        }\n        else\n        {\n            return std::string(buf);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void set_current_dir (\n        const std::string& new_dir\n    )\n    {\n        // need to lock a mutex here because getting and setting the\n        // current working directory is not thread safe on windows.\n        auto_mutex lock(cwd_mutex());\n        if (SetCurrentDirectoryA(new_dir.c_str()) == 0)\n        {\n            throw set_current_dir_error(\"Error changing current dir to '\" + new_dir + \"'\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    uint64 timestamper::\n    get_timestamp (\n    ) const\n    {\n        unsigned long temp = GetTickCount();\n        if (temp >= last_time)\n        {            \n            last_time = temp;\n            return (offset + temp)*1000;\n        }\n        else\n        {\n            last_time = temp;\n\n            // there was overflow since the last call so we need to make the offset\n            // bigger to account for that\n            offset += dword_max;\n            return (offset + temp)*1000;\n        }        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void create_directory (\n        const std::string& dir\n    )\n    {\n        if (CreateDirectoryA(dir.c_str(),0) == 0)\n        {\n            // an error has occurred\n            if (GetLastError() == ERROR_ALREADY_EXISTS)\n            {\n                // make sure this is actually a directory\n                DWORD attribs = GetFileAttributesA(dir.c_str());\n                if (attribs == INVALID_FILE_ATTRIBUTES ||\n                    (attribs&FILE_ATTRIBUTE_DIRECTORY) == 0)\n                {\n                    // it isn't a directory\n                    throw dir_create_error(dir);\n                }\n            }\n            else\n            {\n                throw dir_create_error(dir);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n}\n\n#endif // WIN32\n\n#endif // DLIB_MISC_API_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/misc_api/misc_api_kernel_1.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MISC_API_KERNEl_1_\n#define DLIB_MISC_API_KERNEl_1_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n\n#include \"misc_api_kernel_abstract.h\"\n#include \"../algs.h\"\n#include <string>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    void sleep (\n        unsigned long milliseconds\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    std::string get_current_dir (\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    class set_current_dir_error : public error\n    {\n    public:\n        set_current_dir_error(\n            const std::string& a\n        ): error(a) {}\n    };\n\n    void set_current_dir (\n        const std::string& new_dir\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    class timestamper \n    {\n        /*!\n            INITIAL VALUE\n                - last_time == 0\n                - offset == 0\n                - dword_max == 2^32\n\n            CONVENTION\n                - last_time == the time returned by GetTickCount() the last time we\n                  called it.\n                - offset == the number of microseconds we should add to the result of\n                  GetTickCount() so that it is correct.\n                - dword_max == 2^32.  \n                  This is the number of values representable by a DWORD.  \n        !*/\n\n        mutable unsigned long last_time;\n        mutable uint64 offset;\n        mutable uint64 dword_max;\n\n    public:\n        timestamper(\n        ) :\n            last_time(0),\n            offset(0)\n        {\n            dword_max = 0xFFFFFFFF;\n            ++dword_max;\n        }\n\n        uint64 get_timestamp (\n        ) const;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class dir_create_error : public error \n    {\n    public:\n        dir_create_error(\n            const std::string& dir_name\n        ) : \n            error(EDIR_CREATE,\"Error creating directory '\" + dir_name + \"'.\"),\n            name(dir_name)\n        {}\n\n        ~dir_create_error() throw() {}\n        const std::string name;\n    }; \n\n    void create_directory (\n        const std::string& dir\n    );\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"misc_api_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_MISC_API_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/misc_api/misc_api_kernel_2.cpp",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MISC_API_KERNEL_2_CPp_\n#define DLIB_MISC_API_KERNEL_2_CPp_\n#include \"../platform.h\"\n\n#ifdef POSIX\n\n#include <unistd.h>\n#include \"misc_api_kernel_2.h\"\n#include <sys/time.h>\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <errno.h>\n\nnamespace dlib\n{\n// ----------------------------------------------------------------------------------------\n\n    void sleep (\n        unsigned long milliseconds\n    )\n    {\n        // in HP-UX you can only usleep for less than a second \n#ifdef HPUX\n        if (milliseconds >= 1000)\n        {\n            ::sleep(milliseconds/1000);\n            unsigned long remaining = milliseconds%1000;\n            if (remaining > 0)\n                ::usleep(remaining*1000);\n        }\n        else\n        {\n            ::usleep(milliseconds*1000);\n        }\n#else\n        ::usleep(milliseconds*1000);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::string get_current_dir (\n    )\n    {\n        char buf[1024];\n        if (getcwd(buf,sizeof(buf)) == 0)\n        {\n            return std::string();\n        }\n        else\n        {\n            return std::string(buf);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void set_current_dir (\n        const std::string& new_dir\n    )\n    {\n        if (chdir(new_dir.c_str()))\n        {\n            throw set_current_dir_error(\"Error changing current dir to '\" + new_dir + \"'\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    uint64 timestamper::\n    get_timestamp (\n    ) const\n    {\n        uint64 ts;\n        timeval curtime;\n        gettimeofday(&curtime,0);       \n\n        ts = curtime.tv_sec;\n        ts *= 1000000;\n        ts += curtime.tv_usec;\n        return ts;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void create_directory (\n        const std::string& dir\n    )\n    {\n        if (mkdir(dir.c_str(),0777))\n        {\n            // an error has occurred\n            if (errno == EEXIST)\n            {\n                struct stat buffer;\n                // now check that this is actually a valid directory\n                if (::stat(dir.c_str(),&buffer))\n                {\n                    // the directory was not found\n                    throw dir_create_error(dir);\n                }\n                else if (S_ISDIR(buffer.st_mode) == 0)\n                {\n                    // It is not a directory\n                    throw dir_create_error(dir);\n                }\n            }\n            else\n            {\n                throw dir_create_error(dir);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n}\n\n#endif // POSIX\n\n#endif // DLIB_MISC_API_KERNEL_2_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/misc_api/misc_api_kernel_2.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MISC_API_KERNEl_2_\n#define DLIB_MISC_API_KERNEl_2_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n\n#include \"misc_api_kernel_abstract.h\"\n#include \"../algs.h\"\n#include <string>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    void sleep (\n        unsigned long milliseconds\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    std::string get_current_dir (\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    class set_current_dir_error : public error\n    {\n    public:\n        set_current_dir_error(\n            const std::string& a\n        ): error(a) {}\n    };\n\n    void set_current_dir (\n        const std::string& new_dir\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    class timestamper \n    {\n    public:\n        uint64 get_timestamp (\n        ) const;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class dir_create_error : public error \n    {\n    public:\n        dir_create_error(\n            const std::string& dir_name\n        ) : \n            error(EDIR_CREATE,\"Error creating directory '\" + dir_name + \"'.\"),\n            name(dir_name)\n        {}\n        const std::string& name;\n    }; \n\n\n    void create_directory (\n        const std::string& dir\n    );\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"misc_api_kernel_2.cpp\"\n#endif\n\n#endif // DLIB_MISC_API_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/misc_api/misc_api_kernel_abstract.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MISC_API_KERNEl_ABSTRACT_\n#ifdef DLIB_MISC_API_KERNEl_ABSTRACT_\n\n#include <string>\n#include \"../uintn.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*!\n        GENERAL COMMENTS\n            This file just contains miscellaneous api functions\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void sleep (\n        unsigned long milliseconds\n    );\n    /*!\n        ensures\n            - causes the calling thread to sleep for the given number of \n              milliseconds.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    std::string get_current_dir (\n    );\n    /*!\n        ensures\n            - if (no errors occur) then\n                - returns the path to the current working directory\n            - else\n                - returns \"\"\n        throws\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class set_current_dir_error : public error;\n\n    void set_current_dir (\n        const std::string& new_dir\n    );\n    /*!\n        ensures\n            - sets the current working directory to new_dir\n        throws\n            - std::bad_alloc\n            - set_current_dir_error\n              This exception is thrown if there is an error when attempting\n              to change the current working directory.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class locally_change_current_dir : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a RAII tool for safely switching the current directory\n                to a new directory and then automatically switching back to the original\n                directory upon this object's destruction.\n        !*/\n    public:\n        explicit locally_change_current_dir (\n            const std::string& new_dir\n        );\n        /*!\n            ensures\n                - calls set_current_dir(new_dir)\n                - #old_dir() == The value of get_current_dir() prior to switching to new_dir.\n        !*/\n\n        const std::string& old_dir (\n        ) const;\n        /*!\n            ensures\n                - returns the directory we switch back to once this object is destructed.\n        !*/\n\n        ~locally_change_current_dir(\n        );\n        /*!\n            ensures\n                - calls set_current_dir(old_dir())\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class dir_create_error : public error { \n    public:\n        const std::string name\n    }; \n\n    void create_directory (\n        const std::string& dir\n    );\n    /*!\n        ensures\n            - if (dir does not already exist) then\n                - creates the given directory.\n            - else\n                - the call to create_directory() has no effect.\n        throws\n            - dir_create_error\n                This exception is thrown if we were unable to create the requested\n                directory and it didn't already exist.  The type member of the exception \n                will bet set to EDIR_CREATE and the name member will be set to dir.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class timestamper \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a timer that is capable of returning \n                timestamps.\n\n                Note that the time is measured in microseconds but you are not \n                guaranteed to have that level of resolution.  The actual resolution\n                is implementation dependent.\n        !*/\n\n    public:\n        uint64 get_timestamp (\n        ) const;\n        /*!\n            ensures\n                - returns a timestamp that measures the time in microseconds since an \n                  arbitrary point in the past.  Note that this arbitrary point remains\n                  the same between all calls to get_timestamp().\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MISC_API_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/misc_api/misc_api_shared.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MISC_API_ShARED_Hh_\n#define DLIB_MISC_API_ShARED_Hh_\n\n#include <string>\n#include \"../noncopyable.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class locally_change_current_dir : noncopyable\n    {\n    public:\n        explicit locally_change_current_dir (\n            const std::string& new_dir\n        )\n        {\n            _old_dir = get_current_dir();\n            set_current_dir(new_dir);\n        }\n\n        ~locally_change_current_dir()\n        {\n            set_current_dir(_old_dir);\n        }\n\n        const std::string& old_dir (\n        ) const \n        {\n            return _old_dir;\n        }\n\n    private:\n        std::string _old_dir;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MISC_API_ShARED_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/misc_api/posix.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MISC_API_KERNEl_1_\n#include \"misc_api_kernel_2.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/misc_api/windows.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MISC_API_KERNEl_2_\n#include \"misc_api_kernel_1.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/misc_api.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#ifndef DLIB_MISC_APi_\n#define DLIB_MISC_APi_\n\n#include \"platform.h\"\n\n#ifdef WIN32\n#include \"misc_api/windows.h\"\n#endif\n\n#ifndef WIN32\n#include \"misc_api/posix.h\"\n#endif\n\n#include \"misc_api/misc_api_shared.h\"\n\n#endif // DLIB_MISC_APi_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/mlp/mlp_kernel_1.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MLp_KERNEL_1_\n#define DLIB_MLp_KERNEL_1_\n\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../matrix.h\"\n#include \"../rand.h\"\n#include \"mlp_kernel_abstract.h\"\n#include <ctime>\n#include <sstream>\n\nnamespace dlib\n{\n\n    class mlp_kernel_1 : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                The network is initially initialized with random weights \n\n            CONVENTION\n                - input_layer_nodes() == input_nodes\n                - first_hidden_layer_nodes() == first_hidden_nodes\n                - second_hidden_layer_nodes() == second_hidden_nodes\n                - output_layer_nodes() == output_nodes\n                - get_alpha == alpha\n                - get_momentum() == momentum\n\n\n                - if (second_hidden_nodes == 0) then\n                    - for all i and j:\n                        - w1(i,j) == the weight on the link from node i in the first hidden layer \n                          to input node j\n                        - w3(i,j) == the weight on the link from node i in the output layer \n                          to first hidden layer node j\n                    - for all i and j:\n                        - w1m == the momentum terms for w1 from the previous update \n                        - w3m == the momentum terms for w3 from the previous update \n                - else\n                    - for all i and j:\n                        - w1(i,j) == the weight on the link from node i in the first hidden layer \n                          to input node j\n                        - w2(i,j) == the weight on the link from node i in the second hidden layer \n                          to first hidden layer node j\n                        - w3(i,j) == the weight on the link from node i in the output layer \n                          to second hidden layer node j\n                    - for all i and j:\n                        - w1m == the momentum terms for w1 from the previous update \n                        - w2m == the momentum terms for w2 from the previous update \n                        - w3m == the momentum terms for w3 from the previous update \n        !*/\n\n    public:\n\n        mlp_kernel_1 (\n            long nodes_in_input_layer,\n            long nodes_in_first_hidden_layer, \n            long nodes_in_second_hidden_layer = 0, \n            long nodes_in_output_layer = 1,\n            double alpha_ = 0.1,\n            double momentum_ = 0.8\n        ) :\n            input_nodes(nodes_in_input_layer),\n            first_hidden_nodes(nodes_in_first_hidden_layer),\n            second_hidden_nodes(nodes_in_second_hidden_layer),\n            output_nodes(nodes_in_output_layer),\n            alpha(alpha_),\n            momentum(momentum_)\n        {\n\n            // seed the random number generator\n            std::ostringstream sout;\n            sout << time(0);\n            rand_nums.set_seed(sout.str());\n\n            w1.set_size(first_hidden_nodes+1, input_nodes+1);\n            w1m.set_size(first_hidden_nodes+1, input_nodes+1);\n            z.set_size(input_nodes+1,1);\n\n            if (second_hidden_nodes != 0)\n            {\n                w2.set_size(second_hidden_nodes+1, first_hidden_nodes+1);\n                w3.set_size(output_nodes, second_hidden_nodes+1);\n\n                w2m.set_size(second_hidden_nodes+1, first_hidden_nodes+1);\n                w3m.set_size(output_nodes, second_hidden_nodes+1);\n            }\n            else\n            {\n                w3.set_size(output_nodes, first_hidden_nodes+1);\n\n                w3m.set_size(output_nodes, first_hidden_nodes+1);\n            }\n\n            reset();\n        }\n\n        virtual ~mlp_kernel_1 (\n        ) {}\n\n        void reset (\n        ) \n        {\n            // randomize the weights for the first layer\n            for (long r = 0; r < w1.nr(); ++r)\n                for (long c = 0; c < w1.nc(); ++c)\n                    w1(r,c) = rand_nums.get_random_double();\n\n            // randomize the weights for the second layer\n            for (long r = 0; r < w2.nr(); ++r)\n                for (long c = 0; c < w2.nc(); ++c)\n                    w2(r,c) = rand_nums.get_random_double();\n\n            // randomize the weights for the third layer\n            for (long r = 0; r < w3.nr(); ++r)\n                for (long c = 0; c < w3.nc(); ++c)\n                    w3(r,c) = rand_nums.get_random_double();\n\n            // zero all the momentum terms\n            set_all_elements(w1m,0);\n            set_all_elements(w2m,0);\n            set_all_elements(w3m,0);\n        }\n\n        long input_layer_nodes (\n        ) const { return input_nodes; }\n\n        long first_hidden_layer_nodes (\n        ) const { return first_hidden_nodes; }\n\n        long second_hidden_layer_nodes (\n        ) const { return second_hidden_nodes; }\n\n        long output_layer_nodes (\n        ) const { return output_nodes; }\n\n        double get_alpha (\n        ) const { return alpha; }\n\n        double get_momentum (\n        ) const { return momentum; }\n\n        template <typename EXP>\n        const matrix<double> operator() (\n            const matrix_exp<EXP>& in \n        ) const\n        {\n            for (long i = 0; i < in.nr(); ++i)\n                z(i) = in(i);\n            // insert the bias \n            z(z.nr()-1) = -1;\n\n            tmp1 = sigmoid(w1*z);\n            // insert the bias \n            tmp1(tmp1.nr()-1) = -1;\n\n            if (second_hidden_nodes == 0)\n            {\n                return sigmoid(w3*tmp1);\n            }\n            else\n            {\n                tmp2 = sigmoid(w2*tmp1);\n                // insert the bias \n                tmp2(tmp2.nr()-1) = -1;\n\n                return sigmoid(w3*tmp2);\n            }\n        }\n\n        template <typename EXP1, typename EXP2>\n        void train (\n            const matrix_exp<EXP1>& example_in,\n            const matrix_exp<EXP2>& example_out \n        )\n        {\n            for (long i = 0; i < example_in.nr(); ++i)\n                z(i) = example_in(i);\n            // insert the bias \n            z(z.nr()-1) = -1;\n\n            tmp1 = sigmoid(w1*z);\n            // insert the bias \n            tmp1(tmp1.nr()-1) = -1;\n\n\n            if (second_hidden_nodes == 0)\n            {\n                o = sigmoid(w3*tmp1);\n\n                // now compute the errors and propagate them backwards though the network\n                e3 = pointwise_multiply(example_out-o, uniform_matrix<double>(output_nodes,1,1.0)-o, o);\n                e1 = pointwise_multiply(tmp1, uniform_matrix<double>(first_hidden_nodes+1,1,1.0) - tmp1, trans(w3)*e3 );\n\n                // compute the new weight updates\n                w3m = alpha * e3*trans(tmp1) + w3m*momentum;\n                w1m = alpha * e1*trans(z)    + w1m*momentum;\n\n                // now update the weights\n                w1 += w1m;\n                w3 += w3m;\n            }\n            else\n            {\n                tmp2 = sigmoid(w2*tmp1);\n                // insert the bias \n                tmp2(tmp2.nr()-1) = -1;\n\n                o = sigmoid(w3*tmp2);\n\n\n                // now compute the errors and propagate them backwards though the network\n                e3 = pointwise_multiply(example_out-o, uniform_matrix<double>(output_nodes,1,1.0)-o, o);\n                e2 = pointwise_multiply(tmp2, uniform_matrix<double>(second_hidden_nodes+1,1,1.0) - tmp2, trans(w3)*e3 );\n                e1 = pointwise_multiply(tmp1, uniform_matrix<double>(first_hidden_nodes+1,1,1.0) - tmp1, trans(w2)*e2 );\n\n                // compute the new weight updates\n                w3m = alpha * e3*trans(tmp2) + w3m*momentum;\n                w2m = alpha * e2*trans(tmp1) + w2m*momentum;\n                w1m = alpha * e1*trans(z)    + w1m*momentum;\n\n                // now update the weights\n                w1 += w1m;\n                w2 += w2m;\n                w3 += w3m;\n            }\n        }\n\n        template <typename EXP>\n        void train (\n            const matrix_exp<EXP>& example_in,\n            double example_out\n        )\n        {\n            matrix<double,1,1> e_out;\n            e_out(0) = example_out;\n            train(example_in,e_out);\n        }\n\n        double get_average_change (\n        ) const\n        {\n            // sum up all the weight changes\n            double delta = sum(abs(w1m)) + sum(abs(w2m)) + sum(abs(w3m));\n\n            // divide by the number of weights\n            delta /=  w1m.nr()*w1m.nc() + \n                w2m.nr()*w2m.nc() + \n                w3m.nr()*w3m.nc();\n\n            return delta;\n        }\n\n        void swap (\n            mlp_kernel_1& item\n        )\n        {\n            exchange(input_nodes, item.input_nodes);\n            exchange(first_hidden_nodes, item.first_hidden_nodes);\n            exchange(second_hidden_nodes, item.second_hidden_nodes);\n            exchange(output_nodes, item.output_nodes);\n            exchange(alpha, item.alpha);\n            exchange(momentum, item.momentum);\n\n            w1.swap(item.w1);\n            w2.swap(item.w2);\n            w3.swap(item.w3);\n\n            w1m.swap(item.w1m);\n            w2m.swap(item.w2m);\n            w3m.swap(item.w3m);\n\n            // even swap the temporary matrices because this may ultimately result in \n            // fewer calls to new and delete.\n            e1.swap(item.e1);\n            e2.swap(item.e2);\n            e3.swap(item.e3);\n            z.swap(item.z);\n            tmp1.swap(item.tmp1);\n            tmp2.swap(item.tmp2);\n            o.swap(item.o);\n        }\n\n\n        friend void serialize (\n            const mlp_kernel_1& item, \n            std::ostream& out\n        );\n\n        friend void deserialize (\n            mlp_kernel_1& item, \n            std::istream& in\n        );\n\n    private:\n\n        long input_nodes;\n        long first_hidden_nodes;\n        long second_hidden_nodes;\n        long output_nodes;\n        double alpha;\n        double momentum;\n\n        matrix<double> w1;\n        matrix<double> w2;\n        matrix<double> w3;\n\n        matrix<double> w1m;\n        matrix<double> w2m;\n        matrix<double> w3m;\n\n\n        rand rand_nums;\n\n        // temporary storage\n        mutable matrix<double> e1, e2, e3;\n        mutable matrix<double> z, tmp1, tmp2, o;\n    };   \n\n    inline void swap (\n        mlp_kernel_1& a, \n        mlp_kernel_1& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const mlp_kernel_1& item, \n        std::ostream& out\n    )   \n    {\n        try\n        {\n            serialize(item.input_nodes, out);\n            serialize(item.first_hidden_nodes, out);\n            serialize(item.second_hidden_nodes, out);\n            serialize(item.output_nodes, out);\n            serialize(item.alpha, out);\n            serialize(item.momentum, out);\n\n            serialize(item.w1, out);\n            serialize(item.w2, out);\n            serialize(item.w3, out);\n\n            serialize(item.w1m, out);\n            serialize(item.w2m, out);\n            serialize(item.w3m, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type mlp_kernel_1\"); \n        }\n    }\n\n    inline void deserialize (\n        mlp_kernel_1& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            deserialize(item.input_nodes, in);\n            deserialize(item.first_hidden_nodes, in);\n            deserialize(item.second_hidden_nodes, in);\n            deserialize(item.output_nodes, in);\n            deserialize(item.alpha, in);\n            deserialize(item.momentum, in);\n\n            deserialize(item.w1, in);\n            deserialize(item.w2, in);\n            deserialize(item.w3, in);\n\n            deserialize(item.w1m, in);\n            deserialize(item.w2m, in);\n            deserialize(item.w3m, in);\n\n            item.z.set_size(item.input_nodes+1,1);\n        }\n        catch (serialization_error& e)\n        { \n            // give item a reasonable value since the deserialization failed\n            mlp_kernel_1(1,1).swap(item);\n            throw serialization_error(e.info + \"\\n   while deserializing object of type mlp_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MLp_KERNEL_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/mlp/mlp_kernel_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MLp_ABSTRACT_\n#ifdef DLIB_MLp_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../matrix/matrix_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class mlp : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                The network is initially initialized with random weights \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a multilayer layer perceptron network that is\n                trained using the back propagation algorithm.  The training algorithm also\n                incorporates the momentum method.  That is, each round of back propagation\n                training also adds a fraction of the previous update.  This fraction\n                is controlled by the momentum term set in the constructor.  \n\n                The activation function used at each node is the sigmoid function.  I.e.\n                sigmoid(x) = 1/(1 + pow(e,-x)).  Thus the output of the network is\n                always in the range [0,1]\n        !*/\n\n    public:\n\n        mlp (\n            long nodes_in_input_layer,\n            long nodes_in_first_hidden_layer, \n            long nodes_in_second_hidden_layer = 0, \n            long nodes_in_output_layer = 1,\n            double alpha = 0.1,\n            double momentum = 0.8\n        );\n        /*!\n            requires\n                - nodes_in_input_layer > 0\n                - nodes_in_first_hidden_layer > 0\n                - nodes_in_second_hidden_layer >= 0\n                - nodes_in_output_layer > 0\n            ensures\n                - #*this is properly initialized \n                - #input_layer_nodes() == nodes_in_input_layer\n                - #first_hidden_layer_nodes() == nodes_in_first_hidden_layer\n                - #second_hidden_layer_nodes() == nodes_in_second_hidden_layer\n                - #output_layer_nodes() == nodes_in_output_layer\n                - #get_alpha() == alpha\n                - #get_momentum() == momentum\n            throws\n                - std::bad_alloc\n                    if this is thrown the mlp will be unusable but \n                    will not leak memory\n        !*/\n\n        virtual ~mlp (\n        );\n        /*!\n            ensures\n                - all resources associated with #*this have been released\n        !*/\n\n        void reset (\n        ) const;\n        /*!\n            ensures\n                - reinitialize the network with random weights\n        !*/\n\n        long input_layer_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of nodes in the input layer\n        !*/\n\n        long first_hidden_layer_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of nodes in the first hidden layer.  This is\n                  the hidden layer that is directly connected to the input layer.\n        !*/\n\n        long second_hidden_layer_nodes (\n        ) const;\n        /*!\n            ensures\n                - if (this network has a second hidden layer) then\n                    - returns the number of nodes in the second hidden layer.  This is \n                      the hidden layer that is directly connected to the output layer.\n                - else\n                    - returns 0\n        !*/\n\n        long output_layer_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of nodes in the output layer\n        !*/\n\n        double get_alpha (\n        ) const;\n        /*!\n            ensures\n                - returns the back propagation learning rate used by this object.\n        !*/\n\n        double get_momentum (\n        ) const;\n        /*!\n            ensures\n                - returns the momentum term used by this object during back propagation\n                  training.  The momentum is is the fraction of a previous update to \n                  carry forward to the next call to train()\n        !*/\n\n        template <typename EXP>\n        const matrix<double> operator() (\n            const matrix_exp<EXP>& in \n        ) const;\n        /*!\n            requires\n                - in.nr() == input_layer_nodes()\n                - in.nc() == 1\n                - EXP::type == double\n            ensures\n                - returns the output of the network when it is given the\n                  input in.  The output's elements are always in the range\n                  of 0.0 to 1.0\n        !*/\n\n        template <typename EXP1, typename EXP2>\n        void train (\n            const matrix_exp<EXP1>& example_in,\n            const matrix_exp<EXP2>& example_out \n        );\n        /*!\n            requires\n                - example_in.nr() == input_layer_nodes()\n                - example_in.nc() == 1\n                - example_out.nr() == output_layer_nodes()\n                - example_out.nc() == 1\n                - max(example_out) <= 1.0 && min(example_out) >= 0.0\n                - EXP1::type == double\n                - EXP2::type == double\n            ensures\n                - trains the network that the correct output when given example_in \n                  should be example_out.\n        !*/\n\n        template <typename EXP>\n        void train (\n            const matrix_exp<EXP>& example_in,\n            double example_out\n        );\n        /*!\n            requires\n                - example_in.nr() == input_layer_nodes()\n                - example_in.nc() == 1\n                - output_layer_nodes() == 1\n                - example_out <= 1.0 && example_out >= 0.0\n                - EXP::type == double\n            ensures\n                - trains the network that the correct output when given example_in \n                  should be example_out.\n        !*/\n\n        double get_average_change (\n        ) const;\n        /*!\n            ensures\n                - returns the average change in the node weights in the\n                  neural network during the last call to train()\n        !*/\n\n        void swap (\n            mlp& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };   \n   \n    inline void swap (\n        mlp& a, \n        mlp& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    void serialize (\n        const mlp& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        mlp& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MLp_ABSTRACT_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/mlp/mlp_kernel_c.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MLP_KERNEl_C_\n#define DLIB_MLP_KERNEl_C_\n\n#include \"mlp_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n\n    template <\n        typename mlp_base // is an implementation of mlp_kernel_abstract.h\n        >\n    class mlp_kernel_c : public mlp_base\n    {\n        long verify_constructor_args (\n            long nodes_in_input_layer,\n            long nodes_in_first_hidden_layer, \n            long nodes_in_second_hidden_layer, \n            long nodes_in_output_layer\n            )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(nodes_in_input_layer > 0 &&\n                    nodes_in_first_hidden_layer > 0 &&\n                    nodes_in_second_hidden_layer >= 0 &&\n                    nodes_in_output_layer > 0,\n                    \"\\tconst mlp::constructor()\"\n                    << \"\\n\\tinvalid constructor arguments\"\n                    << \"\\n\\tnodes_in_input_layer:         \" << nodes_in_input_layer \n                    << \"\\n\\tnodes_in_first_hidden_layer:  \" << nodes_in_first_hidden_layer \n                    << \"\\n\\tnodes_in_second_hidden_layer: \" << nodes_in_second_hidden_layer \n                    << \"\\n\\tnodes_in_output_layer:        \" << nodes_in_output_layer \n            );\n\n            return nodes_in_input_layer;\n        }\n\n    public:\n\n        mlp_kernel_c (\n            long nodes_in_input_layer,\n            long nodes_in_first_hidden_layer, \n            long nodes_in_second_hidden_layer = 0, \n            long nodes_in_output_layer = 1,\n            double alpha = 0.1,\n            double momentum = 0.8\n        ) : mlp_base( verify_constructor_args(\n                        nodes_in_input_layer, \n                        nodes_in_input_layer, \n                        nodes_in_second_hidden_layer,\n                        nodes_in_output_layer),\n                      nodes_in_first_hidden_layer,\n                      nodes_in_second_hidden_layer,\n                      nodes_in_output_layer,\n                      alpha,\n                      momentum)\n        {\n        }\n\n        template <typename EXP>\n        const matrix<double> operator() (\n            const matrix_exp<EXP>& in \n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(in.nr() == this->input_layer_nodes() &&\n                    in.nc() == 1,\n                    \"\\tconst matrix<double> mlp::operator()(matrix_exp)\"\n                    << \"\\n\\tthe input matrix dimensions are not correct\"\n                    << \"\\n\\tin.nr():             \" << in.nr() \n                    << \"\\n\\tin.nc():             \" << in.nc() \n                    << \"\\n\\tinput_layer_nodes(): \" << this->input_layer_nodes() \n                    << \"\\n\\tthis:                \" << this\n            );\n\n            return mlp_base::operator()(in);\n        }\n\n        template <typename EXP1, typename EXP2>\n        void train (\n            const matrix_exp<EXP1>& example_in,\n            const matrix_exp<EXP2>& example_out \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(example_in.nr() == this->input_layer_nodes() &&\n                    example_in.nc() == 1 &&\n                    example_out.nr() == this->output_layer_nodes() &&\n                    example_out.nc() == 1 &&\n                    max(example_out) <= 1.0 && min(example_out) >= 0.0,\n                    \"\\tvoid mlp::train(matrix_exp, matrix_exp)\"\n                    << \"\\n\\tthe training example dimensions are not correct\"\n                    << \"\\n\\texample_in.nr():      \" << example_in.nr() \n                    << \"\\n\\texample_in.nc():      \" << example_in.nc() \n                    << \"\\n\\texample_out.nr():     \" << example_out.nr() \n                    << \"\\n\\texample_out.nc():     \" << example_out.nc() \n                    << \"\\n\\tmax(example_out):     \" << max(example_out) \n                    << \"\\n\\tmin(example_out):     \" << min(example_out) \n                    << \"\\n\\tinput_layer_nodes():  \" << this->input_layer_nodes() \n                    << \"\\n\\toutput_layer_nodes(): \" << this->output_layer_nodes() \n                    << \"\\n\\tthis:                 \" << this\n            );\n\n            mlp_base::train(example_in,example_out);\n        }\n\n        template <typename EXP>\n        void train (\n            const matrix_exp<EXP>& example_in,\n            double example_out\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(example_in.nr() == this->input_layer_nodes() &&\n                    example_in.nc() == 1 &&\n                    this->output_layer_nodes() == 1 &&\n                    example_out <= 1.0 && example_out >= 0.0,\n                    \"\\tvoid mlp::train(matrix_exp, double)\"\n                    << \"\\n\\tthe training example dimensions are not correct\"\n                    << \"\\n\\texample_in.nr():      \" << example_in.nr() \n                    << \"\\n\\texample_in.nc():      \" << example_in.nc() \n                    << \"\\n\\texample_out:          \" << example_out \n                    << \"\\n\\tinput_layer_nodes():  \" << this->input_layer_nodes() \n                    << \"\\n\\toutput_layer_nodes(): \" << this->output_layer_nodes() \n                    << \"\\n\\tthis:                 \" << this\n            );\n\n            mlp_base::train(example_in,example_out);\n        }\n\n    };\n\n    template <\n        typename mlp_base\n        >\n    inline void swap (\n        mlp_kernel_c<mlp_base>& a, \n        mlp_kernel_c<mlp_base>& b \n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MLP_KERNEl_C_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/mlp.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MLp_\n#define DLIB_MLp_\n\n#include \"mlp/mlp_kernel_1.h\"\n#include \"mlp/mlp_kernel_c.h\"\n\nnamespace dlib\n{\n\n    class mlp\n    {\n        mlp() {}\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     mlp_kernel_1    \n                    kernel_1a;\n        typedef     mlp_kernel_c<kernel_1a >\n                    kernel_1a_c;   \n\n    };\n}\n\n#endif // DLIB_MLp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/noncopyable.h",
    "content": "//  (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//  Contributed by Dave Abrahams\n//  See http://www.boost.org/libs/utility for documentation.\n\n#ifndef DLIB_BOOST_NONCOPYABLE_HPP_INCLUDED\n#define DLIB_BOOST_NONCOPYABLE_HPP_INCLUDED\n\n\nnamespace dlib\n{\n    class noncopyable\n    {\n        /*!\n            This class makes it easier to declare a class as non-copyable.\n            If you want to make an object that can't be copied just inherit\n            from this object.\n        !*/\n\n    protected:\n        noncopyable() {}\n        ~noncopyable() {}\n    private:  // emphasize the following members are private\n        noncopyable(const noncopyable&);\n        const noncopyable& operator=(const noncopyable&);\n\n    };\n}\n\n#endif  // DLIB_BOOST_NONCOPYABLE_HPP_INCLUDED"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/numeric_constants.h",
    "content": "//Copyright (C) 2013 Steve Taylor (steve98654@gmail.com), Davis E. King\n//License: Boost Software License.  See LICENSE.txt for full license.\n#ifndef DLIB_NUMERIC_CONSTANTs_H_\n#define DLIB_NUMERIC_CONSTANTs_H_\n\nnamespace dlib \n{\n\n    // pi -- Pi\n    const double pi = 3.1415926535897932385;\n\n    // e  -- Euler's Constant\n    const double e = 2.7182818284590452354;\n\n    // sqrt_2 -- The square root of 2\n    const double sqrt_2 = 1.4142135623730950488;\n\n    // sqrt_3 -- The square root of 3\n    const double sqrt_3 = 1.7320508075688772935;\n\n    // log10_2 -- The logarithm base 10 of two\n    const double log10_2 = 0.30102999566398119521;\n\n    // light_spd -- The speed of light in vacuum in meters per second\n    const double light_spd = 2.99792458e8;\n\n    // newton_G  -- Newton's gravitational constant (in metric units of m^3/(kg*s^2))\n    const double newton_G = 6.67384e-11;\n\n    // planck_cst -- Planck's constant (in units of Joules * seconds) \n    const double planck_cst = 6.62606957e-34;\n\n    // golden_ratio -- The Golden Ratio\n    const double golden_ratio = 1.6180339887498948482;\n\n    // euler_gamma -- The Euler Mascheroni Constant \n    const double euler_gamma = 0.5772156649015328606065;\n\n    // catalan -- Catalan's Constant\n    const double catalan = 0.91596559417721901505; \n\n    // glaisher -- Glaisher Kinkelin constant\n    const double glaisher = 1.2824271291006226369;\n\n    // khinchin -- Khinchin's constant\n    const double khinchin = 2.6854520010653064453;\n\n    // apery -- Apery's constant\n    const double apery = 1.2020569031595942854;\n}\n\n#endif //DLIB_NUMERIC_CONSTANTs_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/numerical_integration/integrate_function_adapt_simpson.h",
    "content": "// Copyright (C) 2013 Steve Taylor (steve98654@gmail.com)\n// License: Boost Software License  See LICENSE.txt for full license\n#ifndef DLIB_INTEGRATE_FUNCTION_ADAPT_SIMPSONh_\n#define DLIB_INTEGRATE_FUNCTION_ADAPT_SIMPSONh_\n\n#include \"integrate_function_adapt_simpson_abstract.h\"\n#include \"../assert.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    template <typename T, typename funct>\n    T impl_adapt_simp_stop(const funct& f, T a, T b, T fa, T fm, T fb, T is, int cnt)\n    {\n        const int maxint = 500;\n\n        T m   = (a + b)/2.0;\n        T h   = (b - a)/4.0;\n        T fml = f(a + h);\n        T fmr = f(b - h);\n        T i1 = h/1.5*(fa+4.0*fm+fb);\n        T i2 = h/3.0*(fa+4.0*(fml+fmr)+2.0*fm+fb);\n        i1 = (16.0*i2 - i1)/15.0;\n        T Q = 0;\n\n        if ((std::abs(i1-i2) <= std::abs(is)) || (m <= a) || (b <= m))\n        {\n            Q = i1;\n        }\n        else \n        {\n            if(cnt < maxint)\n            {\n                cnt = cnt + 1;\n\n                Q = impl_adapt_simp_stop(f,a,m,fa,fml,fm,is,cnt) \n                    + impl_adapt_simp_stop(f,m,b,fm,fmr,fb,is,cnt); \n            }\n        }\n\n        return Q;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename funct>\n    T integrate_function_adapt_simp(\n        const funct& f,\n        T a,\n        T b,\n        T tol = 1e-10\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(b > a && tol > 0,\n            \"\\t T integrate_function_adapt_simp()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            << \"\\n\\t a:   \" << a\n            << \"\\n\\t b:   \" << b\n            << \"\\n\\t tol: \" << tol \n            );\n\n        T eps = std::numeric_limits<T>::epsilon();\n        if(tol < eps)\n        {\n            tol = eps;\n        }\n\n        const T ba = b-a;\n        const T fa = f(a);\n        const T fb = f(b);\n        const T fm = f((a+b)/2);\n\n        T is = ba/8*(fa+fb+fm+ f(a + 0.9501*ba) + f(a + 0.2311*ba) + f(a + 0.6068*ba)\n            + f(a + 0.4860*ba) + f(a + 0.8913*ba));\n\n        if(is == 0)\n        {\n            is = b-a;\n        }\n\n        is = is*tol;\n\n        int cnt = 0;\n\n        return impl_adapt_simp_stop(f, a, b, fa, fm, fb, is, cnt);\n    }\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_INTEGRATE_FUNCTION_ADAPT_SIMPSONh_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/numerical_integration/integrate_function_adapt_simpson_abstract.h",
    "content": "// Copyright (C) 2013 Steve Taylor (steve98654@gmail.com)\n// License: Boost Software License  See LICENSE.txt for the full license.\n#undef DLIB_INTEGRATE_FUNCTION_ADAPT_SIMPSON_ABSTRACTh_\n#ifdef DLIB_INTEGRATE_FUNCTION_ADAPT_SIMPSON_ABSTRACTh_\n\nnamespace dlib\n{\n\n    template <typename T, typename funct>\n    T integrate_function_adapt_simp(\n        const funct& f, \n        T a, \n        T b, \n        T tol = 1e-10\n    );\n    /*!\n        requires \n            - b > a\n            - tol > 0\n            - T should be either float, double, or long double\n            - The expression f(a) should be a valid expression that evaluates to a T.\n              I.e. f() should be a real valued function of a single variable.\n        ensures\n            - returns an approximation of the integral of f over the domain [a,b] using the\n              adaptive Simpson method outlined in Gander, W. and W. Gautshi, \"Adaptive\n              Quadrature -- Revisited\" BIT, Vol. 40, (2000), pp.84-101\n            - tol is a tolerance parameter that determines the overall accuracy of\n              approximated integral.  We suggest a default value of 1e-10 for tol. \n    !*/\n\n}\n\n#endif // DLIB_INTEGRATE_FUNCTION_ADAPT_SIMPSON_ABSTRACTh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/numerical_integration.h",
    "content": "// Copyright (C) 2013 Steve Taylor (steve98654@gmail.com)\n// License: Boost Software License  See LICENSE.txt for the full license.\n#ifndef DLIB_INTEGRATE_FUNCTION_ADAPT_SIMPSON_HEADER\n#define DLIB_INTEGRATE_FUNCTION_ADAPT_SIMPSON_HEADER\n\n#include \"numerical_integration/integrate_function_adapt_simpson.h\"\n\n#endif // DLIB_INTEGRATE_FUNCTION_ADAPT_SIMPSON_HEADER\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/opencv/cv_image.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CvIMAGE_H_\n#define DLIB_CvIMAGE_H_\n\n#include \"cv_image_abstract.h\"\n#include \"../algs.h\"\n#include \"../pixel.h\"\n#include \"../matrix/matrix_mat.h\"\n#include \"../image_processing/generic_image.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename pixel_type\n        >\n    class cv_image\n    {\n    public:\n        typedef pixel_type type;\n        typedef default_memory_manager mem_manager_type;\n\n        cv_image (const cv::Mat img) \n        {\n\t\t\tassert(img.depth() == cv::DataType<typename pixel_traits<pixel_type>::basic_pixel_type>::depth &&\n\t\t\t\timg.channels() == pixel_traits<pixel_type>::num);\n            //DLIB_CASSERT(img.depth() == cv::DataType<typename pixel_traits<pixel_type>::basic_pixel_type>::depth &&\n            //             img.channels() == pixel_traits<pixel_type>::num, \n            //             \"The pixel type you gave doesn't match pixel used by the open cv Mat object.\");\n            IplImage temp = img;\n            init(&temp);\n        }\n\n        cv_image (const IplImage img) \n        {\n            init(&img);\n        }\n\n        cv_image (const IplImage* img) \n        {\n            init(img);\n        }\n\n        cv_image() : _data(0), _widthStep(0), _nr(0), _nc(0) {}\n\n        unsigned long size () const { return static_cast<unsigned long>(_nr*_nc); }\n\n        inline pixel_type* operator[](const long row ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 <= row && row < nr(),\n                \"\\tpixel_type* cv_image::operator[](row)\"\n                << \"\\n\\t you have asked for an out of bounds row \" \n                << \"\\n\\t row:  \" << row\n                << \"\\n\\t nr(): \" << nr() \n                << \"\\n\\t this:  \" << this\n                );\n\n            return reinterpret_cast<pixel_type*>( _data + _widthStep*row);\n        }\n\n        inline const pixel_type* operator[](const long row ) const\n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 <= row && row < nr(),\n                \"\\tconst pixel_type* cv_image::operator[](row)\"\n                << \"\\n\\t you have asked for an out of bounds row \" \n                << \"\\n\\t row:  \" << row\n                << \"\\n\\t nr(): \" << nr() \n                << \"\\n\\t this:  \" << this\n                );\n\n            return reinterpret_cast<const pixel_type*>( _data + _widthStep*row);\n        }\n\n        long nr() const { return _nr; }\n        long nc() const { return _nc; }\n        long width_step() const { return _widthStep; }\n\n        cv_image& operator=( const cv_image& item)\n        {\n            _data = item._data;\n            _widthStep = item._widthStep;\n            _nr = item._nr;\n            _nc = item._nc;\n            return *this;\n        }\n\n        cv_image& operator=( const IplImage* img)\n        {\n            init(img);\n            return *this;\n        }\n\n        cv_image& operator=( const IplImage img)\n        {\n            init(&img);\n            return *this;\n        }\n\n        cv_image& operator=( const cv::Mat img)\n        {\n            IplImage temp = img;\n            init(&temp);\n            return *this;\n        }\n\n    private:\n\n        void init (const IplImage* img) \n        {\n            DLIB_CASSERT( img->dataOrder == 0, \"Only interleaved color channels are supported with cv_image\"); \n            DLIB_CASSERT((img->depth&0xFF)/8*img->nChannels == sizeof(pixel_type), \n                         \"The pixel type you gave doesn't match the size of pixel used by the open cv image struct\");\n\n            _data = img->imageData;\n            _widthStep = img->widthStep;\n            _nr = img->height;\n            _nc = img->width;\n\n        }\n\n        char* _data;\n        long _widthStep;\n        long _nr;\n        long _nc;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_array2d_to_mat<cv_image<T> > > mat (\n        const cv_image<T>& m \n    )\n    {\n        typedef op_array2d_to_mat<cv_image<T> > op;\n        return matrix_op<op>(op(m));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// Define the global functions that make cv_image a proper \"generic image\" according to\n// ../image_processing/generic_image.h\n    template <typename T>\n    struct image_traits<cv_image<T> >\n    {\n        typedef T pixel_type;\n    };\n\n    template <typename T>\n    inline long num_rows( const cv_image<T>& img) { return img.nr(); }\n    template <typename T>\n    inline long num_columns( const cv_image<T>& img) { return img.nc(); }\n\n    template <typename T>\n    inline void* image_data(\n        cv_image<T>& img\n    )\n    {\n        if (img.size() != 0)\n            return &img[0][0];\n        else\n            return 0;\n    }\n\n    template <typename T>\n    inline const void* image_data(\n        const cv_image<T>& img\n    )\n    {\n        if (img.size() != 0)\n            return &img[0][0];\n        else\n            return 0;\n    }\n\n    template <typename T>\n    inline long width_step(\n        const cv_image<T>& img\n    ) \n    { \n        return img.width_step(); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CvIMAGE_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/opencv/cv_image_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPENCV_IMAGE_AbSTRACT_H_\n#ifdef DLIB_OPENCV_IMAGE_AbSTRACT_H_\n\n#include \"../algs.h\"\n#include \"../pixel.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename pixel_type\n        >\n    class cv_image\n    {\n        /*!\n            REQUIREMENTS ON pixel_type\n                pixel_type just needs to be something that matches the pixel memory\n                layout of whatever OpenCV image you are going to use with this object.\n                For example, you might use unsigned char or bgr_pixel depending\n                on what you needed.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is meant to be used as a simple wrapper around the OpenCV\n                IplImage struct or Mat object.  Using this class template you can turn\n                an OpenCV image into something that looks like a normal dlib style \n                image object.\n\n                So you should be able to use cv_image objects with many of the image\n                processing functions in dlib as well as the GUI tools for displaying\n                images on the screen.\n\n                Note that this object does NOT take ownership of the image data you \n                give to it.  This means it is up to you to make sure the OpenCV image\n                is properly freed at some point.  This also means that an instance of \n                this object can only be used as long as the OpenCV image it references \n                remains valid, since a cv_image just points to the OpenCV image's \n                memory directly.\n        !*/\n\n    public:\n        typedef pixel_type type;\n        typedef default_memory_manager mem_manager_type;\n\n        cv_image (\n            const IplImage* img\n        );\n        /*!\n            requires\n                - img->dataOrder == 0\n                  (i.e. Only interleaved color channels are supported with cv_image)\n                - (img->depth&0xFF)/8*img->nChannels == sizeof(pixel_type)\n                  (i.e. The size of the pixel_type needs to match the size of the pixels \n                  inside the OpenCV image)\n            ensures\n                - #nr() == img->height\n                  #nc() == img->width\n                - using the operator[] on this object you will be able to access the pixels\n                  inside this OpenCV image.\n        !*/\n\n        cv_image (\n            const IplImage img\n        );\n        /*!\n            requires\n                - img.dataOrder == 0\n                  (i.e. Only interleaved color channels are supported with cv_image)\n                - (img.depth&0xFF)/8*img.nChannels == sizeof(pixel_type)\n                  (i.e. The size of the pixel_type needs to match the size of the pixels \n                  inside the OpenCV image)\n            ensures\n                - #nr() == img.height\n                  #nc() == img.width\n                - using the operator[] on this object you will be able to access the pixels\n                  inside this OpenCV image.\n        !*/\n\n        cv_image (\n            const cv::Mat img\n        ); \n        /*!\n            requires\n                - img.depth() == cv::DataType<pixel_traits<pixel_type>::basic_pixel_type>::depth\n                  (i.e. The pixel_type template argument needs to match the type of pixel \n                  used inside the OpenCV image)\n                - img.channels() == pixel_traits<pixel_type>::num\n                  (i.e. the number of channels in the pixel_type needs to match the number of \n                  channels in the OpenCV image)\n            ensures\n                - #nr() == img.rows\n                - #nc() == img.cols\n                - using the operator[] on this object you will be able to access the pixels\n                  inside this OpenCV image.\n        !*/\n\n        cv_image(\n        ); \n        /*!\n            ensures\n                - #nr() == 0\n                - #nc() == 0\n        !*/\n\n        ~cv_image (\n        );\n        /*!\n            ensures\n                - This function does nothing.  e.g. It doesn't delete the OpenCV \n                  image used by this cv_image object\n        !*/\n\n        long nr(\n        ) const; \n        /*!\n            ensures\n                - returns the number of rows in this image\n        !*/\n\n        long nc(\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns in this image\n        !*/\n\n        unsigned long size (\n        ) const; \n        /*!\n            ensures\n                - returns nr()*nc()\n                  (i.e. returns the number of pixels in this image)\n        !*/\n\n        inline pixel_type* operator[] (\n            const long row \n        );\n        /*!\n            requires\n                - 0 <= row < nr()\n            ensures\n                - returns a pointer to the first pixel in the given row\n                  of this image\n        !*/\n\n        inline const pixel_type* operator[] (\n            const long row \n        ) const;\n        /*!\n            requires\n                - 0 <= row < nr()\n            ensures\n                - returns a pointer to the first pixel in the given row\n                  of this image\n        !*/\n\n        cv_image& operator= ( \n            const cv_image& item\n        );\n        /*!\n            ensures\n                - #*this is an identical copy of item\n                - returns #*this\n        !*/\n\n        cv_image& operator=( \n            const IplImage* img\n        );\n        /*!\n            requires\n                - img->dataOrder == 0\n                  (i.e. Only interleaved color channels are supported with cv_image)\n                - (img->depth&0xFF)/8*img->nChannels == sizeof(pixel_type)\n                  (i.e. The size of the pixel_type needs to match the size of the pixels \n                  inside the OpenCV image)\n            ensures\n                - #nr() == img->height\n                  #nc() == img->width\n                - using the operator[] on this object you will be able to access the pixels\n                  inside this OpenCV image.\n                - returns #*this\n        !*/\n\n        cv_image& operator=( \n            const IplImage img\n        );\n        /*!\n            requires\n                - img->dataOrder == 0\n                  (i.e. Only interleaved color channels are supported with cv_image)\n                - (img->depth&0xFF)/8*img->nChannels == sizeof(pixel_type)\n                  (i.e. The size of the pixel_type needs to match the size of the pixels \n                  inside the OpenCV image)\n            ensures\n                - #nr() == img->height\n                  #nc() == img->width\n                - using the operator[] on this object you will be able to access the pixels\n                  inside this OpenCV image.\n                - returns #*this\n        !*/\n\n        cv_image& operator=( \n            const cv::Mat img\n        );\n        /*!\n            requires\n                - img.depth() == cv::DataType<pixel_traits<pixel_type>::basic_pixel_type>::depth\n                  (i.e. The pixel_type template argument needs to match the type of pixel \n                  used inside the OpenCV image)\n                - img.channels() == pixel_traits<pixel_type>::num\n                  (i.e. the number of channels in the pixel_type needs to match the number of \n                  channels in the OpenCV image)\n            ensures\n                - #nr() == img.rows\n                - #nc() == img.cols\n                - using the operator[] on this object you will be able to access the pixels\n                  inside this OpenCV image.\n                - returns #*this\n        !*/\n\n        long width_step (\n        ) const;\n        /*!\n            ensures\n                - returns the size of one row of the image, in bytes.  \n                  More precisely, return a number N such that:\n                  (char*)&item[0][0] + N == (char*)&item[1][0].\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp mat (\n        const cv_image<T>& img\n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - R.nr() == img.nr() \n                - R.nc() == img.nc()\n                - for all valid r and c:\n                  R(r, c) == img[r][c]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPENCV_IMAGE_AbSTRACT_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/opencv/to_open_cv.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TO_OPEN_Cv_Hh_\n#define DLIB_TO_OPEN_Cv_Hh_\n\n#include \"to_open_cv_abstract.h\"\n#include \"../pixel.h\"\n#include \"../matrix/matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type\n        >\n    cv::Mat toMat (\n        image_type& img\n    )\n    {\n        if (image_size(img) == 0)\n            return cv::Mat();\n\n        typedef typename image_traits<image_type>::pixel_type type;\n        if (pixel_traits<type>::num == 1)\n        {\n            return cv::Mat(num_rows(img), num_columns(img), cv::DataType<type>::type, image_data(img), width_step(img));\n        }\n        else\n        {\n            int depth = sizeof(typename pixel_traits<type>::basic_pixel_type)*8;\n            int channels = pixel_traits<type>::num;\n            int thetype = CV_MAKETYPE(depth, channels);\n            return cv::Mat(num_rows(img), num_columns(img), thetype, image_data(img), width_step(img));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TO_OPEN_Cv_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/opencv/to_open_cv_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_TO_OPEN_Cv_ABSTRACTh_\n#ifdef DLIB_TO_OPEN_Cv_ABSTRACTh_\n\n#include \"../pixel.h\"\n\nnamespace dlib\n{\n    template <\n        typename image_type\n        >\n    cv::Mat toMat (\n        image_type& img\n    );\n    /*!\n        requires\n            - image_type == an image object that implements the interface defined in\n              dlib/image_processing/generic_image.h or a dlib::matrix object which uses a\n              row_major_layout.\n            - pixel_traits is defined for the contents of img.\n        ensures\n            - returns an OpenCV Mat object which represents the same image as img.  This\n              is done by setting up the Mat object to point to the same memory as img.\n              Therefore, the returned Mat object is valid only as long as pointers\n              to the pixels in img remain valid.\n    !*/\n}\n\n#endif // DLIB_TO_OPEN_Cv_ABSTRACTh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/opencv.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPEnCV_HEADER\n#define DLIB_OPEnCV_HEADER\n\n#include \"opencv/cv_image.h\"\n#include \"opencv/to_open_cv.h\"\n\n#endif // DLIB_OPEnCV_HEADER\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/find_max_factor_graph_nmplp.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FIND_MAX_FACTOR_GRAPH_nMPLP_Hh_\n#define DLIB_FIND_MAX_FACTOR_GRAPH_nMPLP_Hh_\n\n#include \"find_max_factor_graph_nmplp_abstract.h\"\n#include <vector>\n#include <map>\n#include \"../matrix.h\"\n#include \"../hash.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        class simple_hash_map\n        {\n        public:\n\n            simple_hash_map(\n            ) : \n                scan_dist(6)\n            {\n                data.resize(5000);\n            }\n\n            void insert (\n                const unsigned long a,\n                const unsigned long b,\n                const unsigned long value\n            ) \n            /*!\n                requires\n                    - a != std::numeric_limits<unsigned long>::max()\n                ensures\n                    - #(*this)(a,b) == value\n            !*/\n            {\n                const uint32 h = murmur_hash3_2(a,b)%(data.size()-scan_dist);\n\n                const unsigned long empty_bucket = std::numeric_limits<unsigned long>::max();\n\n                for (uint32 i = 0; i < scan_dist; ++i)\n                {\n                    if (data[i+h].key1 == empty_bucket)\n                    {\n                        data[i+h].key1 = a;\n                        data[i+h].key2 = b;\n                        data[i+h].value = value;\n                        return;\n                    }\n                }\n\n                // if we get this far it means the hash table is filling up.  So double its size.\n                std::vector<bucket> new_data;\n                new_data.resize(data.size()*2);\n                new_data.swap(data);\n                for (uint32 i = 0; i < new_data.size(); ++i)\n                {\n                    if (new_data[i].key1 != empty_bucket)\n                    {\n                        insert(new_data[i].key1, new_data[i].key2, new_data[i].value);\n                    }\n                }\n\n                insert(a,b,value);\n            }\n\n            unsigned long operator() (\n                const unsigned long a,\n                const unsigned long b\n            ) const\n            /*!\n                requires\n                    - this->insert(a,b,some_value) has been called\n                ensures\n                    - returns the value stored at key (a,b)\n            !*/\n            {\n                DLIB_ASSERT(a != b, \"An invalid map_problem was given to find_max_factor_graph_nmplp().\"\n                            << \"\\nNode \" << a << \" is listed as being a neighbor with itself, which is illegal.\");\n\n                uint32 h = murmur_hash3_2(a,b)%(data.size()-scan_dist);\n\n\n                for (unsigned long i = 0; i < scan_dist; ++i)\n                {\n                    if (data[h].key1 == a && data[h].key2 == b)\n                    {\n                        return data[h].value;\n                    }\n                    ++h;\n                }\n                \n\n                // this should never happen (since this function requires (a,b) to be in the hash table\n                DLIB_ASSERT(false, \"An invalid map_problem was given to find_max_factor_graph_nmplp().\"\n                            << \"\\nThe nodes in the map_problem are inconsistent because node \"<<a<<\" is in the neighbor list\"\n                            << \"\\nof node \"<<b<< \" but node \"<<b<<\" isn't in the neighbor list of node \"<<a<<\".  The neighbor relationship\"\n                            << \"\\nis supposed to be symmetric.\"\n                            );\n                return 0;\n            }\n\n        private:\n\n            struct bucket\n            {\n                // having max() in key1 indicates that the bucket isn't used.\n                bucket() : key1(std::numeric_limits<unsigned long>::max()) {}\n                unsigned long key1;\n                unsigned long key2;\n                unsigned long value;\n            };\n\n            std::vector<bucket> data;\n            const unsigned int scan_dist;\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_problem\n        >\n    void find_max_factor_graph_nmplp (\n        const map_problem& prob,\n        std::vector<unsigned long>& map_assignment,\n        unsigned long max_iter,\n        double eps\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( eps > 0,\n                     \"\\t void find_max_factor_graph_nmplp()\"\n                     << \"\\n\\t eps must be greater than zero\"\n                     << \"\\n\\t eps:  \" << eps \n                );\n\n        /*\n            This function is an implementation of the NMPLP algorithm introduced in the \n            following papers:\n                Fixing Max-Product: Convergent Message Passing Algorithms for MAP LP-Relaxations (2008)\n                by Amir Globerson and Tommi Jaakkola\n\n                Introduction to dual decomposition for inference (2011)\n                by David Sontag, Amir Globerson, and Tommi Jaakkola \n\n            In particular, this function implements the star MPLP update equations shown as\n            equation 1.20 from the paper Introduction to dual decomposition for inference\n            (the method was called NMPLP in the first paper).  It should also be noted that\n            the original description of the NMPLP in the first paper had an error in the\n            equations and the second paper contains corrected equations, which is what this \n            function uses.\n        */\n\n        typedef typename map_problem::node_iterator node_iterator;\n        typedef typename map_problem::neighbor_iterator neighbor_iterator;\n\n        map_assignment.resize(prob.number_of_nodes());\n\n\n        if (prob.number_of_nodes() == 0)\n            return;\n\n\n        std::vector<double> delta_elements;\n        delta_elements.reserve(prob.number_of_nodes()*prob.num_states(prob.begin())*3);\n\n        impl::simple_hash_map delta_idx;\n\n\n\n        // Initialize delta to zero and fill up the hash table with the appropriate values\n        // so we can index into delta later on.\n        for (node_iterator i = prob.begin(); i != prob.end(); ++i)\n        {\n            const unsigned long id_i = prob.node_id(i);\n\n            for (neighbor_iterator j = prob.begin(i); j != prob.end(i); ++j)\n            {\n                const unsigned long id_j = prob.node_id(j);\n                delta_idx.insert(id_i, id_j, delta_elements.size());\n\n                const unsigned long num_states_xj = prob.num_states(j);\n                for (unsigned long xj = 0; xj < num_states_xj; ++xj)\n                    delta_elements.push_back(0);\n            }\n        }\n\n\n        std::vector<double> gamma_i;\n        std::vector<std::vector<double> > gamma_ji;\n        std::vector<std::vector<double> > delta_to_j_no_i;\n        // These arrays will end up with a length equal to the maximum number of neighbors\n        // of any node in the graph.  So reserve a bigish number of slots so that we are\n        // very unlikely to need to preform an expensive reallocation during the\n        // optimization.\n        gamma_ji.reserve(10000);\n        delta_to_j_no_i.reserve(10000);\n\n\n        double max_change = eps + 1; \n        // Now do the main body of the optimization. \n        unsigned long iter;\n        for (iter = 0; iter < max_iter && max_change > eps; ++iter)\n        {\n            max_change = -std::numeric_limits<double>::infinity();\n\n            for (node_iterator i = prob.begin(); i != prob.end(); ++i)\n            {\n                const unsigned long id_i = prob.node_id(i);\n                const unsigned long num_states_xi = prob.num_states(i);\n                gamma_i.assign(num_states_xi, 0);\n\n                double num_neighbors = 0;\n\n                unsigned int jcnt = 0;\n                // first we fill in the gamma vectors\n                for (neighbor_iterator j = prob.begin(i); j != prob.end(i); ++j)\n                {\n                    // Make sure these arrays are big enough to hold all the neighbor\n                    // information.\n                    if (jcnt >= gamma_ji.size())\n                    {\n                        gamma_ji.resize(gamma_ji.size()+1);\n                        delta_to_j_no_i.resize(delta_to_j_no_i.size()+1);\n                    }\n\n                    ++num_neighbors;\n                    const unsigned long id_j = prob.node_id(j);\n                    const unsigned long num_states_xj = prob.num_states(j);\n\n                    gamma_ji[jcnt].assign(num_states_xi, -std::numeric_limits<double>::infinity());\n                    delta_to_j_no_i[jcnt].assign(num_states_xj, 0);\n\n                    // compute delta_j^{-i} and store it in delta_to_j_no_i[jcnt]  \n                    for (neighbor_iterator k = prob.begin(j); k != prob.end(j); ++k)\n                    {\n                        const unsigned long id_k = prob.node_id(k);\n                        if (id_k==id_i)\n                            continue;\n                        const double* const delta_kj = &delta_elements[delta_idx(id_k,id_j)];\n                        for (unsigned long xj = 0; xj < num_states_xj; ++xj)\n                        {\n                            delta_to_j_no_i[jcnt][xj] += delta_kj[xj];\n                        }\n                    }\n\n                    // now compute gamma values\n                    for (unsigned long xi = 0; xi < num_states_xi; ++xi)\n                    {\n                        for (unsigned long xj = 0; xj < num_states_xj; ++xj)\n                        {\n                            gamma_ji[jcnt][xi] = std::max(gamma_ji[jcnt][xi], prob.factor_value(i,j,xi,xj) + delta_to_j_no_i[jcnt][xj]);\n                        }\n                        gamma_i[xi] += gamma_ji[jcnt][xi];\n                    }\n                    ++jcnt;\n                }\n\n                // now update the delta values\n                jcnt = 0;\n                for (neighbor_iterator j = prob.begin(i); j != prob.end(i); ++j)\n                {\n                    const unsigned long id_j = prob.node_id(j);\n                    const unsigned long num_states_xj = prob.num_states(j);\n\n                    // messages from j to i\n                    double* const delta_ji = &delta_elements[delta_idx(id_j,id_i)];\n\n                    // messages from i to j\n                    double* const delta_ij = &delta_elements[delta_idx(id_i,id_j)];\n\n                    for (unsigned long xj = 0; xj < num_states_xj; ++xj)\n                    {\n                        double best_val = -std::numeric_limits<double>::infinity();\n\n                        for (unsigned long xi = 0; xi < num_states_xi; ++xi)\n                        {\n                            double val = prob.factor_value(i,j,xi,xj) + 2/(num_neighbors+1)*gamma_i[xi] -gamma_ji[jcnt][xi];\n                            if (val > best_val)\n                                best_val = val;\n                        }\n                        best_val = -0.5*delta_to_j_no_i[jcnt][xj] + 0.5*best_val;\n\n                        if (std::abs(delta_ij[xj] - best_val) > max_change)\n                            max_change = std::abs(delta_ij[xj] - best_val);\n\n                        delta_ij[xj] = best_val;\n                    }\n\n                    for (unsigned long xi = 0; xi < num_states_xi; ++xi)\n                    {\n                        double new_val = -1/(num_neighbors+1)*gamma_i[xi] + gamma_ji[jcnt][xi];\n                        if (std::abs(delta_ji[xi] - new_val) > max_change)\n                            max_change = std::abs(delta_ji[xi] - new_val);\n                        delta_ji[xi] = new_val;\n                    }\n                    ++jcnt;\n                }\n            }\n        }\n\n\n        // now decode the \"beliefs\"\n        std::vector<double> b;\n        for (node_iterator i = prob.begin(); i != prob.end(); ++i)\n        {\n            const unsigned long id_i = prob.node_id(i);\n            b.assign(prob.num_states(i), 0);\n\n            for (neighbor_iterator k = prob.begin(i); k != prob.end(i); ++k)\n            {\n                const unsigned long id_k = prob.node_id(k);\n\n                for (unsigned long xi = 0; xi < b.size(); ++xi)\n                {\n                    const double* const delta_ki = &delta_elements[delta_idx(id_k,id_i)];\n                    b[xi] += delta_ki[xi];\n                }\n            }\n\n            map_assignment[id_i] = index_of_max(mat(b));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FIND_MAX_FACTOR_GRAPH_nMPLP_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/find_max_factor_graph_nmplp_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FIND_MAX_FACTOR_GRAPH_nMPLP_ABSTRACT_Hh_\n#ifdef DLIB_FIND_MAX_FACTOR_GRAPH_nMPLP_ABSTRACT_Hh_\n\n#include <vector>\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class map_problem \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a factor graph or graphical model.  In \n                particular, this object defines the interface a MAP problem on\n                a factor graph must implement if it is to be solved using the \n                find_max_factor_graph_nmplp() routine defined at the bottom of this file.  \n\n                Note that there is no dlib::map_problem object.  What you are\n                looking at here is simply the interface definition for a map problem.\n                You must implement your own version of this object for the problem\n                you wish to solve and then pass it to the find_max_factor_graph_nmplp() routine.\n\n\n                Note also that a factor graph should not have any nodes which are \n                neighbors with themselves.  Additionally, the graph is undirected. This\n                mean that if A is a neighbor of B then B must be a neighbor of A for\n                the map problem to be valid.\n\n\n                Finally, note that the \"neighbor\" relationship between nodes means the\n                following:  Two nodes are neighbors if and only if there is a potential \n                function (implemented by the factor_value() method) which operates on \n                the nodes.\n        !*/\n\n    public:\n\n        class node_iterator\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This is a simple forward iterator for iterating over \n                    the nodes/variables in this factor graph.  \n\n                    Note that you can't dereference the iterator and\n                    obtain a value.  That is, the iterator is opaque to \n                    the user.  It is used only as an argument to the other \n                    methods defined in this interface.\n            !*/\n\n        public:\n            node_iterator(\n            );\n            /*!\n                ensures\n                    - constructs an iterator in an undefined state\n            !*/\n\n            node_iterator(\n                const node_iterator& item\n            );\n            /*!\n                ensures\n                    - #*this is a copy of item\n            !*/\n\n            node_iterator& operator= (\n                const node_iterator& item\n            );\n            /*!\n                ensures\n                    - #*this is a copy of item\n                    - returns #*this\n            !*/\n\n            bool operator== (\n                const node_iterator& item\n            ) const; \n            /*!\n                ensures\n                    - returns true if *this and item both reference\n                      the same node in the factor graph and false \n                      otherwise.\n            !*/\n\n            bool operator!= (\n                const node_iterator& item\n            ) const;\n            /*!\n                ensures\n                    - returns false if *this and item both reference\n                      the same node in the factor graph and true \n                      otherwise.\n            !*/\n\n            node_iterator& operator++(\n            );\n            /*!\n                ensures\n                    - advances *this to the next node in the factor graph.\n                    - returns a reference to the updated *this\n                      (i.e. this is the ++object form of the increment operator)\n            !*/\n        };\n\n        class neighbor_iterator\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This is a simple forward iterator for iterating over \n                    the nodes/variables in this factor graph.  This version\n                    of the iterator is used for iterating over the neighbors\n                    of another node in the graph.\n            !*/\n\n        public:\n            neighbor_iterator(\n            ); \n            /*!\n                ensures\n                    - constructs an iterator in an undefined state\n            !*/\n\n            neighbor_iterator(\n                const neighbor_iterator& item\n            );\n            /*!\n                ensures\n                    - #*this is a copy of item\n            !*/\n\n            neighbor_iterator& operator= (\n                const neighbor_iterator& item\n            );\n            /*!\n                ensures\n                    - #*this is a copy of item\n                    - returns #*this\n            !*/\n\n            bool operator== (\n                const neighbor_iterator& item\n            ) const; \n            /*!\n                ensures\n                    - returns true if *this and item both reference\n                      the same node in the factor graph and false \n                      otherwise.\n            !*/\n\n            bool operator!= (\n                const neighbor_iterator& item\n            ) const;\n            /*!\n                ensures\n                    - returns false if *this and item both reference\n                      the same node in the factor graph and true \n                      otherwise.\n            !*/\n\n            neighbor_iterator& operator++(\n            ); \n            /*!\n                ensures\n                    - advances *this to the next node in the factor graph.\n                    - returns a reference to the updated *this\n                      (i.e. this is the ++object form of the increment operator) \n            !*/\n        };\n\n        unsigned long number_of_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of nodes in the factor graph.  Or in other words, \n                  returns the number of variables in the MAP problem.\n        !*/\n\n        node_iterator begin(\n        ) const;\n        /*!\n            ensures\n                - returns an iterator to the first node in the graph.  If no such\n                  node exists then returns end().\n        !*/\n\n        node_iterator end(\n        ) const;\n        /*!\n            ensures\n                - returns an iterator to one past the last node in the graph.\n        !*/\n\n        neighbor_iterator begin(\n            const node_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator (i.e. it must be in the range [begin(), end()))\n            ensures\n                - returns an iterator to the first neighboring node of the node\n                  referenced by it.  If no such node exists then returns end(it).\n        !*/\n\n        neighbor_iterator begin(\n            const neighbor_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator. (i.e. it must be in the range \n                  [begin(i), end(i)) where i is some valid iterator. ) \n            ensures\n                - returns an iterator to the first neighboring node of the node\n                  referenced by it.  If no such node exists then returns end(it).\n        !*/\n\n        neighbor_iterator end(\n            const node_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator (i.e. it must be in the range [begin(), end()))\n            ensures\n                - returns an iterator to one past the last neighboring node of the node\n                  referenced by it.\n        !*/\n\n        neighbor_iterator end(\n            const neighbor_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator. (i.e. it must be in the range \n                  [begin(i), end(i)) where i is some valid iterator. ) \n            ensures\n                - returns an iterator to one past the last neighboring node of the node\n                  referenced by it.\n        !*/\n\n        unsigned long node_id (\n            const node_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator (i.e. it must be in the range [begin(), end()))\n            ensures\n                - returns a number ID such that:\n                    - 0 <= ID < number_of_nodes()\n                    - ID == a number which uniquely identifies the node pointed to by it.\n        !*/\n\n        unsigned long node_id (\n            const neighbor_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator. (i.e. it must be in the range \n                  [begin(i), end(i)) where i is some valid iterator. ) \n            ensures\n                - returns a number ID such that:\n                    - 0 <= ID < number_of_nodes()\n                    - ID == a number which uniquely identifies the node pointed to by it.\n        !*/\n\n        unsigned long num_states (\n            const node_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator (i.e. it must be in the range [begin(), end()))\n            ensures\n                - returns the number of states attainable by the node/variable referenced by it.\n        !*/\n\n        unsigned long num_states (\n            const neighbor_iterator& it\n        ) const;\n        /*!\n            requires\n                - it == a valid iterator. (i.e. it must be in the range \n                  [begin(i), end(i)) where i is some valid iterator. ) \n            ensures\n                - returns the number of states attainable by the node/variable referenced by it.\n        !*/\n\n        // The next four functions all have the same contract.\n        double factor_value (const node_iterator& it1,     const node_iterator& it2,     unsigned long s1, unsigned long s2) const;\n        double factor_value (const neighbor_iterator& it1, const node_iterator& it2,     unsigned long s1, unsigned long s2) const;\n        double factor_value (const node_iterator& it1,     const neighbor_iterator& it2, unsigned long s1, unsigned long s2) const;\n        double factor_value (const neighbor_iterator& it1, const neighbor_iterator& it2, unsigned long s1, unsigned long s2) const;\n        /*!\n            requires\n                - it1 == a valid iterator\n                - it2 == a valid iterator\n                - 0 <= s1 < num_states(it1)\n                - 0 <= s2 < num_states(it2)\n                - it1 and it2 reference nodes which are neighbors in the factor graph\n            ensures\n                - returns the value of the factor/potential function for the given pair of \n                  nodes, defined by it1 and it2, for the case where they take on the values\n                  s1 and s2 respectively.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_problem\n        >\n    void find_max_factor_graph_nmplp (\n        const map_problem& prob,\n        std::vector<unsigned long>& map_assignment,\n        unsigned long max_iter,\n        double eps\n    );\n    /*!\n        requires\n            - for all valid i: prob.num_states(i) >= 2\n            - map_problem == an object with an interface compatible with the map_problem\n              object defined at the top of this file.\n            - eps > 0\n        ensures\n            - This function is a tool for approximately solving the given MAP problem in a graphical \n              model or factor graph with pairwise potential functions.  That is, it attempts \n              to solve a certain kind of optimization problem which can be defined as follows:\n                 maximize: f(X)\n                 where X is a set of integer valued variables and f(X) can be written as the \n                 sum of functions which each involve only two variables from X.  In reference \n                 to the prob object, the nodes in prob represent the variables in X and the \n                 functions which are summed are represented by prob.factor_value().\n            - #map_assignment == the result of the optimization.   \n            - #map_assignment.size() == prob.number_of_nodes()\n            - for all valid i:\n                - #map_assignment[prob.node_id(i)] < prob.num_states(i)\n                - #map_assignment[prob.node_id(i)] == The approximate MAP assignment for node/variable i.\n            - eps controls the stopping condition, smaller values of eps lead to more accurate \n              solutions of the relaxed linear program but may take more iterations.  Note that\n              the algorithm will never execute more than max_iter iterations regardless of\n              the setting of eps.\n            - If the graph is tree-structured then this routine always gives the exact solution \n              to the MAP problem.  However, for graphs with cycles, the solution may be approximate.\n              \n\n            - This function is an implementation of the NMPLP algorithm introduced in the\n              following papers:\n                Fixing Max-Product: Convergent Message Passing Algorithms for MAP LP-Relaxations (2008)\n                by Amir Globerson and Tommi Jaakkola\n\n                Introduction to dual decomposition for inference (2011)\n                by David Sontag, Amir Globerson, and Tommi Jaakkola \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FIND_MAX_FACTOR_GRAPH_nMPLP_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/find_max_factor_graph_viterbi.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FIND_MAX_FACTOR_GRAPH_VITERBi_Hh_\n#define DLIB_FIND_MAX_FACTOR_GRAPH_VITERBi_Hh_\n\n#include \"find_max_factor_graph_viterbi_abstract.h\"\n#include <vector>\n#include \"../matrix.h\"\n#include \"../array2d.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        struct viterbi_data\n        {\n            viterbi_data() :val(-std::numeric_limits<double>::infinity()), back_index(0) {}\n            double val;\n            unsigned long back_index;\n        };\n\n        template <long NC>\n        inline bool advance_state(\n            matrix<unsigned long,1,NC>& node_states,\n            unsigned long num_states\n        )\n        /*!\n            ensures\n                - advances node_states to the next state by adding 1\n                  to node_states(node_states.size()-1) and carrying any \n                  rollover (modulo num_states).  Stores the result into #node_states.\n                - if (#node_states is all zeros) then\n                    - returns false\n                - else\n                    - returns true\n        !*/\n        {\n            for (long i = node_states.size()-1; i >= 0; --i)\n            {\n                node_states(i) += 1;\n                if (node_states(i) < num_states)\n                    return true;\n\n                node_states(i) = 0;\n            }\n            return false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_problem\n        >\n    void find_max_factor_graph_viterbi (\n        const map_problem& prob,\n        std::vector<unsigned long>& map_assignment\n    )\n    {\n        using namespace dlib::impl;\n        const unsigned long order = prob.order();\n        const unsigned long num_states = prob.num_states();\n\n\n        DLIB_ASSERT(prob.num_states() > 0,\n            \"\\t void find_max_factor_graph_viterbi()\"\n            << \"\\n\\t The nodes in a factor graph have to be able to take on more than 0 states.\"\n            );\n        DLIB_ASSERT(std::pow(num_states,(double)order) < std::numeric_limits<unsigned long>::max(),\n            \"\\t void find_max_factor_graph_viterbi()\"\n            << \"\\n\\t The order is way too large for this algorithm to handle.\"\n            << \"\\n\\t order:      \" << order\n            << \"\\n\\t num_states: \" << num_states \n            << \"\\n\\t std::pow(num_states,order):                \" << std::pow(num_states,(double)order) \n            << \"\\n\\t std::numeric_limits<unsigned long>::max(): \" << std::numeric_limits<unsigned long>::max() \n            );\n\n        if (prob.number_of_nodes() == 0)\n        {\n            map_assignment.clear();\n            return;\n        }\n\n        if (order == 0)\n        {\n            map_assignment.resize(prob.number_of_nodes());\n            for (unsigned long i = 0; i < map_assignment.size(); ++i)\n            {\n                matrix<unsigned long,1,1> node_state;\n                unsigned long best_state = 0;\n                double best_val = -std::numeric_limits<double>::infinity();\n                for (unsigned long s = 0; s < num_states; ++s)\n                {\n                    node_state(0) = s;\n                    const double temp = prob.factor_value(i,node_state);\n                    if (temp > best_val)\n                    {\n                        best_val = temp;\n                        best_state = s;\n                    }\n                }\n                map_assignment[i] = best_state;\n            }\n            return;\n        }\n\n\n        const unsigned long trellis_size = static_cast<unsigned long>(std::pow(num_states,(double)order)); \n        unsigned long init_ring_size = 1; \n\n        array2d<impl::viterbi_data> trellis;\n        trellis.set_size(prob.number_of_nodes(), trellis_size);\n\n\n        for (unsigned long node = 0; node < prob.number_of_nodes(); ++node)\n        {\n\n            if (node < order)\n            {\n                matrix<unsigned long,1,0> node_states;\n                node_states.set_size(std::min<int>(node, order) + 1);\n                node_states = 0;\n\n                unsigned long idx = 0;\n                if (node == 0)\n                {\n                    do \n                    {\n                        trellis[node][idx].val = prob.factor_value(node,node_states);\n                        ++idx;\n                    } while(advance_state(node_states,num_states));\n                }\n                else\n                {\n                    init_ring_size *= num_states;\n                    do \n                    {\n                        const unsigned long back_index = idx%init_ring_size;\n                        trellis[node][idx].val = prob.factor_value(node,node_states) + trellis[node-1][back_index].val;\n                        trellis[node][idx].back_index = back_index;\n                        ++idx;\n                    } while(advance_state(node_states,num_states));\n\n                }\n            }\n            else if (order == 1)\n            {\n                /*\n                    WHAT'S THE DEAL WITH THIS PREPROCESSOR MACRO?\n                        Well, if we can declare the dimensions of node_states as a compile\n                        time constant then this function runs significantly faster.  So this macro\n                        is here to let us do that.  It just lets us avoid replicating this code\n                        block in the following if statements for different order sizes.\n                */\n#define DLIB_FMFGV_WORK                                                                                                     \\\n                node_states = 0;                                                                                            \\\n                unsigned long count = 0;                                                                                    \\\n                for (unsigned long i = 0; i < trellis_size; ++i)                                                            \\\n                {                                                                                                           \\\n                    unsigned long back_index = 0;                                                                           \\\n                    double best_score = -std::numeric_limits<double>::infinity();                                           \\\n                    for (unsigned long s = 0; s < num_states; ++s)                                                          \\\n                    {                                                                                                       \\\n                        const double temp = prob.factor_value(node,node_states) + trellis[node-1][count%trellis_size].val;  \\\n                        if (temp > best_score)                                                                              \\\n                        {                                                                                                   \\\n                            best_score = temp;                                                                              \\\n                            back_index = count%trellis_size;                                                                \\\n                        }                                                                                                   \\\n                        advance_state(node_states,num_states);                                                              \\\n                        ++count;                                                                                            \\\n                    }                                                                                                       \\\n                    trellis[node][i].val = best_score;                                                                      \\\n                    trellis[node][i].back_index = back_index;                                                               \\\n                }\n\n                matrix<unsigned long,1,2> node_states;\n                DLIB_FMFGV_WORK\n            }\n            else if (order == 2)\n            {\n                matrix<unsigned long,1,3> node_states;\n                DLIB_FMFGV_WORK\n            }\n            else if (order == 3)\n            {\n                matrix<unsigned long,1,4> node_states;\n                DLIB_FMFGV_WORK\n            }\n            else \n            {\n                // The general case, here we don't define the size of node_states at compile time.\n                matrix<unsigned long,1,0> node_states(order+1);\n                DLIB_FMFGV_WORK\n            }\n        }\n\n\n        map_assignment.resize(prob.number_of_nodes());\n        // Figure out which state of the last node has the biggest value. \n        unsigned long back_index = 0;\n        double best_val = -std::numeric_limits<double>::infinity();\n        for (long i = 0; i < trellis.nc(); ++i)\n        {\n            if (trellis[trellis.nr()-1][i].val > best_val)\n            {\n                best_val = trellis[trellis.nr()-1][i].val;\n                back_index = i;\n            }\n        }\n        // Follow the back links to find the decoding.\n        for (long node = map_assignment.size()-1; node >= 0; --node)\n        {\n            map_assignment[node] = back_index/init_ring_size;\n            back_index = trellis[node][back_index].back_index;\n            if (node < (long)order)\n                init_ring_size /= num_states;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FIND_MAX_FACTOR_GRAPH_VITERBi_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/find_max_factor_graph_viterbi_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FIND_MAX_FACTOR_GRAPH_VITERBi_ABSTRACT_Hh_\n#ifdef DLIB_FIND_MAX_FACTOR_GRAPH_VITERBi_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class map_problem \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a chain-structured factor graph or graphical \n                model.  In particular, this object defines the interface a MAP problem \n                on a factor graph must implement if it is to be solved using the \n                find_max_factor_graph_viterbi() routine defined at the bottom of this file.  \n\n                Note that there is no dlib::map_problem object.  What you are looking \n                at here is simply the interface definition for a map problem.  You must \n                implement your own version of this object for the problem you wish to \n                solve and then pass it to the find_max_factor_graph_viterbi() routine.\n        !*/\n\n    public:\n\n        unsigned long order (\n        ) const;\n        /*!\n            ensures\n                - returns the order of this model.  The order has the following interpretation:\n                  This model can represent a high order Markov chain.  If order()==1 then map_problem\n                  represents a basic chain-structured graph where nodes only depend on their immediate\n                  neighbors.  However, high order Markov models can also be used by setting order() > 1.\n        !*/\n\n        unsigned long num_states (\n        ) const;\n        /*!\n            ensures\n                - returns the number of states attainable by each variable/node in the graph.\n        !*/\n\n        unsigned long number_of_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of nodes in the factor graph.  Or in other words, \n                  returns the number of variables in the MAP problem.\n        !*/\n\n        template <\n            typename EXP \n            >\n        double factor_value (\n            unsigned long node_id,\n            const matrix_exp<EXP>& node_states\n        ) const;\n        /*!\n            requires\n                - EXP::type == unsigned long\n                  (i.e. node_states contains unsigned longs)\n                - node_id < number_of_nodes()\n                - node_states.size() == min(node_id, order()) + 1\n                - is_vector(node_states) == true\n                - max(node_states) < num_states()\n            ensures\n                - In a chain-structured graph, each node has a potential function associated with\n                  it.  The potential function operates on the variable given by the node as well\n                  as the order() previous variables.  Therefore, factor_value() returns the value \n                  of the factor/potential function associated with node node_id where the following \n                  nodes take on the values defined below:\n                    - node_states(0) == the value of the node with ID node_id\n                    - node_states(i) == the value of the node with ID node_id-i\n                - It is ok for this function to return a value of -std::numeric_limits<double>::infinity().\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_problem\n        >\n    void find_max_factor_graph_viterbi (\n        const map_problem& prob,\n        std::vector<unsigned long>& map_assignment\n    );\n    /*!\n        requires\n            - prob.num_states() > 0\n            - std::pow(prob.num_states(), prob.order()) < std::numeric_limits<unsigned long>::max()\n              (i.e. The Viterbi algorithm is exponential in the order of the map problem.  So don't \n              make order too large.)\n            - map_problem == an object with an interface compatible with the map_problem\n              object defined at the top of this file.\n        ensures\n            - This function is a tool for exactly solving the MAP problem in a chain-structured \n              graphical model or factor graph.  That is, it attempts to solve a certain kind of \n              optimization problem which can be defined as follows:\n                - Let X denote a set of prob.number_of_nodes() integer valued variables, each taking\n                  a value in the range [0, prob.num_states()).\n                - Let X(i) = the ith variable in X.\n                - Let F(i) = factor_value_i(X(i), X(i-1), ..., X(i-prob.order()))\n                  (This is the value returned by prob.factor_value(i, node_states).  Note that\n                  each factor's value function operates on at most prob.order()+1 variables.\n                  Moreover, the variables are adjacent and hence the graph is \"chain-structured\".)\n\n                 Then this function finds the assignments to the X variables which  \n                 maximizes: sum over all valid i: F(i)\n\n            - #map_assignment == the result of the optimization.   \n            - #map_assignment.size() == prob.number_of_nodes()\n            - for all valid i:\n                - #map_assignment[i] < prob.num_states()\n                - #map_assignment[i] == The MAP assignment for node/variable i.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FIND_MAX_FACTOR_GRAPH_VITERBi_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/find_max_parse_cky.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_FIND_MAX_PaRSE_CKY_Hh_\n#define DLIB_FIND_MAX_PaRSE_CKY_Hh_\n\n#include \"find_max_parse_cky_abstract.h\"\n#include <vector>\n#include <string>\n#include <sstream>\n#include \"../serialize.h\" \n#include \"../array2d.h\"\n\nnamespace dlib\n{\n\n// -----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct constituent \n    {\n        unsigned long begin, end, k;\n        T left_tag; \n        T right_tag;\n    };\n\n    template <typename T>\n    void serialize(\n        const constituent<T>& item,\n        std::ostream& out\n    )\n    {\n        serialize(item.begin, out);\n        serialize(item.end, out);\n        serialize(item.k, out);\n        serialize(item.left_tag, out);\n        serialize(item.right_tag, out);\n    }\n\n    template <typename T>\n    void deserialize(\n        constituent<T>& item,\n        std::istream& in \n    )\n    {\n        deserialize(item.begin, in);\n        deserialize(item.end, in);\n        deserialize(item.k, in);\n        deserialize(item.left_tag, in);\n        deserialize(item.right_tag, in);\n    }\n\n// -----------------------------------------------------------------------------------------\n\n    const unsigned long END_OF_TREE = 0xFFFFFFFF;\n\n// -----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct parse_tree_element\n    {\n        constituent<T> c;\n        T tag; // id for the constituent corresponding to this level of the tree\n\n        unsigned long left;\n        unsigned long right; \n        double score; \n    };\n\n    template <typename T>\n    void serialize (\n        const parse_tree_element<T>& item,\n        std::ostream& out\n    )\n    {\n        serialize(item.c, out);\n        serialize(item.tag, out);\n        serialize(item.left, out);\n        serialize(item.right, out);\n        serialize(item.score, out);\n    }\n\n    template <typename T>\n    void deserialize (\n        parse_tree_element<T>& item,\n        std::istream& in \n    )\n    {\n        deserialize(item.c, in);\n        deserialize(item.tag, in);\n        deserialize(item.left, in);\n        deserialize(item.right, in);\n        deserialize(item.score, in);\n    }\n\n// -----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T>\n        unsigned long fill_parse_tree(\n            std::vector<parse_tree_element<T> >& parse_tree, \n            const T& tag,\n            const array2d<std::map<T, parse_tree_element<T> > >& back, \n            long r, long c\n        )\n        /*!\n            requires\n                - back[r][c].size() == 0 || back[r][c].count(tag) != 0\n        !*/\n        {\n            // base case of the recursion \n            if (back[r][c].size() == 0)\n            {\n                return END_OF_TREE;\n            }\n\n            const unsigned long idx = parse_tree.size();\n            const parse_tree_element<T>& item = back[r][c].find(tag)->second;\n            parse_tree.push_back(item);\n\n            const long k = item.c.k;\n            const unsigned long idx_left  = fill_parse_tree(parse_tree, item.c.left_tag, back, r, k-1); \n            const unsigned long idx_right = fill_parse_tree(parse_tree, item.c.right_tag, back, k, c); \n            parse_tree[idx].left = idx_left;\n            parse_tree[idx].right = idx_right;\n            return idx;\n        }\n    }\n\n    template <typename T, typename production_rule_function>\n    void find_max_parse_cky (\n        const std::vector<T>& sequence,\n        const production_rule_function& production_rules,\n        std::vector<parse_tree_element<T> >& parse_tree\n    )\n    {\n        parse_tree.clear();\n        if (sequence.size() == 0)\n            return;\n\n        array2d<std::map<T,double> > table(sequence.size(), sequence.size());\n        array2d<std::map<T,parse_tree_element<T> > > back(sequence.size(), sequence.size());\n        typedef typename std::map<T,double>::iterator itr;\n        typedef typename std::map<T,parse_tree_element<T> >::iterator itr_b;\n\n        for (long r = 0; r < table.nr(); ++r)\n            table[r][r][sequence[r]] = 0;\n\n        std::vector<std::pair<T,double> > possible_tags;\n\n        for (long r = table.nr()-2; r >= 0; --r)\n        {\n            for (long c = r+1; c < table.nc(); ++c)\n            {\n                for (long k = r; k < c; ++k)\n                {\n                    for (itr i = table[k+1][c].begin(); i != table[k+1][c].end(); ++i)\n                    {\n                        for (itr j = table[r][k].begin(); j != table[r][k].end(); ++j)\n                        {\n                            constituent<T> con;\n                            con.begin = r;\n                            con.end = c+1;\n                            con.k = k+1;\n                            con.left_tag = j->first;\n                            con.right_tag = i->first;\n                            possible_tags.clear();\n                            production_rules(sequence, con, possible_tags);\n                            for (unsigned long m = 0; m < possible_tags.size(); ++m)\n                            {\n                                const double score = possible_tags[m].second + i->second + j->second;\n                                itr match = table[r][c].find(possible_tags[m].first);\n                                if (match == table[r][c].end() || score > match->second)\n                                {\n                                    table[r][c][possible_tags[m].first] = score;\n                                    parse_tree_element<T> item;\n                                    item.c = con;\n                                    item.score = score;\n                                    item.tag = possible_tags[m].first;\n                                    item.left = END_OF_TREE;\n                                    item.right = END_OF_TREE;\n                                    back[r][c][possible_tags[m].first] = item;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n\n        // now use back pointers to build the parse trees\n        const long r = 0;\n        const long c = back.nc()-1;\n        if (back[r][c].size() != 0)\n        {\n\n            // find the max scoring element in back[r][c]\n            itr_b max_i = back[r][c].begin();\n            itr_b i = max_i;\n            ++i;\n            for (; i != back[r][c].end(); ++i)\n            {\n                if (i->second.score > max_i->second.score)\n                    max_i = i;\n            }\n\n            parse_tree.reserve(c);\n            impl::fill_parse_tree(parse_tree, max_i->second.tag, back, r, c);\n        }\n    }\n\n// -----------------------------------------------------------------------------------------\n\n    class parse_tree_to_string_error : public error\n    {\n    public:\n        parse_tree_to_string_error(const std::string& str): error(str) {}\n    };\n\n    namespace impl\n    {\n        template <bool enabled, typename T>\n        typename enable_if_c<enabled>::type conditional_print(\n            const T& item,\n            std::ostream& out\n        ) { out << item << \" \"; }\n\n        template <bool enabled, typename T>\n        typename disable_if_c<enabled>::type conditional_print(\n            const T& ,\n            std::ostream& \n        ) {  }\n\n        template <bool print_tag, bool skip_tag, typename T, typename U >\n        void print_parse_tree_helper (\n            const std::vector<parse_tree_element<T> >& tree,\n            const std::vector<U>& words,\n            unsigned long i,\n            const T& tag_to_skip,\n            std::ostream& out\n        )\n        {\n            if (!skip_tag || tree[i].tag != tag_to_skip)\n                out << \"[\";\n\n            bool left_recurse = false;\n\n            // Only print if we are supposed to.  Doing it this funny way avoids compiler\n            // errors in parse_tree_to_string() for the case where tag isn't\n            // printable.\n            if (!skip_tag || tree[i].tag != tag_to_skip)\n                conditional_print<print_tag>(tree[i].tag, out);\n\n            if (tree[i].left < tree.size())\n            {\n                left_recurse = true;\n                print_parse_tree_helper<print_tag,skip_tag>(tree, words, tree[i].left, tag_to_skip, out);\n            }\n            else\n            {\n                if ((tree[i].c.begin) < words.size())\n                {\n                    out << words[tree[i].c.begin] << \" \";\n                }\n                else\n                {\n                    std::ostringstream sout;\n                    sout << \"Parse tree refers to element \" << tree[i].c.begin \n                         << \" of sequence which is only of size \" << words.size() << \".\";\n                    throw parse_tree_to_string_error(sout.str());\n                }\n            }\n\n            if (left_recurse == true)\n                out << \" \";\n\n            if (tree[i].right < tree.size())\n            {\n                print_parse_tree_helper<print_tag,skip_tag>(tree, words, tree[i].right, tag_to_skip, out);\n            }\n            else\n            {\n                if (tree[i].c.k < words.size())\n                {\n                    out << words[tree[i].c.k];\n                }\n                else\n                {\n                    std::ostringstream sout;\n                    sout << \"Parse tree refers to element \" << tree[i].c.k \n                         << \" of sequence which is only of size \" << words.size() << \".\";\n                    throw parse_tree_to_string_error(sout.str());\n                }\n            }\n\n\n            if (!skip_tag || tree[i].tag != tag_to_skip)\n                out << \"]\";\n        }\n    }\n\n// -----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    std::string parse_tree_to_string (\n        const std::vector<parse_tree_element<T> >& tree,\n        const std::vector<U>& words,\n        const unsigned long root_idx = 0\n    )\n    {\n        if (root_idx >= tree.size())\n            return \"\";\n\n        std::ostringstream sout;\n        impl::print_parse_tree_helper<false,false>(tree, words, root_idx, tree[root_idx].tag, sout);\n        return sout.str();\n    }\n\n// -----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    std::string parse_tree_to_string_tagged (\n        const std::vector<parse_tree_element<T> >& tree,\n        const std::vector<U>& words,\n        const unsigned long root_idx = 0\n    )\n    {\n        if (root_idx >= tree.size())\n            return \"\";\n\n        std::ostringstream sout;\n        impl::print_parse_tree_helper<true,false>(tree, words, root_idx, tree[root_idx].tag, sout);\n        return sout.str();\n    }\n\n// -----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    std::string parse_trees_to_string (\n        const std::vector<parse_tree_element<T> >& tree,\n        const std::vector<U>& words,\n        const T& tag_to_skip\n    )\n    {\n        if (tree.size() == 0)\n            return \"\";\n\n        std::ostringstream sout;\n        impl::print_parse_tree_helper<false,true>(tree, words, 0, tag_to_skip, sout);\n        return sout.str();\n    }\n\n// -----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    std::string parse_trees_to_string_tagged (\n        const std::vector<parse_tree_element<T> >& tree,\n        const std::vector<U>& words,\n        const T& tag_to_skip\n    )\n    {\n        if (tree.size() == 0)\n            return \"\";\n\n        std::ostringstream sout;\n        impl::print_parse_tree_helper<true,true>(tree, words, 0, tag_to_skip, sout);\n        return sout.str();\n    }\n\n// -----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T>\n        void helper_find_trees_without_tag (\n            const std::vector<parse_tree_element<T> >& tree,\n            const T& tag,\n            std::vector<unsigned long>& tree_roots,\n            unsigned long idx\n        )\n        {\n            if (idx < tree.size())\n            {\n                if (tree[idx].tag != tag)\n                {\n                    tree_roots.push_back(idx);\n                }\n                else\n                {\n                    helper_find_trees_without_tag(tree, tag, tree_roots, tree[idx].left);\n                    helper_find_trees_without_tag(tree, tag, tree_roots, tree[idx].right);\n                }\n            }\n        }\n    }\n\n    template <typename T>\n    void find_trees_not_rooted_with_tag (\n        const std::vector<parse_tree_element<T> >& tree,\n        const T& tag,\n        std::vector<unsigned long>& tree_roots \n    )\n    {\n        tree_roots.clear();\n        impl::helper_find_trees_without_tag(tree, tag, tree_roots, 0);\n    }\n\n// -----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FIND_MAX_PaRSE_CKY_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/find_max_parse_cky_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_FIND_MAX_PARsE_CKY_ABSTRACT_Hh_\n#ifdef DLIB_FIND_MAX_PARsE_CKY_ABSTRACT_Hh_\n\n#include <vector>\n#include <string>\n#include \"../algs.h\" \n#include \"../serialize.h\" \n\nnamespace dlib\n{\n\n// -----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct constituent \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents the linguistic idea of a constituent, that is, a\n                group of words that functions as a single unit.  In particular, it\n                represents a combination of two constituents into a new constituent.\n\n                Additionally, a constituent object represents a range of words relative to\n                some std::vector of words.  The range is from [begin, end) (i.e. including\n                begin but not including end, so using the normal C++ iterator notation).\n                Moreover, a constituent is always composed of two parts, each having a tag.\n                Therefore, the left part is composed of the words in the range [begin,k)\n                and has tag left_tag while the right part of the constituent contains the\n                words in the range [k,end) and has the tag right_tag.\n\n                The tags are user defined objects of type T.  In general, they are used to\n                represent syntactic categories such as noun phrase, verb phrase, etc.\n        !*/\n\n        unsigned long begin, end, k;\n        T left_tag; \n        T right_tag;\n    };\n\n    template <\n        typename T\n        >\n    void serialize(\n        const constituent<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize(\n        constituent<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// -----------------------------------------------------------------------------------------\n\n    /*!A END_OF_TREE is used to indicate that parse_tree_element::left or\n         parse_tree_element::right doesn't point to another subtree.\n    !*/\n    const unsigned long END_OF_TREE = 0xFFFFFFFF;\n\n// -----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct parse_tree_element\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is used to represent a node in a binary parse tree.  An entire\n                parse tree is represented by a std::vector of parse_tree_element objects.\n                We follow the convention that the first element of this vector is always\n                the root of the entire tree.\n\n                The fields of this object have the following interpretations:   \n                    - c == the constituent spanned by this node in the parse tree.\n                      Therefore, the node spans the words in the range [c.begin, c.end).\n                    - tag == the syntactic category of this node in the parse tree.\n                    - score == the score or log likelihood for this parse tree.  In\n                      general, this is the sum of scores of all the production rules used\n                      to build the tree rooted at the current node.\n                    - let PT denote the vector of parse_tree_elements that defines an\n                      entire parse tree.  Then we have:\n                        - if (left != END_OF_TREE) then\n                            - PT[left] == the left sub-tree of the current node.\n                            - PT[left] spans the words [c.begin, c.k)\n                            - PT[left].tag == c.left_tag\n                        - else\n                            - there is no left sub-tree\n\n                        - if (right != END_OF_TREE) then\n                            - PT[right] == the right sub-tree of the current node.\n                            - PT[right] spans the words [c.k, c.end)\n                            - PT[right].tag == c.right_tag\n                        - else\n                            - there is no right sub-tree\n        !*/\n\n        constituent<T> c;\n        T tag; \n        double score; \n\n        unsigned long left;\n        unsigned long right; \n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const parse_tree_element<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        parse_tree_element<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// -----------------------------------------------------------------------------------------\n// -----------------------------------------------------------------------------------------\n\n    void example_production_rule_function (\n        const std::vector<T>& words,\n        const constituent<T>& c,\n        std::vector<std::pair<T,double> >& possible_tags\n    )\n    /*!\n        requires\n            - 0 <= c.begin < c.k < c.end <= words.size()\n            - possible_tags.size() == 0 \n        ensures\n            - Finds all the syntactic categories that can be used to label c and puts those\n              categories, along with their scores, into possible_tags.  Or in other words,\n              this function determines which production rules can be used to turn the left\n              and right sub-constituents in c into a single constituent.  The contents of c\n              have the following interpretations:\n                - The left sub-constituent has syntactic category c.left_tag \n                - for all i such that c.begin <= i < c.k: \n                    - words[i] is part of the left sub-constituent.\n                - The right sub-constituent has syntactic category c.right_tag \n                - for all i such that c.k <= i < c.end: \n                    - words[i] is part of the right sub-constituent.\n\n            - Note that example_production_rule_function() is not a real function.  It is\n              here just to show you how to define production rule producing functions for\n              use with the find_max_parse_cky() routine defined below.\n    !*/\n\n    template <\n        typename T, \n        typename production_rule_function\n        >\n    void find_max_parse_cky (\n        const std::vector<T>& words,\n        const production_rule_function& production_rules,\n        std::vector<parse_tree_element<T> >& parse_tree\n    );\n    /*!\n        requires\n            - production_rule_function == a function or function object with the same\n              interface as example_production_rule_function defined above.\n            - It must be possible to store T objects in a std::map.\n        ensures\n            - Uses the CKY algorithm to find the most probable/highest scoring binary parse\n              tree of the given vector of words.  \n            - if (#parse_tree.size() == 0) then\n                - There is no parse tree, using the given production_rules, that can cover\n                  the given word sequence.\n            - else\n                - #parse_tree == the highest scoring parse tree that covers all the\n                  elements of words.\n                - #parse_tree[0] == the root node of the parse tree.\n                - #parse_tree[0].score == the score of the parse tree.  This is the sum of\n                  the scores of all production rules used to construct the tree.\n                - #parse_tree[0].begin == 0\n                - #parse_tree[0].end == words.size()\n            - This function uses production_rules() to find out what the allowed production\n              rules are.  That is, production_rules() defines all properties of the grammar\n              used by find_max_parse_cky(). \n    !*/\n\n// -----------------------------------------------------------------------------------------\n// -----------------------------------------------------------------------------------------\n\n    class parse_tree_to_string_error : public error\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is the exception thrown by parse_tree_to_string() and\n                parse_tree_to_string_tagged() if the inputs are discovered to be invalid.\n        !*/\n    };\n\n// -----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename U\n        >\n    std::string parse_tree_to_string (\n        const std::vector<parse_tree_element<T> >& tree,\n        const std::vector<U>& words,\n        const unsigned long root_idx = 0\n    );\n    /*!\n        requires\n            - It must be possible to print U objects to an ostream using operator<<\n              (typically, U would be something like std::string)\n        ensures\n            - Interprets tree as a parse tree defined over the given sequence of words.  \n            - returns a bracketed string that represents the parse tree over the words.  \n              For example, suppose the following parse tree is input:\n\n                        /\\\n                       /  \\\n                      /\\   \\\n                     /  \\   \\\n                   the dog  ran\n\n              Then the output would be the string \"[[the dog] ran]\"\n            - Only the sub-tree rooted at tree[root_idx] will be output.  If root_idx >= \n              tree.size() then the empty string is returned.\n        throws\n            - parse_tree_to_string_error\n                This exception is thrown if an invalid tree is detected.  This might happen\n                if the tree refers to elements of words that don't exist because words is\n                shorted than it is supposed to be.\n    !*/\n\n// -----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename U\n        >\n    std::string parse_tree_to_string_tagged (\n        const std::vector<parse_tree_element<T> >& tree,\n        const std::vector<U>& words,\n        const unsigned long root_idx = 0\n    );\n    /*!\n        requires\n            - It must be possible to print T objects to an ostream using operator<<\n            - It must be possible to print U objects to an ostream using operator<<\n              (typically, U would be something like std::string)\n        ensures\n            - This function does the same thing as parse_tree_to_string() except that it\n              also includes the parse_tree_element::tag object in the output.  Therefore,\n              the tag of each bracket will be included as the first token inside the\n              bracket.  For example, suppose the following parse tree is input (where tags\n              are shown at the vertices):\n\n                        S\n                        /\\\n                      NP  \\\n                      /\\   \\\n                     /  \\   \\\n                   the dog  ran\n\n              Then the output would be the string \"[S [NP the dog] ran]\"\n            - Only the sub-tree rooted at tree[root_idx] will be output.  If root_idx >=\n              tree.size() then the empty string is returned.\n        throws\n            - parse_tree_to_string_error\n                This exception is thrown if an invalid tree is detected.  This might happen\n                if the tree refers to elements of words that don't exist because words is\n                shorted than it is supposed to be.\n    !*/\n\n// -----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename U\n        >\n    std::string parse_trees_to_string (\n        const std::vector<parse_tree_element<T> >& tree,\n        const std::vector<U>& words,\n        const T& tag_to_skip\n    );\n    /*!\n        requires\n            - It must be possible to print U objects to an ostream using operator<<\n              (typically, U would be something like std::string)\n        ensures\n            - This function behaves just like parse_tree_to_string() except that it will\n              not print the brackets (i.e. []) for the top most parts of the tree which\n              have tags equal to tag_to_skip.  It will however print all the words.\n              Therefore, this function only includes brackets on the subtrees which begin\n              with a tag other than tag_to_skip.\n        throws\n            - parse_tree_to_string_error\n                This exception is thrown if an invalid tree is detected.  This might happen\n                if the tree refers to elements of words that don't exist because words is\n                shorted than it is supposed to be.\n    !*/\n\n// -----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename U\n        >\n    std::string parse_trees_to_string_tagged (\n        const std::vector<parse_tree_element<T> >& tree,\n        const std::vector<U>& words,\n        const T& tag_to_skip\n    );\n    /*!\n        requires\n            - It must be possible to print T objects to an ostream using operator<<\n            - It must be possible to print U objects to an ostream using operator<<\n              (typically, U would be something like std::string)\n        ensures\n            - This function behaves just like parse_tree_to_string_tagged() except that it\n              will not print the brackets (i.e. []) for the top most parts of the tree\n              which have tags equal to tag_to_skip.  It will however print all the words.\n              Therefore, this function only includes brackets on the subtrees which begin\n              with a tag other than tag_to_skip.\n        throws\n            - parse_tree_to_string_error\n                This exception is thrown if an invalid tree is detected.  This might happen\n                if the tree refers to elements of words that don't exist because words is\n                shorted than it is supposed to be.\n    !*/\n\n// -----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void find_trees_not_rooted_with_tag (\n        const std::vector<parse_tree_element<T> >& tree,\n        const T& tag,\n        std::vector<unsigned long>& tree_roots \n    );\n    /*!\n        requires\n            - objects of type T must be comparable using operator==\n        ensures\n            - Finds all the largest non-overlapping trees in tree that are not rooted with\n              the given tag.  \n            - find_trees_not_rooted_with_tag() is useful when you want to cut a parse tree\n              into a bunch of sub-trees and you know that the top level of the tree is all\n              composed of the same kind of tag.  So if you want to just \"slice off\" the top\n              of the tree where this tag lives then this function is useful for doing that.\n            - #tree_roots.size() == the number of sub-trees found.\n            - for all valid i:\n                - tree[#tree_roots[i]].tag != tag\n            - To make the operation of this function clearer, here are a few examples of\n              what it will do:\n                - if (tree[0].tag != tag) then \n                    - #tree_roots.size() == 0\n                    - #tree_roots[0] == 0\n                - else if (tree[0].tag == tag but its immediate children's tags are not equal to tag) then \n                    - #tree_roots.size() == 2\n                    - #tree_roots[0] == tree[0].left\n                    - #tree_roots[1] == tree[0].right\n    !*/\n\n// -----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_FIND_MAX_PARsE_CKY_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/max_cost_assignment.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MAX_COST_ASSIgNMENT_Hh_\n#define DLIB_MAX_COST_ASSIgNMENT_Hh_\n\n#include \"max_cost_assignment_abstract.h\"\n#include \"../matrix.h\"\n#include <vector>\n#include <deque>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    typename EXP::type assignment_cost (\n        const matrix_exp<EXP>& cost,\n        const std::vector<long>& assignment\n    )\n    {\n        DLIB_ASSERT(cost.nr() == cost.nc(),\n            \"\\t type assignment_cost(cost,assignment)\"\n            << \"\\n\\t cost.nr(): \" << cost.nr()\n            << \"\\n\\t cost.nc(): \" << cost.nc()\n            );\n#ifdef ENABLE_ASSERTS\n        // can't call max on an empty vector. So put an if here to guard against it.\n        if (assignment.size() > 0)\n        {\n            DLIB_ASSERT(0 <= min(mat(assignment)) && max(mat(assignment)) < cost.nr(),\n                \"\\t type assignment_cost(cost,assignment)\"\n                << \"\\n\\t cost.nr(): \" << cost.nr()\n                << \"\\n\\t cost.nc(): \" << cost.nc()\n                << \"\\n\\t min(assignment): \" << min(mat(assignment)) \n                << \"\\n\\t max(assignment): \" << max(mat(assignment)) \n                );\n        }\n#endif\n\n        typename EXP::type temp = 0;\n        for (unsigned long i = 0; i < assignment.size(); ++i)\n        {\n            temp += cost(i, assignment[i]);\n        }\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename EXP>\n        inline void compute_slack(\n            const long x,\n            std::vector<typename EXP::type>& slack,\n            std::vector<long>& slackx,\n            const matrix_exp<EXP>& cost,\n            const std::vector<typename EXP::type>& lx,\n            const std::vector<typename EXP::type>& ly\n        )\n        {\n            for (long y = 0; y < cost.nc(); ++y)\n            {\n                if (lx[x] + ly[y] - cost(x,y) < slack[y])\n                {\n                    slack[y] = lx[x] + ly[y] - cost(x,y);\n                    slackx[y] = x;\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    std::vector<long> max_cost_assignment (\n        const matrix_exp<EXP>& cost_\n    )                         \n    {\n        const_temp_matrix<EXP> cost(cost_);\n        typedef typename EXP::type type;\n        // This algorithm only works if the elements of the cost matrix can be reliably \n        // compared using operator==. However, comparing for equality with floating point\n        // numbers is not a stable operation. So you need to use an integer cost matrix.\n        COMPILE_TIME_ASSERT(std::numeric_limits<type>::is_integer);\n        DLIB_ASSERT(cost.nr() == cost.nc(),\n            \"\\t std::vector<long> max_cost_assignment(cost)\"\n            << \"\\n\\t cost.nr(): \" << cost.nr()\n            << \"\\n\\t cost.nc(): \" << cost.nc()\n            );\n\n        using namespace dlib::impl;\n        /*\n            I based the implementation of this algorithm on the description of the\n            Hungarian algorithm on the following websites:\n                http://www.math.uwo.ca/~mdawes/courses/344/kuhn-munkres.pdf\n                http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=hungarianAlgorithm\n\n            Note that this is the fast O(n^3) version of the algorithm.\n        */\n\n        if (cost.size() == 0)\n            return std::vector<long>();\n\n        std::vector<type> lx, ly;\n        std::vector<long> xy;\n        std::vector<long> yx;\n        std::vector<char> S, T;\n        std::vector<type> slack;\n        std::vector<long> slackx;\n        std::vector<long> aug_path;\n\n\n\n\n        // Initially, nothing is matched. \n        xy.assign(cost.nc(), -1);\n        yx.assign(cost.nc(), -1);\n        /*\n            We maintain the following invariant:\n                Vertex x is matched to vertex xy[x] and\n                vertex y is matched to vertex yx[y].\n\n                A value of -1 means a vertex isn't matched to anything.  Moreover,\n                x corresponds to rows of the cost matrix and y corresponds to the\n                columns of the cost matrix.  So we are matching X to Y.\n        */\n\n\n        // Create an initial feasible labeling.  Moreover, in the following\n        // code we will always have: \n        //     for all valid x and y:  lx[x] + ly[y] >= cost(x,y)\n        lx.resize(cost.nc());\n        ly.assign(cost.nc(),0);\n        for (long x = 0; x < cost.nr(); ++x)\n            lx[x] = max(rowm(cost,x));\n\n        // Now grow the match set by picking edges from the equality subgraph until\n        // we have a complete matching.\n        for (long match_size = 0; match_size < cost.nc(); ++match_size)\n        {\n            std::deque<long> q;\n\n            // Empty out the S and T sets\n            S.assign(cost.nc(), false);\n            T.assign(cost.nc(), false);\n\n            // clear out old slack values\n            slack.assign(cost.nc(), std::numeric_limits<type>::max());\n            slackx.resize(cost.nc());\n            /*\n                slack and slackx are maintained such that we always\n                have the following (once they get initialized by compute_slack() below):\n                    - for all y:\n                        - let x == slackx[y]\n                        - slack[y] == lx[x] + ly[y] - cost(x,y)\n            */\n\n            aug_path.assign(cost.nc(), -1);\n\n            for (long x = 0; x < cost.nc(); ++x)\n            {\n                // If x is not matched to anything\n                if (xy[x] == -1)\n                {\n                    q.push_back(x);\n                    S[x] = true;\n\n                    compute_slack(x, slack, slackx, cost, lx, ly);\n                    break;\n                }\n            }\n\n\n            long x_start = 0;\n            long y_start = 0;\n\n            // Find an augmenting path.  \n            bool found_augmenting_path = false;\n            while (!found_augmenting_path)\n            {\n                while (q.size() > 0 && !found_augmenting_path)\n                {\n                    const long x = q.front();\n                    q.pop_front();\n                    for (long y = 0; y < cost.nc(); ++y)\n                    {\n                        if (cost(x,y) == lx[x] + ly[y] && !T[y])\n                        {\n                            // if vertex y isn't matched with anything\n                            if (yx[y] == -1) \n                            {\n                                y_start = y;\n                                x_start = x;\n                                found_augmenting_path = true;\n                                break;\n                            }\n\n                            T[y] = true;\n                            q.push_back(yx[y]);\n\n                            aug_path[yx[y]] = x;\n                            S[yx[y]] = true;\n                            compute_slack(yx[y], slack, slackx, cost, lx, ly);\n                        }\n                    }\n                }\n\n                if (found_augmenting_path)\n                    break;\n\n\n                // Since we didn't find an augmenting path we need to improve the \n                // feasible labeling stored in lx and ly.  We also need to keep the\n                // slack updated accordingly.\n                type delta = std::numeric_limits<type>::max();\n                for (unsigned long i = 0; i < T.size(); ++i)\n                {\n                    if (!T[i])\n                        delta = std::min(delta, slack[i]);\n                }\n                for (unsigned long i = 0; i < T.size(); ++i)\n                {\n                    if (S[i])\n                        lx[i] -= delta;\n\n                    if (T[i])\n                        ly[i] += delta;\n                    else\n                        slack[i] -= delta;\n                }\n\n\n\n                q.clear();\n                for (long y = 0; y < cost.nc(); ++y)\n                {\n                    if (!T[y] && slack[y] == 0)\n                    {\n                        // if vertex y isn't matched with anything\n                        if (yx[y] == -1)\n                        {\n                            x_start = slackx[y];\n                            y_start = y;\n                            found_augmenting_path = true;\n                            break;\n                        }\n                        else\n                        {\n                            T[y] = true;\n                            if (!S[yx[y]])\n                            {\n                                q.push_back(yx[y]);\n\n                                aug_path[yx[y]] = slackx[y];\n                                S[yx[y]] = true;\n                                compute_slack(yx[y], slack, slackx, cost, lx, ly);\n                            }\n                        }\n                    }\n                }\n            } // end while (!found_augmenting_path)\n\n            // Flip the edges along the augmenting path.  This means we will add one more\n            // item to our matching.\n            for (long cx = x_start, cy = y_start, ty; \n                 cx != -1; \n                 cx = aug_path[cx], cy = ty)\n            {\n                ty = xy[cx];\n                yx[cy] = cx;\n                xy[cx] = cy;\n            }\n\n        }\n\n\n        return xy;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MAX_COST_ASSIgNMENT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/max_cost_assignment_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MAX_COST_ASSIgNMENT_ABSTRACT_Hh_\n#ifdef DLIB_MAX_COST_ASSIgNMENT_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    typename EXP::type assignment_cost (\n        const matrix_exp<EXP>& cost,\n        const std::vector<long>& assignment\n    );\n    /*!\n        requires\n            - cost.nr() == cost.nc()\n            - for all valid i:\n                - 0 <= assignment[i] < cost.nr()\n        ensures\n            - Interprets cost as a cost assignment matrix. That is, cost(i,j) \n              represents the cost of assigning i to j.  \n            - Interprets assignment as a particular set of assignments. That is,\n              i is assigned to assignment[i].\n            - returns the cost of the given assignment. That is, returns\n              a number which is:\n                sum over i: cost(i,assignment[i])\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    std::vector<long> max_cost_assignment (\n        const matrix_exp<EXP>& cost\n    );\n    /*!\n        requires\n            - EXP::type == some integer type (e.g. int)\n              (i.e. cost must contain integers rather than floats or doubles)\n            - cost.nr() == cost.nc()\n        ensures\n            - Finds and returns the solution to the following optimization problem:\n\n                Maximize: f(A) == assignment_cost(cost, A)\n                Subject to the following constraints:\n                    - The elements of A are unique. That is, there aren't any \n                      elements of A which are equal.  \n                    - A.size() == cost.nr()\n\n            - This function implements the O(N^3) version of the Hungarian algorithm \n              where N is the number of rows in the cost matrix.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MAX_COST_ASSIgNMENT_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/max_sum_submatrix.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MAX_SUM_SUBMaTRIX_Hh_\n#define DLIB_MAX_SUM_SUBMaTRIX_Hh_\n\n#include \"max_sum_submatrix_abstract.h\"\n#include \"../matrix.h\"\n#include <vector>\n#include <queue>\n#include \"../geometry.h\"\n\nnamespace dlib\n{\n    namespace impl\n    {\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        struct range_set\n        {\n            int top_min;\n            int top_max;\n            int bottom_min;\n            int bottom_max;\n            T weight;\n\n            bool operator<(const range_set& item) const { return weight < item.weight; }\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        bool is_terminal_set (\n            const range_set<T>& item\n        )\n        {\n            return (item.top_min  >= item.top_max &&\n                    item.bottom_min >= item.bottom_max);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        void split (\n            const range_set<T>& rset,\n            range_set<T>& a,\n            range_set<T>& b\n        )\n        {\n            if (rset.top_max - rset.top_min > rset.bottom_max - rset.bottom_min)\n            {\n                // split top\n                const int middle = (rset.top_max + rset.top_min)/2;\n                a.top_min = rset.top_min;\n                a.top_max = middle;\n                b.top_min = middle+1;\n                b.top_max = rset.top_max;\n\n                a.bottom_min = rset.bottom_min;\n                a.bottom_max = rset.bottom_max;\n                b.bottom_min = rset.bottom_min;\n                b.bottom_max = rset.bottom_max;\n            }\n            else\n            {\n                // split bottom\n                const int middle = (rset.bottom_max + rset.bottom_min)/2;\n                a.bottom_min = rset.bottom_min;\n                a.bottom_max = middle;\n                b.bottom_min = middle+1;\n                b.bottom_max = rset.bottom_max;\n\n                a.top_min = rset.top_min;\n                a.top_max = rset.top_max;\n                b.top_min = rset.top_min;\n                b.top_max = rset.top_max;\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename EXP, typename T>\n        void find_best_column_range (\n            const matrix_exp<EXP>& sum_pos,\n            const matrix_exp<EXP>& sum_neg,\n            const range_set<T>& row_range,\n            T& weight,\n            int& left,\n            int& right\n        )\n        {\n            left = 0;\n            right = -1;\n            weight = 0;\n            T cur_sum = 0;\n            int cur_pos = 0;\n            for (long c = 0; c < sum_pos.nc(); ++c)\n            {\n                // compute the value for the current column\n                T temp = sum_pos(row_range.bottom_max+1,c) - sum_pos(row_range.top_min,c);\n                if (row_range.top_max <= row_range.bottom_min)\n                    temp += sum_neg(row_range.bottom_min+1,c) - sum_neg(row_range.top_max,c);\n\n\n                cur_sum += temp;\n                if (cur_sum > weight)\n                {\n                    left = cur_pos;\n                    right = c;\n                    weight = cur_sum;\n                }\n\n                if (cur_sum <= 0)\n                {\n                    cur_sum = 0;\n                    cur_pos = c+1;\n                }\n\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    std::vector<rectangle> max_sum_submatrix(\n        const matrix_exp<EXP>& mat,\n        unsigned long max_rects,\n        double thresh_ = 0\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(thresh_ >= 0 && mat.size() > 0,\n            \"\\t std::vector<rectangle> max_sum_submatrix()\"\n            << \"\\n\\t Invalid arguments were given to this function.\"\n            << \"\\n\\t mat.size(): \" << mat.size()\n            << \"\\n\\t thresh_:    \" << thresh_\n            );\n\n        /*\n            This function is basically an implementation of the efficient subwindow search (I-ESS)\n            algorithm presented in the following paper: \n                Efficient Algorithms for Subwindow Search in Object Detection and Localization\n                by Senjian An, Patrick Peursum, Wanquan Liu and Svetha Venkatesh\n                In CVPR 2009\n\n        */\n\n\n        if (max_rects == 0)\n            return std::vector<rectangle>();\n\n        using namespace dlib::impl;\n        typedef typename EXP::type element_type;\n        typedef typename promote<element_type>::type scalar_type;\n\n        const scalar_type thresh = static_cast<scalar_type>(thresh_);\n\n\n        matrix<scalar_type> sum_pos;\n        matrix<scalar_type> sum_neg;\n        sum_pos.set_size(mat.nr()+1, mat.nc());\n        sum_neg.set_size(mat.nr()+1, mat.nc());\n        // integrate over the rows.  \n        for (long c = 0; c < mat.nc(); ++c)\n        {\n            sum_pos(0,c) = 0;\n            sum_neg(0,c) = 0;\n        }\n        for (long r = 0; r < mat.nr(); ++r)\n        {\n            for (long c = 0; c < mat.nc(); ++c)\n            {\n                if (mat(r,c) > 0)\n                {\n                    sum_pos(r+1,c) = mat(r,c) + sum_pos(r,c);\n                    sum_neg(r+1,c) = sum_neg(r,c);\n                }\n                else\n                {\n                    sum_pos(r+1,c) = sum_pos(r,c);\n                    sum_neg(r+1,c) = mat(r,c) + sum_neg(r,c);\n                }\n            }\n        }\n\n        std::priority_queue<range_set<scalar_type> > q;\n\n        // the range_sets will represent ranges of columns \n        range_set<scalar_type> universe_set;\n        universe_set.bottom_min = 0;\n        universe_set.top_min = 0;\n        universe_set.bottom_max = mat.nr()-1;\n        universe_set.top_max = mat.nr()-1;\n        universe_set.weight = sum(rowm(dlib::mat(sum_pos),mat.nr()));\n\n        q.push(universe_set);\n\n        std::vector<rectangle> results;\n        std::vector<scalar_type> temp_pos(mat.nc());\n        std::vector<scalar_type> temp_neg(mat.nc());\n\n        while (q.size() > 0)\n        {\n            if (is_terminal_set(q.top()))\n            {\n                int left, right;\n                scalar_type weight;\n                find_best_column_range(sum_pos, sum_neg, q.top(), weight, left, right);\n\n                rectangle rect(left, q.top().top_min, \n                               right, q.top().bottom_min);\n\n                if (weight <= thresh)\n                    break;\n\n                results.push_back(rect);\n\n                if (results.size() >= max_rects)\n                    break;\n\n                q = std::priority_queue<range_set<scalar_type> >();\n                // We are going to blank out the weights we just used.  So adjust the sum images appropriately.\n                for (long c = rect.left(); c <= rect.right(); ++c)\n                {\n                    temp_pos[c] = sum_pos(rect.bottom()+1,c) - sum_pos(rect.top(),c);\n                    temp_neg[c] = sum_neg(rect.bottom()+1,c) - sum_neg(rect.top(),c);\n                }\n                // blank out the area inside the rectangle\n                for (long r = rect.top(); r <= rect.bottom(); ++r)\n                {\n                    for (long c = rect.left(); c <= rect.right(); ++c)\n                    {\n                        sum_pos(r+1,c) = sum_pos(r,c);\n                        sum_neg(r+1,c) = sum_neg(r,c);\n                    }\n                }\n                // account for the area below the rectangle\n                for (long r = rect.bottom()+2; r < sum_pos.nr(); ++r)\n                {\n                    for (long c = rect.left(); c <= rect.right(); ++c)\n                    {\n                        sum_pos(r,c) -= temp_pos[c];\n                        sum_neg(r,c) -= temp_neg[c];\n                    }\n                }\n\n\n                universe_set.weight = sum(rowm(dlib::mat(sum_pos),mat.nr()));\n                if (universe_set.weight <= thresh)\n                    break;\n\n                q.push(universe_set);\n                continue;\n            }\n\n            range_set<scalar_type> a, b;\n            split(q.top(), a,b);\n            q.pop();\n\n            // these variables are not used at this point in the algorithm.\n            int a_left, a_right;\n            int b_left, b_right;\n\n            find_best_column_range(sum_pos, sum_neg, a, a.weight, a_left, a_right);\n            find_best_column_range(sum_pos, sum_neg, b, b.weight, b_left, b_right);\n\n            if (a.weight > thresh)\n                q.push(a);\n            if (b.weight > thresh)\n                q.push(b);\n\n        }\n\n\n        return results;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MAX_SUM_SUBMaTRIX_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/max_sum_submatrix_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MAX_SUM_SUBMaTRIX_ABSTRACT_Hh_\n#ifdef DLIB_MAX_SUM_SUBMaTRIX_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n#include <vector>\n#include \"../geometry.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    std::vector<rectangle> max_sum_submatrix(\n        const matrix_exp<EXP>& mat,\n        unsigned long max_rects,\n        double thresh = 0\n    );\n    /*!\n        requires\n            - thresh >= 0\n            - mat.size() != 0\n        ensures\n            - This function finds the submatrix within mat which has the largest sum.  It then\n              zeros out that submatrix and repeats the process until no more maximal submatrices can \n              be found.  The std::vector returned will be ordered so that the rectangles with the\n              largest sum come first. \n            - Each submatrix must have a sum greater than thresh.  If no such submatrix exists then\n              the algorithm terminates and returns an empty std::vector.  \n            - At most max_rects rectangles are returned. \n\n            - This function is basically an implementation of the efficient subwindow search (I-ESS)\n              algorithm presented in the following paper: \n                Efficient Algorithms for Subwindow Search in Object Detection and Localization\n                by Senjian An, Patrick Peursum, Wanquan Liu and Svetha Venkatesh\n                In CVPR 2009\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MAX_SUM_SUBMaTRIX_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATIOn_H_\n#define DLIB_OPTIMIZATIOn_H_\n\n#include <cmath>\n#include <limits>\n#include \"optimization_abstract.h\"\n#include \"optimization_search_strategies.h\"\n#include \"optimization_stop_strategies.h\"\n#include \"optimization_line_search.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                    Functions that transform other functions  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct>\n    class central_differences\n    {\n    public:\n        central_differences(const funct& f_, double eps_ = 1e-7) : f(f_), eps(eps_){}\n\n        template <typename T>\n        typename T::matrix_type operator()(const T& x) const\n        {\n            // T must be some sort of dlib matrix \n            COMPILE_TIME_ASSERT(is_matrix<T>::value);\n\n            typename T::matrix_type der(x.size());\n            typename T::matrix_type e(x);\n            for (long i = 0; i < x.size(); ++i)\n            {\n                const double old_val = e(i);\n\n                e(i) += eps;\n                const double delta_plus = f(e);\n                e(i) = old_val - eps;\n                const double delta_minus = f(e);\n\n                der(i) = (delta_plus - delta_minus)/(2*eps);\n\n                // and finally restore the old value of this element\n                e(i) = old_val;\n            }\n\n            return der;\n        }\n\n        template <typename T, typename U>\n        typename U::matrix_type operator()(const T& item, const U& x) const\n        {\n            // U must be some sort of dlib matrix \n            COMPILE_TIME_ASSERT(is_matrix<U>::value);\n\n            typename U::matrix_type der(x.size());\n            typename U::matrix_type e(x);\n            for (long i = 0; i < x.size(); ++i)\n            {\n                const double old_val = e(i);\n\n                e(i) += eps;\n                const double delta_plus = f(item,e);\n                e(i) = old_val - eps;\n                const double delta_minus = f(item,e);\n\n                der(i) = (delta_plus - delta_minus)/(2*eps);\n\n                // and finally restore the old value of this element\n                e(i) = old_val;\n            }\n\n            return der;\n        }\n        \n\n        double operator()(const double& x) const\n        {\n            return (f(x+eps)-f(x-eps))/(2*eps);\n        }\n\n    private:\n        const funct& f;\n        const double eps;\n    };\n\n    template <typename funct>\n    const central_differences<funct> derivative(const funct& f) { return central_differences<funct>(f); }\n    template <typename funct>\n    const central_differences<funct> derivative(const funct& f, double eps) \n    { \n        DLIB_ASSERT (\n            eps > 0,\n            \"\\tcentral_differences derivative(f,eps)\"\n            << \"\\n\\tYou must give an epsilon > 0\"\n            << \"\\n\\teps:     \" << eps \n        );\n        return central_differences<funct>(f,eps); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct, typename EXP1, typename EXP2>\n    struct clamped_function_object\n    {\n        clamped_function_object(\n            const funct& f_,\n            const matrix_exp<EXP1>& x_lower_,\n            const matrix_exp<EXP2>& x_upper_ \n        ) : f(f_), x_lower(x_lower_), x_upper(x_upper_)\n        {\n        }\n\n        template <typename T>\n        double operator() (\n            const T& x\n        ) const\n        {\n            return f(clamp(x,x_lower,x_upper));\n        }\n        \n        const funct& f;\n        const matrix_exp<EXP1>& x_lower;\n        const matrix_exp<EXP2>& x_upper; \n    };\n\n    template <typename funct, typename EXP1, typename EXP2>\n    clamped_function_object<funct,EXP1,EXP2> clamp_function(\n        const funct& f,\n        const matrix_exp<EXP1>& x_lower,\n        const matrix_exp<EXP2>& x_upper \n    ) { return clamped_function_object<funct,EXP1,EXP2>(f,x_lower,x_upper); }\n\n// ----------------------------------------------------------------------------------------\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                    Functions that perform unconstrained optimization \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T\n        >\n    double find_min (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x, \n        double min_f\n    )\n    {\n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        DLIB_CASSERT (\n            is_col_vector(x),\n            \"\\tdouble find_min()\"\n            << \"\\n\\tYou have to supply column vectors to this function\"\n            << \"\\n\\tx.nc():    \" << x.nc()\n        );\n\n\n        T g, s;\n\n        double f_value = f(x);\n        g = der(x);\n\n        DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n        DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n\n        while(stop_strategy.should_continue_search(x, f_value, g) && f_value > min_f)\n        {\n            s = search_strategy.get_next_direction(x, f_value, g);\n\n            double alpha = line_search(\n                        make_line_search_function(f,x,s, f_value),\n                        f_value,\n                        make_line_search_function(der,x,s, g),\n                        dot(g,s), // compute initial gradient for the line search\n                        search_strategy.get_wolfe_rho(), search_strategy.get_wolfe_sigma(), min_f,\n                        search_strategy.get_max_line_search_iterations());\n\n            // Take the search step indicated by the above line search\n            x += alpha*s;\n\n            DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n            DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n        }\n\n        return f_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T\n        >\n    double find_max (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x, \n        double max_f\n    )\n    {\n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        DLIB_CASSERT (\n            is_col_vector(x),\n            \"\\tdouble find_max()\"\n            << \"\\n\\tYou have to supply column vectors to this function\"\n            << \"\\n\\tx.nc():    \" << x.nc()\n        );\n\n        T g, s;\n\n        // This function is basically just a copy of find_min() but with - put in the right places\n        // to flip things around so that it ends up looking for the max rather than the min.\n\n        double f_value = -f(x);\n        g = -der(x);\n\n        DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n        DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n\n        while(stop_strategy.should_continue_search(x, f_value, g) && f_value > -max_f)\n        {\n            s = search_strategy.get_next_direction(x, f_value, g);\n\n            double alpha = line_search(\n                        negate_function(make_line_search_function(f,x,s, f_value)),\n                        f_value,\n                        negate_function(make_line_search_function(der,x,s, g)),\n                        dot(g,s), // compute initial gradient for the line search\n                        search_strategy.get_wolfe_rho(), search_strategy.get_wolfe_sigma(), -max_f,\n                        search_strategy.get_max_line_search_iterations()\n                        );\n\n            // Take the search step indicated by the above line search\n            x += alpha*s;\n\n            // Don't forget to negate these outputs from the line search since they are \n            // from the unnegated versions of f() and der()\n            g *= -1;\n            f_value *= -1;\n\n            DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n            DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n        }\n\n        return -f_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct,\n        typename T\n        >\n    double find_min_using_approximate_derivatives (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f,\n        T& x,\n        double min_f,\n        double derivative_eps = 1e-7\n    )\n    {\n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        DLIB_CASSERT (\n            is_col_vector(x) && derivative_eps > 0,\n            \"\\tdouble find_min_using_approximate_derivatives()\"\n            << \"\\n\\tYou have to supply column vectors to this function\"\n            << \"\\n\\tx.nc():         \" << x.nc()\n            << \"\\n\\tderivative_eps: \" << derivative_eps \n        );\n\n        T g, s;\n\n        double f_value = f(x);\n        g = derivative(f,derivative_eps)(x);\n\n        DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n        DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n\n        while(stop_strategy.should_continue_search(x, f_value, g) && f_value > min_f)\n        {\n            s = search_strategy.get_next_direction(x, f_value, g);\n\n            double alpha = line_search(\n                        make_line_search_function(f,x,s,f_value),\n                        f_value,\n                        derivative(make_line_search_function(f,x,s),derivative_eps),\n                        dot(g,s),  // Sometimes the following line is a better way of determining the initial gradient. \n                        //derivative(make_line_search_function(f,x,s),derivative_eps)(0),\n                        search_strategy.get_wolfe_rho(), search_strategy.get_wolfe_sigma(), min_f,\n                        search_strategy.get_max_line_search_iterations()\n                        );\n\n            // Take the search step indicated by the above line search\n            x += alpha*s;\n\n            g = derivative(f,derivative_eps)(x);\n\n            DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n            DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n        }\n\n        return f_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct,\n        typename T\n        >\n    double find_max_using_approximate_derivatives (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f,\n        T& x,\n        double max_f,\n        double derivative_eps = 1e-7\n    )\n    {\n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        DLIB_CASSERT (\n            is_col_vector(x) && derivative_eps > 0,\n            \"\\tdouble find_max_using_approximate_derivatives()\"\n            << \"\\n\\tYou have to supply column vectors to this function\"\n            << \"\\n\\tx.nc():         \" << x.nc()\n            << \"\\n\\tderivative_eps: \" << derivative_eps \n        );\n\n        // Just negate the necessary things and call the find_min version of this function.\n        return -find_min_using_approximate_derivatives(\n            search_strategy, \n            stop_strategy, \n            negate_function(f),\n            x,\n            -max_f,\n            derivative_eps\n        );\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                      Functions for box constrained optimization\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename V>\n    T zero_bounded_variables (\n        const double eps,\n        T vect,\n        const T& x,\n        const T& gradient,\n        const U& x_lower,\n        const V& x_upper\n    )\n    {\n        for (long i = 0; i < gradient.size(); ++i)\n        {\n            const double tol = eps*std::abs(x(i));\n            // if x(i) is an active bound constraint\n            if (x_lower(i)+tol >= x(i) && gradient(i) > 0)\n                vect(i) = 0;\n            else if (x_upper(i)-tol <= x(i) && gradient(i) < 0)\n                vect(i) = 0;\n        }\n        return vect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename V>\n    T gap_step_assign_bounded_variables (\n        const double eps,\n        T vect,\n        const T& x,\n        const T& gradient,\n        const U& x_lower,\n        const V& x_upper\n    )\n    {\n        for (long i = 0; i < gradient.size(); ++i)\n        {\n            const double tol = eps*std::abs(x(i));\n            // if x(i) is an active bound constraint then we should set it's search\n            // direction such that a single step along the direction either does nothing or\n            // closes the gap of size tol before hitting the bound exactly.\n            if (x_lower(i)+tol >= x(i) && gradient(i) > 0)\n                vect(i) = x_lower(i)-x(i);\n            else if (x_upper(i)-tol <= x(i) && gradient(i) < 0)\n                vect(i) = x_upper(i)-x(i);\n        }\n        return vect;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T,\n        typename EXP1,\n        typename EXP2\n        >\n    double find_min_box_constrained (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x,\n        const matrix_exp<EXP1>& x_lower,\n        const matrix_exp<EXP2>& x_upper\n    )\n    {\n        /*\n            The implementation of this function is more or less based on the discussion in\n            the paper Projected Newton-type Methods in Machine Learning by Mark Schmidt, et al.\n        */\n\n        // make sure the requires clause is not violated\n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        DLIB_CASSERT (\n            is_col_vector(x) && is_col_vector(x_lower) && is_col_vector(x_upper) &&\n            x.size() == x_lower.size() && x.size() == x_upper.size(),\n            \"\\tdouble find_min_box_constrained()\"\n            << \"\\n\\t The inputs to this function must be equal length column vectors.\"\n            << \"\\n\\t is_col_vector(x):       \" << is_col_vector(x)\n            << \"\\n\\t is_col_vector(x_upper): \" << is_col_vector(x_upper)\n            << \"\\n\\t is_col_vector(x_upper): \" << is_col_vector(x_upper)\n            << \"\\n\\t x.size():               \" << x.size()\n            << \"\\n\\t x_lower.size():         \" << x_lower.size()\n            << \"\\n\\t x_upper.size():         \" << x_upper.size()\n        );\n        DLIB_ASSERT (\n            min(x_upper-x_lower) > 0,\n            \"\\tdouble find_min_box_constrained()\"\n            << \"\\n\\t You have to supply proper box constraints to this function.\"\n            << \"\\n\\r min(x_upper-x_lower): \" << min(x_upper-x_lower)\n        );\n\n\n        T g, s;\n        double f_value = f(x);\n        g = der(x);\n\n        DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n        DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n\n        // gap_eps determines how close we have to get to a bound constraint before we\n        // start basically dropping it from the optimization and consider it to be an\n        // active constraint.\n        const double gap_eps = 1e-8;\n\n        double last_alpha = 1;\n        while(stop_strategy.should_continue_search(x, f_value, g))\n        {\n            s = search_strategy.get_next_direction(x, f_value, zero_bounded_variables(gap_eps, g, x, g, x_lower, x_upper));\n            s = gap_step_assign_bounded_variables(gap_eps, s, x, g, x_lower, x_upper);\n\n            double alpha = backtracking_line_search(\n                        make_line_search_function(clamp_function(f,x_lower,x_upper), x, s, f_value),\n                        f_value,\n                        dot(g,s), // compute gradient for the line search\n                        last_alpha, \n                        search_strategy.get_wolfe_rho(), \n                        search_strategy.get_max_line_search_iterations());\n\n            // Do a trust region style thing for alpha.  The idea is that if we take a\n            // small step then we are likely to take another small step.  So we reuse the\n            // alpha from the last iteration unless the line search didn't shrink alpha at\n            // all, in that case, we start with a bigger alpha next time.\n            if (alpha == last_alpha)\n                last_alpha = std::min(last_alpha*10,1.0);\n            else\n                last_alpha = alpha;\n\n            // Take the search step indicated by the above line search\n            x = clamp(x + alpha*s, x_lower, x_upper);\n            g = der(x);\n\n            DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n            DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n        }\n\n        return f_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T\n        >\n    double find_min_box_constrained (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x,\n        double x_lower,\n        double x_upper\n    )\n    {\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        typedef typename T::type scalar_type;\n        return find_min_box_constrained(search_strategy,\n                                        stop_strategy,\n                                        f,\n                                        der,\n                                        x,\n                                        uniform_matrix<scalar_type>(x.size(),1,x_lower),\n                                        uniform_matrix<scalar_type>(x.size(),1,x_upper) );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T,\n        typename EXP1,\n        typename EXP2\n        >\n    double find_max_box_constrained (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x,\n        const matrix_exp<EXP1>& x_lower,\n        const matrix_exp<EXP2>& x_upper\n    )\n    {\n        // make sure the requires clause is not violated\n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        DLIB_CASSERT (\n            is_col_vector(x) && is_col_vector(x_lower) && is_col_vector(x_upper) &&\n            x.size() == x_lower.size() && x.size() == x_upper.size(),\n            \"\\tdouble find_max_box_constrained()\"\n            << \"\\n\\t The inputs to this function must be equal length column vectors.\"\n            << \"\\n\\t is_col_vector(x):       \" << is_col_vector(x)\n            << \"\\n\\t is_col_vector(x_upper): \" << is_col_vector(x_upper)\n            << \"\\n\\t is_col_vector(x_upper): \" << is_col_vector(x_upper)\n            << \"\\n\\t x.size():               \" << x.size()\n            << \"\\n\\t x_lower.size():         \" << x_lower.size()\n            << \"\\n\\t x_upper.size():         \" << x_upper.size()\n        );\n        DLIB_ASSERT (\n            min(x_upper-x_lower) > 0,\n            \"\\tdouble find_max_box_constrained()\"\n            << \"\\n\\t You have to supply proper box constraints to this function.\"\n            << \"\\n\\r min(x_upper-x_lower): \" << min(x_upper-x_lower)\n        );\n\n        // This function is basically just a copy of find_min_box_constrained() but with - put \n        // in the right places to flip things around so that it ends up looking for the max\n        // rather than the min.\n\n        T g, s;\n        double f_value = -f(x);\n        g = -der(x);\n\n        DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n        DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n\n        // gap_eps determines how close we have to get to a bound constraint before we\n        // start basically dropping it from the optimization and consider it to be an\n        // active constraint.\n        const double gap_eps = 1e-8;\n\n        double last_alpha = 1;\n        while(stop_strategy.should_continue_search(x, f_value, g))\n        {\n            s = search_strategy.get_next_direction(x, f_value, zero_bounded_variables(gap_eps, g, x, g, x_lower, x_upper));\n            s = gap_step_assign_bounded_variables(gap_eps, s, x, g, x_lower, x_upper);\n\n            double alpha = backtracking_line_search(\n                        negate_function(make_line_search_function(clamp_function(f,x_lower,x_upper), x, s, f_value)),\n                        f_value,\n                        dot(g,s), // compute gradient for the line search\n                        last_alpha, \n                        search_strategy.get_wolfe_rho(), \n                        search_strategy.get_max_line_search_iterations());\n\n            // Do a trust region style thing for alpha.  The idea is that if we take a\n            // small step then we are likely to take another small step.  So we reuse the\n            // alpha from the last iteration unless the line search didn't shrink alpha at\n            // all, in that case, we start with a bigger alpha next time.\n            if (alpha == last_alpha)\n                last_alpha = std::min(last_alpha*10,1.0);\n            else\n                last_alpha = alpha;\n\n            // Take the search step indicated by the above line search\n            x = clamp(x + alpha*s, x_lower, x_upper);\n            g = -der(x);\n\n            // Don't forget to negate the output from the line search since it is  from the\n            // unnegated version of f() \n            f_value *= -1;\n\n            DLIB_ASSERT(is_finite(f_value), \"The objective function generated non-finite outputs\");\n            DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n        }\n\n        return -f_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T\n        >\n    double find_max_box_constrained (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x,\n        double x_lower,\n        double x_upper\n    )\n    {\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        typedef typename T::type scalar_type;\n        return find_max_box_constrained(search_strategy,\n                                        stop_strategy,\n                                        f,\n                                        der,\n                                        x,\n                                        uniform_matrix<scalar_type>(x.size(),1,x_lower),\n                                        uniform_matrix<scalar_type>(x.size(),1,x_upper) );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATIOn_ABSTRACT_\n#ifdef DLIB_OPTIMIZATIOn_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"optimization_search_strategies_abstract.h\"\n#include \"optimization_stop_strategies_abstract.h\"\n#include \"optimization_line_search_abstract.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                    Functions that transform other functions  \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct\n        >\n    class central_differences;\n    /*!\n        This is a function object that represents the derivative of some other\n        function. \n\n        Note that if funct is a function of a double then the derivative of \n        funct is just a double but if funct is a function of a dlib::matrix (i.e. a\n        function of many variables) then its derivative is a gradient vector (a column\n        vector in particular).\n    !*/\n\n    template <\n        typename funct\n        >\n    const central_differences<funct> derivative(\n        const funct& f, \n        double eps\n    );\n    /*!\n        requires\n            - f == a function that returns a scalar\n            - f must have one of the following forms:\n                - double f(double)\n                - double f(dlib::matrix)  (where the matrix is a column vector)\n                - double f(T, dlib::matrix)  (where the matrix is a column vector.  In \n                  this case the derivative of f is taken with respect to the second argument.)\n            - eps > 0\n        ensures\n            - returns a function that represents the derivative of the function f.  It\n              is approximated numerically by:\n                  (f(x+eps)-f(x-eps))/(2*eps)\n    !*/\n\n    template <\n        typename funct\n        >\n    const central_differences<funct> derivative(\n        const funct& f\n    );\n    /*!\n        ensures\n            - returns derivative(f, 1e-7)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct, \n        typename EXP1, \n        typename EXP2\n        >\n    clamped_function_object<funct,EXP1,EXP2> clamp_function (\n        const funct& f,\n        const matrix_exp<EXP1>& x_lower,\n        const matrix_exp<EXP2>& x_upper \n    );\n    /*!\n        requires\n            - f == a function that takes a matrix and returns a scalar value.  Moreover, f\n              must be capable of taking in matrices with the same dimensions as x_lower and\n              x_upper.  So f(x_lower) must be a valid expression that evaluates to a scalar\n              value.\n            - x_lower.nr() == x_upper.nr() && x_lower.nc() == x_upper.nc()\n              (i.e. x_lower and x_upper must have the same dimensions)\n            - x_lower and x_upper must contain the same type of elements.\n        ensures\n            - returns a function object that represents the function g(x) where\n              g(x) == f(clamp(x,x_lower,x_upper))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                    Functions that perform unconstrained optimization \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T\n        >\n    double find_min (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x, \n        double min_f\n    );\n    /*!\n        requires\n            - search_strategy == an object that defines a search strategy such as one \n              of the objects from dlib/optimization/optimization_search_strategies_abstract.h\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - f(x) must be a valid expression that evaluates to a double\n            - der(x) must be a valid expression that evaluates to the derivative of f() at x.\n            - is_col_vector(x) == true\n        ensures\n            - Performs an unconstrained minimization of the function f() using the given\n              search_strategy and starting from the initial point x.  \n            - The function is optimized until stop_strategy decides that an acceptable \n              point has been found or f(#x) < min_f.\n            - #x == the value of x that was found to minimize f()\n            - returns f(#x). \n            - When this function makes calls to f() and der() it always does so by\n              first calling f() and then calling der().  That is, these two functions\n              are always called in pairs with f() being called first and then der()\n              being called second.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T\n        >\n    double find_max (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x, \n        double max_f\n    );\n    /*!\n        requires\n            - search_strategy == an object that defines a search strategy such as one \n              of the objects from dlib/optimization/optimization_search_strategies_abstract.h\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - f(x) must be a valid expression that evaluates to a double\n            - der(x) must be a valid expression that evaluates to the derivative of f() at x.\n            - is_col_vector(x) == true\n        ensures\n            - Performs an unconstrained maximization of the function f() using the given\n              search_strategy and starting from the initial point x.  \n            - The function is optimized until stop_strategy decides that an acceptable \n              point has been found or f(#x) > max_f.\n            - #x == the value of x that was found to maximize f()\n            - returns f(#x). \n            - When this function makes calls to f() and der() it always does so by\n              first calling f() and then calling der().  That is, these two functions\n              are always called in pairs with f() being called first and then der()\n              being called second.\n            - Note that this function solves the maximization problem by converting it \n              into a minimization problem.  Therefore, the values of f and its derivative\n              reported to the stopping strategy will be negated.  That is, stop_strategy\n              will see -f() and -der().  All this really means is that the status messages\n              from a stopping strategy in verbose mode will display a negated objective\n              value.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct,\n        typename T\n        >\n    double find_min_using_approximate_derivatives (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f,\n        T& x,\n        double min_f,\n        double derivative_eps = 1e-7\n    );\n    /*!\n        requires\n            - search_strategy == an object that defines a search strategy such as one \n              of the objects from dlib/optimization/optimization_search_strategies_abstract.h\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - f(x) must be a valid expression that evaluates to a double\n            - is_col_vector(x) == true\n            - derivative_eps > 0 \n        ensures\n            - Performs an unconstrained minimization of the function f() using the given\n              search_strategy and starting from the initial point x.  \n            - The function is optimized until stop_strategy decides that an acceptable \n              point has been found or f(#x) < min_f.\n            - #x == the value of x that was found to minimize f()\n            - returns f(#x). \n            - Uses the dlib::derivative(f,derivative_eps) function to compute gradient\n              information.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct,\n        typename T\n        >\n    double find_max_using_approximate_derivatives (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f,\n        T& x,\n        double max_f,\n        double derivative_eps = 1e-7\n    );\n    /*!\n        requires\n            - search_strategy == an object that defines a search strategy such as one \n              of the objects from dlib/optimization/optimization_search_strategies_abstract.h\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - f(x) must be a valid expression that evaluates to a double\n            - is_col_vector(x) == true\n            - derivative_eps > 0 \n        ensures\n            - Performs an unconstrained maximization of the function f() using the given\n              search_strategy and starting from the initial point x.  \n            - The function is optimized until stop_strategy decides that an acceptable \n              point has been found or f(#x) > max_f.\n            - #x == the value of x that was found to maximize f()\n            - returns f(#x). \n            - Uses the dlib::derivative(f,derivative_eps) function to compute gradient\n              information.\n            - Note that this function solves the maximization problem by converting it \n              into a minimization problem.  Therefore, the values of f and its derivative\n              reported to the stopping strategy will be negated.  That is, stop_strategy\n              will see -f() and -der().  All this really means is that the status messages\n              from a stopping strategy in verbose mode will display a negated objective\n              value.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                  Functions that perform box constrained optimization \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T,\n        typename EXP1,\n        typename EXP2\n        >\n    double find_min_box_constrained (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x,\n        const matrix_exp<EXP1>& x_lower,\n        const matrix_exp<EXP2>& x_upper\n    );\n    /*!\n        requires\n            - search_strategy == an object that defines a search strategy such as one \n              of the objects from dlib/optimization/optimization_search_strategies_abstract.h\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - f(x) must be a valid expression that evaluates to a double\n            - der(x) must be a valid expression that evaluates to the derivative of f() at x.\n            - is_col_vector(x) == true\n            - is_col_vector(x_lower) == true\n            - is_col_vector(x_upper) == true\n            - x.size() == x_lower.size() == x_upper.size()\n              (i.e. x, x_lower, and x_upper need to all be column vectors of the same dimensionality)\n            - min(x_upper-x_lower) > 0\n              (i.e. x_upper must contain upper bounds relative to x_lower)\n        ensures\n            - Performs a box constrained minimization of the function f() using the given\n              search_strategy and starting from the initial point x.  That is, we try to\n              find the x value that minimizes f(x) but is also within the box constraints \n              specified by x_lower and x_upper.  That is, we ensure that #x satisfies: \n                - min(#x - x_lower) >= 0 && min(x_upper - #x) >= 0\n            - This function uses a backtracking line search along with a gradient projection\n              step to handle the box constraints.\n            - The function is optimized until stop_strategy decides that an acceptable\n              point has been found. \n            - #x == the value of x that was found to minimize f() within the given box\n              constraints.\n            - returns f(#x). \n            - The last call to f() will be made with f(#x).  \n            - When calling f() and der(), the input passed to them will always be inside\n              the box constraints defined by x_lower and x_upper.\n            - When calling der(x), it will always be the case that the last call to f() was\n              made with the same x value.  This means that you can reuse any intermediate\n              results from the previous call to f(x) inside der(x) rather than recomputing\n              them inside der(x).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T\n        >\n    double find_min_box_constrained (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x,\n        const double x_lower,\n        const double x_upper\n    );\n    /*!\n        requires\n            - search_strategy == an object that defines a search strategy such as one \n              of the objects from dlib/optimization/optimization_search_strategies_abstract.h\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - f(x) must be a valid expression that evaluates to a double\n            - der(x) must be a valid expression that evaluates to the derivative of f() at x.\n            - is_col_vector(x) == true\n            - x_lower < x_upper\n        ensures\n            - This function is identical to find_min_box_constrained() as defined above\n              except that it takes x_lower and x_upper as doubles rather than column\n              vectors.  In this case, all variables have the same lower bound of x_lower\n              and similarly have the same upper bound of x_upper.  Therefore, this is just\n              a convenience function for calling find_max_box_constrained() when all\n              variables have the same bound constraints.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T,\n        typename EXP1,\n        typename EXP2\n        >\n    double find_max_box_constrained (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x,\n        const matrix_exp<EXP1>& x_lower,\n        const matrix_exp<EXP2>& x_upper\n    );\n    /*!\n        requires\n            - search_strategy == an object that defines a search strategy such as one \n              of the objects from dlib/optimization/optimization_search_strategies_abstract.h\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - f(x) must be a valid expression that evaluates to a double\n            - der(x) must be a valid expression that evaluates to the derivative of f() at x.\n            - is_col_vector(x) == true\n            - is_col_vector(x_lower) == true\n            - is_col_vector(x_upper) == true\n            - x.size() == x_lower.size() == x_upper.size()\n              (i.e. x, x_lower, and x_upper need to all be column vectors of the same dimensionality)\n            - min(x_upper-x_lower) > 0\n              (i.e. x_upper must contain upper bounds relative to x_lower)\n        ensures\n            - Performs a box constrained maximization of the function f() using the given\n              search_strategy and starting from the initial point x.  That is, we try to\n              find the x value that maximizes f(x) but is also within the box constraints \n              specified by x_lower and x_upper.  That is, we ensure that #x satisfies: \n                - min(#x - x_lower) >= 0 && min(x_upper - #x) >= 0\n            - This function uses a backtracking line search along with a gradient projection\n              step to handle the box constraints.\n            - The function is optimized until stop_strategy decides that an acceptable\n              point has been found. \n            - #x == the value of x that was found to maximize f() within the given box\n              constraints.\n            - returns f(#x). \n            - The last call to f() will be made with f(#x).  \n            - When calling f() and der(), the input passed to them will always be inside\n              the box constraints defined by x_lower and x_upper.\n            - When calling der(x), it will always be the case that the last call to f() was\n              made with the same x value.  This means that you can reuse any intermediate\n              results from the previous call to f(x) inside der(x) rather than recomputing\n              them inside der(x).\n            - Note that this function solves the maximization problem by converting it \n              into a minimization problem.  Therefore, the values of f and its derivative\n              reported to the stopping strategy will be negated.  That is, stop_strategy\n              will see -f() and -der().  All this really means is that the status messages\n              from a stopping strategy in verbose mode will display a negated objective\n              value.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename search_strategy_type,\n        typename stop_strategy_type,\n        typename funct, \n        typename funct_der, \n        typename T\n        >\n    double find_max_box_constrained (\n        search_strategy_type search_strategy,\n        stop_strategy_type stop_strategy,\n        const funct& f, \n        const funct_der& der, \n        T& x,\n        const double x_lower,\n        const double x_upper\n    );\n    /*!\n        requires\n            - search_strategy == an object that defines a search strategy such as one \n              of the objects from dlib/optimization/optimization_search_strategies_abstract.h\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - f(x) must be a valid expression that evaluates to a double\n            - der(x) must be a valid expression that evaluates to the derivative of f() at x.\n            - is_col_vector(x) == true\n            - x_lower < x_upper\n        ensures\n            - This function is identical to find_max_box_constrained() as defined above\n              except that it takes x_lower and x_upper as doubles rather than column\n              vectors.  In this case, all variables have the same lower bound of x_lower\n              and similarly have the same upper bound of x_upper.  Therefore, this is just\n              a convenience function for calling find_max_box_constrained() when all\n              variables have the same bound constraints.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_bobyqa.h",
    "content": "// Copyright (C) 2009 M.J.D. Powell, Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATIOn_BOBYQA_Hh_\n#define DLIB_OPTIMIZATIOn_BOBYQA_Hh_\n\n/*\n    The code in this file is derived from Powell's BOBYQA Fortran code.\n    It was created by running f2c on the original Fortran code and then \n    massaging the resulting C code into what you can see below.\n\n\n    The following paper, published in 2009 by Powell, describes the\n    detailed workings of the BOBYQA algorithm.  \n\n        The BOBYQA algorithm for bound constrained optimization \n        without derivatives by M.J.D. Powell\n*/\n\n#include <algorithm>\n#include <cmath>\n#include \"../matrix.h\"\n#include \"../smart_pointers.h\"\n#include \"optimization_bobyqa_abstract.h\"\n#include \"optimization.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    class bobyqa_failure : public error {\n    public: bobyqa_failure(const std::string& s):error(s){}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class bobyqa_implementation\n    {\n        typedef long integer;\n        typedef double doublereal;\n\n    public:\n\n        template <\n            typename funct,\n            typename T, \n            typename U\n            >\n        double find_min (\n            const funct& f,\n            T& x,\n            long npt,\n            const U& xl_,\n            const U& xu_,\n            const double rhobeg,\n            const double rhoend,\n            const long max_f_evals\n        ) const\n        {\n            const unsigned long n = x.size();\n            const unsigned long w_size = (npt+5)*(npt+n)+3*n*(n+5)/2;\n            scoped_ptr<doublereal[]> w(new doublereal[w_size]);\n\n            // make these temporary matrices becuse U might be some\n            // kind of matrix_exp that doesn't support taking the address\n            // of the first element.\n            matrix<double,0,1> xl(xl_);\n            matrix<double,0,1> xu(xu_);\n\n            \n            return bobyqa_ (f,\n                            x.size(),\n                            npt,\n                            &x(0),\n                            &xl(0),\n                            &xu(0),\n                            rhobeg,\n                            rhoend,\n                            max_f_evals,\n                            w.get() );\n        }\n\n    private:\n\n\n        template <typename funct>\n        doublereal bobyqa_(\n            const funct& calfun,\n            const integer n, \n            const integer npt, \n            doublereal *x, \n            const doublereal *xl,\n            const doublereal *xu,\n            const doublereal rhobeg,\n            const doublereal rhoend,\n            const integer maxfun,\n            doublereal *w\n        ) const\n        {\n\n            /* System generated locals */\n            integer i__1;\n            doublereal d__1, d__2;\n\n            /* Local variables */\n            integer j, id_, np, iw, igo, ihq, ixb, ixa, ifv, isl, jsl, ipq, ivl, ixn, ixo, ixp, isu, jsu, ndim;\n            doublereal temp, zero;\n            integer ibmat, izmat;\n\n\n            /*     This subroutine seeks the least value of a function of many variables, */\n            /*     by applying a trust region method that forms quadratic models by */\n            /*     interpolation. There is usually some freedom in the interpolation */\n            /*     conditions, which is taken up by minimizing the Frobenius norm of */\n            /*     the change to the second derivative of the model, beginning with the */\n            /*     zero matrix. The values of the variables are constrained by upper and */\n            /*     lower bounds. The arguments of the subroutine are as follows. */\n\n            /*     N must be set to the number of variables and must be at least two. */\n            /*     NPT is the number of interpolation conditions. Its value must be in */\n            /*       the interval [N+2,(N+1)(N+2)/2]. Choices that exceed 2*N+1 are not */\n            /*       recommended. */\n            /*     Initial values of the variables must be set in X(1),X(2),...,X(N). They */\n            /*       will be changed to the values that give the least calculated F. */\n            /*     For I=1,2,...,N, XL(I) and XU(I) must provide the lower and upper */\n            /*       bounds, respectively, on X(I). The construction of quadratic models */\n            /*       requires XL(I) to be strictly less than XU(I) for each I. Further, */\n            /*       the contribution to a model from changes to the I-th variable is */\n            /*       damaged severely by rounding errors if XU(I)-XL(I) is too small. */\n            /*     RHOBEG and RHOEND must be set to the initial and final values of a trust */\n            /*       region radius, so both must be positive with RHOEND no greater than */\n            /*       RHOBEG. Typically, RHOBEG should be about one tenth of the greatest */\n            /*       expected change to a variable, while RHOEND should indicate the */\n            /*       accuracy that is required in the final values of the variables. An */\n            /*       error return occurs if any of the differences XU(I)-XL(I), I=1,...,N, */\n            /*       is less than 2*RHOBEG. */\n            /*     MAXFUN must be set to an upper bound on the number of calls of CALFUN. */\n            /*     The array W will be used for working space. Its length must be at least */\n            /*       (NPT+5)*(NPT+N)+3*N*(N+5)/2. */\n\n            /* Parameter adjustments */\n            --w;\n            --xu;\n            --xl;\n            --x;\n\n            /* Function Body */\n            np = n + 1;\n\n            /*     Return if the value of NPT is unacceptable. */\n            if (npt < n + 2 || npt > (n + 2) * np / 2) {\n                throw bobyqa_failure(\"Return from BOBYQA because NPT is not in the required interval\");\n                //goto L40;\n            }\n\n            /*     Partition the working space array, so that different parts of it can */\n            /*     be treated separately during the calculation of BOBYQB. The partition */\n            /*     requires the first (NPT+2)*(NPT+N)+3*N*(N+5)/2 elements of W plus the */\n            /*     space that is taken by the last array in the argument list of BOBYQB. */\n\n            ndim = npt + n;\n            ixb = 1;\n            ixp = ixb + n;\n            ifv = ixp + n * npt;\n            ixo = ifv + npt;\n            igo = ixo + n;\n            ihq = igo + n;\n            ipq = ihq + n * np / 2;\n            ibmat = ipq + npt;\n            izmat = ibmat + ndim * n;\n            isl = izmat + npt * (npt - np);\n            isu = isl + n;\n            ixn = isu + n;\n            ixa = ixn + n;\n            id_ = ixa + n;\n            ivl = id_ + n;\n            iw = ivl + ndim;\n\n            /*     Return if there is insufficient space between the bounds. Modify the */\n            /*     initial X if necessary in order to avoid conflicts between the bounds */\n            /*     and the construction of the first quadratic model. The lower and upper */\n            /*     bounds on moves from the updated X are set now, in the ISL and ISU */\n            /*     partitions of W, in order to provide useful and exact information about */\n            /*     components of X that become within distance RHOBEG from their bounds. */\n\n            zero = 0.;\n            i__1 = n;\n            for (j = 1; j <= i__1; ++j) {\n                temp = xu[j] - xl[j];\n                if (temp < rhobeg + rhobeg) {\n                    throw bobyqa_failure(\"Return from BOBYQA because one of the differences in x_lower and x_upper is less than 2*rho_begin\");\n                    //goto L40;\n                }\n                jsl = isl + j - 1;\n                jsu = jsl + n;\n                w[jsl] = xl[j] - x[j];\n                w[jsu] = xu[j] - x[j];\n                if (w[jsl] >= -(rhobeg)) {\n                    if (w[jsl] >= zero) {\n                        x[j] = xl[j];\n                        w[jsl] = zero;\n                        w[jsu] = temp;\n                    } else {\n                        x[j] = xl[j] + rhobeg;\n                        w[jsl] = -(rhobeg);\n                        /* Computing MAX */\n                        d__1 = xu[j] - x[j];\n                        w[jsu] = std::max(d__1,rhobeg);\n                    }\n                } else if (w[jsu] <= rhobeg) {\n                    if (w[jsu] <= zero) {\n                        x[j] = xu[j];\n                        w[jsl] = -temp;\n                        w[jsu] = zero;\n                    } else {\n                        x[j] = xu[j] - rhobeg;\n                        /* Computing MIN */\n                        d__1 = xl[j] - x[j], d__2 = -(rhobeg);\n                        w[jsl] = std::min(d__1,d__2);\n                        w[jsu] = rhobeg;\n                    }\n                }\n                /* L30: */\n            }\n\n            /*     Make the call of BOBYQB. */\n\n            return bobyqb_(calfun, n, npt, &x[1], &xl[1], &xu[1], rhobeg, rhoend, maxfun, &w[\n                    ixb], &w[ixp], &w[ifv], &w[ixo], &w[igo], &w[ihq], &w[ipq], &w[\n                    ibmat], &w[izmat], ndim, &w[isl], &w[isu], &w[ixn], &w[ixa], &w[\n                    id_], &w[ivl], &w[iw]);\n            //L40:\n            ;\n        } /* bobyqa_ */\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename funct>\n        doublereal bobyqb_(\n            const funct& calfun,\n            const integer n,\n            const integer npt,\n            doublereal *x,\n            const doublereal *xl,\n            const doublereal *xu,\n            const doublereal rhobeg,\n            const doublereal rhoend,\n            const integer maxfun,\n            doublereal *xbase, \n            doublereal *xpt,\n            doublereal *fval,\n            doublereal *xopt,\n            doublereal *gopt,\n            doublereal *hq,\n            doublereal *pq,\n            doublereal *bmat,\n            doublereal *zmat, \n            const integer ndim,\n            doublereal *sl,\n            doublereal *su, \n            doublereal *xnew, \n            doublereal *xalt,\n            doublereal *d__,\n            doublereal *vlag, \n            doublereal *w\n        ) const\n        {\n            /* System generated locals */\n            integer xpt_dim1, xpt_offset, bmat_dim1, bmat_offset, zmat_dim1, \n            zmat_offset, i__1, i__2, i__3;\n            doublereal d__1, d__2, d__3, d__4;\n\n            /* Local variables */\n            doublereal f = 0;\n            integer i__, j, k, ih, nf, jj, nh, ip, jp;\n            doublereal dx;\n            integer np;\n            doublereal den = 0, one = 0, ten = 0, dsq = 0, rho = 0, sum = 0, two = 0, diff = 0, half = 0, beta = 0, gisq = 0;\n            integer knew = 0;\n            doublereal temp, suma, sumb, bsum, fopt;\n            integer kopt = 0, nptm;\n            doublereal zero, curv;\n            integer ksav;\n            doublereal gqsq = 0, dist = 0, sumw = 0, sumz = 0, diffa = 0, diffb = 0, diffc = 0, hdiag = 0;\n            integer kbase;\n            doublereal alpha = 0, delta = 0, adelt = 0, denom = 0, fsave = 0, bdtol = 0, delsq = 0;\n            integer nresc, nfsav;\n            doublereal ratio = 0, dnorm = 0, vquad = 0, pqold = 0, tenth = 0;\n            integer itest;\n            doublereal sumpq, scaden;\n            doublereal errbig, cauchy, fracsq, biglsq, densav;\n            doublereal bdtest;\n            doublereal crvmin, frhosq;\n            doublereal distsq;\n            integer ntrits;\n            doublereal xoptsq;\n\n\n\n            /*     The arguments N, NPT, X, XL, XU, RHOBEG, RHOEND, IPRINT and MAXFUN */\n            /*       are identical to the corresponding arguments in SUBROUTINE BOBYQA. */\n            /*     XBASE holds a shift of origin that should reduce the contributions */\n            /*       from rounding errors to values of the model and Lagrange functions. */\n            /*     XPT is a two-dimensional array that holds the coordinates of the */\n            /*       interpolation points relative to XBASE. */\n            /*     FVAL holds the values of F at the interpolation points. */\n            /*     XOPT is set to the displacement from XBASE of the trust region centre. */\n            /*     GOPT holds the gradient of the quadratic model at XBASE+XOPT. */\n            /*     HQ holds the explicit second derivatives of the quadratic model. */\n            /*     PQ contains the parameters of the implicit second derivatives of the */\n            /*       quadratic model. */\n            /*     BMAT holds the last N columns of H. */\n            /*     ZMAT holds the factorization of the leading NPT by NPT submatrix of H, */\n            /*       this factorization being ZMAT times ZMAT^T, which provides both the */\n            /*       correct rank and positive semi-definiteness. */\n            /*     NDIM is the first dimension of BMAT and has the value NPT+N. */\n            /*     SL and SU hold the differences XL-XBASE and XU-XBASE, respectively. */\n            /*       All the components of every XOPT are going to satisfy the bounds */\n            /*       SL(I) .LEQ. XOPT(I) .LEQ. SU(I), with appropriate equalities when */\n            /*       XOPT is on a constraint boundary. */\n            /*     XNEW is chosen by SUBROUTINE TRSBOX or ALTMOV. Usually XBASE+XNEW is the */\n            /*       vector of variables for the next call of CALFUN. XNEW also satisfies */\n            /*       the SL and SU constraints in the way that has just been mentioned. */\n            /*     XALT is an alternative to XNEW, chosen by ALTMOV, that may replace XNEW */\n            /*       in order to increase the denominator in the updating of UPDATE. */\n            /*     D is reserved for a trial step from XOPT, which is usually XNEW-XOPT. */\n            /*     VLAG contains the values of the Lagrange functions at a new point X. */\n            /*       They are part of a product that requires VLAG to be of length NDIM. */\n            /*     W is a one-dimensional array that is used for working space. Its length */\n            /*       must be at least 3*NDIM = 3*(NPT+N). */\n\n            /*     Set some constants. */\n\n            /* Parameter adjustments */\n            zmat_dim1 = npt;\n            zmat_offset = 1 + zmat_dim1;\n            zmat -= zmat_offset;\n            xpt_dim1 = npt;\n            xpt_offset = 1 + xpt_dim1;\n            xpt -= xpt_offset;\n            --x;\n            --xl;\n            --xu;\n            --xbase;\n            --fval;\n            --xopt;\n            --gopt;\n            --hq;\n            --pq;\n            bmat_dim1 = ndim;\n            bmat_offset = 1 + bmat_dim1;\n            bmat -= bmat_offset;\n            --sl;\n            --su;\n            --xnew;\n            --xalt;\n            --d__;\n            --vlag;\n            --w;\n\n            /* Function Body */\n            half = .5;\n            one = 1.;\n            ten = 10.;\n            tenth = .1;\n            two = 2.;\n            zero = 0.;\n            np = n + 1;\n            nptm = npt - np;\n            nh = n * np / 2;\n\n            /*     The call of PRELIM sets the elements of XBASE, XPT, FVAL, GOPT, HQ, PQ, */\n            /*     BMAT and ZMAT for the first iteration, with the corresponding values of */\n            /*     of NF and KOPT, which are the number of calls of CALFUN so far and the */\n            /*     index of the interpolation point at the trust region centre. Then the */\n            /*     initial XOPT is set too. The branch to label 720 occurs if MAXFUN is */\n            /*     less than NPT. GOPT will be updated if KOPT is different from KBASE. */\n\n            prelim_(calfun, n, npt, &x[1], &xl[1], &xu[1], rhobeg, maxfun, &xbase[1], \n                    &xpt[xpt_offset], &fval[1], &gopt[1], &hq[1], &pq[1], &bmat[bmat_offset], \n                    &zmat[zmat_offset], ndim, &sl[1], &su[1], nf, kopt);\n            xoptsq = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                xopt[i__] = xpt[kopt + i__ * xpt_dim1];\n                /* L10: */\n                /* Computing 2nd power */\n                d__1 = xopt[i__];\n                xoptsq += d__1 * d__1;\n            }\n            fsave = fval[1];\n            if (nf < npt) {\n                throw bobyqa_failure(\"Return from BOBYQA because the objective function has been called max_f_evals times.\");\n                //goto L720;\n            }\n            kbase = 1;\n\n            /*     Complete the settings that are required for the iterative procedure. */\n\n            rho = rhobeg;\n            delta = rho;\n            nresc = nf;\n            ntrits = 0;\n            diffa = zero;\n            diffb = zero;\n            itest = 0;\n            nfsav = nf;\n\n            /*     Update GOPT if necessary before the first iteration and after each */\n            /*     call of RESCUE that makes a call of CALFUN. */\n\nL20:\n            if (kopt != kbase) {\n                ih = 0;\n                i__1 = n;\n                for (j = 1; j <= i__1; ++j) {\n                    i__2 = j;\n                    for (i__ = 1; i__ <= i__2; ++i__) {\n                        ++ih;\n                        if (i__ < j) {\n                            gopt[j] += hq[ih] * xopt[i__];\n                        }\n                        /* L30: */\n                        gopt[i__] += hq[ih] * xopt[j];\n                    }\n                }\n                if (nf > npt) {\n                    i__2 = npt;\n                    for (k = 1; k <= i__2; ++k) {\n                        temp = zero;\n                        i__1 = n;\n                        for (j = 1; j <= i__1; ++j) {\n                            /* L40: */\n                            temp += xpt[k + j * xpt_dim1] * xopt[j];\n                        }\n                        temp = pq[k] * temp;\n                        i__1 = n;\n                        for (i__ = 1; i__ <= i__1; ++i__) {\n                            /* L50: */\n                            gopt[i__] += temp * xpt[k + i__ * xpt_dim1];\n                        }\n                    }\n                }\n            }\n\n            /*     Generate the next point in the trust region that provides a small value */\n            /*     of the quadratic model subject to the constraints on the variables. */\n            /*     The integer NTRITS is set to the number \"trust region\" iterations that */\n            /*     have occurred since the last \"alternative\" iteration. If the length */\n            /*     of XNEW-XOPT is less than HALF*RHO, however, then there is a branch to */\n            /*     label 650 or 680 with NTRITS=-1, instead of calculating F at XNEW. */\n\nL60:\n            trsbox_(n, npt, &xpt[xpt_offset], &xopt[1], &gopt[1], &hq[1], &pq[1], &sl[1], \n                    &su[1], delta, &xnew[1], &d__[1], &w[1], &w[np], &w[np + n],\n                    &w[np + (n << 1)], &w[np + n * 3], &dsq, &crvmin);\n            /* Computing MIN */\n            d__1 = delta, d__2 = std::sqrt(dsq);\n            dnorm = std::min(d__1,d__2);\n            if (dnorm < half * rho) {\n                ntrits = -1;\n                /* Computing 2nd power */\n                d__1 = ten * rho;\n                distsq = d__1 * d__1;\n                if (nf <= nfsav + 2) {\n                    goto L650;\n                }\n\n                /*     The following choice between labels 650 and 680 depends on whether or */\n                /*     not our work with the current RHO seems to be complete. Either RHO is */\n                /*     decreased or termination occurs if the errors in the quadratic model at */\n                /*     the last three interpolation points compare favourably with predictions */\n                /*     of likely improvements to the model within distance HALF*RHO of XOPT. */\n\n                /* Computing MAX */\n                d__1 = std::max(diffa,diffb);\n                errbig = std::max(d__1,diffc);\n                frhosq = rho * .125 * rho;\n                if (crvmin > zero && errbig > frhosq * crvmin) {\n                    goto L650;\n                }\n                bdtol = errbig / rho;\n                i__1 = n;\n                for (j = 1; j <= i__1; ++j) {\n                    bdtest = bdtol;\n                    if (xnew[j] == sl[j]) {\n                        bdtest = w[j];\n                    }\n                    if (xnew[j] == su[j]) {\n                        bdtest = -w[j];\n                    }\n                    if (bdtest < bdtol) {\n                        curv = hq[(j + j * j) / 2];\n                        i__2 = npt;\n                        for (k = 1; k <= i__2; ++k) {\n                            /* L70: */\n                            /* Computing 2nd power */\n                            d__1 = xpt[k + j * xpt_dim1];\n                            curv += pq[k] * (d__1 * d__1);\n                        }\n                        bdtest += half * curv * rho;\n                        if (bdtest < bdtol) {\n                            goto L650;\n                        }\n                    }\n                    /* L80: */\n                }\n                goto L680;\n            }\n            ++ntrits;\n\n            /*     Severe cancellation is likely to occur if XOPT is too far from XBASE. */\n            /*     If the following test holds, then XBASE is shifted so that XOPT becomes */\n            /*     zero. The appropriate changes are made to BMAT and to the second */\n            /*     derivatives of the current model, beginning with the changes to BMAT */\n            /*     that do not depend on ZMAT. VLAG is used temporarily for working space. */\n\nL90:\n            if (dsq <= xoptsq * .001) {\n                fracsq = xoptsq * .25;\n                sumpq = zero;\n                i__1 = npt;\n                for (k = 1; k <= i__1; ++k) {\n                    sumpq += pq[k];\n                    sum = -half * xoptsq;\n                    i__2 = n;\n                    for (i__ = 1; i__ <= i__2; ++i__) {\n                        /* L100: */\n                        sum += xpt[k + i__ * xpt_dim1] * xopt[i__];\n                    }\n                    w[npt + k] = sum;\n                    temp = fracsq - half * sum;\n                    i__2 = n;\n                    for (i__ = 1; i__ <= i__2; ++i__) {\n                        w[i__] = bmat[k + i__ * bmat_dim1];\n                        vlag[i__] = sum * xpt[k + i__ * xpt_dim1] + temp * xopt[i__];\n                        ip = npt + i__;\n                        i__3 = i__;\n                        for (j = 1; j <= i__3; ++j) {\n                            /* L110: */\n                            bmat[ip + j * bmat_dim1] = bmat[ip + j * bmat_dim1] + w[\n                                i__] * vlag[j] + vlag[i__] * w[j];\n                        }\n                    }\n                }\n\n                /*     Then the revisions of BMAT that depend on ZMAT are calculated. */\n\n                i__3 = nptm;\n                for (jj = 1; jj <= i__3; ++jj) {\n                    sumz = zero;\n                    sumw = zero;\n                    i__2 = npt;\n                    for (k = 1; k <= i__2; ++k) {\n                        sumz += zmat[k + jj * zmat_dim1];\n                        vlag[k] = w[npt + k] * zmat[k + jj * zmat_dim1];\n                        /* L120: */\n                        sumw += vlag[k];\n                    }\n                    i__2 = n;\n                    for (j = 1; j <= i__2; ++j) {\n                        sum = (fracsq * sumz - half * sumw) * xopt[j];\n                        i__1 = npt;\n                        for (k = 1; k <= i__1; ++k) {\n                            /* L130: */\n                            sum += vlag[k] * xpt[k + j * xpt_dim1];\n                        }\n                        w[j] = sum;\n                        i__1 = npt;\n                        for (k = 1; k <= i__1; ++k) {\n                            /* L140: */\n                            bmat[k + j * bmat_dim1] += sum * zmat[k + jj * zmat_dim1];\n                        }\n                    }\n                    i__1 = n;\n                    for (i__ = 1; i__ <= i__1; ++i__) {\n                        ip = i__ + npt;\n                        temp = w[i__];\n                        i__2 = i__;\n                        for (j = 1; j <= i__2; ++j) {\n                            /* L150: */\n                            bmat[ip + j * bmat_dim1] += temp * w[j];\n                        }\n                    }\n                }\n\n                /*     The following instructions complete the shift, including the changes */\n                /*     to the second derivative parameters of the quadratic model. */\n\n                ih = 0;\n                i__2 = n;\n                for (j = 1; j <= i__2; ++j) {\n                    w[j] = -half * sumpq * xopt[j];\n                    i__1 = npt;\n                    for (k = 1; k <= i__1; ++k) {\n                        w[j] += pq[k] * xpt[k + j * xpt_dim1];\n                        /* L160: */\n                        xpt[k + j * xpt_dim1] -= xopt[j];\n                    }\n                    i__1 = j;\n                    for (i__ = 1; i__ <= i__1; ++i__) {\n                        ++ih;\n                        hq[ih] = hq[ih] + w[i__] * xopt[j] + xopt[i__] * w[j];\n                        /* L170: */\n                        bmat[npt + i__ + j * bmat_dim1] = bmat[npt + j + i__ * \n                            bmat_dim1];\n                    }\n                }\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    xbase[i__] += xopt[i__];\n                    xnew[i__] -= xopt[i__];\n                    sl[i__] -= xopt[i__];\n                    su[i__] -= xopt[i__];\n                    /* L180: */\n                    xopt[i__] = zero;\n                }\n                xoptsq = zero;\n            }\n            if (ntrits == 0) {\n                goto L210;\n            }\n            goto L230;\n\n            /*     XBASE is also moved to XOPT by a call of RESCUE. This calculation is */\n            /*     more expensive than the previous shift, because new matrices BMAT and */\n            /*     ZMAT are generated from scratch, which may include the replacement of */\n            /*     interpolation points whose positions seem to be causing near linear */\n            /*     dependence in the interpolation conditions. Therefore RESCUE is called */\n            /*     only if rounding errors have reduced by at least a factor of two the */\n            /*     denominator of the formula for updating the H matrix. It provides a */\n            /*     useful safeguard, but is not invoked in most applications of BOBYQA. */\n\nL190:\n            nfsav = nf;\n            kbase = kopt;\n            rescue_(calfun, n, npt, &xl[1], &xu[1], maxfun, &xbase[1], &xpt[\n                    xpt_offset], &fval[1], &xopt[1], &gopt[1], &hq[1], &pq[1], &bmat[\n                    bmat_offset], &zmat[zmat_offset], ndim, &sl[1], &su[1], nf, delta, \n                    kopt, &vlag[1], &w[1], &w[n + np], &w[ndim + np]);\n\n            /*     XOPT is updated now in case the branch below to label 720 is taken. */\n            /*     Any updating of GOPT occurs after the branch below to label 20, which */\n            /*     leads to a trust region iteration as does the branch to label 60. */\n\n            xoptsq = zero;\n            if (kopt != kbase) {\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    xopt[i__] = xpt[kopt + i__ * xpt_dim1];\n                    /* L200: */\n                    /* Computing 2nd power */\n                    d__1 = xopt[i__];\n                    xoptsq += d__1 * d__1;\n                }\n            }\n            if (nf < 0) {\n                nf = maxfun;\n                throw bobyqa_failure(\"Return from BOBYQA because the objective function has been called max_f_evals times.\");\n                //goto L720;\n            }\n            nresc = nf;\n            if (nfsav < nf) {\n                nfsav = nf;\n                goto L20;\n            }\n            if (ntrits > 0) {\n                goto L60;\n            }\n\n            /*     Pick two alternative vectors of variables, relative to XBASE, that */\n            /*     are suitable as new positions of the KNEW-th interpolation point. */\n            /*     Firstly, XNEW is set to the point on a line through XOPT and another */\n            /*     interpolation point that minimizes the predicted value of the next */\n            /*     denominator, subject to ||XNEW - XOPT|| .LEQ. ADELT and to the SL */\n            /*     and SU bounds. Secondly, XALT is set to the best feasible point on */\n            /*     a constrained version of the Cauchy step of the KNEW-th Lagrange */\n            /*     function, the corresponding value of the square of this function */\n            /*     being returned in CAUCHY. The choice between these alternatives is */\n            /*     going to be made when the denominator is calculated. */\n\nL210:\n            altmov_(n, npt, &xpt[xpt_offset], &xopt[1], &bmat[bmat_offset], &zmat[zmat_offset], \n                    ndim, &sl[1], &su[1], kopt, knew, adelt, &xnew[1], \n                    &xalt[1], alpha, cauchy, &w[1], &w[np], &w[ndim + 1]);\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                /* L220: */\n                d__[i__] = xnew[i__] - xopt[i__];\n            }\n\n            /*     Calculate VLAG and BETA for the current choice of D. The scalar */\n            /*     product of D with XPT(K,.) is going to be held in W(NPT+K) for */\n            /*     use when VQUAD is calculated. */\n\nL230:\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                suma = zero;\n                sumb = zero;\n                sum = zero;\n                i__2 = n;\n                for (j = 1; j <= i__2; ++j) {\n                    suma += xpt[k + j * xpt_dim1] * d__[j];\n                    sumb += xpt[k + j * xpt_dim1] * xopt[j];\n                    /* L240: */\n                    sum += bmat[k + j * bmat_dim1] * d__[j];\n                }\n                w[k] = suma * (half * suma + sumb);\n                vlag[k] = sum;\n                /* L250: */\n                w[npt + k] = suma;\n            }\n            beta = zero;\n            i__1 = nptm;\n            for (jj = 1; jj <= i__1; ++jj) {\n                sum = zero;\n                i__2 = npt;\n                for (k = 1; k <= i__2; ++k) {\n                    /* L260: */\n                    sum += zmat[k + jj * zmat_dim1] * w[k];\n                }\n                beta -= sum * sum;\n                i__2 = npt;\n                for (k = 1; k <= i__2; ++k) {\n                    /* L270: */\n                    vlag[k] += sum * zmat[k + jj * zmat_dim1];\n                }\n            }\n            dsq = zero;\n            bsum = zero;\n            dx = zero;\n            i__2 = n;\n            for (j = 1; j <= i__2; ++j) {\n                /* Computing 2nd power */\n                d__1 = d__[j];\n                dsq += d__1 * d__1;\n                sum = zero;\n                i__1 = npt;\n                for (k = 1; k <= i__1; ++k) {\n                    /* L280: */\n                    sum += w[k] * bmat[k + j * bmat_dim1];\n                }\n                bsum += sum * d__[j];\n                jp = npt + j;\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    /* L290: */\n                    sum += bmat[jp + i__ * bmat_dim1] * d__[i__];\n                }\n                vlag[jp] = sum;\n                bsum += sum * d__[j];\n                /* L300: */\n                dx += d__[j] * xopt[j];\n            }\n            beta = dx * dx + dsq * (xoptsq + dx + dx + half * dsq) + beta - bsum;\n            vlag[kopt] += one;\n\n            /*     If NTRITS is zero, the denominator may be increased by replacing */\n            /*     the step D of ALTMOV by a Cauchy step. Then RESCUE may be called if */\n            /*     rounding errors have damaged the chosen denominator. */\n\n            if (ntrits == 0) {\n                /* Computing 2nd power */\n                d__1 = vlag[knew];\n                denom = d__1 * d__1 + alpha * beta;\n                if (denom < cauchy && cauchy > zero) {\n                    i__2 = n;\n                    for (i__ = 1; i__ <= i__2; ++i__) {\n                        xnew[i__] = xalt[i__];\n                        /* L310: */\n                        d__[i__] = xnew[i__] - xopt[i__];\n                    }\n                    cauchy = zero;\n                    goto L230;\n                }\n                /* Computing 2nd power */\n                d__1 = vlag[knew];\n                if (denom <= half * (d__1 * d__1)) {\n                    if (nf > nresc) {\n                        goto L190;\n                    }\n                    throw bobyqa_failure(\"Return from BOBYQA because of much cancellation in a denominator.\");\n                    //goto L720;\n                }\n\n                /*     Alternatively, if NTRITS is positive, then set KNEW to the index of */\n                /*     the next interpolation point to be deleted to make room for a trust */\n                /*     region step. Again RESCUE may be called if rounding errors have damaged */\n                /*     the chosen denominator, which is the reason for attempting to select */\n                /*     KNEW before calculating the next value of the objective function. */\n\n            } else {\n                delsq = delta * delta;\n                scaden = zero;\n                biglsq = zero;\n                knew = 0;\n                i__2 = npt;\n                for (k = 1; k <= i__2; ++k) {\n                    if (k == kopt) {\n                        goto L350;\n                    }\n                    hdiag = zero;\n                    i__1 = nptm;\n                    for (jj = 1; jj <= i__1; ++jj) {\n                        /* L330: */\n                        /* Computing 2nd power */\n                        d__1 = zmat[k + jj * zmat_dim1];\n                        hdiag += d__1 * d__1;\n                    }\n                    /* Computing 2nd power */\n                    d__1 = vlag[k];\n                    den = beta * hdiag + d__1 * d__1;\n                    distsq = zero;\n                    i__1 = n;\n                    for (j = 1; j <= i__1; ++j) {\n                        /* L340: */\n                        /* Computing 2nd power */\n                        d__1 = xpt[k + j * xpt_dim1] - xopt[j];\n                        distsq += d__1 * d__1;\n                    }\n                    /* Computing MAX */\n                    /* Computing 2nd power */\n                    d__3 = distsq / delsq;\n                    d__1 = one, d__2 = d__3 * d__3;\n                    temp = std::max(d__1,d__2);\n                    if (temp * den > scaden) {\n                        scaden = temp * den;\n                        knew = k;\n                        denom = den;\n                    }\n                    /* Computing MAX */\n                    /* Computing 2nd power */\n                    d__3 = vlag[k];\n                    d__1 = biglsq, d__2 = temp * (d__3 * d__3);\n                    biglsq = std::max(d__1,d__2);\nL350:\n                    ;\n                }\n                if (scaden <= half * biglsq) {\n                    if (nf > nresc) {\n                        goto L190;\n                    }\n                    throw bobyqa_failure(\"Return from BOBYQA because of much cancellation in a denominator.\");\n                    //goto L720;\n                }\n            }\n\n            /*     Put the variables for the next calculation of the objective function */\n            /*       in XNEW, with any adjustments for the bounds. */\n\n\n            /*     Calculate the value of the objective function at XBASE+XNEW, unless */\n            /*       the limit on the number of calculations of F has been reached. */\n\nL360:\n            i__2 = n;\n            for (i__ = 1; i__ <= i__2; ++i__) {\n                /* Computing MIN */\n                /* Computing MAX */\n                d__3 = xl[i__], d__4 = xbase[i__] + xnew[i__];\n                d__1 = std::max(d__3,d__4), d__2 = xu[i__];\n                x[i__] = std::min(d__1,d__2);\n                if (xnew[i__] == sl[i__]) {\n                    x[i__] = xl[i__];\n                }\n                if (xnew[i__] == su[i__]) {\n                    x[i__] = xu[i__];\n                }\n                /* L380: */\n            }\n            if (nf >= maxfun) {\n                throw bobyqa_failure(\"Return from BOBYQA because the objective function has been called max_f_evals times.\");\n                //goto L720;\n            }\n            ++nf;\n            f = calfun(mat(&x[1], n));\n            if (ntrits == -1) {\n                fsave = f;\n                goto L720;\n            }\n\n            /*     Use the quadratic model to predict the change in F due to the step D, */\n            /*       and set DIFF to the error of this prediction. */\n\n            fopt = fval[kopt];\n            vquad = zero;\n            ih = 0;\n            i__2 = n;\n            for (j = 1; j <= i__2; ++j) {\n                vquad += d__[j] * gopt[j];\n                i__1 = j;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    ++ih;\n                    temp = d__[i__] * d__[j];\n                    if (i__ == j) {\n                        temp = half * temp;\n                    }\n                    /* L410: */\n                    vquad += hq[ih] * temp;\n                }\n            }\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                /* L420: */\n                /* Computing 2nd power */\n                d__1 = w[npt + k];\n                vquad += half * pq[k] * (d__1 * d__1);\n            }\n            diff = f - fopt - vquad;\n            diffc = diffb;\n            diffb = diffa;\n            diffa = std::abs(diff);\n            if (dnorm > rho) {\n                nfsav = nf;\n            }\n\n            /*     Pick the next value of DELTA after a trust region step. */\n\n            if (ntrits > 0) {\n                if (vquad >= zero) {\n                    throw bobyqa_failure(\"Return from BOBYQA because a trust region step has failed to reduce Q.\");\n                    //goto L720;\n                }\n                ratio = (f - fopt) / vquad;\n                if (ratio <= tenth) {\n                    /* Computing MIN */\n                    d__1 = half * delta;\n                    delta = std::min(d__1,dnorm);\n                } else if (ratio <= .7) {\n                    /* Computing MAX */\n                    d__1 = half * delta;\n                    delta = std::max(d__1,dnorm);\n                } else {\n                    /* Computing MAX */\n                    d__1 = half * delta, d__2 = dnorm + dnorm;\n                    delta = std::max(d__1,d__2);\n                }\n                if (delta <= rho * 1.5) {\n                    delta = rho;\n                }\n\n                /*     Recalculate KNEW and DENOM if the new F is less than FOPT. */\n\n                if (f < fopt) {\n                    ksav = knew;\n                    densav = denom;\n                    delsq = delta * delta;\n                    scaden = zero;\n                    biglsq = zero;\n                    knew = 0;\n                    i__1 = npt;\n                    for (k = 1; k <= i__1; ++k) {\n                        hdiag = zero;\n                        i__2 = nptm;\n                        for (jj = 1; jj <= i__2; ++jj) {\n                            /* L440: */\n                            /* Computing 2nd power */\n                            d__1 = zmat[k + jj * zmat_dim1];\n                            hdiag += d__1 * d__1;\n                        }\n                        /* Computing 2nd power */\n                        d__1 = vlag[k];\n                        den = beta * hdiag + d__1 * d__1;\n                        distsq = zero;\n                        i__2 = n;\n                        for (j = 1; j <= i__2; ++j) {\n                            /* L450: */\n                            /* Computing 2nd power */\n                            d__1 = xpt[k + j * xpt_dim1] - xnew[j];\n                            distsq += d__1 * d__1;\n                        }\n                        /* Computing MAX */\n                        /* Computing 2nd power */\n                        d__3 = distsq / delsq;\n                        d__1 = one, d__2 = d__3 * d__3;\n                        temp = std::max(d__1,d__2);\n                        if (temp * den > scaden) {\n                            scaden = temp * den;\n                            knew = k;\n                            denom = den;\n                        }\n                        /* L460: */\n                        /* Computing MAX */\n                        /* Computing 2nd power */\n                        d__3 = vlag[k];\n                        d__1 = biglsq, d__2 = temp * (d__3 * d__3);\n                        biglsq = std::max(d__1,d__2);\n                    }\n                    if (scaden <= half * biglsq) {\n                        knew = ksav;\n                        denom = densav;\n                    }\n                }\n            }\n\n            /*     Update BMAT and ZMAT, so that the KNEW-th interpolation point can be */\n            /*     moved. Also update the second derivative terms of the model. */\n\n            update_(n, npt, &bmat[bmat_offset], &zmat[zmat_offset], ndim, &vlag[1], \n                    beta, denom, knew, &w[1]);\n            ih = 0;\n            pqold = pq[knew];\n            pq[knew] = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                temp = pqold * xpt[knew + i__ * xpt_dim1];\n                i__2 = i__;\n                for (j = 1; j <= i__2; ++j) {\n                    ++ih;\n                    /* L470: */\n                    hq[ih] += temp * xpt[knew + j * xpt_dim1];\n                }\n            }\n            i__2 = nptm;\n            for (jj = 1; jj <= i__2; ++jj) {\n                temp = diff * zmat[knew + jj * zmat_dim1];\n                i__1 = npt;\n                for (k = 1; k <= i__1; ++k) {\n                    /* L480: */\n                    pq[k] += temp * zmat[k + jj * zmat_dim1];\n                }\n            }\n\n            /*     Include the new interpolation point, and make the changes to GOPT at */\n            /*     the old XOPT that are caused by the updating of the quadratic model. */\n\n            fval[knew] = f;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                xpt[knew + i__ * xpt_dim1] = xnew[i__];\n                /* L490: */\n                w[i__] = bmat[knew + i__ * bmat_dim1];\n            }\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                suma = zero;\n                i__2 = nptm;\n                for (jj = 1; jj <= i__2; ++jj) {\n                    /* L500: */\n                    suma += zmat[knew + jj * zmat_dim1] * zmat[k + jj * zmat_dim1];\n                }\n                sumb = zero;\n                i__2 = n;\n                for (j = 1; j <= i__2; ++j) {\n                    /* L510: */\n                    sumb += xpt[k + j * xpt_dim1] * xopt[j];\n                }\n                temp = suma * sumb;\n                i__2 = n;\n                for (i__ = 1; i__ <= i__2; ++i__) {\n                    /* L520: */\n                    w[i__] += temp * xpt[k + i__ * xpt_dim1];\n                }\n            }\n            i__2 = n;\n            for (i__ = 1; i__ <= i__2; ++i__) {\n                /* L530: */\n                gopt[i__] += diff * w[i__];\n            }\n\n            /*     Update XOPT, GOPT and KOPT if the new calculated F is less than FOPT. */\n\n            if (f < fopt) {\n                kopt = knew;\n                xoptsq = zero;\n                ih = 0;\n                i__2 = n;\n                for (j = 1; j <= i__2; ++j) {\n                    xopt[j] = xnew[j];\n                    /* Computing 2nd power */\n                    d__1 = xopt[j];\n                    xoptsq += d__1 * d__1;\n                    i__1 = j;\n                    for (i__ = 1; i__ <= i__1; ++i__) {\n                        ++ih;\n                        if (i__ < j) {\n                            gopt[j] += hq[ih] * d__[i__];\n                        }\n                        /* L540: */\n                        gopt[i__] += hq[ih] * d__[j];\n                    }\n                }\n                i__1 = npt;\n                for (k = 1; k <= i__1; ++k) {\n                    temp = zero;\n                    i__2 = n;\n                    for (j = 1; j <= i__2; ++j) {\n                        /* L550: */\n                        temp += xpt[k + j * xpt_dim1] * d__[j];\n                    }\n                    temp = pq[k] * temp;\n                    i__2 = n;\n                    for (i__ = 1; i__ <= i__2; ++i__) {\n                        /* L560: */\n                        gopt[i__] += temp * xpt[k + i__ * xpt_dim1];\n                    }\n                }\n            }\n\n            /*     Calculate the parameters of the least Frobenius norm interpolant to */\n            /*     the current data, the gradient of this interpolant at XOPT being put */\n            /*     into VLAG(NPT+I), I=1,2,...,N. */\n\n            if (ntrits > 0) {\n                i__2 = npt;\n                for (k = 1; k <= i__2; ++k) {\n                    vlag[k] = fval[k] - fval[kopt];\n                    /* L570: */\n                    w[k] = zero;\n                }\n                i__2 = nptm;\n                for (j = 1; j <= i__2; ++j) {\n                    sum = zero;\n                    i__1 = npt;\n                    for (k = 1; k <= i__1; ++k) {\n                        /* L580: */\n                        sum += zmat[k + j * zmat_dim1] * vlag[k];\n                    }\n                    i__1 = npt;\n                    for (k = 1; k <= i__1; ++k) {\n                        /* L590: */\n                        w[k] += sum * zmat[k + j * zmat_dim1];\n                    }\n                }\n                i__1 = npt;\n                for (k = 1; k <= i__1; ++k) {\n                    sum = zero;\n                    i__2 = n;\n                    for (j = 1; j <= i__2; ++j) {\n                        /* L600: */\n                        sum += xpt[k + j * xpt_dim1] * xopt[j];\n                    }\n                    w[k + npt] = w[k];\n                    /* L610: */\n                    w[k] = sum * w[k];\n                }\n                gqsq = zero;\n                gisq = zero;\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    sum = zero;\n                    i__2 = npt;\n                    for (k = 1; k <= i__2; ++k) {\n                        /* L620: */\n                        sum = sum + bmat[k + i__ * bmat_dim1] * vlag[k] + xpt[k + i__ \n                            * xpt_dim1] * w[k];\n                    }\n                    if (xopt[i__] == sl[i__]) {\n                        /* Computing MIN */\n                        d__2 = zero, d__3 = gopt[i__];\n                        /* Computing 2nd power */\n                        d__1 = std::min(d__2,d__3);\n                        gqsq += d__1 * d__1;\n                        /* Computing 2nd power */\n                        d__1 = std::min(zero,sum);\n                        gisq += d__1 * d__1;\n                    } else if (xopt[i__] == su[i__]) {\n                        /* Computing MAX */\n                        d__2 = zero, d__3 = gopt[i__];\n                        /* Computing 2nd power */\n                        d__1 = std::max(d__2,d__3);\n                        gqsq += d__1 * d__1;\n                        /* Computing 2nd power */\n                        d__1 = std::max(zero,sum);\n                        gisq += d__1 * d__1;\n                    } else {\n                        /* Computing 2nd power */\n                        d__1 = gopt[i__];\n                        gqsq += d__1 * d__1;\n                        gisq += sum * sum;\n                    }\n                    /* L630: */\n                    vlag[npt + i__] = sum;\n                }\n\n                /*     Test whether to replace the new quadratic model by the least Frobenius */\n                /*     norm interpolant, making the replacement if the test is satisfied. */\n\n                ++itest;\n                if (gqsq < ten * gisq) {\n                    itest = 0;\n                }\n                if (itest >= 3) {\n                    i__1 = std::max(npt,nh);\n                    for (i__ = 1; i__ <= i__1; ++i__) {\n                        if (i__ <= n) {\n                            gopt[i__] = vlag[npt + i__];\n                        }\n                        if (i__ <= npt) {\n                            pq[i__] = w[npt + i__];\n                        }\n                        if (i__ <= nh) {\n                            hq[i__] = zero;\n                        }\n                        itest = 0;\n                        /* L640: */\n                    }\n                }\n            }\n\n            /*     If a trust region step has provided a sufficient decrease in F, then */\n            /*     branch for another trust region calculation. The case NTRITS=0 occurs */\n            /*     when the new interpolation point was reached by an alternative step. */\n\n            if (ntrits == 0) {\n                goto L60;\n            }\n            if (f <= fopt + tenth * vquad) {\n                goto L60;\n            }\n\n            /*     Alternatively, find out if the interpolation points are close enough */\n            /*       to the best point so far. */\n\n            /* Computing MAX */\n            /* Computing 2nd power */\n            d__3 = two * delta;\n            /* Computing 2nd power */\n            d__4 = ten * rho;\n            d__1 = d__3 * d__3, d__2 = d__4 * d__4;\n            distsq = std::max(d__1,d__2);\nL650:\n            knew = 0;\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                sum = zero;\n                i__2 = n;\n                for (j = 1; j <= i__2; ++j) {\n                    /* L660: */\n                    /* Computing 2nd power */\n                    d__1 = xpt[k + j * xpt_dim1] - xopt[j];\n                    sum += d__1 * d__1;\n                }\n                if (sum > distsq) {\n                    knew = k;\n                    distsq = sum;\n                }\n                /* L670: */\n            }\n\n            /*     If KNEW is positive, then ALTMOV finds alternative new positions for */\n            /*     the KNEW-th interpolation point within distance ADELT of XOPT. It is */\n            /*     reached via label 90. Otherwise, there is a branch to label 60 for */\n            /*     another trust region iteration, unless the calculations with the */\n            /*     current RHO are complete. */\n\n            if (knew > 0) {\n                dist = std::sqrt(distsq);\n                if (ntrits == -1) {\n                    /* Computing MIN */\n                    d__1 = tenth * delta, d__2 = half * dist;\n                    delta = std::min(d__1,d__2);\n                    if (delta <= rho * 1.5) {\n                        delta = rho;\n                    }\n                }\n                ntrits = 0;\n                /* Computing MAX */\n                /* Computing MIN */\n                d__2 = tenth * dist;\n                d__1 = std::min(d__2,delta);\n                adelt = std::max(d__1,rho);\n                dsq = adelt * adelt;\n                goto L90;\n            }\n            if (ntrits == -1) {\n                goto L680;\n            }\n            if (ratio > zero) {\n                goto L60;\n            }\n            if (std::max(delta,dnorm) > rho) {\n                goto L60;\n            }\n\n            /*     The calculations with the current value of RHO are complete. Pick the */\n            /*       next values of RHO and DELTA. */\n\nL680:\n            if (rho > rhoend) {\n                delta = half * rho;\n                ratio = rho / rhoend;\n                if (ratio <= 16.) {\n                    rho = rhoend;\n                } else if (ratio <= 250.) {\n                    rho = std::sqrt(ratio) * rhoend;\n                } else {\n                    rho = tenth * rho;\n                }\n                delta = std::max(delta,rho);\n                ntrits = 0;\n                nfsav = nf;\n                goto L60;\n            }\n\n            /*     Return from the calculation, after another Newton-Raphson step, if */\n            /*       it is too short to have been tried before. */\n\n            if (ntrits == -1) {\n                goto L360;\n            }\nL720:\n            if (fval[kopt] <= fsave) {\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    /* Computing MIN */\n                    /* Computing MAX */\n                    d__3 = xl[i__], d__4 = xbase[i__] + xopt[i__];\n                    d__1 = std::max(d__3,d__4), d__2 = xu[i__];\n                    x[i__] = std::min(d__1,d__2);\n                    if (xopt[i__] == sl[i__]) {\n                        x[i__] = xl[i__];\n                    }\n                    if (xopt[i__] == su[i__]) {\n                        x[i__] = xu[i__];\n                    }\n                    /* L730: */\n                }\n                f = fval[kopt];\n            }\n\n            return f;\n        } /* bobyqb_ */\n\n    // ----------------------------------------------------------------------------------------\n\n        void altmov_(\n            const integer n,\n            const integer npt,\n            const doublereal *xpt, \n            const doublereal *xopt,\n            const doublereal *bmat,\n            const doublereal *zmat,\n            const integer ndim, \n            const doublereal *sl,\n            const doublereal *su,\n            const integer kopt,\n            const integer knew, \n            const doublereal adelt,\n            doublereal *xnew,\n            doublereal *xalt,\n            doublereal& alpha,\n            doublereal& cauchy,\n            doublereal *glag,\n            doublereal *hcol, \n            doublereal *w\n        ) const\n        {\n            /* System generated locals */\n            integer xpt_dim1, xpt_offset, bmat_dim1, bmat_offset, zmat_dim1, \n            zmat_offset, i__1, i__2;\n            doublereal d__1, d__2, d__3, d__4;\n\n\n            /* Local variables */\n            integer i__, j, k;\n            doublereal ha, gw, one, diff, half;\n            integer ilbd, isbd;\n            doublereal slbd;\n            integer iubd;\n            doublereal vlag, subd, temp;\n            integer ksav = 0;\n            doublereal step = 0, zero = 0, curv = 0;\n            integer iflag;\n            doublereal scale = 0, csave = 0, tempa = 0, tempb = 0, tempd = 0, const__ = 0, sumin = 0, \n                       ggfree = 0;\n            integer ibdsav = 0;\n            doublereal dderiv = 0, bigstp = 0, predsq = 0, presav = 0, distsq = 0, stpsav = 0, wfixsq = 0, wsqsav = 0;\n\n\n            /*     The arguments N, NPT, XPT, XOPT, BMAT, ZMAT, NDIM, SL and SU all have */\n            /*       the same meanings as the corresponding arguments of BOBYQB. */\n            /*     KOPT is the index of the optimal interpolation point. */\n            /*     KNEW is the index of the interpolation point that is going to be moved. */\n            /*     ADELT is the current trust region bound. */\n            /*     XNEW will be set to a suitable new position for the interpolation point */\n            /*       XPT(KNEW,.). Specifically, it satisfies the SL, SU and trust region */\n            /*       bounds and it should provide a large denominator in the next call of */\n            /*       UPDATE. The step XNEW-XOPT from XOPT is restricted to moves along the */\n            /*       straight lines through XOPT and another interpolation point. */\n            /*     XALT also provides a large value of the modulus of the KNEW-th Lagrange */\n            /*       function subject to the constraints that have been mentioned, its main */\n            /*       difference from XNEW being that XALT-XOPT is a constrained version of */\n            /*       the Cauchy step within the trust region. An exception is that XALT is */\n            /*       not calculated if all components of GLAG (see below) are zero. */\n            /*     ALPHA will be set to the KNEW-th diagonal element of the H matrix. */\n            /*     CAUCHY will be set to the square of the KNEW-th Lagrange function at */\n            /*       the step XALT-XOPT from XOPT for the vector XALT that is returned, */\n            /*       except that CAUCHY is set to zero if XALT is not calculated. */\n            /*     GLAG is a working space vector of length N for the gradient of the */\n            /*       KNEW-th Lagrange function at XOPT. */\n            /*     HCOL is a working space vector of length NPT for the second derivative */\n            /*       coefficients of the KNEW-th Lagrange function. */\n            /*     W is a working space vector of length 2N that is going to hold the */\n            /*       constrained Cauchy step from XOPT of the Lagrange function, followed */\n            /*       by the downhill version of XALT when the uphill step is calculated. */\n\n            /*     Set the first NPT components of W to the leading elements of the */\n            /*     KNEW-th column of the H matrix. */\n\n            /* Parameter adjustments */\n            zmat_dim1 = npt;\n            zmat_offset = 1 + zmat_dim1;\n            zmat -= zmat_offset;\n            xpt_dim1 = npt;\n            xpt_offset = 1 + xpt_dim1;\n            xpt -= xpt_offset;\n            --xopt;\n            bmat_dim1 = ndim;\n            bmat_offset = 1 + bmat_dim1;\n            bmat -= bmat_offset;\n            --sl;\n            --su;\n            --xnew;\n            --xalt;\n            --glag;\n            --hcol;\n            --w;\n\n            /* Function Body */\n            half = .5;\n            one = 1.;\n            zero = 0.;\n            const__ = one + std::sqrt(2.);\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                /* L10: */\n                hcol[k] = zero;\n            }\n            i__1 = npt - n - 1;\n            for (j = 1; j <= i__1; ++j) {\n                temp = zmat[knew + j * zmat_dim1];\n                i__2 = npt;\n                for (k = 1; k <= i__2; ++k) {\n                    /* L20: */\n                    hcol[k] += temp * zmat[k + j * zmat_dim1];\n                }\n            }\n            alpha = hcol[knew];\n            ha = half * alpha;\n\n            /*     Calculate the gradient of the KNEW-th Lagrange function at XOPT. */\n\n            i__2 = n;\n            for (i__ = 1; i__ <= i__2; ++i__) {\n                /* L30: */\n                glag[i__] = bmat[knew + i__ * bmat_dim1];\n            }\n            i__2 = npt;\n            for (k = 1; k <= i__2; ++k) {\n                temp = zero;\n                i__1 = n;\n                for (j = 1; j <= i__1; ++j) {\n                    /* L40: */\n                    temp += xpt[k + j * xpt_dim1] * xopt[j];\n                }\n                temp = hcol[k] * temp;\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    /* L50: */\n                    glag[i__] += temp * xpt[k + i__ * xpt_dim1];\n                }\n            }\n\n            /*     Search for a large denominator along the straight lines through XOPT */\n            /*     and another interpolation point. SLBD and SUBD will be lower and upper */\n            /*     bounds on the step along each of these lines in turn. PREDSQ will be */\n            /*     set to the square of the predicted denominator for each line. PRESAV */\n            /*     will be set to the largest admissible value of PREDSQ that occurs. */\n\n            presav = zero;\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                if (k == kopt) {\n                    goto L80;\n                }\n                dderiv = zero;\n                distsq = zero;\n                i__2 = n;\n                for (i__ = 1; i__ <= i__2; ++i__) {\n                    temp = xpt[k + i__ * xpt_dim1] - xopt[i__];\n                    dderiv += glag[i__] * temp;\n                    /* L60: */\n                    distsq += temp * temp;\n                }\n                subd = adelt / std::sqrt(distsq);\n                slbd = -subd;\n                ilbd = 0;\n                iubd = 0;\n                sumin = std::min(one,subd);\n\n                /*     Revise SLBD and SUBD if necessary because of the bounds in SL and SU. */\n\n                i__2 = n;\n                for (i__ = 1; i__ <= i__2; ++i__) {\n                    temp = xpt[k + i__ * xpt_dim1] - xopt[i__];\n                    if (temp > zero) {\n                        if (slbd * temp < sl[i__] - xopt[i__]) {\n                            slbd = (sl[i__] - xopt[i__]) / temp;\n                            ilbd = -i__;\n                        }\n                        if (subd * temp > su[i__] - xopt[i__]) {\n                            /* Computing MAX */\n                            d__1 = sumin, d__2 = (su[i__] - xopt[i__]) / temp;\n                            subd = std::max(d__1,d__2);\n                            iubd = i__;\n                        }\n                    } else if (temp < zero) {\n                        if (slbd * temp > su[i__] - xopt[i__]) {\n                            slbd = (su[i__] - xopt[i__]) / temp;\n                            ilbd = i__;\n                        }\n                        if (subd * temp < sl[i__] - xopt[i__]) {\n                            /* Computing MAX */\n                            d__1 = sumin, d__2 = (sl[i__] - xopt[i__]) / temp;\n                            subd = std::max(d__1,d__2);\n                            iubd = -i__;\n                        }\n                    }\n                    /* L70: */\n                }\n\n                /*     Seek a large modulus of the KNEW-th Lagrange function when the index */\n                /*     of the other interpolation point on the line through XOPT is KNEW. */\n\n                if (k == knew) {\n                    diff = dderiv - one;\n                    step = slbd;\n                    vlag = slbd * (dderiv - slbd * diff);\n                    isbd = ilbd;\n                    temp = subd * (dderiv - subd * diff);\n                    if (std::abs(temp) > std::abs(vlag)) {\n                        step = subd;\n                        vlag = temp;\n                        isbd = iubd;\n                    }\n                    tempd = half * dderiv;\n                    tempa = tempd - diff * slbd;\n                    tempb = tempd - diff * subd;\n                    if (tempa * tempb < zero) {\n                        temp = tempd * tempd / diff;\n                        if (std::abs(temp) > std::abs(vlag)) {\n                            step = tempd / diff;\n                            vlag = temp;\n                            isbd = 0;\n                        }\n                    }\n\n                    /*     Search along each of the other lines through XOPT and another point. */\n\n                } else {\n                    step = slbd;\n                    vlag = slbd * (one - slbd);\n                    isbd = ilbd;\n                    temp = subd * (one - subd);\n                    if (std::abs(temp) > std::abs(vlag)) {\n                        step = subd;\n                        vlag = temp;\n                        isbd = iubd;\n                    }\n                    if (subd > half) {\n                        if (std::abs(vlag) < .25) {\n                            step = half;\n                            vlag = .25;\n                            isbd = 0;\n                        }\n                    }\n                    vlag *= dderiv;\n                }\n\n                /*     Calculate PREDSQ for the current line search and maintain PRESAV. */\n\n                temp = step * (one - step) * distsq;\n                predsq = vlag * vlag * (vlag * vlag + ha * temp * temp);\n                if (predsq > presav) {\n                    presav = predsq;\n                    ksav = k;\n                    stpsav = step;\n                    ibdsav = isbd;\n                }\nL80:\n                ;\n            }\n\n            /*     Construct XNEW in a way that satisfies the bound constraints exactly. */\n\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                temp = xopt[i__] + stpsav * (xpt[ksav + i__ * xpt_dim1] - xopt[i__]);\n                /* L90: */\n                /* Computing MAX */\n                /* Computing MIN */\n                d__3 = su[i__];\n                d__1 = sl[i__], d__2 = std::min(d__3,temp);\n                xnew[i__] = std::max(d__1,d__2);\n            }\n            if (ibdsav < 0) {\n                xnew[-ibdsav] = sl[-ibdsav];\n            }\n            if (ibdsav > 0) {\n                xnew[ibdsav] = su[ibdsav];\n            }\n\n            /*     Prepare for the iterative method that assembles the constrained Cauchy */\n            /*     step in W. The sum of squares of the fixed components of W is formed in */\n            /*     WFIXSQ, and the free components of W are set to BIGSTP. */\n\n            bigstp = adelt + adelt;\n            iflag = 0;\nL100:\n            wfixsq = zero;\n            ggfree = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                w[i__] = zero;\n                /* Computing MIN */\n                d__1 = xopt[i__] - sl[i__], d__2 = glag[i__];\n                tempa = std::min(d__1,d__2);\n                /* Computing MAX */\n                d__1 = xopt[i__] - su[i__], d__2 = glag[i__];\n                tempb = std::max(d__1,d__2);\n                if (tempa > zero || tempb < zero) {\n                    w[i__] = bigstp;\n                    /* Computing 2nd power */\n                    d__1 = glag[i__];\n                    ggfree += d__1 * d__1;\n                }\n                /* L110: */\n            }\n            if (ggfree == zero) {\n                cauchy = zero;\n                goto L200;\n            }\n\n            /*     Investigate whether more components of W can be fixed. */\n\nL120:\n            temp = adelt * adelt - wfixsq;\n            if (temp > zero) {\n                wsqsav = wfixsq;\n                step = std::sqrt(temp / ggfree);\n                ggfree = zero;\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    if (w[i__] == bigstp) {\n                        temp = xopt[i__] - step * glag[i__];\n                        if (temp <= sl[i__]) {\n                            w[i__] = sl[i__] - xopt[i__];\n                            /* Computing 2nd power */\n                            d__1 = w[i__];\n                            wfixsq += d__1 * d__1;\n                        } else if (temp >= su[i__]) {\n                            w[i__] = su[i__] - xopt[i__];\n                            /* Computing 2nd power */\n                            d__1 = w[i__];\n                            wfixsq += d__1 * d__1;\n                        } else {\n                            /* Computing 2nd power */\n                            d__1 = glag[i__];\n                            ggfree += d__1 * d__1;\n                        }\n                    }\n                    /* L130: */\n                }\n                if (wfixsq > wsqsav && ggfree > zero) {\n                    goto L120;\n                }\n            }\n\n            /*     Set the remaining free components of W and all components of XALT, */\n            /*     except that W may be scaled later. */\n\n            gw = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                if (w[i__] == bigstp) {\n                    w[i__] = -step * glag[i__];\n                    /* Computing MAX */\n                    /* Computing MIN */\n                    d__3 = su[i__], d__4 = xopt[i__] + w[i__];\n                    d__1 = sl[i__], d__2 = std::min(d__3,d__4);\n                    xalt[i__] = std::max(d__1,d__2);\n                } else if (w[i__] == zero) {\n                    xalt[i__] = xopt[i__];\n                } else if (glag[i__] > zero) {\n                    xalt[i__] = sl[i__];\n                } else {\n                    xalt[i__] = su[i__];\n                }\n                /* L140: */\n                gw += glag[i__] * w[i__];\n            }\n\n            /*     Set CURV to the curvature of the KNEW-th Lagrange function along W. */\n            /*     Scale W by a factor less than one if that can reduce the modulus of */\n            /*     the Lagrange function at XOPT+W. Set CAUCHY to the final value of */\n            /*     the square of this function. */\n\n            curv = zero;\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                temp = zero;\n                i__2 = n;\n                for (j = 1; j <= i__2; ++j) {\n                    /* L150: */\n                    temp += xpt[k + j * xpt_dim1] * w[j];\n                }\n                /* L160: */\n                curv += hcol[k] * temp * temp;\n            }\n            if (iflag == 1) {\n                curv = -curv;\n            }\n            if (curv > -gw && curv < -const__ * gw) {\n                scale = -gw / curv;\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    temp = xopt[i__] + scale * w[i__];\n                    /* L170: */\n                    /* Computing MAX */\n                    /* Computing MIN */\n                    d__3 = su[i__];\n                    d__1 = sl[i__], d__2 = std::min(d__3,temp);\n                    xalt[i__] = std::max(d__1,d__2);\n                }\n                /* Computing 2nd power */\n                d__1 = half * gw * scale;\n                cauchy = d__1 * d__1;\n            } else {\n                /* Computing 2nd power */\n                d__1 = gw + half * curv;\n                cauchy = d__1 * d__1;\n            }\n\n            /*     If IFLAG is zero, then XALT is calculated as before after reversing */\n            /*     the sign of GLAG. Thus two XALT vectors become available. The one that */\n            /*     is chosen is the one that gives the larger value of CAUCHY. */\n\n            if (iflag == 0) {\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    glag[i__] = -glag[i__];\n                    /* L180: */\n                    w[n + i__] = xalt[i__];\n                }\n                csave = cauchy;\n                iflag = 1;\n                goto L100;\n            }\n            if (csave > cauchy) {\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    /* L190: */\n                    xalt[i__] = w[n + i__];\n                }\n                cauchy = csave;\n            }\nL200:\n            ;\n        } /* altmov_ */\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename funct>\n        void prelim_(\n            const funct& calfun,\n            const integer n,\n            const integer npt,\n            doublereal *x, \n            const doublereal *xl,\n            const doublereal *xu,\n            const doublereal rhobeg,\n            const integer maxfun,\n            doublereal *xbase,\n            doublereal *xpt,\n            doublereal *fval,\n            doublereal *gopt,\n            doublereal *hq,\n            doublereal *pq,\n            doublereal *bmat, \n            doublereal *zmat,\n            const integer ndim,\n            const doublereal *sl,\n            const doublereal *su, \n            integer& nf, \n            integer& kopt\n        ) const\n        {\n            /* System generated locals */\n            integer xpt_dim1, xpt_offset, bmat_dim1, bmat_offset, zmat_dim1, \n            zmat_offset, i__1, i__2;\n            doublereal d__1, d__2, d__3, d__4;\n\n\n            /* Local variables */\n            doublereal f;\n            integer i__, j, k, ih, np, nfm;\n            doublereal one;\n            integer nfx = 0, ipt = 0, jpt = 0;\n            doublereal two = 0, fbeg = 0, diff = 0, half = 0, temp = 0, zero = 0, recip = 0, stepa = 0, stepb = 0;\n            integer itemp;\n            doublereal rhosq;\n\n\n\n            /*     The arguments N, NPT, X, XL, XU, RHOBEG, IPRINT and MAXFUN are the */\n            /*       same as the corresponding arguments in SUBROUTINE BOBYQA. */\n            /*     The arguments XBASE, XPT, FVAL, HQ, PQ, BMAT, ZMAT, NDIM, SL and SU */\n            /*       are the same as the corresponding arguments in BOBYQB, the elements */\n            /*       of SL and SU being set in BOBYQA. */\n            /*     GOPT is usually the gradient of the quadratic model at XOPT+XBASE, but */\n            /*       it is set by PRELIM to the gradient of the quadratic model at XBASE. */\n            /*       If XOPT is nonzero, BOBYQB will change it to its usual value later. */\n            /*     NF is maintaned as the number of calls of CALFUN so far. */\n            /*     KOPT will be such that the least calculated value of F so far is at */\n            /*       the point XPT(KOPT,.)+XBASE in the space of the variables. */\n\n            /*     SUBROUTINE PRELIM sets the elements of XBASE, XPT, FVAL, GOPT, HQ, PQ, */\n            /*     BMAT and ZMAT for the first iteration, and it maintains the values of */\n            /*     NF and KOPT. The vector X is also changed by PRELIM. */\n\n            /*     Set some constants. */\n\n            /* Parameter adjustments */\n            zmat_dim1 = npt;\n            zmat_offset = 1 + zmat_dim1;\n            zmat -= zmat_offset;\n            xpt_dim1 = npt;\n            xpt_offset = 1 + xpt_dim1;\n            xpt -= xpt_offset;\n            --x;\n            --xl;\n            --xu;\n            --xbase;\n            --fval;\n            --gopt;\n            --hq;\n            --pq;\n            bmat_dim1 = ndim;\n            bmat_offset = 1 + bmat_dim1;\n            bmat -= bmat_offset;\n            --sl;\n            --su;\n\n            /* Function Body */\n            half = .5;\n            one = 1.;\n            two = 2.;\n            zero = 0.;\n            rhosq = rhobeg * rhobeg;\n            recip = one / rhosq;\n            np = n + 1;\n\n            /*     Set XBASE to the initial vector of variables, and set the initial */\n            /*     elements of XPT, BMAT, HQ, PQ and ZMAT to zero. */\n\n            i__1 = n;\n            for (j = 1; j <= i__1; ++j) {\n                xbase[j] = x[j];\n                i__2 = npt;\n                for (k = 1; k <= i__2; ++k) {\n                    /* L10: */\n                    xpt[k + j * xpt_dim1] = zero;\n                }\n                i__2 = ndim;\n                for (i__ = 1; i__ <= i__2; ++i__) {\n                    /* L20: */\n                    bmat[i__ + j * bmat_dim1] = zero;\n                }\n            }\n            i__2 = n * np / 2;\n            for (ih = 1; ih <= i__2; ++ih) {\n                /* L30: */\n                hq[ih] = zero;\n            }\n            i__2 = npt;\n            for (k = 1; k <= i__2; ++k) {\n                pq[k] = zero;\n                i__1 = npt - np;\n                for (j = 1; j <= i__1; ++j) {\n                    /* L40: */\n                    zmat[k + j * zmat_dim1] = zero;\n                }\n            }\n\n            /*     Begin the initialization procedure. NF becomes one more than the number */\n            /*     of function values so far. The coordinates of the displacement of the */\n            /*     next initial interpolation point from XBASE are set in XPT(NF+1,.). */\n\n            nf = 0;\nL50:\n            nfm = nf;\n            nfx = nf - n;\n            ++(nf);\n            if (nfm <= n << 1) {\n                if (nfm >= 1 && nfm <= n) {\n                    stepa = rhobeg;\n                    if (su[nfm] == zero) {\n                        stepa = -stepa;\n                    }\n                    xpt[nf + nfm * xpt_dim1] = stepa;\n                } else if (nfm > n) {\n                    stepa = xpt[nf - n + nfx * xpt_dim1];\n                    stepb = -(rhobeg);\n                    if (sl[nfx] == zero) {\n                        /* Computing MIN */\n                        d__1 = two * rhobeg, d__2 = su[nfx];\n                        stepb = std::min(d__1,d__2);\n                    }\n                    if (su[nfx] == zero) {\n                        /* Computing MAX */\n                        d__1 = -two * rhobeg, d__2 = sl[nfx];\n                        stepb = std::max(d__1,d__2);\n                    }\n                    xpt[nf + nfx * xpt_dim1] = stepb;\n                }\n            } else {\n                itemp = (nfm - np) / n;\n                jpt = nfm - itemp * n - n;\n                ipt = jpt + itemp;\n                if (ipt > n) {\n                    itemp = jpt;\n                    jpt = ipt - n;\n                    ipt = itemp;\n                }\n                xpt[nf + ipt * xpt_dim1] = xpt[ipt + 1 + ipt * xpt_dim1];\n                xpt[nf + jpt * xpt_dim1] = xpt[jpt + 1 + jpt * xpt_dim1];\n            }\n\n            /*     Calculate the next value of F. The least function value so far and */\n            /*     its index are required. */\n\n            i__1 = n;\n            for (j = 1; j <= i__1; ++j) {\n                /* Computing MIN */\n                /* Computing MAX */\n                d__3 = xl[j], d__4 = xbase[j] + xpt[nf + j * xpt_dim1];\n                d__1 = std::max(d__3,d__4), d__2 = xu[j];\n                x[j] = std::min(d__1,d__2);\n                if (xpt[nf + j * xpt_dim1] == sl[j]) {\n                    x[j] = xl[j];\n                }\n                if (xpt[nf + j * xpt_dim1] == su[j]) {\n                    x[j] = xu[j];\n                }\n                /* L60: */\n            }\n            f = calfun(mat(&x[1],n));\n            fval[nf] = f;\n            if (nf == 1) {\n                fbeg = f;\n                kopt = 1;\n            } else if (f < fval[kopt]) {\n                kopt = nf;\n            }\n\n            /*     Set the nonzero initial elements of BMAT and the quadratic model in the */\n            /*     cases when NF is at most 2*N+1. If NF exceeds N+1, then the positions */\n            /*     of the NF-th and (NF-N)-th interpolation points may be switched, in */\n            /*     order that the function value at the first of them contributes to the */\n            /*     off-diagonal second derivative terms of the initial quadratic model. */\n\n            if (nf <= (n << 1) + 1) {\n                if (nf >= 2 && nf <= n + 1) {\n                    gopt[nfm] = (f - fbeg) / stepa;\n                    if (npt < nf + n) {\n                        bmat[nfm * bmat_dim1 + 1] = -one / stepa;\n                        bmat[nf + nfm * bmat_dim1] = one / stepa;\n                        bmat[npt + nfm + nfm * bmat_dim1] = -half * rhosq;\n                    }\n                } else if (nf >= n + 2) {\n                    ih = nfx * (nfx + 1) / 2;\n                    temp = (f - fbeg) / stepb;\n                    diff = stepb - stepa;\n                    hq[ih] = two * (temp - gopt[nfx]) / diff;\n                    gopt[nfx] = (gopt[nfx] * stepb - temp * stepa) / diff;\n                    if (stepa * stepb < zero) {\n                        if (f < fval[nf - n]) {\n                            fval[nf] = fval[nf - n];\n                            fval[nf - n] = f;\n                            if (kopt == nf) {\n                                kopt = nf - n;\n                            }\n                            xpt[nf - n + nfx * xpt_dim1] = stepb;\n                            xpt[nf + nfx * xpt_dim1] = stepa;\n                        }\n                    }\n                    bmat[nfx * bmat_dim1 + 1] = -(stepa + stepb) / (stepa * stepb);\n                    bmat[nf + nfx * bmat_dim1] = -half / xpt[nf - n + nfx * \n                        xpt_dim1];\n                    bmat[nf - n + nfx * bmat_dim1] = -bmat[nfx * bmat_dim1 + 1] - \n                        bmat[nf + nfx * bmat_dim1];\n                    zmat[nfx * zmat_dim1 + 1] = std::sqrt(two) / (stepa * stepb);\n                    zmat[nf + nfx * zmat_dim1] = std::sqrt(half) / rhosq;\n                    zmat[nf - n + nfx * zmat_dim1] = -zmat[nfx * zmat_dim1 + 1] - \n                        zmat[nf + nfx * zmat_dim1];\n                }\n\n                /*     Set the off-diagonal second derivatives of the Lagrange functions and */\n                /*     the initial quadratic model. */\n\n            } else {\n                ih = ipt * (ipt - 1) / 2 + jpt;\n                zmat[nfx * zmat_dim1 + 1] = recip;\n                zmat[nf + nfx * zmat_dim1] = recip;\n                zmat[ipt + 1 + nfx * zmat_dim1] = -recip;\n                zmat[jpt + 1 + nfx * zmat_dim1] = -recip;\n                temp = xpt[nf + ipt * xpt_dim1] * xpt[nf + jpt * xpt_dim1];\n                hq[ih] = (fbeg - fval[ipt + 1] - fval[jpt + 1] + f) / temp;\n            }\n            if (nf < npt && nf < maxfun) {\n                goto L50;\n            }\n\n        } /* prelim_ */\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename funct>\n        void rescue_ (\n            const funct& calfun,\n            const integer n,\n            const integer npt,\n            const doublereal *xl, \n            const doublereal *xu,\n            const integer maxfun,\n            doublereal *xbase, \n            doublereal *xpt, \n            doublereal *fval,\n            doublereal *xopt,\n            doublereal *gopt,\n            doublereal *hq, \n            doublereal *pq,\n            doublereal *bmat,\n            doublereal *zmat, \n            const integer ndim,\n            doublereal *sl,\n            doublereal *su,\n            integer& nf, \n            const doublereal delta,\n            integer& kopt,\n            doublereal *vlag,\n            doublereal * ptsaux,\n            doublereal *ptsid,\n            doublereal *w\n        ) const\n        {\n            /* System generated locals */\n            integer xpt_dim1, xpt_offset, bmat_dim1, bmat_offset, zmat_dim1, \n            zmat_offset, i__1, i__2, i__3;\n            doublereal d__1, d__2, d__3, d__4;\n\n\n            /* Local variables */\n            doublereal f;\n            integer i__, j, k, ih, jp, ip, iq, np, iw;\n            doublereal xp = 0, xq = 0, den = 0;\n            integer ihp = 0;\n            doublereal one;\n            integer ihq, jpn, kpt;\n            doublereal sum = 0, diff = 0, half = 0, beta = 0;\n            integer kold;\n            doublereal winc;\n            integer nrem, knew;\n            doublereal temp, bsum;\n            integer nptm;\n            doublereal zero = 0, hdiag = 0, fbase = 0, sfrac = 0, denom = 0, vquad = 0, sumpq = 0;\n            doublereal dsqmin, distsq, vlmxsq;\n\n\n\n            /*     The arguments N, NPT, XL, XU, IPRINT, MAXFUN, XBASE, XPT, FVAL, XOPT, */\n            /*       GOPT, HQ, PQ, BMAT, ZMAT, NDIM, SL and SU have the same meanings as */\n            /*       the corresponding arguments of BOBYQB on the entry to RESCUE. */\n            /*     NF is maintained as the number of calls of CALFUN so far, except that */\n            /*       NF is set to -1 if the value of MAXFUN prevents further progress. */\n            /*     KOPT is maintained so that FVAL(KOPT) is the least calculated function */\n            /*       value. Its correct value must be given on entry. It is updated if a */\n            /*       new least function value is found, but the corresponding changes to */\n            /*       XOPT and GOPT have to be made later by the calling program. */\n            /*     DELTA is the current trust region radius. */\n            /*     VLAG is a working space vector that will be used for the values of the */\n            /*       provisional Lagrange functions at each of the interpolation points. */\n            /*       They are part of a product that requires VLAG to be of length NDIM. */\n            /*     PTSAUX is also a working space array. For J=1,2,...,N, PTSAUX(1,J) and */\n            /*       PTSAUX(2,J) specify the two positions of provisional interpolation */\n            /*       points when a nonzero step is taken along e_J (the J-th coordinate */\n            /*       direction) through XBASE+XOPT, as specified below. Usually these */\n            /*       steps have length DELTA, but other lengths are chosen if necessary */\n            /*       in order to satisfy the given bounds on the variables. */\n            /*     PTSID is also a working space array. It has NPT components that denote */\n            /*       provisional new positions of the original interpolation points, in */\n            /*       case changes are needed to restore the linear independence of the */\n            /*       interpolation conditions. The K-th point is a candidate for change */\n            /*       if and only if PTSID(K) is nonzero. In this case let p and q be the */\n            /*       integer parts of PTSID(K) and (PTSID(K)-p) multiplied by N+1. If p */\n            /*       and q are both positive, the step from XBASE+XOPT to the new K-th */\n            /*       interpolation point is PTSAUX(1,p)*e_p + PTSAUX(1,q)*e_q. Otherwise */\n            /*       the step is PTSAUX(1,p)*e_p or PTSAUX(2,q)*e_q in the cases q=0 or */\n            /*       p=0, respectively. */\n            /*     The first NDIM+NPT elements of the array W are used for working space. */\n            /*     The final elements of BMAT and ZMAT are set in a well-conditioned way */\n            /*       to the values that are appropriate for the new interpolation points. */\n            /*     The elements of GOPT, HQ and PQ are also revised to the values that are */\n            /*       appropriate to the final quadratic model. */\n\n            /*     Set some constants. */\n\n            /* Parameter adjustments */\n            zmat_dim1 = npt;\n            zmat_offset = 1 + zmat_dim1;\n            zmat -= zmat_offset;\n            xpt_dim1 = npt;\n            xpt_offset = 1 + xpt_dim1;\n            xpt -= xpt_offset;\n            --xl;\n            --xu;\n            --xbase;\n            --fval;\n            --xopt;\n            --gopt;\n            --hq;\n            --pq;\n            bmat_dim1 = ndim;\n            bmat_offset = 1 + bmat_dim1;\n            bmat -= bmat_offset;\n            --sl;\n            --su;\n            --vlag;\n            ptsaux -= 3;\n            --ptsid;\n            --w;\n\n            /* Function Body */\n            half = .5;\n            one = 1.;\n            zero = 0.;\n            np = n + 1;\n            sfrac = half / (doublereal) np;\n            nptm = npt - np;\n\n            /*     Shift the interpolation points so that XOPT becomes the origin, and set */\n            /*     the elements of ZMAT to zero. The value of SUMPQ is required in the */\n            /*     updating of HQ below. The squares of the distances from XOPT to the */\n            /*     other interpolation points are set at the end of W. Increments of WINC */\n            /*     may be added later to these squares to balance the consideration of */\n            /*     the choice of point that is going to become current. */\n\n            sumpq = zero;\n            winc = zero;\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                distsq = zero;\n                i__2 = n;\n                for (j = 1; j <= i__2; ++j) {\n                    xpt[k + j * xpt_dim1] -= xopt[j];\n                    /* L10: */\n                    /* Computing 2nd power */\n                    d__1 = xpt[k + j * xpt_dim1];\n                    distsq += d__1 * d__1;\n                }\n                sumpq += pq[k];\n                w[ndim + k] = distsq;\n                winc = std::max(winc,distsq);\n                i__2 = nptm;\n                for (j = 1; j <= i__2; ++j) {\n                    /* L20: */\n                    zmat[k + j * zmat_dim1] = zero;\n                }\n            }\n\n            /*     Update HQ so that HQ and PQ define the second derivatives of the model */\n            /*     after XBASE has been shifted to the trust region centre. */\n\n            ih = 0;\n            i__2 = n;\n            for (j = 1; j <= i__2; ++j) {\n                w[j] = half * sumpq * xopt[j];\n                i__1 = npt;\n                for (k = 1; k <= i__1; ++k) {\n                    /* L30: */\n                    w[j] += pq[k] * xpt[k + j * xpt_dim1];\n                }\n                i__1 = j;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    ++ih;\n                    /* L40: */\n                    hq[ih] = hq[ih] + w[i__] * xopt[j] + w[j] * xopt[i__];\n                }\n            }\n\n            /*     Shift XBASE, SL, SU and XOPT. Set the elements of BMAT to zero, and */\n            /*     also set the elements of PTSAUX. */\n\n            i__1 = n;\n            for (j = 1; j <= i__1; ++j) {\n                xbase[j] += xopt[j];\n                sl[j] -= xopt[j];\n                su[j] -= xopt[j];\n                xopt[j] = zero;\n                /* Computing MIN */\n                d__1 = delta, d__2 = su[j];\n                ptsaux[(j << 1) + 1] = std::min(d__1,d__2);\n                /* Computing MAX */\n                d__1 = -(delta), d__2 = sl[j];\n                ptsaux[(j << 1) + 2] = std::max(d__1,d__2);\n                if (ptsaux[(j << 1) + 1] + ptsaux[(j << 1) + 2] < zero) {\n                    temp = ptsaux[(j << 1) + 1];\n                    ptsaux[(j << 1) + 1] = ptsaux[(j << 1) + 2];\n                    ptsaux[(j << 1) + 2] = temp;\n                }\n                if ((d__2 = ptsaux[(j << 1) + 2], std::abs(d__2)) < half * (d__1 = ptsaux[(\n                            j << 1) + 1], std::abs(d__1))) {\n                    ptsaux[(j << 1) + 2] = half * ptsaux[(j << 1) + 1];\n                }\n                i__2 = ndim;\n                for (i__ = 1; i__ <= i__2; ++i__) {\n                    /* L50: */\n                    bmat[i__ + j * bmat_dim1] = zero;\n                }\n            }\n            fbase = fval[kopt];\n\n            /*     Set the identifiers of the artificial interpolation points that are */\n            /*     along a coordinate direction from XOPT, and set the corresponding */\n            /*     nonzero elements of BMAT and ZMAT. */\n\n            ptsid[1] = sfrac;\n            i__2 = n;\n            for (j = 1; j <= i__2; ++j) {\n                jp = j + 1;\n                jpn = jp + n;\n                ptsid[jp] = (doublereal) j + sfrac;\n                if (jpn <= npt) {\n                    ptsid[jpn] = (doublereal) j / (doublereal) np + sfrac;\n                    temp = one / (ptsaux[(j << 1) + 1] - ptsaux[(j << 1) + 2]);\n                    bmat[jp + j * bmat_dim1] = -temp + one / ptsaux[(j << 1) + 1];\n                    bmat[jpn + j * bmat_dim1] = temp + one / ptsaux[(j << 1) + 2];\n                    bmat[j * bmat_dim1 + 1] = -bmat[jp + j * bmat_dim1] - bmat[jpn + \n                        j * bmat_dim1];\n                    zmat[j * zmat_dim1 + 1] = std::sqrt(2.) / (d__1 = ptsaux[(j << 1) + 1] \n                                                          * ptsaux[(j << 1) + 2], std::abs(d__1));\n                    zmat[jp + j * zmat_dim1] = zmat[j * zmat_dim1 + 1] * ptsaux[(j << \n                                                                                 1) + 2] * temp;\n                    zmat[jpn + j * zmat_dim1] = -zmat[j * zmat_dim1 + 1] * ptsaux[(j \n                                                                                   << 1) + 1] * temp;\n                } else {\n                    bmat[j * bmat_dim1 + 1] = -one / ptsaux[(j << 1) + 1];\n                    bmat[jp + j * bmat_dim1] = one / ptsaux[(j << 1) + 1];\n                    /* Computing 2nd power */\n                    d__1 = ptsaux[(j << 1) + 1];\n                    bmat[j + npt + j * bmat_dim1] = -half * (d__1 * d__1);\n                }\n                /* L60: */\n            }\n\n            /*     Set any remaining identifiers with their nonzero elements of ZMAT. */\n\n            if (npt >= n + np) {\n                i__2 = npt;\n                for (k = np << 1; k <= i__2; ++k) {\n                    iw = (integer) (((doublereal) (k - np) - half) / (doublereal) (n)\n                    );\n                    ip = k - np - iw * n;\n                    iq = ip + iw;\n                    if (iq > n) {\n                        iq -= n;\n                    }\n                    ptsid[k] = (doublereal) ip + (doublereal) iq / (doublereal) np + \n                        sfrac;\n                    temp = one / (ptsaux[(ip << 1) + 1] * ptsaux[(iq << 1) + 1]);\n                    zmat[(k - np) * zmat_dim1 + 1] = temp;\n                    zmat[ip + 1 + (k - np) * zmat_dim1] = -temp;\n                    zmat[iq + 1 + (k - np) * zmat_dim1] = -temp;\n                    /* L70: */\n                    zmat[k + (k - np) * zmat_dim1] = temp;\n                }\n            }\n            nrem = npt;\n            kold = 1;\n            knew = kopt;\n\n            /*     Reorder the provisional points in the way that exchanges PTSID(KOLD) */\n            /*     with PTSID(KNEW). */\n\nL80:\n            i__2 = n;\n            for (j = 1; j <= i__2; ++j) {\n                temp = bmat[kold + j * bmat_dim1];\n                bmat[kold + j * bmat_dim1] = bmat[knew + j * bmat_dim1];\n                /* L90: */\n                bmat[knew + j * bmat_dim1] = temp;\n            }\n            i__2 = nptm;\n            for (j = 1; j <= i__2; ++j) {\n                temp = zmat[kold + j * zmat_dim1];\n                zmat[kold + j * zmat_dim1] = zmat[knew + j * zmat_dim1];\n                /* L100: */\n                zmat[knew + j * zmat_dim1] = temp;\n            }\n            ptsid[kold] = ptsid[knew];\n            ptsid[knew] = zero;\n            w[ndim + knew] = zero;\n            --nrem;\n            if (knew != kopt) {\n                temp = vlag[kold];\n                vlag[kold] = vlag[knew];\n                vlag[knew] = temp;\n\n                /*     Update the BMAT and ZMAT matrices so that the status of the KNEW-th */\n                /*     interpolation point can be changed from provisional to original. The */\n                /*     branch to label 350 occurs if all the original points are reinstated. */\n                /*     The nonnegative values of W(NDIM+K) are required in the search below. */\n\n                update_(n, npt, &bmat[bmat_offset], &zmat[zmat_offset], ndim, &vlag[1], \n                        beta, denom, knew, &w[1]);\n                if (nrem == 0) {\n                    goto L350;\n                }\n                i__2 = npt;\n                for (k = 1; k <= i__2; ++k) {\n                    /* L110: */\n                    w[ndim + k] = (d__1 = w[ndim + k], std::abs(d__1));\n                }\n            }\n\n            /*     Pick the index KNEW of an original interpolation point that has not */\n            /*     yet replaced one of the provisional interpolation points, giving */\n            /*     attention to the closeness to XOPT and to previous tries with KNEW. */\n\nL120:\n            dsqmin = zero;\n            i__2 = npt;\n            for (k = 1; k <= i__2; ++k) {\n                if (w[ndim + k] > zero) {\n                    if (dsqmin == zero || w[ndim + k] < dsqmin) {\n                        knew = k;\n                        dsqmin = w[ndim + k];\n                    }\n                }\n                /* L130: */\n            }\n            if (dsqmin == zero) {\n                goto L260;\n            }\n\n            /*     Form the W-vector of the chosen original interpolation point. */\n\n            i__2 = n;\n            for (j = 1; j <= i__2; ++j) {\n                /* L140: */\n                w[npt + j] = xpt[knew + j * xpt_dim1];\n            }\n            i__2 = npt;\n            for (k = 1; k <= i__2; ++k) {\n                sum = zero;\n                if (k == kopt) {\n                } else if (ptsid[k] == zero) {\n                    i__1 = n;\n                    for (j = 1; j <= i__1; ++j) {\n                        /* L150: */\n                        sum += w[npt + j] * xpt[k + j * xpt_dim1];\n                    }\n                } else {\n                    ip = (integer) ptsid[k];\n                    if (ip > 0) {\n                        sum = w[npt + ip] * ptsaux[(ip << 1) + 1];\n                    }\n                    iq = (integer) ((doublereal) np * ptsid[k] - (doublereal) (ip * \n                                                                               np));\n                    if (iq > 0) {\n                        iw = 1;\n                        if (ip == 0) {\n                            iw = 2;\n                        }\n                        sum += w[npt + iq] * ptsaux[iw + (iq << 1)];\n                    }\n                }\n                /* L160: */\n                w[k] = half * sum * sum;\n            }\n\n            /*     Calculate VLAG and BETA for the required updating of the H matrix if */\n            /*     XPT(KNEW,.) is reinstated in the set of interpolation points. */\n\n            i__2 = npt;\n            for (k = 1; k <= i__2; ++k) {\n                sum = zero;\n                i__1 = n;\n                for (j = 1; j <= i__1; ++j) {\n                    /* L170: */\n                    sum += bmat[k + j * bmat_dim1] * w[npt + j];\n                }\n                /* L180: */\n                vlag[k] = sum;\n            }\n            beta = zero;\n            i__2 = nptm;\n            for (j = 1; j <= i__2; ++j) {\n                sum = zero;\n                i__1 = npt;\n                for (k = 1; k <= i__1; ++k) {\n                    /* L190: */\n                    sum += zmat[k + j * zmat_dim1] * w[k];\n                }\n                beta -= sum * sum;\n                i__1 = npt;\n                for (k = 1; k <= i__1; ++k) {\n                    /* L200: */\n                    vlag[k] += sum * zmat[k + j * zmat_dim1];\n                }\n            }\n            bsum = zero;\n            distsq = zero;\n            i__1 = n;\n            for (j = 1; j <= i__1; ++j) {\n                sum = zero;\n                i__2 = npt;\n                for (k = 1; k <= i__2; ++k) {\n                    /* L210: */\n                    sum += bmat[k + j * bmat_dim1] * w[k];\n                }\n                jp = j + npt;\n                bsum += sum * w[jp];\n                i__2 = ndim;\n                for (ip = npt + 1; ip <= i__2; ++ip) {\n                    /* L220: */\n                    sum += bmat[ip + j * bmat_dim1] * w[ip];\n                }\n                bsum += sum * w[jp];\n                vlag[jp] = sum;\n                /* L230: */\n                /* Computing 2nd power */\n                d__1 = xpt[knew + j * xpt_dim1];\n                distsq += d__1 * d__1;\n            }\n            beta = half * distsq * distsq + beta - bsum;\n            vlag[kopt] += one;\n\n            /*     KOLD is set to the index of the provisional interpolation point that is */\n            /*     going to be deleted to make way for the KNEW-th original interpolation */\n            /*     point. The choice of KOLD is governed by the avoidance of a small value */\n            /*     of the denominator in the updating calculation of UPDATE. */\n\n            denom = zero;\n            vlmxsq = zero;\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                if (ptsid[k] != zero) {\n                    hdiag = zero;\n                    i__2 = nptm;\n                    for (j = 1; j <= i__2; ++j) {\n                        /* L240: */\n                        /* Computing 2nd power */\n                        d__1 = zmat[k + j * zmat_dim1];\n                        hdiag += d__1 * d__1;\n                    }\n                    /* Computing 2nd power */\n                    d__1 = vlag[k];\n                    den = beta * hdiag + d__1 * d__1;\n                    if (den > denom) {\n                        kold = k;\n                        denom = den;\n                    }\n                }\n                /* L250: */\n                /* Computing MAX */\n                /* Computing 2nd power */\n                d__3 = vlag[k];\n                d__1 = vlmxsq, d__2 = d__3 * d__3;\n                vlmxsq = std::max(d__1,d__2);\n            }\n            if (denom <= vlmxsq * .01) {\n                w[ndim + knew] = -w[ndim + knew] - winc;\n                goto L120;\n            }\n            goto L80;\n\n            /*     When label 260 is reached, all the final positions of the interpolation */\n            /*     points have been chosen although any changes have not been included yet */\n            /*     in XPT. Also the final BMAT and ZMAT matrices are complete, but, apart */\n            /*     from the shift of XBASE, the updating of the quadratic model remains to */\n            /*     be done. The following cycle through the new interpolation points begins */\n            /*     by putting the new point in XPT(KPT,.) and by setting PQ(KPT) to zero, */\n            /*     except that a RETURN occurs if MAXFUN prohibits another value of F. */\n\nL260:\n            i__1 = npt;\n            for (kpt = 1; kpt <= i__1; ++kpt) {\n                if (ptsid[kpt] == zero) {\n                    goto L340;\n                }\n                if (nf >= maxfun) {\n                    nf = -1;\n                    goto L350;\n                }\n                ih = 0;\n                i__2 = n;\n                for (j = 1; j <= i__2; ++j) {\n                    w[j] = xpt[kpt + j * xpt_dim1];\n                    xpt[kpt + j * xpt_dim1] = zero;\n                    temp = pq[kpt] * w[j];\n                    i__3 = j;\n                    for (i__ = 1; i__ <= i__3; ++i__) {\n                        ++ih;\n                        /* L270: */\n                        hq[ih] += temp * w[i__];\n                    }\n                }\n                pq[kpt] = zero;\n                ip = (integer) ptsid[kpt];\n                iq = (integer) ((doublereal) np * ptsid[kpt] - (doublereal) (ip * np))\n                    ;\n                if (ip > 0) {\n                    xp = ptsaux[(ip << 1) + 1];\n                    xpt[kpt + ip * xpt_dim1] = xp;\n                }\n                if (iq > 0) {\n                    xq = ptsaux[(iq << 1) + 1];\n                    if (ip == 0) {\n                        xq = ptsaux[(iq << 1) + 2];\n                    }\n                    xpt[kpt + iq * xpt_dim1] = xq;\n                }\n\n                /*     Set VQUAD to the value of the current model at the new point. */\n\n                vquad = fbase;\n                if (ip > 0) {\n                    ihp = (ip + ip * ip) / 2;\n                    vquad += xp * (gopt[ip] + half * xp * hq[ihp]);\n                }\n                if (iq > 0) {\n                    ihq = (iq + iq * iq) / 2;\n                    vquad += xq * (gopt[iq] + half * xq * hq[ihq]);\n                    if (ip > 0) {\n                        iw = std::max(ihp,ihq) - (i__3 = ip - iq, std::abs(i__3));\n                        vquad += xp * xq * hq[iw];\n                    }\n                }\n                i__3 = npt;\n                for (k = 1; k <= i__3; ++k) {\n                    temp = zero;\n                    if (ip > 0) {\n                        temp += xp * xpt[k + ip * xpt_dim1];\n                    }\n                    if (iq > 0) {\n                        temp += xq * xpt[k + iq * xpt_dim1];\n                    }\n                    /* L280: */\n                    vquad += half * pq[k] * temp * temp;\n                }\n\n                /*     Calculate F at the new interpolation point, and set DIFF to the factor */\n                /*     that is going to multiply the KPT-th Lagrange function when the model */\n                /*     is updated to provide interpolation to the new function value. */\n\n                i__3 = n;\n                for (i__ = 1; i__ <= i__3; ++i__) {\n                    /* Computing MIN */\n                    /* Computing MAX */\n                    d__3 = xl[i__], d__4 = xbase[i__] + xpt[kpt + i__ * xpt_dim1];\n                    d__1 = std::max(d__3,d__4), d__2 = xu[i__];\n                    w[i__] = std::min(d__1,d__2);\n                    if (xpt[kpt + i__ * xpt_dim1] == sl[i__]) {\n                        w[i__] = xl[i__];\n                    }\n                    if (xpt[kpt + i__ * xpt_dim1] == su[i__]) {\n                        w[i__] = xu[i__];\n                    }\n                    /* L290: */\n                }\n                ++(nf);\n                f = calfun(mat(&w[1],n));\n                fval[kpt] = f;\n                if (f < fval[kopt]) {\n                    kopt = kpt;\n                }\n                diff = f - vquad;\n\n                /*     Update the quadratic model. The RETURN from the subroutine occurs when */\n                /*     all the new interpolation points are included in the model. */\n\n                i__3 = n;\n                for (i__ = 1; i__ <= i__3; ++i__) {\n                    /* L310: */\n                    gopt[i__] += diff * bmat[kpt + i__ * bmat_dim1];\n                }\n                i__3 = npt;\n                for (k = 1; k <= i__3; ++k) {\n                    sum = zero;\n                    i__2 = nptm;\n                    for (j = 1; j <= i__2; ++j) {\n                        /* L320: */\n                        sum += zmat[k + j * zmat_dim1] * zmat[kpt + j * zmat_dim1];\n                    }\n                    temp = diff * sum;\n                    if (ptsid[k] == zero) {\n                        pq[k] += temp;\n                    } else {\n                        ip = (integer) ptsid[k];\n                        iq = (integer) ((doublereal) np * ptsid[k] - (doublereal) (ip \n                                                                                   * np));\n                        ihq = (iq * iq + iq) / 2;\n                        if (ip == 0) {\n                            /* Computing 2nd power */\n                            d__1 = ptsaux[(iq << 1) + 2];\n                            hq[ihq] += temp * (d__1 * d__1);\n                        } else {\n                            ihp = (ip * ip + ip) / 2;\n                            /* Computing 2nd power */\n                            d__1 = ptsaux[(ip << 1) + 1];\n                            hq[ihp] += temp * (d__1 * d__1);\n                            if (iq > 0) {\n                                /* Computing 2nd power */\n                                d__1 = ptsaux[(iq << 1) + 1];\n                                hq[ihq] += temp * (d__1 * d__1);\n                                iw = std::max(ihp,ihq) - (i__2 = iq - ip, std::abs(i__2));\n                                hq[iw] += temp * ptsaux[(ip << 1) + 1] * ptsaux[(iq <<\n                                                                                 1) + 1];\n                            }\n                        }\n                    }\n                    /* L330: */\n                }\n                ptsid[kpt] = zero;\nL340:\n                ;\n            }\nL350:\n            ;\n        } /* rescue_ */\n\n    // ----------------------------------------------------------------------------------------\n\n        void trsbox_(\n            const integer n,\n            const integer npt,\n            const doublereal *xpt, \n            const doublereal *xopt,\n            const doublereal *gopt,\n            const doublereal *hq,\n            const doublereal *pq, \n            const doublereal *sl,\n            const doublereal *su,\n            const doublereal delta,\n            doublereal *xnew, \n            doublereal *d__,\n            doublereal *gnew,\n            doublereal *xbdi,\n            doublereal *s, \n            doublereal *hs,\n            doublereal *hred,\n            doublereal *dsq,\n            doublereal *crvmin\n        ) const\n        {\n            /* System generated locals */\n            integer xpt_dim1, xpt_offset, i__1, i__2;\n            doublereal d__1, d__2, d__3, d__4;\n\n            /* Local variables */\n            integer i__, j, k, ih;\n            doublereal ds;\n            integer iu;\n            doublereal dhd, dhs, cth, one, shs, sth, ssq, half, beta, sdec, blen;\n            integer iact = 0, nact = 0;\n            doublereal angt, qred;\n            integer isav;\n            doublereal temp = 0, zero = 0, xsav = 0, xsum = 0, angbd = 0, dredg = 0, sredg = 0;\n            integer iterc;\n            doublereal resid = 0, delsq = 0, ggsav = 0, tempa = 0, tempb = 0,  \n                       redmax = 0, dredsq = 0, redsav = 0, onemin = 0, gredsq = 0, rednew = 0;\n            integer itcsav = 0;\n            doublereal rdprev = 0, rdnext = 0, stplen = 0, stepsq = 0;\n            integer itermax = 0;\n\n\n            /*     The arguments N, NPT, XPT, XOPT, GOPT, HQ, PQ, SL and SU have the same */\n            /*       meanings as the corresponding arguments of BOBYQB. */\n            /*     DELTA is the trust region radius for the present calculation, which */\n            /*       seeks a small value of the quadratic model within distance DELTA of */\n            /*       XOPT subject to the bounds on the variables. */\n            /*     XNEW will be set to a new vector of variables that is approximately */\n            /*       the one that minimizes the quadratic model within the trust region */\n            /*       subject to the SL and SU constraints on the variables. It satisfies */\n            /*       as equations the bounds that become active during the calculation. */\n            /*     D is the calculated trial step from XOPT, generated iteratively from an */\n            /*       initial value of zero. Thus XNEW is XOPT+D after the final iteration. */\n            /*     GNEW holds the gradient of the quadratic model at XOPT+D. It is updated */\n            /*       when D is updated. */\n            /*     XBDI is a working space vector. For I=1,2,...,N, the element XBDI(I) is */\n            /*       set to -1.0, 0.0, or 1.0, the value being nonzero if and only if the */\n            /*       I-th variable has become fixed at a bound, the bound being SL(I) or */\n            /*       SU(I) in the case XBDI(I)=-1.0 or XBDI(I)=1.0, respectively. This */\n            /*       information is accumulated during the construction of XNEW. */\n            /*     The arrays S, HS and HRED are also used for working space. They hold the */\n            /*       current search direction, and the changes in the gradient of Q along S */\n            /*       and the reduced D, respectively, where the reduced D is the same as D, */\n            /*       except that the components of the fixed variables are zero. */\n            /*     DSQ will be set to the square of the length of XNEW-XOPT. */\n            /*     CRVMIN is set to zero if D reaches the trust region boundary. Otherwise */\n            /*       it is set to the least curvature of H that occurs in the conjugate */\n            /*       gradient searches that are not restricted by any constraints. The */\n            /*       value CRVMIN=-1.0D0 is set, however, if all of these searches are */\n            /*       constrained. */\n\n            /*     A version of the truncated conjugate gradient is applied. If a line */\n            /*     search is restricted by a constraint, then the procedure is restarted, */\n            /*     the values of the variables that are at their bounds being fixed. If */\n            /*     the trust region boundary is reached, then further changes may be made */\n            /*     to D, each one being in the two dimensional space that is spanned */\n            /*     by the current D and the gradient of Q at XOPT+D, staying on the trust */\n            /*     region boundary. Termination occurs when the reduction in Q seems to */\n            /*     be close to the greatest reduction that can be achieved. */\n\n            /*     Set some constants. */\n\n            /* Parameter adjustments */\n            xpt_dim1 = npt;\n            xpt_offset = 1 + xpt_dim1;\n            xpt -= xpt_offset;\n            --xopt;\n            --gopt;\n            --hq;\n            --pq;\n            --sl;\n            --su;\n            --xnew;\n            --d__;\n            --gnew;\n            --xbdi;\n            --s;\n            --hs;\n            --hred;\n\n            /* Function Body */\n            half = .5;\n            one = 1.;\n            onemin = -1.;\n            zero = 0.;\n\n            /*     The sign of GOPT(I) gives the sign of the change to the I-th variable */\n            /*     that will reduce Q from its value at XOPT. Thus XBDI(I) shows whether */\n            /*     or not to fix the I-th variable at one of its bounds initially, with */\n            /*     NACT being set to the number of fixed variables. D and GNEW are also */\n            /*     set for the first iteration. DELSQ is the upper bound on the sum of */\n            /*     squares of the free variables. QRED is the reduction in Q so far. */\n\n            iterc = 0;\n            nact = 0;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                xbdi[i__] = zero;\n                if (xopt[i__] <= sl[i__]) {\n                    if (gopt[i__] >= zero) {\n                        xbdi[i__] = onemin;\n                    }\n                } else if (xopt[i__] >= su[i__]) {\n                    if (gopt[i__] <= zero) {\n                        xbdi[i__] = one;\n                    }\n                }\n                if (xbdi[i__] != zero) {\n                    ++nact;\n                }\n                d__[i__] = zero;\n                /* L10: */\n                gnew[i__] = gopt[i__];\n            }\n            delsq = delta * delta;\n            qred = zero;\n            *crvmin = onemin;\n\n            /*     Set the next search direction of the conjugate gradient method. It is */\n            /*     the steepest descent direction initially and when the iterations are */\n            /*     restarted because a variable has just been fixed by a bound, and of */\n            /*     course the components of the fixed variables are zero. ITERMAX is an */\n            /*     upper bound on the indices of the conjugate gradient iterations. */\n\nL20:\n            beta = zero;\nL30:\n            stepsq = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                if (xbdi[i__] != zero) {\n                    s[i__] = zero;\n                } else if (beta == zero) {\n                    s[i__] = -gnew[i__];\n                } else {\n                    s[i__] = beta * s[i__] - gnew[i__];\n                }\n                /* L40: */\n                /* Computing 2nd power */\n                d__1 = s[i__];\n                stepsq += d__1 * d__1;\n            }\n            if (stepsq == zero) {\n                goto L190;\n            }\n            if (beta == zero) {\n                gredsq = stepsq;\n                itermax = iterc + n - nact;\n            }\n            if (gredsq * delsq <= qred * 1e-4 * qred) {\n                goto L190;\n            }\n\n            /*     Multiply the search direction by the second derivative matrix of Q and */\n            /*     calculate some scalars for the choice of steplength. Then set BLEN to */\n            /*     the length of the the step to the trust region boundary and STPLEN to */\n            /*     the steplength, ignoring the simple bounds. */\n\n            goto L210;\nL50:\n            resid = delsq;\n            ds = zero;\n            shs = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                if (xbdi[i__] == zero) {\n                    /* Computing 2nd power */\n                    d__1 = d__[i__];\n                    resid -= d__1 * d__1;\n                    ds += s[i__] * d__[i__];\n                    shs += s[i__] * hs[i__];\n                }\n                /* L60: */\n            }\n            if (resid <= zero) {\n                goto L90;\n            }\n            temp = std::sqrt(stepsq * resid + ds * ds);\n            if (ds < zero) {\n                blen = (temp - ds) / stepsq;\n            } else {\n                blen = resid / (temp + ds);\n            }\n            stplen = blen;\n            if (shs > zero) {\n                /* Computing MIN */\n                d__1 = blen, d__2 = gredsq / shs;\n                stplen = std::min(d__1,d__2);\n            }\n\n            /*     Reduce STPLEN if necessary in order to preserve the simple bounds, */\n            /*     letting IACT be the index of the new constrained variable. */\n\n            iact = 0;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                if (s[i__] != zero) {\n                    xsum = xopt[i__] + d__[i__];\n                    if (s[i__] > zero) {\n                        temp = (su[i__] - xsum) / s[i__];\n                    } else {\n                        temp = (sl[i__] - xsum) / s[i__];\n                    }\n                    if (temp < stplen) {\n                        stplen = temp;\n                        iact = i__;\n                    }\n                }\n                /* L70: */\n            }\n\n            /*     Update CRVMIN, GNEW and D. Set SDEC to the decrease that occurs in Q. */\n\n            sdec = zero;\n            if (stplen > zero) {\n                ++iterc;\n                temp = shs / stepsq;\n                if (iact == 0 && temp > zero) {\n                    *crvmin = std::min(*crvmin,temp);\n                    if (*crvmin == onemin) {\n                        *crvmin = temp;\n                    }\n                }\n                ggsav = gredsq;\n                gredsq = zero;\n                i__1 = n;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    gnew[i__] += stplen * hs[i__];\n                    if (xbdi[i__] == zero) {\n                        /* Computing 2nd power */\n                        d__1 = gnew[i__];\n                        gredsq += d__1 * d__1;\n                    }\n                    /* L80: */\n                    d__[i__] += stplen * s[i__];\n                }\n                /* Computing MAX */\n                d__1 = stplen * (ggsav - half * stplen * shs);\n                sdec = std::max(d__1,zero);\n                qred += sdec;\n            }\n\n            /*     Restart the conjugate gradient method if it has hit a new bound. */\n\n            if (iact > 0) {\n                ++nact;\n                xbdi[iact] = one;\n                if (s[iact] < zero) {\n                    xbdi[iact] = onemin;\n                }\n                /* Computing 2nd power */\n                d__1 = d__[iact];\n                delsq -= d__1 * d__1;\n                if (delsq <= zero) {\n                    goto L90;\n                }\n                goto L20;\n            }\n\n            /*     If STPLEN is less than BLEN, then either apply another conjugate */\n            /*     gradient iteration or RETURN. */\n\n            if (stplen < blen) {\n                if (iterc == itermax) {\n                    goto L190;\n                }\n                if (sdec <= qred * .01) {\n                    goto L190;\n                }\n                beta = gredsq / ggsav;\n                goto L30;\n            }\nL90:\n            *crvmin = zero;\n\n            /*     Prepare for the alternative iteration by calculating some scalars */\n            /*     and by multiplying the reduced D by the second derivative matrix of */\n            /*     Q, where S holds the reduced D in the call of GGMULT. */\n\nL100:\n            if (nact >= n - 1) {\n                goto L190;\n            }\n            dredsq = zero;\n            dredg = zero;\n            gredsq = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                if (xbdi[i__] == zero) {\n                    /* Computing 2nd power */\n                    d__1 = d__[i__];\n                    dredsq += d__1 * d__1;\n                    dredg += d__[i__] * gnew[i__];\n                    /* Computing 2nd power */\n                    d__1 = gnew[i__];\n                    gredsq += d__1 * d__1;\n                    s[i__] = d__[i__];\n                } else {\n                    s[i__] = zero;\n                }\n                /* L110: */\n            }\n            itcsav = iterc;\n            goto L210;\n\n            /*     Let the search direction S be a linear combination of the reduced D */\n            /*     and the reduced G that is orthogonal to the reduced D. */\n\nL120:\n            ++iterc;\n            temp = gredsq * dredsq - dredg * dredg;\n            if (temp <= qred * 1e-4 * qred) {\n                goto L190;\n            }\n            temp = std::sqrt(temp);\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                if (xbdi[i__] == zero) {\n                    s[i__] = (dredg * d__[i__] - dredsq * gnew[i__]) / temp;\n                } else {\n                    s[i__] = zero;\n                }\n                /* L130: */\n            }\n            sredg = -temp;\n\n            /*     By considering the simple bounds on the variables, calculate an upper */\n            /*     bound on the tangent of half the angle of the alternative iteration, */\n            /*     namely ANGBD, except that, if already a free variable has reached a */\n            /*     bound, there is a branch back to label 100 after fixing that variable. */\n\n            angbd = one;\n            iact = 0;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                if (xbdi[i__] == zero) {\n                    tempa = xopt[i__] + d__[i__] - sl[i__];\n                    tempb = su[i__] - xopt[i__] - d__[i__];\n                    if (tempa <= zero) {\n                        ++nact;\n                        xbdi[i__] = onemin;\n                        goto L100;\n                    } else if (tempb <= zero) {\n                        ++nact;\n                        xbdi[i__] = one;\n                        goto L100;\n                    }\n                    /* Computing 2nd power */\n                    d__1 = d__[i__];\n                    /* Computing 2nd power */\n                    d__2 = s[i__];\n                    ssq = d__1 * d__1 + d__2 * d__2;\n                    /* Computing 2nd power */\n                    d__1 = xopt[i__] - sl[i__];\n                    temp = ssq - d__1 * d__1;\n                    if (temp > zero) {\n                        temp = std::sqrt(temp) - s[i__];\n                        if (angbd * temp > tempa) {\n                            angbd = tempa / temp;\n                            iact = i__;\n                            xsav = onemin;\n                        }\n                    }\n                    /* Computing 2nd power */\n                    d__1 = su[i__] - xopt[i__];\n                    temp = ssq - d__1 * d__1;\n                    if (temp > zero) {\n                        temp = std::sqrt(temp) + s[i__];\n                        if (angbd * temp > tempb) {\n                            angbd = tempb / temp;\n                            iact = i__;\n                            xsav = one;\n                        }\n                    }\n                }\n                /* L140: */\n            }\n\n            /*     Calculate HHD and some curvatures for the alternative iteration. */\n\n            goto L210;\nL150:\n            shs = zero;\n            dhs = zero;\n            dhd = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                if (xbdi[i__] == zero) {\n                    shs += s[i__] * hs[i__];\n                    dhs += d__[i__] * hs[i__];\n                    dhd += d__[i__] * hred[i__];\n                }\n                /* L160: */\n            }\n\n            /*     Seek the greatest reduction in Q for a range of equally spaced values */\n            /*     of ANGT in [0,ANGBD], where ANGT is the tangent of half the angle of */\n            /*     the alternative iteration. */\n\n            redmax = zero;\n            isav = 0;\n            redsav = zero;\n            iu = (integer) (angbd * 17. + 3.1);\n            i__1 = iu;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                angt = angbd * (doublereal) i__ / (doublereal) iu;\n                sth = (angt + angt) / (one + angt * angt);\n                temp = shs + angt * (angt * dhd - dhs - dhs);\n                rednew = sth * (angt * dredg - sredg - half * sth * temp);\n                if (rednew > redmax) {\n                    redmax = rednew;\n                    isav = i__;\n                    rdprev = redsav;\n                } else if (i__ == isav + 1) {\n                    rdnext = rednew;\n                }\n                /* L170: */\n                redsav = rednew;\n            }\n\n            /*     Return if the reduction is zero. Otherwise, set the sine and cosine */\n            /*     of the angle of the alternative iteration, and calculate SDEC. */\n\n            if (isav == 0) {\n                goto L190;\n            }\n            if (isav < iu) {\n                temp = (rdnext - rdprev) / (redmax + redmax - rdprev - rdnext);\n                angt = angbd * ((doublereal) isav + half * temp) / (doublereal) iu;\n            }\n            cth = (one - angt * angt) / (one + angt * angt);\n            sth = (angt + angt) / (one + angt * angt);\n            temp = shs + angt * (angt * dhd - dhs - dhs);\n            sdec = sth * (angt * dredg - sredg - half * sth * temp);\n            if (sdec <= zero) {\n                goto L190;\n            }\n\n            /*     Update GNEW, D and HRED. If the angle of the alternative iteration */\n            /*     is restricted by a bound on a free variable, that variable is fixed */\n            /*     at the bound. */\n\n            dredg = zero;\n            gredsq = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                gnew[i__] = gnew[i__] + (cth - one) * hred[i__] + sth * hs[i__];\n                if (xbdi[i__] == zero) {\n                    d__[i__] = cth * d__[i__] + sth * s[i__];\n                    dredg += d__[i__] * gnew[i__];\n                    /* Computing 2nd power */\n                    d__1 = gnew[i__];\n                    gredsq += d__1 * d__1;\n                }\n                /* L180: */\n                hred[i__] = cth * hred[i__] + sth * hs[i__];\n            }\n            qred += sdec;\n            if (iact > 0 && isav == iu) {\n                ++nact;\n                xbdi[iact] = xsav;\n                goto L100;\n            }\n\n            /*     If SDEC is sufficiently small, then RETURN after setting XNEW to */\n            /*     XOPT+D, giving careful attention to the bounds. */\n\n            if (sdec > qred * .01) {\n                goto L120;\n            }\nL190:\n            *dsq = zero;\n            i__1 = n;\n            for (i__ = 1; i__ <= i__1; ++i__) {\n                /* Computing MAX */\n                /* Computing MIN */\n                d__3 = xopt[i__] + d__[i__], d__4 = su[i__];\n                d__1 = std::min(d__3,d__4), d__2 = sl[i__];\n                xnew[i__] = std::max(d__1,d__2);\n                if (xbdi[i__] == onemin) {\n                    xnew[i__] = sl[i__];\n                }\n                if (xbdi[i__] == one) {\n                    xnew[i__] = su[i__];\n                }\n                d__[i__] = xnew[i__] - xopt[i__];\n                /* L200: */\n                /* Computing 2nd power */\n                d__1 = d__[i__];\n                *dsq += d__1 * d__1;\n            }\n            return;\n            /*     The following instructions multiply the current S-vector by the second */\n            /*     derivative matrix of the quadratic model, putting the product in HS. */\n            /*     They are reached from three different parts of the software above and */\n            /*     they can be regarded as an external subroutine. */\n\nL210:\n            ih = 0;\n            i__1 = n;\n            for (j = 1; j <= i__1; ++j) {\n                hs[j] = zero;\n                i__2 = j;\n                for (i__ = 1; i__ <= i__2; ++i__) {\n                    ++ih;\n                    if (i__ < j) {\n                        hs[j] += hq[ih] * s[i__];\n                    }\n                    /* L220: */\n                    hs[i__] += hq[ih] * s[j];\n                }\n            }\n            i__2 = npt;\n            for (k = 1; k <= i__2; ++k) {\n                if (pq[k] != zero) {\n                    temp = zero;\n                    i__1 = n;\n                    for (j = 1; j <= i__1; ++j) {\n                        /* L230: */\n                        temp += xpt[k + j * xpt_dim1] * s[j];\n                    }\n                    temp *= pq[k];\n                    i__1 = n;\n                    for (i__ = 1; i__ <= i__1; ++i__) {\n                        /* L240: */\n                        hs[i__] += temp * xpt[k + i__ * xpt_dim1];\n                    }\n                }\n                /* L250: */\n            }\n            if (*crvmin != zero) {\n                goto L50;\n            }\n            if (iterc > itcsav) {\n                goto L150;\n            }\n            i__2 = n;\n            for (i__ = 1; i__ <= i__2; ++i__) {\n                /* L260: */\n                hred[i__] = hs[i__];\n            }\n            goto L120;\n        } /* trsbox_ */\n\n    // ----------------------------------------------------------------------------------------\n\n        void update_(\n            const integer n,\n            const integer npt,\n            doublereal *bmat, \n            doublereal *zmat,\n            const integer ndim,\n            doublereal *vlag,\n            const doublereal beta, \n            const doublereal denom,\n            const integer knew,\n            doublereal *w\n        ) const\n        {\n            /* System generated locals */\n            integer bmat_dim1, bmat_offset, zmat_dim1, zmat_offset, i__1, i__2;\n            doublereal d__1, d__2, d__3;\n\n            /* Local variables */\n            integer i__, j, k, jp;\n            doublereal one, tau, temp;\n            integer nptm;\n            doublereal zero, alpha, tempa, tempb, ztest;\n\n\n            /*     The arrays BMAT and ZMAT are updated, as required by the new position */\n            /*     of the interpolation point that has the index KNEW. The vector VLAG has */\n            /*     N+NPT components, set on entry to the first NPT and last N components */\n            /*     of the product Hw in equation (4.11) of the Powell (2006) paper on */\n            /*     NEWUOA. Further, BETA is set on entry to the value of the parameter */\n            /*     with that name, and DENOM is set to the denominator of the updating */\n            /*     formula. Elements of ZMAT may be treated as zero if their moduli are */\n            /*     at most ZTEST. The first NDIM elements of W are used for working space. */\n\n            /*     Set some constants. */\n\n            /* Parameter adjustments */\n            zmat_dim1 = npt;\n            zmat_offset = 1 + zmat_dim1;\n            zmat -= zmat_offset;\n            bmat_dim1 = ndim;\n            bmat_offset = 1 + bmat_dim1;\n            bmat -= bmat_offset;\n            --vlag;\n            --w;\n\n            /* Function Body */\n            one = 1.;\n            zero = 0.;\n            nptm = npt - n - 1;\n            ztest = zero;\n            i__1 = npt;\n            for (k = 1; k <= i__1; ++k) {\n                i__2 = nptm;\n                for (j = 1; j <= i__2; ++j) {\n                    /* L10: */\n                    /* Computing MAX */\n                    d__2 = ztest, d__3 = (d__1 = zmat[k + j * zmat_dim1], std::abs(d__1));\n                    ztest = std::max(d__2,d__3);\n                }\n            }\n            ztest *= 1e-20;\n\n            /*     Apply the rotations that put zeros in the KNEW-th row of ZMAT. */\n\n            i__2 = nptm;\n            for (j = 2; j <= i__2; ++j) {\n                if ((d__1 = zmat[knew + j * zmat_dim1], std::abs(d__1)) > ztest) {\n                    /* Computing 2nd power */\n                    d__1 = zmat[knew + zmat_dim1];\n                    /* Computing 2nd power */\n                    d__2 = zmat[knew + j * zmat_dim1];\n                    temp = std::sqrt(d__1 * d__1 + d__2 * d__2);\n                    tempa = zmat[knew + zmat_dim1] / temp;\n                    tempb = zmat[knew + j * zmat_dim1] / temp;\n                    i__1 = npt;\n                    for (i__ = 1; i__ <= i__1; ++i__) {\n                        temp = tempa * zmat[i__ + zmat_dim1] + tempb * zmat[i__ + j * \n                            zmat_dim1];\n                        zmat[i__ + j * zmat_dim1] = tempa * zmat[i__ + j * zmat_dim1] \n                            - tempb * zmat[i__ + zmat_dim1];\n                        /* L20: */\n                        zmat[i__ + zmat_dim1] = temp;\n                    }\n                }\n                zmat[knew + j * zmat_dim1] = zero;\n                /* L30: */\n            }\n\n            /*     Put the first NPT components of the KNEW-th column of HLAG into W, */\n            /*     and calculate the parameters of the updating formula. */\n\n            i__2 = npt;\n            for (i__ = 1; i__ <= i__2; ++i__) {\n                w[i__] = zmat[knew + zmat_dim1] * zmat[i__ + zmat_dim1];\n                /* L40: */\n            }\n            alpha = w[knew];\n            tau = vlag[knew];\n            vlag[knew] -= one;\n\n            /*     Complete the updating of ZMAT. */\n\n            temp = std::sqrt(denom);\n            tempb = zmat[knew + zmat_dim1] / temp;\n            tempa = tau / temp;\n            i__2 = npt;\n            for (i__ = 1; i__ <= i__2; ++i__) {\n                /* L50: */\n                zmat[i__ + zmat_dim1] = tempa * zmat[i__ + zmat_dim1] - tempb * vlag[\n                    i__];\n            }\n\n            /*     Finally, update the matrix BMAT. */\n\n            i__2 = n;\n            for (j = 1; j <= i__2; ++j) {\n                jp = npt + j;\n                w[jp] = bmat[knew + j * bmat_dim1];\n                tempa = (alpha * vlag[jp] - tau * w[jp]) / denom;\n                tempb = (-(beta) * w[jp] - tau * vlag[jp]) / denom;\n                i__1 = jp;\n                for (i__ = 1; i__ <= i__1; ++i__) {\n                    bmat[i__ + j * bmat_dim1] = bmat[i__ + j * bmat_dim1] + tempa * \n                        vlag[i__] + tempb * w[i__];\n                    if (i__ > npt) {\n                        bmat[jp + (i__ - npt) * bmat_dim1] = bmat[i__ + j * \n                            bmat_dim1];\n                    }\n                    /* L60: */\n                }\n            }\n        } /* update_ */\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct,\n        typename T, \n        typename U\n        >\n    double find_min_bobyqa (\n        const funct& f,\n        T& x,\n        long npt,\n        const U& x_lower,\n        const U& x_upper,\n        const double rho_begin,\n        const double rho_end,\n        const long max_f_evals\n    ) \n    {\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        // check the requirements.  Also split the assert up so that the error message isn't huge.\n        DLIB_CASSERT(is_col_vector(x) && is_col_vector(x_lower) && is_col_vector(x_upper) &&\n                    x.size() == x_lower.size() && x_lower.size() == x_upper.size() &&\n                    x.size() > 1 && max_f_evals > 1,\n            \"\\tvoid find_min_bobyqa()\"\n            << \"\\n\\t Invalid arguments have been given to this function\"\n            << \"\\n\\t is_col_vector(x):       \" << is_col_vector(x) \n            << \"\\n\\t is_col_vector(x_lower): \" << is_col_vector(x_lower) \n            << \"\\n\\t is_col_vector(x_upper): \" << is_col_vector(x_upper) \n            << \"\\n\\t x.size():               \" << x.size()\n            << \"\\n\\t x_lower.size():         \" << x_lower.size()\n            << \"\\n\\t x_upper.size():         \" << x_upper.size()\n            << \"\\n\\t max_f_evals:            \" << max_f_evals\n        );\n\n        DLIB_CASSERT(x.size() + 2 <= npt && npt <= (x.size()+1)*(x.size()+2)/2 &&\n                    0 < rho_end && rho_end < rho_begin &&\n                    min(x_upper - x_lower) > 2*rho_begin &&\n                    min(x - x_lower) >= 0 && min(x_upper - x) >= 0,\n            \"\\tvoid find_min_bobyqa()\"\n            << \"\\n\\t Invalid arguments have been given to this function\"\n            << \"\\n\\t ntp in valid range: \" << (x.size() + 2 <= npt && npt <= (x.size()+1)*(x.size()+2)/2)\n            << \"\\n\\t npt:                \" << npt \n            << \"\\n\\t rho_begin:          \" << rho_begin \n            << \"\\n\\t rho_end:            \" << rho_end\n            << \"\\n\\t min(x_upper - x_lower) > 2*rho_begin:           \" << (min(x_upper - x_lower) > 2*rho_begin)\n            << \"\\n\\t min(x - x_lower) >= 0 && min(x_upper - x) >= 0: \" << (min(x - x_lower) >= 0 && min(x_upper - x) >= 0)\n        );\n\n\n        bobyqa_implementation impl;\n        return impl.find_min(f, x, npt, x_lower, x_upper, rho_begin, rho_end, max_f_evals);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct,\n        typename T, \n        typename U\n        >\n    double find_max_bobyqa (\n        const funct& f,\n        T& x,\n        long npt,\n        const U& x_lower,\n        const U& x_upper,\n        const double rho_begin,\n        const double rho_end,\n        const long max_f_evals\n    ) \n    {\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        return -find_min_bobyqa(negate_function(f), x, npt, x_lower, x_upper, rho_begin, rho_end, max_f_evals);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_BOBYQA_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_bobyqa_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATIOn_BOBYQA_ABSTRACT_Hh_\n#ifdef DLIB_OPTIMIZATIOn_BOBYQA_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n\n// ----------------------------------------------------------------------------------------\n\n/*\n    This file defines the dlib interface to the BOBYQA software developed by M.J.D Powell.\n    BOBYQA is a method for optimizing a function in the absence of derivative information.  \n    Powell described it as a method that seeks the least value of a function of many \n    variables, by applying a trust region method that forms quadratic models by \n    interpolation.  There is usually some freedom in the interpolation conditions, \n    which is taken up by minimizing the Frobenius norm of the change to the second \n    derivative of the model, beginning with the zero matrix. The values of the variables \n    are constrained by upper and lower bounds.  \n\n\n    The following paper, published in 2009 by Powell, describes the\n    detailed working of the BOBYQA algorithm.  \n\n        The BOBYQA algorithm for bound constrained optimization \n        without derivatives by M.J.D. Powell\n*/\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    class bobyqa_failure : public error;\n    /*!\n        This is the exception class used by the functions defined in this file.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct,\n        typename T, \n        typename U\n        >\n    double find_min_bobyqa (\n        const funct& f,\n        T& x,\n        long npt,\n        const U& x_lower,\n        const U& x_upper,\n        const double rho_begin,\n        const double rho_end,\n        const long max_f_evals\n    );\n    /*!\n        requires\n            - f(x) must be a valid expression that evaluates to a double\n            - is_col_vector(x) == true\n            - is_col_vector(x_lower) == true\n            - is_col_vector(x_upper) == true\n            - x.size() == x_lower.size() == x_upper.size()\n            - x.size() > 1\n            - x.size() + 2 <= npt <= (x.size()+1)*(x.size()+2)/2\n            - 0 < rho_end < rho_begin\n            - min(x_upper - x_lower) > 2*rho_begin\n              (i.e. the lower and upper bounds on each x element must be larger than 2*rho_begin)\n            - min(x - x_lower) >= 0 && min(x_upper - x) >= 0\n              (i.e. the given x should be within the bounds defined by x_lower and x_upper)\n            - max_f_evals > 1\n        ensures\n            - Performs a constrained minimization of the function f() starting from \n              the initial point x.  \n            - The BOBYQA algorithm uses a number of interpolating points to perform its\n              work.  The npt argument controls how many points get used.  Typically,\n              a good value to use is 2*x.size()+1.\n            - #x == the value of x (within the bounds defined by x_lower and x_upper) that \n              was found to minimize f().  More precisely:\n                - min(#x - x_lower) >= 0 && min(x_upper - #x) >= 0\n            - returns f(#x). \n            - rho_begin and rho_end are used as the initial and final values of a trust \n              region radius.  Typically, rho_begin should be about one tenth of the greatest \n              expected change to a variable, while rho_end should indicate the accuracy that \n              is required in the final values of the variables. \n        throws\n            - bobyqa_failure\n                This exception is thrown if the algorithm is unable to make progress towards\n                solving the problem.  This may occur because the algorithm detects excessive\n                numerical errors or because max_f_evals of f() have occurred without reaching\n                convergence.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct,\n        typename T, \n        typename U\n        >\n    double find_max_bobyqa (\n        const funct& f,\n        T& x,\n        long npt,\n        const U& x_lower,\n        const U& x_upper,\n        const double rho_begin,\n        const double rho_end,\n        const long max_f_evals\n    );\n    /*!\n        This function is identical to the find_min_bobyqa() routine defined above\n        except that it negates the f() function before performing optimization.  \n        Thus this function will attempt to find the maximizer of f() rather than \n        the minimizer.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_BOBYQA_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_least_squares.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATION_LEAST_SQuARES_H_h_\n#define DLIB_OPTIMIZATION_LEAST_SQuARES_H_h_\n\n#include \"../matrix.h\"\n#include \"optimization_trust_region.h\"\n#include \"optimization_least_squares_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename column_vector_type,\n        typename funct_type,\n        typename funct_der_type,\n        typename vector_type\n        >\n    class least_squares_function_model \n    {\n    public:\n        least_squares_function_model (\n            const funct_type& f_,\n            const funct_der_type& der_,\n            const vector_type& list_\n        ) : f(f_), der(der_), list(list_) \n        {\n            S = 0;\n            last_f = 0;\n            last_f2 = 0;\n\n            r.set_size(list.size(),1);\n        }\n\n        const funct_type& f;\n        const funct_der_type& der;\n        const vector_type& list;\n\n        typedef typename column_vector_type::type type;\n        typedef typename column_vector_type::mem_manager_type mem_manager_type;\n        typedef typename column_vector_type::layout_type layout_type;\n        const static long NR = column_vector_type::NR;\n\n        typedef column_vector_type column_vector;\n        typedef matrix<type,NR,NR,mem_manager_type,layout_type> general_matrix;\n\n\n        type operator() ( \n            const column_vector& x\n        ) const\n        {\n            type result = 0;\n            for (long i = 0; i < list.size(); ++i)\n            {\n                const type temp = f(list(i), x);\n                // save the residual for later\n                r(i) = temp;\n                result += temp*temp;\n            }\n\n            last_f = 0.5*result;\n            return 0.5*result;\n        }\n\n        void get_derivative_and_hessian (\n            const column_vector& x,\n            column_vector& d,\n            general_matrix& h\n        ) const\n        {\n            J.set_size(list.size(), x.size());\n\n            // compute the Jacobian\n            for (long i = 0; i < list.size(); ++i)\n            {\n                set_rowm(J,i) = trans(der(list(i), x));\n            }\n\n            // Compute the Levenberg-Marquardt gradient and hessian\n            d = trans(J)*r;\n            h = trans(J)*J;\n\n            if (S.size() == 0)\n            {\n                S.set_size(x.size(), x.size());\n                S = 0;\n            }\n\n            // If this isn't the first iteration then check if using\n            // a quasi-newton update helps things.\n            if (last_r.size() != 0)\n            {\n\n                s = x - last_x;\n                y = d - last_d;\n                yy = d - trans(last_J)*r;\n\n                const type ys = trans(y)*s;\n                vtemp = yy - S*s;\n                const type temp2 = std::abs(trans(s)*S*s);\n                type scale = (temp2 != 0) ? std::min<type>(1, std::abs(dot(s,yy))/temp2)  :  1;\n\n                if (ys != 0)\n                    S = scale*S + (vtemp*trans(y) + y*trans(vtemp))/(ys) - dot(vtemp,s)/ys/ys*y*trans(y);\n                else\n                    S *= scale;\n\n                // check how well both the models fit the last change we saw in f()\n                const type measured_delta = last_f2 - last_f;\n                s = -s;\n                const type h_predicted_delta = 0.5*trans(s)*h*s + trans(d)*s;\n                const type s_predicted_delta = 0.5*trans(s)*(h+S)*s + trans(d)*s;\n\n                const type h_error = std::abs((h_predicted_delta/measured_delta) - 1);\n                const type s_error = std::abs((s_predicted_delta/measured_delta) - 1);\n\n                if (s_error < h_error && h_error > 0.01)\n                {\n                    h += make_symmetric(S);\n                }\n                else if (s_error > 10)\n                {\n                    S = 0;\n                }\n\n                // put r into last_r\n                r.swap(last_r);\n            }\n            else\n            {\n                // put r into last_r\n                last_r = r;\n            }\n\n            J.swap(last_J);\n            last_x = x;\n            last_d = d;\n\n            last_f2 = last_f;\n        }\n\n        mutable type last_f;   // value of function we saw in last operator()\n        mutable type last_f2;  // value of last_f we saw in get_derivative_and_hessian()\n        mutable matrix<type,0,1,mem_manager_type,layout_type> r;\n        mutable column_vector vtemp;\n        mutable column_vector s, y, yy;\n\n        mutable general_matrix S;\n        mutable column_vector last_x;\n        mutable column_vector last_d;\n        mutable matrix<type,0,1,mem_manager_type,layout_type> last_r;\n        mutable matrix<type,0,NR,mem_manager_type,layout_type> last_J;\n        mutable matrix<type,0,NR,mem_manager_type,layout_type> J;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename column_vector_type,\n        typename funct_type,\n        typename funct_der_type,\n        typename vector_type\n        >\n    least_squares_function_model<column_vector_type,funct_type,funct_der_type,vector_type> least_squares_model (\n        const funct_type& f,\n        const funct_der_type& der,\n        const vector_type& list\n    )\n    {\n        return least_squares_function_model<column_vector_type,funct_type,funct_der_type,vector_type>(f,der,list);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stop_strategy_type,\n        typename funct_type,\n        typename funct_der_type,\n        typename vector_type,\n        typename T\n        >\n    double solve_least_squares (\n        stop_strategy_type stop_strategy,\n        const funct_type& f,\n        const funct_der_type& der,\n        const vector_type& list,\n        T& x, \n        double radius = 1\n    )\n    {\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(mat(list)) && list.size() > 0 && \n                    is_col_vector(x) && radius > 0,\n            \"\\t double solve_least_squares()\"\n            << \"\\n\\t invalid arguments were given to this function\"\n            << \"\\n\\t is_vector(list):  \" << is_vector(mat(list)) \n            << \"\\n\\t list.size():      \" << list.size() \n            << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n            << \"\\n\\t radius:           \" << radius\n            );\n\n        return find_min_trust_region(stop_strategy,\n                                     least_squares_model<T>(f, der, mat(list)), \n                                     x, \n                                     radius);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename column_vector_type,\n        typename funct_type,\n        typename funct_der_type,\n        typename vector_type\n        >\n    class least_squares_lm_function_model \n    {\n    public:\n        least_squares_lm_function_model (\n            const funct_type& f_,\n            const funct_der_type& der_,\n            const vector_type& list_\n        ) : f(f_), der(der_), list(list_) \n        {\n            r.set_size(list.size(),1);\n        }\n\n        const funct_type& f;\n        const funct_der_type& der;\n        const vector_type& list;\n\n        typedef typename column_vector_type::type type;\n        typedef typename column_vector_type::mem_manager_type mem_manager_type;\n        typedef typename column_vector_type::layout_type layout_type;\n        const static long NR = column_vector_type::NR;\n\n        typedef column_vector_type column_vector;\n        typedef matrix<type,NR,NR,mem_manager_type,layout_type> general_matrix;\n\n        mutable matrix<type,0,1,mem_manager_type,layout_type> r;\n        mutable column_vector vtemp;\n\n        type operator() ( \n            const column_vector& x\n        ) const\n        {\n            type result = 0;\n            for (long i = 0; i < list.size(); ++i)\n            {\n                const type temp = f(list(i), x);\n                // save the residual for later\n                r(i) = temp;\n                result += temp*temp;\n            }\n\n            return 0.5*result;\n        }\n\n        void get_derivative_and_hessian (\n            const column_vector& x,\n            column_vector& d,\n            general_matrix& h\n        ) const\n        {\n            d = 0;\n            h = 0;\n            for (long i = 0; i < list.size(); ++i)\n            {\n                vtemp = der(list(i), x); \n                d += r(i)*vtemp;\n                h += vtemp*trans(vtemp);\n            }\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename column_vector_type,\n        typename funct_type,\n        typename funct_der_type,\n        typename vector_type\n        >\n    least_squares_lm_function_model<column_vector_type,funct_type,funct_der_type,vector_type> least_squares_lm_model (\n        const funct_type& f,\n        const funct_der_type& der,\n        const vector_type& list\n    )\n    {\n        return least_squares_lm_function_model<column_vector_type,funct_type,funct_der_type,vector_type>(f,der,list);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stop_strategy_type,\n        typename funct_type,\n        typename funct_der_type,\n        typename vector_type,\n        typename T\n        >\n    double solve_least_squares_lm (\n        stop_strategy_type stop_strategy,\n        const funct_type& f,\n        const funct_der_type& der,\n        const vector_type& list,\n        T& x, \n        double radius = 1\n    )\n    {\n        // The starting point (i.e. x) must be a column vector.  \n        COMPILE_TIME_ASSERT(T::NC <= 1);\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(mat(list)) && list.size() > 0 && \n                    is_col_vector(x) && radius > 0,\n            \"\\t double solve_least_squares_lm()\"\n            << \"\\n\\t invalid arguments were given to this function\"\n            << \"\\n\\t is_vector(list):  \" << is_vector(mat(list)) \n            << \"\\n\\t list.size():      \" << list.size() \n            << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n            << \"\\n\\t radius:           \" << radius\n            );\n\n        return find_min_trust_region(stop_strategy,\n                                     least_squares_lm_model<T>(f, der, mat(list)), \n                                     x, \n                                     radius);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATION_LEAST_SQuARES_H_h_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_least_squares_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATIOn_LEAST_SQUARES_ABSTRACT_\n#ifdef DLIB_OPTIMIZATIOn_LEAST_SQUARES_ABSTRACT_\n\n#include \"../matrix/matrix_abstract.h\"\n#include \"optimization_trust_region_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stop_strategy_type,\n        typename funct_type,\n        typename funct_der_type,\n        typename vector_type,\n        typename T\n        >\n    double solve_least_squares (\n        stop_strategy_type stop_strategy,\n        const funct_type& f,\n        const funct_der_type& der,\n        const vector_type& list,\n        T& x, \n        double radius = 1\n    );\n    /*!\n        requires\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - list == a matrix or something convertible to a matrix via mat()\n              such as a std::vector.\n            - is_vector(list) == true\n            - list.size() > 0\n            - is_col_vector(x) == true\n            - radius > 0\n            - for all valid i:\n                - f(list(i),x) must be a valid expression that evaluates to a floating point value.\n                - der(list(i),x) must be a valid expression that evaluates to the derivative of f(list(i),x) \n                  with respect to x. This derivative must take the form of a column vector.\n        ensures\n            - This function performs an unconstrained minimization of the least squares\n              function g(x) defined by:\n                - g(x) = sum over all i: 0.5*pow( f(list(i),x), 2 )\n            - This method combines the Levenberg-Marquardt method with a quasi-newton method\n              for approximating the second order terms of the hessian and is appropriate for\n              large residual problems (i.e. problems where the f() function isn't driven to 0).  \n              In particular, it uses the method of Dennis, Gay, and Welsch as described in \n              Numerical Optimization by Nocedal and Wright (second edition).\n            - Since this is a trust region algorithm, the radius parameter defines the initial \n              size of the trust region.  \n            - The function is optimized until stop_strategy decides that an acceptable \n              point has been found or the trust region subproblem fails to make progress.\n            - #x == the value of x that was found to minimize g()\n            - returns g(#x). \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stop_strategy_type,\n        typename funct_type,\n        typename funct_der_type,\n        typename vector_type,\n        typename T\n        >\n    double solve_least_squares_lm (\n        stop_strategy_type stop_strategy,\n        const funct_type& f,\n        const funct_der_type& der,\n        const vector_type& list,\n        T& x, \n        double radius = 1\n    );\n    /*!\n        requires\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - list == a matrix or something convertible to a matrix via mat()\n              such as a std::vector.\n            - is_vector(list) == true\n            - list.size() > 0\n            - is_col_vector(x) == true\n            - radius > 0\n            - for all valid i:\n                - f(list(i),x) must be a valid expression that evaluates to a floating point value.\n                - der(list(i),x) must be a valid expression that evaluates to the derivative of f(list(i),x) \n                  with respect to x.  This derivative must take the form of a column vector.\n        ensures\n            - This function performs an unconstrained minimization of the least squares\n              function g(x) defined by:\n                - g(x) = sum over all i: 0.5*pow( f(list(i),x), 2 )\n            - This method implements a plain Levenberg-Marquardt approach for approximating\n              the hessian of g().  Therefore, it is most appropriate for small residual problems\n              (i.e. problems where f() goes to 0 at the solution).\n            - Since this is a trust region algorithm, the radius parameter defines the initial \n              size of the trust region.  \n            - The function is optimized until stop_strategy decides that an acceptable \n              point has been found or the trust region subproblem fails to make progress.\n            - #x == the value of x that was found to minimize g()\n            - returns g(#x). \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_LEAST_SQUARES_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_line_search.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATIOn_LINE_SEARCH_H_\n#define DLIB_OPTIMIZATIOn_LINE_SEARCH_H_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"optimization_line_search_abstract.h\"\n#include <utility>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct, typename T>\n    class line_search_funct \n    {\n    public:\n        line_search_funct(const funct& f_, const T& start_, const T& direction_) \n            : f(f_),start(start_), direction(direction_), matrix_r(0), scalar_r(0)\n        {}\n\n        line_search_funct(const funct& f_, const T& start_, const T& direction_, T& r) \n            : f(f_),start(start_), direction(direction_), matrix_r(&r), scalar_r(0)\n        {}\n\n        line_search_funct(const funct& f_, const T& start_, const T& direction_, double& r) \n            : f(f_),start(start_), direction(direction_), matrix_r(0), scalar_r(&r)\n        {}\n\n        double operator()(const double& x) const\n        {\n            return get_value(f(start + x*direction));\n        }\n\n    private:\n\n        double get_value (const double& r) const\n        {\n            // save a copy of this value for later\n            if (scalar_r)\n                *scalar_r = r;\n\n            return r;\n        }\n\n        template <typename U>\n        double get_value (const U& r) const\n        {\n            // U should be a matrix type\n            COMPILE_TIME_ASSERT(is_matrix<U>::value);\n\n            // save a copy of this value for later\n            if (matrix_r)\n                *matrix_r = r;\n\n            return dot(r,direction);\n        }\n\n        const funct& f;\n        const T& start;\n        const T& direction;\n        T* matrix_r;\n        double* scalar_r;\n    };\n\n    template <typename funct, typename T>\n    const line_search_funct<funct,T> make_line_search_function(const funct& f, const T& start, const T& direction) \n    { \n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        DLIB_ASSERT (\n            is_col_vector(start) && is_col_vector(direction) && start.size() == direction.size(),\n            \"\\tline_search_funct make_line_search_function(f,start,direction)\"\n            << \"\\n\\tYou have to supply column vectors to this function\"\n            << \"\\n\\tstart.nc():     \" << start.nc()\n            << \"\\n\\tdirection.nc(): \" << direction.nc()\n            << \"\\n\\tstart.nr():     \" << start.nr()\n            << \"\\n\\tdirection.nr(): \" << direction.nr()\n        );\n        return line_search_funct<funct,T>(f,start,direction); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct, typename T>\n    const line_search_funct<funct,T> make_line_search_function(const funct& f, const T& start, const T& direction, double& f_out) \n    { \n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        DLIB_ASSERT (\n            is_col_vector(start) && is_col_vector(direction) && start.size() == direction.size(),\n            \"\\tline_search_funct make_line_search_function(f,start,direction)\"\n            << \"\\n\\tYou have to supply column vectors to this function\"\n            << \"\\n\\tstart.nc():     \" << start.nc()\n            << \"\\n\\tdirection.nc(): \" << direction.nc()\n            << \"\\n\\tstart.nr():     \" << start.nr()\n            << \"\\n\\tdirection.nr(): \" << direction.nr()\n        );\n        return line_search_funct<funct,T>(f,start,direction, f_out); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct, typename T>\n    const line_search_funct<funct,T> make_line_search_function(const funct& f, const T& start, const T& direction, T& grad_out) \n    { \n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        DLIB_ASSERT (\n            is_col_vector(start) && is_col_vector(direction) && start.size() == direction.size(),\n            \"\\tline_search_funct make_line_search_function(f,start,direction)\"\n            << \"\\n\\tYou have to supply column vectors to this function\"\n            << \"\\n\\tstart.nc():     \" << start.nc()\n            << \"\\n\\tdirection.nc(): \" << direction.nc()\n            << \"\\n\\tstart.nr():     \" << start.nr()\n            << \"\\n\\tdirection.nr(): \" << direction.nr()\n        );\n        return line_search_funct<funct,T>(f,start,direction,grad_out); \n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    inline double poly_min_extrap (\n        double f0,\n        double d0,\n        double f1,\n        double d1\n    )\n    {\n        const double n = 3*(f1 - f0) - 2*d0 - d1;\n        const double e = d0 + d1 - 2*(f1 - f0);\n\n\n        // find the minimum of the derivative of the polynomial\n\n        double temp = std::max(n*n - 3*e*d0,0.0);\n\n        if (temp < 0)\n            return 0.5;\n\n        temp = std::sqrt(temp);\n\n        if (std::abs(e) <= std::numeric_limits<double>::epsilon())\n            return 0.5;\n\n        // figure out the two possible min values\n        double x1 = (temp - n)/(3*e);\n        double x2 = -(temp + n)/(3*e);\n\n        // compute the value of the interpolating polynomial at these two points\n        double y1 = f0 + d0*x1 + n*x1*x1 + e*x1*x1*x1;\n        double y2 = f0 + d0*x2 + n*x2*x2 + e*x2*x2*x2;\n\n        // pick the best point\n        double x;\n        if (y1 < y2)\n            x = x1;\n        else\n            x = x2;\n\n        // now make sure the minimum is within the allowed range of (0,1) \n        return put_in_range(0,1,x);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double poly_min_extrap (\n        double f0,\n        double d0,\n        double f1\n    )\n    {\n        const double temp = 2*(f1 - f0 - d0);\n        if (std::abs(temp) <= d0*std::numeric_limits<double>::epsilon())\n            return 0.5;\n\n        const double alpha = -d0/temp;\n\n        // now make sure the minimum is within the allowed range of (0,1) \n        return put_in_range(0,1,alpha);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double poly_min_extrap (\n        double f0,\n        double d0,\n        double x1,\n        double f_x1,\n        double x2,\n        double f_x2\n    )\n    {\n        DLIB_ASSERT(0 < x1 && x1 < x2,\"Invalid inputs were given to this function\");\n        // The contents of this function follow the equations described on page 58 of the\n        // book Numerical Optimization by Nocedal and Wright, second edition.\n        matrix<double,2,2> m;\n        matrix<double,2,1> v;\n\n        const double aa2 = x2*x2;\n        const double aa1 = x1*x1;\n        m =  aa2,       -aa1,\n            -aa2*x2, aa1*x1;   \n        v = f_x1 - f0 - d0*x1,\n            f_x2 - f0 - d0*x2;\n\n\n        double temp = aa2*aa1*(x1-x2);\n\n        // just take a guess if this happens\n        if (temp == 0)\n        {\n            return x1/2.0;\n        }\n\n        matrix<double,2,1> temp2;\n        temp2 = m*v/temp;\n        const double a = temp2(0);\n        const double b = temp2(1);\n\n        temp = b*b - 3*a*d0;\n        if (temp < 0 || a == 0)\n        {\n            // This is probably a line so just pick the lowest point\n            if (f0 < f_x2)\n                return 0;\n            else\n                return x2;\n        }\n        temp = (-b + std::sqrt(temp))/(3*a);\n        return put_in_range(0, x2, temp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double lagrange_poly_min_extrap (\n        double p1, \n        double p2,\n        double p3,\n        double f1,\n        double f2,\n        double f3\n    )\n    {\n        DLIB_ASSERT(p1 < p2 && p2 < p3 && f1 >= f2 && f2 <= f3,\n                     \"   p1: \" << p1 \n                     << \"   p2: \" << p2 \n                     << \"   p3: \" << p3  \n                     << \"   f1: \" << f1 \n                     << \"   f2: \" << f2 \n                     << \"   f3: \" << f3);\n\n        // This formula is out of the book Nonlinear Optimization by Andrzej Ruszczynski.  See section 5.2.\n        double temp1 =    f1*(p3*p3 - p2*p2) + f2*(p1*p1 - p3*p3) + f3*(p2*p2 - p1*p1);\n        double temp2 = 2*(f1*(p3 - p2)       + f2*(p1 - p3)       + f3*(p2 - p1) );\n\n        if (temp2 == 0)\n        {\n            return p2;\n        }\n\n        const double result = temp1/temp2;\n\n        // do a final sanity check to make sure the result is in the right range\n        if (p1 <= result && result <= p3)\n        {\n            return result;\n        }\n        else\n        {\n            return std::min(std::max(p1,result),p3);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct, \n        typename funct_der\n        >\n    double line_search (\n        const funct& f, \n        const double f0,\n        const funct_der& der, \n        const double d0,\n        double rho, \n        double sigma, \n        double min_f,\n        unsigned long max_iter \n    )\n    {\n        DLIB_ASSERT (\n            0 < rho && rho < sigma && sigma < 1 && max_iter > 0,\n            \"\\tdouble line_search()\"\n            << \"\\n\\tYou have given invalid arguments to this function\"\n            << \"\\n\\t sigma:    \" << sigma\n            << \"\\n\\t rho:      \" << rho \n            << \"\\n\\t max_iter: \" << max_iter \n        );\n\n        // The bracketing phase of this function is implemented according to block 2.6.2 from\n        // the book Practical Methods of Optimization by R. Fletcher.   The sectioning \n        // phase is an implementation of 2.6.4 from the same book.\n\n        // tau1 > 1. Controls the alpha jump size during the search\n        const double tau1 = 9;\n\n        // it must be the case that 0 < tau2 < tau3 <= 1/2 for the algorithm to function\n        // correctly but the specific values of tau2 and tau3 aren't super important.\n        const double tau2 = 1.0/10.0;\n        const double tau3 = 1.0/2.0;\n\n\n        // Stop right away and return a step size of 0 if the gradient is 0 at the starting point\n        if (std::abs(d0) < std::numeric_limits<double>::epsilon())\n            return 0;\n\n        // Stop right away if the current value is good enough according to min_f\n        if (f0 <= min_f)\n            return 0;\n\n        // Figure out a reasonable upper bound on how large alpha can get.\n        const double mu = (min_f-f0)/(rho*d0);\n\n\n        double alpha = 1;\n        if (mu < 0)\n            alpha = -alpha;\n        alpha = put_in_range(0, 0.65*mu, alpha);\n\n\n        double last_alpha = 0;\n        double last_val = f0;\n        double last_val_der = d0;\n\n        // The bracketing stage will find a range of points [a,b]\n        // that contains a reasonable solution to the line search\n        double a, b;\n\n        // These variables will hold the values and derivatives of f(a) and f(b)\n        double a_val, b_val, a_val_der, b_val_der;\n\n        // This thresh value represents the Wolfe curvature condition\n        const double thresh = std::abs(sigma*d0);\n\n        unsigned long itr = 0;\n        // do the bracketing stage to find the bracket range [a,b]\n        while (true)\n        {\n            ++itr;\n            const double val = f(alpha);\n            const double val_der = der(alpha);\n\n            // we are done with the line search since we found a value smaller\n            // than the minimum f value\n            if (val <= min_f)\n                return alpha;\n\n            if (val > f0 + rho*alpha*d0 || val >= last_val)\n            {\n                a_val = last_val;\n                a_val_der = last_val_der;\n                b_val = val;\n                b_val_der = val_der;\n\n                a = last_alpha;\n                b = alpha;\n                break;\n            }\n\n            if (std::abs(val_der) <= thresh)\n                return alpha;\n\n            // if we are stuck not making progress then quit with the current alpha\n            if (last_alpha == alpha || itr >= max_iter)\n                return alpha;\n\n            if (val_der >= 0)\n            {\n                a_val = val;\n                a_val_der = val_der;\n                b_val = last_val;\n                b_val_der = last_val_der;\n\n                a = alpha;\n                b = last_alpha;\n                break;\n            }\n\n            if (mu <= 2*alpha - last_alpha)\n            {\n                last_alpha = alpha;\n                alpha = mu;\n            }\n            else\n            {\n                const double temp = alpha;\n\n                double first = 2*alpha - last_alpha;\n                double last;\n                if (mu > 0)\n                    last = std::min(mu, alpha + tau1*(alpha - last_alpha));\n                else\n                    last = std::max(mu, alpha + tau1*(alpha - last_alpha));\n\n\n                // pick a point between first and last by doing some kind of interpolation\n                if (last_alpha < alpha)\n                    alpha = last_alpha + (alpha-last_alpha)*poly_min_extrap(last_val, last_val_der, val, val_der);\n                else\n                    alpha = alpha + (last_alpha-alpha)*poly_min_extrap(val, val_der, last_val, last_val_der);\n\n                alpha = put_in_range(first,last,alpha);\n\n\n                last_alpha = temp;\n            }\n\n            last_val = val;\n            last_val_der = val_der;\n\n        }\n\n\n        // Now do the sectioning phase from 2.6.4\n        while (true)\n        {\n            ++itr;\n            double first = a + tau2*(b-a);\n            double last = b - tau3*(b-a);\n\n            // use interpolation to pick alpha between first and last\n            alpha = a + (b-a)*poly_min_extrap(a_val, a_val_der, b_val, b_val_der);\n            alpha = put_in_range(first,last,alpha);\n\n            const double val = f(alpha);\n            const double val_der = der(alpha);\n\n            // we are done with the line search since we found a value smaller\n            // than the minimum f value or we ran out of iterations.\n            if (val <= min_f || itr >= max_iter)\n                return alpha;\n\n            // stop if the interval gets so small that it isn't shrinking any more due to rounding error \n            if (a == first || b == last)\n            {\n                return b;\n            }\n\n\n            if (val > f0 + rho*alpha*d0 || val >= a_val)\n            {\n                b = alpha;\n                b_val = val;\n                b_val_der = val_der;\n            }\n            else\n            {\n                if (std::abs(val_der) <= thresh)\n                    return alpha;\n\n                if ( (b-a)*val_der >= 0)\n                {\n                    b = a;\n                    b_val = a_val;\n                    b_val_der = a_val_der;\n                }\n\n                a = alpha;\n                a_val = val;\n                a_val_der = val_der;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct\n        >\n    double backtracking_line_search (\n        const funct& f, \n        double f0,\n        double d0,\n        double alpha,\n        double rho, \n        unsigned long max_iter \n    )\n    {\n        DLIB_ASSERT (\n            0 < rho && rho < 1 && max_iter > 0,\n            \"\\tdouble backtracking_line_search()\"\n            << \"\\n\\tYou have given invalid arguments to this function\"\n            << \"\\n\\t rho:      \" << rho \n            << \"\\n\\t max_iter: \" << max_iter \n        );\n\n        // make sure alpha is going in the right direction.  That is, it should be opposite\n        // the direction of the gradient.\n        if ((d0 > 0 && alpha > 0) ||\n            (d0 < 0 && alpha < 0))\n        {\n            alpha *= -1;\n        }\n\n        bool have_prev_alpha = false;\n        double prev_alpha = 0;\n        double prev_val = 0;\n        unsigned long iter = 0;\n        while (true)\n        {\n            ++iter;\n            const double val = f(alpha);\n            if (val <= f0 + alpha*rho*d0 || iter >= max_iter)\n            {\n                return alpha;\n            }\n            else\n            {\n                // Interpolate a new alpha.  We also make sure the step by which we\n                // reduce alpha is not super small.\n                double step;\n                if (!have_prev_alpha)\n                {\n                    if (d0 < 0)\n                        step = alpha*put_in_range(0.1,0.9, poly_min_extrap(f0, d0, val));\n                    else\n                        step = alpha*put_in_range(0.1,0.9, poly_min_extrap(f0, -d0, val));\n                    have_prev_alpha = true;\n                }\n                else\n                {\n                    if (d0 < 0)\n                        step = put_in_range(0.1*alpha,0.9*alpha, poly_min_extrap(f0, d0, alpha, val, prev_alpha, prev_val));\n                    else\n                        step = put_in_range(0.1*alpha,0.9*alpha, -poly_min_extrap(f0, -d0, -alpha, val, -prev_alpha, prev_val));\n                }\n\n                prev_alpha = alpha;\n                prev_val = val;\n\n                alpha = step;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class optimize_single_variable_failure : public error {\n    public: optimize_single_variable_failure(const std::string& s):error(s){}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct>\n    double find_min_single_variable (\n        const funct& f,\n        double& starting_point,\n        const double begin = -1e200,\n        const double end = 1e200,\n        const double eps = 1e-3,\n        const long max_iter = 100,\n        const double initial_search_radius = 1\n    )\n    {\n        DLIB_CASSERT( eps > 0 &&\n                      max_iter > 1 &&\n                      begin <= starting_point && starting_point <= end && \n                      initial_search_radius > 0,\n                      \"eps: \" << eps\n                      << \"\\n max_iter: \"<< max_iter \n                      << \"\\n begin: \"<< begin \n                      << \"\\n end:   \"<< end \n                      << \"\\n starting_point: \"<< starting_point \n                      << \"\\n initial_search_radius: \"<< initial_search_radius \n        );\n\n        double search_radius = initial_search_radius;\n\n        double p1=0, p2=0, p3=0, f1=0, f2=0, f3=0;\n        long f_evals = 1;\n\n        if (begin == end)\n        {\n            return f(starting_point);\n        }\n\n        using std::abs;\n        using std::min;\n        using std::max;\n\n        // find three bracketing points such that f1 > f2 < f3.   Do this by generating a sequence\n        // of points expanding away from 0.   Also note that, in the following code, it is always the\n        // case that p1 < p2 < p3.\n\n\n\n        // The first thing we do is get a starting set of 3 points that are inside the [begin,end] bounds\n        p1 = max(starting_point-search_radius, begin);\n        p3 = min(starting_point+search_radius, end);\n        f1 = f(p1);\n        f3 = f(p3);\n\n        if (starting_point == p1 || starting_point == p3)\n        {\n            p2 = (p1+p3)/2;\n            f2 = f(p2);\n        }\n        else\n        {\n            p2 = starting_point;\n            f2 = f(starting_point);\n        }\n\n        f_evals += 2;\n\n        // Now we have 3 points on the function.  Start looking for a bracketing set such that\n        // f1 > f2 < f3 is the case.\n        while ( !(f1 > f2 && f2 < f3))\n        {\n            // check for hitting max_iter or if the interval is now too small\n            if (f_evals >= max_iter)\n            {\n                throw optimize_single_variable_failure(\n                    \"The max number of iterations of single variable optimization have been reached\\n\"\n                    \"without converging.\");\n            }\n            if (p3-p1 < eps)\n            {\n                if (f1 < min(f2,f3)) \n                {\n                    starting_point = p1;\n                    return f1;\n                }\n\n                if (f2 < min(f1,f3)) \n                {\n                    starting_point = p2;\n                    return f2;\n                }\n\n                starting_point = p3;\n                return f3;\n            }\n            \n            // If the left most points are identical in function value then expand out the\n            // left a bit, unless it's already at bound or we would drop that left most\n            // point anyway because it's bad.\n            if (f1==f2 && f1<f3 && p1!=begin)\n            {\n                p1 = max(p1 - search_radius, begin);\n                f1 = f(p1);\n                ++f_evals;\n                search_radius *= 2;\n                continue;\n            }\n            if (f2==f3 && f3<f1 && p3!=end)\n            {\n                p3 = min(p3 + search_radius, end);\n                f3 = f(p3);\n                ++f_evals;\n                search_radius *= 2;\n                continue;\n            }\n\n\n            // if f1 is small then take a step to the left\n            if (f1 <= f3)\n            { \n                // check if the minimum is butting up against the bounds and if so then pick\n                // a point between p1 and p2 in the hopes that shrinking the interval will\n                // be a good thing to do.  Or if p1 and p2 aren't differentiated then try and\n                // get them to obtain different values.\n                if (p1 == begin || (f1 == f2 && (end-begin) < search_radius ))\n                {\n                    p3 = p2;\n                    f3 = f2;\n\n                    p2 = (p1+p2)/2.0;\n                    f2 = f(p2);\n                }\n                else\n                {\n                    // pick a new point to the left of our current bracket\n                    p3 = p2;\n                    f3 = f2;\n\n                    p2 = p1;\n                    f2 = f1;\n\n                    p1 = max(p1 - search_radius, begin);\n                    f1 = f(p1);\n\n                    search_radius *= 2;\n                }\n\n            }\n            // otherwise f3 is small and we should take a step to the right\n            else \n            {\n                // check if the minimum is butting up against the bounds and if so then pick\n                // a point between p2 and p3 in the hopes that shrinking the interval will\n                // be a good thing to do.  Or if p2 and p3 aren't differentiated then try and\n                // get them to obtain different values.\n                if (p3 == end || (f2 == f3 && (end-begin) < search_radius))\n                {\n                    p1 = p2;\n                    f1 = f2;\n\n                    p2 = (p3+p2)/2.0;\n                    f2 = f(p2);\n                }\n                else\n                {\n                    // pick a new point to the right of our current bracket\n                    p1 = p2;\n                    f1 = f2;\n\n                    p2 = p3;\n                    f2 = f3;\n\n                    p3 = min(p3 + search_radius, end);\n                    f3 = f(p3);\n\n                    search_radius *= 2;\n                }\n            }\n\n            ++f_evals;\n        }\n\n\n        // Loop until we have done the max allowable number of iterations or\n        // the bracketing window is smaller than eps.\n        // Within this loop we maintain the invariant that: f1 > f2 < f3 and p1 < p2 < p3\n        const double tau = 0.1;\n        while( f_evals < max_iter && p3-p1 > eps)\n        {\n            double p_min = lagrange_poly_min_extrap(p1,p2,p3, f1,f2,f3);\n\n\n            // make sure p_min isn't too close to the three points we already have\n            if (p_min < p2)\n            {\n                const double min_dist = (p2-p1)*tau;\n                if (abs(p1-p_min) < min_dist) \n                {\n                    p_min = p1 + min_dist;\n                }\n                else if (abs(p2-p_min) < min_dist)\n                {\n                    p_min = p2 - min_dist;\n                }\n            }\n            else\n            {\n                const double min_dist = (p3-p2)*tau;\n                if (abs(p2-p_min) < min_dist) \n                {\n                    p_min = p2 + min_dist;\n                }\n                else if (abs(p3-p_min) < min_dist)\n                {\n                    p_min = p3 - min_dist;\n                }\n            }\n\n            // make sure one side of the bracket isn't super huge compared to the other\n            // side.  If it is then contract it.\n            const double bracket_ratio = abs(p1-p2)/abs(p2-p3);\n            if ( !( bracket_ratio < 10 && bracket_ratio > 0.1) )\n            {\n                // Force p_min to be on a reasonable side.  But only if lagrange_poly_min_extrap()\n                // didn't put it on a good side already.\n                if (bracket_ratio > 1 && p_min > p2)\n                    p_min = (p1+p2)/2;\n                else if (p_min < p2)\n                    p_min = (p2+p3)/2;\n            }\n\n\n            const double f_min = f(p_min);\n\n\n            // Remove one of the endpoints of our bracket depending on where the new point falls.\n            if (p_min < p2)\n            {\n                if (f1 > f_min && f_min < f2)\n                {\n                    p3 = p2;\n                    f3 = f2;\n                    p2 = p_min;\n                    f2 = f_min;\n                }\n                else\n                {\n                    p1 = p_min;\n                    f1 = f_min;\n                }\n            }\n            else\n            {\n                if (f2 > f_min && f_min < f3)\n                {\n                    p1 = p2;\n                    f1 = f2;\n                    p2 = p_min;\n                    f2 = f_min;\n                }\n                else\n                {\n                    p3 = p_min;\n                    f3 = f_min;\n                }\n            }\n\n\n            ++f_evals;\n        }\n\n        if (f_evals >= max_iter)\n        {\n            throw optimize_single_variable_failure(\n                \"The max number of iterations of single variable optimization have been reached\\n\"\n                \"without converging.\");\n        }\n\n        starting_point = p2;\n        return f2;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct>\n    class negate_function_object \n    {\n    public:\n        negate_function_object(const funct& f_) : f(f_){}\n\n        template <typename T>\n        double operator()(const T& x) const\n        {\n            return -f(x);\n        }\n\n    private:\n        const funct& f;\n    };\n\n    template <typename funct>\n    const negate_function_object<funct> negate_function(const funct& f) { return negate_function_object<funct>(f); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct>\n    double find_max_single_variable (\n        const funct& f,\n        double& starting_point,\n        const double begin = -1e200,\n        const double end = 1e200,\n        const double eps = 1e-3,\n        const long max_iter = 100,\n        const double initial_search_radius = 1\n    )\n    {\n        return -find_min_single_variable(negate_function(f), starting_point, begin, end, eps, max_iter, initial_search_radius);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_LINE_SEARCH_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_line_search_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATIOn_ABSTRACT_\n#ifdef DLIB_OPTIMIZATIOn_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct, \n        typename T\n        >\n    class line_search_funct; \n    /*!\n        This object is a function object that represents a line search function.\n\n        Moreover, it represents a function with the signature:\n            double l(double x)\n    !*/\n\n    template <\n        typename funct, \n        typename T\n        >\n    const line_search_funct<funct,T> make_line_search_function (\n        const funct& f, \n        const T& start, \n        const T& direction\n    ); \n    /*!\n        requires\n            - is_col_vector(start) && is_col_vector(direction) && start.size() == direction.size() \n              (i.e. start and direction should be column vectors of the same size)\n            - f must return either a double or a column vector the same length as start\n            - f(start + 1.5*direction) should be a valid expression\n        ensures\n            - if (f returns a double) then\n                - returns a line search function that computes l(x) == f(start + x*direction)\n            - else\n                - returns a line search function that computes l(x) == dot(f(start + x*direction),direction).\n                  That is, we assume f is the derivative of some other function and that what\n                  f returns is a gradient vector. \n                  So the following two expressions both create the derivative of l(x): \n                    - derivative(make_line_search_function(funct,start,direction))\n                    - make_line_search_function(derivative(funct),start,direction)\n    !*/\n\n    template <\n        typename funct, \n        typename T\n        >\n    const line_search_funct<funct,T> make_line_search_function (\n        const funct& f, \n        const T& start, \n        const T& direction,\n        double& f_out\n    ); \n    /*!\n        This function is identical to the above three argument version of make_line_search_function() \n        except that, if f() outputs a double, every time f() is evaluated its output is also stored \n        into f_out.\n    !*/\n\n    template <\n        typename funct, \n        typename T\n        >\n    const line_search_funct<funct,T> make_line_search_function (\n        const funct& f, \n        const T& start, \n        const T& direction,\n        T& gradient_out\n    ); \n    /*!\n        This function is identical to the above three argument version of make_line_search_function() \n        except that, if f() outputs a column vector, every time f() is evaluated its output is also \n        stored into gradient_out.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline double poly_min_extrap (\n        double f0,\n        double d0,\n        double f1,\n        double d1\n    );\n    /*!\n        ensures\n            - let c(x) be a 3rd degree polynomial such that:\n                - c(0) == f0\n                - c(1) == f1\n                - derivative of c(x) at x==0 is d0\n                - derivative of c(x) at x==1 is d1\n            - returns the point in the range [0,1] that minimizes the polynomial c(x) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline double poly_min_extrap (\n        double f0,\n        double d0,\n        double f1\n    );\n    /*!\n        ensures\n            - let c(x) be a 2nd degree polynomial such that:\n                - c(0) == f0\n                - c(1) == f1\n                - derivative of c(x) at x==0 is d0\n            - returns the point in the range [0,1] that minimizes the polynomial c(x) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline double poly_min_extrap (\n        double f0,\n        double d0,\n        double x1,\n        double f_x1,\n        double x2,\n        double f_x2\n    )\n    /*!\n        requires\n            - 0 < x1 < x2\n        ensures\n            - let f(x) be a 3rd degree polynomial such that:\n                - f(0) == f0\n                - derivative of f(x) at x==0 is d0\n                - f(x1) == f_x1\n                - f(x2) == f_x2\n            - returns the point in the range [0,x2] that minimizes the polynomial f(x) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline double lagrange_poly_min_extrap (\n        double p1, \n        double p2,\n        double p3,\n        double f1,\n        double f2,\n        double f3\n    );\n    /*!\n        requires\n            - f1 >= f2 <= f3\n            - p1 < p2 < p3\n        ensures\n            - let c(x) be the second order Lagrange polynomial that interpolates the\n              points p1, p2, and p3 where c(p1)==f1, c(p2)==f2, and c(p3)==f3\n            - this function returns the point in the range [p1,p3] that minimizes \n              the polynomial c(x) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct, \n        typename funct_der\n        >\n    double line_search (\n        const funct& f, \n        const double f0,\n        const funct_der& der, \n        const double d0,\n        double rho, \n        double sigma, \n        double min_f,\n        unsigned long max_iter\n    )\n    /*!\n        requires\n            - 0 < rho < sigma < 1\n            - f and der are scalar functions of scalars\n              (e.g. line_search_funct objects)\n            - der is the derivative of f\n            - f0 == f(0)\n            - d0 == der(0)\n            - max_iter > 0\n        ensures\n            - Performs a line search and uses the strong Wolfe conditions to decide when\n              the search can stop.  \n                - rho == the parameter of the Wolfe sufficient decrease condition\n                - sigma == the parameter of the Wolfe curvature condition\n                - max_iter == the maximum number of iterations allowable.  After this\n                  many evaluations of f() line_search() is guaranteed to terminate.\n            - returns a value alpha such that f(alpha) is significantly closer to \n              the minimum of f than f(0).\n            - It is assumed that the minimum possible value of f(x) is min_f.  So if\n              an alpha is found such that f(alpha) <= min_f then the search stops\n              immediately.\n            - This function is also optimized for the case where der(0) is negative.  I.e.\n              positive values of the argument to f() should be in a descent direction.  \n            - When this function makes calls to f() and der() it always does so by\n              first calling f() and then calling der().  That is, these two functions\n              are always called in pairs with f() being called first and then der()\n              being called second.\n    !*/\n\n    /*\n        A good discussion of the Wolfe conditions and line search algorithms in \n        general can be found in the book Practical Methods of Optimization by R. Fletcher\n        and also in the more recent book Numerical Optimization by Nocedal and Wright.\n    */\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct\n        >\n    double backtracking_line_search (\n        const funct& f, \n        double f0,\n        double d0,\n        double alpha,\n        double rho, \n        unsigned long max_iter \n    );\n    /*!\n        requires\n            - 0 < rho < 1\n            - f is a scalar function of scalars \n              (e.g. a line_search_funct object)\n            - f0 == f(0)\n            - d0 == the derivative of f() at f(0). \n            - max_iter > 0\n        ensures\n            - Performs a backtracking line search and uses the Armijo sufficient decrease\n              rule to decide when the search can stop.\n                - rho == the parameter of the sufficient decrease condition. \n                - max_iter == the maximum number of iterations allowable.  After this many\n                  evaluations of f() backtracking_line_search() is guaranteed to terminate.\n            - The line search starts with the input alpha value and then backtracks until\n              it finds a good enough alpha value.  Once found, it returns the alpha value\n              such that f(alpha) is significantly closer to the minimum of f than f(0).\n            - The returned value of alpha will always be the last value of alpha which was\n              passed to f().  That is, it will always be the case that the last call to f()\n              made by backtracking_line_search() was f(alpha) where alpha is the return\n              value from this function.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct\n        >\n    const negate_function_object<funct> negate_function(\n        const funct& f\n    );\n    /*!\n        requires\n            - f == a function that returns a scalar\n        ensures\n            - returns a function that represents the negation of f.  That is,\n              the returned function object represents g(x) == -f(x)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class optimize_single_variable_failure : public error;\n    /*!\n        This is the exception class used by the functions defined below.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct\n        >\n    double find_min_single_variable (\n        const funct& f,\n        double& starting_point,\n        const double begin = -1e200,\n        const double end = 1e200,\n        const double eps = 1e-3,\n        const long max_iter = 100,\n        const double initial_search_radius = 1\n    )\n    /*!\n        requires\n            - eps > 0\n            - max_iter > 1\n            - begin <= starting_point <= end\n            - f must be a function of a double that returns a double\n              (e.g. f(starting_point) should be a valid expression that evaluates to a double)\n            - initial_search_radius > 0\n        ensures\n            - Finds a point P such that:\n                - P is a local minimum of the function f().   \n                - begin <= P <= end\n            - Evaluates f() no more than max_iter times\n            - Stops searching when the window around the minimum point is smaller than eps.\n              The search will begin with the given starting_point and expand out to the\n              left and right by initial_search_radius sized steps.  So if you think the\n              minimum is likely to be found within X distance from the starting_point then\n              set initial_search_radius to X.\n            - #starting_point == P\n            - returns f(P)\n        throws\n            - optimize_single_variable_failure \n                This exception is thrown if max_iter iterations are performed without \n                determining the min point to the requested accuracy of eps.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename funct\n        >\n    double find_max_single_variable (\n        const funct& f,\n        double& starting_point,\n        const double begin = -1e200,\n        const double end = 1e200,\n        const double eps = 1e-3,\n        const long max_iter = 100,\n        const double initial_search_radius = 1\n    )\n    /*!\n        requires\n            - eps > 0\n            - max_iter > 1\n            - begin <= starting_point <= end\n            - f must be a function of a double that returns a double\n              (e.g. f(starting_point) should be a valid expression that evaluates to a double)\n            - initial_search_radius > 0\n        ensures\n            - Finds a point P such that:\n                - P is a local maximum of the function f().   \n                - begin <= P <= end\n            - Evaluates f() no more than max_iter times\n            - Stops searching when the window around the maximum point is smaller than eps.\n              The search will begin with the given starting_point and expand out to the\n              left and right by initial_search_radius sized steps.  So if you think the\n              maximum is likely to be found within X distance from the starting_point then\n              set initial_search_radius to X.\n            - #starting_point == P\n            - returns f(P)\n        throws\n            - optimize_single_variable_failure \n                This exception is thrown if max_iter iterations are performed without \n                determining the max point to the requested accuracy of eps.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_oca.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATIoN_OCA_Hh_\n#define DLIB_OPTIMIZATIoN_OCA_Hh_\n\n#include \"optimization_oca_abstract.h\"\n\n#include \"../matrix.h\"\n#include \"optimization_solve_qp_using_smo.h\"\n#include <vector>\n#include \"../sequence.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    template <typename matrix_type>\n    class oca_problem\n    {\n    public:\n        typedef typename matrix_type::type scalar_type;\n\n        virtual ~oca_problem() {}\n\n        virtual bool risk_has_lower_bound (\n            scalar_type& \n        ) const { return false; }\n\n        virtual bool optimization_status (\n            scalar_type ,\n            scalar_type ,\n            scalar_type ,\n            scalar_type ,\n            unsigned long,\n            unsigned long\n        ) const = 0;\n\n        virtual scalar_type get_c (\n        ) const = 0;\n\n        virtual long get_num_dimensions (\n        ) const = 0;\n\n        virtual void get_risk (\n            matrix_type& current_solution,\n            scalar_type& risk_value,\n            matrix_type& risk_subgradient\n        ) const = 0;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class oca\n    {\n    public:\n\n        oca () \n        {\n            sub_eps = 1e-2;\n            sub_max_iter = 50000;\n\n            inactive_thresh = 20;\n        }\n\n        void set_subproblem_epsilon (\n            double eps_\n        ) { sub_eps = eps_; }\n\n        double get_subproblem_epsilon (\n        ) const { return sub_eps; }\n\n        void set_subproblem_max_iterations (\n            unsigned long sub_max_iter_\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(sub_max_iter_ > 0,\n                \"\\t void oca::set_subproblem_max_iterations\"\n                << \"\\n\\t max iterations must be greater than 0\"\n                << \"\\n\\t sub_max_iter_: \" << sub_max_iter_\n                << \"\\n\\t this: \" << this\n                );\n\n            sub_max_iter = sub_max_iter_; \n        }\n\n        unsigned long get_subproblem_max_iterations (\n        ) const { return sub_max_iter; }\n\n        void set_inactive_plane_threshold (\n            unsigned long inactive_thresh_\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(inactive_thresh_ > 0,\n                \"\\t void oca::set_inactive_plane_threshold\"\n                << \"\\n\\t inactive threshold must be greater than 0\"\n                << \"\\n\\t inactive_thresh_: \" << inactive_thresh_\n                << \"\\n\\t this: \" << this\n                );\n\n            inactive_thresh = inactive_thresh_; \n        }\n\n        unsigned long get_inactive_plane_threshold (\n        ) const { return inactive_thresh; }\n\n        template <\n            typename matrix_type\n            >\n        typename matrix_type::type operator() (\n            const oca_problem<matrix_type>& problem,\n            matrix_type& w,\n            unsigned long num_nonnegative = 0,\n            unsigned long force_weight_to_1 = std::numeric_limits<unsigned long>::max()\n        ) const\n        {\n            matrix_type empty_prior;\n            return oca_impl(problem, w, empty_prior, false, num_nonnegative, force_weight_to_1);\n        }\n\n        template <\n            typename matrix_type\n            >\n        typename matrix_type::type operator() (\n            const oca_problem<matrix_type>& problem,\n            matrix_type& w,\n            const matrix_type& prior\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(prior) && prior.size() == problem.get_num_dimensions(),\n                \"\\t scalar_type oca::operator()\"\n                << \"\\n\\t The prior vector does not have the correct dimensions.\"\n                << \"\\n\\t is_col_vector(prior):         \" << is_col_vector(prior) \n                << \"\\n\\t prior.size():                 \" << prior.size() \n                << \"\\n\\t problem.get_num_dimensions(): \" << problem.get_num_dimensions() \n                << \"\\n\\t this:                         \" << this\n                );\n            // disable the force weight to 1 option for this mode.  We also disable the\n            // non-negative constraints.\n            unsigned long force_weight_to_1 = std::numeric_limits<unsigned long>::max();\n            return oca_impl(problem, w, prior, true, 0, force_weight_to_1);\n        }\n\n    private:\n\n        template <\n            typename matrix_type\n            >\n        typename matrix_type::type oca_impl (\n            const oca_problem<matrix_type>& problem,\n            matrix_type& w,\n            const matrix_type prior,\n            bool have_prior,\n            unsigned long num_nonnegative,\n            unsigned long force_weight_to_1\n        ) const\n        {\n            const unsigned long num_dims = problem.get_num_dimensions();\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(problem.get_c() > 0 &&\n                        problem.get_num_dimensions() > 0,\n                \"\\t scalar_type oca::operator()\"\n                << \"\\n\\t The oca_problem is invalid\"\n                << \"\\n\\t problem.get_c():              \" << problem.get_c() \n                << \"\\n\\t problem.get_num_dimensions(): \" << num_dims \n                << \"\\n\\t this: \" << this\n                );\n\n\n            if (num_nonnegative > num_dims)\n                num_nonnegative = num_dims;\n\n            typedef typename matrix_type::type scalar_type;\n            typedef typename matrix_type::layout_type layout_type;\n            typedef typename matrix_type::mem_manager_type mem_manager_type;\n            typedef matrix_type vect_type;\n\n            const scalar_type C = problem.get_c();\n\n            typename sequence<vect_type>::kernel_2a planes;\n            std::vector<scalar_type> bs, miss_count;\n\n            vect_type new_plane, alpha;\n\n            w.set_size(num_dims, 1);\n            w = 0;\n\n            // The current objective value.  Note also that w always contains \n            // the current solution.\n            scalar_type cur_obj = std::numeric_limits<scalar_type>::max();\n\n            // This will hold the cutting plane objective value.  This value is\n            // a lower bound on the true optimal objective value.\n            scalar_type cp_obj = 0;\n\n            matrix<scalar_type,0,0,mem_manager_type, layout_type> K, Ktmp;\n\n            scalar_type R_lower_bound;\n            if (problem.risk_has_lower_bound(R_lower_bound))\n            {\n                // The flat lower bounding plane is always good to have if we know\n                // what it is.\n                bs.push_back(R_lower_bound);\n                new_plane = zeros_matrix(w);\n                planes.add(0, new_plane);\n                alpha = uniform_matrix<scalar_type>(1,1, C);\n                miss_count.push_back(0);\n\n                K.set_size(1,1);\n                K(0,0) = 0;\n            }\n\n            const double prior_norm = have_prior ?  0.5*dot(prior,prior) : 0;\n\n            unsigned long counter = 0;\n            while (true)\n            {\n\n                // add the next cutting plane\n                scalar_type cur_risk;\n                if (force_weight_to_1 < (unsigned long)w.size())\n                    w(force_weight_to_1) = 1;\n\n                problem.get_risk(w, cur_risk, new_plane);\n\n                if (force_weight_to_1 < (unsigned long)w.size())\n                {\n                    // We basically arrange for the w(force_weight_to_1) element and all\n                    // subsequent elements of w to not be involved in the optimization at\n                    // all.  An easy way to do this is to just make sure the elements of w\n                    // corresponding elements in the subgradient are always set to zero\n                    // while we run the cutting plane algorithm.  The only time\n                    // w(force_weight_to_1) is 1 is when we pass it to the oca_problem.\n                    set_rowm(w, range(force_weight_to_1, w.size()-1)) = 0;\n                    set_rowm(new_plane, range(force_weight_to_1, new_plane.size()-1)) = 0;\n                }\n\n                if (have_prior)\n                    bs.push_back(cur_risk - dot(w,new_plane) + dot(prior,new_plane));\n                else\n                    bs.push_back(cur_risk - dot(w,new_plane));\n                planes.add(planes.size(), new_plane);\n                miss_count.push_back(0);\n\n                // If alpha is empty then initialize it (we must always have sum(alpha) == C).  \n                // But otherwise, just append a zero.\n                if (alpha.size() == 0)\n                    alpha = uniform_matrix<scalar_type>(1,1, C);\n                else\n                    alpha = join_cols(alpha,zeros_matrix<scalar_type>(1,1));\n\n                const scalar_type wnorm = 0.5*trans(w)*w;\n                const double prior_part = have_prior? dot(w,prior) : 0;\n                cur_obj = wnorm + C*cur_risk + prior_norm-prior_part;\n\n                // report current status\n                const scalar_type risk_gap = cur_risk - (cp_obj-wnorm+prior_part-prior_norm)/C;\n                if (counter > 0 && problem.optimization_status(cur_obj, cur_obj - cp_obj, \n                                                               cur_risk, risk_gap, planes.size(), counter))\n                {\n                    break;\n                }\n\n                // compute kernel matrix for all the planes\n                K.swap(Ktmp);\n                K.set_size(planes.size(), planes.size());\n                // copy over the old K matrix\n                set_subm(K, 0,0, Ktmp.nr(), Ktmp.nc()) = Ktmp;\n\n                // now add the new row and column to K\n                for (unsigned long c = 0; c < planes.size(); ++c)\n                {\n                    K(c, Ktmp.nc()) = dot(planes[c], planes[planes.size()-1]);\n                    K(Ktmp.nc(), c) = K(c,Ktmp.nc());\n                }\n\n\n                // solve the cutting plane subproblem for the next w.   We solve it to an\n                // accuracy that is related to how big the error gap is\n                scalar_type eps = std::min<scalar_type>(sub_eps, 0.1*(cur_obj-cp_obj)) ;\n                // just a sanity check\n                if (eps < 1e-16)\n                    eps = 1e-16;\n                // Note that we warm start this optimization by using the alpha from the last\n                // iteration as the starting point.\n                if (num_nonnegative != 0)\n                {\n                    // copy planes into a matrix so we can call solve_qp4_using_smo()\n                    matrix<scalar_type,0,0,mem_manager_type, layout_type> planes_mat(num_nonnegative,planes.size());\n                    for (unsigned long i = 0; i < planes.size(); ++i)\n                        set_colm(planes_mat,i) = colm(planes[i],0,num_nonnegative);\n\n                    solve_qp4_using_smo(planes_mat, K, mat(bs), alpha, eps, sub_max_iter); \n                }\n                else\n                {\n                    solve_qp_using_smo(K, mat(bs), alpha, eps, sub_max_iter); \n                }\n\n                // construct the w that minimized the subproblem.\n                w = -alpha(0)*planes[0];\n                for (unsigned long i = 1; i < planes.size(); ++i)\n                    w -= alpha(i)*planes[i];\n                // threshold the first num_nonnegative w elements if necessary.\n                if (num_nonnegative != 0)\n                    set_rowm(w,range(0,num_nonnegative-1)) = lowerbound(rowm(w,range(0,num_nonnegative-1)),0);\n\n                for (long i = 0; i < alpha.size(); ++i)\n                {\n                    if (alpha(i) != 0)\n                        miss_count[i] = 0;\n                    else\n                        miss_count[i] += 1;\n                }\n\n                // Compute the lower bound on the true objective given to us by the cutting \n                // plane subproblem.\n                cp_obj = -0.5*trans(w)*w + trans(alpha)*mat(bs);\n                if (have_prior)\n                    w += prior;\n\n                // If it has been a while since a cutting plane was an active constraint then\n                // we should throw it away.\n                while (max(mat(miss_count)) >= inactive_thresh)\n                {\n                    const long idx = index_of_max(mat(miss_count));\n                    bs.erase(bs.begin()+idx);\n                    miss_count.erase(miss_count.begin()+idx);\n                    K = removerc(K, idx, idx);\n                    alpha = remove_row(alpha,idx);\n                    planes.remove(idx, new_plane);\n                }\n\n                ++counter;\n            }\n\n            if (force_weight_to_1 < (unsigned long)w.size())\n                w(force_weight_to_1) = 1;\n\n            return cur_obj;\n        }\n\n        double sub_eps;\n\n        unsigned long sub_max_iter;\n\n        unsigned long inactive_thresh;\n    };\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_OPTIMIZATIoN_OCA_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_oca_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATION_OCA_ABsTRACT_Hh_\n#ifdef DLIB_OPTIMIZATION_OCA_ABsTRACT_Hh_\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    template <typename matrix_type>\n    class oca_problem\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                - matrix_type == a dlib::matrix capable of storing column vectors\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is the interface used to define the optimization \n                problems solved by the oca optimizer defined later in this file.\n\n                OCA solves optimization problems with the following form:\n                    Minimize: f(w) == 0.5*length_squared(w) + C*R(w)\n\n                    Where R(w) is a user-supplied convex function and C > 0.  Optionally,\n                    there can also be non-negativity constraints on some or all of the \n                    elements of w.\n\n                Or it can alternatively solve:\n                    Minimize: f(w) == 0.5*length_squared(w-prior) + C*R(w)\n\n                    Where prior is a user supplied vector and R(w) has the same\n                    interpretation as above.\n                       \n\n                Note that the stopping condition must be provided by the user\n                in the form of the optimization_status() function.\n        !*/\n\n    public:\n\n        typedef typename matrix_type::type scalar_type;\n\n        virtual ~oca_problem() {}\n\n        virtual bool risk_has_lower_bound (\n            scalar_type& lower_bound\n        ) const { return false; }\n        /*!\n            ensures\n                - if (R(w) >= a constant for all values of w) then\n                    - returns true\n                    - #lower_bound == the constant that lower bounds R(w)\n                - else\n                    - returns false\n        !*/\n\n        virtual bool optimization_status (\n            scalar_type current_objective_value,\n            scalar_type current_error_gap,\n            scalar_type current_risk_value,\n            scalar_type current_risk_gap,\n            unsigned long num_cutting_planes,\n            unsigned long num_iterations\n        ) const = 0;\n        /*!\n            requires\n                - This function is called by the OCA optimizer each iteration.  \n                - current_objective_value == the current value of the objective function f(w)\n                - current_error_gap == The bound on how much lower the objective function\n                  can drop before we reach the optimal point.  At the optimal solution the\n                  error gap is equal to 0.\n                - current_risk_value == the current value of the R(w) term of the objective function.\n                - current_risk_gap == the bound on how much lower the risk term can go.  At the optimal\n                  solution the risk gap is zero.\n                - num_cutting_planes == the number of cutting planes the algorithm is currently using.\n                - num_iterations == A count of the total number of iterations that have executed\n                  since we started running the optimization.\n            ensures\n                - If it is appropriate to terminate the optimization then this function returns true\n                  and false otherwise.\n        !*/\n\n        virtual scalar_type get_c (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the C parameter\n        !*/\n\n        virtual long get_num_dimensions (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the number of free variables in this optimization problem\n        !*/\n\n        virtual void get_risk (\n            matrix_type& current_solution,\n            scalar_type& risk_value,\n            matrix_type& risk_subgradient\n        ) const = 0;\n        /*!\n            requires\n                - is_col_vector(current_solution) == true\n                - current_solution.size() == get_num_dimensions()\n            ensures\n                - #current_solution will be set to one of the following:\n                    - current_solution (i.e. it won't be modified at all)\n                    - The result of a line search passing through current_solution.  \n                - #risk_value == R(#current_solution) \n                - #risk_subgradient == an element of the subgradient of R() at the \n                  point #current_solution\n                - Note that #risk_value and #risk_subgradient are NOT multiplied by get_c()\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class oca\n    {\n        /*!\n            INITIAL VALUE\n                - get_subproblem_epsilon() == 1e-2\n                - get_subproblem_max_iterations() == 50000\n                - get_inactive_plane_threshold() == 20\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for solving the optimization problem defined above\n                by the oca_problem abstract class.  \n\n                For reference, OCA solves optimization problems with the following form:\n                    Minimize: f(w) == 0.5*length_squared(w) + C*R(w)\n\n                    Where R(w) is a user-supplied convex function and C > 0.  Optionally,\n                    this object can also add non-negativity constraints to some or all\n                    of the elements of w.\n\n                Or it can alternatively solve:\n                    Minimize: f(w) == 0.5*length_squared(w-prior) + C*R(w)\n\n                    Where prior is a user supplied vector and R(w) has the same\n                    interpretation as above.\n                       \n\n                For a detailed discussion you should consult the following papers\n                from the Journal of Machine Learning Research:\n                    Optimized Cutting Plane Algorithm for Large-Scale Risk Minimization\n                        Vojtech Franc, Soren Sonnenburg; 10(Oct):2157--2192, 2009. \n\n                    Bundle Methods for Regularized Risk Minimization\n                        Choon Hui Teo, S.V.N. Vishwanthan, Alex J. Smola, Quoc V. Le; 11(Jan):311-365, 2010. \n        !*/\n    public:\n\n        oca (\n        ); \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        template <\n            typename matrix_type\n            >\n        typename matrix_type::type operator() (\n            const oca_problem<matrix_type>& problem,\n            matrix_type& w,\n            unsigned long num_nonnegative = 0,\n            unsigned long force_weight_to_1 = std::numeric_limits<unsigned long>::max()\n        ) const;\n        /*!\n            requires\n                - problem.get_c() > 0\n                - problem.get_num_dimensions() > 0\n            ensures\n                - solves the given oca problem and stores the solution in #w.  In particular,\n                  this function solves:\n                    Minimize: f(w) == 0.5*length_squared(w) + C*R(w)\n                - The optimization algorithm runs until problem.optimization_status() \n                  indicates it is time to stop.\n                - returns the objective value at the solution #w\n                - if (num_nonnegative != 0) then\n                    - Adds the constraint that #w(i) >= 0 for all i < num_nonnegative.\n                      That is, the first num_nonnegative elements of #w will always be\n                      non-negative.  This includes the copies of w passed to get_risk()\n                      in the form of the current_solution vector as well as the final\n                      output of this function.\n                - if (force_weight_to_1 < problem.get_num_dimensions()) then\n                    - The optimizer enforces the following constraints:\n                        - #w(force_weight_to_1) == 1\n                        - for all i > force_weight_to_1:\n                            - #w(i) == 0 \n                        - That is, the element in the weight vector at the index indicated\n                          by force_weight_to_1 will have a value of 1 upon completion of\n                          this function, while all subsequent elements of w will have\n                          values of 0.\n        !*/\n\n        template <\n            typename matrix_type\n            >\n        typename matrix_type::type operator() (\n            const oca_problem<matrix_type>& problem,\n            matrix_type& w,\n            const matrix_type& prior\n        ) const;\n        /*!\n            requires\n                - problem.get_c() > 0\n                - problem.get_num_dimensions() > 0\n                - is_col_vector(prior) == true\n                - prior.size() == problem.get_num_dimensions()\n            ensures\n                - solves the given oca problem and stores the solution in #w.\n                - In this mode, we solve a version of the problem with a different\n                  regularizer.  In particular, this function solves:\n                    Minimize: f(w) == 0.5*length_squared(w-prior) + C*R(w)\n                - The optimization algorithm runs until problem.optimization_status() \n                  indicates it is time to stop.\n                - returns the objective value at the solution #w\n        !*/\n\n        void set_subproblem_epsilon (\n            double eps\n        ); \n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_subproblem_epsilon() == eps \n        !*/\n\n        double get_subproblem_epsilon (\n        ) const; \n        /*!\n            ensures\n                - returns the accuracy used in solving the quadratic programming\n                  subproblem that is part of the overall OCA algorithm.\n        !*/\n\n        void set_subproblem_max_iterations (\n            unsigned long sub_max_iter\n        ); \n        /*!\n            requires\n                - sub_max_iter > 0\n            ensures\n                - #get_subproblem_max_iterations() == sub_max_iter\n        !*/\n\n        unsigned long get_subproblem_max_iterations (\n        ) const; \n        /*!\n            ensures\n                - returns the maximum number of iterations this object will perform\n                  while attempting to solve each quadratic programming subproblem.\n        !*/\n\n        void set_inactive_plane_threshold (\n            unsigned long inactive_thresh\n        ); \n        /*!\n            requires\n                - inactive_thresh > 0\n            ensures\n                - #get_inactive_plane_threshold() == inactive_thresh\n        !*/\n\n        unsigned long get_inactive_plane_threshold (\n        ) const; \n        /*!\n            ensures\n                - As OCA runs it builds up a set of cutting planes.  Typically\n                  cutting planes become inactive after a certain point and can then\n                  be removed.  This function returns the number of iterations of\n                  inactivity required before a cutting plane is removed.\n        !*/\n\n    };\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_OPTIMIZATION_OCA_ABsTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_search_strategies.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATIOn_SEARCH_STRATEGIES_H_\n#define DLIB_OPTIMIZATIOn_SEARCH_STRATEGIES_H_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"optimization_search_strategies_abstract.h\"\n#include \"../sequence.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class cg_search_strategy\n    {\n    public:\n        cg_search_strategy() : been_used(false) {}\n\n        double get_wolfe_rho (\n        ) const { return 0.001; }\n\n        double get_wolfe_sigma (\n        ) const { return 0.01; }\n\n        unsigned long get_max_line_search_iterations (\n        ) const { return 100; }\n\n        template <typename T>\n        const matrix<double,0,1>& get_next_direction (\n            const T& ,\n            const double ,\n            const T& funct_derivative\n        )\n        {\n            if (been_used == false)\n            {\n                been_used = true;\n                prev_direction = -funct_derivative;\n            }\n            else\n            {\n                // Use the Polak-Ribiere (4.1.12) conjugate gradient described by Fletcher on page 83\n                const double temp = trans(prev_derivative)*prev_derivative;\n                // If this value hits zero then just use the direction of steepest descent.\n                if (std::abs(temp) < std::numeric_limits<double>::epsilon())\n                {\n                    prev_derivative = funct_derivative;\n                    prev_direction = -funct_derivative;\n                    return prev_direction;\n                }\n\n                double b = trans(funct_derivative-prev_derivative)*funct_derivative/(temp);\n                prev_direction = -funct_derivative + b*prev_direction;\n\n            }\n\n            prev_derivative = funct_derivative;\n            return prev_direction;\n        }\n\n    private:\n        bool been_used;\n        matrix<double,0,1> prev_derivative;\n        matrix<double,0,1> prev_direction;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class bfgs_search_strategy\n    {\n    public:\n        bfgs_search_strategy() : been_used(false), been_used_twice(false) {}\n\n        double get_wolfe_rho (\n        ) const { return 0.01; }\n\n        double get_wolfe_sigma (\n        ) const { return 0.9; }\n\n        unsigned long get_max_line_search_iterations (\n        ) const { return 100; }\n\n        template <typename T>\n        const matrix<double,0,1>& get_next_direction (\n            const T& x,\n            const double ,\n            const T& funct_derivative\n        )\n        {\n            if (been_used == false)\n            {\n                been_used = true;\n                H = identity_matrix<double>(x.size());\n            }\n            else\n            {\n                // update H with the BFGS formula from (3.2.12) on page 55 of Fletcher \n                delta = (x-prev_x); \n                gamma = funct_derivative-prev_derivative;\n\n                double dg = dot(delta,gamma);\n\n                // Try to set the initial value of the H matrix to something reasonable if we are still\n                // in the early stages of figuring out what it is.  This formula below is what is suggested\n                // in the book Numerical Optimization by Nocedal and Wright in the chapter on Quasi-Newton methods.\n                if (been_used_twice == false)\n                {\n                    double gg = trans(gamma)*gamma;\n                    if (std::abs(gg) > std::numeric_limits<double>::epsilon())\n                    {\n                        const double temp = put_in_range(0.01, 100, dg/gg);\n                        H = diagm(uniform_matrix<double>(x.size(),1, temp));\n                        been_used_twice = true;\n                    }\n                }\n\n                Hg = H*gamma;\n                gH = trans(trans(gamma)*H);\n                double gHg = trans(gamma)*H*gamma;\n                if (gHg < std::numeric_limits<double>::infinity() && dg < std::numeric_limits<double>::infinity() &&\n                    dg != 0)\n                {\n                    H += (1 + gHg/dg)*delta*trans(delta)/(dg) - (delta*trans(gH) + Hg*trans(delta))/(dg);\n                }\n                else\n                {\n                    H = identity_matrix<double>(H.nr());\n                    been_used_twice = false;\n                }\n            }\n\n            prev_x = x;\n            prev_direction = -H*funct_derivative;\n            prev_derivative = funct_derivative;\n            return prev_direction;\n        }\n\n    private:\n        bool been_used;\n        bool been_used_twice;\n        matrix<double,0,1> prev_x;\n        matrix<double,0,1> prev_derivative;\n        matrix<double,0,1> prev_direction;\n        matrix<double> H;\n        matrix<double,0,1> delta, gamma, Hg, gH;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class lbfgs_search_strategy\n    {\n    public:\n        explicit lbfgs_search_strategy(unsigned long max_size_) : max_size(max_size_), been_used(false) \n        {\n            DLIB_ASSERT (\n                max_size > 0,\n                \"\\t lbfgs_search_strategy(max_size)\"\n                << \"\\n\\t max_size can't be zero\"\n            );\n        }\n\n        lbfgs_search_strategy(const lbfgs_search_strategy& item) \n        {\n            max_size = item.max_size;\n            been_used = item.been_used;\n            prev_x = item.prev_x;\n            prev_derivative = item.prev_derivative;\n            prev_direction = item.prev_direction;\n            alpha = item.alpha;\n            dh_temp = item.dh_temp;\n        }\n\n        double get_wolfe_rho (\n        ) const { return 0.01; }\n\n        double get_wolfe_sigma (\n        ) const { return 0.9; }\n\n        unsigned long get_max_line_search_iterations (\n        ) const { return 100; }\n\n        template <typename T>\n        const matrix<double,0,1>& get_next_direction (\n            const T& x,\n            const double ,\n            const T& funct_derivative\n        )\n        {\n            prev_direction = -funct_derivative;\n\n            if (been_used == false)\n            {\n                been_used = true;\n            }\n            else\n            {\n                // add an element into the stored data sequence\n                dh_temp.s = x - prev_x;\n                dh_temp.y = funct_derivative - prev_derivative;\n                double temp = dot(dh_temp.s, dh_temp.y);\n                // only accept this bit of data if temp isn't zero\n                if (std::abs(temp) > std::numeric_limits<double>::epsilon())\n                {\n                    dh_temp.rho = 1/temp;\n                    data.add(data.size(), dh_temp);\n                }\n                else\n                {\n                    data.clear();\n                }\n\n                if (data.size() > 0)\n                {\n                    // This block of code is from algorithm 7.4 in the Nocedal book.\n\n                    alpha.resize(data.size());\n                    for (unsigned long i = data.size()-1; i < data.size(); --i)\n                    {\n                        alpha[i] = data[i].rho*dot(data[i].s, prev_direction);\n                        prev_direction -= alpha[i]*data[i].y;\n                    }\n\n                    // Take a guess at what the first H matrix should be.  This formula below is what is suggested\n                    // in the book Numerical Optimization by Nocedal and Wright in the chapter on Large Scale \n                    // Unconstrained Optimization (in the L-BFGS section).\n                    double H_0 = 1.0/data[data.size()-1].rho/dot(data[data.size()-1].y, data[data.size()-1].y);\n                    H_0 = put_in_range(0.001, 1000.0, H_0);\n                    prev_direction *= H_0;\n\n                    for (unsigned long i = 0; i < data.size(); ++i)\n                    {\n                        double beta = data[i].rho*dot(data[i].y, prev_direction);\n                        prev_direction += data[i].s * (alpha[i] - beta);\n                    }\n                }\n\n            }\n\n            if (data.size() > max_size)\n            {\n                // remove the oldest element in the data sequence\n                data.remove(0, dh_temp);\n            }\n\n            prev_x = x;\n            prev_derivative = funct_derivative;\n            return prev_direction;\n        }\n\n    private:\n\n        struct data_helper\n        {\n            matrix<double,0,1> s;\n            matrix<double,0,1> y;\n            double rho;\n\n            friend void swap(data_helper& a, data_helper& b)\n            {\n                a.s.swap(b.s);\n                a.y.swap(b.y);\n                std::swap(a.rho, b.rho);\n            }\n        };\n        sequence<data_helper>::kernel_2a data;\n\n        unsigned long max_size;\n        bool been_used;\n        matrix<double,0,1> prev_x;\n        matrix<double,0,1> prev_derivative;\n        matrix<double,0,1> prev_direction;\n        std::vector<double> alpha;\n\n        data_helper dh_temp;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename hessian_funct>\n    class newton_search_strategy_obj\n    {\n    public:\n        explicit newton_search_strategy_obj(\n            const hessian_funct& hess\n        ) : hessian(hess) {}\n\n        double get_wolfe_rho (\n        ) const { return 0.01; }\n\n        double get_wolfe_sigma (\n        ) const { return 0.9; }\n\n        unsigned long get_max_line_search_iterations (\n        ) const { return 100; }\n\n        template <typename T>\n        const matrix<double,0,1> get_next_direction (\n            const T& x,\n            const double ,\n            const T& funct_derivative\n        )\n        {\n            return -inv(hessian(x))*funct_derivative;\n        }\n\n    private:\n        hessian_funct hessian;\n    };\n\n    template <typename hessian_funct>\n    newton_search_strategy_obj<hessian_funct> newton_search_strategy (\n        hessian_funct hessian\n    ) { return newton_search_strategy_obj<hessian_funct>(hessian); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_SEARCH_STRATEGIES_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_search_strategies_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATIOn_SEARCH_STRATEGIES_ABSTRACT_\n#ifdef DLIB_OPTIMIZATIOn_SEARCH_STRATEGIES_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n    /*\n        A good discussion of the search strategies in this file can be found in the \n        following book:  Numerical Optimization by Nocedal and Wright.\n    */\n\n// ----------------------------------------------------------------------------------------\n\n    class cg_search_strategy\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a strategy for determining which direction\n                a line search should be carried out along.  This particular object\n                is an implementation of the Polak-Ribiere conjugate gradient method\n                for determining this direction.\n\n                This method uses an amount of memory that is linear in the number\n                of variables to be optimized.  So it is capable of handling problems\n                with a very large number of variables.  However, it is generally\n                not as good as the L-BFGS algorithm (which is defined below in\n                the lbfgs_search_strategy class).\n        !*/\n\n    public:\n        cg_search_strategy(\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to generate\n                  search directions.\n        !*/\n\n        double get_wolfe_rho (\n        ) const;\n        /*!\n            ensures\n                - returns the value of the Wolfe rho parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        double get_wolfe_sigma (\n        ) const; \n        /*!\n            ensures\n                - returns the value of the Wolfe sigma parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        unsigned long get_max_line_search_iterations (\n        ) const; \n        /*!\n            ensures\n                - returns the value of the max iterations parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        template <typename T>\n        const matrix<double,0,1>& get_next_direction (\n            const T& x,\n            const double funct_value,\n            const T& funct_derivative\n        );\n        /*!\n            requires\n                - this function is only called once per search iteration\n                - for some objective function f():\n                    - x == the search point for the current iteration\n                    - funct_value == f(x)\n                    - funct_derivative == derivative(f)(x)\n            ensures\n                - Assuming that a line search is going to be conducted starting from the point x,\n                  this function returns the direction in which the search should proceed.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class bfgs_search_strategy\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a strategy for determining which direction\n                a line search should be carried out along.  This particular object\n                is an implementation of the BFGS quasi-newton method for determining \n                this direction.\n\n                This method uses an amount of memory that is quadratic in the number\n                of variables to be optimized.  It is generally very effective but \n                if your problem has a very large number of variables then it isn't \n                appropriate.  Instead You should try the lbfgs_search_strategy.\n        !*/\n\n    public:\n        bfgs_search_strategy(\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to generate\n                  search directions.\n        !*/\n\n        double get_wolfe_rho (\n        ) const;\n        /*!\n            ensures\n                - returns the value of the Wolfe rho parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        double get_wolfe_sigma (\n        ) const; \n        /*!\n            ensures\n                - returns the value of the Wolfe sigma parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        unsigned long get_max_line_search_iterations (\n        ) const; \n        /*!\n            ensures\n                - returns the value of the max iterations parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        template <typename T>\n        const matrix<double,0,1>& get_next_direction (\n            const T& x,\n            const double funct_value,\n            const T& funct_derivative\n        );\n        /*!\n            requires\n                - this function is only called once per search iteration\n                - for some objective function f():\n                    - x == the search point for the current iteration\n                    - funct_value == f(x)\n                    - funct_derivative == derivative(f)(x)\n            ensures\n                - Assuming that a line search is going to be conducted starting from the point x,\n                  this function returns the direction in which the search should proceed.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class lbfgs_search_strategy\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a strategy for determining which direction\n                a line search should be carried out along.  This particular object\n                is an implementation of the L-BFGS quasi-newton method for determining \n                this direction.\n\n                This method uses an amount of memory that is linear in the number\n                of variables to be optimized.  This makes it an excellent method \n                to use when an optimization problem has a large number of variables.\n        !*/\n    public:\n        explicit lbfgs_search_strategy(\n            unsigned long max_size\n        ); \n        /*!\n            requires\n                - max_size > 0\n            ensures\n                - This object is properly initialized and ready to generate\n                  search directions.\n                - L-BFGS works by remembering a certain number of position and gradient \n                  pairs.  It uses this remembered information to compute search directions.\n                  The max_size argument determines how many of these pairs will be remembered.\n                  Typically, using between 3 and 30 pairs performs well for many problems.\n        !*/\n\n        double get_wolfe_rho (\n        ) const;\n        /*!\n            ensures\n                - returns the value of the Wolfe rho parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        double get_wolfe_sigma (\n        ) const; \n        /*!\n            ensures\n                - returns the value of the Wolfe sigma parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        unsigned long get_max_line_search_iterations (\n        ) const; \n        /*!\n            ensures\n                - returns the value of the max iterations parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        template <typename T>\n        const matrix<double,0,1>& get_next_direction (\n            const T& x,\n            const double funct_value,\n            const T& funct_derivative\n        );\n        /*!\n            requires\n                - this function is only called once per search iteration\n                - for some objective function f():\n                    - x == the search point for the current iteration\n                    - funct_value == f(x)\n                    - funct_derivative == derivative(f)(x)\n            ensures\n                - Assuming that a line search is going to be conducted starting from the point x,\n                  this function returns the direction in which the search should proceed.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename hessian_funct\n        >\n    class newton_search_strategy_obj\n    {\n        /*!\n            REQUIREMENTS ON hessian_funct\n                Objects of hessian_funct type must be function objects which\n                take a single argument and return a dlib::matrix of doubles.  The\n                single argument must be a dlib::matrix capable of representing\n                column vectors of doubles.  hessian_funct must also be copy \n                constructable.  \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a strategy for determining which direction\n                a line search should be carried out along.  This particular object\n                is an implementation of the newton method for determining this \n                direction.  That is, it uses the following formula to determine\n                the direction:\n                    search_direction = -inv(hessian(x))*derivative\n        !*/\n    public:\n        explicit newton_search_strategy_obj(\n            const hessian_funct& hess\n        ); \n        /*!\n            ensures\n                - This object is properly initialized and ready to generate\n                  search directions.\n                - hess will be used by this object to generate the needed hessian\n                  matrices every time get_next_direction() is called.\n        !*/\n\n        double get_wolfe_rho (\n        ) const;\n        /*!\n            ensures\n                - returns the value of the Wolfe rho parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        double get_wolfe_sigma (\n        ) const; \n        /*!\n            ensures\n                - returns the value of the Wolfe sigma parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        unsigned long get_max_line_search_iterations (\n        ) const; \n        /*!\n            ensures\n                - returns the value of the max iterations parameter that should be used when \n                  this search strategy is used with the line_search() function.\n        !*/\n\n        template <typename T>\n        const matrix<double,0,1> get_next_direction (\n            const T& x,\n            const double funct_value,\n            const T& funct_derivative\n        );\n        /*!\n            requires\n                - for some objective function f():\n                    - x == the search point for the current iteration\n                    - funct_value == f(x)\n                    - funct_derivative == derivative(f)(x)\n            ensures\n                - Assuming that a line search is going to be conducted starting from the \n                  point x, this function returns the direction in which the search should \n                  proceed.\n                - In particular, the search direction will be given by:\n                    - search_direction = -inv(hessian(x))*funct_derivative\n        !*/\n\n    };\n\n    template <typename hessian_funct>\n    newton_search_strategy_obj<hessian_funct> newton_search_strategy (\n        hessian_funct hessian\n    ) { return newton_search_strategy_obj<hessian_funct>(hessian); }\n    /*!\n        ensures\n            - constructs and returns a newton_search_strategy_obj.  \n              This function is just a helper to make the syntax for creating\n              these objects a little simpler.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_SEARCH_STRATEGIES_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_solve_qp2_using_smo.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOLVE_QP2_USING_SMo_Hh_\n#define DLIB_SOLVE_QP2_USING_SMo_Hh_\n\n#include \"optimization_solve_qp2_using_smo_abstract.h\"\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    class invalid_nu_error : public dlib::error \n    { \n    public: \n        invalid_nu_error(const std::string& msg, double nu_) : dlib::error(msg), nu(nu_) {};\n        const double nu;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    typename T::type maximum_nu_impl (\n        const T& y\n    )\n    {\n        typedef typename T::type scalar_type;\n        // make sure requires clause is not broken\n        DLIB_ASSERT(y.size() > 1 && is_col_vector(y),\n            \"\\ttypedef T::type maximum_nu(y)\"\n            << \"\\n\\ty should be a column vector with more than one entry\"\n            << \"\\n\\ty.nr(): \" << y.nr() \n            << \"\\n\\ty.nc(): \" << y.nc() \n            );\n\n        long pos_count = 0;\n        long neg_count = 0;\n        for (long r = 0; r < y.nr(); ++r)\n        {\n            if (y(r) == 1.0)\n            {\n                ++pos_count;\n            }\n            else if (y(r) == -1.0)\n            {\n                ++neg_count;\n            }\n            else\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT(y(r) == -1.0 || y(r) == 1.0,\n                       \"\\ttypedef T::type maximum_nu(y)\"\n                       << \"\\n\\ty should contain only 1 and 0 entries\"\n                       << \"\\n\\tr:    \" << r \n                       << \"\\n\\ty(r): \" << y(r) \n                );\n            }\n        }\n        return static_cast<scalar_type>(2.0*(scalar_type)std::min(pos_count,neg_count)/(scalar_type)y.nr());\n    }\n\n    template <\n        typename T\n        >\n    typename T::type maximum_nu (\n        const T& y\n    )\n    {\n        return maximum_nu_impl(mat(y));\n    }\n\n    template <\n        typename T\n        >\n    typename T::value_type maximum_nu (\n        const T& y\n    )\n    {\n        return maximum_nu_impl(mat(y));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class solve_qp2_using_smo\n    {\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n\n        template <\n            typename EXP1,\n            typename EXP2,\n            long NR\n            >\n        unsigned long operator() ( \n            const matrix_exp<EXP1>& Q,\n            const matrix_exp<EXP2>& y,\n            const scalar_type nu,\n            matrix<scalar_type,NR,1,mem_manager_type, layout_type>& alpha,\n            scalar_type eps\n        ) \n        {\n            DLIB_ASSERT(Q.nr() == Q.nc() && y.size() == Q.nr() && y.size() > 1 && is_col_vector(y) &&\n                        sum((y == +1) + (y == -1)) == y.size() &&\n                        0 < nu && nu <= 1 &&\n                        eps > 0,\n                \"\\t void solve_qp2_using_smo::operator()\"\n                << \"\\n\\t invalid arguments were given to this function\"\n                << \"\\n\\t Q.nr():                     \" << Q.nr() \n                << \"\\n\\t Q.nc():                     \" << Q.nc() \n                << \"\\n\\t is_col_vector(y):           \" << is_col_vector(y) \n                << \"\\n\\t y.size():                   \" << y.size() \n                << \"\\n\\t sum((y == +1) + (y == -1)): \" << sum((y == +1) + (y == -1)) \n                << \"\\n\\t nu:                         \" << nu \n                << \"\\n\\t eps:                        \" << eps \n                );\n\n            alpha.set_size(Q.nr(),1);\n            df.set_size(Q.nr());\n\n            // now initialize alpha\n            set_initial_alpha(y, nu, alpha);\n\n            const scalar_type tau = 1e-12;\n\n            typedef typename colm_exp<EXP1>::type col_type;\n\n            set_all_elements(df, 0);\n            // initialize df.  Compute df = Q*alpha\n            for (long r = 0; r < df.nr(); ++r)\n            {\n                if (alpha(r) != 0)\n                {\n                    df += alpha(r)*matrix_cast<scalar_type>(colm(Q,r));\n                }\n            }\n\n            unsigned long count = 0;\n\n            // now perform the actual optimization of alpha\n            long i=0, j=0;\n            while (find_working_group(y,alpha,Q,df,tau,eps,i,j))\n            {\n                ++count;\n                const scalar_type old_alpha_i = alpha(i);\n                const scalar_type old_alpha_j = alpha(j);\n\n                optimize_working_pair(alpha,Q,df,tau,i,j);\n\n                // update the df vector now that we have modified alpha(i) and alpha(j)\n                scalar_type delta_alpha_i = alpha(i) - old_alpha_i;\n                scalar_type delta_alpha_j = alpha(j) - old_alpha_j;\n\n                col_type Q_i = colm(Q,i);\n                col_type Q_j = colm(Q,j);\n                for(long k = 0; k < df.nr(); ++k)\n                    df(k) += Q_i(k)*delta_alpha_i + Q_j(k)*delta_alpha_j;\n            }\n\n            return count;\n        }\n\n        const column_matrix& get_gradient (\n        ) const { return df; }\n\n    private:\n\n    // -------------------------------------------------------------------------------------\n\n        template <\n            typename scalar_type,\n            typename scalar_vector_type,\n            typename scalar_vector_type2\n            >\n        inline void set_initial_alpha (\n            const scalar_vector_type& y,\n            const scalar_type nu,\n            scalar_vector_type2& alpha\n        ) const\n        {\n            set_all_elements(alpha,0);\n            const scalar_type l = y.nr();\n            scalar_type temp = nu*l/2;\n            long num = (long)std::floor(temp);\n            long num_total = (long)std::ceil(temp);\n\n            bool has_slack = false;\n            int count = 0;\n            for (int i = 0; i < alpha.nr(); ++i)\n            {\n                if (y(i) == 1)\n                {\n                    if (count < num)\n                    {\n                        ++count;\n                        alpha(i) = 1;\n                    }\n                    else \n                    {\n                        has_slack = true;\n                        if (num_total > num)\n                        {\n                            ++count;\n                            alpha(i) = temp - std::floor(temp);\n                        }\n                        break;\n                    }\n                }\n            }\n\n            if (count != num_total || has_slack == false)\n            {\n                std::ostringstream sout;\n                sout << \"Invalid nu of \" << nu << \".  It is required that: 0 < nu < \" << 2*(scalar_type)count/y.nr();\n                throw invalid_nu_error(sout.str(),nu);\n            }\n\n            has_slack = false;\n            count = 0;\n            for (int i = 0; i < alpha.nr(); ++i)\n            {\n                if (y(i) == -1)\n                {\n                    if (count < num)\n                    {\n                        ++count;\n                        alpha(i) = 1;\n                    }\n                    else \n                    {\n                        has_slack = true;\n                        if (num_total > num)\n                        {\n                            ++count;\n                            alpha(i) = temp - std::floor(temp);\n                        }\n                        break;\n                    }\n                }\n            }\n\n            if (count != num_total || has_slack == false)\n            {\n                std::ostringstream sout;\n                sout << \"Invalid nu of \" << nu << \".  It is required that: 0 < nu < \" << 2*(scalar_type)count/y.nr();\n                throw invalid_nu_error(sout.str(),nu);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename scalar_vector_type,\n            typename scalar_type,\n            typename EXP,\n            typename U, typename V\n            >\n        inline bool find_working_group (\n            const V& y,\n            const U& alpha,\n            const matrix_exp<EXP>& Q,\n            const scalar_vector_type& df,\n            const scalar_type tau,\n            const scalar_type eps,\n            long& i_out,\n            long& j_out\n        ) const\n        {\n            using namespace std;\n            long ip = 0;\n            long jp = 0;\n            long in = 0;\n            long jn = 0;\n\n\n            typedef typename colm_exp<EXP>::type col_type;\n            typedef typename diag_exp<EXP>::type diag_type;\n\n            scalar_type ip_val = -numeric_limits<scalar_type>::infinity();\n            scalar_type jp_val = numeric_limits<scalar_type>::infinity();\n            scalar_type in_val = -numeric_limits<scalar_type>::infinity();\n            scalar_type jn_val = numeric_limits<scalar_type>::infinity();\n\n            // loop over the alphas and find the maximum ip and in indices.\n            for (long i = 0; i < alpha.nr(); ++i)\n            {\n                if (y(i) == 1)\n                {\n                    if (alpha(i) < 1.0)\n                    {\n                        if (-df(i) > ip_val)\n                        {\n                            ip_val = -df(i);\n                            ip = i;\n                        }\n                    }\n                }\n                else\n                {\n                    if (alpha(i) > 0.0)\n                    {\n                        if (df(i) > in_val)\n                        {\n                            in_val = df(i);\n                            in = i;\n                        }\n                    }\n                }\n            }\n\n            scalar_type Mp = numeric_limits<scalar_type>::infinity();\n            scalar_type Mn = numeric_limits<scalar_type>::infinity();\n\n            // Pick out the columns and diagonal of Q we need below.  Doing\n            // it this way is faster if Q is actually a symmetric_matrix_cache\n            // object.\n            col_type Q_ip = colm(Q,ip);\n            col_type Q_in = colm(Q,in);\n            diag_type Q_diag = diag(Q);\n\n\n\n            // now we need to find the minimum jp and jn indices\n            for (long j = 0; j < alpha.nr(); ++j)\n            {\n                if (y(j) == 1)\n                {\n                    if (alpha(j) > 0.0)\n                    {\n                        scalar_type b = ip_val + df(j);\n                        if (-df(j) < Mp)\n                            Mp = -df(j);\n\n                        if (b > 0)\n                        {\n                            scalar_type a = Q_ip(ip) + Q_diag(j) - 2*Q_ip(j); \n                            if (a <= 0)\n                                a = tau;\n                            scalar_type temp = -b*b/a;\n                            if (temp < jp_val)\n                            {\n                                jp_val = temp;\n                                jp = j;\n                            }\n                        }\n                    }\n                }\n                else\n                {\n                    if (alpha(j) < 1.0)\n                    {\n                        scalar_type b = in_val - df(j);\n                        if (df(j) < Mn)\n                            Mn = df(j);\n\n                        if (b > 0)\n                        {\n                            scalar_type a = Q_in(in) + Q_diag(j) - 2*Q_in(j); \n                            if (a <= 0)\n                                a = tau;\n                            scalar_type temp = -b*b/a;\n                            if (temp < jn_val)\n                            {\n                                jn_val = temp;\n                                jn = j;\n                            }\n                        }\n                    }\n                }\n            }\n\n            // if we are at the optimal point then return false so the caller knows\n            // to stop optimizing\n            if (std::max(ip_val - Mp, in_val - Mn) < eps)\n                return false;\n\n            if (jp_val < jn_val)\n            {\n                i_out = ip;\n                j_out = jp;\n            }\n            else\n            {\n                i_out = in;\n                j_out = jn;\n            }\n\n            return true;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename EXP,\n            typename T, typename U\n            >\n        inline void optimize_working_pair (\n            T& alpha,\n            const matrix_exp<EXP>& Q,\n            const U& df,\n            const scalar_type tau,\n            const long i,\n            const long j\n        ) const\n        {\n            scalar_type quad_coef = Q(i,i)+Q(j,j)-2*Q(j,i);\n            if (quad_coef <= 0)\n                quad_coef = tau;\n            scalar_type delta = (df(i)-df(j))/quad_coef;\n            scalar_type sum = alpha(i) + alpha(j);\n            alpha(i) -= delta;\n            alpha(j) += delta;\n\n            if(sum > 1)\n            {\n                if(alpha(i) > 1)\n                {\n                    alpha(i) = 1;\n                    alpha(j) = sum - 1;\n                }\n                else if(alpha(j) > 1)\n                {\n                    alpha(j) = 1;\n                    alpha(i) = sum - 1;\n                }\n            }\n            else\n            {\n                if(alpha(j) < 0)\n                {\n                    alpha(j) = 0;\n                    alpha(i) = sum;\n                }\n                else if(alpha(i) < 0)\n                {\n                    alpha(i) = 0;\n                    alpha(j) = sum;\n                }\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        column_matrix df; // gradient of f(alpha)\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SOLVE_QP2_USING_SMo_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_solve_qp2_using_smo_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATION_SOLVE_QP2_USING_SMO_ABSTRACT_H_\n#ifdef DLIB_OPTIMIZATION_SOLVE_QP2_USING_SMO_ABSTRACT_H_\n\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class invalid_nu_error : public dlib::error \n    { \n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is an exception class used to indicate that a\n                value of nu given to the solve_qp2_using_smo object is incompatible \n                with the constraints of the quadratic program.\n\n                this->nu will be set to the invalid value of nu used.\n        !*/\n\n    public: \n        invalid_nu_error(const std::string& msg, double nu_) : dlib::error(msg), nu(nu_) {};\n        const double nu;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    typename T::type maximum_nu (\n        const T& y\n    );\n    /*!\n        requires\n            - T == a matrix object or an object convertible to a matrix via mat()\n            - is_col_vector(y) == true\n            - y.size() > 1\n            - sum((y == +1) + (y == -1)) == y.size()\n              (i.e. all elements of y must be equal to +1 or -1)\n        ensures\n            - returns the maximum valid nu that can be used with solve_qp2_using_smo and\n              the given y vector.\n              (i.e. 2.0*min(sum(y == +1), sum(y == -1))/y.size())\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class solve_qp2_using_smo\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                Must be some type of dlib::matrix.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for solving the following quadratic programming\n                problem using the sequential minimal optimization algorithm:  \n\n                  Minimize: f(alpha) == 0.5*trans(alpha)*Q*alpha \n                  subject to the following constraints:\n                    - sum(alpha) == nu*y.size() \n                    - 0 <= min(alpha) && max(alpha) <= 1 \n                    - trans(y)*alpha == 0\n\n                  Where all elements of y must be equal to +1 or -1 and f is convex.  \n                  This means that Q should be symmetric and positive-semidefinite.\n                \n                \n                This object implements the strategy used by the LIBSVM tool.  The following papers\n                can be consulted for additional details:\n                    - Chang and Lin, Training {nu}-Support Vector Classifiers: Theory and Algorithms\n                    - Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support vector \n                      machines, 2001. Software available at http://www.csie.ntu.edu.tw/~cjlin/libsvm\n        !*/\n\n    public:\n\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n        template <\n            typename EXP1,\n            typename EXP2,\n            long NR\n            >\n        unsigned long operator() ( \n            const matrix_exp<EXP1>& Q,\n            const matrix_exp<EXP2>& y,\n            const scalar_type nu,\n            matrix<scalar_type,NR,1,mem_manager_type, layout_type>& alpha,\n            scalar_type eps\n        );\n        /*!\n            requires\n                - Q.nr() == Q.nc()\n                - is_col_vector(y) == true\n                - y.size() == Q.nr()\n                - y.size() > 1\n                - sum((y == +1) + (y == -1)) == y.size()\n                  (i.e. all elements of y must be equal to +1 or -1)\n                - alpha must be capable of representing a vector of size y.size() elements\n                - 0 < nu <= 1\n                - eps > 0\n            ensures\n                - This function solves the quadratic program defined in this class's main comment.\n                - The solution to the quadratic program will be stored in #alpha.\n                - #alpha.size() == y.size()\n                - This function uses an implementation of the sequential minimal optimization \n                  algorithm.  It runs until the KKT violation is less than eps.  So eps controls \n                  how accurate the solution is and smaller values result in better solutions.\n                  (a reasonable eps is usually about 1e-3)\n                - #get_gradient() == Q*(#alpha)\n                  (i.e. stores the gradient of f() at #alpha in get_gradient())\n                - returns the number of iterations performed.  \n            throws\n                - invalid_nu_error\n                  This exception is thrown if nu >= maximum_nu(y).  \n                  (some values of nu cause the constraints to become impossible to satisfy. \n                  If this is detected then an exception is thrown).\n        !*/\n\n        const column_matrix& get_gradient (\n        ) const;\n        /*!\n            ensures\n                - returns the gradient vector at the solution of the last problem solved\n                  by this object.  If no problem has been solved then returns an empty\n                  vector.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATION_SOLVE_QP2_USING_SMO_ABSTRACT_H_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_solve_qp3_using_smo.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOLVE_QP3_USING_SMo_Hh_\n#define DLIB_SOLVE_QP3_USING_SMo_Hh_\n\n#include \"optimization_solve_qp3_using_smo_abstract.h\"\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    class invalid_qp3_error : public dlib::error \n    { \n\n    public: \n        invalid_qp3_error(\n            const std::string& msg, \n            double B_,\n            double Cp_,\n            double Cn_\n        ) : \n            dlib::error(msg), \n            B(B_),\n            Cp(Cp_),\n            Cn(Cn_)\n        {};\n\n        const double B;\n        const double Cp;\n        const double Cn;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class solve_qp3_using_smo\n    {\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n\n        template <\n            typename EXP1,\n            typename EXP2,\n            typename EXP3,\n            long NR\n            >\n        unsigned long operator() ( \n            const matrix_exp<EXP1>& Q,\n            const matrix_exp<EXP2>& p,\n            const matrix_exp<EXP3>& y,\n            const scalar_type B,\n            const scalar_type Cp,\n            const scalar_type Cn,\n            matrix<scalar_type,NR,1,mem_manager_type, layout_type>& alpha,\n            scalar_type eps\n        ) \n        {\n            DLIB_ASSERT(Q.nr() == Q.nc() && y.size() == Q.nr() && p.size() == y.size() && \n                        y.size() > 0 && is_col_vector(y) && is_col_vector(p) &&\n                        sum((y == +1) + (y == -1)) == y.size() &&\n                        Cp > 0 && Cn > 0 &&\n                        eps > 0,\n                \"\\t void solve_qp3_using_smo::operator()\"\n                << \"\\n\\t invalid arguments were given to this function\"\n                << \"\\n\\t Q.nr():                     \" << Q.nr() \n                << \"\\n\\t Q.nc():                     \" << Q.nc() \n                << \"\\n\\t is_col_vector(p):           \" << is_col_vector(p) \n                << \"\\n\\t p.size():                   \" << p.size() \n                << \"\\n\\t is_col_vector(y):           \" << is_col_vector(y) \n                << \"\\n\\t y.size():                   \" << y.size() \n                << \"\\n\\t sum((y == +1) + (y == -1)): \" << sum((y == +1) + (y == -1)) \n                << \"\\n\\t Cp:                         \" << Cp\n                << \"\\n\\t Cn:                         \" << Cn\n                << \"\\n\\t eps:                        \" << eps \n                );\n\n\n\n            set_initial_alpha(y, B, Cp, Cn, alpha);\n\n\n            const scalar_type tau = 1e-12;\n\n            typedef typename colm_exp<EXP1>::type col_type;\n\n            // initialize df.  Compute df = Q*alpha + p\n            df = p;\n            for (long r = 0; r < df.nr(); ++r)\n            {\n                if (alpha(r) != 0)\n                {\n                    df += alpha(r)*matrix_cast<scalar_type>(colm(Q,r));\n                }\n            }\n\n            unsigned long count = 0;\n            // now perform the actual optimization of alpha\n            long i=0, j=0;\n            while (find_working_group(y,alpha,Q,df,Cp,Cn,tau,eps,i,j))\n            {\n                ++count;\n                const scalar_type old_alpha_i = alpha(i);\n                const scalar_type old_alpha_j = alpha(j);\n\n                optimize_working_pair(alpha,Q,y,df,tau,i,j, Cp, Cn );\n\n                // update the df vector now that we have modified alpha(i) and alpha(j)\n                scalar_type delta_alpha_i = alpha(i) - old_alpha_i;\n                scalar_type delta_alpha_j = alpha(j) - old_alpha_j;\n\n                col_type Q_i = colm(Q,i);\n                col_type Q_j = colm(Q,j);\n                for(long k = 0; k < df.nr(); ++k)\n                    df(k) += Q_i(k)*delta_alpha_i + Q_j(k)*delta_alpha_j;\n            }\n\n            return count;\n        }\n\n        const column_matrix& get_gradient (\n        ) const { return df; }\n\n    private:\n\n    // -------------------------------------------------------------------------------------\n\n        template <\n            typename scalar_type,\n            typename scalar_vector_type,\n            typename scalar_vector_type2\n            >\n        inline void set_initial_alpha (\n            const scalar_vector_type& y,\n            const scalar_type B,\n            const scalar_type Cp,\n            const scalar_type Cn,\n            scalar_vector_type2& alpha\n        ) const\n        {\n            alpha.set_size(y.size());\n\n            set_all_elements(alpha,0);\n\n            // It's easy in the B == 0 case\n            if (B == 0)\n                return;\n\n            const scalar_type C = (B > 0)?  Cp : Cn;\n\n            scalar_type temp = std::abs(B)/C;\n            long num = (long)std::floor(temp);\n            long num_total = (long)std::ceil(temp);\n\n            const scalar_type B_sign = (B > 0)? 1 : -1;\n\n            long count = 0;\n            for (long i = 0; i < alpha.nr(); ++i)\n            {\n                if (y(i) == B_sign)\n                {\n                    if (count < num)\n                    {\n                        ++count;\n                        alpha(i) = C;\n                    }\n                    else \n                    {\n                        if (count < num_total)\n                        {\n                            ++count;\n                            alpha(i) = C*(temp - std::floor(temp));\n                        }\n                        break;\n                    }\n                }\n            }\n\n            if (count != num_total)\n            {\n                std::ostringstream sout;\n                sout << \"Invalid QP3 constraint parameters of B: \" << B << \", Cp: \" << Cp << \", Cn: \"<< Cn;\n                throw invalid_qp3_error(sout.str(),B,Cp,Cn);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename scalar_vector_type,\n            typename scalar_type,\n            typename EXP,\n            typename U, typename V\n            >\n        inline bool find_working_group (\n            const V& y,\n            const U& alpha,\n            const matrix_exp<EXP>& Q,\n            const scalar_vector_type& df,\n            const scalar_type Cp,\n            const scalar_type Cn,\n            const scalar_type tau,\n            const scalar_type eps,\n            long& i_out,\n            long& j_out\n        ) const\n        {\n            using namespace std;\n\n            long ip = 0;\n            long jp = 0;\n\n\n            typedef typename colm_exp<EXP>::type col_type;\n            typedef typename diag_exp<EXP>::type diag_type;\n\n            scalar_type ip_val = -numeric_limits<scalar_type>::infinity();\n            scalar_type jp_val = numeric_limits<scalar_type>::infinity();\n\n            // loop over the alphas and find the maximum ip and in indices.\n            for (long i = 0; i < alpha.nr(); ++i)\n            {\n                if (y(i) == 1)\n                {\n                    if (alpha(i) < Cp)\n                    {\n                        if (-df(i) > ip_val)\n                        {\n                            ip_val = -df(i);\n                            ip = i;\n                        }\n                    }\n                }\n                else\n                {\n                    if (alpha(i) > 0.0)\n                    {\n                        if (df(i) > ip_val)\n                        {\n                            ip_val = df(i);\n                            ip = i;\n                        }\n                    }\n                }\n            }\n\n            scalar_type Mp = -numeric_limits<scalar_type>::infinity();\n\n            // Pick out the column and diagonal of Q we need below.  Doing\n            // it this way is faster if Q is actually a symmetric_matrix_cache\n            // object.\n            col_type Q_ip = colm(Q,ip);\n            diag_type Q_diag = diag(Q);\n\n\n\n            // now we need to find the minimum jp indices\n            for (long j = 0; j < alpha.nr(); ++j)\n            {\n                if (y(j) == 1)\n                {\n                    if (alpha(j) > 0.0)\n                    {\n                        scalar_type b = ip_val + df(j);\n                        if (df(j) > Mp)\n                            Mp = df(j);\n\n                        if (b > 0)\n                        {\n                            scalar_type a = Q_ip(ip) + Q_diag(j) - 2*y(ip)*Q_ip(j); \n                            if (a <= 0)\n                                a = tau;\n                            scalar_type temp = -b*b/a;\n                            if (temp < jp_val)\n                            {\n                                jp_val = temp;\n                                jp = j;\n                            }\n                        }\n                    }\n                }\n                else\n                {\n                    if (alpha(j) < Cn)\n                    {\n                        scalar_type b = ip_val - df(j);\n                        if (-df(j) > Mp)\n                            Mp = -df(j);\n\n                        if (b > 0)\n                        {\n                            scalar_type a = Q_ip(ip) + Q_diag(j) + 2*y(ip)*Q_ip(j); \n                            if (a <= 0)\n                                a = tau;\n                            scalar_type temp = -b*b/a;\n                            if (temp < jp_val)\n                            {\n                                jp_val = temp;\n                                jp = j;\n                            }\n                        }\n                    }\n                }\n            }\n\n            // if we are at the optimal point then return false so the caller knows\n            // to stop optimizing\n            if (Mp + ip_val < eps)\n                return false;\n\n\n            i_out = ip;\n            j_out = jp;\n\n            return true;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename EXP,\n            typename EXP2,\n            typename T, typename U\n            >\n        inline void optimize_working_pair (\n            T& alpha,\n            const matrix_exp<EXP>& Q,\n            const matrix_exp<EXP2>& y,\n            const U& df,\n            const scalar_type& tau,\n            const long i,\n            const long j,\n            const scalar_type& Cp,\n            const scalar_type& Cn\n        ) const\n        {\n            const scalar_type Ci = (y(i) > 0 )? Cp : Cn;\n            const scalar_type Cj = (y(j) > 0 )? Cp : Cn;\n\n            if (y(i) != y(j))\n            {\n                scalar_type quad_coef = Q(i,i)+Q(j,j)+2*Q(j,i);\n                if (quad_coef <= 0)\n                    quad_coef = tau;\n                scalar_type delta = (-df(i)-df(j))/quad_coef;\n                scalar_type diff = alpha(i) - alpha(j);\n                alpha(i) += delta;\n                alpha(j) += delta;\n\n                if (diff > 0)\n                {\n                    if (alpha(j) < 0)\n                    {\n                        alpha(j) = 0;\n                        alpha(i) = diff;\n                    }\n                }\n                else\n                {\n                    if (alpha(i) < 0)\n                    {\n                        alpha(i) = 0;\n                        alpha(j) = -diff;\n                    }\n                }\n\n                if (diff > Ci - Cj)\n                {\n                    if (alpha(i) > Ci)\n                    {\n                        alpha(i) = Ci;\n                        alpha(j) = Ci - diff;\n                    }\n                }\n                else\n                {\n                    if (alpha(j) > Cj)\n                    {\n                        alpha(j) = Cj;\n                        alpha(i) = Cj + diff;\n                    }\n                }\n            }\n            else\n            {\n                scalar_type quad_coef = Q(i,i)+Q(j,j)-2*Q(j,i);\n                if (quad_coef <= 0)\n                    quad_coef = tau;\n                scalar_type delta = (df(i)-df(j))/quad_coef;\n                scalar_type sum = alpha(i) + alpha(j);\n                alpha(i) -= delta;\n                alpha(j) += delta;\n\n                if(sum > Ci)\n                {\n                    if(alpha(i) > Ci)\n                    {\n                        alpha(i) = Ci;\n                        alpha(j) = sum - Ci;\n                    }\n                }\n                else\n                {\n                    if(alpha(j) < 0)\n                    {\n                        alpha(j) = 0;\n                        alpha(i) = sum;\n                    }\n                }\n\n                if(sum > Cj)\n                {\n                    if(alpha(j) > Cj)\n                    {\n                        alpha(j) = Cj;\n                        alpha(i) = sum - Cj;\n                    }\n                }\n                else\n                {\n                    if(alpha(i) < 0)\n                    {\n                        alpha(i) = 0;\n                        alpha(j) = sum;\n                    }\n                }\n\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        column_matrix df; // gradient of f(alpha)\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SOLVE_QP3_USING_SMo_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_solve_qp3_using_smo_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATION_SOLVE_QP3_USING_SMO_ABSTRACT_H_\n#ifdef DLIB_OPTIMIZATION_SOLVE_QP3_USING_SMO_ABSTRACT_H_\n\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class invalid_qp3_error : public dlib::error \n    { \n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is an exception class used to indicate that the values \n                of B, Cp, and Cn given to the solve_qp3_using_smo object are incompatible \n                with the constraints of the quadratic program.\n\n                this->B, this->Cp, and this->Cn will be set to the invalid values used.\n        !*/\n\n    public: \n        invalid_qp3_error( const std::string& msg, double B_, double Cp_, double Cn_) : \n            dlib::error(msg), B(B_), Cp(Cp_), Cn(Cn_) {};\n\n        const double B;\n        const double Cp;\n        const double Cn;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class solve_qp3_using_smo\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                Must be some type of dlib::matrix.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for solving the following quadratic programming\n                problem using the sequential minimal optimization algorithm:  \n\n                  Minimize: f(alpha) == 0.5*trans(alpha)*Q*alpha + trans(p)*alpha\n                  subject to the following constraints:\n                    - for all i such that y(i) == +1:  0 <= alpha(i) <= Cp \n                    - for all i such that y(i) == -1:  0 <= alpha(i) <= Cn \n                    - trans(y)*alpha == B \n\n                  Where all elements of y must be equal to +1 or -1 and f is convex.  \n                  This means that Q should be symmetric and positive-semidefinite.\n                \n                \n                This object implements the strategy used by the LIBSVM tool.  The following papers\n                can be consulted for additional details:\n                    - Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support vector \n                      machines, 2001. Software available at http://www.csie.ntu.edu.tw/~cjlin/libsvm\n                    - Working Set Selection Using Second Order Information for Training Support Vector Machines by\n                      Fan, Chen, and Lin.  In the Journal of Machine Learning Research 2005.\n        !*/\n\n    public:\n\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n        template <\n            typename EXP1,\n            typename EXP2,\n            typename EXP3,\n            long NR\n            >\n        unsigned long operator() ( \n            const matrix_exp<EXP1>& Q,\n            const matrix_exp<EXP2>& p,\n            const matrix_exp<EXP3>& y,\n            const scalar_type B,\n            const scalar_type Cp,\n            const scalar_type Cn,\n            matrix<scalar_type,NR,1,mem_manager_type, layout_type>& alpha,\n            scalar_type eps\n        );\n        /*!\n            requires\n                - Q.nr() == Q.nc()\n                - is_col_vector(y) == true\n                - is_col_vector(p) == true\n                - p.size() == y.size() == Q.nr()\n                - y.size() > 0\n                - sum((y == +1) + (y == -1)) == y.size()\n                  (i.e. all elements of y must be equal to +1 or -1)\n                - alpha must be capable of representing a vector of size y.size() elements\n                - Cp > 0\n                - Cn > 0\n                - eps > 0\n            ensures\n                - This function solves the quadratic program defined in this class's main comment.\n                - The solution to the quadratic program will be stored in #alpha.\n                - #alpha.size() == y.size()\n                - This function uses an implementation of the sequential minimal optimization \n                  algorithm.  It runs until the KKT violation is less than eps.  So eps controls \n                  how accurate the solution is and smaller values result in better solutions.\n                  (a reasonable eps is usually about 1e-3)\n                - #get_gradient() == Q*(#alpha)\n                  (i.e. stores the gradient of f() at #alpha in get_gradient())\n                - returns the number of iterations performed.  \n            throws\n                - invalid_qp3_error\n                  This exception is thrown if the given parameters cause the constraints\n                  of the quadratic programming problem to be impossible to satisfy. \n        !*/\n\n        const column_matrix& get_gradient (\n        ) const;\n        /*!\n            ensures\n                - returns the gradient vector at the solution of the last problem solved\n                  by this object.  If no problem has been solved then returns an empty\n                  vector.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATION_SOLVE_QP3_USING_SMO_ABSTRACT_H_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_solve_qp_using_smo.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATION_SOLVE_QP_UsING_SMO_Hh_\n#define DLIB_OPTIMIZATION_SOLVE_QP_UsING_SMO_Hh_\n\n#include \"optimization_solve_qp_using_smo_abstract.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*\n        The algorithm defined in the solve_qp_using_smo() function below can be\n        derived by using an important theorem from the theory of constrained optimization.\n        This theorem tells us that any optimal point of a constrained function must\n        satisfy what are called the KKT conditions (also sometimes called just the KT \n        conditions, especially in older literature).  A very good book to consult \n        regarding this topic is Practical Methods of Optimization (second edition) by \n        R. Fletcher.  Below I will try to explain the general idea of how this is \n        applied.\n\n        Let e == ones_matrix(alpha.size(),1)\n\n        First, note that the function below solves the following quadratic program.  \n            Minimize: f(alpha) == 0.5*trans(alpha)*Q*alpha - trans(alpha)*b\n            subject to the following constraints:\n                - trans(e)*alpha == C (i.e. the sum of alpha values doesn't change)\n                - min(alpha) >= 0 (i.e. all alpha values are nonnegative)\n            Where f is convex.  This means that Q should be positive-semidefinite.\n\n\n        To get from this problem formulation to the algorithm below we have to \n        consider the KKT conditions.  They tell us that any solution to the above\n        problem must satisfy the following 5 conditions:\n            1. trans(e)*alpha == C\n            2. min(alpha) >= 0\n\n            3. Let L(alpha, x, y) == f(alpha) - trans(x)*alpha - y*(trans(e)*alpha - C)\n               Where x is a vector of length alpha.size() and y is a single scalar.\n               Then the derivative of L with respect to alpha must == 0\n               So we get the following as our 3rd condition:\n               f'(alpha) - x - y*e == 0\n\n            4. min(x) >= 0 (i.e. all x values are nonnegative)\n            5. pointwise_multiply(x, alpha) == 0\n               (i.e. only one member of each x(i) and alpha(i) pair can be non-zero)\n        \n        \n        From 3 we can easily obtain this rule:\n            for all i: f'(alpha)(i) - x(i) == y\n\n        If we then consider 4 and 5 we see that we can infer that the following\n        must also be the case:\n            - if (alpha(i) > 0) then\n                - x(i) == 0\n                - f'(alpha)(i) == y\n            - else\n                - x(i) == some nonnegative number\n                - f'(alpha)(i) >= y\n\n        \n        The important thing to take away is the final rule.  It tells us that at the\n        optimal solution all elements of the gradient of f have the same value if \n        their corresponding alpha is non-zero.  It also tells us that all the other\n        gradient values are bigger than y.  We can use this information to help us\n        pick which alpha variables to optimize at each iteration. \n    */\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename T, long NR, long NC, typename MM, typename L\n        >\n    unsigned long solve_qp_using_smo ( \n        const matrix_exp<EXP1>& Q,\n        const matrix_exp<EXP2>& b,\n        matrix<T,NR,NC,MM,L>& alpha,\n        T eps,\n        unsigned long max_iter\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(Q.nr() == Q.nc() &&\n                     is_col_vector(b) &&\n                     is_col_vector(alpha) &&\n                     b.size() == alpha.size() &&\n                     b.size() == Q.nr() &&\n                     alpha.size() > 0 &&\n                     min(alpha) >= 0 &&\n                     eps > 0 &&\n                     max_iter > 0,\n                     \"\\t void solve_qp_using_smo()\"\n                     << \"\\n\\t Invalid arguments were given to this function\"\n                     << \"\\n\\t Q.nr():               \" << Q.nr()\n                     << \"\\n\\t Q.nc():               \" << Q.nc()\n                     << \"\\n\\t is_col_vector(b):     \" << is_col_vector(b)\n                     << \"\\n\\t is_col_vector(alpha): \" << is_col_vector(alpha)\n                     << \"\\n\\t b.size():             \" << b.size() \n                     << \"\\n\\t alpha.size():         \" << alpha.size() \n                     << \"\\n\\t Q.nr():               \" << Q.nr() \n                     << \"\\n\\t min(alpha):           \" << min(alpha) \n                     << \"\\n\\t eps:                  \" << eps \n                     << \"\\n\\t max_iter:             \" << max_iter \n        );\n\n        const T C = sum(alpha);\n\n        // Compute f'(alpha) (i.e. the gradient of f(alpha)) for the current alpha.  \n        matrix<T,NR,NC,MM,L> df = Q*alpha - b;\n\n        const T tau = 1000*std::numeric_limits<T>::epsilon();\n\n        T big, little;\n        unsigned long iter = 0;\n        for (; iter < max_iter; ++iter)\n        {\n            // Find the two elements of df that satisfy the following:\n            //    - little_idx == index_of_min(df)\n            //    - big_idx   == the index of the largest element in df such that alpha(big_idx) > 0\n            // These two indices will tell us which two alpha values are most in violation of the KKT \n            // optimality conditions.  \n            big = -std::numeric_limits<T>::max();\n            long big_idx = 0;\n            little = std::numeric_limits<T>::max();\n            long little_idx = 0;\n            for (long i = 0; i < df.nr(); ++i)\n            {\n                if (df(i) > big && alpha(i) > 0)\n                {\n                    big = df(i);\n                    big_idx = i;\n                }\n                if (df(i) < little)\n                {\n                    little = df(i);\n                    little_idx = i;\n                }\n            }\n\n            // Check if the KKT conditions are still violated and stop if so.  \n            //if (alpha(little_idx) > 0 && (big - little) < eps)\n            //    break;\n\n            // Check how big the duality gap is and stop when it goes below eps.  \n            // The duality gap is the gap between the objective value of the function\n            // we are optimizing and the value of its primal form.  This value is always \n            // greater than or equal to the distance to the optimum solution so it is a \n            // good way to decide if we should stop.   See the book referenced above for \n            // more information.  In particular, see the part about the Wolfe Dual.\n            if (trans(alpha)*df - C*little < eps)\n                break;\n\n\n            // Save these values, we will need them later.\n            const T old_alpha_big = alpha(big_idx);\n            const T old_alpha_little = alpha(little_idx);\n\n\n            // Now optimize the two variables we just picked. \n            T quad_coef = Q(big_idx,big_idx) + Q(little_idx,little_idx) - 2*Q(big_idx, little_idx);\n            if (quad_coef <= tau)\n                quad_coef = tau;\n            const T delta = (big - little)/quad_coef;\n            alpha(big_idx) -= delta;\n            alpha(little_idx) += delta;\n\n            // Make sure alpha stays feasible.  That is, make sure the updated alpha doesn't\n            // violate the non-negativity constraint.  \n            if (alpha(big_idx) < 0)\n            {\n                // Since an alpha can't be negative we will just set it to 0 and shift all the\n                // weight to the other alpha.\n                alpha(big_idx) = 0;\n                alpha(little_idx) = old_alpha_big + old_alpha_little;\n            }\n\n            // Every 300 iterations\n            if ((iter%300) == 299)\n            {\n                // Perform this form of the update every so often because doing so can help\n                // avoid the buildup of numerical errors you get with the alternate update\n                // below.\n                df = Q*alpha - b;\n            }\n            else\n            {\n                // Now update the gradient. We will perform the equivalent of: df = Q*alpha - b;\n                const T delta_alpha_big   = alpha(big_idx) - old_alpha_big;\n                const T delta_alpha_little = alpha(little_idx) - old_alpha_little;\n\n                for(long k = 0; k < df.nr(); ++k)\n                    df(k) += Q(big_idx,k)*delta_alpha_big + Q(little_idx,k)*delta_alpha_little;;\n            }\n        }\n\n        /*\n        using namespace std;\n        cout << \"SMO: \" << endl;\n        cout << \"   duality gap: \"<< trans(alpha)*df - C*min(df) << endl;\n        cout << \"   KKT gap:     \"<< big-little << endl;\n        cout << \"   iter:        \"<< iter+1 << endl;\n        cout << \"   eps:         \"<< eps << endl;\n        */\n\n        return iter+1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename EXP3,\n        typename T, long NR, long NC, typename MM, typename L\n        >\n    unsigned long solve_qp4_using_smo ( \n        const matrix_exp<EXP1>& A,\n        const matrix_exp<EXP2>& Q,\n        const matrix_exp<EXP3>& b,\n        matrix<T,NR,NC,MM,L>& alpha,\n        T eps,\n        unsigned long max_iter\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(A.nc() == alpha.size() &&\n                     Q.nr() == Q.nc() &&\n                     is_col_vector(b) &&\n                     is_col_vector(alpha) &&\n                     b.size() == alpha.size() &&\n                     b.size() == Q.nr() &&\n                     alpha.size() > 0 &&\n                     min(alpha) >= 0 &&\n                     eps > 0 &&\n                     max_iter > 0,\n                     \"\\t void solve_qp4_using_smo()\"\n                     << \"\\n\\t Invalid arguments were given to this function\"\n                     << \"\\n\\t A.nc():               \" << A.nc()\n                     << \"\\n\\t Q.nr():               \" << Q.nr()\n                     << \"\\n\\t Q.nc():               \" << Q.nc()\n                     << \"\\n\\t is_col_vector(b):     \" << is_col_vector(b)\n                     << \"\\n\\t is_col_vector(alpha): \" << is_col_vector(alpha)\n                     << \"\\n\\t b.size():             \" << b.size() \n                     << \"\\n\\t alpha.size():         \" << alpha.size() \n                     << \"\\n\\t Q.nr():               \" << Q.nr() \n                     << \"\\n\\t min(alpha):           \" << min(alpha) \n                     << \"\\n\\t eps:                  \" << eps \n                     << \"\\n\\t max_iter:             \" << max_iter \n        );\n\n        const T C = sum(alpha);\n\n        /*\n            For this optimization problem, it is the case that the optimal\n            value of lambda is given by a simple closed form expression if we\n            know the optimal alpha.  So what we will do is to just optimize \n            alpha and every now and then we will update lambda with its optimal\n            value.  Therefore, we use essentially the same method as the\n            solve_qp_using_smo() routine.  \n        */\n\n        // compute optimal lambda for current alpha\n        matrix<T,NR,1,MM,L> lambda = A*alpha;\n        lambda = lowerbound(lambda, 0);\n\n        // Compute f'(alpha) (i.e. the gradient of f(alpha) with respect to alpha) for the current alpha.  \n        matrix<T,NR,NC,MM,L> df = Q*alpha - b - trans(A)*lambda;\n\n        const T tau = 1000*std::numeric_limits<T>::epsilon();\n\n        T big, little;\n        unsigned long iter = 0;\n        for (; iter < max_iter; ++iter)\n        {\n            // Find the two elements of df that satisfy the following:\n            //    - little_idx == index_of_min(df)\n            //    - big_idx   == the index of the largest element in df such that alpha(big_idx) > 0\n            // These two indices will tell us which two alpha values are most in violation of the KKT \n            // optimality conditions.  \n            big = -std::numeric_limits<T>::max();\n            long big_idx = 0;\n            little = std::numeric_limits<T>::max();\n            long little_idx = 0;\n            for (long i = 0; i < df.nr(); ++i)\n            {\n                if (df(i) > big && alpha(i) > 0)\n                {\n                    big = df(i);\n                    big_idx = i;\n                }\n                if (df(i) < little)\n                {\n                    little = df(i);\n                    little_idx = i;\n                }\n            }\n\n            // Check how big the duality gap is and stop when it goes below eps.  \n            // The duality gap is the gap between the objective value of the function\n            // we are optimizing and the value of its primal form.  This value is always \n            // greater than or equal to the distance to the optimum solution so it is a \n            // good way to decide if we should stop.   \n            if (trans(alpha)*df - C*little < eps)\n            {\n                // compute optimal lambda and recheck the duality gap to make\n                // sure we have really converged.\n                lambda = A*alpha;\n                lambda = lowerbound(lambda, 0);\n                df = Q*alpha - b - trans(A)*lambda;\n\n                if (trans(alpha)*df - C*min(df) < eps)\n                    break;\n                else\n                    continue;\n            }\n\n\n            // Save these values, we will need them later.\n            const T old_alpha_big = alpha(big_idx);\n            const T old_alpha_little = alpha(little_idx);\n\n\n            // Now optimize the two variables we just picked. \n            T quad_coef = Q(big_idx,big_idx) + Q(little_idx,little_idx) - 2*Q(big_idx, little_idx);\n            if (quad_coef <= tau)\n                quad_coef = tau;\n            const T delta = (big - little)/quad_coef;\n            alpha(big_idx) -= delta;\n            alpha(little_idx) += delta;\n\n            // Make sure alpha stays feasible.  That is, make sure the updated alpha doesn't\n            // violate the non-negativity constraint.  \n            if (alpha(big_idx) < 0)\n            {\n                // Since an alpha can't be negative we will just set it to 0 and shift all the\n                // weight to the other alpha.\n                alpha(big_idx) = 0;\n                alpha(little_idx) = old_alpha_big + old_alpha_little;\n            }\n\n\n            // Every 300 iterations\n            if ((iter%300) == 299)\n            {\n                // compute the optimal lambda for the current alpha\n                lambda = A*alpha;\n                lambda = lowerbound(lambda, 0);\n\n                // Perform this form of the update every so often because doing so can help\n                // avoid the buildup of numerical errors you get with the alternate update\n                // below.\n                df = Q*alpha - b - trans(A)*lambda;\n            }\n            else\n            {\n                // Now update the gradient. We will perform the equivalent of: df = Q*alpha - b;\n                const T delta_alpha_big   = alpha(big_idx) - old_alpha_big;\n                const T delta_alpha_little = alpha(little_idx) - old_alpha_little;\n\n                for(long k = 0; k < df.nr(); ++k)\n                    df(k) += Q(big_idx,k)*delta_alpha_big + Q(little_idx,k)*delta_alpha_little;;\n            }\n        }\n\n        /*\n        using namespace std;\n        cout << \"SMO: \" << endl;\n        cout << \"   duality gap: \"<< trans(alpha)*df - C*min(df) << endl;\n        cout << \"   KKT gap:     \"<< big-little << endl;\n        cout << \"   iter:        \"<< iter+1 << endl;\n        cout << \"   eps:         \"<< eps << endl;\n        */\n\n\n        return iter+1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATION_SOLVE_QP_UsING_SMO_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_solve_qp_using_smo_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATION_SOLVE_QP_UsING_SMO_ABSTRACT_Hh_\n#ifdef DLIB_OPTIMIZATION_SOLVE_QP_UsING_SMO_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename T, long NR, long NC, typename MM, typename L\n        >\n    unsigned long solve_qp_using_smo ( \n        const matrix_exp<EXP1>& Q,\n        const matrix_exp<EXP2>& b,\n        matrix<T,NR,NC,MM,L>& alpha,\n        T eps,\n        unsigned long max_iter\n    );\n    /*!\n        requires\n            - Q.nr() == Q.nc()\n            - is_col_vector(b) == true\n            - is_col_vector(alpha) == true\n            - b.size() == alpha.size() == Q.nr()\n            - alpha.size() > 0\n            - min(alpha) >= 0\n            - eps > 0\n            - max_iter > 0\n        ensures\n            - Let C == sum(alpha) (i.e. C is the sum of the alpha values you \n              supply to this function)\n            - This function solves the following quadratic program:\n                Minimize: f(alpha) == 0.5*trans(alpha)*Q*alpha - trans(alpha)*b\n                subject to the following constraints:\n                    - sum(alpha) == C (i.e. the sum of alpha values doesn't change)\n                    - min(alpha) >= 0 (i.e. all alpha values are nonnegative)\n                Where f is convex.  This means that Q should be positive-semidefinite.\n            - The solution to the above QP will be stored in #alpha.\n            - This function uses a simple implementation of the sequential minimal\n              optimization algorithm.  It starts the algorithm with the given alpha\n              and it works on the problem until the duality gap (i.e. how far away\n              we are from the optimum solution) is less than eps.  So eps controls \n              how accurate the solution is and smaller values result in better solutions.\n            - At most max_iter iterations of optimization will be performed.  \n            - returns the number of iterations performed.  If this method fails to\n              converge to eps accuracy then the number returned will be max_iter+1.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename EXP3,\n        typename T, long NR, long NC, typename MM, typename L\n        >\n    unsigned long solve_qp4_using_smo ( \n        const matrix_exp<EXP1>& A,\n        const matrix_exp<EXP2>& Q,\n        const matrix_exp<EXP3>& b,\n        matrix<T,NR,NC,MM,L>& alpha,\n        T eps,\n        unsigned long max_iter\n    );\n    /*!\n        requires\n            - A.nc() == alpha.size()\n            - Q.nr() == Q.nc()\n            - is_col_vector(b) == true\n            - is_col_vector(alpha) == true\n            - b.size() == alpha.size() == Q.nr()\n            - alpha.size() > 0\n            - min(alpha) >= 0\n            - eps > 0\n            - max_iter > 0\n        ensures\n            - Let C == sum(alpha) (i.e. C is the sum of the alpha values you \n              supply to this function)\n            - This function solves the following quadratic program:\n                Minimize: f(alpha,lambda) == 0.5*trans(alpha)*Q*alpha - trans(alpha)*b + \n                                             0.5*trans(lambda)*lambda - trans(lambda)*A*alpha\n                subject to the following constraints:\n                    - sum(alpha)  == C (i.e. the sum of alpha values doesn't change)\n                    - min(alpha)  >= 0 (i.e. all alpha values are nonnegative)\n                    - min(lambda) >= 0 (i.e. all lambda values are nonnegative)\n                Where f is convex.  This means that Q should be positive-semidefinite.\n            - The solution to the above QP will be stored in #alpha.  The optimal\n              lambda is not output since its value is given by the following expression:\n                lowerbound(A*alpha,0)\n            - This function uses a simple implementation of the sequential minimal\n              optimization algorithm.  It starts the algorithm with the given alpha\n              and it works on the problem until the duality gap (i.e. how far away\n              we are from the optimum solution) is less than eps.  So eps controls \n              how accurate the solution is and smaller values result in better solutions.\n            - At most max_iter iterations of optimization will be performed.  \n            - returns the number of iterations performed.  If this method fails to\n              converge to eps accuracy then the number returned will be max_iter+1.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATION_SOLVE_QP_UsING_SMO_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_stop_strategies.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATIOn_STOP_STRATEGIES_H_\n#define DLIB_OPTIMIZATIOn_STOP_STRATEGIES_H_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"optimization_stop_strategies_abstract.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class objective_delta_stop_strategy\n    {\n    public:\n        explicit objective_delta_stop_strategy (\n            double min_delta = 1e-7\n        ) : _verbose(false), _been_used(false), _min_delta(min_delta), _max_iter(0), _cur_iter(0), _prev_funct_value(0) \n        {\n            DLIB_ASSERT (\n                min_delta >= 0,\n                \"\\t objective_delta_stop_strategy(min_delta)\"\n                << \"\\n\\t min_delta can't be negative\"\n                << \"\\n\\t min_delta: \" << min_delta\n            );\n        }\n\n        objective_delta_stop_strategy (\n            double min_delta,\n            unsigned long max_iter\n        ) : _verbose(false), _been_used(false), _min_delta(min_delta), _max_iter(max_iter), _cur_iter(0), _prev_funct_value(0) \n        {\n            DLIB_ASSERT (\n                min_delta >= 0 && max_iter > 0,\n                \"\\t objective_delta_stop_strategy(min_delta, max_iter)\"\n                << \"\\n\\t min_delta can't be negative and max_iter can't be 0\"\n                << \"\\n\\t min_delta: \" << min_delta\n                << \"\\n\\t max_iter:  \" << max_iter \n            );\n        }\n\n        objective_delta_stop_strategy& be_verbose( \n        ) \n        {\n            _verbose = true;\n            return *this;\n        }\n\n        template <typename T>\n        bool should_continue_search (\n            const T& ,\n            const double funct_value,\n            const T& \n        ) \n        {\n            if (_verbose)\n            {\n                using namespace std;\n                cout << \"iteration: \" << _cur_iter << \"   objective: \" << funct_value << endl;\n            }\n\n            ++_cur_iter;\n            if (_been_used)\n            {\n                // Check if we have hit the max allowable number of iterations.  (but only\n                // check if _max_iter is enabled (i.e. not 0)).\n                if (_max_iter != 0 && _cur_iter > _max_iter)\n                    return false;\n\n                // check if the function change was too small\n                if (std::abs(funct_value - _prev_funct_value) < _min_delta)\n                    return false;\n            }\n\n            _been_used = true;\n            _prev_funct_value = funct_value;\n            return true;\n        }\n\n    private:\n        bool _verbose;\n\n        bool _been_used;\n        double _min_delta;\n        unsigned long _max_iter;\n        unsigned long _cur_iter;\n        double _prev_funct_value;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class gradient_norm_stop_strategy\n    {\n    public:\n        explicit gradient_norm_stop_strategy (\n            double min_norm = 1e-7\n        ) : _verbose(false), _min_norm(min_norm), _max_iter(0), _cur_iter(0) \n        {\n            DLIB_ASSERT (\n                min_norm >= 0,\n                \"\\t gradient_norm_stop_strategy(min_norm)\"\n                << \"\\n\\t min_norm can't be negative\"\n                << \"\\n\\t min_norm: \" << min_norm\n            );\n        }\n\n        gradient_norm_stop_strategy (\n            double min_norm,\n            unsigned long max_iter\n        ) : _verbose(false), _min_norm(min_norm), _max_iter(max_iter), _cur_iter(0) \n        {\n            DLIB_ASSERT (\n                min_norm >= 0 && max_iter > 0,\n                \"\\t gradient_norm_stop_strategy(min_norm, max_iter)\"\n                << \"\\n\\t min_norm can't be negative and max_iter can't be 0\"\n                << \"\\n\\t min_norm: \" << min_norm\n                << \"\\n\\t max_iter:  \" << max_iter \n            );\n        }\n\n        gradient_norm_stop_strategy& be_verbose( \n        ) \n        {\n            _verbose = true;\n            return *this;\n        }\n\n        template <typename T>\n        bool should_continue_search (\n            const T& ,\n            const double funct_value,\n            const T& funct_derivative\n        ) \n        {\n            if (_verbose)\n            {\n                using namespace std;\n                cout << \"iteration: \" << _cur_iter << \"   objective: \" << funct_value << \"   gradient norm: \" << length(funct_derivative) << endl;\n            }\n\n            ++_cur_iter;\n\n            // Check if we have hit the max allowable number of iterations.  (but only\n            // check if _max_iter is enabled (i.e. not 0)).\n            if (_max_iter != 0 && _cur_iter > _max_iter)\n                return false;\n\n            // check if the gradient norm is too small \n            if (length(funct_derivative) < _min_norm)\n                return false;\n\n            return true;\n        }\n\n    private:\n        bool _verbose;\n\n        double _min_norm;\n        unsigned long _max_iter;\n        unsigned long _cur_iter;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_STOP_STRATEGIES_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_stop_strategies_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATIOn_STOP_STRATEGIES_ABSTRACT_\n#ifdef DLIB_OPTIMIZATIOn_STOP_STRATEGIES_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class objective_delta_stop_strategy\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a strategy for deciding if an optimization\n                algorithm should terminate.   This particular object looks at the \n                change in the objective function from one iteration to the next and \n                bases its decision on how large this change is.  If the change\n                is below a user given threshold then the search stops.\n        !*/\n\n    public:\n        explicit objective_delta_stop_strategy (\n            double min_delta = 1e-7\n        ); \n        /*!\n            requires\n                - min_delta >= 0\n            ensures\n                - This stop strategy object will only consider a search to be complete\n                  if a change in an objective function from one iteration to the next\n                  is less than min_delta.\n        !*/\n\n        objective_delta_stop_strategy (\n            double min_delta,\n            unsigned long max_iter\n        );\n        /*!\n            requires\n                - min_delta >= 0\n                - max_iter > 0\n            ensures\n                - This stop strategy object will only consider a search to be complete\n                  if a change in an objective function from one iteration to the next\n                  is less than min_delta or more than max_iter iterations has been\n                  executed.\n        !*/\n\n        objective_delta_stop_strategy& be_verbose( \n        );\n        /*!\n            ensures\n                - causes this object to print status messages to standard out \n                  every time should_continue_search() is called.\n                - returns *this\n        !*/\n\n        template <typename T>\n        bool should_continue_search (\n            const T& x,\n            const double funct_value,\n            const T& funct_derivative\n        );\n        /*!\n            requires\n                - this function is only called once per search iteration\n                - for some objective function f():\n                    - x == the search point for the current iteration\n                    - funct_value == f(x)\n                    - funct_derivative == derivative(f)(x)\n            ensures\n                - returns true if the point x doest not satisfy the stopping condition and\n                  false otherwise.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class gradient_norm_stop_strategy\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a strategy for deciding if an optimization\n                algorithm should terminate.   This particular object looks at the \n                norm (i.e. the length) of the current gradient vector and stops \n                if it is smaller than a user given threshold.  \n        !*/\n\n    public:\n        explicit gradient_norm_stop_strategy (\n            double min_norm = 1e-7\n        ); \n        /*!\n            requires\n                - min_norm >= 0\n            ensures\n                - This stop strategy object will only consider a search to be complete\n                  if the current gradient norm is less than min_norm\n        !*/\n\n        gradient_norm_stop_strategy (\n            double min_norm,\n            unsigned long max_iter\n        );\n        /*!\n            requires\n                - min_norm >= 0\n                - max_iter > 0\n            ensures\n                - This stop strategy object will only consider a search to be complete\n                  if the current gradient norm is less than min_norm or more than \n                  max_iter iterations has been executed.\n        !*/\n\n        gradient_norm_stop_strategy& be_verbose( \n        );\n        /*!\n            ensures\n                - causes this object to print status messages to standard out \n                  every time should_continue_search() is called.\n                - returns *this\n        !*/\n\n        template <typename T>\n        bool should_continue_search (\n            const T& x,\n            const double funct_value,\n            const T& funct_derivative\n        );\n        /*!\n            requires\n                - this function is only called once per search iteration\n                - for some objective function f():\n                    - x == the search point for the current iteration\n                    - funct_value == f(x)\n                    - funct_derivative == derivative(f)(x)\n            ensures\n                - returns true if the point x doest not satisfy the stopping condition and\n                  false otherwise.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATIOn_STOP_STRATEGIES_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_trust_region.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATION_TRUST_REGIoN_Hh_\n#define DLIB_OPTIMIZATION_TRUST_REGIoN_Hh_\n\n#include \"../matrix.h\"\n#include \"optimization_trust_region_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename T, long NR, long NC, typename MM, typename L\n        >\n    unsigned long solve_trust_region_subproblem ( \n        const matrix_exp<EXP1>& B,\n        const matrix_exp<EXP2>& g,\n        const typename EXP1::type radius,\n        matrix<T,NR,NC,MM,L>& p,\n        double eps,\n        unsigned long max_iter\n    )\n    {\n        /*\n            This is an implementation of algorithm 4.3(Trust Region Subproblem)\n            from the book Numerical Optimization by Nocedal and Wright.  Some of\n            the details are also from Practical Methods of Optimization by Fletcher.\n        */\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(B.nr() == B.nc() && is_col_vector(g) && g.size() == B.nr(),\n            \"\\t unsigned long solve_trust_region_subproblem()\"\n            << \"\\n\\t invalid arguments were given to this function\"\n            << \"\\n\\t B.nr():            \" << B.nr()\n            << \"\\n\\t B.nc():            \" << B.nc()\n            << \"\\n\\t is_col_vector(g):  \" << is_col_vector(g) \n            << \"\\n\\t g.size():          \" << g.size() \n            );\n        DLIB_ASSERT(radius > 0 && eps > 0 && max_iter > 0,\n            \"\\t unsigned long solve_trust_region_subproblem()\"\n            << \"\\n\\t invalid arguments were given to this function\"\n            << \"\\n\\t radius:   \" << radius\n            << \"\\n\\t eps:      \" << eps \n            << \"\\n\\t max_iter: \" << max_iter \n            );\n\n\n        const_temp_matrix<EXP1> BB(B);\n        const_temp_matrix<EXP2> gg(g);\n\n        p.set_size(g.nr(),g.nc());\n        p = 0;\n\n\n        const T numeric_eps = max(diag(abs(BB)))*std::numeric_limits<T>::epsilon();\n\n        matrix<T,EXP1::NR,EXP2::NR,MM,L> R;\n\n        T lambda = 0;\n\n        // We need to put a bracket around lambda.  It can't go below 0.  We\n        // can get an upper bound using Gershgorin disks.  \n        // This number is a lower bound on the eigenvalues in BB\n        const T BB_min_eigenvalue = min(diag(BB) - (sum_cols(abs(BB)) - abs(diag(BB))));\n\n        const T g_norm = length(gg);\n\n        T lambda_min = 0;\n        T lambda_max = put_in_range(0, \n                                    std::numeric_limits<T>::max(), \n                                    g_norm/radius - BB_min_eigenvalue);\n\n\n        // If we can tell that the minimum is at 0 then don't do anything.  Just return the answer. \n        if (g_norm < numeric_eps && BB_min_eigenvalue > numeric_eps)\n        {\n            return 0;\n        }\n\n\n        // how much lambda has changed recently\n        T lambda_delta = 0;\n\n        for (unsigned long i = 0; i < max_iter; ++i)\n        {\n            R = chol(BB + lambda*identity_matrix<T>(BB.nr()));\n\n            // if the cholesky decomposition doesn't exist. \n            if (R(R.nr()-1, R.nc()-1) <= 0)\n            {\n                // If B is indefinite and g is equal to 0 then we should\n                // quit this loop and go right to the eigenvalue decomposition method.\n                if (g_norm <= numeric_eps)\n                    break;\n\n                // narrow the bracket on lambda.  Obviously the current lambda is\n                // too small.\n                lambda_min = lambda;\n\n                // jump towards the max value.  Eventually there will\n                // be a lambda that results in a cholesky decomposition.\n                const T alpha = 0.10;\n                lambda = (1-alpha)*lambda + alpha*lambda_max;\n                continue;\n            }\n\n            using namespace blas_bindings;\n\n            p = -gg;\n            // Solve RR'*p = -g for p.\n            // Solve R*q = -g for q where q = R'*p.\n            if (R.nr() == 2)\n            {\n                p(0) = p(0)/R(0,0);\n                p(1) = (p(1)-R(1,0)*p(0))/R(1,1);\n            }\n            else\n            {\n                triangular_solver(CblasLeft, CblasLower, CblasNoTrans, CblasNonUnit, R, p);\n            }\n            const T q_norm = length(p);\n\n            // Solve R'*p = q for p.\n            if (R.nr() == 2)\n            {\n                p(1) = p(1)/R(1,1);\n                p(0) = (p(0)-R(1,0)*p(1))/R(0,0);\n            }\n            else\n            {\n                triangular_solver(CblasLeft, CblasLower, CblasTrans, CblasNonUnit, R, p);\n            }\n            const T p_norm = length(p);\n\n            // check if we are done.  \n            if (lambda == 0)\n            {\n                if (p_norm < radius)\n                {\n                    // i will always be 0 in this case.  So we return 1.\n                    return i+1;\n                }\n            }\n            else\n            {\n                // if we are close enough to the solution then terminate\n                if (std::abs(p_norm - radius)/radius < eps)\n                    return i+1;\n            }\n\n            // shrink our bracket on lambda\n            if (p_norm < radius)\n                lambda_max = lambda;\n            else\n                lambda_min = lambda;\n\n\n            if (p_norm <= radius*std::numeric_limits<T>::epsilon())\n            {\n                const T alpha = 0.01;\n                lambda = (1-alpha)*lambda_min + alpha*lambda_max;\n                continue;\n            }\n\n            const T old_lambda = lambda;\n\n            // figure out which lambda to try next\n            lambda = lambda + std::pow(q_norm/p_norm,2)*(p_norm - radius)/radius;\n\n            // make sure the chosen lambda is within our bracket (but not exactly at either end).\n            const T gap = (lambda_max-lambda_min)*0.01;\n            lambda = put_in_range(lambda_min+gap, lambda_max-gap, lambda);\n\n            // Keep track of how much lambda is thrashing around inside the search bracket.  If it\n            // keeps moving around a whole lot then cut the search bracket in half.\n            lambda_delta += std::abs(lambda - old_lambda);\n            if (lambda_delta > 3*(lambda_max-lambda_min))\n            {\n                lambda = (lambda_min+lambda_max)/2;\n                lambda_delta = 0;\n            }\n        } // end for loop\n\n\n        // We are probably in the \"hard case\".   Use an eigenvalue decomposition to sort things out.\n        // Either that or the eps was just set too tight and really we are already done.\n        eigenvalue_decomposition<EXP1> ed(make_symmetric(BB));\n\n        matrix<T,NR,NC,MM,L> ev = ed.get_real_eigenvalues();\n        const long min_eig_idx = index_of_min(ev);\n\n\n        ev -= min(ev);\n        // zero out any values which are basically zero\n        ev = pointwise_multiply(ev, ev > max(abs(ev))*std::numeric_limits<T>::epsilon());\n        ev = reciprocal(ev);\n\n\n        // figure out part of what p should be assuming we are in the hard case.\n        matrix<T,NR,NC,MM,L> p_hard;\n        p_hard = trans(ed.get_pseudo_v())*gg;\n        p_hard = diagm(ev)*p_hard;\n        p_hard = ed.get_pseudo_v()*p_hard;\n\n\n        // If we really are in the hard case then this if will be true.  Otherwise, the p\n        // we found in the \"easy case\" loop up top is the best answer.\n        if (length(p_hard) < radius && length(p_hard) >= length(p))\n        {\n            // adjust the length of p_hard by adding a component along the eigenvector associated with\n            // the smallest eigenvalue.  We want to make it the case that length(p) == radius.\n            const T tau = std::sqrt(radius*radius - length_squared(p_hard));\n            p = p_hard + tau*colm(ed.get_pseudo_v(),min_eig_idx);\n\n\n            // if we have to do an eigenvalue decomposition then say we did all the iterations\n            return max_iter;\n        }\n\n        // if we get this far it means we didn't converge to eps accuracy. \n        return max_iter+1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stop_strategy_type,\n        typename funct_model\n        >\n    double find_min_trust_region (\n        stop_strategy_type stop_strategy,\n        const funct_model& model, \n        typename funct_model::column_vector& x, \n        double radius = 1\n    )\n    {\n        /*\n            This is an implementation of algorithm 4.1(Trust Region)\n            from the book Numerical Optimization by Nocedal and Wright.  \n        */\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_col_vector(x) && radius > 0,\n            \"\\t double find_min_trust_region()\"\n            << \"\\n\\t invalid arguments were given to this function\"\n            << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n            << \"\\n\\t radius:           \" << radius\n            );\n\n        const double initial_radius = radius;\n\n        typedef typename funct_model::column_vector T;\n        typedef typename T::type type;\n\n        typename funct_model::general_matrix h;\n        typename funct_model::column_vector g, p, d;\n        type f_value = model(x);\n\n        model.get_derivative_and_hessian(x,g,h);\n\n        DLIB_ASSERT(is_finite(x), \"The objective function generated non-finite outputs\");\n        DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n        DLIB_ASSERT(is_finite(h), \"The objective function generated non-finite outputs\");\n\n        // Sometimes the loop below won't modify x because the trust region step failed.\n        // This bool tells us when we are in that case.\n        bool stale_x = false;\n\n        while(stale_x || stop_strategy.should_continue_search(x, f_value, g))\n        {\n            const unsigned long iter = solve_trust_region_subproblem(h,\n                                                                     g,\n                                                                     radius,\n                                                                     p, \n                                                                     0.1, \n                                                                     20);\n\n\n            const type new_f_value = model(x+p);\n            const type predicted_improvement = -0.5*trans(p)*h*p - trans(g)*p;\n            const type measured_improvement = (f_value - new_f_value);\n\n            // If the sub-problem can't find a way to improve then stop.  This only happens when p is essentially 0.\n            if (std::abs(predicted_improvement) <= std::abs(measured_improvement)*std::numeric_limits<type>::epsilon())\n                break;\n\n            // predicted_improvement shouldn't be negative but it might be if something went\n            // wrong in the trust region solver.  So put abs() here to guard against that.  This\n            // way the sign of rho is determined only by the sign of measured_improvement.\n            const type rho = measured_improvement/std::abs(predicted_improvement);\n\n\n            \n            if (rho < 0.25)\n            {\n                radius *= 0.25;\n\n                // something has gone horribly wrong if the radius has shrunk to zero.  So just\n                // give up if that happens.\n                if (radius <= initial_radius*std::numeric_limits<double>::epsilon())\n                    break;\n            }\n            else\n            {\n                // if rho > 0.75 and we are being checked by the radius \n                if (rho > 0.75 && iter > 1)\n                {\n                    radius = std::min<type>(1000,  2*radius);\n                }\n            }\n\n            if (rho > 0)\n            {\n                x = x + p;\n                f_value = new_f_value;\n                model.get_derivative_and_hessian(x,g,h);\n                stale_x = false;\n            }\n            else\n            {\n                stale_x = true;\n            }\n\n            DLIB_ASSERT(is_finite(x), \"The objective function generated non-finite outputs\");\n            DLIB_ASSERT(is_finite(g), \"The objective function generated non-finite outputs\");\n            DLIB_ASSERT(is_finite(h), \"The objective function generated non-finite outputs\");\n        }\n\n        return f_value;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct_model>\n    struct negate_tr_model \n    {\n        negate_tr_model( const funct_model& m) : model(m) {}\n\n        const funct_model& model;\n\n        typedef typename funct_model::column_vector column_vector;\n        typedef typename funct_model::general_matrix general_matrix;\n\n        template <typename T>\n        typename T::type operator() (const T& x) const\n        {\n            return -model(x);\n        }\n\n        template <typename T, typename U>\n        void get_derivative_and_hessian (\n            const T& x,\n            T& d,\n            U& h\n        ) const \n        {\n            model.get_derivative_and_hessian(x,d,h);\n            d = -d;\n            h = -h;\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stop_strategy_type,\n        typename funct_model\n        >\n    double find_max_trust_region (\n        stop_strategy_type stop_strategy,\n        const funct_model& model, \n        typename funct_model::column_vector& x, \n        double radius = 1\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_col_vector(x) && radius > 0,\n            \"\\t double find_max_trust_region()\"\n            << \"\\n\\t invalid arguments were given to this function\"\n            << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n            << \"\\n\\t radius:           \" << radius\n            );\n\n        return -find_min_trust_region(stop_strategy,\n                                      negate_tr_model<funct_model>(model),\n                                      x,\n                                      radius);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATION_TRUST_REGIoN_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization/optimization_trust_region_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_OPTIMIZATION_TRUST_REGIoN_H_ABSTRACTh_\n#ifdef DLIB_OPTIMIZATION_TRUST_REGIoN_H_ABSTRACTh_\n\n#include \"../matrix/matrix_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP1,\n        typename EXP2,\n        typename T, long NR, long NC, typename MM, typename L\n        >\n    unsigned long solve_trust_region_subproblem ( \n        const matrix_exp<EXP1>& B,\n        const matrix_exp<EXP2>& g,\n        const typename EXP1::type radius,\n        matrix<T,NR,NC,MM,L>& p,\n        double eps,\n        unsigned long max_iter\n    );\n    /*!\n        requires\n            - B == trans(B)\n              (i.e. B should be a symmetric matrix)\n            - B.nr() == B.nc()\n            - is_col_vector(g) == true\n            - g.size() == B.nr()\n            - p is capable of containing a column vector the size of g\n              (i.e. p = g; should be a legal expression)\n            - radius > 0\n            - eps > 0\n            - max_iter > 0\n        ensures\n            - This function solves the following optimization problem:\n                Minimize: f(p) == 0.5*trans(p)*B*p + trans(g)*p\n                subject to the following constraint:\n                    - length(p) <= radius\n            - returns the number of iterations performed.  If this method fails to\n              converge to eps accuracy then the number returned will be max_iter+1.\n            - if this function returns 0 or 1 then we are not hitting the radius bound.\n              Otherwise, the radius constraint is active and std::abs(length(#p)-radius) <= eps.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class function_model \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines the interface for a function model\n                used by the trust-region optimizers defined below.\n\n                In particular, this object represents a function f() and\n                its associated derivative and hessian.\n\n        !*/\n\n    public:\n\n        // Define the type used to represent column vectors\n        typedef matrix<double,0,1> column_vector;\n        // Define the type used to represent the hessian matrix\n        typedef matrix<double> general_matrix;\n\n        double operator() ( \n            const column_vector& x\n        ) const;\n        /*!\n            ensures\n                - returns f(x)\n                  (i.e. evaluates this model at the given point and returns the value)\n        !*/\n\n        void get_derivative_and_hessian (\n            const column_vector& x,\n            column_vector& d,\n            general_matrix& h\n        ) const;\n        /*!\n            ensures\n                - #d == the derivative of f() at x\n                - #h == the hessian matrix of f() at x\n                - is_col_vector(#d) == true\n                - #d.size() == x.size()\n                - #h.nr() == #h.nc() == x.size()\n                - #h == trans(#h)\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stop_strategy_type,\n        typename funct_model\n        >\n    double find_min_trust_region (\n        stop_strategy_type stop_strategy,\n        const funct_model& model, \n        typename funct_model::column_vector& x, \n        double radius = 1\n    );\n    /*!\n        requires\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - is_col_vector(x) == true\n            - radius > 0\n            - model must be an object with an interface as defined by the function_model\n              example object shown above.\n        ensures\n            - Performs an unconstrained minimization of the function defined by model \n              starting from the initial point x.  This function uses a trust region\n              algorithm to perform the minimization.  The radius parameter defines\n              the initial size of the trust region.\n            - The function is optimized until stop_strategy decides that an acceptable \n              point has been found or the trust region subproblem fails to make progress.\n            - #x == the value of x that was found to minimize model()\n            - returns model(#x). \n            - When this function makes calls to model.get_derivative_and_hessian() it always \n              does so by first calling model() and then calling model.get_derivative_and_hessian().  \n              That is, any call to model.get_derivative_and_hessian(val) will always be \n              preceded by a call to model(val) with the same value.  This way you can reuse \n              any redundant computations performed by model() and model.get_derivative_and_hessian()\n              as appropriate.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stop_strategy_type,\n        typename funct_model\n        >\n    double find_max_trust_region (\n        stop_strategy_type stop_strategy,\n        const funct_model& model, \n        typename funct_model::column_vector& x, \n        double radius = 1\n    );\n    /*!\n        requires\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - is_col_vector(x) == true\n            - radius > 0\n            - model must be an object with an interface as defined by the function_model\n              example object shown above.\n        ensures\n            - Performs an unconstrained maximization of the function defined by model \n              starting from the initial point x.  This function uses a trust region\n              algorithm to perform the maximization.  The radius parameter defines\n              the initial size of the trust region.\n            - The function is optimized until stop_strategy decides that an acceptable \n              point has been found or the trust region subproblem fails to make progress.\n            - #x == the value of x that was found to maximize model()\n            - returns model(#x). \n            - When this function makes calls to model.get_derivative_and_hessian() it always \n              does so by first calling model() and then calling model.get_derivative_and_hessian().  \n              That is, any call to model.get_derivative_and_hessian(val) will always be \n              preceded by a call to model(val) with the same value.  This way you can reuse \n              any redundant computations performed by model() and model.get_derivative_and_hessian()\n              as appropriate.\n            - Note that this function solves the maximization problem by converting it \n              into a minimization problem.  Therefore, the values of model() and its derivative\n              reported to the stopping strategy will be negated.  That is, stop_strategy\n              will see -model() and -derivative.  All this really means is that the status \n              messages from a stopping strategy in verbose mode will display a negated objective\n              value.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_OPTIMIZATION_TRUST_REGIoN_H_ABSTRACTh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/optimization.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATIOn_HEADER\n#define DLIB_OPTIMIZATIOn_HEADER\n\n#include \"optimization/optimization.h\"\n#include \"optimization/optimization_bobyqa.h\"\n#include \"optimization/optimization_solve_qp_using_smo.h\"\n#include \"optimization/optimization_solve_qp2_using_smo.h\"\n#include \"optimization/optimization_solve_qp3_using_smo.h\"\n#include \"optimization/optimization_oca.h\"\n#include \"optimization/optimization_trust_region.h\"\n#include \"optimization/optimization_least_squares.h\"\n#include \"optimization/max_cost_assignment.h\"\n#include \"optimization/max_sum_submatrix.h\"\n#include \"optimization/find_max_factor_graph_nmplp.h\"\n#include \"optimization/find_max_factor_graph_viterbi.h\"\n#include \"optimization/find_max_parse_cky.h\"\n\n#endif // DLIB_OPTIMIZATIOn_HEADER\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/ostream",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/pipe/pipe_kernel_1.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PIPE_KERNEl_1_ \n#define DLIB_PIPE_KERNEl_1_ \n\n#include \"../algs.h\"\n#include \"../threads.h\"\n#include \"pipe_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class pipe \n    {\n        /*!\n            INITIAL VALUE\n                - pipe_size == 0\n                - pipe_max_size == defined by constructor\n                - enabled == true\n                - data == a pointer to an array of ((pipe_max_size>0)?pipe_max_size:1) T objects.\n                - dequeue_waiters == 0\n                - enqueue_waiters == 0\n                - first == 1\n                - last == 1\n                - unblock_sig_waiters == 0\n\n            CONVENTION\n                - size() == pipe_size\n                - max_size() == pipe_max_size\n                - is_enabled() == enabled\n\n                - m == the mutex used to lock access to all the members of this class\n\n                - dequeue_waiters == the number of threads blocked on calls to dequeue()\n                - enqueue_waiters == the number of threads blocked on calls to enqueue() and \n                  wait_until_empty()\n                - unblock_sig_waiters == the number of threads blocked on calls to \n                  wait_for_num_blocked_dequeues() and the destructor.  (i.e. the number of\n                  blocking calls to unblock_sig.wait())\n\n                - dequeue_sig == the signaler that threads blocked on calls to dequeue() wait on\n                - enqueue_sig == the signaler that threads blocked on calls to enqueue() \n                  or wait_until_empty() wait on.\n                - unblock_sig == the signaler that is signaled when a thread stops blocking on a call\n                  to enqueue() or dequeue().  It is also signaled when a dequeue that will probably\n                  block is called.  The destructor and wait_for_num_blocked_dequeues are the only \n                  things that will wait on this signaler.\n\n                - if (pipe_size > 0) then\n                    - data[first] == the next item to dequeue\n                    - data[last] == the item most recently added via enqueue, so the last to dequeue.\n                - else if (pipe_max_size == 0)\n                    - if (first == 0 && last == 0) then\n                        - data[0] == the next item to dequeue\n                    - else if (first == 0 && last == 1) then \n                        - data[0] has been taken out already by a dequeue\n        !*/\n\n    public:\n        // this is here for backwards compatibility with older versions of dlib.\n        typedef pipe kernel_1a;\n\n        typedef T type;\n\n        explicit pipe (  \n            unsigned long maximum_size\n        );\n\n        virtual ~pipe (\n        );\n\n        void empty (\n        );\n\n        void wait_until_empty (\n        ) const;\n\n        void wait_for_num_blocked_dequeues (\n            unsigned long num\n        )const;\n\n        void enable (\n        );\n\n        void disable (\n        );\n\n        bool is_enqueue_enabled (\n        ) const;\n\n        void disable_enqueue (\n        );\n\n        void enable_enqueue (\n        );\n\n        bool is_dequeue_enabled (\n        ) const;\n\n        void disable_dequeue (\n        );\n\n        void enable_dequeue (\n        );\n\n        bool is_enabled (\n        ) const;\n\n        unsigned long max_size (\n        ) const;\n\n        unsigned long size (\n        ) const;\n\n        bool enqueue (\n            T& item\n        );\n\n        bool dequeue (\n            T& item\n        );\n\n        bool enqueue_or_timeout (\n            T& item,\n            unsigned long timeout\n        );\n\n        bool dequeue_or_timeout (\n            T& item,\n            unsigned long timeout\n        );\n\n    private:\n\n        unsigned long pipe_size;\n        const unsigned long pipe_max_size;\n        bool enabled;\n\n        T* const data;\n\n        unsigned long first;\n        unsigned long last;\n\n        mutex m;\n        signaler dequeue_sig;\n        signaler enqueue_sig;\n        signaler unblock_sig;\n\n        unsigned long dequeue_waiters;\n        mutable unsigned long enqueue_waiters;\n        mutable unsigned long unblock_sig_waiters;\n        bool enqueue_enabled;\n        bool dequeue_enabled;\n\n        // restricted functions\n        pipe(const pipe&);        // copy constructor\n        pipe& operator=(const pipe&);    // assignment operator\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                      member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    pipe<T>::\n    pipe (  \n        unsigned long maximum_size\n    ) : \n        pipe_size(0),\n        pipe_max_size(maximum_size),\n        enabled(true),\n        data(new T[(maximum_size>0) ? maximum_size : 1]),\n        first(1),\n        last(1),\n        dequeue_sig(m),\n        enqueue_sig(m),\n        unblock_sig(m),\n        dequeue_waiters(0),\n        enqueue_waiters(0),\n        unblock_sig_waiters(0),\n        enqueue_enabled(true),\n        dequeue_enabled(true)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    pipe<T>::\n    ~pipe (\n    )\n    {\n        auto_mutex M(m);\n        ++unblock_sig_waiters;\n\n        // first make sure no one is blocked on any calls to enqueue() or dequeue()\n        enabled = false;\n        dequeue_sig.broadcast();\n        enqueue_sig.broadcast();\n        unblock_sig.broadcast();\n\n        // wait for all threads to unblock\n        while (dequeue_waiters > 0 || enqueue_waiters > 0 || unblock_sig_waiters > 1)\n            unblock_sig.wait();\n\n        delete [] data;\n        --unblock_sig_waiters;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void pipe<T>::\n    empty (\n    )\n    {\n        auto_mutex M(m);\n        pipe_size = 0;\n\n        // let any calls to enqueue() know that the pipe is now empty\n        if (enqueue_waiters > 0)\n            enqueue_sig.broadcast();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void pipe<T>::\n    wait_until_empty (\n    ) const\n    {\n        auto_mutex M(m);\n        // this function is sort of like a call to enqueue so treat it like that\n        ++enqueue_waiters;\n\n        while (pipe_size > 0 && enabled && dequeue_enabled )\n            enqueue_sig.wait();\n\n        // let the destructor know we are ending if it is blocked waiting\n        if (enabled == false)\n            unblock_sig.broadcast();\n\n        --enqueue_waiters;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void pipe<T>::\n    enable (\n    )\n    {\n        auto_mutex M(m);\n        enabled = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void pipe<T>::\n    disable (\n    )\n    {\n        auto_mutex M(m);\n        enabled = false;\n        dequeue_sig.broadcast();\n        enqueue_sig.broadcast();\n        unblock_sig.broadcast();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool pipe<T>::\n    is_enabled (\n    ) const\n    {\n        auto_mutex M(m);\n        return enabled;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    unsigned long pipe<T>::\n    max_size (\n    ) const\n    {\n        auto_mutex M(m);\n        return pipe_max_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    unsigned long pipe<T>::\n    size (\n    ) const\n    {\n        auto_mutex M(m);\n        return pipe_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool pipe<T>::\n    enqueue (\n        T& item\n    )\n    {\n        auto_mutex M(m);\n        ++enqueue_waiters;\n\n        // wait until there is room or we are disabled \n        while (pipe_size == pipe_max_size && enabled && enqueue_enabled &&\n               !(pipe_max_size == 0 && first == 1) )\n            enqueue_sig.wait();\n\n        if (enabled == false || enqueue_enabled == false)\n        {\n            --enqueue_waiters;\n            // let the destructor know we are unblocking\n            unblock_sig.broadcast();\n            return false;\n        }\n\n        // set the appropriate values for first and last\n        if (pipe_size == 0)\n        {\n            first = 0;\n            last = 0;\n        }\n        else\n        {\n            last = (last+1)%pipe_max_size;\n        }\n\n\n        exchange(item,data[last]);\n\n        // wake up a call to dequeue() if there are any currently blocked\n        if (dequeue_waiters > 0)\n            dequeue_sig.signal();\n\n        if (pipe_max_size > 0)\n        {\n            ++pipe_size;\n        }\n        else\n        {\n            // wait for a dequeue to take the item out\n            while (last == 0 && enabled && enqueue_enabled)\n                enqueue_sig.wait();\n\n            if (last == 0 && (enabled == false || enqueue_enabled == false))\n            {\n                last = 1;\n                first = 1;\n\n                // no one dequeued this object to put it back into item\n                exchange(item,data[0]);\n\n                --enqueue_waiters;\n                // let the destructor know we are unblocking\n                if (unblock_sig_waiters > 0)\n                    unblock_sig.broadcast();\n                return false;\n            }\n\n            last = 1;\n            first = 1;\n\n            // tell any waiting calls to enqueue() that one of them can proceed\n            if (enqueue_waiters > 1)\n                enqueue_sig.broadcast();\n\n            // let the destructor know we are unblocking\n            if (enabled == false && unblock_sig_waiters > 0)\n                unblock_sig.broadcast();\n        }\n\n        --enqueue_waiters;\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool pipe<T>::\n    dequeue (\n        T& item\n    )\n    {\n        auto_mutex M(m);\n        ++dequeue_waiters;\n\n        if (pipe_size == 0)\n        {\n            // notify wait_for_num_blocked_dequeues()\n            if (unblock_sig_waiters > 0)\n                unblock_sig.broadcast();\n\n            // notify any blocked enqueue_or_timeout() calls\n            if (enqueue_waiters > 0)\n                enqueue_sig.broadcast();\n        }\n\n        // wait until there is something in the pipe or we are disabled \n        while (pipe_size == 0 && enabled && dequeue_enabled &&\n               !(pipe_max_size == 0 && first == 0 && last == 0) )\n            dequeue_sig.wait();\n\n        if (enabled == false || dequeue_enabled == false)\n        {\n            --dequeue_waiters;\n            // let the destructor know we are unblocking\n            unblock_sig.broadcast();\n            return false;\n        }\n\n        exchange(item,data[first]);\n\n        if (pipe_max_size > 0)\n        {\n            // set the appropriate values for first \n            first = (first+1)%pipe_max_size;\n\n            --pipe_size;\n        }\n        else\n        {\n            // let the enqueue waiting on us know that we took the \n            // item out already.\n            last = 1;\n        }\n\n        // wake up a call to enqueue() if there are any currently blocked\n        if (enqueue_waiters > 0)\n            enqueue_sig.broadcast();\n\n        --dequeue_waiters;\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool pipe<T>::\n    enqueue_or_timeout (\n        T& item,\n        unsigned long timeout\n    )\n    {\n        auto_mutex M(m);\n        ++enqueue_waiters;\n\n        // wait until there is room or we are disabled or \n        // we run out of time.\n        bool timed_out = false;\n        while (pipe_size == pipe_max_size && enabled && enqueue_enabled &&\n               !(pipe_max_size == 0 && dequeue_waiters > 0 && first == 1) )\n        {\n            if (timeout == 0 || enqueue_sig.wait_or_timeout(timeout) == false)\n            {\n                timed_out = true;\n                break;\n            }\n        }\n\n        if (enabled == false || timed_out || enqueue_enabled == false)\n        {\n            --enqueue_waiters;\n            // let the destructor know we are unblocking\n            unblock_sig.broadcast();\n            return false;\n        }\n\n        // set the appropriate values for first and last\n        if (pipe_size == 0)\n        {\n            first = 0;\n            last = 0;\n        }\n        else\n        {\n            last = (last+1)%pipe_max_size;\n        }\n\n\n        exchange(item,data[last]);\n\n        // wake up a call to dequeue() if there are any currently blocked\n        if (dequeue_waiters > 0)\n            dequeue_sig.signal();\n\n        if (pipe_max_size > 0)\n        {\n            ++pipe_size;\n        }\n        else\n        {\n            // wait for a dequeue to take the item out\n            while (last == 0 && enabled && enqueue_enabled)\n                enqueue_sig.wait();\n\n            if (last == 0 && (enabled == false || enqueue_enabled == false))\n            {\n                last = 1;\n                first = 1;\n\n                // no one dequeued this object to put it back into item\n                exchange(item,data[0]);\n\n                --enqueue_waiters;\n                // let the destructor know we are unblocking\n                if (unblock_sig_waiters > 0)\n                    unblock_sig.broadcast();\n                return false;\n            }\n\n            last = 1;\n            first = 1;\n\n            // tell any waiting calls to enqueue() that one of them can proceed\n            if (enqueue_waiters > 1)\n                enqueue_sig.broadcast();\n\n            // let the destructor know we are unblocking\n            if (enabled == false && unblock_sig_waiters > 0)\n                unblock_sig.broadcast();\n        }\n\n        --enqueue_waiters;\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool pipe<T>::\n    dequeue_or_timeout (\n        T& item,\n        unsigned long timeout\n    )\n    {\n        auto_mutex M(m);\n        ++dequeue_waiters;\n\n        if (pipe_size == 0)\n        {\n            // notify wait_for_num_blocked_dequeues()\n            if (unblock_sig_waiters > 0)\n                unblock_sig.broadcast();\n\n            // notify any blocked enqueue_or_timeout() calls\n            if (enqueue_waiters > 0)\n                enqueue_sig.broadcast();\n        }\n\n        bool timed_out = false;\n        // wait until there is something in the pipe or we are disabled or we timeout.\n        while (pipe_size == 0 && enabled && dequeue_enabled &&\n               !(pipe_max_size == 0 && first == 0 && last == 0) )\n        {\n            if (timeout == 0 || dequeue_sig.wait_or_timeout(timeout) == false)\n            {\n                timed_out = true;\n                break;\n            }\n        }\n\n        if (enabled == false || timed_out || dequeue_enabled == false)\n        {\n            --dequeue_waiters;\n            // let the destructor know we are unblocking\n            unblock_sig.broadcast();\n            return false;\n        }\n\n        exchange(item,data[first]);\n\n        if (pipe_max_size > 0)\n        {\n            // set the appropriate values for first \n            first = (first+1)%pipe_max_size;\n\n            --pipe_size;\n        }\n        else\n        {\n            // let the enqueue waiting on us know that we took the \n            // item out already.\n            last = 1;\n        }\n\n        // wake up a call to enqueue() if there are any currently blocked\n        if (enqueue_waiters > 0)\n            enqueue_sig.broadcast();\n\n        --dequeue_waiters;\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void pipe<T>::\n    wait_for_num_blocked_dequeues (\n        unsigned long num\n    )const\n    {\n        auto_mutex M(m);\n        ++unblock_sig_waiters;\n\n        while ( (dequeue_waiters < num || pipe_size != 0) && enabled && dequeue_enabled)\n            unblock_sig.wait();\n\n        // let the destructor know we are ending if it is blocked waiting\n        if (enabled == false)\n            unblock_sig.broadcast();\n\n        --unblock_sig_waiters;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool pipe<T>::\n    is_enqueue_enabled (\n    ) const\n    {\n        auto_mutex M(m);\n        return enqueue_enabled;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void pipe<T>::\n    disable_enqueue (\n    )\n    {\n        auto_mutex M(m);\n        enqueue_enabled = false;\n        enqueue_sig.broadcast();\n    }\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void pipe<T>::\n    enable_enqueue (\n    )\n    {\n        auto_mutex M(m);\n        enqueue_enabled = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool pipe<T>::\n    is_dequeue_enabled (\n    ) const\n    {\n        auto_mutex M(m);\n        return dequeue_enabled;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void pipe<T>::\n    disable_dequeue (\n    )\n    {\n        auto_mutex M(m);\n        dequeue_enabled = false;\n        dequeue_sig.broadcast();\n    }\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void pipe<T>::\n    enable_dequeue (\n    )\n    {\n        auto_mutex M(m);\n        dequeue_enabled = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_PIPE_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/pipe/pipe_kernel_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_PIPE_KERNEl_ABSTRACT_ \n#ifdef DLIB_PIPE_KERNEl_ABSTRACT_ \n\n#include \"../threads.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class pipe \n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be swappable by a global swap() \n                T must have a default constructor\n\n            INITIAL VALUE\n                size() == 0\n                is_enabled() == true\n                is_enqueue_enabled() == true\n                is_dequeue_enabled() == true\n\n            WHAT THIS OBJECT REPRESENTS\n                This is a first in first out queue with a fixed maximum size containing \n                items of type T.  It is suitable for passing objects between threads.\n                \n            THREAD SAFETY\n                All methods of this class are thread safe.  You may call them from any\n                thread and any number of threads my call them at once.\n        !*/\n\n    public:\n\n        typedef T type;\n\n        explicit pipe (  \n            unsigned long maximum_size\n        );\n        /*!\n            ensures                \n                - #*this is properly initialized\n                - #max_size() == maximum_size\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~pipe (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n                - disables (i.e. sets is_enabled() == false) this object so that \n                  all calls currently blocking on it will return immediately. \n        !*/\n\n        void enable (\n        );\n        /*!\n            ensures\n                - #is_enabled() == true\n        !*/\n\n        void disable (\n        );\n        /*!\n            ensures\n                - #is_enabled() == false\n                - causes all current and future calls to enqueue(), dequeue(),\n                  enqueue_or_timeout() and dequeue_or_timeout() to not block but \n                  to return false immediately until enable() is called.\n                - causes all current and future calls to wait_until_empty() and\n                  wait_for_num_blocked_dequeues() to not block but return\n                  immediately until enable() is called.\n        !*/\n\n        bool is_enabled (\n        ) const;\n        /*!\n            ensures\n                - returns true if this pipe is currently enabled, false otherwise.\n        !*/\n\n        void empty (\n        );\n        /*!\n            ensures\n                - #size() == 0\n        !*/\n\n        void wait_until_empty (\n        ) const;\n        /*!\n            ensures\n                - blocks until one of the following is the case:\n                    - size() == 0  \n                    - is_enabled() == false\n                    - is_dequeue_enabled() == false\n        !*/\n\n        void wait_for_num_blocked_dequeues (\n           unsigned long num\n        ) const;\n        /*!\n            ensures\n                - blocks until one of the following is the case: \n                    - size() == 0 and the number of threads blocked on calls \n                      to dequeue() and dequeue_or_timeout() is greater than \n                      or equal to num.\n                    - is_enabled() == false\n                    - is_dequeue_enabled() == false\n        !*/\n\n        bool is_enqueue_enabled (\n        ) const;\n        /*!\n            ensures\n                - returns true if the enqueue() and enqueue_or_timeout() functions are \n                  currently enabled, returns false otherwise.  (note that the higher \n                  level is_enabled() function can overrule this one.  So if \n                  is_enabled() == false then enqueue functions are still disabled even\n                  if is_enqueue_enabled() returns true.  But if is_enqueue_enabled() == false \n                  then enqueue functions are always disabled no matter the state of \n                  is_enabled())\n        !*/\n\n        void disable_enqueue (\n        );\n        /*!\n            ensures\n                - #is_enqueue_enabled() == false \n                - causes all current and future calls to enqueue() and\n                  enqueue_or_timeout() to not block but to return false \n                  immediately until enable_enqueue() is called.\n        !*/\n\n        void enable_enqueue (\n        );\n        /*!\n            ensures\n                - #is_enqueue_enabled() == true\n        !*/\n\n        bool is_dequeue_enabled (\n        ) const;\n        /*!\n            ensures\n                - returns true if the dequeue() and dequeue_or_timeout() functions are \n                  currently enabled, returns false otherwise.  (note that the higher \n                  level is_enabled() function can overrule this one.  So if \n                  is_enabled() == false then dequeue functions are still disabled even\n                  if is_dequeue_enabled() returns true.  But if is_dequeue_enabled() == false \n                  then dequeue functions are always disabled no matter the state of \n                  is_enabled())\n        !*/\n\n        void disable_dequeue (\n        );\n        /*!\n            ensures\n                - #is_dequeue_enabled() == false \n                - causes all current and future calls to dequeue() and\n                  dequeue_or_timeout() to not block but to return false \n                  immediately until enable_dequeue() is called.\n        !*/\n\n        void enable_dequeue (\n        );\n        /*!\n            ensures\n                - #is_dequeue_enabled() == true\n        !*/\n\n        unsigned long max_size (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of objects of type T that this \n                  pipe can contain.\n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of objects of type T that this\n                  object currently contains.\n        !*/\n\n        bool enqueue (\n            T& item\n        );\n        /*!\n            ensures\n                - if (size() == max_size()) then\n                    - this call to enqueue() blocks until one of the following is the case:\n                        - there is room in the pipe for another item\n                        - max_size() == 0 and another thread is trying to dequeue from this \n                          pipe and we can pass our item object directly to that thread.\n                        - someone calls disable() \n                        - someone calls disable_enqueue()\n                - else\n                    - this call does not block.\n                - if (this call to enqueue() returns true) then\n                    - #is_enabled() == true \n                    - #is_enqueue_enabled() == true\n                    - if (max_size() == 0) then\n                        - using global swap, item was passed directly to a \n                          thread attempting to dequeue from this pipe\n                    - else\n                        - using global swap, item was added into this pipe.\n                    - #item is in an undefined but valid state for its type \n                - else\n                    - item was NOT added into the pipe\n                    - #item == item (i.e. the value of item is unchanged)\n        !*/\n\n        bool enqueue_or_timeout (\n            T& item,\n            unsigned long timeout\n        );\n        /*!\n            ensures\n                - if (size() == max_size() && timeout > 0) then\n                    - this call to enqueue_or_timeout() blocks until one of the following is the case:\n                        - there is room in the pipe to add another item\n                        - max_size() == 0 and another thread is trying to dequeue from this pipe \n                          and we can pass our item object directly to that thread.\n                        - someone calls disable() \n                        - someone calls disable_enqueue() \n                        - timeout milliseconds passes\n                - else\n                    - this call does not block. \n                - if (this call to enqueue() returns true) then\n                    - #is_enabled() == true \n                    - #is_enqueue_enabled() == true\n                    - if (max_size() == 0) then\n                        - using global swap, item was passed directly to a \n                          thread attempting to dequeue from this pipe\n                    - else\n                        - using global swap, item was added into this pipe.\n                    - #item is in an undefined but valid state for its type\n                - else\n                    - item was NOT added into the pipe\n                    - #item == item (i.e. the value of item is unchanged)\n        !*/\n\n        bool dequeue (\n            T& item\n        );\n        /*!\n            ensures\n                - if (size() == 0) then\n                    - this call to dequeue() blocks until one of the following is the case:\n                        - there is something in the pipe we can dequeue\n                        - max_size() == 0 and another thread is trying to enqueue an item \n                          onto this pipe and we can receive our item directly from that thread.  \n                        - someone calls disable()\n                        - someone calls disable_dequeue()\n                - else\n                    - this call does not block.\n                - if (this call to dequeue() returns true) then\n                    - #is_enabled() == true \n                    - #is_dequeue_enabled() == true \n                    - the oldest item that was enqueued into this pipe has been\n                      swapped into #item.\n                - else\n                    - nothing was dequeued from this pipe.\n                    - #item == item (i.e. the value of item is unchanged)\n        !*/\n\n        bool dequeue_or_timeout (\n            T& item,\n            unsigned long timeout\n        );\n        /*!\n            ensures\n                - if (size() == 0 && timeout > 0) then\n                    - this call to dequeue_or_timeout() blocks until one of the following is the case:\n                        - there is something in the pipe we can dequeue \n                        - max_size() == 0 and another thread is trying to enqueue an item onto this \n                          pipe and we can receive our item directly from that thread.  \n                        - someone calls disable() \n                        - someone calls disable_dequeue()\n                        - timeout milliseconds passes\n                - else\n                    - this call does not block.\n                - if (this call to dequeue_or_timeout() returns true) then\n                    - #is_enabled() == true \n                    - #is_dequeue_enabled() == true \n                    - the oldest item that was enqueued into this pipe has been\n                      swapped into #item.\n                - else\n                    - nothing was dequeued from this pipe.\n                    - #item == item (i.e. the value of item is unchanged)\n        !*/\n\n    private:\n\n        // restricted functions\n        pipe(const pipe&);        // copy constructor\n        pipe& operator=(const pipe&);    // assignment operator\n\n    };    \n\n}\n\n#endif // DLIB_PIPE_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/pipe.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PIPe_\n#define DLIB_PIPe_ \n\n#include \"pipe/pipe_kernel_1.h\"\n\n\n#endif // DLIB_PIPe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/pixel.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PIXEl_ \n#define DLIB_PIXEl_\n\n#include <iostream>\n#include \"serialize.h\"\n#include <cmath>\n#include \"algs.h\"\n#include \"uintn.h\"\n#include <limits>\n#include \"enable_if.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*!\n        This file contains definitions of pixel objects and related classes and\n        functionality.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct pixel_traits;\n    /*!\n        WHAT THIS OBJECT REPRESENTS\n            As the name implies, this is a traits class for pixel types.\n            It defines the properties of a pixel.\n\n        This traits class will define the following public static members:\n            - bool grayscale\n            - bool rgb\n            - bool rgb_alpha\n            - bool hsi\n\n            - bool has_alpha\n\n            - long num \n\n            - basic_pixel_type\n            - basic_pixel_type min()\n            - basic_pixel_type max()\n            - is_unsigned\n\n        The above public constants are subject to the following constraints:\n            - only one of grayscale, rgb, rgb_alpha, or hsi is true\n            - if (rgb == true) then\n                - The type T will be a struct with 3 public members of type \n                  unsigned char named \"red\" \"green\" and \"blue\".  \n                - This type of pixel represents the RGB color space.\n                - num == 3\n                - has_alpha == false\n                - basic_pixel_type == unsigned char\n                - min() == 0 \n                - max() == 255\n                - is_unsigned == true\n            - if (rgb_alpha == true) then\n                - The type T will be a struct with 4 public members of type \n                  unsigned char named \"red\" \"green\" \"blue\" and \"alpha\".  \n                - This type of pixel represents the RGB color space with\n                  an alpha channel where an alpha of 0 represents a pixel\n                  that is totally transparent and 255 represents a pixel \n                  with maximum opacity.\n                - num == 4\n                - has_alpha == true \n                - basic_pixel_type == unsigned char\n                - min() == 0 \n                - max() == 255\n                - is_unsigned == true\n            - else if (hsi == true) then\n                - The type T will be a struct with 3 public members of type\n                  unsigned char named \"h\" \"s\" and \"i\".  \n                - This type of pixel represents the HSI color space.\n                - num == 3\n                - has_alpha == false \n                - basic_pixel_type == unsigned char\n                - min() == 0 \n                - max() == 255\n                - is_unsigned == true\n            - else\n                - grayscale == true\n                - This type of pixel represents a grayscale color space.  T \n                  will be some kind of basic scalar type such as unsigned int.\n                - num == 1\n                - has_alpha == false \n                - basic_pixel_type == T \n                - min() == the minimum obtainable value of objects of type T \n                - max() == the maximum obtainable value of objects of type T \n                - is_unsigned is true if min() == 0 and false otherwise\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    struct rgb_pixel\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple struct that represents an RGB colored graphical pixel.\n        !*/\n\n        rgb_pixel (\n        ) {}\n\n        rgb_pixel (\n            unsigned char red_,\n            unsigned char green_,\n            unsigned char blue_\n        ) : red(red_), green(green_), blue(blue_) {}\n\n        unsigned char red;\n        unsigned char green;\n        unsigned char blue;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct bgr_pixel\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple struct that represents an BGR colored graphical pixel.\n                (the reason it exists in addition to the rgb_pixel is so you can lay\n                it down on top of a memory region that organizes its color data in the\n                BGR format and still be able to read it)\n        !*/\n\n        bgr_pixel (\n        ) {}\n\n        bgr_pixel (\n            unsigned char blue_,\n            unsigned char green_,\n            unsigned char red_\n        ) : blue(blue_), green(green_), red(red_) {}\n\n        unsigned char blue;\n        unsigned char green;\n        unsigned char red;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct rgb_alpha_pixel\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple struct that represents an RGB colored graphical pixel\n                with an alpha channel.\n        !*/\n\n        rgb_alpha_pixel (\n        ) {}\n\n        rgb_alpha_pixel (\n            unsigned char red_,\n            unsigned char green_,\n            unsigned char blue_,\n            unsigned char alpha_\n        ) : red(red_), green(green_), blue(blue_), alpha(alpha_) {}\n\n        unsigned char red;\n        unsigned char green;\n        unsigned char blue;\n        unsigned char alpha;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct hsi_pixel\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple struct that represents an HSI colored graphical pixel.\n        !*/\n\n        hsi_pixel (\n        ) {}\n\n        hsi_pixel (\n            unsigned char h_,\n            unsigned char s_,\n            unsigned char i_\n        ) : h(h_), s(s_), i(i_) {}\n\n        unsigned char h;\n        unsigned char s;\n        unsigned char i;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename P1,\n        typename P2  \n        >\n    inline void assign_pixel (\n        P1& dest,\n        const P2& src\n    );\n    /*!\n        requires\n            - pixel_traits<P1> must be defined\n            - pixel_traits<P2> must be defined\n        ensures\n            - if (P1 and P2 are the same type of pixel) then\n                - simply copies the value of src into dest.  In other words,\n                  dest will be identical to src after this function returns.\n            - else if (P1 and P2 are not the same type of pixel) then\n                - assigns pixel src to pixel dest and does any necessary color space\n                  conversions.   \n                - When converting from a grayscale color space with more than 255 values the\n                  pixel intensity is saturated at pixel_traits<P1>::max() or pixel_traits<P1>::min()\n                  as appropriate.\n                - if (the dest pixel has an alpha channel and the src pixel doesn't) then\n                    - #dest.alpha == 255 \n                - else if (the src pixel has an alpha channel but the dest pixel doesn't) then\n                    - #dest == the original dest value blended with the src value according\n                      to the alpha channel in src.  \n                      (i.e.  #dest == src*(alpha/255) + dest*(1-alpha/255))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename P\n        >\n    inline typename pixel_traits<P>::basic_pixel_type get_pixel_intensity (\n        const P& src\n    );\n    /*!\n        requires\n            - pixel_traits<P> must be defined\n        ensures\n            - if (pixel_traits<P>::grayscale == true) then\n                - returns src\n            - else\n                - converts src to grayscale and returns the resulting value.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename P,\n        typename T\n        >\n    inline void assign_pixel_intensity (\n        P& dest,\n        const T& new_intensity\n    );\n    /*!\n        requires\n            - pixel_traits<P> must be defined\n            - pixel_traits<T> must be defined\n        ensures\n            - This function changes the intensity of the dest pixel. So if the pixel in \n              question is a grayscale pixel then it simply assigns that pixel with the \n              value of get_pixel_intensity(new_intensity).  However, if the pixel is not \n              a grayscale pixel then it converts the pixel to the HSI color space and sets \n              the I channel to the given intensity and then converts this HSI value back to \n              the original pixel's color space.\n            - Note that we don't necessarily have #get_pixel_intensity(dest) == get_pixel_intensity(new_intensity) \n              due to vagaries of how converting to and from HSI works out.\n            - if (the dest pixel has an alpha channel) then\n                - #dest.alpha == dest.alpha\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const rgb_pixel& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support for the rgb_pixel struct\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize (\n        rgb_pixel& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support for the rgb_pixel struct\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const bgr_pixel& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support for the bgr_pixel struct\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize (\n        bgr_pixel& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support for the bgr_pixel struct\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const rgb_alpha_pixel& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support for the rgb_alpha_pixel struct\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize (\n        rgb_alpha_pixel& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support for the rgb_alpha_pixel struct\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const hsi_pixel& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support for the hsi_pixel struct\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize (\n        hsi_pixel& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support for the hsi_pixel struct\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <>\n    struct pixel_traits<rgb_pixel>\n    {\n        const static bool rgb  = true;\n        const static bool rgb_alpha  = false;\n        const static bool grayscale = false;\n        const static bool hsi = false;\n        const static long num = 3;\n        typedef unsigned char basic_pixel_type;\n        static basic_pixel_type min() { return 0;}\n        static basic_pixel_type max() { return 255;}\n        const static bool is_unsigned = true;\n        const static bool has_alpha = false;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <>\n    struct pixel_traits<bgr_pixel>\n    {\n        const static bool rgb  = true;\n        const static bool rgb_alpha  = false;\n        const static bool grayscale = false;\n        const static bool hsi = false;\n        const static long num = 3;\n        typedef unsigned char basic_pixel_type;\n        static basic_pixel_type min() { return 0;}\n        static basic_pixel_type max() { return 255;}\n        const static bool is_unsigned = true;\n        const static bool has_alpha = false;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <>\n    struct pixel_traits<rgb_alpha_pixel>\n    {\n        const static bool rgb  = false;\n        const static bool rgb_alpha  = true;\n        const static bool grayscale = false;\n        const static bool hsi = false;\n        const static long num = 4;\n        typedef unsigned char basic_pixel_type;\n        static basic_pixel_type min() { return 0;}\n        static basic_pixel_type max() { return 255;}\n        const static bool is_unsigned = true;\n        const static bool has_alpha = true;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <>\n    struct pixel_traits<hsi_pixel>\n    {\n        const static bool rgb  = false;\n        const static bool rgb_alpha  = false;\n        const static bool grayscale = false;\n        const static bool hsi = true;\n        const static long num = 3;\n        typedef unsigned char basic_pixel_type;\n        static basic_pixel_type min() { return 0;}\n        static basic_pixel_type max() { return 255;}\n        const static bool is_unsigned = true;\n        const static bool has_alpha = false;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct grayscale_pixel_traits\n    {\n        const static bool rgb  = false;\n        const static bool rgb_alpha  = false;\n        const static bool grayscale = true;\n        const static bool hsi = false;\n        const static long num = 1;\n        const static bool has_alpha = false;\n        typedef T basic_pixel_type;\n        static basic_pixel_type min() { return std::numeric_limits<T>::min();}\n        static basic_pixel_type max() { return std::numeric_limits<T>::max();}\n        const static bool is_unsigned = is_unsigned_type<T>::value;\n    };\n\n    template <> struct pixel_traits<unsigned char>  : public grayscale_pixel_traits<unsigned char> {};\n    template <> struct pixel_traits<unsigned short> : public grayscale_pixel_traits<unsigned short> {};\n    template <> struct pixel_traits<unsigned int>   : public grayscale_pixel_traits<unsigned int> {};\n    template <> struct pixel_traits<unsigned long>  : public grayscale_pixel_traits<unsigned long> {};\n\n    template <> struct pixel_traits<char>           : public grayscale_pixel_traits<char> {};\n    template <> struct pixel_traits<signed char>    : public grayscale_pixel_traits<signed char> {};\n    template <> struct pixel_traits<short>          : public grayscale_pixel_traits<short> {};\n    template <> struct pixel_traits<int>            : public grayscale_pixel_traits<int> {};\n    template <> struct pixel_traits<long>           : public grayscale_pixel_traits<long> {};\n\n    template <> struct pixel_traits<int64>          : public grayscale_pixel_traits<int64> {};\n    template <> struct pixel_traits<uint64>         : public grayscale_pixel_traits<uint64> {};\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct float_grayscale_pixel_traits\n    {\n        const static bool rgb  = false;\n        const static bool rgb_alpha  = false;\n        const static bool grayscale = true;\n        const static bool hsi = false;\n        const static long num = 1;\n        const static bool has_alpha = false;\n        typedef T basic_pixel_type;\n        static basic_pixel_type min() { return -std::numeric_limits<T>::max();}\n        static basic_pixel_type max() { return std::numeric_limits<T>::max();}\n        const static bool is_unsigned = false;\n    };\n\n    template <> struct pixel_traits<float>          : public float_grayscale_pixel_traits<float> {};\n    template <> struct pixel_traits<double>         : public float_grayscale_pixel_traits<double> {};\n    template <> struct pixel_traits<long double>    : public float_grayscale_pixel_traits<long double> {};\n\n// ----------------------------------------------------------------------------------------\n\n    // The following is a bunch of conversion stuff for the assign_pixel function.\n\n    namespace assign_pixel_helpers\n    {\n\n    // -----------------------------\n        // all the same kind \n\n        template < typename P >\n        typename enable_if_c<pixel_traits<P>::grayscale>::type\n        assign(P& dest, const P& src) \n        { \n            dest = src;\n        }\n\n    // -----------------------------\n\n        template <typename T>\n        typename unsigned_type<T>::type make_unsigned (\n            const T& val\n        ) { return static_cast<typename unsigned_type<T>::type>(val); }\n\n        inline float make_unsigned(const float& val) { return val; }\n        inline double make_unsigned(const double& val) { return val; }\n        inline long double make_unsigned(const long double& val) { return val; }\n\n\n        template <typename T, typename P>\n        typename enable_if_c<pixel_traits<T>::is_unsigned == pixel_traits<P>::is_unsigned, bool>::type less_or_equal_to_max (\n            const P& p\n        ) \n        /*!\n            ensures\n                - returns true if p is <= max value of T\n        !*/\n        { \n            return p <= pixel_traits<T>::max();         \n        }\n\n        template <typename T, typename P>\n        typename enable_if_c<pixel_traits<T>::is_unsigned && !pixel_traits<P>::is_unsigned, bool>::type less_or_equal_to_max (\n            const P& p\n        ) \n        { \n            if (p <= 0)\n                return true;\n            else if (make_unsigned(p) <= pixel_traits<T>::max())\n                return true;\n            else\n                return false;\n        }\n\n        template <typename T, typename P>\n        typename enable_if_c<!pixel_traits<T>::is_unsigned && pixel_traits<P>::is_unsigned, bool>::type less_or_equal_to_max (\n            const P& p\n        ) \n        { \n            return p <= make_unsigned(pixel_traits<T>::max());\n        }\n\n    // -----------------------------\n\n        template <typename T, typename P>\n        typename enable_if_c<pixel_traits<P>::is_unsigned, bool >::type greater_or_equal_to_min (\n            const P& \n        ) { return true; }\n        /*!\n            ensures\n                - returns true if p is >= min value of T\n        !*/\n\n        template <typename T, typename P>\n        typename enable_if_c<!pixel_traits<P>::is_unsigned && pixel_traits<T>::is_unsigned, bool >::type greater_or_equal_to_min (\n            const P& p\n        ) \n        { \n            return p >= 0;\n        }\n\n        template <typename T, typename P>\n        typename enable_if_c<!pixel_traits<P>::is_unsigned && !pixel_traits<T>::is_unsigned, bool >::type greater_or_equal_to_min (\n            const P& p\n        ) \n        { \n            return p >= pixel_traits<T>::min();\n        }\n    // -----------------------------\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::grayscale && pixel_traits<P2>::grayscale>::type\n        assign(P1& dest, const P2& src) \n        { \n            /*\n                The reason for these weird comparison functions is to avoid getting compiler\n                warnings about comparing signed types to unsigned and stuff like that.  \n            */\n\n            if (less_or_equal_to_max<P1>(src))\n                if (greater_or_equal_to_min<P1>(src))\n                    dest = static_cast<P1>(src);\n                else\n                    dest = pixel_traits<P1>::min();\n            else\n                dest = pixel_traits<P1>::max();\n        }\n\n    // -----------------------------\n    // -----------------------------\n    // -----------------------------\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::rgb && pixel_traits<P2>::rgb>::type\n        assign(P1& dest, const P2& src) \n        { \n            dest.red = src.red; \n            dest.green = src.green; \n            dest.blue = src.blue; \n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::rgb_alpha && pixel_traits<P2>::rgb_alpha>::type\n        assign(P1& dest, const P2& src) \n        { \n            dest.red = src.red; \n            dest.green = src.green; \n            dest.blue = src.blue; \n            dest.alpha = src.alpha; \n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::hsi && pixel_traits<P2>::hsi>::type\n        assign(P1& dest, const P2& src) \n        { \n            dest.h = src.h; \n            dest.s = src.s; \n            dest.i = src.i; \n        }\n\n    // -----------------------------\n        // dest is a grayscale\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::grayscale && pixel_traits<P2>::rgb>::type\n        assign(P1& dest, const P2& src) \n        { \n            const unsigned int temp = ((static_cast<unsigned int>(src.red) +\n                                        static_cast<unsigned int>(src.green) +  \n                                        static_cast<unsigned int>(src.blue))/3);\n            assign_pixel(dest, temp);\n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::grayscale && pixel_traits<P2>::rgb_alpha>::type\n        assign(P1& dest, const P2& src) \n        { \n\n            const unsigned char avg = static_cast<unsigned char>((static_cast<unsigned int>(src.red) +\n                                                                  static_cast<unsigned int>(src.green) +  \n                                                                  static_cast<unsigned int>(src.blue))/3); \n\n            if (src.alpha == 255)\n            {\n                assign_pixel(dest, avg);\n            }\n            else\n            {\n                // perform this assignment using fixed point arithmetic: \n                // dest = src*(alpha/255) + dest*(1 - alpha/255);\n                // dest = src*(alpha/255) + dest*1 - dest*(alpha/255);\n                // dest = dest*1 + src*(alpha/255) - dest*(alpha/255);\n                // dest = dest*1 + (src - dest)*(alpha/255);\n                // dest += (src - dest)*(alpha/255);\n\n                int temp = avg;\n                // copy dest into dest_copy using assign_pixel to avoid potential\n                // warnings about implicit float to int warnings.\n                int dest_copy;\n                assign_pixel(dest_copy, dest);\n\n                temp -= dest_copy;\n\n                temp *= src.alpha;\n\n                temp /= 255;\n\n                assign_pixel(dest, temp+dest_copy);\n            }\n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::grayscale && pixel_traits<P2>::hsi>::type\n        assign(P1& dest, const P2& src) \n        { \n            assign_pixel(dest, src.i);\n        }\n\n\n    // -----------------------------\n\n        struct HSL\n        {\n            double h;\n            double s;\n            double l;\n        };\n\n        struct COLOUR\n        {\n            double r;\n            double g;\n            double b;\n        };\n\n        /*\n            I found this excellent bit of code for dealing with HSL spaces at \n            http://local.wasp.uwa.edu.au/~pbourke/colour/hsl/\n        */\n        /*\n            Calculate HSL from RGB\n            Hue is in degrees\n            Lightness is between 0 and 1\n            Saturation is between 0 and 1\n        */\n        inline HSL RGB2HSL(COLOUR c1)\n        {\n            double themin,themax,delta;\n            HSL c2;\n            using namespace std;\n\n            themin = std::min(c1.r,std::min(c1.g,c1.b));\n            themax = std::max(c1.r,std::max(c1.g,c1.b));\n            delta = themax - themin;\n            c2.l = (themin + themax) / 2;\n            c2.s = 0;\n            if (c2.l > 0 && c2.l < 1)\n                c2.s = delta / (c2.l < 0.5 ? (2*c2.l) : (2-2*c2.l));\n            c2.h = 0;\n            if (delta > 0) {\n                if (themax == c1.r && themax != c1.g)\n                    c2.h += (c1.g - c1.b) / delta;\n                if (themax == c1.g && themax != c1.b)\n                    c2.h += (2 + (c1.b - c1.r) / delta);\n                if (themax == c1.b && themax != c1.r)\n                    c2.h += (4 + (c1.r - c1.g) / delta);\n                c2.h *= 60;\n            }\n            return(c2);\n        }\n\n        /*\n            Calculate RGB from HSL, reverse of RGB2HSL()\n            Hue is in degrees\n            Lightness is between 0 and 1\n            Saturation is between 0 and 1\n        */\n        inline COLOUR HSL2RGB(HSL c1)\n        {\n            COLOUR c2,sat,ctmp;\n            using namespace std;\n\n            if (c1.h < 120) {\n                sat.r = (120 - c1.h) / 60.0;\n                sat.g = c1.h / 60.0;\n                sat.b = 0;\n            } else if (c1.h < 240) {\n                sat.r = 0;\n                sat.g = (240 - c1.h) / 60.0;\n                sat.b = (c1.h - 120) / 60.0;\n            } else {\n                sat.r = (c1.h - 240) / 60.0;\n                sat.g = 0;\n                sat.b = (360 - c1.h) / 60.0;\n            }\n            sat.r = std::min(sat.r,1.0);\n            sat.g = std::min(sat.g,1.0);\n            sat.b = std::min(sat.b,1.0);\n\n            ctmp.r = 2 * c1.s * sat.r + (1 - c1.s);\n            ctmp.g = 2 * c1.s * sat.g + (1 - c1.s);\n            ctmp.b = 2 * c1.s * sat.b + (1 - c1.s);\n\n            if (c1.l < 0.5) {\n                c2.r = c1.l * ctmp.r;\n                c2.g = c1.l * ctmp.g;\n                c2.b = c1.l * ctmp.b;\n            } else {\n                c2.r = (1 - c1.l) * ctmp.r + 2 * c1.l - 1;\n                c2.g = (1 - c1.l) * ctmp.g + 2 * c1.l - 1;\n                c2.b = (1 - c1.l) * ctmp.b + 2 * c1.l - 1;\n            }\n\n            return(c2);\n        }\n\n\n    // -----------------------------\n        // dest is a color rgb_pixel\n\n        template < typename P1 >\n        typename enable_if_c<pixel_traits<P1>::rgb>::type\n        assign(P1& dest, const unsigned char& src) \n        { \n            dest.red = src; \n            dest.green = src; \n            dest.blue = src; \n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::rgb && pixel_traits<P2>::grayscale>::type\n        assign(P1& dest, const P2& src) \n        { \n            unsigned char p;\n            assign_pixel(p, src);\n            dest.red = p; \n            dest.green = p; \n            dest.blue = p; \n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::rgb && pixel_traits<P2>::rgb_alpha>::type\n        assign(P1& dest, const P2& src) \n        { \n            if (src.alpha == 255)\n            {\n                dest.red = src.red;\n                dest.green = src.green;\n                dest.blue = src.blue;\n            }\n            else\n            {\n                // perform this assignment using fixed point arithmetic: \n                // dest = src*(alpha/255) + dest*(1 - alpha/255);\n                // dest = src*(alpha/255) + dest*1 - dest*(alpha/255);\n                // dest = dest*1 + src*(alpha/255) - dest*(alpha/255);\n                // dest = dest*1 + (src - dest)*(alpha/255);\n                // dest += (src - dest)*(alpha/255);\n\n                unsigned int temp_r = src.red;\n                unsigned int temp_g = src.green;\n                unsigned int temp_b = src.blue;\n\n                temp_r -= dest.red;\n                temp_g -= dest.green;\n                temp_b -= dest.blue;\n\n                temp_r *= src.alpha;\n                temp_g *= src.alpha;\n                temp_b *= src.alpha;\n\n                temp_r >>= 8;\n                temp_g >>= 8;\n                temp_b >>= 8;\n\n                dest.red += static_cast<unsigned char>(temp_r&0xFF);\n                dest.green += static_cast<unsigned char>(temp_g&0xFF);\n                dest.blue += static_cast<unsigned char>(temp_b&0xFF);\n            }\n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::rgb && pixel_traits<P2>::hsi>::type\n        assign(P1& dest, const P2& src) \n        { \n            COLOUR c;\n            HSL h;\n            h.h = src.h;\n            h.h = h.h/255.0*360;\n            h.s = src.s/255.0;\n            h.l = src.i/255.0;\n            c = HSL2RGB(h);\n\n            dest.red = static_cast<unsigned char>(c.r*255.0 + 0.5);\n            dest.green = static_cast<unsigned char>(c.g*255.0 + 0.5);\n            dest.blue = static_cast<unsigned char>(c.b*255.0 + 0.5);\n        }\n\n    // -----------------------------\n    // dest is a color rgb_alpha_pixel\n\n        template < typename P1 >\n        typename enable_if_c<pixel_traits<P1>::rgb_alpha>::type\n        assign(P1& dest, const unsigned char& src) \n        { \n            dest.red = src; \n            dest.green = src; \n            dest.blue = src; \n            dest.alpha = 255;\n        }\n\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::rgb_alpha && pixel_traits<P2>::grayscale>::type\n        assign(P1& dest, const P2& src) \n        { \n            unsigned char p;\n            assign_pixel(p, src);\n\n            dest.red = p; \n            dest.green = p; \n            dest.blue = p; \n            dest.alpha = 255;\n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::rgb_alpha && pixel_traits<P2>::rgb>::type\n        assign(P1& dest, const P2& src) \n        { \n            dest.red = src.red;\n            dest.green = src.green;\n            dest.blue = src.blue;\n            dest.alpha = 255;\n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::rgb_alpha && pixel_traits<P2>::hsi>::type\n        assign(P1& dest, const P2& src) \n        { \n            COLOUR c;\n            HSL h;\n            h.h = src.h;\n            h.h = h.h/255.0*360;\n            h.s = src.s/255.0;\n            h.l = src.i/255.0;\n            c = HSL2RGB(h);\n\n            dest.red = static_cast<unsigned char>(c.r*255.0 + 0.5);\n            dest.green = static_cast<unsigned char>(c.g*255.0 + 0.5);\n            dest.blue = static_cast<unsigned char>(c.b*255.0 + 0.5);\n            dest.alpha = 255;\n        }\n\n    // -----------------------------\n        // dest is an hsi pixel\n\n        template < typename P1>\n        typename enable_if_c<pixel_traits<P1>::hsi>::type\n        assign(P1& dest, const unsigned char& src) \n        { \n            dest.h = 0;\n            dest.s = 0;\n            dest.i = src;\n        }\n\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::hsi && pixel_traits<P2>::grayscale>::type\n        assign(P1& dest, const P2& src) \n        { \n            dest.h = 0;\n            dest.s = 0;\n            assign_pixel(dest.i, src);\n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::hsi && pixel_traits<P2>::rgb>::type\n        assign(P1& dest, const P2& src) \n        { \n            COLOUR c1;\n            HSL c2;\n            c1.r = src.red/255.0;\n            c1.g = src.green/255.0;\n            c1.b = src.blue/255.0;\n            c2 = RGB2HSL(c1);\n\n            dest.h = static_cast<unsigned char>(c2.h/360.0*255.0 + 0.5);\n            dest.s = static_cast<unsigned char>(c2.s*255.0 + 0.5);\n            dest.i = static_cast<unsigned char>(c2.l*255.0 + 0.5);\n        }\n\n        template < typename P1, typename P2 >\n        typename enable_if_c<pixel_traits<P1>::hsi && pixel_traits<P2>::rgb_alpha>::type\n        assign(P1& dest, const P2& src) \n        { \n            rgb_pixel temp;\n            // convert target hsi pixel to rgb\n            assign_pixel_helpers::assign(temp,dest);\n\n            // now assign the rgb_alpha value to our temp rgb pixel\n            assign_pixel_helpers::assign(temp,src);\n\n            // now we can just go assign the new rgb value to the\n            // hsi pixel\n            assign_pixel_helpers::assign(dest,temp);\n        }\n\n    }\n\n    // -----------------------------\n\n    template < typename P1, typename P2 >\n    inline void assign_pixel (\n        P1& dest,\n        const P2& src\n    ) { assign_pixel_helpers::assign(dest,src); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename P,\n        typename T\n        >\n    inline typename enable_if_c<pixel_traits<P>::grayscale>::type assign_pixel_intensity_helper (\n        P& dest,\n        const T& new_intensity\n    )\n    {\n        assign_pixel(dest, new_intensity);\n    }\n\n    template <\n        typename P,\n        typename T\n        >\n    inline typename enable_if_c<pixel_traits<P>::grayscale == false&&\n                                pixel_traits<P>::has_alpha>::type assign_pixel_intensity_helper (\n        P& dest,\n        const T& new_intensity\n    )\n    {\n        hsi_pixel p;\n        const unsigned long old_alpha = dest.alpha;\n        dest.alpha = 255;\n        rgb_pixel temp;\n        assign_pixel(temp, dest); // put dest into an rgb_pixel to avoid the somewhat complicated assign_pixel(hsi,rgb_alpha).\n        assign_pixel(p,temp);\n        assign_pixel(p.i, new_intensity);\n        assign_pixel(dest,p);\n        dest.alpha = old_alpha;\n    }\n\n    template <\n        typename P,\n        typename T\n        >\n    inline typename enable_if_c<pixel_traits<P>::grayscale == false&&\n                                pixel_traits<P>::has_alpha == false>::type assign_pixel_intensity_helper (\n        P& dest,\n        const T& new_intensity\n    )\n    {\n        hsi_pixel p;\n        assign_pixel(p,dest);\n        assign_pixel(p.i, new_intensity);\n        assign_pixel(dest,p);\n    }\n\n    template <\n        typename P,\n        typename T\n        >\n    inline void assign_pixel_intensity (\n        P& dest,\n        const T& new_intensity\n    )\n    {\n        assign_pixel_intensity_helper(dest, new_intensity);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename P\n        >\n    inline typename enable_if_c<pixel_traits<P>::grayscale, P>::type get_pixel_intensity_helper (\n        const P& src \n    )\n    {\n        return src;\n    }\n\n    template <\n        typename P\n        >\n    inline typename enable_if_c<pixel_traits<P>::grayscale == false&&\n                                pixel_traits<P>::has_alpha, \n                                typename pixel_traits<P>::basic_pixel_type>::type get_pixel_intensity_helper (\n        const P& src\n    )\n    {\n        P temp = src;\n        temp.alpha = 255;\n        typename pixel_traits<P>::basic_pixel_type p;\n        assign_pixel(p,temp);\n        return p;\n    }\n\n    template <\n        typename P\n        >\n    inline typename enable_if_c<pixel_traits<P>::grayscale == false&&\n                                pixel_traits<P>::has_alpha == false, \n                                typename pixel_traits<P>::basic_pixel_type>::type get_pixel_intensity_helper (\n        const P& src\n    )\n    {\n        typename pixel_traits<P>::basic_pixel_type p;\n        assign_pixel(p,src);\n        return p;\n    }\n\n    template <\n        typename P\n        >\n    inline typename pixel_traits<P>::basic_pixel_type get_pixel_intensity (\n        const P& src\n    )\n    {\n        return get_pixel_intensity_helper(src);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const rgb_alpha_pixel& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            serialize(item.red,out);\n            serialize(item.green,out);\n            serialize(item.blue,out);\n            serialize(item.alpha,out);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing object of type rgb_alpha_pixel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize (\n        rgb_alpha_pixel& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            deserialize(item.red,in);\n            deserialize(item.green,in);\n            deserialize(item.blue,in);\n            deserialize(item.alpha,in);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing object of type rgb_alpha_pixel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const rgb_pixel& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            serialize(item.red,out);\n            serialize(item.green,out);\n            serialize(item.blue,out);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing object of type rgb_pixel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize (\n        rgb_pixel& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            deserialize(item.red,in);\n            deserialize(item.green,in);\n            deserialize(item.blue,in);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing object of type rgb_pixel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const bgr_pixel& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            serialize(item.blue,out);\n            serialize(item.green,out);\n            serialize(item.red,out);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing object of type bgr_pixel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize (\n        bgr_pixel& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            deserialize(item.blue,in);\n            deserialize(item.green,in);\n            deserialize(item.red,in);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing object of type bgr_pixel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const hsi_pixel& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            serialize(item.h,out);\n            serialize(item.s,out);\n            serialize(item.i,out);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing object of type hsi_pixel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void deserialize (\n        hsi_pixel& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            deserialize(item.h,in);\n            deserialize(item.s,in);\n            deserialize(item.i,in);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing object of type hsi_pixel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_PIXEl_ \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/platform.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PLATFORm_\n#define DLIB_PLATFORm_\n\n\n/*!\n    This file ensures that:\n        - if (we are compiling under a posix platform) then\n            - POSIX will be defined\n            - if (this is also Mac OS X) then\n                - MACOSX will be defined\n            - if (this is also HP-UX) then\n                - HPUX will be defined\n        - if (we are compiling under an MS Windows platform) then\n            - WIN32 will be defined\n!*/\n\n\n/*\n    A good reference for this sort of information is\n    http://predef.sourceforge.net/\n*/\n\n// Define WIN32 if this is MS Windows\n#ifndef WIN32\n    #if defined( _MSC_VER) || defined(__BORLANDC__) || defined(_WIN32) || defined(__WIN32__) || defined(__TOS_WIN__)\n    #define WIN32 \n    #endif \n#endif\n\n#ifndef WIN32\n    // since this is the only other platform the library currently supports\n    // just assume it is POSIX if it isn't WIN32\n    #ifndef POSIX\n        #define POSIX\n    #endif\n \n    #ifndef HPUX\n       #if defined(__hpux ) || defined(hpux) || defined (_hpux)\n       #define HPUX\n       #endif\t\n    #endif\n\n    #ifndef MACOSX\n        #ifdef __MACOSX__\n        #define MACOSX\n        #endif \n        #ifdef __APPLE__\n        #define MACOSX\n        #endif\n    #endif\n\n#endif\n\n\n\n\n#endif // DLIB_PLATFORm_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/python/boost_python_utils.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BOOST_PYTHON_UtILS_Hh_\n#define DLIB_BOOST_PYTHON_UtILS_Hh_\n\n#include <boost/python.hpp>\n#include <vector>\n#include <string>\n#include <dlib/serialize.h>\n\ninline bool hasattr(\n    boost::python::object obj, \n    const std::string& attr_name\n) \n/*!\n    ensures\n        - if (obj has an attribute named attr_name) then\n            - returns true\n        - else\n            - returns false\n!*/\n{\n     return PyObject_HasAttrString(obj.ptr(), attr_name.c_str());\n}\n\n// ----------------------------------------------------------------------------------------\n\ntemplate <typename T>\nstd::vector<T> python_list_to_vector (\n    const boost::python::object& obj\n)\n/*!\n    ensures\n        - converts a python object into a std::vector<T> and returns it.\n!*/\n{\n    std::vector<T> vect(len(obj));\n    for (unsigned long i = 0; i < vect.size(); ++i)\n    {\n        vect[i] = boost::python::extract<T>(obj[i]);\n    }\n    return vect;\n}\n\ntemplate <typename T>\nboost::python::list vector_to_python_list (\n    const std::vector<T>& vect\n)\n/*!\n    ensures\n        - converts a std::vector<T> into a python list object.\n!*/\n{\n    boost::python::list obj;\n    for (unsigned long i = 0; i < vect.size(); ++i)\n        obj.append(vect[i]);\n    return obj;\n}\n\n// ----------------------------------------------------------------------------------------\n\ntemplate <typename T>\nboost::shared_ptr<T> load_object_from_file (\n    const std::string& filename\n)\n/*!\n    ensures\n        - deserializes an object of type T from the given file and returns it.\n!*/\n{\n    std::ifstream fin(filename.c_str(), std::ios::binary);\n    if (!fin)\n        throw dlib::error(\"Unable to open \" + filename);\n    boost::shared_ptr<T> obj(new T());\n    deserialize(*obj, fin);\n    return obj;\n}\n\n// ----------------------------------------------------------------------------------------\n\n\n#endif // DLIB_BOOST_PYTHON_UtILS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/python/numpy.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PYTHON_NuMPY_Hh_\n#define DLIB_PYTHON_NuMPY_Hh_\n\n#include <boost/python.hpp>\n#include <dlib/error.h>\n#include <dlib/algs.h>\n#include <dlib/string.h>\n\n// ----------------------------------------------------------------------------------------\n\ntemplate <typename T>\nvoid validate_numpy_array_type (\n    boost::python::object& obj\n)\n{\n    using namespace boost::python;\n    const char ch = extract<char>(obj.attr(\"dtype\").attr(\"char\"));\n\n    if (dlib::is_same_type<T,double>::value && ch != 'd')\n        throw dlib::error(\"Expected numpy.ndarray of float64\");\n    if (dlib::is_same_type<T,float>::value && ch != 'f')\n        throw dlib::error(\"Expected numpy.ndarray of float32\");\n    if (dlib::is_same_type<T,dlib::int32>::value && ch != 'i')\n        throw dlib::error(\"Expected numpy.ndarray of int32\");\n    if (dlib::is_same_type<T,unsigned char>::value && ch != 'B')\n        throw dlib::error(\"Expected numpy.ndarray of uint8\");\n}\n\n// ----------------------------------------------------------------------------------------\n\ntemplate <typename T, int dims>\nvoid get_numpy_ndarray_parts (\n    boost::python::object& obj,\n    T*& data,\n    long (&shape)[dims]\n)\n/*!\n    ensures\n        - extracts the pointer to the data from the given numpy ndarray.  Stores the shape\n          of the array into #shape.\n!*/\n{\n    Py_buffer pybuf;\n    if (PyObject_GetBuffer(obj.ptr(), &pybuf, PyBUF_ND | PyBUF_WRITABLE ))\n        throw dlib::error(\"Expected contiguous and writable numpy.ndarray.\");\n\n    try\n    {\n        validate_numpy_array_type<T>(obj);\n        data = (T*)pybuf.buf;\n\n        if (pybuf.ndim > dims)\n            throw dlib::error(\"Expected array with \" + dlib::cast_to_string(dims) + \" dimensions.\");\n\n        for (int i = 0; i < dims; ++i)\n        {\n            if (i < pybuf.ndim)\n                shape[i] = pybuf.shape[i];\n            else\n                shape[i] = 1;\n        }\n    }\n    catch(...)\n    {\n        PyBuffer_Release(&pybuf);\n        throw;\n    }\n    PyBuffer_Release(&pybuf);\n}\n\n// ----------------------------------------------------------------------------------------\n\ntemplate <typename T, int dims>\nvoid get_numpy_ndarray_parts (\n    const boost::python::object& obj,\n    const T*& data,\n    long (&shape)[dims]\n)\n/*!\n    ensures\n        - extracts the pointer to the data from the given numpy ndarray.  Stores the shape\n          of the array into #shape.\n!*/\n{\n    Py_buffer pybuf;\n    if (PyObject_GetBuffer(obj.ptr(), &pybuf, PyBUF_ND ))\n        throw dlib::error(\"Expected contiguous numpy.ndarray.\");\n\n    try\n    {\n        validate_numpy_array_type<T>(obj);\n        data = (const T*)pybuf.buf;\n\n        if (pybuf.ndim > dims)\n            throw dlib::error(\"Expected array with \" + dlib::cast_to_string(dims) + \" dimensions.\");\n\n        for (int i = 0; i < dims; ++i)\n        {\n            if (i < pybuf.ndim)\n                shape[i] = pybuf.shape[i];\n            else\n                shape[i] = 1;\n        }\n    }\n    catch(...)\n    {\n        PyBuffer_Release(&pybuf);\n        throw;\n    }\n    PyBuffer_Release(&pybuf);\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_PYTHON_NuMPY_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/python/numpy_image.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PYTHON_NuMPY_IMAGE_Hh_\n#define DLIB_PYTHON_NuMPY_IMAGE_Hh_\n\n#include \"numpy.h\"\n#include <dlib/pixel.h>\n#include <dlib/matrix.h>\n\n\n// ----------------------------------------------------------------------------------------\n\nclass numpy_gray_image\n{\npublic:\n\n    numpy_gray_image() : _data(0), _nr(0), _nc(0) {}\n    numpy_gray_image (boost::python::object& img) \n    {\n        long shape[2];\n        get_numpy_ndarray_parts(img, _data, shape);\n        _nr = shape[0];\n        _nc = shape[1];\n    }\n\n    friend inline long num_rows(const numpy_gray_image& img) { return img._nr; } \n    friend inline long num_columns(const numpy_gray_image& img) { return img._nc; } \n    friend inline void* image_data(numpy_gray_image& img) { return img._data; } \n    friend inline const void* image_data(const numpy_gray_image& img) { return img._data; }\n    friend inline long width_step(const numpy_gray_image& img) { return img._nc*sizeof(unsigned char); }\n\nprivate:\n\n    unsigned char* _data;\n    long _nr;\n    long _nc;\n};\n\nnamespace dlib\n{\n    template <>\n    struct image_traits<numpy_gray_image >\n    {\n        typedef unsigned char pixel_type;\n    };\n}\n\n// ----------------------------------------------------------------------------------------\n\ninline bool is_gray_python_image (boost::python::object& img)\n{\n    try\n    {\n        numpy_gray_image temp(img);\n        return true;\n    }\n    catch (dlib::error&)\n    {\n        return false;\n    }\n}\n\n// ----------------------------------------------------------------------------------------\n\nclass numpy_rgb_image\n{\npublic:\n\n    numpy_rgb_image() : _data(0), _nr(0), _nc(0) {}\n    numpy_rgb_image (boost::python::object& img) \n    {\n        long shape[3];\n        get_numpy_ndarray_parts(img, _data, shape);\n        _nr = shape[0];\n        _nc = shape[1];\n        if (shape[2] != 3)\n            throw dlib::error(\"Error, python object is not a three band image and therefore can't be a RGB image.\");\n    }\n\n    friend inline long num_rows(const numpy_rgb_image& img) { return img._nr; } \n    friend inline long num_columns(const numpy_rgb_image& img) { return img._nc; } \n    friend inline void* image_data(numpy_rgb_image& img) { return img._data; } \n    friend inline const void* image_data(const numpy_rgb_image& img) { return img._data; }\n    friend inline long width_step(const numpy_rgb_image& img) { return img._nc*sizeof(dlib::rgb_pixel); }\n\n\nprivate:\n\n    dlib::rgb_pixel* _data;\n    long _nr;\n    long _nc;\n};\n\nnamespace dlib\n{\n    template <>\n    struct image_traits<numpy_rgb_image >\n    {\n        typedef rgb_pixel pixel_type;\n    };\n}\n\n// ----------------------------------------------------------------------------------------\n\n\ninline bool is_rgb_python_image (boost::python::object& img)\n{\n    try\n    {\n        numpy_rgb_image temp(img);\n        return true;\n    }\n    catch (dlib::error&)\n    {\n        return false;\n    }\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_PYTHON_NuMPY_IMAGE_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/python/pyassert.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PYaSSERT_Hh_\n#define DLIB_PYaSSERT_Hh_\n\n#include <boost/python.hpp>\n\n#define pyassert(_exp,_message)                                             \\\n    {if ( !(_exp) )                                                         \\\n    {                                                                       \\\n        PyErr_SetString( PyExc_ValueError, _message );                      \\\n        boost::python::throw_error_already_set();                           \\\n    }}                                                                      \n\n#endif // DLIB_PYaSSERT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/python/serialize_pickle.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SERIALIZE_PiCKLE_Hh_\n#define DLIB_SERIALIZE_PiCKLE_Hh_\n\n#include <dlib/serialize.h>\n#include <boost/python.hpp>\n#include <sstream>\n\ntemplate <typename T>\nstruct serialize_pickle : boost::python::pickle_suite\n{\n    static boost::python::tuple getstate(\n        const T& item \n    )\n    {\n        using namespace dlib;\n        std::ostringstream sout;\n        serialize(item, sout);\n        return boost::python::make_tuple(sout.str());\n    }\n\n    static void setstate(\n        T& item, \n        boost::python::tuple state\n    )\n    {\n        using namespace dlib;\n        using namespace boost::python;\n        if (len(state) != 1)\n        {\n            PyErr_SetObject(PyExc_ValueError,\n                (\"expected 1-item tuple in call to __setstate__; got %s\"\n                 % state).ptr()\n            );\n            throw_error_already_set();\n        }\n\n        str data = extract<str>(state[0]);\n        std::string temp(extract<const char*>(data), len(data));\n        std::istringstream sin(temp);\n        deserialize(item, sin);\n    }\n};\n\n#endif // DLIB_SERIALIZE_PiCKLE_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/python.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PYTHoN_TOP_\n#define DLIB_PYTHoN_TOP_ \n\n#include \"python/boost_python_utils.h\"\n#include \"python/pyassert.h\"\n#include \"python/serialize_pickle.h\"\n#include \"python/numpy.h\"\n#include \"python/numpy_image.h\"\n\n#endif // DLIB_PYTHoN_TOP_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/quantum_computing/quantum_computing.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_QUANTUM_COMPUTINg_1_\n#define DLIB_QUANTUM_COMPUTINg_1_\n\n#include <complex>\n#include <cmath>\n#include \"../matrix.h\"\n#include \"../rand.h\"\n#include \"../enable_if.h\"\n#include \"../algs.h\"\n#include \"quantum_computing_abstract.h\"\n\nnamespace dlib\n{\n\n    template <typename T>\n    struct gate_traits {};\n\n    namespace qc_helpers\n    {\n\n    // ------------------------------------------------------------------------------------\n\n    // This is a template to compute the value of 2^n at compile time\n        template <long n>\n        struct exp_2_n\n        {\n            COMPILE_TIME_ASSERT(0 <= n && n <= 30);\n            static const long value = exp_2_n<n-1>::value*2;\n        };\n\n        template <>\n        struct exp_2_n<0>\n        {\n            static const long value = 1;\n        };\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n    typedef std::complex<double> qc_scalar_type;\n\n// ----------------------------------------------------------------------------------------\n\n    class quantum_register\n    {\n    public:\n\n        quantum_register()\n        {\n            set_num_bits(1);\n        }\n\n        int num_bits (\n        ) const\n        {\n            return num_bits_in_register;\n        }\n\n        void set_num_bits (\n            int num_bits\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(1 <= num_bits && num_bits <= 30,\n                \"\\tvoid quantum_register::set_num_bits()\"\n                << \"\\n\\tinvalid arguments to this function\"\n                << \"\\n\\tnum_bits: \" << num_bits \n                << \"\\n\\tthis:     \" << this\n                );\n\n            num_bits_in_register = num_bits;\n\n            unsigned long size = 1;\n            for (int i = 0; i < num_bits; ++i)\n                size *= 2;\n\n            state.set_size(size);\n\n            zero_all_bits();\n        }\n\n        void zero_all_bits()\n        {\n            set_all_elements(state,0);\n            state(0) = 1;\n        }\n\n        void append ( \n            const quantum_register& reg\n        )\n        {\n            num_bits_in_register += reg.num_bits_in_register;\n            state = tensor_product(state, reg.state);\n        }\n\n        template <typename rand_type>\n        bool measure_bit (\n            int bit,\n            rand_type& rnd\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(0 <= bit && bit < num_bits(),\n                \"\\tbool quantum_register::measure_bit()\"\n                << \"\\n\\tinvalid arguments to this function\"\n                << \"\\n\\tbit:        \" << bit \n                << \"\\n\\tnum_bits(): \" << num_bits() \n                << \"\\n\\tthis:       \" << this\n                );\n\n            const bool value = (rnd.get_random_double() < probability_of_bit(bit));\n\n            // Next we set all the states where this bit doesn't have the given value to 0\n\n            // But first make a mask that selects our bit\n            unsigned long mask = 1;\n            for (int i = 0; i < bit; ++i)\n                mask <<= 1;\n\n            // loop over all the elements in the state vector and zero out those that\n            // conflict with the measurement we just made.\n            for (long r = 0; r < state.nr(); ++r)\n            {\n                const unsigned long field = r;\n                // if this state indicates that the bit should be set and it isn't\n                if ((field & mask) && !value)\n                {\n                    state(r) = 0;\n                }\n                // else if this state indicates that the bit should not be set and it is \n                else if (!(field & mask) && value)\n                {\n                    state(r) = 0;\n                }\n            }\n\n            // normalize the state\n            state = state/(std::sqrt(sum(norm(state))));\n\n            return value;\n        }\n\n        template <typename rand_type>\n        bool measure_and_remove_bit (\n            int bit,\n            rand_type& rnd\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(0 <= bit && bit < num_bits() && num_bits() > 0,\n                \"\\tbool quantum_register::measure_and_remove_bit()\"\n                << \"\\n\\tinvalid arguments to this function\"\n                << \"\\n\\tbit:        \" << bit \n                << \"\\n\\tnum_bits(): \" << num_bits() \n                << \"\\n\\tthis:       \" << this\n                );\n\n\n            const bool value = (rnd.get_random_double() < probability_of_bit(bit));\n            quantum_register temp;\n            temp.set_num_bits(num_bits()-1);\n\n\n            // Next we set all the states where this bit doesn't have the given value to 0\n\n            // But first make a mask that selects our bit\n            unsigned long mask = 1;\n            for (int i = 0; i < bit; ++i)\n                mask <<= 1;\n\n            long count = 0;\n            for (long r = 0; r < state.nr(); ++r)\n            {\n                const unsigned long field = r;\n                // if this basis vector is one that matches the measured state then keep it\n                if (((field & mask) != 0) == value)\n                {\n                    temp.state(count) = state(r);\n                    ++count;\n                }\n            }\n\n            // normalize the state\n            temp.state = temp.state/std::sqrt(sum(norm(temp.state)));\n\n            temp.swap(*this);\n\n            return value;\n        }\n\n        double probability_of_bit (\n            int bit\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(0 <= bit && bit < num_bits(),\n                \"\\tdouble quantum_register::probability_of_bit()\"\n                << \"\\n\\tinvalid arguments to this function\"\n                << \"\\n\\tbit:        \" << bit \n                << \"\\n\\tnum_bits(): \" << num_bits() \n                << \"\\n\\tthis:       \" << this\n                );\n\n\n            // make a mask that selects our bit\n            unsigned long mask = 1;\n            for (int i = 0; i < bit; ++i)\n                mask <<= 1;\n\n            // now find the total probability of all the states that have the given bit set\n            double prob = 0;\n            for (long r = 0; r < state.nr(); ++r)\n            {\n                const unsigned long field = r;\n                if (field & mask)\n                {\n                    prob += std::norm(state(r));\n                }\n            }\n\n\n            return prob;\n        }\n\n        const matrix<qc_scalar_type,0,1>& state_vector() const { return state; }\n        matrix<qc_scalar_type,0,1>& state_vector() { return state; }\n\n        void swap (\n            quantum_register& item\n        )\n        {\n            exchange(num_bits_in_register, item.num_bits_in_register);\n            state.swap(item.state);\n        }\n\n    private:\n\n        int num_bits_in_register;\n        matrix<qc_scalar_type,0,1> state;\n    };\n\n    inline void swap (\n        quantum_register& a,\n        quantum_register& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class gate_exp\n    {\n    public:\n        static const long num_bits = gate_traits<T>::num_bits;\n        static const long dims = gate_traits<T>::dims;\n\n        gate_exp(T& exp_) : exp(exp_) {}\n\n        const qc_scalar_type operator() (long r, long c) const { return exp(r,c); }\n\n        const matrix<qc_scalar_type> mat (\n        ) const\n        {\n            matrix<qc_scalar_type,dims,dims> m;\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = exp(r,c);\n                }\n            }\n            return m;\n        }\n\n        void apply_gate_to (quantum_register& reg) const\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(reg.num_bits() == num_bits,\n                \"\\tvoid gate_exp::apply_gate_to()\"\n                << \"\\n\\tinvalid arguments to this function\"\n                << \"\\n\\treg.num_bits(): \" << reg.num_bits() \n                << \"\\n\\tnum_bits:       \" << num_bits \n                << \"\\n\\tthis:           \" << this\n                );\n\n\n            quantum_register temp(reg);\n\n\n            // check if any of the elements of the register are 1 and if so then\n            // we don't have to do the full matrix multiply.  Or check if only a small number are non-zero.\n            long non_zero_elements = 0;\n            for (long r = 0; r < dims; ++r)\n            {\n                if (reg.state_vector()(r) != qc_scalar_type(0))\n                    ++non_zero_elements;\n\n                reg.state_vector()(r) = 0;\n            }\n\n\n            if (non_zero_elements > 3)\n            {\n                // do a full matrix multiply to compute the output state\n                for (long r = 0; r < dims; ++r)\n                {\n                    reg.state_vector()(r) = compute_state_element(temp.state_vector(),r);\n                }\n            }\n            else\n            {\n                // do a matrix multiply but only use the columns in the gate matrix \n                // that correspond to the non-zero register elements\n                for (long r = 0; r < dims; ++r)\n                {\n                    if (temp.state_vector()(r) != qc_scalar_type(0))\n                    {\n                        for (long i = 0; i < dims; ++i)\n                        {\n                            reg.state_vector()(i) += temp.state_vector()(r)*exp(i,r);\n                        }\n                    }\n                }\n            }\n        }\n\n        template <typename exp>\n        qc_scalar_type compute_state_element (\n            const matrix_exp<exp>& reg,\n            long row_idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(reg.nr() == dims && reg.nc() == 1 && \n                         0 <= row_idx && row_idx < dims,\n                \"\\tqc_scalar_type gate_exp::compute_state_element(reg,row_idx)\"\n                << \"\\n\\tinvalid arguments to this function\"\n                << \"\\n\\treg.nr(): \" << reg.nr() \n                << \"\\n\\treg.nc(): \" << reg.nc()\n                << \"\\n\\tdims:     \" << dims\n                << \"\\n\\trow_idx:  \" << row_idx \n                << \"\\n\\tthis:     \" << this\n                );\n\n\n            return this->exp.compute_state_element(reg,row_idx);\n        }\n\n        const T& ref() const { return exp; }\n\n    private:\n        T& exp;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <typename T, typename U>\n    class composite_gate;\n\n    template <typename T, typename U>\n    struct gate_traits<composite_gate<T,U> >\n    {\n        static const long num_bits = T::num_bits + U::num_bits;\n        static const long dims = qc_helpers::exp_2_n<num_bits>::value;\n    };\n\n    template <typename T, typename U>\n    class composite_gate : public gate_exp<composite_gate<T,U> >\n    {\n    public:\n\n        typedef T lhs_type;\n        typedef U rhs_type;\n\n        composite_gate(const composite_gate& g) : gate_exp<composite_gate>(*this), lhs(g.lhs), rhs(g.rhs) {}\n\n        composite_gate(\n            const gate_exp<T>& lhs_,\n            const gate_exp<U>& rhs_\n        ) : gate_exp<composite_gate>(*this), lhs(lhs_.ref()), rhs(rhs_.ref()) {}\n\n\n\n        static const long num_bits = gate_traits<composite_gate>::num_bits;\n        static const long dims = gate_traits<composite_gate>::dims;\n\n        const qc_scalar_type operator() (long r, long c) const { return lhs(r/U::dims,c/U::dims)*rhs(r%U::dims, c%U::dims); }\n\n        template <typename exp>\n        qc_scalar_type compute_state_element (\n            const matrix_exp<exp>& reg,\n            long row_idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(reg.nr() == dims && reg.nc() == 1 && \n                         0 <= row_idx && row_idx < dims,\n                \"\\tqc_scalar_type composite_gate::compute_state_element(reg,row_idx)\"\n                << \"\\n\\tinvalid arguments to this function\"\n                << \"\\n\\treg.nr(): \" << reg.nr() \n                << \"\\n\\treg.nc(): \" << reg.nc()\n                << \"\\n\\tdims:     \" << dims\n                << \"\\n\\trow_idx:  \" << row_idx \n                << \"\\n\\tthis:     \" << this\n                );\n\n\n            qc_scalar_type result = 0;\n            for (long c = 0; c < T::dims; ++c)\n            {\n                if (lhs(row_idx/U::dims,c) != qc_scalar_type(0))\n                {\n                    result += lhs(row_idx/U::dims,c) * rhs.compute_state_element(subm(reg,c*U::dims,0,U::dims,1), row_idx%U::dims);\n                }\n            }\n\n            return result;\n        }\n\n\n        const T lhs;\n        const U rhs;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <long bits>\n    class gate;\n    template <long bits>\n    struct gate_traits<gate<bits> >\n    {\n        static const long num_bits = bits;\n        static const long dims = qc_helpers::exp_2_n<num_bits>::value;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <long bits>\n    class gate : public gate_exp<gate<bits> >\n    {\n    public:\n        gate() : gate_exp<gate>(*this) { set_all_elements(data,0); }\n        gate(const gate& g) :gate_exp<gate>(*this), data(g.data) {}\n\n        template <typename T>\n        explicit gate(const gate_exp<T>& g) : gate_exp<gate>(*this) \n        {\n            COMPILE_TIME_ASSERT(T::num_bits == num_bits);\n            for (long r = 0; r < dims; ++r)\n            {\n                for (long c = 0; c < dims; ++c)\n                {\n                    data(r,c) = g(r,c);\n                }\n            }\n        }\n\n        static const long num_bits = gate_traits<gate>::num_bits;\n        static const long dims = gate_traits<gate>::dims;\n\n        const qc_scalar_type& operator() (long r, long c) const { return data(r,c); }\n        qc_scalar_type& operator() (long r, long c)  { return data(r,c); }\n\n        template <typename exp>\n        qc_scalar_type compute_state_element (\n            const matrix_exp<exp>& reg,\n            long row_idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(reg.nr() == dims && reg.nc() == 1 && \n                         0 <= row_idx && row_idx < dims,\n                \"\\tqc_scalar_type gate::compute_state_element(reg,row_idx)\"\n                << \"\\n\\tinvalid arguments to this function\"\n                << \"\\n\\treg.nr(): \" << reg.nr() \n                << \"\\n\\treg.nc(): \" << reg.nc()\n                << \"\\n\\tdims:     \" << dims\n                << \"\\n\\trow_idx:  \" << row_idx \n                << \"\\n\\tthis:     \" << this\n                );\n\n\n            return (data*reg)(row_idx);\n        }\n\n    private:\n\n        matrix<qc_scalar_type,dims,dims> data;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    namespace qc_helpers\n    {\n        // This is the maximum number of bits used for cached sub-matrices in composite_gate expressions\n        const int qc_block_chunking_size = 8;\n\n        template <typename T>\n        struct is_composite_gate { const static bool value = false; };\n        template <typename T, typename U>\n        struct is_composite_gate<composite_gate<T,U> > { const static bool value = true; };\n\n\n        // These overloads all deal with intelligently composing chains of composite_gate expressions\n        // such that the resulting expression has the form:\n        //    (gate_exp,(gate_exp,(gate_exp,(gate_exp()))))\n        // and each gate_exp contains a cached gate matrix for a gate of at most qc_block_chunking_size bits.  \n        // This facilitates the optimizations in the compute_state_element() function. \n        template <typename T, typename U, typename V, typename enabled = void>\n        struct combine_gates;\n\n        // This is a base case of this recursive template.  It takes care of converting small composite_gates into\n        // cached gate objects.\n        template <typename T, typename U, typename V>\n        struct combine_gates<T,U,V,typename enable_if_c<(T::num_bits + U::num_bits <= qc_block_chunking_size)>::type >\n        {\n            typedef composite_gate<gate<T::num_bits + U::num_bits>,V>  result_type;\n\n            static const result_type eval (\n                const composite_gate<T,U>& lhs,\n                const gate_exp<V>& rhs\n            ) \n            {\n                typedef gate<T::num_bits + U::num_bits> gate_type;\n                return composite_gate<gate_type,V>(gate_type(lhs), rhs);\n            }\n        };\n\n        // this is the recursive step of this template\n        template <typename T, typename U, typename V>\n        struct combine_gates<T,U,V,typename enable_if_c<(is_composite_gate<U>::value == true)>::type >\n        {\n            typedef typename combine_gates<typename U::lhs_type, typename U::rhs_type, V>::result_type inner_type;\n            typedef composite_gate<T,inner_type> result_type;\n\n            static const result_type eval (\n                const composite_gate<T,U>& lhs,\n                const gate_exp<V>& rhs\n            )\n            {\n                return composite_gate<T,inner_type>(lhs.lhs, combine_gates<typename U::lhs_type, typename U::rhs_type, V>::eval(lhs.rhs,rhs));\n            }\n\n        };\n\n        // This is a base case of this recursive template.  It takes care of adding new gates when the left\n        // hand side is too big to just turn it into a cached gate object.\n        template <typename T, typename U, typename V>\n        struct combine_gates<T,U,V,typename enable_if_c<(T::num_bits + U::num_bits > qc_block_chunking_size && \n                                                         is_composite_gate<U>::value == false)>::type >\n        {\n            typedef composite_gate<T,composite_gate<U, V> > result_type;\n\n            static const result_type eval (\n                const composite_gate<T,U>& lhs,\n                const gate_exp<V>& rhs\n            ) \n            {\n                return result_type(lhs.lhs, composite_gate<U,V>(lhs.rhs, rhs)); \n            }\n\n        };\n\n    }\n\n    template <typename T, typename U>\n    const composite_gate<T,U> operator, ( \n        const gate_exp<T>& lhs,\n        const gate_exp<U>& rhs\n    )\n    {\n        return composite_gate<T,U>(lhs,rhs);\n    }\n\n    template <typename T, typename U, typename V>\n    const typename qc_helpers::combine_gates<T,U,V>::result_type operator, ( \n        const composite_gate<T,U>& lhs,\n        const gate_exp<V>& rhs\n    )\n    {\n        return qc_helpers::combine_gates<T,U,V>::eval(lhs,rhs);\n    }\n\n    // If you are getting an error here then it means that you are trying to combine a gate expression\n    // with an integer somewhere (and that is an error).  \n    template <typename T> void operator, ( const gate_exp<T>&, int) { COMPILE_TIME_ASSERT(sizeof(T) > 100000000); }\n    template <typename T> void operator, ( int, const gate_exp<T>&) { COMPILE_TIME_ASSERT(sizeof(T) > 100000000); }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace quantum_gates\n    {\n        template <int control_bit, int target_bit>\n        class cnot;\n\n        template <int control_bit1, int control_bit2, int target_bit>\n        class toffoli;\n    }\n\n    template <int control_bit, int target_bit>\n    struct gate_traits<quantum_gates::cnot<control_bit, target_bit> >\n    {\n        static const long num_bits = tabs<control_bit-target_bit>::value+1;\n        static const long dims = qc_helpers::exp_2_n<num_bits>::value;\n    };\n\n    template <int control_bit1, int control_bit2, int target_bit>\n    struct gate_traits<quantum_gates::toffoli<control_bit1, control_bit2, target_bit> >\n    {\n        static const long num_bits = tmax<tabs<control_bit1-target_bit>::value, \n                                            tabs<control_bit2-target_bit>::value>::value+1;\n        static const long dims = qc_helpers::exp_2_n<num_bits>::value;\n    };\n\n\n// ----------------------------------------------------------------------------------------\n\n    namespace quantum_gates\n    {\n\n        inline const gate<1> hadamard(\n        )\n        {\n            gate<1> h;\n            h(0,0) = std::sqrt(1/2.0);\n            h(0,1) = std::sqrt(1/2.0);\n            h(1,0) = std::sqrt(1/2.0);\n            h(1,1) = -std::sqrt(1/2.0);\n            return h;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline const gate<1> x(\n        )\n        {\n            gate<1> x;\n            x(0,1) = 1;\n            x(1,0) = 1;\n            return x;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline const gate<1> y(\n        )\n        {\n            gate<1> x;\n            qc_scalar_type i(0,1);\n            x(0,1) = -i;\n            x(1,0) = i;\n            return x;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline const gate<1> z(\n        )\n        {\n            gate<1> z;\n            z(0,0) = 1;\n            z(1,1) = -1;\n            return z;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        inline const gate<1> noop(\n        )\n        {\n            gate<1> i;\n            i(0,0) = 1;\n            i(1,1) = 1;\n            return i;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <int control_bit, int target_bit>\n        class cnot : public gate_exp<cnot<control_bit, target_bit> >\n        {\n        public:\n            COMPILE_TIME_ASSERT(control_bit != target_bit);\n\n            cnot() : gate_exp<cnot>(*this) \n            {\n                const int min_bit = std::min(control_bit, target_bit);\n\n                control_mask = 1;\n                target_mask = 1;\n\n                // make the masks so that their only on bit corresponds to the given control_bit and target_bit bits\n                for (int i = 0; i < control_bit-min_bit; ++i)\n                    control_mask <<= 1;\n                for (int i = 0; i < target_bit-min_bit; ++i)\n                    target_mask <<= 1;\n            }\n\n            static const long num_bits = gate_traits<cnot>::num_bits;\n            static const long dims = gate_traits<cnot>::dims;\n\n            const qc_scalar_type operator() (long r, long c) const \n            { \n                unsigned long output;\n                // if the input control bit is set\n                if (control_mask&c)\n                {\n                    output = c^target_mask;\n                }\n                else\n                {\n                    output = c;\n                }\n\n                if ((unsigned long)r == output)\n                    return 1;\n                else\n                    return 0;\n            }\n\n            template <typename exp>\n            qc_scalar_type compute_state_element (\n                const matrix_exp<exp>& reg,\n                long row_idx\n            ) const\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT(reg.nr() == dims && reg.nc() == 1 && \n                            0 <= row_idx && row_idx < dims,\n                    \"\\tqc_scalar_type cnot::compute_state_element(reg,row_idx)\"\n                    << \"\\n\\tinvalid arguments to this function\"\n                    << \"\\n\\treg.nr(): \" << reg.nr() \n                    << \"\\n\\treg.nc(): \" << reg.nc()\n                    << \"\\n\\tdims:     \" << dims\n                    << \"\\n\\trow_idx:  \" << row_idx \n                    << \"\\n\\tthis:     \" << this\n                    );\n\n\n                unsigned long output = row_idx;\n                // if the input control bit is set\n                if (control_mask&output)\n                {\n                    output = output^target_mask;\n                }\n\n                return reg(output);\n            }\n\n        private:\n\n            unsigned long control_mask;\n            unsigned long target_mask;\n\n\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <int control_bit1, int control_bit2, int target_bit>\n        class toffoli : public gate_exp<toffoli<control_bit1, control_bit2, target_bit> >\n        {\n        public:\n            COMPILE_TIME_ASSERT(control_bit1 != target_bit && control_bit2 != target_bit && control_bit1 != control_bit2);\n            COMPILE_TIME_ASSERT((control_bit1 < target_bit && control_bit2 < target_bit) ||(control_bit1 > target_bit && control_bit2 > target_bit) );\n\n            toffoli() : gate_exp<toffoli>(*this) \n            {\n                const int min_bit = std::min(std::min(control_bit1, control_bit2), target_bit);\n\n                control1_mask = 1;\n                control2_mask = 1;\n                target_mask = 1;\n\n                // make the masks so that their only on bit corresponds to the given control_bit1 and target_bit bits\n                for (int i = 0; i < control_bit1-min_bit; ++i)\n                    control1_mask <<= 1;\n                for (int i = 0; i < control_bit2-min_bit; ++i)\n                    control2_mask <<= 1;\n                for (int i = 0; i < target_bit-min_bit; ++i)\n                    target_mask <<= 1;\n            }\n\n            static const long num_bits = gate_traits<toffoli>::num_bits;\n            static const long dims = gate_traits<toffoli>::dims;\n\n            const qc_scalar_type operator() (long r, long c) const \n            { \n                unsigned long output;\n                // if the input control bits are set\n                if ((control1_mask&c) && (control2_mask&c))\n                {\n                    output = c^target_mask;\n                }\n                else\n                {\n                    output = c;\n                }\n\n                if ((unsigned long)r == output)\n                    return 1;\n                else\n                    return 0;\n            }\n\n            template <typename exp>\n            qc_scalar_type compute_state_element (\n                const matrix_exp<exp>& reg,\n                long row_idx\n            ) const\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT(reg.nr() == dims && reg.nc() == 1 && \n                            0 <= row_idx && row_idx < dims,\n                    \"\\tqc_scalar_type toffoli::compute_state_element(reg,row_idx)\"\n                    << \"\\n\\tinvalid arguments to this function\"\n                    << \"\\n\\treg.nr(): \" << reg.nr() \n                    << \"\\n\\treg.nc(): \" << reg.nc()\n                    << \"\\n\\tdims:     \" << dims\n                    << \"\\n\\trow_idx:  \" << row_idx \n                    << \"\\n\\tthis:     \" << this\n                    );\n\n\n                unsigned long output;\n                // if the input control bits are set\n                if ((control1_mask&row_idx) && (control2_mask&row_idx))\n                {\n                    output = row_idx^target_mask;\n                }\n                else\n                {\n                    output = row_idx;\n                }\n\n                return reg(output);\n\n            }\n\n        private:\n\n            unsigned long control1_mask;\n            unsigned long control2_mask;\n            unsigned long target_mask;\n\n\n        };\n\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_QUANTUM_COMPUTINg_1_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/quantum_computing/quantum_computing_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_QUANTUM_COMPUTINg_ABSTRACT_\n#ifdef DLIB_QUANTUM_COMPUTINg_ABSTRACT_\n\n#include <complex>\n#include \"../matrix.h\"\n#include \"../rand.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    typedef std::complex<double> qc_scalar_type;\n\n// ----------------------------------------------------------------------------------------\n\n    class quantum_register\n    {\n        /*!\n            INITIAL VALUE\n                - num_bits() == 1\n                - state_vector().nr() == 2\n                - state_vector().nc() == 1\n                - state_vector()(0) == 1\n                - state_vector()(1) == 0\n                - probability_of_bit(0) == 0\n\n                - i.e. This register represents a single quantum bit and it is\n                  completely in the 0 state.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a set of quantum bits.\n        !*/\n\n    public:\n\n        quantum_register(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        int num_bits (\n        ) const;\n        /*!\n            ensures\n                - returns the number of quantum bits in this register\n        !*/\n\n        void set_num_bits (\n            int new_num_bits\n        );\n        /*!\n            requires\n                - 1 <= new_num_bits <= 30\n            ensures\n                - #num_bits() == new_num_bits\n                - #state_vector().nr() == 2^new_num_bits\n                  (i.e. the size of the state_vector is exponential in the number of bits in a register)\n                - for all valid i:\n                    - probability_of_bit(i) == 0\n        !*/\n\n        void zero_all_bits(\n        );\n        /*!\n            ensures\n                - for all valid i:\n                    - probability_of_bit(i) == 0\n        !*/\n\n        void append ( \n            const quantum_register& reg\n        );\n        /*!\n            ensures\n                - #num_bits() == num_bits() + reg.num_bits()\n                - #this->state_vector() == tensor_product(this->state_vector(), reg.state_vector())\n                - The original bits in *this become the high order bits of the resulting \n                  register and all the bits in reg end up as the low order bits in the\n                  resulting register.\n        !*/\n\n        double probability_of_bit (\n            int bit\n        ) const;\n        /*!\n            requires\n                - 0 <= bit < num_bits()\n            ensures\n                - returns the probability of measuring the given bit and it being in the 1 state.\n                - The returned value is also equal to the sum of norm(state_vector()(i)) for all\n                  i where the bit'th bit in i is set to 1. (note that the lowest order bit is bit 0)\n        !*/\n\n        template <typename rand_type>\n        bool measure_bit (\n            int bit,\n            rand_type& rnd\n        );\n        /*!\n            requires\n                - 0 <= bit < num_bits()\n                - rand_type == an implementation of dlib/rand/rand_float_abstract.h\n            ensures\n                - measures the given bit in this register.  Let R denote the boolean\n                  result of the measurement, where true means the bit was measured to\n                  have value 1 and false means it had a value of 0.\n                - if (R == true) then\n                    - returns true\n                    - #probability_of_bit(bit) == 1\n                - else\n                    - returns false\n                    - #probability_of_bit(bit) == 0\n        !*/\n\n        template <typename rand_type>\n        bool measure_and_remove_bit (\n            int bit,\n            rand_type& rnd\n        );\n        /*!\n            requires\n                - num_bits() > 1\n                - 0 <= bit < num_bits()\n                - rand_type == an implementation of dlib/rand/rand_float_abstract.h\n            ensures\n                - measures the given bit in this register.  Let R denote the boolean\n                  result of the measurement, where true means the bit was measured to\n                  have value 1 and false means it had a value of 0.\n                - #num_bits() == num_bits() - 1\n                - removes the bit that was measured from this register.\n                - if (R == true) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        const matrix<qc_scalar_type,0,1>& state_vector(\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the state vector that describes the state of\n                  the quantum bits in this register.\n        !*/\n\n        matrix<qc_scalar_type,0,1>& state_vector(\n        );\n        /*!\n            ensures\n                - returns a non-const reference to the state vector that describes the state of\n                  the quantum bits in this register.\n        !*/\n\n        void swap (\n            quantum_register& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n    inline void swap (\n        quantum_register& a,\n        quantum_register& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class gate_exp\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be some object that inherits from gate_exp and implements its own\n                version of operator() and compute_state_element().\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an expression that evaluates to a quantum gate \n                that operates on T::num_bits qubits.\n\n                This object makes it easy to create new types of gate objects. All\n                you need to do is inherit from gate_exp in the proper way and \n                then you can use your new gate objects in conjunction with all the \n                others.\n        !*/\n\n    public:\n\n        static const long num_bits = T::num_bits;\n        static const long dims = T::dims; \n\n        gate_exp(\n            T& exp\n        );\n        /*!\n            ensures\n                - #&ref() == &exp\n        !*/\n\n        const qc_scalar_type operator() (\n            long r, \n            long c\n        ) const;\n        /*!\n            requires\n                - 0 <= r < dims\n                - 0 <= c < dims\n            ensures\n                - returns ref()(r,c)\n        !*/\n\n        void apply_gate_to (\n            quantum_register& reg\n        ) const;\n        /*!\n            requires\n                - reg.num_bits() == num_bits\n            ensures\n                - applies this quantum gate to the given quantum register\n                - Let M represent the matrix for this quantum gate, then\n                  #reg().state_vector() = M*reg().state_vector()\n        !*/\n\n        template <typename exp>\n        qc_scalar_type compute_state_element (\n            const matrix_exp<exp>& reg,\n            long row_idx\n        ) const;\n        /*!\n            requires\n                - reg.nr() == dims\n                - reg.nc() == 1\n                - 0 <= row_idx < dims\n            ensures\n                - Let M represent the matrix for this gate, then   \n                  this function returns rowm(M*reg, row_idx)\n                  (i.e. returns the row_idx row of what you get when you apply this\n                  gate to the given column vector in reg)\n                - This function works by calling ref().compute_state_element(reg,row_idx)\n        !*/\n\n        const T& ref(\n        );\n        /*!\n            ensures\n                - returns a reference to the subexpression contained in this object\n        !*/\n\n        const matrix<qc_scalar_type> mat (\n        ) const;\n        /*!\n            ensures\n                - returns a dense matrix object that contains the matrix for this gate\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    class composite_gate : public gate_exp<composite_gate<T,U> >\n    {\n        /*!\n            REQUIREMENTS ON T AND U\n                Both must be gate expressions that inherit from gate_exp\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a quantum gate that is the tensor product of \n                two other quantum gates.\n\n\n                As an example, suppose you have 3 registers, reg_high, reg_low, and reg_all.  Also\n                suppose that reg_all is what you get when you append reg_high and reg_low,\n                so reg_all.state_vector() == tensor_product(reg_high.state_vector(),reg_low.state_vector()).\n                \n                Then applying a composite gate to reg_all would give you the same thing as\n                applying the lhs gate to reg_high and the rhs gate to reg_low and then appending \n                the two resulting registers.  So the lhs gate of a composite_gate applies to\n                the high order bits of a regitser and the rhs gate applies to the lower order bits.\n        !*/\n    public:\n\n        composite_gate (\n            const composite_gate& g\n        );\n        /*!\n            ensures\n                - *this is a copy of g\n        !*/\n\n        composite_gate(\n            const gate_exp<T>& lhs_, \n            const gate_exp<U>& rhs_\n        ): \n        /*!\n            ensures\n                - #lhs == lhs_.ref()\n                - #rhs == rhs_.ref()\n                - #num_bits == T::num_bits + U::num_bits\n                - #dims == 2^num_bits\n                - #&ref() == this\n        !*/\n\n        const qc_scalar_type operator() (\n            long r, \n            long c\n        ) const; \n        /*!\n            requires\n                - 0 <= r < dims\n                - 0 <= c < dims\n            ensures\n                - Let M denote the tensor product of lhs with rhs, then this function\n                  returns M(r,c)\n                  (i.e. returns lhs(r/U::dims,c/U::dims)*rhs(r%U::dims, c%U::dims))\n        !*/\n\n        template <typename exp>\n        qc_scalar_type compute_state_element (\n            const matrix_exp<exp>& reg,\n            long row_idx\n        ) const;\n        /*!\n            requires\n                - reg.nr() == dims\n                - reg.nc() == 1\n                - 0 <= row_idx < dims\n            ensures\n                - Let M represent the matrix for this gate, then this function\n                  returns rowm(M*reg, row_idx)\n                  (i.e. returns the row_idx row of what you get when you apply this\n                  gate to the given column vector in reg)\n                - This function works by calling rhs.compute_state_element() and using elements\n                  of the matrix in lhs.  \n        !*/\n\n        static const long num_bits;\n        static const long dims;\n\n        const T lhs;\n        const U rhs;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <long bits>\n    class gate : public gate_exp<gate<bits> >\n    {\n        /*!\n            REQUIREMENTS ON bits\n                0 < bits <= 30\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a quantum gate that operates on bits qubits. \n                It stores its gate matrix explicitly in a dense in-memory matrix. \n        !*/\n\n    public:\n        gate(\n        );\n        /*!\n            ensures\n                - num_bits == bits\n                - dims == 2^bits\n                - #&ref() == this\n                - for all valid r and c:\n                    #(*this)(r,c) == 0\n        !*/\n\n        gate (\n            const gate& g\n        );\n        /*!\n            ensures\n                - *this is a copy of g\n        !*/\n\n        template <typename T>\n        explicit gate(\n            const gate_exp<T>& g\n        );\n        /*!\n            requires\n                - T::num_bits == num_bits\n            ensures\n                - num_bits == bits\n                - dims == 2^bits\n                - #&ref() == this\n                - for all valid r and c:\n                    #(*this)(r,c) == g(r,c)\n        !*/\n\n        const qc_scalar_type& operator() (\n            long r, \n            long c\n        ) const;\n        /*!\n            requires\n                - 0 <= r < dims\n                - 0 <= c < dims\n            ensures\n                - Let M denote the matrix for this gate, then this function\n                  returns a const reference to M(r,c)\n        !*/\n\n        qc_scalar_type& operator() (\n            long r, \n            long c\n        );\n        /*!\n            requires\n                - 0 <= r < dims\n                - 0 <= c < dims\n            ensures\n                - Let M denote the matrix for this gate, then this function \n                  returns a non-const reference to M(r,c)\n        !*/\n\n        template <typename exp>\n        qc_scalar_type compute_state_element (\n            const matrix_exp<exp>& reg,\n            long row_idx\n        ) const;\n        /*!\n            requires\n                - reg.nr() == dims\n                - reg.nc() == 1\n                - 0 <= row_idx < dims\n            ensures\n                - Let M represent the matrix for this gate, then this function\n                  returns rowm(M*reg, row_idx)\n                  (i.e. returns the row_idx row of what you get when you apply this\n                  gate to the given column vector in reg)\n        !*/\n\n        static const long num_bits;\n        static const long dims;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    const composite_gate<T,U> operator, ( \n        const gate_exp<T>& lhs,\n        const gate_exp<U>& rhs\n    ) { return composite_gate<T,U>(lhs,rhs); }\n    /*!\n        ensures\n            - returns a composite_gate that represents the tensor product of the lhs\n              gate with the rhs gate.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    namespace quantum_gates\n    {\n\n        inline const gate<1> hadamard(\n        );\n        /*!\n            ensures\n                - returns the Hadamard gate.\n                  (i.e. A gate with a matrix of\n                                 |1, 1|\n                     1/sqrt(2) * |1,-1|   )\n        !*/\n\n        inline const gate<1> x(\n        );\n        /*!\n            ensures\n                - returns the not gate.\n                  (i.e. A gate with a matrix of\n                      |0, 1|\n                      |1, 0|   )\n        !*/\n\n        inline const gate<1> y(\n        );\n        /*!\n            ensures\n                - returns the y gate.\n                  (i.e. A gate with a matrix of\n                      |0,-i|\n                      |i, 0|   )\n        !*/\n\n        inline const gate<1> z(\n        );\n        /*!\n            ensures\n                - returns the z gate.\n                  (i.e. A gate with a matrix of\n                      |1, 0|\n                      |0,-1|   )\n        !*/\n\n        inline const gate<1> noop(\n        );\n        /*!\n            ensures\n                - returns the no-op or identity gate.\n                  (i.e. A gate with a matrix of\n                      |1, 0|\n                      |0, 1|   )\n        !*/\n\n        template <\n            int control_bit,\n            int target_bit\n            >\n        class cnot : public gate_exp<cnot<control_bit, target_bit> >\n        {\n            /*!\n                REQUIREMENTS ON control_bit AND target_bit\n                    - control_bit != target_bit\n\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents the controlled-not quantum gate.  It is a gate that\n                    operates on abs(control_bit-target_bit)+1 qubits.   \n\n                    In terms of the computational basis vectors, this gate maps input\n                    vectors to output vectors in the following way:\n                        - if (the input vector corresponds to a state where the control_bit\n                          qubit is 1) then\n                            - this gate outputs the computational basis vector that\n                              corresponds to the state where the target_bit has been flipped\n                              with respect to the input vector\n                        - else\n                            - this gate outputs the input vector unmodified\n\n            !*/\n        };\n\n        template <\n            int control_bit1,\n            int control_bit2,\n            int target_bit\n            >\n        class toffoli : public gate_exp<toffoli<control_bit1, control_bit2, target_bit> >\n        {\n            /*!\n                REQUIREMENTS ON control_bit1, control_bit2, AND target_bit\n                    - all the arguments denote different bits, i.e.:\n                        - control_bit1 != target_bit\n                        - control_bit2 != target_bit\n                        - control_bit1 != control_bit2\n                    - The target bit can't be in-between the control bits, i.e.:\n                        - (control_bit1 < target_bit && control_bit2 < target_bit) ||\n                          (control_bit1 > target_bit && control_bit2 > target_bit) \n\n                WHAT THIS OBJECT REPRESENTS\n                    This object represents the toffoli variant of a controlled-not quantum gate.  \n                    It is a gate that operates on max(abs(control_bit2-target_bit),abs(control_bit1-target_bit))+1 \n                    qubits.   \n\n                    In terms of the computational basis vectors, this gate maps input\n                    vectors to output vectors in the following way:\n                        - if (the input vector corresponds to a state where the control_bit1 and\n                          control_bit2 qubits are 1) then\n                            - this gate outputs the computational basis vector that\n                              corresponds to the state where the target_bit has been flipped\n                              with respect to the input vector\n                        - else\n                            - this gate outputs the input vector unmodified\n\n            !*/\n        };\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_QUANTUM_COMPUTINg_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/quantum_computing.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_QUANTUM_COMPUTINg_H_\n#define DLIB_QUANTUM_COMPUTINg_H_ \n\n#include \"quantum_computing/quantum_computing.h\"\n\n#endif // DLIB_QUANTUM_COMPUTINg_H_ \n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/queue/queue_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_QUEUE_KERNEl_1_\n#define DLIB_QUEUE_KERNEl_1_\n\n#include \"queue_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager\n        >\n    class queue_kernel_1 : public enumerable<T>,\n                           public remover<T>\n    {\n\n        /*!\n            INITIAL VALUE\n                queue_size == 0   \n                current_element == 0\n                at_start_ == true\n            \n            CONVENTION\n                queue_size == the number of elements in the queue\n                at_start() == at_start_\n                current_element_valid() == (current_element != 0)\n                element() == current_element->item\n\n                if (queue_size > 0)\n                {\n                    in points to the last element to be inserted into the queue\n                    out points to the next element to be dequeued\n\n                    each node points to the node inserted after it except for the most \n                    recently inserted node\n\n                    current_element == 0\n                }\n                \n        !*/\n\n\n        struct node\n        {\n            node* last;\n\n            T item;\n        };\n\n\n        public:\n\n            typedef T type;\n            typedef mem_manager mem_manager_type;\n\n            queue_kernel_1 (\n            ) :\n                in(0),\n                out(0),\n                queue_size(0),\n                current_element(0),\n                at_start_(true)\n            {\n            }\n\n            virtual ~queue_kernel_1 (\n            ); \n\n            inline void clear(\n            );\n\n            void enqueue (\n                T& item\n            );\n\n            void dequeue (\n                T& item\n            );\n\n            void cat (\n                queue_kernel_1& item\n            );\n\n            T& current (\n            );\n\n            const T& current (\n            ) const;\n            \n            void swap (\n                queue_kernel_1& item\n            );\n\n            // functions from the remover interface\n            inline void remove_any (\n                T& item\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            bool current_element_valid (\n            ) const;\n\n            inline const T& element (\n            ) const;\n\n            inline T& element (\n            );\n\n            bool move_next (\n            ) const;\n\n        private:\n\n            void delete_nodes (\n                node* start,\n                unsigned long length\n            );\n            /*!\n                requires\n                    - start points to a node in a singly linked list \n                    - start->last points to the next node in the list \n                    - there are at least length nodes in the list begining with start\n                ensures\n                    - length nodes have been deleted starting with the node pointed \n                      to by start\n            !*/\n\n            // data members\n\n            node* in;\n            node* out;\n            unsigned long queue_size;\n            mutable node* current_element;\n            mutable bool at_start_;\n\n            // restricted functions\n            queue_kernel_1(queue_kernel_1&);        // copy constructor\n            queue_kernel_1& operator=(queue_kernel_1&);    // assignment operator\n\n    };\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        queue_kernel_1<T,mem_manager>& a, \n        queue_kernel_1<T,mem_manager>& b \n    ) { a.swap(b); } \n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        queue_kernel_1<T,mem_manager>& item,  \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            T temp;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(temp,in);\n                item.enqueue(temp);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type queue_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    queue_kernel_1<T,mem_manager>::\n    ~queue_kernel_1 (\n    )\n    {\n        delete_nodes(out,queue_size);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void queue_kernel_1<T,mem_manager>::\n    clear (\n    )\n    {\n        delete_nodes(out,queue_size);\n        queue_size = 0;\n\n        // put the enumerator at the start\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void queue_kernel_1<T,mem_manager>::\n    enqueue (\n        T& item\n    )\n    {\n        // make new node\n        node* temp = new node;\n\n        // swap item into new node\n        exchange(item,temp->item);\n        \n        if (queue_size == 0)\n            out = temp;\n        else\n            in->last = temp;\n\n        // make in point to the new node\n        in = temp;\n        \n        ++queue_size;\n\n        // put the enumerator at the start\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void queue_kernel_1<T,mem_manager>::\n    dequeue (\n        T& item\n    )\n    {\n        // swap out into item\n        exchange(item,out->item);\n\n        --queue_size;\n\n        if (queue_size == 0)\n        {\n            delete out;\n        }\n        else\n        {\n            node* temp = out;\n            \n            // move out pointer to the next element in the queue\n            out = out->last;\n\n            // delete old node\n            delete temp;\n        }\n\n        // put the enumerator at the start\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void queue_kernel_1<T,mem_manager>::\n    cat (\n        queue_kernel_1<T,mem_manager>& item\n    )\n    {\n        if (item.queue_size > 0)\n        {\n            if (queue_size > 0)\n            {\n                in->last = item.out;\n            }\n            else\n            {\n                out = item.out;\n            }\n\n\n            in = item.in;\n            queue_size += item.queue_size;\n            item.queue_size = 0;\n        }\n\n        // put the enumerator at the start\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& queue_kernel_1<T,mem_manager>::\n    current (\n    )\n    {\n        return out->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& queue_kernel_1<T,mem_manager>::\n    current (\n    ) const\n    {\n        return out->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void queue_kernel_1<T,mem_manager>::\n    swap (\n        queue_kernel_1<T,mem_manager>& item\n    )\n    {\n        node* in_temp = in;\n        node* out_temp = out;\n        unsigned long queue_size_temp = queue_size;\n        node* current_element_temp = current_element;\n        bool at_start_temp = at_start_;\n\n        in = item.in;\n        out = item.out;\n        queue_size = item.queue_size;\n        current_element = item.current_element;\n        at_start_ = item.at_start_;\n\n        item.in = in_temp;\n        item.out = out_temp;\n        item.queue_size = queue_size_temp;\n        item.current_element = current_element_temp;\n        item.at_start_ = at_start_temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool queue_kernel_1<T,mem_manager>::\n    at_start (\n    ) const\n    {\n        return at_start_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    unsigned long queue_kernel_1<T,mem_manager>::\n    size (\n    ) const\n    {\n        return queue_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void queue_kernel_1<T,mem_manager>::\n    reset (\n    ) const\n    {\n        at_start_ = true;\n        current_element = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool queue_kernel_1<T,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return (current_element != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& queue_kernel_1<T,mem_manager>::\n    element (\n    ) const\n    {\n        return current_element->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& queue_kernel_1<T,mem_manager>::\n    element (\n    )\n    {\n        return current_element->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool queue_kernel_1<T,mem_manager>::\n    move_next (\n    ) const\n    {\n        if (at_start_)\n        {\n            at_start_ = false;\n            // if the queue is empty then there is nothing to do\n            if (queue_size == 0)\n            {\n                return false;\n            }\n            else\n            {\n                current_element = out;\n                return true;\n            }\n        }\n        else\n        {\n            // if we are at the last element then the enumeration has finished\n            if (current_element == in || current_element == 0)\n            {\n                current_element = 0;\n                return false;\n            }\n            else\n            {\n                current_element = current_element->last;\n                return true;\n            }           \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // remover function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void queue_kernel_1<T,mem_manager>::\n    remove_any (\n        T& item\n    ) \n    {\n        dequeue(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void queue_kernel_1<T,mem_manager>::\n    delete_nodes (\n        node* start,\n        unsigned long length\n    )\n    {\n        node* temp;\n        while (length)\n        {\n            temp = start->last;\n            delete start;\n            start = temp;\n            --length;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_QUEUE_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/queue/queue_kernel_2.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_QUEUE_KERNEl_2_\n#define DLIB_QUEUE_KERNEl_2_\n\n#include \"queue_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager = default_memory_manager\n        >\n    class queue_kernel_2 : public enumerable<T>,\n                           public remover<T>\n    {\n\n        /*!\n            REQUIREMENTS ON block_size\n                0 < block_size < 2000000000\n\n            INITIAL VALUE\n                queue_size == 0   \n                current_element == 0\n                at_start_ == true\n            \n            CONVENTION\n                queue_size == the number of elements in the queue\n                at_start() == at_start_\n                current_element_valid() == (current_element != 0)\n                if (current_element_valid()) then\n                    element() == current_element->item[current_element_pos]\n\n                if (queue_size > 0)                \n                {                    \n                    in->item[in_pos] == the spot where we will put the next item added\n                                        into the queue\n                    out->item[out_pos] == current()\n\n                    when enqueuing elements inside each node item[0] is filled first, then \n                    item[1], then item[2], etc.\n                                                         \n\n                    each node points to the node inserted after it except for the most \n                    recently inserted node.  \n                }\n                \n        !*/\n\n\n        struct node\n        {\n            node* next;\n\n            T item[block_size];\n        };\n\n        \n        public:\n\n            typedef T type;\n            typedef mem_manager mem_manager_type;\n\n            queue_kernel_2 (\n            ) :\n                in(0),\n                out(0),\n                queue_size(0),\n                current_element(0),\n                at_start_(true)\n            {\n            }\n\n            virtual ~queue_kernel_2 (\n            ); \n\n            inline void clear(\n            );\n\n            void enqueue (\n                T& item\n            );\n\n            void dequeue (\n                T& item\n            );\n\n            void cat (\n                queue_kernel_2& item\n            );\n\n            T& current (\n            );\n\n            const T& current (\n            ) const;            \n\n            void swap (\n                queue_kernel_2& item\n            );\n\n            // functions from the remover interface\n            inline void remove_any (\n                T& item\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            bool current_element_valid (\n            ) const;\n\n            inline const T& element (\n            ) const;\n\n            inline T& element (\n            );\n\n            bool move_next (\n            ) const;\n\n        private:\n\n            void delete_nodes (\n                node* start,\n                node* end\n            );\n            /*!\n                requires\n                    - start points to a node in a singly linked list \n                    - start->next points to the next node in the list \n                    - by following the next pointers you eventually hit the node pointed\n                      to by end\n                ensures\n                    - calls delete on the start node, the end node, and all nodes in between\n            !*/\n\n            // data members\n\n            typename mem_manager::template rebind<node>::other pool; \n\n            node* in;\n            node* out;\n            unsigned long queue_size;\n            unsigned long in_pos;\n            unsigned long out_pos;\n\n\n            mutable node* current_element;\n            mutable unsigned long current_element_pos;\n            mutable bool at_start_;\n\n            // restricted functions\n            queue_kernel_2(queue_kernel_2&);        // copy constructor\n            queue_kernel_2& operator=(queue_kernel_2&);    // assignment operator\n\n    };\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    inline void swap (\n        queue_kernel_2<T,block_size,mem_manager>& a, \n        queue_kernel_2<T,block_size,mem_manager>& b \n    ) { a.swap(b); } \n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    void deserialize (\n        queue_kernel_2<T,block_size,mem_manager>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            T temp;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(temp,in);\n                item.enqueue(temp);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type queue_kernel_2\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    queue_kernel_2<T,block_size,mem_manager>::\n    ~queue_kernel_2 (\n    )\n    {\n        COMPILE_TIME_ASSERT(0 < block_size && block_size < (unsigned long)(2000000000));\n\n        if (queue_size > 0)\n            delete_nodes(out,in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    void queue_kernel_2<T,block_size,mem_manager>::\n    clear (\n    )\n    {\n        if (queue_size > 0)\n        {\n            delete_nodes(out,in);\n            queue_size = 0;\n        }\n\n        // put the enumerator at the start\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    void queue_kernel_2<T,block_size,mem_manager>::\n    enqueue (\n        T& item\n    )\n    {\n        if (queue_size == 0)\n        {\n            out = in = pool.allocate();\n            in_pos = 0;\n            out_pos = 0;\n        }\n        else if (in_pos >= block_size)\n        {            \n            in->next = pool.allocate();\n            in_pos = 0;\n            in = in->next;\n        }\n\n        exchange(item,in->item[in_pos]);\n        ++in_pos;\n\n        ++queue_size;\n\n        // put the enumerator at the start\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    void queue_kernel_2<T,block_size,mem_manager>::\n    dequeue (\n        T& item\n    )\n    {\n        // swap out into item\n        exchange(item,out->item[out_pos]);\n        \n        ++out_pos;\n        --queue_size;\n\n        // if this was the last element in this node then remove this node\n        if (out_pos == block_size)\n        {\n            out_pos = 0;\n            node* temp = out;\n            out = out->next;\n            pool.deallocate(temp);\n        }\n        else if (queue_size == 0)\n        {\n            pool.deallocate(out);\n        }\n\n        // put the enumerator at the start\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    void queue_kernel_2<T,block_size,mem_manager>::\n    cat (\n        queue_kernel_2<T,block_size,mem_manager>& item\n    )\n    {\n        if (queue_size > 0)\n        {\n            T temp;\n            assign_zero_if_built_in_scalar_type(temp);\n            while (item.size() > 0)\n            {\n                item.dequeue(temp);\n                enqueue(temp);\n            }\n        }\n        else\n        {\n            in = item.in;\n            out = item.out;\n            out_pos = item.out_pos;\n            in_pos = item.in_pos;\n\n            queue_size = item.queue_size;\n            item.queue_size = 0;\n\n            // put the enumerator at the start\n            reset();\n        }       \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    T& queue_kernel_2<T,block_size,mem_manager>::\n    current (\n    )\n    {\n        return out->item[out_pos];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    const T& queue_kernel_2<T,block_size,mem_manager>::\n    current (\n    ) const\n    {\n        return out->item[out_pos];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    void queue_kernel_2<T,block_size,mem_manager>::\n    swap (\n        queue_kernel_2<T,block_size,mem_manager>& item\n    )\n    {\n        exchange(in,item.in);\n        exchange(out,item.out);\n        exchange(queue_size,item.queue_size);\n        exchange(in_pos,item.in_pos);\n        exchange(out_pos,item.out_pos);\n        exchange(current_element,item.current_element);\n        exchange(current_element_pos,item.current_element_pos);\n        exchange(at_start_,item.at_start_);        \n        pool.swap(item.pool);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    unsigned long queue_kernel_2<T,block_size,mem_manager>::\n    size (\n    ) const\n    {\n        return queue_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    bool queue_kernel_2<T,block_size,mem_manager>::\n    at_start (\n    ) const\n    {\n        return at_start_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    void queue_kernel_2<T,block_size,mem_manager>::\n    reset (\n    ) const\n    {\n        at_start_ = true;\n        current_element = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    bool queue_kernel_2<T,block_size,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return (current_element != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    const T& queue_kernel_2<T,block_size,mem_manager>::\n    element (\n    ) const\n    {\n        return current_element->item[current_element_pos];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    T& queue_kernel_2<T,block_size,mem_manager>::\n    element (\n    )\n    {\n        return current_element->item[current_element_pos];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    bool queue_kernel_2<T,block_size,mem_manager>::\n    move_next (\n    ) const\n    {\n        if (at_start_)\n        {\n            at_start_ = false;\n            // if the queue is empty then there is nothing to do\n            if (queue_size == 0)\n            {\n                return false;\n            }\n            else\n            {\n                current_element = out;\n                current_element_pos = out_pos;\n                return true;\n            }\n        }\n        else if (current_element == 0)\n        {\n            return false;\n        }\n        else\n        {\n            ++current_element_pos;\n            // if we are at the last element then the enumeration has finished\n            if (current_element == in && current_element_pos == in_pos )\n            {\n                current_element = 0;\n                return false;\n            }\n            else if (current_element_pos == block_size)\n            {\n                current_element_pos = 0;\n                current_element = current_element->next;               \n            }           \n\n            return true;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // remover function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    void queue_kernel_2<T,block_size,mem_manager>::\n    remove_any (\n        T& item\n    ) \n    {\n        dequeue(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        unsigned long block_size,\n        typename mem_manager\n        >\n    void queue_kernel_2<T,block_size,mem_manager>::\n    delete_nodes (\n        node* start,\n        node* end\n    )\n    {\n        node* temp;\n        while (start != end)\n        {\n            temp = start;\n            start = start->next;\n            pool.deallocate(temp);\n        }\n        pool.deallocate(start);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_QUEUE_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/queue/queue_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_QUEUE_KERNEl_ABSTRACT_\n#ifdef DLIB_QUEUE_KERNEl_ABSTRACT_\n\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager\n        >\n    class queue : public enumerable<T>,\n                  public remover<T>\n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T must be swappable by a global swap() \n                T must have a default constructor\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap() and current() functions do not invalidate pointers or \n                references to internal data.\n                All other functions have no such guarantee.\n\n            INITIAL VALUE\n                size() == 0    \n\n            ENUMERATION ORDER\n                The enumerator will iterate over the elements in the queue in the\n                same order they would be removed by repeated calls to dequeue().\n                (e.g. current() would be the first element enumerated)\n\n            WHAT THIS OBJECT REPRESENTS\n                This is a first in first out queue containing items of type T\n                \n                e.g. if the queue is {b,c,d,e} and then 'a' is enqueued\n                the queue becomes {a,b,c,d,e} and then calling dequeue takes e out\n                making the queue {a,b,c,d}\n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n        !*/\n        \n        public:\n\n            typedef T type;\n            typedef mem_manager mem_manager_type;\n\n            queue (\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n            !*/\n\n            virtual ~queue (\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            void enqueue (\n                T& item\n            );\n            /*!\n                ensures\n                    - item is now at the left end of #*this  \n                    - #item has an initial value for its type \n                    - #size() == size() + 1\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if enqueue() throws then it has no effect\n            !*/\n\n            void dequeue (\n                T& item\n            );\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - #size() == size() - 1\n                    - the far right element of *this has been removed and swapped \n                      into #item \n                    - #at_start() == true\n            !*/\n\n            void cat (\n                queue& item\n            );\n            /*!\n                ensures\n                    - item has been concatenated onto the left end of *this. \n                      i.e. item.current() is attached onto the left end of *this and\n                      the left most element in item will also be the left most item \n                      in #*this \n                    - #size() == size() + item.size() \n                    - #item has its initial value \n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if cat() throws then the state of #item and *this is undefined\n                        until clear() is successfully called on them.\n            !*/\n\n            T& current (\n            );\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - returns a const reference to the next element to be dequeued.\n                      i.e.  the right most element.\n            !*/\n\n            const T& current (\n            ) const;\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - returns a non-const reference to the next element to be dequeued.\n                      i.e.  the right most element.\n            !*/\n            \n            void swap (\n                queue& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n        private:\n\n            // restricted functions\n            queue(queue&);        // copy constructor\n            queue& operator=(queue&);    // assignment operator\n\n    };\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        queue<T,mem_manager>& a, \n        queue<T,mem_manager>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        queue<T,mem_manager>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_QUEUE_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/queue/queue_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_QUEUE_KERNEl_C_\n#define DLIB_QUEUE_KERNEl_C_\n\n#include \"queue_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n\n    template <\n        typename queue_base // is an implementation of queue_kernel_abstract.h\n        >\n    class queue_kernel_c : public queue_base\n    {\n        typedef typename queue_base::type T;\n\n        public:\n\n            void dequeue (\n                T& item\n            );\n\n            T& current (\n            );\n\n            const T& current (\n            ) const;\n\n            const T& element (\n            ) const;\n\n            T& element (\n            );\n\n            void remove_any (\n                T& item\n            );\n\n    };\n\n    template <\n        typename queue_base\n        >\n    inline void swap (\n        queue_kernel_c<queue_base>& a, \n        queue_kernel_c<queue_base>& b \n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_base\n        >\n    void queue_kernel_c<queue_base>::\n    dequeue (\n        T& item\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->size() != 0,\n            \"\\tvoid queue::dequeue\"\n            << \"\\n\\tsize of queue should not be zero\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        queue_base::dequeue(item);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_base\n        >\n    const typename queue_base::type& queue_kernel_c<queue_base>::\n    current (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->size() != 0,\n            \"\\tconst T& queue::current\"\n            << \"\\n\\tsize of queue should not be zero\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return queue_base::current();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_base\n        >\n    typename queue_base::type& queue_kernel_c<queue_base>::\n    current (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->size() != 0,\n            \"\\tT& queue::current\"\n            << \"\\n\\tsize of queue should not be zero\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return queue_base::current();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_base\n        >\n    const typename queue_base::type& queue_kernel_c<queue_base>::\n    element (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tconst T& queue::element\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return queue_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_base\n        >\n    typename queue_base::type& queue_kernel_c<queue_base>::\n    element (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tT& queue::element\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return queue_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_base\n        >\n    void queue_kernel_c<queue_base>::\n    remove_any (\n        T& item\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (this->size() > 0),\n            \"\\tvoid queue::remove_any\"\n            << \"\\n\\tsize() must be greater than zero if something is going to be removed\"\n            << \"\\n\\tsize(): \" << this->size() \n            << \"\\n\\tthis:   \" << this\n            );\n\n        // call the real function\n        queue_base::remove_any(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_QUEUE_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/queue/queue_sort_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_QUEUE_SORt_1_\n#define DLIB_QUEUE_SORt_1_\n\n#include \"queue_sort_abstract.h\"\n#include \"../algs.h\"\n#include <vector>\n#include \"../sort.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename queue_base \n        >\n    class queue_sort_1 : public queue_base\n    {\n        typedef typename queue_base::type T;\n\n        public:\n\n            /*!\n                This implementation uses the QuickSort algorithm and\n                when the quicksort depth goes too high it uses the dlib::qsort_array()\n                function on the data.\n            !*/\n\n            void sort (\n            );\n\n            template <typename compare_type>\n            void sort (\n                const compare_type& compare\n            )\n            {\n                if (this->size() > 1)\n                {\n                    sort_this_queue(*this,0,compare);\n                }\n            }\n\n        private:\n\n            template <typename compare_type>\n            void sort_this_queue (\n                queue_base& queue,\n                long depth,\n                const compare_type& compare\n            )\n            /*!\n                ensures\n                    each element in the queue is < the element behind it according\n                    to compare\n            !*/\n            {\n                if (queue.size() <= 1)\n                {\n                    // already sorted\n                }\n                else if (queue.size() <= 29)\n                {\n                    T vect[29];\n                    const unsigned long size = queue.size();\n                    for (unsigned long i = 0; i < size; ++i)\n                    {\n                        queue.dequeue(vect[i]);\n                    }\n                    isort_array(vect,0,size-1,compare);\n                    for (unsigned long i = 0; i < size; ++i)\n                    {\n                        queue.enqueue(vect[i]);\n                    }\n                }\n                else if (depth > 50)\n                {\n                    std::vector<T> vect(queue.size());\n                    for (unsigned long i = 0; i < vect.size(); ++i)\n                    {\n                        queue.dequeue(vect[i]);\n                    }\n                    hsort_array(vect,0,vect.size()-1,compare);\n                    for (unsigned long i = 0; i < vect.size(); ++i)\n                    {\n                        queue.enqueue(vect[i]);\n                    }\n                }\n                else\n                {\n                    queue_base left, right;\n                    T partition_element;\n                    T temp;\n                    // do this just to avoid a compiler warning\n                    assign_zero_if_built_in_scalar_type(temp);\n                    assign_zero_if_built_in_scalar_type(partition_element);\n\n                    queue.dequeue(partition_element);\n\n                    // partition queue into left and right\n                    while (queue.size() > 0)\n                    {\n                        queue.dequeue(temp);\n                        if (compare(temp , partition_element))\n                        {\n                            left.enqueue(temp);\n                        }\n                        else\n                        {\n                            right.enqueue(temp);\n                        }\n                    }\n\n\n                    long ratio;\n                    if (left.size() > right.size())\n                        ratio = left.size()/(right.size()+1);  // add 1 so we can't divide by zero\n                    else\n                        ratio = right.size()/(left.size()+1);\n\n                    sort_this_queue(left,ratio+depth,compare);\n                    sort_this_queue(right,ratio+depth,compare);\n\n                    // combine the two queues\n                    left.swap(queue);\n                    queue.enqueue(partition_element);\n                    queue.cat(right);\n                }\n            }\n\n\n    };\n\n    template <\n        typename queue_base\n        >\n    inline void swap (\n        queue_sort_1<queue_base>& a, \n        queue_sort_1<queue_base>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename queue_base\n        >\n    void queue_sort_1<queue_base>::\n    sort (\n    )\n    {\n        if (this->size() > 1)\n        {\n            sort_this_queue(*this,0,std::less<typename queue_base::type>());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_QUEUE_SORt_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/queue/queue_sort_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_QUEUE_SORt_ABSTRACT_\n#ifdef DLIB_QUEUE_SORt_ABSTRACT_\n\n\n#include \"queue_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename queue_base\n        >\n    class queue_sort : public queue_base\n    {\n\n        /*!\n            REQUIREMENTS ON QUEUE_BASE\n                - is an implementation of queue/queue_kernel_abstract.h\n                - queue_base::type must be a type with that is comparable via operator<\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                sort() may invalidate pointers and references to internal data.\n\n            WHAT THIS EXTENSION DOES FOR QUEUE\n                This gives a queue the ability to sort its contents by calling sort().\n        !*/\n\n\n        public:\n\n            void sort (\n            );\n            /*!\n                ensures\n                    - for all elements in #*this the ith element is <= the i+1 element\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        data may be lost if sort() throws\n            !*/\n\n            template <typename compare_type>\n            void sort (\n                const compare_type& compare\n            );\n            /*!\n                ensures\n                    - for all elements in #*this the ith element is <= the i+1 element\n                    - uses compare(a,b) as the < operator.  So if compare(a,b) == true\n                      then a comes before b in the resulting ordering.  \n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        data may be lost if sort() throws\n            !*/\n    };\n\n    template <\n        template queue_base\n        >\n    inline void swap (\n        queue_sort<queue_base>& a, \n        queue_sort<queue_base>& b \n    ) { a.swap(b); }  \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_QUEUE_SORt_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/queue.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_QUEUe_\n#define DLIB_QUEUe_\n\n#include \"queue/queue_kernel_1.h\"\n#include \"queue/queue_kernel_2.h\"\n#include \"queue/queue_kernel_c.h\"\n\n#include \"queue/queue_sort_1.h\"\n\n\n#include \"algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager \n        >\n    class queue\n    {\n        queue() {}\n    public:\n                \n\n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     queue_kernel_1<T,mem_manager>    \n                    kernel_1a;\n        typedef     queue_kernel_c<kernel_1a>\n                    kernel_1a_c;\n \n\n        // kernel_2a        \n        typedef     queue_kernel_2<T,20,mem_manager>    \n                    kernel_2a;\n        typedef     queue_kernel_c<kernel_2a>\n                    kernel_2a_c;\n\n\n        // kernel_2b        \n        typedef     queue_kernel_2<T,100,mem_manager>    \n                    kernel_2b;\n        typedef     queue_kernel_c<kernel_2b>\n                    kernel_2b_c;\n\n\n\n\n        //---------- extensions ------------\n\n        // sort_1 extend kernel_1a\n        typedef     queue_sort_1<kernel_1a>\n                    sort_1a;\n        typedef     queue_sort_1<kernel_1a_c>\n                    sort_1a_c;\n\n\n        // sort_1 extend kernel_2a\n        typedef     queue_sort_1<kernel_2a>\n                    sort_1b;\n        typedef     queue_sort_1<kernel_2a_c>\n                    sort_1b_c;\n\n\n\n        // sort_1 extend kernel_2b\n        typedef     queue_sort_1<kernel_2b>\n                    sort_1c;\n        typedef     queue_sort_1<kernel_2b_c>\n                    sort_1c_c;\n\n\n\n\n\n    };\n}\n\n#endif // DLIB_QUEUe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/rand/mersenne_twister.h",
    "content": "/* boost random/mersenne_twister.hpp header file\n *\n * Copyright Jens Maurer 2000-2001\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n *\n * See http://www.boost.org for most recent version including documentation.\n *\n * $Id: mersenne_twister.hpp,v 1.20 2005/07/21 22:04:31 jmaurer Exp $\n *\n * Revision history\n *  2001-02-18  moved to individual header files\n*/\n\n#ifndef DLIB_BOOST_RANDOM_MERSENNE_TWISTER_HPP\n#define DLIB_BOOST_RANDOM_MERSENNE_TWISTER_HPP\n\n#include <iostream>\n#include <algorithm>     // std::copy\n#include <stdexcept>\n#include \"../uintn.h\"\n#include \"../serialize.h\"\n\nnamespace dlib \n{\n    namespace random_helpers \n    {\n\n    // ------------------------------------------------------------------------------------\n\n        // http://www.math.keio.ac.jp/matumoto/emt.html\n        template<\n            class UIntType, \n            int w, \n            int n,\n            int m,\n            int r,\n            UIntType a,\n            int u,\n            int s,\n            UIntType b,\n            int t,\n            UIntType c,\n            int l,\n            UIntType val\n            >\n        class mersenne_twister\n        {\n        public:\n            typedef UIntType result_type;\n            const static int word_size = w;\n            const static int state_size = n;\n            const static int shift_size = m;\n            const static int mask_bits = r;\n            const static UIntType parameter_a = a;\n            const static int output_u = u;\n            const static int output_s = s;\n            const static UIntType output_b = b;\n            const static int output_t = t;\n            const static UIntType output_c = c;\n            const static int output_l = l;\n\n            const static bool has_fixed_range = false;\n\n            mersenne_twister() { seed(); }\n\n            explicit mersenne_twister(UIntType value) { seed(value); }\n\n            void seed () { seed(UIntType(5489)); }\n\n            // compiler-generated copy ctor and assignment operator are fine\n\n            void seed(UIntType value)\n            {\n                // New seeding algorithm from \n                // http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html\n                // In the previous versions, MSBs of the seed affected only MSBs of the\n                // state x[].\n                const UIntType mask = ~0u;\n                x[0] = value & mask;\n                for (i = 1; i < n; i++) {\n                    // See Knuth \"The Art of Computer Programming\" Vol. 2, 3rd ed., page 106\n                    x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask;\n                }\n            }\n\n            result_type min() const { return 0; }\n            result_type max() const\n            {\n                // avoid \"left shift count >= with of type\" warning\n                result_type res = 0;\n                for(int i = 0; i < w; ++i)\n                    res |= (1u << i);\n                return res;\n            }\n\n            result_type operator()();\n\n            friend void serialize(\n                const mersenne_twister& item, \n                std::ostream& out\n            )\n            {\n                dlib::serialize(item.x, out);\n                dlib::serialize(item.i, out);\n            }\n\n            friend void deserialize(\n                mersenne_twister& item, \n                std::istream& in \n            )\n            {\n                dlib::deserialize(item.x, in);\n                dlib::deserialize(item.i, in);\n            }\n\n        private:\n\n            void twist(int block);\n\n            // state representation: next output is o(x(i))\n            //   x[0]  ... x[k] x[k+1] ... x[n-1]     x[n]     ... x[2*n-1]   represents\n            //  x(i-k) ... x(i) x(i+1) ... x(i-k+n-1) x(i-k-n) ... x[i(i-k-1)]\n            // The goal is to always have x(i-n) ... x(i-1) available for\n            // operator== and save/restore.\n\n            UIntType x[2*n]; \n            int i;\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template<\n            class UIntType, int w, int n, int m, int r, UIntType a, int u,\n            int s, UIntType b, int t, UIntType c, int l, UIntType val\n            >\n        void mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::twist(\n            int block\n        )\n        {\n            const UIntType upper_mask = (~0u) << r;\n            const UIntType lower_mask = ~upper_mask;\n\n            if(block == 0) {\n                for(int j = n; j < 2*n; j++) {\n                    UIntType y = (x[j-n] & upper_mask) | (x[j-(n-1)] & lower_mask);\n                    x[j] = x[j-(n-m)] ^ (y >> 1) ^ (y&1 ? a : 0);\n                }\n            } else if (block == 1) {\n                // split loop to avoid costly modulo operations\n                {  // extra scope for MSVC brokenness w.r.t. for scope\n                    for(int j = 0; j < n-m; j++) {\n                        UIntType y = (x[j+n] & upper_mask) | (x[j+n+1] & lower_mask);\n                        x[j] = x[j+n+m] ^ (y >> 1) ^ (y&1 ? a : 0);\n                    }\n                }\n\n                for(int j = n-m; j < n-1; j++) {\n                    UIntType y = (x[j+n] & upper_mask) | (x[j+n+1] & lower_mask);\n                    x[j] = x[j-(n-m)] ^ (y >> 1) ^ (y&1 ? a : 0);\n                }\n                // last iteration\n                UIntType y = (x[2*n-1] & upper_mask) | (x[0] & lower_mask);\n                x[n-1] = x[m-1] ^ (y >> 1) ^ (y&1 ? a : 0);\n                i = 0;\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template<\n            class UIntType, int w, int n, int m, int r, UIntType a, int u,\n            int s, UIntType b, int t, UIntType c, int l, UIntType val\n            >\n        inline typename mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::result_type\n        mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::operator()(\n        )\n        {\n            if(i == n)\n                twist(0);\n            else if(i >= 2*n)\n                twist(1);\n            // Step 4\n            UIntType z = x[i];\n            ++i;\n            z ^= (z >> u);\n            z ^= ((z << s) & b);\n            z ^= ((z << t) & c);\n            z ^= (z >> l);\n            return z;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    } // namespace random\n\n\n    typedef random_helpers::mersenne_twister<uint32,32,351,175,19,0xccab8ee7,11,\n    7,0x31b6ab00,15,0xffe50000,17, 0xa37d3c92> mt11213b;\n\n    // validation by experiment from mt19937.c\n    typedef random_helpers::mersenne_twister<uint32,32,624,397,31,0x9908b0df,11,\n    7,0x9d2c5680,15,0xefc60000,18, 3346425566U> mt19937;\n\n} // namespace dlib \n\n\n#endif // DLIB_BOOST_RANDOM_MERSENNE_TWISTER_HPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/rand/rand_kernel_1.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RAND_KERNEl_1_\n#define DLIB_RAND_KERNEl_1_\n\n#include <string>\n#include \"../algs.h\"\n#include \"rand_kernel_abstract.h\"\n#include \"mersenne_twister.h\"\n#include \"../is_kind.h\"\n#include <iostream>\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n\n    class rand\n    {\n\n        /*!       \n            INITIAL VALUE\n                - seed == \"\"\n\n            CONVENTION\n                - the random numbers come from the boost mersenne_twister code\n                - get_seed() == seed\n        !*/\n        \n        public:\n\n            // These typedefs are here for backwards compatibility with older versions of dlib.\n            typedef rand kernel_1a;\n            typedef rand float_1a;\n\n            rand(\n            ) \n            {\n                init();\n            }\n\n            rand (\n                const std::string& seed_value\n            )\n            {\n                init();\n                set_seed(seed_value);\n            }\n\n            virtual ~rand(\n            )\n            {}\n\n            void clear(\n            )\n            {\n                mt.seed();\n                seed.clear();\n\n                has_gaussian = false;\n                next_gaussian = 0;\n\n                // prime the generator a bit\n                for (int i = 0; i < 10000; ++i)\n                    mt();\n            }\n \n            const std::string& get_seed (\n            )\n            {\n                return seed;\n            }\n\n            void set_seed (\n                const std::string& value\n            )\n            {\n                seed = value;\n\n                // make sure we do the seeding so that using a seed of \"\" gives the same\n                // state as calling this->clear()\n                if (value.size() != 0)\n                {\n                    uint32 s = 0;\n                    for (std::string::size_type i = 0; i < seed.size(); ++i)\n                    {\n                        s = (s*37) + static_cast<uint32>(seed[i]);\n                    }\n                    mt.seed(s);\n                }\n                else\n                {\n                    mt.seed();\n                }\n\n                // prime the generator a bit\n                for (int i = 0; i < 10000; ++i)\n                    mt();\n\n\n                has_gaussian = false;\n                next_gaussian = 0;\n            }\n\n            unsigned char get_random_8bit_number (\n            )\n            {\n                return static_cast<unsigned char>(mt());\n            }\n\n            uint16 get_random_16bit_number (\n            )\n            {\n                return static_cast<uint16>(mt());\n            }\n\n            inline uint32 get_random_32bit_number (\n            )\n            {\n                return mt();\n            }\n\n            inline uint64 get_random_64bit_number (\n            )\n            {\n                const uint64 a = get_random_32bit_number();\n                const uint64 b = get_random_32bit_number();\n                return (a<<32)|b;\n            }\n\n            double get_random_double (\n            )\n            {\n                uint32 temp;\n\n                temp = rand::get_random_32bit_number();\n                temp &= 0xFFFFFF;\n\n                double val = static_cast<double>(temp);\n\n                val *= 0x1000000;\n\n                temp = rand::get_random_32bit_number();\n                temp &= 0xFFFFFF;\n\n                val += temp;\n\n                val /= max_val;\n\n                if (val < 1.0)\n                {\n                    return val;\n                }\n                else\n                {\n                    // return a value slightly less than 1.0\n                    return 1.0 - std::numeric_limits<double>::epsilon();\n                }\n            }\n\n            float get_random_float (\n            )\n            {\n                uint32 temp;\n\n                temp = rand::get_random_32bit_number();\n                temp &= 0xFFFFFF;\n\n                const float scale = 1.0/0x1000000;\n\n                const float val = static_cast<float>(temp)*scale;\n                if (val < 1.0f)\n                {\n                    return val;\n                }\n                else\n                {\n                    // return a value slightly less than 1.0\n                    return 1.0f - std::numeric_limits<float>::epsilon();\n                }\n            }\n\n            double get_random_gaussian (\n            )\n            {\n                if (has_gaussian)\n                {\n                    has_gaussian = false;\n                    return next_gaussian;\n                }\n\n                double x1, x2, w;\n\n                const double rndmax = std::numeric_limits<dlib::uint32>::max();\n\n                // Generate a pair of Gaussian random numbers using the Box-Muller transformation.\n                do \n                {\n                    const double rnd1 = get_random_32bit_number()/rndmax;\n                    const double rnd2 = get_random_32bit_number()/rndmax;\n\n                    x1 = 2.0 * rnd1 - 1.0;\n                    x2 = 2.0 * rnd2 - 1.0;\n                    w = x1 * x1 + x2 * x2;\n                } while ( w >= 1.0 );\n\n                w = std::sqrt( (-2.0 * std::log( w ) ) / w );\n                next_gaussian = x2 * w;\n                has_gaussian = true;\n                return x1 * w;\n            }\n\n            void swap (\n                rand& item\n            )\n            {\n                exchange(mt,item.mt);\n                exchange(seed, item.seed);\n                exchange(has_gaussian, item.has_gaussian);\n                exchange(next_gaussian, item.next_gaussian);\n            }\n    \n            friend void serialize(\n                const rand& item, \n                std::ostream& out\n            );\n\n            friend void deserialize(\n                rand& item, \n                std::istream& in \n            );\n\n        private:\n\n            void init()\n            {\n                // prime the generator a bit\n                for (int i = 0; i < 10000; ++i)\n                    mt();\n\n                max_val =  0xFFFFFF;\n                max_val *= 0x1000000;\n                max_val += 0xFFFFFF;\n                max_val += 0.01;\n\n\n                has_gaussian = false;\n                next_gaussian = 0;\n            }\n\n            mt19937 mt;\n\n            std::string seed;\n\n\n            double max_val;\n            bool has_gaussian;\n            double next_gaussian;\n    };\n\n\n    inline void swap (\n        rand& a, \n        rand& b \n    ) { a.swap(b); }   \n\n\n    template <>\n    struct is_rand<rand>\n    {\n        static const bool value = true; \n    };\n\n    inline void serialize(\n        const rand& item, \n        std::ostream& out\n    )\n    {\n        int version = 1;\n        serialize(version, out);\n\n        serialize(item.mt, out);\n        serialize(item.seed, out);\n        serialize(item.has_gaussian, out);\n        serialize(item.next_gaussian, out);\n    }\n\n    inline void deserialize(\n        rand& item, \n        std::istream& in \n    )\n    {\n        int version;\n        deserialize(version, in);\n        if (version != 1)\n            throw serialization_error(\"Error deserializing object of type rand: unexpected version.\"); \n\n        deserialize(item.mt, in);\n        deserialize(item.seed, in);\n        deserialize(item.has_gaussian, in);\n        deserialize(item.next_gaussian, in);\n    }\n}\n\n#endif // DLIB_RAND_KERNEl_1_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/rand/rand_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RAND_KERNEl_ABSTRACT_\n#ifdef DLIB_RAND_KERNEl_ABSTRACT_\n\n#include <string>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n\n    class rand\n    {\n\n        /*!      \n            INITIAL VALUE\n                get_seed() == \"\"\n\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a pseudorandom number generator.\n        !*/\n        \n        public:\n\n\n            rand(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc\n            !*/\n\n            rand (\n                const std::string& seed_value\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                    - #get_seed() == seed_value\n                    - This version of the constructor is equivalent to using\n                      the default constructor and then calling set_seed(seed_value)\n                throws\n                    - std::bad_alloc\n            !*/\n\n            virtual ~rand(\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            const std::string& get_seed (\n            );\n            /*!\n                ensures\n                    - returns the string currently being used as the random seed.\n            !*/\n\n            void set_seed (\n                const std::string& value\n            );\n            /*!\n                ensures\n                    - #get_seed() == value\n            !*/\n\n            unsigned char get_random_8bit_number (\n            );\n            /*!\n                ensures\n                    - returns a pseudorandom number in the range 0 to 255\n            !*/\n\n            uint16 get_random_16bit_number (\n            );\n            /*!\n                ensures\n                    - returns a pseudorandom number in the range 0 to 2^16-1 \n            !*/\n\n            uint32 get_random_32bit_number (\n            );\n            /*!\n                ensures\n                    - returns a pseudorandom number in the range 0 to 2^32-1 \n            !*/\n\n            uint64 get_random_64bit_number (\n            );\n            /*!\n                ensures\n                    - returns a pseudorandom number in the range 0 to 2^64-1 \n            !*/\n\n            float get_random_float (\n            );\n            /*!\n                ensures\n                    - returns a random float number N where:  0.0 <= N < 1.0.\n            !*/\n\n            double get_random_double (\n            );\n            /*!\n                ensures\n                    - returns a random double number N where:  0.0 <= N < 1.0.\n            !*/\n\n            double get_random_gaussian (\n            );\n            /*!\n                ensures\n                    - returns a random number sampled from a Gaussian distribution \n                      with mean 0 and standard deviation 1. \n            !*/\n\n            void swap (\n                rand& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n    };\n\n    inline void swap (\n        rand& a, \n        rand& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    void serialize (\n        const rand& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        rand& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_RAND_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/rand.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RANd_\n#define DLIB_RANd_\n\n#include \"rand/rand_kernel_1.h\"\n\n#endif // DLIB_RANd_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/ref.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_REFERENCE_WRAPpER_H_\n#define DLIB_REFERENCE_WRAPpER_H_\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template<\n        typename T\n        > \n    class reference_wrapper \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple object that just holds a reference to another object. \n                It is useful because it can serve as a kind of \"copyable reference\".  \n        !*/\n\n    public:\n        typedef T type;\n\n        explicit reference_wrapper(T& o) : obj(&o) {}\n\n        operator T&()    const { return  *obj; }\n        T& get()         const { return  *obj; }\n\n    private:\n        T* obj;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    reference_wrapper<T> ref(\n        T& obj\n    ) { return reference_wrapper<T>(obj); }\n    /*!\n        ensures\n            - returns a reference_wrapper that contains a reference to obj.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    reference_wrapper<T> ref(\n        reference_wrapper<T> obj\n    ) { return obj; }\n    /*!\n        ensures\n            - returns the given reference_wrapper object without modification\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    reference_wrapper<const T> cref(\n        const T& obj\n    ) { return reference_wrapper<const T>(obj); }\n    /*!\n        ensures\n            - returns a reference_wrapper that contains a constant reference to obj.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    reference_wrapper<const T> cref(\n        reference_wrapper<T> obj\n    ) { return cref(obj.get()); }\n    /*!\n        ensures\n            - converts the given reference_wrapper into a reference_wrapper that contains a\n              constant reference.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_REFERENCE_WRAPpER_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/reference_counter/reference_counter_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_REFERENCE_COUNTER_KERNEl_1_\n#define DLIB_REFERENCE_COUNTER_KERNEl_1_\n\n#include \"reference_counter_kernel_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename copy = copy_functor<T>\n        >\n    class reference_counter_kernel_1 \n    {\n\n        /*!\n                INITIAL VALUE\n                    *data = item of type T with its initial value\n                    *count = 1\n\n                CONVENTION\n                    *data = pointer to item of type T\n                    *count = number of references to *data\n\n                    if clear() threw an exception then count = 0 and data is not a \n                    valid pointer\n        !*/\n\n        public:\n\n            typedef T type;\n\n\n            reference_counter_kernel_1 (\n            );\n\n            inline reference_counter_kernel_1 ( \n                const reference_counter_kernel_1& item\n            );\n\n            virtual ~reference_counter_kernel_1 (\n            ); \n\n            void clear (\n            );\n\n            T& modify (\n            );\n\n            inline const T& access (\n            ) const;\n\n            inline reference_counter_kernel_1& operator= (\n                const reference_counter_kernel_1& rhs\n            );\n\n            inline void swap (\n                reference_counter_kernel_1& item\n            );\n\n\n        private:\n\n            T* data;\n            unsigned long* count;\n            mutable copy copy_item;\n    };\n\n    template <\n        typename T,\n        typename copy\n        >\n    inline void swap (\n        reference_counter_kernel_1<T,copy>& a, \n        reference_counter_kernel_1<T,copy>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename copy\n        >\n    reference_counter_kernel_1<T,copy>::\n    reference_counter_kernel_1 (\n    ) \n    {\n        data = new T;\n        try { count = new unsigned long; }\n        catch (...) { delete data; throw; }\n\n        *count = 1;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename copy\n        >\n    reference_counter_kernel_1<T,copy>::\n    reference_counter_kernel_1 ( \n        const reference_counter_kernel_1<T,copy>& item\n    ) : \n        data(item.data),\n        count(item.count)\n    {\n        ++(*count);\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename copy\n        >\n    reference_counter_kernel_1<T,copy>::\n    ~reference_counter_kernel_1 (\n    )\n    {\n        if (*count > 1)\n        {\n            // if there are other references to this data\n            --(*count);\n        }\n        else\n        {\n            // if there are no other references to this data\n            delete count;\n            delete data;\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename copy\n        >\n    void reference_counter_kernel_1<T,copy>::\n    clear (\n    )\n    {\n        // if an exception was thrown last time clear() was called then do this\n        if (count == 0)\n        {\n            data = new T;\n            try { count = new unsigned long; }\n            catch (...) { delete data; throw; }\n\n            *count = 1;            \n        }\n        // if there are other references to the data then do this\n        else if (*count > 1)\n        {\n            --(*count);\n\n            try { data = new T; }               \n            catch (...) { count = 0; throw; }\n\n            try { count = new unsigned long; }  \n            catch (...) { delete data; count = 0; throw; }\n\n            *count = 1;\n\n        }\n        else\n        {\n            // if there are no other references to this data\n            *count = 1;\n            delete data;\n            try { data = new T; } catch (...) { delete count; count = 0; throw; }\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename copy\n        >\n    T& reference_counter_kernel_1<T,copy>::\n    modify (\n    )\n    {\n        // if this is not the only reference then make a new copy\n        if ( *count > 1 )\n        {\n            T&              old_data    = *data;\n            unsigned long&  old_count   = *count;\n\n\n            // get memory for the new copy\n            try { data = new T; }               \n            catch (...) { data = &old_data; throw; }\n\n            try { count = new unsigned long; }  \n            catch (...) {delete data; data = &old_data; count = &old_count; throw;}\n\n            // decrement the number of references to old_data\n            --(old_count);\n\n            *count = 1;\n\n            // make a copy of the old data\n            try { copy_item(old_data,*data); }  \n            catch (...) \n            { delete data; delete count; data = &old_data; count = &old_count; }\n\n        }\n\n        return *data;\n\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename copy\n        >\n    const T& reference_counter_kernel_1<T,copy>::\n    access (\n    ) const\n    {\n        return *data;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename copy\n        >\n    reference_counter_kernel_1<T,copy>& reference_counter_kernel_1<T,copy>::\n    operator= (\n        const reference_counter_kernel_1<T,copy>& rhs\n    )\n    {\n        if (this == &rhs)\n            return *this;\n\n        // delete the current data if this is the last reference to it\n        if (*count > 1)\n        {\n            // if there are other references to this data\n            --(*count);\n        }\n        else\n        {\n            // if there are no other references to this data\n            delete count;\n            delete data;\n        }        \n\n        // copy the pointers\n        count = (rhs.count);\n        data = (rhs.data);\n        ++(*count);\n\n        return *this;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename copy\n        >\n    void reference_counter_kernel_1<T,copy>::\n    swap (\n        reference_counter_kernel_1<T,copy>& item\n    )\n    {\n        T* data_temp                = data;\n        unsigned long* count_temp   = count;\n\n        data    = item.data;\n        count   = item.count;\n\n        item.data   = data_temp;\n        item.count  = count_temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_REFERENCE_COUNTER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/reference_counter/reference_counter_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_REFERENCE_COUNTER_KERNEl_ABSTRACT_\n#ifdef DLIB_REFERENCE_COUNTER_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename copy = copy_functor<T>\n        >\n    class reference_counter\n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T must have a default constructor\n\n            REQUIREMENTS ON copy\n                it should be a function object that copies an object of type T. and\n                it must have a default constructor and\n                operator() should be overloaded as \n                void operator()(const T& source, T& destination);\n                copy may throw any exception \n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap() and access() functions do not invalidate pointers or \n                references to internal data.\n                All other functions have no such guarantee\n  \n\n            INITIAL VALUE\n                reference_counter contains one object of type T and\n                this object of type T has its initial value\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a container for an object of type T and \n                provides reference counting capabilities for the object it contains   \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n\n        !*/\n\n        public:\n\n            typedef T type;\n\n            reference_counter (\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n            !*/\n\n            reference_counter ( \n                const reference_counter& item\n            );\n            /*!\n                ensures\n                    - #access() == item.access()\n            !*/\n\n            virtual ~reference_counter (\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear (\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            T& modify (\n            );\n            /*!\n                ensures\n                    - returns a non-const reference to the item contained in *this \n                    - the item is ok to modify.  i.e. there are no other references to it\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        modify() may throw this exception if there are other references\n                        to the item and there is not enough memory to copy it. If modify()\n                        throws then it has no effect.    \n            !*/\n\n            const T& access (\n            ) const;\n            /*!\n                ensures\n                    - returns a const reference to the item contained in *this \n                    - there may be other references to to the item\n            !*/\n\n            reference_counter& operator= (\n                const reference_counter& rhs\n            );\n            /*!\n                ensures\n                    - #access() == rhs.access() \n            !*/\n\n            void swap (\n                reference_counter& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n    };\n\n    template <\n        typename T,\n        typename copy\n        >\n    inline void swap (\n        reference_counter<T,copy>& a, \n        reference_counter<T,copy>& b \n    ) { a.swap(b); }  \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_REFERENCE_COUNTER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/reference_counter.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_REFERENCE_COUNTEr_\n#define DLIB_REFERENCE_COUNTEr_\n\n#include \"reference_counter/reference_counter_kernel_1.h\"\n#include \"algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename copy = copy_functor<T>\n        >\n    class reference_counter\n    {\n        reference_counter() {}\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     reference_counter_kernel_1<T,copy>    \n                    kernel_1a;\n\n    };\n}\n\n#endif // DLIB_REFERENCE_COUNTEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/release_build_by_default",
    "content": "\n#set default build type to Release\nif(NOT CMAKE_BUILD_TYPE)\n   set(CMAKE_BUILD_TYPE \"Release\" CACHE STRING\n      \"Choose the type of build, options are: Debug Release\n      RelWithDebInfo MinSizeRel.\" FORCE)\nendif()\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/revision.h",
    "content": "#ifndef DLIB_REVISION_H\n// Version:  18.10\n// Date:     Thu Aug 28 19:45:52 EDT 2014\n// Mercurial Revision ID:  5a14394843c0\n#define DLIB_MAJOR_VERSION  18\n#define DLIB_MINOR_VERSION  10\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence/sequence_compare_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEQUENCE_COMPARe_1_\n#define DLIB_SEQUENCE_COMPARe_1_\n\n#include \"sequence_compare_abstract.h\"\n\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n\n    template <\n        typename seq_base \n        >\n    class sequence_compare_1 : public seq_base\n    {\n        typedef typename seq_base::type T;\n\n    public:\n\n        bool operator< (\n            const sequence_compare_1& rhs\n        ) const;\n\n        bool operator== (\n            const sequence_compare_1& rhs\n        ) const;\n\n    };\n\n\n    template <\n        typename seq_base\n        >\n    inline void swap (\n        sequence_compare_1<seq_base>& a, \n        sequence_compare_1<seq_base>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    bool sequence_compare_1<seq_base>::\n    operator< (\n        const sequence_compare_1<seq_base>& rhs\n    ) const\n    {\n        unsigned int length;\n        if (this->size() < rhs.size())\n            length = this->size();\n        else\n            length = rhs.size();\n\n        for (unsigned long i = 0; i < length; ++i)\n        {\n            if ((*this)[i] < rhs[i])\n                return true;\n            else if ( !((*this)[i] == rhs[i]) )\n                return false;\n        }\n        // they are equal so far\n        if (this->size() < rhs.size())\n            return true;\n        else\n            return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    bool sequence_compare_1<seq_base>::\n    operator== (\n        const sequence_compare_1<seq_base>& rhs\n    ) const\n    {\n        if (this->size() != rhs.size())\n            return false;\n\n        for (unsigned long i = 0; i < this->size(); ++i)\n        {\n            if (!((*this)[i] == rhs[i]))\n                return false;\n        }\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEQUENCE_COMPARe_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence/sequence_compare_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SEQUENCE_COMPARe_ABSTRACT_\n#ifdef DLIB_SEQUENCE_COMPARe_ABSTRACT_\n\n#include \"sequence_kernel_abstract.h\"\n\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n\n    template <\n        typename seq_base\n        >\n    class sequence_compare : public seq_base\n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T must implement operator< for its type and\n                T must implement operator== for its type\n\n            REQUIREMENTS ON SEQUENCE_BASE\n                must be an implementation of sequence/sequence_kernel_abstract.h\n\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                operator== and operator< do not invalidate pointers or references to \n                data members\n\n            WHAT THIS EXTENSION DOES FOR sequence\n                This gives a sequence the ability to compare itself to other \n                sequences using the < and == operators. \n        !*/\n\n    public:\n\n        bool operator< (\n            const sequence_compare& rhs\n        ) const;\n        /*!\n            ensures\n                - returns true if there exists an integer j such that 0 <= j < size() \n                  and for all integers i such that 0 <= i < j where it is true that\n                  (*this)[i] <= rhs[i] and (*this)[j] < rhs[j] \n                - returns false if there is no j that will satisfy the above conditions\n        !*/\n\n        bool operator== (\n            const sequence_compare& rhs\n        ) const;\n        /*!\n            ensures\n                - returns true if for all i: (*this)[i] == rhs[i] else returns false                   \n        !*/\n\n    };\n\n    template <\n        typename seq_base\n        >\n    inline void swap (\n        sequence_compare<seq_base>& a, \n        sequence_compare<seq_base>& b \n    ) { a.swap(b); } \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_SEQUENCE_COMPARe_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence/sequence_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEQUENCE_KERNEl_1_\n#define DLIB_SEQUENCE_KERNEl_1_\n\n#include \"sequence_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager\n        >\n    class sequence_kernel_1 : public enumerable<T>,\n                              public remover<T>\n    {\n\n        /*!\n            INITIAL VALUE\n                - tree_root == 0\n                - tree_size == 0 \n                - at_start_ == true\n                - current_element == 0\n                - stack == array of 50 node pointers\n                - stack_pos == 0         \n\n            CONVENTION\n                \n                - if (tree_size > 0)\n                    - tree_root == pointer to the root node of the binary search tree\n                - else\n                    - tree_root == 0\n\n\n\n                - stack[stack_pos-1] == pop()\n\n                - current_element_valid() == (current_element != 0)\n                \n                - at_start_ == at_start()\n                - if (current_element != 0 && current_element != tree_root) then\n                    - stack[stack_pos-1] == the parent of the node pointed to by current_element\n\n                - if (current_element_valid()) then\n                    - element() == current_element->item\n\n\n\n                - tree_size == size()\n                - (*this)[i] == return_reference(i)\n\n\n                - for all nodes:\n                    - left_size == the number of elements in the left subtree. \n                    - left points to the left subtree or 0 if there is no left subtree. \n                    - right points to the right subtree or 0 if there is no right subtree. \n\n                    - all elements in a left subtree have a position in the sequence < that \n                      of the root of the current tree. \n\n                    - all elements in a right subtree have a position in the \n                      sequence > that of the root of the current tree.      \n\n                    - item is the sequence element for that node. \n                    - balance:\n                        - balance == 0 if both subtrees have the same height\n                        - balance == -1 if the left subtree has a height that is \n                          greater than the height of the right subtree by 1\n                        - balance == 1 if the right subtree has a height that is \n                          greater than the height of the left subtree by 1\n                    - for all subtrees:\n                        - the height of the left and right subtrees differ by at most one\n\n        !*/\n\n\n        class node\n        {\n        public:\n            node* left;\n            node* right;\n            unsigned long left_size;\n            T item;\n            signed char balance;            \n        };\n\n\n        \n        public:\n\n            typedef T type;\n            typedef mem_manager mem_manager_type;\n\n            sequence_kernel_1 (\n            ) : \n                tree_root(0),\n                tree_size(0),\n                stack(ppool.allocate_array(50)),\n                current_element(0),\n                at_start_(true),\n                stack_pos(0)\n            {}\n\n            virtual ~sequence_kernel_1 (\n            );\n\n            inline void clear (\n            );\n\n            void add (\n                unsigned long pos,\n                T& item\n            );\n\n            void remove (\n                unsigned long pos,\n                T& item\n            );\n\n            void cat (\n                sequence_kernel_1& item\n            );\n\n            const T& operator[] (\n                unsigned long pos\n            ) const;\n            \n            T& operator[] (\n                unsigned long pos\n            );\n\n            inline void swap (\n                sequence_kernel_1& item\n            );\n\n            // functions from the remover interface\n            inline void remove_any (\n                T& item\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            bool current_element_valid (\n            ) const;\n\n            const T& element (\n            ) const;\n\n            T& element (\n            );\n\n            bool move_next (\n            ) const;\n\n\n        private:\n\n            void delete_nodes (\n                node* t\n            );\n            /*!\n                requires\n                    - t == a pointer to a valid node\n                ensures\n                    - deletes t and all its sub nodes.\n            !*/\n\n            inline void rotate_left (\n                node*& t\n            );\n            /*!\n                requires\n                    - t->balance == 2 \n                    - t->right->balance == 0 or 1\n                ensures\n                    - #t is still a binary search tree \n                    - #t->balance is between 1 and -1 \n                    - #t now has a height smaller by 1 if #t->balance == 0\n            !*/\n\n            inline void rotate_right (\n                node*& t\n            );\n            /*!\n                requires\n                    - t->balance == -2 \n                    - t->left->balance == 0 or -1\n                ensures\n                    - #t is still a binary search tree \n                    - #t->balance is between 1 and -1 \n                    - #t now has a height smaller by 1 if #t->balance == 0\n\n            !*/\n\n            inline void double_rotate_right (\n                node*& t\n            );\n            /*!\n                requires\n                    - #t->balance == -2 \n                    - #t->left->balance == 1\n                ensures\n                    - #t is still a binary search tree \n                    - #t now has a balance of 0 \n                    - #t now has a height smaller by 1             \n            !*/\n\n            inline void double_rotate_left (\n                node*& t\n            );\n            /*!\n                requires\n                    - #t->balance == 2 \n                    - #t->right->balance == -1\n                ensures\n                    - #t is still a binary search tree \n                    - #t now has a balance of 0 and\n                    - #t now has a height smaller by 1\n            !*/\n\n            bool remove_least_element_in_tree (\n                node*& t,\n                T& item\n            );\n            /*!\n                requires\n                    - t != 0  (i.e. there must be something in the tree to remove)\n                ensures\n                    - the least node in t has been removed \n                    - the least node element in t has been put into #item \n                    - #t is still a binary search tree \n                    - returns false if the height of the tree has not changed \n                    - returns true if the height of the tree has shrunk by one\n            !*/\n\n            bool add_to_tree (\n                node*& t,\n                unsigned long pos,\n                T& item\n            );\n            /*!\n                requires\n                    - pos <= the number of items in the tree\n                ensures\n                    - item has been added to #t \n                    - #return_reference(pos) == item \n                    - the convention is still satisfied \n                    - #item has an initial value for its type \n                    - returns false if the height of the tree has not changed \n                    - returns true if the height of the tree has grown by one\n            !*/\n\n            bool remove_from_tree (\n                node*& t,\n                unsigned long pos,\n                T& item\n            );\n            /*!\n                requires\n                    - there is an item in the tree associated with pos\n                ensures\n                    - the element in the tree associated with pos has been removed \n                      and put into #item                                                  \n                    - the convention is still satisfied                                   \n                    - returns false if the height of the tree has not changed \n                    - returns true if the height of the tree has shrunk by one\n            !*/\n\n            const T& return_reference (\n                const node* t,\n                unsigned long pos\n            ) const;\n            /*!\n                requires\n                    - there is an item in the tree associated with pos\n                ensures\n                    - returns a const reference to the item in the tree associated with pos\n            !*/\n\n            T& return_reference (\n                node* t,\n                unsigned long pos\n            );\n            /*!\n                requires\n                    - there is an item in the tree associated with pos\n                ensures\n                    - returns a non-const reference to the item in the tree associated \n                      with pos\n            !*/\n\n            inline bool keep_node_balanced (\n                node*& t\n            );\n            /*!\n                requires\n                    - t != 0\n                ensures\n                    - if (t->balance is < 1 or > 1) then \n                        - keep_node_balanced() will ensure that t->balance == 0, -1, or 1\n                    - returns true if it made the tree one height shorter \n                    - returns false if it didn't change the height\n            !*/\n\n            void push (\n                node* n\n            ) const { stack[stack_pos] = n; ++stack_pos; }\n            /*!\n                ensures\n                    - pushes n onto the stack\n            !*/\n            \n\n            node* pop (\n            ) const { --stack_pos; return stack[stack_pos]; }\n            /*!\n                ensures\n                    - pops the top of the stack and returns it\n            !*/\n\n            // data members\n            typename mem_manager::template rebind<node>::other pool;\n            typename mem_manager::template rebind<node*>::other ppool;\n\n            node* tree_root;\n            unsigned long tree_size;\n\n            mutable node** stack;\n            mutable node* current_element;\n            mutable bool at_start_;\n            mutable unsigned char stack_pos;\n\n            // restricted functions\n            sequence_kernel_1(sequence_kernel_1&);        // copy constructor\n            sequence_kernel_1& operator=(sequence_kernel_1&); // assignment operator        \n\n    };\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        sequence_kernel_1<T,mem_manager>& a, \n        sequence_kernel_1<T,mem_manager>& b \n    ) { a.swap(b); } \n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        sequence_kernel_1<T,mem_manager>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            T temp;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(temp,in);\n                item.add(i,temp);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type sequence_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    sequence_kernel_1<T,mem_manager>::\n    ~sequence_kernel_1 (\n    )\n    {\n        ppool.deallocate_array(stack);\n        if (tree_size > 0)\n        {\n            delete_nodes(tree_root);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    swap (\n        sequence_kernel_1<T,mem_manager>& item\n    )\n    {        \n        exchange(stack,item.stack);\n        exchange(stack_pos,item.stack_pos);\n        \n        pool.swap(item.pool);\n        ppool.swap(item.ppool);\n\n        node* tree_root_temp            = item.tree_root;\n        unsigned long tree_size_temp    = item.tree_size;\n        node* current_element_temp      = item.current_element;\n        bool at_start_temp              = item.at_start_;\n\n        item.tree_root = tree_root;\n        item.tree_size = tree_size;\n        item.current_element = current_element;\n        item.at_start_   = at_start_;\n\n        tree_root = tree_root_temp;\n        tree_size = tree_size_temp;\n        current_element = current_element_temp;\n        at_start_   = at_start_temp;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    unsigned long sequence_kernel_1<T,mem_manager>::\n    size (\n    ) const\n    {\n        return tree_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& sequence_kernel_1<T,mem_manager>::\n    operator[] (\n        unsigned long pos\n    ) const\n    {\n        return return_reference(tree_root,pos);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& sequence_kernel_1<T,mem_manager>::\n    operator[] (\n        unsigned long pos\n    )\n    {\n        return return_reference(tree_root,pos);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    add (\n        unsigned long pos,\n        T& item\n    )\n    {\n        add_to_tree(tree_root,pos,item);\n        ++tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    remove (\n        unsigned long pos,\n        T& item\n    )\n    {\n        remove_from_tree(tree_root,pos,item);\n        --tree_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    cat (\n        sequence_kernel_1<T,mem_manager>& item\n    )\n    {   \n        for (unsigned long i = 0; i < item.tree_size; ++i)\n        {\n            add_to_tree(\n                tree_root,\n                tree_size,\n                return_reference(item.tree_root,i)\n            );\n\n            ++tree_size;\n        }\n\n        item.clear();   \n        // reset the enumerator\n        reset();     \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    clear (\n    )\n    {\n        if (tree_size > 0)\n        {\n            delete_nodes(tree_root);\n            tree_root = 0;\n            tree_size = 0;\n        }    \n        // reset the enumerator\n        reset();    \n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_1<T,mem_manager>::\n    at_start (\n    ) const\n    {\n        return at_start_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    reset (\n    ) const\n    {\n        at_start_ = true;\n        current_element = 0;\n        stack_pos = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_1<T,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return (current_element != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& sequence_kernel_1<T,mem_manager>::\n    element (\n    ) const\n    {\n        return current_element->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& sequence_kernel_1<T,mem_manager>::\n    element (\n    )\n    {\n        return current_element->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_1<T,mem_manager>::\n    move_next (\n    ) const\n    {\n        // if we haven't started iterating yet\n        if (at_start_)\n        {\n            at_start_ = false;\n            if (tree_size == 0)\n            {\n                return false;\n            }\n            else\n            {                    \n                // find the first element in the tree\n                current_element = tree_root;\n                node* temp = current_element->left;\n                while (temp != 0)\n                {\n                    push(current_element);\n                    current_element = temp;\n                    temp = current_element->left;\n                }\n                return true;\n            }\n        }\n        else\n        {\n            if (current_element == 0)\n            {\n                return false;\n            }\n            else\n            {\n                node* temp;\n                bool went_up;  // true if we went up the tree from a child node to parent\n                bool from_left = false; // true if we went up and were coming from a left child node\n                // find the next element in the tree\n                if (current_element->right != 0)\n                {\n                    // go right and down    \n                    temp = current_element;\n                    push(current_element);\n                    current_element = temp->right;\n                    went_up = false;\n                }\n                else\n                {\n                    // go up to the parent if we can\n                    if (current_element == tree_root)\n                    {\n                        // in this case we have iterated over all the element of the tree\n                        current_element = 0;\n                        return false;\n                    }\n                    went_up = true;\n                    node* parent = pop();\n\n\n                    from_left = (parent->left == current_element);\n                    // go up to parent\n                    current_element = parent;\n                }\n\n\n                while (true)\n                {\n                    if (went_up)\n                    {\n                        if (from_left)\n                        {\n                            // in this case we have found the next node\n                            break;\n                        }\n                        else\n                        {\n                            if (current_element == tree_root)\n                            {\n                                // in this case we have iterated over all the elements\n                                // in the tree\n                                current_element = 0;\n                                return false;\n                            }\n                            // we should go up\n                            node* parent = pop();\n                            from_left = (parent->left == current_element);                            \n                            current_element = parent;\n                        }\n                    }\n                    else\n                    {\n                        // we just went down to a child node\n                        if (current_element->left != 0)\n                        {\n                            // go left\n                            went_up = false;\n                            temp = current_element;\n                            push(current_element);\n                            current_element = temp->left;\n                        }\n                        else\n                        {\n                            // if there is no left child then we have found the next node\n                            break;\n                        }\n                    }\n                }\n\n                return true;               \n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // remover function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    remove_any (\n        T& item\n    ) \n    {\n        remove(0,item);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    rotate_left (\n        node*& t\n    ) \n    {\n\n        // set the new balance numbers\n        if (t->right->balance == 1)\n        {\n            t->balance = 0;\n            t->right->balance = 0;\n        }\n        else\n        {\n            t->balance = 1;\n            t->right->balance = -1;            \n        }\n\n        // perform the rotation\n        node* temp = t->right;\n        t->right = temp->left;\n        temp->left = t;\n        t = temp;\n\n\n        // set left_size to its correct value\n        t->left_size += t->left->left_size + 1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    rotate_right (\n        node*& t\n    ) \n    {\n        // set the new balance numbers\n        if (t->left->balance == -1)\n        {\n            t->balance = 0;\n            t->left->balance = 0;\n        }\n        else\n        {\n            t->balance = -1;\n            t->left->balance = 1;            \n        }\n\n        // preform the rotation\n        node* temp = t->left;\n        t->left = temp->right;\n        temp->right = t;\n        t = temp;    \n\n\n        // set left_size to its correct value\n        t->right->left_size -= t->left_size + 1;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    double_rotate_right (\n        node*& t\n    )\n    {\n\n        node* temp = t;\n        t = t->left->right;\n        \n        temp->left->right = t->left;\n        t->left = temp->left;\n\n        temp->left = t->right;\n        t->right = temp;\n\n        if (t->balance < 0)\n        {  \n            t->left->balance = 0;\n            t->right->balance = 1;\n        }\n        else if (t->balance > 0)\n        {\n            t->left->balance = -1;\n            t->right->balance = 0;\n        }\n        else \n        {\n            t->left->balance = 0;\n            t->right->balance = 0;\n        }\n        t->balance = 0;\n\n\n        // set left_size to its correct value\n        t->left_size += t->left->left_size + 1;\n        t->right->left_size -= t->left_size + 1;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    double_rotate_left (\n        node*& t\n    )\n    {\n        node* temp = t;\n        t = t->right->left;\n        \n        temp->right->left = t->right;\n        t->right = temp->right;\n\n        temp->right = t->left;\n        t->left = temp;\n\n        if (t->balance < 0)\n        {  \n            t->left->balance = 0;\n            t->right->balance = 1;\n        }\n        else if (t->balance > 0)\n        {\n            t->left->balance = -1;\n            t->right->balance = 0;\n        }\n        else \n        {\n            t->left->balance = 0;\n            t->right->balance = 0;\n        }\n\n        t->balance = 0;\n\n        // set left_size to its correct value\n        t->right->left_size -= t->left_size + 1;\n        t->left_size += t->left->left_size + 1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_1<T,mem_manager>::\n    remove_least_element_in_tree (\n        node*& t,\n        T& item\n    ) \n    {\n        // make a reference to the current node so we don't have to dereference \n        // a pointer a bunch of times\n        node& tree = *t;\n\n        // if the left tree is an empty tree\n        if ( tree.left == 0)\n        {\n            // swap nodes element into item\n            exchange(tree.item,item);\n\n            // plug hole left by removing this node\n            t = tree.right;\n\n            // delete the node that was just removed\n            tree.right = 0;\n            delete_nodes(&tree);    \n\n            // return that the height of this part of the tree has decreased\n            return true;\n        }\n        else\n        {\n            // subtract one from the left size\n            --tree.left_size;\n\n            // keep going left\n\n            // if remove made the tree one height shorter\n            if ( remove_least_element_in_tree(tree.left,item) ) \n            {\n                // if this caused the current tree to strink then report that\n                if ( tree.balance == -1)\n                {\n                    ++tree.balance;\n                    return true;\n                }\n                else\n                {\n                    ++tree.balance;\n                    return keep_node_balanced(t);\n                }                \n            }\n\n            return false;            \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_1<T,mem_manager>::\n    add_to_tree (\n        node*& t,\n        unsigned long pos,\n        T& item\n    ) \n    {\n        // if found place to add\n        if (t == 0)\n        {\n            // create a node to add new item into\n            t = pool.allocate();\n\n            // make a reference to the current node so we don't have to dereference \n            // a pointer a bunch of times\n            node& tree = *t;\n\n\n            // set left and right pointers to 0 to indicate that there are no \n            // left or right subtrees\n            tree.left = 0;\n            tree.right = 0;\n            tree.balance = 0;\n            tree.left_size = 0;\n\n            // put item into t\n            exchange(item,tree.item);\n\n            // indicate that the height of this tree has increased\n            return true;\n        }\n        else  // keep looking for a place to add the new item\n        {\n            // make a reference to the current node so we don't have to dereference \n            // a pointer a bunch of times\n            node& tree = *t;\n            signed char old_balance = tree.balance;\n\n            // add the new item to whatever subtree it should go into\n            if ( pos < tree.left_size + 1 )\n            {\n                tree.balance -= add_to_tree(tree.left,pos,item);\n                ++tree.left_size;\n            }\n            else\n                tree.balance += add_to_tree(tree.right,pos - tree.left_size - 1,item);\n\n\n            // if the tree was balanced to start with\n            if (old_balance == 0)\n            {\n                // if its not balanced anymore then it grew in height\n                if (tree.balance != 0)\n                    return true;\n                else\n                    return false;\n            }\n            else\n            {\n                // if the tree is now balanced then it didn't grow\n                if (tree.balance == 0)\n                {\n                    return false;\n                }\n                else\n                {\n                    // if the tree needs to be balanced\n                    if (tree.balance != old_balance)\n                    {\n                        return !keep_node_balanced(t);\n                    }\n                    // if there has been no change in the heights\n                    else\n                    {\n                        return false;\n                    }\n                }\n            }\n        }  \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_1<T,mem_manager>::\n    remove_from_tree (\n        node*& t,\n        unsigned long pos,\n        T& item\n    ) \n    {\n        \n        // make a reference to the current node so we don't have to dereference \n        // a pointer a bunch of times\n        node& tree = *t;\n\n        // if item is on the left\n        if (pos < tree.left_size)\n        {\n            // adjust the left size\n            --tree.left_size;\n\n            // if the left side of the tree has the greatest height\n            if (tree.balance == -1)\n            {\n                tree.balance += remove_from_tree(tree.left,pos,item);\n                return !tree.balance;\n            }\n            else\n            {\n                tree.balance += remove_from_tree(tree.left,pos,item);\n                return keep_node_balanced(t);\n            }\n             \n        }\n        // if item is found\n        else if (pos == tree.left_size)\n        {\n            // if there is no left node\n            if (tree.left == 0)\n            {\n                // swap nodes element into item\n                exchange(tree.item,item);\n\n                // plug hole left by removing this node and free memory\n                t = tree.right;  // plug hole with right subtree\n                \n                // delete old node\n                tree.right = 0;\n                delete_nodes(&tree);  \n\n                // indicate that the height has changed\n                return true;\n            }\n            // if there is no right node\n            else if (tree.right == 0)\n            {\n                // swap nodes element into item\n                exchange(tree.item,item);\n\n                // plug hole left by removing this node and free memory\n                t = tree.left;  // plug hole with left subtree\n\n                // delete old node\n                tree.left = 0;\n                delete_nodes(&tree);  \n\n                // indicate that the height of this tree has changed\n                return true;\n            }\n            // if there are both a left and right sub node\n            else\n            {\n                // get an element that can replace the one being removed and do this \n                // if it made the right subtree shrink by one\n                if (remove_least_element_in_tree(tree.right,item))\n                {\n                    // adjust the tree height\n                    --tree.balance;\n\n                    // put the element into item copy and also plug the \n                    // hole with the smallest element from the right.\n                    exchange(item,tree.item);\n\n                    // if the height of the current tree has dropped by one\n                    if (tree.balance == 0)\n                    {\n                        return true;\n                    }\n                    else\n                    {\n                        return keep_node_balanced(t);\n                    }\n                }\n                // else this remove did not effect the height of this tree\n                else\n                {\n                    // put the element into item copy and also plug the \n                    // hole with the smallest element from the right.\n                    exchange(item,tree.item);\n\n                    return false;\n                }\n\n            }\n        }\n        // if item is on the right\n        else\n        {\n\n            // if the right side of the tree has the greatest height\n            if (tree.balance == 1)\n            {\n                tree.balance -= remove_from_tree(tree.right,pos - tree.left_size - 1,item);\n                return !tree.balance;\n            }\n            else\n            {\n                tree.balance -= remove_from_tree(tree.right,pos - tree.left_size - 1,item);\n                return keep_node_balanced(t);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& sequence_kernel_1<T,mem_manager>::\n    return_reference (\n        node* t,\n        unsigned long pos\n    ) \n    {\n        while (true)\n        {\n            // if we have found the node\n            if (pos == t->left_size)\n                return t->item;\n            \n            if (pos < t->left_size)\n            {\n                // go left\n                t = t->left;\n            }\n            else\n            {\n                // go right\n                pos -= t->left_size+1;\n                t = t->right;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& sequence_kernel_1<T,mem_manager>::\n    return_reference (\n        const node* t,\n        unsigned long pos\n    ) const\n    {\n        while (true)\n        {\n            // if we have found the node\n            if (pos == t->left_size)\n                return t->item;\n            \n            if (pos < t->left_size)\n            {\n                // go left\n                t = t->left;\n            }\n            else\n            {\n                // go right\n                pos -= t->left_size+1;\n                t = t->right;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_1<T,mem_manager>::\n    keep_node_balanced (\n        node*& t\n    )\n    {\n        // make a reference to the current node so we don't have to dereference \n        // a pointer a bunch of times\n        node& tree = *t;\n \n        // if tree does not need to be balanced then return false\n        if (tree.balance == 0)\n            return false;\n\n\n        // if tree needs to be rotated left\n        if (tree.balance == 2)\n        {\n            if (tree.right->balance >= 0)\n                rotate_left(t);\n            else\n                double_rotate_left(t);\n        }\n        // else if the tree needs to be rotated right\n        else if (tree.balance == -2)\n        {\n            if (tree.left->balance <= 0)\n                rotate_right(t);\n            else\n                double_rotate_right(t);\n        }\n   \n\n        if (t->balance == 0)\n            return true;\n        else\n            return false; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_1<T,mem_manager>::\n    delete_nodes (\n        node* t\n    )\n    {\n        if (t->left) \n            delete_nodes(t->left); \n        if (t->right) \n            delete_nodes(t->right); \n        pool.deallocate(t);\n    }\n\n// ----------------------------------------------------------------------------------------\n}\n\n#endif // DLIB_SEQUENCE_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence/sequence_kernel_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEQUENCE_KERNEl_2_\n#define DLIB_SEQUENCE_KERNEl_2_\n\n#include \"sequence_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager\n        >\n    class sequence_kernel_2 : public enumerable<T>,\n                              public remover<T>\n    {\n        /*!\n            INITIAL VALUE\n                sequence_size   == 0 \n                at_start_       == true\n                current_enumeration_node == 0\n\n            CONVENTION\n                sequence_size == the number of elements in the sequence\n\n                at_start_ == at_start()\n                (current_enumeration_node!=0) == current_element_valid()\n                if (current_enumeration_node!=0) then\n                    current_enumeration_node->item == element()\n                    current_enumeration_pos == the position of the node pointed to by\n                                               current_enumeration_node\n\n                if ( sequence_size > 0 )\n                {\n                    current_node        == pointer to a node in the linked list and\n                    current_node->right->right->... eventually == current_node and\n                    current_node->left->left->... eventually == current_node and\n                    current_pos         == the position in the sequence of \n                                           current_node->item\n                }\n\n        !*/\n\n        struct node {\n            T item;\n            node* right;\n            node* left;\n        };\n        \n        public:\n\n            typedef T type;\n            typedef mem_manager mem_manager_type;\n\n            sequence_kernel_2 (\n            ) :\n                sequence_size(0),\n                at_start_(true),\n                current_enumeration_node(0)\n            {}\n\n            virtual ~sequence_kernel_2 (\n            ); \n\n            inline void clear (\n            );\n\n            void add (\n                unsigned long pos,\n                T& item\n            );\n\n            void remove (\n                unsigned long pos,\n                T& item\n            );\n\n            void cat (\n                sequence_kernel_2& item\n            );\n\n            const T& operator[] (\n                unsigned long pos\n            ) const;\n            \n            T& operator[] (\n                unsigned long pos\n            );\n\n            void swap (\n                sequence_kernel_2& item\n            );\n \n            // functions from the remover interface\n            inline void remove_any (\n                T& item\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            bool current_element_valid (\n            ) const;\n\n            const T& element (\n            ) const;\n\n            T& element (\n            );\n\n            bool move_next (\n            ) const;\n\n        private:\n\n            void delete_nodes (\n                node* current_node,\n                unsigned long sequence_size\n            );\n            /*!\n                requires\n                    CONVENTION IS CORRECT\n                ensures\n                    all memory associated with the ring of nodes has been freed\n            !*/\n\n            void move_to_pos (\n                node*& current_node,\n                unsigned long& current_pos,\n                unsigned long pos,\n                unsigned long size\n            ) const;\n            /*!\n                requires\n                    everything in the CONVENTION is correct and\n                    there is a node corresponding to pos in the CONVENTION and\n                    0 <= pos < size\n                ensures\n                    current_pos == pos and\n                    current_node->item is the item in the sequence associated with \n                    position pos\n            !*/\n\n            // data members\n            unsigned long sequence_size;\n            mutable node* current_node;\n            mutable unsigned long current_pos;\n            mutable bool at_start_;\n            mutable node* current_enumeration_node;\n            mutable unsigned long current_enumeration_pos;\n\n            // restricted functions\n            sequence_kernel_2(sequence_kernel_2&);        // copy constructor\n            sequence_kernel_2& operator=(sequence_kernel_2&); // assignment operator        \n\n    };\n\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        sequence_kernel_2<T,mem_manager>& a, \n        sequence_kernel_2<T,mem_manager>& b \n    ) { a.swap(b); }   \n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        sequence_kernel_2<T,mem_manager>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            T temp;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(temp,in);\n                item.add(i,temp);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type sequence_kernel_2\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    sequence_kernel_2<T,mem_manager>::\n    ~sequence_kernel_2 (\n    )\n    {\n        delete_nodes(current_node,sequence_size);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_2<T,mem_manager>::\n    clear (\n    )\n    {\n        if (sequence_size != 0)\n        {\n            delete_nodes(current_node,sequence_size);\n            sequence_size = 0;\n        }\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_2<T,mem_manager>::\n    add (\n        unsigned long pos,\n        T& item\n    )\n    {\n        // make new node and swap item into it\n        node* new_node = new node;\n        exchange(item,new_node->item);\n\n        if (sequence_size > 0)\n        {\n            if (pos == sequence_size)\n            {\n                move_to_pos(current_node,current_pos,pos-1,sequence_size);\n                \n                node& n_node = *new_node;\n                node& c_node = *current_node;\n\n                // make new node point to the nodes to its left and right\n                n_node.right = c_node.right;\n                n_node.left  = current_node;\n\n                // make the left node point back to new_node\n                c_node.right->left = new_node;\n\n                // make the right node point back to new_node\n                c_node.right = new_node;\n                current_pos = pos;\n\n            }\n            else\n            {\n                move_to_pos(current_node,current_pos,pos,sequence_size);\n\n                node& n_node = *new_node;\n                node& c_node = *current_node;\n\n                // make new node point to the nodes to its left and right\n                n_node.right = current_node;\n                n_node.left  = c_node.left;\n\n                // make the left node point back to new_node\n                c_node.left->right = new_node;\n\n                // make the right node point back to new_node\n                c_node.left = new_node;\n            }\n            \n        }\n        else\n        {\n            current_pos = 0;\n            new_node->left = new_node;\n            new_node->right = new_node;\n        }\n\n        // make the new node the current node\n        current_node = new_node;    \n    \n        ++sequence_size;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_2<T,mem_manager>::\n    remove (\n        unsigned long pos,\n        T& item\n    )\n    {\n        move_to_pos(current_node,current_pos,pos,sequence_size);\n        node& c_node = *current_node;\n        exchange(c_node.item,item);\n        \n        node* temp = current_node;\n        \n        // close up gap left by remove\n        c_node.left->right = c_node.right;\n        c_node.right->left = c_node.left;\n\n        current_node = c_node.right;\n\n        --sequence_size;\n\n        delete temp;\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& sequence_kernel_2<T,mem_manager>::\n    operator[] (\n        unsigned long pos\n    ) const\n    {\n        move_to_pos(current_node,current_pos,pos,sequence_size);\n        return current_node->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_2<T,mem_manager>::\n    cat (\n        sequence_kernel_2<T,mem_manager>& item\n    )\n    {\n        if (item.sequence_size > 0)\n        {\n            if (sequence_size > 0)\n            {\n                // move both sequences to a convenient location\n                move_to_pos(current_node,current_pos,0,sequence_size);\n                item.move_to_pos (\n                    item.current_node,\n                    item.current_pos,\n                    item.sequence_size-1,\n                    item.sequence_size\n                );\n\n                // make copies of poitners\n                node& item_right = *item.current_node->right;\n                node& left = *current_node->left;\n\n\n                item.current_node->right = current_node;\n                current_node->left = item.current_node;\n\n                left.right = &item_right;\n                item_right.left = &left;\n\n                // set sizes\n                sequence_size += item.sequence_size;\n                item.sequence_size = 0;\n            }\n            else\n            {\n                // *this is empty so just swap\n                item.swap(*this);                \n            }\n        }\n        item.clear();\n        // reset the enumerator\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& sequence_kernel_2<T,mem_manager>::\n    operator[] (\n        unsigned long pos\n    ) \n    {\n        move_to_pos(current_node,current_pos,pos,sequence_size);\n        return current_node->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    unsigned long sequence_kernel_2<T,mem_manager>::\n    size (\n    ) const\n    {\n        return sequence_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_2<T,mem_manager>::\n    swap (\n        sequence_kernel_2<T,mem_manager>& item\n    )\n    {\n        unsigned long   sequence_size_temp         = item.sequence_size;\n        node*           current_node_temp          = item.current_node;\n        unsigned long   current_pos_temp           = item.current_pos;\n        bool            at_start_temp              = item.at_start_;\n        node*           current_enumeration_node_temp = item.current_enumeration_node;\n        unsigned long   current_enumeration_pos_temp = item.current_enumeration_pos;\n\n        item.sequence_size  = sequence_size;\n        item.current_node   = current_node;\n        item.current_pos    = current_pos;\n        item.at_start_      = at_start_;\n        item.current_enumeration_node = current_enumeration_node;\n        item.current_enumeration_pos = current_enumeration_pos;\n\n        sequence_size   = sequence_size_temp;\n        current_node    = current_node_temp;\n        current_pos     = current_pos_temp;\n        at_start_       = at_start_temp;\n        current_enumeration_node = current_enumeration_node_temp;\n        current_enumeration_pos = current_enumeration_pos_temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_2<T,mem_manager>::\n    at_start (\n    ) const\n    {\n        return at_start_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_2<T,mem_manager>::\n    reset (\n    ) const\n    {\n        at_start_ = true;\n        current_enumeration_node = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_2<T,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return (current_enumeration_node!=0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& sequence_kernel_2<T,mem_manager>::\n    element (\n    ) const\n    {\n        return current_enumeration_node->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& sequence_kernel_2<T,mem_manager>::\n    element (\n    )\n    {\n        return current_enumeration_node->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool sequence_kernel_2<T,mem_manager>::\n    move_next (\n    ) const\n    {\n        if (at_start_ && sequence_size>0)\n        {            \n            move_to_pos(current_node,current_pos,0,sequence_size);            \n            current_enumeration_node = current_node;\n            current_enumeration_pos = 0;\n        }\n        else if (current_enumeration_node!=0)\n        {\n            ++current_enumeration_pos;\n            if (current_enumeration_pos<sequence_size)\n            {                \n                current_enumeration_node = current_enumeration_node->right;\n            }\n            else\n            {\n                // we have reached the end of the sequence\n                current_enumeration_node = 0;\n            }\n        }\n\n        at_start_ = false;\n        return (current_enumeration_node!=0);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // remover function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_2<T,mem_manager>::\n    remove_any (\n        T& item\n    ) \n    {\n        remove(0,item);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_2<T,mem_manager>::\n    delete_nodes (\n        node* current_node,\n        unsigned long sequence_size\n    )\n    {\n        node* temp;\n        while (sequence_size)\n        {\n            temp = current_node->right;\n            delete current_node;\n            current_node = temp;\n            --sequence_size;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void sequence_kernel_2<T,mem_manager>::\n    move_to_pos (\n        node*& current_node,\n        unsigned long& current_pos,\n        unsigned long pos,\n        unsigned long size\n    ) const\n    {\n        if ( current_pos > pos)\n        {\n            // number of hops in each direction needed to reach pos\n            unsigned long right = size + pos - current_pos;\n            unsigned long left = current_pos - pos;\n            current_pos = pos;\n\n            if (left < right)\n            {\n                // move left to position pos\n                for (; left > 0; --left)\n                    current_node = current_node->left;\n            }\n            else\n            {\n                // move left to position pos\n                for (; right > 0; --right)\n                    current_node = current_node->right;\n            }\n        }\n        else if (current_pos != pos)\n        {\n            // number of hops in each direction needed to reach pos\n            unsigned long right = pos - current_pos;\n            unsigned long left = size - pos + current_pos;\n            current_pos = pos;\n\n            if (left < right)\n            {\n                // move left to position pos\n                for (; left > 0; --left)\n                    current_node = current_node->left;\n            }\n            else\n            {\n                // move left to position pos\n                for (; right > 0; --right)\n                    current_node = current_node->right;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEQUENCE_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence/sequence_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SEQUENCE_KERNEl_ABSTRACT_\n#ifdef DLIB_SEQUENCE_KERNEl_ABSTRACT_\n\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager\n        >\n    class sequence : public enumerable<T>,\n                     public remover<T>\n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T must be swappable by a global swap() and\n                T must have a default constructor\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap() and operator[] functions do not invalidate pointers or \n                references to internal data.\n                All other functions have no such guarantees.\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the elements in the sequence from\n                the 0th element to the (size()-1)th element.\n\n            INITIAL VALUE\n                size() == 0   \n             \n            WHAT THIS OBJECT REPRESENTS\n                sequence contains items of type T\n\n                This object represents an ordered sequence of items, each item is \n                associated with an integer value.   \n                The items are numbered from 0 to size()-1\n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n        !*/\n        \n        public:\n\n            typedef T type;\n            typedef mem_manager mem_manager_type;\n\n            sequence (\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n            !*/\n\n            virtual ~sequence (\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear (\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            void add (\n                unsigned long pos,\n                T& item\n            );\n            /*!\n                requires\n                    - pos <= size()\n                ensures\n                    - #size() == size() + 1\n                    - #item has an initial value for its type\n                    - #operator[](pos) == item\n                      i.e. item has been inserted into *this between the elements which\n                      were previously at position pos-1 and pos\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if add() throws then it has no effect\n            !*/\n\n            void remove (\n                unsigned long pos,\n                T& item\n            );\n            /*!\n                requires\n                    - pos < size()\n                ensures\n                    - #size() == size() - 1\n                    - the element at the position pos in *this has been removed and \n                      swapped into #item\n                    - #at_start() == true\n            !*/\n\n            void cat (\n                sequence& item\n            );\n            /*!\n                requires\n                    - &item != this  (i.e. you can't concatenate a sequence onto itself)\n                ensures\n                    - item has been concatenated onto the end of *this \n                      i.e. item[0] becomes (#*this)[size()], item[1] \n                      becomes (#*this)[size()+1], etc.\n                    - #size() == size() + item.size() \n                    - #item has its initial value \n                    - #at_start() == true\n            !*/\n\n            const T& operator[] (\n                unsigned long pos\n            ) const;\n            /*!\n                requires\n                    - pos < size()\n                ensures\n                    - returns a const reference to the element at position pos\n            !*/\n            \n            T& operator[] (\n                unsigned long pos\n            );\n            /*!\n                requires\n                    - pos < size()\n                ensures\n                    - returns a non-const reference to the element at position pos\n            !*/\n\n            void swap (\n                sequence& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n\n        private:\n\n            // restricted functions\n            sequence(sequence&);        // copy constructor\n            sequence& operator=(sequence&);    // assignment operator        \n\n    };\n\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        sequence<T,mem_manager>& a, \n        sequence<T,mem_manager>& b \n    ) { a.swap(b); }  \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        sequence<T,mem_manager>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_SEQUENCE_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence/sequence_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEQUENCE_KERNEl_C_\n#define DLIB_SEQUENCE_KERNEl_C_\n\n#include \"sequence_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename seq_base\n        >\n    class sequence_kernel_c : public seq_base\n    {\n        typedef typename seq_base::type T;\n    public:\n\n\n        void add (\n            unsigned long pos,\n            T& item\n        );\n\n        void remove (\n            unsigned long pos,\n            T& item\n        );\n\n        const T& operator[] (\n            unsigned long pos\n        ) const;\n\n        T& operator[] (\n            unsigned long pos\n        );\n\n        void cat (\n            sequence_kernel_c& item\n        );\n\n        const T& element (\n        ) const;\n\n        T& element (\n        );\n\n        void remove_any (\n            T& item\n        );\n\n    };\n\n\n    template <\n        typename seq_base\n        >\n    inline void swap (\n        sequence_kernel_c<seq_base>& a, \n        sequence_kernel_c<seq_base>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    void sequence_kernel_c<seq_base>::\n    add(\n        unsigned long pos,\n        T& item\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( pos <= this->size() ), \n                \"\\tvoid sequence::add\"\n                << \"\\n\\tpos must be >= 0 and <= size()\" \n                << \"\\n\\tpos: \" << pos \n                << \"\\n\\tsize(): \" << this->size()\n                << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        seq_base::add(pos,item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    void sequence_kernel_c<seq_base>::\n    cat (\n        sequence_kernel_c<seq_base>& item\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(&item != this, \n                \"\\tvoid sequence::cat\"\n                << \"\\n\\tyou can't concatenate a sequence onto itself\" \n                << \"\\n\\t&item: \" << &item\n                << \"\\n\\tthis:  \" << this\n        );\n\n        // call the real function\n        seq_base::cat(item);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    void sequence_kernel_c<seq_base>::\n    remove (\n        unsigned long pos,\n        T& item\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( pos < this->size() ), \n                \"\\tvoid sequence::remove\"\n                << \"\\n\\tpos must be >= 0 and < size()\" \n                << \"\\n\\tpos: \" << pos \n                << \"\\n\\tsize(): \" << this->size()\n                << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        seq_base::remove(pos,item);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    const typename seq_base::type& sequence_kernel_c<seq_base>::\n    operator[] (\n        unsigned long pos\n    ) const\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( pos < this->size() ), \n                \"\\tconst T& sequence::operator[]\"\n                << \"\\n\\tpos must be >= 0 and < size()\" \n                << \"\\n\\tpos: \" << pos \n                << \"\\n\\tsize(): \" << this->size()\n                << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        return seq_base::operator[](pos);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    typename seq_base::type& sequence_kernel_c<seq_base>::\n    operator[] (\n        unsigned long pos\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(( pos < this->size() ), \n                \"\\tT& sequence::operator[]\"\n                << \"\\n\\tpos must be >= 0 and < size()\" \n                << \"\\n\\tpos: \" << pos \n                << \"\\n\\tsize(): \" << this->size()\n                << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        return seq_base::operator[](pos);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    const typename seq_base::type& sequence_kernel_c<seq_base>::\n    element (\n    ) const\n    {\n        DLIB_CASSERT(this->current_element_valid() == true,\n                \"\\tconst T& sequence::element() const\"\n                << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                << \"\\n\\tthis: \" << this\n        );\n\n        return seq_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    typename seq_base::type& sequence_kernel_c<seq_base>::\n    element (\n    ) \n    {\n        DLIB_CASSERT(this->current_element_valid() == true,\n                \"\\tT& sequence::element()\"\n                << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                << \"\\n\\tthis: \" << this\n        );\n\n        return seq_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    void sequence_kernel_c<seq_base>::\n    remove_any (\n        T& item\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (this->size() > 0),\n                 \"\\tvoid sequence::remove_any\"\n                 << \"\\n\\tsize() must be greater than zero if something is going to be removed\"\n                 << \"\\n\\tsize(): \" << this->size() \n                 << \"\\n\\tthis:   \" << this\n        );\n\n        // call the real function\n        seq_base::remove_any(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEQUENCE_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence/sequence_sort_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEQUENCE_SORt_1_\n#define DLIB_SEQUENCE_SORt_1_\n\n#include \"sequence_sort_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename seq_base \n        >\n    class sequence_sort_1 : public seq_base\n    {\n        typedef typename seq_base::type T;\n\n    public:\n\n        /*!\n            this is a median of three version of the QuickSort algorithm and\n            it sorts sequences of less than 30 elements with a selection sort\n        !*/\n\n        void sort (\n        );\n\n    private:\n\n        void sort_this_sequence (\n            seq_base& sequence\n        );\n        /*!\n            ensures\n                - each element in the sequence is < the element behind it\n        !*/\n\n        void selection_sort (\n            seq_base& sequence\n        );\n        /*!\n            ensures\n                - sequence is sorted with a selection_sort\n        !*/\n\n\n    };\n\n\n    template <\n        typename seq_base\n        >\n    inline void swap (\n        sequence_sort_1<seq_base>& a, \n        sequence_sort_1<seq_base>& b \n    ) { a.swap(b); } \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    void sequence_sort_1<seq_base>::\n    sort (\n    )\n    {\n        if (this->size() > 1)\n        {\n            sort_this_sequence(*this);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    void sequence_sort_1<seq_base>::\n    sort_this_sequence (\n        seq_base& sequence\n    )\n    {\n        if (sequence.size() < 30)\n        {\n            selection_sort(sequence);\n        }\n        else \n        {\n            seq_base left, right;\n            T partition_element;\n\n            sequence.remove(0,partition_element);\n\n            dlib::median (\n                partition_element,\n                sequence[sequence.size()-1],\n                sequence[(sequence.size()-1)/2]\n            );\n\n            // partition sequence into left and right\n            T temp;\n            while (sequence.size() > 0)\n            {\n                sequence.remove(0,temp);\n                if (temp < partition_element)\n                {\n                    left.add(0,temp);\n                }\n                else\n                {\n                    right.add(0,temp);\n                }\n            }\n\n            sort_this_sequence(left);\n            sort_this_sequence(right);\n\n            // combine left and right into sequence\n            left.swap(sequence);\n            sequence.add(sequence.size(),partition_element);\n            sequence.cat(right);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    void sequence_sort_1<seq_base>::\n    selection_sort (\n        seq_base& sequence\n    )\n    {\n        if (sequence.size() > 2)\n        {\n            T temp[29];\n            unsigned long ssize = sequence.size();\n\n            for (unsigned long i = 0; i < ssize; ++i)\n                sequence.remove(0,temp[i]);\n\n            unsigned long smallest;\n            for (unsigned long i = 0; i < ssize - 1; ++i)\n            {    \n                // find smallest element and swap into i\n                smallest = i;\n                for (unsigned long j = i+1; j < ssize; ++j)\n                {\n                    if (temp[j] < temp[smallest])\n                        smallest = j;\n                }\n                exchange(temp[smallest],temp[i]);\n            }\n\n            for (unsigned long i = 0; i < ssize; ++i)\n                sequence.add(i,temp[i]);\n        }\n        else if (sequence.size() == 2)\n        {\n            if (sequence[1] < sequence[0])\n            {\n                exchange(sequence[0],sequence[1]);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEQUENCE_SORt_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence/sequence_sort_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEQUENCE_SORt_2_\n#define DLIB_SEQUENCE_SORt_2_\n\n#include \"sequence_sort_abstract.h\"\n#include \"../algs.h\"\n#include \"../sort.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename seq_base \n        >\n    class sequence_sort_2 : public seq_base\n    {\n        typedef typename seq_base::type T;\n\n    public:\n\n        /*!\n            this is a version of the QuickSort algorithm\n            this uses the dlib::qsort_array function\n        !*/\n\n        void sort (\n        );\n\n\n    };\n\n    template <\n        typename seq_base\n        >\n    inline void swap (\n        sequence_sort_2<seq_base>& a, \n        sequence_sort_2<seq_base>& b \n    ) { a.swap(b); }    \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename seq_base\n        >\n    void sequence_sort_2<seq_base>::\n    sort (\n    )\n    {\n        if (this->size() > 1)\n        {\n            dlib::qsort_array(*this,0,this->size()-1);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEQUENCE_SORt_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence/sequence_sort_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SEQUENCE_SORt_ABSTRACT_\n#ifdef DLIB_SEQUENCE_SORt_ABSTRACT_\n\n#include \"sequence_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename seq_base\n        >\n    class sequence_sort : public seq_base\n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T must implement operator< for its type\n\n            REQUIREMENTS ON seq_base \n                must be an implementation of sequence/sequence_kernel_abstract.h\n\n\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                sort() may invalidate pointers and references to data members.\n\n            WHAT THIS EXTENSION DOES FOR sequence\n                this gives a sequence the ability to sort its contents by calling sort()\n        !*/\n\n\n    public:\n\n        void sort (\n        );\n        /*!\n            ensures\n                - for all elements in #*this the ith element is <= the i+1 element\n                - #at_start() == true\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor\n                    data may be lost if sort() throws\n        !*/\n\n\n    };\n\n\n    template <\n        typename seq_base\n        >\n    inline void swap (\n        sequence_sort<seq_base>& a, \n        sequence_sort<seq_base>& b \n    ) { a.swap(b); } \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_SEQUENCE_SORt_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sequence.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEQUENCe_\n#define DLIB_SEQUENCe_\n\n#include \"sequence/sequence_kernel_1.h\"\n#include \"sequence/sequence_kernel_2.h\"\n#include \"sequence/sequence_kernel_c.h\"\n\n#include \"sequence/sequence_compare_1.h\"\n#include \"sequence/sequence_sort_1.h\"\n#include \"sequence/sequence_sort_2.h\"\n#include \"algs.h\"\n\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager\n        >\n    class sequence\n    {\n\n        sequence() {}\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     sequence_kernel_1<T,mem_manager>    \n                    kernel_1a;\n        typedef     sequence_kernel_c<kernel_1a>\n                    kernel_1a_c;\n\n        // kernel_2a\n        typedef     sequence_kernel_2<T,mem_manager>\n                    kernel_2a;\n        typedef     sequence_kernel_c<kernel_2a>\n                    kernel_2a_c;\n\n\n        //---------- extensions ------------\n\n        // compare_1 extend kernel_1a\n        typedef     sequence_compare_1<kernel_1a >\n                    compare_1a;\n        typedef     sequence_compare_1<kernel_1a_c>\n                    compare_1a_c;\n\n        // compare_1 extend kernel_2a\n        typedef     sequence_compare_1<kernel_2a >\n                    compare_1b;\n        typedef     sequence_compare_1<kernel_2a_c>\n                    compare_1b_c;\n\n        \n\n        // sort_1 extend kernel_2a\n        typedef     sequence_sort_1<kernel_2a>\n                    sort_1a;\n        typedef     sequence_sort_1<kernel_2a_c>\n                    sort_1a_c;\n\n        // sort_2 extend kernel_1a\n        typedef     sequence_sort_2<kernel_1a>\n                    sort_2a;\n        typedef     sequence_sort_2<kernel_1a_c>\n                    sort_2a_c;\n\n\n\n\n\n\n    };\n}\n\n#endif // DLIB_SEQUENCe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/serialize.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SERIALIZe_\n#define DLIB_SERIALIZe_\n\n/*!\n    There are two global functions in the dlib namespace that provide serialization and\n    deserialization support.  Their signatures and specifications are as follows:\n        \n        void serialize (\n            const serializable_type& item,\n            std::ostream& out\n        );\n        /!*\n            ensures\n                - writes the state of item to the output stream out\n                - if (serializable_type implements the enumerable interface) then\n                    - item.at_start() == true\n            throws                    \n                - serialization_error\n                    This exception is thrown if there is some problem which prevents\n                    us from successfully writing item to the output stream.\n                - any other exception\n        *!/\n\n        void deserialize (\n            serializable_type& item,\n            std::istream& in\n        );\n        /!*\n            ensures\n                - #item == a deserialized copy of the serializable_type that was\n                  in the input stream in.\n                - Reads all the bytes associated with the serialized serializable_type\n                  contained inside the input stream and no more.  This means you\n                  can serialize multiple objects to an output stream and then read\n                  them all back in, one after another, using deserialize().\n                - if (serializable_type implements the enumerable interface) then\n                    - item.at_start() == true\n            throws                    \n                - serialization_error\n                    This exception is thrown if there is some problem which prevents\n                    us from successfully deserializing item from the input stream.\n                    If this exception is thrown then item will have an initial value \n                    for its type.\n                - any other exception\n        *!/\n\n    For convenience, you can also serialize to a file using this syntax:\n        serialize(\"your_file.dat\") << some_object << another_object;\n\n    That overwrites the contents of your_file.dat with the serialized data from some_object\n    and another_object.  Then to recall the objects from the file you can do:\n        deserialize(\"your_file.dat\") >> some_object >> another_object;\n\n    Finally, you can chain as many objects together using the << and >> operators as you\n    like.\n\n\n    This file provides serialization support to the following object types:\n        - The C++ base types (NOT including pointer types)\n        - std::string\n        - std::wstring\n        - std::vector\n        - std::map\n        - std::set\n        - std::pair\n        - std::complex\n        - dlib::uint64\n        - dlib::int64\n        - float_details\n        - enumerable<T> where T is a serializable type\n        - map_pair<D,R> where D and R are both serializable types.\n        - C style arrays of serializable types\n        - Google protocol buffer objects.\n\n    This file provides deserialization support to the following object types:\n        - The C++ base types (NOT including pointer types)\n        - std::string\n        - std::wstring\n        - std::vector\n        - std::map\n        - std::set\n        - std::pair\n        - std::complex\n        - dlib::uint64\n        - dlib::int64\n        - float_details\n        - C style arrays of serializable types\n        - Google protocol buffer objects.\n\n    Support for deserialization of objects which implement the enumerable or\n    map_pair interfaces is the responsibility of those objects.  \n    \n    Note that you can deserialize an integer value to any integral type (except for a \n    char type) if its value will fit into the target integer type.  I.e.  the types \n    short, int, long, unsigned short, unsigned int, unsigned long, and dlib::uint64 \n    can all receive serialized data from each other so long as the actual serizlied \n    value fits within the receiving integral type's range.\n\n    Also note that for any container to be serializable the type of object it contains \n    must be serializable.\n\n    FILE STREAMS\n        If you are serializing to and from file streams it is important to \n        remember to set the file streams to binary mode using the std::ios::binary\n        flag.  \n\n\n    INTEGRAL SERIALIZATION FORMAT\n        All C++ integral types (except the char types) are serialized to the following\n        format:\n        The first byte is a control byte.  It tells you if the serialized number is \n        positive or negative and also tells you how many of the following bytes are \n        part of the number.  The absolute value of the number is stored in little \n        endian byte order and follows the control byte.\n\n        The control byte:  \n            The high order bit of the control byte is a flag that tells you if the\n            encoded number is negative or not.  It is set to 1 when the number is\n            negative and 0 otherwise.\n            The 4 low order bits of the control byte represent an unsigned number\n            and tells you how many of the following bytes are part of the encoded\n            number.\n\n    bool SERIALIZATION FORMAT\n        A bool value is serialized as the single byte character '1' or '0' in ASCII.\n        Where '1' indicates true and '0' indicates false.\n\n    FLOATING POINT SERIALIZATION FORMAT\n        To serialize a floating point value we convert it into a float_details object and\n        then serialize the exponent and mantissa values using dlib's integral serialization\n        format.  Therefore, the output is first the exponent and then the mantissa.  Note that\n        the mantissa is a signed integer (i.e. there is not a separate sign bit).\n!*/\n\n\n#include \"algs.h\"\n#include \"assert.h\"\n#include <iomanip>\n#include <cstddef>\n#include <iostream>\n#include <fstream>\n#include <string>\n#include <vector>\n#include <complex>\n#include <map>\n#include <set>\n#include <limits>\n#include \"uintn.h\"\n#include \"interfaces/enumerable.h\"\n#include \"interfaces/map_pair.h\"\n#include \"enable_if.h\"\n#include \"unicode.h\"\n#include \"unicode.h\"\n#include \"byte_orderer.h\"\n#include \"float_details.h\"\n#include \"smart_pointers/shared_ptr.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class serialization_error : public error \n    {\n    public: \n        serialization_error(const std::string& e):error(e) {}\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    namespace ser_helper\n    {\n\n        template <\n            typename T\n            >\n        typename enable_if_c<std::numeric_limits<T>::is_signed,bool>::type pack_int (\n            T item,\n            std::ostream& out\n        )\n        /*!\n            requires\n                - T is a signed integral type\n            ensures\n                - if (no problems occur serializing item) then\n                    - writes item to out\n                    - returns false\n                - else\n                    - returns true\n        !*/\n        {\n            COMPILE_TIME_ASSERT(sizeof(T) <= 8);\n            unsigned char buf[9];\n            unsigned char size = sizeof(T);\n            unsigned char neg;\n            if (item < 0)\n            {\n                neg = 0x80;\n                item *= -1;\n            }\n            else\n            {\n                neg = 0;\n            }\n\n            for (unsigned char i = 1; i <= sizeof(T); ++i)\n            {\n                buf[i] = static_cast<unsigned char>(item&0xFF);                \n                item >>= 8;\n                if (item == 0) { size = i; break; }\n            }\n\n            std::streambuf* sbuf = out.rdbuf();\n            buf[0] = size|neg;\n            if (sbuf->sputn(reinterpret_cast<char*>(buf),size+1) != size+1)\n            {\n                out.setstate(std::ios::eofbit | std::ios::badbit);\n                return true;\n            }\n\n            return false;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        typename enable_if_c<std::numeric_limits<T>::is_signed,bool>::type unpack_int (\n            T& item,\n            std::istream& in\n        )\n        /*!\n            requires\n                - T is a signed integral type\n            ensures\n                - if (there are no problems deserializing item) then\n                    - returns false\n                    - #item == the value stored in in\n                - else\n                    - returns true\n\n        !*/\n        {\n            COMPILE_TIME_ASSERT(sizeof(T) <= 8);\n\n\n            unsigned char buf[8];\n            unsigned char size;\n            bool is_negative;\n\n            std::streambuf* sbuf = in.rdbuf();\n\n            item = 0;\n            int ch = sbuf->sbumpc();\n            if (ch != EOF)\n            {\n                size = static_cast<unsigned char>(ch);\n            }\n            else\n            {\n                in.setstate(std::ios::badbit);\n                return true;\n            }\n\n            if (size&0x80)\n                is_negative = true;\n            else\n                is_negative = false;\n            size &= 0x0F;\n            \n            // check if the serialized object is too big\n            if (size > sizeof(T))\n            {\n                return true;\n            }\n\n            if (sbuf->sgetn(reinterpret_cast<char*>(&buf),size) != size)\n            {\n                in.setstate(std::ios::badbit);\n                return true;\n            }\n\n\n            for (unsigned char i = size-1; true; --i)\n            {\n                item <<= 8;\n                item |= buf[i];\n                if (i == 0)\n                    break;\n            }\n\n            if (is_negative)\n                item *= -1;\n        \n\n            return false;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        typename disable_if_c<std::numeric_limits<T>::is_signed,bool>::type pack_int (\n            T item,\n            std::ostream& out\n        )\n        /*!\n            requires\n                - T is an unsigned integral type\n            ensures\n                - if (no problems occur serializing item) then\n                    - writes item to out\n                    - returns false\n                - else\n                    - returns true\n        !*/\n        {\n            COMPILE_TIME_ASSERT(sizeof(T) <= 8);\n            unsigned char buf[9];\n            unsigned char size = sizeof(T);\n\n            for (unsigned char i = 1; i <= sizeof(T); ++i)\n            {\n                buf[i] = static_cast<unsigned char>(item&0xFF);                \n                item >>= 8;\n                if (item == 0) { size = i; break; }\n            }\n\n            std::streambuf* sbuf = out.rdbuf();\n            buf[0] = size;\n            if (sbuf->sputn(reinterpret_cast<char*>(buf),size+1) != size+1)\n            {\n                out.setstate(std::ios::eofbit | std::ios::badbit);\n                return true;\n            }\n\n            return false;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename T\n            >\n        typename disable_if_c<std::numeric_limits<T>::is_signed,bool>::type unpack_int (\n            T& item,\n            std::istream& in\n        )\n        /*!\n            requires\n                - T is an unsigned integral type\n            ensures\n                - if (there are no problems deserializing item) then\n                    - returns false\n                    - #item == the value stored in in\n                - else\n                    - returns true\n\n        !*/\n        {\n            COMPILE_TIME_ASSERT(sizeof(T) <= 8);\n\n            unsigned char buf[8];\n            unsigned char size;\n\n            item = 0;\n\n            std::streambuf* sbuf = in.rdbuf();\n            int ch = sbuf->sbumpc();\n            if (ch != EOF)\n            {\n                size = static_cast<unsigned char>(ch);\n            }\n            else\n            {\n                in.setstate(std::ios::badbit);\n                return true;\n            }\n\n\n            // mask out the 3 reserved bits\n            size &= 0x8F;\n\n            // check if an error occurred \n            if (size > sizeof(T)) \n                return true;\n           \n\n            if (sbuf->sgetn(reinterpret_cast<char*>(&buf),size) != size)\n            {\n                in.setstate(std::ios::badbit);\n                return true;\n            }\n\n            for (unsigned char i = size-1; true; --i)\n            {\n                item <<= 8;\n                item |= buf[i];\n                if (i == 0)\n                    break;\n            }\n\n            return false;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    #define USE_DEFAULT_INT_SERIALIZATION_FOR(T)  \\\n        inline void serialize (const T& item, std::ostream& out) \\\n        { if (ser_helper::pack_int(item,out)) throw serialization_error(\"Error serializing object of type \" + std::string(#T)); }   \\\n        inline void deserialize (T& item, std::istream& in) \\\n        { if (ser_helper::unpack_int(item,in)) throw serialization_error(\"Error deserializing object of type \" + std::string(#T)); }   \n\n    template <typename T>\n    inline bool pack_byte (\n        const T& ch,\n        std::ostream& out\n    )\n    {\n        std::streambuf* sbuf = out.rdbuf();\n        return (sbuf->sputc((char)ch) == EOF);\n    }\n\n    template <typename T>\n    inline bool unpack_byte (\n        T& ch,\n        std::istream& in\n    )\n    {\n        std::streambuf* sbuf = in.rdbuf();\n        int temp = sbuf->sbumpc();\n        if (temp != EOF)\n        {\n            ch = static_cast<T>(temp);\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    }\n\n    #define USE_DEFAULT_BYTE_SERIALIZATION_FOR(T)  \\\n        inline void serialize (const T& item,std::ostream& out) \\\n        { if (pack_byte(item,out)) throw serialization_error(\"Error serializing object of type \" + std::string(#T)); } \\\n        inline void deserialize (T& item, std::istream& in) \\\n        { if (unpack_byte(item,in)) throw serialization_error(\"Error deserializing object of type \" + std::string(#T)); }   \n\n// ----------------------------------------------------------------------------------------\n\n    USE_DEFAULT_INT_SERIALIZATION_FOR(short)\n    USE_DEFAULT_INT_SERIALIZATION_FOR(int)\n    USE_DEFAULT_INT_SERIALIZATION_FOR(long)\n    USE_DEFAULT_INT_SERIALIZATION_FOR(unsigned short)\n    USE_DEFAULT_INT_SERIALIZATION_FOR(unsigned int)\n    USE_DEFAULT_INT_SERIALIZATION_FOR(unsigned long)\n    USE_DEFAULT_INT_SERIALIZATION_FOR(uint64)\n    USE_DEFAULT_INT_SERIALIZATION_FOR(int64)\n\n    USE_DEFAULT_BYTE_SERIALIZATION_FOR(char)\n    USE_DEFAULT_BYTE_SERIALIZATION_FOR(signed char)\n    USE_DEFAULT_BYTE_SERIALIZATION_FOR(unsigned char)\n\n    // Don't define serialization for wchar_t when using visual studio and\n    // _NATIVE_WCHAR_T_DEFINED isn't defined since if it isn't they improperly set\n    // wchar_t to be a typedef rather than its own type as required by the C++ \n    // standard.\n#if !defined(_MSC_VER) || _NATIVE_WCHAR_T_DEFINED\n    USE_DEFAULT_INT_SERIALIZATION_FOR(wchar_t)\n#endif\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize(\n        const float_details& item,\n        std::ostream& out\n    )\n    {\n        serialize(item.mantissa, out);\n        serialize(item.exponent, out);\n    }\n\n    inline void deserialize(\n        float_details& item,\n        std::istream& in \n    )\n    {\n        deserialize(item.mantissa, in);\n        deserialize(item.exponent, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    inline void serialize_floating_point (\n        const T& item,\n        std::ostream& out\n    )\n    { \n        try\n        {\n            float_details temp = item;\n            serialize(temp, out);\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing a floating point number.\"); }\n    }\n\n    template <typename T>\n    inline bool old_deserialize_floating_point (\n        T& item,\n        std::istream& in \n    )\n    {\n        std::ios::fmtflags oldflags = in.flags();  \n        in.flags(); \n        std::streamsize ss = in.precision(35); \n        if (in.peek() == 'i')\n        {\n            item = std::numeric_limits<T>::infinity();\n            in.get();\n            in.get();\n            in.get();\n        }\n        else if (in.peek() == 'n')\n        {\n            item = -std::numeric_limits<T>::infinity();\n            in.get();\n            in.get();\n            in.get();\n            in.get();\n        }\n        else if (in.peek() == 'N')\n        {\n            item = std::numeric_limits<T>::quiet_NaN();\n            in.get();\n            in.get();\n            in.get();\n        }\n        else\n        {\n            in >> item; \n        }\n        in.flags(oldflags); \n        in.precision(ss); \n        return (in.get() != ' ');\n    }\n\n    template <typename T>\n    inline void deserialize_floating_point (\n        T& item,\n        std::istream& in \n    )\n    {\n        // check if the serialized data uses the older ASCII based format.  We can check\n        // this easily because the new format starts with the integer control byte which\n        // always has 0 bits in the positions corresponding to the bitmask 0x70.  Moreover,\n        // since the previous format used ASCII numbers we know that no valid bytes can\n        // have bit values of one in the positions indicated 0x70.  So this test looks at\n        // the first byte and checks if the serialized data uses the old format or the new\n        // format.\n        if ((in.rdbuf()->sgetc()&0x70) == 0)\n        {\n            try\n            {\n                // Use the fast and compact binary serialization format.\n                float_details temp;\n                deserialize(temp, in);\n                item = temp;\n            }\n            catch (serialization_error& e)\n            { throw serialization_error(e.info + \"\\n   while deserializing a floating point number.\"); }\n        }\n        else\n        {\n            if (old_deserialize_floating_point(item, in))\n                throw serialization_error(\"Error deserializing a floating point number.\");\n        }\n    }\n\n    inline void serialize ( const float& item, std::ostream& out) \n    { \n        serialize_floating_point(item,out);\n    }\n\n    inline void deserialize (float& item, std::istream& in) \n    { \n        deserialize_floating_point(item,in);\n    }\n\n    inline void serialize ( const double& item, std::ostream& out) \n    { \n        serialize_floating_point(item,out);\n    }\n\n    inline void deserialize (double& item, std::istream& in) \n    { \n        deserialize_floating_point(item,in);\n    }\n\n    inline void serialize ( const long double& item, std::ostream& out) \n    { \n        serialize_floating_point(item,out);\n    }\n\n    inline void deserialize ( long double& item, std::istream& in) \n    { \n        deserialize_floating_point(item,in);\n    }\n\n// ----------------------------------------------------------------------------------------\n// prototypes\n\n    template <typename domain, typename range, typename compare, typename alloc>\n    void serialize (\n        const std::map<domain,range, compare, alloc>& item,\n        std::ostream& out\n    );\n\n    template <typename domain, typename range, typename compare, typename alloc>\n    void deserialize (\n        std::map<domain, range, compare, alloc>& item,\n        std::istream& in\n    );\n\n    template <typename domain, typename compare, typename alloc>\n    void serialize (\n        const std::set<domain, compare, alloc>& item,\n        std::ostream& out\n    );\n\n    template <typename domain, typename compare, typename alloc>\n    void deserialize (\n        std::set<domain, compare, alloc>& item,\n        std::istream& in\n    );\n\n    template <typename T, typename alloc>\n    void serialize (\n        const std::vector<T,alloc>& item,\n        std::ostream& out\n    );\n\n    template <typename T, typename alloc>\n    void deserialize (\n        std::vector<T,alloc>& item,\n        std::istream& in\n    );\n\n    inline void serialize (\n        const std::string& item,\n        std::ostream& out\n    );\n\n    inline void deserialize (\n        std::string& item,\n        std::istream& in\n    );\n\n    inline void serialize (\n        const std::wstring& item,\n        std::ostream& out\n    );\n\n    inline void deserialize (\n        std::wstring& item,\n        std::istream& in\n    );\n\n    inline void serialize (\n        const ustring& item,\n        std::ostream& out\n    );\n\n    inline void deserialize (\n        ustring& item,\n        std::istream& in\n    );\n\n    template <\n        typename T\n        >\n    inline void serialize (\n        const enumerable<T>& item,\n        std::ostream& out\n    );\n\n    template <\n        typename domain,\n        typename range\n        >\n    inline void serialize (\n        const map_pair<domain,range>& item,\n        std::ostream& out\n    );\n\n    template <\n        typename T,\n        size_t length\n        >\n    inline void serialize (\n        const T (&array)[length],\n        std::ostream& out\n    );\n\n    template <\n        typename T,\n        size_t length\n        >\n    inline void deserialize (\n        T (&array)[length],\n        std::istream& in\n    );\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        bool item,\n        std::ostream& out\n    )\n    {\n        if (item)\n            out << '1';\n        else\n            out << '0';\n\n        if (!out) \n            throw serialization_error(\"Error serializing object of type bool\");    \n    }\n\n    inline void deserialize (\n        bool& item,\n        std::istream& in\n    )\n    {\n        int ch = in.get();\n        if (ch != EOF)\n        {\n            if (ch == '1')\n                item = true;\n            else if (ch == '0')\n                item = false;\n            else\n                throw serialization_error(\"Error deserializing object of type bool\");    \n        }\n        else\n        {\n            throw serialization_error(\"Error deserializing object of type bool\");    \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename first_type, typename second_type>\n    void serialize (\n        const std::pair<first_type, second_type>& item,\n        std::ostream& out\n    )\n    {\n        try\n        { \n            serialize(item.first,out); \n            serialize(item.second,out); \n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type std::pair\"); }\n    }\n\n    template <typename first_type, typename second_type>\n    void deserialize (\n        std::pair<first_type, second_type>& item,\n        std::istream& in \n    )\n    {\n        try\n        { \n            deserialize(item.first,in); \n            deserialize(item.second,in); \n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type std::pair\"); }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename domain, typename range, typename compare, typename alloc>\n    void serialize (\n        const std::map<domain,range, compare, alloc>& item,\n        std::ostream& out\n    )\n    {\n        try\n        { \n            const unsigned long size = static_cast<unsigned long>(item.size());\n\n            serialize(size,out); \n            typename std::map<domain,range,compare,alloc>::const_iterator i;\n            for (i = item.begin(); i != item.end(); ++i)\n            {\n                serialize(i->first,out);\n                serialize(i->second,out);\n            }\n\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type std::map\"); }\n    }\n\n    template <typename domain, typename range, typename compare, typename alloc>\n    void deserialize (\n        std::map<domain, range, compare, alloc>& item,\n        std::istream& in\n    )\n    {\n        try \n        { \n            item.clear();\n\n            unsigned long size;\n            deserialize(size,in); \n            domain d;\n            range r;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(d,in);\n                deserialize(r,in);\n                item[d] = r;\n            }\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type std::map\"); }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename domain, typename compare, typename alloc>\n    void serialize (\n        const std::set<domain, compare, alloc>& item,\n        std::ostream& out\n    )\n    {\n        try\n        { \n            const unsigned long size = static_cast<unsigned long>(item.size());\n\n            serialize(size,out); \n            typename std::set<domain,compare,alloc>::const_iterator i;\n            for (i = item.begin(); i != item.end(); ++i)\n            {\n                serialize(*i,out);\n            }\n\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type std::set\"); }\n    }\n\n    template <typename domain, typename compare, typename alloc>\n    void deserialize (\n        std::set<domain, compare, alloc>& item,\n        std::istream& in\n    )\n    {\n        try \n        { \n            item.clear();\n\n            unsigned long size;\n            deserialize(size,in); \n            domain d;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(d,in);\n                item.insert(d);\n            }\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type std::set\"); }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename alloc>\n    void serialize (\n        const std::vector<bool,alloc>& item,\n        std::ostream& out\n    )\n    {\n        std::vector<unsigned char> temp(item.size());\n        for (unsigned long i = 0; i < item.size(); ++i)\n        {\n            if (item[i])\n                temp[i] = '1';\n            else\n                temp[i] = '0';\n        }\n        serialize(temp, out);\n    }\n\n    template <typename alloc>\n    void deserialize (\n        std::vector<bool,alloc>& item,\n        std::istream& in \n    )\n    {\n        std::vector<unsigned char> temp;\n        deserialize(temp, in);\n        item.resize(temp.size());\n        for (unsigned long i = 0; i < temp.size(); ++i)\n        {\n            if (temp[i] == '1')\n                item[i] = true;\n            else\n                item[i] = false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    void serialize (\n        const std::vector<T,alloc>& item,\n        std::ostream& out\n    )\n    {\n        try\n        { \n            const unsigned long size = static_cast<unsigned long>(item.size());\n\n            serialize(size,out); \n            for (unsigned long i = 0; i < item.size(); ++i)\n                serialize(item[i],out);\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type std::vector\"); }\n    }\n\n    template <typename T, typename alloc>\n    void deserialize (\n        std::vector<T, alloc>& item,\n        std::istream& in\n    )\n    {\n        try \n        { \n            unsigned long size;\n            deserialize(size,in); \n            item.resize(size);\n            for (unsigned long i = 0; i < size; ++i)\n                deserialize(item[i],in);\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type std::vector\"); }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename alloc>\n    void serialize (\n        const std::vector<char,alloc>& item,\n        std::ostream& out\n    )\n    {\n        try\n        { \n            const unsigned long size = static_cast<unsigned long>(item.size());\n            serialize(size,out); \n            if (item.size() != 0)\n                out.write(&item[0], item.size());\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type std::vector\"); }\n    }\n\n    template <typename alloc>\n    void deserialize (\n        std::vector<char, alloc>& item,\n        std::istream& in\n    )\n    {\n        try \n        { \n            unsigned long size;\n            deserialize(size,in); \n            item.resize(size);\n            if (item.size() != 0)\n                in.read(&item[0], item.size());\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type std::vector\"); }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename alloc>\n    void serialize (\n        const std::vector<unsigned char,alloc>& item,\n        std::ostream& out\n    )\n    {\n        try\n        { \n            const unsigned long size = static_cast<unsigned long>(item.size());\n            serialize(size,out); \n            if (item.size() != 0)\n                out.write((char*)&item[0], item.size());\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type std::vector\"); }\n    }\n\n    template <typename alloc>\n    void deserialize (\n        std::vector<unsigned char, alloc>& item,\n        std::istream& in\n    )\n    {\n        try \n        { \n            unsigned long size;\n            deserialize(size,in); \n            item.resize(size);\n            if (item.size() != 0)\n                in.read((char*)&item[0], item.size());\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type std::vector\"); }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const std::string& item,\n        std::ostream& out\n    )\n    {\n        const unsigned long size = static_cast<unsigned long>(item.size());\n        try{ serialize(size,out); }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type std::string\"); }\n\n        out.write(item.c_str(),size);\n        if (!out) throw serialization_error(\"Error serializing object of type std::string\");\n    }\n\n    inline void deserialize (\n        std::string& item,\n        std::istream& in\n    )\n    {\n        unsigned long size;\n        try { deserialize(size,in); }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type std::string\"); }\n\n        item.resize(size);\n        if (size != 0)\n        {\n            in.read(&item[0],size);\n            if (!in) throw serialization_error(\"Error deserializing object of type std::string\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const std::wstring& item,\n        std::ostream& out\n    )\n    {\n        const unsigned long size = static_cast<unsigned long>(item.size());\n        try{ serialize(size,out); }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type std::wstring\"); }\n\n        for (unsigned long i = 0; i < item.size(); ++i)\n            serialize(item[i], out);\n        if (!out) throw serialization_error(\"Error serializing object of type std::wstring\");\n    }\n\n    inline void deserialize (\n        std::wstring& item,\n        std::istream& in\n    )\n    {\n        unsigned long size;\n        try { deserialize(size,in); }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type std::wstring\"); }\n\n        item.resize(size);\n        for (unsigned long i = 0; i < item.size(); ++i)\n            deserialize(item[i],in);\n\n        if (!in) throw serialization_error(\"Error deserializing object of type std::wstring\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void serialize (\n        const ustring& item,\n        std::ostream& out\n    )\n    {\n        const unsigned long size = static_cast<unsigned long>(item.size());\n        try{ serialize(size,out); }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type ustring\"); }\n\n        for (unsigned long i = 0; i < item.size(); ++i)\n            serialize(item[i], out);\n        if (!out) throw serialization_error(\"Error serializing object of type ustring\");\n    }\n\n    inline void deserialize (\n        ustring& item,\n        std::istream& in\n    )\n    {\n        unsigned long size;\n        try { deserialize(size,in); }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type ustring\"); }\n\n        item.resize(size);\n        for (unsigned long i = 0; i < item.size(); ++i)\n            deserialize(item[i],in);\n\n        if (!in) throw serialization_error(\"Error deserializing object of type ustring\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    inline void serialize (\n        const enumerable<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            item.reset();\n            serialize(item.size(),out);\n            while (item.move_next())\n                serialize(item.element(),out);\n            item.reset();\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing object of type enumerable\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range\n        >\n    inline void serialize (\n        const map_pair<domain,range>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.key(),out);\n            serialize(item.value(),out);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing object of type map_pair\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        size_t length\n        >\n    inline void serialize (\n        const T (&array)[length],\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(length,out);\n            for (size_t i = 0; i < length; ++i)\n                serialize(array[i],out);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing a C style array\");\n        }\n    }\n\n    template <\n        size_t length\n        >\n    inline void serialize (\n        const char (&array)[length],\n        std::ostream& out\n    )\n    {\n        if (length != 0 && array[length-1] == '\\0')\n        {\n            // If this is a null terminated string then don't serialize the trailing null.\n            // We do this so that the serialization format for C-strings is the same as\n            // std::string.\n            serialize(length-1, out);\n            out.write(array, length-1);\n            if (!out)\n                throw serialization_error(\"Error serializing a C-style string\");\n        }\n        else \n        {\n            try\n            {\n                serialize(length,out);\n            }\n            catch (serialization_error& e)\n            {\n                throw serialization_error(e.info + \"\\n   while serializing a C style array\");\n            }\n            if (length != 0)\n                out.write(array, length);\n            if (!out)\n                throw serialization_error(\"Error serializing a C-style string\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        size_t length\n        >\n    inline void deserialize (\n        T (&array)[length],\n        std::istream& in\n    )\n    {\n        size_t size;\n        try\n        {\n            deserialize(size,in); \n            if (size == length)\n            {\n                for (size_t i = 0; i < length; ++i)\n                    deserialize(array[i],in);            \n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing a C style array\");\n        }\n\n        if (size != length)\n            throw serialization_error(\"Error deserializing a C style array, lengths do not match\");\n    }\n\n    template <\n        size_t length\n        >\n    inline void deserialize (\n        char (&array)[length],\n        std::istream& in\n    )\n    {\n        size_t size;\n        try\n        {\n            deserialize(size,in); \n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing a C style array\");\n        }\n\n        if (size == length)\n        {\n            in.read(array, size);\n            if (!in)\n                throw serialization_error(\"Error deserializing a C-style array\");\n        }\n        else if (size+1 == length)\n        {\n            // In this case we are deserializing a C-style array so we need to add the null\n            // terminator.\n            in.read(array, size);\n            array[size] = '\\0';\n            if (!in)\n                throw serialization_error(\"Error deserializing a C-style string\");\n        }\n        else\n        {\n            throw serialization_error(\"Error deserializing a C style array, lengths do not match\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    inline void serialize (\n        const std::complex<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.real(),out);\n            serialize(item.imag(),out);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing an object of type std::complex\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    inline void deserialize (\n        std::complex<T>& item,\n        std::istream& in\n    )\n    {\n        try\n        {\n            T real, imag;\n            deserialize(real,in); \n            deserialize(imag,in); \n            item = std::complex<T>(real,imag);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing an object of type std::complex\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class proxy_serialize \n    {\n    public:\n        explicit proxy_serialize (\n            const std::string& filename\n        ) \n        {\n            fout.reset(new std::ofstream(filename.c_str(), std::ios::binary));\n            if (!(*fout))\n                throw serialization_error(\"Unable to open \" + filename + \" for writing.\");\n        }\n\n        template <typename T>\n        inline proxy_serialize& operator<<(const T& item)\n        {\n            serialize(item, *fout);\n            return *this;\n        }\n\n    private:\n        shared_ptr<std::ofstream> fout;\n    };\n\n    class proxy_deserialize \n    {\n    public:\n        explicit proxy_deserialize (\n            const std::string& filename\n        ) \n        {\n            fin.reset(new std::ifstream(filename.c_str(), std::ios::binary));\n            if (!(*fin))\n                throw serialization_error(\"Unable to open \" + filename + \" for reading.\");\n        }\n\n        template <typename T>\n        inline proxy_deserialize& operator>>(T& item)\n        {\n            deserialize(item, *fin);\n            return *this;\n        }\n\n    private:\n        shared_ptr<std::ifstream> fin;\n    };\n\n    inline proxy_serialize serialize(const std::string& filename)\n    { return proxy_serialize(filename); }\n    inline proxy_deserialize deserialize(const std::string& filename)\n    { return proxy_deserialize(filename); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n// forward declare the MessageLite object so we can reference it below.\nnamespace google\n{\n    namespace protobuf\n    {\n        class MessageLite;\n    }\n}\n\nnamespace dlib\n{\n\n    /*!A is_protocol_buffer\n        This is a template that tells you if a type is a Google protocol buffer object.  \n    !*/\n\n    template <typename T, typename U = void > \n    struct is_protocol_buffer \n    {\n        static const bool value = false;\n    };\n\n    template <typename T>\n    struct is_protocol_buffer <T,typename enable_if<is_convertible<T*,::google::protobuf::MessageLite*> >::type  >\n    {\n        static const bool value = true;\n    };\n\n    template <typename T>\n    typename enable_if<is_protocol_buffer<T> >::type serialize(const T& item, std::ostream& out)\n    {\n        // Note that Google protocol buffer messages are not self delimiting \n        // (see https://developers.google.com/protocol-buffers/docs/techniques)\n        // This means they don't record their length or where they end, so we have \n        // to record this information ourselves.  So we save the size as a little endian 32bit \n        // integer prefixed onto the front of the message.\n\n        byte_orderer bo;\n\n        // serialize into temp string\n        std::string temp;\n        if (!item.SerializeToString(&temp))\n            throw dlib::serialization_error(\"Error while serializing a Google Protocol Buffer object.\");\n        if (temp.size() > std::numeric_limits<uint32>::max())\n            throw dlib::serialization_error(\"Error while serializing a Google Protocol Buffer object, message too large.\");\n\n        // write temp to the output stream\n        uint32 size = temp.size();\n        bo.host_to_little(size);\n        out.write((char*)&size, sizeof(size));\n        out.write(temp.c_str(), temp.size());\n    }\n\n    template <typename T>\n    typename enable_if<is_protocol_buffer<T> >::type deserialize(T& item, std::istream& in)\n    {\n        // Note that Google protocol buffer messages are not self delimiting \n        // (see https://developers.google.com/protocol-buffers/docs/techniques)\n        // This means they don't record their length or where they end, so we have \n        // to record this information ourselves.  So we save the size as a little endian 32bit \n        // integer prefixed onto the front of the message.\n\n        byte_orderer bo;\n\n        uint32 size = 0;\n        // read the size\n        in.read((char*)&size, sizeof(size));\n        bo.little_to_host(size);\n        if (!in || size == 0)\n            throw dlib::serialization_error(\"Error while deserializing a Google Protocol Buffer object.\");\n\n        // read the bytes into temp\n        std::string temp;\n        temp.resize(size);\n        in.read(&temp[0], size);\n\n        // parse temp into item\n        if (!in || !item.ParseFromString(temp))\n        {\n            throw dlib::serialization_error(\"Error while deserializing a Google Protocol Buffer object.\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SERIALIZe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server/server_http.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SERVER_HTTP_CPp_\n#define DLIB_SERVER_HTTP_CPp_\n\n#include \"server_http.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace http_impl\n    {\n        inline unsigned char to_hex( unsigned char x )  \n        {\n            return x + (x > 9 ? ('A'-10) : '0');\n        }\n\n        const std::string urlencode( const std::string& s )  \n        {\n            std::ostringstream os;\n\n            for ( std::string::const_iterator ci = s.begin(); ci != s.end(); ++ci )\n            {\n                if ( (*ci >= 'a' && *ci <= 'z') ||\n                     (*ci >= 'A' && *ci <= 'Z') ||\n                     (*ci >= '0' && *ci <= '9') )\n                { // allowed\n                    os << *ci;\n                }\n                else if ( *ci == ' ')\n                {\n                    os << '+';\n                }\n                else\n                {\n                    os << '%' << to_hex(*ci >> 4) << to_hex(*ci % 16);\n                }\n            }\n\n            return os.str();\n        }\n\n        inline unsigned char from_hex (\n            unsigned char ch\n        ) \n        {\n            if (ch <= '9' && ch >= '0')\n                ch -= '0';\n            else if (ch <= 'f' && ch >= 'a')\n                ch -= 'a' - 10;\n            else if (ch <= 'F' && ch >= 'A')\n                ch -= 'A' - 10;\n            else \n                ch = 0;\n            return ch;\n        }\n\n        const std::string urldecode (\n            const std::string& str\n        ) \n        {\n            using namespace std;\n            string result;\n            string::size_type i;\n            for (i = 0; i < str.size(); ++i)\n            {\n                if (str[i] == '+')\n                {\n                    result += ' ';\n                }\n                else if (str[i] == '%' && str.size() > i+2)\n                {\n                    const unsigned char ch1 = from_hex(str[i+1]);\n                    const unsigned char ch2 = from_hex(str[i+2]);\n                    const unsigned char ch = (ch1 << 4) | ch2;\n                    result += ch;\n                    i += 2;\n                }\n                else\n                {\n                    result += str[i];\n                }\n            }\n            return result;\n        }\n\n        void parse_url(\n            std::string word, \n            key_value_map& queries\n        )\n        /*!\n            Parses the query string of a URL.  word should be the stuff that comes\n            after the ? in the query URL.\n        !*/\n        {\n            std::string::size_type pos;\n\n            for (pos = 0; pos < word.size(); ++pos)\n            {\n                if (word[pos] == '&')\n                    word[pos] = ' ';\n            }\n\n            std::istringstream sin(word);\n            sin >> word;\n            while (sin)\n            {\n                pos = word.find_first_of(\"=\");\n                if (pos != std::string::npos)\n                {\n                    std::string key = urldecode(word.substr(0,pos));\n                    std::string value = urldecode(word.substr(pos+1));\n\n                    queries[key] = value;\n                }\n                sin >> word;\n            }\n        }\n      \n        void read_with_limit(\n            std::istream& in, \n            std::string& buffer, \n            int delim = '\\n'\n        ) \n        {\n            using namespace std;\n            const size_t max = 64*1024;\n            buffer.clear();\n            buffer.reserve(300);\n\n            while (in.peek() != delim && in.peek() != '\\n' && in.peek() != EOF && buffer.size() < max)\n            {\n                buffer += (char)in.get();\n            }\n\n            // if we quit the loop because the data is longer than expected or we hit EOF\n            if (in.peek() == EOF)\n                throw http_parse_error(\"HTTP field from client terminated incorrectly\", 414);\n            if (buffer.size() == max)\n                throw http_parse_error(\"HTTP field from client is too long\", 414);\n\n            in.get();\n            // eat any remaining whitespace\n            if (delim == ' ')\n            {\n                while (in.peek() == ' ')\n                    in.get();\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long parse_http_request ( \n        std::istream& in,\n        incoming_things& incoming,\n        unsigned long max_content_length\n    )\n    {\n        using namespace std;\n        using namespace http_impl;\n        read_with_limit(in, incoming.request_type, ' ');\n\n        // get the path\n        read_with_limit(in, incoming.path, ' ');\n\n        // Get the HTTP/1.1 - Ignore for now...\n        read_with_limit(in, incoming.protocol);\n\n        key_value_map_ci& incoming_headers = incoming.headers;\n        key_value_map& cookies          = incoming.cookies;\n        std::string& path               = incoming.path;\n        std::string& content_type       = incoming.content_type;\n        unsigned long content_length = 0;\n\n        string line;\n        read_with_limit(in, line);\n        string first_part_of_header;\n        string::size_type position_of_double_point;\n        // now loop over all the incoming_headers\n        while (line != \"\\r\")\n        {\n            position_of_double_point = line.find_first_of(':');\n            if ( position_of_double_point != string::npos )\n            {\n                first_part_of_header = dlib::trim(line.substr(0, position_of_double_point));\n\n                if ( !incoming_headers[first_part_of_header].empty() )\n                    incoming_headers[ first_part_of_header ] += \" \";\n                incoming_headers[first_part_of_header] += dlib::trim(line.substr(position_of_double_point+1));\n\n                // look for Content-Type:\n                if (line.size() > 14 && strings_equal_ignore_case(line, \"Content-Type:\", 13))\n                {\n                    content_type = line.substr(14);\n                    if (content_type[content_type.size()-1] == '\\r')\n                        content_type.erase(content_type.size()-1);\n                }\n                // look for Content-Length:\n                else if (line.size() > 16 && strings_equal_ignore_case(line, \"Content-Length:\", 15))\n                {\n                    istringstream sin(line.substr(16));\n                    sin >> content_length;\n                    if (!sin)\n                    {\n                        throw http_parse_error(\"Invalid Content-Length of '\" + line.substr(16) + \"'\", 411);\n                    }\n\n                    if (content_length > max_content_length)\n                    {\n                        std::ostringstream sout;\n                        sout << \"Content-Length of post back is too large.  It must be less than \" << max_content_length;\n                        throw http_parse_error(sout.str(), 413);\n                    }\n                }\n                // look for any cookies\n                else if (line.size() > 6 && strings_equal_ignore_case(line, \"Cookie:\", 7))\n                {\n                    string::size_type pos = 6;\n                    string key, value;\n                    bool seen_key_start = false;\n                    bool seen_equal_sign = false;\n                    while (pos + 1 < line.size())\n                    {\n                        ++pos;\n                        // ignore whitespace between cookies\n                        if (!seen_key_start && line[pos] == ' ')\n                            continue;\n\n                        seen_key_start = true;\n                        if (!seen_equal_sign) \n                        {\n                            if (line[pos] == '=')\n                            {\n                                seen_equal_sign = true;\n                            }\n                            else\n                            {\n                                key += line[pos];\n                            }\n                        }\n                        else\n                        {\n                            if (line[pos] == ';')\n                            {\n                                cookies[urldecode(key)] = urldecode(value);\n                                seen_equal_sign = false;\n                                seen_key_start = false;\n                                key.clear();\n                                value.clear();\n                            }\n                            else\n                            {\n                                value += line[pos];\n                            }\n                        }\n                    }\n                    if (key.size() > 0)\n                    {\n                        cookies[urldecode(key)] = urldecode(value);\n                        key.clear();\n                        value.clear();\n                    }\n                }\n            } // no ':' in it!\n            read_with_limit(in, line);\n        } // while (line != \"\\r\")\n\n\n        // If there is data being posted back to us as a query string then\n        // pick out the queries using parse_url.\n        if ((strings_equal_ignore_case(incoming.request_type, \"POST\") || \n             strings_equal_ignore_case(incoming.request_type, \"PUT\")) && \n            strings_equal_ignore_case(left_substr(content_type,\";\"), \"application/x-www-form-urlencoded\"))\n        {\n            if (content_length > 0)\n            {\n                incoming.body.resize(content_length);\n                in.read(&incoming.body[0],content_length);\n            }\n            parse_url(incoming.body, incoming.queries);\n        }\n\n        string::size_type pos = path.find_first_of(\"?\");\n        if (pos != string::npos)\n        {\n            parse_url(path.substr(pos+1), incoming.queries);\n        }\n\n\n        if (!in)\n            throw http_parse_error(\"Error parsing HTTP request\", 500);\n\n        return content_length;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void read_body (\n        std::istream& in,\n        incoming_things& incoming\n    )\n    {\n        // if the body hasn't already been loaded and there is data to load\n        if (incoming.body.size() == 0 &&\n            incoming.headers.count(\"Content-Length\") != 0)\n        {\n            const unsigned long content_length = string_cast<unsigned long>(incoming.headers[\"Content-Length\"]);\n\n            incoming.body.resize(content_length);\n            if (content_length > 0)\n            {\n                in.read(&incoming.body[0],content_length);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void write_http_response (\n        std::ostream& out,\n        outgoing_things outgoing,\n        const std::string& result\n    )\n    {\n        using namespace http_impl;\n        key_value_map& new_cookies      = outgoing.cookies;\n        key_value_map_ci& response_headers = outgoing.headers;\n\n        // only send this header if the user hasn't told us to send another kind\n        bool has_content_type = false, has_location = false;\n        for(key_value_map_ci::const_iterator ci = response_headers.begin(); ci != response_headers.end(); ++ci )\n        {\n            if ( !has_content_type && strings_equal_ignore_case(ci->first , \"content-type\") )\n            {\n                has_content_type = true;\n            }\n            else if ( !has_location && strings_equal_ignore_case(ci->first , \"location\") )\n            {\n                has_location = true;\n            }\n        }\n\n        if ( has_location )\n        {\n            outgoing.http_return = 302;\n        }\n\n        if ( !has_content_type )\n        {\n            response_headers[\"Content-Type\"] = \"text/html\";\n        }\n\n        response_headers[\"Content-Length\"] = cast_to_string(result.size());\n\n        out << \"HTTP/1.0 \" << outgoing.http_return << \" \" << outgoing.http_return_status << \"\\r\\n\";\n\n        // Set any new headers\n        for(key_value_map_ci::const_iterator ci = response_headers.begin(); ci != response_headers.end(); ++ci )\n        {\n            out << ci->first << \": \" << ci->second << \"\\r\\n\";\n        }\n\n        // set any cookies \n        for(key_value_map::const_iterator ci = new_cookies.begin(); ci != new_cookies.end(); ++ci )\n        {\n            out << \"Set-Cookie: \" << urlencode(ci->first) << '=' << urlencode(ci->second) << \"\\r\\n\";\n        }\n        out << \"\\r\\n\" << result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void write_http_response (\n        std::ostream& out,\n        const http_parse_error& e \n    )\n    {\n        outgoing_things outgoing;\n        outgoing.http_return = e.http_error_code;\n        outgoing.http_return_status = e.what();\n        write_http_response(out, outgoing, std::string(\"Error processing request: \") + e.what());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void write_http_response (\n        std::ostream& out,\n        const std::exception& e \n    )\n    {\n        outgoing_things outgoing;\n        outgoing.http_return = 500;\n        outgoing.http_return_status = e.what();\n        write_http_response(out, outgoing, std::string(\"Error processing request: \") + e.what());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const logger server_http::dlog(\"dlib.server_http\");\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SERVER_HTTP_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server/server_http.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net), Steven Van Ingelgem\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SERVER_HTTp_1_\n#define DLIB_SERVER_HTTp_1_\n\n\n#include \"server_http_abstract.h\"\n#include <iostream>\n#include <sstream>\n#include <string>\n#include <cctype>\n#include <map>\n#include \"../logger.h\"\n#include \"../string.h\"\n#include \"server_iostream.h\"\n\n#ifdef  __INTEL_COMPILER\n// ignore the bogus warning about hiding on_connect()\n#pragma warning (disable: 1125)\n#endif\n\n#if _MSC_VER\n#  pragma warning( disable: 4503 )\n#endif // _MSC_VER\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class http_parse_error : public error\n    {\n    public:\n        http_parse_error(const std::string& str, int http_error_code_):\n            error(str),http_error_code(http_error_code_) {}\n\n        const int http_error_code;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename Key, typename Value, typename Comparer = std::less<Key> >\n    class constmap : public std::map<Key, Value, Comparer>\n    {\n    public:\n        const Value& operator[](const Key& k) const\n        {\n            static const Value dummy = Value();\n\n            typename std::map<Key, Value, Comparer>::const_iterator ci = std::map<Key, Value, Comparer>::find(k);\n\n            if ( ci == this->end() )\n                return dummy;\n            else\n                return ci->second;\n        }\n\n        Value& operator[](const Key& k)\n        {\n            return std::map<Key, Value, Comparer>::operator [](k);\n        }\n    };\n\n\n    class less_case_insensitive \n    {\n    public:\n        bool operator()(const std::string& a, const std::string& b) const \n        {\n            unsigned long i = 0;\n            while (i < a.size() && i < b.size())\n            {\n                const int cha = std::tolower(a[i]);\n                const int chb = std::tolower(b[i]);\n                if (cha < chb)\n                    return true;\n                else if (cha > chb)\n                    return false;\n                ++i;\n            }\n            if (a.size() < b.size())\n                return true;\n            else\n                return false;\n        }\n    };\n    typedef constmap< std::string, std::string, less_case_insensitive > key_value_map_ci;\n    typedef constmap< std::string, std::string > key_value_map;\n\n    struct incoming_things \n    {\n        incoming_things (\n            const std::string& foreign_ip_,\n            const std::string& local_ip_,\n            unsigned short foreign_port_,\n            unsigned short local_port_\n        ): \n            foreign_ip(foreign_ip_),\n            foreign_port(foreign_port_),\n            local_ip(local_ip_),\n            local_port(local_port_)\n        {}\n            \n\n        std::string path;\n        std::string request_type;\n        std::string content_type;\n        std::string protocol;\n        std::string body;\n\n        key_value_map queries;\n        key_value_map cookies;\n        key_value_map_ci headers;\n\n        std::string foreign_ip;\n        unsigned short foreign_port;\n        std::string local_ip;\n        unsigned short local_port;\n    };\n\n    struct outgoing_things \n    {\n        outgoing_things() : http_return(200), http_return_status(\"OK\") { }\n\n        key_value_map  cookies;\n        key_value_map_ci  headers;\n        unsigned short http_return;\n        std::string    http_return_status;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long parse_http_request ( \n        std::istream& in,\n        incoming_things& incoming,\n        unsigned long max_content_length\n    );\n\n    void read_body (\n        std::istream& in,\n        incoming_things& incoming\n    );\n\n    void write_http_response (\n        std::ostream& out,\n        outgoing_things outgoing,\n        const std::string& result\n    );\n\n    void write_http_response (\n        std::ostream& out,\n        const http_parse_error& e \n    );\n\n    void write_http_response (\n        std::ostream& out,\n        const std::exception& e \n    );\n\n// ----------------------------------------------------------------------------------------\n\n    class server_http : public server_iostream \n    {\n\n    public:\n\n        server_http()\n        {\n            max_content_length = 10*1024*1024; // 10MB\n        }\n\n        unsigned long get_max_content_length (\n        ) const \n        { \n            auto_mutex lock(http_class_mutex);\n            return max_content_length; \n        }\n\n        void set_max_content_length (\n            unsigned long max_length\n        )\n        {\n            auto_mutex lock(http_class_mutex);\n            max_content_length = max_length;\n        }\n\n\n    private:\n        virtual const std::string on_request (\n            const incoming_things& incoming,\n            outgoing_things& outgoing\n        ) = 0;\n\n      \n        virtual void on_connect (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& foreign_ip,\n            const std::string& local_ip,\n            unsigned short foreign_port,\n            unsigned short local_port,\n            uint64\n        )\n        {\n            try\n            {\n                incoming_things incoming(foreign_ip, local_ip, foreign_port, local_port);\n                outgoing_things outgoing;\n\n                parse_http_request(in, incoming, get_max_content_length());\n                read_body(in, incoming);\n                const std::string& result = on_request(incoming, outgoing);\n                write_http_response(out, outgoing, result);\n            }\n            catch (http_parse_error& e)\n            {\n                dlog << LERROR << \"Error processing request from: \" << foreign_ip << \" - \" << e.what();\n                write_http_response(out, e);\n            }\n            catch (std::exception& e)\n            {\n                dlog << LERROR << \"Error processing request from: \" << foreign_ip << \" - \" << e.what();\n                write_http_response(out, e);\n            }\n        }\n\n        mutex http_class_mutex;\n        unsigned long max_content_length;\n        const static logger dlog;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"server_http.cpp\"\n#endif\n\n#endif // DLIB_SERVER_HTTp_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server/server_http_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net), Steven Van Ingelgem\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SERVER_HTTp_ABSTRACT_\n#ifdef DLIB_SERVER_HTTp_ABSTRACT_\n\n#include \"server_iostream_abstract.h\"\n#include <iostream>\n#include <string>\n#include <map>\n\nnamespace dlib\n{\n\n// -----------------------------------------------------------------------------------------\n\n    template <\n        typename Key, \n        typename Value, \n        typename Comparer = std::less<Key> \n        >\n    class constmap : public std::map<Key, Value, Comparer>\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is simply an extension to the std::map that allows you \n                to use the operator[] accessor with a constant map.  \n        !*/\n    public:\n\n        const Value& operator[](\n            const Key& k\n        ) const;\n        /*!\n            ensures\n                - if (this->find(k) != this->end()) then\n                    - This map contains the given key\n                    - return the value associated with the given key\n                - else\n                    - return a default initialized Value object\n        !*/\n\n        Value& operator[](\n            const Key& k\n        ) { return std::map<Key, Value>::operator [](k); }\n        /*!\n            ensures\n                - This function does the same thing as the normal std::map operator[]\n                  function.\n                - if (this->find(k) != this->end()) then\n                    - This map contains the given key\n                    - return the value associated with the given key\n                - else\n                    - Adds a new entry into the map that is associated with the\n                      given key.  The new entry will be default initialized and\n                      this function returns a reference to it.\n        !*/ \n    };\n\n    typedef constmap<std::string, std::string> key_value_map;\n    // This version of key_value_map treats the key string as being case-insensitive.\n    // For example, a key string of \"Content-Type\" would access the same element as a key\n    // of \"content-type\".\n    typedef constmap<std::string, std::string, less_case_insensitive> key_value_map_ci;\n\n// -----------------------------------------------------------------------------------------\n\n    struct incoming_things \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object contains all the various bits of information that describe a\n                HTTP request that comes into a web server.\n\n                For a detailed discussion of the fields of this object, see the\n                server_http::on_request() method defined later in this file.\n        !*/\n\n        incoming_things (\n            const std::string& foreign_ip_,\n            const std::string& local_ip_,\n            unsigned short foreign_port_,\n            unsigned short local_port_\n        );\n        /*!\n            ensures\n                - #foreign_ip = foreign_ip_\n                - #foreign_port = foreign_port_\n                - #local_ip = local_ip_\n                - #local_port = local_port_\n        !*/\n            \n        std::string path;\n        std::string request_type;\n        std::string content_type;\n        std::string protocol;\n        std::string body;\n\n        key_value_map    queries;\n        key_value_map    cookies;\n        key_value_map_ci headers;\n\n        std::string    foreign_ip;\n        unsigned short foreign_port;\n        std::string    local_ip;\n        unsigned short local_port;\n    };\n\n    struct outgoing_things \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object contains all the various bits of information that describe a\n                HTTP response from a web server.\n\n                For a detailed discussion of the fields of this object, see the\n                server_http::on_request() method defined later in this file.\n        !*/\n\n        outgoing_things(\n        );\n        /*!\n            ensures\n                - #http_return == 200\n                - #http_return_status == \"OK\"\n        !*/\n\n        key_value_map    cookies;\n        key_value_map_ci headers;\n        unsigned short   http_return;\n        std::string      http_return_status;\n    };\n\n// -----------------------------------------------------------------------------------------\n\n    class http_parse_error : public error \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an exception thrown by the parse_http_request() routine if \n                there is a problem.\n        !*/\n    };\n\n// -----------------------------------------------------------------------------------------\n\n    unsigned long parse_http_request ( \n        std::istream& in,\n        incoming_things& incoming,\n        unsigned long max_content_length\n    );\n    /*!\n        ensures\n            - Attempts to read a HTTP GET, POST, or PUT request from the given input\n              stream.\n            - Reads all headers of the request and puts them into #incoming.  In particular,\n              this function populates the following fields:\n                - #incoming.path\n                - #incoming.request_type\n                - #incoming.content_type\n                - #incoming.protocol\n                - #incoming.queries\n                - #incoming.cookies\n                - #incoming.headers\n            - This function also populates the #incoming.body field if and only if the\n              Content-Type field is equal to \"application/x-www-form-urlencoded\".\n              Otherwise, the content is not read from the stream.\n        throws\n            - http_parse_error\n                This exception is thrown if the Content-Length coming from the web\n                browser is greater than max_content_length or if any other problem\n                is detected with the request.\n    !*/\n\n    void read_body (\n        std::istream& in,\n        incoming_things& incoming\n    );\n    /*!\n        requires\n            - parse_http_request(in,incoming,max_content_length) has already been called\n              and therefore populated the fields of incoming.\n        ensures\n            - if (incoming.body has already been populated with the content of an HTTP\n              request) then\n                - this function does nothing\n            - else\n                - reads the body of the HTTP request into #incoming.body.\n    !*/\n\n    void write_http_response (\n        std::ostream& out,\n        outgoing_things outgoing,\n        const std::string& result\n    );\n    /*!\n        ensures\n            - Writes an HTTP response, defined by the data in outgoing, to the given output\n              stream.\n            - The result variable is written out as the content of the response.\n    !*/\n\n    void write_http_response (\n        std::ostream& out,\n        const http_parse_error& e \n    );\n    /*!\n        ensures\n            - Writes an HTTP error response based on the information in the exception \n              object e.\n    !*/\n\n    void write_http_response (\n        std::ostream& out,\n        const std::exception& e \n    );\n    /*!\n        ensures\n            - Writes an HTTP error response based on the information in the exception\n              object e.\n    !*/\n\n// -----------------------------------------------------------------------------------------\n// -----------------------------------------------------------------------------------------\n\n    class server_http : public server_iostream \n    {\n\n        /*!\n            WHAT THIS EXTENSION DOES FOR server_iostream\n                This extension turns the server object into a simple HTTP server.  It only\n                handles HTTP GET, PUT and POST requests and each incoming request triggers\n                the on_request() callback.  \n\n            COOKIE STRINGS\n                The strings returned in the cookies key_value_map should be of the following form:\n                    key:   cookie_name\n                    value: cookie contents; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.example.net\n\n                You don't have to supply all the extra cookie arguments.  So if you just want to\n                set a cookie that will expire when the client's browser is closed you can \n                just say something like incoming.cookies[\"cookie_name\"] = \"cookie contents\";\n\n            HTTP HEADERS\n                The HTTP headers in the incoming.headers and outgoing.headers are the name/value pairs\n                of HTTP headers.  For example, the HTTP header \"Content-Type: text/html\" would be\n                encoded such that outgoing.headers[\"Content-Type\"] == \"text/html\". \n\n                Also note that if you wish to change the content type of your response to the \n                client you may do so by setting the \"Content-Type\" header to whatever you like. \n                However, setting this field manually is not necessary as it will default to \n                \"text/html\" if you don't explicitly set it to something.\n        !*/\n\n    public:\n\n        server_http (\n        );\n        /*!\n            ensures\n                - #get_max_content_length() == 10*1024*1024\n        !*/\n\n        unsigned long get_max_content_length (\n        ) const;\n        /*!\n            ensures\n                - returns the max allowable content length, in bytes, of the post back to\n                  the web server.  If a client attempts to send more data than this then an\n                  error number 413 is returned back to the client and the request is not\n                  processed by the web server.\n        !*/\n\n        void set_max_content_length (\n            unsigned long max_length\n        );\n        /*!\n            ensures\n                - #get_max_content_length() == max_length\n        !*/\n\n    private:\n\n        virtual const std::string on_request (\n            const incoming_things& incoming,\n            outgoing_things& outgoing\n        ) = 0;\n        /*!\n            requires\n                - on_request() is called when there is an HTTP GET or POST request to be serviced \n                - on_request() is run in its own thread \n                - is_running() == true \n                - the number of current on_request() functions running < get_max_connection() \n                - in incoming: \n                    - incoming.path == the path being requested by this request\n                    - incoming.request_type == the type of request, GET or POST\n                    - incoming.content_type == the content type associated with this request\n                    - incoming.protocol == The protocol being used by the web browser (e.g. HTTP/1.1) \n                    - incoming.body == a string that contains the data that was posted back to the\n                      web server by the client (e.g. The string has the length specified by the\n                      Content-Length header).\n                    - incoming.body.size() < get_max_content_length()\n                    - incoming.queries == a map that contains all the key/value pairs in the query \n                      string of this request.  The key and value strings of the query string will\n                      have been decoded back into their original form before being sent to this\n                      function (i.e. '+' decoded back to ' ' and \"%hh\" into its corresponding \n                      ascii value.  So the URL-encoding is decoded automatically)\n                    - incoming.cookies == The set of cookies that came from the client along with \n                      this request.  The cookies will have been decoded back to normal form\n                      from the URL-encoding.\n                    - incoming.headers == a map that contains all the incoming HTTP headers \n                      from the client web browser.  \n                    - incoming.foreign_ip == the foreign ip address for this request \n                    - incoming.foreign_port == the foreign port number for this request\n                    - incoming.local_ip == the IP of the local interface this request is coming in on \n                    - incoming.local_port == the local port number this request is coming in on \n                - in outgoing:\n                    - outgoing.cookies.size() == 0\n                    - outgoing.headers.size() == 0\n                    - outgoing.http_return == 200\n                    - outgoing.http_return_status == \"OK\"\n            ensures\n                - This function returns the HTML page to be displayed as the response to this request. \n                - this function will not call clear()  \n                - #outgoing.cookies == a set of new cookies to pass back to the client along\n                  with the result of this request.  (Note that URL-encoding is automatically applied \n                  so you don't have to do it yourself)\n                - #outgoing.headers == a set of additional headers you wish to appear in the\n                  HTTP response to this request.  (This may be empty, the minimum needed headers\n                  will be added automatically if you don't set them)\n                - outgoing.http_return and outgoing.http_return_status may be set to override the \n                  default HTTP return code of 200 OK\n            throws\n                - throws only exceptions derived from std::exception.  If an exception is thrown\n                  then the error string from the exception is returned to the web browser.\n        !*/\n\n\n    // -----------------------------------------------------------------------\n    //                        Implementation Notes\n    // -----------------------------------------------------------------------\n\n        virtual void on_connect (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& foreign_ip,\n            const std::string& local_ip,\n            unsigned short foreign_port,\n            unsigned short local_port,\n            uint64\n        )\n        /*!\n            on_connect() is the function defined by server_iostream which is overloaded by\n            server_http.  In particular, the server_http's implementation is shown below.\n            In it you can see how the server_http parses the incoming http request, gets a\n            response by calling on_request(), and sends it back using the helper routines\n            defined at the top of this file.\n\n            Therefore, if you want to modify the behavior of the HTTP server, for example,\n            to do some more complex data streaming requiring direct access to the\n            iostreams, then you can do so by defining your own on_connect() routine.  In\n            particular, the default implementation shown below is a good starting point.\n        !*/\n        {\n            try\n            {\n                incoming_things incoming(foreign_ip, local_ip, foreign_port, local_port);\n                outgoing_things outgoing;\n\n                parse_http_request(in, incoming, get_max_content_length());\n                read_body(in, incoming);\n                const std::string& result = on_request(incoming, outgoing);\n                write_http_response(out, outgoing, result);\n            }\n            catch (http_parse_error& e)\n            {\n                write_http_response(out, e);\n            }\n            catch (std::exception& e)\n            {\n                write_http_response(out, e);\n            }\n        }\n    };\n\n}\n\n#endif // DLIB_SERVER_HTTp_ABSTRACT_ \n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server/server_iostream.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SERVER_IOSTREAM_CPp_\n#define DLIB_SERVER_IOSTREAM_CPp_\n\n#include \"server_iostream.h\"\n\nnamespace dlib\n{\n    const logger server_iostream::_dLog(\"dlib.server_iostream\");\n}\n\n#endif // DLIB_SERVER_IOSTREAM_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server/server_iostream.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SERVER_IOSTREAm_1_\n#define DLIB_SERVER_IOSTREAm_1_\n\n#include <iostream>\n#include \"server_iostream_abstract.h\"\n#include \"../logger.h\"\n#include \"../uintn.h\"\n#include \"server_kernel.h\"\n#include \"../sockstreambuf.h\"\n#include \"../map.h\"\n\n\nnamespace dlib\n{\n\n    class server_iostream : public server \n    {\n\n        /*!\n            INITIAL VALUE\n                - next_id == 0\n                - con_map.size() == 0\n\n            CONVENTION\n                - next_id == the id of the next connection \n                - for all current connections\n                    - con_map[id] == the connection object with the given id\n                - m == the mutex that protects the members of this object\n        !*/\n\n        typedef map<uint64,connection*,memory_manager<char>::kernel_2a>::kernel_1b id_map;\n\n    public:\n        server_iostream(\n        ) :\n            next_id(0)\n        {}\n\n        ~server_iostream(\n        )\n        {\n            server::clear();\n        }\n\n    protected:\n\n        void shutdown_connection (\n            uint64 id\n        )\n        {\n            auto_mutex M(m);\n            if (con_map.is_in_domain(id))\n            {\n                con_map[id]->shutdown();\n            }\n        }\n\n    private:\n\n        virtual void on_connect (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& foreign_ip,\n            const std::string& local_ip,\n            unsigned short foreign_port,\n            unsigned short local_port,\n            uint64 connection_id\n        )=0;\n\n        void on_connect (\n            connection& con\n        )\n        {\n            bool my_fault = true;\n            uint64 this_con_id;\n            try\n            {\n                sockstreambuf buf(&con);\n                std::istream in(&buf);\n                std::ostream out(&buf);\n                in.tie(&out);\n\n                // add this connection to the con_map\n                {\n                    auto_mutex M(m);\n                    this_con_id = next_id;\n                    connection* this_con = &con;\n                    con_map.add(this_con_id,this_con);\n                    this_con_id = next_id;\n                    ++next_id;\n                }\n\n                my_fault = false;\n                on_connect(\n                    in,\n                    out,\n                    con.get_foreign_ip(),\n                    con.get_local_ip(),\n                    con.get_foreign_port(),\n                    con.get_local_port(),\n                    this_con_id\n                );\n\n                // remove this connection from the con_map\n                {\n                    auto_mutex M(m);\n                    connection* this_con;\n                    uint64 junk;\n                    con_map.remove(this_con_id,junk,this_con);\n                }\n\n            }\n            catch (std::bad_alloc&)\n            {\n                // make sure we remove this connection from the con_map\n                {\n                    auto_mutex M(m);\n                    if (con_map.is_in_domain(this_con_id))\n                    {\n                        connection* this_con;\n                        uint64 junk;\n                        con_map.remove(this_con_id,junk,this_con);\n                    }\n                }\n\n                _dLog << LERROR << \"We ran out of memory in server_iostream::on_connect()\";\n                // if this is an escaped exception from on_connect then let it fly! \n                // Seriously though, this way it is obvious to the user that something bad happened\n                // since they probably won't have the dlib logger enabled.\n                if (!my_fault)\n                    throw;\n            }\n        }\n\n        uint64 next_id;\n        id_map con_map;\n        const static logger _dLog;\n        mutex m;\n        \n\n    };\n\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"server_iostream.cpp\"\n#endif\n\n#endif // DLIB_SERVER_IOSTREAm_1_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server/server_iostream_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SERVER_IOSTREAm_ABSTRACT_\n#ifdef DLIB_SERVER_IOSTREAm_ABSTRACT_\n\n\n#include \"server_kernel_abstract.h\"\n#include <iostream>\n#include <string>\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n    class server_iostream : public server \n    {\n\n        /*!\n            WHAT THIS EXTENSION DOES FOR server \n                This extension redefines the on_connect() function so that\n                instead of giving you a connection object you get an istream \n                and ostream object.\n\n            THREAD SAFETY\n                Note that in on_connect() the input stream in is tied to the output stream \n                out.  This means that when you read from in it will modify out and thus \n                it is not safe to touch in and out concurrently from different threads \n                unless you untie them (which you do by saying in.tie(0);)\n        !*/\n\n    protected:\n\n        void shutdown_connection (\n            uint64 id\n        );\n        /*!\n            ensures\n                - if (there is a connection currently being serviced with the given id) then\n                    - the specified connection is shutdown. (i.e. connection::shutdown() is\n                      called on it so the iostreams operating on it will return EOF)\n        !*/\n\n    private:\n\n        virtual void on_connect (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& foreign_ip,\n            const std::string& local_ip,\n            unsigned short foreign_port,\n            unsigned short local_port,\n            uint64 connection_id\n        )=0;\n        /*!\n            requires\n                - on_connect() is called when there is a new TCP connection that needs\n                  to be serviced.\n                - in == the input stream that reads data from the new connection\n                - out == the output stream that writes data to the new connection\n                - in.tie() == &out (i.e. when you read from in it automatically calls out.flush())\n                - foreign_ip == the foreign ip address for this connection \n                - foreign_port == the foreign port number for this connection \n                - local_ip == the IP of the local interface this connection is using\n                - local_port == the local port number for this connection\n                - on_connect() is run in its own thread \n                - is_running() == true \n                - the number of current connections < get_max_connection() \n                - connection_id == an integer that uniquely identifies this connection. \n                  It can be used by shutdown_connection() to terminate this connection.\n            ensures\n                - when the iostreams hit EOF on_connect() will terminate.  \n                  (because this is how clear() signals you the server is shutting down)\n                - this function will not call clear()  \n            throws\n                - does not throw any exceptions\n        !*/\n\n    };\n\n}\n\n#endif // DLIB_SERVER_IOSTREAm_ABSTRACT_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server/server_kernel.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SERVER_KERNEL_CPp_\n#define DLIB_SERVER_KERNEL_CPp_\n\n#include \"server_kernel.h\"\n#include \"../string.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    server::\n    server (\n    ) :\n        listening_port(0),\n        running(false),\n        shutting_down(false),\n        running_signaler(running_mutex),\n        thread_count(0),\n        thread_count_signaler(thread_count_mutex),\n        max_connections(1000),\n        thread_count_zero(thread_count_mutex),\n        graceful_close_timeout(500)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    server::\n    ~server (\n    )\n    {\n        clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long server::\n    get_graceful_close_timeout (\n    ) const\n    {\n        auto_mutex lock(max_connections_mutex);\n        return graceful_close_timeout;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    set_graceful_close_timeout (\n        unsigned long timeout\n    ) \n    {\n        auto_mutex lock(max_connections_mutex);\n        graceful_close_timeout = timeout;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    int server::\n    get_max_connections (\n    ) const\n    {\n        max_connections_mutex.lock();\n        int temp = max_connections;\n        max_connections_mutex.unlock();\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    set_max_connections (\n        int max\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( \n            max >= 0 ,\n            \"\\tvoid server::set_max_connections\"\n            << \"\\n\\tmax == \" << max\n            << \"\\n\\tthis: \" << this\n            );\n\n        max_connections_mutex.lock();\n        max_connections = max;\n        max_connections_mutex.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    clear (\n    )\n    {\n        // signal that we are shutting down\n        shutting_down_mutex.lock();\n        shutting_down = true;\n        shutting_down_mutex.unlock();\n\n\n\n        max_connections_mutex.lock();\n        listening_port_mutex.lock();\n        listening_ip_mutex.lock();\n        listening_ip = \"\";        \n        listening_port = 0;\n        max_connections = 1000;\n        graceful_close_timeout = 500;\n        listening_port_mutex.unlock();\n        listening_ip_mutex.unlock();\n        max_connections_mutex.unlock();\n\n\n        // tell all the connections to shut down\n        cons_mutex.lock();\n        connection* temp;\n        while (cons.size() > 0)\n        {\n            cons.remove_any(temp);\n            temp->shutdown();\n        }\n        cons_mutex.unlock();\n\n\n        // wait for all the connections to shut down \n        thread_count_mutex.lock();\n        while (thread_count > 0)\n        {\n            thread_count_zero.wait();\n        }\n        thread_count_mutex.unlock();\n        \n\n\n\n        // wait for the listener to close\n        running_mutex.lock();\n        while (running == true)\n        {\n            running_signaler.wait();\n        }\n        running_mutex.unlock();\n\n\n\n        // signal that the shutdown is complete\n        shutting_down_mutex.lock();\n        shutting_down = false;\n        shutting_down_mutex.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    start_async_helper (\n    )\n    {\n        try\n        {\n            start_accepting_connections();\n        }\n        catch (std::exception& e)\n        {\n            sdlog << LERROR << e.what();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    start_async (\n    )\n    {\n        auto_mutex lock(running_mutex);\n        if (running)\n            return;\n\n        // Any exceptions likely to be thrown by the server are going to be\n        // thrown when trying to bind the port.  So calling this here rather\n        // than in the thread we are about to make will cause start_async()\n        // to report errors back to the user in a very straight forward way.\n        open_listening_socket();\n\n        async_start_thread.reset(new thread_function(make_mfp(*this,&server::start_async_helper)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    open_listening_socket (\n    )\n    {\n        if (!sock)\n        {\n            int status = create_listener(sock,listening_port,listening_ip);\n            const int port_used = listening_port;\n\n            // if there was an error then clear this object\n            if (status < 0)\n            {\n                max_connections_mutex.lock();\n                listening_port_mutex.lock();\n                listening_ip_mutex.lock();\n                listening_ip = \"\";        \n                listening_port = 0;\n                max_connections = 1000;\n                graceful_close_timeout = 500;\n                listening_port_mutex.unlock();\n                listening_ip_mutex.unlock();\n                max_connections_mutex.unlock();\n            }\n\n\n\n            // throw an exception for the error\n            if (status == PORTINUSE)\n            {\n                throw dlib::socket_error(\n                    EPORT_IN_USE,\n                    \"error occurred in server::start()\\nport \" + cast_to_string(port_used) + \" already in use\"\n                );\n            }\n            else if (status == OTHER_ERROR)\n            {\n                throw dlib::socket_error(\n                    \"error occurred in server::start()\\nunable to create listener\"\n                );            \n            }\n        }\n\n        running_mutex.lock();\n        running = true;\n        running_mutex.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    start (\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( \n              this->is_running() == false,\n            \"\\tvoid server::start\"\n            << \"\\n\\tis_running() == \" << this->is_running() \n            << \"\\n\\tthis: \" << this\n            );\n\n        start_accepting_connections();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    start_accepting_connections (\n    )\n    {\n        open_listening_socket();\n\n        // determine the listening port\n        bool port_assigned = false;\n        listening_port_mutex.lock();\n        if (listening_port == 0)\n        {\n            port_assigned = true;\n            listening_port = sock->get_listening_port();\n        }\n        listening_port_mutex.unlock();\n        if (port_assigned)\n            on_listening_port_assigned();\n        \n\n\n        int status = 0;\n\n        connection* client;\n        bool exit = false;\n        while ( true )\n        {\n\n\n            // accept the next connection\n            status = sock->accept(client,1000);\n\n\n            // if there was an error then quit the loop\n            if (status == OTHER_ERROR)\n            {\n                break;\n            }\n\n            shutting_down_mutex.lock();\n            // if we are shutting down then signal that we should quit the loop\n            exit = shutting_down;\n            shutting_down_mutex.unlock();  \n\n\n            // if we should be shutting down \n            if (exit)\n            {\n                // if a connection was opened then close it\n                if (status == 0)\n                    delete client;\n                break;\n            }\n\n\n\n            // if the accept timed out\n            if (status == TIMEOUT)\n            {\n                continue;       \n            }\n\n\n\n\n\n            // add this new connection to cons\n            cons_mutex.lock();\n            connection* client_temp = client;\n            try{cons.add(client_temp);}\n            catch(...)\n            { \n                sock.reset();\n                delete client;\n                cons_mutex.unlock();\n\n                // signal that we are not running start() anymore\n                running_mutex.lock();\n                running = false;\n                running_signaler.broadcast();\n                running_mutex.unlock();               \n                \n\n                clear(); \n                throw;\n            }\n            cons_mutex.unlock();\n\n\n            // make a param structure\n            param* temp = 0;\n            try{\n            temp = new param (\n                            *this,\n                            *client,\n                            get_graceful_close_timeout() \n                            );\n            } catch (...) \n            {\n                sock.reset();\n                delete client;\n                running_mutex.lock();\n                running = false;\n                running_signaler.broadcast();\n                running_mutex.unlock();\n                clear(); \n                throw;\n            }\n\n\n            // if create_new_thread failed\n            if (!create_new_thread(service_connection,temp))\n            {\n                delete temp;\n                // close the listening socket\n                sock.reset();\n\n                // close the new connection and remove it from cons\n                cons_mutex.lock();\n                connection* ctemp;\n                if (cons.is_member(client))\n                {\n                    cons.remove(client,ctemp);\n                }\n                delete client;\n                cons_mutex.unlock();\n\n\n                // signal that the listener has closed\n                running_mutex.lock();\n                running = false;\n                running_signaler.broadcast();\n                running_mutex.unlock();\n\n                // make sure the object is cleared\n                clear();\n\n                // throw the exception\n                throw dlib::thread_error(\n                    ECREATE_THREAD,\n                    \"error occurred in server::start()\\nunable to start thread\"\n                    );    \n            }\n            // if we made the new thread then update thread_count\n            else\n            {\n                // increment the thread count\n                thread_count_mutex.lock();\n                ++thread_count;\n                if (thread_count == 0)\n                    thread_count_zero.broadcast();\n                thread_count_mutex.unlock();\n            }\n\n\n            \n\n            // check if we have hit the maximum allowed number of connections\n            max_connections_mutex.lock();\n            // if max_connections is zero or the loop is ending then skip this\n            if (max_connections != 0)\n            {\n                // wait for thread_count to be less than max_connections\n                thread_count_mutex.lock();\n                while (thread_count >= max_connections)\n                {\n                    max_connections_mutex.unlock();\n                    thread_count_signaler.wait();\n                    max_connections_mutex.lock();     \n\n                    // if we are shutting down the quit the loop\n                    shutting_down_mutex.lock();\n                    exit = shutting_down;\n                    shutting_down_mutex.unlock();\n                    if (exit)\n                        break;\n                }\n                thread_count_mutex.unlock();\n            }\n            max_connections_mutex.unlock();\n\n            if (exit)\n            {\n                break;\n            }\n        } //while ( true )\n\n\n        // close the socket\n        sock.reset();\n\n        // signal that the listener has closed\n        running_mutex.lock();\n        running = false;\n        running_signaler.broadcast();\n        running_mutex.unlock();\n\n        // if there was an error with accept then throw an exception\n        if (status == OTHER_ERROR)\n        {\n            // make sure the object is cleared\n            clear();\n\n            // throw the exception\n            throw dlib::socket_error(\n             \"error occurred in server::start()\\nlistening socket returned error\"\n                );            \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool server::\n    is_running (\n    ) const\n    {\n        running_mutex.lock();\n        bool temp = running;\n        running_mutex.unlock();\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string server::\n    get_listening_ip (\n    ) const\n    {\n        listening_ip_mutex.lock();\n        std::string ip(listening_ip);\n        listening_ip_mutex.unlock();\n        return ip;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int server::\n    get_listening_port (\n    ) const\n    {\n        listening_port_mutex.lock();\n        int port = listening_port;\n        listening_port_mutex.unlock();        \n        return port;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    set_listening_port (\n        int port\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( \n            ( port >= 0 &&\n              this->is_running() == false ),\n            \"\\tvoid server::set_listening_port\"\n            << \"\\n\\tport         == \" << port\n            << \"\\n\\tis_running() == \" << this->is_running() \n            << \"\\n\\tthis: \" << this\n            );\n\n        listening_port_mutex.lock();\n        listening_port = port;\n        listening_port_mutex.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void server::\n    set_listening_ip (\n        const std::string& ip\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( \n            ( ( is_ip_address(ip) || ip == \"\" ) &&\n              this->is_running() == false ),\n            \"\\tvoid server::set_listening_ip\"\n            << \"\\n\\tip           == \" << ip\n            << \"\\n\\tis_running() == \" << this->is_running() \n            << \"\\n\\tthis: \" << this\n            );\n\n        listening_ip_mutex.lock();\n        listening_ip = ip;\n        listening_ip_mutex.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // static member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    const logger server::sdlog(\"dlib.server\");\n\n    void server::\n    service_connection(\n        void* item\n    )\n    {\n        param& p = *static_cast<param*>(item);\n\n\n        p.the_server.on_connect(p.new_connection);\n\n\n        // remove this connection from cons and close it\n        p.the_server.cons_mutex.lock();\n        connection* temp;\n        if (p.the_server.cons.is_member(&p.new_connection))\n            p.the_server.cons.remove(&p.new_connection,temp);\n        p.the_server.cons_mutex.unlock();\n\n        try{ close_gracefully(&p.new_connection, p.graceful_close_timeout); } \n        catch (...) { sdlog << LERROR << \"close_gracefully() threw\"; } \n\n        // decrement the thread count and signal if it is now zero\n        p.the_server.thread_count_mutex.lock();\n        --p.the_server.thread_count;\n        p.the_server.thread_count_signaler.broadcast();\n        if (p.the_server.thread_count == 0)\n            p.the_server.thread_count_zero.broadcast();\n        p.the_server.thread_count_mutex.unlock();\n\n        delete &p;\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SERVER_KERNEL_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server/server_kernel.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SERVER_KERNEL_1_\n#define DLIB_SERVER_KERNEL_1_\n\n#include \"server_kernel_abstract.h\"\n\n#include \"../threads.h\"\n#include \"../sockets.h\"\n#include <string>\n#include \"../algs.h\"\n#include \"../set.h\"\n#include \"../logger.h\"\n#include \"../smart_pointers.h\"\n\n\nnamespace dlib\n{\n\n    // These forward declarations are here so we can use them in the typedefs in the server\n    // class.  The reason for this is for backwards compatibility with previous versions of\n    // dlib.\n    class server_http;\n    class server_iostream;\n\n    class server\n    {\n\n\n        /*!\n            INITIAL VALUE\n                listening_port          == 0\n                listening_ip            == \"\"\n                running                 == false\n                shutting_down           == false\n                cons.size()             == 0\n                listening_port_mutex    == a mutex\n                listening_ip_mutex      == a mutex\n                running_mutex           == a mutex\n                running_signaler        == a signaler associated with running_mutex\n                shutting_down_mutex     == a mutex\n                cons_mutex              == a mutex\n                thread_count            == 0\n                thread_count_mutex      == a mutex\n                thread_count_signaler   == a signaler associated with thread_count_mutex\n                thread_count_zero       == a signaler associated with thread_count_mutex\n                max_connections         == 1000 \n                max_connections_mutex   == a mutex for max_connections and graceful_close_timeout\n                graceful_close_timeout  == 500 \n             \n            CONVENTION\n                listening_port          == get_listening_port()\n                listening_ip            == get_listening_ip()\n                running                 == is_running()\n                shutting_down           == true while clear() is running.  this\n                                           bool is used to tell the thread blocked on\n                                           accept that it should terminate\n                cons                    == a set containing all open connections\n                listening_port_mutex    == a mutex for listening_port\n                listening_ip_mutex      == a mutex for listening_ip\n                running_mutex           == a mutex for running\n                running_signaler        == a signaler for running and\n                                           is associated with running_mutex.  it is \n                                           used to signal when running is false\n                shutting_down_mutex     == a mutex for shutting_down\n                cons_mutex              == a mutex for cons\n                thread_count            == the number of threads currently running\n                thread_count_mutex      == a mutex for thread_count\n                thread_count_signaler   == a signaler for thread_count and\n                                           is associated with thread_count_mutex.  it\n                                           is used to signal when thread_count is\n                                           decremented  \n                thread_count_zero       == a signaler for thread_count and\n                                           is associated with thread_count_mutex.  it\n                                           is used to signal when thread_count becomes\n                                           zero\n                max_connections         == get_max_connections()\n                max_connections_mutex   == a mutex for max_connections\n        !*/\n        \n\n        typedef set<connection*>::kernel_1a set_of_connections;\n\n        // this structure is used to pass parameters to new threads\n        struct param\n        {\n            param (\n                server& server_,\n                connection& new_connection_,\n                unsigned long graceful_close_timeout_\n            ) :\n                the_server(server_),\n                new_connection(new_connection_),\n                graceful_close_timeout(graceful_close_timeout_)\n            {}\n\n            server& the_server;\n            connection& new_connection;\n            unsigned long graceful_close_timeout; \n        };\n        \n\n\n        public:\n\n            // These typedefs are here for backward compatibility with previous versions of dlib\n            typedef     server kernel_1a;\n            typedef     server kernel_1a_c;\n            typedef     server_iostream iostream_1a;\n            typedef     server_iostream iostream_1a_c;\n            typedef     server_http http_1a;\n            typedef     server_http http_1a_c;\n\n            server(\n            );\n\n            virtual ~server(\n            ); \n\n            void clear(\n            );\n\n            void start (\n            );\n\n            bool is_running ( \n            ) const;\n\n            const std::string get_listening_ip (\n            ) const;\n\n            int get_listening_port (\n            ) const;\n\n            void set_listening_port (\n                int port\n            );\n\n            void set_listening_ip (\n                const std::string& ip\n            );\n\n            void set_max_connections (\n                int max\n            );\n\n            int get_max_connections (\n            ) const;\n\n            void start_async (\n            );\n\n            void set_graceful_close_timeout (\n                unsigned long timeout\n            );\n\n            unsigned long get_graceful_close_timeout (\n            ) const;\n\n        private:\n\n            void start_async_helper (\n            );\n\n            void start_accepting_connections (\n            );\n\n            void open_listening_socket (\n            );\n\n            virtual void on_connect (\n                connection& new_connection\n            )=0;\n\n            virtual void on_listening_port_assigned (\n            ) {}\n\n            const static logger sdlog;\n\n            static void service_connection(\n                void* item\n            );\n            /*!\n                requires\n                    item is a pointer to a param struct\n                ensures\n                    services the new connection\n                    will take care of closing the connection and \n                    adding the connection to cons when it first starts and\n                    remove the connection from cons and signal that it has \n                    done so when it ends\n            !*/\n\n            // data members\n            int listening_port;\n            std::string listening_ip;\n            bool running;\n            bool shutting_down;\n            set_of_connections cons;\n            mutex listening_port_mutex;\n            mutex listening_ip_mutex;\n            rmutex running_mutex;\n            rsignaler running_signaler;\n            mutex shutting_down_mutex;\n            mutex cons_mutex;\n            int thread_count;\n            mutex thread_count_mutex;\n            signaler thread_count_signaler;\n            int max_connections;\n            mutex max_connections_mutex;\n            signaler thread_count_zero;\n            scoped_ptr<thread_function> async_start_thread;\n            scoped_ptr<listener> sock;\n            unsigned long graceful_close_timeout;\n\n\n            // restricted functions\n            server(server&);   \n            server& operator= (\n                server&\n                );    \n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"server_kernel.cpp\"\n#endif\n\n#endif // DLIB_SERVER_KERNEL_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server/server_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SERVER_KERNEL_ABSTRACT_\n#ifdef DLIB_SERVER_KERNEL_ABSTRACT_\n\n#include \"../threads/threads_kernel_abstract.h\"\n#include \"../sockets/sockets_kernel_abstract.h\"\n#include <string>\n\n\nnamespace dlib\n{\n    class server\n    {\n\n        /*!\n            INITIAL VALUE\n                get_listening_ip()           == \"\"\n                get_listening_port()         == 0\n                is_running()                 == false\n                get_max_connections()        == 1000\n                get_graceful_close_timeout() == 500 \n\n\n            CALLBACK FUNCTIONS\n            on_connect():\n                To use this object inherit from it and define the pure virtual function\n                on_connect.  Inside this function is where you will handle each new\n                connection.  Note that the connection object passed to on_connect() should\n                NOT be closed, just let the function end and it will be gracefully closed \n                for you.  Also note that each call to on_connect() is run in its own \n                thread.  Also note that on_connect() should NOT throw any exceptions, \n                all exceptions must be dealt with inside on_connect() and cannot be \n                allowed to leave.\n\n            on_listening_port_assigned():\n                This function is called to let the client know that the operating\n                system has assigned a port number to the listening port.  This\n                happens if a port number of zero was given.  Note that this\n                function does not need to be defined.  If you don't care then\n                don't define it and it will do nothing.  Note also that this function\n                is NOT called in its own thread.  Thus, making it block might hang the\n                server.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a server that listens on a port and spawns new\n                threads to handle each new connection.            \n\n                Note that the clear() function does not return until all calls to \n                on_connect() have finished and the start() function has been shutdown.\n                Also note that when clear() is called all open connection objects \n                will be shutdown().\n\n                A note about get_max_connections(): when the maximum number of connections\n                has been reached accept() will simply not be called until the number of\n                open connections drops below get_max_connections().  This means connections\n                will just wait to be serviced, rather than being outright refused.\n\n            THREAD SAFETY\n                All member functions are thread-safe.\n        !*/\n        \n        public:\n\n            server(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc\n                    - dlib::thread_error\n            !*/\n\n            virtual ~server(\n            ); \n            /*!\n                requires\n                    - is not called from any of server's callbacks\n                ensures\n                    - all resources associated with *this have been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                requires\n                    - is not called from any of server's callbacks\n                ensures\n                    - #*this has its initial value \n                    - all open connection objects passed to on_connect() are shutdown() \n                    - blocks until all calls to on_connect() have finished \n                    - blocks until the start() function has released all its resources\n                throws\n                    - std::bad_alloc\n                        if this exception is thrown then the server object is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            void start (\n            );\n            /*!\n                requires\n                    - is_running() == false\n                ensures\n                    - starts listening on the port and ip specified by get_listening_ip()\n                      and #get_listening_port() for new connections.\n                    - if (get_listening_port() == 0) then\n                        - a port to listen on will be automatically selected \n                        - #get_listening_port() == the selected port being used\n                    - if (get_listening_ip() == \"\" ) then\n                        - all local IPs will be listened on\n                    - blocks until clear() is called or an error occurs  \n                throws\n                    - dlib::socket_error\n                        start() will throw this exception if there is some problem binding\n                        ports and/or starting the server or if there is a problem \n                        accepting new connections while it's running. \n                        If this happens then\n                            - All open connection objects passed to on_connect() are shutdown()\n                              and the exception will not be thrown until all on_connect() calls\n                              have terminated.\n                            - The server will be cleared and returned to its initial value. \n                    - dlib::thread_error\n                        start() will throw this exception if there is a problem \n                        creating new threads.  Or it may throw this exception if there\n                        is a problem creating threading objects. \n                        If this happens then\n                            - All open connection objects passed to on_connect() are shutdown()\n                              and the exception will not be thrown until all on_connect() calls\n                              have terminated.\n                            - The server will be cleared and returned to its initial value. \n                    - std::bad_alloc\n                        start() may throw this exception and if it does then the object \n                        will be unusable until clear() is called and succeeds\n            !*/\n\n            void start_async (\n            );\n            /*!\n                ensures\n                    - starts listening on the port and ip specified by get_listening_ip()\n                      and #get_listening_port() for new connections.  \n                    - if (get_listening_port() == 0) then\n                        - a port to listen on will be automatically selected \n                        - #get_listening_port() == the selected port being used\n                    - if (get_listening_ip() == \"\" ) then\n                        - all local IPs will be listened on\n                    - does NOT block.  That is, this function will return right away and\n                      the server will run on a background thread until clear() or this\n                      object's destructor is called (or until some kind of fatal error\n                      occurs).  \n                    - if an error occurs in the background thread while the server is\n                      running then it will shut itself down, set is_running() to false, and\n                      log the error to a dlib::logger object. \n                    - calling start_async() on a running server has no effect.\n                throws\n                    - dlib::socket_error\n                        start_async() will throw this exception if there is some problem binding\n                        ports and/or starting the server. \n                        If this happens then\n                            - The server will be cleared and returned to its initial value. \n            !*/\n\n            bool is_running ( \n            ) const;\n            /*!\n                ensures\n                    - returns true if start() is running \n                    - returns false if start() is not running or has released all\n                      its resources and is about to terminate\n                throws\n                    - std::bad_alloc\n            !*/\n\n            int get_max_connections (\n            ) const;\n            /*!\n                ensures\n                    - returns the maximum number of connections the server will accept \n                      at a time.\n                    - returns 0 if the server will accept any number of connections\n                throws\n                    - std::bad_alloc\n            !*/\n\n\n            const std::string get_listening_ip (\n            ) const;\n            /*!\n                ensures\n                    - returns the local ip to listen for new connections on \n                    - returns \"\" if ALL local ips are to be listened on\n                throws\n                    - std::bad_alloc\n            !*/\n\n            int get_listening_port (\n            ) const;\n            /*!\n                ensures\n                    - returns the local port number to listen for new connections on \n                    - returns 0 if the local port number has not yet been set\n                throws\n                    - std::bad_alloc\n            !*/\n\n            void set_listening_port (\n                int port\n            );\n            /*!\n                requires\n                    - port >= 0 \n                    - is_running() == false\n                ensures\n                    - #get_listening_port() == port\n                throws\n                    - std::bad_alloc\n            !*/\n\n            void set_listening_ip (\n                const std::string& ip\n            );\n            /*!\n                requires\n                    - is_ip_address(ip) == true or ip == \"\"\n                    - is_running() == false\n                ensures\n                    - #get_listening_ip() == ip                     \n                throws\n                    - std::bad_alloc\n            !*/\n\n            void set_max_connections (\n                int max\n            );\n            /*!\n                requires\n                    - max >= 0\n                ensures\n                    - #get_max_connections() == max\n                throws\n                    - std::bad_alloc\n            !*/\n    \n            void set_graceful_close_timeout (\n                unsigned long timeout\n            );\n            /*!\n                ensures\n                    - #get_graceful_close_timeout() == timeout\n            !*/\n\n            unsigned long get_graceful_close_timeout (\n            ) const;\n            /*!\n                ensures\n                    - When on_connect() terminates, it will close the connection using\n                      close_gracefully().  This is done so that any data still in the\n                      operating system's output buffers gets a chance to be properly\n                      transmitted to the remote host.  Part of this involves waiting for\n                      the remote host to close their end of the connection.  Therefore,\n                      get_graceful_close_timeout() returns the timeout, in milliseconds,\n                      that we wait for the remote host to close their end of the\n                      connection.  This is the timeout value given to close_gracefully().\n            !*/\n\n        private:\n\n            virtual void on_connect (\n                connection& new_connection\n            )=0;\n            /*!\n                requires\n                    - on_connect() is run in its own thread \n                    - is_running() == true \n                    - the number of current connections < get_max_connection() \n                    - new_connection == the new connection to the server which is\n                      to be serviced by this call to on_connect()\n                ensures\n                    - when new_connection is shutdown() on_connect() will terminate \n                    - this function will not call clear()  \n                throws\n                    - does not throw any exceptions\n            !*/\n\n            // do nothing by default\n            virtual void on_listening_port_assigned (\n            ) {}\n            /*!\n                requires\n                    - is called if a listening port of zero was specified and\n                      an actual port number has just been assigned to the server\n                ensures\n                    - this function will not block  \n                    - this function will not call clear()  \n                throws\n                    - does not throw any exceptions\n            !*/\n\n\n            // restricted functions\n            server(server&);        // copy constructor\n            server& operator=(server&);    // assignment operator\n    };\n\n}\n\n#endif // DLIB_SERVER_KERNEL_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/server.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SERVEr_\n#define DLIB_SERVEr_\n\n#include \"server/server_kernel.h\"\n#include \"server/server_iostream.h\"\n#include \"server/server_http.h\"\n\n\n#endif // DLIB_SERVEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/set/set_compare_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SET_COMPARe_1_\n#define DLIB_SET_COMPARe_1_\n\n#include \"set_compare_abstract.h\"\n\n#include \"../algs.h\"\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename set_base \n        >\n    class set_compare_1 : public set_base\n    {\n\n        public:\n\n            bool operator< (\n                const set_compare_1& rhs\n            ) const;\n\n            bool operator== (\n                const set_compare_1& rhs\n            ) const;\n\n    };\n\n\n    template <\n        typename set_base\n        >\n    inline void swap (\n        set_compare_1<set_base>& a, \n        set_compare_1<set_base>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename set_base\n        >\n    bool set_compare_1<set_base>::\n    operator< (\n        const set_compare_1<set_base>& rhs\n    ) const\n    {\n        bool result = false;\n        if (set_base::size() < rhs.size())\n            result = true;\n\n        if (set_base::size() == rhs.size())\n        {\n            rhs.reset();\n            set_base::reset();\n            while (rhs.move_next())\n            {\n                set_base::move_next();\n                if (set_base::element() < rhs.element())\n                {\n                    result = true;\n                    break;\n                }\n                else if (rhs.element() < set_base::element())\n                {\n                    break;\n                }\n            }            \n        }\n\n        set_base::reset();\n        rhs.reset();\n\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename set_base\n        >\n    bool set_compare_1<set_base>::\n    operator== (\n        const set_compare_1<set_base>& rhs\n    ) const\n    {\n        bool result = true;\n        if (set_base::size() != rhs.size())\n            result = false;\n\n\n        rhs.reset();\n        set_base::reset();\n        while (rhs.move_next() && set_base::move_next())\n        {            \n            if (!(rhs.element() == set_base::element()))\n            {\n                result = false;\n                break;\n            }\n        }\n\n        set_base::reset();\n        rhs.reset();\n\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SET_COMPARe_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/set/set_compare_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SET_COMPARe_ABSTRACT_\n#ifdef DLIB_SET_COMPARe_ABSTRACT_\n\n#include \"set_kernel_abstract.h\"\n\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n\n    template <\n        typename set_base\n        >\n    class set_compare : public set_base\n    {\n\n        /*!\n            REQUIREMENTS ON set_base\n                must be an implementation of set/set_kernel_abstract.h\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                operator== and operator< invalidate pointers or references to \n                data members.\n\n            WHAT THIS EXTENSION DOES FOR set\n                This gives a set the ability to compare itself to other \n                sets using the < and == operators. \n\n                The < operator is conceptually weird for sets.  It is useful \n                though because it allows you to make sets of sets since\n                sets require that their containing type implement operator<.\n\n                Also note that it is the case that for any two sets a and b \n                if (a<b) == false and (b<a) == false then a == b. \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n               \n\n            NOTATION\n                For the purposes of defining what these operators do I will \n                use the operator[] to reference the elements of the sets.\n                operator[] is defined to access the elements of the set in \n                the same order they would be enumerated by the enumerable \n                interface.\n        !*/\n\n        public:\n\n            bool operator< (\n                const set_compare& rhs\n            ) const;\n            /*!\n                ensures\n                    - #at_start() == true\n                    - if (size() < rhs.size()) then\n                        - returns true\n                    - else if (size() > rhs.size()) then\n                        - returns false\n                    - else\n                        - returns true if there exists an integer j such that 0 <= j < size() \n                          and for all integers i such that 0 <= i < j where it is true that\n                          (*this)[i] == rhs[i] and (*this)[j] < rhs[j] \n                        - returns false if there is no j that will satisfy the above conditions.                    \n            !*/\n\n            bool operator== (\n                const set_compare& rhs\n            ) const;\n            /*!\n                ensures\n                    - #at_start() == true\n                    - returns true if *this and rhs contain the same elements.\n                      returns false otherwise.\n            !*/\n    };\n\n\n    template <\n        typename set_base\n        >\n    inline void swap (\n        set_compare<set_base>& a, \n        set_compare<set_base>& b \n    ) { a.swap(b); } \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_SET_COMPARe_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/set/set_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SET_KERNEl_1_\n#define DLIB_SET_KERNEl_1_\n\n#include \"set_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager = default_memory_manager\n        >\n    class set_kernel_1 : public enumerable<const T>,\n                         public asc_remover<T,typename bst_base::compare_type>\n    {\n\n        /*!\n            REQUIREMENTS ON bst_base\n                bst_base is instantiated with <domain=T,range=char> and\n                implements binray_search_tree/binary_search_tree_kernel_abstract.h\n\n            INITIAL VALUE\n                bst has its initial value\n\n            CONVENTION\n                bst.size() == the number of elements in the set and\n                the elements in the set are stored in bst\n        !*/\n        \n\n        public:\n\n            typedef T type;\n            typedef typename bst_base::compare_type compare_type;\n            typedef mem_manager mem_manager_type;\n\n            set_kernel_1(\n            )\n            {\n            }\n\n            virtual ~set_kernel_1(\n            )\n            {}\n\n            inline void clear(\n            );\n\n            inline void add (\n                T& item\n            );\n\n            inline bool is_member (\n                const T& item\n            ) const;\n\n            inline void remove (\n                const T& item,\n                T& item_copy\n            );\n\n            inline void destroy (\n                const T& item\n            );\n\n            inline void swap (\n                set_kernel_1& item\n            );\n\n            // functions from the remover interface\n            inline void remove_any (\n                T& item\n            );\n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            inline bool current_element_valid (\n            ) const;\n\n            inline const T& element (\n            ) const;\n\n     \n            inline const T& element (\n            );\n\n            inline bool move_next (\n            ) const;\n\n            \n        private:\n\n            bst_base bst;\n            char junk;\n\n            // restricted functions\n            set_kernel_1(set_kernel_1&);        \n            set_kernel_1& operator=(set_kernel_1&); \n\n    };\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    inline void swap (\n        set_kernel_1<T,bst_base,mem_manager>& a, \n        set_kernel_1<T,bst_base,mem_manager>& b \n    ) { a.swap(b); } \n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    void deserialize (\n        set_kernel_1<T,bst_base,mem_manager>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            T temp;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(temp,in);\n                item.add(temp);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type set_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    void set_kernel_1<T,bst_base,mem_manager>::\n    clear (\n    )\n    {\n        bst.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    void set_kernel_1<T,bst_base,mem_manager>::\n    add (\n        T& item\n    )\n    {\n        bst.add(item,junk);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    bool set_kernel_1<T,bst_base,mem_manager>::\n    is_member(\n        const T& item\n    ) const\n    {\n        return (bst[item] != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    void set_kernel_1<T,bst_base,mem_manager>::\n    remove_any (\n        T& item\n    )\n    {\n        bst.remove_any(item,junk);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    void set_kernel_1<T,bst_base,mem_manager>::\n    remove(\n        const T& item,\n        T& item_copy\n    )\n    {\n        bst.remove(item,item_copy,junk);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    void set_kernel_1<T,bst_base,mem_manager>::\n    destroy(\n        const T& item\n    )\n    {\n        bst.destroy(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    unsigned long set_kernel_1<T,bst_base,mem_manager>::\n    size (\n    ) const\n    {\n        return bst.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    void set_kernel_1<T,bst_base,mem_manager>::\n    swap (\n        set_kernel_1<T,bst_base,mem_manager>& item\n    )\n    {\n        bst.swap(item.bst);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    bool set_kernel_1<T,bst_base,mem_manager>::\n    at_start (\n    ) const\n    {\n        return bst.at_start();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    void set_kernel_1<T,bst_base,mem_manager>::\n    reset (\n    ) const\n    {\n        bst.reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    bool set_kernel_1<T,bst_base,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return bst.current_element_valid();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    const T& set_kernel_1<T,bst_base,mem_manager>::\n    element (\n    ) const\n    {\n        return bst.element().key();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    const T& set_kernel_1<T,bst_base,mem_manager>::\n    element (\n    )\n    {\n        return bst.element().key();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename bst_base,\n        typename mem_manager\n        >\n    bool set_kernel_1<T,bst_base,mem_manager>::\n    move_next (\n    ) const\n    {\n        return bst.move_next();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SET_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/set/set_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SET_KERNEl_ABSTRACT_\n#ifdef DLIB_SET_KERNEl_ABSTRACT_\n\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<T>\n        >\n    class set : public enumerable<const T>,\n                public asc_remover<T,compare>\n    {\n\n        /*!                \n            REQUIREMENTS ON T\n                T must be comparable by compare where compare is a functor compatible with std::less and\n                T must be swappable by a global swap() and\n                T must have a default constructor\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap() and is_member() functions do not invalidate pointers \n                or references to internal data.\n                All other functions have no such guarantee.\n\n            INITIAL VALUE\n                size() == 0    \n\n            ENUMERATION ORDER\n                The enumerator will iterate over the elements in the set in \n                ascending order according to the compare functor. \n                (i.e. the elements are enumerated in sorted order)\n\n            WHAT THIS OBJECT REPRESENTS\n                set contains items of type T\n\n                This object represents an unaddressed collection of items. \n                Every element in a set is unique.\n\n                definition of equivalent:\n                a is equivalent to b if\n                a < b == false and\n                b < a == false\n        !*/\n        \n        public:\n\n            typedef T type;\n            typedef compare compare_type;\n            typedef mem_manager mem_manager_type;\n\n            set(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n            !*/\n\n            virtual ~set(\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            void add (\n                T& item\n            );\n            /*!\n                requires\n                    - is_member(item) == false\n                ensures\n                    - #is_member(item) == true \n                    - #item has an initial value for its type \n                    - #size() == size() + 1\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if add() throws then it has no effect\n            !*/\n\n            bool is_member (\n                const T& item\n            ) const;\n            /*!\n                ensures\n                    - returns whether or not there is an element in *this equivalent to \n                      item\n            !*/\n\n            void remove (\n                const T& item,\n                T& item_copy\n            );\n            /*!\n                requires\n                    - is_member(item) == true\n                    - &item != &item_copy (i.e. item and item_copy cannot be the same \n                      variable) \n                ensures\n                    - #is_member(item) == false \n                    - the element in *this equivalent to item has been removed and \n                      swapped into #item_copy\n                    - #size() == size() - 1\n                    - #at_start() == true\n            !*/\n\n            void destroy (\n                const T& item\n            );\n            /*!\n                requires\n                    - is_member(item) == true\n                ensures\n                    - #is_member(item) == false \n                    - #size() == size() - 1\n                    - #at_start() == true\n            !*/\n\n            void swap (\n                set& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n    \n        private:\n\n            // restricted functions\n            set(set&);        // copy constructor\n            set& operator=(set&);    // assignment operator\n\n    };\n\n    template <\n        typename T,\n        typename mem_manager,\n        typename compare\n        >\n    inline void swap (\n        set<T,mem_manager,compare>& a, \n        set<T,mem_manager,compare>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        typename mem_manager,\n        typename compare\n        >\n    void deserialize (\n        set<T,mem_manager,compare>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_SET_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/set/set_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SET_KERNEl_C_\n#define DLIB_SET_KERNEl_C_\n\n#include \"set_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename set_base\n        >\n    class set_kernel_c : public set_base\n    {\n        typedef typename set_base::type T;\n    public:\n\n        void add (\n            T& item\n        );\n\n        void remove_any (\n            T& item\n        );\n\n        void remove (\n            const T& item,\n            T& item_copy\n        );\n\n        void destroy (\n            const T& item\n        );\n\n        const T& element (\n        );\n\n        const T& element (\n        ) const;\n    };\n\n\n    template <\n        typename set_base\n        >\n    inline void swap (\n        set_kernel_c<set_base>& a, \n        set_kernel_c<set_base>& b \n    ) { a.swap(b); } \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename set_base\n        >\n    void set_kernel_c<set_base>::\n    add(\n        T& item\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( !this->is_member(item),\n                 \"\\tvoid set::add\"\n                 << \"\\n\\titem being added must not already be in the set\"\n                 << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        set_base::add(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename set_base\n        >\n    void set_kernel_c<set_base>::\n    remove (\n        const T& item,\n        T& item_copy\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->is_member(item) &&\n                 (static_cast<const void*>(&item) != static_cast<void*>(&item_copy)),\n                 \"\\tvoid set::remove\"\n                 << \"\\n\\titem should be in the set if it's going to be removed\"\n                 << \"\\n\\tthis:            \" << this\n                 << \"\\n\\t&item:           \" << &item \n                 << \"\\n\\t&item_copy:      \" << &item_copy\n                 << \"\\n\\tis_member(item): \" << (this->is_member(item)?\"true\":\"false\")\n        );\n\n        // call the real function\n        set_base::remove(item,item_copy);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename set_base\n        >\n    void set_kernel_c<set_base>::\n    destroy (\n        const T& item\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->is_member(item), \n                 \"\\tvoid set::destroy\"\n                 << \"\\n\\titem should be in the set if it's going to be removed\"\n                 << \"\\n\\tthis:            \" << this\n                 << \"\\n\\t&item:           \" << &item \n        );\n\n        // call the real function\n        set_base::destroy(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename set_base\n        >\n    void set_kernel_c<set_base>::\n    remove_any (\n        T& item\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->size() != 0,\n                 \"\\tvoid set::remove_any\"\n                 << \"\\n\\tsize must be greater than zero if an item is to be removed\"\n                 << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        set_base::remove_any(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename set_base\n        >\n    const typename set_base::type& set_kernel_c<set_base>::\n    element (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n                \"\\tconst T& set::element() const\"\n                << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        return set_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename set_base\n        >\n    const typename set_base::type& set_kernel_c<set_base>::\n    element (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n                \"\\tconst T& set::element\"\n                << \"\\n\\tyou can't access the current element if it doesn't exist\"\n                << \"\\n\\tthis: \" << this\n        );\n\n        // call the real function\n        return set_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n}\n\n#endif // DLIB_SET_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/set.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEt_\n#define DLIB_SEt_\n\n#include \"set/set_kernel_1.h\"\n#include \"set/set_kernel_c.h\"\n\n\n\n#include \"binary_search_tree.h\"\n\n#include \"set/set_compare_1.h\"\n\n#include \"algs.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager,\n        typename compare = std::less<T>\n        >\n    class set\n    {\n        set() {}\n\n\n\n\n\n        typedef typename binary_search_tree<T,char,mem_manager,compare>::kernel_1a\n                binary_search_tree_1;\n\n        typedef typename binary_search_tree<T,char,mem_manager,compare>::kernel_2a\n                binary_search_tree_2;\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a\n        typedef     set_kernel_1<T,binary_search_tree_1,mem_manager>\n                    kernel_1a;\n        typedef     set_kernel_c<kernel_1a>\n                    kernel_1a_c;\n\n        // kernel_1b\n        typedef     set_kernel_1<T,binary_search_tree_2,mem_manager>\n                    kernel_1b;\n        typedef     set_kernel_c<kernel_1b>\n                    kernel_1b_c;\n\n\n        //---------- extensions ------------\n\n        // compare extensions\n        typedef     set_compare_1<kernel_1a>\n                    compare_1a;\n        typedef     set_compare_1<kernel_1a_c>\n                    compare_1a_c;\n\n        typedef     set_compare_1<kernel_1b>\n                    compare_1b;\n        typedef     set_compare_1<kernel_1b_c>\n                    compare_1b_c;\n\n    };\n}\n\n#endif // DLIB_SEt_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/set_utils/set_utils.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SET_UTILs_\n#define DLIB_SET_UTILs_\n\n#include \"../algs.h\"\n#include \"set_utils_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    unsigned long set_intersection_size (\n        const T& a,\n        const U& b\n    )\n    {\n        if (is_same_object(a,b))\n            return a.size();\n\n        unsigned long num = 0;\n\n        if (a.size() < b.size())\n        {\n            a.reset();\n            while (a.move_next())\n            {\n                if (b.is_member(a.element()))\n                    ++num;\n            }\n        }\n        else\n        {\n            b.reset();\n            while (b.move_next())\n            {\n                if (a.is_member(b.element()))\n                    ++num;\n            }\n        }\n\n        return num;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V\n        >\n    void set_union (\n        const T& a,\n        const U& b,\n        V& u\n    )\n    {\n        typedef typename T::type type;\n        if (is_same_object(a,u) || is_same_object(b,u))\n        {\n            V local_u;\n            type temp;\n            a.reset();\n            while (a.move_next())\n            {\n                temp = a.element();\n                local_u.add(temp);\n            }\n\n            b.reset();\n            while (b.move_next())\n            {\n                if (a.is_member(b.element()) == false)\n                {\n                    temp = b.element();\n                    local_u.add(temp);\n                }\n            }\n\n            local_u.swap(u);\n        }\n        else\n        {\n            u.clear();\n\n            type temp;\n            a.reset();\n            while (a.move_next())\n            {\n                temp = a.element();\n                u.add(temp);\n            }\n\n            b.reset();\n            while (b.move_next())\n            {\n                if (a.is_member(b.element()) == false)\n                {\n                    temp = b.element();\n                    u.add(temp);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V\n        >\n    void set_intersection (\n        const T& a,\n        const U& b,\n        V& i\n    )\n    {\n        typedef typename T::type type;\n        if (is_same_object(a,i) || is_same_object(b,i))\n        {\n            V local_i;\n\n            type temp;\n\n            if (a.size() < b.size())\n            {\n                a.reset();\n                while (a.move_next())\n                {\n                    if (b.is_member(a.element()))\n                    {\n                        temp = a.element();\n                        local_i.add(temp);\n                    }\n                }\n            }\n            else\n            {\n                b.reset();\n                while (b.move_next())\n                {\n                    if (a.is_member(b.element()))\n                    {\n                        temp = b.element();\n                        local_i.add(temp);\n                    }\n                }\n            }\n\n            local_i.swap(i);\n        }\n        else\n        {\n            i.clear();\n            type temp;\n\n            if (a.size() < b.size())\n            {\n                a.reset();\n                while (a.move_next())\n                {\n                    if (b.is_member(a.element()))\n                    {\n                        temp = a.element();\n                        i.add(temp);\n                    }\n                }\n            }\n            else\n            {\n                b.reset();\n                while (b.move_next())\n                {\n                    if (a.is_member(b.element()))\n                    {\n                        temp = b.element();\n                        i.add(temp);\n                    }\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V\n        >\n    void set_difference (\n        const T& a,\n        const U& b,\n        V& d \n    )\n    {\n        typedef typename T::type type;\n        if (is_same_object(a,d) || is_same_object(b,d))\n        {\n            V local_d;\n\n            type temp;\n\n            a.reset();\n            while (a.move_next())\n            {\n                if (b.is_member(a.element()) == false)\n                {\n                    temp = a.element();\n                    local_d.add(temp);\n                }\n            }\n\n            local_d.swap(d);\n        }\n        else\n        {\n            d.clear();\n            type temp;\n\n            a.reset();\n            while (a.move_next())\n            {\n                if (b.is_member(a.element()) == false)\n                {\n                    temp = a.element();\n                    d.add(temp);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SET_UTILs_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/set_utils/set_utils_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SET_UTILs_ABSTRACT_\n#ifdef DLIB_SET_UTILs_ABSTRACT_\n\n#include \"../set.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    unsigned long set_intersection_size (\n        const T& a,\n        const U& b\n    );\n    /*!\n        requires\n            - T and U must both be implementations of set/set_kernel_abstract.h\n        ensures\n            - returns the number of elements that are in both set a and b\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V\n        >\n    void set_union (\n        const T& a,\n        const U& b,\n        V& u\n    );\n    /*!\n        requires\n            - T, U, and V must all be implementations of set/set_kernel_abstract.h\n            - the types of objects contained in these sets must be copyable\n        ensures\n            - #u == the union of a and b.  That is, u contains all elements \n              of a and all the elements of b.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V\n        >\n    void set_intersection (\n        const T& a,\n        const U& b,\n        V& i\n    );\n    /*!\n        requires\n            - T, U, and V must all be implementations of set/set_kernel_abstract.h\n            - the types of objects contained in these sets must be copyable\n        ensures\n            - #i == the intersection of a and b.  That is, i contains all elements \n              of a that are also in b.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V\n        >\n    void set_difference (\n        const T& a,\n        const U& b,\n        V& d \n    );\n    /*!\n        requires\n            - T, U, and V must all be implementations of set/set_kernel_abstract.h\n            - the types of objects contained in these sets must be copyable\n        ensures\n            - #d == the difference of a and b.  That is, d contains all elements \n              of a that are NOT in b.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SET_UTILs_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/set_utils.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SET_UTILs_H_\n#define DLIB_SET_UTILs_H_ \n\n#include \"set_utils/set_utils.h\"\n\n#endif // DLIB_SET_UTILs_H_ \n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/simd/simd4f.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_sIMD4F_Hh_\n#define DLIB_sIMD4F_Hh_\n\n#include \"simd_check.h\"\n#include \"simd4i.h\"\n#include <cmath>\n#include <iostream>\n\nnamespace dlib\n{\n\n#ifdef DLIB_HAVE_SSE2\n    class simd4f\n    {\n    public:\n        typedef float type;\n\n        inline simd4f() {}\n        inline simd4f(float f) { x = _mm_set1_ps(f); }\n        inline simd4f(float r0, float r1, float r2, float r3) { x = _mm_setr_ps(r0,r1,r2,r3); }\n        inline simd4f(const __m128& val):x(val) {}\n        inline simd4f(const simd4i& val):x(_mm_cvtepi32_ps(val)) {}\n\n        inline simd4f& operator=(const simd4i& val)\n        {\n            x = simd4f(val);\n            return *this;\n        }\n\n        inline simd4f& operator=(const float& val)\n        {\n            x = simd4f(val);\n            return *this;\n        }\n\n        inline simd4f& operator=(const __m128& val)\n        {\n            x = val;\n            return *this;\n        }\n\n        inline operator __m128() const { return x; }\n\n        // truncate to 32bit integers\n        inline operator __m128i() const { return _mm_cvttps_epi32(x); }\n\n        inline void load_aligned(const type* ptr)  { x = _mm_load_ps(ptr); }\n        inline void store_aligned(type* ptr) const { _mm_store_ps(ptr, x); }\n        inline void load(const type* ptr)          { x = _mm_loadu_ps(ptr); }\n        inline void store(type* ptr)         const { _mm_storeu_ps(ptr, x); }\n\n        inline unsigned int size() const { return 4; }\n        inline float operator[](unsigned int idx) const \n        {\n            float temp[4];\n            store(temp);\n            return temp[idx];\n        }\n\n    private:\n        __m128 x;\n    };\n\n    class simd4f_bool\n    {\n    public:\n        typedef float type;\n\n        inline simd4f_bool() {}\n        inline simd4f_bool(const __m128& val):x(val) {}\n\n        inline simd4f_bool& operator=(const __m128& val)\n        {\n            x = val;\n            return *this;\n        }\n\n        inline operator __m128() const { return x; }\n\n\n    private:\n        __m128 x;\n    };\n#else\n    class simd4f\n    {\n    public:\n        typedef float type;\n\n        inline simd4f() {}\n        inline simd4f(float f) { x[0]=f; x[1]=f; x[2]=f; x[3]=f; }\n        inline simd4f(float r0, float r1, float r2, float r3) { x[0]=r0; x[1]=r1; x[2]=r2; x[3]=r3;}\n        inline simd4f(const simd4i& val) { x[0]=val[0]; x[1]=val[1]; x[2]=val[2]; x[3]=val[3];}\n\n        // truncate to 32bit integers\n        inline operator simd4i::rawarray() const \n        { \n            simd4i::rawarray temp;\n            temp.a[0] = (int32)x[0];\n            temp.a[1] = (int32)x[1];\n            temp.a[2] = (int32)x[2];\n            temp.a[3] = (int32)x[3];\n            return temp;\n        }\n\n        inline simd4f& operator=(const float& val)\n        {\n            *this = simd4f(val);\n            return *this;\n        }\n\n        inline simd4f& operator=(const simd4i& val)\n        {\n            x[0] = val[0];\n            x[1] = val[1];\n            x[2] = val[2];\n            x[3] = val[3];\n            return *this;\n        }\n\n\n        inline void load_aligned(const type* ptr)\n        {\n            x[0] = ptr[0];\n            x[1] = ptr[1];\n            x[2] = ptr[2];\n            x[3] = ptr[3];\n        }\n\n        inline void store_aligned(type* ptr) const\n        {\n            ptr[0] = x[0];\n            ptr[1] = x[1];\n            ptr[2] = x[2];\n            ptr[3] = x[3];\n        }\n\n        inline void load(const type* ptr)\n        {\n            x[0] = ptr[0];\n            x[1] = ptr[1];\n            x[2] = ptr[2];\n            x[3] = ptr[3];\n        }\n\n        inline void store(type* ptr) const\n        {\n            ptr[0] = x[0];\n            ptr[1] = x[1];\n            ptr[2] = x[2];\n            ptr[3] = x[3];\n        }\n\n        inline unsigned int size() const { return 4; }\n        inline float operator[](unsigned int idx) const { return x[idx]; }\n\n    private:\n        float x[4];\n    };\n\n    class simd4f_bool\n    {\n    public:\n        typedef float type;\n\n        inline simd4f_bool() {}\n        inline simd4f_bool(bool r0, bool r1, bool r2, bool r3) { x[0]=r0; x[1]=r1; x[2]=r2; x[3]=r3;}\n\n        inline bool operator[](unsigned int idx) const { return x[idx]; }\n    private:\n        bool x[4];\n    };\n#endif\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::ostream& operator<<(std::ostream& out, const simd4f& item)\n    {\n        float temp[4];\n        item.store(temp);\n        out << \"(\" << temp[0] << \", \" << temp[1] << \", \" << temp[2] << \", \" << temp[3] << \")\";\n        return out;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f operator+ (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_add_ps(lhs, rhs); \n#else\n        return simd4f(lhs[0]+rhs[0],\n                      lhs[1]+rhs[1],\n                      lhs[2]+rhs[2],\n                      lhs[3]+rhs[3]);\n#endif\n    }\n    inline simd4f& operator+= (simd4f& lhs, const simd4f& rhs) \n    { return lhs = lhs + rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f operator- (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_sub_ps(lhs, rhs); \n#else\n        return simd4f(lhs[0]-rhs[0],\n                      lhs[1]-rhs[1],\n                      lhs[2]-rhs[2],\n                      lhs[3]-rhs[3]);\n#endif\n    }\n    inline simd4f& operator-= (simd4f& lhs, const simd4f& rhs) \n    { return lhs = lhs - rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f operator* (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_mul_ps(lhs, rhs); \n#else\n        return simd4f(lhs[0]*rhs[0],\n                      lhs[1]*rhs[1],\n                      lhs[2]*rhs[2],\n                      lhs[3]*rhs[3]);\n#endif\n    }\n    inline simd4f& operator*= (simd4f& lhs, const simd4f& rhs) \n    { return lhs = lhs * rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f operator/ (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_div_ps(lhs, rhs); \n#else\n        return simd4f(lhs[0]/rhs[0],\n                      lhs[1]/rhs[1],\n                      lhs[2]/rhs[2],\n                      lhs[3]/rhs[3]);\n#endif\n    }\n    inline simd4f& operator/= (simd4f& lhs, const simd4f& rhs) \n    { return lhs = lhs / rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f_bool operator== (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_cmpeq_ps(lhs, rhs); \n#else\n        return simd4f_bool(lhs[0]==rhs[0],\n                           lhs[1]==rhs[1],\n                           lhs[2]==rhs[2],\n                           lhs[3]==rhs[3]);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f_bool operator!= (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_cmpneq_ps(lhs, rhs); \n#else\n        return simd4f_bool(lhs[0]!=rhs[0],\n                           lhs[1]!=rhs[1],\n                           lhs[2]!=rhs[2],\n                           lhs[3]!=rhs[3]);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f_bool operator< (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_cmplt_ps(lhs, rhs); \n#else\n        return simd4f_bool(lhs[0]<rhs[0],\n                           lhs[1]<rhs[1],\n                           lhs[2]<rhs[2],\n                           lhs[3]<rhs[3]);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f_bool operator> (const simd4f& lhs, const simd4f& rhs) \n    { \n        return rhs < lhs;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f_bool operator<= (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_cmple_ps(lhs, rhs); \n#else\n        return simd4f_bool(lhs[0]<=rhs[0],\n                           lhs[1]<=rhs[1],\n                           lhs[2]<=rhs[2],\n                           lhs[3]<=rhs[3]);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f_bool operator>= (const simd4f& lhs, const simd4f& rhs) \n    { \n        return rhs <= lhs;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f min (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_min_ps(lhs, rhs); \n#else\n        return simd4f(std::min(lhs[0],rhs[0]),\n                      std::min(lhs[1],rhs[1]),\n                      std::min(lhs[2],rhs[2]),\n                      std::min(lhs[3],rhs[3]));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f max (const simd4f& lhs, const simd4f& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_max_ps(lhs, rhs); \n#else\n        return simd4f(std::max(lhs[0],rhs[0]),\n                      std::max(lhs[1],rhs[1]),\n                      std::max(lhs[2],rhs[2]),\n                      std::max(lhs[3],rhs[3]));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f reciprocal (const simd4f& item) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_rcp_ps(item); \n#else\n        return simd4f(1.0f/item[0],\n                      1.0f/item[1],\n                      1.0f/item[2],\n                      1.0f/item[3]);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f reciprocal_sqrt (const simd4f& item) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_rsqrt_ps(item); \n#else\n        return simd4f(1.0f/std::sqrt(item[0]),\n                      1.0f/std::sqrt(item[1]),\n                      1.0f/std::sqrt(item[2]),\n                      1.0f/std::sqrt(item[3]));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline float dot(const simd4f& lhs, const simd4f& rhs);\n    inline float sum(const simd4f& item)\n    {\n#ifdef DLIB_HAVE_SSE41\n        return dot(simd4f(1), item);\n#elif defined(DLIB_HAVE_SSE3)\n        simd4f temp = _mm_hadd_ps(item,item);\n        return _mm_cvtss_f32(_mm_hadd_ps(temp,temp));\n#elif defined(DLIB_HAVE_SSE2) && (!defined(_MSC_VER) || _MSC_VER!=1400)\n        simd4f temp = _mm_add_ps(item,_mm_movehl_ps(item,item));\n        simd4f temp2 = _mm_shuffle_ps(temp,temp,1);\n        return _mm_cvtss_f32(_mm_add_ss(temp,temp2));\n#else\n        return item[0]+item[1]+item[2]+item[3];\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline float dot(const simd4f& lhs, const simd4f& rhs)\n    {\n#ifdef DLIB_HAVE_SSE41\n        return _mm_cvtss_f32(_mm_dp_ps(lhs, rhs, 0xff));\n#else\n        return sum(lhs*rhs);\n#endif\n    }\n   \n// ----------------------------------------------------------------------------------------\n\n    inline simd4f sqrt(const simd4f& item)\n    {\n#ifdef DLIB_HAVE_SSE2\n        return _mm_sqrt_ps(item);\n#else\n        return simd4f(std::sqrt(item[0]),\n                      std::sqrt(item[1]),\n                      std::sqrt(item[2]),\n                      std::sqrt(item[3]));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f ceil(const simd4f& item)\n    {\n#ifdef DLIB_HAVE_SSE41\n        return _mm_ceil_ps(item);\n#elif defined(DLIB_HAVE_SSE2)\n        float temp[4];\n        item.store(temp);\n        temp[0] = std::ceil(temp[0]);\n        temp[1] = std::ceil(temp[1]);\n        temp[2] = std::ceil(temp[2]);\n        temp[3] = std::ceil(temp[3]);\n        simd4f temp2;\n        temp2.load(temp);\n        return temp2;\n#else\n        return simd4f(std::ceil(item[0]),\n                      std::ceil(item[1]),\n                      std::ceil(item[2]),\n                      std::ceil(item[3]));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4f floor(const simd4f& item)\n    {\n#ifdef DLIB_HAVE_SSE41\n        return _mm_floor_ps(item);\n#elif defined(DLIB_HAVE_SSE2)\n        float temp[4];\n        item.store(temp);\n        temp[0] = std::floor(temp[0]);\n        temp[1] = std::floor(temp[1]);\n        temp[2] = std::floor(temp[2]);\n        temp[3] = std::floor(temp[3]);\n        simd4f temp2;\n        temp2.load(temp);\n        return temp2;\n#else\n        return simd4f(std::floor(item[0]),\n                      std::floor(item[1]),\n                      std::floor(item[2]),\n                      std::floor(item[3]));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // perform cmp ? a : b\n    inline simd4f select(const simd4f_bool& cmp, const simd4f& a, const simd4f& b)\n    {\n#ifdef DLIB_HAVE_SSE41\n        return _mm_blendv_ps(b,a,cmp);\n#elif defined(DLIB_HAVE_SSE2)\n        return _mm_or_ps(_mm_and_ps(cmp,a) , _mm_andnot_ps(cmp,b));\n#else\n        return simd4f(cmp[0]?a[0]:b[0],\n                      cmp[1]?a[1]:b[1],\n                      cmp[2]?a[2]:b[2],\n                      cmp[3]?a[3]:b[3]);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_sIMD4F_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/simd/simd4i.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_sIMD4I_Hh_\n#define DLIB_sIMD4I_Hh_\n\n#include \"simd_check.h\"\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n#ifdef DLIB_HAVE_SSE2\n    class simd4i\n    {\n    public:\n        typedef int32 type;\n\n        inline simd4i() {}\n        inline simd4i(int32 f) { x = _mm_set1_epi32(f); }\n        inline simd4i(int32 r0, int32 r1, int32 r2, int32 r3) { x = _mm_setr_epi32(r0,r1,r2,r3); }\n        inline simd4i(const __m128i& val):x(val) {}\n\n        inline simd4i& operator=(const __m128i& val)\n        {\n            x = val;\n            return *this;\n        }\n\n        inline operator __m128i() const { return x; }\n\n        inline void load_aligned(const type* ptr)  { x = _mm_load_si128((const __m128i*)ptr); }\n        inline void store_aligned(type* ptr) const { _mm_store_si128((__m128i*)ptr, x); }\n        inline void load(const type* ptr)          { x = _mm_loadu_si128((const __m128i*)ptr); }\n        inline void store(type* ptr)         const { _mm_storeu_si128((__m128i*)ptr, x); }\n\n        inline unsigned int size() const { return 4; }\n        inline int32 operator[](unsigned int idx) const \n        {\n            int32 temp[4];\n            store(temp);\n            return temp[idx];\n        }\n\n    private:\n        __m128i x;\n    };\n#else\n\n    class simd4i\n    {\n    public:\n        typedef int32 type;\n\n        inline simd4i() {}\n        inline simd4i(int32 f) { x[0]=f; x[1]=f; x[2]=f; x[3]=f; }\n        inline simd4i(int32 r0, int32 r1, int32 r2, int32 r3) { x[0]=r0; x[1]=r1; x[2]=r2; x[3]=r3;}\n\n        struct rawarray\n        {\n            int32 a[4];\n        };\n        inline simd4i(const rawarray& a) { x[0]=a.a[0]; x[1]=a.a[1]; x[2]=a.a[2]; x[3]=a.a[3]; }\n\n        inline void load_aligned(const type* ptr)\n        {\n            x[0] = ptr[0];\n            x[1] = ptr[1];\n            x[2] = ptr[2];\n            x[3] = ptr[3];\n        }\n\n        inline void store_aligned(type* ptr) const\n        {\n            ptr[0] = x[0];\n            ptr[1] = x[1];\n            ptr[2] = x[2];\n            ptr[3] = x[3];\n        }\n\n        inline void load(const type* ptr)\n        {\n            x[0] = ptr[0];\n            x[1] = ptr[1];\n            x[2] = ptr[2];\n            x[3] = ptr[3];\n        }\n\n        inline void store(type* ptr) const\n        {\n            ptr[0] = x[0];\n            ptr[1] = x[1];\n            ptr[2] = x[2];\n            ptr[3] = x[3];\n        }\n\n        inline unsigned int size() const { return 4; }\n        inline int32 operator[](unsigned int idx) const { return x[idx]; }\n\n    private:\n        int32 x[4];\n    };\n#endif\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::ostream& operator<<(std::ostream& out, const simd4i& item)\n    {\n        int32 temp[4];\n        item.store(temp);\n        out << \"(\" << temp[0] << \", \" << temp[1] << \", \" << temp[2] << \", \" << temp[3] << \")\";\n        return out;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator+ (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_add_epi32(lhs, rhs); \n#else\n        return simd4i(lhs[0]+rhs[0],\n                      lhs[1]+rhs[1],\n                      lhs[2]+rhs[2],\n                      lhs[3]+rhs[3]);\n#endif\n    }\n    inline simd4i& operator+= (simd4i& lhs, const simd4i& rhs) \n    { return lhs = lhs + rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator- (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_sub_epi32(lhs, rhs); \n#else\n        return simd4i(lhs[0]-rhs[0],\n                      lhs[1]-rhs[1],\n                      lhs[2]-rhs[2],\n                      lhs[3]-rhs[3]);\n#endif\n    }\n    inline simd4i& operator-= (simd4i& lhs, const simd4i& rhs) \n    { return lhs = lhs - rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator* (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE41\n        return _mm_mullo_epi32(lhs, rhs); \n#elif defined(DLIB_HAVE_SSE2)\n        int32 _lhs[4]; lhs.store(_lhs);\n        int32 _rhs[4]; rhs.store(_rhs);\n        return simd4i(_lhs[0]*_rhs[0],\n                      _lhs[1]*_rhs[1],\n                      _lhs[2]*_rhs[2],\n                      _lhs[3]*_rhs[3]);\n#else\n        return simd4i(lhs[0]*rhs[0],\n                      lhs[1]*rhs[1],\n                      lhs[2]*rhs[2],\n                      lhs[3]*rhs[3]);\n#endif\n    }\n    inline simd4i& operator*= (simd4i& lhs, const simd4i& rhs) \n    { return lhs = lhs * rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator& (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_and_si128(lhs, rhs); \n#else\n        return simd4i(lhs[0]&rhs[0],\n                      lhs[1]&rhs[1],\n                      lhs[2]&rhs[2],\n                      lhs[3]&rhs[3]);\n#endif\n    }\n    inline simd4i& operator&= (simd4i& lhs, const simd4i& rhs) \n    { return lhs = lhs & rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator| (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_or_si128(lhs, rhs); \n#else\n        return simd4i(lhs[0]|rhs[0],\n                      lhs[1]|rhs[1],\n                      lhs[2]|rhs[2],\n                      lhs[3]|rhs[3]);\n#endif\n    }\n    inline simd4i& operator|= (simd4i& lhs, const simd4i& rhs) \n    { return lhs = lhs | rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator^ (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_xor_si128(lhs, rhs); \n#else\n        return simd4i(lhs[0]^rhs[0],\n                      lhs[1]^rhs[1],\n                      lhs[2]^rhs[2],\n                      lhs[3]^rhs[3]);\n#endif\n    }\n    inline simd4i& operator^= (simd4i& lhs, const simd4i& rhs) \n    { return lhs = lhs ^ rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator~ (const simd4i& lhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_xor_si128(lhs, _mm_set1_epi32(0xFFFFFFFF)); \n#else\n        return simd4i(~lhs[0],\n                      ~lhs[1],\n                      ~lhs[2],\n                      ~lhs[3]);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator<< (const simd4i& lhs, const int& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_sll_epi32(lhs,_mm_cvtsi32_si128(rhs));\n#else\n        return simd4i(lhs[0]<<rhs,\n                      lhs[1]<<rhs,\n                      lhs[2]<<rhs,\n                      lhs[3]<<rhs);\n#endif\n    }\n    inline simd4i& operator<<= (simd4i& lhs, const int& rhs) \n    { return lhs = lhs << rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator>> (const simd4i& lhs, const int& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_sra_epi32(lhs,_mm_cvtsi32_si128(rhs));\n#else\n        return simd4i(lhs[0]>>rhs,\n                      lhs[1]>>rhs,\n                      lhs[2]>>rhs,\n                      lhs[3]>>rhs);\n#endif\n    }\n    inline simd4i& operator>>= (simd4i& lhs, const int& rhs) \n    { return lhs = lhs >> rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator== (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_cmpeq_epi32(lhs, rhs); \n#else\n        return simd4i(lhs[0]==rhs[0] ? 0xFFFFFFFF : 0,\n                      lhs[1]==rhs[1] ? 0xFFFFFFFF : 0,\n                      lhs[2]==rhs[2] ? 0xFFFFFFFF : 0,\n                      lhs[3]==rhs[3] ? 0xFFFFFFFF : 0);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator!= (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return ~(lhs==rhs);\n#else\n        return simd4i(lhs[0]!=rhs[0] ? 0xFFFFFFFF : 0,\n                      lhs[1]!=rhs[1] ? 0xFFFFFFFF : 0,\n                      lhs[2]!=rhs[2] ? 0xFFFFFFFF : 0,\n                      lhs[3]!=rhs[3] ? 0xFFFFFFFF : 0);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator< (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return _mm_cmplt_epi32(lhs, rhs); \n#else\n        return simd4i(lhs[0]<rhs[0] ? 0xFFFFFFFF : 0,\n                      lhs[1]<rhs[1] ? 0xFFFFFFFF : 0,\n                      lhs[2]<rhs[2] ? 0xFFFFFFFF : 0,\n                      lhs[3]<rhs[3] ? 0xFFFFFFFF : 0);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator> (const simd4i& lhs, const simd4i& rhs) \n    { \n        return rhs < lhs;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator<= (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE2\n        return ~(lhs > rhs); \n#else\n        return simd4i(lhs[0]<=rhs[0] ? 0xFFFFFFFF : 0,\n                      lhs[1]<=rhs[1] ? 0xFFFFFFFF : 0,\n                      lhs[2]<=rhs[2] ? 0xFFFFFFFF : 0,\n                      lhs[3]<=rhs[3] ? 0xFFFFFFFF : 0);\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i operator>= (const simd4i& lhs, const simd4i& rhs) \n    { \n        return rhs <= lhs;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i min (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE41\n        return _mm_min_epi32(lhs, rhs); \n#elif defined(DLIB_HAVE_SSE2)\n        int32 _lhs[4]; lhs.store(_lhs);\n        int32 _rhs[4]; rhs.store(_rhs);\n        return simd4i(std::min(_lhs[0],_rhs[0]),\n                      std::min(_lhs[1],_rhs[1]),\n                      std::min(_lhs[2],_rhs[2]),\n                      std::min(_lhs[3],_rhs[3]));\n#else\n        return simd4i(std::min(lhs[0],rhs[0]),\n                      std::min(lhs[1],rhs[1]),\n                      std::min(lhs[2],rhs[2]),\n                      std::min(lhs[3],rhs[3]));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd4i max (const simd4i& lhs, const simd4i& rhs) \n    { \n#ifdef DLIB_HAVE_SSE41\n        return _mm_max_epi32(lhs, rhs); \n#elif defined(DLIB_HAVE_SSE2)\n        int32 _lhs[4]; lhs.store(_lhs);\n        int32 _rhs[4]; rhs.store(_rhs);\n        return simd4i(std::max(_lhs[0],_rhs[0]),\n                      std::max(_lhs[1],_rhs[1]),\n                      std::max(_lhs[2],_rhs[2]),\n                      std::max(_lhs[3],_rhs[3]));\n#else\n        return simd4i(std::max(lhs[0],rhs[0]),\n                      std::max(lhs[1],rhs[1]),\n                      std::max(lhs[2],rhs[2]),\n                      std::max(lhs[3],rhs[3]));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline int32 sum(const simd4i& item)\n    {\n#ifdef DLIB_HAVE_SSE3\n        simd4i temp = _mm_hadd_epi32(item,item);\n        temp = _mm_hadd_epi32(temp,temp);\n        return _mm_cvtsi128_si32(temp);\n#elif defined(DLIB_HAVE_SSE2)\n        int32 temp[4];\n        item.store(temp);\n        return temp[0]+temp[1]+temp[2]+temp[3];\n#else\n        return item[0]+item[1]+item[2]+item[3];\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // perform cmp ? a : b\n    inline simd4i select(const simd4i& cmp, const simd4i& a, const simd4i& b)\n    {\n#ifdef DLIB_HAVE_SSE41\n        return _mm_blendv_epi8(b,a,cmp);\n#elif defined(DLIB_HAVE_SSE2)\n        return ((cmp&a) | _mm_andnot_si128(cmp,b));\n#else\n        return ((cmp&a) | (~cmp&b));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_sIMD4I_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/simd/simd8f.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_sIMD8F_Hh_\n#define DLIB_sIMD8F_Hh_\n\n#include \"simd_check.h\"\n#include \"simd4f.h\"\n#include \"simd8i.h\"\n\n\nnamespace dlib\n{\n#ifdef DLIB_HAVE_AVX\n    class simd8f\n    {\n    public:\n        typedef float type;\n\n        inline simd8f() {}\n        inline simd8f(const simd4f& low, const simd4f& high)\n        {\n            x = _mm256_insertf128_ps(_mm256_castps128_ps256(low),high,1);\n        }\n        inline simd8f(float f) { x = _mm256_set1_ps(f); }\n        inline simd8f(float r0, float r1, float r2, float r3, float r4, float r5, float r6, float r7) \n        { x = _mm256_setr_ps(r0,r1,r2,r3,r4,r5,r6,r7); }\n\n        inline simd8f(const simd8i& val):x(_mm256_cvtepi32_ps(val)) {}\n        inline simd8f(const __m256& val):x(val) {}\n        inline simd8f& operator=(const __m256& val)\n        {\n            x = val;\n            return *this;\n        }\n        inline operator __m256() const { return x; }\n\n        // truncate to 32bit integers\n        inline operator __m256i() const { return _mm256_cvttps_epi32(x); }\n\n        inline void load_aligned(const type* ptr)  { x = _mm256_load_ps(ptr); }\n        inline void store_aligned(type* ptr) const { _mm256_store_ps(ptr, x); }\n        inline void load(const type* ptr)          { x = _mm256_loadu_ps(ptr); }\n        inline void store(type* ptr)         const { _mm256_storeu_ps(ptr, x); }\n\n        inline unsigned int size() const { return 8; }\n        inline float operator[](unsigned int idx) const \n        {\n            float temp[8];\n            store(temp);\n            return temp[idx];\n        }\n\n        inline simd4f low() const { return _mm256_castps256_ps128(x); }\n        inline simd4f high() const { return _mm256_extractf128_ps(x,1); }\n\n    private:\n        __m256 x;\n    };\n\n\n    class simd8f_bool\n    {\n    public:\n        typedef float type;\n\n        inline simd8f_bool() {}\n        inline simd8f_bool(const __m256& val):x(val) {}\n        inline simd8f_bool(const simd4f_bool& low, const simd4f_bool& high)\n        {\n            x = _mm256_insertf128_ps(_mm256_castps128_ps256(low),high,1);\n        }\n\n        inline simd8f_bool& operator=(const __m256& val)\n        {\n            x = val;\n            return *this;\n        }\n\n        inline operator __m256() const { return x; }\n\n\n    private:\n        __m256 x;\n    };\n\n#else\n    class simd8f\n    {\n    public:\n        typedef float type;\n\n        inline simd8f() {}\n        inline simd8f(const simd4f& low_, const simd4f& high_): _low(low_),_high(high_){}\n        inline simd8f(float f) :_low(f),_high(f) {}\n        inline simd8f(float r0, float r1, float r2, float r3, float r4, float r5, float r6, float r7) :\n            _low(r0,r1,r2,r3), _high(r4,r5,r6,r7) {}\n        inline simd8f(const simd8i& val) : _low(val.low()), _high(val.high()) { }\n\n        // truncate to 32bit integers\n        inline operator simd8i::rawarray() const \n        { \n            simd8i::rawarray temp;\n            temp.low = simd4i(_low);\n            temp.high = simd4i(_high);\n            return temp;\n        }\n\n        inline void load_aligned(const type* ptr)  { _low.load_aligned(ptr); _high.load_aligned(ptr+4); }\n        inline void store_aligned(type* ptr) const { _low.store_aligned(ptr); _high.store_aligned(ptr+4); }\n        inline void load(const type* ptr)          { _low.load(ptr); _high.load(ptr+4); }\n        inline void store(type* ptr)         const { _low.store(ptr); _high.store(ptr+4); }\n\n        inline unsigned int size() const { return 8; }\n        inline float operator[](unsigned int idx) const \n        {\n            if (idx < 4)\n                return _low[idx];\n            else\n                return _high[idx-4];\n        }\n\n        inline simd4f low() const { return _low; }\n        inline simd4f high() const { return _high; }\n\n    private:\n        simd4f _low, _high;\n    };\n\n    class simd8f_bool\n    {\n    public:\n        typedef float type;\n\n        inline simd8f_bool() {}\n        inline simd8f_bool(const simd4f_bool& low_, const simd4f_bool& high_): _low(low_),_high(high_){}\n\n\n        inline simd4f_bool low() const { return _low; }\n        inline simd4f_bool high() const { return _high; }\n    private:\n        simd4f_bool _low,_high;\n    };\n#endif\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::ostream& operator<<(std::ostream& out, const simd8f& item)\n    {\n        float temp[8];\n        item.store(temp);\n        out << \"(\" << temp[0] << \", \" << temp[1] << \", \" << temp[2] << \", \" << temp[3] << \", \"\n                   << temp[4] << \", \" << temp[5] << \", \" << temp[6] << \", \" << temp[7] << \")\";\n        return out;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f operator+ (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_add_ps(lhs, rhs); \n#else\n        return simd8f(lhs.low()+rhs.low(),\n                      lhs.high()+rhs.high());\n#endif\n    }\n    inline simd8f& operator+= (simd8f& lhs, const simd8f& rhs) \n    { return lhs = lhs + rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f operator- (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_sub_ps(lhs, rhs); \n#else\n        return simd8f(lhs.low()-rhs.low(),\n                      lhs.high()-rhs.high());\n#endif\n    }\n    inline simd8f& operator-= (simd8f& lhs, const simd8f& rhs) \n    { return lhs = lhs - rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f operator* (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_mul_ps(lhs, rhs); \n#else\n        return simd8f(lhs.low()*rhs.low(),\n                      lhs.high()*rhs.high());\n#endif\n    }\n    inline simd8f& operator*= (simd8f& lhs, const simd8f& rhs) \n    { return lhs = lhs * rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f operator/ (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_div_ps(lhs, rhs); \n#else\n        return simd8f(lhs.low()/rhs.low(),\n                      lhs.high()/rhs.high());\n#endif\n    }\n    inline simd8f& operator/= (simd8f& lhs, const simd8f& rhs) \n    { return lhs = lhs / rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f_bool operator== (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_cmp_ps(lhs, rhs, 0); \n#else\n        return simd8f_bool(lhs.low() ==rhs.low(),\n                      lhs.high()==rhs.high());\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f_bool operator!= (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_cmp_ps(lhs, rhs, 4); \n#else\n        return simd8f_bool(lhs.low() !=rhs.low(),\n                      lhs.high()!=rhs.high());\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f_bool operator< (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_cmp_ps(lhs, rhs, 1); \n#else\n        return simd8f_bool(lhs.low() <rhs.low(),\n                      lhs.high()<rhs.high());\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f_bool operator> (const simd8f& lhs, const simd8f& rhs) \n    { \n        return rhs < lhs;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f_bool operator<= (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_cmp_ps(lhs, rhs, 2); \n#else\n        return simd8f_bool(lhs.low() <=rhs.low(),\n                      lhs.high()<=rhs.high());\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f_bool operator>= (const simd8f& lhs, const simd8f& rhs) \n    { \n        return rhs <= lhs;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f min (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_min_ps(lhs, rhs); \n#else\n        return simd8f(min(lhs.low(), rhs.low()),\n                      min(lhs.high(),rhs.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f max (const simd8f& lhs, const simd8f& rhs) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_max_ps(lhs, rhs); \n#else\n        return simd8f(max(lhs.low(), rhs.low()),\n                      max(lhs.high(),rhs.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f reciprocal (const simd8f& item) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_rcp_ps(item); \n#else\n        return simd8f(reciprocal(item.low()),\n                      reciprocal(item.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f reciprocal_sqrt (const simd8f& item) \n    { \n#ifdef DLIB_HAVE_AVX\n        return _mm256_rsqrt_ps(item); \n#else\n        return simd8f(reciprocal_sqrt(item.low()),\n                      reciprocal_sqrt(item.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline float sum(const simd8f& item)\n    {\n#ifdef DLIB_HAVE_AVX\n        simd8f temp = _mm256_hadd_ps(item,item);\n        simd8f temp2 = _mm256_hadd_ps(temp,temp);\n        return _mm_cvtss_f32(_mm_add_ss(_mm256_castps256_ps128(temp2),_mm256_extractf128_ps(temp2,1)));\n#else\n        return sum(item.low()+item.high()); \n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline float dot(const simd8f& lhs, const simd8f& rhs)\n    {\n        return sum(lhs*rhs);\n    }\n   \n// ----------------------------------------------------------------------------------------\n\n    inline simd8f sqrt(const simd8f& item)\n    {\n#ifdef DLIB_HAVE_AVX\n        return _mm256_sqrt_ps(item);\n#else\n        return simd8f(sqrt(item.low()),\n                      sqrt(item.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f ceil(const simd8f& item)\n    {\n#ifdef DLIB_HAVE_AVX\n        return _mm256_ceil_ps(item);\n#else\n        return simd8f(ceil(item.low()),\n                      ceil(item.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8f floor(const simd8f& item)\n    {\n#ifdef DLIB_HAVE_AVX\n        return _mm256_floor_ps(item);\n#else\n        return simd8f(floor(item.low()),\n                      floor(item.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // perform cmp ? a : b\n    inline simd8f select(const simd8f_bool& cmp, const simd8f& a, const simd8f& b)\n    {\n#ifdef DLIB_HAVE_AVX\n        return _mm256_blendv_ps(b,a,cmp);\n#else\n        return simd8f(select(cmp.low(),  a.low(),  b.low()),\n                      select(cmp.high(), a.high(), b.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_sIMD8F_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/simd/simd8i.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_sIMD8I_Hh_\n#define DLIB_sIMD8I_Hh_\n\n#include \"simd_check.h\"\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n#ifdef DLIB_HAVE_AVX\n    class simd8i\n    {\n    public:\n        typedef int32 type;\n\n        inline simd8i() {}\n        inline simd8i(int32 f) { x = _mm256_set1_epi32(f); }\n        inline simd8i(int32 r0, int32 r1, int32 r2, int32 r3,\n               int32 r4, int32 r5, int32 r6, int32 r7 ) \n        { x = _mm256_setr_epi32(r0,r1,r2,r3,r4,r5,r6,r7); }\n\n        inline simd8i(const __m256i& val):x(val) {}\n\n        inline simd8i(const simd4i& low, const simd4i& high)\n        {\n            x = _mm256_insertf128_si256(_mm256_castsi128_si256(low),high,1);\n        }\n\n        inline simd8i& operator=(const __m256i& val)\n        {\n            x = val;\n            return *this;\n        }\n\n        inline operator __m256i() const { return x; }\n\n        inline void load_aligned(const type* ptr)  { x = _mm256_load_si256((const __m256i*)ptr); }\n        inline void store_aligned(type* ptr) const { _mm256_store_si256((__m256i*)ptr, x); }\n        inline void load(const type* ptr)          { x = _mm256_loadu_si256((const __m256i*)ptr); }\n        inline void store(type* ptr)         const { _mm256_storeu_si256((__m256i*)ptr, x); }\n\n        inline simd4i low() const { return _mm256_castsi256_si128(x); }\n        inline simd4i high() const { return _mm256_extractf128_si256(x,1); }\n\n        inline unsigned int size() const { return 4; }\n        inline int32 operator[](unsigned int idx) const \n        {\n            int32 temp[8];\n            store(temp);\n            return temp[idx];\n        }\n\n    private:\n        __m256i x;\n    };\n#else\n    class simd8i\n    {\n    public:\n        typedef int32 type;\n\n        inline simd8i() {}\n        inline simd8i(const simd4i& low_, const simd4i& high_): _low(low_),_high(high_){}\n        inline simd8i(int32 f) :_low(f),_high(f) {}\n        inline simd8i(int32 r0, int32 r1, int32 r2, int32 r3, int32 r4, int32 r5, int32 r6, int32 r7) :\n            _low(r0,r1,r2,r3), _high(r4,r5,r6,r7) {}\n\n        struct rawarray\n        {\n            simd4i low, high;\n        };\n        inline simd8i(const rawarray& a) \n        { \n            _low = a.low;\n            _high = a.high;\n        }\n\n        inline void load_aligned(const type* ptr)  { _low.load_aligned(ptr); _high.load_aligned(ptr+4); }\n        inline void store_aligned(type* ptr) const { _low.store_aligned(ptr); _high.store_aligned(ptr+4); }\n        inline void load(const type* ptr)          { _low.load(ptr); _high.load(ptr+4); }\n        inline void store(type* ptr)         const { _low.store(ptr); _high.store(ptr+4); }\n\n        inline unsigned int size() const { return 8; }\n        inline int32 operator[](unsigned int idx) const \n        {\n            if (idx < 4)\n                return _low[idx];\n            else\n                return _high[idx-4];\n        }\n\n        inline simd4i low() const { return _low; }\n        inline simd4i high() const { return _high; }\n\n    private:\n        simd4i _low, _high;\n    };\n\n#endif\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::ostream& operator<<(std::ostream& out, const simd8i& item)\n    {\n        int32 temp[8];\n        item.store(temp);\n        out << \"(\" << temp[0] << \", \" << temp[1] << \", \" << temp[2] << \", \" << temp[3] << \", \"\n                   << temp[4] << \", \" << temp[5] << \", \" << temp[6] << \", \" << temp[7] << \")\";\n        return out;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator+ (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_add_epi32(lhs, rhs); \n#else\n        return simd8i(lhs.low()+rhs.low(),\n                      lhs.high()+rhs.high());\n#endif\n    }\n    inline simd8i& operator+= (simd8i& lhs, const simd8i& rhs) \n    { return lhs = lhs + rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator- (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_sub_epi32(lhs, rhs); \n#else\n        return simd8i(lhs.low()-rhs.low(),\n                      lhs.high()-rhs.high());\n#endif\n    }\n    inline simd8i& operator-= (simd8i& lhs, const simd8i& rhs) \n    { return lhs = lhs - rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator* (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_mullo_epi32(lhs, rhs); \n#else\n        return simd8i(lhs.low()*rhs.low(),\n                      lhs.high()*rhs.high());\n#endif\n    }\n    inline simd8i& operator*= (simd8i& lhs, const simd8i& rhs) \n    { return lhs = lhs * rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator& (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_and_si256(lhs, rhs); \n#else\n        return simd8i(lhs.low()&rhs.low(),\n                      lhs.high()&rhs.high());\n#endif\n    }\n    inline simd8i& operator&= (simd8i& lhs, const simd8i& rhs) \n    { return lhs = lhs & rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator| (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_or_si256(lhs, rhs); \n#else\n        return simd8i(lhs.low()|rhs.low(),\n                      lhs.high()|rhs.high());\n#endif\n    }\n    inline simd8i& operator|= (simd8i& lhs, const simd8i& rhs) \n    { return lhs = lhs | rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator^ (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_xor_si256(lhs, rhs); \n#else\n        return simd8i(lhs.low()^rhs.low(),\n                      lhs.high()^rhs.high());\n#endif\n    }\n    inline simd8i& operator^= (simd8i& lhs, const simd8i& rhs) \n    { return lhs = lhs ^ rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator~ (const simd8i& lhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_xor_si256(lhs, _mm256_set1_epi32(0xFFFFFFFF)); \n#else\n        return simd8i(~lhs.low(), ~lhs.high());\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator<< (const simd8i& lhs, const int& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_sll_epi32(lhs,_mm_cvtsi32_si128(rhs));\n#else\n        return simd8i(lhs.low()<<rhs,\n                      lhs.high()<<rhs);\n#endif\n    }\n    inline simd8i& operator<<= (simd8i& lhs, const int& rhs) \n    { return lhs = lhs << rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator>> (const simd8i& lhs, const int& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_sra_epi32(lhs,_mm_cvtsi32_si128(rhs));\n#else\n        return simd8i(lhs.low()>>rhs,\n                      lhs.high()>>rhs);\n#endif\n    }\n    inline simd8i& operator>>= (simd8i& lhs, const int& rhs) \n    { return lhs = lhs >> rhs; return lhs;}\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator== (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_cmpeq_epi32(lhs, rhs); \n#else\n        return simd8i(lhs.low()==rhs.low(),\n                      lhs.high()==rhs.high());\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator!= (const simd8i& lhs, const simd8i& rhs) \n    { \n        return ~(lhs==rhs);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator> (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_cmpgt_epi32(lhs, rhs); \n#else\n        return simd8i(lhs.low()>rhs.low(),\n                      lhs.high()>rhs.high());\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator< (const simd8i& lhs, const simd8i& rhs) \n    { \n        return rhs > lhs;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator<= (const simd8i& lhs, const simd8i& rhs) \n    { \n        return ~(lhs > rhs); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i operator>= (const simd8i& lhs, const simd8i& rhs) \n    { \n        return rhs <= lhs;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i min (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_min_epi32(lhs, rhs); \n#else\n        return simd8i(min(lhs.low(),rhs.low()),\n                      min(lhs.high(),rhs.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline simd8i max (const simd8i& lhs, const simd8i& rhs) \n    { \n#ifdef DLIB_HAVE_AVX2\n        return _mm256_max_epi32(lhs, rhs); \n#else\n        return simd8i(max(lhs.low(),rhs.low()),\n                      max(lhs.high(),rhs.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline int32 sum(const simd8i& item)\n    {\n        return sum(item.low()+item.high());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // perform cmp ? a : b\n    inline simd8i select(const simd8i& cmp, const simd8i& a, const simd8i& b)\n    {\n#ifdef DLIB_HAVE_AVX2\n        return _mm256_blendv_epi8(b,a,cmp);\n#else\n        return simd8i(select(cmp.low(),  a.low(),  b.low()),\n                      select(cmp.high(), a.high(), b.high()));\n#endif\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_sIMD8I_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/simd/simd_check.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SIMd_CHECK_Hh_\n#define DLIB_SIMd_CHECK_Hh_\n\n//#define DLIB_DO_NOT_USE_SIMD\n\n// figure out which SIMD instructions we can use.\n#ifndef DLIB_DO_NOT_USE_SIMD\n    #if defined(_MSC_VER) \n        #ifdef __AVX__\n            #define DLIB_HAVE_SSE2\n            #define DLIB_HAVE_SSE3\n            #define DLIB_HAVE_SSE41\n            #define DLIB_HAVE_AVX\n        #endif\n        #if defined(_M_IX86_FP) && _M_IX86_FP >= 2 && !defined(DLIB_HAVE_SSE2)\n            #define DLIB_HAVE_SSE2\n        #endif\n    #else\n        #ifdef __SSE2__\n            #define DLIB_HAVE_SSE2\n        #endif\n        #ifdef __SSSE3__\n            #define DLIB_HAVE_SSE3\n        #endif\n        #ifdef __SSE4_1__\n            #define DLIB_HAVE_SSE41\n        #endif\n        #ifdef __AVX__\n            #define DLIB_HAVE_AVX\n        #endif\n        #ifdef __AVX2__\n            #define DLIB_HAVE_AVX2\n        #endif\n    #endif\n#endif\n\n \n// ----------------------------------------------------------------------------------------\n\n#ifdef DLIB_HAVE_SSE2\n    #include <xmmintrin.h>\n    #include <emmintrin.h>\n    #include <mmintrin.h>\n#endif\n#ifdef DLIB_HAVE_SSE3\n    #include <pmmintrin.h> // SSE3\n    #include <tmmintrin.h>\n#endif\n#ifdef DLIB_HAVE_SSE41\n    #include <smmintrin.h> // SSE4\n#endif\n#ifdef DLIB_HAVE_AVX\n    #include <immintrin.h> // AVX\n#endif\n#ifdef DLIB_HAVE_AVX2\n    #include <avx2intrin.h>\n#endif\n\n#endif // DLIB_SIMd_CHECK_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/simd.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SIMd_Hh_\n#define DLIB_SIMd_Hh_\n\n#include \"simd/simd4f.h\"\n#include \"simd/simd4i.h\"\n#include \"simd/simd8f.h\"\n#include \"simd/simd8i.h\"\n\n#endif // DLIB_SIMd_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sliding_buffer/circular_buffer.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CIRCULAR_BuFFER_Hh_\n#define DLIB_CIRCULAR_BuFFER_Hh_\n\n#include \"circular_buffer_abstract.h\"\n#include <vector>\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../matrix/matrix_mat.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class circular_buffer\n    {\n    public:\n        typedef default_memory_manager mem_manager_type;\n        typedef T value_type;\n        typedef T type;\n\n        circular_buffer()\n        {\n            offset = 0;\n        }\n\n        void clear (\n        )\n        {\n            offset = 0;\n            data.clear();\n        }\n\n        T& operator[] ( unsigned long i) \n        { \n            DLIB_ASSERT(i < size(),\n                \"\\t T& circular_buffer::operator[](i)\"\n                << \"\\n\\t You have supplied an invalid index\"\n                << \"\\n\\t this:   \" << this\n                << \"\\n\\t i:      \" << i \n                << \"\\n\\t size(): \" << size()\n            );\n            return data[(i+offset)%data.size()]; \n        }\n\n        const T& operator[] ( unsigned long i) const \n        { \n            DLIB_ASSERT(i < size(),\n                \"\\t const T& circular_buffer::operator[](i)\"\n                << \"\\n\\t You have supplied an invalid index\"\n                << \"\\n\\t this:   \" << this\n                << \"\\n\\t i:      \" << i \n                << \"\\n\\t size(): \" << size()\n            );\n            return data[(i+offset)%data.size()]; \n        }\n\n        void resize(unsigned long size) \n        {  \n            offset = 0;\n            data.resize(size); \n        }\n\n        void assign(\n            unsigned long size, \n            const T& value\n        ) \n        { \n            offset = 0;\n            data.assign(size,value); \n        }\n\n        unsigned long size() const { return data.size(); }\n\n        void push_front(const T& value)\n        {\n            if (data.size() != 0)\n            {\n                offset = (offset - 1 + data.size())%data.size();\n                data[offset] = value;\n            }\n        }\n\n        void push_back(const T& value)\n        {\n            if (data.size() != 0)\n            {\n                data[offset] = value;\n                offset = (offset + 1 + data.size())%data.size();\n            }\n        }\n\n        T& front(\n        ) \n        { \n            DLIB_CASSERT(size() > 0,\n                \"\\t T& circular_buffer::front()\"\n                << \"\\n\\t You can't call front() on an empty circular_buffer\"\n                << \"\\n\\t this:   \" << this\n            );\n            return (*this)[0];\n        }\n\n        const T& front(\n        ) const\n        { \n            DLIB_CASSERT(size() > 0,\n                \"\\t const T& circular_buffer::front()\"\n                << \"\\n\\t You can't call front() on an empty circular_buffer\"\n                << \"\\n\\t this:   \" << this\n            );\n            return (*this)[0];\n        }\n\n        T& back(\n        ) \n        { \n            DLIB_CASSERT(size() > 0,\n                \"\\t T& circular_buffer::back()\"\n                << \"\\n\\t You can't call back() on an empty circular_buffer\"\n                << \"\\n\\t this:   \" << this\n            );\n            return (*this)[size()-1];\n        }\n\n        const T& back(\n        ) const\n        { \n            DLIB_CASSERT(size() > 0,\n                \"\\t const T& circular_buffer::back()\"\n                << \"\\n\\t You can't call back() on an empty circular_buffer\"\n                << \"\\n\\t this:   \" << this\n            );\n            return (*this)[size()-1];\n        }\n\n        void swap( circular_buffer& item)\n        {\n            std::swap(item.offset, offset);\n            data.swap(item.data);\n        }\n\n\n    private:\n        std::vector<T> data;\n\n        unsigned long offset;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void swap (\n        circular_buffer<T>& a, \n        circular_buffer<T>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void serialize (\n        const circular_buffer<T>& item, \n        std::ostream& out \n    )   \n    {\n        try\n        {\n            serialize(item.size(),out);\n            for (unsigned long i = 0; i < item.size(); ++i)\n                serialize(item[i],out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type circular_buffer\"); \n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void deserialize (\n        circular_buffer<T>& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            unsigned long size;\n            deserialize(size,in);\n            item.resize(size);\n            for (unsigned long i = 0; i < size; ++i)\n                deserialize(item[i],in);\n        }\n        catch (serialization_error& e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type circular_buffer\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_array_to_mat<circular_buffer<T> > > mat (\n        const circular_buffer<T>& m \n    )\n    {\n        typedef op_array_to_mat<circular_buffer<T> > op;\n        return matrix_op<op>(op(m));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CIRCULAR_BuFFER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sliding_buffer/circular_buffer_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CIRCULAR_BuFFER_ABSTRACT_Hh_\n#ifdef DLIB_CIRCULAR_BuFFER_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class circular_buffer\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must have a default constructor and be copyable.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap(), size(), front(), back(), and operator[] functions do \n                not invalidate pointers or references to internal data.\n                All other functions have no such guarantee.\n\n            INITIAL VALUE\n                - size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a circular buffer of objects of type T.  This means \n                that when objects are pushed onto one of its ends it does not grow \n                in size.  Instead, it shifts all elements over one to make room for \n                the new element and the element at the opposing end falls off the \n                buffer and is lost.\n        !*/\n\n    public:\n        typedef default_memory_manager mem_manager_type;\n        typedef T value_type;\n        typedef T type;\n\n        circular_buffer(\n        );\n        /*!\n            ensures\n                - #size() == 0\n                - this object is properly initialized\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - this object has its initial value\n                - #size() == 0\n        !*/\n\n        T& operator[] ( \n            unsigned long i\n        ) const;\n        /*!\n            requires\n                - i < size()\n            ensures\n                - returns a non-const reference to the i-th element of this circular buffer\n        !*/\n\n        const T& operator[] ( \n            unsigned long i\n        ) const;\n        /*!\n            requires\n                - i < size()\n            ensures\n                - returns a const reference to the i-th element of this circular buffer\n        !*/\n\n        void resize(\n            unsigned long new_size\n        ); \n        /*!\n            ensures\n                - #size() == new_size\n        !*/\n\n        void assign(\n            unsigned long new_size, \n            const T& value\n        ); \n        /*!\n            ensures\n                - #size() == new_size \n                - for all valid i:\n                    - (*this)[i] == value\n        !*/\n\n        unsigned long size(\n        ) const; \n        /*!\n            ensures\n                - returns the number of elements in this circular buffer\n        !*/\n\n        T& front(\n        );\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - returns a reference to (*this)[0]\n        !*/\n\n        const T& front(\n        ) const;\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - returns a const reference to (*this)[0]\n        !*/\n\n        T& back(\n        );\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - returns a reference to (*this)[size()-1]\n        !*/\n\n        const T& back(\n        ) const;\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - returns a const reference to (*this)[size()-1]\n        !*/\n\n        void push_front(\n            const T& value\n        );\n        /*!\n            ensures\n                - #size() == size()\n                  (i.e. the size of this object does not change)\n                - if (size() != 0) then\n                    - #front() == value\n                    - all items are shifted over such that, \n                        - #(*this)[1] == (*this)[0]\n                        - #(*this)[2] == (*this)[1]\n                        - #(*this)[3] == (*this)[2]\n                        - etc.\n                        - back() is shifted out of the circular buffer\n                - else\n                    - This function has no effect on this object \n        !*/\n\n        void push_back(\n            const T& value\n        );\n        /*!\n            ensures\n                - #size() == size()\n                  (i.e. the size of this object does not change)\n                - if (size() != 0) then\n                    - #back() == value\n                    - all items are shifted over such that, \n                        - front() is shifted out of the circular buffer \n                        - #(*this)[0] == (*this)[1]\n                        - #(*this)[1] == (*this)[2]\n                        - #(*this)[2] == (*this)[3]\n                        - etc.\n                - else\n                    - This function has no effect on this object \n        !*/\n\n        void swap (\n            circular_buffer& item\n        );\n        /*!\n            ensures\n                - swaps *this with item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void swap (\n        circular_buffer<T>& a, \n        circular_buffer<T>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T\n        >\n    void serialize (\n        const circular_buffer<T>& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        circular_buffer<T>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp mat (\n        const circular_buffer<T>& m \n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - is_col_vector(R) == true \n                - R.size() == m.size()\n                - for all valid r:\n                  R(r) == m[r]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CIRCULAR_BuFFER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sliding_buffer/sliding_buffer_kernel_1.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SLIDING_BUFFER_KERNEl_1_\n#define DLIB_SLIDING_BUFFER_KERNEl_1_\n\n#include \"sliding_buffer_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class sliding_buffer_kernel_1 : public enumerable<T>\n    {\n        /*!\n            INITIAL VALUE\n                - buffer_size == 0\n                - buffer == 0\n                - buffer_start == 0\n                - current == 0\n                - at_start_ == true\n\n            CONVENTION\n                - buffer_size == size()\n                \n                - element() == (*this)[current]\n                - current_element_valid() == (current < buffer_size) && at_start_ == false\n                - at_start() == at_start_\n\n                - if (buffer_size != 0) then                    \n                    - buffer[(buffer_start+i)&(mask)] == operator[](i)   \n                    - mask == buffer_size-1\n                - else\n                    - buffer == 0\n                    - buffer_size == 0\n        !*/\n\n    public:\n\n        typedef T type;\n\n        sliding_buffer_kernel_1 (\n        ) :\n            buffer_start(0),\n            buffer_size(0),\n            buffer(0),\n            current(0),\n            at_start_(true)\n        {}\n\n        virtual ~sliding_buffer_kernel_1 (\n        ) { if (buffer) delete [] buffer; }\n\n        void clear(\n        ) \n        {\n            buffer_size = 0; \n            if (buffer) delete [] buffer;\n            buffer = 0;\n            at_start_ = true;\n            current = 0;\n        }\n\n        void set_size (\n            unsigned long exp_size\n        )\n        {\n            at_start_ = true;\n            if (buffer) delete [] buffer;\n            buffer_size = 1;\n            while (exp_size != 0)\n            {\n                --exp_size;\n                buffer_size <<= 1;            \n            }\n            mask = buffer_size-1;\n            try { buffer = new T[buffer_size]; }\n            catch (...) { buffer = 0; buffer_size = 0; throw; }\n        }\n\n        unsigned long size (\n        ) const { return buffer_size; }\n\n        void rotate_left (\n            unsigned long amount\n        ) { buffer_start = ((buffer_start-amount)&mask); at_start_ = true; }\n\n        void rotate_right (\n            unsigned long amount\n        ) { buffer_start = ((buffer_start+amount)&mask); at_start_ = true;}\n\n        const T& operator[] (\n            unsigned long index\n        ) const { return buffer[(buffer_start+index)&mask]; }\n\n        T& operator[] (\n            unsigned long index\n        ) { return buffer[(buffer_start+index)&mask]; }\n\n        unsigned long get_element_id(\n            unsigned long index\n        ) const { return ((buffer_start+index)&mask); }\n\n        unsigned long get_element_index (\n            unsigned long element_id \n        ) const { return ((element_id-buffer_start)&mask);}\n\n        void swap (\n            sliding_buffer_kernel_1<T>& item\n        )\n        {\n            exchange(buffer_start,item.buffer_start);\n            exchange(buffer_size,item.buffer_size);\n            exchange(buffer,item.buffer);\n            exchange(mask,item.mask);\n            exchange(current,item.current);\n            exchange(at_start_,item.at_start_);\n        }\n\n\n        bool at_start (\n        ) const { return at_start_; }\n\n        void reset (\n        ) const { at_start_ = true; }\n\n        bool current_element_valid (\n        ) const { return (current < buffer_size) && (at_start_ == false); }\n\n        const T& element (\n        ) const { return (*this)[current]; }\n\n        T& element (\n        ) { return (*this)[current]; }\n\n        bool move_next (\n        ) const \n        { \n            if (at_start_ == false)\n            {\n                if (current+1 < buffer_size)\n                {\n                    ++current;\n                    return true;\n                }\n                else\n                {\n                    current = buffer_size;\n                    return false;\n                }\n            }\n            else \n            {\n                at_start_ = false;\n                current = 0;\n                return (buffer_size != 0);\n            }\n        }\n\n\n    private:\n\n        // data members\n        unsigned long buffer_start;\n        unsigned long buffer_size;\n        T* buffer;\n        unsigned long mask;\n\n\n        mutable unsigned long current;\n        mutable bool at_start_;\n\n        // restricted functions\n        sliding_buffer_kernel_1(sliding_buffer_kernel_1<T>&);        // copy constructor\n        sliding_buffer_kernel_1<T>& operator=(sliding_buffer_kernel_1<T>&);    // assignment operator\n\n    };      \n\n    template <\n        typename T\n        >\n    inline void swap (\n        sliding_buffer_kernel_1<T>& a, \n        sliding_buffer_kernel_1<T>& b \n    ) { a.swap(b); }   \n\n    template <\n        typename T\n        >\n    void deserialize (\n        sliding_buffer_kernel_1<T>& item, \n        std::istream& in\n    )   \n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            if (size > 0)\n            {\n                int count = 0;\n                while (size != 1)\n                {\n                    size /= 2;\n                    ++count;\n                }\n                item.set_size(count);\n\n                for (unsigned long i = 0; i < item.size(); ++i)\n                    deserialize(item[i],in);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type sliding_buffer_kernel_1\"); \n        }\n    }\n}\n\n#endif // DLIB_SLIDING_BUFFER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sliding_buffer/sliding_buffer_kernel_abstract.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SLIDING_BUFFER_KERNEl_ABSTRACT_\n#ifdef DLIB_SLIDING_BUFFER_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class sliding_buffer : public enumerable<T>\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must have a default constructor\n\n            INITIAL VALUE\n                size() == 0\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the elements of the sliding_buffer in the\n                order (*this)[0], (*this)[1], (*this)[2], ...\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an array of T objects.  The main\n                feature of this object is its ability to rotate its contents\n                left or right.   An example will make it clear.\n\n                suppose we have the following buffer (assuming T is a char):\n                \"some data!\"    <-- the data in the buffer\n                 9876543210     <-- the index numbers associated with each character\n\n                applying rotate_left(2) to this buffer would give us\n                \"me data!so\"\n                 9876543210\n\n                if instead of calling rotate_left we call rotate_right(3) instead we would have\n                \"ta!some da\"\n                 9876543210                              \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n        !*/\n\n    public:\n\n        typedef T type;\n\n        sliding_buffer (\n        );\n        /*!\n            ensures                \n                - #*this is properly initialized           \n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n        !*/\n\n        virtual ~sliding_buffer (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                    if this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        void set_size (\n            unsigned long exp_size\n        );\n        /*!\n            requires\n                - 0 < exp_size < 32\n            ensures\n                - #size() == 2^exp_size\n                - the value of all elements in the buffer are undefined\n                - #at_start() == true\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor.\n                    if this exception is thrown then #size() == 0\n        !*/\n\n        void rotate_left (\n            unsigned long amount\n        );\n        /*!\n            ensures\n                - for all i where 0 <= i < size():\n                  (#*this)[i] == (*this)[(i-amount)&(size()-1)]\n                  i.e. rotates the contents of *this left by amount spaces\n                - #at_start() == true\n        !*/\n\n        void rotate_right (\n            unsigned long amount\n        );\n        /*!\n            ensures\n                - for all i where 0 <= i < size():\n                  (#*this)[i] == (*this)[(i+amount)&(size()-1)]\n                  i.e. rotates the contents of *this right by amount spaces\n                - #at_start() == true\n        !*/\n\n        unsigned long get_element_id (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < size()\n            ensures \n                - returns an element id number that uniquely references the element at \n                  the given index.  (you can use this id to locate the new position of \n                  an element after the buffer has been rotated)\n                - returned value is < size()\n        !*/\n\n        unsigned long get_element_index (\n            unsigned long element_id \n        ) const;\n        /*!\n            require\n                - element_id < size()\n            ensures\n                - returns the index of the element with the given element_id.\n                  ( (*this)[get_element_index(element_id)] will always refer to the same element\n                  no matter where it has been rotated to)\n                - returned value is < size()\n        !*/\n\n        const T& operator[] (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < size()\n            ensures\n                - returns a const reference to the element in *this at position index\n        !*/\n\n        T& operator[] (\n            unsigned long index\n        );\n        /*!\n            requires\n                - index < size()\n            ensures\n                - returns a reference to the element in *this at position index\n        !*/\n\n        void swap (\n            sliding_buffer<T>& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    private:\n\n        // restricted functions\n        sliding_buffer(sliding_buffer<T>&);        // copy constructor\n        sliding_buffer<T>& operator=(sliding_buffer<T>&);    // assignment operator\n\n    };      \n\n    template <\n        typename T\n        >\n    void swap (\n        sliding_buffer<T>& a, \n        sliding_buffer<T>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sliding_buffer<T>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n}\n\n#endif // DLIB_SLIDING_BUFFER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sliding_buffer/sliding_buffer_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SLIDING_BUFFER_KERNEl_C_\n#define DLIB_SLIDING_BUFFER_KERNEl_C_\n\n#include \"sliding_buffer_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename sb_base\n        >\n    class sliding_buffer_kernel_c : public sb_base\n    {\n        typedef typename sb_base::type T;\n        \n        public:\n            void set_size (\n                unsigned long exp_size\n            );\n\n            const T& operator[] (\n                unsigned long index\n            ) const;\n\n            T& operator[] (\n                unsigned long index\n            );\n\n            unsigned long get_element_id (\n                unsigned long index\n            ) const;\n\n            unsigned long get_element_index (\n                unsigned long element_id \n            ) const;\n\n            const T& element (\n            ) const;\n\n            T& element (\n            );\n\n\n    };\n\n    template <\n        typename sb_base\n        >\n    inline void swap (\n        sliding_buffer_kernel_c<sb_base>& a, \n        sliding_buffer_kernel_c<sb_base>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sb_base\n        >\n    void sliding_buffer_kernel_c<sb_base>::\n    set_size (\n        unsigned long exp_size\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( 0 < exp_size && exp_size < 32,\n            \"\\tvoid sliding_buffer::set_size(unsigned long)\"\n            << \"\\n\\texp_size must be some number between 1 and 31\"\n            << \"\\n\\tthis:     \" << this\n            << \"\\n\\texp_size: \" << exp_size\n            );\n\n        // call the real function\n        sb_base::set_size(exp_size);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sb_base\n        >\n    unsigned long sliding_buffer_kernel_c<sb_base>::\n    get_element_id (\n        unsigned long index\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( index < this->size(),\n            \"\\tunsigned long sliding_buffer::get_element_id(unsigned long) const\"\n            << \"\\n\\tindex must be in the range 0 to size()-1\"\n            << \"\\n\\tthis:   \" << this\n            << \"\\n\\tsize(): \" << this->size()\n            << \"\\n\\tindex:  \" << index\n            );\n\n        // call the real function\n        return sb_base::get_element_id(index);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sb_base\n        >\n    unsigned long sliding_buffer_kernel_c<sb_base>::\n    get_element_index (\n        unsigned long element_id\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( element_id < this->size(),\n            \"\\tunsigned long sliding_buffer::get_element_index(unsigned long) const\"\n            << \"\\n\\tid must be in the range 0 to size()-1\"\n            << \"\\n\\tthis:   \" << this\n            << \"\\n\\tsize(): \" << this->size()\n            << \"\\n\\tid:     \" << element_id\n            );\n\n        // call the real function\n        return sb_base::get_element_index(element_id);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sb_base\n        >\n    const typename sb_base::type& sliding_buffer_kernel_c<sb_base>::\n    operator[] (\n        unsigned long index\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( index < this->size(),\n            \"\\tconst T& sliding_buffer::operator[](unsigned long) const\"\n            << \"\\n\\tindex must be in the range 0 to size()-1\"\n            << \"\\n\\tthis:   \" << this\n            << \"\\n\\tsize(): \" << this->size()\n            << \"\\n\\tindex:  \" << index\n            );\n\n        // call the real function\n        return sb_base::operator[](index);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sb_base\n        >\n    typename sb_base::type& sliding_buffer_kernel_c<sb_base>::\n    operator[] (\n        unsigned long index\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( index < this->size(),\n            \"\\tT& sliding_buffer::operator[](unsigned long)\"\n            << \"\\n\\tindex must be in the range 0 to size()-1\"\n            << \"\\n\\tthis:   \" << this\n            << \"\\n\\tsize(): \" << this->size()\n            << \"\\n\\tindex:  \" << index\n            );\n\n        // call the real function\n        return sb_base::operator[](index);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sb_base\n        >\n    const typename sb_base::type& sliding_buffer_kernel_c<sb_base>::\n    element (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tconst T& sliding_buffer::element\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return sb_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sb_base\n        >\n    typename sb_base::type& sliding_buffer_kernel_c<sb_base>::\n    element (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tT& sliding_buffer::element\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return sb_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SLIDING_BUFFER_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sliding_buffer.h",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SLIDING_BUFFEr_\n#define DLIB_SLIDING_BUFFEr_\n\n\n#include \"sliding_buffer/sliding_buffer_kernel_1.h\"\n#include \"sliding_buffer/sliding_buffer_kernel_c.h\"\n#include \"sliding_buffer/circular_buffer.h\"\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class sliding_buffer\n    {\n\n        sliding_buffer() {}\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     sliding_buffer_kernel_1<T>    \n                    kernel_1a;\n        typedef     sliding_buffer_kernel_c<kernel_1a>\n                    kernel_1a_c;\n   \n\n    };\n}\n\n#endif // DLIB_SLIDING_BUFFEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers/scoped_ptr.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SCOPED_PTr_\n#define DLIB_SCOPED_PTr_ \n\n#include <algorithm>\n#include \"../noncopyable.h\"\n#include \"../algs.h\"\n#include \"scoped_ptr_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct default_deleter\n    {\n        void operator() (T* item) const\n        {\n            delete item;\n        }\n    };\n\n    template <typename T>\n    struct default_deleter<T[]>\n    {\n        void operator() (T* item) const\n        {\n            delete [] item;\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename deleter = default_deleter<T>\n        > \n    class scoped_ptr : noncopyable \n    {\n        /*!\n            CONVENTION\n                - get() == ptr\n        !*/\n\n    public:\n        typedef T element_type;\n        typedef deleter deleter_type;\n\n        explicit scoped_ptr (\n            T* p = 0\n        ) : ptr(p) { }\n\n        ~scoped_ptr() \n        { \n            if (ptr) \n            {\n                deleter del;\n                del(ptr); \n            }\n        }\n\n        void reset (\n            T* p = 0\n        ) \n        { \n            if (ptr) \n            {\n                deleter del;\n                del(ptr); \n            }\n\n            ptr = p;\n        }\n\n        T& operator*() const\n        {\n            DLIB_ASSERT(get() != 0,\n                        \"\\tscoped_ptr::operator*()\"\n                        << \"\\n\\tget() can't be null if you are going to dereference it\"\n                        << \"\\n\\tthis: \" << this\n            );\n\n            return *ptr;\n        }\n\n        T* operator->() const\n        {\n            DLIB_ASSERT(get() != 0,\n                        \"\\tscoped_ptr::operator*()\"\n                        << \"\\n\\tget() can't be null\"\n                        << \"\\n\\tthis: \" << this\n            );\n\n            return ptr;\n        }\n\n        T* get() const\n        {\n            return ptr;\n        }\n\n        operator bool() const\n        {\n            return (ptr != 0);\n        }\n\n        void swap(\n            scoped_ptr& b\n        )\n        {\n            std::swap(ptr,b.ptr);\n        }\n\n    private:\n\n        T* ptr;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename deleter \n        > \n    class scoped_ptr<T[],deleter> : noncopyable \n    {\n        /*!\n            CONVENTION\n                - get() == ptr\n        !*/\n\n    public:\n        typedef T element_type;\n\n        explicit scoped_ptr (\n            T* p = 0\n        ) : ptr(p) { }\n\n        ~scoped_ptr() \n        { \n            if (ptr) \n            {\n                deleter del;\n                del(ptr); \n            }\n        }\n\n        void reset (\n            T* p = 0\n        ) \n        { \n            if (ptr) \n            {\n                deleter del;\n                del(ptr); \n            }\n            ptr = p;\n        }\n\n        T& operator[] (\n            unsigned long idx\n        ) const\n        {\n            DLIB_ASSERT(get() != 0,\n                        \"\\tscoped_ptr::operator[]()\"\n                        << \"\\n\\tget() can't be null if you are going to dereference it\"\n                        << \"\\n\\tthis: \" << this\n            );\n\n            return ptr[idx];\n        }\n\n        T* get() const\n        {\n            return ptr;\n        }\n\n        operator bool() const\n        {\n            return (ptr != 0);\n        }\n\n        void swap(\n            scoped_ptr& b\n        )\n        {\n            std::swap(ptr,b.ptr);\n        }\n\n    private:\n\n        T* ptr;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename deleter\n        > \n    void swap(\n        scoped_ptr<T,deleter>& a, \n        scoped_ptr<T,deleter>& b\n    )\n    {\n        a.swap(b);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SCOPED_PTr_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers/scoped_ptr_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SCOPED_PTr_ABSTRACT_\n#ifdef DLIB_SCOPED_PTr_ABSTRACT_\n\n#include \"../noncopyable.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct default_deleter\n    {\n        void operator() (\n            T* item\n        ) const;\n        /*!\n            ensures\n                - if (T is an array type (e.g. int[])) then\n                    - performs \"delete [] item;\"\n                - else\n                    - performs \"delete item;\"\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename deleter = default_deleter<T>\n        > \n    class scoped_ptr : noncopyable \n    {\n        /*!\n            REQUIREMENTS ON deleter\n                Must be a function object that performs deallocation of a pointer\n                of type T.  For example, see the default_deleter type defined above.\n                It must also not throw when constructed or when performing a delete.\n\n            INITIAL VALUE\n                defined by constructor\n\n            WHAT THIS OBJECT REPRESENTS\n                This is a smart pointer class inspired by the implementation of the scoped_ptr \n                class found in the Boost C++ library.  So this is a simple smart pointer \n                class which guarantees that the pointer contained within it will always be \n                deleted.   \n                \n                The class does not permit copying and so does not do any kind of \n                reference counting.  Thus it is very simply and quite fast.\n                \n                Note that this class allows you to use pointers to arrays as well as \n                pointers to single items.  To let it know that it is supposed to point\n                to an array you have to declare it using the bracket syntax.  Consider\n                the following examples:\n\n                    // This is how you make a scoped pointer to a single thing\n                    scoped_ptr<int> single_item(new int);\n                    \n                    // This is how you can use a scoped pointer to contain array pointers.\n                    // Note the use of [].  This ensures that the proper version of delete\n                    // is called.\n                    scoped_ptr<int[]> array_of_ints(new int[50]);\n        !*/\n\n    public:\n        typedef T element_type;\n        typedef deleter deleter_type;\n\n        explicit scoped_ptr (\n            T* p = 0\n        );\n        /*!\n            ensures\n                - #get() == p\n        !*/\n\n        ~scoped_ptr(\n        );\n        /*!\n            ensures\n                - if (get() != 0) then\n                    - calls deleter()(get())\n                      (i.e. uses the deleter type to delete the pointer that is\n                      contained in this scoped pointer)\n        !*/\n\n        void reset (\n            T* p = 0\n        );\n        /*!\n            ensures\n                - if (get() != 0) then\n                    - calls deleter()(get())\n                      (i.e. uses the deleter type to delete the pointer that is\n                      contained in this scoped pointer)\n                - #get() == p\n                  (i.e. makes this object contain a pointer to p instead of whatever it \n                  used to contain)\n        !*/\n\n        T& operator*(\n        ) const;\n        /*!\n            requires\n                - get() != 0\n                - T is NOT an array type (e.g. not int[])\n            ensures\n                - returns a reference to *get()\n        !*/\n\n        T* operator->(\n        ) const;\n        /*!\n            requires\n                - get() != 0\n                - T is NOT an array type (e.g. not int[])\n            ensures\n                - returns the pointer contained in this object\n        !*/\n\n        T& operator[](\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - get() != 0\n                - T is an array type (e.g. int[])\n            ensures\n                - returns get()[idx] \n        !*/\n\n        T* get(\n        ) const;\n        /*!\n            ensures\n                - returns the pointer contained in this object\n        !*/\n\n        operator bool(\n        ) const;\n        /*!\n            ensures\n                - returns get() != 0\n        !*/\n\n        void swap(\n            scoped_ptr& b\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n    };\n\n    template <\n        typename T\n        > \n    void swap(\n        scoped_ptr<T>& a, \n        scoped_ptr<T>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n}\n\n#endif // DLIB_SCOPED_PTr_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers/shared_ptr.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SHARED_PTr_\n#define DLIB_SHARED_PTr_ \n\n#include <algorithm>\n#include <memory>\n#include <typeinfo>\n#include <string>       // for the exceptions\n#include \"../algs.h\"\n#include \"shared_ptr_abstract.h\"\n\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    class bad_weak_ptr: public std::exception {};\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T> class weak_ptr;\n\n// ----------------------------------------------------------------------------------------\n\n    struct shared_ptr_deleter\n    {\n        virtual void del(const void* p) = 0;\n        virtual ~shared_ptr_deleter() {}\n\n        virtual void* get_deleter_void(const std::type_info& t) const = 0;\n        /*!\n            ensures\n                - if (the deleter in this object has typeid() == t) then\n                    - returns a pointer to the deleter\n                - else\n                    - return 0\n        !*/\n    };\n\n    struct shared_ptr_node;\n    struct weak_ptr_node\n    {\n        weak_ptr_node (\n            shared_ptr_node* sn\n        ) : \n            ref_count(1),\n            shared_node(sn)\n        {\n            DLIB_ASSERT(sn != 0,\"\");\n        }\n\n        long ref_count;\n        shared_ptr_node* shared_node;\n    };\n\n    struct shared_ptr_node\n    {\n        shared_ptr_node(\n        ) : \n            ref_count(1),\n            del(0),\n            weak_node(0)\n        {}\n\n        long ref_count;\n        shared_ptr_deleter* del;\n        weak_ptr_node* weak_node;\n    };\n\n    struct shared_ptr_static_cast {};\n    struct shared_ptr_const_cast {};\n    struct shared_ptr_dynamic_cast {};\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T> \n    class shared_ptr \n    {\n        /*!\n            CONVENTION\n                - get() == data\n                - unique() == (shared_node != 0) && (shared_node->ref_count == 1)\n                - if (shared_node != 0) then\n                    - use_count() == shared_node->ref_count\n                    - get() == a valid pointer\n                    - if (we are supposed to use the deleter) then\n                        - shared_node->del == the deleter to use\n                    - else\n                        - shared_node->del == 0\n                - else\n                    - use_count() == 0\n                    - get() == 0\n\n\n                - if (there are any weak_ptrs that reference this->data) then\n                    - shared_node->weak_node->ref_count == the number of referencing weak_ptrs\n                - else\n                    - shared_node->weak_node == 0\n        !*/\n\n        template <typename D>\n        struct deleter_template : public shared_ptr_deleter\n        {\n            deleter_template(const D& d_) : d(d_) {}\n            void del(const void* p) { d((T*)p); }\n            D d;\n\n            void* get_deleter_void(const std::type_info& t) const \n            {\n                if (typeid(D) == t)\n                    return (void*)&d;\n                else\n                    return 0;\n            }\n        };\n\n        struct default_deleter : public shared_ptr_deleter\n        {\n            void del(const void* p) { delete ((T*)p); }\n\n            void* get_deleter_void(const std::type_info&) const \n            {\n                return 0;\n            }\n        };\n\n    public:\n\n        typedef T element_type;\n\n        shared_ptr(\n        ) : data(0), shared_node(0) {} \n\n        template<typename Y> \n        explicit shared_ptr(\n            Y* p\n        ) : data(p)\n        {\n            DLIB_ASSERT(p != 0,\n                \"\\tshared_ptr::shared_ptr(p)\"\n                << \"\\n\\tp can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n            try\n            {\n                shared_node = new shared_ptr_node;\n                shared_node->del = new default_deleter;\n            }\n            catch (...)\n            {\n                delete p;\n                throw;\n            }\n        }\n\n        template<typename Y, typename D> \n        shared_ptr(\n            Y* p, \n            const D& d\n        ) : \n            data(p)\n        {\n            DLIB_ASSERT(p != 0,\n                \"\\tshared_ptr::shared_ptr(p,d)\"\n                << \"\\n\\tp can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n            try\n            {\n                shared_node = 0;\n                shared_node = new shared_ptr_node;\n                shared_node->del = new deleter_template<D>(d);\n            }\n            catch (...)\n            {\n                if (shared_node) delete shared_node;\n                d(p);\n                throw;\n            }\n        }\n\n        ~shared_ptr() \n        { \n            if ( shared_node != 0)\n            {\n                if (shared_node->ref_count == 1)\n                {\n                    // delete the data in the appropriate way\n                    shared_node->del->del(data);\n                    delete shared_node->del;\n\n                    // notify any weak_ptrs that the data has now expired\n                    if (shared_node->weak_node)\n                        shared_node->weak_node->shared_node = 0;\n\n                    // finally delete the shared_node\n                    delete shared_node;\n                }\n                else \n                {\n                    shared_node->ref_count -= 1;\n                }\n            }\n        }\n\n        shared_ptr( \n            const shared_ptr& r\n        ) \n        { \n            data = r.data;\n            shared_node = r.shared_node;\n            if (shared_node)\n                shared_node->ref_count += 1;\n        }\n\n        template<typename Y> \n        shared_ptr(\n            const shared_ptr<Y>& r,\n            const shared_ptr_static_cast&\n        )\n        {\n            data = static_cast<T*>(r.data);\n            if (data != 0)\n            {\n                shared_node = r.shared_node;\n                shared_node->ref_count += 1;\n            }\n            else\n            {\n                shared_node = 0;\n            }\n        }\n\n        template<typename Y> \n        shared_ptr(\n            const shared_ptr<Y>& r,\n            const shared_ptr_const_cast&\n        )\n        {\n            data = const_cast<T*>(r.data);\n            if (data != 0)\n            {\n                shared_node = r.shared_node;\n                shared_node->ref_count += 1;\n            }\n            else\n            {\n                shared_node = 0;\n            }\n        }\n\n        template<typename Y> \n        shared_ptr(\n            const shared_ptr<Y>& r,\n            const shared_ptr_dynamic_cast&\n        )\n        {\n            data = dynamic_cast<T*>(r.data);\n            if (data != 0)\n            {\n                shared_node = r.shared_node;\n                shared_node->ref_count += 1;\n            }\n            else\n            {\n                shared_node = 0;\n            }\n        }\n\n        template<typename Y> \n        shared_ptr(\n            const shared_ptr<Y>& r\n        )\n        {\n            data = r.data;\n            shared_node = r.shared_node;\n            if (shared_node)\n                shared_node->ref_count += 1;\n        }\n\n\n        template<typename Y> \n        explicit shared_ptr(\n            const weak_ptr<Y>& r\n        )\n        {\n            if (r.expired()) \n                throw bad_weak_ptr();\n\n            data = r.data;\n            shared_node = r.weak_node->shared_node;\n            shared_node->ref_count += 1;\n        }\n\n        template<typename Y>\n        explicit shared_ptr(\n            std::auto_ptr<Y>& r\n        )\n        {\n            DLIB_ASSERT(r.get() != 0,\n                \"\\tshared_ptr::shared_ptr(auto_ptr r)\"\n                << \"\\n\\tr.get() can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n            shared_node = new shared_ptr_node;\n            shared_node->del = new default_deleter;\n            data = r.release();\n        }\n\n        shared_ptr& operator= (\n            const shared_ptr& r\n        )\n        {\n            shared_ptr(r).swap(*this);\n            return *this;\n        }\n\n        template<typename Y> \n        shared_ptr& operator= (\n            const shared_ptr<Y>& r\n        )\n        {\n            shared_ptr(r).swap(*this);\n            return *this;\n        }\n\n        template<typename Y> \n        shared_ptr& operator= (\n            std::auto_ptr<Y>& r\n        )\n        {\n            DLIB_ASSERT(r.get() != 0,\n                \"\\tshared_ptr::operator=(auto_ptr r)\"\n                << \"\\n\\tr.get() can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            reset();\n            shared_node = new shared_ptr_node;\n            shared_node->del = new default_deleter;\n            data = r.release();\n            return *this;\n        }\n\n        void reset()\n        {\n            shared_ptr().swap(*this);\n        }\n\n        template<typename Y> \n        void reset(Y* p)\n        {\n            DLIB_ASSERT(p != 0,\n                \"\\tshared_ptr::reset(p)\"\n                << \"\\n\\tp can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            shared_ptr(p).swap(*this);\n        }\n\n        template<typename Y, typename D> \n        void reset(\n            Y* p, \n            const D& d\n        )\n        {\n            DLIB_ASSERT(p != 0,\n                \"\\tshared_ptr::reset(p,d)\"\n                << \"\\n\\tp can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            shared_ptr(p,d).swap(*this);\n        }\n\n        T& operator*(\n        ) const \n        { \n            DLIB_ASSERT(get() != 0,\n                \"\\tshared_ptr::operator*()\"\n                << \"\\n\\tget() can't be null if you are going to dereference it\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return *data; \n        } \n\n        T* operator->(\n        ) const \n        { \n            DLIB_ASSERT(get() != 0,\n                \"\\tshared_ptr::operator->()\"\n                << \"\\n\\tget() can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return data; \n        } \n        \n        T* get() const { return data; } \n\n        bool unique() const \n        {  \n            return use_count() == 1;\n        }\n\n        long use_count() const\n        {\n            if (shared_node != 0) \n                return shared_node->ref_count;\n            else\n                return 0;\n        }\n\n        operator bool(\n        ) const { return get() != 0; }  \n\n        void swap(shared_ptr& b)\n        {\n            std::swap(data, b.data);\n            std::swap(shared_node, b.shared_node);\n        }\n\n        template <typename D>\n        D* _get_deleter(\n        ) const\n        {\n            if (shared_node && shared_node->del)\n                return static_cast<D*>(shared_node->del->get_deleter_void(typeid(D)));\n            else\n                return 0;\n        }\n\n        template <typename Y>\n        bool _private_less (\n            const shared_ptr<Y>& rhs\n        ) const\n        {\n            return shared_node < rhs.shared_node;\n        }\n\n    private:\n\n        template <typename Y> friend class shared_ptr;\n        template <typename Y> friend class weak_ptr;\n\n        T* data;\n        shared_ptr_node* shared_node;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T, typename U>\n    bool operator== (\n        const shared_ptr<T>& a, \n        const shared_ptr<U>& b\n    ) { return a.get() == b.get(); }\n\n    template<typename T, typename U>\n    bool operator!= (\n        const shared_ptr<T>& a, \n        const shared_ptr<U>& b\n    ) { return a.get() != b.get(); }\n\n    template<typename T, typename U>\n    bool operator< (\n        const shared_ptr<T>& a, \n        const shared_ptr<U>& b\n    )\n    {\n        return a._private_less(b);\n    }\n\n    template<typename T> \n    void swap(\n        shared_ptr<T>& a, \n        shared_ptr<T>& b\n    ) { a.swap(b); }\n\n    template<typename T, typename U>\n    shared_ptr<T> static_pointer_cast(\n        const shared_ptr<U>& r\n    )\n    {\n        return shared_ptr<T>(r, shared_ptr_static_cast());\n    }\n\n    template<typename T, typename U>\n    shared_ptr<T> const_pointer_cast(\n        shared_ptr<U> const & r\n    )\n    {\n        return shared_ptr<T>(r, shared_ptr_const_cast());\n    }\n\n    template<typename T, typename U>\n    shared_ptr<T> dynamic_pointer_cast(\n        const shared_ptr<U>& r\n    )\n    {\n        return shared_ptr<T>(r, shared_ptr_dynamic_cast());\n    }\n\n    template<typename E, typename T, typename Y>\n    std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)\n    {\n        os << p.get();\n        return os;\n    }\n\n    template<typename D, typename T>\n    D* get_deleter(const shared_ptr<T>& p)\n    {\n        return p.template _get_deleter<D>();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SHARED_PTr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers/shared_ptr_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SHARED_PTr_ABSTRACT_\n#ifdef DLIB_SHARED_PTr_ABSTRACT_ \n\n#include \"weak_ptr_abstract.h\"\n#include <exception>     \n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    class bad_weak_ptr: public std::exception {}\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        > \n    class shared_ptr \n    {\n        /*!\n            INITIAL VALUE\n                defined by constructors\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a reference counted smart pointer.  Each shared_ptr\n                contains a pointer to some object and when the last shared_ptr that points\n                to the object is destructed or reset() then the object is guaranteed to be \n                deleted.\n\n                This is an implementation of the std::tr1::shared_ptr template from the \n                document ISO/IEC PDTR 19768, Proposed Draft Technical Report on C++\n                Library Extensions.  The only deviation from that document is that this \n                shared_ptr is declared inside the dlib namespace rather than std::tr1.\n\n            THREAD SAFETY\n                This object is not thread safe.  Especially so since it is\n                reference counted.  So you should take care to not have two shared_ptr\n                objects in different threads that point to the same object.\n\n                If you want a thread safe version of this object you should use the\n                dlib::shared_ptr_thread_safe object instead.\n        !*/\n\n    public:\n\n        typedef T element_type;\n\n        shared_ptr(\n        );\n        /*!\n            ensures\n                - #get() == 0\n                - #use_count() == 0\n        !*/\n\n        template<typename Y> \n        explicit shared_ptr(\n            Y* p\n        );\n        /*!\n            requires\n                - p is convertible to a T* type pointer\n                - p can be deleted by calling \"delete p;\" and doing so will not throw exceptions\n                - p != 0\n            ensures\n                - #get() == p\n                - #use_count() == 1\n                - #*this object owns the pointer p\n            throws\n                - std::bad_alloc\n                  if this exception is thrown then \"delete p;\" is called\n        !*/\n\n        template<typename Y, typename D> \n        shared_ptr(\n            Y* p, \n            const D& d\n        );\n        /*!\n            requires\n                - p is convertible to a T* type pointer\n                - D is copy constructable (and the copy constructor of D doesn't throw) \n                - p can be deleted by calling \"d(p);\" and doing so will not throw exceptions\n                - p != 0\n            ensures\n                - #get() == p\n                - #use_count() == 1\n                - #*this object owns the pointer p\n            throws\n                - std::bad_alloc\n                  if this exception is thrown then \"d(p);\" is called\n        !*/\n\n        shared_ptr( \n            const shared_ptr& r\n        );\n        /*!\n            ensures\n                - #get() == #r.get()\n                - #use_count() == #r.use_count()\n                - If r is empty, constructs an empty shared_ptr object; otherwise, constructs \n                  a shared_ptr object that shares ownership with r.\n        !*/\n\n        template<typename Y> \n        shared_ptr(\n            const shared_ptr<Y>& r\n        );\n        /*!\n            requires\n                - Y* is convertible to T* \n            ensures\n                - #get() == #r.get()\n                - #use_count() == #r.use_count()\n                - If r is empty, constructs an empty shared_ptr object; otherwise, constructs \n                  a shared_ptr object that shares ownership with r.\n        !*/\n\n        template<typename Y> \n        explicit shared_ptr(\n            const weak_ptr<Y>& r\n        );\n        /*!\n            requires\n                - Y* is convertible to T* \n            ensures\n                - #get() == #r.get()\n                - #use_count() == #r.use_count()\n                - If r is empty, constructs an empty shared_ptr object; otherwise, constructs \n                  a shared_ptr object that shares ownership with r.\n            throws\n                - bad_weak_ptr\n                  this exception is thrown if r.expired() == true\n        !*/\n\n        template<typename Y>\n        explicit shared_ptr(\n            std::auto_ptr<Y>& r\n        );\n        /*!\n            requires\n                - p.get() != 0\n                - p.release() is convertible to a T* type pointer\n                - p.release() can be deleted by calling \"delete p.release();\" and doing so will not throw exceptions\n            ensures\n                - #get() == p.release()\n                - #use_count() == 1\n                - #r.get() == 0\n                - #*this object owns the pointer p.release()\n            throws\n                - std::bad_alloc\n        !*/\n\n        ~shared_ptr(\n        );\n        /*!\n            ensures\n                - if (use_count() > 1)\n                    - this object destroys itself but otherwise has no effect (i.e. \n                      the pointer get() is still valid and shared between the remaining\n                      shared_ptr objects)\n                - else if (use_count() == 1)\n                    - deletes the pointer get() by calling delete (or using the deleter passed\n                      to the constructor if one was passed in)\n                - else\n                    - in this case get() == 0 so there is nothing to do so nothing occurs\n        !*/\n\n        shared_ptr& operator= (\n            const shared_ptr& r\n        );\n        /*!\n            ensures\n                - equivalent to shared_ptr(r).swap(*this).\n                - returns #*this\n        !*/\n\n        template<typename Y> \n        shared_ptr& operator= (\n            const shared_ptr<Y>& r\n        );\n        /*!\n            requires\n                - Y* is convertible to T* \n            ensures\n                - equivalent to shared_ptr(r).swap(*this).\n                - returns #*this\n        !*/\n\n        template<typename Y> \n        shared_ptr& operator= (\n            std::auto_ptr<Y>& r\n        );\n        /*!\n            requires\n                - p.get() != 0\n                - p.release() is convertible to a T* type pointer\n                - p.release() can be deleted by calling \"delete p.release();\" and doing so will not throw exceptions\n            ensures\n                - equivalent to shared_ptr(r).swap(*this).\n                - returns #*this\n        !*/\n\n        void reset(\n        );\n        /*!\n            ensures\n                - equivalent to shared_ptr().swap(*this)\n        !*/\n\n        template<typename Y> \n        void reset(\n            Y* p\n        );\n        /*!\n            requires\n                - p is convertible to a T* type pointer\n                - p can be deleted by calling \"delete p;\" and doing so will not throw exceptions\n                - p != 0\n            ensures\n                - equivalent to shared_ptr(p).swap(*this)\n        !*/\n\n        template<typename Y, typename D> \n        void reset(\n            Y* p, \n            const D& d\n        );\n        /*!\n            requires\n                - p is convertible to a T* type pointer\n                - D is copy constructable (and the copy constructor of D doesn't throw) \n                - p can be deleted by calling \"d(p);\" and doing so will not throw exceptions\n                - p != 0\n            ensures\n                - equivalent to shared_ptr(p,d).swap(*this)\n        !*/\n\n        T* get(\n        ) const; \n        /*!\n            ensures\n                - returns the stored pointer\n        !*/\n\n        T& operator*(\n        ) const; \n        /*!\n            requires\n                - get() != 0\n            ensures\n                - returns a reference to *get()\n        !*/\n\n        T* operator->(\n        ) const; \n        /*!\n            requires\n                - get() != 0\n            ensures\n                - returns get()\n        !*/\n\n        bool unique(\n        ) const;\n        /*!\n            ensures\n                - returns (use_count() == 1)\n        !*/\n\n        long use_count(\n        ) const;\n        /*!\n            ensures\n                - The number of shared_ptr objects, *this included, that share ownership with *this, or 0 when *this\n                  is empty.\n        !*/\n\n        operator bool(\n        ) const;\n        /*!\n            ensures\n                - returns (get() != 0)\n        !*/\n\n        void swap(\n            shared_ptr& b\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T, typename U>\n    bool operator== (\n        const shared_ptr<T>& a, \n        const shared_ptr<U>& b\n    );\n    /*!\n        ensures\n            - returns a.get() == b.get()\n    !*/\n\n    template<typename T, typename U>\n    bool operator!= (\n        const shared_ptr<T>& a, \n        const shared_ptr<U>& b\n    ) { return a.get() != b.get(); }\n    /*!\n        ensures\n            - returns a.get() != b.get()\n    !*/\n\n    template<typename T, typename U>\n    bool operator< (\n        const shared_ptr<T>& a, \n        const shared_ptr<U>& b\n    );\n    /*!\n        ensures\n            - Defines an operator< on shared_ptr types appropriate for use in the associative \n              containers.  \n    !*/\n\n    template<typename T> \n    void swap(\n        shared_ptr<T>& a, \n        shared_ptr<T>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template<typename T, typename U>\n    shared_ptr<T> static_pointer_cast(\n        const shared_ptr<U>& r\n    );\n    /*!\n        - if (r.get() == 0) then\n            - returns shared_ptr<T>()\n        - else\n            - returns a shared_ptr<T> object that stores static_cast<T*>(r.get()) and shares \n              ownership with r.\n    !*/\n\n    template<typename T, typename U>\n    shared_ptr<T> const_pointer_cast(\n        const shared_ptr<U>& r\n    );\n    /*!\n        - if (r.get() == 0) then\n            - returns shared_ptr<T>()\n        - else\n            - returns a shared_ptr<T> object that stores const_cast<T*>(r.get()) and shares \n              ownership with r.\n    !*/\n\n    template<typename T, typename U>\n    shared_ptr<T> dynamic_pointer_cast(\n        const shared_ptr<U>& r\n    );\n    /*!\n        ensures\n            - if (dynamic_cast<T*>(r.get()) returns a nonzero value) then\n                - returns a shared_ptr<T> object that stores a copy of \n                  dynamic_cast<T*>(r.get()) and shares ownership with r\n            - else\n                - returns an empty shared_ptr<T> object.\n    !*/\n\n    template<typename E, typename T, typename Y>\n    std::basic_ostream<E, T> & operator<< (\n        std::basic_ostream<E, T> & os, \n        const shared_ptr<Y>& p\n    );\n    /*!\n        ensures\n            - performs os << p.get()\n            - returns os \n    !*/\n\n    template<typename D, typename T>\n    D* get_deleter(\n        const shared_ptr<T>& p\n    );\n    /*!\n        ensures\n            - if (*this owns a deleter d of type cv-unqualified D) then\n                - returns &d\n            - else\n                - returns 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SHARED_PTr_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers/shared_ptr_thread_safe.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SHARED_THREAD_SAFE_PTr_\n#define DLIB_SHARED_THREAD_SAFE_PTr_ \n\n#include <algorithm>\n#include <memory>\n#include <typeinfo>\n#include <string>       // for the exceptions\n#include \"../algs.h\"\n#include \"shared_ptr_thread_safe_abstract.h\"\n#include \"../threads/threads_kernel.h\"\n\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct shared_ptr_thread_safe_deleter\n    {\n        virtual void del(const void* p) = 0;\n        virtual ~shared_ptr_thread_safe_deleter() {}\n\n        virtual void* get_deleter_void(const std::type_info& t) const = 0;\n        /*!\n            ensures\n                - if (the deleter in this object has typeid() == t) then\n                    - returns a pointer to the deleter\n                - else\n                    - return 0\n        !*/\n    };\n\n    struct shared_ptr_thread_safe_node\n    {\n        shared_ptr_thread_safe_node(\n        ) : \n            ref_count(1),\n            del(0)\n        {}\n\n        dlib::mutex m;\n        long ref_count;\n        shared_ptr_thread_safe_deleter* del;\n    };\n\n    struct shared_ptr_ts_static_cast {};\n    struct shared_ptr_ts_const_cast {};\n    struct shared_ptr_ts_dynamic_cast {};\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T> \n    class shared_ptr_thread_safe \n    {\n        /*!\n            CONVENTION\n                - get() == data\n                - unique() == (shared_node != 0) && (shared_node->ref_count == 1)\n                - if (shared_node != 0) then\n                    - use_count() == shared_node->ref_count\n                    - get() == a valid pointer\n                    - if (we are supposed to use the deleter) then\n                        - shared_node->del == the deleter to use\n                    - else\n                        - shared_node->del == 0\n                - else\n                    - use_count() == 0\n                    - get() == 0\n\n        !*/\n\n        template <typename D>\n        struct deleter_template : public shared_ptr_thread_safe_deleter\n        {\n            deleter_template(const D& d_) : d(d_) {}\n            void del(const void* p) { d((T*)p); }\n            D d;\n\n            void* get_deleter_void(const std::type_info& t) const \n            {\n                if (typeid(D) == t)\n                    return (void*)&d;\n                else\n                    return 0;\n            }\n        };\n\n    public:\n\n        typedef T element_type;\n\n        shared_ptr_thread_safe(\n        ) : data(0), shared_node(0) {} \n\n        template<typename Y> \n        explicit shared_ptr_thread_safe(\n            Y* p\n        ) : data(p)\n        {\n            DLIB_ASSERT(p != 0,\n                \"\\tshared_ptr::shared_ptr_thread_safe(p)\"\n                << \"\\n\\tp can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n            try\n            {\n                shared_node = new shared_ptr_thread_safe_node;\n            }\n            catch (...)\n            {\n                delete p;\n                throw;\n            }\n        }\n\n        template<typename Y, typename D> \n        shared_ptr_thread_safe(\n            Y* p, \n            const D& d\n        ) : \n            data(p)\n        {\n            DLIB_ASSERT(p != 0,\n                \"\\tshared_ptr::shared_ptr_thread_safe(p,d)\"\n                << \"\\n\\tp can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n            try\n            {\n                shared_node = 0;\n                shared_node = new shared_ptr_thread_safe_node;\n                shared_node->del = new deleter_template<D>(d);\n            }\n            catch (...)\n            {\n                if (shared_node) delete shared_node;\n                d(p);\n                throw;\n            }\n        }\n\n        ~shared_ptr_thread_safe() \n        { \n            if ( shared_node != 0)\n            {\n                shared_node->m.lock();\n                if (shared_node->ref_count == 1)\n                {\n                    // delete the data in the appropriate way\n                    if (shared_node->del)\n                    {\n                        shared_node->del->del(data);\n                        \n                        shared_node->m.unlock();\n                        delete shared_node->del;\n                    }\n                    else\n                    {\n                        shared_node->m.unlock();\n                        delete data;\n                    }\n\n                    // finally delete the shared_node\n                    delete shared_node;\n                }\n                else \n                {\n                    shared_node->ref_count -= 1;\n                    shared_node->m.unlock();\n                }\n            }\n        }\n\n        shared_ptr_thread_safe( \n            const shared_ptr_thread_safe& r\n        ) \n        { \n            data = r.data;\n            shared_node = r.shared_node;\n            if (shared_node)\n            {\n                auto_mutex M(shared_node->m);\n                shared_node->ref_count += 1;\n            }\n        }\n\n        template<typename Y> \n        shared_ptr_thread_safe(\n            const shared_ptr_thread_safe<Y>& r,\n            const shared_ptr_ts_static_cast&\n        )\n        {\n            data = static_cast<T*>(r.data);\n            if (data != 0)\n            {\n                shared_node = r.shared_node;\n                auto_mutex M(shared_node->m);\n                shared_node->ref_count += 1;\n            }\n            else\n            {\n                shared_node = 0;\n            }\n        }\n\n        template<typename Y> \n        shared_ptr_thread_safe(\n            const shared_ptr_thread_safe<Y>& r,\n            const shared_ptr_ts_const_cast&\n        )\n        {\n            data = const_cast<T*>(r.data);\n            if (data != 0)\n            {\n                shared_node = r.shared_node;\n                auto_mutex M(shared_node->m);\n                shared_node->ref_count += 1;\n            }\n            else\n            {\n                shared_node = 0;\n            }\n        }\n\n        template<typename Y> \n        shared_ptr_thread_safe(\n            const shared_ptr_thread_safe<Y>& r,\n            const shared_ptr_ts_dynamic_cast&\n        )\n        {\n            data = dynamic_cast<T*>(r.data);\n            if (data != 0)\n            {\n                shared_node = r.shared_node;\n                auto_mutex M(shared_node->m);\n                shared_node->ref_count += 1;\n            }\n            else\n            {\n                shared_node = 0;\n            }\n        }\n\n        template<typename Y> \n        shared_ptr_thread_safe(\n            const shared_ptr_thread_safe<Y>& r\n        )\n        {\n            data = r.data;\n            shared_node = r.shared_node;\n            if (shared_node)\n            {\n                auto_mutex M(shared_node->m);\n                shared_node->ref_count += 1;\n            }\n        }\n\n\n        template<typename Y>\n        explicit shared_ptr_thread_safe(\n            std::auto_ptr<Y>& r\n        )\n        {\n            DLIB_ASSERT(r.get() != 0,\n                \"\\tshared_ptr::shared_ptr_thread_safe(auto_ptr r)\"\n                << \"\\n\\tr.get() can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n            shared_node = new shared_ptr_thread_safe_node;\n            data = r.release();\n        }\n\n        shared_ptr_thread_safe& operator= (\n            const shared_ptr_thread_safe& r\n        )\n        {\n            shared_ptr_thread_safe(r).swap(*this);\n            return *this;\n        }\n\n        template<typename Y> \n        shared_ptr_thread_safe& operator= (\n            const shared_ptr_thread_safe<Y>& r\n        )\n        {\n            shared_ptr_thread_safe(r).swap(*this);\n            return *this;\n        }\n\n        template<typename Y> \n        shared_ptr_thread_safe& operator= (\n            std::auto_ptr<Y>& r\n        )\n        {\n            DLIB_ASSERT(r.get() != 0,\n                \"\\tshared_ptr::operator=(auto_ptr r)\"\n                << \"\\n\\tr.get() can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            reset();\n            shared_node = new shared_ptr_thread_safe_node;\n            data = r.release();\n            return *this;\n        }\n\n        void reset()\n        {\n            shared_ptr_thread_safe().swap(*this);\n        }\n\n        template<typename Y> \n        void reset(Y* p)\n        {\n            DLIB_ASSERT(p != 0,\n                \"\\tshared_ptr::reset(p)\"\n                << \"\\n\\tp can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            shared_ptr_thread_safe(p).swap(*this);\n        }\n\n        template<typename Y, typename D> \n        void reset(\n            Y* p, \n            const D& d\n        )\n        {\n            DLIB_ASSERT(p != 0,\n                \"\\tshared_ptr::reset(p,d)\"\n                << \"\\n\\tp can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            shared_ptr_thread_safe(p,d).swap(*this);\n        }\n\n        T& operator*(\n        ) const \n        { \n            DLIB_ASSERT(get() != 0,\n                \"\\tshared_ptr::operator*()\"\n                << \"\\n\\tget() can't be null if you are going to dereference it\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return *data; \n        } \n\n        T* operator->(\n        ) const \n        { \n            DLIB_ASSERT(get() != 0,\n                \"\\tshared_ptr::operator->()\"\n                << \"\\n\\tget() can't be null\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return data; \n        } \n        \n        T* get() const { return data; } \n\n        bool unique() const \n        {  \n            return use_count() == 1;\n        }\n\n        long use_count() const\n        {\n            if (shared_node != 0) \n            {\n                auto_mutex M(shared_node->m);\n                return shared_node->ref_count;\n            }\n            else\n            {\n                return 0;\n            }\n        }\n\n        operator bool(\n        ) const { return get() != 0; }  \n\n        void swap(shared_ptr_thread_safe& b)\n        {\n            std::swap(data, b.data);\n            std::swap(shared_node, b.shared_node);\n        }\n\n        template <typename D>\n        D* _get_deleter(\n        ) const\n        {\n            if (shared_node)\n            {\n                auto_mutex M(shared_node->m);\n                if (shared_node->del)\n                    return static_cast<D*>(shared_node->del->get_deleter_void(typeid(D)));\n            }\n            else\n            {\n                return 0;\n            }\n        }\n\n        template <typename Y>\n        bool _private_less (\n            const shared_ptr_thread_safe<Y>& rhs\n        ) const\n        {\n            return shared_node < rhs.shared_node;\n        }\n\n    private:\n\n        template <typename Y> friend class shared_ptr_thread_safe;\n\n        T* data;\n        shared_ptr_thread_safe_node* shared_node;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T, typename U>\n    bool operator== (\n        const shared_ptr_thread_safe<T>& a, \n        const shared_ptr_thread_safe<U>& b\n    ) { return a.get() == b.get(); }\n\n    template<typename T, typename U>\n    bool operator!= (\n        const shared_ptr_thread_safe<T>& a, \n        const shared_ptr_thread_safe<U>& b\n    ) { return a.get() != b.get(); }\n\n    template<typename T, typename U>\n    bool operator< (\n        const shared_ptr_thread_safe<T>& a, \n        const shared_ptr_thread_safe<U>& b\n    )\n    {\n        return a._private_less(b);\n    }\n\n    template<typename T> \n    void swap(\n        shared_ptr_thread_safe<T>& a, \n        shared_ptr_thread_safe<T>& b\n    ) { a.swap(b); }\n\n    template<typename T, typename U>\n    shared_ptr_thread_safe<T> static_pointer_cast(\n        const shared_ptr_thread_safe<U>& r\n    )\n    {\n        return shared_ptr_thread_safe<T>(r, shared_ptr_ts_static_cast());\n    }\n\n    template<typename T, typename U>\n    shared_ptr_thread_safe<T> const_pointer_cast(\n        shared_ptr_thread_safe<U> const & r\n    )\n    {\n        return shared_ptr_thread_safe<T>(r, shared_ptr_ts_const_cast());\n    }\n\n    template<typename T, typename U>\n    shared_ptr_thread_safe<T> dynamic_pointer_cast(\n        const shared_ptr_thread_safe<U>& r\n    )\n    {\n        return shared_ptr_thread_safe<T>(r, shared_ptr_ts_dynamic_cast());\n    }\n\n    template<typename E, typename T, typename Y>\n    std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr_thread_safe<Y> const & p)\n    {\n        os << p.get();\n        return os;\n    }\n\n    template<typename D, typename T>\n    D* get_deleter(const shared_ptr_thread_safe<T>& p)\n    {\n        return p.template _get_deleter<D>();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SHARED_THREAD_SAFE_PTr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers/shared_ptr_thread_safe_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SHARED_PTr_THREAD_SAFE_ABSTRACT_\n#ifdef DLIB_SHARED_PTr_THREAD_SAFE_ABSTRACT_ \n\n#include <exception>     \n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        > \n    class shared_ptr_thread_safe \n    {\n        /*!\n            INITIAL VALUE\n                defined by constructors\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a reference counted smart pointer.  Each shared_ptr_thread_safe\n                contains a pointer to some object and when the last shared_ptr_thread_safe that points\n                to the object is destructed or reset() then the object is guaranteed to be \n                deleted.\n\n                This is an implementation of the std::tr1::shared_ptr template from the \n                document ISO/IEC PDTR 19768, Proposed Draft Technical Report on C++\n                Library Extensions.  The only deviation from that document is that this \n                shared_ptr_thread_safe is declared inside the dlib namespace rather than std::tr1,\n                this one is explicitly thread safe, and there isn't a corresponding weak_ptr.\n\n            THREAD SAFETY\n                This is a version of the shared_ptr object that can be used to share pointers\n                across more than one thread.  Note however, that individual instances of this object\n                must still have access to them serialized by a mutex lock if they are to be modified\n                by more than one thread.  But if you have two different shared_ptr_thread_safe objects\n                that both point to the same thing from different threads then you are safe.\n        !*/\n\n    public:\n\n        typedef T element_type;\n\n        shared_ptr_thread_safe(\n        );\n        /*!\n            ensures\n                - #get() == 0\n                - #use_count() == 0\n        !*/\n\n        template<typename Y> \n        explicit shared_ptr_thread_safe(\n            Y* p\n        );\n        /*!\n            requires\n                - p is convertible to a T* type pointer\n                - p can be deleted by calling \"delete p;\" and doing so will not throw exceptions\n                - p != 0\n            ensures\n                - #get() == p\n                - #use_count() == 1\n                - #*this object owns the pointer p\n            throws\n                - std::bad_alloc\n                  if this exception is thrown then \"delete p;\" is called\n        !*/\n\n        template<typename Y, typename D> \n        shared_ptr_thread_safe(\n            Y* p, \n            const D& d\n        );\n        /*!\n            requires\n                - p is convertible to a T* type pointer\n                - D is copy constructable (and the copy constructor of D doesn't throw) \n                - p can be deleted by calling \"d(p);\" and doing so will not throw exceptions\n                - p != 0\n            ensures\n                - #get() == p\n                - #use_count() == 1\n                - #*this object owns the pointer p\n            throws\n                - std::bad_alloc\n                  if this exception is thrown then \"d(p);\" is called\n        !*/\n\n        shared_ptr_thread_safe( \n            const shared_ptr_thread_safe& r\n        );\n        /*!\n            ensures\n                - #get() == #r.get()\n                - #use_count() == #r.use_count()\n                - If r is empty, constructs an empty shared_ptr_thread_safe object; otherwise, constructs \n                  a shared_ptr_thread_safe object that shares ownership with r.\n        !*/\n\n        template<typename Y> \n        shared_ptr_thread_safe(\n            const shared_ptr_thread_safe<Y>& r\n        );\n        /*!\n            requires\n                - Y* is convertible to T* \n            ensures\n                - #get() == #r.get()\n                - #use_count() == #r.use_count()\n                - If r is empty, constructs an empty shared_ptr_thread_safe object; otherwise, constructs \n                  a shared_ptr_thread_safe object that shares ownership with r.\n        !*/\n\n        template<typename Y>\n        explicit shared_ptr_thread_safe(\n            std::auto_ptr<Y>& r\n        );\n        /*!\n            requires\n                - p.get() != 0\n                - p.release() is convertible to a T* type pointer\n                - p.release() can be deleted by calling \"delete p.release();\" and doing so will not throw exceptions\n            ensures\n                - #get() == p.release()\n                - #use_count() == 1\n                - #r.get() == 0\n                - #*this object owns the pointer p.release()\n            throws\n                - std::bad_alloc\n        !*/\n\n        ~shared_ptr_thread_safe(\n        );\n        /*!\n            ensures\n                - if (use_count() > 1)\n                    - this object destroys itself but otherwise has no effect (i.e. \n                      the pointer get() is still valid and shared between the remaining\n                      shared_ptr_thread_safe objects)\n                - else if (use_count() == 1)\n                    - deletes the pointer get() by calling delete (or using the deleter passed\n                      to the constructor if one was passed in)\n                - else\n                    - in this case get() == 0 so there is nothing to do so nothing occurs\n        !*/\n\n        shared_ptr_thread_safe& operator= (\n            const shared_ptr_thread_safe& r\n        );\n        /*!\n            ensures\n                - equivalent to shared_ptr_thread_safe(r).swap(*this).\n                - returns #*this\n        !*/\n\n        template<typename Y> \n        shared_ptr_thread_safe& operator= (\n            const shared_ptr_thread_safe<Y>& r\n        );\n        /*!\n            requires\n                - Y* is convertible to T* \n            ensures\n                - equivalent to shared_ptr_thread_safe(r).swap(*this).\n                - returns #*this\n        !*/\n\n        template<typename Y> \n        shared_ptr_thread_safe& operator= (\n            std::auto_ptr<Y>& r\n        );\n        /*!\n            requires\n                - p.get() != 0\n                - p.release() is convertible to a T* type pointer\n                - p.release() can be deleted by calling \"delete p.release();\" and doing so will not throw exceptions\n            ensures\n                - equivalent to shared_ptr_thread_safe(r).swap(*this).\n                - returns #*this\n        !*/\n\n        void reset(\n        );\n        /*!\n            ensures\n                - equivalent to shared_ptr_thread_safe().swap(*this)\n        !*/\n\n        template<typename Y> \n        void reset(\n            Y* p\n        );\n        /*!\n            requires\n                - p is convertible to a T* type pointer\n                - p can be deleted by calling \"delete p;\" and doing so will not throw exceptions\n                - p != 0\n            ensures\n                - equivalent to shared_ptr_thread_safe(p).swap(*this)\n        !*/\n\n        template<typename Y, typename D> \n        void reset(\n            Y* p, \n            const D& d\n        );\n        /*!\n            requires\n                - p is convertible to a T* type pointer\n                - D is copy constructable (and the copy constructor of D doesn't throw) \n                - p can be deleted by calling \"d(p);\" and doing so will not throw exceptions\n                - p != 0\n            ensures\n                - equivalent to shared_ptr_thread_safe(p,d).swap(*this)\n        !*/\n\n        T* get(\n        ) const; \n        /*!\n            ensures\n                - returns the stored pointer\n        !*/\n\n        T& operator*(\n        ) const; \n        /*!\n            requires\n                - get() != 0\n            ensures\n                - returns a reference to *get()\n        !*/\n\n        T* operator->(\n        ) const; \n        /*!\n            requires\n                - get() != 0\n            ensures\n                - returns get()\n        !*/\n\n        bool unique(\n        ) const;\n        /*!\n            ensures\n                - returns (use_count() == 1)\n        !*/\n\n        long use_count(\n        ) const;\n        /*!\n            ensures\n                - The number of shared_ptr_thread_safe objects, *this included, that share ownership with *this, or 0 when *this\n                  is empty.\n        !*/\n\n        operator bool(\n        ) const;\n        /*!\n            ensures\n                - returns (get() != 0)\n        !*/\n\n        void swap(\n            shared_ptr_thread_safe& b\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template<typename T, typename U>\n    bool operator== (\n        const shared_ptr_thread_safe<T>& a, \n        const shared_ptr_thread_safe<U>& b\n    );\n    /*!\n        ensures\n            - returns a.get() == b.get()\n    !*/\n\n    template<typename T, typename U>\n    bool operator!= (\n        const shared_ptr_thread_safe<T>& a, \n        const shared_ptr_thread_safe<U>& b\n    ) { return a.get() != b.get(); }\n    /*!\n        ensures\n            - returns a.get() != b.get()\n    !*/\n\n    template<typename T, typename U>\n    bool operator< (\n        const shared_ptr_thread_safe<T>& a, \n        const shared_ptr_thread_safe<U>& b\n    );\n    /*!\n        ensures\n            - Defines an operator< on shared_ptr_thread_safe types appropriate for use in the associative \n              containers.  \n    !*/\n\n    template<typename T> \n    void swap(\n        shared_ptr_thread_safe<T>& a, \n        shared_ptr_thread_safe<T>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template<typename T, typename U>\n    shared_ptr_thread_safe<T> static_pointer_cast(\n        const shared_ptr_thread_safe<U>& r\n    );\n    /*!\n        - if (r.get() == 0) then\n            - returns shared_ptr_thread_safe<T>()\n        - else\n            - returns a shared_ptr_thread_safe<T> object that stores static_cast<T*>(r.get()) and shares \n              ownership with r.\n    !*/\n\n    template<typename T, typename U>\n    shared_ptr_thread_safe<T> const_pointer_cast(\n        const shared_ptr_thread_safe<U>& r\n    );\n    /*!\n        - if (r.get() == 0) then\n            - returns shared_ptr_thread_safe<T>()\n        - else\n            - returns a shared_ptr_thread_safe<T> object that stores const_cast<T*>(r.get()) and shares \n              ownership with r.\n    !*/\n\n    template<typename T, typename U>\n    shared_ptr_thread_safe<T> dynamic_pointer_cast(\n        const shared_ptr_thread_safe<U>& r\n    );\n    /*!\n        ensures\n            - if (dynamic_cast<T*>(r.get()) returns a nonzero value) then\n                - returns a shared_ptr_thread_safe<T> object that stores a copy of \n                  dynamic_cast<T*>(r.get()) and shares ownership with r\n            - else\n                - returns an empty shared_ptr_thread_safe<T> object.\n    !*/\n\n    template<typename E, typename T, typename Y>\n    std::basic_ostream<E, T> & operator<< (\n        std::basic_ostream<E, T> & os, \n        const shared_ptr_thread_safe<Y>& p\n    );\n    /*!\n        ensures\n            - performs os << p.get()\n            - returns os \n    !*/\n\n    template<typename D, typename T>\n    D* get_deleter(\n        const shared_ptr_thread_safe<T>& p\n    );\n    /*!\n        ensures\n            - if (*this owns a deleter d of type cv-unqualified D) then\n                - returns &d\n            - else\n                - returns 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SHARED_PTr_THREAD_SAFE_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers/weak_ptr.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_WEAK_PTr_\n#define DLIB_WEAK_PTr_ \n\n#include <algorithm>\n#include <memory>\n#include \"shared_ptr.h\"\n#include \"../algs.h\"\n#include \"weak_ptr_abstract.h\"\n\nnamespace dlib {\n\n    template <\n        typename T\n        > \n    class weak_ptr \n    {\n\n        /*!\n            CONVENTION\n                - if (weak_node != 0) then\n                    - data == valid pointer to shared data\n                    - weak_node->ref_count == the number of weak_ptrs that reference this->data\n                - else\n                    - data == 0\n\n                - expired() == ((weak_node == 0) || (weak_node->shared_node == 0))\n                - if (expired() == false) then\n                    - use_count() == weak_node->shared_node->ref_count\n                - else\n                    - use_count() == 0\n        !*/\n\n    public:\n        typedef T element_type;\n\n        weak_ptr(\n        ) : data(0), weak_node(0)\n        {\n        }\n\n        template<typename Y> \n        weak_ptr(\n            const shared_ptr<Y>& r\n        ) \n        {\n            data = r.data;\n            if (r.shared_node)\n            {\n                if (r.shared_node->weak_node)\n                {\n                    weak_node = r.shared_node->weak_node;\n                    weak_node->ref_count += 1;\n                }\n                else\n                {\n                    weak_node = new weak_ptr_node(r.shared_node); \n                    r.shared_node->weak_node = weak_node;\n                }\n            }\n            else\n            {\n                weak_node = 0;\n            }\n        }\n\n        weak_ptr(\n            const weak_ptr& r\n        )\n        {\n            data = r.data;\n            weak_node = r.weak_node;\n            if (weak_node)\n                weak_node->ref_count += 1;\n        }\n\n        template<typename Y> \n        weak_ptr(\n            const weak_ptr<Y>& r\n        )\n        {\n            data = r.data;\n            weak_node = r.weak_node;\n            if (weak_node)\n                weak_node->ref_count += 1;\n        }\n\n        ~weak_ptr(\n        )\n        {\n            if (weak_node)\n            {\n                // make note that this weak_ptr is being destroyed\n                weak_node->ref_count -= 1;\n\n                // if this is the last weak_ptr then we should clean up our stuff\n                if (weak_node->ref_count == 0)\n                {\n                    if (expired() == false)\n                        weak_node->shared_node->weak_node = 0;\n                    delete weak_node;\n                }\n            }\n        }\n\n        weak_ptr& operator= (\n            const weak_ptr& r\n        )\n        {\n            weak_ptr(r).swap(*this);\n            return *this;\n        }\n\n        template<typename Y> \n        weak_ptr& operator= (\n            const weak_ptr<Y>& r\n        )\n        {\n            weak_ptr(r).swap(*this);\n            return *this;\n        }\n\n        template<typename Y> \n        weak_ptr& operator=(\n            const shared_ptr<Y>& r\n        )\n        {\n            weak_ptr(r).swap(*this);\n            return *this;\n        }\n\n        long use_count(\n        ) const\n        {\n            if (expired())\n                return 0;\n            else\n                return weak_node->shared_node->ref_count;\n        }\n\n        bool expired() const { return weak_node == 0 || weak_node->shared_node == 0; }\n\n        shared_ptr<T> lock(\n        ) const \n        {\n            if (expired())\n                return shared_ptr<T>();\n            else\n                return shared_ptr<T>(*this);\n        }\n\n        void reset(\n        )\n        {\n            weak_ptr().swap(*this);\n        }\n\n        void swap(\n            weak_ptr<T>& b\n        )\n        {\n            std::swap(data, b.data);\n            std::swap(weak_node, b.weak_node);\n        }\n\n        template <typename Y>\n        bool _private_less (\n            const weak_ptr<Y>& rhs\n        ) const\n        {\n            if (expired())\n            {\n                if (rhs.expired())\n                {\n                    return false;\n                }\n                else\n                {\n                    return true;\n                }\n            }\n            else\n            {\n                if (rhs.expired())\n                {\n                    return false;\n                }\n                else\n                {\n                    // in this case they have both not expired so lets\n                    // compare the shared_node pointers\n                    return (weak_node->shared_node) < (rhs.weak_node->shared_node);\n                }\n            }\n        }\n\n    private:\n\n        template <typename Y> friend class shared_ptr;\n        template <typename Y> friend class weak_ptr;\n\n        T* data;\n        weak_ptr_node* weak_node;\n    };\n\n    template<typename T, typename U>\n    bool operator< (\n        const weak_ptr<T>& a, \n        const weak_ptr<U>& b\n    )\n    {\n        return a._private_less(b);\n    }\n\n    template<typename T>\n    void swap(\n        weak_ptr<T>& a, \n        weak_ptr<T> & b\n    ) { a.swap(b); }\n}\n\n#endif // DLIB_WEAK_PTr_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers/weak_ptr_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_WEAK_PTr_ABSTRACT_\n#ifdef DLIB_WEAK_PTr_ABSTRACT_ \n\n#include \"shared_ptr_abstract.h\"\n\nnamespace dlib {\n\n    template <\n        typename T\n        > \n    class weak_ptr \n    {\n\n        /*!\n            INITIAL VALUE\n                defined by constructor\n\n            WHAT THIS OBJECT REPRESENTS\n                The weak_ptr class template stores a weak reference to an object that is \n                already managed by a shared_ptr. To access the object, a weak_ptr can \n                be converted to a shared_ptr using the member function lock().  \n\n                This is an implementation of the std::tr1::weak_ptr template from the \n                document ISO/IEC PDTR 19768, Proposed Draft Technical Report on C++\n                Library Extensions.  The only deviation from that document is that this \n                shared_ptr is declared inside the dlib namespace rather than std::tr1.\n        !*/\n\n    public:\n        typedef T element_type;\n\n        weak_ptr(\n        );\n        /*!\n            ensures\n                - #use_count() == 0\n                - creates an empty weak_ptr\n        !*/\n\n        template<typename Y> \n        weak_ptr(\n            const shared_ptr<Y>& r\n        );\n        /*!\n            requires\n                - Y* must be convertible to T*\n            ensures\n                - if (r is empty) then\n                    - constructs an empty weak_ptr object\n                - else \n                    - constructs a weak_ptr object that shares ownership with r and \n                      stores a copy of the pointer stored in r.\n                - #use_count() == #r.use_count()\n        !*/\n\n        weak_ptr(\n            const weak_ptr& r\n        );\n        /*!\n            ensures\n                - if (r is empty) then\n                    - constructs an empty weak_ptr object\n                - else \n                    - constructs a weak_ptr object that shares ownership with r and \n                      stores a copy of the pointer stored in r.\n                - #use_count() == #r.use_count()\n        !*/\n\n        template<typename Y> \n        weak_ptr(\n            const weak_ptr<Y>& r\n        );\n        /*!\n            requires\n                - Y* must be convertible to T*\n            ensures\n                - if (r is empty) then\n                    - constructs an empty weak_ptr object\n                - else \n                    - constructs a weak_ptr object that shares ownership with r and \n                      stores a copy of the pointer stored in r.\n                - #use_count() == #r.use_count()\n        !*/\n\n        ~weak_ptr(\n        );\n        /*!\n            ensures\n                - destroys this weak_ptr object but has no effect on the object its \n                  stored pointer points to.\n        !*/\n\n        weak_ptr& operator= (\n            const weak_ptr& r\n        );\n        /*!\n            ensures\n                - equivalent to weak_ptr(r).swap(*this)\n        !*/\n\n        template<typename Y> \n        weak_ptr& operator= (\n            const weak_ptr<Y>& r\n        );\n        /*!\n            requires\n                - Y* must be convertible to T*\n            ensures\n                - equivalent to weak_ptr(r).swap(*this)\n        !*/\n\n        template<typename Y> \n        weak_ptr& operator=(\n            const shared_ptr<Y>& r\n        );\n        /*!\n            requires\n                - Y* must be convertible to T*\n            ensures\n                - equivalent to weak_ptr(r).swap(*this)\n        !*/\n\n        long use_count(\n        ) const;\n        /*!\n            ensures\n                - if (*this is empty) then\n                    - returns 0\n                - else \n                    - returns the number of shared_ptr instances that share ownership \n                      with *this\n        !*/\n\n        bool expired(\n        ) const;\n        /*!\n            ensures\n                - returns (use_count() == 0)\n        !*/\n\n        shared_ptr<T> lock(\n        ) const;\n        /*!\n            ensures\n                - if (expired()) then\n                    - returns shared_ptr<T>()\n                - else\n                    - returns shared_ptr<T>(*this)\n        !*/\n\n        void reset(\n        );\n        /*!\n            ensures\n                - equivalent to weak_ptr().swap(*this)\n        !*/\n\n        void swap(\n            weak_ptr<T>& b\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n    template<typename T, typename U>\n    bool operator< (\n        const weak_ptr<T>& a, \n        const weak_ptr<U>& b\n    );\n    /*!\n        ensures\n            - Defines an operator< on shared_ptr types appropriate for use in the associative \n              containers.  \n    !*/\n\n    template<typename T>\n    void swap(\n        weak_ptr<T>& a, \n        weak_ptr<T> & b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n}\n\n#endif // DLIB_WEAK_PTr_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SMART_POINTERs_H_\n#define DLIB_SMART_POINTERs_H_ \n\n#include \"smart_pointers/scoped_ptr.h\"\n#include \"smart_pointers/shared_ptr.h\"\n#include \"smart_pointers/weak_ptr.h\"\n\n#endif // DLIB_SMART_POINTERs_H_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/smart_pointers_thread_safe.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SMART_POINTERs_THREAD_SAFE_H_\n#define DLIB_SMART_POINTERs_THREAD_SAFE_H_ \n\n#include \"smart_pointers/shared_ptr_thread_safe.h\"\n\n#endif // DLIB_SMART_POINTERs_THREAD_SAFE_H_ \n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/posix.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKETS_KERNEl_1_\n#include \"sockets_kernel_2.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/sockets_extensions.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKETS_EXTENSIONs_CPP\n#define DLIB_SOCKETS_EXTENSIONs_CPP\n\n#include <string>\n#include <sstream>\n#include \"../sockets.h\"\n#include \"../error.h\"\n#include \"sockets_extensions.h\"\n#include \"../timer.h\"\n#include \"../algs.h\"\n#include \"../timeout.h\"\n#include \"../misc_api.h\"\n#include \"../serialize.h\"\n#include \"../string.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    network_address::\n    network_address(\n        const std::string& full_address\n    )\n    {\n        std::istringstream sin(full_address);\n        sin >> *this;\n        if (!sin || sin.peek() != EOF)\n            throw invalid_network_address(\"invalid network address: \" + full_address);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize(\n        const network_address& item,\n        std::ostream& out\n    )\n    {\n        serialize(item.host_address, out);\n        serialize(item.port, out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void deserialize(\n        network_address& item,\n        std::istream& in \n    )\n    {\n        deserialize(item.host_address, in);\n        deserialize(item.port, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::ostream& operator<< (\n        std::ostream& out,\n        const network_address& item\n    )\n    {\n        out << item.host_address << \":\" << item.port;\n        return out;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::istream& operator>> (\n        std::istream& in,\n        network_address& item\n    )\n    {\n        std::string temp;\n        in >> temp;\n\n        std::string::size_type pos = temp.find_last_of(\":\");\n        if (pos == std::string::npos)\n        {\n            in.setstate(std::ios::badbit);\n            return in;\n        }\n\n        item.host_address = temp.substr(0, pos);\n        try\n        {\n            item.port = sa = temp.substr(pos+1);\n        } catch (std::exception& )\n        {\n            in.setstate(std::ios::badbit);\n            return in;\n        }\n\n\n        return in;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    connection* connect (\n        const std::string& host_or_ip,\n        unsigned short port\n    )\n    {\n        std::string ip;\n        connection* con;\n        if (is_ip_address(host_or_ip))\n        {\n            ip = host_or_ip;\n        }\n        else\n        {\n            if( hostname_to_ip(host_or_ip,ip))\n                throw socket_error(ERESOLVE,\"unable to resolve '\" + host_or_ip + \"' in connect()\");\n        }\n\n        if(create_connection(con,port,ip))\n        {\n            std::ostringstream sout;\n            sout << \"unable to connect to '\" << host_or_ip << \":\" << port << \"'\";\n            throw socket_error(sout.str()); \n        }\n\n        return con;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    connection* connect (\n        const network_address& addr\n    )\n    {\n        return connect(addr.host_address, addr.port);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace connect_timeout_helpers\n    {\n        mutex connect_mutex;\n        signaler connect_signaler(connect_mutex);\n        timestamper ts;\n        long outstanding_connects = 0;\n\n        struct thread_data\n        {\n            std::string host_or_ip;\n            unsigned short port;\n            connection* con;\n            bool connect_ended;\n            bool error_occurred;\n        };\n\n        void thread(void* param)\n        {\n            thread_data p = *static_cast<thread_data*>(param);\n            try\n            {\n                p.con = connect(p.host_or_ip, p.port); \n            }\n            catch (...)\n            {\n                p.error_occurred = true;\n            }\n\n            auto_mutex M(connect_mutex);\n            // report the results back to the connect() call that spawned this\n            // thread.\n            static_cast<thread_data*>(param)->con = p.con;\n            static_cast<thread_data*>(param)->error_occurred = p.error_occurred;\n            connect_signaler.broadcast();\n\n            // wait for the call to connect() that spawned this thread to terminate\n            // before we delete the thread_data struct.\n            while (static_cast<thread_data*>(param)->connect_ended == false)\n                connect_signaler.wait();\n\n            connect_signaler.broadcast();\n            --outstanding_connects;\n            delete static_cast<thread_data*>(param);\n        }\n    }\n\n    connection* connect (\n        const std::string& host_or_ip,\n        unsigned short port,\n        unsigned long timeout\n    )\n    {\n        using namespace connect_timeout_helpers;\n\n        auto_mutex M(connect_mutex);\n\n        const uint64 end_time = ts.get_timestamp() + timeout*1000;\n\n\n        // wait until there are less than 100 outstanding connections\n        while (outstanding_connects > 100)\n        {\n            uint64 cur_time = ts.get_timestamp();\n            if (end_time > cur_time)\n            {\n                timeout = static_cast<unsigned long>((end_time - cur_time)/1000);\n            }\n            else\n            {\n                throw socket_error(\"unable to connect to '\" + host_or_ip + \"' because connect timed out\"); \n            }\n            \n            connect_signaler.wait_or_timeout(timeout);\n        }\n\n        \n        thread_data* data = new thread_data;\n        data->host_or_ip = host_or_ip.c_str();\n        data->port = port;\n        data->con = 0;\n        data->connect_ended = false;\n        data->error_occurred = false;\n\n\n        if (create_new_thread(thread, data) == false)\n        {\n            delete data;\n            throw socket_error(\"unable to connect to '\" + host_or_ip); \n        }\n\n        ++outstanding_connects;\n\n        // wait until we have a connection object \n        while (data->con == 0)\n        {\n            uint64 cur_time = ts.get_timestamp();\n            if (end_time > cur_time && data->error_occurred == false)\n            {\n                timeout = static_cast<unsigned long>((end_time - cur_time)/1000);\n            }\n            else\n            {\n                // let the thread know that it should terminate\n                data->connect_ended = true;\n                connect_signaler.broadcast();\n                if (data->error_occurred)\n                    throw socket_error(\"unable to connect to '\" + host_or_ip); \n                else\n                    throw socket_error(\"unable to connect to '\" + host_or_ip + \"' because connect timed out\"); \n            }\n\n            connect_signaler.wait_or_timeout(timeout);\n        }\n\n        // let the thread know that it should terminate\n        data->connect_ended = true;\n        connect_signaler.broadcast();\n        return data->con;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool is_ip_address (\n        std::string ip\n    )\n    {\n        for (std::string::size_type i = 0; i < ip.size(); ++i)\n        {\n            if (ip[i] == '.')\n                ip[i] = ' ';\n        }\n        std::istringstream sin(ip);\n        \n        bool bad = false;\n        int num;\n        for (int i = 0; i < 4; ++i)\n        {\n            sin >> num;\n            if (!sin || num < 0 || num > 255)\n            {\n                bad = true;\n                break;\n            }\n        }\n\n        if (sin.get() != EOF)\n            bad = true;\n        \n        return !bad;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void close_gracefully (\n        connection* con,\n        unsigned long timeout \n    )\n    {\n        scoped_ptr<connection> ptr(con);\n        close_gracefully(ptr,timeout);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void close_gracefully (\n        scoped_ptr<connection>& con,\n        unsigned long timeout \n    )\n    {\n        if (!con)\n            return;\n\n        if(con->shutdown_outgoing())\n        {\n            // there was an error so just close it now and return\n            con.reset();\n            return;\n        }\n\n        try\n        {\n            dlib::timeout t(*con,&connection::shutdown,timeout);\n\n            char junk[100];\n            // wait for the other end to close their side\n            while (con->read(junk,sizeof(junk)) > 0) ;\n        }\n        catch (...)\n        {\n            con.reset();\n            throw;\n        }\n\n        con.reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SOCKETS_EXTENSIONs_CPP\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/sockets_extensions.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKETS_EXTENSIONs_\n#define DLIB_SOCKETS_EXTENSIONs_\n\n#include <string>\n#include \"../sockets.h\"\n#include \"sockets_extensions_abstract.h\"\n#include \"../smart_pointers.h\"\n#include <iosfwd>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class invalid_network_address : public dlib::error \n    { \n    public: \n        invalid_network_address(const std::string& msg) : dlib::error(msg) {};\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct network_address\n    {\n        network_address() : port(0){}\n\n        network_address(\n            const std::string& full_address\n        );\n\n        network_address (\n            const char* full_address\n        )\n        {\n            *this = network_address(std::string(full_address));\n        }\n\n        network_address(\n            const std::string& host_address_,\n            const unsigned short port_\n        ) : host_address(host_address_), port(port_) {}\n            \n        std::string host_address;\n        unsigned short port;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool operator < (\n        const network_address& a,\n        const network_address& b\n    ) \n    {\n        if (a.host_address < b.host_address)\n            return true;\n        else if (a.host_address > b.host_address)\n            return false;\n        else if (a.port < b.port)\n            return true;\n        else\n            return false;\n    }\n\n    inline bool operator== (\n        const network_address& a,\n        const network_address& b\n    ) { return a.host_address == b.host_address && a.port == b.port; }\n\n    inline bool operator != (\n        const network_address& a,\n        const network_address& b\n    ) { return !(a == b); }\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize(\n        const network_address& item,\n        std::ostream& out\n    );\n\n    void deserialize(\n        network_address& item,\n        std::istream& in \n    );\n\n    std::ostream& operator<< (\n        std::ostream& out,\n        const network_address& item\n    );\n\n    std::istream& operator>> (\n        std::istream& in,\n        network_address& item\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    connection* connect (\n        const std::string& host_or_ip,\n        unsigned short port\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    connection* connect (\n        const network_address& addr\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    connection* connect (\n        const std::string& host_or_ip,\n        unsigned short port,\n        unsigned long timeout\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    bool is_ip_address (\n        std::string ip\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    void close_gracefully (\n        connection* con,\n        unsigned long timeout = 500\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    void close_gracefully (\n        scoped_ptr<connection>& con,\n        unsigned long timeout = 500\n    );\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"sockets_extensions.cpp\"\n#endif\n\n#endif // DLIB_SOCKETS_EXTENSIONs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/sockets_extensions_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SOCKETS_EXTENSIONs_ABSTRACT_\n#ifdef DLIB_SOCKETS_EXTENSIONs_ABSTRACT_\n\n#include <string>\n#include \"sockets_kernel_abstract.h\"\n#include \"../smart_pointers.h\"\n#include \"../error.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class invalid_network_address : public dlib::error \n    { \n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is the exception thrown by network_address's constructor if the\n                input is invalid.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct network_address\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is simply a container for two things:\n                    - A host machine address which is either an IP address or DNS name\n                      for a machine.\n                    - A port number.\n            \n                Together, these things define a machine and port on that machine.\n        !*/\n\n        network_address(\n        );\n        /*!\n            ensures\n                - host_address == \"\"\n                - #port == 0\n        !*/\n\n        network_address(\n            const std::string& full_address\n        );\n        /*!\n            ensures\n                - interprets full_address as a network address of the form:\n                    host_address:port\n                  and assigns each part into #host_address and #port.  For example,\n                  network_address(\"localhost:80\") would result in a network_address\n                  object where host_address was \"localhost\" and port was 80.\n            throws\n                - invalid_network_address\n                    This exception is thrown if the full_address string can't be\n                    interpreted as a valid network address.\n        !*/\n\n        network_address (\n            const char* full_address\n        );\n        /*!\n            requires\n                - full_address == a valid pointer to a null terminated string\n            ensures\n                - Invoking this constructor is equivalent to performing \n                  network_address(std::string(full_address))\n        !*/\n\n        network_address(\n            const std::string& host_address_,\n            const unsigned short port_\n        );\n        /*!\n            ensures\n                - #host_address == host_address_\n                - #port == port_\n        !*/\n            \n\n        std::string host_address;\n        unsigned short port;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool operator < (\n        const network_address& a,\n        const network_address& b\n    );\n    /*!\n        ensures\n            - provides a total ordering over network_address objects so you can use them in\n              the standard associative containers.  The ordering is defined such that if\n              you sorted network addresses they would sort first on the host_address string\n              and then, for network_address objects with equal host_address, they would\n              sort on the port number\n    !*/\n\n    inline bool operator== (\n        const network_address& a,\n        const network_address& b\n    );\n    /*!\n        ensures\n            - returns true if a and b contain exactly the same address and false otherwise.\n              That is, the following must be true for this function to return true:\n                - a.host_address == b.host_address\n                - a.port == b.port\n              Note that this means that two addresses which are logically equivalent but\n              written differently will not compare equal.  For example, suppose example.com\n              has the IP address 10.1.1.1.  Then network_address(\"10.1.1.1:80\") and\n              network_address(\"example.com:80\") really refer to the same network resource\n              but will nevertheless not compare equal since.\n    !*/\n\n    inline bool operator != (\n        const network_address& a,\n        const network_address& b\n    );\n    /*!\n        ensures\n            - returns !(a == b)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize(\n        const network_address& item,\n        std::ostream& out\n    );\n    /*!\n        ensures\n            - provides serialization support\n    !*/\n\n    void deserialize(\n        network_address& item,\n        std::istream& in \n    );\n    /*!\n        ensures\n            - provides deserialization support\n    !*/\n\n    std::ostream& operator<< (\n        std::ostream& out,\n        const network_address& item\n    );\n    /*!\n        ensures\n            - writes the given network_address to the output stream.  The format is the\n              host_address, then a colon, then the port number.  So for example:\n                cout << network_address(\"localhost\", 80);\n              would print:\n                localhost:80\n            - returns #out \n    !*/\n\n    std::istream& operator>> (\n        std::istream& in,\n        network_address& item\n    );\n    /*!\n        ensures\n            - reads a network_address from the given input stream.  The expected format is\n              the same as the one used to print them by the above operator<<() routine. \n            - returns #in\n            - if (there is an error reading the network_address) then\n                - #in.good() == false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    connection* connect (\n        const std::string& host_or_ip,\n        unsigned short port\n    );\n    /*!\n        ensures\n            - returns a connection object that is connected to the given host at the \n              given port\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is some problem that prevents us from\n                creating the connection\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    connection* connect (\n        const network_address& addr\n    );\n    /*!\n        ensures\n            - returns connect(addr.host_address, addr_port);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    connection* connect (\n        const std::string& host_or_ip,\n        unsigned short port,\n        unsigned long timeout\n    );\n    /*!\n        ensures\n            - returns a connection object that is connected to the given host at the \n              given port.  \n            - blocks for at most timeout milliseconds\n        throws\n            - dlib::socket_error\n                This exception is thrown if there is some problem that prevents us from\n                creating the connection or if timeout milliseconds elapses before the\n                connect is successful.\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n\n    bool is_ip_address (\n        std::string ip\n    );\n    /*!\n        ensures\n            - if (ip is a valid ip address) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void close_gracefully (\n        connection* con,\n        unsigned long timeout = 500\n    );\n    /*!\n        requires\n            - con == a valid pointer to a connection object or 0\n        ensures\n            - This function does nothing if con == 0, otherwise it performs the following:\n                - performs a graceful close of the given connection and if it takes longer\n                  than timeout milliseconds to complete then forces the connection closed. \n                    - Specifically, a graceful close means that the outgoing part of con is\n                      closed (a FIN is sent) and then we wait for the other end to to close\n                      their end of the connection.  This way any data still on its way to\n                      the other end of the connection will be received properly.\n                - This function will block until the graceful close is completed or we\n                  timeout.\n                - calls \"delete con;\".  Thus con is no longer a valid pointer after this\n                  function has finished.\n        throws\n            - std::bad_alloc or dlib::thread_error\n                If either of these exceptions are thrown con will still be closed via\n                \"delete con;\" \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void close_gracefully (\n        scoped_ptr<connection>& con,\n        unsigned long timeout = 500\n    );\n    /*!\n        requires\n            - con == a valid pointer to a connection object or con.get() == 0\n        ensures\n            - This function does nothing if con.get() == 0, otherwise it performs the\n              following:\n                - performs a graceful close of the given connection and if it takes longer\n                  than timeout milliseconds to complete then forces the connection closed. \n                    - Specifically, a graceful close means that the outgoing part of con is\n                      closed (a FIN is sent) and then we wait for the other end to to close\n                      their end of the connection.  This way any data still on its way to\n                      the other end of the connection will be received properly.\n                - This function will block until the graceful close is completed or we\n                  timeout.\n                - #con.get() == 0.  Thus con is no longer a valid pointer after this\n                  function has finished.\n        throws\n            - std::bad_alloc or dlib::thread_error\n                If either of these exceptions are thrown con will still be closed and\n                deleted (i.e. #con.get() == 0).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SOCKETS_EXTENSIONs_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/sockets_kernel_1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net), Miguel Grinberg\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKETS_KERNEL_1_CPp_\n#define DLIB_SOCKETS_KERNEL_1_CPp_\n#include \"../platform.h\"\n\n#ifdef WIN32\n\n#ifndef _WINSOCKAPI_\n#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */\n#endif\n\n#include \"../windows_magic.h\"\n\n#include \"sockets_kernel_1.h\"\n\n#include <windows.h>\n#include <winsock2.h>\n\n#ifndef NI_MAXHOST\n#define NI_MAXHOST 1025\n#endif\n\n\n// tell visual studio to link to the libraries we need if we are\n// in fact using visual studio\n#ifdef _MSC_VER\n#pragma comment (lib, \"ws2_32.lib\")\n#endif\n\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class SOCKET_container\n    {\n        /*!\n            This object is just a wrapper around the SOCKET type.  It exists\n            so that we can #include the windows.h and Winsock2.h header files\n            in this cpp file and not at all in the header file.\n        !*/\n    public:\n        SOCKET_container (\n            SOCKET s = INVALID_SOCKET\n        ) : val(s) {}\n\n        SOCKET val;\n        operator SOCKET&() { return val; }\n\n        SOCKET_container& operator= (\n            const SOCKET& s\n        ) { val = s; return *this; }\n\n        bool operator== (\n            const SOCKET& s\n        ) const { return s == val; }\n    };\n\n// ----------------------------------------------------------------------------------------\n// stuff to ensure that WSAStartup() is always called before any sockets stuff is needed\n\n    namespace sockets_kernel_1_mutex\n    {\n        mutex startup_lock;\n    }\n\n    class sockets_startupdown\n    {\n    public:\n        sockets_startupdown();\n        ~sockets_startupdown() { WSACleanup( ); }\n\n    };\n    sockets_startupdown::sockets_startupdown (\n    )\n    {\n        WSADATA wsaData;\n        WSAStartup (MAKEWORD(2,0), &wsaData);\n    }\n\n    void sockets_startup()\n    {\n        // mutex crap to make this function thread-safe\n        sockets_kernel_1_mutex::startup_lock.lock();\n        static sockets_startupdown a;\n        sockets_kernel_1_mutex::startup_lock.unlock();\n    }\n \n// ----------------------------------------------------------------------------------------\n\n    // lookup functions\n\n    int\n    get_local_hostname (\n        std::string& hostname\n    )\n    {\n        // ensure that WSAStartup has been called and WSACleanup will eventually\n        // be called when program ends\n        sockets_startup();\n\n        try \n        {\n\n            char temp[NI_MAXHOST];\n            if (gethostname(temp,NI_MAXHOST) == SOCKET_ERROR )\n            {\n                return OTHER_ERROR;\n            }\n\n            hostname = temp;\n        }\n        catch (...)\n        {\n            return OTHER_ERROR;\n        }\n\n        return 0;\n    }\n\n// -----------------\n\n    int \n    hostname_to_ip (\n        const std::string& hostname,\n        std::string& ip,\n        int n\n    )\n    {\n        // ensure that WSAStartup has been called and WSACleanup will eventually \n        // be called when program ends\n        sockets_startup();\n\n        try \n        {\n            // lock this mutex since gethostbyname isn't really thread safe\n            auto_mutex M(sockets_kernel_1_mutex::startup_lock);\n\n            // if no hostname was given then return error\n            if ( hostname.empty())\n                return OTHER_ERROR;\n\n            hostent* address;\n            address = gethostbyname(hostname.c_str());\n            \n            if (address == 0)\n            {\n                return OTHER_ERROR;\n            }\n\n            // find the nth address\n            in_addr* addr = reinterpret_cast<in_addr*>(address->h_addr_list[0]);\n            for (int i = 1; i <= n; ++i)\n            {\n                addr = reinterpret_cast<in_addr*>(address->h_addr_list[i]);\n\n                // if there is no nth address then return error\n                if (addr == 0)\n                    return OTHER_ERROR;\n            }\n\n            char* resolved_ip = inet_ntoa(*addr);\n\n            // check if inet_ntoa returned an error\n            if (resolved_ip == NULL)\n            {\n                return OTHER_ERROR;\n            }\n\n            ip.assign(resolved_ip);\n\n        }\n        catch(...)\n        {\n            return OTHER_ERROR;\n        }\n\n        return 0;\n    }\n\n// -----------------\n\n    int\n    ip_to_hostname (\n        const std::string& ip,\n        std::string& hostname\n    )\n    {\n        // ensure that WSAStartup has been called and WSACleanup will eventually \n        // be called when program ends\n        sockets_startup();\n\n        try \n        {\n            // lock this mutex since gethostbyaddr isn't really thread safe\n            auto_mutex M(sockets_kernel_1_mutex::startup_lock);\n\n            // if no ip was given then return error\n            if (ip.empty())\n                return OTHER_ERROR;\n\n            hostent* address;\n            unsigned long ipnum = inet_addr(ip.c_str());\n\n            // if inet_addr couldn't convert ip then return an error\n            if (ipnum == INADDR_NONE)\n            {\n                return OTHER_ERROR;\n            }\n            address = gethostbyaddr(reinterpret_cast<char*>(&ipnum),4,AF_INET);\n\n            // check if gethostbyaddr returned an error\n            if (address == 0)\n            {\n                return OTHER_ERROR;\n            }\n            hostname.assign(address->h_name);\n\n        }\n        catch (...)\n        {\n            return OTHER_ERROR;\n        }\n        return 0;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // connection object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    connection::\n    connection(\n        SOCKET_container sock,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port,\n        const std::string& local_ip\n    ) :\n        user_data(0),\n        connection_socket(*(new SOCKET_container())),\n        connection_foreign_port(foreign_port),\n        connection_foreign_ip(foreign_ip),\n        connection_local_port(local_port),\n        connection_local_ip(local_ip),\n        sd(false),\n        sdo(false),\n        sdr(0)\n    {\n       connection_socket = sock;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    connection::\n    ~connection (\n    )\n    {\n        if (connection_socket != INVALID_SOCKET)\n            closesocket(connection_socket);  \n        delete &connection_socket;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int connection::\n    disable_nagle()\n    {\n        int flag = 1;\n        int status = setsockopt( connection_socket, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) );\n\n        if (status == SOCKET_ERROR) \n            return OTHER_ERROR;\n        else\n            return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long connection::\n    write (\n        const char* buf, \n        long num\n    )\n    {\n        const long old_num = num;\n        long status;\n        const long max_send_length = 1024*1024*100;\n        while (num > 0)\n        {\n            // Make sure to cap the max value num can take on so that if it is \n            // really large (it might be big on 64bit platforms) so that the OS\n            // can't possibly get upset about it being large.\n            const long length = std::min(max_send_length, num);\n            if ( (status = send(connection_socket,buf,length,0)) == SOCKET_ERROR)\n            {\n                if (sdo_called())\n                    return SHUTDOWN;\n                else\n                    return OTHER_ERROR;\n            }\n            num -= status;\n            buf += status;\n        } \n        return old_num;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long connection::\n    read (\n        char* buf, \n        long num\n    )\n    {\n        const long max_recv_length = 1024*1024*100;\n        // Make sure to cap the max value num can take on so that if it is \n        // really large (it might be big on 64bit platforms) so that the OS\n        // can't possibly get upset about it being large.\n        const long length = std::min(max_recv_length, num);\n        long status = recv(connection_socket,buf,length,0);\n        if (status == SOCKET_ERROR)\n        {\n            // if this error is the result of a shutdown call then return SHUTDOWN\n            if (sd_called())\n                return SHUTDOWN;\n            else\n                return OTHER_ERROR;\n        }\n        else if (status == 0 && sd_called())\n        {\n            return SHUTDOWN;\n        }\n        return status;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long connection::\n    read (\n        char* buf, \n        long num,\n        unsigned long timeout\n    )\n    {\n        if (readable(timeout) == false)\n            return TIMEOUT;\n\n        const long max_recv_length = 1024*1024*100;\n        // Make sure to cap the max value num can take on so that if it is \n        // really large (it might be big on 64bit platforms) so that the OS\n        // can't possibly get upset about it being large.\n        const long length = std::min(max_recv_length, num);\n        long status = recv(connection_socket,buf,length,0);\n        if (status == SOCKET_ERROR)\n        {\n            // if this error is the result of a shutdown call then return SHUTDOWN\n            if (sd_called())\n                return SHUTDOWN;\n            else\n                return OTHER_ERROR;\n        }\n        else if (status == 0 && sd_called())\n        {\n            return SHUTDOWN;\n        }\n        return status;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool connection::\n    readable (\n        unsigned long timeout\n    ) const\n    {\n        fd_set read_set;\n        // initialize read_set\n        FD_ZERO(&read_set);\n\n        // add the listening socket to read_set\n        FD_SET(connection_socket, &read_set);\n\n        // setup a timeval structure\n        timeval time_to_wait;\n        time_to_wait.tv_sec = static_cast<long>(timeout/1000);\n        time_to_wait.tv_usec = static_cast<long>((timeout%1000)*1000);\n\n        // wait on select\n        int status = select(0,&read_set,0,0,&time_to_wait);\n\n        // if select timed out or there was an error\n        if (status <= 0)\n            return false;\n        \n        // data is ready to be read\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int connection::\n    shutdown_outgoing (\n    ) \n    { \n        sd_mutex.lock();\n        if (sdo || sd)\n        {\n            sd_mutex.unlock();\n            return sdr;\n        }\n        sdo = true;\n        sdr = ::shutdown(connection_socket,SD_SEND);\n\n        // convert -1 error code into the OTHER_ERROR error code\n        if (sdr == -1) \n            sdr = OTHER_ERROR;\n\n        int temp = sdr;\n\n        sd_mutex.unlock();\n        return temp;            \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int connection::\n    shutdown (\n    ) \n    { \n        sd_mutex.lock();\n        if (sd)\n        {\n            sd_mutex.unlock();\n            return sdr;\n        }\n        sd = true;\n        SOCKET stemp = connection_socket;\n        connection_socket = INVALID_SOCKET;\n        sdr = closesocket(stemp);\n\n        // convert SOCKET_ERROR error code into the OTHER_ERROR error code\n        if (sdr == SOCKET_ERROR) \n            sdr = OTHER_ERROR;\n\n        int temp = sdr;\n       \n        sd_mutex.unlock();            \n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    connection::socket_descriptor_type connection::\n    get_socket_descriptor (\n    ) const\n    {\n        return connection_socket.val;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // listener object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    listener::\n    listener(\n        SOCKET_container sock,\n        unsigned short port,\n        const std::string& ip\n    ) :\n        listening_socket(*(new SOCKET_container)),\n        listening_port(port),\n        listening_ip(ip),\n        inaddr_any(listening_ip.empty())\n    {\n        listening_socket = sock;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    listener::\n    ~listener (\n    )\n    {\n        closesocket(listening_socket);  \n        delete &listening_socket;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int listener::\n    accept (\n        scoped_ptr<connection>& new_connection,\n        unsigned long timeout\n    )\n    {\n        new_connection.reset(0);\n        connection* con;\n        int status = this->accept(con, timeout);\n\n        if (status == 0)\n            new_connection.reset(con);\n\n        return status;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int listener::\n    accept (\n        connection*& new_connection,\n        unsigned long timeout\n    )\n    {\n        SOCKET incoming;\n        sockaddr_in incomingAddr;\n        int length = sizeof(sockaddr_in);\n\n        // implement timeout with select if timeout is > 0\n        if (timeout > 0)\n        {\n            fd_set read_set;\n            // initialize read_set\n            FD_ZERO(&read_set);\n\n            // add the listening socket to read_set\n            FD_SET(listening_socket, &read_set);\n\n            // setup a timeval structure\n            timeval time_to_wait;\n            time_to_wait.tv_sec = static_cast<long>(timeout/1000);\n            time_to_wait.tv_usec = static_cast<long>((timeout%1000)*1000);\n\n\n            // wait on select\n            int status = select(0,&read_set,0,0,&time_to_wait);\n\n            // if select timed out\n            if (status == 0)\n                return TIMEOUT;\n            \n            // if select returned an error\n            if (status == SOCKET_ERROR)\n                return OTHER_ERROR;\n\n        }\n\n\n        // call accept to get a new connection\n        incoming=::accept(listening_socket,reinterpret_cast<sockaddr*>(&incomingAddr),&length);\n\n        // if there was an error return OTHER_ERROR\n        if ( incoming == INVALID_SOCKET )\n            return OTHER_ERROR;\n        \n\n        // get the port of the foreign host into foreign_port\n        int foreign_port = ntohs(incomingAddr.sin_port);\n\n        // get the IP of the foreign host into foreign_ip\n        std::string foreign_ip;\n        {\n            char* foreign_ip_temp = inet_ntoa(incomingAddr.sin_addr);\n\n            // check if inet_ntoa() returned an error\n            if (foreign_ip_temp == NULL)\n            {\n                closesocket(incoming);\n                return OTHER_ERROR;            \n            }\n\n            foreign_ip.assign(foreign_ip_temp);\n        }\n\n\n        // get the local ip\n        std::string local_ip;\n        if (inaddr_any == true)\n        {\n            sockaddr_in local_info;\n            length = sizeof(sockaddr_in);\n            // get the local sockaddr_in structure associated with this new connection\n            if ( getsockname (\n                    incoming,\n                    reinterpret_cast<sockaddr*>(&local_info),\n                    &length\n                 ) == SOCKET_ERROR \n            )\n            {   // an error occurred\n                closesocket(incoming);\n                return OTHER_ERROR;\n            }\n            char* temp = inet_ntoa(local_info.sin_addr);\n            \n            // check if inet_ntoa() returned an error\n            if (temp == NULL)\n            {\n                closesocket(incoming);\n                return OTHER_ERROR;            \n            }\n            local_ip.assign(temp);\n        }\n        else\n        {\n            local_ip = listening_ip;\n        }\n\n\n        // set the SO_OOBINLINE option\n        int flag_value = 1;\n        if (setsockopt(incoming,SOL_SOCKET,SO_OOBINLINE,reinterpret_cast<const char*>(&flag_value),sizeof(int)) == SOCKET_ERROR )\n        {\n            closesocket(incoming);\n            return OTHER_ERROR;  \n        }\n\n\n        // make a new connection object for this new connection\n        try \n        { \n            new_connection = new connection (\n                                    incoming,\n                                    foreign_port,\n                                    foreign_ip,\n                                    listening_port,\n                                    local_ip\n                                ); \n        }\n        catch (...) { closesocket(incoming); return OTHER_ERROR; }\n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // socket creation functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------    \n\n    int create_listener (\n        scoped_ptr<listener>& new_listener,\n        unsigned short port,\n        const std::string& ip\n    )\n    {\n        new_listener.reset();\n        listener* temp;\n        int status = create_listener(temp,port,ip);\n\n        if (status == 0)\n            new_listener.reset(temp);\n\n        return status;\n    }\n\n    int create_listener (\n        listener*& new_listener,\n        unsigned short port,\n        const std::string& ip\n    )\n    {\n        // ensure that WSAStartup has been called and WSACleanup will eventually \n        // be called when program ends\n        sockets_startup();\n\n        sockaddr_in sa;  // local socket structure\n        ZeroMemory(&sa,sizeof(sockaddr_in)); // initialize sa\n\n        SOCKET sock = socket (AF_INET, SOCK_STREAM, 0);  // get a new socket\n\n        // if socket() returned an error then return OTHER_ERROR\n        if (sock == INVALID_SOCKET )\n        {\n            return OTHER_ERROR;\n        }\n\n        // set the local socket structure \n        sa.sin_family = AF_INET;\n        sa.sin_port = htons(port);\n        if (ip.empty())\n        {            \n            // if the listener should listen on any IP\n            sa.sin_addr.S_un.S_addr = htons(INADDR_ANY);\n        }\n        else\n        {\n            // if there is a specific ip to listen on\n            sa.sin_addr.S_un.S_addr = inet_addr(ip.c_str());\n            // if inet_addr couldn't convert the ip then return an error\n            if ( sa.sin_addr.S_un.S_addr == INADDR_NONE )\n            {\n                closesocket(sock); \n                return OTHER_ERROR;                \n            }\n        }\n\n        // set the SO_REUSEADDR option\n        int flag_value = 1;\n        setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,reinterpret_cast<const char*>(&flag_value),sizeof(int));\n\n        // bind the new socket to the requested port and ip\n        if (bind(sock,reinterpret_cast<sockaddr*>(&sa),sizeof(sockaddr_in))==SOCKET_ERROR)\n        {   \n            const int err = WSAGetLastError();\n            // if there was an error \n            closesocket(sock); \n\n            // if the port is already bound then return PORTINUSE\n            if (err == WSAEADDRINUSE)\n                return PORTINUSE;\n            else\n                return OTHER_ERROR;            \n        }\n\n\n        // tell the new socket to listen\n        if ( listen(sock,SOMAXCONN) == SOCKET_ERROR)\n        {\n            const int err = WSAGetLastError();\n            // if there was an error return OTHER_ERROR\n            closesocket(sock); \n\n            // if the port is already bound then return PORTINUSE\n            if (err == WSAEADDRINUSE)\n                return PORTINUSE;\n            else\n                return OTHER_ERROR;  \n        }\n\n        // determine the port used if necessary\n        if (port == 0)\n        {\n            sockaddr_in local_info;\n            int length = sizeof(sockaddr_in);\n            if ( getsockname (\n                        sock,\n                        reinterpret_cast<sockaddr*>(&local_info),\n                        &length\n                 ) == SOCKET_ERROR\n            )\n            {\n                closesocket(sock);\n                return OTHER_ERROR;\n            }\n            port = ntohs(local_info.sin_port);            \n        }\n\n\n        // initialize a listener object on the heap with the new socket\n        try { new_listener = new listener(sock,port,ip); }\n        catch(...) { closesocket(sock); return OTHER_ERROR; }\n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int create_connection (\n        scoped_ptr<connection>& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port,\n        const std::string& local_ip\n    )\n    {\n        new_connection.reset();\n        connection* temp;\n        int status = create_connection(temp,foreign_port, foreign_ip, local_port, local_ip);\n\n        if (status == 0)\n            new_connection.reset(temp);\n\n        return status;\n    }\n\n    int create_connection ( \n        connection*& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port,\n        const std::string& local_ip\n    )\n    {\n        // ensure that WSAStartup has been called and WSACleanup \n        // will eventually be called when program ends\n        sockets_startup();\n\n\n        sockaddr_in local_sa;  // local socket structure\n        sockaddr_in foreign_sa;  // foreign socket structure\n        ZeroMemory(&local_sa,sizeof(sockaddr_in)); // initialize local_sa\n        ZeroMemory(&foreign_sa,sizeof(sockaddr_in)); // initialize foreign_sa\n\n        int length;\n\n        SOCKET sock = socket (AF_INET, SOCK_STREAM, 0);  // get a new socket\n\n        // if socket() returned an error then return OTHER_ERROR\n        if (sock == INVALID_SOCKET )\n        {\n            return OTHER_ERROR;\n        }\n\n        // set the foreign socket structure \n        foreign_sa.sin_family = AF_INET;\n        foreign_sa.sin_port = htons(foreign_port);\n        foreign_sa.sin_addr.S_un.S_addr = inet_addr(foreign_ip.c_str());\n\n        // if inet_addr couldn't convert the ip then return an error\n        if ( foreign_sa.sin_addr.S_un.S_addr == INADDR_NONE )\n        {\n            closesocket(sock);\n            return OTHER_ERROR;\n        }\n\n\n        // set up the local socket structure\n        local_sa.sin_family = AF_INET;\n\n        // set the local ip\n        if (local_ip.empty())\n        {            \n            // if the listener should listen on any IP\n            local_sa.sin_addr.S_un.S_addr = htons(INADDR_ANY);\n        }\n        else\n        {\n            // if there is a specific ip to listen on\n            local_sa.sin_addr.S_un.S_addr = inet_addr(local_ip.c_str());   \n\n            // if inet_addr couldn't convert the ip then return an error\n            if (local_sa.sin_addr.S_un.S_addr == INADDR_NONE)\n            {\n                closesocket(sock);\n                return OTHER_ERROR;\n            }\n        }\n\n        // set the local port\n        local_sa.sin_port = htons(local_port);\n\n        \n\n        // bind the new socket to the requested local port and local ip\n        if ( bind (\n                sock,\n                reinterpret_cast<sockaddr*>(&local_sa),\n                sizeof(sockaddr_in)\n            ) == SOCKET_ERROR\n        )\n        {   \n            const int err = WSAGetLastError();\n            // if there was an error \n            closesocket(sock); \n\n            // if the port is already bound then return PORTINUSE\n            if (err == WSAEADDRINUSE)\n                return PORTINUSE;\n            else\n                return OTHER_ERROR;            \n        }\n\n        // connect the socket        \n        if (connect (\n                sock,\n                reinterpret_cast<sockaddr*>(&foreign_sa),\n                sizeof(sockaddr_in)\n            ) == SOCKET_ERROR\n        )\n        {\n            const int err = WSAGetLastError();\n            closesocket(sock); \n            // if the port is already bound then return PORTINUSE\n            if (err == WSAEADDRINUSE)\n                return PORTINUSE;\n            else\n                return OTHER_ERROR;  \n        }\n\n\n\n        // determine the local port and IP and store them in used_local_ip \n        // and used_local_port\n        int used_local_port;\n        std::string used_local_ip;\n        sockaddr_in local_info;\n        if (local_port == 0)\n        {\n            length = sizeof(sockaddr_in);\n            if (getsockname (\n                    sock,\n                    reinterpret_cast<sockaddr*>(&local_info),\n                    &length\n                ) == SOCKET_ERROR\n            )\n            {\n                closesocket(sock);\n                return OTHER_ERROR;\n            }\n            used_local_port = ntohs(local_info.sin_port);            \n        }\n        else\n        {\n            used_local_port = local_port;\n        }\n\n        // determine real local ip\n        if (local_ip.empty())\n        {\n            // if local_port is not 0 then we must fill the local_info structure\n            if (local_port != 0)\n            {\n                length = sizeof(sockaddr_in);\n                if ( getsockname (\n                        sock,\n                        reinterpret_cast<sockaddr*>(&local_info),\n                        &length\n                    ) == SOCKET_ERROR \n                )\n                {\n                    closesocket(sock);\n                    return OTHER_ERROR;\n                }\n            }\n            char* temp = inet_ntoa(local_info.sin_addr);\n\n            // check if inet_ntoa returned an error\n            if (temp == NULL)\n            {\n                closesocket(sock);\n                return OTHER_ERROR;            \n            }\n            used_local_ip.assign(temp);\n        }\n        else\n        {\n            used_local_ip = local_ip;\n        }\n\n        // set the SO_OOBINLINE option\n        int flag_value = 1;\n        if (setsockopt(sock,SOL_SOCKET,SO_OOBINLINE,reinterpret_cast<const char*>(&flag_value),sizeof(int)) == SOCKET_ERROR )\n        {\n            closesocket(sock);\n            return OTHER_ERROR;  \n        }\n\n        // initialize a connection object on the heap with the new socket\n        try \n        { \n            new_connection = new connection (\n                                    sock,\n                                    foreign_port,\n                                    foreign_ip,\n                                    used_local_port,\n                                    used_local_ip\n                                ); \n        }\n        catch(...) {closesocket(sock);  return OTHER_ERROR; }\n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // WIN32\n\n#endif // DLIB_SOCKETS_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/sockets_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net), Miguel Grinberg\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKETS_KERNEl_1_\n#define DLIB_SOCKETS_KERNEl_1_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n#include \"sockets_kernel_abstract.h\"\n\n#include \"../algs.h\"\n#include <string>\n#include \"../threads.h\"\n#include \"../smart_pointers.h\"\n#include \"../uintn.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    // forward declarations\n    class socket_factory;\n    class listener;\n    class SOCKET_container;\n\n// ----------------------------------------------------------------------------------------\n\n    // lookup functions\n\n    int\n    get_local_hostname (\n        std::string& hostname\n    );\n\n// -----------------\n\n    int \n    hostname_to_ip (\n        const std::string& hostname,\n        std::string& ip,\n        int n = 0\n    );\n\n// -----------------\n\n    int\n    ip_to_hostname (\n        const std::string& ip,\n        std::string& hostname\n    );\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // connection object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class connection\n    {\n        /*!\n            INITIAL_VALUE\n                - sd                      == false\n                - sdo                     == false\n                - sdr                     == 0\n\n            CONVENTION\n                - connection_socket       == the socket handle for this connection.  \n                - connection_foreign_port == the port that foreign host is using for \n                  this connection.\n                - connection_foreign_ip   == a string containing the IP address of the \n                  foreign host.\n                - connection_local_port   == the port that the local host is using for \n                  this connection.\n                - connection_local_ip     == a string containing the IP address of the \n                  local interface being used by this connection.\n\n                - sd == if shutdown() has been called then true else false.\n                - sdo == if shutdown_outgoing() has been called then true else false.\n                - sdr == the return value of shutdown() if it has been called.  if it \n                  hasn't been called then 0.\n                        \n        !*/\n\n        friend class listener;                // make listener a friend of connection\n        // make create_connection a friend of connection\n        friend int create_connection ( \n            connection*& new_connection,\n            unsigned short foreign_port, \n            const std::string& foreign_ip, \n            unsigned short local_port,\n            const std::string& local_ip \n        );\n\n    public:\n\n        ~connection (\n        );\n\n        void* user_data;\n\n        long write (\n            const char* buf, \n            long num\n        );\n\n        long read (\n            char* buf, \n            long num\n        );\n\n        long read (\n            char* buf, \n            long num,\n            unsigned long timeout\n        );\n\n        unsigned short get_local_port (\n        ) const {  return connection_local_port; }\n\n        unsigned short get_foreign_port ( \n        ) const { return connection_foreign_port; }\n\n        const std::string& get_local_ip (\n        ) const { return connection_local_ip; }\n\n        const std::string& get_foreign_ip (\n        ) const { return connection_foreign_ip; }\n\n        int shutdown_outgoing (\n        );\n\n        int shutdown (\n        );\n\n        // I would use SOCKET here but I don't want to include the windows\n        // header files since they bring in a bunch of unpleasantness.  So\n        // I'm doing this instead which should ultimately be the same type\n        // as the SOCKET win the windows API.\n        typedef unsigned_type<void*>::type socket_descriptor_type;\n\n        int disable_nagle(\n        );\n\n        socket_descriptor_type get_socket_descriptor (\n        ) const;\n\n    private:\n\n        bool readable (\n            unsigned long timeout \n        ) const;\n        /*! \n            requires \n                - timeout < 2000000  \n            ensures \n                - returns true if a read call on this connection will not block. \n                - returns false if a read call on this connection will block or if \n                  there was an error. \n        !*/ \n\n        bool sd_called (\n        )const\n        /*!\n            ensures\n                - returns true if shutdown() has been called else\n                  returns false\n        !*/\n        {\n            sd_mutex.lock();\n            bool temp = sd;\n            sd_mutex.unlock();\n            return temp;\n        }\n\n        bool sdo_called (\n        )const\n        /*!\n            ensures\n                - returns true if shutdown_outgoing() or shutdown() has been called \n                  else returns false\n        !*/\n        {\n            sd_mutex.lock();\n            bool temp = false;\n            if (sdo || sd)\n                temp = true;\n            sd_mutex.unlock();\n            return temp;\n        }\n\n\n        // data members\n        SOCKET_container& connection_socket;\n        const unsigned short connection_foreign_port;\n        const std::string connection_foreign_ip; \n        const unsigned short connection_local_port;\n        const std::string connection_local_ip;\n\n        bool sd;  // called shutdown\n        bool sdo; // called shutdown_outgoing\n        int sdr; // return value for shutdown \n        mutex sd_mutex; // a lock for the three above vars\n\n\n        connection(\n            SOCKET_container sock,\n            unsigned short foreign_port, \n            const std::string& foreign_ip, \n            unsigned short local_port,\n            const std::string& local_ip\n        ); \n        /*!\n            requires\n                sock is a socket handle and \n                sock is the handle for the connection between foreign_ip:foreign_port \n                and local_ip:local_port\n            ensures\n                *this is initialized correctly with the above parameters\n        !*/\n\n\n        // restricted functions\n        connection(connection&);        // copy constructor\n        connection& operator=(connection&);    // assignment operator\n    }; \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // listener object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class listener\n    {\n        /*!\n            CONVENTION\n                if (inaddr_any == false)\n                {\n                    listening_ip == a string containing the address the listener is \n                                    listening on\n                }\n                else\n                {\n                    the listener is listening on all interfaces\n                }\n                \n                listening_port == the port the listener is listening on\n                listening_socket == the listening socket handle for this object\n        !*/\n\n        // make the create_listener a friend of listener\n        friend int create_listener (\n            listener*& new_listener,\n            unsigned short port,\n            const std::string& ip \n        );\n\n    public:\n\n        ~listener (\n        );\n\n        int accept (\n            connection*& new_connection,\n            unsigned long timeout = 0\n        );\n\n        int accept (\n            scoped_ptr<connection>& new_connection,\n            unsigned long timeout = 0\n        );\n\n        unsigned short get_listening_port (\n        ) { return listening_port; }\n\n        const std::string& get_listening_ip (\n        ) { return listening_ip; }\n\n    private:\n\n        // data members\n        SOCKET_container& listening_socket;\n        const unsigned short listening_port;\n        const std::string listening_ip;\n        const bool inaddr_any;\n\n        listener(\n            SOCKET_container sock,\n            unsigned short port,\n            const std::string& ip\n        );\n        /*!\n            requires\n                sock is a socket handle                                             and \n                sock is listening on the port and ip(may be \"\") indicated in the \n                above parameters\n            ensures\n                *this is initialized correctly with the above parameters\n        !*/\n\n\n        // restricted functions\n        listener(listener&);        // copy constructor\n        listener& operator=(listener&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    int create_listener (\n        listener*& new_listener,\n        unsigned short port,\n        const std::string& ip = \"\"\n    );\n\n    int create_connection ( \n        connection*& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port = 0,\n        const std::string& local_ip = \"\"\n    );\n\n    int create_listener (\n        scoped_ptr<listener>& new_listener,\n        unsigned short port,\n        const std::string& ip = \"\"\n    );\n\n    int create_connection ( \n        scoped_ptr<connection>& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port = 0,\n        const std::string& local_ip = \"\"\n    );\n\n// ----------------------------------------------------------------------------------------\n\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"sockets_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_SOCKETS_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/sockets_kernel_2.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net), Miguel Grinberg\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKETS_KERNEL_2_CPp_\n#define DLIB_SOCKETS_KERNEL_2_CPp_\n\n#include \"../platform.h\"\n\n#ifdef POSIX\n\n\n#include \"sockets_kernel_2.h\"\n#include <fcntl.h>\n#include \"../set.h\"\n#include <netinet/tcp.h>\n\n\n\nnamespace dlib\n{\n// ----------------------------------------------------------------------------------------\n\n#ifdef HPUX\n    typedef int dsocklen_t;\n#else\n    typedef socklen_t dsocklen_t;\n#endif\n\n// ----------------------------------------------------------------------------------------\n// stuff to ensure that the signal SIGPIPE is ignored before any connections are made\n// so that when a connection object is shutdown the program won't end on a broken pipe\n\n    namespace sockets_kernel_2_mutex\n    {\n        mutex startup_lock;\n    }\n\n\n    void sockets_startup()\n    {\n        // mutex crap to make this function thread safe\n        sockets_kernel_2_mutex::startup_lock.lock();\n        static bool init = false;\n        if (init == false)\n        {\n            init = true;\n            signal( SIGPIPE, SIG_IGN);\n        }\n        sockets_kernel_2_mutex::startup_lock.unlock();\n    }\n\n\n// ----------------------------------------------------------------------------------------\n\n    // lookup functions\n\n    int\n    get_local_hostname (\n        std::string& hostname\n    )\n    {\n        try \n        {\n            char temp[MAXHOSTNAMELEN];\n\n            if (gethostname(temp,MAXHOSTNAMELEN) == -1)\n            {\n                return OTHER_ERROR;\n            }\n            // ensure that NUL is at the end of the string\n            temp[MAXHOSTNAMELEN-1] = '\\0';\n\n            hostname = temp; \n        }\n        catch (...)\n        {\n            return OTHER_ERROR;\n        }\n\n        return 0;\n    }\n\n// -----------------\n\n// cygwin currently doesn't support the getaddrinfo stuff\n#ifndef __CYGWIN__\n\n    int \n    hostname_to_ip (\n        const std::string& hostname,\n        std::string& ip,\n        int n\n    )\n    {\n        try \n        {\n            set<std::string>::kernel_1a sos;\n\n            if (hostname.empty())\n                return OTHER_ERROR;\n\n            addrinfo* result = 0;\n            if (getaddrinfo(hostname.c_str(),0,0,&result))\n            {\n                return OTHER_ERROR;\n            }\n            addrinfo* result_orig = result;\n\n            // loop over all the addrinfo structures and add them to the set.  the reason for doing\n            // this dumb crap is because different platforms return all kinds of weird garbage.  many\n            // return the same ip multiple times, etc.\n            while (result != 0)\n            {\n                char temp[16];\n                inet_ntop (\n                    AF_INET,\n                    &((reinterpret_cast<sockaddr_in*>(result->ai_addr))->sin_addr),\n                    temp,16\n                    );\n\n                result = result->ai_next;\n\n                ip.assign(temp);\n                if (sos.is_member(ip) == false)\n                    sos.add(ip);\n            }\n\n            freeaddrinfo(result_orig);\n\n            // now return the nth unique ip address\n            int i = 0;\n            while (sos.move_next())\n            {\n                if (i == n)\n                {\n                    ip = sos.element();\n                    return 0;\n                }\n                ++i;\n            }\n\n            return OTHER_ERROR;\n        }\n        catch (...)\n        {\n            return OTHER_ERROR;\n        }\n        return 0;\n    }\n\n\n// -----------------\n\n    int\n    ip_to_hostname (\n        const std::string& ip,\n        std::string& hostname\n    )\n    {\n\n        try \n        {\n\n            if (ip.empty())\n                return OTHER_ERROR;\n\n            sockaddr_in sa;\n            sa.sin_family = AF_INET;\n            inet_pton(AF_INET,ip.c_str(),&sa.sin_addr);\n\n            char temp[NI_MAXHOST];\n            if ( getnameinfo (\n                    reinterpret_cast<sockaddr*>(&sa),sizeof(sockaddr_in),\n                    temp,\n                    NI_MAXHOST,\n                    0,\n                    0,\n                    NI_NAMEREQD\n                ) \n            )\n            {\n                return OTHER_ERROR;\n            }\n     \n            hostname.assign(temp);\n\n        }\n        catch (...)\n        {\n            return OTHER_ERROR;\n        }\n        return 0;\n    }\n#else\n    int \n    hostname_to_ip (\n        const std::string& hostname,\n        std::string& ip,\n        int n\n    )\n    {\n        try \n        {\n            // lock this mutex since gethostbyname isn't really thread safe\n            auto_mutex M(sockets_kernel_2_mutex::startup_lock);\n\n            // if no hostname was given then return error\n            if ( hostname.empty())\n                return OTHER_ERROR;\n\n            hostent* address;\n            address = gethostbyname(hostname.c_str());\n            \n            if (address == 0)\n            {\n                return OTHER_ERROR;\n            }\n\n            // find the nth address\n            in_addr* addr = reinterpret_cast<in_addr*>(address->h_addr_list[0]);\n            for (int i = 1; i <= n; ++i)\n            {\n                addr = reinterpret_cast<in_addr*>(address->h_addr_list[i]);\n\n                // if there is no nth address then return error\n                if (addr == 0)\n                    return OTHER_ERROR;\n            }\n\n            char* resolved_ip = inet_ntoa(*addr);\n\n            // check if inet_ntoa returned an error\n            if (resolved_ip == NULL)\n            {\n                return OTHER_ERROR;\n            }\n\n            ip.assign(resolved_ip);\n\n        }\n        catch(...)\n        {\n            return OTHER_ERROR;\n        }\n\n        return 0;\n    }\n\n// -----------------\n\n    int\n    ip_to_hostname (\n        const std::string& ip,\n        std::string& hostname\n    )\n    {\n        try \n        {\n            // lock this mutex since gethostbyaddr isn't really thread safe\n            auto_mutex M(sockets_kernel_2_mutex::startup_lock);\n\n            // if no ip was given then return error\n            if (ip.empty())\n                return OTHER_ERROR;\n\n            hostent* address;\n            unsigned long ipnum = inet_addr(ip.c_str());\n\n            // if inet_addr couldn't convert ip then return an error\n            if (ipnum == INADDR_NONE)\n            {\n                return OTHER_ERROR;\n            }\n            address = gethostbyaddr(reinterpret_cast<char*>(&ipnum),4,AF_INET);\n\n            // check if gethostbyaddr returned an error\n            if (address == 0)\n            {\n                return OTHER_ERROR;\n            }\n            hostname.assign(address->h_name);\n\n        }\n        catch (...)\n        {\n            return OTHER_ERROR;\n        }\n        return 0;\n\n    }\n\n#endif // __CYGWIN__\n\n// ----------------------------------------------------------------------------------------\n\n    connection::\n    connection(\n        int sock,\n        int foreign_port, \n        const std::string& foreign_ip, \n        int local_port,\n        const std::string& local_ip\n    ) :\n        connection_socket(sock),\n        connection_foreign_port(foreign_port),\n        connection_foreign_ip(foreign_ip),\n        connection_local_port(local_port),\n        connection_local_ip(local_ip),\n        sd(false),\n        sdo(false),\n        sdr(0)\n    {}\n\n// ----------------------------------------------------------------------------------------\n\n    int connection::\n    disable_nagle()\n    {\n        int flag = 1;\n        if(setsockopt( connection_socket, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) ))\n        {\n            return OTHER_ERROR;\n        }\n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long connection::\n    write (\n        const char* buf, \n        long num\n    )\n    {\n        const long old_num = num;\n        long status;\n        const long max_send_length = 1024*1024*100;\n        while (num > 0)\n        {\n            // Make sure to cap the max value num can take on so that if it is \n            // really large (it might be big on 64bit platforms) so that the OS\n            // can't possibly get upset about it being large.\n            const long length = std::min(max_send_length, num);\n            if ( (status = ::send(connection_socket,buf,length,0)) <=0)\n            {\n                // if send was interupted by a signal then restart it\n                if (errno == EINTR)\n                {\n                    continue;\n                }\n                else\n                {\n                    // check if shutdown or shutdown_outgoing have been called\n                    if (sdo_called())\n                        return SHUTDOWN;\n                    else\n                        return OTHER_ERROR;\n                }\n            }\n            num -= status;\n            buf += status;\n        } \n        return old_num;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long connection::\n    read (\n        char* buf, \n        long num\n    )\n    {\n        long status;\n        const long max_recv_length = 1024*1024*100;\n        while (true)\n        {\n            // Make sure to cap the max value num can take on so that if it is \n            // really large (it might be big on 64bit platforms) so that the OS\n            // can't possibly get upset about it being large.\n            const long length = std::min(max_recv_length, num);\n            status = recv(connection_socket,buf,length,0);\n            if (status == -1)\n            {\n                // if recv was interupted then try again\n                if (errno == EINTR)\n                    continue;\n                else\n                {\n                    if (sd_called())\n                        return SHUTDOWN;\n                    else\n                        return OTHER_ERROR;\n                }\n            }\n            else if (status == 0 && sd_called())\n            {\n                return SHUTDOWN;\n            }\n\n            return status;\n        } // while (true)\n    }\n// ----------------------------------------------------------------------------------------\n\n    long connection::\n    read (\n        char* buf, \n        long num,\n        unsigned long timeout\n    )\n    {\n        long status;\n        const long max_recv_length = 1024*1024*100;\n\n        if (readable(timeout) == false)\n            return TIMEOUT;\n\n        // Make sure to cap the max value num can take on so that if it is \n        // really large (it might be big on 64bit platforms) so that the OS\n        // can't possibly get upset about it being large.\n        const long length = std::min(max_recv_length, num);\n        status = recv(connection_socket,buf,length,0);\n        if (status == -1)\n        {\n            // if recv was interupted then call this a timeout \n            if (errno == EINTR)\n            {\n                return TIMEOUT;\n            }\n            else\n            {\n                if (sd_called())\n                    return SHUTDOWN;\n                else\n                    return OTHER_ERROR;\n            }\n        }\n        else if (status == 0 && sd_called())\n        {\n            return SHUTDOWN;\n        }\n\n        return status;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool connection::\n    readable (\n        unsigned long timeout\n    ) const\n    {\n        fd_set read_set;\n        // initialize read_set\n        FD_ZERO(&read_set);\n\n        // add the listening socket to read_set\n        FD_SET(connection_socket, &read_set);\n\n        // setup a timeval structure\n        timeval time_to_wait;\n        time_to_wait.tv_sec = static_cast<long>(timeout/1000);\n        time_to_wait.tv_usec = static_cast<long>((timeout%1000)*1000);\n\n        // wait on select\n        int status = select(connection_socket+1,&read_set,0,0,&time_to_wait);\n\n        // if select timed out or there was an error\n        if (status <= 0)\n            return false;\n        \n        // socket is ready to be read\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    connection::\n    ~connection (\n    )        \n    {\n        while (true)\n        {\n            int status = ::close(connection_socket);  \n            if (status == -1 && errno == EINTR)\n                continue;\n            break;\n        }\n    }\n\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // listener object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    listener::\n    listener(\n        int sock,\n        int port,\n        const std::string& ip\n    ) :\n        listening_socket(sock),\n        listening_port(port),\n        listening_ip(ip),\n        inaddr_any(listening_ip.empty())\n    {}\n\n// ----------------------------------------------------------------------------------------\n\n    listener::\n    ~listener (\n    )        \n    {\n        while (true)\n        {\n            int status = ::close(listening_socket);  \n            if (status == -1 && errno == EINTR)\n                continue;\n            break;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int listener::\n    accept (\n        scoped_ptr<connection>& new_connection,\n        unsigned long timeout\n    )\n    {\n        new_connection.reset(0);\n        connection* con;\n        int status = this->accept(con, timeout);\n\n        if (status == 0)\n            new_connection.reset(con);\n\n        return status;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int listener::\n    accept (\n        connection*& new_connection,\n        unsigned long timeout\n    )\n    {\n        int incoming;\n        sockaddr_in incomingAddr;\n        dsocklen_t length = sizeof(sockaddr_in);\n\n        // implement timeout with select if timeout is > 0\n        if (timeout > 0)\n        {\n\n            fd_set read_set;\n            // initialize read_set\n            FD_ZERO(&read_set);\n\n            // add the listening socket to read_set\n            FD_SET(listening_socket, &read_set);\n\n            timeval time_to_wait;\n\n\n            // loop on select so if its interupted then we can start it again\n            while (true)\n            {\n\n                // setup a timeval structure\n                time_to_wait.tv_sec = static_cast<long>(timeout/1000);\n                time_to_wait.tv_usec = static_cast<long>((timeout%1000)*1000);\n\n                // wait on select\n                int status = select(listening_socket+1,&read_set,0,0,&time_to_wait);\n\n                // if select timed out\n                if (status == 0)\n                    return TIMEOUT;\n                \n                // if select returned an error\n                if (status == -1)\n                {\n                    // if select was interupted or the connection was aborted\n                    // then go back to select\n                    if (errno == EINTR || \n                        errno == ECONNABORTED || \n#ifdef EPROTO\n                        errno == EPROTO ||\n#endif\n                        errno == ECONNRESET\n                        )\n                    {\n                        continue;\n                    }\n                    else\n                    {\n                        return OTHER_ERROR;\n                    }\n                }\n\n                // accept the new connection\n                incoming=::accept (\n                    listening_socket,\n                    reinterpret_cast<sockaddr*>(&incomingAddr),\n                    &length\n                    );\n\n                // if there was an error return OTHER_ERROR\n                if ( incoming == -1 )\n                {\n                    // if accept was interupted then go back to accept\n                    if (errno == EINTR || \n                        errno == ECONNABORTED || \n#ifdef EPROTO\n                        errno == EPROTO ||\n#endif\n                        errno == ECONNRESET\n                        )\n                    {\n                        continue;\n                    }\n                    else\n                    {\n                        return OTHER_ERROR;\n                    }\n                }\n\n                // if there were no errors then quit loop\n                break;\n\n            }\n\n        }\n        // else if there is no time out then just go into accept\n        else\n        {\n            while (true)\n            {\n                // call accept to get a new connection\n                incoming=::accept (\n                    listening_socket,\n                    reinterpret_cast<sockaddr*>(&incomingAddr),\n                    &length\n                    );\n\n                // if there was an error return OTHER_ERROR\n                if ( incoming == -1 )\n                {\n                    // if accept was interupted then go back to accept\n                    if (errno == EINTR || \n                        errno == ECONNABORTED || \n#ifdef EPROTO\n                        errno == EPROTO ||\n#endif\n                        errno == ECONNRESET\n                        )\n                    {\n                        continue;\n                    }\n                    else\n                    {\n                        return OTHER_ERROR;\n                    }\n                }\n                break;\n            }\n\n        }\n\n        \n        // get the port of the foreign host into foreign_port\n        int foreign_port = ntohs(incomingAddr.sin_port);\n\n        // get the IP of the foreign host into foreign_ip\n        char foreign_ip[16];\n        inet_ntop(AF_INET,&incomingAddr.sin_addr,foreign_ip,16);\n\n\n\n        // get the local ip for this connection into local_ip\n        char temp_local_ip[16];\n        std::string local_ip;\n        if (inaddr_any == true)\n        {\n            sockaddr_in local_info;\n            length = sizeof(sockaddr_in);\n            // get the local sockaddr_in structure associated with this new connection\n            if ( getsockname (\n                    incoming,\n                    reinterpret_cast<sockaddr*>(&local_info),\n                    &length\n                ) == -1\n            )\n            {   // an error occurred\n                while (true)\n                {\n                    int status = ::close(incoming);\n                    if (status == -1 && errno == EINTR)\n                        continue;\n                    break;\n                }\n                return OTHER_ERROR;\n            }\n            local_ip = const_cast<char*> (\n                inet_ntop(AF_INET,&local_info.sin_addr,temp_local_ip,16)\n                );\n        }\n        else\n        {\n            local_ip = listening_ip;\n        }\n\n\n\n        // set the SO_OOBINLINE option\n        int flag_value = 1;\n        if (setsockopt(incoming,SOL_SOCKET,SO_OOBINLINE,reinterpret_cast<const void*>(&flag_value),sizeof(int)))\n        {\n            while (true)\n            {\n                int status = ::close(incoming);\n                if (status == -1 && errno == EINTR)\n                    continue;\n                break;\n            }\n            return OTHER_ERROR;  \n        }\n\n\n\n        // make a new connection object for this new connection\n        try \n        { \n            new_connection = new connection (\n                                    incoming,\n                                    foreign_port,\n                                    foreign_ip,\n                                    listening_port,\n                                    local_ip\n                                ); \n        }\n        catch (...) \n        { \n            while (true)\n            {\n                int status = ::close(incoming);\n                if (status == -1 && errno == EINTR)\n                    continue;\n                break;\n            }\n            return OTHER_ERROR; \n        }\n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // socket creation functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------    \n\n    static void\n    close_socket (\n        int sock\n    )\n    /*! \n        requires\n            - sock == a socket\n        ensures\n            - sock has been closed\n    !*/\n    {\n        while (true)\n        {\n            int status = ::close(sock);\n            if (status == -1 && errno == EINTR)\n                continue;\n            break;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------    \n\n    int create_listener (\n        scoped_ptr<listener>& new_listener,\n        unsigned short port,\n        const std::string& ip\n    )\n    {\n        new_listener.reset();\n        listener* temp;\n        int status = create_listener(temp,port,ip);\n\n        if (status == 0)\n            new_listener.reset(temp);\n\n        return status;\n    }\n\n    int create_listener (\n        listener*& new_listener,\n        unsigned short port,\n        const std::string& ip\n    )\n    {\n        sockets_startup();\n\n\n        sockaddr_in sa;  // local socket structure\n        memset(&sa,'\\0',sizeof(sockaddr_in)); // initialize sa\n        \n\n        int sock = socket (AF_INET, SOCK_STREAM, 0);  // get a new socket\n\n        // if socket() returned an error then return OTHER_ERROR\n        if (sock == -1)\n        {\n            return OTHER_ERROR;\n        }\n\n        // set the local socket structure \n        sa.sin_family = AF_INET;\n        sa.sin_port = htons(port);\n        if (ip.empty())\n        {            \n            // if the listener should listen on any IP\n            sa.sin_addr.s_addr = htons(INADDR_ANY);\n        }\n        else\n        {\n            // if there is a specific ip to listen on\n            sa.sin_addr.s_addr = inet_addr(ip.c_str());\n\n            // if inet_addr couldn't convert the ip then return an error\n            if ( sa.sin_addr.s_addr == ( in_addr_t)(-1))\n            {\n                close_socket(sock);\n                return OTHER_ERROR;\n            }\n        }\n\n        // set the SO_REUSEADDR option\n        int flag_value = 1;\n        if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,reinterpret_cast<const void*>(&flag_value),sizeof(int)))\n        {\n            close_socket(sock);\n            return OTHER_ERROR;\n        }\n\n\n        // bind the new socket to the requested port and ip\n        if (bind(sock,reinterpret_cast<sockaddr*>(&sa),sizeof(sockaddr_in)) == -1)\n        {   // if there was an error \n            close_socket(sock); \n\n            // if the port is already bound then return PORTINUSE\n            if (errno == EADDRINUSE)\n                return PORTINUSE;\n            else\n                return OTHER_ERROR;            \n        }\n\n\n        // tell the new socket to listen\n        if ( listen(sock,SOMAXCONN) == -1)\n        {\n            // if there was an error return OTHER_ERROR\n            close_socket(sock); \n\n            // if the port is already bound then return PORTINUSE\n            if (errno == EADDRINUSE)\n                return PORTINUSE;\n            else\n                return OTHER_ERROR;   \n        }\n\n        // determine the used local port if necessary\n        if (port == 0)\n        {\n            sockaddr_in local_info;\n            dsocklen_t length = sizeof(sockaddr_in);\n            if ( getsockname(\n                sock,\n                reinterpret_cast<sockaddr*>(&local_info),\n                &length\n                ) == -1)\n            {\n                close_socket(sock);\n                return OTHER_ERROR;\n            }\n            port = ntohs(local_info.sin_port);            \n        }\n\n        // initialize a listener object on the heap with the new socket\n        try { new_listener = new listener(sock,port,ip); }\n        catch(...) { close_socket(sock); return OTHER_ERROR; }\n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int create_connection (\n        scoped_ptr<connection>& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port,\n        const std::string& local_ip\n    )\n    {\n        new_connection.reset();\n        connection* temp;\n        int status = create_connection(temp,foreign_port, foreign_ip, local_port, local_ip);\n\n        if (status == 0)\n            new_connection.reset(temp);\n\n        return status;\n    }\n\n    int \n    create_connection ( \n        connection*& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port,\n        const std::string& local_ip\n    )\n    {\n        sockets_startup();\n        \n        sockaddr_in local_sa;  // local socket structure\n        sockaddr_in foreign_sa;  // foreign socket structure\n        memset(&local_sa,'\\0',sizeof(sockaddr_in)); // initialize local_sa\n        memset(&foreign_sa,'\\0',sizeof(sockaddr_in)); // initialize foreign_sa\n\n        dsocklen_t length;\n\n        int sock = socket (AF_INET, SOCK_STREAM, 0);  // get a new socket\n\n        // if socket() returned an error then return OTHER_ERROR\n        if (sock == -1 )\n        {\n            return OTHER_ERROR;\n        }\n\n        // set the foreign socket structure \n        foreign_sa.sin_family = AF_INET;\n        foreign_sa.sin_port = htons(foreign_port);\n        foreign_sa.sin_addr.s_addr = inet_addr(foreign_ip.c_str());\n\n        // if inet_addr couldn't convert the ip then return an error\n        if ( foreign_sa.sin_addr.s_addr == ( in_addr_t)(-1))\n        {\n            close_socket(sock);\n            return OTHER_ERROR;\n        }\n\n\n        // set up the local socket structure\n        local_sa.sin_family = AF_INET;\n\n        // set the local port\n        local_sa.sin_port = htons(local_port);\n\n        // set the local ip\n        if (local_ip.empty())\n        {            \n            // if the listener should listen on any IP\n            local_sa.sin_addr.s_addr = htons(INADDR_ANY);\n        }\n        else\n        {\n            // if there is a specific ip to listen on\n            local_sa.sin_addr.s_addr = inet_addr(local_ip.c_str());  \n\n            // if inet_addr couldn't convert the ip then return an error\n            if ( local_sa.sin_addr.s_addr == ( in_addr_t)(-1))\n            {\n                close_socket(sock);\n                return OTHER_ERROR;\n            }\n        }\n\n\n\n        \n\n        // bind the new socket to the requested local port and local ip\n        if ( bind(sock,reinterpret_cast<sockaddr*>(&local_sa),sizeof(sockaddr_in)) == -1)\n        {   // if there was an error \n            close_socket(sock); \n\n            // if the port is already bound then return PORTINUSE\n            if (errno == EADDRINUSE)\n                return PORTINUSE;\n            else\n                return OTHER_ERROR;           \n        }\n\n        // connect the socket        \n        if ( connect (\n                sock,\n                reinterpret_cast<sockaddr*>(&foreign_sa),\n                sizeof(sockaddr_in)\n            ) == -1\n        )\n        {\n            close_socket(sock); \n            // if the port is already bound then return PORTINUSE\n            if (errno == EADDRINUSE)\n                return PORTINUSE;\n            else\n                return OTHER_ERROR;    \n        }\n\n\n        // determine the local port and IP and store them in used_local_ip \n        // and used_local_port\n        int used_local_port;\n        char temp_used_local_ip[16];\n        std::string used_local_ip;\n        sockaddr_in local_info;\n\n        // determine the port\n        if (local_port == 0)\n        {\n            length = sizeof(sockaddr_in);\n            if ( getsockname(\n                    sock,\n                    reinterpret_cast<sockaddr*>(&local_info),\n                    &length\n                ) == -1)\n            {\n                close_socket(sock);\n                return OTHER_ERROR;\n            }\n            used_local_port = ntohs(local_info.sin_port);            \n        }\n        else\n        {\n            used_local_port = local_port;\n        }\n\n        // determine the ip\n        if (local_ip.empty())\n        {\n            // if local_port is not 0 then we must fill the local_info structure\n            if (local_port != 0)\n            {\n                length = sizeof(sockaddr_in);\n                if ( getsockname (\n                        sock,\n                        reinterpret_cast<sockaddr*>(&local_info),\n                        &length\n                    ) == -1\n                )\n                {\n                    close_socket(sock);\n                    return OTHER_ERROR;\n                }\n            }\n            used_local_ip = inet_ntop(AF_INET,&local_info.sin_addr,temp_used_local_ip,16);\n        }\n        else\n        {\n            used_local_ip = local_ip;\n        }\n\n\n        // set the SO_OOBINLINE option\n        int flag_value = 1;\n        if (setsockopt(sock,SOL_SOCKET,SO_OOBINLINE,reinterpret_cast<const void*>(&flag_value),sizeof(int)))\n        {\n            close_socket(sock);\n            return OTHER_ERROR;  \n        }\n\n\n        // initialize a connection object on the heap with the new socket\n        try \n        { \n            new_connection = new connection (\n                                    sock,\n                                    foreign_port,\n                                    foreign_ip,\n                                    used_local_port,\n                                    used_local_ip\n                                ); \n        }\n        catch(...) {close_socket(sock);  return OTHER_ERROR; }\n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // POSIX\n\n#endif // DLIB_SOCKETS_KERNEL_2_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/sockets_kernel_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net), Miguel Grinberg\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKETS_KERNEl_2_\n#define DLIB_SOCKETS_KERNEl_2_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n#include \"../platform.h\"\n\n#include \"sockets_kernel_abstract.h\"\n\n#define _BSD_SOCKLEN_T_\n\n#include <sys/types.h>\n#include <sys/socket.h>\n#include <errno.h>\n#include <ctime>\n#ifndef HPUX\n#include <sys/select.h>\n#endif\n#include <arpa/inet.h>\n#include <signal.h>\n#include <inttypes.h>\n#include <netdb.h>\n#include <unistd.h>\n#include <sys/param.h>\n#include <string>\n\n#include <netinet/in.h>\n\n#include \"../threads.h\"\n#include \"../algs.h\"\n#include \"../smart_pointers.h\"\n\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    // forward declarations\n    class socket_factory;\n    class listener;\n\n// ----------------------------------------------------------------------------------------\n\n    // lookup functions\n\n    int\n    get_local_hostname (\n        std::string& hostname\n    );\n\n// -----------------\n\n    int \n    hostname_to_ip (\n        const std::string& hostname,\n        std::string& ip,\n        int n = 0\n    );\n\n// -----------------\n\n    int\n    ip_to_hostname (\n        const std::string& ip,\n        std::string& hostname\n    );\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // connection object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class connection\n    {\n        /*!\n            INITIAL_VALUE\n                sd                      == false\n                sdo                     == false\n                sdr                     == 0\n\n\n            CONVENTION\n                connection_socket       == the socket handle for this connection.  \n                connection_foreign_port == the port that foreign host is using for \n                                           this connection\n                connection_foreign_ip   == a string containing the IP address of the \n                                           foreign host\n                connection_local_port   == the port that the local host is using for \n                                           this connection\n                connection_local_ip     == a string containing the IP address of the \n                                           local interface being used by this connection\n\n                sd                      == if shutdown() has been called then true\n                                           else false\n                sdo                     == if shutdown_outgoing() has been called then true\n                                           else false\n                sdr                     == the return value of shutdown() if it has been\n                                           called.  if it hasn't been called then 0\n\n\n        !*/\n\n        friend class listener;                // make listener a friend of connection\n        // make create_connection a friend of connection\n        friend int create_connection ( \n            connection*& new_connection,\n            unsigned short foreign_port, \n            const std::string& foreign_ip, \n            unsigned short local_port,\n            const std::string& local_ip\n        );\n\n    public:\n\n        ~connection();\n\n        void* user_data;\n\n        long write (\n            const char* buf, \n            long num\n        );\n\n        long read (\n            char* buf, \n            long num\n        );\n\n        long read (\n            char* buf, \n            long num,\n            unsigned long timeout\n        );\n\n        int get_local_port (\n        ) const { return connection_local_port; }\n\n        int get_foreign_port ( \n        ) const { return connection_foreign_port; }\n\n        const std::string& get_local_ip (\n        ) const { return connection_local_ip; }\n\n        const std::string& get_foreign_ip (\n        ) const { return connection_foreign_ip; }\n\n        int shutdown_outgoing (\n        ) \n        {\n            sd_mutex.lock();\n            if (sdo || sd)\n            {\n                sd_mutex.unlock();\n                return sdr;\n            }\n            sdo = true;\n            sdr = ::shutdown(connection_socket,SHUT_WR); \n            int temp = sdr;\n            sd_mutex.unlock();\n            return temp;  \n        }\n\n        int shutdown (\n        ) \n        {\n            sd_mutex.lock();\n            if (sd)\n            {\n                sd_mutex.unlock();\n                return sdr;\n            }\n            sd = true;\n            sdr = ::shutdown(connection_socket,SHUT_RDWR); \n            int temp = sdr;\n            sd_mutex.unlock();            \n            return temp;\n        }\n\n        int disable_nagle(\n        );\n\n        typedef int socket_descriptor_type;\n\n        socket_descriptor_type get_socket_descriptor (\n        ) const { return connection_socket; }\n\n    private:\n\n        bool readable (\n            unsigned long timeout \n        ) const;\n        /*! \n            requires \n                - timeout < 2000000  \n            ensures \n                - returns true if a read call on this connection will not block. \n                - returns false if a read call on this connection will block or if \n                  there was an error. \n        !*/ \n\n        bool sd_called (\n        )const\n        /*!\n            ensures\n                - returns true if shutdown() has been called else\n                - returns false\n        !*/\n        {\n            sd_mutex.lock();\n            bool temp = sd;\n            sd_mutex.unlock();\n            return temp;\n        }\n\n        bool sdo_called (\n        )const\n        /*!\n            ensures\n                - returns true if shutdown_outgoing() or shutdown() has been called\n                  else returns false\n        !*/\n        {\n            sd_mutex.lock();\n            bool temp = false;\n            if (sdo || sd)\n                temp = true;\n            sd_mutex.unlock();\n            return temp;\n        }\n\n\n        // data members\n        int connection_socket;\n        const int connection_foreign_port;\n        const std::string connection_foreign_ip; \n        const int connection_local_port;\n        const std::string connection_local_ip;\n\n        bool sd;  // called shutdown\n        bool sdo; // called shutdown_outgoing\n        int sdr; // return value for shutdown \n        mutex sd_mutex; // a lock for the three above vars\n\n        connection(\n            int sock,\n            int foreign_port, \n            const std::string& foreign_ip, \n            int local_port,\n            const std::string& local_ip\n        ); \n        /*!\n            requires\n                - sock is a socket handle \n                - sock is the handle for the connection between foreign_ip:foreign_port \n                  and local_ip:local_port\n            ensures\n                - *this is initialized correctly with the above parameters\n        !*/\n\n\n        // restricted functions\n        connection();\n        connection(connection&);        // copy constructor\n        connection& operator=(connection&);    // assignement opertor\n    }; \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // listener object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class listener\n    {\n        /*!\n            CONVENTION\n                if (inaddr_any == false)\n                {\n                    listening_ip == a string containing the address the listener is \n                                    listening on\n                }\n                else\n                {\n                    the listener is listening on all interfaces\n                }\n                \n                listening_port == the port the listener is listening on\n                listening_socket == the listening socket handle for this object\n        !*/\n\n        // make the create_listener a friend of listener\n        friend int create_listener (\n            listener*& new_listener,\n            unsigned short port,\n            const std::string& ip\n        );\n\n    public:\n\n        ~listener();\n\n        int accept (\n            connection*& new_connection,\n            unsigned long timeout = 0\n        );\n\n        int accept (\n            scoped_ptr<connection>& new_connection,\n            unsigned long timeout = 0\n        );\n\n        int get_listening_port (\n        ) const { return listening_port; }\n\n        const std::string& get_listening_ip (\n        ) const { return listening_ip; }\n\n    private:\n\n        // data members\n        int listening_socket;\n        const int listening_port;\n        const std::string listening_ip;\n        const bool inaddr_any;\n\n        listener(\n            int sock,\n            int port,\n            const std::string& ip\n        );\n        /*!\n            requires\n                - sock is a socket handle \n                - sock is listening on the port and ip(may be \"\") indicated in the above \n                  parameters\n            ensures\n                - *this is initialized correctly with the above parameters\n        !*/\n\n\n        // restricted functions\n        listener();\n        listener(listener&);        // copy constructor\n        listener& operator=(listener&);    // assignement opertor\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    int create_listener (\n        listener*& new_listener,\n        unsigned short port,\n        const std::string& ip = \"\"\n    );\n\n    int create_connection ( \n        connection*& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port = 0,\n        const std::string& local_ip = \"\"\n    );\n\n    int create_listener (\n        scoped_ptr<listener>& new_listener,\n        unsigned short port,\n        const std::string& ip = \"\"\n    );\n\n    int create_connection ( \n        scoped_ptr<connection>& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port = 0,\n        const std::string& local_ip = \"\"\n    );\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"sockets_kernel_2.cpp\"\n#endif\n\n#endif // DLIB_SOCKETS_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/sockets_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SOCKETS_KERNEl_ABSTRACT_\n#ifdef DLIB_SOCKETS_KERNEl_ABSTRACT_\n\n#include <string>\n#include \"../threads.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*!\n        GENERAL COMMENTS:\n            Nothing in here will throw exceptions.   \n            \n            All ip address strings in this file refer to IPv4 addresses.  For \n            example \"192.168.1.1\"\n\n            Timeouts:\n                All timeout values are measured in milliseconds but you are not \n                guaranteed to have that level of resolution.  The actual resolution\n                is implementation defined.\n\n            GENERAL WARNING\n                Don't call any of these functions or make any of these objects \n                before main() has been entered.  \n\n        EXCEPTIONS\n            Unless specified otherwise, nothing in this file throws exceptions.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    // LOOKUP FUNCTIONS\n\n    // all lookup functions are thread-safe\n\n    int get_local_hostname (\n        std::string& hostname\n    );\n    /*!\n        ensures\n            - if (#get_local_hostname() == 0) then\n                - #hostname == a string containing the hostname of the local computer \n\n            - returns 0 upon success\n            - returns OTHER_ERROR upon failure and in this case #hostname's value \n              is undefined\n    !*/ \n\n// -----------------\n\n    int hostname_to_ip (\n        const std::string& hostname,\n        std::string& ip,\n        int n = 0\n    );\n    /*!\n        requires\n            - n >= 0\n        ensures\n            - if (#hostname_to_ip() == 0) then\n                - #ip == string containing the nth ip address associated with the hostname\n\n            - returns 0 upon success \n            - returns OTHER_ERROR upon failure  \n    !*/\n\n// -----------------\n\n    int ip_to_hostname (\n        const std::string& ip,\n        std::string& hostname\n    );\n    /*!\n        ensures\n            - if (#ip_to_hostname() == 0) then\n                - #hostname == string containing the hostname associated with ip\n\n            - returns 0 upon success \n            - returns OTHER_ERROR upon failure \n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    //\n    // socket creation functions\n    // \n    // The following functions are guaranteed to be thread-safe\n    //\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------    \n\n    int create_listener (\n        listener*& new_listener,\n        unsigned short port,\n        const std::string& ip = \"\"\n    );\n    /*!\n        requires\n            - 0 <= port <= 65535\n        ensures\n            - if (#create_listener() == 0) then\n                - #new_listener == a pointer to a listener object that is listening on \n                  the specified port and ip for an incoming connection \n                - if (ip == \"\") then \n                    - the new listener will be listening on all interfaces \n                - if (port == 0) then \n                    - the operating system will assign a free port to listen on \n\n\n            - returns 0 if create_listener was successful \n            - returns PORTINUSE if the specified local port was already in use \n            - returns OTHER_ERROR if some other error occurred\n    !*/\n\n    int create_listener (\n        scoped_ptr<listener>& new_listener,\n        unsigned short port,\n        const std::string& ip = \"\"\n    );\n    /*!\n        This function is just an overload of the above function but it gives you a\n        scoped_ptr smart pointer instead of a C pointer.\n    !*/\n\n    int create_connection ( \n        connection*& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port = 0,\n        const std::string& local_ip = \"\"\n    );\n    /*!\n        requires\n            - 0 <  foreign_port <= 65535 \n            - 0 <= local_port   <= 65535\n        ensures\n            - if (#create_connection() == 0) then\n                - #new_connection  == a pointer to a connection object that is connected \n                  to foreign_ip on port foreign_port and is using the local interface \n                  local_ip and local port local_port\n                - #new_connection->user_data == 0\n                - if (local_ip == \"\") then \n                    - the operating system will chose this for you\n                - if (local_port == 0) then \n                    - the operating system will chose this for you\n\n            - returns 0 if create_connection was successful \n            - returns PORTINUSE if the specified local port was already in use \n            - returns OTHER_ERROR if some other error occurred\n        !*/\n\n    int create_connection ( \n        scoped_ptr<connection>& new_connection,\n        unsigned short foreign_port, \n        const std::string& foreign_ip, \n        unsigned short local_port = 0,\n        const std::string& local_ip = \"\"\n    );\n    /*!\n        This function is just an overload of the above function but it gives you a\n        scoped_ptr smart pointer instead of a C pointer.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // connection object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class connection\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a TCP connection.\n\n                Instances of this class can only be created by using the \n                create_connection function or listener class defined below.\n\n                NOTE:  \n                    A connection object must ALWAYS be closed (delete the pointer to the \n                    connection) or it will cause a resource leak.  \n\n                    Note also that all errors indicated by a return code of OTHER_ERROR\n                    are fatal so if one occurs the connection should just be closed.\n\n            CLOSING A CONNECTION\n                Note that if ~connection() or shutdown() is called before the remote client \n                has received all sent data it is possible that the data will be lost.  To \n                avoid this you should call the close_gracefully() function to close your \n                connections (unless you actually do want to immediately dispose of a \n                connection and don't care about the data).\n                (example: close_gracefully(con); // close con gracefully but force it closed\n                                                   // if it takes more than 500 milliseconds.)\n\n            THREAD SAFETY\n                - It is always safe to call shutdown() or shutdown_outgoing().   \n                - you may NOT call any function more than once at a time (except the \n                  shutdown functions).\n                - do not call read() more than once at a time\n                - do not call write() more than once at a time\n                - You can safely call shutdown or shutdown_outgoing in conjunction with \n                  the read/write functions.\n                    This is helpful if you want to unblock another thread that is \n                    blocking on a read/write operation.  Shutting down the connection \n                    will cause the read/write functions to return a value of SHUTDOWN.\n\n            OUT-OF-BAND DATA:\n                All out-of-band data will be put inline into the normal data stream.\n                This means that you can read any out-of-band data via calls to read(). \n                (i.e. the SO_OOBINLINE socket option will be set) \n        !*/\n\n    public:\n\n        ~connection (\n        );\n        /*!\n            requires\n                - no other threads are using this connection object \n            ensures\n                - closes the connection (this is an abrupt non-graceful close) \n                - frees the resources used by this object\n        !*/\n\n        void* user_data;\n        /*!\n            This pointer is provided so that the client programmer may easily associate\n            some data with a connection object.  You can really do whatever you want\n            with it.  Initially user_data is 0.\n        !*/\n\n        long write (\n            const char* buf, \n            long num\n        );\n        /*!\n            requires\n                - num > 0 \n                - buf points to an array of at least num bytes\n            ensures\n                - will block until ONE of the following occurrs:\n                    - num bytes from buf have been written to the connection \n                    - an error has occurred\n                    - the outgoing channel of the connection has been shutdown locally\n\n                - returns num if write succeeded \n                - returns OTHER_ERROR if there was an error (this could be due to a \n                  connection close)\n                - returns SHUTDOWN if the outgoing channel of the connection has been \n                  shutdown locally\n        !*/\n\n        long read (\n            char* buf, \n            long num\n        );\n        /*!\n            requires\n                - num > 0 \n                - buf points to an array of at least num bytes\n            ensures\n                - read() will not read more than num bytes of data into #buf \n                - read blocks until ONE of the following happens:\n                    - there is some data available and it has been written into #buf \n                    - the remote end of the connection is closed \n                    - an error has occurred\n                    - the connection has been shutdown locally\n\n                - returns the number of bytes read into #buf if there was any data.\n                - returns 0 if the connection has ended/terminated and there is no more data.\n                - returns OTHER_ERROR if there was an error.\n                - returns SHUTDOWN if the connection has been shutdown locally\n        !*/\n\n        long read (\n            char* buf, \n            long num,\n            unsigned long timeout \n        );\n        /*!\n            requires\n                - num > 0 \n                - buf points to an array of at least num bytes\n                - timeout < 2000000                \n            ensures\n                - read() will not read more than num bytes of data into #buf \n                - if (timeout > 0) then read() blocks until ONE of the following happens:\n                    - there is some data available and it has been written into #buf \n                    - the remote end of the connection is closed \n                    - an error has occurred\n                    - the connection has been shutdown locally\n                    - timeout milliseconds has elapsed\n                - else\n                    - read() does not block\n\n                - returns the number of bytes read into #buf if there was any data.\n                - returns 0 if the connection has ended/terminated and there is no more data.\n                - returns TIMEOUT if timeout milliseconds elapsed before we got any data.\n                - returns OTHER_ERROR if there was an error.\n                - returns SHUTDOWN if the connection has been shutdown locally\n        !*/\n\n        unsigned short get_local_port (\n        ) const;\n        /*!\n            ensures\n                - returns the local port number for this connection\n        !*/\n\n        unsigned short get_foreign_port ( \n        ) const;\n        /*!\n            ensures\n                - returns the foreign port number for this connection\n        !*/\n\n        const std::string& get_local_ip (\n        ) const;\n        /*!\n            ensures\n                - returns the IP of the local interface this connection is using\n        !*/\n\n        const std::string& get_foreign_ip (\n        ) const;\n        /*!\n            ensures\n                - returns the IP of the foreign host for this connection\n        !*/\n\n        int shutdown (\n        );\n        /*!\n            ensures\n                - if (#shutdown() == 0 && connection was still open) then\n                    - terminates the connection but does not free the resources for the \n                      connection object \n\n                - any read() or write() calls on this connection will return immediately \n                  with the code SHUTDOWN.\n\n                - returns 0 upon success \n                - returns OTHER_ERROR if there was an error\n        !*/        \n\n        int shutdown_outgoing (\n        );\n        /*!\n            ensures\n                - if (#shutdown_outgoing() == 0 && outgoing channel was still open) then\n                    - sends a FIN to indicate that no more data will be sent on this \n                      connection but leaves the receive half of the connection open to \n                      receive more data from the other host \n\n                - any calls to write() will return immediately with the code SHUTDOWN.\n\n                - returns 0 upon success \n                - returns OTHER_ERROR if there was an error \n        !*/\n\n        int disable_nagle(\n        );\n        /*!\n            ensures\n                - Sets the TCP_NODELAY socket option to disable Nagle's algorithm.\n                  This can sometimes reduce transmission latency, however, in almost\n                  all normal cases you don't want to mess with this as the default\n                  setting is usually appropriate.  \n\n                - returns 0 upon success\n                - returns OTHER_ERROR if there was an error \n        !*/\n\n        typedef platform_specific_type socket_descriptor_type;\n        socket_descriptor_type get_socket_descriptor (\n        ) const;\n        /*!\n            ensures\n                - returns the underlying socket descriptor for this connection\n                  object.  The reason you might want access to this is to \n                  pass it to some other library that requires a socket file \n                  descriptor.  However, if you do this then you probably shouldn't \n                  use the dlib::connection read() and write() anymore since\n                  whatever you are doing with the socket descriptor is probably \n                  doing I/O with the socket.\n        !*/\n\n    private:\n        // restricted functions\n        connection();\n        connection(connection&);        // copy constructor\n        connection& operator=(connection&);    // assignment operator\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // listener object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class listener\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a TCP socket waiting for incoming connections.\n                Calling accept returns a pointer to any new incoming connections on its\n                port.\n\n                Instances of this class can only be created by using the \n                create_listener function defined below.\n\n                NOTE:  \n                    A listener object must ALWAYS be closed (delete the pointer to it) or \n                    it will cause a resource leak.  \n\n                    Note also that all errors indicated by a return code of OTHER_ERROR\n                    are fatal so if one occurs the listener should be closed.\n\n            THREAD SAFETY\n                None of the functions in this object are guaranteed to be thread-safe.\n                This means that you must serialize all access to this object.\n        !*/\n\n    public:\n\n        ~listener (\n        );\n        /*!\n            requires\n                - no other threads are using this listener object \n            ensures\n                - closes the listener \n                - frees the resources used by this object\n        !*/\n\n        int accept (\n            connection*& new_connection,\n            unsigned long timeout = 0\n        );\n        /*!\n            requires\n                - timeout < 2000000                \n            ensures\n                - blocks until a new connection is ready or timeout milliseconds have \n                  elapsed.\n                - #new_connection == a pointer to the new connection object \n                - #new_connection->user_data == 0\n                - if (timeout == 0) then \n                    - the timeout argument is ignored\n\n                - returns 0 if accept() was successful                \n                - returns TIMEOUT if timeout milliseconds have elapsed \n                - returns OTHER_ERROR if an error has occurred \n        !*/\n\n        int accept (\n            scoped_ptr<connection>& new_connection,\n            unsigned long timeout = 0\n        );\n        /*!\n            This function is just an overload of the above function but it gives you a\n            scoped_ptr smart pointer instead of a C pointer.\n        !*/\n\n        unsigned short get_listening_port (\n        ) const;\n        /*!\n            ensures\n                - returns the port number that this object is listening on\n        !*/\n\n        const std::string& get_listening_ip (\n        ) const;\n        /*!\n            ensures\n                - returns a string containing the IP (e.g. \"127.0.0.1\") of the \n                  interface this object is listening on \n                - returns \"\" if it is accepting connections on all interfaces\n        !*/\n\n    private:\n        // restricted functions\n        listener();\n        listener(listener&);        // copy constructor\n        listener& operator=(listener&);    // assignment operator\n    };\n}\n\n#endif // DLIB_SOCKETS_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets/windows.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKETS_KERNEl_2_\n#include \"sockets_kernel_1.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockets.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKETs_\n#define DLIB_SOCKETs_\n\n#include \"platform.h\"\n\n\n#ifdef WIN32\n#include \"sockets/windows.h\"\n#endif\n\n#ifndef WIN32\n#include \"sockets/posix.h\"\n#endif\n\n#include \"sockets/sockets_extensions.h\"\n\n#endif // DLIB_SOCKETs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockstreambuf/sockstreambuf.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKStREAMBUF_CPp_\n#define DLIB_SOCKStREAMBUF_CPp_\n\n#include \"sockstreambuf.h\"\n#include \"../assert.h\"\n\n#include <cstring>\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n    // output functions\n// ---------------------------------------------------------------------------------------- \n\n    sockstreambuf::int_type sockstreambuf::\n    overflow (\n        int_type c\n    )\n    {\n        if (c != EOF)\n        {\n            *pptr() = c;\n            pbump(1);\n        }\n        if (flush_out_buffer() == EOF)\n        {\n            // an error occurred\n            return EOF;\n        }\n        return c;\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    std::streamsize sockstreambuf::\n    xsputn (\n        const char* s,\n        std::streamsize num\n    )\n    {\n        // Add a sanity check here \n        DLIB_ASSERT(num >= 0,\n            \"\\tstd::streamsize sockstreambuf::xsputn\"\n            << \"\\n\\tThe number of bytes to write can't be negative\"\n            << \"\\n\\tnum:  \" << num \n            << \"\\n\\tthis: \" << this\n            );\n\n        std::streamsize space_left = static_cast<std::streamsize>(epptr()-pptr());\n        if (num <= space_left)\n        {\n            std::memcpy(pptr(),s,static_cast<size_t>(num));\n            pbump(static_cast<int>(num));\n            return num;\n        }\n        else\n        {\n            std::memcpy(pptr(),s,static_cast<size_t>(space_left));\n            s += space_left;\n            pbump(space_left);\n            std::streamsize num_left = num - space_left;\n\n            if (flush_out_buffer() == EOF)\n            {\n                // the write was not successful so return that 0 bytes were written\n                return 0;\n            }\n\n            if (num_left < out_buffer_size)\n            {\n                std::memcpy(pptr(),s,static_cast<size_t>(num_left));\n                pbump(num_left);\n                return num;\n            }\n            else\n            {\n                if (con.write(s,num_left) != num_left)\n                {\n                    // the write was not successful so return that 0 bytes were written\n                    return 0;\n                } \n                return num;\n            }\n        }\n    }\n\n// ---------------------------------------------------------------------------------------- \n    // input functions\n// ---------------------------------------------------------------------------------------- \n\n    sockstreambuf::int_type sockstreambuf::\n    underflow( \n    )\n    {\n        if (gptr() < egptr())\n        {\n            return static_cast<unsigned char>(*gptr());\n        }\n\n        int num_put_back = static_cast<int>(gptr() - eback());\n        if (num_put_back > max_putback)\n        {\n            num_put_back = max_putback;\n        }\n\n        // copy the putback characters into the putback end of the in_buffer\n        std::memmove(in_buffer+(max_putback-num_put_back), gptr()-num_put_back, num_put_back);\n\n        if (flushes_output_on_read())\n        {\n            if (flush_out_buffer() == EOF)\n            {\n                // an error occurred\n                return EOF;\n            }\n        }\n\n        int num = con.read(in_buffer+max_putback, in_buffer_size-max_putback);\n        if (num <= 0)\n        {\n            // an error occurred or the connection is over which is EOF\n            return EOF;\n        }\n\n        // reset in_buffer pointers\n        setg (in_buffer+(max_putback-num_put_back),\n              in_buffer+max_putback,\n              in_buffer+max_putback+num);\n\n        return static_cast<unsigned char>(*gptr());\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    std::streamsize sockstreambuf::\n    xsgetn (\n        char_type* s, \n        std::streamsize n\n    )\n    { \n        std::streamsize temp = n;\n        while (n > 0)\n        {\n            int num = static_cast<int>(egptr() - gptr());\n            if (num >= n)\n            {\n                // copy data from our buffer \n                std::memcpy(s, gptr(), static_cast<size_t>(n));\n                gbump(static_cast<int>(n));\n                return temp;\n            }\n\n            // read more data into our buffer  \n            if (num == 0)\n            {\n                if (underflow() == EOF)\n                    break;\n                continue;\n            }\n\n            // copy all the data from our buffer \n            std::memcpy(s, gptr(), num);\n            n -= num;\n            gbump(num);\n            s += num;\n        }\n        return temp-n;       \n    }\n\n// ---------------------------------------------------------------------------------------- \n\n}\n#endif // DLIB_SOCKStREAMBUF_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockstreambuf/sockstreambuf.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKStREAMBUF_Hh_\n#define DLIB_SOCKStREAMBUF_Hh_\n\n#include <iosfwd>\n#include <streambuf>\n#include \"../sockets.h\"\n#include \"sockstreambuf_abstract.h\"\n#include \"sockstreambuf_unbuffered.h\"\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n\n    class sockstreambuf : public std::streambuf\n    {\n        /*!\n            INITIAL VALUE\n                - con == a connection\n                - in_buffer == an array of in_buffer_size bytes\n                - out_buffer == an array of out_buffer_size bytes\n\n            CONVENTION\n                - in_buffer == the input buffer used by this streambuf\n                - out_buffer == the output buffer used by this streambuf\n                - max_putback == the maximum number of chars to have in the put back buffer.\n        !*/\n\n    public:\n\n        // These typedefs are here for backwards compatibility with previous versions of\n        // dlib.\n        typedef sockstreambuf_unbuffered kernel_1a;\n        typedef sockstreambuf kernel_2a;\n\n        sockstreambuf (\n            connection* con_\n        ) :\n            con(*con_),\n            out_buffer(0),\n            in_buffer(0),\n            autoflush(false)\n        {\n            init();\n        }\n\n        sockstreambuf (\n            const scoped_ptr<connection>& con_\n        ) :\n            con(*con_),\n            out_buffer(0),\n            in_buffer(0),\n            autoflush(false)\n        {\n            init();\n        }\n\n        virtual ~sockstreambuf (\n        )\n        {\n            sync();\n            delete [] out_buffer;\n            delete [] in_buffer;\n        }\n\n        connection* get_connection (\n        ) { return &con; }\n\n        void flush_output_on_read()\n        {\n            autoflush = true;\n        }\n\n        bool flushes_output_on_read() const\n        {\n            return autoflush;\n        }\n\n        void do_not_flush_output_on_read()\n        {\n            autoflush = false;\n        }\n\n    protected:\n\n        void init (\n        )\n        {\n            try\n            {\n                out_buffer = new char[out_buffer_size];\n                in_buffer = new char[in_buffer_size];\n            }\n            catch (...)\n            {\n                if (out_buffer) delete [] out_buffer;\n                throw;\n            }\n            setp(out_buffer, out_buffer + (out_buffer_size-1));\n            setg(in_buffer+max_putback, \n                 in_buffer+max_putback, \n                 in_buffer+max_putback);\n        }\n\n        int flush_out_buffer (\n        )\n        {\n            int num = static_cast<int>(pptr()-pbase());\n            if (con.write(out_buffer,num) != num)\n            {\n                // the write was not successful so return EOF \n                return EOF;\n            } \n            pbump(-num);\n            return num;\n        }\n\n        // output functions\n        int_type overflow (\n            int_type c\n        );\n\n        int sync (\n        )\n        {\n            if (flush_out_buffer() == EOF)\n            {\n                // an error occurred\n                return -1;\n            }\n            return 0;\n        }\n\n        std::streamsize xsputn (\n            const char* s,\n            std::streamsize num\n        );\n\n        // input functions\n        int_type underflow( \n        );\n\n        std::streamsize xsgetn (\n            char_type* s, \n            std::streamsize n\n        );\n\n    private:\n\n        // member data\n        connection&  con;\n        static const std::streamsize max_putback = 4;\n        static const std::streamsize out_buffer_size = 10000;\n        static const std::streamsize in_buffer_size = 10000;\n        char* out_buffer;\n        char* in_buffer;\n        bool autoflush;\n    \n    };\n\n// ---------------------------------------------------------------------------------------- \n\n}\n\n#ifdef NO_MAKEFILE\n#include \"sockstreambuf.cpp\"\n#endif\n\n#endif // DLIB_SOCKStREAMBUF_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockstreambuf/sockstreambuf_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SOCKSTREAMBUF_ABSTRACT_\n#ifdef DLIB_SOCKSTREAMBUF_ABSTRACT_\n\n#include <iosfwd>\n#include <streambuf>\n#include \"../sockets/sockets_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n\n    class sockstreambuf : public std::streambuf\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a stream buffer capable of writing to and\n                reading from TCP connections.\n\n            NOTE:\n                For a sockstreambuf EOF is when the connection has closed or otherwise\n                returned some kind of error.\n\n                Also note that any data written to the streambuf may be buffered \n                internally.  So if you need to ensure that data is actually sent then you \n                should flush the stream.  \n\n                A read operation is guaranteed to block until the number of bytes\n                requested has arrived on the connection.  It will never keep blocking\n                once enough data has arrived.\n\n            THREADING\n                generally speaking, this object has the same kind of threading\n                restrictions as a connection object.  those being:\n                - do not try to write to a sockstreambuf from more than one thread\n                - do not try to read from a sockstreambuf from more than one thread\n                - you may call shutdown() on the connection object and this will\n                  cause any reading or writing calls to end.  To the sockstreambuf it\n                  will appear the same as hitting EOF.  (note that EOF for a sockstreambuf\n                  means that the connection has closed)\n                - it is safe to read from and write to the sockstreambuf at the same time\n                - it is not safe to try to putback a char and read from the stream from\n                  different threads\n        !*/\n    public:\n        sockstreambuf (\n            connection* con\n        );\n        /*!\n            requires\n                - con == a valid connection object\n            ensures\n                - *this will read from and write to con\n                - #flushes_output_on_read() == false\n            throws\n                - std::bad_alloc\n        !*/\n\n        sockstreambuf (\n            const scoped_ptr<connection>& con\n        );\n        /*!\n            requires\n                - con == a valid connection object\n            ensures\n                - *this will read from and write to con\n                - #flushes_output_on_read() == false\n            throws\n                - std::bad_alloc\n        !*/\n\n        ~sockstreambuf (\n        );\n        /*!\n            requires\n                - get_connection() object has not been deleted\n            ensures\n                - sockstream buffer is destructed but the connection object will \n                  NOT be closed.  \n                - Any buffered data is flushed to the connection. \n        !*/\n\n        connection* get_connection (\n        );\n        /*!\n            ensures\n                - returns a pointer to the connection object which this buffer\n                  reads from and writes to\n        !*/\n\n        void flush_output_on_read (\n        );\n        /*!\n            ensures\n                - #flushes_output_on_read() == true\n        !*/\n\n        bool flushes_output_on_read (\n        ) const;\n        /*!\n            ensures\n                - This function returns true if this object will flush its output buffer\n                  to the network socket before performing any network read.   \n        !*/\n\n        void do_not_flush_output_on_read (\n        );\n        /*!\n            ensures\n                - #flushes_output_on_read() == false\n        !*/\n\n    };\n\n// ---------------------------------------------------------------------------------------- \n\n}\n\n#endif // DLIB_SOCKSTREAMBUF_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockstreambuf/sockstreambuf_unbuffered.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKSTrEAMBUF_UNBUFFERED_CPp_\n#define DLIB_SOCKSTrEAMBUF_UNBUFFERED_CPp_\n\n#include \"sockstreambuf_unbuffered.h\"\n\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n    // output functions\n// ---------------------------------------------------------------------------------------- \n\n    sockstreambuf_unbuffered::int_type sockstreambuf_unbuffered::\n    overflow (\n        int_type c\n    )\n    {\n        if (c != EOF)\n        {\n            char temp = static_cast<char>(c);\n            if (con.write(&temp,1) != 1)\n            {\n                // if the write was not successful\n                return EOF;\n            }\n        }\n        return c;\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    std::streamsize sockstreambuf_unbuffered::\n    xsputn (\n        const char* s,\n        std::streamsize num\n    )\n    {\n        if (con.write(s,static_cast<int>(num)) != num)\n        {\n            // the write was not successful so return that 0 bytes were written\n            return 0;\n        } \n        return num;\n    }\n\n// ---------------------------------------------------------------------------------------- \n    // input functions\n// ---------------------------------------------------------------------------------------- \n\n    sockstreambuf_unbuffered::int_type sockstreambuf_unbuffered::\n    underflow( \n    )\n    {\n        if (lastread_next)\n        {\n            return lastread;\n        }\n        else if (peek != EOF)\n        {\n            return peek;\n        }\n        else\n        {\n            char temp;\n            if (con.read(&temp,1) != 1)\n            {\n                // some error occurred\n                return EOF;\n            }\n            peek = static_cast<unsigned char>(temp);\n            return peek;\n        }\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    sockstreambuf_unbuffered::int_type sockstreambuf_unbuffered::\n    uflow( \n    )\n    {   \n        if (lastread_next)\n        {\n            lastread_next = false;\n            return lastread;\n        }\n        else if (peek != EOF)\n        {\n            lastread = peek;\n            peek = EOF;\n            return lastread;\n        }\n        else\n        {\n            char temp;\n            if (con.read(&temp,1) != 1)\n            {\n                // some error occurred\n                return EOF;\n            }      \n            lastread = static_cast<unsigned char>(temp);\n            return lastread;\n        }\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    sockstreambuf_unbuffered::int_type sockstreambuf_unbuffered::\n    pbackfail(\n        int_type c\n    )\n    {  \n        // if they are trying to push back a character that they didn't read last\n        // that is an error\n        if (c != EOF && c != lastread)\n            return EOF;\n\n        // if they are trying to push back a second character then thats an error\n        if (lastread_next)\n            return EOF;\n\n        lastread_next = true;\n        return 1;\n    }\n\n// ---------------------------------------------------------------------------------------- \n\n    std::streamsize sockstreambuf_unbuffered::\n    xsgetn (\n        char_type* s, \n        std::streamsize n\n    )\n    { \n        std::streamsize temp = n;\n        if (lastread_next && n > 0)\n        {\n            *s = lastread;\n            lastread_next = false;\n            ++s;\n            --n;\n        }\n        if (peek != EOF && n > 0)\n        {\n            *s = peek;\n            peek = EOF;\n            ++s;\n            --n;\n        }\n\n        while (n>0)\n        {\n            int status = con.read(s,static_cast<int>(n));\n            if (status < 1)\n                break;\n            n -= status;\n            s += status;\n        }\n\n        return temp-n;       \n    }\n\n// ---------------------------------------------------------------------------------------- \n\n}\n#endif // DLIB_SOCKSTrEAMBUF_UNBUFFERED_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockstreambuf/sockstreambuf_unbuffered.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKSTrEAMBUF_UNBUFFERED_Hh_\n#define DLIB_SOCKSTrEAMBUF_UNBUFFERED_Hh_\n\n#include <iosfwd>\n#include <streambuf>\n#include \"../sockets.h\"\n#include \"sockstreambuf_abstract.h\"\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n\n    class sockstreambuf_unbuffered : public std::streambuf\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an implementation of the interface defined in\n                sockstreambuf_abstract.h except that it doesn't do any kind of buffering at\n                all.  It just writes data directly to a connection.  However, note that we\n                don't implement the flushes_output_on_read() routine as this object always\n                flushes immediately (since it isn't buffers.  Moreover, it should be\n                pointed out that this object is deprecated and only present for backwards\n                compatibility with previous versions of dlib.  So you really should use the\n                sockstreambuf object instead.  \n\n            INITIAL VALUE\n                con == a connection\n                lastread_next == false\n                peek == EOF\n\n            CONVENTION\n                if (peek != EOF) then\n                    peek == the last character read from the connection object and\n                            is used to store the char in the event the user peeks by\n                            calling sgetc()\n                if (lastread != EOF) then\n                    lastread == the last character read and consumed by the user\n\n                if (lastread_next) then\n                    the next character to be returned to the user is lastread because\n                    the user put it back into the buffer\n\n        !*/\n\n    public:\n\n\n        sockstreambuf_unbuffered (\n            connection* con_\n        ) :\n            con(*con_),\n            peek(EOF),\n            lastread_next(false)\n        {}\n\n        sockstreambuf_unbuffered (\n            const scoped_ptr<connection>& con_\n        ) :\n            con(*con_),\n            peek(EOF),\n            lastread_next(false)\n        {}\n\n        connection* get_connection (\n        ) { return &con; }\n\n\n    protected:\n\n        // output functions\n        int_type overflow (\n            int_type c\n        );\n\n        std::streamsize xsputn (\n            const char* s,\n            std::streamsize num\n        );\n\n        // input functions\n        int_type underflow( \n        );\n\n        int_type uflow( \n        );\n\n        int_type pbackfail(\n            int_type c\n        );\n\n        std::streamsize xsgetn (\n            char_type* s, \n            std::streamsize n\n        );\n\n    private:\n\n        // member data\n        connection&  con;\n        int_type peek;\n        int_type lastread;\n        bool lastread_next;\n    \n    };\n\n// ---------------------------------------------------------------------------------------- \n\n}\n\n#ifdef NO_MAKEFILE\n#include \"sockstreambuf_unbuffered.cpp\"\n#endif\n\n#endif // DLIB_SOCKSTrEAMBUF_UNBUFFERED_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sockstreambuf.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SOCKSTREAMBUf_H_h_\n#define DLIB_SOCKSTREAMBUf_H_h_\n\n#include \"sockstreambuf/sockstreambuf.h\"\n#include \"sockstreambuf/sockstreambuf_unbuffered.h\"\n\n\n#endif // DLIB_SOCKSTREAMBUf_H_h_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sort.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SORt_\n#define DLIB_SORt_\n\n#include \"algs.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    inline void qsort_array (\n        T& array,\n        unsigned long left,\n        unsigned long right,\n        const compare& comp \n    );\n    /*!\n        requires\n            - T implements operator[]                                 \n            - the items in array must be comparable by comp where comp is a function\n              object with the same syntax as std::less<>\n            - the items in array must be swappable by a global swap()   \n            - left and right are within the bounds of array\n              i.e. array[left] and array[right] are valid elements\n            - left <= right\n        ensures\n            - for all elements in #array between and including left and right the \n              ith element is < the i+1 element\n            - sorts using a quick sort algorithm\n    !*/ \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    void hsort_array (\n        T& array,\n        unsigned long left,\n        unsigned long right,\n        const compare& comp \n    );\n    /*!\n        requires\n            - T implements operator[]                                 \n            - the items in array must be comparable by comp where comp is a function\n              object with the same syntax as std::less<>\n            - the items in array must be swappable by a global swap()   \n            - left and right are within the bounds of array\n              i.e. array[left] and array[right] are valid elements\n            - left <= right\n        ensures\n            - for all elements in #array between and including left and right the \n              ith element is < the i+1 element\n            - sorts using a heapsort algorithm\n    !*/ \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    void isort_array (\n        T& array,\n        unsigned long left,\n        unsigned long right,\n        const compare& comp \n    );\n    /*!\n        requires\n            - T implements operator[]                                 \n            - the items in array must be comparable by comp where comp is a function\n              object with the same syntax as std::less<>\n            - the items in array must be swappable by a global swap()   \n            - left and right are within the bounds of array\n              i.e. array[left] and array[right] are valid elements\n            - left <= right\n        ensures\n            - for all elements in #array between and including left and right the \n              ith element is < the i+1 element\n            - sorts using an insertion sort algorithm\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    inline void qsort_array (\n        T& array,\n        unsigned long left,\n        unsigned long right\n    ); \n    /*!\n        requires\n            - T implements operator[]                                 \n            - the items in array must be comparable by std::less         \n            - the items in array must be swappable by a global swap()   \n            - left and right are within the bounds of array\n              i.e. array[left] and array[right] are valid elements\n            - left <= right\n        ensures\n            - for all elements in #array between and including left and right the \n              ith element is < the i+1 element\n            - sorts using a quick sort algorithm\n    !*/ \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void hsort_array (\n        T& array,\n        unsigned long left,\n        unsigned long right\n    );\n    /*!\n        requires\n            - T implements operator[]                                 \n            - the items in array must be comparable by std::less         \n            - the items in array must be swappable by a global swap()   \n            - left and right are within the bounds of array\n              i.e. array[left] and array[right] are valid elements\n            - left <= right\n        ensures\n            - for all elements in #array between and including left and right the \n              ith element is < the i+1 element\n            - sorts using a heapsort algorithm\n    !*/ \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void isort_array (\n        T& array,\n        unsigned long left,\n        unsigned long right\n    ); \n    /*!\n        requires\n            - T implements operator[]                                 \n            - the items in array must be comparable by std::less      \n            - the items in array must be swappable by a global swap()   \n            - left and right are within the bounds of array\n              i.e. array[left] and array[right] are valid elements\n            - left <= right\n        ensures\n            - for all elements in #array between and including left and right the \n              ith element is < the i+1 element\n            - sorts using an insertion sort algorithm\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                            IMPLEMENTATION DETAILS\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace sort_helpers\n    {\n        template <typename T>\n        inline const std::less<T> comp (const T&)\n        {\n            return std::less<T>();\n        }\n\n        template <\n            typename T,\n            typename Y,\n            typename compare\n            >\n        inline unsigned long qsort_partition (\n            T& array,\n            Y& pivot,\n            const unsigned long left,\n            const unsigned long right,\n            const compare& comp\n        )\n        /*!\n            requires\n                - &pivot == &array[right]\n                - T implements operator[]                             \n                - the items in array must be comparable by comp     \n                - left and right are within the bounts of the array\n                - left < right\n            ensures\n                - returns a number called partition_element such that:\n                    - left <= partition_element <= right                              \n                    - all elements in #array < #array[partition_element] have \n                    indices >= left and < partition_element                         \n                    - all elements in #array > #array[partition_element] have \n                    indices > partition_element and <= right\n        !*/\n        {\n            DLIB_ASSERT (&pivot == &array[right] && left < right,\n                    \"\\tunsigned long qsort_partition()\"\n                    << \"\\n\\t&pivot:        \" << &pivot\n                    << \"\\n\\t&array[right]: \" << &array[right]\n                    << \"\\n\\tleft:          \" << left\n                    << \"\\n\\tright:         \" << right );\n\n            exchange(array[(right-left)/2 +left],pivot);\n\n            unsigned long i = left;\n            for (unsigned long j = left; j < right; ++j)\n            {\n                if (comp(array[j] , pivot))\n                {\n                    swap(array[i],array[j]);\n                    ++i;\n                }\n            }\n            exchange(array[i],pivot);\n            \n            return i;\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            typename compare\n            >\n        void qsort_array_main (\n            T& array,\n            const unsigned long left,\n            const unsigned long right,\n            unsigned long depth_check,\n            const compare& comp\n        )\n        /*!\n            requires\n                - T implements operator[]                                 \n                - the items in array must be comparable by comp         \n                - the items in array must be swappable by a global swap()   \n                - left and right are within the bounds of array\n                  i.e. array[left] and array[right] are valid elements\n            ensures\n                - for all elements in #array between and including left and right the \n                  ith element is < the i+1 element\n                - will only recurse about as deep as log(depth_check) calls\n                - sorts using a quick sort algorithm\n        !*/ \n        {\n            if ( left < right)\n            {\n                if (right-left < 30 || depth_check == 0)\n                {\n                    hsort_array(array,left,right,comp);\n                }\n                else\n                {\n                    // The idea here is to only let quick sort go about log(N)\n                    // calls deep before it kicks into something else.\n                    depth_check >>= 1;\n                    depth_check += (depth_check>>4);\n\n                    unsigned long partition_element = \n                        qsort_partition(array,array[right],left,right,comp);\n                    \n                    if (partition_element > 0)\n                        qsort_array_main(array,left,partition_element-1,depth_check,comp);\n                    qsort_array_main(array,partition_element+1,right,depth_check,comp);\n                }\n            }\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        template <\n            typename T,\n            typename compare\n            >\n        void heapify (\n            T& array,\n            const unsigned long start,\n            const unsigned long end,\n            unsigned long i,\n            const compare& comp\n        )\n        /*!\n            requires\n                - T implements operator[]                                 \n                - the items in array must be comparable by comp        \n                - the items in array must be swappable by a global swap()   \n                - start, end, and i are within the bounds of array\n                  i.e. array[start], array[end], and array[i] are valid elements\n                - start <= i <= end\n                - array[i/2] is a max heap\n                - array[i/2+1] is a max heap\n                - start and end specify the range of the array we are working with.\n            ensures\n                - array[i] is now a max heap\n        !*/\n        {\n            DLIB_ASSERT (start <= i && i <= end,\n                    \"\\tvoid heapify()\"\n                    << \"\\n\\tstart:   \" << start \n                    << \"\\n\\tend:     \" << end \n                    << \"\\n\\ti:       \" << i );\n\n            bool keep_going = true;            \n            unsigned long left;\n            unsigned long right;   \n            unsigned long largest; \n            while (keep_going)\n            {\n                keep_going = false;\n                left = (i<<1)+1-start;\n                right = left+1;\n\n                if (left <= end && comp(array[i] , array[left]))\n                    largest = left;\n                else\n                    largest = i;\n\n                if (right <= end && comp(array[largest] , array[right]))\n                    largest = right;\n\n                if (largest != i)\n                {\n                    exchange(array[i],array[largest]);\n                    i = largest;\n                    keep_going = true;\n                }\n            }\n        }\n\n// ----------------------------------------------------------------------------------------\n    }\n// ----------------------------------------------------------------------------------------\n\n\n    template <\n        typename T\n        >\n    inline void qsort_array (\n        T& array,\n        unsigned long left,\n        unsigned long right\n    ) \n    {\n        using namespace sort_helpers;\n        qsort_array(array,left,right,comp(array[left]));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void hsort_array (\n        T& array,\n        unsigned long left,\n        unsigned long right\n    )\n    {\n        using namespace sort_helpers;\n        hsort_array(array,left,right,comp(array[left]));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void isort_array (\n        T& array,\n        unsigned long left,\n        unsigned long right\n    ) \n    {\n        using namespace sort_helpers;\n        isort_array(array,left,right,comp(array[left]));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    void isort_array (\n        T& array,\n        const unsigned long left,\n        const unsigned long right,\n        const compare& comp\n    )\n    {\n        DLIB_ASSERT (left <= right,\n                \"\\tvoid isort_array()\"\n                << \"\\n\\tleft:          \" << left\n                << \"\\n\\tright:         \" << right );\n        using namespace sort_helpers;\n\n        unsigned long pos;\n        for (unsigned long i = left+1; i <= right; ++i)\n        {\n            // everything from left to i-1 is sorted.\n            pos = i;\n            for (unsigned long j = i-1; comp(array[pos] , array[j]); --j)\n            {\n                exchange(array[pos],array[j]);\n                pos = j;\n                \n                if (j == left)\n                    break;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    void qsort_array (\n        T& array,\n        const unsigned long left,\n        const unsigned long right,\n        const compare& comp\n    )\n    {      \n        DLIB_ASSERT (left <= right,\n                \"\\tvoid qsort_array()\"\n                << \"\\n\\tleft:          \" << left\n                << \"\\n\\tright:         \" << right );\n\n        sort_helpers::qsort_array_main(array,left,right,right-left,comp);\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename T,\n        typename compare\n        >\n    void hsort_array (\n        T& array,\n        const unsigned long left,\n        const unsigned long right,\n        const compare& comp\n    )\n    {\n        DLIB_ASSERT (left <= right,\n                \"\\tvoid hsort_array()\"\n                << \"\\n\\tleft:          \" << left\n                << \"\\n\\tright:         \" << right );\n\n        if (right-left < 30)\n        {\n            isort_array(array,left,right,comp);\n            return;\n        }\n\n        // turn array into a max heap\n        for (unsigned long i = left+((right-left)>>1);; --i)\n        {\n            sort_helpers::heapify(array,left,right,i,comp);\n            if (i == left)\n                break;\n        }\n\n        // now sort the array\n        for (unsigned long i = right; i > left;)\n        {\n            exchange(array[i],array[left]);\n            sort_helpers::heapify(array,left,--i,left,comp);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SORt_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sparse_vector.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SPaRSE_VECTOR_Hh_\n#define DLIB_SPaRSE_VECTOR_Hh_ \n\n#include \"svm/sparse_vector.h\"\n\n#endif // DLIB_SPaRSE_VECTOR_Hh_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sqlite/sqlite.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SQLiTE_H_\n#define DLIB_SQLiTE_H_\n\n#include \"sqlite_abstract.h\"\n\n#include <iostream>\n#include <vector>\n#include \"../algs.h\"\n#include <sqlite3.h>\n#include \"../smart_pointers.h\"\n#include \"../serialize.h\"\n\n// --------------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n// --------------------------------------------------------------------------------------------\n\n    struct sqlite_error : public error\n    {\n        sqlite_error(const std::string& message): error(message) {}\n    };\n\n// --------------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        struct db_deleter\n        {\n            void operator()(\n                sqlite3* db\n            )const \n            { \n                sqlite3_close(db);\n            }\n        };\n    }\n\n// --------------------------------------------------------------------------------------------\n\n    class database : noncopyable\n    {\n    public:\n        database(\n        ) \n        {\n        }\n\n        database (\n            const std::string& file\n        ) \n        {\n            open(file);\n        }\n\n        bool is_open (\n        ) const\n        {\n            return db.get() != 0;\n        }\n\n        void open (\n            const std::string& file\n        )\n        {\n            filename = file;\n            sqlite3* ptr = 0;\n            int status = sqlite3_open(file.c_str(), &ptr);\n            db.reset(ptr, impl::db_deleter());\n            if (status != SQLITE_OK)\n            {\n                throw sqlite_error(sqlite3_errmsg(db.get()));\n            }\n        }\n\n        const std::string& get_database_filename (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_open() == true,\n                \"\\t std::string database::get_database_filename()\"\n                << \"\\n\\t The database must be opened before calling this routine.\"\n                << \"\\n\\t this: \" << this\n                );\n\n            return filename;\n        }\n\n        inline void exec (\n            const std::string& sql_statement\n        );\n\n        int64 last_insert_rowid (\n        ) const\n        {\n            return sqlite3_last_insert_rowid(db.get());\n        }\n\n    private:\n\n        friend class statement;\n\n        std::string filename;\n        shared_ptr<sqlite3> db;\n    };\n\n// --------------------------------------------------------------------------------------------\n\n    class statement : noncopyable\n    {\n    public:\n        statement (\n            database& db_,\n            const std::string sql_statement\n        ) : \n            needs_reset(false),\n            step_status(SQLITE_DONE),\n            at_first_step(true),\n            db(db_.db),\n            stmt(0),\n            sql_string(sql_statement)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(db_.is_open() == true,\n                        \"\\t statement::statement()\"\n                        << \"\\n\\t The database must be opened before calling this routine.\"\n                        << \"\\n\\t this: \" << this\n            );\n\n            int status = sqlite3_prepare_v2(db.get(), \n                                         sql_string.c_str(),\n                                         sql_string.size()+1,\n                                         &stmt,\n                                         NULL);\n\n            if (status != SQLITE_OK)\n            {\n                sqlite3_finalize(stmt);\n                throw sqlite_error(sqlite3_errmsg(db.get()));\n            }\n            if (stmt == 0)\n            {\n                throw sqlite_error(\"Invalid SQL statement\");\n            }\n        }\n\n        ~statement(\n        )\n        {\n            sqlite3_finalize(stmt);\n        }\n\n        void exec(\n        )\n        {\n            reset();\n\n            step_status = sqlite3_step(stmt);\n            needs_reset = true;\n            if (step_status != SQLITE_DONE && step_status != SQLITE_ROW)\n            {\n                if (step_status == SQLITE_ERROR)\n                    throw sqlite_error(sqlite3_errmsg(db.get()));\n                else if (step_status == SQLITE_BUSY)\n                    throw sqlite_error(\"statement::exec() failed.  SQLITE_BUSY returned\");\n                else\n                    throw sqlite_error(\"statement::exec() failed.\");\n            }\n        }\n\n        bool move_next (\n        )\n        {\n            if (step_status == SQLITE_ROW)\n            {\n                if (at_first_step)\n                {\n                    at_first_step = false;\n                    return true;\n                }\n                else\n                {\n                    step_status = sqlite3_step(stmt);\n                    if (step_status == SQLITE_DONE)\n                    {\n                        return false;\n                    }\n                    else if (step_status == SQLITE_ROW)\n                    {\n                        return true;\n                    }\n                    else\n                    {\n                        throw sqlite_error(sqlite3_errmsg(db.get()));\n                    }\n                }\n            }\n            else\n            {\n                return false;\n            }\n        }\n\n        unsigned long get_num_columns(\n        ) const\n        {\n            if( (at_first_step==false) && (step_status==SQLITE_ROW))\n            {\n                return sqlite3_column_count(stmt);\n            }\n            else\n            {\n                return 0;\n            }\n        }\n\n        const std::string& get_sql_string (\n        ) const\n        {\n            return sql_string;\n        }\n\n\n        const std::vector<char> get_column_as_blob (\n            unsigned long idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < get_num_columns(),\n                        \"\\t std::vector<char> statement::get_column_as_blob()\"\n                        << \"\\n\\t Invalid column index.\"\n                        << \"\\n\\t idx:  \" << idx \n                        << \"\\n\\t this: \" << this\n            );\n\n            const char* data = static_cast<const char*>(sqlite3_column_blob(stmt, idx));\n            const int size = sqlite3_column_bytes(stmt, idx);\n\n            return std::vector<char>(data, data+size);\n        }\n\n        template <typename T>\n        void get_column_as_object (\n            unsigned long idx,\n            T& item\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < get_num_columns(),\n                        \"\\t void statement::get_column_as_object()\"\n                        << \"\\n\\t Invalid column index.\"\n                        << \"\\n\\t idx:  \" << idx \n                        << \"\\n\\t this: \" << this\n            );\n\n            const char* data = static_cast<const char*>(sqlite3_column_blob(stmt, idx));\n            const int size = sqlite3_column_bytes(stmt, idx);\n            std::istringstream sin(std::string(data,size));\n            deserialize(item, sin);\n        }\n\n        const std::string get_column_as_text (\n            unsigned long idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < get_num_columns(),\n                        \"\\t std::string statement::get_column_as_text()\"\n                        << \"\\n\\t Invalid column index.\"\n                        << \"\\n\\t idx:  \" << idx \n                        << \"\\n\\t this: \" << this\n            );\n\n            const char* data = reinterpret_cast<const char*>(sqlite3_column_text(stmt, idx));\n            if (data != 0)\n                return std::string(data);\n            else\n                return std::string();\n        }\n\n        double get_column_as_double (\n            unsigned long idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < get_num_columns(),\n                        \"\\t double statement::get_column_as_double()\"\n                        << \"\\n\\t Invalid column index.\"\n                        << \"\\n\\t idx:  \" << idx \n                        << \"\\n\\t this: \" << this\n            );\n\n            return sqlite3_column_double(stmt, idx);\n        }\n\n        int get_column_as_int (\n            unsigned long idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < get_num_columns(),\n                        \"\\t int statement::get_column_as_int()\"\n                        << \"\\n\\t Invalid column index.\"\n                        << \"\\n\\t idx:  \" << idx \n                        << \"\\n\\t this: \" << this\n            );\n\n            return sqlite3_column_int(stmt, idx);\n        }\n\n        int64 get_column_as_int64 (\n            unsigned long idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < get_num_columns(),\n                        \"\\t int64 statement::get_column_as_int64()\"\n                        << \"\\n\\t Invalid column index.\"\n                        << \"\\n\\t idx:  \" << idx \n                        << \"\\n\\t this: \" << this\n            );\n\n            return sqlite3_column_int64(stmt, idx);\n        }\n\n        const std::string get_column_name (\n            unsigned long idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < get_num_columns(),\n                        \"\\t std::string statement::get_column_name()\"\n                        << \"\\n\\t Invalid column index.\"\n                        << \"\\n\\t idx:  \" << idx \n                        << \"\\n\\t this: \" << this\n            );\n\n            return std::string(sqlite3_column_name(stmt,idx));\n        }\n\n        unsigned long get_max_parameter_id (\n        ) const\n        {\n            return sqlite3_limit(db.get(), SQLITE_LIMIT_VARIABLE_NUMBER, -1);\n        }\n\n        unsigned long get_parameter_id (\n            const std::string& name\n        ) const\n        {\n            return sqlite3_bind_parameter_index(stmt, name.c_str());\n        }\n\n        void bind_blob (\n            unsigned long parameter_id,\n            const std::vector<char>& item\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(1 <= parameter_id && parameter_id <= get_max_parameter_id(),\n                        \"\\t void statement::bind_blob()\"\n                        << \"\\n\\t Invalid parameter id.\"\n                        << \"\\n\\t parameter_id:           \" << parameter_id \n                        << \"\\n\\t get_max_parameter_id(): \" << get_max_parameter_id() \n                        << \"\\n\\t this:                   \" << this\n            );\n\n            reset();\n            int status = sqlite3_bind_blob(stmt, parameter_id, &item[0], item.size(), SQLITE_TRANSIENT);\n\n            if (status != SQLITE_OK)\n            {\n                throw sqlite_error(sqlite3_errmsg(db.get()));\n            }\n        }\n\n        template <typename T>\n        void bind_object (\n            unsigned long parameter_id,\n            const T& item\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(1 <= parameter_id && parameter_id <= get_max_parameter_id(),\n                        \"\\t void statement::bind_object()\"\n                        << \"\\n\\t Invalid parameter id.\"\n                        << \"\\n\\t parameter_id:           \" << parameter_id \n                        << \"\\n\\t get_max_parameter_id(): \" << get_max_parameter_id() \n                        << \"\\n\\t this:                   \" << this\n            );\n\n            reset();\n            std::ostringstream sout;\n            serialize(item, sout);\n            const std::string& str = sout.str();\n            int status = sqlite3_bind_blob(stmt, parameter_id, str.data(), str.size(), SQLITE_TRANSIENT);\n\n            if (status != SQLITE_OK)\n            {\n                throw sqlite_error(sqlite3_errmsg(db.get()));\n            }\n        }\n\n        void bind_double (\n            unsigned long parameter_id,\n            const double& item\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(1 <= parameter_id && parameter_id <= get_max_parameter_id(),\n                        \"\\t void statement::bind_double()\"\n                        << \"\\n\\t Invalid parameter id.\"\n                        << \"\\n\\t parameter_id:           \" << parameter_id \n                        << \"\\n\\t get_max_parameter_id(): \" << get_max_parameter_id() \n                        << \"\\n\\t this:                   \" << this\n            );\n\n            reset();\n            int status = sqlite3_bind_double(stmt, parameter_id, item);\n\n            if (status != SQLITE_OK)\n            {\n                throw sqlite_error(sqlite3_errmsg(db.get()));\n            }\n        }\n\n        void bind_int (\n            unsigned long parameter_id,\n            const int& item\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(1 <= parameter_id && parameter_id <= get_max_parameter_id(),\n                        \"\\t void statement::bind_int()\"\n                        << \"\\n\\t Invalid parameter id.\"\n                        << \"\\n\\t parameter_id:           \" << parameter_id \n                        << \"\\n\\t get_max_parameter_id(): \" << get_max_parameter_id() \n                        << \"\\n\\t this:                   \" << this\n            );\n\n            reset();\n            int status = sqlite3_bind_int(stmt, parameter_id, item);\n\n            if (status != SQLITE_OK)\n            {\n                throw sqlite_error(sqlite3_errmsg(db.get()));\n            }\n        }\n\n        void bind_int64 (\n            unsigned long parameter_id,\n            const int64& item\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(1 <= parameter_id && parameter_id <= get_max_parameter_id(),\n                        \"\\t void statement::bind_int64()\"\n                        << \"\\n\\t Invalid parameter id.\"\n                        << \"\\n\\t parameter_id:           \" << parameter_id \n                        << \"\\n\\t get_max_parameter_id(): \" << get_max_parameter_id() \n                        << \"\\n\\t this:                   \" << this\n            );\n\n            reset();\n            int status = sqlite3_bind_int64(stmt, parameter_id, item);\n\n            if (status != SQLITE_OK)\n            {\n                throw sqlite_error(sqlite3_errmsg(db.get()));\n            }\n        }\n\n        void bind_null (\n            unsigned long parameter_id\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(1 <= parameter_id && parameter_id <= get_max_parameter_id(),\n                        \"\\t void statement::bind_null()\"\n                        << \"\\n\\t Invalid parameter id.\"\n                        << \"\\n\\t parameter_id:           \" << parameter_id \n                        << \"\\n\\t get_max_parameter_id(): \" << get_max_parameter_id() \n                        << \"\\n\\t this:                   \" << this\n            );\n\n            reset();\n            int status = sqlite3_bind_null(stmt, parameter_id);\n\n            if (status != SQLITE_OK)\n            {\n                throw sqlite_error(sqlite3_errmsg(db.get()));\n            }\n        }\n\n        void bind_text (\n            unsigned long parameter_id,\n            const std::string& item\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(1 <= parameter_id && parameter_id <= get_max_parameter_id(),\n                        \"\\t void statement::bind_text()\"\n                        << \"\\n\\t Invalid parameter id.\"\n                        << \"\\n\\t parameter_id:           \" << parameter_id \n                        << \"\\n\\t get_max_parameter_id(): \" << get_max_parameter_id() \n                        << \"\\n\\t this:                   \" << this\n            );\n\n            reset();\n            int status = sqlite3_bind_text(stmt, parameter_id, item.c_str(), -1, SQLITE_TRANSIENT);\n\n            if (status != SQLITE_OK)\n            {\n                throw sqlite_error(sqlite3_errmsg(db.get()));\n            }\n        }\n\n    private:\n\n        void reset()\n        {\n            if (needs_reset)\n            {\n                if (sqlite3_reset(stmt) != SQLITE_OK)\n                {\n                    step_status = SQLITE_DONE;\n                    throw sqlite_error(sqlite3_errmsg(db.get()));\n                }\n                needs_reset = false;\n                step_status = SQLITE_DONE;\n                at_first_step = true;\n            }\n        }\n\n        bool needs_reset; // true if sqlite3_step() has been called more recently than sqlite3_reset() \n        int step_status;\n        bool at_first_step;\n\n        shared_ptr<sqlite3> db;\n        sqlite3_stmt* stmt;\n        std::string sql_string;\n    };\n\n// --------------------------------------------------------------------------------------------\n\n    void database::\n    exec (\n        const std::string& sql_statement\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_open() == true,\n                    \"\\t void database::exec()\"\n                    << \"\\n\\t The database must be opened before calling this routine.\"\n                    << \"\\n\\t this: \" << this\n        );\n\n        statement(*this, sql_statement).exec();\n    }\n\n// --------------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SQLiTE_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sqlite/sqlite_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SQLiTE_ABSTRACT_H_\n#ifdef DLIB_SQLiTE_ABSTRACT_H_\n\n\n#include <iostream>\n#include <vector>\n#include \"../algs.h\"\n#include <sqlite3.h>\n#include \"../smart_pointers.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct sqlite_error : public error\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is the exception object used by the SQLite tools to indicate\n                that an error has occurred.  An of the functions defined in this\n                file might throw this exception.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class database : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a C++ wrapper around a SQLite database connection \n                handle and therefore represents a SQLite database file. \n\n                Note that this wrapper is targeted at SQLite Version 3.\n\n                Note also that whenever SQLite indicates an error has occurred \n                this object will throw the sqlite_error exception.\n        !*/\n\n    public:\n        database(\n        ); \n        /*!\n            ensures\n                - #is_open() == false\n        !*/\n\n        database (\n            const std::string& file\n        );\n        /*!\n            ensures\n                - opens the indicated database file or creates a new\n                  database with the given name if one doesn't already exist.\n                - #get_database_filename() == file\n                - #is_open() == true\n        !*/\n\n        ~database (\n        );\n        /*!\n            ensures\n                - safely disposes of any SQLite database connection.  If\n                  any statement objects still exist which reference this database\n                  then the SQLite database connection won't be fully closed\n                  until those statement objects are also destroyed.  This allows\n                  for any destruction order between database and statement objects.\n        !*/\n\n        void open (\n            const std::string& file\n        );\n        /*!\n            ensures\n                - opens the indicated database file or creates a new\n                  database with the given name if one doesn't already exist.\n                - #get_database_filename() == file\n                - #is_open() == true\n                - safely disposes of any previous SQLite database connection.  If\n                  any statement objects still exist which reference this database\n                  then the SQLite database connection won't be fully closed\n                  until those statement objects are also destroyed.  \n        !*/\n\n        bool is_open (\n        ) const;\n        /*!\n            ensures\n                - if (this object has an open connection to a SQLite database) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        const std::string& get_database_filename (\n        ) const;\n        /*!\n            requires\n                - is_open() == true\n            ensures\n                - returns the name of the SQLite database file this object\n                  currently has open.\n        !*/\n\n        void exec (\n            const std::string& sql_statement\n        );\n        /*!\n            requires\n                - is_open() == true\n            ensures\n                - executes the supplied SQL statement against this database\n        !*/\n\n        int64 last_insert_rowid (\n        ) const;\n        /*!\n            requires\n                - is_open() == true\n            ensures\n                - Each element in a database table has a rowid which uniquely identifies\n                  it.  Therefore, this routine returns the rowid of the most recent\n                  successful INSERT into the database via this database instance.  \n                - If an INSERT has not been performed on the current database instance then\n                  the return value is 0.  This is true even if the database is not empty.\n                - See the sqlite documention for the full details on how this function\n                  behaves: http://www.sqlite.org/c3ref/last_insert_rowid.html\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class statement : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a SQL statement which can be executed\n                against a database object.  In particular, this object is a\n                C++ wrapper around a SQLite prepared statement.\n\n\n                Note that whenever SQLite indicates an error has occurred this \n                object will throw the sqlite_error exception.\n\n            BINDABLE SQL PARAMETERS\n                Sometimes you want to execute a bunch of very similar SQL statements.\n                For example, you might need to execute many insert statements where each\n                statement changes only the value of a field.  Since it is somewhat\n                costly to construct a statement object for each SQL operation, SQLite\n                supports defining bindable parameters for a statement object.  This allows\n                you to reuse the same statement object.  \n                \n                Therefore, in SQL statements used with SQLite, wherever it is valid to \n                include a string literal, one can use a parameter in one of the following \n                forms:\n\n                    ?\n                    ?NNN\n                    :AAA\n                    $AAA\n                    @AAA\n\n               In the examples above, NNN is an integer value and AAA is an identifier.  A \n               parameter initially has a value of NULL.  You can use the bind_*() routines\n               to attach values to the parameters.  Each call to a bind_*() routine overrides \n               prior bindings on the same parameter.\n\n               Each SQL parameter has a numeric ID which is used to reference it when invoking\n               a bind_*() routine.  The leftmost SQL parameter in a statement has an index of 1,\n               the next parameter has an index of 2, and so on, except when the following rules\n               apply.  When the same named SQL parameter is used more than once, second and \n               subsequent occurrences have the same index as the first occurrence.  The index \n               for named parameters can be looked up using the get_parameter_id() method if desired.  \n               The index for \"?NNN\" parameters is the value of NNN. The NNN value must be between \n               1 and get_max_parameter_id().\n        !*/\n\n    public:\n        statement (\n            database& db,\n            const std::string sql_statement\n        );\n        /*!\n            requires\n                - db.is_open() == true\n            ensures\n                - The given SQL statement can be executed against the given \n                  database by calling exec().\n                - #get_sql_string() == sql_statement\n        !*/\n\n        ~statement(\n        );\n        /*!\n            ensures\n                - any resources associated with this object have been freed.\n        !*/\n\n        const std::string& get_sql_string (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the SQL statement used to create this statement object.\n        !*/\n\n        void exec(\n        );\n        /*!\n            ensures\n                - #get_num_columns() == 0\n                - executes the SQL statement get_sql_string() against the database\n                  given to this object's constructor.\n                - If this was a select statement then you can obtain the resulting\n                  rows by calling move_next() and using the get_column_as_*() member\n                  functions.\n        !*/\n\n    // ----------------------------\n\n        bool move_next (\n        );\n        /*!\n            ensures\n                - if (there is a result row for this query) then\n                    - #get_num_columns() == the number of columns in the result row.\n                    - The get_column_as_*() routines can be used to access the elements \n                      of the row data.\n                    - returns true\n                - else\n                    - returns false\n                    - #get_num_columns() == 0\n        !*/\n\n        unsigned long get_num_columns(\n        ) const;\n        /*!\n            ensures\n                - returns the number of columns of data available via the get_column_as_*() \n                  routines.\n        !*/\n\n        const std::vector<char> get_column_as_blob (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < get_num_columns()\n            ensures\n                - returns the contents of the idx-th column as a binary BLOB.\n        !*/\n\n        template <\n            typename T\n            >\n        void get_column_as_object (\n            unsigned long idx,\n            T& item\n        ) const;\n        /*!\n            requires\n                - idx < get_num_columns()\n                - item is deserializable \n                  (i.e. Calling deserialize(item, some_input_stream) reads an item\n                  of type T from the some_input_stream stream)\n            ensures\n                - gets the contents of the idx-th column as a binary BLOB and then\n                  deserializes it into item.\n        !*/\n\n        const std::string get_column_as_text (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < get_num_columns()\n            ensures\n                - returns the contents of the idx-th column as a text string. \n        !*/\n\n        double get_column_as_double (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < get_num_columns()\n            ensures\n                - returns the contents of the idx-th column as a double. \n        !*/\n\n        int get_column_as_int (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < get_num_columns()\n            ensures\n                - returns the contents of the idx-th column as an int. \n        !*/\n\n        int64 get_column_as_int64 (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < get_num_columns()\n            ensures\n                - returns the contents of the idx-th column as a 64bit int. \n        !*/\n\n        const std::string get_column_name (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < get_num_columns()\n            ensures\n                - returns the name of the idx-th column.  In particular:\n                  The name of a result column is the value of the \"AS\" clause for \n                  that column, if there is an AS clause. If there is no AS clause \n                  then the name of the column is unspecified and may change from \n                  one release of SQLite to the next.\n        !*/\n\n    // ----------------------------\n\n        unsigned long get_max_parameter_id (\n        ) const;\n        /*!\n            ensures\n                - returns the max parameter ID value which can be used with the\n                  bind_() member functions defined below.\n                - In SQLite, the default value of this limit is usually 999.\n        !*/\n\n        unsigned long get_parameter_id (\n            const std::string& name\n        ) const;\n        /*!\n            ensures\n                - if (This SQL statement contains a SQL parameter with the given name) then\n                    - returns the parameter_id number which can be used in the bind_*() \n                      member functions defined below.\n                - else\n                    - returns 0\n        !*/\n\n        void bind_blob (\n            unsigned long parameter_id,\n            const std::vector<char>& item\n        );\n        /*!\n            requires\n                - 1 <= parameter_id <= get_max_parameter_id()\n            ensures\n                - #get_num_columns() == 0\n                - binds the value of item into the SQL parameter indicated by \n                  parameter_id.\n        !*/\n\n        template <\n            typename T\n            >\n        void bind_object (\n            unsigned long parameter_id,\n            const T& item\n        );\n        /*!\n            requires\n                - 1 <= parameter_id <= get_max_parameter_id()\n                - item is serializable\n                  (i.e. Calling serialize(item, some_output_stream) writes an item\n                  of type T to the some_output_stream stream)\n            ensures\n                - #get_num_columns() == 0\n                - binds the value of item into the SQL parameter indicated by\n                  parameter_id.  This is performed by serializing item and then \n                  binding it as a binary BLOB.\n        !*/\n\n        void bind_double (\n            unsigned long parameter_id,\n            const double& item\n        );\n        /*!\n            requires\n                - 1 <= parameter_id <= get_max_parameter_id()\n            ensures\n                - #get_num_columns() == 0\n                - binds the value of item into the SQL parameter indicated by \n                  parameter_id.\n        !*/\n\n        void bind_int (\n            unsigned long parameter_id,\n            const int& item\n        );\n        /*!\n            requires\n                - 1 <= parameter_id <= get_max_parameter_id()\n            ensures\n                - #get_num_columns() == 0\n                - binds the value of item into the SQL parameter indicated by \n                  parameter_id.\n        !*/\n\n        void bind_int64 (\n            unsigned long parameter_id,\n            const int64& item\n        );\n        /*!\n            requires\n                - 1 <= parameter_id <= get_max_parameter_id()\n            ensures\n                - #get_num_columns() == 0\n                - binds the value of item into the SQL parameter indicated by \n                  parameter_id.\n        !*/\n\n        void bind_null (\n            unsigned long parameter_id\n        );\n        /*!\n            requires\n                - 1 <= parameter_id <= get_max_parameter_id()\n            ensures\n                - #get_num_columns() == 0\n                - binds a NULL to the SQL parameter indicated by parameter_id.\n        !*/\n\n        void bind_text (\n            unsigned long parameter_id,\n            const std::string& item\n        );\n        /*!\n            requires\n                - 1 <= parameter_id <= get_max_parameter_id()\n            ensures\n                - #get_num_columns() == 0\n                - binds the value of item into the SQL parameter indicated by \n                  parameter_id.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SQLiTE_ABSTRACT_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sqlite/sqlite_tools.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SQLiTE_TOOLS_H_\n#define DLIB_SQLiTE_TOOLS_H_\n\n\n#include \"sqlite_tools_abstract.h\"\n#include \"sqlite.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    class transaction : noncopyable\n    {\n    public:\n        transaction (\n            database& db_\n        ) :\n            db(db_),\n            committed(false)\n        {\n            db.exec(\"begin transaction\");\n        }\n\n        void commit ()\n        {\n            if (!committed)\n            {\n                committed = true;\n                db.exec(\"commit\");\n            }\n        }\n\n        ~transaction()\n        {\n            if (!committed)\n                db.exec(\"rollback\");\n        }\n\n    private:\n        database& db;\n        bool committed;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <\n        typename T\n        >\n    void query_object (\n        database& db,\n        const std::string& query,\n        T& item\n    )\n    {\n        statement st(db, query);\n        st.exec();\n        if (st.move_next() && st.get_num_columns() == 1)\n        {\n            st.get_column_as_object(0,item);\n            if (st.move_next())\n                throw sqlite_error(\"query doesn't result in exactly 1 element\");\n        }\n        else\n        {\n            throw sqlite_error(\"query doesn't result in exactly 1 element\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::string query_text (\n        database& db,\n        const std::string& query\n    )\n    {\n        statement st(db, query);\n        st.exec();\n        if (st.move_next() && st.get_num_columns() == 1)\n        {\n            const std::string& temp = st.get_column_as_text(0);\n            if (st.move_next())\n                throw sqlite_error(\"query doesn't result in exactly 1 element\");\n            return temp;\n        }\n        else\n        {\n            throw sqlite_error(\"query doesn't result in exactly 1 element\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double query_double (\n        database& db,\n        const std::string& query\n    )\n    {\n        statement st(db, query);\n        st.exec();\n        if (st.move_next() && st.get_num_columns() == 1)\n        {\n            double temp = st.get_column_as_double(0);\n            if (st.move_next())\n                throw sqlite_error(\"query doesn't result in exactly 1 element\");\n            return temp;\n        }\n        else\n        {\n            throw sqlite_error(\"query doesn't result in exactly 1 element\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline int query_int (\n        database& db,\n        const std::string& query\n    )\n    {\n        statement st(db, query);\n        st.exec();\n        if (st.move_next() && st.get_num_columns() == 1)\n        {\n            int temp = st.get_column_as_int(0);\n            if (st.move_next())\n                throw sqlite_error(\"query doesn't result in exactly 1 element\");\n            return temp;\n        }\n        else\n        {\n            throw sqlite_error(\"query doesn't result in exactly 1 element\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline int64 query_int64 (\n        database& db,\n        const std::string& query\n    )\n    {\n        statement st(db, query);\n        st.exec();\n        if (st.move_next() && st.get_num_columns() == 1)\n        {\n            int64 temp = st.get_column_as_int64(0);\n            if (st.move_next())\n                throw sqlite_error(\"query doesn't result in exactly 1 element\");\n            return temp;\n        }\n        else\n        {\n            throw sqlite_error(\"query doesn't result in exactly 1 element\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline const std::vector<char> query_blob (\n        database& db,\n        const std::string& query\n    )\n    {\n        statement st(db, query);\n        st.exec();\n        if (st.move_next() && st.get_num_columns() == 1)\n        {\n            const std::vector<char>& temp = st.get_column_as_blob(0);\n            if (st.move_next())\n                throw sqlite_error(\"query doesn't result in exactly 1 element\");\n            return temp;\n        }\n        else\n        {\n            throw sqlite_error(\"query doesn't result in exactly 1 element\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SQLiTE_TOOLS_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sqlite/sqlite_tools_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SQLiTE_TOOLS_ABSTRACT_H_\n#ifdef DLIB_SQLiTE_TOOLS_ABSTRACT_H_\n\n\n#include \"sqlite_abstract.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    class transaction : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for creating exception safe\n                database transactions.\n        !*/\n\n    public:\n        transaction (\n            database& db\n        );\n        /*!\n            ensures\n                - Begins a database transaction which will be rolled back\n                  if commit() isn't called eventually.\n                - In particular, performs: db.exec(\"begin transaction\");\n        !*/\n\n        void commit (\n        );\n        /*!\n            ensures\n                - if (commit() hasn't already been called) then\n                    - Commits all changes made during this database transaction.\n                    - In particular, performs: db.exec(\"commit\");\n                - else\n                    - does nothing\n        !*/\n\n        ~transaction(\n        );\n        /*!\n            ensures\n                - if (commit() was never called) then\n                    - rolls back any changes made to the database during this transaction.\n                    - In particular, performs: db.exec(\"rollback\");\n                - else\n                    - does nothing\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void query_object (\n        database& db,\n        const std::string& query,\n        T& item\n    );\n    /*!\n        ensures\n            - executes the given SQL query against db.  If the query results in a \n              single row and column being returned then the data in the column is \n              interpreted as a binary BLOB and deserialized into item.\n        throws\n            - sqlite_error or serialization_error if an error occurs which prevents\n              this operation from succeeding.\n\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    std::string query_text (\n        database& db,\n        const std::string& query\n    );\n    /*!\n        ensures\n            - executes the given SQL query against db.  If the query results in a \n              single row and column being returned then the data in the column is \n              converted to text and returned.\n        throws\n            - sqlite_error if an error occurs which prevents this operation from \n              succeeding.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    double query_double (\n        database& db,\n        const std::string& query\n    );\n    /*!\n        ensures\n            - executes the given SQL query against db.  If the query results in a \n              single row and column being returned then the data in the column is \n              converted to a double and returned.\n        throws\n            - sqlite_error if an error occurs which prevents this operation from \n              succeeding.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    int query_int (\n        database& db,\n        const std::string& query\n    );\n    /*!\n        ensures\n            - executes the given SQL query against db.  If the query results in a \n              single row and column being returned then the data in the column is \n              converted to an int and returned.\n        throws\n            - sqlite_error if an error occurs which prevents this operation from \n              succeeding.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    int64 query_int64 (\n        database& db,\n        const std::string& query\n    );\n    /*!\n        ensures\n            - executes the given SQL query against db.  If the query results in a \n              single row and column being returned then the data in the column is \n              converted to an int64 and returned.\n        throws\n            - sqlite_error if an error occurs which prevents this operation from \n              succeeding.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const std::vector<char> query_blob (\n        database& db,\n        const std::string& query\n    );\n    /*!\n        ensures\n            - executes the given SQL query against db.  If the query results in a \n              single row and column being returned then the data in the column is \n              returned as a binary BLOB.\n        throws\n            - sqlite_error if an error occurs which prevents this operation from \n              succeeding.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SQLiTE_TOOLS_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sqlite.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SQLiTE_HEADER\n#define DLIB_SQLiTE_HEADER\n\n#include \"sqlite/sqlite_tools.h\"\n\n#endif // DLIB_SVm_HEADER\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sstream",
    "content": "#include \"dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/stack/stack_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STACK_KERNEl_1_\n#define DLIB_STACK_KERNEl_1_\n\n#include \"stack_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager\n        >\n    class stack_kernel_1 : public enumerable<T>,\n                           public remover<T>\n    {\n\n        /*!\n            INITIAL VALUE\n                stack_size == 0 \n                top == 0\n                current_element == 0\n                _at_start == true\n\n\n            CONVENTION\n                at_start() == _at_start\n                current_element_valid() == (current_element != 0)\n                if (current_element != 0) then\n                    element() == current_element->item\n\n                stack_size == the number of elements in the stack. \n                Each node points to the next node to be poped off the stack.\n                The last node in the list has its next pointer is set to 0.\n                \n                if (size == 0)\n                {\n                    top == 0\n                }\n                else\n                {\n                    top == pointer to the last element added to the stack\n                }\n        !*/\n        \n        struct node\n        {\n            node* next;\n            T item;\n        };\n        \n        public:\n\n            typedef T type;\n            typedef mem_manager mem_manager_type;\n\n            stack_kernel_1(\n            ):\n                top(0),\n                stack_size(0),\n                current_element(0),\n                _at_start(true)\n            {}\n    \n            virtual ~stack_kernel_1(\n            );\n\n            inline void clear(\n            );\n\n            inline void push(\n                T& item\n            );\n\n            void pop(\n                T& item\n            );\n\n            T& current(\n            );\n\n            const T& current(\n            ) const;\n\n            inline void swap (\n                stack_kernel_1& item\n            );\n        \n            // functions from the remover interface\n            inline void remove_any (\n                T& item\n            ); \n\n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            bool current_element_valid (\n            ) const;\n\n            inline const T& element (\n            ) const;\n\n            inline T& element (\n            );\n\n            bool move_next (\n            ) const;\n\n        private:\n\n            void delete_elements_in_stack(\n                node*& top\n            );\n            /*!\n                requires\n                    - top points to the top of the stack\n                ensures\n                    - all memory has been freed \n                    - #top = 0\n            !*/\n\n\n            // data members\n            typename mem_manager::template rebind<node>::other pool;\n            node* top;\n            unsigned long stack_size;\n            mutable node* current_element;\n            mutable bool _at_start;\n\n\n            // restricted functions\n            stack_kernel_1(stack_kernel_1&);        // copy constructor\n            stack_kernel_1& operator=(stack_kernel_1&); // assignment operator\n\n    };\n\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        stack_kernel_1<T,mem_manager>& a, \n        stack_kernel_1<T,mem_manager>& b \n    ) { a.swap(b); } \n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        stack_kernel_1<T,mem_manager>& item, \n        std::istream& in\n    )\n    {\n        try\n        {\n            item.clear();\n            unsigned long size;\n            deserialize(size,in);\n            T temp = T();\n            stack_kernel_1<T> temp_stack;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(temp,in);\n                temp_stack.push(temp);\n            }\n            while (temp_stack.size() > 0)\n            {\n                temp_stack.pop(temp);\n                item.push(temp);\n            }\n        }\n        catch (serialization_error e)\n        { \n            item.clear();\n            throw serialization_error(e.info + \"\\n   while deserializing object of type stack_kernel_1\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename T,\n        typename mem_manager\n        >\n    stack_kernel_1<T,mem_manager>::\n    ~stack_kernel_1(\n    ) \n    {\n        delete_elements_in_stack(top);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void stack_kernel_1<T,mem_manager>::\n    clear(\n    )\n    {\n        if (stack_size != 0)\n        {\n            delete_elements_in_stack(top);\n            stack_size = 0;\n        }\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& stack_kernel_1<T,mem_manager>::\n    current(\n    )\n    {\n        return top->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& stack_kernel_1<T,mem_manager>::\n    current(\n    ) const\n    {\n        return top->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void stack_kernel_1<T,mem_manager>::\n    swap(\n        stack_kernel_1<T,mem_manager>& item\n    )\n    {\n        pool.swap(item.pool);\n\n        // declare temp variables\n        node* top_temp;\n        unsigned long stack_size_temp;\n\n        // swap stack_size variables\n        stack_size_temp = item.stack_size;\n        item.stack_size = stack_size;\n        stack_size = stack_size_temp;\n\n        // swap top pointers\n        top_temp = item.top;\n        item.top = top;\n        top = top_temp;\n\n        exchange(current_element,item.current_element);\n        exchange(_at_start,item._at_start);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void stack_kernel_1<T,mem_manager>::\n    push(\n        T& item\n    )\n    {\n        // allocate memory for new node\n        node* new_node = pool.allocate();\n\n        // swap item into new_node\n        exchange(new_node->item,item);\n        \n        // put new_node into stack\n        new_node->next = top;\n        top = new_node;\n        ++stack_size;\n\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void stack_kernel_1<T,mem_manager>::\n    pop(\n        T& item\n    )\n    {\n        node* old_node = top;\n        top = top->next;\n\n        // swap the item from the stack into item\n        exchange(old_node->item,item);\n        \n        // free the memory\n        pool.deallocate(old_node);\n        --stack_size;\n\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void stack_kernel_1<T,mem_manager>::\n    delete_elements_in_stack(\n        node*& top\n    )\n    {\n        node* temp;\n        while (top != 0)\n        {\n            temp = top->next;\n            pool.deallocate(top);\n            top = temp;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n   \n    template <\n        typename T,\n        typename mem_manager\n        >\n    unsigned long stack_kernel_1<T,mem_manager>::\n    size (\n    ) const\n    {\n        return stack_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool stack_kernel_1<T,mem_manager>::\n    at_start (\n    ) const\n    {\n        return _at_start;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void stack_kernel_1<T,mem_manager>::\n    reset (\n    ) const\n    {\n        _at_start = true;\n        current_element = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool stack_kernel_1<T,mem_manager>::\n    current_element_valid (\n    ) const\n    {\n        return current_element != 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    const T& stack_kernel_1<T,mem_manager>::\n    element (\n    ) const\n    {\n        return current_element->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    T& stack_kernel_1<T,mem_manager>::\n    element (\n    )\n    {\n        return current_element->item;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    bool stack_kernel_1<T,mem_manager>::\n    move_next (\n    ) const\n    {\n        if (!_at_start)\n        {\n            if (current_element)\n            {\n                current_element = current_element->next;\n                if (current_element)\n                    return true;\n                else\n                    return false;\n                }\n            else\n            {\n                return false;\n            }\n        }\n        else\n        {\n            _at_start = false;\n            if (stack_size)\n            {\n                current_element = top;\n                return true;\n            }\n            else\n            {\n                return false;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // remover function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void stack_kernel_1<T,mem_manager>::\n    remove_any (\n        T& item\n    ) \n    {\n        pop(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STACK_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/stack/stack_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STACK_KERNEl_ABSTRACT_\n#ifdef DLIB_STACK_KERNEl_ABSTRACT_\n\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager\n        >\n    class stack : public enumerable<T>,\n                  public remover<T>\n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T must be swappable by a global swap() and\n                T must have a default constructor\n\n            REQUIREMENTS ON mem_manager\n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                mem_manager::type can be set to anything.\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                swap() and current() functions do not invalidate pointers \n                or references to internal data.\n                All other functions have no such guarantee.\n\n            INITIAL VALUE\n                size() == 0    \n            \n            ENUMERATION ORDER\n                The enumerator will iterate over the elements in the stack in the\n                same order they would be removed in by repeated calls to pop().\n                (e.g. current() would be the first element enumerated)\n\n            WHAT THIS OBJECT REPRESENTS\n                This is a last in first out stack containing items of type T.\n                \n                e.g. if the stack is {b,c,d,e} then a is put in\n                the stack becomes {a,b,c,d,e} and then pop takes a back out\n                returning the stack to {b,c,d,e}\n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n        !*/\n        \n        public:\n\n            typedef T type;\n            typedef mem_manager mem_manager_type;\n\n            stack (\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n            !*/\n\n            virtual ~stack (\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            void push (\n                T& item\n            );\n            /*!\n                ensures\n                    - item has been swapped onto the top of the stack\n                    - #current() == item\n                    - #item has an initial value for its type \n                    - #size() == size() + 1\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor\n                        if push() throws then it has no effect\n            !*/\n\n            void pop (\n                T& item\n            );\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - #size() == size() - 1\n                    - #item   == current()\n                      i.e. the top element of *this has been removed and swapped \n                      into #item\n                    - #at_start() == true\n            !*/\n\n            T& current (\n            );\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - returns a const reference to the element at the top of *this\n            !*/\n\n            const T& current (\n            ) const;\n            /*!\n                requires\n                    - size() != 0\n                ensures\n                    - returns a non-const reference to the element at the top of *this\n            !*/\n            \n            void swap (\n                stack& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n\n\n        private:\n\n            // restricted functions\n            stack(stack&);        // copy constructor\n            stack& operator=(stack&);    // assignment operator\n\n    };\n\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    inline void swap (\n        stack<T,mem_manager>& a, \n        stack<T,mem_manager>& b \n    ) { a.swap(b); }  \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        typename mem_manager\n        >\n    void deserialize (\n        stack<T,mem_manager>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_STACK_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/stack/stack_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STACK_KERNEl_C_\n#define DLIB_STACK_KERNEl_C_\n\n#include \"stack_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename stack_base\n        >\n    class stack_kernel_c : public stack_base\n    {\n        typedef typename stack_base::type T;\n        public:\n            void pop(\n                T& item\n            );\n\n            T& current(\n            );\n\n            const T& current(\n            ) const;\n\n            const T& element( \n            ) const;\n\n            T& element(\n            );\n\n            void remove_any (\n                T& item\n            );\n\n    };\n\n\n    template <\n        typename stack_base\n        >\n    inline void swap (\n        stack_kernel_c<stack_base>& a, \n        stack_kernel_c<stack_base>& b \n    ) { a.swap(b); } \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack_base\n        >\n    void stack_kernel_c<stack_base>::\n    pop(\n        T& item\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->size() != 0,\n            \"\\tvoid stack::pop\"\n            << \"\\n\\tsize of stack should not be zero\"\n            << \"\\n\\tthis: \" << this\n            );\n        \n        // call the real function\n        stack_base::pop(item);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack_base\n        >\n    const typename stack_base::type& stack_kernel_c<stack_base>::\n    current(\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->size() != 0,\n            \"\\tconst T& stack::current\"\n            << \"\\n\\tsize of stack should not be zero\"\n            << \"\\n\\tthis: \" << this\n            );\n    \n        // call the real function\n        return stack_base::current();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename stack_base\n        >\n    typename stack_base::type& stack_kernel_c<stack_base>::\n    current(\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->size() != 0,\n            \"\\tT& stack::current\"\n            << \"\\n\\tsize of stack should not be zero\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return stack_base::current();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename stack_base\n        >\n    typename stack_base::type& stack_kernel_c<stack_base>::\n    element(\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid(),\n            \"\\tT& stack::element\"\n            << \"\\n\\tThe current element must be valid if you are to access it.\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return stack_base::element();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename stack_base\n        >\n    const typename stack_base::type& stack_kernel_c<stack_base>::\n    element(\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid(),\n            \"\\tconst T& stack::element\"\n            << \"\\n\\tThe current element must be valid if you are to access it.\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return stack_base::element();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename stack_base\n        >\n    void stack_kernel_c<stack_base>::\n    remove_any (\n        T& item\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( (this->size() > 0),\n            \"\\tvoid stack::remove_any\"\n            << \"\\n\\tsize() must be greater than zero if something is going to be removed\"\n            << \"\\n\\tsize(): \" << this->size() \n            << \"\\n\\tthis:   \" << this\n            );\n\n        // call the real function\n        stack_base::remove_any(item);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STACK_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/stack.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STACk_\n#define DLIB_STACk_\n\n#include \"stack/stack_kernel_1.h\"\n#include \"stack/stack_kernel_c.h\"\n#include \"algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename mem_manager = default_memory_manager \n        >\n    class stack\n    {\n        stack() {}\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     stack_kernel_1<T,mem_manager>    \n                    kernel_1a;\n        typedef     stack_kernel_c<kernel_1a>\n                    kernel_1a_c;\n \n    };\n}\n\n#endif // DLIB_STACk_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/stack_trace.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STACK_TRACE_CPp_\n#define DLIB_STACK_TRACE_CPp_\n\n#if defined(DLIB_ENABLE_STACK_TRACE) && !defined(NO_MAKEFILE)\n\n#include <sstream>\n#include <cstring>\n#include \"stack_trace.h\"\n#include \"threads.h\"\n#include \"stack.h\"\n#include \"memory_manager.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace \n    {\n        struct stack_tracer_data\n        {\n            stack_tracer_data(\n            ) :  funct_name(0),\n                 file_name(0),\n                 line_number(0)\n            {}\n            const char* funct_name;\n            const char* file_name;\n            int line_number;\n        };\n\n        thread_specific_data<stack<stack_tracer_data,memory_manager<char>::kernel_2a>::kernel_1a>& get_dlib_stack_trace_stack()\n        {\n            static thread_specific_data<stack<stack_tracer_data,memory_manager<char>::kernel_2a>::kernel_1a> a;\n            return a;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    stack_tracer::\n    stack_tracer (\n        const char* funct_name,\n        const char* file_name,\n        const int line_number\n    )\n    {\n        stack_tracer_data data;\n        data.funct_name = funct_name;\n        data.file_name = file_name;\n        data.line_number = line_number;\n\n        // pop the info onto the function stack trace\n        get_dlib_stack_trace_stack().data().push(data);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    stack_tracer::\n    ~stack_tracer()\n    {\n        stack_tracer_data temp;\n        get_dlib_stack_trace_stack().data().pop(temp);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string get_stack_trace()\n    {\n        std::ostringstream sout;\n        get_dlib_stack_trace_stack().data().reset();\n        while (get_dlib_stack_trace_stack().data().move_next())\n        {\n            stack_tracer_data data = get_dlib_stack_trace_stack().data().element();\n            sout << data.file_name << \":\" << data.line_number << \"\\n    \" << data.funct_name << \"\\n\";\n        }\n        return sout.str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n#endif\n\n#endif // DLIB_STACK_TRACE_CPp_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/stack_trace.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STACK_TRACe_\n#define DLIB_STACK_TRACe_\n\n/*!\n    This file defines 3 things.  Two of them are preprocessor macros that\n    enable you to tag functions with the dlib stack trace watcher.  The\n    third thing is a function named get_stack_trace() which returns the\n    current stack trace in std::string form.\n\n    To enable the stack trace you must #define DLIB_ENABLE_STACK_TRACE.\n    When this #define isn't set then the 3 things described above\n    still exist but they don't do anything.\n\n    Also note that when the stack trace is enabled it changes the DLIB_ASSERT\n    and DLIB_CASSERT macros so that they print stack traces when \n    an assert fails.\n\n    See the following example program for details:\n\n    #include <iostream>\n    #include <dlib/stack_trace.h>\n\n    void funct2()\n    {\n        // put this macro at the top of each function you would\n        // like to appear in stack traces\n        DLIB_STACK_TRACE;\n\n        // you may print the current stack trace as follows. \n        std::cout << dlib::get_stack_trace() << endl;\n    }\n\n    void funct()\n    {\n        // This alternate form of DLIB_STACK_TRACE allows you to specify\n        // the string used to name the current function.  The other form\n        // will usually output an appropriate function name automatically\n        // so this may not be needed.\n        DLIB_STACK_TRACE_NAMED(\"funct\");\n        funct2();\n    }\n\n    int main()\n    {\n        funct();\n    }\n!*/\n\n\n#include <string>\n#include \"assert.h\"\n\n// only setup the stack trace stuff if the asserts are enabled (which happens in debug mode\n// basically).  Also, this stuff doesn't work if you use NO_MAKEFILE\n#if defined(DLIB_ENABLE_STACK_TRACE) \n#ifdef NO_MAKEFILE \n#error \"You can't use the dlib stack trace stuff and NO_MAKEFILE at the same time\"\n#endif\n\nnamespace dlib\n{\n    const std::string get_stack_trace();\n}\n\n// redefine the DLIB_CASSERT macro to include the stack trace\n#undef DLIB_CASSERT\n#define DLIB_CASSERT(_exp,_message)                                              \\\n    {if ( !(_exp) )                                                         \\\n    {                                                                       \\\n        std::ostringstream dlib_o_out;                                       \\\n        dlib_o_out << \"\\n\\nError occurred at line \" << __LINE__ << \".\\n\";    \\\n        dlib_o_out << \"Error occurred in file \" << __FILE__ << \".\\n\";      \\\n        dlib_o_out << \"Error occurred in function \" << DLIB_FUNCTION_NAME << \".\\n\\n\";      \\\n        dlib_o_out << \"Failing expression was \" << #_exp << \".\\n\";           \\\n        dlib_o_out << _message << \"\\n\\n\";                                      \\\n        dlib_o_out << \"Stack Trace: \\n\" << dlib::get_stack_trace() << \"\\n\";        \\\n        dlib_assert_breakpoint();                                           \\\n        throw dlib::fatal_error(dlib::EBROKEN_ASSERT,dlib_o_out.str());      \\\n    }}                                                                      \n\n\n\nnamespace dlib\n{\n\n    class stack_tracer\n    {\n    public:\n        stack_tracer (\n            const char* funct_name,\n            const char* file_name,\n            const int line_number\n        );\n\n        ~stack_tracer();\n\n    };\n}\n\n#define DLIB_STACK_TRACE_NAMED(x) dlib::stack_tracer dlib_stack_tracer_object(x,__FILE__,__LINE__)\n#define DLIB_STACK_TRACE dlib::stack_tracer dlib_stack_tracer_object(DLIB_FUNCTION_NAME,__FILE__,__LINE__)\n\n#else // don't do anything if ENABLE_ASSERTS isn't defined\n#define DLIB_STACK_TRACE_NAMED(x) \n#define DLIB_STACK_TRACE \n\nnamespace dlib\n{\n    inline const std::string get_stack_trace() { return std::string(\"stack trace not enabled\");}\n}\n\n#endif\n\n\n#endif // DLIB_STACK_TRACe_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_map/static_map_kernel_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STATIC_MAP_KERNEl_1_\n#define DLIB_STATIC_MAP_KERNEl_1_\n\n#include \"static_map_kernel_abstract.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        typename compare = std::less<domain>\n        >\n    class static_map_kernel_1 : public enumerable<map_pair<domain,range> >\n    {\n\n        /*!\n            INITIAL VALUE\n                - map_size == 0\n                - d == 0\n                - r == 0\n                - mp.d = 0;\n                - at_start_ == true\n\n\n            CONVENTION                \n                - size() == map_size\n                - if (size() > 0) then\n                    - d == pointer to an array containing all the domain elements\n                    - r == pointer to an array containing all the range elements\n                    - for every i:  operator[](d[i]) == r[i]\n                    - d is sorted according to operator<\n                - else\n                    - d == 0\n                    - r == 0\n\n                - current_element_valid() == (mp.d != 0)\n                - at_start() == (at_start_)\n                - if (current_element_valid()) then\n                    - element() == mp\n        !*/\n        \n        class mpair : public map_pair<domain,range>\n        {\n        public:\n            const domain* d;\n            range* r;\n\n            const domain& key( \n            ) const { return *d; }\n\n            const range& value(\n            ) const { return *r; }\n\n            range& value(\n            ) { return *r; }\n        };\n\n\n        // I would define this outside the class but Borland 5.5 has some problems\n        // with non-inline templated friend functions.          \n        friend void deserialize (\n            static_map_kernel_1& item, \n            std::istream& in\n        )\n        {\n            try\n            {\n                item.clear();\n                unsigned long size;\n                deserialize(size,in);\n                item.map_size = size;\n                item.d = new domain[size];\n                item.r = new range[size];\n                for (unsigned long i = 0; i < size; ++i)\n                {\n                    deserialize(item.d[i],in);\n                    deserialize(item.r[i],in);\n                }\n            }\n            catch (serialization_error& e)\n            { \n                item.map_size = 0;\n                if (item.d)\n                {\n                    delete [] item.d;\n                    item.d = 0;\n                }\n                if (item.r)\n                {\n                    delete [] item.r;\n                    item.r = 0;\n                }\n\n                throw serialization_error(e.info + \"\\n   while deserializing object of type static_map_kernel_1\"); \n            }\n            catch (...)\n            {\n                item.map_size = 0;\n                if (item.d)\n                {\n                    delete [] item.d;\n                    item.d = 0;\n                }\n                if (item.r)\n                {\n                    delete [] item.r;\n                    item.r = 0;\n                }\n\n                throw;\n            }\n        }\n\n\n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef compare compare_type;\n\n            static_map_kernel_1(\n            );\n\n            virtual ~static_map_kernel_1(\n            ); \n\n            void clear (\n            );\n\n            void load (\n                pair_remover<domain,range>& source\n            );\n\n            void load (\n                asc_pair_remover<domain,range,compare>& source\n            );\n\n            inline const range* operator[] (\n                const domain& d\n            ) const;\n\n            inline range* operator[] (\n                const domain& d\n            );\n\n            inline void swap (\n                static_map_kernel_1& item\n            );\n    \n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            inline bool current_element_valid (\n            ) const;\n\n            inline const map_pair<domain,range>& element (\n            ) const;\n\n            inline map_pair<domain,range>& element (\n            );\n\n            inline bool move_next (\n            ) const;\n\n\n        private:\n\n            bool binary_search (\n                const domain& item,\n                unsigned long& pos\n            ) const;\n            /*!\n                ensures\n                    - if (there is an item in d equivalent to item) then\n                        - returns true\n                        - d[#pos] is equivalent item\n                    - else\n                        - returns false\n            !*/\n\n            void sort_arrays (\n                unsigned long left,\n                unsigned long right\n            );\n            /*!\n                requires    \n                    - left and right are within the bounts of the array\n                ensures \n                    - everything in the convention is still true and d[left] though\n                      d[right] is sorted according to operator<\n            !*/\n\n            void qsort_partition (\n                unsigned long& partition_element,\n                const unsigned long left,\n                const unsigned long right\n            );    \n            /*!\n                requires                   \n                    - left < right\n                    - left and right are within the bounts of the array\n                ensures\n                    - the convention is still true\n                    - left <= #partition_element <= right                              \n                    - all elements in #d < #d[#partition_element] have \n                      indices >= left and < #partition_element                         \n                    - all elements in #d >= #d[#partition_element] have \n                      indices >= #partition_element and <= right\n            !*/\n\n            unsigned long median (\n                unsigned long one,\n                unsigned long two,\n                unsigned long three\n            );\n            /*!\n                requires\n                    - one, two, and three are valid indexes into d\n                ensures\n                    - returns the median of d[one], d[two], and d[three]\n            !*/\n\n\n\n\n            // data members\n            unsigned long map_size;\n            domain* d;\n            range* r;          \n            mutable mpair mp;\n            mutable bool at_start_;\n            compare comp;\n\n            // restricted functions\n            static_map_kernel_1(static_map_kernel_1&);        // copy constructor\n            static_map_kernel_1& operator=(static_map_kernel_1&);    // assignment operator\n    };\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    inline void swap (\n        static_map_kernel_1<domain,range,compare>& a, \n        static_map_kernel_1<domain,range,compare>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    static_map_kernel_1<domain,range,compare>::\n    static_map_kernel_1(\n    ) :\n        map_size(0),\n        d(0),\n        r(0),\n        at_start_(true)\n    {\n        mp.d = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    static_map_kernel_1<domain,range,compare>::\n    ~static_map_kernel_1(\n    )\n    {\n        if (map_size > 0)\n        {\n            delete [] d;\n            delete [] r;\n        }\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    void static_map_kernel_1<domain,range,compare>::\n    clear (\n    )\n    {\n        if (map_size > 0)\n        {\n            map_size = 0;\n            delete [] d;\n            delete [] r;\n            d = 0;\n            r = 0;\n        }\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    void static_map_kernel_1<domain,range,compare>::\n    load (\n        pair_remover<domain,range>& source\n    )\n    {        \n        if (source.size() > 0)\n        {             \n            domain* old_d = d;\n            d = new domain[source.size()];\n            try { r = new range[source.size()]; }\n            catch (...) { delete [] d; d = old_d; throw; }\n\n            map_size = source.size();\n\n            for (unsigned long i = 0; source.size() > 0; ++i)\n                source.remove_any(d[i],r[i]);\n                       \n            sort_arrays(0,map_size-1);\n        }\n        else\n        {\n            clear();\n        }\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    void static_map_kernel_1<domain,range,compare>::\n    load (\n        asc_pair_remover<domain,range,compare>& source\n    )\n    {\n        if (source.size() > 0)\n        {             \n            domain* old_d = d;\n            d = new domain[source.size()];\n            try { r = new range[source.size()]; }\n            catch (...) { delete [] d; d = old_d; throw; }\n\n            map_size = source.size();\n\n            for (unsigned long i = 0; source.size() > 0; ++i)\n                source.remove_any(d[i],r[i]);\n        }\n        else\n        {\n            clear();\n        }\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    const range* static_map_kernel_1<domain,range,compare>::\n    operator[] (\n        const domain& d_item\n    ) const\n    {\n        unsigned long pos;\n        if (binary_search(d_item,pos))\n            return r+pos;\n        else\n            return 0;        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    range* static_map_kernel_1<domain,range,compare>::\n    operator[] (\n        const domain& d_item\n    )\n    {\n        unsigned long pos;\n        if (binary_search(d_item,pos))\n            return r+pos;\n        else\n            return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    unsigned long static_map_kernel_1<domain,range,compare>::\n    size (\n    ) const\n    {\n        return map_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    void static_map_kernel_1<domain,range,compare>::\n    swap (\n        static_map_kernel_1<domain,range,compare>& item\n    )\n    {\n        exchange(map_size,item.map_size);\n        exchange(d,item.d);\n        exchange(r,item.r);\n        exchange(mp,item.mp);\n        exchange(at_start_,item.at_start_);\n        exchange(comp,item.comp);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    bool static_map_kernel_1<domain,range,compare>::\n    at_start (\n    ) const\n    {\n        return (at_start_);\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    void static_map_kernel_1<domain,range,compare>::\n    reset (\n    ) const\n    {        \n        mp.d = 0;\n        at_start_ = true;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    bool static_map_kernel_1<domain,range,compare>::\n    current_element_valid (\n    ) const\n    {   \n        return (mp.d != 0);\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    const map_pair<domain,range>& static_map_kernel_1<domain,range,compare>::\n    element (\n    ) const\n    {\n        return mp;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    map_pair<domain,range>& static_map_kernel_1<domain,range,compare>::\n    element (\n    )\n    {\n        return mp;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    bool static_map_kernel_1<domain,range,compare>::\n    move_next (\n    ) const\n    {\n        // if at_start() && size() > 0\n        if (at_start_ && map_size > 0)\n        {\n            at_start_ = false;\n            mp.r = r;\n            mp.d = d;\n            return true;\n        }\n        // else if current_element_valid()\n        else if (mp.d != 0)\n        {\n            ++mp.d;\n            ++mp.r;            \n            if (static_cast<unsigned long>(mp.d - d) < map_size)\n            {\n                return true;\n            }\n            else\n            {\n                mp.d = 0;\n                return false;\n            }\n        }\n        else\n        {      \n            at_start_ = false;\n            return false;\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    bool static_map_kernel_1<domain,range,compare>::\n    binary_search (\n        const domain& item,\n        unsigned long& pos\n    ) const\n    {\n        unsigned long high = map_size;\n        unsigned long low = 0;\n        unsigned long p = map_size;\n        unsigned long idx;\n        while (p > 0)\n        {\n            p = (high-low)>>1;\n            idx = p+low;\n            if (comp(item , d[idx]))\n            {\n                high = idx;\n            }\n            else if (comp(d[idx] , item))\n            {\n                low = idx;\n            }\n            else\n            {\n                pos = idx;\n                return true;\n            }\n        }\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    void static_map_kernel_1<domain,range,compare>::\n    sort_arrays (\n        unsigned long left,\n        unsigned long right\n    ) \n    {\n        if ( left < right)\n        {\n            unsigned long partition_element;\n            qsort_partition(partition_element,left,right);\n            \n            if (partition_element > 0)\n                sort_arrays(left,partition_element-1);\n            sort_arrays(partition_element+1,right);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    void static_map_kernel_1<domain,range,compare>::\n    qsort_partition (\n        unsigned long& partition_element,\n        const unsigned long left,\n        const unsigned long right\n    )\n    {\n        partition_element = right;\n\n        unsigned long med = median(partition_element,left,((right-left)>>1) +left);\n        exchange(d[partition_element],d[med]);\n        exchange(r[partition_element],r[med]);\n        \n        unsigned long right_scan = right-1;\n        unsigned long left_scan = left;\n\n        while (true)\n        {\n            // find an element to the left of partition_element that needs to be moved\n            while ( comp( d[left_scan] , d[partition_element]) )\n            {\n                ++left_scan;\n            }\n\n            // find an element to the right of partition_element that needs to be moved\n            while ( \n                !(comp (d[right_scan] , d[partition_element])) &&  \n                (right_scan > left_scan) \n            )\n            {\n                --right_scan;\n            }\n            if (left_scan >= right_scan)\n                break;\n\n            exchange(d[left_scan],d[right_scan]);\n            exchange(r[left_scan],r[right_scan]);\n\n        }\n        exchange(d[left_scan],d[partition_element]);\n        exchange(r[left_scan],r[partition_element]);\n        partition_element = left_scan;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    unsigned long static_map_kernel_1<domain,range,compare>::\n    median (\n        unsigned long one,\n        unsigned long two,\n        unsigned long three\n    )\n    {\n        if ( comp( d[one] , d[two]) )\n        {\n            // one < two\n            if ( comp( d[two] , d[three]) )\n            {\n                // one < two < three : two\n                return two;                \n            }\n            else\n            {\n                // one < two >= three\n                if (comp( d[one] , d[three]))\n                {\n                    // three\n                    return three;\n                }\n            }\n            \n        }\n        else\n        {\n            // one >= two\n            if ( comp(d[three] , d[one] ))\n            {\n                // three <= one >= two\n                if ( comp(d[three] , d[two]) )\n                {\n                    // two\n                    return two;\n                }\n                else\n                {\n                    // three\n                    return three;\n                }\n            }\n        }  \n        return one;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STATIC_MAP_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_map/static_map_kernel_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STATIC_MAP_KERNEl_ABSTRACT_\n#ifdef DLIB_STATIC_MAP_KERNEl_ABSTRACT_\n\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        typename compare = std::less<domain>\n        >\n    class static_map : public enumerable<map_pair<domain,range> >\n    {\n\n        /*!\n            REQUIREMENTS ON domain\n                domain must be comparable by compare where compare is a functor compatible with std::less and\n                domain is swappable by a global swap() and                \n                domain must have a default constructor\n\n            REQUIREMENTS ON range\n                range is swappable by a global swap() and\n                range must have a default constructor\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                Only the destructor and load_from() will invalidate pointers or \n                references to internal data.  \n\n            INITIAL VALUE\n                size() == 0\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the domain (and each associated\n                range element) elements in ascending order according to the compare functor. \n                (i.e. the elements are enumerated in sorted order)\n\n            WHAT THIS OBJECT REPRESENTS\n                static_map contains items of type domain and range\n\n                This object is similar an array.  It maps items of type domain on to \n                items of type range.  \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n\n            NOTE\n                definition of equivalent:\n                a is equivalent to b if\n                a < b == false and\n                b < a == false\n        !*/\n        \n        public:\n\n            typedef domain domain_type;\n            typedef range range_type;\n            typedef compare compare_type;\n\n            static_map (\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n            !*/\n\n            virtual ~static_map(\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n                        If this exception is thrown then #*this is unusable \n                        until clear() is called and succeeds.\n            !*/\n\n            void load (\n                pair_remover<domain,range>& source\n            );\n            /*!\n                ensures                  \n                    - #size() == source.size()\n                    - #source.size() == 0                    \n                    - all the pairs in source are removed and placed into #*this\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by domain's or range's \n                      constructor.\n                        If this exception is thrown then the call to load() will have\n                        no effect on #*this.\n            !*/\n\n            const range* operator[] (\n                const domain& d\n            ) const;\n            /*!\n                ensures\n                    - if (there is an element in the domain equivalent to d) then\n                        - returns a pointer to an element in the range of *this that\n                          is associated with an element in the domain of *this \n                          equivalent to d.\n                    - else\n                        - returns 0\n            !*/\n\n            range* operator[] (\n                const domain& d\n            );\n            /*!\n                ensures\n                    - if (there is an element in the domain equivalent to d) then\n                        - returns a pointer to an element in the range of *this that\n                          is associated with an element in the domain of *this \n                          equivalent to d.\n                    - else\n                        - returns 0\n            !*/\n\n            void swap (\n                static_map& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n    \n        private:\n\n            // restricted functions\n            static_map(static_map&);        // copy constructor\n            static_map& operator=(static_map&);    // assignment operator\n    };\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    inline void swap (\n        static_map<domain,range,compare>& a, \n        static_map<domain,range,compare>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename domain,\n        typename range,\n        typename compare\n        >\n    void deserialize (\n        static_map<domain,range,compare>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n}\n\n#endif // DLIB_STATIC_MAP_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_map/static_map_kernel_c.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STATIC_MAP_KERNEl_C_\n#define DLIB_STATIC_MAP_KERNEl_C_\n\n#include \"static_map_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include \"../interfaces/map_pair.h\"\n#include \"../interfaces/remover.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename map_base\n        >\n    class static_map_kernel_c : public map_base\n    {\n        typedef typename map_base::domain_type domain;\n        typedef typename map_base::range_type range;\n        \n        public:\n            const map_pair<domain,range>& element (\n            ) const;\n\n            map_pair<domain,range>& element (\n            );\n\n    };\n\n    template <\n        typename map_base\n        >\n    inline void swap (\n        static_map_kernel_c<map_base>& a, \n        static_map_kernel_c<map_base>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_base\n        >\n    const map_pair<typename map_base::domain_type,typename map_base::range_type>& static_map_kernel_c<map_base>::\n    element (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tconst map_pair<domain,range>& static_map::element\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return map_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_base\n        >\n    map_pair<typename map_base::domain_type,typename map_base::range_type>& static_map_kernel_c<map_base>::\n    element (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tmap_pair<domain,range>& static_map::element\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return map_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STATIC_MAP_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_map.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STATIC_MAp_\n#define DLIB_STATIC_MAp_\n\n#include \"static_map/static_map_kernel_1.h\"\n#include \"static_map/static_map_kernel_c.h\"\n\n#include <functional>\n\n\nnamespace dlib\n{\n\n    template <\n        typename domain,\n        typename range,\n        typename compare = std::less<domain>\n        >\n    class static_map\n    {\n        static_map() {}\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     static_map_kernel_1<domain,range,compare>\n                    kernel_1a;\n        typedef     static_map_kernel_c<kernel_1a>\n                    kernel_1a_c;\n        \n   \n\n\n\n    };\n}\n\n#endif // DLIB_STATIC_MAp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_set/static_set_compare_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STATIC_SET_COMPARe_1_\n#define DLIB_STATIC_SET_COMPARe_1_\n\n#include \"static_set_compare_abstract.h\"\n\n#include \"../algs.h\"\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename static_set_base \n        >\n    class static_set_compare_1 : public static_set_base\n    {\n\n        public:\n\n            bool operator< (\n                const static_set_compare_1& rhs\n            ) const;\n\n            bool operator== (\n                const static_set_compare_1& rhs\n            ) const;\n\n    };\n\n\n    template <\n        typename static_set_base\n        >\n    inline void swap (\n        static_set_compare_1<static_set_base>& a, \n        static_set_compare_1<static_set_base>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename static_set_base\n        >\n    bool static_set_compare_1<static_set_base>::\n    operator< (\n        const static_set_compare_1<static_set_base>& rhs\n    ) const\n    {\n        bool result = false;\n        if (static_set_base::size() < rhs.size())\n            result = true;\n\n        if (static_set_base::size() == rhs.size())\n        {\n            rhs.reset();\n            static_set_base::reset();\n            while (rhs.move_next())\n            {\n                static_set_base::move_next();\n                if (static_set_base::element() < rhs.element())\n                {\n                    result = true;\n                    break;\n                }\n                else if (rhs.element() < static_set_base::element())\n                {\n                    break;\n                }\n            }            \n        }\n\n        static_set_base::reset();\n        rhs.reset();\n\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename static_set_base\n        >\n    bool static_set_compare_1<static_set_base>::\n    operator== (\n        const static_set_compare_1<static_set_base>& rhs\n    ) const\n    {\n        bool result = true;\n        if (static_set_base::size() != rhs.size())\n            result = false;\n\n\n        rhs.reset();\n        static_set_base::reset();\n        while (rhs.move_next() && static_set_base::move_next())\n        {            \n            if (!(rhs.element() == static_set_base::element()))\n            {\n                result = false;\n                break;\n            }\n        }\n\n        static_set_base::reset();\n        rhs.reset();\n\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STATIC_SET_COMPARe_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_set/static_set_compare_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STATIC_SET_COMPARe_ABSTRACT_\n#ifdef DLIB_STATIC_SET_COMPARe_ABSTRACT_\n\n#include \"static_set_kernel_abstract.h\"\n\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n\n    template <\n        typename static_set_base\n        >\n    class static_set_compare : public static_set_base\n    {\n\n        /*!\n            REQUIREMENTS ON static_set_base\n                must an implementation of static_set/static_set_kernel_abstract.h\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                operator== and operator< invalidate pointers or references to \n                data members.\n\n            WHAT THIS EXTENSION DOES FOR static_set\n                This gives a static_set the ability to compare itself to other \n                static_sets using the < and == operators. \n\n                The < operator is conceptually weird for sets.  It is useful \n                though because it allows you to make sets of sets since\n                sets require that their containing type implement operator<.\n\n                Also note that it is the case that for any two sets a and b \n                if (a<b) == false and (b<a) == false then a == b. \n               \n\n            NOTATION\n                For the purposes of defining what these operators do I will \n                use the operator[] to reference the elements of the static_sets.\n                operator[] is defined to access the elements of the static_set in \n                the same order they would be enumerated by the enumerable \n                interface.\n        !*/\n\n        public:\n\n            bool operator< (\n                const static_set_compare& rhs\n            ) const;\n            /*!\n                ensures\n                    - #at_start() == true\n                    - if (size() < rhs.size()) then\n                        - returns true\n                    - else if (size() > rhs.size()) then\n                        - returns false\n                    - else\n                        - returns true if there exists an integer j such that 0 <= j < size() \n                          and for all integers i such that 0 <= i < j where it is true that\n                          (*this)[i] == rhs[i] and (*this)[j] < rhs[j] \n                        - returns false if there is no j that will satisfy the above conditions.                    \n            !*/\n\n            bool operator== (\n                const static_set_compare& rhs\n            ) const;\n            /*!\n                ensures\n                    - #at_start() == true\n                    - returns true if *this and rhs contain the same elements.\n                      returns false otherwise.\n            !*/\n    };\n\n\n    template <\n        typename static_set_base\n        >\n    inline void swap (\n        static_set_compare<static_set_base>& a, \n        static_set_compare<static_set_base>& b \n    ) { a.swap(b); } \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_STATIC_SET_COMPARe_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_set/static_set_kernel_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STATIC_SET_KERNEl_1_\n#define DLIB_STATIC_SET_KERNEl_1_\n\n#include \"static_set_kernel_abstract.h\"\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../algs.h\"\n#include \"../sort.h\"\n#include \"../serialize.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename compare = std::less<T>\n        >\n    class static_set_kernel_1 : public enumerable<const T>\n    {\n\n        /*!\n            INITIAL VALUE\n                - set_size == 0\n                - d == 0\n                - at_start_ == true\n                - cur == 0\n\n            CONVENTION\n                - size() == set_size\n                - if (set_size > 0) then\n                    - d == pointer to an array containing all the elements of the set                \n                    - d is sorted according to operator<\n                - else  \n                    - d == 0\n\n                - current_element_valid() == (cur != 0)\n                - at_start() == (at_start_)\n                - if (current_element_valid()) then\n                    - element() == *cur\n        !*/\n\n        // I would define this outside the class but Borland 5.5 has some problems\n        // with non-inline templated friend functions.\n        friend void deserialize (\n            static_set_kernel_1& item, \n            std::istream& in\n        )    \n        {\n            try\n            {\n                item.clear();\n                unsigned long size;\n                deserialize(size,in);\n                item.set_size = size;\n                item.d = new T[size];\n                for (unsigned long i = 0; i < size; ++i)\n                {\n                    deserialize(item.d[i],in);\n                }\n            }\n            catch (serialization_error e)\n            { \n                item.set_size = 0;\n                if (item.d)\n                {\n                    delete [] item.d;\n                    item.d = 0;\n                }\n\n                throw serialization_error(e.info + \"\\n   while deserializing object of type static_set_kernel_1\"); \n            }\n            catch (...)\n            {\n                item.set_size = 0;\n                if (item.d)\n                {\n                    delete [] item.d;\n                    item.d = 0;\n                }\n\n                throw;\n            }\n        } \n\n        public:\n\n            typedef T type;\n            typedef compare compare_type;\n\n            static_set_kernel_1(\n            );\n\n            virtual ~static_set_kernel_1(\n            ); \n\n            void clear (\n            );\n\n            void load (\n                remover<T>& source\n            );\n\n            void load (\n                asc_remover<T,compare>& source\n            );\n\n            bool is_member (\n                const T& item\n            ) const;\n\n            inline void swap (\n                static_set_kernel_1& item\n            );\n    \n            // functions from the enumerable interface\n            inline unsigned long size (\n            ) const;\n\n            inline bool at_start (\n            ) const;\n\n            inline void reset (\n            ) const;\n\n            inline bool current_element_valid (\n            ) const;\n\n            inline const T& element (\n            ) const;\n\n            inline const T& element (\n            );\n\n            inline bool move_next (\n            ) const;\n\n\n        private:\n\n   \n            // data members\n            unsigned long set_size;\n            T* d;\n            mutable T* cur;\n            mutable bool at_start_;\n\n            // restricted functions\n            static_set_kernel_1(static_set_kernel_1&);        // copy constructor\n            static_set_kernel_1& operator=(static_set_kernel_1&);    // assignment operator\n    };\n\n    template <\n        typename T,\n        typename compare\n        >\n    inline void swap (\n        static_set_kernel_1<T,compare>& a, \n        static_set_kernel_1<T,compare>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    static_set_kernel_1<T,compare>::\n    static_set_kernel_1(\n    ) :\n        set_size(0),\n        d(0),\n        cur(0),\n        at_start_(true)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    static_set_kernel_1<T,compare>::\n    ~static_set_kernel_1(\n    )\n    {\n        if (set_size > 0)\n            delete [] d;\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    void static_set_kernel_1<T,compare>::\n    clear(\n    )\n    {\n        if (set_size > 0)\n        {\n            set_size = 0;\n            delete [] d;\n            d = 0;\n        }\n        reset();\n    } \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    void static_set_kernel_1<T,compare>::\n    load (\n        remover<T>& source\n    )\n    {\n        if (source.size() > 0)\n        {\n            d = new T[source.size()];\n\n            set_size = source.size();\n\n            for (unsigned long i = 0; source.size() > 0; ++i)\n                source.remove_any(d[i]);\n            \n            compare comp;\n            qsort_array(d,0,set_size-1,comp);\n        }\n        else\n        {\n            clear();\n        }\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    void static_set_kernel_1<T,compare>::\n    load (\n        asc_remover<T,compare>& source\n    )\n    {\n        if (source.size() > 0)\n        {\n            d = new T[source.size()];\n\n            set_size = source.size();\n\n            for (unsigned long i = 0; source.size() > 0; ++i)\n                source.remove_any(d[i]);\n        }\n        else\n        {\n            clear();\n        }\n        reset();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    bool static_set_kernel_1<T,compare>::\n    is_member (\n        const T& item\n    ) const\n    {\n        unsigned long high = set_size;\n        unsigned long low = 0;\n        unsigned long p = set_size;\n        unsigned long idx;\n        while (p > 0)\n        {\n            p = (high-low)>>1;\n            idx = p+low;\n            if (item < d[idx])\n                high = idx;\n            else if (d[idx] < item)\n                low = idx;\n            else\n                return true;\n        }\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    unsigned long static_set_kernel_1<T,compare>::\n    size (\n    ) const\n    {\n        return set_size;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    void static_set_kernel_1<T,compare>::\n    swap (\n        static_set_kernel_1<T,compare>& item\n    )\n    {\n        exchange(set_size,item.set_size);\n        exchange(d,item.d);\n        exchange(cur,item.cur);\n        exchange(at_start_,item.at_start_);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // enumerable function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    bool static_set_kernel_1<T,compare>::\n    at_start (\n    ) const\n    {\n        return at_start_;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    void static_set_kernel_1<T,compare>::\n    reset (\n    ) const\n    {\n        at_start_ = true;\n        cur = 0;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    bool static_set_kernel_1<T,compare>::\n    current_element_valid (\n    ) const\n    {   \n        return (cur != 0);\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    const T& static_set_kernel_1<T,compare>::\n    element (\n    ) const\n    {\n        return *cur;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    const T& static_set_kernel_1<T,compare>::\n    element (\n    )\n    {\n        return *cur;\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename compare\n        >\n    bool static_set_kernel_1<T,compare>::\n    move_next (\n    ) const\n    {      \n        // if at_start() && size() > 0\n        if (at_start_ && set_size > 0)\n        {\n            at_start_ = false;\n            cur = d;\n            return true;\n        }\n        // else if current_element_valid()\n        else if (cur != 0)\n        {\n            ++cur;\n            if (static_cast<unsigned long>(cur - d) < set_size)\n            {\n                return true;\n            }\n            else\n            {\n                cur = 0;\n                return false;\n            }\n        }\n        else\n        {\n            at_start_ = false;\n            return false;\n        }\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STATIC_SET_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_set/static_set_kernel_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STATIC_SET_KERNEl_ABSTRACT_\n#ifdef DLIB_STATIC_SET_KERNEl_ABSTRACT_\n\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/remover.h\"\n#include \"../serialize.h\"\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename compare = std::less<T>\n        >\n    class static_set : public enumerable<const T>\n    {\n\n        /*!\n            REQUIREMENTS ON T\n                T must be comparable by compare where compare is a functor compatible with std::less and\n                T is swappable by a global swap() and                \n                T must have a default constructor\n\n            POINTERS AND REFERENCES TO INTERNAL DATA\n                Only the destructor will invalidate pointers or references\n                to internal data.  \n\n            INITIAL VALUE\n                size() == 0\n\n            ENUMERATION ORDER\n                The enumerator will iterate over the elements in the set in \n                ascending order according to the compare functor. \n                (i.e. the elements are enumerated in sorted order)\n\n            WHAT THIS OBJECT REPRESENTS\n                static_set contains items of type T\n\n                This object represents an unaddressed collection of items. \n\n                Also note that unless specified otherwise, no member functions\n                of this object throw exceptions.\n\n            NOTE\n                definition of equivalent:\n                a is equivalent to b if\n                a < b == false and\n                b < a == false\n        !*/\n        \n        public:\n\n            typedef T type;\n            typedef compare compare_type;\n\n            static_set ( \n            );\n            /*!\n                ensures  \n                    - #*this is properly initialized                   \n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n            !*/\n\n            virtual ~static_set(\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                        If this exception is thrown then #*this is unusable \n                        until clear() is called and succeeds.\n            !*/\n\n            void load (\n                remover<T>& source\n            );\n            /*!\n                ensures\n                    - #size() == source.size()\n                    - #source.size() == 0\n                    - all the elements in source are removed and placed into #*this\n                    - #at_start() == true\n                throws\n                    - std::bad_alloc or any exception thrown by T's constructor.\n                        If this exception is thrown then the call to load() will have\n                        no effect on #*this.\n            !*/\n\n            bool is_member (\n                const T& item\n            ) const;\n            /*!\n                ensures\n                    - if (there is an item in *this equivalent to item) then\n                        - returns true\n                    - else\n                        - returns false\n            !*/\n\n            void swap (\n                static_set& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n    \n        private:\n\n            // restricted functions\n            static_set(static_set&);        // copy constructor\n            static_set& operator=(static_set&);    // assignment operator\n    };\n\n    template <\n        typename T,\n        typename compare\n        >\n    inline void swap (\n        static_set<T,compare>& a, \n        static_set<T,compare>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename T,\n        typename compare\n        >\n    void deserialize (\n        static_set<T,compare>& item,  \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n}\n\n#endif // DLIB_STATIC_SET_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_set/static_set_kernel_c.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STATIC_SET_KERNEl_C_\n#define DLIB_STATIC_SET_KERNEl_C_\n\n#include \"static_set_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include \"../interfaces/remover.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename set_base\n        >\n    class static_set_kernel_c : public set_base\n    {\n        typedef typename set_base::type T;\n        public:\n\n            const T& element (\n            );\n\n            const T& element (\n            ) const;\n    };\n\n\n    template <\n        typename set_base\n        >\n    inline void swap (\n        static_set_kernel_c<set_base>& a, \n        static_set_kernel_c<set_base>& b \n    ) { a.swap(b); } \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n \n    template <\n        typename set_base\n        >\n    const typename set_base::type& static_set_kernel_c<set_base>::\n    element (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tconst T& static_set::element() const\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return set_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename set_base\n        >\n    const typename set_base::type& static_set_kernel_c<set_base>::\n    element (\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT(this->current_element_valid() == true,\n            \"\\tconst T& static_set::element\"\n            << \"\\n\\tyou can't access the current element if it doesn't exist\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return set_base::element();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n}\n\n#endif // DLIB_STATIC_SET_KERNEl_C_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/static_set.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STATIC_SEt_\n#define DLIB_STATIC_SEt_\n\n#include \"static_set/static_set_kernel_1.h\"\n#include \"static_set/static_set_kernel_c.h\"\n#include \"static_set/static_set_compare_1.h\"\n\n#include <functional>\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename compare = std::less<T>\n        >\n    class static_set\n    {\n        static_set() {}\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     static_set_kernel_1<T,compare>\n                    kernel_1a;\n        typedef     static_set_kernel_c<kernel_1a>\n                    kernel_1a_c;\n        \n   \n        //----------- extensions -------------\n\n        typedef     static_set_compare_1<kernel_1a>\n                    compare_1a;\n        typedef     static_set_compare_1<kernel_1a_c>\n                    compare_1a_c;\n\n\n\n\n    };\n}\n\n#endif // DLIB_STATIC_SEt_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/average_precision.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_AVERAGE_PREcISION_Hh_\n#define DLIB_AVERAGE_PREcISION_Hh_\n\n#include \"average_precision_abstract.h\"\n#include <vector>\n\n\nnamespace dlib\n{\n    namespace impl\n    {\n        inline bool get_bool_part (\n            const bool& b\n        ) { return b; }\n\n        template <typename T>\n        bool get_bool_part(const std::pair<T,bool>& item) { return item.second; }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    double average_precision (\n        const std::vector<T,alloc>& items,\n        unsigned long missing_relevant_items = 0\n    )\n    {\n        using namespace dlib::impl;\n        double relevant_count = 0;\n        // find the precision values\n        std::vector<double> precision;\n        for (unsigned long i = 0; i < items.size(); ++i)\n        {\n            if (get_bool_part(items[i]))\n            {\n                ++relevant_count;\n                precision.push_back(relevant_count / (i+1));\n            }\n        }\n\n        double precision_sum = 0;\n        double max_val = 0;\n        // now sum over the interpolated precision values\n        for (std::vector<double>::reverse_iterator i = precision.rbegin(); i != precision.rend(); ++i)\n        {\n            max_val = std::max(max_val, *i);\n            precision_sum += max_val;\n        }\n\n\n        relevant_count += missing_relevant_items;\n\n        if (relevant_count != 0)\n            return precision_sum/relevant_count;\n        else\n            return 1; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AVERAGE_PREcISION_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/average_precision_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_AVERAGE_PREcISION_ABSTRACT_Hh_\n#ifdef DLIB_AVERAGE_PREcISION_ABSTRACT_Hh_\n\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename alloc\n        >\n    double average_precision (\n        const std::vector<bool,alloc>& items,\n        unsigned long missing_relevant_items = 0\n    );\n    /*!\n        ensures\n            - Interprets items as a list of relevant and non-relevant items in a response\n              from an information retrieval system.  In particular, items with a true value\n              are relevant and false items are non-relevant.  This function then returns\n              the average precision of the ranking of the given items.  For, example, the\n              ranking [true, true, true, true, false] would have an average precision of 1.\n              On the other hand, the ranking of [true false false true] would have an\n              average precision of 0.75 (because the first true has a precision of 1 and\n              the second true has a precision of 0.5, giving an average of 0.75).\n            - As a special case, if item contains no true elements then the average\n              precision is considered to be 1.\n            - Note that we use the interpolated precision.  That is, the interpolated\n              precision at a recall value r is set to the maximum precision obtained at any\n              higher recall value.  Or in other words, we interpolate the precision/recall\n              curve so that precision is monotonically decreasing.  Therefore, the average\n              precision value returned by this function is the area under this interpolated\n              precision/recall curve.\n            - This function will add in missing_relevant_items number of items with a\n              precision of zero into the average value returned.  For example, the average\n              precision of the ranking [true, true] if there are 2 missing relevant items\n              is 0.5.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double average_precision (\n        const std::vector<std::pair<T,bool>,alloc>& items,\n        unsigned long missing_relevant_items = 0\n    );\n    /*!\n        ensures\n            - this function is equivalent to copying the bool values from items into a\n              std::vector<bool> and then calling the above average_precision() routine on\n              it and returning the result. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AVERAGE_PREcISION_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/cca.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CCA_hh_\n#define DLIB_CCA_hh_\n\n#include \"cca_abstract.h\"\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../sparse_vector.h\"\n#include \"random_subset_selector.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    matrix<typename T::type,0,1> compute_correlations (\n        const matrix_exp<T>& L,\n        const matrix_exp<T>& R\n    )\n    {\n        DLIB_ASSERT( L.size() > 0 && R.size() > 0 && L.nr() == R.nr(), \n            \"\\t matrix compute_correlations()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t L.size(): \" << L.size()\n            << \"\\n\\t R.size(): \" << R.size()\n            << \"\\n\\t L.nr():   \" << L.nr()\n            << \"\\n\\t R.nr():   \" << R.nr()\n            );\n\n        typedef typename T::type type;\n        matrix<type> A, B, C;\n        A = diag(trans(R)*L);\n        B = sqrt(diag(trans(L)*L));\n        C = sqrt(diag(trans(R)*R));\n        A = pointwise_multiply(A , reciprocal(pointwise_multiply(B,C)));\n        return A;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type, \n        typename T\n        >\n    matrix<T,0,1> impl_cca (\n        const matrix_type& L,\n        const matrix_type& R,\n        matrix<T>& Ltrans,\n        matrix<T>& Rtrans,\n        unsigned long num_correlations,\n        unsigned long extra_rank,\n        unsigned long q,\n        unsigned long num_output_correlations,\n        double regularization\n    )\n    {\n        matrix<T> Ul, Vl;\n        matrix<T> Ur, Vr;\n        matrix<T> U, V;\n        matrix<T,0,1> Dr, Dl, D;\n\n\n        // Note that we add a few more singular vectors in because it helps improve the\n        // final results if we run this part with a little higher rank than the final SVD.\n        svd_fast(L, Ul, Dl, Vl, num_correlations+extra_rank, q);\n        svd_fast(R, Ur, Dr, Vr, num_correlations+extra_rank, q);\n\n        // Zero out singular values that are essentially zero so they don't cause numerical\n        // difficulties in the code below.\n        const double eps = std::numeric_limits<T>::epsilon()*std::max(max(Dr),max(Dl))*100;\n        Dl = round_zeros(Dl+regularization,eps);\n        Dr = round_zeros(Dr+regularization,eps);\n\n        // This matrix is really small so we can do a normal full SVD on it.  Note that we\n        // also throw away the columns of Ul and Ur corresponding to zero singular values.\n        svd3(diagm(Dl>0)*tmp(trans(Ul)*Ur)*diagm(Dr>0), U, D, V);\n\n        // now throw away extra columns of the transformations.  We do this in a way\n        // that keeps the directions that have the highest correlations.\n        matrix<T,0,1> temp = D;\n        rsort_columns(U, temp);\n        rsort_columns(V, D);\n        U = colm(U, range(0, num_output_correlations-1));\n        V = colm(V, range(0, num_output_correlations-1));\n        D = rowm(D, range(0, num_output_correlations-1));\n\n        Ltrans = Vl*inv(diagm(Dl))*U;\n        Rtrans = Vr*inv(diagm(Dr))*V;\n\n        // Note that the D matrix contains the correlation values for the transformed\n        // vectors.  However, when the L and R matrices have rank higher than\n        // num_correlations+extra_rank then the values in D become only approximate.\n        return D; \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    matrix<T,0,1> cca (\n        const matrix<T>& L,\n        const matrix<T>& R,\n        matrix<T>& Ltrans,\n        matrix<T>& Rtrans,\n        unsigned long num_correlations,\n        unsigned long extra_rank = 5,\n        unsigned long q = 2,\n        double regularization = 0\n    )\n    {\n        DLIB_ASSERT( num_correlations > 0 && L.size() > 0 && R.size() > 0 && L.nr() == R.nr() &&\n            regularization >= 0, \n            \"\\t matrix cca()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t num_correlations: \" << num_correlations \n            << \"\\n\\t regularization:   \" << regularization \n            << \"\\n\\t L.size(): \" << L.size()\n            << \"\\n\\t R.size(): \" << R.size()\n            << \"\\n\\t L.nr():   \" << L.nr()\n            << \"\\n\\t R.nr():   \" << R.nr()\n            );\n\n        using std::min;\n        const unsigned long n = min(num_correlations, (unsigned long)min(R.nr(),min(L.nc(), R.nc())));\n        return impl_cca(L,R,Ltrans, Rtrans, num_correlations, extra_rank, q, n, regularization); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename sparse_vector_type, typename T>\n    matrix<T,0,1> cca (\n        const std::vector<sparse_vector_type>& L,\n        const std::vector<sparse_vector_type>& R,\n        matrix<T>& Ltrans,\n        matrix<T>& Rtrans,\n        unsigned long num_correlations,\n        unsigned long extra_rank = 5,\n        unsigned long q = 2,\n        double regularization = 0\n    )\n    {\n        DLIB_ASSERT( num_correlations > 0 && L.size() == R.size() && \n                     max_index_plus_one(L) > 0 && max_index_plus_one(R) > 0 &&\n                     regularization >= 0, \n            \"\\t matrix cca()\"\n            << \"\\n\\t Invalid inputs were given to this function.\"\n            << \"\\n\\t num_correlations: \" << num_correlations \n            << \"\\n\\t regularization:   \" << regularization \n            << \"\\n\\t L.size(): \" << L.size()\n            << \"\\n\\t R.size(): \" << R.size()\n            << \"\\n\\t max_index_plus_one(L):   \" << max_index_plus_one(L)\n            << \"\\n\\t max_index_plus_one(R):   \" << max_index_plus_one(R)\n            );\n\n        using std::min;\n        const unsigned long n = min(max_index_plus_one(L), max_index_plus_one(R));\n        const unsigned long num_output_correlations = min(num_correlations, std::min<unsigned long>(R.size(),n));\n        return impl_cca(L,R,Ltrans, Rtrans, num_correlations, extra_rank, q, num_output_correlations, regularization); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename sparse_vector_type, typename Rand_type, typename T>\n    matrix<T,0,1> cca (\n        const random_subset_selector<sparse_vector_type,Rand_type>& L,\n        const random_subset_selector<sparse_vector_type,Rand_type>& R,\n        matrix<T>& Ltrans,\n        matrix<T>& Rtrans,\n        unsigned long num_correlations,\n        unsigned long extra_rank = 5,\n        unsigned long q = 2\n    )\n    {\n        return cca(L.to_std_vector(), R.to_std_vector(), Ltrans, Rtrans, num_correlations, extra_rank, q);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CCA_hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/cca_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CCA_AbSTRACT_Hh_\n#ifdef DLIB_CCA_AbSTRACT_Hh_\n\n#include \"../matrix/matrix_la_abstract.h\"\n#include \"random_subset_selector_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    matrix<typename T::type,0,1> compute_correlations (\n        const matrix_exp<T>& L,\n        const matrix_exp<T>& R\n    );\n    /*!\n        requires\n            - L.size() > 0 \n            - R.size() > 0 \n            - L.nr() == R.nr()\n        ensures\n            - This function treats L and R as sequences of paired row vectors.  It\n              then computes the correlation values between the elements of these \n              row vectors.  In particular, we return a vector COR such that:\n                - COR.size() == L.nc()\n                - for all valid i:\n                    - COR(i) == the correlation coefficient between the following sequence\n                      of paired numbers: (L(k,i), R(k,i)) for k: 0 <= k < L.nr().\n                      Therefore, COR(i) is a value between -1 and 1 inclusive where 1\n                      indicates perfect correlation and -1 perfect anti-correlation.  Note\n                      that this function assumes the input data vectors have been centered\n                      (i.e. made to have zero mean).  If this is not the case then it will\n                      report inaccurate results.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    matrix<T,0,1> cca (\n        const matrix<T>& L,\n        const matrix<T>& R,\n        matrix<T>& Ltrans,\n        matrix<T>& Rtrans,\n        unsigned long num_correlations,\n        unsigned long extra_rank = 5,\n        unsigned long q = 2,\n        double regularization = 0\n    );\n    /*!\n        requires\n            - num_correlations > 0\n            - L.size() > 0 \n            - R.size() > 0 \n            - L.nr() == R.nr()\n            - regularization >= 0\n        ensures\n            - This function performs a canonical correlation analysis between the row\n              vectors in L and R.  That is, it finds two transformation matrices, Ltrans\n              and Rtrans, such that row vectors in the transformed matrices L*Ltrans and\n              R*Rtrans are as correlated as possible.  That is, we try to find two transforms\n              such that the correlation values returned by compute_correlations(L*Ltrans, R*Rtrans)\n              would be maximized.\n            - Let N == min(num_correlations, min(R.nr(),min(L.nc(),R.nc())))\n              (This is the actual number of elements in the transformed vectors.\n              Therefore, note that you can't get more outputs than there are rows or\n              columns in the input matrices.)\n            - #Ltrans.nr() == L.nc()\n            - #Ltrans.nc() == N \n            - #Rtrans.nr() == R.nc()\n            - #Rtrans.nc() == N \n            - This function assumes the data vectors in L and R have already been centered\n              (i.e. we assume the vectors have zero means).  However, in many cases it is\n              fine to use uncentered data with cca().  But if it is important for your\n              problem then you should center your data before passing it to cca().\n            - This function works with reduced rank approximations of the L and R matrices.\n              This makes it fast when working with large matrices.  In particular, we use\n              the svd_fast() routine to find reduced rank representations of the input\n              matrices by calling it as follows: svd_fast(L, U,D,V, num_correlations+extra_rank, q) \n              and similarly for R.  This means that you can use the extra_rank and q\n              arguments to cca() to influence the accuracy of the reduced rank\n              approximation.  However, the default values should work fine for most\n              problems.\n            - returns an estimate of compute_correlations(L*#Ltrans, R*#Rtrans).  The\n              returned vector should exactly match the output of compute_correlations()\n              when the reduced rank approximation to L and R is accurate and regularization\n              is set to 0.  However, if this is not the case then the return value of this\n              function will deviate from compute_correlations(L*#Ltrans, R*#Rtrans).  This\n              deviation can be used to check if the reduced rank approximation is working\n              or you need to increase extra_rank.\n            - The dimensions of the output vectors produced by L*#Ltrans or R*#Rtrans are\n              ordered such that the dimensions with the highest correlations come first.\n              That is, after applying the transforms produced by cca() to a set of vectors\n              you will find that dimension 0 has the highest correlation, then dimension 1\n              has the next highest, and so on.  This also means that the list of numbers\n              returned from cca() will always be listed in decreasing order.\n            - This function performs the ridge regression version of Canonical Correlation\n              Analysis when regularization is set to a value > 0.  In particular, larger\n              values indicate the solution should be more heavily regularized.  This can be\n              useful when the dimensionality of the data is larger than the number of\n              samples.\n            - A good discussion of CCA can be found in the paper \"Canonical Correlation\n              Analysis\" by David Weenink.  In particular, this function is implemented\n              using equations 29 and 30 from his paper.  We also use the idea of doing CCA\n              on a reduced rank approximation of L and R as suggested by Paramveer S.\n              Dhillon in his paper \"Two Step CCA: A new spectral method for estimating\n              vector models of words\".\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sparse_vector_type, \n        typename T\n        >\n    matrix<T,0,1> cca (\n        const std::vector<sparse_vector_type>& L,\n        const std::vector<sparse_vector_type>& R,\n        matrix<T>& Ltrans,\n        matrix<T>& Rtrans,\n        unsigned long num_correlations,\n        unsigned long extra_rank = 5,\n        unsigned long q = 2,\n        double regularization = 0\n    );\n    /*!\n        requires\n            - num_correlations > 0\n            - L.size() == R.size()\n            - max_index_plus_one(L) > 0 && max_index_plus_one(R) > 0\n              (i.e. L and R can't represent empty matrices)\n            - L and R must contain sparse vectors (see the top of dlib/svm/sparse_vector_abstract.h\n              for a definition of sparse vector)\n            - regularization >= 0\n        ensures\n            - This is just an overload of the cca() function defined above.  Except in this\n              case we take a sparse representation of the input L and R matrices rather than\n              dense matrices.  Therefore, in this case, we interpret L and R as matrices\n              with L.size() rows, where each row is defined by a sparse vector.  So this \n              function does exactly the same thing as the above cca().\n            - Note that you can apply the output transforms to a sparse vector with the\n              following code:\n                sparse_matrix_vector_multiply(trans(Ltrans), your_sparse_vector)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sparse_vector_type, \n        typename Rand_type, \n        typename T\n        >\n    matrix<T,0,1> cca (\n        const random_subset_selector<sparse_vector_type,Rand_type>& L,\n        const random_subset_selector<sparse_vector_type,Rand_type>& R,\n        matrix<T>& Ltrans,\n        matrix<T>& Rtrans,\n        unsigned long num_correlations,\n        unsigned long extra_rank = 5,\n        unsigned long q = 2,\n        double regularization = 0\n    );\n    /*!\n        requires\n            - num_correlations > 0\n            - L.size() == R.size()\n            - max_index_plus_one(L) > 0 && max_index_plus_one(R) > 0\n              (i.e. L and R can't represent empty matrices)\n            - L and R must contain sparse vectors (see the top of dlib/svm/sparse_vector_abstract.h\n              for a definition of sparse vector)\n            - regularization >= 0\n        ensures\n            - returns cca(L.to_std_vector(), R.to_std_vector(), Ltrans, Rtrans, num_correlations, extra_rank, q)\n              (i.e. this is just a convenience function for calling the cca() routine when\n              your sparse vectors are contained inside a random_subset_selector rather than\n              a std::vector)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CCA_AbSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/dpca.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_DPCA_h_\n#define DLIB_DPCA_h_\n\n#include \"dpca_abstract.h\"\n#include <limits>\n#include <cmath>\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class discriminant_pca\n    {\n        /*!\n            INITIAL VALUE\n                - vect_size == 0\n                - total_count == 0\n                - between_count == 0\n                - within_count == 0\n                - between_weight == 1\n                - within_weight == 1\n\n            CONVENTION\n                - vect_size == in_vector_size()\n                - total_count == the number of times add_to_total_variance() has been called.\n                - within_count == the number of times add_to_within_class_variance() has been called.\n                - between_count == the number of times add_to_between_class_variance() has been called.\n                - between_weight == between_class_weight()\n                - within_weight == within_class_weight()\n\n                - if (total_count != 0)\n                    - total_sum == the sum of all vectors given to add_to_total_variance()\n                    - the covariance of all the elements given to add_to_total_variance() is given\n                      by:\n                        - let avg == total_sum/total_count\n                        - covariance == total_cov/total_count - avg*trans(avg)\n                - if (within_count != 0)\n                    - within_cov/within_count == the normalized within class scatter matrix  \n                - if (between_count != 0)\n                    - between_cov/between_count == the normalized between class scatter matrix  \n        !*/\n\n    public:\n\n        struct discriminant_pca_error : public error\n        {\n            discriminant_pca_error(const std::string& message): error(message) {}\n        };\n\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n        discriminant_pca (\n        ) \n        {\n            clear();\n        }\n\n        void clear(\n        )\n        {\n            total_count = 0;\n            between_count = 0;\n            within_count = 0;\n\n            vect_size = 0;\n\n\n            between_weight = 1;\n            within_weight = 1;\n\n\n            total_sum.set_size(0);\n            between_cov.set_size(0,0);\n            total_cov.set_size(0,0);\n            within_cov.set_size(0,0);\n        }\n\n        long in_vector_size (\n        ) const\n        {\n            return vect_size;\n        }\n\n        void set_within_class_weight (\n            scalar_type weight\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(weight >= 0,\n                \"\\t void discriminant_pca::set_within_class_weight()\"\n                << \"\\n\\t You can't use negative weight values\"\n                << \"\\n\\t weight: \" << weight \n                << \"\\n\\t this:   \" << this\n                );\n\n            within_weight = weight;\n        }\n\n        scalar_type within_class_weight (\n        ) const\n        {\n            return within_weight;\n        }\n\n        void set_between_class_weight (\n            scalar_type weight\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(weight >= 0,\n                \"\\t void discriminant_pca::set_between_class_weight()\"\n                << \"\\n\\t You can't use negative weight values\"\n                << \"\\n\\t weight: \" << weight \n                << \"\\n\\t this:   \" << this\n                );\n\n            between_weight = weight;\n        }\n\n        scalar_type between_class_weight (\n        ) const\n        {\n            return between_weight;\n        }\n\n        template <typename EXP1, typename EXP2>\n        void add_to_within_class_variance(\n            const matrix_exp<EXP1>& x,\n            const matrix_exp<EXP2>& y\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(x) && is_col_vector(y) && \n                         x.size() == y.size() &&\n                         (in_vector_size() == 0 || x.size() == in_vector_size()),\n                \"\\t void discriminant_pca::add_to_within_class_variance()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n                << \"\\n\\t is_col_vector(y): \" << is_col_vector(y) \n                << \"\\n\\t x.size():         \" << x.size() \n                << \"\\n\\t y.size():         \" << y.size() \n                << \"\\n\\t in_vector_size(): \" << in_vector_size() \n                << \"\\n\\t this:             \" << this\n                );\n\n            vect_size = x.size();\n            if (within_count == 0)\n            {\n                within_cov = (x-y)*trans(x-y);\n            }\n            else\n            {\n                within_cov += (x-y)*trans(x-y);\n            }\n            ++within_count;\n        }\n\n        template <typename EXP1, typename EXP2>\n        void add_to_between_class_variance(\n            const matrix_exp<EXP1>& x,\n            const matrix_exp<EXP2>& y\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(x) && is_col_vector(y) && \n                         x.size() == y.size() &&\n                         (in_vector_size() == 0 || x.size() == in_vector_size()),\n                \"\\t void discriminant_pca::add_to_between_class_variance()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n                << \"\\n\\t is_col_vector(y): \" << is_col_vector(y) \n                << \"\\n\\t x.size():         \" << x.size() \n                << \"\\n\\t y.size():         \" << y.size() \n                << \"\\n\\t in_vector_size(): \" << in_vector_size() \n                << \"\\n\\t this:             \" << this\n                );\n\n            vect_size = x.size();\n            if (between_count == 0)\n            {\n                between_cov = (x-y)*trans(x-y);\n            }\n            else\n            {\n                between_cov += (x-y)*trans(x-y);\n            }\n            ++between_count;\n        }\n\n        template <typename EXP>\n        void add_to_total_variance(\n            const matrix_exp<EXP>& x\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(x) && (in_vector_size() == 0 || x.size() == in_vector_size()),\n                \"\\t void discriminant_pca::add_to_total_variance()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n                << \"\\n\\t in_vector_size(): \" << in_vector_size() \n                << \"\\n\\t x.size():         \" << x.size() \n                << \"\\n\\t this:             \" << this\n                );\n\n            vect_size = x.size();\n            if (total_count == 0)\n            {\n                total_cov = x*trans(x);\n                total_sum = x;\n            }\n            else\n            {\n                total_cov += x*trans(x);\n                total_sum += x;\n            }\n            ++total_count;\n        }\n\n        const general_matrix dpca_matrix (\n            const double eps = 0.99\n        ) const\n        {\n            general_matrix dpca_mat;\n            general_matrix eigenvalues;\n            dpca_matrix(dpca_mat, eigenvalues, eps);\n            return dpca_mat;\n        }\n\n        const general_matrix dpca_matrix_of_size (\n            const long num_rows \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < num_rows && num_rows <= in_vector_size(),\n                \"\\t general_matrix discriminant_pca::dpca_matrix_of_size()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t num_rows:         \" << num_rows \n                << \"\\n\\t in_vector_size(): \" << in_vector_size() \n                << \"\\n\\t this:             \" << this\n                );\n\n            general_matrix dpca_mat;\n            general_matrix eigenvalues;\n            dpca_matrix_of_size(dpca_mat, eigenvalues, num_rows);\n            return dpca_mat;\n        }\n\n        void dpca_matrix (\n            general_matrix& dpca_mat,\n            general_matrix& eigenvalues,\n            const double eps = 0.99\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < eps && eps <= 1 && in_vector_size() != 0,\n                \"\\t void discriminant_pca::dpca_matrix()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t eps:              \" << eps \n                << \"\\n\\t in_vector_size(): \" << in_vector_size() \n                << \"\\n\\t this:             \" << this\n                );\n\n            compute_dpca_matrix(dpca_mat, eigenvalues, eps, 0);\n        }\n\n        void dpca_matrix_of_size (\n            general_matrix& dpca_mat,\n            general_matrix& eigenvalues,\n            const long num_rows \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < num_rows && num_rows <= in_vector_size(),\n                \"\\t general_matrix discriminant_pca::dpca_matrix_of_size()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t num_rows:         \" << num_rows \n                << \"\\n\\t in_vector_size(): \" << in_vector_size() \n                << \"\\n\\t this:             \" << this\n                );\n\n            compute_dpca_matrix(dpca_mat, eigenvalues, 1, num_rows);\n        }\n\n        void swap (\n            discriminant_pca& item\n        )\n        {\n            using std::swap;\n            swap(total_cov, item.total_cov);\n            swap(total_sum, item.total_sum);\n            swap(total_count, item.total_count);\n            swap(vect_size, item.vect_size);\n            swap(between_cov, item.between_cov);\n\n            swap(between_count, item.between_count);\n            swap(between_weight, item.between_weight);\n            swap(within_cov, item.within_cov);\n            swap(within_count, item.within_count);\n            swap(within_weight, item.within_weight);\n        }\n\n        friend void deserialize (\n            discriminant_pca& item, \n            std::istream& in\n        )\n        {\n            deserialize( item.total_cov, in);\n            deserialize( item.total_sum, in);\n            deserialize( item.total_count, in);\n            deserialize( item.vect_size, in);\n            deserialize( item.between_cov, in);\n            deserialize( item.between_count, in);\n            deserialize( item.between_weight, in);\n            deserialize( item.within_cov, in);\n            deserialize( item.within_count, in);\n            deserialize( item.within_weight, in);\n        }\n\n        friend void serialize (\n            const discriminant_pca& item, \n            std::ostream& out \n        )   \n        {\n            serialize( item.total_cov, out);\n            serialize( item.total_sum, out);\n            serialize( item.total_count, out);\n            serialize( item.vect_size, out);\n            serialize( item.between_cov, out);\n            serialize( item.between_count, out);\n            serialize( item.between_weight, out);\n            serialize( item.within_cov, out);\n            serialize( item.within_count, out);\n            serialize( item.within_weight, out);\n        }\n\n        discriminant_pca operator+ (\n            const discriminant_pca& item\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT((in_vector_size() == 0 || item.in_vector_size() == 0 || in_vector_size() == item.in_vector_size()) &&\n                         between_class_weight() == item.between_class_weight() &&\n                         within_class_weight() == item.within_class_weight(),\n                \"\\t discriminant_pca discriminant_pca::operator+()\"\n                << \"\\n\\t The two discriminant_pca objects being added must have compatible parameters\"\n                << \"\\n\\t in_vector_size():            \" << in_vector_size() \n                << \"\\n\\t item.in_vector_size():       \" << item.in_vector_size() \n                << \"\\n\\t between_class_weight():      \" << between_class_weight() \n                << \"\\n\\t item.between_class_weight(): \" << item.between_class_weight() \n                << \"\\n\\t within_class_weight():       \" << within_class_weight() \n                << \"\\n\\t item.within_class_weight():  \" << item.within_class_weight() \n                << \"\\n\\t this:                        \" << this\n                );\n\n            discriminant_pca temp(item);\n\n            // We need to make sure to ignore empty matrices.  That's what these if statements\n            // are for.\n\n            if (total_count != 0 && temp.total_count != 0)\n            {\n                temp.total_cov += total_cov;\n                temp.total_sum += total_sum;\n                temp.total_count += total_count;\n            }\n            else if (total_count != 0)\n            {\n                temp.total_cov = total_cov;\n                temp.total_sum = total_sum;\n                temp.total_count = total_count;\n            }\n\n            if (between_count != 0 && temp.between_count != 0)\n            {\n                temp.between_cov += between_cov;\n                temp.between_count += between_count;\n            }\n            else if (between_count != 0)\n            {\n                temp.between_cov = between_cov;\n                temp.between_count = between_count;\n            }\n\n            if (within_count != 0 && temp.within_count != 0)\n            {\n                temp.within_cov += within_cov;\n                temp.within_count += within_count;\n            }\n            else if (within_count != 0)\n            {\n                temp.within_cov = within_cov;\n                temp.within_count = within_count;\n            }\n\n            return temp;\n        }\n\n        discriminant_pca& operator+= (\n            const discriminant_pca& rhs\n        )\n        {\n            (*this + rhs).swap(*this);\n            return *this;\n        }\n\n    private:\n\n        void compute_dpca_matrix (\n            general_matrix& dpca_mat,\n            general_matrix& eigenvalues,\n            const double eps,\n            long num_rows \n        ) const\n        {\n            general_matrix cov;\n\n            // now combine the three measures of variance into a single matrix by using the\n            // within_weight and between_weight weights.\n            cov = get_total_covariance_matrix();\n            if (within_count != 0)\n                cov -= within_weight*within_cov/within_count; \n            if (between_count != 0)\n                cov += between_weight*between_cov/between_count; \n\n\n            eigenvalue_decomposition<general_matrix> eig(make_symmetric(cov));\n\n            eigenvalues = eig.get_real_eigenvalues();\n            dpca_mat = eig.get_pseudo_v();\n\n            // sort the eigenvalues and eigenvectors so that the biggest eigenvalues come first\n            rsort_columns(dpca_mat, eigenvalues);\n\n            long num_vectors = 0;\n            if (num_rows == 0)\n            {\n                // Some of the eigenvalues might be negative.  So first lets zero those out\n                // so they won't get considered.\n                eigenvalues = pointwise_multiply(eigenvalues > 0, eigenvalues);\n                // figure out how many eigenvectors we want in our dpca matrix\n                const double thresh = sum(eigenvalues)*eps;\n                double total = 0;\n                for (long r = 0; r < eigenvalues.size() && total < thresh; ++r)\n                {\n                    // Don't even think about looking at eigenvalues that are 0.  If we go this\n                    // far then we have all we need.\n                    if (eigenvalues(r) == 0)\n                        break;\n\n                    ++num_vectors;\n                    total += eigenvalues(r);\n                }\n\n                if (num_vectors == 0)\n                    throw discriminant_pca_error(\"While performing discriminant_pca, all eigenvalues were negative or 0\");\n            }\n            else\n            {\n                num_vectors = num_rows;\n            }\n\n\n            // So now we know we want to use num_vectors of the first eigenvectors.  So\n            // pull those out and discard the rest.\n            dpca_mat = trans(colm(dpca_mat,range(0,num_vectors-1)));\n\n            // also clip off the eigenvalues we aren't using\n            eigenvalues = rowm(eigenvalues, range(0,num_vectors-1));\n\n        }\n\n        general_matrix get_total_covariance_matrix (\n        ) const\n        /*!\n            ensures\n                - returns the covariance matrix of all the data given to the add_to_total_variance()\n        !*/\n        {\n            // if we don't even know the dimensionality of the vectors we are dealing\n            // with then just return an empty matrix\n            if (vect_size == 0)\n                return general_matrix();\n\n            // we know the vector size but we have zero total covariance.  \n            if (total_count == 0)\n            {\n                general_matrix temp(vect_size,vect_size);\n                temp = 0;\n                return temp;\n            }\n\n            // In this case we actually have something to make a total covariance matrix out of. \n            // So do that.\n            column_matrix avg = total_sum/total_count;\n\n            return total_cov/total_count - avg*trans(avg);\n        }\n\n        general_matrix total_cov;\n        column_matrix total_sum;\n        scalar_type total_count;\n\n        long vect_size;\n\n        general_matrix between_cov;\n        scalar_type between_count;\n        scalar_type between_weight;\n\n        general_matrix within_cov;\n        scalar_type within_count;\n        scalar_type within_weight;\n    };\n\n    template <\n        typename matrix_type\n        >\n    inline void swap (\n        discriminant_pca<matrix_type>& a, \n        discriminant_pca<matrix_type>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DPCA_h_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/dpca_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_DPCA_ABSTRaCT_\n#ifdef DLIB_DPCA_ABSTRaCT_\n\n#include <limits>\n#include <cmath>\n#include \"../matrix/matrix_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class discriminant_pca\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                Must be some type of dlib::matrix.\n\n            INITIAL VALUE\n                - in_vector_size() == 0\n                - between_class_weight() == 1\n                - within_class_weight() == 1\n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements the Discriminant PCA technique described in the paper:\n                    A New Discriminant Principal Component Analysis Method with Partial Supervision (2009)\n                    by Dan Sun and Daoqiang Zhang\n\n                This algorithm is basically a straightforward generalization of the classical PCA\n                technique to handle partially labeled data.  It is useful if you want to learn a linear\n                dimensionality reduction rule using a bunch of data that is partially labeled.  \n                \n                It functions by estimating three different scatter matrices.  The first is the total scatter \n                matrix St (i.e. the total data covariance matrix), the second is the between class scatter \n                matrix Sb (basically a measure of the variance between data of different classes) and the \n                third is the within class scatter matrix Sw (a measure of the variance of data within the \n                same classes).  \n\n                Once these three matrices are estimated they are combined according to the following equation:\n                   S = St + a*Sb - b*Sw\n                Where a and b are user supplied weights.  Then the largest eigenvalues of the S matrix are \n                computed and their associated eigenvectors are returned as the output of this algorithm.  \n                That is, the desired linear dimensionality reduction is given by the matrix with these \n                eigenvectors stored in its rows.\n\n                Note that if a and b are set to 0 (or no labeled data is provided) then the output transformation\n                matrix is the same as the one produced by the classical PCA algorithm.\n        !*/\n\n    public:\n\n        struct discriminant_pca_error : public error;\n        /*!\n            This exception is thrown if there is some error that prevents us from creating\n            a DPCA matrix.\n        !*/\n\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n        discriminant_pca (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n        !*/\n\n        long in_vector_size (\n        ) const;\n        /*!\n            ensures\n                - if (this object has been presented with any input vectors) then\n                    - returns the dimension of the column vectors used with this object\n                - else\n                    - returns 0\n        !*/\n\n        void set_within_class_weight (\n            scalar_type weight\n        );\n        /*!\n            requires\n                - weight >= 0\n            ensures\n                - #within_class_weight() == weight\n        !*/\n\n        scalar_type within_class_weight (\n        ) const;\n        /*!\n            ensures\n                - returns the weight used when combining the within class scatter matrix with\n                  the other scatter matrices.  \n        !*/\n\n        void set_between_class_weight (\n            scalar_type weight\n        );\n        /*!\n            requires\n                - weight >= 0\n            ensures\n                - #between_class_weight() == weight\n        !*/\n\n        scalar_type between_class_weight (\n        ) const;\n        /*!\n            ensures\n                - returns the weight used when combining the between class scatter matrix with\n                  the other scatter matrices.  \n        !*/\n\n        void add_to_within_class_variance(\n            const matrix_exp& x,\n            const matrix_exp& y\n        );\n        /*!\n            requires\n                - is_col_vector(x) == true\n                - is_col_vector(y) == true\n                - x.size() == y.size()\n                - if (in_vector_size() != 0) then\n                    - x.size() == y.size() == in_vector_size()\n            ensures\n                - #in_vector_size() == x.size()\n                - Adds (x-y)*trans(x-y) to the within class scatter matrix.\n                  (i.e. the direction given by (x-y) is recorded as being a direction associated\n                  with within class variance and is therefore unimportant and will be weighted\n                  less in the final dimensionality reduction)\n        !*/\n\n        void add_to_between_class_variance(\n            const matrix_exp& x,\n            const matrix_exp& y\n        );\n        /*!\n            requires\n                - is_col_vector(x) == true\n                - is_col_vector(y) == true\n                - x.size() == y.size()\n                - if (in_vector_size() != 0) then\n                    - x.size() == y.size() == in_vector_size()\n            ensures\n                - #in_vector_size() == x.size()\n                - Adds (x-y)*trans(x-y) to the between class scatter matrix.\n                  (i.e. the direction given by (x-y) is recorded as being a direction associated\n                  with between class variance and is therefore important and will be weighted\n                  higher in the final dimensionality reduction)\n        !*/\n\n        void add_to_total_variance(\n            const matrix_exp& x\n        );\n        /*!\n            requires\n                - is_col_vector(x) == true\n                - if (in_vector_size() != 0) then\n                    - x.size() == in_vector_size()\n            ensures\n                - #in_vector_size() == x.size()\n                - let M denote the centroid (or mean) of all the data.  Then this function \n                  Adds (x-M)*trans(x-M) to the total scatter matrix.\n                  (i.e. the direction given by (x-M) is recorded as being a direction associated\n                  with unlabeled variance and is therefore of default importance and will be weighted\n                  as described in the discriminant_pca class description.)\n        !*/\n\n        const general_matrix dpca_matrix (\n            const double eps = 0.99\n        ) const;\n        /*!\n            requires\n                - 0 < eps <= 1\n                - in_vector_size() != 0\n                  (i.e. you have to have given this object some data)\n            ensures\n                - computes and returns the matrix MAT given by dpca_matrix(MAT,eigen,eps).  \n                  That is, this function returns the dpca_matrix computed by the function\n                  defined below.  \n                - Note that MAT is the desired linear transformation matrix.  That is, \n                  multiplying a vector by MAT performs the desired linear dimensionality reduction.\n            throws\n                - discriminant_pca_error\n                    This exception is thrown if we are unable to create the dpca_matrix for some \n                    reason.  For example, if only within class examples have been given or\n                    within_class_weight() is very large then all eigenvalues will be negative and\n                    that prevents this algorithm from working properly.\n        !*/\n\n        void dpca_matrix (\n            general_matrix& dpca_mat,\n            general_matrix& eigenvalues,\n            const double eps = 0.99\n        ) const;\n        /*!\n            requires\n                - 0 < eps <= 1\n                - in_vector_size() != 0\n                  (i.e. you have to have given this object some data)\n            ensures\n                - is_col_vector(#eigenvalues) == true\n                - #dpca_mat.nr() == eigenvalues.size() \n                - #dpca_mat.nc() == in_vector_size()\n                - rowm(#dpca_mat,i) represents the ith eigenvector of the S matrix described\n                  in the class description and its eigenvalue is given by eigenvalues(i).\n                - all values in #eigenvalues are > 0.  Moreover, the eigenvalues are in\n                  sorted order with the largest eigenvalue stored at eigenvalues(0).\n                - (#dpca_mat)*trans(#dpca_mat) == identity_matrix.  \n                  (i.e. the rows of the dpca_matrix are all unit length vectors and are mutually\n                  orthogonal)\n                - Note that #dpca_mat is the desired linear transformation matrix.  That is, \n                  multiplying a vector by #dpca_mat performs the desired linear dimensionality \n                  reduction.\n                - sum(#eigenvalues) will be equal to about eps times the total sum of all \n                  positive eigenvalues in the S matrix described in this class's description.\n                  This means that eps is a number that controls how \"lossy\" the dimensionality\n                  reduction will be.  Large values of eps result in more output dimensions \n                  while smaller values result in fewer. \n            throws\n                - discriminant_pca_error\n                    This exception is thrown if we are unable to create the dpca_matrix for some \n                    reason.  For example, if only within class examples have been given or\n                    within_class_weight() is very large then all eigenvalues will be negative and\n                    that prevents this algorithm from working properly.\n        !*/\n\n        const general_matrix dpca_matrix_of_size (\n            const long num_rows \n        );\n        /*!\n            requires\n                - 0 < num_rows <= in_vector_size()\n            ensures\n                - computes and returns the matrix MAT given by dpca_matrix_of_size(MAT,eigen,num_rows).  \n                  That is, this function returns the dpca_matrix computed by the function\n                  defined below.  \n                - Note that MAT is the desired linear transformation matrix.  That is,\n                  multiplying a vector by MAT performs the desired linear dimensionality\n                  reduction to num_rows dimensions.\n        !*/\n\n        void dpca_matrix_of_size (\n            general_matrix& dpca_mat,\n            general_matrix& eigenvalues,\n            const long num_rows \n        );\n        /*!\n            requires\n                - 0 < num_rows <= in_vector_size()\n            ensures\n                - is_col_vector(#eigenvalues) == true\n                - #dpca_mat.nr() == eigenvalues.size() \n                - #dpca_mat.nr() == num_rows \n                - #dpca_mat.nc() == in_vector_size()\n                - rowm(#dpca_mat,i) represents the ith eigenvector of the S matrix described\n                  in the class description and its eigenvalue is given by eigenvalues(i).\n                - The values in #eigenvalues might be positive or negative.  Additionally, the\n                  eigenvalues are in sorted order with the largest eigenvalue stored at\n                  eigenvalues(0).\n                - (#dpca_mat)*trans(#dpca_mat) == identity_matrix.  \n                  (i.e. the rows of the dpca_matrix are all unit length vectors and are mutually\n                  orthogonal)\n                - Note that #dpca_mat is the desired linear transformation matrix.  That is, \n                  multiplying a vector by #dpca_mat performs the desired linear dimensionality \n                  reduction to num_rows dimensions.\n        !*/\n\n        discriminant_pca operator+ (\n            const discriminant_pca& item\n        ) const;\n        /*!\n            requires\n                - in_vector_size() == 0 || item.in_vector_size() == 0 || in_vector_size() == item.in_vector_size()\n                  (i.e. the in_vector_size() of *this and item must match or one must be zero)\n                - between_class_weight() == item.between_class_weight()\n                - within_class_weight() == item.within_class_weight()\n            ensures\n                - returns a new discriminant_pca object that represents the combination of all \n                  the measurements given to *this and item.  That is, this function returns a\n                  discriminant_pca object, R, that is equivalent to what you would obtain if all\n                  modifying calls (e.g. the add_to_*() functions) to *this and item had instead \n                  been done to R.\n        !*/\n\n        discriminant_pca& operator+= (\n            const discriminant_pca& rhs\n        );\n        /*!\n            requires\n                - in_vector_size() == 0 || rhs.in_vector_size() == 0 || in_vector_size() == rhs.in_vector_size()\n                  (i.e. the in_vector_size() of *this and rhs must match or one must be zero)\n                - between_class_weight() == rhs.between_class_weight()\n                - within_class_weight() == rhs.within_class_weight()\n            ensures\n                - #*this == *item + rhs\n                - returns #*this\n        !*/\n\n        void swap (\n            discriminant_pca& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    inline void swap (\n        discriminant_pca<matrix_type>& a, \n        discriminant_pca<matrix_type>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename matrix_type,\n        >\n    void deserialize (\n        discriminant_pca<matrix_type>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    template <\n        typename matrix_type,\n        >\n    void serialize (\n        const discriminant_pca<matrix_type>& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_DPCA_ABSTRaCT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/image_feature_sampling.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_IMAGE_FEATURE_SaMPLING_Hh_\n#define DLIB_IMAGE_FEATURE_SaMPLING_Hh_\n\n#include \"image_feature_sampling_abstract.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type,\n        typename feature_extractor_type,\n        typename pyramid_type\n        >\n    random_subset_selector<typename feature_extractor_type::descriptor_type> randomly_sample_image_features (\n        const image_array_type& images,\n        const pyramid_type& pyr,\n        const feature_extractor_type& fe_,\n        unsigned long num\n    )\n    {\n        feature_extractor_type fe;\n        fe.copy_configuration(fe_);\n        random_subset_selector<typename feature_extractor_type::descriptor_type> basis;\n        basis.set_max_size(num);\n\n        typedef typename image_array_type::type image_type;\n        image_type temp_img, temp_img2;\n\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            bool at_pyramid_top = true;\n            while (true)\n            {\n                if (at_pyramid_top)\n                    fe.load(images[i]);\n                else\n                    fe.load(temp_img);\n                \n                if (fe.size() == 0)\n                    break;\n\n                for (long r = 0; r < fe.nr(); ++r)\n                {\n                    for (long c = 0; c < fe.nc(); ++c)\n                    {\n                        if (basis.next_add_accepts())\n                        {\n                            basis.add(fe(r,c));\n                        }\n                        else\n                        {\n                            basis.add();\n                        }\n                    }\n                }\n\n                if (at_pyramid_top)\n                {\n                    at_pyramid_top = false;\n                    pyr(images[i], temp_img);\n                }\n                else\n                {\n                    pyr(temp_img, temp_img2);\n                    swap(temp_img2,temp_img);\n                }\n            }\n        }\n        return basis;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IMAGE_FEATURE_SaMPLING_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/image_feature_sampling_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_IMAGE_FEATURE_SaMPLING_ABSTRACT_Hh_\n#ifdef DLIB_IMAGE_FEATURE_SaMPLING_ABSTRACT_Hh_\n\n#include \"random_subset_selector_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type,\n        typename feature_extractor_type,\n        typename pyramid_type\n        >\n    random_subset_selector<typename feature_extractor_type::descriptor_type> randomly_sample_image_features (\n        const image_array_type& images,\n        const pyramid_type& pyr,\n        const feature_extractor_type& fe,\n        unsigned long num\n    );\n    /*!\n        requires\n            - pyramid_type == a type compatible with the image pyramid objects defined \n              in dlib/image_transforms/image_pyramid_abstract.h\n            - feature_extractor_type == a local image feature extractor type such as the\n              dlib::hog_image\n            - image_array_type == an implementation of dlib/array/array_kernel_abstract.h\n              and it must contain image objects which can be passed to pyr() and fe.load()\n              and are swappable by global swap().\n        ensures\n            - creates an image pyramid for each image in images and performs feature\n              extraction on each pyramid level.  Then selects a random subsample of at \n              most num local feature vectors and returns it.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_IMAGE_FEATURE_SaMPLING_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/random_subset_selector.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RANDOM_SUBSeT_SELECTOR_H_\n#define DLIB_RANDOM_SUBSeT_SELECTOR_H_\n\n#include \"random_subset_selector_abstract.h\"\n#include \"../rand.h\"\n#include <vector>\n#include \"../algs.h\"\n#include \"../string.h\"\n#include \"../serialize.h\"\n#include \"../matrix/matrix_mat.h\"\n#include <iostream>\n\nnamespace dlib\n{\n    template <\n        typename T,\n        typename Rand_type = dlib::rand\n        >\n    class random_subset_selector\n    {\n        /*!\n            INITIAL VALUE\n                - _max_size == 0\n                - items.size() == 0\n                - count == 0\n                - _next_add_accepts == false\n\n            CONVENTION\n                - count == the number of times add() has been called since the last\n                  time this object was empty.\n                - items.size() == size()\n                - max_size() == _max_size\n                - next_add_accepts() == _next_add_accepts\n        !*/\n    public:\n        typedef T type;\n        typedef T value_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef Rand_type rand_type;\n\n        typedef typename std::vector<T>::iterator iterator;\n        typedef typename std::vector<T>::const_iterator const_iterator;\n\n\n        random_subset_selector (\n        )\n        {\n            _max_size = 0;\n            make_empty();\n        }\n\n        void set_seed(const std::string& value)\n        {\n            rnd.set_seed(value);\n        }\n\n        void make_empty (\n        )\n        {\n            items.resize(0);\n            count = 0;\n            update_next_add_accepts();\n        }\n\n        const std::vector<T>& to_std_vector(\n        ) const { return items; }\n\n        unsigned long size (\n        ) const \n        {\n            return items.size();\n        }\n\n        void set_max_size (\n            unsigned long new_max_size\n        )\n        {\n            items.reserve(new_max_size);\n            make_empty();\n            _max_size = new_max_size;\n            update_next_add_accepts();\n        }\n\n        unsigned long max_size (\n        ) const\n        {\n            return _max_size;\n        }\n\n        T& operator[] (\n            unsigned long idx\n        ) \n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < size(),\n                \"\\tvoid random_subset_selector::operator[]()\"\n                << \"\\n\\t idx is out of range\"\n                << \"\\n\\t idx:    \" << idx \n                << \"\\n\\t size(): \" << size() \n                << \"\\n\\t this:   \" << this\n                );\n\n            return items[idx];\n        }\n\n        const T& operator[] (\n            unsigned long idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(idx < size(),\n                \"\\tvoid random_subset_selector::operator[]()\"\n                << \"\\n\\t idx is out of range\"\n                << \"\\n\\t idx:    \" << idx \n                << \"\\n\\t size(): \" << size() \n                << \"\\n\\t this:   \" << this\n                );\n\n            return items[idx];\n        }\n\n        iterator                begin()                         { return items.begin(); }\n        const_iterator          begin() const                   { return items.begin(); }\n        iterator                end()                           { return items.end(); }\n        const_iterator          end() const                     { return items.end(); }\n\n        bool next_add_accepts (\n        ) const \n        {\n            return _next_add_accepts;\n        }\n\n        void add (\n            const T& new_item\n        )\n        {\n            if (items.size() < _max_size)\n            {\n                items.push_back(new_item);\n                // swap into a random place\n                exchange(items[rnd.get_random_32bit_number()%items.size()], items.back());\n            }\n            else if (_next_add_accepts)\n            {\n                // pick a random element of items and replace it.\n                items[rnd.get_random_32bit_number()%items.size()] = new_item;\n            }\n\n            update_next_add_accepts();\n            ++count;\n        }\n\n        void add (\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(next_add_accepts() == false,\n                \"\\tvoid random_subset_selector::add()\"\n                << \"\\n\\t You should be calling the version of add() that takes an argument\"\n                << \"\\n\\t this: \" << this\n                );\n\n            update_next_add_accepts();\n            ++count;\n        }\n\n        void swap (\n            random_subset_selector& a\n        )\n        {\n            a.swap(a.items);\n            std::swap(_max_size, a._max_size);\n            std::swap(count, a.count);\n            rnd.swap(a.rnd);\n            std::swap(_next_add_accepts, a._next_add_accepts);\n        }\n\n        template <typename T1, typename T2>\n        friend void serialize (\n            const random_subset_selector<T1,T2>& item,\n            std::ostream& out\n        );\n\n        template <typename T1, typename T2>\n        friend void deserialize (\n            random_subset_selector<T1,T2>& item,\n            std::istream& in \n        );\n\n    private:\n\n        void update_next_add_accepts (\n        )\n        {\n            if (items.size() < _max_size)\n            {\n                _next_add_accepts = true;\n            }\n            else if (_max_size == 0)\n            {\n                _next_add_accepts = false;\n            }\n            else\n            {\n                // At this point each element of items has had an equal chance of being in this object.   \n                // In particular, the probability that each arrived here is currently items.size()/count.    \n                // We need to be able to say that, after this function ends, the probability of any \n                // particular object ending up in items is items.size()/(count+1).  So this means that \n                // we should decide to add a new item into items with this probability.  Also, if we do \n                // so then we pick one of the current items and replace it at random with the new item.\n\n                // Make me a random 64 bit number.   This might seem excessive but I want this object\n                // to be able to handle an effectively infinite number of calls to add().  So count\n                // might get very large and we need to deal with that properly.\n                const unsigned long num1 = rnd.get_random_32bit_number();\n                const unsigned long num2 = rnd.get_random_32bit_number();\n                uint64 num = num1;\n                num <<= 32;\n                num |= num2;\n\n                num %= (count+1);\n\n                _next_add_accepts = (num < items.size());\n            }\n\n        }\n\n        std::vector<T> items;\n        unsigned long _max_size;\n        uint64 count; \n\n        rand_type rnd;\n\n        bool _next_add_accepts;\n\n    };\n\n    template <\n        typename T,\n        typename rand_type \n        >\n    void swap (\n        random_subset_selector<T,rand_type>& a,\n        random_subset_selector<T,rand_type>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T1, typename T2>\n    void serialize (\n        const random_subset_selector<T1,T2>& item,\n        std::ostream& out\n    )\n    {\n        serialize(item.items, out);\n        serialize(item._max_size, out);\n        serialize(item.count, out);\n        serialize(item.rnd, out);\n        serialize(item._next_add_accepts, out);\n    }\n\n    template <typename T1, typename T2>\n    void deserialize (\n        random_subset_selector<T1,T2>& item,\n        std::istream& in \n    )\n    {\n        deserialize(item.items, in);\n        deserialize(item._max_size, in);\n        deserialize(item.count, in);\n        deserialize(item.rnd, in);\n        deserialize(item._next_add_accepts, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename alloc\n        >\n    random_subset_selector<T> randomly_subsample (\n        const std::vector<T,alloc>& samples,\n        unsigned long num\n    )\n    {\n        random_subset_selector<T> subset;\n        subset.set_max_size(num);\n        for (unsigned long i = 0; i < samples.size(); ++i)\n            subset.add(samples[i]);\n        return subset;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename alloc,\n        typename U\n        >\n    random_subset_selector<T> randomly_subsample (\n        const std::vector<T,alloc>& samples,\n        unsigned long num,\n        const U& random_seed\n    )\n    {\n        random_subset_selector<T> subset;\n        subset.set_seed(cast_to_string(random_seed));\n        subset.set_max_size(num);\n        for (unsigned long i = 0; i < samples.size(); ++i)\n            subset.add(samples[i]);\n        return subset;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    random_subset_selector<T> randomly_subsample (\n        const random_subset_selector<T>& samples,\n        unsigned long num\n    )\n    {\n        random_subset_selector<T> subset;\n        subset.set_max_size(num);\n        for (unsigned long i = 0; i < samples.size(); ++i)\n            subset.add(samples[i]);\n        return subset;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    random_subset_selector<T> randomly_subsample (\n        const random_subset_selector<T>& samples,\n        unsigned long num,\n        const U& random_seed\n    )\n    {\n        random_subset_selector<T> subset;\n        subset.set_seed(cast_to_string(random_seed));\n        subset.set_max_size(num);\n        for (unsigned long i = 0; i < samples.size(); ++i)\n            subset.add(samples[i]);\n        return subset;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_array_to_mat<random_subset_selector<T> > > mat (\n        const random_subset_selector<T>& m \n    )\n    {\n        typedef op_array_to_mat<random_subset_selector<T> > op;\n        return matrix_op<op>(op(m));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RANDOM_SUBSeT_SELECTOR_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/random_subset_selector_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RANDOM_SUBSeT_SELECTOR_ABSTRACT_H_\n#ifdef DLIB_RANDOM_SUBSeT_SELECTOR_ABSTRACT_H_\n\n#include <vector>\n#include \"../rand/rand_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../string.h\"\n\nnamespace dlib\n{\n    template <\n        typename T,\n        typename Rand_type = dlib::rand\n        >\n    class random_subset_selector\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be a copyable type\n\n            REQUIREMENTS ON Rand_type\n                must be an implementation of dlib/rand/rand_kernel_abstract.h\n\n            INITIAL VALUE\n                - size() == 0\n                - max_size() == 0\n                - next_add_accepts() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool to help you select a random subset of a large body of data.  \n                In particular, it is useful when the body of data is too large to fit into memory.\n\n                So for example, suppose you have 1000000 data samples and you want to select a\n                random subset of size 1000.   Then you could do that as follows:\n                    \n                    random_subset_selector<sample_type> rand_subset;\n                    rand_subset.set_max_size(1000)\n                    for (int i = 0; i < 1000000; ++i)\n                        rand_subset.add( get_next_data_sample());\n\n              \n                At the end of the for loop you will have your random subset of 1000 samples.  And by\n                random I mean that each of the 1000000 data samples has an equal chance of ending\n                up in the rand_subset object.\n\n\n                Note that the above example calls get_next_data_sample() for each data sample.  This \n                may be inefficient since most of the data samples are just ignored.  An alternative \n                method that doesn't require you to load each sample can also be used.  Consider the \n                following:\n\n                    random_subset_selector<sample_type> rand_subset;\n                    rand_subset.set_max_size(1000)\n                    for (int i = 0; i < 1000000; ++i)\n                        if (rand_subset.next_add_accepts())\n                            rand_subset.add(get_data_sample(i));\n                        else\n                            rand_subset.add() \n\n                In the above example we only actually fetch the data sample into memory if we\n                know that the rand_subset would include it into the random subset.  Otherwise,\n                we can just call the empty add().\n                \n\n                Finally, note that the random_subset_selector uses a deterministic pseudo-random\n                number generator under the hood.  Moreover, the default constructor always seeds\n                the random number generator in the same way.  So unless you call set_seed() \n                each instance of the random_subset_selector will function identically.\n        !*/\n    public:\n        typedef T type;\n        typedef T value_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef Rand_type rand_type;\n\n        typedef typename std::vector<T>::iterator iterator;\n        typedef typename std::vector<T>::const_iterator const_iterator;\n\n        random_subset_selector (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void set_seed(\n            const std::string& value\n        );\n        /*!\n            ensures\n                - sets the seed of the random number generator that is embedded in\n                  this object to the given value.\n        !*/\n\n        void make_empty (\n        );\n        /*!\n            ensures\n                - #size() == 0\n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of items of type T currently contained in this object\n        !*/\n\n        void set_max_size (\n            unsigned long new_max_size\n        );\n        /*!\n            ensures\n                - #max_size() == new_max_size\n                - #size() == 0\n        !*/\n\n        unsigned long max_size (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum allowable size for this object\n        !*/\n\n        T& operator[] (\n            unsigned long idx\n        );\n        /*!\n            requires\n                - idx < size()\n            ensures\n                - returns a non-const reference to the idx'th element of this object\n        !*/\n\n        const T& operator[] (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < size()\n            ensures\n                - returns a const reference to the idx'th element of this object\n        !*/\n\n        bool next_add_accepts (\n        ) const;\n        /*!\n            ensures\n                - if (the next call to add(item) will result in item being included\n                  into *this) then\n                    - returns true\n                    - Note that the next item will always be accepted if size() < max_size().\n                - else\n                    - returns false\n                    - Note that the next item will never be accepted if max_size() == 0.\n        !*/\n\n        void add (\n            const T& new_item\n        );\n        /*!\n            ensures\n                - if (next_add_accepts()) then\n                    - places new_item into *this object at a random location\n                    - if (size() < max_size()) then\n                        - #size() == size() + 1\n                - #next_add_accepts() == The updated information about the acceptance\n                  of the next call to add()\n        !*/\n\n        void add (\n        );\n        /*!\n            requires\n                - next_add_accepts() == false\n            ensures\n                - This function does nothing but update the value of #next_add_accepts()\n        !*/\n\n        iterator begin(\n        );\n        /*!\n            ensures\n                - if (size() > 0) then\n                    - returns an iterator referring to the first element in \n                      this container.\n                - else\n                    - returns end()\n        !*/\n        \n        const_iterator begin(\n        ) const;\n        /*!\n            ensures\n                - if (size() > 0) then\n                    - returns a const_iterator referring to the first element in \n                      this container.\n                - else\n                    - returns end()\n        !*/\n\n        iterator end(\n        ); \n        /*!\n            ensures\n                - returns an iterator that represents one past the end of\n                  this container\n        !*/\n\n        const_iterator end(\n        ) const;\n        /*!\n            ensures\n                - returns an iterator that represents one past the end of\n                  this container\n        !*/\n\n        const std::vector<T>& to_std_vector(\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the underlying std::vector<T> that contains\n                  all elements in this object.  That is, this function returns a vector, V,\n                  which has the following properties:  \n                    - V.size()  == this->size()\n                    - V.begin() == this->begin()\n                    - V.end()   == this->end()\n        !*/\n\n        void swap (\n            random_subset_selector& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n    template <\n        typename T,\n        typename rand_type \n        >\n    void swap (\n        random_subset_selector<T,rand_type>& a,\n        random_subset_selector<T,rand_type>& b\n    ) { a.swap(b); }\n    /*!\n        provides global swap support\n    !*/\n\n    template <\n        typename T,\n        typename rand_type \n        >\n    void serialize (\n        const random_subset_selector<T,rand_type>& item,\n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    template <\n        typename T,\n        typename rand_type \n        >\n    void deserialize (\n        random_subset_selector<T,rand_type>& item,\n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename alloc\n        >\n    random_subset_selector<T> randomly_subsample (\n        const std::vector<T,alloc>& samples,\n        unsigned long num\n    );\n    /*!\n        ensures\n            - returns a random subset R such that:\n                - R contains a random subset of the given samples\n                - R.size() == min(num, samples.size())\n                - R.max_size() == num\n            - The random number generator used by this function will always be\n              initialized in the same way.  I.e. this function will always pick\n              the same random subsample if called multiple times.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename alloc,\n        typename U\n        >\n    random_subset_selector<T> randomly_subsample (\n        const std::vector<T,alloc>& samples,\n        unsigned long num,\n        const U& random_seed\n    );\n    /*!\n        requires\n            - random_seed must be convertible to a string by dlib::cast_to_string()\n        ensures\n            - returns a random subset R such that:\n                - R contains a random subset of the given samples\n                - R.size() == min(num, samples.size())\n                - R.max_size() == num\n            - The given random_seed will be used to initialize the random number\n              generator used by this function.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    random_subset_selector<T> randomly_subsample (\n        const random_subset_selector<T>& samples,\n        unsigned long num\n    );\n    /*!\n        ensures\n            - returns a random subset R such that:\n                - R contains a random subset of the given samples\n                - R.size() == min(num, samples.size())\n                - R.max_size() == num\n            - The random number generator used by this function will always be\n              initialized in the same way.  I.e. this function will always pick\n              the same random subsample if called multiple times.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    random_subset_selector<T> randomly_subsample (\n        const random_subset_selector<T>& samples,\n        unsigned long num,\n        const U& random_seed\n    );\n    /*!\n        requires\n            - random_seed must be convertible to a string by dlib::cast_to_string()\n        ensures\n            - returns a random subset R such that:\n                - R contains a random subset of the given samples\n                - R.size() == min(num, samples.size())\n                - R.max_size() == num\n            - The given random_seed will be used to initialize the random number\n              generator used by this function.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_exp mat (\n        const random_subset_selector<T>& m \n    );\n    /*!\n        ensures\n            - returns a matrix R such that:\n                - is_col_vector(R) == true \n                - R.size() == m.size()\n                - for all valid r:\n                  R(r) == m[r]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RANDOM_SUBSeT_SELECTOR_ABSTRACT_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/sammon.h",
    "content": "// Copyright (C) 2012  Emanuele Cesena (emanuele.cesena@gmail.com), Davis E. King\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SAMMoN_Hh_\n#define DLIB_SAMMoN_Hh_\n\n#include \"sammon_abstract.h\"\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"dpca.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n    class sammon_projection\n    {\n\n    public:\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename matrix_type>\n        std::vector<matrix<double,0,1> > operator() (\n            const std::vector<matrix_type>& data,       \n            const long num_dims                      \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(num_dims > 0,\n                \"\\t std::vector<matrix<double,0,1> > sammon_projection::operator()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n                << \"\\n\\t num_dims:    \" << num_dims\n                );\n            std::vector<matrix<double,0,1> > result;    // projections\n            if (data.size() == 0)\n            {\n                return result;\n            }\n\n#ifdef ENABLE_ASSERTS\n            DLIB_ASSERT(0 < num_dims && num_dims <= data[0].size(),\n                \"\\t std::vector<matrix<double,0,1> > sammon_projection::operator()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n                << \"\\n\\t data.size():    \" << data.size()\n                << \"\\n\\t num_dims:       \" << num_dims\n                << \"\\n\\t data[0].size(): \" << data[0].size() \n                );\n            for (unsigned long i = 0; i < data.size(); ++i)\n            {\n                DLIB_ASSERT(is_col_vector(data[i]) && data[i].size() == data[0].size(),\n                        \"\\t std::vector<matrix<double,0,1> > sammon_projection::operator()\"\n                        << \"\\n\\t Invalid inputs were given to this function.\"\n                        << \"\\n\\t data[\"<<i<<\"].size():    \" << data[i].size()\n                        << \"\\n\\t data[0].size(): \" << data[0].size() \n                        << \"\\n\\t is_col_vector(data[\"<<i<<\"]): \" << is_col_vector(data[i])\n                );\n            }\n#endif\n\n            double err;                                 // error (discarded)\n            do_sammon_projection(data, num_dims, result, err);\n            return result;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename matrix_type>\n        void operator() (\n            const std::vector<matrix_type>& data,       \n            const long num_dims,                     \n            std::vector<matrix<double,0,1> >& result,   \n            double &err,                                \n            const unsigned long num_iters = 1000,             \n            const double err_delta = 1.0e-9            \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(num_dims > 0 && num_iters > 0 && err_delta > 0.0,\n                \"\\t std::vector<matrix<double,0,1> > sammon_projection::operator()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n                << \"\\n\\t data.size(): \" << data.size()\n                << \"\\n\\t num_dims:    \" << num_dims\n                << \"\\n\\t num_iters:   \" << num_iters\n                << \"\\n\\t err_delta:   \" << err_delta\n                );\n            if (data.size() == 0)\n            {\n                result.clear();\n                err = 0;\n                return;\n            }\n\n#ifdef ENABLE_ASSERTS\n            DLIB_ASSERT(0 < num_dims && num_dims <= data[0].size(),\n                \"\\t std::vector<matrix<double,0,1> > sammon_projection::operator()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n                << \"\\n\\t data.size():    \" << data.size()\n                << \"\\n\\t num_dims:       \" << num_dims\n                << \"\\n\\t data[0].size(): \" << data[0].size() \n                );\n            for (unsigned long i = 0; i < data.size(); ++i)\n            {\n                DLIB_ASSERT(is_col_vector(data[i]) && data[i].size() == data[0].size(),\n                        \"\\t std::vector<matrix<double,0,1> > sammon_projection::operator()\"\n                        << \"\\n\\t Invalid inputs were given to this function.\"\n                        << \"\\n\\t data[\"<<i<<\"].size():    \" << data[i].size()\n                        << \"\\n\\t data[0].size(): \" << data[0].size() \n                        << \"\\n\\t is_col_vector(data[\"<<i<<\"]): \" << is_col_vector(data[i])\n                );\n            }\n#endif\n\n            do_sammon_projection(data, num_dims, result, err, num_iters, err_delta);\n        }\n\n        // ----------------------------------------------------------------------------------------\n        // ----------------------------------------------------------------------------------------\n\n    private:\n\n        void compute_relative_distances(\n            matrix<double,0,1>& dist,                   // relative distances (output)\n            matrix<double,0,0>& data,                   // input data (matrix whose columns are the input vectors)\n            double eps_ratio = 1.0e-7                   // to compute the minimum distance eps\n        )\n        /*!\n            requires\n                - dist.nc() == comb( data.nc(), 2 ), preallocated\n                - eps_ratio > 0\n            ensures\n                - dist[k] == lenght(data[i] - data[j]) for k = j(j-1)/2 + i\n        !*/\n        {\n            const long N = data.nc();                   // num of points\n            double eps;                                 // minimum distance, forced to avoid vectors collision\n                                                        // computed at runtime as eps_ration * mean(vectors distances)\n            for (int k = 0, i = 1; i < N; ++i)\n                for (int j = 0; j < i; ++j)\n                    dist(k++) = length(colm(data, i) - colm(data, j));\n\n            eps = eps_ratio * mean(dist);\n            dist = lowerbound(dist, eps);\n        }\n\n        // ----------------------------------------------------------------------------------------\n\n        template <typename matrix_type>\n        void do_sammon_projection(\n            const std::vector<matrix_type>& data,       // input data\n            unsigned long num_dims,                     // dimension of the reduced space\n            std::vector<matrix<double,0,1> >& result,   // projections (output)\n            double &err,                                // error (output)\n            unsigned long num_iters = 1000,             // max num of iterations: stop condition\n            const double err_delta = 1.0e-9             // delta error: stop condition\n        )\n        /*!\n            requires\n                - matrix_type should be a kind of dlib::matrix<double,N,1>\n                - num_dims > 0\n                - num_iters > 0\n                - err_delta > 0\n            ensures\n                - result == a set of matrix<double,num_dims,1> objects that represent\n                  the Sammon's projections of data vectors.\n                - err == the estimated error done in the projection, with the extra\n                  property that err(at previous iteration) - err < err_delta\n        !*/\n        {\n            // other params\n            const double mf = 0.3;                      // magic factor\n\n            matrix<double> mdata;                // input data as matrix\n            matrix<double> projs;                // projected vectors, i.e. output data as matrix\n\n            // std::vector<matrix> -> matrix\n            mdata.set_size(data[0].size(), data.size());\n            for (unsigned int i = 0; i < data.size(); i++)\n                set_colm(mdata, i) = data[i];\n\n            const long N = mdata.nc();           // num of points\n            const long d = num_dims;             // size of the reduced space\n            const long nd = N * (N - 1) / 2;     // num of pairs of points = size of the distances vectors\n\n            matrix<double, 0, 1> dsij, inv_dsij; // d*_ij: pair-wise distances in the input space (and inverses)\n            dsij.set_size(nd, 1);\n            inv_dsij.set_size(nd, 1);\n            double ic; // 1.0 / sum of dsij\n\n            matrix<double, 0, 1> dij;            // d_ij: pair-wise distances in the reduced space\n            dij.set_size(nd, 1);\n\n            matrix<double, 0, 0> dE, dE2, dtemp; // matrices representing error partial derivatives\n            dE.set_size(d, N);\n            dE2.set_size(d, N);\n            dtemp.set_size(d, N);\n\n            matrix<double, 0, 1> inv_dij, alpha; // utility vectors used to compute the partial derivatives\n            inv_dij.set_size(N, 1);              // inv_dij is 1.0/dij, but we only need it column-wise\n            alpha.set_size(N, 1);                // (slightly wasting a bit of computation)\n            // alpha = 1.0/dij - 1.0/dsij, again column-wise\n\n\n            // initialize projs with PCA\n            discriminant_pca<matrix<double> > dpca;\n            for (int i = 0; i < mdata.nc(); ++i)\n            {\n                dpca.add_to_total_variance(colm(mdata, i));\n            }\n            matrix<double> mat = dpca.dpca_matrix_of_size(num_dims);\n            projs = mat * mdata;\n\n            // compute dsij, inv_dsij and ic\n            compute_relative_distances(dsij, mdata);\n            inv_dsij = 1.0 / dsij;\n            ic = 1.0 / sum(dsij);\n\n            // compute dij and err\n            compute_relative_distances(dij, projs);\n            err = ic * sum(pointwise_multiply(squared(dij - dsij), inv_dsij));\n\n            // start iterating\n            while (num_iters--)\n            {\n                // compute dE, dE2 progressively column by column\n                for (int p = 0; p < N; ++p)\n                {\n                    // compute\n                    // - alpha_p, the column vector with 1/d_pj - 1/d*_pj\n                    // - dtemp, the matrix with the p-th column repeated all along\n                    //TODO: optimize constructions\n                    for (int i = 0; i < N; ++i)\n                    {\n                        int pos = (i < p) ? p * (p - 1) / 2 + i : i * (i - 1) / 2 + p;\n                        inv_dij(i) = (i == p) ? 0.0 : 1.0 / dij(pos);\n                        alpha(i) = (i == p) ? 0.0 : inv_dij(i) - inv_dsij(pos);\n                        set_colm(dtemp, i) = colm(projs, p);\n                    }\n\n                    dtemp -= projs;\n                    set_colm(dE, p) = dtemp * alpha;\n\n                    double sum_alpha = sum(alpha);\n                    set_colm(dE2, p) = abs( sum_alpha + squared(dtemp) * cubed(inv_dij) );\n                }\n\n\n                // compute the update projections\n                projs += pointwise_multiply(dE, mf * reciprocal(dE2));\n\n                // compute new dij and error\n                compute_relative_distances(dij, projs);\n                double err_new = ic * sum( pointwise_multiply(squared(dij - dsij), inv_dsij) );\n                if (err - err_new < err_delta)\n                    break;\n                err = err_new;\n            }\n\n            // matrix -> std::vector<matrix>\n            result.clear();\n            for (int i = 0; i < projs.nc(); ++i)\n                result.push_back(colm(projs, i));\n        }\n\n    };\n\n} // namespace dlib\n\n#endif // DLIB_SAMMoN_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/sammon_abstract.h",
    "content": "// Copyright (C) 2012  Emanuele Cesena (emanuele.cesena@gmail.com), Davis E. King\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SAMMoN_ABSTRACT_Hh_\n#ifdef DLIB_SAMMoN_ABSTRACT_Hh_\n\n#include \"../matrix/matrix_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n    class sammon_projection\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a function object that computes the Sammon projection of a set\n                of N points in a L-dimensional vector space onto a d-dimensional space\n                (d < L), according to the paper:\n                    A Nonlinear Mapping for Data Structure Analysis (1969) by J.W. Sammon\n\n                The current implementation is a vectorized version of the original algorithm.\n        !*/\n\n    public:\n\n        sammon_projection(\n        );\n        /*!\n            ensures\n                - this object is properly initialized \n        !*/\n\n        template <typename matrix_type>\n        std::vector<matrix<double,0,1> > operator() (\n            const std::vector<matrix_type>& data,       \n            const long num_dims                      \n        );\n        /*!\n            requires\n                - num_dims > 0\n                - matrix_type should be a kind of dlib::matrix of doubles capable\n                  of representing column vectors.\n                - for all valid i:\n                    - is_col_vector(data[i]) == true\n                    - data[0].size() == data[i].size()\n                      (i.e. all the vectors in data must have the same dimensionality)\n                - if (data.size() != 0) then\n                    - 0 < num_dims <= data[0].size()\n                      (i.e. you can't project into a higher dimension than the input data,\n                      only to a lower dimension.)\n            ensures\n                - This routine computes Sammon's dimensionality reduction method based on the\n                  given input data.  It will attempt to project the contents of data into a\n                  num_dims dimensional space that preserves relative distances between the\n                  input data points.\n                - This function returns a std::vector, OUT, such that:\n                    - OUT == a set of column vectors that represent the Sammon projection of \n                      the input data vectors. \n                    - OUT.size() == data.size()\n                    - for all valid i:\n                        - OUT[i].size() == num_dims\n                        - OUT[i] == the Sammon projection of the input vector data[i]\n        !*/\n\n        template <typename matrix_type>\n        void operator() (\n            const std::vector<matrix_type>& data,       \n            const long num_dims,                     \n            std::vector<matrix<double,0,1> >& result,   \n            double &err,                                \n            const unsigned long num_iters = 1000,             \n            const double err_delta = 1.0e-9            \n        );\n        /*!\n            requires\n                - num_iters > 0\n                - err_delta > 0\n                - num_dims > 0\n                - matrix_type should be a kind of dlib::matrix of doubles capable\n                  of representing column vectors.\n                - for all valid i:\n                    - is_col_vector(data[i]) == true\n                    - data[0].size() == data[i].size()\n                      (i.e. all the vectors in data must have the same dimensionality)\n                - if (data.size() != 0) then\n                    - 0 < num_dims <= data[0].size()\n                      (i.e. you can't project into a higher dimension than the input data,\n                      only to a lower dimension.)\n            ensures\n                - This routine computes Sammon's dimensionality reduction method based on the\n                  given input data.  It will attempt to project the contents of data into a\n                  num_dims dimensional space that preserves relative distances between the\n                  input data points.\n                - #err == the final error value at the end of the algorithm.  The goal of Sammon's\n                  algorithm is to find a lower dimensional projection of the input data that\n                  preserves the relative distances between points.  The value in #err is a measure\n                  of the total error at the end of the algorithm.  So smaller values indicate\n                  a better projection was found than if a large value is returned via #err.\n                - Sammon's algorithm will run until either num_iters iterations has executed\n                  or the change in error from one iteration to the next is less than err_delta.\n                - Upon completion, the output of Sammon's projection is stored into #result, in\n                  particular, we will have:\n                    - #result == a set of column vectors that represent the Sammon projection of \n                      the input data vectors. \n                    - #result.size() == data.size()\n                    - for all valid i:\n                        - #result[i].size() == num_dims\n                        - #result[i] == the Sammon projection of the input vector data[i]\n        !*/\n\n    };\n\n} \n\n#endif // DLIB_SAMMoN_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/statistics.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net), Steve Taylor\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STATISTICs_\n#define DLIB_STATISTICs_\n\n#include \"statistics_abstract.h\"\n#include <limits>\n#include <cmath>\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include \"../sparse_vector.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class running_stats\n    {\n    public:\n\n        running_stats()\n        {\n            clear();\n\n            COMPILE_TIME_ASSERT ((\n                    is_same_type<float,T>::value ||\n                    is_same_type<double,T>::value ||\n                    is_same_type<long double,T>::value \n            ));\n        }\n\n        void clear()\n        {\n            sum = 0;\n            sum_sqr  = 0;\n            sum_cub  = 0;\n            sum_four = 0;\n\n            n = 0;\n            min_value = std::numeric_limits<T>::infinity();\n            max_value = -std::numeric_limits<T>::infinity();\n        }\n\n        void add (\n            const T& val\n        )\n        {\n            sum      += val;\n            sum_sqr  += val*val;\n            sum_cub  += cubed(val);\n            sum_four += quaded(val);\n\n            if (val < min_value)\n                min_value = val;\n            if (val > max_value)\n                max_value = val;\n\n            ++n;\n        }\n\n        T current_n (\n        ) const\n        {\n            return n;\n        }\n\n        T mean (\n        ) const\n        {\n            if (n != 0)\n                return sum/n;\n            else\n                return 0;\n        }\n\n        T max (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 0,\n                \"\\tT running_stats::max\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return max_value;\n        }\n\n        T min (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 0,\n                \"\\tT running_stats::min\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return min_value;\n        }\n\n        T variance (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 1,\n                \"\\tT running_stats::variance\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            T temp = 1/(n-1);\n            temp = temp*(sum_sqr - sum*sum/n);\n            // make sure the variance is never negative.  This might\n            // happen due to numerical errors.\n            if (temp >= 0)\n                return temp;\n            else\n                return 0;\n        }\n\n        T stddev (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 1,\n                \"\\tT running_stats::stddev\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return std::sqrt(variance());\n        }\n\n        T skewness (\n        ) const\n        {  \n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 2,\n                \"\\tT running_stats::skewness\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n            );\n\n            T temp  = 1/n;\n            T temp1 = std::sqrt(n*(n-1))/(n-2); \n            temp    = temp1*temp*(sum_cub - 3*sum_sqr*sum*temp + 2*cubed(sum)*temp*temp)/\n                      (std::sqrt(std::pow(temp*(sum_sqr-sum*sum*temp),3)));\n\n            return temp; \n        }\n\n        T ex_kurtosis (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 3,\n                \"\\tT running_stats::kurtosis\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n            );\n\n            T temp = 1/n;\n            T m4   = temp*(sum_four - 4*sum_cub*sum*temp+6*sum_sqr*sum*sum*temp*temp\n                     -3*quaded(sum)*cubed(temp));\n            T m2   = temp*(sum_sqr-sum*sum*temp);\n            temp   = (n-1)*((n+1)*m4/(m2*m2)-3*(n-1))/((n-2)*(n-3));\n\n            return temp; \n        }\n\n        T scale (\n            const T& val\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 1,\n                \"\\tT running_stats::variance\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n            return (val-mean())/std::sqrt(variance());\n        }\n\n        running_stats operator+ (\n            const running_stats& rhs\n        ) const\n        {\n            running_stats temp(*this);\n\n            temp.sum += rhs.sum;\n            temp.sum_sqr += rhs.sum_sqr;\n            temp.sum_cub += rhs.sum_cub;\n            temp.sum_four += rhs.sum_four;\n            temp.n += rhs.n;\n            temp.min_value = std::min(rhs.min_value, min_value);\n            temp.max_value = std::max(rhs.max_value, max_value);\n            return temp;\n        }\n\n        template <typename U>\n        friend void serialize (\n            const running_stats<U>& item, \n            std::ostream& out \n        );\n\n        template <typename U>\n        friend void deserialize (\n            running_stats<U>& item, \n            std::istream& in\n        ); \n\n    private:\n        T sum;\n        T sum_sqr;\n        T sum_cub;\n        T sum_four;\n        T n;\n        T min_value;\n        T max_value;\n    \n        T cubed  (const T& val) const {return val*val*val; }\n        T quaded (const T& val) const {return val*val*val*val; }\n    };\n\n    template <typename T>\n    void serialize (\n        const running_stats<T>& item, \n        std::ostream& out \n    )\n    {\n        int version = 2;\n        serialize(version, out);\n\n        serialize(item.sum, out);\n        serialize(item.sum_sqr, out);\n        serialize(item.sum_cub, out);\n        serialize(item.sum_four, out);\n        serialize(item.n, out);\n        serialize(item.min_value, out);\n        serialize(item.max_value, out);\n    }\n\n    template <typename T>\n    void deserialize (\n        running_stats<T>& item, \n        std::istream& in\n    ) \n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 2)\n            throw dlib::serialization_error(\"Unexpected version number found while deserializing dlib::running_stats object.\");\n\n        deserialize(item.sum, in);\n        deserialize(item.sum_sqr, in);\n        deserialize(item.sum_cub, in);\n        deserialize(item.sum_four, in);\n        deserialize(item.n, in);\n        deserialize(item.min_value, in);\n        deserialize(item.max_value, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class running_scalar_covariance\n    {\n    public:\n\n        running_scalar_covariance()\n        {\n            clear();\n\n            COMPILE_TIME_ASSERT ((\n                    is_same_type<float,T>::value ||\n                    is_same_type<double,T>::value ||\n                    is_same_type<long double,T>::value \n            ));\n        }\n\n        void clear()\n        {\n            sum_xy = 0;\n            sum_x = 0;\n            sum_y = 0;\n            sum_xx = 0;\n            sum_yy = 0;\n            n = 0;\n        }\n\n        void add (\n            const T& x,\n            const T& y\n        )\n        {\n            sum_xy += x*y;\n\n            sum_xx += x*x;\n            sum_yy += y*y;\n\n            sum_x  += x;\n            sum_y  += y;\n\n            n += 1;\n        }\n\n        T current_n (\n        ) const\n        {\n            return n;\n        }\n\n        T mean_x (\n        ) const\n        {\n            if (n != 0)\n                return sum_x/n;\n            else\n                return 0;\n        }\n\n        T mean_y (\n        ) const\n        {\n            if (n != 0)\n                return sum_y/n;\n            else\n                return 0;\n        }\n\n        T covariance (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 1,\n                \"\\tT running_scalar_covariance::covariance()\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return 1/(n-1) * (sum_xy - sum_y*sum_x/n);\n        }\n\n        T correlation (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 1,\n                \"\\tT running_scalar_covariance::correlation()\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return covariance() / std::sqrt(variance_x()*variance_y());\n        }\n\n        T variance_x (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 1,\n                \"\\tT running_scalar_covariance::variance_x()\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            T temp = 1/(n-1) * (sum_xx - sum_x*sum_x/n);\n            // make sure the variance is never negative.  This might\n            // happen due to numerical errors.\n            if (temp >= 0)\n                return temp;\n            else\n                return 0;\n        }\n\n        T variance_y (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 1,\n                \"\\tT running_scalar_covariance::variance_y()\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            T temp = 1/(n-1) * (sum_yy - sum_y*sum_y/n);\n            // make sure the variance is never negative.  This might\n            // happen due to numerical errors.\n            if (temp >= 0)\n                return temp;\n            else\n                return 0;\n        }\n\n        T stddev_x (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 1,\n                \"\\tT running_scalar_covariance::stddev_x()\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return std::sqrt(variance_x());\n        }\n\n        T stddev_y (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(current_n() > 1,\n                \"\\tT running_scalar_covariance::stddev_y()\"\n                << \"\\n\\tyou have to add some numbers to this object first\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return std::sqrt(variance_y());\n        }\n\n        running_scalar_covariance operator+ (\n            const running_scalar_covariance& rhs\n        ) const\n        {\n            running_scalar_covariance temp(rhs);\n\n            temp.sum_xy += sum_xy;\n            temp.sum_x  += sum_x;\n            temp.sum_y  += sum_y;\n            temp.sum_xx += sum_xx;\n            temp.sum_yy += sum_yy;\n            temp.n      += n;\n            return temp;\n        }\n\n    private:\n\n        T sum_xy;\n        T sum_x;\n        T sum_y;\n        T sum_xx;\n        T sum_yy;\n        T n;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double mean_sign_agreement (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(a.size() == b.size(),\n                    \"\\t double mean_sign_agreement(a,b)\"\n                    << \"\\n\\t a and b must be the same length.\"\n                    << \"\\n\\t a.size(): \" << a.size()\n                    << \"\\n\\t b.size(): \" << b.size()\n        );\n\n        \n        double temp = 0;\n        for (unsigned long i = 0; i < a.size(); ++i)\n        {\n            if ((a[i] >= 0 && b[i] >= 0) ||\n                (a[i] < 0  && b[i] <  0))\n            {\n                temp += 1;\n            }\n        }\n\n        return temp/a.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double correlation (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(a.size() == b.size() && a.size() > 1,\n                    \"\\t double correlation(a,b)\"\n                    << \"\\n\\t a and b must be the same length and have more than one element.\"\n                    << \"\\n\\t a.size(): \" << a.size()\n                    << \"\\n\\t b.size(): \" << b.size()\n        );\n\n        running_scalar_covariance<double> rs;\n        for (unsigned long i = 0; i < a.size(); ++i)\n        {\n            rs.add(a[i], b[i]);\n        }\n        return rs.correlation();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double covariance (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(a.size() == b.size() && a.size() > 1,\n                    \"\\t double covariance(a,b)\"\n                    << \"\\n\\t a and b must be the same length and have more than one element.\"\n                    << \"\\n\\t a.size(): \" << a.size()\n                    << \"\\n\\t b.size(): \" << b.size()\n        );\n\n        running_scalar_covariance<double> rs;\n        for (unsigned long i = 0; i < a.size(); ++i)\n        {\n            rs.add(a[i], b[i]);\n        }\n        return rs.covariance();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double r_squared (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(a.size() == b.size() && a.size() > 1,\n                    \"\\t double r_squared(a,b)\"\n                    << \"\\n\\t a and b must be the same length and have more than one element.\"\n                    << \"\\n\\t a.size(): \" << a.size()\n                    << \"\\n\\t b.size(): \" << b.size()\n        );\n\n        return std::pow(correlation(a,b),2.0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double mean_squared_error (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(a.size() == b.size(),\n                    \"\\t double mean_squared_error(a,b)\"\n                    << \"\\n\\t a and b must be the same length.\"\n                    << \"\\n\\t a.size(): \" << a.size()\n                    << \"\\n\\t b.size(): \" << b.size()\n        );\n\n        return mean(squared(matrix_cast<double>(mat(a))-matrix_cast<double>(mat(b))));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class running_covariance\n    {\n        /*!\n            INITIAL VALUE\n                - vect_size == 0\n                - total_count == 0\n\n            CONVENTION\n                - vect_size == in_vector_size()\n                - total_count == current_n() \n\n                - if (total_count != 0)\n                    - total_sum == the sum of all vectors given to add()\n                    - the covariance of all the elements given to add() is given\n                      by:\n                        - let avg == total_sum/total_count\n                        - covariance == total_cov/total_count - avg*trans(avg)\n        !*/\n    public:\n\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n        running_covariance(\n        )\n        {\n            clear();\n        }\n\n        void clear(\n        )\n        {\n            total_count = 0;\n\n            vect_size = 0;\n\n            total_sum.set_size(0);\n            total_cov.set_size(0,0);\n        }\n\n        long in_vector_size (\n        ) const\n        {\n            return vect_size;\n        }\n\n        long current_n (\n        ) const\n        {\n            return static_cast<long>(total_count);\n        }\n\n        void set_dimension (\n            long size\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( size > 0,\n                \"\\t void running_covariance::set_dimension()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t size: \" << size \n                << \"\\n\\t this: \" << this\n                );\n\n            clear();\n            vect_size = size;\n            total_sum.set_size(size);\n            total_cov.set_size(size,size);\n            total_sum = 0;\n            total_cov = 0;\n        }\n\n        template <typename T>\n        typename disable_if<is_matrix<T> >::type add (\n            const T& val\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(((long)max_index_plus_one(val) <= in_vector_size() && in_vector_size() > 0),\n                \"\\t void running_covariance::add()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t max_index_plus_one(val): \" << max_index_plus_one(val) \n                << \"\\n\\t in_vector_size():        \" << in_vector_size() \n                << \"\\n\\t this:                    \" << this\n                );\n\n            for (typename T::const_iterator i = val.begin(); i != val.end(); ++i)\n            {\n                total_sum(i->first) += i->second;\n                for (typename T::const_iterator j = val.begin(); j != val.end(); ++j)\n                {\n                    total_cov(i->first, j->first) += i->second*j->second;\n                }\n            }\n\n            ++total_count;\n        }\n\n        template <typename T>\n        typename enable_if<is_matrix<T> >::type add (\n            const T& val\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(val) && (in_vector_size() == 0 || val.size() == in_vector_size()),\n                \"\\t void running_covariance::add()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t is_col_vector(val): \" << is_col_vector(val) \n                << \"\\n\\t in_vector_size():   \" << in_vector_size() \n                << \"\\n\\t val.size():         \" << val.size() \n                << \"\\n\\t this:               \" << this\n                );\n\n            vect_size = val.size();\n            if (total_count == 0)\n            {\n                total_cov = val*trans(val);\n                total_sum = val;\n            }\n            else\n            {\n                total_cov += val*trans(val);\n                total_sum += val;\n            }\n            ++total_count;\n        }\n\n        const column_matrix mean (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( in_vector_size() != 0,\n                \"\\t running_covariance::mean()\"\n                << \"\\n\\t This object can not execute this function in its current state.\"\n                << \"\\n\\t in_vector_size(): \" << in_vector_size() \n                << \"\\n\\t current_n():      \" << current_n() \n                << \"\\n\\t this:             \" << this\n                );\n\n            return total_sum/total_count;\n        }\n\n        const general_matrix covariance (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( in_vector_size() != 0 && current_n() > 1,\n                \"\\t running_covariance::covariance()\"\n                << \"\\n\\t This object can not execute this function in its current state.\"\n                << \"\\n\\t in_vector_size(): \" << in_vector_size() \n                << \"\\n\\t current_n():      \" << current_n() \n                << \"\\n\\t this:             \" << this\n                );\n\n            return (total_cov - total_sum*trans(total_sum)/total_count)/(total_count-1);\n        }\n\n        const running_covariance operator+ (\n            const running_covariance& item\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT((in_vector_size() == 0 || item.in_vector_size() == 0 || in_vector_size() == item.in_vector_size()),\n                \"\\t running_covariance running_covariance::operator+()\"\n                << \"\\n\\t The two running_covariance objects being added must have compatible parameters\"\n                << \"\\n\\t in_vector_size():            \" << in_vector_size() \n                << \"\\n\\t item.in_vector_size():       \" << item.in_vector_size() \n                << \"\\n\\t this:                        \" << this\n                );\n\n            running_covariance temp(item);\n\n            // make sure we ignore empty matrices\n            if (total_count != 0 && temp.total_count != 0)\n            {\n                temp.total_cov += total_cov;\n                temp.total_sum += total_sum;\n                temp.total_count += total_count;\n            }\n            else if (total_count != 0)\n            {\n                temp.total_cov = total_cov;\n                temp.total_sum = total_sum;\n                temp.total_count = total_count;\n            }\n\n            return temp;\n        }\n\n\n    private:\n\n        general_matrix total_cov;\n        column_matrix total_sum;\n        scalar_type total_count;\n\n        long vect_size;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class running_cross_covariance\n    {\n        /*!\n            INITIAL VALUE\n                - x_vect_size == 0\n                - y_vect_size == 0\n                - total_count == 0\n\n            CONVENTION\n                - x_vect_size == x_vector_size()\n                - y_vect_size == y_vector_size()\n                - total_count == current_n() \n\n                - if (total_count != 0)\n                    - sum_x == the sum of all x vectors given to add()\n                    - sum_y == the sum of all y vectors given to add()\n                    - total_cov == sum of all x*trans(y) given to add()\n        !*/\n\n    public:\n\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n        running_cross_covariance(\n        )\n        {\n            clear();\n        }\n\n        void clear(\n        )\n        {\n            total_count = 0;\n\n            x_vect_size = 0;\n            y_vect_size = 0;\n\n            sum_x.set_size(0);\n            sum_y.set_size(0);\n            total_cov.set_size(0,0);\n        }\n\n        long x_vector_size (\n        ) const\n        {\n            return x_vect_size;\n        }\n\n        long y_vector_size (\n        ) const\n        {\n            return y_vect_size;\n        }\n\n        void set_dimensions (\n            long x_size,\n            long y_size\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( x_size > 0 && y_size > 0,\n                \"\\t void running_cross_covariance::set_dimensions()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t x_size: \" << x_size \n                << \"\\n\\t y_size: \" << y_size \n                << \"\\n\\t this:   \" << this\n                );\n\n            clear();\n            x_vect_size = x_size;\n            y_vect_size = y_size;\n            sum_x.set_size(x_size);\n            sum_y.set_size(y_size);\n            total_cov.set_size(x_size,y_size);\n\n            sum_x = 0;\n            sum_y = 0;\n            total_cov = 0;\n        }\n\n        long current_n (\n        ) const\n        {\n            return static_cast<long>(total_count);\n        }\n\n        template <typename T, typename U>\n        typename enable_if_c<!is_matrix<T>::value && !is_matrix<U>::value>::type add (\n            const T& x,\n            const U& y\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( ((long)max_index_plus_one(x) <= x_vector_size() && x_vector_size() > 0) &&\n                         ((long)max_index_plus_one(y) <= y_vector_size() && y_vector_size() > 0) ,\n                \"\\t void running_cross_covariance::add()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t max_index_plus_one(x): \" << max_index_plus_one(x) \n                << \"\\n\\t max_index_plus_one(y): \" << max_index_plus_one(y) \n                << \"\\n\\t x_vector_size():       \" << x_vector_size() \n                << \"\\n\\t y_vector_size():       \" << y_vector_size() \n                << \"\\n\\t this:                  \" << this\n                );\n\n            for (typename T::const_iterator i = x.begin(); i != x.end(); ++i)\n            {\n                sum_x(i->first) += i->second;\n                for (typename U::const_iterator j = y.begin(); j != y.end(); ++j)\n                {\n                    total_cov(i->first, j->first) += i->second*j->second;\n                }\n            }\n\n            // do sum_y += y\n            for (typename U::const_iterator j = y.begin(); j != y.end(); ++j)\n            {\n                sum_y(j->first) += j->second;\n            }\n\n            ++total_count;\n        }\n\n        template <typename T, typename U>\n        typename enable_if_c<is_matrix<T>::value && !is_matrix<U>::value>::type add (\n            const T& x,\n            const U& y\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( (is_col_vector(x) && x.size() == x_vector_size() && x_vector_size() > 0) &&\n                         ((long)max_index_plus_one(y) <= y_vector_size() && y_vector_size() > 0) ,\n                \"\\t void running_cross_covariance::add()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t is_col_vector(x):      \" << is_col_vector(x) \n                << \"\\n\\t x.size():              \" << x.size() \n                << \"\\n\\t max_index_plus_one(y): \" << max_index_plus_one(y) \n                << \"\\n\\t x_vector_size():       \" << x_vector_size() \n                << \"\\n\\t y_vector_size():       \" << y_vector_size() \n                << \"\\n\\t this:                  \" << this\n                );\n\n            sum_x += x;\n\n            for (long i = 0; i < x.size(); ++i)\n            {\n                for (typename U::const_iterator j = y.begin(); j != y.end(); ++j)\n                {\n                    total_cov(i, j->first) += x(i)*j->second;\n                }\n            }\n\n            // do sum_y += y\n            for (typename U::const_iterator j = y.begin(); j != y.end(); ++j)\n            {\n                sum_y(j->first) += j->second;\n            }\n\n            ++total_count;\n        }\n\n        template <typename T, typename U>\n        typename enable_if_c<!is_matrix<T>::value && is_matrix<U>::value>::type add (\n            const T& x,\n            const U& y\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( ((long)max_index_plus_one(x) <= x_vector_size() && x_vector_size() > 0) &&\n                         (is_col_vector(y) && y.size() == (long)y_vector_size() && y_vector_size() > 0) ,\n                \"\\t void running_cross_covariance::add()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t max_index_plus_one(x): \" << max_index_plus_one(x) \n                << \"\\n\\t is_col_vector(y):      \" << is_col_vector(y) \n                << \"\\n\\t y.size():              \" << y.size() \n                << \"\\n\\t x_vector_size():       \" << x_vector_size() \n                << \"\\n\\t y_vector_size():       \" << y_vector_size() \n                << \"\\n\\t this:                  \" << this\n                );\n\n            for (typename T::const_iterator i = x.begin(); i != x.end(); ++i)\n            {\n                sum_x(i->first) += i->second;\n                for (long j = 0; j < y.size(); ++j)\n                {\n                    total_cov(i->first, j) += i->second*y(j);\n                }\n            }\n\n            sum_y += y;\n\n            ++total_count;\n        }\n\n        template <typename T, typename U>\n        typename enable_if_c<is_matrix<T>::value && is_matrix<U>::value>::type add (\n            const T& x,\n            const U& y\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(x) && (x_vector_size() == 0 || x.size() == x_vector_size()) &&\n                        is_col_vector(y) && (y_vector_size() == 0 || y.size() == y_vector_size()) &&\n                        x.size() != 0 &&\n                        y.size() != 0,\n                \"\\t void running_cross_covariance::add()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n                << \"\\n\\t x_vector_size():  \" << x_vector_size() \n                << \"\\n\\t x.size():         \" << x.size() \n                << \"\\n\\t is_col_vector(y): \" << is_col_vector(y) \n                << \"\\n\\t y_vector_size():  \" << y_vector_size() \n                << \"\\n\\t y.size():         \" << y.size() \n                << \"\\n\\t this:             \" << this\n                );\n\n            x_vect_size = x.size();\n            y_vect_size = y.size();\n            if (total_count == 0)\n            {\n                total_cov = x*trans(y);\n                sum_x = x;\n                sum_y = y;\n            }\n            else\n            {\n                total_cov += x*trans(y);\n                sum_x += x;\n                sum_y += y;\n            }\n            ++total_count;\n        }\n\n        const column_matrix mean_x (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( current_n() != 0,\n                \"\\t running_cross_covariance::mean()\"\n                << \"\\n\\t This object can not execute this function in its current state.\"\n                << \"\\n\\t current_n():      \" << current_n() \n                << \"\\n\\t this:             \" << this\n                );\n\n            return sum_x/total_count;\n        }\n\n        const column_matrix mean_y (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( current_n() != 0,\n                \"\\t running_cross_covariance::mean()\"\n                << \"\\n\\t This object can not execute this function in its current state.\"\n                << \"\\n\\t current_n():      \" << current_n() \n                << \"\\n\\t this:             \" << this\n                );\n\n            return sum_y/total_count;\n        }\n\n        const general_matrix covariance_xy (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( current_n() > 1,\n                \"\\t running_cross_covariance::covariance()\"\n                << \"\\n\\t This object can not execute this function in its current state.\"\n                << \"\\n\\t x_vector_size(): \" << x_vector_size() \n                << \"\\n\\t y_vector_size(): \" << y_vector_size() \n                << \"\\n\\t current_n():     \" << current_n() \n                << \"\\n\\t this:            \" << this\n                );\n\n            return (total_cov - sum_x*trans(sum_y)/total_count)/(total_count-1);\n        }\n\n        const running_cross_covariance operator+ (\n            const running_cross_covariance& item\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT((x_vector_size() == 0 || item.x_vector_size() == 0 || x_vector_size() == item.x_vector_size()) &&\n                        (y_vector_size() == 0 || item.y_vector_size() == 0 || y_vector_size() == item.y_vector_size()),\n                \"\\t running_cross_covariance running_cross_covariance::operator+()\"\n                << \"\\n\\t The two running_cross_covariance objects being added must have compatible parameters\"\n                << \"\\n\\t x_vector_size():            \" << x_vector_size() \n                << \"\\n\\t item.x_vector_size():       \" << item.x_vector_size() \n                << \"\\n\\t y_vector_size():            \" << y_vector_size() \n                << \"\\n\\t item.y_vector_size():       \" << item.y_vector_size() \n                << \"\\n\\t this:                       \" << this\n                );\n\n            running_cross_covariance temp(item);\n\n            // make sure we ignore empty matrices\n            if (total_count != 0 && temp.total_count != 0)\n            {\n                temp.total_cov += total_cov;\n                temp.sum_x += sum_x;\n                temp.sum_y += sum_y;\n                temp.total_count += total_count;\n            }\n            else if (total_count != 0)\n            {\n                temp.total_cov = total_cov;\n                temp.sum_x = sum_x;\n                temp.sum_y = sum_y;\n                temp.total_count = total_count;\n            }\n\n            return temp;\n        }\n\n\n    private:\n\n        general_matrix total_cov;\n        column_matrix sum_x;\n        column_matrix sum_y;\n        scalar_type total_count;\n\n        long x_vect_size;\n        long y_vect_size;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class vector_normalizer\n    {\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef matrix_type result_type;\n\n        template <typename vector_type>\n        void train (\n            const vector_type& samples\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(samples.size() > 0,\n                \"\\tvoid vector_normalizer::train()\"\n                << \"\\n\\tyou have to give a nonempty set of samples to this function\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            m = mean(mat(samples));\n            sd = reciprocal(sqrt(variance(mat(samples))));\n\n            DLIB_ASSERT(is_finite(m), \"Some of the input vectors to vector_normalizer::train() have infinite or NaN values\");\n        }\n\n        long in_vector_size (\n        ) const\n        {\n            return m.nr();\n        }\n\n        long out_vector_size (\n        ) const\n        {\n            return m.nr();\n        }\n\n        const matrix_type& means (\n        ) const\n        {\n            return m;\n        }\n\n        const matrix_type& std_devs (\n        ) const\n        {\n            return sd;\n        }\n\n        const result_type& operator() (\n            const matrix_type& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.nr() == in_vector_size() && x.nc() == 1,\n                \"\\tmatrix vector_normalizer::operator()\"\n                << \"\\n\\t you have given invalid arguments to this function\"\n                << \"\\n\\t x.nr():           \" << x.nr()\n                << \"\\n\\t in_vector_size(): \" << in_vector_size()\n                << \"\\n\\t x.nc():           \" << x.nc()\n                << \"\\n\\t this:             \" << this\n                );\n\n            temp_out = pointwise_multiply(x-m, sd);\n            return temp_out;\n        }\n\n        void swap (\n            vector_normalizer& item\n        )\n        {\n            m.swap(item.m);\n            sd.swap(item.sd);\n            temp_out.swap(item.temp_out);\n        }\n\n        template <typename mt>\n        friend void deserialize (\n            vector_normalizer<mt>& item, \n            std::istream& in\n        ); \n\n        template <typename mt>\n        friend void serialize (\n            const vector_normalizer<mt>& item, \n            std::ostream& out \n        );\n\n    private:\n\n        // ------------------- private data members -------------------\n\n        matrix_type m, sd;\n\n        // This is just a temporary variable that doesn't contribute to the\n        // state of this object.\n        mutable matrix_type temp_out;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    inline void swap (\n        vector_normalizer<matrix_type>& a, \n        vector_normalizer<matrix_type>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    void deserialize (\n        vector_normalizer<matrix_type>& item, \n        std::istream& in\n    )   \n    {\n        deserialize(item.m, in);\n        deserialize(item.sd, in);\n        // Keep deserializing the pca matrix for backwards compatibility.\n        matrix<double> pca;\n        deserialize(pca, in);\n\n        if (pca.size() != 0)\n            throw serialization_error(\"Error deserializing object of type vector_normalizer\\n\"   \n                                        \"It looks like a serialized vector_normalizer_pca was accidentally deserialized into \\n\"\n                                        \"a vector_normalizer object.\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    void serialize (\n        const vector_normalizer<matrix_type>& item, \n        std::ostream& out \n    )\n    {\n        serialize(item.m, out);\n        serialize(item.sd, out);\n        // Keep serializing the pca matrix for backwards compatibility.\n        matrix<double> pca;\n        serialize(pca, out);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class vector_normalizer_pca\n    {\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef matrix<scalar_type,0,1,mem_manager_type> result_type;\n\n        template <typename vector_type>\n        void train (\n            const vector_type& samples,\n            const double eps = 0.99\n        )\n        {\n            // You are getting an error here because you are trying to apply PCA\n            // to a vector of fixed length.  But PCA is going to try and do \n            // dimensionality reduction so you can't use a vector with a fixed dimension.\n            COMPILE_TIME_ASSERT(matrix_type::NR == 0);\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(samples.size() > 0,\n                \"\\tvoid vector_normalizer_pca::train_pca()\"\n                << \"\\n\\tyou have to give a nonempty set of samples to this function\"\n                << \"\\n\\tthis: \" << this\n                );\n            DLIB_ASSERT(0 < eps && eps <= 1,\n                \"\\tvoid vector_normalizer_pca::train_pca()\"\n                << \"\\n\\tyou have to give a nonempty set of samples to this function\"\n                << \"\\n\\tthis: \" << this\n                );\n            train_pca_impl(mat(samples),eps);\n\n            DLIB_ASSERT(is_finite(m), \"Some of the input vectors to vector_normalizer_pca::train() have infinite or NaN values\");\n        }\n\n        long in_vector_size (\n        ) const\n        {\n            return m.nr();\n        }\n\n        long out_vector_size (\n        ) const\n        {\n            return pca.nr();\n        }\n\n        const matrix<scalar_type,0,1,mem_manager_type>& means (\n        ) const\n        {\n            return m;\n        }\n\n        const matrix<scalar_type,0,1,mem_manager_type>& std_devs (\n        ) const\n        {\n            return sd;\n        }\n\n        const matrix<scalar_type,0,0,mem_manager_type>& pca_matrix (\n        ) const\n        {\n            return pca;\n        }\n\n        const result_type& operator() (\n            const matrix_type& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.nr() == in_vector_size() && x.nc() == 1,\n                \"\\tmatrix vector_normalizer_pca::operator()\"\n                << \"\\n\\t you have given invalid arguments to this function\"\n                << \"\\n\\t x.nr():           \" << x.nr()\n                << \"\\n\\t in_vector_size(): \" << in_vector_size()\n                << \"\\n\\t x.nc():           \" << x.nc()\n                << \"\\n\\t this:             \" << this\n                );\n\n            // If we have a pca transform matrix on hand then\n            // also apply that.\n            temp_out = pca*pointwise_multiply(x-m, sd);\n\n            return temp_out;\n        }\n\n        void swap (\n            vector_normalizer_pca& item\n        )\n        {\n            m.swap(item.m);\n            sd.swap(item.sd);\n            pca.swap(item.pca);\n            temp_out.swap(item.temp_out);\n        }\n\n        template <typename T>\n        friend void deserialize (\n            vector_normalizer_pca<T>& item, \n            std::istream& in\n        );\n\n        template <typename T>\n        friend void serialize (\n            const vector_normalizer_pca<T>& item, \n            std::ostream& out \n        );\n\n    private:\n\n        template <typename mat_type>\n        void train_pca_impl (\n            const mat_type& samples,\n            const double eps \n        )\n        {\n            m = mean(samples);\n            sd = reciprocal(sqrt(variance(samples)));\n\n            // fill x with the normalized version of the input samples\n            matrix<typename mat_type::type,0,1,mem_manager_type> x(samples);\n            for (long r = 0; r < x.size(); ++r)\n                x(r) = pointwise_multiply(x(r)-m, sd);\n\n            matrix<scalar_type,0,0,mem_manager_type> temp, eigen;\n            matrix<scalar_type,0,1,mem_manager_type> eigenvalues;\n\n            // Compute the svd of the covariance matrix of the normalized inputs\n            svd(covariance(x), temp, eigen, pca);\n            eigenvalues = diag(eigen);\n\n            rsort_columns(pca, eigenvalues);\n\n            // figure out how many eigenvectors we want in our pca matrix\n            const double thresh = sum(eigenvalues)*eps;\n            long num_vectors = 0;\n            double total = 0;\n            for (long r = 0; r < eigenvalues.size() && total < thresh; ++r)\n            {\n                ++num_vectors;\n                total += eigenvalues(r);\n            }\n\n            // So now we know we want to use num_vectors of the first eigenvectors.  So\n            // pull those out and discard the rest.\n            pca = trans(colm(pca,range(0,num_vectors-1)));\n\n            // Apply the pca transform to the data in x.  Then we will normalize the\n            // pca matrix below.\n            for (long r = 0; r < x.nr(); ++r)\n            {\n                x(r) = pca*x(r);\n            }\n\n            // Here we just scale the output features from the pca transform so \n            // that the variance of each feature is 1.  So this doesn't really change\n            // what the pca is doing, it just makes sure the output features are\n            // normalized.\n            pca = trans(scale_columns(trans(pca), reciprocal(sqrt(variance(x)))));\n        }\n\n\n        // ------------------- private data members -------------------\n\n        matrix<scalar_type,0,1,mem_manager_type> m, sd;\n        matrix<scalar_type,0,0,mem_manager_type> pca;\n\n        // This is just a temporary variable that doesn't contribute to the\n        // state of this object.\n        mutable result_type temp_out;\n    };\n\n    template <\n        typename matrix_type\n        >\n    inline void swap (\n        vector_normalizer_pca<matrix_type>& a, \n        vector_normalizer_pca<matrix_type>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    void deserialize (\n        vector_normalizer_pca<matrix_type>& item, \n        std::istream& in\n    )   \n    {\n        deserialize(item.m, in);\n        deserialize(item.sd, in);\n        deserialize(item.pca, in);\n        if (item.pca.nc() != item.m.nr())\n            throw serialization_error(\"Error deserializing object of type vector_normalizer_pca\\n\"   \n                                        \"It looks like a serialized vector_normalizer was accidentally deserialized into \\n\"\n                                        \"a vector_normalizer_pca object.\");\n    }\n\n    template <\n        typename matrix_type\n        >\n    void serialize (\n        const vector_normalizer_pca<matrix_type>& item, \n        std::ostream& out \n    )\n    {\n        serialize(item.m, out);\n        serialize(item.sd, out);\n        serialize(item.pca, out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STATISTICs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/statistics_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net), Steve Taylor\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STATISTICs_ABSTRACT_\n#ifdef DLIB_STATISTICs_ABSTRACT_\n\n#include <limits>\n#include <cmath>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../svm/sparse_vector_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double mean_sign_agreement (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    );\n    /*!\n        requires\n            - a.size() == b.size()\n        ensures\n            - returns the number of times a[i] has the same sign as b[i] divided by\n              a.size().  So we return the probability that elements of a and b have\n              the same sign.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double correlation (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    );\n    /*!\n        requires\n            - a.size() == b.size()\n            - a.size() > 1\n        ensures\n            - returns the correlation coefficient between all the elements of a and b.\n              (i.e. how correlated is a(i) with b(i))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double covariance (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    );\n    /*!\n        requires\n            - a.size() == b.size()\n            - a.size() > 1\n        ensures\n            - returns the covariance between all the elements of a and b.\n              (i.e. how does a(i) vary with b(i))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double r_squared (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    );\n    /*!\n        requires\n            - a.size() == b.size()\n            - a.size() > 1\n        ensures\n            - returns the R^2 coefficient of determination between all the elements of a and b.\n              This value is just the square of correlation(a,b).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T, \n        typename alloc\n        >\n    double mean_squared_error (\n        const std::vector<T,alloc>& a,\n        const std::vector<T,alloc>& b\n    );\n    /*!\n        requires\n            - a.size() == b.size()\n        ensures\n            - returns the mean squared error between all the elements of a and b.\n              (i.e. mean(squared(mat(a)-mat(b))))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class running_stats\n    {\n        /*!\n            REQUIREMENTS ON T\n                - T must be a float, double, or long double type\n\n            INITIAL VALUE\n                - mean() == 0\n                - current_n() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents something that can compute the running mean, \n                variance, skewness, and excess kurtosis of a stream of real numbers.  \n        !*/\n    public:\n\n        running_stats(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - this object has its initial value\n                - clears all memory of any previous data points\n        !*/\n\n        T current_n (\n        ) const;\n        /*!\n            ensures\n                - returns the number of points given to this object so far. \n        !*/\n\n        void add (\n            const T& val\n        );\n        /*!\n            ensures\n                - updates the mean, variance, skewness, and kurtosis stored in this object\n                  so that the new value is factored into them.\n                - #mean() == mean()*current_n()/(current_n()+1) + val/(current_n()+1).\n                  (i.e. the updated mean value that takes the new value into account)\n                - #variance() == the updated variance that takes this new value into account.\n                - #skewness() == the updated skewness that takes this new value into account.\n                - #ex_kurtosis() == the updated kurtosis that takes this new value into account.\n                - #current_n() == current_n() + 1\n        !*/\n\n        T mean (\n        ) const;\n        /*!\n            ensures\n                - returns the mean of all the values presented to this object \n                  so far.\n        !*/\n\n        T variance (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the unbiased sample variance of all the values presented to this\n                  object so far.\n        !*/\n\n        T stddev (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the unbiased sampled standard deviation of all the values\n                  presented to this object so far.\n        !*/\n\n        T skewness (\n        ) const;\n        /*!\n            requires\n                - current_n() > 2\n            ensures\n                - returns the unbiased sample skewness of all the values presented \n                  to this object so far.\n        !*/\n\n        T ex_kurtosis(\n        ) const;\n        /*!\n            requires\n                - current_n() > 3\n            ensures\n                - returns the unbiased sample kurtosis of all the values presented \n                  to this object so far.\n        !*/\n\n        T max (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the largest value presented to this object so far.\n        !*/\n\n        T min (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the smallest value presented to this object so far.\n        !*/\n\n        T scale (\n            const T& val\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - return (val-mean())/stddev();\n        !*/\n\n        running_stats operator+ (\n            const running_stats& rhs\n        ) const;\n        /*!\n            ensures\n                - returns a new running_stats object that represents the combination of all\n                  the values given to *this and rhs.  That is, this function returns a\n                  running_stats object, R, that is equivalent to what you would obtain if\n                  all calls to this->add() and rhs.add() had instead been done to R.\n        !*/\n    };\n\n    template <typename T>\n    void serialize (\n        const running_stats<T>& item, \n        std::ostream& out \n    );\n    /*!\n        provides serialization support \n    !*/\n\n    template <typename T>\n    void deserialize (\n        running_stats<T>& item, \n        std::istream& in\n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class running_scalar_covariance\n    {\n        /*!\n            REQUIREMENTS ON T\n                - T must be a float, double, or long double type\n\n            INITIAL VALUE\n                - mean_x() == 0\n                - mean_y() == 0\n                - current_n() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents something that can compute the running covariance \n                of a stream of real number pairs.\n        !*/\n\n    public:\n\n        running_scalar_covariance(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - this object has its initial value\n                - clears all memory of any previous data points\n        !*/\n\n        void add (\n            const T& x,\n            const T& y\n        );\n        /*!\n            ensures\n                - updates the statistics stored in this object so that\n                  the new pair (x,y) is factored into them.\n                - #current_n() == current_n() + 1\n        !*/\n\n        T current_n (\n        ) const;\n        /*!\n            ensures\n                - returns the number of points given to this object so far. \n        !*/\n\n        T mean_x (\n        ) const;\n        /*!\n            ensures\n                - returns the mean value of all x samples presented to this object\n                  via add().\n        !*/\n\n        T mean_y (\n        ) const;\n        /*!\n            ensures\n                - returns the mean value of all y samples presented to this object\n                  via add().\n        !*/\n\n        T covariance (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the covariance between all the x and y samples presented\n                  to this object via add()\n        !*/\n\n        T correlation (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the correlation coefficient between all the x and y samples \n                  presented to this object via add()\n        !*/\n\n        T variance_x (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the unbiased sample variance value of all x samples presented \n                  to this object via add().\n        !*/\n\n        T variance_y (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the unbiased sample variance value of all y samples presented \n                  to this object via add().\n        !*/\n\n        T stddev_x (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the unbiased sample standard deviation of all x samples\n                  presented to this object via add().\n        !*/\n\n        T stddev_y (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the unbiased sample standard deviation of all y samples\n                  presented to this object via add().\n        !*/\n\n        running_scalar_covariance operator+ (\n            const running_covariance& rhs\n        ) const;\n        /*!\n            ensures\n                - returns a new running_scalar_covariance object that represents the\n                  combination of all the values given to *this and rhs.  That is, this\n                  function returns a running_scalar_covariance object, R, that is\n                  equivalent to what you would obtain if all calls to this->add() and\n                  rhs.add() had instead been done to R.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class running_covariance\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                Must be some type of dlib::matrix.\n\n            INITIAL VALUE\n                - in_vector_size() == 0\n                - current_n() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple tool for computing the mean and\n                covariance of a sequence of vectors.  \n        !*/\n    public:\n\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n        running_covariance(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - this object has its initial value\n                - clears all memory of any previous data points\n        !*/\n\n        long current_n (\n        ) const;\n        /*!\n            ensures\n                - returns the number of samples that have been presented to this object\n        !*/\n\n        long in_vector_size (\n        ) const;\n        /*!\n            ensures\n                - if (this object has been presented with any input vectors or\n                  set_dimension() has been called) then\n                    - returns the dimension of the column vectors used with this object\n                - else\n                    - returns 0\n        !*/\n\n        void set_dimension (\n            long size\n        );\n        /*!\n            requires\n                - size > 0\n            ensures\n                - #in_vector_size() == size\n                - #current_n() == 0\n        !*/\n\n        template <typename T>\n        void add (\n            const T& val\n        );\n        /*!\n            requires\n                - val must represent a column vector.  It can either be a dlib::matrix\n                  object or some kind of unsorted sparse vector type.  See the top of\n                  dlib/svm/sparse_vector_abstract.h for a definition of unsorted sparse vector.\n                - val must have a number of dimensions which is compatible with the current\n                  setting of in_vector_size().  In particular, this means that the\n                  following must hold:\n                    - if (val is a dlib::matrix) then \n                        - in_vector_size() == 0 || val.size() == val_vector_size()\n                    - else\n                        - max_index_plus_one(val) <= in_vector_size()\n                        - in_vector_size() > 0 \n                          (i.e. you must call set_dimension() prior to calling add() if\n                          you want to use sparse vectors.)\n            ensures\n                - updates the mean and covariance stored in this object so that\n                  the new value is factored into them.\n                - if (val is a dlib::matrix) then\n                    - #in_vector_size() == val.size()\n        !*/\n\n        const column_matrix mean (\n        ) const;\n        /*!\n            requires\n                - in_vector_size() != 0 \n            ensures\n                - returns the mean of all the vectors presented to this object \n                  so far.\n        !*/\n\n        const general_matrix covariance (\n        ) const;\n        /*!\n            requires\n                - in_vector_size() != 0 \n                - current_n() > 1\n            ensures\n                - returns the unbiased sample covariance matrix for all the vectors \n                  presented to this object so far.\n        !*/\n\n        const running_covariance operator+ (\n            const running_covariance& item\n        ) const;\n        /*!\n            requires\n                - in_vector_size() == 0 || item.in_vector_size() == 0 || in_vector_size() == item.in_vector_size()\n                  (i.e. the in_vector_size() of *this and item must match or one must be zero)\n            ensures\n                - returns a new running_covariance object that represents the combination of all \n                  the vectors given to *this and item.  That is, this function returns a\n                  running_covariance object, R, that is equivalent to what you would obtain if all\n                  calls to this->add() and item.add() had instead been done to R.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class running_cross_covariance\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                Must be some type of dlib::matrix.\n\n            INITIAL VALUE\n                - x_vector_size() == 0\n                - y_vector_size() == 0\n                - current_n() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple tool for computing the mean and cross-covariance\n                matrices of a sequence of pairs of vectors.  \n        !*/\n\n    public:\n\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef typename matrix_type::layout_type layout_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix;\n        typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix;\n\n        running_cross_covariance(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - This object has its initial value.\n                - Clears all memory of any previous data points.\n        !*/\n\n        long x_vector_size (\n        ) const;\n        /*!\n            ensures\n                - if (this object has been presented with any input vectors or\n                  set_dimensions() has been called) then\n                    - returns the dimension of the x vectors given to this object via add().\n                - else\n                    - returns 0\n        !*/\n\n        long y_vector_size (\n        ) const;\n        /*!\n            ensures\n                - if (this object has been presented with any input vectors or\n                  set_dimensions() has been called) then\n                    - returns the dimension of the y vectors given to this object via add().\n                - else\n                    - returns 0\n        !*/\n\n        void set_dimensions (\n            long x_size,\n            long y_size\n        );\n        /*!\n            requires\n                - x_size > 0\n                - y_size > 0\n            ensures\n                - #x_vector_size() == x_size\n                - #y_vector_size() == y_size\n                - #current_n() == 0\n        !*/\n\n        long current_n (\n        ) const;\n        /*!\n            ensures\n                - returns the number of samples that have been presented to this object.\n        !*/\n\n        template <typename T, typename U>\n        void add (\n            const T& x,\n            const U& y\n        );\n        /*!\n            requires\n                - x and y must represent column vectors.  They can either be dlib::matrix\n                  objects or some kind of unsorted sparse vector type.  See the top of\n                  dlib/svm/sparse_vector_abstract.h for a definition of unsorted sparse vector.\n                - x and y must have a number of dimensions which is compatible with the\n                  current setting of x_vector_size() and y_vector_size().  In particular,\n                  this means that the following must hold:\n                    - if (x or y is a sparse vector type) then\n                        - x_vector_size() > 0 && y_vector_size() > 0\n                          (i.e. you must call set_dimensions() prior to calling add() if\n                          you want to use sparse vectors.)\n                    - if (x is a dlib::matrix) then \n                        - x_vector_size() == 0 || x.size() == x_vector_size()\n                    - else\n                        - max_index_plus_one(x) <= x_vector_size()\n                    - if (y is a dlib::matrix) then \n                        - y_vector_size() == 0 || y.size() == y_vector_size()\n                    - else\n                        - max_index_plus_one(y) <= y_vector_size()\n            ensures\n                - updates the mean and cross-covariance matrices stored in this object so\n                  that the new (x,y) vector pair is factored into them.\n                - if (x is a dlib::matrix) then\n                    - #x_vector_size() == x.size()\n                - if (y is a dlib::matrix) then\n                    - #y_vector_size() == y.size()\n        !*/\n\n        const column_matrix mean_x (\n        ) const;\n        /*!\n            requires\n                - current_n() != 0 \n            ensures\n                - returns the mean of all the x vectors presented to this object so far.\n                - The returned vector will have x_vector_size() dimensions.\n        !*/\n\n        const column_matrix mean_y (\n        ) const;\n        /*!\n            requires\n                - current_n() != 0 \n            ensures\n                - returns the mean of all the y vectors presented to this object so far.\n                - The returned vector will have y_vector_size() dimensions.\n        !*/\n\n        const general_matrix covariance_xy (\n        ) const;\n        /*!\n            requires\n                - current_n() > 1\n            ensures\n                - returns the unbiased sample cross-covariance matrix for all the vector\n                  pairs presented to this object so far.  In particular, returns a matrix\n                  M such that:\n                    - M.nr() == x_vector_size()\n                    - M.nc() == y_vector_size()\n                    - M == the cross-covariance matrix of the data given to add().\n        !*/\n\n        const running_cross_covariance operator+ (\n            const running_cross_covariance& item\n        ) const;\n        /*!\n            requires\n                - x_vector_size() == 0 || item.x_vector_size() == 0 || x_vector_size() == item.x_vector_size()\n                  (i.e. the x_vector_size() of *this and item must match or one must be zero)\n                - y_vector_size() == 0 || item.y_vector_size() == 0 || y_vector_size() == item.y_vector_size()\n                  (i.e. the y_vector_size() of *this and item must match or one must be zero)\n            ensures\n                - returns a new running_cross_covariance object that represents the\n                  combination of all the vectors given to *this and item.  That is, this\n                  function returns a running_cross_covariance object, R, that is equivalent\n                  to what you would obtain if all calls to this->add() and item.add() had\n                  instead been done to R.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class vector_normalizer\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                - must be a dlib::matrix object capable of representing column \n                  vectors\n\n            INITIAL VALUE\n                - in_vector_size() == 0\n                - out_vector_size() == 0\n                - means().size() == 0\n                - std_devs().size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents something that can learn to normalize a set \n                of column vectors.  In particular, normalized column vectors should \n                have zero mean and a variance of one.  \n\n                Also, if desired, this object can use principal component \n                analysis for the purposes of reducing the number of elements in a \n                vector.  \n\n            THREAD SAFETY\n                Note that this object contains a cached matrix object it uses \n                to store intermediate results for normalization.  This avoids\n                needing to reallocate it every time this object performs normalization\n                but also makes it non-thread safe.  So make sure you don't share\n                instances of this object between threads. \n        !*/\n\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef matrix_type result_type;\n\n        template <typename vector_type>\n        void train (\n            const vector_type& samples\n        );\n        /*!\n            requires\n                - samples.size() > 0\n                - samples == a column matrix or something convertible to a column \n                  matrix via mat().  Also, x should contain \n                  matrix_type objects that represent nonempty column vectors.\n                - samples does not contain any infinite or NaN values\n            ensures\n                - #in_vector_size() == samples(0).nr()\n                - #out_vector_size() == samples(0).nr()\n                - This object has learned how to normalize vectors that look like\n                  vectors in the given set of samples.  \n                - #means() == mean(samples)\n                - #std_devs() == reciprocal(sqrt(variance(samples)));\n        !*/\n\n        long in_vector_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows that input vectors are\n                  required to contain if they are to be normalized by\n                  this object.\n        !*/\n\n        long out_vector_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in the normalized vectors\n                  that come out of this object.\n        !*/\n\n        const matrix_type& means (\n        ) const;\n        /*!\n            ensures               \n                - returns a matrix M such that:\n                    - M.nc() == 1\n                    - M.nr() == in_vector_size()\n                    - M(i) == the mean of the ith input feature shown to train()\n        !*/\n\n        const matrix_type& std_devs (\n        ) const;\n        /*!\n            ensures               \n                - returns a matrix SD such that:\n                    - SD.nc() == 1\n                    - SD.nr() == in_vector_size()\n                    - SD(i) == the reciprocal of the standard deviation of the ith \n                      input feature shown to train() \n        !*/\n \n        const result_type& operator() (\n            const matrix_type& x\n        ) const;\n        /*!\n            requires\n                - x.nr() == in_vector_size()\n                - x.nc() == 1\n            ensures\n                - returns a normalized version of x, call it Z, that has the \n                  following properties: \n                    - Z.nr() == out_vector_size()\n                    - Z.nc() == 1\n                    - the mean of each element of Z is 0 \n                    - the variance of each element of Z is 1\n                    - Z == pointwise_multiply(x-means(), std_devs());\n        !*/\n\n        void swap (\n            vector_normalizer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n    };\n\n    template <\n        typename matrix_type\n        >\n    inline void swap (\n        vector_normalizer<matrix_type>& a, \n        vector_normalizer<matrix_type>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename matrix_type,\n        >\n    void deserialize (\n        vector_normalizer<matrix_type>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    template <\n        typename matrix_type,\n        >\n    void serialize (\n        const vector_normalizer<matrix_type>& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class vector_normalizer_pca\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                - must be a dlib::matrix object capable of representing column \n                  vectors\n\n            INITIAL VALUE\n                - in_vector_size() == 0\n                - out_vector_size() == 0\n                - means().size() == 0\n                - std_devs().size() == 0\n                - pca_matrix().size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents something that can learn to normalize a set \n                of column vectors.  In particular, normalized column vectors should \n                have zero mean and a variance of one.  \n\n                Also, this object uses principal component analysis for the purposes \n                of reducing the number of elements in a vector.  \n\n            THREAD SAFETY\n                Note that this object contains a cached matrix object it uses \n                to store intermediate results for normalization.  This avoids\n                needing to reallocate it every time this object performs normalization\n                but also makes it non-thread safe.  So make sure you don't share\n                instances of this object between threads. \n        !*/\n\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef matrix<scalar_type,0,1,mem_manager_type> result_type;\n\n        template <typename vector_type>\n        void train (\n            const vector_type& samples,\n            const double eps = 0.99\n        );\n        /*!\n            requires\n                - 0 < eps <= 1\n                - samples.size() > 0\n                - samples == a column matrix or something convertible to a column \n                  matrix via mat().  Also, x should contain \n                  matrix_type objects that represent nonempty column vectors.\n                - samples does not contain any infinite or NaN values\n            ensures\n                - This object has learned how to normalize vectors that look like\n                  vectors in the given set of samples.  \n                - Principal component analysis is performed to find a transform \n                  that might reduce the number of output features. \n                - #in_vector_size() == samples(0).nr()\n                - 0 < #out_vector_size() <= samples(0).nr()\n                - eps is a number that controls how \"lossy\" the pca transform will be.\n                  Large values of eps result in #out_vector_size() being larger and\n                  smaller values of eps result in #out_vector_size() being smaller. \n                - #means() == mean(samples)\n                - #std_devs() == reciprocal(sqrt(variance(samples)));\n                - #pca_matrix() == the PCA transform matrix that is out_vector_size()\n                  rows by in_vector_size() columns.\n        !*/\n\n        long in_vector_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows that input vectors are\n                  required to contain if they are to be normalized by\n                  this object.\n        !*/\n\n        long out_vector_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in the normalized vectors\n                  that come out of this object.\n        !*/\n\n        const matrix<scalar_type,0,1,mem_manager_type>& means (\n        ) const;\n        /*!\n            ensures               \n                - returns a matrix M such that:\n                    - M.nc() == 1\n                    - M.nr() == in_vector_size()\n                    - M(i) == the mean of the ith input feature shown to train()\n        !*/\n\n        const matrix<scalar_type,0,1,mem_manager_type>& std_devs (\n        ) const;\n        /*!\n            ensures               \n                - returns a matrix SD such that:\n                    - SD.nc() == 1\n                    - SD.nr() == in_vector_size()\n                    - SD(i) == the reciprocal of the standard deviation of the ith \n                      input feature shown to train() \n        !*/\n \n        const matrix<scalar_type,0,0,mem_manager_type>& pca_matrix (\n        ) const;\n        /*!\n            ensures\n                - returns a matrix PCA such that:\n                    - PCA.nr() == out_vector_size()\n                    - PCA.nc() == in_vector_size()\n                    - PCA == the principal component analysis transformation \n                      matrix \n        !*/\n\n        const result_type& operator() (\n            const matrix_type& x\n        ) const;\n        /*!\n            requires\n                - x.nr() == in_vector_size()\n                - x.nc() == 1\n            ensures\n                - returns a normalized version of x, call it Z, that has the \n                  following properties: \n                    - Z.nr() == out_vector_size()\n                    - Z.nc() == 1\n                    - the mean of each element of Z is 0 \n                    - the variance of each element of Z is 1\n                    - Z == pca_matrix()*pointwise_multiply(x-means(), std_devs());\n        !*/\n\n        void swap (\n            vector_normalizer_pca& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n    };\n\n    template <\n        typename matrix_type\n        >\n    inline void swap (\n        vector_normalizer_pca<matrix_type>& a, \n        vector_normalizer_pca<matrix_type>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename matrix_type,\n        >\n    void deserialize (\n        vector_normalizer_pca<matrix_type>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n    template <\n        typename matrix_type,\n        >\n    void serialize (\n        const vector_normalizer_pca<matrix_type>& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STATISTICs_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/vector_normalizer_frobmetric.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_VECTOR_NORMALIZER_FRoBMETRIC_Hh_\n#define DLIB_VECTOR_NORMALIZER_FRoBMETRIC_Hh_\n\n#include \"vector_normalizer_frobmetric_abstract.h\"\n#include \"../matrix.h\"\n#include \"../optimization.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    struct frobmetric_training_sample \n    {\n        matrix_type anchor_vect;\n        std::vector<matrix_type> near_vects;\n        std::vector<matrix_type> far_vects;\n\n        unsigned long num_triples (\n        ) const { return near_vects.size() * far_vects.size(); }\n\n        void clear()\n        {\n            near_vects.clear();\n            far_vects.clear();\n        }\n    };\n\n    template <\n        typename matrix_type\n        >\n    void serialize(const frobmetric_training_sample<matrix_type>& item, std::ostream& out)\n    {\n        int version = 1;\n        serialize(version, out);\n        serialize(item.anchor_vect, out);\n        serialize(item.near_vects, out);\n        serialize(item.far_vects, out);\n    }\n\n    template <\n        typename matrix_type\n        >\n    void deserialize(frobmetric_training_sample<matrix_type>& item, std::istream& in)\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 1)\n            throw serialization_error(\"Unexpected version found while deserializing dlib::frobmetric_training_sample.\");\n        deserialize(item.anchor_vect, in);\n        deserialize(item.near_vects, in);\n        deserialize(item.far_vects, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class vector_normalizer_frobmetric\n    {\n\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef matrix_type result_type;\n\n    private:\n        struct compact_frobmetric_training_sample \n        {\n            std::vector<matrix_type> near_vects;\n            std::vector<matrix_type> far_vects;\n        };\n\n        struct objective\n        {\n            objective (\n                const std::vector<compact_frobmetric_training_sample>& samples_,\n                matrix<double,0,0,mem_manager_type>& Aminus_\n            ) : samples(samples_), Aminus(Aminus_) {}\n            \n            double operator()(const matrix<double,0,1,mem_manager_type>& u) const\n            {\n                long idx = 0;\n                const long dims = samples[0].far_vects[0].size();\n                // Here we compute \\hat A from the paper, which we refer to as just A in\n                // the code.  \n                matrix<double,0,0,mem_manager_type> A(dims,dims);\n                A = 0;\n                std::vector<double> ufar, unear;\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    ufar.assign(samples[i].far_vects.size(),0);\n                    unear.assign(samples[i].near_vects.size(),0);\n                    for (unsigned long j = 0; j < unear.size(); ++j)\n                    {\n                        for (unsigned long k = 0; k < ufar.size(); ++k)\n                        {\n                            const double val = u(idx++);\n                            ufar[k] -= val;\n                            unear[j] += val;\n                        }\n                    }\n                    for (unsigned long j = 0; j < unear.size(); ++j)\n                        A += unear[j]*samples[i].near_vects[j]*trans(samples[i].near_vects[j]);\n                    for (unsigned long j = 0; j < ufar.size(); ++j)\n                        A += ufar[j]*samples[i].far_vects[j]*trans(samples[i].far_vects[j]);\n                }\n\n                eigenvalue_decomposition<matrix<double,0,0,mem_manager_type> > ed(make_symmetric(A));\n                Aminus = ed.get_pseudo_v()*diagm(upperbound(ed.get_real_eigenvalues(),0))*trans(ed.get_pseudo_v());\n                // Do this to avoid numeric instability later on since the above\n                // computation can make Aminus slightly non-symmetric.\n                Aminus = make_symmetric(Aminus);\n\n                return sum(u) - 0.5*sum(squared(Aminus));\n            }\n\n        private:\n            const std::vector<compact_frobmetric_training_sample>& samples;\n            matrix<double,0,0,mem_manager_type>& Aminus;\n        };\n\n        struct derivative\n        {\n            derivative (\n                unsigned long num_triples_,\n                const std::vector<compact_frobmetric_training_sample>& samples_,\n                matrix<double,0,0,mem_manager_type>& Aminus_\n            ) : num_triples(num_triples_), samples(samples_), Aminus(Aminus_) {}\n            \n            matrix<double,0,1,mem_manager_type> operator()(const matrix<double,0,1,mem_manager_type>& ) const\n            {\n                // Note that Aminus is a function of u (the argument to this function), but\n                // since Aminus will have been computed already by the most recent call to\n                // the objective function we don't need to do anything with u.  We can just\n                // use Aminus right away.\n                matrix<double,0,1,mem_manager_type> grad(num_triples);\n                \n                long idx = 0;\n                std::vector<double> ufar, unear;\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    ufar.resize(samples[i].far_vects.size());\n                    unear.resize(samples[i].near_vects.size());\n\n                    for (unsigned long j = 0; j < unear.size(); ++j)\n                        unear[j] = sum(pointwise_multiply(Aminus, samples[i].near_vects[j]*trans(samples[i].near_vects[j])));\n                    for (unsigned long j = 0; j < ufar.size(); ++j)\n                        ufar[j] = sum(pointwise_multiply(Aminus, samples[i].far_vects[j]*trans(samples[i].far_vects[j])));\n\n                    for (unsigned long j = 0; j < samples[i].near_vects.size(); ++j)\n                    {\n                        for (unsigned long k = 0; k < samples[i].far_vects.size(); ++k)\n                        {\n                            grad(idx++) = 1 + ufar[k]-unear[j];\n                        }\n                    }\n                }\n\n                return grad;\n            }\n\n        private:\n            const unsigned long num_triples;\n            const std::vector<compact_frobmetric_training_sample>& samples;\n            matrix<double,0,0,mem_manager_type>& Aminus;\n        };\n\n\n        class custom_stop_strategy\n        {\n        public:\n            custom_stop_strategy(\n                double C_,\n                double eps_,\n                bool be_verbose_,\n                unsigned long max_iter_\n            ) \n            {\n                _c = C_;\n\n                _cur_iter = 0;\n                _gradient_thresh = eps_;\n                _max_iter = max_iter_;\n                _verbose = be_verbose_;\n            }\n\n            template <typename T>\n            bool should_continue_search (\n                const T& u,\n                const double ,\n                const T& grad\n            ) \n            {\n                ++_cur_iter;\n\n                double max_gradient = 0;\n                for (long i = 0; i < grad.size(); ++i)\n                {\n                    const bool at_lower_bound = (0 >= u(i) && grad(i) > 0);\n                    const bool at_upper_bound = (_c/grad.size() <= u(i) && grad(i) < 0);\n                    if (!at_lower_bound && !at_upper_bound)\n                        max_gradient = std::max(std::abs(grad(i)), max_gradient);\n                }\n\n                if (_verbose)\n                {\n                    std::cout << \"iteration: \" << _cur_iter << \"   max_gradient: \"<< max_gradient << std::endl;\n                }\n\n                // Only stop when the largest non-bound-constrained element of the gradient\n                // is lower than the threshold.\n                if (max_gradient < _gradient_thresh)\n                    return false;\n\n                // Check if we have hit the max allowable number of iterations.  \n                if (_cur_iter > _max_iter)\n                {\n                    return false;\n                }\n\n                return true;\n            }\n\n        private:\n            bool _verbose;\n\n            unsigned long _max_iter;\n            unsigned long _cur_iter;\n            double _c;\n            double _gradient_thresh;\n        };\n\n    public:\n        vector_normalizer_frobmetric (\n        )\n        {\n            verbose = false;\n            eps = 0.1;\n            C = 1;\n            max_iter = 5000;\n        }\n\n        void be_verbose(\n        )\n        {\n            verbose = true;\n        }\n\n        void set_epsilon (\n            double eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void vector_normalizer_frobmetric::set_epsilon(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps: \" << eps_ \n                );\n            eps = eps_;\n        }\n\n        double get_epsilon (\n        ) const \n        {\n            return eps;\n        }\n\n        void set_c (\n            double C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void vector_normalizer_frobmetric::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        void set_max_iterations (\n            unsigned long max_iterations\n        )\n        {\n            max_iter = max_iterations;\n        }\n\n        unsigned long get_max_iterations (\n        ) const\n        {\n            return max_iter;\n        }\n\n        double get_c (\n        ) const\n        {\n            return C;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n       \n        void train (\n            const std::vector<frobmetric_training_sample<matrix_type> >& samples\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(samples.size() > 0,\n                \"\\tvoid vector_normalizer_frobmetric::train()\"\n                << \"\\n\\t you have to give a nonempty set of samples to this function\"\n                );\n#ifdef ENABLE_ASSERTS\n            {\n                const long dims = samples[0].anchor_vect.size();\n                DLIB_ASSERT(dims != 0,\n                    \"\\tvoid vector_normalizer_frobmetric::train()\"\n                    << \"\\n\\t The dimension of the input vectors can't be zero.\"\n                    );\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    DLIB_ASSERT(is_col_vector(samples[i].anchor_vect), \n                        \"\\tvoid vector_normalizer_frobmetric::train()\"\n                        << \"\\n\\t Invalid inputs were given to this function.\"\n                        << \"\\n\\t i: \" << i\n                        );\n                    DLIB_ASSERT(samples[i].anchor_vect.size() == dims, \n                        \"\\tvoid vector_normalizer_frobmetric::train()\"\n                        << \"\\n\\t Invalid inputs were given to this function.\"\n                        << \"\\n\\t i:    \" << i\n                        << \"\\n\\t dims: \" << dims\n                        << \"\\n\\t samples[i].anchor_vect.size(): \" << samples[i].anchor_vect.size()\n                        );\n\n                    DLIB_ASSERT(samples[i].num_triples() != 0,\n                        \"\\tvoid vector_normalizer_frobmetric::train()\"\n                        << \"\\n\\t It is illegal for a training sample to have no data in it\"\n                        << \"\\n\\t i:    \" << i\n                    );\n                    for (unsigned long j = 0; j < samples[i].near_vects.size(); ++j)\n                    {\n                        DLIB_ASSERT(is_col_vector(samples[i].near_vects[j]), \n                            \"\\tvoid vector_normalizer_frobmetric::train()\"\n                            << \"\\n\\t Invalid inputs were given to this function.\"\n                            << \"\\n\\t i: \" << i\n                            << \"\\n\\t j: \" << j\n                            );\n                        DLIB_ASSERT(samples[i].near_vects[j].size() == dims, \n                            \"\\tvoid vector_normalizer_frobmetric::train()\"\n                            << \"\\n\\t Invalid inputs were given to this function.\"\n                            << \"\\n\\t i:    \" << i\n                            << \"\\n\\t j:    \" << j\n                            << \"\\n\\t dims: \" << dims\n                            << \"\\n\\t samples[i].near_vects[j].size(): \" << samples[i].near_vects[j].size()\n                            );\n                    }\n                    for (unsigned long j = 0; j < samples[i].far_vects.size(); ++j)\n                    {\n                        DLIB_ASSERT(is_col_vector(samples[i].far_vects[j]), \n                            \"\\tvoid vector_normalizer_frobmetric::train()\"\n                            << \"\\n\\t Invalid inputs were given to this function.\"\n                            << \"\\n\\t i: \" << i\n                            << \"\\n\\t j: \" << j\n                            );\n                        DLIB_ASSERT(samples[i].far_vects[j].size() == dims, \n                            \"\\tvoid vector_normalizer_frobmetric::train()\"\n                            << \"\\n\\t Invalid inputs were given to this function.\"\n                            << \"\\n\\t i:    \" << i\n                            << \"\\n\\t j:    \" << j\n                            << \"\\n\\t dims: \" << dims\n                            << \"\\n\\t samples[i].far_vects[j].size(): \" << samples[i].far_vects[j].size()\n                            );\n                    }\n                }\n            }\n#endif // end ENABLE_ASSERTS\n\n\n            // compute the mean sample\n            m = 0;\n            for (unsigned long i = 0; i < samples.size(); ++i)\n                m += samples[i].anchor_vect;\n            m /= samples.size();\n\n            DLIB_ASSERT(is_finite(m), \"Some of the input vectors to vector_normalizer_frobmetric::train() have infinite or NaN values\");\n\n            // Now we need to find tform.  So we setup the optimization problem and run it\n            // over the next few lines of code.\n            unsigned long num_triples = 0;\n            for (unsigned long i = 0; i < samples.size(); ++i)\n                num_triples += samples[i].near_vects.size()*samples[i].far_vects.size();\n\n            matrix<double,0,1,mem_manager_type> u(num_triples);\n            u = 0;\n\n\n            // precompute all the anchor_vect to far_vects/near_vects pairs\n            std::vector<compact_frobmetric_training_sample> data(samples.size());\n            for (unsigned long i = 0; i < data.size(); ++i)\n            {\n                data[i].far_vects.reserve(samples[i].far_vects.size());\n                data[i].near_vects.reserve(samples[i].near_vects.size());\n                for (unsigned long j = 0; j < samples[i].far_vects.size(); ++j)\n                    data[i].far_vects.push_back(samples[i].anchor_vect - samples[i].far_vects[j]);\n                for (unsigned long j = 0; j < samples[i].near_vects.size(); ++j)\n                    data[i].near_vects.push_back(samples[i].anchor_vect - samples[i].near_vects[j]);\n            }\n\n            // Now run the main part of the algorithm\n            matrix<double,0,0,mem_manager_type> Aminus;\n            find_max_box_constrained(lbfgs_search_strategy(10),\n                                     custom_stop_strategy(C, eps, verbose, max_iter),\n                                     objective(data, Aminus),\n                                     derivative(num_triples, data, Aminus),\n                                     u, 0, C/num_triples);\n\n\n            // What we need is the optimal Aminus which is a function of u.  So we already\n            // have what we need and just need to put it into tform.\n            eigenvalue_decomposition<matrix<double,0,0,mem_manager_type> > ed(make_symmetric(-Aminus));\n            matrix<double,0,1,mem_manager_type> eigs = ed.get_real_eigenvalues();\n            // But first, discard the components that are zero to within the machine epsilon.\n            const double tol = max(eigs)*std::numeric_limits<double>::epsilon();\n            for (long i = 0; i < eigs.size(); ++i)\n            {\n                if (eigs(i) < tol)\n                    eigs(i) = 0;\n            }\n            tform = matrix_cast<scalar_type>(diagm(sqrt(eigs))*trans(ed.get_pseudo_v()));\n\n            // Pre-apply the transform to m so we don't have to do it inside operator()\n            // every time it's called.\n            m = tform*m;\n        }\n\n        long in_vector_size (\n        ) const\n        {\n            return m.nr();\n        }\n\n        long out_vector_size (\n        ) const\n        {\n            return m.nr();\n        }\n\n        const matrix<scalar_type,0,1,mem_manager_type>& transformed_means (\n        ) const\n        {\n            return m;\n        }\n\n        const matrix<scalar_type,0,0,mem_manager_type>& transform (\n        ) const\n        {\n            return tform;\n        }\n\n        const result_type& operator() (\n            const matrix_type& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(in_vector_size() != 0 && in_vector_size() == x.size() && \n                is_col_vector(x) == true,\n                \"\\tmatrix vector_normalizer_frobmetric::operator()\"\n                << \"\\n\\t you have given invalid arguments to this function\"\n                << \"\\n\\t in_vector_size(): \" << in_vector_size()\n                << \"\\n\\t x.size():         \" << x.size()\n                << \"\\n\\t is_col_vector(x): \" << is_col_vector(x)\n                << \"\\n\\t this:             \" << this\n                );\n\n            temp_out = tform*x-m;\n            return temp_out;\n        }\n\n        template <typename mt>\n        friend void deserialize (\n            vector_normalizer_frobmetric<mt>& item, \n            std::istream& in\n        ); \n\n        template <typename mt>\n        friend void serialize (\n            const vector_normalizer_frobmetric<mt>& item, \n            std::ostream& out \n        );\n\n    private:\n\n        // ------------------- private data members -------------------\n\n        matrix_type m;\n        matrix<scalar_type,0,0,mem_manager_type> tform;\n        bool verbose;\n        double eps;\n        double C;\n        unsigned long max_iter;\n\n        // This is just a temporary variable that doesn't contribute to the\n        // state of this object.\n        mutable matrix_type temp_out;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    void serialize (\n        const vector_normalizer_frobmetric<matrix_type>& item, \n        std::ostream& out \n    )\n    {\n        const int version = 1;\n        serialize(version, out);\n\n        serialize(item.m, out);\n        serialize(item.tform, out);\n        serialize(item.verbose, out);\n        serialize(item.eps, out);\n        serialize(item.C, out);\n        serialize(item.max_iter, out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    void deserialize (\n        vector_normalizer_frobmetric<matrix_type>& item, \n        std::istream& in\n    )   \n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 1)\n            throw serialization_error(\"Unsupported version found while deserializing dlib::vector_normalizer_frobmetric.\");\n\n        deserialize(item.m, in);\n        deserialize(item.tform, in);\n        deserialize(item.verbose, in);\n        deserialize(item.eps, in);\n        deserialize(item.C, in);\n        deserialize(item.max_iter, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_VECTOR_NORMALIZER_FRoBMETRIC_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics/vector_normalizer_frobmetric_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_VECTOR_NORMALIZER_FRoBMETRIC_ABSTRACT_Hh_\n#ifdef DLIB_VECTOR_NORMALIZER_FRoBMETRIC_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    struct frobmetric_training_sample \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a training data sample for the\n                vector_normalizer_frobmetric object.  It defines a set of training triplets\n                relative to a single anchor_vect vector.  That is, it specifies that the\n                learned distance metric should satisfy num_triples() constraints which are,\n                for all valid i and j:\n                    length(T*anchor_vect-T*near_vects[i]) + 1 < length(T*anchor_vect - T*far_vects[j])\n                for some appropriate linear transformation T which will be learned by\n                vector_normalizer_frobmetric.\n        !*/\n\n        matrix_type anchor_vect;\n        std::vector<matrix_type> near_vects;\n        std::vector<matrix_type> far_vects;\n\n        unsigned long num_triples (\n        ) const { return near_vects.size() * far_vects.size(); }\n        /*!\n            ensures\n                - returns the number of training triplets defined by this object.\n        !*/\n\n        void clear()\n        /*!\n            ensures\n                - #near_vects.size() == 0\n                - #far_vects.size() == 0\n        !*/\n    };\n\n    template < typename matrix_type >\n    void serialize(const frobmetric_training_sample<matrix_type>& item, std::ostream& out)\n    template < typename matrix_type >\n    void deserialize(frobmetric_training_sample<matrix_type>& item, std::istream& in)\n    /*!\n        provides serialisation support.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    class vector_normalizer_frobmetric\n    {\n        /*!\n            REQUIREMENTS ON matrix_type\n                - must be a dlib::matrix object capable of representing column \n                  vectors\n\n            INITIAL VALUE\n                - in_vector_size() == 0\n                - out_vector_size() == 0\n                - get_epsilon() == 0.1\n                - get_c() == 1\n                - get_max_iterations() == 5000\n                - This object is not verbose\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for performing the FrobMetric distance metric\n                learning algorithm described in the following paper:\n                    A Scalable Dual Approach to Semidefinite Metric Learning\n                    By Chunhua Shen, Junae Kim, Lei Wang, in CVPR 2011\n\n                Therefore, this object is a tool that takes as input training triplets\n                (anchor_vect, near, far) of vectors and attempts to learn a linear\n                transformation T such that:\n                    length(T*anchor_vect-T*near) + 1 < length(T*anchor_vect - T*far)\n                That is, you give a bunch of anchor_vect vectors and for each anchor_vect\n                you specify some vectors which should be near to it and some that should be\n                far form it.  This object then tries to find a transformation matrix that\n                makes the \"near\" vectors close to their anchors while the \"far\" vectors are\n                farther away.\n\n            THREAD SAFETY\n                Note that this object contains a cached matrix object it uses \n                to store intermediate results for normalization.  This avoids\n                needing to reallocate it every time this object performs normalization\n                but also makes it non-thread safe.  So make sure you don't share\n                instances of this object between threads. \n        !*/\n\n    public:\n        typedef typename matrix_type::mem_manager_type mem_manager_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef matrix_type result_type;\n\n        vector_normalizer_frobmetric (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void be_verbose(\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so the user can\n                  observe the progress of the train() routine.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out.\n        !*/\n\n        void set_epsilon (\n            double eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        double get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer to\n                  execute.\n        !*/\n\n        void set_c (\n            double C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #set_c() == C\n        !*/\n\n        double get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the regularization parameter.  It is the parameter that\n                  determines the trade-off between trying to fit the training data exactly\n                  or allowing more errors but hopefully improving the generalization of the\n                  resulting distance metric.  Larger values encourage exact fitting while\n                  smaller values of C may encourage better generalization. \n        !*/\n       \n        void set_max_iterations (\n            unsigned long max_iterations\n        );\n        /*!\n            ensures\n                - #get_max_iterations() == max_iterations\n        !*/\n\n        unsigned long get_max_iterations (\n        ) const;\n        /*!\n            ensures\n                - The train() routine uses an iterative numerical solver to find the best\n                  distance metric.  This function returns the maximum allowable number of\n                  iterations it will use before terminating.  Note that typically the\n                  solver terminates prior to the max iteration count limit due to the error\n                  dropping below get_epsilon().\n        !*/\n\n        void train (\n            const std::vector<frobmetric_training_sample<matrix_type> >& samples\n        );\n        /*!\n            requires\n                - samples.size() != 0\n                - All matrices inside samples (i.e. anchors and elements of near_vects and far_vects)\n                  are column vectors with the same non-zero dimension.\n                - All the vectors in samples contain finite values.\n                - All elements of samples contain data, specifically, for all valid i:\n                    - samples[i].num_triples() != 0\n            ensures\n                - learns a distance metric from the given training samples.  After train\n                  finishes you can use this object's operator() to transform vectors\n                  according to the learned distance metric.  In particular, we will have:\n                    - #transform() == The linear transformation learned by the FrobMetric\n                      learning procedure.\n                    - #in_vector_size() == samples[0].anchor_vect.size()\n                    - You can call (*this)(x) to transform a vector according to the learned \n                      distance metric.  That is, it should generally be the case that:\n                        - length((*this)(anchor_vect) - (*this)(near)) + 1 < length((*this)(anchor_vect) - (*this)(far))\n                      for the anchor_vect, near, and far vectors in the training data.\n                    - #transformed_means() == the mean of the input anchor_vect vectors\n                      after being transformed by #transform()\n        !*/\n\n        long in_vector_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows that input vectors are required to contain if\n                  they are to be normalized by this object.\n        !*/\n\n        long out_vector_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of rows in the normalized vectors that come out of\n                  this object.\n                - The value returned is always in_vector_size().  So out_vector_size() is\n                  just provided to maintain interface consistency with other vector\n                  normalizer objects.  That is, the transformations applied by this object\n                  do not change the dimensionality of the vectors.\n        !*/\n\n        const matrix<scalar_type,0,1,mem_manager_type>& transformed_means (\n        ) const;\n        /*!\n            ensures\n                - returns a column vector V such that:\n                    - V.size() == in_vector_size()\n                    - V is a vector such that subtracting it from transformed vectors\n                      results in them having an expected value of 0.  Therefore, it is\n                      equal to transform() times the mean of the input anchor_vect vectors\n                      given to train().\n        !*/\n\n        const matrix<scalar_type,0,0,mem_manager_type>& transform (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the transformation matrix we learned during the last \n                  call to train().\n                - The returned matrix is square and has in_vector_size() by in_vector_size()\n                  dimensions.\n        !*/\n\n        const result_type& operator() (\n            const matrix_type& x\n        ) const;\n        /*!\n            requires\n                - in_vector_size() != 0\n                - in_vector_size() == x.size()\n                - is_col_vector(x) == true\n            ensures\n                - returns a normalized version of x, call it Z, that has the following\n                  properties: \n                    - Z == The result of applying the linear transform we learned during\n                      train() to the input vector x.\n                    - Z == transform()*x-transformed_means()\n                    - is_col_vector(Z) == true\n                    - Z.size() == x.size()\n                    - The expected value of each element of Z is 0.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    void serialize (\n        const vector_normalizer_frobmetric<matrix_type>& item, \n        std::ostream& out \n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type\n        >\n    void deserialize (\n        vector_normalizer_frobmetric<matrix_type>& item, \n        std::istream& in\n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_VECTOR_NORMALIZER_FRoBMETRIC_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/statistics.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STATISTICs_H_\n#define DLIB_STATISTICs_H_ \n\n#include \"statistics/statistics.h\"\n#include \"statistics/dpca.h\"\n#include \"statistics/random_subset_selector.h\"\n#include \"statistics/image_feature_sampling.h\"\n#include \"statistics/sammon.h\"\n#include \"statistics/cca.h\"\n#include \"statistics/average_precision.h\"\n#include \"statistics/vector_normalizer_frobmetric.h\"\n\n#endif // DLIB_STATISTICs_H_ \n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/std_allocator.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STD_ALLOc_H_\n#define DLIB_STD_ALLOc_H_\n\n#include <limits>\n#include <memory>\n#include \"enable_if.h\"\n#include \"algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename M\n        >\n    class std_allocator \n    {\n        /*!\n            REQUIREMENTS ON M \n                must be an implementation of memory_manager/memory_manager_kernel_abstract.h or\n                must be an implementation of memory_manager_global/memory_manager_global_kernel_abstract.h or\n                must be an implementation of memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                M::type can be set to anything.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is an implementation of an allocator that conforms to the C++ standard \n                requirements for allocator objects.  The M template argument is one of the dlib\n                memory manager objects and this allocator implementation will do all of its memory allocations\n                using whatever dlib memory manager you supply.   \n\n                Thus, using this allocator object you can use any of the dlib memory manager objects with\n                the containers in the STL or with any other object that requires a C++ allocator object.\n\n                It is important to note that many STL implementations make the assumption that the memory\n                allocated by one allocator can be freed by another.  This effectively means that you should\n                only use a global or stateless memory manager with the std_allocator.  Either that or you\n                have to verify that your version of the STL isn't going to try and allocate and deallocate\n                memory with different allocators.\n        !*/\n\n    public:\n        //type definitions\n        typedef std::size_t     size_type;\n        typedef std::ptrdiff_t  difference_type;\n        typedef T*              pointer;\n        typedef const T*        const_pointer;\n        typedef T&              reference;\n        typedef const T&        const_reference;\n        typedef T               value_type;\n\n        //rebind std_allocator to type U\n        template <typename U>\n        struct rebind {\n            typedef std_allocator<U,M> other;\n        };\n\n        //return address of values\n        pointer address (reference value) const { return &value; }\n\n        const_pointer address (const_reference value) const { return &value; }\n\n        /*constructors and destructor\n         *-nothing to do because the std_allocator has no state\n        */\n        std_allocator() throw() { }\n\n        std_allocator(const std_allocator&) throw() { } \n\n        template <typename U>\n        std_allocator (const std_allocator<U,M>&) throw() { }\n\n        ~std_allocator() throw() { }\n\n        //return maximum number of elements that can be allocated\n        size_type max_size () const throw() \n        {\n            //for numeric_limits see Section 4.3, page 59\n            return std::numeric_limits<size_t>::max() / sizeof(T);\n        }\n\n        //allocate but don't initialize num elements of type T\n        pointer allocate (\n            size_type num,\n            typename std_allocator<void,M>::const_pointer  = 0\n        ) \n        {\n            return (pointer) pool.allocate_array(num*sizeof(T));\n        }\n\n        // This function is not required by the C++ standard but some versions of the STL\n        // distributed with gcc erroneously require it.  See the bug report for further\n        // details: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51626\n        void construct(pointer p) { return construct(p, value_type()); }\n\n        //initialize elements of allocated storage p with value value\n        void construct (pointer p, const T& value) \n        {\n            //initialize memory with placement new\n            new((void*)p)T(value);\n        }\n\n\n        //destroy elements of initialized storage p\n        void destroy (pointer p) \n        {\n            // destroy objects by calling their destructor\n            p->~T();\n        }\n\n        //deallocate storage p of deleted elements\n        void deallocate (pointer p, size_type ) \n        {\n            pool.deallocate_array((char*)p);\n        }\n\n        void swap (\n            std_allocator& item\n        )\n        {\n            pool.swap(item.pool);\n        }\n\n        std_allocator& operator= (const std_allocator&) { return *this;}\n\n    private:\n        typename M::template rebind<char>::other pool; \n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename M\n        >\n    class std_allocator<void,M> \n    {\n    public:\n        //type definitions\n        typedef std::size_t     size_type;\n        typedef std::ptrdiff_t  difference_type;\n        typedef void*              pointer;\n        typedef const void*        const_pointer;\n        typedef void               value_type;\n\n        //rebind std_allocator to type U\n        template <typename U>\n        struct rebind {\n            typedef std_allocator<U,M> other;\n        };\n\n    };\n    \n// ----------------------------------------------------------------------------------------\n\n    template <typename M1, typename M2, typename enabled = void>\n    struct std_alloc_compare\n    { const static bool are_interchangeable = false; };\n\n    template <typename M1, typename M2>\n    struct std_alloc_compare<M1,M2,typename enable_if<is_same_type<typename M1::mm_global_type, typename M2::mm_global_type> >::type>\n    { const static bool are_interchangeable = true; };\n\n    template <typename M>\n\tstruct std_alloc_compare<M,M,typename enable_if_c<M::is_stateless>::type>\n    { const static bool are_interchangeable = true; };\n\n    //return that all specializations of this std_allocator are interchangeable if they use memory_manager_global\n    // instances with the same mm_global_type\n    template <typename T1, typename M1, typename T2, typename M2>\n    bool operator== (\n        const std_allocator<T1,M1>&,\n        const std_allocator<T2,M2>&\n    ) throw() \n    { return std_alloc_compare<M1,M2>::are_interchangeable; }\n\n    template <typename T1, typename M1, typename T2, typename M2>\n    bool operator!= (\n        const std_allocator<T1,M1>&,\n        const std_allocator<T2,M2>&\n    ) throw() \n    { return !std_alloc_compare<M1,M2>::are_interchangeable; }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename M>\n    void swap (\n        std_allocator<T,M>& a,\n        std_allocator<T,M>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STD_ALLOc_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/stl_checked/std_vector_c.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STD_VECTOr_C_H_\n#define DLIB_STD_VECTOr_C_H_\n\n#include <vector>\n#include <algorithm>\n#include \"../assert.h\"\n#include \"std_vector_c_abstract.h\"\n#include \"../serialize.h\"\n#include \"../is_kind.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename Allocator = std::allocator<T>\n        >\n    class std_vector_c : public std::vector<T,Allocator>\n    {\n        typedef typename std::vector<T,Allocator> base_type;\n    public:\n        // types:\n        typedef typename Allocator::reference         reference;\n        typedef typename Allocator::const_reference   const_reference;\n        typedef typename base_type::iterator          iterator;       // See 23.1\n        typedef typename base_type::const_iterator    const_iterator; // See 23.1\n        typedef typename base_type::size_type         size_type;      // See 23.1\n        typedef typename base_type::difference_type   difference_type;// See 23.1\n        typedef T                                     value_type;\n        typedef Allocator                             allocator_type;\n        typedef typename Allocator::pointer           pointer;\n        typedef typename Allocator::const_pointer     const_pointer;\n        typedef std::reverse_iterator<iterator>       reverse_iterator;\n        typedef std::reverse_iterator<const_iterator> const_reverse_iterator;\n\n\n        // 23.2.4.1 construct/copy/destroy:\n        explicit std_vector_c(const Allocator& alloc= Allocator()) : base_type(alloc) {}\n\n        explicit std_vector_c(size_type n, const T& value = T(),\n                              const Allocator& alloc= Allocator()) : base_type(n, value, alloc) {}\n\n        template <typename InputIterator>\n        std_vector_c(InputIterator first, InputIterator last,\n                     const Allocator& alloc= Allocator()) : base_type(first,last,alloc) {}\n\n        std_vector_c(const std::vector<T,Allocator>& x) : base_type(x) {}\n\n        std_vector_c<T,Allocator>& operator=(const std::vector<T,Allocator>& x)\n        {\n            static_cast<base_type&>(*this) = x;\n            return *this;\n        }\n\n        template <typename InputIterator>\n        void assign(InputIterator first, InputIterator last)    { base_type::assign(first,last); }\n        void assign(size_type n, const T& u)                    { base_type::assign(n,u); }\n        allocator_type          get_allocator() const           { return base_type::get_allocator(); }\n        // iterators:\n        iterator                begin()                         { return base_type::begin(); }\n        const_iterator          begin() const                   { return base_type::begin(); }\n        iterator                end()                           { return base_type::end(); }\n        const_iterator          end() const                     { return base_type::end(); }\n        reverse_iterator        rbegin()                        { return base_type::rbegin(); }\n        const_reverse_iterator  rbegin() const                  { return base_type::rbegin(); }\n        reverse_iterator        rend()                          { return base_type::rend(); }\n        const_reverse_iterator  rend() const                    { return base_type::rend(); }\n        // 23.2.4.2 capacity:\n        size_type               size() const                    { return base_type::size(); }\n        size_type               max_size() const                { return base_type::max_size(); }\n        void                    resize(size_type sz, T c = T()) { base_type::resize(sz,c); }\n        size_type               capacity() const                { return base_type::capacity(); }\n        bool                    empty() const                   { return base_type::empty(); }\n        void                    reserve(size_type n)            { base_type::reserve(n); }\n\n        // element access:\n        const_reference         at(size_type n) const           { return base_type::at(n); }\n        reference               at(size_type n)                 { return base_type::at(n); }\n\n\n        // 23.2.4.3 modifiers:\n        void     push_back(const T& x) { base_type::push_back(x); }\n        void     swap(std_vector_c<T,Allocator>& x) { base_type::swap(x); }\n        void     clear() { base_type::clear(); }\n\n\n    // ------------------------------------------------------\n    // Things that have preconditions that should be checked.\n    // ------------------------------------------------------\n\n        reference operator[](\n            size_type n\n        ) \n        { \n            DLIB_CASSERT(n < size(),\n                \"\\treference std_vector_c::operator[](n)\"\n                << \"\\n\\tYou have supplied an invalid index\"\n                << \"\\n\\tthis:   \" << this\n                << \"\\n\\tn:      \" << n \n                << \"\\n\\tsize(): \" << size()\n            );\n            return static_cast<base_type&>(*this)[n]; \n        }\n\n    // ------------------------------------------------------\n\n        const_reference operator[](\n            size_type n\n        ) const \n        { \n            DLIB_CASSERT(n < size(),\n                \"\\tconst_reference std_vector_c::operator[](n)\"\n                << \"\\n\\tYou have supplied an invalid index\"\n                << \"\\n\\tthis:   \" << this\n                << \"\\n\\tn:      \" << n \n                << \"\\n\\tsize(): \" << size()\n            );\n            return static_cast<const base_type&>(*this)[n]; \n        }\n\n    // ------------------------------------------------------\n\n        reference front(\n        ) \n        { \n            DLIB_CASSERT(size() > 0,\n                \"\\treference std_vector_c::front()\"\n                << \"\\n\\tYou can't call front() on an empty vector\"\n                << \"\\n\\tthis:   \" << this\n            );\n            return base_type::front(); \n        }\n\n    // ------------------------------------------------------\n\n        const_reference front(\n        ) const \n        {\n            DLIB_CASSERT(size() > 0,\n                \"\\tconst_reference std_vector_c::front()\"\n                << \"\\n\\tYou can't call front() on an empty vector\"\n                << \"\\n\\tthis:   \" << this\n            );\n            return base_type::front(); \n        }\n\n    // ------------------------------------------------------\n\n        reference back(\n        ) \n        { \n            DLIB_CASSERT(size() > 0,\n                \"\\treference std_vector_c::back()\"\n                << \"\\n\\tYou can't call back() on an empty vector\"\n                << \"\\n\\tthis:   \" << this\n            );\n            return base_type::back(); \n        }\n\n    // ------------------------------------------------------\n\n        const_reference back(\n        ) const \n        { \n            DLIB_CASSERT(size() > 0,\n                \"\\tconst_reference std_vector_c::back()\"\n                << \"\\n\\tYou can't call back() on an empty vector\"\n                << \"\\n\\tthis:   \" << this\n            );\n            return base_type::back(); \n        }\n\n    // ------------------------------------------------------\n\n        void pop_back(\n        ) \n        { \n            DLIB_CASSERT(size() > 0,\n                \"\\tconst_reference std_vector_c::pop_back()\"\n                << \"\\n\\tYou can't call pop_back() on an empty vector\"\n                << \"\\n\\tthis:   \" << this\n            );\n            base_type::pop_back(); \n        }\n\n    // ------------------------------------------------------\n\n        iterator insert(\n            iterator position, \n            const T& x\n        ) \n        { \n            DLIB_CASSERT( begin() <= position && position <= end(), \n                \"\\titerator std_vector_c::insert(position,x)\"\n                << \"\\n\\tYou have called insert() with an invalid position\"\n                << \"\\n\\tthis:   \" << this\n            );\n            return base_type::insert(position, x); \n        }\n\n    // ------------------------------------------------------\n\n        void insert(\n            iterator position, \n            size_type n, \n            const T& x\n        ) \n        { \n            DLIB_CASSERT( begin() <= position && position <= end(), \n                \"\\tvoid std_vector_c::insert(position,n,x)\"\n                << \"\\n\\tYou have called insert() with an invalid position\"\n                << \"\\n\\tthis:   \" << this\n            );\n            base_type::insert(position, n, x); \n        }\n\n    // ------------------------------------------------------\n\n        template <typename InputIterator>\n        void insert(\n            iterator position,\n            InputIterator first, \n            InputIterator last\n        ) \n        { \n            DLIB_CASSERT( begin() <= position && position <= end(), \n                \"\\tvoid std_vector_c::insert(position,first,last)\"\n                << \"\\n\\tYou have called insert() with an invalid position\"\n                << \"\\n\\tthis:   \" << this\n            );\n            base_type::insert(position, first, last); \n        }\n\n    // ------------------------------------------------------\n\n        iterator erase(\n            iterator position\n        ) \n        { \n            DLIB_CASSERT( begin() <= position && position < end(), \n                \"\\titerator std_vector_c::erase(position)\"\n                << \"\\n\\tYou have called erase() with an invalid position\"\n                << \"\\n\\tthis:   \" << this\n            );\n            return base_type::erase(position); \n        }\n\n    // ------------------------------------------------------\n\n        iterator erase(\n            iterator first, \n            iterator last\n        ) \n        { \n            DLIB_CASSERT( begin() <= first && first <= last && last <= end(),\n                \"\\titerator std_vector_c::erase(first,last)\"\n                << \"\\n\\tYou have called erase() with an invalid range of iterators\"\n                << \"\\n\\tthis:   \" << this\n            );\n            return base_type::erase(first,last); \n        }\n\n    // ------------------------------------------------------\n\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n// Add these swaps just to make absolutely sure the specialized swap always gets called even\n// if the compiler is crappy and would otherwise mess it up.\n    template <typename T, typename Allocator>\n    void swap(std_vector_c<T,Allocator>& x, std_vector_c<T,Allocator>& y) { x.swap(y); }\n\n    template <typename T, typename Allocator>\n    void swap(std::vector<T,Allocator>& x, std_vector_c<T,Allocator>& y) { x.swap(y); }\n\n    template <typename T, typename Allocator>\n    void swap(std_vector_c<T,Allocator>& x, std::vector<T,Allocator>& y) { y.swap(x); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    void serialize (\n        const std_vector_c<T,alloc>& item,\n        std::ostream& out\n    )\n    {\n        try\n        { \n            const unsigned long size = static_cast<unsigned long>(item.size());\n\n            serialize(size,out); \n            for (unsigned long i = 0; i < item.size(); ++i)\n                serialize(item[i],out);\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type std_vector_c\"); }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    void deserialize (\n        std_vector_c<T, alloc>& item,\n        std::istream& in\n    )\n    {\n        try \n        { \n            unsigned long size;\n            deserialize(size,in); \n            item.resize(size);\n            for (unsigned long i = 0; i < size; ++i)\n                deserialize(item[i],in);\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type std_vector_c\"); }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc> \n    struct is_std_vector<std_vector_c<T,alloc> >        { const static bool value = true; };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STD_VECTOr_C_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/stl_checked/std_vector_c_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STD_VECTOr_C_ABSTRACT_H_\n#ifdef DLIB_STD_VECTOr_C_ABSTRACT_H_\n\n#include <vector>\n#include <algorithm>\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T,\n        typename Allocator = std::allocator<T>\n        >\n    class std_vector_c : public std::vector<T,Allocator>\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple wrapper around the std::vector object.  It \n                provides an identical interface but also checks the preconditions of\n                each member function.  That is, if you violate a requires\n                clause the dlib::fatal_error exception is thrown. \n        !*/\n\n        typedef typename std::vector<T,Allocator> base_type;\n    public:\n        typedef typename Allocator::reference         reference;\n        typedef typename Allocator::const_reference   const_reference;\n        typedef typename base_type::iterator          iterator;       \n        typedef typename base_type::const_iterator    const_iterator; \n        typedef typename base_type::size_type         size_type;      \n        typedef typename base_type::difference_type   difference_type;\n        typedef T                                     value_type;\n        typedef Allocator                             allocator_type;\n        typedef typename Allocator::pointer           pointer;\n        typedef typename Allocator::const_pointer     const_pointer;\n        typedef std::reverse_iterator<iterator>       reverse_iterator;\n        typedef std::reverse_iterator<const_iterator> const_reverse_iterator;\n\n\n        explicit std_vector_c(\n            const Allocator& alloc = Allocator()\n        );\n        /*!\n            ensures\n                - #get_allocator() == alloc\n                - #size() == 0\n        !*/\n\n        explicit std_vector_c (\n            size_type n, \n            const T& value = T(),\n            const Allocator& alloc = Allocator()\n        );\n        /*!\n            ensures\n                - #size() == n\n                - #get_allocator() == alloc\n                - for all valid i:\n                    - (*this)[i] == value\n        !*/\n\n        template <typename InputIterator>\n        std_vector_c (\n            InputIterator first,\n            InputIterator last,\n            const Allocator& alloc = Allocator()\n        );\n        /*!\n            ensures\n                - #size() == std::distance(first,last)\n                - #get_allocator() == alloc\n                - std::equal(first, last, begin()) == true\n        !*/\n\n        std_vector_c(\n            const std::vector<T,Allocator>& x\n        );\n        /*!\n            ensures\n                - #*this == x\n        !*/\n\n        std_vector_c<T,Allocator>& operator= (\n            const std::vector<T,Allocator>& x\n        );\n        /*!\n            ensures\n                - #*this == x\n                - returns #*this\n        !*/\n\n        template <typename InputIterator>\n        void assign(\n            InputIterator first, \n            InputIterator last\n        );\n        /*!\n            ensures\n                - #size() == std::distance(first,last)\n                - std::equal(first, last, begin()) == true\n        !*/\n\n        void assign(\n            size_type n, \n            const T& value \n        ); \n        /*!\n            ensures\n                - #size() == n\n                - for all valid i:\n                    - (*this)[i] == value\n        !*/\n\n        allocator_type get_allocator(\n        ) const;\n        /*!\n            ensures\n                - returns the allocator used by this vector\n        !*/\n        \n        iterator begin(\n        );\n        /*!\n            ensures\n                - if (size() > 0) then\n                    - returns an iterator referring to the first element in \n                      this container.\n                - else\n                    - returns end()\n        !*/\n        \n        const_iterator begin(\n        ) const;\n        /*!\n            ensures\n                - if (size() > 0) then\n                    - returns a const_iterator referring to the first element in \n                      this container.\n                - else\n                    - returns end()\n        !*/\n\n        iterator end(\n        ); \n        /*!\n            ensures\n                - returns an iterator that represents one past the end of\n                  this container\n        !*/\n\n        const_iterator end(\n        ) const;\n        /*!\n            ensures\n                - returns an iterator that represents one past the end of\n                  this container\n        !*/\n\n        reverse_iterator rbegin(\n        );\n        /*!\n            ensures\n                - returns std::reverse_iterator(end())\n        !*/\n\n        const_reverse_iterator rbegin(\n        ) const;\n        /*!\n            ensures\n                - returns std::reverse_iterator(end())\n        !*/\n        \n        reverse_iterator rend(\n        );\n        /*!\n            ensures\n                - returns std::reverse_iterator(begin())\n        !*/\n\n        const_reverse_iterator rend(\n        ) const; \n        /*!\n            ensures\n                - returns std::reverse_iterator(begin())\n        !*/\n\n        size_type size(\n        ) const;  \n        /*!\n            ensures\n                - returns end()-begin()\n                  (i.e. returns the number of elements in this container)\n        !*/\n\n        size_type max_size(\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of elements this vector can contain\n        !*/\n\n        void resize(\n            size_type sz, \n            T c = T()\n        );\n        /*!\n            ensures\n                - #size() == sz\n                - any element with index between 0 and sz - 1 which was in the \n                  vector before the call to resize() retains its value and index.\n                  All other elements have a value given by c.\n        !*/\n\n        size_type capacity(\n        ) const;\n        /*!\n            ensures\n                - returns the total number of elements that the vector can hold without \n                  requiring reallocation. \n        !*/\n\n        bool empty(\n        ) const; \n        /*!\n            ensures\n                - if (size() == 0) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void reserve(\n            size_type n\n        ); \n        /*!\n            ensures\n                - #capacity() >= n\n        !*/\n\n        const_reference at(\n            size_type n\n        ) const; \n        /*!\n            ensures\n                - if (n < size()) then \n                    - returns a const reference to (*this)[n]\n                - else\n                    - throws std::out_of_range\n        !*/\n\n        reference at(\n            size_type n\n        ); \n        /*!\n            ensures\n                - if (n < size()) then \n                    - returns a reference to (*this)[n]\n                - else\n                    - throws std::out_of_range\n        !*/\n\n        void push_back(\n            const T& x\n        ); \n        /*!\n            ensures\n                - #size() == size() + 1\n                - #back() == x\n        !*/\n\n        void swap(\n            std_vector_c<T,Allocator>& x\n        );\n        /*!\n            ensures\n                - swaps the state of *this and x\n        !*/\n\n        void clear(\n        ); \n        /*!\n            ensures\n                - #size() == 0\n        !*/\n\n        reference operator[](\n            size_type n\n        ); \n        /*!\n            requires\n                - n < size()\n            ensures\n                - returns a reference to the nth element of this container\n        !*/\n\n        const_reference operator[](\n            size_type n\n        ) const;\n        /*!\n            requires\n                - n < size()\n            ensures\n                - returns a const reference to the nth element of this container\n        !*/\n\n        reference front(\n        );\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - returns a reference to (*this)[0]\n        !*/\n\n        const_reference front(\n        ) const;\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - returns a const reference to (*this)[0]\n        !*/\n\n        reference back(\n        );\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - returns a reference to (*this)[size()-1]\n        !*/\n\n        const_reference back(\n        ) const;\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - returns a const reference to (*this)[size()-1]\n        !*/\n\n        void pop_back(\n        );\n        /*!\n            requires\n                - size() > 0\n            ensures\n                - #size() == size() - 1\n                - removes the last element in the vector but leaves the others\n                  unmodified.\n        !*/\n\n        iterator insert(\n            iterator position, \n            const T& x\n        );\n        /*!\n            requires\n                - begin() <= position && position <= end()\n                  (i.e. position references an element in this vector object)\n            ensures\n                - #size() == size() + 1\n                - inserts a copy of x into *this before the given position\n                - returns an iterator that points to the copy of x inserted\n                  into *this\n        !*/\n\n        void insert(\n            iterator position, \n            size_type n, \n            const T& x\n        );\n        /*!\n            requires\n                - begin() <= position && position <= end()\n                  (i.e. position references an element in this vector object)\n            ensures\n                - #size() == size() + n\n                - inserts n copies of x into *this before the given position\n        !*/\n\n        template <typename InputIterator>\n        void insert(\n            iterator position,\n            InputIterator first, \n            InputIterator last\n        );\n        /*!\n            requires\n                - begin() <= position && position <= end()\n                  (i.e. position references an element in this vector object)\n                - first and last are not iterators into *this\n            ensures\n                - #size() == size() + std::distance(last,first)\n                - inserts copies of the range of elements [first,last) into *this \n                  before the given position\n        !*/\n\n        iterator erase(\n            iterator position\n        ); \n        /*!\n            requires\n                - begin() <= position && position < end()\n                  (i.e. position references an element in this vector object)\n            ensures\n                - #size() == size() - 1 \n                - removes the element in this vector referenced by position but\n                  leaves all other elements in this vector unmodified.\n                - if (position < end()-1) then\n                    - returns an iterator referencing the element immediately \n                      following *position prior to the erase.\n                - else\n                    - returns end()\n        !*/\n\n        iterator erase(\n            iterator first, \n            iterator last\n        );\n        /*!\n            requires\n                - begin() <= first && first <= last && last <= end()\n                  (i.e. the range [first,last) must be inside this container )\n            ensures\n                - #size() == size() - (last-first) \n                - removes the elements in this vector referenced by the\n                  iterator range [first,last) but leaves all other elements \n                  in this vector unmodified.\n                - if (last < end()-1) then\n                    - returns an iterator referencing the element immediately \n                      following *last prior to the erase.\n                - else\n                    - returns end()\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    void serialize (\n        const std_vector_c<T,alloc>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    void deserialize (\n        std_vector_c<T, alloc>& item,\n        std::istream& in\n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STD_VECTOr_C_ABSTRACT_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/stl_checked.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STL_CHECKEd_HEADER\n#define DLIB_STL_CHECKEd_HEADER\n\n#include \"stl_checked/std_vector_c.h\"\n\n#endif // DLIB_STL_CHECKEd_HEADER\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/string/cassert",
    "content": "#include \"../dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/string/iomanip",
    "content": "#include \"../dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/string/iosfwd",
    "content": "#include \"../dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/string/iostream",
    "content": "#include \"../dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/string/locale",
    "content": "#include \"../dlib_include_path_tutorial.txt\"\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/string/string.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRINg_\n#define DLIB_STRINg_ \n\n#include \"string_abstract.h\"\n#include <sstream>\n#include \"../algs.h\"\n#include <string>\n#include <iostream>\n#include <iomanip>\n#include \"../error.h\"\n#include \"../assert.h\"\n#include \"../uintn.h\"\n#include <cctype>\n#include <algorithm>\n#include <vector>\n#include \"../enable_if.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    inline const typename disable_if<is_same_type<charT,char>,std::string>::type narrow (\n        const std::basic_string<charT,traits,alloc>& str\n    )\n    {\n        std::string temp;\n        temp.reserve(str.size());\n        std::string::size_type i;\n        for (i = 0; i < str.size(); ++i)\n        {\n            if (zero_extend_cast<unsigned long>(str[i]) > 255)\n                temp += ' ';\n            else\n                temp += zero_extend_cast<char>(str[i]);\n        }\n        return temp;\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    inline const typename enable_if<is_same_type<charT,char>,std::string>::type narrow (\n        const std::basic_string<charT,traits,alloc>& str\n    )\n    { \n        return str;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<char,traits,alloc> tolower (\n        const std::basic_string<char,traits,alloc>& str\n    )\n    {\n        std::basic_string<char,traits,alloc> temp;\n\n        temp.resize(str.size());\n\n        for (typename std::basic_string<char,traits,alloc>::size_type i = 0; i < str.size(); ++i)\n            temp[i] = (char)std::tolower(str[i]);\n\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<char,traits,alloc> toupper (\n        const std::basic_string<char,traits,alloc>& str\n    )\n    {\n        std::basic_string<char,traits,alloc> temp;\n\n        temp.resize(str.size());\n\n        for (typename std::basic_string<char,traits,alloc>::size_type i = 0; i < str.size(); ++i)\n            temp[i] = (char)std::toupper(str[i]);\n\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    bool strings_equal_ignore_case (\n        const std::basic_string<char,traits,alloc>& str1,\n        const std::basic_string<char,traits,alloc>& str2\n    )\n    {\n        if (str1.size() != str2.size())\n            return false;\n\n        for (typename std::basic_string<char,traits,alloc>::size_type i = 0; i < str1.size(); ++i)\n        {\n            if (std::tolower(str1[i]) != std::tolower(str2[i]))\n                return false;\n        }\n\n        return true;\n    }\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    bool strings_equal_ignore_case (\n        const std::basic_string<char,traits,alloc>& str1,\n        const char* str2\n    )\n    {\n        typename std::basic_string<char,traits,alloc>::size_type i;\n        for (i = 0; i < str1.size(); ++i)\n        {\n            // if we hit the end of str2 then the strings aren't the same length\n            if (str2[i] == '\\0')\n                return false;\n\n            if (std::tolower(str1[i]) != std::tolower(str2[i]))\n                return false;\n        }\n\n        // This happens when str2 is longer than str1\n        if (str2[i] != '\\0')\n            return false;\n\n        return true;\n    }\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    bool strings_equal_ignore_case (\n        const char* str1,\n        const std::basic_string<char,traits,alloc>& str2\n    )\n    {\n        return strings_equal_ignore_case(str2, str1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    bool strings_equal_ignore_case (\n        const std::basic_string<char,traits,alloc>& str1,\n        const std::basic_string<char,traits,alloc>& str2,\n        unsigned long num\n    )\n    {\n        if (str1.size() != str2.size() && (str1.size() < num || str2.size() < num))\n            return false;\n\n        for (typename std::basic_string<char,traits,alloc>::size_type i = 0; i < str1.size() && i < num; ++i)\n        {\n            if (std::tolower(str1[i]) != std::tolower(str2[i]))\n                return false;\n        }\n\n        return true;\n    }\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    bool strings_equal_ignore_case (\n        const std::basic_string<char,traits,alloc>& str1,\n        const char* str2,\n        unsigned long num\n    )\n    {\n        typename std::basic_string<char,traits,alloc>::size_type i;\n        for (i = 0; i < str1.size() && i < num; ++i)\n        {\n            // if we hit the end of str2 then the strings aren't the same length\n            if (str2[i] == '\\0')\n                return false;\n\n            if (std::tolower(str1[i]) != std::tolower(str2[i]))\n                return false;\n        }\n\n        return true;\n    }\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    bool strings_equal_ignore_case (\n        const char* str1,\n        const std::basic_string<char,traits,alloc>& str2,\n        unsigned long num\n    )\n    {\n        return strings_equal_ignore_case(str2, str1, num);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class cast_to_string_error : public error\n    {\n    public:\n        cast_to_string_error():error(ECAST_TO_STRING) {}\n    };\n\n    template <\n        typename T\n        >\n    const std::string cast_to_string (\n        const T& item \n    )\n    {\n        std::ostringstream sout;\n        sout << item;\n        if (!sout)\n            throw cast_to_string_error();\n        return sout.str();\n    }\n\n    // don't declare this if we are using mingw because it apparently doesn't\n    // support iostreams with wchar_t?\n#if !(defined(__MINGW32__) && (__GNUC__ < 4))\n    template <\n        typename T\n        >\n    const std::wstring cast_to_wstring (\n        const T& item \n    )\n    {\n        std::basic_ostringstream<wchar_t> sout;\n        sout << item;\n        if (!sout)\n            throw cast_to_string_error();\n        return sout.str();\n    }\n#endif\n\n// ----------------------------------------------------------------------------------------\n\n    inline std::string pad_int_with_zeros (\n        int i,\n        unsigned long width = 6\n    )\n    {\n        std::ostringstream sout;\n        sout << std::setw(width) << std::setfill('0') << i;\n        return sout.str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class string_cast_error : public error\n    {\n    public:\n        string_cast_error(const std::string& str):\n            error(ESTRING_CAST,\"string cast error: invalid string = '\" + str + \"'\") {}\n    };\n\n    template <\n        typename T\n        >\n    struct string_cast_helper\n    {\n        template < typename charT, typename traits, typename alloc >\n        static const T cast (\n            const std::basic_string<charT,traits,alloc>& str\n        )\n        {\n            using namespace std;\n            basic_istringstream<charT,traits,alloc> sin(str);\n            T temp;\n            sin >> temp;\n            if (!sin) throw string_cast_error(narrow(str));\n            if (sin.get() != std::char_traits<charT>::eof()) throw string_cast_error(narrow(str));   \n            return temp;\n        }\n    };\n\n    template <typename C, typename T, typename A>\n    struct string_cast_helper<std::basic_string<C,T,A> >\n    {\n        template < typename charT, typename traits, typename alloc >\n        static const std::basic_string<C,T,A> cast (\n            const std::basic_string<charT,traits,alloc>& str\n        )\n        {\n            std::basic_string<C,T,A> temp;\n            temp.resize(str.size());\n            for (unsigned long i = 0; i < str.size(); ++i)\n                temp[i] = zero_extend_cast<C>(str[i]);\n            return temp;\n        }\n    };\n\n    template <>\n    struct string_cast_helper<bool>\n    {\n        template < typename charT, typename traits, typename alloc >\n        static bool cast (\n            const std::basic_string<charT,traits,alloc>& str\n        )\n        {\n            using namespace std;\n            if (str.size() == 1 && str[0] == '1')\n                return true;\n            if (str.size() == 1 && str[0] == '0')\n                return false;\n            if (tolower(narrow(str)) == \"true\")\n                return true;\n            if (tolower(narrow(str)) == \"false\")\n                return false;\n\n            throw string_cast_error(narrow(str));\n        }\n    };\n\n#define DLIB_STRING_CAST_INTEGRAL(type)                             \\\n    template <>                                                     \\\n    struct string_cast_helper<type>                                 \\\n    {                                                               \\\n        template < typename charT, typename traits, typename alloc> \\\n        static type cast (                                    \\\n            const std::basic_string<charT,traits,alloc>& str        \\\n        )                                                           \\\n        {                                                           \\\n            using namespace std;                                    \\\n            basic_istringstream<charT,traits,alloc> sin(str);       \\\n            type temp;                                              \\\n            if (str.size() > 2 && str[0] == _dT(charT,'0') && str[1] == _dT(charT,'x'))   \\\n                sin >> hex >> temp;                                 \\\n            else                                                    \\\n                sin >> temp;                                        \\\n            if (!sin) throw string_cast_error(narrow(str));                 \\\n            if (sin.get() != std::char_traits<charT>::eof()) throw string_cast_error(narrow(str));     \\\n            return temp;                                            \\\n        }                                                           \\\n    };\n\n    DLIB_STRING_CAST_INTEGRAL(unsigned short)\n    DLIB_STRING_CAST_INTEGRAL(short)\n    DLIB_STRING_CAST_INTEGRAL(unsigned int)\n    DLIB_STRING_CAST_INTEGRAL(int)\n    DLIB_STRING_CAST_INTEGRAL(unsigned long)\n    DLIB_STRING_CAST_INTEGRAL(long)\n    DLIB_STRING_CAST_INTEGRAL(uint64)\n\n    template <\n        typename T,\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    inline const T string_cast (\n        const std::basic_string<charT,traits,alloc>& str\n    )\n    {\n        COMPILE_TIME_ASSERT(is_pointer_type<T>::value == false);\n        return string_cast_helper<T>::cast(str);\n    }\n\n    template <typename T>\n    inline const T string_cast (const char* str){ return string_cast<T>(std::string(str)); }\n    template <typename T>\n    inline const T string_cast (const wchar_t* str){ return string_cast<T>(std::wstring(str)); }\n\n// ----------------------------------------------------------------------------------------\n\n    class string_assign\n    {\n        template <\n            typename charT,\n            typename traits,\n            typename alloc\n            >\n        class string_assign_helper\n        {\n        public:\n            string_assign_helper (\n                const std::basic_string<charT,traits,alloc>& str_\n            ) : str(str_) {}\n\n            template <typename T>\n            operator T () const\n            {\n                return string_cast<T>(str);\n            }\n\n        private:\n\n            const std::basic_string<charT,traits,alloc>& str;\n        };\n\n    // -------------\n\n        class char_assign_helper\n        {\n        public:\n            char_assign_helper (\n                const char* str_\n            ) : str(str_) {}\n\n            template <typename T>\n            operator T () const\n            {\n                return string_cast<T>(str);\n            }\n\n        private:\n\n            const char* str;\n        };\n\n    // -------------\n\n        class wchar_t_assign_helper\n        {\n        public:\n            wchar_t_assign_helper (\n                const wchar_t* str_\n            ) : str(str_) {}\n\n            template <typename T>\n            operator T () const\n            {\n                return string_cast<T>(str);\n            }\n\n        private:\n\n            const wchar_t* str;\n        };\n\n    // -------------\n\n    public:\n\n        template <\n            typename charT,\n            typename traits,\n            typename alloc\n            >\n        string_assign_helper<charT,traits,alloc> operator=(\n            const std::basic_string<charT,traits,alloc>& str\n        ) const\n        {\n            return string_assign_helper<charT,traits,alloc>(str);\n        }\n\n        char_assign_helper operator= (\n            const char* str\n        ) const \n        {\n            return char_assign_helper(str);\n        }\n\n        wchar_t_assign_helper operator= (\n            const wchar_t* str\n        ) const \n        {\n            return wchar_t_assign_helper(str);\n        }\n    };\n\n    const string_assign sa = string_assign();\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> wrap_string (\n        const std::basic_string<charT,traits,alloc>& str,\n        const unsigned long first_pad = 0,\n        const unsigned long rest_pad = 0,\n        const unsigned long max_per_line = 79\n    )\n    {\n        DLIB_ASSERT ( first_pad < max_per_line && rest_pad < max_per_line && \n                 rest_pad >= first_pad,\n                 \"\\tconst std::basic_string<charT,traits,alloc> wrap_string()\"\n                 << \"\\n\\tfirst_pad:    \" << first_pad\n                 << \"\\n\\trest_pad:     \" << rest_pad\n                 << \"\\n\\tmax_per_line: \" << max_per_line  );\n\n        using namespace std;\n\n        basic_ostringstream<charT,traits,alloc> sout;\n        basic_istringstream<charT,traits,alloc> sin(str);\n\n        for (unsigned long i = 0; i < rest_pad; ++i)\n            sout << _dT(charT,\" \");\n        const basic_string<charT,traits,alloc> pad(sout.str());\n        sout.str(_dT(charT,\"\"));\n\n        for (unsigned long i = 0; i < first_pad; ++i)\n            sout << _dT(charT,\" \");\n\n\n        typename basic_string<charT,traits,alloc>::size_type remaining = max_per_line - rest_pad;\n\n        basic_string<charT,traits,alloc> temp;\n\n        sin >> temp;\n        while (sin)\n        {\n            if (temp.size() > remaining)\n            {\n                if (temp.size() + rest_pad >= max_per_line)\n                {\n                    string::size_type i = 0;\n                    for (; i < temp.size(); ++i)\n                    {\n                        sout << temp[i];\n                        --remaining;\n                        if (remaining == 0)\n                        {\n                            sout << _dT(charT,\"\\n\") << pad;\n                            remaining = max_per_line - rest_pad;\n                        }\n                    }\n                }\n                else\n                {\n                    sout << _dT(charT,\"\\n\") << pad << temp;\n                    remaining = max_per_line - rest_pad - temp.size();\n                }\n            }\n            else if (temp.size() == remaining)\n            {\n                sout << temp;\n                remaining = 0;\n            }\n            else\n            {\n                sout << temp;\n                remaining -= temp.size();\n            }\n\n            sin >> temp;\n            if (remaining == 0 && sin)\n            {\n                sout << _dT(charT,\"\\n\") << pad;\n                remaining = max_per_line - rest_pad;\n            }\n            else\n            {\n                sout << _dT(charT,\" \");\n                --remaining;\n            }\n        }\n\n        return sout.str();\n    }\n\n    template <\n        typename charT\n        >\n    const std::basic_string<charT> wrap_string (\n        const charT* str,\n        const unsigned long first_pad = 0,\n        const unsigned long rest_pad = 0,\n        const unsigned long max_per_line = 79\n    ) { return wrap_string(std::basic_string<charT>(str),first_pad,rest_pad,max_per_line); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> ltrim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& trim_chars \n    )\n    {\n        typedef std::basic_string<charT,traits,alloc> string;\n        typename string::size_type pos = str.find_first_not_of(trim_chars);\n        if (pos != string::npos)\n            return str.substr(pos);\n        else\n            return std::basic_string<charT,traits,alloc>();\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> ltrim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* trim_chars = _dT(charT,\" \\t\\r\\n\")\n    ) { return ltrim(str,std::basic_string<charT,traits,alloc>(trim_chars)); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> rtrim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& trim_chars \n    )\n    {\n        typedef std::basic_string<charT,traits,alloc> string;\n\n        typename string::size_type pos = str.find_last_not_of(trim_chars);\n        if (pos != string::npos)\n            return str.substr(0,pos+1);\n        else\n            return std::basic_string<charT,traits,alloc>();\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> rtrim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* trim_chars = _dT(charT,\" \\t\\r\\n\")\n    ) { return rtrim(str,std::basic_string<charT,traits,alloc>(trim_chars)); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> trim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& trim_chars \n    )\n    {\n        typedef std::basic_string<charT,traits,alloc> string;\n        typename string::size_type lpos = str.find_first_not_of(trim_chars); \n        if (lpos != string::npos)\n        {\n            typename string::size_type rpos = str.find_last_not_of(trim_chars);\n            return str.substr(lpos,rpos-lpos+1);\n        }\n        else\n        {\n            return std::basic_string<charT,traits,alloc>();\n        }\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> trim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* trim_chars = _dT(charT,\" \\t\\r\\n\")\n    ) { return trim(str,std::basic_string<charT,traits,alloc>(trim_chars)); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> rpad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const std::basic_string<charT,traits,alloc>& pad_string \n    )\n    {\n        typedef std::basic_string<charT,traits,alloc> string;\n        // if str is too big then just return str\n        if (pad_length <= static_cast<long>(str.size()))\n            return str;\n\n        // make the string we will padd onto the string\n        string P;\n        while (P.size() < pad_length - str.size())\n            P += pad_string;\n        P = P.substr(0,pad_length - str.size());\n\n        // return the padded string\n        return str + P;\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> rpad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const charT* pad_string = _dT(charT,\" \")\n    ) { return rpad(str,pad_length,std::basic_string<charT,traits,alloc>(pad_string)); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> lpad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const std::basic_string<charT,traits,alloc>& pad_string \n    )\n    {\n        typedef std::basic_string<charT,traits,alloc> string;\n        // if str is too big then just return str\n        if (pad_length <= static_cast<long>(str.size()))\n            return str;\n\n        // make the string we will padd onto the string\n        string P;\n        while (P.size() < pad_length - str.size())\n            P += pad_string;\n        P = P.substr(0,pad_length - str.size());\n\n        // return the padded string\n        return P + str;\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> lpad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const charT* pad_string = _dT(charT,\" \")\n    ) { return lpad(str,pad_length,std::basic_string<charT,traits,alloc>(pad_string)); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> pad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const std::basic_string<charT,traits,alloc>& pad_string \n    )\n    {\n        const long str_size = static_cast<long>(str.size());\n        return rpad(lpad(str,(pad_length-str_size)/2 + str_size,pad_string),  \n                    pad_length, \n                    pad_string);\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> pad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const charT* pad_string = _dT(charT,\" \")\n    ) { return pad(str,pad_length,std::basic_string<charT,traits,alloc>(pad_string)); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> left_substr (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    )\n    {\n        return str.substr(0,str.find_first_of(delim));\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> left_substr (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT,\" \\n\\r\\t\")\n    )\n    {\n        return str.substr(0,str.find_first_of(delim));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> right_substr (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    )\n    {\n        typename std::basic_string<charT,traits,alloc>::size_type delim_pos = str.find_last_of(delim);\n        if (delim_pos != std::basic_string<charT,traits,alloc>::npos)\n            return str.substr(delim_pos+1);\n        else\n            return _dT(charT,\"\");\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> right_substr (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT,\" \\n\\r\\t\")\n    )\n    {\n        typename std::basic_string<charT,traits,alloc>::size_type delim_pos = str.find_last_of(delim);\n        if (delim_pos != std::basic_string<charT,traits,alloc>::npos)\n            return str.substr(delim_pos+1);\n        else\n            return _dT(charT,\"\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    std::pair<std::basic_string<charT,traits,alloc>, std::basic_string<charT,traits,alloc> > \n    split_on_first (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT,\" \\n\\r\\t\")\n    )\n    {\n        typename std::basic_string<charT,traits,alloc>::size_type delim_pos = str.find_first_of(delim);\n        if (delim_pos != std::basic_string<charT,traits,alloc>::npos)\n            return std::make_pair(str.substr(0, delim_pos), str.substr(delim_pos+1));\n        else\n            return std::make_pair(str, _dT(charT,\"\"));\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    inline std::pair<std::basic_string<charT,traits,alloc>, std::basic_string<charT,traits,alloc> > \n    split_on_first (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    )\n    {\n        return split_on_first(str, delim.c_str());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    std::pair<std::basic_string<charT,traits,alloc>, std::basic_string<charT,traits,alloc> > \n    split_on_last (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT,\" \\n\\r\\t\")\n    )\n    {\n        typename std::basic_string<charT,traits,alloc>::size_type delim_pos = str.find_last_of(delim);\n        if (delim_pos != std::basic_string<charT,traits,alloc>::npos)\n            return std::make_pair(str.substr(0, delim_pos), str.substr(delim_pos+1));\n        else\n            return std::make_pair(str, _dT(charT,\"\"));\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    inline std::pair<std::basic_string<charT,traits,alloc>, std::basic_string<charT,traits,alloc> > \n    split_on_last (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    )\n    {\n        return split_on_last(str, delim.c_str());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::vector<std::basic_string<charT,traits,alloc> > split (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT,\" \\n\\r\\t\")\n    )\n    {\n        std::basic_string<charT,traits,alloc> temp;\n\n        std::vector<std::basic_string<charT,traits,alloc> > res;\n\n        for (unsigned long i = 0; i < str.size(); ++i)\n        {\n            // check if delim contains the character str[i]\n            bool hit = false;\n            const charT* d = delim;\n            while (*d != '\\0')\n            {\n                if (str[i] == *d)\n                {\n                    hit = true;\n                    break;\n                }\n                ++d;\n            }\n\n            if (hit)\n            {\n                if (temp.size() != 0)\n                {\n                    res.push_back(temp);\n                    temp.clear();\n                }\n            }\n            else\n            {\n                temp.push_back(str[i]);\n            }\n        }\n\n        if (temp.size() != 0)\n            res.push_back(temp);\n\n        return res;\n    }\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::vector<std::basic_string<charT,traits,alloc> > split (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    )\n    {\n        return split(str,delim.c_str());\n    }\n\n    inline const std::vector<std::string> split (\n        const char* str,\n        const char* delim = \" \\n\\r\\t\"\n    )\n    {\n        return split(std::string(str),delim);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRINg_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/string/string_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRINg_ABSTRACT_\n#ifdef DLIB_STRINg_ABSTRACT_\n\n#include <string>\n#include <iostream>\n#include <vector>\n#include \"../error.h\"\n\nnamespace dlib\n{\n\n// ---------------------------------------------------------------------------------------- \n\n    class string_cast_error : public error\n    {\n    public:\n        string_cast_error():error(ECAST_TO_STRING) {}\n    };\n\n    template <\n        typename T,\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const T string_cast (\n        const std::basic_string<charT,traits,alloc>& str\n    );\n    /*!\n        requires\n            - T is not a pointer type\n        ensures\n            - returns str converted to T\n        throws\n            - string_cast_error\n                This exception is thrown if string_cast() is unable to convert\n                str into a T.  Also, string_cast_error::info == str\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class string_assign\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple tool which provides an alternative syntax for using\n                the string_cast() function.  It can be understood by considering\n                the following example:\n\n                    string_assign sa;\n                    int val;\n                    double dval;\n\n                    val  = sa = \"1234\";   // executes: val = string_cast<int>(\"1234\");\n                    dval = sa = \"3.141\";  // executes: val = string_cast<double>(\"3.141\");\n\n                After executing, val will be equal to 1234 and dval will be 3.141.\n                Note that you can use string_assign to assign to any type which you could\n                use with string_cast(), except for std::basic_string, assigning to this\n                type is ambiguous for boring technical reasons.  But there isn't much\n                point in using this tool to assign from one string to another so it doesn't \n                matter.   \n\n                Additionally, note that there is a global instance of this object, dlib::sa. \n                So you never have to create a string_assign object yourself.  Finally, this \n                object is totally stateless and threadsafe.   \n        !*/\n    };\n\n    const string_assign sa = string_assign();\n\n// ----------------------------------------------------------------------------------------\n\n    class cast_to_string_error : public error\n    {\n    public:\n        cast_to_string_error():error(ECAST_TO_STRING) {}\n    };\n\n    template <\n        typename T\n        >\n    const std::string cast_to_string (\n        const T& item \n    );\n    /*!\n        requires\n            - T is not a pointer type\n        ensures\n            - returns item converted to std::string\n        throws\n            - cast_to_string_error\n                This exception is thrown if cast_to_string() is unable to convert\n                item into a std::string.  \n    !*/\n\n    template <\n        typename T\n        >\n    const std::wstring cast_to_wstring (\n        const T& item \n    );\n    /*!\n        requires\n            - T is not a pointer type\n        ensures\n            - returns item converted to std::wstring\n        throws\n            - cast_to_string_error\n                This exception is thrown if cast_to_string() is unable to convert\n                item into a std::string.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    std::string pad_int_with_zeros (\n        int i,\n        unsigned long width = 6\n    );\n    /*!\n        ensures\n            - converts i into a string of at least width characters in length.  If\n              necessary, the string will be padded with leading zeros to get\n              to width characters.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::string narrow (\n        const std::basic_string<charT,traits,alloc>& str\n    );\n    /*!\n        ensures\n            - returns str as a std::string by converting every character in it to a char.\n              Note that any characters that do not have a mapping to type char will be \n              converted to a space.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> wrap_string (\n        const std::basic_string<charT,traits,alloc>& str,\n        const unsigned long first_pad = 0,\n        const unsigned long rest_pad = 0,\n        const unsigned long max_per_line = 79\n    );\n    /*!\n        requires\n            - first_pad < max_per_line\n            - rest_pad < max_per_line\n            - rest_pad >= first_pad\n        ensures\n            - returns a copy of str S such that:\n                - S is broken up into lines separated by the \\n character.\n                - The first line starts with first_pad space characters.\n                - The second and all subsequent lines start with rest_pad space characters.\n                - The first line is no longer than max_per_line - (rest_pad-first_pad) characters.\n                - The second and all subsequent lines are no longer than max_per_line characters. \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename traits \n        typename alloc\n        >\n    const std::basic_string<char,traits,alloc> tolower (\n        const std::basic_string<char,traits,alloc>& str\n    );\n    /*!\n        ensures\n            - returns a copy of str S such that:\n                - #S.size() == str.size()\n                - #S[i] == std::tolower(str[i])\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<char,traits,alloc> toupper (\n        const std::basic_string<char,traits,alloc>& str\n    );\n    /*!\n        ensures\n            - returns a copy of str S such that:\n                - #S.size() == str.size()\n                - #S[i] == std::toupper(str[i])\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    bool strings_equal_ignore_case (\n        const std::basic_string<char,traits,alloc>& str1,\n        const std::basic_string<char,traits,alloc>& str2\n    );\n    /*!\n        ensures\n            - returns tolower(str1) == tolower(str2)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename traits,\n        typename alloc\n        >\n    bool strings_equal_ignore_case (\n        const std::basic_string<char,traits,alloc>& str1,\n        const std::basic_string<char,traits,alloc>& str2,\n        unsigned long num\n    );\n    /*!\n        ensures\n            - returns tolower(str1.substr(0,num)) == tolower(str2.substr(0,num))\n              (i.e. only compares the first num characters)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> ltrim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& trim_chars \n    );\n    /*!\n        ensures\n            - returns a copy of str with any leading trim_chars  \n              from the left side of the string removed. \n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> ltrim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* trim_chars = _dT(charT,\" \\t\\r\\n\")\n    );\n    /*!\n        requires\n            - trim_chars == a valid null-terminated C string\n        ensures\n            - returns ltrim(str, std::basic_string<charT,traits,alloc>(trim_chars))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> rtrim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& trim_chars \n    );\n    /*!\n        ensures\n            - returns a copy of str with any trailing trim_chars \n              from the right side of the string removed. \n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> rtrim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* trim_chars = _dT(charT,\" \\t\\r\\n\")\n    );\n    /*!\n        requires\n            - trim_chars == a valid null-terminated C string\n        ensures\n            - returns rtrim(str, std::basic_string<charT,traits,alloc>(trim_chars))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> trim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& trim_chars \n    );\n    /*!\n        ensures\n            - returns a copy of str with any leading or trailing trim_chars \n              from the ends of the string removed. \n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> trim (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* trim_chars = _dT(charT,\" \\t\\r\\n\")\n    );\n    /*!\n        requires\n            - trim_chars == a valid null-terminated C string\n        ensures\n            - returns trim(str, std::basic_string<charT,traits,alloc>(trim_chars))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> rpad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const std::basic_string<charT,traits,alloc>& pad_string \n    );\n    /*!\n        ensures\n            - if (pad_length <= str.size()) then\n                - returns str\n            - else\n                - let P be a string defined as follows:\n                    - P.size() == pad_length - str.size()\n                    - P == (pad_string + pad_string + ... + pad_string).substr(0,pad_length - str.size())\n                      (i.e. P == a string with the above specified size that contains just\n                      repitions of the pad_string)\n                - returns the string str + P \n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> rpad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const charT* pad_string = _dT(charT,\" \")\n    );\n    /*!\n        requires\n            - pad_string == a valid null-terminated C string\n        ensures\n            - returns rpad(str, pad_length, std::basic_string<charT,traits,alloc>(pad_string))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> lpad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const std::basic_string<charT,traits,alloc>& pad_string \n    );\n    /*!\n        ensures\n            - if (pad_length <= str.size()) then\n                - returns str\n            - else\n                - let P be a string defined as follows:\n                    - P.size() == pad_length - str.size()\n                    - P == (pad_string + pad_string + ... + pad_string).substr(0,pad_length - str.size())\n                      (i.e. P == a string with the above specified size that contains just\n                      repitions of the pad_string)\n                - returns the string P + str\n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> lpad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const charT* pad_string = _dT(charT,\" \")\n    );\n    /*!\n        requires\n            - pad_string == a valid null-terminated C string\n        ensures\n            - returns lpad(str, pad_length, std::basic_string<charT,traits,alloc>(pad_string))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> pad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const std::basic_string<charT,traits,alloc>& pad_string \n    );\n    /*!\n        ensures\n            - let str_size == static_cast<long>(str.size())\n            - returns rpad( lpad(str, (pad_length-str_size)/2 + str_size, pad_string),  \n                            pad_length, \n                            pad_string);\n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> pad (\n        const std::basic_string<charT,traits,alloc>& str,\n        long pad_length,\n        const charT* pad_string = _dT(charT,\" \")\n    );\n    /*!\n        requires\n            - pad_string == a valid null-terminated C string\n        ensures\n            - returns pad(str, pad_length, std::basic_string<charT,traits,alloc>(pad_string))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> left_substr (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    );\n    /*!\n        ensures\n            - let delim_pos = str.find_first_of(delim)\n            - returns str.substr(0,delim_pos)\n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> left_substr (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT,\" \\n\\r\\t\")\n    );\n    /*!\n        requires\n            - delim == a valid null-terminated C string\n        ensures\n            - returns left_substr(str, std::basic_string<charT,traits,alloc>(delim))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> right_substr (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    );\n    /*!\n        ensures\n            - let delim_pos = str.find_last_of(delim)\n            - if (delim_pos == std::string::npos) then\n                - returns \"\"\n            - else\n                - returns str.substr(delim_pos+1)\n    !*/\n\n    template <\n        typename charT,\n        typename traits\n        typename alloc\n        >\n    const std::basic_string<charT,traits,alloc> right_substr (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT,\" \\n\\r\\t\")\n    );\n    /*!\n        requires\n            - delim == a valid null-terminated C string\n        ensures\n            - returns right_substr(str, std::basic_string<charT,traits,alloc>(delim))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    std::pair<std::basic_string<charT,traits,alloc>, std::basic_string<charT,traits,alloc> > \n    split_on_first (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT, \" \\n\\r\\t\")\n    );\n    /*!\n        ensures\n            - This function splits string into two parts, the split is based on the first\n              occurrence of any character from delim.  \n            - let delim_pos = str.find_first_of(delim)\n            - if (delim_pos == std::string::npos) then\n                - returns make_pair(str,\"\")\n            - else\n                - return make_pair(str.substr(0, delim_pos), str.substr(delim_pos+1));\n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    std::pair<std::basic_string<charT,traits,alloc>, std::basic_string<charT,traits,alloc> > \n    split_on_first (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    );\n    /*!\n        requires\n            - delim == a valid null-terminated C string\n        ensures\n            - returns split_on_first(str, delim.c_str())\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    std::pair<std::basic_string<charT,traits,alloc>, std::basic_string<charT,traits,alloc> > \n    split_on_last (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT, \" \\n\\r\\t\")\n    );\n    /*!\n        ensures\n            - This function splits string into two parts, the split is based on the last \n              occurrence of any character from delim.  \n            - let delim_pos = str.find_last_of(delim)\n            - if (delim_pos == std::string::npos) then\n                - returns make_pair(str,\"\")\n            - else\n                - return make_pair(str.substr(0, delim_pos), str.substr(delim_pos+1));\n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    std::pair<std::basic_string<charT,traits,alloc>, std::basic_string<charT,traits,alloc> > \n    split_on_last (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    );\n    /*!\n        requires\n            - delim == a valid null-terminated C string\n        ensures\n            - returns split_on_last(str, delim.c_str())\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::vector<std::basic_string<charT,traits,alloc> > split (\n        const std::basic_string<charT,traits,alloc>& str,\n        const std::basic_string<charT,traits,alloc>& delim \n    );\n    /*!\n        ensures\n            - Breaks the given string str into a sequence of substrings delimited\n              by characters in delim and returns the results.  \n            - returns a vector V such that:\n                - V.size() == the number of substrings found in str.\n                - for all i: V[i] == The ith substring.  Note that it will not contain\n                  any delimiter characters (i.e. characters in delim).  It will also\n                  never be an empty string.\n                - V contains the substrings in the order in which they appear in str.\n                  That is, V[0] contains the first substring, V[1] the second, and\n                  so on.\n    !*/\n\n    template <\n        typename charT,\n        typename traits,\n        typename alloc\n        >\n    const std::vector<std::basic_string<charT,traits,alloc> > split (\n        const std::basic_string<charT,traits,alloc>& str,\n        const charT* delim = _dT(charT,\" \\n\\r\\t\")\n    );\n    /*!\n        requires\n            - trim_chars == a valid null-terminated C string\n        ensures\n            - returns split(str, std::basic_string<charT,traits,alloc>(delim))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRINg_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/string.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRINg_TOP_\n#define DLIB_STRINg_TOP_ \n\n#include \"string/string.h\"\n\n#endif // DLIB_STRINg_TOP_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/active_learning.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ACTIVE_LEARnING_Hh_\n#define DLIB_ACTIVE_LEARnING_Hh_\n\n#include \"active_learning_abstract.h\"\n\n#include \"svm_c_linear_dcd_trainer.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n    enum active_learning_mode\n    {\n        max_min_margin,\n        ratio_margin\n    };\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type,\n        typename in_sample_vector_type2\n        >\n    std::vector<unsigned long> impl_rank_unlabeled_training_samples (\n        const svm_c_linear_dcd_trainer<kernel_type>& trainer,\n        const in_sample_vector_type& samples,\n        const in_scalar_vector_type& labels,\n        const in_sample_vector_type2& unlabeled_samples,\n        const active_learning_mode mode \n    )\n    {\n        DLIB_ASSERT(is_vector(unlabeled_samples) &&\n                     (samples.size() == 0 || is_learning_problem(samples, labels)) ,\n                \"\\t std::vector<unsigned long> rank_unlabeled_training_samples()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t is_vector(unlabeled_samples):         \" << is_vector(unlabeled_samples) \n                << \"\\n\\t is_learning_problem(samples, labels): \" << is_learning_problem(samples, labels) \n                << \"\\n\\t samples.size(): \" << samples.size() \n                << \"\\n\\t labels.size():  \" << labels.size() \n                );\n\n        // If there aren't any training samples then all unlabeled_samples are equally good.\n        // So just report an arbitrary ordering.\n        if (samples.size() == 0 || unlabeled_samples.size() == 0)\n        {\n            std::vector<unsigned long> ret(unlabeled_samples.size());\n            for (unsigned long i = 0; i < ret.size(); ++i)\n                ret[i] = i;\n\n            return ret;\n        }\n\n        // We are going to score each unlabeled sample and put the score and index into\n        // results.  Then at the end of this function we just sort it and return the indices.\n        std::vector<std::pair<double, unsigned long> > results;\n        results.resize(unlabeled_samples.size());\n\n        // make sure we use this trainer's ability to warm start itself since that will make\n        // this whole function run a lot faster.  But first, we need to find out what the state\n        // we will be warm starting from is. \n        typedef typename svm_c_linear_dcd_trainer<kernel_type>::optimizer_state optimizer_state;\n        optimizer_state state;\n        trainer.train(samples, labels, state); // call train() just to get state\n\n        decision_function<kernel_type> df;\n\n        std::vector<typename kernel_type::sample_type> temp_samples;\n        std::vector<typename kernel_type::scalar_type> temp_labels;\n        temp_samples.reserve(samples.size()+1);\n        temp_labels.reserve(labels.size()+1);\n        temp_samples.assign(samples.begin(), samples.end());\n        temp_labels.assign(labels.begin(), labels.end());\n        temp_samples.resize(temp_samples.size()+1);\n        temp_labels.resize(temp_labels.size()+1);\n\n\n        for (long i = 0; i < unlabeled_samples.size(); ++i)\n        {\n            temp_samples.back() = unlabeled_samples(i);\n            // figure out the margin for each possible labeling of this sample.\n\n            optimizer_state temp(state);\n            temp_labels.back() = +1;\n            df = trainer.train(temp_samples, temp_labels, temp);\n            const double margin_p = temp_labels.back()*df(temp_samples.back());\n\n            temp = state;\n            temp_labels.back() = -1;\n            df = trainer.train(temp_samples, temp_labels, temp);\n            const double margin_n = temp_labels.back()*df(temp_samples.back());\n\n            if (mode == max_min_margin)\n            {\n                // The score for this sample is its min possible margin over possible labels.\n                // Therefore, this score measures how much flexibility we have to label this\n                // sample however we want.  The intuition being that the most useful points to\n                // label are the ones that are still free to obtain either label.\n                results[i] = std::make_pair(std::min(margin_p, margin_n), i);\n            }\n            else\n            {\n                // In this case, the score for the sample is a ratio that tells how close the\n                // two margin values are to each other.  The closer they are the better.  So in\n                // this case we are saying we are looking for samples that have the same\n                // preference for either class label. \n                if (std::abs(margin_p) >= std::abs(margin_n))\n                {\n                    if (margin_p != 0)\n                        results[i] = std::make_pair(margin_n/margin_p, i);\n                    else // if both are == 0 then say 0/0 == 1\n                        results[i] = std::make_pair(1, i);\n                }\n                else\n                {\n                    results[i] = std::make_pair(margin_p/margin_n, i);\n                }\n            }\n        }\n\n        // sort the results so the highest scoring samples come first.\n        std::sort(results.rbegin(), results.rend());\n\n        // transfer results into a vector with just sample indices so we can return it.\n        std::vector<unsigned long> ret(results.size());\n        for (unsigned long i = 0; i < ret.size(); ++i)\n            ret[i] = results[i].second;\n        return ret;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type,\n        typename in_sample_vector_type2\n        >\n    std::vector<unsigned long> rank_unlabeled_training_samples (\n        const svm_c_linear_dcd_trainer<kernel_type>& trainer,\n        const in_sample_vector_type& samples,\n        const in_scalar_vector_type& labels,\n        const in_sample_vector_type2& unlabeled_samples,\n        const active_learning_mode mode = max_min_margin\n    )\n    {\n        return impl_rank_unlabeled_training_samples(trainer,\n                                                    mat(samples),\n                                                    mat(labels),\n                                                    mat(unlabeled_samples),\n                                                    mode);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ACTIVE_LEARnING_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/active_learning_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ACTIVE_LEARnING_ABSTRACT_Hh_\n#ifdef DLIB_ACTIVE_LEARnING_ABSTRACT_Hh_\n\n#include \"svm_c_linear_dcd_trainer_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    enum active_learning_mode\n    {\n        max_min_margin,\n        ratio_margin\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type,\n        typename in_sample_vector_type2\n        >\n    std::vector<unsigned long> rank_unlabeled_training_samples (\n        const svm_c_linear_dcd_trainer<kernel_type>& trainer,\n        const in_sample_vector_type& samples,\n        const in_scalar_vector_type& labels,\n        const in_sample_vector_type2& unlabeled_samples,\n        const active_learning_mode mode = max_min_margin\n    );\n    /*!\n        requires\n            - if (samples.size() != 0) then\n                - it must be legal to call trainer.train(samples, labels)\n                - is_learning_problem(samples, labels) == true\n            - unlabeled_samples must contain the same kind of vectors as samples.\n            - unlabeled_samples, samples, and labels must be matrices or types of \n              objects convertible to a matrix via mat().\n            - is_vector(unlabeled_samples) == true\n        ensures\n            - Suppose that we wish to learn a binary classifier by calling\n              trainer.train(samples, labels) but we are also interested in selecting one of\n              the elements of unlabeled_samples to add to our training data.  Since doing\n              this requires us to find out the label of the sample, a potentially tedious\n              or expensive process, we would like to select the \"best\" element from\n              unlabeled_samples for labeling.  The rank_unlabeled_training_samples()\n              attempts to find this \"best\" element.  In particular, this function returns a\n              ranked list of all the elements in unlabeled_samples such that that the\n              \"best\" elements come first.\n            - The method used by this function is described in the paper:\n                Support Vector Machine Active Learning with Applications to Text Classification\n                by Simon Tong and Daphne Koller\n              In particular, this function implements the MaxMin Margin and Ratio Margin \n              selection strategies described in the paper.  Moreover, the mode argument\n              to this function selects which of these strategies is used.\n            - returns a std::vector V such that:\n                - V contains a list of all the indices from unlabeled_samples.  Moreover,\n                  they are ordered so that the most useful samples come first.\n                - V.size() == unlabeled_samples.size()\n                - unlabeled_samples[V[0]] == The best sample to add into the training set.\n                - unlabeled_samples[V[1]] == The second best sample to add into the training set.\n                - unlabeled_samples[V[i]] == The i-th best sample to add into the training set.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ACTIVE_LEARnING_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/assignment_function.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ASSIGNMENT_FuNCTION_Hh_\n#define DLIB_ASSIGNMENT_FuNCTION_Hh_\n\n#include \"assignment_function_abstract.h\"\n#include \"../matrix.h\"\n#include <vector>\n#include \"../optimization/max_cost_assignment.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor \n        >\n    class assignment_function\n    {\n    public:\n\n        typedef typename feature_extractor::lhs_element lhs_element;\n        typedef typename feature_extractor::rhs_element rhs_element;\n\n\n        typedef std::pair<std::vector<lhs_element>, std::vector<rhs_element> > sample_type;\n\n        typedef std::vector<long> label_type;\n        typedef label_type result_type;\n\n        assignment_function()\n        {\n            weights.set_size(fe.num_features());\n            weights = 0;\n            bias = 0;\n            force_assignment = false;\n        }\n\n        explicit assignment_function(\n            const matrix<double,0,1>& weights_,\n            double bias_\n        ) : \n            weights(weights_),\n            bias(bias_),\n            force_assignment(false)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(fe.num_features() == static_cast<unsigned long>(weights_.size()),\n                \"\\t assignment_function::assignment_function(weights_)\"\n                << \"\\n\\t These sizes should match\"\n                << \"\\n\\t fe.num_features(): \" << fe.num_features() \n                << \"\\n\\t weights_.size():   \" << weights_.size() \n                << \"\\n\\t this: \" << this\n                );\n\n        }\n\n        assignment_function(\n            const matrix<double,0,1>& weights_,\n            double bias_,\n            const feature_extractor& fe_\n        ) :\n            fe(fe_),\n            weights(weights_),\n            bias(bias_),\n            force_assignment(false)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(fe_.num_features() == static_cast<unsigned long>(weights_.size()),\n                \"\\t assignment_function::assignment_function(weights_,fe_)\"\n                << \"\\n\\t These sizes should match\"\n                << \"\\n\\t fe_.num_features(): \" << fe_.num_features() \n                << \"\\n\\t weights_.size():    \" << weights_.size() \n                << \"\\n\\t this: \" << this\n                );\n        }\n\n        assignment_function(\n            const matrix<double,0,1>& weights_,\n            double bias_,\n            const feature_extractor& fe_,\n            bool force_assignment_\n        ) :\n            fe(fe_),\n            weights(weights_),\n            bias(bias_),\n            force_assignment(force_assignment_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(fe_.num_features() == static_cast<unsigned long>(weights_.size()),\n                \"\\t assignment_function::assignment_function(weights_,fe_,force_assignment_)\"\n                << \"\\n\\t These sizes should match\"\n                << \"\\n\\t fe_.num_features(): \" << fe_.num_features() \n                << \"\\n\\t weights_.size():    \" << weights_.size() \n                << \"\\n\\t this: \" << this\n                );\n        }\n\n        const feature_extractor& get_feature_extractor (\n        ) const { return fe; }\n\n        const matrix<double,0,1>& get_weights (\n        ) const { return weights; }\n\n        double get_bias (\n        ) const { return bias; }\n\n        bool forces_assignment (\n        ) const { return force_assignment; }\n\n        void predict_assignments (\n            const std::vector<lhs_element>& lhs,\n            const std::vector<rhs_element>& rhs,\n            result_type& assignment\n        ) const\n        {\n            assignment.clear();\n\n            matrix<double> cost;\n            unsigned long size;\n            if (force_assignment)\n            {\n                size = std::max(lhs.size(), rhs.size());\n            }\n            else\n            {\n                size = rhs.size() + lhs.size();\n            }\n            cost.set_size(size, size);\n\n            typedef typename feature_extractor::feature_vector_type feature_vector_type;\n            feature_vector_type feats;\n\n            // now fill out the cost assignment matrix\n            for (long r = 0; r < cost.nr(); ++r)\n            {\n                for (long c = 0; c < cost.nc(); ++c)\n                {\n                    if (r < (long)lhs.size() && c < (long)rhs.size())\n                    {\n                        fe.get_features(lhs[r], rhs[c], feats);\n                        cost(r,c) = dot(weights, feats) + bias;\n                    }\n                    else\n                    {\n                        cost(r,c) = 0;\n                    }\n                }\n            }\n\n\n            if (cost.size() != 0)\n            {\n                // max_cost_assignment() only works with integer matrices, so convert from\n                // double to integer.\n                const double scale = (std::numeric_limits<dlib::int64>::max()/1000)/max(abs(cost));\n                matrix<dlib::int64> int_cost = matrix_cast<dlib::int64>(round(cost*scale));\n                assignment = max_cost_assignment(int_cost);\n                assignment.resize(lhs.size());\n            }\n\n            // adjust assignment so that non-assignments have a value of -1\n            for (unsigned long i = 0; i < assignment.size(); ++i)\n            {\n                if (assignment[i] >= (long)rhs.size())\n                    assignment[i] = -1;\n            }\n        }\n\n        void predict_assignments (\n            const sample_type& item,\n            result_type& assignment\n        ) const\n        {\n            predict_assignments(item.first, item.second, assignment);\n        }\n\n        result_type operator()(\n            const std::vector<lhs_element>& lhs,\n            const std::vector<rhs_element>& rhs \n        ) const\n        {\n            result_type temp;\n            predict_assignments(lhs,rhs,temp);\n            return temp;\n        }\n\n        result_type operator() (\n            const sample_type& item\n        ) const\n        {\n            return (*this)(item.first, item.second);\n        }\n\n    private:\n\n\n        feature_extractor fe;\n        matrix<double,0,1> weights;\n        double bias;\n        bool force_assignment;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void serialize (\n        const assignment_function<feature_extractor>& item,\n        std::ostream& out\n    )\n    {\n        int version = 2;\n        serialize(version, out);\n        serialize(item.get_feature_extractor(), out);\n        serialize(item.get_weights(), out);\n        serialize(item.get_bias(), out);\n        serialize(item.forces_assignment(), out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void deserialize (\n        assignment_function<feature_extractor>& item,\n        std::istream& in \n    )\n    {\n        feature_extractor fe;\n        matrix<double,0,1> weights;\n        double bias;\n        bool force_assignment;\n        int version = 0;\n        deserialize(version, in);\n        if (version != 2)\n            throw serialization_error(\"Unexpected version found while deserializing dlib::assignment_function.\");\n\n        deserialize(fe, in);\n        deserialize(weights, in);\n        deserialize(bias, in);\n        deserialize(force_assignment, in);\n\n        item = assignment_function<feature_extractor>(weights, bias, fe, force_assignment);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ASSIGNMENT_FuNCTION_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/assignment_function_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ASSIGNMENT_FuNCTION_ABSTRACT_Hh_\n#ifdef DLIB_ASSIGNMENT_FuNCTION_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../optimization/max_cost_assignment_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class example_feature_extractor\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines the interface a feature extractor must implement\n                if it is to be used with the assignment_function defined at the bottom\n                of this file.  \n                \n                The model used by assignment_function objects is the following.  \n                Given two sets of objects, the Left Hand Set (LHS) and Right Hand Set (RHS),\n                find a one-to-one mapping M from LHS into RHS such that:\n                    M == argmax_m  sum_{l in LHS} match_score(l,m(l))\n                Where match_score() returns a scalar value indicating how good it is\n                to say l maps to the RHS element m(l).  Additionally, in this model, \n                m() is allowed to indicate that l doesn't map to anything, and in this \n                case it is excluded from the sum.    \n\n                Finally, match_score() is defined as: \n                    match_score(l,r) == dot(w, PSI(l,r)) + bias\n                where l is an element of LHS, r is an element of RHS, w is a parameter\n                vector and bias is a scalar valued parameter.\n\n                Therefore, a feature extractor defines how the PSI() feature vector \n                is calculated.  In particular, PSI() is defined by the get_features()\n                method of this class.\n\n            THREAD SAFETY\n                Instances of this object are required to be threadsafe, that is, it should\n                be safe for multiple threads to make concurrent calls to the member\n                functions of this object.\n\n        !*/\n\n    public:\n\n        // This type should be a dlib::matrix capable of storing column vectors\n        // or an unsorted sparse vector type as defined in dlib/svm/sparse_vector_abstract.h.\n        typedef matrix_or_sparse_vector_type feature_vector_type;\n\n        // These two typedefs define the types used to represent an element in \n        // the left hand and right hand sets.  You can use any copyable types here.\n        typedef user_defined_type_1 lhs_element;\n        typedef user_defined_type_2 rhs_element;\n\n        unsigned long num_features(\n        ) const;\n        /*!\n            ensures\n                - returns the dimensionality of the PSI() feature vector.  \n        !*/\n\n        void get_features (\n            const lhs_element& left,\n            const rhs_element& right,\n            feature_vector_type& feats\n        ) const;\n        /*!\n            ensures\n                - #feats == PSI(left,right)\n                  (i.e. This function computes a feature vector which, in some sense, \n                  captures information useful for deciding if matching left to right \n                  is \"good\").\n        !*/\n\n        unsigned long num_nonnegative_weights (\n        ) const;\n        /*!\n            ensures\n                - returns the number of elements of the w parameter vector which should be\n                  non-negative.  That is, this feature extractor is intended to be used\n                  with w vectors where the first num_nonnegative_weights() elements of w\n                  are >= 0.  That is, it should be the case that w(i) >= 0 for all i <\n                  num_nonnegative_weights().\n                - Note that num_nonnegative_weights() is just an optional method to allow\n                  you to tell a tool like the structural_assignment_trainer that the\n                  learned w should have a certain number of non-negative elements.\n                  Therefore, if you do not provide a num_nonnegative_weights() method in\n                  your feature extractor then it will default to a value of 0, indicating\n                  that all elements of the w parameter vector may be any value.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize(\n        const example_feature_extractor& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize(\n        example_feature_extractor& item, \n        std::istream& in\n    );\n    /*!\n        provides deserialization support \n    !*/\n\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor \n        >\n    class assignment_function\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor\n                It must be an object that implements an interface compatible with \n                the example_feature_extractor discussed above.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for solving the optimal assignment problem given a \n                user defined method for computing the quality of any particular assignment. \n\n                To define this precisely, suppose you have two sets of objects, a \n                Left Hand Set (LHS) and a Right Hand Set (RHS) and you want to \n                find a one-to-one mapping M from LHS into RHS such that:\n                    M == argmax_m  sum_{l in LHS} match_score(l,m(l))\n                Where match_score() returns a scalar value indicating how good it is\n                to say l maps to the RHS element m(l).  Additionally, in this model, \n                m() is allowed to indicate that l doesn't map to anything, and in this \n                case it is excluded from the sum.    \n\n                Finally, this object supports match_score() functions of the form: \n                    match_score(l,r) == dot(w, PSI(l,r)) + bias\n                where l is an element of LHS, r is an element of RHS, w is a parameter\n                vector, bias is a scalar valued parameter, and PSI() is defined by the\n                feature_extractor template argument.  \n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call the const members of this object from multiple\n                    threads so long as the feature_extractor is also threadsafe.  This is\n                    because the const members are purely read-only operations.  However,\n                    any operation that modifies an assignment_function is not threadsafe.\n        !*/\n\n    public:\n\n        typedef typename feature_extractor::lhs_element  lhs_element;\n        typedef typename feature_extractor::rhs_element  rhs_element;\n        typedef          std::vector<long>               label_type;\n        typedef          label_type                      result_type;\n        typedef std::pair<std::vector<lhs_element>, std::vector<rhs_element> > sample_type;\n\n        assignment_function(\n        );\n        /*!\n            ensures\n                - #get_feature_extractor() == feature_extractor() \n                  (i.e. it will have its default value)\n                - #get_weights().size() == #get_feature_extractor().num_features()\n                - #get_weights() == 0\n                - #get_bias() == 0\n                - #forces_assignment() == false \n        !*/\n\n        explicit assignment_function(\n            const matrix<double,0,1>& weights,\n            double bias\n        );\n        /*!\n            requires\n                - feature_extractor().num_features() == weights.size()\n            ensures\n                - #get_feature_extractor() == feature_extractor() \n                  (i.e. it will have its default value)\n                - #get_weights() == weights\n                - #get_bias() == bias\n                - #forces_assignment() == false \n        !*/\n\n        assignment_function(\n            const matrix<double,0,1>& weights,\n            double bias,\n            const feature_extractor& fe\n        );\n        /*!\n            requires\n                - fe.num_features() == weights.size()\n            ensures\n                - #get_feature_extractor() == fe\n                - #get_weights() == weights\n                - #get_bias() == bias\n                - #forces_assignment() == false \n        !*/\n\n        assignment_function(\n            const matrix<double,0,1>& weights,\n            double bias,\n            const feature_extractor& fe,\n            bool force_assignment\n        );\n        /*!\n            requires\n                - fe.num_features() == weights.size()\n            ensures\n                - #get_feature_extractor() == fe\n                - #get_weights() == weights\n                - #get_bias() == bias\n                - #forces_assignment() == force_assignment\n        !*/\n\n        const feature_extractor& get_feature_extractor (\n        ) const;\n        /*!\n            ensures\n                - returns the feature extractor used by this object\n        !*/\n\n        const matrix<double,0,1>& get_weights (\n        ) const;\n        /*!\n            ensures\n                - returns the parameter vector (w) associated with this assignment function. \n                  The length of the vector is get_feature_extractor().num_features().  \n        !*/\n\n        double get_bias (\n        ) const;\n        /*!\n            ensures\n                - returns the bias parameter associated with this assignment function.\n        !*/\n\n        bool forces_assignment (\n        ) const; \n        /*!\n            ensures\n                - returns true if this object is in the \"forced assignment mode\" and false\n                  otherwise.\n                - When deciding how to match LHS to RHS, this object can operate in one of \n                  two modes.  In the default mode, this object will indicate that there is \n                  no match for an element of LHS if the best matching element of RHS would \n                  result in a negative match_score().  However, in the \"forced assignment mode\",\n                  this object will always make the assignment if there is an available \n                  element in RHS, regardless of the match_score().\n\n                  Another way to understand this distinction is to consider an example.  \n                  Suppose LHS and RHS both contain 10 elements.  Then in the default mode, \n                  it is possible for this object to indicate that there are anywhere between \n                  0 to 10 matches between LHS and RHS.  However, in forced assignment mode \n                  it will always indicate exactly 10 matches.   \n        !*/\n\n        result_type operator()(\n            const std::vector<lhs_element>& lhs,\n            const std::vector<rhs_element>& rhs \n        ) const\n        /*!\n            ensures\n                - returns a vector ASSIGN such that:\n                    - ASSIGN.size() == lhs.size()\n                    - if (ASSIGN[i] != -1) then\n                        - lhs[i] is predicted to associate to rhs[ASSIGN[i]].\n                    - else\n                        - lhs[i] doesn't associate with anything in rhs.\n                    - All values in ASSIGN which are not equal to -1 are unique.  \n                      That is, ASSIGN will never indicate that more than one element\n                      of lhs is assigned to a particular element of rhs.\n        !*/\n\n        result_type operator() (\n            const sample_type& item\n        ) const;\n        /*!\n            ensures\n                - returns (*this)(item.first, item.second);\n        !*/\n\n        void predict_assignments (\n            const sample_type& item,\n            result_type& assignment\n        ) const;\n        /*!\n            ensures\n                - #assignment == (*this)(item)\n        !*/\n\n        void predict_assignments (\n            const std::vector<lhs_element>& lhs,\n            const std::vector<rhs_element>& rhs \n            result_type& assignment\n        ) const;\n        /*!\n            ensures\n                - #assignment == (*this)(lhs,rhs)\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void serialize (\n        const assignment_function<feature_extractor>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void deserialize (\n        assignment_function<feature_extractor>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ASSIGNMENT_FuNCTION_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_assignment_trainer.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CROSS_VALIDATE_ASSiGNEMNT_TRAINER_Hh_\n#define DLIB_CROSS_VALIDATE_ASSiGNEMNT_TRAINER_Hh_\n\n#include \"cross_validate_assignment_trainer_abstract.h\"\n#include <vector>\n#include \"../matrix.h\"\n#include \"svm.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename assignment_function\n        >\n    double test_assignment_function (\n        const assignment_function& assigner,\n        const std::vector<typename assignment_function::sample_type>& samples,\n        const std::vector<typename assignment_function::label_type>& labels\n    )\n    {\n        // make sure requires clause is not broken\n#ifdef ENABLE_ASSERTS\n        if (assigner.forces_assignment())\n        {\n            DLIB_ASSERT(is_forced_assignment_problem(samples, labels),\n                \"\\t double test_assignment_function()\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t is_forced_assignment_problem(samples,labels): \" << is_forced_assignment_problem(samples,labels)\n                << \"\\n\\t is_assignment_problem(samples,labels):        \" << is_assignment_problem(samples,labels)\n                << \"\\n\\t is_learning_problem(samples,labels):          \" << is_learning_problem(samples,labels)\n                );\n        }\n        else\n        {\n            DLIB_ASSERT(is_assignment_problem(samples, labels),\n                \"\\t double test_assignment_function()\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t is_assignment_problem(samples,labels): \" << is_assignment_problem(samples,labels)\n                << \"\\n\\t is_learning_problem(samples,labels):   \" << is_learning_problem(samples,labels)\n                );\n        }\n#endif\n        double total_right = 0;\n        double total = 0;\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            const std::vector<long>& out = assigner(samples[i]);\n            for (unsigned long j = 0; j < out.size(); ++j)\n            {\n                if (out[j] == labels[i][j])\n                    ++total_right;\n\n                ++total;\n            }\n        }\n\n        if (total != 0)\n            return total_right/total;\n        else\n            return 1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    double cross_validate_assignment_trainer (\n        const trainer_type& trainer,\n        const std::vector<typename trainer_type::sample_type>& samples,\n        const std::vector<typename trainer_type::label_type>& labels,\n        const long folds\n    )\n    {\n        // make sure requires clause is not broken\n#ifdef ENABLE_ASSERTS\n        if (trainer.forces_assignment())\n        {\n            DLIB_ASSERT(is_forced_assignment_problem(samples, labels) &&\n                        1 < folds && folds <= static_cast<long>(samples.size()),\n                \"\\t double cross_validate_assignment_trainer()\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t samples.size(): \" << samples.size() \n                << \"\\n\\t folds:  \" << folds \n                << \"\\n\\t is_forced_assignment_problem(samples,labels): \" << is_forced_assignment_problem(samples,labels)\n                << \"\\n\\t is_assignment_problem(samples,labels):        \" << is_assignment_problem(samples,labels)\n                << \"\\n\\t is_learning_problem(samples,labels):          \" << is_learning_problem(samples,labels)\n                );\n        }\n        else\n        {\n            DLIB_ASSERT(is_assignment_problem(samples, labels) &&\n                        1 < folds && folds <= static_cast<long>(samples.size()),\n                \"\\t double cross_validate_assignment_trainer()\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t samples.size(): \" << samples.size() \n                << \"\\n\\t folds:  \" << folds \n                << \"\\n\\t is_assignment_problem(samples,labels): \" << is_assignment_problem(samples,labels)\n                << \"\\n\\t is_learning_problem(samples,labels):   \" << is_learning_problem(samples,labels)\n                );\n        }\n#endif\n\n\n\n        typedef typename trainer_type::sample_type sample_type;\n        typedef typename trainer_type::label_type label_type;\n\n        const long num_in_test  = samples.size()/folds;\n        const long num_in_train = samples.size() - num_in_test;\n\n\n        std::vector<sample_type> samples_test, samples_train;\n        std::vector<label_type> labels_test, labels_train;\n\n\n        long next_test_idx = 0;\n        double total_right = 0;\n        double total = 0;\n\n\n        for (long i = 0; i < folds; ++i)\n        {\n            samples_test.clear();\n            labels_test.clear();\n            samples_train.clear();\n            labels_train.clear();\n\n            // load up the test samples\n            for (long cnt = 0; cnt < num_in_test; ++cnt)\n            {\n                samples_test.push_back(samples[next_test_idx]);\n                labels_test.push_back(labels[next_test_idx]);\n                next_test_idx = (next_test_idx + 1)%samples.size();\n            }\n\n            // load up the training samples\n            long next = next_test_idx;\n            for (long cnt = 0; cnt < num_in_train; ++cnt)\n            {\n                samples_train.push_back(samples[next]);\n                labels_train.push_back(labels[next]);\n                next = (next + 1)%samples.size();\n            }\n\n\n            const typename trainer_type::trained_function_type& df = trainer.train(samples_train,labels_train);\n\n            // check how good df is on the test data\n            for (unsigned long i = 0; i < samples_test.size(); ++i)\n            {\n                const std::vector<long>& out = df(samples_test[i]);\n                for (unsigned long j = 0; j < out.size(); ++j)\n                {\n                    if (out[j] == labels_test[i][j])\n                        ++total_right;\n\n                    ++total;\n                }\n            }\n\n        } // for (long i = 0; i < folds; ++i)\n\n        if (total != 0)\n            return total_right/total;\n        else\n            return 1;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_ASSiGNEMNT_TRAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_assignment_trainer_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CROSS_VALIDATE_ASSiGNEMNT_TRAINER_ABSTRACT_Hh_\n#ifdef DLIB_CROSS_VALIDATE_ASSiGNEMNT_TRAINER_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n#include \"svm.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename assignment_function\n        >\n    double test_assignment_function (\n        const assignment_function& assigner,\n        const std::vector<typename assignment_function::sample_type>& samples,\n        const std::vector<typename assignment_function::label_type>& labels\n    );\n    /*!\n        requires\n            - is_assignment_problem(samples, labels)\n            - if (assigner.forces_assignment()) then\n                - is_forced_assignment_problem(samples, labels) \n            - assignment_function == an instantiation of the dlib::assignment_function\n              template or an object with a compatible interface.\n        ensures\n            - Tests assigner against the given samples and labels and returns the fraction \n              of assignments predicted correctly.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    double cross_validate_assignment_trainer (\n        const trainer_type& trainer,\n        const std::vector<typename trainer_type::sample_type>& samples,\n        const std::vector<typename trainer_type::label_type>& labels,\n        const long folds\n    );\n    /*!\n        requires\n            - is_assignment_problem(samples, labels)\n            - if (trainer.forces_assignment()) then\n                - is_forced_assignment_problem(samples, labels) \n            - 1 < folds <= samples.size()\n            - trainer_type == dlib::structural_assignment_trainer or an object\n              with a compatible interface.\n        ensures\n            - performs k-fold cross validation by using the given trainer to solve the\n              given assignment learning problem for the given number of folds.  Each fold \n              is tested using the output of the trainer and the fraction of assignments\n              predicted correctly is returned.\n            - The number of folds used is given by the folds argument.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_ASSiGNEMNT_TRAINER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_graph_labeling_trainer.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CROSS_VALIDATE_GRAPh_LABELING_TRAINER_Hh_\n#define DLIB_CROSS_VALIDATE_GRAPh_LABELING_TRAINER_Hh_\n\n#include \"../array.h\"\n#include \"../graph_cuts/min_cut.h\"\n#include \"svm.h\"\n#include \"cross_validate_graph_labeling_trainer_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_labeler,\n        typename graph_type\n        >\n    matrix<double,1,2> test_graph_labeling_function (\n        const graph_labeler& labeler,\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels,\n        const std::vector<std::vector<double> >& losses\n    )\n    {\n#ifdef ENABLE_ASSERTS\n        std::string reason_for_failure;\n        DLIB_ASSERT(is_graph_labeling_problem(samples, labels, reason_for_failure) ,\n            \"\\t matrix test_graph_labeling_function()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t samples.size(): \" << samples.size() \n            << \"\\n\\t reason_for_failure: \" << reason_for_failure \n            );\n        DLIB_ASSERT((losses.size() == 0 || sizes_match(labels, losses) == true) &&\n                    all_values_are_nonnegative(losses) == true,\n                \"\\t matrix test_graph_labeling_function()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n                << \"\\n\\t labels.size():  \" << labels.size() \n                << \"\\n\\t losses.size():  \" << losses.size() \n                << \"\\n\\t sizes_match(labels,losses): \" << sizes_match(labels,losses) \n                << \"\\n\\t all_values_are_nonnegative(losses): \" << all_values_are_nonnegative(losses) \n                 );\n#endif\n\n        std::vector<bool> temp;\n        double num_pos_correct = 0;\n        double num_pos = 0;\n        double num_neg_correct = 0;\n        double num_neg = 0;\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            labeler(samples[i], temp);\n\n            for (unsigned long j = 0; j < labels[i].size(); ++j)\n            {\n                // What is the loss for this example?  It's just 1 unless we have a \n                // per example loss vector.\n                const double loss = (losses.size() == 0) ? 1.0 : losses[i][j];\n\n                if (labels[i][j])\n                {\n                    num_pos += loss;\n                    if (temp[j])\n                        num_pos_correct += loss;\n                }\n                else\n                {\n                    num_neg += loss;\n                    if (!temp[j])\n                        num_neg_correct += loss;\n                }\n            }\n        }\n\n        matrix<double, 1, 2> res;\n        if (num_pos != 0)\n            res(0) = num_pos_correct/num_pos; \n        else\n            res(0) = 1;\n        if (num_neg != 0)\n            res(1) = num_neg_correct/num_neg; \n        else\n            res(1) = 1;\n        return res;\n    }\n\n    template <\n        typename graph_labeler,\n        typename graph_type\n        >\n    matrix<double,1,2> test_graph_labeling_function (\n        const graph_labeler& labeler,\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels\n    )\n    {\n        std::vector<std::vector<double> > losses;\n        return test_graph_labeling_function(labeler, samples, labels, losses);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename graph_type\n        >\n    matrix<double,1,2> cross_validate_graph_labeling_trainer (\n        const trainer_type& trainer,\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels,\n        const std::vector<std::vector<double> >& losses,\n        const long folds\n    )\n    {\n#ifdef ENABLE_ASSERTS\n        std::string reason_for_failure;\n        DLIB_ASSERT(is_graph_labeling_problem(samples, labels, reason_for_failure),\n            \"\\t matrix cross_validate_graph_labeling_trainer()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t samples.size(): \" << samples.size() \n            << \"\\n\\t reason_for_failure: \" << reason_for_failure \n            );\n        DLIB_ASSERT( 1 < folds && folds <= static_cast<long>(samples.size()),\n            \"\\t matrix cross_validate_graph_labeling_trainer()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t folds:  \" << folds \n            );\n        DLIB_ASSERT((losses.size() == 0 || sizes_match(labels, losses) == true) &&\n                    all_values_are_nonnegative(losses) == true,\n                \"\\t matrix cross_validate_graph_labeling_trainer()\"\n                << \"\\n\\t Invalid inputs were given to this function.\"\n                << \"\\n\\t labels.size():  \" << labels.size() \n                << \"\\n\\t losses.size():  \" << losses.size() \n                << \"\\n\\t sizes_match(labels,losses): \" << sizes_match(labels,losses) \n                << \"\\n\\t all_values_are_nonnegative(losses): \" << all_values_are_nonnegative(losses) \n                 );\n#endif\n\n        typedef std::vector<bool> label_type;\n\n        const long num_in_test  = samples.size()/folds;\n        const long num_in_train = samples.size() - num_in_test;\n\n\n        dlib::array<graph_type> samples_test, samples_train;\n        std::vector<label_type> labels_test, labels_train;\n        std::vector<std::vector<double> > losses_test, losses_train;\n\n\n        long next_test_idx = 0;\n\n        std::vector<bool> temp;\n        double num_pos_correct = 0;\n        double num_pos = 0;\n        double num_neg_correct = 0;\n        double num_neg = 0;\n\n        graph_type gtemp;\n\n        for (long i = 0; i < folds; ++i)\n        {\n            samples_test.clear();\n            labels_test.clear();\n            losses_test.clear();\n            samples_train.clear();\n            labels_train.clear();\n            losses_train.clear();\n\n            // load up the test samples\n            for (long cnt = 0; cnt < num_in_test; ++cnt)\n            {\n                copy_graph(samples[next_test_idx], gtemp);\n                samples_test.push_back(gtemp);\n                labels_test.push_back(labels[next_test_idx]);\n                if (losses.size() != 0)\n                    losses_test.push_back(losses[next_test_idx]);\n                next_test_idx = (next_test_idx + 1)%samples.size();\n            }\n\n            // load up the training samples\n            long next = next_test_idx;\n            for (long cnt = 0; cnt < num_in_train; ++cnt)\n            {\n                copy_graph(samples[next], gtemp);\n                samples_train.push_back(gtemp);\n                labels_train.push_back(labels[next]);\n                if (losses.size() != 0)\n                    losses_train.push_back(losses[next]);\n                next = (next + 1)%samples.size();\n            }\n\n\n            const typename trainer_type::trained_function_type& labeler = trainer.train(samples_train,labels_train,losses_train);\n\n            // check how good labeler is on the test data\n            for (unsigned long i = 0; i < samples_test.size(); ++i)\n            {\n                labeler(samples_test[i], temp);\n                for (unsigned long j = 0; j < labels_test[i].size(); ++j)\n                {\n                    // What is the loss for this example?  It's just 1 unless we have a \n                    // per example loss vector.\n                    const double loss = (losses_test.size() == 0) ? 1.0 : losses_test[i][j];\n\n                    if (labels_test[i][j])\n                    {\n                        num_pos += loss;\n                        if (temp[j])\n                            num_pos_correct += loss;\n                    }\n                    else\n                    {\n                        num_neg += loss;\n                        if (!temp[j])\n                            num_neg_correct += loss;\n                    }\n                }\n            }\n\n        } // for (long i = 0; i < folds; ++i)\n\n\n        matrix<double, 1, 2> res;\n        if (num_pos != 0)\n            res(0) = num_pos_correct/num_pos; \n        else\n            res(0) = 1;\n        if (num_neg != 0)\n            res(1) = num_neg_correct/num_neg; \n        else\n            res(1) = 1;\n        return res;\n    }\n\n    template <\n        typename trainer_type,\n        typename graph_type\n        >\n    matrix<double,1,2> cross_validate_graph_labeling_trainer (\n        const trainer_type& trainer,\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels,\n        const long folds\n    )\n    {\n        std::vector<std::vector<double> > losses;\n        return cross_validate_graph_labeling_trainer(trainer, samples, labels, losses, folds);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_GRAPh_LABELING_TRAINER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_graph_labeling_trainer_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CROSS_VALIDATE_GRAPh_LABELING_TRAINER_ABSTRACT_Hh_\n#ifdef DLIB_CROSS_VALIDATE_GRAPh_LABELING_TRAINER_ABSTRACT_Hh_\n\n#include \"../array/array_kernel_abstract.h\"\n#include <vector>\n#include \"../matrix/matrix_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_labeler,\n        typename graph_type\n        >\n    matrix<double,1,2> test_graph_labeling_function (\n        const graph_labeler& labeler,\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels\n    );\n    /*!\n        requires\n            - is_graph_labeling_problem(samples,labels) == true\n            - graph_labeler == an object with an interface compatible with the\n              dlib::graph_labeler object.\n            - the following must be a valid expression: labeler(samples[0]);\n        ensures\n            - This function tests the accuracy of the given graph labeler against\n              the sample graphs and their associated labels.  In particular, this\n              function returns a matrix R such that:\n                - R(0) == The fraction of nodes which are supposed to have a label of\n                  true that are labeled as such by the labeler.\n                - R(1) == The fraction of nodes which are supposed to have a label of\n                  false that are labeled as such by the labeler.\n              Therefore, if R is [1,1] then the labeler makes perfect predictions while\n              an R of [0,0] indicates that it gets everything wrong.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_labeler,\n        typename graph_type\n        >\n    matrix<double,1,2> test_graph_labeling_function (\n        const graph_labeler& labeler,\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels,\n        const std::vector<std::vector<double> >& losses\n    );\n    /*!\n        requires\n            - is_graph_labeling_problem(samples,labels) == true\n            - graph_labeler == an object with an interface compatible with the\n              dlib::graph_labeler object.\n            - the following must be a valid expression: labeler(samples[0]);\n            - if (losses.size() != 0) then\n                - sizes_match(labels, losses) == true\n                - all_values_are_nonnegative(losses) == true\n        ensures\n            - This overload of test_graph_labeling_function() does the same thing as the\n              one defined above, except that instead of counting 1 for each labeling\n              mistake, it weights each mistake according to the corresponding value in\n              losses.  That is, instead of counting a value of 1 for making a mistake on\n              samples[i].node(j), this routine counts a value of losses[i][j].  Under this\n              interpretation, the loss values represent how useful it is to correctly label\n              each node.  Therefore, the values returned represent fractions of overall\n              labeling utility rather than raw labeling accuracy.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename graph_type\n        >\n    matrix<double,1,2> cross_validate_graph_labeling_trainer (\n        const trainer_type& trainer,\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels,\n        const long folds\n    );\n    /*!\n        requires\n            - is_graph_labeling_problem(samples,labels) == true\n            - 1 < folds <= samples.size()\n            - trainer_type == an object which trains some kind of graph labeler object\n              (e.g. structural_graph_labeling_trainer)\n        ensures\n            - performs k-fold cross validation by using the given trainer to solve the\n              given graph labeling problem for the given number of folds.  Each fold \n              is tested using the output of the trainer and the average classification \n              accuracy from all folds is returned.  In particular, this function returns \n              a matrix R such that:\n                - R(0) == The fraction of nodes which are supposed to have a label of\n                  true that are labeled as such by the learned labeler.\n                - R(1) == The fraction of nodes which are supposed to have a label of\n                  false that are labeled as such by the learned labeler.\n              Therefore, if R is [1,1] then the labeler makes perfect predictions while\n              an R of [0,0] indicates that it gets everything wrong.\n            - The number of folds used is given by the folds argument.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename graph_type\n        >\n    matrix<double,1,2> cross_validate_graph_labeling_trainer (\n        const trainer_type& trainer,\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels,\n        const std::vector<std::vector<double> >& losses,\n        const long folds\n    );\n    /*!\n        requires\n            - is_graph_labeling_problem(samples,labels) == true\n            - 1 < folds <= samples.size()\n            - trainer_type == an object which trains some kind of graph labeler object\n              (e.g. structural_graph_labeling_trainer)\n            - if (losses.size() != 0) then\n                - sizes_match(labels, losses) == true\n                - all_values_are_nonnegative(losses) == true\n        ensures\n            - This overload of cross_validate_graph_labeling_trainer() does the same thing\n              as the one defined above, except that instead of counting 1 for each labeling\n              mistake, it weights each mistake according to the corresponding value in\n              losses.  That is, instead of counting a value of 1 for making a mistake on\n              samples[i].node(j), this routine counts a value of losses[i][j].  Under this\n              interpretation, the loss values represent how useful it is to correctly label\n              each node.  Therefore, the values returned represent fractions of overall\n              labeling utility rather than raw labeling accuracy.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_GRAPh_LABELING_TRAINER_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_multiclass_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CROSS_VALIDATE_MULTICLASS_TRaINER_Hh_\n#define DLIB_CROSS_VALIDATE_MULTICLASS_TRaINER_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n#include \"cross_validate_multiclass_trainer_abstract.h\"\n#include <sstream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dec_funct_type,\n        typename sample_type,\n        typename label_type\n        >\n    const matrix<double> test_multiclass_decision_function (\n        const dec_funct_type& dec_funct,\n        const std::vector<sample_type>& x_test,\n        const std::vector<label_type>& y_test\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_learning_problem(x_test,y_test) == true,\n                    \"\\tmatrix test_multiclass_decision_function()\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t is_learning_problem(x_test,y_test): \" \n                    << is_learning_problem(x_test,y_test));\n\n\n        const std::vector<label_type> all_labels = dec_funct.get_labels();\n\n        // make a lookup table that maps from labels to their index in all_labels\n        std::map<label_type,unsigned long> label_to_int;\n        for (unsigned long i = 0; i < all_labels.size(); ++i)\n            label_to_int[all_labels[i]] = i;\n\n        matrix<double, 0, 0, typename dec_funct_type::mem_manager_type> res;\n        res.set_size(all_labels.size(), all_labels.size());\n\n        res = 0;\n\n        typename std::map<label_type,unsigned long>::const_iterator iter;\n\n        // now test this trained object \n        for (unsigned long i = 0; i < x_test.size(); ++i)\n        {\n            iter = label_to_int.find(y_test[i]);\n            // ignore samples with labels that the decision function doesn't know about.\n            if (iter == label_to_int.end())\n                continue;\n\n            const unsigned long truth = iter->second;\n            const unsigned long pred  = label_to_int[dec_funct(x_test[i])];\n\n            res(truth,pred) += 1;\n        }\n\n        return res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class cross_validation_error : public dlib::error \n    { \n    public: \n        cross_validation_error(const std::string& msg) : dlib::error(msg){};\n    };\n\n    template <\n        typename trainer_type,\n        typename sample_type,\n        typename label_type \n        >\n    const matrix<double> cross_validate_multiclass_trainer (\n        const trainer_type& trainer,\n        const std::vector<sample_type>& x,\n        const std::vector<label_type>& y,\n        const long folds\n    )\n    {\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_learning_problem(x,y) == true &&\n                    1 < folds && folds <= static_cast<long>(x.size()),\n            \"\\tmatrix cross_validate_multiclass_trainer()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t x.size(): \" << x.size() \n            << \"\\n\\t folds:  \" << folds \n            << \"\\n\\t is_learning_problem(x,y): \" << is_learning_problem(x,y)\n            );\n\n        const std::vector<label_type> all_labels = select_all_distinct_labels(y);\n\n        // count the number of times each label shows up \n        std::map<label_type,long> label_counts;\n        for (unsigned long i = 0; i < y.size(); ++i)\n            label_counts[y[i]] += 1;\n\n\n        // figure out how many samples from each class will be in the test and train splits \n        std::map<label_type,long> num_in_test, num_in_train;\n        for (typename std::map<label_type,long>::iterator i = label_counts.begin(); i != label_counts.end(); ++i)\n        {\n            const long in_test = i->second/folds;\n            if (in_test == 0)\n            {\n                std::ostringstream sout;\n                sout << \"In dlib::cross_validate_multiclass_trainer(), the number of folds was larger\" << std::endl;\n                sout << \"than the number of elements of one of the training classes.\" << std::endl;\n                sout << \"  folds: \"<< folds << std::endl;\n                sout << \"  size of class \" << i->first << \": \"<< i->second << std::endl;\n                throw cross_validation_error(sout.str());\n            }\n            num_in_test[i->first] = in_test; \n            num_in_train[i->first] = i->second - in_test;\n        }\n\n\n\n        std::vector<sample_type> x_test, x_train;\n        std::vector<label_type> y_test, y_train;\n\n        matrix<double, 0, 0, mem_manager_type> res;\n\n        std::map<label_type,long> next_test_idx;\n        for (unsigned long i = 0; i < all_labels.size(); ++i)\n            next_test_idx[all_labels[i]] = 0;\n\n        label_type label;\n\n        for (long i = 0; i < folds; ++i)\n        {\n            x_test.clear();\n            y_test.clear();\n            x_train.clear();\n            y_train.clear();\n\n            // load up the test samples\n            for (unsigned long j = 0; j < all_labels.size(); ++j)\n            {\n                label = all_labels[j];\n                long next = next_test_idx[label];\n\n                long cur = 0;\n                const long num_needed = num_in_test[label];\n                while (cur < num_needed)\n                {\n                    if (y[next] == label)\n                    {\n                        x_test.push_back(x[next]);\n                        y_test.push_back(label);\n                        ++cur;\n                    }\n                    next = (next + 1)%x.size();\n                }\n\n                next_test_idx[label] = next;\n            }\n\n            // load up the training samples\n            for (unsigned long j = 0; j < all_labels.size(); ++j)\n            {\n                label = all_labels[j];\n                long next = next_test_idx[label];\n\n                long cur = 0;\n                const long num_needed = num_in_train[label];\n                while (cur < num_needed)\n                {\n                    if (y[next] == label)\n                    {\n                        x_train.push_back(x[next]);\n                        y_train.push_back(label);\n                        ++cur;\n                    }\n                    next = (next + 1)%x.size();\n                }\n            }\n\n\n            try\n            {\n                // do the training and testing\n                res += test_multiclass_decision_function(trainer.train(x_train,y_train),x_test,y_test);\n            }\n            catch (invalid_nu_error&)\n            {\n                // just ignore cases which result in an invalid nu\n            }\n\n        } // for (long i = 0; i < folds; ++i)\n\n        return res;\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_CROSS_VALIDATE_MULTICLASS_TRaINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_multiclass_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CROSS_VALIDATE_MULTICLASS_TRaINER_ABSTRACT_Hh_\n#ifdef DLIB_CROSS_VALIDATE_MULTICLASS_TRaINER_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dec_funct_type,\n        typename sample_type,\n        typename label_type\n        >\n    const matrix<double> test_multiclass_decision_function (\n        const dec_funct_type& dec_funct,\n        const std::vector<sample_type>& x_test,\n        const std::vector<label_type>& y_test\n    );\n    /*!\n        requires\n            - is_learning_problem(x_test, y_test)\n            - dec_funct_type == some kind of multiclass decision function object \n              (e.g. one_vs_one_decision_function)\n        ensures\n            - Tests dec_funct against the given samples in x_test and labels in y_test\n              and returns a confusion matrix summarizing the results.\n            - let L = dec_funct.get_labels().  Then the confusion matrix C returned \n              by this function has the following properties.\n                - C.nr() == C.nc() == L.size()\n                - C(r,c) == the number of times a sample with label L(r) was predicted\n                  to have a label of L(c)\n            - Any samples with a y_test value not in L are ignored.  That is, samples\n              with labels the decision function hasn't ever seen before are ignored.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class cross_validation_error : public dlib::error \n    { \n        /*!\n            This is the exception class used by the cross_validate_multiclass_trainer() \n            routine.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename sample_type,\n        typename label_type \n        >\n    const matrix<double> cross_validate_multiclass_trainer (\n        const trainer_type& trainer,\n        const std::vector<sample_type>& x,\n        const std::vector<label_type>& y,\n        const long folds\n    );\n    /*!\n        requires\n            - is_learning_problem(x,y)\n            - 1 < folds <= x.size()\n            - trainer_type == some kind of multiclass classification trainer object (e.g. one_vs_one_trainer)\n        ensures\n            - performs k-fold cross validation by using the given trainer to solve the\n              given multiclass classification problem for the given number of folds.\n              Each fold is tested using the output of the trainer and the confusion\n              matrix from all folds is summed and returned.\n            - The total confusion matrix is computed by running test_binary_decision_function()\n              on each fold and summing its output.\n            - The number of folds used is given by the folds argument.\n            - let L = select_all_distinct_labels(y).  Then the confusion matrix C returned \n              by this function has the following properties.\n                - C.nr() == C.nc() == L.size()\n                - C(r,c) == the number of times a sample with label L(r) was predicted\n                  to have a label of L(c)\n\n              Note that sum(C) might be slightly less than x.size().  This happens if the number of \n              samples in a class is not an even multiple of folds.  This is because each fold has the \n              same number of test samples in it and so if the number of samples in a class isn't a \n              multiple of folds then a few are not tested.  \n        throws\n            - cross_validation_error\n              This exception is thrown if one of the classes has fewer samples than\n              the number of requested folds.\n    !*/\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_CROSS_VALIDATE_MULTICLASS_TRaINER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_object_detection_trainer.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CROSS_VALIDATE_OBJECT_DETECTION_TRaINER_Hh_\n#define DLIB_CROSS_VALIDATE_OBJECT_DETECTION_TRaINER_Hh_\n\n#include \"cross_validate_object_detection_trainer_abstract.h\"\n#include <vector>\n#include \"../matrix.h\"\n#include \"svm.h\"\n#include \"../geometry.h\"\n#include \"../image_processing/full_object_detection.h\"\n#include \"../image_processing/box_overlap_testing.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline unsigned long number_of_truth_hits (\n            const std::vector<full_object_detection>& truth_boxes,\n            const std::vector<rectangle>& ignore,\n            const std::vector<std::pair<double,rectangle> >& boxes,\n            const test_box_overlap& overlap_tester,\n            std::vector<std::pair<double,bool> >& all_dets,\n            unsigned long& missing_detections \n        )\n        /*!\n            ensures\n                - returns the number of elements in truth_boxes which are overlapped by an \n                  element of boxes.  In this context, two boxes, A and B, overlap if and only if\n                  overlap_tester(A,B) == true.\n                - No element of boxes is allowed to account for more than one element of truth_boxes.  \n                - The returned number is in the range [0,truth_boxes.size()]\n                - Adds the score for each box from boxes into all_dets and labels each with\n                  a bool indicating if it hit a truth box.  Note that we skip boxes that\n                  don't hit any truth boxes and match an ignore box.\n                - Adds the number of truth boxes which didn't have any hits into\n                  missing_detections.\n        !*/\n        {\n            if (boxes.size() == 0)\n            {\n                missing_detections += truth_boxes.size();\n                return 0;\n            }\n\n            unsigned long count = 0;\n            std::vector<bool> used(boxes.size(),false);\n            for (unsigned long i = 0; i < truth_boxes.size(); ++i)\n            {\n                bool found_match = false;\n                // Find the first box that hits truth_boxes[i]\n                for (unsigned long j = 0; j < boxes.size(); ++j)\n                {\n                    if (used[j])\n                        continue;\n\n                    if (overlap_tester(truth_boxes[i].get_rect(), boxes[j].second))\n                    {\n                        used[j] = true;\n                        ++count;\n                        found_match = true;\n                        break;\n                    }\n                }\n\n                if (!found_match)\n                    ++missing_detections;\n            }\n\n            for (unsigned long i = 0; i < boxes.size(); ++i)\n            {\n                // only out put boxes if they match a truth box or are not ignored.\n                if (used[i] || !overlaps_any_box(overlap_tester, ignore, boxes[i].second))\n                {\n                    all_dets.push_back(std::make_pair(boxes[i].first, used[i]));\n                }\n            }\n\n            return count;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename object_detector_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> test_object_detection_function (\n        object_detector_type& detector,\n        const image_array_type& images,\n        const std::vector<std::vector<full_object_detection> >& truth_dets,\n        const std::vector<std::vector<rectangle> >& ignore,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( is_learning_problem(images,truth_dets) == true && \n                        ignore.size() == images.size(),\n                    \"\\t matrix test_object_detection_function()\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t is_learning_problem(images,truth_dets): \" << is_learning_problem(images,truth_dets)\n                    << \"\\n\\t ignore.size(): \" << ignore.size() \n                    << \"\\n\\t images.size(): \" << images.size() \n                    );\n\n\n\n        double correct_hits = 0;\n        double total_true_targets = 0;\n\n        std::vector<std::pair<double,bool> > all_dets;\n        unsigned long missing_detections = 0;\n\n\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            std::vector<std::pair<double,rectangle> > hits; \n            detector(images[i], hits, adjust_threshold);\n\n            correct_hits += impl::number_of_truth_hits(truth_dets[i], ignore[i], hits, overlap_tester, all_dets, missing_detections);\n            total_true_targets += truth_dets[i].size();\n        }\n\n        std::sort(all_dets.rbegin(), all_dets.rend());\n\n        double precision, recall;\n\n        double total_hits = all_dets.size();\n\n        if (total_hits == 0)\n            precision = 1;\n        else\n            precision = correct_hits / total_hits;\n\n        if (total_true_targets == 0)\n            recall = 1;\n        else\n            recall = correct_hits / total_true_targets;\n\n        matrix<double, 1, 3> res;\n        res = precision, recall, average_precision(all_dets, missing_detections);\n        return res;\n    }\n\n    template <\n        typename object_detector_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> test_object_detection_function (\n        object_detector_type& detector,\n        const image_array_type& images,\n        const std::vector<std::vector<rectangle> >& truth_dets,\n        const std::vector<std::vector<rectangle> >& ignore,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    )\n    {\n        // convert into a list of regular rectangles.\n        std::vector<std::vector<full_object_detection> > rects(truth_dets.size());\n        for (unsigned long i = 0; i < truth_dets.size(); ++i)\n        {\n            for (unsigned long j = 0; j < truth_dets[i].size(); ++j)\n            {\n                rects[i].push_back(full_object_detection(truth_dets[i][j]));\n            }\n        }\n\n        return test_object_detection_function(detector, images, rects, ignore, overlap_tester, adjust_threshold);\n    }\n\n    template <\n        typename object_detector_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> test_object_detection_function (\n        object_detector_type& detector,\n        const image_array_type& images,\n        const std::vector<std::vector<rectangle> >& truth_dets,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    )\n    {\n        std::vector<std::vector<rectangle> > ignore(images.size());\n        return test_object_detection_function(detector,images,truth_dets,ignore, overlap_tester, adjust_threshold);\n    }\n\n    template <\n        typename object_detector_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> test_object_detection_function (\n        object_detector_type& detector,\n        const image_array_type& images,\n        const std::vector<std::vector<full_object_detection> >& truth_dets,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    )\n    {\n        std::vector<std::vector<rectangle> > ignore(images.size());\n        return test_object_detection_function(detector,images,truth_dets,ignore, overlap_tester, adjust_threshold);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename array_type\n            >\n        struct array_subset_helper\n        {\n            typedef typename array_type::mem_manager_type mem_manager_type;\n\n            array_subset_helper (\n                const array_type& array_,\n                const std::vector<unsigned long>& idx_set_\n            ) :\n                array(array_),\n                idx_set(idx_set_)\n            {\n            }\n\n            unsigned long size() const { return idx_set.size(); }\n\n            typedef typename array_type::type type;\n            const type& operator[] (\n                unsigned long idx\n            ) const { return array[idx_set[idx]]; }\n\n        private:\n            const array_type& array;\n            const std::vector<unsigned long>& idx_set;\n        };\n\n        template <\n            typename T \n            >\n        const matrix_op<op_array_to_mat<array_subset_helper<T> > > mat (\n            const array_subset_helper<T>& m \n        )\n        {\n            typedef op_array_to_mat<array_subset_helper<T> > op;\n            return matrix_op<op>(op(m));\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename trainer_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> cross_validate_object_detection_trainer (\n        const trainer_type& trainer,\n        const image_array_type& images,\n        const std::vector<std::vector<full_object_detection> >& truth_dets,\n        const std::vector<std::vector<rectangle> >& ignore,\n        const long folds,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( is_learning_problem(images,truth_dets) == true &&\n                     ignore.size() == images.size() &&\n                     1 < folds && folds <= static_cast<long>(images.size()),\n                    \"\\t matrix cross_validate_object_detection_trainer()\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t is_learning_problem(images,truth_dets): \" << is_learning_problem(images,truth_dets)\n                    << \"\\n\\t folds: \"<< folds\n                    << \"\\n\\t ignore.size(): \" << ignore.size() \n                    << \"\\n\\t images.size(): \" << images.size() \n                    );\n\n        double correct_hits = 0;\n        double total_true_targets = 0;\n\n        const long test_size = images.size()/folds;\n\n        std::vector<std::pair<double,bool> > all_dets;\n        unsigned long missing_detections = 0;\n        unsigned long test_idx = 0;\n        for (long iter = 0; iter < folds; ++iter)\n        {\n            std::vector<unsigned long> train_idx_set;\n            std::vector<unsigned long> test_idx_set;\n\n            for (long i = 0; i < test_size; ++i)\n                test_idx_set.push_back(test_idx++);\n\n            unsigned long train_idx = test_idx%images.size();\n            std::vector<std::vector<full_object_detection> > training_rects;\n            std::vector<std::vector<rectangle> > training_ignores;\n            for (unsigned long i = 0; i < images.size()-test_size; ++i)\n            {\n                training_rects.push_back(truth_dets[train_idx]);\n                training_ignores.push_back(ignore[train_idx]);\n                train_idx_set.push_back(train_idx);\n                train_idx = (train_idx+1)%images.size();\n            }\n\n\n            impl::array_subset_helper<image_array_type> array_subset(images, train_idx_set);\n            typename trainer_type::trained_function_type detector = trainer.train(array_subset, training_rects, training_ignores, overlap_tester);\n            for (unsigned long i = 0; i < test_idx_set.size(); ++i)\n            {\n                std::vector<std::pair<double,rectangle> > hits; \n                detector(images[test_idx_set[i]], hits, adjust_threshold);\n\n                correct_hits += impl::number_of_truth_hits(truth_dets[test_idx_set[i]], ignore[i], hits, overlap_tester, all_dets, missing_detections);\n                total_true_targets += truth_dets[test_idx_set[i]].size();\n            }\n\n        }\n\n        std::sort(all_dets.rbegin(), all_dets.rend());\n\n\n        double precision, recall;\n\n        double total_hits = all_dets.size();\n\n        if (total_hits == 0)\n            precision = 1;\n        else\n            precision = correct_hits / total_hits;\n\n        if (total_true_targets == 0)\n            recall = 1;\n        else\n            recall = correct_hits / total_true_targets;\n\n        matrix<double, 1, 3> res;\n        res = precision, recall, average_precision(all_dets, missing_detections);\n        return res;\n    }\n\n    template <\n        typename trainer_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> cross_validate_object_detection_trainer (\n        const trainer_type& trainer,\n        const image_array_type& images,\n        const std::vector<std::vector<rectangle> >& truth_dets,\n        const std::vector<std::vector<rectangle> >& ignore,\n        const long folds,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    )\n    {\n        // convert into a list of regular rectangles.\n        std::vector<std::vector<full_object_detection> > dets(truth_dets.size());\n        for (unsigned long i = 0; i < truth_dets.size(); ++i)\n        {\n            for (unsigned long j = 0; j < truth_dets[i].size(); ++j)\n            {\n                dets[i].push_back(full_object_detection(truth_dets[i][j]));\n            }\n        }\n\n        return cross_validate_object_detection_trainer(trainer, images, dets, ignore, folds, overlap_tester, adjust_threshold);\n    }\n\n    template <\n        typename trainer_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> cross_validate_object_detection_trainer (\n        const trainer_type& trainer,\n        const image_array_type& images,\n        const std::vector<std::vector<rectangle> >& truth_dets,\n        const long folds,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    )\n    {\n        const std::vector<std::vector<rectangle> > ignore(images.size());\n        return cross_validate_object_detection_trainer(trainer,images,truth_dets,ignore,folds,overlap_tester,adjust_threshold);\n    }\n\n    template <\n        typename trainer_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> cross_validate_object_detection_trainer (\n        const trainer_type& trainer,\n        const image_array_type& images,\n        const std::vector<std::vector<full_object_detection> >& truth_dets,\n        const long folds,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    )\n    {\n        const std::vector<std::vector<rectangle> > ignore(images.size());\n        return cross_validate_object_detection_trainer(trainer,images,truth_dets,ignore,folds,overlap_tester,adjust_threshold);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_OBJECT_DETECTION_TRaINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_object_detection_trainer_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CROSS_VALIDATE_OBJECT_DETECTION_TRaINER_ABSTRACT_Hh_\n#ifdef DLIB_CROSS_VALIDATE_OBJECT_DETECTION_TRaINER_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n#include \"../geometry.h\"\n#include \"../image_processing/full_object_detection_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename object_detector_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> test_object_detection_function (\n        object_detector_type& detector,\n        const image_array_type& images,\n        const std::vector<std::vector<full_object_detection> >& truth_dets,\n        const std::vector<std::vector<rectangle> >& ignore,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - is_learning_problem(images,truth_dets)\n            - images.size() == ignore.size()\n            - object_detector_type == some kind of object detector function object\n              (e.g. object_detector)\n            - image_array_type must be an implementation of dlib/array/array_kernel_abstract.h \n              and it must contain objects which can be accepted by detector().\n        ensures\n            - Tests the given detector against the supplied object detection problem and\n              returns the precision, recall, and average precision.  Note that the task is\n              to predict, for each images[i], the set of object locations given by\n              truth_dets[i].  Additionally, any detections on image[i] that match a box in\n              ignore[i] are ignored.  That is, detections matching a box in ignore[i] do\n              not count as a false alarm and similarly if any element of ignore[i] goes\n              undetected it does not count as a missed detection.  So we say that ignore[i]\n              contains a set of boxes that we \"don't care\" if they are detected or not.\n            - In particular, returns a matrix M such that:  \n                - M(0) == the precision of the detector object.  This is a number\n                  in the range [0,1] which measures the fraction of detector outputs\n                  which correspond to a real target.  A value of 1 means the detector\n                  never produces any false alarms while a value of 0 means it only\n                  produces false alarms.\n                - M(1) == the recall of the detector object.  This is a number in the\n                  range [0,1] which measures the fraction of targets found by the\n                  detector.  A value of 1 means the detector found all the targets\n                  in truth_dets while a value of 0 means the detector didn't locate\n                  any of the targets.\n                - M(2) == the average precision of the detector object.  This is a number\n                  in the range [0,1] which measures the overall quality of the detector.\n                  We compute this by taking all the detections output by the detector and\n                  ordering them in descending order of their detection scores.  Then we use\n                  the average_precision() routine to score the ranked listing and store the\n                  output into M(2).\n                - This function considers a detector output D to match a rectangle T if and\n                  only if overlap_tester(T,D) returns true. \n                - Note that you can use the adjust_threshold argument to raise or lower the\n                  detection threshold.  This value is passed into the identically named\n                  argument to the detector object and therefore influences the number of\n                  output detections.  It can be useful, for example, to lower the detection\n                  threshold because it results in more detections being output by the\n                  detector, and therefore provides more information in the ranking,\n                  possibly raising the average precision.\n    !*/\n\n    template <\n        typename object_detector_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> test_object_detection_function (\n        object_detector_type& detector,\n        const image_array_type& images,\n        const std::vector<std::vector<rectangle> >& truth_dets,\n        const std::vector<std::vector<rectangle> >& ignore,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - All the requirements of the above test_object_detection_function() routine.\n        ensures\n            - converts all the rectangles in truth_dets into full_object_detection objects\n              via full_object_detection's rectangle constructor.  Then invokes\n              test_object_detection_function() on the full_object_detections and returns\n              the results.  \n    !*/\n\n    template <\n        typename object_detector_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> test_object_detection_function (\n        object_detector_type& detector,\n        const image_array_type& images,\n        const std::vector<std::vector<rectangle> >& truth_dets,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - All the requirements of the above test_object_detection_function() routine.\n        ensures\n            - This function simply invokes test_object_detection_function() with all the\n              given arguments and an empty set of ignore rectangles and returns the results.\n    !*/\n\n    template <\n        typename object_detector_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> test_object_detection_function (\n        object_detector_type& detector,\n        const image_array_type& images,\n        const std::vector<std::vector<full_object_detection> >& truth_dets,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - All the requirements of the above test_object_detection_function() routine.\n        ensures\n            - This function simply invokes test_object_detection_function() with all the\n              given arguments and an empty set of ignore rectangles and returns the results.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> cross_validate_object_detection_trainer (\n        const trainer_type& trainer,\n        const image_array_type& images,\n        const std::vector<std::vector<full_object_detection> >& truth_dets,\n        const std::vector<std::vector<rectangle> >& ignore,\n        const long folds,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - is_learning_problem(images,truth_dets)\n            - images.size() == ignore.size()\n            - 1 < folds <= images.size()\n            - trainer_type == some kind of object detection trainer (e.g structural_object_detection_trainer)\n            - image_array_type must be an implementation of dlib/array/array_kernel_abstract.h \n              and it must contain objects which can be accepted by detector().\n            - it is legal to call trainer.train(images, truth_dets)\n        ensures\n            - Performs k-fold cross-validation by using the given trainer to solve an\n              object detection problem for the given number of folds.  Each fold is tested\n              using the output of the trainer and a matrix summarizing the results is\n              returned.  The matrix contains the precision, recall, and average\n              precision of the trained detectors and is defined identically to the\n              test_object_detection_function() routine defined at the top of this file.\n    !*/\n\n    template <\n        typename trainer_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> cross_validate_object_detection_trainer (\n        const trainer_type& trainer,\n        const image_array_type& images,\n        const std::vector<std::vector<rectangle> >& truth_dets,\n        const std::vector<std::vector<rectangle> >& ignore,\n        const long folds,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - all the requirements of the above cross_validate_object_detection_trainer() routine.\n        ensures\n            - converts all the rectangles in truth_dets into full_object_detection objects\n              via full_object_detection's rectangle constructor.  Then invokes\n              cross_validate_object_detection_trainer() on the full_object_detections and\n              returns the results.  \n    !*/\n\n    template <\n        typename trainer_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> cross_validate_object_detection_trainer (\n        const trainer_type& trainer,\n        const image_array_type& images,\n        const std::vector<std::vector<rectangle> >& truth_dets,\n        const long folds,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - All the requirements of the above cross_validate_object_detection_trainer() routine.\n        ensures\n            - This function simply invokes cross_validate_object_detection_trainer() with all\n              the given arguments and an empty set of ignore rectangles and returns the results.\n    !*/\n\n    template <\n        typename trainer_type,\n        typename image_array_type\n        >\n    const matrix<double,1,3> cross_validate_object_detection_trainer (\n        const trainer_type& trainer,\n        const image_array_type& images,\n        const std::vector<std::vector<full_object_detection> >& truth_dets,\n        const long folds,\n        const test_box_overlap& overlap_tester = test_box_overlap(),\n        const double adjust_threshold = 0\n    );\n    /*!\n        requires\n            - All the requirements of the above cross_validate_object_detection_trainer() routine.\n        ensures\n            - This function simply invokes cross_validate_object_detection_trainer() with all\n              the given arguments and an empty set of ignore rectangles and returns the results.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_OBJECT_DETECTION_TRaINER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_regression_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CROSS_VALIDATE_REGRESSION_TRaINER_Hh_\n#define DLIB_CROSS_VALIDATE_REGRESSION_TRaINER_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n#include \"../statistics.h\"\n#include \"cross_validate_regression_trainer_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename reg_funct_type,\n        typename sample_type,\n        typename label_type\n        >\n    matrix<double,1,2>\n    test_regression_function (\n        const reg_funct_type& reg_funct,\n        const std::vector<sample_type>& x_test,\n        const std::vector<label_type>& y_test\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_learning_problem(x_test,y_test) == true,\n                    \"\\tmatrix test_regression_function()\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t is_learning_problem(x_test,y_test): \" \n                    << is_learning_problem(x_test,y_test));\n\n        running_stats<double> rs;\n        running_scalar_covariance<double> rc;\n\n        for (unsigned long i = 0; i < x_test.size(); ++i)\n        {\n            // compute error\n            const double output = reg_funct(x_test[i]);\n            const double temp = output - y_test[i];\n\n            rs.add(temp*temp);\n            rc.add(output, y_test[i]);\n        }\n\n        matrix<double,1,2> result;\n        result = rs.mean(), std::pow(rc.correlation(),2);\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename sample_type,\n        typename label_type \n        >\n    matrix<double,1,2> \n    cross_validate_regression_trainer (\n        const trainer_type& trainer,\n        const std::vector<sample_type>& x,\n        const std::vector<label_type>& y,\n        const long folds\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_learning_problem(x,y) == true &&\n                    1 < folds && folds <= static_cast<long>(x.size()),\n            \"\\tmatrix cross_validate_regression_trainer()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t x.size(): \" << x.size() \n            << \"\\n\\t folds:  \" << folds \n            << \"\\n\\t is_learning_problem(x,y): \" << is_learning_problem(x,y)\n            );\n\n\n\n        const long num_in_test = x.size()/folds;\n        const long num_in_train = x.size() - num_in_test;\n\n        running_stats<double> rs;\n        running_scalar_covariance<double> rc;\n\n        std::vector<sample_type> x_test, x_train;\n        std::vector<label_type> y_test, y_train;\n\n\n        long next_test_idx = 0;\n\n\n        for (long i = 0; i < folds; ++i)\n        {\n            x_test.clear();\n            y_test.clear();\n            x_train.clear();\n            y_train.clear();\n\n            // load up the test samples\n            for (long cnt = 0; cnt < num_in_test; ++cnt)\n            {\n                x_test.push_back(x[next_test_idx]);\n                y_test.push_back(y[next_test_idx]);\n                next_test_idx = (next_test_idx + 1)%x.size();\n            }\n\n            // load up the training samples\n            long next = next_test_idx;\n            for (long cnt = 0; cnt < num_in_train; ++cnt)\n            {\n                x_train.push_back(x[next]);\n                y_train.push_back(y[next]);\n                next = (next + 1)%x.size();\n            }\n\n\n            try\n            {\n                const typename trainer_type::trained_function_type& df = trainer.train(x_train,y_train);\n\n                // do the training and testing\n                for (unsigned long j = 0; j < x_test.size(); ++j)\n                {\n                    // compute error\n                    const double output = df(x_test[j]);\n                    const double temp = output - y_test[j];\n\n                    rs.add(temp*temp);\n                    rc.add(output, y_test[j]);\n                }\n            }\n            catch (invalid_nu_error&)\n            {\n                // just ignore cases which result in an invalid nu\n            }\n\n        } // for (long i = 0; i < folds; ++i)\n\n        matrix<double,1,2> result;\n        result = rs.mean(), std::pow(rc.correlation(),2);\n        return result;\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_CROSS_VALIDATE_REGRESSION_TRaINER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_regression_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CROSS_VALIDATE_REGRESSION_TRaINER_ABSTRACT_Hh_\n#ifdef DLIB_CROSS_VALIDATE_REGRESSION_TRaINER_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename reg_funct_type,\n        typename sample_type,\n        typename label_type\n        >\n    matrix<double,1,2>\n    test_regression_function (\n        const reg_funct_type& reg_funct,\n        const std::vector<sample_type>& x_test,\n        const std::vector<label_type>& y_test\n    );\n    /*!\n        requires\n            - is_learning_problem(x_test, y_test)\n            - reg_funct_type == some kind of regression function object \n              (e.g. a decision_function created by the svr_trainer )\n        ensures\n            - Tests reg_funct against the given samples in x_test and target values in \n              y_test and returns a matrix M summarizing the results.  Specifically:\n                - M(0) == the mean squared error.  \n                  The MSE is given by: sum over i: pow(reg_funct(x_test[i]) - y_test[i], 2.0)\n                - M(1) == the R-squared value (i.e. the squared correlation between\n                  reg_funct(x_test[i]) and y_test[i]).  This is a number between 0\n                  and 1.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename sample_type,\n        typename label_type \n        >\n    matrix<double,1,2>\n    cross_validate_regression_trainer (\n        const trainer_type& trainer,\n        const std::vector<sample_type>& x,\n        const std::vector<label_type>& y,\n        const long folds\n    );\n    /*!\n        requires\n            - is_learning_problem(x,y)\n            - 1 < folds <= x.size()\n            - trainer_type == some kind of regression trainer object (e.g. svr_trainer)\n        ensures\n            - Performs k-fold cross validation by using the given trainer to solve a \n              regression problem for the given number of folds.  Each fold is tested using \n              the output of the trainer.  A matrix M summarizing the results is returned.  \n              Specifically:\n                - M(0) == the mean squared error.  \n                  The MSE is given by: sum over i: pow(reg_funct(x[i]) - y[i], 2.0)\n                - M(1) == the R-squared value (i.e. the squared correlation between\n                  a predicted y value and its true value).  This is a number between \n                  0 and 1.\n    !*/\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_CROSS_VALIDATE_REGRESSION_TRaINER_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_sequence_labeler.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CROSS_VALIDATE_SEQUENCE_LABeLER_Hh_\n#define DLIB_CROSS_VALIDATE_SEQUENCE_LABeLER_Hh_\n\n#include \"cross_validate_sequence_labeler_abstract.h\"\n#include <vector>\n#include \"../matrix.h\"\n#include \"svm.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sequence_labeler_type,\n        typename sequence_type \n        >\n    const matrix<double> test_sequence_labeler (\n        const sequence_labeler_type& labeler,\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<unsigned long> >& labels\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_sequence_labeling_problem(samples, labels) == true,\n                    \"\\tmatrix test_sequence_labeler()\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t is_sequence_labeling_problem(samples, labels): \" \n                    << is_sequence_labeling_problem(samples, labels));\n\n        matrix<double> res(labeler.num_labels(), labeler.num_labels());\n        res = 0;\n\n        std::vector<unsigned long> pred;\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            labeler.label_sequence(samples[i], pred);\n\n            for (unsigned long j = 0; j < pred.size(); ++j)\n            {\n                const unsigned long truth = labels[i][j];\n                if (truth >= static_cast<unsigned long>(res.nr()))\n                {\n                    // ignore labels the labeler doesn't know about.\n                    continue;\n                }\n\n                res(truth, pred[j]) += 1;\n            }\n        }\n\n        return res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename sequence_type\n        >\n    const matrix<double> cross_validate_sequence_labeler (\n        const trainer_type& trainer,\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<unsigned long> >& labels,\n        const long folds\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_sequence_labeling_problem(samples,labels) == true &&\n                    1 < folds && folds <= static_cast<long>(samples.size()),\n            \"\\tmatrix cross_validate_sequence_labeler()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t samples.size(): \" << samples.size() \n            << \"\\n\\t folds:  \" << folds \n            << \"\\n\\t is_sequence_labeling_problem(samples,labels): \" << is_sequence_labeling_problem(samples,labels)\n            );\n\n#ifdef ENABLE_ASSERTS\n        for (unsigned long i = 0; i < labels.size(); ++i)\n        {\n            for (unsigned long j = 0; j < labels[i].size(); ++j)\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT(labels[i][j] < trainer.num_labels(),\n                            \"\\t matrix cross_validate_sequence_labeler()\"\n                            << \"\\n\\t The labels are invalid.\"\n                            << \"\\n\\t labels[i][j]: \" << labels[i][j] \n                            << \"\\n\\t trainer.num_labels(): \" << trainer.num_labels()\n                            << \"\\n\\t i: \" << i \n                            << \"\\n\\t j: \" << j \n                );\n            }\n        }\n#endif\n\n\n\n\n        const long num_in_test = samples.size()/folds;\n        const long num_in_train = samples.size() - num_in_test;\n\n        std::vector<sequence_type> x_test, x_train;\n        std::vector<std::vector<unsigned long> > y_test, y_train;\n\n\n        long next_test_idx = 0;\n\n        matrix<double> res;\n\n\n        for (long i = 0; i < folds; ++i)\n        {\n            x_test.clear();\n            y_test.clear();\n            x_train.clear();\n            y_train.clear();\n\n            // load up the test samples\n            for (long cnt = 0; cnt < num_in_test; ++cnt)\n            {\n                x_test.push_back(samples[next_test_idx]);\n                y_test.push_back(labels[next_test_idx]);\n                next_test_idx = (next_test_idx + 1)%samples.size();\n            }\n\n            // load up the training samples\n            long next = next_test_idx;\n            for (long cnt = 0; cnt < num_in_train; ++cnt)\n            {\n                x_train.push_back(samples[next]);\n                y_train.push_back(labels[next]);\n                next = (next + 1)%samples.size();\n            }\n\n\n            res += test_sequence_labeler(trainer.train(x_train,y_train), x_test, y_test);\n\n        } // for (long i = 0; i < folds; ++i)\n\n        return res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_SEQUENCE_LABeLER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_sequence_labeler_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CROSS_VALIDATE_SEQUENCE_LABeLER_ABSTRACT_Hh_\n#ifdef DLIB_CROSS_VALIDATE_SEQUENCE_LABeLER_ABSTRACT_Hh_\n\n#include <vector>\n#include \"../matrix.h\"\n#include \"svm.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sequence_labeler_type,\n        typename sequence_type \n        >\n    const matrix<double> test_sequence_labeler (\n        const sequence_labeler_type& labeler,\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<unsigned long> >& labels\n    );\n    /*!\n        requires\n            - is_sequence_labeling_problem(samples, labels)\n            - sequence_labeler_type == dlib::sequence_labeler or an object with a \n              compatible interface.\n        ensures\n            - Tests labeler against the given samples and labels and returns a confusion \n              matrix summarizing the results.\n            - The confusion matrix C returned by this function has the following properties.\n                - C.nc() == labeler.num_labels()\n                - C.nr() == labeler.num_labels() \n                - C(T,P) == the number of times a sequence element with label T was predicted\n                  to have a label of P.\n            - Any samples with a label value >= labeler.num_labels() are ignored.  That \n              is, samples with labels the labeler hasn't ever seen before are ignored.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename sequence_type\n        >\n    const matrix<double> cross_validate_sequence_labeler (\n        const trainer_type& trainer,\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<unsigned long> >& labels,\n        const long folds\n    );\n    /*!\n        requires\n            - is_sequence_labeling_problem(samples, labels)\n            - 1 < folds <= samples.size()\n            - for all valid i and j: labels[i][j] < trainer.num_labels()\n            - trainer_type == dlib::structural_sequence_labeling_trainer or an object\n              with a compatible interface.\n        ensures\n            - performs k-fold cross validation by using the given trainer to solve the\n              given sequence labeling problem for the given number of folds.  Each fold \n              is tested using the output of the trainer and the confusion matrix from all \n              folds is summed and returned.\n            - The total confusion matrix is computed by running test_sequence_labeler()\n              on each fold and summing its output.\n            - The number of folds used is given by the folds argument.\n            - The confusion matrix C returned by this function has the following properties.\n                - C.nc() == trainer.num_labels()\n                - C.nr() == trainer.num_labels() \n                - C(T,P) == the number of times a sequence element with label T was predicted\n                  to have a label of P.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_SEQUENCE_LABeLER_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_sequence_segmenter.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CROSS_VALIDATE_SEQUENCE_sEGMENTER_Hh_\n#define DLIB_CROSS_VALIDATE_SEQUENCE_sEGMENTER_Hh_\n\n#include \"cross_validate_sequence_segmenter_abstract.h\"\n#include \"sequence_segmenter.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename sequence_segmenter_type,\n            typename sequence_type \n            >\n        const matrix<double,1,3> raw_metrics_test_sequence_segmenter (\n            const sequence_segmenter_type& segmenter,\n            const std::vector<sequence_type>& samples,\n            const std::vector<std::vector<std::pair<unsigned long,unsigned long> > >& segments \n        )\n        {\n            std::vector<std::pair<unsigned long,unsigned long> > truth;\n            std::vector<std::pair<unsigned long,unsigned long> > pred;\n\n            double true_hits = 0;\n            double total_detections = 0;\n            double total_true_segments = 0;\n\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                segmenter.segment_sequence(samples[i], pred);\n                truth = segments[i];\n                // sort the segments so they will be in the same orders\n                std::sort(truth.begin(), truth.end());\n                std::sort(pred.begin(), pred.end());\n\n                total_true_segments += truth.size();\n                total_detections += pred.size();\n\n                unsigned long j=0,k=0;\n                while (j < pred.size() && k < truth.size())\n                {\n                    if (pred[j].first == truth[k].first && \n                        pred[j].second == truth[k].second)\n                    {\n                        ++true_hits;\n                        ++j;\n                        ++k;\n                    }\n                    else if (pred[j].first < truth[k].first)\n                    {\n                        ++j;\n                    }\n                    else\n                    {\n                        ++k;\n                    }\n                }\n            }\n\n            matrix<double,1,3> res;\n            res = total_detections, total_true_segments, true_hits;\n            return res;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sequence_segmenter_type,\n        typename sequence_type \n        >\n    const matrix<double,1,3> test_sequence_segmenter (\n        const sequence_segmenter_type& segmenter,\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<std::pair<unsigned long,unsigned long> > >& segments \n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_sequence_segmentation_problem(samples, segments) == true,\n                    \"\\tmatrix test_sequence_segmenter()\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t is_sequence_segmentation_problem(samples, segments): \" \n                    << is_sequence_segmentation_problem(samples, segments));\n\n        const matrix<double,1,3> metrics = impl::raw_metrics_test_sequence_segmenter(segmenter, samples, segments);\n\n        const double total_detections    = metrics(0);\n        const double total_true_segments = metrics(1);\n        const double true_hits           = metrics(2);\n        \n        const double precision = (total_detections   ==0) ? 1 : true_hits/total_detections;\n        const double recall    = (total_true_segments==0) ? 1 : true_hits/total_true_segments;\n        const double f1        = (precision+recall   ==0) ? 0 : 2*precision*recall/(precision+recall);\n\n        matrix<double,1,3> res;\n        res = precision, recall, f1;\n        return res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename sequence_type \n        >\n    const matrix<double,1,3> cross_validate_sequence_segmenter (\n        const trainer_type& trainer,\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<std::pair<unsigned long,unsigned long> > >& segments,\n        const long folds\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_sequence_segmentation_problem(samples, segments) == true &&\n                    1 < folds && folds <= static_cast<long>(samples.size()),\n                    \"\\tmatrix cross_validate_sequence_segmenter()\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t folds:  \" << folds \n                    << \"\\n\\t is_sequence_segmentation_problem(samples, segments): \" \n                    << is_sequence_segmentation_problem(samples, segments));\n\n\n        const long num_in_test = samples.size()/folds;\n        const long num_in_train = samples.size() - num_in_test;\n\n        std::vector<sequence_type> x_test, x_train;\n        std::vector<std::vector<std::pair<unsigned long,unsigned long> > > y_test, y_train;\n\n        long next_test_idx = 0;\n\n        matrix<double,1,3> metrics;\n        metrics = 0;\n\n        for (long i = 0; i < folds; ++i)\n        {\n            x_test.clear();\n            y_test.clear();\n            x_train.clear();\n            y_train.clear();\n\n            // load up the test samples\n            for (long cnt = 0; cnt < num_in_test; ++cnt)\n            {\n                x_test.push_back(samples[next_test_idx]);\n                y_test.push_back(segments[next_test_idx]);\n                next_test_idx = (next_test_idx + 1)%samples.size();\n            }\n\n            // load up the training samples\n            long next = next_test_idx;\n            for (long cnt = 0; cnt < num_in_train; ++cnt)\n            {\n                x_train.push_back(samples[next]);\n                y_train.push_back(segments[next]);\n                next = (next + 1)%samples.size();\n            }\n\n\n            metrics += impl::raw_metrics_test_sequence_segmenter(trainer.train(x_train,y_train), x_test, y_test);\n        } // for (long i = 0; i < folds; ++i)\n\n\n        const double total_detections    = metrics(0);\n        const double total_true_segments = metrics(1);\n        const double true_hits           = metrics(2);\n        \n        const double precision = (total_detections   ==0) ? 1 : true_hits/total_detections;\n        const double recall    = (total_true_segments==0) ? 1 : true_hits/total_true_segments;\n        const double f1        = (precision+recall   ==0) ? 0 : 2*precision*recall/(precision+recall);\n\n        matrix<double,1,3> res;\n        res = precision, recall, f1;\n        return res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_SEQUENCE_sEGMENTER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_sequence_segmenter_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CROSS_VALIDATE_SEQUENCE_sEGMENTER_ABSTRACT_Hh_\n#ifdef DLIB_CROSS_VALIDATE_SEQUENCE_sEGMENTER_ABSTRACT_Hh_\n\n#include \"sequence_segmenter_abstract.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sequence_segmenter_type,\n        typename sequence_type \n        >\n    const matrix<double,1,3> test_sequence_segmenter (\n        const sequence_segmenter_type& segmenter,\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<std::pair<unsigned long,unsigned long> > >& segments \n    );\n    /*!\n        requires\n            - is_sequence_segmentation_problem(samples, segments) == true\n            - sequence_segmenter_type == dlib::sequence_segmenter or an object with a\n              compatible interface.\n        ensures\n            - Tests segmenter against the given samples and truth segments and returns the\n              precision, recall, and F1-score obtained by the segmenter.  That is, the goal\n              of the segmenter should be to predict segments[i] given samples[i] as input.\n              The test_sequence_segmenter() routine therefore measures how well the\n              segmenter is able to perform this task.\n            - Returns a row matrix M with the following properties:\n                - M(0) == The precision of the segmenter measured against the task of\n                  detecting the segments of each sample.  This is a number in the range 0\n                  to 1 and represents the fraction of segments output by the segmenter\n                  which correspond to true segments for each sample.\n                - M(1) == The recall of the segmenter measured against the task of\n                  detecting the segments of each sample.  This is a number in the range 0\n                  to 1 and represents the fraction of the true segments found by the\n                  segmenter. \n                - M(2) == The F1-score for the segmenter.  This is the harmonic mean of\n                  M(0) and M(1).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename sequence_type \n        >\n    const matrix<double,1,3> cross_validate_sequence_segmenter (\n        const trainer_type& trainer,\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<std::pair<unsigned long,unsigned long> > >& segments,\n        const long folds\n    );\n    /*!\n        requires\n            - is_sequence_segmentation_problem(samples, segments) == true\n            - 1 < folds <= samples.size()\n            - trainer_type == dlib::structural_sequence_segmentation_trainer or an object\n              with a compatible interface.\n        ensures\n            - Performs k-fold cross validation by using the given trainer to solve the\n              given sequence segmentation problem for the given number of folds.  Each fold\n              is tested using the output of the trainer and the results from all folds are\n              summarized and returned. \n            - This function returns the precision, recall, and F1-score for the trainer.\n              In particular, the output is the same as the output from the\n              test_sequence_segmenter() routine defined above.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_SEQUENCE_sEGMENTER_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_track_association_trainer.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CROSS_VALIDATE_TRACK_ASSOCIATION_TrAINER_Hh_\n#define DLIB_CROSS_VALIDATE_TRACK_ASSOCIATION_TrAINER_Hh_\n\n#include \"cross_validate_track_association_trainer_abstract.h\"\n#include \"structural_track_association_trainer.h\"\n\nnamespace dlib\n{\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename track_association_function,\n            typename detection_type,\n            typename label_type\n            >\n        void test_track_association_function (\n            const track_association_function& assoc,\n            const std::vector<std::vector<labeled_detection<detection_type,label_type> > >& samples,\n            unsigned long& total_dets,\n            unsigned long& correctly_associated_dets\n        )\n        {\n            const typename track_association_function::association_function_type& f = assoc.get_assignment_function();\n\n            typedef typename detection_type::track_type track_type;\n            using namespace impl;\n\n            dlib::rand rnd;\n            std::vector<track_type> tracks;\n            std::map<label_type,long> track_idx; // tracks[track_idx[id]] == track with ID id.\n\n            for (unsigned long j = 0; j < samples.size(); ++j)\n            {\n                std::vector<labeled_detection<detection_type,label_type> > dets = samples[j];\n                // Shuffle the order of the detections so we can be sure that there isn't\n                // anything funny going on like the detections always coming in the same\n                // order relative to their labels and the association function just gets\n                // lucky by picking the same assignment ordering every time.  So this way\n                // we know the assignment function really is doing something rather than\n                // just being lucky.\n                randomize_samples(dets, rnd);\n\n                total_dets += dets.size();\n                std::vector<long> assignments = f(get_unlabeled_dets(dets), tracks);\n                std::vector<bool> updated_track(tracks.size(), false);\n                // now update all the tracks with the detections that associated to them.\n                for (unsigned long k = 0; k < assignments.size(); ++k)\n                {\n                    // If the detection is associated to tracks[assignments[k]]\n                    if (assignments[k] != -1)\n                    {\n                        tracks[assignments[k]].update_track(dets[k].det);\n                        updated_track[assignments[k]] = true;\n\n                        // if this detection was supposed to go to this track\n                        if (track_idx.count(dets[k].label) && track_idx[dets[k].label]==assignments[k])\n                            ++correctly_associated_dets;\n\n                        track_idx[dets[k].label] = assignments[k];\n                    }\n                    else\n                    {\n                        track_type new_track;\n                        new_track.update_track(dets[k].det);\n                        tracks.push_back(new_track);\n\n                        // if this detection was supposed to go to a new track\n                        if (track_idx.count(dets[k].label) == 0)\n                            ++correctly_associated_dets;\n\n                        track_idx[dets[k].label] = tracks.size()-1;\n                    }\n                }\n\n                // Now propagate all the tracks that didn't get any detections.\n                for (unsigned long k = 0; k < updated_track.size(); ++k)\n                {\n                    if (!updated_track[k])\n                        tracks[k].propagate_track();\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename track_association_function,\n        typename detection_type,\n        typename label_type\n        >\n    double test_track_association_function (\n        const track_association_function& assoc,\n        const std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > >& samples\n    )\n    {\n        unsigned long total_dets = 0;\n        unsigned long correctly_associated_dets = 0;\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            impl::test_track_association_function(assoc, samples[i], total_dets, correctly_associated_dets);\n        }\n\n        return (double)correctly_associated_dets/(double)total_dets;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename detection_type,\n        typename label_type\n        >\n    double cross_validate_track_association_trainer (\n        const trainer_type& trainer,\n        const std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > >& samples,\n        const long folds\n    )\n    {\n        const long num_in_test  = samples.size()/folds;\n        const long num_in_train = samples.size() - num_in_test;\n\n        std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > > samples_train;\n\n        long next_test_idx = 0;\n        unsigned long total_dets = 0;\n        unsigned long correctly_associated_dets = 0;\n\n        for (long i = 0; i < folds; ++i)\n        {\n            samples_train.clear();\n\n            // load up the training samples\n            long next = (next_test_idx + num_in_test)%samples.size();\n            for (long cnt = 0; cnt < num_in_train; ++cnt)\n            {\n                samples_train.push_back(samples[next]);\n                next = (next + 1)%samples.size();\n            }\n\n            const track_association_function<detection_type>& df = trainer.train(samples_train);\n            for (long cnt = 0; cnt < num_in_test; ++cnt)\n            {\n                impl::test_track_association_function(df, samples[next_test_idx], total_dets, correctly_associated_dets);\n                next_test_idx = (next_test_idx + 1)%samples.size();\n            }\n        }\n\n        return (double)correctly_associated_dets/(double)total_dets;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_TRACK_ASSOCIATION_TrAINER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/cross_validate_track_association_trainer_abstract.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CROSS_VALIDATE_TRACK_ASSOCIATION_TrAINER_ABSTRACT_Hh_\n#ifdef DLIB_CROSS_VALIDATE_TRACK_ASSOCIATION_TrAINER_ABSTRACT_Hh_\n\n#include \"structural_track_association_trainer_abstract.h\"\n#include \"svm_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename track_association_function,\n        typename detection_type,\n        typename label_type\n        >\n    double test_track_association_function (\n        const track_association_function& assoc,\n        const std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > >& samples\n    );\n    /*!\n        requires\n            - is_track_association_problem(samples)\n            - track_association_function == an instantiation of the dlib::track_association_function\n              template or an object with a compatible interface.\n        ensures\n            - Tests assoc against the given samples and returns the fraction of detections\n              which were correctly associated to their tracks.  That is, if assoc produces\n              perfect tracks when used then this function returns a value of 1.  Similarly,\n              if 5% of the detections were associated to the incorrect track then the\n              return value is 0.05.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename detection_type,\n        typename label_type\n        >\n    double cross_validate_track_association_trainer (\n        const trainer_type& trainer,\n        const std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > >& samples,\n        const long folds\n    );\n    /*!\n        requires\n            - is_track_association_problem(samples)\n            - 1 < folds <= samples.size()\n            - trainer_type == dlib::structural_track_association_trainer or an object with\n              a compatible interface.\n        ensures\n            - Performs k-fold cross validation by using the given trainer to solve the\n              given track association learning problem for the given number of folds.  Each\n              fold is tested using the output of the trainer and the fraction of\n              mis-associated detections is returned (i.e. this function returns the same\n              measure of track association quality as test_track_association_function()).\n            - The number of folds used is given by the folds argument.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CROSS_VALIDATE_TRACK_ASSOCIATION_TrAINER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/empirical_kernel_map.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_EMPIRICAL_KERNEl_MAP_H_\n#define DLIB_EMPIRICAL_KERNEl_MAP_H_\n\n#include \"../matrix.h\"\n#include \"empirical_kernel_map_abstract.h\"\n#include \"linearly_independent_subset_finder.h\"\n#include <vector>\n#include \"../algs.h\"\n#include \"kernel_matrix.h\"\n#include \"function.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type, typename EXP>\n    const decision_function<kernel_type> convert_to_decision_function (\n        const projection_function<kernel_type>& project_funct,\n        const matrix_exp<EXP>& vect\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(project_funct.out_vector_size() > 0 && is_vector(vect) && \n                    project_funct.out_vector_size() == vect.size() && project_funct.weights.nc() == project_funct.basis_vectors.size(),\n            \"\\t const decision_function convert_to_decision_function()\"\n            << \"\\n\\t Invalid inputs to this function.\"\n            << \"\\n\\t project_funct.out_vector_size():    \" << project_funct.out_vector_size() \n            << \"\\n\\t project_funct.weights.nc():         \" << project_funct.weights.nc() \n            << \"\\n\\t project_funct.basis_vectors.size(): \" << project_funct.basis_vectors.size() \n            << \"\\n\\t is_vector(vect):                    \" << is_vector(vect) \n            << \"\\n\\t vect.size():                        \" << vect.size() \n            );\n\n        return decision_function<kernel_type>(trans(project_funct.weights)*vect, \n                                              0, \n                                              project_funct.kernel_function,\n                                              project_funct.basis_vectors);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kern_type>\n    class empirical_kernel_map\n    {\n    public:\n\n        struct empirical_kernel_map_error : public error\n        {\n            empirical_kernel_map_error(const std::string& message): error(message) {}\n        };\n\n        typedef kern_type kernel_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        void clear (\n        )\n        {\n            empirical_kernel_map().swap(*this);\n        }\n\n        template <typename T>\n        void load(\n            const kernel_type& kernel_,\n            const T& basis_samples\n        )\n        {\n            load_impl(kernel_, mat(basis_samples));\n        }\n\n        void load(\n            const linearly_independent_subset_finder<kernel_type>& lisf\n        )\n        {\n            if (lisf.size() == 0)\n            {\n                std::ostringstream sout;\n                sout << \"An empty linearly_independent_subset_finder was supplied to the\\n\"\n                     << \"empirical_kernel_map::load() function.  One reason this might occur\\n\"\n                     << \"is if your dataset contains only zero vectors (or vectors \\n\"\n                     << \"approximately zero).\\n\";\n                clear();\n                throw empirical_kernel_map_error(sout.str());\n            }\n\n            kernel = lisf.get_kernel();\n            weights = trans(chol(lisf.get_inv_kernel_marix()));\n            basis.resize(lisf.size());\n            for (unsigned long i = 0; i < basis.size(); ++i)\n                basis[i] = lisf[i];\n\n        }\n\n        const kernel_type get_kernel (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(out_vector_size() > 0,\n                \"\\tconst kernel_type empirical_kernel_map::get_kernel()\"\n                << \"\\n\\t You have to load this object with a kernel before you can call this function\"\n                << \"\\n\\t this: \" << this\n                );\n\n            return kernel;\n        }\n\n        long out_vector_size (\n        ) const\n        {\n            return weights.nr();\n        }\n\n        unsigned long basis_size (\n        ) const\n        {\n            return basis.size();\n        }\n\n        const sample_type& operator[] (\n            unsigned long idx\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( idx < basis_size(),\n                \"\\t const sample_type& empirical_kernel_map::operator[](idx)\"\n                << \"\\n\\t Invalid inputs to this function.\"\n                << \"\\n\\t basis_size(): \" << basis_size() \n                << \"\\n\\t this:         \" << this\n                );\n\n            return basis[idx];\n        }\n\n        template <typename EXP>\n        const decision_function<kernel_type> convert_to_decision_function (\n            const matrix_exp<EXP>& vect\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(out_vector_size() != 0 && is_vector(vect) && out_vector_size() == vect.size(),\n                \"\\t const decision_function empirical_kernel_map::convert_to_decision_function()\"\n                << \"\\n\\t Invalid inputs to this function.\"\n                << \"\\n\\t out_vector_size(): \" << out_vector_size() \n                << \"\\n\\t is_vector(vect):   \" << is_vector(vect) \n                << \"\\n\\t vect.size():       \" << vect.size() \n                << \"\\n\\t this: \" << this\n                );\n\n            return decision_function<kernel_type>(trans(weights)*vect, 0, kernel, mat(basis));\n        }\n\n        template <typename EXP>\n        const distance_function<kernel_type> convert_to_distance_function (\n            const matrix_exp<EXP>& vect\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(out_vector_size() != 0 && is_vector(vect) && out_vector_size() == vect.size(),\n                \"\\t const distance_function empirical_kernel_map::convert_to_distance_function()\"\n                << \"\\n\\t Invalid inputs to this function.\"\n                << \"\\n\\t out_vector_size(): \" << out_vector_size() \n                << \"\\n\\t is_vector(vect):   \" << is_vector(vect) \n                << \"\\n\\t vect.size():       \" << vect.size() \n                << \"\\n\\t this: \" << this\n                );\n\n            return distance_function<kernel_type>(trans(weights)*vect, dot(vect,vect), kernel, mat(basis));\n        }\n\n        const projection_function<kernel_type> get_projection_function (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(out_vector_size() != 0,\n                \"\\tconst projection_function empirical_kernel_map::get_projection_function()\"\n                << \"\\n\\t You have to load this object with data before you can call this function\"\n                << \"\\n\\t this: \" << this\n                );\n\n            return projection_function<kernel_type>(weights, kernel, mat(basis));\n        }\n\n        const matrix<scalar_type,0,0,mem_manager_type> get_transformation_to (\n            const empirical_kernel_map& target\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(out_vector_size() != 0 && \n                        target.out_vector_size() != 0 &&\n                        get_kernel() == target.get_kernel(),\n                \"\\t const matrix empirical_kernel_map::get_transformation_to(target)\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t out_vector_size():                 \" << out_vector_size() \n                << \"\\n\\t target.out_vector_size():          \" << target.out_vector_size() \n                << \"\\n\\t get_kernel()==target.get_kernel(): \" << (get_kernel()==target.get_kernel())\n                << \"\\n\\t this: \" << this\n                );\n\n            return target.weights * kernel_matrix(target.get_kernel(),target.basis, basis)*trans(weights);\n        }\n\n        void get_transformation_to (\n            const empirical_kernel_map& target,\n            matrix<scalar_type, 0, 0, mem_manager_type>& tmat,\n            projection_function<kernel_type>& partial_projection\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(out_vector_size() != 0 && \n                        target.out_vector_size() != 0 &&\n                        get_kernel() == target.get_kernel() &&\n                        basis_size() < target.basis_size(),\n                \"\\t void empirical_kernel_map::get_transformation_to(target, tmat, partial_projection)\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t out_vector_size():                 \" << out_vector_size() \n                << \"\\n\\t target.out_vector_size():          \" << target.out_vector_size() \n                << \"\\n\\t basis_size():                      \" << basis_size() \n                << \"\\n\\t target.basis_size():               \" << target.basis_size() \n                << \"\\n\\t get_kernel()==target.get_kernel(): \" << (get_kernel()==target.get_kernel())\n                << \"\\n\\t this: \" << this\n                );\n\n#ifdef ENABLE_ASSERTS\n            for (unsigned long i = 0; i < basis_size(); ++i)\n            {\n                DLIB_ASSERT(dlib::equal((*this)[i], target[i]), \n                    \"\\t const matrix empirical_kernel_map::get_transformation_to(target, tmat, partial_projection)\"\n                    << \"\\n\\t target must contain a superset of the basis vectors in *this\"\n                    << \"\\n\\t i: \" << i\n                    << \"\\n\\t this: \" << this\n                    );\n            }\n#endif\n\n            const unsigned long num1 = basis.size();\n            const unsigned long num2 = target.basis.size();\n\n            tmat = colm(target.weights, range(0,num1-1))*kernel_matrix(kernel, basis)*trans(weights);\n\n            empirical_kernel_map temp_ekm;\n            temp_ekm.load(kernel, rowm(mat(target.basis), range(num1,num2-1)));\n\n            partial_projection = temp_ekm.get_projection_function();\n\n            partial_projection.weights = colm(target.weights,range(num1,num2-1))*\n                                   kernel_matrix(kernel, temp_ekm.basis)*\n                                   trans(temp_ekm.weights)*\n                                   partial_projection.weights;\n        }\n\n        const matrix<scalar_type,0,1,mem_manager_type>& project (\n            const sample_type& samp\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(out_vector_size() != 0,\n                \"\\tconst matrix empirical_kernel_map::project()\"\n                << \"\\n\\t You have to load this object with data before you can call this function\"\n                << \"\\n\\t this: \" << this\n                );\n\n            temp1 = kernel_matrix(kernel, basis, samp);\n            temp2 = weights*temp1;\n            return temp2;\n        }\n\n        const matrix<scalar_type,0,1,mem_manager_type>& project (\n            const sample_type& samp,\n            scalar_type& projection_error \n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(out_vector_size() != 0,\n                \"\\tconst matrix empirical_kernel_map::project()\"\n                << \"\\n\\t You have to load this object with data before you can call this function\"\n                << \"\\n\\t this: \" << this\n                );\n\n            temp1 = kernel_matrix(kernel, basis, samp);\n            temp2 = weights*temp1;\n            // This value should never be negative (it measures squared distance) but I'm putting the abs() \n            // here just for good measure since rounding error might push it slightly negative.\n            projection_error = std::abs( kernel(samp,samp) - dot(temp2,temp2));\n\n            return temp2;\n        }\n\n        void swap (\n            empirical_kernel_map& item\n        )\n        {\n            basis.swap(item.basis);\n            weights.swap(item.weights);\n            std::swap(kernel, item.kernel);\n\n            temp1.swap(item.temp1);\n            temp2.swap(item.temp2);\n        }\n\n        friend void serialize (\n            const empirical_kernel_map& item,\n            std::ostream& out\n        )\n        {\n            serialize(item.basis, out);\n            serialize(item.weights, out);\n            serialize(item.kernel, out);\n        }\n\n        friend void deserialize (\n            empirical_kernel_map& item,\n            std::istream& in \n        )\n        {\n            deserialize(item.basis, in);\n            deserialize(item.weights, in);\n            deserialize(item.kernel, in);\n        }\n\n    private:\n\n        template <typename T>\n        void load_impl(\n            const kernel_type& kernel_,\n            const T& basis_samples\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(basis_samples.size() > 0 && is_vector(basis_samples),\n                \"\\tvoid empirical_kernel_map::load(kernel,basis_samples)\"\n                << \"\\n\\t You have to give a non-empty set of basis_samples and it must be a vector\"\n                << \"\\n\\t basis_samples.size():     \" << basis_samples.size() \n                << \"\\n\\t is_vector(basis_samples): \" << is_vector(basis_samples) \n                << \"\\n\\t this: \" << this\n                );\n\n            // clear out the weights before we begin.  This way if an exception throws\n            // this object will already be in the right state.\n            weights.set_size(0,0);\n            kernel = kernel_;\n            basis.clear();\n            basis.reserve(basis_samples.size());\n\n            // find out the value of the largest norm of the elements in basis_samples.\n            const scalar_type max_norm = max(diag(kernel_matrix(kernel, basis_samples)));\n            // we will consider anything less than or equal to this number to be 0\n            const scalar_type eps = max_norm*100*std::numeric_limits<scalar_type>::epsilon();\n\n            // Copy all the basis_samples into basis but make sure we don't copy any samples\n            // that have length 0\n            for (long i = 0; i < basis_samples.size(); ++i)\n            {\n                const scalar_type norm = kernel(basis_samples(i), basis_samples(i));\n                if (norm > eps)\n                {\n                    basis.push_back(basis_samples(i));\n                }\n            }\n\n            if (basis.size() == 0)\n            {\n                clear();\n                throw empirical_kernel_map_error(\"All basis_samples given to empirical_kernel_map::load() were zero vectors\");\n            }\n\n            matrix<scalar_type,0,0,mem_manager_type> K(kernel_matrix(kernel, basis)), U,W,V;\n\n            if (svd2(false,true,K,U,W,V))\n            {\n                clear();\n                throw empirical_kernel_map_error(\"While loading empirical_kernel_map with data, SVD failed to converge.\");\n            }\n\n\n            // now count how many elements of W are non-zero\n            const long num_not_zero = static_cast<long>(sum(W>eps));\n\n            // Really, this should never happen.  But I'm checking for good measure.\n            if (num_not_zero == 0)\n            {\n                clear();\n                throw empirical_kernel_map_error(\"While loading empirical_kernel_map with data, SVD failed\");\n            }\n\n            weights.set_size(num_not_zero, basis.size());\n\n            // now fill the weights matrix with the output of the SVD\n            long counter = 0;\n            for (long i =0; i < W.size(); ++i)\n            {\n                double val = W(i);\n                if (val > eps)\n                {\n                    val = std::sqrt(val);\n                    set_rowm(weights,counter) = rowm(trans(V),i)/val;\n                    ++counter;\n                }\n            }\n\n        }\n\n\n        std::vector<sample_type> basis;\n        matrix<scalar_type,0,0,mem_manager_type> weights;\n        kernel_type kernel;\n\n        // These members don't contribute to the logical state of this object.  They are\n        // just here so that they don't have to be reallocated every time the project() function\n        // is called.\n        mutable matrix<scalar_type,0,1,mem_manager_type> temp1, temp2;\n\n    };\n\n    template <typename kernel_type>\n    void swap (\n        empirical_kernel_map<kernel_type>& a,\n        empirical_kernel_map<kernel_type>& b\n    ) { a.swap(b); }\n    \n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_EMPIRICAL_KERNEl_MAP_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/empirical_kernel_map_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_EMPIRICAL_KERNEl_MAP_ABSTRACT_H_\n#ifdef DLIB_EMPIRICAL_KERNEl_MAP_ABSTRACT_H_\n\n#include <vector>\n#include \"../matrix.h\"\n#include \"kernel_abstract.h\"\n#include \"function_abstract.h\"\n#include \"linearly_independent_subset_finder_abstract.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type, \n        typename EXP\n        >\n    const decision_function<kernel_type> convert_to_decision_function (\n        const projection_function<kernel_type>& project_funct,\n        const matrix_exp<EXP>& vect\n    );\n    /*!\n        requires\n            - is_vector(vect) == true\n            - vect.size() == project_funct.out_vector_size()\n            - project_funct.out_vector_size() > 0\n            - project_funct.weights.nc() == project_funct.basis_vectors.size()\n        ensures\n            - This function interprets the given vector as a point in the kernel feature space defined \n              by the given projection function.  The return value of this function is a decision \n              function, DF, that represents the given vector in the following sense:\n                - for all possible sample_type objects, S, it is the case that DF(S) == dot(project_funct(S), vect)\n                  (i.e. the returned decision function computes dot products, in kernel feature space, \n                  between vect and any argument you give it.  Note also that this equality is exact, even\n                  for sample_type objects not in the span of the basis_vectors.)\n                - DF.kernel_function == project_funct.kernel_function\n                - DF.b == 0\n                - DF.basis_vectors == project_funct.basis_vectors.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kern_type\n        >\n    class empirical_kernel_map\n    {\n        /*!\n            REQUIREMENTS ON kern_type\n                - must be a kernel function object as defined in dlib/svm/kernel_abstract.h\n\n            INITIAL VALUE\n                - out_vector_size() == 0\n                - basis_size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a map from objects of sample_type (the kind of object \n                a kernel function operates on) to finite dimensional column vectors which \n                represent points in the kernel feature space defined by whatever kernel \n                is used with this object. \n\n                To use the empirical_kernel_map you supply it with a particular kernel and a set of \n                basis samples.  After that you can present it with new samples and it will project \n                them into the part of kernel feature space spanned by your basis samples.   \n                \n                This means the empirical_kernel_map is a tool you can use to very easily kernelize \n                any algorithm that operates on column vectors.  All you have to do is select a \n                set of basis samples and then use the empirical_kernel_map to project all your \n                data points into the part of kernel feature space spanned by those basis samples.\n                Then just run your normal algorithm on the output vectors and it will be effectively \n                kernelized.  \n\n                Regarding methods to select a set of basis samples, if you are working with only a \n                few thousand samples then you can just use all of them as basis samples.  \n                Alternatively, the linearly_independent_subset_finder often works well for \n                selecting a basis set.  I also find that picking a random subset typically works \n                well.\n\n\n                The empirical kernel map is something that has been around in the kernel methods\n                literature for a long time but is seemingly not well known.  Anyway, one of the\n                best books on the subject is the following:\n                    Learning with Kernels: Support Vector Machines, Regularization, Optimization, \n                    and Beyond by Bernhard Schlkopf, Alexander J. Smola\n                The authors discuss the empirical kernel map as well as many other interesting \n                topics.\n        !*/\n\n    public:\n\n        typedef kern_type kernel_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        struct empirical_kernel_map_error : public error;\n        /*!\n            This is an exception class used to indicate a failure to create a \n            kernel map from data given by the user.\n        !*/\n\n        empirical_kernel_map (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - this object has its initial value\n        !*/\n\n        template <typename T>\n        void load(\n            const kernel_type& kernel,\n            const T& basis_samples\n        );\n        /*!\n            requires\n                - T must be a dlib::matrix type or something convertible to a matrix via mat()\n                  (e.g. a std::vector)\n                - is_vector(basis_samples) == true\n                - basis_samples.size() > 0\n                - kernel must be capable of operating on the elements of basis_samples.  That is,\n                  expressions such as kernel(basis_samples(0), basis_samples(0)) should make sense.\n            ensures\n                - 0 < #out_vector_size() <= basis_samples.size()\n                - #basis_size() == basis_samples.size()\n                - #get_kernel() == kernel\n                - This function constructs a map between normal sample_type objects and the \n                  subspace of the kernel feature space defined by the given kernel and the\n                  given set of basis samples.  So after this function has been called you\n                  will be able to project sample_type objects into kernel feature space\n                  and obtain the resulting vector as a regular column matrix.\n                - The basis samples are loaded into this object in the order in which they\n                  are stored in basis_samples.  That is:\n                    - for all valid i: (*this)[i] == basis_samples(i)\n            throws\n                - empirical_kernel_map_error\n                    This exception is thrown if we are unable to create a kernel map.\n                    If this happens then this object will revert back to its initial value.\n        !*/\n\n        void load(\n            const linearly_independent_subset_finder<kernel_type>& lisf\n        );\n        /*!\n            ensures\n                - #out_vector_size() == lisf.dictionary_size() \n                - #basis_size() == lisf.dictionary_size()\n                - #get_kernel() == lisf.get_kernel()\n                - Uses the dictionary vectors from lisf as a basis set.  Thus, this function \n                  constructs a map between normal sample_type objects and the subspace of \n                  the kernel feature space defined by the given kernel and the given set \n                  of basis samples.  So after this function has been called you will be \n                  able to project sample_type objects into kernel feature space and obtain \n                  the resulting vector as a regular column matrix.\n                - The basis samples are loaded into this object in the order in which they\n                  are stored in lisf.  That is:\n                    - for all valid i: (*this)[i] == lisf[i]\n            throws\n                - empirical_kernel_map_error\n                    This exception is thrown if we are unable to create a kernel map.  \n                    E.g.  if the lisf.size() == 0.  \n                    If this happens then this object will revert back to its initial value.\n        !*/\n\n        const kernel_type get_kernel (\n        ) const;\n        /*!\n            requires\n                - out_vector_size() != 0\n            ensures\n                - returns a copy of the kernel used by this object\n        !*/\n\n        long out_vector_size (\n        ) const;\n        /*!\n            ensures\n                - if (this object has been loaded with basis samples) then\n                    - returns the dimensionality of the vectors output by the project() function.\n                - else\n                    - returns 0\n        !*/\n\n        unsigned long basis_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of basis vectors in projection_functions created\n                  by this object.  This is also equal to the number of basis vectors\n                  given to the load() function.\n        !*/\n\n        const sample_type& operator[] (\n            unsigned long idx\n        ) const;\n        /*!\n            requires\n                - idx < basis_size()\n            ensures\n                - returns a const reference to the idx'th basis vector contained inside \n                  this object.\n        !*/\n\n        const matrix<scalar_type,0,1,mem_manager_type>& project (\n            const sample_type& sample \n        ) const;\n        /*!\n            requires\n                - out_vector_size() != 0\n            ensures\n                - takes the given sample and projects it into the kernel feature space\n                  of out_vector_size() dimensions defined by this kernel map and \n                  returns the resulting vector.\n                - in more precise terms, this function returns a vector such that:\n                    - The returned vector will contain out_vector_size() elements.\n                    - for any sample_type object S, the following equality is approximately true:\n                        - get_kernel()(sample,S) == dot(project(sample), project(S)).  \n                    - The approximation error in the above equality will be zero (within rounding error)\n                      if both sample_type objects involved are within the span of the set of basis \n                      samples given to the load() function.  If they are not then there will be some \n                      approximation error.  Note that all the basis samples are always within their\n                      own span.  So the equality is always exact for the samples given to the load() \n                      function.\n        !*/\n\n        const matrix<scalar_type,0,1,mem_manager_type>& project (\n            const sample_type& samp,\n            scalar_type& projection_error\n        ) const;\n        /*!\n            requires\n                - out_vector_size() != 0\n            ensures\n                - This function returns project(samp)\n                  (i.e. it returns the same thing as the above project() function)\n                - #projection_error == the square of the distance between the point samp \n                  gets projected onto and samp's true image in kernel feature space.  \n                  That is, this value is equal to: \n                    pow(convert_to_distance_function(project(samp))(samp),2)\n        !*/\n\n        template <typename EXP>\n        const decision_function<kernel_type> convert_to_decision_function (\n            const matrix_exp<EXP>& vect\n        ) const;\n        /*!\n            requires\n                - is_vector(vect) == true\n                - vect.size() == out_vector_size()\n                - out_vector_size() != 0\n            ensures\n                - This function interprets the given vector as a point in the kernel feature space defined \n                  by this empirical_kernel_map.  The return value of this function is a decision \n                  function, DF, that represents the given vector in the following sense:\n                    - for all possible sample_type objects, S, it is the case that DF(S) == dot(project(S), vect)\n                      (i.e. the returned decision function computes dot products, in kernel feature space, \n                      between vect and any argument you give it.  Note also that this equality is exact, even\n                      for sample_type objects not in the span of the basis samples.)\n                    - DF.kernel_function == get_kernel()\n                    - DF.b == 0\n                    - DF.basis_vectors == these will be the basis samples given to the previous call to load().  Note\n                      that it is possible for there to be fewer basis_vectors than basis samples given to load().  \n                    - DF.basis_vectors.size() == basis_size()\n        !*/\n\n        template <typename EXP>\n        const distance_function<kernel_type> convert_to_distance_function (\n            const matrix_exp<EXP>& vect\n        ) const\n        /*!\n            requires\n                - is_vector(vect) == true\n                - vect.size() == out_vector_size()\n                - out_vector_size() != 0\n            ensures\n                - This function interprets the given vector as a point in the kernel feature space defined \n                  by this empirical_kernel_map.  The return value of this function is a distance \n                  function, DF, that represents the given vector in the following sense:\n                    - for any sample_type object S, the following equality is approximately true: \n                        - DF(S) == length(project(S) - vect)\n                          (i.e. the returned distance function computes distances, in kernel feature space, \n                          between vect and any argument you give it. )\n                    - The approximation error in the above equality will be zero (within rounding error)\n                      if S is within the span of the set of basis samples given to the load() function.  \n                      If it is not then there will be some approximation error.  Note that all the basis \n                      samples are always within their own span.  So the equality is always exact for the \n                      samples given to the load() function.  Note further that the distance computed\n                      by DF(S) is always the correct distance in kernel feature space between vect and\n                      the true projection of S.  That is, the above equality is approximate only because \n                      of potential error in the project() function, not in DF(S).\n                    - DF.kernel_function == get_kernel()\n                    - DF.b == dot(vect,vect) \n                    - DF.basis_vectors == these will be the basis samples given to the previous call to load().  Note\n                      that it is possible for there to be fewer basis_vectors than basis samples given to load().  \n                    - DF.basis_vectors.size() == basis_size()\n        !*/\n\n        const projection_function<kernel_type> get_projection_function (\n        ) const;\n        /*!\n            requires\n                - out_vector_size() != 0\n            ensures\n                - returns a projection_function, PF, that computes the same projection as project().\n                  That is, calling PF() on any sample will produce the same output vector as calling\n                  this->project() on that sample.\n                - PF.basis_vectors.size() == basis_size()\n        !*/\n\n        const matrix<scalar_type,0,0,mem_manager_type> get_transformation_to (\n            const empirical_kernel_map& target\n        ) const;\n        /*!\n            requires\n                - get_kernel() == target.get_kernel()\n                - out_vector_size() != 0\n                - target.out_vector_size() != 0\n            ensures\n                - A point in the kernel feature space defined by the kernel get_kernel() typically\n                  has different representations with respect to different empirical_kernel_maps.\n                  This function lets you obtain a transformation matrix that will allow you\n                  to project between these different representations. That is, this function returns \n                  a matrix M with the following properties:    \n                    - M maps vectors represented according to *this into the representation used by target. \n                    - M.nr() == target.out_vector_size()\n                    - M.nc() == this->out_vector_size()\n                    - Let V be a vector of this->out_vector_size() length.  Then define two distance_functions\n                      DF1 = this->convert_to_distance_function(V)\n                      DF2 = target.convert_to_distance_function(M*V)\n\n                      Then DF1(DF2) == 0 // i.e. the distance between these two points should be 0\n\n                      That is, DF1 and DF2 both represent the same point in kernel feature space.  Note\n                      that the above equality is only approximate.  If the vector V represents a point in\n                      kernel space that isn't in the span of the basis samples used by target then the \n                      equality is approximate.  However, if it is in their span then the equality will\n                      be exact.  For example, if target's basis samples are a superset of the basis samples\n                      used by *this then the equality will always be exact (within rounding error).\n        !*/\n\n        void get_transformation_to (\n            const empirical_kernel_map& target,\n            matrix<scalar_type, 0, 0, mem_manager_type>& tmat,\n            projection_function<kernel_type>& partial_projection\n        ) const;\n        /*!\n            requires\n                - get_kernel() == target.get_kernel()\n                - out_vector_size() != 0\n                - target.out_vector_size() != 0\n                - basis_size() < target.basis_size()\n                - for all i < basis_size(): (*this)[i] == target[i]\n                  i.e. target must contain a superset of the basis vectors contained in *this.  Moreover,\n                  it must contain them in the same order.\n            ensures\n                - The single argument version of get_transformation_to() allows you to project \n                  vectors from one empirical_kernel_map representation to another.  This version\n                  provides a somewhat different capability.  Assuming target's basis vectors form a\n                  superset of *this's basis vectors then this form of get_transformation_to() allows\n                  you to reuse a vector from *this ekm to speed up the projection performed by target.\n                  The defining relation is given below.\n                - for any sample S: \n                    - target.project(S) == #tmat * this->project(S) + #partial_projection(S)\n                      (this is always true to within rounding error for any S)\n                - #partial_projection.basis_vectors.size() == target.basis_vectors.size() - this->basis_vectors.size()\n                - #tmat.nr() == target.out_vector_size()\n                - #tmat.nc() == this->out_vector_size()\n        !*/\n\n        void swap (\n            empirical_kernel_map& item\n        );\n        /*!\n            ensures\n                - swaps the state of *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type\n        >\n    void swap (\n        empirical_kernel_map<kernel_type>& a,\n        empirical_kernel_map<kernel_type>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename kernel_type\n        >\n    void serialize (\n        const empirical_kernel_map<kernel_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for empirical_kernel_map objects\n    !*/\n\n    template <\n        typename kernel_type\n        >\n    void deserialize (\n        empirical_kernel_map<kernel_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for empirical_kernel_map objects\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_EMPIRICAL_KERNEl_MAP_ABSTRACT_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/feature_ranking.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_KERNEL_FEATURE_RANKINg_H_\n#define DLIB_KERNEL_FEATURE_RANKINg_H_\n\n#include <vector>\n#include <limits>\n\n#include \"feature_ranking_abstract.h\"\n#include \"kcentroid.h\"\n#include \"../optimization.h\"\n#include \"../statistics.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename sample_matrix_type,\n        typename label_matrix_type\n        >\n    matrix<typename kernel_type::scalar_type,0,2,typename kernel_type::mem_manager_type> rank_features_impl (\n        const kcentroid<kernel_type>& kc,\n        const sample_matrix_type& samples,\n        const label_matrix_type& labels\n    )\n    {\n        /*\n            This function ranks features by doing recursive feature elimination\n\n        */\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::mem_manager_type mm;\n\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_binary_classification_problem(samples, labels) == true,\n            \"\\tmatrix rank_features()\"\n            << \"\\n\\t you have given invalid arguments to this function\"\n            );\n\n        matrix<scalar_type,0,2,mm> results(samples(0).nr(), 2);\n        matrix<scalar_type,sample_matrix_type::type::NR,1,mm> mask(samples(0).nr());\n        set_all_elements(mask,1);\n\n        // figure out what the separation is between the two centroids when all the features are \n        // present.\n        scalar_type first_separation;\n        {\n            kcentroid<kernel_type> c1(kc);\n            kcentroid<kernel_type> c2(kc);\n            // find the centers of each class\n            for (long s = 0; s < samples.size(); ++s)\n            {\n                if (labels(s) < 0)\n                {\n                    c1.train(samples(s));\n                }\n                else\n                {\n                    c2.train(samples(s));\n                }\n\n            }\n            first_separation = c1(c2);\n        }\n\n\n        using namespace std;\n\n        for (long i = results.nr()-1; i >= 0; --i)\n        {\n            long worst_feature_idx = 0;\n            scalar_type worst_feature_score = -std::numeric_limits<scalar_type>::infinity();\n\n            // figure out which feature to remove next\n            for (long j = 0; j < mask.size(); ++j)\n            {\n                // skip features we have already removed\n                if (mask(j) == 0)\n                    continue;\n\n                kcentroid<kernel_type> c1(kc);\n                kcentroid<kernel_type> c2(kc);\n\n                // temporarily remove this feature from the working set of features\n                mask(j) = 0;\n\n                // find the centers of each class\n                for (long s = 0; s < samples.size(); ++s)\n                {\n                    if (labels(s) < 0)\n                    {\n                        c1.train(pointwise_multiply(samples(s),mask));\n                    }\n                    else\n                    {\n                        c2.train(pointwise_multiply(samples(s),mask));\n                    }\n\n                }\n\n                // find the distance between the two centroids and use that\n                // as the score\n                const double score = c1(c2);\n\n                if (score > worst_feature_score)\n                {\n                    worst_feature_score = score;\n                    worst_feature_idx = j;\n                }\n\n                // add this feature back to the working set of features\n                mask(j) = 1;\n\n            }\n\n            // now that we know what the next worst feature is record it \n            mask(worst_feature_idx) = 0;\n            results(i,0) = worst_feature_idx;\n            results(i,1) = worst_feature_score; \n        }\n\n        // now normalize the results \n        const scalar_type max_separation = std::max(max(colm(results,1)), first_separation);\n        set_colm(results,1) = colm(results,1)/max_separation;\n        for (long r = 0; r < results.nr()-1; ++r)\n        {\n            results(r,1) = results(r+1,1);\n        }\n        results(results.nr()-1,1) = first_separation/max_separation;\n\n        return results;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename sample_matrix_type,\n        typename label_matrix_type\n        >\n    matrix<typename kernel_type::scalar_type,0,2,typename kernel_type::mem_manager_type> rank_features (\n        const kcentroid<kernel_type>& kc,\n        const sample_matrix_type& samples,\n        const label_matrix_type& labels\n    )\n    {\n        return rank_features_impl(kc, mat(samples), mat(labels));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename sample_matrix_type,\n        typename label_matrix_type\n        >\n    matrix<typename kernel_type::scalar_type,0,2,typename kernel_type::mem_manager_type> rank_features_impl (\n        const kcentroid<kernel_type>& kc,\n        const sample_matrix_type& samples,\n        const label_matrix_type& labels,\n        const long num_features\n    )\n    {\n        /*\n            This function ranks features by doing recursive feature addition \n\n        */\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::mem_manager_type mm;\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_binary_classification_problem(samples, labels) == true,\n            \"\\tmatrix rank_features()\"\n            << \"\\n\\t you have given invalid arguments to this function\"\n            );\n        DLIB_ASSERT(0 < num_features && num_features <= samples(0).nr(),\n            \"\\tmatrix rank_features()\"\n            << \"\\n\\t you have given invalid arguments to this function\"\n            << \"\\n\\t num_features:    \" << num_features\n            << \"\\n\\t samples(0).nr(): \" << samples(0).nr() \n            );\n\n        matrix<scalar_type,0,2,mm> results(num_features, 2);\n        matrix<scalar_type,sample_matrix_type::type::NR,1,mm> mask(samples(0).nr());\n        set_all_elements(mask,0);\n\n        using namespace std;\n\n        for (long i = 0; i < results.nr(); ++i)\n        {\n            long best_feature_idx = 0;\n            scalar_type best_feature_score = -std::numeric_limits<scalar_type>::infinity();\n\n            // figure out which feature to add next\n            for (long j = 0; j < mask.size(); ++j)\n            {\n                // skip features we have already added \n                if (mask(j) == 1)\n                    continue;\n\n                kcentroid<kernel_type> c1(kc);\n                kcentroid<kernel_type> c2(kc);\n\n                // temporarily add this feature to the working set of features\n                mask(j) = 1;\n\n                // find the centers of each class\n                for (long s = 0; s < samples.size(); ++s)\n                {\n                    if (labels(s) < 0)\n                    {\n                        c1.train(pointwise_multiply(samples(s),mask));\n                    }\n                    else\n                    {\n                        c2.train(pointwise_multiply(samples(s),mask));\n                    }\n\n                }\n\n                // find the distance between the two centroids and use that\n                // as the score\n                const double score = c1(c2);\n\n                if (score > best_feature_score)\n                {\n                    best_feature_score = score;\n                    best_feature_idx = j;\n                }\n\n                // take this feature back out of the working set of features\n                mask(j) = 0;\n\n            }\n\n            // now that we know what the next best feature is record it \n            mask(best_feature_idx) = 1;\n            results(i,0) = best_feature_idx;\n            results(i,1) = best_feature_score; \n        }\n\n        // now normalize the results \n        set_colm(results,1) = colm(results,1)/max(colm(results,1));\n\n        return results;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename sample_matrix_type,\n        typename label_matrix_type\n        >\n    matrix<typename kernel_type::scalar_type,0,2,typename kernel_type::mem_manager_type> rank_features (\n        const kcentroid<kernel_type>& kc,\n        const sample_matrix_type& samples,\n        const label_matrix_type& labels,\n        const long num_features\n    )\n    {\n        if (mat(samples).nr() > 0 && num_features == mat(samples)(0).nr())\n        {\n            // if we are going to rank them all then might as well do the recursive feature elimination version\n            return rank_features_impl(kc, mat(samples), mat(labels));\n        }\n        else\n        {\n            return rank_features_impl(kc, mat(samples), mat(labels), num_features);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace rank_features_helpers\n    {\n        template <\n            typename K,\n            typename sample_matrix_type,\n            typename label_matrix_type\n            >\n        typename K::scalar_type centroid_gap (\n            const kcentroid<K>& kc,\n            const sample_matrix_type& samples,\n            const label_matrix_type& labels\n        )\n        {\n            kcentroid<K> kc1(kc);\n            kcentroid<K> kc2(kc);\n\n            // toss all the samples into our kcentroids\n            for (long i = 0; i < samples.size(); ++i)\n            {\n                if (labels(i) > 0)\n                    kc1.train(samples(i));\n                else\n                    kc2.train(samples(i));\n            }\n\n            // now return the separation between the mean of these two centroids\n            return kc1(kc2);\n        }\n\n        template <\n            typename sample_matrix_type,\n            typename label_matrix_type\n            >\n        class test\n        {\n            typedef typename sample_matrix_type::type sample_type;\n            typedef typename sample_type::type scalar_type;\n            typedef typename sample_type::mem_manager_type mem_manager_type;\n\n        public:\n            test (\n                const sample_matrix_type& samples_,\n                const label_matrix_type& labels_,\n                unsigned long num_sv_,\n                bool verbose_\n            ) : samples(samples_), labels(labels_), num_sv(num_sv_), verbose(verbose_)\n            {\n            }\n\n            double operator() (\n                double gamma\n            ) const\n            {\n                using namespace std;\n\n                // we are doing the optimization in log space so don't forget to convert back to normal space\n                gamma = std::exp(gamma);\n\n                typedef radial_basis_kernel<sample_type> kernel_type;\n                // Make a kcentroid and find out what the gap is at the current gamma.  Try to pick a reasonable\n                // tolerance.\n                const double tolerance = std::min(gamma*0.01, 0.01);\n                const kernel_type kern(gamma);\n                kcentroid<kernel_type> kc(kern, tolerance, num_sv);\n                scalar_type temp = centroid_gap(kc, samples, labels);\n\n                if (verbose)\n                {\n                    cout << \"\\rChecking goodness of gamma = \" << gamma << \".  Goodness = \" \n                         << temp << \"                    \" << flush;\n                }\n                return temp;\n            }\n\n            const sample_matrix_type& samples;\n            const label_matrix_type& labels;\n            unsigned long num_sv;\n            bool verbose;\n\n        };\n\n        template <\n            typename sample_matrix_type,\n            typename label_matrix_type\n            >\n        double find_gamma_with_big_centroid_gap_impl (\n            const sample_matrix_type& samples,\n            const label_matrix_type& labels,\n            double initial_gamma,\n            unsigned long num_sv,\n            bool verbose\n        )\n        {\n            using namespace std;\n\n            if (verbose)\n            {\n                cout << endl;\n            }\n\n            test<sample_matrix_type, label_matrix_type> funct(samples, labels, num_sv, verbose);\n            double best_gamma = std::log(initial_gamma);\n            double goodness = find_max_single_variable(funct, best_gamma, -15, 15, 1e-3, 100);\n            \n            if (verbose)\n            {\n                cout << \"\\rBest gamma = \" << std::exp(best_gamma) << \".  Goodness = \" \n                    << goodness << \"                    \" << endl;\n            }\n\n            return std::exp(best_gamma);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_matrix_type,\n        typename label_matrix_type\n        >\n    double find_gamma_with_big_centroid_gap (\n        const sample_matrix_type& samples,\n        const label_matrix_type& labels,\n        double initial_gamma = 0.1,\n        unsigned long num_sv = 40\n    )\n    {\n        DLIB_ASSERT(initial_gamma > 0 && num_sv > 0 && is_binary_classification_problem(samples, labels),\n            \"\\t double find_gamma_with_big_centroid_gap()\"\n            << \"\\n\\t initial_gamma: \" << initial_gamma\n            << \"\\n\\t num_sv:        \" << num_sv \n            << \"\\n\\t is_binary_classification_problem(): \" << is_binary_classification_problem(samples, labels) \n            );\n\n        return rank_features_helpers::find_gamma_with_big_centroid_gap_impl(mat(samples), \n                                                             mat(labels),\n                                                             initial_gamma,\n                                                             num_sv,\n                                                             false);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_matrix_type,\n        typename label_matrix_type\n        >\n    double verbose_find_gamma_with_big_centroid_gap (\n        const sample_matrix_type& samples,\n        const label_matrix_type& labels,\n        double initial_gamma = 0.1,\n        unsigned long num_sv = 40\n    )\n    {\n        DLIB_ASSERT(initial_gamma > 0 && num_sv > 0 && is_binary_classification_problem(samples, labels),\n            \"\\t double verbose_find_gamma_with_big_centroid_gap()\"\n            << \"\\n\\t initial_gamma: \" << initial_gamma\n            << \"\\n\\t num_sv:        \" << num_sv \n            << \"\\n\\t is_binary_classification_problem(): \" << is_binary_classification_problem(samples, labels) \n            );\n\n        return rank_features_helpers::find_gamma_with_big_centroid_gap_impl(mat(samples), \n                                                             mat(labels),\n                                                             initial_gamma,\n                                                             num_sv,\n                                                             true);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    double compute_mean_squared_distance (\n        const vector_type& samples\n    )\n    {\n        running_stats<double> rs;\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            for (unsigned long j = i+1; j < samples.size(); ++j)\n            {\n                rs.add(length_squared(samples[i] - samples[j]));\n            }\n        }\n\n        return rs.mean();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KERNEL_FEATURE_RANKINg_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/feature_ranking_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_KERNEL_FEATURE_RANKINg_ABSTRACT_H_\n#ifdef DLIB_KERNEL_FEATURE_RANKINg_ABSTRACT_H_\n\n#include <vector>\n#include <limits>\n\n#include \"svm_abstract.h\"\n#include \"kcentroid_abstract.h\"\n#include \"../is_kind.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename sample_matrix_type,\n        typename label_matrix_type\n        >\n    matrix<typename kernel_type::scalar_type> rank_features (\n        const kcentroid<kernel_type>& kc,\n        const sample_matrix_type& samples,\n        const label_matrix_type& labels,\n        const long num_features = samples(0).nr()\n    );\n    /*!\n        requires\n            - sample_matrix_type == a matrix or something convertible to a matrix via mat()\n            - label_matrix_type  == a matrix or something convertible to a matrix via mat()\n            - is_binary_classification_problem(samples, labels) == true\n            - kc.train(samples(0)) must be a valid expression.  This means that\n              kc must use a kernel type that is capable of operating on the\n              contents of the samples matrix\n            - 0 < num_features <= samples(0).nr()\n        ensures\n            - Let Class1 denote the centroid of all the samples with labels that are < 0\n            - Let Class2 denote the centroid of all the samples with labels that are > 0\n            - finds a ranking of the features where the best features come first.  This \n              function does this by computing the distance between the centroid of the Class1 \n              samples and the Class2 samples in kernel defined feature space.\n              Good features are then ones that result in the biggest separation between\n              the two centroids of Class1 and Class2.\n            - Uses the kc object to compute the centroids of the two classes\n            - returns a ranking matrix R where:\n                - R.nr() == num_features\n                - r.nc() == 2\n                - R(i,0) == the index of the ith best feature according to our ranking.\n                  (e.g. samples(n)(R(0,0)) is the best feature from sample(n) and\n                   samples(n)(R(1,0)) is the second best, samples(n)(R(2,0)) the\n                   third best and so on)\n                - R(i,1) == a number that indicates how much separation exists between \n                  the two centroids when features 0 through i are used.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_matrix_type,\n        typename label_matrix_type\n        >\n    double find_gamma_with_big_centroid_gap (\n        const sample_matrix_type& samples,\n        const label_matrix_type& labels,\n        double initial_gamma = 0.1,\n        unsigned long num_sv = 40\n    );\n    /*!\n        requires\n            - initial_gamma > 0\n            - num_sv > 0\n            - is_binary_classification_problem(samples, labels) == true\n        ensures\n            - This is a function that tries to pick a reasonable default value for the gamma \n              parameter of the radial_basis_kernel.  It picks the parameter that gives the \n              largest separation between the centroids, in kernel feature space, of two classes \n              of data. It does this using the kcentroid object and it sets the kcentroid up \n              to use num_sv dictionary vectors.\n            - This function does a search for the best gamma and the search starts with\n              the value given by initial_gamma.  Better initial guesses will give \n              better results since the routine may get stuck in a local minima.\n            - returns the value of gamma that results in the largest separation.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_matrix_type,\n        typename label_matrix_type\n        >\n    double verbose_find_gamma_with_big_centroid_gap (\n        const sample_matrix_type& samples,\n        const label_matrix_type& labels,\n        double initial_gamma = 0.1,\n        unsigned long num_sv = 40\n    );\n    /*!\n        requires\n            - initial_gamma > 0\n            - num_sv > 0\n            - is_binary_classification_problem(samples, labels) == true\n        ensures\n            - This function does the same exact thing as the above find_gamma_with_big_centroid_gap()\n              except that it is also verbose in the sense that it will print status messages to\n              standard out during its processing.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type\n        >\n    double compute_mean_squared_distance (\n        const vector_type& samples\n    );\n    /*!\n        requires\n            - vector_type is something with an interface compatible with std::vector.  \n              Additionally, it must in turn contain dlib::matrix types which contain \n              scalars such as float or double values.\n            - for all valid i: is_vector(samples[i]) == true\n        ensures\n            - computes the average value of the squares of all the pairwise \n              distances between every element of samples.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KERNEL_FEATURE_RANKINg_ABSTRACT_H_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/function.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_FUNCTION\n#define DLIB_SVm_FUNCTION\n\n#include \"function_abstract.h\"\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../rand.h\"\n#include \"../statistics.h\"\n#include \"kernel_matrix.h\"\n#include \"kernel.h\"\n#include \"sparse_kernel.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K\n        >\n    struct decision_function\n    {\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::scalar_type result_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<sample_type,0,1,mem_manager_type> sample_vector_type;\n\n        scalar_vector_type alpha;\n        scalar_type b;\n        K kernel_function;\n        sample_vector_type basis_vectors;\n\n        decision_function (\n        ) : b(0), kernel_function(K()) {}\n\n        decision_function (\n            const decision_function& d\n        ) : \n            alpha(d.alpha), \n            b(d.b),\n            kernel_function(d.kernel_function),\n            basis_vectors(d.basis_vectors) \n        {}\n\n        decision_function (\n            const scalar_vector_type& alpha_,\n            const scalar_type& b_,\n            const K& kernel_function_,\n            const sample_vector_type& basis_vectors_\n        ) :\n            alpha(alpha_),\n            b(b_),\n            kernel_function(kernel_function_),\n            basis_vectors(basis_vectors_)\n        {}\n\n        result_type operator() (\n            const sample_type& x\n        ) const\n        {\n            result_type temp = 0;\n            for (long i = 0; i < alpha.nr(); ++i)\n                temp += alpha(i) * kernel_function(x,basis_vectors(i));\n\n            return temp - b;\n        }\n    };\n\n    template <\n        typename K\n        >\n    void serialize (\n        const decision_function<K>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.alpha, out);\n            serialize(item.b,     out);\n            serialize(item.kernel_function, out);\n            serialize(item.basis_vectors, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type decision_function\"); \n        }\n    }\n\n    template <\n        typename K\n        >\n    void deserialize (\n        decision_function<K>& item,\n        std::istream& in \n    )\n    {\n        try\n        {\n            deserialize(item.alpha, in);\n            deserialize(item.b, in);\n            deserialize(item.kernel_function, in);\n            deserialize(item.basis_vectors, in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type decision_function\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename function_type\n        >\n    struct probabilistic_function\n    {\n        typedef typename function_type::scalar_type scalar_type;\n        typedef typename function_type::result_type result_type;\n        typedef typename function_type::sample_type sample_type;\n        typedef typename function_type::mem_manager_type mem_manager_type;\n\n        scalar_type alpha;\n        scalar_type beta;\n        function_type decision_funct;\n\n        probabilistic_function (\n        ) : alpha(0), beta(0), decision_funct(function_type()) {}\n\n        probabilistic_function (\n            const probabilistic_function& d\n        ) : \n            alpha(d.alpha),\n            beta(d.beta),\n            decision_funct(d.decision_funct)\n        {}\n\n        probabilistic_function (\n            const scalar_type a_,\n            const scalar_type b_,\n            const function_type& decision_funct_ \n        ) :\n            alpha(a_),\n            beta(b_),\n            decision_funct(decision_funct_)\n        {}\n\n        result_type operator() (\n            const sample_type& x\n        ) const\n        {\n            result_type f = decision_funct(x);\n            return 1/(1 + std::exp(alpha*f + beta));\n        }\n    };\n\n    template <\n        typename function_type \n        >\n    void serialize (\n        const probabilistic_function<function_type>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.alpha, out);\n            serialize(item.beta, out);\n            serialize(item.decision_funct, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type probabilistic_function\"); \n        }\n    }\n\n    template <\n        typename function_type\n        >\n    void deserialize (\n        probabilistic_function<function_type>& item,\n        std::istream& in \n    )\n    {\n        try\n        {\n            deserialize(item.alpha, in);\n            deserialize(item.beta, in);\n            deserialize(item.decision_funct, in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type probabilistic_function\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    struct probabilistic_decision_function\n    {\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::scalar_type result_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        scalar_type alpha;\n        scalar_type beta;\n        decision_function<K> decision_funct;\n\n        probabilistic_decision_function (\n        ) : alpha(0), beta(0), decision_funct(decision_function<K>()) {}\n\n        probabilistic_decision_function (\n            const probabilistic_function<decision_function<K> >& d\n        ) : \n            alpha(d.alpha),\n            beta(d.beta),\n            decision_funct(d.decision_funct)\n        {}\n\n        probabilistic_decision_function (\n            const probabilistic_decision_function& d\n        ) : \n            alpha(d.alpha),\n            beta(d.beta),\n            decision_funct(d.decision_funct)\n        {}\n\n        probabilistic_decision_function (\n            const scalar_type a_,\n            const scalar_type b_,\n            const decision_function<K>& decision_funct_ \n        ) :\n            alpha(a_),\n            beta(b_),\n            decision_funct(decision_funct_)\n        {}\n\n        result_type operator() (\n            const sample_type& x\n        ) const\n        {\n            result_type f = decision_funct(x);\n            return 1/(1 + std::exp(alpha*f + beta));\n        }\n    };\n\n    template <\n        typename K \n        >\n    void serialize (\n        const probabilistic_decision_function<K>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.alpha, out);\n            serialize(item.beta, out);\n            serialize(item.decision_funct, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type probabilistic_decision_function\"); \n        }\n    }\n\n    template <\n        typename K \n        >\n    void deserialize (\n        probabilistic_decision_function<K>& item,\n        std::istream& in \n    )\n    {\n        try\n        {\n            deserialize(item.alpha, in);\n            deserialize(item.beta, in);\n            deserialize(item.decision_funct, in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type probabilistic_decision_function\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K\n        >\n    class distance_function\n    {\n    public:\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::scalar_type result_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<sample_type,0,1,mem_manager_type> sample_vector_type;\n\n\n        distance_function (\n        ) : b(0), kernel_function(K()) {}\n\n        explicit distance_function (\n            const kernel_type& kern\n        ) : b(0), kernel_function(kern) {}\n\n        distance_function (\n            const kernel_type& kern,\n            const sample_type& samp\n        ) :\n            alpha(ones_matrix<scalar_type>(1,1)),\n            b(kern(samp,samp)),\n            kernel_function(kern)\n        {\n            basis_vectors.set_size(1,1);\n            basis_vectors(0) = samp;\n        }\n\n        distance_function (\n            const decision_function<K>& f\n        ) :\n            alpha(f.alpha),\n            b(trans(f.alpha)*kernel_matrix(f.kernel_function,f.basis_vectors)*f.alpha),\n            kernel_function(f.kernel_function),\n            basis_vectors(f.basis_vectors)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(f.alpha.size() == f.basis_vectors.size(),\n                \"\\t distance_function(f)\"\n                << \"\\n\\t The supplied decision_function is invalid.\"\n                << \"\\n\\t f.alpha.size(): \" << f.alpha.size()\n                << \"\\n\\t f.basis_vectors.size(): \" << f.basis_vectors.size()\n                );\n        }\n\n        distance_function (\n            const distance_function& d\n        ) : \n            alpha(d.alpha), \n            b(d.b),\n            kernel_function(d.kernel_function),\n            basis_vectors(d.basis_vectors) \n        {\n        }\n\n        distance_function (\n            const scalar_vector_type& alpha_,\n            const scalar_type& b_,\n            const K& kernel_function_,\n            const sample_vector_type& basis_vectors_\n        ) :\n            alpha(alpha_),\n            b(b_),\n            kernel_function(kernel_function_),\n            basis_vectors(basis_vectors_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(alpha_.size() == basis_vectors_.size(),\n                \"\\t distance_function()\"\n                << \"\\n\\t The supplied arguments are invalid.\"\n                << \"\\n\\t alpha_.size(): \" << alpha_.size()\n                << \"\\n\\t basis_vectors_.size(): \" << basis_vectors_.size()\n                );\n        }\n\n        distance_function (\n            const scalar_vector_type& alpha_,\n            const K& kernel_function_,\n            const sample_vector_type& basis_vectors_\n        ) :\n            alpha(alpha_),\n            b(trans(alpha)*kernel_matrix(kernel_function_,basis_vectors_)*alpha),\n            kernel_function(kernel_function_),\n            basis_vectors(basis_vectors_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(alpha_.size() == basis_vectors_.size(),\n                \"\\t distance_function()\"\n                << \"\\n\\t The supplied arguments are invalid.\"\n                << \"\\n\\t alpha_.size(): \" << alpha_.size()\n                << \"\\n\\t basis_vectors_.size(): \" << basis_vectors_.size()\n                );\n        }\n\n        const scalar_vector_type& get_alpha (\n        ) const { return alpha; }\n\n        const scalar_type& get_squared_norm (\n        ) const { return b; }\n\n        const K& get_kernel(\n        ) const { return kernel_function; }\n\n        const sample_vector_type& get_basis_vectors (\n        ) const { return basis_vectors; }\n\n        result_type operator() (\n            const sample_type& x\n        ) const\n        {\n            result_type temp = 0;\n            for (long i = 0; i < alpha.nr(); ++i)\n                temp += alpha(i) * kernel_function(x,basis_vectors(i));\n\n            temp = b + kernel_function(x,x) - 2*temp; \n            if (temp > 0)\n                return std::sqrt(temp);\n            else\n                return 0;\n        }\n\n        result_type operator() (\n            const distance_function& x\n        ) const\n        {\n            result_type temp = 0;\n            for (long i = 0; i < alpha.nr(); ++i)\n                for (long j = 0; j < x.alpha.nr(); ++j)\n                    temp += alpha(i)*x.alpha(j) * kernel_function(basis_vectors(i), x.basis_vectors(j));\n\n            temp = b + x.b - 2*temp;\n            if (temp > 0)\n                return std::sqrt(temp);\n            else\n                return 0;\n        }\n\n        distance_function operator* (\n            const scalar_type& val\n        ) const\n        {\n            return distance_function(val*alpha,\n                                     val*val*b,\n                                     kernel_function,\n                                     basis_vectors);\n        }\n\n        distance_function operator/ (\n            const scalar_type& val\n        ) const\n        {\n            return distance_function(alpha/val,\n                                     b/val/val,\n                                     kernel_function,\n                                     basis_vectors);\n        }\n\n        distance_function operator+ (\n            const distance_function& rhs\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(get_kernel() == rhs.get_kernel(),\n                \"\\t distance_function distance_function::operator+()\"\n                << \"\\n\\t You can only add two distance_functions together if they use the same kernel.\"\n                );\n\n            if (alpha.size() == 0)\n                return rhs;\n            else if (rhs.alpha.size() == 0)\n                return *this;\n            else\n                return distance_function(join_cols(alpha, rhs.alpha),\n                                        b + rhs.b + 2*trans(alpha)*kernel_matrix(kernel_function,basis_vectors,rhs.basis_vectors)*rhs.alpha,\n                                        kernel_function,\n                                        join_cols(basis_vectors, rhs.basis_vectors));\n        }\n\n        distance_function operator- (\n            const distance_function& rhs\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(get_kernel() == rhs.get_kernel(),\n                \"\\t distance_function distance_function::operator-()\"\n                << \"\\n\\t You can only subtract two distance_functions if they use the same kernel.\"\n                );\n\n            if (alpha.size() == 0 && rhs.alpha.size() == 0)\n                return distance_function(kernel_function);\n            else if (alpha.size() != 0 && rhs.alpha.size() == 0)\n                return *this;\n            else if (alpha.size() == 0 && rhs.alpha.size() != 0)\n                return -1*rhs;\n            else\n                return distance_function(join_cols(alpha, -rhs.alpha),\n                                        b + rhs.b - 2*trans(alpha)*kernel_matrix(kernel_function,basis_vectors,rhs.basis_vectors)*rhs.alpha,\n                                        kernel_function,\n                                        join_cols(basis_vectors, rhs.basis_vectors));\n        }\n\n    private:\n\n        scalar_vector_type alpha;\n        scalar_type b;\n        K kernel_function;\n        sample_vector_type basis_vectors;\n\n    };\n\n    template <\n        typename K\n        >\n    distance_function<K> operator* (\n        const typename K::scalar_type& val,\n        const distance_function<K>& df\n    ) { return df*val; }\n\n    template <\n        typename K\n        >\n    void serialize (\n        const distance_function<K>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.alpha, out);\n            serialize(item.b,     out);\n            serialize(item.kernel_function, out);\n            serialize(item.basis_vectors, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type distance_function\"); \n        }\n    }\n\n    template <\n        typename K\n        >\n    void deserialize (\n        distance_function<K>& item,\n        std::istream& in \n    )\n    {\n        try\n        {\n            deserialize(item.alpha, in);\n            deserialize(item.b, in);\n            deserialize(item.kernel_function, in);\n            deserialize(item.basis_vectors, in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type distance_function\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename function_type,\n        typename normalizer_type = vector_normalizer<typename function_type::sample_type>\n        >\n    struct normalized_function \n    {\n        typedef typename function_type::result_type result_type;\n        typedef typename function_type::sample_type sample_type;\n        typedef typename function_type::mem_manager_type mem_manager_type;\n\n        normalizer_type normalizer;\n        function_type function;\n\n        normalized_function (\n        ){}\n\n        normalized_function (\n            const normalized_function& f\n        ) :\n            normalizer(f.normalizer),\n            function(f.function)\n        {}\n\n        const std::vector<result_type> get_labels(\n        ) const { return function.get_labels(); }\n\n        unsigned long number_of_classes (\n        ) const { return function.number_of_classes(); }\n\n        normalized_function (\n            const vector_normalizer<sample_type>& normalizer_,\n            const function_type& funct \n        ) : normalizer(normalizer_), function(funct) {}\n\n        result_type operator() (\n            const sample_type& x\n        ) const { return function(normalizer(x)); }\n    };\n\n    template <\n        typename function_type,\n        typename normalizer_type \n        >\n    void serialize (\n        const normalized_function<function_type,normalizer_type>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.normalizer, out);\n            serialize(item.function,     out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type normalized_function\"); \n        }\n    }\n\n    template <\n        typename function_type,\n        typename normalizer_type \n        >\n    void deserialize (\n        normalized_function<function_type,normalizer_type>& item,\n        std::istream& in \n    )\n    {\n        try\n        {\n            deserialize(item.normalizer, in);\n            deserialize(item.function, in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type normalized_function\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K\n        >\n    struct projection_function \n    {\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type> scalar_matrix_type;\n        typedef matrix<sample_type,0,1,mem_manager_type> sample_vector_type;\n        typedef scalar_vector_type result_type;\n\n        scalar_matrix_type weights;\n        K                  kernel_function;\n        sample_vector_type basis_vectors;\n\n        projection_function (\n        ) {}\n\n        projection_function (\n            const projection_function& f\n        ) : weights(f.weights), kernel_function(f.kernel_function), basis_vectors(f.basis_vectors) {}\n\n        projection_function (\n            const scalar_matrix_type& weights_,\n            const K& kernel_function_,\n            const sample_vector_type& basis_vectors_\n        ) : weights(weights_), kernel_function(kernel_function_), basis_vectors(basis_vectors_) {}\n\n        long out_vector_size (\n        ) const { return weights.nr(); }\n\n        const result_type& operator() (\n            const sample_type& x\n        ) const\n        {\n            // Run the x sample through all the basis functions we have and then\n            // multiply it by the weights matrix and return the result.  Note that\n            // the temp vectors are here to avoid reallocating their memory every\n            // time this function is called.\n            temp1 = kernel_matrix(kernel_function, basis_vectors, x);\n            temp2 = weights*temp1;\n            return temp2;\n        }\n\n    private:\n        mutable result_type temp1, temp2;\n    };\n\n    template <\n        typename K\n        >\n    void serialize (\n        const projection_function<K>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.weights, out);\n            serialize(item.kernel_function,     out);\n            serialize(item.basis_vectors,     out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type projection_function\"); \n        }\n    }\n\n    template <\n        typename K\n        >\n    void deserialize (\n        projection_function<K>& item,\n        std::istream& in \n    )\n    {\n        try\n        {\n            deserialize(item.weights, in);\n            deserialize(item.kernel_function,     in);\n            deserialize(item.basis_vectors,     in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type projection_function\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename result_type_ = typename K::scalar_type \n        >\n    struct multiclass_linear_decision_function\n    {\n        typedef result_type_ result_type;\n\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type> scalar_matrix_type;\n\n        // You are getting a compiler error on this line because you supplied a non-linear kernel\n        // to the multiclass_linear_decision_function object.  You have to use one of the linear \n        // kernels with this object.\n        COMPILE_TIME_ASSERT((is_same_type<K, linear_kernel<sample_type> >::value ||\n                             is_same_type<K, sparse_linear_kernel<sample_type> >::value ));\n\n\n        scalar_matrix_type       weights;\n        scalar_vector_type       b;\n        std::vector<result_type> labels; \n\n        const std::vector<result_type>& get_labels(\n        ) const { return labels; }\n\n        unsigned long number_of_classes (\n        ) const { return labels.size(); }\n\n        std::pair<result_type, scalar_type> predict (\n            const sample_type& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(weights.size() > 0 && \n                        weights.nr() == (long)number_of_classes() &&\n                        weights.nr() == b.size(),\n                \"\\t pair<result_type,scalar_type> multiclass_linear_decision_function::predict(x)\"\n                << \"\\n\\t This object must be properly initialized before you can use it.\"\n                << \"\\n\\t weights.size():      \" << weights.size()\n                << \"\\n\\t weights.nr():        \" << weights.nr()\n                << \"\\n\\t number_of_classes(): \" << number_of_classes()\n                );\n\n            // Rather than doing something like, best_idx = index_of_max(weights*x-b)\n            // we do the following somewhat more complex thing because this supports\n            // both sparse and dense samples.\n            scalar_type best_val = dot(rowm(weights,0),x) - b(0);\n            unsigned long best_idx = 0;\n\n            for (unsigned long i = 1; i < labels.size(); ++i)\n            {\n                scalar_type temp = dot(rowm(weights,i),x) - b(i);\n                if (temp > best_val)\n                {\n                    best_val = temp;\n                    best_idx = i;\n                }\n            }\n\n            return std::make_pair(labels[best_idx], best_val);\n        }\n\n        result_type operator() (\n            const sample_type& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(weights.size() > 0 && \n                        weights.nr() == (long)number_of_classes() &&\n                        weights.nr() == b.size(),\n                \"\\t result_type multiclass_linear_decision_function::operator()(x)\"\n                << \"\\n\\t This object must be properly initialized before you can use it.\"\n                << \"\\n\\t weights.size():      \" << weights.size()\n                << \"\\n\\t weights.nr():        \" << weights.nr()\n                << \"\\n\\t number_of_classes(): \" << number_of_classes()\n                );\n\n            return predict(x).first;\n        }\n    };\n\n    template <\n        typename K,\n        typename result_type_\n        >\n    void serialize (\n        const multiclass_linear_decision_function<K,result_type_>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.weights,         out);\n            serialize(item.b,               out);\n            serialize(item.labels,          out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type multiclass_linear_decision_function\"); \n        }\n    }\n\n    template <\n        typename K,\n        typename result_type_\n        >\n    void deserialize (\n        multiclass_linear_decision_function<K,result_type_>& item,\n        std::istream& in \n    )\n    {\n        try\n        {\n            deserialize(item.weights,         in);\n            deserialize(item.b,               in);\n            deserialize(item.labels,          in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type multiclass_linear_decision_function\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_FUNCTION\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/function_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_FUNCTION_ABSTRACT_\n#ifdef DLIB_SVm_FUNCTION_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../statistics/statistics_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K\n        >\n    struct decision_function \n    {\n        /*!\n            REQUIREMENTS ON K\n                K must be a kernel function object type as defined at the\n                top of dlib/svm/kernel_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS \n                This object represents a classification or regression function that was \n                learned by a kernel based learning algorithm.   Therefore, it is a function \n                object that takes a sample object and returns a scalar value.\n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call operator() on this object from multiple threads so\n                    long as the kernel, K, is also threadsafe.  This is because operator()\n                    is a read-only operation.  However, any operation that modifies a\n                    decision_function is not threadsafe.\n        !*/\n\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::scalar_type result_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<sample_type,0,1,mem_manager_type> sample_vector_type;\n\n        scalar_vector_type alpha;\n        scalar_type        b;\n        K                  kernel_function;\n        sample_vector_type basis_vectors;\n\n        decision_function (\n        );\n        /*!\n            ensures\n                - #b == 0\n                - #alpha.nr() == 0\n                - #basis_vectors.nr() == 0\n        !*/\n\n        decision_function (\n            const decision_function& f\n        );\n        /*!\n            ensures\n                - #*this is a copy of f\n        !*/\n\n        decision_function (\n            const scalar_vector_type& alpha_,\n            const scalar_type& b_,\n            const K& kernel_function_,\n            const sample_vector_type& basis_vectors_\n        ) : alpha(alpha_), b(b_), kernel_function(kernel_function_), basis_vectors(basis_vectors_) {}\n        /*!\n            ensures\n                - populates the decision function with the given basis vectors, weights(i.e. alphas),\n                  b term, and kernel function.\n        !*/\n\n        result_type operator() (\n            const sample_type& x\n        ) const\n        /*!\n            ensures\n                - evaluates this sample according to the decision\n                  function contained in this object.\n        !*/\n        {\n            result_type temp = 0;\n            for (long i = 0; i < alpha.nr(); ++i)\n                temp += alpha(i) * kernel_function(x,basis_vectors(i));\n\n            return temp - b;\n        }\n    };\n\n    template <\n        typename K\n        >\n    void serialize (\n        const decision_function<K>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for decision_function\n    !*/\n\n    template <\n        typename K\n        >\n    void deserialize (\n        decision_function<K>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for decision_function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename function_type \n        >\n    struct probabilistic_function \n    {\n        /*!\n            REQUIREMENTS ON function_type \n                - function_type must be a function object with an overloaded\n                  operator() similar to the other function objects defined in\n                  this file.  The operator() should return a scalar type such as\n                  double or float.\n\n            WHAT THIS OBJECT REPRESENTS \n                This object represents a binary decision function that returns an \n                estimate of the probability that a given sample is in the +1 class.\n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call operator() on this object from multiple threads so\n                    long as decision_funct is also threadsafe.  This is because operator()\n                    is a read-only operation.  However, any operation that modifies a\n                    probabilistic_function is not threadsafe.\n        !*/\n\n        typedef typename function_type::scalar_type scalar_type;\n        typedef typename function_type::result_type result_type;\n        typedef typename function_type::sample_type sample_type;\n        typedef typename function_type::mem_manager_type mem_manager_type;\n\n        scalar_type alpha;\n        scalar_type beta;\n        function_type decision_funct;\n\n        probabilistic_function (\n        );\n        /*!\n            ensures\n                - #alpha == 0\n                - #beta == 0\n                - #decision_funct has its initial value\n        !*/\n\n        probabilistic_function (\n            const probabilistic_function& f\n        );\n        /*!\n            ensures\n                - #*this is a copy of f\n        !*/\n\n        probabilistic_function (\n            const scalar_type a,\n            const scalar_type b,\n            const function_type& decision_funct_ \n        ) : alpha(a), beta(b), decision_funct(decision_funct_) {}\n        /*!\n            ensures\n                - populates the probabilistic decision function with the given alpha, beta, \n                  and decision function.\n        !*/\n\n        result_type operator() (\n            const sample_type& x\n        ) const\n        /*!\n            ensures\n                - returns a number P such that:\n                    - 0 <= P <= 1\n                    - P represents the probability that sample x is from \n                      the class +1\n        !*/\n        {\n            // Evaluate the normal decision function\n            result_type f = decision_funct(x);\n            // Now basically normalize the output so that it is a properly\n            // conditioned probability of x being in the +1 class given\n            // the output of the decision function.\n            return 1/(1 + std::exp(alpha*f + beta));\n        }\n    };\n\n    template <\n        typename function_type\n        >\n    void serialize (\n        const probabilistic_function<function_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for probabilistic_function\n    !*/\n\n    template <\n        typename function_type\n        >\n    void deserialize (\n        probabilistic_function<function_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for probabilistic_function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K\n        >\n    struct probabilistic_decision_function \n    {\n        /*!\n            REQUIREMENTS ON K\n                K must be a kernel function object type as defined at the\n                top of dlib/svm/kernel_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS \n                This object represents a binary decision function that returns an \n                estimate of the probability that a given sample is in the +1 class.\n\n                Note that this object is essentially just a copy of \n                probabilistic_function but with the template argument \n                changed from being a function type to a kernel type.  Therefore, this\n                type is just a convenient version of probabilistic_function\n                for the case where the decision function is a dlib::decision_function<K>.\n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call operator() on this object from multiple threads so\n                    long as the kernel, K, is also threadsafe.  This is because operator()\n                    is a read-only operation.  However, any operation that modifies a\n                    probabilistic_decision_function is not threadsafe.\n        !*/\n\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::scalar_type result_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        scalar_type alpha;\n        scalar_type beta;\n        decision_function<K> decision_funct;\n\n        probabilistic_decision_function (\n        );\n        /*!\n            ensures\n                - #alpha == 0\n                - #beta == 0\n                - #decision_funct has its initial value\n        !*/\n\n        probabilistic_decision_function (\n            const probabilistic_decision_function& f\n        );\n        /*!\n            ensures\n                - #*this is a copy of f\n        !*/\n\n        probabilistic_decision_function (\n            const probabilistic_function<decision_function<K> >& d\n        );\n        /*!\n            ensures\n                - #*this is a copy of f\n        !*/\n\n        probabilistic_decision_function (\n            const scalar_type a,\n            const scalar_type b,\n            const decision_function<K>& decision_funct_ \n        ) : alpha(a), beta(b), decision_funct(decision_funct_) {}\n        /*!\n            ensures\n                - populates the probabilistic decision function with the given alpha, beta, \n                  and decision_function.\n        !*/\n\n        result_type operator() (\n            const sample_type& x\n        ) const\n        /*!\n            ensures\n                - returns a number P such that:\n                    - 0 <= P <= 1\n                    - P represents the probability that sample x is from \n                      the class +1\n        !*/\n        {\n            // Evaluate the normal decision function\n            result_type f = decision_funct(x);\n            // Now basically normalize the output so that it is a properly\n            // conditioned probability of x being in the +1 class given\n            // the output of the decision function.\n            return 1/(1 + std::exp(alpha*f + beta));\n        }\n    };\n\n    template <\n        typename K\n        >\n    void serialize (\n        const probabilistic_decision_function<K>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for probabilistic_decision_function\n    !*/\n\n    template <\n        typename K\n        >\n    void deserialize (\n        probabilistic_decision_function<K>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for probabilistic_decision_function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K\n        >\n    class distance_function \n    {\n        /*!\n            REQUIREMENTS ON K\n                K must be a kernel function object type as defined at the\n                top of dlib/svm/kernel_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS \n                This object represents a point in kernel induced feature space. \n                You may use this object to find the distance from the point it \n                represents to points in input space as well as other points\n                represented by distance_functions.\n\n                Specifically, if O() is the feature mapping associated with\n                the kernel used by this object.  Then this object represents\n                the point:  \n                    sum alpha(i)*O(basis_vectors(i))\n\n                I.e.  It represents a linear combination of the basis vectors where \n                the weights of the linear combination are stored in the alpha vector.\n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call the const members of this object from multiple\n                    threads so long as the kernel, K, is also threadsafe.  This is because\n                    the const members are purely read-only operations.  However, any\n                    operation that modifies a distance_function is not threadsafe.\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::scalar_type result_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<sample_type,0,1,mem_manager_type> sample_vector_type;\n\n        distance_function (\n        );\n        /*!\n            ensures\n                - #get_squared_norm() == 0\n                - #get_alpha().size() == 0\n                - #get_basis_vectors().size() == 0\n                - #get_kernel() == K() (i.e. the default value of the kernel)\n        !*/\n\n        explicit distance_function (\n            const kernel_type& kern\n        );\n        /*!\n            ensures\n                - #get_squared_norm() == 0\n                - #get_alpha().size() == 0\n                - #get_basis_vectors().size() == 0\n                - #get_kernel() == kern \n        !*/\n\n        distance_function (\n            const kernel_type& kern,\n            const sample_type& samp\n        );\n        /*!\n            ensures\n                - This object represents the point in kernel feature space which\n                  corresponds directly to the given sample.  In particular this means\n                  that:\n                    - #get_kernel() == kern\n                    - #get_alpha() == a vector of length 1 which contains the value 1 \n                    - #get_basis_vectors() == a vector of length 1 which contains samp\n        !*/\n\n        distance_function (\n            const decision_function<K>& f\n        );\n        /*!\n            ensures\n                - Every decision_function represents a point in kernel feature space along\n                  with a bias value.  This constructor discards the bias value and creates \n                  a distance_function which represents the point associated with the given \n                  decision_function f.  In particular, this means:\n                    - #get_alpha() == f.alpha\n                    - #get_kernel() == f.kernel_function\n                    - #get_basis_vectors() == f.basis_vectors\n        !*/\n\n        distance_function (\n            const distance_function& f\n        );\n        /*!\n            requires\n                - f is a valid distance_function.  In particular, this means that\n                  f.alpha.size() == f.basis_vectors.size()\n            ensures\n                - #*this is a copy of f\n        !*/\n\n        distance_function (\n            const scalar_vector_type& alpha,\n            const scalar_type& squared_norm,\n            const K& kernel_function,\n            const sample_vector_type& basis_vectors\n        ); \n        /*!\n            requires\n                - alpha.size() == basis_vectors.size()\n                - squared_norm == trans(alpha)*kernel_matrix(kernel_function,basis_vectors)*alpha\n                  (Basically, squared_norm needs to be set properly for this object to make sense.  \n                  You should prefer to use the following constructor which computes squared_norm for \n                  you.  This version is provided just in case you already know squared_norm and \n                  don't want to spend CPU cycles to recompute it.)\n            ensures\n                - populates the distance function with the given basis vectors, weights(i.e. alphas),\n                  squared_norm value, and kernel function. I.e.\n                    - #get_alpha() == alpha\n                    - #get_squared_norm() == squared_norm \n                    - #get_kernel() == kernel_function\n                    - #get_basis_vectors() == basis_vectors\n        !*/\n\n        distance_function (\n            const scalar_vector_type& alpha,\n            const K& kernel_function,\n            const sample_vector_type& basis_vectors\n        );\n        /*!\n            requires\n                - alpha.size() == basis_vectors.size()\n            ensures\n                - populates the distance function with the given basis vectors, weights(i.e. alphas), \n                  and kernel function.  The correct b value is computed automatically.  I.e.\n                    - #get_alpha() == alpha\n                    - #get_squared_norm() == trans(alpha)*kernel_matrix(kernel_function,basis_vectors)*alpha\n                      (i.e. get_squared_norm() will be automatically set to the correct value)\n                    - #get_kernel() == kernel_function\n                    - #get_basis_vectors() == basis_vectors\n        !*/\n\n        const scalar_vector_type& get_alpha (\n        ) const; \n        /*!\n            ensures\n                - returns the set of weights on each basis vector in this object\n        !*/\n\n        const scalar_type& get_squared_norm (\n        ) const;\n        /*!\n            ensures\n                - returns the squared norm of the point represented by this object.  This value is\n                  equal to the following expression:\n                    trans(get_alpha()) * kernel_matrix(get_kernel(),get_basis_vectors()) * get_alpha()\n        !*/\n\n        const K& get_kernel(\n        ) const;\n        /*!\n            ensures\n                - returns the kernel used by this object.\n        !*/\n\n        const sample_vector_type& get_basis_vectors (\n        ) const;\n        /*!\n            ensures\n                - returns the set of basis vectors contained in this object\n        !*/\n\n        result_type operator() (\n            const sample_type& x\n        ) const;\n        /*!\n            ensures\n                - Let O(x) represent the point x projected into kernel induced feature space.\n                - let c == sum_over_i get_alpha()(i)*O(get_basis_vectors()(i)) == the point in kernel space that\n                  this object represents.  That is, c is the weighted sum of basis vectors.\n                - Then this object returns the distance between the point O(x) and c in kernel\n                  space. \n        !*/\n\n        result_type operator() (\n            const distance_function& x\n        ) const;\n        /*!\n            requires\n                - kernel_function == x.kernel_function\n            ensures\n                - returns the distance between the points in kernel space represented by *this and x.\n        !*/\n\n        distance_function operator* (\n            const scalar_type& val\n        ) const;\n        /*!\n            ensures\n                - multiplies the point represented by *this by val and returns the result.  In\n                  particular, this function returns a decision_function DF such that:\n                    - DF.get_basis_vectors() == get_basis_vectors()\n                    - DF.get_kernel() == get_kernel() \n                    - DF.get_alpha() == get_alpha() * val\n        !*/\n\n        distance_function operator/ (\n            const scalar_type& val\n        ) const;\n        /*!\n            ensures\n                - divides the point represented by *this by val and returns the result.  In\n                  particular, this function returns a decision_function DF such that:\n                    - DF.get_basis_vectors() == get_basis_vectors()\n                    - DF.get_kernel() == get_kernel() \n                    - DF.get_alpha() == get_alpha() / val\n        !*/\n\n        distance_function operator+ (\n            const distance_function& rhs\n        ) const;\n        /*!\n            requires\n                - get_kernel() == rhs.get_kernel()\n            ensures\n                - returns a distance function DF such that:\n                    - DF represents the sum of the point represented by *this and rhs\n                    - DF.get_basis_vectors().size() == get_basis_vectors().size() + rhs.get_basis_vectors().size()\n                    - DF.get_basis_vectors() contains all the basis vectors in both *this and rhs.\n                    - DF.get_kernel() == get_kernel() \n                    - DF.alpha == join_cols(get_alpha(), rhs.get_alpha())\n        !*/\n\n        distance_function operator- (\n            const distance_function& rhs\n        ) const;\n        /*!\n            requires\n                - get_kernel() == rhs.get_kernel()\n            ensures\n                - returns a distance function DF such that:\n                    - DF represents the difference of the point represented by *this and rhs (i.e. *this - rhs)\n                    - DF.get_basis_vectors().size() == get_basis_vectors().size() + rhs.get_basis_vectors().size()\n                    - DF.get_basis_vectors() contains all the basis vectors in both *this and rhs.\n                    - DF.get_kernel() == get_kernel() \n                    - DF.alpha == join_cols(get_alpha(), -1 * rhs.get_alpha())\n        !*/\n    };\n\n    template <\n        typename K\n        >\n    distance_function<K> operator* (\n        const typename K::scalar_type& val,\n        const distance_function<K>& df\n    ) { return df*val; }\n    /*!\n        ensures\n            - multiplies the point represented by *this by val and returns the result.   This\n              function just allows multiplication syntax of the form val*df.\n    !*/\n\n    template <\n        typename K\n        >\n    void serialize (\n        const distance_function<K>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for distance_function\n    !*/\n\n    template <\n        typename K\n        >\n    void deserialize (\n        distance_function<K>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for distance_function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename function_type,\n        typename normalizer_type = vector_normalizer<typename function_type::sample_type>\n        >\n    struct normalized_function \n    {\n        /*!\n            REQUIREMENTS ON function_type \n                - function_type must be a function object with an overloaded\n                  operator() similar to the other function objects defined in\n                  this file.\n\n            REQUIREMENTS ON normalizer_type\n                - normalizer_type must be a function object with an overloaded\n                  operator() that takes a sample_type and returns a sample_type.\n\n            WHAT THIS OBJECT REPRESENTS \n                This object represents a container for another function\n                object and an instance of a normalizer function.  \n\n                It automatically normalizes all inputs before passing them\n                off to the contained function object.\n        !*/\n\n        typedef typename function_type::result_type result_type;\n        typedef typename function_type::sample_type sample_type;\n        typedef typename function_type::mem_manager_type mem_manager_type;\n\n        normalizer_type normalizer;\n        function_type function;\n\n        normalized_function (\n        );\n        /*!\n            ensures\n                - the members of this object have their default values\n        !*/\n\n        normalized_function (\n            const normalized_function& f\n        );\n        /*!\n            ensures\n                - #*this is a copy of f\n        !*/\n\n        normalized_function (\n            const vector_normalizer<sample_type>& normalizer_,\n            const function_type& funct \n        ) : normalizer(normalizer_), function(funct) {}\n        /*!\n            ensures\n                - populates this object with the vector_normalizer and function object \n        !*/\n\n        const std::vector<result_type> get_labels(\n        ) const;\n        /*!\n            ensures\n                - returns function.get_labels()\n        !*/\n\n        unsigned long number_of_classes (\n        ) const;\n        /*!\n            ensures\n                - returns function.number_of_classes()\n        !*/\n\n        result_type operator() (\n            const sample_type& x\n        ) const\n        /*!\n            ensures\n                - returns function(normalizer(x))\n        !*/\n    };\n\n    template <\n        typename function_type,\n        typename normalizer_type \n        >\n    void serialize (\n        const normalized_function<function_type, normalizer_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for normalized_function\n    !*/\n\n    template <\n        typename function_type,\n        typename normalizer_type \n        >\n    void deserialize (\n        normalized_function<function_type, normalizer_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for normalized_function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K\n        >\n    struct projection_function \n    {\n        /*!\n            REQUIREMENTS ON K\n                K must be a kernel function object type as defined at the\n                top of dlib/svm/kernel_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS \n                This object represents a function that takes a data sample and projects\n                it into kernel feature space.  The result is a real valued column vector that \n                represents a point in a kernel feature space.\n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    Instances of this object have a mutable cache which is used by const\n                    member functions.  Therefore, it is not safe to use one instance of\n                    this object from multiple threads (unless protected by a mutex).\n        !*/\n\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type> scalar_matrix_type;\n        typedef matrix<sample_type,0,1,mem_manager_type> sample_vector_type;\n        typedef scalar_vector_type result_type;\n\n        scalar_matrix_type weights;\n        K                  kernel_function;\n        sample_vector_type basis_vectors;\n\n        projection_function (\n        );\n        /*!\n            ensures\n                - #weights.size() == 0\n                - #basis_vectors.size() == 0\n        !*/\n\n        projection_function (\n            const projection_function& f\n        );\n        /*!\n            ensures\n                - #*this is a copy of f\n        !*/\n\n        projection_function (\n            const scalar_matrix_type& weights_,\n            const K& kernel_function_,\n            const sample_vector_type& basis_vectors_\n        ) : weights(weights_), kernel_function(kernel_function_), basis_vectors(basis_vectors_) {}\n        /*!\n            ensures\n                - populates the projection function with the given basis vectors, weights,\n                  and kernel function.\n        !*/\n\n        long out_vector_size (\n        ) const;\n        /*!\n            ensures\n                - returns weights.nr()\n                  (i.e. returns the dimensionality of the vectors output by this projection_function.)\n        !*/\n\n        const result_type& operator() (\n            const sample_type& x\n        ) const\n        /*!\n            requires\n                - weights.nc() == basis_vectors.size()\n                - out_vector_size() > 0\n            ensures\n                - Takes the given x sample and projects it onto part of the kernel feature \n                  space spanned by the basis_vectors.  The exact projection arithmetic is \n                  defined below.\n        !*/\n        {\n            // Run the x sample through all the basis functions we have and then\n            // multiply it by the weights matrix and return the result.  Note that\n            // the temp vectors are here to avoid reallocating their memory every\n            // time this function is called.\n            temp1 = kernel_matrix(kernel_function, basis_vectors, x);\n            temp2 = weights*temp1;\n            return temp2;\n        }\n\n    private:\n        mutable result_type temp1, temp2;\n    };\n\n    template <\n        typename K\n        >\n    void serialize (\n        const projection_function<K>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for projection_function\n    !*/\n\n    template <\n        typename K\n        >\n    void deserialize (\n        projection_function<K>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for projection_function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename result_type_ = typename K::scalar_type \n        >\n    struct multiclass_linear_decision_function\n    {\n        /*!\n            REQUIREMENTS ON K\n                K must be either linear_kernel or sparse_linear_kernel.  \n\n            WHAT THIS OBJECT REPRESENTS \n                This object represents a multiclass classifier built out of a set of \n                binary classifiers.  Each binary classifier is used to vote for the \n                correct multiclass label using a one vs. all strategy.  Therefore, \n                if you have N classes then there will be N binary classifiers inside \n                this object.  Additionally, this object is linear in the sense that\n                each of these binary classifiers is a simple linear plane.\n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call the const member functions of this object from\n                    multiple threads.  This is because the const members are purely\n                    read-only operations.  However, any operation that modifies a\n                    multiclass_linear_decision_function is not threadsafe.\n        !*/\n\n        typedef result_type_ result_type;\n\n        typedef K kernel_type;\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type> scalar_matrix_type;\n\n        scalar_matrix_type       weights;\n        scalar_vector_type       b;\n        std::vector<result_type> labels; \n\n        const std::vector<result_type>& get_labels(\n        ) const { return labels; }\n        /*!\n            ensures\n                - returns a vector containing all the labels which can be\n                  predicted by this object.\n        !*/\n\n        unsigned long number_of_classes (\n        ) const;\n        /*!\n            ensures\n                - returns get_labels().size()\n                  (i.e. returns the number of different labels/classes predicted by\n                  this object)\n        !*/\n\n        std::pair<result_type, scalar_type> predict (\n            const sample_type& x\n        ) const;\n        /*!\n            requires\n                - weights.size() > 0\n                - weights.nr() == number_of_classes() == b.size()\n                - if (x is a dense vector, i.e. a dlib::matrix) then\n                    - is_vector(x) == true\n                    - x.size() == weights.nc()\n                      (i.e. it must be legal to multiply weights with x)\n            ensures\n                - Returns the predicted label for the x sample and also it's score.  \n                  In particular, it returns the following:\n                    std::make_pair(labels[index_of_max(weights*x-b)],  max(weights*x-b))\n        !*/\n\n        result_type operator() (\n            const sample_type& x\n        ) const;\n        /*!\n            requires\n                - weights.size() > 0\n                - weights.nr() == number_of_classes() == b.size()\n                - if (x is a dense vector, i.e. a dlib::matrix) then\n                    - is_vector(x) == true\n                    - x.size() == weights.nc()\n                      (i.e. it must be legal to multiply weights with x)\n            ensures\n                - Returns the predicted label for the x sample.  In particular, it returns\n                  the following:\n                    labels[index_of_max(weights*x-b)]\n                  Or in other words, this function returns predict(x).first\n        !*/\n    };\n\n    template <\n        typename K,\n        typename result_type_\n        >\n    void serialize (\n        const multiclass_linear_decision_function<K,result_type_>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for multiclass_linear_decision_function\n    !*/\n\n    template <\n        typename K,\n        typename result_type_\n        >\n    void deserialize (\n        multiclass_linear_decision_function<K,result_type_>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for multiclass_linear_decision_function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_FUNCTION_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/kcentroid.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_KCENTROId_\n#define DLIB_KCENTROId_\n\n#include <vector>\n\n#include \"kcentroid_abstract.h\"\n#include \"../matrix.h\"\n#include \"function.h\"\n#include \"../std_allocator.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    class kcentroid\n    {\n        /*!\n            This object represents a weighted sum of sample points in a kernel induced\n            feature space.  It can be used to kernelize any algorithm that requires only\n            the ability to perform vector addition, subtraction, scalar multiplication,\n            and inner products.  It uses the sparsification technique described in the \n            paper The Kernel Recursive Least Squares Algorithm by Yaakov Engel.\n\n            To understand the code it would also be useful to consult page 114 of the book \n            Kernel Methods for Pattern Analysis by Taylor and Cristianini as well as page 554 \n            (particularly equation 18.31) of the book Learning with Kernels by Scholkopf and \n            Smola.  Everything you really need to know is in the Engel paper.  But the other \n            books help give more perspective on the issues involved.\n\n\n            INITIAL VALUE\n                - min_strength == 0\n                - min_vect_idx == 0\n                - K_inv.size() == 0\n                - K.size() == 0\n                - dictionary.size() == 0\n                - bias == 0\n                - bias_is_stale == false\n\n            CONVENTION\n                - max_dictionary_size() == my_max_dictionary_size\n                - get_kernel() == kernel\n\n                - K.nr() == dictionary.size()\n                - K.nc() == dictionary.size()\n                - for all valid r,c:\n                    - K(r,c) == kernel(dictionary[r], dictionary[c])\n                - K_inv == inv(K)\n\n                - if (dictionary.size() == my_max_dictionary_size && my_remove_oldest_first == false) then\n                    - for all valid 0 < i < dictionary.size():\n                        - Let STRENGTHS[i] == the delta you would get for dictionary[i] (i.e. Approximately \n                          Linearly Dependent value) if you removed dictionary[i] from this object and then \n                          tried to add it back in.\n                        - min_strength == the minimum value from STRENGTHS\n                        - min_vect_idx == the index of the element in STRENGTHS with the smallest value\n\n        !*/\n\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        kcentroid (\n        ) : \n            my_remove_oldest_first(false),\n            my_tolerance(0.001),\n            my_max_dictionary_size(1000000),\n            bias(0),\n            bias_is_stale(false)\n        {\n            clear_dictionary();\n        }\n\n        explicit kcentroid (\n            const kernel_type& kernel_, \n            scalar_type tolerance_ = 0.001,\n            unsigned long max_dictionary_size_ = 1000000,\n            bool remove_oldest_first_ = false \n        ) : \n            my_remove_oldest_first(remove_oldest_first_),\n            kernel(kernel_), \n            my_tolerance(tolerance_),\n            my_max_dictionary_size(max_dictionary_size_),\n            bias(0),\n            bias_is_stale(false)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(tolerance_ > 0 && max_dictionary_size_ > 1,\n                \"\\tkcentroid::kcentroid()\"\n                << \"\\n\\t You have to give a positive tolerance\"\n                << \"\\n\\t this:                 \" << this\n                << \"\\n\\t tolerance_:           \" << tolerance_ \n                << \"\\n\\t max_dictionary_size_: \" << max_dictionary_size_ \n                );\n\n            clear_dictionary();\n        }\n\n        scalar_type tolerance() const\n        {\n            return my_tolerance;\n        }\n\n        unsigned long max_dictionary_size() const\n        {\n            return my_max_dictionary_size;\n        }\n\n        bool remove_oldest_first (\n        ) const\n        {\n            return my_remove_oldest_first;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel;\n        }\n\n        void clear_dictionary ()\n        {\n            dictionary.clear();\n            alpha.clear();\n\n            min_strength = 0;\n            min_vect_idx = 0;\n            K_inv.set_size(0,0);\n            K.set_size(0,0);\n            samples_seen = 0;\n            bias = 0;\n            bias_is_stale = false;\n        }\n\n        scalar_type operator() (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::operator()(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            // make sure the bias terms are up to date\n            refresh_bias();\n            x.refresh_bias();\n\n            scalar_type temp = x.bias + bias - 2*inner_product(x);\n\n            if (temp > 0)\n                return std::sqrt(temp);\n            else\n                return 0;\n        }\n\n        scalar_type inner_product (\n            const sample_type& x\n        ) const\n        {\n            scalar_type temp = 0; \n            for (unsigned long i = 0; i < alpha.size(); ++i)\n                temp += alpha[i]*kernel(dictionary[i], x);\n            return temp;\n        }\n\n        scalar_type inner_product (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::inner_product(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            scalar_type temp = 0; \n            for (unsigned long i = 0; i < alpha.size(); ++i)\n            {\n                for (unsigned long j = 0; j < x.alpha.size(); ++j)\n                {\n                    temp += alpha[i]*x.alpha[j]*kernel(dictionary[i], x.dictionary[j]);\n                }\n            }\n            return temp;\n        }\n\n        scalar_type squared_norm (\n        ) const\n        {\n            refresh_bias();\n            return bias;\n        }\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const\n        {\n            // make sure the bias terms are up to date\n            refresh_bias();\n\n            const scalar_type kxx = kernel(x,x);\n\n            scalar_type temp = kxx + bias - 2*inner_product(x);\n            if (temp > 0)\n                return std::sqrt(temp);\n            else\n                return 0;\n        }\n\n        scalar_type samples_trained (\n        ) const\n        {\n            return samples_seen;\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n            return train_and_maybe_test(x,cscale,xscale,true);\n        }\n\n        void train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n            train_and_maybe_test(x,cscale,xscale,false);\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n            return train_and_maybe_test(x,cscale,xscale,true);\n        }\n\n        void scale_by (\n            scalar_type cscale\n        )\n        {\n            for (unsigned long i = 0; i < alpha.size(); ++i)\n            {\n                alpha[i] = cscale*alpha[i];\n            }\n        }\n\n        void train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n            train_and_maybe_test(x,cscale,xscale,false);\n        }\n\n        void swap (\n            kcentroid& item\n        )\n        {\n            exchange(min_strength, item.min_strength);\n            exchange(min_vect_idx, item.min_vect_idx);\n            exchange(my_remove_oldest_first, item.my_remove_oldest_first);\n\n            exchange(kernel, item.kernel);\n            dictionary.swap(item.dictionary);\n            alpha.swap(item.alpha);\n            K_inv.swap(item.K_inv);\n            K.swap(item.K);\n            exchange(my_tolerance, item.my_tolerance);\n            exchange(samples_seen, item.samples_seen);\n            exchange(bias, item.bias);\n            a.swap(item.a);\n            k.swap(item.k);\n            exchange(bias_is_stale, item.bias_is_stale);\n            exchange(my_max_dictionary_size, item.my_max_dictionary_size);\n        }\n\n        unsigned long dictionary_size (\n        ) const { return dictionary.size(); }\n\n        friend void serialize(const kcentroid& item, std::ostream& out)\n        {\n            serialize(item.min_strength, out);\n            serialize(item.min_vect_idx, out);\n            serialize(item.my_remove_oldest_first, out);\n\n            serialize(item.kernel, out);\n            serialize(item.dictionary, out);\n            serialize(item.alpha, out);\n            serialize(item.K_inv, out);\n            serialize(item.K, out);\n            serialize(item.my_tolerance, out);\n            serialize(item.samples_seen, out);\n            serialize(item.bias, out);\n            serialize(item.bias_is_stale, out);\n            serialize(item.my_max_dictionary_size, out);\n        }\n\n        friend void deserialize(kcentroid& item, std::istream& in)\n        {\n            deserialize(item.min_strength, in);\n            deserialize(item.min_vect_idx, in);\n            deserialize(item.my_remove_oldest_first, in);\n\n            deserialize(item.kernel, in);\n            deserialize(item.dictionary, in);\n            deserialize(item.alpha, in);\n            deserialize(item.K_inv, in);\n            deserialize(item.K, in);\n            deserialize(item.my_tolerance, in);\n            deserialize(item.samples_seen, in);\n            deserialize(item.bias, in);\n            deserialize(item.bias_is_stale, in);\n            deserialize(item.my_max_dictionary_size, in);\n        }\n\n        distance_function<kernel_type> get_distance_function (\n        ) const\n        {\n            refresh_bias();\n            return distance_function<kernel_type>(mat(alpha),\n                                                  bias, \n                                                  kernel, \n                                                  mat(dictionary));\n        }\n\n    private:\n\n        void refresh_bias (\n        ) const \n        {\n            if (bias_is_stale)\n            {\n                bias_is_stale = false;\n                // recompute the bias term\n                bias = sum(pointwise_multiply(K, mat(alpha)*trans(mat(alpha))));\n            }\n        }\n\n        scalar_type train_and_maybe_test (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale,\n            bool do_test\n        )\n        {\n            scalar_type test_result = 0;\n            const scalar_type kx = kernel(x,x);\n            if (alpha.size() == 0)\n            {\n                // just ignore this sample if it is the zero vector (or really close to being zero)\n                if (std::abs(kx) > std::numeric_limits<scalar_type>::epsilon())\n                {\n                    // set initial state since this is the first training example we have seen\n\n                    K_inv.set_size(1,1);\n                    K_inv(0,0) = 1/kx;\n                    K.set_size(1,1);\n                    K(0,0) = kx;\n\n                    alpha.push_back(xscale);\n                    dictionary.push_back(x);\n                }\n                else\n                {\n                    // the distance from an empty kcentroid and the zero vector is zero by definition.\n                    return 0;\n                }\n            }\n            else\n            {\n                // fill in k\n                k.set_size(alpha.size());\n                for (long r = 0; r < k.nr(); ++r)\n                    k(r) = kernel(x,dictionary[r]);\n\n                if (do_test)\n                {\n                    refresh_bias();\n                    test_result = std::sqrt(kx + bias - 2*trans(mat(alpha))*k);\n                }\n\n                // compute the error we would have if we approximated the new x sample\n                // with the dictionary.  That is, do the ALD test from the KRLS paper.\n                a = K_inv*k;\n                scalar_type delta = kx - trans(k)*a;\n\n                // if this new vector isn't approximately linearly dependent on the vectors\n                // in our dictionary.\n                if (delta > min_strength && delta > my_tolerance)\n                {\n                    bool need_to_update_min_strength = false;\n                    if (dictionary.size() >= my_max_dictionary_size)\n                    {\n                        // We need to remove one of the old members of the dictionary before\n                        // we proceed with adding a new one.  \n                        long idx_to_remove;\n                        if (my_remove_oldest_first)\n                        {\n                            // remove the oldest one\n                            idx_to_remove = 0;\n                        }\n                        else\n                        {\n                            // if we have never computed the min_strength then we should compute it \n                            if (min_strength == 0)\n                                recompute_min_strength();\n\n                            // select the dictionary vector that is most linearly dependent for removal\n                            idx_to_remove = min_vect_idx;\n                            need_to_update_min_strength = true;\n                        }\n\n                        remove_dictionary_vector(idx_to_remove);\n\n                        // recompute these guys since they were computed with the old\n                        // kernel matrix\n                        k = remove_row(k,idx_to_remove);\n                        a = K_inv*k;\n                        delta = kx - trans(k)*a;\n                    }\n\n                    // add x to the dictionary\n                    dictionary.push_back(x);\n\n\n                    // update K_inv by computing the new one in the temp matrix (equation 3.14)\n                    matrix<scalar_type,0,0,mem_manager_type> temp(K_inv.nr()+1, K_inv.nc()+1);\n                    // update the middle part of the matrix\n                    set_subm(temp, get_rect(K_inv)) = K_inv + a*trans(a)/delta;\n                    // update the right column of the matrix\n                    set_subm(temp, 0, K_inv.nr(),K_inv.nr(),1) = -a/delta;\n                    // update the bottom row of the matrix\n                    set_subm(temp, K_inv.nr(), 0, 1, K_inv.nr()) = trans(-a/delta);\n                    // update the bottom right corner of the matrix\n                    temp(K_inv.nr(), K_inv.nc()) = 1/delta;\n                    // put temp into K_inv\n                    temp.swap(K_inv);\n\n\n\n                    // update K (the kernel matrix)\n                    temp.set_size(K.nr()+1, K.nc()+1);\n                    set_subm(temp, get_rect(K)) = K;\n                    // update the right column of the matrix\n                    set_subm(temp, 0, K.nr(),K.nr(),1) = k;\n                    // update the bottom row of the matrix\n                    set_subm(temp, K.nr(), 0, 1, K.nr()) = trans(k);\n                    temp(K.nr(), K.nc()) = kx;\n                    // put temp into K\n                    temp.swap(K);\n\n\n                    // now update the alpha vector \n                    for (unsigned long i = 0; i < alpha.size(); ++i)\n                    {\n                        alpha[i] *= cscale;\n                    }\n                    alpha.push_back(xscale);\n\n\n                    if (need_to_update_min_strength)\n                    {\n                        // now we have to recompute the min_strength in this case\n                        recompute_min_strength();\n                    }\n                }\n                else\n                {\n                    // update the alpha vector so that this new sample has been added into\n                    // the mean vector we are accumulating\n                    for (unsigned long i = 0; i < alpha.size(); ++i)\n                    {\n                        alpha[i] = cscale*alpha[i] + xscale*a(i);\n                    }\n                }\n            }\n\n            bias_is_stale = true;\n            \n            return test_result;\n        }\n\n        void remove_dictionary_vector (\n            long i\n        )\n        /*!\n            requires\n                - 0 <= i < dictionary.size()\n            ensures\n                - #dictionary.size() == dictionary.size() - 1\n                - #alpha.size() == alpha.size() - 1\n                - updates the K_inv matrix so that it is still a proper inverse of the\n                  kernel matrix\n                - also removes the necessary row and column from the K matrix\n                - uses the this->a variable so after this function runs that variable\n                  will contain a different value.  \n        !*/\n        {\n            // remove the dictionary vector \n            dictionary.erase(dictionary.begin()+i);\n\n            // remove the i'th vector from the inverse kernel matrix.  This formula is basically\n            // just the reverse of the way K_inv is updated by equation 3.14 during normal training.\n            K_inv = removerc(K_inv,i,i) - remove_row(colm(K_inv,i)/K_inv(i,i),i)*remove_col(rowm(K_inv,i),i);\n\n            // now compute the updated alpha values to take account that we just removed one of \n            // our dictionary vectors\n            a = (K_inv*remove_row(K,i)*mat(alpha));\n\n            // now copy over the new alpha values\n            alpha.resize(alpha.size()-1);\n            for (unsigned long k = 0; k < alpha.size(); ++k)\n            {\n                alpha[k] = a(k);\n            }\n\n            // update the K matrix as well\n            K = removerc(K,i,i);\n        }\n\n        void recompute_min_strength (\n        )\n        /*!\n            ensures\n                - recomputes the min_strength and min_vect_idx values\n                  so that they are correct with respect to the CONVENTION\n                - uses the this->a variable so after this function runs that variable\n                  will contain a different value.  \n        !*/\n        {\n            min_strength = std::numeric_limits<scalar_type>::max();\n\n            // here we loop over each dictionary vector and compute what its delta would be if\n            // we were to remove it from the dictionary and then try to add it back in.\n            for (unsigned long i = 0; i < dictionary.size(); ++i)\n            {\n                // compute a = K_inv*k but where dictionary vector i has been removed\n                a = (removerc(K_inv,i,i) - remove_row(colm(K_inv,i)/K_inv(i,i),i)*remove_col(rowm(K_inv,i),i)) *\n                    (remove_row(colm(K,i),i));\n                scalar_type delta = K(i,i) - trans(remove_row(colm(K,i),i))*a;\n\n                if (delta < min_strength)\n                {\n                    min_strength = delta;\n                    min_vect_idx = i;\n                }\n            }\n        }\n\n\n\n        typedef std_allocator<sample_type, mem_manager_type> alloc_sample_type;\n        typedef std_allocator<scalar_type, mem_manager_type> alloc_scalar_type;\n        typedef std::vector<sample_type,alloc_sample_type> dictionary_vector_type;\n        typedef std::vector<scalar_type,alloc_scalar_type> alpha_vector_type;\n\n\n        scalar_type min_strength;\n        unsigned long min_vect_idx;\n        bool my_remove_oldest_first;\n\n        kernel_type kernel;\n        dictionary_vector_type dictionary;\n        alpha_vector_type alpha;\n\n        matrix<scalar_type,0,0,mem_manager_type> K_inv;\n        matrix<scalar_type,0,0,mem_manager_type> K;\n\n        scalar_type my_tolerance;\n        unsigned long my_max_dictionary_size;\n        scalar_type samples_seen;\n        mutable scalar_type bias;\n        mutable bool bias_is_stale;\n\n\n        // temp variables here just so we don't have to reconstruct them over and over.  Thus, \n        // they aren't really part of the state of this object.\n        matrix<scalar_type,0,1,mem_manager_type> a;\n        matrix<scalar_type,0,1,mem_manager_type> k;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    void swap(kcentroid<kernel_type>& a, kcentroid<kernel_type>& b)\n    { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KCENTROId_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/kcentroid_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_KCENTROId_ABSTRACT_\n#ifdef DLIB_KCENTROId_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename kernel_type\n        >\n    class kcentroid\n    {\n        /*!\n            REQUIREMENTS ON kernel_type\n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            INITIAL VALUE\n                - dictionary_size() == 0\n                - samples_trained() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a weighted sum of sample points in a kernel induced\n                feature space.  It can be used to kernelize any algorithm that requires only\n                the ability to perform vector addition, subtraction, scalar multiplication,\n                and inner products.  \n\n                An example use of this object is as an online algorithm for recursively estimating \n                the centroid of a sequence of training points.  This object then allows you to \n                compute the distance between the centroid and any test points.  So you can use \n                this object to predict how similar a test point is to the data this object has \n                been trained on (larger distances from the centroid indicate dissimilarity/anomalous \n                points).  \n\n                Also note that the algorithm internally keeps a set of \"dictionary vectors\" \n                that are used to represent the centroid.  You can force the algorithm to use \n                no more than a set number of vectors by setting the 3rd constructor argument \n                to whatever you want.  \n\n                This object uses the sparsification technique described in the paper The \n                Kernel Recursive Least Squares Algorithm by Yaakov Engel.  This technique\n                allows us to keep the number of dictionary vectors down to a minimum.  In fact,\n                the object has a user selectable tolerance parameter that controls the trade off\n                between accuracy and number of stored dictionary vectors.\n        !*/\n\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        kcentroid (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n                - #tolerance() == 0.001 \n                - #get_kernel() == kernel_type() (i.e. whatever the kernel's default value is) \n                - #max_dictionary_size() == 1000000\n                - #remove_oldest_first() == false \n        !*/\n\n        explicit kcentroid (\n            const kernel_type& kernel_, \n            scalar_type tolerance_ = 0.001,\n            unsigned long max_dictionary_size_ = 1000000,\n            bool remove_oldest_first_ = false \n        );\n        /*!\n            requires\n                - tolerance > 0\n                - max_dictionary_size_ > 1\n            ensures\n                - this object is properly initialized\n                - #tolerance() == tolerance_\n                - #get_kernel() == kernel_\n                - #max_dictionary_size() == max_dictionary_size_\n                - #remove_oldest_first() == remove_oldest_first_\n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the kernel used by this object\n        !*/\n\n        unsigned long max_dictionary_size(\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of dictionary vectors this object will \n                  use at a time.  That is, dictionary_size() will never be greater \n                  than max_dictionary_size().\n        !*/\n\n        bool remove_oldest_first (\n        ) const;\n        /*!\n            ensures\n                - When the maximum dictionary size is reached this object sometimes\n                  needs to discard dictionary vectors when new samples are added via\n                  one of the train functions.  When this happens this object chooses \n                  the dictionary vector to discard based on the setting of the\n                  remove_oldest_first() parameter.\n                - if (remove_oldest_first() == true) then\n                    - This object discards the oldest dictionary vectors when necessary.  \n                      This is an appropriate mode when using this object in an online\n                      setting and the input training samples come from a slowly \n                      varying distribution.\n                - else (remove_oldest_first() == false) then\n                    - This object discards the most linearly dependent dictionary vectors \n                      when necessary.  This it the default behavior and should be used \n                      in most cases.\n        !*/\n\n        unsigned long dictionary_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of basis vectors in the dictionary.  These are\n                  the basis vectors used by this object to represent a point in kernel\n                  feature space.\n        !*/\n\n        scalar_type samples_trained (\n        ) const;\n        /*!\n            ensures\n                - returns the number of samples this object has been trained on so far\n        !*/\n\n        scalar_type tolerance(\n        ) const;\n        /*!\n            ensures\n                - returns the tolerance to use for the approximately linearly dependent \n                  test used for sparsification (see the KRLS paper for details).  This is \n                  a number which governs how accurately this object will approximate the \n                  centroid it is learning.  Smaller values generally result in a more \n                  accurate estimate while also resulting in a bigger set of vectors in \n                  the dictionary.  Bigger tolerances values result in a less accurate \n                  estimate but also in less dictionary vectors.  (Note that in any case, \n                  the max_dictionary_size() limits the number of dictionary vectors no \n                  matter the setting of the tolerance)\n                - The exact meaning of the tolerance parameter is the following: \n                  Imagine that we have an empirical_kernel_map that contains all\n                  the current dictionary vectors.  Then the tolerance is the minimum\n                  projection error (as given by empirical_kernel_map::project()) required\n                  to cause us to include a new vector in the dictionary.  So each time\n                  you call train() the kcentroid basically just computes the projection\n                  error for that new sample and if it is larger than the tolerance\n                  then that new sample becomes part of the dictionary.\n        !*/\n\n        void clear_dictionary (\n        );\n        /*!\n            ensures\n                - clears out all learned data (e.g. #dictionary_size() == 0)\n                - #samples_seen() == 0\n        !*/\n\n        scalar_type operator() (\n            const kcentroid& x\n        ) const;\n        /*!\n            requires\n                - x.get_kernel() == get_kernel()\n            ensures\n                - returns the distance in kernel feature space between this centroid and the\n                  centroid represented by x.  \n        !*/\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const;\n        /*!\n            ensures\n                - returns the distance in kernel feature space between the sample x and the\n                  current estimate of the centroid of the training samples given\n                  to this object so far.\n        !*/\n\n        scalar_type inner_product (\n            const sample_type& x\n        ) const;\n        /*!\n            ensures\n                - returns the inner product of the given x point and the current\n                  estimate of the centroid of the training samples given to this object\n                  so far.\n        !*/\n\n        scalar_type inner_product (\n            const kcentroid& x\n        ) const;\n        /*!\n            requires\n                - x.get_kernel() == get_kernel()\n            ensures\n                - returns the inner product between x and this centroid object.\n        !*/\n\n        scalar_type squared_norm (\n        ) const;\n        /*!\n            ensures\n                - returns the squared norm of the centroid vector represented by this\n                  object.  I.e. returns this->inner_product(*this)\n        !*/\n\n        void train (\n            const sample_type& x\n        );\n        /*!\n            ensures\n                - adds the sample x into the current estimate of the centroid\n                - also note that calling this function is equivalent to calling\n                  train(x, samples_trained()/(samples_trained()+1.0, 1.0/(samples_trained()+1.0).  \n                  That is, this function finds the normal unweighted centroid of all training points.\n        !*/\n\n        void train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        );\n        /*!\n            ensures\n                - adds the sample x into the current estimate of the centroid but\n                  uses a user given scale.  That is, this function performs:\n                    - new_centroid = cscale*old_centroid + xscale*x\n                - This function allows you to weight different samples however \n                  you want.\n        !*/\n\n        void scale_by (\n            scalar_type cscale\n        );\n        /*!\n            ensures\n                - multiplies the current centroid vector by the given scale value.  \n                  This function is equivalent to calling train(some_x_value, cscale, 0).\n                  So it performs:   \n                    - new_centroid == cscale*old_centroid\n        !*/\n\n        scalar_type test_and_train (\n            const sample_type& x\n        );\n        /*!\n            ensures\n                - calls train(x)\n                - returns (*this)(x)\n                - The reason this function exists is because train() and operator() \n                  both compute some of the same things.  So this function is more efficient\n                  than calling both individually.\n        !*/\n\n        scalar_type test_and_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        );\n        /*!\n            ensures\n                - calls train(x,cscale,xscale)\n                - returns (*this)(x)\n                - The reason this function exists is because train() and operator() \n                  both compute some of the same things.  So this function is more efficient\n                  than calling both individually.\n        !*/\n\n        void swap (\n            kcentroid& item\n        );\n        /*!\n            ensures\n                - swaps *this with item\n        !*/\n\n        distance_function<kernel_type> get_distance_function (\n        ) const;\n        /*!\n            ensures\n                - returns a distance function F that represents the point learned\n                  by this object so far.  I.e. it is the case that:\n                    - for all x: F(x) == (*this)(x)\n        !*/\n\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type\n        >\n    void swap(\n        kcentroid<kernel_type>& a, \n        kcentroid<kernel_type>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename kernel_type\n        >\n    void serialize (\n        const kcentroid<kernel_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for kcentroid objects\n    !*/\n\n    template <\n        typename kernel_type \n        >\n    void deserialize (\n        kcentroid<kernel_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for kcentroid objects\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KCENTROId_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/kcentroid_overloads.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_KCENTROId_OVERLOADS_\n#define DLIB_KCENTROId_OVERLOADS_\n\n#include \"kcentroid_abstract.h\"\n#include \"sparse_kernel.h\"\n#include \"sparse_vector.h\"\n#include <map>\n\nnamespace dlib\n{\n    /*\n        This file contains optimized overloads of the kcentroid object for the following\n        linear cases:\n            kcentroid<linear_kernel<T>>\n            kcentroid<sparse_linear_kernel<T>>\n            kcentroid<offset_kernel<linear_kernel<T>>>\n            kcentroid<offset_kernel<sparse_linear_kernel<T>>>\n    */\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                     Overloads for when kernel_type == linear_kernel\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class kcentroid<linear_kernel<T> >\n    {\n        \n        \n        typedef linear_kernel<T> kernel_type;\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n\n        explicit kcentroid (\n            const kernel_type& kernel_, \n            scalar_type tolerance_ = 0.001,\n            unsigned long max_dictionary_size_ = 1000000,\n            bool remove_oldest_first_ = false \n        ) : \n            my_remove_oldest_first(remove_oldest_first_),\n            kernel(kernel_), \n            my_tolerance(tolerance_),\n            my_max_dictionary_size(max_dictionary_size_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(tolerance_ >= 0 && max_dictionary_size_ > 0,\n                \"\\tkcentroid::kcentroid()\"\n                << \"\\n\\t You have to give a positive tolerance\"\n                << \"\\n\\t this:                 \" << this\n                << \"\\n\\t tolerance_:           \" << tolerance_ \n                << \"\\n\\t max_dictionary_size_: \" << max_dictionary_size_ \n                );\n\n            clear_dictionary();\n        }\n\n        scalar_type     tolerance() const               { return my_tolerance; }\n        unsigned long   max_dictionary_size() const     { return my_max_dictionary_size; }\n        bool            remove_oldest_first () const    { return my_remove_oldest_first; }\n        const kernel_type& get_kernel () const          { return kernel; }\n        scalar_type     samples_trained () const        { return samples_seen; }\n\n        void clear_dictionary ()\n        {\n            samples_seen = 0;\n            set_all_elements(w, 0);\n            alpha = 0;\n        }\n\n        scalar_type operator() (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::operator()(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            if (w.size() > 0)\n            {\n                if (x.w.size() > 0)\n                    return length(alpha*w - x.alpha*x.w);\n                else\n                    return alpha*length(w);\n            }\n            else\n            {\n                if (x.w.size() > 0)\n                    return x.alpha*length(x.w);\n                else\n                    return 0;\n            }\n        }\n\n        scalar_type inner_product (\n            const sample_type& x\n        ) const\n        {\n            if (w.size() > 0)\n                return alpha*trans(w)*x;\n            else \n                return 0;\n        }\n\n        scalar_type inner_product (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::inner_product(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            if (w.size() > 0 && x.w.size() > 0)\n                return alpha*x.alpha*trans(w)*x.w;\n            else\n                return 0;\n        }\n\n        scalar_type squared_norm (\n        ) const\n        {\n            if (w.size() > 0)\n                return alpha*alpha*trans(w)*w;\n            else\n                return 0;\n        }\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const\n        {\n            if (w.size() > 0)\n                return length(x-alpha*w);\n            else\n                return length(x);\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n\n            do_train(x, cscale, xscale);\n\n            return (*this)(x);\n        }\n\n        void train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n\n            do_train(x, cscale, xscale);\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n\n            do_train(x, cscale, xscale);\n\n            return (*this)(x);\n        }\n\n        void scale_by (\n            scalar_type cscale\n        )\n        {\n            alpha *= cscale;\n        }\n\n        void train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n            do_train(x, cscale, xscale);\n        }\n\n        void swap (\n            kcentroid& item\n        )\n        {\n            exchange(my_remove_oldest_first, item.my_remove_oldest_first);\n            exchange(kernel, item.kernel);\n            exchange(w, item.w);\n            exchange(alpha, item.alpha);\n            exchange(my_tolerance, item.my_tolerance);\n            exchange(my_max_dictionary_size, item.my_max_dictionary_size);\n            exchange(samples_seen, item.samples_seen);\n        }\n\n        unsigned long dictionary_size (\n        ) const \n        { \n            if (samples_seen > 0)\n                return 1;\n            else\n                return 0;\n        }\n\n        friend void serialize(const kcentroid& item, std::ostream& out)\n        {\n            serialize(item.my_remove_oldest_first, out);\n            serialize(item.kernel, out);\n            serialize(item.w, out);\n            serialize(item.alpha, out);\n            serialize(item.my_tolerance, out);\n            serialize(item.my_max_dictionary_size, out);\n            serialize(item.samples_seen, out);\n        }\n\n        friend void deserialize(kcentroid& item, std::istream& in)\n        {\n            deserialize(item.my_remove_oldest_first, in);\n            deserialize(item.kernel, in);\n            deserialize(item.w, in);\n            deserialize(item.alpha, in);\n            deserialize(item.my_tolerance, in);\n            deserialize(item.my_max_dictionary_size, in);\n            deserialize(item.samples_seen, in);\n        }\n\n        distance_function<kernel_type> get_distance_function (\n        ) const\n        {\n            if (samples_seen > 0)\n            {\n                typename distance_function<kernel_type>::sample_vector_type temp_basis_vectors; \n                typename distance_function<kernel_type>::scalar_vector_type temp_alpha; \n\n                temp_basis_vectors.set_size(1);\n                temp_basis_vectors(0) = w;\n                temp_alpha.set_size(1);\n                temp_alpha(0) = alpha;\n\n                return distance_function<kernel_type>(temp_alpha, squared_norm(), kernel, temp_basis_vectors);\n            }\n            else\n            {\n                return distance_function<kernel_type>(kernel);\n            }\n        }\n\n    private:\n\n        void do_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            set_size_of_w(x);\n\n            const scalar_type temp = cscale*alpha;\n\n            if (temp != 0)\n            {\n                w = w + xscale*x/temp;\n                alpha = temp;\n            }\n            else\n            {\n                w = cscale*alpha*w + xscale*x;\n                alpha = 1;\n            }\n        }\n\n        void set_size_of_w (\n            const sample_type& x\n        )\n        {\n            if (x.size() != w.size())\n            {\n                w.set_size(x.nr(), x.nc());\n                set_all_elements(w, 0);\n                alpha = 0;\n            }\n        }\n\n        bool my_remove_oldest_first;\n\n        kernel_type kernel;\n\n        sample_type w;\n        scalar_type alpha;\n\n\n        scalar_type my_tolerance;\n        unsigned long my_max_dictionary_size;\n        scalar_type samples_seen;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//               Overloads for when kernel_type == offset_kernel<linear_kernel>\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class kcentroid<offset_kernel<linear_kernel<T> > >\n    {\n        \n        /*!\n            INITIAL VALUE\n                - x_extra == sqrt(kernel.offset)\n\n            CONVENTION\n                - x_extra == sqrt(kernel.offset)\n                - w_extra == the value of the extra dimension tacked onto the\n                  end of the w vector\n        !*/\n        \n        typedef offset_kernel<linear_kernel<T> > kernel_type;\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n\n        explicit kcentroid (\n            const kernel_type& kernel_, \n            scalar_type tolerance_ = 0.001,\n            unsigned long max_dictionary_size_ = 1000000,\n            bool remove_oldest_first_ = false \n        ) : \n            my_remove_oldest_first(remove_oldest_first_),\n            kernel(kernel_), \n            my_tolerance(tolerance_),\n            my_max_dictionary_size(max_dictionary_size_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(tolerance_ >= 0 && max_dictionary_size_ > 0,\n                \"\\tkcentroid::kcentroid()\"\n                << \"\\n\\t You have to give a positive tolerance\"\n                << \"\\n\\t this:                 \" << this\n                << \"\\n\\t tolerance_:           \" << tolerance_ \n                << \"\\n\\t max_dictionary_size_: \" << max_dictionary_size_ \n                );\n\n            x_extra = std::sqrt(kernel.offset);\n\n            clear_dictionary();\n        }\n\n        scalar_type     tolerance() const               { return my_tolerance; }\n        unsigned long   max_dictionary_size() const     { return my_max_dictionary_size; }\n        bool            remove_oldest_first () const    { return my_remove_oldest_first; }\n        const kernel_type& get_kernel () const          { return kernel; }\n        scalar_type     samples_trained () const        { return samples_seen; }\n\n        void clear_dictionary ()\n        {\n            samples_seen = 0;\n            set_all_elements(w, 0);\n            alpha = 0;\n            w_extra = x_extra;\n        }\n\n        scalar_type operator() (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::operator()(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            if (w.size() > 0)\n            {\n                if (x.w.size() > 0)\n                {\n                    scalar_type temp1 = length_squared(alpha*w - x.alpha*x.w);\n                    scalar_type temp2 = alpha*w_extra - x.alpha*x.w_extra;\n                    return std::sqrt(temp1 + temp2*temp2);\n                }\n                else\n                {\n                    return alpha*std::sqrt(length_squared(w) + w_extra*w_extra);\n                }\n            }\n            else\n            {\n                if (x.w.size() > 0)\n                    return x.alpha*std::sqrt(length_squared(x.w) + x.w_extra*x.w_extra);\n                else\n                    return 0;\n            }\n        }\n\n        scalar_type inner_product (\n            const sample_type& x\n        ) const\n        {\n            if (w.size() > 0)\n                return alpha*(trans(w)*x + w_extra*x_extra);\n            else \n                return 0;\n        }\n\n        scalar_type inner_product (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::inner_product(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            if (w.size() > 0 && x.w.size() > 0)\n                return alpha*x.alpha*(trans(w)*x.w + w_extra*x.w_extra);\n            else\n                return 0;\n        }\n\n        scalar_type squared_norm (\n        ) const\n        {\n            if (w.size() > 0)\n                return alpha*alpha*(trans(w)*w + w_extra*w_extra);\n            else\n                return 0;\n        }\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const\n        {\n            if (w.size() > 0)\n            {\n                scalar_type temp1 = length_squared(x-alpha*w);\n                scalar_type temp2 = x_extra - alpha*w_extra;\n                return std::sqrt(temp1 + temp2*temp2);\n            }\n            else\n            {\n                return std::sqrt(length_squared(x) + x_extra*x_extra);\n            }\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n\n            do_train(x, cscale, xscale);\n\n            return (*this)(x);\n        }\n\n        void train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n\n            do_train(x, cscale, xscale);\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n\n            do_train(x, cscale, xscale);\n\n            return (*this)(x);\n        }\n\n        void scale_by (\n            scalar_type cscale\n        )\n        {\n            alpha *= cscale;\n            w_extra *= cscale;\n        }\n\n        void train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n            do_train(x, cscale, xscale);\n        }\n\n        void swap (\n            kcentroid& item\n        )\n        {\n            exchange(my_remove_oldest_first, item.my_remove_oldest_first);\n            exchange(kernel, item.kernel);\n            exchange(w, item.w);\n            exchange(alpha, item.alpha);\n            exchange(w_extra, item.w_extra);\n            exchange(x_extra, item.x_extra);\n            exchange(my_tolerance, item.my_tolerance);\n            exchange(my_max_dictionary_size, item.my_max_dictionary_size);\n            exchange(samples_seen, item.samples_seen);\n        }\n\n        unsigned long dictionary_size (\n        ) const \n        { \n            if (samples_seen > 0)\n            {\n                if (std::abs(w_extra) > std::numeric_limits<scalar_type>::epsilon())\n                    return 1;\n                else\n                    return 2;\n            }\n            else\n                return 0;\n        }\n\n        friend void serialize(const kcentroid& item, std::ostream& out)\n        {\n            serialize(item.my_remove_oldest_first, out);\n            serialize(item.kernel, out);\n            serialize(item.w, out);\n            serialize(item.alpha, out);\n            serialize(item.w_extra, out);\n            serialize(item.x_extra, out);\n            serialize(item.my_tolerance, out);\n            serialize(item.my_max_dictionary_size, out);\n            serialize(item.samples_seen, out);\n        }\n\n        friend void deserialize(kcentroid& item, std::istream& in)\n        {\n            deserialize(item.my_remove_oldest_first, in);\n            deserialize(item.kernel, in);\n            deserialize(item.w, in);\n            deserialize(item.alpha, in);\n            deserialize(item.w_extra, in);\n            deserialize(item.x_extra, in);\n            deserialize(item.my_tolerance, in);\n            deserialize(item.my_max_dictionary_size, in);\n            deserialize(item.samples_seen, in);\n        }\n\n        distance_function<kernel_type> get_distance_function (\n        ) const\n        {\n\n            if (samples_seen > 0)\n            {\n                typename distance_function<kernel_type>::sample_vector_type temp_basis_vectors; \n                typename distance_function<kernel_type>::scalar_vector_type temp_alpha; \n\n                // What we are doing here needs a bit of explanation.  The w vector\n                // has an implicit extra dimension tacked on to it with the value of w_extra.\n                // The kernel we are using takes normal vectors and implicitly tacks the value\n                // x_extra onto their end.  So what we are doing here is scaling w so that\n                // the value it should have tacked onto it is x_scale.  Note that we also\n                // adjust alpha so that the combination of alpha*w stays the same.\n                scalar_type scale;\n\n                // if w_extra is basically greater than 0\n                if (std::abs(w_extra) > std::numeric_limits<scalar_type>::epsilon())\n                {\n                    scale = (x_extra/w_extra);\n                    temp_basis_vectors.set_size(1);\n                    temp_alpha.set_size(1);\n                    temp_basis_vectors(0) = w*scale;\n                    temp_alpha(0) = alpha/scale;\n                }\n                else\n                {\n                    // In this case w_extra is zero. So the only way we can get the same\n                    // thing in the output basis vector set is by using two vectors\n                    temp_basis_vectors.set_size(2);\n                    temp_alpha.set_size(2);\n                    temp_basis_vectors(0) = 2*w;\n                    temp_alpha(0) = alpha;\n                    temp_basis_vectors(1) = w;\n                    temp_alpha(1) = -alpha;\n                }\n\n\n                return distance_function<kernel_type>(temp_alpha, squared_norm(), kernel, temp_basis_vectors);\n            }\n            else\n            {\n                return distance_function<kernel_type>(kernel);\n            }\n        }\n\n    private:\n\n        void do_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            set_size_of_w(x);\n\n            const scalar_type temp = cscale*alpha;\n\n            if (temp != 0)\n            {\n                w = w + xscale*x/temp;\n                w_extra = w_extra + xscale*x_extra/temp;\n                alpha = temp;\n            }\n            else\n            {\n                w = cscale*alpha*w + xscale*x;\n                w_extra = cscale*alpha*w_extra + xscale*x_extra;\n                alpha = 1;\n            }\n        }\n\n        void set_size_of_w (\n            const sample_type& x\n        )\n        {\n            if (x.size() != w.size())\n            {\n                w.set_size(x.nr(), x.nc());\n                set_all_elements(w, 0);\n                alpha = 0;\n                w_extra = x_extra;\n            }\n        }\n\n        bool my_remove_oldest_first;\n\n        kernel_type kernel;\n\n        sample_type w;\n        scalar_type alpha;\n\n        scalar_type w_extra;\n        scalar_type x_extra;\n\n\n        scalar_type my_tolerance;\n        unsigned long my_max_dictionary_size;\n        scalar_type samples_seen;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                     Overloads for when kernel_type == sparse_linear_kernel\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class kcentroid<sparse_linear_kernel<T> >\n    {\n        \n        \n        typedef sparse_linear_kernel<T> kernel_type;\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n\n        explicit kcentroid (\n            const kernel_type& kernel_, \n            scalar_type tolerance_ = 0.001,\n            unsigned long max_dictionary_size_ = 1000000,\n            bool remove_oldest_first_ = false \n        ) : \n            my_remove_oldest_first(remove_oldest_first_),\n            kernel(kernel_), \n            my_tolerance(tolerance_),\n            my_max_dictionary_size(max_dictionary_size_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(tolerance_ >= 0 && max_dictionary_size_ > 0,\n                \"\\tkcentroid::kcentroid()\"\n                << \"\\n\\t You have to give a positive tolerance\"\n                << \"\\n\\t this:                 \" << this\n                << \"\\n\\t tolerance_:           \" << tolerance_ \n                << \"\\n\\t max_dictionary_size_: \" << max_dictionary_size_ \n                );\n\n            clear_dictionary();\n        }\n\n        scalar_type     tolerance() const               { return my_tolerance; }\n        unsigned long   max_dictionary_size() const     { return my_max_dictionary_size; }\n        bool            remove_oldest_first () const    { return my_remove_oldest_first; }\n        const kernel_type& get_kernel () const          { return kernel; }\n        scalar_type     samples_trained () const        { return samples_seen; }\n\n        void clear_dictionary ()\n        {\n            samples_seen = 0;\n            w.clear();\n            alpha = 0;\n        }\n\n        scalar_type operator() (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::operator()(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return distance(alpha,w , x.alpha,x.w);\n        }\n\n        scalar_type inner_product (\n            const sample_type& x\n        ) const\n        {\n            return alpha*dot(w,x);\n        }\n\n        scalar_type inner_product (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::inner_product(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            return alpha*x.alpha*dot(w,x.w);\n        }\n\n        scalar_type squared_norm (\n        ) const\n        {\n            return alpha*alpha*length_squared(w);\n        }\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const\n        {\n            return distance(static_cast<scalar_type>(1), x, alpha, w);\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n\n            do_train(x, cscale, xscale);\n\n            return (*this)(x);\n        }\n\n        void train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n\n            do_train(x, cscale, xscale);\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n\n            do_train(x, cscale, xscale);\n\n            return (*this)(x);\n        }\n\n        void scale_by (\n            scalar_type cscale\n        )\n        {\n            alpha *= cscale;\n        }\n\n        void train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n            do_train(x, cscale, xscale);\n        }\n\n        void swap (\n            kcentroid& item\n        )\n        {\n            exchange(my_remove_oldest_first, item.my_remove_oldest_first);\n            exchange(kernel, item.kernel);\n            exchange(w, item.w);\n            exchange(alpha, item.alpha);\n            exchange(my_tolerance, item.my_tolerance);\n            exchange(my_max_dictionary_size, item.my_max_dictionary_size);\n            exchange(samples_seen, item.samples_seen);\n        }\n\n        unsigned long dictionary_size (\n        ) const \n        { \n            if (samples_seen > 0)\n                return 1;\n            else\n                return 0;\n        }\n\n        friend void serialize(const kcentroid& item, std::ostream& out)\n        {\n            serialize(item.my_remove_oldest_first, out);\n            serialize(item.kernel, out);\n            serialize(item.w, out);\n            serialize(item.alpha, out);\n            serialize(item.my_tolerance, out);\n            serialize(item.my_max_dictionary_size, out);\n            serialize(item.samples_seen, out);\n        }\n\n        friend void deserialize(kcentroid& item, std::istream& in)\n        {\n            deserialize(item.my_remove_oldest_first, in);\n            deserialize(item.kernel, in);\n            deserialize(item.w, in);\n            deserialize(item.alpha, in);\n            deserialize(item.my_tolerance, in);\n            deserialize(item.my_max_dictionary_size, in);\n            deserialize(item.samples_seen, in);\n        }\n\n        distance_function<kernel_type> get_distance_function (\n        ) const\n        {\n            if (samples_seen > 0)\n            {\n                typename distance_function<kernel_type>::sample_vector_type temp_basis_vectors; \n                typename distance_function<kernel_type>::scalar_vector_type temp_alpha; \n\n                temp_basis_vectors.set_size(1);\n                temp_basis_vectors(0) = sample_type(w.begin(), w.end());\n                temp_alpha.set_size(1);\n                temp_alpha(0) = alpha;\n\n                return distance_function<kernel_type>(temp_alpha, squared_norm(), kernel, temp_basis_vectors);\n            }\n            else\n            {\n                return distance_function<kernel_type>(kernel);\n            }\n        }\n\n    private:\n\n        void do_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            const scalar_type temp = cscale*alpha;\n\n            if (temp != 0)\n            {\n                // compute w += xscale*x/temp\n                typename sample_type::const_iterator i;\n                for (i = x.begin(); i != x.end(); ++i)\n                {\n                    w[i->first] += xscale*(i->second)/temp;\n                }\n\n                alpha = temp;\n            }\n            else\n            {\n                // first compute w = cscale*alpha*w\n                for (typename std::map<unsigned long,scalar_type>::iterator i = w.begin(); i != w.end(); ++i)\n                {\n                    i->second *= cscale*alpha;\n                }\n\n                // now compute w += xscale*x\n                for (typename sample_type::const_iterator i = x.begin(); i != x.end(); ++i)\n                {\n                    w[i->first] += xscale*(i->second);\n                }\n\n                alpha = 1;\n            }\n        }\n\n        bool my_remove_oldest_first;\n\n        kernel_type kernel;\n\n        std::map<unsigned long,scalar_type> w;\n        scalar_type alpha;\n\n\n        scalar_type my_tolerance;\n        unsigned long my_max_dictionary_size;\n        scalar_type samples_seen;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//               Overloads for when kernel_type == offset_kernel<sparse_linear_kernel>\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    class kcentroid<offset_kernel<sparse_linear_kernel<T> > >\n    {\n        \n        /*!\n            INITIAL VALUE\n                - x_extra == sqrt(kernel.offset)\n\n            CONVENTION\n                - x_extra == sqrt(kernel.offset)\n                - w_extra == the value of the extra dimension tacked onto the\n                  end of the w vector\n        !*/\n        \n        typedef offset_kernel<sparse_linear_kernel<T> > kernel_type;\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n\n        explicit kcentroid (\n            const kernel_type& kernel_, \n            scalar_type tolerance_ = 0.001,\n            unsigned long max_dictionary_size_ = 1000000,\n            bool remove_oldest_first_ = false \n        ) : \n            my_remove_oldest_first(remove_oldest_first_),\n            kernel(kernel_), \n            my_tolerance(tolerance_),\n            my_max_dictionary_size(max_dictionary_size_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(tolerance_ >= 0 && max_dictionary_size_ > 0,\n                \"\\tkcentroid::kcentroid()\"\n                << \"\\n\\t You have to give a positive tolerance\"\n                << \"\\n\\t this:                 \" << this\n                << \"\\n\\t tolerance_:           \" << tolerance_ \n                << \"\\n\\t max_dictionary_size_: \" << max_dictionary_size_ \n                );\n\n            x_extra = std::sqrt(kernel.offset);\n\n            clear_dictionary();\n        }\n\n        scalar_type     tolerance() const               { return my_tolerance; }\n        unsigned long   max_dictionary_size() const     { return my_max_dictionary_size; }\n        bool            remove_oldest_first () const    { return my_remove_oldest_first; }\n        const kernel_type& get_kernel () const          { return kernel; }\n        scalar_type     samples_trained () const        { return samples_seen; }\n\n        void clear_dictionary ()\n        {\n            samples_seen = 0;\n            w.clear();\n            alpha = 0;\n            w_extra = x_extra;\n        }\n\n        scalar_type operator() (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::operator()(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            if (samples_seen > 0)\n            {\n                scalar_type temp1 = distance_squared(alpha,w , x.alpha,x.w);\n                scalar_type temp2 = alpha*w_extra - x.alpha*x.w_extra;\n                return std::sqrt(temp1 + temp2*temp2);\n            }\n            else\n            {\n                return 0;\n            }\n        }\n\n        scalar_type inner_product (\n            const sample_type& x\n        ) const\n        {\n            if (samples_seen > 0)\n                return alpha*(dot(w,x) + w_extra*x_extra);\n            else \n                return 0;\n        }\n\n        scalar_type inner_product (\n            const kcentroid& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(x.get_kernel() == get_kernel(),\n                \"\\tscalar_type kcentroid::inner_product(const kcentroid& x)\"\n                << \"\\n\\tYou can only compare two kcentroid objects if they use the same kernel\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            if (samples_seen > 0 && x.samples_seen > 0)\n                return alpha*x.alpha*(dot(w,x.w) + w_extra*x.w_extra);\n            else\n                return 0;\n        }\n\n        scalar_type squared_norm (\n        ) const\n        {\n            if (samples_seen > 0)\n                return alpha*alpha*(length_squared(w) + w_extra*w_extra);\n            else\n                return 0;\n        }\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const\n        {\n            if (samples_seen > 0)\n            {\n                scalar_type temp1 = distance_squared(1,x,alpha,w);\n                scalar_type temp2 = x_extra - alpha*w_extra;\n                return std::sqrt(temp1 + temp2*temp2);\n            }\n            else\n            {\n                return std::sqrt(length_squared(x) + x_extra*x_extra);\n            }\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n\n            do_train(x, cscale, xscale);\n\n            return (*this)(x);\n        }\n\n        void train (\n            const sample_type& x\n        )\n        {\n            ++samples_seen;\n            const scalar_type xscale = 1/samples_seen;\n            const scalar_type cscale = 1-xscale;\n\n            do_train(x, cscale, xscale);\n        }\n\n        scalar_type test_and_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n\n            do_train(x, cscale, xscale);\n\n            return (*this)(x);\n        }\n\n        void scale_by (\n            scalar_type cscale\n        )\n        {\n            alpha *= cscale;\n            w_extra *= cscale;\n        }\n\n        void train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n            ++samples_seen;\n            do_train(x, cscale, xscale);\n        }\n\n        void swap (\n            kcentroid& item\n        )\n        {\n            exchange(my_remove_oldest_first, item.my_remove_oldest_first);\n            exchange(kernel, item.kernel);\n            exchange(w, item.w);\n            exchange(alpha, item.alpha);\n            exchange(w_extra, item.w_extra);\n            exchange(x_extra, item.x_extra);\n            exchange(my_tolerance, item.my_tolerance);\n            exchange(my_max_dictionary_size, item.my_max_dictionary_size);\n            exchange(samples_seen, item.samples_seen);\n        }\n\n        unsigned long dictionary_size (\n        ) const \n        { \n            if (samples_seen > 0)\n            {\n                if (std::abs(w_extra) > std::numeric_limits<scalar_type>::epsilon())\n                    return 1;\n                else\n                    return 2;\n            }\n            else\n            {\n                return 0;\n            }\n        }\n\n        friend void serialize(const kcentroid& item, std::ostream& out)\n        {\n            serialize(item.my_remove_oldest_first, out);\n            serialize(item.kernel, out);\n            serialize(item.w, out);\n            serialize(item.alpha, out);\n            serialize(item.w_extra, out);\n            serialize(item.x_extra, out);\n            serialize(item.my_tolerance, out);\n            serialize(item.my_max_dictionary_size, out);\n            serialize(item.samples_seen, out);\n        }\n\n        friend void deserialize(kcentroid& item, std::istream& in)\n        {\n            deserialize(item.my_remove_oldest_first, in);\n            deserialize(item.kernel, in);\n            deserialize(item.w, in);\n            deserialize(item.alpha, in);\n            deserialize(item.w_extra, in);\n            deserialize(item.x_extra, in);\n            deserialize(item.my_tolerance, in);\n            deserialize(item.my_max_dictionary_size, in);\n            deserialize(item.samples_seen, in);\n        }\n\n        distance_function<kernel_type> get_distance_function (\n        ) const\n        {\n            if (samples_seen > 0)\n            {\n                typename distance_function<kernel_type>::sample_vector_type temp_basis_vectors; \n                typename distance_function<kernel_type>::scalar_vector_type temp_alpha; \n\n                // What we are doing here needs a bit of explanation.  The w vector\n                // has an implicit extra dimension tacked on to it with the value of w_extra.\n                // The kernel we are using takes normal vectors and implicitly tacks the value\n                // x_extra onto their end.  So what we are doing here is scaling w so that\n                // the value it should have tacked onto it is x_scale.  Note that we also\n                // adjust alpha so that the combination of alpha*w stays the same.\n                scalar_type scale;\n\n                // if w_extra is basically greater than 0\n                if (std::abs(w_extra) > std::numeric_limits<scalar_type>::epsilon())\n                {\n                    scale = (x_extra/w_extra);\n                    temp_basis_vectors.set_size(1);\n                    temp_alpha.set_size(1);\n                    temp_basis_vectors(0) = sample_type(w.begin(), w.end());\n                    dlib::scale_by(temp_basis_vectors(0), scale);\n                    temp_alpha(0) = alpha/scale;\n                }\n                else\n                {\n                    // In this case w_extra is zero. So the only way we can get the same\n                    // thing in the output basis vector set is by using two vectors\n                    temp_basis_vectors.set_size(2);\n                    temp_alpha.set_size(2);\n                    temp_basis_vectors(0) = sample_type(w.begin(), w.end());\n                    dlib::scale_by(temp_basis_vectors(0), 2);\n                    temp_alpha(0) = alpha;\n                    temp_basis_vectors(1) = sample_type(w.begin(), w.end());\n                    temp_alpha(1) = -alpha;\n                }\n\n                return distance_function<kernel_type>(temp_alpha, squared_norm(), kernel, temp_basis_vectors);\n\n            }\n            else\n            {\n                return distance_function<kernel_type>(kernel);\n            }\n\n        }\n\n    private:\n\n        void do_train (\n            const sample_type& x,\n            scalar_type cscale,\n            scalar_type xscale\n        )\n        {\n\n            const scalar_type temp = cscale*alpha;\n\n            if (temp != 0)\n            {\n                // compute w += xscale*x/temp\n                typename sample_type::const_iterator i;\n                for (i = x.begin(); i != x.end(); ++i)\n                {\n                    w[i->first] += xscale*(i->second)/temp;\n                }\n\n                w_extra = w_extra + xscale*x_extra/temp;\n                alpha = temp;\n            }\n            else\n            {\n                // first compute w = cscale*alpha*w\n                for (typename std::map<unsigned long,scalar_type>::iterator i = w.begin(); i != w.end(); ++i)\n                {\n                    i->second *= cscale*alpha;\n                }\n\n                // now compute w += xscale*x\n                for (typename sample_type::const_iterator i = x.begin(); i != x.end(); ++i)\n                {\n                    w[i->first] += xscale*(i->second);\n                }\n\n\n                w_extra = cscale*alpha*w_extra + xscale*x_extra;\n                alpha = 1;\n            }\n        }\n\n        bool my_remove_oldest_first;\n\n        kernel_type kernel;\n\n        std::map<unsigned long,scalar_type> w;\n        scalar_type alpha;\n\n        scalar_type w_extra;\n        scalar_type x_extra;\n\n\n        scalar_type my_tolerance;\n        unsigned long my_max_dictionary_size;\n        scalar_type samples_seen;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KCENTROId_OVERLOADS_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/kernel.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_KERNEL\n#define DLIB_SVm_KERNEL\n\n#include \"kernel_abstract.h\"\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template < typename kernel_type > struct kernel_derivative;\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct radial_basis_kernel\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        radial_basis_kernel(const scalar_type g) : gamma(g) {}\n        radial_basis_kernel() : gamma(0.1) {}\n        radial_basis_kernel(\n            const radial_basis_kernel& k\n        ) : gamma(k.gamma) {}\n\n\n        const scalar_type gamma;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            const scalar_type d = trans(a-b)*(a-b);\n            return std::exp(-gamma*d);\n        }\n\n        radial_basis_kernel& operator= (\n            const radial_basis_kernel& k\n        )\n        {\n            const_cast<scalar_type&>(gamma) = k.gamma;\n            return *this;\n        }\n\n        bool operator== (\n            const radial_basis_kernel& k\n        ) const\n        {\n            return gamma == k.gamma;\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const radial_basis_kernel<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.gamma, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type radial_basis_kernel\"); \n        }\n    }\n\n    template <\n        typename T\n        >\n    void deserialize (\n        radial_basis_kernel<T>& item,\n        std::istream& in \n    )\n    {\n        typedef typename T::type scalar_type;\n        try\n        {\n            deserialize(const_cast<scalar_type&>(item.gamma), in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type radial_basis_kernel\"); \n        }\n    }\n\n    template <\n        typename T \n        >\n    struct kernel_derivative<radial_basis_kernel<T> >\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        kernel_derivative(const radial_basis_kernel<T>& k_) : k(k_){}\n\n        const sample_type& operator() (const sample_type& x, const sample_type& y) const\n        {\n            // return the derivative of the rbf kernel\n            temp = 2*k.gamma*(x-y)*k(x,y);\n            return temp;\n        }\n\n        const radial_basis_kernel<T>& k;\n        mutable sample_type temp;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct polynomial_kernel\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        polynomial_kernel(const scalar_type g, const scalar_type c, const scalar_type d) : gamma(g), coef(c), degree(d) {}\n        polynomial_kernel() : gamma(1), coef(0), degree(1) {}\n        polynomial_kernel(\n            const polynomial_kernel& k\n        ) : gamma(k.gamma), coef(k.coef), degree(k.degree) {}\n\n        typedef T type;\n        const scalar_type gamma;\n        const scalar_type coef;\n        const scalar_type degree;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return std::pow(gamma*(trans(a)*b) + coef, degree);\n        }\n\n        polynomial_kernel& operator= (\n            const polynomial_kernel& k\n        )\n        {\n            const_cast<scalar_type&>(gamma) = k.gamma;\n            const_cast<scalar_type&>(coef) = k.coef;\n            const_cast<scalar_type&>(degree) = k.degree;\n            return *this;\n        }\n\n        bool operator== (\n            const polynomial_kernel& k\n        ) const\n        {\n            return (gamma == k.gamma) && (coef == k.coef) && (degree == k.degree);\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const polynomial_kernel<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.gamma, out);\n            serialize(item.coef, out);\n            serialize(item.degree, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type polynomial_kernel\"); \n        }\n    }\n\n    template <\n        typename T\n        >\n    void deserialize (\n        polynomial_kernel<T>& item,\n        std::istream& in \n    )\n    {\n        typedef typename T::type scalar_type;\n        try\n        {\n            deserialize(const_cast<scalar_type&>(item.gamma), in);\n            deserialize(const_cast<scalar_type&>(item.coef), in);\n            deserialize(const_cast<scalar_type&>(item.degree), in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type polynomial_kernel\"); \n        }\n    }\n\n    template <\n        typename T \n        >\n    struct kernel_derivative<polynomial_kernel<T> >\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        kernel_derivative(const polynomial_kernel<T>& k_) : k(k_){}\n\n        const sample_type& operator() (const sample_type& x, const sample_type& y) const\n        {\n            // return the derivative of the rbf kernel\n            temp = k.degree*k.gamma*x*std::pow(k.gamma*(trans(x)*y) + k.coef, k.degree-1);\n            return temp;\n        }\n\n        const polynomial_kernel<T>& k;\n        mutable sample_type temp;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sigmoid_kernel\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        sigmoid_kernel(const scalar_type g, const scalar_type c) : gamma(g), coef(c) {}\n        sigmoid_kernel() : gamma(0.1), coef(-1.0) {}\n        sigmoid_kernel(\n            const sigmoid_kernel& k\n        ) : gamma(k.gamma), coef(k.coef) {}\n\n        typedef T type;\n        const scalar_type gamma;\n        const scalar_type coef;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return std::tanh(gamma*(trans(a)*b) + coef);\n        }\n\n        sigmoid_kernel& operator= (\n            const sigmoid_kernel& k\n        )\n        {\n            const_cast<scalar_type&>(gamma) = k.gamma;\n            const_cast<scalar_type&>(coef) = k.coef;\n            return *this;\n        }\n\n        bool operator== (\n            const sigmoid_kernel& k\n        ) const\n        {\n            return (gamma == k.gamma) && (coef == k.coef);\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sigmoid_kernel<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.gamma, out);\n            serialize(item.coef, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type sigmoid_kernel\"); \n        }\n    }\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sigmoid_kernel<T>& item,\n        std::istream& in \n    )\n    {\n        typedef typename T::type scalar_type;\n        try\n        {\n            deserialize(const_cast<scalar_type&>(item.gamma), in);\n            deserialize(const_cast<scalar_type&>(item.coef), in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type sigmoid_kernel\"); \n        }\n    }\n\n    template <\n        typename T \n        >\n    struct kernel_derivative<sigmoid_kernel<T> >\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        kernel_derivative(const sigmoid_kernel<T>& k_) : k(k_){}\n\n        const sample_type& operator() (const sample_type& x, const sample_type& y) const\n        {\n            // return the derivative of the rbf kernel\n            temp = k.gamma*x*(1-std::pow(k(x,y),2));\n            return temp;\n        }\n\n        const sigmoid_kernel<T>& k;\n        mutable sample_type temp;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct linear_kernel\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return trans(a)*b;\n        }\n\n        bool operator== (\n            const linear_kernel& \n        ) const\n        {\n            return true;\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const linear_kernel<T>& ,\n        std::ostream& \n    ){}\n\n    template <\n        typename T\n        >\n    void deserialize (\n        linear_kernel<T>& ,\n        std::istream&  \n    ){}\n\n    template <\n        typename T \n        >\n    struct kernel_derivative<linear_kernel<T> >\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        kernel_derivative(const linear_kernel<T>& k_) : k(k_){}\n\n        const sample_type& operator() (const sample_type& x, const sample_type& ) const\n        {\n            return x;\n        }\n\n        const linear_kernel<T>& k;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct histogram_intersection_kernel\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            scalar_type temp = 0;\n            for (long i = 0; i < a.size(); ++i)\n            {\n                temp += std::min(a(i), b(i));\n            }\n            return temp;\n        }\n\n        bool operator== (\n            const histogram_intersection_kernel& \n        ) const\n        {\n            return true;\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const histogram_intersection_kernel<T>& ,\n        std::ostream& \n    ){}\n\n    template <\n        typename T\n        >\n    void deserialize (\n        histogram_intersection_kernel<T>& ,\n        std::istream&  \n    ){}\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct offset_kernel\n    {\n        typedef typename T::scalar_type scalar_type;\n        typedef typename T::sample_type sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        offset_kernel(const T& k, const scalar_type& offset_\n        ) : kernel(k), offset(offset_) {}\n        offset_kernel() : kernel(T()), offset(0.01) {}\n        offset_kernel(\n            const offset_kernel& k\n        ) : kernel(k.kernel), offset(k.offset) {}\n\n        const T kernel;\n        const scalar_type offset;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return kernel(a,b) + offset;\n        }\n\n        offset_kernel& operator= (\n            const offset_kernel& k\n        )\n        {\n            const_cast<T&>(kernel) = k.kernel;\n            const_cast<scalar_type&>(offset) = k.offset;\n            return *this;\n        }\n\n        bool operator== (\n            const offset_kernel& k\n        ) const\n        {\n            return k.kernel == kernel && offset == k.offset;\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const offset_kernel<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.offset, out);\n            serialize(item.kernel, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type offset_kernel\"); \n        }\n    }\n\n    template <\n        typename T\n        >\n    void deserialize (\n        offset_kernel<T>& item,\n        std::istream& in \n    )\n    {\n        typedef typename offset_kernel<T>::scalar_type scalar_type;\n        try\n        {\n            deserialize(const_cast<scalar_type&>(item.offset), in);\n            deserialize(const_cast<T&>(item.kernel), in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type offset_kernel\"); \n        }\n    }\n\n    template <\n        typename T \n        >\n    struct kernel_derivative<offset_kernel<T> >\n    {\n        typedef typename T::scalar_type scalar_type;\n        typedef typename T::sample_type sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        kernel_derivative(const offset_kernel<T>& k) : der(k.kernel){}\n\n        const sample_type operator() (const sample_type& x, const sample_type& y) const\n        {\n            return der(x,y);\n        }\n\n        kernel_derivative<T> der;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_KERNEL\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/kernel_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_KERNEL_ABSTRACT_\n#ifdef DLIB_SVm_KERNEL_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n/*!A                               Kernel_Function_Objects                               */\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    /*! \n        WHAT IS A KERNEL FUNCTION OBJECT?\n            In the context of the dlib library documentation a kernel function object\n            is an object with an interface with the following properties:\n                - a public typedef named sample_type\n                - a public typedef named scalar_type which should be a float, double, or \n                  long double type.\n                - an overloaded operator() that operates on two items of sample_type \n                  and returns a scalar_type.  \n                  (e.g. scalar_type val = kernel_function(sample1,sample2); \n                   would be a valid expression)\n                - a public typedef named mem_manager_type that is an implementation of \n                  dlib/memory_manager/memory_manager_kernel_abstract.h or\n                  dlib/memory_manager_global/memory_manager_global_kernel_abstract.h or\n                  dlib/memory_manager_stateless/memory_manager_stateless_kernel_abstract.h \n                - an overloaded == operator that tells you if two kernels are\n                  identical or not.\n\n        THREAD SAFETY\n            For a kernel function to be threadsafe it means that it must be safe to\n            evaluate an expression like val = kernel_function(sample1,sample2)\n            simultaneously from multiple threads, even when the threads operate on the same\n            object instances (i.e. kernel_function, sample1, and sample2).  The most common\n            way to make this safe is to ensure that the kernel function does not mutate any\n            data, either in itself or in its arguments.  \n\n        For examples of kernel functions see the following objects\n        (e.g. the radial_basis_kernel).\n    !*/\n\n    template <\n        typename T\n        >\n    struct radial_basis_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be a dlib::matrix object \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a radial basis function kernel\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        const scalar_type gamma;\n\n        radial_basis_kernel(\n        );\n        /*!\n            ensures\n                - #gamma == 0.1 \n        !*/\n\n        radial_basis_kernel(\n            const radial_basis_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma == k.gamma\n        !*/\n\n        radial_basis_kernel(\n            const scalar_type g\n        );\n        /*!\n            ensures\n                - #gamma == g\n        !*/\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - a.nc() == 1\n                - b.nc() == 1\n                - a.nr() == b.nr()\n            ensures\n                - returns exp(-gamma * ||a-b||^2)\n        !*/\n\n        radial_basis_kernel& operator= (\n            const radial_basis_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma = k.gamma\n                - returns *this\n        !*/\n\n        bool operator== (\n            const radial_basis_kernel& k\n        ) const;\n        /*!\n            ensures\n                - if (k and *this are identical) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const radial_basis_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for radial_basis_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        radial_basis_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for radial_basis_kernel\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sigmoid_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be a dlib::matrix object \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a sigmoid kernel\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        const scalar_type gamma;\n        const scalar_type coef;\n\n        sigmoid_kernel(\n        );\n        /*!\n            ensures\n                - #gamma == 0.1 \n                - #coef == -1.0 \n        !*/\n\n        sigmoid_kernel(\n            const sigmoid_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma == k.gamma\n                - #coef == k.coef\n        !*/\n\n        sigmoid_kernel(\n            const scalar_type g,\n            const scalar_type c\n        );\n        /*!\n            ensures\n                - #gamma == g\n                - #coef == c\n        !*/\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - a.nc() == 1\n                - b.nc() == 1\n                - a.nr() == b.nr()\n            ensures\n                - returns tanh(gamma*trans(a)*b + coef)\n        !*/\n\n        sigmoid_kernel& operator= (\n            const sigmoid_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma = k.gamma\n                - #coef = k.coef\n                - returns *this\n        !*/\n\n        bool operator== (\n            const sigmoid_kernel& k\n        ) const;\n        /*!\n            ensures\n                - if (k and *this are identical) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sigmoid_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for sigmoid_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sigmoid_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for sigmoid_kernel\n    !*/\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct polynomial_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be a dlib::matrix object \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a polynomial kernel\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        const scalar_type gamma;\n        const scalar_type coef;\n        const scalar_type degree;\n\n        polynomial_kernel(\n        );\n        /*!\n            ensures\n                - #gamma == 1 \n                - #coef == 0 \n                - #degree == 1 \n        !*/\n\n        polynomial_kernel(\n            const polynomial_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma == k.gamma\n                - #coef == k.coef\n                - #degree == k.degree\n        !*/\n\n        polynomial_kernel(\n            const scalar_type g,\n            const scalar_type c,\n            const scalar_type d\n        );\n        /*!\n            ensures\n                - #gamma == g\n                - #coef == c\n                - #degree == d\n        !*/\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - a.nc() == 1\n                - b.nc() == 1\n                - a.nr() == b.nr()\n            ensures\n                - returns pow(gamma*trans(a)*b + coef, degree)\n        !*/\n\n        polynomial_kernel& operator= (\n            const polynomial_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma = k.gamma\n                - #coef = k.coef\n                - #degree = k.degree\n                - returns *this\n        !*/\n\n        bool operator== (\n            const polynomial_kernel& k\n        ) const;\n        /*!\n            ensures\n                - if (k and *this are identical) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const polynomial_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for polynomial_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        polynomial_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for polynomial_kernel\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct linear_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be a dlib::matrix object \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a linear function kernel\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - a.nc() == 1\n                - b.nc() == 1\n                - a.nr() == b.nr()\n            ensures\n                - returns trans(a)*b\n        !*/\n\n        bool operator== (\n            const linear_kernel& k\n        ) const;\n        /*!\n            ensures\n                - returns true\n        !*/\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const linear_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for linear_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        linear_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for linear_kernel \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct histogram_intersection_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be a dlib::matrix object \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a histogram intersection kernel kernel\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - is_vector(a) \n                - is_vector(b) \n                - a.size() == b.size()\n                - min(a) >= 0\n                - min(b) >= 0\n            ensures\n                - returns sum over all i: std::min(a(i), b(i)) \n        !*/\n\n        bool operator== (\n            const histogram_intersection_kernel& k\n        ) const;\n        /*!\n            ensures\n                - returns true\n        !*/\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const histogram_intersection_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for histogram_intersection_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        histogram_intersection_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for histogram_intersection_kernel \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct offset_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be a kernel object (e.g. radial_basis_kernel, polynomial_kernel, etc.) \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a kernel with a fixed value offset\n                added to it.\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::scalar_type scalar_type;\n        typedef typename T::sample_type sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        const T kernel;\n        const scalar_type offset;\n\n        offset_kernel(\n        );\n        /*!\n            ensures\n                - #offset == 0.01 \n        !*/\n\n        offset_kernel(\n            const offset_kernel& k\n        );\n        /*!\n            ensures\n                - #offset == k.offset\n                - #kernel == k.kernel\n        !*/\n\n        offset_kernel(\n            const T& k,\n            const scalar_type& off\n        );\n        /*!\n            ensures\n                - #kernel == k \n                - #offset == off \n        !*/\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            ensures\n                - returns kernel(a,b) + offset\n        !*/\n\n        offset_kernel& operator= (\n            const offset_kernel& k\n        );\n        /*!\n            ensures\n                - #offset == k.offset\n                - #kernel == k.kernel\n        !*/\n\n        bool operator== (\n            const offset_kernel& k\n        ) const;\n        /*!\n            ensures\n                - if (k and *this are identical) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const offset_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for offset_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        offset_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for offset_kernel\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type\n        >\n    struct kernel_derivative\n    {\n        /*!\n            REQUIREMENTS ON kernel_type\n                kernel_type must be one of the following kernel types:\n                    - radial_basis_kernel\n                    - polynomial_kernel \n                    - sigmoid_kernel\n                    - linear_kernel\n                    - offset_kernel\n\n            WHAT THIS OBJECT REPRESENTS\n                This is a function object that computes the derivative of a kernel \n                function object.\n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    Instances of this object are allowed to have a mutable cache which is\n                    used by const member functions.  Therefore, it is not safe to use one\n                    instance of this object from multiple threads (unless protected by a\n                    mutex).\n        !*/\n\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        kernel_derivative(\n            const kernel_type& k_\n        ); \n        /*!\n            ensures\n                - this object will return derivatives of the kernel object k_\n                - #k == k_\n        !*/\n\n        const sample_type operator() (\n            const sample_type& x, \n            const sample_type& y\n        ) const;\n        /*!\n            ensures\n                - returns the derivative of k with respect to y.  \n        !*/\n\n        const kernel_type& k;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_KERNEL_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/kernel_matrix.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_KERNEL_MATRIX_\n#define DLIB_SVm_KERNEL_MATRIX_\n\n#include <vector>\n#include \"kernel_matrix_abstract.h\"\n#include \"../matrix.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename kernel_type, typename T>\n        inline const typename T::type& access ( const matrix_exp<T>& m, long i)\n        {\n            return m(i);\n        }\n\n        // bind to anything that looks like an array and isn't a matrix\n        template <typename kernel_type, typename T>\n        inline const typename disable_if<is_matrix<T>,typename T::type>::type& access ( const T& m, long i)\n        {\n            return m[i];\n        }\n\n        // Only use this function if T isn't a std::pair because in that case the entire vector is\n        // probably itself a sparse sample.\n        template <typename kernel_type, typename T, typename alloc>\n        inline typename disable_if<is_pair<T>,const T&>::type access ( const std::vector<T,alloc>& m, long i)\n        {\n            return m[i];\n        }\n\n        // Only use this function if T isn't a std::pair because in that case the entire vector is\n        // probably a sparse sample.\n        template <typename kernel_type, typename T, typename alloc>\n        inline typename disable_if<is_pair<T>,const T&>::type access ( const std_vector_c<T,alloc>& m, long i)\n        {\n            return m[i];\n        }\n\n        template <typename kernel_type>\n        inline const typename kernel_type::sample_type& access ( \n            const typename kernel_type::sample_type& samp, \n            long \n        )\n        {\n            return samp;\n        }\n\n        // --------------------------------------------\n\n        template <typename kernel_type, typename T>\n        inline typename disable_if<is_same_type<T,typename kernel_type::sample_type>,unsigned long>::type \n        size ( const T& m)\n        {\n            return m.size();\n        }\n\n        template <typename kernel_type>\n        inline unsigned long size ( \n            const typename kernel_type::sample_type&  \n        )\n        {\n            return 1;\n        }\n\n        // --------------------------------------------\n\n        template <typename T>\n        typename disable_if<is_matrix<T> >::type assert_is_vector(const T&)\n        {}\n\n        template <typename T>\n        // This funny #ifdef thing is here because gcc sometimes gives a warning \n        // about v being unused otherwise.\n#ifdef ENABLE_ASSERTS\n        void assert_is_vector(const matrix_exp<T>& v)\n#else\n        void assert_is_vector(const matrix_exp<T>& )\n#endif\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_vector(v) == true,\n                \"\\tconst matrix_exp kernel_matrix()\"\n                << \"\\n\\t You have to supply this function with row or column vectors\"\n                << \"\\n\\t v.nr(): \" << v.nr()\n                << \"\\n\\t v.nc(): \" << v.nc()\n                );\n        }\n\n    }\n\n    template <typename K, typename vect_type1, typename vect_type2>\n    struct op_kern_mat  \n    {\n        op_kern_mat( \n            const K& kern_, \n            const vect_type1& vect1_,\n            const vect_type2& vect2_\n        ) : \n            kern(kern_), \n            vect1(vect1_),\n            vect2(vect2_) \n        {\n            // make sure the requires clauses get checked eventually\n            impl::assert_is_vector(vect1);\n            impl::assert_is_vector(vect2);\n        }\n\n        const K& kern;\n        const vect_type1& vect1;\n        const vect_type2& vect2;\n\n        typedef typename K::scalar_type type;\n\n        const static long cost = 100;\n        const static long NR = (is_same_type<vect_type1,typename K::sample_type>::value) ? 1 : 0;\n        const static long NC = (is_same_type<vect_type2,typename K::sample_type>::value) ? 1 : 0;\n\n        typedef const type const_ret_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const \n        { \n            return kern(impl::access<K>(vect1,r), impl::access<K>(vect2,c)); \n        }\n\n        long nr () const { return impl::size<K>(vect1); }\n        long nc () const { return impl::size<K>(vect2); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item ) const { return alias_helper(item.ref()); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item ) const { return alias_helper(item.ref()); }\n\n        template <typename U> bool alias_helper  ( const U& ) const { return false; }\n\n        typedef typename K::sample_type samp_type;\n\n        // Say we destructively alias if one of the vect* objects is actually item.\n        bool alias_helper                   (const samp_type& item ) const { return are_same(item, vect1) || are_same(item, vect2); }\n        template <typename U> bool are_same (const samp_type& , const U& )         const { return false; }\n        bool are_same                       (const samp_type& a, const samp_type& b) const { return (&a == &b); }\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename V1,\n        typename V2 \n        >\n    const matrix_op<op_kern_mat<K,V1,V2> > kernel_matrix (\n        const K& kern,\n        const V1& v1,\n        const V2& v2\n        )\n    {\n        typedef op_kern_mat<K,V1,V2> op;\n        return matrix_op<op>(op(kern,v1,v2));\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    /*\n        It is possible to implement the kernel_matrix() operator with just one operator\n        class but treating the version that takes only a single vector separately\n        leads to more efficient output by gcc in certain instances.  \n    */\n    template <typename K, typename vect_type1>\n    struct op_kern_mat_single  \n    {\n        op_kern_mat_single( \n            const K& kern_, \n            const vect_type1& vect1_\n        ) : \n            kern(kern_), \n            vect1(vect1_)\n        {\n            // make sure the requires clauses get checked eventually\n            impl::assert_is_vector(vect1);\n        }\n\n        const K& kern;\n        const vect_type1& vect1;\n\n        typedef typename K::scalar_type type;\n\n        const static long cost = 100;\n        const static long NR = (is_same_type<vect_type1,typename K::sample_type>::value) ? 1 : 0;\n        const static long NC = (is_same_type<vect_type1,typename K::sample_type>::value) ? 1 : 0;\n\n        typedef const type const_ret_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n        typedef row_major_layout layout_type;\n\n        const_ret_type apply (long r, long c ) const \n        { \n            return kern(impl::access<K>(vect1,r), impl::access<K>(vect1,c)); \n        }\n\n        long nr () const { return impl::size<K>(vect1); }\n        long nc () const { return impl::size<K>(vect1); }\n\n        template <typename U> bool aliases               ( const matrix_exp<U>& item ) const { return alias_helper(item.ref()); }\n        template <typename U> bool destructively_aliases ( const matrix_exp<U>& item ) const { return alias_helper(item.ref()); }\n\n        template <typename U> bool alias_helper  ( const U& ) const { return false; }\n\n        typedef typename K::sample_type samp_type;\n\n        // Say we destructively alias if vect1 is actually item.\n        bool alias_helper                   (const samp_type& item ) const { return are_same(item, vect1); }\n        template <typename U> bool are_same (const samp_type& , const U& )         const { return false; }\n        bool are_same                       (const samp_type& a, const samp_type& b) const { return (&a == &b); }\n    }; \n\n    template <\n        typename K,\n        typename V\n        >\n    const matrix_op<op_kern_mat_single<K,V> > kernel_matrix (\n        const K& kern,\n        const V& v\n        )\n    {\n        typedef op_kern_mat_single<K,V> op;\n        return matrix_op<op>(op(kern,v));\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_dest_type,\n        typename K,\n        typename V\n        >\n    inline void matrix_assign (\n        matrix_dest_type& dest,\n        const matrix_exp<matrix_op<op_kern_mat_single<K,V> > >& src\n    )\n    /*!\n        Overload matrix assignment so that when a kernel_matrix expression\n        gets assigned it only evaluates half the kernel matrix (since it is symmetric)\n    !*/\n    {\n        for (long r = 0; r < src.nr(); ++r)\n        {\n            for (long c = r; c < src.nc(); ++c)\n            {\n                dest(r,c) = dest(c,r) = src(r,c);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_KERNEL_MATRIX_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/kernel_matrix_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_KERNEL_MATRIX_ABSTRACT_\n#ifdef DLIB_SVm_KERNEL_MATRIX_ABSTRACT_\n\n#include <vector>\n#include \"kernel_abstract.h\"\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename V\n        >\n    const matrix_exp kernel_matrix (\n        const kernel_type& kernel,\n        const V& v\n    );\n    /*!\n        requires\n            - kernel == a kernel function object as defined by the file dlib/svm/kernel_abstract.h.\n              This kernel must also be capable of operating on the contents of v.\n            - V == dlib::matrix, std::vector, dlib::std_vector_c, dlib::random_subset_selector, \n              dlib::linearly_independent_subset_finder, or kernel_type::sample_type.\n            - if (V is a dlib::matrix) then\n                - is_vector(v) == true\n        ensures\n            - if (V is of type kernel_type::sample_type) then\n                - returns a matrix R such that:\n                    - R::type == kernel_type::scalar_type\n                    - R.size() == 1\n                    - R(0,0) == kernel(v,v)\n            - else\n                - returns a matrix R such that:\n                    - R::type == kernel_type::scalar_type\n                    - R is a square matrix of v.size() rows by v.size() columns\n                    - for all valid r and c:\n                        - R(r,c) == kernel(v(r), v(c))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename V1,\n        typename V2\n        >\n    const matrix_exp kernel_matrix (\n        const kernel_type& kernel,\n        const V1& v1,\n        const V2& v2\n    );\n    /*!\n        requires\n            - kernel == a kernel function object as defined by the file dlib/svm/kernel_abstract.h\n              This kernel must also be capable of operating on the contents of v1 and v2.\n            - V1 == dlib::matrix, std::vector, dlib::std_vector_c, dlib::random_subset_selector,  \n              dlib::linearly_independent_subset_finder, or kernel_type::sample_type.\n            - V2 == dlib::matrix, std::vector, dlib::std_vector_c, dlib::random_subset_selector, \n              dlib::linearly_independent_subset_finder, or kernel_type::sample_type.\n            - if (V1 is a dlib::matrix) then\n                - is_vector(v1) == true\n            - if (V2 is a dlib::matrix) then\n                - is_vector(v2) == true\n        ensures\n            - if (V1 and V2 are of type kernel_type::sample_type) then\n                - returns a matrix R such that:\n                    - R::type == kernel_type::scalar_type\n                    - R.size() == 1\n                    - R(0,0) == kernel(v1,v2)\n            - else if (V1 is of type kernel_type::sample_type) then\n                - returns a matrix R such that:\n                    - R::type == kernel_type::scalar_type\n                    - R.nr() == 1\n                    - R.nc() == v2.size()\n                    - for all valid c:\n                        - R(0,c) == kernel(v1, v2(c))\n            - else if (V2 is of type kernel_type::sample_type) then\n                - returns a matrix R such that:\n                    - R::type == kernel_type::scalar_type\n                    - R.nr() == v1.size()\n                    - R.nc() == 1\n                    - for all valid r:\n                        - R(r,0) == kernel(v1(r), v2)\n            - else\n                - returns a matrix R such that:\n                    - R::type == kernel_type::scalar_type\n                    - R.nr() == v1.size()\n                    - R.nc() == v2.size()\n                    - for all valid r and c:\n                        - R(r,c) == kernel(v1(r), v2(c))\n\n\n            A note about aliasing (see the examples/matrix_expressions_ex.cpp example program\n            for a discussion of what aliasing is in the context of the dlib::matrix): \n                kernel_matrix() expressions can detect aliasing of an argument if that \n                argument is of type kernel_type::sample_type.  However, it can't detect\n                aliasing though std::vectors or other \"list of sample type\" container class\n                arguments.  This means that it is safe to assign a kernel_matrix() expression\n                to a sample_type if V1 or V2 are of sample_type but not safe otherwise.  However,\n                since the latter case results in a general n by m matrix rather than a column\n                or row vector you shouldn't ever be doing it anyway.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n    \n#endif // DLIB_SVm_KERNEL_MATRIX_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/kkmeans.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_KKMEANs_\n#define DLIB_KKMEANs_\n\n#include <cmath>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"kernel.h\"\n#include \"../array.h\"\n#include \"kcentroid.h\"\n#include \"kkmeans_abstract.h\"\n#include \"../noncopyable.h\"\n#include \"../smart_pointers.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n    template <\n        typename kernel_type\n        >\n    class kkmeans : public noncopyable\n    {\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        kkmeans (\n            const kcentroid<kernel_type>& kc_ \n        ):\n            kc(kc_),\n            min_change(0.01)\n        {\n            set_number_of_centers(1);\n        }\n\n        ~kkmeans()\n        {\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kc.get_kernel();\n        }\n\n        void set_kcentroid (\n            const kcentroid<kernel_type>& kc_\n        )\n        {\n            kc = kc_;\n            set_number_of_centers(number_of_centers());\n        }\n\n        const kcentroid<kernel_type>& get_kcentroid (\n            unsigned long i\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(i < number_of_centers(),\n                \"\\tkcentroid kkmeans::get_kcentroid(i)\"\n                << \"\\n\\tYou have given an invalid value for i\"\n                << \"\\n\\ti:                   \" << i \n                << \"\\n\\tnumber_of_centers(): \" << number_of_centers() \n                << \"\\n\\tthis:                \" << this\n                );\n\n            return *centers[i];\n        }\n\n        void set_number_of_centers (\n            unsigned long num\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(num > 0,\n                \"\\tvoid kkmeans::set_number_of_centers()\"\n                << \"\\n\\tYou can't set the number of centers to zero\"\n                << \"\\n\\tthis: \" << this\n                );\n\n            centers.set_max_size(num);\n            centers.set_size(num);\n\n            for (unsigned long i = 0; i < centers.size(); ++i)\n            {\n                centers[i].reset(new kcentroid<kernel_type>(kc));\n            }\n        }\n\n        unsigned long number_of_centers (\n        ) const\n        {\n            return centers.size();\n        }\n\n        template <typename T, typename U>\n        void train (\n            const T& samples,\n            const U& initial_centers,\n            long max_iter = 1000\n        )\n        {\n            do_train(mat(samples),mat(initial_centers),max_iter);\n        }\n\n        unsigned long operator() (\n            const sample_type& sample\n        ) const\n        {\n            unsigned long label = 0;\n            scalar_type best_score = (*centers[0])(sample);\n\n            // figure out which center the given sample is closest too\n            for (unsigned long i = 1; i < centers.size(); ++i)\n            {\n                scalar_type temp = (*centers[i])(sample);\n                if (temp < best_score)\n                {\n                    label = i;\n                    best_score = temp;\n                }\n            }\n\n            return label;\n        }\n\n        void set_min_change (\n            scalar_type min_change_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT( 0 <= min_change_ < 1,\n                \"\\tvoid kkmeans::set_min_change()\"\n                << \"\\n\\tInvalid arguments to this function\"\n                << \"\\n\\tthis: \" << this\n                << \"\\n\\tmin_change_: \" << min_change_ \n                );\n            min_change = min_change_;\n        }\n\n        const scalar_type get_min_change (\n        ) const\n        {\n            return min_change;\n        }\n\n        void swap (\n            kkmeans& item\n        )\n        {\n            centers.swap(item.centers);\n            kc.swap(item.kc);\n            assignments.swap(item.assignments);\n            exchange(min_change, item.min_change);\n        }\n\n        friend void serialize(const kkmeans& item, std::ostream& out)\n        {\n            serialize(item.centers.size(),out);\n            for (unsigned long i = 0; i < item.centers.size(); ++i)\n            {\n                serialize(*item.centers[i], out);\n            }\n            serialize(item.kc, out);\n            serialize(item.min_change, out);\n        }\n\n        friend void deserialize(kkmeans& item, std::istream& in)\n        {\n            unsigned long num;\n            deserialize(num, in);\n            item.centers.resize(num);\n            for (unsigned long i = 0; i < item.centers.size(); ++i)\n            {\n                scoped_ptr<kcentroid<kernel_type> > temp(new kcentroid<kernel_type>(kernel_type()));\n                deserialize(*temp, in);\n                item.centers[i].swap(temp);\n            }\n\n            deserialize(item.kc, in);\n            deserialize(item.min_change, in);\n        }\n\n    private:\n\n        template <typename matrix_type, typename matrix_type2>\n        void do_train (\n            const matrix_type& samples,\n            const matrix_type2& initial_centers,\n            long max_iter = 1000\n        )\n        {\n            COMPILE_TIME_ASSERT((is_same_type<typename matrix_type::type, sample_type>::value));\n            COMPILE_TIME_ASSERT((is_same_type<typename matrix_type2::type, sample_type>::value));\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(samples.nc() == 1 && initial_centers.nc() == 1 &&\n                         initial_centers.nr() == static_cast<long>(number_of_centers()),\n                \"\\tvoid kkmeans::train()\"\n                << \"\\n\\tInvalid arguments to this function\"\n                << \"\\n\\tthis: \" << this\n                << \"\\n\\tsamples.nc(): \" << samples.nc() \n                << \"\\n\\tinitial_centers.nc(): \" << initial_centers.nc() \n                << \"\\n\\tinitial_centers.nr(): \" << initial_centers.nr() \n                );\n\n            // clear out the old data and initialize the centers\n            for (unsigned long i = 0; i < centers.size(); ++i)\n            {\n                centers[i]->clear_dictionary();\n                centers[i]->train(initial_centers(i));\n            }\n\n            assignments.resize(samples.size());\n\n            bool assignment_changed = true;\n\n            // loop until the centers stabilize \n            long count = 0;\n            const unsigned long min_num_change = static_cast<unsigned long>(min_change*samples.size());\n            unsigned long num_changed = min_num_change;\n            while (assignment_changed && count < max_iter && num_changed >= min_num_change)\n            {\n                ++count;\n                assignment_changed = false;\n                num_changed = 0;\n\n                // loop over all the samples and assign them to their closest centers\n                for (long i = 0; i < samples.size(); ++i)\n                {\n                    // find the best center\n                    unsigned long best_center = 0;\n                    scalar_type best_score = (*centers[0])(samples(i));\n                    for (unsigned long c = 1; c < centers.size(); ++c)\n                    {\n                        scalar_type temp = (*centers[c])(samples(i));\n                        if (temp < best_score)\n                        {\n                            best_score = temp;\n                            best_center = c;\n                        }\n                    }\n\n                    // if the current sample changed centers then make note of that\n                    if (assignments[i] != best_center)\n                    {\n                        assignments[i] = best_center;\n                        assignment_changed = true;\n                        ++num_changed;\n                    }\n                }\n\n                if (assignment_changed)\n                {\n                    // now clear out the old data \n                    for (unsigned long i = 0; i < centers.size(); ++i)\n                        centers[i]->clear_dictionary();\n\n                    // recalculate the cluster centers \n                    for (unsigned long i = 0; i < assignments.size(); ++i)\n                        centers[assignments[i]]->train(samples(i));\n                }\n\n            }\n\n\n        }\n\n        array<scoped_ptr<kcentroid<kernel_type> > > centers;\n        kcentroid<kernel_type> kc;\n        scalar_type min_change;\n\n        // temp variables\n        array<unsigned long> assignments;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    void swap(kkmeans<kernel_type>& a, kkmeans<kernel_type>& b)\n    { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    struct dlib_pick_initial_centers_data\n    {\n        dlib_pick_initial_centers_data():idx(0), dist(1e200){}\n        long idx;\n        double dist;\n        bool operator< (const dlib_pick_initial_centers_data& d) const { return dist < d.dist; }\n    };\n\n    template <\n        typename vector_type1, \n        typename vector_type2, \n        typename kernel_type\n        >\n    void pick_initial_centers(\n        long num_centers, \n        vector_type1& centers, \n        const vector_type2& samples, \n        const kernel_type& k, \n        double percentile = 0.01\n    )\n    {\n        /*\n            This function is basically just a non-randomized version of the kmeans++ algorithm\n            described in the paper:\n                kmeans++: The Advantages of Careful Seeding by Arthur and Vassilvitskii\n\n        */\n\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(num_centers > 1 && 0 <= percentile && percentile < 1 && samples.size() > 1,\n            \"\\tvoid pick_initial_centers()\"\n            << \"\\n\\tYou passed invalid arguments to this function\"\n            << \"\\n\\tnum_centers: \" << num_centers \n            << \"\\n\\tpercentile: \" << percentile \n            << \"\\n\\tsamples.size(): \" << samples.size() \n            );\n\n        std::vector<dlib_pick_initial_centers_data> scores(samples.size());\n        std::vector<dlib_pick_initial_centers_data> scores_sorted(samples.size());\n        centers.clear();\n\n        // pick the first sample as one of the centers\n        centers.push_back(samples[0]);\n\n        const long best_idx = static_cast<long>(samples.size() - samples.size()*percentile - 1);\n\n        // pick the next center\n        for (long i = 0; i < num_centers-1; ++i)\n        {\n            // Loop over the samples and compare them to the most recent center.  Store\n            // the distance from each sample to its closest center in scores.\n            const double k_cc = k(centers[i], centers[i]);\n            for (unsigned long s = 0; s < samples.size(); ++s)\n            {\n                // compute the distance between this sample and the current center\n                const double dist = k_cc + k(samples[s],samples[s]) - 2*k(samples[s], centers[i]);\n\n                if (dist < scores[s].dist)\n                {\n                    scores[s].dist = dist;\n                    scores[s].idx = s;\n                }\n            }\n\n            scores_sorted = scores;\n\n            // now find the winning center and add it to centers.  It is the one that is \n            // far away from all the other centers.\n            sort(scores_sorted.begin(), scores_sorted.end());\n            centers.push_back(samples[scores_sorted[best_idx].idx]);\n        }\n        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type1, \n        typename vector_type2\n        >\n    void pick_initial_centers(\n        long num_centers, \n        vector_type1& centers, \n        const vector_type2& samples, \n        double percentile = 0.01\n    )\n    {\n        typedef typename vector_type1::value_type sample_type;\n        linear_kernel<sample_type> kern;\n        pick_initial_centers(num_centers, centers, samples, kern, percentile);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename array_type, \n        typename sample_type,\n        typename alloc\n        >\n    void find_clusters_using_kmeans (\n        const array_type& samples,\n        std::vector<sample_type, alloc>& centers,\n        unsigned long max_iter = 1000\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(samples.size() > 0 && centers.size() > 0,\n            \"\\tvoid find_clusters_using_kmeans()\"\n            << \"\\n\\tYou passed invalid arguments to this function\"\n            << \"\\n\\t samples.size(): \" << samples.size() \n            << \"\\n\\t centers.size(): \" << centers.size() \n            );\n\n#ifdef ENABLE_ASSERTS\n        {\n        const long nr = samples[0].nr();\n        const long nc = samples[0].nc();\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            DLIB_ASSERT(is_vector(samples[i]) && samples[i].nr() == nr && samples[i].nc() == nc,\n                \"\\tvoid find_clusters_using_kmeans()\"\n                << \"\\n\\t You passed invalid arguments to this function\"\n                << \"\\n\\t is_vector(samples[i]): \" << is_vector(samples[i])\n                << \"\\n\\t samples[i].nr():       \" << samples[i].nr()\n                << \"\\n\\t nr:                    \" << nr\n                << \"\\n\\t samples[i].nc():       \" << samples[i].nc()\n                << \"\\n\\t nc:                    \" << nc\n                << \"\\n\\t i:                     \" << i\n                );\n        }\n        }\n#endif\n\n        typedef typename sample_type::type scalar_type;\n\n        sample_type zero(centers[0]);\n        set_all_elements(zero, 0);\n\n        std::vector<unsigned long, alloc> center_element_count;\n\n        // tells which center a sample belongs to\n        std::vector<unsigned long, alloc> assignments(samples.size(), samples.size());\n\n\n        unsigned long iter = 0;\n        bool centers_changed = true;\n        while (centers_changed && iter < max_iter)\n        {\n            ++iter;\n            centers_changed = false;\n            center_element_count.assign(centers.size(), 0);\n\n            // loop over each sample and see which center it is closest to\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                // find the best center for sample[i]\n                scalar_type best_dist = std::numeric_limits<scalar_type>::max();\n                unsigned long best_center = 0;\n                for (unsigned long j = 0; j < centers.size(); ++j)\n                {\n                    scalar_type dist = length(centers[j] - samples[i]);\n                    if (dist < best_dist)\n                    {\n                        best_dist = dist;\n                        best_center = j;\n                    }\n                }\n\n                if (assignments[i] != best_center)\n                {\n                    centers_changed = true;\n                    assignments[i] = best_center;\n                }\n\n                center_element_count[best_center] += 1;\n            }\n\n            // now update all the centers\n            centers.assign(centers.size(), zero);\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                centers[assignments[i]] += samples[i];\n            }\n            for (unsigned long i = 0; i < centers.size(); ++i)\n            {\n                if (center_element_count[i] != 0)\n                    centers[i] /= center_element_count[i];\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename array_type, \n        typename EXP \n        >\n    unsigned long nearest_center (\n        const array_type& centers,\n        const matrix_exp<EXP>& sample\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(centers.size() > 0 && sample.size() > 0 && is_vector(sample),\n            \"\\t unsigned long nearest_center()\"\n            << \"\\n\\t You have given invalid inputs to this function.\"\n            << \"\\n\\t centers.size():    \" << centers.size() \n            << \"\\n\\t sample.size():     \" << sample.size() \n            << \"\\n\\t is_vector(sample): \" << is_vector(sample) \n            );\n\n        double best_dist = length_squared(centers[0] - sample);\n        unsigned long best_idx = 0;\n        for (unsigned long i = 1; i < centers.size(); ++i)\n        {\n            const double dist = length_squared(centers[i] - sample);\n            if (dist < best_dist)\n            {\n                best_dist = dist;\n                best_idx = i;\n            }\n        }\n        return best_idx;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KKMEANs_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/kkmeans_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_KKMEANs_ABSTRACT_\n#ifdef DLIB_KKMEANs_ABSTRACT_\n\n#include <cmath>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"kernel_abstract.h\"\n#include \"kcentroid_abstract.h\"\n#include \"../noncopyable.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename kernel_type \n        >\n    class kkmeans : public noncopyable\n    {\n        /*!\n            REQUIREMENTS ON kernel_type\n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            INITIAL VALUE\n                - number_of_centers() == 1\n                - get_min_change() == 0.01\n\n            WHAT THIS OBJECT REPRESENTS\n                This is an implementation of a kernelized k-means clustering algorithm.  \n                It performs k-means clustering by using the kcentroid object.  \n        !*/\n\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        kkmeans (\n            const kcentroid<kernel_type>& kc_ \n        );\n        /*!\n            ensures\n                - #number_of_centers() == 1\n                - #get_min_change() == 0.01\n                - #get_kcentroid(0) == a copy of kc_\n        !*/\n\n        ~kkmeans(\n        );\n        /*!\n            ensures\n                - all resources associated with *this have been released\n        !*/\n\n        void set_kcentroid (\n            const kcentroid<kernel_type>& kc_\n        );\n        /*!\n            ensures\n                - for all idx:  \n                    - #get_kcentroid(idx) == a copy of kc_\n        !*/\n\n        const kcentroid<kernel_type>& get_kcentroid (\n            unsigned long i\n        ) const;\n        /*!\n            requires\n                - i < number_of_centers()\n            ensures\n                - returns a const reference to the ith kcentroid object contained in\n                  this object.  Each kcentroid represents one of the centers found\n                  by the k-means clustering algorithm.\n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the kernel used by this object\n        !*/\n\n        void set_number_of_centers (\n            unsigned long num\n        );\n        /*!\n            requires\n                - num > 0\n            ensures\n                - #number_of_centers() == num\n        !*/\n\n        unsigned long number_of_centers (\n        ) const;\n        /*!\n            ensures\n                - returns the number of centers used in this instance of the k-means clustering\n                  algorithm.\n        !*/\n\n        template <\n            typename matrix_type,\n            typename matrix_type2\n            >\n        void train (\n            const matrix_type& samples,\n            const matrix_type2& initial_centers,\n            long max_iter = 1000\n        );\n        /*!\n            requires\n                - matrix_type and matrix_type2 must either be dlib::matrix objects or convertible to dlib::matrix\n                  via mat()\n                - matrix_type::type == sample_type  (i.e. matrix_type should contain sample_type objects)\n                - matrix_type2::type == sample_type (i.e. matrix_type2 should contain sample_type objects)\n                - initial_centers.nc() == 1         (i.e. must be a column vector)\n                - samples.nc() == 1                 (i.e. must be a column vector)\n                - initial_centers.nr() == number_of_centers()\n            ensures\n                - performs k-means clustering of the given set of samples.  The initial center points\n                  are taken from the initial_centers argument.\n                - loops over the data and continues to refine the clustering until either less than \n                  get_min_change() fraction of the data points change clusters or we have done max_iter \n                  iterations over the data.\n                - After this function finishes you can call the operator() function below\n                  to determine which centroid a given sample is closest to.\n        !*/\n\n        unsigned long operator() (\n            const sample_type& sample\n        ) const;\n        /*!\n            ensures\n                - returns a number idx such that:\n                    - idx < number_of_centers()\n                    - get_kcentroid(idx) == the centroid that is closest to the given\n                      sample.\n        !*/\n\n        void set_min_change (\n            scalar_type min_change\n        );\n        /*!\n            requires\n                - 0 <= min_change < 1\n            ensures\n                - #get_min_change() == min_change\n        !*/\n\n        const scalar_type get_min_change (\n        ) const;\n        /*!\n            ensures\n                - returns the minimum fraction of data points that need to change\n                  centers in an iteration of kmeans for the algorithm to keep going.\n        !*/\n\n        void swap (\n            kkmeans& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type\n        >\n    void swap(\n        kkmeans<kernel_type>& a, \n        kkmeans<kernel_type>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename kernel_type\n        >\n    void serialize (\n        const kkmeans<kernel_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for kkmeans objects\n    !*/\n\n    template <\n        typename kernel_type \n        >\n    void deserialize (\n        kkmeans<kernel_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for kkmeans objects\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type1, \n        typename vector_type2, \n        typename kernel_type\n        >\n    void pick_initial_centers(\n        long num_centers, \n        vector_type1& centers, \n        const vector_type2& samples, \n        const kernel_type& k, \n        double percentile = 0.01\n    );\n    /*!\n        requires\n            - num_centers > 1\n            - 0 <= percentile < 1\n            - samples.size() > 1\n            - vector_type1 == something with an interface compatible with std::vector\n            - vector_type2 == something with an interface compatible with std::vector\n            - k(samples[0],samples[0]) must be a valid expression that returns a double\n            - both centers and samples must be able to contain kernel_type::sample_type \n              objects\n        ensures\n            - finds num_centers candidate cluster centers in the data in the samples \n              vector.  Assumes that k is the kernel that will be used during clustering \n              to define the space in which clustering occurs.\n            - The centers are found by looking for points that are far away from other \n              candidate centers.  However, if the data is noisy you probably want to \n              ignore the farthest way points since they will be outliers.  To do this \n              set percentile to the fraction of outliers you expect the data to contain.\n            - #centers.size() == num_centers\n            - #centers == a vector containing the candidate centers found\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type1, \n        typename vector_type2\n        >\n    void pick_initial_centers(\n        long num_centers, \n        vector_type1& centers, \n        const vector_type2& samples, \n        double percentile = 0.01\n    );\n    /*!\n        requires\n            - num_centers > 1\n            - 0 <= percentile < 1\n            - samples.size() > 1\n            - vector_type1 == something with an interface compatible with std::vector\n            - vector_type2 == something with an interface compatible with std::vector\n            - Both centers and samples must be able to contain dlib::matrix based row or\n              column vectors.\n        ensures\n            - performs: pick_initial_centers(num_centers, centers, samples, linear_kernel<sample_type>(), percentile)\n              (i.e. this function is simply an overload that uses the linear kernel.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename array_type, \n        typename sample_type,\n        typename alloc\n        >\n    void find_clusters_using_kmeans (\n        const array_type& samples,\n        std::vector<sample_type, alloc>& centers,\n        unsigned long max_iter = 1000\n    );\n    /*!\n        requires\n            - samples.size() > 0\n            - samples == a bunch of row or column vectors and they all must be of the\n              same length.\n            - centers.size() > 0\n            - array_type == something with an interface compatible with std::vector\n              and it must contain row or column vectors capable of being stored in \n              sample_type objects\n            - sample_type == a dlib::matrix capable of representing vectors\n        ensures\n            - performs regular old linear kmeans clustering on the samples.  The clustering\n              begins with the initial set of centers given as an argument to this function.\n              When it finishes #centers will contain the resulting centers.\n            - no more than max_iter iterations will be performed before this function\n              terminates.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename array_type, \n        typename EXP \n        >\n    unsigned long nearest_center (\n        const array_type& centers,\n        const matrix_exp<EXP>& sample\n    );\n    /*!\n        requires\n            - centers.size() > 0\n            - sample.size() > 0\n            - is_vector(sample) == true\n            - centers must be an array of vectors such that the following expression is\n              valid: length_squared(sample - centers[0]).  (e.g. centers could be a\n              std::vector of matrix objects holding column vectors).\n        ensures\n            - returns the index that identifies the element of centers that is nearest to\n              sample.  That is, returns a number IDX such that centers[IDX] is the element\n              of centers that minimizes length(centers[IDX]-sample).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KKMEANs_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/krls.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_KRLs_\n#define DLIB_KRLs_\n\n#include <vector>\n\n#include \"krls_abstract.h\"\n#include \"../matrix.h\"\n#include \"function.h\"\n#include \"../std_allocator.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    class krls\n    {\n        /*!\n            This is an implementation of the kernel recursive least squares algorithm described in the paper:\n            The Kernel Recursive Least Squares Algorithm by Yaakov Engel.\n        !*/\n\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n\n        explicit krls (\n            const kernel_type& kernel_, \n            scalar_type tolerance_ = 0.001,\n            unsigned long max_dictionary_size_ = 1000000\n        ) : \n            kernel(kernel_), \n            my_tolerance(tolerance_),\n            my_max_dictionary_size(max_dictionary_size_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(tolerance_ >= 0,\n                \"\\tkrls::krls()\"\n                << \"\\n\\t You have to give a positive tolerance\"\n                << \"\\n\\t this: \" << this\n                << \"\\n\\t tolerance: \" << tolerance_ \n                );\n\n            clear_dictionary();\n        }\n\n        scalar_type tolerance() const\n        {\n            return my_tolerance;\n        }\n\n        unsigned long max_dictionary_size() const\n        {\n            return my_max_dictionary_size;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel;\n        }\n\n        void clear_dictionary ()\n        {\n            dictionary.clear();\n            alpha.clear();\n\n            K_inv.set_size(0,0);\n            K.set_size(0,0);\n            P.set_size(0,0);\n        }\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const\n        {\n            scalar_type temp = 0;\n            for (unsigned long i = 0; i < alpha.size(); ++i)\n                temp += alpha[i]*kern(dictionary[i], x);\n\n            return temp;\n        }\n\n        void train (\n            const sample_type& x,\n            scalar_type y\n        )\n        {\n            const scalar_type kx = kern(x,x);\n            if (alpha.size() == 0)\n            {\n                // just ignore this sample if it is the zero vector (or really close to being zero)\n                if (std::abs(kx) > std::numeric_limits<scalar_type>::epsilon())\n                {\n                    // set initial state since this is the first training example we have seen\n\n                    K_inv.set_size(1,1);\n                    K_inv(0,0) = 1/kx;\n                    K.set_size(1,1);\n                    K(0,0) = kx;\n\n                    alpha.push_back(y/kx);\n                    dictionary.push_back(x);\n                    P.set_size(1,1);\n                    P(0,0) = 1;\n                }\n            }\n            else\n            {\n                // fill in k\n                k.set_size(alpha.size());\n                for (long r = 0; r < k.nr(); ++r)\n                    k(r) = kern(x,dictionary[r]);\n\n                // compute the error we would have if we approximated the new x sample\n                // with the dictionary.  That is, do the ALD test from the KRLS paper.\n                a = K_inv*k;\n                scalar_type delta = kx - trans(k)*a;\n\n                // if this new vector isn't approximately linearly dependent on the vectors\n                // in our dictionary.\n                if (delta > my_tolerance)\n                {\n                    if (dictionary.size() >= my_max_dictionary_size)\n                    {\n                        // We need to remove one of the old members of the dictionary before\n                        // we proceed with adding a new one.  So remove the oldest one. \n                        remove_dictionary_vector(0);\n\n                        // recompute these guys since they were computed with the old\n                        // kernel matrix\n                        k = remove_row(k,0);\n                        a = K_inv*k;\n                        delta = kx - trans(k)*a;\n                    }\n\n                    // add x to the dictionary\n                    dictionary.push_back(x);\n\n                    // update K_inv by computing the new one in the temp matrix (equation 3.14)\n                    matrix<scalar_type,0,0,mem_manager_type> temp(K_inv.nr()+1, K_inv.nc()+1);\n                    // update the middle part of the matrix\n                    set_subm(temp, get_rect(K_inv)) = K_inv + a*trans(a)/delta;\n                    // update the right column of the matrix\n                    set_subm(temp, 0, K_inv.nr(),K_inv.nr(),1) = -a/delta;\n                    // update the bottom row of the matrix\n                    set_subm(temp, K_inv.nr(), 0, 1, K_inv.nr()) = trans(-a/delta);\n                    // update the bottom right corner of the matrix\n                    temp(K_inv.nr(), K_inv.nc()) = 1/delta;\n                    // put temp into K_inv\n                    temp.swap(K_inv);\n\n\n\n\n                    // update K (the kernel matrix)\n                    temp.set_size(K.nr()+1, K.nc()+1);\n                    set_subm(temp, get_rect(K)) = K;\n                    // update the right column of the matrix\n                    set_subm(temp, 0, K.nr(),K.nr(),1) = k;\n                    // update the bottom row of the matrix\n                    set_subm(temp, K.nr(), 0, 1, K.nr()) = trans(k);\n                    temp(K.nr(), K.nc()) = kx;\n                    // put temp into K\n                    temp.swap(K);\n\n\n\n\n                    // Now update the P matrix (equation 3.15)\n                    temp.set_size(P.nr()+1, P.nc()+1);\n                    set_subm(temp, get_rect(P)) = P;\n                    // initialize the new sides of P \n                    set_rowm(temp,P.nr()) = 0;\n                    set_colm(temp,P.nr()) = 0;\n                    temp(P.nr(), P.nc()) = 1;\n                    temp.swap(P);\n\n                    // now update the alpha vector (equation 3.16)\n                    const scalar_type k_a = (y-trans(k)*mat(alpha))/delta;\n                    for (unsigned long i = 0; i < alpha.size(); ++i)\n                    {\n                        alpha[i] -= a(i)*k_a;\n                    }\n                    alpha.push_back(k_a);\n                }\n                else\n                {\n                    q = P*a/(1+trans(a)*P*a);\n\n                    // update P (equation 3.12)\n                    temp_matrix = trans(a)*P;\n                    P -= q*temp_matrix;\n\n                    // update the alpha vector (equation 3.13)\n                    const scalar_type k_a = y-trans(k)*mat(alpha);\n                    for (unsigned long i = 0; i < alpha.size(); ++i)\n                    {\n                        alpha[i] += (K_inv*q*k_a)(i);\n                    }\n                }\n            }\n        }\n\n        void swap (\n            krls& item\n        )\n        {\n            exchange(kernel, item.kernel);\n            dictionary.swap(item.dictionary);\n            alpha.swap(item.alpha);\n            K_inv.swap(item.K_inv);\n            K.swap(item.K);\n            P.swap(item.P);\n            exchange(my_tolerance, item.my_tolerance);\n            q.swap(item.q);\n            a.swap(item.a);\n            k.swap(item.k);\n            temp_matrix.swap(item.temp_matrix);\n            exchange(my_max_dictionary_size, item.my_max_dictionary_size);\n        }\n\n        unsigned long dictionary_size (\n        ) const { return dictionary.size(); }\n\n        decision_function<kernel_type> get_decision_function (\n        ) const\n        {\n            return decision_function<kernel_type>(\n                mat(alpha),\n                -sum(mat(alpha))*tau, \n                kernel,\n                mat(dictionary)\n            );\n        }\n\n        friend void serialize(const krls& item, std::ostream& out)\n        {\n            serialize(item.kernel, out);\n            serialize(item.dictionary, out);\n            serialize(item.alpha, out);\n            serialize(item.K_inv, out);\n            serialize(item.K, out);\n            serialize(item.P, out);\n            serialize(item.my_tolerance, out);\n            serialize(item.my_max_dictionary_size, out);\n        }\n\n        friend void deserialize(krls& item, std::istream& in)\n        {\n            deserialize(item.kernel, in);\n            deserialize(item.dictionary, in);\n            deserialize(item.alpha, in);\n            deserialize(item.K_inv, in);\n            deserialize(item.K, in);\n            deserialize(item.P, in);\n            deserialize(item.my_tolerance, in);\n            deserialize(item.my_max_dictionary_size, in);\n        }\n\n    private:\n\n        inline scalar_type kern (const sample_type& m1, const sample_type& m2) const\n        { \n            return kernel(m1,m2) + tau;\n        }\n\n        void remove_dictionary_vector (\n            long i\n        )\n        /*!\n            requires\n                - 0 <= i < dictionary.size()\n            ensures\n                - #dictionary.size() == dictionary.size() - 1\n                - #alpha.size() == alpha.size() - 1\n                - updates the K_inv matrix so that it is still a proper inverse of the\n                  kernel matrix\n                - also removes the necessary row and column from the K matrix\n                - uses the this->a variable so after this function runs that variable\n                  will contain a different value.  \n        !*/\n        {\n            // remove the dictionary vector \n            dictionary.erase(dictionary.begin()+i);\n\n            // remove the i'th vector from the inverse kernel matrix.  This formula is basically\n            // just the reverse of the way K_inv is updated by equation 3.14 during normal training.\n            K_inv = removerc(K_inv,i,i) - remove_row(colm(K_inv,i)/K_inv(i,i),i)*remove_col(rowm(K_inv,i),i);\n\n            // now compute the updated alpha values to take account that we just removed one of \n            // our dictionary vectors\n            a = (K_inv*remove_row(K,i)*mat(alpha));\n\n            // now copy over the new alpha values\n            alpha.resize(alpha.size()-1);\n            for (unsigned long k = 0; k < alpha.size(); ++k)\n            {\n                alpha[k] = a(k);\n            }\n\n            // update the P matrix as well\n            P = removerc(P,i,i);\n\n            // update the K matrix as well\n            K = removerc(K,i,i);\n        }\n\n\n        kernel_type kernel;\n\n        typedef std_allocator<sample_type, mem_manager_type> alloc_sample_type;\n        typedef std_allocator<scalar_type, mem_manager_type> alloc_scalar_type;\n        typedef std::vector<sample_type,alloc_sample_type> dictionary_vector_type;\n        typedef std::vector<scalar_type,alloc_scalar_type> alpha_vector_type;\n\n        dictionary_vector_type dictionary;\n        alpha_vector_type alpha;\n\n        matrix<scalar_type,0,0,mem_manager_type> K_inv;\n        matrix<scalar_type,0,0,mem_manager_type> K;\n        matrix<scalar_type,0,0,mem_manager_type> P;\n\n        scalar_type my_tolerance;\n        unsigned long my_max_dictionary_size;\n\n\n        // temp variables here just so we don't have to reconstruct them over and over.  Thus, \n        // they aren't really part of the state of this object.\n        matrix<scalar_type,0,1,mem_manager_type> q;\n        matrix<scalar_type,0,1,mem_manager_type> a;\n        matrix<scalar_type,0,1,mem_manager_type> k;\n        matrix<scalar_type,1,0,mem_manager_type> temp_matrix;\n\n        const static scalar_type tau;\n\n    };\n\n    template <typename kernel_type>\n    const typename kernel_type::scalar_type krls<kernel_type>::tau = static_cast<typename kernel_type::scalar_type>(0.01);\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    void swap(krls<kernel_type>& a, krls<kernel_type>& b)\n    { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KRLs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/krls_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_KRLs_ABSTRACT_\n#ifdef DLIB_KRLs_ABSTRACT_\n\n#include <cmath>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename kernel_type\n        >\n    class krls\n    {\n        /*!\n            REQUIREMENTS ON kernel_type\n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            INITIAL VALUE\n                - dictionary_size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This is an implementation of the kernel recursive least squares algorithm \n                described in the paper:\n                    The Kernel Recursive Least Squares Algorithm by Yaakov Engel.\n\n                The long and short of this algorithm is that it is an online kernel based \n                regression algorithm.  You give it samples (x,y) and it learns the function\n                f(x) == y.  For a detailed description of the algorithm read the above paper.\n\n                Also note that the algorithm internally keeps a set of \"dictionary vectors\" \n                that are used to represent the regression function.  You can force the \n                algorithm to use no more than a set number of vectors by setting \n                the 3rd constructor argument to whatever you want.  However, note that \n                doing this causes the algorithm to bias it's results towards more \n                recent training examples.  \n        !*/\n\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n\n        explicit krls (\n            const kernel_type& kernel_, \n            scalar_type tolerance_ = 0.001,\n            unsigned long max_dictionary_size_ = 1000000\n        );\n        /*!\n            requires\n                - tolerance >= 0\n            ensures\n                - this object is properly initialized\n                - #tolerance() == tolerance_\n                - #get_decision_function().kernel_function == kernel_\n                  (i.e. this object will use the given kernel function)\n                - #get_kernel() == kernel_\n                - #max_dictionary_size() == max_dictionary_size_\n        !*/\n\n        scalar_type tolerance(\n        ) const;\n        /*!\n            ensures\n                - returns the tolerance to use for the approximately linearly dependent \n                  test in the KRLS algorithm.  This is a number which governs how \n                  accurately this object will approximate the decision function it is \n                  learning.  Smaller values generally result in a more accurate \n                  estimate while also resulting in a bigger set of dictionary vectors in \n                  the learned decision function.  Bigger tolerances values result in a \n                  less accurate decision function but also in less dictionary vectors.\n                - The exact meaning of the tolerance parameter is the following: \n                  Imagine that we have an empirical_kernel_map that contains all\n                  the current dictionary vectors.  Then the tolerance is the minimum\n                  projection error (as given by empirical_kernel_map::project()) required\n                  to cause us to include a new vector in the dictionary.  So each time\n                  you call train() the krls object basically just computes the projection\n                  error for that new sample and if it is larger than the tolerance\n                  then that new sample becomes part of the dictionary.\n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the kernel used by this object\n        !*/\n\n        unsigned long max_dictionary_size(\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of dictionary vectors this object\n                  will use at a time.  That is, dictionary_size() will never be\n                  greater than max_dictionary_size().\n        !*/\n\n        void clear_dictionary (\n        );\n        /*!\n            ensures\n                - clears out all learned data \n                  (e.g. #get_decision_function().basis_vectors.size() == 0)\n        !*/\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const;\n        /*!\n            ensures\n                - returns the current y estimate for the given x\n        !*/\n\n        void train (\n            const sample_type& x,\n            scalar_type y\n        );\n        /*!\n            ensures\n                - trains this object that the given x should be mapped to the given y\n                - if (dictionary_size() == max_dictionary_size() and training\n                  would add another dictionary vector to this object) then\n                    - discards the oldest dictionary vector so that we can still\n                      add a new one and remain below the max number of dictionary\n                      vectors.\n        !*/\n\n        void swap (\n            krls& item\n        );\n        /*!\n            ensures\n                - swaps *this with item\n        !*/\n\n        unsigned long dictionary_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of vectors in the dictionary.  That is,\n                  returns a number equal to get_decision_function().basis_vectors.size()\n        !*/\n\n        decision_function<kernel_type> get_decision_function (\n        ) const;\n        /*!\n            ensures\n                - returns a decision function F that represents the function learned\n                  by this object so far.  I.e. it is the case that:\n                    - for all x: F(x) == (*this)(x)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type\n        >\n    void swap(\n        krls<kernel_type>& a, \n        krls<kernel_type>& b\n    )\n    { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename kernel_type\n        >\n    void serialize (\n        const krls<kernel_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for krls objects\n    !*/\n\n    template <\n        typename kernel_type \n        >\n    void deserialize (\n        krls<kernel_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for krls objects\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_KRLs_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/krr_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_KRR_TRAInER_Hh_\n#define DLIB_KRR_TRAInER_Hh_\n\n#include \"../algs.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"empirical_kernel_map.h\"\n#include \"linearly_independent_subset_finder.h\"\n#include \"../statistics.h\"\n#include \"rr_trainer.h\"\n#include \"krr_trainer_abstract.h\"\n#include <vector>\n#include <iostream>\n\nnamespace dlib\n{\n    template <\n        typename K \n        >\n    class krr_trainer\n    {\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        krr_trainer (\n        ) :\n            verbose(false),\n            max_basis_size(400),\n            ekm_stale(true)\n        {\n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n            trainer.be_verbose();\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n            trainer.be_quiet();\n        }\n\n        void use_regression_loss_for_loo_cv (\n        )\n        {\n            trainer.use_regression_loss_for_loo_cv();\n        }\n\n        void use_classification_loss_for_loo_cv (\n        )\n        {\n            trainer.use_classification_loss_for_loo_cv();\n        }\n\n        bool will_use_regression_loss_for_loo_cv (\n        ) const\n        {\n            return trainer.will_use_regression_loss_for_loo_cv();\n        }\n\n        const kernel_type get_kernel (\n        ) const\n        {\n            return kern;\n        }\n\n        void set_kernel (\n            const kernel_type& k\n        )\n        {\n            kern = k;\n        }\n\n        template <typename T>\n        void set_basis (\n            const T& basis_samples\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(basis_samples.size() > 0 && is_vector(mat(basis_samples)),\n                \"\\tvoid krr_trainer::set_basis(basis_samples)\"\n                << \"\\n\\t You have to give a non-empty set of basis_samples and it must be a vector\"\n                << \"\\n\\t basis_samples.size():                       \" << basis_samples.size() \n                << \"\\n\\t is_vector(mat(basis_samples)): \" << is_vector(mat(basis_samples)) \n                << \"\\n\\t this: \" << this\n                );\n\n            basis = mat(basis_samples);\n            ekm_stale = true;\n        }\n\n        bool basis_loaded (\n        ) const\n        {\n            return (basis.size() != 0);\n        }\n\n        void clear_basis (\n        )\n        {\n            basis.set_size(0);\n            ekm.clear();\n            ekm_stale = true;\n        }\n\n        unsigned long get_max_basis_size (\n        ) const\n        {\n            return max_basis_size;\n        }\n\n        void set_max_basis_size (\n            unsigned long max_basis_size_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(max_basis_size_ > 0,\n                \"\\t void krr_trainer::set_max_basis_size()\"\n                << \"\\n\\t max_basis_size_ must be greater than 0\"\n                << \"\\n\\t max_basis_size_: \" << max_basis_size_ \n                << \"\\n\\t this:            \" << this\n                );\n\n            max_basis_size = max_basis_size_;\n        }\n\n        void set_lambda (\n            scalar_type lambda_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(lambda_ >= 0,\n                \"\\t void krr_trainer::set_lambda()\"\n                << \"\\n\\t lambda must be greater than or equal to 0\"\n                << \"\\n\\t lambda_: \" << lambda_\n                << \"\\n\\t this:   \" << this\n                );\n\n            trainer.set_lambda(lambda_);\n        }\n\n        const scalar_type get_lambda (\n        ) const\n        {\n            return trainer.get_lambda();\n        }\n\n        template <typename EXP>\n        void set_search_lambdas (\n            const matrix_exp<EXP>& lambdas\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_vector(lambdas) && lambdas.size() > 0 && min(lambdas) > 0,\n                \"\\t void krr_trainer::set_search_lambdas()\"\n                << \"\\n\\t lambdas must be a non-empty vector of values\"\n                << \"\\n\\t is_vector(lambdas): \" << is_vector(lambdas) \n                << \"\\n\\t lambdas.size():     \" << lambdas.size()\n                << \"\\n\\t min(lambdas):       \" << min(lambdas) \n                << \"\\n\\t this:   \" << this\n                );\n\n            trainer.set_search_lambdas(lambdas);\n        }\n\n        const matrix<scalar_type,0,0,mem_manager_type>& get_search_lambdas (\n        ) const\n        {\n            return trainer.get_search_lambdas();\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            std::vector<scalar_type> temp;\n            scalar_type temp2;\n            return do_train(mat(x), mat(y), false, temp, temp2);\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            std::vector<scalar_type>& loo_values\n        ) const\n        {\n            scalar_type temp;\n            return do_train(mat(x), mat(y), true, loo_values, temp);\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            std::vector<scalar_type>& loo_values,\n            scalar_type& lambda_used \n        ) const\n        {\n            return do_train(mat(x), mat(y), true, loo_values, lambda_used);\n        }\n\n\n    private:\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            const bool output_loo_values,\n            std::vector<scalar_type>& loo_values,\n            scalar_type& the_lambda\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(x,y),\n                \"\\t decision_function krr_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t is_vector(x): \" << is_vector(x)\n                << \"\\n\\t is_vector(y): \" << is_vector(y)\n                << \"\\n\\t x.size():     \" << x.size() \n                << \"\\n\\t y.size():     \" << y.size() \n                );\n\n#ifdef ENABLE_ASSERTS\n            if (get_lambda() == 0 && will_use_regression_loss_for_loo_cv() == false)\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT(is_binary_classification_problem(x,y),\n                    \"\\t decision_function krr_trainer::train(x,y)\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    );\n            }\n#endif\n\n            // The first thing we do is make sure we have an appropriate ekm ready for use below.\n            if (basis_loaded())\n            {\n                if (ekm_stale)\n                {\n                    ekm.load(kern, basis);\n                    ekm_stale = false;\n                }\n            }\n            else\n            {\n                linearly_independent_subset_finder<kernel_type> lisf(kern, max_basis_size);\n                fill_lisf(lisf, x);\n                ekm.load(lisf);\n            }\n\n            if (verbose)\n            {\n                std::cout << \"\\nNumber of basis vectors used: \" << ekm.out_vector_size() << std::endl;\n            }\n\n            typedef matrix<scalar_type,0,1,mem_manager_type> column_matrix_type;\n\n            running_stats<scalar_type> rs;\n\n            // Now we project all the x samples into kernel space using our EKM \n            matrix<column_matrix_type,0,1,mem_manager_type > proj_x;\n            proj_x.set_size(x.size());\n            for (long i = 0; i < proj_x.size(); ++i)\n            {\n                scalar_type err;\n                // Note that we also append a 1 to the end of the vectors because this is\n                // a convenient way of dealing with the bias term later on.\n                if (verbose == false)\n                {\n                    proj_x(i) = ekm.project(x(i));\n                }\n                else\n                {\n                    proj_x(i) = ekm.project(x(i),err);\n                    rs.add(err);\n                }\n            }\n\n            if (verbose)\n            {\n                std::cout << \"Mean EKM projection error:                  \" << rs.mean() << std::endl;\n                std::cout << \"Standard deviation of EKM projection error: \" << rs.stddev() << std::endl;\n            }\n\n\n            decision_function<linear_kernel<matrix<scalar_type,0,0,mem_manager_type> > > lin_df;\n\n            if (output_loo_values)\n                lin_df = trainer.train(proj_x,y, loo_values, the_lambda);\n            else\n                lin_df = trainer.train(proj_x,y);\n\n            // convert the linear decision function into a kernelized one.\n            decision_function<kernel_type> df;\n            df = ekm.convert_to_decision_function(lin_df.basis_vectors(0));\n            df.b = lin_df.b; \n\n            // If we used an automatically derived basis then there isn't any point in\n            // keeping the ekm around.  So free its memory.\n            if (basis_loaded() == false)\n            {\n                ekm.clear();\n            }\n\n            return df;\n        }\n\n\n        /*!\n            CONVENTION\n                - if (ekm_stale) then\n                    - kern or basis have changed since the last time\n                      they were loaded into the ekm\n\n                - get_lambda() == trainer.get_lambda()\n                - get_kernel() == kern\n                - get_max_basis_size() == max_basis_size\n                - will_use_regression_loss_for_loo_cv() == trainer.will_use_regression_loss_for_loo_cv() \n                - get_search_lambdas() == trainer.get_search_lambdas() \n\n                - basis_loaded() == (basis.size() != 0)\n        !*/\n\n        rr_trainer<linear_kernel<matrix<scalar_type,0,0,mem_manager_type> > > trainer;\n\n        bool verbose;\n\n\n        kernel_type kern;\n        unsigned long max_basis_size;\n\n        matrix<sample_type,0,1,mem_manager_type> basis;\n        mutable empirical_kernel_map<kernel_type> ekm;\n        mutable bool ekm_stale; \n\n    }; \n\n}\n\n#endif // DLIB_KRR_TRAInER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/krr_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_KRR_TRAInER_ABSTRACT_Hh_\n#ifdef DLIB_KRR_TRAInER_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"empirical_kernel_map_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename K \n        >\n    class krr_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            INITIAL VALUE\n                - get_lambda() == 0\n                - basis_loaded() == false\n                - get_max_basis_size() == 400\n                - will_use_regression_loss_for_loo_cv() == true\n                - get_search_lambdas() == logspace(-9, 2, 50) \n                - this object will not be verbose unless be_verbose() is called\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a tool for performing kernel ridge regression \n                (This basic algorithm is also known my many other names, e.g. regularized \n                least squares or least squares SVM). \n\n                The exact definition of what this algorithm does is this:\n                    Find w and b that minimizes the following (x_i are input samples and y_i are target values):\n                        lambda*dot(w,w) + sum_over_i( (f(x_i) - y_i)^2 )\n                        where f(x) == dot(x,w) - b\n\n                    Except the dot products are replaced by kernel functions.  So this\n                    algorithm is just regular old least squares regression but with the\n                    addition of a regularization term which encourages small w and the\n                    application of the kernel trick.\n\n\n                It is implemented using the empirical_kernel_map and thus allows you \n                to run the algorithm on large datasets and obtain sparse outputs.  It is also\n                capable of estimating the lambda parameter using leave-one-out cross-validation.\n\n\n                The leave-one-out cross-validation implementation is based on the techniques\n                discussed in this paper:\n                    Notes on Regularized Least Squares by Ryan M. Rifkin and Ross A. Lippert.\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        krr_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used.\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        const kernel_type get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object\n        !*/\n\n        void set_kernel (\n            const kernel_type& k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k \n        !*/\n\n        template <typename T>\n        void set_basis (\n            const T& basis_samples\n        );\n        /*!\n            requires\n                - T must be a dlib::matrix type or something convertible to a matrix via mat()\n                  (e.g. a std::vector)\n                - is_vector(basis_samples) == true\n                - basis_samples.size() > 0\n                - get_kernel() must be capable of operating on the elements of basis_samples.  That is,\n                  expressions such as get_kernel()(basis_samples(0), basis_samples(0)) should make sense.\n            ensures\n                - #basis_loaded() == true\n                - training will be carried out in the span of the given basis_samples\n        !*/\n\n        bool basis_loaded (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object has been loaded with user supplied basis vectors and false otherwise.\n        !*/\n\n        void clear_basis (\n        );\n        /*!\n            ensures\n                - #basis_loaded() == false\n        !*/\n\n        unsigned long get_max_basis_size (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of basis vectors this object is allowed\n                  to use.  This parameter only matters when the user has not supplied \n                  a basis via set_basis().\n        !*/\n\n        void set_max_basis_size (\n            unsigned long max_basis_size\n        );\n        /*!\n            requires\n                - max_basis_size > 0\n            ensures\n                - #get_max_basis_size() == max_basis_size \n        !*/\n\n        void set_lambda (\n            scalar_type lambda \n        );\n        /*!\n            requires\n                - lambda >= 0\n            ensures\n                - #get_lambda() == lambda \n        !*/\n\n        const scalar_type get_lambda (\n        ) const;\n        /*!\n            ensures\n                - returns the regularization parameter.  It is the parameter that \n                  determines the trade off between trying to fit the training data \n                  exactly or allowing more errors but hopefully improving the \n                  generalization ability of the resulting function.  Smaller values \n                  encourage exact fitting while larger values of lambda may encourage \n                  better generalization. \n\n                  Note that a lambda of 0 has a special meaning.  It indicates to this\n                  object that it should automatically determine an appropriate lambda\n                  value.  This is done using leave-one-out cross-validation.\n        !*/\n\n        void use_regression_loss_for_loo_cv (\n        );\n        /*!\n            ensures\n                - #will_use_regression_loss_for_loo_cv() == true\n        !*/\n\n        void use_classification_loss_for_loo_cv (\n        );\n        /*!\n            ensures\n                - #will_use_regression_loss_for_loo_cv() == false \n        !*/\n\n        bool will_use_regression_loss_for_loo_cv (\n        ) const;\n        /*!\n            ensures\n                - returns true if the automatic lambda estimation will attempt to estimate a lambda\n                  appropriate for a regression task.  Otherwise it will try and find one which\n                  minimizes the number of classification errors.\n        !*/\n\n        template <typename EXP>\n        void set_search_lambdas (\n            const matrix_exp<EXP>& lambdas\n        );\n        /*!\n            requires\n                - is_vector(lambdas) == true\n                - lambdas.size() > 0\n                - min(lambdas) > 0\n                - lambdas must contain floating point numbers\n            ensures\n                - #get_search_lambdas() == lambdas\n        !*/\n\n        const matrix<scalar_type,0,0,mem_manager_type>& get_search_lambdas (\n        ) const;\n        /*!\n            ensures\n                - returns a matrix M such that:\n                    - is_vector(M) == true\n                    - M == a list of all the lambda values which will be tried when performing\n                      LOO cross-validation for determining the best lambda. \n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n                - is_learning_problem(x,y) == true\n                - if (get_lambda() == 0 && will_use_regression_loss_for_loo_cv() == false) then\n                    - is_binary_classification_problem(x,y) == true\n                      (i.e. if you want this algorithm to estimate a lambda appropriate for\n                      classification functions then you had better give a valid classification\n                      problem)\n            ensures\n                - performs kernel ridge regression given the training samples in x and target values in y.  \n                - returns a decision_function F with the following properties:\n                    - F(new_x) == predicted y value\n\n                - if (basis_loaded()) then\n                    - training will be carried out in the span of the user supplied basis vectors\n                - else\n                    - this object will attempt to automatically select an appropriate basis\n\n                - if (get_lambda() == 0) then\n                    - This object will perform internal leave-one-out cross-validation to determine an \n                      appropriate lambda automatically.  It will compute the LOO error for each lambda\n                      in get_search_lambdas() and select the best one.\n                    - if (will_use_regression_loss_for_loo_cv()) then\n                        - the lambda selected will be the one that minimizes the mean squared error.\n                    - else\n                        - the lambda selected will be the one that minimizes the number classification \n                          mistakes.  We say a point is classified correctly if the output of the\n                          decision_function has the same sign as its label.\n                    - #get_lambda() == 0\n                      (i.e. we don't change the get_lambda() value.  If you want to know what the\n                      automatically selected lambda value was then call the version of train()\n                      defined below)\n                - else\n                    - The user supplied value of get_lambda() will be used to perform the kernel\n                      ridge regression.\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            std::vector<scalar_type>& loo_values\n        ) const;\n        /*!\n            requires\n                - all the requirements for train(x,y) must be satisfied\n            ensures\n                - returns train(x,y)\n                  (i.e. executes train(x,y) and returns its result)\n                - #loo_values.size() == y.size()\n                - for all valid i:\n                    - #loo_values[i] == leave-one-out prediction for the value of y(i) based \n                      on all the training samples other than (x(i),y(i)).\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            std::vector<scalar_type>& loo_values,\n            scalar_type& lambda_used \n        ) const;\n        /*!\n            requires\n                - all the requirements for train(x,y) must be satisfied\n            ensures\n                - returns train(x,y)\n                  (i.e. executes train(x,y) and returns its result)\n                - #loo_values.size() == y.size()\n                - for all valid i:\n                    - #loo_values[i] == leave-one-out prediction for the value of y(i) based \n                      on all the training samples other than (x(i),y(i)).\n                - #lambda_used == the value of lambda used to generate the \n                  decision_function.  Note that this lambda value is always \n                  equal to get_lambda() if get_lambda() isn't 0.\n        !*/\n\n    }; \n\n}\n\n#endif // DLIB_KRR_TRAInER_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/linearly_independent_subset_finder.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_LISfh_\n#define DLIB_LISfh_\n\n#include <vector>\n\n#include \"linearly_independent_subset_finder_abstract.h\"\n#include \"../matrix.h\"\n#include \"function.h\"\n#include \"../std_allocator.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../is_kind.h\"\n#include \"../string.h\"\n#include \"../rand.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    class linearly_independent_subset_finder\n    {\n        /*!\n            INITIAL VALUE\n                - min_strength == 0\n                - min_vect_idx == 0\n                - K_inv.size() == 0\n                - K.size() == 0\n                - dictionary.size() == 0\n\n            CONVENTION\n                - max_dictionary_size() == my_max_dictionary_size\n                - get_kernel() == kernel\n                - minimum_tolerance() == min_tolerance\n                - size() == dictionary.size()\n                - get_dictionary() == mat(dictionary)\n                - K.nr() == dictionary.size()\n                - K.nc() == dictionary.size()\n                - for all valid r,c:\n                    - K(r,c) == kernel(dictionary[r], dictionary[c])\n                - K_inv == inv(K)\n\n                - if (dictionary.size() == my_max_dictionary_size) then\n                    - for all valid 0 < i < dictionary.size():\n                        - Let STRENGTHS[i] == the delta you would get for dictionary[i] (i.e. Approximately \n                          Linearly Dependent value) if you removed dictionary[i] from this object and then \n                          tried to add it back in.\n                        - min_strength == the minimum value from STRENGTHS\n                        - min_vect_idx == the index of the element in STRENGTHS with the smallest value\n        !*/\n\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::sample_type type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        linearly_independent_subset_finder (\n        ) : \n            my_max_dictionary_size(100),\n            min_tolerance(0.001)\n        {\n            clear_dictionary();\n        }\n\n        linearly_independent_subset_finder (\n            const kernel_type& kernel_, \n            unsigned long max_dictionary_size_,\n            scalar_type min_tolerance_ = 0.001\n        ) : \n            kernel(kernel_), \n            my_max_dictionary_size(max_dictionary_size_),\n            min_tolerance(min_tolerance_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(min_tolerance_ > 0 && max_dictionary_size_ > 1,\n                \"\\tlinearly_independent_subset_finder()\"\n                << \"\\n\\tinvalid argument to constructor\"\n                << \"\\n\\tmin_tolerance_: \" << min_tolerance_\n                << \"\\n\\tmax_dictionary_size_: \" << max_dictionary_size_\n                << \"\\n\\tthis:           \" << this\n                );\n            clear_dictionary();\n        }\n\n        unsigned long max_dictionary_size() const\n        {\n            return my_max_dictionary_size;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel;\n        }\n\n        scalar_type minimum_tolerance(\n        ) const\n        {\n            return min_tolerance;\n        }\n\n        void set_minimum_tolerance (\n            scalar_type min_tol\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(min_tol > 0,\n                \"\\tlinearly_independent_subset_finder::set_minimum_tolerance()\"\n                << \"\\n\\tinvalid argument to this function\"\n                << \"\\n\\tmin_tol: \" << min_tol\n                << \"\\n\\tthis:    \" << this\n                );\n            min_tolerance = min_tol;\n        }\n\n        void clear_dictionary ()\n        {\n            dictionary.clear();\n            min_strength = 0;\n            min_vect_idx = 0;\n\n            K_inv.set_size(0,0);\n            K.set_size(0,0);\n        }\n\n        scalar_type projection_error (\n            const sample_type& x\n        ) const\n        {\n            const scalar_type kx = kernel(x,x);\n            if (dictionary.size() == 0)\n            {\n                return kx;\n            }\n            else\n            {\n                // fill in k\n                k.set_size(dictionary.size());\n                for (long r = 0; r < k.nr(); ++r)\n                    k(r) = kernel(x,dictionary[r]);\n\n                // compute the error we would have if we approximated the new x sample\n                // with the dictionary.  That is, do the ALD test from the KRLS paper.\n                a = K_inv*k;\n                scalar_type delta = kx - trans(k)*a;\n\n                return delta;\n            }\n        }\n\n        bool add (\n            const sample_type& x\n        )\n        {\n            const scalar_type kx = kernel(x,x);\n            if (dictionary.size() == 0)\n            {\n                // just ignore this sample if it is the zero vector (or really close to being zero)\n                if (std::abs(kx) > std::numeric_limits<scalar_type>::epsilon())\n                {\n                    // set initial state since this is the first sample we have seen\n                    K_inv.set_size(1,1);\n                    K_inv(0,0) = 1/kx;\n\n                    K.set_size(1,1);\n                    K(0,0) = kx;\n\n                    dictionary.push_back(x);\n                    return true;\n                }\n                return false;\n            }\n            else\n            {\n                // fill in k\n                k.set_size(dictionary.size());\n                for (long r = 0; r < k.nr(); ++r)\n                    k(r) = kernel(x,dictionary[r]);\n\n                // compute the error we would have if we approximated the new x sample\n                // with the dictionary.  That is, do the ALD test from the KRLS paper.\n                a = K_inv*k;\n                scalar_type delta = kx - trans(k)*a;\n\n                // if this new vector is approximately linearly independent of the vectors\n                // in our dictionary.  \n                if (delta > min_strength && delta > min_tolerance)\n                {\n                    if (dictionary.size() == my_max_dictionary_size)\n                    {\n                        // if we have never computed the min_strength then we should compute it \n                        if (min_strength == 0)\n                            recompute_min_strength();\n\n                        const long i = min_vect_idx;\n\n                        // replace the min strength vector with x.  Put the new vector onto the end of\n                        // dictionary and remove the vector at position i.\n                        dictionary.erase(dictionary.begin()+i);\n                        dictionary.push_back(x);\n\n                        // compute reduced K_inv.\n                        // Remove the i'th vector from the inverse kernel matrix.  This formula is basically\n                        // just the reverse of the way K_inv is updated by equation 3.14 below.\n                        temp = removerc(K_inv,i,i) - remove_row(colm(K_inv,i)/K_inv(i,i),i)*remove_col(rowm(K_inv,i),i);\n\n                        // recompute these guys since they were computed with the old\n                        // kernel matrix\n                        k2 = remove_row(k,i);\n                        a2 = temp*k2;\n                        delta = kx - trans(k2)*a2;\n\n                        // now update temp with the new dictionary vector\n                        // update the middle part of the matrix\n                        set_subm(K_inv, get_rect(temp)) = temp + a2*trans(a2)/delta;\n                        // update the right column of the matrix\n                        set_subm(K_inv, 0, temp.nr(),temp.nr(),1) = -a2/delta;\n                        // update the bottom row of the matrix\n                        set_subm(K_inv, temp.nr(), 0, 1, temp.nr()) = trans(-a2/delta);\n                        // update the bottom right corner of the matrix\n                        K_inv(temp.nr(), temp.nc()) = 1/delta;\n\n                        // now update the kernel matrix K\n                        set_subm(K,get_rect(temp)) = removerc(K, i,i);\n                        set_subm(K, 0, K.nr()-1,K.nr()-1,1) = k2;\n                        // update the bottom row of the matrix\n                        set_subm(K, K.nr()-1, 0, 1, K.nr()-1) = trans(k2);\n                        K(K.nr()-1, K.nc()-1) = kx;\n\n                        // now we have to recompute the min_strength in this case\n                        recompute_min_strength();\n                    }\n                    else\n                    {\n                        // update K_inv by computing the new one in the temp matrix (equation 3.14 from Engel)\n                        temp.set_size(K_inv.nr()+1, K_inv.nc()+1);\n                        // update the middle part of the matrix\n                        set_subm(temp, get_rect(K_inv)) = K_inv + a*trans(a)/delta;\n                        // update the right column of the matrix\n                        set_subm(temp, 0, K_inv.nr(),K_inv.nr(),1) = -a/delta;\n                        // update the bottom row of the matrix\n                        set_subm(temp, K_inv.nr(), 0, 1, K_inv.nr()) = trans(-a/delta);\n                        // update the bottom right corner of the matrix\n                        temp(K_inv.nr(), K_inv.nc()) = 1/delta;\n                        // put temp into K_inv\n                        temp.swap(K_inv);\n\n\n                        // update K (the kernel matrix)\n                        temp.set_size(K.nr()+1, K.nc()+1);\n                        set_subm(temp, get_rect(K)) = K;\n                        // update the right column of the matrix\n                        set_subm(temp, 0, K.nr(),K.nr(),1) = k;\n                        // update the bottom row of the matrix\n                        set_subm(temp, K.nr(), 0, 1, K.nr()) = trans(k);\n                        temp(K.nr(), K.nc()) = kx;\n                        // put temp into K\n                        temp.swap(K);\n\n\n                        // add x to the dictionary\n                        dictionary.push_back(x);\n\n                    }\n                    return true;\n                }\n                else\n                {\n                    return false;\n                }\n            }\n        }\n\n        void swap (\n            linearly_independent_subset_finder& item\n        )\n        {\n            exchange(kernel, item.kernel);\n            dictionary.swap(item.dictionary);\n            exchange(min_strength, item.min_strength);\n            exchange(min_vect_idx, item.min_vect_idx);\n            K_inv.swap(item.K_inv);\n            K.swap(item.K);\n            exchange(my_max_dictionary_size, item.my_max_dictionary_size);\n            exchange(min_tolerance, item.min_tolerance);\n\n            // non-state temp members\n            a.swap(item.a);\n            k.swap(item.k);\n            a2.swap(item.a2);\n            k2.swap(item.k2);\n            temp.swap(item.temp);\n        }\n\n        unsigned long size (\n        ) const { return dictionary.size(); }\n\n        const matrix<sample_type,0,1,mem_manager_type> get_dictionary (\n        ) const\n        { \n            return mat(dictionary);\n        }\n\n        friend void serialize(const linearly_independent_subset_finder& item, std::ostream& out)\n        {\n            serialize(item.kernel, out);\n            serialize(item.dictionary, out);\n            serialize(item.min_strength, out);\n            serialize(item.min_vect_idx, out);\n            serialize(item.K_inv, out);\n            serialize(item.K, out);\n            serialize(item.my_max_dictionary_size, out);\n            serialize(item.min_tolerance, out);\n        }\n\n        friend void deserialize(linearly_independent_subset_finder& item, std::istream& in)\n        {\n            deserialize(item.kernel, in);\n            deserialize(item.dictionary, in);\n            deserialize(item.min_strength, in);\n            deserialize(item.min_vect_idx, in);\n            deserialize(item.K_inv, in);\n            deserialize(item.K, in);\n            deserialize(item.my_max_dictionary_size, in);\n            deserialize(item.min_tolerance, in);\n        }\n\n        const sample_type& operator[] (\n            unsigned long index\n        ) const\n        {\n            return dictionary[index];\n        }\n\n        const matrix<scalar_type,0,0,mem_manager_type>& get_kernel_matrix (\n        ) const\n        {\n            return K;\n        }\n\n        const matrix<scalar_type,0,0,mem_manager_type>& get_inv_kernel_marix (\n        ) const\n        {\n            return K_inv;\n        }\n\n    private:\n\n        typedef std_allocator<sample_type, mem_manager_type> alloc_sample_type;\n        typedef std_allocator<scalar_type, mem_manager_type> alloc_scalar_type;\n        typedef std::vector<sample_type,alloc_sample_type> dictionary_vector_type;\n        typedef std::vector<scalar_type,alloc_scalar_type> scalar_vector_type;\n\n        void recompute_min_strength (\n        )\n        /*!\n            ensures\n                - recomputes the min_strength and min_vect_idx values\n                  so that they are correct with respect to the CONVENTION\n        !*/\n        {\n            min_strength = std::numeric_limits<scalar_type>::max();\n\n            // here we loop over each dictionary vector and compute what its delta would be if\n            // we were to remove it from the dictionary and then try to add it back in.\n            for (unsigned long i = 0; i < dictionary.size(); ++i)\n            {\n                // compute a2 = K_inv*k but where dictionary vector i has been removed\n                a2 = (removerc(K_inv,i,i) - remove_row(colm(K_inv,i)/K_inv(i,i),i)*remove_col(rowm(K_inv,i),i)) *\n                    (remove_row(colm(K,i),i));\n                scalar_type delta = K(i,i) - trans(remove_row(colm(K,i),i))*a2;\n\n                if (delta < min_strength)\n                {\n                    min_strength = delta;\n                    min_vect_idx = i;\n                }\n            }\n        }\n\n\n        kernel_type kernel;\n        dictionary_vector_type dictionary;\n        scalar_type min_strength;\n        unsigned long min_vect_idx;\n\n        matrix<scalar_type,0,0,mem_manager_type> K_inv;\n        matrix<scalar_type,0,0,mem_manager_type> K;\n\n        unsigned long my_max_dictionary_size;\n        scalar_type min_tolerance;\n\n        // temp variables here just so we don't have to reconstruct them over and over.  Thus, \n        // they aren't really part of the state of this object.\n        mutable matrix<scalar_type,0,1,mem_manager_type> a, a2;\n        mutable matrix<scalar_type,0,1,mem_manager_type> k, k2;\n        mutable matrix<scalar_type,0,0,mem_manager_type> temp;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    void swap(linearly_independent_subset_finder<kernel_type>& a, linearly_independent_subset_finder<kernel_type>& b)\n    { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const matrix_op<op_array_to_mat<linearly_independent_subset_finder<T> > > mat (\n        const linearly_independent_subset_finder<T>& m \n    )\n    {\n        typedef op_array_to_mat<linearly_independent_subset_finder<T> > op;\n        return matrix_op<op>(op(m));\n    }\n\n// ----------------------------------------------------------------------------------------\n    namespace impl\n    {\n        template <\n            typename kernel_type,\n            typename vector_type,\n            typename rand_type\n            >\n        void fill_lisf (\n            linearly_independent_subset_finder<kernel_type>& lisf,\n            const vector_type& samples,\n            rand_type& rnd,\n            int sampling_size \n        )\n        {   \n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_vector(samples) && sampling_size > 0,\n                \"\\t void fill_lisf()\"\n                << \"\\n\\t invalid arguments to this function\"\n                << \"\\n\\t is_vector(samples): \" << is_vector(samples) \n                << \"\\n\\t sampling_size: \" << sampling_size\n                );\n\n            // no need to do anything if there aren't any samples\n            if (samples.size() == 0)\n                return;\n\n            typedef typename kernel_type::scalar_type scalar_type;\n\n            // Start out by guessing what a reasonable projection error tolerance is. We will use\n            // the biggest projection error we see in a small sample.\n            scalar_type tol = 0;\n            for (int i = 0; i < sampling_size; ++i)\n            {\n                const unsigned long idx = rnd.get_random_32bit_number()%samples.size();\n                const scalar_type temp = lisf.projection_error(samples(idx)); \n                if (temp > tol)\n                    tol = temp;\n            }\n\n            const scalar_type min_tol = lisf.minimum_tolerance();\n\n            // run many rounds of random sampling.  In each round we drop the tolerance lower.\n            while (tol >= min_tol && lisf.size() < lisf.max_dictionary_size())\n            {\n                tol *= 0.5;\n                lisf.set_minimum_tolerance(std::max(tol, min_tol));\n                int add_failures = 0;\n\n                // Keep picking random samples and adding them into the lisf.  Stop when we either\n                // fill it up or can't find any more samples with projection error larger than the\n                // current tolerance.\n                while (lisf.size() < lisf.max_dictionary_size() && add_failures < sampling_size) \n                {\n                    if (lisf.add(samples(rnd.get_random_32bit_number()%samples.size())) == false)\n                    {\n                        ++add_failures;\n                    }\n                }\n            }\n\n            // set this back to its original value\n            lisf.set_minimum_tolerance(min_tol);\n        }\n    }\n\n    template <\n        typename kernel_type,\n        typename vector_type\n        >\n    void fill_lisf (\n        linearly_independent_subset_finder<kernel_type>& lisf,\n        const vector_type& samples\n    )\n    {   \n        dlib::rand rnd;\n        impl::fill_lisf(lisf, mat(samples),rnd, 2000);\n    }\n\n    template <\n        typename kernel_type,\n        typename vector_type,\n        typename rand_type\n        >\n    typename enable_if<is_rand<rand_type> >::type fill_lisf (\n        linearly_independent_subset_finder<kernel_type>& lisf,\n        const vector_type& samples,\n        rand_type& rnd,\n        const int sampling_size = 2000\n    )\n    {   \n        impl::fill_lisf(lisf, mat(samples),rnd, sampling_size);\n    }\n\n    template <\n        typename kernel_type,\n        typename vector_type,\n        typename rand_type\n        >\n    typename disable_if<is_rand<rand_type> >::type fill_lisf (\n        linearly_independent_subset_finder<kernel_type>& lisf,\n        const vector_type& samples,\n        rand_type random_seed,\n        const int sampling_size = 2000\n    )\n    {   \n        dlib::rand rnd;\n        rnd.set_seed(cast_to_string(random_seed));\n        impl::fill_lisf(lisf, mat(samples), rnd, sampling_size);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LISfh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/linearly_independent_subset_finder_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_LISf_ABSTRACT_\n#ifdef DLIB_LISf_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename kernel_type\n        >\n    class linearly_independent_subset_finder\n    {\n        /*!\n            REQUIREMENTS ON kernel_type\n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            INITIAL VALUE\n                - size() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This is an implementation of an online algorithm for recursively finding a\n                set (aka dictionary) of linearly independent vectors in a kernel induced \n                feature space.  To use it you decide how large you would like the dictionary \n                to be and then you feed it sample points.  \n\n                The implementation uses the Approximately Linearly Dependent metric described \n                in the paper The Kernel Recursive Least Squares Algorithm by Yaakov Engel to \n                decide which points are more linearly independent than others.  The metric is \n                simply the squared distance between a test point and the subspace spanned by \n                the set of dictionary vectors.\n\n                Each time you present this object with a new sample point (via this->add()) \n                it calculates the projection distance and if it is sufficiently large then this \n                new point is included into the dictionary.  Note that this object can be configured \n                to have a maximum size.  Once the max dictionary size is reached each new point \n                kicks out a previous point.  This is done by removing the dictionary vector that \n                has the smallest projection distance onto the others.  That is, the \"least linearly \n                independent\" vector is removed to make room for the new one.\n        !*/\n\n    public:\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::sample_type type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        linearly_independent_subset_finder (\n        );\n        /*!\n            ensures\n                - #minimum_tolerance() == 0.001 \n                - this object is properly initialized\n                - #get_kernel() == kernel_type()  (i.e. whatever the default is for the supplied kernel) \n                - #max_dictionary_size() == 100 \n        !*/\n\n        linearly_independent_subset_finder (\n            const kernel_type& kernel_, \n            unsigned long max_dictionary_size_,\n            scalar_type min_tolerance = 0.001\n        );\n        /*!\n            requires\n                - min_tolerance > 0\n                - max_dictionary_size > 1\n            ensures\n                - #minimum_tolerance() == min_tolerance\n                - this object is properly initialized\n                - #get_kernel() == kernel_\n                - #max_dictionary_size() == max_dictionary_size_\n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the kernel used by this object\n        !*/\n\n        unsigned long max_dictionary_size(\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of dictionary vectors this object\n                  will accumulate.  That is, size() will never be\n                  greater than max_dictionary_size().\n        !*/\n\n        scalar_type minimum_tolerance(\n        ) const;\n        /*!\n            ensures\n                - returns the minimum projection error necessary to include a sample point\n                  into the dictionary.   \n        !*/\n\n        void set_minimum_tolerance (\n            scalar_type min_tolerance \n        );\n        /*!\n            requires\n                - min_tolerance > 0\n            ensures\n                - #minimum_tolerance() == min_tolerance\n        !*/\n\n        void clear_dictionary (\n        );\n        /*!\n            ensures\n                - clears out all the data (e.g. #size() == 0)\n        !*/\n\n        bool add (\n            const sample_type& x\n        );\n        /*!\n            ensures\n                - if (size() < max_dictionary_size() then\n                    - if (projection_error(x) > minimum_tolerance()) then \n                        - adds x into the dictionary\n                        - (*this)[#size()-1] == x\n                        - #size() == size() + 1\n                        - returns true\n                    - else\n                        - the dictionary is not changed\n                        - returns false\n                - else\n                    - #size() == size() \n                      (i.e. the number of vectors in this object doesn't change)\n                    - since the dictionary is full adding a new element means we have to \n                      remove one of the current ones.  So let proj_error[i] be equal to the \n                      projection error obtained when projecting dictionary vector (*this)[i] \n                      onto the other elements of the dictionary.  Then let min_proj_error \n                      be equal to the minimum value in proj_error.  The dictionary element\n                      with the minimum projection error is the \"least linearly independent\"\n                      vector in the dictionary and is the one which will be removed to make\n                      room for a new element.\n                    - if (projection_error(x) > minimum_tolerance() && projection_error(x) > min_proj_error)\n                        - the least linearly independent vector in this object is removed\n                        - adds x into the dictionary\n                        - (*this)[#size()-1] == x\n                        - returns true\n                    - else\n                        - the dictionary is not changed\n                        - returns false\n        !*/\n\n        scalar_type projection_error (\n            const sample_type& x\n        ) const;\n        /*!\n            ensures\n                - returns the squared distance between x and the subspace spanned by \n                  the set of dictionary vectors.  (e.g. this is the same number that\n                  gets returned by the empirical_kernel_map::project() function's \n                  projection_error argument when the ekm is loaded with the dictionary\n                  vectors.)\n                - Note that if the dictionary is empty then the return value is\n                  equal to get_kernel()(x,x).\n        !*/\n\n        void swap (\n            linearly_independent_subset_finder& item\n        );\n        /*!\n            ensures\n                - swaps *this with item\n        !*/\n\n        unsigned long size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of vectors in the dictionary.  \n        !*/\n\n        const sample_type& operator[] (\n            unsigned long index\n        ) const;\n        /*!\n            requires\n                - index < size()\n            ensures\n                - returns the index'th element in the set of linearly independent \n                  vectors contained in this object.\n        !*/\n\n        const matrix<sample_type,0,1,mem_manager_type> get_dictionary (\n        ) const;\n        /*!\n            ensures\n                - returns a column vector that contains all the dictionary\n                  vectors in this object.\n        !*/\n\n        const matrix<scalar_type,0,0,mem_manager_type>& get_kernel_matrix (\n        ) const;\n        /*!\n            ensures\n                - returns a matrix K such that:\n                    - K.nr() == K.nc() == size()\n                    - K == kernel_matrix(get_kernel(), get_dictionary())\n                      i.e. K == the kernel matrix for the dictionary vectors\n        !*/\n\n        const matrix<scalar_type,0,0,mem_manager_type>& get_inv_kernel_marix (\n        ) const;\n        /*!\n            ensures\n                - if (size() != 0)\n                    - returns inv(get_kernel_matrix())\n                - else\n                    - returns an empty matrix\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type\n        >\n    void swap(\n        linearly_independent_subset_finder<kernel_type>& a, \n        linearly_independent_subset_finder<kernel_type>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename kernel_type\n        >\n    void serialize (\n        const linearly_independent_subset_finder<kernel_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for linearly_independent_subset_finder objects\n    !*/\n\n    template <\n        typename kernel_type \n        >\n    void deserialize (\n        linearly_independent_subset_finder<kernel_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for linearly_independent_subset_finder objects\n    !*/\n\n    template <\n        typename T\n        >\n    const matrix_exp mat (\n        const linearly_independent_subset_finder<T>& m \n    );\n    /*!\n        ensures\n            - converts m into a matrix\n            - returns a matrix R such that:\n                - is_col_vector(R) == true \n                - R.size() == m.size()\n                - for all valid r:\n                  R(r) == m[r]\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename vector_type,\n        typename rand_type\n        >\n    void fill_lisf (\n        linearly_independent_subset_finder<kernel_type>& lisf,\n        const vector_type& samples,\n        rand_type& rnd,\n        int sampling_size = 2000\n    );\n    /*!\n        requires\n            - vector_type == a dlib::matrix or something convertible to one via \n              mat()\n            - is_vector(mat(samples)) == true\n            - rand_type == an implementation of rand/rand_kernel_abstract.h or a type\n              convertible to a string via cast_to_string()\n            - sampling_size > 0\n        ensures\n            - The purpose of this function is to fill lisf with points from samples.  It does\n              this by randomly sampling elements of samples until no more can be added.  The\n              precise stopping condition is when sampling_size additions to lisf have failed\n              or the max dictionary size has been reached.\n            - This function employs a random number generator.  If rand_type is a random \n              number generator then it uses the instance given.  Otherwise it uses cast_to_string(rnd)\n              to seed a new random number generator.\n    !*/\n\n    template <\n        typename kernel_type,\n        typename vector_type\n        >\n    void fill_lisf (\n        linearly_independent_subset_finder<kernel_type>& lisf,\n        const vector_type& samples\n    );\n    /*!\n        requires\n            - vector_type == a dlib::matrix or something convertible to one via \n              mat()\n            - is_vector(mat(samples)) == true\n        ensures\n            - performs fill_lisf(lisf, samples, default_rand_generator, 2000)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_LISf_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/multiclass_tools.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MULTICLASS_TOoLS_Hh_\n#define DLIB_MULTICLASS_TOoLS_Hh_\n\n#include \"multiclass_tools_abstract.h\"\n\n#include <vector>\n#include <set>\n#include \"../unordered_pair.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename label_type>\n    std::vector<label_type> select_all_distinct_labels (\n        const std::vector<label_type>& labels\n    )\n    {\n        std::set<label_type> temp;\n        temp.insert(labels.begin(), labels.end());\n        return std::vector<label_type>(temp.begin(), temp.end());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename label_type, typename U>\n    std::vector<unordered_pair<label_type> > find_missing_pairs (\n        const std::map<unordered_pair<label_type>,U>& bdfs \n    )\n    {\n        typedef std::map<unordered_pair<label_type>,U> map_type;\n\n        // find all the labels\n        std::set<label_type> temp;\n        for (typename map_type::const_iterator i = bdfs.begin(); i != bdfs.end(); ++i)\n        {\n            temp.insert(i->first.first);\n            temp.insert(i->first.second);\n        }\n\n        std::vector<unordered_pair<label_type> > missing_pairs;\n\n        // now make sure all label pairs are present\n        typename std::set<label_type>::const_iterator i, j;\n        for (i = temp.begin(); i != temp.end(); ++i)\n        {\n            for (j = i, ++j; j != temp.end(); ++j)\n            {\n                const unordered_pair<label_type> p(*i, *j);\n\n                if (bdfs.count(p) == 0)\n                    missing_pairs.push_back(p);\n            }\n        }\n\n        return missing_pairs;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MULTICLASS_TOoLS_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/multiclass_tools_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MULTICLASS_TOoLS_ABSTRACT_Hh_\n#ifdef DLIB_MULTICLASS_TOoLS_ABSTRACT_Hh_\n\n#include <vector>\n#include <map>\n#include \"../unordered_pair.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename label_type>\n    std::vector<label_type> select_all_distinct_labels (\n        const std::vector<label_type>& labels\n    );\n    /*!\n        ensures\n            - Determines all distinct values present in labels and stores them\n              into a sorted vector and returns it.  They are sorted in ascending \n              order.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename label_type, typename U>\n    std::vector<unordered_pair<label_type> > find_missing_pairs (\n        const std::map<unordered_pair<label_type>,U>& binary_decision_functions \n    );\n    /*!\n        ensures\n            - Let L denote the set of all label_type values present in binary_decision_functions.\n            - This function finds all the label pairs with both elements distinct and in L but\n              not also in binary_decision_functions.  All these missing pairs are stored\n              in a sorted vector and returned.  They are sorted in ascending order.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MULTICLASS_TOoLS_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/null_df.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_NULL_DECISION_FUnCTION_Hh_\n#define DLIB_NULL_DECISION_FUnCTION_Hh_\n\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct null_df\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a type used to represent an unused field in the list of template \n                arguments of the one_vs_one_decision_function and one_vs_all_decision_function \n                templates.  As such, null_df doesn't actually do anything.\n        !*/\n        template <typename T>\n        double operator() ( const T&) const { return 0; }\n    };\n\n    inline void serialize(const null_df&, std::ostream&) {}\n    inline void deserialize(null_df&, std::istream&) {}\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_NULL_DECISION_FUnCTION_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/null_trainer.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_NULL_TRAINERs_H_\n#define DLIB_NULL_TRAINERs_H_\n\n#include \"null_trainer_abstract.h\"\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dec_funct_type \n        >\n    class null_trainer_type\n    {\n    public:\n        typedef typename dec_funct_type::kernel_type kernel_type;\n        typedef typename dec_funct_type::scalar_type scalar_type;\n        typedef typename dec_funct_type::sample_type sample_type;\n        typedef typename dec_funct_type::mem_manager_type mem_manager_type;\n        typedef dec_funct_type trained_function_type;\n\n        null_trainer_type (\n        ){}\n\n        null_trainer_type (\n            const dec_funct_type& dec_funct_\n        ) : dec_funct(dec_funct_) {}\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const dec_funct_type& train (\n            const in_sample_vector_type& ,\n            const in_scalar_vector_type& \n        ) const { return dec_funct; }\n\n    private:\n        dec_funct_type dec_funct;\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dec_funct_type\n        >\n    const null_trainer_type<dec_funct_type> null_trainer (\n        const dec_funct_type& dec_funct\n    ) { return null_trainer_type<dec_funct_type>(dec_funct); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_NULL_TRAINERs_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/null_trainer_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_NULL_TRAINERs_ABSTRACT_\n#ifdef DLIB_NULL_TRAINERs_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dec_funct_type \n        >\n    class null_trainer_type\n    {\n        /*!\n            REQUIREMENTS ON dec_funct_type\n                dec_funct_type can be any copyable type that provides the needed \n                typedefs used below (e.g. kernel_type, scalar_type, etc.).\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple tool for turning a decision function \n                into a trainer object that always returns the original decision\n                function when you try to train with it.  \n\n                dlib contains a few \"training post processing\" algorithms (e.g. \n                reduced() and reduced2()).  These tools take in a trainer object,\n                tell it to perform training, and then they take the output decision\n                function and do some kind of post processing to it.  The null_trainer_type \n                object is useful because you can use it to run an already\n                learned decision function through the training post processing\n                algorithms by turning a decision function into a null_trainer_type\n                and then giving it to a post processor.  \n        !*/\n\n    public:\n        typedef typename dec_funct_type::kernel_type kernel_type;\n        typedef typename dec_funct_type::scalar_type scalar_type;\n        typedef typename dec_funct_type::sample_type sample_type;\n        typedef typename dec_funct_type::mem_manager_type mem_manager_type;\n        typedef dec_funct_type trained_function_type;\n\n        null_trainer_type (\n        );\n        /*!\n            ensures\n                - any call to this->train(x,y) will return a default initialized\n                  dec_funct_type object.\n        !*/\n\n        null_trainer_type (\n            const dec_funct_type& dec_funct\n        );\n        /*!\n            ensures\n                - any call to this->train(x,y) will always return a copy of\n                  the given dec_funct object.\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const dec_funct_type& train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the decision function object given to\n                  this object's constructor.\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dec_funct_type\n        >\n    const null_trainer_type<dec_funct_type> null_trainer (\n        const dec_funct_type& dec_funct\n    ) { return null_trainer_type<dec_funct_type>(dec_funct); }\n    /*!\n        ensures\n            - returns a null_trainer_type object that has been instantiated with \n              the given arguments.  That is, this function returns a null_trainer_type\n              trainer that will return a copy of the given dec_funct object every time \n              someone calls its train() function.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_NULL_TRAINERs_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/num_nonnegative_weights.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_NUM_NONNEGATIVE_WEIGHtS_Hh_\n#define DLIB_NUM_NONNEGATIVE_WEIGHtS_Hh_\n\n#include \"../enable_if.h\"\n\nnamespace dlib\n{\n\n    namespace impl2\n    {\n        template <\n            typename T,\n            unsigned long (T::*funct)()const\n            >\n        struct hnnf_helper\n        {\n            typedef char type;\n        };\n\n        template <typename T>\n        char has_num_nonnegative_weights_helper( typename hnnf_helper<T,&T::num_nonnegative_weights>::type = 0 ) { return 0;}\n\n        struct two_bytes\n        {\n            char a[2]; \n        };\n\n        template <typename T>\n        two_bytes has_num_nonnegative_weights_helper(int) { return two_bytes();}\n\n        template <typename T>\n        struct work_around_visual_studio_bug\n        {\n            const static unsigned long U = sizeof(has_num_nonnegative_weights_helper<T>('a'));\n        };\n\n\n        // This is a template to tell you if a feature_extractor has a num_nonnegative_weights function or not.\n        template <typename T, unsigned long U = work_around_visual_studio_bug<T>::U > \n        struct has_num_nonnegative_weights \n        {\n            static const bool value = false;\n        };\n\n        template <typename T>\n        struct has_num_nonnegative_weights <T,1>\n        {\n            static const bool value = true;\n        };\n\n\n    }\n\n    // call fe.num_nonnegative_weights() if it exists, otherwise return 0.\n    template <typename feature_extractor>\n    typename enable_if<impl2::has_num_nonnegative_weights<feature_extractor>,unsigned long>::type num_nonnegative_weights (\n    const feature_extractor& fe\n    )\n    {\n        return fe.num_nonnegative_weights();\n    }\n\n    template <typename feature_extractor>\n    typename disable_if<impl2::has_num_nonnegative_weights<feature_extractor>,unsigned long>::type num_nonnegative_weights (\n    const feature_extractor& /*fe*/\n    )\n    {\n        return 0;\n    }\n\n}\n\n#endif // DLIB_NUM_NONNEGATIVE_WEIGHtS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/one_vs_all_decision_function.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ONE_VS_ALL_DECISION_FUnCTION_Hh_\n#define DLIB_ONE_VS_ALL_DECISION_FUnCTION_Hh_\n\n#include \"one_vs_all_decision_function_abstract.h\"\n\n#include \"../serialize.h\"\n#include \"../type_safe_union.h\"\n#include <sstream>\n#include <map>\n#include \"../any.h\"\n#include \"null_df.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename one_vs_all_trainer,\n        typename DF1 = null_df, typename DF2 = null_df, typename DF3 = null_df,\n        typename DF4 = null_df, typename DF5 = null_df, typename DF6 = null_df,\n        typename DF7 = null_df, typename DF8 = null_df, typename DF9 = null_df,\n        typename DF10 = null_df\n        >\n    class one_vs_all_decision_function\n    {\n    public:\n\n        typedef typename one_vs_all_trainer::label_type result_type;\n        typedef typename one_vs_all_trainer::sample_type sample_type;\n        typedef typename one_vs_all_trainer::scalar_type scalar_type;\n        typedef typename one_vs_all_trainer::mem_manager_type mem_manager_type;\n\n        typedef std::map<result_type, any_decision_function<sample_type, scalar_type> > binary_function_table;\n\n        one_vs_all_decision_function() :num_classes(0) {}\n\n        explicit one_vs_all_decision_function(\n            const binary_function_table& dfs_\n        ) : dfs(dfs_)\n        {\n            num_classes = dfs.size();\n        }\n\n        const binary_function_table& get_binary_decision_functions (\n        ) const\n        {\n            return dfs;\n        }\n\n        const std::vector<result_type> get_labels (\n        ) const\n        {\n            std::vector<result_type> temp;\n            temp.reserve(dfs.size());\n            for (typename binary_function_table::const_iterator i = dfs.begin(); i != dfs.end(); ++i)\n            {\n                temp.push_back(i->first);\n            }\n            return temp;\n        }\n\n\n        template <\n            typename df1, typename df2, typename df3, typename df4, typename df5,\n            typename df6, typename df7, typename df8, typename df9, typename df10\n            >\n        one_vs_all_decision_function (\n            const one_vs_all_decision_function<one_vs_all_trainer, \n                                               df1, df2, df3, df4, df5,\n                                               df6, df7, df8, df9, df10>& item\n        ) : dfs(item.get_binary_decision_functions()), num_classes(item.number_of_classes()) {}\n\n        unsigned long number_of_classes (\n        ) const\n        {\n            return num_classes;\n        }\n\n        std::pair<result_type, scalar_type> predict (\n            const sample_type& sample\n        ) const\n        {\n            DLIB_ASSERT(number_of_classes() != 0, \n                \"\\t pair<result_type,scalar_type> one_vs_all_decision_function::predict()\"\n                << \"\\n\\t You can't make predictions with an empty decision function.\"\n                << \"\\n\\t this: \" << this\n                );\n\n            result_type best_label = result_type();\n            scalar_type best_score = -std::numeric_limits<scalar_type>::infinity();\n\n            // run all the classifiers over the sample and find the best one\n            for(typename binary_function_table::const_iterator i = dfs.begin(); i != dfs.end(); ++i)\n            {\n                const scalar_type score = i->second(sample);\n\n                if (score > best_score)\n                {\n                    best_score = score;\n                    best_label = i->first;\n                }\n            }\n\n            return std::make_pair(best_label, best_score);\n        }\n\n        result_type operator() (\n            const sample_type& sample\n        ) const\n        {\n            DLIB_ASSERT(number_of_classes() != 0, \n                \"\\t result_type one_vs_all_decision_function::operator()\"\n                << \"\\n\\t You can't make predictions with an empty decision function.\"\n                << \"\\n\\t this: \" << this\n                );\n\n            return predict(sample).first;\n        }\n\n\n\n    private:\n        binary_function_table dfs;\n        unsigned long num_classes;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename DF1, typename DF2, typename DF3,\n        typename DF4, typename DF5, typename DF6,\n        typename DF7, typename DF8, typename DF9,\n        typename DF10 \n        >\n    void serialize(\n        const one_vs_all_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>& item, \n        std::ostream& out\n    )\n    {\n        try\n        {\n            type_safe_union<DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10> temp;\n            typedef typename T::label_type result_type;\n            typedef typename T::sample_type sample_type;\n            typedef typename T::scalar_type scalar_type;\n            typedef std::map<result_type, any_decision_function<sample_type, scalar_type> > binary_function_table;\n\n            const unsigned long version = 1;\n            serialize(version, out);\n\n            const unsigned long size = item.get_binary_decision_functions().size();\n            serialize(size, out);\n\n            for(typename binary_function_table::const_iterator i = item.get_binary_decision_functions().begin(); \n                i != item.get_binary_decision_functions().end(); ++i)\n            {\n                serialize(i->first, out);\n\n                if      (i->second.template contains<DF1>()) temp.template get<DF1>() = any_cast<DF1>(i->second);\n                else if (i->second.template contains<DF2>()) temp.template get<DF2>() = any_cast<DF2>(i->second);\n                else if (i->second.template contains<DF3>()) temp.template get<DF3>() = any_cast<DF3>(i->second);\n                else if (i->second.template contains<DF4>()) temp.template get<DF4>() = any_cast<DF4>(i->second);\n                else if (i->second.template contains<DF5>()) temp.template get<DF5>() = any_cast<DF5>(i->second);\n                else if (i->second.template contains<DF6>()) temp.template get<DF6>() = any_cast<DF6>(i->second);\n                else if (i->second.template contains<DF7>()) temp.template get<DF7>() = any_cast<DF7>(i->second);\n                else if (i->second.template contains<DF8>()) temp.template get<DF8>() = any_cast<DF8>(i->second);\n                else if (i->second.template contains<DF9>()) temp.template get<DF9>() = any_cast<DF9>(i->second);\n                else if (i->second.template contains<DF10>()) temp.template get<DF10>() = any_cast<DF10>(i->second);\n                else throw serialization_error(\"Can't serialize one_vs_all_decision_function.  Not all decision functions defined.\");\n\n                serialize(temp,out);\n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing an object of type one_vs_all_decision_function\");\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl_ova\n    {\n        template <typename sample_type, typename scalar_type>\n        struct copy_to_df_helper\n        {\n            copy_to_df_helper(any_decision_function<sample_type, scalar_type>& target_) : target(target_) {}\n\n            any_decision_function<sample_type, scalar_type>& target;\n\n            template <typename T>\n            void operator() (\n                const T& item\n            ) const\n            {\n                target = item;\n            }\n        };\n    }\n\n    template <\n        typename T,\n        typename DF1, typename DF2, typename DF3,\n        typename DF4, typename DF5, typename DF6,\n        typename DF7, typename DF8, typename DF9,\n        typename DF10 \n        >\n    void deserialize(\n        one_vs_all_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>& item, \n        std::istream& in \n    )\n    {\n        try\n        {\n            type_safe_union<DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10> temp;\n            typedef typename T::label_type result_type;\n            typedef typename T::sample_type sample_type;\n            typedef typename T::scalar_type scalar_type;\n            typedef impl_ova::copy_to_df_helper<sample_type, scalar_type> copy_to;\n\n            unsigned long version;\n            deserialize(version, in);\n\n            if (version != 1)\n                throw serialization_error(\"Can't deserialize one_vs_all_decision_function.  Wrong version.\");\n\n            unsigned long size;\n            deserialize(size, in);\n\n            typedef std::map<result_type, any_decision_function<sample_type, scalar_type> > binary_function_table;\n            binary_function_table dfs;\n\n            result_type l;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(l, in);\n                deserialize(temp, in);\n                if (temp.template contains<null_df>())\n                    throw serialization_error(\"A sub decision function of unknown type was encountered.\");\n\n                temp.apply_to_contents(copy_to(dfs[l]));\n            }\n\n            item = one_vs_all_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>(dfs);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing an object of type one_vs_all_decision_function\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ONE_VS_ALL_DECISION_FUnCTION_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/one_vs_all_decision_function_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ONE_VS_ALL_DECISION_FUnCTION_ABSTRACT_Hh_\n#ifdef DLIB_ONE_VS_ALL_DECISION_FUnCTION_ABSTRACT_Hh_\n\n\n#include \"../serialize.h\"\n#include <map>\n#include \"../any/any_decision_function_abstract.h\"\n#include \"one_vs_all_trainer_abstract.h\"\n#include \"null_df.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename one_vs_all_trainer,\n        typename DF1 = null_df, typename DF2 = null_df, typename DF3 = null_df,\n        typename DF4 = null_df, typename DF5 = null_df, typename DF6 = null_df,\n        typename DF7 = null_df, typename DF8 = null_df, typename DF9 = null_df,\n        typename DF10 = null_df\n        >\n    class one_vs_all_decision_function\n    {\n        /*!\n            REQUIREMENTS ON one_vs_all_trainer\n                This should be an instantiation of the one_vs_all_trainer template.  \n                It is used to infer which types are used for various things, such as \n                representing labels.\n\n            REQUIREMENTS ON DF*\n                These types can either be left at their default values or set\n                to any kind of decision function object capable of being\n                stored in an any_decision_function<sample_type,scalar_type>\n                object.  These types should also be serializable.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a multiclass classifier built out of a set of \n                binary classifiers.  Each binary classifier is used to vote for the \n                correct multiclass label using a one vs. all strategy.  Therefore, \n                if you have N classes then there will be N binary classifiers inside \n                this object.\n\n                Note that the DF* template arguments are only used if you want\n                to serialize and deserialize one_vs_all_decision_function objects. \n                Specifically, all the types of binary decision function contained\n                within a one_vs_all_decision_function must be listed in the\n                template arguments if serialization and deserialization is to\n                be used.\n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call the const members of this object from multiple\n                    threads so long as all the decision functions contained in this object\n                    are also threadsafe.  This is because the const members are purely\n                    read-only operations.  However, any operation that modifies a\n                    one_vs_all_decision_function is not threadsafe.\n        !*/\n    public:\n\n        typedef typename one_vs_all_trainer::label_type result_type;\n        typedef typename one_vs_all_trainer::sample_type sample_type;\n        typedef typename one_vs_all_trainer::scalar_type scalar_type;\n        typedef typename one_vs_all_trainer::mem_manager_type mem_manager_type;\n\n        typedef std::map<result_type, any_decision_function<sample_type, scalar_type> > binary_function_table;\n\n        one_vs_all_decision_function(\n        );\n        /*!\n            ensures\n                - #number_of_classes() == 0\n                - #get_binary_decision_functions().size() == 0\n                - #get_labels().size() == 0\n        !*/\n\n        explicit one_vs_all_decision_function(\n            const binary_function_table& decision_functions\n        ); \n        /*!\n            ensures\n                - #get_binary_decision_functions() == decision_functions\n                - #get_labels() == a list of all the labels which appear in the\n                  given set of decision functions\n                - #number_of_classes() == #get_labels().size() \n        !*/\n\n        template <\n            typename df1, typename df2, typename df3, typename df4, typename df5,\n            typename df6, typename df7, typename df8, typename df9, typename df10\n            >\n        one_vs_all_decision_function (\n            const one_vs_all_decision_function<one_vs_all_trainer, \n                                               df1, df2, df3, df4, df5,\n                                               df6, df7, df8, df9, df10>& item\n        ); \n        /*!\n            ensures\n                - #*this will be a copy of item\n                - #number_of_classes() == item.number_of_classes()\n                - #get_labels() == item.get_labels()\n                - #get_binary_decision_functions() == item.get_binary_decision_functions()\n        !*/\n\n        const binary_function_table& get_binary_decision_functions (\n        ) const;\n        /*!\n            ensures\n                - returns the table of binary decision functions used by this\n                  object.  The label given to a test sample is computed by\n                  determining which binary decision function has the largest\n                  (i.e. most positive) output and returning the label associated\n                  with that decision function.\n        !*/\n\n        const std::vector<result_type> get_labels (\n        ) const;\n        /*!\n            ensures\n                - returns a vector containing all the labels which can be\n                  predicted by this object.\n        !*/\n\n        unsigned long number_of_classes (\n        ) const;\n        /*!\n            ensures\n                - returns get_labels().size()\n                  (i.e. returns the number of different labels/classes predicted by\n                  this object)\n        !*/\n\n        std::pair<result_type, scalar_type> predict (\n            const sample_type& sample \n        ) const;\n        /*!\n            requires\n                - number_of_classes() != 0\n            ensures\n                - Evaluates all the decision functions in get_binary_decision_functions()\n                  and returns the predicted label and score for the input sample.  That is,\n                  returns std::make_pair(label,score)\n                - The label is determined by whichever classifier outputs the largest\n                  score.  \n        !*/\n\n        result_type operator() (\n            const sample_type& sample\n        ) const\n        /*!\n            requires\n                - number_of_classes() != 0\n            ensures\n                - Evaluates all the decision functions in get_binary_decision_functions()\n                  and returns the predicted label.  That is, returns predict(sample).first.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename DF1, typename DF2, typename DF3,\n        typename DF4, typename DF5, typename DF6,\n        typename DF7, typename DF8, typename DF9,\n        typename DF10 \n        >\n    void serialize(\n        const one_vs_all_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>& item, \n        std::ostream& out\n    );\n    /*!\n        ensures\n            - writes the given item to the output stream out.\n        throws\n            - serialization_error.  \n              This is thrown if there is a problem writing to the ostream or if item \n              contains a type of decision function not listed among the DF* template \n              arguments.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename DF1, typename DF2, typename DF3,\n        typename DF4, typename DF5, typename DF6,\n        typename DF7, typename DF8, typename DF9,\n        typename DF10 \n        >\n    void deserialize(\n        one_vs_all_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>& item, \n        std::istream& in \n    );\n    /*!\n        ensures\n            - deserializes a one_vs_all_decision_function from in and stores it in item.\n        throws\n            - serialization_error.  \n              This is thrown if there is a problem reading from the istream or if the\n              serialized data contains decision functions not listed among the DF*\n              template arguments.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ONE_VS_ALL_DECISION_FUnCTION_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/one_vs_all_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ONE_VS_ALL_TRAiNER_Hh_\n#define DLIB_ONE_VS_ALL_TRAiNER_Hh_\n\n#include \"one_vs_all_trainer_abstract.h\"\n\n#include \"one_vs_all_decision_function.h\"\n#include <vector>\n\n#include \"multiclass_tools.h\"\n\n#include <sstream>\n#include <iostream>\n\n#include \"../any.h\"\n#include <map>\n#include <set>\n#include \"../threads.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename any_trainer,\n        typename label_type_ = double\n        >\n    class one_vs_all_trainer\n    {\n    public:\n        typedef label_type_ label_type;\n\n        typedef typename any_trainer::sample_type sample_type;\n        typedef typename any_trainer::scalar_type scalar_type;\n        typedef typename any_trainer::mem_manager_type mem_manager_type;\n\n        typedef one_vs_all_decision_function<one_vs_all_trainer> trained_function_type;\n\n        one_vs_all_trainer (\n        ) : \n            verbose(false),\n            num_threads(4)\n        {}\n\n        void set_trainer (\n            const any_trainer& trainer\n        )\n        {\n            default_trainer = trainer;\n            trainers.clear();\n        }\n\n        void set_trainer (\n            const any_trainer& trainer,\n            const label_type& l\n        )\n        {\n            trainers[l] = trainer;\n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_num_threads (\n            unsigned long num\n        )\n        {\n            num_threads = num;\n        }\n\n        unsigned long get_num_threads (\n        ) const\n        {\n            return num_threads;\n        }\n\n        struct invalid_label : public dlib::error \n        { \n            invalid_label(const std::string& msg, const label_type& l_\n                ) : dlib::error(msg), l(l_) {};\n\n            virtual ~invalid_label(\n            ) throw() {}\n\n            label_type l;\n        };\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(all_samples,all_labels),\n                \"\\t trained_function_type one_vs_all_trainer::train(all_samples,all_labels)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t all_samples.size():     \" << all_samples.size() \n                << \"\\n\\t all_labels.size():      \" << all_labels.size() \n                );\n\n            const std::vector<label_type> distinct_labels = select_all_distinct_labels(all_labels);\n\n            // make sure we have a trainer object for each of the label types.\n            for (unsigned long i = 0; i < distinct_labels.size(); ++i)\n            {\n                const label_type l = distinct_labels[i];\n                const typename binary_function_table::const_iterator itr = trainers.find(l);\n\n                if (itr == trainers.end() && default_trainer.is_empty())\n                {\n                    std::ostringstream sout;\n                    sout << \"In one_vs_all_trainer, no trainer registered for the \" << l << \" label.\";\n                    throw invalid_label(sout.str(), l);\n                }\n            }\n\n\n            // now do the training\n            parallel_for_helper helper(all_samples,all_labels,default_trainer,trainers,verbose,distinct_labels);\n            parallel_for(num_threads, 0, distinct_labels.size(), helper, 500);\n\n            if (helper.error_message.size() != 0)\n            {\n                throw dlib::error(\"binary trainer threw while training one vs. all classifier.  Error was: \" + helper.error_message);\n            }\n            return trained_function_type(helper.dfs);\n        }\n\n    private:\n\n        typedef std::map<label_type, any_trainer> binary_function_table;\n        struct parallel_for_helper\n        {\n            parallel_for_helper(\n                const std::vector<sample_type>& all_samples_,\n                const std::vector<label_type>& all_labels_,\n                const any_trainer& default_trainer_,\n                const binary_function_table& trainers_,\n                const bool verbose_,\n                const std::vector<label_type>& distinct_labels_ \n            ) : \n                all_samples(all_samples_),\n                all_labels(all_labels_),\n                default_trainer(default_trainer_),\n                trainers(trainers_), \n                verbose(verbose_),\n                distinct_labels(distinct_labels_)\n            {}\n\n            void operator()(long i) const \n            {\n                try\n                {\n                    std::vector<scalar_type> labels;\n\n                    const label_type l = distinct_labels[i];\n\n                    // setup one of the one vs all training sets\n                    for (unsigned long k = 0; k < all_samples.size(); ++k)\n                    {\n                        if (all_labels[k] == l)\n                            labels.push_back(+1);\n                        else \n                            labels.push_back(-1);\n                    }\n\n\n                    if (verbose)\n                    {\n                        auto_mutex lock(class_mutex);\n                        std::cout << \"Training classifier for \" << l << \" vs. all\" << std::endl;\n                    }\n\n                    any_trainer trainer;\n                    // now train a binary classifier using the samples we selected\n                    { auto_mutex lock(class_mutex); \n                    const typename binary_function_table::const_iterator itr = trainers.find(l);\n                    if (itr != trainers.end())\n                        trainer = itr->second;\n                    else \n                        trainer = default_trainer;\n                    }\n\n                    any_decision_function<sample_type,scalar_type> binary_df = trainer.train(all_samples, labels);\n\n                    auto_mutex lock(class_mutex);\n                    dfs[l] = binary_df;\n                }\n                catch (std::exception& e)\n                {\n                    auto_mutex lock(class_mutex);\n                    error_message = e.what();\n                }\n            }\n\n            mutable typename trained_function_type::binary_function_table dfs;\n            mutex class_mutex;\n            mutable std::string error_message;\n\n            const std::vector<sample_type>& all_samples;\n            const std::vector<label_type>& all_labels;\n            const any_trainer& default_trainer;\n            const binary_function_table& trainers;\n            const bool verbose;\n            const std::vector<label_type>& distinct_labels;\n        };\n\n        any_trainer default_trainer;\n\n        binary_function_table trainers;\n\n        bool verbose;\n        unsigned long num_threads;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ONE_VS_ALL_TRAiNER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/one_vs_all_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ONE_VS_ALL_TRAiNER_ABSTRACT_Hh_\n#ifdef DLIB_ONE_VS_ALL_TRAiNER_ABSTRACT_Hh_\n\n\n#include \"one_vs_all_decision_function_abstract.h\"\n#include <vector>\n\n#include \"../any/any_trainer_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename any_trainer,\n        typename label_type_ = double\n        >\n    class one_vs_all_trainer\n    {\n        /*!\n            REQUIREMENTS ON any_trainer\n                must be an instantiation of the dlib::any_trainer template.   \n\n            REQUIREMENTS ON label_type_\n                label_type_ must be default constructable, copyable, and comparable using\n                operator < and ==.  It must also be possible to write it to an std::ostream\n                using operator<<.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for turning a bunch of binary classifiers into a \n                multiclass classifier.  It does this by training the binary classifiers \n                in a one vs. all fashion.  That is, if you have N possible classes then \n                it trains N binary classifiers which are then used to vote on the identity \n                of a test sample.\n\n                This object works with any kind of binary classification trainer object\n                capable of being assigned to an any_trainer object.  (e.g. the svm_nu_trainer) \n        !*/\n\n    public:\n\n\n        typedef label_type_ label_type;\n\n        typedef typename any_trainer::sample_type sample_type;\n        typedef typename any_trainer::scalar_type scalar_type;\n        typedef typename any_trainer::mem_manager_type mem_manager_type;\n\n        typedef one_vs_all_decision_function<one_vs_all_trainer> trained_function_type;\n\n        one_vs_all_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized.\n                - This object will not be verbose unless be_verbose() is called.\n                - No binary trainers are associated with *this.  I.e. you have to\n                  call set_trainer() before calling train().\n                - #get_num_threads() == 4\n        !*/\n\n        void set_trainer (\n            const any_trainer& trainer\n        );\n        /*!\n            ensures\n                - sets the trainer used for all binary subproblems.  Any previous \n                  calls to set_trainer() are overridden by this function.  Even the\n                  more specific set_trainer(trainer, l) form. \n        !*/\n\n        void set_trainer (\n            const any_trainer& trainer,\n            const label_type& l\n        );\n        /*!\n            ensures\n                - Sets the trainer object used to create a binary classifier to\n                  distinguish l labeled samples from all other samples.\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_num_threads (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #get_num_threads() == num\n        !*/\n\n        unsigned long get_num_threads (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads used during training.  You should \n                  usually set this equal to the number of processing cores on your\n                  machine.\n        !*/\n\n        struct invalid_label : public dlib::error \n        { \n            /*!\n                This is the exception thrown by the train() function below.\n            !*/\n            label_type l;\n        };\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(all_samples, all_labels)\n            ensures\n                - trains a bunch of binary classifiers in a one vs all fashion to solve the given \n                  multiclass classification problem.  \n                - returns a one_vs_all_decision_function F with the following properties:\n                    - F contains all the learned binary classifiers and can be used to predict\n                      the labels of new samples.\n                    - if (new_x is a sample predicted to have a label of L) then\n                        - F(new_x) == L\n                    - F.get_labels() == select_all_distinct_labels(all_labels)\n                    - F.number_of_classes() == select_all_distinct_labels(all_labels).size()\n            throws\n                - invalid_label\n                  This exception is thrown if there are labels in all_labels which don't have\n                  any corresponding trainer object.  This will never happen if set_trainer(trainer)\n                  has been called.  However, if only the set_trainer(trainer,l) form has been\n                  used then this exception is thrown if not all labels have been given a trainer.\n\n                  invalid_label::l will contain the label which is missing a trainer object.  \n                  Additionally, the exception will contain an informative error message available \n                  via invalid_label::what().\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ONE_VS_ALL_TRAiNER_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/one_vs_one_decision_function.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ONE_VS_ONE_DECISION_FUnCTION_Hh_\n#define DLIB_ONE_VS_ONE_DECISION_FUnCTION_Hh_\n\n#include \"one_vs_one_decision_function_abstract.h\"\n\n#include \"../serialize.h\"\n#include \"../type_safe_union.h\"\n#include <iostream>\n#include <sstream>\n#include <set>\n#include <map>\n#include \"../any.h\"\n#include \"../unordered_pair.h\"\n#include \"null_df.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename one_vs_one_trainer,\n        typename DF1 = null_df, typename DF2 = null_df, typename DF3 = null_df,\n        typename DF4 = null_df, typename DF5 = null_df, typename DF6 = null_df,\n        typename DF7 = null_df, typename DF8 = null_df, typename DF9 = null_df,\n        typename DF10 = null_df\n        >\n    class one_vs_one_decision_function\n    {\n    public:\n\n        typedef typename one_vs_one_trainer::label_type result_type;\n        typedef typename one_vs_one_trainer::sample_type sample_type;\n        typedef typename one_vs_one_trainer::scalar_type scalar_type;\n        typedef typename one_vs_one_trainer::mem_manager_type mem_manager_type;\n\n        typedef std::map<unordered_pair<result_type>, any_decision_function<sample_type, scalar_type> > binary_function_table;\n\n        one_vs_one_decision_function() :num_classes(0) {}\n\n        explicit one_vs_one_decision_function(\n            const binary_function_table& dfs_\n        ) : dfs(dfs_)\n        {\n#ifdef ENABLE_ASSERTS\n            {\n                const std::vector<unordered_pair<result_type> > missing_pairs = find_missing_pairs(dfs_);\n                if (missing_pairs.size() != 0)\n                {\n                    std::ostringstream sout;\n                    for (unsigned long i = 0; i < missing_pairs.size(); ++i)\n                    {\n                        sout << \"\\t      (\" << missing_pairs[i].first << \", \" << missing_pairs[i].second << \")\\n\";\n                    }\n                    DLIB_ASSERT(missing_pairs.size() == 0, \n                        \"\\t void one_vs_one_decision_function::one_vs_one_decision_function()\"\n                        << \"\\n\\t The supplied set of binary decision functions is incomplete.\"\n                        << \"\\n\\t this: \" << this\n                        << \"\\n\\t Classifiers are missing for the following label pairs: \\n\" << sout.str()\n                                );\n                }\n            }\n#endif\n\n            // figure out how many labels are covered by this set of binary decision functions\n            std::set<result_type> labels;\n            for (typename binary_function_table::const_iterator i = dfs.begin(); i != dfs.end(); ++i)\n            {\n                labels.insert(i->first.first);\n                labels.insert(i->first.second);\n            }\n            num_classes = labels.size();\n        }\n\n        const binary_function_table& get_binary_decision_functions (\n        ) const\n        {\n            return dfs;\n        }\n\n        const std::vector<result_type> get_labels (\n        ) const\n        {\n            std::set<result_type> labels;\n            for (typename binary_function_table::const_iterator i = dfs.begin(); i != dfs.end(); ++i)\n            {\n                labels.insert(i->first.first);\n                labels.insert(i->first.second);\n            }\n            return std::vector<result_type>(labels.begin(), labels.end());\n        }\n\n\n        template <\n            typename df1, typename df2, typename df3, typename df4, typename df5,\n            typename df6, typename df7, typename df8, typename df9, typename df10\n            >\n        one_vs_one_decision_function (\n            const one_vs_one_decision_function<one_vs_one_trainer, \n                                               df1, df2, df3, df4, df5,\n                                               df6, df7, df8, df9, df10>& item\n        ) : dfs(item.get_binary_decision_functions()), num_classes(item.number_of_classes()) {}\n\n        unsigned long number_of_classes (\n        ) const\n        {\n            return num_classes;\n        }\n\n        result_type operator() (\n            const sample_type& sample\n        ) const\n        {\n            DLIB_ASSERT(number_of_classes() != 0, \n                \"\\t void one_vs_one_decision_function::operator()\"\n                << \"\\n\\t You can't make predictions with an empty decision function.\"\n                << \"\\n\\t this: \" << this\n                );\n\n            std::map<result_type,int> votes;\n\n            // run all the classifiers over the sample\n            for(typename binary_function_table::const_iterator i = dfs.begin(); i != dfs.end(); ++i)\n            {\n                const scalar_type score = i->second(sample);\n\n                if (score > 0)\n                    votes[i->first.first] += 1;\n                else\n                    votes[i->first.second] += 1;\n            }\n\n            // now figure out who had the most votes\n            result_type best_label = result_type();\n            int best_votes = 0;\n            for (typename std::map<result_type,int>::iterator i = votes.begin(); i != votes.end(); ++i)\n            {\n                if (i->second > best_votes)\n                {\n                    best_votes = i->second;\n                    best_label = i->first;\n                }\n            }\n\n            return best_label;\n        }\n\n\n\n    private:\n        binary_function_table dfs;\n        unsigned long num_classes;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename DF1, typename DF2, typename DF3,\n        typename DF4, typename DF5, typename DF6,\n        typename DF7, typename DF8, typename DF9,\n        typename DF10 \n        >\n    void serialize(\n        const one_vs_one_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>& item, \n        std::ostream& out\n    )\n    {\n        try\n        {\n            type_safe_union<DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10> temp;\n            typedef typename T::label_type result_type;\n            typedef typename T::sample_type sample_type;\n            typedef typename T::scalar_type scalar_type;\n            typedef std::map<unordered_pair<result_type>, any_decision_function<sample_type, scalar_type> > binary_function_table;\n\n            const unsigned long version = 1;\n            serialize(version, out);\n\n            const unsigned long size = item.get_binary_decision_functions().size();\n            serialize(size, out);\n\n            for(typename binary_function_table::const_iterator i = item.get_binary_decision_functions().begin(); \n                i != item.get_binary_decision_functions().end(); ++i)\n            {\n                serialize(i->first, out);\n\n                if      (i->second.template contains<DF1>()) temp.template get<DF1>() = any_cast<DF1>(i->second);\n                else if (i->second.template contains<DF2>()) temp.template get<DF2>() = any_cast<DF2>(i->second);\n                else if (i->second.template contains<DF3>()) temp.template get<DF3>() = any_cast<DF3>(i->second);\n                else if (i->second.template contains<DF4>()) temp.template get<DF4>() = any_cast<DF4>(i->second);\n                else if (i->second.template contains<DF5>()) temp.template get<DF5>() = any_cast<DF5>(i->second);\n                else if (i->second.template contains<DF6>()) temp.template get<DF6>() = any_cast<DF6>(i->second);\n                else if (i->second.template contains<DF7>()) temp.template get<DF7>() = any_cast<DF7>(i->second);\n                else if (i->second.template contains<DF8>()) temp.template get<DF8>() = any_cast<DF8>(i->second);\n                else if (i->second.template contains<DF9>()) temp.template get<DF9>() = any_cast<DF9>(i->second);\n                else if (i->second.template contains<DF10>()) temp.template get<DF10>() = any_cast<DF10>(i->second);\n                else throw serialization_error(\"Can't serialize one_vs_one_decision_function.  Not all decision functions defined.\");\n\n                serialize(temp,out);\n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing an object of type one_vs_one_decision_function\");\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename sample_type, typename scalar_type>\n        struct copy_to_df_helper\n        {\n            copy_to_df_helper(any_decision_function<sample_type, scalar_type>& target_) : target(target_) {}\n\n            any_decision_function<sample_type, scalar_type>& target;\n\n            template <typename T>\n            void operator() (\n                const T& item\n            ) const\n            {\n                target = item;\n            }\n        };\n    }\n\n    template <\n        typename T,\n        typename DF1, typename DF2, typename DF3,\n        typename DF4, typename DF5, typename DF6,\n        typename DF7, typename DF8, typename DF9,\n        typename DF10 \n        >\n    void deserialize(\n        one_vs_one_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>& item, \n        std::istream& in \n    )\n    {\n        try\n        {\n            type_safe_union<DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10> temp;\n            typedef typename T::label_type result_type;\n            typedef typename T::sample_type sample_type;\n            typedef typename T::scalar_type scalar_type;\n            typedef impl::copy_to_df_helper<sample_type, scalar_type> copy_to;\n\n            unsigned long version;\n            deserialize(version, in);\n\n            if (version != 1)\n                throw serialization_error(\"Can't deserialize one_vs_one_decision_function.  Wrong version.\");\n\n            unsigned long size;\n            deserialize(size, in);\n\n            typedef std::map<unordered_pair<result_type>, any_decision_function<sample_type, scalar_type> > binary_function_table;\n            binary_function_table dfs;\n\n            unordered_pair<result_type> p;\n            for (unsigned long i = 0; i < size; ++i)\n            {\n                deserialize(p, in);\n                deserialize(temp, in);\n                if (temp.template contains<null_df>())\n                    throw serialization_error(\"A sub decision function of unknown type was encountered.\");\n\n                temp.apply_to_contents(copy_to(dfs[p]));\n            }\n\n            item = one_vs_one_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>(dfs);\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing an object of type one_vs_one_decision_function\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ONE_VS_ONE_DECISION_FUnCTION_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/one_vs_one_decision_function_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ONE_VS_ONE_DECISION_FUnCTION_ABSTRACT_Hh_\n#ifdef DLIB_ONE_VS_ONE_DECISION_FUnCTION_ABSTRACT_Hh_\n\n\n#include \"../serialize.h\"\n#include <map>\n#include \"../any/any_decision_function_abstract.h\"\n#include \"../unordered_pair.h\"\n#include \"one_vs_one_trainer_abstract.h\"\n#include \"null_df.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename one_vs_one_trainer,\n        typename DF1 = null_df, typename DF2 = null_df, typename DF3 = null_df,\n        typename DF4 = null_df, typename DF5 = null_df, typename DF6 = null_df,\n        typename DF7 = null_df, typename DF8 = null_df, typename DF9 = null_df,\n        typename DF10 = null_df\n        >\n    class one_vs_one_decision_function\n    {\n        /*!\n            REQUIREMENTS ON one_vs_one_trainer\n                This should be an instantiation of the one_vs_one_trainer template.  \n                It is used to infer which types are used for various things, such as \n                representing labels.\n\n            REQUIREMENTS ON DF*\n                These types can either be left at their default values or set\n                to any kind of decision function object capable of being\n                stored in an any_decision_function<sample_type,scalar_type>\n                object.  These types should also be serializable.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a multiclass classifier built out\n                of a set of binary classifiers.  Each binary classifier\n                is used to vote for the correct multiclass label using a \n                one vs. one strategy.  Therefore, if you have N classes then\n                there will be N*(N-1)/2 binary classifiers inside this object.\n\n                Note that the DF* template arguments are only used if you want\n                to serialize and deserialize one_vs_one_decision_function objects. \n                Specifically, all the types of binary decision function contained\n                within a one_vs_one_decision_function must be listed in the\n                template arguments if serialization and deserialization is to\n                be used.\n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call the const members of this object from multiple\n                    threads so long as all the decision functions contained in this object\n                    are also threadsafe.  This is because the const members are purely\n                    read-only operations.  However, any operation that modifies a\n                    one_vs_one_decision_function is not threadsafe.\n        !*/\n    public:\n\n        typedef typename one_vs_one_trainer::label_type result_type;\n        typedef typename one_vs_one_trainer::sample_type sample_type;\n        typedef typename one_vs_one_trainer::scalar_type scalar_type;\n        typedef typename one_vs_one_trainer::mem_manager_type mem_manager_type;\n\n        typedef std::map<unordered_pair<result_type>, any_decision_function<sample_type, scalar_type> > binary_function_table;\n\n        one_vs_one_decision_function(\n        );\n        /*!\n            ensures\n                - #number_of_classes() == 0\n                - #get_binary_decision_functions().size() == 0\n                - #get_labels().size() == 0\n        !*/\n\n        explicit one_vs_one_decision_function(\n            const binary_function_table& decision_functions\n        ); \n        /*!\n            requires\n                - find_missing_pairs(decision_functions).size() == 0\n                  (i.e. all pairs of labels have an associated decision function)\n            ensures\n                - #get_binary_decision_functions() == decision_functions\n                - #get_labels() == a list of all the labels which appear in the\n                  given set of decision functions\n                - #number_of_classes() == #get_labels().size() \n        !*/\n\n        template <\n            typename df1, typename df2, typename df3, typename df4, typename df5,\n            typename df6, typename df7, typename df8, typename df9, typename df10\n            >\n        one_vs_one_decision_function (\n            const one_vs_one_decision_function<one_vs_one_trainer, \n                                               df1, df2, df3, df4, df5,\n                                               df6, df7, df8, df9, df10>& item\n        ); \n        /*!\n            ensures\n                - #*this will be a copy of item\n                - #number_of_classes() == item.number_of_classes()\n                - #get_labels() == item.get_labels()\n                - #get_binary_decision_functions() == item.get_binary_decision_functions()\n        !*/\n\n        const binary_function_table& get_binary_decision_functions (\n        ) const;\n        /*!\n            ensures\n                - returns the table of binary decision functions used by this\n                  object.  The correspondence between binary decision functions\n                  and multiclass labels is the following:\n                    - for each element i of get_binary_decision_functions()\n                        - i->first == the label pair associated with binary decision\n                          function i->second.  \n                        - if (decision function i->second outputs a value > 0) then\n                            - i->second is indicating that a test sample should\n                              receive a label of i->first.first\n                        - else\n                            - i->second is indicating that a test sample should\n                              receive a label of i->first.second\n        !*/\n\n        const std::vector<result_type> get_labels (\n        ) const;\n        /*!\n            ensures\n                - returns a vector containing all the labels which can be\n                  predicted by this object.\n        !*/\n\n        unsigned long number_of_classes (\n        ) const;\n        /*!\n            ensures\n                - returns get_labels().size()\n                  (i.e. returns the number of different labels/classes predicted by\n                  this object)\n        !*/\n\n        result_type operator() (\n            const sample_type& sample\n        ) const\n        /*!\n            requires\n                - number_of_classes() != 0\n            ensures\n                - evaluates all the decision functions in get_binary_decision_functions()\n                  and returns the label which received the most votes.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename DF1, typename DF2, typename DF3,\n        typename DF4, typename DF5, typename DF6,\n        typename DF7, typename DF8, typename DF9,\n        typename DF10 \n        >\n    void serialize(\n        const one_vs_one_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>& item, \n        std::ostream& out\n    );\n    /*!\n        ensures\n            - writes the given item to the output stream out.\n        throws\n            - serialization_error.  \n              This is thrown if there is a problem writing to the ostream or if item \n              contains a type of decision function not listed among the DF* template \n              arguments.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename DF1, typename DF2, typename DF3,\n        typename DF4, typename DF5, typename DF6,\n        typename DF7, typename DF8, typename DF9,\n        typename DF10 \n        >\n    void deserialize(\n        one_vs_one_decision_function<T,DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10>& item, \n        std::istream& in \n    );\n    /*!\n        ensures\n            - deserializes a one_vs_one_decision_function from in and stores it in item.\n        throws\n            - serialization_error.  \n              This is thrown if there is a problem reading from the istream or if the\n              serialized data contains decision functions not listed among the DF*\n              template arguments.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ONE_VS_ONE_DECISION_FUnCTION_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/one_vs_one_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ONE_VS_ONE_TRAiNER_Hh_\n#define DLIB_ONE_VS_ONE_TRAiNER_Hh_\n\n#include \"one_vs_one_trainer_abstract.h\"\n\n#include \"one_vs_one_decision_function.h\"\n#include <vector>\n\n#include \"../unordered_pair.h\"\n#include \"multiclass_tools.h\"\n\n#include <sstream>\n#include <iostream>\n\n#include \"../any.h\"\n#include <map>\n#include <set>\n#include \"../threads.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename any_trainer,\n        typename label_type_ = double\n        >\n    class one_vs_one_trainer\n    {\n    public:\n        typedef label_type_ label_type;\n\n        typedef typename any_trainer::sample_type sample_type;\n        typedef typename any_trainer::scalar_type scalar_type;\n        typedef typename any_trainer::mem_manager_type mem_manager_type;\n\n        typedef one_vs_one_decision_function<one_vs_one_trainer> trained_function_type;\n\n        one_vs_one_trainer (\n        ) : \n            verbose(false),\n            num_threads(4)\n        {}\n\n        void set_trainer (\n            const any_trainer& trainer\n        )\n        {\n            default_trainer = trainer;\n            trainers.clear();\n        }\n\n        void set_trainer (\n            const any_trainer& trainer,\n            const label_type& l1,\n            const label_type& l2\n        )\n        {\n            trainers[make_unordered_pair(l1,l2)] = trainer;\n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_num_threads (\n            unsigned long num\n        )\n        {\n            num_threads = num;\n        }\n\n        unsigned long get_num_threads (\n        ) const\n        {\n            return num_threads;\n        }\n\n        struct invalid_label : public dlib::error \n        { \n            invalid_label(const std::string& msg, const label_type& l1_, const label_type& l2_\n                ) : dlib::error(msg), l1(l1_), l2(l2_) {};\n\n            virtual ~invalid_label(\n            ) throw() {}\n\n            label_type l1, l2;\n        };\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(all_samples,all_labels),\n                \"\\t trained_function_type one_vs_one_trainer::train(all_samples,all_labels)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t all_samples.size():     \" << all_samples.size() \n                << \"\\n\\t all_labels.size():      \" << all_labels.size() \n                );\n\n            const std::vector<label_type> distinct_labels = select_all_distinct_labels(all_labels);\n\n\n            // fill pairs with all the pairs of labels.  \n            std::vector<unordered_pair<label_type> > pairs;\n            for (unsigned long i = 0; i < distinct_labels.size(); ++i)\n            {\n                for (unsigned long j = i+1; j < distinct_labels.size(); ++j)\n                {\n                    pairs.push_back(unordered_pair<label_type>(distinct_labels[i], distinct_labels[j]));\n\n                    // make sure we have a trainer for this pair\n                    const typename binary_function_table::const_iterator itr = trainers.find(pairs.back());\n                    if (itr == trainers.end() && default_trainer.is_empty())\n                    {\n                        std::ostringstream sout;\n                        sout << \"In one_vs_one_trainer, no trainer registered for the (\" \n                             << pairs.back().first << \", \" << pairs.back().second << \") label pair.\";\n                        throw invalid_label(sout.str(), pairs.back().first, pairs.back().second);\n                    }\n                }\n            }\n\n\n\n            // Now train on all the label pairs.  \n            parallel_for_helper helper(all_samples,all_labels,default_trainer,trainers,verbose,pairs);\n            parallel_for(num_threads, 0, pairs.size(), helper, 500);\n\n            if (helper.error_message.size() != 0)\n            {\n                throw dlib::error(\"binary trainer threw while training one vs. one classifier.  Error was: \" + helper.error_message);\n            }\n            return trained_function_type(helper.dfs);\n        }\n\n    private:\n\n        typedef std::map<unordered_pair<label_type>, any_trainer> binary_function_table;\n\n        struct parallel_for_helper\n        {\n            parallel_for_helper(\n                const std::vector<sample_type>& all_samples_,\n                const std::vector<label_type>& all_labels_,\n                const any_trainer& default_trainer_,\n                const binary_function_table& trainers_,\n                const bool verbose_,\n                const std::vector<unordered_pair<label_type> >& pairs_\n            ) : \n                all_samples(all_samples_),\n                all_labels(all_labels_),\n                default_trainer(default_trainer_),\n                trainers(trainers_), \n                verbose(verbose_),\n                pairs(pairs_)\n            {}\n\n            void operator()(long i) const \n            {\n                try\n                {\n                    std::vector<sample_type> samples;\n                    std::vector<scalar_type> labels;\n\n                    const unordered_pair<label_type> p = pairs[i];\n\n                    // pick out the samples corresponding to these two classes\n                    for (unsigned long k = 0; k < all_samples.size(); ++k)\n                    {\n                        if (all_labels[k] == p.first)\n                        {\n                            samples.push_back(all_samples[k]);\n                            labels.push_back(+1);\n                        }\n                        else if (all_labels[k] == p.second)\n                        {\n                            samples.push_back(all_samples[k]);\n                            labels.push_back(-1);\n                        }\n                    }\n\n                    if (verbose)\n                    {\n                        auto_mutex lock(class_mutex);\n                        std::cout << \"Training classifier for \" << p.first << \" vs. \" << p.second << std::endl;\n                    }\n\n                    any_trainer trainer;\n                    // now train a binary classifier using the samples we selected\n                    { auto_mutex lock(class_mutex); \n                    const typename binary_function_table::const_iterator itr = trainers.find(p);\n                    if (itr != trainers.end())\n                        trainer = itr->second;\n                    else \n                        trainer = default_trainer;\n                    }\n\n                    any_decision_function<sample_type,scalar_type> binary_df = trainer.train(samples, labels);\n\n                    auto_mutex lock(class_mutex);\n                    dfs[p] = binary_df;\n                }\n                catch (std::exception& e)\n                {\n                    auto_mutex lock(class_mutex);\n                    error_message = e.what();\n                }\n            }\n\n            mutable typename trained_function_type::binary_function_table dfs;\n            mutex class_mutex;\n            mutable std::string error_message;\n\n            const std::vector<sample_type>& all_samples;\n            const std::vector<label_type>& all_labels;\n            const any_trainer& default_trainer;\n            const binary_function_table& trainers;\n            const bool verbose;\n            const std::vector<unordered_pair<label_type> >& pairs;\n        };\n\n        \n        any_trainer default_trainer;\n        binary_function_table trainers;\n        bool verbose;\n        unsigned long num_threads;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ONE_VS_ONE_TRAiNER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/one_vs_one_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ONE_VS_ONE_TRAiNER_ABSTRACT_Hh_\n#ifdef DLIB_ONE_VS_ONE_TRAiNER_ABSTRACT_Hh_\n\n\n#include \"one_vs_one_decision_function_abstract.h\"\n#include <vector>\n\n#include \"../any/any_trainer_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename any_trainer,\n        typename label_type_ = double\n        >\n    class one_vs_one_trainer\n    {\n        /*!\n            REQUIREMENTS ON any_trainer\n                must be an instantiation of the dlib::any_trainer template.   \n\n            REQUIREMENTS ON label_type_\n                label_type_ must be default constructable, copyable, and comparable using\n                operator < and ==.  It must also be possible to write it to an std::ostream\n                using operator<<.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for turning a bunch of binary classifiers\n                into a multiclass classifier.  It does this by training the binary\n                classifiers in a one vs. one fashion.  That is, if you have N possible\n                classes then it trains N*(N-1)/2 binary classifiers which are then used\n                to vote on the identity of a test sample.\n\n                This object works with any kind of binary classification trainer object\n                capable of being assigned to an any_trainer object.  (e.g. the svm_nu_trainer) \n        !*/\n\n    public:\n\n\n        typedef label_type_ label_type;\n\n        typedef typename any_trainer::sample_type sample_type;\n        typedef typename any_trainer::scalar_type scalar_type;\n        typedef typename any_trainer::mem_manager_type mem_manager_type;\n\n        typedef one_vs_one_decision_function<one_vs_one_trainer> trained_function_type;\n\n        one_vs_one_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized\n                - This object will not be verbose unless be_verbose() is called.\n                - No binary trainers are associated with *this.  I.e. you have to\n                  call set_trainer() before calling train().\n                - #get_num_threads() == 4\n        !*/\n\n        void set_trainer (\n            const any_trainer& trainer\n        );\n        /*!\n            ensures\n                - sets the trainer used for all pairs of training.  Any previous \n                  calls to set_trainer() are overridden by this function.  Even the\n                  more specific set_trainer(trainer, l1, l2) form. \n        !*/\n\n        void set_trainer (\n            const any_trainer& trainer,\n            const label_type& l1,\n            const label_type& l2\n        );\n        /*!\n            requires\n                - l1 != l2\n            ensures\n                - Sets the trainer object used to create a binary classifier to\n                  distinguish l1 labeled samples from l2 labeled samples.\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_num_threads (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #get_num_threads() == num\n        !*/\n\n        unsigned long get_num_threads (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads used during training.  You should \n                  usually set this equal to the number of processing cores on your\n                  machine.\n        !*/\n\n        struct invalid_label : public dlib::error \n        { \n            /*!\n                This is the exception thrown by the train() function below.\n            !*/\n            label_type l1, l2;\n        };\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(all_samples, all_labels)\n            ensures\n                - trains a bunch of binary classifiers in a one vs one fashion to solve the given \n                  multiclass classification problem.  \n                - returns a one_vs_one_decision_function F with the following properties:\n                    - F contains all the learned binary classifiers and can be used to predict\n                      the labels of new samples.\n                    - if (new_x is a sample predicted to have a label of L) then\n                        - F(new_x) == L\n                    - F.get_labels() == select_all_distinct_labels(all_labels)\n                    - F.number_of_classes() == select_all_distinct_labels(all_labels).size()\n            throws\n                - invalid_label\n                  This exception is thrown if there are labels in all_labels which don't have\n                  any corresponding trainer object.  This will never happen if set_trainer(trainer)\n                  has been called.  However, if only the set_trainer(trainer,l1,l2) form has been\n                  used then this exception is thrown if not all necessary label pairs have been\n                  given a trainer.\n\n                  invalid_label::l1 and invalid_label::l2 will contain the label pair which is\n                  missing a trainer object.  Additionally, the exception will contain an\n                  informative error message available via invalid_label::what().\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ONE_VS_ONE_TRAiNER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/pegasos.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PEGASoS_\n#define DLIB_PEGASoS_\n\n#include \"pegasos_abstract.h\"\n#include <cmath>\n#include \"../algs.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"kcentroid.h\"\n#include <iostream>\n#include \"../smart_pointers.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_pegasos\n    {\n        typedef kcentroid<offset_kernel<K> > kc_type;\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        template <typename K_>\n        struct rebind {\n            typedef svm_pegasos<K_> other;\n        };\n\n        svm_pegasos (\n        ) :\n            max_sv(40),\n            lambda_c1(0.0001),\n            lambda_c2(0.0001),\n            tau(0.01),\n            tolerance(0.01),\n            train_count(0),\n            w(offset_kernel<kernel_type>(kernel,tau),tolerance, max_sv, false)\n        {\n        }\n\n        svm_pegasos (\n            const kernel_type& kernel_, \n            const scalar_type& lambda_,\n            const scalar_type& tolerance_,\n            unsigned long max_num_sv\n        ) :\n            max_sv(max_num_sv),\n            kernel(kernel_),\n            lambda_c1(lambda_),\n            lambda_c2(lambda_),\n            tau(0.01),\n            tolerance(tolerance_),\n            train_count(0),\n            w(offset_kernel<kernel_type>(kernel,tau),tolerance, max_sv, false)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(lambda_ > 0 && tolerance > 0 && max_num_sv > 0,\n                        \"\\tsvm_pegasos::svm_pegasos(kernel,lambda,tolerance)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t lambda_: \" << lambda_ \n                        << \"\\n\\t max_num_sv: \" << max_num_sv \n            );\n        }\n\n        void clear (\n        )\n        {\n            // reset the w vector back to its initial state\n            w = kc_type(offset_kernel<kernel_type>(kernel,tau),tolerance, max_sv, false);\n            train_count = 0;\n        }\n\n        void set_kernel (\n            kernel_type k\n        )\n        {\n            kernel = k;\n            clear();\n        }\n\n        void set_max_num_sv (\n            unsigned long max_num_sv\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(max_num_sv > 0,\n                        \"\\tvoid svm_pegasos::set_max_num_sv(max_num_sv)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t max_num_sv: \" << max_num_sv \n            );\n            max_sv = max_num_sv; \n            clear();\n        }\n\n        unsigned long get_max_num_sv (\n        ) const\n        {\n            return max_sv;\n        }\n\n        void set_tolerance (\n            double tol\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < tol,\n                        \"\\tvoid svm_pegasos::set_tolerance(tol)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t tol: \" << tol \n            );\n            tolerance = tol;\n            clear();\n        }\n\n        void set_lambda (\n            scalar_type lambda_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < lambda_,\n                        \"\\tvoid svm_pegasos::set_lambda(lambda_)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t lambda_: \" << lambda_ \n            );\n            lambda_c1 = lambda_;\n            lambda_c2 = lambda_;\n\n            max_wnorm = 1/std::sqrt(std::min(lambda_c1, lambda_c2));\n            clear();\n        }\n\n        void set_lambda_class1 (\n            scalar_type lambda_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < lambda_,\n                        \"\\tvoid svm_pegasos::set_lambda_class1(lambda_)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t lambda_: \" << lambda_ \n            );\n            lambda_c1 = lambda_;\n            max_wnorm = 1/std::sqrt(std::min(lambda_c1, lambda_c2));\n            clear();\n        }\n\n        void set_lambda_class2 (\n            scalar_type lambda_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < lambda_,\n                        \"\\tvoid svm_pegasos::set_lambda_class2(lambda_)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t lambda_: \" << lambda_ \n            );\n            lambda_c2 = lambda_;\n            max_wnorm = 1/std::sqrt(std::min(lambda_c1, lambda_c2));\n            clear();\n        }\n\n        const scalar_type get_lambda_class1 (\n        ) const\n        {\n            return lambda_c1;\n        }\n\n        const scalar_type get_lambda_class2 (\n        ) const\n        {\n            return lambda_c2;\n        }\n\n        const scalar_type get_tolerance (\n        ) const\n        {\n            return tolerance;\n        }\n\n        const kernel_type get_kernel (\n        ) const\n        {\n            return kernel;\n        }\n\n        unsigned long get_train_count (\n        ) const\n        {\n            return static_cast<unsigned long>(train_count);\n        }\n\n        scalar_type train (\n            const sample_type& x,\n            const scalar_type& y\n        ) \n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(y == -1 || y == 1,\n                        \"\\tscalar_type svm_pegasos::train(x,y)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t y: \" << y\n            );\n\n            const double lambda = (y==+1)? lambda_c1 : lambda_c2;\n\n            ++train_count;\n            const scalar_type learning_rate = 1/(lambda*train_count);\n\n            // if this sample point is within the margin of the current hyperplane\n            if (y*w.inner_product(x) < 1)\n            {\n\n                // compute: w = (1-learning_rate*lambda)*w + y*learning_rate*x\n                w.train(x,  1 - learning_rate*lambda,  y*learning_rate);\n\n                scalar_type wnorm = std::sqrt(w.squared_norm());\n                scalar_type temp = max_wnorm/wnorm;\n                if (temp < 1)\n                    w.scale_by(temp);\n            }\n            else\n            {\n                w.scale_by(1 - learning_rate*lambda);\n            }\n\n            // return the current learning rate\n            return 1/(std::min(lambda_c1,lambda_c2)*train_count);\n        }\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const\n        {\n            return w.inner_product(x);\n        }\n\n        const decision_function<kernel_type> get_decision_function (\n        ) const\n        {\n            distance_function<offset_kernel<kernel_type> > df = w.get_distance_function();\n            return decision_function<kernel_type>(df.get_alpha(), -tau*sum(df.get_alpha()), kernel, df.get_basis_vectors());\n        }\n\n        void swap (\n            svm_pegasos& item\n        )\n        {\n            exchange(max_sv,         item.max_sv);\n            exchange(kernel,         item.kernel);\n            exchange(lambda_c1,      item.lambda_c1);\n            exchange(lambda_c2,      item.lambda_c2);\n            exchange(max_wnorm,      item.max_wnorm);\n            exchange(tau,            item.tau);\n            exchange(tolerance,      item.tolerance);\n            exchange(train_count,    item.train_count);\n            exchange(w,              item.w);\n        }\n\n        friend void serialize(const svm_pegasos& item, std::ostream& out)\n        {\n            serialize(item.max_sv, out);\n            serialize(item.kernel, out);\n            serialize(item.lambda_c1, out);\n            serialize(item.lambda_c2, out);\n            serialize(item.max_wnorm, out);\n            serialize(item.tau, out);\n            serialize(item.tolerance, out);\n            serialize(item.train_count, out);\n            serialize(item.w, out);\n        }\n\n        friend void deserialize(svm_pegasos& item, std::istream& in)\n        {\n            deserialize(item.max_sv, in);\n            deserialize(item.kernel, in);\n            deserialize(item.lambda_c1, in);\n            deserialize(item.lambda_c2, in);\n            deserialize(item.max_wnorm, in);\n            deserialize(item.tau, in);\n            deserialize(item.tolerance, in);\n            deserialize(item.train_count, in);\n            deserialize(item.w, in);\n        }\n\n    private:\n\n        unsigned long max_sv;\n        kernel_type kernel;\n        scalar_type lambda_c1;\n        scalar_type lambda_c2;\n        scalar_type max_wnorm;\n        scalar_type tau;\n        scalar_type tolerance;\n        scalar_type train_count;\n        kc_type w;\n\n    }; // end of class svm_pegasos\n\n    template <\n        typename K \n        >\n    void swap (\n        svm_pegasos<K>& a,\n        svm_pegasos<K>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    void replicate_settings (\n        const svm_pegasos<T>& source,\n        svm_pegasos<U>& dest\n    )\n    {\n        dest.set_tolerance(source.get_tolerance());\n        dest.set_lambda_class1(source.get_lambda_class1());\n        dest.set_lambda_class2(source.get_lambda_class2());\n        dest.set_max_num_sv(source.get_max_num_sv());\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    class batch_trainer \n    {\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename K,\n            typename sample_vector_type\n            >\n        class caching_kernel \n        {\n        public:\n            typedef typename K::scalar_type scalar_type;\n            typedef long sample_type;\n            //typedef typename K::sample_type sample_type;\n            typedef typename K::mem_manager_type mem_manager_type;\n\n            caching_kernel () : samples(0), counter(0), counter_threshold(0) {}\n\n            caching_kernel (\n                const K& kern,\n                const sample_vector_type& samps,\n                long cache_size_\n            ) : real_kernel(kern), samples(&samps), counter(0)  \n            {\n                cache_size = std::min<long>(cache_size_, samps.size());\n\n                cache.reset(new cache_type);\n                cache->frequency_of_use.resize(samps.size());\n                for (long i = 0; i < samps.size(); ++i)\n                    cache->frequency_of_use[i] = std::make_pair(0, i);\n\n                // Set the cache build/rebuild threshold so that we have to have\n                // as many cache misses as there are entries in the cache before\n                // we build/rebuild.\n                counter_threshold = samps.size()*cache_size;\n                cache->sample_location.assign(samples->size(), -1);\n            }\n\n            scalar_type operator() (\n                const sample_type& a,\n                const sample_type& b\n            )  const\n            { \n                // rebuild the cache every so often\n                if (counter > counter_threshold )\n                {\n                    build_cache();\n                }\n\n                const long a_loc = cache->sample_location[a];\n                const long b_loc = cache->sample_location[b];\n\n                cache->frequency_of_use[a].first += 1;\n                cache->frequency_of_use[b].first += 1;\n\n                if (a_loc != -1)\n                {\n                    return cache->kernel(a_loc, b);\n                }\n                else if (b_loc != -1)\n                {\n                    return cache->kernel(b_loc, a);\n                }\n                else\n                {\n                    ++counter;\n                    return real_kernel((*samples)(a), (*samples)(b));\n                }\n            }\n\n            bool operator== (\n                const caching_kernel& item\n            ) const\n            {\n                return item.real_kernel == real_kernel &&\n                    item.samples == samples;\n            }\n\n        private:\n            K real_kernel;\n\n            void build_cache (\n            ) const\n            {\n                std::sort(cache->frequency_of_use.rbegin(), cache->frequency_of_use.rend());\n                counter = 0;\n\n\n                cache->kernel.set_size(cache_size, samples->size());\n                cache->sample_location.assign(samples->size(), -1);\n\n                // loop over all the samples in the cache\n                for (long i = 0; i < cache_size; ++i)\n                {\n                    const long cur = cache->frequency_of_use[i].second;\n                    cache->sample_location[cur] = i;\n\n                    // now populate all possible kernel products with the current sample\n                    for (long j = 0; j < samples->size(); ++j)\n                    {\n                        cache->kernel(i, j) = real_kernel((*samples)(cur), (*samples)(j));\n                    }\n\n                }\n\n                // reset the frequency of use metrics\n                for (long i = 0; i < samples->size(); ++i)\n                    cache->frequency_of_use[i] = std::make_pair(0, i);\n            }\n\n\n            struct cache_type\n            {\n                matrix<scalar_type> kernel;  \n\n                std::vector<long> sample_location; // where in the cache a sample is.  -1 means not in cache\n                std::vector<std::pair<long,long> > frequency_of_use;  \n            };\n\n            const sample_vector_type* samples;\n\n            shared_ptr<cache_type> cache;\n            mutable unsigned long counter;\n            unsigned long counter_threshold;\n            long cache_size;\n        };\n\n    // ------------------------------------------------------------------------------------\n\n    public:\n        typedef typename trainer_type::kernel_type kernel_type;\n        typedef typename trainer_type::scalar_type scalar_type;\n        typedef typename trainer_type::sample_type sample_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n        typedef typename trainer_type::trained_function_type trained_function_type;\n\n\n        batch_trainer (\n        ) :\n            min_learning_rate(0.1),\n            use_cache(false),\n            cache_size(100)\n        {\n        }\n\n        batch_trainer (\n            const trainer_type& trainer_, \n            const scalar_type min_learning_rate_,\n            bool verbose_,\n            bool use_cache_,\n            long cache_size_ = 100\n        ) :\n            trainer(trainer_),\n            min_learning_rate(min_learning_rate_),\n            verbose(verbose_),\n            use_cache(use_cache_),\n            cache_size(cache_size_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < min_learning_rate_ &&\n                        cache_size_ > 0,\n                        \"\\tbatch_trainer::batch_trainer()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t min_learning_rate_: \" << min_learning_rate_ \n                        << \"\\n\\t cache_size_: \" << cache_size_ \n            );\n            \n            trainer.clear();\n        }\n\n        const scalar_type get_min_learning_rate (\n        ) const \n        {\n            return min_learning_rate;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            if (use_cache)\n                return do_train_cached(mat(x), mat(y));\n            else\n                return do_train(mat(x), mat(y));\n        }\n\n    private:\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n\n            dlib::rand rnd;\n\n            trainer_type my_trainer(trainer);\n\n            scalar_type cur_learning_rate = min_learning_rate + 10;\n            unsigned long count = 0;\n\n            while (cur_learning_rate > min_learning_rate)\n            {\n                const long i = rnd.get_random_32bit_number()%x.size();\n                // keep feeding the trainer data until its learning rate goes below our threshold\n                cur_learning_rate = my_trainer.train(x(i), y(i));\n\n                if (verbose)\n                {\n                    if ( (count&0x7FF) == 0)\n                    {\n                        std::cout << \"\\rbatch_trainer(): Percent complete: \" \n                                  << 100*min_learning_rate/cur_learning_rate << \"             \" << std::flush;\n                    }\n                    ++count;\n                }\n            }\n\n            if (verbose)\n            {\n                decision_function<kernel_type> df = my_trainer.get_decision_function();\n                std::cout << \"\\rbatch_trainer(): Percent complete: 100           \" << std::endl;\n                std::cout << \"    Num sv: \" << df.basis_vectors.size() << std::endl;\n                std::cout << \"    bias:   \" << df.b << std::endl;\n                return df;\n            }\n            else\n            {\n                return my_trainer.get_decision_function();\n            }\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train_cached (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n\n            dlib::rand rnd;\n\n            // make a caching kernel\n            typedef caching_kernel<kernel_type, in_sample_vector_type> ckernel_type;\n            ckernel_type ck(trainer.get_kernel(), x, cache_size);\n\n            // now rebind the trainer to use the caching kernel\n            typedef typename trainer_type::template rebind<ckernel_type>::other rebound_trainer_type;\n            rebound_trainer_type my_trainer;\n            my_trainer.set_kernel(ck);\n            replicate_settings(trainer, my_trainer);\n\n            scalar_type cur_learning_rate = min_learning_rate + 10;\n            unsigned long count = 0;\n\n            while (cur_learning_rate > min_learning_rate)\n            {\n                const long i = rnd.get_random_32bit_number()%x.size();\n                // keep feeding the trainer data until its learning rate goes below our threshold\n                cur_learning_rate = my_trainer.train(i, y(i));\n\n                if (verbose)\n                {\n                    if ( (count&0x7FF) == 0)\n                    {\n                        std::cout << \"\\rbatch_trainer(): Percent complete: \" \n                                  << 100*min_learning_rate/cur_learning_rate << \"             \" << std::flush;\n                    }\n                    ++count;\n                }\n            }\n\n            if (verbose)\n            {\n                decision_function<ckernel_type> cached_df;\n                cached_df = my_trainer.get_decision_function();\n\n                std::cout << \"\\rbatch_trainer(): Percent complete: 100           \" << std::endl;\n                std::cout << \"    Num sv: \" << cached_df.basis_vectors.size() << std::endl;\n                std::cout << \"    bias:   \" << cached_df.b << std::endl;\n\n                return decision_function<kernel_type> (\n                        cached_df.alpha,\n                        cached_df.b,\n                        trainer.get_kernel(),\n                        rowm(x, cached_df.basis_vectors)\n                        );\n            }\n            else\n            {\n                decision_function<ckernel_type> cached_df;\n                cached_df = my_trainer.get_decision_function();\n\n                return decision_function<kernel_type> (\n                        cached_df.alpha,\n                        cached_df.b,\n                        trainer.get_kernel(),\n                        rowm(x, cached_df.basis_vectors)\n                        );\n            }\n        }\n\n        trainer_type trainer;\n        scalar_type min_learning_rate;\n        bool verbose;\n        bool use_cache;\n        long cache_size;\n\n    }; // end of class batch_trainer\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const batch_trainer<trainer_type> batch (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type min_learning_rate = 0.1\n    ) { return batch_trainer<trainer_type>(trainer, min_learning_rate, false, false); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const batch_trainer<trainer_type> verbose_batch (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type min_learning_rate = 0.1\n    ) { return batch_trainer<trainer_type>(trainer, min_learning_rate, true, false); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const batch_trainer<trainer_type> batch_cached (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type min_learning_rate = 0.1,\n        long cache_size = 100\n    ) { return batch_trainer<trainer_type>(trainer, min_learning_rate, false, true, cache_size); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const batch_trainer<trainer_type> verbose_batch_cached (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type min_learning_rate = 0.1,\n        long cache_size = 100\n    ) { return batch_trainer<trainer_type>(trainer, min_learning_rate, true, true, cache_size); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_PEGASoS_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/pegasos_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_PEGASoS_ABSTRACT_\n#ifdef DLIB_PEGASoS_ABSTRACT_\n\n#include <cmath>\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kern_type\n        >\n    class svm_pegasos\n    {\n        /*!\n            REQUIREMENTS ON kern_type\n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements an online algorithm for training a support \n                vector machine for solving binary classification problems.  \n\n                The implementation of the Pegasos algorithm used by this object is based\n                on the following excellent paper:\n                    Pegasos: Primal estimated sub-gradient solver for SVM (2007)\n                    by Shai Shalev-Shwartz, Yoram Singer, Nathan Srebro \n                    In ICML \n\n                This SVM training algorithm has two interesting properties.  First, the \n                pegasos algorithm itself converges to the solution in an amount of time\n                unrelated to the size of the training set (in addition to being quite fast\n                to begin with).  This makes it an appropriate algorithm for learning from\n                very large datasets.  Second, this object uses the dlib::kcentroid object \n                to maintain a sparse approximation of the learned decision function.  \n                This means that the number of support vectors in the resulting decision \n                function is also unrelated to the size of the dataset (in normal SVM\n                training algorithms, the number of support vectors grows approximately \n                linearly with the size of the training set).  \n        !*/\n\n    public:\n        typedef kern_type kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        template <typename K_>\n        struct rebind {\n            typedef svm_pegasos<K_> other;\n        };\n\n        svm_pegasos (\n        );\n        /*!\n            ensures\n                - this object is properly initialized \n                - #get_lambda_class1() == 0.0001\n                - #get_lambda_class2() == 0.0001\n                - #get_tolerance() == 0.01\n                - #get_train_count() == 0\n                - #get_max_num_sv() == 40\n        !*/\n\n        svm_pegasos (\n            const kernel_type& kernel_, \n            const scalar_type& lambda_,\n            const scalar_type& tolerance_,\n            unsigned long max_num_sv\n        );\n        /*!\n            requires\n                - lambda_ > 0\n                - tolerance_ > 0\n                - max_num_sv > 0\n            ensures\n                - this object is properly initialized \n                - #get_lambda_class1() == lambda_ \n                - #get_lambda_class2() == lambda_ \n                - #get_tolerance() == tolerance_\n                - #get_kernel() == kernel_\n                - #get_train_count() == 0\n                - #get_max_num_sv() == max_num_sv\n        !*/\n\n        void clear (\n        );\n        /*!\n            ensures\n                - #get_train_count() == 0\n                - clears out any memory of previous calls to train()\n                - doesn't change any of the algorithm parameters.  I.e.\n                    - #get_lambda_class1()  == get_lambda_class1()\n                    - #get_lambda_class2()  == get_lambda_class2()\n                    - #get_tolerance()      == get_tolerance()\n                    - #get_kernel()         == get_kernel()\n                    - #get_max_num_sv()     == get_max_num_sv()\n        !*/\n\n        const scalar_type get_lambda_class1 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization term for the +1 class.  It is the \n                  parameter that determines the trade off between trying to fit the \n                  +1 training data exactly or allowing more errors but hopefully \n                  improving the generalization ability of the resulting classifier.  \n                  Smaller values encourage exact fitting while larger values may \n                  encourage better generalization. It is also worth noting that the \n                  number of iterations it takes for this algorithm to converge is \n                  proportional to 1/lambda.  So smaller values of this term cause \n                  the running time of this algorithm to increase.  For more \n                  information you should consult the paper referenced above.\n        !*/\n\n        const scalar_type get_lambda_class2 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization term for the -1 class.  It has\n                  the same properties as the get_lambda_class1() parameter except that\n                  it applies to the -1 class.\n        !*/\n\n        const scalar_type get_tolerance (\n        ) const;\n        /*!\n            ensures\n                - returns the tolerance used by the internal kcentroid object to \n                  represent the learned decision function.  Smaller values of this \n                  tolerance will result in a more accurate representation of the \n                  decision function but will use more support vectors (up to\n                  a max of get_max_num_sv()).  \n        !*/\n\n        unsigned long get_max_num_sv (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of support vectors this object is\n                  allowed to use.\n        !*/\n\n        const kernel_type get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns the kernel used by this object\n        !*/\n\n        void set_kernel (\n            kernel_type k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k\n                - #get_train_count() == 0\n                  (i.e. clears any memory of previous training)\n        !*/\n\n        void set_tolerance (\n            double tol\n        );\n        /*!\n            requires\n                - tol > 0\n            ensures\n                - #get_tolerance() == tol\n                - #get_train_count() == 0\n                  (i.e. clears any memory of previous training)\n        !*/\n\n        void set_max_num_sv (\n            unsigned long max_num_sv\n        );\n        /*!\n            requires\n                - max_num_sv > 0\n            ensures\n                - #get_max_num_sv() == max_num_sv \n                - #get_train_count() == 0\n                  (i.e. clears any memory of previous training)\n        !*/\n\n        void set_lambda (\n            scalar_type lambda_\n        );\n        /*!\n            requires\n                - lambda_ > 0\n            ensures\n                - #get_lambda_class1() == lambda_\n                - #get_lambda_class2() == lambda_\n                - #get_train_count() == 0\n                  (i.e. clears any memory of previous training)\n        !*/\n\n        void set_lambda_class1 (\n            scalar_type lambda_\n        );\n        /*!\n            requires\n                - lambda_ > 0\n            ensures\n                - #get_lambda_class1() == lambda_ \n                  #get_train_count() == 0\n                  (i.e. clears any memory of previous training)\n        !*/\n\n        void set_lambda_class2 (\n            scalar_type lambda_\n        );\n        /*!\n            requires\n                - lambda_ > 0\n            ensures\n                - #get_lambda_class2() == lambda_ \n                  #get_train_count() == 0\n                  (i.e. clears any memory of previous training)\n        !*/\n\n        unsigned long get_train_count (\n        ) const;\n        /*!\n            ensures\n                - returns how many times this->train() has been called\n                  since this object was constructed or last cleared.  \n        !*/\n\n        scalar_type train (\n            const sample_type& x,\n            const scalar_type& y\n        );\n        /*!\n            requires\n                - y == 1 || y == -1\n            ensures\n                - trains this svm using the given sample x and label y\n                - #get_train_count() == get_train_count() + 1\n                - returns the current learning rate\n                  (i.e. 1/(get_train_count()*min(get_lambda_class1(),get_lambda_class2())) )\n        !*/\n\n        scalar_type operator() (\n            const sample_type& x\n        ) const;\n        /*!\n            ensures\n                - classifies the given x sample using the decision function\n                  this object has learned so far.  \n                - if (x is a sample predicted have +1 label) then\n                    - returns a number >= 0 \n                - else\n                    - returns a number < 0\n        !*/\n\n        const decision_function<kernel_type> get_decision_function (\n        ) const;\n        /*!\n            ensures\n                - returns a decision function F that represents the function learned \n                  by this object so far.  I.e. it is the case that:\n                    - for all x: F(x) == (*this)(x)\n        !*/\n\n        void swap (\n            svm_pegasos& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kern_type \n        >\n    void swap(\n        svm_pegasos<kern_type>& a, \n        svm_pegasos<kern_type>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n    template <\n        typename kern_type\n        >\n    void serialize (\n        const svm_pegasos<kern_type>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for svm_pegasos objects\n    !*/\n\n    template <\n        typename kern_type \n        >\n    void deserialize (\n        svm_pegasos<kern_type>& item,\n        std::istream& in \n    );\n    /*!\n        provides serialization support for svm_pegasos objects\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    void replicate_settings (\n        const svm_pegasos<T>& source,\n        svm_pegasos<U>& dest\n    );\n    /*!\n        ensures\n            - copies all the parameters from the source trainer to the dest trainer.\n            - #dest.get_tolerance() == source.get_tolerance()\n            - #dest.get_lambda_class1() == source.get_lambda_class1()\n            - #dest.get_lambda_class2() == source.get_lambda_class2()\n            - #dest.get_max_num_sv() == source.get_max_num_sv()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    class batch_trainer \n    {\n        /*!\n            REQUIREMENTS ON trainer_type\n                - trainer_type == some kind of online trainer object (e.g. svm_pegasos)\n                  replicate_settings() must also be defined for the type.\n\n            WHAT THIS OBJECT REPRESENTS\n                This is a trainer object that is meant to wrap online trainer objects \n                that create decision_functions. It turns an online learning algorithm \n                such as svm_pegasos into a batch learning object.  This allows you to \n                use objects like svm_pegasos with functions (e.g. cross_validate_trainer) \n                that expect batch mode training objects.\n        !*/\n\n    public:\n        typedef typename trainer_type::kernel_type kernel_type;\n        typedef typename trainer_type::scalar_type scalar_type;\n        typedef typename trainer_type::sample_type sample_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n        typedef typename trainer_type::trained_function_type trained_function_type;\n\n\n        batch_trainer (\n        );\n        /*!\n            ensures\n                - This object is in an uninitialized state.  You must\n                  construct a real one with the other constructor and assign it\n                  to this instance before you use this object.\n        !*/\n\n        batch_trainer (\n            const trainer_type& online_trainer, \n            const scalar_type min_learning_rate_,\n            bool verbose_,\n            bool use_cache_,\n            long cache_size_ = 100\n        );\n        /*!\n            requires\n                - min_learning_rate_ > 0\n                - cache_size_ > 0\n            ensures\n                - returns a batch trainer object that uses the given online_trainer object\n                  to train a decision function.\n                - #get_min_learning_rate() == min_learning_rate_\n                - if (verbose_ == true) then\n                    - this object will output status messages to standard out while\n                      training is under way.\n                - if (use_cache_ == true) then\n                    - this object will cache up to cache_size_ columns of the kernel \n                      matrix during the training process.\n        !*/\n\n        const scalar_type get_min_learning_rate (\n        ) const;\n        /*!\n            ensures\n                - returns the min learning rate that the online trainer must reach\n                  before this object considers training to be complete.\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            ensures\n                - trains and returns a decision_function using the trainer that was \n                  supplied to this object's constructor.\n                - training continues until the online training object indicates that\n                  its learning rate has dropped below get_min_learning_rate().\n            throws\n                - std::bad_alloc\n                - any exceptions thrown by the trainer_type object\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const batch_trainer<trainer_type> batch (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type min_learning_rate = 0.1\n    ) { return batch_trainer<trainer_type>(trainer, min_learning_rate, false, false); }\n    /*!\n        requires\n            - min_learning_rate > 0\n            - trainer_type == some kind of online trainer object that creates decision_function\n              objects (e.g. svm_pegasos).  replicate_settings() must also be defined for the type.\n        ensures\n            - returns a batch_trainer object that has been instantiated with the \n              given arguments.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const batch_trainer<trainer_type> verbose_batch (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type min_learning_rate = 0.1\n    ) { return batch_trainer<trainer_type>(trainer, min_learning_rate, true, false); }\n    /*!\n        requires\n            - min_learning_rate > 0\n            - trainer_type == some kind of online trainer object that creates decision_function\n              objects (e.g. svm_pegasos).  replicate_settings() must also be defined for the type.\n        ensures\n            - returns a batch_trainer object that has been instantiated with the \n              given arguments (and is verbose).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const batch_trainer<trainer_type> batch_cached (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type min_learning_rate = 0.1,\n        long cache_size = 100\n    ) { return batch_trainer<trainer_type>(trainer, min_learning_rate, false, true, cache_size); }\n    /*!\n        requires\n            - min_learning_rate > 0\n            - cache_size > 0\n            - trainer_type == some kind of online trainer object that creates decision_function\n              objects (e.g. svm_pegasos).  replicate_settings() must also be defined for the type.\n        ensures\n            - returns a batch_trainer object that has been instantiated with the \n              given arguments (uses a kernel cache).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const batch_trainer<trainer_type> verbose_batch_cached (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type min_learning_rate = 0.1,\n        long cache_size = 100\n    ) { return batch_trainer<trainer_type>(trainer, min_learning_rate, true, true, cache_size); }\n    /*!\n        requires\n            - min_learning_rate > 0\n            - cache_size > 0\n            - trainer_type == some kind of online trainer object that creates decision_function\n              objects (e.g. svm_pegasos).  replicate_settings() must also be defined for the type.\n        ensures\n            - returns a batch_trainer object that has been instantiated with the \n              given arguments (is verbose and uses a kernel cache).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n\n}\n\n#endif // DLIB_PEGASoS_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/ranking_tools.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RANKING_ToOLS_Hh_\n#define DLIB_RANKING_ToOLS_Hh_\n\n#include \"ranking_tools_abstract.h\"\n\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include <vector>\n#include <utility>\n#include <algorithm>\n#include \"sparse_vector.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct ranking_pair\n    {\n        ranking_pair() {}\n\n        ranking_pair(\n            const std::vector<T>& r, \n            const std::vector<T>& nr\n        ) :\n            relevant(r), nonrelevant(nr) \n        {}\n\n        std::vector<T> relevant;\n        std::vector<T> nonrelevant;\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const ranking_pair<T>& item,\n        std::ostream& out\n    )\n    {\n        int version = 1;\n        serialize(version, out);\n        serialize(item.relevant, out);\n        serialize(item.nonrelevant, out);\n    }\n\n\n    template <\n        typename T\n        >\n    void deserialize (\n        ranking_pair<T>& item,\n        std::istream& in \n    )\n    {\n        int version = 0;\n        deserialize(version, in);\n        if (version != 1)\n            throw dlib::serialization_error(\"Wrong version found while deserializing dlib::ranking_pair\");\n\n        deserialize(item.relevant, in);\n        deserialize(item.nonrelevant, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    typename disable_if<is_matrix<T>,bool>::type is_ranking_problem (\n        const std::vector<ranking_pair<T> >& samples\n    )\n    {\n        if (samples.size() == 0)\n            return false;\n\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            if (samples[i].relevant.size() == 0)\n                return false;\n            if (samples[i].nonrelevant.size() == 0)\n                return false;\n        }\n\n        return true;\n    }\n\n    template <\n        typename T\n        >\n    typename enable_if<is_matrix<T>,bool>::type is_ranking_problem (\n        const std::vector<ranking_pair<T> >& samples\n    )\n    {\n        if (samples.size() == 0)\n            return false;\n\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            if (samples[i].relevant.size() == 0)\n                return false;\n            if (samples[i].nonrelevant.size() == 0)\n                return false;\n        }\n\n        // If these are dense vectors then they must all have the same dimensionality.\n        const long dims = max_index_plus_one(samples[0].relevant);\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            for (unsigned long j = 0; j < samples[i].relevant.size(); ++j)\n            {\n                if (is_vector(samples[i].relevant[j]) == false)\n                    return false;\n\n                if (samples[i].relevant[j].size() != dims)\n                    return false;\n            }\n            for (unsigned long j = 0; j < samples[i].nonrelevant.size(); ++j)\n            {\n                if (is_vector(samples[i].nonrelevant[j]) == false)\n                    return false;\n\n                if (samples[i].nonrelevant[j].size() != dims)\n                    return false;\n            }\n        }\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    unsigned long max_index_plus_one (\n        const ranking_pair<T>& item\n    )\n    {\n        return std::max(max_index_plus_one(item.relevant), max_index_plus_one(item.nonrelevant));\n    }\n\n    template <\n        typename T\n        >\n    unsigned long max_index_plus_one (\n        const std::vector<ranking_pair<T> >& samples\n    )\n    {\n        unsigned long dims = 0;\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            dims = std::max(dims, max_index_plus_one(samples[i]));\n        }\n        return dims;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void count_ranking_inversions (\n        const std::vector<T>& x,\n        const std::vector<T>& y,\n        std::vector<unsigned long>& x_count,\n        std::vector<unsigned long>& y_count\n    )\n    {\n        x_count.assign(x.size(),0);\n        y_count.assign(y.size(),0);\n\n        if (x.size() == 0 || y.size() == 0)\n            return;\n\n        std::vector<std::pair<T,unsigned long> > xsort(x.size());\n        std::vector<std::pair<T,unsigned long> > ysort(y.size());\n        for (unsigned long i = 0; i < x.size(); ++i)\n            xsort[i] = std::make_pair(x[i], i);\n        for (unsigned long j = 0; j < y.size(); ++j)\n            ysort[j] = std::make_pair(y[j], j);\n\n        std::sort(xsort.begin(), xsort.end());\n        std::sort(ysort.begin(), ysort.end());\n\n\n        unsigned long i, j;\n\n        // Do the counting for the x values.\n        for (i = 0, j = 0; i < x_count.size(); ++i)\n        {\n            // Skip past y values that are in the correct order with respect to xsort[i].\n            while (j < ysort.size() && ysort[j].first < xsort[i].first) \n                ++j;\n\n            x_count[xsort[i].second] = ysort.size() - j;\n        }\n\n\n        // Now do the counting for the y values.\n        for (i = 0, j = 0; j < y_count.size(); ++j)\n        {\n            // Skip past x values that are in the incorrect order with respect to ysort[j].\n            while (i < xsort.size() && !(ysort[j].first < xsort[i].first)) \n                ++i;\n\n            y_count[ysort[j].second] = i;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        inline bool compare_first_reverse_second (\n            const std::pair<double,bool>& a,\n            const std::pair<double,bool>& b\n        )\n        {\n            if (a.first < b.first)\n                return true;\n            else if (a.first > b.first)\n                return false;\n            else if (a.second && !b.second)\n                return true;\n            else\n                return false;\n        }\n    }\n\n    template <\n        typename ranking_function,\n        typename T\n        >\n    matrix<double,1,2> test_ranking_function (\n        const ranking_function& funct,\n        const std::vector<ranking_pair<T> >& samples\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_ranking_problem(samples),\n            \"\\t double test_ranking_function()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t samples.size(): \" << samples.size() \n            << \"\\n\\t is_ranking_problem(samples): \" << is_ranking_problem(samples)\n            );\n\n        unsigned long total_pairs = 0;\n        unsigned long total_wrong = 0;\n\n        std::vector<double> rel_scores;\n        std::vector<double> nonrel_scores;\n        std::vector<unsigned long> rel_counts;\n        std::vector<unsigned long> nonrel_counts;\n\n        running_stats<double> rs;\n        std::vector<std::pair<double,bool> > total_scores;\n        std::vector<bool> total_ranking;\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            rel_scores.resize(samples[i].relevant.size());\n            nonrel_scores.resize(samples[i].nonrelevant.size());\n            total_scores.clear();\n\n            for (unsigned long k = 0; k < rel_scores.size(); ++k)\n            {\n                rel_scores[k] = funct(samples[i].relevant[k]);\n                total_scores.push_back(std::make_pair(rel_scores[k], true));\n            }\n\n            for (unsigned long k = 0; k < nonrel_scores.size(); ++k)\n            {\n                nonrel_scores[k] = funct(samples[i].nonrelevant[k]);\n                total_scores.push_back(std::make_pair(nonrel_scores[k], false));\n            }\n\n            // Now compute the average precision for this sample.  We need to sort the\n            // results and the back them into total_ranking.  Note that we sort them so\n            // that, if you get a block of ranking values that are all equal, the elements\n            // marked as true will come last.  This prevents a ranking from outputting a\n            // constant value for everything and still getting a good MAP score.\n            std::sort(total_scores.rbegin(), total_scores.rend(), impl::compare_first_reverse_second);\n            total_ranking.clear();\n            for (unsigned long i = 0; i < total_scores.size(); ++i)\n                total_ranking.push_back(total_scores[i].second);\n            rs.add(average_precision(total_ranking));\n\n\n            count_ranking_inversions(rel_scores, nonrel_scores, rel_counts, nonrel_counts);\n\n            total_pairs += rel_scores.size()*nonrel_scores.size();\n\n            // Note that we don't need to look at nonrel_counts since it is redundant with\n            // the information in rel_counts in this case.\n            total_wrong += sum(mat(rel_counts));\n        }\n\n        const double rank_swaps = static_cast<double>(total_pairs - total_wrong) / total_pairs;\n        const double mean_average_precision = rs.mean();\n        matrix<double,1,2> res;\n        res = rank_swaps, mean_average_precision;\n        return res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename ranking_function,\n        typename T\n        >\n    matrix<double,1,2> test_ranking_function (\n        const ranking_function& funct,\n        const ranking_pair<T>& sample\n    )\n    {\n        return test_ranking_function(funct, std::vector<ranking_pair<T> >(1,sample));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename T\n        >\n    matrix<double,1,2> cross_validate_ranking_trainer (\n        const trainer_type& trainer,\n        const std::vector<ranking_pair<T> >& samples,\n        const long folds\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_ranking_problem(samples) &&\n                    1 < folds && folds <= static_cast<long>(samples.size()),\n            \"\\t double cross_validate_ranking_trainer()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t samples.size(): \" << samples.size() \n            << \"\\n\\t folds:  \" << folds \n            << \"\\n\\t is_ranking_problem(samples): \" << is_ranking_problem(samples)\n            );\n\n\n        const long num_in_test  = samples.size()/folds;\n        const long num_in_train = samples.size() - num_in_test;\n\n\n        std::vector<ranking_pair<T> > samples_test, samples_train;\n\n\n        long next_test_idx = 0;\n\n        unsigned long total_pairs = 0;\n        unsigned long total_wrong = 0;\n\n        std::vector<double> rel_scores;\n        std::vector<double> nonrel_scores;\n        std::vector<unsigned long> rel_counts;\n        std::vector<unsigned long> nonrel_counts;\n\n        running_stats<double> rs;\n        std::vector<std::pair<double,bool> > total_scores;\n        std::vector<bool> total_ranking;\n\n        for (long i = 0; i < folds; ++i)\n        {\n            samples_test.clear();\n            samples_train.clear();\n\n            // load up the test samples\n            for (long cnt = 0; cnt < num_in_test; ++cnt)\n            {\n                samples_test.push_back(samples[next_test_idx]);\n                next_test_idx = (next_test_idx + 1)%samples.size();\n            }\n\n            // load up the training samples\n            long next = next_test_idx;\n            for (long cnt = 0; cnt < num_in_train; ++cnt)\n            {\n                samples_train.push_back(samples[next]);\n                next = (next + 1)%samples.size();\n            }\n\n\n            const typename trainer_type::trained_function_type& df = trainer.train(samples_train);\n\n            // check how good df is on the test data\n            for (unsigned long i = 0; i < samples_test.size(); ++i)\n            {\n                rel_scores.resize(samples_test[i].relevant.size());\n                nonrel_scores.resize(samples_test[i].nonrelevant.size());\n\n                total_scores.clear();\n\n                for (unsigned long k = 0; k < rel_scores.size(); ++k)\n                {\n                    rel_scores[k] = df(samples_test[i].relevant[k]);\n                    total_scores.push_back(std::make_pair(rel_scores[k], true));\n                }\n\n                for (unsigned long k = 0; k < nonrel_scores.size(); ++k)\n                {\n                    nonrel_scores[k] = df(samples_test[i].nonrelevant[k]);\n                    total_scores.push_back(std::make_pair(nonrel_scores[k], false));\n                }\n\n                // Now compute the average precision for this sample.  We need to sort the\n                // results and the back them into total_ranking.  Note that we sort them so\n                // that, if you get a block of ranking values that are all equal, the elements\n                // marked as true will come last.  This prevents a ranking from outputting a\n                // constant value for everything and still getting a good MAP score.\n                std::sort(total_scores.rbegin(), total_scores.rend(), impl::compare_first_reverse_second);\n                total_ranking.clear();\n                for (unsigned long i = 0; i < total_scores.size(); ++i)\n                    total_ranking.push_back(total_scores[i].second);\n                rs.add(average_precision(total_ranking));\n\n\n                count_ranking_inversions(rel_scores, nonrel_scores, rel_counts, nonrel_counts);\n\n                total_pairs += rel_scores.size()*nonrel_scores.size();\n\n                // Note that we don't need to look at nonrel_counts since it is redundant with\n                // the information in rel_counts in this case.\n                total_wrong += sum(mat(rel_counts));\n            }\n\n        } // for (long i = 0; i < folds; ++i)\n\n        const double rank_swaps = static_cast<double>(total_pairs - total_wrong) / total_pairs;\n        const double mean_average_precision = rs.mean();\n        matrix<double,1,2> res;\n        res = rank_swaps, mean_average_precision;\n        return res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RANKING_ToOLS_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/ranking_tools_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RANKING_ToOLS_ABSTRACT_Hh_\n#ifdef DLIB_RANKING_ToOLS_ABSTRACT_Hh_\n\n\n#include \"../algs.h\"\n#include \"../matrix.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct ranking_pair\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is used to contain a ranking example.  In particular, we say\n                that a good ranking of T objects is one in which all the elements in\n                this->relevant are ranked higher than the elements of this->nonrelevant.\n                Therefore, ranking_pair objects are used to represent training examples for\n                learning-to-rank tasks.\n        !*/\n\n        ranking_pair() {}\n        /*!\n            ensures\n                - #relevant.size() == 0\n                - #nonrelevant.size() == 0\n        !*/\n\n        ranking_pair(\n            const std::vector<T>& r, \n            const std::vector<T>& nr\n        ) : relevant(r), nonrelevant(nr) {}\n        /*!\n            ensures\n                - #relevant == r\n                - #nonrelevant == nr\n        !*/\n\n        std::vector<T> relevant;\n        std::vector<T> nonrelevant;\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const ranking_pair<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        ranking_pair<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool is_ranking_problem (\n        const std::vector<ranking_pair<T> >& samples\n    );\n    /*!\n        ensures\n            - returns true if the data in samples represents a valid learning-to-rank\n              learning problem.  That is, this function returns true if all of the\n              following are true and false otherwise:\n                - samples.size() > 0\n                - for all valid i:\n                    - samples[i].relevant.size() > 0\n                    - samples[i].nonrelevant.size() > 0\n                - if (is_matrix<T>::value == true) then \n                    - All the elements of samples::nonrelevant and samples::relevant must\n                      represent row or column vectors and they must be the same dimension.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    unsigned long max_index_plus_one (\n        const ranking_pair<T>& item\n    );\n    /*!\n        requires\n            - T must be a dlib::matrix capable of storing column vectors or T must be a\n              sparse vector type as defined in dlib/svm/sparse_vector_abstract.h.\n        ensures\n            - returns std::max(max_index_plus_one(item.relevant), max_index_plus_one(item.nonrelevant)).\n              Therefore, this function can be used to find the dimensionality of the\n              vectors stored in item.\n    !*/\n\n    template <\n        typename T\n        >\n    unsigned long max_index_plus_one (\n        const std::vector<ranking_pair<T> >& samples\n    );\n    /*!\n        requires\n            - T must be a dlib::matrix capable of storing column vectors or T must be a\n              sparse vector type as defined in dlib/svm/sparse_vector_abstract.h.\n        ensures\n            - returns the maximum of max_index_plus_one(samples[i]) over all valid values\n              of i.  Therefore, this function can be used to find the dimensionality of the\n              vectors stored in samples\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void count_ranking_inversions (\n        const std::vector<T>& x,\n        const std::vector<T>& y,\n        std::vector<unsigned long>& x_count,\n        std::vector<unsigned long>& y_count\n    );\n    /*!\n        requires\n            - T objects must be copyable\n            - T objects must be comparable via operator<\n        ensures\n            - This function counts how many times we see a y value greater than or equal to\n              an x value.  This is done efficiently in O(n*log(n)) time via the use of\n              quick sort.\n            - #x_count.size() == x.size()\n            - #y_count.size() == y.size()\n            - for all valid i:\n                - #x_count[i] == how many times a value in y was >= x[i].\n            - for all valid j:\n                - #y_count[j] == how many times a value in x was <= y[j].\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename ranking_function,\n        typename T\n        >\n    matrix<double,1,2> test_ranking_function (\n        const ranking_function& funct,\n        const std::vector<ranking_pair<T> >& samples\n    );\n    /*!\n        requires\n            - is_ranking_problem(samples) == true\n            - ranking_function == some kind of decision function object (e.g. decision_function)\n        ensures\n            - Tests the given ranking function on the supplied example ranking data and\n              returns the fraction of ranking pair orderings predicted correctly.  This is\n              a number in the range [0,1] where 0 means everything was incorrectly\n              predicted while 1 means everything was correctly predicted.  This function\n              also returns the mean average precision.\n            - In particular, this function returns a matrix M summarizing the results.\n              Specifically, it returns an M such that:\n                - M(0) == the fraction of times that the following is true:                \n                    - funct(samples[k].relevant[i]) > funct(samples[k].nonrelevant[j])\n                      (for all valid i,j,k)\n                - M(1) == the mean average precision of the rankings induced by funct.\n                  (Mean average precision is a number in the range 0 to 1.  Moreover, a\n                  mean average precision of 1 means everything was correctly predicted\n                  while smaller values indicate worse rankings.  See the documentation\n                  for average_precision() for details of its computation.)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename ranking_function,\n        typename T\n        >\n    matrix<double,1,2> test_ranking_function (\n        const ranking_function& funct,\n        const ranking_pair<T>& sample\n    );\n    /*!\n        requires\n            - is_ranking_problem(std::vector<ranking_pair<T> >(1, sample)) == true\n            - ranking_function == some kind of decision function object (e.g. decision_function)\n        ensures\n            - This is just a convenience routine for calling the above\n              test_ranking_function() routine.  That is, it just copies sample into a\n              std::vector object and invokes the above test_ranking_function() routine.\n              This means that calling this function is equivalent to invoking: \n                return test_ranking_function(funct, std::vector<ranking_pair<T> >(1, sample));\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename T\n        >\n    matrix<double,1,2> cross_validate_ranking_trainer (\n        const trainer_type& trainer,\n        const std::vector<ranking_pair<T> >& samples,\n        const long folds\n    );\n    /*!\n        requires\n            - is_ranking_problem(samples) == true\n            - 1 < folds <= samples.size()\n            - trainer_type == some kind of ranking trainer object (e.g. svm_rank_trainer)\n        ensures\n            - Performs k-fold cross validation by using the given trainer to solve the\n              given ranking problem for the given number of folds.  Each fold is tested\n              using the output of the trainer and the average ranking accuracy as well as\n              the mean average precision over the number of folds is returned.\n            - The accuracy is computed the same way test_ranking_function() computes its\n              accuracy.  Therefore, it is a number in the range [0,1] that represents the\n              fraction of times a ranking pair's ordering was predicted correctly.  Similarly,\n              the mean average precision is computed identically to test_ranking_function().\n              In particular, this means that this function returns a matrix M such that:\n                - M(0) == the ranking accuracy\n                - M(1) == the mean average precision\n            - The number of folds used is given by the folds argument.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RANKING_ToOLS_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/rbf_network.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RBf_NETWORK_\n#define DLIB_RBf_NETWORK_\n\n#include \"../matrix.h\"\n#include \"rbf_network_abstract.h\"\n#include \"kernel.h\"\n#include \"linearly_independent_subset_finder.h\"\n#include \"function.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ------------------------------------------------------------------------------\n\n    template <\n        typename Kern \n        >\n    class rbf_network_trainer \n    {\n        /*!\n            This is an implementation of an RBF network trainer that follows\n            the directions right off Wikipedia basically.  So nothing \n            particularly fancy.  Although the way the centers are selected\n            is somewhat unique.\n        !*/\n\n    public:\n        typedef Kern kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        rbf_network_trainer (\n        ) :\n            num_centers(10)\n        {\n        }\n\n        void set_kernel (\n            const kernel_type& k\n        )\n        {\n            kernel = k;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel;\n        }\n\n        void set_num_centers (\n            const unsigned long num \n        )\n        {\n            num_centers = num;\n        }\n\n        unsigned long get_num_centers (\n        ) const\n        {\n            return num_centers;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            return do_train(mat(x), mat(y));\n        }\n\n        void swap (\n            rbf_network_trainer& item\n        )\n        {\n            exchange(kernel, item.kernel);\n            exchange(num_centers, item.num_centers);\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            typedef typename decision_function<kernel_type>::scalar_vector_type scalar_vector_type;\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(x,y),\n                \"\\tdecision_function rbf_network_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t y.nr(): \" << y.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                << \"\\n\\t y.nc(): \" << y.nc() \n                );\n\n            // use the linearly_independent_subset_finder object to select the centers.  So here\n            // we show it all the data samples so it can find the best centers.\n            linearly_independent_subset_finder<kernel_type> lisf(kernel, num_centers);\n            fill_lisf(lisf, x);\n\n            const long num_centers = lisf.size();\n\n            // fill the K matrix with the output of the kernel for all the center and sample point pairs\n            matrix<scalar_type,0,0,mem_manager_type> K(x.nr(), num_centers+1);\n            for (long r = 0; r < x.nr(); ++r)\n            {\n                for (long c = 0; c < num_centers; ++c)\n                {\n                    K(r,c) = kernel(x(r), lisf[c]);\n                }\n                // This last column of the K matrix takes care of the bias term\n                K(r,num_centers) = 1;\n            }\n\n            // compute the best weights by using the pseudo-inverse\n            scalar_vector_type weights(pinv(K)*y);\n\n            // now put everything into a decision_function object and return it\n            return decision_function<kernel_type> (remove_row(weights,num_centers),\n                                                   -weights(num_centers),\n                                                   kernel,\n                                                   lisf.get_dictionary());\n\n        }\n\n        kernel_type kernel;\n        unsigned long num_centers;\n\n    }; // end of class rbf_network_trainer \n\n// ----------------------------------------------------------------------------------------\n\n    template <typename sample_type>\n    void swap (\n        rbf_network_trainer<sample_type>& a,\n        rbf_network_trainer<sample_type>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RBf_NETWORK_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/rbf_network_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RBf_NETWORK_ABSTRACT_\n#ifdef DLIB_RBf_NETWORK_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class rbf_network_trainer \n    {\n        /*!\n            REQUIREMENTS ON K \n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n                (since this is supposed to be a RBF network it is probably reasonable\n                to use some sort of radial basis kernel)\n\n            INITIAL VALUE\n                - get_num_centers() == 10 \n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements a trainer for a radial basis function network.\n\n                The implementation of this algorithm follows the normal RBF training \n                process.  For more details see the code or the Wikipedia article\n                about RBF networks.  \n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        rbf_network_trainer (\n        ); \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void set_kernel (\n            const kernel_type& k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k \n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object\n        !*/\n\n        void set_num_centers (\n            const unsigned long num_centers\n        );\n        /*!\n            ensures\n                - #get_num_centers() == num_centers\n        !*/\n\n        const unsigned long get_num_centers (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of centers (a.k.a. basis_vectors in the \n                  trained decision_function) you will get when you train this object on data.\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        /*!\n            requires\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n                - is_learning_problem(x,y) == true\n            ensures\n                - trains a RBF network given the training samples in x and \n                  labels in y and returns the resulting decision_function\n            throws\n                - std::bad_alloc\n        !*/\n\n        void swap (\n            rbf_network_trainer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K>\n    void swap (\n        rbf_network_trainer<K>& a,\n        rbf_network_trainer<K>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RBf_NETWORK_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/reduced.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_REDUCEd_TRAINERS_\n#define DLIB_REDUCEd_TRAINERS_\n\n#include \"reduced_abstract.h\"\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"kcentroid.h\"\n#include \"linearly_independent_subset_finder.h\"\n#include \"../optimization.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type \n        >\n    class reduced_decision_function_trainer\n    {\n    public:\n        typedef typename trainer_type::kernel_type kernel_type;\n        typedef typename trainer_type::scalar_type scalar_type;\n        typedef typename trainer_type::sample_type sample_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n        typedef typename trainer_type::trained_function_type trained_function_type;\n\n        reduced_decision_function_trainer (\n        ) :num_bv(0) {}\n\n        reduced_decision_function_trainer (\n            const trainer_type& trainer_,\n            const unsigned long num_sb_ \n        ) :\n            trainer(trainer_),\n            num_bv(num_sb_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(num_bv > 0,\n                        \"\\t reduced_decision_function_trainer()\"\n                        << \"\\n\\t you have given invalid arguments to this function\"\n                        << \"\\n\\t num_bv: \" << num_bv \n            );\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(num_bv > 0,\n                        \"\\t reduced_decision_function_trainer::train(x,y)\"\n                        << \"\\n\\t You have tried to use an uninitialized version of this object\"\n                        << \"\\n\\t num_bv: \" << num_bv );\n            return do_train(mat(x), mat(y));\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            // get the decision function object we are going to try and approximate\n            const decision_function<kernel_type>& dec_funct = trainer.train(x,y);\n            \n            // now find a linearly independent subset of the training points of num_bv points.\n            linearly_independent_subset_finder<kernel_type> lisf(dec_funct.kernel_function, num_bv);\n            fill_lisf(lisf, x);\n\n            // The next few statements just find the best weights with which to approximate \n            // the dec_funct object with the smaller set of vectors in the lisf dictionary.  This\n            // is really just a simple application of some linear algebra.  For the details \n            // see page 554 of Learning with kernels by Scholkopf and Smola where they talk \n            // about \"Optimal Expansion Coefficients.\"\n\n            const kernel_type kern(dec_funct.kernel_function);\n\n            matrix<scalar_type,0,1,mem_manager_type> alpha;\n\n            alpha = lisf.get_inv_kernel_marix()*(kernel_matrix(kern,lisf,dec_funct.basis_vectors)*dec_funct.alpha);\n\n            decision_function<kernel_type> new_df(alpha, \n                                                  0,\n                                                  kern, \n                                                  lisf.get_dictionary());\n\n            // now we have to figure out what the new bias should be.  It might be a little\n            // different since we just messed with all the weights and vectors.\n            double bias = 0;\n            for (long i = 0; i < x.nr(); ++i)\n            {\n                bias += new_df(x(i)) - dec_funct(x(i));\n            }\n            \n            new_df.b = bias/x.nr();\n\n            return new_df;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        trainer_type trainer;\n        unsigned long num_bv; \n\n\n    }; // end of class reduced_decision_function_trainer\n\n    template <typename trainer_type>\n    const reduced_decision_function_trainer<trainer_type> reduced (\n        const trainer_type& trainer,\n        const unsigned long num_bv\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(num_bv > 0,\n                    \"\\tconst reduced_decision_function_trainer reduced()\"\n                    << \"\\n\\t you have given invalid arguments to this function\"\n                    << \"\\n\\t num_bv: \" << num_bv \n        );\n\n        return reduced_decision_function_trainer<trainer_type>(trainer, num_bv);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace red_impl\n    {\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename kernel_type>\n        class objective\n        {\n            /*\n                This object represents the objective function we will try to\n                minimize in approximate_distance_function().  \n\n                The objective is the distance, in kernel induced feature space, between\n                the original distance function and the approximated version.\n\n            */\n            typedef typename kernel_type::scalar_type scalar_type;\n            typedef typename kernel_type::sample_type sample_type;\n            typedef typename kernel_type::mem_manager_type mem_manager_type;\n        public:\n            objective(\n                const distance_function<kernel_type>& dist_funct_,\n                matrix<scalar_type,0,1,mem_manager_type>& b_,\n                matrix<sample_type,0,1,mem_manager_type>& out_vectors_\n            ) :\n                dist_funct(dist_funct_),\n                b(b_),\n                out_vectors(out_vectors_)\n            {\n            }\n\n            const matrix<scalar_type, 0, 1, mem_manager_type> state_to_vector (\n            ) const\n            /*!\n                ensures\n                    - returns a vector that contains all the information necessary to\n                      reproduce the current state of the approximated distance function\n            !*/\n            {\n                matrix<scalar_type, 0, 1, mem_manager_type> z(b.nr() + out_vectors.size()*out_vectors(0).nr());\n                long i = 0;\n                for (long j = 0; j < b.nr(); ++j)\n                {\n                    z(i) = b(j);\n                    ++i;\n                }\n\n                for (long j = 0; j < out_vectors.size(); ++j)\n                {\n                    for (long k = 0; k < out_vectors(j).size(); ++k)\n                    {\n                        z(i) = out_vectors(j)(k);\n                        ++i;\n                    }\n                }\n                return z;\n            }\n\n\n            void vector_to_state (\n                const matrix<scalar_type, 0, 1, mem_manager_type>& z\n            ) const\n            /*!\n                requires\n                    - z came from the state_to_vector() function or has a compatible format\n                ensures\n                    - loads the vector z into the state variables of the approximate\n                      distance function (i.e. b and out_vectors)\n            !*/\n            {\n                long i = 0;\n                for (long j = 0; j < b.nr(); ++j)\n                {\n                    b(j) = z(i);\n                    ++i;\n                }\n\n                for (long j = 0; j < out_vectors.size(); ++j)\n                {\n                    for (long k = 0; k < out_vectors(j).size(); ++k)\n                    {\n                        out_vectors(j)(k) = z(i);\n                        ++i;\n                    }\n                }\n            }\n\n            double operator() (\n                const matrix<scalar_type, 0, 1, mem_manager_type>& z\n            ) const\n            /*!\n                ensures\n                    - loads the current approximate distance function with z\n                    - returns the distance between the original distance function\n                      and the approximate one.\n            !*/\n            {\n                vector_to_state(z);\n                const kernel_type k(dist_funct.get_kernel());\n\n                double temp = 0;\n                for (long i = 0; i < out_vectors.size(); ++i)\n                {\n                    for (long j = 0; j < dist_funct.get_basis_vectors().nr(); ++j)\n                    {\n                        temp -= b(i)*dist_funct.get_alpha()(j)*k(out_vectors(i), dist_funct.get_basis_vectors()(j));\n                    }\n                }\n\n                temp *= 2;\n\n                for (long i = 0; i < out_vectors.size(); ++i)\n                {\n                    for (long j = 0; j < out_vectors.size(); ++j)\n                    {\n                        temp += b(i)*b(j)*k(out_vectors(i), out_vectors(j));\n                    }\n                }\n\n                return temp + dist_funct.get_squared_norm();\n            }\n\n        private:\n\n            const distance_function<kernel_type>& dist_funct;\n            matrix<scalar_type,0,1,mem_manager_type>& b;\n            matrix<sample_type,0,1,mem_manager_type>& out_vectors;\n\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename kernel_type>\n        class objective_derivative\n        {\n            /*!\n                This object represents the derivative of the objective object\n            !*/\n            typedef typename kernel_type::scalar_type scalar_type;\n            typedef typename kernel_type::sample_type sample_type;\n            typedef typename kernel_type::mem_manager_type mem_manager_type;\n        public:\n\n\n            objective_derivative(\n                const distance_function<kernel_type>& dist_funct_,\n                matrix<scalar_type,0,1,mem_manager_type>& b_,\n                matrix<sample_type,0,1,mem_manager_type>& out_vectors_\n            ) :\n                dist_funct(dist_funct_),\n                b(b_),\n                out_vectors(out_vectors_)\n            {\n            }\n\n            void vector_to_state (\n                const matrix<scalar_type, 0, 1, mem_manager_type>& z\n            ) const\n            /*!\n                requires\n                    - z came from the state_to_vector() function or has a compatible format\n                ensures\n                    - loads the vector z into the state variables of the approximate\n                      distance function (i.e. b and out_vectors)\n            !*/\n            {\n                long i = 0;\n                for (long j = 0; j < b.nr(); ++j)\n                {\n                    b(j) = z(i);\n                    ++i;\n                }\n\n                for (long j = 0; j < out_vectors.size(); ++j)\n                {\n                    for (long k = 0; k < out_vectors(j).size(); ++k)\n                    {\n                        out_vectors(j)(k) = z(i);\n                        ++i;\n                    }\n                }\n            }\n\n            const matrix<scalar_type,0,1,mem_manager_type>& operator() (\n                const matrix<scalar_type, 0, 1, mem_manager_type>& z\n            ) const\n            /*!\n                ensures\n                    - loads the current approximate distance function with z\n                    - returns the derivative of the distance between the original \n                      distance function and the approximate one.\n            !*/\n            {\n                vector_to_state(z);\n                res.set_size(z.nr());\n                set_all_elements(res,0);\n                const kernel_type k(dist_funct.get_kernel());\n                const kernel_derivative<kernel_type> K_der(k);\n\n                // first compute the gradient for the beta weights\n                for (long i = 0; i < out_vectors.size(); ++i)\n                {\n                    for (long j = 0; j < out_vectors.size(); ++j)\n                    {\n                        res(i) += b(j)*k(out_vectors(i), out_vectors(j)); \n                    }\n                }\n                for (long i = 0; i < out_vectors.size(); ++i)\n                {\n                    for (long j = 0; j < dist_funct.get_basis_vectors().size(); ++j)\n                    {\n                        res(i) -= dist_funct.get_alpha()(j)*k(out_vectors(i), dist_funct.get_basis_vectors()(j)); \n                    }\n                }\n\n\n                // now compute the gradient of the actual vectors that go into the kernel functions\n                long pos = out_vectors.size();\n                const long num = out_vectors(0).nr();\n                temp.set_size(num,1);\n                for (long i = 0; i < out_vectors.size(); ++i)\n                {\n                    set_all_elements(temp,0);\n                    for (long j = 0; j < out_vectors.size(); ++j)\n                    {\n                        temp += b(j)*K_der(out_vectors(j), out_vectors(i));\n                    }\n                    for (long j = 0; j < dist_funct.get_basis_vectors().nr(); ++j)\n                    {\n                        temp -= dist_funct.get_alpha()(j)*K_der(dist_funct.get_basis_vectors()(j), out_vectors(i) );\n                    }\n\n                    // store the gradient for out_vectors(i) into result in the proper spot\n                    set_subm(res,pos,0,num,1) = b(i)*temp;\n                    pos += num;\n                }\n\n\n                res *= 2;\n                return res;\n            }\n\n        private:\n\n            mutable matrix<scalar_type, 0, 1, mem_manager_type> res;\n            mutable sample_type temp;\n\n            const distance_function<kernel_type>& dist_funct;\n            matrix<scalar_type,0,1,mem_manager_type>& b;\n            matrix<sample_type,0,1,mem_manager_type>& out_vectors;\n\n        };\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n    template <\n        typename K,\n        typename stop_strategy_type,\n        typename T\n        >\n    distance_function<K> approximate_distance_function (\n        stop_strategy_type stop_strategy,\n        const distance_function<K>& target,\n        const T& starting_basis\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(target.get_basis_vectors().size() > 0 &&\n                    starting_basis.size() > 0,\n                    \"\\t  distance_function approximate_distance_function()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t target.get_basis_vectors().size(): \" << target.get_basis_vectors().size() \n                    << \"\\n\\t starting_basis.size():             \" << starting_basis.size() \n        );\n\n        using namespace red_impl;\n        // The next few statements just find the best weights with which to approximate \n        // the target object with the set of basis vectors in starting_basis.  This\n        // is really just a simple application of some linear algebra.  For the details \n        // see page 554 of Learning with kernels by Scholkopf and Smola where they talk \n        // about \"Optimal Expansion Coefficients.\"\n\n        const K kern(target.get_kernel());\n        typedef typename K::scalar_type scalar_type;\n        typedef typename K::sample_type sample_type;\n        typedef typename K::mem_manager_type mem_manager_type;\n\n        matrix<scalar_type,0,1,mem_manager_type> beta;\n\n        // Now we compute the fist approximate distance function.  \n        beta = pinv(kernel_matrix(kern,starting_basis)) *\n            (kernel_matrix(kern,starting_basis,target.get_basis_vectors())*target.get_alpha());\n        matrix<sample_type,0,1,mem_manager_type> out_vectors(mat(starting_basis));\n\n\n        // Now setup to do a global optimization of all the parameters in the approximate \n        // distance function.  \n        const objective<K> obj(target, beta, out_vectors);\n        const objective_derivative<K> obj_der(target, beta, out_vectors);\n        matrix<scalar_type,0,1,mem_manager_type> opt_starting_point(obj.state_to_vector());\n\n\n        // perform a full optimization of all the parameters (i.e. both beta and the basis vectors together)\n        find_min(lbfgs_search_strategy(20),\n                 stop_strategy,\n                 obj, obj_der, opt_starting_point, 0); \n\n        // now make sure that the final optimized value is loaded into the beta and\n        // out_vectors matrices\n        obj.vector_to_state(opt_starting_point);\n\n        // Do a final reoptimization of beta just to make sure it is optimal given the new\n        // set of basis vectors.\n        beta = pinv(kernel_matrix(kern,out_vectors))*(kernel_matrix(kern,out_vectors,target.get_basis_vectors())*target.get_alpha());\n\n        // It is possible that some of the beta weights will be very close to zero.  Lets remove\n        // the basis vectors with these essentially zero weights.\n        const scalar_type eps = max(abs(beta))*std::numeric_limits<scalar_type>::epsilon();\n        for (long i = 0; i < beta.size(); ++i)\n        {\n            // if beta(i) is zero (but leave at least one beta no matter what)\n            if (std::abs(beta(i)) < eps && beta.size() > 1)\n            {\n                beta = remove_row(beta, i);\n                out_vectors = remove_row(out_vectors, i);\n                --i;\n            }\n        }\n\n        return distance_function<K>(beta, kern, out_vectors);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type \n        >\n    class reduced_decision_function_trainer2\n    {\n    public:\n        typedef typename trainer_type::kernel_type kernel_type;\n        typedef typename trainer_type::scalar_type scalar_type;\n        typedef typename trainer_type::sample_type sample_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n        typedef typename trainer_type::trained_function_type trained_function_type;\n\n        reduced_decision_function_trainer2 () : num_bv(0) {}\n        reduced_decision_function_trainer2 (\n            const trainer_type& trainer_,\n            const long num_sb_,\n            const double eps_ = 1e-3\n        ) :\n            trainer(trainer_),\n            num_bv(num_sb_),\n            eps(eps_)\n        {\n            COMPILE_TIME_ASSERT(is_matrix<sample_type>::value);\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(num_bv > 0 && eps > 0,\n                        \"\\t reduced_decision_function_trainer2()\"\n                        << \"\\n\\t you have given invalid arguments to this function\"\n                        << \"\\n\\t num_bv: \" << num_bv \n                        << \"\\n\\t eps:    \" << eps \n            );\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(num_bv > 0,\n                        \"\\t reduced_decision_function_trainer2::train(x,y)\"\n                        << \"\\n\\t You have tried to use an uninitialized version of this object\"\n                        << \"\\n\\t num_bv: \" << num_bv );\n            return do_train(mat(x), mat(y));\n        }\n\n    private:\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            // get the decision function object we are going to try and approximate\n            const decision_function<kernel_type>& dec_funct = trainer.train(x,y);\n            const kernel_type kern(dec_funct.kernel_function);\n            \n            // now find a linearly independent subset of the training points of num_bv points.\n            linearly_independent_subset_finder<kernel_type> lisf(kern, num_bv);\n            fill_lisf(lisf,x);\n\n            distance_function<kernel_type> approx, target;\n            target = dec_funct;\n            approx = approximate_distance_function(objective_delta_stop_strategy(eps), target, lisf);\n\n            decision_function<kernel_type> new_df(approx.get_alpha(), \n                                                  0,\n                                                  kern, \n                                                  approx.get_basis_vectors());\n\n            // now we have to figure out what the new bias should be.  It might be a little\n            // different since we just messed with all the weights and vectors.\n            double bias = 0;\n            for (long i = 0; i < x.nr(); ++i)\n            {\n                bias += new_df(x(i)) - dec_funct(x(i));\n            }\n            \n            new_df.b = bias/x.nr();\n\n            return new_df;\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        trainer_type trainer;\n        long num_bv;\n        double eps;\n\n\n    }; // end of class reduced_decision_function_trainer2\n\n    template <typename trainer_type>\n    const reduced_decision_function_trainer2<trainer_type> reduced2 (\n        const trainer_type& trainer,\n        const long num_bv,\n        double eps = 1e-3\n    )\n    {\n        COMPILE_TIME_ASSERT(is_matrix<typename trainer_type::sample_type>::value);\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(num_bv > 0 && eps > 0,\n                    \"\\tconst reduced_decision_function_trainer2 reduced2()\"\n                    << \"\\n\\t you have given invalid arguments to this function\"\n                    << \"\\n\\t num_bv: \" << num_bv \n                    << \"\\n\\t eps:    \" << eps \n        );\n\n        return reduced_decision_function_trainer2<trainer_type>(trainer, num_bv, eps);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_REDUCEd_TRAINERS_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/reduced_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_REDUCED_TRAINERs_ABSTRACT_\n#ifdef DLIB_REDUCED_TRAINERs_ABSTRACT_\n\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"../optimization.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type \n        >\n    class reduced_decision_function_trainer\n    {\n        /*!\n            REQUIREMENTS ON trainer_type\n                - trainer_type == some kind of batch trainer object (e.g. svm_nu_trainer)\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an implementation of a reduced set algorithm.  \n                This object acts as a post processor for anything that creates \n                decision_function objects.  It wraps another trainer object and \n                performs this reduced set post processing with the goal of \n                representing the original decision function in a form that \n                involves fewer basis vectors.\n        !*/\n\n    public:\n        typedef typename trainer_type::kernel_type kernel_type;\n        typedef typename trainer_type::scalar_type scalar_type;\n        typedef typename trainer_type::sample_type sample_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n        typedef typename trainer_type::trained_function_type trained_function_type;\n\n        reduced_decision_function_trainer (\n        );\n        /*!\n            ensures\n                - This object is in an uninitialized state.  You must\n                  construct a real one with the other constructor and assign it\n                  to this instance before you use this object.\n        !*/\n\n        reduced_decision_function_trainer (\n            const trainer_type& trainer,\n            const unsigned long num_bv \n        );\n        /*!\n            requires\n                - num_bv > 0\n            ensures\n                - returns a trainer object that applies post processing to the decision_function\n                  objects created by the given trainer object with the goal of creating\n                  decision_function objects with fewer basis vectors.\n                - The reduced decision functions that are output will have at most\n                  num_bv basis vectors.\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            ensures\n                - trains a decision_function using the trainer that was supplied to\n                  this object's constructor and then finds a reduced representation\n                  for it and returns the reduced version.  \n            throws\n                - std::bad_alloc\n                - any exceptions thrown by the trainer_type object\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const reduced_decision_function_trainer<trainer_type> reduced (\n        const trainer_type& trainer,\n        const unsigned long num_bv\n    ) { return reduced_decision_function_trainer<trainer_type>(trainer, num_bv); }\n    /*!\n        requires\n            - num_bv > 0\n            - trainer_type == some kind of batch trainer object that creates decision_function\n              objects (e.g. svm_nu_trainer)\n        ensures\n            - returns a reduced_decision_function_trainer object that has been\n              instantiated with the given arguments.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename stop_strategy_type,\n        typename T\n        >\n    distance_function<K> approximate_distance_function (\n        stop_strategy_type stop_strategy,\n        const distance_function<K>& target,\n        const T& starting_basis\n    );\n    /*!\n        requires\n            - stop_strategy == an object that defines a stop strategy such as one of \n              the objects from dlib/optimization/optimization_stop_strategies_abstract.h\n            - requirements on starting_basis\n                - T must be a dlib::matrix type or something convertible to a matrix via mat()\n                  (e.g. a std::vector).  Additionally, starting_basis must contain K::sample_type\n                  objects which can be supplied to the kernel function used by target.\n                - is_vector(starting_basis) == true\n                - starting_basis.size() > 0\n            - target.get_basis_vectors().size() > 0 \n            - kernel_derivative<K> is defined\n              (i.e. The analytic derivative for the given kernel must be defined)\n            - K::sample_type must be a dlib::matrix object and the basis_vectors inside target\n              and starting_basis must be column vectors.\n        ensures\n            - This routine attempts to find a distance_function object which is close\n              to the given target.  That is, it searches for an X such that target(X) is\n              minimized.  The optimization begins with an X in the span of the elements\n              of starting_basis and searches for an X which locally minimizes target(X).  \n              Since this problem can have many local minima, the quality of the starting \n              basis can significantly influence the results.   \n            - The optimization is over all variables in a distance_function, however,\n              the size of the basis set is constrained to no more than starting_basis.size().\n              That is, in the returned distance_function DF, we will have: \n                - DF.get_basis_vectors().size() <= starting_basis.size()\n            - The optimization is carried out until the stop_strategy indicates it \n              should stop.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type \n        >\n    class reduced_decision_function_trainer2\n    {\n        /*!\n            REQUIREMENTS ON trainer_type\n                - trainer_type == some kind of batch trainer object (e.g. svm_nu_trainer)\n                - trainer_type::sample_type must be a dlib::matrix object\n                - kernel_derivative<trainer_type::kernel_type> must be defined\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an implementation of a reduced set algorithm.  \n                This object acts as a post processor for anything that creates \n                decision_function objects.  It wraps another trainer object and \n                performs this reduced set post processing with the goal of \n                representing the original decision function in a form that \n                involves fewer basis vectors.\n\n                This object's implementation is the same as that in the above\n                reduced_decision_function_trainer object except it also performs \n                a global gradient based optimization at the end to further\n                improve the approximation to the original decision function\n                object. \n        !*/\n\n    public:\n        typedef typename trainer_type::kernel_type kernel_type;\n        typedef typename trainer_type::scalar_type scalar_type;\n        typedef typename trainer_type::sample_type sample_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n        typedef typename trainer_type::trained_function_type trained_function_type;\n\n        reduced_decision_function_trainer2 (\n        );\n        /*!\n            ensures\n                - This object is in an uninitialized state.  You must\n                  construct a real one with the other constructor and assign it\n                  to this instance before you use this object.\n        !*/\n\n        reduced_decision_function_trainer2 (\n            const trainer_type& trainer,\n            const unsigned long num_bv,\n            double eps = 1e-3\n        );\n        /*!\n            requires\n                - num_bv > 0\n                - eps > 0\n            ensures\n                - returns a trainer object that applies post processing to the decision_function\n                  objects created by the given trainer object with the goal of creating\n                  decision_function objects with fewer basis vectors.\n                - The reduced decision functions that are output will have at most\n                  num_bv basis vectors.\n                - the gradient based optimization will continue until the change in the\n                  objective function is less than eps.  So smaller values of eps will\n                  give better results but take longer to compute.\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - x must be a list of objects which are each some kind of dlib::matrix \n                  which represents column or row vectors.\n            ensures\n                - trains a decision_function using the trainer that was supplied to\n                  this object's constructor and then finds a reduced representation\n                  for it and returns the reduced version.  \n            throws\n                - std::bad_alloc\n                - any exceptions thrown by the trainer_type object\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const reduced_decision_function_trainer2<trainer_type> reduced2 (\n        const trainer_type& trainer,\n        const unsigned long num_bv,\n        double eps = 1e-3\n    ) { return reduced_decision_function_trainer2<trainer_type>(trainer, num_bv, eps); }\n    /*!\n        requires\n            - num_bv > 0\n            - trainer_type == some kind of batch trainer object that creates decision_function\n              objects (e.g. svm_nu_trainer)\n            - kernel_derivative<trainer_type::kernel_type> is defined\n            - eps > 0\n        ensures\n            - returns a reduced_decision_function_trainer2 object that has been\n              instantiated with the given arguments.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_REDUCED_TRAINERs_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/rls.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RLs_Hh_\n#define DLIB_RLs_Hh_\n\n#include \"rls_abstract.h\"\n#include \"../matrix.h\"\n#include \"function.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class rls\n    {\n\n    public:\n\n\n        explicit rls(\n            double forget_factor_,\n            double C_ = 1000\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < forget_factor_ && forget_factor_ <= 1 &&\n                        0 < C_,\n                \"\\t rls::rls()\"\n                << \"\\n\\t invalid arguments were given to this function\"\n                << \"\\n\\t forget_factor_: \" << forget_factor_ \n                << \"\\n\\t C_:   \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n\n            C = C_;\n            forget_factor = forget_factor_;\n        }\n\n        rls(\n        )\n        {\n            C = 1000;\n            forget_factor = 1;\n        }\n\n        double get_c(\n        ) const\n        {\n            return C;\n        }\n\n        double get_forget_factor(\n        ) const\n        {\n            return forget_factor;\n        }\n\n        template <typename EXP>\n        void train (\n            const matrix_exp<EXP>& x,\n            double y\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(x) &&\n                        (get_w().size() == 0 || get_w().size() == x.size()),\n                \"\\t void rls::train()\"\n                << \"\\n\\t invalid arguments were given to this function\"\n                << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n                << \"\\n\\t x.size():         \" << x.size() \n                << \"\\n\\t get_w().size():   \" << get_w().size() \n                << \"\\n\\t this: \" << this\n                );\n\n            if (R.size() == 0)\n            {\n                R = identity_matrix<double>(x.size())*C;\n                w.set_size(x.size());\n                w = 0;\n            }\n\n            // multiply by forget factor and incorporate x*trans(x) into R.\n            const double l = 1.0/forget_factor;\n            const double temp = 1 + l*trans(x)*R*x;\n            matrix<double,0,1> tmp = R*x;\n            R = l*R - l*l*(tmp*trans(tmp))/temp;\n\n            // Since we multiplied by the forget factor, we need to add (1-forget_factor) of the\n            // identity matrix back in to keep the regularization alive.  \n            add_eye_to_inv(R, (1-forget_factor)/C);\n\n            // R should always be symmetric.  This line improves numeric stability of this algorithm.\n            R = 0.5*(R + trans(R));\n\n            w = w + R*x*(y - trans(x)*w);\n\n        }\n\n        const matrix<double,0,1>& get_w(\n        ) const\n        {\n            return w;\n        }\n\n        template <typename EXP>\n        double operator() (\n            const matrix_exp<EXP>& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(x) && get_w().size() == x.size(),\n                \"\\t double rls::operator()()\"\n                << \"\\n\\t invalid arguments were given to this function\"\n                << \"\\n\\t is_col_vector(x): \" << is_col_vector(x) \n                << \"\\n\\t x.size():         \" << x.size() \n                << \"\\n\\t get_w().size():   \" << get_w().size() \n                << \"\\n\\t this: \" << this\n                );\n\n            return dot(x,w);\n        }\n\n        decision_function<linear_kernel<matrix<double,0,1> > > get_decision_function (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(get_w().size() != 0,\n                \"\\t decision_function rls::get_decision_function()\"\n                << \"\\n\\t invalid arguments were given to this function\"\n                << \"\\n\\t get_w().size():   \" << get_w().size() \n                << \"\\n\\t this: \" << this\n                );\n\n            decision_function<linear_kernel<matrix<double,0,1> > > df;\n            df.alpha.set_size(1);\n            df.basis_vectors.set_size(1);\n            df.b = 0;\n            df.alpha = 1;\n            df.basis_vectors(0) = w;\n\n            return df;\n        }\n\n        friend inline void serialize(const rls& item, std::ostream& out)\n        {\n            int version = 1;\n            serialize(version, out);\n            serialize(item.w, out);\n            serialize(item.R, out);\n            serialize(item.C, out);\n            serialize(item.forget_factor, out);\n        }\n\n        friend inline void deserialize(rls& item, std::istream& in)\n        {\n            int version = 0;\n            deserialize(version, in);\n            if (version != 1)\n                throw dlib::serialization_error(\"Unknown version number found while deserializing rls object.\");\n\n            deserialize(item.w, in);\n            deserialize(item.R, in);\n            deserialize(item.C, in);\n            deserialize(item.forget_factor, in);\n        }\n\n    private:\n\n        void add_eye_to_inv(\n            matrix<double>& m,\n            double C\n        )\n        /*!\n            ensures\n                - Let m == inv(M)\n                - this function returns inv(M + C*identity_matrix<double>(m.nr()))\n        !*/\n        {\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                m = m - colm(m,r)*trans(colm(m,r))/(1/C + m(r,r));\n            }\n        }\n\n\n        matrix<double,0,1> w;\n        matrix<double> R;\n        double C;\n        double forget_factor;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RLs_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/rls_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RLs_ABSTRACT_Hh_\n#ifdef DLIB_RLs_ABSTRACT_Hh_\n\n#include \"../matrix/matrix_abstract.h\"\n#include \"function_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class rls\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an implementation of the linear version of the recursive least \n                squares algorithm.  It accepts training points incrementally and, at \n                each step, maintains the solution to the following optimization problem:\n                    find w minimizing: 0.5*dot(w,w) + C*sum_i(y_i - trans(x_i)*w)^2\n                Where (x_i,y_i) are training pairs.  x_i is some vector and y_i is a target\n                scalar value.\n\n                This object can also be configured to use exponential forgetting.  This is\n                where each training example is weighted by pow(forget_factor, i), where i \n                indicates the sample's age.  So older samples are weighted less in the \n                least squares solution and therefore become forgotten after some time.  \n                Therefore, with forgetting, this object solves the following optimization\n                problem at each step:\n                    find w minimizing: 0.5*dot(w,w) + C*sum_i pow(forget_factor, i)*(y_i - trans(x_i)*w)^2\n                Where i starts at 0 and i==0 corresponds to the most recent training point.\n        !*/\n\n    public:\n\n\n        explicit rls(\n            double forget_factor,\n            double C = 1000\n        );\n        /*!\n            requires\n                - 0 < forget_factor <= 1\n                - 0 < C\n            ensures\n                - #get_w().size() == 0\n                - #get_c() == C\n                - #get_forget_factor() == forget_factor\n        !*/\n\n        rls(\n        );\n        /*!\n            ensures\n                - #get_w().size() == 0\n                - #get_c() == 1000\n                - #get_forget_factor() == 1\n        !*/\n\n        double get_c(\n        ) const;\n        /*!\n            ensures\n                - returns the regularization parameter.  It is the parameter \n                  that determines the trade-off between trying to fit the training \n                  data or allowing more errors but hopefully improving the generalization \n                  of the resulting regression.  Larger values encourage exact fitting while \n                  smaller values of C may encourage better generalization. \n        !*/\n\n        double get_forget_factor(\n        ) const;\n        /*!\n            ensures\n                - returns the exponential forgetting factor.  A value of 1 disables forgetting\n                  and results in normal least squares regression.  On the other hand, a smaller \n                  value causes the regression to forget about old training examples and prefer \n                  instead to fit more recent examples.  The closer the forget factor is to\n                  zero the faster old examples are forgotten.\n        !*/\n\n\n        template <typename EXP>\n        void train (\n            const matrix_exp<EXP>& x,\n            double y\n        )\n        /*!\n            requires\n                - is_col_vector(x) == true\n                - if (get_w().size() != 0) then\n                    - x.size() == get_w().size()\n                      (i.e. all training examples must have the same\n                      dimensionality)\n            ensures\n                - #get_w().size() == x.size()\n                - updates #get_w() such that it contains the solution to the least\n                  squares problem of regressing the given x onto the given y as well\n                  as all the previous training examples supplied to train().\n        !*/\n\n        const matrix<double,0,1>& get_w(\n        ) const;\n        /*!\n            ensures\n                - returns the regression weights.  These are the values learned by the\n                  least squares procedure.  If train() has not been called then this\n                  function returns an empty vector.\n        !*/\n\n        template <typename EXP>\n        double operator() (\n            const matrix_exp<EXP>& x\n        ) const;\n        /*!\n            requires\n                - is_col_vector(x) == true\n                - get_w().size() == x.size()\n            ensures\n                - returns dot(x, get_w())\n        !*/\n\n        decision_function<linear_kernel<matrix<double,0,1> > > get_decision_function (\n        ) const;\n        /*!\n            requires\n                - get_w().size() != 0\n            ensures\n                - returns a decision function DF such that:\n                    - DF(x) == dot(x, get_w())\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const rls& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize (\n        rls& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RLs_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/roc_trainer.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_ROC_TRAINEr_H_\n#define DLIB_ROC_TRAINEr_H_\n\n#include \"roc_trainer_abstract.h\"\n#include \"../algs.h\"\n#include <limits>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type \n        >\n    class roc_trainer_type\n    {\n    public:\n        typedef typename trainer_type::kernel_type kernel_type;\n        typedef typename trainer_type::scalar_type scalar_type;\n        typedef typename trainer_type::sample_type sample_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n        typedef typename trainer_type::trained_function_type trained_function_type;\n\n        roc_trainer_type (\n        ) : desired_accuracy(0), class_selection(0){}\n\n        roc_trainer_type (\n            const trainer_type& trainer_,\n            const scalar_type& desired_accuracy_,\n            const scalar_type& class_selection_\n        ) : trainer(trainer_), desired_accuracy(desired_accuracy_), class_selection(class_selection_) \n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 <= desired_accuracy && desired_accuracy <= 1 &&\n                         (class_selection == -1 || class_selection == +1), \n                        \"\\t roc_trainer_type::roc_trainer_type()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t desired_accuracy: \" << desired_accuracy \n                        << \"\\n\\t class_selection:  \" << class_selection \n                        );\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const trained_function_type train (\n            const in_sample_vector_type& samples,\n            const in_scalar_vector_type& labels\n        ) const \n        /*!\n            requires\n                - is_binary_classification_problem(samples, labels) == true\n        !*/\n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_binary_classification_problem(samples, labels), \n                        \"\\t roc_trainer_type::train()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        );\n\n\n            return do_train(mat(samples), mat(labels));\n        }\n\n    private:\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const trained_function_type do_train (\n            const in_sample_vector_type& samples,\n            const in_scalar_vector_type& labels\n        ) const \n        { \n            trained_function_type df = trainer.train(samples, labels);\n\n            // clear out the old bias\n            df.b = 0;\n\n            // obtain all the scores from the df using all the class_selection labeled samples\n            std::vector<double> scores;\n            for (long i = 0; i < samples.size(); ++i)\n            {\n                if (labels(i) == class_selection)\n                    scores.push_back(df(samples(i)));\n            }\n\n            if (class_selection == +1)\n                std::sort(scores.rbegin(), scores.rend());\n            else\n                std::sort(scores.begin(), scores.end());\n\n            // now pick out the index that gives us the desired accuracy with regards to selected class \n            unsigned long idx = static_cast<unsigned long>(desired_accuracy*scores.size() + 0.5);\n            if (idx >= scores.size())\n                idx = scores.size()-1;\n\n            df.b = scores[idx];\n\n            // In this case add a very small extra amount to the bias so that all the samples\n            // with the class_selection label are classified correctly.\n            if (desired_accuracy == 1)\n            {\n                if (class_selection == +1)\n                    df.b -= std::numeric_limits<scalar_type>::epsilon()*df.b;\n                else\n                    df.b += std::numeric_limits<scalar_type>::epsilon()*df.b;\n            }\n\n            return df;\n        }\n\n        trainer_type trainer;\n        scalar_type desired_accuracy;\n        scalar_type class_selection;\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const roc_trainer_type<trainer_type> roc_c1_trainer (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type& desired_accuracy\n    ) { return roc_trainer_type<trainer_type>(trainer, desired_accuracy, +1); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const roc_trainer_type<trainer_type> roc_c2_trainer (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type& desired_accuracy\n    ) { return roc_trainer_type<trainer_type>(trainer, desired_accuracy, -1); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ROC_TRAINEr_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/roc_trainer_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_ROC_TRAINEr_ABSTRACT_\n#ifdef DLIB_ROC_TRAINEr_ABSTRACT_\n\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type \n        >\n    class roc_trainer_type\n    {\n        /*!\n            REQUIREMENTS ON trainer_type\n                - trainer_type == some kind of batch trainer object (e.g. svm_nu_trainer)\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a simple trainer post processor that allows you to \n                easily adjust the bias term in a trained decision_function object.\n                That is, this object lets you pick a point on the ROC curve and \n                it will adjust the bias term appropriately.  \n\n                So for example, suppose you wanted to set the bias term so that\n                the accuracy of your decision function on +1 labeled samples was 99%.\n                To do this you would use an instance of this object declared as follows:\n                    roc_trainer_type<trainer_type>(your_trainer, 0.99, +1);\n        !*/\n\n    public:\n        typedef typename trainer_type::kernel_type kernel_type;\n        typedef typename trainer_type::scalar_type scalar_type;\n        typedef typename trainer_type::sample_type sample_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n        typedef typename trainer_type::trained_function_type trained_function_type;\n\n        roc_trainer_type (\n        );\n        /*!\n            ensures\n                - This object is in an uninitialized state.  You must\n                  construct a real one with the other constructor and assign it\n                  to this instance before you use this object.\n        !*/\n\n        roc_trainer_type (\n            const trainer_type& trainer_,\n            const scalar_type& desired_accuracy_,\n            const scalar_type& class_selection_\n        );\n        /*!\n            requires\n                - 0 <= desired_accuracy_ <= 1\n                - class_selection_ == +1 or -1\n            ensures\n                - when training is performed using this object it will automatically\n                  adjust the bias term in the returned decision function so that it\n                  achieves the desired accuracy on the selected class type.\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const trained_function_type train (\n            const in_sample_vector_type& samples,\n            const in_scalar_vector_type& labels\n        ) const \n        /*!\n            requires\n                - is_binary_classification_problem(samples, labels) == true\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n            ensures\n                - performs training using the trainer object given to this object's \n                  constructor, then modifies the bias term in the returned decision function\n                  as discussed above, and finally returns the decision function.\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const roc_trainer_type<trainer_type> roc_c1_trainer (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type& desired_accuracy\n    ) { return roc_trainer_type<trainer_type>(trainer, desired_accuracy, +1); }\n    /*!\n        requires\n            - 0 <= desired_accuracy <= 1\n            - trainer_type == some kind of batch trainer object that creates decision_function\n              objects (e.g. svm_nu_trainer)\n        ensures\n            - returns a roc_trainer_type object that has been instantiated with the given \n              arguments.  The returned roc trainer will select the decision function\n              bias that gives the desired accuracy with respect to the +1 class.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    const roc_trainer_type<trainer_type> roc_c2_trainer (\n        const trainer_type& trainer,\n        const typename trainer_type::scalar_type& desired_accuracy\n    ) { return roc_trainer_type<trainer_type>(trainer, desired_accuracy, -1); }\n    /*!\n        requires\n            - 0 <= desired_accuracy <= 1\n            - trainer_type == some kind of batch trainer object that creates decision_function\n              objects (e.g. svm_nu_trainer)\n        ensures\n            - returns a roc_trainer_type object that has been instantiated with the given \n              arguments.  The returned roc trainer will select the decision function\n              bias that gives the desired accuracy with respect to the -1 class.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_ROC_TRAINEr_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/rr_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RR_TRAInER_Hh_\n#define DLIB_RR_TRAInER_Hh_\n\n#include \"../algs.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"empirical_kernel_map.h\"\n#include \"linearly_independent_subset_finder.h\"\n#include \"../statistics.h\"\n#include \"rr_trainer_abstract.h\"\n#include <vector>\n#include <iostream>\n\nnamespace dlib\n{\n    template <\n        typename K \n        >\n    class rr_trainer\n    {\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        // You are getting a compiler error on this line because you supplied a non-linear or \n        // sparse kernel to the rr_trainer object.  You have to use dlib::linear_kernel with this trainer.\n        COMPILE_TIME_ASSERT((is_same_type<K, linear_kernel<sample_type> >::value));\n\n        rr_trainer (\n        ) :\n            verbose(false),\n            use_regression_loss(true),\n            lambda(0)\n        {\n            // default lambda search list\n            lams = matrix_cast<scalar_type>(logspace(-9, 2, 50)); \n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void use_regression_loss_for_loo_cv (\n        )\n        {\n            use_regression_loss = true;\n        }\n\n        void use_classification_loss_for_loo_cv (\n        )\n        {\n            use_regression_loss = false;\n        }\n\n        bool will_use_regression_loss_for_loo_cv (\n        ) const\n        {\n            return use_regression_loss;\n        }\n\n        const kernel_type get_kernel (\n        ) const\n        {\n            return kernel_type();\n        }\n\n        void set_lambda (\n            scalar_type lambda_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(lambda_ >= 0,\n                \"\\t void rr_trainer::set_lambda()\"\n                << \"\\n\\t lambda must be greater than or equal to 0\"\n                << \"\\n\\t lambda: \" << lambda \n                << \"\\n\\t this:   \" << this\n                );\n\n            lambda = lambda_;\n        }\n\n        const scalar_type get_lambda (\n        ) const\n        {\n            return lambda;\n        }\n\n        template <typename EXP>\n        void set_search_lambdas (\n            const matrix_exp<EXP>& lambdas\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_vector(lambdas) && lambdas.size() > 0 && min(lambdas) > 0,\n                \"\\t void rr_trainer::set_search_lambdas()\"\n                << \"\\n\\t lambdas must be a non-empty vector of values\"\n                << \"\\n\\t is_vector(lambdas): \" << is_vector(lambdas) \n                << \"\\n\\t lambdas.size():     \" << lambdas.size()\n                << \"\\n\\t min(lambdas):       \" << min(lambdas) \n                << \"\\n\\t this:   \" << this\n                );\n\n\n            lams = matrix_cast<scalar_type>(lambdas);\n        }\n\n        const matrix<scalar_type,0,0,mem_manager_type>& get_search_lambdas (\n        ) const\n        {\n            return lams;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            std::vector<scalar_type> temp; \n            scalar_type temp2;\n            return do_train(mat(x), mat(y), false, temp, temp2);\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            std::vector<scalar_type>& loo_values\n        ) const\n        {\n            scalar_type temp;\n            return do_train(mat(x), mat(y), true, loo_values, temp);\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            std::vector<scalar_type>& loo_values,\n            scalar_type& lambda_used \n        ) const\n        {\n            return do_train(mat(x), mat(y), true, loo_values, lambda_used);\n        }\n\n\n    private:\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            const bool output_loo_values,\n            std::vector<scalar_type>& loo_values,\n            scalar_type& the_lambda\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(x,y),\n                \"\\t decision_function rr_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t is_vector(x): \" << is_vector(x)\n                << \"\\n\\t is_vector(y): \" << is_vector(y)\n                << \"\\n\\t x.size():     \" << x.size() \n                << \"\\n\\t y.size():     \" << y.size() \n                );\n\n#ifdef ENABLE_ASSERTS\n            if (get_lambda() == 0 && will_use_regression_loss_for_loo_cv() == false)\n            {\n                // make sure requires clause is not broken\n                DLIB_ASSERT(is_binary_classification_problem(x,y),\n                    \"\\t decision_function rr_trainer::train(x,y)\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    );\n            }\n#endif\n\n            typedef matrix<scalar_type,0,1,mem_manager_type> column_matrix_type;\n            typedef matrix<scalar_type,0,0,mem_manager_type> general_matrix_type;\n\n            const long dims = x(0).size();\n\n            /*\n                Notes on the solution of ridge regression \n\n                Let A = an x.size() by dims matrix which contains all the data samples.\n\n                Let I = an identity matrix\n\n                Let C = trans(A)*A\n                Let L = trans(A)*y\n\n                Then the optimal w is given by:\n                    w = inv(C + lambda*I) * L \n\n\n                There is a trick to compute leave one out cross validation results for many different\n                lambda values quickly.  The following paper has a detailed discussion of various\n                approaches:\n\n                    Notes on Regularized Least Squares by Ryan M. Rifkin and Ross A. Lippert.\n\n                    In the implementation of the rr_trainer I'm only using two simple equations\n                    from the above paper.\n\n\n                    First note that inv(C + lambda*I) can be computed for many different lambda\n                    values in an efficient way by using an eigen decomposition of C.  So we use\n                    the fact that:\n                        inv(C + lambda*I) == V*inv(D + lambda*I)*trans(V)\n                        where V*D*trans(V) == C \n\n                    Also, via some simple linear algebra the above paper works out that the leave one out \n                    value for a sample x(i) is equal to the following:\n                        Let G = inv(C + lambda*I)\n                        let val = trans(x(i))*G*x(i);\n\n                        leave one out value for sample x(i):\n                        LOOV = (trans(w)*x(i) - y(i)*val) / (1 - val)\n\n                        leave one out error for sample x(i):\n                        LOOE = loss(y(i), LOOV)\n\n\n                Finally, note that we will pretend there was a 1 appended to the end of each\n                vector in x.  We won't actually do that though because we don't want to\n                have to make a copy of all the samples.  So throughout the following code \n                I have explicitly dealt with this.\n            */\n\n            general_matrix_type C, tempm, G;\n            column_matrix_type  L, tempv, w;\n\n            // compute C and L\n            for (long i = 0; i < x.size(); ++i)\n            {\n                C += x(i)*trans(x(i));\n                L += y(i)*x(i);\n                tempv += x(i);\n            }\n\n            // Account for the extra 1 that we pretend is appended to x\n            // Make C = [C      tempv\n            //           tempv' x.size()]\n            C = join_cols(join_rows(C, tempv), \n                          join_rows(trans(tempv), uniform_matrix<scalar_type>(1,1, x.size())));\n            L = join_cols(L, uniform_matrix<scalar_type>(1,1, sum(y)));\n\n            eigenvalue_decomposition<general_matrix_type> eig(make_symmetric(C));\n            const general_matrix_type V = eig.get_pseudo_v();\n            const column_matrix_type  D = eig.get_real_eigenvalues();\n\n            // We can save some work by pre-multiplying the x vectors by trans(V)\n            // and saving the result so we don't have to recompute it over and over later.\n            matrix<column_matrix_type,0,1,mem_manager_type > Vx;\n            if (lambda == 0 || output_loo_values)\n            {\n                // Save the transpose of V into a temporary because the subsequent matrix\n                // vector multiplies will be faster (because of better cache locality).\n                const general_matrix_type transV( colm(trans(V),range(0,dims-1))  );\n                // Remember the pretend 1 at the end of x(*).  We want to multiply trans(V)*x(*)\n                // so to do this we pull the last column off trans(V) and store it separately.\n                const column_matrix_type lastV = colm(trans(V), dims);\n                Vx.set_size(x.size());\n                for (long i = 0; i < x.size(); ++i)\n                {\n                    Vx(i) = transV*x(i);\n                    Vx(i) = squared(Vx(i) + lastV);\n                }\n            }\n\n            the_lambda = lambda;\n\n            // If we need to automatically select a lambda then do so using the LOOE trick described\n            // above.\n            bool did_loov = false;\n            scalar_type best_looe = std::numeric_limits<scalar_type>::max();\n            if (lambda == 0)\n            {\n                did_loov = true;\n\n                // Compute leave one out errors for a bunch of different lambdas and pick the best one.\n                for (long idx = 0; idx < lams.size(); ++idx)\n                {\n                    // first compute G\n                    tempv = 1.0/(D + lams(idx));\n                    tempm = scale_columns(V,tempv);\n                    G = tempm*trans(V);\n\n                    // compute the solution w for the current lambda\n                    w = G*L;\n\n                    // make w have the same length as the x vectors.\n                    const scalar_type b = w(dims);\n                    w = colm(w,0,dims);\n\n                    scalar_type looe = 0;\n                    for (long i = 0; i < x.size(); ++i)\n                    {\n                        // perform equivalent of: val = trans(x(i))*G*x(i);\n                        const scalar_type val = dot(tempv, Vx(i));\n                        const scalar_type temp = (1 - val);\n                        scalar_type loov;\n                        if (temp != 0)\n                            loov = (trans(w)*x(i) + b - y(i)*val) / temp;\n                        else\n                            loov = 0;\n\n                        looe += loss(loov, y(i));\n                    }\n\n                    // Keep track of the lambda which gave the lowest looe.  If two lambdas\n                    // have the same looe then pick the biggest lambda.\n                    if (looe < best_looe || (looe == best_looe && lams(idx) > the_lambda))\n                    {\n                        best_looe = looe;\n                        the_lambda = lams(idx);\n                    }\n                }\n\n                best_looe /= x.size();\n            }\n\n\n\n            // Now perform the main training.  That is, find w.\n            // first, compute G = inv(C + the_lambda*I)\n            tempv = 1.0/(D + the_lambda);\n            tempm = scale_columns(V,tempv);\n            G = tempm*trans(V);\n            w = G*L;\n           \n            // make w have the same length as the x vectors.\n            const scalar_type b = w(dims);\n            w = colm(w,0,dims);\n\n\n            // If we haven't done this already and we are supposed to then compute the LOO error rate for \n            // the current lambda and store the result in best_looe.\n            if (output_loo_values)\n            {\n                loo_values.resize(x.size());\n                did_loov = true;\n                best_looe = 0;\n                for (long i = 0; i < x.size(); ++i)\n                {\n                    // perform equivalent of: val = trans(x(i))*G*x(i);\n                    const scalar_type val = dot(tempv, Vx(i));\n                    const scalar_type temp = (1 - val);\n                    scalar_type loov;\n                    if (temp != 0)\n                        loov = (trans(w)*x(i) + b - y(i)*val) / temp;\n                    else\n                        loov = 0;\n\n                    best_looe += loss(loov, y(i));\n                    loo_values[i] = loov;\n                }\n\n                best_looe /= x.size();\n\n            }\n            else\n            {\n                loo_values.clear();\n            }\n\n            if (verbose && did_loov)\n            {\n                using namespace std;\n                cout << \"Using lambda:             \" << the_lambda << endl;\n                if (use_regression_loss)\n                    cout << \"LOO Mean Squared Error:   \" << best_looe << endl;\n                else\n                    cout << \"LOO Classification Error: \" << best_looe << endl;\n            }\n\n            // convert w into a proper decision function\n            decision_function<kernel_type> df;\n            df.alpha.set_size(1);\n            df.alpha = 1;\n            df.basis_vectors.set_size(1);\n            df.basis_vectors(0) = w;\n            df.b = -b; // don't forget about the bias we stuck onto all the vectors\n\n            return df;\n        }\n\n        inline scalar_type loss (\n            const scalar_type& a,\n            const scalar_type& b\n        ) const\n        {\n            if (use_regression_loss)\n            {\n                return (a-b)*(a-b);\n            }\n            else\n            {\n                // if a and b have the same sign then no loss\n                if (a*b >= 0)\n                    return 0;\n                else\n                    return 1;\n            }\n        }\n\n\n        /*!\n            CONVENTION\n                - get_lambda() == lambda\n                - get_kernel() == kernel_type() \n                - will_use_regression_loss_for_loo_cv() == use_regression_loss\n                - get_search_lambdas() == lams\n        !*/\n\n        bool verbose;\n        bool use_regression_loss;\n\n        scalar_type lambda;\n\n        matrix<scalar_type,0,0,mem_manager_type> lams; \n    }; \n\n}\n\n#endif // DLIB_RR_TRAInER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/rr_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RR_TRAInER_ABSTRACT_Hh_\n#ifdef DLIB_RR_TRAInER_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename K \n        >\n    class rr_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                is the dlib::linear_kernel instantiated with some kind of column vector.\n\n            INITIAL VALUE\n                - get_lambda() == 0\n                - will_use_regression_loss_for_loo_cv() == true\n                - get_search_lambdas() == logspace(-9, 2, 50) \n                - this object will not be verbose unless be_verbose() is called\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a tool for performing linear ridge regression \n                (This basic algorithm is also known my many other names, e.g. regularized \n                least squares or least squares SVM). \n\n                The exact definition of what this algorithm does is this:\n                    Find w and b that minimizes the following (x_i are input samples and y_i are target values):\n                        lambda*dot(w,w) + sum_over_i( (f(x_i) - y_i)^2 )\n                        where f(x) == dot(x,w) - b\n\n                    So this algorithm is just regular old least squares regression but \n                    with the addition of a regularization term which encourages small w.\n\n\n                It is capable of estimating the lambda parameter using leave-one-out cross-validation.\n\n\n                The leave-one-out cross-validation implementation is based on the techniques\n                discussed in this paper:\n                    Notes on Regularized Least Squares by Ryan M. Rifkin and Ross A. Lippert.\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        rr_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used.\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        const kernel_type get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object.  Since\n                  the linear kernels don't have any parameters this function just\n                  returns kernel_type()\n        !*/\n\n        void set_lambda (\n            scalar_type lambda \n        );\n        /*!\n            requires\n                - lambda >= 0\n            ensures\n                - #get_lambda() == lambda \n        !*/\n\n        const scalar_type get_lambda (\n        ) const;\n        /*!\n            ensures\n                - returns the regularization parameter.  It is the parameter that \n                  determines the trade off between trying to fit the training data \n                  exactly or allowing more errors but hopefully improving the \n                  generalization ability of the resulting function.  Smaller values \n                  encourage exact fitting while larger values of lambda may encourage \n                  better generalization. \n\n                  Note that a lambda of 0 has a special meaning.  It indicates to this\n                  object that it should automatically determine an appropriate lambda\n                  value.  This is done using leave-one-out cross-validation.\n        !*/\n\n        void use_regression_loss_for_loo_cv (\n        );\n        /*!\n            ensures\n                - #will_use_regression_loss_for_loo_cv() == true\n        !*/\n\n        void use_classification_loss_for_loo_cv (\n        );\n        /*!\n            ensures\n                - #will_use_regression_loss_for_loo_cv() == false \n        !*/\n\n        bool will_use_regression_loss_for_loo_cv (\n        ) const;\n        /*!\n            ensures\n                - returns true if the automatic lambda estimation will attempt to estimate a lambda\n                  appropriate for a regression task.  Otherwise it will try and find one which\n                  minimizes the number of classification errors.\n        !*/\n\n        template <typename EXP>\n        void set_search_lambdas (\n            const matrix_exp<EXP>& lambdas\n        );\n        /*!\n            requires\n                - is_vector(lambdas) == true\n                - lambdas.size() > 0\n                - min(lambdas) > 0\n                - lambdas must contain floating point numbers\n            ensures\n                - #get_search_lambdas() == lambdas\n        !*/\n\n        const matrix<scalar_type,0,0,mem_manager_type>& get_search_lambdas (\n        ) const;\n        /*!\n            ensures\n                - returns a matrix M such that:\n                    - is_vector(M) == true\n                    - M == a list of all the lambda values which will be tried when performing\n                      LOO cross-validation for determining the best lambda. \n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n                - is_learning_problem(x,y) == true\n                - if (get_lambda() == 0 && will_use_regression_loss_for_loo_cv() == false) then\n                    - is_binary_classification_problem(x,y) == true\n                      (i.e. if you want this algorithm to estimate a lambda appropriate for\n                      classification functions then you had better give a valid classification\n                      problem)\n            ensures\n                - performs linear ridge regression given the training samples in x and target values in y.  \n                - returns a decision_function F with the following properties:\n                    - F(new_x) == predicted y value\n                    - F.alpha.size() == 1\n                    - F.basis_vectors.size() == 1\n                    - F.alpha(0) == 1\n\n                - if (get_lambda() == 0) then\n                    - This object will perform internal leave-one-out cross-validation to determine an \n                      appropriate lambda automatically.  It will compute the LOO error for each lambda\n                      in get_search_lambdas() and select the best one.\n                    - if (will_use_regression_loss_for_loo_cv()) then\n                        - the lambda selected will be the one that minimizes the mean squared error.\n                    - else\n                        - the lambda selected will be the one that minimizes the number classification \n                          mistakes.  We say a point is classified correctly if the output of the\n                          decision_function has the same sign as its label.\n                    - #get_lambda() == 0\n                      (i.e. we don't change the get_lambda() value.  If you want to know what the\n                      automatically selected lambda value was then call the version of train()\n                      defined below)\n                - else\n                    - The user supplied value of get_lambda() will be used to perform the ridge regression.\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            std::vector<scalar_type>& loo_values\n        ) const;\n        /*!\n            requires\n                - all the requirements for train(x,y) must be satisfied\n            ensures\n                - returns train(x,y)\n                  (i.e. executes train(x,y) and returns its result)\n                - #loo_values.size() == y.size()\n                - for all valid i:\n                    - #loo_values[i] == leave-one-out prediction for the value of y(i) based \n                      on all the training samples other than (x(i),y(i)).\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            std::vector<scalar_type>& loo_values,\n            scalar_type& lambda_used \n        ) const;\n        /*!\n            requires\n                - all the requirements for train(x,y) must be satisfied\n            ensures\n                - returns train(x,y)\n                  (i.e. executes train(x,y) and returns its result)\n                - #loo_values.size() == y.size()\n                - for all valid i:\n                    - #loo_values[i] == leave-one-out prediction for the value of y(i) based \n                      on all the training samples other than (x(i),y(i)).\n                - #lambda_used == the value of lambda used to generate the \n                  decision_function.  Note that this lambda value is always \n                  equal to get_lambda() if get_lambda() isn't 0.\n        !*/\n\n    }; \n\n}\n\n#endif // DLIB_RR_TRAInER_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/rvm.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RVm_\n#define DLIB_RVm_\n\n#include \"rvm_abstract.h\"\n#include <cmath>\n#include <limits>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace rvm_helpers\n    {\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename scalar_vector_type, typename mem_manager_type>\n        long find_next_best_alpha_to_update (\n            const scalar_vector_type& S,\n            const scalar_vector_type& Q,\n            const scalar_vector_type& alpha,\n            const matrix<long,0,1,mem_manager_type>& active_bases,\n            const bool search_all_alphas,\n            typename scalar_vector_type::type eps\n        ) \n        /*!\n            ensures\n                - if (we can find another alpha to update) then\n                    - returns the index of said alpha \n                - else\n                    - returns -1\n        !*/\n        {\n            typedef typename scalar_vector_type::type scalar_type;\n            // now use S and Q to find next alpha to update.  What\n            // we want to do here is select the alpha to update that gives us\n            // the greatest improvement in marginal likelihood.\n            long selected_idx = -1;\n            scalar_type greatest_improvement = -1;\n            for (long i = 0; i < S.nr(); ++i)\n            {\n                scalar_type value = -1;\n\n                // if i is currently in the active set\n                if (active_bases(i) >= 0)\n                {\n                    const long idx = active_bases(i);\n                    const scalar_type s = alpha(idx)*S(i)/(alpha(idx) - S(i));\n                    const scalar_type q = alpha(idx)*Q(i)/(alpha(idx) - S(i));\n\n                    if (q*q-s > 0)\n                    {\n                        // only update an existing alpha if this is a narrow search\n                        if (search_all_alphas == false)\n                        {\n                            // choosing this sample would mean doing an update of an \n                            // existing alpha value.\n                            scalar_type new_alpha = s*s/(q*q-s);\n                            scalar_type cur_alpha = alpha(idx);\n                            new_alpha = 1/new_alpha;\n                            cur_alpha = 1/cur_alpha;\n\n                            // from equation 32 in the Tipping paper \n                            value = Q(i)*Q(i)/(S(i) +  1/(new_alpha - cur_alpha) ) - \n                                std::log(1 + S(i)*(new_alpha - cur_alpha));\n                        }\n\n                    }\n                    // we only pick an alpha to remove if this is a wide search and it wasn't one of the recently added ones \n                    else if (search_all_alphas && idx+2 < alpha.size() )  \n                    {\n                        // choosing this sample would mean the alpha value is infinite \n                        // so we would remove the selected sample from our model.\n\n                        // from equation 37 in the Tipping paper \n                        value = Q(i)*Q(i)/(S(i) - alpha(idx)) - \n                            std::log(1-S(i)/alpha(idx));\n\n                    }\n                }\n                else if (search_all_alphas)\n                {\n                    const scalar_type s = S(i);\n                    const scalar_type q = Q(i);\n\n                    if (q*q-s > 0)\n                    {\n                        // choosing this sample would mean we would add the selected \n                        // sample to our model.\n\n                        // from equation 27 in the Tipping paper \n                        value = (Q(i)*Q(i)-S(i))/S(i) + std::log(S(i)/(Q(i)*Q(i)));\n                    }\n                }\n\n                if (value > greatest_improvement)\n                {\n                    greatest_improvement = value;\n                    selected_idx = i;\n                }\n            }\n\n            // If the greatest_improvement in marginal likelihood we would get is less\n            // than our epsilon then report that there isn't anything else to do.  But\n            // if it is big enough then return the selected_idx.\n            if (greatest_improvement > eps)\n                return selected_idx;\n            else\n                return -1;\n        }\n\n    } // end namespace rvm_helpers\n\n    // ------------------------------------------------------------------------------------\n\n\n    template <\n        typename kern_type \n        >\n    class rvm_trainer \n    {\n        /*!\n            This is an implementation of the binary classifier version of the\n            relevance vector machine algorithm described in the paper:\n                Tipping, M. E. and A. C. Faul (2003). Fast marginal likelihood maximisation \n                for sparse Bayesian models. In C. M. Bishop and B. J. Frey (Eds.), Proceedings \n                of the Ninth International Workshop on Artificial Intelligence and Statistics, \n                Key West, FL, Jan 3-6.\n\n            This code mostly does what is described in the above paper with the exception \n            that here we use a different stopping condition as well as a modified alpha\n            selection rule.  See the code for the exact details.\n        !*/\n\n    public:\n        typedef kern_type kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        rvm_trainer (\n        ) : eps(0.001), max_iterations(2000)\n        {\n        }\n\n        void set_max_iterations (\n            unsigned long max_iterations_\n        )\n        {\n            max_iterations = max_iterations_;\n        }\n\n        unsigned long get_max_iterations (\n        ) const\n        { \n            return max_iterations;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\tvoid rvm_trainer::set_epsilon(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps: \" << eps_ \n                );\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const\n        { \n            return eps;\n        }\n\n        void set_kernel (\n            const kernel_type& k\n        )\n        {\n            kernel = k;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            return do_train(mat(x), mat(y));\n        }\n\n        void swap (\n            rvm_trainer& item\n        )\n        {\n            exchange(kernel, item.kernel);\n            exchange(eps, item.eps);\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type> scalar_matrix_type;\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_binary_classification_problem(x,y) == true,\n                \"\\tdecision_function rvm_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t y.nr(): \" << y.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                << \"\\n\\t y.nc(): \" << y.nc() \n                << \"\\n\\t is_binary_classification_problem(x,y): \" << ((is_binary_classification_problem(x,y))? \"true\":\"false\")\n                );\n\n            // make a target vector where +1 examples have value 1 and -1 examples\n            // have a value of 0.\n            scalar_vector_type t(y.size());\n            for (long i = 0; i < y.size(); ++i)\n            {\n                if (y(i) == 1)\n                    t(i) = 1;\n                else\n                    t(i) = 0;\n            }\n\n            /*! This is the convention for the active_bases variable in the function:\n                - if (active_bases(i) >= 0) then\n                    - alpha(active_bases(i)) == the alpha value associated with sample x(i)\n                    - weights(active_bases(i)) == the weight value associated with sample x(i)\n                    - colm(phi, active_bases(i)) == the column of phi associated with sample x(i)\n                    - colm(phi, active_bases(i)) == kernel column i (from get_kernel_colum()) \n                - else\n                    - the i'th sample isn't in the model and notionally has an alpha of infinity and\n                      a weight of 0.\n            !*/\n            matrix<long,0,1,mem_manager_type> active_bases(x.nr());\n            scalar_matrix_type phi(x.nr(),1);\n            scalar_vector_type alpha(1), prev_alpha;\n            scalar_vector_type weights(1), prev_weights;\n\n            scalar_vector_type tempv, K_col; \n\n            // set the initial values of these guys\n            set_all_elements(active_bases, -1);\n            long first_basis = pick_initial_vector(x,t);\n            get_kernel_colum(first_basis, x, K_col);\n            active_bases(first_basis) = 0;\n            set_colm(phi,0) = K_col;\n            alpha(0) = compute_initial_alpha(phi, t);\n            weights(0) = 1;\n\n\n            // now declare a bunch of other variables we will be using below\n            scalar_vector_type mu, t_hat, Q, S; \n            scalar_matrix_type sigma;\n            \n            matrix<scalar_type,1,0,mem_manager_type> tempv2, tempv3;\n            scalar_matrix_type tempm;\n\n            scalar_vector_type t_estimate;\n            scalar_vector_type beta;\n\n\n            Q.set_size(x.nr());\n            S.set_size(x.nr());\n\n            bool recompute_beta = true;\n\n            bool search_all_alphas = false;\n            unsigned long ticker = 0;\n            const unsigned long rounds_of_narrow_search = 100;\n            unsigned long iterations = 0;\n\n            while (iterations != max_iterations)\n            {\n                iterations++;\n                if (recompute_beta)\n                {\n                    // calculate the current t_estimate. (this is the predicted t value for each sample according to the\n                    // current state of the classifier)\n                    t_estimate = phi*weights;\n\n                    // calculate the current beta\n                    beta = sigmoid(t_estimate);\n                    beta = pointwise_multiply(beta,(uniform_matrix<scalar_type>(beta.nr(),beta.nc(),1)-beta));\n                    recompute_beta = false;\n                }\n\n                // Compute optimal weights and sigma for current alpha using IRLS.  This is the same\n                // technique documented in the paper by equations 12-14. \n                scalar_type weight_delta = std::numeric_limits<scalar_type>::max();\n                int count = 0;\n                while (weight_delta > 0.0001)\n                {\n                    // This is a sanity check to make sure we never get stuck in this\n                    // loop to do some degenerate numerical condition \n                    ++count;\n                    if (count > 100)\n                    {\n                        // jump us to where search_all_alphas will be set to true \n                        ticker = rounds_of_narrow_search;\n                        break;\n                    }\n\n                    // compute the updated sigma matrix\n                    sigma = scale_columns(trans(phi),beta)*phi;\n                    for (long r = 0; r < alpha.nr(); ++r)\n                        sigma(r,r) += alpha(r);\n                    sigma = inv(sigma);\n\n\n                    // compute the updated weights vector (t_hat = phi*mu_mp + inv(B)*(t-y))\n                    t_hat = t_estimate + trans(scale_columns(trans(t-sigmoid(t_estimate)),reciprocal(beta))); \n\n                    // mu = sigma*trans(phi)*b*t_hat\n                    mu = sigma*tmp(trans(phi)* trans(scale_columns(trans(t_hat), beta)));  \n\n                    // now compute how much the weights vector changed during this iteration\n                    // through this loop.\n                    weight_delta = max(abs(mu-weights));\n\n                    // put mu into the weights vector\n                    mu.swap(weights);\n\n                    // calculate the current t_estimate\n                    t_estimate = phi*weights;\n\n                    // calculate the current beta\n                    beta = sigmoid(t_estimate);\n                    beta = pointwise_multiply(beta, uniform_matrix<scalar_type>(beta.nr(),beta.nc(),1)-beta);\n\n                }\n\n                // check if we should do a full search for the best alpha to optimize\n                if (ticker >= rounds_of_narrow_search)\n                {\n                    // if the current alpha and weights are equal to what they were\n                    // at the last time we were about to start a wide search then\n                    // we are done.\n                    if (equal(prev_alpha, alpha, eps) && equal(prev_weights, weights, eps))\n                        break;\n\n\n                    prev_alpha = alpha;\n                    prev_weights = weights;\n                    search_all_alphas = true;\n                    ticker = 0;\n                }\n                else\n                {\n                    search_all_alphas = false;\n                }\n                ++ticker;\n\n                // compute S and Q using equations 24 and 25 (tempv = phi*sigma*trans(phi)*B*t_hat)\n                tempv = phi*tmp(sigma*tmp(trans(phi)*trans(scale_columns(trans(t_hat),beta)))); \n                for (long i = 0; i < S.size(); ++i)\n                {\n                    // if we are currently limiting the search for the next alpha to update\n                    // to the set in the active set then skip a non-active vector.\n                    if (search_all_alphas == false && active_bases(i) == -1)\n                        continue;\n\n                    // get the column for this sample out of the kernel matrix.  If it is \n                    // something in the active set then just get it right out of phi, otherwise \n                    // we have to calculate it.\n                    if (active_bases(i) != -1)\n                        K_col = colm(phi,active_bases(i));\n                    else\n                        get_kernel_colum(i, x, K_col);\n\n                    // tempv2 = trans(phi_m)*B\n                    tempv2 = scale_columns(trans(K_col), beta);  \n                    tempv3 = tempv2*phi;\n                    S(i) = tempv2*K_col - tempv3*sigma*trans(tempv3);\n                    Q(i) = tempv2*t_hat - tempv2*tempv; \n                }\n\n                const long selected_idx = rvm_helpers::find_next_best_alpha_to_update(S,Q,alpha,active_bases, search_all_alphas, eps);\n\n\n                // if find_next_best_alpha_to_update didn't find any good alpha to update\n                if (selected_idx == -1)\n                {\n                    if (search_all_alphas == false)\n                    {\n                        // jump us to where search_all_alphas will be set to true and try again\n                        ticker = rounds_of_narrow_search;\n                        continue;\n                    }\n                    else\n                    {\n                        // we are really done so quit the main loop\n                        break;\n                    }\n                }\n\n\n                // next we update the selected alpha.\n\n                // if the selected alpha is in the active set\n                if (active_bases(selected_idx) >= 0)\n                {\n                    const long idx = active_bases(selected_idx);\n                    const scalar_type s = alpha(idx)*S(selected_idx)/(alpha(idx) - S(selected_idx));\n                    const scalar_type q = alpha(idx)*Q(selected_idx)/(alpha(idx) - S(selected_idx));\n\n                    if (q*q-s > 0)\n                    {\n                        // reestimate the value of alpha\n                        alpha(idx) = s*s/(q*q-s);\n\n                    }\n                    else \n                    {\n                        // the new alpha value is infinite so remove the selected alpha from our model\n                        active_bases(selected_idx) = -1; \n                        phi = remove_col(phi, idx);\n                        weights = remove_row(weights, idx);\n                        alpha = remove_row(alpha, idx);\n\n                        // fix the index values in active_bases\n                        for (long i = 0; i < active_bases.size(); ++i)\n                        {\n                            if (active_bases(i) > idx)\n                            {\n                                active_bases(i) -= 1;\n                            }\n                        }\n\n                        // we changed the number of weights so we need to remember to \n                        // recompute the beta vector next time around the main loop.\n                        recompute_beta = true;\n                    }\n                }\n                else\n                {\n                    const scalar_type s = S(selected_idx);\n                    const scalar_type q = Q(selected_idx);\n\n                    if (q*q-s > 0)\n                    {\n                        // add the selected alpha to our model\n                        \n                        active_bases(selected_idx) = phi.nc();\n                        \n                        // update alpha\n                        tempv.set_size(alpha.size()+1);\n                        set_subm(tempv, get_rect(alpha)) = alpha;\n                        tempv(phi.nc()) = s*s/(q*q-s);\n                        tempv.swap(alpha);\n\n                        // update weights \n                        tempv.set_size(weights.size()+1);\n                        set_subm(tempv, get_rect(weights)) = weights;\n                        tempv(phi.nc()) = 0;\n                        tempv.swap(weights);\n\n                        // update phi by adding the new sample's kernel matrix column in as one of phi's columns\n                        tempm.set_size(phi.nr(), phi.nc()+1);\n                        set_subm(tempm, get_rect(phi)) = phi;\n                        get_kernel_colum(selected_idx, x, K_col);\n                        set_colm(tempm, phi.nc()) = K_col;\n                        tempm.swap(phi);\n\n\n                        // we changed the number of weights so we need to remember to \n                        // recompute the beta vector next time around the main loop.\n                        recompute_beta = true;\n                    }\n                }\n\n            } // end while(true).  So we have converged on the final answer.\n\n\n            // now put everything into a decision_function object and return it\n            std_vector_c<sample_type> dictionary;\n            std_vector_c<scalar_type> final_weights;\n            for (long i = 0; i < active_bases.size(); ++i)\n            {\n                if (active_bases(i) >= 0)\n                {\n                    dictionary.push_back(x(i));\n                    final_weights.push_back(weights(active_bases(i)));\n                }\n            }\n\n            return decision_function<kernel_type> ( mat(final_weights),\n                                                    -sum(mat(final_weights))*tau, \n                                                    kernel,\n                                                    mat(dictionary));\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename M1, typename M2>\n        long pick_initial_vector (\n            const M1& x,\n            const M2& t\n        ) const\n        {\n            scalar_vector_type K_col;\n            double max_projection = -std::numeric_limits<scalar_type>::infinity();\n            long max_idx = 0;\n            // find the row in the kernel matrix that has the biggest normalized projection onto the t vector\n            for (long r = 0; r < x.nr(); ++r)\n            {\n                get_kernel_colum(r,x,K_col);\n                double temp = trans(K_col)*t;\n                temp = temp*temp/length_squared(K_col);\n\n                if (temp > max_projection)\n                {\n                    max_projection = temp;\n                    max_idx = r;\n                }\n            }\n\n            return max_idx;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        void get_kernel_colum (\n            long idx,\n            const T& x,\n            scalar_vector_type& col\n        ) const\n        {\n            col.set_size(x.nr());\n            for (long i = 0; i < col.size(); ++i)\n            {\n                col(i) = kernel(x(idx), x(i)) + tau;\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename M1, typename M2>\n        scalar_type compute_initial_alpha (\n            const M1& phi,\n            const M2& t\n        ) const\n        {\n            const double temp = length_squared(phi);\n            const double temp2 = trans(phi)*t;\n\n            return temp/( temp2*temp2/temp + variance(t)*0.1);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    // private member variables\n        kernel_type kernel;\n        scalar_type eps;\n        unsigned long max_iterations;\n\n        const static scalar_type tau;\n\n    }; // end of class rvm_trainer \n\n    template <typename kernel_type>\n    const typename kernel_type::scalar_type rvm_trainer<kernel_type>::tau = static_cast<typename kernel_type::scalar_type>(0.001);\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K>\n    void swap (\n        rvm_trainer<K>& a,\n        rvm_trainer<K>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kern_type \n        >\n    class rvm_regression_trainer \n    {\n        /*!\n            This is an implementation of the regression version of the\n            relevance vector machine algorithm described in the paper:\n                Tipping, M. E. and A. C. Faul (2003). Fast marginal likelihood maximisation \n                for sparse Bayesian models. In C. M. Bishop and B. J. Frey (Eds.), Proceedings \n                of the Ninth International Workshop on Artificial Intelligence and Statistics, \n                Key West, FL, Jan 3-6.\n\n            This code mostly does what is described in the above paper with the exception \n            that here we use a different stopping condition as well as a modified alpha\n            selection rule.  See the code for the exact details.\n        !*/\n\n    public:\n        typedef kern_type kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        rvm_regression_trainer (\n        ) : eps(0.001)\n        {\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\tvoid rvm_regression_trainer::set_epsilon(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps: \" << eps_ \n                );\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const\n        { \n            return eps;\n        }\n\n        void set_kernel (\n            const kernel_type& k\n        )\n        {\n            kernel = k;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& t\n        ) const\n        {\n            return do_train(mat(x), mat(t));\n        }\n\n        void swap (\n            rvm_regression_trainer& item\n        )\n        {\n            exchange(kernel, item.kernel);\n            exchange(eps, item.eps);\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n        typedef matrix<scalar_type,0,0,mem_manager_type> scalar_matrix_type;\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& t\n        ) const\n        {\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(x,t) && x.size() > 0,\n                \"\\tdecision_function rvm_regression_trainer::train(x,t)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t t.nr(): \" << t.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                << \"\\n\\t t.nc(): \" << t.nc() \n                );\n\n\n            /*! This is the convention for the active_bases variable in the function:\n                - if (active_bases(i) >= 0) then\n                    - alpha(active_bases(i)) == the alpha value associated with sample x(i)\n                    - weights(active_bases(i)) == the weight value associated with sample x(i)\n                    - colm(phi, active_bases(i)) == the column of phi associated with sample x(i)\n                    - colm(phi, active_bases(i)) == kernel column i (from get_kernel_colum()) \n                - else\n                    - the i'th sample isn't in the model and notionally has an alpha of infinity and\n                      a weight of 0.\n            !*/\n            matrix<long,0,1,mem_manager_type> active_bases(x.nr());\n            scalar_matrix_type phi(x.nr(),1);\n            scalar_vector_type alpha(1), prev_alpha;\n            scalar_vector_type weights(1), prev_weights;\n\n            scalar_vector_type tempv, K_col; \n            scalar_type var = variance(t)*0.1;\n\n            // set the initial values of these guys\n            set_all_elements(active_bases, -1);\n            long first_basis = pick_initial_vector(x,t);\n            get_kernel_colum(first_basis, x, K_col);\n            active_bases(first_basis) = 0;\n            set_colm(phi,0) = K_col;\n            alpha(0) = compute_initial_alpha(phi, t, var);\n            weights(0) = 1;\n\n\n            // now declare a bunch of other variables we will be using below\n            scalar_vector_type Q, S; \n            scalar_matrix_type sigma;\n            \n            matrix<scalar_type,1,0,mem_manager_type> tempv2, tempv3;\n            scalar_matrix_type tempm;\n\n\n            Q.set_size(x.nr());\n            S.set_size(x.nr());\n\n\n            bool search_all_alphas = false;\n            unsigned long ticker = 0;\n            const unsigned long rounds_of_narrow_search = 100;\n\n            while (true)\n            {\n                // Compute optimal weights and sigma for current alpha using equation 6. \n                sigma = trans(phi)*phi/var;\n                for (long r = 0; r < alpha.nr(); ++r)\n                    sigma(r,r) += alpha(r);\n                sigma = inv(sigma);\n                weights = sigma*trans(phi)*t/var;  \n\n\n\n                // check if we should do a full search for the best alpha to optimize\n                if (ticker == rounds_of_narrow_search)\n                {\n                    // if the current alpha and weights are equal to what they were\n                    // at the last time we were about to start a wide search then\n                    // we are done.\n                    if (equal(prev_alpha, alpha, eps) && equal(prev_weights, weights, eps))\n                        break;\n\n                    prev_alpha = alpha;\n                    prev_weights = weights;\n                    search_all_alphas = true;\n                    ticker = 0;\n                }\n                else\n                {\n                    search_all_alphas = false;\n                }\n                ++ticker;\n\n                // compute S and Q using equations 24 and 25 (tempv = phi*sigma*trans(phi)*B*t)\n                tempv = phi*tmp(sigma*tmp(trans(phi)*t/var)); \n                for (long i = 0; i < S.size(); ++i)\n                {\n                    // if we are currently limiting the search for the next alpha to update\n                    // to the set in the active set then skip a non-active vector.\n                    if (search_all_alphas == false && active_bases(i) == -1)\n                        continue;\n\n                    // get the column for this sample out of the kernel matrix.  If it is \n                    // something in the active set then just get it right out of phi, otherwise \n                    // we have to calculate it.\n                    if (active_bases(i) != -1)\n                        K_col = colm(phi,active_bases(i));\n                    else\n                        get_kernel_colum(i, x, K_col);\n\n                    // tempv2 = trans(phi_m)*B\n                    tempv2 = trans(K_col)/var;  \n                    tempv3 = tempv2*phi;\n                    S(i) = tempv2*K_col - tempv3*sigma*trans(tempv3);\n                    Q(i) = tempv2*t - tempv2*tempv; \n                }\n\n                const long selected_idx = rvm_helpers::find_next_best_alpha_to_update(S,Q,alpha,active_bases, search_all_alphas, eps);\n\n                // if find_next_best_alpha_to_update didn't find any good alpha to update\n                if (selected_idx == -1)\n                {\n                    if (search_all_alphas == false)\n                    {\n                        // jump us to where search_all_alphas will be set to true and try again\n                        ticker = rounds_of_narrow_search;\n                        continue;\n                    }\n                    else\n                    {\n                        // we are really done so quit the main loop\n                        break;\n                    }\n                }\n\n                // recompute the variance\n                var = length_squared(t - phi*weights)/(x.nr() - weights.size() + trans(alpha)*diag(sigma));\n\n                // next we update the selected alpha.\n\n                // if the selected alpha is in the active set\n                if (active_bases(selected_idx) >= 0)\n                {\n                    const long idx = active_bases(selected_idx);\n                    const scalar_type s = alpha(idx)*S(selected_idx)/(alpha(idx) - S(selected_idx));\n                    const scalar_type q = alpha(idx)*Q(selected_idx)/(alpha(idx) - S(selected_idx));\n\n                    if (q*q-s > 0)\n                    {\n                        // reestimate the value of alpha\n                        alpha(idx) = s*s/(q*q-s);\n\n                    }\n                    else \n                    {\n                        // the new alpha value is infinite so remove the selected alpha from our model\n                        active_bases(selected_idx) = -1; \n                        phi = remove_col(phi, idx);\n                        weights = remove_row(weights, idx);\n                        alpha = remove_row(alpha, idx);\n\n                        // fix the index values in active_bases\n                        for (long i = 0; i < active_bases.size(); ++i)\n                        {\n                            if (active_bases(i) > idx)\n                            {\n                                active_bases(i) -= 1;\n                            }\n                        }\n                    }\n                }\n                else\n                {\n                    const scalar_type s = S(selected_idx);\n                    const scalar_type q = Q(selected_idx);\n\n                    if (q*q-s > 0)\n                    {\n                        // add the selected alpha to our model\n                        \n                        active_bases(selected_idx) = phi.nc();\n                        \n                        // update alpha\n                        tempv.set_size(alpha.size()+1);\n                        set_subm(tempv, get_rect(alpha)) = alpha;\n                        tempv(phi.nc()) = s*s/(q*q-s);\n                        tempv.swap(alpha);\n\n                        // update weights \n                        tempv.set_size(weights.size()+1);\n                        set_subm(tempv, get_rect(weights)) = weights;\n                        tempv(phi.nc()) = 0;\n                        tempv.swap(weights);\n\n                        // update phi by adding the new sample's kernel matrix column in as one of phi's columns\n                        tempm.set_size(phi.nr(), phi.nc()+1);\n                        set_subm(tempm, get_rect(phi)) = phi;\n                        get_kernel_colum(selected_idx, x, K_col);\n                        set_colm(tempm, phi.nc()) = K_col;\n                        tempm.swap(phi);\n\n                    }\n                }\n\n\n\n            } // end while(true).  So we have converged on the final answer.\n\n       \n            // now put everything into a decision_function object and return it\n            std_vector_c<sample_type> dictionary;\n            std_vector_c<scalar_type> final_weights;\n            for (long i = 0; i < active_bases.size(); ++i)\n            {\n                if (active_bases(i) >= 0)\n                {\n                    dictionary.push_back(x(i));\n                    final_weights.push_back(weights(active_bases(i)));\n                }\n            }\n\n            return decision_function<kernel_type> ( mat(final_weights),\n                                                    -sum(mat(final_weights))*tau, \n                                                    kernel,\n                                                    mat(dictionary));\n\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        void get_kernel_colum (\n            long idx,\n            const T& x,\n            scalar_vector_type& col\n        ) const\n        {\n            col.set_size(x.nr());\n            for (long i = 0; i < col.size(); ++i)\n            {\n                col(i) = kernel(x(idx), x(i)) + tau;\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename M1, typename M2>\n        scalar_type compute_initial_alpha (\n            const M1& phi,\n            const M2& t,\n            const scalar_type& var\n        ) const\n        {\n            const double temp = length_squared(phi);\n            const double temp2 = trans(phi)*t;\n\n            return temp/( temp2*temp2/temp + var);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename M1, typename M2>\n        long pick_initial_vector (\n            const M1& x,\n            const M2& t\n        ) const\n        {\n            scalar_vector_type K_col;\n            double max_projection = -std::numeric_limits<scalar_type>::infinity();\n            long max_idx = 0;\n            // find the row in the kernel matrix that has the biggest normalized projection onto the t vector\n            for (long r = 0; r < x.nr(); ++r)\n            {\n                get_kernel_colum(r,x,K_col);\n                double temp = trans(K_col)*t;\n                temp = temp*temp/length_squared(K_col);\n\n                if (temp > max_projection)\n                {\n                    max_projection = temp;\n                    max_idx = r;\n                }\n            }\n\n            return max_idx;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    // private member variables\n        kernel_type kernel;\n        scalar_type eps;\n\n        const static scalar_type tau;\n\n    }; // end of class rvm_regression_trainer \n\n    template <typename kernel_type>\n    const typename kernel_type::scalar_type rvm_regression_trainer<kernel_type>::tau = static_cast<typename kernel_type::scalar_type>(0.001);\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K>\n    void swap (\n        rvm_regression_trainer<K>& a,\n        rvm_regression_trainer<K>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RVm_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/rvm_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RVm_ABSTRACT_\n#ifdef DLIB_RVm_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kern_type \n        >\n    class rvm_trainer \n    {\n        /*!\n            REQUIREMENTS ON kern_type\n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements a trainer for a relevance vector machine for \n                solving binary classification problems.\n\n                The implementation of the RVM training algorithm used by this object is based\n                on the following excellent paper:\n                    Tipping, M. E. and A. C. Faul (2003). Fast marginal likelihood maximisation \n                    for sparse Bayesian models. In C. M. Bishop and B. J. Frey (Eds.), Proceedings \n                    of the Ninth International Workshop on Artificial Intelligence and Statistics, \n                    Key West, FL, Jan 3-6.\n        !*/\n\n    public:\n        typedef kern_type kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        rvm_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a relevance vector machine.\n                - #get_epsilon() == 0.001\n                - #get_max_iterations() == 2000\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Generally a good value for this is 0.001.  Smaller values may result\n                  in a more accurate solution but take longer to execute.\n        !*/\n\n        void set_kernel (\n            const kernel_type& k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k \n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object\n        !*/\n\n        unsigned long get_max_iterations (\n        ) const; \n        /*!\n            ensures\n                - returns the maximum number of iterations the RVM optimizer is allowed to\n                  run before it is required to stop and return a result.\n        !*/\n\n        void set_max_iterations (\n            unsigned long max_iter\n        ); \n        /*!\n            ensures\n                - #get_max_iterations() == max_iter\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - is_binary_classification_problem(x,y) == true\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n            ensures\n                - trains a relevance vector classifier given the training samples in x and \n                  labels in y.  \n                - returns a decision function F with the following properties:\n                    - if (new_x is a sample predicted have +1 label) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n            throws\n                - std::bad_alloc\n        !*/\n\n        void swap (\n            rvm_trainer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };  \n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K>\n    void swap (\n        rvm_trainer<K>& a,\n        rvm_trainer<K>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kern_type \n        >\n    class rvm_regression_trainer\n    {\n        /*!\n            REQUIREMENTS ON kern_type\n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements a trainer for a relevance vector machine for \n                solving regression problems.\n\n                The implementation of the RVM training algorithm used by this object is based\n                on the following excellent paper:\n                    Tipping, M. E. and A. C. Faul (2003). Fast marginal likelihood maximisation \n                    for sparse Bayesian models. In C. M. Bishop and B. J. Frey (Eds.), Proceedings \n                    of the Ninth International Workshop on Artificial Intelligence and Statistics, \n                    Key West, FL, Jan 3-6.\n        !*/\n\n    public:\n        typedef kern_type kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        rvm_regression_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a relevance vector machine.\n                - #get_epsilon() == 0.001\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Generally a good value for this is 0.001.  Smaller values may result\n                  in a more accurate solution but take longer to execute.\n        !*/\n\n        void set_kernel (\n            const kernel_type& k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k \n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n                - is_learning_problem(x,y) == true\n                - x.size() > 0\n            ensures\n                - trains a RVM given the training samples in x and \n                  labels in y and returns the resulting decision_function.  \n            throws\n                - std::bad_alloc\n        !*/\n\n        void swap (\n            rvm_regression_trainer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };  \n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K>\n    void swap (\n        rvm_regression_trainer<K>& a,\n        rvm_regression_trainer<K>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RVm_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sequence_labeler.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEQUENCE_LAbELER_H_h_\n#define DLIB_SEQUENCE_LAbELER_H_h_\n\n#include \"sequence_labeler_abstract.h\"\n#include \"../matrix.h\"\n#include <vector>\n#include \"../optimization/find_max_factor_graph_viterbi.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace fe_helpers\n    {\n        template <typename EXP>\n        struct dot_functor\n        {\n            dot_functor(const matrix_exp<EXP>& lambda_) : lambda(lambda_), value(0) {}\n\n            inline void operator() (\n                unsigned long feat_index\n            )\n            {\n                value += lambda(feat_index);\n            }\n\n            inline void operator() (\n                unsigned long feat_index,\n                double feat_value\n            )\n            {\n                value += feat_value*lambda(feat_index);\n            }\n\n            const matrix_exp<EXP>& lambda;\n            double value;\n        };\n\n        template <typename feature_extractor, typename EXP, typename sequence_type, typename EXP2> \n        double dot(\n            const matrix_exp<EXP>& lambda,\n            const feature_extractor& fe,\n            const sequence_type& sequence,\n            const matrix_exp<EXP2>& candidate_labeling,\n            unsigned long position\n        )\n        {\n            dot_functor<EXP> dot(lambda);\n            fe.get_features(dot, sequence, candidate_labeling, position);\n            return dot.value;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(\n            has_reject_labeling, \n            bool, \n            template reject_labeling<matrix<unsigned long> >,\n            (const typename T::sequence_type&, const matrix_exp<matrix<unsigned long> >&, unsigned long)const\n        );\n\n        template <typename feature_extractor, typename EXP, typename sequence_type>\n        typename enable_if<has_reject_labeling<feature_extractor>,bool>::type call_reject_labeling_if_exists (\n            const feature_extractor& fe,\n            const sequence_type& x,\n            const matrix_exp<EXP>& y,\n            unsigned long position\n        )\n        {\n            return fe.reject_labeling(x, y, position);\n        }\n\n        template <typename feature_extractor, typename EXP, typename sequence_type>\n        typename disable_if<has_reject_labeling<feature_extractor>,bool>::type call_reject_labeling_if_exists (\n            const feature_extractor& ,\n            const sequence_type& ,\n            const matrix_exp<EXP>& ,\n            unsigned long \n        )\n        {\n            return false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor \n        >\n    typename enable_if<dlib::impl::has_reject_labeling<feature_extractor>,bool>::type contains_invalid_labeling (\n        const feature_extractor& fe,\n        const typename feature_extractor::sequence_type& x,\n        const std::vector<unsigned long>& y\n    )\n    {\n        if (x.size() != y.size())\n            return true;\n\n        matrix<unsigned long,0,1> node_states;\n\n        for (unsigned long i = 0; i < x.size(); ++i)\n        {\n            node_states.set_size(std::min(fe.order(),i) + 1);\n            for (unsigned long j = 0; j < (unsigned long)node_states.size(); ++j)\n                node_states(j) = y[i-j];\n\n            if (fe.reject_labeling(x, node_states, i))\n                return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor \n        >\n    typename disable_if<dlib::impl::has_reject_labeling<feature_extractor>,bool>::type contains_invalid_labeling (\n        const feature_extractor& ,\n        const typename feature_extractor::sequence_type& x,\n        const std::vector<unsigned long>& y \n    )\n    {\n        if (x.size() != y.size())\n            return true;\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor \n        >\n    bool contains_invalid_labeling (\n        const feature_extractor& fe,\n        const std::vector<typename feature_extractor::sequence_type>& x,\n        const std::vector<std::vector<unsigned long> >& y\n    )\n    {\n        if (x.size() != y.size())\n            return true;\n\n        for (unsigned long i = 0; i < x.size(); ++i)\n        {\n            if (contains_invalid_labeling(fe,x[i],y[i]))\n                return true;\n        }\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class sequence_labeler\n    {\n    public:\n        typedef typename feature_extractor::sequence_type sample_sequence_type;\n        typedef std::vector<unsigned long> labeled_sequence_type;\n\n    private:\n        class map_prob\n        {\n        public:\n            unsigned long order() const { return fe.order(); }\n            unsigned long num_states() const { return fe.num_labels(); }\n\n            map_prob(\n                const sample_sequence_type& x_,\n                const feature_extractor& fe_,\n                const matrix<double,0,1>& weights_\n            ) :\n                sequence(x_),\n                fe(fe_),\n                weights(weights_)\n            {\n            }\n\n            unsigned long number_of_nodes(\n            ) const\n            {\n                return sequence.size();\n            }\n\n            template <\n                typename EXP \n                >\n            double factor_value (\n                unsigned long node_id,\n                const matrix_exp<EXP>& node_states\n            ) const\n            {\n                if (dlib::impl::call_reject_labeling_if_exists(fe, sequence,  node_states, node_id))\n                    return -std::numeric_limits<double>::infinity();\n\n                return fe_helpers::dot(weights, fe, sequence, node_states, node_id);\n            }\n\n            const sample_sequence_type& sequence;\n            const feature_extractor& fe;\n            const matrix<double,0,1>& weights;\n        };\n    public:\n\n        sequence_labeler()\n        {\n            weights.set_size(fe.num_features());\n            weights = 0;\n        }\n\n        explicit sequence_labeler(\n            const matrix<double,0,1>& weights_\n        ) : \n            weights(weights_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(fe.num_features() == static_cast<unsigned long>(weights_.size()),\n                \"\\t sequence_labeler::sequence_labeler(weights_)\"\n                << \"\\n\\t These sizes should match\"\n                << \"\\n\\t fe.num_features(): \" << fe.num_features() \n                << \"\\n\\t weights_.size():   \" << weights_.size() \n                << \"\\n\\t this: \" << this\n                );\n        }\n\n        sequence_labeler(\n            const matrix<double,0,1>& weights_,\n            const feature_extractor& fe_\n        ) :\n            fe(fe_),\n            weights(weights_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(fe_.num_features() == static_cast<unsigned long>(weights_.size()),\n                \"\\t sequence_labeler::sequence_labeler(weights_,fe_)\"\n                << \"\\n\\t These sizes should match\"\n                << \"\\n\\t fe_.num_features(): \" << fe_.num_features() \n                << \"\\n\\t weights_.size():    \" << weights_.size() \n                << \"\\n\\t this: \" << this\n                );\n        }\n\n        const feature_extractor& get_feature_extractor (\n        ) const { return fe; }\n\n        const matrix<double,0,1>& get_weights (\n        ) const { return weights; }\n\n        unsigned long num_labels (\n        ) const { return fe.num_labels(); }\n\n        labeled_sequence_type operator() (\n            const sample_sequence_type& x\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(num_labels() > 0,\n                \"\\t labeled_sequence_type sequence_labeler::operator()(x)\"\n                << \"\\n\\t You can't have no labels.\"\n                << \"\\n\\t this: \" << this\n                );\n\n            labeled_sequence_type y;\n            find_max_factor_graph_viterbi(map_prob(x,fe,weights), y);\n            return y;\n        }\n\n        void label_sequence (\n            const sample_sequence_type& x,\n            labeled_sequence_type& y\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(num_labels() > 0,\n                \"\\t void sequence_labeler::label_sequence(x,y)\"\n                << \"\\n\\t You can't have no labels.\"\n                << \"\\n\\t this: \" << this\n                );\n\n            find_max_factor_graph_viterbi(map_prob(x,fe,weights), y);\n        }\n\n    private:\n\n        feature_extractor fe;\n        matrix<double,0,1> weights;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void serialize (\n        const sequence_labeler<feature_extractor>& item,\n        std::ostream& out\n    )\n    {\n        serialize(item.get_feature_extractor(), out);\n        serialize(item.get_weights(), out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void deserialize (\n        sequence_labeler<feature_extractor>& item,\n        std::istream& in \n    )\n    {\n        feature_extractor fe;\n        matrix<double,0,1> weights;\n\n        deserialize(fe, in);\n        deserialize(weights, in);\n\n        item = sequence_labeler<feature_extractor>(weights, fe);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEQUENCE_LAbELER_H_h_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sequence_labeler_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SEQUENCE_LAbELER_ABSTRACT_H_h_\n#ifdef DLIB_SEQUENCE_LAbELER_ABSTRACT_H_h_\n\n#include \"../matrix.h\"\n#include <vector>\n#include \"../optimization/find_max_factor_graph_viterbi_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class example_feature_extractor\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines the interface a feature extractor must implement\n                if it is to be used with the sequence_labeler defined at the bottom\n                of this file.  \n                \n                The model used by sequence_labeler objects is the following.  \n                Given an input sequence x, predict an output label sequence y\n                such that:\n                    y == argmax_Y dot(w, PSI(x,Y))\n                    Where w is a parameter vector.\n\n                Therefore, a feature extractor defines how the PSI(x,y) feature vector \n                is calculated.  It also defines how many output labels there are as \n                well as the order of the model.  \n\n                Finally, note that PSI(x,y) is a sum of feature vectors, each derived \n                from the entire input sequence x but only part of the label sequence y.\n                Each of these constituent feature vectors is defined by the get_features() \n                method of this class.\n\n            THREAD SAFETY\n                Instances of this object are required to be threadsafe, that is, it should\n                be safe for multiple threads to make concurrent calls to the member\n                functions of this object.\n        !*/\n\n    public:\n        // This should be the type used to represent an input sequence.  It can be\n        // anything so long as it has a .size() which returns the length of the sequence.\n        typedef the_type_used_to_represent_a_sequence sequence_type;\n\n        example_feature_extractor (\n        ); \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        unsigned long num_features (\n        ) const;\n        /*!\n            ensures\n                - returns the dimensionality of the PSI() feature vector.  \n        !*/\n\n        unsigned long order(\n        ) const; \n        /*!\n            ensures\n                - This object represents a Markov model on the output labels.\n                  This parameter defines the order of the model.  That is, this \n                  value controls how many previous label values get to be taken \n                  into consideration when performing feature extraction for a\n                  particular element of the input sequence.  Note that the runtime\n                  of the algorithm is exponential in the order.  So don't make order\n                  very large.\n        !*/\n\n        unsigned long num_labels(\n        ) const; \n        /*!\n            ensures\n                - returns the number of possible output labels.\n        !*/\n\n        template <typename EXP>\n        bool reject_labeling (\n            const sequence_type& x,\n            const matrix_exp<EXP>& y,\n            unsigned long position\n        ) const;\n        /*!\n            requires\n                - EXP::type == unsigned long\n                  (i.e. y contains unsigned longs)\n                - position < x.size()\n                - y.size() == min(position, order()) + 1\n                - is_vector(y) == true\n                - max(y) < num_labels() \n            ensures\n                - for all valid i:\n                    - interprets y(i) as the label corresponding to x[position-i]\n                - if (the labeling in y for x[position] is always the wrong labeling) then\n                    - returns true\n                      (note that reject_labeling() is just an optional tool to allow you \n                      to overrule the normal labeling algorithm.  You don't have to use\n                      it.  So if you don't include a reject_labeling() method in your\n                      feature extractor it is the same as including one that always\n                      returns false.)\n                - else\n                    - returns false\n        !*/\n\n        template <typename feature_setter, typename EXP>\n        void get_features (\n            feature_setter& set_feature,\n            const sequence_type& x,\n            const matrix_exp<EXP>& y,\n            unsigned long position\n        ) const;\n        /*!\n            requires\n                - EXP::type == unsigned long\n                  (i.e. y contains unsigned longs)\n                - reject_labeling(x,y,position) == false\n                - position < x.size()\n                - y.size() == min(position, order()) + 1\n                - is_vector(y) == true\n                - max(y) < num_labels() \n                - set_feature is a function object which allows expressions of the form:\n                    - set_features((unsigned long)feature_index, (double)feature_value);\n                    - set_features((unsigned long)feature_index);\n            ensures\n                - for all valid i:\n                    - interprets y(i) as the label corresponding to x[position-i]\n                - This function computes the part of PSI() corresponding to the x[position]\n                  element of the input sequence.  Moreover, this part of PSI() is returned as \n                  a sparse vector by invoking set_feature().  For example, to set the feature \n                  with an index of 55 to the value of 1 this method would call:\n                    set_feature(55);\n                  Or equivalently:\n                    set_feature(55,1);\n                  Therefore, the first argument to set_feature is the index of the feature \n                  to be set while the second argument is the value the feature should take.\n                  Additionally, note that calling set_feature() multiple times with the same \n                  feature index does NOT overwrite the old value, it adds to the previous \n                  value.  For example, if you call set_feature(55) 3 times then it will\n                  result in feature 55 having a value of 3.\n                - This function only calls set_feature() with feature_index values < num_features()\n        !*/\n\n        unsigned long num_nonnegative_weights (\n        ) const;\n        /*!\n            ensures\n                - returns the number of elements of the w parameter vector which should be\n                  non-negative.  That is, this feature extractor is intended to be used\n                  with w vectors where the first num_nonnegative_weights() elements of w\n                  are >= 0.  That is, it should be the case that w(i) >= 0 for all i <\n                  num_nonnegative_weights().\n                - Note that num_nonnegative_weights() is just an optional method to allow\n                  you to tell a tool like the structural_sequence_labeling_trainer that the\n                  learned w should have a certain number of non-negative elements.\n                  Therefore, if you do not provide a num_nonnegative_weights() method in\n                  your feature extractor then it will default to a value of 0, indicating\n                  that all elements of the w parameter vector may be any value.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize(\n        const example_feature_extractor& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize(\n        example_feature_extractor& item, \n        std::istream& in\n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor \n        >\n    bool contains_invalid_labeling (\n        const feature_extractor& fe,\n        const typename feature_extractor::sequence_type& x,\n        const std::vector<unsigned long>& y\n    );\n    /*!\n        requires\n            - feature_extractor must be an object that implements an interface compatible \n              with the example_feature_extractor discussed above.\n        ensures\n            - if (x.size() != y.size() ||\n                fe.reject_labeling() rejects any of the labels in y) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor \n        >\n    bool contains_invalid_labeling (\n        const feature_extractor& fe,\n        const std::vector<typename feature_extractor::sequence_type>& x,\n        const std::vector<std::vector<unsigned long> >& y\n    );\n    /*!\n        requires\n            - feature_extractor must be an object that implements an interface compatible \n              with the example_feature_extractor discussed above.\n        ensures\n            - if (x.size() != y.size() ||\n                contains_invalid_labeling(fe,x[i],y[i]) == true for some i ) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class sequence_labeler\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor\n                It must be an object that implements an interface compatible with \n                the example_feature_extractor discussed above.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for doing sequence labeling.  In particular, it is\n                capable of representing sequence labeling models such as those produced by\n                Hidden Markov SVMs or Chain Structured Conditional Random fields.  See the\n                following papers for an introduction to these techniques:\n                    - Hidden Markov Support Vector Machines by \n                      Y. Altun, I. Tsochantaridis, T. Hofmann\n                    - Shallow Parsing with Conditional Random Fields by \n                      Fei Sha and Fernando Pereira\n\n\n                The model used by this object is the following.  Given\n                an input sequence x, predict an output label sequence y\n                such that:\n                    y == argmax_Y dot(get_weights(), PSI(x,Y))\n                    Where PSI() is defined by the feature_extractor template\n                    argument.  \n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call the const members of this object from multiple\n                    threads so long as the feature_extractor is also threadsafe.  This is\n                    because the const members are purely read-only operations.  However,\n                    any operation that modifies a sequence_labeler is not threadsafe.\n        !*/\n\n    public:\n        typedef typename feature_extractor::sequence_type sample_sequence_type;\n        typedef std::vector<unsigned long> labeled_sequence_type;\n\n        sequence_labeler(\n        );\n        /*!\n            ensures\n                - #get_feature_extractor() == feature_extractor() \n                  (i.e. it will have its default value)\n                - #get_weights().size() == #get_feature_extractor().num_features()\n                - #get_weights() == 0\n        !*/\n\n        explicit sequence_labeler(\n            const matrix<double,0,1>& weights\n        ); \n        /*!\n            requires\n                - feature_extractor().num_features() == weights.size()\n            ensures\n                - #get_feature_extractor() == feature_extractor() \n                  (i.e. it will have its default value)\n                - #get_weights() == weights\n        !*/\n\n        sequence_labeler(\n            const matrix<double,0,1>& weights,\n            const feature_extractor& fe\n        ); \n        /*!\n            requires\n                - fe.num_features() == weights.size()\n            ensures\n                - #get_feature_extractor() == fe\n                - #get_weights() == weights\n        !*/\n\n        const feature_extractor& get_feature_extractor (\n        ) const; \n        /*!\n            ensures\n                - returns the feature extractor used by this object\n        !*/\n\n        const matrix<double,0,1>& get_weights (\n        ) const;\n        /*!\n            ensures\n                - returns the parameter vector associated with this sequence labeler. \n                  The length of the vector is get_feature_extractor().num_features().  \n        !*/\n\n        unsigned long num_labels (\n        ) const;\n        /*!\n            ensures\n                - returns get_feature_extractor().num_labels()\n                  (i.e. returns the number of possible output labels for each \n                  element of a sequence)\n        !*/\n\n        labeled_sequence_type operator() (\n            const sample_sequence_type& x\n        ) const;\n        /*!\n            requires\n                - num_labels() > 0\n            ensures\n                - returns a vector Y of label values such that:\n                    - Y.size() == x.size()\n                    - for all valid i: \n                        - Y[i] == the predicted label for x[i]\n                        - 0 <= Y[i] < num_labels()\n        !*/\n\n        void label_sequence (\n            const sample_sequence_type& x,\n            labeled_sequence_type& y\n        ) const;\n        /*!\n            requires\n                - num_labels() > 0\n            ensures\n                - #y == (*this)(x)\n                  (i.e. This is just another interface to the operator() routine\n                  above.  This one avoids returning the results by value and therefore\n                  might be a little faster in some cases)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void serialize (\n        const sequence_labeler<feature_extractor>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void deserialize (\n        sequence_labeler<feature_extractor>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEQUENCE_LAbELER_ABSTRACT_H_h_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sequence_segmenter.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SEQUENCE_SeGMENTER_H_h_\n#define DLIB_SEQUENCE_SeGMENTER_H_h_\n\n#include \"sequence_segmenter_abstract.h\"\n#include \"../matrix.h\"\n#include \"sequence_labeler.h\"\n#include <vector>\n\nnamespace dlib\n{\n    // This namespace contains implementation details for the sequence_segmenter.\n    namespace impl_ss\n    {\n\n    // ------------------------------------------------------------------------------------\n\n        // BIO/BILOU labels\n        const unsigned int BEGIN   = 0;\n        const unsigned int INSIDE  = 1;\n        const unsigned int OUTSIDE = 2;\n        const unsigned int LAST    = 3;\n        const unsigned int UNIT    = 4;\n\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename ss_feature_extractor>\n        class feature_extractor\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This is a feature extractor for a sequence_labeler.  It serves to map\n                    the interface defined by a sequence_labeler into the kind of interface\n                    defined for a sequence_segmenter.\n            !*/\n\n        public:\n            typedef typename ss_feature_extractor::sequence_type sequence_type;\n\n            ss_feature_extractor fe;\n\n            feature_extractor() {}\n            feature_extractor(const ss_feature_extractor& ss_fe_) : fe(ss_fe_) {}\n\n            unsigned long num_nonnegative_weights (\n            ) const\n            {\n                const unsigned long NL = ss_feature_extractor::use_BIO_model ? 3 : 5;\n                if (ss_feature_extractor::allow_negative_weights)\n                {\n                    return 0;\n                }\n                else\n                {\n                    // We make everything non-negative except for the label transition\n                    // and bias features.\n                    return num_features() - NL*NL - NL;\n                }\n            }\n\n            friend void serialize(const feature_extractor& item, std::ostream& out) \n            {\n                serialize(item.fe, out);\n            }\n\n            friend void deserialize(feature_extractor& item, std::istream& in) \n            {\n                deserialize(item.fe, in);\n            }\n\n            unsigned long num_features() const\n            {\n                const unsigned long NL = ss_feature_extractor::use_BIO_model ? 3 : 5;\n                if (ss_feature_extractor::use_high_order_features)\n                    return NL + NL*NL + (NL*NL+NL)*fe.num_features()*fe.window_size();\n                else\n                    return NL + NL*NL + NL*fe.num_features()*fe.window_size();\n            }\n\n            unsigned long order() const \n            { \n                return 1; \n            }\n\n            unsigned long num_labels() const \n            { \n                if (ss_feature_extractor::use_BIO_model)\n                    return 3;\n                else\n                    return 5;\n            }\n\n        private:\n\n            template <typename feature_setter>\n            struct dot_functor\n            {\n                /*!\n                    WHAT THIS OBJECT REPRESENTS\n                        This class wraps the feature_setter used by a sequence_labeler\n                        and turns it into the kind needed by a sequence_segmenter.\n                !*/\n\n                dot_functor(feature_setter& set_feature_, unsigned long offset_) : \n                    set_feature(set_feature_), offset(offset_) {}\n\n                feature_setter& set_feature;\n                unsigned long offset;\n\n                inline void operator() (\n                    unsigned long feat_index\n                )\n                {\n                    set_feature(offset+feat_index);\n                }\n\n                inline void operator() (\n                    unsigned long feat_index,\n                    double feat_value\n                )\n                {\n                    set_feature(offset+feat_index, feat_value);\n                }\n            };\n\n        public:\n\n            template <typename EXP>\n            bool reject_labeling (\n                const sequence_type& x,\n                const matrix_exp<EXP>& y,\n                unsigned long pos\n            ) const\n            {\n                if (ss_feature_extractor::use_BIO_model)\n                {\n                    // Don't allow BIO label patterns that don't correspond to a sensical\n                    // segmentation. \n                    if (y.size() > 1 && y(0) == INSIDE && y(1) == OUTSIDE)\n                        return true;\n                    if (y.size() == 1 && y(0) == INSIDE)\n                        return true;\n                }\n                else\n                {\n                    // Don't allow BILOU label patterns that don't correspond to a sensical\n                    // segmentation. \n                    if (y.size() > 1)\n                    {\n                        if (y(1) == BEGIN && y(0) == OUTSIDE)\n                            return true;\n                        if (y(1) == BEGIN && y(0) == UNIT)\n                            return true;\n                        if (y(1) == BEGIN && y(0) == BEGIN)\n                            return true;\n\n                        if (y(1) == INSIDE && y(0) == BEGIN)\n                            return true;\n                        if (y(1) == INSIDE && y(0) == OUTSIDE)\n                            return true;\n                        if (y(1) == INSIDE && y(0) == UNIT)\n                            return true;\n\n                        if (y(1) == OUTSIDE && y(0) == INSIDE)\n                            return true;\n                        if (y(1) == OUTSIDE && y(0) == LAST)\n                            return true;\n\n                        if (y(1) == LAST && y(0) == INSIDE)\n                            return true;\n                        if (y(1) == LAST && y(0) == LAST)\n                            return true;\n\n                        if (y(1) == UNIT && y(0) == INSIDE)\n                            return true;\n                        if (y(1) == UNIT && y(0) == LAST)\n                            return true;\n\n                        // if at the end of the sequence\n                        if (pos == x.size()-1)\n                        {\n                            if (y(0) == BEGIN)\n                                return true;\n                            if (y(0) == INSIDE)\n                                return true;\n                        }\n                    }\n                    else\n                    {\n                        if (y(0) == INSIDE)\n                            return true;\n                        if (y(0) == LAST)\n                            return true;\n\n                        // if at the end of the sequence\n                        if (pos == x.size()-1)\n                        {\n                            if (y(0) == BEGIN)\n                                return true;\n                        }\n                    }\n                }\n                return false;\n            }\n\n            template <typename feature_setter, typename EXP>\n            void get_features (\n                feature_setter& set_feature,\n                const sequence_type& x,\n                const matrix_exp<EXP>& y,\n                unsigned long position\n            ) const\n            {\n                unsigned long offset = 0;\n\n                const int window_size = fe.window_size();\n\n                const int base_dims = fe.num_features();\n                for (int i = 0; i < window_size; ++i)\n                {\n                    const long pos = i-window_size/2 + static_cast<long>(position);\n                    if (0 <= pos && pos < (long)x.size())\n                    {\n                        const unsigned long off1 = y(0)*base_dims;\n                        dot_functor<feature_setter> fs1(set_feature, offset+off1);\n                        fe.get_features(fs1, x, pos);\n\n                        if (ss_feature_extractor::use_high_order_features && y.size() > 1)\n                        {\n                            const unsigned long off2 = num_labels()*base_dims + (y(0)*num_labels()+y(1))*base_dims;\n                            dot_functor<feature_setter> fs2(set_feature, offset+off2);\n                            fe.get_features(fs2, x, pos);\n                        }\n                    }\n\n                    if (ss_feature_extractor::use_high_order_features)\n                        offset += num_labels()*base_dims + num_labels()*num_labels()*base_dims;\n                    else\n                        offset += num_labels()*base_dims;\n                }\n\n                // Pull out an indicator feature for the type of transition between the\n                // previous label and the current label.\n                if (y.size() > 1)\n                    set_feature(offset + y(1)*num_labels() + y(0));\n\n                offset += num_labels()*num_labels();\n                // pull out an indicator feature for the current label.  This is the per\n                // label bias.\n                set_feature(offset + y(0));\n            }\n        };\n\n    } // end namespace impl_ss\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    unsigned long total_feature_vector_size (\n        const feature_extractor& fe\n    )\n    {\n        const unsigned long NL = feature_extractor::use_BIO_model ? 3 : 5;\n        if (feature_extractor::use_high_order_features)\n            return NL + NL*NL + (NL*NL+NL)*fe.num_features()*fe.window_size();\n        else\n            return NL + NL*NL + NL*fe.num_features()*fe.window_size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class sequence_segmenter\n    {\n    public:\n        typedef typename feature_extractor::sequence_type sample_sequence_type;\n        typedef std::vector<std::pair<unsigned long, unsigned long> > segmented_sequence_type;\n\n\n        sequence_segmenter()\n        {\n#ifdef ENABLE_ASSERTS\n            const feature_extractor& fe = labeler.get_feature_extractor().fe;\n            DLIB_ASSERT(fe.window_size() >= 1 && fe.num_features() >= 1,\n                \"\\t sequence_segmenter::sequence_segmenter()\"\n                << \"\\n\\t An invalid feature extractor was supplied.\"\n                << \"\\n\\t fe.window_size():  \" << fe.window_size() \n                << \"\\n\\t fe.num_features(): \" << fe.num_features() \n                << \"\\n\\t this: \" << this\n            );\n#endif\n        }\n\n        explicit sequence_segmenter(\n            const matrix<double,0,1>& weights\n        ) : \n            labeler(weights)\n        {\n#ifdef ENABLE_ASSERTS\n            const feature_extractor& fe = labeler.get_feature_extractor().fe;\n            // make sure requires clause is not broken\n            DLIB_ASSERT(total_feature_vector_size(fe) == (unsigned long)weights.size(),\n                \"\\t sequence_segmenter::sequence_segmenter(weights)\"\n                << \"\\n\\t These sizes should match\"\n                << \"\\n\\t total_feature_vector_size(fe):  \" << total_feature_vector_size(fe) \n                << \"\\n\\t weights.size(): \" << weights.size() \n                << \"\\n\\t this: \" << this\n                );\n            DLIB_ASSERT(fe.window_size() >= 1 && fe.num_features() >= 1,\n                \"\\t sequence_segmenter::sequence_segmenter()\"\n                << \"\\n\\t An invalid feature extractor was supplied.\"\n                << \"\\n\\t fe.window_size():  \" << fe.window_size() \n                << \"\\n\\t fe.num_features(): \" << fe.num_features() \n                << \"\\n\\t this: \" << this\n            );\n#endif\n        }\n\n        sequence_segmenter(\n            const matrix<double,0,1>& weights,\n            const feature_extractor& fe\n        ) :\n            labeler(weights, impl_ss::feature_extractor<feature_extractor>(fe))\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(total_feature_vector_size(fe) == (unsigned long)weights.size(),\n                \"\\t sequence_segmenter::sequence_segmenter(weights,fe)\"\n                << \"\\n\\t These sizes should match\"\n                << \"\\n\\t total_feature_vector_size(fe):  \" << total_feature_vector_size(fe) \n                << \"\\n\\t weights.size(): \" << weights.size() \n                << \"\\n\\t this: \" << this\n                );\n            DLIB_ASSERT(fe.window_size() >= 1 && fe.num_features() >= 1,\n                \"\\t sequence_segmenter::sequence_segmenter()\"\n                << \"\\n\\t An invalid feature extractor was supplied.\"\n                << \"\\n\\t fe.window_size():  \" << fe.window_size() \n                << \"\\n\\t fe.num_features(): \" << fe.num_features() \n                << \"\\n\\t this: \" << this\n            );\n        }\n\n        const feature_extractor& get_feature_extractor (\n        ) const { return labeler.get_feature_extractor().fe; }\n\n        const matrix<double,0,1>& get_weights (\n        ) const { return labeler.get_weights(); }\n\n        segmented_sequence_type operator() (\n            const sample_sequence_type& x\n        ) const\n        {\n            segmented_sequence_type y;\n            segment_sequence(x,y);\n            return y;\n        }\n\n        void segment_sequence (\n            const sample_sequence_type& x,\n            segmented_sequence_type& y\n        ) const\n        {\n            y.clear();\n            std::vector<unsigned long> labels;\n            labeler.label_sequence(x, labels);\n\n            if (feature_extractor::use_BIO_model)\n            {\n                // Convert from BIO tagging to the explicit segments representation.\n                for (unsigned long i = 0; i < labels.size(); ++i)\n                {\n                    if (labels[i] == impl_ss::BEGIN)\n                    {\n                        const unsigned long begin = i;\n                        ++i;\n                        while (i < labels.size() && labels[i] == impl_ss::INSIDE)\n                            ++i;\n\n                        y.push_back(std::make_pair(begin, i));\n                        --i;\n                    }\n                }\n            }\n            else\n            {\n                // Convert from BILOU tagging to the explicit segments representation.\n                for (unsigned long i = 0; i < labels.size(); ++i)\n                {\n                    if (labels[i] == impl_ss::BEGIN)\n                    {\n                        const unsigned long begin = i;\n                        ++i;\n                        while (i < labels.size() && labels[i] == impl_ss::INSIDE)\n                            ++i;\n\n                        y.push_back(std::make_pair(begin, i+1));\n                    }\n                    else if (labels[i] == impl_ss::UNIT)\n                    {\n                        y.push_back(std::make_pair(i, i+1));\n                    }\n                }\n            }\n        }\n\n        friend void serialize(const sequence_segmenter& item, std::ostream& out)\n        {\n            int version = 1;\n            serialize(version, out);\n\n            // Save these just so we can compare them when we deserialize and make\n            // sure the feature_extractor being used is compatible with the model being\n            // loaded.\n            serialize(feature_extractor::use_BIO_model, out);\n            serialize(feature_extractor::use_high_order_features, out);\n            serialize(total_feature_vector_size(item.get_feature_extractor()), out);\n\n            serialize(item.labeler, out);\n        }\n\n        friend void deserialize(sequence_segmenter& item, std::istream& in)\n        {\n            int version = 0;\n            deserialize(version, in);\n            if (version != 1)\n                throw serialization_error(\"Unexpected version found while deserializing dlib::sequence_segmenter.\");\n\n            // Try to check if the saved model is compatible with the current feature\n            // extractor.\n            bool use_BIO_model, use_high_order_features;\n            unsigned long dims;\n            deserialize(use_BIO_model, in);\n            deserialize(use_high_order_features, in);\n            deserialize(dims, in);\n            deserialize(item.labeler, in);\n            if (use_BIO_model != feature_extractor::use_BIO_model)\n            {\n                throw serialization_error(\"Incompatible feature extractor found while deserializing \"\n                    \"dlib::sequence_segmenter. Wrong value of use_BIO_model.\");\n            }\n            if (use_high_order_features != feature_extractor::use_high_order_features)\n            {\n                throw serialization_error(\"Incompatible feature extractor found while deserializing \"\n                    \"dlib::sequence_segmenter. Wrong value of use_high_order_features.\");\n            }\n            if (dims != total_feature_vector_size(item.get_feature_extractor()))\n            {\n                throw serialization_error(\"Incompatible feature extractor found while deserializing \"\n                    \"dlib::sequence_segmenter. Wrong value of total_feature_vector_size().\");\n            }\n        }\n\n    private:\n        sequence_labeler<impl_ss::feature_extractor<feature_extractor> > labeler;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEQUENCE_SeGMENTER_H_h_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sequence_segmenter_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SEQUENCE_SeGMENTER_ABSTRACT_H_h_\n#ifdef DLIB_SEQUENCE_SeGMENTER_ABSTRACT_H_h_\n\n#include \"../matrix.h\"\n#include <vector>\n#include \"sequence_labeler_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class example_feature_extractor\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines the interface a feature extractor must implement if it\n                is to be used with the sequence_segmenter defined at the bottom of this\n                file.  \n                \n                The model used by sequence_segmenter objects is the following.  Given an\n                input sequence x, predict an output label sequence y such that:\n                    y == argmax_Y dot(w, PSI(x,Y))\n                Where w is a parameter vector and the label sequence defines a segmentation\n                of x.\n\n                Recall that a sequence_segmenter uses the BIO or BILOU tagging model and is\n                also an instantiation of the dlib::sequence_labeler.  Selecting to use the\n                BIO model means that each element of the label sequence y takes on one of\n                three possible values (B, I, or O) and together these labels define a\n                segmentation of the sequence.  For example, to represent a segmentation of\n                the sequence of words \"The dog ran to Bob Jones\" where only \"Bob Jones\" was\n                segmented out we would use the label sequence OOOOBI.  The BILOU model is\n                similar except that it uses five different labels and each segment is\n                labeled as U, BL, BIL, BIIL, BIIIL, and so on depending on its length.\n                Therefore, the BILOU model is able to more explicitly model the ends of the\n                segments than the BIO model, but has more parameters to estimate.\n                \n                Keeping all this in mind, the purpose of a sequence_segmenter is to take\n                care of the bookkeeping associated with creating BIO/BILOU tagging models\n                for segmentation tasks.  In particular, it presents the user with a\n                simplified version of the interface used by the dlib::sequence_labeler.  It\n                does this by completely hiding the BIO/BILOU tags from the user and instead\n                exposes an explicit sub-segment based labeling representation.  It also\n                simplifies the construction of the PSI() feature vector. \n\n                Like in the dlib::sequence_labeler, PSI() is a sum of feature vectors, each\n                derived from the entire input sequence x but only part of the label\n                sequence y.  In the case of the sequence_segmenter, we use an order one\n                Markov model.  This means that \n                    PSI(x,y) == sum_i XI(x, y_{i-1}, y_{i}, i)\n                where the sum is taken over all the elements in the sequence.  At each\n                element we extract a feature vector, XI(), that is expected to encode\n                important details describing what the i-th position of the sequence looks\n                like in the context of the current and previous labels.  To do this, XI()\n                is allowed to look at any part of the input sequence x, the current and\n                previous labels, and of course it must also know the position in question, i.  \n                \n                The sequence_segmenter simplifies this further by decomposing XI() into\n                components which model the current window around each position as well as\n                the conjunction of the current window around each position and the previous\n                label.  In particular, the sequence_segmenter only asks a user to provide a\n                single feature vector which characterizes a position of the sequence\n                independent of any labeling.  We denote this feature vector by ZI(x,i), where\n                x is the sequence and i is the position in question.  \n                \n                For example, suppose we use a window size of 3 and BIO tags, then we can\n                put all this together and define XI() in terms of ZI().  To do this, we can\n                think of XI() as containing 12*3 slots which contain either a zero vector\n                or a ZI() vector.  Each combination of window position and labeling has a\n                different slot.  To explain further, consider the following examples where\n                we have annotated which parts of XI() correspond to each slot.  \n\n                If the previous and current label are both B and we use a window size of 3\n                then XI() would be instantiated as:\n                    XI(x, B, B, i) = [ZI(x,i-1)  \\ \n                                      ZI(x,i)     > If current label is B\n                                      ZI(x,i+1)  /  \n                                      0          \\                        \n                                      0           > If current label is I \n                                      0          /                        \n                                      0          \\                        \n                                      0           > If current label is O \n                                      0          /  \n\n                                      ZI(x,i-1)  \\ \n                                      ZI(x,i)     > If previous label is B and current label is B\n                                      ZI(x,i+1)  /  \n                                      0          \\                        \n                                      0           > If previous label is B and current label is I \n                                      0          /                        \n                                      0          \\                        \n                                      0           > If previous label is B and current label is O \n                                      0          /  \n\n                                      0          \\ \n                                      0           > If previous label is I and current label is B\n                                      0          /  \n                                      0          \\                        \n                                      0           > If previous label is I and current label is I \n                                      0          /                        \n                                      0          \\                        \n                                      0           > If previous label is I and current label is O \n                                      0          /  \n\n                                      0          \\ \n                                      0           > If previous label is O and current label is B\n                                      0          /  \n                                      0          \\                        \n                                      0           > If previous label is O and current label is I \n                                      0          /                        \n                                      0          \\                        \n                                      0           > If previous label is O and current label is O \n                                      0]         /  \n\n\n                If the previous label is I and the current label is O and we use a window\n                size of 3 then XI() would be instantiated as:\n                    XI(x, I, O, i) = [0          \\ \n                                      0           > If current label is B\n                                      0          /  \n                                      0          \\                        \n                                      0           > If current label is I \n                                      0          /                        \n                                      ZI(x,i-1)  \\                        \n                                      ZI(x,i)     > If current label is O \n                                      ZI(x,i+1)  /  \n\n                                      0          \\ \n                                      0           > If previous label is B and current label is B\n                                      0          /  \n                                      0          \\                        \n                                      0           > If previous label is B and current label is I \n                                      0          /                        \n                                      0          \\                        \n                                      0           > If previous label is B and current label is O \n                                      0          /  \n                                                                                                   \n                                      0          \\ \n                                      0           > If previous label is I and current label is B\n                                      0          /  \n                                      0          \\                        \n                                      0           > If previous label is I and current label is I \n                                      0          /                        \n                                      ZI(x,i-1)  \\                        \n                                      ZI(x,i)     > If previous label is I and current label is O \n                                      ZI(x,i+1)  /  \n                                                                                                   \n                                      0          \\ \n                                      0           > If previous label is O and current label is B\n                                      0          /  \n                                      0          \\                        \n                                      0           > If previous label is O and current label is I \n                                      0          /                        \n                                      0          \\                        \n                                      0           > If previous label is O and current label is O \n                                      0]         /  \n                    \n                    If we had instead used the BILOU tagging model the XI() vector would\n                    have been similarly defined except that there would be 30*3 slots for\n                    the various label combination instead of 12*3.\n\n                    Finally, while not shown here, we also include indicator features in\n                    XI() to model label transitions and individual label biases.  These are\n                    12 extra features in the case of the BIO tagging model and 30 extra in\n                    the case of the BILOU tagging model.\n\n            THREAD SAFETY\n                Instances of this object are required to be threadsafe, that is, it should\n                be safe for multiple threads to make concurrent calls to the member\n                functions of this object.\n        !*/\n\n    public:\n        // This should be the type used to represent an input sequence.  It can be\n        // anything so long as it has a .size() which returns the length of the sequence.\n        typedef the_type_used_to_represent_a_sequence sequence_type;\n\n        // If you want to use the BIO tagging model then set this bool to true.  Set it to\n        // false to use the BILOU tagging model.\n        const static bool use_BIO_model = true;\n\n        // In the WHAT THIS OBJECT REPRESENTS section above we discussed how we model the\n        // conjunction of the previous label and the window around each position.  Doing\n        // this greatly expands the size of the parameter vector w.  You can optionally\n        // disable these higher order features by setting the use_high_order_features bool\n        // to false.  This will cause XI() to include only slots which are independent of\n        // the previous label. \n        const static bool use_high_order_features = true;\n\n        // You use a tool like the structural_sequence_segmentation_trainer to learn the weight\n        // vector needed by a sequence_segmenter.  You can tell the trainer to force all the\n        // elements of the weight vector corresponding to ZI() to be non-negative.  This is all\n        // the elements of w except for the elements corresponding to the label transition and\n        // bias indicator features.  To do this, just set allow_negative_weights to false.  \n        const static bool allow_negative_weights = true;\n\n\n        example_feature_extractor (\n        ); \n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        unsigned long num_features(\n        ) const; \n        /*!\n            ensures\n                - returns the dimensionality of the ZI() feature vector.  This number is\n                  always >= 1\n        !*/\n\n        unsigned long window_size(\n        ) const;\n        /*!\n            ensures\n                - returns the size of the window ZI() vectors are extracted from.  This\n                  number is always >= 1.\n        !*/\n\n        template <typename feature_setter>\n        void get_features (\n            feature_setter& set_feature,\n            const sequence_type& x,\n            unsigned long position\n        ) const;\n        /*!\n            requires\n                - position < x.size()\n                - set_feature is a function object which allows expressions of the form:\n                    - set_features((unsigned long)feature_index, (double)feature_value);\n                    - set_features((unsigned long)feature_index);\n            ensures\n                - This function computes the ZI(x,position) feature vector.  This is a\n                  feature vector which should capture the properties of x[position] that\n                  are informative relative to the sequence segmentation task you are trying\n                  to perform.\n                - ZI(x,position) is returned as a sparse vector by invoking set_feature().\n                  For example, to set the feature with an index of 55 to the value of 1\n                  this method would call:\n                    set_feature(55);\n                  Or equivalently:\n                    set_feature(55,1);\n                  Therefore, the first argument to set_feature is the index of the feature\n                  to be set while the second argument is the value the feature should take.\n                  Additionally, note that calling set_feature() multiple times with the\n                  same feature index does NOT overwrite the old value, it adds to the\n                  previous value.  For example, if you call set_feature(55) 3 times then it\n                  will result in feature 55 having a value of 3.\n                - This function only calls set_feature() with feature_index values < num_features()\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize(\n        const example_feature_extractor& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n    void deserialize(\n        example_feature_extractor& item, \n        std::istream& in\n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    unsigned long total_feature_vector_size (\n        const feature_extractor& fe\n    );\n    /*!\n        requires\n            - fe must be an object that implements an interface compatible with the\n              example_feature_extractor discussed above.\n        ensures\n            - returns the dimensionality of the PSI() vector defined by the given feature\n              extractor.  \n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class sequence_segmenter\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor\n                It must be an object that implements an interface compatible with \n                the example_feature_extractor discussed above.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for segmenting a sequence of objects into a set of\n                non-overlapping chunks.  An example sequence segmentation task is to take\n                English sentences and identify all the named entities.  In this example,\n                you would be using a sequence_segmenter to find all the chunks of\n                contiguous words which refer to proper names.\n\n                Internally, the sequence_segmenter uses the BIO (Begin, Inside, Outside) or\n                BILOU (Begin, Inside, Last, Outside, Unit) sequence tagging model.\n                Moreover, it is implemented using a dlib::sequence_labeler object and\n                therefore sequence_segmenter objects are examples of chain structured\n                conditional random field style sequence taggers. \n\n            THREAD SAFETY\n                It is always safe to use distinct instances of this object in different\n                threads.  However, when a single instance is shared between threads then\n                the following rules apply:\n                    It is safe to call the const members of this object from multiple\n                    threads so long as the feature_extractor is also threadsafe.  This is\n                    because the const members are purely read-only operations.  However,\n                    any operation that modifies a sequence_segmenter is not threadsafe.\n        !*/\n\n    public:\n        typedef typename feature_extractor::sequence_type sample_sequence_type;\n        typedef std::vector<std::pair<unsigned long, unsigned long> > segmented_sequence_type;\n\n        sequence_segmenter(\n        );\n        /*!\n            ensures\n                - #get_feature_extractor() == feature_extractor() \n                  (i.e. it will have its default value)\n                - #get_weights().size() == total_feature_vector_size(#get_feature_extractor())\n                - #get_weights() == 0\n        !*/\n\n        explicit sequence_segmenter(\n            const matrix<double,0,1>& weights\n        ); \n        /*!\n            requires\n                - total_feature_vector_size(feature_extractor()) == weights.size()\n            ensures\n                - #get_feature_extractor() == feature_extractor() \n                  (i.e. it will have its default value)\n                - #get_weights() == weights\n        !*/\n\n        sequence_segmenter(\n            const matrix<double,0,1>& weights,\n            const feature_extractor& fe\n        ); \n        /*!\n            requires\n                - total_feature_vector_size(fe) == weights.size()\n            ensures\n                - #get_feature_extractor() == fe\n                - #get_weights() == weights\n        !*/\n\n        const feature_extractor& get_feature_extractor (\n        ) const; \n        /*!\n            ensures\n                - returns the feature extractor used by this object.\n        !*/\n\n        const matrix<double,0,1>& get_weights (\n        ) const;\n        /*!\n            ensures\n                - returns the parameter vector associated with this sequence segmenter. \n                  The length of the vector is total_feature_vector_size(get_feature_extractor()).  \n        !*/\n\n        segmented_sequence_type operator() (\n            const sample_sequence_type& x\n        ) const;\n        /*!\n            ensures\n                - Takes an input sequence and returns a list of detected segments within\n                  that sequence.\n                - None of the returned segments will overlap.\n                - The returned segments are listed in the order they appeared in the input sequence.\n                - To be precise, this function returns a std::vector Y of segments such that:\n                    - Y.size() == the number of segments detected in the input sequence x.\n                    - for all valid i:\n                        - Y[i].first  == the start of the i-th segment.\n                        - Y[i].second == one past the end of the i-th segment.\n                        - Therefore, the i-th detected segment in x is composed of the elements\n                          x[Y[i].first], x[Y[i].first+1], ..., x[Y[i].second-1]\n                        - Y[i].first < x.size()\n                        - Y[i].second <= x.size()\n                        - Y[i].first < Y[i].second\n                          (i.e. This function never outputs empty segments)\n                        - Y[i].second <= Y[i+1].first\n                          (i.e. the segments are listed in order of appearance and do not overlap)\n        !*/\n\n        void segment_sequence (\n            const sample_sequence_type& x,\n            segmented_sequence_type& y\n        ) const;\n        /*!\n            ensures\n                - #y == (*this)(x)\n                  (i.e. This is just another interface to the operator() routine\n                  above.  This one avoids returning the results by value and therefore\n                  might be a little faster in some cases)\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void serialize (\n        const sequence_segmenter<feature_extractor>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    void deserialize (\n        sequence_segmenter<feature_extractor>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SEQUENCE_SeGMENTER_ABSTRACT_H_h_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/simplify_linear_decision_function.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SIMPLIFY_LINEAR_DECiSION_FUNCTION_Hh_\n#define DLIB_SIMPLIFY_LINEAR_DECiSION_FUNCTION_Hh_\n\n#include \"simplify_linear_decision_function_abstract.h\"\n#include \"../algs.h\"\n#include \"function.h\"\n#include \"sparse_kernel.h\"\n#include \"kernel.h\"\n#include <map>\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    decision_function<sparse_linear_kernel<T> > simplify_linear_decision_function (\n        const decision_function<sparse_linear_kernel<T> >& df\n    )\n    {\n        // don't do anything if we don't have to\n        if (df.basis_vectors.size() <= 1)\n            return df;\n\n        decision_function<sparse_linear_kernel<T> > new_df;\n\n        new_df.b = df.b;\n        new_df.basis_vectors.set_size(1);\n        new_df.alpha.set_size(1);\n        new_df.alpha(0) = 1;\n\n        // now compute the weighted sum of all the sparse basis_vectors in df\n        typedef typename T::value_type pair_type;\n        typedef typename pair_type::first_type key_type;\n        typedef typename pair_type::second_type value_type;\n        std::map<key_type, value_type> accum;\n        for (long i = 0; i < df.basis_vectors.size(); ++i)\n        {\n            typename T::const_iterator j = df.basis_vectors(i).begin();\n            const typename T::const_iterator end = df.basis_vectors(i).end();\n            for (; j != end; ++j)\n            {\n                accum[j->first] += df.alpha(i) * (j->second);\n            }\n        }\n\n        new_df.basis_vectors(0) = T(accum.begin(), accum.end());\n\n        return new_df;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    decision_function<linear_kernel<T> > simplify_linear_decision_function (\n        const decision_function<linear_kernel<T> >& df\n    )\n    {\n        // don't do anything if we don't have to\n        if (df.basis_vectors.size() <= 1)\n            return df;\n\n        decision_function<linear_kernel<T> > new_df;\n\n        new_df.b = df.b;\n        new_df.basis_vectors.set_size(1);\n        new_df.alpha.set_size(1);\n        new_df.alpha(0) = 1;\n\n        // now compute the weighted sum of all the basis_vectors in df\n        new_df.basis_vectors(0) = 0;\n        for (long i = 0; i < df.basis_vectors.size(); ++i)\n        {\n            new_df.basis_vectors(0) += df.alpha(i) * df.basis_vectors(i);\n        }\n\n        return new_df;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    decision_function<linear_kernel<T> > simplify_linear_decision_function (\n        const normalized_function<decision_function<linear_kernel<T> >, vector_normalizer<T> >& df\n    )\n    {\n        decision_function<linear_kernel<T> > new_df = simplify_linear_decision_function(df.function);\n\n        // now incorporate the normalization stuff into new_df\n        new_df.basis_vectors(0) = pointwise_multiply(new_df.basis_vectors(0), df.normalizer.std_devs());\n        new_df.b += dot(new_df.basis_vectors(0), df.normalizer.means());\n\n        return new_df;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SIMPLIFY_LINEAR_DECiSION_FUNCTION_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/simplify_linear_decision_function_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SIMPLIFY_LINEAR_DECiSION_FUNCTION_ABSTRACT_Hh_\n#ifdef DLIB_SIMPLIFY_LINEAR_DECiSION_FUNCTION_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"sparse_kernel_abstract.h\"\n#include \"kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    decision_function<sparse_linear_kernel<T> > simplify_linear_decision_function (\n        const decision_function<sparse_linear_kernel<T> >& df\n    );\n    /*!\n        requires\n            - T must be a sparse vector as defined in dlib/svm/sparse_vector_abstract.h\n        ensures\n            - returns a simplified version of df that only has one basis vector.  That\n              is, returns a decision function D such that:\n                - D.basis_vectors.size() == 1 (or 0 if df is empty)\n                - for all possible x: D(x) == df(x)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    decision_function<linear_kernel<T> > simplify_linear_decision_function (\n        const decision_function<linear_kernel<T> >& df\n    );\n    /*!\n        requires\n            - T must be a dlib::matrix object \n        ensures\n            - returns a simplified version of df that only has one basis vector.  That\n              is, returns a decision function D such that:\n                - D.basis_vectors.size() == 1 (or 0 if df is empty)\n                - for all possible x: D(x) == df(x)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    decision_function<linear_kernel<T> > simplify_linear_decision_function (\n        const normalized_function<decision_function<linear_kernel<T> >, vector_normalizer<T> >& df\n    );\n    /*!\n        requires\n            - T must be a dlib::matrix object \n        ensures\n            - returns a simplified version of df that only has one basis vector and \n              doesn't involve an explicit vector_normalizer.  That is, returns a \n              decision function D such that:\n                - D.basis_vectors.size() == 1 (or 0 if df is empty)\n                - for all possible x: D(x) == df(x)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SIMPLIFY_LINEAR_DECiSION_FUNCTION_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sort_basis_vectors.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SORT_BASIS_VECTORs_Hh_\n#define DLIB_SORT_BASIS_VECTORs_Hh_\n\n#include <vector>\n\n#include \"sort_basis_vectors_abstract.h\"\n#include \"../matrix.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace bs_impl \n    {\n        template <typename EXP>\n        typename EXP::matrix_type invert (\n            const matrix_exp<EXP>& m\n        )\n        {\n            eigenvalue_decomposition<EXP> eig(make_symmetric(m));\n\n            typedef typename EXP::type scalar_type;\n            typedef typename EXP::mem_manager_type mm_type;\n\n            matrix<scalar_type,0,1,mm_type> vals = eig.get_real_eigenvalues();\n\n            const scalar_type max_eig = max(abs(vals));\n            const scalar_type thresh = max_eig*std::sqrt(std::numeric_limits<scalar_type>::epsilon());\n\n            // Since m might be singular or almost singular we need to do something about\n            // any very small eigenvalues.  So here we set the smallest eigenvalues to\n            // be equal to a large value to make the inversion stable.  We can't just set\n            // them to zero like in a normal pseudo-inverse since we want the resulting\n            // inverse matrix to be full rank.\n            for (long i = 0; i < vals.size(); ++i)\n            {\n                if (std::abs(vals(i)) < thresh)\n                    vals(i) = max_eig;\n            }\n\n            // Build the inverse matrix.  This is basically a pseudo-inverse.\n            return make_symmetric(eig.get_pseudo_v()*diagm(reciprocal(vals))*trans(eig.get_pseudo_v()));\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        template <\n            typename kernel_type,\n            typename vect1_type,\n            typename vect2_type,\n            typename vect3_type\n            >\n        const std::vector<typename kernel_type::sample_type> sort_basis_vectors_impl (\n            const kernel_type& kern,\n            const vect1_type& samples,\n            const vect2_type& labels,\n            const vect3_type& basis,\n            double eps \n        )\n        {\n            DLIB_ASSERT(is_binary_classification_problem(samples, labels) &&\n                        0 < eps && eps <= 1 && \n                        basis.size() > 0,\n                        \"\\t void sort_basis_vectors()\"\n                        << \"\\n\\t Invalid arguments were given to this function.\"\n                        << \"\\n\\t is_binary_classification_problem(samples, labels): \" << is_binary_classification_problem(samples, labels)\n                        << \"\\n\\t basis.size(): \" << basis.size() \n                        << \"\\n\\t eps:          \" << eps \n            );\n\n            typedef typename kernel_type::scalar_type scalar_type;\n            typedef typename kernel_type::mem_manager_type mm_type;\n\n            typedef matrix<scalar_type,0,1,mm_type> col_matrix;\n            typedef matrix<scalar_type,0,0,mm_type> gen_matrix;\n\n            col_matrix c1_mean, c2_mean, temp, delta;\n\n\n            col_matrix weights;\n\n            running_covariance<gen_matrix> cov;\n\n            // compute the covariance matrix and the means of the two classes.\n            for (long i = 0; i < samples.size(); ++i)\n            {\n                temp = kernel_matrix(kern, basis, samples(i));\n                cov.add(temp);\n                if (labels(i) > 0)\n                    c1_mean += temp;\n                else\n                    c2_mean += temp;\n            }\n\n            c1_mean /= sum(labels > 0);\n            c2_mean /= sum(labels < 0);\n\n            delta = c1_mean - c2_mean;\n\n            gen_matrix cov_inv = bs_impl::invert(cov.covariance());\n\n\n            matrix<long,0,1,mm_type> total_perm = trans(range(0, delta.size()-1));\n            matrix<long,0,1,mm_type> perm = total_perm;\n\n            std::vector<std::pair<scalar_type,long> > sorted_feats(delta.size());\n\n            long best_size = delta.size();\n            long misses = 0;\n            matrix<long,0,1,mm_type> best_total_perm = perm;\n\n            // Now we basically find fisher's linear discriminant over and over.  Each\n            // time sorting the features so that the most important ones pile up together.\n            weights = trans(chol(cov_inv))*delta;\n            while (true)\n            {\n\n                for (unsigned long i = 0; i < sorted_feats.size(); ++i)\n                    sorted_feats[i] = make_pair(std::abs(weights(i)), i);\n\n                std::sort(sorted_feats.begin(), sorted_feats.end());\n\n                // make a permutation vector according to the sorting\n                for (long i = 0; i < perm.size(); ++i)\n                    perm(i) = sorted_feats[i].second;\n\n\n                // Apply the permutation.  Doing this gives the same result as permuting all the\n                // features and then recomputing the delta and cov_inv from scratch.\n                cov_inv = subm(cov_inv,perm,perm);\n                delta = rowm(delta,perm);\n\n                // Record all the permutations we have done so we will know how the final\n                // weights match up with the original basis vectors when we are done.\n                total_perm = rowm(total_perm, perm);\n\n                // compute new Fisher weights for sorted features.\n                weights = trans(chol(cov_inv))*delta;\n\n                // Measure how many features it takes to account for eps% of the weights vector.\n                const scalar_type total_weight = length_squared(weights);\n                scalar_type weight_accum = 0;\n                long size = 0;\n                // figure out how to get eps% of the weights\n                for (long i = weights.size()-1; i >= 0; --i)\n                {\n                    ++size;\n                    weight_accum += weights(i)*weights(i);\n                    if (weight_accum/total_weight > eps)\n                        break;\n                }\n\n                // loop until the best_size stops dropping\n                if (size < best_size)\n                {\n                    misses = 0;\n                    best_size = size;\n                    best_total_perm = total_perm;\n                }\n                else\n                {\n                    ++misses;\n\n                    // Give up once we have had 10 rounds where we didn't find a weights vector with\n                    // a smaller concentration of good features. \n                    if (misses >= 10)\n                        break;\n                }\n\n            }\n\n            // make sure best_size isn't zero\n            if (best_size == 0)\n                best_size = 1;\n\n            std::vector<typename kernel_type::sample_type> sorted_basis;\n\n            // permute the basis so that it matches up with the contents of the best weights \n            sorted_basis.resize(best_size);\n            for (unsigned long i = 0; i < sorted_basis.size(); ++i)\n            {\n                // Note that we load sorted_basis backwards so that the most important\n                // basis elements come first.  \n                sorted_basis[i] = basis(best_total_perm(basis.size()-i-1));\n            }\n\n            return sorted_basis;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename vect1_type,\n        typename vect2_type,\n        typename vect3_type\n        >\n    const std::vector<typename kernel_type::sample_type> sort_basis_vectors (\n        const kernel_type& kern,\n        const vect1_type& samples,\n        const vect2_type& labels,\n        const vect3_type& basis,\n        double eps = 0.99\n    )\n    {\n        return bs_impl::sort_basis_vectors_impl(kern, \n                                                mat(samples),\n                                                mat(labels),\n                                                mat(basis),\n                                                eps);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SORT_BASIS_VECTORs_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sort_basis_vectors_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SORT_BASIS_VECTORs_ABSTRACT_Hh_\n#ifdef DLIB_SORT_BASIS_VECTORs_ABSTRACT_Hh_\n\n#include <vector>\n\n#include \"../matrix.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename kernel_type,\n        typename vect1_type,\n        typename vect2_type,\n        typename vect3_type\n        >\n    const std::vector<typename kernel_type::sample_type> sort_basis_vectors (\n        const kernel_type& kern,\n        const vect1_type& samples,\n        const vect2_type& labels,\n        const vect3_type& basis,\n        double eps = 0.99\n    );\n    /*!\n        requires\n            - is_binary_classification_problem(samples, labels)\n            - 0 < eps <= 1\n            - basis.size() > 0\n            - kernel_type is a kernel function object as defined in dlib/svm/kernel_abstract.h \n              It must be capable of operating on the elements of samples and basis.\n            - vect1_type == a matrix or something convertible to a matrix via mat()\n            - vect2_type == a matrix or something convertible to a matrix via mat()\n            - vect3_type == a matrix or something convertible to a matrix via mat()\n        ensures\n            - A kernel based learning method ultimately needs to select a set of basis functions\n              represented by a particular choice of kernel and a set of basis vectors.  \n              sort_basis_vectors() attempts to order the elements of basis so that elements which are\n              most useful in solving the binary classification problem defined by samples and\n              labels come first. \n            - In particular, this function returns a std::vector, SB, of sorted basis vectors such that:\n                - 0 < SB.size() <= basis.size()\n                - SB will contain elements from basis but they will have been sorted so that \n                  the most useful elements come first (i.e. SB[0] is the most important). \n                - eps notionally controls how big SB will be.  Bigger eps corresponds to a \n                  bigger basis.  You can think of it like asking for eps percent of the \n                  discriminating power from the input basis.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SORT_BASIS_VECTORs_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sparse_kernel.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_SPARSE_KERNEL\n#define DLIB_SVm_SPARSE_KERNEL\n\n#include \"sparse_kernel_abstract.h\"\n#include <cmath>\n#include <limits>\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"sparse_vector.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sparse_radial_basis_kernel\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        sparse_radial_basis_kernel(const scalar_type g) : gamma(g) {}\n        sparse_radial_basis_kernel() : gamma(0.1) {}\n        sparse_radial_basis_kernel(\n            const sparse_radial_basis_kernel& k\n        ) : gamma(k.gamma) {}\n\n\n        const scalar_type gamma;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            const scalar_type d = distance_squared(a,b);\n            return std::exp(-gamma*d);\n        }\n\n        sparse_radial_basis_kernel& operator= (\n            const sparse_radial_basis_kernel& k\n        )\n        {\n            const_cast<scalar_type&>(gamma) = k.gamma;\n            return *this;\n        }\n\n        bool operator== (\n            const sparse_radial_basis_kernel& k\n        ) const\n        {\n            return gamma == k.gamma;\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_radial_basis_kernel<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.gamma, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type sparse_radial_basis_kernel\"); \n        }\n    }\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_radial_basis_kernel<T>& item,\n        std::istream& in \n    )\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        try\n        {\n            deserialize(const_cast<scalar_type&>(item.gamma), in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type sparse_radial_basis_kernel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sparse_polynomial_kernel\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        sparse_polynomial_kernel(const scalar_type g, const scalar_type c, const scalar_type d) : gamma(g), coef(c), degree(d) {}\n        sparse_polynomial_kernel() : gamma(1), coef(0), degree(1) {}\n        sparse_polynomial_kernel(\n            const sparse_polynomial_kernel& k\n        ) : gamma(k.gamma), coef(k.coef), degree(k.degree) {}\n\n        typedef T type;\n        const scalar_type gamma;\n        const scalar_type coef;\n        const scalar_type degree;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return std::pow(gamma*(dot(a,b)) + coef, degree);\n        }\n\n        sparse_polynomial_kernel& operator= (\n            const sparse_polynomial_kernel& k\n        )\n        {\n            const_cast<scalar_type&>(gamma) = k.gamma;\n            const_cast<scalar_type&>(coef) = k.coef;\n            const_cast<scalar_type&>(degree) = k.degree;\n            return *this;\n        }\n\n        bool operator== (\n            const sparse_polynomial_kernel& k\n        ) const\n        {\n            return (gamma == k.gamma) && (coef == k.coef) && (degree == k.degree);\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_polynomial_kernel<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.gamma, out);\n            serialize(item.coef, out);\n            serialize(item.degree, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type sparse_polynomial_kernel\"); \n        }\n    }\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_polynomial_kernel<T>& item,\n        std::istream& in \n    )\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        try\n        {\n            deserialize(const_cast<scalar_type&>(item.gamma), in);\n            deserialize(const_cast<scalar_type&>(item.coef), in);\n            deserialize(const_cast<scalar_type&>(item.degree), in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type sparse_polynomial_kernel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sparse_sigmoid_kernel\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        sparse_sigmoid_kernel(const scalar_type g, const scalar_type c) : gamma(g), coef(c) {}\n        sparse_sigmoid_kernel() : gamma(0.1), coef(-1.0) {}\n        sparse_sigmoid_kernel(\n            const sparse_sigmoid_kernel& k\n        ) : gamma(k.gamma), coef(k.coef) {}\n\n        typedef T type;\n        const scalar_type gamma;\n        const scalar_type coef;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return std::tanh(gamma*(dot(a,b)) + coef);\n        }\n\n        sparse_sigmoid_kernel& operator= (\n            const sparse_sigmoid_kernel& k\n        )\n        {\n            const_cast<scalar_type&>(gamma) = k.gamma;\n            const_cast<scalar_type&>(coef) = k.coef;\n            return *this;\n        }\n\n        bool operator== (\n            const sparse_sigmoid_kernel& k\n        ) const\n        {\n            return (gamma == k.gamma) && (coef == k.coef);\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_sigmoid_kernel<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            serialize(item.gamma, out);\n            serialize(item.coef, out);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while serializing object of type sparse_sigmoid_kernel\"); \n        }\n    }\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_sigmoid_kernel<T>& item,\n        std::istream& in \n    )\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        try\n        {\n            deserialize(const_cast<scalar_type&>(item.gamma), in);\n            deserialize(const_cast<scalar_type&>(item.coef), in);\n        }\n        catch (serialization_error& e)\n        { \n            throw serialization_error(e.info + \"\\n   while deserializing object of type sparse_sigmoid_kernel\"); \n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct sparse_linear_kernel\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return dot(a,b);\n        }\n\n        bool operator== (\n            const sparse_linear_kernel& \n        ) const\n        {\n            return true;\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_linear_kernel<T>& ,\n        std::ostream& \n    ){}\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_linear_kernel<T>& ,\n        std::istream&  \n    ){}\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct sparse_histogram_intersection_kernel\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            typename sample_type::const_iterator ai = a.begin();\n            typename sample_type::const_iterator bi = b.begin();\n\n            scalar_type sum = 0;\n            while (ai != a.end() && bi != b.end())\n            {\n                if (ai->first == bi->first)\n                {\n                    sum += std::min(ai->second , bi->second);\n                    ++ai;\n                    ++bi;\n                }\n                else if (ai->first < bi->first)\n                {\n                    ++ai;\n                }\n                else \n                {\n                    ++bi;\n                }\n            }\n\n            return sum;\n        }\n\n        bool operator== (\n            const sparse_histogram_intersection_kernel& \n        ) const\n        {\n            return true;\n        }\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_histogram_intersection_kernel<T>& ,\n        std::ostream& \n    ){}\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_histogram_intersection_kernel<T>& ,\n        std::istream&  \n    ){}\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_SPARSE_KERNEL\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sparse_kernel_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_SPARSE_KERNEL_ABSTRACT_\n#ifdef DLIB_SVm_SPARSE_KERNEL_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"kernel_abstract.h\"\n#include \"sparse_vector_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sparse_radial_basis_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                Must be a sparse vector as defined in dlib/svm/sparse_vector_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a radial basis function kernel\n                that works with sparse vectors.\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        const scalar_type gamma;\n\n        sparse_radial_basis_kernel(\n        );\n        /*!\n            ensures\n                - #gamma == 0.1 \n        !*/\n\n        sparse_radial_basis_kernel(\n            const sparse_radial_basis_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma == k.gamma\n        !*/\n\n        sparse_radial_basis_kernel(\n            const scalar_type g\n        );\n        /*!\n            ensures\n                - #gamma == g\n        !*/\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - a is a sparse vector\n                - b is a sparse vector\n            ensures\n                - returns exp(-gamma * distance_squared(a,b))\n        !*/\n\n        sparse_radial_basis_kernel& operator= (\n            const sparse_radial_basis_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma = k.gamma\n                - returns *this\n        !*/\n\n        bool operator== (\n            const sparse_radial_basis_kernel& k\n        ) const;\n        /*!\n            ensures\n                - if (k and *this are identical) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_radial_basis_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for sparse_radial_basis_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_radial_basis_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for sparse_radial_basis_kernel\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sparse_sigmoid_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                Must be a sparse vector as defined in dlib/svm/sparse_vector_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a sigmoid kernel\n                that works with sparse vectors.\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        const scalar_type gamma;\n        const scalar_type coef;\n\n        sparse_sigmoid_kernel(\n        );\n        /*!\n            ensures\n                - #gamma == 0.1 \n                - #coef == -1.0 \n        !*/\n\n        sparse_sigmoid_kernel(\n            const sparse_sigmoid_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma == k.gamma\n                - #coef == k.coef\n        !*/\n\n        sparse_sigmoid_kernel(\n            const scalar_type g,\n            const scalar_type c\n        );\n        /*!\n            ensures\n                - #gamma == g\n                - #coef == c\n        !*/\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - a is a sparse vector\n                - b is a sparse vector\n            ensures\n                - returns tanh(gamma * dot(a,b) + coef)\n        !*/\n\n        sparse_sigmoid_kernel& operator= (\n            const sparse_sigmoid_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma = k.gamma\n                - #coef = k.coef\n                - returns *this\n        !*/\n\n        bool operator== (\n            const sparse_sigmoid_kernel& k\n        ) const;\n        /*!\n            ensures\n                - if (k and *this are identical) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_sigmoid_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for sparse_sigmoid_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_sigmoid_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for sparse_sigmoid_kernel\n    !*/\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sparse_polynomial_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                Must be a sparse vector as defined in dlib/svm/sparse_vector_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a polynomial kernel\n                that works with sparse vectors.\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        const scalar_type gamma;\n        const scalar_type coef;\n        const scalar_type degree;\n\n        sparse_polynomial_kernel(\n        );\n        /*!\n            ensures\n                - #gamma == 1 \n                - #coef == 0 \n                - #degree == 1 \n        !*/\n\n        sparse_polynomial_kernel(\n            const sparse_polynomial_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma == k.gamma\n                - #coef == k.coef\n                - #degree == k.degree\n        !*/\n\n        sparse_polynomial_kernel(\n            const scalar_type g,\n            const scalar_type c,\n            const scalar_type d\n        );\n        /*!\n            ensures\n                - #gamma == g\n                - #coef == c\n                - #degree == d\n        !*/\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - a is a sparse vector\n                - b is a sparse vector\n            ensures\n                - returns pow(gamma * dot(a,b) + coef, degree)\n        !*/\n\n        sparse_polynomial_kernel& operator= (\n            const sparse_polynomial_kernel& k\n        );\n        /*!\n            ensures\n                - #gamma = k.gamma\n                - #coef = k.coef\n                - #degree = k.degree\n                - returns *this\n        !*/\n\n        bool operator== (\n            const sparse_polynomial_kernel& k\n        ) const;\n        /*!\n            ensures\n                - if (k and *this are identical) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_polynomial_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for sparse_polynomial_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_polynomial_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for sparse_polynomial_kernel\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sparse_linear_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                Must be a sparse vector as defined in dlib/svm/sparse_vector_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a linear function kernel\n                that works with sparse vectors.\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - a is a sparse vector\n                - b is a sparse vector\n            ensures\n                - returns dot(a,b) \n        !*/\n\n        bool operator== (\n            const sparse_linear_kernel& k\n        ) const;\n        /*!\n            ensures\n                - returns true\n        !*/\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_linear_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for sparse_linear_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_linear_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for sparse_linear_kernel \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct sparse_histogram_intersection_kernel\n    {\n        /*!\n            REQUIREMENTS ON T\n                Must be a sparse vector as defined in dlib/svm/sparse_vector_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a histogram intersection kernel \n                that works with sparse vectors.\n\n            THREAD SAFETY\n                This kernel is threadsafe.  \n        !*/\n\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const;\n        /*!\n            requires\n                - a is a sparse vector\n                - b is a sparse vector\n                - all the values in a and b are >= 0\n            ensures\n                - Let A(i) denote the value of the ith dimension of the a vector.\n                - Let B(i) denote the value of the ith dimension of the b vector.\n                - returns sum over all i: std::min(A(i), B(i)) \n        !*/\n\n        bool operator== (\n            const sparse_histogram_intersection_kernel& k\n        ) const;\n        /*!\n            ensures\n                - returns true\n        !*/\n    };\n\n    template <\n        typename T\n        >\n    void serialize (\n        const sparse_histogram_intersection_kernel<T>& item,\n        std::ostream& out\n    );\n    /*!\n        provides serialization support for sparse_histogram_intersection_kernel\n    !*/\n\n    template <\n        typename T\n        >\n    void deserialize (\n        sparse_histogram_intersection_kernel<T>& item,\n        std::istream& in \n    );\n    /*!\n        provides deserialization support for sparse_histogram_intersection_kernel \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_SPARSE_KERNEL_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sparse_vector.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_SPARSE_VECTOR\n#define DLIB_SVm_SPARSE_VECTOR\n\n#include \"sparse_vector_abstract.h\"\n#include <cmath>\n#include <limits>\n#include \"../algs.h\"\n#include <vector>\n#include <map>\n#include \"../graph_utils/edge_list_graphs.h\"\n#include \"../matrix.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    typename T::value_type::second_type distance_squared (\n        const T& a,\n        const U& b\n    )\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        typedef typename U::value_type::second_type scalar_typeU;\n        // Both T and U must contain the same kinds of elements\n        COMPILE_TIME_ASSERT((is_same_type<scalar_type, scalar_typeU>::value));\n\n        typename T::const_iterator ai = a.begin();\n        typename U::const_iterator bi = b.begin();\n\n        scalar_type sum = 0, temp = 0;\n        while (ai != a.end() && bi != b.end())\n        {\n            if (ai->first == bi->first)\n            {\n                temp = ai->second - bi->second;\n                ++ai;\n                ++bi;\n            }\n            else if (ai->first < bi->first)\n            {\n                temp = ai->second;\n                ++ai;\n            }\n            else \n            {\n                temp = bi->second;\n                ++bi;\n            }\n\n            sum += temp*temp;\n        }\n\n        while (ai != a.end())\n        {\n            sum += ai->second*ai->second;\n            ++ai;\n        }\n        while (bi != b.end())\n        {\n            sum += bi->second*bi->second;\n            ++bi;\n        }\n\n        return sum;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename V, typename W>\n    typename T::value_type::second_type distance_squared (\n        const V& a_scale,\n        const T& a,\n        const W& b_scale,\n        const U& b\n    )\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        typedef typename U::value_type::second_type scalar_typeU;\n        // Both T and U must contain the same kinds of elements\n        COMPILE_TIME_ASSERT((is_same_type<scalar_type, scalar_typeU>::value));\n\n        typename T::const_iterator ai = a.begin();\n        typename U::const_iterator bi = b.begin();\n\n        scalar_type sum = 0, temp = 0;\n        while (ai != a.end() && bi != b.end())\n        {\n            if (ai->first == bi->first)\n            {\n                temp = a_scale*ai->second - b_scale*bi->second;\n                ++ai;\n                ++bi;\n            }\n            else if (ai->first < bi->first)\n            {\n                temp = a_scale*ai->second;\n                ++ai;\n            }\n            else \n            {\n                temp = b_scale*bi->second;\n                ++bi;\n            }\n\n            sum += temp*temp;\n        }\n\n        while (ai != a.end())\n        {\n            sum += a_scale*a_scale*ai->second*ai->second;\n            ++ai;\n        }\n        while (bi != b.end())\n        {\n            sum += b_scale*b_scale*bi->second*bi->second;\n            ++bi;\n        }\n\n        return sum;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    typename T::value_type::second_type distance (\n        const T& a,\n        const U& b\n    )\n    {\n        return std::sqrt(distance_squared(a,b));\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename V, typename W>\n    typename T::value_type::second_type distance (\n        const V& a_scale,\n        const T& a,\n        const W& b_scale,\n        const U& b\n    )\n    {\n        return std::sqrt(distance_squared(a_scale,a,b_scale,b));\n    }\n\n// ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n    template <typename T, typename EXP>\n    typename enable_if<is_matrix<T> >::type assign (\n        T& dest,\n        const matrix_exp<EXP>& src\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(src),\n                    \"\\t void assign(dest,src)\"\n                    << \"\\n\\t the src matrix must be a row or column vector\"\n        );\n\n        dest = src;\n    }\n\n    template <typename T, typename EXP>\n    typename disable_if<is_matrix<T> >::type assign (\n        T& dest,\n        const matrix_exp<EXP>& src\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(src),\n                    \"\\t void assign(dest,src)\"\n                    << \"\\n\\t the src matrix must be a row or column vector\"\n        );\n\n        dest.clear();\n        typedef typename T::value_type item_type;\n        for (long i = 0; i < src.size(); ++i)\n        {\n            dest.insert(dest.end(),item_type(i, src(i)));\n        }\n    }\n\n    template <typename T, typename U>\n    typename disable_if_c<is_matrix<T>::value || is_matrix<U>::value>::type assign (\n        T& dest,        // sparse\n        const U& src    // sparse\n    )\n    {\n        dest.assign(src.begin(), src.end());\n    }\n\n    template <typename T, typename U, typename Comp, typename Alloc, typename S>\n    typename disable_if<is_matrix<S> >::type assign (\n        std::map<T,U,Comp,Alloc>& dest, // sparse\n        const S& src                    // sparse\n    )\n    {\n        dest.clear();\n        dest.insert(src.begin(), src.end());\n    }\n\n// ------------------------------------------------------------------------------------\n    // ------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct has_unsigned_keys\n    {\n        static const bool value = is_unsigned_type<typename T::value_type::first_type>::value;\n    };\n\n// ------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T, typename U>\n        typename T::value_type::second_type general_dot (\n            const T& a,\n            const U& b\n        )\n        {\n            typedef typename T::value_type::second_type scalar_type;\n\n            typename T::const_iterator ai = a.begin();\n            typename U::const_iterator bi = b.begin();\n\n            scalar_type sum = 0;\n            while (ai != a.end() && bi != b.end())\n            {\n                if (ai->first == bi->first)\n                {\n                    sum += ai->second * bi->second;\n                    ++ai;\n                    ++bi;\n                }\n                else if (ai->first < bi->first)\n                {\n                    ++ai;\n                }\n                else \n                {\n                    ++bi;\n                }\n            }\n\n            return sum;\n        }\n\n        template <typename T, typename U>\n        inline typename T::value_type::second_type dot (\n            const T& a,\n            const U& b\n        )\n        {\n            return general_dot(a,b);\n        }\n\n        template <typename T, typename U, typename alloc>\n        U dot (\n            const std::vector<std::pair<T,U>,alloc>& a,\n            const std::vector<std::pair<T,U>,alloc>& b\n        )\n        {\n            // You are getting this error because you are attempting to use sparse sample vectors \n            // but you aren't using an unsigned integer as your key type in the sparse vectors.\n            COMPILE_TIME_ASSERT(is_unsigned_type<T>::value);\n\n            if (a.size() == 0 || b.size() == 0)\n                return 0;\n\n            // if a is really a dense vector but just represented in a sparse container\n            if (a.back().first == a.size()-1)\n            {\n                double sum = 0;\n                for (unsigned long i = 0; i < b.size(); ++i)\n                {\n                    if (b[i].first >= a.size())\n                        break;\n                    sum += a[b[i].first].second * b[i].second;\n                }\n                return sum;\n            }\n            // if b is really a dense vector but just represented in a sparse container\n            else if (b.back().first == b.size()-1)\n            {\n                double sum = 0;\n                for (unsigned long i = 0; i < a.size(); ++i)\n                {\n                    if (a[i].first >= b.size())\n                        break;\n                    sum += b[a[i].first].second * a[i].second;\n                }\n                return sum;\n            }\n            else\n            {\n                return general_dot(a,b);\n            }\n        }\n    }\n\n    template <typename T>\n    inline typename T::value_type::second_type dot (\n        const T& a,\n        const T& b\n    )\n    {\n        return impl::dot(a,b);\n    }\n\n    template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>\n    inline T4 dot (\n        const std::vector<T1,T2>& a,\n        const std::map<T3,T4,T5,T6>& b\n    )\n    {\n        return impl::dot(a,b);\n    }\n\n    template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>\n    inline T4 dot (\n        const std::map<T3,T4,T5,T6>& a,\n        const std::vector<T1,T2>& b\n    )\n    {\n        return impl::dot(a,b);\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, typename EXP>\n    typename T::value_type::second_type dot (\n        const T& a,\n        const matrix_exp<EXP>& b\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(b),\n                    \"\\t scalar_type dot(sparse_vector a, dense_vector b)\"\n                    << \"\\n\\t 'b' must be a vector to be used in a dot product.\" \n        );\n\n        typedef typename T::value_type::second_type scalar_type;\n        typedef typename T::value_type::first_type first_type;\n\n        scalar_type sum = 0;\n        for (typename T::const_iterator ai = a.begin(); \n             (ai != a.end()) && (ai->first < static_cast<first_type>(b.size())); \n             ++ai)\n        {\n            sum += ai->second * b(ai->first);\n        }\n\n        return sum;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, typename EXP>\n    typename T::value_type::second_type dot (\n        const matrix_exp<EXP>& b,\n        const T& a\n    )\n    {\n        return dot(a,b);\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename T::value_type::second_type length_squared (\n        const T& a\n    )\n    {\n        typedef typename T::value_type::second_type scalar_type;\n\n        typename T::const_iterator i;\n\n        scalar_type sum = 0;\n\n        for (i = a.begin(); i != a.end(); ++i)\n        {\n            sum += i->second * i->second;\n        }\n\n        return sum;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename T::value_type::second_type length (\n        const T& a\n    )\n    {\n        return std::sqrt(length_squared(a));\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    typename disable_if<is_matrix<T>,void>::type scale_by (\n        T& a,\n        const U& value\n    )\n    {\n        for (typename T::iterator i = a.begin(); i != a.end(); ++i)\n        {\n            i->second *= value;\n        }\n    }\n\n    template <typename T, typename U>\n    typename enable_if<is_matrix<T>,void>::type scale_by (\n        T& a,\n        const U& value\n    )\n    {\n        a *= value;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename disable_if<is_matrix<T>,T>::type add (\n        const T& a,\n        const T& b\n    )\n    {\n        T temp;\n\n        typename T::const_iterator i = a.begin();\n        typename T::const_iterator j = b.begin();\n        while (i != a.end() && j != b.end())\n        {\n            if (i->first == j->first)\n            {\n                temp.insert(temp.end(), std::make_pair(i->first, i->second + j->second));\n                ++i;\n                ++j;\n            }\n            else if (i->first < j->first)\n            {\n                temp.insert(temp.end(), *i);\n                ++i;\n            }\n            else\n            {\n                temp.insert(temp.end(), *j);\n                ++j;\n            }\n        }\n\n        while (i != a.end())\n        {\n            temp.insert(temp.end(), *i);\n            ++i;\n        }\n        while (j != b.end())\n        {\n            temp.insert(temp.end(), *j);\n            ++j;\n        }\n\n        return temp;\n    }\n\n    template <typename T, typename U>\n    typename enable_if_c<is_matrix<T>::value && is_matrix<U>::value, matrix_add_exp<T,U> >::type add (\n        const T& a,\n        const U& b\n    )\n    {\n        return matrix_add_exp<T,U>(a.ref(),b.ref());\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename disable_if<is_matrix<T>,T>::type subtract (\n        const T& a,\n        const T& b\n    )\n    {\n        T temp;\n\n        typename T::const_iterator i = a.begin();\n        typename T::const_iterator j = b.begin();\n        while (i != a.end() && j != b.end())\n        {\n            if (i->first == j->first)\n            {\n                temp.insert(temp.end(), std::make_pair(i->first, i->second - j->second));\n                ++i;\n                ++j;\n            }\n            else if (i->first < j->first)\n            {\n                temp.insert(temp.end(), *i);\n                ++i;\n            }\n            else\n            {\n                temp.insert(temp.end(), std::make_pair(j->first, -j->second));\n                ++j;\n            }\n        }\n\n        while (i != a.end())\n        {\n            temp.insert(temp.end(), *i);\n            ++i;\n        }\n        while (j != b.end())\n        {\n            temp.insert(temp.end(), std::make_pair(j->first, -j->second));\n            ++j;\n        }\n\n        return temp;\n    }\n\n    template <typename T, typename U>\n    typename enable_if_c<is_matrix<T>::value && is_matrix<U>::value, matrix_subtract_exp<T,U> >::type subtract (\n        const T& a,\n        const U& b\n    )\n    {\n        return matrix_subtract_exp<T,U>(a.ref(),b.ref());\n    }\n\n// ------------------------------------------------------------------------------------\n// ------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T>\n        typename enable_if<is_matrix<typename T::type>,unsigned long>::type max_index_plus_one (\n            const T& samples\n        ) \n        {\n            if (samples.size() > 0)\n                return samples(0).size();\n            else\n                return 0;\n        }\n\n        template <typename T>\n        typename enable_if<is_built_in_scalar_type<typename T::type>,unsigned long>::type max_index_plus_one (\n            const T& sample\n        ) \n        {\n            return sample.size();\n        }\n\n        // This !is_built_in_scalar_type<typename T::type>::value is here to avoid an inexplicable bug in Vistual Studio 2005\n        template <typename T>\n        typename enable_if_c<(!is_built_in_scalar_type<typename T::type>::value) && (is_pair<typename T::type::value_type>::value) ,unsigned long>::type \n        max_index_plus_one (\n            const T& samples\n        ) \n        {\n            typedef typename T::type sample_type;\n            // You are getting this error because you are attempting to use sparse sample vectors \n            // but you aren't using an unsigned integer as your key type in the sparse vectors.\n            COMPILE_TIME_ASSERT(has_unsigned_keys<sample_type>::value);\n\n\n            // these should be sparse samples so look over all them to find the max index.\n            unsigned long max_dim = 0;\n            for (long i = 0; i < samples.size(); ++i)\n            {\n                if (samples(i).size() > 0)\n                    max_dim = std::max<unsigned long>(max_dim, (--samples(i).end())->first + 1);\n            }\n\n            return max_dim;\n        }\n    }\n\n    template <typename T>\n    typename enable_if<is_pair<typename T::value_type>,unsigned long>::type max_index_plus_one (\n        const T& sample\n    ) \n    {\n        if (sample.size() > 0)\n            return (--sample.end())->first + 1;\n        return 0;\n    }\n\n    template <typename T>\n    typename disable_if_c<is_pair<typename T::value_type>::value ||\n                          is_same_type<typename T::value_type,sample_pair>::value ||\n                          is_same_type<typename T::value_type,ordered_sample_pair>::value , unsigned long>::type \n    max_index_plus_one (\n        const T& samples\n    ) \n    {\n        return impl::max_index_plus_one(mat(samples));\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename EXP>\n    inline void add_to (\n        matrix<T,NR,NC,MM,L>& dest,\n        const matrix_exp<EXP>& src \n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(dest) && max_index_plus_one(src) <= static_cast<unsigned long>(dest.size()),\n                    \"\\t void add_to(dest,src)\"\n                    << \"\\n\\t dest must be a vector large enough to hold the src vector.\"\n                    << \"\\n\\t is_vector(dest):         \" << is_vector(dest)\n                    << \"\\n\\t max_index_plus_one(src): \" << max_index_plus_one(src)\n                    << \"\\n\\t dest.size():             \" << dest.size() \n        );\n\n        for (long r = 0; r < src.size(); ++r)\n            dest(r) += src(r);\n    }\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename EXP>\n    inline typename disable_if<is_matrix<EXP> >::type add_to (\n        matrix<T,NR,NC,MM,L>& dest,\n        const EXP& src\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(dest) && max_index_plus_one(src) <= static_cast<unsigned long>(dest.size()),\n                    \"\\t void add_to(dest,src)\"\n                    << \"\\n\\t dest must be a vector large enough to hold the src vector.\"\n                    << \"\\n\\t is_vector(dest):         \" << is_vector(dest)\n                    << \"\\n\\t max_index_plus_one(src): \" << max_index_plus_one(src)\n                    << \"\\n\\t dest.size():             \" << dest.size() \n        );\n\n        for (typename EXP::const_iterator i = src.begin(); i != src.end(); ++i)\n            dest(i->first) += i->second;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename EXP, typename U>\n    inline void add_to (\n        matrix<T,NR,NC,MM,L>& dest,\n        const matrix_exp<EXP>& src,\n        const U& C\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(dest) && max_index_plus_one(src) <= static_cast<unsigned long>(dest.size()),\n                    \"\\t void add_to(dest,src)\"\n                    << \"\\n\\t dest must be a vector large enough to hold the src vector.\"\n                    << \"\\n\\t is_vector(dest):         \" << is_vector(dest)\n                    << \"\\n\\t max_index_plus_one(src): \" << max_index_plus_one(src)\n                    << \"\\n\\t dest.size():             \" << dest.size() \n        );\n\n        for (long r = 0; r < src.size(); ++r)\n            dest(r) += C*src(r);\n    }\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename EXP, typename U>\n    inline typename disable_if<is_matrix<EXP> >::type add_to (\n        matrix<T,NR,NC,MM,L>& dest,\n        const EXP& src,\n        const U& C\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(dest) && max_index_plus_one(src) <= static_cast<unsigned long>(dest.size()),\n                    \"\\t void add_to(dest,src)\"\n                    << \"\\n\\t dest must be a vector large enough to hold the src vector.\"\n                    << \"\\n\\t is_vector(dest):         \" << is_vector(dest)\n                    << \"\\n\\t max_index_plus_one(src): \" << max_index_plus_one(src)\n                    << \"\\n\\t dest.size():             \" << dest.size() \n        );\n\n        for (typename EXP::const_iterator i = src.begin(); i != src.end(); ++i)\n            dest(i->first) += C*i->second;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename EXP>\n    inline void subtract_from (\n        matrix<T,NR,NC,MM,L>& dest,\n        const matrix_exp<EXP>& src \n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(dest) && max_index_plus_one(src) <= static_cast<unsigned long>(dest.size()),\n                    \"\\t void subtract_from(dest,src)\"\n                    << \"\\n\\t dest must be a vector large enough to hold the src vector.\"\n                    << \"\\n\\t is_vector(dest):         \" << is_vector(dest)\n                    << \"\\n\\t max_index_plus_one(src): \" << max_index_plus_one(src)\n                    << \"\\n\\t dest.size():             \" << dest.size() \n        );\n\n        for (long r = 0; r < src.size(); ++r)\n            dest(r) -= src(r);\n    }\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename EXP>\n    inline typename disable_if<is_matrix<EXP> >::type subtract_from (\n        matrix<T,NR,NC,MM,L>& dest,\n        const EXP& src\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(dest) && max_index_plus_one(src) <= static_cast<unsigned long>(dest.size()),\n                    \"\\t void subtract_from(dest,src)\"\n                    << \"\\n\\t dest must be a vector large enough to hold the src vector.\"\n                    << \"\\n\\t is_vector(dest):         \" << is_vector(dest)\n                    << \"\\n\\t max_index_plus_one(src): \" << max_index_plus_one(src)\n                    << \"\\n\\t dest.size():             \" << dest.size() \n        );\n\n        for (typename EXP::const_iterator i = src.begin(); i != src.end(); ++i)\n            dest(i->first) -= i->second;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename EXP, typename U>\n    inline void subtract_from (\n        matrix<T,NR,NC,MM,L>& dest,\n        const matrix_exp<EXP>& src,\n        const U& C\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(dest) && max_index_plus_one(src) <= static_cast<unsigned long>(dest.size()),\n                    \"\\t void subtract_from(dest,src)\"\n                    << \"\\n\\t dest must be a vector large enough to hold the src vector.\"\n                    << \"\\n\\t is_vector(dest):         \" << is_vector(dest)\n                    << \"\\n\\t max_index_plus_one(src): \" << max_index_plus_one(src)\n                    << \"\\n\\t dest.size():             \" << dest.size() \n        );\n\n        for (long r = 0; r < src.size(); ++r)\n            dest(r) -= C*src(r);\n    }\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename EXP, typename U>\n    inline typename disable_if<is_matrix<EXP> >::type subtract_from (\n        matrix<T,NR,NC,MM,L>& dest,\n        const EXP& src,\n        const U& C\n    ) \n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(dest) && max_index_plus_one(src) <= static_cast<unsigned long>(dest.size()),\n                    \"\\t void subtract_from(dest,src)\"\n                    << \"\\n\\t dest must be a vector large enough to hold the src vector.\"\n                    << \"\\n\\t is_vector(dest):         \" << is_vector(dest)\n                    << \"\\n\\t max_index_plus_one(src): \" << max_index_plus_one(src)\n                    << \"\\n\\t dest.size():             \" << dest.size() \n        );\n\n        for (typename EXP::const_iterator i = src.begin(); i != src.end(); ++i)\n            dest(i->first) -= C*i->second;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename T::value_type::second_type min (\n        const T& a\n    )\n    {\n        typedef typename T::value_type::second_type type;\n\n        type temp = 0;\n        for (typename T::const_iterator i = a.begin(); i != a.end(); ++i)\n        {\n            if (temp > i->second)\n                temp = i->second;\n        }\n        return temp;\n    }\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename T::value_type::second_type max (\n        const T& a\n    )\n    {\n        typedef typename T::value_type::second_type type;\n\n        type temp = 0;\n        for (typename T::const_iterator i = a.begin(); i != a.end(); ++i)\n        {\n            if (temp < i->second)\n                temp = i->second;\n        }\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename sparse_vector_type>\n        inline matrix<typename sparse_vector_type::value_type::second_type,0,1> sparse_to_dense (\n            const sparse_vector_type& vect,\n            unsigned long num_dimensions \n        )\n        {\n            // You must use unsigned integral key types in your sparse vectors\n            typedef typename sparse_vector_type::value_type::first_type idx_type;\n            typedef typename sparse_vector_type::value_type::second_type value_type;\n            COMPILE_TIME_ASSERT(is_unsigned_type<idx_type>::value);\n\n            matrix<value_type,0,1> result;\n\n            if (vect.size() == 0)\n                return result;\n\n            result.set_size(num_dimensions);\n            result = 0;\n\n            for (typename sparse_vector_type::const_iterator j = vect.begin(); j != vect.end(); ++j)\n            {\n                if ((long)(j->first) < result.size())\n                {\n                    result(j->first) += j->second;\n                }\n            }\n\n            return result;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename idx_type, typename value_type, typename alloc>\n    matrix<value_type,0,1> sparse_to_dense (\n        const std::vector<std::pair<idx_type,value_type>,alloc>& vect,\n        unsigned long num_dimensions \n    )\n    {\n        return impl::sparse_to_dense(vect,num_dimensions);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename idx_type, typename value_type, typename alloc>\n    matrix<value_type,0,1> sparse_to_dense (\n        const std::vector<std::pair<idx_type,value_type>,alloc>& vect\n    )\n    {\n        return impl::sparse_to_dense(vect, max_index_plus_one(vect));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T1, typename T2, typename T3, typename T4>\n    matrix<T2,0,1> sparse_to_dense (\n        const std::map<T1,T2,T3,T4>& vect,\n        unsigned long num_dimensions \n    )\n    {\n        return impl::sparse_to_dense(vect,num_dimensions);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T1, typename T2, typename T3, typename T4>\n    matrix<T2,0,1> sparse_to_dense (\n        const std::map<T1,T2,T3,T4>& vect\n    )\n    {\n        return impl::sparse_to_dense(vect, max_index_plus_one(vect));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename enable_if<is_matrix<T>,T&>::type sparse_to_dense(\n        T& item\n    ) { return item; }\n    \n    template <typename EXP>\n    matrix<typename EXP::type,0,1> sparse_to_dense(\n        const matrix_exp<EXP>& item,\n        unsigned long num\n    ) \n    { \n        typedef typename EXP::type type;\n        if (item.size() == (long)num)\n            return item; \n        else if (item.size() < (long)num)\n            return join_cols(item, zeros_matrix<type>((long)num-item.size(),1));\n        else\n            return colm(item,0,(long)num);\n    }\n    \n// ----------------------------------------------------------------------------------------\n\n    template <typename sample_type, typename alloc>\n    std::vector<matrix<typename sample_type::value_type::second_type,0,1> > sparse_to_dense (\n        const std::vector<sample_type, alloc>& samples,\n        unsigned long num_dimensions\n    )\n    {\n        typedef typename sample_type::value_type pair_type;\n        typedef typename pair_type::second_type value_type;\n\n        std::vector< matrix<value_type,0,1> > result;\n\n        // now turn all the samples into dense samples\n        result.resize(samples.size());\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            result[i] = sparse_to_dense(samples[i],num_dimensions);\n        }\n\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename sample_type, typename alloc>\n    std::vector<matrix<typename sample_type::value_type::second_type,0,1> > sparse_to_dense (\n        const std::vector<sample_type, alloc>& samples\n    )\n    {\n        return sparse_to_dense(samples, max_index_plus_one(samples));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    T make_sparse_vector (\n        const T& v\n    )\n    {\n        // You must use unsigned integral key types in your sparse vectors\n        typedef typename T::value_type::first_type idx_type;\n        typedef typename T::value_type::second_type value_type;\n        COMPILE_TIME_ASSERT(is_unsigned_type<idx_type>::value);\n        std::map<idx_type,value_type> temp;\n        for (typename T::const_iterator i = v.begin(); i != v.end(); ++i)\n        {\n            temp[i->first] += i->second;\n        }\n\n        return T(temp.begin(), temp.end());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void make_sparse_vector_inplace(\n        T& vect\n    )\n    {\n        vect = make_sparse_vector(vect);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename alloc\n        >\n    void make_sparse_vector_inplace (\n        std::vector<std::pair<T,U>,alloc>& vect\n    )\n    {\n        if (vect.size() > 0)\n        {\n            std::sort(vect.begin(), vect.end());\n\n            // merge duplicates\n            for (unsigned long i = 1; i < vect.size(); ++i)\n            {\n                // if we found a duplicate\n                if (vect[i-1].first == vect[i].first)\n                {\n                    // now start collapsing and merging the vector\n                    unsigned long j = i-1;\n                    for (unsigned long k = i; k < vect.size(); ++k)\n                    {\n                        if (vect[j].first == vect[k].first)\n                        {\n                            vect[j].second += vect[k].second;\n                        }\n                        else\n                        {\n                            ++j;\n                            vect[j] = vect[k];\n                        }\n                    }\n\n\n                    // we removed elements when we merged so we need to adjust the size.\n                    vect.resize(j+1);\n                    return;\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP, typename T, long NR, long NC, typename MM, typename L>\n    void sparse_matrix_vector_multiply (\n        const std::vector<sample_pair>& edges,\n        const matrix_exp<EXP>& v,\n        matrix<T,NR,NC,MM,L>& result\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(max_index_plus_one(edges) <= (unsigned long)v.size() &&\n                    is_col_vector(v),\n                    \"\\t void sparse_matrix_vector_multiply()\"\n                    << \"\\n\\t Invalid inputs were given to this function\"\n                    << \"\\n\\t max_index_plus_one(edges): \" << max_index_plus_one(edges)\n                    << \"\\n\\t v.size():                  \" << v.size() \n                    << \"\\n\\t is_col_vector(v):          \" << is_col_vector(v) \n        );\n\n        result.set_size(v.nr(),v.nc());\n        result = 0;\n\n        for (unsigned long k = 0; k < edges.size(); ++k)\n        {\n            const long i = edges[k].index1();\n            const long j = edges[k].index2();\n            const double d = edges[k].distance();\n\n            result(i) += v(j)*d;\n            if (i != j)\n                result(j) += v(i)*d;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    matrix<typename EXP::type,0,1> sparse_matrix_vector_multiply (\n        const std::vector<sample_pair>& edges,\n        const matrix_exp<EXP>& v\n    )\n    {\n        matrix<typename EXP::type,0,1> result;\n        sparse_matrix_vector_multiply(edges,v,result);\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP, typename T, long NR, long NC, typename MM, typename L>\n    void sparse_matrix_vector_multiply (\n        const std::vector<ordered_sample_pair>& edges,\n        const matrix_exp<EXP>& v,\n        matrix<T,NR,NC,MM,L>& result\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(max_index_plus_one(edges) <= (unsigned long)v.size() &&\n                    is_col_vector(v),\n                    \"\\t void sparse_matrix_vector_multiply()\"\n                    << \"\\n\\t Invalid inputs were given to this function\"\n                    << \"\\n\\t max_index_plus_one(edges): \" << max_index_plus_one(edges)\n                    << \"\\n\\t v.size():                  \" << v.size() \n                    << \"\\n\\t is_col_vector(v):          \" << is_col_vector(v) \n        );\n\n\n        result.set_size(v.nr(),v.nc());\n        result = 0;\n\n        for (unsigned long k = 0; k < edges.size(); ++k)\n        {\n            const long i = edges[k].index1();\n            const long j = edges[k].index2();\n            const double d = edges[k].distance();\n\n            result(i) += v(j)*d;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    matrix<typename EXP::type,0,1> sparse_matrix_vector_multiply (\n        const std::vector<ordered_sample_pair>& edges,\n        const matrix_exp<EXP>& v\n    )\n    {\n        matrix<typename EXP::type,0,1> result;\n        sparse_matrix_vector_multiply(edges,v,result);\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP, \n        typename sparse_vector_type,\n        typename T,\n        long NR,\n        long NC,\n        typename MM,\n        typename L\n        >\n    void sparse_matrix_vector_multiply (\n        const matrix_exp<EXP>& m,\n        const sparse_vector_type& v,\n        matrix<T,NR,NC,MM,L>& result\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(max_index_plus_one(v) <= (unsigned long)m.nc(),\n                    \"\\t void sparse_matrix_vector_multiply()\"\n                    << \"\\n\\t Invalid inputs were given to this function\"\n                    << \"\\n\\t max_index_plus_one(v): \" << max_index_plus_one(v)\n                    << \"\\n\\t m.size():              \" << m.size() \n        );\n\n        result.set_size(m.nr(),1);\n        result = 0;\n\n        for (typename sparse_vector_type::const_iterator i = v.begin(); i != v.end(); ++i)\n        {\n            for (long r = 0; r < result.nr(); ++r)\n            {\n                result(r) += m(r, i->first)*i->second;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP, \n        typename sparse_vector_type\n        >\n    matrix<typename EXP::type,0,1> sparse_matrix_vector_multiply (\n        const matrix_exp<EXP>& m,\n        const sparse_vector_type& v\n    )\n    {\n        matrix<typename EXP::type,0,1> result;\n        sparse_matrix_vector_multiply(m,v,result);\n        return result;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_SPARSE_VECTOR\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/sparse_vector_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_SPARSE_VECTOR_ABSTRACT_\n#ifdef DLIB_SVm_SPARSE_VECTOR_ABSTRACT_\n\n#include <cmath>\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../matrix.h\"\n#include <map>\n#include <vector>\n#include \"../graph_utils/sample_pair_abstract.h\"\n#include \"../graph_utils/ordered_sample_pair_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A sparse_vectors\n\n        In dlib, sparse vectors are represented using the container objects\n        in the C++ STL.  In particular, a sparse vector is any container that \n        contains a range of std::pair<key, scalar_value> objects where:\n            - key is an unsigned integral type \n            - scalar_value is float, double, or long double\n            - the std::pair objects have unique key values\n            - the std::pair objects are sorted such that small keys come first \n\n        Therefore, if an object satisfies the above requirements we call it a\n        \"sparse vector\".  Additionally, we define the concept of an \"unsorted sparse vector\"\n        to be a sparse vector that doesn't necessarily have sorted or unique key values.  \n        Therefore, all sparse vectors are valid unsorted sparse vectors but not the other \n        way around.  \n\n        An unsorted sparse vector with duplicate keys is always interpreted as\n        a vector where each dimension contains the sum of all corresponding elements \n        of the unsorted sparse vector.  For example, an unsorted sparse vector \n        with the elements { (3,1), (0, 4), (3,5) } represents the 4D vector:\n            [4, 0, 0, 1+5]\n\n\n\n        Examples of valid sparse vectors are:    \n            - std::map<unsigned long, double>\n            - std::vector<std::pair<unsigned long, float> > where the vector is sorted.\n              (you could make sure it was sorted by applying std::sort to it)\n\n\n        Finally, by \"dense vector\" we mean a dlib::matrix object which represents\n        either a row or column vector.\n\n        The rest of this file defines a number of helper functions for doing normal \n        vector arithmetic things with sparse vectors.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    /*!A has_unsigned_keys\n\n        This is a template where has_unsigned_keys<T>::value == true when T is a\n        sparse vector that contains unsigned integral keys and false otherwise.\n    !*/\n\n    template <typename T>\n    struct has_unsigned_keys\n    {\n        static const bool value = is_unsigned_type<typename T::value_type::first_type>::value;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    typename T::value_type::second_type distance_squared (\n        const T& a,\n        const U& b\n    );\n    /*!\n        requires\n            - a and b are sparse vectors\n        ensures\n            - returns the squared distance between the vectors\n              a and b\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename V, typename W>\n    typename T::value_type::second_type distance_squared (\n        const V& a_scale,\n        const T& a,\n        const W& b_scale,\n        const U& b\n    );\n    /*!\n        requires\n            - a and b are sparse vectors\n        ensures\n            - returns the squared distance between the vectors\n              a_scale*a and b_scale*b\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    typename T::value_type::second_type distance (\n        const T& a,\n        const U& b\n    );\n    /*!\n        requires\n            - a and b are sparse vectors\n        ensures\n            - returns the distance between the vectors\n              a and b.  (i.e. std::sqrt(distance_squared(a,b)))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U, typename V, typename W>\n    typename T::value_type::second_type distance (\n        const V& a_scale,\n        const T& a,\n        const W& b_scale,\n        const U& b\n    );\n    /*!\n        requires\n            - a and b are sparse vectors\n        ensures\n            - returns the distance between the vectors\n              a_scale*a and b_scale*b.  (i.e. std::sqrt(distance_squared(a_scale,a,b_scale,b)))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    void assign (\n        T& dest,\n        const U& src\n    );\n    /*!\n        requires\n            - dest == a sparse vector or a dense vector\n            - src == a sparse vector or a dense vector\n            - dest is not dense when src is sparse\n              (i.e. you can't assign a sparse vector to a dense vector.  This is\n              because we don't know what the proper dimensionality should be for the\n              dense vector)\n        ensures\n            - #src represents the same vector as dest.  \n              (conversion between sparse/dense formats is done automatically)\n    !*/\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename T::value_type::second_type dot (\n        const T& a,\n        const T& b\n    );\n    /*!\n        requires\n            - a and b are sparse vectors \n        ensures\n            - returns the dot product between the vectors a and b\n    !*/\n\n    template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>\n    T4 dot (\n        const std::vector<T1,T2>& a,\n        const std::map<T3,T4,T5,T6>& b\n    );\n    /*!\n        requires\n            - a and b are sparse vectors \n        ensures\n            - returns the dot product between the vectors a and b\n    !*/\n\n    template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>\n    T4 dot (\n        const std::map<T3,T4,T5,T6>& a,\n        const std::vector<T1,T2>& b\n    );\n    /*!\n        requires\n            - a and b are sparse vectors \n        ensures\n            - returns the dot product between the vectors a and b\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename EXP>\n    typename T::value_type::second_type dot (\n        const T& a,\n        const matrix_exp<EXP>& b\n    );\n    /*!\n        requires\n            - a is an unsorted sparse vector\n            - is_vector(b) == true\n        ensures\n            - returns the dot product between the vectors a and b.  \n            - if (max_index_plus_one(a) >= b.size()) then\n                - a's dimensionality is greater than b's dimensionality.  In this case we\n                  pretend b is padded by as many zeros as is needed to make the dot product\n                  work.  So this means that any elements in a that go beyond the length of\n                  b are simply ignored.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename EXP>\n    typename T::value_type::second_type dot (\n        const matrix_exp<EXP>& a,\n        const T& b\n    );\n    /*!\n        requires\n            - b is an unsorted sparse vector\n            - is_vector(a) == true\n        ensures\n            - returns the dot product between the vectors a and b\n            - if (max_index_plus_one(b) >= a.size()) then\n                - b's dimensionality is greater than a's dimensionality.  In this case we\n                  pretend a is padded by as many zeros as is needed to make the dot product\n                  work.  So this means that any elements in b that go beyond the length of\n                  a are simply ignored.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename T::value_type::second_type length_squared (\n        const T& a\n    );\n    /*!\n        requires\n            - a is a sparse vector\n        ensures\n            - returns dot(a,a) \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename T::value_type::second_type length (\n        const T& a\n    );\n    /*!\n        requires\n            - a is a sparse vector\n        ensures\n            - returns std::sqrt(length_squared(a,a))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename U>\n    void scale_by (\n        T& a,\n        const U& value\n    );\n    /*!\n        requires\n            - a is an unsorted sparse vector or a dlib::matrix\n        ensures\n            - #a == a*value\n              (i.e. multiplies every element of the vector a by value)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    T add (\n        const T& a,\n        const T& b\n    );\n    /*!\n        requires\n            - a is a sparse vector or dlib::matrix\n            - b is a sparse vector or dlib::matrix\n        ensures\n            - returns a vector or matrix which represents a+b.  If the inputs are\n              sparse vectors then the result is a sparse vector.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    T subtract (\n        const T& a,\n        const T& b\n    );\n    /*!\n        requires\n            - a is a sparse vector or dlib::matrix\n            - b is a sparse vector or dlib::matrix\n        ensures\n            - returns a vector or matrix which represents a-b.  If the inputs are\n              sparse vectors then the result is a sparse vector.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    unsigned long max_index_plus_one (\n        const T& samples\n    ); \n    /*!\n        requires\n            - samples == a single vector (either sparse or dense), or a container\n              of vectors which is either a dlib::matrix of vectors or something \n              convertible to a dlib::matrix via mat() (e.g. a std::vector)\n              Valid types of samples include (but are not limited to):\n                - dlib::matrix<double,0,1>                      // A single dense vector \n                - std::map<unsigned int, double>                // A single sparse vector\n                - std::vector<dlib::matrix<double,0,1> >        // An array of dense vectors\n                - std::vector<std::map<unsigned int, double> >  // An array of sparse vectors\n        ensures\n            - This function tells you the dimensionality of a set of vectors.  The vectors\n              can be either sparse or dense.  \n            - if (samples.size() == 0) then\n                - returns 0\n            - else if (samples contains dense vectors or is a dense vector) then\n                - returns the number of elements in the first sample vector.  This means\n                  we implicitly assume all dense vectors have the same length)\n            - else\n                - In this case samples contains sparse vectors or is a sparse vector.  \n                - returns the largest element index in any sample + 1.  Note that the element index values\n                  are the values stored in std::pair::first.  So this number tells you the dimensionality\n                  of a set of sparse vectors.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename SRC, typename U>\n    inline void add_to (\n        matrix<T,NR,NC,MM,L>& dest,\n        const SRC& src,\n        const U& C = 1\n    );\n    /*!\n        requires\n            - SRC == a matrix expression or an unsorted sparse vector\n            - is_vector(dest) == true\n            - Let MAX denote the largest element index in src.\n              Then we require that:\n                - MAX < dest.size()\n                - (i.e. dest needs to be big enough to contain all the elements of src)\n        ensures\n            - #dest == dest + C*src\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, long NR, long NC, typename MM, typename L, typename SRC, typename U>\n    inline void subtract_from (\n        matrix<T,NR,NC,MM,L>& dest,\n        const SRC& src,\n        const U& C = 1\n    );\n    /*!\n        requires\n            - SRC == a matrix expression or an unsorted sparse vector\n            - is_vector(dest) == true\n            - Let MAX denote the largest element index in src.\n              Then we require that:\n                - MAX < dest.size()\n                - (i.e. dest needs to be big enough to contain all the elements of src)\n        ensures\n            - #dest == dest - C*src\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename T::value_type::second_type min (\n        const T& vect\n    );\n    /*!\n        requires\n            - T == an unsorted sparse vector\n        ensures\n            - returns the minimum value in the sparse vector vect.  Note that\n              this value is always <= 0 since a sparse vector has an unlimited number\n              of 0 elements.\n    !*/\n\n// ------------------------------------------------------------------------------------\n\n    template <typename T>\n    typename T::value_type::second_type max (\n        const T& vect\n    );\n    /*!\n        requires\n            - T == an unsorted sparse vector\n        ensures\n            - returns the maximum value in the sparse vector vect.  Note that\n              this value is always >= 0 since a sparse vector has an unlimited number\n              of 0 elements.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type\n        >\n    matrix<typename sample_type::value_type::second_type,0,1> sparse_to_dense (\n        const sample_type& vect\n    );\n    /*!\n        requires\n            - vect must be a sparse vector or a dense column vector.\n        ensures\n            - converts the single sparse or dense vector vect to a dense (column matrix form)\n              representation.  That is, this function returns a vector V such that:\n                - V.size() == max_index_plus_one(vect)\n                - for all valid j:\n                    - V(j) == The value of the j'th dimension of the vector vect.  Note \n                      that V(j) is zero if it is a sparse vector that doesn't contain an \n                      entry for the j'th dimension.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type\n        >\n    matrix<typename sample_type::value_type::second_type,0,1> sparse_to_dense (\n        const sample_type& vect,\n        unsigned long num_dimensions \n    );\n    /*!\n        requires\n            - vect must be a sparse vector or a dense column vector.\n        ensures\n            - converts the single sparse or dense vector vect to a dense (column matrix form)\n              representation.  That is, this function returns a vector V such that:\n                - V.size() == num_dimensions \n                - for all valid j:\n                    - V(j) == The value of the j'th dimension of the vector vect.  Note \n                      that V(j) is zero if it is a sparse vector that doesn't contain an \n                      entry for the j'th dimension.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type, \n        typename alloc\n        >\n    std::vector<matrix<typename sample_type::value_type::second_type,0,1> > sparse_to_dense (\n        const std::vector<sample_type, alloc>& samples\n    );\n    /*!\n        requires\n            - all elements of samples must be sparse vectors or dense column vectors.\n        ensures\n            - converts from sparse sample vectors to dense (column matrix form)\n            - That is, this function returns a std::vector R such that:\n                - R contains column matrices    \n                - R.size() == samples.size()\n                - for all valid i: \n                    - R[i] == sparse_to_dense(samples[i], max_index_plus_one(samples))\n                      (i.e. the dense (i.e. dlib::matrix) version of the sparse sample\n                      given by samples[i].)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sample_type, \n        typename alloc\n        >\n    std::vector<matrix<typename sample_type::value_type::second_type,0,1> > sparse_to_dense (\n        const std::vector<sample_type, alloc>& samples,\n        unsigned long num_dimensions \n    );\n    /*!\n        requires\n            - all elements of samples must be sparse vectors or dense column vectors.\n        ensures\n            - converts from sparse sample vectors to dense (column matrix form)\n            - That is, this function returns a std::vector R such that:\n                - R contains column matrices    \n                - R.size() == samples.size()\n                - for all valid i: \n                    - R[i] == sparse_to_dense(samples[i], num_dimensions)\n                      (i.e. the dense (i.e. dlib::matrix) version of the sparse sample\n                      given by samples[i].)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    T make_sparse_vector (\n        const T& v\n    );\n    /*!\n        requires\n            - v is an unsorted sparse vector\n        ensures\n            - returns a copy of v which is a sparse vector. \n              (i.e. it will be properly sorted and not have any duplicate key values but\n              will still logically represent the same vector).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void make_sparse_vector_inplace(\n        T& vect\n    );\n    /*!\n        requires\n            - v is an unsorted sparse vector\n        ensures\n            - vect == make_sparse_vector(vect)\n            - This function is just an optimized version of make_sparse_vector(), in\n              particular, when T is a std::vector<std::pair<>> type it is much more\n              efficient.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP, \n        typename T, \n        long NR, \n        long NC, \n        typename MM, \n        typename L\n        >\n    void sparse_matrix_vector_multiply (\n        const std::vector<sample_pair>& edges,\n        const matrix_exp<EXP>& v,\n        matrix<T,NR,NC,MM,L>& result\n    );\n    /*!\n        requires\n            - is_col_vector(v) == true\n            - max_index_plus_one(edges) <= v.size()\n        ensures\n            - Interprets edges as representing a symmetric sparse matrix M.  The elements\n              of M are defined such that, for all valid i,j:\n                - M(i,j) == sum of edges[k].distance() for all k where edges[k]==sample_pair(i,j) \n                - This means that any element of M that doesn't have any edges associated\n                  with it will have a value of 0.\n            - #result == M*v\n              (i.e. this function multiplies the vector v with the sparse matrix\n              represented by edges and stores the output into result)\n            - get_rect(#result) == get_rect(v)\n              (i.e. result will have the same dimensions as v)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP, \n        typename T, \n        long NR, \n        long NC, \n        typename MM, \n        typename L\n        >\n    void sparse_matrix_vector_multiply (\n        const std::vector<ordered_sample_pair>& edges,\n        const matrix_exp<EXP>& v,\n        matrix<T,NR,NC,MM,L>& result\n    );\n    /*!\n        requires\n            - is_col_vector(v) == true\n            - max_index_plus_one(edges) <= v.size()\n        ensures\n            - Interprets edges as representing a square sparse matrix M.  The elements of M\n              are defined such that, for all valid i,j:\n                - M(i,j) == sum of edges[k].distance() for all k where edges[k]==ordered_sample_pair(i,j) \n                - This means that any element of M that doesn't have any edges associated\n                  with it will have a value of 0.\n            - #result == M*v\n              (i.e. this function multiplies the vector v with the sparse matrix\n              represented by edges and stores the output into result)\n            - get_rect(#result) == get_rect(v)\n              (i.e. result will have the same dimensions as v)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    matrix<typename EXP::type,0,1> sparse_matrix_vector_multiply (\n        const std::vector<sample_pair>& edges,\n        const matrix_exp<EXP>& v\n    );\n    /*!\n        requires\n            - is_col_vector(v) == true\n            - max_index_plus_one(edges) <= v.size()\n        ensures\n            - This is just a convenience routine for invoking the above\n              sparse_matrix_vector_multiply() routine.  In particular, it just calls\n              sparse_matrix_vector_multiply() with a temporary result matrix and then\n              returns the result.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP\n        >\n    matrix<typename EXP::type,0,1> sparse_matrix_vector_multiply (\n        const std::vector<ordered_sample_pair>& edges,\n        const matrix_exp<EXP>& v\n    );\n    /*!\n        requires\n            - is_col_vector(v) == true\n            - max_index_plus_one(edges) <= v.size()\n        ensures\n            - This is just a convenience routine for invoking the above\n              sparse_matrix_vector_multiply() routine.  In particular, it just calls\n              sparse_matrix_vector_multiply() with a temporary result matrix and then\n              returns the result.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP, \n        typename sparse_vector_type,\n        typename T,\n        long NR,\n        long NC,\n        typename MM,\n        typename L\n        >\n    void sparse_matrix_vector_multiply (\n        const matrix_exp<EXP>& m,\n        const sparse_vector_type& v,\n        matrix<T,NR,NC,MM,L>& result\n    );\n    /*!\n        requires\n            - max_index_plus_one(v) <= m.nc()\n            - v == an unsorted sparse vector\n        ensures\n            - #result == m*v\n              (i.e. multiply m by the vector v and store the output in result)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename EXP, \n        typename sparse_vector_type\n        >\n    matrix<typename EXP::type,0,1> sparse_matrix_vector_multiply (\n        const matrix_exp<EXP>& m,\n        const sparse_vector_type& v\n    );\n    /*!\n        requires\n            - max_index_plus_one(v) <= m.nc()\n            - v == an unsorted sparse vector\n        ensures\n            - returns m*v\n              (i.e. multiply m by the vector v and return the resulting vector)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_SPARSE_VECTOR_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_assignment_trainer.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_ASSiGNMENT_TRAINER_Hh_\n#define DLIB_STRUCTURAL_ASSiGNMENT_TRAINER_Hh_\n\n#include \"structural_assignment_trainer_abstract.h\"\n#include \"../algs.h\"\n#include \"../optimization.h\"\n#include \"structural_svm_assignment_problem.h\"\n#include \"num_nonnegative_weights.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class structural_assignment_trainer\n    {\n    public:\n        typedef typename feature_extractor::lhs_element lhs_element;\n        typedef typename feature_extractor::rhs_element rhs_element;\n        typedef std::pair<std::vector<lhs_element>, std::vector<rhs_element> > sample_type;\n        typedef std::vector<long> label_type;\n        typedef assignment_function<feature_extractor> trained_function_type;\n\n        structural_assignment_trainer (\n        )  \n        {\n            set_defaults();\n        }\n\n        explicit structural_assignment_trainer (\n            const feature_extractor& fe_\n        ) : fe(fe_)\n        {\n            set_defaults();\n        }\n\n        const feature_extractor& get_feature_extractor (\n        ) const { return fe; }\n\n        void set_num_threads (\n            unsigned long num\n        )\n        {\n            num_threads = num;\n        }\n\n        unsigned long get_num_threads (\n        ) const\n        {\n            return num_threads;\n        }\n\n        void set_epsilon (\n            double eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void structural_assignment_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        double get_epsilon (\n        ) const { return eps; }\n\n        void set_max_cache_size (\n            unsigned long max_size\n        )\n        {\n            max_cache_size = max_size;\n        }\n\n        unsigned long get_max_cache_size (\n        ) const\n        {\n            return max_cache_size; \n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            solver = item;\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return solver;\n        }\n\n        void set_c (\n            double C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void structural_assignment_trainer::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        double get_c (\n        ) const\n        {\n            return C;\n        }\n\n        bool forces_assignment(\n        ) const { return force_assignment; } \n\n        void set_forces_assignment (\n            bool new_value\n        )\n        {\n            force_assignment = new_value;\n        }\n\n        void set_loss_per_false_association (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss > 0, \n                \"\\t void structural_assignment_trainer::set_loss_per_false_association(loss)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t loss: \" << loss\n                << \"\\n\\t this: \" << this\n                );\n\n            loss_per_false_association = loss;\n        }\n\n        double get_loss_per_false_association (\n        ) const\n        {\n            return loss_per_false_association;\n        }\n\n        void set_loss_per_missed_association (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss > 0, \n                \"\\t void structural_assignment_trainer::set_loss_per_missed_association(loss)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t loss: \" << loss\n                << \"\\n\\t this: \" << this\n                );\n\n            loss_per_missed_association = loss;\n        }\n\n        double get_loss_per_missed_association (\n        ) const\n        {\n            return loss_per_missed_association;\n        }\n\n        const assignment_function<feature_extractor> train (  \n            const std::vector<sample_type>& samples,\n            const std::vector<label_type>& labels\n        ) const\n        {\n            // make sure requires clause is not broken\n#ifdef ENABLE_ASSERTS\n            if (force_assignment)\n            {\n                DLIB_ASSERT(is_forced_assignment_problem(samples, labels), \n                            \"\\t assignment_function structural_assignment_trainer::train()\"\n                            << \"\\n\\t invalid inputs were given to this function\"\n                            << \"\\n\\t is_forced_assignment_problem(samples,labels): \" << is_forced_assignment_problem(samples,labels)\n                            << \"\\n\\t is_assignment_problem(samples,labels):        \" << is_assignment_problem(samples,labels)\n                            << \"\\n\\t is_learning_problem(samples,labels):          \" << is_learning_problem(samples,labels)\n                );\n            }\n            else\n            {\n                DLIB_ASSERT(is_assignment_problem(samples, labels),\n                            \"\\t assignment_function structural_assignment_trainer::train()\"\n                            << \"\\n\\t invalid inputs were given to this function\"\n                            << \"\\n\\t is_assignment_problem(samples,labels): \" << is_assignment_problem(samples,labels)\n                            << \"\\n\\t is_learning_problem(samples,labels):   \" << is_learning_problem(samples,labels)\n                );\n            }\n#endif\n\n\n\n            structural_svm_assignment_problem<feature_extractor> prob(samples,labels, fe, force_assignment, num_threads,\n                loss_per_false_association, loss_per_missed_association);\n\n            if (verbose)\n                prob.be_verbose();\n\n            prob.set_c(C);\n            prob.set_epsilon(eps);\n            prob.set_max_cache_size(max_cache_size);\n\n            matrix<double,0,1> weights; \n\n            // Take the min here because we want to prevent the user from accidentally\n            // forcing the bias term to be non-negative.\n            const unsigned long num_nonneg = std::min(fe.num_features(),num_nonnegative_weights(fe));\n            solver(prob, weights, num_nonneg);\n\n            const double bias = weights(weights.size()-1);\n            return assignment_function<feature_extractor>(colm(weights,0,weights.size()-1), bias,fe,force_assignment);\n\n        }\n\n\n    private:\n\n        bool force_assignment;\n        double C;\n        oca solver;\n        double eps;\n        bool verbose;\n        unsigned long num_threads;\n        unsigned long max_cache_size;\n        double loss_per_false_association;\n        double loss_per_missed_association;\n\n        void set_defaults ()\n        {\n            force_assignment = false;\n            C = 100;\n            verbose = false;\n            eps = 0.01;\n            num_threads = 2;\n            max_cache_size = 5;\n            loss_per_false_association = 1;\n            loss_per_missed_association = 1;\n        }\n\n        feature_extractor fe;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_ASSiGNMENT_TRAINER_Hh_\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_assignment_trainer_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_ASSiGNMENT_TRAINER_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_ASSiGNMENT_TRAINER_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"structural_svm_assignment_problem.h\"\n#include \"assignment_function_abstract.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class structural_assignment_trainer\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor\n                It must be an object that implements an interface compatible with \n                the example_feature_extractor defined in dlib/svm/assignment_function_abstract.h.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning to solve an assignment problem based\n                on a training dataset of example assignments.  The training procedure produces an \n                assignment_function object which can be used to predict the assignments of\n                new data.\n\n                Note that this is just a convenience wrapper around the \n                structural_svm_assignment_problem to make it look \n                similar to all the other trainers in dlib.  \n        !*/\n\n    public:\n        typedef typename feature_extractor::lhs_element lhs_element;\n        typedef typename feature_extractor::rhs_element rhs_element;\n        typedef std::pair<std::vector<lhs_element>, std::vector<rhs_element> > sample_type;\n        typedef std::vector<long> label_type;\n        typedef assignment_function<feature_extractor> trained_function_type;\n\n        structural_assignment_trainer (\n        );\n        /*!\n            ensures\n                - #get_c() == 100\n                - this object isn't verbose\n                - #get_epsilon() == 0.01\n                - #get_num_threads() == 2\n                - #get_max_cache_size() == 5\n                - #get_feature_extractor() == a default initialized feature_extractor\n                - #forces_assignment() == false\n                - #get_loss_per_false_association() == 1\n                - #get_loss_per_missed_association() == 1\n        !*/\n\n        explicit structural_assignment_trainer (\n            const feature_extractor& fe\n        );\n        /*!\n            ensures\n                - #get_c() == 100\n                - this object isn't verbose\n                - #get_epsilon() == 0.01\n                - #get_num_threads() == 2\n                - #get_max_cache_size() == 40\n                - #get_feature_extractor() == fe \n                - #forces_assignment() == false\n                - #get_loss_per_false_association() == 1\n                - #get_loss_per_missed_association() == 1\n        !*/\n\n        const feature_extractor& get_feature_extractor (\n        ) const;\n        /*!\n            ensures\n                - returns the feature extractor used by this object\n        !*/\n\n        void set_num_threads (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #get_num_threads() == num\n        !*/\n\n        unsigned long get_num_threads (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads used during training.  You should \n                  usually set this equal to the number of processing cores on your\n                  machine.\n        !*/\n\n        void set_epsilon (\n            double eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps\n        !*/\n\n        double get_epsilon (\n        ) const; \n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer \n                  to train.  You can think of this epsilon value as saying \"solve the \n                  optimization problem until the average number of assignment mistakes per \n                  training sample is within epsilon of its optimal value\".\n        !*/\n\n        void set_max_cache_size (\n            unsigned long max_size\n        );\n        /*!\n            ensures\n                - #get_max_cache_size() == max_size\n        !*/\n\n        unsigned long get_max_cache_size (\n        ) const;\n        /*!\n            ensures\n                - During training, this object basically runs the assignment_function on \n                  each training sample, over and over.  To speed this up, it is possible to \n                  cache the results of these invocations.  This function returns the number \n                  of cache elements per training sample kept in the cache.  Note that a value \n                  of 0 means caching is not used at all.  \n        !*/\n\n        void set_loss_per_false_association (\n            double loss\n        );\n        /*!\n            requires\n                - loss > 0\n            ensures\n                - #get_loss_per_false_association() == loss\n        !*/\n\n        double get_loss_per_false_association (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss experienced for associating two objects\n                  together that shouldn't be associated.  If you care more about avoiding\n                  accidental associations than ensuring all possible associations are\n                  identified then then you can increase this value.\n        !*/\n\n        void set_loss_per_missed_association (\n            double loss\n        );\n        /*!\n            requires\n                - loss > 0\n            ensures\n                - #get_loss_per_missed_association() == loss\n        !*/\n\n        double get_loss_per_missed_association (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss experienced for failing to associate two\n                  objects that are supposed to be associated.  If you care more about\n                  getting all the associations than avoiding accidentally associating\n                  objects that shouldn't be associated then you can increase this value.\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the structural SVM problem.  \n        !*/\n\n        void set_c (\n            double C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() = C\n        !*/\n\n        double get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter \n                  that determines the trade-off between trying to fit the training \n                  data (i.e. minimize the loss) or allowing more errors but hopefully \n                  improving the generalization of the resulting assignment_function.  \n                  Larger values encourage exact fitting while smaller values of C may \n                  encourage better generalization. \n        !*/\n\n        void set_forces_assignment (\n            bool new_value\n        );\n        /*!\n            ensures\n                - #forces_assignment() == new_value\n        !*/\n\n        bool forces_assignment(\n        ) const; \n        /*!\n            ensures\n                - returns the value of the forces_assignment() parameter for the\n                  assignment_functions generated by this object.  \n        !*/\n\n        const assignment_function<feature_extractor> train (  \n            const std::vector<sample_type>& samples,\n            const std::vector<label_type>& labels\n        ) const;\n        /*!\n            requires\n                - is_assignment_problem(samples,labels) == true\n                - if (forces_assignment()) then\n                    - is_forced_assignment_problem(samples,labels) == true\n            ensures\n                - Uses the structural_svm_assignment_problem to train an \n                  assignment_function on the given samples/labels training pairs.  \n                  The idea is to learn to predict a label given an input sample.\n                - returns a function F with the following properties:\n                    - F(new_sample) == A set of assignments indicating how the elements of \n                      new_sample.first match up with the elements of new_sample.second.\n                    - F.forces_assignment() == forces_assignment()\n                    - F.get_feature_extractor() == get_feature_extractor()\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_ASSiGNMENT_TRAINER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_graph_labeling_trainer.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_GRAPH_LABELING_tRAINER_Hh_\n#define DLIB_STRUCTURAL_GRAPH_LABELING_tRAINER_Hh_\n\n#include \"structural_graph_labeling_trainer_abstract.h\"\n#include \"../algs.h\"\n#include \"../optimization.h\"\n#include \"structural_svm_graph_labeling_problem.h\"\n#include \"../graph_cuts/graph_labeler.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    class structural_graph_labeling_trainer\n    {\n    public:\n        typedef std::vector<bool> label_type;\n        typedef graph_labeler<vector_type> trained_function_type;\n\n        structural_graph_labeling_trainer (\n        )  \n        {\n            C = 10;\n            verbose = false;\n            eps = 0.1;\n            num_threads = 2;\n            max_cache_size = 5;\n            loss_pos = 1.0;\n            loss_neg = 1.0;\n        }\n\n        void set_num_threads (\n            unsigned long num\n        )\n        {\n            num_threads = num;\n        }\n\n        unsigned long get_num_threads (\n        ) const\n        {\n            return num_threads;\n        }\n\n        void set_epsilon (\n            double eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void structural_graph_labeling_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        double get_epsilon (\n        ) const { return eps; }\n\n        void set_max_cache_size (\n            unsigned long max_size\n        )\n        {\n            max_cache_size = max_size;\n        }\n\n        unsigned long get_max_cache_size (\n        ) const\n        {\n            return max_cache_size; \n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            solver = item;\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return solver;\n        }\n\n        void set_c (\n            double C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void structural_graph_labeling_trainer::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        double get_c (\n        ) const\n        {\n            return C;\n        }\n\n\n        void set_loss_on_positive_class (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss >= 0,\n                    \"\\t structural_graph_labeling_trainer::set_loss_on_positive_class()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t loss: \" << loss \n                    << \"\\n\\t this: \" << this );\n\n            loss_pos = loss;\n        }\n\n        void set_loss_on_negative_class (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss >= 0,\n                    \"\\t structural_graph_labeling_trainer::set_loss_on_negative_class()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t loss: \" << loss \n                    << \"\\n\\t this: \" << this );\n\n            loss_neg = loss;\n        }\n\n        double get_loss_on_negative_class (\n        ) const { return loss_neg; }\n\n        double get_loss_on_positive_class (\n        ) const { return loss_pos; }\n\n\n        template <\n            typename graph_type\n            >\n        const graph_labeler<vector_type> train (  \n            const dlib::array<graph_type>& samples,\n            const std::vector<label_type>& labels,\n            const std::vector<std::vector<double> >& losses\n        ) const\n        {\n#ifdef ENABLE_ASSERTS\n            std::string reason_for_failure;\n            DLIB_ASSERT(is_graph_labeling_problem(samples, labels, reason_for_failure) == true ,\n                    \"\\t void structural_graph_labeling_trainer::train()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t reason_for_failure: \" << reason_for_failure \n                    << \"\\n\\t samples.size(): \" << samples.size() \n                    << \"\\n\\t labels.size():  \" << labels.size() \n                    << \"\\n\\t this: \" << this );\n            DLIB_ASSERT((losses.size() == 0 || sizes_match(labels, losses) == true) &&\n                        all_values_are_nonnegative(losses) == true,\n                    \"\\t void structural_graph_labeling_trainer::train()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t labels.size():  \" << labels.size() \n                    << \"\\n\\t losses.size():  \" << losses.size() \n                    << \"\\n\\t sizes_match(labels,losses): \" << sizes_match(labels,losses) \n                    << \"\\n\\t all_values_are_nonnegative(losses): \" << all_values_are_nonnegative(losses) \n                    << \"\\n\\t this: \" << this );\n#endif\n\n\n            structural_svm_graph_labeling_problem<graph_type> prob(samples, labels, losses, num_threads);\n\n            if (verbose)\n                prob.be_verbose();\n\n            prob.set_c(C);\n            prob.set_epsilon(eps);\n            prob.set_max_cache_size(max_cache_size);\n            if (prob.get_losses().size() == 0)\n            {\n                prob.set_loss_on_positive_class(loss_pos);\n                prob.set_loss_on_negative_class(loss_neg);\n            }\n\n            matrix<double,0,1> w;\n            solver(prob, w, prob.get_num_edge_weights());\n\n            vector_type edge_weights;\n            vector_type node_weights;\n            populate_weights(w, edge_weights, node_weights, prob.get_num_edge_weights());\n            return graph_labeler<vector_type>(edge_weights, node_weights);\n        }\n\n        template <\n            typename graph_type\n            >\n        const graph_labeler<vector_type> train (  \n            const dlib::array<graph_type>& samples,\n            const std::vector<label_type>& labels\n        ) const\n        {\n            std::vector<std::vector<double> > losses;\n            return train(samples, labels, losses);\n        }\n\n    private:\n\n        template <typename T>\n        typename enable_if<is_matrix<T> >::type populate_weights (\n            const matrix<double,0,1>& w,\n            T& edge_weights,\n            T& node_weights,\n            long split_idx\n        ) const\n        {\n            edge_weights = rowm(w,range(0, split_idx-1));\n            node_weights = rowm(w,range(split_idx,w.size()-1));\n        }\n\n        template <typename T>\n        typename disable_if<is_matrix<T> >::type populate_weights (\n            const matrix<double,0,1>& w,\n            T& edge_weights,\n            T& node_weights,\n            long split_idx\n        ) const\n        {\n            edge_weights.clear();\n            node_weights.clear();\n            for (long i = 0; i < split_idx; ++i)\n            {\n                if (w(i) != 0)\n                    edge_weights.insert(edge_weights.end(), std::make_pair(i,w(i)));\n            }\n            for (long i = split_idx; i < w.size(); ++i)\n            {\n                if (w(i) != 0)\n                    node_weights.insert(node_weights.end(), std::make_pair(i-split_idx,w(i)));\n            }\n        }\n\n\n        double C;\n        oca solver;\n        double eps;\n        bool verbose;\n        unsigned long num_threads;\n        unsigned long max_cache_size;\n        double loss_pos;\n        double loss_neg;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_GRAPH_LABELING_tRAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_graph_labeling_trainer_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_GRAPH_LABELING_tRAINER_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_GRAPH_LABELING_tRAINER_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"../optimization.h\"\n#include \"structural_svm_graph_labeling_problem_abstract.h\"\n#include \"../graph_cuts/graph_labeler_abstract.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename vector_type \n        >\n    class structural_graph_labeling_trainer\n    {\n        /*!\n            REQUIREMENTS ON vector_type \n                - vector_type is a dlib::matrix capable of representing column \n                  vectors or it is a sparse vector type as defined in dlib/svm/sparse_vector_abstract.h.  \n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning to solve a graph labeling problem based\n                on a training dataset of example labeled graphs.  The training procedure \n                produces a graph_labeler object which can be used to predict the labelings\n                of new graphs.\n\n                Note that this is just a convenience wrapper around the \n                structural_svm_graph_labeling_problem to make it look \n                similar to all the other trainers in dlib.  \n        !*/\n\n    public:\n        typedef std::vector<bool> label_type;\n        typedef graph_labeler<vector_type> trained_function_type;\n\n        structural_graph_labeling_trainer (\n        );\n        /*!\n            ensures\n                - #get_c() == 10\n                - this object isn't verbose\n                - #get_epsilon() == 0.1\n                - #get_num_threads() == 2\n                - #get_max_cache_size() == 5\n                - #get_loss_on_positive_class() == 1.0\n                - #get_loss_on_negative_class() == 1.0\n        !*/\n\n        void set_num_threads (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #get_num_threads() == num\n        !*/\n\n        unsigned long get_num_threads (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads used during training.  You should \n                  usually set this equal to the number of processing cores on your\n                  machine.\n        !*/\n\n        void set_epsilon (\n            double eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps\n        !*/\n\n        double get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer \n                  to train.  You can think of this epsilon value as saying \"solve the \n                  optimization problem until the average number of labeling mistakes per \n                  example graph is within epsilon of its optimal value\".\n        !*/\n\n        void set_max_cache_size (\n            unsigned long max_size\n        );\n        /*!\n            ensures\n                - #get_max_cache_size() == max_size\n        !*/\n\n        unsigned long get_max_cache_size (\n        ) const;\n        /*!\n            ensures\n                - During training, this object basically runs the graph_labeler on each \n                  training sample, over and over.  To speed this up, it is possible to \n                  cache the results of these invocations.  This function returns the number \n                  of cache elements per training sample kept in the cache.  Note that a value \n                  of 0 means caching is not used at all.  \n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the structural SVM problem.  \n        !*/\n\n        void set_c (\n            double C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() = C\n        !*/\n\n        double get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter \n                  that determines the trade-off between trying to fit the training \n                  data (i.e. minimize the loss) or allowing more errors but hopefully \n                  improving the generalization of the resulting graph_labeler.  Larger \n                  values encourage exact fitting while smaller values of C may encourage \n                  better generalization. \n        !*/\n\n        void set_loss_on_positive_class (\n            double loss\n        );\n        /*!\n            requires\n                - loss >= 0\n            ensures\n                - #get_loss_on_positive_class() == loss\n        !*/\n\n        void set_loss_on_negative_class (\n            double loss\n        );\n        /*!\n            requires\n                - loss >= 0\n            ensures\n                - #get_loss_on_negative_class() == loss\n        !*/\n\n        double get_loss_on_positive_class (\n        ) const;\n        /*!\n            ensures\n                - returns the loss incurred when a graph node which is supposed to have\n                  a label of true gets misclassified.  This value controls how much we care \n                  about correctly classifying nodes which should be labeled as true.  Larger \n                  loss values indicate that we care more strongly than smaller values.\n        !*/\n\n        double get_loss_on_negative_class (\n        ) const;\n        /*!\n            ensures\n                - returns the loss incurred when a graph node which is supposed to have\n                  a label of false gets misclassified.  This value controls how much we care \n                  about correctly classifying nodes which should be labeled as false.  Larger \n                  loss values indicate that we care more strongly than smaller values.\n        !*/\n\n        template <\n            typename graph_type\n            >\n        const graph_labeler<vector_type> train (  \n            const dlib::array<graph_type>& samples,\n            const std::vector<label_type>& labels\n        ) const;\n        /*!\n            requires\n                - is_graph_labeling_problem(samples,labels) == true\n            ensures\n                - Uses the structural_svm_graph_labeling_problem to train a graph_labeler\n                  on the given samples/labels training pairs.  The idea is to learn to\n                  predict a label given an input sample.\n                - The values of get_loss_on_positive_class() and get_loss_on_negative_class() \n                  are used to determine how to value mistakes on each node during training.\n                - returns a function F with the following properties:\n                    - F(new_sample) == The predicted labels for the nodes in the graph\n                      new_sample.\n        !*/\n\n        template <\n            typename graph_type\n            >\n        const graph_labeler<vector_type> train (  \n            const dlib::array<graph_type>& samples,\n            const std::vector<label_type>& labels,\n            const std::vector<std::vector<double> >& losses\n        ) const;\n        /*!\n            requires\n                - is_graph_labeling_problem(samples,labels) == true\n                - if (losses.size() != 0) then\n                    - sizes_match(labels, losses) == true\n                    - all_values_are_nonnegative(losses) == true\n            ensures\n                - Uses the structural_svm_graph_labeling_problem to train a graph_labeler\n                  on the given samples/labels training pairs.  The idea is to learn to\n                  predict a label given an input sample.\n                - returns a function F with the following properties:\n                    - F(new_sample) == The predicted labels for the nodes in the graph\n                      new_sample.\n                - if (losses.size() == 0) then\n                    - The values of get_loss_on_positive_class() and get_loss_on_negative_class() \n                      are used to determine how to value mistakes on each node during training.\n                    - The losses argument is effectively ignored if its size is zero.\n                - else\n                    - Each node in the training data has its own loss value defined by the\n                      corresponding entry of losses.  In particular, this means that the\n                      node with label labels[i][j] incurs a loss of losses[i][j] if it is\n                      incorrectly labeled.\n                    - The get_loss_on_positive_class() and get_loss_on_negative_class()\n                      parameters are ignored.  Only losses is used in this case.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_GRAPH_LABELING_tRAINER_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_object_detection_trainer.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_OBJECT_DETECTION_TRAiNER_Hh_\n#define DLIB_STRUCTURAL_OBJECT_DETECTION_TRAiNER_Hh_\n\n#include \"structural_object_detection_trainer_abstract.h\"\n#include \"../algs.h\"\n#include \"../optimization.h\"\n#include \"structural_svm_object_detection_problem.h\"\n#include \"../image_processing/object_detector.h\"\n#include \"../image_processing/box_overlap_testing.h\"\n#include \"../image_processing/full_object_detection.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type,\n        typename svm_struct_prob_type\n        >\n    void configure_nuclear_norm_regularizer (\n        const image_scanner_type&,\n        svm_struct_prob_type& \n    )\n    { \n        // does nothing by default.  Specific scanner types overload this function to do\n        // whatever is appropriate.\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    class structural_object_detection_trainer : noncopyable\n    {\n\n    public:\n        typedef double scalar_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef object_detector<image_scanner_type> trained_function_type;\n\n\n        explicit structural_object_detection_trainer (\n            const image_scanner_type& scanner_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(scanner_.get_num_detection_templates() > 0,\n                \"\\t structural_object_detection_trainer::structural_object_detection_trainer(scanner_)\"\n                << \"\\n\\t You can't have zero detection templates\"\n                << \"\\n\\t this: \" << this\n                );\n\n            C = 1;\n            verbose = false;\n            eps = 0.1;\n            num_threads = 2;\n            max_cache_size = 5;\n            match_eps = 0.5;\n            loss_per_missed_target = 1;\n            loss_per_false_alarm = 1;\n\n            scanner.copy_configuration(scanner_);\n\n            auto_overlap_tester = true;\n        }\n\n        const image_scanner_type& get_scanner (\n        ) const\n        {\n            return scanner;\n        }\n\n        bool auto_set_overlap_tester (\n        ) const \n        { \n            return auto_overlap_tester; \n        }\n\n        void set_overlap_tester (\n            const test_box_overlap& tester\n        )\n        {\n            overlap_tester = tester;\n            auto_overlap_tester = false;\n        }\n\n        test_box_overlap get_overlap_tester (\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(auto_set_overlap_tester() == false,\n                \"\\t test_box_overlap structural_object_detection_trainer::get_overlap_tester()\"\n                << \"\\n\\t You can't call this function if the overlap tester is generated dynamically.\"\n                << \"\\n\\t this: \" << this\n                );\n\n            return overlap_tester;\n        }\n\n        void set_num_threads (\n            unsigned long num\n        )\n        {\n            num_threads = num;\n        }\n\n        unsigned long get_num_threads (\n        ) const\n        {\n            return num_threads;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void structural_object_detection_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        scalar_type get_epsilon (\n        ) const { return eps; }\n\n        void set_max_cache_size (\n            unsigned long max_size\n        )\n        {\n            max_cache_size = max_size;\n        }\n\n        unsigned long get_max_cache_size (\n        ) const\n        {\n            return max_cache_size; \n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            solver = item;\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return solver;\n        }\n\n        void set_c (\n            scalar_type C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void structural_object_detection_trainer::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        scalar_type get_c (\n        ) const\n        {\n            return C;\n        }\n\n        void set_match_eps (\n            double eps\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < eps && eps < 1, \n                \"\\t void structural_object_detection_trainer::set_match_eps(eps)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t eps:  \" << eps \n                << \"\\n\\t this: \" << this\n                );\n\n            match_eps = eps;\n        }\n\n        double get_match_eps (\n        ) const\n        {\n            return match_eps;\n        }\n\n        double get_loss_per_missed_target (\n        ) const\n        {\n            return loss_per_missed_target;\n        }\n\n        void set_loss_per_missed_target (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss > 0, \n                \"\\t void structural_object_detection_trainer::set_loss_per_missed_target(loss)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t loss: \" << loss\n                << \"\\n\\t this: \" << this\n                );\n\n            loss_per_missed_target = loss;\n        }\n\n        double get_loss_per_false_alarm (\n        ) const\n        {\n            return loss_per_false_alarm;\n        }\n\n        void set_loss_per_false_alarm (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss > 0, \n                \"\\t void structural_object_detection_trainer::set_loss_per_false_alarm(loss)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t loss: \" << loss\n                << \"\\n\\t this: \" << this\n                );\n\n            loss_per_false_alarm = loss;\n        }\n\n        template <\n            typename image_array_type\n            >\n        const trained_function_type train (\n            const image_array_type& images,\n            const std::vector<std::vector<full_object_detection> >& truth_object_detections\n        ) const\n        {\n            std::vector<std::vector<rectangle> > empty_ignore(images.size());\n            return train_impl(images, truth_object_detections, empty_ignore, test_box_overlap());\n        }\n\n        template <\n            typename image_array_type\n            >\n        const trained_function_type train (\n            const image_array_type& images,\n            const std::vector<std::vector<full_object_detection> >& truth_object_detections,\n            const std::vector<std::vector<rectangle> >& ignore,\n            const test_box_overlap& ignore_overlap_tester = test_box_overlap()\n        ) const\n        {\n            return train_impl(images, truth_object_detections, ignore, ignore_overlap_tester);\n        }\n\n        template <\n            typename image_array_type\n            >\n        const trained_function_type train (\n            const image_array_type& images,\n            const std::vector<std::vector<rectangle> >& truth_object_detections\n        ) const\n        {\n            std::vector<std::vector<rectangle> > empty_ignore(images.size());\n            return train(images, truth_object_detections, empty_ignore, test_box_overlap());\n        }\n\n        template <\n            typename image_array_type\n            >\n        const trained_function_type train (\n            const image_array_type& images,\n            const std::vector<std::vector<rectangle> >& truth_object_detections,\n            const std::vector<std::vector<rectangle> >& ignore,\n            const test_box_overlap& ignore_overlap_tester = test_box_overlap()\n        ) const\n        {\n            std::vector<std::vector<full_object_detection> > truth_dets(truth_object_detections.size());\n            for (unsigned long i = 0; i < truth_object_detections.size(); ++i)\n            {\n                for (unsigned long j = 0; j < truth_object_detections[i].size(); ++j)\n                {\n                    truth_dets[i].push_back(full_object_detection(truth_object_detections[i][j]));\n                }\n            }\n\n            return train_impl(images, truth_dets, ignore, ignore_overlap_tester);\n        }\n\n    private:\n\n        template <\n            typename image_array_type\n            >\n        const trained_function_type train_impl (\n            const image_array_type& images,\n            const std::vector<std::vector<full_object_detection> >& truth_object_detections,\n            const std::vector<std::vector<rectangle> >& ignore,\n            const test_box_overlap& ignore_overlap_tester\n        ) const\n        {\n#ifdef ENABLE_ASSERTS\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(images,truth_object_detections) == true && images.size() == ignore.size(),\n                \"\\t trained_function_type structural_object_detection_trainer::train()\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t images.size():      \" << images.size()\n                << \"\\n\\t ignore.size():      \" << ignore.size()\n                << \"\\n\\t truth_object_detections.size(): \" << truth_object_detections.size()\n                << \"\\n\\t is_learning_problem(images,truth_object_detections): \" << is_learning_problem(images,truth_object_detections)\n                );\n            for (unsigned long i = 0; i < truth_object_detections.size(); ++i)\n            {\n                for (unsigned long j = 0; j < truth_object_detections[i].size(); ++j)\n                {\n                    DLIB_ASSERT(truth_object_detections[i][j].num_parts() == get_scanner().get_num_movable_components_per_detection_template() &&\n                                all_parts_in_rect(truth_object_detections[i][j]) == true,\n                        \"\\t trained_function_type structural_object_detection_trainer::train()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t truth_object_detections[\"<<i<<\"][\"<<j<<\"].num_parts():                \" << \n                            truth_object_detections[i][j].num_parts()\n                        << \"\\n\\t get_scanner().get_num_movable_components_per_detection_template(): \" << \n                            get_scanner().get_num_movable_components_per_detection_template()\n                        << \"\\n\\t all_parts_in_rect(truth_object_detections[\"<<i<<\"][\"<<j<<\"]): \" << all_parts_in_rect(truth_object_detections[i][j])\n                    );\n                }\n            }\n#endif\n\n            structural_svm_object_detection_problem<image_scanner_type,image_array_type > \n                svm_prob(scanner, overlap_tester, auto_overlap_tester, images,\n                    truth_object_detections, ignore, ignore_overlap_tester, num_threads);\n\n            if (verbose)\n                svm_prob.be_verbose();\n\n            svm_prob.set_c(C);\n            svm_prob.set_epsilon(eps);\n            svm_prob.set_max_cache_size(max_cache_size);\n            svm_prob.set_match_eps(match_eps);\n            svm_prob.set_loss_per_missed_target(loss_per_missed_target);\n            svm_prob.set_loss_per_false_alarm(loss_per_false_alarm);\n            configure_nuclear_norm_regularizer(scanner, svm_prob);\n            matrix<double,0,1> w;\n\n            // Run the optimizer to find the optimal w.\n            solver(svm_prob,w);\n\n            // report the results of the training.\n            return object_detector<image_scanner_type>(scanner, svm_prob.get_overlap_tester(), w);\n        }\n\n        image_scanner_type scanner;\n        test_box_overlap overlap_tester;\n\n        double C;\n        oca solver;\n        double eps;\n        double match_eps;\n        bool verbose;\n        unsigned long num_threads;\n        unsigned long max_cache_size;\n        double loss_per_missed_target;\n        double loss_per_false_alarm;\n        bool auto_overlap_tester;\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_OBJECT_DETECTION_TRAiNER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_object_detection_trainer_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_OBJECT_DETECTION_TRAiNER_H_ABSTRACTh_\n#ifdef DLIB_STRUCTURAL_OBJECT_DETECTION_TRAiNER_H_ABSTRACTh_\n\n#include \"structural_svm_object_detection_problem_abstract.h\"\n#include \"../image_processing/object_detector_abstract.h\"\n#include \"../image_processing/box_overlap_testing_abstract.h\"\n#include \"../image_processing/full_object_detection_abstract.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type\n        >\n    class structural_object_detection_trainer : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON image_scanner_type\n                image_scanner_type must be an implementation of \n                dlib/image_processing/scan_fhog_pyramid_abstract.h or\n                dlib/image_processing/scan_image_custom_abstract.h or\n                dlib/image_processing/scan_image_pyramid_abstract.h or\n                dlib/image_processing/scan_image_boxes_abstract.h\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning to detect objects in images based on a \n                set of labeled images. The training procedure produces an object_detector \n                which can be used to predict the locations of objects in new images.\n\n                Note that this is just a convenience wrapper around the structural_svm_object_detection_problem \n                to make it look similar to all the other trainers in dlib.  \n        !*/\n\n    public:\n        typedef double scalar_type;\n        typedef default_memory_manager mem_manager_type;\n        typedef object_detector<image_scanner_type> trained_function_type;\n\n\n        explicit structural_object_detection_trainer (\n            const image_scanner_type& scanner\n        );\n        /*!\n            requires\n                - scanner.get_num_detection_templates() > 0\n            ensures\n                - #get_c() == 1\n                - this object isn't verbose\n                - #get_epsilon() == 0.1\n                - #get_num_threads() == 2\n                - #get_max_cache_size() == 5\n                - #get_match_eps() == 0.5\n                - #get_loss_per_missed_target() == 1\n                - #get_loss_per_false_alarm() == 1\n                - This object will attempt to learn a model for the given\n                  scanner object when train() is called.\n                - #get_scanner() == scanner\n                  (note that only the \"configuration\" of scanner is copied.\n                  I.e. the copy is done using copy_configuration())\n                - #auto_set_overlap_tester() == true\n        !*/\n\n        const image_scanner_type& get_scanner (\n        ) const;\n        /*!\n            ensures\n                - returns the image scanner used by this object.  \n        !*/\n\n        bool auto_set_overlap_tester (\n        ) const;\n        /*!\n            ensures\n                - if (this object will automatically determine an appropriate \n                  state for the overlap tester used for non-max suppression.) then\n                    - returns true\n                    - In this case, it is determined using the find_tight_overlap_tester() \n                      routine based on the truth_object_detections given to the \n                      structural_object_detection_trainer::train() method.  \n                - else\n                    - returns false\n        !*/\n\n        void set_overlap_tester (\n            const test_box_overlap& tester\n        );\n        /*!\n            ensures\n                - #get_overlap_tester() == tester\n                - #auto_set_overlap_tester() == false\n        !*/\n\n        test_box_overlap get_overlap_tester (\n        ) const;\n        /*!\n            requires\n                - auto_set_overlap_tester() == false\n            ensures\n                - returns the overlap tester object which will be used to perform non-max suppression.\n                  In particular, this function returns the overlap tester which will populate the\n                  object_detector returned by train().\n        !*/\n\n        void set_num_threads (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #get_num_threads() == num\n        !*/\n\n        unsigned long get_num_threads (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads used during training.  You should \n                  usually set this equal to the number of processing cores on your\n                  machine.\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps\n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer \n                  to train.  You can think of this epsilon value as saying \"solve the \n                  optimization problem until the average loss per sample is within epsilon \n                  of its optimal value\".\n        !*/\n\n        void set_max_cache_size (\n            unsigned long max_size\n        );\n        /*!\n            ensures\n                - #get_max_cache_size() == max_size\n        !*/\n\n        unsigned long get_max_cache_size (\n        ) const;\n        /*!\n            ensures\n                - During training, this object basically runs the object detector on \n                  each image, over and over.  To speed this up, it is possible to cache\n                  the results of these detector invocations.  This function returns the \n                  number of cache elements per training sample kept in the cache.  Note \n                  that a value of 0 means caching is not used at all.  Note also that \n                  each cache element takes up about sizeof(double)*scanner.get_num_dimensions()\n                  memory (where scanner is the scanner given to this object's constructor).\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the structural SVM problem.  \n        !*/\n\n        void set_c (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() = C\n        !*/\n\n        const scalar_type get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter \n                  that determines the trade-off between trying to fit the training \n                  data (i.e. minimize the loss) or allowing more errors but hopefully \n                  improving the generalization of the resulting detector.  Larger \n                  values encourage exact fitting while smaller values of C may encourage \n                  better generalization. \n        !*/\n\n        void set_match_eps (\n            double eps\n        );\n        /*!\n            requires\n                - 0 < eps < 1\n            ensures\n                - #get_match_eps() == eps\n        !*/\n\n        double get_match_eps (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of alignment necessary for a detection to be considered\n                  as matching with a ground truth rectangle.  If it doesn't match then\n                  it is considered to be a false alarm.  To define this precisely, let\n                  A and B be two rectangles, then A and B match if and only if:\n                    A.intersect(B).area()/(A+B).area() > get_match_eps()\n        !*/\n\n        double get_loss_per_missed_target (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss experienced for failing to detect one of the\n                  targets.  If you care more about finding targets than having a low false\n                  alarm rate then you can increase this value.\n        !*/\n\n        void set_loss_per_missed_target (\n            double loss\n        );\n        /*!\n            requires\n                - loss > 0\n            ensures\n                - #get_loss_per_missed_target() == loss\n        !*/\n\n        double get_loss_per_false_alarm (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss experienced for emitting a false alarm detection.\n                  Or in other words, the loss for generating a detection that doesn't correspond \n                  to one of the truth rectangles.  If you care more about having a low false\n                  alarm rate than finding all the targets then you can increase this value.\n        !*/\n\n        void set_loss_per_false_alarm (\n            double loss\n        );\n        /*!\n            requires\n                - loss > 0\n            ensures\n                - #get_loss_per_false_alarm() == loss\n        !*/\n\n        template <\n            typename image_array_type\n            >\n        const trained_function_type train (\n            const image_array_type& images,\n            const std::vector<std::vector<full_object_detection> >& truth_object_detections\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(images, truth_object_detections) == true\n                - it must be valid to pass images[0] into the image_scanner_type::load() method.\n                  (also, image_array_type must be an implementation of dlib/array/array_kernel_abstract.h)\n                - for all valid i, j:\n                    - truth_object_detections[i][j].num_parts() == get_scanner().get_num_movable_components_per_detection_template() \n                    - all_parts_in_rect(truth_object_detections[i][j]) == true\n            ensures\n                - Uses the structural_svm_object_detection_problem to train an object_detector \n                  on the given images and truth_object_detections.  \n                - returns a function F with the following properties:\n                    - F(new_image) == A prediction of what objects are present in new_image.  This\n                      is a set of rectangles indicating their positions.\n        !*/\n\n        template <\n            typename image_array_type\n            >\n        const trained_function_type train (\n            const image_array_type& images,\n            const std::vector<std::vector<rectangle> >& truth_object_detections\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(images, truth_object_detections) == true\n                - it must be valid to pass images[0] into the image_scanner_type::load() method.\n                  (also, image_array_type must be an implementation of dlib/array/array_kernel_abstract.h)\n                - get_scanner().get_num_movable_components_per_detection_template() == 0\n            ensures\n                - This function is identical to the above train(), except that it converts \n                  each element of truth_object_detections into a full_object_detection by \n                  passing it to full_object_detection's constructor taking only a rectangle.\n                  Therefore, this version of train() is a convenience function for for the \n                  case where you don't have any movable components of the detection templates.\n        !*/\n\n        template <\n            typename image_array_type\n            >\n        const trained_function_type train (\n            const image_array_type& images,\n            const std::vector<std::vector<full_object_detection> >& truth_object_detections,\n            const std::vector<std::vector<rectangle> >& ignore,\n            const test_box_overlap& ignore_overlap_tester = test_box_overlap()\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(images, truth_object_detections) == true\n                - it must be valid to pass images[0] into the image_scanner_type::load() method.\n                  (also, image_array_type must be an implementation of dlib/array/array_kernel_abstract.h)\n                - ignore.size() == images.size()\n                - for all valid i, j:\n                    - truth_object_detections[i][j].num_parts() == get_scanner().get_num_movable_components_per_detection_template() \n                    - all_parts_in_rect(truth_object_detections[i][j]) == true\n            ensures\n                - Uses the structural_svm_object_detection_problem to train an object_detector \n                  on the given images and truth_object_detections.  \n                - for all valid i:\n                    - Within images[i] any detections that match against a rectangle in\n                      ignore[i], according to ignore_overlap_tester, are ignored.  That is,\n                      the optimizer doesn't care if the detector outputs a detection that\n                      matches any of the ignore rectangles or if it fails to output a\n                      detection for an ignore rectangle.  Therefore, if there are objects\n                      in your dataset that you are unsure if you want to detect or otherwise\n                      don't care if the detector gets or doesn't then you can mark them\n                      with ignore rectangles and the optimizer will simply ignore them. \n                - returns a function F with the following properties:\n                    - F(new_image) == A prediction of what objects are present in new_image.  This\n                      is a set of rectangles indicating their positions.\n        !*/\n\n        template <\n            typename image_array_type\n            >\n        const trained_function_type train (\n            const image_array_type& images,\n            const std::vector<std::vector<rectangle> >& truth_object_detections,\n            const std::vector<std::vector<rectangle> >& ignore,\n            const test_box_overlap& ignore_overlap_tester = test_box_overlap()\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(images, truth_object_detections) == true\n                - ignore.size() == images.size()\n                - it must be valid to pass images[0] into the image_scanner_type::load() method.\n                  (also, image_array_type must be an implementation of dlib/array/array_kernel_abstract.h)\n                - get_scanner().get_num_movable_components_per_detection_template() == 0\n            ensures\n                - This function is identical to the above train(), except that it converts \n                  each element of truth_object_detections into a full_object_detection by \n                  passing it to full_object_detection's constructor taking only a rectangle.\n                  Therefore, this version of train() is a convenience function for for the \n                  case where you don't have any movable components of the detection templates.\n        !*/\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_OBJECT_DETECTION_TRAiNER_H_ABSTRACTh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_sequence_labeling_trainer.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_SEQUENCE_LABELING_TRAiNER_Hh_\n#define DLIB_STRUCTURAL_SEQUENCE_LABELING_TRAiNER_Hh_\n\n#include \"structural_sequence_labeling_trainer_abstract.h\"\n#include \"../algs.h\"\n#include \"../optimization.h\"\n#include \"structural_svm_sequence_labeling_problem.h\"\n#include \"num_nonnegative_weights.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class structural_sequence_labeling_trainer\n    {\n    public:\n        typedef typename feature_extractor::sequence_type sample_sequence_type;\n        typedef std::vector<unsigned long> labeled_sequence_type;\n\n        typedef sequence_labeler<feature_extractor> trained_function_type;\n\n        explicit structural_sequence_labeling_trainer (\n            const feature_extractor& fe_\n        ) : fe(fe_)\n        {\n            set_defaults();\n        }\n\n        structural_sequence_labeling_trainer (\n        )\n        {\n            set_defaults();\n        }\n\n        const feature_extractor& get_feature_extractor (\n        ) const { return fe; }\n\n        unsigned long num_labels (\n        ) const { return fe.num_labels(); }\n\n        void set_num_threads (\n            unsigned long num\n        )\n        {\n            num_threads = num;\n        }\n\n        unsigned long get_num_threads (\n        ) const\n        {\n            return num_threads;\n        }\n\n        void set_epsilon (\n            double eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void structural_sequence_labeling_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        double get_epsilon (\n        ) const { return eps; }\n\n        void set_max_cache_size (\n            unsigned long max_size\n        )\n        {\n            max_cache_size = max_size;\n        }\n\n        unsigned long get_max_cache_size (\n        ) const\n        {\n            return max_cache_size; \n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            solver = item;\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return solver;\n        }\n\n        void set_c (\n            double C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void structural_sequence_labeling_trainer::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        double get_c (\n        ) const\n        {\n            return C;\n        }\n\n        double get_loss (\n            unsigned long label\n        ) const \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(label < num_labels(),\n                        \"\\t void structural_sequence_labeling_trainer::get_loss()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t label:        \" << label \n                        << \"\\n\\t num_labels(): \" << num_labels() \n                        << \"\\n\\t this:         \" << this\n                        );\n\n            return loss_values[label]; \n        }\n\n        void set_loss (\n            unsigned long label,\n            double value\n        )  \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(label < num_labels() && value >= 0,\n                        \"\\t void structural_sequence_labeling_trainer::set_loss()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t label:        \" << label \n                        << \"\\n\\t num_labels(): \" << num_labels() \n                        << \"\\n\\t value:        \" << value \n                        << \"\\n\\t this:         \" << this\n                        );\n\n            loss_values[label] = value;\n        }\n\n\n        const sequence_labeler<feature_extractor> train(\n            const std::vector<sample_sequence_type>& x,\n            const std::vector<labeled_sequence_type>& y\n        ) const\n        {\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_sequence_labeling_problem(x,y) == true &&\n                        contains_invalid_labeling(get_feature_extractor(), x, y) == false,\n                        \"\\t sequence_labeler structural_sequence_labeling_trainer::train(x,y)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t x.size(): \" << x.size() \n                        << \"\\n\\t is_sequence_labeling_problem(x,y): \" << is_sequence_labeling_problem(x,y)\n                        << \"\\n\\t contains_invalid_labeling(get_feature_extractor(),x,y): \" << contains_invalid_labeling(get_feature_extractor(),x,y)\n                        << \"\\n\\t this: \" << this\n            );\n\n#ifdef ENABLE_ASSERTS\n            for (unsigned long i = 0; i < y.size(); ++i)\n            {\n                for (unsigned long j = 0; j < y[i].size(); ++j)\n                {\n                    // make sure requires clause is not broken\n                    DLIB_ASSERT(y[i][j] < num_labels(),\n                                \"\\t sequence_labeler structural_sequence_labeling_trainer::train(x,y)\"\n                                << \"\\n\\t The given labels in y are invalid.\"\n                                << \"\\n\\t y[i][j]: \" << y[i][j] \n                                << \"\\n\\t num_labels(): \" << num_labels()\n                                << \"\\n\\t i: \" << i \n                                << \"\\n\\t j: \" << j \n                                << \"\\n\\t this: \" << this\n                    );\n                }\n            }\n#endif\n\n\n\n\n            structural_svm_sequence_labeling_problem<feature_extractor> prob(x, y, fe, num_threads);\n            matrix<double,0,1> weights; \n            if (verbose)\n                prob.be_verbose();\n\n            prob.set_epsilon(eps);\n            prob.set_c(C);\n            prob.set_max_cache_size(max_cache_size);\n            for (unsigned long i = 0; i < loss_values.size(); ++i)\n                prob.set_loss(i,loss_values[i]);\n\n            solver(prob, weights, num_nonnegative_weights(fe));\n\n            return sequence_labeler<feature_extractor>(weights,fe);\n        }\n\n    private:\n\n        double C;\n        oca solver;\n        double eps;\n        bool verbose;\n        unsigned long num_threads;\n        unsigned long max_cache_size;\n        std::vector<double> loss_values;\n\n        void set_defaults ()\n        {\n            C = 100;\n            verbose = false;\n            eps = 0.1;\n            num_threads = 2;\n            max_cache_size = 5;\n            loss_values.assign(num_labels(), 1);\n        }\n\n        feature_extractor fe;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SEQUENCE_LABELING_TRAiNER_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_sequence_labeling_trainer_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_SEQUENCE_LABELING_TRAiNER_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_SEQUENCE_LABELING_TRAiNER_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"../optimization.h\"\n#include \"structural_svm_sequence_labeling_problem_abstract.h\"\n#include \"sequence_labeler_abstract.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class structural_sequence_labeling_trainer\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor\n                It must be an object that implements an interface compatible with \n                the example_feature_extractor defined in dlib/svm/sequence_labeler_abstract.h.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning to do sequence labeling based\n                on a set of training data.  The training procedure produces a\n                sequence_labeler object which can be used to predict the labels of\n                new data sequences.\n\n                Note that this is just a convenience wrapper around the \n                structural_svm_sequence_labeling_problem to make it look \n                similar to all the other trainers in dlib.  \n        !*/\n\n    public:\n        typedef typename feature_extractor::sequence_type sample_sequence_type;\n        typedef std::vector<unsigned long> labeled_sequence_type;\n        typedef sequence_labeler<feature_extractor> trained_function_type;\n\n        structural_sequence_labeling_trainer (\n        );\n        /*!\n            ensures\n                - #get_c() == 100\n                - this object isn't verbose\n                - #get_epsilon() == 0.1\n                - #get_num_threads() == 2\n                - #get_max_cache_size() == 5\n                - #get_feature_extractor() == a default initialized feature_extractor\n        !*/\n\n        explicit structural_sequence_labeling_trainer (\n            const feature_extractor& fe\n        );\n        /*!\n            ensures\n                - #get_c() == 100\n                - this object isn't verbose\n                - #get_epsilon() == 0.1\n                - #get_num_threads() == 2\n                - #get_max_cache_size() == 5\n                - #get_feature_extractor() == fe \n        !*/\n\n        const feature_extractor& get_feature_extractor (\n        ) const;\n        /*!\n            ensures\n                - returns the feature extractor used by this object\n        !*/\n\n        unsigned long num_labels (\n        ) const; \n        /*!\n            ensures\n                - returns get_feature_extractor().num_labels()\n                  (i.e. returns the number of possible output labels for each \n                  element of a sequence)\n        !*/\n\n        void set_num_threads (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #get_num_threads() == num\n        !*/\n\n        unsigned long get_num_threads (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads used during training.  You should \n                  usually set this equal to the number of processing cores on your\n                  machine.\n        !*/\n\n        void set_epsilon (\n            double eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps\n        !*/\n\n        const double get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer \n                  to train.  You can think of this epsilon value as saying \"solve the \n                  optimization problem until the average number of labeling mistakes per \n                  training sample is within epsilon of its optimal value\".\n        !*/\n\n        void set_max_cache_size (\n            unsigned long max_size\n        );\n        /*!\n            ensures\n                - #get_max_cache_size() == max_size\n        !*/\n\n        unsigned long get_max_cache_size (\n        ) const;\n        /*!\n            ensures\n                - During training, this object basically runs the sequence_labeler on \n                  each training sample, over and over.  To speed this up, it is possible to \n                  cache the results of these labeler invocations.  This function returns the \n                  number of cache elements per training sample kept in the cache.  Note \n                  that a value of 0 means caching is not used at all.  \n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the structural SVM problem.  \n        !*/\n\n        void set_c (\n            double C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() = C\n        !*/\n\n        double get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter \n                  that determines the trade-off between trying to fit the training \n                  data (i.e. minimize the loss) or allowing more errors but hopefully \n                  improving the generalization of the resulting sequence labeler.  Larger \n                  values encourage exact fitting while smaller values of C may encourage \n                  better generalization. \n        !*/\n\n        double get_loss (\n            unsigned long label\n        ) const;\n        /*!\n            requires\n                - label < num_labels()\n            ensures\n                - returns the loss incurred when a sequence element with the given\n                  label is misclassified.  This value controls how much we care about\n                  correctly classifying this type of label.  Larger loss values indicate\n                  that we care more strongly than smaller values.\n        !*/\n\n        void set_loss (\n            unsigned long label,\n            double value\n        );\n        /*!\n            requires\n                - label < num_labels()\n                - value >= 0\n            ensures\n                - #get_loss(label) == value\n        !*/\n\n        const sequence_labeler<feature_extractor> train(\n            const std::vector<sample_sequence_type>& x,\n            const std::vector<labeled_sequence_type>& y\n        ) const;\n        /*!\n            requires\n                - is_sequence_labeling_problem(x, y) == true\n                - contains_invalid_labeling(get_feature_extractor(), x, y) == false\n                - for all valid i and j: y[i][j] < num_labels()\n            ensures\n                - Uses the structural_svm_sequence_labeling_problem to train a \n                  sequence_labeler on the given x/y training pairs.  The idea is \n                  to learn to predict a y given an input x.\n                - returns a function F with the following properties:\n                    - F(new_x) == A sequence of predicted labels for the elements of new_x.  \n                    - F(new_x).size() == new_x.size()\n                    - for all valid i:\n                        - F(new_x)[i] == the predicted label of new_x[i]\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SEQUENCE_LABELING_TRAiNER_ABSTRACT_Hh_\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_sequence_segmentation_trainer.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_SEQUENCE_sEGMENTATION_TRAINER_Hh_\n#define DLIB_STRUCTURAL_SEQUENCE_sEGMENTATION_TRAINER_Hh_\n\n#include \"structural_sequence_segmentation_trainer_abstract.h\"\n#include \"structural_sequence_labeling_trainer.h\"\n#include \"sequence_segmenter.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class structural_sequence_segmentation_trainer\n    {\n    public:\n        typedef typename feature_extractor::sequence_type sample_sequence_type;\n        typedef std::vector<std::pair<unsigned long, unsigned long> > segmented_sequence_type;\n\n        typedef sequence_segmenter<feature_extractor> trained_function_type;\n\n        explicit structural_sequence_segmentation_trainer (\n            const feature_extractor& fe_\n        ) : trainer(impl_ss::feature_extractor<feature_extractor>(fe_))\n        {\n            loss_per_missed_segment = 1;\n            loss_per_false_alarm = 1;\n        }\n\n        structural_sequence_segmentation_trainer (\n        )\n        {\n            loss_per_missed_segment = 1;\n            loss_per_false_alarm = 1;\n        }\n\n        const feature_extractor& get_feature_extractor (\n        ) const { return trainer.get_feature_extractor().fe; }\n\n        void set_num_threads (\n            unsigned long num\n        )\n        {\n            trainer.set_num_threads(num);\n        }\n\n        unsigned long get_num_threads (\n        ) const\n        {\n            return trainer.get_num_threads();\n        }\n\n        void set_epsilon (\n            double eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void structural_sequence_segmentation_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            trainer.set_epsilon(eps_);\n        }\n\n        double get_epsilon (\n        ) const { return trainer.get_epsilon(); }\n\n        void set_max_cache_size (\n            unsigned long max_size\n        )\n        {\n            trainer.set_max_cache_size(max_size);\n        }\n\n        unsigned long get_max_cache_size (\n        ) const\n        {\n            return trainer.get_max_cache_size();\n        }\n\n        void be_verbose (\n        )\n        {\n            trainer.be_verbose();\n        }\n\n        void be_quiet (\n        )\n        {\n            trainer.be_quiet();\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            trainer.set_oca(item);\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return trainer.get_oca();\n        }\n\n        void set_c (\n            double C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void structural_sequence_segmentation_trainer::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            trainer.set_c(C_);\n        }\n\n        double get_c (\n        ) const\n        {\n            return trainer.get_c();\n        }\n\n        void set_loss_per_missed_segment (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss >= 0,\n                        \"\\t void structural_sequence_segmentation_trainer::set_loss_per_missed_segment(loss)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t loss: \" << loss\n                        << \"\\n\\t this: \" << this\n            );\n\n            loss_per_missed_segment = loss;\n\n            if (feature_extractor::use_BIO_model)\n            {\n                trainer.set_loss(impl_ss::BEGIN,  loss_per_missed_segment);\n                trainer.set_loss(impl_ss::INSIDE, loss_per_missed_segment);\n            }\n            else\n            {\n                trainer.set_loss(impl_ss::BEGIN,  loss_per_missed_segment);\n                trainer.set_loss(impl_ss::INSIDE, loss_per_missed_segment);\n                trainer.set_loss(impl_ss::LAST,   loss_per_missed_segment);\n                trainer.set_loss(impl_ss::UNIT,   loss_per_missed_segment);\n            }\n        }\n\n        double get_loss_per_missed_segment (\n        ) const\n        {\n            return loss_per_missed_segment;\n        }\n\n        void set_loss_per_false_alarm (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss >= 0,\n                        \"\\t void structural_sequence_segmentation_trainer::set_loss_per_false_alarm(loss)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t loss: \" << loss\n                        << \"\\n\\t this: \" << this\n            );\n\n            loss_per_false_alarm = loss;\n\n            trainer.set_loss(impl_ss::OUTSIDE,  loss_per_false_alarm);\n        }\n\n        double get_loss_per_false_alarm (\n        ) const\n        {\n            return loss_per_false_alarm;\n        }\n\n        const sequence_segmenter<feature_extractor> train(\n            const std::vector<sample_sequence_type>& x,\n            const std::vector<segmented_sequence_type>& y\n        ) const\n        {\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_sequence_segmentation_problem(x,y) == true,\n                        \"\\t sequence_segmenter structural_sequence_segmentation_trainer::train(x,y)\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t x.size(): \" << x.size() \n                        << \"\\n\\t is_sequence_segmentation_problem(x,y): \" << is_sequence_segmentation_problem(x,y)\n                        << \"\\n\\t this: \" << this\n            );\n\n            std::vector<std::vector<unsigned long> > labels(y.size());\n            if (feature_extractor::use_BIO_model)\n            {\n                // convert y into tagged BIO labels\n                for (unsigned long i = 0; i < labels.size(); ++i)\n                {\n                    labels[i].resize(x[i].size(), impl_ss::OUTSIDE);\n                    for (unsigned long j = 0; j < y[i].size(); ++j)\n                    {\n                        const unsigned long begin = y[i][j].first;\n                        const unsigned long end = y[i][j].second;\n                        if (begin != end)\n                        {\n                            labels[i][begin] = impl_ss::BEGIN;\n                            for (unsigned long k = begin+1; k < end; ++k)\n                                labels[i][k] = impl_ss::INSIDE;\n                        }\n                    }\n                }\n            }\n            else\n            {\n                // convert y into tagged BILOU labels\n                for (unsigned long i = 0; i < labels.size(); ++i)\n                {\n                    labels[i].resize(x[i].size(), impl_ss::OUTSIDE);\n                    for (unsigned long j = 0; j < y[i].size(); ++j)\n                    {\n                        const unsigned long begin = y[i][j].first;\n                        const unsigned long end = y[i][j].second;\n                        if (begin != end)\n                        {\n                            if (begin+1==end)\n                            {\n                                labels[i][begin] = impl_ss::UNIT;\n                            }\n                            else\n                            {\n                                labels[i][begin] = impl_ss::BEGIN;\n                                for (unsigned long k = begin+1; k+1 < end; ++k)\n                                    labels[i][k] = impl_ss::INSIDE;\n                                labels[i][end-1] = impl_ss::LAST;\n                            }\n                        }\n                    }\n                }\n            }\n\n            sequence_labeler<impl_ss::feature_extractor<feature_extractor> > temp;\n            temp = trainer.train(x, labels);\n            return sequence_segmenter<feature_extractor>(temp.get_weights(), trainer.get_feature_extractor().fe);\n        }\n\n    private:\n\n        structural_sequence_labeling_trainer<impl_ss::feature_extractor<feature_extractor> > trainer;\n        double loss_per_missed_segment;\n        double loss_per_false_alarm;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SEQUENCE_sEGMENTATION_TRAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_sequence_segmentation_trainer_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_SEQUENCE_sEGMENTATION_TRAINER_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_SEQUENCE_sEGMENTATION_TRAINER_ABSTRACT_Hh_\n\n#include \"sequence_segmenter_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class structural_sequence_segmentation_trainer\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor\n                It must be an object that implements an interface compatible with \n                the example_feature_extractor defined in dlib/svm/sequence_segmenter_abstract.h.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning to do sequence segmentation based on a\n                set of training data.  The training procedure produces a sequence_segmenter\n                object which can be used to identify the sub-segments of new data\n                sequences.\n\n                This object internally uses the structural_sequence_labeling_trainer to\n                solve the learning problem.  \n        !*/\n\n    public:\n\n        typedef typename feature_extractor::sequence_type sample_sequence_type;\n        typedef std::vector<std::pair<unsigned long, unsigned long> > segmented_sequence_type;\n\n        typedef sequence_segmenter<feature_extractor> trained_function_type;\n\n        structural_sequence_segmentation_trainer (\n        );\n        /*!\n            ensures\n                - #get_c() == 100\n                - this object isn't verbose\n                - #get_epsilon() == 0.1\n                - #get_num_threads() == 2\n                - #get_max_cache_size() == 40\n                - #get_feature_extractor() == a default initialized feature_extractor\n                - #get_loss_per_missed_segment() == 1\n                - #get_loss_per_false_alarm() == 1\n        !*/\n\n        explicit structural_sequence_segmentation_trainer (\n            const feature_extractor& fe\n        );\n        /*!\n            ensures\n                - #get_c() == 100\n                - this object isn't verbose\n                - #get_epsilon() == 0.1\n                - #get_num_threads() == 2\n                - #get_max_cache_size() == 40\n                - #get_feature_extractor() == fe \n                - #get_loss_per_missed_segment() == 1\n                - #get_loss_per_false_alarm() == 1\n        !*/\n\n        const feature_extractor& get_feature_extractor (\n        ) const;\n        /*!\n            ensures\n                - returns the feature extractor used by this object\n        !*/\n\n        void set_num_threads (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #get_num_threads() == num\n        !*/\n\n        unsigned long get_num_threads (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads used during training.  You should \n                  usually set this equal to the number of processing cores on your\n                  machine.\n        !*/\n\n        void set_epsilon (\n            double eps_\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps\n        !*/\n\n        double get_epsilon (\n        ) const; \n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer \n                  to train.  You can think of this epsilon value as saying \"solve the \n                  optimization problem until the average number of segmentation mistakes\n                  per training sample is within epsilon of its optimal value\".\n        !*/\n\n        void set_max_cache_size (\n            unsigned long max_size\n        );\n        /*!\n            ensures\n                - #get_max_cache_size() == max_size\n        !*/\n\n        unsigned long get_max_cache_size (\n        ) const;\n        /*!\n            ensures\n                - During training, this object basically runs the sequence_segmenter on\n                  each training sample, over and over.  To speed this up, it is possible to\n                  cache the results of these segmenter invocations.  This function returns\n                  the number of cache elements per training sample kept in the cache.  Note\n                  that a value of 0 means caching is not used at all.  \n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a user can\n                  observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the structural SVM problem.  \n        !*/\n\n        void set_c (\n            double C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() = C\n        !*/\n\n        double get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter that\n                  determines the trade-off between trying to fit the training data (i.e.\n                  minimize the loss) or allowing more errors but hopefully improving the\n                  generalization of the resulting sequence labeler.  Larger values\n                  encourage exact fitting while smaller values of C may encourage better\n                  generalization. \n        !*/\n\n        void set_loss_per_missed_segment (\n            double loss\n        );\n        /*!\n            requires\n                - loss >= 0\n            ensures\n                - #get_loss_per_missed_segment() == loss\n        !*/\n\n        double get_loss_per_missed_segment (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss incurred for failing to detect a segment.  The\n                  larger the loss the more important it is to detect all the segments.\n        !*/\n\n\n        void set_loss_per_false_alarm (\n            double loss\n        );\n        /*!\n            requires\n                - loss >= 0\n            ensures\n                - #get_loss_per_false_alarm() == loss\n        !*/\n\n        double get_loss_per_false_alarm (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss incurred for outputting a false detection. The\n                  larger the loss the more important it is to avoid outputting false\n                  detections.\n        !*/\n\n        const sequence_segmenter<feature_extractor> train(\n            const std::vector<sample_sequence_type>& x,\n            const std::vector<segmented_sequence_type>& y\n        ) const;\n        /*!\n            requires\n                - is_sequence_segmentation_problem(x, y) == true\n            ensures\n                - Uses the given training data to learn to do sequence segmentation.  That\n                  is, this function will try to find a sequence_segmenter capable of\n                  predicting y[i] when given x[i] as input.  Moreover, it should also be\n                  capable of predicting the segmentation of new input sequences.  Or in\n                  other words, the learned sequence_segmenter should also generalize to new\n                  data outside the training dataset.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SEQUENCE_sEGMENTATION_TRAINER_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_assignment_problem.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_SVM_ASSiGNMENT_PROBLEM_Hh_\n#define DLIB_STRUCTURAL_SVM_ASSiGNMENT_PROBLEM_Hh_\n\n\n#include \"structural_svm_assignment_problem_abstract.h\"\n#include \"../matrix.h\"\n#include <vector>\n#include <iterator>\n#include \"structural_svm_problem_threaded.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    template <long n, typename T>\n    struct column_matrix_static_resize\n    {\n        typedef T type;\n    };\n\n    template <long n, typename T, long NR, long NC, typename MM, typename L>\n    struct column_matrix_static_resize<n, matrix<T,NR,NC,MM,L> >\n    {\n        typedef matrix<T,NR+n,NC,MM,L> type;\n    };\n\n    template <long n, typename T, long NC, typename MM, typename L>\n    struct column_matrix_static_resize<n, matrix<T,0,NC,MM,L> >\n    {\n        typedef matrix<T,0,NC,MM,L> type;\n    };\n\n    template <typename T>\n    struct add_one_to_static_feat_size\n    {\n        typedef typename column_matrix_static_resize<1,typename T::feature_vector_type>::type type;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class structural_svm_assignment_problem : noncopyable,\n        public structural_svm_problem_threaded<matrix<double,0,1>, typename add_one_to_static_feat_size<feature_extractor>::type >\n    {\n    public:\n        typedef matrix<double,0,1> matrix_type;\n        typedef typename add_one_to_static_feat_size<feature_extractor>::type feature_vector_type;\n\n        typedef typename feature_extractor::lhs_element lhs_element;\n        typedef typename feature_extractor::rhs_element rhs_element;\n\n\n        typedef std::pair<std::vector<lhs_element>, std::vector<rhs_element> > sample_type;\n\n        typedef std::vector<long> label_type;\n\n        structural_svm_assignment_problem(\n            const std::vector<sample_type>& samples_,\n            const std::vector<label_type>& labels_,\n            const feature_extractor& fe_,\n            bool force_assignment_,\n            unsigned long num_threads,\n            const double loss_per_false_association_,\n            const double loss_per_missed_association_\n        ) :\n            structural_svm_problem_threaded<matrix_type,feature_vector_type>(num_threads),\n            samples(samples_),\n            labels(labels_),\n            fe(fe_),\n            force_assignment(force_assignment_),\n            loss_per_false_association(loss_per_false_association_),\n            loss_per_missed_association(loss_per_missed_association_)\n        {\n            // make sure requires clause is not broken\n#ifdef ENABLE_ASSERTS\n            DLIB_ASSERT(loss_per_false_association > 0 && loss_per_missed_association > 0,\n                \"\\t structural_svm_assignment_problem::structural_svm_assignment_problem()\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t loss_per_false_association:  \" << loss_per_false_association\n                << \"\\n\\t loss_per_missed_association: \" << loss_per_missed_association\n                << \"\\n\\t this: \" << this\n            );\n            if (force_assignment)\n            {\n                DLIB_ASSERT(is_forced_assignment_problem(samples, labels),\n                            \"\\t structural_svm_assignment_problem::structural_svm_assignment_problem()\"\n                            << \"\\n\\t invalid inputs were given to this function\"\n                            << \"\\n\\t is_forced_assignment_problem(samples,labels): \" << is_forced_assignment_problem(samples,labels)\n                            << \"\\n\\t is_assignment_problem(samples,labels):        \" << is_assignment_problem(samples,labels)\n                            << \"\\n\\t is_learning_problem(samples,labels):          \" << is_learning_problem(samples,labels)\n                            << \"\\n\\t this: \" << this\n                            );\n            }\n            else\n            {\n                DLIB_ASSERT(is_assignment_problem(samples, labels),\n                            \"\\t structural_svm_assignment_problem::structural_svm_assignment_problem()\"\n                            << \"\\n\\t invalid inputs were given to this function\"\n                            << \"\\n\\t is_assignment_problem(samples,labels): \" << is_assignment_problem(samples,labels)\n                            << \"\\n\\t is_learning_problem(samples,labels):   \" << is_learning_problem(samples,labels)\n                            << \"\\n\\t this: \" << this\n                            );\n            }\n#endif\n\n        }\n\n    private:\n        virtual long get_num_dimensions (\n        ) const \n        {\n            return fe.num_features()+1; // +1 for the bias term\n        }\n\n        virtual long get_num_samples (\n        ) const \n        {\n            return samples.size();\n        }\n\n        template <typename psi_type>\n        typename enable_if<is_matrix<psi_type> >::type get_joint_feature_vector (\n            const sample_type& sample, \n            const label_type& label,\n            psi_type& psi\n        ) const \n        {\n            typename feature_extractor::feature_vector_type feats;\n            psi.set_size(get_num_dimensions());\n            psi = 0;\n            for (unsigned long i = 0; i < sample.first.size(); ++i)\n            {\n                if (label[i] != -1)\n                {\n                    fe.get_features(sample.first[i], sample.second[label[i]], feats);\n                    set_rowm(psi,range(0,feats.size()-1)) += feats;\n                    psi(get_num_dimensions()-1) += 1;\n                }\n            }\n        }\n\n        template <typename T>\n        void append_to_sparse_vect (\n            T& psi,\n            const T& vect\n        ) const\n        {\n            std::copy(vect.begin(), vect.end(), std::back_inserter(psi));\n        }\n\n        template <typename psi_type>\n        typename disable_if<is_matrix<psi_type> >::type get_joint_feature_vector (\n            const sample_type& sample, \n            const label_type& label,\n            psi_type& psi\n        ) const \n        {\n            psi.clear();\n            feature_vector_type feats;\n            int num_assignments = 0;\n            for (unsigned long i = 0; i < sample.first.size(); ++i)\n            {\n                if (label[i] != -1)\n                {\n                    fe.get_features(sample.first[i], sample.second[label[i]], feats);\n                    append_to_sparse_vect(psi, feats);\n                    ++num_assignments;\n                }\n            }\n            psi.push_back(std::make_pair(get_num_dimensions()-1,num_assignments));\n        }\n\n        virtual void get_truth_joint_feature_vector (\n            long idx,\n            feature_vector_type& psi \n        ) const \n        {\n            get_joint_feature_vector(samples[idx], labels[idx], psi);\n        }\n\n        virtual void separation_oracle (\n            const long idx,\n            const matrix_type& current_solution,\n            double& loss,\n            feature_vector_type& psi\n        ) const\n        {\n            matrix<double> cost;\n            unsigned long size;\n            if (force_assignment)\n            {\n                unsigned long lhs_size = samples[idx].first.size();\n                unsigned long rhs_size = samples[idx].second.size();\n                size = std::max(lhs_size, rhs_size);\n            }\n            else\n            {\n                unsigned long rhs_size = samples[idx].second.size() + samples[idx].first.size();\n                size = rhs_size;\n            }\n            cost.set_size(size, size);\n\n            typename feature_extractor::feature_vector_type feats;\n\n            // now fill out the cost assignment matrix\n            for (long r = 0; r < cost.nr(); ++r)\n            {\n                for (long c = 0; c < cost.nc(); ++c)\n                {\n                    if (r < (long)samples[idx].first.size())\n                    {\n                        if (c < (long)samples[idx].second.size())\n                        {\n                            fe.get_features(samples[idx].first[r], samples[idx].second[c], feats);\n                            const double bias = current_solution(current_solution.size()-1);\n                            cost(r,c) = dot(colm(current_solution,0,current_solution.size()-1), feats) + bias;\n\n                            // add in the loss since this corresponds to an incorrect prediction.\n                            if (c != labels[idx][r])\n                            {\n                                cost(r,c) += loss_per_false_association;\n                            }\n                        }\n                        else\n                        {\n                            if (labels[idx][r] == -1)\n                                cost(r,c) = 0;\n                            else\n                                cost(r,c) = loss_per_missed_association; \n                        }\n\n                    }\n                    else\n                    {\n                        cost(r,c) = 0;\n                    }\n                }\n            }\n\n            std::vector<long> assignment;\n\n            if (cost.size() != 0)\n            {\n                // max_cost_assignment() only works with integer matrices, so convert from\n                // double to integer.\n                const double scale = (std::numeric_limits<dlib::int64>::max()/1000)/max(abs(cost));\n                matrix<dlib::int64> int_cost = matrix_cast<dlib::int64>(round(cost*scale));\n                assignment = max_cost_assignment(int_cost);\n                assignment.resize(samples[idx].first.size());\n            }\n\n            loss = 0;\n            // adjust assignment so that non-assignments have a value of -1. Also compute loss.\n            for (unsigned long i = 0; i < assignment.size(); ++i)\n            {\n                if (assignment[i] >= (long)samples[idx].second.size())\n                    assignment[i] = -1;\n\n                if (assignment[i] != labels[idx][i])\n                {\n                    if (assignment[i] == -1)\n                        loss += loss_per_missed_association;\n                    else\n                        loss += loss_per_false_association;\n                }\n            }\n\n            get_joint_feature_vector(samples[idx], assignment, psi);\n        }\n\n        const std::vector<sample_type>& samples;\n        const std::vector<label_type>& labels;\n        const feature_extractor& fe;\n        bool force_assignment;\n        const double loss_per_false_association;\n        const double loss_per_missed_association;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_ASSiGNMENT_PROBLEM_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_assignment_problem_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_SVM_ASSiGNMENT_PROBLEM_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_SVM_ASSiGNMENT_PROBLEM_ABSTRACT_Hh_\n\n\n#include \"../matrix.h\"\n#include <vector>\n#include \"structural_svm_problem_threaded_abstract.h\"\n#include \"assignment_function_abstract.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    template <\n        typename feature_extractor\n        >\n    class structural_svm_assignment_problem : noncopyable,\n                                              public structural_svm_problem_threaded<matrix<double,0,1>, \n                                                     typename feature_extractor::feature_vector_type >\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor\n                It must be an object that implements an interface compatible with \n                the example_feature_extractor defined in dlib/svm/assignment_function_abstract.h.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning the parameters needed to use an\n                assignment_function object.  It learns the parameters by formulating the\n                problem as a structural SVM problem.  \n        !*/\n\n    public:\n        typedef matrix<double,0,1> matrix_type;\n        typedef typename feature_extractor::feature_vector_type feature_vector_type;\n        typedef typename feature_extractor::lhs_element lhs_element;\n        typedef typename feature_extractor::rhs_element rhs_element;\n        typedef std::pair<std::vector<lhs_element>, std::vector<rhs_element> > sample_type;\n        typedef std::vector<long> label_type;\n\n        structural_svm_assignment_problem(\n            const std::vector<sample_type>& samples,\n            const std::vector<label_type>& labels,\n            const feature_extractor& fe,\n            bool force_assignment,\n            unsigned long num_threads,\n            const double loss_per_false_association,\n            const double loss_per_missed_association\n        );\n        /*!\n            requires\n                - loss_per_false_association > 0\n                - loss_per_missed_association > 0\n                - is_assignment_problem(samples,labels) == true\n                - if (force_assignment) then\n                    - is_forced_assignment_problem(samples,labels) == true\n            ensures\n                - This object attempts to learn a mapping from the given samples to the \n                  given labels.  In particular, it attempts to learn to predict labels[i] \n                  based on samples[i].  Or in other words, this object can be used to learn \n                  a parameter vector and bias, w and b, such that an assignment_function declared as:\n                    assignment_function<feature_extractor> assigner(w,b,fe,force_assignment)\n                  results in an assigner object which attempts to compute the following mapping:\n                    labels[i] == labeler(samples[i])\n                - This object will use num_threads threads during the optimization \n                  procedure.  You should set this parameter equal to the number of \n                  available processing cores on your machine.\n                - When solving the structural SVM problem, we will use\n                  loss_per_false_association as the loss for incorrectly associating\n                  objects that shouldn't be associated.\n                - When solving the structural SVM problem, we will use\n                  loss_per_missed_association as the loss for failing to associate to\n                  objects that are supposed to be associated with each other.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_ASSiGNMENT_PROBLEM_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_distributed.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_SVM_DISTRIBUTeD_Hh_\n#define DLIB_STRUCTURAL_SVM_DISTRIBUTeD_Hh_\n\n\n#include \"structural_svm_distributed_abstract.h\"\n#include \"structural_svm_problem.h\"\n#include \"../bridge.h\"\n#include \"../smart_pointers.h\"\n#include \"../misc_api.h\"\n#include \"../statistics.h\"\n\n\n#include \"../threads.h\"\n#include \"../pipe.h\"\n#include \"../type_safe_union.h\"\n#include <iostream>\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n\n        template <typename matrix_type>\n        struct oracle_response\n        {\n            typedef typename matrix_type::type scalar_type;\n\n            matrix_type subgradient;\n            scalar_type loss;\n            long num;\n\n            friend void swap (oracle_response& a, oracle_response& b)\n            {\n                a.subgradient.swap(b.subgradient);\n                std::swap(a.loss, b.loss);\n                std::swap(a.num, b.num);\n            }\n\n            friend void serialize (const oracle_response& item, std::ostream& out)\n            {\n                serialize(item.subgradient, out);\n                dlib::serialize(item.loss, out);\n                dlib::serialize(item.num, out);\n            }\n\n            friend void deserialize (oracle_response& item, std::istream& in)\n            {\n                deserialize(item.subgradient, in);\n                dlib::deserialize(item.loss, in);\n                dlib::deserialize(item.num, in);\n            }\n        };\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename matrix_type>\n        struct oracle_request\n        {\n            typedef typename matrix_type::type scalar_type;\n\n            matrix_type current_solution;\n            scalar_type saved_current_risk_gap;\n            bool skip_cache;\n            bool converged;\n\n            friend void swap (oracle_request& a, oracle_request& b)\n            {\n                a.current_solution.swap(b.current_solution);\n                std::swap(a.saved_current_risk_gap, b.saved_current_risk_gap);\n                std::swap(a.skip_cache, b.skip_cache);\n                std::swap(a.converged, b.converged);\n            }\n\n            friend void serialize (const oracle_request& item, std::ostream& out)\n            {\n                serialize(item.current_solution, out);\n                dlib::serialize(item.saved_current_risk_gap, out);\n                dlib::serialize(item.skip_cache, out);\n                dlib::serialize(item.converged, out);\n            }\n\n            friend void deserialize (oracle_request& item, std::istream& in)\n            {\n                deserialize(item.current_solution, in);\n                dlib::deserialize(item.saved_current_risk_gap, in);\n                dlib::deserialize(item.skip_cache, in);\n                dlib::deserialize(item.converged, in);\n            }\n        };\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class svm_struct_processing_node : noncopyable\n    {\n    public:\n\n        template <\n            typename T,\n            typename U \n            >\n        svm_struct_processing_node (\n            const structural_svm_problem<T,U>& problem,\n            unsigned short port,\n            unsigned short num_threads\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(port != 0 && problem.get_num_samples() != 0 &&\n                        problem.get_num_dimensions() != 0,\n                \"\\t svm_struct_processing_node()\"\n                << \"\\n\\t Invalid arguments were given to this function\"\n                << \"\\n\\t port: \" << port \n                << \"\\n\\t problem.get_num_samples():    \" << problem.get_num_samples() \n                << \"\\n\\t problem.get_num_dimensions(): \" << problem.get_num_dimensions() \n                << \"\\n\\t this: \" << this\n                );\n\n            the_problem.reset(new node_type<T,U>(problem, port, num_threads));\n        }\n\n    private:\n\n        struct base\n        {\n            virtual ~base(){}\n        };\n\n        template <\n            typename matrix_type,\n            typename feature_vector_type \n            >\n        class node_type : public base, threaded_object\n        {\n        public:\n            typedef typename matrix_type::type scalar_type;\n\n            node_type(\n                const structural_svm_problem<matrix_type,feature_vector_type>& prob,\n                unsigned short port,\n                unsigned long num_threads\n            ) : in(3),out(3), problem(prob), tp(num_threads)\n            {\n                b.reconfigure(listen_on_port(port), receive(in), transmit(out));\n\n                start();\n            }\n\n            ~node_type()\n            {\n                in.disable();\n                out.disable();\n                wait();\n            }\n\n        private:\n\n            void thread()\n            {\n                using namespace impl;\n                tsu_in msg; \n                tsu_out temp;\n\n                timestamper ts;\n                running_stats<double> with_buffer_time;\n                running_stats<double> without_buffer_time;\n                unsigned long num_iterations_executed = 0;\n\n                while (in.dequeue(msg))\n                {\n                    // initialize the cache and compute psi_true.\n                    if (cache.size() == 0)\n                    {\n                        cache.resize(problem.get_num_samples());\n                        for (unsigned long i = 0; i < cache.size(); ++i)\n                            cache[i].init(&problem,i);\n\n                        psi_true.set_size(problem.get_num_dimensions(),1);\n                        psi_true = 0;\n\n                        const unsigned long num = problem.get_num_samples();\n                        feature_vector_type ftemp;\n                        for (unsigned long i = 0; i < num; ++i)\n                        {\n                            cache[i].get_truth_joint_feature_vector_cached(ftemp);\n\n                            subtract_from(psi_true, ftemp);\n                        }\n                    }\n\n\n                    if (msg.template contains<bridge_status>() && \n                        msg.template get<bridge_status>().is_connected)\n                    {\n                        temp = problem.get_num_dimensions();\n                        out.enqueue(temp);\n\n                    }\n                    else if (msg.template contains<oracle_request<matrix_type> >())\n                    {\n                        ++num_iterations_executed;\n\n                        const oracle_request<matrix_type>& req = msg.template get<oracle_request<matrix_type> >();\n\n                        oracle_response<matrix_type>& data = temp.template get<oracle_response<matrix_type> >();\n\n                        data.subgradient = psi_true;\n                        data.loss = 0;\n\n                        data.num = problem.get_num_samples();\n\n                        const uint64 start_time = ts.get_timestamp();\n\n                        // pick fastest buffering strategy\n                        bool buffer_subgradients_locally = with_buffer_time.mean() < without_buffer_time.mean();\n\n                        // every 50 iterations we should try to flip the buffering scheme to see if\n                        // doing it the other way might be better.  \n                        if ((num_iterations_executed%50) == 0)\n                        {\n                            buffer_subgradients_locally = !buffer_subgradients_locally;\n                        }\n\n                        binder b(*this, req, data, buffer_subgradients_locally);\n                        parallel_for_blocked(tp, 0, data.num, b, &binder::call_oracle);\n\n                        const uint64 stop_time = ts.get_timestamp();\n                        if (buffer_subgradients_locally)\n                            with_buffer_time.add(stop_time-start_time);\n                        else\n                            without_buffer_time.add(stop_time-start_time);\n\n                        out.enqueue(temp);\n                    }\n                }\n            }\n\n            struct binder\n            {\n                binder (\n                    const node_type& self_,\n                    const impl::oracle_request<matrix_type>& req_,\n                    impl::oracle_response<matrix_type>& data_,\n                    bool buffer_subgradients_locally_\n                ) : self(self_), req(req_), data(data_),\n                    buffer_subgradients_locally(buffer_subgradients_locally_) {}\n\n                void call_oracle (\n                    long begin,\n                    long end\n                ) \n                {\n                    // If we are only going to call the separation oracle once then don't\n                    // run the slightly more complex for loop version of this code.  Or if\n                    // we just don't want to run the complex buffering one.  The code later\n                    // on decides if we should do the buffering based on how long it takes\n                    // to execute.  We do this because, when the subgradient is really high\n                    // dimensional it can take a lot of time to add them together.  So we\n                    // might want to avoid doing that.\n                    if (end-begin <= 1 || !buffer_subgradients_locally)\n                    {\n                        scalar_type loss;\n                        feature_vector_type ftemp;\n                        for (long i = begin; i < end; ++i)\n                        {\n                            self.cache[i].separation_oracle_cached(req.converged, \n                                                                   req.skip_cache, \n                                                                   req.saved_current_risk_gap,\n                                                                   req.current_solution,\n                                                                   loss,\n                                                                   ftemp);\n\n                            auto_mutex lock(self.accum_mutex);\n                            data.loss += loss;\n                            add_to(data.subgradient, ftemp);\n                        }\n                    }\n                    else\n                    {\n                        scalar_type loss = 0;\n                        matrix_type faccum(data.subgradient.size(),1);\n                        faccum = 0;\n\n                        feature_vector_type ftemp;\n\n                        for (long i = begin; i < end; ++i)\n                        {\n                            scalar_type loss_temp;\n                            self.cache[i].separation_oracle_cached(req.converged,\n                                                                   req.skip_cache, \n                                                                   req.saved_current_risk_gap,\n                                                                   req.current_solution,\n                                                                   loss_temp,\n                                                                   ftemp);\n                            loss += loss_temp;\n                            add_to(faccum, ftemp);\n                        }\n\n                        auto_mutex lock(self.accum_mutex);\n                        data.loss += loss;\n                        add_to(data.subgradient, faccum);\n                    }\n                }\n\n                const node_type& self;\n                const impl::oracle_request<matrix_type>& req;\n                impl::oracle_response<matrix_type>& data;\n                bool buffer_subgradients_locally;\n            };\n\n\n\n            typedef type_safe_union<impl::oracle_request<matrix_type>, bridge_status> tsu_in;\n            typedef type_safe_union<impl::oracle_response<matrix_type> , long> tsu_out;\n\n            pipe<tsu_in> in;\n            pipe<tsu_out> out;\n            bridge b;\n\n            mutable matrix_type psi_true;\n            const structural_svm_problem<matrix_type,feature_vector_type>& problem;\n            mutable std::vector<cache_element_structural_svm<structural_svm_problem<matrix_type,feature_vector_type> > > cache;\n\n            mutable thread_pool tp;\n            mutex accum_mutex;\n        };\n\n\n        scoped_ptr<base> the_problem;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class svm_struct_controller_node : noncopyable\n    {\n    public:\n\n        svm_struct_controller_node (\n        ) :\n            eps(0.001),\n            cache_based_eps(std::numeric_limits<double>::infinity()),\n            verbose(false),\n            C(1)\n        {}\n\n        double get_cache_based_epsilon (\n        ) const\n        {\n            return cache_based_eps;\n        }\n\n        void set_cache_based_epsilon (\n            double eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void svm_struct_controller_node::set_cache_based_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            cache_based_eps = eps_;\n        }\n\n        void set_epsilon (\n            double eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void svm_struct_controller_node::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        double get_epsilon (\n        ) const { return eps; }\n\n        void be_verbose (\n        ) \n        {\n            verbose = true;\n        }\n\n        void be_quiet(\n        )\n        {\n            verbose = false;\n        }\n\n        void add_nuclear_norm_regularizer (\n            long first_dimension,\n            long rows,\n            long cols,\n            double regularization_strength\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 <= first_dimension  &&\n                0 <= rows && 0 <= cols && \n                0 < regularization_strength,\n                \"\\t void svm_struct_controller_node::add_nuclear_norm_regularizer()\"\n                << \"\\n\\t Invalid arguments were given to this function.\"\n                << \"\\n\\t first_dimension:         \" << first_dimension \n                << \"\\n\\t rows:                    \" << rows \n                << \"\\n\\t cols:                    \" << cols \n                << \"\\n\\t regularization_strength: \" << regularization_strength \n                << \"\\n\\t this: \" << this\n                );\n\n            impl::nuclear_norm_regularizer temp;\n            temp.first_dimension = first_dimension;\n            temp.nr = rows;\n            temp.nc = cols;\n            temp.regularization_strength = regularization_strength;\n            nuclear_norm_regularizers.push_back(temp);\n        }\n\n        unsigned long num_nuclear_norm_regularizers (\n        ) const { return nuclear_norm_regularizers.size(); }\n\n        void clear_nuclear_norm_regularizers (\n        ) { nuclear_norm_regularizers.clear(); }\n\n\n        double get_c (\n        ) const { return C; }\n\n        void set_c (\n            double C_\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void svm_struct_controller_node::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_; \n        }\n\n        void add_processing_node (\n            const network_address& addr\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(addr.port != 0,\n                \"\\t void svm_struct_controller_node::add_processing_node()\"\n                << \"\\n\\t Invalid inputs were given to this function\"\n                << \"\\n\\t addr.host_address:   \" << addr.host_address \n                << \"\\n\\t addr.port: \" << addr.port\n                << \"\\n\\t this: \" << this\n                );\n\n            // check if this address is already registered\n            for (unsigned long i = 0; i < nodes.size(); ++i)\n            {\n                if (nodes[i] == addr)\n                {\n                    return;\n                }\n            }\n            \n            nodes.push_back(addr);\n        }\n\n        void add_processing_node (\n            const std::string& ip_or_hostname,\n            unsigned short port\n        )\n        {\n            add_processing_node(network_address(ip_or_hostname,port));\n        }\n\n        unsigned long get_num_processing_nodes (\n        ) const\n        {\n            return nodes.size();\n        }\n\n        void remove_processing_nodes (\n        ) \n        {\n            nodes.clear();\n        }\n\n        template <typename matrix_type>\n        double operator() (\n            const oca& solver,\n            matrix_type& w\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(get_num_processing_nodes() != 0,\n                        \"\\t double svm_struct_controller_node::operator()\"\n                        << \"\\n\\t You must add some processing nodes before calling this function.\"\n                        << \"\\n\\t this: \" << this\n            );\n\n            problem_type<matrix_type> problem(nodes);\n            problem.set_cache_based_epsilon(cache_based_eps);\n            problem.set_epsilon(eps);\n            if (verbose)\n                problem.be_verbose();\n            problem.set_c(C);\n            for (unsigned long i = 0; i < nuclear_norm_regularizers.size(); ++i)\n            {\n                problem.add_nuclear_norm_regularizer(\n                    nuclear_norm_regularizers[i].first_dimension,\n                    nuclear_norm_regularizers[i].nr,\n                    nuclear_norm_regularizers[i].nc,\n                    nuclear_norm_regularizers[i].regularization_strength);\n            }\n\n            return solver(problem, w);\n        }\n\n        class invalid_problem : public error\n        {\n        public:\n            invalid_problem(\n                const std::string& a\n            ): error(a) {}\n        };\n\n\n    private:\n\n        template <typename matrix_type_>\n        class problem_type : public structural_svm_problem<matrix_type_>\n        {\n        public:\n            typedef typename matrix_type_::type scalar_type;\n            typedef matrix_type_ matrix_type;\n\n            problem_type (\n                const std::vector<network_address>& nodes_\n            ) :\n                nodes(nodes_),\n                in(3),\n                num_dims(0)\n            {\n\n                // initialize all the transmit pipes\n                out_pipes.resize(nodes.size());\n                for (unsigned long i = 0; i < out_pipes.size(); ++i)\n                {\n                    out_pipes[i].reset(new pipe<tsu_out>(3));\n                }\n\n                // make bridges that connect to all our remote processing nodes\n                bridges.resize(nodes.size());\n                for (unsigned long i = 0; i< bridges.size(); ++i)\n                {\n                    bridges[i].reset(new bridge(connect_to(nodes[i]), \n                                                receive(in), transmit(*out_pipes[i])));\n                }\n\n\n\n                // The remote processing nodes are supposed to all send the problem dimensionality\n                // upon connection. So get that and make sure everyone agrees on what it's supposed to be.\n                tsu_in temp;\n                unsigned long responses = 0;\n                bool seen_dim = false;\n                while (responses < nodes.size())\n                {\n                    in.dequeue(temp);\n                    if (temp.template contains<long>())\n                    {\n                        ++responses;\n                        // if this new dimension doesn't match what we have seen previously\n                        if (seen_dim && num_dims != temp.template get<long>())\n                        {\n                            throw invalid_problem(\"remote hosts disagree on the number of dimensions!\");\n                        }\n                        seen_dim = true;\n                        num_dims = temp.template get<long>();\n                    }\n                }\n            }\n\n            // These functions are just here because the structural_svm_problem requires\n            // them, but since we are overloading get_risk() they are never called so they\n            // don't matter.\n            virtual long get_num_samples () const {return 0;}\n            virtual void get_truth_joint_feature_vector ( long , matrix_type&  ) const {}\n            virtual void separation_oracle ( const long , const matrix_type& , scalar_type& , matrix_type& ) const {}\n\n            virtual long get_num_dimensions (\n            ) const\n            {\n                return num_dims;\n            }\n\n            virtual void get_risk (\n                matrix_type& w,\n                scalar_type& risk,\n                matrix_type& subgradient\n            ) const \n            {\n                using namespace impl;\n                subgradient.set_size(w.size(),1);\n                subgradient = 0;\n\n                // send out all the oracle requests\n                tsu_out temp_out;\n                for (unsigned long i = 0; i < out_pipes.size(); ++i)\n                {\n                    temp_out.template get<oracle_request<matrix_type> >().current_solution = w;\n                    temp_out.template get<oracle_request<matrix_type> >().saved_current_risk_gap = this->saved_current_risk_gap;\n                    temp_out.template get<oracle_request<matrix_type> >().skip_cache = this->skip_cache;\n                    temp_out.template get<oracle_request<matrix_type> >().converged = this->converged;\n                    out_pipes[i]->enqueue(temp_out);\n                }\n\n                // collect all the oracle responses  \n                long num = 0;\n                scalar_type total_loss = 0;\n                tsu_in temp_in;\n                unsigned long responses = 0;\n                while (responses < out_pipes.size())\n                {\n                    in.dequeue(temp_in);\n                    if (temp_in.template contains<oracle_response<matrix_type> >())\n                    {\n                        ++responses;\n                        const oracle_response<matrix_type>& data = temp_in.template get<oracle_response<matrix_type> >();\n                        subgradient += data.subgradient; \n                        total_loss += data.loss;\n                        num += data.num;\n                    }\n                }\n\n                subgradient /= num;\n                total_loss /= num;\n                risk = total_loss + dot(subgradient,w);\n\n                if (this->nuclear_norm_regularizers.size() != 0)\n                {\n                    matrix_type grad; \n                    double obj;\n                    this->compute_nuclear_norm_parts(w, grad, obj);\n                    risk += obj;\n                    subgradient += grad;\n                }\n            }\n\n            std::vector<network_address> nodes;\n\n            typedef type_safe_union<impl::oracle_request<matrix_type> > tsu_out;\n            typedef type_safe_union<impl::oracle_response<matrix_type>, long> tsu_in;\n\n            std::vector<shared_ptr<pipe<tsu_out> > > out_pipes;\n            mutable pipe<tsu_in> in;\n            std::vector<shared_ptr<bridge> > bridges;\n            long num_dims;\n        };\n\n        std::vector<network_address> nodes;\n        double eps;\n        double cache_based_eps;\n        bool verbose;\n        double C;\n        std::vector<impl::nuclear_norm_regularizer> nuclear_norm_regularizers;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_DISTRIBUTeD_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_distributed_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_SVM_DISTRIBUTeD_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_SVM_DISTRIBUTeD_ABSTRACT_Hh_\n\n\n#include \"structural_svm_problem_abstract.h\"\n#include \"../optimization/optimization_oca_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class svm_struct_processing_node : noncopyable\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for distributing the work involved in solving\n                a dlib::structural_svm_problem across many computers.  It is used in \n                conjunction with the svm_struct_controller_node defined below.\n        !*/\n\n    public:\n\n        template <\n            typename T,\n            typename U \n            >\n        svm_struct_processing_node (\n            const structural_svm_problem<T,U>& problem,\n            unsigned short port,\n            unsigned short num_threads\n        );\n        /*!\n            requires\n                - port != 0\n                - problem.get_num_samples() != 0\n                - problem.get_num_dimensions() != 0\n            ensures\n                - This object will listen on the given port for a TCP connection from a \n                  svm_struct_controller_node.  Once connected, the controller node will \n                  be able to access the given problem.\n                - Will use num_threads threads at a time to make concurrent calls to the \n                  problem.separation_oracle() routine.  You should set this parameter equal \n                  to the number of available processing cores.\n                - Note that the following parameters within the given problem are ignored:\n                    - problem.get_c()\n                    - problem.get_epsilon()\n                    - problem.get_cache_based_epsilon()\n                    - problem.num_nuclear_norm_regularizers()\n                    - weather the problem is verbose or not\n                  Instead, they are defined by the svm_struct_controller_node. Note, however,\n                  that the problem.get_max_cache_size() parameter is meaningful and controls\n                  the size of the separation oracle cache within a svm_struct_processing_node.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class svm_struct_controller_node : noncopyable\n    {\n        /*!\n            INITIAL VALUE\n                - get_num_processing_nodes() == 0\n                - get_epsilon() == 0.001\n                - get_c() == 1\n                - This object will not be verbose\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for distributing the work involved in solving a \n                dlib::structural_svm_problem across many computers.  The best way to understand\n                its use is via example:\n\n                First, suppose you have defined a structural_svm_problem object by inheriting from \n                it and defining the appropriate virtual functions.  You could solve it by passing \n                an instance to the oca optimizer.  However, if your separation oracle takes a long \n                time to evaluate then the optimization will take a long time to solve.  To speed \n                this up we can distribute the calls to the separation oracle across many computers.  \n                \n                To make this concrete, lets imagine you want to distribute the work across three \n                computers. You can accomplish this by creating four programs.  One containing a \n                svm_struct_controller_node and three containing svm_struct_processing_nodes.\n\n                The programs might look like this:\n\n                Controller program:\n                    int main() \n                    {\n                        svm_struct_controller_node cont;\n                        cont.set_c(100);\n                        // Tell cont where the processing nodes are on your network.\n                        cont.add_processing_node(\"192.168.1.10:12345\");\n                        cont.add_processing_node(\"192.168.1.11:12345\");\n                        cont.add_processing_node(\"192.168.1.12:12345\");\n                        matrix<double> w;\n                        oca solver;\n                        cont(solver, w); // Run the optimization.\n                        // After this finishes w will contain the solution vector.\n                    }\n\n                Processing programs (they are all the same, except that each loads a different subset\n                of the training data):\n                    int main()\n                    {\n                        // Put one third of your data into this problem object.  How you do this depends on your problem.\n                        your_structural_svm_problem problem;\n                        svm_struct_processing_node node(problem, 12345, number_of_cores_on_this_computer);\n                        cout << \"hit enter to terminate this program\" << endl;\n                        cin.get();\n                    }\n\n        !*/\n\n    public:\n\n        svm_struct_controller_node (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void set_epsilon (\n            double eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps\n        !*/\n\n        double get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer \n                  to execute.  Specifically, the algorithm stops when the average sample\n                  risk (i.e. R(w) as defined by the dlib::structural_svm_problem object) is \n                  within epsilon of its optimal value.\n\n                  Also note that sample risk is an upper bound on a sample's loss.  So\n                  you can think of this epsilon value as saying \"solve the optimization\n                  problem until the average loss per sample is within epsilon of it's \n                  optimal value\".\n        !*/\n\n        double get_cache_based_epsilon (\n        ) const;\n        /*!\n            ensures\n                - if (get_max_cache_size() != 0) then\n                    - The solver will not stop when the average sample risk is within\n                      get_epsilon() of its optimal value.  Instead, it will keep running\n                      but will run the optimizer completely on the cache until the average\n                      sample risk is within #get_cache_based_epsilon() of its optimal\n                      value.  This means that it will perform this additional refinement in\n                      the solution accuracy without making any additional calls to the\n                      separation_oracle().  This is useful when using a nuclear norm\n                      regularization term because it allows you to quickly solve the\n                      optimization problem to a high precision, which in the case of a\n                      nuclear norm regularized problem means that many of the learned\n                      matrices will be low rank or very close to low rank due to the\n                      nuclear norm regularizer.  This may not happen without solving the\n                      problem to a high accuracy or their ranks may be difficult to\n                      determine, so the extra accuracy given by the cache based refinement\n                      is very useful.  Finally, note that we include the nuclear norm term\n                      as part of the \"risk\" for the purposes of determining when to stop.  \n                - else\n                    - The value of #get_cache_based_epsilon() has no effect.\n        !*/\n\n        void set_cache_based_epsilon (\n            double eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_cache_based_epsilon() == eps\n        !*/\n\n        void add_nuclear_norm_regularizer (\n            long first_dimension,\n            long rows,\n            long cols,\n            double regularization_strength\n        );\n        /*!\n            requires\n                - 0 <= first_dimension < number of dimensions in problem \n                - 0 <= rows\n                - 0 <= cols\n                - first_dimension+rows*cols <= number of dimensions in problem\n                - 0 < regularization_strength\n            ensures\n                - Adds a nuclear norm regularization term to the optimization problem\n                  solved by this object.  That is, instead of solving:\n                    Minimize: h(w) == 0.5*dot(w,w) + C*R(w)\n                  this object will solve:\n                    Minimize: h(w) == 0.5*dot(w,w) + C*R(w) + regularization_strength*nuclear_norm_of(part of w)\n                  where \"part of w\" is the part of w indicated by the arguments to this\n                  function. In particular, the part of w included in the nuclear norm is\n                  exactly the matrix reshape(rowm(w, range(first_dimension, first_dimension+rows*cols-1)), rows, cols).\n                  Therefore, if you think of the w vector as being the concatenation of a\n                  bunch of matrices then you can use multiple calls to add_nuclear_norm_regularizer() \n                  to add nuclear norm regularization terms to any of the matrices packed into w.\n                - #num_nuclear_norm_regularizers() == num_nuclear_norm_regularizers() + 1\n        !*/\n\n        unsigned long num_nuclear_norm_regularizers (\n        ) const; \n        /*!\n            ensures\n                - returns the number of nuclear norm regularizers that are currently a part\n                  of this optimization problem.  That is, returns the number of times\n                  add_nuclear_norm_regularizer() has been called since the last call to\n                  clear_nuclear_norm_regularizers() or object construction, whichever is\n                  most recent.\n        !*/\n\n        void clear_nuclear_norm_regularizers (\n        );\n        /*!\n            ensures\n                - #num_nuclear_norm_regularizers() == 0\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet(\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        double get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter that \n                  determines the trade off between trying to fit the training data \n                  exactly or allowing more errors but hopefully improving the \n                  generalization of the resulting classifier.  Larger values encourage \n                  exact fitting while smaller values of C may encourage better \n                  generalization. \n        !*/\n\n        void set_c (\n            double C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() == C\n        !*/\n\n        void add_processing_node (\n            const network_address& addr\n        );\n        /*!\n            requires\n                - addr.port != 0\n            ensures\n                - if (this address hasn't already been added) then\n                    - #get_num_processing_nodes() == get_num_processing_nodes() + 1\n                    - When operator() is invoked to solve the structural svm problem this\n                      object will connect to the svm_struct_processing_node located at the\n                      given network address and will include it in the distributed\n                      optimization.\n        !*/\n\n        void add_processing_node (\n            const std::string& ip_or_hostname,\n            unsigned short port\n        );\n        /*!\n            requires\n                - port != 0\n            ensures\n                - invokes: add_processing_node(network_address(ip_or_hostname, port))\n        !*/\n\n        unsigned long get_num_processing_nodes (\n        ) const;\n        /*!\n            ensures\n                - returns the number of remote processing nodes that have been\n                  registered with this object.\n        !*/\n\n        void remove_processing_nodes (\n        );\n        /*!\n            ensures\n                - #get_num_processing_nodes() == 0\n        !*/\n\n        class invalid_problem : public error {};\n\n        template <typename matrix_type>\n        double operator() (\n            const oca& solver,\n            matrix_type& w\n        ) const;\n        /*!\n            requires\n                - get_num_processing_nodes() != 0\n                - matrix_type == a dlib::matrix capable of storing column vectors\n            ensures\n                - connects to the processing nodes and begins optimizing the structural\n                  svm problem using the given oca solver.\n                - stores the solution in #w\n                - returns the objective value at the solution #w\n            throws\n                - invalid_problem\n                  This exception is thrown if the svm_struct_processing_nodes disagree\n                  on the dimensionality of the problem.  That is, if they disagree on\n                  the value of structural_svm_problem::get_num_dimensions().\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_DISTRIBUTeD_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_graph_labeling_problem.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_SVM_GRAPH_LAbELING_PROBLEM_Hh_\n#define DLIB_STRUCTURAL_SVM_GRAPH_LAbELING_PROBLEM_Hh_\n\n\n#include \"structural_svm_graph_labeling_problem_abstract.h\"\n#include \"../graph_cuts.h\"\n#include \"../matrix.h\"\n#include \"../array.h\"\n#include <vector>\n#include <iterator>\n#include \"structural_svm_problem_threaded.h\"\n#include \"../graph.h\"\n#include \"sparse_vector.h\"\n#include <sstream>\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type\n        >\n    bool is_graph_labeling_problem (\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels,\n        std::string& reason_for_failure\n    )\n    {\n        typedef typename graph_type::type node_vector_type;\n        typedef typename graph_type::edge_type edge_vector_type;\n        // The graph must use all dense vectors or all sparse vectors.  It can't mix the two types together.\n        COMPILE_TIME_ASSERT( (is_matrix<node_vector_type>::value && is_matrix<edge_vector_type>::value) ||\n                            (!is_matrix<node_vector_type>::value && !is_matrix<edge_vector_type>::value));\n                            \n\n        std::ostringstream sout;\n        reason_for_failure.clear();\n\n        if (!is_learning_problem(samples, labels))\n        {\n            reason_for_failure = \"is_learning_problem(samples, labels) returned false.\";\n            return false;\n        }\n\n        const bool ismat = is_matrix<typename graph_type::type>::value;\n\n        // these are -1 until assigned with a value\n        long node_dims = -1;\n        long edge_dims = -1;\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            if (samples[i].number_of_nodes() != labels[i].size())\n            {\n                sout << \"samples[\"<<i<<\"].number_of_nodes() doesn't match labels[\"<<i<<\"].size().\";\n                reason_for_failure = sout.str();\n                return false;\n            }\n            if (graph_contains_length_one_cycle(samples[i]))\n            {\n                sout << \"graph_contains_length_one_cycle(samples[\"<<i<<\"]) returned true.\";\n                reason_for_failure = sout.str();\n                return false;\n            }\n\n            for (unsigned long j = 0; j < samples[i].number_of_nodes(); ++j)\n            {\n                if (ismat && samples[i].node(j).data.size() == 0)\n                {\n                    sout << \"A graph contains an empty vector at node: samples[\"<<i<<\"].node(\"<<j<<\").data.\";\n                    reason_for_failure = sout.str();\n                    return false;\n                }\n\n                if (ismat && node_dims == -1)\n                    node_dims = samples[i].node(j).data.size();\n                // all nodes must have vectors of the same size. \n                if (ismat && (long)samples[i].node(j).data.size() != node_dims)\n                {\n                    sout << \"Not all node vectors in samples[\"<<i<<\"] are the same dimension.\";\n                    reason_for_failure = sout.str();\n                    return false;\n                }\n\n                for (unsigned long n = 0; n < samples[i].node(j).number_of_neighbors(); ++n)\n                {\n                    if (ismat && samples[i].node(j).edge(n).size() == 0)\n                    {\n                        sout << \"A graph contains an empty vector at edge: samples[\"<<i<<\"].node(\"<<j<<\").edge(\"<<n<<\").\";\n                        reason_for_failure = sout.str();\n                        return false;\n                    }\n                    if (min(samples[i].node(j).edge(n)) < 0)\n                    {\n                        sout << \"A graph contains negative values on an edge vector at: samples[\"<<i<<\"].node(\"<<j<<\").edge(\"<<n<<\").\";\n                        reason_for_failure = sout.str();\n                        return false;\n                    }\n\n                    if (ismat && edge_dims == -1)\n                        edge_dims = samples[i].node(j).edge(n).size();\n                    // all edges must have vectors of the same size.\n                    if (ismat && (long)samples[i].node(j).edge(n).size() != edge_dims)\n                    {\n                        sout << \"Not all edge vectors in samples[\"<<i<<\"] are the same dimension.\";\n                        reason_for_failure = sout.str();\n                        return false;\n                    }\n                }\n            }\n        }\n\n        return true;\n    }\n\n    template <\n        typename graph_type\n        >\n    bool is_graph_labeling_problem (\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels\n    )\n    {\n        std::string reason_for_failure;\n        return is_graph_labeling_problem(samples, labels, reason_for_failure);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    bool sizes_match (\n        const std::vector<std::vector<T> >& lhs,\n        const std::vector<std::vector<U> >& rhs\n    )\n    {\n        if (lhs.size() != rhs.size())\n            return false;\n\n        for (unsigned long i = 0; i < lhs.size(); ++i)\n        {\n            if (lhs[i].size() != rhs[i].size())\n                return false;\n        }\n\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool all_values_are_nonnegative (\n        const std::vector<std::vector<double> >& x\n    )\n    {\n        for (unsigned long i = 0; i < x.size(); ++i)\n        {\n            for (unsigned long j = 0; j < x[i].size(); ++j)\n            {\n                if (x[i][j] < 0)\n                    return false;\n            }\n        }\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename T,\n            typename enable = void\n            >\n        struct fvect\n        {\n            // In this case type should be some sparse vector type\n            typedef typename T::type type;\n        };\n\n        template < typename T >\n        struct fvect<T, typename enable_if<is_matrix<typename T::type> >::type>\n        {\n            // The point of this stuff is to create the proper matrix\n            // type to represent the concatenation of an edge vector\n            // with an node vector.\n            typedef typename T::type      node_mat;\n            typedef typename T::edge_type edge_mat;\n            const static long NRd = node_mat::NR; \n            const static long NRe = edge_mat::NR; \n            const static long NR = ((NRd!=0) && (NRe!=0)) ? (NRd+NRe) : 0;\n            typedef typename node_mat::value_type value_type;\n\n            typedef matrix<value_type,NR,1, typename node_mat::mem_manager_type, typename node_mat::layout_type> type;\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type \n        >\n    class structural_svm_graph_labeling_problem : noncopyable,\n        public structural_svm_problem_threaded<matrix<double,0,1>, \n                                            typename dlib::impl::fvect<graph_type>::type >\n    {\n    public:\n        typedef matrix<double,0,1> matrix_type;\n        typedef typename dlib::impl::fvect<graph_type>::type feature_vector_type;\n\n        typedef graph_type sample_type;\n\n        typedef std::vector<bool> label_type;\n\n        structural_svm_graph_labeling_problem(\n            const dlib::array<sample_type>& samples_,\n            const std::vector<label_type>& labels_,\n            const std::vector<std::vector<double> >& losses_,\n            unsigned long num_threads = 2\n        ) :\n            structural_svm_problem_threaded<matrix_type,feature_vector_type>(num_threads),\n            samples(samples_),\n            labels(labels_),\n            losses(losses_)\n        {\n            // make sure requires clause is not broken\n#ifdef ENABLE_ASSERTS\n            std::string reason_for_failure;\n            DLIB_ASSERT(is_graph_labeling_problem(samples, labels, reason_for_failure) == true ,\n                    \"\\t structural_svm_graph_labeling_problem::structural_svm_graph_labeling_problem()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t reason_for_failure: \" << reason_for_failure \n                    << \"\\n\\t samples.size(): \" << samples.size() \n                    << \"\\n\\t labels.size():  \" << labels.size() \n                    << \"\\n\\t this: \" << this );\n            DLIB_ASSERT((losses.size() == 0 || sizes_match(labels, losses) == true) &&\n                        all_values_are_nonnegative(losses) == true,\n                    \"\\t structural_svm_graph_labeling_problem::structural_svm_graph_labeling_problem()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t labels.size():  \" << labels.size() \n                    << \"\\n\\t losses.size():  \" << losses.size() \n                    << \"\\n\\t sizes_match(labels,losses): \" << sizes_match(labels,losses) \n                    << \"\\n\\t all_values_are_nonnegative(losses): \" << all_values_are_nonnegative(losses) \n                    << \"\\n\\t this: \" << this );\n#endif\n\n            loss_pos = 1.0;\n            loss_neg = 1.0;\n\n            // figure out how many dimensions are in the node and edge vectors.\n            node_dims = 0;\n            edge_dims = 0;\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                for (unsigned long j = 0; j < samples[i].number_of_nodes(); ++j)\n                {\n                    node_dims = std::max(node_dims,(long)max_index_plus_one(samples[i].node(j).data));\n                    for (unsigned long n = 0; n < samples[i].node(j).number_of_neighbors(); ++n)\n                    {\n                        edge_dims = std::max(edge_dims, (long)max_index_plus_one(samples[i].node(j).edge(n)));\n                    }\n                }\n            }\n        }\n\n        const std::vector<std::vector<double> >& get_losses (\n        ) const { return losses; }\n\n        long get_num_edge_weights (\n        ) const\n        { \n            return edge_dims;\n        }\n\n        void set_loss_on_positive_class (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss >= 0 && get_losses().size() == 0,\n                    \"\\t void structural_svm_graph_labeling_problem::set_loss_on_positive_class()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t loss: \" << loss \n                    << \"\\n\\t this: \" << this );\n\n            loss_pos = loss;\n        }\n\n        void set_loss_on_negative_class (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss >= 0 && get_losses().size() == 0,\n                    \"\\t void structural_svm_graph_labeling_problem::set_loss_on_negative_class()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t loss: \" << loss \n                    << \"\\n\\t this: \" << this );\n\n            loss_neg = loss;\n        }\n\n        double get_loss_on_negative_class (\n        ) const \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(get_losses().size() == 0,\n                    \"\\t double structural_svm_graph_labeling_problem::get_loss_on_negative_class()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t this: \" << this );\n\n            return loss_neg; \n        }\n\n        double get_loss_on_positive_class (\n        ) const \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(get_losses().size() == 0,\n                    \"\\t double structural_svm_graph_labeling_problem::get_loss_on_positive_class()\"\n                    << \"\\n\\t Invalid inputs were given to this function.\"\n                    << \"\\n\\t this: \" << this );\n\n            return loss_pos; \n        }\n\n\n    private:\n        virtual long get_num_dimensions (\n        ) const \n        {\n            // The psi/w vector will begin with all the edge dims and then follow with the node dims.\n            return edge_dims + node_dims;\n        }\n\n        virtual long get_num_samples (\n        ) const \n        {\n            return samples.size();\n        }\n\n        template <typename psi_type>\n        typename enable_if<is_matrix<psi_type> >::type get_joint_feature_vector (\n            const sample_type& sample, \n            const label_type& label,\n            psi_type& psi\n        ) const \n        {\n            psi.set_size(get_num_dimensions());\n            psi = 0;\n            for (unsigned long i = 0; i < sample.number_of_nodes(); ++i)\n            {\n                // accumulate the node vectors\n                if (label[i] == true)\n                    set_rowm(psi, range(edge_dims, psi.size()-1)) += sample.node(i).data;\n\n                for (unsigned long n = 0; n < sample.node(i).number_of_neighbors(); ++n)\n                {\n                    const unsigned long j = sample.node(i).neighbor(n).index();\n\n                    // Don't double count edges.  Also only include the vector if\n                    // the labels disagree.\n                    if (i < j && label[i] != label[j])\n                    {\n                        set_rowm(psi, range(0, edge_dims-1)) -= sample.node(i).edge(n);\n                    }\n                }\n            }\n        }\n\n        template <typename T>\n        void add_to_sparse_vect (\n            T& psi,\n            const T& vect,\n            unsigned long offset \n        ) const\n        {\n            for (typename T::const_iterator i = vect.begin(); i != vect.end(); ++i)\n            {\n                psi.insert(psi.end(), std::make_pair(i->first+offset, i->second));\n            }\n        }\n\n        template <typename T>\n        void subtract_from_sparse_vect (\n            T& psi,\n            const T& vect\n        ) const\n        {\n            for (typename T::const_iterator i = vect.begin(); i != vect.end(); ++i)\n            {\n                psi.insert(psi.end(), std::make_pair(i->first, -i->second));\n            }\n        }\n\n        template <typename psi_type>\n        typename disable_if<is_matrix<psi_type> >::type get_joint_feature_vector (\n            const sample_type& sample, \n            const label_type& label,\n            psi_type& psi\n        ) const \n        {\n            psi.clear();\n            for (unsigned long i = 0; i < sample.number_of_nodes(); ++i)\n            {\n                // accumulate the node vectors\n                if (label[i] == true)\n                    add_to_sparse_vect(psi, sample.node(i).data, edge_dims);\n\n                for (unsigned long n = 0; n < sample.node(i).number_of_neighbors(); ++n)\n                {\n                    const unsigned long j = sample.node(i).neighbor(n).index();\n\n                    // Don't double count edges.  Also only include the vector if\n                    // the labels disagree.\n                    if (i < j && label[i] != label[j])\n                    {\n                        subtract_from_sparse_vect(psi, sample.node(i).edge(n));\n                    }\n                }\n            }\n        }\n\n        virtual void get_truth_joint_feature_vector (\n            long idx,\n            feature_vector_type& psi \n        ) const \n        {\n            get_joint_feature_vector(samples[idx], labels[idx], psi);\n        }\n\n        virtual void separation_oracle (\n            const long idx,\n            const matrix_type& current_solution,\n            double& loss,\n            feature_vector_type& psi\n        ) const\n        {\n            const sample_type& samp = samples[idx];\n\n            // setup the potts graph based on samples[idx] and current_solution.\n            graph<double,double>::kernel_1a g; \n            copy_graph_structure(samp, g);\n            for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n            {\n                g.node(i).data = dot(rowm(current_solution,range(edge_dims,current_solution.size()-1)),\n                                    samp.node(i).data);\n\n                // Include a loss augmentation so that we will get the proper loss augmented\n                // max when we use find_max_factor_graph_potts() below.\n                if (labels[idx][i])\n                    g.node(i).data -= get_loss_for_sample(idx,i,!labels[idx][i]);\n                else\n                    g.node(i).data += get_loss_for_sample(idx,i,!labels[idx][i]);\n\n                for (unsigned long n = 0; n < g.node(i).number_of_neighbors(); ++n)\n                {\n                    const unsigned long j = g.node(i).neighbor(n).index();\n                    // Don't compute an edge weight more than once. \n                    if (i < j)\n                    {\n                        g.node(i).edge(n) = dot(rowm(current_solution,range(0,edge_dims-1)),\n                                                samp.node(i).edge(n));\n                    }\n                }\n\n            }\n\n            std::vector<node_label> labeling;\n            find_max_factor_graph_potts(g, labeling);\n\n\n            std::vector<bool> bool_labeling;\n            bool_labeling.reserve(labeling.size());\n            // figure out the loss\n            loss = 0;\n            for (unsigned long i = 0; i < labeling.size(); ++i)\n            {\n                const bool predicted_label = (labeling[i]!= 0);\n                bool_labeling.push_back(predicted_label);\n                loss += get_loss_for_sample(idx, i, predicted_label);\n            }\n\n            // compute psi\n            get_joint_feature_vector(samp, bool_labeling, psi);\n        }\n\n        double get_loss_for_sample (\n            long sample_idx,\n            long node_idx,\n            bool predicted_label\n        ) const\n        /*!\n            requires\n                - 0 <= sample_idx < labels.size()\n                - 0 <= node_idx < labels[sample_idx].size()\n            ensures\n                - returns the loss incurred for predicting that the node\n                  samples[sample_idx].node(node_idx) has a label of predicted_label.\n        !*/\n        {\n                const bool true_label = labels[sample_idx][node_idx];\n                if (true_label != predicted_label)\n                {\n                    if (losses.size() != 0)\n                        return losses[sample_idx][node_idx];\n                    else if (true_label == true)\n                        return loss_pos;\n                    else\n                        return loss_neg;\n                }\n                else\n                {\n                    // no loss for making the correct prediction.\n                    return 0;\n                }\n        }\n\n        const dlib::array<sample_type>& samples;\n        const std::vector<label_type>& labels;\n        const std::vector<std::vector<double> >& losses;\n\n        long node_dims;\n        long edge_dims;\n        double loss_pos;\n        double loss_neg;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_GRAPH_LAbELING_PROBLEM_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_graph_labeling_problem_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_SVM_GRAPH_LAbELING_PROBLEM_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_SVM_GRAPH_LAbELING_PROBLEM_ABSTRACT_Hh_\n\n#include \"../array/array_kernel_abstract.h\"\n#include \"../graph/graph_kernel_abstract.h\"\n#include \"../matrix/matrix_abstract.h\"\n#include \"sparse_vector_abstract.h\"\n#include \"structural_svm_problem_threaded_abstract.h\"\n#include <vector>\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type\n        >\n    bool is_graph_labeling_problem (\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels\n    );\n    /*!\n        requires\n            - graph_type is an implementation of dlib/graph/graph_kernel_abstract.h\n            - graph_type::type and graph_type::edge_type are either both dlib::matrix types\n              capable of containing column vectors or both some kind of sparse vector type\n              as defined in dlib/svm/sparse_vector_abstract.h.\n        ensures\n            - Note that a graph labeling problem is a task to learn a binary classifier which \n              predicts the correct label for each node in the provided graphs.  Additionally, \n              we have information in the form of edges between nodes where edges are present \n              when we believe the linked nodes are likely to have the same label.  Therefore, \n              part of a graph labeling problem is to learn to score each edge in terms of how \n              strongly the edge should enforce labeling consistency between its two nodes.  \n              Thus, to be a valid graph labeling problem, samples should contain example graphs \n              of connected nodes while labels should indicate the desired label of each node.  \n              The precise requirements for a valid graph labeling problem are listed below.\n            - This function returns true if all of the following are true and false otherwise:\n                - is_learning_problem(samples, labels) == true\n                - All the vectors stored on the edges of each graph in samples \n                  contain only values which are >= 0. \n                - for all valid i:\n                    - graph_contains_length_one_cycle(samples[i]) == false \n                    - samples[i].number_of_nodes() == labels[i].size()\n                      (i.e. Every graph node gets its own label)\n                - if (graph_type::edge_type is a dlib::matrix) then     \n                    - All the nodes must contain vectors with the same number of dimensions.\n                    - All the edges must contain vectors with the same number of dimensions.\n                      (However, edge vectors may differ in dimension from node vectors.)\n                    - All vectors have non-zero size.  That is, they have more than 0 dimensions.\n    !*/\n\n    template <\n        typename graph_type\n        >\n    bool is_graph_labeling_problem (\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels,\n        std::string& reason_for_failure\n    );\n    /*!\n        This function is identical to the above version of is_graph_labeling_problem()\n        except that if it returns false it will populate reason_for_failure with a message\n        describing why the graph is not a valid learning problem.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    bool sizes_match (\n        const std::vector<std::vector<T> >& lhs,\n        const std::vector<std::vector<U> >& rhs\n    );\n    /*!\n        ensures\n            - returns true if the sizes of lhs and rhs, as well as their constituent vectors\n              all match.  In particular, we return true if all of the following conditions are\n              met and false otherwise:\n                - lhs.size() == rhs.size()\n                - for all valid i:\n                    - lhs[i].size() == rhs[i].size()\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    bool all_values_are_nonnegative (\n        const std::vector<std::vector<double> >& x\n    );\n    /*!\n        ensures\n            - returns true if all the double values contained in x are >= 0.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename graph_type \n        >\n    class structural_svm_graph_labeling_problem : noncopyable,\n                                                  public structural_svm_problem_threaded<matrix<double,0,1>, \n                                                         typename graph_type::type >\n    {\n        /*!\n            REQUIREMENTS ON graph_type \n                - graph_type is an implementation of dlib/graph/graph_kernel_abstract.h\n                - graph_type::type and graph_type::edge_type must be either matrix objects\n                  capable of representing column vectors or some kind of sparse vector\n                  type as defined in dlib/svm/sparse_vector_abstract.h.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning the weight vectors needed to use\n                a graph_labeler object.  It learns the parameter vectors by formulating \n                the problem as a structural SVM problem.  \n        !*/\n\n    public:\n        typedef matrix<double,0,1> matrix_type;\n        typedef typename graph_type::type feature_vector_type;\n        typedef graph_type sample_type;\n        typedef std::vector<bool> label_type;\n\n        structural_svm_graph_labeling_problem(\n            const dlib::array<sample_type>& samples,\n            const std::vector<label_type>& labels,\n            const std::vector<std::vector<double> >& losses,\n            unsigned long num_threads \n        );\n        /*!\n            requires\n                - is_graph_labeling_problem(samples,labels) == true\n                - if (losses.size() != 0) then\n                    - sizes_match(labels, losses) == true\n                    - all_values_are_nonnegative(losses) == true\n            ensures\n                - This object attempts to learn a mapping from the given samples to the \n                  given labels.  In particular, it attempts to learn to predict labels[i] \n                  based on samples[i].  Or in other words, this object can be used to learn \n                  parameter vectors, E and W, such that a graph_labeler declared as:\n                    graph_labeler<feature_vector_type> labeler(E,W)\n                  results in a labeler object which attempts to compute the following mapping:\n                    labels[i] == labeler(samples[i])\n                - When you use this object with the oca optimizer you get back just one\n                  big parameter vector as the solution.  Therefore, note that this single\n                  big vector is the concatenation of E and W.  The first get_num_edge_weights()\n                  elements of this vector correspond to E and the rest is W.\n                - This object will use num_threads threads during the optimization \n                  procedure.  You should set this parameter equal to the number of \n                  available processing cores on your machine.\n                - if (losses.size() == 0) then\n                    - #get_loss_on_positive_class() == 1.0\n                    - #get_loss_on_negative_class() == 1.0\n                    - #get_losses().size() == 0\n                    - The losses argument is effectively ignored if its size is zero.\n                - else\n                    - #get_losses() == losses\n                    - Each node in the training data has its own loss value defined by\n                      the corresponding entry of losses.  In particular, this means that \n                      the node with label labels[i][j] incurs a loss of losses[i][j] if \n                      it is incorrectly labeled.\n                    - The get_loss_on_positive_class() and get_loss_on_negative_class()\n                      parameters are ignored.  Only get_losses() is used in this case.\n        !*/\n\n        const std::vector<std::vector<double> >& get_losses (\n        ) const;\n        /*!\n            ensures\n                - returns the losses vector given to this object's constructor. \n                  This vector defines the per sample loss values used.  If the vector\n                  is empty then the loss values defined by get_loss_on_positive_class() and\n                  get_loss_on_positive_class() are used instead.\n        !*/\n\n        long get_num_edge_weights (\n        ) const;\n        /*!\n            ensures\n                - returns the dimensionality of the edge weight vector.  It is also\n                  important to know that when using the oca solver with this object,\n                  you must set it to generate non-negative weights for the edge weight\n                  part of the total weight vector.  You can do this by passing get_num_edge_weights()\n                  to the third argument to oca::operator().\n        !*/\n\n        void set_loss_on_positive_class (\n            double loss\n        );\n        /*!\n            requires\n                - loss >= 0\n                - get_losses().size() == 0\n            ensures\n                - #get_loss_on_positive_class() == loss\n        !*/\n\n        void set_loss_on_negative_class (\n            double loss\n        );\n        /*!\n            requires\n                - loss >= 0\n                - get_losses().size() == 0\n            ensures\n                - #get_loss_on_negative_class() == loss\n        !*/\n\n        double get_loss_on_positive_class (\n        ) const;\n        /*!\n            requires\n                - get_losses().size() == 0\n            ensures\n                - returns the loss incurred when a graph node which is supposed to have\n                  a label of true gets misclassified.  This value controls how much we care \n                  about correctly classifying nodes which should be labeled as true.  Larger \n                  loss values indicate that we care more strongly than smaller values.\n        !*/\n\n        double get_loss_on_negative_class (\n        ) const;\n        /*!\n            requires\n                - get_losses().size() == 0\n            ensures\n                - returns the loss incurred when a graph node which is supposed to have\n                  a label of false gets misclassified.  This value controls how much we care \n                  about correctly classifying nodes which should be labeled as false.  Larger \n                  loss values indicate that we care more strongly than smaller values.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_GRAPH_LAbELING_PROBLEM_ABSTRACT_Hh_\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_object_detection_problem.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_SVM_ObJECT_DETECTION_PROBLEM_Hh_\n#define DLIB_STRUCTURAL_SVM_ObJECT_DETECTION_PROBLEM_Hh_\n\n#include \"structural_svm_object_detection_problem_abstract.h\"\n#include \"../matrix.h\"\n#include \"structural_svm_problem_threaded.h\"\n#include <sstream>\n#include \"../string.h\"\n#include \"../array.h\"\n#include \"../image_processing/full_object_detection.h\"\n#include \"../image_processing/box_overlap_testing.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class impossible_labeling_error : public dlib::error \n    { \n    public: \n        impossible_labeling_error(const std::string& msg) : dlib::error(msg) {};\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type,\n        typename image_array_type \n        >\n    class structural_svm_object_detection_problem : public structural_svm_problem_threaded<matrix<double,0,1> >,\n                                                    noncopyable\n    {\n    public:\n\n        structural_svm_object_detection_problem(\n            const image_scanner_type& scanner,\n            const test_box_overlap& overlap_tester,\n            const bool auto_overlap_tester,\n            const image_array_type& images_,\n            const std::vector<std::vector<full_object_detection> >& truth_object_detections_,\n            const std::vector<std::vector<rectangle> >& ignore_,\n            const test_box_overlap& ignore_overlap_tester_,\n            unsigned long num_threads = 2\n        ) :\n            structural_svm_problem_threaded<matrix<double,0,1> >(num_threads),\n            boxes_overlap(overlap_tester),\n            images(images_),\n            truth_object_detections(truth_object_detections_),\n            ignore(ignore_),\n            ignore_overlap_tester(ignore_overlap_tester_),\n            match_eps(0.5),\n            loss_per_false_alarm(1),\n            loss_per_missed_target(1)\n        {\n#ifdef ENABLE_ASSERTS\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(images_, truth_object_detections_) && \n                        ignore_.size() == images_.size() &&\n                         scanner.get_num_detection_templates() > 0,\n                \"\\t structural_svm_object_detection_problem::structural_svm_object_detection_problem()\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t scanner.get_num_detection_templates(): \" << scanner.get_num_detection_templates()\n                << \"\\n\\t is_learning_problem(images_,truth_object_detections_): \" << is_learning_problem(images_,truth_object_detections_)\n                << \"\\n\\t ignore.size(): \" << ignore.size() \n                << \"\\n\\t images.size(): \" << images.size() \n                << \"\\n\\t this: \" << this\n                );\n            for (unsigned long i = 0; i < truth_object_detections.size(); ++i)\n            {\n                for (unsigned long j = 0; j < truth_object_detections[i].size(); ++j)\n                {\n                    DLIB_ASSERT(truth_object_detections[i][j].num_parts() == scanner.get_num_movable_components_per_detection_template(),\n                        \"\\t trained_function_type structural_object_detection_trainer::train()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t truth_object_detections[\"<<i<<\"][\"<<j<<\"].num_parts():          \" << \n                            truth_object_detections[i][j].num_parts()\n                        << \"\\n\\t scanner.get_num_movable_components_per_detection_template(): \" << \n                            scanner.get_num_movable_components_per_detection_template()\n                        << \"\\n\\t all_parts_in_rect(truth_object_detections[\"<<i<<\"][\"<<j<<\"]): \" << all_parts_in_rect(truth_object_detections[i][j])\n                    );\n                }\n            }\n#endif\n            // The purpose of the max_num_dets member variable is to give us a reasonable\n            // upper limit on the number of detections we can expect from a single image.\n            // This is used in the separation_oracle to put a hard limit on the number of\n            // detections we will consider.  We do this purely for computational reasons\n            // since otherwise we can end up wasting large amounts of time on certain\n            // pathological cases during optimization which ultimately do not influence the\n            // result.  Therefore, we force the separation oracle to only consider the\n            // max_num_dets strongest detections.\n            max_num_dets = 0;\n            for (unsigned long i = 0; i < truth_object_detections.size(); ++i)\n            {\n                if (truth_object_detections[i].size() > max_num_dets)\n                    max_num_dets = truth_object_detections[i].size();\n            }\n            max_num_dets = max_num_dets*3 + 10;\n\n            initialize_scanners(scanner, num_threads);\n\n            if (auto_overlap_tester)\n            {\n                auto_configure_overlap_tester();\n            }\n        }\n\n        test_box_overlap get_overlap_tester (\n        ) const \n        {\n            return boxes_overlap;\n        }\n\n        void set_match_eps (\n            double eps\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < eps && eps < 1, \n                \"\\t void structural_svm_object_detection_problem::set_match_eps(eps)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t eps:  \" << eps \n                << \"\\n\\t this: \" << this\n                );\n\n            match_eps = eps;\n        }\n\n        double get_match_eps (\n        ) const\n        {\n            return match_eps;\n        }\n\n        double get_loss_per_missed_target (\n        ) const\n        {\n            return loss_per_missed_target;\n        }\n\n        void set_loss_per_missed_target (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss > 0, \n                \"\\t void structural_svm_object_detection_problem::set_loss_per_missed_target(loss)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t loss: \" << loss\n                << \"\\n\\t this: \" << this\n                );\n\n            loss_per_missed_target = loss;\n        }\n\n        double get_loss_per_false_alarm (\n        ) const\n        {\n            return loss_per_false_alarm;\n        }\n\n        void set_loss_per_false_alarm (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss > 0, \n                \"\\t void structural_svm_object_detection_problem::set_loss_per_false_alarm(loss)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t loss: \" << loss\n                << \"\\n\\t this: \" << this\n                );\n\n            loss_per_false_alarm = loss;\n        }\n\n    private:\n\n        void auto_configure_overlap_tester(\n        )\n        {\n            std::vector<std::vector<rectangle> > mapped_rects(truth_object_detections.size());\n            for (unsigned long i = 0; i < truth_object_detections.size(); ++i)\n            {\n                mapped_rects[i].resize(truth_object_detections[i].size());\n                for (unsigned long j = 0; j < truth_object_detections[i].size(); ++j)\n                {\n                    mapped_rects[i][j] = scanners[i].get_best_matching_rect(truth_object_detections[i][j].get_rect());\n                }\n            }\n\n            boxes_overlap = find_tight_overlap_tester(mapped_rects);\n        }\n\n\n        virtual long get_num_dimensions (\n        ) const \n        {\n            return scanners[0].get_num_dimensions() + \n                1;// for threshold\n        }\n\n        virtual long get_num_samples (\n        ) const \n        {\n            return images.size();\n        }\n\n        virtual void get_truth_joint_feature_vector (\n            long idx,\n            feature_vector_type& psi \n        ) const \n        {\n            const image_scanner_type& scanner = scanners[idx];\n\n            psi.set_size(get_num_dimensions());\n            std::vector<rectangle> mapped_rects;\n\n            psi = 0;\n            for (unsigned long i = 0; i < truth_object_detections[idx].size(); ++i)\n            {\n                mapped_rects.push_back(scanner.get_best_matching_rect(truth_object_detections[idx][i].get_rect()));\n                scanner.get_feature_vector(truth_object_detections[idx][i], psi);\n            }\n            psi(scanner.get_num_dimensions()) = -1.0*truth_object_detections[idx].size();\n\n            // check if any of the boxes overlap.  If they do then it is impossible for\n            // us to learn to correctly classify this sample\n            for (unsigned long i = 0; i < mapped_rects.size(); ++i)\n            {\n                for (unsigned long j = i+1; j < mapped_rects.size(); ++j)\n                {\n                    if (boxes_overlap(mapped_rects[i], mapped_rects[j]))\n                    {\n                        const double area_overlap = mapped_rects[i].intersect(mapped_rects[j]).area();\n                        const double match_amount = area_overlap/(double)( mapped_rects[i]+mapped_rects[j]).area();\n                        const double overlap_amount = area_overlap/std::min(mapped_rects[i].area(),mapped_rects[j].area());\n\n                        using namespace std;\n                        ostringstream sout;\n                        sout << \"An impossible set of object labels was detected. This is happening because \";\n                        sout << \"the truth labels for an image contain rectangles which overlap according to the \";\n                        sout << \"test_box_overlap object supplied for non-max suppression.  To resolve this, you \";\n                        sout << \"either need to relax the test_box_overlap object so it doesn't mark these rectangles as \";\n                        sout << \"overlapping or adjust the truth rectangles. \";\n\n                        // make sure the above string fits nicely into a command prompt window.\n                        string temp = sout.str();\n                        sout.str(\"\"); sout << wrap_string(temp,0,0) << endl << endl;\n\n\n                        sout << \"image index: \"<< idx << endl;\n                        sout << \"The offending rectangles are:\\n\";\n                        sout << \"rect1: \"<< mapped_rects[i] << endl;\n                        sout << \"rect2: \"<< mapped_rects[j] << endl;\n                        sout << \"match amount:   \" << match_amount << endl;\n                        sout << \"overlap amount: \" << overlap_amount << endl;\n                        throw dlib::impossible_labeling_error(sout.str());\n                    }\n                }\n            }\n\n            // make sure the mapped rectangles are within match_eps of the\n            // truth rectangles.\n            for (unsigned long i = 0; i < mapped_rects.size(); ++i)\n            {\n                const double area = (truth_object_detections[idx][i].get_rect().intersect(mapped_rects[i])).area();\n                const double total_area = (truth_object_detections[idx][i].get_rect() + mapped_rects[i]).area();\n                if (area/total_area <= match_eps)\n                {\n                    using namespace std;\n                    ostringstream sout;\n                    sout << \"An impossible set of object labels was detected.  This is happening because \";\n                    sout << \"none of the object locations checked by the supplied image scanner is a close \";\n                    sout << \"enough match to one of the truth boxes.  To resolve this you need to either lower the match_eps \";\n                    sout << \"or adjust the settings of the image scanner so that it hits this truth box.  \";\n                    sout << \"Or you could adjust the \";\n                    sout << \"offending truth rectangle so it can be matched by the current image scanner.  Also, if you \";\n                    sout << \"are using the scan_image_pyramid object then you could try using a finer image pyramid \";\n                    sout << \"or adding more detection templates.  E.g. if one of \";\n                    sout << \"your existing detection templates has a matching width/height ratio and smaller area \";\n                    sout << \"than the offending rectangle then a finer image pyramid would probably help.\";\n\n\n                    // make sure the above string fits nicely into a command prompt window.\n                    string temp = sout.str();\n                    sout.str(\"\"); sout << wrap_string(temp,0,0) << endl << endl;\n\n                    sout << \"image index              \"<< idx << endl;\n                    sout << \"match_eps:               \"<< match_eps << endl;\n                    sout << \"best possible match:     \"<< area/total_area << endl;\n                    sout << \"truth rect:              \"<< truth_object_detections[idx][i].get_rect() << endl;\n                    sout << \"truth rect width/height: \"<< truth_object_detections[idx][i].get_rect().width()/(double)truth_object_detections[idx][i].get_rect().height() << endl;\n                    sout << \"truth rect area:         \"<< truth_object_detections[idx][i].get_rect().area() << endl;\n                    sout << \"nearest detection template rect:              \"<< mapped_rects[i] << endl;\n                    sout << \"nearest detection template rect width/height: \"<< mapped_rects[i].width()/(double)mapped_rects[i].height() << endl;\n                    sout << \"nearest detection template rect area:         \"<< mapped_rects[i].area() << endl;\n                    throw dlib::impossible_labeling_error(sout.str());\n                }\n\n            }\n        }\n\n        virtual void separation_oracle (\n            const long idx,\n            const matrix_type& current_solution,\n            scalar_type& loss,\n            feature_vector_type& psi\n        ) const \n        {\n            const image_scanner_type& scanner = scanners[idx];\n\n            std::vector<std::pair<double, rectangle> > dets;\n            const double thresh = current_solution(scanner.get_num_dimensions());\n\n\n            scanner.detect(current_solution, dets, thresh-loss_per_false_alarm);\n\n\n            // The loss will measure the number of incorrect detections.  A detection is\n            // incorrect if it doesn't hit a truth rectangle or if it is a duplicate detection\n            // on a truth rectangle.\n            loss = truth_object_detections[idx].size()*loss_per_missed_target;\n\n            // Measure the loss augmented score for the detections which hit a truth rect.\n            std::vector<double> truth_score_hits(truth_object_detections[idx].size(), 0);\n\n            // keep track of which truth boxes we have hit so far.\n            std::vector<bool> hit_truth_table(truth_object_detections[idx].size(), false);\n\n            std::vector<rectangle> final_dets;\n            // The point of this loop is to fill out the truth_score_hits array. \n            for (unsigned long i = 0; i < dets.size() && final_dets.size() < max_num_dets; ++i)\n            {\n                if (overlaps_any_box(boxes_overlap, final_dets, dets[i].second))\n                    continue;\n\n                const std::pair<double,unsigned int> truth = find_best_match(truth_object_detections[idx], dets[i].second);\n\n                final_dets.push_back(dets[i].second);\n\n                const double truth_match = truth.first;\n                // if hit truth rect\n                if (truth_match > match_eps)\n                {\n                    // if this is the first time we have seen a detect which hit truth_object_detections[truth.second]\n                    const double score = dets[i].first - thresh;\n                    if (hit_truth_table[truth.second] == false)\n                    {\n                        hit_truth_table[truth.second] = true;\n                        truth_score_hits[truth.second] += score;\n                    }\n                    else\n                    {\n                        truth_score_hits[truth.second] += score + loss_per_false_alarm;\n                    }\n                }\n            }\n\n            hit_truth_table.assign(hit_truth_table.size(), false);\n\n            final_dets.clear();\n#ifdef ENABLE_ASSERTS\n            double total_score = 0;\n#endif\n            // Now figure out which detections jointly maximize the loss and detection score sum.  We\n            // need to take into account the fact that allowing a true detection in the output, while \n            // initially reducing the loss, may allow us to increase the loss later with many duplicate\n            // detections.\n            for (unsigned long i = 0; i < dets.size() && final_dets.size() < max_num_dets; ++i)\n            {\n                if (overlaps_any_box(boxes_overlap, final_dets, dets[i].second))\n                    continue;\n\n                const std::pair<double,unsigned int> truth = find_best_match(truth_object_detections[idx], dets[i].second);\n\n                const double truth_match = truth.first;\n                if (truth_match > match_eps)\n                {\n                    if (truth_score_hits[truth.second] > loss_per_missed_target)\n                    {\n                        if (!hit_truth_table[truth.second])\n                        {\n                            hit_truth_table[truth.second] = true;\n                            final_dets.push_back(dets[i].second);\n#ifdef ENABLE_ASSERTS\n                            total_score += dets[i].first;\n#endif\n                            loss -= loss_per_missed_target;\n                        }\n                        else\n                        {\n                            final_dets.push_back(dets[i].second);\n#ifdef ENABLE_ASSERTS\n                            total_score += dets[i].first;\n#endif\n                            loss += loss_per_false_alarm;\n                        }\n                    }\n                }\n                else if (!overlaps_ignore_box(idx,dets[i].second))\n                {\n                    // didn't hit anything\n                    final_dets.push_back(dets[i].second);\n#ifdef ENABLE_ASSERTS\n                    total_score += dets[i].first;\n#endif\n                    loss += loss_per_false_alarm;\n                }\n            }\n\n            psi.set_size(get_num_dimensions());\n            psi = 0;\n            for (unsigned long i = 0; i < final_dets.size(); ++i)\n                scanner.get_feature_vector(scanner.get_full_object_detection(final_dets[i], current_solution), psi);\n\n#ifdef ENABLE_ASSERTS\n            const double psi_score = dot(psi, current_solution);\n            DLIB_CASSERT(std::abs(psi_score-total_score) <= 1e-4 * std::max(1.0,std::max(std::abs(psi_score),std::abs(total_score))),\n                        \"\\t The get_feature_vector() and detect() methods of image_scanner_type are not in sync.\" \n                        << \"\\n\\t The relative error is too large to be attributed to rounding error.\"\n                        << \"\\n\\t error:       \" << std::abs(psi_score-total_score)\n                        << \"\\n\\t psi_score:   \" << psi_score\n                        << \"\\n\\t total_score: \" << total_score\n            );\n#endif\n\n            psi(scanner.get_num_dimensions()) = -1.0*final_dets.size();\n        }\n\n\n        bool overlaps_ignore_box (\n            const long idx,\n            const dlib::rectangle& rect\n        ) const\n        {\n            for (unsigned long i = 0; i < ignore[idx].size(); ++i)\n            {\n                if (ignore_overlap_tester(ignore[idx][i], rect))\n                    return true;\n            }\n            return false;\n        }\n\n        std::pair<double,unsigned int> find_best_match(\n            const std::vector<full_object_detection>& boxes,\n            const rectangle rect\n        ) const\n        /*!\n            ensures\n                - determines which rectangle in boxes matches rect the most and\n                  returns the amount of this match.  Specifically, the match is\n                  a number O with the following properties:\n                    - 0 <= O <= 1\n                    - Let R be the maximum matching rectangle in boxes, then\n                      O == (R.intersect(rect)).area() / (R + rect).area()\n                    - O == 0 if there is no match with any rectangle.\n        !*/\n        {\n            double match = 0;\n            unsigned int best_idx = 0;\n            for (unsigned long i = 0; i < boxes.size(); ++i)\n            {\n\n                const unsigned long area = rect.intersect(boxes[i].get_rect()).area();\n                if (area != 0)\n                {\n                    const double new_match = area / static_cast<double>((rect + boxes[i].get_rect()).area());\n                    if (new_match > match)\n                    {\n                        match = new_match;\n                        best_idx = i;\n                    }\n                }\n            }\n\n            return std::make_pair(match,best_idx);\n        }\n\n        struct init_scanners_helper\n        {\n            init_scanners_helper (\n                array<image_scanner_type>& scanners_,\n                const image_array_type& images_\n            ) :\n                scanners(scanners_),\n                images(images_)\n            {}\n\n            array<image_scanner_type>& scanners;\n            const image_array_type& images;\n\n            void operator() (long i ) const\n            {\n                scanners[i].load(images[i]);\n            }\n        };\n\n        void initialize_scanners (\n            const image_scanner_type& scanner,\n            unsigned long num_threads\n        )\n        {\n            scanners.set_max_size(images.size());\n            scanners.set_size(images.size());\n\n            for (unsigned long i = 0; i < scanners.size(); ++i)\n                scanners[i].copy_configuration(scanner);\n\n            // now load the images into all the scanners\n            parallel_for(num_threads, 0, scanners.size(), init_scanners_helper(scanners, images));\n        }\n\n\n        test_box_overlap boxes_overlap;\n\n        mutable array<image_scanner_type> scanners;\n\n        const image_array_type& images;\n        const std::vector<std::vector<full_object_detection> >& truth_object_detections;\n        const std::vector<std::vector<rectangle> >& ignore;\n        const test_box_overlap ignore_overlap_tester;\n\n        unsigned long max_num_dets;\n        double match_eps;\n        double loss_per_false_alarm;\n        double loss_per_missed_target;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_ObJECT_DETECTION_PROBLEM_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_object_detection_problem_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_SVM_ObJECT_DETECTION_PROBLEM_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_SVM_ObJECT_DETECTION_PROBLEM_ABSTRACT_Hh_\n\n#include \"../matrix.h\"\n#include \"structural_svm_problem_threaded_abstract.h\"\n#include <sstream>\n#include \"../image_processing/full_object_detection_abstract.h\"\n#include \"../image_processing/box_overlap_testing.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class impossible_labeling_error : public dlib::error \n    { \n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is the exception thrown by the structural_svm_object_detection_problem\n                when it detects that the image_scanner_type it is working with is incapable\n                of representing the truth rectangles it has been asked to predict.  \n\n                This kind of problem can happen when the test_box_overlap object indicates\n                that two ground truth rectangles overlap and are therefore not allowed to\n                both be output at the same time.  Or alternatively, if there are not enough\n                detection templates to cover the variety of truth rectangle shapes.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_scanner_type,\n        typename image_array_type \n        >\n    class structural_svm_object_detection_problem : public structural_svm_problem_threaded<matrix<double,0,1> >,\n                                                    noncopyable\n    {\n        /*!\n            REQUIREMENTS ON image_scanner_type\n                image_scanner_type must be an implementation of \n                dlib/image_processing/scan_fhog_pyramid_abstract.h or\n                dlib/image_processing/scan_image_custom_abstract.h or\n                dlib/image_processing/scan_image_pyramid_abstract.h or\n                dlib/image_processing/scan_image_boxes_abstract.h\n\n            REQUIREMENTS ON image_array_type\n                image_array_type must be an implementation of dlib/array/array_kernel_abstract.h \n                and it must contain objects which can be accepted by image_scanner_type::load().\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning the parameter vector needed to use\n                a scan_image_pyramid or scan_image_boxes object.  \n\n                It learns the parameter vector by formulating the problem as a structural \n                SVM problem.  The general approach is similar to the method discussed in \n                Learning to Localize Objects with Structured Output Regression by \n                Matthew B. Blaschko and Christoph H. Lampert.  However, the method has \n                been extended to datasets with multiple, potentially overlapping, objects \n                per image and the measure of loss is different from what is described in \n                the paper.  \n\n                In particular, the loss is measured as follows:\n                    let FA == the number of false alarms produced by a labeling of an image.\n                    let MT == the number of targets missed by a labeling of an image.  \n                    Then the loss for a particular labeling is the quantity:\n                        FA*get_loss_per_false_alarm() + MT*get_loss_per_missed_target()\n\n                A detection is considered a false alarm if it doesn't match with any \n                of the ground truth rectangles or if it is a duplicate detection of a \n                truth rectangle.  Finally, for the purposes of calculating loss, a match \n                is determined using the following formula where rectangles A and B match \n                if and only if:\n                    A.intersect(B).area()/(A+B).area() > get_match_eps()\n        !*/\n    public:\n\n        structural_svm_object_detection_problem(\n            const image_scanner_type& scanner,\n            const test_box_overlap& overlap_tester,\n            const bool auto_overlap_tester,\n            const image_array_type& images,\n            const std::vector<std::vector<full_object_detection> >& truth_object_detections,\n            const std::vector<std::vector<rectangle> >& ignore,\n            const test_box_overlap& ignore_overlap_tester,\n            unsigned long num_threads = 2\n        );\n        /*!\n            requires\n                - is_learning_problem(images, truth_object_detections)\n                - ignore.size() == images.size()\n                - scanner.get_num_detection_templates() > 0\n                - scanner.load(images[0]) must be a valid expression.\n                - for all valid i, j:\n                    - truth_object_detections[i][j].num_parts() == scanner.get_num_movable_components_per_detection_template() \n                    - all_parts_in_rect(truth_object_detections[i][j]) == true\n            ensures\n                - This object attempts to learn a mapping from the given images to the\n                  object locations given in truth_object_detections.  In particular, it\n                  attempts to learn to predict truth_object_detections[i] based on\n                  images[i].  Or in other words, this object can be used to learn a\n                  parameter vector, w, such that an object_detector declared as:\n                    object_detector<image_scanner_type> detector(scanner,get_overlap_tester(),w)\n                  results in a detector object which attempts to compute the locations of\n                  all the objects in truth_object_detections.  So if you called\n                  detector(images[i]) you would hopefully get a list of rectangles back\n                  that had truth_object_detections[i].size() elements and contained exactly\n                  the rectangles indicated by truth_object_detections[i].\n                - if (auto_overlap_tester == true) then\n                    - #get_overlap_tester() == a test_box_overlap object that is configured\n                      using the find_tight_overlap_tester() routine and the contents of\n                      truth_object_detections. \n                - else\n                    - #get_overlap_tester() == overlap_tester\n                - #get_match_eps() == 0.5\n                - This object will use num_threads threads during the optimization \n                  procedure.  You should set this parameter equal to the number of \n                  available processing cores on your machine.\n                - #get_loss_per_missed_target() == 1\n                - #get_loss_per_false_alarm() == 1\n                - for all valid i:\n                    - Within images[i] any detections that match against a rectangle in\n                      ignore[i], according to ignore_overlap_tester, are ignored.  That is,\n                      the optimizer doesn't care if the detector outputs a detection that\n                      matches any of the ignore rectangles or if it fails to output a\n                      detection for an ignore rectangle.  Therefore, if there are objects\n                      in your dataset that you are unsure you want to detect or otherwise\n                      don't care if the detector gets or doesn't then you can mark them\n                      with ignore rectangles and the optimizer will simply ignore them. \n        !*/\n\n        test_box_overlap get_overlap_tester (\n        ) const;\n        /*!\n            ensures\n                - returns the overlap tester used by this object.  \n        !*/\n\n        void set_match_eps (\n            double eps\n        );\n        /*!\n            requires\n                - 0 < eps < 1\n            ensures\n                - #get_match_eps() == eps\n        !*/\n\n        double get_match_eps (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of alignment necessary for a detection to be considered\n                  as matching with a ground truth rectangle.  The precise formula for determining\n                  if two rectangles match each other is the following, rectangles A and B match \n                  if and only if:\n                    A.intersect(B).area()/(A+B).area() > get_match_eps()\n        !*/\n\n        double get_loss_per_missed_target (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss experienced for failing to detect one of the\n                  targets.\n        !*/\n\n        void set_loss_per_missed_target (\n            double loss\n        );\n        /*!\n            requires\n                - loss > 0\n            ensures\n                - #get_loss_per_missed_target() == loss\n        !*/\n\n        double get_loss_per_false_alarm (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss experienced for emitting a false alarm detection.\n                  Or in other words, the loss for generating a detection that doesn't correspond \n                  to one of the truth rectangles.\n        !*/\n\n        void set_loss_per_false_alarm (\n            double loss\n        );\n        /*!\n            requires\n                - loss > 0\n            ensures\n                - #get_loss_per_false_alarm() == loss\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_ObJECT_DETECTION_PROBLEM_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_problem.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_SVM_PRObLEM_Hh_\n#define DLIB_STRUCTURAL_SVM_PRObLEM_Hh_\n\n#include \"structural_svm_problem_abstract.h\"\n#include \"../algs.h\"\n#include <vector>\n#include \"../optimization/optimization_oca.h\"\n#include \"../matrix.h\"\n#include \"sparse_vector.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        struct nuclear_norm_regularizer\n        {\n            long first_dimension;\n            long nr;\n            long nc;\n            double regularization_strength;\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename structural_svm_problem\n        >\n    class cache_element_structural_svm \n    {\n    public:\n\n        cache_element_structural_svm (\n        ) : prob(0), sample_idx(0), last_true_risk_computed(std::numeric_limits<double>::infinity()) {}\n\n        typedef typename structural_svm_problem::scalar_type scalar_type;\n        typedef typename structural_svm_problem::matrix_type matrix_type;\n        typedef typename structural_svm_problem::feature_vector_type feature_vector_type;\n\n        void init (\n            const structural_svm_problem* prob_,\n            const long idx\n        )\n        /*!\n            ensures\n                - This object will be a cache for the idx-th sample in the given\n                  structural_svm_problem.\n        !*/\n        {\n            prob = prob_;\n            sample_idx = idx;\n\n            loss.clear();\n            psi.clear();\n            lru_count.clear();\n\n            if (prob->get_max_cache_size() != 0)\n            {\n                prob->get_truth_joint_feature_vector(idx, true_psi);\n                compact_sparse_vector(true_psi);\n            }\n        }\n\n        void get_truth_joint_feature_vector_cached (\n            feature_vector_type& psi \n        ) const\n        {\n            if (prob->get_max_cache_size() != 0)\n                psi = true_psi;\n            else\n                prob->get_truth_joint_feature_vector(sample_idx, psi);\n        }\n\n        void separation_oracle_cached (\n            const bool use_only_cache,\n            const bool skip_cache,\n            const scalar_type& saved_current_risk_gap,\n            const matrix_type& current_solution,\n            scalar_type& out_loss,\n            feature_vector_type& out_psi\n        ) const\n        {\n            const bool cache_enabled = prob->get_max_cache_size() != 0;\n\n            // Don't waste time computing this if the cache isn't going to be used.\n            const scalar_type dot_true_psi = cache_enabled ? dot(true_psi, current_solution) : 0;\n\n            scalar_type best_risk = -std::numeric_limits<scalar_type>::infinity();\n            unsigned long best_idx = 0;\n            long max_lru_count = 0;\n            if (cache_enabled)\n            {\n                // figure out which element in the cache is the best (i.e. has the biggest risk)\n                for (unsigned long i = 0; i < loss.size(); ++i)\n                {\n                    const scalar_type risk = loss[i] + dot(psi[i], current_solution) - dot_true_psi;\n                    if (risk > best_risk)\n                    {\n                        best_risk = risk;\n                        out_loss = loss[i];\n                        best_idx = i;\n                    }\n                    if (lru_count[i] > max_lru_count)\n                        max_lru_count = lru_count[i];\n                }\n\n                if (!skip_cache)\n                {\n                    // Check if the best psi vector in the cache is still good enough to use as\n                    // a proxy for the true separation oracle.  If the risk value has dropped\n                    // by enough to get into the stopping condition then the best psi isn't\n                    // good enough. \n                    if ((best_risk + saved_current_risk_gap > last_true_risk_computed &&\n                        best_risk >= 0) || use_only_cache)\n                    {\n                        out_psi = psi[best_idx];\n                        lru_count[best_idx] = max_lru_count + 1;\n                        return;\n                    }\n                }\n            }\n\n\n            prob->separation_oracle(sample_idx, current_solution, out_loss, out_psi);\n\n            if (!cache_enabled)\n                return;\n\n            compact_sparse_vector(out_psi);\n\n            last_true_risk_computed = out_loss + dot(out_psi, current_solution) - dot_true_psi;\n\n            // If the separation oracle is only solved approximately then the result might\n            // not be as good as just selecting true_psi as the output.  So here we check\n            // if that is the case. \n            if (last_true_risk_computed < 0 && best_risk < 0)\n            {\n                out_psi = true_psi;\n                out_loss = 0;\n            }\n            // Alternatively, an approximate separation oracle might not do as well as just\n            // selecting from the cache.  So if that is the case when just take the best\n            // element from the cache.\n            else if (last_true_risk_computed < best_risk) \n            {\n                out_psi = psi[best_idx];\n                out_loss = loss[best_idx];\n                lru_count[best_idx] = max_lru_count + 1;\n            }\n            // if the cache is full\n            else if (loss.size() >= prob->get_max_cache_size())\n            {\n                // find least recently used cache entry for idx-th sample\n                const long i       = index_of_min(mat(lru_count));\n\n                // save our new data in the cache\n                loss[i] = out_loss;\n                psi[i]  = out_psi;\n\n                const long max_use = max(mat(lru_count));\n                // Make sure this new cache entry has the best lru count since we have used\n                // it most recently.\n                lru_count[i] = max_use + 1;\n            }\n            else\n            {\n                // In this case we just append the new psi into the cache.\n\n                loss.push_back(out_loss);\n                psi.push_back(out_psi);\n                long max_use = 1;\n                if (lru_count.size() != 0)\n                    max_use = max(mat(lru_count)) + 1;\n                lru_count.push_back(max_use);\n            }\n        }\n\n    private:\n        // Do nothing if T isn't actually a sparse vector\n        template <typename T> void compact_sparse_vector( T& ) const { }\n\n        template <\n            typename T,\n            typename U,\n            typename alloc\n            >\n        void compact_sparse_vector (\n            std::vector<std::pair<T,U>,alloc>& vect\n        ) const\n        {\n            // If the sparse vector has more entires than dimensions then it must have some \n            // duplicate elements.  So compact them using make_sparse_vector_inplace().\n            if (vect.size() > (unsigned long)prob->get_num_dimensions())\n            {\n                make_sparse_vector_inplace(vect);\n                // make sure the vector doesn't use more RAM than is necessary\n                std::vector<std::pair<T,U>,alloc>(vect).swap(vect);\n            }\n        }\n\n        const structural_svm_problem* prob;\n\n        long sample_idx;\n\n        mutable feature_vector_type true_psi;\n        mutable std::vector<scalar_type> loss;\n        mutable std::vector<feature_vector_type> psi;\n        mutable std::vector<long> lru_count;\n        mutable double last_true_risk_computed;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type_,\n        typename feature_vector_type_ = matrix_type_\n        >\n    class structural_svm_problem : public oca_problem<matrix_type_> \n    {\n    public:\n        /*!\n            CONVENTION\n                - C == get_c()\n                - eps == get_epsilon()\n                - if (skip_cache) then\n                    - we won't use the oracle cache when we need to evaluate the separation\n                      oracle. Instead, we will directly call the user supplied separation_oracle().\n\n                - get_max_cache_size() == max_cache_size\n\n                - if (cache.size() != 0) then\n                    - cache.size() == get_num_samples()\n                    - for all i: cache[i] == the cached results of calls to separation_oracle()\n                      for the i-th sample.\n        !*/\n\n        typedef matrix_type_ matrix_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef feature_vector_type_ feature_vector_type;\n\n        structural_svm_problem (\n        ) :\n            saved_current_risk_gap(0),\n            eps(0.001),\n            verbose(false),\n            skip_cache(true),\n            count_below_eps(0),\n            max_cache_size(5),\n            converged(false),\n            nuclear_norm_part(0),\n            cache_based_eps(std::numeric_limits<scalar_type>::infinity()),\n            C(1)\n        {}\n\n        scalar_type get_cache_based_epsilon (\n        ) const\n        {\n            return cache_based_eps;\n        }\n\n        void set_cache_based_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void structural_svm_problem::set_cache_based_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            cache_based_eps = eps_;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void structural_svm_problem::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const { return eps; }\n\n        void set_max_cache_size (\n            unsigned long max_size\n        )\n        {\n            max_cache_size = max_size;\n        }\n\n        unsigned long get_max_cache_size (\n        ) const { return max_cache_size; }\n\n        void be_verbose (\n        ) \n        {\n            verbose = true;\n        }\n\n        void be_quiet(\n        )\n        {\n            verbose = false;\n        }\n\n        scalar_type get_c (\n        ) const { return C; }\n\n        void set_c (\n            scalar_type C_\n        ) \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void structural_svm_problem::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_; \n        }\n\n        void add_nuclear_norm_regularizer (\n            long first_dimension,\n            long rows,\n            long cols,\n            double regularization_strength\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 <= first_dimension && first_dimension < get_num_dimensions() &&\n                0 <= rows && 0 <= cols && rows*cols+first_dimension <= get_num_dimensions() &&\n                0 < regularization_strength,\n                \"\\t void structural_svm_problem::add_nuclear_norm_regularizer()\"\n                << \"\\n\\t Invalid arguments were given to this function.\"\n                << \"\\n\\t first_dimension:         \" << first_dimension \n                << \"\\n\\t rows:                    \" << rows \n                << \"\\n\\t cols:                    \" << cols \n                << \"\\n\\t get_num_dimensions():    \" << get_num_dimensions() \n                << \"\\n\\t regularization_strength: \" << regularization_strength \n                << \"\\n\\t this: \" << this\n                );\n\n            impl::nuclear_norm_regularizer temp;\n            temp.first_dimension = first_dimension;\n            temp.nr = rows;\n            temp.nc = cols;\n            temp.regularization_strength = regularization_strength;\n            nuclear_norm_regularizers.push_back(temp);\n        }\n\n        unsigned long num_nuclear_norm_regularizers (\n        ) const { return nuclear_norm_regularizers.size(); }\n\n        void clear_nuclear_norm_regularizers (\n        ) { nuclear_norm_regularizers.clear(); }\n\n        virtual long get_num_dimensions (\n        ) const = 0;\n\n        virtual long get_num_samples (\n        ) const = 0;\n\n        virtual void get_truth_joint_feature_vector (\n            long idx,\n            feature_vector_type& psi \n        ) const = 0;\n\n        virtual void separation_oracle (\n            const long idx,\n            const matrix_type& current_solution,\n            scalar_type& loss,\n            feature_vector_type& psi\n        ) const = 0;\n\n    private:\n\n        virtual bool risk_has_lower_bound (\n            scalar_type& lower_bound\n        ) const \n        { \n            lower_bound = 0;\n            return true; \n        }\n\n        virtual bool optimization_status (\n            scalar_type current_objective_value,\n            scalar_type current_error_gap,\n            scalar_type current_risk_value,\n            scalar_type current_risk_gap,\n            unsigned long num_cutting_planes,\n            unsigned long num_iterations\n        ) const \n        {\n            if (verbose)\n            {\n                using namespace std;\n                if (nuclear_norm_regularizers.size() != 0)\n                {\n                    cout << \"objective:             \" << current_objective_value << endl;\n                    cout << \"objective gap:         \" << current_error_gap << endl;\n                    cout << \"risk:                  \" << current_risk_value-nuclear_norm_part << endl;\n                    cout << \"risk+nuclear norm:     \" << current_risk_value << endl;\n                    cout << \"risk+nuclear norm gap: \" << current_risk_gap << endl;\n                    cout << \"num planes:            \" << num_cutting_planes << endl;\n                    cout << \"iter:                  \" << num_iterations << endl;\n                }\n                else\n                {\n                    cout << \"objective:     \" << current_objective_value << endl;\n                    cout << \"objective gap: \" << current_error_gap << endl;\n                    cout << \"risk:          \" << current_risk_value << endl;\n                    cout << \"risk gap:      \" << current_risk_gap << endl;\n                    cout << \"num planes:    \" << num_cutting_planes << endl;\n                    cout << \"iter:          \" << num_iterations << endl;\n                }\n                cout << endl;\n            }\n\n            saved_current_risk_gap = current_risk_gap;\n\n            if (converged)\n            {\n                return (current_risk_gap < std::max(cache_based_eps,cache_based_eps*current_risk_value)) || \n                       (current_risk_gap == 0);\n            }\n\n            if (current_risk_gap < eps)\n            {\n                // Only stop when we see that the risk gap is small enough on a non-cached\n                // iteration.  But even then, if we are supposed to do the cache based\n                // refinement then we just mark that we have \"converged\" to avoid further\n                // calls to the separation oracle and run all subsequent iterations off the\n                // cache.\n                if (skip_cache || max_cache_size == 0)\n                {\n                    converged = true;\n                    skip_cache = false;\n                    return (current_risk_gap < std::max(cache_based_eps,cache_based_eps*current_risk_value)) ||\n                           (current_risk_gap == 0);\n                }\n\n                ++count_below_eps;\n\n                // Only disable the cache if we have seen a few consecutive iterations that\n                // look to have converged.\n                if (count_below_eps > 1)\n                {\n                    // Instead of stopping we shouldn't use the cache on the next iteration.  This way\n                    // we can be sure to have the best solution rather than assuming the cache is up-to-date\n                    // enough.\n                    skip_cache = true;\n                    count_below_eps = 0;\n                }\n            }\n            else\n            {\n                count_below_eps = 0;\n                skip_cache = false;\n            }\n\n            return false;\n        }\n\n        virtual void get_risk (\n            matrix_type& w,\n            scalar_type& risk,\n            matrix_type& subgradient\n        ) const \n        {\n            feature_vector_type ftemp;\n            const unsigned long num = get_num_samples();\n\n            // initialize the cache and compute psi_true.\n            if (cache.size() == 0)\n            {\n                cache.resize(get_num_samples());\n                for (unsigned long i = 0; i < cache.size(); ++i)\n                    cache[i].init(this,i);\n\n                psi_true.set_size(w.size(),1);\n                psi_true = 0;\n\n                for (unsigned long i = 0; i < num; ++i)\n                {\n                    cache[i].get_truth_joint_feature_vector_cached(ftemp);\n\n                    subtract_from(psi_true, ftemp);\n                }\n            }\n\n            subgradient = psi_true;\n            scalar_type total_loss = 0;\n            call_separation_oracle_on_all_samples(w,subgradient,total_loss);\n\n            subgradient /= num;\n            total_loss /= num;\n            risk = total_loss + dot(subgradient,w);\n\n            if (nuclear_norm_regularizers.size() != 0)\n            {\n                matrix_type grad; \n                scalar_type obj;\n                compute_nuclear_norm_parts(w, grad, obj);\n                risk += obj;\n                subgradient += grad;\n            }\n        }\n\n        virtual void call_separation_oracle_on_all_samples (\n            const matrix_type& w,\n            matrix_type& subgradient,\n            scalar_type& total_loss\n        ) const\n        {\n            feature_vector_type ftemp;\n            const unsigned long num = get_num_samples();\n            for (unsigned long i = 0; i < num; ++i)\n            {\n                scalar_type loss;\n                separation_oracle_cached(i, w, loss, ftemp);\n                total_loss += loss;\n                add_to(subgradient, ftemp);\n            }\n        }\n\n    protected:\n\n        void compute_nuclear_norm_parts(\n            const matrix_type& m,\n            matrix_type& grad,\n            scalar_type& obj\n        ) const\n        {\n            obj = 0;\n            grad.set_size(m.size(), 1);\n            grad = 0;\n\n            matrix<double> u,v,w,f;\n            nuclear_norm_part = 0;\n            for (unsigned long i = 0; i < nuclear_norm_regularizers.size(); ++i)\n            {\n                const long nr = nuclear_norm_regularizers[i].nr;\n                const long nc = nuclear_norm_regularizers[i].nc;\n                const long size = nr*nc;\n                const long idx = nuclear_norm_regularizers[i].first_dimension;\n                const double strength = nuclear_norm_regularizers[i].regularization_strength;\n\n                f = matrix_cast<double>(reshape(rowm(m, range(idx, idx+size-1)), nr, nc));\n                svd3(f, u,w,v);\n\n\n                const double norm = sum(w);\n                obj += strength*norm;\n                nuclear_norm_part += strength*norm/C;\n\n                f = u*trans(v);\n\n                set_rowm(grad, range(idx, idx+size-1)) = matrix_cast<double>(strength*reshape_to_column_vector(f));\n            }\n\n            obj /= C;\n            grad /= C;\n        }\n\n        void separation_oracle_cached (\n            const long idx,\n            const matrix_type& current_solution,\n            scalar_type& loss,\n            feature_vector_type& psi\n        ) const \n        {\n            cache[idx].separation_oracle_cached(converged,\n                                                skip_cache, \n                                                saved_current_risk_gap,\n                                                current_solution,\n                                                loss,\n                                                psi);\n        }\n\n        std::vector<impl::nuclear_norm_regularizer> nuclear_norm_regularizers;\n\n        mutable scalar_type saved_current_risk_gap;\n        mutable matrix_type psi_true;\n        scalar_type eps;\n        mutable bool verbose;\n\n\n        mutable std::vector<cache_element_structural_svm<structural_svm_problem> > cache;\n        mutable bool skip_cache;\n        mutable int count_below_eps;\n        unsigned long max_cache_size;\n        mutable bool converged;\n        mutable double nuclear_norm_part;\n        scalar_type cache_based_eps;\n\n        scalar_type C;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_PRObLEM_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_problem_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_SVM_PRObLEM_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_SVM_PRObLEM_ABSTRACT_Hh_\n\n#include \"../optimization/optimization_oca_abstract.h\"\n#include \"sparse_vector_abstract.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type_,\n        typename feature_vector_type_ = matrix_type_\n        >\n    class structural_svm_problem : public oca_problem<matrix_type_> \n    {\n    public:\n        /*!\n            REQUIREMENTS ON matrix_type_\n                - matrix_type_ == a dlib::matrix capable of storing column vectors\n\n            REQUIREMENTS ON feature_vector_type_ \n                - feature_vector_type_ == a dlib::matrix capable of storing column vectors\n                  or an unsorted sparse vector type as defined in dlib/svm/sparse_vector_abstract.h.\n\n            INITIAL VALUE\n                - get_epsilon() == 0.001\n                - get_max_cache_size() == 5\n                - get_c() == 1\n                - get_cache_based_epsilon() == std::numeric_limits<scalar_type>::infinity()\n                  (I.e. the cache based epsilon feature is disabled)\n                - num_nuclear_norm_regularizers() == 0\n                - This object will not be verbose\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for solving the optimization problem associated with\n                a structural support vector machine.  A structural SVM is a supervised\n                machine learning method for learning to predict complex outputs.  This is\n                contrasted with a binary classifier which makes only simple yes/no\n                predictions.  A structural SVM, on the other hand, can learn to predict\n                complex outputs such as entire parse trees or DNA sequence alignments.  To\n                do this, it learns a function F(x,y) which measures how well a particular\n                data sample x matches a label y.  When used for prediction, the best label\n                for a new x is given by the y which maximizes F(x,y).   \n\n                To use this object you inherit from it, provide implementations of its four\n                pure virtual functions, and then pass your object to the oca optimizer.\n                Also, you should only pass an instance of this object to the oca optimizer\n                once.  That is, the act of using a structural_svm_problem instance with the\n                oca solver \"uses\" the structural_svm_problem instance.  If you want to\n                solve the same problem multiple times then you must use a fresh instance of\n                your structural_svm_problem.\n\n\n                To define the optimization problem precisely, we first introduce some notation:\n                    - let PSI(x,y)    == the joint feature vector for input x and a label y.\n                    - let F(x,y|w)    == dot(w,PSI(x,y)).  \n                    - let LOSS(idx,y) == the loss incurred for predicting that the idx-th training \n                      sample has a label of y.  Note that LOSS() should always be >= 0 and should\n                      become exactly 0 when y is the correct label for the idx-th sample.\n                    - let x_i == the i-th training sample.\n                    - let y_i == the correct label for the i-th training sample.\n                    - The number of data samples is N.\n\n                Then the optimization problem solved using this object is the following:\n                    Minimize: h(w) == 0.5*dot(w,w) + C*R(w)\n\n                    Where R(w) == sum from i=1 to N: 1/N * sample_risk(i,w)\n                    and sample_risk(i,w) == max over all Y: LOSS(i,Y) + F(x_i,Y|w) - F(x_i,y_i|w)\n                    and C > 0\n\n                \n\n                For an introduction to structured support vector machines you should consult \n                the following paper: \n                    Predicting Structured Objects with Support Vector Machines by \n                    Thorsten Joachims, Thomas Hofmann, Yisong Yue, and Chun-nam Yu\n\n                For a more detailed discussion of the particular algorithm implemented by this\n                object see the following paper:  \n                    T. Joachims, T. Finley, Chun-Nam Yu, Cutting-Plane Training of Structural SVMs, \n                    Machine Learning, 77(1):27-59, 2009.\n\n                    Note that this object is essentially a tool for solving the 1-Slack structural\n                    SVM with margin-rescaling.  Specifically, see Algorithm 3 in the above referenced \n                    paper.\n        !*/\n\n        typedef matrix_type_ matrix_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef feature_vector_type_ feature_vector_type;\n\n        structural_svm_problem (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps\n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer \n                  to execute.  Specifically, the algorithm stops when the average sample\n                  risk (i.e. R(w) as defined above) is within epsilon of its optimal value.\n\n                  Also note that sample risk is an upper bound on a sample's loss.  So\n                  you can think of this epsilon value as saying \"solve the optimization\n                  problem until the average loss per sample is within epsilon of it's \n                  optimal value\".\n        !*/\n\n        scalar_type get_cache_based_epsilon (\n        ) const;\n        /*!\n            ensures\n                - if (get_max_cache_size() != 0) then\n                    - The solver will not stop when the average sample risk is within\n                      get_epsilon() of its optimal value.  Instead, it will keep running\n                      but will run the optimizer completely on the cache until the average\n                      sample risk is within #get_cache_based_epsilon() of its optimal\n                      value.  This means that it will perform this additional refinement in\n                      the solution accuracy without making any additional calls to the\n                      separation_oracle().  This is useful when using a nuclear norm\n                      regularization term because it allows you to quickly solve the\n                      optimization problem to a high precision, which in the case of a\n                      nuclear norm regularized problem means that many of the learned\n                      matrices will be low rank or very close to low rank due to the\n                      nuclear norm regularizer.  This may not happen without solving the\n                      problem to a high accuracy or their ranks may be difficult to\n                      determine, so the extra accuracy given by the cache based refinement\n                      is very useful.  Finally, note that we include the nuclear norm term\n                      as part of the \"risk\" for the purposes of determining when to stop.  \n                - else\n                    - The value of #get_cache_based_epsilon() has no effect.\n        !*/\n\n        void set_cache_based_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_cache_based_epsilon() == eps\n        !*/\n\n        void set_max_cache_size (\n            unsigned long max_size\n        );\n        /*!\n            ensures\n                - #get_max_cache_size() == max_size\n        !*/\n\n        unsigned long get_max_cache_size (\n        ) const; \n        /*!\n            ensures\n                - Returns the number of joint feature vectors per training sample kept in \n                  the separation oracle cache.  This cache is used to avoid unnecessary \n                  calls to the user supplied separation_oracle() function.  Note that a \n                  value of 0 means that caching is not used at all.  This is appropriate \n                  if the separation oracle is cheap to evaluate. \n        !*/\n\n        void add_nuclear_norm_regularizer (\n            long first_dimension,\n            long rows,\n            long cols,\n            double regularization_strength\n        );\n        /*!\n            requires\n                - 0 <= first_dimension < get_num_dimensions()\n                - 0 <= rows\n                - 0 <= cols\n                - first_dimension+rows*cols <= get_num_dimensions()\n                - 0 < regularization_strength\n            ensures\n                - Adds a nuclear norm regularization term to the optimization problem\n                  solved by this object.  That is, instead of solving:\n                    Minimize: h(w) == 0.5*dot(w,w) + C*R(w)\n                  this object will solve:\n                    Minimize: h(w) == 0.5*dot(w,w) + C*R(w) + regularization_strength*nuclear_norm_of(part of w)\n                  where \"part of w\" is the part of w indicated by the arguments to this\n                  function. In particular, the part of w included in the nuclear norm is\n                  exactly the matrix reshape(rowm(w, range(first_dimension, first_dimension+rows*cols-1)), rows, cols).\n                  Therefore, if you think of the w vector as being the concatenation of a\n                  bunch of matrices then you can use multiple calls to add_nuclear_norm_regularizer() \n                  to add nuclear norm regularization terms to any of the matrices packed into w.\n                - #num_nuclear_norm_regularizers() == num_nuclear_norm_regularizers() + 1\n        !*/\n\n        unsigned long num_nuclear_norm_regularizers (\n        ) const; \n        /*!\n            ensures\n                - returns the number of nuclear norm regularizers that are currently a part\n                  of this optimization problem.  That is, returns the number of times\n                  add_nuclear_norm_regularizer() has been called since the last call to\n                  clear_nuclear_norm_regularizers() or object construction, whichever is\n                  most recent.\n        !*/\n\n        void clear_nuclear_norm_regularizers (\n        );\n        /*!\n            ensures\n                - #num_nuclear_norm_regularizers() == 0\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet(\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        scalar_type get_c (\n        ) const; \n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter that \n                  determines the trade off between trying to fit the training data \n                  exactly or allowing more errors but hopefully improving the \n                  generalization of the resulting classifier.  Larger values encourage \n                  exact fitting while smaller values of C may encourage better \n                  generalization. \n        !*/\n\n        void set_c (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() == C\n        !*/\n\n    // --------------------------------\n    //     User supplied routines\n    // --------------------------------\n\n        virtual long get_num_dimensions (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the dimensionality of a joint feature vector\n        !*/\n\n        virtual long get_num_samples (\n        ) const = 0;\n        /*!\n            ensures\n                - returns the number of training samples in this problem. \n        !*/\n\n        virtual void get_truth_joint_feature_vector (\n            long idx,\n            feature_vector_type& psi \n        ) const = 0;\n        /*!\n            requires\n                - 0 <= idx < get_num_samples()\n            ensures\n                - #psi == PSI(x_idx, y_idx)\n                  (i.e. the joint feature vector for the idx-th training sample its true label.)\n        !*/\n\n        virtual void separation_oracle (\n            const long idx,\n            const matrix_type& current_solution,\n            scalar_type& loss,\n            feature_vector_type& psi\n        ) const = 0;\n        /*!\n            requires\n                - 0 <= idx < get_num_samples()\n                - current_solution.size() == get_num_dimensions()\n            ensures\n                - runs the separation oracle on the idx-th sample.  We define this as follows: \n                    - let X           == the idx-th training sample.\n                    - let PSI(X,y)    == the joint feature vector for input X and an arbitrary label y.\n                    - let F(X,y)      == dot(current_solution,PSI(X,y)).  \n                    - let LOSS(idx,y) == the loss incurred for predicting that the idx-th sample\n                      has a label of y.  Note that LOSS() should always be >= 0 and should\n                      become exactly 0 when y is the correct label for the idx-th sample.\n\n                        Then the separation oracle finds a Y such that: \n                            Y = argmax over all y: LOSS(idx,y) + F(X,y) \n                            (i.e. It finds the label which maximizes the above expression.)\n\n                        Finally, we can define the outputs of this function as:\n                        - #loss == LOSS(idx,Y) \n                        - #psi == PSI(X,Y) \n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_PRObLEM_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_problem_threaded.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_SVM_PRObLEM_THREADED_Hh_\n#define DLIB_STRUCTURAL_SVM_PRObLEM_THREADED_Hh_\n\n#include \"structural_svm_problem_threaded_abstract.h\"\n#include \"../algs.h\"\n#include <vector>\n#include \"structural_svm_problem.h\"\n#include \"../matrix.h\"\n#include \"sparse_vector.h\"\n#include <iostream>\n#include \"../threads.h\"\n#include \"../misc_api.h\"\n#include \"../statistics.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type_,\n        typename feature_vector_type_ = matrix_type_\n        >\n    class structural_svm_problem_threaded : public structural_svm_problem<matrix_type_,feature_vector_type_> \n    {\n    public:\n\n        typedef matrix_type_ matrix_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef feature_vector_type_ feature_vector_type;\n\n        explicit structural_svm_problem_threaded (\n            unsigned long num_threads\n        ) :\n            tp(num_threads),\n            num_iterations_executed(0)\n        {}\n\n        unsigned long get_num_threads (\n        ) const { return tp.num_threads_in_pool(); }\n\n    private:\n\n        struct binder\n        {\n            binder (\n                const structural_svm_problem_threaded& self_,\n                const matrix_type& w_,\n                matrix_type& subgradient_,\n                scalar_type& total_loss_,\n                bool buffer_subgradients_locally_\n            ) : self(self_), w(w_), subgradient(subgradient_), total_loss(total_loss_),\n                buffer_subgradients_locally(buffer_subgradients_locally_){}\n\n            void call_oracle (\n                long begin,\n                long end\n            ) \n            {\n                // If we are only going to call the separation oracle once then don't run\n                // the slightly more complex for loop version of this code.  Or if we just\n                // don't want to run the complex buffering one.  The code later on decides\n                // if we should do the buffering based on how long it takes to execute.  We\n                // do this because, when the subgradient is really high dimensional it can\n                // take a lot of time to add them together.  So we might want to avoid\n                // doing that.\n                if (end-begin <= 1 || !buffer_subgradients_locally)\n                {\n                    scalar_type loss;\n                    feature_vector_type ftemp;\n                    for (long i = begin; i < end; ++i)\n                    {\n                        self.separation_oracle_cached(i, w, loss, ftemp);\n\n                        auto_mutex lock(self.accum_mutex);\n                        total_loss += loss;\n                        add_to(subgradient, ftemp);\n                    }\n                }\n                else\n                {\n                    scalar_type loss = 0;\n                    matrix_type faccum(subgradient.size(),1);\n                    faccum = 0;\n\n                    feature_vector_type ftemp;\n\n                    for (long i = begin; i < end; ++i)\n                    {\n                        scalar_type loss_temp;\n                        self.separation_oracle_cached(i, w, loss_temp, ftemp);\n                        loss += loss_temp;\n                        add_to(faccum, ftemp);\n                    }\n\n                    auto_mutex lock(self.accum_mutex);\n                    total_loss += loss;\n                    add_to(subgradient, faccum);\n                }\n            }\n\n            const structural_svm_problem_threaded& self;\n            const matrix_type& w;\n            matrix_type& subgradient;\n            scalar_type& total_loss;\n            bool buffer_subgradients_locally;\n        };\n\n\n        virtual void call_separation_oracle_on_all_samples (\n            const matrix_type& w,\n            matrix_type& subgradient,\n            scalar_type& total_loss\n        ) const\n        {\n            ++num_iterations_executed;\n\n            const uint64 start_time = ts.get_timestamp();\n\n            bool buffer_subgradients_locally = with_buffer_time.mean() < without_buffer_time.mean();\n\n            // every 50 iterations we should try to flip the buffering scheme to see if\n            // doing it the other way might be better.  \n            if ((num_iterations_executed%50) == 0)\n            {\n                buffer_subgradients_locally = !buffer_subgradients_locally;\n            }\n\n            binder b(*this, w, subgradient, total_loss, buffer_subgradients_locally);\n            parallel_for_blocked(tp, 0, this->get_num_samples(), b, &binder::call_oracle);\n\n            const uint64 stop_time = ts.get_timestamp();\n\n            if (buffer_subgradients_locally)\n                with_buffer_time.add(stop_time-start_time);\n            else\n                without_buffer_time.add(stop_time-start_time);\n\n        }\n\n        mutable thread_pool tp;\n        mutable mutex accum_mutex;\n        mutable timestamper ts;\n        mutable running_stats<double> with_buffer_time;\n        mutable running_stats<double> without_buffer_time;\n        mutable unsigned long num_iterations_executed;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_PRObLEM_THREADED_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_problem_threaded_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_SVM_PRObLEM_THREADED_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_SVM_PRObLEM_THREADED_ABSTRACT_Hh_\n\n#include \"structural_svm_problem_abstract.h\"\n#include \"../matrix.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type_,\n        typename feature_vector_type_ = matrix_type_\n        >\n    class structural_svm_problem_threaded : public structural_svm_problem<matrix_type_,feature_vector_type_> \n    {\n    public:\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is identical to the structural_svm_problem object defined in \n                dlib/svm/structural_svm_problem_abstract.h except that its constructor\n                takes a number which defines how many threads will be used to make concurrent\n                calls to the separation_oracle() routine.  \n\n                So this object lets you take advantage of a multi-core system.  You should\n                set the num_threads parameter equal to the number of available cores.  Note\n                that the separation_oracle() function which you provide must be thread safe\n                if you are to use this version of the structural_svm_problem.  In\n                particular, it must be safe to call separation_oracle() concurrently from\n                different threads.  However, it is guaranteed that different threads will\n                never make concurrent calls to separation_oracle() using the same idx value\n                (i.e. the first argument).  \n        !*/\n\n        typedef matrix_type_ matrix_type;\n        typedef typename matrix_type::type scalar_type;\n        typedef feature_vector_type_ feature_vector_type;\n\n        structural_svm_problem (\n            unsigned long num_threads\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n                - #get_num_threads() == num_threads\n        !*/\n\n        unsigned long get_num_threads (\n        ) const; \n        /*!\n            ensures\n                - Returns the number of threads which will be used to make concurrent\n                  calls to the separation_oracle() function.\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_PRObLEM_THREADED_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_sequence_labeling_problem.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_SVM_SEQUENCE_LaBELING_PROBLEM_Hh_\n#define DLIB_STRUCTURAL_SVM_SEQUENCE_LaBELING_PROBLEM_Hh_\n\n\n#include \"structural_svm_sequence_labeling_problem_abstract.h\"\n#include \"../matrix.h\"\n#include \"sequence_labeler.h\"\n#include <vector>\n#include \"structural_svm_problem_threaded.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    namespace fe_helpers\n    {\n\n    // ----------------------------------------------------------------------------------------\n\n        struct get_feats_functor \n        {\n            get_feats_functor(std::vector<std::pair<unsigned long, double> >& feats_) : feats(feats_) {}\n\n            inline void operator() (\n                unsigned long feat_index,\n                double feat_value\n            )\n            {\n                feats.push_back(std::make_pair(feat_index, feat_value));\n            }\n\n            inline void operator() (\n                unsigned long feat_index\n            )\n            {\n                feats.push_back(std::make_pair(feat_index, 1));\n            }\n\n            std::vector<std::pair<unsigned long, double> >& feats;\n        };\n\n    // ----------------------------------------------------------------------------------------\n\n        template <typename feature_extractor, typename sequence_type, typename EXP2> \n        void get_feature_vector(\n            std::vector<std::pair<unsigned long, double> >& feats,\n            const feature_extractor& fe,\n            const sequence_type& sequence,\n            const matrix_exp<EXP2>& candidate_labeling,\n            unsigned long position\n        )\n        {\n            get_feats_functor funct(feats);\n            fe.get_features(funct, sequence,candidate_labeling, position);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename feature_extractor\n        >\n    class structural_svm_sequence_labeling_problem : noncopyable,\n        public structural_svm_problem_threaded<matrix<double,0,1>, std::vector<std::pair<unsigned long,double> > >\n    {\n    public:\n        typedef matrix<double,0,1> matrix_type;\n        typedef std::vector<std::pair<unsigned long, double> > feature_vector_type;\n\n        typedef typename feature_extractor::sequence_type sequence_type;\n\n        structural_svm_sequence_labeling_problem(\n            const std::vector<sequence_type>& samples_,\n            const std::vector<std::vector<unsigned long> >& labels_,\n            const feature_extractor& fe_,\n            unsigned long num_threads = 2\n        ) :\n            structural_svm_problem_threaded<matrix_type,feature_vector_type>(num_threads),\n            samples(samples_),\n            labels(labels_),\n            fe(fe_)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_sequence_labeling_problem(samples,labels) == true &&\n                        contains_invalid_labeling(fe, samples, labels) == false,\n                        \"\\t structural_svm_sequence_labeling_problem::structural_svm_sequence_labeling_problem()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t samples.size(): \" << samples.size() \n                        << \"\\n\\t is_sequence_labeling_problem(samples,labels): \" << is_sequence_labeling_problem(samples,labels)\n                        << \"\\n\\t contains_invalid_labeling(fe,samples,labels): \" << contains_invalid_labeling(fe,samples,labels)\n                        << \"\\n\\t this: \" << this\n                        );\n\n#ifdef ENABLE_ASSERTS\n            for (unsigned long i = 0; i < labels.size(); ++i)\n            {\n                for (unsigned long j = 0; j < labels[i].size(); ++j)\n                {\n                    // make sure requires clause is not broken\n                    DLIB_ASSERT(labels[i][j] < fe.num_labels(),\n                                \"\\t structural_svm_sequence_labeling_problem::structural_svm_sequence_labeling_problem()\"\n                                << \"\\n\\t The given labels in labels are invalid.\"\n                                << \"\\n\\t labels[i][j]: \" << labels[i][j] \n                                << \"\\n\\t fe.num_labels(): \" << fe.num_labels()\n                                << \"\\n\\t i: \" << i \n                                << \"\\n\\t j: \" << j \n                                << \"\\n\\t this: \" << this\n                                );\n                }\n            }\n#endif\n\n            loss_values.assign(num_labels(), 1);\n\n        }\n\n        unsigned long num_labels (\n        ) const { return fe.num_labels(); }\n\n        double get_loss (\n            unsigned long label\n        ) const \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(label < num_labels(),\n                        \"\\t void structural_svm_sequence_labeling_problem::get_loss()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t label:        \" << label \n                        << \"\\n\\t num_labels(): \" << num_labels() \n                        << \"\\n\\t this:         \" << this\n                        );\n\n            return loss_values[label]; \n        }\n\n        void set_loss (\n            unsigned long label,\n            double value\n        )  \n        { \n            // make sure requires clause is not broken\n            DLIB_ASSERT(label < num_labels() && value >= 0,\n                        \"\\t void structural_svm_sequence_labeling_problem::set_loss()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t label:        \" << label \n                        << \"\\n\\t num_labels(): \" << num_labels() \n                        << \"\\n\\t value:        \" << value \n                        << \"\\n\\t this:         \" << this\n                        );\n\n            loss_values[label] = value;\n        }\n\n    private:\n        virtual long get_num_dimensions (\n        ) const \n        {\n            return fe.num_features();\n        }\n\n        virtual long get_num_samples (\n        ) const \n        {\n            return samples.size();\n        }\n\n        void get_joint_feature_vector (\n            const sequence_type& sample, \n            const std::vector<unsigned long>& label,\n            feature_vector_type& psi\n        ) const \n        {\n            psi.clear();\n\n            const int order = fe.order();\n\n            matrix<unsigned long,0,1> candidate_labeling; \n            for (unsigned long i = 0; i < sample.size(); ++i)\n            {\n                candidate_labeling = rowm(mat(label), range(i, std::max((int)i-order,0)));\n\n                fe_helpers::get_feature_vector(psi,fe,sample,candidate_labeling, i);\n            }\n        }\n\n        virtual void get_truth_joint_feature_vector (\n            long idx,\n            feature_vector_type& psi \n        ) const \n        {\n            get_joint_feature_vector(samples[idx], labels[idx], psi);\n        }\n\n        class map_prob\n        {\n        public:\n            unsigned long order() const { return fe.order(); }\n            unsigned long num_states() const { return fe.num_labels(); }\n\n            map_prob(\n                const sequence_type& sequence_,\n                const std::vector<unsigned long>& label_,\n                const feature_extractor& fe_,\n                const matrix<double,0,1>& weights_,\n                const std::vector<double>& loss_values_\n            ) :\n                sequence(sequence_),\n                label(label_),\n                fe(fe_),\n                weights(weights_),\n                loss_values(loss_values_)\n            {\n            }\n\n            unsigned long number_of_nodes(\n            ) const\n            {\n                return sequence.size();\n            }\n\n            template <\n                typename EXP \n                >\n            double factor_value (\n                unsigned long node_id,\n                const matrix_exp<EXP>& node_states\n            ) const\n            {\n                if (dlib::impl::call_reject_labeling_if_exists(fe, sequence,  node_states, node_id))\n                    return -std::numeric_limits<double>::infinity();\n\n                double loss = 0;\n                if (node_states(0) != label[node_id])\n                    loss = loss_values[label[node_id]];\n\n                return fe_helpers::dot(weights, fe, sequence, node_states, node_id) + loss;\n            }\n\n            const sequence_type& sequence;\n            const std::vector<unsigned long>& label;\n            const feature_extractor& fe;\n            const matrix<double,0,1>& weights;\n            const std::vector<double>& loss_values;\n        };\n\n        virtual void separation_oracle (\n            const long idx,\n            const matrix_type& current_solution,\n            scalar_type& loss,\n            feature_vector_type& psi\n        ) const\n        {\n            std::vector<unsigned long> y;\n            find_max_factor_graph_viterbi(map_prob(samples[idx],labels[idx],fe,current_solution,loss_values), y);\n\n            loss = 0;\n            for (unsigned long i = 0; i < y.size(); ++i)\n            {\n                if (y[i] != labels[idx][i])\n                    loss += loss_values[labels[idx][i]];\n            }\n\n            get_joint_feature_vector(samples[idx], y, psi);\n        }\n\n        const std::vector<sequence_type>& samples;\n        const std::vector<std::vector<unsigned long> >& labels;\n        const feature_extractor& fe;\n        std::vector<double> loss_values;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_SEQUENCE_LaBELING_PROBLEM_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_svm_sequence_labeling_problem_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_SVM_SEQUENCE_LaBELING_PROBLEM_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_SVM_SEQUENCE_LaBELING_PROBLEM_ABSTRACT_Hh_\n\n\n#include \"../matrix.h\"\n#include <vector>\n#include \"structural_svm_problem_threaded_abstract.h\"\n#include \"sequence_labeler_abstract.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    template <\n        typename feature_extractor\n        >\n    class structural_svm_sequence_labeling_problem : noncopyable,\n                                                     public structural_svm_problem_threaded<matrix<double,0,1>, \n                                                            std::vector<std::pair<unsigned long,double> > >\n    {\n        /*!\n            REQUIREMENTS ON feature_extractor\n                It must be an object that implements an interface compatible with \n                the example_feature_extractor defined in dlib/svm/sequence_labeler_abstract.h.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning the weight vector needed to use\n                a sequence_labeler object.  \n\n                It learns the parameter vector by formulating the problem as a structural \n                SVM problem.  The general approach is discussed in the paper:\n                    Hidden Markov Support Vector Machines by \n                    Y. Altun, I. Tsochantaridis, T. Hofmann\n                While the particular optimization strategy used is the method from: \n                    T. Joachims, T. Finley, Chun-Nam Yu, Cutting-Plane Training of \n                    Structural SVMs, Machine Learning, 77(1):27-59, 2009.\n        !*/\n\n    public:\n        typedef typename feature_extractor::sequence_type sequence_type;\n\n        structural_svm_sequence_labeling_problem(\n            const std::vector<sequence_type>& samples,\n            const std::vector<std::vector<unsigned long> >& labels,\n            const feature_extractor& fe,\n            unsigned long num_threads = 2\n        );\n        /*!\n            requires\n                - is_sequence_labeling_problem(samples, labels) == true\n                - contains_invalid_labeling(fe, samples, labels) == false\n                - for all valid i and j: labels[i][j] < fe.num_labels()\n            ensures\n                - This object attempts to learn a mapping from the given samples to the \n                  given labels.  In particular, it attempts to learn to predict labels[i] \n                  based on samples[i].  Or in other words, this object can be used to learn \n                  a parameter vector, w, such that a sequence_labeler declared as:\n                    sequence_labeler<feature_extractor> labeler(w,fe)\n                  results in a labeler object which attempts to compute the following mapping:\n                    labels[i] == labeler(samples[i])\n                - This object will use num_threads threads during the optimization \n                  procedure.  You should set this parameter equal to the number of \n                  available processing cores on your machine.\n                - #num_labels() == fe.num_labels()\n                - for all valid i: #get_loss(i) == 1\n        !*/\n\n        unsigned long num_labels (\n        ) const;\n        /*!\n            ensures\n                - returns the number of possible labels in this learning problem\n        !*/\n\n        double get_loss (\n            unsigned long label\n        ) const;\n        /*!\n            requires\n                - label < num_labels()\n            ensures\n                - returns the loss incurred when a sequence element with the given\n                  label is misclassified.  This value controls how much we care about\n                  correctly classifying this type of label.  Larger loss values indicate\n                  that we care more strongly than smaller values.\n        !*/\n\n        void set_loss (\n            unsigned long label,\n            double value\n        );\n        /*!\n            requires\n                - label < num_labels()\n                - value >= 0\n            ensures\n                - #get_loss(label) == value\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_SVM_SEQUENCE_LaBELING_PROBLEM_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_track_association_trainer.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_STRUCTURAL_TRACK_ASSOCIATION_TRAnER_Hh_\n#define DLIB_STRUCTURAL_TRACK_ASSOCIATION_TRAnER_Hh_\n\n#include \"structural_track_association_trainer_abstract.h\"\n#include \"../algs.h\"\n#include \"svm.h\"\n#include <utility>\n#include \"track_association_function.h\"\n#include \"structural_assignment_trainer.h\"\n#include <map>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <\n            typename detection_type,\n            typename label_type\n            >\n        std::vector<detection_type> get_unlabeled_dets (\n            const std::vector<labeled_detection<detection_type,label_type> >& dets\n        )\n        {\n            std::vector<detection_type> temp;\n            temp.reserve(dets.size());\n            for (unsigned long i = 0; i < dets.size(); ++i)\n                temp.push_back(dets[i].det);\n            return temp;\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class structural_track_association_trainer\n    {\n    public:\n\n        structural_track_association_trainer (\n        )  \n        {\n            set_defaults();\n        }\n\n        void set_num_threads (\n            unsigned long num\n        )\n        {\n            num_threads = num;\n        }\n\n        unsigned long get_num_threads (\n        ) const\n        {\n            return num_threads;\n        }\n\n        void set_epsilon (\n            double eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void structural_track_association_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        double get_epsilon (\n        ) const { return eps; }\n\n        void set_max_cache_size (\n            unsigned long max_size\n        )\n        {\n            max_cache_size = max_size;\n        }\n\n        unsigned long get_max_cache_size (\n        ) const\n        {\n            return max_cache_size; \n        }\n\n        void set_loss_per_false_association (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss > 0, \n                \"\\t void structural_track_association_trainer::set_loss_per_false_association(loss)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t loss: \" << loss\n                << \"\\n\\t this: \" << this\n                );\n\n            loss_per_false_association = loss;\n        }\n\n        double get_loss_per_false_association (\n        ) const\n        {\n            return loss_per_false_association;\n        }\n\n        void set_loss_per_track_break (\n            double loss\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(loss > 0, \n                \"\\t void structural_track_association_trainer::set_loss_per_track_break(loss)\"\n                << \"\\n\\t Invalid inputs were given to this function \"\n                << \"\\n\\t loss: \" << loss\n                << \"\\n\\t this: \" << this\n                );\n\n            loss_per_track_break = loss;\n        }\n\n        double get_loss_per_track_break (\n        ) const\n        {\n            return loss_per_track_break;\n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            solver = item;\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return solver;\n        }\n\n        void set_c (\n            double C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void structural_track_association_trainer::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        double get_c (\n        ) const\n        {\n            return C;\n        }\n\n        bool learns_nonnegative_weights (\n        ) const { return learn_nonnegative_weights; }\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        )\n        {\n            learn_nonnegative_weights = value;\n        }\n\n        template <\n            typename detection_type,\n            typename label_type\n            >\n        const track_association_function<detection_type> train (  \n            const std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > >& samples\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_track_association_problem(samples),\n                        \"\\t track_association_function structural_track_association_trainer::train()\"\n                        << \"\\n\\t invalid inputs were given to this function\"\n                        << \"\\n\\t is_track_association_problem(samples): \" << is_track_association_problem(samples)\n            );\n\n            typedef typename detection_type::track_type track_type;\n\n            const unsigned long num_dims = find_num_dims(samples);\n\n            feature_extractor_track_association<detection_type> fe(num_dims, learn_nonnegative_weights?num_dims:0);\n            structural_assignment_trainer<feature_extractor_track_association<detection_type> > trainer(fe);\n\n\n            if (verbose)\n                trainer.be_verbose();\n\n            trainer.set_c(C);\n            trainer.set_epsilon(eps);\n            trainer.set_max_cache_size(max_cache_size);\n            trainer.set_num_threads(num_threads);\n            trainer.set_oca(solver);\n            trainer.set_loss_per_missed_association(loss_per_track_break);\n            trainer.set_loss_per_false_association(loss_per_false_association);\n\n            std::vector<std::pair<std::vector<detection_type>, std::vector<track_type> > > assignment_samples;\n            std::vector<std::vector<long> > labels;\n            for (unsigned long i = 0; i < samples.size(); ++i)\n                convert_dets_to_association_sets(samples[i], assignment_samples, labels);\n\n\n            return track_association_function<detection_type>(trainer.train(assignment_samples, labels));\n        }\n\n        template <\n            typename detection_type,\n            typename label_type\n            >\n        const track_association_function<detection_type> train (  \n            const std::vector<std::vector<labeled_detection<detection_type,label_type> > >& sample\n        ) const\n        {\n            std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > > samples;\n            samples.push_back(sample);\n            return train(samples);\n        }\n\n    private:\n\n        template <\n            typename detection_type,\n            typename label_type\n            >\n        static unsigned long find_num_dims (\n            const std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > >& samples\n        )\n        {\n            typedef typename detection_type::track_type track_type;\n            // find a detection_type object so we can call get_similarity_features() and\n            // find out how big the feature vectors are.\n\n            // for all detection histories \n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                // for all time instances in the detection history\n                for (unsigned j = 0; j < samples[i].size(); ++j)\n                {\n                    if (samples[i][j].size() > 0)\n                    {\n                        track_type new_track;\n                        new_track.update_track(samples[i][j][0].det);\n                        typename track_type::feature_vector_type feats;\n                        new_track.get_similarity_features(samples[i][j][0].det, feats);\n                        return feats.size();\n                    }\n                }\n            }\n\n            DLIB_CASSERT(false, \n                \"No detection objects were given in the call to dlib::structural_track_association_trainer::train()\");\n        }\n\n        template <\n            typename detections_at_single_time_step,\n            typename detection_type,\n            typename track_type\n            >\n        static void convert_dets_to_association_sets (\n            const std::vector<detections_at_single_time_step>& det_history,\n            std::vector<std::pair<std::vector<detection_type>, std::vector<track_type> > >& data,\n            std::vector<std::vector<long> >& labels\n        ) \n        {\n            if (det_history.size() < 1)\n                return;\n\n            typedef typename detections_at_single_time_step::value_type::label_type label_type;\n            std::vector<track_type> tracks;\n            // track_labels maps from detection labels to the index in tracks.  So track\n            // with detection label X is at tracks[track_labels[X]].\n            std::map<label_type,unsigned long> track_labels;\n            add_dets_to_tracks(tracks, track_labels, det_history[0]);\n\n            using namespace impl;\n            for (unsigned long i = 1; i < det_history.size(); ++i)\n            {\n                data.push_back(std::make_pair(get_unlabeled_dets(det_history[i]), tracks));\n                labels.push_back(get_association_labels(det_history[i], track_labels));\n                add_dets_to_tracks(tracks, track_labels, det_history[i]);\n            }\n        }\n\n        template <\n            typename labeled_detection,\n            typename label_type\n            >\n        static std::vector<long> get_association_labels(\n            const std::vector<labeled_detection>& dets,\n            const std::map<label_type,unsigned long>& track_labels\n        )\n        {\n            std::vector<long> assoc(dets.size(),-1);\n            // find out which detections associate to what tracks\n            for (unsigned long i = 0; i < dets.size(); ++i)\n            {\n                typename std::map<label_type,unsigned long>::const_iterator j;\n                j = track_labels.find(dets[i].label);\n                // If this detection matches one of the tracks then record which track it\n                // matched with.\n                if (j != track_labels.end())\n                    assoc[i] = j->second;\n            }\n            return assoc;\n        }\n\n        template <\n            typename track_type,\n            typename label_type,\n            typename labeled_detection\n            >\n        static void add_dets_to_tracks (\n            std::vector<track_type>& tracks,\n            std::map<label_type,unsigned long>& track_labels,\n            const std::vector<labeled_detection>& dets\n        )\n        {\n            std::vector<bool> updated_track(tracks.size(), false);\n\n            // first assign the dets to the tracks\n            for (unsigned long i = 0; i < dets.size(); ++i)\n            {\n                const label_type& label = dets[i].label;\n                if (track_labels.count(label))\n                {\n                    const unsigned long track_idx = track_labels[label];\n                    tracks[track_idx].update_track(dets[i].det);\n                    updated_track[track_idx] = true;\n                }\n                else\n                {\n                    // this detection creates a new track\n                    track_type new_track;\n                    new_track.update_track(dets[i].det);\n                    tracks.push_back(new_track);\n                    track_labels[label] = tracks.size()-1;\n                }\n\n            }\n\n            // Now propagate all the tracks that didn't get any detections.\n            for (unsigned long i = 0; i < updated_track.size(); ++i)\n            {\n                if (!updated_track[i])\n                    tracks[i].propagate_track();\n            }\n        }\n\n        double C;\n        oca solver;\n        double eps;\n        bool verbose;\n        unsigned long num_threads;\n        unsigned long max_cache_size;\n        bool learn_nonnegative_weights;\n        double loss_per_track_break;\n        double loss_per_false_association;\n\n        void set_defaults ()\n        {\n            C = 100;\n            verbose = false;\n            eps = 0.001;\n            num_threads = 2;\n            max_cache_size = 5;\n            learn_nonnegative_weights = false;\n            loss_per_track_break = 1;\n            loss_per_false_association = 1;\n        }\n    };\n\n}\n\n#endif // DLIB_STRUCTURAL_TRACK_ASSOCIATION_TRAnER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/structural_track_association_trainer_abstract.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_STRUCTURAL_TRACK_ASSOCIATION_TRAnER_ABSTRACT_Hh_\n#ifdef DLIB_STRUCTURAL_TRACK_ASSOCIATION_TRAnER_ABSTRACT_Hh_\n\n#include \"track_association_function_abstract.h\"\n#include \"structural_assignment_trainer_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class structural_track_association_trainer\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool for learning to solve a track association problem.  That \n                is, it takes in a set of training data and outputs a track_association_function \n                you can use to do detection to track association.  The training data takes the\n                form of a set or sets of \"track histories\".  Each track history is a\n                std::vector where each element contains all the detections from a single time\n                step.  Moreover, each detection has a label that uniquely identifies which\n                object (e.g. person or whatever) the detection really corresponds to.  That is,\n                the labels indicate the correct detection to track associations.  The goal of\n                this object is then to produce a track_association_function that can perform a\n                correct detection to track association at each time step.\n        !*/\n\n    public:\n\n        structural_track_association_trainer (\n        );  \n        /*!\n            ensures\n                - #get_c() == 100\n                - this object isn't verbose\n                - #get_epsilon() == 0.001\n                - #get_num_threads() == 2\n                - #get_max_cache_size() == 5\n                - #learns_nonnegative_weights() == false\n                - #get_loss_per_track_break() == 1\n                - #get_loss_per_false_association() == 1\n        !*/\n\n        void set_num_threads (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #get_num_threads() == num\n        !*/\n\n        unsigned long get_num_threads (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads used during training.  You should \n                  usually set this equal to the number of processing cores on your\n                  machine.\n        !*/\n\n        void set_epsilon (\n            double eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps\n        !*/\n\n        double get_epsilon (\n        ) const; \n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer to\n                  train.  You can think of this epsilon value as saying \"solve the\n                  optimization problem until the average number of association mistakes per\n                  time step is within epsilon of its optimal value\".\n        !*/\n\n        void set_max_cache_size (\n            unsigned long max_size\n        );\n        /*!\n            ensures\n                - #get_max_cache_size() == max_size\n        !*/\n\n        unsigned long get_max_cache_size (\n        ) const;\n        /*!\n            ensures\n                - During training, this object basically runs the track_association_function on \n                  each training sample, over and over.  To speed this up, it is possible to \n                  cache the results of these invocations.  This function returns the number \n                  of cache elements per training sample kept in the cache.  Note that a value \n                  of 0 means caching is not used at all.  \n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a user can\n                  observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_loss_per_false_association (\n            double loss\n        );\n        /*!\n            requires\n                - loss > 0\n            ensures\n                - #get_loss_per_false_association() == loss\n        !*/\n\n        double get_loss_per_false_association (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss experienced for assigning a detection to the\n                  wrong track.  If you care more about avoiding false associations than\n                  avoiding track breaks then you can increase this value.\n        !*/\n\n        void set_loss_per_track_break (\n            double loss\n        );\n        /*!\n            requires\n                - loss > 0\n            ensures\n                - #get_loss_per_track_break() == loss\n        !*/\n\n        double get_loss_per_track_break (\n        ) const;\n        /*!\n            ensures\n                - returns the amount of loss experienced for incorrectly assigning a\n                  detection to a new track instead of assigning it to its existing track.\n                  If you care more about avoiding track breaks than avoiding things like\n                  track swaps then you can increase this value.\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - Internally this object treats track association learning as a structural\n                  SVM problem.  This routine returns a copy of the optimizer used to solve\n                  the structural SVM problem.  \n        !*/\n\n        void set_c (\n            double C\n        );\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter that\n                  determines the trade-off between trying to fit the training data (i.e.\n                  minimize the loss) or allowing more errors but hopefully improving the\n                  generalization of the resulting track_association_function.  Larger\n                  values encourage exact fitting while smaller values of C may encourage\n                  better generalization. \n        !*/\n\n        double get_c (\n        ) const;\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() = C\n        !*/\n\n        bool learns_nonnegative_weights (\n        ) const; \n        /*!\n            ensures\n                - Ultimately, the output of training is a parameter vector that defines the\n                  behavior of the track_association_function.  If\n                  learns_nonnegative_weights() == true then the resulting learned parameter\n                  vector will always have non-negative entries.\n        !*/\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        );\n        /*!\n            ensures\n                - #learns_nonnegative_weights() == value\n        !*/\n\n        template <\n            typename detection_type,\n            typename label_type\n            >\n        const track_association_function<detection_type> train (  \n            const std::vector<std::vector<labeled_detection<detection_type,label_type> > >& sample\n        ) const;\n        /*!\n            requires\n                - is_track_association_problem(sample) == true\n            ensures\n                - This function attempts to learn to do track association from the given\n                  training data.  Note that we interpret sample as a single track history such\n                  that sample[0] are all detections from the first time step, then sample[1]\n                  are detections from the second time step, and so on.  \n                - returns a function F such that:\n                    - Executing F(tracks, detections) will try to correctly associate the\n                      contents of detections to the contents of tracks and perform track\n                      updating and creation.\n                    - if (learns_nonnegative_weights() == true) then\n                        - min(F.get_assignment_function().get_weights()) >= 0\n        !*/\n\n        template <\n            typename detection_type,\n            typename label_type\n            >\n        const track_association_function<detection_type> train (  \n            const std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > >& sample\n        ) const;\n        /*!\n            requires\n                - is_track_association_problem(samples) == true\n            ensures\n                - This function attempts to learn to do track association from the given\n                  training data.  In this case, we take a set of track histories as\n                  training data instead of just one track history as with the above train()\n                  method.\n                - returns a function F such that:\n                    - Executing F(tracks, detections) will try to correctly associate the\n                      contents of detections to the contents of tracks and perform track\n                      updating and creation.\n                    - if (learns_nonnegative_weights() == true) then\n                        - min(F.get_assignment_function().get_weights()) >= 0\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_STRUCTURAL_TRACK_ASSOCIATION_TRAnER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_\n#define DLIB_SVm_\n\n#include \"svm_abstract.h\"\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"../rand.h\"\n#include \"../std_allocator.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"../enable_if.h\"\n#include \"../optimization.h\"\n#include \"svm_nu_trainer.h\"\n#include <vector>\n#include <set>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    inline bool is_learning_problem_impl (\n        const T& x,\n        const U& x_labels\n    )\n    {\n        return is_col_vector(x) && \n               is_col_vector(x_labels) && \n               x.size() == x_labels.size() && \n               x.size() > 0;\n    }\n\n    template <\n        typename T,\n        typename U\n        >\n    inline bool is_learning_problem (\n        const T& x,\n        const U& x_labels\n    )\n    {\n        return is_learning_problem_impl(mat(x), mat(x_labels));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    bool is_binary_classification_problem_impl (\n        const T& x,\n        const U& x_labels\n    )\n    {\n        bool seen_neg_class = false;\n        bool seen_pos_class = false;\n\n        if (is_learning_problem_impl(x,x_labels) == false)\n            return false;\n\n        if (x.size() <= 1) return false;\n\n        for (long r = 0; r < x_labels.nr(); ++r)\n        {\n            if (x_labels(r) != -1 && x_labels(r) != 1)\n                return false;\n\n            if (x_labels(r) == 1)\n                seen_pos_class = true;\n            if (x_labels(r) == -1)\n                seen_neg_class = true;\n        }\n\n        return seen_pos_class && seen_neg_class;\n    }\n\n    template <\n        typename T,\n        typename U\n        >\n    bool is_binary_classification_problem (\n        const T& x,\n        const U& x_labels\n    )\n    {\n        return is_binary_classification_problem_impl(mat(x), mat(x_labels));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dec_funct_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    const matrix<double,1,2> test_binary_decision_function_impl (\n        const dec_funct_type& dec_funct,\n        const in_sample_vector_type& x_test,\n        const in_scalar_vector_type& y_test\n    )\n    {\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT( is_binary_classification_problem(x_test,y_test) == true,\n                    \"\\tmatrix test_binary_decision_function()\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t is_binary_classification_problem(x_test,y_test): \" \n                    << ((is_binary_classification_problem(x_test,y_test))? \"true\":\"false\"));\n\n\n        // count the number of positive and negative examples\n        long num_pos = 0;\n        long num_neg = 0;\n\n\n        long num_pos_correct = 0;\n        long num_neg_correct = 0;\n\n\n        // now test this trained object \n        for (long i = 0; i < x_test.nr(); ++i)\n        {\n            // if this is a positive example\n            if (y_test(i) == +1.0)\n            {\n                ++num_pos;\n                if (dec_funct(x_test(i)) >= 0)\n                    ++num_pos_correct;\n            }\n            else if (y_test(i) == -1.0)\n            {\n                ++num_neg;\n                if (dec_funct(x_test(i)) < 0)\n                    ++num_neg_correct;\n            }\n            else\n            {\n                throw dlib::error(\"invalid input labels to the test_binary_decision_function() function\");\n            }\n        }\n\n\n        matrix<double, 1, 2> res;\n        res(0) = (double)num_pos_correct/(double)(num_pos); \n        res(1) = (double)num_neg_correct/(double)(num_neg); \n        return res;\n    }\n\n    template <\n        typename dec_funct_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    const matrix<double,1,2> test_binary_decision_function (\n        const dec_funct_type& dec_funct,\n        const in_sample_vector_type& x_test,\n        const in_scalar_vector_type& y_test\n    )\n    {\n        return test_binary_decision_function_impl(dec_funct,\n                                 mat(x_test),\n                                 mat(y_test));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sequence_type \n        >\n    bool is_sequence_labeling_problem (\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<unsigned long> >& labels\n    )\n    {\n        if (is_learning_problem(samples, labels))\n        {\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                if (samples[i].size() != labels[i].size())\n                    return false;\n            }\n            return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sequence_type \n        >\n    bool is_sequence_segmentation_problem (\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<std::pair<unsigned long,unsigned long> > >& segments\n    )\n    {\n        if (is_learning_problem(samples, segments))\n        {\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                // Make sure the segments are inside samples[i] and don't overlap with each\n                // other.\n                std::vector<bool> hits(samples[i].size(), false);\n                for (unsigned long j = 0; j < segments[i].size(); ++j)\n                {\n                    const unsigned long begin = segments[i][j].first;\n                    const unsigned long end = segments[i][j].second;\n                    // if the segment is outside the sequence\n                    if (end > samples[i].size())\n                        return false;\n\n                    if (begin >= end)\n                        return false;\n\n                    // check for overlap\n                    for (unsigned long k = begin; k < end; ++k)\n                    {\n                        if (hits[k])\n                            return false;\n                        hits[k] = true;\n                    }\n                }\n            }\n            return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lhs_type, \n        typename rhs_type\n        >\n    bool is_assignment_problem (\n        const std::vector<std::pair<std::vector<lhs_type>, std::vector<rhs_type> > >& samples,\n        const std::vector<std::vector<long> >& labels\n    )\n    {\n        std::vector<bool> seen_label;\n\n        if (is_learning_problem(samples, labels))\n        {\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                if (samples[i].first.size() != labels[i].size())\n                    return false;\n\n                seen_label.assign(samples[i].second.size(), false);\n\n                for (unsigned long j = 0; j < labels[i].size(); ++j)\n                {\n                    if (!(-1 <= labels[i][j] && labels[i][j] < (long)samples[i].second.size()))\n                        return false;\n\n                    if (labels[i][j] != -1)\n                    {\n                        // check label uniqueness\n                        if (seen_label[labels[i][j]])\n                            return false;\n\n                        seen_label[labels[i][j]] = true;\n                    }\n                }\n            }\n            return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lhs_type, \n        typename rhs_type\n        >\n    bool is_forced_assignment_problem (\n        const std::vector<std::pair<std::vector<lhs_type>, std::vector<rhs_type> > >& samples,\n        const std::vector<std::vector<long> >& labels\n    )\n    {\n        if (is_assignment_problem(samples, labels))\n        {\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                const unsigned long N = sum(mat(labels[i]) != -1);\n                if (std::min(samples[i].first.size(), samples[i].second.size()) != N)\n                    return false;\n            }\n            return true;\n        }\n\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename detection_type_,\n        typename label_type_ = long\n        >\n    struct labeled_detection\n    {\n        typedef detection_type_ detection_type;\n        typedef label_type_ label_type;\n        detection_type det;\n        label_type label;\n    };\n\n    template <\n        typename detection_type_,\n        typename label_type_ \n        >\n    inline void serialize ( const labeled_detection<detection_type_,label_type_>& item, std::ostream& out)\n    {\n        serialize(item.det, out);\n        serialize(item.label, out);\n    }\n\n    template <\n        typename detection_type_,\n        typename label_type_ \n        >\n    inline void deserialize (labeled_detection<detection_type_,label_type_>& item, std::istream& in)\n    {\n        deserialize(item.det, in);\n        deserialize(item.label, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename detection_type, \n        typename label_type \n        >\n    bool is_track_association_problem (\n        const std::vector<std::vector<labeled_detection<detection_type,label_type> > >& samples\n    )\n    {\n        if (samples.size() == 0)\n            return false;\n\n        unsigned long num_nonzero_elements = 0;\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            if (samples.size() > 0)\n                ++num_nonzero_elements;\n        }\n        if (num_nonzero_elements < 2)\n            return false;\n\n        // now make sure the label_type values are unique within each time step.\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            std::set<label_type> vals;\n            for (unsigned long j = 0; j < samples[i].size(); ++j)\n                vals.insert(samples[i][j].label);\n            if (vals.size() != samples[i].size())\n                return false;\n        }\n\n        // passed all tests so it's good\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename detection_type, \n        typename label_type \n        >\n    bool is_track_association_problem (\n        const std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > >& samples\n    )\n    {\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            if (!is_track_association_problem(samples[i]))\n                return false;\n        }\n\n        // passed all tests so it's good\n        return true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    const matrix<double, 1, 2, typename trainer_type::mem_manager_type> \n    cross_validate_trainer_impl (\n        const trainer_type& trainer,\n        const in_sample_vector_type& x,\n        const in_scalar_vector_type& y,\n        const long folds\n    )\n    {\n        typedef typename in_scalar_vector_type::value_type scalar_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n        typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_binary_classification_problem(x,y) == true &&\n                    1 < folds && folds <= std::min(sum(y>0),sum(y<0)),\n            \"\\tmatrix cross_validate_trainer()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t std::min(sum(y>0),sum(y<0)): \" << std::min(sum(y>0),sum(y<0))\n            << \"\\n\\t folds:  \" << folds \n            << \"\\n\\t is_binary_classification_problem(x,y): \" << ((is_binary_classification_problem(x,y))? \"true\":\"false\")\n            );\n\n\n        // count the number of positive and negative examples\n        long num_pos = 0;\n        long num_neg = 0;\n        for (long r = 0; r < y.nr(); ++r)\n        {\n            if (y(r) == +1.0)\n                ++num_pos;\n            else\n                ++num_neg;\n        }\n\n        // figure out how many positive and negative examples we will have in each fold\n        const long num_pos_test_samples = num_pos/folds; \n        const long num_pos_train_samples = num_pos - num_pos_test_samples; \n        const long num_neg_test_samples = num_neg/folds; \n        const long num_neg_train_samples = num_neg - num_neg_test_samples; \n\n\n        matrix<long,0,1> x_test, x_train;\n        scalar_vector_type y_test, y_train;\n        x_test.set_size (num_pos_test_samples  + num_neg_test_samples);\n        y_test.set_size (num_pos_test_samples  + num_neg_test_samples);\n        x_train.set_size(num_pos_train_samples + num_neg_train_samples);\n        y_train.set_size(num_pos_train_samples + num_neg_train_samples);\n\n        long pos_idx = 0;\n        long neg_idx = 0;\n\n        matrix<double, 1, 2, mem_manager_type> res;\n        set_all_elements(res,0);\n\n        for (long i = 0; i < folds; ++i)\n        {\n            long cur = 0;\n\n            // load up our positive test samples\n            while (cur < num_pos_test_samples)\n            {\n                if (y(pos_idx) == +1.0)\n                {\n                    x_test(cur) = pos_idx;\n                    y_test(cur) = +1.0;\n                    ++cur;\n                }\n                pos_idx = (pos_idx+1)%x.nr();\n            }\n\n            // load up our negative test samples\n            while (cur < x_test.nr())\n            {\n                if (y(neg_idx) == -1.0)\n                {\n                    x_test(cur) = neg_idx;\n                    y_test(cur) = -1.0;\n                    ++cur;\n                }\n                neg_idx = (neg_idx+1)%x.nr();\n            }\n\n            // load the training data from the data following whatever we loaded\n            // as the testing data\n            long train_pos_idx = pos_idx;\n            long train_neg_idx = neg_idx;\n            cur = 0;\n\n            // load up our positive train samples\n            while (cur < num_pos_train_samples)\n            {\n                if (y(train_pos_idx) == +1.0)\n                {\n                    x_train(cur) = train_pos_idx;\n                    y_train(cur) = +1.0;\n                    ++cur;\n                }\n                train_pos_idx = (train_pos_idx+1)%x.nr();\n            }\n\n            // load up our negative train samples\n            while (cur < x_train.nr())\n            {\n                if (y(train_neg_idx) == -1.0)\n                {\n                    x_train(cur) = train_neg_idx;\n                    y_train(cur) = -1.0;\n                    ++cur;\n                }\n                train_neg_idx = (train_neg_idx+1)%x.nr();\n            }\n\n            try\n            {\n                // do the training and testing\n                res += test_binary_decision_function(trainer.train(rowm(x,x_train),y_train),rowm(x,x_test),y_test);\n            }\n            catch (invalid_nu_error&)\n            {\n                // Just ignore the error in this case since we are going to\n                // interpret an invalid nu value the same as generating a decision\n                // function that miss-classifies everything.\n            }\n\n        } // for (long i = 0; i < folds; ++i)\n\n        return res/(double)folds;\n    }\n\n    template <\n        typename trainer_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    const matrix<double, 1, 2, typename trainer_type::mem_manager_type> \n    cross_validate_trainer (\n        const trainer_type& trainer,\n        const in_sample_vector_type& x,\n        const in_scalar_vector_type& y,\n        const long folds\n    )\n    {\n        return cross_validate_trainer_impl(trainer,\n                                           mat(x),\n                                           mat(y),\n                                           folds);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    namespace prob_impl\n    {\n        template <typename vect_type>\n        struct objective\n        {\n            objective (\n                const vect_type& f_,\n                const vect_type& t_\n            ) : f(f_), t(t_) {}\n\n            double operator() (\n                const matrix<double,2,1>& x\n            ) const\n            {\n                const double A = x(0);\n                const double B = x(1);\n\n                double res = 0;\n                for (unsigned long i = 0; i < f.size(); ++i)\n                {\n                    const double val = A*f[i]+B;\n                    // See the paper \"A Note on Platt's Probabilistic Outputs for Support Vector Machines\"\n                    // for an explanation of why this code looks the way it does (rather than being the \n                    // obvious formula).\n                    if (val < 0)\n                        res += (t[i] - 1)*val + std::log(1 + std::exp(val));\n                    else\n                        res += t[i]*val + std::log(1 + std::exp(-val));\n                }\n\n                return res;\n            }\n\n            const vect_type& f;\n            const vect_type& t;\n        };\n\n        template <typename vect_type>\n        struct der\n        {\n            der (\n                const vect_type& f_,\n                const vect_type& t_\n            ) : f(f_), t(t_) {}\n\n            matrix<double,2,1> operator() (\n                const matrix<double,2,1>& x\n            ) const\n            {\n                const double A = x(0);\n                const double B = x(1);\n\n                double derA = 0;\n                double derB = 0;\n\n                for (unsigned long i = 0; i < f.size(); ++i)\n                {\n                    const double val = A*f[i]+B;\n                    double p;\n                    // compute p = 1/(1+exp(val)) \n                    // but do so in a way that avoids numerical overflow.\n                    if (val < 0)\n                        p = 1.0/(1 + std::exp(val));\n                    else\n                        p = std::exp(-val)/(1 + std::exp(-val));\n\n                    derA += f[i]*(t[i] - p);\n                    derB +=      (t[i] - p);\n                }\n\n                matrix<double,2,1> res;\n                res = derA, derB;\n                return res;\n            }\n\n            const vect_type& f;\n            const vect_type& t;\n        };\n\n        template <typename vect_type>\n        struct hessian \n        {\n            hessian (\n                const vect_type& f_,\n                const vect_type& t_\n            ) : f(f_), t(t_) {}\n\n            matrix<double,2,2> operator() (\n                const matrix<double,2,1>& x\n            ) const\n            {\n                const double A = x(0);\n                const double B = x(1);\n\n                matrix<double,2,2> h;\n                h = 0;\n\n                for (unsigned long i = 0; i < f.size(); ++i)\n                {\n                    const double val = A*f[i]+B;\n                    // compute pp = 1/(1+exp(val)) and\n                    // compute pn = 1 - pp\n                    // but do so in a way that avoids numerical overflow and catastrophic cancellation.\n                    double pp, pn;\n                    if (val < 0)\n                    {\n                        const double temp = std::exp(val);\n                        pp = 1.0/(1 + temp);\n                        pn = temp*pp; \n                    }\n                    else\n                    {\n                        const double temp = std::exp(-val);\n                        pn = 1.0/(1 + temp);\n                        pp = temp*pn; \n                    }\n\n                    h(0,0) += f[i]*f[i]*pp*pn;\n                    const double temp2 = f[i]*pp*pn;\n                    h(0,1) += temp2;\n                    h(1,0) += temp2;\n                    h(1,1) += pp*pn;\n                }\n\n                return h;\n            }\n\n            const vect_type& f;\n            const vect_type& t;\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline double platt_scale (\n        const std::pair<double,double>& params,\n        const double score\n    )\n    {\n        return 1/(1 + std::exp(params.first*score + params.second));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    std::pair<double,double> learn_platt_scaling (\n        const std::vector<T,alloc>& scores,\n        const std::vector<T,alloc>& labels\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_binary_classification_problem(scores,labels) == true,\n            \"\\t std::pair<T,T> learn_platt_scaling()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t scores.size(): \" << scores.size() \n            << \"\\n\\t labels.size(): \" << labels.size() \n            << \"\\n\\t is_binary_classification_problem(scores,labels): \" << is_binary_classification_problem(scores,labels)\n            );\n\n        const T num_pos = sum(mat(labels)>0); \n        const T num_neg = sum(mat(labels)<0);\n        const T hi_target = (num_pos+1)/(num_pos+2);\n        const T lo_target = 1.0/(num_neg+2);\n\n        std::vector<T,alloc> target;\n        for (unsigned long i = 0; i < labels.size(); ++i)\n        {\n            // if this was a positive example\n            if (labels[i] == +1.0)\n            {\n                target.push_back(hi_target);\n            }\n            else if (labels[i] == -1.0)\n            {\n                target.push_back(lo_target);\n            }\n            else\n            {\n                throw dlib::error(\"invalid input labels to the learn_platt_scaling() function.\");\n            }\n        }\n\n        // Now find the maximum likelihood parameters of the sigmoid.  \n\n        prob_impl::objective<std::vector<T,alloc> > obj(scores, target);\n        prob_impl::der<std::vector<T,alloc> > obj_der(scores, target);\n        prob_impl::hessian<std::vector<T,alloc> > obj_hessian(scores, target);\n\n        matrix<double,2,1> val;\n        val = 0;\n        find_min(newton_search_strategy(obj_hessian),\n                 objective_delta_stop_strategy(),\n                 obj,\n                 obj_der,\n                 val,\n                 0);\n\n        const double A = val(0);\n        const double B = val(1);\n\n        return std::make_pair(A,B);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename sample_vector_type,\n        typename label_vector_type\n        >\n    const probabilistic_function<typename trainer_type::trained_function_type> \n    train_probabilistic_decision_function (\n        const trainer_type& trainer,\n        const sample_vector_type& x,\n        const label_vector_type& y,\n        const long folds\n    )\n    {\n        typedef typename sample_vector_type::value_type sample_type;\n        typedef typename label_vector_type::value_type scalar_type;\n\n        /*\n            This function fits a sigmoid function to the output of the \n            svm trained by svm_nu_trainer or a similar trainer.  The \n            technique used is the one described in the papers:\n                \n                Probabilistic Outputs for Support Vector Machines and\n                Comparisons to Regularized Likelihood Methods by \n                John C. Platt.  March 26, 1999\n\n                A Note on Platt's Probabilistic Outputs for Support Vector Machines\n                by Hsuan-Tien Lin, Chih-Jen Lin, and Ruby C. Weng\n        */\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_binary_classification_problem(x,y) == true &&\n                    1 < folds && folds <= (long)x.size(),\n            \"\\tprobabilistic_decision_function train_probabilistic_decision_function()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t x.size(): \" << x.size() \n            << \"\\n\\t y.size(): \" << y.size() \n            << \"\\n\\t folds:  \" << folds \n            << \"\\n\\t is_binary_classification_problem(x,y): \" << is_binary_classification_problem(x,y)\n            );\n\n        // count the number of positive and negative examples\n        const long num_pos = (long)sum(mat(y) > 0);\n        const long num_neg = (long)sum(mat(y) < 0);\n\n        // figure out how many positive and negative examples we will have in each fold\n        const long num_pos_test_samples = num_pos/folds; \n        const long num_pos_train_samples = num_pos - num_pos_test_samples; \n        const long num_neg_test_samples = num_neg/folds; \n        const long num_neg_train_samples = num_neg - num_neg_test_samples; \n\n        typename trainer_type::trained_function_type d;\n        std::vector<sample_type> x_test, x_train;\n        std::vector<scalar_type> y_test, y_train;\n        x_test.resize (num_pos_test_samples  + num_neg_test_samples);\n        y_test.resize (num_pos_test_samples  + num_neg_test_samples);\n        x_train.resize(num_pos_train_samples + num_neg_train_samples);\n        y_train.resize(num_pos_train_samples + num_neg_train_samples);\n\n        std::vector<scalar_type> out, out_label;\n\n        long pos_idx = 0;\n        long neg_idx = 0;\n\n        for (long i = 0; i < folds; ++i)\n        {\n            long cur = 0;\n\n            // load up our positive test samples\n            while (cur < num_pos_test_samples)\n            {\n                if (y[pos_idx] == +1.0)\n                {\n                    x_test[cur] = x[pos_idx];\n                    y_test[cur] = +1.0;\n                    ++cur;\n                }\n                pos_idx = (pos_idx+1)%x.size();\n            }\n\n            // load up our negative test samples\n            while (cur < (long)x_test.size())\n            {\n                if (y[neg_idx] == -1.0)\n                {\n                    x_test[cur] = x[neg_idx];\n                    y_test[cur] = -1.0;\n                    ++cur;\n                }\n                neg_idx = (neg_idx+1)%x.size();\n            }\n\n            // load the training data from the data following whatever we loaded\n            // as the testing data\n            long train_pos_idx = pos_idx;\n            long train_neg_idx = neg_idx;\n            cur = 0;\n\n            // load up our positive train samples\n            while (cur < num_pos_train_samples)\n            {\n                if (y[train_pos_idx] == +1.0)\n                {\n                    x_train[cur] = x[train_pos_idx];\n                    y_train[cur] = +1.0;\n                    ++cur;\n                }\n                train_pos_idx = (train_pos_idx+1)%x.size();\n            }\n\n            // load up our negative train samples\n            while (cur < (long)x_train.size())\n            {\n                if (y[train_neg_idx] == -1.0)\n                {\n                    x_train[cur] = x[train_neg_idx];\n                    y_train[cur] = -1.0;\n                    ++cur;\n                }\n                train_neg_idx = (train_neg_idx+1)%x.size();\n            }\n\n            // do the training\n            d = trainer.train (x_train,y_train);\n\n            // now test this fold \n            for (unsigned long i = 0; i < x_test.size(); ++i)\n            {\n                out.push_back(d(x_test[i]));\n                out_label.push_back(y_test[i]);\n            }\n\n        } // for (long i = 0; i < folds; ++i)\n\n        std::pair<double,double> params = learn_platt_scaling(out, out_label);\n\n        const double A = params.first;\n        const double B = params.second;\n\n        return probabilistic_function<typename trainer_type::trained_function_type>( A, B, trainer.train(x,y) );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename trainer_type>\n    struct trainer_adapter_probabilistic\n    {\n        typedef probabilistic_function<typename trainer_type::trained_function_type> trained_function_type;\n\n        const trainer_type trainer;\n        const long folds;\n\n        trainer_adapter_probabilistic (\n            const trainer_type& trainer_,\n            const long folds_\n        ) : trainer(trainer_),folds(folds_) {}\n\n        template <\n            typename T, \n            typename U\n            >\n        const trained_function_type train (\n            const T& samples,\n            const U& labels\n        ) const\n        {\n            return train_probabilistic_decision_function(trainer, samples, labels, folds);\n        }\n\n    };\n\n    template <\n        typename trainer_type\n        >\n    trainer_adapter_probabilistic<trainer_type> probabilistic (\n        const trainer_type& trainer,\n        const long folds\n    )\n    {\n        return trainer_adapter_probabilistic<trainer_type>(trainer,folds); \n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V,\n        typename rand_type \n        >\n    typename enable_if<is_matrix<T>,void>::type randomize_samples (\n        T& t,\n        U& u,\n        V& v,\n        rand_type& r\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(t) && is_vector(u) && is_vector(v) && u.size() == t.size() &&\n                    u.size() == v.size(),\n            \"\\t randomize_samples(t,u,v)\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t t.size(): \" << t.size()\n            << \"\\n\\t u.size(): \" << u.size()\n            << \"\\n\\t v.size(): \" << v.size()\n            << \"\\n\\t is_vector(t): \" << is_vector(t)\n            << \"\\n\\t is_vector(u): \" << is_vector(u)\n            << \"\\n\\t is_vector(v): \" << is_vector(v)\n            );\n\n        long n = t.size()-1;\n        while (n > 0)\n        {\n            // pick a random index to swap into t[n]\n            const unsigned long idx = r.get_random_32bit_number()%(n+1);\n\n            // swap our randomly selected index into the n position\n            exchange(t(idx), t(n));\n            exchange(u(idx), u(n));\n            exchange(v(idx), v(n));\n\n            --n;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V,\n        typename rand_type\n        >\n    typename disable_if<is_matrix<T>,void>::type randomize_samples (\n        T& t,\n        U& u,\n        V& v,\n        rand_type& r\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(u.size() == t.size() && u.size() == v.size(),\n            \"\\t randomize_samples(t,u,v)\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t t.size(): \" << t.size()\n            << \"\\n\\t u.size(): \" << u.size()\n            << \"\\n\\t v.size(): \" << v.size()\n            );\n\n        long n = t.size()-1;\n        while (n > 0)\n        {\n            // pick a random index to swap into t[n]\n            const unsigned long idx = r.get_random_32bit_number()%(n+1);\n\n            // swap our randomly selected index into the n position\n            exchange(t[idx], t[n]);\n            exchange(u[idx], u[n]);\n            exchange(v[idx], v[n]);\n\n            --n;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V\n        >\n    typename disable_if<is_rand<V>,void>::type randomize_samples (\n        T& t,\n        U& u,\n        V& v\n    )\n    {\n        rand r;\n        randomize_samples(t,u,v,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename rand_type \n        >\n    typename enable_if_c<is_matrix<T>::value && is_rand<rand_type>::value,void>::type randomize_samples (\n        T& t,\n        U& u,\n        rand_type& r\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(t) && is_vector(u) && u.size() == t.size(),\n            \"\\t randomize_samples(t,u)\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t t.size(): \" << t.size()\n            << \"\\n\\t u.size(): \" << u.size()\n            << \"\\n\\t is_vector(t): \" << (is_vector(t)? \"true\" : \"false\")\n            << \"\\n\\t is_vector(u): \" << (is_vector(u)? \"true\" : \"false\")\n            );\n\n        long n = t.size()-1;\n        while (n > 0)\n        {\n            // pick a random index to swap into t[n]\n            const unsigned long idx = r.get_random_32bit_number()%(n+1);\n\n            // swap our randomly selected index into the n position\n            exchange(t(idx), t(n));\n            exchange(u(idx), u(n));\n\n            --n;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename rand_type\n        >\n    typename disable_if_c<is_matrix<T>::value || !is_rand<rand_type>::value,void>::type randomize_samples (\n        T& t,\n        U& u,\n        rand_type& r\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(u.size() == t.size(),\n            \"\\t randomize_samples(t,u)\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t t.size(): \" << t.size()\n            << \"\\n\\t u.size(): \" << u.size()\n            );\n\n        long n = t.size()-1;\n        while (n > 0)\n        {\n            // pick a random index to swap into t[n]\n            const unsigned long idx = r.get_random_32bit_number()%(n+1);\n\n            // swap our randomly selected index into the n position\n            exchange(t[idx], t[n]);\n            exchange(u[idx], u[n]);\n\n            --n;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    typename disable_if<is_rand<U>,void>::type randomize_samples (\n        T& t,\n        U& u\n    )\n    {\n        rand r;\n        randomize_samples(t,u,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename rand_type\n        >\n    typename enable_if_c<is_matrix<T>::value && is_rand<rand_type>::value,void>::type randomize_samples (\n        T& t,\n        rand_type& r\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_vector(t),\n            \"\\t randomize_samples(t)\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t is_vector(t): \" << (is_vector(t)? \"true\" : \"false\")\n            );\n\n        long n = t.size()-1;\n        while (n > 0)\n        {\n            // pick a random index to swap into t[n]\n            const unsigned long idx = r.get_random_32bit_number()%(n+1);\n\n            // swap our randomly selected index into the n position\n            exchange(t(idx), t(n));\n\n            --n;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename rand_type\n        >\n    typename disable_if_c<(is_matrix<T>::value==true)||(is_rand<rand_type>::value==false),void>::type randomize_samples (\n        T& t,\n        rand_type& r\n    )\n    {\n        long n = t.size()-1;\n        while (n > 0)\n        {\n            // pick a random index to swap into t[n]\n            const unsigned long idx = r.get_random_32bit_number()%(n+1);\n\n            // swap our randomly selected index into the n position\n            exchange(t[idx], t[n]);\n\n            --n;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void randomize_samples (\n        T& t\n    )\n    {\n        rand r;\n        randomize_samples(t,r);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_ABSTRACT_\n#ifdef DLIB_SVm_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"svm_nu_trainer_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    bool is_learning_problem (\n        const T& x,\n        const U& x_labels\n    );\n    /*!\n        requires\n            - T == a matrix or something convertible to a matrix via mat()\n            - U == a matrix or something convertible to a matrix via mat()\n        ensures\n            - returns true if all of the following are true and false otherwise:\n                - is_col_vector(x) == true\n                - is_col_vector(x_labels) == true\n                - x.size() == x_labels.size() \n                - x.size() > 0\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    bool is_binary_classification_problem (\n        const T& x,\n        const U& x_labels\n    );\n    /*!\n        requires\n            - T == a matrix or something convertible to a matrix via mat()\n            - U == a matrix or something convertible to a matrix via mat()\n        ensures\n            - returns true if all of the following are true and false otherwise:\n                - is_learning_problem(x, x_labels) == true\n                - x.size() > 1\n                - there exists at least one sample from both the +1 and -1 classes.\n                  (i.e. all samples can't have the same label)\n                - for all valid i:\n                    - x_labels(i) == -1 or +1\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sequence_type \n        >\n    bool is_sequence_labeling_problem (\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<unsigned long> >& labels\n    );\n    /*!\n        ensures\n            - returns true if all of the following are true and false otherwise:\n                - is_learning_problem(samples, labels) == true\n                - for all valid i:\n                    - samples[i].size() == labels[i].size()\n                      (i.e. The size of a label sequence need to match the size of \n                      its corresponding sample sequence)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename sequence_type \n        >\n    bool is_sequence_segmentation_problem (\n        const std::vector<sequence_type>& samples,\n        const std::vector<std::vector<std::pair<unsigned long,unsigned long> > >& segments\n    );\n    /*!\n        ensures\n            - Note that a sequence segmentation problem is a task where you are given a\n              sequence of objects (e.g. words in a sentence) and your task is to find\n              certain types of sub-sequences (e.g. proper names).\n            - returns true if all of the following are true and false otherwise:\n                - is_learning_problem(samples, segments) == true\n                - for all valid i and j:\n                    - We interpret segments[i][j] as defining a half open range starting\n                      with segments[i][j].first and ending just before segments[i][j].second.\n                    - segments[i][j].first < segments[i][j].second\n                    - segments[i][j].second <= samples[i].size()\n                      (i.e. Each segment must be contained within its associated sequence)\n                    - segments[i][j] does not overlap with any of the other ranges in\n                      segments[i].\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lhs_type, \n        typename rhs_type\n        >\n    bool is_assignment_problem (\n        const std::vector<std::pair<std::vector<lhs_type>, std::vector<rhs_type> > >& samples,\n        const std::vector<std::vector<long> >& labels\n    );\n    /*!\n        ensures\n            - Note that an assignment problem is a task to associate each element of samples[i].first\n              to an element of samples[i].second, or to indicate that the element doesn't associate \n              with anything.  Therefore, labels[i] should contain the association information for\n              samples[i].\n            - This function returns true if all of the following are true and false otherwise:\n                - is_learning_problem(samples, labels) == true\n                - for all valid i:\n                    - samples[i].first.size() == labels[i].size()\n                    - for all valid j:\n                        -1 <= labels[i][j] < samples[i].second.size()\n                        (A value of -1 indicates that samples[i].first[j] isn't associated with anything.\n                        All other values indicate the associating element of samples[i].second)\n                    - All elements of labels[i] which are not equal to -1 are unique.  That is,\n                      multiple elements of samples[i].first can't associate to the same element\n                      in samples[i].second.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename lhs_type, \n        typename rhs_type\n        >\n    bool is_forced_assignment_problem (\n        const std::vector<std::pair<std::vector<lhs_type>, std::vector<rhs_type> > >& samples,\n        const std::vector<std::vector<long> >& labels\n    );\n    /*!\n        ensures\n            - A regular assignment problem is allowed to indicate that all elements of \n              samples[i].first don't associate to anything.  However, a forced assignment\n              problem is required to always associate an element of samples[i].first to \n              something in samples[i].second if there is an element of samples[i].second\n              that hasn't already been associated to something.  \n            - This function returns true if all of the following are true and false otherwise:\n                - is_assignment_problem(samples, labels) == true\n                - for all valid i:\n                    - let N denote the number of elements in labels[i] that are not equal to -1.\n                    - min(samples[i].first.size(), samples[i].second.size()) == N\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename detection_type_,\n        typename label_type_ = long\n        >\n    struct labeled_detection\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is a simple object, like std::pair, it just holds two objects.  It\n                serves the same purpose as std::pair except that it has informative names\n                describing its two members and is intended for use with track association\n                problems.\n        !*/\n\n        typedef detection_type_ detection_type;\n        typedef label_type_ label_type;\n\n        detection_type det;\n        label_type label;\n    };\n\n    template <\n        typename detection_type_,\n        typename label_type_ \n        >\n    void serialize (const labeled_detection<detection_type_,label_type_>& item, std::ostream& out);\n    /*!\n        provides serialization support\n    !*/\n\n    template <\n        typename detection_type_,\n        typename label_type_ \n        >\n    void deserialize (labeled_detection<detection_type_,label_type_>& item, std::istream& in);\n    /*!\n        provides deserialization support\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename detection_type, \n        typename label_type \n        >\n    bool is_track_association_problem (\n        const std::vector<std::vector<labeled_detection<detection_type,label_type> > >& samples\n    );\n    /*!\n        ensures\n            - In this tracking model you get a set of detections at each time step and are\n              expected to associate each detection with a track or have it spawn a new\n              track.  Therefore, a track association problem is a machine learning problem\n              where you are given a dataset of example input detections and are expected to\n              learn to perform the proper detection to track association.  \n            - This function checks if samples can form a valid dataset for this machine\n              learning problem and returns true if this is the case.  This means we should\n              interpret samples in the following way:\n                - samples is a track history and for each valid i:\n                    - samples[i] is a set of labeled detections from the i-th time step.\n                      Each detection has been labeled with its \"true object identity\".\n                      That is, all the detection throughout the history with the same\n                      label_type value are detections from the same object and therefore\n                      should be associated to the same track.\n              Putting this all together, samples is a valid track association learning\n              problem if and only if the following are all true:\n                - samples.size() > 0\n                - There are at least two values, i and j such that:\n                    - i != j\n                    - samples[i].size() > 0\n                    - samples[j].size() > 0\n                  Or in other words, there needs to be some detections in samples somewhere\n                  or it is impossible to learn anything.\n                - for all valid i:\n                    - for all valid j and k where j!=k:\n                        - samples[i][j].label != samples[i][k].label\n                          (i.e. the label_type values must be unique within each time step.\n                          Or in other words, you can't have two detections on the same\n                          object in a single time step.)\n    !*/\n\n    template <\n        typename detection_type, \n        typename label_type \n        >\n    bool is_track_association_problem (\n        const std::vector<std::vector<std::vector<labeled_detection<detection_type,label_type> > > >& samples\n    );\n    /*!\n        ensures\n            - returns true if is_track_association_problem(samples[i]) == true for all\n              valid i and false otherwise.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    double platt_scale (\n        const std::pair<double,double>& params,\n        const double score\n    );\n    /*!\n        ensures\n            - returns 1/(1 + std::exp(params.first*score + params.second))\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T, typename alloc>\n    std::pair<double,double> learn_platt_scaling (\n        const std::vector<T,alloc>& scores,\n        const std::vector<T,alloc>& labels\n    );\n    /*!\n        requires\n            - T should be either float, double, or long double \n            - is_binary_classification_problem(scores,labels) == true\n        ensures\n            - This function learns to map scalar values into well calibrated probabilities\n              using Platt scaling.  In particular, it returns a params object such that, \n              for all valid i:\n                - platt_scale(params,scores[i]) == the scaled version of the scalar value\n                  scores[i].  That is, the output is a number between 0 and 1.  In\n                  particular, platt_scale(params,scores[i]) is meant to represent the\n                  probability that labels[i] == +1.\n            - This function is an implementation of the algorithm described in the following\n              papers: \n                Probabilistic Outputs for Support Vector Machines and Comparisons to\n                Regularized Likelihood Methods by John C. Platt.  March 26, 1999\n\n                A Note on Platt's Probabilistic Outputs for Support Vector Machines\n                by Hsuan-Tien Lin, Chih-Jen Lin, and Ruby C. Weng\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename sample_vector_type,\n        typename label_vector_type\n        >\n    const probabilistic_function<typename trainer_type::trained_function_type> \n    train_probabilistic_decision_function (\n        const trainer_type& trainer,\n        const sample_vector_type& x,\n        const label_vector_type& y,\n        const long folds\n    );\n    /*!\n        requires\n            - 1 < folds <= x.size()\n            - is_binary_classification_problem(x,y) == true\n            - x and y must be std::vector objects or types with a compatible interface.\n            - trainer_type == some kind of batch trainer object (e.g. svm_nu_trainer)\n        ensures\n            - trains a classifier given the training samples in x and labels in y.  \n            - returns a probabilistic_decision_function that represents the trained classifier.\n            - The parameters of the probability model are estimated by performing k-fold \n              cross validation. \n            - The number of folds used is given by the folds argument.\n            - This function is implemented using learn_platt_scaling()\n        throws\n            - any exceptions thrown by trainer.train()\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type\n        >\n    trainer_adapter_probabilistic<trainer_type> probabilistic (\n        const trainer_type& trainer,\n        const long folds\n    );\n    /*!\n        requires\n            - 1 < folds <= x.size()\n            - trainer_type == some kind of batch trainer object (e.g. svm_nu_trainer)\n        ensures\n            - returns a trainer adapter TA such that calling TA.train(samples, labels)\n              returns the same object as calling train_probabilistic_decision_function(trainer,samples,labels,folds).\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                  Miscellaneous functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    const matrix<double,1,2> cross_validate_trainer (\n        const trainer_type& trainer,\n        const in_sample_vector_type& x,\n        const in_scalar_vector_type& y,\n        const long folds\n    );\n    /*!\n        requires\n            - is_binary_classification_problem(x,y) == true\n            - 1 < folds <= std::min(sum(y>0),sum(y<0))\n              (e.g. There must be at least as many examples of each class as there are folds)\n            - trainer_type == some kind of binary classification trainer object (e.g. svm_nu_trainer)\n        ensures\n            - performs k-fold cross validation by using the given trainer to solve the\n              given binary classification problem for the given number of folds.\n              Each fold is tested using the output of the trainer and the average \n              classification accuracy from all folds is returned.  \n            - The average accuracy is computed by running test_binary_decision_function()\n              on each fold and its output is averaged and returned.\n            - The number of folds used is given by the folds argument.\n        throws\n            - any exceptions thrown by trainer.train()\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename dec_funct_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    const matrix<double,1,2> test_binary_decision_function (\n        const dec_funct_type& dec_funct,\n        const in_sample_vector_type& x_test,\n        const in_scalar_vector_type& y_test\n    );\n    /*!\n        requires\n            - is_binary_classification_problem(x_test,y_test) == true\n            - dec_funct_type == some kind of decision function object (e.g. decision_function)\n        ensures\n            - Tests the given decision function by calling it on the x_test and y_test samples.\n              The output of dec_funct is interpreted as a prediction for the +1 class\n              if its output is >= 0 and as a prediction for the -1 class otherwise.\n            - The test accuracy is returned in a row vector, let us call it R.  Both \n              quantities in R are numbers between 0 and 1 which represent the fraction \n              of examples correctly classified.  R(0) is the fraction of +1 examples \n              correctly classified and R(1) is the fraction of -1 examples correctly \n              classified.\n        throws\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U\n        >\n    void randomize_samples (\n        T& samples,\n        U& labels \n    );\n    /*!\n        requires\n            - T == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - U == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - if samples or labels are matrix objects then is_vector(samples) == true and\n              is_vector(labels) == true\n            - samples.size() == labels.size()\n        ensures\n            - randomizes the order of the samples and labels but preserves\n              the pairing between each sample and its label\n            - A default initialized random number generator is used to perform the randomizing.\n              Note that this means that each call this this function does the same thing.  \n              That is, the random number generator always uses the same seed.\n            - for all valid i:\n                - let r == the random index samples(i) was moved to.  then:\n                    - #labels(r) == labels(i)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename rand_type\n        >\n    void randomize_samples (\n        T& samples,\n        U& labels,\n        rand_type& rnd\n    );\n    /*!\n        requires\n            - T == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - U == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - if samples or labels are matrix objects then is_vector(samples) == true and\n              is_vector(labels) == true\n            - samples.size() == labels.size()\n            - rand_type == a type that implements the dlib/rand/rand_kernel_abstract.h interface\n        ensures\n            - randomizes the order of the samples and labels but preserves\n              the pairing between each sample and its label\n            - the given rnd random number generator object is used to do the randomizing\n            - for all valid i:\n                - let r == the random index samples(i) was moved to.  then:\n                    - #labels(r) == labels(i)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void randomize_samples (\n        T& samples\n    );\n    /*!\n        requires\n            - T == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - if (samples is a matrix) then \n                - is_vector(samples) == true \n        ensures\n            - randomizes the order of the elements inside samples \n            - A default initialized random number generator is used to perform the randomizing.\n              Note that this means that each call this this function does the same thing.  \n              That is, the random number generator always uses the same seed.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename rand_type\n        >\n    void randomize_samples (\n        T& samples,\n        rand_type& rnd\n    );\n    /*!\n        requires\n            - T == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - rand_type == a type that implements the dlib/rand/rand_kernel_abstract.h interface\n            - if (samples is a matrix) then \n                - is_vector(samples) == true \n        ensures\n            - randomizes the order of the elements inside samples \n            - the given rnd random number generator object is used to do the randomizing\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V\n        >\n    void randomize_samples (\n        T& samples,\n        U& labels,\n        V& auxiliary\n    );\n    /*!\n        requires\n            - T == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - U == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - V == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - if (samples, labels, or auxiliary are matrix objects) then \n                - is_vector(samples) == true \n                - is_vector(labels) == true\n                - is_vector(auxiliary) == true\n            - samples.size() == labels.size() == auxiliary.size()\n        ensures\n            - randomizes the order of the samples, labels, and auxiliary but preserves the\n              pairing between each sample, its label, and its auxiliary value.\n            - A default initialized random number generator is used to perform the\n              randomizing.  Note that this means that each call this this function does the\n              same thing.  That is, the random number generator always uses the same seed.\n            - for all valid i:\n                - let r == the random index samples(i) was moved to.  then:\n                    - #labels(r) == labels(i)\n                    - #auxiliary(r) == auxiliary(i)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        typename U,\n        typename V,\n        typename rand_type\n        >\n    void randomize_samples (\n        T& samples,\n        U& labels,\n        V& auxiliary,\n        rand_type& rnd\n    );\n    /*!\n        requires\n            - T == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - U == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - V == a matrix object or an object compatible with std::vector that contains \n              a swappable type.\n            - if (samples, labels, or auxiliary are matrix objects) then \n                - is_vector(samples) == true \n                - is_vector(labels) == true\n                - is_vector(auxiliary) == true\n            - samples.size() == labels.size() == auxiliary.size()\n            - rand_type == a type that implements the dlib/rand/rand_kernel_abstract.h interface\n        ensures\n            - randomizes the order of the samples, labels, and auxiliary but preserves the\n              pairing between each sample, its label, and its auxiliary value.\n            - the given rnd random number generator object is used to do the randomizing\n            - for all valid i:\n                - let r == the random index samples(i) was moved to.  then:\n                    - #labels(r) == labels(i)\n                    - #auxiliary(r) == auxiliary(i)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_c_ekm_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVM_C_EKm_TRAINER_Hh_\n#define DLIB_SVM_C_EKm_TRAINER_Hh_\n\n#include \"../algs.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"empirical_kernel_map.h\"\n#include \"svm_c_linear_trainer.h\"\n#include \"svm_c_ekm_trainer_abstract.h\"\n#include \"../statistics.h\"\n#include \"../rand.h\"\n#include <vector>\n\nnamespace dlib\n{\n    template <\n        typename K \n        >\n    class svm_c_ekm_trainer\n    {\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_c_ekm_trainer (\n        )\n        {\n            verbose = false;\n            ekm_stale = true;\n\n            initial_basis_size = 10;\n            basis_size_increment = 50;\n            max_basis_size = 300;\n        }\n\n        explicit svm_c_ekm_trainer (\n            const scalar_type& C \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t svm_c_ekm_trainer::svm_c_ekm_trainer()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n\n            ocas.set_c(C);\n            verbose = false;\n            ekm_stale = true;\n\n            initial_basis_size = 10;\n            basis_size_increment = 50;\n            max_basis_size = 300;\n        }\n\n        void set_epsilon (\n            scalar_type eps\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps > 0,\n                \"\\t void svm_c_ekm_trainer::set_epsilon()\"\n                << \"\\n\\t eps must be greater than 0\"\n                << \"\\n\\t eps: \" << eps \n                << \"\\n\\t this: \" << this\n                );\n\n            ocas.set_epsilon(eps);\n        }\n\n        const scalar_type get_epsilon (\n        ) const\n        {\n            return ocas.get_epsilon();\n        }\n\n        void set_max_iterations (\n            unsigned long max_iter\n        )\n        {\n            ocas.set_max_iterations(max_iter);\n        }\n\n        unsigned long get_max_iterations (\n        )\n        {\n            return ocas.get_max_iterations();\n        }\n\n        void be_verbose (\n        ) \n        { \n            verbose = true;\n            ocas.be_quiet(); \n        }\n\n        void be_very_verbose (\n        )\n        {\n            verbose = true;\n            ocas.be_verbose(); \n        }\n\n        void be_quiet (\n        )\n        { \n            verbose = false;\n            ocas.be_quiet(); \n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            ocas.set_oca(item);\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return ocas.get_oca();\n        }\n\n        const kernel_type get_kernel (\n        ) const\n        {\n            return kern;\n        }\n\n        void set_kernel (\n            const kernel_type& k\n        )\n        {\n            kern = k;\n            ekm_stale = true;\n        }\n\n        template <typename T>\n        void set_basis (\n            const T& basis_samples\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(basis_samples.size() > 0 && is_vector(mat(basis_samples)),\n                \"\\tvoid svm_c_ekm_trainer::set_basis(basis_samples)\"\n                << \"\\n\\t You have to give a non-empty set of basis_samples and it must be a vector\"\n                << \"\\n\\t basis_samples.size():                       \" << basis_samples.size() \n                << \"\\n\\t is_vector(mat(basis_samples)): \" << is_vector(mat(basis_samples)) \n                << \"\\n\\t this: \" << this\n                );\n\n            basis = mat(basis_samples);\n            ekm_stale = true;\n        }\n\n        bool basis_loaded(\n        ) const\n        {\n            return (basis.size() != 0);\n        }\n\n        void clear_basis (\n        )\n        {\n            basis.set_size(0);\n            ekm.clear();\n            ekm_stale = true;\n        }\n\n        unsigned long get_max_basis_size (\n        ) const\n        {\n            return max_basis_size;\n        }\n\n        void set_max_basis_size (\n            unsigned long max_basis_size_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(max_basis_size_ > 0,\n                \"\\t void svm_c_ekm_trainer::set_max_basis_size()\"\n                << \"\\n\\t max_basis_size_ must be greater than 0\"\n                << \"\\n\\t max_basis_size_: \" << max_basis_size_ \n                << \"\\n\\t this:            \" << this\n                );\n\n            max_basis_size = max_basis_size_;\n            if (initial_basis_size > max_basis_size)\n                initial_basis_size = max_basis_size;\n        }\n\n        unsigned long get_initial_basis_size (\n        ) const\n        {\n            return initial_basis_size;\n        }\n\n        void set_initial_basis_size (\n            unsigned long initial_basis_size_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(initial_basis_size_ > 0,\n                \"\\t void svm_c_ekm_trainer::set_initial_basis_size()\"\n                << \"\\n\\t initial_basis_size_ must be greater than 0\"\n                << \"\\n\\t initial_basis_size_: \" << initial_basis_size_ \n                << \"\\n\\t this:                \" << this\n                );\n\n            initial_basis_size = initial_basis_size_;\n\n            if (initial_basis_size > max_basis_size)\n                max_basis_size = initial_basis_size;\n        }\n\n        unsigned long get_basis_size_increment (\n        ) const\n        {\n            return basis_size_increment;\n        }\n\n        void set_basis_size_increment (\n            unsigned long basis_size_increment_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(basis_size_increment_ > 0,\n                \"\\t void svm_c_ekm_trainer::set_basis_size_increment()\"\n                << \"\\n\\t basis_size_increment_ must be greater than 0\"\n                << \"\\n\\t basis_size_increment_: \" << basis_size_increment_ \n                << \"\\n\\t this:                  \" << this\n                );\n\n            basis_size_increment = basis_size_increment_;\n        }\n\n        void set_c (\n            scalar_type C \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_ekm_trainer::set_c()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            ocas.set_c(C);\n        }\n\n        const scalar_type get_c_class1 (\n        ) const\n        {\n            return ocas.get_c_class1();\n        }\n\n        const scalar_type get_c_class2 (\n        ) const\n        {\n            return ocas.get_c_class2();\n        }\n\n        void set_c_class1 (\n            scalar_type C\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_ekm_trainer::set_c_class1()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            ocas.set_c_class1(C);\n        }\n\n        void set_c_class2 (\n            scalar_type C\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_ekm_trainer::set_c_class2()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            ocas.set_c_class2(C);\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            scalar_type obj;\n            if (basis_loaded())\n                return do_train_user_basis(mat(x),mat(y),obj);\n            else\n                return do_train_auto_basis(mat(x),mat(y),obj);\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            scalar_type& svm_objective\n        ) const\n        {\n            if (basis_loaded())\n                return do_train_user_basis(mat(x),mat(y),svm_objective);\n            else\n                return do_train_auto_basis(mat(x),mat(y),svm_objective);\n        }\n\n\n    private:\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train_user_basis (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            scalar_type& svm_objective\n        ) const\n        /*!\n            requires\n                - basis_loaded() == true\n            ensures\n                - trains an SVM with the user supplied basis\n        !*/\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_binary_classification_problem(x,y) == true,\n                \"\\t decision_function svm_c_ekm_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t y.nr(): \" << y.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                << \"\\n\\t y.nc(): \" << y.nc() \n                << \"\\n\\t is_binary_classification_problem(x,y): \" << is_binary_classification_problem(x,y)\n                );\n\n            if (ekm_stale)\n            {\n                ekm.load(kern, basis);\n                ekm_stale = false;\n            }\n\n            // project all the samples with the ekm\n            running_stats<scalar_type> rs;\n            std::vector<matrix<scalar_type,0,1, mem_manager_type> > proj_samples;\n            proj_samples.reserve(x.size());\n            for (long i = 0; i < x.size(); ++i)\n            {\n                if (verbose)\n                {\n                    scalar_type err;\n                    proj_samples.push_back(ekm.project(x(i), err));\n                    rs.add(err);\n                }\n                else\n                {\n                    proj_samples.push_back(ekm.project(x(i)));\n                }\n            }\n\n            if (verbose)\n            {\n                std::cout << \"\\nMean EKM projection error:                  \" << rs.mean() << std::endl;\n                std::cout << \"Standard deviation of EKM projection error: \" << rs.stddev() << std::endl;\n            }\n            \n            // now do the training\n            decision_function<linear_kernel<matrix<scalar_type,0,1, mem_manager_type> > > df;\n            df = ocas.train(proj_samples, y, svm_objective);\n\n            if (verbose)\n            {\n                std::cout << \"Final svm objective: \" << svm_objective << std::endl;\n            }\n\n            decision_function<kernel_type> final_df;\n            final_df = ekm.convert_to_decision_function(df.basis_vectors(0));\n            final_df.b = df.b;\n            return final_df;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train_auto_basis (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            scalar_type& svm_objective\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_binary_classification_problem(x,y) == true,\n                \"\\t decision_function svm_c_ekm_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t y.nr(): \" << y.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                << \"\\n\\t y.nc(): \" << y.nc() \n                << \"\\n\\t is_binary_classification_problem(x,y): \" << is_binary_classification_problem(x,y)\n                );\n\n\n            std::vector<matrix<scalar_type,0,1, mem_manager_type> > proj_samples(x.size());\n            decision_function<linear_kernel<matrix<scalar_type,0,1, mem_manager_type> > > df;\n\n            // we will use a linearly_independent_subset_finder to store our basis set. \n            linearly_independent_subset_finder<kernel_type> lisf(get_kernel(), max_basis_size);\n\n            dlib::rand rnd;\n\n            // first pick the initial basis set randomly\n            for (unsigned long i = 0; i < 10*initial_basis_size && lisf.size() < initial_basis_size; ++i)\n            {\n                lisf.add(x(rnd.get_random_32bit_number()%x.size()));\n            }\n\n            ekm.load(lisf);\n\n            // first project all samples into the span of the current basis \n            for (long i = 0; i < x.size(); ++i)\n            {\n                proj_samples[i] = ekm.project(x(i));\n            }\n\n\n            svm_c_linear_trainer<linear_kernel<matrix<scalar_type,0,1,mem_manager_type> > > trainer(ocas);\n\n            const scalar_type min_epsilon = trainer.get_epsilon();\n            // while we are determining what the basis set will be we are going to use a very\n            // lose stopping condition.  We will tighten it back up before producing the\n            // final decision_function.\n            trainer.set_epsilon(0.2);\n\n            scalar_type prev_svm_objective = std::numeric_limits<scalar_type>::max();\n\n            empirical_kernel_map<kernel_type> prev_ekm;\n\n            // This loop is where we try to generate a basis for SVM training.  We will\n            // do this by repeatedly training the SVM and adding a few points which violate the\n            // margin to the basis in each iteration.\n            while (true)\n            {\n                // if the basis is already as big as it's going to get then just do the most\n                // accurate training right now.  \n                if (lisf.size() == max_basis_size)\n                    trainer.set_epsilon(min_epsilon);\n\n                while (true)\n                {\n                    // now do the training.  \n                    df = trainer.train(proj_samples, y, svm_objective);\n\n                    if (svm_objective < prev_svm_objective)\n                        break;\n\n                    // If the training didn't reduce the objective more than last time then\n                    // try lowering the epsilon and doing it again.\n                    if (trainer.get_epsilon() > min_epsilon)\n                    {\n                        trainer.set_epsilon(std::max(trainer.get_epsilon()*0.5, min_epsilon));\n                        if (verbose)\n                            std::cout << \" *** Reducing epsilon to \" << trainer.get_epsilon() << std::endl;\n                    }\n                    else\n                        break;\n                }\n\n                if (verbose)\n                {\n                    std::cout << \"svm objective: \" << svm_objective << std::endl;\n                    std::cout << \"basis size: \" << lisf.size() << std::endl;\n                }\n\n                // if we failed to make progress on this iteration then we are done\n                if (svm_objective >= prev_svm_objective)\n                    break;\n\n                prev_svm_objective = svm_objective;\n\n                // now add more elements to the basis\n                unsigned long count = 0;\n                for (unsigned long j = 0; \n                     (j < 100*basis_size_increment) && (count < basis_size_increment) && (lisf.size() < max_basis_size); \n                     ++j)\n                {\n                    // pick a random sample\n                    const unsigned long idx = rnd.get_random_32bit_number()%x.size();\n                    // If it is a margin violator then it is useful to add it into the basis set.\n                    if (df(proj_samples[idx])*y(idx) < 1)\n                    {\n                        // Add the sample into the basis set if it is linearly independent of all the\n                        // vectors already in the basis set.  \n                        if (lisf.add(x(idx)))\n                        {\n                            ++count;\n                        }\n                    }\n                }\n                // if we couldn't add any more basis vectors then stop\n                if (count == 0)\n                {\n                    if (verbose)\n                        std::cout << \"Stopping, couldn't add more basis vectors.\" << std::endl;\n                    break;\n                }\n\n\n                // Project all the samples into the span of our newly enlarged basis.  We will do this\n                // using the special transformation in the EKM that lets us project from a smaller\n                // basis set to a larger without needing to reevaluate kernel functions we have already\n                // computed.\n                ekm.swap(prev_ekm);\n                ekm.load(lisf);\n                projection_function<kernel_type> proj_part;\n                matrix<double> prev_to_new;\n                prev_ekm.get_transformation_to(ekm, prev_to_new, proj_part);\n\n                \n                matrix<scalar_type,0,1, mem_manager_type> temp;\n                for (long i = 0; i < x.size(); ++i)\n                {\n                    // assign to temporary to avoid memory allocation that would result if we\n                    // assigned this expression straight into proj_samples[i]\n                    temp = prev_to_new*proj_samples[i] + proj_part(x(i));\n                    proj_samples[i] = temp;\n\n                }\n            }\n            \n            // Reproject all the data samples using the final basis.  We could just use what we \n            // already have but the recursive thing done above to compute the proj_samples \n            // might have accumulated a little numerical error.  So lets just be safe.\n            running_stats<scalar_type> rs, rs_margin;\n            for (long i = 0; i < x.size(); ++i)\n            {\n                if (verbose)\n                {\n                    scalar_type err;\n                    proj_samples[i] = ekm.project(x(i),err);\n                    rs.add(err);\n                    // if this point is within the margin \n                    if (df(proj_samples[i])*y(i) < 1)\n                        rs_margin.add(err);\n                }\n                else\n                {\n                    proj_samples[i] = ekm.project(x(i));\n                }\n            }\n\n            // do the final training\n            trainer.set_epsilon(min_epsilon);\n            df = trainer.train(proj_samples, y, svm_objective);\n\n\n            if (verbose)\n            {\n                std::cout << \"\\nMean EKM projection error:                  \" << rs.mean() << std::endl;\n                std::cout << \"Standard deviation of EKM projection error: \" << rs.stddev() << std::endl;\n                std::cout << \"Mean EKM projection error for margin violators:                  \" << rs_margin.mean() << std::endl;\n                std::cout << \"Standard deviation of EKM projection error for margin violators: \" << ((rs_margin.current_n()>1)?rs_margin.stddev():0) << std::endl;\n\n                std::cout << \"Final svm objective: \" << svm_objective << std::endl;\n            }\n\n\n            decision_function<kernel_type> final_df;\n            final_df = ekm.convert_to_decision_function(df.basis_vectors(0));\n            final_df.b = df.b;\n\n            // we don't need the ekm anymore so clear it out\n            ekm.clear();\n\n            return final_df;\n        }\n\n\n\n\n        /*!\n            CONVENTION\n                - if (ekm_stale) then\n                    - kern or basis have changed since the last time\n                      they were loaded into the ekm\n        !*/\n\n        svm_c_linear_trainer<linear_kernel<matrix<scalar_type,0,1,mem_manager_type> > > ocas;\n        bool verbose;\n\n        kernel_type kern;\n        unsigned long max_basis_size;\n        unsigned long basis_size_increment;\n        unsigned long initial_basis_size;\n\n\n        matrix<sample_type,0,1,mem_manager_type> basis;\n        mutable empirical_kernel_map<kernel_type> ekm;\n        mutable bool ekm_stale; \n\n    }; \n\n}\n\n#endif // DLIB_SVM_C_EKm_TRAINER_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_c_ekm_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVM_C_EKm_TRAINER_ABSTRACT_Hh_\n#ifdef DLIB_SVM_C_EKm_TRAINER_ABSTRACT_Hh_\n\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"empirical_kernel_map_abstract.h\"\n#include \"svm_c_linear_trainer_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename K \n        >\n    class svm_c_ekm_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a tool for training the C formulation of \n                a support vector machine.   It is implemented using the empirical_kernel_map\n                to kernelize the svm_c_linear_trainer.  This makes it a very fast algorithm\n                capable of learning from very large datasets.\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_c_ekm_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_oca() == oca() (i.e. an instance of oca with default parameters) \n                - #get_c_class1() == 1\n                - #get_c_class2() == 1\n                - #get_epsilon() == 0.001\n                - #basis_loaded() == false\n                - #get_initial_basis_size() == 10\n                - #get_basis_size_increment() == 50 \n                - #get_max_basis_size() == 300\n                - this object will not be verbose unless be_verbose() is called\n                - #get_max_iterations() == 10000\n        !*/\n\n        explicit svm_c_ekm_trainer (\n            const scalar_type& C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_oca() == oca() (i.e. an instance of oca with default parameters) \n                - #get_c_class1() == C\n                - #get_c_class2() == C\n                - #get_epsilon() == 0.001\n                - #basis_loaded() == false\n                - #get_initial_basis_size() == 10\n                - #get_basis_size_increment() == 50\n                - #get_max_basis_size() == 300\n                - this object will not be verbose unless be_verbose() is called\n                - #get_max_iterations() == 10000\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer \n                  to execute.\n        !*/\n\n        void set_max_iterations (\n            unsigned long max_iter\n        );\n        /*!\n            ensures\n                - #get_max_iterations() == max_iter\n        !*/\n\n        unsigned long get_max_iterations (\n        ); \n        /*!\n            ensures\n                - returns the maximum number of iterations the SVM optimizer is allowed to\n                  run before it is required to stop and return a result.\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_very_verbose (\n        );\n        /*!\n            ensures\n                - This object will print a lot of status messages to standard out so that a \n                  user can observe the progress of the algorithm.  In addition to the\n                  few status messages normal verbosity produces this setting also causes\n                  the underlying svm_c_linear_trainer to be verbose.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the SVM problem.  \n        !*/\n\n        const kernel_type get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object\n        !*/\n\n        void set_kernel (\n            const kernel_type& k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k \n        !*/\n\n        template <typename T>\n        void set_basis (\n            const T& basis_samples\n        );\n        /*!\n            requires\n                - T must be a dlib::matrix type or something convertible to a matrix via mat()\n                  (e.g. a std::vector)\n                - is_vector(basis_samples) == true\n                - basis_samples.size() > 0\n                - get_kernel() must be capable of operating on the elements of basis_samples.  That is,\n                  expressions such as get_kernel()(basis_samples(0), basis_samples(0)) should make sense.\n            ensures\n                - #basis_loaded() == true\n                - training will be carried out in the span of the given basis_samples\n        !*/\n\n        bool basis_loaded (\n        ) const;\n        /*!\n            ensures\n                - returns true if this object has been loaded with user supplied basis vectors and false otherwise.\n        !*/\n\n        void clear_basis (\n        );\n        /*!\n            ensures\n                - #basis_loaded() == false\n        !*/\n\n        unsigned long get_max_basis_size (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of basis vectors this object is allowed\n                  to use.  This parameter only matters when the user has not supplied \n                  a basis via set_basis().\n        !*/\n\n        void set_max_basis_size (\n            unsigned long max_basis_size\n        );\n        /*!\n            requires\n                - max_basis_size > 0\n            ensures\n                - #get_max_basis_size() == max_basis_size \n                - if (get_initial_basis_size() > max_basis_size) then\n                    - #get_initial_basis_size() == max_basis_size\n        !*/\n\n        unsigned long get_initial_basis_size (\n        ) const;\n        /*!\n            ensures\n                - If the user does not supply a basis via set_basis() then this object\n                  will generate one automatically.  It does this by starting with\n                  a small basis of size N and repeatedly adds basis vectors to it\n                  until a stopping condition is reached.  This function returns that\n                  initial size N.\n        !*/\n\n        void set_initial_basis_size (\n            unsigned long initial_basis_size\n        );\n        /*!\n            requires\n                - initial_basis_size > 0\n            ensures\n                - #get_initial_basis_size() == initial_basis_size\n                - if (initial_basis_size > get_max_basis_size()) then\n                    - #get_max_basis_size() == initial_basis_size\n        !*/\n\n        unsigned long get_basis_size_increment (\n        ) const;\n        /*!\n            ensures\n                - If the user does not supply a basis via set_basis() then this object\n                  will generate one automatically.  It does this by starting with a small \n                  basis and repeatedly adds sets of N basis vectors to it until a stopping \n                  condition is reached.  This function returns that increment size N.\n        !*/\n\n        void set_basis_size_increment (\n            unsigned long basis_size_increment\n        );\n        /*!\n            requires\n                - basis_size_increment > 0\n            ensures\n                - #get_basis_size_increment() == basis_size_increment\n        !*/\n\n        void set_c (\n            scalar_type C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class1() == C \n                - #get_c_class2() == C \n        !*/\n\n        const scalar_type get_c_class1 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter for the +1 class.  \n                  It is the parameter that determines the trade off between\n                  trying to fit the +1 training data exactly or allowing more errors \n                  but hopefully improving the generalization ability of the \n                  resulting classifier.  Larger values encourage exact fitting \n                  while smaller values of C may encourage better generalization. \n        !*/\n\n        const scalar_type get_c_class2 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter for the -1 class.  \n                  It is the parameter that determines the trade off between\n                  trying to fit the -1 training data exactly or allowing more errors \n                  but hopefully improving the generalization ability of the \n                  resulting classifier.  Larger values encourage exact fitting \n                  while smaller values of C may encourage better generalization. \n        !*/\n\n        void set_c_class1 (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class1() == C\n        !*/\n\n        void set_c_class2 (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class2() == C\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - is_binary_classification_problem(x,y) == true\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n            ensures\n                - trains a C support vector classifier given the training samples in x and \n                  labels in y.  \n                - if (basis_loaded()) then\n                    - training will be carried out in the span of the user supplied basis vectors\n                - else\n                    - this object will attempt to automatically select an appropriate basis\n\n                - returns a decision function F with the following properties:\n                    - if (new_x is a sample predicted have +1 label) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            scalar_type& svm_objective\n        ) const;\n        /*!\n            requires\n                - is_binary_classification_problem(x,y) == true\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n            ensures\n                - trains a C support vector classifier given the training samples in x and \n                  labels in y.  \n                - if (basis_loaded()) then\n                    - training will be carried out in the span of the user supplied basis vectors\n                - else\n                    - this object will attempt to automatically select an appropriate basis\n\n                - #svm_objective == the final value of the SVM objective function\n                - returns a decision function F with the following properties:\n                    - if (new_x is a sample predicted have +1 label) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n        !*/\n\n    }; \n\n}\n\n#endif // DLIB_SVM_C_EKm_TRAINER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_c_linear_dcd_trainer.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_C_LINEAR_DCD_TRAINER_Hh_ \n#define DLIB_SVm_C_LINEAR_DCD_TRAINER_Hh_\n\n#include \"svm_c_linear_dcd_trainer_abstract.h\"\n#include <cmath>\n#include <limits>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"../rand.h\"\n\n#include \"function.h\"\n#include \"kernel.h\"\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_c_linear_dcd_trainer\n    {\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n        typedef typename decision_function<K>::sample_vector_type sample_vector_type;\n        typedef typename decision_function<K>::scalar_vector_type scalar_vector_type;\n\n        // You are getting a compiler error on this line because you supplied a non-linear\n        // kernel to the svm_c_linear_dcd_trainer object.  You have to use one of the\n        // linear kernels with this trainer.\n        COMPILE_TIME_ASSERT((is_same_type<K, linear_kernel<sample_type> >::value ||\n                             is_same_type<K, sparse_linear_kernel<sample_type> >::value ));\n\n        svm_c_linear_dcd_trainer (\n        ) :\n            Cpos(1),\n            Cneg(1),\n            eps(0.1),\n            max_iterations(10000),\n            verbose(false),\n            have_bias(true),\n            last_weight_1(false),\n            do_shrinking(true)\n        {\n        }\n\n        explicit svm_c_linear_dcd_trainer (\n            const scalar_type& C_\n        ) :\n            Cpos(C_),\n            Cneg(C_),\n            eps(0.1),\n            max_iterations(10000),\n            verbose(false),\n            have_bias(true),\n            last_weight_1(false),\n            do_shrinking(true)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < C_,\n                \"\\tsvm_c_trainer::svm_c_linear_dcd_trainer(kernel,C)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t C_: \" << C_\n                );\n        }\n\n        bool includes_bias (\n        ) const \n        { \n            return have_bias; \n        }\n\n        void include_bias (\n            bool should_have_bias\n        ) \n        { \n            have_bias = should_have_bias; \n        }\n\n        bool forces_last_weight_to_1 (\n        ) const\n        {\n            return last_weight_1;\n        }\n\n        void force_last_weight_to_1 (\n            bool should_last_weight_be_1\n        )\n        {\n            last_weight_1 = should_last_weight_be_1;\n        }\n\n        bool shrinking_enabled (\n        ) const { return do_shrinking; }\n\n        void enable_shrinking (\n            bool enabled\n        ) { do_shrinking = enabled; }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\tvoid svm_c_linear_dcd_trainer::set_epsilon(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps_: \" << eps_ \n                );\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const\n        { \n            return eps;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel_type();\n        }\n\n        unsigned long get_max_iterations (\n        ) const { return max_iterations; }\n\n        void set_max_iterations (\n            unsigned long max_iter\n        ) \n        {\n            max_iterations = max_iter;\n        }\n\n        void set_c (\n            scalar_type C \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_linear_dcd_trainer::set_c()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cpos = C;\n            Cneg = C;\n        }\n\n        const scalar_type get_c_class1 (\n        ) const\n        {\n            return Cpos;\n        }\n\n        const scalar_type get_c_class2 (\n        ) const\n        {\n            return Cneg;\n        }\n\n        void set_c_class1 (\n            scalar_type C\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_linear_dcd_trainer::set_c_class1()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cpos = C;\n        }\n\n        void set_c_class2 (\n            scalar_type C\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_linear_dcd_trainer::set_c_class2()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cneg = C;\n        }\n\n        class optimizer_state\n        {\n            friend class svm_c_linear_dcd_trainer;\n\n        public:\n            optimizer_state() : did_init(false) {}\n\n        private:\n\n            template <\n                typename in_sample_vector_type\n                >\n            void init(\n                const in_sample_vector_type& x,\n                bool have_bias_,\n                bool last_weight_1_\n            )\n            {\n                const long new_dims = max_index_plus_one(x);\n                long new_idx = 0;\n\n                if (did_init)\n                {\n                    DLIB_CASSERT(have_bias_ == have_bias &&\n                                 last_weight_1_ == last_weight_1, \n                                \"\\t decision_function svm_c_linear_dcd_trainer::train(x,y,state)\"\n                                << \"\\n\\t The given state object is invalid because the previous trainer was configured differently.\"\n                                << \"\\n\\t have_bias_:     \" << have_bias_\n                                << \"\\n\\t have_bias:      \" << have_bias\n                                << \"\\n\\t last_weight_1_: \" << last_weight_1_\n                                << \"\\n\\t last_weight_1:  \" << last_weight_1\n                                 );\n\n                    DLIB_CASSERT( new_dims >= dims,\n                                \"\\t decision_function svm_c_linear_dcd_trainer::train(x,y,state)\"\n                                << \"\\n\\t The given state object is invalid because the training data dimensions have shrunk.\"\n                                << \"\\n\\t new_dims:  \" << new_dims\n                                << \"\\n\\t dims:      \" << dims \n                        );\n\n                    DLIB_CASSERT( x.size() >= static_cast<long>(alpha.size()),\n                                \"\\t decision_function svm_c_linear_dcd_trainer::train(x,y,state)\"\n                                << \"\\n\\t The given state object is invalid because the training data has fewer samples than previously.\"\n                                << \"\\n\\t x.size():     \" << x.size() \n                                << \"\\n\\t alpha.size(): \" << alpha.size() \n                        );\n\n                    // make sure we amortize the cost of growing the alpha vector.\n                    if (alpha.capacity() < static_cast<unsigned long>(x.size()))\n                        alpha.reserve(x.size()*2);\n\n                    new_idx = alpha.size();\n\n                    // Make sure alpha has the same length as x.  So pad with extra zeros if\n                    // necessary to make this happen.\n                    alpha.resize(x.size(),0);\n\n\n                    if (new_dims != dims)\n                    {\n                        // The only valid way the dimensions can be different here is if\n                        // you are using a sparse vector type.  This is because we might\n                        // have had training samples which just happened to not include all\n                        // the features previously.  Therefore, max_index_plus_one() would\n                        // have given too low of a result.  But for dense vectors it is\n                        // definitely a user error if the dimensions don't match.\n\n                        DLIB_CASSERT(is_matrix<sample_type>::value == false, \n                                \"\\t decision_function svm_c_linear_dcd_trainer::train(x,y,state)\"\n                                << \"\\n\\t The given state object is invalid because the training data dimensions have changed.\"\n                                << \"\\n\\t new_dims:  \" << new_dims\n                                << \"\\n\\t dims:      \" << dims \n                            );\n\n                        // extend w by the right number of elements\n                        if (have_bias && !last_weight_1)\n                        {\n                            // Splice some zeros into the w vector so it will have the\n                            // right length.  Here we are being careful to move the bias\n                            // weight to the end of the resulting vector.\n                            w = join_cols(join_cols(\n                                    colm(w,0,dims), \n                                    zeros_matrix<scalar_type>(new_dims-dims,1)), \n                                    uniform_matrix<scalar_type>(1,1,w(dims))\n                                    );\n                        }\n                        else\n                        {\n                            // Just concatenate the right number of zeros.\n                            w = join_cols(w, zeros_matrix<scalar_type>(new_dims-dims,1));\n                        }\n                        dims = new_dims;\n                    }\n\n                }\n                else\n                {\n                    did_init = true;\n                    have_bias = have_bias_;\n                    last_weight_1 = last_weight_1_;\n                    dims = new_dims;\n\n                    alpha.resize(x.size());\n\n                    index.reserve(x.size());\n                    Q.reserve(x.size());\n\n                    if (have_bias && !last_weight_1)\n                        w.set_size(dims+1);\n                    else\n                        w.set_size(dims);\n\n                    w = 0;\n                }\n\n                for (long i = new_idx; i < x.size(); ++i)\n                {\n                    Q.push_back(length_squared(x(i)));\n\n                    if (have_bias && !last_weight_1)\n                    {\n                        index.push_back(i);\n                        Q.back() += 1;\n                    }\n                    else if (Q.back() != 0)\n                    {\n                        index.push_back(i);\n                    }\n                }\n\n                if (last_weight_1)\n                    w(dims-1) = 1;\n            }\n\n            template <typename T>\n            typename enable_if<is_matrix<T>,scalar_type>::type length_squared (const T& x) const\n            {\n                if (!last_weight_1)\n                {\n                    return dlib::dot(x,x);\n                }\n                else\n                {\n                    // skip the last dimension\n                    return dlib::dot(colm(x,0,x.size()-1), \n                                     colm(x,0,x.size()-1));\n                }\n\n            }\n\n            template <typename T>\n            typename disable_if<is_matrix<T>,scalar_type>::type length_squared (const T& x) const\n            {\n                if (!last_weight_1)\n                {\n                    return dlib::dot(x,x);\n                }\n                else\n                {\n                    scalar_type temp = 0;\n                    typename T::const_iterator i;\n                    for (i = x.begin(); i != x.end(); ++i)\n                    {\n                        // skip the last dimension\n                        if (static_cast<long>(i->first) < dims-1)\n                            temp += i->second*i->second;\n                    }\n                    return temp;\n                }\n            }\n\n\n            bool did_init;\n            bool have_bias;\n            bool last_weight_1;\n            std::vector<scalar_type> alpha;\n            scalar_vector_type w;\n            std::vector<scalar_type> Q;\n            std::vector<long> index;\n            long dims;\n            dlib::rand rnd;\n\n        public:\n            friend void serialize(const optimizer_state& item, std::ostream& out)\n            {\n                const int version = 1;\n                dlib::serialize(version, out);\n                dlib::serialize(item.did_init, out);\n                dlib::serialize(item.have_bias, out);\n                dlib::serialize(item.last_weight_1, out);\n                dlib::serialize(item.alpha, out);\n                dlib::serialize(item.w, out);\n                dlib::serialize(item.Q, out);\n                dlib::serialize(item.index, out);\n                dlib::serialize(item.dims, out);\n                dlib::serialize(item.rnd, out);\n            }\n\n            friend void deserialize(optimizer_state& item, std::istream& in)\n            {\n                int version = 0;\n                dlib::deserialize(version, in);\n                if (version != 1)\n                {\n                    throw dlib::serialization_error(\n                        \"Error while deserializing dlib::svm_c_linear_dcd_trainer::optimizer_state, unexpected version.\"\n                        );\n                }\n\n                dlib::deserialize(item.did_init, in);\n                dlib::deserialize(item.have_bias, in);\n                dlib::deserialize(item.last_weight_1, in);\n                dlib::deserialize(item.alpha, in);\n                dlib::deserialize(item.w, in);\n                dlib::deserialize(item.Q, in);\n                dlib::deserialize(item.index, in);\n                dlib::deserialize(item.dims, in);\n                dlib::deserialize(item.rnd, in);\n            }\n\n        };\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            optimizer_state state;\n            return do_train(mat(x), mat(y), state);\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            optimizer_state& state \n        ) const\n        {\n            return do_train(mat(x), mat(y), state);\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            optimizer_state& state \n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(x,y) == true,\n                \"\\t decision_function svm_c_linear_dcd_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.size(): \" << x.size() \n                << \"\\n\\t y.size(): \" << y.size() \n                << \"\\n\\t is_learning_problem(x,y): \" << is_learning_problem(x,y)\n                );\n#ifdef ENABLE_ASSERTS\n            for (long i = 0; i < x.size(); ++i)\n            {\n                DLIB_ASSERT(y(i) == +1 || y(i) == -1,\n                    \"\\t decision_function svm_c_linear_dcd_trainer::train(x,y)\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t y(\"<<i<<\"): \" << y(i)\n                );\n            }\n#endif\n\n            state.init(x,have_bias,last_weight_1);\n\n            std::vector<scalar_type>& alpha = state.alpha;\n            scalar_vector_type& w = state.w;\n            std::vector<long>& index = state.index;\n            const long dims = state.dims;\n\n            unsigned long active_size = index.size();\n\n            scalar_type PG_max_prev = std::numeric_limits<scalar_type>::infinity();\n            scalar_type PG_min_prev = -std::numeric_limits<scalar_type>::infinity();\n\n            // main loop\n            for (unsigned long iter = 0; iter < max_iterations; ++iter)\n            {\n                scalar_type PG_max = -std::numeric_limits<scalar_type>::infinity();\n                scalar_type PG_min = std::numeric_limits<scalar_type>::infinity();\n\n                // randomly shuffle the indices\n                for (unsigned long i = 0; i < active_size; ++i)\n                {\n                    // pick a random index >= i\n                    const long j = i + state.rnd.get_random_32bit_number()%(active_size-i);\n                    std::swap(index[i], index[j]);\n                }\n                \n                // for all the active training samples\n                for (unsigned long ii = 0; ii < active_size; ++ii)\n                {\n                    const long i = index[ii];\n\n                    const scalar_type G = y(i)*dot(w, x(i)) - 1;\n                    const scalar_type C = (y(i) > 0) ? Cpos : Cneg;\n\n                    scalar_type PG = 0;\n                    if (alpha[i] == 0)\n                    {\n                        if (G > PG_max_prev)\n                        {\n                            // shrink the active set of training examples\n                            --active_size;\n                            std::swap(index[ii], index[active_size]);\n                            --ii;\n                            continue;\n                        }\n\n                        if (G < 0)\n                            PG = G;\n                    }\n                    else if (alpha[i] == C)\n                    {\n                        if (G < PG_min_prev)\n                        {\n                            // shrink the active set of training examples\n                            --active_size;\n                            std::swap(index[ii], index[active_size]);\n                            --ii;\n                            continue;\n                        }\n\n                        if (G > 0)\n                            PG = G;\n                    }\n                    else\n                    {\n                        PG = G;\n                    }\n\n                    if (PG > PG_max) \n                        PG_max = PG;\n                    if (PG < PG_min) \n                        PG_min = PG;\n\n                    // if PG != 0\n                    if (std::abs(PG) > 1e-12)\n                    {\n                        const scalar_type alpha_old = alpha[i];\n                        alpha[i] = std::min(std::max(alpha[i] - G/state.Q[i], (scalar_type)0.0), C);\n                        const scalar_type delta = (alpha[i]-alpha_old)*y(i);\n                        add_to(w, x(i), delta);\n                        if (have_bias && !last_weight_1)\n                            w(w.size()-1) -= delta;\n\n                        if (last_weight_1)\n                            w(dims-1) = 1;\n                    }\n\n                }\n\n                if (verbose)\n                {\n                    using namespace std;\n                    cout << \"gap:         \" << PG_max - PG_min << endl;\n                    cout << \"active_size: \" << active_size << endl;\n                    cout << \"iter:        \" << iter << endl;\n                    cout << endl;\n                }\n\n                if (PG_max - PG_min <= eps)\n                {\n                    // stop if we are within eps tolerance and the last iteration\n                    // was over all the samples\n                    if (active_size == index.size())\n                        break;\n\n                    // Turn of shrinking on the next iteration.  We will stop if the\n                    // tolerance is still <= eps when shrinking is off.\n                    active_size = index.size();\n                    PG_max_prev = std::numeric_limits<scalar_type>::infinity();\n                    PG_min_prev = -std::numeric_limits<scalar_type>::infinity();\n                }\n                else if (do_shrinking)\n                {\n                    PG_max_prev = PG_max;\n                    PG_min_prev = PG_min;\n                    if (PG_max_prev <= 0)\n                        PG_max_prev = std::numeric_limits<scalar_type>::infinity();\n                    if (PG_min_prev >= 0)\n                        PG_min_prev = -std::numeric_limits<scalar_type>::infinity();\n                }\n\n            } // end of main optimization loop\n\n\n\n\n            // put the solution into a decision function and then return it\n            decision_function<kernel_type> df;\n            if (have_bias && !last_weight_1)\n                df.b = w(w.size()-1);\n            else\n                df.b = 0;\n\n            df.basis_vectors.set_size(1);\n            // Copy the plane normal into the output basis vector.  The output vector might\n            // be a sparse vector container so we need to use this special kind of copy to\n            // handle that case.  \n            assign(df.basis_vectors(0), colm(w, 0, dims));\n            df.alpha.set_size(1);\n            df.alpha(0) = 1;\n\n            return df;\n        }\n\n        scalar_type dot (\n            const scalar_vector_type& w,\n            const sample_type& sample\n        ) const\n        {\n            if (have_bias && !last_weight_1)\n            {\n                const long w_size_m1 = w.size()-1;\n                return dlib::dot(colm(w,0,w_size_m1), sample) - w(w_size_m1);\n            }\n            else\n            {\n                return dlib::dot(w, sample);\n            }\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        scalar_type Cpos;\n        scalar_type Cneg;\n        scalar_type eps;\n        unsigned long max_iterations;\n        bool verbose;\n        bool have_bias; // having a bias means we pretend all x vectors have an extra element which is always -1.\n        bool last_weight_1;\n        bool do_shrinking;\n\n    }; // end of class svm_c_linear_dcd_trainer\n\n// ----------------------------------------------------------------------------------------\n\n\n}\n\n#endif // DLIB_SVm_C_LINEAR_DCD_TRAINER_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_c_linear_dcd_trainer_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_C_LINEAR_DCD_TRAINER_ABSTRACT_Hh_ \n#ifdef DLIB_SVm_C_LINEAR_DCD_TRAINER_ABSTRACT_Hh_\n\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_c_linear_dcd_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                Is either linear_kernel or sparse_linear_kernel.  \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a tool for training the C formulation of a support\n                vector machine.  It is optimized for the case where linear kernels are\n                used.  \n\n\n                In particular, it is implemented using the algorithm described in the\n                following paper:\n                    A Dual Coordinate Descent Method for Large-scale Linear SVM\n                    by Cho-Jui Hsieh, Kai-Wei Chang, and Chih-Jen Lin\n\n                It solves the optimization problem of:\n                min_w: 0.5||w||^2 + C*sum_i (hinge loss for sample i)   \n                where w is the learned SVM parameter vector.\n\n                Note that this object is very similar to the svm_c_linear_trainer, however,\n                it interprets the C parameter slightly differently.  In particular, C for\n                the DCD trainer is not automatically divided by the number of samples like\n                it is with the svm_c_linear_trainer.  For example, a C value of 10 when\n                given to the svm_c_linear_trainer is equivalent to a C value of 10/N for\n                the svm_c_linear_dcd_trainer, where N is the number of training samples.\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n        typedef typename decision_function<K>::sample_vector_type sample_vector_type;\n        typedef typename decision_function<K>::scalar_vector_type scalar_vector_type;\n\n\n        svm_c_linear_dcd_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used to train a\n                  support vector machine.\n                - #get_c_class1() == 1\n                - #get_c_class2() == 1\n                - #get_epsilon() == 0.1\n                - #get_max_iterations() == 10000\n                - This object will not be verbose unless be_verbose() is called\n                - #forces_last_weight_to_1() == false\n                - #includes_bias() == true\n                - #shrinking_enabled() == true\n        !*/\n\n        explicit svm_c_linear_dcd_trainer (\n            const scalar_type& C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - This object is properly initialized and ready to be used to train a\n                  support vector machine.\n                - #get_c_class1() == C\n                - #get_c_class2() == C\n                - #get_epsilon() == 0.1\n                - #get_max_iterations() == 10000\n                - This object will not be verbose unless be_verbose() is called\n                - #forces_last_weight_to_1() == false\n                - #includes_bias() == true\n                - #shrinking_enabled() == true\n        !*/\n\n        bool includes_bias (\n        ) const;\n        /*!\n            ensures\n                - returns true if this trainer will produce decision_functions with\n                  non-zero bias values.  \n        !*/\n\n        void include_bias (\n            bool should_have_bias\n        );\n        /*!\n            ensures\n                - #includes_bias() == should_have_bias\n        !*/\n\n        bool forces_last_weight_to_1 (\n        ) const;\n        /*!\n            ensures\n                - returns true if this trainer has the constraint that the last weight in\n                  the learned parameter vector must be 1.  This is the weight corresponding\n                  to the feature in the training vectors with the highest dimension.  \n                - Forcing the last weight to 1 also disables the bias and therefore the b\n                  field of the learned decision_function will be 0 when forces_last_weight_to_1() == true.\n                  This is true regardless of the setting of #include_bias().\n        !*/\n\n        void force_last_weight_to_1 (\n            bool should_last_weight_be_1\n        );\n        /*!\n            ensures\n                - #forces_last_weight_to_1() == should_last_weight_be_1\n        !*/\n\n        bool shrinking_enabled (\n        ) const; \n        /*!\n            ensures\n                - returns true if the shrinking heuristic is enabled.  Typically this makes\n                  the algorithm run a lot faster so it should be enabled.\n        !*/\n\n        void enable_shrinking (\n            bool enabled\n        ); \n        /*!\n            ensures\n                - #shrinking_enabled() == enabled\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_epsilon (\n            scalar_type eps_\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer to\n                  train.    \n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object.  Since the\n                  linear kernels don't have any parameters this function just returns\n                  kernel_type()\n        !*/\n\n        unsigned long get_max_iterations (\n        ) const; \n        /*!\n            ensures\n                - returns the maximum number of iterations the SVM optimizer is allowed to\n                  run before it is required to stop and return a result.\n        !*/\n\n        void set_max_iterations (\n            unsigned long max_iter\n        ); \n        /*!\n            ensures\n                - #get_max_iterations() == max_iter\n        !*/\n\n        void set_c (\n            scalar_type C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class1() == C \n                - #get_c_class2() == C \n        !*/\n\n        const scalar_type get_c_class1 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter for the +1 class.  It is the\n                  parameter that determines the trade off between trying to fit the +1\n                  training data exactly or allowing more errors but hopefully improving the\n                  generalization of the resulting classifier.  Larger values encourage\n                  exact fitting while smaller values of C may encourage better\n                  generalization. \n        !*/\n\n        const scalar_type get_c_class2 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter for the -1 class.  It is the\n                  parameter that determines the trade off between trying to fit the -1\n                  training data exactly or allowing more errors but hopefully improving the\n                  generalization of the resulting classifier.  Larger values encourage\n                  exact fitting while smaller values of C may encourage better\n                  generalization. \n        !*/\n\n        void set_c_class1 (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class1() == C\n        !*/\n\n        void set_c_class2 (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class2() == C\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(x,y) == true\n                  (Note that it is ok for x.size() == 1)\n                - All elements of y must be equal to +1 or -1\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n            ensures\n                - Trains a C support vector classifier given the training samples in x and \n                  labels in y.  \n                - returns a decision function F with the following properties:\n                    - F.alpha.size() == 1\n                    - F.basis_vectors.size() == 1\n                    - F.alpha(0) == 1\n                    - if (new_x is a sample predicted have +1 label) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n        !*/\n\n        // optimizer_state is used to record the internal state of the SVM optimizer.  It\n        // can be used with the following train() routine to warm-start the optimizer.\n        // Note, that optimizer_state objects are serializable but are otherwise completely\n        // opaque to the user.\n        class optimizer_state;\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            optimizer_state& state \n        ) const;\n        /*!\n            requires\n                - is_learning_problem(x,y) == true\n                  (Note that it is ok for x.size() == 1)\n                - All elements of y must be equal to +1 or -1\n                - state must be either a default initialized optimizer_state object or all the\n                  following conditions must be satisfied:\n                    - Let LAST denote the previous trainer used with the state object, then\n                      we must have: \n                        - LAST.includes_bias() == includes_bias()\n                        - LAST.forces_last_weight_to_1() == forces_last_weight_to_1()\n                    - Let X denote the previous training samples used with state, then the\n                      following must be satisfied:\n                        - x.size() >= X.size()\n                        - for all valid i:\n                            - x(i) == X(i)\n                              (i.e. the samples x and X have in common must be identical.\n                              That is, the only allowed difference between x and X is that\n                              x might have new training samples appended onto its end)\n                        - if (x contains dense vectors) then\n                            - max_index_plus_one(x) == max_index_plus_one(X)\n                        - else\n                            - max_index_plus_one(x) >= max_index_plus_one(X)\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n            ensures\n                - Trains a C support vector classifier given the training samples in x and \n                  labels in y.  \n                - The point of the state object is to allow you to warm start the SVM\n                  optimizer from the solution to a previous call to train().  Doing this\n                  might make the training run faster.  This is useful when you are trying\n                  different C values or have grown the training set and want to retrain.\n                - #state == the internal state of the optimizer at the solution to the SVM\n                  problem.  Therefore, passing #state to a new call to train() will start\n                  the optimizer from the current solution.\n                - returns a decision function F with the following properties:\n                    - F.alpha.size() == 1\n                    - F.basis_vectors.size() == 1\n                    - F.alpha(0) == 1\n                    - if (new_x is a sample predicted have +1 label) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n        !*/\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_C_LINEAR_DCD_TRAINER_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_c_linear_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVM_C_LiNEAR_TRAINER_Hh_\n#define DLIB_SVM_C_LiNEAR_TRAINER_Hh_\n\n#include \"svm_c_linear_trainer_abstract.h\"\n#include \"../algs.h\"\n#include \"../optimization.h\"\n#include \"../matrix.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include <iostream>\n#include <vector>\n#include \"sparse_vector.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type, \n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    class oca_problem_c_svm : public oca_problem<matrix_type >\n    {\n    public:\n        /*\n            This class is used as part of the implementation of the svm_c_linear_trainer\n            defined towards the end of this file.\n\n\n            The bias parameter is dealt with by imagining that each sample vector has -1\n            as its last element.\n        */\n\n        typedef typename matrix_type::type scalar_type;\n\n        oca_problem_c_svm(\n            const scalar_type C_pos,\n            const scalar_type C_neg,\n            const in_sample_vector_type& samples_,\n            const in_scalar_vector_type& labels_,\n            const bool be_verbose_,\n            const scalar_type eps_,\n            const unsigned long max_iter,\n            const unsigned long dims_\n        ) :\n            samples(samples_),\n            labels(labels_),\n            C(std::min(C_pos,C_neg)),\n            Cpos(C_pos/C),\n            Cneg(C_neg/C),\n            be_verbose(be_verbose_),\n            eps(eps_),\n            max_iterations(max_iter),\n            dims(dims_)\n        {\n            dot_prods.resize(samples.size());\n            is_first_call = true;\n        }\n\n        virtual scalar_type get_c (\n        ) const \n        {\n            return C;\n        }\n\n        virtual long get_num_dimensions (\n        ) const \n        {\n            // plus 1 for the bias term\n            return dims + 1;\n        }\n\n        virtual bool optimization_status (\n            scalar_type current_objective_value,\n            scalar_type current_error_gap,\n            scalar_type current_risk_value,\n            scalar_type current_risk_gap,\n            unsigned long num_cutting_planes,\n            unsigned long num_iterations\n        ) const \n        {\n            if (be_verbose)\n            {\n                using namespace std;\n                cout << \"objective:     \" << current_objective_value << endl;\n                cout << \"objective gap: \" << current_error_gap << endl;\n                cout << \"risk:          \" << current_risk_value << endl;\n                cout << \"risk gap:      \" << current_risk_gap << endl;\n                cout << \"num planes:    \" << num_cutting_planes << endl;\n                cout << \"iter:          \" << num_iterations << endl;\n                cout << endl;\n            }\n\n            if (num_iterations >= max_iterations)\n                return true;\n\n            if (current_risk_gap < eps)\n                return true;\n\n            return false;\n        }\n\n        virtual bool risk_has_lower_bound (\n            scalar_type& lower_bound\n        ) const \n        { \n            lower_bound = 0;\n            return true; \n        }\n\n        virtual void get_risk (\n            matrix_type& w,\n            scalar_type& risk,\n            matrix_type& subgradient\n        ) const \n        {\n            line_search(w);\n\n            subgradient.set_size(w.size(),1);\n            subgradient = 0;\n            risk = 0;\n\n\n            // loop over all the samples and compute the risk and its subgradient at the current solution point w\n            for (long i = 0; i < samples.size(); ++i)\n            {\n                // multiply current SVM output for the ith sample by its label\n                const scalar_type df_val = labels(i)*dot_prods[i];\n\n                if (labels(i) > 0)\n                    risk += Cpos*std::max<scalar_type>(0.0,1 - df_val);\n                else\n                    risk += Cneg*std::max<scalar_type>(0.0,1 - df_val);\n\n                if (df_val < 1)\n                {\n                    if (labels(i) > 0)\n                    {\n                        subtract_from(subgradient, samples(i), Cpos);\n\n                        subgradient(subgradient.size()-1) += Cpos;\n                    }\n                    else\n                    {\n                        add_to(subgradient, samples(i), Cneg);\n\n                        subgradient(subgradient.size()-1) -= Cneg;\n                    }\n                }\n            }\n\n            scalar_type scale = 1.0/samples.size();\n\n            risk *= scale;\n            subgradient = scale*subgradient;\n        }\n\n    private:\n\n    // -----------------------------------------------------\n    // -----------------------------------------------------\n\n        void line_search (\n            matrix_type& w\n        ) const\n        /*!\n            ensures\n                - does a line search to find a better w\n                - for all i: #dot_prods[i] == dot(colm(#w,0,w.size()-1), samples(i)) - #w(w.size()-1)\n        !*/\n        {\n            // The reason for using w_size_m1 and not just w.size()-1 is because\n            // doing it this way avoids an inane warning from gcc that can occur in some cases.\n            const long w_size_m1 = w.size()-1;\n            for (long i = 0; i < samples.size(); ++i)\n                dot_prods[i] = dot(colm(w,0,w_size_m1), samples(i)) - w(w_size_m1);\n\n            if (is_first_call)\n            {\n                is_first_call = false;\n                best_so_far = w;\n                dot_prods_best = dot_prods;\n            }\n            else\n            {\n                // do line search going from best_so_far to w.  Store results in w.  \n                // Here we use the line search algorithm presented in section 3.1.1 of Franc and Sonnenburg.\n\n                const scalar_type A0 = length_squared(best_so_far - w);\n                const scalar_type BB0 = dot(best_so_far, w - best_so_far);\n\n                const scalar_type scale_pos = (get_c()*Cpos)/samples.size();\n                const scalar_type scale_neg = (get_c()*Cneg)/samples.size();\n\n                ks.clear();\n                ks.reserve(samples.size());\n\n                scalar_type f0 = BB0;\n                for (long i = 0; i < samples.size(); ++i)\n                {\n                    const scalar_type& scale = (labels(i)>0) ? scale_pos : scale_neg;\n\n                    const scalar_type B = scale*labels(i) * ( dot_prods_best[i] - dot_prods[i]);\n                    const scalar_type C = scale*(1 - labels(i)* dot_prods_best[i]);\n                    // Note that if B is 0 then it doesn't matter what k is set to.  So 0 is fine.\n                    scalar_type k = 0;\n                    if (B != 0)\n                        k = -C/B;\n\n                    if (k > 0)\n                        ks.push_back(helper(k, std::abs(B)));\n\n                    if ( (B < 0 && k > 0) || (B > 0 && k <= 0) )\n                        f0 += B;\n                }\n\n                scalar_type opt_k = 1;\n                // ks.size() == 0 shouldn't happen but check anyway\n                if (f0 >= 0 || ks.size() == 0)\n                {\n                    // Getting here means that we aren't searching in a descent direction.  \n                    // We could take a zero step but instead lets just assign w to the new best\n                    // so far point just to make sure we don't get stuck coming back to this \n                    // case over and over.  This might happen if we never move the best point \n                    // seen so far.\n\n                    // So we let opt_k be 1\n                }\n                else\n                {\n                    std::sort(ks.begin(), ks.end());\n\n                    // figure out where f0 goes positive.\n                    for (unsigned long i = 0; i < ks.size(); ++i)\n                    {\n                        f0 += ks[i].B;\n                        if (f0 + A0*ks[i].k >= 0)\n                        {\n                            opt_k = ks[i].k;\n                            break;\n                        }\n                    }\n\n                }\n\n                // Don't let the step size get too big.  Otherwise we might pick huge steps\n                // over and over that don't improve the cutting plane approximation.  \n                if (opt_k > 1.0)\n                {\n                    opt_k = 1.0;\n                }\n\n                // take the step suggested by the line search\n                best_so_far = (1-opt_k)*best_so_far + opt_k*w;\n\n                // update best_so_far dot products\n                for (unsigned long i = 0; i < dot_prods_best.size(); ++i)\n                    dot_prods_best[i] = (1-opt_k)*dot_prods_best[i] + opt_k*dot_prods[i];\n\n\n                const scalar_type mu = 0.1;\n                // Make sure we always take a little bit of a step towards w regardless of what the\n                // line search says to do.  We do this since it is possible that some steps won't \n                // advance the best_so_far point. So this ensures we always make some progress each \n                // iteration.\n                w = (1-mu)*best_so_far + mu*w;\n\n                // update dot products\n                for (unsigned long i = 0; i < dot_prods.size(); ++i)\n                    dot_prods[i] = (1-mu)*dot_prods_best[i] + mu*dot_prods[i];\n            }\n        }\n\n        struct helper\n        {\n            helper(scalar_type k_, scalar_type B_) : k(k_), B(B_) {}\n            scalar_type k;\n            scalar_type B;\n\n            bool operator< (const helper& item) const { return k < item.k; }\n        };\n\n        mutable std::vector<helper> ks;\n\n        mutable bool is_first_call;\n        mutable std::vector<scalar_type> dot_prods;\n\n        mutable matrix_type best_so_far;  // best w seen so far\n        mutable std::vector<scalar_type> dot_prods_best; // dot products between best_so_far and samples\n\n\n        const in_sample_vector_type& samples;\n        const in_scalar_vector_type& labels;\n        const scalar_type C;\n        const scalar_type Cpos;\n        const scalar_type Cneg;\n\n        const bool be_verbose;\n        const scalar_type eps;\n        const unsigned long max_iterations;\n        const unsigned long dims;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type, \n        typename in_sample_vector_type,\n        typename in_scalar_vector_type,\n        typename scalar_type\n        >\n    oca_problem_c_svm<matrix_type, in_sample_vector_type, in_scalar_vector_type> make_oca_problem_c_svm (\n        const scalar_type C_pos,\n        const scalar_type C_neg,\n        const in_sample_vector_type& samples,\n        const in_scalar_vector_type& labels,\n        const bool be_verbose,\n        const scalar_type eps,\n        const unsigned long max_iterations,\n        const unsigned long dims\n    )\n    {\n        return oca_problem_c_svm<matrix_type, in_sample_vector_type, in_scalar_vector_type>(\n            C_pos, C_neg, samples, labels, be_verbose, eps, max_iterations, dims);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_c_linear_trainer\n    {\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        // You are getting a compiler error on this line because you supplied a non-linear kernel\n        // to the svm_c_linear_trainer object.  You have to use one of the linear kernels with this\n        // trainer.\n        COMPILE_TIME_ASSERT((is_same_type<K, linear_kernel<sample_type> >::value ||\n                             is_same_type<K, sparse_linear_kernel<sample_type> >::value ));\n\n        svm_c_linear_trainer (\n        )\n        {\n            Cpos = 1;\n            Cneg = 1;\n            verbose = false;\n            eps = 0.001;\n            max_iterations = 10000;\n            learn_nonnegative_weights = false;\n            last_weight_1 = false;\n        }\n\n        explicit svm_c_linear_trainer (\n            const scalar_type& C \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t svm_c_linear_trainer::svm_c_linear_trainer()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cpos = C;\n            Cneg = C;\n            verbose = false;\n            eps = 0.001;\n            max_iterations = 10000;\n            learn_nonnegative_weights = false;\n            last_weight_1 = false;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void svm_c_linear_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const { return eps; }\n\n        unsigned long get_max_iterations (\n        ) const { return max_iterations; }\n\n        void set_max_iterations (\n            unsigned long max_iter\n        ) \n        {\n            max_iterations = max_iter;\n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            solver = item;\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return solver;\n        }\n\n        const kernel_type get_kernel (\n        ) const\n        {\n            return kernel_type();\n        }\n\n        bool learns_nonnegative_weights (\n        ) const { return learn_nonnegative_weights; }\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        )\n        {\n            learn_nonnegative_weights = value;\n            if (learn_nonnegative_weights)\n                prior.set_size(0); \n        }\n\n        bool forces_last_weight_to_1 (\n        ) const\n        {\n            return last_weight_1;\n        }\n\n        void force_last_weight_to_1 (\n            bool should_last_weight_be_1\n        )\n        {\n            last_weight_1 = should_last_weight_be_1;\n            if (last_weight_1)\n                prior.set_size(0);\n        }\n\n        void set_prior (\n            const trained_function_type& prior_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(prior_.basis_vectors.size() == 1 &&\n                        prior_.alpha(0) == 1,\n                \"\\t void svm_c_linear_trainer::set_prior()\"\n                << \"\\n\\t The supplied prior could not have been created by this object's train() method.\"\n                << \"\\n\\t prior_.basis_vectors.size(): \" << prior_.basis_vectors.size() \n                << \"\\n\\t prior_.alpha(0):             \" << prior_.alpha(0) \n                << \"\\n\\t this: \" << this\n                );\n\n            prior = sparse_to_dense(prior_.basis_vectors(0));\n            prior_b = prior_.b;\n            learn_nonnegative_weights = false;\n            last_weight_1 = false;\n        }\n\n        bool has_prior (\n        ) const\n        {\n            return prior.size() != 0;\n        }\n\n        void set_c (\n            scalar_type C \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_linear_trainer::set_c()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cpos = C;\n            Cneg = C;\n        }\n\n        const scalar_type get_c_class1 (\n        ) const\n        {\n            return Cpos;\n        }\n\n        const scalar_type get_c_class2 (\n        ) const\n        {\n            return Cneg;\n        }\n\n        void set_c_class1 (\n            scalar_type C\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_linear_trainer::set_c_class1()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cpos = C;\n        }\n\n        void set_c_class2 (\n            scalar_type C\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_linear_trainer::set_c_class2()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cneg = C;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            scalar_type obj;\n            return do_train(mat(x),mat(y),obj);\n        }\n\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            scalar_type& svm_objective\n        ) const\n        {\n            return do_train(mat(x),mat(y),svm_objective);\n        }\n\n    private:\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            scalar_type& svm_objective\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(x,y) == true,\n                \"\\t decision_function svm_c_linear_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t y.nr(): \" << y.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                << \"\\n\\t y.nc(): \" << y.nc() \n                << \"\\n\\t is_learning_problem(x,y): \" << is_learning_problem(x,y)\n                );\n#ifdef ENABLE_ASSERTS\n            for (long i = 0; i < x.size(); ++i)\n            {\n                DLIB_ASSERT(y(i) == +1 || y(i) == -1,\n                    \"\\t decision_function svm_c_linear_trainer::train(x,y)\"\n                    << \"\\n\\t invalid inputs were given to this function\"\n                    << \"\\n\\t y(\"<<i<<\"): \" << y(i)\n                );\n            }\n#endif\n\n\n            typedef matrix<scalar_type,0,1> w_type;\n            w_type w;\n\n            const unsigned long num_dims = max_index_plus_one(x);\n\n            unsigned long num_nonnegative = 0;\n            if (learn_nonnegative_weights)\n            {\n                num_nonnegative = num_dims;\n            }\n\n            unsigned long force_weight_1_idx = std::numeric_limits<unsigned long>::max(); \n            if (last_weight_1)\n            {\n                force_weight_1_idx = num_dims-1; \n            }\n\n\n            if (has_prior())\n            {\n                if (is_matrix<sample_type>::value)\n                {\n                    // make sure requires clause is not broken\n                    DLIB_CASSERT(num_dims == (unsigned long)prior.size(),\n                        \"\\t decision_function svm_c_linear_trainer::train(x,y)\"\n                        << \"\\n\\t The dimension of the training vectors must match the dimension of\\n\"\n                        << \"\\n\\t those used to create the prior.\"\n                        << \"\\n\\t num_dims:     \" << num_dims \n                        << \"\\n\\t prior.size(): \" << prior.size() \n                    );\n                }\n                const unsigned long dims = std::max(num_dims, (unsigned long)prior.size());\n                // In the case of sparse sample vectors, it is possible that the input\n                // vector dimensionality is larger than the prior vector dimensionality.\n                // We need to check for this case and pad prior with zeros if it is the\n                // case.\n                matrix<scalar_type,0,1> prior_temp = join_cols(join_cols(prior, \n                                                                         zeros_matrix<scalar_type>(dims-prior.size(),1)),\n                                                                         mat(prior_b));\n\n                svm_objective = solver(\n                    make_oca_problem_c_svm<w_type>(Cpos, Cneg, x, y, verbose, eps, max_iterations, dims), \n                    w,\n                    prior_temp);\n            }\n            else\n            {\n                svm_objective = solver(\n                    make_oca_problem_c_svm<w_type>(Cpos, Cneg, x, y, verbose, eps, max_iterations, num_dims), \n                    w,\n                    num_nonnegative,\n                    force_weight_1_idx);\n            }\n\n            // put the solution into a decision function and then return it\n            decision_function<kernel_type> df;\n            df.b = static_cast<scalar_type>(w(w.size()-1));\n            df.basis_vectors.set_size(1);\n            // Copy the plane normal into the output basis vector.  The output vector might be a\n            // sparse vector container so we need to use this special kind of copy to handle that case.\n            // As an aside, the reason for using max_index_plus_one() and not just w.size()-1 is because\n            // doing it this way avoids an inane warning from gcc that can occur in some cases.\n            const long out_size = max_index_plus_one(x);\n            assign(df.basis_vectors(0), matrix_cast<scalar_type>(colm(w, 0, out_size)));\n            df.alpha.set_size(1);\n            df.alpha(0) = 1;\n\n            return df;\n        }\n        \n        scalar_type Cpos;\n        scalar_type Cneg;\n        oca solver;\n        scalar_type eps;\n        bool verbose;\n        unsigned long max_iterations;\n        bool learn_nonnegative_weights;\n        bool last_weight_1;\n        matrix<scalar_type,0,1> prior;\n        scalar_type prior_b;\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n\n#endif // DLIB_SVM_C_LiNEAR_TRAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_c_linear_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVM_C_LiNEAR_TRAINER_ABSTRACT_Hh_\n#ifdef DLIB_SVM_C_LiNEAR_TRAINER_ABSTRACT_Hh_\n\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"sparse_kernel_abstract.h\"\n\nnamespace dlib\n{\n    template <\n        typename K \n        >\n    class svm_c_linear_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                Is either linear_kernel or sparse_linear_kernel.  \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a tool for training the C formulation of \n                a support vector machine.  It is optimized for the case where\n                linear kernels are used.  \n\n\n                In particular, it is implemented using the OCAS algorithm\n                described in the following paper:\n                    Optimized Cutting Plane Algorithm for Large-Scale Risk Minimization\n                        Vojtech Franc, Soren Sonnenburg; Journal of Machine Learning \n                        Research, 10(Oct):2157--2192, 2009. \n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_c_linear_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_oca() == oca() (i.e. an instance of oca with default parameters) \n                - #get_c_class1() == 1\n                - #get_c_class2() == 1\n                - #get_epsilon() == 0.001\n                - this object will not be verbose unless be_verbose() is called\n                - #get_max_iterations() == 10000\n                - #learns_nonnegative_weights() == false\n                - #force_last_weight_to_1() == false\n                - #has_prior() == false\n        !*/\n\n        explicit svm_c_linear_trainer (\n            const scalar_type& C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_oca() == oca() (i.e. an instance of oca with default parameters) \n                - #get_c_class1() == C\n                - #get_c_class2() == C\n                - #get_epsilon() == 0.001\n                - this object will not be verbose unless be_verbose() is called\n                - #get_max_iterations() == 10000\n                - #learns_nonnegative_weights() == false\n                - #force_last_weight_to_1() == false\n                - #has_prior() == false\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer to\n                  train.  You can think of this epsilon value as saying \"solve the\n                  optimization problem until the probability of misclassification is within\n                  epsilon of its optimal value\".  \n        !*/\n\n        void set_max_iterations (\n            unsigned long max_iter\n        );\n        /*!\n            ensures\n                - #get_max_iterations() == max_iter\n        !*/\n\n        unsigned long get_max_iterations (\n        ); \n        /*!\n            ensures\n                - returns the maximum number of iterations the SVM optimizer is allowed to\n                  run before it is required to stop and return a result.\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the SVM problem.  \n        !*/\n\n        const kernel_type get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object.  Since\n                  the linear kernels don't have any parameters this function just\n                  returns kernel_type()\n        !*/\n\n        bool learns_nonnegative_weights (\n        ) const;\n        /*!\n            ensures\n                - The output of training is a weight vector and a bias value.  These\n                  two things define the resulting decision function.  That is, the\n                  decision function simply takes the dot product between the learned\n                  weight vector and a test sample, then subtracts the bias value.  \n                  Therefore, if learns_nonnegative_weights() == true then the resulting\n                  learned weight vector will always have non-negative entries.  The\n                  bias value may still be negative though.\n        !*/\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        );\n        /*!\n            ensures\n                - #learns_nonnegative_weights() == value\n                - if (value == true) then\n                    - #has_prior() == false\n        !*/\n\n        void set_prior (\n            const trained_function_type& prior\n        );\n        /*!\n            requires\n                - prior == a function produced by a call to this class's train() function.  \n                  Therefore, it must be the case that:\n                    - prior.basis_vectors.size() == 1\n                    - prior.alpha(0) == 1\n            ensures\n                - Subsequent calls to train() will try to learn a function similar to the\n                  given prior.\n                - #has_prior() == true\n                - #learns_nonnegative_weights() == false\n                - #forces_last_weight_to_1() == false\n        !*/\n\n        bool has_prior (\n        ) const\n        /*!\n            ensures\n                - returns true if a prior has been set and false otherwise.  Having a prior\n                  set means that you have called set_prior() and supplied a previously\n                  trained function as a reference.  In this case, any call to train() will\n                  try to learn a function that matches the behavior of the prior as close\n                  as possible but also fits the supplied training data.  In more technical\n                  detail, having a prior means we replace the ||w||^2 regularizer with one\n                  of the form ||w-prior||^2 where w is the set of parameters for a learned\n                  function.\n        !*/\n\n        bool forces_last_weight_to_1 (\n        ) const;\n        /*!\n            ensures\n                - returns true if this trainer has the constraint that the last weight in\n                  the learned parameter vector must be 1.  This is the weight corresponding\n                  to the feature in the training vectors with the highest dimension.  \n                - Forcing the last weight to 1 also disables the bias and therefore the b\n                  field of the learned decision_function will be 0 when forces_last_weight_to_1() == true.\n        !*/\n\n        void force_last_weight_to_1 (\n            bool should_last_weight_be_1\n        );\n        /*!\n            ensures\n                - #forces_last_weight_to_1() == should_last_weight_be_1\n                - if (should_last_weight_be_1 == true) then\n                    - #has_prior() == false\n        !*/\n\n        void set_c (\n            scalar_type C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class1() == C \n                - #get_c_class2() == C \n        !*/\n\n        const scalar_type get_c_class1 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter for the +1 class.  \n                  It is the parameter that determines the trade off between\n                  trying to fit the +1 training data exactly or allowing more errors \n                  but hopefully improving the generalization of the resulting \n                  classifier.  Larger values encourage exact fitting while \n                  smaller values of C may encourage better generalization. \n        !*/\n\n        const scalar_type get_c_class2 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter for the -1 class.  \n                  It is the parameter that determines the trade off between\n                  trying to fit the -1 training data exactly or allowing more errors \n                  but hopefully improving the generalization of the resulting \n                  classifier.  Larger values encourage exact fitting while \n                  smaller values of C may encourage better generalization. \n        !*/\n\n        void set_c_class1 (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class1() == C\n        !*/\n\n        void set_c_class2 (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class2() == C\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(x,y) == true\n                  (Note that it is ok for x.size() == 1)\n                - All elements of y must be equal to +1 or -1\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n                - if (has_prior()) then\n                    - The vectors in x must have the same dimensionality as the vectors\n                      used to train the prior given to set_prior().  \n            ensures\n                - trains a C support vector classifier given the training samples in x and \n                  labels in y.  \n                - returns a decision function F with the following properties:\n                    - F.alpha.size() == 1\n                    - F.basis_vectors.size() == 1\n                    - F.alpha(0) == 1\n                    - if (new_x is a sample predicted have +1 label) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y,\n            scalar_type& svm_objective\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(x,y) == true\n                  (Note that it is ok for x.size() == 1)\n                - All elements of y must be equal to +1 or -1\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n                - if (has_prior()) then\n                    - The vectors in x must have the same dimensionality as the vectors\n                      used to train the prior given to set_prior().  \n            ensures\n                - trains a C support vector classifier given the training samples in x and \n                  labels in y.  \n                - #svm_objective == the final value of the SVM objective function\n                - returns a decision function F with the following properties:\n                    - F.alpha.size() == 1\n                    - F.basis_vectors.size() == 1\n                    - F.alpha(0) == 1\n                    - if (new_x is a sample predicted have +1 label) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n        !*/\n\n    }; \n\n}\n\n#endif // DLIB_SVM_C_LiNEAR_TRAINER_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_c_trainer.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_C_TRAINER_Hh_ \n#define DLIB_SVm_C_TRAINER_Hh_\n\n//#include \"local/make_label_kernel_matrix.h\"\n\n#include \"svm_c_trainer_abstract.h\"\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"../optimization/optimization_solve_qp3_using_smo.h\"\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_c_trainer\n    {\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_c_trainer (\n        ) :\n            Cpos(1),\n            Cneg(1),\n            cache_size(200),\n            eps(0.001)\n        {\n        }\n\n        svm_c_trainer (\n            const kernel_type& kernel_, \n            const scalar_type& C_\n        ) :\n            kernel_function(kernel_),\n            Cpos(C_),\n            Cneg(C_),\n            cache_size(200),\n            eps(0.001)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < C_,\n                \"\\tsvm_c_trainer::svm_c_trainer(kernel,C)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t C_: \" << C_\n                );\n        }\n\n        void set_cache_size (\n            long cache_size_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(cache_size_ > 0,\n                \"\\tvoid svm_c_trainer::set_cache_size(cache_size_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t cache_size: \" << cache_size_ \n                );\n            cache_size = cache_size_;\n        }\n\n        long get_cache_size (\n        ) const\n        {\n            return cache_size;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\tvoid svm_c_trainer::set_epsilon(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps_: \" << eps_ \n                );\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const\n        { \n            return eps;\n        }\n\n        void set_kernel (\n            const kernel_type& k\n        )\n        {\n            kernel_function = k;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel_function;\n        }\n\n        void set_c (\n            scalar_type C \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_trainer::set_c()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cpos = C;\n            Cneg = C;\n        }\n\n        const scalar_type get_c_class1 (\n        ) const\n        {\n            return Cpos;\n        }\n\n        const scalar_type get_c_class2 (\n        ) const\n        {\n            return Cneg;\n        }\n\n        void set_c_class1 (\n            scalar_type C\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_trainer::set_c_class1()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cpos = C;\n        }\n\n        void set_c_class2 (\n            scalar_type C\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C > 0,\n                \"\\t void svm_c_trainer::set_c_class2()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C:    \" << C \n                << \"\\n\\t this: \" << this\n                );\n\n            Cneg = C;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            return do_train(mat(x), mat(y));\n        }\n\n        void swap (\n            svm_c_trainer& item\n        )\n        {\n            exchange(kernel_function, item.kernel_function);\n            exchange(Cpos,            item.Cpos);\n            exchange(Cneg,            item.Cneg);\n            exchange(cache_size,      item.cache_size);\n            exchange(eps,             item.eps);\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            typedef typename K::scalar_type scalar_type;\n            typedef typename decision_function<K>::sample_vector_type sample_vector_type;\n            typedef typename decision_function<K>::scalar_vector_type scalar_vector_type;\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_binary_classification_problem(x,y) == true,\n                \"\\tdecision_function svm_c_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t y.nr(): \" << y.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                << \"\\n\\t y.nc(): \" << y.nc() \n                << \"\\n\\t is_binary_classification_problem(x,y): \" << is_binary_classification_problem(x,y)\n                );\n\n\n            scalar_vector_type alpha;\n\n            solve_qp3_using_smo<scalar_vector_type> solver;\n\n            solver(symmetric_matrix_cache<float>((diagm(y)*kernel_matrix(kernel_function,x)*diagm(y)), cache_size), \n            //solver(symmetric_matrix_cache<float>(make_label_kernel_matrix(kernel_matrix(kernel_function,x),y), cache_size), \n                   uniform_matrix<scalar_type>(y.size(),1,-1),\n                   y, \n                   0,\n                   Cpos,\n                   Cneg,\n                   alpha,\n                   eps);\n\n            scalar_type b;\n            calculate_b(y,alpha,solver.get_gradient(),Cpos,Cneg,b);\n            alpha = pointwise_multiply(alpha,y);\n\n            // count the number of support vectors\n            const long sv_count = (long)sum(alpha != 0);\n\n            scalar_vector_type sv_alpha;\n            sample_vector_type support_vectors;\n\n            // size these column vectors so that they have an entry for each support vector\n            sv_alpha.set_size(sv_count);\n            support_vectors.set_size(sv_count);\n\n            // load the support vectors and their alpha values into these new column matrices\n            long idx = 0;\n            for (long i = 0; i < alpha.nr(); ++i)\n            {\n                if (alpha(i) != 0)\n                {\n                    sv_alpha(idx) = alpha(i);\n                    support_vectors(idx) = x(i);\n                    ++idx;\n                }\n            }\n\n            // now return the decision function\n            return decision_function<K> (sv_alpha, b, kernel_function, support_vectors);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename scalar_vector_type,\n            typename scalar_vector_type2\n            >\n        void calculate_b(\n            const scalar_vector_type2& y,\n            const scalar_vector_type& alpha,\n            const scalar_vector_type& df,\n            const scalar_type& Cpos,\n            const scalar_type& Cneg,\n            scalar_type& b\n        ) const\n        {\n            using namespace std;\n            long num_free = 0;\n            scalar_type sum_free = 0;\n\n            scalar_type upper_bound = -numeric_limits<scalar_type>::infinity();\n            scalar_type lower_bound = numeric_limits<scalar_type>::infinity();\n\n            for(long i = 0; i < alpha.nr(); ++i)\n            {\n                if(y(i) == 1)\n                {\n                    if(alpha(i) == Cpos)\n                    {\n                        if (df(i) > upper_bound)\n                            upper_bound = df(i);\n                    }\n                    else if(alpha(i) == 0)\n                    {\n                        if (df(i) < lower_bound)\n                            lower_bound = df(i);\n                    }\n                    else\n                    {\n                        ++num_free;\n                        sum_free += df(i);\n                    }\n                }\n                else\n                {\n                    if(alpha(i) == Cneg)\n                    {\n                        if (-df(i) < lower_bound)\n                            lower_bound = -df(i);\n                    }\n                    else if(alpha(i) == 0)\n                    {\n                        if (-df(i) > upper_bound)\n                            upper_bound = -df(i);\n                    }\n                    else\n                    {\n                        ++num_free;\n                        sum_free -= df(i);\n                    }\n                }\n            }\n\n            if(num_free > 0)\n                b = sum_free/num_free;\n            else\n                b = (upper_bound+lower_bound)/2;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n\n        kernel_type kernel_function;\n        scalar_type Cpos;\n        scalar_type Cneg;\n        long cache_size;\n        scalar_type eps;\n    }; // end of class svm_c_trainer\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K>\n    void swap (\n        svm_c_trainer<K>& a,\n        svm_c_trainer<K>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_C_TRAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_c_trainer_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_C_TRAINER_ABSTRACT_\n#ifdef DLIB_SVm_C_TRAINER_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"../optimization/optimization_solve_qp3_using_smo_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_c_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements a trainer for a C support vector machine for \n                solving binary classification problems.  It is implemented using the SMO\n                algorithm.\n\n                The implementation of the C-SVM training algorithm used by this object is based\n                on the following paper:\n                    - Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support vector \n                      machines, 2001. Software available at http://www.csie.ntu.edu.tw/~cjlin/libsvm\n\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_c_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_c_class1() == 1\n                - #get_c_class2() == 1\n                - #get_cache_size() == 200\n                - #get_epsilon() == 0.001\n        !*/\n\n        svm_c_trainer (\n            const kernel_type& kernel, \n            const scalar_type& C\n        );\n        /*!\n            requires\n                - 0 < C\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_kernel() == kernel\n                - #get_c_class1() == C\n                - #get_c_class2() == C\n                - #get_cache_size() == 200\n                - #get_epsilon() == 0.001\n        !*/\n\n        void set_cache_size (\n            long cache_size\n        );\n        /*!\n            requires\n                - cache_size > 0\n            ensures\n                - #get_cache_size() == cache_size \n        !*/\n\n        const long get_cache_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of megabytes of cache this object will use\n                  when it performs training via the this->train() function.\n                  (bigger values of this may make training go faster but won't affect \n                  the result.  However, too big a value will cause you to run out of \n                  memory, obviously.)\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Generally a good value for this is 0.001.  Smaller values may result\n                  in a more accurate solution but take longer to execute.\n        !*/\n\n        void set_kernel (\n            const kernel_type& k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k \n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object\n        !*/\n\n        void set_c (\n            scalar_type C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class1() == C \n                - #get_c_class2() == C \n        !*/\n\n        const scalar_type get_c_class1 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter for the +1 class.  \n                  It is the parameter that determines the trade off between\n                  trying to fit the +1 training data exactly or allowing more errors \n                  but hopefully improving the generalization ability of the \n                  resulting classifier.  Larger values encourage exact fitting \n                  while smaller values of C may encourage better generalization. \n        !*/\n\n        const scalar_type get_c_class2 (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter for the -1 class.  \n                  It is the parameter that determines the trade off between\n                  trying to fit the -1 training data exactly or allowing more errors \n                  but hopefully improving the generalization ability of the \n                  resulting classifier.  Larger values encourage exact fitting \n                  while smaller values of C may encourage better generalization. \n        !*/\n\n        void set_c_class1 (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class1() == C\n        !*/\n\n        void set_c_class2 (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c_class2() == C\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - is_binary_classification_problem(x,y) == true\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n            ensures\n                - trains a C support vector classifier given the training samples in x and \n                  labels in y.  Training is done when the error is less than get_epsilon().\n                - returns a decision function F with the following properties:\n                    - if (new_x is a sample predicted have +1 label) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n        !*/\n\n        void swap (\n            svm_c_trainer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n    }; \n\n    template <typename K>\n    void swap (\n        svm_c_trainer<K>& a,\n        svm_c_trainer<K>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_C_TRAINER_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_multiclass_linear_trainer.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_MULTICLASS_LINEAR_TRAINER_Hh_ \n#define DLIB_SVm_MULTICLASS_LINEAR_TRAINER_Hh_\n\n#include \"svm_multiclass_linear_trainer_abstract.h\"\n#include \"structural_svm_problem_threaded.h\"\n#include <vector>\n#include \"../optimization/optimization_oca.h\"\n#include \"../matrix.h\"\n#include \"sparse_vector.h\"\n#include \"function.h\"\n#include <algorithm>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type,\n        typename sample_type,\n        typename label_type\n        >\n    class multiclass_svm_problem : public structural_svm_problem_threaded<matrix_type,\n                                                                 std::vector<std::pair<unsigned long,typename matrix_type::type> > > \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines the optimization problem for the multiclass SVM trainer\n                object at the bottom of this file.  \n\n                The joint feature vectors used by this object, the PSI(x,y) vectors, are\n                defined as follows:\n                    PSI(x,0) = [x,0,0,0,0, ...,0]\n                    PSI(x,1) = [0,x,0,0,0, ...,0]\n                    PSI(x,2) = [0,0,x,0,0, ...,0]\n                That is, if there are N labels then the joint feature vector has a\n                dimension that is N times the dimension of a single x sample.  Also,\n                note that we append a -1 value onto each x to account for the bias term.\n        !*/\n\n    public:\n        typedef typename matrix_type::type scalar_type;\n        typedef std::vector<std::pair<unsigned long,scalar_type> > feature_vector_type;\n\n        multiclass_svm_problem (\n            const std::vector<sample_type>& samples_,\n            const std::vector<label_type>& labels_,\n            const std::vector<label_type>& distinct_labels_,\n            const unsigned long dims_,\n            const unsigned long num_threads\n        ) :\n            structural_svm_problem_threaded<matrix_type, std::vector<std::pair<unsigned long,typename matrix_type::type> > >(num_threads),\n            samples(samples_),\n            labels(labels_),\n            distinct_labels(distinct_labels_),\n            dims(dims_+1) // +1 for the bias\n        {}\n\n        virtual long get_num_dimensions (\n        ) const\n        {\n            return dims*distinct_labels.size();\n        }\n\n        virtual long get_num_samples (\n        ) const \n        {\n            return static_cast<long>(samples.size());\n        }\n\n        virtual void get_truth_joint_feature_vector (\n            long idx,\n            feature_vector_type& psi\n        ) const \n        {\n            assign(psi, samples[idx]);\n            // Add a constant -1 to account for the bias term.\n            psi.push_back(std::make_pair(dims-1,static_cast<scalar_type>(-1)));\n\n            // Find which distinct label goes with this psi.\n            long label_idx = 0;\n            for (unsigned long i = 0; i < distinct_labels.size(); ++i)\n            {\n                if (distinct_labels[i] == labels[idx])\n                {\n                    label_idx = i;\n                    break;\n                }\n            }\n\n            offset_feature_vector(psi, dims*label_idx);\n        }\n\n        virtual void separation_oracle (\n            const long idx,\n            const matrix_type& current_solution,\n            scalar_type& loss,\n            feature_vector_type& psi\n        ) const \n        {\n            scalar_type best_val = -std::numeric_limits<scalar_type>::infinity();\n            unsigned long best_idx = 0;\n\n            // Figure out which label is the best.  That is, what label maximizes\n            // LOSS(idx,y) + F(x,y).  Note that y in this case is given by distinct_labels[i].\n            for (unsigned long i = 0; i < distinct_labels.size(); ++i)\n            {\n                // Compute the F(x,y) part:\n                // perform: temp == dot(relevant part of current solution, samples[idx]) - current_bias\n                scalar_type temp = dot(mat(&current_solution(i*dims),dims-1), samples[idx]) - current_solution((i+1)*dims-1);\n\n                // Add the LOSS(idx,y) part:\n                if (labels[idx] != distinct_labels[i])\n                    temp += 1;\n\n                // Now temp == LOSS(idx,y) + F(x,y).  Check if it is the biggest we have seen.\n                if (temp > best_val)\n                {\n                    best_val = temp;\n                    best_idx = i;\n                }\n            }\n\n            assign(psi, samples[idx]);\n            // add a constant -1 to account for the bias term\n            psi.push_back(std::make_pair(dims-1,static_cast<scalar_type>(-1)));\n\n            offset_feature_vector(psi, dims*best_idx);\n\n            if (distinct_labels[best_idx] == labels[idx])\n                loss = 0;\n            else\n                loss = 1;\n        }\n\n    private:\n\n        void offset_feature_vector (\n            feature_vector_type& sample,\n            const unsigned long val\n        ) const\n        {\n            if (val != 0)\n            {\n                for (typename feature_vector_type::iterator i = sample.begin(); i != sample.end(); ++i)\n                {\n                    i->first += val;\n                }\n            }\n        }\n\n\n        const std::vector<sample_type>& samples;\n        const std::vector<label_type>& labels;\n        const std::vector<label_type>& distinct_labels;\n        const long dims;\n    };\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename label_type_ = typename K::scalar_type \n        >\n    class svm_multiclass_linear_trainer\n    {\n    public:\n        typedef label_type_ label_type;\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        typedef multiclass_linear_decision_function<kernel_type, label_type> trained_function_type;\n\n\n        // You are getting a compiler error on this line because you supplied a non-linear kernel\n        // to the svm_c_linear_trainer object.  You have to use one of the linear kernels with this\n        // trainer.\n        COMPILE_TIME_ASSERT((is_same_type<K, linear_kernel<sample_type> >::value ||\n                             is_same_type<K, sparse_linear_kernel<sample_type> >::value ));\n\n        svm_multiclass_linear_trainer (\n        ) :\n            num_threads(4),\n            C(1),\n            eps(0.001),\n            verbose(false),\n            learn_nonnegative_weights(false)\n        {\n        }\n\n        void set_num_threads (\n            unsigned long num\n        )\n        {\n            num_threads = num;\n        }\n\n        unsigned long get_num_threads (\n        ) const\n        {\n            return num_threads;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void svm_multiclass_linear_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const { return eps; }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            solver = item;\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return solver;\n        }\n\n        const kernel_type get_kernel (\n        ) const\n        {\n            return kernel_type();\n        }\n\n        bool learns_nonnegative_weights (\n        ) const { return learn_nonnegative_weights; }\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        )\n        {\n            learn_nonnegative_weights = value;\n            if (learn_nonnegative_weights)\n                prior = trained_function_type(); \n        }\n\n        void set_c (\n            scalar_type C_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void svm_multiclass_linear_trainer::set_c()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C_:   \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        const scalar_type get_c (\n        ) const\n        {\n            return C;\n        }\n\n        void set_prior (\n            const trained_function_type& prior_\n        )\n        {\n            prior = prior_;\n            learn_nonnegative_weights = false;\n        }\n\n        bool has_prior (\n        ) const\n        {\n            return prior.labels.size() != 0;\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const\n        {\n            scalar_type svm_objective = 0;\n            return train(all_samples, all_labels, svm_objective);\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels,\n            scalar_type& svm_objective\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(all_samples,all_labels),\n                \"\\t trained_function_type svm_multiclass_linear_trainer::train(all_samples,all_labels)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t all_samples.size():     \" << all_samples.size() \n                << \"\\n\\t all_labels.size():      \" << all_labels.size() \n                );\n\n            trained_function_type df;\n            df.labels = select_all_distinct_labels(all_labels);\n            if (has_prior())\n            {\n                df.labels.insert(df.labels.end(), prior.labels.begin(), prior.labels.end());\n                df.labels = select_all_distinct_labels(df.labels);\n            }\n            const long input_sample_dimensionality = max_index_plus_one(all_samples);\n            // If the samples are sparse then the right thing to do is to take the max\n            // dimensionality between the prior and the new samples.  But if the samples\n            // are dense vectors then they definitely all have to have exactly the same\n            // dimensionality.\n            const long dims = std::max(df.weights.nc(),input_sample_dimensionality);\n            if (is_matrix<sample_type>::value && has_prior())\n            {\n                DLIB_ASSERT(input_sample_dimensionality == prior.weights.nc(), \n                    \"\\t trained_function_type svm_multiclass_linear_trainer::train(all_samples,all_labels)\"\n                    << \"\\n\\t The training samples given to this function are not the same kind of training \"\n                    << \"\\n\\t samples used to create the prior.\"\n                    << \"\\n\\t input_sample_dimensionality: \" << input_sample_dimensionality \n                    << \"\\n\\t prior.weights.nc():          \" << prior.weights.nc() \n                );\n            }\n\n            typedef matrix<scalar_type,0,1> w_type;\n            w_type weights;\n            multiclass_svm_problem<w_type, sample_type, label_type> problem(all_samples, all_labels, df.labels, dims, num_threads);\n            if (verbose)\n                problem.be_verbose();\n\n            problem.set_max_cache_size(0);\n            problem.set_c(C);\n            problem.set_epsilon(eps);\n\n            unsigned long num_nonnegative = 0;\n            if (learn_nonnegative_weights)\n            {\n                num_nonnegative = problem.get_num_dimensions();\n            }\n\n            if (!has_prior())\n            {\n                svm_objective = solver(problem, weights, num_nonnegative);\n            }\n            else\n            {\n                matrix<scalar_type> temp(df.labels.size(),dims);\n                w_type b(df.labels.size());\n                temp = 0;\n                b = 0;\n\n                const long pad_size = dims-prior.weights.nc();\n                // Copy the prior into the temp and b matrices.  We have to do this row\n                // by row copy because the new training data might have new labels we\n                // haven't seen before and therefore the sizes of these matrices could be\n                // different.\n                for (unsigned long i = 0; i < prior.labels.size(); ++i)\n                {\n                    const long r = std::find(df.labels.begin(), df.labels.end(), prior.labels[i])-df.labels.begin();\n                    set_rowm(temp,r) = join_rows(rowm(prior.weights,i), zeros_matrix<scalar_type>(1,pad_size));\n                    b(r) = prior.b(i);\n                }\n\n                const w_type prior_vect = reshape_to_column_vector(join_rows(temp,b));\n                svm_objective = solver(problem, weights, prior_vect);\n            }\n\n\n            df.weights = colm(reshape(weights, df.labels.size(), dims+1), range(0,dims-1));\n            df.b       = colm(reshape(weights, df.labels.size(), dims+1), dims);\n            return df;\n        }\n\n    private:\n\n        unsigned long num_threads;\n        scalar_type C;\n        scalar_type eps;\n        bool verbose;\n        oca solver;\n        bool learn_nonnegative_weights;\n\n        trained_function_type prior;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#endif // DLIB_SVm_MULTICLASS_LINEAR_TRAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_multiclass_linear_trainer_abstract.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_MULTICLASS_LINEAR_TRAINER_ABSTRACT_Hh_ \n#ifdef DLIB_SVm_MULTICLASS_LINEAR_TRAINER_ABSTRACT_Hh_\n\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"sparse_kernel_abstract.h\"\n#include \"../optimization/optimization_oca_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename label_type_ = typename K::scalar_type \n        >\n    class svm_multiclass_linear_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                Is either linear_kernel or sparse_linear_kernel.  \n\n            REQUIREMENTS ON label_type_\n                label_type_ must be default constructable, copyable, and comparable using\n                operator < and ==.  It must also be possible to write it to an std::ostream\n                using operator<<.\n\n            INITIAL VALUE\n                - get_num_threads() == 4 \n                - learns_nonnegative_weights() == false\n                - get_epsilon() == 0.001\n                - get_c() == 1\n                - this object will not be verbose unless be_verbose() is called\n                - #get_oca() == oca() (i.e. an instance of oca with default parameters) \n                - has_prior() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a tool for training a multiclass support \n                vector machine.  It is optimized for the case where linear kernels \n                are used.  \n        !*/\n\n    public:\n        typedef label_type_ label_type;\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef multiclass_linear_decision_function<kernel_type, label_type> trained_function_type;\n\n        svm_multiclass_linear_trainer (\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer \n                  to execute.\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a \n                  user can observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the SVM problem.  \n        !*/\n\n        void set_num_threads (\n            unsigned long num\n        );\n        /*!\n            ensures\n                - #get_num_threads() == num\n        !*/\n\n        unsigned long get_num_threads (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads used during training.  You should \n                  usually set this equal to the number of processing cores on your\n                  machine.\n        !*/\n\n        const kernel_type get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object.  Since\n                  the linear kernels don't have any parameters this function just\n                  returns kernel_type()\n        !*/\n\n        void set_c (\n            scalar_type C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() == C \n        !*/\n\n        const scalar_type get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter that \n                  determines the trade off between trying to fit the training data \n                  exactly or allowing more errors but hopefully improving the \n                  generalization of the resulting classifier.  Larger values encourage \n                  exact fitting while smaller values of C may encourage better \n                  generalization. \n        !*/\n\n        bool learns_nonnegative_weights (\n        ) const;\n        /*!\n            ensures\n                - The output of training is a set of weights and bias values that together\n                  define the behavior of a multiclass_linear_decision_function object.  If\n                  learns_nonnegative_weights() == true then the resulting weights and bias\n                  values will always have non-negative values.  That is, if this function\n                  returns true then all the numbers in the multiclass_linear_decision_function \n                  objects output by train() will be non-negative.\n        !*/\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        );\n        /*!\n            ensures\n                - #learns_nonnegative_weights() == value\n                - if (value == true) then\n                    - #has_prior() == false\n        !*/\n\n        void set_prior (\n            const trained_function_type& prior\n        );\n        /*!\n            ensures\n                - Subsequent calls to train() will try to learn a function similar to the\n                  given prior.\n                - #has_prior() == true\n                - #learns_nonnegative_weights() == false\n        !*/\n\n        bool has_prior (\n        ) const\n        /*!\n            ensures\n                - returns true if a prior has been set and false otherwise.  Having a prior\n                  set means that you have called set_prior() and supplied a previously\n                  trained function as a reference.  In this case, any call to train() will\n                  try to learn a function that matches the behavior of the prior as close\n                  as possible but also fits the supplied training data.  In more technical\n                  detail, having a prior means we replace the ||w||^2 regularizer with one\n                  of the form ||w-prior||^2 where w is the set of parameters for a learned\n                  function.\n        !*/\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(all_samples, all_labels)\n                - All the vectors in all_samples must have the same dimensionality.\n                - if (has_prior()) then\n                    - The vectors in all_samples must have the same dimensionality as the\n                      vectors used to train the prior given to set_prior().  \n            ensures\n                - trains a multiclass SVM to solve the given multiclass classification problem.  \n                - returns a multiclass_linear_decision_function F with the following properties:\n                    - if (new_x is a sample predicted to have a label of L) then\n                        - F(new_x) == L\n                    - F.get_labels() == select_all_distinct_labels(all_labels)\n                    - F.number_of_classes() == select_all_distinct_labels(all_labels).size()\n        !*/\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels,\n            scalar_type& svm_objective\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(all_samples, all_labels)\n                - All the vectors in all_samples must have the same dimensionality.\n                - if (has_prior()) then\n                    - The vectors in all_samples must have the same dimensionality as the\n                      vectors used to train the prior given to set_prior().  \n            ensures\n                - trains a multiclass SVM to solve the given multiclass classification problem.  \n                - returns a multiclass_linear_decision_function F with the following properties:\n                    - if (new_x is a sample predicted to have a label of L) then\n                        - F(new_x) == L\n                    - F.get_labels() == select_all_distinct_labels(all_labels)\n                    - F.number_of_classes() == select_all_distinct_labels(all_labels).size()\n                - #svm_objective == the final value of the SVM objective function\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#endif // DLIB_SVm_MULTICLASS_LINEAR_TRAINER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_nu_trainer.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_NU_TRAINER_Hh_ \n#define DLIB_SVm_NU_TRAINER_Hh_\n\n//#include \"local/make_label_kernel_matrix.h\"\n\n#include \"svm_nu_trainer_abstract.h\"\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"../optimization/optimization_solve_qp2_using_smo.h\"\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_nu_trainer\n    {\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_nu_trainer (\n        ) :\n            nu(0.1),\n            cache_size(200),\n            eps(0.001)\n        {\n        }\n\n        svm_nu_trainer (\n            const kernel_type& kernel_, \n            const scalar_type& nu_\n        ) :\n            kernel_function(kernel_),\n            nu(nu_),\n            cache_size(200),\n            eps(0.001)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < nu && nu <= 1,\n                \"\\tsvm_nu_trainer::svm_nu_trainer(kernel,nu)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t nu: \" << nu \n                );\n        }\n\n        void set_cache_size (\n            long cache_size_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(cache_size_ > 0,\n                \"\\tvoid svm_nu_trainer::set_cache_size(cache_size_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t cache_size: \" << cache_size_ \n                );\n            cache_size = cache_size_;\n        }\n\n        long get_cache_size (\n        ) const\n        {\n            return cache_size;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\tvoid svm_nu_trainer::set_epsilon(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps: \" << eps_ \n                );\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const\n        { \n            return eps;\n        }\n\n        void set_kernel (\n            const kernel_type& k\n        )\n        {\n            kernel_function = k;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel_function;\n        }\n\n        void set_nu (\n            scalar_type nu_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < nu_ && nu_ <= 1,\n                \"\\tvoid svm_nu_trainer::set_nu(nu_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t nu: \" << nu_ \n                );\n            nu = nu_;\n        }\n\n        const scalar_type get_nu (\n        ) const\n        {\n            return nu;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            return do_train(mat(x), mat(y));\n        }\n\n        void swap (\n            svm_nu_trainer& item\n        )\n        {\n            exchange(kernel_function, item.kernel_function);\n            exchange(nu,              item.nu);\n            exchange(cache_size,      item.cache_size);\n            exchange(eps,             item.eps);\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            typedef typename K::scalar_type scalar_type;\n            typedef typename decision_function<K>::sample_vector_type sample_vector_type;\n            typedef typename decision_function<K>::scalar_vector_type scalar_vector_type;\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_binary_classification_problem(x,y) == true,\n                \"\\tdecision_function svm_nu_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t y.nr(): \" << y.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                << \"\\n\\t y.nc(): \" << y.nc() \n                << \"\\n\\t is_binary_classification_problem(x,y): \" << is_binary_classification_problem(x,y)\n                );\n\n\n            scalar_vector_type alpha;\n\n            solve_qp2_using_smo<scalar_vector_type> solver;\n\n            solver(symmetric_matrix_cache<float>((diagm(y)*kernel_matrix(kernel_function,x)*diagm(y)), cache_size), \n            //solver(symmetric_matrix_cache<float>(make_label_kernel_matrix(kernel_matrix(kernel_function,x),y), cache_size), \n                   y, \n                   nu,\n                   alpha,\n                   eps);\n\n            scalar_type rho, b;\n            calculate_rho_and_b(y,alpha,solver.get_gradient(),rho,b);\n            alpha = pointwise_multiply(alpha,y)/rho;\n\n            // count the number of support vectors\n            const long sv_count = (long)sum(alpha != 0);\n\n            scalar_vector_type sv_alpha;\n            sample_vector_type support_vectors;\n\n            // size these column vectors so that they have an entry for each support vector\n            sv_alpha.set_size(sv_count);\n            support_vectors.set_size(sv_count);\n\n            // load the support vectors and their alpha values into these new column matrices\n            long idx = 0;\n            for (long i = 0; i < alpha.nr(); ++i)\n            {\n                if (alpha(i) != 0)\n                {\n                    sv_alpha(idx) = alpha(i);\n                    support_vectors(idx) = x(i);\n                    ++idx;\n                }\n            }\n\n            // now return the decision function\n            return decision_function<K> (sv_alpha, b, kernel_function, support_vectors);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename scalar_vector_type,\n            typename scalar_vector_type2,\n            typename scalar_type\n            >\n        void calculate_rho_and_b(\n            const scalar_vector_type2& y,\n            const scalar_vector_type& alpha,\n            const scalar_vector_type& df,\n            scalar_type& rho, \n            scalar_type& b\n        ) const\n        {\n            using namespace std;\n            long num_p_free = 0;\n            long num_n_free = 0;\n            scalar_type sum_p_free = 0;\n            scalar_type sum_n_free = 0;\n\n            scalar_type upper_bound_p = -numeric_limits<scalar_type>::infinity();\n            scalar_type upper_bound_n = -numeric_limits<scalar_type>::infinity();\n            scalar_type lower_bound_p = numeric_limits<scalar_type>::infinity();\n            scalar_type lower_bound_n = numeric_limits<scalar_type>::infinity();\n\n            for(long i = 0; i < alpha.nr(); ++i)\n            {\n                if(y(i) == 1)\n                {\n                    if(alpha(i) == 1)\n                    {\n                        if (df(i) > upper_bound_p)\n                            upper_bound_p = df(i);\n                    }\n                    else if(alpha(i) == 0)\n                    {\n                        if (df(i) < lower_bound_p)\n                            lower_bound_p = df(i);\n                    }\n                    else\n                    {\n                        ++num_p_free;\n                        sum_p_free += df(i);\n                    }\n                }\n                else\n                {\n                    if(alpha(i) == 1)\n                    {\n                        if (df(i) > upper_bound_n)\n                            upper_bound_n = df(i);\n                    }\n                    else if(alpha(i) == 0)\n                    {\n                        if (df(i) < lower_bound_n)\n                            lower_bound_n = df(i);\n                    }\n                    else\n                    {\n                        ++num_n_free;\n                        sum_n_free += df(i);\n                    }\n                }\n            }\n\n            scalar_type r1,r2;\n            if(num_p_free > 0)\n                r1 = sum_p_free/num_p_free;\n            else\n                r1 = (upper_bound_p+lower_bound_p)/2;\n\n            if(num_n_free > 0)\n                r2 = sum_n_free/num_n_free;\n            else\n                r2 = (upper_bound_n+lower_bound_n)/2;\n\n            rho = (r1+r2)/2;\n            b = (r1-r2)/2/rho;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        kernel_type kernel_function;\n        scalar_type nu;\n        long cache_size;\n        scalar_type eps;\n    }; // end of class svm_nu_trainer\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K>\n    void swap (\n        svm_nu_trainer<K>& a,\n        svm_nu_trainer<K>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_NU_TRAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_nu_trainer_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_NU_TRAINER_ABSTRACT_\n#ifdef DLIB_SVm_NU_TRAINER_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"../optimization/optimization_solve_qp2_using_smo_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_nu_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements a trainer for a nu support vector machine for \n                solving binary classification problems.  It is implemented using the SMO\n                algorithm.\n\n                The implementation of the nu-svm training algorithm used by this object is based\n                on the following excellent papers:\n                    - Chang and Lin, Training {nu}-Support Vector Classifiers: Theory and Algorithms\n                    - Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support vector \n                      machines, 2001. Software available at http://www.csie.ntu.edu.tw/~cjlin/libsvm\n\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_nu_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_nu() == 0.1 \n                - #get_cache_size() == 200\n                - #get_epsilon() == 0.001\n        !*/\n\n        svm_nu_trainer (\n            const kernel_type& kernel, \n            const scalar_type& nu\n        );\n        /*!\n            requires\n                - 0 < nu <= 1\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_kernel() == kernel\n                - #get_nu() == nu\n                - #get_cache_size() == 200\n                - #get_epsilon() == 0.001\n        !*/\n\n        void set_cache_size (\n            long cache_size\n        );\n        /*!\n            requires\n                - cache_size > 0\n            ensures\n                - #get_cache_size() == cache_size \n        !*/\n\n        const long get_cache_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of megabytes of cache this object will use\n                  when it performs training via the this->train() function.\n                  (bigger values of this may make training go faster but won't affect \n                  the result.  However, too big a value will cause you to run out of \n                  memory, obviously.)\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Generally a good value for this is 0.001.  Smaller values may result\n                  in a more accurate solution but take longer to execute.\n        !*/\n\n        void set_kernel (\n            const kernel_type& k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k \n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object\n        !*/\n\n        void set_nu (\n            scalar_type nu\n        );\n        /*!\n            requires\n                - 0 < nu <= 1\n            ensures\n                - #get_nu() == nu\n        !*/\n\n        const scalar_type get_nu (\n        ) const;\n        /*!\n            ensures\n                - returns the nu svm parameter.  This is a value between 0 and\n                  1.  It is the parameter that determines the trade off between\n                  trying to fit the training data exactly or allowing more errors \n                  but hopefully improving the generalization ability of the \n                  resulting classifier.  Smaller values encourage exact fitting \n                  while larger values of nu may encourage better generalization. \n                  For more information you should consult the papers referenced \n                  above.\n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - is_binary_classification_problem(x,y) == true\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n            ensures\n                - trains a nu support vector classifier given the training samples in x and \n                  labels in y.  Training is done when the error is less than get_epsilon().\n                - returns a decision function F with the following properties:\n                    - if (new_x is a sample predicted have +1 label) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n            throws\n                - invalid_nu_error\n                  This exception is thrown if get_nu() >= maximum_nu(y)\n                - std::bad_alloc\n        !*/\n\n        void swap (\n            svm_nu_trainer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n    }; \n\n    template <typename K>\n    void swap (\n        svm_nu_trainer<K>& a,\n        svm_nu_trainer<K>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_NU_TRAINER_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_one_class_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_ONE_CLASS_TRAINER_Hh_ \n#define DLIB_SVm_ONE_CLASS_TRAINER_Hh_\n\n#include \"svm_one_class_trainer_abstract.h\"\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"../optimization/optimization_solve_qp3_using_smo.h\"\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_one_class_trainer\n    {\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_one_class_trainer (\n        ) :\n            nu(0.1),\n            cache_size(200),\n            eps(0.001)\n        {\n        }\n\n        svm_one_class_trainer (\n            const kernel_type& kernel_, \n            const scalar_type& nu_\n        ) :\n            kernel_function(kernel_),\n            nu(nu_),\n            cache_size(200),\n            eps(0.001)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < nu && nu <= 1,\n                \"\\tsvm_one_class_trainer::svm_one_class_trainer(kernel,nu)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t nu: \" << nu \n                );\n        }\n\n        void set_cache_size (\n            long cache_size_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(cache_size_ > 0,\n                \"\\tvoid svm_one_class_trainer::set_cache_size(cache_size_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t cache_size: \" << cache_size_ \n                );\n            cache_size = cache_size_;\n        }\n\n        long get_cache_size (\n        ) const\n        {\n            return cache_size;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\tvoid svm_one_class_trainer::set_epsilon(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps: \" << eps_ \n                );\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const\n        { \n            return eps;\n        }\n\n        void set_kernel (\n            const kernel_type& k\n        )\n        {\n            kernel_function = k;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel_function;\n        }\n\n        void set_nu (\n            scalar_type nu_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(0 < nu_ && nu_ <= 1,\n                \"\\tvoid svm_one_class_trainer::set_nu(nu_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t nu: \" << nu_ \n                );\n            nu = nu_;\n        }\n\n        const scalar_type get_nu (\n        ) const\n        {\n            return nu;\n        }\n\n        template <\n            typename in_sample_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x\n        ) const\n        {\n            return do_train(mat(x));\n        }\n\n        void swap (\n            svm_one_class_trainer& item\n        )\n        {\n            exchange(kernel_function, item.kernel_function);\n            exchange(nu,              item.nu);\n            exchange(cache_size,      item.cache_size);\n            exchange(eps,             item.eps);\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename in_sample_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x\n        ) const\n        {\n            typedef typename K::scalar_type scalar_type;\n            typedef typename decision_function<K>::sample_vector_type sample_vector_type;\n            typedef typename decision_function<K>::scalar_vector_type scalar_vector_type;\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_col_vector(x) && x.size() > 0,\n                \"\\tdecision_function svm_one_class_trainer::train(x)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                );\n\n\n            scalar_vector_type alpha;\n\n            solve_qp3_using_smo<scalar_vector_type> solver;\n\n            solver(symmetric_matrix_cache<float>(kernel_matrix(kernel_function,x), cache_size), \n                   zeros_matrix<scalar_type>(x.size(),1),\n                   ones_matrix<scalar_type>(x.size(),1), \n                   nu*x.size(),\n                   1,\n                   1,\n                   alpha,\n                   eps);\n\n            scalar_type rho;\n            calculate_rho(alpha,solver.get_gradient(),rho);\n\n\n            // count the number of support vectors\n            const long sv_count = (long)sum(alpha != 0);\n\n            scalar_vector_type sv_alpha;\n            sample_vector_type support_vectors;\n\n            // size these column vectors so that they have an entry for each support vector\n            sv_alpha.set_size(sv_count);\n            support_vectors.set_size(sv_count);\n\n            // load the support vectors and their alpha values into these new column matrices\n            long idx = 0;\n            for (long i = 0; i < alpha.nr(); ++i)\n            {\n                if (alpha(i) != 0)\n                {\n                    sv_alpha(idx) = alpha(i);\n                    support_vectors(idx) = x(i);\n                    ++idx;\n                }\n            }\n\n            // now return the decision function\n            return decision_function<K> (sv_alpha, rho, kernel_function, support_vectors);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename scalar_vector_type\n            >\n        void calculate_rho(\n            const scalar_vector_type& alpha,\n            const scalar_vector_type& df,\n            scalar_type& rho\n        ) const\n        {\n            using namespace std;\n            long num_p_free = 0;\n            scalar_type sum_p_free = 0;\n\n\n            scalar_type upper_bound_p;\n            scalar_type lower_bound_p;\n\n            find_min_and_max(df, upper_bound_p, lower_bound_p);\n\n            for(long i = 0; i < alpha.nr(); ++i)\n            {\n                if(alpha(i) == 1)\n                {\n                    if (df(i) > upper_bound_p)\n                        upper_bound_p = df(i);\n                }\n                else if(alpha(i) == 0)\n                {\n                    if (df(i) < lower_bound_p)\n                        lower_bound_p = df(i);\n                }\n                else\n                {\n                    ++num_p_free;\n                    sum_p_free += df(i);\n                }\n            }\n\n            scalar_type r1;\n            if(num_p_free > 0)\n                r1 = sum_p_free/num_p_free;\n            else\n                r1 = (upper_bound_p+lower_bound_p)/2;\n\n            rho = r1;\n        } \n\n        kernel_type kernel_function;\n        scalar_type nu;\n        long cache_size;\n        scalar_type eps;\n    }; // end of class svm_one_class_trainer\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K>\n    void swap (\n        svm_one_class_trainer<K>& a,\n        svm_one_class_trainer<K>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_ONE_CLASS_TRAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_one_class_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_ONE_CLASS_TRAINER_ABSTRACT_\n#ifdef DLIB_SVm_ONE_CLASS_TRAINER_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"../optimization/optimization_solve_qp3_using_smo_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_one_class_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements a trainer for a support vector machine for \n                solving one-class classification problems.  It is implemented using the SMO\n                algorithm.\n\n                The implementation of the training algorithm used by this object is based\n                on the following excellent paper:\n                    - Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support vector \n                      machines, 2001. Software available at http://www.csie.ntu.edu.tw/~cjlin/libsvm\n\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_one_class_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_nu() == 0.1 \n                - #get_cache_size() == 200\n                - #get_epsilon() == 0.001\n        !*/\n\n        svm_one_class_trainer (\n            const kernel_type& kernel, \n            const scalar_type& nu\n        );\n        /*!\n            requires\n                - 0 < nu <= 1\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_kernel() == kernel\n                - #get_nu() == nu\n                - #get_cache_size() == 200\n                - #get_epsilon() == 0.001\n        !*/\n\n        void set_cache_size (\n            long cache_size\n        );\n        /*!\n            requires\n                - cache_size > 0\n            ensures\n                - #get_cache_size() == cache_size \n        !*/\n\n        const long get_cache_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of megabytes of cache this object will use\n                  when it performs training via the this->train() function.\n                  (bigger values of this may make training go faster but won't affect \n                  the result.  However, too big a value will cause you to run out of \n                  memory, obviously.)\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Generally a good value for this is 0.001.  Smaller values may result\n                  in a more accurate solution but take longer to execute.\n        !*/\n\n        void set_kernel (\n            const kernel_type& k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k \n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object\n        !*/\n\n        void set_nu (\n            scalar_type nu\n        );\n        /*!\n            requires\n                - 0 < nu <= 1\n            ensures\n                - #get_nu() == nu\n        !*/\n\n        const scalar_type get_nu (\n        ) const;\n        /*!\n            ensures\n                - returns the nu svm parameter.  This is a value between 0 and\n                  1.  It is the parameter that determines the trade off between\n                  trying to fit the training data exactly or allowing more errors \n                  but hopefully improving the generalization ability of the \n                  resulting classifier.  Smaller values encourage exact fitting \n                  while larger values of nu may encourage better generalization. \n                  For more information you should consult the papers referenced \n                  above.\n        !*/\n\n        template <\n            typename in_sample_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x\n        ) const;\n        /*!\n            requires\n                - x.size() > 0\n                - is_col_vector(x) == true\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n            ensures\n                - trains a one-class support vector classifier given the training samples in x.\n                  Training is done when the error is less than get_epsilon().\n                - returns a decision function F with the following properties:\n                    - if (new_x is a sample predicted to arise from the distribution\n                      which generated the training samples) then\n                        - F(new_x) >= 0\n                    - else\n                        - F(new_x) < 0\n        !*/\n\n        void swap (\n            svm_one_class_trainer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n    }; \n\n    template <typename K>\n    void swap (\n        svm_one_class_trainer<K>& a,\n        svm_one_class_trainer<K>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_ONE_CLASS_TRAINER_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_rank_trainer.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVM_RANK_TrAINER_Hh_\n#define DLIB_SVM_RANK_TrAINER_Hh_\n\n#include \"svm_rank_trainer_abstract.h\"\n\n#include \"ranking_tools.h\"\n#include \"../algs.h\"\n#include \"../optimization.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"sparse_vector.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type, \n        typename sample_type \n        >\n    class oca_problem_ranking_svm : public oca_problem<matrix_type >\n    {\n    public:\n        /*\n            This class is used as part of the implementation of the svm_rank_trainer\n            defined towards the end of this file.\n        */\n\n        typedef typename matrix_type::type scalar_type;\n\n        oca_problem_ranking_svm(\n            const scalar_type C_,\n            const std::vector<ranking_pair<sample_type> >& samples_,\n            const bool be_verbose_,\n            const scalar_type eps_,\n            const unsigned long max_iter,\n            const unsigned long dims_\n        ) :\n            samples(samples_),\n            C(C_),\n            be_verbose(be_verbose_),\n            eps(eps_),\n            max_iterations(max_iter),\n            dims(dims_)\n        {\n        }\n\n        virtual scalar_type get_c (\n        ) const \n        {\n            return C;\n        }\n\n        virtual long get_num_dimensions (\n        ) const \n        {\n            return dims;\n        }\n\n        virtual bool optimization_status (\n            scalar_type current_objective_value,\n            scalar_type current_error_gap,\n            scalar_type current_risk_value,\n            scalar_type current_risk_gap,\n            unsigned long num_cutting_planes,\n            unsigned long num_iterations\n        ) const \n        {\n            if (be_verbose)\n            {\n                using namespace std;\n                cout << \"objective:     \" << current_objective_value << endl;\n                cout << \"objective gap: \" << current_error_gap << endl;\n                cout << \"risk:          \" << current_risk_value << endl;\n                cout << \"risk gap:      \" << current_risk_gap << endl;\n                cout << \"num planes:    \" << num_cutting_planes << endl;\n                cout << \"iter:          \" << num_iterations << endl;\n                cout << endl;\n            }\n\n            if (num_iterations >= max_iterations)\n                return true;\n\n            if (current_risk_gap < eps)\n                return true;\n\n            return false;\n        }\n\n        virtual bool risk_has_lower_bound (\n            scalar_type& lower_bound\n        ) const \n        { \n            lower_bound = 0;\n            return true; \n        }\n\n        virtual void get_risk (\n            matrix_type& w,\n            scalar_type& risk,\n            matrix_type& subgradient\n        ) const \n        {\n            subgradient.set_size(w.size(),1);\n            subgradient = 0;\n            risk = 0;\n\n            // Note that we want the risk value to be in terms of the fraction of overall\n            // rank flips.  So a risk of 0.1 would mean that rank flips happen < 10% of the\n            // time.\n\n\n            std::vector<double> rel_scores;\n            std::vector<double> nonrel_scores;\n            std::vector<unsigned long> rel_counts;\n            std::vector<unsigned long> nonrel_counts;\n\n            unsigned long total_pairs = 0;\n\n            // loop over all the samples and compute the risk and its subgradient at the current solution point w\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                rel_scores.resize(samples[i].relevant.size());\n                nonrel_scores.resize(samples[i].nonrelevant.size());\n\n                for (unsigned long k = 0; k < rel_scores.size(); ++k)\n                    rel_scores[k] = dot(samples[i].relevant[k], w);\n\n                for (unsigned long k = 0; k < nonrel_scores.size(); ++k)\n                    nonrel_scores[k] = dot(samples[i].nonrelevant[k], w) + 1;\n\n                count_ranking_inversions(rel_scores, nonrel_scores, rel_counts, nonrel_counts);\n\n                total_pairs += rel_scores.size()*nonrel_scores.size();\n\n                for (unsigned long k = 0; k < rel_counts.size(); ++k)\n                {\n                    if (rel_counts[k] != 0)\n                    {\n                        risk -= rel_counts[k]*rel_scores[k];\n                        subtract_from(subgradient, samples[i].relevant[k], rel_counts[k]); \n                    }\n                }\n\n                for (unsigned long k = 0; k < nonrel_counts.size(); ++k)\n                {\n                    if (nonrel_counts[k] != 0)\n                    {\n                        risk += nonrel_counts[k]*nonrel_scores[k];\n                        add_to(subgradient, samples[i].nonrelevant[k], nonrel_counts[k]); \n                    }\n                }\n\n            }\n\n            const scalar_type scale = 1.0/total_pairs;\n\n            risk *= scale;\n            subgradient = scale*subgradient;\n        }\n\n    private:\n\n    // -----------------------------------------------------\n    // -----------------------------------------------------\n\n\n        const std::vector<ranking_pair<sample_type> >& samples;\n        const scalar_type C;\n\n        const bool be_verbose;\n        const scalar_type eps;\n        const unsigned long max_iterations;\n        const unsigned long dims;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type, \n        typename sample_type,\n        typename scalar_type\n        >\n    oca_problem_ranking_svm<matrix_type, sample_type> make_oca_problem_ranking_svm (\n        const scalar_type C,\n        const std::vector<ranking_pair<sample_type> >& samples,\n        const bool be_verbose,\n        const scalar_type eps,\n        const unsigned long max_iterations,\n        const unsigned long dims\n    )\n    {\n        return oca_problem_ranking_svm<matrix_type, sample_type>(\n            C, samples, be_verbose, eps, max_iterations, dims);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_rank_trainer\n    {\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        // You are getting a compiler error on this line because you supplied a non-linear kernel\n        // to the svm_rank_trainer object.  You have to use one of the linear kernels with this\n        // trainer.\n        COMPILE_TIME_ASSERT((is_same_type<K, linear_kernel<sample_type> >::value ||\n                             is_same_type<K, sparse_linear_kernel<sample_type> >::value ));\n\n        svm_rank_trainer (\n        )\n        {\n            C = 1;\n            verbose = false;\n            eps = 0.001;\n            max_iterations = 10000;\n            learn_nonnegative_weights = false;\n            last_weight_1 = false;\n        }\n\n        explicit svm_rank_trainer (\n            const scalar_type& C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t svm_rank_trainer::svm_rank_trainer()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n            verbose = false;\n            eps = 0.001;\n            max_iterations = 10000;\n            learn_nonnegative_weights = false;\n            last_weight_1 = false;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void svm_rank_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const { return eps; }\n\n        unsigned long get_max_iterations (\n        ) const { return max_iterations; }\n\n        void set_max_iterations (\n            unsigned long max_iter\n        ) \n        {\n            max_iterations = max_iter;\n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        bool forces_last_weight_to_1 (\n        ) const\n        {\n            return last_weight_1;\n        }\n\n        void force_last_weight_to_1 (\n            bool should_last_weight_be_1\n        )\n        {\n            last_weight_1 = should_last_weight_be_1;\n            if (last_weight_1)\n                prior.set_size(0);\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            solver = item;\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return solver;\n        }\n\n        const kernel_type get_kernel (\n        ) const\n        {\n            return kernel_type();\n        }\n\n        bool learns_nonnegative_weights (\n        ) const { return learn_nonnegative_weights; }\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        )\n        {\n            learn_nonnegative_weights = value;\n            if (learn_nonnegative_weights)\n                prior.set_size(0); \n        }\n\n        void set_prior (\n            const trained_function_type& prior_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(prior_.basis_vectors.size() == 1 &&\n                        prior_.alpha(0) == 1,\n                \"\\t void svm_rank_trainer::set_prior()\"\n                << \"\\n\\t The supplied prior could not have been created by this object's train() method.\"\n                << \"\\n\\t prior_.basis_vectors.size(): \" << prior_.basis_vectors.size() \n                << \"\\n\\t prior_.alpha(0):             \" << prior_.alpha(0) \n                << \"\\n\\t this: \" << this\n                );\n\n            prior = sparse_to_dense(prior_.basis_vectors(0));\n            learn_nonnegative_weights = false;\n            last_weight_1 = false;\n        }\n\n        bool has_prior (\n        ) const\n        {\n            return prior.size() != 0;\n        }\n\n        void set_c (\n            scalar_type C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void svm_rank_trainer::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        const scalar_type get_c (\n        ) const\n        {\n            return C;\n        }\n\n        const decision_function<kernel_type> train (\n            const std::vector<ranking_pair<sample_type> >& samples\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(is_ranking_problem(samples) == true,\n                \"\\t decision_function svm_rank_trainer::train(samples)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t samples.size(): \" << samples.size() \n                << \"\\n\\t is_ranking_problem(samples): \" << is_ranking_problem(samples)\n                );\n\n\n            typedef matrix<scalar_type,0,1> w_type;\n            w_type w;\n\n            const unsigned long num_dims = max_index_plus_one(samples);\n\n            unsigned long num_nonnegative = 0;\n            if (learn_nonnegative_weights)\n            {\n                num_nonnegative = num_dims;\n            }\n\n            unsigned long force_weight_1_idx = std::numeric_limits<unsigned long>::max(); \n            if (last_weight_1)\n            {\n                force_weight_1_idx = num_dims-1;\n            }\n\n            if (has_prior())\n            {\n                if (is_matrix<sample_type>::value)\n                {\n                    // make sure requires clause is not broken\n                    DLIB_CASSERT(num_dims == (unsigned long)prior.size(),\n                        \"\\t decision_function svm_rank_trainer::train(samples)\"\n                        << \"\\n\\t The dimension of the training vectors must match the dimension of\\n\"\n                        << \"\\n\\t those used to create the prior.\"\n                        << \"\\n\\t num_dims:     \" << num_dims \n                        << \"\\n\\t prior.size(): \" << prior.size() \n                    );\n                }\n                const unsigned long dims = std::max(num_dims, (unsigned long)prior.size());\n                // In the case of sparse sample vectors, it is possible that the input\n                // vector dimensionality is larger than the prior vector dimensionality.\n                // We need to check for this case and pad prior with zeros if it is the\n                // case.\n                if ((unsigned long)prior.size() < dims)\n                {\n                    matrix<scalar_type,0,1> prior_temp = join_cols(prior, zeros_matrix<scalar_type>(dims-prior.size(),1));\n                    solver( make_oca_problem_ranking_svm<w_type>(C, samples, verbose, eps, max_iterations, dims), \n                        w, \n                        prior_temp);\n                }\n                else\n                {\n                    solver( make_oca_problem_ranking_svm<w_type>(C, samples, verbose, eps, max_iterations, dims), \n                        w, \n                        prior);\n                }\n\n            }\n            else\n            {\n                solver( make_oca_problem_ranking_svm<w_type>(C, samples, verbose, eps, max_iterations, num_dims), \n                    w, \n                    num_nonnegative,\n                    force_weight_1_idx);\n            }\n\n\n            // put the solution into a decision function and then return it\n            decision_function<kernel_type> df;\n            df.b = 0;\n            df.basis_vectors.set_size(1);\n            // Copy the results into the output basis vector.  The output vector might be a\n            // sparse vector container so we need to use this special kind of copy to\n            // handle that case.\n            assign(df.basis_vectors(0), matrix_cast<scalar_type>(w));\n            df.alpha.set_size(1);\n            df.alpha(0) = 1;\n\n            return df;\n        }\n\n        const decision_function<kernel_type> train (\n            const ranking_pair<sample_type>& sample\n        ) const\n        {\n            return train(std::vector<ranking_pair<sample_type> >(1, sample));\n        }\n\n    private:\n\n        scalar_type C;\n        oca solver;\n        scalar_type eps;\n        bool verbose;\n        unsigned long max_iterations;\n        bool learn_nonnegative_weights;\n        bool last_weight_1;\n        matrix<scalar_type,0,1> prior;\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVM_RANK_TrAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_rank_trainer_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVM_RANK_TrAINER_ABSTRACT_Hh_\n#ifdef DLIB_SVM_RANK_TrAINER_ABSTRACT_Hh_\n\n#include \"ranking_tools_abstract.h\"\n#include \"sparse_vector_abstract.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svm_rank_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                Is either linear_kernel or sparse_linear_kernel.  \n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a tool for training a ranking support vector machine\n                using linear kernels.  In particular, this object is a tool for training\n                the Ranking SVM described in the paper: \n                    Optimizing Search Engines using Clickthrough Data by Thorsten Joachims\n\n                Note that we normalize the C parameter by multiplying it by 1/(number of ranking pairs).\n                Therefore, to make an exact comparison between this object and Equation 12\n                in the paper you must multiply C by the appropriate normalizing quantity. \n    \n                Finally, note that the implementation of this object is done using the oca\n                optimizer and count_ranking_inversions() method.  This means that it runs\n                in O(n*log(n)) time, making it suitable for use with large datasets.\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svm_rank_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used to train a\n                  ranking support vector machine.\n                - #get_oca() == oca() (i.e. an instance of oca with default parameters) \n                - #get_c() == 1\n                - #get_epsilon() == 0.001\n                - this object will not be verbose unless be_verbose() is called\n                - #get_max_iterations() == 10000\n                - #learns_nonnegative_weights() == false\n                - #forces_last_weight_to_1() == false\n                - #has_prior() == false\n        !*/\n\n        explicit svm_rank_trainer (\n            const scalar_type& C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - This object is properly initialized and ready to be used to train a\n                  ranking support vector machine.\n                - #get_oca() == oca() (i.e. an instance of oca with default parameters) \n                - #get_c() == C\n                - #get_epsilon() == 0.001\n                - this object will not be verbose unless be_verbose() is called\n                - #get_max_iterations() == 10000\n                - #learns_nonnegative_weights() == false\n                - #forces_last_weight_to_1() == false\n                - #has_prior() == false\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        );\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer to\n                  train.  You can think of this epsilon value as saying \"solve the\n                  optimization problem until the average ranking accuracy is within epsilon\n                  of its optimal value\".  Here we mean \"ranking accuracy\" in the same sense\n                  used by test_ranking_function() and cross_validate_ranking_trainer().\n        !*/\n\n        unsigned long get_max_iterations (\n        ) const; \n        /*!\n            ensures\n                - returns the maximum number of iterations the SVM optimizer is allowed to\n                  run before it is required to stop and return a result.\n        !*/\n\n        void set_max_iterations (\n            unsigned long max_iter\n        );\n        /*!\n            ensures\n                - #get_max_iterations() == max_iter\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a user can\n                  observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        bool forces_last_weight_to_1 (\n        ) const;\n        /*!\n            ensures\n                - returns true if this trainer has the constraint that the last weight in\n                  the learned parameter vector must be 1.  This is the weight corresponding\n                  to the feature in the training vectors with the highest dimension.\n        !*/\n\n        void force_last_weight_to_1 (\n            bool should_last_weight_be_1\n        );\n        /*!\n            ensures\n                - #forces_last_weight_to_1() == should_last_weight_be_1\n                - if (should_last_weight_be_1 == true) then\n                    - #has_prior() == false\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the SVM problem.  \n        !*/\n\n        const kernel_type get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object.  Since the\n                  linear kernels don't have any parameters this function just returns\n                  kernel_type()\n        !*/\n\n        bool learns_nonnegative_weights (\n        ) const; \n        /*!\n            ensures\n                - The output of training is a weight vector that defines the behavior of\n                  the resulting decision function.  That is, the decision function simply\n                  takes the dot product between the learned weight vector and a test sample\n                  and returns the result.  Therefore, if learns_nonnegative_weights() == true \n                  then the resulting learned weight vector will always have non-negative\n                  entries.  \n        !*/\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        );\n        /*!\n            ensures\n                - #learns_nonnegative_weights() == value\n                - if (value == true) then\n                    - #has_prior() == false\n        !*/\n\n        void set_prior (\n            const trained_function_type& prior\n        );\n        /*!\n            requires\n                - prior == a function produced by a call to this class's train() function.  \n                  Therefore, it must be the case that:\n                    - prior.basis_vectors.size() == 1\n                    - prior.alpha(0) == 1\n            ensures\n                - Subsequent calls to train() will try to learn a function similar to the\n                  given prior.\n                - #has_prior() == true\n                - #learns_nonnegative_weights() == false\n                - #forces_last_weight_to_1() == false\n        !*/\n\n        bool has_prior (\n        ) const\n        /*!\n            ensures\n                - returns true if a prior has been set and false otherwise.  Having a prior\n                  set means that you have called set_prior() and supplied a previously\n                  trained function as a reference.  In this case, any call to train() will\n                  try to learn a function that matches the behavior of the prior as close\n                  as possible but also fits the supplied training data.  In more technical\n                  detail, having a prior means we replace the ||w||^2 regularizer with one\n                  of the form ||w-prior||^2 where w is the set of parameters for a learned\n                  function.\n        !*/\n\n        void set_c (\n            scalar_type C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() == C \n        !*/\n\n        const scalar_type get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter that\n                  determines the trade off between trying to fit the training data exactly\n                  or allowing more errors but hopefully improving the generalization of the\n                  resulting classifier.  Larger values encourage exact fitting while\n                  smaller values of C may encourage better generalization. \n        !*/\n\n        const decision_function<kernel_type> train (\n            const std::vector<ranking_pair<sample_type> >& samples\n        ) const;\n        /*!\n            requires\n                - is_ranking_problem(samples) == true\n                - if (has_prior()) then\n                    - The vectors in samples must have the same dimensionality as the\n                      vectors used to train the prior given to set_prior().  \n            ensures\n                - trains a ranking support vector classifier given the training samples.  \n                - returns a decision function F with the following properties:\n                    - F.alpha.size() == 1\n                    - F.basis_vectors.size() == 1\n                    - F.alpha(0) == 1\n                    - Given two vectors, A and B, then A is predicted to come before B \n                      in the learned ranking if and only if F(A) > F(B).\n                    - Based on the contents of samples, F will attempt to give relevant\n                      vectors higher scores than non-relevant vectors.\n        !*/\n\n        const decision_function<kernel_type> train (\n            const ranking_pair<sample_type>& sample\n        ) const;\n        /*!\n            requires\n                - is_ranking_problem(std::vector<ranking_pair<sample_type> >(1, sample)) == true\n                - if (has_prior()) then\n                    - The vectors in samples must have the same dimensionality as the\n                      vectors used to train the prior given to set_prior().  \n            ensures\n                - This is just a convenience routine for calling the above train()\n                  function.  That is, it just copies sample into a std::vector object and\n                  invokes the above train() method.  This means that calling this function\n                  is equivalent to invoking: \n                    return train(std::vector<ranking_pair<sample_type> >(1, sample));\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVM_RANK_TrAINER_ABSTRACT_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_threaded.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_THREADED_\n#define DLIB_SVm_THREADED_\n\n#include \"svm_threaded_abstract.h\"\n#include \"svm.h\"\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"../threads.h\"\n#include <vector>\n#include \"../smart_pointers.h\"\n#include \"../pipe.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace cvtti_helpers\n    {\n        template <typename trainer_type, typename in_sample_vector_type>\n        struct job\n        {\n            typedef typename trainer_type::scalar_type scalar_type;\n            typedef typename trainer_type::sample_type sample_type;\n            typedef typename trainer_type::mem_manager_type mem_manager_type;\n            typedef matrix<sample_type,0,1,mem_manager_type> sample_vector_type;\n            typedef matrix<scalar_type,0,1,mem_manager_type> scalar_vector_type;\n\n            job() : x(0) {}\n\n            trainer_type trainer;\n            matrix<long,0,1> x_test, x_train;\n            scalar_vector_type y_test, y_train;\n            const in_sample_vector_type* x;\n        };\n\n        struct task  \n        {\n            template <\n                typename trainer_type,\n                typename matrix_type,\n                typename in_sample_vector_type\n                >\n            void operator()(\n                job<trainer_type,in_sample_vector_type>& j,\n                matrix_type& result\n            )\n            {\n                try\n                {\n                    result = test_binary_decision_function(j.trainer.train(rowm(*j.x,j.x_train), j.y_train), rowm(*j.x,j.x_test), j.y_test);\n\n                    // Do this just to make j release it's memory since people might run threaded cross validation\n                    // on very large datasets.  Every bit of freed memory helps out.\n                    j = job<trainer_type,in_sample_vector_type>();\n                }\n                catch (invalid_nu_error&)\n                {\n                    // If this is a svm_nu_trainer then we might get this exception if the nu is\n                    // invalid.  In this case just return a cross validation score of 0.\n                    result = 0;\n                }\n                catch (std::bad_alloc&)\n                {\n                    std::cerr << \"\\nstd::bad_alloc thrown while running cross_validate_trainer_threaded().  Not enough memory.\\n\" << std::endl;\n                    throw;\n                }\n            }\n        };\n    }\n\n    template <\n        typename trainer_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    const matrix<typename trainer_type::scalar_type, 1, 2, typename trainer_type::mem_manager_type> \n    cross_validate_trainer_threaded_impl (\n        const trainer_type& trainer,\n        const in_sample_vector_type& x,\n        const in_scalar_vector_type& y,\n        const long folds,\n        const long num_threads\n    )\n    {\n        using namespace dlib::cvtti_helpers;\n        typedef typename trainer_type::scalar_type scalar_type;\n        typedef typename trainer_type::mem_manager_type mem_manager_type;\n\n        // make sure requires clause is not broken\n        DLIB_ASSERT(is_binary_classification_problem(x,y) == true &&\n                    1 < folds && folds <= std::min(sum(y>0),sum(y<0)) &&\n                    num_threads > 0,\n            \"\\tmatrix cross_validate_trainer()\"\n            << \"\\n\\t invalid inputs were given to this function\"\n            << \"\\n\\t std::min(sum(y>0),sum(y<0)): \" << std::min(sum(y>0),sum(y<0))\n            << \"\\n\\t folds:  \" << folds \n            << \"\\n\\t num_threads:  \" << num_threads \n            << \"\\n\\t is_binary_classification_problem(x,y): \" << ((is_binary_classification_problem(x,y))? \"true\":\"false\")\n            );\n\n\n        task mytask;\n        thread_pool tp(num_threads);\n\n\n        // count the number of positive and negative examples\n        long num_pos = 0;\n        long num_neg = 0;\n        for (long r = 0; r < y.nr(); ++r)\n        {\n            if (y(r) == +1.0)\n                ++num_pos;\n            else\n                ++num_neg;\n        }\n\n        // figure out how many positive and negative examples we will have in each fold\n        const long num_pos_test_samples = num_pos/folds; \n        const long num_pos_train_samples = num_pos - num_pos_test_samples; \n        const long num_neg_test_samples = num_neg/folds; \n        const long num_neg_train_samples = num_neg - num_neg_test_samples; \n\n\n        long pos_idx = 0;\n        long neg_idx = 0;\n\n\n\n        std::vector<future<job<trainer_type,in_sample_vector_type> > > jobs(folds);\n        std::vector<future<matrix<scalar_type, 1, 2, mem_manager_type> > > results(folds);\n\n\n        for (long i = 0; i < folds; ++i)\n        {\n            job<trainer_type,in_sample_vector_type>& j = jobs[i].get();\n\n            j.x = &x;\n            j.x_test.set_size (num_pos_test_samples  + num_neg_test_samples);\n            j.y_test.set_size (num_pos_test_samples  + num_neg_test_samples);\n            j.x_train.set_size(num_pos_train_samples + num_neg_train_samples);\n            j.y_train.set_size(num_pos_train_samples + num_neg_train_samples);\n            j.trainer = trainer;\n\n            long cur = 0;\n\n            // load up our positive test samples\n            while (cur < num_pos_test_samples)\n            {\n                if (y(pos_idx) == +1.0)\n                {\n                    j.x_test(cur) = pos_idx;\n                    j.y_test(cur) = +1.0;\n                    ++cur;\n                }\n                pos_idx = (pos_idx+1)%x.nr();\n            }\n\n            // load up our negative test samples\n            while (cur < j.x_test.nr())\n            {\n                if (y(neg_idx) == -1.0)\n                {\n                    j.x_test(cur) = neg_idx;\n                    j.y_test(cur) = -1.0;\n                    ++cur;\n                }\n                neg_idx = (neg_idx+1)%x.nr();\n            }\n\n            // load the training data from the data following whatever we loaded\n            // as the testing data\n            long train_pos_idx = pos_idx;\n            long train_neg_idx = neg_idx;\n            cur = 0;\n\n            // load up our positive train samples\n            while (cur < num_pos_train_samples)\n            {\n                if (y(train_pos_idx) == +1.0)\n                {\n                    j.x_train(cur) = train_pos_idx;\n                    j.y_train(cur) = +1.0;\n                    ++cur;\n                }\n                train_pos_idx = (train_pos_idx+1)%x.nr();\n            }\n\n            // load up our negative train samples\n            while (cur < j.x_train.nr())\n            {\n                if (y(train_neg_idx) == -1.0)\n                {\n                    j.x_train(cur) = train_neg_idx;\n                    j.y_train(cur) = -1.0;\n                    ++cur;\n                }\n                train_neg_idx = (train_neg_idx+1)%x.nr();\n            }\n\n            // finally spawn a task to process this job\n            tp.add_task(mytask, jobs[i], results[i]);\n\n        } // for (long i = 0; i < folds; ++i)\n\n        matrix<scalar_type, 1, 2, mem_manager_type> res;\n        set_all_elements(res,0);\n\n        // now compute the total results\n        for (long i = 0; i < folds; ++i)\n        {\n            res += results[i].get();\n        }\n\n        return res/(scalar_type)folds;\n    }\n\n    template <\n        typename trainer_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    const matrix<typename trainer_type::scalar_type, 1, 2, typename trainer_type::mem_manager_type> \n    cross_validate_trainer_threaded (\n        const trainer_type& trainer,\n        const in_sample_vector_type& x,\n        const in_scalar_vector_type& y,\n        const long folds,\n        const long num_threads\n    )\n    {\n        return cross_validate_trainer_threaded_impl(trainer,\n                                           mat(x),\n                                           mat(y),\n                                           folds,\n                                           num_threads);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_THREADED_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svm_threaded_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_THREADED_ABSTRACT_\n#ifdef DLIB_SVm_THREADED_ABSTRACT_\n\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"../svm.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename trainer_type,\n        typename in_sample_vector_type,\n        typename in_scalar_vector_type\n        >\n    const matrix<typename trainer_type::scalar_type, 1, 2, typename trainer_type::mem_manager_type> \n    cross_validate_trainer_threaded (\n        const trainer_type& trainer,\n        const in_sample_vector_type& x,\n        const in_scalar_vector_type& y,\n        const long folds,\n        const long num_threads\n    );\n    /*!\n        requires\n            - is_binary_classification_problem(x,y) == true\n            - 1 < folds <= std::min(sum(y>0),sum(y<0))\n              (e.g. There must be at least as many examples of each class as there are folds)\n            - trainer_type == some kind of trainer object (e.g. svm_nu_trainer)\n            - num_threads > 0\n            - It must be safe for multiple trainer objects to access the elements of x from\n              multiple threads at the same time.  Note that all trainers and kernels in\n              dlib are thread safe in this regard since they do not mutate the elements of x.\n        ensures\n            - performs k-fold cross validation by using the given trainer to solve the\n              given binary classification problem for the given number of folds.\n              Each fold is tested using the output of the trainer and the average \n              classification accuracy from all folds is returned.  \n            - uses num_threads threads of execution in doing the cross validation.  \n            - The accuracy is returned in a row vector, let us call it R.  Both \n              quantities in R are numbers between 0 and 1 which represent the fraction \n              of examples correctly classified.  R(0) is the fraction of +1 examples \n              correctly classified and R(1) is the fraction of -1 examples correctly \n              classified.\n            - The number of folds used is given by the folds argument.\n        throws\n            - any exceptions thrown by trainer.train()\n            - std::bad_alloc\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_THREADED_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svr_linear_trainer.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVR_LINEAR_TrAINER_Hh_\n#define DLIB_SVR_LINEAR_TrAINER_Hh_\n\n#include \"svr_linear_trainer_abstract.h\"\n\n#include \"../algs.h\"\n#include \"../optimization.h\"\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"sparse_vector.h\"\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type, \n        typename sample_type \n        >\n    class oca_problem_linear_svr : public oca_problem<matrix_type >\n    {\n    public:\n        /*\n            This class is used as part of the implementation of the svr_linear_trainer \n            defined towards the end of this file.\n        */\n\n        typedef typename matrix_type::type scalar_type;\n\n        oca_problem_linear_svr(\n            const scalar_type C_,\n            const std::vector<sample_type>& samples_,\n            const std::vector<scalar_type>& targets_,\n            const bool be_verbose_,\n            const scalar_type eps_,\n            const scalar_type eps_insensitivity_,\n            const unsigned long max_iter\n        ) :\n            samples(samples_),\n            targets(targets_),\n            C(C_),\n            be_verbose(be_verbose_),\n            eps(eps_),\n            eps_insensitivity(eps_insensitivity_),\n            max_iterations(max_iter)\n        {\n        }\n\n        virtual scalar_type get_c (\n        ) const \n        {\n            return C;\n        }\n\n        virtual long get_num_dimensions (\n        ) const \n        {\n            // plus one for the bias term\n            return max_index_plus_one(samples) + 1;\n        }\n\n        virtual bool optimization_status (\n            scalar_type current_objective_value,\n            scalar_type current_error_gap,\n            scalar_type current_risk_value,\n            scalar_type current_risk_gap,\n            unsigned long num_cutting_planes,\n            unsigned long num_iterations\n        ) const \n        {\n            current_risk_value /= samples.size();\n            current_risk_gap /= samples.size();\n            if (be_verbose)\n            {\n                using namespace std;\n                cout << \"objective:     \" << current_objective_value << endl;\n                cout << \"objective gap: \" << current_error_gap << endl;\n                cout << \"risk:          \" << current_risk_value << endl;\n                cout << \"risk gap:      \" << current_risk_gap << endl;\n                cout << \"num planes:    \" << num_cutting_planes << endl;\n                cout << \"iter:          \" << num_iterations << endl;\n                cout << endl;\n            }\n\n            if (num_iterations >= max_iterations)\n                return true;\n\n            if (current_risk_gap < eps*eps_insensitivity)\n                return true;\n\n            return false;\n        }\n\n        virtual bool risk_has_lower_bound (\n            scalar_type& lower_bound\n        ) const \n        { \n            lower_bound = 0;\n            return true; \n        }\n\n        virtual void get_risk (\n            matrix_type& w,\n            scalar_type& risk,\n            matrix_type& subgradient\n        ) const \n        {\n            subgradient.set_size(w.size(),1);\n            subgradient = 0;\n            risk = 0;\n\n            // loop over all the samples and compute the risk and its subgradient at the current solution point w\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                const long w_size_m1 = w.size()-1;\n                const scalar_type prediction = dot(colm(w,0,w_size_m1), samples[i]) - w(w_size_m1);\n\n                if (std::abs(prediction - targets[i]) > eps_insensitivity)\n                {\n                    if (prediction < targets[i])\n                    {\n                        subtract_from(subgradient, samples[i]); \n                        subgradient(w_size_m1) += 1;\n                    }\n                    else\n                    {\n                        add_to(subgradient, samples[i]); \n                        subgradient(w_size_m1) -= 1;\n                    }\n\n                    risk += std::abs(prediction - targets[i]) - eps_insensitivity;\n                }\n            }\n        }\n\n    private:\n\n    // -----------------------------------------------------\n    // -----------------------------------------------------\n\n\n        const std::vector<sample_type>& samples;\n        const std::vector<scalar_type>& targets;\n        const scalar_type C;\n\n        const bool be_verbose;\n        const scalar_type eps;\n        const scalar_type eps_insensitivity;\n        const unsigned long max_iterations;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename matrix_type, \n        typename sample_type,\n        typename scalar_type\n        >\n    oca_problem_linear_svr<matrix_type, sample_type> make_oca_problem_linear_svr (\n        const scalar_type C,\n        const std::vector<sample_type>& samples,\n        const std::vector<scalar_type>& targets,\n        const bool be_verbose,\n        const scalar_type eps,\n        const scalar_type eps_insensitivity,\n        const unsigned long max_iterations\n    )\n    {\n        return oca_problem_linear_svr<matrix_type, sample_type>(\n            C, samples, targets, be_verbose, eps, eps_insensitivity, max_iterations);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svr_linear_trainer\n    {\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        // You are getting a compiler error on this line because you supplied a non-linear kernel\n        // to the svr_linear_trainer object.  You have to use one of the linear kernels with this\n        // trainer.\n        COMPILE_TIME_ASSERT((is_same_type<K, linear_kernel<sample_type> >::value ||\n                             is_same_type<K, sparse_linear_kernel<sample_type> >::value ));\n\n        svr_linear_trainer (\n        )\n        {\n            C = 1;\n            verbose = false;\n            eps = 0.01;\n            max_iterations = 10000;\n            learn_nonnegative_weights = false;\n            last_weight_1 = false;\n            eps_insensitivity = 0.1;\n        }\n\n        explicit svr_linear_trainer (\n            const scalar_type& C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t svr_linear_trainer::svr_linear_trainer()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n            verbose = false;\n            eps = 0.01;\n            max_iterations = 10000;\n            learn_nonnegative_weights = false;\n            last_weight_1 = false;\n            eps_insensitivity = 0.1;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\t void svr_linear_trainer::set_epsilon()\"\n                << \"\\n\\t eps_ must be greater than 0\"\n                << \"\\n\\t eps_: \" << eps_ \n                << \"\\n\\t this: \" << this\n                );\n\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const { return eps; }\n\n        void set_epsilon_insensitivity (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\tvoid svr_linear_trainer::set_epsilon_insensitivity(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps_: \" << eps_ \n                );\n            eps_insensitivity = eps_;\n        }\n\n        const scalar_type get_epsilon_insensitivity (\n        ) const\n        { \n            return eps_insensitivity;\n        }\n\n        unsigned long get_max_iterations (\n        ) const { return max_iterations; }\n\n        void set_max_iterations (\n            unsigned long max_iter\n        ) \n        {\n            max_iterations = max_iter;\n        }\n\n        void be_verbose (\n        )\n        {\n            verbose = true;\n        }\n\n        void be_quiet (\n        )\n        {\n            verbose = false;\n        }\n\n        bool forces_last_weight_to_1 (\n        ) const\n        {\n            return last_weight_1;\n        }\n\n        void force_last_weight_to_1 (\n            bool should_last_weight_be_1\n        )\n        {\n            last_weight_1 = should_last_weight_be_1;\n        }\n\n        void set_oca (\n            const oca& item\n        )\n        {\n            solver = item;\n        }\n\n        const oca get_oca (\n        ) const\n        {\n            return solver;\n        }\n\n        const kernel_type get_kernel (\n        ) const\n        {\n            return kernel_type();\n        }\n\n        bool learns_nonnegative_weights (\n        ) const { return learn_nonnegative_weights; }\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        )\n        {\n            learn_nonnegative_weights = value;\n        }\n\n        void set_c (\n            scalar_type C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void svr_linear_trainer::set_c()\"\n                << \"\\n\\t C_ must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        const scalar_type get_c (\n        ) const\n        {\n            return C;\n        }\n\n        const decision_function<kernel_type> train (\n            const std::vector<sample_type>& samples,\n            const std::vector<scalar_type>& targets\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_CASSERT(is_learning_problem(samples, targets) == true,\n                \"\\t decision_function svr_linear_trainer::train(samples, targets)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t samples.size(): \" << samples.size() \n                << \"\\n\\t targets.size(): \" << targets.size() \n                << \"\\n\\t is_learning_problem(samples,targets): \" << is_learning_problem(samples,targets)\n                );\n\n\n            typedef matrix<scalar_type,0,1> w_type;\n            w_type w;\n\n            const unsigned long num_dims = max_index_plus_one(samples);\n\n            unsigned long num_nonnegative = 0;\n            if (learn_nonnegative_weights)\n            {\n                num_nonnegative = num_dims;\n            }\n\n            unsigned long force_weight_1_idx = std::numeric_limits<unsigned long>::max(); \n            if (last_weight_1)\n            {\n                force_weight_1_idx = num_dims-1;\n            }\n\n            solver( make_oca_problem_linear_svr<w_type>(C, samples, targets, verbose, eps, eps_insensitivity, max_iterations), \n                    w, \n                    num_nonnegative,\n                    force_weight_1_idx);\n\n\n            // put the solution into a decision function and then return it\n            decision_function<kernel_type> df;\n            df.b = static_cast<scalar_type>(w(w.size()-1));\n            df.basis_vectors.set_size(1);\n            // Copy the plane normal into the output basis vector.  The output vector might be a\n            // sparse vector container so we need to use this special kind of copy to handle that case.\n            // As an aside, the reason for using max_index_plus_one() and not just w.size()-1 is because\n            // doing it this way avoids an inane warning from gcc that can occur in some cases.\n            const long out_size = max_index_plus_one(samples);\n            assign(df.basis_vectors(0), matrix_cast<scalar_type>(colm(w, 0, out_size)));\n            df.alpha.set_size(1);\n            df.alpha(0) = 1;\n\n            return df;\n        }\n\n    private:\n\n        scalar_type C;\n        oca solver;\n        scalar_type eps;\n        bool verbose;\n        unsigned long max_iterations;\n        bool learn_nonnegative_weights;\n        bool last_weight_1;\n        scalar_type eps_insensitivity;\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVR_LINEAR_TrAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svr_linear_trainer_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVR_LINEAR_TrAINER_ABSTRACT_Hh_\n#ifdef DLIB_SVR_LINEAR_TrAINER_ABSTRACT_Hh_\n\n#include \"sparse_vector_abstract.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svr_linear_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                Is either linear_kernel or sparse_linear_kernel.  \n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements a trainer for performing epsilon-insensitive support\n                vector regression.  It uses the oca optimizer so it is very efficient at\n                solving this problem when linear kernels are used, making it suitable for\n                use with large datasets. \n                \n                For an introduction to support vector regression see the following paper:\n                    A Tutorial on Support Vector Regression by Alex J. Smola and Bernhard Scholkopf.\n                Note that this object solves the version of support vector regression\n                defined by equation (3) in the paper, except that we incorporate the bias\n                term into the w vector by appending a 1 to the end of each sample.\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svr_linear_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used to train a\n                  ranking support vector machine.\n                - #get_oca() == oca() (i.e. an instance of oca with default parameters) \n                - #get_c() == 1\n                - #get_epsilon() == 0.01\n                - #get_epsilon_insensitivity() = 0.1\n                - This object will not be verbose unless be_verbose() is called\n                - #get_max_iterations() == 10000\n                - #learns_nonnegative_weights() == false\n                - #forces_last_weight_to_1() == false\n        !*/\n\n        explicit svr_linear_trainer (\n            const scalar_type& C\n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - This object is properly initialized and ready to be used to train a\n                  ranking support vector machine.\n                - #get_oca() == oca() (i.e. an instance of oca with default parameters) \n                - #get_c() == C\n                - #get_epsilon() == 0.01\n                - #get_epsilon_insensitivity() = 0.1\n                - This object will not be verbose unless be_verbose() is called\n                - #get_max_iterations() == 10000\n                - #learns_nonnegative_weights() == false\n                - #forces_last_weight_to_1() == false\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const; \n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Smaller values may result in a more accurate solution but take longer to\n                  train.  You can think of this epsilon value as saying \"solve the\n                  optimization problem until the average regression error is within epsilon\n                  of its optimal value\".  See get_epsilon_insensitivity() below for a\n                  definition of \"regression error\".\n        !*/\n\n        void set_epsilon_insensitivity (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon_insensitivity() == eps\n        !*/\n\n        const scalar_type get_epsilon_insensitivity (\n        ) const;\n        /*!\n            ensures\n                - This object tries to find a function which minimizes the regression error\n                  on a training set.  This error is measured in the following way:\n                    - if (abs(predicted_value - true_labeled_value) < eps) then\n                        - The error is 0.  That is, any function which gets within eps of\n                          the correct output is good enough.\n                    - else\n                        - The error grows linearly once it gets bigger than eps.\n                 \n                  So epsilon-insensitive regression means we do regression but stop trying\n                  to fit a data point once it is \"close enough\".  This function returns\n                  that eps value which controls what we mean by \"close enough\".\n        !*/\n\n        unsigned long get_max_iterations (\n        ) const; \n        /*!\n            ensures\n                - returns the maximum number of iterations the SVM optimizer is allowed to\n                  run before it is required to stop and return a result.\n        !*/\n\n        void set_max_iterations (\n            unsigned long max_iter\n        );\n        /*!\n            ensures\n                - #get_max_iterations() == max_iter\n        !*/\n\n        void be_verbose (\n        );\n        /*!\n            ensures\n                - This object will print status messages to standard out so that a user can\n                  observe the progress of the algorithm.\n        !*/\n\n        void be_quiet (\n        );\n        /*!\n            ensures\n                - this object will not print anything to standard out\n        !*/\n\n        bool forces_last_weight_to_1 (\n        ) const;\n        /*!\n            ensures\n                - returns true if this trainer has the constraint that the last weight in\n                  the learned parameter vector must be 1.  This is the weight corresponding\n                  to the feature in the training vectors with the highest dimension.  \n                - Forcing the last weight to 1 also disables the bias and therefore the b\n                  field of the learned decision_function will be 0 when forces_last_weight_to_1() == true.\n        !*/\n\n        void force_last_weight_to_1 (\n            bool should_last_weight_be_1\n        );\n        /*!\n            ensures\n                - #forces_last_weight_to_1() == should_last_weight_be_1\n        !*/\n\n        void set_oca (\n            const oca& item\n        );\n        /*!\n            ensures\n                - #get_oca() == item \n        !*/\n\n        const oca get_oca (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the optimizer used to solve the SVM problem.  \n        !*/\n\n        const kernel_type get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object.  Since the\n                  linear kernels don't have any parameters this function just returns\n                  kernel_type()\n        !*/\n\n        bool learns_nonnegative_weights (\n        ) const; \n        /*!\n            ensures\n                - The output of training is a weight vector and a bias value.  These two\n                  things define the resulting decision function.  That is, the decision\n                  function simply takes the dot product between the learned weight vector\n                  and a test sample, then subtracts the bias value.  Therefore, if\n                  learns_nonnegative_weights() == true then the resulting learned weight\n                  vector will always have non-negative entries.  The bias value may still\n                  be negative though.\n        !*/\n       \n        void set_learns_nonnegative_weights (\n            bool value\n        );\n        /*!\n            ensures\n                - #learns_nonnegative_weights() == value\n        !*/\n\n        void set_c (\n            scalar_type C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() == C \n        !*/\n\n        const scalar_type get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVM regularization parameter.  It is the parameter that\n                  determines the trade off between trying to fit the training data exactly\n                  or allowing more errors but hopefully improving the generalization of the\n                  resulting classifier.  Larger values encourage exact fitting while\n                  smaller values of C may encourage better generalization. \n        !*/\n\n        const decision_function<kernel_type> train (\n            const std::vector<sample_type>& samples,\n            const std::vector<scalar_type>& targets\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(samples,targets) == true\n            ensures\n                - performs support vector regression given the training samples and targets.  \n                - returns a decision_function F with the following properties:\n                    - F(new_sample) == predicted target value for new_sample\n                    - F.alpha.size() == 1\n                    - F.basis_vectors.size() == 1\n                    - F.alpha(0) == 1\n        !*/\n\n    }; \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVR_LINEAR_TrAINER_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svr_trainer.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_EPSILON_REGRESSION_TRAINER_Hh_ \n#define DLIB_SVm_EPSILON_REGRESSION_TRAINER_Hh_\n\n\n#include \"svr_trainer_abstract.h\"\n#include <cmath>\n#include <limits>\n#include \"../matrix.h\"\n#include \"../algs.h\"\n\n#include \"function.h\"\n#include \"kernel.h\"\n#include \"../optimization/optimization_solve_qp3_using_smo.h\"\n\nnamespace dlib \n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svr_trainer\n    {\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svr_trainer (\n        ) :\n            C(1),\n            eps_insensitivity(0.1),\n            cache_size(200),\n            eps(0.001)\n        {\n        }\n\n        void set_cache_size (\n            long cache_size_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(cache_size_ > 0,\n                \"\\tvoid svr_trainer::set_cache_size(cache_size_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t cache_size: \" << cache_size_ \n                );\n            cache_size = cache_size_;\n        }\n\n        long get_cache_size (\n        ) const\n        {\n            return cache_size;\n        }\n\n        void set_epsilon (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\tvoid svr_trainer::set_epsilon(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps_: \" << eps_ \n                );\n            eps = eps_;\n        }\n\n        const scalar_type get_epsilon (\n        ) const\n        { \n            return eps;\n        }\n\n        void set_epsilon_insensitivity (\n            scalar_type eps_\n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(eps_ > 0,\n                \"\\tvoid svr_trainer::set_epsilon_insensitivity(eps_)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t eps_: \" << eps_ \n                );\n            eps_insensitivity = eps_;\n        }\n\n        const scalar_type get_epsilon_insensitivity (\n        ) const\n        { \n            return eps_insensitivity;\n        }\n\n        void set_kernel (\n            const kernel_type& k\n        )\n        {\n            kernel_function = k;\n        }\n\n        const kernel_type& get_kernel (\n        ) const\n        {\n            return kernel_function;\n        }\n\n        void set_c (\n            scalar_type C_ \n        )\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(C_ > 0,\n                \"\\t void svr_trainer::set_c()\"\n                << \"\\n\\t C must be greater than 0\"\n                << \"\\n\\t C_:    \" << C_ \n                << \"\\n\\t this: \" << this\n                );\n\n            C = C_;\n        }\n\n        const scalar_type get_c (\n        ) const\n        {\n            return C;\n        }\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            return do_train(mat(x), mat(y));\n        }\n\n        void swap (\n            svr_trainer& item\n        )\n        {\n            exchange(kernel_function, item.kernel_function);\n            exchange(C,            item.C);\n            exchange(eps_insensitivity, item.eps_insensitivity);\n            exchange(cache_size,      item.cache_size);\n            exchange(eps,             item.eps);\n        }\n\n    private:\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename M>\n        struct op_quad \n        {\n            explicit op_quad( \n                const M& m_\n            ) : m(m_) {}\n\n            const M& m;\n\n            typedef typename M::type type;\n            typedef type const_ret_type;\n            const static long cost = M::cost + 2;\n\n            inline const_ret_type apply ( long r, long c) const\n            { \n                if (r < m.nr())\n                {\n                    if (c < m.nc())\n                    {\n                        return m(r,c);\n                    }\n                    else\n                    {\n                        return -m(r,c-m.nc());\n                    }\n                }\n                else\n                {\n                    if (c < m.nc())\n                    {\n                        return -m(r-m.nr(),c);\n                    }\n                    else\n                    {\n                        return m(r-m.nr(),c-m.nc());\n                    }\n                }\n            }\n\n            const static long NR = 2*M::NR;\n            const static long NC = 2*M::NC;\n            typedef typename M::mem_manager_type mem_manager_type;\n            typedef typename M::layout_type layout_type;\n\n            long nr () const { return 2*m.nr(); }\n            long nc () const { return 2*m.nc(); }\n\n            template <typename U> bool aliases               ( const matrix_exp<U>& item) const \n            { return m.aliases(item); }\n            template <typename U> bool destructively_aliases ( const matrix_exp<U>& item) const \n            { return m.aliases(item); }\n        };\n\n        template <\n            typename EXP\n            >\n        const matrix_op<op_quad<EXP> >  make_quad (\n            const matrix_exp<EXP>& m\n        ) const\n        /*!\n            ensures\n                - returns the following matrix:\n                     m -m\n                    -m  m\n                - I.e. returns a matrix that is twice the size of m and just\n                  contains copies of m and -m\n        !*/\n        {\n            typedef op_quad<EXP> op;\n            return matrix_op<op>(op(m.ref()));\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> do_train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const\n        {\n            typedef typename K::scalar_type scalar_type;\n            typedef typename decision_function<K>::sample_vector_type sample_vector_type;\n            typedef typename decision_function<K>::scalar_vector_type scalar_vector_type;\n\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(x,y) == true,\n                \"\\tdecision_function svr_trainer::train(x,y)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t x.nr(): \" << x.nr() \n                << \"\\n\\t y.nr(): \" << y.nr() \n                << \"\\n\\t x.nc(): \" << x.nc() \n                << \"\\n\\t y.nc(): \" << y.nc() \n                );\n\n\n            scalar_vector_type alpha;\n\n            solve_qp3_using_smo<scalar_vector_type> solver;\n\n            solver(symmetric_matrix_cache<float>(make_quad(kernel_matrix(kernel_function,x)), cache_size), \n                   uniform_matrix<scalar_type>(2*x.size(),1, eps_insensitivity) + join_cols(y,-y),\n                   join_cols(uniform_matrix<scalar_type>(x.size(),1,1), uniform_matrix<scalar_type>(x.size(),1,-1)), \n                   0,\n                   C,\n                   C,\n                   alpha,\n                   eps);\n\n            scalar_type b;\n            calculate_b(alpha,solver.get_gradient(),C,b);\n\n            alpha = -rowm(alpha,range(0,x.size()-1)) + rowm(alpha,range(x.size(), alpha.size()-1));\n            \n            // count the number of support vectors\n            const long sv_count = (long)sum(alpha != 0);\n\n            scalar_vector_type sv_alpha;\n            sample_vector_type support_vectors;\n\n            // size these column vectors so that they have an entry for each support vector\n            sv_alpha.set_size(sv_count);\n            support_vectors.set_size(sv_count);\n\n            // load the support vectors and their alpha values into these new column matrices\n            long idx = 0;\n            for (long i = 0; i < alpha.nr(); ++i)\n            {\n                if (alpha(i) != 0)\n                {\n                    sv_alpha(idx) = alpha(i);\n                    support_vectors(idx) = x(i);\n                    ++idx;\n                }\n            }\n\n            // now return the decision function\n            return decision_function<K> (sv_alpha, -b, kernel_function, support_vectors);\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <\n            typename scalar_vector_type\n            >\n        void calculate_b(\n            const scalar_vector_type& alpha,\n            const scalar_vector_type& df,\n            const scalar_type& C,\n            scalar_type& b\n        ) const\n        {\n            using namespace std;\n            long num_free = 0;\n            scalar_type sum_free = 0;\n\n            scalar_type upper_bound = -numeric_limits<scalar_type>::infinity();\n            scalar_type lower_bound = numeric_limits<scalar_type>::infinity();\n\n            find_min_and_max(df, upper_bound, lower_bound);\n\n            for(long i = 0; i < alpha.nr(); ++i)\n            {\n                if(i < alpha.nr()/2)\n                {\n                    if(alpha(i) == C)\n                    {\n                        if (df(i) > upper_bound)\n                            upper_bound = df(i);\n                    }\n                    else if(alpha(i) == 0)\n                    {\n                        if (df(i) < lower_bound)\n                            lower_bound = df(i);\n                    }\n                    else\n                    {\n                        ++num_free;\n                        sum_free += df(i);\n                    }\n                }\n                else\n                {\n                    if(alpha(i) == C)\n                    {\n                        if (-df(i) < lower_bound)\n                            lower_bound = -df(i);\n                    }\n                    else if(alpha(i) == 0)\n                    {\n                        if (-df(i) > upper_bound)\n                            upper_bound = -df(i);\n                    }\n                    else\n                    {\n                        ++num_free;\n                        sum_free -= df(i);\n                    }\n                }\n            }\n\n            if(num_free > 0)\n                b = sum_free/num_free;\n            else\n                b = (upper_bound+lower_bound)/2;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n\n        kernel_type kernel_function;\n        scalar_type C;\n        scalar_type eps_insensitivity;\n        long cache_size;\n        scalar_type eps;\n    }; // end of class svr_trainer\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K>\n    void swap (\n        svr_trainer<K>& a,\n        svr_trainer<K>& b\n    ) { a.swap(b); }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_EPSILON_REGRESSION_TRAINER_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/svr_trainer_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SVm_EPSILON_REGRESSION_TRAINER_ABSTRACT_\n#ifdef DLIB_SVm_EPSILON_REGRESSION_TRAINER_ABSTRACT_\n\n#include <cmath>\n#include <limits>\n#include \"../matrix/matrix_abstract.h\"\n#include \"../algs.h\"\n#include \"function_abstract.h\"\n#include \"kernel_abstract.h\"\n#include \"../optimization/optimization_solve_qp3_using_smo_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K \n        >\n    class svr_trainer\n    {\n        /*!\n            REQUIREMENTS ON K \n                is a kernel function object as defined in dlib/svm/kernel_abstract.h \n\n            WHAT THIS OBJECT REPRESENTS\n                This object implements a trainer for performing epsilon-insensitive support \n                vector regression.  It is implemented using the SMO algorithm.\n\n                The implementation of the eps-SVR training algorithm used by this object is based\n                on the following paper:\n                    - Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support vector \n                      machines, 2001. Software available at http://www.csie.ntu.edu.tw/~cjlin/libsvm\n        !*/\n\n    public:\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n        typedef decision_function<kernel_type> trained_function_type;\n\n        svr_trainer (\n        );\n        /*!\n            ensures\n                - This object is properly initialized and ready to be used\n                  to train a support vector machine.\n                - #get_c() == 1\n                - #get_epsilon_insensitivity() == 0.1\n                - #get_cache_size() == 200\n                - #get_epsilon() == 0.001\n        !*/\n\n        void set_cache_size (\n            long cache_size\n        );\n        /*!\n            requires\n                - cache_size > 0\n            ensures\n                - #get_cache_size() == cache_size \n        !*/\n\n        const long get_cache_size (\n        ) const;\n        /*!\n            ensures\n                - returns the number of megabytes of cache this object will use\n                  when it performs training via the this->train() function.\n                  (bigger values of this may make training go faster but won't affect \n                  the result.  However, too big a value will cause you to run out of \n                  memory, obviously.)\n        !*/\n\n        void set_epsilon (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon() == eps \n        !*/\n\n        const scalar_type get_epsilon (\n        ) const;\n        /*!\n            ensures\n                - returns the error epsilon that determines when training should stop.\n                  Generally a good value for this is 0.001.  Smaller values may result\n                  in a more accurate solution but take longer to execute.\n        !*/\n\n        void set_epsilon_insensitivity (\n            scalar_type eps\n        );\n        /*!\n            requires\n                - eps > 0\n            ensures\n                - #get_epsilon_insensitivity() == eps\n        !*/\n\n        const scalar_type get_epsilon_insensitivity (\n        ) const;\n        /*!\n            ensures\n                - This object tries to find a function which minimizes the\n                  regression error on a training set.  This error is measured\n                  in the following way:\n                    - if (abs(predicted_value - true_labeled_value) < eps) then\n                        - The error is 0.  That is, any function which gets within\n                          eps of the correct output is good enough.\n                    - else\n                        - The error grows linearly once it gets bigger than eps\n                 \n                  So epsilon-insensitive regression means we do regression but \n                  stop trying to fit a data point once it is \"close enough\".  \n                  This function returns that eps value which controls what we \n                  mean by \"close enough\".\n        !*/\n\n        void set_kernel (\n            const kernel_type& k\n        );\n        /*!\n            ensures\n                - #get_kernel() == k \n        !*/\n\n        const kernel_type& get_kernel (\n        ) const;\n        /*!\n            ensures\n                - returns a copy of the kernel function in use by this object\n        !*/\n\n        void set_c (\n            scalar_type C \n        );\n        /*!\n            requires\n                - C > 0\n            ensures\n                - #get_c() == C \n        !*/\n\n        const scalar_type get_c (\n        ) const;\n        /*!\n            ensures\n                - returns the SVR regularization parameter.  It is the parameter that \n                  determines the trade-off between trying to reduce the training error \n                  or allowing more errors but hopefully improving the generalization \n                  of the resulting decision_function.  Larger values encourage exact \n                  fitting while smaller values of C may encourage better generalization. \n        !*/\n\n        template <\n            typename in_sample_vector_type,\n            typename in_scalar_vector_type\n            >\n        const decision_function<kernel_type> train (\n            const in_sample_vector_type& x,\n            const in_scalar_vector_type& y\n        ) const;\n        /*!\n            requires\n                - is_learning_problem(x,y) == true\n                - x == a matrix or something convertible to a matrix via mat().\n                  Also, x should contain sample_type objects.\n                - y == a matrix or something convertible to a matrix via mat().\n                  Also, y should contain scalar_type objects.\n            ensures\n                - performs support vector regression given the training samples in x and \n                  target values in y.  \n                - returns a decision_function F with the following properties:\n                    - F(new_x) == predicted y value\n        !*/\n\n        void swap (\n            svr_trainer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n    }; \n\n    template <typename K>\n    void swap (\n        svr_trainer<K>& a,\n        svr_trainer<K>& b\n    ) { a.swap(b); }\n    /*!\n        provides a global swap\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_SVm_EPSILON_REGRESSION_TRAINER_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/track_association_function.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TRACK_ASSOCiATION_FUNCTION_Hh_\n#define DLIB_TRACK_ASSOCiATION_FUNCTION_Hh_\n\n\n#include \"track_association_function_abstract.h\"\n#include <vector>\n#include <iostream>\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"assignment_function.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename detection_type\n        > \n    class feature_extractor_track_association\n    {\n    public:\n        typedef typename detection_type::track_type track_type;\n        typedef typename track_type::feature_vector_type feature_vector_type;\n\n        typedef detection_type lhs_element;\n        typedef track_type rhs_element;\n\n        feature_extractor_track_association() : num_dims(0), num_nonnegative(0) {}\n\n        explicit feature_extractor_track_association (\n            unsigned long num_dims_,\n            unsigned long num_nonnegative_\n        ) : num_dims(num_dims_), num_nonnegative(num_nonnegative_) {}\n\n        unsigned long num_features(\n        ) const { return num_dims; }\n\n        unsigned long num_nonnegative_weights (\n        ) const { return num_nonnegative; }\n\n        void get_features (\n            const detection_type& det,\n            const track_type& track,\n            feature_vector_type& feats\n        ) const\n        {\n            track.get_similarity_features(det, feats);\n        }\n\n        friend void serialize (const feature_extractor_track_association& item, std::ostream& out) \n        { \n            serialize(item.num_dims, out);\n            serialize(item.num_nonnegative, out);\n        }\n\n        friend void deserialize (feature_extractor_track_association& item, std::istream& in) \n        {\n            deserialize(item.num_dims, in);\n            deserialize(item.num_nonnegative, in);\n        }\n\n    private:\n        unsigned long num_dims;\n        unsigned long num_nonnegative;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename detection_type_\n        >\n    class track_association_function\n    {\n    public:\n\n        typedef detection_type_ detection_type;\n        typedef typename detection_type::track_type track_type;\n        typedef assignment_function<feature_extractor_track_association<detection_type> > association_function_type;\n\n        track_association_function() {}\n\n        track_association_function (\n            const association_function_type& assoc_\n        ) : assoc(assoc_)\n        {\n        }\n\n        const association_function_type& get_assignment_function (\n        ) const\n        {\n            return assoc;\n        }\n\n        void operator() (\n            std::vector<track_type>& tracks,\n            const std::vector<detection_type>& dets\n        ) const\n        {\n            std::vector<long> assignments = assoc(dets, tracks);\n            std::vector<bool> updated_track(tracks.size(), false);\n            // now update all the tracks with the detections that associated to them.\n            for (unsigned long i = 0; i < assignments.size(); ++i)\n            {\n                if (assignments[i] != -1)\n                {\n                    tracks[assignments[i]].update_track(dets[i]);\n                    updated_track[assignments[i]] = true;\n                }\n                else\n                {\n                    track_type new_track;\n                    new_track.update_track(dets[i]);\n                    tracks.push_back(new_track);\n                }\n            }\n\n            // Now propagate all the tracks that didn't get any detections.\n            for (unsigned long i = 0; i < updated_track.size(); ++i)\n            {\n                if (!updated_track[i])\n                    tracks[i].propagate_track();\n            }\n        }\n\n        friend void serialize (const track_association_function& item, std::ostream& out)\n        {\n            int version = 1;\n            serialize(version, out);\n            serialize(item.assoc, out);\n        }\n        friend void deserialize (track_association_function& item, std::istream& in)\n        {\n            int version = 0;\n            deserialize(version, in);\n            if (version != 1)\n                throw serialization_error(\"Unexpected version found while deserializing dlib::track_association_function.\");\n\n            deserialize(item.assoc, in);\n        }\n\n    private:\n\n        assignment_function<feature_extractor_track_association<detection_type> > assoc;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TRACK_ASSOCiATION_FUNCTION_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm/track_association_function_abstract.h",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_TRACK_ASSOCiATION_FUNCTION_ABSTRACT_Hh_\n#ifdef DLIB_TRACK_ASSOCiATION_FUNCTION_ABSTRACT_Hh_\n\n#include <vector>\n#include \"assignment_function_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class example_detection\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines the interface a detection must implement if it is to be\n                used with the track_association_function defined at the bottom of this\n                file.  In this case, the interface is very simple.  A detection object is\n                only required to define the track_type typedef and it must also be possible\n                to store detection objects in a std::vector.\n        !*/\n\n    public:\n        // Each detection object should be designed to work with a specific track object.\n        // This typedef lets us determine which track type is meant for use with this\n        // detection object.\n        typedef class example_track track_type;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class example_track\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object defines the interface a track must implement if it is to be\n                used with the track_association_function defined at the bottom of this\n                file.   \n        !*/\n\n    public:\n        // This type should be a dlib::matrix capable of storing column vectors or an\n        // unsorted sparse vector type as defined in dlib/svm/sparse_vector_abstract.h.\n        typedef matrix_or_sparse_vector_type feature_vector_type;\n\n        example_track(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        void get_similarity_features (\n            const example_detection& det,\n            feature_vector_type& feats\n        ) const;\n        /*!\n            requires\n                - update_track() has been called on this track at least once.\n            ensures\n                - #feats == A feature vector that contains information describing how\n                  likely it is that det is a detection from the object corresponding to\n                  this track.  That is, the feature vector should contain information that\n                  lets someone decide if det should be associated to this track.\n                - #feats.size() must be a constant.  That is, every time we call\n                  get_similarity_features() it must output a feature vector of the same\n                  dimensionality.\n        !*/\n\n        void update_track (\n            const example_detection& det\n        );\n        /*!\n            ensures\n                - Updates this track with the given detection assuming that det is the most\n                  current observation of the object under track. \n        !*/\n\n        void propagate_track (\n        );\n        /*!\n            ensures\n                - propagates this track forward in time one time step.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename detection_type\n        > \n    class feature_extractor_track_association\n    {\n        /*!\n            REQUIREMENTS ON detection_type\n                It must be an object that implements an interface compatible with the\n                example_detection discussed above.  This also means that detection_type::track_type \n                must be an object that implements an interface compatible with example_track \n                defined above.\n\n            WHAT THIS OBJECT REPRESENTS \n                This object is an adapter that converts from the detection/track style\n                interface defined above to the feature extraction interface required by the\n                association rule learning tools in dlib.  Specifically, it converts the\n                detection/track interface into a form usable by the assignment_function and\n                its trainer object structural_assignment_trainer.\n        !*/\n\n    public:\n        typedef typename detection_type::track_type track_type;\n        typedef typename track_type::feature_vector_type feature_vector_type;\n        typedef detection_type lhs_element;\n        typedef track_type rhs_element;\n\n        unsigned long num_features(\n        ) const; \n        /*!\n            ensures\n                - returns the dimensionality of the feature vectors produced by get_features().\n        !*/\n\n        void get_features (\n            const detection_type& det,\n            const track_type& track,\n            feature_vector_type& feats\n        ) const;\n        /*!\n            ensures\n                - performs: track.get_similarity_features(det, feats);\n        !*/\n    };\n\n    template <\n        typename detection_type\n        > \n    void serialize (\n        const feature_extractor_track_association<detection_type>& item, \n        std::ostream& out\n    );\n    /*!\n        Provides serialization support.\n    !*/\n\n    template <\n        typename detection_type\n        > \n    void deserialize (\n        feature_extractor_track_association<detection_type>& item,\n        std::istream& in\n    );\n    /*!\n        Provides deserialization support.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename detection_type_\n        >\n    class track_association_function\n    {\n        /*!\n            REQUIREMENTS ON detection_type\n                It must be an object that implements an interface compatible with the\n                example_detection discussed above.  This also means that detection_type::track_type \n                must be an object that implements an interface compatible with example_track \n                defined above.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is a tool that helps you implement an object tracker.  So for\n                example, if you wanted to track people moving around in a video then this\n                object can help.  In particular, imagine you have a tool for detecting the\n                positions of each person in an image.  Then you can run this person\n                detector on the video and at each time step, i.e. at each frame, you get a\n                set of person detections.  However, that by itself doesn't tell you how\n                many people there are in the video and where they are moving to and from.\n                To get that information you need to figure out which detections match each\n                other from frame to frame.  This is where the track_association_function\n                comes in.  It performs the detection to track association.  It will also do\n                some of the track management tasks like creating a new track when a\n                detection doesn't match any of the existing tracks.\n\n                Internally, this object is implemented using the assignment_function object.  \n                In fact, it's really just a thin wrapper around assignment_function and\n                exists just to provide a more convenient interface to users doing detection\n                to track association.   \n        !*/\n    public:\n\n        typedef detection_type_ detection_type;\n        typedef typename detection_type::track_type track_type;\n        typedef assignment_function<feature_extractor_track_association<detection_type> > association_function_type;\n\n        track_association_function(\n        );\n        /*!\n            ensures\n                - #get_assignment_function() will be default initialized.\n        !*/\n\n        track_association_function (\n            const association_function_type& assoc\n        ); \n        /*!\n            ensures\n                - #get_assignment_function() == assoc\n        !*/\n\n        const association_function_type& get_assignment_function (\n        ) const;\n        /*!\n            ensures\n                - returns the assignment_function used by this object to assign detections\n                  to tracks.\n        !*/\n\n        void operator() (\n            std::vector<track_type>& tracks,\n            const std::vector<detection_type>& dets\n        ) const;\n        /*!\n            ensures\n                - This function uses get_assignment_function() to assign each detection\n                  in dets to its appropriate track in tracks.  Then each track which\n                  associates to a detection is updated by calling update_track() with the\n                  associated detection.  \n                - Detections that don't associate with any of the elements of tracks will\n                  spawn new tracks.  For each unassociated detection, this is done by\n                  creating a new track_type object, calling update_track() on it with the\n                  new detection, and then adding the new track into tracks.\n                - Tracks that don't have a detection associate to them are propagated\n                  forward in time by calling propagate_track() on them.  That is, we call\n                  propagate_track() only on tracks that do not get associated with a\n                  detection.\n        !*/\n    };\n\n    template <\n        typename detection_type\n        > \n    void serialize (\n        const track_association_function<detection_type>& item,\n        std::ostream& out\n    );\n    /*!\n        Provides serialization support.\n    !*/\n\n    template <\n        typename detection_type\n        > \n    void deserialize (\n        track_association_function<detection_type>& item, \n        std::istream& in\n    );\n    /*!\n        Provides deserialization support.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TRACK_ASSOCiATION_FUNCTION_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_HEADER\n#define DLIB_SVm_HEADER\n\n#include \"svm/svm_rank_trainer.h\"\n#include \"svm/svm.h\"\n#include \"svm/krls.h\"\n#include \"svm/rls.h\"\n#include \"svm/kcentroid.h\"\n#include \"svm/kcentroid_overloads.h\"\n#include \"svm/kkmeans.h\"\n#include \"svm/feature_ranking.h\"\n#include \"svm/rbf_network.h\"\n#include \"svm/linearly_independent_subset_finder.h\"\n#include \"svm/reduced.h\"\n#include \"svm/rvm.h\"\n#include \"svm/pegasos.h\"\n#include \"svm/sparse_kernel.h\"\n#include \"svm/null_trainer.h\"\n#include \"svm/roc_trainer.h\"\n#include \"svm/kernel_matrix.h\"\n#include \"svm/empirical_kernel_map.h\"\n#include \"svm/svm_c_linear_trainer.h\"\n#include \"svm/svm_c_linear_dcd_trainer.h\"\n#include \"svm/svm_c_ekm_trainer.h\"\n#include \"svm/simplify_linear_decision_function.h\"\n#include \"svm/krr_trainer.h\"\n#include \"svm/sort_basis_vectors.h\"\n#include \"svm/svm_c_trainer.h\"\n#include \"svm/svm_one_class_trainer.h\"\n#include \"svm/svr_trainer.h\"\n\n#include \"svm/one_vs_one_decision_function.h\"\n#include \"svm/multiclass_tools.h\"\n#include \"svm/cross_validate_multiclass_trainer.h\"\n#include \"svm/cross_validate_regression_trainer.h\"\n#include \"svm/cross_validate_object_detection_trainer.h\"\n#include \"svm/cross_validate_sequence_labeler.h\"\n#include \"svm/cross_validate_sequence_segmenter.h\"\n#include \"svm/cross_validate_assignment_trainer.h\"\n\n#include \"svm/one_vs_all_decision_function.h\"\n\n#include \"svm/structural_svm_problem.h\"\n#include \"svm/sequence_labeler.h\"\n#include \"svm/assignment_function.h\"\n#include \"svm/track_association_function.h\"\n#include \"svm/active_learning.h\"\n#include \"svm/svr_linear_trainer.h\"\n#include \"svm/sequence_segmenter.h\"\n\n#endif // DLIB_SVm_HEADER\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/svm_threaded.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SVm_THREADED_HEADER\n#define DLIB_SVm_THREADED_HEADER\n\n#include \"svm.h\"\n#include \"svm/svm_threaded.h\"\n#include \"svm/structural_svm_problem_threaded.h\"\n#include \"svm/structural_svm_distributed.h\"\n#include \"svm/structural_svm_object_detection_problem.h\"\n#include \"svm/structural_object_detection_trainer.h\"\n#include \"svm/structural_svm_sequence_labeling_problem.h\"\n#include \"svm/structural_sequence_labeling_trainer.h\"\n\n#include \"svm/structural_svm_assignment_problem.h\"\n#include \"svm/structural_assignment_trainer.h\"\n#include \"svm/cross_validate_track_association_trainer.h\"\n#include \"svm/structural_track_association_trainer.h\"\n\n#include \"svm/structural_svm_graph_labeling_problem.h\"\n#include \"svm/structural_graph_labeling_trainer.h\"\n#include \"svm/cross_validate_graph_labeling_trainer.h\"\n#include \"svm/svm_multiclass_linear_trainer.h\"\n#include \"svm/one_vs_one_trainer.h\"\n#include \"svm/one_vs_all_trainer.h\"\n#include \"svm/structural_sequence_segmentation_trainer.h\"\n\n#endif // DLIB_SVm_THREADED_HEADER\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sync_extension/sync_extension_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SYNC_EXTENSION_KERNEl_1_\n#define DLIB_SYNC_EXTENSION_KERNEl_1_\n\n#include \"../threads.h\"\n#include \"../algs.h\"\n#include \"sync_extension_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename base\n        >\n    class sync_extension_kernel_1 : public base\n    {\n\n        rmutex m;\n        rsignaler s;\n\n        public:\n\n        sync_extension_kernel_1 () : s(m) {}\n\n        template < typename T >\n        sync_extension_kernel_1 (const T& one) : base(one),s(m) {}\n        template < typename T, typename U >\n        sync_extension_kernel_1 (const T& one, const U& two) : base(one,two),s(m) {}\n\n\n        const rmutex& get_mutex(\n        ) const { return m; }\n\n        void lock (\n        ) const { m.lock(); }\n\n        void unlock (\n        ) const { m.unlock(); }\n\n        void wait (\n        ) const { s.wait(); }\n\n        bool wait_or_timeout (\n            unsigned long milliseconds\n        ) const { return s.wait_or_timeout(milliseconds); }\n         \n        void broadcast (\n        ) const { s.broadcast(); }\n\n        void signal (\n        ) const { s.signal(); }\n\n    };\n\n    template <\n        typename base\n        >\n    inline void swap (\n        sync_extension_kernel_1<base>& a, \n        sync_extension_kernel_1<base>& b \n    ) { a.swap(b); }\n\n}\n\n#endif // DLIB_SYNC_EXTENSION_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sync_extension/sync_extension_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_SYNC_EXTENSION_KERNEl_ABSTRACT_\n#ifdef DLIB_SYNC_EXTENSION_KERNEl_ABSTRACT_\n\n#include \"../threads/threads_kernel_abstract.h\"\n#include \"../threads/rmutex_extension_abstract.h\"\n#include \"../threads/rsignaler_extension_abstract.h\"\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename base\n        >\n    class sync_extension : public base\n    {\n\n        /*!\n            REQUIREMENTS ON base\n                base must have a default constructor\n                base must implement swap(base&)\n\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a general extension to any object (given the\n                restrictions on base).  This object gives any object which it extends \n                an integrated rmutex and rsignaler object.  The extended object will \n                then be able to be treated as if it was also a rmutex and rsignaler.\n\n                NOTE that just like the threading api, this object does not check\n                its requires clauses so be careful with it.\n\n                Also note that swap() does not swap the rmutex and rsignaler objects.\n                the rmutex and rsignaler are associated with the object instance itself, \n                not with whatever the object represents.  \n        !*/\n\n\n        public:\n\n        sync_extension (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n                    this is thrown if there is a problem gathering memory\n                - dlib::thread_error\n                    this is thrown if there is a problem creating threading objects\n                - any exception thrown by the constructor for the parent class base\n        !*/\n\n        template <\n            typename T\n            >\n        sync_extension (\n            const T& one\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - the argument one will be passed on to the constructor for the parent \n                  class base.\n            throws\n                - std::bad_alloc\n                    this is thrown if there is a problem gathering memory\n                - dlib::thread_error\n                    this is thrown if there is a problem creating threading objects\n                - any exception thrown by the constructor for the parent class base\n        !*/\n\n        template <\n            typename T,\n            typename U\n            >\n        sync_extension (\n            const T& one,\n            const T& two \n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - the argument one will be passed on to the constructor for the parent \n                  class base as its first argument.\n                - the argument two will be passed on to the constructor for the parent \n                  class base as its second argument.\n            throws\n                - std::bad_alloc\n                    this is thrown if there is a problem gathering memory\n                - dlib::thread_error\n                    this is thrown if there is a problem creating threading objects\n                - any exception thrown by the constructor for the parent class base\n        !*/\n\n\n        const rmutex& get_mutex (\n        ) const;\n        /*!\n            ensures\n                - returns the rmutex embedded in this object\n        !*/\n\n        void lock (\n        ) const;\n        /*!\n            requires\n                - the thread calling lock() does not already have a lock on *this\n            ensures\n                - if (*this is currently locked by another thread) then \n                    - the thread that called lock() on *this is put to sleep until \n                      it becomes available                  \n                - if (*this is currently unlocked) then \n                    - #*this becomes locked and the current thread is NOT put to sleep \n                      but now \"owns\" #*this\n        !*/\n\n        void unlock (\n        ) const;\n        /*!\n            ensures\n                - #*this is unlocked (i.e. other threads may now lock this object)\n        !*/\n\n\n        void wait (\n        ) const;\n        /*!\n            requires\n                - *this is locked and owned by the calling thread\n            ensures\n                - atomically unlocks *this and blocks the calling thread\n                - calling thread will wake if another thread calls signal() or broadcast() \n                  on *this\n                - when wait returns the calling thread again has a lock on #*this\n        !*/\n\n\n        bool wait_or_timeout (\n            unsigned long milliseconds\n        ) const;\n        /*!\n            requires\n                - *this is locked and owned by the calling thread\n            ensures\n                - atomically unlocks *this and blocks the calling thread\n                - calling thread will wake if another thread calls signal() or broadcast() \n                  on *this\n                - after the specified number of milliseconds has elapsed the calling thread\n                  will wake once *this is free to be locked\n                - when wait returns the calling thread again has a lock on #*this\n\n                - returns false if the call to wait_or_timeout timed out \n                - returns true if the call did not time out\n        !*/\n        \n        void signal (\n        ) const;\n        /*!\n            ensures\n                - if (at least one thread is waiting on *this) then\n                    - at least one of the waiting threads will wake \n        !*/\n\n        void broadcast (\n        ) const;\n        /*!\n            ensures\n                - any and all threads waiting on *this will wake \n        !*/\n\n    };\n\n    template <\n        typename base\n        >\n    inline void swap (\n        sync_extension<base>& a, \n        sync_extension<base>& b \n    ) { a.swap(b); }\n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_SYNC_EXTENSION_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/sync_extension.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_SYNC_EXTENSIOn_\n#define DLIB_SYNC_EXTENSIOn_\n\n#include \"sync_extension/sync_extension_kernel_1.h\"\n\n\n\nnamespace dlib\n{\n\n    template <\n        typename base\n        >\n    class sync_extension\n    {\n        sync_extension() {}\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     sync_extension_kernel_1<base>    \n                    kernel_1a;\n \n    };\n}\n\n#endif // DLIB_SYNC_EXTENSIOn_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/CMakeLists.txt",
    "content": "#\n# This is a CMake makefile.  You can find the cmake utility and\n# information about it at http://www.cmake.org\n#\n\ncmake_minimum_required(VERSION 2.6)\n\n# This variable contains a list of all the tests we are building\n# into the regression test suite.\nset (tests\n   example.cpp\n   active_learning.cpp\n   any.cpp\n   any_function.cpp\n   array2d.cpp\n   array.cpp\n   assignment_learning.cpp\n   base64.cpp\n   bayes_nets.cpp\n   bigint.cpp\n   binary_search_tree_kernel_1a.cpp\n   binary_search_tree_kernel_2a.cpp\n   binary_search_tree_mm1.cpp\n   binary_search_tree_mm2.cpp\n   bridge.cpp\n   bsp.cpp\n   byte_orderer.cpp\n   cca.cpp\n   clustering.cpp\n   cmd_line_parser.cpp\n   cmd_line_parser_wchar_t.cpp\n   compress_stream.cpp\n   conditioning_class_c.cpp\n   conditioning_class.cpp\n   config_reader.cpp\n   crc32.cpp\n   create_iris_datafile.cpp\n   data_io.cpp\n   directed_graph.cpp\n   discriminant_pca.cpp\n   disjoint_subsets.cpp\n   ekm_and_lisf.cpp\n   empirical_kernel_map.cpp\n   entropy_coder.cpp\n   entropy_encoder_model.cpp\n   example_args.cpp\n   face.cpp\n   fft.cpp\n   fhog.cpp\n   filtering.cpp\n   find_max_factor_graph_nmplp.cpp\n   find_max_factor_graph_viterbi.cpp\n   geometry.cpp\n   graph.cpp\n   graph_cuts.cpp\n   graph_labeler.cpp\n   hash.cpp\n   hash_map.cpp\n   hash_set.cpp\n   hash_table.cpp\n   hog_image.cpp\n   image.cpp\n   iosockstream.cpp\n   is_same_object.cpp\n   kcentroid.cpp\n   kernel_matrix.cpp\n   kmeans.cpp\n   learning_to_track.cpp\n   least_squares.cpp\n   linear_manifold_regularizer.cpp\n   lz77_buffer.cpp\n   map.cpp\n   matrix2.cpp\n   matrix3.cpp\n   matrix4.cpp\n   matrix_chol.cpp\n   matrix.cpp\n   matrix_eig.cpp\n   matrix_lu.cpp\n   matrix_qr.cpp\n   max_cost_assignment.cpp\n   max_sum_submatrix.cpp\n   md5.cpp\n   member_function_pointer.cpp\n   metaprogramming.cpp\n   multithreaded_object.cpp\n   numerical_integration.cpp\n   object_detector.cpp\n   oca.cpp\n   one_vs_all_trainer.cpp\n   one_vs_one_trainer.cpp\n   optimization.cpp\n   optimization_test_functions.cpp\n   opt_qp_solver.cpp\n   parallel_for.cpp\n   parse.cpp\n   pipe.cpp\n   pixel.cpp\n   probabilistic.cpp\n   pyramid_down.cpp\n   queue.cpp\n   rand.cpp\n   ranking.cpp\n   read_write_mutex.cpp\n   reference_counter.cpp\n   rls.cpp\n   sammon.cpp\n   scan_image.cpp\n   sequence.cpp\n   sequence_labeler.cpp\n   sequence_segmenter.cpp\n   serialize.cpp\n   set.cpp\n   sldf.cpp\n   sliding_buffer.cpp\n   smart_pointers.cpp\n   sockets2.cpp\n   sockets.cpp\n   sockstreambuf.cpp\n   sparse_vector.cpp\n   stack.cpp\n   static_map.cpp\n   static_set.cpp\n   statistics.cpp\n   std_vector_c.cpp\n   string.cpp\n   svm_c_linear.cpp\n   svm_c_linear_dcd.cpp\n   svm.cpp\n   svm_multiclass_linear.cpp\n   svm_struct.cpp\n   svr_linear_trainer.cpp\n   symmetric_matrix_cache.cpp\n   thread_pool.cpp\n   threads.cpp\n   timer.cpp\n   tokenizer.cpp\n   trust_region.cpp\n   tuple.cpp\n   type_safe_union.cpp\n   vectorstream.cpp\n   )\n\n# create a variable called target_name and set it to the string \"dtest\"\nset (target_name dtest)\n\nPROJECT(${target_name})\n\n# add all the cpp files we want to compile to this list.  This tells\n# cmake that they are part of our target (which is the executable named dtest)\nADD_EXECUTABLE(${target_name} main.cpp tester.cpp ${tests})\n\n# Turn on all warnings when using gcc.\nif (CMAKE_COMPILER_IS_GNUCXX)\n   add_definitions(\"-W -Wall\")\nendif()\n\n\n# Tell cmake to link our target executable to dlib.\ninclude(../cmake)\nTARGET_LINK_LIBRARIES(${target_name} dlib )\n\n\nif (NOT DLIB_NO_GUI_SUPPORT)\n   add_subdirectory(gui)\n   add_subdirectory(examples)\nendif()\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/active_learning.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/svm.h>\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.active_learning\");\n\n// ----------------------------------------------------------------------------------------\n\n    typedef matrix<double, 0, 1> sample_type;\n    typedef radial_basis_kernel<sample_type> kernel_type;\n\n// ----------------------------------------------------------------------------------------\n\n    void make_dataset (\n        std::vector<sample_type>& samples,\n        std::vector<double>& labels\n    )\n    {\n        for (int r = -10; r <= 10; ++r)\n        {\n            for (int c = -10; c <= 10; ++c)\n            {\n                sample_type samp(2);\n                samp(0) = r;\n                samp(1) = c;\n                samples.push_back(samp);\n\n                // if this point is less than 10 from the origin\n                if (sqrt((double)r*r + c*c) <= 8)\n                    labels.push_back(+1);\n                else\n                    labels.push_back(-1);\n\n            }\n        }\n\n\n        vector_normalizer<sample_type> normalizer;\n        normalizer.train(samples);\n        for (unsigned long i = 0; i < samples.size(); ++i)\n            samples[i] = normalizer(samples[i]); \n\n        randomize_samples(samples, labels);\n\n        /*\n        cout << \"samples.size(): \" << samples.size() << endl;\n        cout << \"num +1 samples: \"<< sum(mat(labels) > 0) << endl;\n        cout << \"num -1 samples: \"<< sum(mat(labels) < 0) << endl;\n        */\n\n        empirical_kernel_map<kernel_type> ekm;\n        ekm.load(kernel_type(0.15), samples);\n        for (unsigned long i = 0; i < samples.size(); ++i)\n            samples[i] = ekm.project(samples[i]);\n\n        //cout << \"dims: \"<< ekm.out_vector_size() << endl;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double test_rank_unlabeled_training_samples (\n        const std::vector<sample_type>& samples,\n        const std::vector<double>& labels,\n        active_learning_mode mode,\n        int iterations,\n        bool pick_front\n    )\n    {\n        matrix<double,2,1> s;\n        s = sum(mat(labels) > 0), sum(mat(labels) < 0);\n        s /= labels.size();\n\n\n        svm_c_linear_dcd_trainer<linear_kernel<sample_type> > trainer;\n        trainer.set_c(25);\n\n        const unsigned long initial_size = 1;\n        std::vector<sample_type> tsamples(samples.begin(), samples.begin()+initial_size); \n        std::vector<double> tlabels(labels.begin(), labels.begin()+initial_size); \n\n        decision_function<linear_kernel<sample_type> > df;\n\n        double random_score = 0;\n        double active_learning_score = 0;\n        for (int i = 0; i < iterations; ++i)\n        {\n            print_spinner();\n            random_subset_selector<sample_type> sss = randomly_subsample(samples,50,i);\n            random_subset_selector<double> ssl = randomly_subsample(labels,50,i);\n            std::vector<unsigned long> results;\n\n            results = rank_unlabeled_training_samples(trainer, tsamples, tlabels, sss, mode);\n\n            const unsigned long idx = pick_front ? results.front() : results.back();\n            tsamples.push_back(sss[idx]);\n            tlabels.push_back(ssl[idx]);\n\n            df = trainer.train(tsamples, tlabels);\n            //cout << \"tsamples.size(): \" << tsamples.size() << endl;\n            const unsigned long num = tsamples.size();\n            const double active = test_binary_decision_function(df, samples, labels)*s;\n            //cout << \"test: \"<< active;\n            df = trainer.train(randomly_subsample(samples,num,i), randomly_subsample(labels,num,i));\n            const double random = test_binary_decision_function(df, samples, labels)*s;\n            //cout << \"test: \"<< random << endl;\n\n            active_learning_score += active;\n            random_score += random;\n\n            //cout << \"\\n\\n***********\\n\\n\" << flush;\n        }\n\n        dlog << LINFO << \"pick_front: \" << pick_front << \"   mode: \"<< mode;\n        dlog << LINFO << \"active_learning_score: \"<< active_learning_score;\n        dlog << LINFO << \"random_score:          \"<< random_score;\n        return active_learning_score / random_score;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_active_learning : public tester\n    {\n    public:\n        test_active_learning (\n        ) :\n            tester (\"test_active_learning\",\n                \"Runs tests on the active learning components.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            std::vector<sample_type> samples;\n            std::vector<double> labels;\n            print_spinner();\n            make_dataset(samples, labels);\n            dlog << LINFO << \"samples.size(): \"<< samples.size();\n\n            // When we pick the best/front ranked element then the active learning method\n            // shouldn't do much worse than random selection (and often much better).\n            DLIB_TEST(test_rank_unlabeled_training_samples(samples, labels, max_min_margin, 25, true) >= 0.97);\n            DLIB_TEST(test_rank_unlabeled_training_samples(samples, labels, ratio_margin, 25, true) >= 0.96);\n            // However, picking the worst ranked element should do way worse than random\n            // selection.\n            DLIB_TEST(test_rank_unlabeled_training_samples(samples, labels, max_min_margin, 25, false) < 0.8);\n            DLIB_TEST(test_rank_unlabeled_training_samples(samples, labels, ratio_margin, 25, false) < 0.8);\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/any.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/any.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../rand.h\"\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.any\");\n\n// ----------------------------------------------------------------------------------------\n\n    void test_contains_4(\n        const any a\n    )\n    {\n        DLIB_TEST(a.is_empty() == false);\n        DLIB_TEST(a.contains<int>() == true);\n        DLIB_TEST(a.contains<double>() == false);\n        DLIB_TEST(any_cast<int>(a) == 4);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void run_test()\n    {\n        any a, b, c;\n\n        DLIB_TEST(a.is_empty());\n        DLIB_TEST(a.contains<int>() == false);\n        DLIB_TEST(a.contains<string>() == false);\n        DLIB_TEST(a.is_empty());\n\n        a = b;\n\n        swap(a,b);\n        a.swap(b);\n\n        a = 4;\n        DLIB_TEST(a.is_empty() == false);\n        DLIB_TEST(a.contains<int>() == true);\n        DLIB_TEST(a.contains<double>() == false);\n        DLIB_TEST(any_cast<int>(a) == 4);\n\n        test_contains_4(a);\n\n        DLIB_TEST(a.is_empty() == false);\n        DLIB_TEST(a.contains<int>() == true);\n        DLIB_TEST(a.contains<double>() == false);\n        DLIB_TEST(any_cast<int>(a) == 4);\n\n        bool error = false;\n        try\n        {\n            any_cast<double>(a);\n        }\n        catch (bad_any_cast&)\n        {\n            error = true;\n        }\n        DLIB_TEST(error);\n\n        swap(a,b);\n\n        test_contains_4(b);\n\n        DLIB_TEST(a.is_empty());\n\n        a = b;\n\n        test_contains_4(a);\n\n        c.get<string>() = \"test string\";\n        DLIB_TEST(c.get<string>() == \"test string\"); \n\n        a = c;\n        DLIB_TEST(a.cast_to<string>() == \"test string\"); \n\n\n        a.clear();\n        DLIB_TEST(a.is_empty());\n        error = false;\n        try\n        {\n            any_cast<string>(a);\n        }\n        catch (bad_any_cast&)\n        {\n            error = true;\n        }\n        DLIB_TEST(error);\n\n\n        a = 1;\n        b = 2;\n\n        int* a_ptr = &a.get<int>();\n        int* b_ptr = &b.get<int>();\n\n        swap(a,b);\n        DLIB_TEST(a_ptr == &b.get<int>());\n        DLIB_TEST(b_ptr == &a.get<int>());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class any_tester : public tester\n    {\n    public:\n        any_tester (\n        ) :\n            tester (\"test_any\",\n                    \"Runs tests on the any component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            run_test();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/any_function.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/any.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../rand.h\"\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.any_function\");\n\n// ----------------------------------------------------------------------------------------\n\n    int add ( int a, int b) { return a + b; }\n    string cat ( string a, string b) { return a + b; }\n\n// ----------------------------------------------------------------------------------------\n\n    void set_vals1( int& a) { a = 1; }\n    void set_vals2( int& a, int& b) { a = 1; b = 2; }\n    void set_vals3( int& a, int& b, int& c) { a = 1; b = 2; c = 3; }\n    void set_vals4( int& a, int& b, int& c, int& d) { a = 1; b = 2; c = 3; d = 4; }\n    void set_vals5( int& a, int& b, int& c, int& d, int& e) { a = 1; b = 2; c = 3; d = 4; e = 5; }\n    void set_vals6( int& a, int& b, int& c, int& d, int& e, int& f) { a = 1; b = 2; c = 3; d = 4; e = 5; f = 6; }\n    void set_vals7( int& a, int& b, int& c, int& d, int& e, int& f, int& g) { a = 1; b = 2; c = 3; d = 4; e = 5; f = 6; g = 7; }\n\n    void set_vals8( int& a, int& b, int& c, int& d, int& e, int& f, int& g, int& h) \n    { a = 1; b = 2; c = 3; d = 4; e = 5; f = 6; g = 7; h = 8; }\n\n    void set_vals9( int& a, int& b, int& c, int& d, int& e, int& f, int& g, int& h, int& i) \n    { a = 1; b = 2; c = 3; d = 4; e = 5; f = 6; g = 7; h = 8; i = 9;}\n\n    void set_vals10( int& a, int& b, int& c, int& d, int& e, int& f, int& g, int& h, int& i, int& j) \n    { a = 1; b = 2; c = 3; d = 4; e = 5; f = 6; g = 7; h = 8; i = 9; j = 10;}\n\n    void zero_vals( int& a, int& b, int& c, int& d, int& e, int& f, int& g, int& h, int& i, int& j) \n    { a = 0; b = 0; c = 0; d = 0; e = 0; f = 0; g = 0; h = 0; i = 0; j = 0;}\n\n// ----------------------------------------------------------------------------------------\n\n    struct test\n    {\n        int operator()() const { return 4; }\n    };\n\n    struct test2\n    {\n        int v;\n\n        test2() : v(0) {}\n        test2(int val) : v(val) {}\n        int operator()() const { return v; }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void test_contains_4(\n        const any_function<int()> a\n    )\n    {\n        DLIB_TEST(a.is_empty() == false);\n        DLIB_TEST(a.is_set() == true);\n        DLIB_TEST(a.contains<test>() == true);\n        DLIB_TEST(a.contains<int(*)()>() == false);\n        DLIB_TEST(any_cast<test>(a)() == 4);\n        DLIB_TEST(a() == 4);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void run_test()\n    {\n        any_function<int()> a, b, c;\n\n        DLIB_TEST(a.is_empty());\n        DLIB_TEST(a.is_set()==false);\n        DLIB_TEST(a.contains<int(*)()>() == false);\n        DLIB_TEST(a.contains<test>() == false);\n        DLIB_TEST(a.is_empty());\n\n        a = b;\n\n        swap(a,b);\n        a.swap(b);\n\n        a = test();\n        test_contains_4(a);\n\n\n        bool error = false;\n        try\n        {\n            any_cast<int(*)()>(a);\n        }\n        catch (bad_any_cast&)\n        {\n            error = true;\n        }\n        DLIB_TEST(error);\n\n        swap(a,b);\n\n        test_contains_4(b);\n\n        DLIB_TEST(a.is_empty());\n\n        a = b;\n\n        test_contains_4(a);\n\n        c.get<test2>() = test2(10);\n        DLIB_TEST(c.get<test2>().v == 10); \n\n        a = c;\n        DLIB_TEST(a.cast_to<test2>().v == 10); \n\n\n        a.clear();\n        DLIB_TEST(a.is_empty());\n        error = false;\n        try\n        {\n            any_cast<test>(a);\n        }\n        catch (bad_any_cast&)\n        {\n            error = true;\n        }\n        DLIB_TEST(error);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void run_test2()\n    {\n        any_function<int(int,int)> f = &add;\n\n        DLIB_TEST(f(1,3) == 4);\n\n        any_function<string(string,string)> g(&cat);\n        DLIB_TEST(g(\"one\", \"two\") == \"onetwo\");\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void run_test3()\n    {\n        any_function<void(int&)> f1;\n        any_function<void(int&,int&)> f2;\n        any_function<void(int&,int&,int&)> f3;\n        any_function<void(int&,int&,int&,int&)> f4;\n        any_function<void(int&,int&,int&,int&,int&)> f5;\n        any_function<void(int&,int&,int&,int&,int&,int&)> f6;\n        any_function<void(int&,int&,int&,int&,int&,int&,int&)> f7;\n        any_function<void(int&,int&,int&,int&,int&,int&,int&,int&)> f8;\n        any_function<void(int&,int&,int&,int&,int&,int&,int&,int&,int&)> f9;\n        any_function<void(int&,int&,int&,int&,int&,int&,int&,int&,int&,int&)> f10;\n\n        f1 = set_vals1;\n        f2 = set_vals2;\n        f3 = set_vals3;\n        f4 = set_vals4;\n        f5 = set_vals5;\n        f6 = set_vals6;\n        f7 = set_vals7;\n        f8 = set_vals8;\n        f9 = set_vals9;\n        f10 = set_vals10;\n\n        int a,b,c,d,e,f,g,h,i,j;\n\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n\n        f1(a);\n        DLIB_TEST(a==1);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n\n        f2(a,b);\n        DLIB_TEST(a==1 && b==2);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n\n        f3(a,b,c);\n        DLIB_TEST(a==1 && b==2 && c==3);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n\n        f4(a,b,c,d);\n        DLIB_TEST(a==1 && b==2 && c==3 && d==4);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n\n        f5(a,b,c,d,e);\n        DLIB_TEST(a==1 && b==2 && c==3 && d==4 && e==5);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n\n        f6(a,b,c,d,e,f);\n        DLIB_TEST(a==1 && b==2 && c==3 && d==4 && e==5 && f==6);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n\n        f7(a,b,c,d,e,f,g);\n        DLIB_TEST(a==1 && b==2 && c==3 && d==4 && e==5 && f==6 && g==7);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n\n        f8(a,b,c,d,e,f,g,h);\n        DLIB_TEST(a==1 && b==2 && c==3 && d==4 && e==5 && f==6 && g==7 && h==8);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n\n        f9(a,b,c,d,e,f,g,h,i);\n        DLIB_TEST(a==1 && b==2 && c==3 && d==4 && e==5 && f==6 && g==7 && h==8 && i==9);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n        \n        f10(a,b,c,d,e,f,g,h,i,j);\n        DLIB_TEST(a==1 && b==2 && c==3 && d==4 && e==5 && f==6 && g==7 && h==8 && i==9 && j==10);\n        zero_vals(a,b,c,d,e,f,g,h,i,j);\n    }\n// ----------------------------------------------------------------------------------------\n\n    class test_any_function : public tester\n    {\n    public:\n        test_any_function (\n        ) :\n            tester (\"test_any_function\",\n                    \"Runs tests on the any_function component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            run_test();\n            print_spinner();\n            run_test2();\n            print_spinner();\n            run_test3();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/array.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.  \n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/interfaces/enumerable.h>\n#include <dlib/array.h>\n#include <dlib/rand.h>\n\n\n#include \"tester.h\"\n\nnamespace \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    using dlib::array;\n\n    logger dlog(\"test.array\");\n\n    template <\n        typename array\n        >\n    void array_expand_test (\n    )\n    /*!\n        requires\n            - array is an implementation of array/array_sort_abstract.h \n              array is instantiated with unsigned long\n        ensures\n            - runs tests on array for compliance with the specs\n    !*/\n    {        \n        dlib::rand rnd;\n\n        DLIB_TEST(dlib::is_array<array>::value == true);\n\n        array a1, a2;\n\n        {\n            array a4(4);\n            DLIB_TEST(a4.size() == 4);\n        }\n\n        {\n            array a1, a2;\n\n            for (int k = 1; k < 100000; k += 1000)\n            {\n                for (int i = 0; i < 10; ++i)\n                {\n                    a1.clear();\n                    a1.set_max_size(500+k);\n                    a1.set_size(500+k);\n                    for (unsigned long j = 0; j < a1.size(); ++j)\n                    {\n                        a1[j] = j;\n                        DLIB_TEST(a1[j] == j);\n                    }\n                }\n            }\n        }\n\n        DLIB_TEST(a1.max_size() == 0);\n        DLIB_TEST(a2.max_size() == 0);\n\n\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.at_start());\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.move_next() == false);\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.at_start() == false);\n        DLIB_TEST(a1.move_next() == false);\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.at_start() == false);            \n        DLIB_TEST(a1.size() == 0);\n\n        swap(a1,a2);\n        DLIB_TEST(a2.size() == 0);\n        DLIB_TEST(a2.current_element_valid() == false);\n        DLIB_TEST(a2.at_start() == false);\n        DLIB_TEST(a2.move_next() == false);\n        DLIB_TEST(a2.current_element_valid() == false);\n        DLIB_TEST(a2.size() == 0);\n        DLIB_TEST(a2.at_start() == false);            \n        DLIB_TEST(a2.size() == 0);\n\n\n\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.at_start());\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.move_next() == false);\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.at_start() == false);\n        DLIB_TEST(a1.move_next() == false);\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.at_start() == false);            \n        DLIB_TEST(a1.size() == 0);\n\n        a1.reset();\n        a2.reset();\n\n        for (unsigned long k = 0; k < 4; ++k)\n        {\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start() == false);            \n            DLIB_TEST(a1.size() == 0);\n\n            swap(a1,a2);\n            DLIB_TEST(a2.size() == 0);\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.at_start() == false);\n            DLIB_TEST(a2.move_next() == false);\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.size() == 0);\n            DLIB_TEST(a2.at_start() == false);            \n            DLIB_TEST(a2.size() == 0);\n\n\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start() == false);            \n            DLIB_TEST(a1.size() == 0);\n\n            a1.clear();\n            a2.clear();\n\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start() == false);            \n            DLIB_TEST(a1.size() == 0);\n\n            swap(a1,a2);\n            DLIB_TEST(a2.size() == 0);\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.at_start() == false);\n            DLIB_TEST(a2.move_next() == false);\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.size() == 0);\n            DLIB_TEST(a2.at_start() == false);            \n            DLIB_TEST(a2.size() == 0);\n\n\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start() == false);            \n            DLIB_TEST(a1.size() == 0);\n\n            a1.clear();\n            a2.clear();\n\n\n\n\n            a1.set_max_size(100000);\n            a2.set_max_size(100000);\n            a1.set_size(10000);\n            DLIB_TEST(a1.size() == 10000);\n            a2.set_size(10000);\n            DLIB_TEST(a2.size() == 10000);\n            for (unsigned long i = 0; i < a1.size(); ++i)\n            {\n                unsigned long a = static_cast<unsigned long>(rnd.get_random_32bit_number());\n                a1[i] = a;\n                a2[i] = i;\n                DLIB_TEST(a1[i] == a);\n                DLIB_TEST(a2[i] == i);\n            }\n\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next());\n            DLIB_TEST(a1.current_element_valid());\n\n            DLIB_TEST(a1.at_start() == false);\n            a1.sort();\n            DLIB_TEST(a1.at_start());\n            a2.sort();\n            DLIB_TEST(a1.size() == 10000);\n            DLIB_TEST(a2.size() == 10000);\n\n\n            for (unsigned long i = 0; i < a1.size(); ++i)\n            {\n                if (i+1 < a1.size())\n                {\n                    DLIB_TEST_MSG(a1[i] <= a1[i+1],\n                                 \"a1[i]: \" << a1[i] << \"    a1[i+1]: \" << a1[i+1]\n                                 << \"    i: \" << i);\n                }\n                DLIB_TEST_MSG(a2[i] == i,\"i: \" << i << \"   a2[i]: \" << a2[i]);\n            }\n\n            unsigned long last = 0;\n            unsigned long count = 0;\n            while (a1.move_next())\n            {\n                DLIB_TEST(last <= a1.element());\n                last = a1.element();\n                ++count;\n            }\n            DLIB_TEST(count == a1.size());\n\n            last = 0;\n            count = 0;\n            while (a2.move_next())\n            {\n                DLIB_TEST(last <= a2.element());\n                last = a2.element();\n                ++count;\n            }\n            DLIB_TEST(count == a2.size());\n\n            a2.set_size(15000);\n\n            for (unsigned long i = 0; i < a1.size(); ++i)\n            {\n                if (i+1 < a1.size())\n                {\n                    DLIB_TEST(a1[i] <= a1[i+1]);\n                }\n                DLIB_TEST(a2[i] == i);\n            }\n\n            for (unsigned long i = 10000; i < a2.size(); ++i)\n            {\n                a2[i] = i;\n                DLIB_TEST(a2[i] == i);\n            }\n\n            for (unsigned long i = 0; i < a2.size(); ++i)\n            {\n                DLIB_TEST(a2[i] == i);\n            }\n\n            a2.reset();\n            last = 0;\n            while (a2.move_next())\n            {\n                DLIB_TEST(last <= a2.element());\n                last = a2.element();\n            }\n\n            a1.reset();\n            last = 0;\n            while (a1.move_next())\n            {\n                DLIB_TEST(last <= a1.element());\n                last = a1.element();\n            }\n\n            a1.sort();\n            last = 0;\n            while (a1.move_next())\n            {\n                DLIB_TEST(last <= a1.element());\n                last = a1.element();\n            }\n\n            swap(a2,a1);\n\n            for (unsigned long i = 0; i < 15000; ++i)\n            {\n                DLIB_TEST(a1[i] == i);\n            }\n\n\n\n            a1.clear();\n            DLIB_TEST(a1.max_size() == 0);\n\n\n\n\n            a1.clear();\n            a2.clear();\n\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a2.size() == 0);\n            a1.set_max_size(100000);\n            a2.set_max_size(100000);\n\n            a1.set_size(10000);\n            DLIB_TEST(a1.size() == 10000);\n            a2.set_size(10000);\n            DLIB_TEST(a2.size() == 10000);\n            for (unsigned long i = 0; i < a1.size(); ++i)\n            {\n                unsigned long a = static_cast<unsigned long>(rnd.get_random_32bit_number());\n                a1[i] = a;\n                a2[i] = i;\n                DLIB_TEST(a1[i] == a);\n                DLIB_TEST(a2[i] == i);\n            }\n\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next());\n            DLIB_TEST(a1.current_element_valid());\n\n            DLIB_TEST(a1.at_start() == false);\n            a1.sort();\n            DLIB_TEST(a1.at_start());\n            a2.sort();\n            DLIB_TEST(a1.size() == 10000);\n            DLIB_TEST(a2.size() == 10000);\n\n\n            for (unsigned long i = 0; i < a1.size(); ++i)\n            {\n                if (i+1 < a1.size())\n                {\n                    DLIB_TEST(a1[i] <= a1[i+1]);\n                }\n                DLIB_TEST(a2[i] == i);\n            }\n\n            last = 0;\n            while (a1.move_next())\n            {\n                DLIB_TEST(last <= a1.element());\n                last = a1.element();\n            }\n\n            last = 0;\n            while (a2.move_next())\n            {\n                DLIB_TEST(last <= a2.element());\n                last = a2.element();\n            }\n\n            a2.set_size(15000);\n\n            for (unsigned long i = 0; i < a1.size(); ++i)\n            {\n                if (i+1 < a1.size())\n                {\n                    DLIB_TEST(a1[i] <= a1[i+1]);\n                }\n                DLIB_TEST(a2[i] == i);\n            }\n\n            for (unsigned long i = 10000; i < a2.size(); ++i)\n            {\n                a2[i] = i;\n                DLIB_TEST(a2[i] == i);\n            }\n\n            for (unsigned long i = 0; i < a2.size(); ++i)\n            {\n                DLIB_TEST(a2[i] == i);\n            }\n\n            a2.reset();\n            last = 0;\n            while (a2.move_next())\n            {\n                DLIB_TEST(last <= a2.element());\n                last = a2.element();\n            }\n\n            a1.reset();\n            last = 0;\n            while (a1.move_next())\n            {\n                DLIB_TEST(last <= a1.element());\n                last = a1.element();\n            }\n\n            a1.sort();\n            last = 0;\n            while (a1.move_next())\n            {\n                DLIB_TEST(last <= a1.element());\n                last = a1.element();\n            }\n\n            swap(a2,a1);\n\n            for (unsigned long i = 0; i < 15000; ++i)\n            {\n                DLIB_TEST(a1[i] == i);\n            }\n\n\n\n            a1.clear();\n            DLIB_TEST(a1.max_size() == 0);\n\n            a2.clear();\n            print_spinner();\n        }\n\n\n\n        a1.set_max_size(2000000);\n        DLIB_TEST(a1.max_size() == 2000000);\n        DLIB_TEST(a1.size() == 0);\n        a1.set_size(2000000);\n        DLIB_TEST(a1.max_size() == 2000000);\n        DLIB_TEST(a1.size() == 2000000);\n\n        for (unsigned long i = 0; i < a1.size(); ++i)\n        {\n            a1[i] = rnd.get_random_32bit_number();\n        }\n\n        print_spinner();\n        a1.sort();\n\n        print_spinner();\n        // serialize the state of a1, then clear a1, then\n        // load the state back into a1.\n        ostringstream sout;\n        serialize(a1,sout);\n        DLIB_TEST(a1.at_start() == true);\n        istringstream sin(sout.str());\n        a1.clear();\n        DLIB_TEST(a1.max_size() == 0);\n        deserialize(a1,sin);\n\n        DLIB_TEST(a1.size() == 2000000);\n\n        for (unsigned long i = 0; i < a1.size()-1; ++i)\n        {\n            DLIB_TEST(a1[i] <= a1[i+1]);\n        }\n\n        DLIB_TEST(a1.max_size() == 2000000);\n        DLIB_TEST(a1.size() == 2000000);\n\n\n        swap(a1,a2);\n\n        print_spinner();\n\n        DLIB_TEST(a2.size() == 2000000);\n\n        for (unsigned long i = 0; i < a2.size()-1; ++i)\n        {\n            DLIB_TEST(a2[i] <= a2[i+1]);\n        }\n\n        DLIB_TEST(a2.max_size() == 2000000);\n        DLIB_TEST(a2.size() == 2000000);\n\n        swap(a1,a2);\n\n\n        a1.clear();\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.max_size() == 0);\n\n        a1.resize(10);\n        DLIB_TEST(a1.size() == 10);\n        DLIB_TEST(a1.max_size() == 10);\n\n        for (unsigned long i = 0; i < a1.size(); ++i)\n        {\n            a1[i] = i;\n        }\n\n        print_spinner();\n        a1.resize(100);\n        DLIB_TEST(a1.size() == 100);\n        DLIB_TEST(a1.max_size() == 100);\n\n        for (unsigned long i = 0; i < 10; ++i)\n        {\n            DLIB_TEST(a1[i] == i);\n        }\n\n        a1.resize(50);\n        DLIB_TEST(a1.size() == 50);\n        DLIB_TEST(a1.max_size() == 100);\n\n        for (unsigned long i = 0; i < 10; ++i)\n        {\n            DLIB_TEST(a1[i] == i);\n        }\n\n        a1.resize(10);\n        DLIB_TEST(a1.size() == 10);\n        DLIB_TEST(a1.max_size() == 100);\n\n        for (unsigned long i = 0; i < 10; ++i)\n        {\n            DLIB_TEST(a1[i] == i);\n        }\n\n        a1.resize(20);\n        DLIB_TEST(a1.size() == 20);\n        DLIB_TEST(a1.max_size() == 100);\n\n        for (unsigned long i = 0; i < 10; ++i)\n        {\n            DLIB_TEST(a1[i] == i);\n        }\n\n\n        a1.resize(100);\n        DLIB_TEST(a1.size() == 100);\n        DLIB_TEST(a1.max_size() == 100);\n\n        for (unsigned long i = 0; i < 10; ++i)\n        {\n            DLIB_TEST(a1[i] == i);\n        }\n\n        {\n            a1.clear();\n            DLIB_TEST(a1.size() == 0);\n            for (unsigned long i = 0; i < 100; ++i)\n            {\n                unsigned long a = i;\n                a1.push_back(a);\n                DLIB_TEST(a1.size() == i+1);\n                DLIB_TEST(a1.back() == i);\n            }\n            for (unsigned long i = 0; i < 100; ++i)\n            {\n                DLIB_TEST(a1[i] == i);\n            }\n            for (unsigned long i = 0; i < 100; ++i)\n            {\n                unsigned long a = 0;\n                a1.pop_back(a);\n                DLIB_TEST(a == 99-i);\n            }\n        }\n\n        {\n            a1.clear();\n            DLIB_TEST(a1.size() == 0);\n            for (unsigned long i = 0; i < 100; ++i)\n            {\n                unsigned long a = i;\n                a1.push_back(a);\n                DLIB_TEST(a1.size() == i+1);\n                DLIB_TEST(a1.back() == i);\n            }\n            for (unsigned long i = 0; i < 100; ++i)\n            {\n                DLIB_TEST(a1[i] == i);\n            }\n            for (unsigned long i = 0; i < 100; ++i)\n            {\n                a1.pop_back();\n            }\n            DLIB_TEST(a1.size() == 0);\n        }\n\n    }\n\n    struct stuff\n    {\n        int whatever;\n    };\n    void another_array_test()\n    {\n        array<stuff> a;\n        a.resize(5);\n        a[0].whatever = 0;\n        stuff temp;\n        temp.whatever = 99;\n        a.push_back(temp);\n        DLIB_TEST(a.size() == 6);\n        DLIB_TEST(a[5].whatever == 99);\n\n        DLIB_TEST(dlib::is_array<array<stuff> >::value == true);\n    }\n\n    void test_array_split()\n    {\n        array<int> temp(5);\n        \n        for (unsigned int i = 0; i < temp.size(); ++i)\n            temp[i] = i;\n\n        array<int> b;\n\n        split_array(temp, b, 0.5);\n        DLIB_TEST(temp.size() == 2);\n        DLIB_TEST(b.size() == 3);\n\n        DLIB_TEST(temp[0] == 0);\n        DLIB_TEST(temp[1] == 1);\n        DLIB_TEST(b[0] == 2);\n        DLIB_TEST(b[1] == 3);\n        DLIB_TEST(b[2] == 4);\n    }\n\n    class array_tester : public tester\n    {\n    public:\n        array_tester (\n        ) :\n            tester (\"test_array\",\n                    \"Runs tests on the array component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            another_array_test();\n\n            // test a checking version first for good measure\n            print_spinner();\n            array_expand_test<array<unsigned long> >();\n\n            DLIB_TEST(dlib::is_array<int>::value == false);\n            test_array_split();\n        }\n    } a;\n\n\n\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/array2d.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/interfaces/enumerable.h>\n#include <dlib/array2d.h>\n#include \"tester.h\"\n#include <dlib/pixel.h>\n#include <dlib/image_transforms.h>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.array2d\");\n\n    template <\n        typename array2d\n        >\n    void array2d_kernel_test (\n    )\n    /*!\n        requires\n            - array2d is an implementation of array2d/array2d_kernel_abstract.h \n              is instantiated with unsigned long \n        ensures\n            - runs tests on array2d for compliance with the specs\n    !*/\n    {        \n        srand(static_cast<unsigned int>(time(0)));\n\n        array2d test,test2;\n\n        long nc, nr;\n\n\n        DLIB_TEST(get_rect(test).is_empty());\n\n        enumerable<unsigned long>& e = test;\n        DLIB_TEST(e.at_start() == true);\n\n\n        DLIB_TEST(e.size() == 0);\n        DLIB_TEST(e.at_start() == true);\n        DLIB_TEST(e.current_element_valid() == false);\n\n        DLIB_TEST (e.move_next() == false);\n        DLIB_TEST (e.move_next() == false);\n        DLIB_TEST (e.move_next() == false);\n        DLIB_TEST (e.move_next() == false);\n        DLIB_TEST (e.move_next() == false);\n        DLIB_TEST (e.move_next() == false);\n\n\n        DLIB_TEST(e.size() == 0);\n        DLIB_TEST(e.at_start() == false);\n        DLIB_TEST(e.current_element_valid() == false);\n\n\n        e.reset();\n\n        DLIB_TEST(e.size() == 0);\n        DLIB_TEST(e.at_start() == true);\n        DLIB_TEST(e.current_element_valid() == false);\n\n\n        DLIB_TEST(get_rect(test).is_empty());\n\n\n\n        DLIB_TEST(test.at_start() == true);\n\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test.at_start() == true);\n        DLIB_TEST(test.current_element_valid() == false);\n\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test.at_start() == false);\n        DLIB_TEST(test.current_element_valid() == false);\n\n\n        test.reset();\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test.at_start() == true);\n        DLIB_TEST(test.current_element_valid() == false);\n\n        test.clear();\n\n\n        DLIB_TEST(test.at_start() == true);\n\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test.at_start() == true);\n        DLIB_TEST(test.current_element_valid() == false);\n\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n\n\n        test.set_size(0,0);\n\n        DLIB_TEST(get_rect(test).is_empty());\n\n        DLIB_TEST(test.at_start() == true);\n\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test.at_start() == true);\n        DLIB_TEST(test.current_element_valid() == false);\n\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n        DLIB_TEST (test.move_next() == false);\n\n        swap(test,test2);\n        DLIB_TEST (test2.at_start() == false);\n        DLIB_TEST (test2.current_element_valid() == false);\n        DLIB_TEST(test.at_start() == true);\n        DLIB_TEST(test.current_element_valid() == false);\n        swap(test,test2);\n        DLIB_TEST(test2.at_start() == true);\n        DLIB_TEST(test2.current_element_valid() == false);\n\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test.at_start() == false);\n        DLIB_TEST(test.current_element_valid() == false);\n\n\n        test.reset();\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test.at_start() == true);\n        DLIB_TEST(test.current_element_valid() == false);\n\n\n\n\n        for (int j = 0; j < 30; ++j)\n        {\n            test2.clear();\n            switch (j)\n            {\n                case 0:\n                    nc = 10;\n                    nr = 11;\n                    break;\n                case 1:\n                    nc = 1;\n                    nr = 1;\n                    break;\n                case 2:\n                    nc = 100;\n                    nr = 1;\n                    break;\n                case 3:\n                    nc = 1;\n                    nr = 100;\n                    break;\n                default:\n                    nc = ::rand()%100 + 1;\n                    nr = ::rand()%100 + 1;\n                    break;\n            }\n\n            test.set_size(nr,nc);\n\n            DLIB_TEST(get_rect(test).left() == 0);\n            DLIB_TEST(get_rect(test).top() == 0);\n            DLIB_TEST(get_rect(test).right() == nc-1);\n            DLIB_TEST(get_rect(test).bottom() == nr-1);\n\n            DLIB_TEST(test.size() == static_cast<unsigned long>(nc*nr));\n            DLIB_TEST(test.nr() == nr);\n            DLIB_TEST(test.nc() == nc);\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n\n            unsigned long i = 0;\n            while (test.move_next())\n            {\n                DLIB_TEST(test.current_element_valid() == true);\n                DLIB_TEST(test.at_start() == false);\n                test.element() = i;\n                DLIB_TEST(const_cast<const array2d&>(test).element() == i);\n                ++i;\n            }\n            DLIB_TEST(i == test.size());\n            DLIB_TEST(test.current_element_valid() == false);\n\n            DLIB_TEST(test.nr() == nr);\n            DLIB_TEST(test.nc() == nc);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.size() == static_cast<unsigned long>(nc*nr));\n\n            i = 0;\n            for (long row = 0; row < test.nr(); ++row)\n            {\n                for (long col = 0; col < test.nc(); ++col)\n                {\n                    DLIB_TEST_MSG(test[row][col] == i,\n                                 \"\\n\\trow: \" << row <<\n                                 \"\\n\\tcol: \" << col <<\n                                 \"\\n\\ti:   \" << i <<\n                                 \"\\n\\ttest[row][col]: \" << test[row][col]);\n                    DLIB_TEST(test[row].nc() == test.nc());\n                    DLIB_TEST(test.current_element_valid() == false);\n\n                    DLIB_TEST(test.nr() == nr);\n                    DLIB_TEST(test.nc() == nc);\n                    DLIB_TEST(test.at_start() == false);\n                    DLIB_TEST(test.size() == static_cast<unsigned long>(nc*nr));\n                    ++i;\n                }\n            }\n\n            test.reset();\n\n            i = 0;\n            while (test.move_next())\n            {\n                DLIB_TEST(test.element() == i);\n                ++i;\n                DLIB_TEST(test.current_element_valid() == true);\n                DLIB_TEST(test.at_start() == false);\n            }\n            DLIB_TEST(i == test.size());\n\n            test.reset();\n\n\n\n\n            swap(test,test2);\n\n            DLIB_TEST(test2.size() == static_cast<unsigned long>(nc*nr));\n            DLIB_TEST(test2.nr() == nr);\n            DLIB_TEST(test2.nc() == nc);\n            DLIB_TEST(test2.at_start() == true);\n            DLIB_TEST(test2.current_element_valid() == false);\n\n            i = 0;\n            while (test2.move_next())\n            {\n                DLIB_TEST(test2.current_element_valid() == true);\n                DLIB_TEST(test2.at_start() == false);\n                test2.element() = i;\n                ++i;\n            }\n            DLIB_TEST(i == test2.size());\n            DLIB_TEST(test2.current_element_valid() == false);\n\n            DLIB_TEST(test2.nr() == nr);\n            DLIB_TEST(test2.nr() == test2.nr());\n            DLIB_TEST(test2.nc() == nc);\n            DLIB_TEST(test2.nc() == test2.nc());\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.size() == static_cast<unsigned long>(nc*nr));\n\n            i = 0;\n            for (long row = 0; row < test2.nr(); ++row)\n            {\n                for (long col = 0; col < test2.nc(); ++col)\n                {\n                    DLIB_TEST(test2[row][col] == i);\n                    DLIB_TEST(const_cast<const array2d&>(test2)[row][col] == i);\n                    DLIB_TEST(test2[row].nc() == test2.nc());\n                    DLIB_TEST(test2.current_element_valid() == false);\n\n                    DLIB_TEST(test2.nr() == nr);\n                    DLIB_TEST(test2.nr() == test2.nr());\n                    DLIB_TEST(test2.nc() == nc);\n                    DLIB_TEST(test2.nc() == test2.nc());\n                    DLIB_TEST(test2.at_start() == false);\n                    DLIB_TEST(test2.size() == static_cast<unsigned long>(nc*nr));\n                    ++i;\n                }\n            }\n\n            test2.reset();\n\n            i = 0;\n            while (test2.move_next())\n            {\n                DLIB_TEST(test2.element() == i);\n                DLIB_TEST(const_cast<const array2d&>(test2).element() == i);\n                ++i;\n                DLIB_TEST(test2.current_element_valid() == true);\n                DLIB_TEST(test2.at_start() == false);\n            }\n            DLIB_TEST(i == test2.size());\n\n\n            test2.clear();\n            DLIB_TEST(test2.size() == 0);\n            DLIB_TEST(test2.nr() == 0);\n            DLIB_TEST(test2.nc() == 0);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == true);\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.nc() == 0);\n            DLIB_TEST(test.nr() == 0);\n\n            test.set_size(nr,nc);\n            DLIB_TEST(test.size() == static_cast<unsigned long>(nc*nr));\n            DLIB_TEST(test.nc() == nc);\n            DLIB_TEST(test.nr() == nr);\n\n\n\n        }\n\n\n\n\n\n        // test the serialization\n        istringstream sin;\n        ostringstream sout;\n        test.clear();\n        test2.clear();\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test.nc() == 0);\n        DLIB_TEST(test.nr() == 0);\n        DLIB_TEST(test2.size() == 0);\n        DLIB_TEST(test2.nc() == 0);\n        DLIB_TEST(test2.nr() == 0);\n\n        test.set_size(10,10);\n\n        for (long row = 0; row < test.nr(); ++row)\n        {\n            for (long col = 0; col < test.nc(); ++col)\n            {\n                test[row][col] = row*col;\n            }\n        }\n\n        serialize(test,sout);\n        sin.str(sout.str());\n        deserialize(test2,sin);\n\n        DLIB_TEST(test2.size() == test.size());\n        DLIB_TEST(test2.nc() == test.nc());\n        DLIB_TEST(test2.nr() == test.nr());\n        DLIB_TEST(test2.size() == 100);\n        DLIB_TEST(test2.nc() == 10);\n        DLIB_TEST(test2.nr() == 10);\n\n\n        for (long row = 0; row < test.nr(); ++row)\n        {\n            for (long col = 0; col < test.nc(); ++col)\n            {\n                DLIB_TEST(test[row][col] == static_cast<unsigned long>(row*col));\n                DLIB_TEST(test2[row][col] == static_cast<unsigned long>(row*col));\n            }\n        }\n\n\n\n\n\n\n        test.set_size(10,11);\n        DLIB_TEST(test.nr() == 10);\n        DLIB_TEST(test.nc() == 11);\n        test.set_size(0,0);\n        DLIB_TEST(test.nr() == 0);\n        DLIB_TEST(test.nc() == 0);\n\n    }\n\n    void test_serialization()\n    {\n        // Do these tests because there are overloads of the serialize routines\n        // specifically for these types of pixel (except for unsigned short,  \n        // we do that because you can never have too many tests).\n        {\n            array2d<rgb_alpha_pixel> img, img2;\n            img.set_size(3,2);\n            assign_all_pixels(img, 5);\n            img[1][1].red = 9;\n            img[1][1].green = 8;\n            img[1][1].blue = 7;\n            img[1][1].alpha = 3;\n            ostringstream sout;\n            serialize(img, sout);\n            istringstream sin(sout.str());\n            deserialize(img2, sin);\n\n            DLIB_TEST(img2.nr() == 3);\n            DLIB_TEST(img2.nc() == 2);\n\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    DLIB_TEST(img[r][c].red == img2[r][c].red);\n                    DLIB_TEST(img[r][c].green == img2[r][c].green);\n                    DLIB_TEST(img[r][c].blue == img2[r][c].blue);\n                    DLIB_TEST(img[r][c].alpha == img2[r][c].alpha);\n                }\n            }\n        }\n        {\n            array2d<hsi_pixel> img, img2;\n            img.set_size(3,2);\n            assign_all_pixels(img, 5);\n            img[1][1].h = 9;\n            img[1][1].s = 2;\n            img[1][1].i = 3;\n            ostringstream sout;\n            serialize(img, sout);\n            istringstream sin(sout.str());\n            deserialize(img2, sin);\n\n            DLIB_TEST(img2.nr() == 3);\n            DLIB_TEST(img2.nc() == 2);\n\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    DLIB_TEST(img[r][c].h == img2[r][c].h);\n                    DLIB_TEST(img[r][c].s == img2[r][c].s);\n                    DLIB_TEST(img[r][c].i == img2[r][c].i);\n                }\n            }\n        }\n        {\n            array2d<bgr_pixel> img, img2;\n            img.set_size(3,2);\n            assign_all_pixels(img, 5);\n            img[1][1].red = 1;\n            img[1][1].green = 2;\n            img[1][1].blue = 3;\n            ostringstream sout;\n            serialize(img, sout);\n            istringstream sin(sout.str());\n            deserialize(img2, sin);\n\n            DLIB_TEST(img2.nr() == 3);\n            DLIB_TEST(img2.nc() == 2);\n\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    DLIB_TEST(img[r][c].red == img2[r][c].red);\n                    DLIB_TEST(img[r][c].green == img2[r][c].green);\n                    DLIB_TEST(img[r][c].blue == img2[r][c].blue);\n                }\n            }\n        }\n        {\n            array2d<rgb_pixel> img, img2;\n            img.set_size(3,2);\n            assign_all_pixels(img, 5);\n            img[1][1].red = 1;\n            img[1][1].green = 2;\n            img[1][1].blue = 3;\n            ostringstream sout;\n            serialize(img, sout);\n            istringstream sin(sout.str());\n            deserialize(img2, sin);\n\n            DLIB_TEST(img2.nr() == 3);\n            DLIB_TEST(img2.nc() == 2);\n\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    DLIB_TEST(img[r][c].red == img2[r][c].red);\n                    DLIB_TEST(img[r][c].green == img2[r][c].green);\n                    DLIB_TEST(img[r][c].blue == img2[r][c].blue);\n                }\n            }\n        }\n        {\n            array2d<unsigned short> img, img2;\n            img.set_size(3,2);\n            assign_all_pixels(img, 5);\n            img[1][1] = 9;\n            ostringstream sout;\n            serialize(img, sout);\n            istringstream sin(sout.str());\n            deserialize(img2, sin);\n\n            DLIB_TEST(img2.nr() == 3);\n            DLIB_TEST(img2.nc() == 2);\n\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    DLIB_TEST(img[r][c] == img2[r][c]);\n                }\n            }\n        }\n        {\n            array2d<unsigned char> img, img2;\n            img.set_size(3,2);\n            assign_all_pixels(img, 5);\n            img[1][1] = 9;\n            ostringstream sout;\n            serialize(img, sout);\n            istringstream sin(sout.str());\n            deserialize(img2, sin);\n\n            DLIB_TEST(img2.nr() == 3);\n            DLIB_TEST(img2.nc() == 2);\n\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    DLIB_TEST(img[r][c] == img2[r][c]);\n                }\n            }\n\n            DLIB_TEST((char*)&img[0][0] + img.width_step() == (char*)&img[1][0]);\n        }\n\n        COMPILE_TIME_ASSERT(is_array2d<array2d<unsigned char> >::value == true);\n        COMPILE_TIME_ASSERT(is_array2d<array2d<float> >::value == true);\n        COMPILE_TIME_ASSERT(is_array2d<float>::value == false);\n    }\n\n\n    class array2d_tester : public tester\n    {\n    public:\n        array2d_tester (\n        ) :\n            tester (\"test_array2d\",\n                    \"Runs tests on the array2d component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            array2d_kernel_test<array2d<unsigned long> >();\n            print_spinner();\n            test_serialization();\n            print_spinner();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/assignment_learning.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n#include <dlib/rand.h>\n\n\ntypedef dlib::matrix<double,3,1> lhs_element;\ntypedef dlib::matrix<double,3,1> rhs_element;\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.assignment_learning\");\n\n// ----------------------------------------------------------------------------------------\n\n\n// ----------------------------------------------------------------------------------------\n\n    struct feature_extractor_dense\n    {\n        typedef matrix<double,3,1> feature_vector_type;\n\n        typedef ::lhs_element lhs_element;\n        typedef ::rhs_element rhs_element;\n\n        unsigned long num_features() const\n        {\n            return 3;\n        }\n\n        void get_features (\n            const lhs_element& left,\n            const rhs_element& right,\n            feature_vector_type& feats\n        ) const\n        {\n            feats = squared(left - right);\n        }\n\n    };\n\n    void serialize   (const feature_extractor_dense& , std::ostream& ) {}\n    void deserialize (feature_extractor_dense&       , std::istream& ) {}\n\n// ----------------------------------------------------------------------------------------\n\n    struct feature_extractor_sparse\n    {\n        typedef std::vector<std::pair<unsigned long,double> > feature_vector_type;\n\n        typedef ::lhs_element lhs_element;\n        typedef ::rhs_element rhs_element;\n\n        unsigned long num_features() const\n        {\n            return 3;\n        }\n\n        void get_features (\n            const lhs_element& left,\n            const rhs_element& right,\n            feature_vector_type& feats\n        ) const\n        {\n            feats.clear();\n            feats.push_back(make_pair(0,squared(left-right)(0)));\n            feats.push_back(make_pair(1,squared(left-right)(1)));\n            feats.push_back(make_pair(2,squared(left-right)(2)));\n        }\n\n    };\n\n    void serialize   (const feature_extractor_sparse& , std::ostream& ) {}\n    void deserialize (feature_extractor_sparse&       , std::istream& ) {}\n\n// ----------------------------------------------------------------------------------------\n\n    typedef std::pair<std::vector<lhs_element>, std::vector<rhs_element> > sample_type;\n    typedef std::vector<long> label_type;\n\n// ----------------------------------------------------------------------------------------\n\n    void make_data (\n        std::vector<sample_type>& samples,\n        std::vector<label_type>& labels\n    )\n    {\n        lhs_element a, b, c, d;\n        a = 1,0,0;\n        b = 0,1,0;\n        c = 0,0,1;\n        d = 0,1,1;\n\n        std::vector<lhs_element> lhs;\n        std::vector<rhs_element> rhs;\n        label_type label;\n\n        lhs.push_back(a);\n        lhs.push_back(b);\n        lhs.push_back(c);\n\n        rhs.push_back(b);\n        rhs.push_back(a);\n        rhs.push_back(c);\n\n        label.push_back(1);\n        label.push_back(0);\n        label.push_back(2);\n\n        samples.push_back(make_pair(lhs,rhs));\n        labels.push_back(label);\n\n\n\n\n        lhs.clear();\n        rhs.clear();\n        label.clear();\n\n        lhs.push_back(a);\n        lhs.push_back(b);\n        lhs.push_back(c);\n\n        rhs.push_back(c);\n        rhs.push_back(b);\n        rhs.push_back(a);\n        rhs.push_back(d);\n\n        label.push_back(2);\n        label.push_back(1);\n        label.push_back(0);\n\n        samples.push_back(make_pair(lhs,rhs));\n        labels.push_back(label);\n\n\n        lhs.clear();\n        rhs.clear();\n        label.clear();\n\n        lhs.push_back(a);\n        lhs.push_back(b);\n        lhs.push_back(c);\n\n        rhs.push_back(c);\n        rhs.push_back(a);\n        rhs.push_back(d);\n\n        label.push_back(1);\n        label.push_back(-1);\n        label.push_back(0);\n\n        samples.push_back(make_pair(lhs,rhs));\n        labels.push_back(label);\n\n\n\n        lhs.clear();\n        rhs.clear();\n        label.clear();\n\n        lhs.push_back(d);\n        lhs.push_back(b);\n        lhs.push_back(c);\n\n        label.push_back(-1);\n        label.push_back(-1);\n        label.push_back(-1);\n\n        samples.push_back(make_pair(lhs,rhs));\n        labels.push_back(label);\n\n\n\n        lhs.clear();\n        rhs.clear();\n        label.clear();\n\n        samples.push_back(make_pair(lhs,rhs));\n        labels.push_back(label);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void make_data_force (\n        std::vector<sample_type>& samples,\n        std::vector<label_type>& labels\n    )\n    {\n        lhs_element a, b, c, d;\n        a = 1,0,0;\n        b = 0,1,0;\n        c = 0,0,1;\n        d = 0,1,1;\n\n        std::vector<lhs_element> lhs;\n        std::vector<rhs_element> rhs;\n        label_type label;\n\n        lhs.push_back(a);\n        lhs.push_back(b);\n        lhs.push_back(c);\n\n        rhs.push_back(b);\n        rhs.push_back(a);\n        rhs.push_back(c);\n\n        label.push_back(1);\n        label.push_back(0);\n        label.push_back(2);\n\n        samples.push_back(make_pair(lhs,rhs));\n        labels.push_back(label);\n\n\n\n\n        lhs.clear();\n        rhs.clear();\n        label.clear();\n\n        lhs.push_back(a);\n        lhs.push_back(b);\n        lhs.push_back(c);\n\n        rhs.push_back(c);\n        rhs.push_back(b);\n        rhs.push_back(a);\n        rhs.push_back(d);\n\n        label.push_back(2);\n        label.push_back(1);\n        label.push_back(0);\n\n        samples.push_back(make_pair(lhs,rhs));\n        labels.push_back(label);\n\n\n        lhs.clear();\n        rhs.clear();\n        label.clear();\n\n        lhs.push_back(a);\n        lhs.push_back(c);\n\n        rhs.push_back(c);\n        rhs.push_back(a);\n\n        label.push_back(1);\n        label.push_back(0);\n\n        samples.push_back(make_pair(lhs,rhs));\n        labels.push_back(label);\n\n\n\n\n\n        lhs.clear();\n        rhs.clear();\n        label.clear();\n\n        samples.push_back(make_pair(lhs,rhs));\n        labels.push_back(label);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename fe_type, typename F>\n    void test1(F make_data, bool force_assignment)\n    {\n        print_spinner();\n\n        std::vector<sample_type> samples;\n        std::vector<label_type> labels;\n\n        make_data(samples, labels);\n        make_data(samples, labels);\n        make_data(samples, labels);\n\n        randomize_samples(samples, labels);\n\n        structural_assignment_trainer<fe_type> trainer;\n\n        DLIB_TEST(trainer.forces_assignment() == false);\n        DLIB_TEST(trainer.get_c() == 100);\n        DLIB_TEST(trainer.get_num_threads() == 2);\n        DLIB_TEST(trainer.get_max_cache_size() == 5);\n\n\n        trainer.set_forces_assignment(force_assignment);\n        trainer.set_num_threads(3);\n        trainer.set_c(50);\n\n        DLIB_TEST(trainer.get_c() == 50);\n        DLIB_TEST(trainer.get_num_threads() == 3);\n        DLIB_TEST(trainer.forces_assignment() == force_assignment);\n\n        assignment_function<fe_type> ass = trainer.train(samples, labels);\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            std::vector<long> out = ass(samples[i]);\n            dlog << LINFO << \"true labels: \" << trans(mat(labels[i]));\n            dlog << LINFO << \"pred labels: \" << trans(mat(out));\n            DLIB_TEST(trans(mat(labels[i])) == trans(mat(out)));\n        }\n\n        double accuracy;\n\n        dlog << LINFO << \"samples.size(): \"<< samples.size();\n        accuracy = test_assignment_function(ass, samples, labels);\n        dlog << LINFO << \"accuracy: \"<< accuracy;\n        DLIB_TEST(accuracy == 1);\n\n        accuracy = cross_validate_assignment_trainer(trainer, samples, labels, 3);\n        dlog << LINFO << \"cv accuracy: \"<< accuracy;\n        DLIB_TEST(accuracy == 1);\n\n        ostringstream sout;\n        serialize(ass, sout);\n        istringstream sin(sout.str());\n        assignment_function<fe_type> ass2;\n        deserialize(ass2, sin);\n\n        DLIB_TEST(ass2.forces_assignment() == ass.forces_assignment());\n        DLIB_TEST(length(ass2.get_weights() - ass.get_weights()) < 1e-10);\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            std::vector<long> out = ass2(samples[i]);\n            dlog << LINFO << \"true labels: \" << trans(mat(labels[i]));\n            dlog << LINFO << \"pred labels: \" << trans(mat(out));\n            DLIB_TEST(trans(mat(labels[i])) == trans(mat(out)));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_assignment_learning : public tester\n    {\n    public:\n        test_assignment_learning (\n        ) :\n            tester (\"test_assignment_learning\",\n                    \"Runs tests on the assignment learning code.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test1<feature_extractor_dense>(make_data, false);\n            test1<feature_extractor_sparse>(make_data, false);\n\n            test1<feature_extractor_dense>(make_data_force, false);\n            test1<feature_extractor_sparse>(make_data_force, false);\n            test1<feature_extractor_dense>(make_data_force, true);\n            test1<feature_extractor_sparse>(make_data_force, true);\n        }\n    } a;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/base64.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/base64.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.base64\");\n\n    template <\n        typename base64\n        >\n    void base64_kernel_test (\n    )\n    /*!\n        requires\n            - base64 is an implementation of base64/base64_kernel_abstract.h \n        ensures\n            - runs tests on base64 for compliance with the specs\n    !*/\n    {        \n\n        const unsigned int seed = static_cast<unsigned int>(time(0));\n        try \n        {\n \n            srand(seed);\n\n            base64 test;\n\n            const string wiki_normal = \"\\\nMan is distinguished, not only by his reason, but by this singular passion from other \\\nanimals, which is a lust of the mind, that by a perseverance of delight in the continued \\\nand indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.\";\n\n            const string wiki_encoded = \"\\\nTWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0\\n\\\naGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1\\n\\\nc3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0\\n\\\naGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdl\\n\\\nLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=\";\n\n\n\n            string str;\n\n            istringstream sin;\n            ostringstream sout;\n\n            sin.str(wiki_encoded);\n            test.decode(sin,sout);\n            DLIB_TEST_MSG(sout.str() == wiki_normal,\n                   \"sout.str(): \" << sout.str() <<\n                   \"\\nwiki_normal: \" << wiki_normal);\n\n\n            sout.str(\"\");\n            sin.str(wiki_normal);\n            sin.clear();\n            test.encode(sin,sout);\n\n            string a(sout.str()), b(wiki_encoded);\n            // we want to strip all the whitespace from a and b now\n            sin.str(a);\n            a.clear();\n            sin >> str;\n            while (sin)\n            {\n                a += str;\n                sin >> str;\n            }\n\n            sin.clear();\n            sin.str(b);\n            b.clear();\n            sin >> str;\n            while (sin)\n            {\n                b += str;\n                sin >> str;\n            }\n            sin.clear();\n\n            DLIB_TEST_MSG(a == b,\n                   \"a: \\n\" << a <<\n                   \"\\n\\nb: \\n\" << b);\n\n\n\n            sin.clear();\n            sin.str(\"\");\n            sout.str(\"\");\n            test.encode(sin,sout);\n            sin.str(sout.str());\n            sout.str(\"\");\n            test.decode(sin,sout);\n            DLIB_TEST(sout.str() == \"\");\n\n            sin.clear();\n            sin.str(\"a\");\n            sout.str(\"\");\n            test.encode(sin,sout);\n            sin.str(sout.str());\n            sout.str(\"\");\n            test.decode(sin,sout);\n            DLIB_TEST(sout.str() == \"a\");\n\n            sin.clear();\n            sin.str(\"da\");\n            sout.str(\"\");\n            test.encode(sin,sout);\n            sin.str(sout.str());\n            sout.str(\"\");\n            test.decode(sin,sout);\n            DLIB_TEST(sout.str() == \"da\");\n\n            sin.clear();\n            sin.str(\"dav\");\n            sout.str(\"\");\n            test.encode(sin,sout);\n            sin.str(sout.str());\n            sout.str(\"\");\n            test.decode(sin,sout);\n            DLIB_TEST(sout.str() == \"dav\");\n\n            sin.clear();\n            sin.str(\"davi\");\n            sout.str(\"\");\n            test.encode(sin,sout);\n            sin.str(sout.str());\n            sout.str(\"\");\n            test.decode(sin,sout);\n            DLIB_TEST(sout.str() == \"davi\");\n\n\n            for (int i = 0; i < 1000; ++i)\n            {\n                str.clear();\n                sin.clear();\n                sout.str(\"\");\n                sin.str(\"\");\n                \n                // fill str with random garbage\n                const int size = rand()%2000;\n                for (int j = 0; j < size; ++j)\n                {\n                    unsigned char ch = rand()&0xFF;\n                    str += ch;\n                }\n\n                sin.str(str);\n                test.encode(sin,sout);\n                sin.clear();\n                sin.str(sout.str());\n                sout.str(\"\");\n                test.decode(sin,sout);\n\n                DLIB_TEST(str == sout.str());\n\n\n            }\n\n\n\n\n        }\n        catch (typename base64::decode_error& e)\n        {\n            DLIB_TEST_MSG(false, \n                \"decode_error thrown when it shouldn't have been (\" << seed << \"):\\n \" \n                 << e.info);\n        }\n    }\n\n\n    class base64_tester : public tester\n    {\n    public:\n        base64_tester (\n        ) :\n            tester (\"test_base64\",\n                    \"Runs tests on the base64 component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            base64_kernel_test<base64>();\n        }\n    } a;\n\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/bayes_nets.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include \"dlib/graph_utils.h\"\n#include \"dlib/graph.h\"\n#include \"dlib/directed_graph.h\"\n#include \"dlib/bayes_utils.h\"\n#include \"dlib/set.h\"\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.bayes_nets\");\n    enum nodes\n    {\n        A, T, S, L, O, B, D, X\n    };\n\n    template <typename gtype>\n    void setup_simple_network (\n        gtype& bn\n    )\n    {\n        /*\n               A\n              / \\\n             T   S\n        */\n\n        using namespace bayes_node_utils;\n\n        bn.set_number_of_nodes(3);\n        bn.add_edge(A, T);\n        bn.add_edge(A, S);\n\n\n        set_node_num_values(bn, A, 2);\n        set_node_num_values(bn, T, 2);\n        set_node_num_values(bn, S, 2);\n\n        assignment parents;\n\n        // set probabilities for node A\n        set_node_probability(bn, A, 1, parents, 0.1);\n        set_node_probability(bn, A, 0, parents, 1-0.1);\n\n        // set probabilities for node T\n        parents.add(A, 1);\n        set_node_probability(bn, T, 1, parents, 0.5);\n        set_node_probability(bn, T, 0, parents, 1-0.5);\n        parents[A] = 0;\n        set_node_probability(bn, T, 1, parents, 0.5);\n        set_node_probability(bn, T, 0, parents, 1-0.5);\n\n        // set probabilities for node S\n        parents[A] = 1;\n        set_node_probability(bn, S, 1, parents, 0.5);\n        set_node_probability(bn, S, 0, parents, 1-0.5);\n        parents[A] = 0;\n        set_node_probability(bn, S, 1, parents, 0.5);\n        set_node_probability(bn, S, 0, parents, 1-0.5);\n\n\n        // test the serialization code here by pushing this network though it\n        ostringstream sout;\n        serialize(bn, sout);\n        bn.clear();\n        DLIB_TEST(bn.number_of_nodes() == 0);\n        istringstream sin(sout.str());\n        deserialize(bn, sin);\n        DLIB_TEST(bn.number_of_nodes() == 3);\n    }\n\n\n    template <typename gtype>\n    void setup_dyspnea_network (\n        gtype& bn,\n        bool deterministic_o_node = true\n    )\n    {\n        /*\n            This is the example network used by David Zaret in his\n            reasoning under uncertainty class at Johns Hopkins\n        */\n\n        using namespace bayes_node_utils;\n\n        bn.set_number_of_nodes(8);\n        bn.add_edge(A, T);\n        bn.add_edge(T, O);\n\n        bn.add_edge(O, D);\n        bn.add_edge(O, X);\n\n        bn.add_edge(S, B);\n        bn.add_edge(S, L);\n\n        bn.add_edge(L, O);\n        bn.add_edge(B, D);\n\n\n        set_node_num_values(bn, A, 2);\n        set_node_num_values(bn, T, 2);\n        set_node_num_values(bn, O, 2);\n        set_node_num_values(bn, X, 2);\n        set_node_num_values(bn, L, 2);\n        set_node_num_values(bn, S, 2);\n        set_node_num_values(bn, B, 2);\n        set_node_num_values(bn, D, 2);\n\n        assignment parents;\n\n        // set probabilities for node A\n        set_node_probability(bn, A, 1, parents, 0.01);\n        set_node_probability(bn, A, 0, parents, 1-0.01);\n\n        // set probabilities for node S\n        set_node_probability(bn, S, 1, parents, 0.5);\n        set_node_probability(bn, S, 0, parents, 1-0.5);\n\n        // set probabilities for node T\n        parents.add(A, 1);\n        set_node_probability(bn, T, 1, parents, 0.05);\n        set_node_probability(bn, T, 0, parents, 1-0.05);\n        parents[A] = 0;\n        set_node_probability(bn, T, 1, parents, 0.01);\n        set_node_probability(bn, T, 0, parents, 1-0.01);\n\n        // set probabilities for node L\n        parents.clear();\n        parents.add(S,1);\n        set_node_probability(bn, L, 1, parents, 0.1);\n        set_node_probability(bn, L, 0, parents, 1-0.1);\n        parents[S] = 0;\n        set_node_probability(bn, L, 1, parents, 0.01);\n        set_node_probability(bn, L, 0, parents, 1-0.01);\n\n\n        // set probabilities for node B\n        parents[S] = 1;\n        set_node_probability(bn, B, 1, parents, 0.6);\n        set_node_probability(bn, B, 0, parents, 1-0.6);\n        parents[S] = 0;\n        set_node_probability(bn, B, 1, parents, 0.3);\n        set_node_probability(bn, B, 0, parents, 1-0.3);\n\n\n        // set probabilities for node O\n        double v;\n        if (deterministic_o_node)\n            v = 1;\n        else\n            v = 0.99;\n\n        parents.clear();\n        parents.add(T,1);\n        parents.add(L,1);\n        set_node_probability(bn, O, 1, parents, v);\n        set_node_probability(bn, O, 0, parents, 1-v);\n        parents[T] = 0; parents[L] = 1;\n        set_node_probability(bn, O, 1, parents, v);\n        set_node_probability(bn, O, 0, parents, 1-v);\n        parents[T] = 1; parents[L] = 0;\n        set_node_probability(bn, O, 1, parents, v);\n        set_node_probability(bn, O, 0, parents, 1-v);\n        parents[T] = 0; parents[L] = 0;\n        set_node_probability(bn, O, 1, parents, 1-v);\n        set_node_probability(bn, O, 0, parents, v);\n\n\n        // set probabilities for node D\n        parents.clear();\n        parents.add(O,1);\n        parents.add(B,1);\n        set_node_probability(bn, D, 1, parents, 0.9);\n        set_node_probability(bn, D, 0, parents, 1-0.9);\n        parents[O] = 1; parents[B] = 0;\n        set_node_probability(bn, D, 1, parents, 0.7);\n        set_node_probability(bn, D, 0, parents, 1-0.7);\n        parents[O] = 0; parents[B] = 1;\n        set_node_probability(bn, D, 1, parents, 0.8);\n        set_node_probability(bn, D, 0, parents, 1-0.8);\n        parents[O] = 0; parents[B] = 0;\n        set_node_probability(bn, D, 1, parents, 0.1);\n        set_node_probability(bn, D, 0, parents, 1-0.1);\n\n\n        // set probabilities for node X\n        parents.clear();\n        parents.add(O,1);\n        set_node_probability(bn, X, 1, parents, 0.98);\n        set_node_probability(bn, X, 0, parents, 1-0.98);\n        parents[O] = 0;\n        set_node_probability(bn, X, 1, parents, 0.05);\n        set_node_probability(bn, X, 0, parents, 1-0.05);\n\n\n        // test the serialization code here by pushing this network though it\n        ostringstream sout;\n        serialize(bn, sout);\n        bn.clear();\n        DLIB_TEST(bn.number_of_nodes() == 0);\n        istringstream sin(sout.str());\n        deserialize(bn, sin);\n        DLIB_TEST(bn.number_of_nodes() == 8);\n    }\n\n\n    void bayes_nets_test (\n    )\n        /*!\n            ensures\n                - runs tests on the bayesian network objects and functions for compliance with the specs \n        !*/\n    {        \n\n        print_spinner();\n\n        directed_graph<bayes_node>::kernel_1a_c bn;\n        setup_dyspnea_network(bn);\n\n        using namespace bayes_node_utils;\n\n\n        graph<dlib::set<unsigned long>::compare_1b_c, dlib::set<unsigned long>::compare_1b_c>::kernel_1a_c join_tree;\n\n        create_moral_graph(bn, join_tree);\n        create_join_tree(join_tree, join_tree);\n\n        bayesian_network_join_tree solution(bn, join_tree);\n\n        matrix<double,1,2> dist;\n\n        dist = solution.probability(A);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.01 ) < 1e-5);\n\n        dist = solution.probability(T);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.0104) < 1e-5);\n\n        dist = solution.probability(O);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.064828) < 1e-5);\n\n        dist = solution.probability(X);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.11029004) < 1e-5);\n\n        dist = solution.probability(L);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.055) < 1e-5);\n\n        dist = solution.probability(S);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.5) < 1e-5);\n\n        dist = solution.probability(B);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.4499999) < 1e-5);\n\n        dist = solution.probability(D);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.4359706 ) < 1e-5);\n\n        // now lets modify the probabilities of the bayesian network by making O \n        // not a deterministic node anymore but otherwise leave the network alone\n        setup_dyspnea_network(bn, false);\n\n        set_node_value(bn, A, 1);\n        set_node_value(bn, X, 1);\n        set_node_value(bn, S, 1);\n        // lets also make some of these nodes evidence nodes\n        set_node_as_evidence(bn, A);\n        set_node_as_evidence(bn, X);\n        set_node_as_evidence(bn, S);\n\n        // reload the solution now that we have changed the probabilities of node O\n        bayesian_network_join_tree(bn, join_tree).swap(solution);\n        DLIB_TEST(solution.number_of_nodes() == bn.number_of_nodes());\n\n        dist = solution.probability(A);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 1.0 ) < 1e-5);\n\n        dist = solution.probability(T);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.253508694039 ) < 1e-5);\n\n        dist = solution.probability(O);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.77856184024 ) < 1e-5);\n\n        dist = solution.probability(X);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 1.0 ) < 1e-5);\n\n        dist = solution.probability(L);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.5070173880 ) < 1e-5);\n\n        dist = solution.probability(S);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 1.0 ) < 1e-5);\n\n        dist = solution.probability(B);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.6  ) < 1e-5);\n\n        dist = solution.probability(D);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.7535685520 ) < 1e-5);\n\n\n        // now lets test the bayesian_network_gibbs_sampler \n        set_node_value(bn, A, 1);\n        set_node_value(bn, T, 1);\n        set_node_value(bn, O, 1);\n        set_node_value(bn, X, 1);\n        set_node_value(bn, S, 1);\n        set_node_value(bn, L, 1);\n        set_node_value(bn, B, 1);\n        set_node_value(bn, D, 1);\n\n        bayesian_network_gibbs_sampler sampler;\n        matrix<double,1,8> counts;\n        set_all_elements(counts, 0);\n        const unsigned long rounds = 200000;\n        for (unsigned long i = 0; i < rounds; ++i)\n        {\n            sampler.sample_graph(bn);\n\n            for (long c = 0; c < counts.nc(); ++c)\n            {\n                if (node_value(bn, c) == 1)\n                    counts(c) += 1;\n            }\n\n            if ((i&0x3FF) == 0)\n            {\n                print_spinner();\n            }\n        }\n\n        counts /= rounds;\n\n        DLIB_TEST(abs(counts(A) - 1.0 ) < 1e-2);\n        DLIB_TEST(abs(counts(T) - 0.253508694039 ) < 1e-2);\n        DLIB_TEST_MSG(abs(counts(O) - 0.77856184024 ) < 1e-2,abs(counts(O) - 0.77856184024 ) );\n        DLIB_TEST(abs(counts(X) - 1.0 ) < 1e-2);\n        DLIB_TEST(abs(counts(L) - 0.5070173880 ) < 1e-2);\n        DLIB_TEST(abs(counts(S) - 1.0 ) < 1e-2);\n        DLIB_TEST(abs(counts(B) - 0.6  ) < 1e-2);\n        DLIB_TEST(abs(counts(D) - 0.7535685520 ) < 1e-2);\n\n\n        setup_simple_network(bn);\n        create_moral_graph(bn, join_tree);\n        create_join_tree(join_tree, join_tree);\n        bayesian_network_join_tree(bn, join_tree).swap(solution);\n        DLIB_TEST(solution.number_of_nodes() == bn.number_of_nodes());\n\n        dist = solution.probability(A);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.1 ) < 1e-5);\n\n        dist = solution.probability(T);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.5 ) < 1e-5);\n\n        dist = solution.probability(S);\n        DLIB_TEST(abs(sum(dist) - 1.0) < 1e-5);\n        DLIB_TEST(abs(dist(1) - 0.5 ) < 1e-5);\n\n\n    }\n\n\n\n\n    class bayes_nets_tester : public tester\n    {\n    public:\n        bayes_nets_tester (\n        ) :\n            tester (\"test_bayes_nets\",\n                    \"Runs tests on the bayes_nets objects and functions.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            bayes_nets_test();\n        }\n    } a;\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/bigint.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n\n#include <dlib/bigint.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.bigint\");\n\n    namespace bigint_kernel_test_helpers \n    {\n        template <\n            typename bint\n            >\n        bint short_fact (unsigned short value)\n        /*!\n            ensures\n                - returns the factorial of value\n        !*/\n        {\n            using namespace relational_operators;\n\n            bint a = 1;\n            for (unsigned short i = 2; i <= value; ++i)\n                a *= i;\n\n            return a;\n        }\n\n        template <\n            typename bint\n            >\n        bint short_fact_squared (unsigned short value)\n        /*!\n            ensures\n                - returns the square of the factorial of value\n        !*/\n        {\n            using namespace relational_operators;\n\n            bint a = 1;\n            for (unsigned short i = 2; i <= value; ++i)\n            {\n                a *= i;\n                a *= i;\n            }\n\n            return a;\n        }\n\n\n        template <\n            typename bint\n            >\n        bint big_fact (unsigned short value)\n        /*!\n            ensures\n                - returns the factorial of value\n        !*/\n        {\n            using namespace relational_operators;\n\n            bint a = 1;\n            int k = 0; \n            for (bint i = 2; i <= value; ++i)\n            {\n                ++k;\n                if (k%10 == 0)\n                    print_spinner();\n                a *= i;\n            }\n\n            return a;\n        }        \n    }\n\n    template <\n        typename bint\n        >\n    void bigint_kernel_test (\n    )\n    /*!\n        requires\n            - bint is an implementation of bigint/bigint_kernel_abstract.h\n        ensures\n            - runs tests on bint for compliance with the specs \n    !*/\n    {        \n        using namespace bigint_kernel_test_helpers;\n        using namespace relational_operators;\n        istringstream sin;\n        ostringstream sout;\n\n        bint i = 0;\n        bint a(5), b, c(0);\n\n        DLIB_TEST(5 - a == 0);\n        DLIB_TEST(a - 5 == 0);\n\n        DLIB_TEST(0 - c == 0);\n        DLIB_TEST(c - 0 == 0);\n\n        DLIB_TEST(0 + c == 0);\n        DLIB_TEST(c + 0 == 0);\n\n        DLIB_TEST(0 + a == 5);\n        DLIB_TEST(a + 0 == 5);\n\n        DLIB_TEST(0 - b == 0);\n        DLIB_TEST(b - 0 == 0);\n\n        DLIB_TEST(0 + b == 0);\n        DLIB_TEST(b + 0 == 0);\n\n        DLIB_TEST(i == 0);\n        DLIB_TEST(a == 5);\n        DLIB_TEST(b == 0);\n        DLIB_TEST(c == 0);\n\n\n\n        a -= 5;\n        DLIB_TEST(a == 0);\n\n\n\n        for (int k = 0; k < 100; ++k)\n        {\n            // compute the factorial of k using the O(n) multiplication algorithm\n            a = short_fact<bint>(k);\n            // compute the factorial of k using the full blown big int \n            // multiplication algorithm.\n            b = big_fact<bint>(k);\n            // compute the square of the factorial of k using the full blown\n            // big int multiplication algorithm.\n            c = a*b;\n            // make sure a and b ended up being the same number\n            DLIB_TEST_MSG(a == b,\n                         \"k: \" << k << \"\\n\"\n                         \"short_fact: \" << a << \"\\n\"\n                         \"big_fact: \" << b \n            );\n            // make sure c really is the square of the factorial of k\n            DLIB_TEST_MSG(short_fact_squared<bint>(k) == c,\"k: \" << k);\n            print_spinner();\n        }\n\n        // do the same thing as the last loop but do it with way bigger numbers\n        for (int k = 1000; k < 10000; k += 2000)\n        {\n            bint a = short_fact<bint>(k);\n            bint b = big_fact<bint>(k);\n            bint c = a*b;\n            DLIB_TEST_MSG(a == b,\n                         \"k: \" << k << \"\\n\"\n                         \"short_fact: \" << a << \"\\n\"\n                         \"big_fact: \" << b \n            );\n            DLIB_TEST_MSG(short_fact_squared<bint>(k) == c,\"k: \" << k);\n            print_spinner();\n        }\n\n\n\n        // test the << and >> operators a little\n        a = big_fact<bint>(20);\n        sout << a;\n        DLIB_TEST_MSG( sout.str() == \"2432902008176640000\",\"was: \" << a);\n\n        sin.str(\"684626312793279327952039475203945\");\n        sin >> a;\n        sout.str(\"\");\n        sout << a;\n        DLIB_TEST(sout.str() == \"684626312793279327952039475203945\");\n\n        print_spinner();\n\n        DLIB_TEST(a > 0);\n\n\n        // make sure that when you try to read something that isn't a number\n        // into a bigint you get an error\n        DLIB_TEST(sin.fail() == false);\n        sin.str(\"the cat ate some cheese\");\n        sin >> a;\n        DLIB_TEST(sin.fail() == true);\n        sin.clear();\n        sin.str(\"\");\n\n\n\n        sin.str(\"3628913\");\n        sin >> i;\n        DLIB_TEST(short_fact<bint>(10) + short_fact<bint>(5) - 7 == i);\n\n        sin.str(\"2432902008173011193\");\n        sin >> i;\n        DLIB_TEST(short_fact<bint>(20) - short_fact<bint>(10) - 7 == i);\n\n        // test the serialization stuff\n        sout.str(\"\");\n        serialize(i,sout);\n        i = 0;\n        sin.str(sout.str());\n        deserialize(i,sin);\n\n        DLIB_TEST(short_fact<bint>(20) - short_fact<bint>(10) - 7 == i);\n\n\n\n\n        print_spinner();\n\n\n\n\n        sin.str(\"100000\");\n        sin >> b;\n        a = b;\n        ++b;\n        DLIB_TEST_MSG ( a + 1 == b,\"a==\" << a << endl << \"b==\" << b << endl);\n\n\n\n\n\n        // compute some stuff and see if you get the right value\n        a = 0;\n        b = 0;\n        sin.str(\"1000000\");\n        sin >> b;\n        int mel = 0;\n        for (i = a; i <= b; ++i)\n        {\n            // switch it up on em\n            if (i%2 == 0)\n                a = a + i;\n            else\n                a += i;          \n            ++mel;\n            if ((mel&0xFFF) == 0)\n                print_spinner();\n        }\n        DLIB_TEST_MSG(a == b*(b+1)/2, \"a==\" << a << endl << \"b*(b+1)/2==\" << b*(b+1)/2 << endl);\n\n\n\n\n\n\n        print_spinner();\n\n\n        // compute some stuff and see if you get the right value\n        // this time going the other way using operator--\n        a = 0;\n        b = 0;\n        sin.str(\"100000\");\n        sin >> b;\n        i = b;\n        DLIB_TEST(i == b);\n        DLIB_TEST_MSG(i > 0,\"i==\" << i);\n        mel = 0;\n        for (i = b; i > 0; --i)\n        {\n            // switch it up on em\n            if (i%2 == 0)\n                a = a + i;\n            else\n                a += i;  \n            ++mel;\n            if ((mel&0xFF) == 0)\n                print_spinner();\n        }\n        DLIB_TEST_MSG(a == b*(b+1)/2, \"a==\" << a << endl << \"b*(b+1)/2==\" << b*(b+1)/2 << endl);\n\n\n\n\n\n\n\n\n\n\n\n        DLIB_TEST(short_fact<bint>(10)/short_fact<bint>(5) == 30240);\n        DLIB_TEST(short_fact<bint>(10)/(short_fact<bint>(5)+1) == 29990);\n\n        sin.str(\"221172909834240000\");\n        sin >> a;\n        DLIB_TEST(short_fact<bint>(20)/(short_fact<bint>(5)+1) == a/11);\n\n        sin.str(\"670442388044\");\n        sin >> b;\n        DLIB_TEST(short_fact<bint>(20)/(short_fact<bint>(10)+1) == b);\n\n        print_spinner();\n\n        sin.str(\"1860479\");\n        sin >> i;\n        DLIB_TEST_MSG(short_fact<bint>(20)/(short_fact<bint>(15)+1) == i,short_fact<bint>(20)/(short_fact<bint>(15)+1));\n\n        // test the serialization stuff\n        sout.str(\"\");\n        serialize(i,sout);\n        i = 0;\n        sin.str(sout.str());\n        deserialize(i,sin);\n\n        DLIB_TEST_MSG(short_fact<bint>(20)/(short_fact<bint>(15)+1) == i,short_fact<bint>(20)/(short_fact<bint>(15)+1));\n\n\n        print_spinner();\n\n        // test the serialization stuff\n        sout.str(\"\");\n        i = 0;\n        serialize(i,sout);\n        i = 1234;\n        sin.str(sout.str());\n        deserialize(i,sin);\n        DLIB_TEST(i == 0);\n\n\n        DLIB_TEST(short_fact<bint>(10000)/short_fact<bint>(9999) == 10000);\n\n\n        DLIB_TEST(bint(5)%bint(1) == 0);\n        DLIB_TEST(bint(5)%bint(6) == 5);\n        DLIB_TEST(bint(25)%bint(6) == 1);\n        print_spinner();\n        DLIB_TEST(bint(354)%bint(123) == 108);\n        DLIB_TEST(bint(20)%(bint(10)) == 0);\n        DLIB_TEST(bint(20)%(bint(10)+1) == 9);\n\n        DLIB_TEST(bint(20)%(bint(15)+1) == 4);\n\n\n        DLIB_TEST(short_fact<bint>(10)%(short_fact<bint>(5)+2) == 32);\n\n        sin.str(\"2908082\");\n        sin >> i;\n        DLIB_TEST(short_fact<bint>(15)%(short_fact<bint>(10)+2) == i);\n\n\n\n\n\n\n        // same as some of the above stuff but using big_fact\n\n        DLIB_TEST(big_fact<bint>(10)%(big_fact<bint>(5)+2) == 32);\n\n        sin.str(\"2908082\");\n        sin >> i;\n        DLIB_TEST(big_fact<bint>(15)%(big_fact<bint>(10)+2) == i);\n\n\n        print_spinner();\n\n\n        DLIB_TEST(big_fact<bint>(10)/big_fact<bint>(5) == 30240);\n        DLIB_TEST(big_fact<bint>(10)/(big_fact<bint>(5)+1) == 29990);\n\n        sin.str(\"221172909834240000\");\n        sin >> a;\n        DLIB_TEST(big_fact<bint>(20)/(big_fact<bint>(5)+1) == a/11);\n\n\n        sin.str(\"670442388044\");\n        sin >> b;\n        DLIB_TEST(big_fact<bint>(20)/(big_fact<bint>(10)+1) == b);\n\n\n        sin.str(\"1860479\");\n        sin >> i;\n        DLIB_TEST_MSG(big_fact<bint>(20)/(big_fact<bint>(15)+1) == i,big_fact<bint>(20)/(big_fact<bint>(15)+1));\n\n        DLIB_TEST(big_fact<bint>(100)/big_fact<bint>(99) == 100);\n\n\n\n\n        sout.str(\"\");\n        sout << \"148571596448176149730952273362082573788556996128468876694221686370498539309\";\n        sout << \"4065876545992131370884059645617234469978112000000000000000000000\";\n        sin.str(sout.str());\n        sin >> a;\n\n        sout.str(\"\");\n        sout << \"933262154439441526816992388562667004907159682643816214685929638952175999932\";\n        sout << \"299156089414639761565182862536979208272237582511852109168640000000000000000\";\n        sout << \"000000\";\n        sin.str(sout.str());\n        sin >> b;\n\n\n        sout.str(\"\");\n        sout << \"138656248189732152054159609718432247180282092567575172939636909224427929240\";\n        sout << \"834642263988043338170905744175653189424779336521852536242160190545537133916\";\n        sout << \"649622615351174407746524657461692702500613722228638559932561661493048332720\";\n        sout << \"6050692647868232055316807680000000000000000000000000000000000000000000\";\n        sin.str(sout.str());\n        sin >> c;\n\n        DLIB_TEST_MSG(a*b == c,\n                     \"a*b: \" << a*b <<\n                     \"\\nc:   \" << c);\n\n\n        print_spinner();\n\n        i = 0;\n        mel = 0;\n        unsigned long j;\n        for (j = 0; i < bint(100000); ++j)\n        {\n            DLIB_TEST(i++ == bint(j));\n            ++mel;\n            if((mel&0xFF) == 0)\n                print_spinner();\n        }\n        DLIB_TEST(j == 100000);\n\n        i = 1234;\n\n        DLIB_TEST(i == 1234);\n        DLIB_TEST(i < 2345 );\n        DLIB_TEST(i > 0    );\n        DLIB_TEST(i > 123  );\n\n        DLIB_TEST(i != 1334);\n        DLIB_TEST(i <= 2345);\n        DLIB_TEST(i >= 0   );\n        DLIB_TEST(i >= 123 );\n        DLIB_TEST(i >= 1234);\n        DLIB_TEST(i <= 1234);\n\n\n        DLIB_TEST(1234 == i);\n        DLIB_TEST(2345 > i);\n        DLIB_TEST(0    < i);\n        DLIB_TEST(123  < i);\n\n        DLIB_TEST(1334 != i);\n        DLIB_TEST(2345 >= i);\n        DLIB_TEST(0    <= i);\n        DLIB_TEST(123  <= i);\n        DLIB_TEST(1234 <= i);\n        DLIB_TEST(1234 >= i);\n\n\n        a = big_fact<bint>(200);\n        b = big_fact<bint>(100);\n\n        DLIB_TEST(a > b);\n        DLIB_TEST(a != b);\n        DLIB_TEST(b < a);            \n        DLIB_TEST(b != a);\n        DLIB_TEST(b <= a);\n        DLIB_TEST(a >= b);\n\n\n\n        a = 10000;\n        a = a*a*a*a; a = a*a; a = a*a;\n        b = 2;\n        DLIB_TEST((a/b)*b == a);\n\n        a = 10000*5;\n        a = a*a*a*a; a = a*a; a = a*a;\n        b = 5;\n        DLIB_TEST((a/b)*b == a);\n    }\n\n\n\n\n    class bigint_tester : public tester\n    {\n    public:\n        bigint_tester (\n        ) :\n            tester (\"test_bigint\",\n                    \"Runs tests on the bigint component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            bigint_kernel_test<bigint::kernel_1a>();\n            print_spinner();\n            \n            dlog << LINFO << \"testing kernel_1a_c\";\n            bigint_kernel_test<bigint::kernel_1a_c>();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_2a\";\n            bigint_kernel_test<bigint::kernel_2a>();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_2a_c\";\n            bigint_kernel_test<bigint::kernel_2a_c>();\n            print_spinner();\n\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/binary_search_tree.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_H_\n#define DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_H_\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/memory_manager_global.h>\n#include <dlib/memory_manager_stateless.h>\n#include <dlib/binary_search_tree.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.binary_search_tree\");\n\n    template <\n        typename bst\n        >\n    void binary_search_tree_kernel_test (\n    )\n    /*!\n        requires\n            - bst is an implementation of \n              binary_search_tree/binary_search_tree_kernel_abstract.h is instantiated \n              to map int to int\n        ensures\n            - runs tests on bst for compliance with the specs \n    !*/\n    {        \n\n        bst test, test2;\n\n        srand(static_cast<unsigned int>(time(0)));\n\n\n        DLIB_TEST(test.count(3) == 0);\n\n        enumerable<map_pair<int,int> >& e = test;\n        DLIB_TEST(e.at_start() == true);\n\n        DLIB_TEST(test.count(3) == 0);\n\n        for (int i = 0; i < 4; ++i)\n        {\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.count(3) == 0);\n            DLIB_TEST(test.height() == 0);\n            DLIB_TEST(test[5] == 0);\n            DLIB_TEST(test[0] == 0);\n            DLIB_TEST(test.at_start());\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.count(3) == 0);\n\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.count(3) == 0);\n\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n            test.clear();\n            test.position_enumerator(5);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            test.position_enumerator(5);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            test.position_enumerator(9);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            test.clear();\n            test.position_enumerator(5);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            test.position_enumerator(5);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            test.position_enumerator(9);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            test.clear();\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n            DLIB_TEST(test.count(3) == 0);\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.height() == 0);\n            DLIB_TEST(test[5] == 0);\n            DLIB_TEST(test[0] == 0);\n            DLIB_TEST(const_cast<const bst&>(test)[5] == 0);\n            DLIB_TEST(const_cast<const bst&>(test)[0] == 0);\n            DLIB_TEST(test.at_start());\n            DLIB_TEST(test.current_element_valid() == false);\n\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n            DLIB_TEST(test.count(3) == 0);\n            test.reset();\n            DLIB_TEST(test.count(3) == 0);\n\n            DLIB_TEST(test.at_start());\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n\n\n\n\n            int a = 0, b = 0;\n\n            for (int i = 0; i < 10000; ++i)\n            {\n                a = ::rand()%1000;\n                int temp = a;\n                unsigned long count = test.count(a);\n                test.add(a,b);\n                DLIB_TEST(test.count(temp) == count+1);\n            }\n\n\n            {\n                unsigned long count = test.count(3);\n\n                a = 3; test.add(a,b); ++count;\n                DLIB_TEST(test.count(3) == count);\n                a = 3; test.add(a,b); ++count;\n                DLIB_TEST(test.count(3) == count);\n                a = 3; test.add(a,b); ++count;\n                DLIB_TEST(test.count(3) == count);\n                a = 3; test.add(a,b); ++count;\n                DLIB_TEST(test.count(3) == count);\n            }\n\n\n            test.clear();\n\n\n\n\n\n            for (int i = 0; i < 10000; ++i)\n            {\n                a = ::rand()&0x7FFF;\n                b = 0;\n                int temp = a;\n                unsigned long count = test.count(a);\n                test.add(a,b);\n                DLIB_TEST(test.count(temp) == count+1);\n            }\n\n            // serialize the state of test, then clear test, then\n            // load the state back into test.\n            ostringstream sout;\n            serialize(test,sout);\n            istringstream sin(sout.str());\n            test.clear();\n            deserialize(test,sin);\n\n            DLIB_TEST(test.size() == 10000);\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n            DLIB_TEST_MSG(test.height() > 13 && test.height() <= 26,\"this is somewhat of an implementation dependent \"\n                         << \"but really it should be in this range or the implementation is just crap\");\n\n            a = 0;\n            unsigned long count = 0;\n            while (test.move_next())\n            {\n                DLIB_TEST_MSG(a <= test.element().key(),\"the numers are out of order but they should be in order\");\n                a = test.element().key();\n                ++count;\n\n\n                DLIB_TEST(test.at_start() == false);\n                DLIB_TEST(test.current_element_valid() == true);\n            }\n\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n\n            DLIB_TEST(count == 10000);\n\n\n\n\n            DLIB_TEST_MSG(test.height() > 13 && test.height() <= 26,\"this is somewhat of an implementation dependent \"\n                         << \"but really it should be in this range or the implementation is just crap\");\n\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.size() == 10000);\n\n\n            swap(test,test2);\n\n\n            test2.reset();\n            count = 0;\n            a = 0;\n            while (test2.move_next())\n            {\n                DLIB_TEST_MSG(a <= test2.element().key(),\"the numers are out of order but they should be in order\");\n                a = test2.element().key();\n                ++count;\n\n\n                DLIB_TEST(test2.at_start() == false);\n                DLIB_TEST(test2.current_element_valid() == true);\n\n                if (count == 5000)\n                {\n                    break;\n                }\n            }\n\n            DLIB_TEST(test2.move_next() == true);\n            DLIB_TEST(test2.move_next() == true);\n            DLIB_TEST(test2.move_next() == true);\n\n\n            test2.reset();\n\n            count = 0;\n            a = 0;\n            while (test2.move_next())\n            {\n                DLIB_TEST_MSG(a <= test2.element().key(),\"the numers are out of order but they should be in order\");\n                a = test2.element().key();\n                ++count;\n\n\n                DLIB_TEST(test2.at_start() == false);\n                DLIB_TEST(test2.current_element_valid() == true);\n            }\n\n            DLIB_TEST(count == 10000);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.move_next() == false);\n\n\n\n\n\n\n\n\n            int last = 0;\n            asc_pair_remover<int,int,typename bst::compare_type>& asdf = test2;\n            DLIB_TEST(asdf.size() > 0);\n            while (asdf.size() > 0)\n            {\n                asdf.remove_any(a,b);\n                DLIB_TEST(last <= a);\n                last = a;\n                --count;\n                DLIB_TEST(asdf.size() == count);\n            }\n\n\n            DLIB_TEST(test2.size() == 0);\n            DLIB_TEST(test2.height() ==0);\n            DLIB_TEST(test2.at_start() == true);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.move_next() == false);\n\n\n\n\n            for (int i = 0; i < 10000; ++i)\n            {\n                a = i;\n                b = i;\n                test2.add(a,b);\n                DLIB_TEST(test2.size() == (unsigned int)(i +1));\n                DLIB_TEST(test2.count(i) == 1);\n            }\n\n            a = 0;\n            test2.position_enumerator(a);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.element().key() == a);\n            DLIB_TEST(test2.element().value() == a);\n            a = 0;\n            test2.position_enumerator(a);\n            DLIB_TEST(test2.element().key() == a);\n            DLIB_TEST(test2.element().value() == a);\n            a = 8;\n            test2.position_enumerator(a);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.element().key() == a);\n            DLIB_TEST(test2.element().value() == a);\n            a = 1;\n            test2.position_enumerator(a);\n            DLIB_TEST(test2.element().key() == a);\n            DLIB_TEST(test2.element().value() == a);\n            a = -29;\n            test2.position_enumerator(a);\n            DLIB_TEST(test2.element().key() == 0);\n            DLIB_TEST(test2.element().value() == 0);\n            a = 10000;\n            test2.position_enumerator(a);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n            a = -29;\n            test2.position_enumerator(a);\n            DLIB_TEST(test2.element().key() == 0);\n            DLIB_TEST(test2.element().value() == 0);\n            a = 8;\n            test2.position_enumerator(a);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.element().key() == a);\n            DLIB_TEST(test2.element().value() == a);\n            test2.reset();\n\n\n            DLIB_TEST_MSG(test2.height() > 13 && test2.height() <= 26,\"this is somewhat of an implementation dependent \"\n                         << \"but really it should be in this range or the implementation is just crap\");\n\n            DLIB_TEST(test2.at_start() == true);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.size() == 10000);\n\n\n            for (int i = 0; i < 10000; ++i)\n            {\n                DLIB_TEST(test2.move_next() == true);\n                DLIB_TEST(test2.element().key() == i);\n            }\n\n\n\n            DLIB_TEST_MSG(test2.height() > 13 && test2.height() <= 26,\"this is somewhat of an implementation dependent \"\n                         << \"but really it should be in this range or the implementation is just crap\");\n\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.current_element_valid() == true);\n            DLIB_TEST(test2.size() == 10000);\n\n\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n\n            a = 3;\n            test2.add(a,b);\n            DLIB_TEST(test2.count(3) == 2);\n\n\n            for (int i = 0; i < 10000; ++i)\n            {\n                test2.remove(i,a,b);\n                DLIB_TEST(i == a);\n            }\n            test2.remove(3,a,b);\n\n\n            DLIB_TEST(test2.size() == 0);\n            DLIB_TEST(test2.height() == 0);\n            DLIB_TEST(test2.at_start() == true);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n\n\n\n            test2.clear();\n\n\n            int m = 0;\n            for (int i = 0; i < 10000; ++i)\n            {\n                a = ::rand()&0x7FFF;\n                m = max(a,m);\n                test2.add(a,b);\n            }\n\n            DLIB_TEST(test2.at_start() == true);\n            DLIB_TEST(test2.move_next() == true);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.current_element_valid() == true);\n            DLIB_TEST(test2.move_next() == true);\n            DLIB_TEST(test2.current_element_valid() == true);\n            DLIB_TEST(test2.move_next() == true);\n            DLIB_TEST(test2.current_element_valid() == true);\n            DLIB_TEST(test2.move_next() == true);\n            DLIB_TEST(test2.current_element_valid() == true);\n            DLIB_TEST(test2.at_start() == false);\n\n            for (int i = 0; i < 10000; ++i)\n            {\n                a = ::rand()&0xFFFF;\n                test2.position_enumerator(a);\n                if (test2[a])\n                {\n                    DLIB_TEST(test2.element().key() == a);\n                }\n                else if (a <= m)\n                {\n                    DLIB_TEST(test2.element().key() > a);\n                }\n            }\n\n            test2.clear();\n\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == true);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == false);\n\n\n            DLIB_TEST(test2.size() == 0);\n            DLIB_TEST(test2.height() == 0);\n\n\n            for (int i = 0; i < 20000; ++i)\n            {\n                a = ::rand()&0x7FFF;\n                b = a;\n                test2.add(a,b);\n            }\n\n\n            DLIB_TEST(test2.size() == 20000);\n\n\n\n            // remove a bunch of elements randomly\n            int c;\n            for (int i = 0; i < 50000; ++i)\n            {\n                a = ::rand()&0x7FFF;\n                if (test2[a] != 0)\n                {\n                    test2.remove(a,b,c);\n                    DLIB_TEST(a == b);\n                }\n            }\n\n\n            // now add a bunch more\n            for (int i = 0; i < 10000; ++i)\n            {\n                a = ::rand()&0x7FFF;\n                b = a;\n                test2.add(a,b);\n            }\n\n\n            // now iterate over it all and then remove all elements\n            {\n                int* array = new int[test2.size()];\n                int* tmp = array;\n                DLIB_TEST(test2.at_start() == true);\n                while (test2.move_next())\n                {\n                    *tmp = test2.element().key();\n                    ++tmp;\n                }\n\n                DLIB_TEST(test2.at_start() == false);\n                DLIB_TEST(test2.current_element_valid() == false);\n                DLIB_TEST(test2.move_next() == false);\n\n                tmp = array;\n                for (int i = 0; i < 10000; ++i)\n                {\n                    DLIB_TEST(*test2[*tmp] == *tmp);\n                    DLIB_TEST(*test2[*tmp] == *tmp);\n                    DLIB_TEST(*test2[*tmp] == *tmp);\n                    DLIB_TEST(*const_cast<const bst&>(test2)[*tmp] == *tmp);\n                    ++tmp;\n                }\n\n                tmp = array;\n                while (test2.size() > 0)\n                {\n                    unsigned long count = test2.count(*tmp);\n                    test2.destroy(*tmp);\n                    DLIB_TEST(test2.count(*tmp)+1 == count);\n                    ++tmp;\n                }\n\n                DLIB_TEST(test2.at_start() == true);\n                DLIB_TEST(test2.current_element_valid() == false);\n                DLIB_TEST(test2.move_next() == false);\n                DLIB_TEST(test2.at_start() == false);\n                test.swap(test2);\n                test.reset();\n\n                delete [] array;\n            }\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.height() == 0);\n\n            for (unsigned long i = 1; i < 100; ++i)\n            {\n                a = 1234;\n                test.add(a,b);\n                DLIB_TEST(test.count(1234) == i);\n            }\n\n            test.clear();\n\n\n\n\n\n\n            for (int m = 0; m < 3; ++m)\n            {\n\n                test2.clear();\n\n                DLIB_TEST(test2.current_element_valid() == false);\n                DLIB_TEST(test2.at_start() == true);\n                DLIB_TEST(test2.move_next() == false);\n                DLIB_TEST(test2.at_start() == false);\n                DLIB_TEST(test2.current_element_valid() == false);\n                DLIB_TEST(test2.move_next() == false);\n                DLIB_TEST(test2.current_element_valid() == false);\n                DLIB_TEST(test2.move_next() == false);\n                DLIB_TEST(test2.current_element_valid() == false);\n                DLIB_TEST(test2.at_start() == false);\n\n\n                DLIB_TEST(test2.size() == 0);\n                DLIB_TEST(test2.height() == 0);\n\n\n                int counter = 0;\n                while (counter < 10000)\n                {\n                    a = ::rand()&0x7FFF;\n                    b = ::rand()&0x7FFF;\n                    if (test2[a] == 0)\n                    {\n                        test2.add(a,b);\n                        ++counter;\n                    }\n\n                }\n\n\n\n                DLIB_TEST(test2.size() == 10000);\n\n\n\n                // remove a bunch of elements randomly                \n                for (int i = 0; i < 20000; ++i)\n                {\n                    a = ::rand()&0x7FFF;\n                    if (test2[a] != 0)\n                    {\n                        test2.remove(a,b,c);\n                        DLIB_TEST(a == b);\n                    }\n                }\n\n\n                // now add a bunch more\n                for (int i = 0; i < 20000; ++i)\n                {\n                    a = ::rand()&0x7FFF;\n                    b = ::rand()&0x7FFF;\n                    if (test2[a] == 0)\n                        test2.add(a,b);\n                }\n\n\n                // now iterate over it all and then remove all elements\n                {\n                    int* array = new int[test2.size()];\n                    int* array_val = new int[test2.size()];\n                    int* tmp = array;\n                    int* tmp_val = array_val;\n                    DLIB_TEST(test2.at_start() == true);\n                    int count = 0;\n                    while (test2.move_next())\n                    {\n                        *tmp = test2.element().key();\n                        ++tmp;\n                        *tmp_val = test2.element().value();\n                        ++tmp_val;\n\n                        DLIB_TEST(*test2[*(tmp-1)] == *(tmp_val-1));\n                        ++count;\n                    }\n\n                    DLIB_TEST(count == (int)test2.size());\n                    DLIB_TEST(test2.at_start() == false);\n                    DLIB_TEST(test2.current_element_valid() == false);\n                    DLIB_TEST(test2.move_next() == false);\n\n                    tmp = array;\n                    tmp_val = array_val;\n                    for (unsigned long i = 0; i < test2.size(); ++i)\n                    {\n                        DLIB_TEST_MSG(*test2[*tmp] == *tmp_val,i);\n                        DLIB_TEST(*test2[*tmp] == *tmp_val);\n                        DLIB_TEST(*test2[*tmp] == *tmp_val);\n                        DLIB_TEST(*const_cast<const bst&>(test2)[*tmp] == *tmp_val);\n                        ++tmp;\n                        ++tmp_val;\n                    }\n\n                    //  out << \"\\nsize:   \" << test2.size() << endl;\n                    //  out << \"height: \" << test2.height() << endl;\n\n                    tmp = array;\n                    while (test2.size() > 0)\n                    {\n                        unsigned long count = test2.count(*tmp);\n                        test2.destroy(*tmp);\n                        DLIB_TEST(test2.count(*tmp)+1 == count);\n                        ++tmp;\n                    }\n\n                    DLIB_TEST(test2.at_start() == true);\n                    DLIB_TEST(test2.current_element_valid() == false);\n                    DLIB_TEST(test2.move_next() == false);\n                    DLIB_TEST(test2.at_start() == false);\n                    test.swap(test2);\n                    test.reset();\n\n                    delete [] array;\n                    delete [] array_val;\n                }\n\n\n                DLIB_TEST(test.size() == 0);\n                DLIB_TEST(test.height() == 0);\n\n                for (unsigned long i = 1; i < 100; ++i)\n                {\n                    a = 1234;\n                    test.add(a,b);\n                    DLIB_TEST(test.count(1234) == i);\n                }\n\n                test.clear();\n\n            }\n\n\n\n            a = 1;\n            b = 2;\n\n            test.add(a,b);\n\n            test.position_enumerator(0);\n            a = 0;\n            b = 0;\n            DLIB_TEST(test.height() == 1);\n            test.remove_current_element(a,b);\n            DLIB_TEST(a == 1);\n            DLIB_TEST(b == 2);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.height() == 0);\n            DLIB_TEST(test.size() == 0);\n\n\n            a = 1;\n            b = 2;\n            test.add(a,b);\n            a = 1;\n            b = 2;\n            test.add(a,b);\n\n            test.position_enumerator(0);\n            a = 0;\n            b = 0;\n            DLIB_TEST(test.height() == 2);\n            test.remove_current_element(a,b);\n            DLIB_TEST(a == 1);\n            DLIB_TEST(b == 2);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == true);\n            DLIB_TEST(test.height() == 1);\n            DLIB_TEST(test.size() == 1);\n\n            test.remove_current_element(a,b);\n            DLIB_TEST(a == 1);\n            DLIB_TEST(b == 2);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.height() == 0);\n            DLIB_TEST(test.size() == 0);\n\n            for (int i = 0; i < 100; ++i)\n            {\n                a = i;\n                b = i;\n                test.add(a,b);\n            }\n\n            DLIB_TEST(test.size() == 100);\n            test.remove_last_in_order(a,b);\n            DLIB_TEST(a == 99);\n            DLIB_TEST(b == 99);\n            DLIB_TEST(test.size() == 99);\n            test.remove_last_in_order(a,b);\n            DLIB_TEST(a == 98);\n            DLIB_TEST(b == 98);\n            DLIB_TEST(test.size() == 98);\n\n            test.position_enumerator(-10);\n            for (int i = 0; i < 97; ++i)\n            {\n                DLIB_TEST(test.element().key() == i);\n                DLIB_TEST(test.element().value() == i);\n                DLIB_TEST(test.move_next());\n            }\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n            test.position_enumerator(10);\n            for (int i = 10; i < 97; ++i)\n            {\n                DLIB_TEST(test.element().key() == i);\n                DLIB_TEST(test.element().value() == i);\n                DLIB_TEST(test.move_next());\n            }\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n            test.reset();\n            DLIB_TEST(test.at_start());\n            DLIB_TEST(test.current_element_valid() == false);\n            for (int i = 0; i < 98; ++i)\n            {\n                DLIB_TEST(test.move_next());\n                DLIB_TEST(test.element().key() == i);\n                DLIB_TEST(test.element().value() == i);\n            }\n            DLIB_TEST_MSG(test.size() == 98, test.size());\n            DLIB_TEST(test.move_next() == false);\n\n            test.position_enumerator(98);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n\n\n            test.position_enumerator(50);\n            DLIB_TEST(test.element().key() == 50);\n            DLIB_TEST(test.element().value() == 50);\n            DLIB_TEST(test[50] != 0);\n            test.remove_current_element(a,b);\n            DLIB_TEST(test[50] == 0);\n            DLIB_TEST_MSG(test.size() == 97, test.size());\n            DLIB_TEST(a == 50);\n            DLIB_TEST(b == 50);\n            DLIB_TEST(test.element().key() == 51);\n            DLIB_TEST(test.element().value() == 51);\n            DLIB_TEST(test.current_element_valid());\n            test.remove_current_element(a,b);\n            DLIB_TEST_MSG(test.size() == 96, test.size());\n            DLIB_TEST(a == 51);\n            DLIB_TEST(b == 51);\n            DLIB_TEST_MSG(test.element().key() == 52,test.element().key());\n            DLIB_TEST_MSG(test.element().value() == 52,test.element().value());\n            DLIB_TEST(test.current_element_valid());\n            test.remove_current_element(a,b);\n            DLIB_TEST_MSG(test.size() == 95, test.size());\n            DLIB_TEST(a == 52);\n            DLIB_TEST(b == 52);\n            DLIB_TEST_MSG(test.element().key() == 53,test.element().key());\n            DLIB_TEST_MSG(test.element().value() == 53,test.element().value());\n            DLIB_TEST(test.current_element_valid());\n            test.position_enumerator(50);\n            DLIB_TEST_MSG(test.element().key() == 53,test.element().key());\n            DLIB_TEST_MSG(test.element().value() == 53,test.element().value());\n            DLIB_TEST(test.current_element_valid());\n            test.position_enumerator(51);\n            DLIB_TEST_MSG(test.element().key() == 53,test.element().key());\n            DLIB_TEST_MSG(test.element().value() == 53,test.element().value());\n            DLIB_TEST(test.current_element_valid());\n            test.position_enumerator(52);\n            DLIB_TEST_MSG(test.element().key() == 53,test.element().key());\n            DLIB_TEST_MSG(test.element().value() == 53,test.element().value());\n            DLIB_TEST(test.current_element_valid());\n            test.position_enumerator(53);\n            DLIB_TEST_MSG(test.element().key() == 53,test.element().key());\n            DLIB_TEST_MSG(test.element().value() == 53,test.element().value());\n            DLIB_TEST(test.current_element_valid());\n\n            test.reset();\n            test.move_next();\n            int lasta = -1, lastb = -1;\n            count = 0;\n            while (test.current_element_valid() )\n            {\n                ++count;\n                int c = test.element().key();\n                int d = test.element().value();\n                test.remove_current_element(a,b);\n                DLIB_TEST(c == a);\n                DLIB_TEST(d == a);\n                DLIB_TEST(lasta < a);\n                DLIB_TEST(lastb < b);\n                lasta = a;\n                lastb = b;\n            }\n            DLIB_TEST_MSG(count == 95, count);\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.height() == 0);\n\n            test.clear();\n\n            for (int i = 0; i < 1000; ++i)\n            {\n                a = 1;\n                b = 1;\n                test.add(a,b);\n            }\n\n            for (int i = 0; i < 40; ++i)\n            {\n                int num = ::rand()%800 + 1;\n                test.reset();\n                for (int j = 0; j < num; ++j)\n                {\n                    DLIB_TEST(test.move_next());\n                }\t\t\t\t\t             \n                DLIB_TEST_MSG(test.current_element_valid(),\"size: \" << test.size() << \"   num: \" << num);\n                test.remove_current_element(a,b);\n                DLIB_TEST_MSG(test.current_element_valid(),\"size: \" << test.size() << \"   num: \" << num);\n                test.remove_current_element(a,b);\n                test.position_enumerator(1);\n                if (test.current_element_valid())\n                    test.remove_current_element(a,b);\n                DLIB_TEST(a == 1);\n                DLIB_TEST(b == 1);\n            }\n\n            test.clear();\n\n        }\n\n\n        test.clear();\n        test2.clear();\n\n    }\n\n}\n\n#endif // DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/binary_search_tree_kernel_1a.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_\n#define DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/memory_manager_global.h>\n#include <dlib/memory_manager_stateless.h>\n#include <dlib/binary_search_tree.h>\n#include \"tester.h\"\n#include \"binary_search_tree.h\"\n\nnamespace  \n{\n\n\n    class binary_search_tree_tester : public tester\n    {\n\n    public:\n        binary_search_tree_tester (\n        ) :\n            tester (\"test_binary_search_tree_kernel_1a\",\n                    \"Runs tests on the binary_search_tree_kernel_1a component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            binary_search_tree_kernel_test<binary_search_tree<int,int>::kernel_1a>();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_1a_c\";\n            binary_search_tree_kernel_test<binary_search_tree<int,int>::kernel_1a_c>();\n            print_spinner();\n        }\n    } a;\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/binary_search_tree_kernel_2a.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_\n#define DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/memory_manager_global.h>\n#include <dlib/memory_manager_stateless.h>\n#include <dlib/binary_search_tree.h>\n#include \"tester.h\"\n#include \"binary_search_tree.h\"\n\nnamespace  \n{\n\n    class binary_search_tree_tester : public tester\n    {\n    public:\n        binary_search_tree_tester (\n        ) :\n            tester (\"test_binary_search_tree_kernel_2a\",\n                    \"Runs tests on the binary_search_tree_kernel_2a component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_2a\";\n            binary_search_tree_kernel_test<binary_search_tree<int,int>::kernel_2a>();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_2a_c\";\n            binary_search_tree_kernel_test<binary_search_tree<int,int>::kernel_2a_c>();\n            print_spinner();\n        }\n    } a;\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/binary_search_tree_mm1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_\n#define DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/memory_manager_global.h>\n#include <dlib/memory_manager_stateless.h>\n#include <dlib/binary_search_tree.h>\n#include \"tester.h\"\n#include \"binary_search_tree.h\"\n\nnamespace  \n{\n\n    class binary_search_tree_tester : public tester\n    {\n        struct factory\n        {\n            template <typename U>\n            struct return_type {\n                typedef typename memory_manager<U>::kernel_1c type;\n            };\n\n            template <typename U>\n            static typename return_type<U>::type* get_instance (\n            )\n            {\n                static typename return_type<U>::type instance;\n                return &instance;\n            }\n\n        };\n\n\n    public:\n        binary_search_tree_tester (\n        ) :\n            tester (\"test_binary_search_tree_mm1\",\n                    \"Runs tests on the binary_search_tree component with memory managers.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a /w memory_manager_global\";\n            binary_search_tree_kernel_test<binary_search_tree<int,int, \n            memory_manager_global<char,factory>::kernel_1a>::kernel_1a>();\n            print_spinner();\n\n\n            dlog << LINFO << \"testing kernel_1a /w memory_manager_stateless\";\n            binary_search_tree_kernel_test<binary_search_tree<int,int, \n            memory_manager_stateless<char>::kernel_1a>::kernel_1a>();\n            print_spinner();\n        }\n    } a;\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/binary_search_tree_mm2.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_\n#define DLIB_BINARY_SEARCH_TREE_KERNEl_TEST_\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/memory_manager_global.h>\n#include <dlib/memory_manager_stateless.h>\n#include <dlib/binary_search_tree.h>\n#include \"tester.h\"\n#include \"binary_search_tree.h\"\n\nnamespace  \n{\n\n    class binary_search_tree_tester : public tester\n    {\n\n    public:\n        binary_search_tree_tester (\n        ) :\n            tester (\"test_binary_search_tree_mm2\",\n                    \"Runs tests on the binary_search_tree component with memory managers.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a /w memory_manager_stateless_2\";\n            binary_search_tree_kernel_test<binary_search_tree<int,int, \n            memory_manager_stateless<char>::kernel_2_2c>::kernel_1a>();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_1a /w memory_manager_3\";\n            binary_search_tree_kernel_test<binary_search_tree<int,int, \n            memory_manager<char>::kernel_3b>::kernel_1a>();\n            print_spinner();\n        }\n    } a;\n\n}\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/blas_bindings/CMakeLists.txt",
    "content": "#\n# This is a CMake makefile.  You can find the cmake utility and\n# information about it at http://www.cmake.org\n#\n\ncmake_minimum_required(VERSION 2.6)\n\n# This variable contains a list of all the tests we are building\n# into the regression test suite.\nset (tests\n   blas_bindings_gemm.cpp\n   blas_bindings_gemv.cpp\n   blas_bindings_ger.cpp\n   blas_bindings_dot.cpp\n   blas_bindings_scal_axpy.cpp\n   vector.cpp\n   )\n\n# create a variable called target_name and set it to the string \"test\"\nset (target_name test)\n\nPROJECT(${target_name})\n\n# add all the cpp files we want to compile to this list.  This tells\n# cmake that they are part of our target (which is the executable named test)\nADD_EXECUTABLE(${target_name} ../main.cpp ../tester.cpp ${tests})\n\nADD_DEFINITIONS(-DDLIB_TEST_BLAS_BINDINGS)\n\n# Tell cmake to link our target executable to dlib\ninclude(../../cmake)\nTARGET_LINK_LIBRARIES(${target_name} dlib )\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/blas_bindings/blas_bindings_dot.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"../tester.h\"\n#include <dlib/matrix.h>\n\n#ifndef DLIB_USE_BLAS\n#error \"BLAS bindings must be used for this test to make any sense\"\n#endif\n\nnamespace dlib\n{\n    namespace blas_bindings\n    {\n        // This is a little screwy.  This function is used inside the BLAS\n        // bindings to count how many times each of the BLAS functions get called.\n#ifdef DLIB_TEST_BLAS_BINDINGS\n        int& counter_dot() { static int counter = 0; return counter; }\n#endif\n\n    }\n}\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    // Declare the logger we will use in this test.  The name of the logger \n    // should start with \"test.\"\n    dlib::logger dlog(\"test.dot\");\n\n\n    class blas_bindings_dot_tester : public tester\n    {\n    public:\n        blas_bindings_dot_tester (\n        ) :\n            tester (\n                \"test_dot\", // the command line argument name for this test\n                \"Run tests for DOT routines.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {}\n\n        void test_mat_bindings()\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n            matrix<double,1,0> rv(10);\n            matrix<double,0,1> cv(10);\n            double val;\n\n            rv = 1; cv = 1;\n            counter_dot() = 0;\n            val = rv*cv;\n            DLIB_TEST(val == 10);\n            DLIB_TEST(counter_dot() == 1);\n\n            rv = 1; cv = 1;\n            counter_dot() = 0;\n            val = rv*mat(&cv(0),cv.size());\n            DLIB_TEST(val == 10);\n            DLIB_TEST(counter_dot() == 1);\n\n            rv = 1; cv = 1;\n            counter_dot() = 0;\n            val = trans(mat(&rv(0),rv.size()))*mat(&cv(0),cv.size());\n            DLIB_TEST(val == 10);\n            DLIB_TEST(counter_dot() == 1);\n\n            std::vector<double> sv(10,1);\n            rv = 1; \n            counter_dot() = 0;\n            val = trans(mat(&rv(0),rv.size()))*mat(sv);\n            DLIB_TEST(val == 10);\n            DLIB_TEST(counter_dot() == 1);\n\n\n            counter_dot() = 0;\n            val = trans(mat(sv))*mat(sv);\n            DLIB_TEST(val == 10);\n            DLIB_TEST(counter_dot() == 1);\n\n            std_vector_c<double> svc(10,1);\n            counter_dot() = 0;\n            val = trans(mat(svc))*mat(svc);\n            DLIB_TEST(val == 10);\n            DLIB_TEST(counter_dot() == 1);\n\n\n            dlib::array<double> arr(10);\n            for (unsigned int i = 0; i < arr.size(); ++i)\n                arr[i] = 1;\n            counter_dot() = 0;\n            val = trans(mat(arr))*mat(arr);\n            DLIB_TEST(val == 10);\n            DLIB_TEST(counter_dot() == 1);\n        }\n\n        template <typename matrix_type, typename cv_type, typename rv_type>\n        void test_dot_stuff(\n            matrix_type& m,\n            rv_type& rv,\n            cv_type& cv\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            rv_type rv2;\n            cv_type cv2;\n            matrix_type m2;\n            typedef typename matrix_type::type scalar_type;\n            scalar_type val;\n\n            counter_dot() = 0;\n            m2 = rv*cv;\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = rv*cv;\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = rv*3*cv;\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = rv*trans(rv)*3;\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = trans(rv*trans(rv)*3 + trans(cv)*cv);\n            DLIB_TEST(counter_dot() == 2);\n\n\n            counter_dot() = 0;\n            val = trans(cv)*cv;\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = trans(cv)*trans(rv);\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = dot(rv,cv);\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = dot(rv,colm(cv,0));\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = dot(cv,cv);\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = dot(colm(cv,0,cv.size()),colm(cv,0));\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = dot(rv,rv);\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = dot(rv,trans(rv));\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = dot(trans(cv),cv);\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = dot(trans(cv),trans(rv));\n            DLIB_TEST(counter_dot() == 1);\n\n\n            // This does one dot and one gemv\n            counter_dot() = 0;\n            val = trans(cv)*m*trans(rv);\n            DLIB_TEST_MSG(counter_dot() == 1, counter_dot());\n\n            // This does one dot and two gemv \n            counter_dot() = 0;\n            val = (trans(cv)*m)*(m*trans(rv));\n            DLIB_TEST_MSG(counter_dot() == 1, counter_dot());\n\n            // This does one dot and two gemv \n            counter_dot() = 0;\n            val = trans(cv)*m*trans(m)*trans(rv);\n            DLIB_TEST_MSG(counter_dot() == 1, counter_dot());\n        }\n\n\n        template <typename matrix_type, typename cv_type, typename rv_type>\n        void test_dot_stuff_conj(\n            matrix_type& ,\n            rv_type& rv,\n            cv_type& cv\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            rv_type rv2;\n            cv_type cv2;\n            matrix_type m2;\n            typedef typename matrix_type::type scalar_type;\n            scalar_type val;\n\n            counter_dot() = 0;\n            val = conj(rv)*cv;\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = trans(conj(cv))*cv;\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = trans(conj(cv))*trans(rv);\n            DLIB_TEST(counter_dot() == 1);\n\n            counter_dot() = 0;\n            val = trans(conj(cv))*3*trans(rv);\n            DLIB_TEST(counter_dot() == 1);\n        }\n\n        void perform_test (\n        )\n        {\n            using namespace dlib;\n            typedef dlib::memory_manager<char>::kernel_1a mm;\n\n            dlog << dlib::LINFO << \"test double\";\n            {\n                matrix<double> m = randm(4,4);\n                matrix<double,1,0> rv = randm(1,4);\n                matrix<double,0,1> cv = randm(4,1);\n                test_dot_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test float\";\n            {\n                matrix<float> m = matrix_cast<float>(randm(4,4));\n                matrix<float,1,0> rv = matrix_cast<float>(randm(1,4));\n                matrix<float,0,1> cv = matrix_cast<float>(randm(4,1));\n                test_dot_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<double>\";\n            {\n                matrix<complex<double> > m = complex_matrix(randm(4,4), randm(4,4));\n                matrix<complex<double>,1,0> rv = complex_matrix(randm(1,4), randm(1,4));\n                matrix<complex<double>,0,1> cv = complex_matrix(randm(4,1), randm(4,1));\n                test_dot_stuff(m,rv,cv);\n                test_dot_stuff_conj(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<float>\";\n            {\n                matrix<complex<float> > m = matrix_cast<complex<float> >(complex_matrix(randm(4,4), randm(4,4)));\n                matrix<complex<float>,1,0> rv = matrix_cast<complex<float> >(complex_matrix(randm(1,4), randm(1,4)));\n                matrix<complex<float>,0,1> cv = matrix_cast<complex<float> >(complex_matrix(randm(4,1), randm(4,1)));\n                test_dot_stuff(m,rv,cv);\n                test_dot_stuff_conj(m,rv,cv);\n            }\n\n\n            dlog << dlib::LINFO << \"test double, column major\";\n            {\n                matrix<double,0,0,mm,column_major_layout> m = randm(4,4);\n                matrix<double,1,0,mm,column_major_layout> rv = randm(1,4);\n                matrix<double,0,1,mm,column_major_layout> cv = randm(4,1);\n                test_dot_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test float, column major\";\n            {\n                matrix<float,0,0,mm,column_major_layout> m = matrix_cast<float>(randm(4,4));\n                matrix<float,1,0,mm,column_major_layout> rv = matrix_cast<float>(randm(1,4));\n                matrix<float,0,1,mm,column_major_layout> cv = matrix_cast<float>(randm(4,1));\n                test_dot_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<double>, column major\";\n            {\n                matrix<complex<double>,0,0,mm,column_major_layout > m = complex_matrix(randm(4,4), randm(4,4));\n                matrix<complex<double>,1,0,mm,column_major_layout> rv = complex_matrix(randm(1,4), randm(1,4));\n                matrix<complex<double>,0,1,mm,column_major_layout> cv = complex_matrix(randm(4,1), randm(4,1));\n                test_dot_stuff(m,rv,cv);\n                test_dot_stuff_conj(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<float>, column major\";\n            {\n                matrix<complex<float>,0,0,mm,column_major_layout > m = matrix_cast<complex<float> >(complex_matrix(randm(4,4), randm(4,4)));\n                matrix<complex<float>,1,0,mm,column_major_layout> rv = matrix_cast<complex<float> >(complex_matrix(randm(1,4), randm(1,4)));\n                matrix<complex<float>,0,1,mm,column_major_layout> cv = matrix_cast<complex<float> >(complex_matrix(randm(4,1), randm(4,1)));\n                test_dot_stuff(m,rv,cv);\n                test_dot_stuff_conj(m,rv,cv);\n            }\n\n\n            test_mat_bindings();\n\n            print_spinner();\n        }\n    };\n\n    blas_bindings_dot_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/blas_bindings/blas_bindings_gemm.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"../tester.h\"\n#include <dlib/matrix.h>\n\n#ifndef DLIB_USE_BLAS\n#error \"BLAS bindings must be used for this test to make any sense\"\n#endif\n\nnamespace dlib\n{\n    namespace blas_bindings\n    {\n        // This is a little screwy.  This function is used inside the BLAS\n        // bindings to count how many times each of the BLAS functions get called.\n#ifdef DLIB_TEST_BLAS_BINDINGS\n        int& counter_gemm() { static int counter = 0; return counter; }\n#endif\n\n    }\n}\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    // Declare the logger we will use in this test.  The name of the logger \n    // should start with \"test.\"\n    dlib::logger dlog(\"test.gemm\");\n\n\n    class blas_bindings_gemm_tester : public tester\n    {\n    public:\n        blas_bindings_gemm_tester (\n        ) :\n            tester (\n                \"test_gemm\", // the command line argument name for this test\n                \"Run tests for GEMM routines.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {}\n\n        template <typename matrix_type>\n        void test_gemm_stuff(\n            const matrix_type& c\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            matrix_type b, a;\n            a = c;\n\n            counter_gemm() = 0;\n            b = a*a;\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = a/2*a;\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = a*trans(a) + a;\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = (a+a)*(a+a);\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = a*(a-a);\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = trans(a)*trans(a) + a;\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = trans(trans(trans(a)*a + a));\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = a*a*a*a;\n            DLIB_TEST(counter_gemm() == 3);\n            b = c;\n\n            counter_gemm() = 0;\n            a = a*a*a*a;\n            DLIB_TEST(counter_gemm() == 3);\n            a = c;\n\n            counter_gemm() = 0;\n            a = (b + a*trans(a)*a*3*a)*trans(b);\n            DLIB_TEST(counter_gemm() == 4);\n            a = c;\n\n            counter_gemm() = 0;\n            a = trans((trans(b) + trans(a)*trans(a)*a*3*a)*trans(b));\n            DLIB_TEST(counter_gemm() == 4);\n            a = c;\n\n            counter_gemm() = 0;\n            a = trans((trans(b) + trans(a)*(a)*trans(a)*3*a)*trans(b));\n            DLIB_TEST(counter_gemm() == 4);\n            a = c;\n\n            counter_gemm() = 0;\n            a = trans((trans(b) + trans(a)*(a + b)*trans(a)*3*a)*trans(b));\n            DLIB_TEST_MSG(counter_gemm() == 4, counter_gemm());\n            a = c;\n\n            counter_gemm() = 0;\n            a = trans((trans(b) + trans(a)*(a*8 + b+b+b+b)*trans(a)*3*a)*trans(b));\n            DLIB_TEST_MSG(counter_gemm() == 4, counter_gemm());\n            a = c;\n        }\n\n        template <typename matrix_type>\n        void test_gemm_stuff_conj(\n            const matrix_type& c\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            matrix_type b, a;\n            a = c;\n\n            counter_gemm() = 0;\n            b = a*conj(a);\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = a*trans(conj(a)) + a;\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = conj(trans(a))*trans(a) + a;\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = trans(trans(trans(a)*conj(a) + conj(a)));\n            DLIB_TEST(counter_gemm() == 1);\n\n            counter_gemm() = 0;\n            b = a*a*conj(a)*a;\n            DLIB_TEST(counter_gemm() == 3);\n            b = c;\n\n            counter_gemm() = 0;\n            a = a*trans(conj(a))*a*a;\n            DLIB_TEST(counter_gemm() == 3);\n            a = c;\n\n            counter_gemm() = 0;\n            a = (b + a*trans(conj(a))*a*3*a)*trans(b);\n            DLIB_TEST(counter_gemm() == 4);\n            a = c;\n\n            counter_gemm() = 0;\n            a = (trans((conj(trans(b)) + trans(a)*conj(trans(a))*a*3*a)*trans(b)));\n            DLIB_TEST(counter_gemm() == 4);\n            a = c;\n\n            counter_gemm() = 0;\n            a = ((trans(b) + trans(a)*(a)*trans(a)*3*a)*trans(conj(b)));\n            DLIB_TEST(counter_gemm() == 4);\n            a = c;\n\n            counter_gemm() = 0;\n            a = trans((trans(b) + trans(a)*conj(a + b)*trans(a)*3*a)*trans(b));\n            DLIB_TEST_MSG(counter_gemm() == 4, counter_gemm());\n            a = c;\n\n            counter_gemm() = 0;\n            a = trans((trans(b) + trans(a)*(a*8 + b+b+b+b)*trans(a)*3*conj(a))*trans(b));\n            DLIB_TEST_MSG(counter_gemm() == 4, counter_gemm());\n            a = c;\n        }\n\n        void perform_test (\n        )\n        {\n            using namespace dlib;\n            typedef dlib::memory_manager<char>::kernel_1a mm;\n\n            print_spinner();\n\n            dlog << dlib::LINFO << \"test double\";\n            {\n                matrix<double> a = randm(4,4);\n                test_gemm_stuff(a);\n            }\n\n            print_spinner();\n            dlog << dlib::LINFO << \"test float\";\n            {\n                matrix<float> a = matrix_cast<float>(randm(4,4));\n                test_gemm_stuff(a);\n            }\n\n            print_spinner();\n            dlog << dlib::LINFO << \"test complex<float>\";\n            {\n                matrix<float> a = matrix_cast<float>(randm(4,4));\n                matrix<float> b = matrix_cast<float>(randm(4,4));\n                matrix<complex<float> > c = complex_matrix(a,b);\n                test_gemm_stuff(c);\n                test_gemm_stuff_conj(c);\n            }\n\n            print_spinner();\n            dlog << dlib::LINFO << \"test complex<double>\";\n            {\n                matrix<double> a = matrix_cast<double>(randm(4,4));\n                matrix<double> b = matrix_cast<double>(randm(4,4));\n                matrix<complex<double> > c = complex_matrix(a,b);\n                test_gemm_stuff(c);\n                test_gemm_stuff_conj(c);\n            }\n\n\n            print_spinner();\n\n            dlog << dlib::LINFO << \"test double, column major\";\n            {\n                matrix<double,100,100,mm,column_major_layout> a = randm(100,100);\n                test_gemm_stuff(a);\n            }\n\n            print_spinner();\n            dlog << dlib::LINFO << \"test float, column major\";\n            {\n                matrix<float,100,100,mm,column_major_layout> a = matrix_cast<float>(randm(100,100));\n                test_gemm_stuff(a);\n            }\n\n            print_spinner();\n            dlog << dlib::LINFO << \"test complex<double>, column major\";\n            {\n                matrix<double,100,100,mm,column_major_layout> a = matrix_cast<double>(randm(100,100));\n                matrix<double,100,100,mm,column_major_layout> b = matrix_cast<double>(randm(100,100));\n                matrix<complex<double>,100,100,mm,column_major_layout > c = complex_matrix(a,b);\n                test_gemm_stuff(c);\n                test_gemm_stuff_conj(c);\n            }\n\n            print_spinner();\n\n            dlog << dlib::LINFO << \"test complex<float>, column major\";\n            {\n                matrix<float,100,100,mm,column_major_layout> a = matrix_cast<float>(randm(100,100));\n                matrix<float,100,100,mm,column_major_layout> b = matrix_cast<float>(randm(100,100));\n                matrix<complex<float>,100,100,mm,column_major_layout > c = complex_matrix(a,b);\n                test_gemm_stuff(c);\n                test_gemm_stuff_conj(c);\n            }\n\n            {\n                using namespace dlib;\n                using namespace dlib::blas_bindings;\n                array2d<double> a(100,100);\n                array2d<double> b(100,100);\n                matrix<double> c;\n                \n                counter_gemm() = 0;\n                c = mat(a)*mat(b);\n                DLIB_TEST(counter_gemm() == 1);\n\n                counter_gemm() = 0;\n                c = trans(2*mat(a)*mat(b));\n                DLIB_TEST(counter_gemm() == 1);\n            }\n\n            print_spinner();\n        }\n    };\n\n    blas_bindings_gemm_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/blas_bindings/blas_bindings_gemv.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"../tester.h\"\n#include <dlib/matrix.h>\n\n#ifndef DLIB_USE_BLAS\n#error \"BLAS bindings must be used for this test to make any sense\"\n#endif\n\nnamespace dlib\n{\n    namespace blas_bindings\n    {\n        // This is a little screwy.  This function is used inside the BLAS\n        // bindings to count how many times each of the BLAS functions get called.\n#ifdef DLIB_TEST_BLAS_BINDINGS\n        int& counter_gemv() { static int counter = 0; return counter; }\n#endif\n\n    }\n}\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    // Declare the logger we will use in this test.  The name of the logger \n    // should start with \"test.\"\n    dlib::logger dlog(\"test.gemv\");\n\n\n    class blas_bindings_gemv_tester : public tester\n    {\n    public:\n        blas_bindings_gemv_tester (\n        ) :\n            tester (\n                \"test_gemv\", // the command line argument name for this test\n                \"Run tests for GEMV routines.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {}\n\n        template <typename matrix_type, typename rv_type, typename cv_type>\n        void test_gemv_stuff(\n            matrix_type& m,\n            cv_type& cv,\n            rv_type& rv\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            cv_type cv2;\n            rv_type rv2;\n            typedef typename matrix_type::type scalar_type;\n            scalar_type val;\n\n            counter_gemv() = 0;\n            cv2 = m*cv;\n            DLIB_TEST(counter_gemv() == 1);\n\n            counter_gemv() = 0;\n            cv2 = m*2*cv;\n            DLIB_TEST(counter_gemv() == 1);\n\n            counter_gemv() = 0;\n            cv2 = m*2*trans(rv);\n            DLIB_TEST(counter_gemv() == 1);\n\n            counter_gemv() = 0;\n            rv2 = trans(m*2*cv);\n            DLIB_TEST(counter_gemv() == 1);\n\n            counter_gemv() = 0;\n            rv2 = rv*m;\n            DLIB_TEST(counter_gemv() == 1);\n\n            counter_gemv() = 0;\n            rv2 = (rv + rv)*m;\n            DLIB_TEST(counter_gemv() == 1);\n\n            counter_gemv() = 0;\n            rv2 = trans(cv)*m;\n            DLIB_TEST(counter_gemv() == 1);\n            dlog << dlib::LTRACE << 1;\n\n            counter_gemv() = 0;\n            rv2 = trans(cv)*trans(m) + rv*trans(m);\n            DLIB_TEST(counter_gemv() == 2);\n            dlog << dlib::LTRACE << 2;\n\n            counter_gemv() = 0;\n            cv2 = m*trans(trans(cv)*trans(m) + 3*rv*trans(m));\n            DLIB_TEST(counter_gemv() == 3);\n\n            // This does one dot and one gemv\n            counter_gemv() = 0;\n            val = trans(cv)*m*trans(rv);\n            DLIB_TEST_MSG(counter_gemv() == 1, counter_gemv());\n\n            // This does one dot and two gemv \n            counter_gemv() = 0;\n            val = (trans(cv)*m)*(m*trans(rv));\n            DLIB_TEST_MSG(counter_gemv() == 2, counter_gemv());\n\n            // This does one dot and two gemv \n            counter_gemv() = 0;\n            val = trans(cv)*m*trans(m)*trans(rv);\n            DLIB_TEST_MSG(counter_gemv() == 2, counter_gemv());\n        }\n\n\n        template <typename matrix_type, typename rv_type, typename cv_type>\n        void test_gemv_stuff_conj(\n            matrix_type& m,\n            cv_type& cv,\n            rv_type& rv\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            cv_type cv2;\n            rv_type rv2;\n\n            counter_gemv() = 0;\n            cv2 = trans(cv)*conj(m);\n            DLIB_TEST(counter_gemv() == 1);\n\n            counter_gemv() = 0;\n            cv2 = conj(trans(m))*rv;\n            DLIB_TEST(counter_gemv() == 1);\n\n            counter_gemv() = 0;\n            cv2 = conj(trans(m))*trans(cv);\n            DLIB_TEST(counter_gemv() == 1);\n\n            counter_gemv() = 0;\n            cv2 = trans(trans(cv)*conj(2*m) + conj(3*trans(m))*rv + conj(trans(m)*3)*trans(cv));\n            DLIB_TEST(counter_gemv() == 3);\n\n        }\n\n        void perform_test (\n        )\n        {\n            using namespace dlib;\n            typedef dlib::memory_manager<char>::kernel_1a mm;\n\n            dlog << dlib::LINFO << \"test double\";\n            {\n                matrix<double> m = randm(4,4);\n                matrix<double,0,1> cv = randm(4,1);\n                matrix<double,1,0> rv = randm(1,4);\n                test_gemv_stuff(m,cv,rv);\n            }\n\n            dlog << dlib::LINFO << \"test float\";\n            {\n                matrix<float> m = matrix_cast<float>(randm(4,4));\n                matrix<float,0,1> cv = matrix_cast<float>(randm(4,1));\n                matrix<float,1,0> rv = matrix_cast<float>(randm(1,4));\n                test_gemv_stuff(m,cv,rv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<double>\";\n            {\n                matrix<complex<double> > m = complex_matrix(randm(4,4), randm(4,4));\n                matrix<complex<double>,0,1> cv = complex_matrix(randm(4,1), randm(4,1));\n                matrix<complex<double>,1,0> rv = complex_matrix(randm(1,4), randm(1,4));\n                test_gemv_stuff(m,cv,rv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<float>\";\n            {\n                matrix<complex<float> > m = matrix_cast<complex<float> >(complex_matrix(randm(4,4), randm(4,4)));\n                matrix<complex<float>,0,1> cv = matrix_cast<complex<float> >(complex_matrix(randm(4,1), randm(4,1)));\n                matrix<complex<float>,1,0> rv = matrix_cast<complex<float> >(complex_matrix(randm(1,4), randm(1,4)));\n                test_gemv_stuff(m,cv,rv);\n            }\n\n\n            dlog << dlib::LINFO << \"test double\";\n            {\n                matrix<double,0,0,mm,column_major_layout> m = randm(4,4);\n                matrix<double,0,1,mm,column_major_layout> cv = randm(4,1);\n                matrix<double,1,0,mm,column_major_layout> rv = randm(1,4);\n                test_gemv_stuff(m,cv,rv);\n            }\n\n            dlog << dlib::LINFO << \"test float\";\n            {\n                matrix<float,0,0,mm,column_major_layout> m = matrix_cast<float>(randm(4,4));\n                matrix<float,0,1,mm,column_major_layout> cv = matrix_cast<float>(randm(4,1));\n                matrix<float,1,0,mm,column_major_layout> rv = matrix_cast<float>(randm(1,4));\n                test_gemv_stuff(m,cv,rv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<double>\";\n            {\n                matrix<complex<double>,0,0,mm,column_major_layout > m = complex_matrix(randm(4,4), randm(4,4));\n                matrix<complex<double>,0,1,mm,column_major_layout> cv = complex_matrix(randm(4,1), randm(4,1));\n                matrix<complex<double>,1,0,mm,column_major_layout> rv = complex_matrix(randm(1,4), randm(1,4));\n                test_gemv_stuff(m,cv,rv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<float>\";\n            {\n                matrix<complex<float>,0,0,mm,column_major_layout > m = matrix_cast<complex<float> >(complex_matrix(randm(4,4), randm(4,4)));\n                matrix<complex<float>,0,1,mm,column_major_layout> cv = matrix_cast<complex<float> >(complex_matrix(randm(4,1), randm(4,1)));\n                matrix<complex<float>,1,0,mm,column_major_layout> rv = matrix_cast<complex<float> >(complex_matrix(randm(1,4), randm(1,4)));\n                test_gemv_stuff(m,cv,rv);\n            }\n\n\n            print_spinner();\n        }\n    };\n\n    blas_bindings_gemv_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/blas_bindings/blas_bindings_ger.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"../tester.h\"\n#include <dlib/matrix.h>\n\n#ifndef DLIB_USE_BLAS\n#error \"BLAS bindings must be used for this test to make any sense\"\n#endif\n\nnamespace dlib\n{\n    namespace blas_bindings\n    {\n        // This is a little screwy.  This function is used inside the BLAS\n        // bindings to count how many times each of the BLAS functions get called.\n#ifdef DLIB_TEST_BLAS_BINDINGS\n        int& counter_ger() { static int counter = 0; return counter; }\n#endif\n\n    }\n}\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    // Declare the logger we will use in this test.  The name of the logger \n    // should start with \"test.\"\n    dlib::logger dlog(\"test.ger\");\n\n\n    class blas_bindings_ger_tester : public tester\n    {\n    public:\n        blas_bindings_ger_tester (\n        ) :\n            tester (\n                \"test_ger\", // the command line argument name for this test\n                \"Run tests for GER routines.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {}\n\n        template <typename matrix_type, typename cv_type, typename rv_type>\n        void test_ger_stuff(\n            matrix_type& m,\n            rv_type& rv,\n            cv_type& cv\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            rv_type rv2;\n            cv_type cv2;\n            matrix_type m2;\n\n            counter_ger() = 0;\n            m2 = m + cv*rv;\n            DLIB_TEST_MSG(counter_ger() == 1, counter_ger());\n\n            counter_ger() = 0;\n            m += trans(rv)*rv;\n            DLIB_TEST(counter_ger() == 1);\n\n            counter_ger() = 0;\n            m += trans(rv)*trans(cv);\n            DLIB_TEST(counter_ger() == 1);\n\n            counter_ger() = 0;\n            m += cv*trans(cv);\n            DLIB_TEST(counter_ger() == 1);\n\n            counter_ger() = 0;\n            m += trans(rv)*rv + trans(cv*3*rv);\n            DLIB_TEST(counter_ger() == 2);\n        }\n\n\n        template <typename matrix_type, typename cv_type, typename rv_type>\n        void test_ger_stuff_conj(\n            matrix_type& m,\n            rv_type& rv,\n            cv_type& cv\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            rv_type rv2;\n            cv_type cv2;\n            matrix_type m2;\n\n            counter_ger() = 0;\n            m += cv*conj(rv);\n            DLIB_TEST_MSG(counter_ger() == 1, counter_ger());\n\n            counter_ger() = 0;\n            m += trans(rv)*conj(rv);\n            DLIB_TEST(counter_ger() == 1);\n\n            counter_ger() = 0;\n            m += trans(rv)*conj(trans(cv));\n            DLIB_TEST(counter_ger() == 1);\n\n            counter_ger() = 0;\n            m += cv*trans(conj(cv));\n            DLIB_TEST(counter_ger() == 1);\n\n            counter_ger() = 0;\n            m += trans(rv)*rv + trans(cv*3*conj(rv));\n            DLIB_TEST(counter_ger() == 2);\n        }\n\n        void perform_test (\n        )\n        {\n            using namespace dlib;\n            typedef dlib::memory_manager<char>::kernel_1a mm;\n\n            dlog << dlib::LINFO << \"test double\";\n            {\n                matrix<double> m = randm(4,4);\n                matrix<double,1,0> rv = randm(1,4);\n                matrix<double,0,1> cv = randm(4,1);\n                test_ger_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test float\";\n            {\n                matrix<float> m = matrix_cast<float>(randm(4,4));\n                matrix<float,1,0> rv = matrix_cast<float>(randm(1,4));\n                matrix<float,0,1> cv = matrix_cast<float>(randm(4,1));\n                test_ger_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<double>\";\n            {\n                matrix<complex<double> > m = complex_matrix(randm(4,4), randm(4,4));\n                matrix<complex<double>,1,0> rv = complex_matrix(randm(1,4), randm(1,4));\n                matrix<complex<double>,0,1> cv = complex_matrix(randm(4,1), randm(4,1));\n                test_ger_stuff(m,rv,cv);\n                test_ger_stuff_conj(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<float>\";\n            {\n                matrix<complex<float> > m = matrix_cast<complex<float> >(complex_matrix(randm(4,4), randm(4,4)));\n                matrix<complex<float>,1,0> rv = matrix_cast<complex<float> >(complex_matrix(randm(1,4), randm(1,4)));\n                matrix<complex<float>,0,1> cv = matrix_cast<complex<float> >(complex_matrix(randm(4,1), randm(4,1)));\n                test_ger_stuff(m,rv,cv);\n                test_ger_stuff_conj(m,rv,cv);\n            }\n\n\n            dlog << dlib::LINFO << \"test double\";\n            {\n                matrix<double,0,0,mm,column_major_layout> m = randm(4,4);\n                matrix<double,1,0,mm,column_major_layout> rv = randm(1,4);\n                matrix<double,0,1,mm,column_major_layout> cv = randm(4,1);\n                test_ger_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test float\";\n            {\n                matrix<float,0,0,mm,column_major_layout> m = matrix_cast<float>(randm(4,4));\n                matrix<float,1,0,mm,column_major_layout> rv = matrix_cast<float>(randm(1,4));\n                matrix<float,0,1,mm,column_major_layout> cv = matrix_cast<float>(randm(4,1));\n                test_ger_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<double>\";\n            {\n                matrix<complex<double>,0,0,mm,column_major_layout > m = complex_matrix(randm(4,4), randm(4,4));\n                matrix<complex<double>,1,0,mm,column_major_layout> rv = complex_matrix(randm(1,4), randm(1,4));\n                matrix<complex<double>,0,1,mm,column_major_layout> cv = complex_matrix(randm(4,1), randm(4,1));\n                test_ger_stuff(m,rv,cv);\n                test_ger_stuff_conj(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<float>\";\n            {\n                matrix<complex<float>,0,0,mm,column_major_layout > m = matrix_cast<complex<float> >(complex_matrix(randm(4,4), randm(4,4)));\n                matrix<complex<float>,1,0,mm,column_major_layout> rv = matrix_cast<complex<float> >(complex_matrix(randm(1,4), randm(1,4)));\n                matrix<complex<float>,0,1,mm,column_major_layout> cv = matrix_cast<complex<float> >(complex_matrix(randm(4,1), randm(4,1)));\n                test_ger_stuff(m,rv,cv);\n                test_ger_stuff_conj(m,rv,cv);\n            }\n\n\n            print_spinner();\n        }\n    };\n\n    blas_bindings_ger_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/blas_bindings/blas_bindings_scal_axpy.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"../tester.h\"\n#include <dlib/matrix.h>\n\n#ifndef DLIB_USE_BLAS\n#error \"BLAS bindings must be used for this test to make any sense\"\n#endif\n\nnamespace dlib\n{\n    namespace blas_bindings\n    {\n        // This is a little screwy.  This function is used inside the BLAS\n        // bindings to count how many times each of the BLAS functions get called.\n#ifdef DLIB_TEST_BLAS_BINDINGS\n        int& counter_axpy() { static int counter = 0; return counter; }\n        int& counter_scal() { static int counter = 0; return counter; }\n#endif\n\n    }\n}\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    // Declare the logger we will use in this test.  The name of the logger \n    // should start with \"test.\"\n    dlib::logger dlog(\"test.scal_axpy\");\n\n\n    class blas_bindings_scal_axpy_tester : public tester\n    {\n    public:\n        blas_bindings_scal_axpy_tester (\n        ) :\n            tester (\n                \"test_scal_axpy\", // the command line argument name for this test\n                \"Run tests for DOT routines.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {}\n\n        template <typename matrix_type, typename cv_type, typename rv_type>\n        void test_scal_axpy_stuff(\n            matrix_type& m,\n            rv_type& rv,\n            cv_type& cv\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            rv_type rv2 = rv;\n            cv_type cv2 = cv;\n            matrix_type m2 = m;\n            typedef typename matrix_type::type scalar_type;\n            scalar_type val;\n\n            counter_scal() = 0;\n            m = 5*m;\n            DLIB_TEST(counter_scal() == 1);\n\n            counter_scal() = 0;\n            rv = 5*rv;\n            DLIB_TEST(counter_scal() == 1);\n\n            counter_scal() = 0;\n            rv = 5*rv;\n            DLIB_TEST(counter_scal() == 1);\n\n\n            counter_axpy() = 0;\n            m2 += 5*m;\n            DLIB_TEST(counter_axpy() == 1);\n\n            counter_axpy() = 0;\n            rv2 += 5*rv;\n            DLIB_TEST(counter_axpy() == 1);\n\n            counter_axpy() = 0;\n            rv2 += 5*rv;\n            DLIB_TEST(counter_axpy() == 1);\n\n\n\n            counter_scal() = 0;\n            m = m*5;\n            DLIB_TEST(counter_scal() == 1);\n\n            counter_scal() = 0;\n            rv = rv*5;\n            DLIB_TEST(counter_scal() == 1);\n\n            counter_scal() = 0;\n            cv = cv*5;\n            DLIB_TEST(counter_scal() == 1);\n\n\n            counter_axpy() = 0;\n            m2 += m*5;\n            DLIB_TEST(counter_axpy() == 1);\n\n            counter_axpy() = 0;\n            rv2 += rv*5;\n            DLIB_TEST(counter_axpy() == 1);\n\n            counter_axpy() = 0;\n            cv2 += cv*5;\n            DLIB_TEST(counter_axpy() == 1);\n\n\n\n\n            counter_axpy() = 0;\n            m2 = m2 + m*5;\n            DLIB_TEST(counter_axpy() == 1);\n\n            counter_axpy() = 0;\n            rv2 = rv2 + rv*5;\n            DLIB_TEST(counter_axpy() == 1);\n\n            counter_axpy() = 0;\n            cv2 = cv2 + cv*5;\n            DLIB_TEST(counter_axpy() == 1);\n\n\n            counter_axpy() = 0;\n            cv2 = 1;\n            cv = 1;\n            cv2 = 2*cv2 + cv*5;\n            DLIB_TEST(counter_axpy() == 1);\n            DLIB_TEST(max(abs(cv2 - 7)) == 0);\n\n\n            counter_axpy() = 0;\n            rv2 = 1;\n            rv = 1;\n            rv2 = 2*rv2 + rv*5;\n            DLIB_TEST(counter_axpy() == 1);\n            DLIB_TEST(max(abs(rv2 - 7)) == 0);\n\n\n            counter_axpy() = 0;\n            m2 = 1;\n            m = 1;\n            m2 = 2*m2 + m*5;\n            DLIB_TEST(counter_axpy() == 1);\n            DLIB_TEST(max(abs(m2 - 7)) == 0);\n        }\n\n\n\n        void perform_test (\n        )\n        {\n            using namespace dlib;\n            typedef dlib::memory_manager<char>::kernel_1a mm;\n\n            dlog << dlib::LINFO << \"test double\";\n            {\n                matrix<double> m = randm(4,4);\n                matrix<double,1,0> rv = randm(1,4);\n                matrix<double,0,1> cv = randm(4,1);\n                test_scal_axpy_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test float\";\n            {\n                matrix<float> m = matrix_cast<float>(randm(4,4));\n                matrix<float,1,0> rv = matrix_cast<float>(randm(1,4));\n                matrix<float,0,1> cv = matrix_cast<float>(randm(4,1));\n                test_scal_axpy_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<double>\";\n            {\n                matrix<complex<double> > m = complex_matrix(randm(4,4), randm(4,4));\n                matrix<complex<double>,1,0> rv = complex_matrix(randm(1,4), randm(1,4));\n                matrix<complex<double>,0,1> cv = complex_matrix(randm(4,1), randm(4,1));\n                test_scal_axpy_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<float>\";\n            {\n                matrix<complex<float> > m = matrix_cast<complex<float> >(complex_matrix(randm(4,4), randm(4,4)));\n                matrix<complex<float>,1,0> rv = matrix_cast<complex<float> >(complex_matrix(randm(1,4), randm(1,4)));\n                matrix<complex<float>,0,1> cv = matrix_cast<complex<float> >(complex_matrix(randm(4,1), randm(4,1)));\n                test_scal_axpy_stuff(m,rv,cv);\n            }\n\n\n            dlog << dlib::LINFO << \"test double, column major\";\n            {\n                matrix<double,0,0,mm,column_major_layout> m = randm(4,4);\n                matrix<double,1,0,mm,column_major_layout> rv = randm(1,4);\n                matrix<double,0,1,mm,column_major_layout> cv = randm(4,1);\n                test_scal_axpy_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test float, column major\";\n            {\n                matrix<float,0,0,mm,column_major_layout> m = matrix_cast<float>(randm(4,4));\n                matrix<float,1,0,mm,column_major_layout> rv = matrix_cast<float>(randm(1,4));\n                matrix<float,0,1,mm,column_major_layout> cv = matrix_cast<float>(randm(4,1));\n                test_scal_axpy_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<double>, column major\";\n            {\n                matrix<complex<double>,0,0,mm,column_major_layout > m = complex_matrix(randm(4,4), randm(4,4));\n                matrix<complex<double>,1,0,mm,column_major_layout> rv = complex_matrix(randm(1,4), randm(1,4));\n                matrix<complex<double>,0,1,mm,column_major_layout> cv = complex_matrix(randm(4,1), randm(4,1));\n                test_scal_axpy_stuff(m,rv,cv);\n            }\n\n            dlog << dlib::LINFO << \"test complex<float>, column major\";\n            {\n                matrix<complex<float>,0,0,mm,column_major_layout > m = matrix_cast<complex<float> >(complex_matrix(randm(4,4), randm(4,4)));\n                matrix<complex<float>,1,0,mm,column_major_layout> rv = matrix_cast<complex<float> >(complex_matrix(randm(1,4), randm(1,4)));\n                matrix<complex<float>,0,1,mm,column_major_layout> cv = matrix_cast<complex<float> >(complex_matrix(randm(4,1), randm(4,1)));\n                test_scal_axpy_stuff(m,rv,cv);\n            }\n\n\n            print_spinner();\n        }\n    };\n\n    blas_bindings_scal_axpy_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/blas_bindings/vector.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"../tester.h\"\n#include <dlib/geometry.h>\n#include <dlib/matrix.h>\n\n#ifndef DLIB_USE_BLAS\n#error \"BLAS bindings must be used for this test to make any sense\"\n#endif\n\nnamespace dlib\n{\n    namespace blas_bindings\n    {\n\n#ifdef DLIB_TEST_BLAS_BINDINGS\n        extern int& counter_gemm();\n        extern int& counter_gemv(); \n        extern int& counter_ger();\n        extern int& counter_dot();\n#endif\n\n    }\n}\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    // Declare the logger we will use in this test.  The name of the logger \n    // should start with \"test.\"\n    dlib::logger dlog(\"test.vector\");\n\n\n    class vector_tester : public tester\n    {\n    public:\n        vector_tester (\n        ) :\n            tester (\n                \"test_vector\", // the command line argument name for this test\n                \"Run tests on dlib::vector.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {}\n\n        template <typename type>\n        void test_vector(\n        ) const\n        {\n            using namespace dlib;\n            using namespace dlib::blas_bindings;\n\n            dlib::vector<type,2> a2, b2, c2;\n            dlib::vector<type,3> a3, b3, c3;\n\n            matrix<type> mat2(2,2), mat3(3,3);\n            mat2 = 0;\n            mat3 = 0;\n\n            type var = 0;\n\n            // We want to make sure that the BLAS bindings are being called for the 2D and 3D vectors.  That would\n            // be very slow.\n            counter_gemm() = 0;\n            counter_gemv() = 0;\n            counter_ger() = 0;\n            counter_dot() = 0;\n\n            var = trans(a2)*(a2);\n            var = dot(a2,a2);\n\n            a2 = mat2*b2;\n            var = trans(b2)*mat2*b2;\n\n            var = trans(a3)*(a3);\n            var = dot(a3,a3);\n\n            a3 = mat3*b3;\n            var = trans(b3)*mat3*b3;\n\n            mat3 = c3*trans(a3);\n            mat2 = c2*trans(a2);\n\n            DLIB_TEST(counter_gemm() == 0 && counter_gemv() == 0 && counter_ger() == 0 && counter_dot() == 0);\n\n        }\n\n        void perform_test (\n        )\n        {\n            using namespace dlib;\n\n            dlog << dlib::LINFO << \"test double\";\n            test_vector<double>();\n\n            dlog << dlib::LINFO << \"test float\";\n            test_vector<float>();\n\n            dlog << dlib::LINFO << \"test int\";\n            test_vector<int>();\n\n            dlog << dlib::LINFO << \"test short\";\n            test_vector<short>();\n\n            print_spinner();\n        }\n    };\n\n    vector_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/bridge.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/bridge.h>\n#include <dlib/type_safe_union.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.bridge\");\n\n    const unsigned short testing_port = 41238;\n\n    void do_test1()\n    {\n        dlib::pipe<int> in(0), out(0);\n\n        bridge b1(connect_to_ip_and_port(\"127.0.0.1\",testing_port), receive(in));\n        bridge b2(listen_on_port(testing_port), transmit(out));\n\n        for (int i = 0; i < 100; ++i)\n        {\n            int val = i;\n            out.enqueue(val);\n            val = 0;\n            in.dequeue(val);\n            DLIB_TEST(val == i);\n        }\n    }\n\n    void do_test2()\n    {\n        dlib::pipe<int> in(0), out(0), echo_pipe(0);\n\n        bridge b2(listen_on_port(testing_port), transmit(out), receive(in));\n        bridge echo(connect_to_ip_and_port(\"127.0.0.1\",testing_port), receive(echo_pipe), transmit(echo_pipe));\n\n        for (int i = 0; i < 100; ++i)\n        {\n            int val = i;\n            out.enqueue(val);\n            val = 0;\n            in.dequeue(val);\n            DLIB_TEST(val == i);\n        }\n    }\n\n    void do_test3()\n    {\n        dlib::pipe<int> in(10), out(10), echo_pipe(10);\n\n        bridge b2(listen_on_port(testing_port), transmit(out), receive(in));\n        bridge echo(connect_to_ip_and_port(\"127.0.0.1\",testing_port), receive(echo_pipe), transmit(echo_pipe));\n\n        b2.reconfigure(listen_on_port(testing_port), transmit(out), receive(in));\n\n        for (int i = 0; i < 100; ++i)\n        {\n            int val = i;\n            out.enqueue(val);\n            val = 0;\n            in.dequeue(val);\n            DLIB_TEST(val == i);\n        }\n    }\n\n    void do_test4()\n    {\n        dlib::pipe<int> in(0), out(0), echo_pipe(0);\n\n        bridge b2, echo;\n        b2.reconfigure(listen_on_port(testing_port), receive(in), transmit(out));\n        echo.reconfigure(connect_to_ip_and_port(\"127.0.0.1\",testing_port), transmit(echo_pipe), receive(echo_pipe));\n\n        for (int i = 0; i < 100; ++i)\n        {\n            int val = i;\n            out.enqueue(val);\n            val = 0;\n            in.dequeue(val);\n            DLIB_TEST(val == i);\n        }\n    }\n\n    void do_test5(int pipe_size)\n    {\n        typedef type_safe_union<int, bridge_status> tsu_type;\n\n        dlib::pipe<tsu_type> out(pipe_size);\n        dlib::pipe<tsu_type> in(pipe_size);\n        dlib::pipe<bridge_status> out_status(pipe_size);\n\n        bridge b1(connect_to_ip_and_port(\"127.0.0.1\",testing_port), receive(in));\n        tsu_type msg;\n\n        msg = b1.get_bridge_status();\n        DLIB_TEST(msg.contains<bridge_status>() == true);\n        DLIB_TEST(msg.get<bridge_status>().is_connected == false);\n        DLIB_TEST(msg.get<bridge_status>().foreign_ip == \"\");\n        DLIB_TEST(msg.get<bridge_status>().foreign_port == 0);\n\n        {\n            bridge b2(listen_on_port(testing_port), transmit(out), receive(out_status));\n\n            in.dequeue(msg);\n            DLIB_TEST(msg.contains<bridge_status>() == true);\n            DLIB_TEST(msg.get<bridge_status>().is_connected == true);\n            DLIB_TEST(msg.get<bridge_status>().foreign_ip == \"127.0.0.1\");\n            DLIB_TEST(msg.get<bridge_status>().foreign_port == testing_port);\n            msg = b1.get_bridge_status();\n            DLIB_TEST(msg.contains<bridge_status>() == true);\n            DLIB_TEST(msg.get<bridge_status>().is_connected == true);\n            DLIB_TEST(msg.get<bridge_status>().foreign_ip == \"127.0.0.1\");\n            DLIB_TEST(msg.get<bridge_status>().foreign_port == testing_port);\n\n            bridge_status temp;\n            out_status.dequeue(temp);\n            DLIB_TEST(temp.is_connected == true);\n            DLIB_TEST(temp.foreign_ip == \"127.0.0.1\");\n\n            for (int i = 0; i < 100; ++i)\n            {\n                msg = i;\n                out.enqueue(msg);\n\n                msg.get<int>() = 0;\n\n                in.dequeue(msg);\n                DLIB_TEST(msg.contains<int>() == true);\n                DLIB_TEST(msg.get<int>() == i);\n            }\n\n        }\n\n        in.dequeue(msg);\n        DLIB_TEST(msg.contains<bridge_status>() == true);\n        DLIB_TEST(msg.get<bridge_status>().is_connected == false);\n        DLIB_TEST(msg.get<bridge_status>().foreign_ip == \"127.0.0.1\");\n        DLIB_TEST(msg.get<bridge_status>().foreign_port == testing_port);\n    }\n\n    void do_test5_5(int pipe_size)\n    {\n        typedef type_safe_union<int, bridge_status> tsu_type;\n\n        dlib::pipe<tsu_type> out(pipe_size);\n        dlib::pipe<tsu_type> in(pipe_size);\n        dlib::pipe<bridge_status> out_status(pipe_size);\n\n        bridge b1(connect_to_ip_and_port(\"127.0.0.1\",testing_port), receive(in));\n        tsu_type msg;\n\n        bridge b2(listen_on_port(testing_port), transmit(out), receive(out_status));\n\n        in.dequeue(msg);\n        DLIB_TEST(msg.contains<bridge_status>() == true);\n        DLIB_TEST(msg.get<bridge_status>().is_connected == true);\n        DLIB_TEST(msg.get<bridge_status>().foreign_ip == \"127.0.0.1\");\n        DLIB_TEST(msg.get<bridge_status>().foreign_port == testing_port);\n\n        bridge_status temp;\n        out_status.dequeue(temp);\n        DLIB_TEST(temp.is_connected == true);\n        DLIB_TEST(temp.foreign_ip == \"127.0.0.1\");\n\n        for (int i = 0; i < 100; ++i)\n        {\n            msg = i;\n            out.enqueue(msg);\n\n            msg.get<int>() = 0;\n\n            in.dequeue(msg);\n            DLIB_TEST(msg.contains<int>() == true);\n            DLIB_TEST(msg.get<int>() == i);\n        }\n\n        b2.clear();\n        msg = b2.get_bridge_status();\n        DLIB_TEST(msg.contains<bridge_status>() == true);\n        DLIB_TEST(msg.get<bridge_status>().is_connected == false);\n        DLIB_TEST(msg.get<bridge_status>().foreign_ip == \"\");\n        DLIB_TEST(msg.get<bridge_status>().foreign_port == 0);\n\n        in.dequeue(msg);\n        DLIB_TEST(msg.contains<bridge_status>() == true);\n        DLIB_TEST(msg.get<bridge_status>().is_connected == false);\n        DLIB_TEST(msg.get<bridge_status>().foreign_ip == \"127.0.0.1\");\n        DLIB_TEST(msg.get<bridge_status>().foreign_port == testing_port);\n    }\n\n    void do_test6()\n    {\n        dlib::pipe<int> in(0), out(300);\n\n        bridge b1(connect_to_ip_and_port(\"127.0.0.1\",testing_port), receive(in));\n        bridge b2(listen_on_port(testing_port), transmit(out));\n\n        for (int i = 0; i < 100; ++i)\n        {\n            int val = i;\n            out.enqueue(val);\n        }\n\n        int val = 10;\n        in.dequeue(val);\n        DLIB_TEST(val == 0);\n        dlib::sleep(100);\n        in.dequeue(val);\n        DLIB_TEST(val == 1);\n        dlib::sleep(100);\n    }\n\n    class test_bridge : public tester\n    {\n    public:\n        test_bridge (\n        ) :\n            tester (\"test_bridge\",\n                    \"Runs tests on the bridge component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing bridge, using local port number of \" << testing_port; \n\n            print_spinner();\n            do_test1();\n            print_spinner();\n            do_test2();\n            print_spinner();\n            do_test3();\n            print_spinner();\n            do_test4();\n            print_spinner();\n            for (int i = 0; i < 5; ++i)\n                do_test5(i);\n            do_test5_5(1);\n            print_spinner();\n            do_test6();\n        }\n    } a;\n\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/bsp.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/bsp.h>\n#include <dlib/threads.h>\n#include <dlib/pipe.h>\n#include <dlib/matrix.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.bsp\");\n\n\n    template <typename funct>\n    struct callfunct_helper\n    {\n        callfunct_helper (\n            funct f_,\n            int port_,\n            bool& error_occurred_\n        ) :f(f_), port(port_), error_occurred(error_occurred_) {}\n\n        funct f;\n        int port;\n        bool& error_occurred;\n\n        void operator() (\n        ) const\n        {\n            try\n            {\n                bsp_listen(port, f);\n            }\n            catch (exception& e)\n            {\n                dlog << LERROR << \"error calling bsp_listen(): \" << e.what();\n                error_occurred = true;\n            }\n        }\n    };\n\n    template <typename funct>\n    callfunct_helper<funct> callfunct(funct f, int port, bool& error_occurred)\n    {\n        return callfunct_helper<funct>(f,port,error_occurred);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename funct>\n    struct callfunct_helper_pn\n    {\n        callfunct_helper_pn (\n            funct f_,\n            int port_,\n            bool& error_occurred_,\n            dlib::pipe<unsigned short>& port_pipe_\n        ) :f(f_), port(port_), error_occurred(error_occurred_), port_pipe(port_pipe_) {}\n\n        funct f;\n        int port;\n        bool& error_occurred;\n        dlib::pipe<unsigned short>& port_pipe;\n\n        struct helper\n        {\n            helper (\n                dlib::pipe<unsigned short>& port_pipe_\n            ) : port_pipe(port_pipe_) {}\n\n            dlib::pipe<unsigned short>& port_pipe;\n\n            void operator() (unsigned short p) { port_pipe.enqueue(p); }\n        };\n\n        void operator() (\n        ) const\n        {\n            try\n            {\n                bsp_listen_dynamic_port(port, helper(port_pipe), f);\n            }\n            catch (exception& e)\n            {\n                dlog << LERROR << \"error calling bsp_listen_dynamic_port(): \" << e.what();\n                error_occurred = true;\n            }\n        }\n    };\n\n    template <typename funct>\n    callfunct_helper_pn<funct> callfunct(funct f, int port, bool& error_occurred, dlib::pipe<unsigned short>& port_pipe)\n    {\n        return callfunct_helper_pn<funct>(f,port,error_occurred,port_pipe);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void sum_array_driver (\n        bsp_context& obj,\n        const std::vector<int>& v,\n        int& result\n    )\n    {\n        obj.broadcast(v);\n\n        result = 0;\n        int val;\n        while(obj.try_receive(val))\n            result += val;\n    }\n\n    void sum_array_other (\n        bsp_context& obj\n    )\n    {\n        std::vector<int> v;\n        obj.receive(v);\n\n        int sum = 0;\n        for (unsigned long i = 0; i < v.size(); ++i)\n            sum += v[i];\n\n        obj.send(sum, 0);\n\n\n    }\n\n\n    void dotest1()\n    {\n        dlog << LINFO << \"start dotest1()\";\n        print_spinner();\n        bool error_occurred = false;\n        {\n            thread_function t1(callfunct(sum_array_other, 12345, error_occurred));\n            thread_function t2(callfunct(sum_array_other, 12346, error_occurred));\n            thread_function t3(callfunct(sum_array_other, 12347, error_occurred));\n            std::vector<int> v;\n            int true_value = 0;\n            for (int i = 0; i < 10; ++i)\n            {\n                v.push_back(i);\n                true_value += i;\n            }\n\n            // wait a little bit for the threads to start up\n            dlib::sleep(200);\n\n            try\n            {\n                int result;\n                std::vector<network_address> hosts;\n                hosts.push_back(\"127.0.0.1:12345\");\n                hosts.push_back(\"localhost:12346\");\n                hosts.push_back(\"127.0.0.1:12347\");\n                bsp_connect(hosts, sum_array_driver, dlib::ref(v), dlib::ref(result));\n\n                dlog << LINFO << \"result: \"<< result;\n                dlog << LINFO << \"should be: \"<< 3*true_value; \n                DLIB_TEST(result == 3*true_value);\n            }\n            catch (std::exception& e)\n            {\n                dlog << LERROR << \"error during bsp_context: \" << e.what();\n                DLIB_TEST(false);\n            }\n        }\n        DLIB_TEST(error_occurred == false);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <unsigned long id>\n    void test2_job(bsp_context& obj)\n    {\n        if (obj.node_id() == id)\n            dlib::sleep(100);\n    }\n\n    template <unsigned long id>\n    void dotest2()\n    {\n        dlog << LINFO << \"start dotest2()\";\n        print_spinner();\n        bool error_occurred = false;\n        {\n            thread_function t1(callfunct(test2_job<id>, 12345, error_occurred));\n            thread_function t2(callfunct(test2_job<id>, 12346, error_occurred));\n            thread_function t3(callfunct(test2_job<id>, 12347, error_occurred));\n\n            // wait a little bit for the threads to start up\n            dlib::sleep(200);\n\n            try\n            {\n                std::vector<network_address> hosts;\n                hosts.push_back(\"127.0.0.1:12345\");\n                hosts.push_back(\"127.0.0.1:12346\");\n                hosts.push_back(\"127.0.0.1:12347\");\n                bsp_connect(hosts, test2_job<id>);\n            }\n            catch (std::exception& e)\n            {\n                dlog << LERROR << \"error during bsp_context: \" << e.what();\n                DLIB_TEST(false);\n            }\n\n        }\n        DLIB_TEST(error_occurred == false);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test3_job_driver(bsp_context& obj, int& result)\n    {\n\n        obj.broadcast(obj.node_id());\n\n        int accum = 0;\n        int temp = 0;\n        while(obj.try_receive(temp))\n            accum += temp;\n\n        // send to node 1 so it can sum everything\n        if (obj.node_id() != 1)\n            obj.send(accum, 1);\n\n        while(obj.try_receive(temp))\n            accum += temp;\n\n        // Now hop the accum values along the nodes until the value from node 1 gets to\n        // node 0.\n        obj.send(accum, (obj.node_id()+1)%obj.number_of_nodes());\n        obj.receive(accum);\n        obj.send(accum, (obj.node_id()+1)%obj.number_of_nodes());\n        obj.receive(accum);\n        obj.send(accum, (obj.node_id()+1)%obj.number_of_nodes());\n        obj.receive(accum);\n\n        // this whole block is a noop since it doesn't end up doing anything.\n        for (int k = 0; k < 100; ++k)\n        {\n            dlog << LINFO << \"k: \" << k;\n            for (int i = 0; i < 4; ++i)\n            {\n                obj.send(accum, (obj.node_id()+1)%obj.number_of_nodes());\n                obj.receive(accum);\n            }\n        }\n\n\n        dlog << LINFO << \"TERMINATE\";\n        if (obj.node_id() == 0)\n            result = accum;\n    }\n\n\n    void test3_job(bsp_context& obj)\n    {\n        int junk;\n        test3_job_driver(obj, junk);\n    }\n\n\n    void dotest3()\n    {\n        dlog << LINFO << \"start dotest3()\";\n        print_spinner();\n        bool error_occurred = false;\n        {\n            dlib::pipe<unsigned short> ports(5);\n            thread_function t1(callfunct(test3_job, 12345, error_occurred, ports));\n            thread_function t2(callfunct(test3_job, 0, error_occurred, ports));\n            thread_function t3(callfunct(test3_job, 12347, error_occurred, ports));\n\n\n            try\n            {\n                std::vector<network_address> hosts;\n                unsigned short port;\n                ports.dequeue(port); hosts.push_back(network_address(\"127.0.0.1\",port)); dlog << LINFO << \"PORT: \" << port;\n                ports.dequeue(port); hosts.push_back(network_address(\"127.0.0.1\",port)); dlog << LINFO << \"PORT: \" << port;\n                ports.dequeue(port); hosts.push_back(network_address(\"127.0.0.1\",port)); dlog << LINFO << \"PORT: \" << port;\n                int result = 0;\n                const int expected =  1+2+3 + 0+2+3 + 0+1+3 + 0+1+2;\n                bsp_connect(hosts, test3_job_driver, dlib::ref(result));\n\n                dlog << LINFO << \"result: \" << result;\n                dlog << LINFO << \"should be: \" << expected;\n                DLIB_TEST(result == expected);\n            }\n            catch (std::exception& e)\n            {\n                dlog << LERROR << \"error during bsp_context: \" << e.what();\n                DLIB_TEST(false);\n            }\n\n        }\n        DLIB_TEST(error_occurred == false);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test4_job_driver(bsp_context& obj, int& result)\n    {\n\n        obj.broadcast(obj.node_id());\n\n        int accum = 0;\n        int temp = 0;\n        while(obj.try_receive(temp))\n            accum += temp;\n\n        // send to node 1 so it can sum everything\n        if (obj.node_id() != 1)\n            obj.send(accum, 1);\n\n        while(obj.try_receive(temp))\n            accum += temp;\n\n        // Now hop the accum values along the nodes until the value from node 1 gets to\n        // node 0.\n        obj.send(accum, (obj.node_id()+1)%obj.number_of_nodes());\n        obj.receive(accum);\n        obj.send(accum, (obj.node_id()+1)%obj.number_of_nodes());\n        obj.receive(accum);\n        obj.send(accum, (obj.node_id()+1)%obj.number_of_nodes());\n        obj.receive(accum);\n\n        // this whole block is a noop since it doesn't end up doing anything.\n        for (int k = 0; k < 40; ++k)\n        {\n            dlog << LINFO << \"k: \" << k;\n            for (int i = 0; i < 4; ++i)\n            {\n                obj.send(accum, (obj.node_id()+1)%obj.number_of_nodes());\n                obj.receive(accum);\n\n                obj.receive();\n            }\n        }\n\n\n        dlog << LINFO << \"TERMINATE\";\n        if (obj.node_id() == 0)\n            result = accum;\n    }\n\n\n    void test4_job(bsp_context& obj)\n    {\n        int junk;\n        test4_job_driver(obj, junk);\n    }\n\n\n    void dotest4()\n    {\n        dlog << LINFO << \"start dotest4()\";\n        print_spinner();\n        bool error_occurred = false;\n        {\n            dlib::pipe<unsigned short> ports(5);\n            thread_function t1(callfunct(test4_job, 0, error_occurred, ports));\n            thread_function t2(callfunct(test4_job, 0, error_occurred, ports));\n            thread_function t3(callfunct(test4_job, 0, error_occurred, ports));\n\n\n            try\n            {\n                std::vector<network_address> hosts;\n                unsigned short port;\n                ports.dequeue(port); hosts.push_back(network_address(\"127.0.0.1\",port)); dlog << LINFO << \"PORT: \" << port;\n                ports.dequeue(port); hosts.push_back(network_address(\"127.0.0.1\",port)); dlog << LINFO << \"PORT: \" << port;\n                ports.dequeue(port); hosts.push_back(network_address(\"127.0.0.1\",port)); dlog << LINFO << \"PORT: \" << port;\n                int result = 0;\n                const int expected =  1+2+3 + 0+2+3 + 0+1+3 + 0+1+2;\n                bsp_connect(hosts, test4_job_driver, dlib::ref(result));\n\n                dlog << LINFO << \"result: \" << result;\n                dlog << LINFO << \"should be: \" << expected;\n                DLIB_TEST(result == expected);\n            }\n            catch (std::exception& e)\n            {\n                dlog << LERROR << \"error during bsp_context: \" << e.what();\n                DLIB_TEST(false);\n            }\n\n        }\n        DLIB_TEST(error_occurred == false);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test5_job(\n        bsp_context& ,\n        int& val\n    )\n    {\n        val = 25;\n    }\n\n    void dotest5()\n    {\n        dlog << LINFO << \"start dotest5()\";\n        print_spinner();\n        std::vector<network_address> hosts;\n        int val = 0;\n        bsp_connect(hosts, test5_job, dlib::ref(val));\n        DLIB_TEST(val == 25);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double f ( double x)\n    {\n        return std::pow(x-2.0, 2.0);\n    }\n\n\n    void bsp_job_node_0 (\n        bsp_context& context,\n        double& min_value,\n        double& optimal_x\n    )\n    {\n        double left = -100;\n        double right = 100;\n\n        min_value = std::numeric_limits<double>::infinity();\n        double interval_width = std::abs(right-left);\n\n        // This is doing a BSP based grid search for the minimum of f().  Here we \n        // do 100 iterations where we keep shrinking the grid size.\n        for (int i = 0; i < 100; ++i)\n        {\n            context.broadcast(left);\n            context.broadcast(right);\n\n            for (unsigned int k = 1; k < context.number_of_nodes(); ++k)\n            {\n                std::pair<double,double> val;\n                context.receive(val);\n                if (val.second < min_value)\n                {\n                    min_value = val.second;\n                    optimal_x = val.first;\n                }\n            }\n\n            interval_width *= 0.5;\n            left  = optimal_x - interval_width/2;\n            right = optimal_x + interval_width/2;\n        }\n    }\n\n\n    void bsp_job_other_nodes (\n        bsp_context& context\n    )\n    {\n        double left, right;\n        while (context.try_receive(left))\n        {\n            context.receive(right);\n\n            const double l = (context.node_id()-1)/(context.number_of_nodes()-1.0);\n            const double r = context.node_id()    /(context.number_of_nodes()-1.0);\n\n            const double width = right-left;\n            matrix<double> values_to_check = linspace(left +l*width, left + r*width, 100);\n\n            double best_x = 0;\n            double best_val = std::numeric_limits<double>::infinity();\n            for (long j = 0; j < values_to_check.size(); ++j)\n            {\n                double temp = f(values_to_check(j));\n                if (temp < best_val)\n                {\n                    best_val = temp;\n                    best_x = values_to_check(j);\n                }\n            }\n\n            context.send(make_pair(best_x, best_val), 0);\n        }\n    }\n\n    void dotest6()\n    {\n        dlog << LINFO << \"start dotest6()\";\n        print_spinner();\n        bool error_occurred = false;\n        {\n            dlib::pipe<unsigned short> ports(5);\n            thread_function t1(callfunct(bsp_job_other_nodes, 0, error_occurred, ports));\n            thread_function t2(callfunct(bsp_job_other_nodes, 0, error_occurred, ports));\n            thread_function t3(callfunct(bsp_job_other_nodes, 0, error_occurred, ports));\n\n\n            try\n            {\n                std::vector<network_address> hosts;\n                unsigned short port;\n                ports.dequeue(port); hosts.push_back(network_address(\"127.0.0.1\",port)); dlog << LINFO << \"PORT: \" << port;\n                ports.dequeue(port); hosts.push_back(network_address(\"127.0.0.1\",port)); dlog << LINFO << \"PORT: \" << port;\n                ports.dequeue(port); hosts.push_back(network_address(\"127.0.0.1\",port)); dlog << LINFO << \"PORT: \" << port;\n                double min_value = 10, optimal_x = 0;\n                bsp_connect(hosts, bsp_job_node_0, dlib::ref(min_value), dlib::ref(optimal_x));\n\n                dlog << LINFO << \"min_value: \" << min_value;\n                dlog << LINFO << \"optimal_x: \" << optimal_x;\n                DLIB_TEST(std::abs(min_value - 0) < 1e-14);\n                DLIB_TEST(std::abs(optimal_x - 2) < 1e-14);\n            }\n            catch (std::exception& e)\n            {\n                dlog << LERROR << \"error during bsp_context: \" << e.what();\n                DLIB_TEST(false);\n            }\n\n        }\n        DLIB_TEST(error_occurred == false);\n    }\n// ----------------------------------------------------------------------------------------\n\n    class bsp_tester : public tester\n    {\n\n    public:\n        bsp_tester (\n        ) :\n            tester (\"test_bsp\",\n                    \"Runs tests on the BSP components.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            for (int i = 0; i < 3; ++i)\n            {\n                dotest1();\n                dotest2<0>();\n                dotest2<1>();\n                dotest2<2>();\n                dotest3();\n                dotest4();\n                dotest5();\n                dotest6();\n            }\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/byte_orderer.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <cmath>\n#include <dlib/byte_orderer.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.byte_orderer\");\n\n\n    class byte_orderer_tester : public tester\n    {\n    public:\n        byte_orderer_tester (\n        ) :\n            tester (\"test_byte_orderer\",\n                    \"Runs tests on the byte_orderer component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            byte_orderer bo;\n\n            union data\n            {\n                unsigned char b[4];\n                dlib::uint32 val;\n            };\n\n            data a;\n\n            a.val = 1;\n\n            if (bo.host_is_little_endian())\n            {\n                DLIB_TEST(a.b[0] == 1);\n                DLIB_TEST(a.b[1] == 0);\n                DLIB_TEST(a.b[2] == 0);\n                DLIB_TEST(a.b[3] == 0);\n\n                bo.host_to_big(a.val);\n\n                DLIB_TEST(a.b[0] == 0);\n                DLIB_TEST(a.b[1] == 0);\n                DLIB_TEST(a.b[2] == 0);\n                DLIB_TEST(a.b[3] == 1);\n\n                bo.big_to_host(a.val);\n\n                DLIB_TEST(a.b[0] == 1);\n                DLIB_TEST(a.b[1] == 0);\n                DLIB_TEST(a.b[2] == 0);\n                DLIB_TEST(a.b[3] == 0);\n\n                DLIB_TEST(a.val == 1);\n                bo.host_to_network(a.val);\n                DLIB_TEST(a.val == 0x01000000);\n                bo.network_to_host(a.val);\n                DLIB_TEST(a.val == 1);\n            }\n            else\n            {\n                DLIB_TEST(a.b[0] == 0);\n                DLIB_TEST(a.b[1] == 0);\n                DLIB_TEST(a.b[2] == 0);\n                DLIB_TEST(a.b[3] == 1);\n\n                bo.host_to_little(a.val);\n\n                DLIB_TEST(a.b[0] == 1);\n                DLIB_TEST(a.b[1] == 0);\n                DLIB_TEST(a.b[2] == 0);\n                DLIB_TEST(a.b[3] == 0);\n\n                bo.little_to_host(a.val);\n\n                DLIB_TEST(a.b[0] == 0);\n                DLIB_TEST(a.b[1] == 0);\n                DLIB_TEST(a.b[2] == 0);\n                DLIB_TEST(a.b[3] == 1);\n\n\n                DLIB_TEST(a.val == 1);\n                bo.network_to_host(a.val);\n                DLIB_TEST(a.val == 1);\n                bo.host_to_network(a.val);\n                DLIB_TEST(a.val == 1);\n\n            }\n\n\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/cca.cpp",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <dlib/statistics.h>\n#include <dlib/sparse_vector.h>\n#include <map>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.cca\");\n\n    dlib::rand rnd;\n// ----------------------------------------------------------------------------------------\n\n    std::vector<std::map<unsigned long, double> > make_really_big_test_matrix (\n    )\n    {\n        std::vector<std::map<unsigned long,double> > temp(30000);\n        for (unsigned long i = 0; i < temp.size(); ++i)\n        {\n            for (int k = 0; k < 30; ++k)\n                temp[i][rnd.get_random_32bit_number()%10000] = 1;\n        }\n        return temp;\n    }\n\n    template <typename T>\n    std::vector<std::map<unsigned long, T> > mat_to_sparse (\n        const matrix<T>& A\n    )\n    {\n        std::vector<std::map<unsigned long,T> > temp(A.nr());\n        for (long r = 0; r < A.nr(); ++r)\n        {\n            for (long c = 0; c < A.nc(); ++c)\n            {\n                temp[r][c] = A(r,c);\n            }\n        }\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename EXP>\n    matrix<typename EXP::type> rm_zeros (\n        const matrix_exp<EXP>& m\n    )\n    {\n        // Do this to avoid trying to correlate super small numbers that are really just\n        // zero.  Doing this avoids some potential false alarms in the unit tests below.\n        return round_zeros(m, max(abs(m))*1e-14);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void check_correlation (\n        matrix<double> L,\n        matrix<double> R,\n        const matrix<double>& Ltrans,\n        const matrix<double>& Rtrans,\n        const matrix<double,0,1>& correlations\n    )\n    {\n        // apply the transforms\n        L = L*Ltrans;\n        R = R*Rtrans;\n\n        // compute the real correlation values. Store them in A.\n        matrix<double> A = compute_correlations(L, R);\n\n        for (long i = 0; i < correlations.size(); ++i)\n        {\n            // compare what the measured correlation values are (in A) to the \n            // predicted values.\n            cout << \"error: \"<< A(i) - correlations(i);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_cca3()\n    {\n        print_spinner();\n        const unsigned long rank = rnd.get_random_32bit_number()%10 + 1;\n        const unsigned long m = rank + rnd.get_random_32bit_number()%15;\n        const unsigned long n = rank + rnd.get_random_32bit_number()%15;\n        const unsigned long n2 = rank + rnd.get_random_32bit_number()%15;\n        const unsigned long rank2 = rank + rnd.get_random_32bit_number()%5;\n\n        dlog << LINFO << \"m:  \" << m;\n        dlog << LINFO << \"n:  \" << n;\n        dlog << LINFO << \"n2: \" << n2;\n        dlog << LINFO << \"rank:  \" << rank;\n        dlog << LINFO << \"rank2: \" << rank2;\n\n\n        matrix<double> L = randm(m,rank, rnd)*randm(rank,n, rnd);\n        //matrix<double> R = randm(m,rank, rnd)*randm(rank,n2, rnd);\n        matrix<double> R = L*randm(n,n2);\n        //matrix<double> L = randm(m,n, rnd);\n        //matrix<double> R = randm(m,n2, rnd);\n\n        matrix<double> Ltrans, Rtrans;\n        matrix<double,0,1> correlations;\n\n        {\n            correlations = cca(L, R, Ltrans, Rtrans, min(m,n), max(n,n2));\n            DLIB_TEST(Ltrans.nc() == Rtrans.nc());\n            dlog << LINFO << \"correlations: \"<< trans(correlations);\n\n            const double corr_error = max(abs(compute_correlations(rm_zeros(L*Ltrans), rm_zeros(R*Rtrans)) - correlations));\n            dlog << LINFO << \"correlation error: \"<< corr_error;\n            DLIB_TEST_MSG(corr_error < 1e-13, Ltrans << \"\\n\\n\" << Rtrans);\n\n            const double trans_error = max(abs(L*Ltrans - R*Rtrans));\n            dlog << LINFO << \"trans_error: \"<< trans_error;\n            DLIB_TEST(trans_error < 1e-10);\n        }\n        {\n            correlations = cca(mat_to_sparse(L), mat_to_sparse(R), Ltrans, Rtrans, min(m,n), max(n,n2)+6, 4);\n            DLIB_TEST(Ltrans.nc() == Rtrans.nc());\n            dlog << LINFO << \"correlations: \"<< trans(correlations);\n            dlog << LINFO << \"computed cors: \" << trans(compute_correlations(rm_zeros(L*Ltrans), rm_zeros(R*Rtrans)));\n\n            const double trans_error = max(abs(L*Ltrans - R*Rtrans));\n            dlog << LINFO << \"trans_error: \"<< trans_error;\n            const double corr_error = max(abs(compute_correlations(rm_zeros(L*Ltrans), rm_zeros(R*Rtrans)) - correlations));\n            dlog << LINFO << \"correlation error: \"<< corr_error;\n            DLIB_TEST_MSG(corr_error < 1e-13, Ltrans << \"\\n\\n\" << Rtrans);\n\n            DLIB_TEST(trans_error < 1e-10);\n        }\n\n        dlog << LINFO << \"*****************************************************\";\n    }\n\n    void test_cca2()\n    {\n        print_spinner();\n        const unsigned long rank = rnd.get_random_32bit_number()%10 + 1;\n        const unsigned long m = rank + rnd.get_random_32bit_number()%15;\n        const unsigned long n = rank + rnd.get_random_32bit_number()%15;\n        const unsigned long n2 = rank + rnd.get_random_32bit_number()%15;\n\n        dlog << LINFO << \"m:  \" << m;\n        dlog << LINFO << \"n:  \" << n;\n        dlog << LINFO << \"n2: \" << n2;\n        dlog << LINFO << \"rank:  \" << rank;\n\n\n        matrix<double> L = randm(m,n, rnd);\n        matrix<double> R = randm(m,n2, rnd);\n\n        matrix<double> Ltrans, Rtrans;\n        matrix<double,0,1> correlations;\n\n        {\n            correlations = cca(L, R, Ltrans, Rtrans, min(n,n2), max(n,n2)-min(n,n2));\n            DLIB_TEST(Ltrans.nc() == Rtrans.nc());\n            dlog << LINFO << \"correlations: \"<< trans(correlations);\n\n            if (Ltrans.nc() > 1)\n            {\n                // The CCA projection directions are supposed to be uncorrelated for\n                // non-matching pairs of projections.\n                const double corr_rot1_error = max(abs(compute_correlations(rm_zeros(L*rotate<0,1>(Ltrans)), rm_zeros(R*Rtrans))));\n                dlog << LINFO << \"corr_rot1_error: \"<< corr_rot1_error;\n                DLIB_TEST(std::abs(corr_rot1_error) < 1e-10);\n            }\n            // Matching projection directions should be correlated with the amount of\n            // correlation indicated by the return value of cca().\n            const double corr_error = max(abs(compute_correlations(rm_zeros(L*Ltrans), rm_zeros(R*Rtrans)) - correlations));\n            dlog << LINFO << \"correlation error: \"<< corr_error;\n            DLIB_TEST(corr_error < 1e-13);\n        }\n        {\n            correlations = cca(mat_to_sparse(L), mat_to_sparse(R), Ltrans, Rtrans, min(n,n2), max(n,n2)-min(n,n2));\n            DLIB_TEST(Ltrans.nc() == Rtrans.nc());\n            dlog << LINFO << \"correlations: \"<< trans(correlations);\n\n            if (Ltrans.nc() > 1)\n            {\n                // The CCA projection directions are supposed to be uncorrelated for\n                // non-matching pairs of projections.\n                const double corr_rot1_error = max(abs(compute_correlations(rm_zeros(L*rotate<0,1>(Ltrans)), rm_zeros(R*Rtrans))));\n                dlog << LINFO << \"corr_rot1_error: \"<< corr_rot1_error;\n                DLIB_TEST(std::abs(corr_rot1_error) < 1e-10);\n            }\n            // Matching projection directions should be correlated with the amount of\n            // correlation indicated by the return value of cca().\n            const double corr_error = max(abs(compute_correlations(rm_zeros(L*Ltrans), rm_zeros(R*Rtrans)) - correlations));\n            dlog << LINFO << \"correlation error: \"<< corr_error;\n            DLIB_TEST(corr_error < 1e-13);\n        }\n\n        dlog << LINFO << \"*****************************************************\";\n    }\n\n    void test_cca1()\n    {\n        print_spinner();\n        const unsigned long rank = rnd.get_random_32bit_number()%10 + 1;\n        const unsigned long m = rank + rnd.get_random_32bit_number()%15;\n        const unsigned long n = rank + rnd.get_random_32bit_number()%15;\n\n        dlog << LINFO << \"m: \" << m;\n        dlog << LINFO << \"n: \" << n;\n        dlog << LINFO << \"rank: \" << rank;\n\n        matrix<double> T = randm(n,n, rnd);\n\n        matrix<double> L = randm(m,rank, rnd)*randm(rank,n, rnd);\n        //matrix<double> L = randm(m,n, rnd);\n        matrix<double> R = L*T;\n\n        matrix<double> Ltrans, Rtrans;\n        matrix<double,0,1> correlations;\n\n        {\n            correlations = cca(L, R, Ltrans, Rtrans, rank);\n            DLIB_TEST(Ltrans.nc() == Rtrans.nc());\n            if (Ltrans.nc() > 1)\n            {\n                // The CCA projection directions are supposed to be uncorrelated for\n                // non-matching pairs of projections.\n                const double corr_rot1_error = max(abs(compute_correlations(rm_zeros(L*rotate<0,1>(Ltrans)), rm_zeros(R*Rtrans))));\n                dlog << LINFO << \"corr_rot1_error: \"<< corr_rot1_error;\n                DLIB_TEST(std::abs(corr_rot1_error) < 1e-10);\n            }\n            // Matching projection directions should be correlated with the amount of\n            // correlation indicated by the return value of cca().\n            const double corr_error = max(abs(compute_correlations(rm_zeros(L*Ltrans), rm_zeros(R*Rtrans)) - correlations));\n            dlog << LINFO << \"correlation error: \"<< corr_error;\n            DLIB_TEST(corr_error < 1e-13);\n\n            const double trans_error = max(abs(L*Ltrans - R*Rtrans));\n            dlog << LINFO << \"trans_error: \"<< trans_error;\n            DLIB_TEST(trans_error < 1e-10);\n\n            dlog << LINFO << \"correlations: \"<< trans(correlations);\n        }\n        {\n            correlations = cca(mat_to_sparse(L), mat_to_sparse(R), Ltrans, Rtrans, rank);\n            DLIB_TEST(Ltrans.nc() == Rtrans.nc());\n            if (Ltrans.nc() > 1)\n            {\n                // The CCA projection directions are supposed to be uncorrelated for\n                // non-matching pairs of projections.\n                const double corr_rot1_error = max(abs(compute_correlations(rm_zeros(L*rotate<0,1>(Ltrans)), rm_zeros(R*Rtrans))));\n                dlog << LINFO << \"corr_rot1_error: \"<< corr_rot1_error;\n                DLIB_TEST(std::abs(corr_rot1_error) < 1e-10);\n            }\n            // Matching projection directions should be correlated with the amount of\n            // correlation indicated by the return value of cca().\n            const double corr_error = max(abs(compute_correlations(rm_zeros(L*Ltrans), rm_zeros(R*Rtrans)) - correlations));\n            dlog << LINFO << \"correlation error: \"<< corr_error;\n            DLIB_TEST(corr_error < 1e-13);\n\n            const double trans_error = max(abs(L*Ltrans - R*Rtrans));\n            dlog << LINFO << \"trans_error: \"<< trans_error;\n            DLIB_TEST(trans_error < 1e-9);\n\n            dlog << LINFO << \"correlations: \"<< trans(correlations);\n        }\n\n        dlog << LINFO << \"*****************************************************\";\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_svd_fast(\n        long rank,\n        long m,\n        long n\n    )\n    {\n        print_spinner();\n        matrix<double> A = randm(m,rank,rnd)*randm(rank,n,rnd);\n        matrix<double> u,v;\n        matrix<double,0,1> w;\n\n        dlog << LINFO << \"rank: \"<< rank;\n        dlog << LINFO << \"m: \"<< m;\n        dlog << LINFO << \"n: \"<< n;\n\n        svd_fast(A, u, w, v, rank, 2);\n        DLIB_TEST(u.nr() == m);\n        DLIB_TEST(u.nc() == rank);\n        DLIB_TEST(w.nr() == rank);\n        DLIB_TEST(w.nc() == 1);\n        DLIB_TEST(v.nr() == n);\n        DLIB_TEST(v.nc() == rank);\n        DLIB_TEST(max(abs(trans(u)*u - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(trans(v)*v - identity_matrix<double>(u.nc()))) < 1e-13);\n\n        DLIB_TEST(max(abs(tmp(A - u*diagm(w)*trans(v)))) < 1e-13);\n        svd_fast(mat_to_sparse(A), u, w, v, rank, 2);\n        DLIB_TEST(u.nr() == m);\n        DLIB_TEST(u.nc() == rank);\n        DLIB_TEST(w.nr() == rank);\n        DLIB_TEST(w.nc() == 1);\n        DLIB_TEST(v.nr() == n);\n        DLIB_TEST(v.nc() == rank);\n        DLIB_TEST(max(abs(trans(u)*u - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(trans(v)*v - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(tmp(A - u*diagm(w)*trans(v)))) < 1e-13);\n\n        svd_fast(A, u, w, v, rank, 0);\n        DLIB_TEST(u.nr() == m);\n        DLIB_TEST(u.nc() == rank);\n        DLIB_TEST(w.nr() == rank);\n        DLIB_TEST(w.nc() == 1);\n        DLIB_TEST(v.nr() == n);\n        DLIB_TEST(v.nc() == rank);\n        DLIB_TEST(max(abs(trans(u)*u - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(trans(v)*v - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST_MSG(max(abs(tmp(A - u*diagm(w)*trans(v)))) < 1e-9,max(abs(tmp(A - u*diagm(w)*trans(v)))));\n        svd_fast(mat_to_sparse(A), u, w, v, rank, 0);\n        DLIB_TEST(u.nr() == m);\n        DLIB_TEST(u.nc() == rank);\n        DLIB_TEST(w.nr() == rank);\n        DLIB_TEST(w.nc() == 1);\n        DLIB_TEST(v.nr() == n);\n        DLIB_TEST(v.nc() == rank);\n        DLIB_TEST(max(abs(trans(u)*u - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(trans(v)*v - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(tmp(A - u*diagm(w)*trans(v)))) < 1e-10);\n\n        svd_fast(A, u, w, v, rank+5, 0);\n        DLIB_TEST(max(abs(trans(u)*u - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(trans(v)*v - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(tmp(A - u*diagm(w)*trans(v)))) < 1e-11);\n        svd_fast(mat_to_sparse(A), u, w, v, rank+5, 0);\n        DLIB_TEST(max(abs(trans(u)*u - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(trans(v)*v - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(tmp(A - u*diagm(w)*trans(v)))) < 1e-11);\n        svd_fast(A, u, w, v, rank+5, 1);\n        DLIB_TEST(max(abs(trans(u)*u - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(trans(v)*v - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(tmp(A - u*diagm(w)*trans(v)))) < 1e-12);\n        svd_fast(mat_to_sparse(A), u, w, v, rank+5, 1);\n        DLIB_TEST(max(abs(trans(u)*u - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(trans(v)*v - identity_matrix<double>(u.nc()))) < 1e-13);\n        DLIB_TEST(max(abs(tmp(A - u*diagm(w)*trans(v)))) < 1e-12);\n    }\n\n    void test_svd_fast()\n    {\n        for (int iter = 0; iter < 1000; ++iter)\n        {\n            const unsigned long rank = rnd.get_random_32bit_number()%10 + 1;\n            const unsigned long m = rank + rnd.get_random_32bit_number()%10;\n            const unsigned long n = rank + rnd.get_random_32bit_number()%10;\n\n            test_svd_fast(rank, m, n);\n\n        }\n        test_svd_fast(1, 1, 1);\n        test_svd_fast(1, 2, 2);\n        test_svd_fast(1, 1, 2);\n        test_svd_fast(1, 2, 1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_cca : public tester\n    {\n    public:\n        test_cca (\n        ) :\n            tester (\"test_cca\",\n                \"Runs tests on the cca() and svd_fast() routines.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            for (int i = 0; i < 200; ++i)\n            {\n                test_cca1();\n                test_cca2();\n                test_cca3();\n            }\n            test_svd_fast();\n        }\n    } a;\n\n\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/checkerboard.h",
    "content": "#ifndef DLIB_CHECKERBOARD_TeST_H_\n#define DLIB_CHECKERBOARD_TeST_H_\n\n#include <dlib/matrix.h>\n#include <vector>\n#include <dlib/rand.h>\n\nnamespace dlib\n{\n\n    template <typename scalar_type>\n    void get_checkerboard_problem (\n        std::vector<matrix<scalar_type,2,1> >& x,\n        std::vector<scalar_type>& y,\n        const long num_samples,\n        const long board_dimension = 8\n    )\n    /*!\n        requires\n            - num_samples > 0\n            - board_dimension > 0\n        ensures\n            - #x.size() == y.size() == num_samples\n            - is_binary_classification_problem(#x,#y) == true\n            - #x will contain points and #y labels that were\n              sampled randomly from a checkers board that has \n              board_dimension squares on each side. \n    !*/\n    {\n        static dlib::rand rnd;\n\n        x.clear();\n        y.clear();\n\n        matrix<scalar_type,2,1> sample;\n        for (long i = 0; i < num_samples; ++i)\n        {\n            sample(0) = rnd.get_random_double();\n            sample(1) = rnd.get_random_double();\n            sample *= board_dimension;\n\n            x.push_back(sample);\n            if (((int)sum(floor(sample)) %2) == 0)\n                y.push_back(+1);\n            else\n                y.push_back(-1);\n            \n        }\n    }\n\n\n}\n\n#endif // DLIB_CHECKERBOARD_TeST_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/clustering.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <dlib/clustering.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.clustering\");\n\n// ----------------------------------------------------------------------------------------\n\n    void make_test_graph(\n        dlib::rand& rnd,\n        std::vector<sample_pair>& edges,\n        std::vector<unsigned long>& labels,\n        const int groups,\n        const int group_size,\n        const int noise_level,\n        const double missed_edges\n    )\n    {\n        labels.resize(groups*group_size);\n\n        for (unsigned long i = 0; i < labels.size(); ++i)\n        {\n            labels[i] = i/group_size;\n        }\n\n        edges.clear();\n        for (int i = 0; i < groups; ++i)\n        {\n            for (int j = 0; j < group_size; ++j)\n            {\n                for (int k = 0; k < group_size; ++k)\n                {\n                    if (j == k)\n                        continue;\n\n                    if (rnd.get_random_double() < missed_edges)\n                        continue;\n\n                    edges.push_back(sample_pair(j+group_size*i, k+group_size*i, 1));\n                }\n            }\n        }\n\n        for (int k = 0; k < groups*noise_level; ++k)\n        {\n            const int i = rnd.get_random_32bit_number()%labels.size();\n            const int j = rnd.get_random_32bit_number()%labels.size();\n            edges.push_back(sample_pair(i,j,1));\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void make_modularity_matrices (\n        const std::vector<sample_pair>& edges,\n        matrix<double>& A,\n        matrix<double>& P,\n        double& m\n    )\n    {\n        const unsigned long num_nodes = max_index_plus_one(edges);\n        A.set_size(num_nodes, num_nodes);\n        P.set_size(num_nodes, num_nodes);\n        A = 0;\n        P = 0;\n        std::vector<double> k(num_nodes,0);\n\n        for (unsigned long i = 0; i < edges.size(); ++i)\n        {\n            const unsigned long n1 = edges[i].index1();\n            const unsigned long n2 = edges[i].index2();\n            k[n1] += edges[i].distance();\n            if (n1 != n2)\n            {\n                k[n2] += edges[i].distance();\n                A(n2,n1) += edges[i].distance();\n            }\n\n            A(n1,n2) += edges[i].distance();\n        }\n\n        m = sum(A)/2;\n\n        for (long r = 0; r < P.nr(); ++r)\n        {\n            for (long c = 0; c < P.nc(); ++c)\n            {\n                P(r,c) = k[r]*k[c]/(2*m);\n            }\n        }\n\n    }\n\n    double compute_modularity_simple (\n        const std::vector<sample_pair>& edges,\n        std::vector<unsigned long> labels\n    )\n    {\n        double m;\n        matrix<double> A,P;\n        make_modularity_matrices(edges, A, P, m);\n        matrix<double> B = A - P;\n\n        double Q = 0;\n        for (long r = 0; r < B.nr(); ++r)\n        {\n            for (long c = 0; c < B.nc(); ++c)\n            {\n                if (labels[r] == labels[c])\n                {\n                    Q += B(r,c);\n                }\n            }\n        }\n        return 1.0/(2*m) * Q;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_modularity(dlib::rand& rnd)\n    {\n        print_spinner();\n        std::vector<sample_pair> edges;\n        std::vector<ordered_sample_pair> oedges;\n        std::vector<unsigned long> labels;\n\n        make_test_graph(rnd, edges, labels, 10, 30, 3, 0.10);\n        if (rnd.get_random_double() < 0.5)\n            remove_duplicate_edges(edges);\n        convert_unordered_to_ordered(edges, oedges);\n\n\n        const double m1 = modularity(edges, labels);\n        const double m2 = compute_modularity_simple(edges, labels);\n        const double m3 = modularity(oedges, labels);\n\n        DLIB_TEST(std::abs(m1-m2) < 1e-12);\n        DLIB_TEST(std::abs(m2-m3) < 1e-12);\n        DLIB_TEST(std::abs(m3-m1) < 1e-12);\n    }\n\n    void test_newman_clustering(dlib::rand& rnd)\n    {\n        print_spinner();\n        std::vector<sample_pair> edges;\n        std::vector<unsigned long> labels;\n\n        make_test_graph(rnd, edges, labels, 5, 30, 3, 0.10);\n        if (rnd.get_random_double() < 0.5)\n            remove_duplicate_edges(edges);\n\n\n        std::vector<unsigned long> labels2;\n\n        unsigned long num_clusters = newman_cluster(edges, labels2);\n        DLIB_TEST(labels.size() == labels2.size());\n        DLIB_TEST(num_clusters == 5);\n\n        for (unsigned long i = 0; i < labels.size(); ++i)\n        {\n            for (unsigned long j = 0; j < labels.size(); ++j)\n            {\n                if (labels[i] == labels[j])\n                {\n                    DLIB_TEST(labels2[i] == labels2[j]);\n                }\n                else\n                {\n                    DLIB_TEST(labels2[i] != labels2[j]);\n                }\n            }\n        }\n    }\n\n    void test_chinese_whispers(dlib::rand& rnd)\n    {\n        print_spinner();\n        std::vector<sample_pair> edges;\n        std::vector<unsigned long> labels;\n\n        make_test_graph(rnd, edges, labels, 5, 30, 3, 0.10);\n        if (rnd.get_random_double() < 0.5)\n            remove_duplicate_edges(edges);\n\n\n        std::vector<unsigned long> labels2;\n\n        unsigned long num_clusters;\n        if (rnd.get_random_double() < 0.5)\n            num_clusters = chinese_whispers(edges, labels2, 200, rnd);\n        else\n            num_clusters = chinese_whispers(edges, labels2);\n\n        DLIB_TEST(labels.size() == labels2.size());\n        DLIB_TEST(num_clusters == 5);\n\n        for (unsigned long i = 0; i < labels.size(); ++i)\n        {\n            for (unsigned long j = 0; j < labels.size(); ++j)\n            {\n                if (labels[i] == labels[j])\n                {\n                    DLIB_TEST(labels2[i] == labels2[j]);\n                }\n                else\n                {\n                    DLIB_TEST(labels2[i] != labels2[j]);\n                }\n            }\n        }\n    }\n\n    class test_clustering : public tester\n    {\n    public:\n        test_clustering (\n        ) :\n            tester (\"test_clustering\",\n                    \"Runs tests on the clustering routines.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlib::rand rnd;\n\n            std::vector<sample_pair> edges;\n            std::vector<unsigned long> labels;\n            DLIB_TEST(newman_cluster(edges, labels) == 0);\n            DLIB_TEST(chinese_whispers(edges, labels) == 0);\n\n            edges.push_back(sample_pair(0,1,1));\n            DLIB_TEST(newman_cluster(edges, labels) == 1);\n            DLIB_TEST(labels.size() == 2);\n            DLIB_TEST(chinese_whispers(edges, labels) == 1);\n            DLIB_TEST(labels.size() == 2);\n\n            edges.clear();\n            edges.push_back(sample_pair(0,0,1));\n            DLIB_TEST(newman_cluster(edges, labels) == 1);\n            DLIB_TEST(labels.size() == 1);\n            DLIB_TEST(chinese_whispers(edges, labels) == 1);\n            DLIB_TEST(labels.size() == 1);\n\n            edges.clear();\n            edges.push_back(sample_pair(1,1,1));\n            DLIB_TEST(newman_cluster(edges, labels) == 1);\n            DLIB_TEST(labels.size() == 2);\n            DLIB_TEST(chinese_whispers(edges, labels) == 2);\n            DLIB_TEST(labels.size() == 2);\n\n            edges.push_back(sample_pair(0,0,1));\n            DLIB_TEST(newman_cluster(edges, labels) == 2);\n            DLIB_TEST(labels.size() == 2);\n            DLIB_TEST(chinese_whispers(edges, labels) == 2);\n            DLIB_TEST(labels.size() == 2);\n\n\n            for (int i = 0; i < 10; ++i)\n                test_modularity(rnd);\n\n            for (int i = 0; i < 10; ++i)\n                test_newman_clustering(rnd);\n\n            for (int i = 0; i < 10; ++i)\n                test_chinese_whispers(rnd);\n\n\n        }\n    } a;\n\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/cmd_line_parser.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <string>\n#include <dlib/string.h>\n\n#include <dlib/cmd_line_parser.h>\n\n#include \"tester.h\"\n\n#include \"cmd_line_parser.h\"\nnamespace  \n{\n\n    class cmd_line_parser_tester : public tester\n    {\n    public:\n        cmd_line_parser_tester (\n        ) :\n            tester (\"test_cmd_line_parser_char\",\n                    \"Runs tests on the cmd_line_parser component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a with char\";\n            cmd_line_parser_kernel_test<cmd_line_parser<char>::kernel_1a>();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_1a_c with char\";\n            cmd_line_parser_kernel_test<cmd_line_parser<char>::kernel_1a_c>();\n            print_spinner();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/cmd_line_parser.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CMD_LINE_PARSER_KERNEl_TEST_H_\n#define DLIB_CMD_LINE_PARSER_KERNEl_TEST_H_\n\n\n#include <string>\n#include <dlib/string.h>\n\n#include <dlib/cmd_line_parser.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.cmd_line_parser\");\n\n    template <\n        typename clp\n        >\n    void cmd_line_parser_kernel_test (\n    )\n    /*!\n        requires\n            - clp is an implementation of cmd_line_parser_kernel_abstract.h\n        ensures\n            - runs tests on clp for compliance with the specs \n    !*/\n    {        \n        typedef typename clp::char_type ct;\n\n\n\n\n        int argc;\n        const ct* argv[100];            \n        bool ok;\n\n        for (int j = 0; j < 3; ++j)\n        {\n            clp test, test2;\n\n\n\n\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start());\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n\n            DLIB_TEST(test.parsed_line() == false);\n            DLIB_TEST(test.option_is_defined(_dT(ct,\"a\")) == false);\n            DLIB_TEST(test.option_is_defined(_dT(ct,\"a\")) == false);\n            DLIB_TEST(test.option_is_defined(_dT(ct,\"a\")) == false);\n\n            DLIB_TEST(test.parsed_line() == false);\n            DLIB_TEST(test.option_is_defined(_dT(ct,\"a\")) == false);\n            DLIB_TEST(test.option_is_defined(_dT(ct,\"b\")) == false);\n            DLIB_TEST(test.option_is_defined(_dT(ct,\"\\0\")) == false);\n\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n\n            // program arg1 --davis arg2 -cZzarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis\");\n            argv[3] = _dT(ct,\"arg2\");\n            argv[4] = _dT(ct,\"-cZzarg\");\n            argv[5] = _dT(ct,\"asdf\");\n            argc = 6;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"));\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                try { test.parse(argc,argv); }\n                catch (error& e)\n                {\n                    DLIB_TEST_MSG(false,e.info);\n                }\n\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).name() == _dT(ct,\"davis\"));\n                DLIB_TEST(test.option(_dT(ct,\"c\")).name() == _dT(ct,\"c\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).name() == _dT(ct,\"Z\"));\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).number_of_arguments() == 0);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).number_of_arguments() == 0);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).number_of_arguments() == 2);\n                DLIB_TEST(test.number_of_arguments() == 2);\n                DLIB_TEST(test[0] == _dT(ct,\"arg1\"));\n                DLIB_TEST(test[1] == _dT(ct,\"arg2\"));\n                DLIB_TEST(test.option(_dT(ct,\"d\")).count()==0);\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).count()==1);\n                DLIB_TEST_MSG(test.option(_dT(ct,\"c\")).count()==1,test.option(_dT(ct,\"c\")).count());\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(0,0) == _dT(ct,\"zarg\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(1,0) == _dT(ct,\"asdf\"));\n\n            }\n\n\n\n            swap(test,test2);\n\n\n\n\n\n            // program arg1 --davis arg2 -cZ zarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis\");\n            argv[3] = _dT(ct,\"arg2\");\n            argv[4] = _dT(ct,\"-cZ\");\n            argv[5] = _dT(ct,\"zarg\");\n            argv[6] = _dT(ct,\"asdf\");\n            argc = 7;\n\n\n\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                try { test2.parse(argc,argv); }\n                catch (error& e)\n                {\n                    DLIB_TEST_MSG(false,e.info);\n                }\n\n                DLIB_TEST(test2.option(_dT(ct,\"davis\")).name() == _dT(ct,\"davis\"));\n                DLIB_TEST(test2.option(_dT(ct,\"c\")).name() == _dT(ct,\"c\"));\n                DLIB_TEST(test2.option(_dT(ct,\"Z\")).name() == _dT(ct,\"Z\"));\n                DLIB_TEST(test2.option(_dT(ct,\"davis\")).number_of_arguments() == 0);\n                DLIB_TEST(test2.option(_dT(ct,\"c\")).number_of_arguments() == 0);\n                DLIB_TEST(test2.option(_dT(ct,\"Z\")).number_of_arguments() == 2);\n                DLIB_TEST(test2.number_of_arguments() == 2);\n                DLIB_TEST(test2[0] == _dT(ct,\"arg1\"));\n                DLIB_TEST(test2[1] == _dT(ct,\"arg2\"));\n                DLIB_TEST(test2.option(_dT(ct,\"d\")).count()==0);\n                DLIB_TEST(test2.option(_dT(ct,\"davis\")).count()==1);\n                DLIB_TEST(test2.option(_dT(ct,\"c\")).count()==1);\n                DLIB_TEST(test2.option(_dT(ct,\"Z\")).count()==1);\n                DLIB_TEST(test2.option(_dT(ct,\"Z\")).argument(1,0) == _dT(ct,\"asdf\"));\n                DLIB_TEST_MSG(test2.option(_dT(ct,\"Z\")).argument(0,0) == _dT(ct,\"zarg\"),\n                             narrow(_dT(ct,\"*\") + test2.option(_dT(ct,\"Z\")).argument(0,0) + _dT(ct,\"*\")));\n\n\n            }\n\n\n\n\n\n            // program arg1 --davis= darg darg2 arg2 -cZzarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis=\");\n            argv[3] = _dT(ct,\"darg\");\n            argv[4] = _dT(ct,\"darg2\");\n            argv[5] = _dT(ct,\"arg2\");\n            argv[6] = _dT(ct,\"-cZzarg\");\n            argv[7] = _dT(ct,\"asdf\");\n            argc = 8;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"), 2);\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                try { test.parse(argc,argv); }\n                catch (error& e)\n                {\n                    DLIB_TEST_MSG(false,e.info);\n                }\n\n                DLIB_TEST(test.parsed_line());\n\n                int count = 0;\n                while (test.move_next())\n                {\n                    ++count;\n                    if (test.element().name() == _dT(ct,\"d\"))\n                    {\n                        DLIB_TEST(test.element().count() == 0);\n                    }\n                    else\n                    {                            \n                        DLIB_TEST(test.element().count() == 1);\n                    }\n\n                }\n                DLIB_TEST_MSG(count == 4,count);\n\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).name() == _dT(ct,\"davis\"));\n                DLIB_TEST(test.option(_dT(ct,\"c\")).name() == _dT(ct,\"c\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).name() == _dT(ct,\"Z\"));\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).number_of_arguments() == 2);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).number_of_arguments() == 0);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).number_of_arguments() == 2);\n                DLIB_TEST(test.number_of_arguments() == 2);\n                DLIB_TEST(test[0] == _dT(ct,\"arg1\"));\n                DLIB_TEST(test[1] == _dT(ct,\"arg2\"));\n                DLIB_TEST(test.option(_dT(ct,\"d\")).count()==0);\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(0,0) == _dT(ct,\"zarg\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(1,0) == _dT(ct,\"asdf\"));\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).argument(0,0) == _dT(ct,\"darg\"));\n                DLIB_TEST_MSG(test.option(_dT(ct,\"davis\")).argument(1,0) == _dT(ct,\"darg2\"),\n                             narrow(test.option(_dT(ct,\"davis\")).argument(1,0)));\n            }\n\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n\n\n\n\n\n\n            // program arg1 --dav-is=darg darg2 arg2 -cZzarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--dav-is=darg\");\n            argv[3] = _dT(ct,\"darg2\");\n            argv[4] = _dT(ct,\"arg2\");\n            argv[5] = _dT(ct,\"-cZzarg\");\n            argv[6] = _dT(ct,\"asdf\");\n            argc = 7;\n\n\n            test.add_option(_dT(ct,\"dav-is\"),_dT(ct,\"davis option\"), 2);\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                try { test.parse(argc,argv); }\n                catch (error& e)\n                {\n                    DLIB_TEST_MSG(false,e.info);\n                }\n\n                DLIB_TEST(test.parsed_line());\n\n                int count = 0;\n                while (test.move_next())\n                {\n                    ++count;\n                    if (test.element().name() == _dT(ct,\"d\"))\n                    {\n                        DLIB_TEST(test.element().count() == 0);\n                    }\n                    else\n                    {                            \n                        DLIB_TEST(test.element().count() == 1);\n                    }\n\n                }\n                DLIB_TEST_MSG(count == 4,count);\n\n                DLIB_TEST(test.option(_dT(ct,\"dav-is\")).name() == _dT(ct,\"dav-is\"));\n                DLIB_TEST(test.option(_dT(ct,\"c\")).name() == _dT(ct,\"c\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).name() == _dT(ct,\"Z\"));\n                DLIB_TEST(test.option(_dT(ct,\"dav-is\")).number_of_arguments() == 2);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).number_of_arguments() == 0);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).number_of_arguments() == 2);\n                DLIB_TEST(test.number_of_arguments() == 2);\n                DLIB_TEST(test[0] == _dT(ct,\"arg1\"));\n                DLIB_TEST(test[1] == _dT(ct,\"arg2\"));\n                DLIB_TEST(test.option(_dT(ct,\"d\")).count()==0);\n                DLIB_TEST(test.option(_dT(ct,\"dav-is\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(0,0) == _dT(ct,\"zarg\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(1,0) == _dT(ct,\"asdf\"));\n                DLIB_TEST(test.option(_dT(ct,\"dav-is\")).argument(0,0) == _dT(ct,\"darg\"));\n                DLIB_TEST_MSG(test.option(_dT(ct,\"dav-is\")).argument(1,0) == _dT(ct,\"darg2\"),\n                             narrow(test.option(_dT(ct,\"dav-is\")).argument(1,0)));\n            }\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n\n\n\n\n\n\n            // program arg1 --davis=darg darg2 arg2 -cZzarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis=darg\");\n            argv[3] = _dT(ct,\"darg2\");\n            argv[4] = _dT(ct,\"arg2\");\n            argv[5] = _dT(ct,\"-cZzarg\");\n            argv[6] = _dT(ct,\"asdf\");\n            argc = 7;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"), 2);\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                try { test.parse(argc,argv); }\n                catch (error& e)\n                {\n                    DLIB_TEST_MSG(false,e.info);\n                }\n\n                DLIB_TEST(test.parsed_line());\n\n                int count = 0;\n                while (test.move_next())\n                {\n                    ++count;\n                    if (test.element().name() == _dT(ct,\"d\"))\n                    {\n                        DLIB_TEST(test.element().count() == 0);\n                    }\n                    else\n                    {                            \n                        DLIB_TEST(test.element().count() == 1);\n                    }\n\n                }\n                DLIB_TEST_MSG(count == 4,count);\n\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).name() == _dT(ct,\"davis\"));\n                DLIB_TEST(test.option(_dT(ct,\"c\")).name() == _dT(ct,\"c\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).name() == _dT(ct,\"Z\"));\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).number_of_arguments() == 2);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).number_of_arguments() == 0);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).number_of_arguments() == 2);\n                DLIB_TEST(test.number_of_arguments() == 2);\n                DLIB_TEST(test[0] == _dT(ct,\"arg1\"));\n                DLIB_TEST(test[1] == _dT(ct,\"arg2\"));\n                DLIB_TEST(test.option(_dT(ct,\"d\")).count()==0);\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(0,0) == _dT(ct,\"zarg\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(1,0) == _dT(ct,\"asdf\"));\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).argument(0,0) == _dT(ct,\"darg\"));\n                DLIB_TEST_MSG(test.option(_dT(ct,\"davis\")).argument(1,0) == _dT(ct,\"darg2\"),\n                             narrow(test.option(_dT(ct,\"davis\")).argument(1,0)));\n            }\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n\n\n\n\n\n\n            // program arg1 --davis=darg arg2 -cZzarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis=darg\");\n            argv[3] = _dT(ct,\"arg2\");\n            argv[4] = _dT(ct,\"-cZzarg\");\n            argv[5] = _dT(ct,\"asdf\");\n            argc = 6;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"), 1);\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                try { test.parse(argc,argv); }\n                catch (error& e)\n                {\n                    DLIB_TEST_MSG(false,e.info);\n                }\n\n                DLIB_TEST(test.parsed_line());\n\n                int count = 0;\n                while (test.move_next())\n                {\n                    ++count;\n                    if (test.element().name() == _dT(ct,\"d\"))\n                    {\n                        DLIB_TEST(test.element().count() == 0);\n                    }\n                    else\n                    {                            \n                        DLIB_TEST(test.element().count() == 1);\n                    }\n\n                }\n                DLIB_TEST_MSG(count == 4,count);\n\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).name() == _dT(ct,\"davis\"));\n                DLIB_TEST(test.option(_dT(ct,\"c\")).name() == _dT(ct,\"c\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).name() == _dT(ct,\"Z\"));\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).number_of_arguments() == 1);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).number_of_arguments() == 0);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).number_of_arguments() == 2);\n                DLIB_TEST(test.number_of_arguments() == 2);\n                DLIB_TEST(test[0] == _dT(ct,\"arg1\"));\n                DLIB_TEST(test[1] == _dT(ct,\"arg2\"));\n                DLIB_TEST(test.option(_dT(ct,\"d\")).count()==0);\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(0,0) == _dT(ct,\"zarg\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(1,0) == _dT(ct,\"asdf\"));\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).argument(0,0) == _dT(ct,\"darg\"));\n            }\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n\n\n\n\n\n            // program arg1 --davis darg arg2 -cZzarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis\");\n            argv[3] = _dT(ct,\"darg\");\n            argv[4] = _dT(ct,\"arg2\");\n            argv[5] = _dT(ct,\"-cZzarg\");\n            argv[6] = _dT(ct,\"asdf\");\n            argc = 7;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"), 1);\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                try { test.parse(argc,argv); }\n                catch (error& e)\n                {\n                    DLIB_TEST_MSG(false,e.info);\n                }\n\n                DLIB_TEST(test.parsed_line());\n\n                int count = 0;\n                while (test.move_next())\n                {\n                    ++count;\n                    if (test.element().name() == _dT(ct,\"d\"))\n                    {\n                        DLIB_TEST(test.element().count() == 0);\n                    }\n                    else\n                    {                            \n                        DLIB_TEST(test.element().count() == 1);\n                    }\n\n                }\n                DLIB_TEST_MSG(count == 4,count);\n\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).name() == _dT(ct,\"davis\"));\n                DLIB_TEST(test.option(_dT(ct,\"c\")).name() == _dT(ct,\"c\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).name() == _dT(ct,\"Z\"));\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).number_of_arguments() == 1);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).number_of_arguments() == 0);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).number_of_arguments() == 2);\n                DLIB_TEST(test.number_of_arguments() == 2);\n                DLIB_TEST(test[0] == _dT(ct,\"arg1\"));\n                DLIB_TEST(test[1] == _dT(ct,\"arg2\"));\n                DLIB_TEST(test.option(_dT(ct,\"d\")).count()==0);\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"c\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(0,0) == _dT(ct,\"zarg\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(1) == _dT(ct,\"asdf\"));\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).argument(0,0) == _dT(ct,\"darg\"));\n            }\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n            // this string is incorrect because there is no avis option\n            // program arg1 --avis darg arg2 -cZzarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--avis\");\n            argv[3] = _dT(ct,\"darg\");\n            argv[4] = _dT(ct,\"arg2\");\n            argv[5] = _dT(ct,\"-cZzarg\");\n            argv[6] = _dT(ct,\"asdf\");\n            argc = 7;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"), 1);\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                ok = false;\n                try { test.parse(argc,argv); }\n                catch (typename clp::cmd_line_parse_error& e)\n                {\n                    DLIB_TEST(e.type == EINVALID_OPTION);\n                    DLIB_TEST(e.item == _dT(ct,\"avis\"));\n                    ok = true;\n                }\n                DLIB_TEST(ok);\n\n\n            }\n\n\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n            // the c argument appears twice.  make sure its count is correct\n            // program arg1 --davis darg arg2 -ccZzarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis\");\n            argv[3] = _dT(ct,\"darg\");\n            argv[4] = _dT(ct,\"arg2\");\n            argv[5] = _dT(ct,\"-ccZ\");\n            argv[6] = _dT(ct,\"zarg\");\n            argv[7] = _dT(ct,\"asdf\");\n            argc = 8;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"), 1);\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                ok = false;\n                test.parse(argc,argv); \n\n                DLIB_TEST(test.option(_dT(ct,\"c\")).count()==2);\n\n            }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n            // this is a bad line because the davis argument requires 2 arguments but\n            // only gets one. \n            // program arg1 --davis darg darg2 --davis zarg \n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis\");\n            argv[3] = _dT(ct,\"darg\");\n            argv[4] = _dT(ct,\"darg2\");\n            argv[5] = _dT(ct,\"--davis\");\n            argv[6] = _dT(ct,\"zarg\");\n            argc = 7;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"), 2);\n            test.add_option(_dT(ct,\"b\"),_dT(ct,\"b option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            DLIB_TEST(test.option(_dT(ct,\"davis\")).description() == _dT(ct,\"davis option\"));\n            DLIB_TEST(test.option(_dT(ct,\"b\")).description() == _dT(ct,\"b option\"));\n            DLIB_TEST(test.option(_dT(ct,\"d\")).description() == _dT(ct,\"d option\"));\n            DLIB_TEST(test.option(_dT(ct,\"Z\")).description() == _dT(ct,\"Z option\"));\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                ok = false;\n                try { test.parse(argc,argv); }\n                catch (typename clp::cmd_line_parse_error& e)\n                {\n                    DLIB_TEST(e.type == ETOO_FEW_ARGS);\n                    DLIB_TEST(e.num == 2);\n                    DLIB_TEST(e.item == _dT(ct,\"davis\"));\n                    ok = true;\n                }\n                DLIB_TEST(ok);\n\n\n\n                int count = 0;\n                while (test.move_next())\n                {\n                    ++count;\n                    DLIB_TEST(test.element().count() == 0);\n                    DLIB_TEST(test.option_is_defined(test.element().name()));\n                }\n                DLIB_TEST_MSG(count == 4,count);\n\n\n            }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n            // this is a bad line because the davis argument is not defined\n            // program arg1 --davis darg arg2 -davis zarg asdf\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis\");\n            argv[3] = _dT(ct,\"darg\");\n            argv[4] = _dT(ct,\"arg2\");\n            argv[5] = _dT(ct,\"--davis\");\n            argv[6] = _dT(ct,\"zarg\");\n            argv[7] = _dT(ct,\"asdf\");\n            argc = 8;\n\n\n\t\t\tDLIB_TEST(std::basic_string<ct>(argv[0]) == _dT(ct,\"program\"));\n\n            test.add_option(_dT(ct,\"mavis\"),_dT(ct,\"mavis option\"), 1);\n            test.add_option(_dT(ct,\"b\"),_dT(ct,\"b option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            DLIB_TEST(test.option(_dT(ct,\"mavis\")).description() == _dT(ct,\"mavis option\"));\n            DLIB_TEST(test.option(_dT(ct,\"b\")).description() == _dT(ct,\"b option\"));\n            DLIB_TEST(test.option(_dT(ct,\"d\")).description() == _dT(ct,\"d option\"));\n            DLIB_TEST(test.option(_dT(ct,\"Z\")).description() == _dT(ct,\"Z option\"));\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                ok = false;\n                try { test.parse(argc,argv); }\n                catch (typename clp::cmd_line_parse_error& e)\n                {\n                    DLIB_TEST(e.type == EINVALID_OPTION);\n                    DLIB_TEST(e.item == _dT(ct,\"davis\"));\n                    ok = true;\n                }\n                DLIB_TEST(ok);\n\n\n\n                int count = 0;\n                while (test.move_next())\n                {\n                    ++count;\n                    DLIB_TEST(test.element().count() == 0);\n                    DLIB_TEST(test.option_is_defined(test.element().name()));\n                }\n                DLIB_TEST_MSG(count == 4,count);\n\n\n            }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n\n            argv[0] = _dT(ct,\"program\");\n            argc = 1;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"), 1);\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),2);\n\n\n            DLIB_TEST(test.option(_dT(ct,\"davis\")).description() == _dT(ct,\"davis option\"));\n            DLIB_TEST(test.option(_dT(ct,\"c\")).description() == _dT(ct,\"c option\"));\n            DLIB_TEST(test.option(_dT(ct,\"d\")).description() == _dT(ct,\"d option\"));\n            DLIB_TEST(test.option(_dT(ct,\"Z\")).description() == _dT(ct,\"Z option\"));\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                test.parse(argc,argv); \n\n\n                DLIB_TEST(test.number_of_arguments() == 0);\n\n                int count = 0;\n                while (test.move_next())\n                {\n                    ++count;\n                    DLIB_TEST(test.element().count() == 0);\n                    DLIB_TEST(test.option_is_defined(test.element().name()));\n                }\n                DLIB_TEST_MSG(count == 4,count);\n\n\n            }\n\n\n\n\n\n\n\n\n\n\n\n\n            test.clear();\n\n            // this is to make sure the -- command works right\n            // program arg1 --davis -darg -- arg2 -c asdf -Zeat -Zat -Zjoe's\n            argv[0] = _dT(ct,\"program\");\n            argv[1] = _dT(ct,\"arg1\");\n            argv[2] = _dT(ct,\"--davis\");\n            argv[3] = _dT(ct,\"-darg\");\n            argv[4] = _dT(ct,\"-Zeat\");\n            argv[5] = _dT(ct,\"-Zat\");\n            argv[6] = _dT(ct,\"-Zjoe's\");\n            argv[7] = _dT(ct,\"--\");\n            argv[8] = _dT(ct,\"arg2\");\n            argv[9] = _dT(ct,\"-c\");\n            argv[10] = _dT(ct,\"asdf\");\n\n            argc = 11;\n\n\n            test.add_option(_dT(ct,\"davis\"),_dT(ct,\"davis option\"), 1);\n            test.add_option(_dT(ct,\"c\"),_dT(ct,\"c option\"));\n            test.add_option(_dT(ct,\"d\"),_dT(ct,\"d option\"));\n            test.add_option(_dT(ct,\"Z\"),_dT(ct,\"Z option\"),1);\n\n\n            DLIB_TEST(test.option(_dT(ct,\"davis\")).description() == _dT(ct,\"davis option\"));\n            DLIB_TEST(test.option(_dT(ct,\"c\")).description() == _dT(ct,\"c option\"));\n            DLIB_TEST(test.option(_dT(ct,\"d\")).description() == _dT(ct,\"d option\"));\n            DLIB_TEST(test.option(_dT(ct,\"Z\")).description() == _dT(ct,\"Z option\"));\n\n            for (int k = 0; k < 5; ++k)\n            {\n\n                test.parse(argc,argv);\n\n                DLIB_TEST_MSG(test.number_of_arguments() == 4,test.number_of_arguments());\n                DLIB_TEST(test[0] == _dT(ct,\"arg1\"));\n                DLIB_TEST(test[1] == _dT(ct,\"arg2\"));\n                DLIB_TEST(test[2] == _dT(ct,\"-c\"));\n                DLIB_TEST(test[3] == _dT(ct,\"asdf\"));\n\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).count()==1);\n                DLIB_TEST(test.option(_dT(ct,\"davis\")).argument() == _dT(ct,\"-darg\"));\n                DLIB_TEST(test.option(_dT(ct,\"c\")).count()==0);\n                DLIB_TEST(test.option(_dT(ct,\"d\")).count()==0);\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).count()==3);\n\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(0,0) == _dT(ct,\"eat\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(0,1) == _dT(ct,\"at\"));\n                DLIB_TEST(test.option(_dT(ct,\"Z\")).argument(0,2) == _dT(ct,\"joe's\"));\n\n\n            }\n\n\n        }\n    }\n\n}\n\n\n#endif // DLIB_CMD_LINE_PARSER_KERNEl_TEST_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/cmd_line_parser_wchar_t.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <string>\n#include <dlib/string.h>\n\n#include <dlib/cmd_line_parser.h>\n\n#include \"tester.h\"\n\n#include \"cmd_line_parser.h\"\nnamespace  \n{\n\n    class cmd_line_parser_tester : public tester\n    {\n    public:\n        cmd_line_parser_tester (\n        ) :\n            tester (\"test_cmd_line_parser_wchar_t\",\n                    \"Runs tests on the cmd_line_parser<wchar_t> component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a with wchar_t\";\n            cmd_line_parser_kernel_test<cmd_line_parser<wchar_t>::kernel_1a>();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_1a_c with wchar_t\";\n            cmd_line_parser_kernel_test<cmd_line_parser<wchar_t>::kernel_1a_c>();\n            print_spinner();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/compress_stream.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <ctime>\n#include <cstdlib>\n\n#include <dlib/compress_stream.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.compress_stream\");\n\n    template <\n        typename cs\n        >\n    void compress_stream_kernel_test (\n        unsigned long seed\n    )\n    /*!\n        requires\n            - cs is an implementation of compress_stream/compress_stream_kernel_abstract.h            \n              the alphabet_size for cc is 256\n        ensures\n            - runs tests on cs for compliance with the specs \n    !*/\n    {        \n\n\n        srand(seed);\n\n        cs test;\n\n\n        dlog << LTRACE << 1;\n\n        int count = 0;\n        while (count < 2)\n        {\n            print_spinner();\n            istringstream sin;\n            ostringstream sout;\n            string buffer;\n            buffer.reserve(10000);\n            // fill sin with a bunch of random data in the range 0 to 63\n            for (int i = 0; i < 10000; ++i)\n            {\n                char temp = static_cast<char>(::rand()&0x3f);\n                buffer.push_back(temp);\n            }\n\n            print_spinner();\n            sin.str(buffer);\n            string old_buffer = buffer;\n\n            test.compress(sin,sout);\n            buffer = sout.str();\n\n            print_spinner();\n            // corrput the data in buffer\n            buffer[buffer.size()/2]++;\n\n            sin.str(buffer);\n            sout.str(\"\");\n\n            bool detected_error = false;\n            try {\n                test.decompress(sin,sout);\n            } catch ( typename cs::decompression_error e )\n            {\n                detected_error = true;\n                ++count;\n            }\n            \n\n            DLIB_TEST_MSG(detected_error || sout.str() == old_buffer,(unsigned int)sout.str().size());\n\n\n\n        } /**/\n\n\n        dlog << LTRACE << 2;\n\n        for (int j = 0; j < 2; ++j)\n        {\n\n            print_spinner();\n            istringstream sin;\n            ostringstream sout;\n\n            string buffer;\n\n            buffer.reserve(10);\n\n            // make sure a single char can be compressed and decompressed\n            for (int i = 0; i < 256; ++i)\n            {\n                sin.str(\"\");\n                sout.str(\"\");\n                char ch = static_cast<char>(i);\n                buffer = ch;\n                sin.str(buffer);\n\n                test.compress(sin,sout);\n\n                sin.str(sout.str());\n                sout.str(\"\");\n                test.decompress(sin,sout);\n                DLIB_TEST(sout.str() == buffer);                   \n            }\n\n            print_spinner();\n\n            // make sure you can compress a single char, then append a new\n            // compressed single char.  and make sure you can decode the\n            // two streams.  Just to make sure the decoder doesn't leave \n            // extra bytes behind or eat more than it should.\n            for (int i = 0; i < 500; ++i)\n            {\n                sin.str(\"\");\n                sin.clear();\n                sout.str(\"\");\n                sout.clear();\n                char ch = static_cast<char>(::rand()%256);\n                char ch2 = static_cast<char>(::rand()%256);\n\n                buffer = ch;\n                sin.str(buffer);\n\n\n\n                test.compress(sin,sout);\n\n\n\n\n                buffer = ch2;\n                sin.str(buffer);\n                test.compress(sin,sout);\n\n                sin.str(sout.str());\n\n                sout.str(\"\");\n                test.decompress(sin,sout);\n                buffer = ch;\n                DLIB_TEST(sout.str() == buffer);\n\n\n\n\n                sout.str(\"\");\n                test.decompress(sin,sout);\n                buffer = ch2;\n                DLIB_TEST(sout.str() == buffer);\n\n\n            }\n            print_spinner();\n\n\n            // make sure you can compress and decompress the empty string\n            sout.str(\"\");\n            sin.str(\"\");\n            test.compress(sin,sout);\n            sin.str(sout.str());\n            sout.str(\"\");\n            test.decompress(sin,sout);\n            DLIB_TEST_MSG(sout.str() == \"\",sout.str());\n\n\n\n\n\n            print_spinner();\n\n            sin.str(\"\");\n            sout.str(\"\");\n            buffer = \"\";\n\n            buffer.reserve(20000);\n            // fill buffer with a bunch of random data in the range 0 to 63\n            for (int i = 0; i < 20000; ++i)\n            {\n                char temp = static_cast<char>(::rand()&0x3f);\n                buffer.push_back(temp);\n            }\n\n            sin.str(buffer);\n\n            print_spinner();\n            test.compress(sin,sout);\n\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            print_spinner();\n            test.decompress(sin,sout);\n\n            DLIB_TEST(sout.str() == buffer);\n\n            print_spinner();\n        }\n\n        dlog << LTRACE << 3;\n\n        // this block will try to compress a bunch of 'a' chars\n        {\n\n            istringstream sin;\n            ostringstream sout;\n\n            string buffer;\n\n\n            print_spinner();\n\n            sin.str(\"\");\n            sout.str(\"\");\n            buffer = \"\";\n\n            buffer.reserve(50000);\n            // fill buffer with a bunch of 'a' chars\n            for (int i = 0; i < 50000; ++i)\n            {\n                char temp = 'a';\n                buffer.push_back(temp);\n            }\n\n            sin.str(buffer);\n\n            print_spinner();\n            test.compress(sin,sout);\n\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            print_spinner();\n            test.decompress(sin,sout);\n\n            DLIB_TEST(sout.str() == buffer);\n\n            print_spinner();\n\n        }\n\n        dlog << LTRACE << 4;\n\n    }\n\n\n\n\n\n\n    class compress_stream_tester : public tester\n    {\n    public:\n        compress_stream_tester (\n        ) :\n            tester (\"test_compress_stream\",\n                    \"Runs tests on the compress_stream component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            const unsigned int seed = static_cast<unsigned int>(time(0));\n            dlog << LINFO << \"using seed: \" << seed;\n\n            dlog << LINFO << \"testing kernel_1a\";\n            compress_stream_kernel_test<compress_stream::kernel_1a>(seed);\n            dlog << LINFO << \"testing kernel_1b\";\n            compress_stream_kernel_test<compress_stream::kernel_1b>(seed);\n            dlog << LINFO << \"testing kernel_1c\";\n            compress_stream_kernel_test<compress_stream::kernel_1c>(seed);\n            dlog << LINFO << \"testing kernel_1da\";\n            compress_stream_kernel_test<compress_stream::kernel_1da>(seed);\n            dlog << LINFO << \"testing kernel_1db\";\n            compress_stream_kernel_test<compress_stream::kernel_1db>(seed);\n            dlog << LINFO << \"testing kernel_1ea\";\n            compress_stream_kernel_test<compress_stream::kernel_1ea>(seed);\n            dlog << LINFO << \"testing kernel_1eb\";\n            compress_stream_kernel_test<compress_stream::kernel_1eb>(seed);\n            dlog << LINFO << \"testing kernel_1ec\";\n            compress_stream_kernel_test<compress_stream::kernel_1ec>(seed);\n            dlog << LINFO << \"testing kernel_2a\";\n            compress_stream_kernel_test<compress_stream::kernel_2a>(seed);\n            dlog << LINFO << \"testing kernel_3a\";\n            compress_stream_kernel_test<compress_stream::kernel_3a>(seed);\n            dlog << LINFO << \"testing kernel_3b\";\n            compress_stream_kernel_test<compress_stream::kernel_3b>(seed);\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/conditioning_class.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <ctime>\n#include <cstdlib>\n\n#include <dlib/conditioning_class.h>\n\n#include \"tester.h\"\n#include \"conditioning_class.h\"\n\nnamespace  \n{\n\n\n    class conditioning_class_tester : public tester\n    {\n    public:\n        conditioning_class_tester (\n        ) :\n            tester (\"test_conditioning_class\",\n                    \"Runs tests on the conditioning_class component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_1a,\n                conditioning_class<2>::kernel_1a\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_2a\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_2a,\n                conditioning_class<2>::kernel_2a\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_3a\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_3a,\n                conditioning_class<2>::kernel_3a\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_4a\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_4a,\n                conditioning_class<2>::kernel_4a\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_4b\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_4b,\n                conditioning_class<2>::kernel_4b\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_4c\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_4c,\n                conditioning_class<2>::kernel_4c\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_4d\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_4d,\n                conditioning_class<2>::kernel_4d\n                >();\n            print_spinner();\n\n\n        }\n    } a;\n\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/conditioning_class.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TEST_CONDITIONING_CLASs_H_\n#define DLIB_TEST_CONDITIONING_CLASs_H_\n\n\n#include <sstream>\n#include <string>\n#include <ctime>\n#include <cstdlib>\n\n#include <dlib/conditioning_class.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.conditioning_class\");\n\n    template <\n        typename cc,\n        typename cc2\n        >\n    void conditioning_class_kernel_test (\n    )\n    /*!\n        requires\n            - cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h            \n              the alphabet_size for cc is 256\n            - cc2 is an implementation of conditioning_class/conditioning_class_kernel_abstract.h            \n              the alphabet_size for cc2 is 2\n        ensures\n            - runs tests on cc for compliance with the specs \n    !*/\n    {        \n\n        srand(static_cast<unsigned int>(time(0)));\n\n\n\n        typename cc::global_state_type gs;\n        typename cc2::global_state_type gs2;\n\n\n\n\n        for (int g = 0; g < 2; ++g)\n        {\n            print_spinner();\n            unsigned long amount=g+1;\n            cc2 test(gs2);\n            cc2 test2(gs2);\n\n\n            DLIB_TEST(test.get_memory_usage() != 0);\n\n            const unsigned long alphabet_size = 2;                \n\n\n            DLIB_TEST(test.get_total() == 1);\n\n            DLIB_TEST(test.get_count(alphabet_size-1)==1);\n            for (unsigned long i = 0; i < alphabet_size-1; ++i)\n            {\n                unsigned long low_count, high_count, total_count;\n                DLIB_TEST_MSG(test.get_range(i,low_count,high_count,total_count) == 0,i);\n                DLIB_TEST(test.get_count(i) == 0);\n                DLIB_TEST(test.get_total() == 1);\n            }\n\n\n\n            for (unsigned long i = 0; i < alphabet_size; ++i)\n            {\n                test.increment_count(i,static_cast<unsigned short>(amount));\n                unsigned long low_count = 0, high_count = 0, total_count = 0;\n\n                if (i ==alphabet_size-1)\n                {\n                    DLIB_TEST(test.get_range(i,low_count,high_count,total_count) == 1+amount);\n\n                    DLIB_TEST(high_count == low_count+1+amount);\n                    DLIB_TEST(total_count == test.get_total());\n\n\n                    DLIB_TEST(test.get_count(i) == 1+amount);\n                }\n                else\n                {\n                    DLIB_TEST(test.get_range(i,low_count,high_count,total_count) == amount);\n\n                    DLIB_TEST(high_count == low_count+amount);\n                    DLIB_TEST(total_count == test.get_total());\n\n\n                    DLIB_TEST(test.get_count(i) == amount);\n                }\n                DLIB_TEST(test.get_total() == (i+1)*amount + 1);\n            } \n\n\n            for (unsigned long i = 0; i < alphabet_size; ++i)\n            {                \n                unsigned long temp = static_cast<unsigned long>(::rand()%40);\n                for (unsigned long j = 0; j < temp; ++j)\n                {\n                    test.increment_count(i,static_cast<unsigned short>(amount));\n                    if (i == alphabet_size-1)\n                    {\n                        DLIB_TEST(test.get_count(i) == (j+1)*amount + 1 + amount);                    \n                    }\n                    else\n                    {\n                        DLIB_TEST(test.get_count(i) == (j+1)*amount + amount);                    \n                    }\n                }\n\n                unsigned long target = test.get_total()/2;\n                unsigned long symbol = i, low_count = 0, high_count = 0, total_count = 0;\n\n                if (i == alphabet_size-1)\n                {\n                    DLIB_TEST(test.get_range(symbol,low_count,high_count,total_count)==temp*amount+1+amount);\n                    DLIB_TEST(high_count-low_count == temp*amount+1+amount);\n                }\n                else\n                {\n                    DLIB_TEST(test.get_range(symbol,low_count,high_count,total_count)==temp*amount + amount);\n                    DLIB_TEST(high_count-low_count == temp*amount + amount);\n                }\n                DLIB_TEST(total_count == test.get_total());\n\n                test.get_symbol(target,symbol,low_count,high_count);\n                DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                DLIB_TEST(low_count <= target);\n                DLIB_TEST(target < high_count);\n                DLIB_TEST(high_count <= test.get_total());\n\n            }\n\n            test.clear();\n\n\n            for (unsigned long i = 0; i < alphabet_size-1; ++i)\n            {\n                test.increment_count(i);\n                unsigned long low_count = 0, high_count = 0, total_count = 0;\n                DLIB_TEST(test.get_range(i,low_count,high_count,total_count) == 1);\n\n                DLIB_TEST(high_count == low_count+1);\n                DLIB_TEST(total_count == test.get_total());\n\n                DLIB_TEST(test.get_count(i) == 1);\n                DLIB_TEST(test.get_total() == i+2);\n            } \n\n\n\n\n            unsigned long counts[alphabet_size];\n\n\n            print_spinner();\n            for (int k = 0; k < 10; ++k)\n            {\n                unsigned long range = ::rand()%50000 + 2;\n\n                test.clear();\n\n                for (unsigned long i = 0; i < alphabet_size-1; ++i)\n                    counts[i] = 0;\n                unsigned long total = 1;\n                counts[alphabet_size-1] = 1;\n\n\n                for (unsigned long i = 0; i < alphabet_size; ++i)\n                {                \n                    unsigned long temp = static_cast<unsigned long>(::rand()%range);\n                    for (unsigned long j = 0; j < temp; ++j)\n                    {\n                        test.increment_count(i);  \n\n\n                        if (total >= 65535)\n                        {\n                            total = 0;\n                            for (unsigned long i = 0; i < alphabet_size; ++i)\n                            {\n                                counts[i] >>= 1;\n                                total += counts[i];\n                            }\n                            if (counts[alphabet_size-1]==0)\n                            {\n                                counts[alphabet_size-1] = 1;\n                                ++total;\n                            }\n                        }\n                        counts[i] = counts[i] + 1;\n                        ++total;\n\n\n                    }\n\n\n                    unsigned long temp_total = 0;\n                    for (unsigned long a = 0; a < alphabet_size; ++a)\n                    {\n                        temp_total += test.get_count(a);\n                    }\n                    DLIB_TEST_MSG(temp_total == test.get_total(),\n                                 \"temp_total == \" << temp_total << endl <<\n                                 \"test.get_total() == \" << test.get_total()\n                    );\n\n                    DLIB_TEST(test.get_count(alphabet_size-1) == counts[alphabet_size-1]);\n                    DLIB_TEST_MSG(test.get_total() == total,\n                                 \"test.get_total() == \" << test.get_total() << endl <<\n                                 \"total == \" << total\n                    );\n\n                    unsigned long target = test.get_total()/2;\n                    unsigned long symbol = i, low_count = 0, high_count = 0, total_count = 0;\n\n\n                    DLIB_TEST(test.get_range(symbol,low_count,high_count,total_count)==counts[symbol]);\n\n                    if (counts[symbol] != 0)\n                    {\n                        DLIB_TEST(total_count == total);\n\n                        DLIB_TEST(high_count <= total);\n                        DLIB_TEST(low_count < high_count);\n                        DLIB_TEST(high_count <= test.get_total());\n                        DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                    }\n\n\n                    if (target < total)\n                    {\n                        test.get_symbol(target,symbol,low_count,high_count);\n\n\n                        DLIB_TEST(high_count <= total);\n                        DLIB_TEST(low_count < high_count);\n                        DLIB_TEST(high_count <= test.get_total());\n                        DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                        DLIB_TEST(test.get_count(symbol) == counts[symbol]);\n                    }\n\n\n\n\n                }\n\n            }\n\n            print_spinner();\n\n            for (unsigned long h = 0; h < 10; ++h)\n            {\n                test.clear();\n                DLIB_TEST(test.get_total() == 1);\n\n                // fill out test with some numbers\n                unsigned long temp = ::rand()%30000 + 50000;\n                for (unsigned long j = 0; j < temp; ++j)\n                {\n                    unsigned long symbol = (unsigned long)::rand()%alphabet_size;\n                    test.increment_count(symbol);                    \n                }\n\n                // make sure all symbols have a count of at least one\n                for (unsigned long j = 0; j < alphabet_size; ++j)\n                {   \n                    if (test.get_count(j) == 0)\n                        test.increment_count(j);\n                }\n\n                unsigned long temp_total = 0;\n                for (unsigned long j = 0; j < alphabet_size; ++j)\n                {\n                    temp_total += test.get_count(j);\n                }\n                DLIB_TEST(temp_total == test.get_total());\n\n\n                unsigned long low_counts[alphabet_size];\n                unsigned long high_counts[alphabet_size];\n                // iterate over all the symbols\n                for (unsigned long j = 0; j < alphabet_size; ++j)\n                {\n                    unsigned long total;\n                    unsigned long count = test.get_range(j,low_counts[j],high_counts[j],total);\n                    DLIB_TEST(count == test.get_count(j));\n                    DLIB_TEST(count == high_counts[j] - low_counts[j]);\n\n                }\n\n\n                // make sure get_symbol() matches what get_range() told us\n                for (unsigned long j = 0; j < alphabet_size; ++j)\n                {                    \n                    for (unsigned long k = low_counts[j]; k < high_counts[j]; ++k)\n                    {\n                        unsigned long symbol, low_count, high_count;\n                        test.get_symbol(k,symbol,low_count,high_count);\n                        DLIB_TEST(high_count - low_count == test.get_count(symbol));\n                        DLIB_TEST_MSG(j == symbol,\n                                     \"j == \" << j << endl <<\n                                     \"k == \" << k << endl <<\n                                     \"symbol == \" << symbol << endl <<\n                                     \"low_counts[j] == \" << low_counts[j] << endl <<\n                                     \"high_counts[j] == \" << high_counts[j] << endl <<\n                                     \"low_counts[symbol] == \" << low_counts[symbol] << endl <<\n                                     \"high_counts[symbol] == \" << high_counts[symbol] << endl << \n                                     \"low_count == \" << low_count << endl << \n                                     \"high_count == \" << high_count << endl << \n                                     \"temp.count(j) == \" << test.get_count(j)\n                        );\n                        DLIB_TEST_MSG(low_count == low_counts[j],\n                                     \"symbol:        \" << j << \"\\n\" <<\n                                     \"target:        \" << k << \"\\n\" <<\n                                     \"low_count:     \" << low_count << \"\\n\" <<\n                                     \"low_counts[j]: \" << low_counts[j]);\n                        DLIB_TEST(high_count == high_counts[j]);\n                    }\n\n                }\n\n            }\n\n\n\n            print_spinner();\n\n            for (int h = 0; h < 10; ++h)\n            {\n\n\n                test.clear();\n\n                for (unsigned long k = 0; k < alphabet_size-1; ++k)\n                {\n                    counts[k] = 0;\n                }\n                counts[alphabet_size-1] = 1;\n                unsigned long total = 1;\n                unsigned long i = ::rand()%alphabet_size;\n\n                unsigned long temp = 65536;\n                for (unsigned long j = 0; j < temp; ++j)\n                {\n                    test.increment_count(i);  \n\n\n                    if (total >= 65535)\n                    {\n                        total = 0;\n                        for (unsigned long i = 0; i < alphabet_size; ++i)\n                        {\n                            counts[i] >>= 1;\n                            total += counts[i];\n                        }\n                        if (counts[alphabet_size-1] == 0)\n                        {\n                            ++total;\n                            counts[alphabet_size-1] = 1;\n                        }\n                    }\n                    counts[i] = counts[i] + 1;\n                    ++total;\n\n                }\n\n\n                DLIB_TEST(test.get_total() == total);\n\n                unsigned long target = test.get_total()/2;\n                unsigned long symbol = i, low_count = 0, high_count = 0, total_count = 0;\n\n\n                DLIB_TEST(test.get_range(symbol,low_count,high_count,total_count)==counts[symbol]);\n\n                if (counts[symbol] != 0)\n                {\n                    DLIB_TEST(total_count == total);\n\n                    DLIB_TEST(high_count <= total);\n                    DLIB_TEST(low_count < high_count);\n                    DLIB_TEST(high_count <= test.get_total());\n                    DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                }\n\n\n\n                test.get_symbol(target,symbol,low_count,high_count);\n\n\n                DLIB_TEST(high_count <= total);\n                DLIB_TEST(low_count < high_count);\n                DLIB_TEST(high_count <= test.get_total());\n                DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                DLIB_TEST(test.get_count(symbol) == counts[symbol]);\n\n\n\n\n\n\n\n            }\n\n        } // for (int g = 0; g < 2; ++g)\n\n\n\n\n\n\n\n\n\n\n\n\n\n        for (int g = 0; g < 2; ++g)\n        {\n            print_spinner();\n            unsigned long amount=g+1;\n            cc test(gs);\n            cc test2(gs);\n\n            DLIB_TEST(test.get_memory_usage() != 0);\n\n            const unsigned long alphabet_size = 256;                \n\n\n            DLIB_TEST(test.get_total() == 1);\n\n            DLIB_TEST(test.get_count(alphabet_size-1)==1);\n            for (unsigned long i = 0; i < alphabet_size-1; ++i)\n            {\n                unsigned long low_count, high_count, total_count;\n                DLIB_TEST(test.get_range(i,low_count,high_count,total_count) == 0);\n                DLIB_TEST(test.get_count(i) == 0);\n                DLIB_TEST(test.get_total() == 1);\n            }\n\n\n            bool oom = false;\n            for (unsigned long i = 0; i < alphabet_size; ++i)\n            {\n                bool status = test.increment_count(i,static_cast<unsigned short>(amount));\n                unsigned long low_count = 0, high_count = 0, total_count = 0;\n                if (!status)\n                    oom = true;\n\n                if (status)\n                {\n                    if (i ==alphabet_size-1)\n                    {\n                        DLIB_TEST(test.get_range(i,low_count,high_count,total_count) == 1+amount);\n\n                        DLIB_TEST(high_count == low_count+1+amount);\n                        DLIB_TEST(total_count == test.get_total());\n\n\n                        DLIB_TEST(test.get_count(i) == 1+amount);\n                    }\n                    else\n                    {\n                        DLIB_TEST(test.get_range(i,low_count,high_count,total_count) == amount);\n\n                        DLIB_TEST(high_count == low_count+amount);\n                        DLIB_TEST(total_count == test.get_total());\n\n\n                        DLIB_TEST(test.get_count(i) == amount);\n                    }\n                    if (!oom)\n                        DLIB_TEST(test.get_total() == (i+1)*amount + 1);\n                }\n            } \n\n\n            oom = false;\n            for (unsigned long i = 0; i < alphabet_size; ++i)\n            {        \n                unsigned long temp = static_cast<unsigned long>(::rand()%40);\n                for (unsigned long j = 0; j < temp; ++j)\n                {\n                    bool status = test.increment_count(i,static_cast<unsigned short>(amount));\n                    if (!status)\n                        oom = true;\n                    if (status)\n                    {\n                        if (i == alphabet_size-1)\n                        {\n                            DLIB_TEST(test.get_count(i) == (j+1)*amount + 1 + amount);                    \n                        }\n                        else\n                        {\n                            DLIB_TEST(test.get_count(i) == (j+1)*amount + amount);                    \n                        }\n                    }\n                }\n\n                unsigned long target = test.get_total()/2;\n                unsigned long symbol = i, low_count = 0, high_count = 0, total_count = 0;\n\n                if (!oom)\n                {\n                    if (i == alphabet_size-1)\n                    {\n                        DLIB_TEST(test.get_range(symbol,low_count,high_count,total_count)==temp*amount+1+amount);\n                        DLIB_TEST(high_count-low_count == temp*amount+1+amount);\n                    }\n                    else\n                    {\n                        DLIB_TEST(test.get_range(symbol,low_count,high_count,total_count)==temp*amount + amount);\n                        DLIB_TEST(high_count-low_count == temp*amount + amount);\n                    }\n                    DLIB_TEST(total_count == test.get_total());\n\n\n                    test.get_symbol(target,symbol,low_count,high_count);\n                    DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                    DLIB_TEST(low_count <= target);\n                    DLIB_TEST(target < high_count);\n                    DLIB_TEST(high_count <= test.get_total());\n                }\n\n            }\n\n            test.clear();\n\n\n            oom = false;\n            for (unsigned long i = 0; i < alphabet_size-1; ++i)\n            {\n                if(!test.increment_count(i))\n                    oom = true;\n                unsigned long low_count = 0, high_count = 0, total_count = 0;\n\n                if (!oom)\n                {\n                    DLIB_TEST(test.get_range(i,low_count,high_count,total_count) == 1);\n\n                    DLIB_TEST(high_count == low_count+1);\n                    DLIB_TEST(total_count == test.get_total());\n\n                    DLIB_TEST(test.get_count(i) == 1);\n                    DLIB_TEST(test.get_total() == i+2);\n                }\n            } \n\n\n\n            unsigned long counts[alphabet_size];\n\n\n            for (int k = 0; k < 10; ++k)\n            {\n                unsigned long range = ::rand()%50000 + 2;\n\n                test.clear();\n\n                for (unsigned long i = 0; i < alphabet_size-1; ++i)\n                    counts[i] = 0;\n                unsigned long total = 1;\n                counts[alphabet_size-1] = 1;\n\n\n                oom = false;\n                for (unsigned long i = 0; i < alphabet_size; ++i)\n                {                \n                    unsigned long temp = static_cast<unsigned long>(::rand()%range);\n                    for (unsigned long j = 0; j < temp; ++j)\n                    {\n                        if (!test.increment_count(i))\n                            oom = true;\n\n\n                        if (total >= 65535)\n                        {\n\n                            total = 0;\n                            for (unsigned long i = 0; i < alphabet_size; ++i)\n                            {\n                                counts[i] >>= 1;\n                                total += counts[i];\n                            }\n                            if (counts[alphabet_size-1]==0)\n                            {\n                                counts[alphabet_size-1] = 1;\n                                ++total;\n                            }\n                        }\n                        counts[i] = counts[i] + 1;\n                        ++total;\n\n\n                    }\n\n\n                    unsigned long temp_total = 0;\n                    for (unsigned long a = 0; a < alphabet_size; ++a)\n                    {\n                        temp_total += test.get_count(a);\n                    }\n\n                    if (!oom)\n                    {\n                        DLIB_TEST_MSG(temp_total == test.get_total(),\n                                     \"temp_total == \" << temp_total << endl <<\n                                     \"test.get_total() == \" << test.get_total()\n                        );\n\n                        DLIB_TEST(test.get_count(alphabet_size-1) == counts[alphabet_size-1]);\n                        DLIB_TEST_MSG(test.get_total() == total,\n                                     \"test.get_total() == \" << test.get_total() << endl <<\n                                     \"total == \" << total\n                        );\n                    }\n\n                    unsigned long target = test.get_total()/2;\n                    unsigned long symbol = i, low_count = 0, high_count = 0, total_count = 0;\n\n                    if (!oom)\n                    {\n\n                        DLIB_TEST(test.get_range(symbol,low_count,high_count,total_count)==counts[symbol]);\n\n                        if (counts[symbol] != 0)\n                        {\n                            DLIB_TEST(total_count == total);\n\n                            DLIB_TEST(high_count <= total);\n                            DLIB_TEST(low_count < high_count);\n                            DLIB_TEST(high_count <= test.get_total());\n                            DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                        }\n\n\n                        if (target < total)\n                        {\n                            test.get_symbol(target,symbol,low_count,high_count);\n\n\n                            DLIB_TEST(high_count <= total);\n                            DLIB_TEST(low_count < high_count);\n                            DLIB_TEST(high_count <= test.get_total());\n                            DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                            DLIB_TEST(test.get_count(symbol) == counts[symbol]);\n                        }\n                    }\n\n\n\n                }\n\n            }\n\n            oom = false;\n            for (unsigned long h = 0; h < 10; ++h)\n            {\n                test.clear();\n                DLIB_TEST(test.get_total() == 1);\n\n                // fill out test with some numbers\n                unsigned long temp = ::rand()%30000 + 50000;\n                for (unsigned long j = 0; j < temp; ++j)\n                {\n                    unsigned long symbol = (unsigned long)::rand()%alphabet_size;\n                    if (!test.increment_count(symbol))\n                        oom = true;\n                }\n\n                // make sure all symbols have a count of at least one\n                for (unsigned long j = 0; j < alphabet_size; ++j)\n                {   \n                    if (test.get_count(j) == 0)\n                        test.increment_count(j);\n                }\n\n                unsigned long temp_total = 0;\n                for (unsigned long j = 0; j < alphabet_size; ++j)\n                {\n                    temp_total += test.get_count(j);\n                }\n                if (!oom)\n                    DLIB_TEST(temp_total == test.get_total());\n\n\n                unsigned long low_counts[alphabet_size];\n                unsigned long high_counts[alphabet_size];\n\n                if (!oom)\n                {\n\n                    // iterate over all the symbols\n                    for (unsigned long j = 0; j < alphabet_size; ++j)\n                    {\n                        unsigned long total;\n                        unsigned long count = test.get_range(j,low_counts[j],high_counts[j],total);\n                        DLIB_TEST(count == test.get_count(j));\n                        DLIB_TEST(count == high_counts[j] - low_counts[j]);\n\n                    }\n\n\n\n\n                    // make sure get_symbol() matches what get_range() told us\n                    for (unsigned long j = 0; j < alphabet_size; ++j)\n                    {                    \n                        for (unsigned long k = low_counts[j]; k < high_counts[j]; ++k)\n                        {\n                            unsigned long symbol, low_count, high_count;\n                            test.get_symbol(k,symbol,low_count,high_count);\n                            DLIB_TEST(high_count - low_count == test.get_count(symbol));\n                            DLIB_TEST_MSG(j == symbol,\n                                         \"j == \" << j << endl <<\n                                         \"k == \" << k << endl <<\n                                         \"symbol == \" << symbol << endl <<\n                                         \"low_counts[j] == \" << low_counts[j] << endl <<\n                                         \"high_counts[j] == \" << high_counts[j] << endl <<\n                                         \"low_counts[symbol] == \" << low_counts[symbol] << endl <<\n                                         \"high_counts[symbol] == \" << high_counts[symbol] << endl << \n                                         \"low_count == \" << low_count << endl << \n                                         \"high_count == \" << high_count << endl << \n                                         \"temp.count(j) == \" << test.get_count(j)\n                            );\n                            DLIB_TEST_MSG(low_count == low_counts[j],\n                                         \"symbol:        \" << j << \"\\n\" <<\n                                         \"target:        \" << k << \"\\n\" <<\n                                         \"low_count:     \" << low_count << \"\\n\" <<\n                                         \"low_counts[j]: \" << low_counts[j]);\n                            DLIB_TEST(high_count == high_counts[j]);\n                        }\n\n                    }\n                }\n\n            }\n\n\n\n\n            for (int h = 0; h < 10; ++h)\n            {\n\n\n                test.clear();\n\n                for (unsigned long k = 0; k < alphabet_size-1; ++k)\n                {\n                    counts[k] = 0;\n                }\n                counts[alphabet_size-1] = 1;\n                unsigned long total = 1;\n                unsigned long i = ::rand()%alphabet_size;\n\n                unsigned long temp = 65536;\n                for (unsigned long j = 0; j < temp; ++j)\n                {\n                    test.increment_count(i);  \n\n\n                    if (total >= 65535)\n                    {\n                        total = 0;\n                        for (unsigned long i = 0; i < alphabet_size; ++i)\n                        {\n                            counts[i] >>= 1;\n                            total += counts[i];\n                        }\n                        if (counts[alphabet_size-1] == 0)\n                        {\n                            ++total;\n                            counts[alphabet_size-1] = 1;\n                        }\n                    }\n                    counts[i] = counts[i] + 1;\n                    ++total;\n\n                }\n\n\n                DLIB_TEST(test.get_total() == total);\n\n                unsigned long target = test.get_total()/2;\n                unsigned long symbol = i, low_count = 0, high_count = 0, total_count = 0;\n\n\n                DLIB_TEST(test.get_range(symbol,low_count,high_count,total_count)==counts[symbol]);\n\n                if (counts[symbol] != 0)\n                {\n                    DLIB_TEST(total_count == total);\n\n                    DLIB_TEST(high_count <= total);\n                    DLIB_TEST(low_count < high_count);\n                    DLIB_TEST(high_count <= test.get_total());\n                    DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                }\n\n\n\n                test.get_symbol(target,symbol,low_count,high_count);\n\n\n                DLIB_TEST(high_count <= total);\n                DLIB_TEST(low_count < high_count);\n                DLIB_TEST(high_count <= test.get_total());\n                DLIB_TEST(test.get_count(symbol) == high_count-low_count);\n                DLIB_TEST(test.get_count(symbol) == counts[symbol]);\n\n\n\n\n\n\n\n            }\n\n        } // for (int g = 0; g < 2; ++g)\n\n\n    }\n\n}\n\n#endif // DLIB_TEST_CONDITIONING_CLASs_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/conditioning_class_c.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <ctime>\n#include <cstdlib>\n\n#include <dlib/conditioning_class.h>\n\n#include \"tester.h\"\n#include \"conditioning_class.h\"\n\nnamespace  \n{\n\n\n    class conditioning_class_tester : public tester\n    {\n    public:\n        conditioning_class_tester (\n        ) :\n            tester (\"test_conditioning_class_c\",\n                    \"Runs tests on the conditioning_class checked components.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a_c\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_1a_c,\n                conditioning_class<2>::kernel_1a_c\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_2a_c\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_2a_c,\n                conditioning_class<2>::kernel_2a_c\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_3a_c\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_3a_c,\n                conditioning_class<2>::kernel_3a_c\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_4a_c\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_4a_c,\n                conditioning_class<2>::kernel_4a_c\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_4b_c\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_4b_c,\n                conditioning_class<2>::kernel_4b_c\n                >();\n            print_spinner();\n\n\n            dlog << LINFO << \"testing kernel_4c_c\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_4c_c,\n                conditioning_class<2>::kernel_4c_c\n                >();\n            print_spinner();\n\n            dlog << LINFO << \"testing kernel_4d_c\";\n            conditioning_class_kernel_test<\n                conditioning_class<256>::kernel_4d_c,\n                conditioning_class<2>::kernel_4d_c\n                >();\n            print_spinner();\n\n\n        }\n    } a;\n\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/config_reader.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/config_reader.h>\n#include <dlib/cmd_line_parser.h>\n\n#include \"tester.h\"\n\n// This is called an unnamed-namespace and it has the effect of making everything inside this file \"private\"\n// so that everything you declare will have static linkage.  Thus we won't have any multiply\n// defined symbol errors coming out of the linker when we try to compile the test suite.\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    // Declare the logger we will use in this test.  The name of the tester \n    // should start with \"test.\"\n    logger dlog(\"test.config_reader\");\n\n    template <\n        typename config_reader\n        >\n    void do_the_tests (\n        config_reader& cr\n    )\n    {\n        DLIB_TEST(cr.is_key_defined(\"global\"));\n        DLIB_TEST(cr.is_block_defined(\"all\"));\n        DLIB_TEST(cr.is_key_defined(\"globalasfd\") == false);\n        DLIB_TEST(cr.is_block_defined(\"all!\") == false);\n        DLIB_TEST(cr[\"global\"] == \"hmm\");\n        DLIB_TEST(cr[\"global2\"] == \"hmm2\");\n\n        std_vector_c<string> blocks;\n        cr.block(\"all\").get_blocks(blocks);\n        DLIB_TEST(blocks.size() == 4); \n        cr.block(\"all\").block(\"block1\").get_blocks(blocks); DLIB_TEST(blocks.size() == 0); \n        cr.block(\"all\").block(\"block2\").get_blocks(blocks); DLIB_TEST(blocks.size() == 0); \n        cr.block(\"all\").block(\"block3\").get_blocks(blocks); DLIB_TEST(blocks.size() == 0); \n        cr.block(\"all\").block(\"block4\").get_blocks(blocks); DLIB_TEST(blocks.size() == 0); \n\n        DLIB_TEST(cr.block(\"all\").block(\"block1\").is_key_defined(\"name\")); \n        DLIB_TEST(cr.block(\"all\").block(\"block2\").is_key_defined(\"name\")); \n        DLIB_TEST(cr.block(\"all\").block(\"block3\").is_key_defined(\"name\")); \n        DLIB_TEST(cr.block(\"all\").block(\"block4\").is_key_defined(\"name\")); \n        DLIB_TEST(cr.block(\"all\").block(\"block1\").is_key_defined(\"age\")); \n        DLIB_TEST(cr.block(\"all\").block(\"block2\").is_key_defined(\"age\")); \n        DLIB_TEST(cr.block(\"all\").block(\"block3\").is_key_defined(\"age\")); \n        DLIB_TEST(cr.block(\"all\").block(\"block4\").is_key_defined(\"age\")); \n\n        DLIB_TEST(cr.block(\"all\").block(\"block1\")[\"name\"] == \"davis king\"); \n        DLIB_TEST(cr.block(\"all\").block(\"block2\")[\"name\"] == \"joel\"); \n        DLIB_TEST(cr.block(\"all\").block(\"block3\")[\"name\"] == \"john\"); \n        DLIB_TEST(cr.block(\"all\").block(\"block4\")[\"name\"] == \"dude\"); \n        DLIB_TEST(cr.block(\"all\").block(\"block1\")[\"age\"] == \"24\"); \n        DLIB_TEST(cr.block(\"all\").block(\"block2\")[\"age\"] == \"24\"); \n        DLIB_TEST(cr.block(\"all\").block(\"block3\")[\"age\"] == \"24\"); \n        DLIB_TEST(cr.block(\"all\").block(\"block4\")[\"age\"] == \"53\"); \n\n\n        int count2 = 0;\n        cr.get_blocks(blocks);\n        DLIB_TEST(blocks.size() == 1);\n        DLIB_TEST(blocks[0] == \"all\");\n\n\n        DLIB_TEST(cr.block(\"all\").is_key_defined(\"global\") == false);\n        DLIB_TEST(cr.block(\"all\").is_key_defined(\"global2\") == false);\n        DLIB_TEST(cr.block(\"all\").is_key_defined(\"name\") == false);\n        DLIB_TEST(cr.block(\"all\").is_key_defined(\"age\") == false);\n\n        cr.block(\"all\").get_blocks(blocks);\n        DLIB_TEST(blocks.size() == 4);\n        std::vector<string> temp_blocks;\n        for (unsigned long i = 0; i < blocks.size(); ++i)\n        {\n            ++count2;\n            ostringstream sout;\n            sout << \"block\" << count2;\n            DLIB_TEST(blocks[i] == sout.str());\n\n            cr.block(\"all\").block(blocks[i]).get_blocks(temp_blocks);\n            DLIB_TEST(temp_blocks.size() == 0);\n\n            DLIB_TEST(cr.block(\"all\").block(blocks[i]).is_key_defined(\"name\"));\n            DLIB_TEST(cr.block(\"all\").block(blocks[i]).is_key_defined(\"age\"));\n        }\n\n\n\n        bool found_error = false;\n        try\n        {\n            cr.block(\"bogus_block\");\n        }\n        catch (typename config_reader::config_reader_access_error& e)\n        {\n            DLIB_TEST(e.block_name == \"bogus_block\");\n            DLIB_TEST(e.key_name == \"\");\n            found_error = true;\n        }\n        DLIB_TEST(found_error);\n\n        found_error = false;\n        try\n        {\n            cr[\"bogus_key\"];\n        }\n        catch (typename config_reader::config_reader_access_error& e)\n        {\n            DLIB_TEST(e.block_name == \"\");\n            DLIB_TEST(e.key_name == \"bogus_key\");\n            found_error = true;\n        }\n        DLIB_TEST(found_error);\n\n\n        found_error = false;\n        try\n        {\n            cr.block(\"all\").block(\"block10\");\n        }\n        catch (typename config_reader::config_reader_access_error& e)\n        {\n            DLIB_TEST(e.block_name == \"block10\");\n            DLIB_TEST(e.key_name == \"\");\n            found_error = true;\n        }\n        DLIB_TEST(found_error);\n\n        found_error = false;\n        try\n        {\n            cr.block(\"all\")[\"msdofg\"];\n        }\n        catch (typename config_reader::config_reader_access_error& e)\n        {\n            DLIB_TEST(e.block_name == \"\");\n            DLIB_TEST(e.key_name == \"msdofg\");\n            found_error = true;\n        }\n        DLIB_TEST(found_error);\n\n    }\n\n\n\n    template <\n        typename config_reader\n        >\n    void config_reader_test (\n    )\n    /*!\n        requires\n            - config_reader is an implementation of config_reader/config_reader_kernel_abstract.h \n              is instantiated with int\n        ensures\n            - runs tests on config_reader for compliance with the specs\n    !*/\n    {        \n\n\n\n        ostringstream sout;\n\n        sout << \"all#comment { { } \\n\";\n        sout << \"{ \\n\";\n        sout << \"    block1 \\n\";\n        sout << \"    { \\n\";\n        sout << \"        name = davis king \\n\";\n        sout << \"        age = 24 \\n\";\n        sout << \"    } \\n\";\n        sout << \" \\n\";\n        sout << \"    block2 \\n\";\n        sout << \"    { \\n\";\n        sout << \"        name= joel \\n\";\n        sout << \"        age =24 \\n\";\n        sout << \"    } \\n\";\n        sout << \" \\n\";\n        sout << \"    block3 \\n\";\n        sout << \"    { \\n\";\n        sout << \"        name = john \\n\";\n        sout << \"        age = 24 \\n\";\n        sout << \"    } \\n\";\n        sout << \"  #comment \\n\";\n        sout << \"#comment \\n\";\n        sout << \"    block4{  # comment\";\n        sout << \"     \\n\";\n        sout << \"        name = dude \\n\";\n        sout << \"        age = 53}\\n\";\n        sout << \"     \\n\";\n        sout << \"} \\n\";\n        sout << \" \\n\";\n        sout << \" \\n\";\n        sout << \"global=hmm#comment \\n\";\n        sout << \"global2=hmm2 \\n\";\n        sout << \" # comment \\n\";\n\n        string data = sout.str();\n\n        config_reader cr2;\n        for (int i = 0; i < 3; ++i)\n        {\n            istringstream sin;\n\n            sin.clear();\n            sin.str(data);\n\n            config_reader cr(sin);\n            sin.clear();\n            sin.str(data);\n\n            cr2.load_from(sin);\n\n            do_the_tests(cr);\n            do_the_tests(cr2);\n\n            cr.clear();\n            DLIB_TEST(cr.is_key_defined(\"global\") == false);\n        }\n\n\n        sout.clear();\n        sout.str(\"\");\n\n        {\n            sout << \"all#comment { { } \\n\";\n            sout << \"{ \\n\";\n            sout << \"    block1 \\n\";\n            sout << \"    { \\n\";\n            sout << \"        name = davis king \\n\";\n            sout << \"        age = 24 \\n\";\n            sout << \"    } \\n\";\n            sout << \" \\n\";\n            sout << \"    block2 \\n\";\n            sout << \"    { \\n\";\n            sout << \"        name= joel \\n\";\n            sout << \"        age =24 \\n\";\n            sout << \"    } \\n\";\n            sout << \" \\n\";\n            sout << \"    block3 \\n\";\n            sout << \"    {{ \\n\";  // error on this line\n            sout << \"        name = john \\n\";\n            sout << \"        age = 24 \\n\";\n            sout << \"    } \\n\";\n            sout << \"  #comment \\n\";\n            sout << \"#comment \\n\";\n            sout << \"    block4{  # comment\";\n            sout << \"     \\n\";\n            sout << \"        name = dude \\n\";\n            sout << \"        age = 53}\\n\";\n            sout << \"     \\n\";\n            sout << \"} \\n\";\n            sout << \" \\n\";\n            sout << \" \\n\";\n            sout << \"global=hmm#comment \\n\";\n            sout << \"global2=hmm2 \\n\";\n            sout << \" # comment \\n\";\n\n            istringstream sin(sout.str());\n\n            bool error_found = false;\n            try\n            {\n                cr2.load_from(sin);\n            }\n            catch (typename config_reader::config_reader_error& e)\n            {\n                error_found = true;\n                DLIB_TEST(e.line_number == 16);\n                DLIB_TEST(e.redefinition == false);\n            }\n            DLIB_TEST(error_found);\n        }\n\n        {\n            sout.str(\"\");\n            sout.clear();\n            sout << \"all#comment { { } \\n\";\n            sout << \"{ \\n\";\n            sout << \"    block1 \\n\";\n            sout << \"    { \\n\";\n            sout << \"        name = davis king \\n\";\n            sout << \"        age = 24 \\n\";\n            sout << \"    } \\n\";\n            sout << \" \\n\";\n            sout << \"    block2 \\n\";\n            sout << \"    { \\n\";\n            sout << \"        name= joel \\n\";\n            sout << \"        age =24 \\n\";\n            sout << \"    } \\n\";\n            sout << \" \\n\";\n            sout << \"    block3 \\n\";\n            sout << \"    { \\n\";\n            sout << \"        name = john \\n\";\n            sout << \"        age = 24 \\n\";\n            sout << \"    } \\n\";\n            sout << \"  #comment \\n\";\n            sout << \"#comment \\n\";\n            sout << \"    block4{  # comment\";\n            sout << \"     \\n\";\n            sout << \"        name = dude \\n\";\n            sout << \"        age = 53}\\n\";\n            sout << \"     \\n\";\n            sout << \"} \\n\";\n            sout << \" \\n\";\n            sout << \" \\n\";\n            sout << \"global=hmm#comment \\n\";\n            sout << \" \\n\";\n            sout << \"global=hmm2 \\n\";  // error on this line\n            sout << \" # comment \\n\";\n\n            istringstream sin(sout.str());\n\n            bool error_found = false;\n            try\n            {\n                cr2.load_from(sin);\n            }\n            catch (typename config_reader::config_reader_error& e)\n            {\n                error_found = true;\n                DLIB_TEST_MSG(e.line_number == 31,e.line_number);\n                DLIB_TEST(e.redefinition == true);\n            }\n            DLIB_TEST(error_found);\n        }\n\n\n        {\n            sout.str(\"\");\n            sout.clear();\n            sout << \"all#comment { { } \\n\";\n            sout << \"{ \\n\";\n            sout << \"    block1 \\n\";\n            sout << \"    { \\n\";\n            sout << \"        name = davis king \\n\";\n            sout << \"        age = 24 \\n\";\n            sout << \"    } \\n\";\n            sout << \" \\n\";\n            sout << \"    block2 \\n\";\n            sout << \"    { \\n\";\n            sout << \"        name= joel \\n\";\n            sout << \"        age =24 \\n\";\n            sout << \"    } block2{} \\n\";  // error on this line\n            sout << \" \\n\";\n            sout << \"    block3 \\n\";\n            sout << \"    { \\n\";\n            sout << \"        name = john \\n\";\n            sout << \"        age = 24 \\n\";\n            sout << \"    } \\n\";\n            sout << \"  #comment \\n\";\n            sout << \"#comment \\n\";\n            sout << \"    block4{  # comment\";\n            sout << \"     \\n\";\n            sout << \"        name = dude \\n\";\n            sout << \"        age = 53}\\n\";\n            sout << \"     \\n\";\n            sout << \"} \\n\";\n            sout << \" \\n\";\n            sout << \" \\n\";\n            sout << \"global=hmm#comment \\n\";\n            sout << \" \\n\";\n            sout << \" # comment \\n\";\n\n            istringstream sin(sout.str());\n\n            bool error_found = false;\n            try\n            {\n                cr2.load_from(sin);\n            }\n            catch (typename config_reader::config_reader_error& e)\n            {\n                error_found = true;\n                DLIB_TEST_MSG(e.line_number == 13,e.line_number);\n                DLIB_TEST(e.redefinition == true);\n            }\n            DLIB_TEST(error_found);\n        }\n\n\n\n    }\n\n\n    void test_get_option()\n    {\n        const char* argv[100];            \n        int argc;\n\n        // program --opt 4 -d dude \n        argv[0] = \"program\";\n        argv[1] = \"--opt\";\n        argv[2] = \"4\";\n        argv[3] = \"-d\";\n        argv[4] = \"dude\";\n        argc = 5;\n\n        std::ostringstream sout;\n        sout << \"block#comment { { } \\n\";\n        sout << \"{ \\n\";\n        sout << \"  opt = 5 \\n\";\n        sout << \"  a = 6 \\n\";\n        sout << \"  d = joel \\n\";\n        sout << \"  subblock {} \\n\";\n        sout << \"} \\n\";\n        sout << \" \\n\";\n        sout << \" \\n\";\n        sout << \"opt = 8 \\n\";\n        sout << \"d = davis \\n\";\n        sout << \"a = 50 \\n\";\n        sout << \" # comment \\n\";\n\n        std::istringstream sin(sout.str());\n\n        config_reader cr(sin);\n\n        dlib::cmd_line_parser<char>::kernel_1a_c parser;\n\n        parser.add_option(\"opt\",\"\",1);\n        parser.add_option(\"d\",\"\",1);\n        parser.add_option(\"a\",\"\",1);\n        parser.add_option(\"b\",\"\",1);\n        parser.parse(argc, argv);\n\n        DLIB_TEST(get_option(cr, \"d\", \"default\") == \"davis\");\n        DLIB_TEST(get_option(cr, \"opt\", \"default\") == \"8\");\n        DLIB_TEST(get_option(cr, \"opt\", 1) == 8);\n        DLIB_TEST(get_option(cr, \"optasdf\", 1) == 1);\n        DLIB_TEST(get_option(cr, \"optasdf\", 1.1) == 1.1);\n        DLIB_TEST(get_option(cr.block(\"block\"), \"d\", \"default\") == \"joel\");\n        DLIB_TEST(get_option(cr.block(\"block\"), \"opt\", \"default\") == \"5\");\n        DLIB_TEST(get_option(cr.block(\"block\"), \"opt\", 1) == 5);\n        DLIB_TEST(get_option(cr.block(\"block\").block(\"subblock\"), \"d\", \"default\") == \"default\");\n        DLIB_TEST(get_option(cr.block(\"block\").block(\"subblock\"), \"opt\", \"default\") == \"default\");\n        DLIB_TEST(get_option(cr.block(\"block\").block(\"subblock\"), \"opt\", 1) == 1);\n        DLIB_TEST(get_option(cr, \"block.d\", \"default\") == \"joel\");\n        DLIB_TEST(get_option(cr, \"block.opt\", \"default\") == \"5\");\n        DLIB_TEST(get_option(cr, \"block.opt\", 1) == 5);\n        DLIB_TEST(get_option(cr, \"block.asdf.d\", \"default\") == \"default\");\n        DLIB_TEST(get_option(cr, \"block.asdf.opt\", \"default\") == \"default\");\n        DLIB_TEST(get_option(cr, \"block.asdf.opt\", 2) == 2);\n        DLIB_TEST(get_option(cr, \"block.subblock.d\", \"default\") == \"default\");\n        DLIB_TEST(get_option(cr, \"block.subblock.opt\", \"default\") == \"default\");\n        DLIB_TEST(get_option(cr, \"block.subblock.opt\", 2) == 2);\n\n        DLIB_TEST(get_option(parser, \"opt\", 99) == 4);\n        DLIB_TEST(get_option(parser, \"d\", \"stuff\") == \"dude\");\n        DLIB_TEST(get_option(parser, \"a\", \"stuff\") == \"stuff\");\n        DLIB_TEST(get_option(parser, \"a\", 99) == 99);\n\n        DLIB_TEST(get_option(parser, cr, \"d\", \"default\") == \"dude\");\n        DLIB_TEST(get_option(cr, parser, \"d\", \"default\") == \"dude\");\n        DLIB_TEST(get_option(parser, cr, \"a\", 2) == 50);\n        DLIB_TEST(get_option(cr, parser, \"a\", 2) == 50);\n        DLIB_TEST(get_option(parser, cr, \"opt\", 2) == 4);\n        DLIB_TEST(get_option(cr, parser, \"opt\", 2) == 4);\n        DLIB_TEST(get_option(parser, cr, \"b\", 2) == 2);\n        DLIB_TEST(get_option(cr, parser, \"b\", 2) == 2);\n\n        DLIB_TEST(get_option(parser, cr.block(\"block\"), \"a\", 2) == 6);\n        DLIB_TEST(get_option(cr.block(\"block\"), parser, \"a\", 2) == 6);\n    }\n\n\n    class config_reader_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a test for the config_reader object.  When it is constructed\n                it adds itself into the testing framework.  The command line switch is\n                specified as test_config_reader by passing that string to the tester constructor.\n        !*/\n    public:\n        config_reader_tester (\n        ) :\n            tester (\"test_config_reader\",\n                    \"Runs tests on the config_reader component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing config_reader\";\n            print_spinner();\n            config_reader_test<config_reader>();\n\n            dlog << LINFO << \"testing config_reader_thread_safe\";\n            print_spinner();\n            config_reader_test<config_reader_thread_safe>();\n\n            dlog << LINFO << \"testing get_option()\";\n            print_spinner();\n            test_get_option();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/crc32.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <cmath>\n#include <dlib/crc32.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.crc32\");\n\n\n    class crc32_tester : public tester\n    {\n    public:\n        crc32_tester (\n        ) :\n            tester (\"test_crc32\",\n                    \"Runs tests on the crc32 component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            DLIB_TEST(crc32(\"davis\").get_checksum() == 0x0445527C);\n\n            crc32 c, c2;\n            DLIB_TEST(c.get_checksum() == 0);\n            c.add(\"davis\");\n            DLIB_TEST(c.get_checksum() == 0x0445527C);\n            DLIB_TEST(c2.get_checksum() == 0);\n            c2 = c;\n            DLIB_TEST(c2.get_checksum() == 0x0445527C);\n            crc32 c3(c);\n            DLIB_TEST(c3.get_checksum() == 0x0445527C);\n            c.add('a');\n            c2.add('a');\n            c3.add('a');\n            DLIB_TEST(c.get_checksum() == 0xB100C606);\n            DLIB_TEST(c2.get_checksum() == 0xB100C606);\n            DLIB_TEST(c3.get_checksum() == 0xB100C606);\n\n\n            crc32::kernel_1a cold;\n            DLIB_TEST(cold.get_checksum() == 0);\n            cold.add(\"davis\");\n            DLIB_TEST(cold.get_checksum() == 0x0445527C);\n\n            c.clear();\n            DLIB_TEST(c.get_checksum() == 0);\n            c.add(\"davis\");\n            DLIB_TEST(c.get_checksum() == 0x0445527C);\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/create_iris_datafile.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <sstream>\n#include <fstream>\n#include <dlib/compress_stream.h>\n#include <dlib/base64.h>\n\nnamespace \n{\n    // This function returns the contents of the file 'iris.scale'\n    const std::string get_decoded_string()\n    {\n        dlib::base64::kernel_1a base64_coder;\n        dlib::compress_stream::kernel_1ea compressor;\n        std::ostringstream sout;\n        std::istringstream sin;\n\n        // The base64 encoded data from the file 'iris.scale' we want to decode and return.\n        sout << \"MU66cCmT9lCXWJXwhdfOGELwlyExClbHEF1s9XoqxNDV7o8AdVVHws/C9oIKO5EShH1lI/QFTWk3\";\n        sout << \"8EUdVpSw/NpZCUa7O9nq5uO6SE0gfRAyryH+pfIVL9jPiQi8rBdagDf4kUd4eggz9glwYnKEE+US\";\n        sout << \"K4GUBnW33YDf/jMF2GIBLNvz69yGJj8RC5rOUeJxR4mlHrDmnEfgRSdFIfXk4OQ4V/XbOsE1bnhG\";\n        sout << \"fmACcu7nYv6M/043Z6o8oaBeoJ2XK/9UqOWGFOwfVpQ46fz1a0oTlOzyDbbzMiniLr8z5P/VYwYd\";\n        sout << \"iAE70MwxHXs6Ga3zMmD/h1WxB/uRRph39B1lPN1UXC7U6SIatmtGWY+JYpwBk6raAnR3sblTFBNs\";\n        sout << \"UdPW+1a7AxinR0NZO6YEiCFy8lbpfPRZNAr5ENqPbD2DZtkHk3L8ARxSoFBgqPa8aO3fFow7rVxF\";\n        sout << \"xIJ2TxcHS84+BtH7KvtWfH7kUPOZLQ+Ohqghn9I57IeMl7E3aoTRTiVv3P2twAbP5Y+ZaAUoU7CK\";\n        sout << \"c9FptjKgMClUkuWxA7tGUEp069PqGT8NbI+yxorh/iVhkVhuGAzgjjXYS/D26OGj4bzF6mtRbnms\";\n        sout << \"Y2OYlF7QqhawZaHLtmZ6xLhR2F8p/0nrbpAz2brQLNKgQAMvU9rTZ0XYpuJNbRSsARkRDorPopDO\";\n        sout << \"kKNUORfkh2zfIytVToQ9tZ9W2LkfGZdWjJu/wEKjPDAU55q3bCfKOUk12tjq0sq/7qjUWJRcLSCu\";\n        sout << \"bqo8EzaKJj3cTXVgXXLHP6WEOPZ9vShuxQUu1JWkh8YEinjwFSyA6UnAKqPtN/HsBgv8YbnfnY/q\";\n        sout << \"e5JvUYWbs3Lk9enlhcI0vEVTV5f0GMjdkW87l3cWgmXJqiljJDREWEdKZJQ0rGBU/gW5kO3SAS1W\";\n        sout << \"OETVJG2kJD8Ib7hT15Mu2lOVNQYFri6O3yWtp5/NLHsYXoDKIYrxoJtM9+GkprVwRuhDcwxE+eQa\";\n        sout << \"pp5nC8qj38ameQHaJR2hJCuW2nvr4Wwm0ploF00ZP9cS9YznCO52cueUQX0+zil7bU++jghqSGP5\";\n        sout << \"+JyRzWUWWbDhnCyanej2Y3sqfZ3o2kuUjaAgZFz5pLqK64uACjztp4bQFsaMRdc+OCV2uItqoaRg\";\n        sout << \"a6u7/VrvS+ZigwcGWDjXSKev334f8ZqQQIR5hljdeseGuw7/5XySzUrgc8lCOvMa0pKNn9Nl8W/W\";\n        sout << \"vbKz1VwA\";\n\n        // Put the data into the istream sin\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decode the base64 text into its compressed binary form\n        base64_coder.decode(sin,sout);\n        sin.clear();\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decompress the data into its original form\n        compressor.decompress(sin,sout);\n\n        // Return the decoded and decompressed data\n        return sout.str();\n    }\n}\n\nnamespace dlib\n{\n    void create_iris_datafile (\n    )\n    {\n        std::ofstream fout(\"iris.scale\");\n        fout << get_decoded_string();\n    }\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/create_iris_datafile.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CREATE_IRIS_DAtAFILE_Hh_\n#define DLIB_CREATE_IRIS_DAtAFILE_Hh_\n\nnamespace dlib\n{\n    void create_iris_datafile (\n    );\n    /*!\n        ensures\n            - Creates a local file called iris.scale that contains the\n              150 samples from the 3-class Iris dataset from the UCI\n              repository.  The file will be in LIBSVM format (it was\n              originally downloaded from the LIBSVM website).\n    !*/\n}\n\n#endif // DLIB_CREATE_IRIS_DAtAFILE_Hh_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/data_io.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n#include <dlib/data_io.h>\n#include <dlib/sparse_vector.h>\n#include \"create_iris_datafile.h\"\n#include <vector>\n#include <sstream>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.data_io\");\n\n\n    class test_data_io : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        test_data_io (\n        ) :\n            tester (\n                \"test_data_io\",       // the command line argument name for this test\n                \"Run tests on the data_io stuff.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n\n        template <typename sample_type>\n        void run_test()\n        {\n            print_spinner();\n\n            typedef typename sample_type::value_type::second_type scalar_type;\n\n            std::vector<sample_type> samples;\n            std::vector<scalar_type> labels;\n\n            load_libsvm_formatted_data(\"iris.scale\",samples, labels);\n            save_libsvm_formatted_data(\"iris.scale2\", samples, labels);\n\n            DLIB_TEST(samples.size() == 150);\n            DLIB_TEST(labels.size() == 150);\n            DLIB_TEST(max_index_plus_one(samples) == 5);\n            fix_nonzero_indexing(samples);\n            DLIB_TEST(max_index_plus_one(samples) == 4);\n\n            load_libsvm_formatted_data(\"iris.scale2\",samples, labels);\n\n            DLIB_TEST(samples.size() == 150);\n            DLIB_TEST(labels.size() == 150);\n\n            DLIB_TEST(max_index_plus_one(samples) == 5);\n            fix_nonzero_indexing(samples);\n            DLIB_TEST(max_index_plus_one(samples) == 4);\n\n            one_vs_one_trainer<any_trainer<sample_type,scalar_type>,scalar_type> trainer;\n\n            typedef sparse_linear_kernel<sample_type> kernel_type;\n            trainer.set_trainer(krr_trainer<kernel_type>());\n\n            randomize_samples(samples, labels);\n            matrix<double> cv = cross_validate_multiclass_trainer(trainer, samples, labels, 4);\n\n            dlog << LINFO << \"confusion matrix: \\n\" << cv;\n            const scalar_type cv_accuracy = sum(diag(cv))/sum(cv);\n            dlog << LINFO << \"cv accuracy: \" << cv_accuracy;\n            DLIB_TEST(cv_accuracy > 0.97);\n\n\n\n\n            {\n                print_spinner();\n                typedef matrix<scalar_type,0,1> dsample_type;\n                std::vector<dsample_type> dsamples = sparse_to_dense(samples);\n                DLIB_TEST(dsamples.size() == 150);\n                DLIB_TEST(dsamples[0].size() == 4);\n                DLIB_TEST(max_index_plus_one(dsamples) == 4);\n\n                one_vs_one_trainer<any_trainer<dsample_type,scalar_type>,scalar_type> trainer;\n\n                typedef linear_kernel<dsample_type> kernel_type;\n                trainer.set_trainer(rr_trainer<kernel_type>());\n\n                cv = cross_validate_multiclass_trainer(trainer, dsamples, labels, 4);\n\n                dlog << LINFO << \"dense confusion matrix: \\n\" << cv;\n                const scalar_type cv_accuracy = sum(diag(cv))/sum(cv);\n                dlog << LINFO << \"dense cv accuracy: \" << cv_accuracy;\n                DLIB_TEST(cv_accuracy > 0.97);\n            }\n\n        }\n\n\n        void test_sparse_to_dense()\n        {\n            {\n                std::map<unsigned long, double> temp;\n\n                matrix<double,0,1> m, m2;\n\n                m = sparse_to_dense(m);\n                DLIB_TEST(m.size() == 0);\n                m.set_size(2,1);\n                m = 1, 2;\n                m2 = sparse_to_dense(m);\n                DLIB_TEST(m == m2);\n                m2 = sparse_to_dense(m,1);\n                DLIB_TEST(m2.size() == 1);\n                DLIB_TEST(m2(0,0) == 1);\n                m2 = sparse_to_dense(m,0);\n                DLIB_TEST(m2.size() == 0);\n\n                temp[3] = 2;\n                temp[5] = 4;\n                m2 = sparse_to_dense(temp);\n                m.set_size(6);\n                m = 0,0,0,2,0,4;\n                DLIB_TEST(m2 == m);\n\n                m2 = sparse_to_dense(temp, 5);\n                m.set_size(5);\n                m = 0,0,0,2,0;\n                DLIB_TEST(m2 == m);\n\n                m2 = sparse_to_dense(temp, 7);\n                m.set_size(7);\n                m = 0,0,0,2,0,4,0;\n                DLIB_TEST(m2 == m);\n\n                std::vector<std::vector<std::pair<unsigned long,double> > > vects;\n\n                std::vector<std::pair<unsigned long,double> > v;\n                v.push_back(make_pair(5,2));\n                v.push_back(make_pair(3,1));\n                v.push_back(make_pair(5,2));\n                v.push_back(make_pair(3,1));\n                v = make_sparse_vector(v);\n                vects.push_back(v);\n                vects.push_back(v);\n                vects.push_back(v);\n                vects.push_back(v);\n                DLIB_TEST(max_index_plus_one(v) == 6);\n                m2 = sparse_to_dense(v);\n                m.set_size(6);\n                m = 0,0,0,2,0,4;\n                DLIB_TEST_MSG(m2 == m, m2 << \"\\n\\n\" << m );\n\n                m2 = sparse_to_dense(v,7);\n                m.set_size(7);\n                m = 0,0,0,2,0,4,0;\n                DLIB_TEST(m2 == m);\n\n                m2 = sparse_to_dense(v,5);\n                m.set_size(5);\n                m = 0,0,0,2,0;\n                DLIB_TEST(m2 == m);\n\n                v.clear();\n                m2 = sparse_to_dense(v);\n                DLIB_TEST(m2.size() == 0);\n\n\n                std::vector<matrix<double,0,1> > mvects = sparse_to_dense(vects);\n                DLIB_TEST(mvects.size() == 4);\n                m.set_size(6);\n                m = 0,0,0,2,0,4;\n                DLIB_TEST(mvects[0] == m);\n                DLIB_TEST(mvects[1] == m);\n                DLIB_TEST(mvects[2] == m);\n                DLIB_TEST(mvects[3] == m);\n\n\n                mvects = sparse_to_dense(vects, 7);\n                DLIB_TEST(mvects.size() == 4);\n                m.set_size(7);\n                m = 0,0,0,2,0,4,0;\n                DLIB_TEST(mvects[0] == m);\n                DLIB_TEST(mvects[1] == m);\n                DLIB_TEST(mvects[2] == m);\n                DLIB_TEST(mvects[3] == m);\n\n                mvects = sparse_to_dense(vects, 5);\n                DLIB_TEST(mvects.size() == 4);\n                m.set_size(5);\n                m = 0,0,0,2,0;\n                DLIB_TEST(mvects[0] == m);\n                DLIB_TEST(mvects[1] == m);\n                DLIB_TEST(mvects[2] == m);\n                DLIB_TEST(mvects[3] == m);\n\n            }\n        }\n\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            create_iris_datafile();\n\n            test_sparse_to_dense();\n\n            run_test<std::map<unsigned int, double> >();\n            run_test<std::map<unsigned int, float> >();\n            run_test<std::vector<std::pair<unsigned int, float> > >();\n            run_test<std::vector<std::pair<unsigned long, double> > >();\n        }\n    };\n\n    test_data_io a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/directed_graph.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/directed_graph.h>\n#include <dlib/graph.h>\n#include <dlib/graph_utils.h>\n#include <dlib/set.h>\n\n#include \"tester.h\"\n\n// This is called an unnamed-namespace and it has the effect of making everything inside this file \"private\"\n// so that everything you declare will have static linkage.  Thus we won't have any multiply\n// defined symbol errors coming out of the linker when we try to compile the test suite.\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    // Declare the logger we will use in this test.  The name of the tester \n    // should start with \"test.\"\n    logger dlog(\"test.directed_graph\");\n\n    template <\n        typename directed_graph\n        >\n    void directed_graph_test (\n    )\n    /*!\n        requires\n            - directed_graph is an implementation of directed_graph/directed_graph_kernel_abstract.h \n              is instantiated with int\n        ensures\n            - runs tests on directed_graph for compliance with the specs\n    !*/\n    {        \n        print_spinner();\n\n        COMPILE_TIME_ASSERT(is_directed_graph<directed_graph>::value == true);\n        directed_graph a, b;\n        dlib::set<unsigned long>::compare_1b_c s;\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n\n        DLIB_TEST(a.number_of_nodes() == 0);\n\n        DLIB_TEST(graph_contains_length_one_cycle(a) == false);\n\n        a.set_number_of_nodes(5);\n        DLIB_TEST(graph_contains_length_one_cycle(a) == false);\n        DLIB_TEST(graph_is_connected(a) == false);\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n        DLIB_TEST(a.number_of_nodes() == 5);\n\n        for (int i = 0; i < 5; ++i)\n        {\n            a.node(i).data = i;\n            DLIB_TEST(a.node(i).index() == (unsigned int)i);\n        }\n\n        a.remove_node(1);\n\n        DLIB_TEST(a.number_of_nodes() == 4);\n\n\n        // make sure that only the number with data == 1 was remove\n        int count = 0;\n        for (int i = 0; i < 4; ++i)\n        {\n            count += a.node(i).data;\n            DLIB_TEST(a.node(i).number_of_children() == 0);\n            DLIB_TEST(a.node(i).number_of_parents() == 0);\n            DLIB_TEST(a.node(i).index() == (unsigned int)i);\n        }\n\n        DLIB_TEST(count == 9);\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n\n        a.add_edge(1,1);\n        DLIB_TEST(graph_contains_length_one_cycle(a) == true);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == true);\n\n        a.add_edge(1,2);\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == true);\n\n        DLIB_TEST(a.node(1).number_of_children() == 2);\n        DLIB_TEST(a.node(1).number_of_parents() == 1);\n        DLIB_TEST_MSG(a.node(1).parent(0).index() == 1,\"\")\n\n            DLIB_TEST_MSG(a.node(1).child(0).index() + a.node(1).child(1).index() == 3,\"\")\n            DLIB_TEST(a.node(2).number_of_children() == 0);\n        DLIB_TEST(a.node(2).number_of_parents() == 1);\n        DLIB_TEST(a.node(2).index() == 2);\n\n        int val = a.node(1).data;\n        a.remove_node(1);\n        DLIB_TEST(graph_contains_length_one_cycle(a) == false);\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n\n\n        DLIB_TEST(a.number_of_nodes() == 3);\n\n        count = 0;\n        for (int i = 0; i < 3; ++i)\n        {\n            count += a.node(i).data;\n            DLIB_TEST(a.node(i).number_of_children() == 0);\n            DLIB_TEST(a.node(i).number_of_parents() == 0);\n            DLIB_TEST(a.node(i).index() == (unsigned int)i);\n        }\n        DLIB_TEST(count == 9-val);\n\n\n        val = a.add_node();\n        DLIB_TEST(val == 3);\n        DLIB_TEST(a.number_of_nodes() == 4);\n\n        for (int i = 0; i < 4; ++i)\n        {\n            a.node(i).data = i;\n            DLIB_TEST(a.node(i).index() == (unsigned int)i);\n        }\n\n        for (int i = 0; i < 4; ++i)\n        {\n            DLIB_TEST(a.node(i).data == i);\n            DLIB_TEST(a.node(i).index() == (unsigned int)i);\n        }\n\n        a.add_edge(0, 1);\n        a.add_edge(0, 2);\n        DLIB_TEST(graph_is_connected(a) == false);\n        a.add_edge(1, 3);\n        DLIB_TEST(graph_is_connected(a) == true);\n        a.add_edge(2, 3);\n        DLIB_TEST(graph_is_connected(a) == true);\n        DLIB_TEST(graph_contains_length_one_cycle(a) == false);\n\n        DLIB_TEST(a.has_edge(0, 1));\n        DLIB_TEST(a.has_edge(0, 2));\n        DLIB_TEST(a.has_edge(1, 3));\n        DLIB_TEST(a.has_edge(2, 3));\n\n        DLIB_TEST(!a.has_edge(1, 0));\n        DLIB_TEST(!a.has_edge(2, 0));\n        DLIB_TEST(!a.has_edge(3, 1));\n        DLIB_TEST(!a.has_edge(3, 2));\n\n        DLIB_TEST(a.node(0).number_of_parents() == 0);\n        DLIB_TEST(a.node(0).number_of_children() == 2);\n\n        DLIB_TEST(a.node(1).number_of_parents() == 1);\n        DLIB_TEST(a.node(1).number_of_children() == 1);\n        DLIB_TEST(a.node(1).child(0).index() == 3);\n        DLIB_TEST(a.node(1).parent(0).index() == 0);\n\n        DLIB_TEST(a.node(2).number_of_parents() == 1);\n        DLIB_TEST(a.node(2).number_of_children() == 1);\n        DLIB_TEST(a.node(2).child(0).index() == 3);\n        DLIB_TEST(a.node(2).parent(0).index() == 0);\n\n        DLIB_TEST(a.node(3).number_of_parents() == 2);\n        DLIB_TEST(a.node(3).number_of_children() == 0);\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n\n        a.remove_edge(0,1);\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n\n        DLIB_TEST(!a.has_edge(0, 1));\n        DLIB_TEST(a.has_edge(0, 2));\n        DLIB_TEST(a.has_edge(1, 3));\n        DLIB_TEST(a.has_edge(2, 3));\n\n        DLIB_TEST(!a.has_edge(1, 0));\n        DLIB_TEST(!a.has_edge(2, 0));\n        DLIB_TEST(!a.has_edge(3, 1));\n        DLIB_TEST(!a.has_edge(3, 2));\n\n\n        DLIB_TEST(a.node(0).number_of_parents() == 0);\n        DLIB_TEST(a.node(0).number_of_children() == 1);\n\n        DLIB_TEST(a.node(1).number_of_parents() == 0);\n        DLIB_TEST(a.node(1).number_of_children() == 1);\n        DLIB_TEST(a.node(1).child(0).index() == 3);\n\n        DLIB_TEST(a.node(2).number_of_parents() == 1);\n        DLIB_TEST(a.node(2).number_of_children() == 1);\n        DLIB_TEST(a.node(2).child(0).index() == 3);\n        DLIB_TEST(a.node(2).parent(0).index() == 0);\n\n        DLIB_TEST(a.node(3).number_of_parents() == 2);\n        DLIB_TEST(a.node(3).number_of_children() == 0);\n\n        for (int i = 0; i < 4; ++i)\n        {\n            DLIB_TEST(a.node(i).data == i);\n            DLIB_TEST(a.node(i).index() == (unsigned int)i);\n        }\n\n\n\n        swap(a,b);\n\n        DLIB_TEST(a.number_of_nodes() == 0);\n        DLIB_TEST(b.number_of_nodes() == 4);\n        DLIB_TEST(b.node(0).number_of_parents() == 0);\n        DLIB_TEST(b.node(0).number_of_children() == 1);\n\n        DLIB_TEST(b.node(1).number_of_parents() == 0);\n        DLIB_TEST(b.node(1).number_of_children() == 1);\n        DLIB_TEST(b.node(1).child(0).index() == 3);\n\n        DLIB_TEST(b.node(2).number_of_parents() == 1);\n        DLIB_TEST(b.node(2).number_of_children() == 1);\n        DLIB_TEST(b.node(2).child(0).index() == 3);\n        DLIB_TEST(b.node(2).parent(0).index() == 0);\n\n        DLIB_TEST(b.node(3).number_of_parents() == 2);\n        DLIB_TEST(b.node(3).number_of_children() == 0);\n        b.node(0).child_edge(0) = static_cast<unsigned short>(b.node(0).child(0).index()+1);\n        b.node(1).child_edge(0) = static_cast<unsigned short>(b.node(1).child(0).index()+1);\n        b.node(2).child_edge(0) = static_cast<unsigned short>(b.node(2).child(0).index()+1);\n\n        DLIB_TEST_MSG(b.node(0).child_edge(0) == b.node(0).child(0).index()+1,\n                     b.node(0).child_edge(0) << \"  \" << b.node(0).child(0).index()+1);\n        DLIB_TEST_MSG(b.node(1).child_edge(0) == b.node(1).child(0).index()+1,\n                     b.node(1).child_edge(0) << \"  \" << b.node(1).child(0).index()+1);\n        DLIB_TEST_MSG(b.node(2).child_edge(0) == b.node(2).child(0).index()+1,\n                     b.node(2).child_edge(0) << \"  \" << b.node(2).child(0).index()+1);\n\n        DLIB_TEST_MSG(b.node(2).parent_edge(0) == 2+1,\n                     b.node(2).parent_edge(0) << \"  \" << 2+1);\n        DLIB_TEST_MSG(b.node(3).parent_edge(0) == 3+1,\n                     b.node(3).parent_edge(0) << \"  \" << 3+1);\n        DLIB_TEST_MSG(b.node(3).parent_edge(1) == 3+1,\n                     b.node(3).parent_edge(1) << \"  \" << 3+1);\n\n        ostringstream sout;\n\n        serialize(b, sout);\n\n        istringstream sin(sout.str());\n\n        a.set_number_of_nodes(20);\n        DLIB_TEST(a.number_of_nodes() == 20);\n        deserialize(a, sin);\n        DLIB_TEST(a.number_of_nodes() == 4);\n\n        DLIB_TEST(!a.has_edge(0, 1));\n        DLIB_TEST(a.has_edge(0, 2));\n        DLIB_TEST(a.has_edge(1, 3));\n        DLIB_TEST(a.has_edge(2, 3));\n\n        DLIB_TEST(!a.has_edge(1, 0));\n        DLIB_TEST(!a.has_edge(2, 0));\n        DLIB_TEST(!a.has_edge(3, 1));\n        DLIB_TEST(!a.has_edge(3, 2));\n\n        DLIB_TEST_MSG(a.node(0).child_edge(0) == a.node(0).child(0).index()+1,\n                     a.node(0).child_edge(0) << \"  \" << a.node(0).child(0).index()+1);\n        DLIB_TEST_MSG(a.node(1).child_edge(0) == a.node(1).child(0).index()+1,\n                     a.node(1).child_edge(0) << \"  \" << a.node(1).child(0).index()+1);\n        DLIB_TEST_MSG(a.node(2).child_edge(0) == a.node(2).child(0).index()+1,\n                     a.node(2).child_edge(0) << \"  \" << a.node(2).child(0).index()+1);\n        DLIB_TEST_MSG(a.node(2).parent_edge(0) == 2+1,\n                     a.node(2).parent_edge(0) << \"  \" << 2+1);\n        DLIB_TEST_MSG(a.node(3).parent_edge(0) == 3+1,\n                     a.node(3).parent_edge(0) << \"  \" << 3+1);\n        DLIB_TEST_MSG(a.node(3).parent_edge(1) == 3+1,\n                     a.node(3).parent_edge(1) << \"  \" << 3+1);\n\n\n\n        for (int i = 0; i < 4; ++i)\n        {\n            DLIB_TEST(a.node(i).data == i);\n            DLIB_TEST(a.node(i).index() == (unsigned int)i);\n        }\n\n\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n\n        DLIB_TEST(b.number_of_nodes() == 4);\n        DLIB_TEST(b.node(0).number_of_parents() == 0);\n        DLIB_TEST(b.node(0).number_of_children() == 1);\n\n        DLIB_TEST(b.node(1).number_of_parents() == 0);\n        DLIB_TEST(b.node(1).number_of_children() == 1);\n        DLIB_TEST(b.node(1).child(0).index() == 3);\n\n        DLIB_TEST(b.node(2).number_of_parents() == 1);\n        DLIB_TEST(b.node(2).number_of_children() == 1);\n        DLIB_TEST(b.node(2).child(0).index() == 3);\n        DLIB_TEST(b.node(2).parent(0).index() == 0);\n\n        DLIB_TEST(b.node(3).number_of_parents() == 2);\n        DLIB_TEST(b.node(3).number_of_children() == 0);\n\n\n        DLIB_TEST(a.number_of_nodes() == 4);\n        DLIB_TEST(a.node(0).number_of_parents() == 0);\n        DLIB_TEST(a.node(0).number_of_children() == 1);\n\n        DLIB_TEST(a.node(1).number_of_parents() == 0);\n        DLIB_TEST(a.node(1).number_of_children() == 1);\n        DLIB_TEST(a.node(1).child(0).index() == 3);\n\n        DLIB_TEST(a.node(2).number_of_parents() == 1);\n        DLIB_TEST(a.node(2).number_of_children() == 1);\n        DLIB_TEST(a.node(2).child(0).index() == 3);\n        DLIB_TEST(a.node(2).parent(0).index() == 0);\n\n        DLIB_TEST(a.node(3).number_of_parents() == 2);\n        DLIB_TEST(a.node(3).number_of_children() == 0);\n\n        DLIB_TEST(a.number_of_nodes() == 4);\n        a.clear();\n        DLIB_TEST(a.number_of_nodes() == 0);\n\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n\n        a.set_number_of_nodes(10);\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n\n        a.add_edge(0,1);\n        a.add_edge(1,2);\n        a.add_edge(1,3);\n        a.add_edge(2,4);\n        a.add_edge(3,4);\n        a.add_edge(4,5);\n        a.add_edge(5,1);\n\n        DLIB_TEST(graph_contains_directed_cycle(a) == true);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n\n        a.remove_edge(5,1);\n\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n        a.add_edge(7,8);\n        DLIB_TEST(graph_contains_directed_cycle(a) == false);\n        a.add_edge(8,7);\n        DLIB_TEST(graph_contains_directed_cycle(a) == true);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n\n\n        a.clear();\n            /*\n                Make a graph that looks like:\n                0     1\n                 \\   /\n                   2\n                   |\n                   3\n            */\n        a.set_number_of_nodes(4);\n        a.add_edge(0,2);\n        a.add_edge(1,2);\n        a.add_edge(2,3);\n        for (unsigned long i = 0; i < 4; ++i)\n            a.node(i).data = i;\n\n        graph<int>::kernel_1a_c g;\n        create_moral_graph(a,g);\n\n        graph<dlib::set<unsigned long>::compare_1b_c, dlib::set<unsigned long>::compare_1a_c>::kernel_1a_c join_tree;\n        dlib::set<dlib::set<unsigned long>::compare_1b_c>::kernel_1b_c sos;\n\n        create_join_tree(g, join_tree);\n        DLIB_TEST(is_join_tree(g, join_tree));\n        DLIB_TEST(join_tree.number_of_nodes() == 2);\n        DLIB_TEST(graph_contains_undirected_cycle(join_tree) == false);\n        DLIB_TEST(graph_is_connected(join_tree) == true);\n\n        unsigned long temp;\n        triangulate_graph_and_find_cliques(g,sos);\n\n        temp = 2; s.add(temp);\n        temp = 3; s.add(temp);\n        DLIB_TEST(sos.is_member(s));\n        s.clear();\n        temp = 0; s.add(temp);\n        temp = 1; s.add(temp);\n        temp = 2; s.add(temp);\n        DLIB_TEST(sos.is_member(s));\n        DLIB_TEST(sos.size() == 2);\n        DLIB_TEST(sos.is_member(join_tree.node(0).data));\n        DLIB_TEST(sos.is_member(join_tree.node(1).data));\n\n\n        s.clear();\n        temp = 0; s.add(temp);\n        DLIB_TEST(is_clique(g,s) == true);\n        DLIB_TEST(is_maximal_clique(g,s) == false);\n        temp = 3; s.add(temp);\n        DLIB_TEST(is_clique(g,s) == false);\n        s.destroy(3);\n        DLIB_TEST(is_clique(g,s) == true);\n        temp = 2; s.add(temp);\n        DLIB_TEST(is_clique(g,s) == true);\n        DLIB_TEST(is_maximal_clique(g,s) == false);\n        temp = 1; s.add(temp);\n        DLIB_TEST(is_clique(g,s) == true);\n        DLIB_TEST(is_maximal_clique(g,s) == true);\n        s.clear();\n        DLIB_TEST(is_clique(g,s) == true);\n        temp = 3; s.add(temp);\n        DLIB_TEST(is_clique(g,s) == true);\n        temp = 2; s.add(temp);\n        DLIB_TEST(is_clique(g,s) == true);\n        DLIB_TEST(is_maximal_clique(g,s) == true);\n\n\n        DLIB_TEST(a.number_of_nodes() == 4);\n        DLIB_TEST(g.number_of_nodes() == 4);\n        for (unsigned long i = 0; i < 4; ++i)\n            DLIB_TEST( a.node(i).data == (int)i);\n        DLIB_TEST(g.has_edge(0,1));\n        DLIB_TEST(g.has_edge(0,2));\n        DLIB_TEST(g.has_edge(1,2));\n        DLIB_TEST(g.has_edge(3,2));\n        DLIB_TEST(g.has_edge(0,3) == false);\n        DLIB_TEST(g.has_edge(1,3) == false);\n\n    }\n\n\n    void test_copy()\n    {\n        {\n            directed_graph<int,int>::kernel_1a_c a,b;\n\n            a.set_number_of_nodes(3);\n            a.node(0).data = 1;\n            a.node(1).data = 2;\n            a.node(2).data = 3;\n            a.add_edge(0,1);\n            a.add_edge(1,0);\n            a.add_edge(0,2);\n            edge(a,0,1) = 4;\n            edge(a,1,0) = 3;\n            edge(a,0,2) = 5;\n\n            a.add_edge(0,0);\n            edge(a,0,0) = 9;\n            copy_graph(a, b);\n\n            DLIB_TEST(b.number_of_nodes() == 3);\n            DLIB_TEST(b.node(0).data == 1);\n            DLIB_TEST(b.node(1).data == 2);\n            DLIB_TEST(b.node(2).data == 3);\n            DLIB_TEST(edge(b,0,1) == 4);\n            DLIB_TEST(edge(b,1,0) == 3);\n            DLIB_TEST(edge(b,0,2) == 5);\n            DLIB_TEST(edge(b,0,0) == 9);\n        }\n        {\n            directed_graph<int,int>::kernel_1a_c a,b;\n\n            a.set_number_of_nodes(4);\n            a.node(0).data = 1;\n            a.node(1).data = 2;\n            a.node(2).data = 3;\n            a.node(3).data = 8;\n            a.add_edge(0,1);\n            a.add_edge(0,2);\n            a.add_edge(2,3);\n            a.add_edge(3,2);\n            edge(a,0,1) = 4;\n            edge(a,0,2) = 5;\n            edge(a,2,3) = 6;\n            edge(a,3,2) = 3;\n\n            copy_graph(a, b);\n\n            DLIB_TEST(b.number_of_nodes() == 4);\n            DLIB_TEST(b.node(0).data == 1);\n            DLIB_TEST(b.node(1).data == 2);\n            DLIB_TEST(b.node(2).data == 3);\n            DLIB_TEST(b.node(3).data == 8);\n            DLIB_TEST(edge(b,0,1) == 4);\n            DLIB_TEST(edge(b,0,2) == 5);\n            DLIB_TEST(edge(b,2,3) == 6);\n            DLIB_TEST(edge(b,3,2) == 3);\n        }\n    }\n\n\n\n    class directed_graph_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a test for the directed_graph object.  When it is constructed\n                it adds itself into the testing framework.  The command line switch is\n                specified as test_directed_graph by passing that string to the tester constructor.\n        !*/\n    public:\n        directed_graph_tester (\n        ) :\n            tester (\"test_directed_graph\",\n                    \"Runs tests on the directed_graph component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_copy();\n\n            dlog << LINFO << \"testing kernel_1a_c\";\n            directed_graph_test<directed_graph<int,unsigned short>::kernel_1a_c>();\n\n            dlog << LINFO << \"testing kernel_1a\";\n            directed_graph_test<directed_graph<int,unsigned short>::kernel_1a>();\n        }\n    } a;\n\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/discriminant_pca.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm.h>\n#include <dlib/rand.h>\n#include <dlib/string.h>\n#include <vector>\n#include <sstream>\n#include <ctime>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.discriminant_pca\");\n\n    using dlib::equal;\n\n    class discriminant_pca_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        discriminant_pca_tester (\n        ) :\n            tester (\n                \"test_discriminant_pca\",       // the command line argument name for this test\n                \"Run tests on the discriminant_pca object.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n            thetime = time(0);\n        }\n\n        time_t thetime;\n        dlib::rand rnd;\n\n        template <typename dpca_type>\n        void test1()\n        {\n\n            dpca_type dpca, dpca2, dpca3;\n\n            DLIB_TEST(dpca.in_vector_size() == 0);\n            DLIB_TEST(dpca.between_class_weight() == 1);\n            DLIB_TEST(dpca.within_class_weight() == 1);\n\n            // generate a bunch of 4 dimensional vectors and compute the normal PCA transformation matrix\n            // and just make sure it is a unitary matrix as it should be.\n            for (int i = 0; i < 5000; ++i)\n            {\n                dpca.add_to_total_variance(randm(4,1,rnd));\n                DLIB_TEST(dpca.in_vector_size() == 4);\n            }\n\n\n            matrix<double> mat = dpca.dpca_matrix(1);\n\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(4)));\n\n            mat = dpca.dpca_matrix(0.9);\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(mat.nr())));\n\n            matrix<double> eig;\n            dpca.dpca_matrix(mat, eig, 1);\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(4)));\n            // check that all eigen values are grater than 0\n            DLIB_TEST(min(eig > 0) == 1);\n            DLIB_TEST(eig.size() == mat.nr());\n            DLIB_TEST(is_col_vector(eig));\n            // check that the eigenvalues are sorted\n            double last = eig(0);\n            for (long i = 1; i < eig.size(); ++i)\n            {\n                DLIB_TEST(last >= eig(i));\n            }\n\n            {\n                matrix<double> mat = dpca.dpca_matrix_of_size(4);\n                DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(4)));\n            }\n            {\n                matrix<double> mat = dpca.dpca_matrix_of_size(3);\n                DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(3)));\n            }\n\n\n            dpca.set_within_class_weight(5);\n            dpca.set_between_class_weight(6);\n\n            DLIB_TEST(dpca.in_vector_size() == 4);\n            DLIB_TEST(dpca.within_class_weight() == 5);\n            DLIB_TEST(dpca.between_class_weight() == 6);\n\n\n            ostringstream sout;\n            serialize(dpca, sout);\n            istringstream sin(sout.str());\n            deserialize(dpca2, sin);\n\n            // now make sure the serialization worked\n            DLIB_TEST(dpca.in_vector_size() == 4);\n            DLIB_TEST(dpca.within_class_weight() == 5);\n            DLIB_TEST(dpca.between_class_weight() == 6);\n            DLIB_TEST(dpca2.in_vector_size() == 4);\n            DLIB_TEST(dpca2.within_class_weight() == 5);\n            DLIB_TEST(dpca2.between_class_weight() == 6);\n            DLIB_TEST(equal(dpca.dpca_matrix(), dpca2.dpca_matrix(), 1e-10));\n            DLIB_TEST(equal(mat, dpca2.dpca_matrix(1), 1e-10));\n            DLIB_TEST(equal(dpca.dpca_matrix(1), mat, 1e-10));\n\n            // now test swap\n            dpca2.swap(dpca3);\n            DLIB_TEST(dpca2.in_vector_size() == 0);\n            DLIB_TEST(dpca2.between_class_weight() == 1);\n            DLIB_TEST(dpca2.within_class_weight() == 1);\n\n            DLIB_TEST(dpca3.in_vector_size() == 4);\n            DLIB_TEST(dpca3.within_class_weight() == 5);\n            DLIB_TEST(dpca3.between_class_weight() == 6);\n            DLIB_TEST(equal(mat, dpca3.dpca_matrix(1), 1e-10));\n            DLIB_TEST((dpca3 + dpca3).in_vector_size() == 4);\n            DLIB_TEST((dpca3 + dpca3).within_class_weight() == 5);\n            DLIB_TEST((dpca3 + dpca3).between_class_weight() == 6);\n\n            dpca.clear();\n\n            DLIB_TEST(dpca.in_vector_size() == 0);\n            DLIB_TEST(dpca.between_class_weight() == 1);\n            DLIB_TEST(dpca.within_class_weight() == 1);\n        }\n\n        template <typename dpca_type>\n        void test2()\n        {\n            dpca_type dpca, dpca2, dpca3;\n\n            typename dpca_type::column_matrix samp1(4), samp2(4);\n\n            for (int i = 0; i < 5000; ++i)\n            {\n                dpca.add_to_total_variance(randm(4,1,rnd));\n                DLIB_TEST(dpca.in_vector_size() == 4);\n\n                // do this to subtract out the variance along the 3rd axis \n                samp1 = 0,0,0,0;\n                samp2 = 0,0,1,0;\n                dpca.add_to_within_class_variance(samp1, samp2);\n            }\n\n            matrix<double> mat;\n\n            dpca.set_within_class_weight(0);\n            mat = dpca.dpca_matrix(1);\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(4)));\n            DLIB_TEST(dpca.dpca_matrix(1).nr() == 4);\n            dpca.set_within_class_weight(1000);\n            DLIB_TEST(dpca.dpca_matrix(1).nr() == 3);\n\n            // the 3rd column of the transformation matrix should be all zero since\n            // we killed all the variation long the 3rd axis\n            DLIB_TEST(sum(abs(colm(dpca.dpca_matrix(1),2))) < 1e-5);\n\n            mat = dpca.dpca_matrix(1);\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(3)));\n\n\n        }\n\n        template <typename dpca_type>\n        void test3()\n        {\n            dpca_type dpca, dpca2, dpca3;\n\n            typename dpca_type::column_matrix samp1(4), samp2(4);\n\n            for (int i = 0; i < 5000; ++i)\n            {\n                dpca.add_to_total_variance(randm(4,1,rnd));\n                DLIB_TEST(dpca.in_vector_size() == 4);\n\n                // do this to subtract out the variance along the 3rd axis \n                samp1 = 0,0,0,0;\n                samp2 = 0,0,1,0;\n                dpca.add_to_within_class_variance(samp1, samp2);\n\n                // do this to subtract out the variance along the 1st axis \n                samp1 = 0,0,0,0;\n                samp2 = 1,0,0,0;\n                dpca.add_to_within_class_variance(samp1, samp2);\n            }\n\n            matrix<double> mat;\n\n            dpca.set_within_class_weight(0);\n            mat = dpca.dpca_matrix(1);\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(4)));\n            DLIB_TEST(dpca.dpca_matrix(1).nr() == 4);\n            dpca.set_within_class_weight(10000);\n            DLIB_TEST(dpca.dpca_matrix(1).nr() == 2);\n\n            // the 1st and 3rd columns of the transformation matrix should be all zero since\n            // we killed all the variation long the 1st and 3rd axes\n            DLIB_TEST(sum(abs(colm(dpca.dpca_matrix(1),2))) < 1e-5);\n            DLIB_TEST(sum(abs(colm(dpca.dpca_matrix(1),0))) < 1e-5);\n\n            mat = dpca.dpca_matrix(1);\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(2)));\n\n\n        }\n\n        template <typename dpca_type>\n        void test4()\n        {\n            dpca_type dpca, dpca2, dpca3;\n\n            dpca_type add_dpca1, add_dpca2, add_dpca3, add_dpca4, sum_dpca;\n\n            typename dpca_type::column_matrix samp1(4), samp2(4), samp;\n\n            for (int i = 0; i < 5000; ++i)\n            {\n                samp = randm(4,1,rnd);\n                dpca.add_to_total_variance(samp);\n                add_dpca4.add_to_total_variance(samp);\n                DLIB_TEST(dpca.in_vector_size() == 4);\n\n                // do this to subtract out the variance along the 3rd axis \n                samp1 = 0,0,0,0;\n                samp2 = 0,0,1,0;\n                dpca.add_to_within_class_variance(samp1, samp2);\n                add_dpca1.add_to_within_class_variance(samp1, samp2);\n\n                // do this to subtract out the variance along the 1st axis \n                samp1 = 0,0,0,0;\n                samp2 = 1,0,0,0;\n                dpca.add_to_within_class_variance(samp1, samp2);\n                add_dpca2.add_to_within_class_variance(samp1, samp2);\n\n                // do this to add the variance along the 3rd axis back in\n                samp1 = 0,0,0,0;\n                samp2 = 0,0,1,0;\n                dpca.add_to_between_class_variance(samp1, samp2);\n                add_dpca3.add_to_between_class_variance(samp1, samp2);\n            }\n\n            matrix<double> mat, mat2;\n\n            sum_dpca += dpca_type() + dpca_type() + add_dpca1 + dpca_type() + add_dpca2 + add_dpca3 + add_dpca4;\n            dpca.set_within_class_weight(0);\n            dpca.set_between_class_weight(0);\n            sum_dpca.set_within_class_weight(0);\n            sum_dpca.set_between_class_weight(0);\n            mat = dpca.dpca_matrix(1);\n            DLIB_TEST(equal(mat, sum_dpca.dpca_matrix(1), 1e-10));\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(4)));\n            DLIB_TEST(dpca.dpca_matrix(1).nr() == 4);\n            dpca.set_within_class_weight(10000);\n            sum_dpca.set_within_class_weight(10000);\n            DLIB_TEST(dpca.dpca_matrix(1).nr() == 2);\n\n            // the 1st and 3rd columns of the transformation matrix should be all zero since\n            // we killed all the variation long the 1st and 3rd axes\n            DLIB_TEST(sum(abs(colm(dpca.dpca_matrix(1),2))) < 1e-4);\n            DLIB_TEST(sum(abs(colm(dpca.dpca_matrix(1),0))) < 1e-4);\n\n            mat = dpca.dpca_matrix(1);\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(2)));\n            DLIB_TEST_MSG(equal(mat, mat2=sum_dpca.dpca_matrix(1), 1e-9), max(abs(mat - mat2)));\n\n\n            // now add the variance back in using the between class weight\n            dpca.set_within_class_weight(0);\n            dpca.set_between_class_weight(1);\n            mat = dpca.dpca_matrix(1);\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(4)));\n            DLIB_TEST(dpca.dpca_matrix(1).nr() == 4);\n            dpca.set_within_class_weight (10000);\n            dpca.set_between_class_weight(100000);\n            sum_dpca.set_within_class_weight (10000);\n            sum_dpca.set_between_class_weight(100000);\n            DLIB_TEST(dpca.dpca_matrix(1).nr() == 3);\n\n            // the first column should be all zeros\n            DLIB_TEST(sum(abs(colm(dpca.dpca_matrix(1),0))) < 1e-5);\n\n            mat = dpca.dpca_matrix(1);\n            DLIB_TEST(equal(mat*trans(mat), identity_matrix<double>(3)));\n            DLIB_TEST(equal(mat, sum_dpca.dpca_matrix(1)));\n\n\n        }\n\n        template <typename dpca_type>\n        void test5()\n        {\n            dpca_type dpca, dpca2;\n            typename dpca_type::column_matrix samp1(4), samp2(4);\n\n            samp1 = 0,0,0,0;\n            samp2 = 0,0,1,0;\n\n            for (int i = 0; i < 5000; ++i)\n            {\n                dpca.add_to_between_class_variance(samp1, samp2);\n                dpca2.add_to_total_variance(samp1);\n                dpca2.add_to_total_variance(samp2);\n            }\n\n            matrix<double> mat, eig;\n            dpca.dpca_matrix(mat, eig, 1);\n\n            // make sure the eigenvalues come out the way they should for this simple data set\n            DLIB_TEST(eig.size() == 1);\n            DLIB_TEST_MSG(abs(eig(0) - 1) < 1e-10, abs(eig(0) - 1));\n\n            dpca2.dpca_matrix(mat, eig, 1);\n\n            // make sure the eigenvalues come out the way they should for this simple data set\n            DLIB_TEST(eig.size() == 1);\n            DLIB_TEST(abs(eig(0) - 0.25) < 1e-10);\n\n        }\n\n        void perform_test (\n        )\n        {\n            ++thetime;\n            typedef matrix<double,0,1> sample_type;\n            typedef discriminant_pca<sample_type> dpca_type;\n\n            dlog << LINFO << \"time seed: \" << thetime;\n            rnd.set_seed(cast_to_string(thetime));\n\n            test5<dpca_type>();\n\n            for (int i = 0; i < 10; ++i)\n            {\n                print_spinner();\n                test1<dpca_type>();\n                print_spinner();\n                test2<dpca_type>();\n                print_spinner();\n                test3<dpca_type>();\n                print_spinner();\n                test4<dpca_type>();\n            }\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    discriminant_pca_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/disjoint_subsets.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/disjoint_subsets.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.disjoint_subsets\");\n\n    void test_disjoint_subset()\n    {\n        print_spinner();\n        disjoint_subsets s;\n\n        DLIB_TEST(s.size() == 0);\n\n        s.set_size(5);\n        DLIB_TEST(s.size() == 5);\n\n        DLIB_TEST(s.find_set(0) == 0);\n        DLIB_TEST(s.find_set(1) == 1);\n        DLIB_TEST(s.find_set(2) == 2);\n        DLIB_TEST(s.find_set(3) == 3);\n        DLIB_TEST(s.find_set(4) == 4);\n\n\n        unsigned long id = s.merge_sets(1,3);\n        DLIB_TEST(s.find_set(0) == 0);\n        DLIB_TEST(s.find_set(1) == id);\n        DLIB_TEST(s.find_set(2) == 2);\n        DLIB_TEST(s.find_set(3) == id);\n        DLIB_TEST(s.find_set(4) == 4);\n\n        id = s.merge_sets(s.find_set(1),4);\n        DLIB_TEST(s.find_set(0) == 0);\n        DLIB_TEST(s.find_set(1) == id);\n        DLIB_TEST(s.find_set(2) == 2);\n        DLIB_TEST(s.find_set(3) == id);\n        DLIB_TEST(s.find_set(4) == id);\n\n        unsigned long id2 = s.merge_sets(0,2);\n        DLIB_TEST(s.find_set(0) == id2);\n        DLIB_TEST(s.find_set(1) == id);\n        DLIB_TEST(s.find_set(2) == id2);\n        DLIB_TEST(s.find_set(3) == id);\n        DLIB_TEST(s.find_set(4) == id);\n\n        id = s.merge_sets(s.find_set(1),s.find_set(0));\n        DLIB_TEST(s.find_set(0) == id);\n        DLIB_TEST(s.find_set(1) == id);\n        DLIB_TEST(s.find_set(2) == id);\n        DLIB_TEST(s.find_set(3) == id);\n        DLIB_TEST(s.find_set(4) == id);\n\n        DLIB_TEST(s.size() == 5);\n        s.set_size(1);\n        DLIB_TEST(s.size() == 1);\n        DLIB_TEST(s.find_set(0) == 0);\n        s.set_size(2);\n        DLIB_TEST(s.size() == 2);\n        DLIB_TEST(s.find_set(0) == 0);\n        DLIB_TEST(s.find_set(1) == 1);\n        id = s.merge_sets(0,1);\n        DLIB_TEST(s.size() == 2);\n        DLIB_TEST(id == s.find_set(0));\n        DLIB_TEST(id == s.find_set(1));\n        DLIB_TEST(s.size() == 2);\n        s.clear();\n        DLIB_TEST(s.size() == 0);\n\n    }\n\n\n    class tester_disjoint_subsets : public tester\n    {\n    public:\n        tester_disjoint_subsets (\n        ) :\n            tester (\"test_disjoint_subsets\",\n                    \"Runs tests on the disjoint_subsets component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_disjoint_subset();\n        }\n    } a;\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/ekm_and_lisf.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm.h>\n#include <dlib/rand.h>\n#include <dlib/string.h>\n#include <vector>\n#include <sstream>\n#include <ctime>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.ekm_and_lisf\");\n\n\n    class empirical_kernel_map_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        empirical_kernel_map_tester (\n        ) :\n            tester (\n                \"test_ekm_and_lisf\",       // the command line argument name for this test\n                \"Run tests on the empirical_kernel_map and linearly_independent_subset_finder objects.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n            thetime = time(0);\n        }\n\n        time_t thetime;\n        dlib::rand rnd;\n\n        template <typename T>\n        void validate (\n            const T& ekm_small,\n            const T& ekm_big\n        )\n        {\n            matrix<double> tmat;\n            projection_function<typename T::kernel_type> proj;\n\n            ekm_small.get_transformation_to(ekm_big, tmat, proj);\n            DLIB_TEST(tmat.nr() == ekm_big.out_vector_size());\n            DLIB_TEST(tmat.nc() == ekm_small.out_vector_size());\n            DLIB_TEST((unsigned long)proj.basis_vectors.size() == ekm_big.basis_size() - ekm_small.basis_size());\n            for (unsigned long i = 0; i < 6; ++i)\n            {\n                const typename T::sample_type temp = randm(4,1,rnd);\n                DLIB_TEST(length(ekm_big.project(temp) - (tmat*ekm_small.project(temp) + proj(temp))) < 1e-10);\n            }\n        }\n\n\n        void test_transformation_stuff()\n        {\n            typedef matrix<double,0,1> sample_type;\n            typedef radial_basis_kernel<sample_type> kernel_type;\n            const kernel_type kern(1);\n\n\n            for (unsigned long n = 1; n < 6; ++n)\n            {\n                print_spinner();\n                for (unsigned long extra = 1; extra < 10; ++extra)\n                {\n                    std::vector<sample_type> samps_small, samps_big;\n                    linearly_independent_subset_finder<kernel_type> lisf_small(kern, 1000);\n                    linearly_independent_subset_finder<kernel_type> lisf_big(kern, 1000);\n                    for (unsigned long i = 0; i < n; ++i)\n                    {\n                        samps_small.push_back(randm(4,1,rnd));\n                        samps_big.push_back(samps_small.back());\n                        lisf_big.add(samps_small.back());\n                        lisf_small.add(samps_small.back());\n                    }\n                    for (unsigned long i = 0; i < extra; ++i)\n                    {\n                        samps_big.push_back(randm(4,1,rnd));\n                        lisf_big.add(samps_big.back());\n                    }\n\n\n                    // test no lisf\n                    {\n                        empirical_kernel_map<kernel_type> ekm_small, ekm_big;\n                        ekm_small.load(kern, samps_small);\n                        ekm_big.load(kern, samps_big);\n\n                        validate(ekm_small, ekm_big);\n                    }\n\n                    // test with lisf\n                    {\n                        empirical_kernel_map<kernel_type> ekm_small, ekm_big;\n                        ekm_small.load(lisf_small);\n                        ekm_big.load(lisf_big);\n\n                        validate(ekm_small, ekm_big);\n                    }\n\n                    // test with partly lisf\n                    {\n                        empirical_kernel_map<kernel_type> ekm_small, ekm_big;\n                        ekm_small.load(kern, samps_small);\n                        ekm_big.load(lisf_big);\n\n                        validate(ekm_small, ekm_big);\n                    }\n\n                    // test with partly lisf\n                    {\n                        empirical_kernel_map<kernel_type> ekm_small, ekm_big;\n                        ekm_small.load(lisf_small);\n                        ekm_big.load(kern, samps_big);\n\n                        validate(ekm_small, ekm_big);\n                    }\n\n                }\n            }\n\n\n            // test what happens if the bigger ekm only has repeated basis vectors\n            {\n                empirical_kernel_map<kernel_type> ekm_big, ekm_small;\n                std::vector<sample_type> samps_big, samps_small;\n\n                sample_type temp = randm(4,1,rnd);\n\n                samps_small.push_back(temp);\n                samps_big.push_back(temp);\n                samps_big.push_back(temp);\n\n                ekm_big.load(kern, samps_big);\n                ekm_small.load(kern, samps_small);\n\n                validate(ekm_small, ekm_big);\n\n            }\n            {\n                empirical_kernel_map<kernel_type> ekm_big, ekm_small;\n                linearly_independent_subset_finder<kernel_type> lisf_small(kern, 1000);\n                std::vector<sample_type> samps_big;\n\n                sample_type temp = randm(4,1,rnd);\n\n                lisf_small.add(temp);\n                samps_big.push_back(temp);\n                samps_big.push_back(temp);\n\n                ekm_big.load(kern, samps_big);\n                ekm_small.load(lisf_small);\n\n                validate(ekm_small, ekm_big);\n\n            }\n            {\n                empirical_kernel_map<kernel_type> ekm_big, ekm_small;\n                std::vector<sample_type> samps_big, samps_small;\n\n                sample_type temp = randm(4,1,rnd);\n                sample_type temp2 = randm(4,1,rnd);\n\n                samps_small.push_back(temp);\n                samps_small.push_back(temp2);\n                samps_big.push_back(temp);\n                samps_big.push_back(temp2);\n                samps_big.push_back(randm(4,1,rnd));\n\n                ekm_big.load(kern, samps_big);\n                ekm_small.load(kern, samps_small);\n\n                validate(ekm_small, ekm_big);\n\n            }\n            {\n                empirical_kernel_map<kernel_type> ekm_big, ekm_small;\n                linearly_independent_subset_finder<kernel_type> lisf_small(kern, 1000);\n                std::vector<sample_type> samps_big;\n\n                sample_type temp = randm(4,1,rnd);\n                sample_type temp2 = randm(4,1,rnd);\n\n                lisf_small.add(temp);\n                lisf_small.add(temp2);\n                samps_big.push_back(temp);\n                samps_big.push_back(temp2);\n                samps_big.push_back(temp);\n\n                ekm_big.load(kern, samps_big);\n                ekm_small.load(lisf_small);\n\n                validate(ekm_small, ekm_big);\n\n            }\n\n\n        }\n\n\n\n        void perform_test (\n        )\n        {\n            ++thetime;\n            typedef matrix<double,0,1> sample_type;\n            //dlog << LINFO << \"time seed: \" << thetime;\n            //rnd.set_seed(cast_to_string(thetime));\n\n\n            typedef radial_basis_kernel<sample_type> kernel_type;\n\n\n            for (int n = 1; n < 10; ++n)\n            {\n                print_spinner();\n                dlog << LINFO << \"matrix size \" << n;\n\n                std::vector<sample_type> samples;\n                // make some samples\n                for (int i = 0; i < n; ++i)\n                {\n                    samples.push_back(randm(4,1,rnd));\n                    // double up the samples just to mess with the lisf\n                    if (n > 5)\n                        samples.push_back(samples.back());\n                }\n\n                dlog << LINFO << \"samples.size(): \"<< samples.size();\n\n                const kernel_type kern(1);\n\n                linearly_independent_subset_finder<kernel_type> lisf(kern, 100, 1e-4);\n                unsigned long count = 0;\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    if (lisf.add(samples[i]))\n                    {\n                        DLIB_TEST(equal(lisf[lisf.size()-1], samples[i]));\n                        ++count;\n                    }\n                }\n                DLIB_TEST(count == lisf.size());\n\n                DLIB_TEST(lisf.size() == (unsigned int)n);\n\n\n                dlog << LINFO << \"lisf.size(): \"<< lisf.size();\n\n                // make sure the kernel matrices coming out of the lisf are correct\n                DLIB_TEST(dlib::equal(lisf.get_kernel_matrix(), kernel_matrix(kern, lisf), 1e-8));\n                DLIB_TEST(dlib::equal(lisf.get_inv_kernel_marix(), inv(kernel_matrix(kern, lisf.get_dictionary())), 1e-8));\n\n                empirical_kernel_map<kernel_type> ekm;\n                ekm.load(lisf);\n                DLIB_TEST(ekm.basis_size() == lisf.size());\n\n                std::vector<sample_type> proj_samples;\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    double err;\n                    proj_samples.push_back(ekm.project(samples[i], err));\n                    DLIB_TEST(err <= 1e-4);\n                    const double error_agreement = std::abs(err - lisf.projection_error(samples[i]));\n                    dlog << LTRACE << \"err: \" << err << \"    error_agreement: \"<< error_agreement;\n                    DLIB_TEST(error_agreement < 1e-11);\n                }\n\n                for (int i = 0; i < 5; ++i)\n                {\n                    sample_type temp = randm(4,1,rnd);\n                    double err;\n                    ekm.project(temp, err);\n                    const double error_agreement = std::abs(err - lisf.projection_error(temp));\n                    dlog << LTRACE << \"err: \" << err << \"    error_agreement: \"<< error_agreement;\n                    DLIB_TEST(error_agreement < 1e-11);\n                }\n\n                // make sure the EKM did the projection correctly\n                DLIB_TEST(dlib::equal(kernel_matrix(kern, samples), kernel_matrix(linear_kernel<sample_type>(), proj_samples), 1e-5));\n            }\n\n\n            test_transformation_stuff();\n\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    empirical_kernel_map_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/empirical_kernel_map.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm.h>\n#include <dlib/rand.h>\n#include <dlib/string.h>\n#include <vector>\n#include <sstream>\n#include <ctime>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.empirical_kernel_map\");\n\n\n    class empirical_kernel_map_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        empirical_kernel_map_tester (\n        ) :\n            tester (\n                \"test_empirical_kernel_map\",       // the command line argument name for this test\n                \"Run tests on the empirical_kernel_map object.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n            // always use the same time so that tests are repeatable\n            thetime = 0;//time(0);\n        }\n\n        time_t thetime;\n        dlib::rand rnd;\n\n        void test_projection_error()\n        {\n            for (int runs = 0; runs < 10; ++runs)\n            {\n                print_spinner();\n                typedef matrix<double,0,1> sample_type;\n                typedef radial_basis_kernel<sample_type> kernel_type;\n                const kernel_type kern(0.2);\n\n                empirical_kernel_map<kernel_type> ekm;\n\n                // generate samples\n                const int num = rnd.get_random_8bit_number()%50 + 1;\n                std::vector<sample_type> samples;\n                for (int i = 0; i < num; ++i)\n                {\n                    samples.push_back(randm(5,1,rnd));\n                }\n\n\n                ekm.load(kern, samples);\n                DLIB_TEST(ekm.basis_size() == samples.size());\n\n                double err;\n\n                // the samples in the basis should have zero projection error\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    ekm.project(samples[i], err);\n                    DLIB_TEST_MSG(abs(err) < 1e-13, abs(err));\n\n                }\n                \n                // Do some sanity tests on the conversion to distance functions while we are at it.\n                for (int i = 0; i < 30; ++i)\n                {\n                    // pick two random samples\n                    const sample_type samp1 = samples[rnd.get_random_32bit_number()%samples.size()];\n                    const sample_type samp2 = samples[rnd.get_random_32bit_number()%samples.size()];\n\n                    const matrix<double,0,1> proj1 = ekm.project(samp1);\n                    const matrix<double,0,1> proj2 = ekm.project(samp2);\n\n                    distance_function<kernel_type> df1 = ekm.convert_to_distance_function(proj1);\n                    distance_function<kernel_type> df2 = ekm.convert_to_distance_function(proj2);\n\n                    DLIB_TEST(df1.get_kernel() == kern);\n                    DLIB_TEST(df2.get_kernel() == kern);\n\n                    // make sure the norms are correct\n                    DLIB_TEST(std::abs(df1.get_squared_norm()  - \n                                       trans(df1.get_alpha())*kernel_matrix(df1.get_kernel(),df1.get_basis_vectors())*df1.get_alpha()) < 1e-10);\n                    DLIB_TEST(std::abs(df2.get_squared_norm()  - \n                                       trans(df2.get_alpha())*kernel_matrix(df2.get_kernel(),df2.get_basis_vectors())*df2.get_alpha()) < 1e-10);\n\n\n                    const double true_dist = std::sqrt(kern(samp1,samp1) + kern(samp2,samp2) - 2*kern(samp1,samp2));\n                    DLIB_TEST_MSG(abs(df1(df2) - true_dist) < 1e-7, abs(df1(df2) - true_dist));\n                    DLIB_TEST_MSG(abs(length(proj1-proj2) - true_dist) < 1e-7, abs(length(proj1-proj2) - true_dist));\n                    \n\n                    // test distance function operators\n                    const decision_function<kernel_type> dec1 = ekm.convert_to_decision_function(proj1);\n                    const decision_function<kernel_type> dec2 = ekm.convert_to_decision_function(proj2);\n                    DLIB_TEST(dec1.kernel_function == kern);\n                    DLIB_TEST(dec2.kernel_function == kern);\n\n                    distance_function<kernel_type> temp;\n                    temp = dec1;\n                    DLIB_TEST(std::abs(temp.get_squared_norm() - df1.get_squared_norm()) < 1e-10);\n                    temp = dec2;\n                    DLIB_TEST(std::abs(temp.get_squared_norm() - df2.get_squared_norm()) < 1e-10);\n                    temp = distance_function<kernel_type>(dec1.alpha, dec1.kernel_function, dec1.basis_vectors);\n                    DLIB_TEST(std::abs(temp.get_squared_norm() - df1.get_squared_norm()) < 1e-10);\n\n                    df1 = dec1;\n\n                    temp = df1 + df2;\n                    decision_function<kernel_type> dec3(temp.get_alpha(), 0, temp.get_kernel(), temp.get_basis_vectors()); \n                    DLIB_TEST(std::abs(temp.get_squared_norm()  - \n                                       trans(temp.get_alpha())*kernel_matrix(temp.get_kernel(),temp.get_basis_vectors())*temp.get_alpha()) < 1e-10);\n                    for (unsigned long j = 0; j < samples.size(); ++j)\n                    {\n                        DLIB_TEST(std::abs(dec3(samples[j]) - (dec1(samples[j]) + dec2(samples[j]))) < 1e-10);\n                    }\n\n\n                    temp = df1 - df2;\n                    dec3 = decision_function<kernel_type>(temp.get_alpha(), 0, temp.get_kernel(), temp.get_basis_vectors()); \n                    DLIB_TEST(std::abs(temp.get_squared_norm()  - \n                                       trans(temp.get_alpha())*kernel_matrix(temp.get_kernel(),temp.get_basis_vectors())*temp.get_alpha()) < 1e-10);\n                    for (unsigned long j = 0; j < samples.size(); ++j)\n                    {\n                        DLIB_TEST(std::abs(dec3(samples[j]) - (dec1(samples[j]) - dec2(samples[j]))) < 1e-10);\n                    }\n\n                    temp = 3*(df1 - df2)*2;\n                    dec3 = decision_function<kernel_type>(temp.get_alpha(), 0, temp.get_kernel(), temp.get_basis_vectors()); \n                    DLIB_TEST(std::abs(temp.get_squared_norm()  - \n                                       trans(temp.get_alpha())*kernel_matrix(temp.get_kernel(),temp.get_basis_vectors())*temp.get_alpha()) < 1e-10);\n                    for (unsigned long j = 0; j < samples.size(); ++j)\n                    {\n                        DLIB_TEST(std::abs(dec3(samples[j]) - 6*(dec1(samples[j]) - dec2(samples[j]))) < 1e-10);\n                    }\n\n                    distance_function<kernel_type> df_empty(kern);\n\n                    temp = df_empty + (df1 + df2)/2 + df_empty - df_empty + (df_empty + df_empty) - (df_empty - df_empty);\n                    dec3 = decision_function<kernel_type>(temp.get_alpha(), 0, temp.get_kernel(), temp.get_basis_vectors()); \n                    DLIB_TEST(std::abs(temp.get_squared_norm()  - \n                                       trans(temp.get_alpha())*kernel_matrix(temp.get_kernel(),temp.get_basis_vectors())*temp.get_alpha()) < 1e-10);\n                    for (unsigned long j = 0; j < samples.size(); ++j)\n                    {\n                        DLIB_TEST(std::abs(dec3(samples[j]) - 0.5*(dec1(samples[j]) + dec2(samples[j]))) < 1e-10);\n                    }\n                }\n                // Do some sanity tests on the conversion to distance functions while we are at it.  This\n                // time multiply one of the projections by 30 and see that it still all works out right.\n                for (int i = 0; i < 30; ++i)\n                {\n                    // pick two random samples\n                    const sample_type samp1 = samples[rnd.get_random_32bit_number()%samples.size()];\n                    const sample_type samp2 = samples[rnd.get_random_32bit_number()%samples.size()];\n\n                    matrix<double,0,1> proj1 = ekm.project(samp1);\n                    matrix<double,0,1> proj2 = 30*ekm.project(samp2);\n\n                    distance_function<kernel_type> df1 = ekm.convert_to_distance_function(proj1);\n                    distance_function<kernel_type> df2 = ekm.convert_to_distance_function(proj2);\n\n                    DLIB_TEST_MSG(abs(length(proj1-proj2) - df1(df2)) < 1e-7, abs(length(proj1-proj2) - df1(df2)));\n                }\n\n\n                // now generate points with projection error\n                for (double i = 1; i < 10; ++i)\n                {\n                    sample_type test_point = i*randm(5,1,rnd);\n                    ekm.project(test_point, err);\n                    // turn into normal distance rather than squared distance\n                    err = sqrt(err);\n                    dlog << LTRACE << \"projection error: \" << err;\n\n                    distance_function<kernel_type> df = ekm.convert_to_distance_function(ekm.project(test_point));\n\n                    // the projection error should be the distance between the test_point and the point it gets\n                    // projected onto\n                    DLIB_TEST_MSG(abs(df(test_point) - err) < 1e-10, abs(df(test_point) - err));\n                    // while we are at it make sure the squared norm in the distance function is right\n                    double df_error = abs(df.get_squared_norm() - trans(df.get_alpha())*kernel_matrix(kern, samples)*df.get_alpha());\n                    DLIB_TEST_MSG( df_error < 1e-10, df_error);\n                }\n\n\n\n            }\n        }\n\n        template <typename kernel_type>\n        void test_with_kernel(const kernel_type& kern)\n        {\n            typedef typename kernel_type::sample_type sample_type;\n\n            empirical_kernel_map<kernel_type> ekm, ekm2, ekm3;\n\n            for (int j = 0; j < 10; ++j)\n            {\n                sample_type samp;\n                std::vector<sample_type> samples;\n                std::vector<sample_type> proj_samples;\n                print_spinner();\n                const int num = rnd.get_random_8bit_number()%200 + 1;\n                // make some random samples\n                for (int i = 0; i < num; ++i)\n                {\n                    samples.push_back(randm(4,1,rnd));\n                }\n                // add on a little bit to make sure there is at least one non-zero sample.  If all the \n                // samples are zero then empirical_kernel_map_error will be thrown and we don't want that.\n                samples.front()(0) += 0.001;\n\n                ekm2.load(kern, samples);\n                DLIB_TEST(ekm2.basis_size() == samples.size());\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                    DLIB_TEST(dlib::equal(ekm2[i] , samples[i]));\n\n                // test serialization\n                ostringstream sout;\n                serialize(ekm2, sout);\n                ekm2.clear();\n                istringstream sin(sout.str());\n                deserialize(ekm3, sin);\n                // also test swap\n                ekm3.swap(ekm);\n                DLIB_TEST(ekm.get_kernel() == kern);\n                DLIB_TEST(ekm.out_vector_size() != 0);\n                DLIB_TEST(ekm2.out_vector_size() == 0);\n                DLIB_TEST(ekm3.out_vector_size() == 0);\n\n\n\n                // project all the samples into kernel space\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    proj_samples.push_back(ekm.project(samples[i]));\n                }\n\n                DLIB_TEST(max(abs(kernel_matrix(kern, samples) - kernel_matrix(linear_kernel<sample_type>(), proj_samples))) < 1e-12);\n                DLIB_TEST(ekm.out_vector_size() == proj_samples[0].size());\n\n                for (int i = 0; i < 30; ++i)\n                {\n                    const unsigned long idx1 = rnd.get_random_32bit_number()%samples.size();\n                    const unsigned long idx2 = rnd.get_random_32bit_number()%samples.size();\n                    decision_function<kernel_type> dec_funct = ekm.convert_to_decision_function(proj_samples[idx1]);\n                    distance_function<kernel_type> dist_funct = ekm.convert_to_distance_function(proj_samples[idx1]);\n\n                    // make sure the distances match \n                    const double dist_error = abs(length(proj_samples[idx1] - proj_samples[idx2]) - dist_funct(samples[idx2]));\n                    DLIB_TEST_MSG( dist_error < 1e-6, dist_error);\n                    // make sure the dot products match \n                    DLIB_TEST(abs(dot(proj_samples[idx1],proj_samples[idx2]) - dec_funct(samples[idx2])) < 1e-10);\n\n                    // also try the dec_funct with samples that weren't in the original set\n                    samp = 100*randm(4,1,rnd);\n                    // make sure the dot products match \n                    DLIB_TEST(abs(dot(proj_samples[idx1],ekm.project(samp)) - dec_funct(samp)) < 1e-10);\n                    samp = randm(4,1,rnd);\n                    // make sure the dot products match \n                    DLIB_TEST(abs(dot(proj_samples[idx1],ekm.project(samp)) - dec_funct(samp)) < 1e-10);\n                }\n\n\n\n                proj_samples.clear();\n\n\n                // now do the projection but use the projection_function returned by get_projection_function()\n                projection_function<kernel_type> proj2 = ekm.get_projection_function();\n                projection_function<kernel_type> proj;\n                sout.clear();\n                sout.str(\"\");\n                sin.clear();\n                sin.str(\"\");\n                // test serialization\n                serialize(proj2, sout);\n                sin.str(sout.str());\n                deserialize(proj, sin);\n\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    proj_samples.push_back(proj(samples[i]));\n                }\n\n                DLIB_TEST(max(abs(kernel_matrix(kern, samples) - kernel_matrix(linear_kernel<sample_type>(), proj_samples))) < 1e-12);\n                DLIB_TEST(ekm.out_vector_size() == proj_samples[0].size());\n                DLIB_TEST(proj.out_vector_size() == proj_samples[0].size());\n\n                ekm.clear();\n                DLIB_TEST(ekm.out_vector_size() == 0);\n                DLIB_TEST(ekm2.out_vector_size() == 0);\n                DLIB_TEST(ekm3.out_vector_size() == 0);\n\n\n                for (int i = 0; i < 30; ++i)\n                {\n                    const unsigned long idx1 = rnd.get_random_32bit_number()%samples.size();\n                    const unsigned long idx2 = rnd.get_random_32bit_number()%samples.size();\n                    decision_function<kernel_type> dec_funct = convert_to_decision_function(proj,proj_samples[idx1]);\n\n                    // make sure the dot products match \n                    DLIB_TEST(abs(dot(proj_samples[idx1],proj_samples[idx2]) - dec_funct(samples[idx2])) < 1e-10);\n\n                    // also try the dec_funct with samples that weren't in the original set\n                    samp = 100*randm(4,1,rnd);\n                    // make sure the dot products match \n                    DLIB_TEST(abs(dot(proj_samples[idx1],proj(samp)) - dec_funct(samp)) < 1e-10);\n                    samp = randm(4,1,rnd);\n                    // make sure the dot products match \n                    DLIB_TEST(abs(dot(proj_samples[idx1],proj(samp)) - dec_funct(samp)) < 1e-10);\n                }\n\n\n\n\n\n            }\n\n            for (int j = 1; j <= 20; ++j)\n            {\n                dlog << LTRACE << \"j: \" << j;\n                sample_type samp, samp2;\n                std::vector<sample_type> samples1;\n                std::vector<sample_type> samples2;\n                print_spinner();\n                // make some random samples.  At the end samples1 will be a subset of samples2\n                for (int i = 0; i < 5*j; ++i)\n                {\n                    samples1.push_back(randm(10,1,rnd));\n                    samples2.push_back(samples1.back());\n                }\n                for (int i = 0; i < 5*j; ++i)\n                {\n                    samples2.push_back(randm(10,1,rnd));\n                }\n                // add on a little bit to make sure there is at least one non-zero sample.  If all the \n                // samples are zero then empirical_kernel_map_error will be thrown and we don't want that.\n                samples1.front()(0) += 0.001;\n                samples2.front()(0) += 0.001;\n\n                ekm.load(kern, samples1);\n                for (unsigned long i = 0; i < samples1.size(); ++i)\n                    DLIB_TEST(dlib::equal(ekm[i] , samples1[i]));\n                DLIB_TEST(ekm.basis_size() == samples1.size());\n                ekm2.load(kern, samples2);\n                DLIB_TEST(ekm2.basis_size() == samples2.size());\n                 \n                dlog << LTRACE << \"ekm.out_vector_size(): \" << ekm.out_vector_size();\n                dlog << LTRACE << \"ekm2.out_vector_size(): \" << ekm2.out_vector_size();\n                const double eps = 1e-6;\n\n                matrix<double> transform;\n                // Make sure transformations back to yourself work right.  Note that we can't just\n                // check that transform is the identity matrix since it might be an identity transform\n                // for only a subspace of vectors (this happens if the ekm maps points into a subspace of\n                // all possible ekm.out_vector_size() vectors).\n                transform = ekm.get_transformation_to(ekm);\n                DLIB_TEST(transform.nr() == ekm.out_vector_size());\n                DLIB_TEST(transform.nc() == ekm.out_vector_size());\n                for (unsigned long i = 0; i < samples1.size(); ++i)\n                {\n                    samp = ekm.project(samples1[i]);\n                    DLIB_TEST_MSG(length(samp - transform*samp) < eps, length(samp - transform*samp));\n                    samp = ekm.project((samples1[0] + samples1[i])/2);\n                    DLIB_TEST_MSG(length(samp - transform*samp) < eps, length(samp - transform*samp));\n                }\n\n                transform = ekm2.get_transformation_to(ekm2);\n                DLIB_TEST(transform.nr() == ekm2.out_vector_size());\n                DLIB_TEST(transform.nc() == ekm2.out_vector_size());\n                for (unsigned long i = 0; i < samples2.size(); ++i)\n                {\n                    samp = ekm2.project(samples2[i]);\n                    DLIB_TEST_MSG(length(samp - transform*samp) < eps, length(samp - transform*samp));\n                    samp = ekm2.project((samples2[0] + samples2[i])/2);\n                    DLIB_TEST_MSG(length(samp - transform*samp) < eps, length(samp - transform*samp));\n                    //dlog << LTRACE << \"mapping error: \" << length(samp - transform*samp);\n                }\n\n\n                // now test the transform from ekm to ekm2\n                transform = ekm.get_transformation_to(ekm2);\n                DLIB_TEST(transform.nr() == ekm2.out_vector_size());\n                DLIB_TEST(transform.nc() == ekm.out_vector_size());\n                for (unsigned long i = 0; i < samples1.size(); ++i)\n                {\n                    samp = ekm.project(samples1[i]);\n                    distance_function<kernel_type> df1 = ekm.convert_to_distance_function(samp);\n                    distance_function<kernel_type> df2 = ekm2.convert_to_distance_function(transform*samp);\n                    DLIB_TEST_MSG(df1(df2) < eps, df1(df2));\n                    //dlog << LTRACE << \"mapping error: \" << df1(df2);\n\n\n                    samp = ekm.project((samples1[0] + samples1[i])/2);\n                    df1 = ekm.convert_to_distance_function(samp);\n                    df2 = ekm2.convert_to_distance_function(transform*samp);\n                    DLIB_TEST_MSG(df1(df2) < eps, df1(df2));\n                }\n\n\n            }\n        }\n\n        void perform_test (\n        )\n        {\n            ++thetime;\n            typedef matrix<double,0,1> sample_type;\n            dlog << LINFO << \"time seed: \" << thetime;\n            rnd.set_seed(cast_to_string(thetime));\n\n            print_spinner();\n            test_projection_error();\n            print_spinner();\n            dlog << LINFO << \"test with linear kernel\";\n            test_with_kernel(linear_kernel<sample_type>());\n            print_spinner();\n            dlog << LINFO << \"test with rbf kernel\";\n            test_with_kernel(radial_basis_kernel<sample_type>(0.2));\n            print_spinner();\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    empirical_kernel_map_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/entropy_coder.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <ctime>\n#include <cstdlib>\n\n#include <dlib/entropy_encoder.h>\n#include <dlib/entropy_decoder.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test; \n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.entropy_coder\");\n\n    namespace entropy_coder_kernel_test_helpers \n    {\n        template <\n            typename encoder,\n            typename decoder\n            >\n        std::string test (\n            const std::string& input\n        )\n        /*!\n            ensures\n                - encodes the data from in and then tries to decode it and returns\n                  \"\" if it was successfully decoded else it returns the decoded string\n        !*/\n        {\n            ostringstream sout;\n            istringstream sin;\n            istringstream in;\n\n\n            in.str(input);\n\n            const unsigned long max_total = 65535;\n\n\n\n\n            unsigned long counts[256];\n            for (int i = 0; i < 256; ++i)\n            {\n                counts[i] = 1;\n            }\n\n\n            encoder e;\n\n         \n\n            DLIB_TEST(e.stream_is_set() == false);\n\n            e.set_stream(sout);\n\n            DLIB_TEST(e.stream_is_set() == true);\n            DLIB_TEST(&e.get_stream() == &sout);\n\n            unsigned char ch;\n            \n            unsigned long total = 256;\n\n            while (in.read((char*)&ch,1))\n            {\n                if (total > max_total)\n                {\n                    total = 0;\n                    for (int j = 0; j<256; ++j)\n                    {\n                        counts[j] >>= 1;\n                        if (counts[j] == 0)\n                            counts[j] = 1;\n                        total += counts[j];\n\n                    }\n                }\n\n                unsigned long low_count = 0;\n                unsigned long high_count;\n                for (int i = 0; i < ch; ++i)\n                    low_count += counts[i];\n                high_count = low_count + counts[ch];\n               \n                e.encode(low_count,high_count,total);\n               \n\n                ++total;\n                counts[ch] += 1;\n            }\n\n            DLIB_TEST(e.stream_is_set() == true);\n            DLIB_TEST(&e.get_stream() == &sout);\n            \n\n\n            e.clear();\n\n            DLIB_TEST(e.stream_is_set() == false);\n\n\n            // *****************************************\n\n     \n            decoder d;\n\n\n            DLIB_TEST(d.stream_is_set() == false);\n            DLIB_TEST(d.get_target_called() == false);\n\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            d.set_stream(sin);\n\n            DLIB_TEST(d.get_target_called() == false);\n\n            DLIB_TEST(d.stream_is_set() == true);\n            DLIB_TEST(&d.get_stream() == &sin);\n\n            for (int i = 0; i < 256; ++i)\n            {\n                counts[i] = 1;\n            }\n\n            total = 256;\n\n            for (string::size_type i = 0; i < input.size()  ; ++i)\n            {\n                if (total > max_total)\n                {\n                    total = 0;\n                    for (int j = 0; j<256; ++j)\n                    {\n                        counts[j] >>= 1;\n                        if (counts[j] == 0)\n                            counts[j] = 1;\n                        total += counts[j];\n\n                    }\n                }\n\n                DLIB_TEST(d.get_target_called() == false);\n\n                unsigned long target = d.get_target(total);\n\n                DLIB_TEST(target < total);\n\n                DLIB_TEST(d.get_target_called() == true);\n\n\n                unsigned long low_count;\n                unsigned long high_count = 0;\n                \n                unsigned long j;\n                for (j = 0; high_count <= target; ++j)\n                {\n                    high_count += counts[j];\n                }\n                --j;\n                low_count = high_count - counts[j];\n\n\n                ch = static_cast<unsigned char>(j);\n\n\n                sout.rdbuf()->sputn((char*)&ch,1);\n         \n\n\n                d.decode(low_count,high_count);\n                DLIB_TEST(d.get_target_called() == false);\n                ++total;\n                counts[ch] += 1;\n\n            }\n\n            DLIB_TEST(d.stream_is_set() == true);\n            DLIB_TEST(&d.get_stream() == &sin);\n\n            d.clear();\n\n            DLIB_TEST(d.stream_is_set() == false);\n            DLIB_TEST_MSG(sout.str().size() == input.size(),\"the test script is buggy\");\n            \n\n            if (sout.str() == input)\n                return \"\";\n            else\n                return sout.str();\n\n        }\n\n    }\n\n\n    \n\n    template <\n        typename encoder,\n        typename decoder\n        >\n    void entropy_coder_kernel_test (\n    )\n    /*!\n        requires\n            - encoder is an implementation of entropy_encoder/entropy_encoder_kernel_abstract.h\n            - decoder is an implementation of entropy_decoder/entropy_decoder_kernel_abstract.h\n        ensures\n            - runs tests on encoder and decoder for compliance with the specs \n    !*/\n    {        \n        using namespace entropy_coder_kernel_test_helpers;\n\n        dlog << LTRACE << 1;\n\n        print_spinner();\n        string temp, temp2;\n\n        srand(static_cast<int>(time(0)));\n\n        for (int k = 0; k < 10000; ++k)\n        {\n            string temp;\n            istringstream sin;\n            ostringstream sout;\n            decoder d;\n            encoder e;\n\n            e.set_stream(sout);\n\n            int num = ::rand() %200;\n            unsigned long total[200];\n            unsigned long high_count[200];\n            unsigned long low_count[200];\n            for (int i = 0; i < num; ++i)\n            {\n                total[i] = ::rand()%256 + 20;\n                high_count[i] = ::rand()%total[i] + 1;\n                low_count[i] = ::rand()%high_count[i];\n\n                e.encode(low_count[i],high_count[i],total[i]);\n            }\n\n            e.clear();\n\n            sout.rdbuf()->sputc('a');\n\n            sin.str(sout.str());\n\n\n            d.set_stream(sin);\n\n\n            for (int i = 0; i < num; ++i)\n            {\n                unsigned long N = d.get_target(total[i]);                \n                DLIB_TEST(low_count[i] <= N && N < high_count[i]);\n                d.decode(low_count[i],high_count[i]);\n            }\n\n\n\n\n\n\n            DLIB_TEST_MSG(sin.rdbuf()->sgetc() != EOF,\"num: \" << num);\n            DLIB_TEST_MSG(sin.rdbuf()->sgetc() == 'a',\n                         \"sin.rdbuf()->sgetc() == \" << (char)sin.rdbuf()->sgetc() <<\n                         \"\\nnum: \" << num\n            );\n            DLIB_TEST(sin.rdbuf()->sbumpc() == 'a');\n            DLIB_TEST(sin.rdbuf()->sgetc() == EOF);\n\n        } // for (int k = 0; k < 10000; ++k)\n\n        dlog << LTRACE << 2;\n\n        print_spinner();\n\n        // the point of this block is to make sure that the return value\n        // from decoder.get_target(total) is a always less than total\n        for (int k = 0; k < 20; ++k)\n        {\n            string temp;\n            temp.push_back(static_cast<char>(::rand()&0xff));\n            istringstream sin(temp);\n            decoder d;\n            d.set_stream(sin);\n            unsigned long total = ::rand()%256 + 20;\n            unsigned long target = d.get_target(total);\n            DLIB_TEST(target<total);\n\n            for (int i = 0; i < 30; ++i)\n            {\n                unsigned long high_count = ::rand()%total + 1;\n                unsigned long low_count = ::rand()%high_count;\n                if (high_count <= target)\n                    high_count = target+1;\n                if (low_count > target)\n                    low_count = target;\n\n                d.decode(low_count,high_count);\n                target = d.get_target(total);\n                DLIB_TEST_MSG(target<total,\"target: \" << target << \"    total: \" << total);\n            }\n        }\n\n        print_spinner();\n\n\n        dlog << LTRACE << 3;\n\n        for (int k = 0; k < 10; ++k)\n        {\n            unsigned long seed1 = 1064644658, seed2 = 1064543921;\n            //unsigned long seed1 = 1064682621, seed2 = 1064543921;\n\n            // make array be an array with each element in the range 0 to 255\n            // and have the probability of seeing each number in the array\n            // not be the same\n            //seed1 = static_cast<unsigned long>(time(0));\n            srand(seed1 );\n            int array[65536];\n            for (int i = 0; i < 65536; ++i)\n            {\n                array[i] = ::rand()%256;\n            }\n            for (int i = 0; i < 60; ++i)\n            {\n                int idx = ::rand()%65536;\n                int radius = 35;\n                if (idx > radius && idx <65536-radius)\n                {\n                    for (int j = idx-radius; j < idx+radius; ++j)\n                        array[j] = array[idx];\n                }\n            }\n\n            // test with 3 random strings of length 10000 \n            // but use the above array to bias the random numbers\n            for (int j = 0; j < 3; ++j)\n            {\n                print_spinner();\n                temp = \"\";\n                //seed2 = static_cast<unsigned long>(time(0));\n                srand(seed2 );\n                for ( int i = 0; i < 10000; ++i)\n                {\n                    int a = array[::rand()%65536];\n                    temp += (unsigned char)a;                \n                }               \n                string temp2;\n                temp2 = test<encoder,decoder>(temp);  \n                if (temp2 != \"\")\n                {\n\n                    int k = 0;\n                    DLIB_TEST(temp != temp2);\n                    while (temp[k] == temp2[k])++k;\n                }\n\n\n                DLIB_TEST_MSG(temp2 == \"\",\"\")  \n            }\n        }\n\n        print_spinner();\n\n\n        dlog << LTRACE << 4;\n\n\n\n\n        // test with a large string which contains all the same character\n        temp = \"eeeeeeeeee\";\n        for (int i = 0; i < 13; ++i)\n        {\n            temp = temp + temp;\n        }\n        temp = test<encoder,decoder>(temp); \n        if (temp != \"\")\n        {   \n            // crop off all the e's until we find the part that is messed up\n            string::size_type pos = temp.find_first_not_of(\"e\");\n            temp = temp.substr(pos);\n        }\n        DLIB_TEST_MSG(temp == \"\",\"decoded string: \\\"\" << temp << \"\\\"\") /**/\n\n\n            dlog << LTRACE << 5;\n\n        print_spinner();\n\n        temp = \"davis\";\n        temp = test<encoder,decoder>(temp);  DLIB_TEST_MSG(temp == \"\",\"decoded string: \\\"\" << temp << \"\\\"\")\n\n            temp = \"\";\n        temp = test<encoder,decoder>(temp);  DLIB_TEST_MSG(temp == \"\",\"decoded string: \\\"\" << temp << \"\\\"\")\n\n            // test for each single character\n            for ( int i = 0; i <= 255; ++i)\n            {\n                temp = (unsigned char)i;\n                temp = test<encoder,decoder>(temp);  DLIB_TEST_MSG(temp == \"\",\"decoded string: \\\"\" << temp << \"\\\"\")                  \n            } \n\n        dlog << LTRACE << 6;\n\n        // test with a long string with the same thing repeated many times\n        temp = \"davis \";\n        for (int i = 0; i < 10; ++i)\n        {\n            temp = temp + temp;\n        }\n        temp = test<encoder,decoder>(temp);  DLIB_TEST_MSG(temp == \"\",\"decoded string: \\\"\" << temp << \"\\\"\")\n\n            dlog << LTRACE << 7;\n\n        // test with 10 random strings of length 1000 \n        for (int j = 0; j < 10; ++j)\n        {\n            temp = \"\";\n            srand(static_cast<unsigned int>(time(0)));\n            for ( int i = 0; i < 1000; ++i)\n            {\n                int a = ::rand()%256;\n                temp += (unsigned char)a;                \n            } \n            temp = test<encoder,decoder>(temp);  DLIB_TEST_MSG(temp == \"\",\"decoded string: \\\"\" << temp << \"\\\"\")                    \n        }\n\n\n        dlog << LTRACE << 8;\n\n        print_spinner();\n\n        // test with 15 random strings of length 30000 \n        for (int j = 0; j < 15; ++j)\n        {\n            print_spinner();\n            temp = \"\";\n            unsigned long seed = static_cast<unsigned int>(time(0));\n            srand(seed);\n            for ( int i = 0; i < 30000; ++i)\n            {\n                int a = ::rand()%256;\n                temp += (unsigned char)a;                \n            }               \n            temp = test<encoder,decoder>(temp);  DLIB_TEST_MSG(temp == \"\",\"seed: \" << seed)  \n        }\n\n\n        dlog << LTRACE << 9;\n\n        print_spinner();\n\n        // test with a large string which contains all the same character\n        temp = \"         \";\n        for (int i = 0; i < 10; ++i)\n        {\n            temp = temp + temp;\n        }\n        temp = test<encoder,decoder>(temp); \n        if (temp != \"\")\n        {   \n            // crop off all the spacess until we find the part that is messed up\n            string::size_type pos = temp.find_first_not_of(\" \");\n            temp = temp.substr(pos);\n        }\n        DLIB_TEST_MSG(temp == \"\",\"decoded string: \\\"\" << temp << \"\\\"\")/**/\n\n\n\n\n\n\n            dlog << LTRACE << 10;\n\n\n\n\n\n\n        // test with a large string which contains a bunch of a's followed by a\n        // bunch of z's\n        temp = \"aaaaaaaa\";\n        temp2 = \"zzzzzzzz\";\n        for (int i = 0; i < 12; ++i)\n        {\n            temp = temp + temp;\n            temp2 = temp2 + temp2;\n        }\n        temp += temp2;\n        print_spinner();\n        temp = test<encoder,decoder>(temp); \n        DLIB_TEST(temp == \"\");\n\n\n\n        dlog << LTRACE << 11;\n\n\n\n    }\n\n\n\n\n    class entropy_coder_tester : public tester\n    {\n    public:\n        entropy_coder_tester (\n        ) :\n            tester (\"test_entropy_coder\",\n                    \"Runs tests on the entropy_coder component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a 1\";\n            entropy_coder_kernel_test<\n                entropy_encoder::kernel_1a,\n                entropy_decoder::kernel_1a\n                >();\n\n            dlog << LINFO << \"testing kernel_1a_c 2\";\n            entropy_coder_kernel_test<\n                entropy_encoder::kernel_1a_c,\n                entropy_decoder::kernel_1a_c\n                >();\n\n            dlog << LINFO << \"testing kernel_1a 3\";\n            entropy_coder_kernel_test<\n                entropy_encoder::kernel_2a,\n                entropy_decoder::kernel_2a\n                >();\n\n            dlog << LINFO << \"testing kernel_1a_c 4\";\n            entropy_coder_kernel_test<\n                entropy_encoder::kernel_2a_c,\n                entropy_decoder::kernel_2a_c\n                >();\n\n            dlog << LINFO << \"testing kernel_1a 5\";\n            entropy_coder_kernel_test<\n                entropy_encoder::kernel_1a,\n                entropy_decoder::kernel_1a_c\n                >();\n\n            dlog << LINFO << \"testing kernel_1a_c 6\";\n            entropy_coder_kernel_test<\n                entropy_encoder::kernel_1a_c,\n                entropy_decoder::kernel_1a\n                >();\n\n            dlog << LINFO << \"testing kernel_1a 7\";\n            entropy_coder_kernel_test<\n                entropy_encoder::kernel_2a,\n                entropy_decoder::kernel_2a_c\n                >();\n\n            dlog << LINFO << \"testing kernel_1a_c 8\";\n            entropy_coder_kernel_test<\n                entropy_encoder::kernel_2a_c,\n                entropy_decoder::kernel_2a\n                >();\n\n        }\n    } a;\n\n\n\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/entropy_encoder_model.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <ctime>\n#include <cstdlib>\n\n#include <dlib/entropy_encoder_model.h>\n#include <dlib/entropy_decoder_model.h>\n#include <dlib/entropy_encoder.h>\n#include <dlib/entropy_decoder.h>\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.entropy_coder_model\");\n\n    template <\n        typename ee,\n        typename ed\n        >\n    void entropy_encoder_model_kernel_test (\n    )\n    /*!\n        requires\n            - ee is an implementation of entropy_encoder_model/entropy_encoder_model_kernel_abstract.h            \n              the alphabet_size for ee is 256\n            - ed is an implementation of entropy_decoder_model/entropy_decoder_model_kernel_abstract.h            \n              the alphabet_size for ed is 256\n            - ee and ed must share the same kernel number\n        ensures\n            - runs tests on ee and ed for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n        srand(static_cast<unsigned int>(time(0)));\n\n        typedef typename ee::entropy_encoder_type ee_type;\n        typedef typename ed::entropy_decoder_type ed_type;\n\n\n\n        {\n\n            ee_type ecoder;\n            ed_type dcoder;\n\n            ee elen(ecoder);\n            ed dlen(dcoder);\n            ee elit(ecoder);\n            ed dlit(dcoder);\n\n\n            istringstream sin;\n            ostringstream sout;\n\n            ecoder.set_stream(sout);\n\n\n            unsigned long temp;\n\n\n            elen.encode(0);\n            elit.encode(9);\n\n            elen.encode(0);\n            elit.encode(0);\n\n            elen.encode(0);\n            elit.encode(4);\n\n            elen.encode(0);\n            elit.encode(0);\n\n            elen.encode(0);\n            elit.encode(2);\n\n            elen.encode(0);\n            elit.encode(0);\n\n\n\n\n\n\n\n            ecoder.clear();\n            sin.str(sout.str());\n            dcoder.set_stream(sin);\n\n\n            dlen.decode(temp);\n            DLIB_TEST(temp == 0);\n            dlit.decode(temp);\n            DLIB_TEST(temp == 9);\n\n            dlen.decode(temp);\n            DLIB_TEST(temp == 0);\n            dlit.decode(temp);\n            DLIB_TEST(temp == 0);\n\n            dlen.decode(temp);\n            DLIB_TEST(temp == 0);\n            dlit.decode(temp);\n            DLIB_TEST(temp == 4);\n\n            dlen.decode(temp);\n            DLIB_TEST(temp == 0);\n            dlit.decode(temp);\n            DLIB_TEST(temp == 0);\n\n            dlen.decode(temp);\n            DLIB_TEST(temp == 0);\n            dlit.decode(temp);\n            DLIB_TEST(temp == 2);\n\n            dlen.decode(temp);\n            DLIB_TEST(temp == 0);\n            dlit.decode(temp);\n            DLIB_TEST(temp == 0);\n\n\n\n\n        }\n\n    }\n\n\n\n\n    class entropy_encoder_model_tester : public tester\n    {\n    public:\n        entropy_encoder_model_tester (\n        ) :\n            tester (\"test_entropy_coder_model\",\n                    \"Runs tests on the entropy_encoder_model and entropy_decoder_model components.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            typedef entropy_encoder::kernel_2a_c ee;\n            typedef entropy_decoder::kernel_2a_c ed;\n\n            dlog << LINFO << \"testing kernel_1a\";\n            entropy_encoder_model_kernel_test<\n                entropy_encoder_model<256,ee>::kernel_1a,\n                entropy_decoder_model<256,ed>::kernel_1a>();\n\n            dlog << LINFO << \"testing kernel_2a\";\n            entropy_encoder_model_kernel_test<\n                entropy_encoder_model<256,ee>::kernel_2a,\n                entropy_decoder_model<256,ed>::kernel_2a>();\n\n            dlog << LINFO << \"testing kernel_3a\";\n            entropy_encoder_model_kernel_test<\n                entropy_encoder_model<256,ee>::kernel_3a,\n                entropy_decoder_model<256,ed>::kernel_3a>();\n\n            dlog << LINFO << \"testing kernel_4a\";\n            entropy_encoder_model_kernel_test<\n                entropy_encoder_model<256,ee>::kernel_4a,\n                entropy_decoder_model<256,ed>::kernel_4a>();\n\n            dlog << LINFO << \"testing kernel_4b\";\n            entropy_encoder_model_kernel_test<\n                entropy_encoder_model<256,ee>::kernel_4b,\n                entropy_decoder_model<256,ed>::kernel_4b>();\n\n            dlog << LINFO << \"testing kernel_5a\";\n            entropy_encoder_model_kernel_test<\n                entropy_encoder_model<256,ee>::kernel_5a,\n                entropy_decoder_model<256,ed>::kernel_5a>();\n\n            dlog << LINFO << \"testing kernel_5c\";\n            entropy_encoder_model_kernel_test<\n                entropy_encoder_model<256,ee>::kernel_5c,\n                entropy_decoder_model<256,ed>::kernel_5c>();\n\n            dlog << LINFO << \"testing kernel_6a\";\n            entropy_encoder_model_kernel_test<\n                entropy_encoder_model<256,ee>::kernel_6a,\n                entropy_decoder_model<256,ed>::kernel_6a>();\n\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/example.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n\n// This is called an unnamed-namespace and it has the effect of making everything \n// inside this file \"private\" so that everything you declare will have static linkage.  \n// Thus we won't have any multiply defined symbol errors coming out of the linker when \n// we try to compile the test suite.\nnamespace  \n{\n    using namespace test;\n    // Declare the logger we will use in this test.  The name of the logger \n    // should start with \"test.\"\n    dlib::logger dlog(\"test.example\");\n\n\n    class example_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        example_tester (\n        ) :\n            tester (\n                \"test_example\",       // the command line argument name for this test\n                \"Run example tests.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {}\n\n        void perform_test (\n        )\n        {\n            // This message gets logged to the file debug.txt if the user has enabled logging by\n            // supplying the -d option on the command line (and they haven't set the logging level\n            // to something higher than LINFO).\n            dlog << dlib::LINFO << \"some message you want to log\";\n\n            // This test is considered a success if this function doesn't throw an exception.  \n            // So we can use the DLIB_TEST_MSG macro to perform our tests since it throws an \n            // exception containing a message if its first argument is false.  \n\n            // make sure 3 is bigger than 2\n            DLIB_TEST_MSG(3 > 2,\"This message prints if your compiler doesn't know 3 is bigger than 2\");\n\n            // make sure 5 is not equal to 9\n            DLIB_TEST_MSG(5 != 9,\"This message prints if your compiler thinks 5 is the same as 9\");\n\n            // This is a form of test you can use when you don't care about having a message\n            DLIB_TEST(5 != 8);\n\n            // If your test takes a long time to run you can also call print_spinner() \n            // periodically.  This will cause a spinning / character to display on the\n            // console to indicate to the user that your test is still running (rather\n            // than hung) \n            print_spinner();\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    example_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/example_args.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n\n// This is called an unnamed-namespace and it has the effect of making everything \n// inside this file \"private\" so that everything you declare will have static linkage.  \n// Thus we won't have any multiply defined symbol errors coming out of the linker when \n// we try to compile the test suite.\nnamespace  \n{\n    // Declare the logger we will use in this test.  The name of the logger \n    // should start with \"test.\"\n    dlib::logger dlog(\"test.example_args\");\n\n    using namespace test;\n\n    class example_args_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n                \n                This particular test requires the user to supply a command line \n                argument when they run it.\n        !*/\n    public:\n        example_args_tester (\n        ) :\n            tester (\n                \"test_example_args\",                // the command line argument name for this test\n                \"Run example tests with argument.\", // the command line argument description\n                1                                   // the number of command line arguments for this test\n            )\n        {}\n\n        void perform_test (\n            const std::string& arg\n        )\n        {\n            // This message gets logged to the file debug.txt if the user has enabled logging by\n            // supplying the -d option on the command line (and they haven't set the logging level\n            // to something higher than LINFO).\n            dlog << dlib::LINFO << \"some message you want to log\";\n            dlog << dlib::LINFO << \"the argument passed to this test was \" << arg;\n\n            // This test is considered a success if this function doesn't throw an exception.  \n            // So we can use the DLIB_TEST_MSG macro to perform our tests since it throws an \n            // exception containing a message if its first argument is false.  \n\n            // make sure 3 is bigger than 2\n            DLIB_TEST_MSG(3 > 2,\"This message prints if your compiler doesn't know 3 is bigger than 2\");\n\n            // make sure 5 is not equal to 9\n            DLIB_TEST_MSG(5 != 9,\"This message prints if your compiler thinks 5 is the same as 9\");\n\n            // If your test takes a long time to run you can also call print_spinner() \n            // periodically.  This will cause a spinning / character to display on the\n            // console to indicate to the user that your test is still running (rather\n            // than hung) \n            print_spinner();\n        }\n\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    example_args_tester a;\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/examples/CMakeLists.txt",
    "content": "\n# Disable some warnings from gcc when compiling the examples because fixing them would make the\n# examples harder to read.\nif (CMAKE_COMPILER_IS_GNUCXX)\n   add_definitions(\"-Wno-comment -Wno-unused-parameter\")\nendif()\n\nadd_subdirectory(../../../examples examples_build)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/face.cpp",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/image_processing/frontal_face_detector.h>\n#include <dlib/image_processing.h>\n#include <vector>\n#include <sstream>\n#include <dlib/compress_stream.h>\n#include <dlib/base64.h>\n#include <dlib/image_io.h>\n\n//#include <dlib/gui_widgets.h>\n//#include <dlib/image_processing/render_face_detections.h>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.face\");\n\n\n    class face_tester : public tester\n    {\n    public:\n        face_tester (\n        ) :\n            tester (\n                \"test_face\",       // the command line argument name for this test\n                \"Run tests on the face detection/landmarking modules.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n\n        void get_test_face_landmark_dataset (\n            dlib::array<array2d<unsigned char> >& images,\n            std::vector<std::vector<full_object_detection> >& objects\n        )\n        {\n            istringstream sin(get_decoded_string());\n            images.resize(1);\n            objects.resize(1);\n            load_dng(images[0], sin);\n            pyramid_up(images[0]);\n            deserialize(objects[0], sin);\n        }\n\n        void perform_test()\n        {\n            print_spinner();\n            dlib::array<array2d<unsigned char> > images;\n            std::vector<std::vector<full_object_detection> > objects;\n            get_test_face_landmark_dataset(images, objects);\n\n            frontal_face_detector detector = get_frontal_face_detector();\n\n            print_spinner();\n            shape_predictor_trainer trainer;\n            trainer.set_tree_depth(2);\n            trainer.set_nu(0.05);\n            //trainer.be_verbose();\n\n            shape_predictor sp = trainer.train(images, objects);\n\n            print_spinner();\n\n            // It should have been able to perfectly fit the data\n            DLIB_TEST(test_shape_predictor(sp, images, objects) == 0);\n\n            print_spinner();\n\n            // While we are here, make sure the default face detector works\n            std::vector<rectangle> dets = detector(images[0]);\n            DLIB_TEST(dets.size() == 3);\n\n\n            /*\n            // visualize the detections\n            std::vector<full_object_detection> shapes;\n            for (unsigned long j = 0; j < dets.size(); ++j)\n            {\n                full_object_detection shape = sp(images[0], dets[j]);\n                shapes.push_back(shape);\n            }\n            image_window win(images[0]);\n            win.add_overlay(render_face_detections(shapes));\n            cin.get();\n            */\n\n        }\n\n\n    // ------------------------------------------------------------------------------------\n\n        // This function returns the contents of the file 'test_faces.dat'\n        const std::string get_decoded_string()\n        {\n            dlib::base64 base64_coder;\n            dlib::compress_stream::kernel_1ea compressor;\n            std::ostringstream sout;\n            std::istringstream sin;\n\n            // The base64 encoded data from the file 'test_faces.dat' we want to decode and return.\n            sout << \"RFYXmMn7UA64INJ2Umw+YCh5xX6v+y3bqV/1EKP3ZtvdIWxDCoyZ8oJjj/LXTw3PyEMQReTyXO+8\";\n            sout << \"423ExTTLMRLxc5gEI4PK8vLMVWdRjRKldYfFLisH5qk7o6TxYfRXqmch/t4c53UfsUuJuVMvA+nf\";\n            sout << \"05tfgx0Z2VgrlMmvKSxX0VHEjQ3ZVqQl0mLeur1qoMRmcPjYA4QJOvcruwyz/hFpVU8snvsri4QA\";\n            sout << \"hkCrOtvl/iTlLvcWXDM98OXEYLk4vr6z2v73mGGEdbaJFafXOgutY0NRESpJfingJkuZKXNV7fQ8\";\n            sout << \"F1DmHwFM0Izoc3fUyN7+xtLo2LSEH8uohv79wjxdbm71n5kgHb6cnpYiiCLOgqKrK+qJUJG1/OBB\";\n            sout << \"9IORGL6SHrogefDg76m4ayil0lE4pQLa1fKhXGqphdxDMyBXHkOpxA356i5Evk7jZb/AqHUu/hQV\";\n            sout << \"QYOsW20TRhuFfrasrb/Veq10hMZomosAnNb+Uhgnu2Ip4igX6ozJqmCL4NngjEgoXuCA02KzmIqK\";\n            sout << \"fcslrBjyg7WZnF2w7UZXcHoZ0AVijb/ANPUqvq9H4k5WCFh53pwG6oj+CG5N7EXLzt9UHtillGJH\";\n            sout << \"S252/dLvzaNxSq0vDP+Y0IvtKhZgIlmX3duu+L7iJUMinE90OXQFzhwCaOM8oP3Mq+Becgto5Vjb\";\n            sout << \"vv+2xeyrYL9hBfMyPzbBhVWZdaPyI62MGMPjTfmAUmufWm3/Pxey5Jw6MUNX1rfWMXYQTtamdtcE\";\n            sout << \"XmuFGhLCWbnJN2GtlOWu+S0LdWAziktr0mdovdFZTwKnd2Fuf1VeMMHBCgF5D56UK6/JTXO1gPlj\";\n            sout << \"VpavizirUH46rHVnGOFZHWarPKymXyrQ/VhFbVBSOi9UGbsMo9sYNYhvFlzSBN5orNoY+5AP+Y2X\";\n            sout << \"BDw342Vg3YRIZBqaXZ7oOqyDtjFYNf2g7ColnaFrPiYCKg9VQvVQVXvr4Oa6TTryepXylHk11ijw\";\n            sout << \"xYgjiENTDKVuXPLVrAEWZD6wq5+LGbmj1cgh59XgLErkoliKxVeEv4ktXqceCFK9YWljqJZSBxFj\";\n            sout << \"T64N945O47Oek591sfRFYrjebJz3kooaaOQ7lm4BWpW64Am/Od0FIkggSzPUgf+jYrnPdH4oqv3d\";\n            sout << \"NJIXJO8aeCi/WCqgbdgLwpu1MB8cTdbK2TrCbi3sHhQddE6rqZ1XIg25gYTw72q4ZFUHmRrBEgdz\";\n            sout << \"i2xh7qHevCWC9Ht7HrUcLl35/UCcNck/ftiDa/xN3rBJp+cJCyS9ZXScFbgFKYfBau8Dx+JA3ygU\";\n            sout << \"pvYbUP29UeK5hXZoQzC74UKw/liapW8GbR3ZPV+59xmw1b7phyApZfODkDLG5lyTB5Co6vIfmqXp\";\n            sout << \"DSA1I0ZPIk7hJHWtddgvAg6Yv4GhMZs/cn08Z/ZRXYSMw20rA66BeMD+IPFe3MPFPnKsl/qRvXIC\";\n            sout << \"gTmLcjPQ5naBo/3haQg4TjJCBCErTC2JktJE0vRfm8v+1kEFoycTsRfhDZtjMnqmqSiNO3VSbnbb\";\n            sout << \"et/mFvCdd9kqBXQ4VaeYdJwORA7/TocC84G91jlfNRhbY2KW9xHXYYwscfaV5DtPWhyJBEimzLsz\";\n            sout << \"F59UbkO/WOT7HEwJ3p1/ReH6feLrIYwR8OdSeuOUtK2oboodiUmx/if9pyNONd0If9jFGDXvWP/r\";\n            sout << \"dL6NdRh68swmPyiCn7sAwaUbd7PF7K+jqgk3jMDMaoWE6p+aAFK3H/JxRO7th2XvX57uA+RKoXEq\";\n            sout << \"LBJrDkoPGbA5Ctj6KUWknMM62HVIO1SjwZH7ROOlCVbHvDd3JTT6TNs2Lj8g78q6WRMnDVV0L9Q7\";\n            sout << \"S6awjHePvyj9fDn66jpmRxI9TkqNPx0b8tGfOnUoXGKK/WcInBjVd+FYy1SO5FIVZ4JQdiSMgehu\";\n            sout << \"EU7X2yjbdgCtVg+kY3ZgYcCMM72NLdm7+U+qVxzfY9bNtzLRsEDNFL2wnq3DkbRRiHKHswEugXjG\";\n            sout << \"fFfzqjU71sDH3gc1dhOQT456XK0zhmV/62+N+oTxrFY2F/ArALeDiR1q1JOrE1UDzU/ezAZVWS/a\";\n            sout << \"DJ8O9TVZsbOXOU4hAiQ6mR5hh6i5c/zb7jBl6ehNgixrJqguo9PT10P3S6I+IiTG2vHlws4ZoTmz\";\n            sout << \"7iOj1ICCN6ivwPj5+afYScxPGLVujxWTW8ksey8RjSIbH+N9wUEAJAcZAGXo2UrP93uRkdLt/cvi\";\n            sout << \"Q4eIONlUrJ79hlo1xyvPmyNw9Ye1zG6epUK+lsXxtUbtX+uX+sDM/Gkr5QUdzzorfa4Mj9vEglQp\";\n            sout << \"iK5319kTeymqqV25YhNZZsoqCg+eckmoZP21cAHkPYZWAzg4lxhm71EAp+fE67Y44szeCSRNydRh\";\n            sout << \"mCl0ZGV59wVfUONdohN/9OQJ8gxifHspscrRszBALwCu2FrniGwRMvIi6lD6tb49dmpPlO1y5SEl\";\n            sout << \"HPF2I271RVx0YwFPprp+2/fzsnKIIhfgTNRVji2tfjHPoge84e5O02Z/cLlg7EzIfr/JK8Xd6mwp\";\n            sout << \"t3kIofktLqWbnBrr8qEvz2BmHRlEjYlpb6HfbK82ZHiOusVJdhAxRcRIqmImh5wtunlJOXdQqfmg\";\n            sout << \"8P0TYVDzQlc6ywbKt/VjTsxI4qisabVvVBkW5VsKU4/JONoNj7fgomwfHqryIIZcgc5vPLawnurD\";\n            sout << \"7JR1LRiTy7+7riDIxKdYtgbTuOnK6tO103XC+5NT07cKydDgtTu1gYoTTgzY+gkK53lX2Swbbme7\";\n            sout << \"wIFOXRwSK4ntGt4XXuuPbF8gc0T8ez8/tOEXE6Di8Ckj2O3uz2vGM27PQH9YU3Y3YCdcuaHlUIMG\";\n            sout << \"s7bgx4nM+xMPmS5baTuAHiPAxp3SepeKpHg0on6Bv99NPSDf7nWRcvvd3+/MHhyDfkbzd88GPnkQ\";\n            sout << \"Y7a91Tlj8RKG6B8W+zzn+SWzTIz5eJcLJCEKN7fXm1YjJjk3Tdi99PZA/K3Ek2k2lcd2oQPXj6fc\";\n            sout << \"EUs9zy6sZdSjttwsYlZzLW0Rpiscjqs1XNA+2D5UahufMk4AVpnDPqZ/OvmSZIPpTT4r+uQsEZlJ\";\n            sout << \"BYf6A9riAPhgR68zPz+i+ffpPcgwURCDviqf370nLIqfbDgJSztxXI2MPsHZqypB+VtvuLTq+M2s\";\n            sout << \"NVdvA6z5J35d3fk8EHVo8/TIWbsSulqnpJvjIHT9GeTV4EvaJo0kh092cFQ3QkbRIIzEqnT/o06z\";\n            sout << \"/+gqB0fKl93o50EUVzJbz02rPc/4qVaqfSJLg+HEZUg30PB8wQHb2oWqgL1lYDlqrv5plbK2kJm9\";\n            sout << \"HW9aQfOyX57rBsYi4aljZl5icy/JElsuNanhnTcTvrHQ/9ntw8QqV2PuVesbbaUQSjDRWG6D1uaK\";\n            sout << \"HSYB/6fvMZ+8hy+gq4d/tMKpoCzgERJjJOU+N0vHpKmyZgE0EGkPJwlgev/oxTJtsQndgrNviPkr\";\n            sout << \"ub9ZRkS5uM7Jb+1mKztyVWDdtVvxnvgboNayuS5/VdwlbQezQKEiB8I8UWLsgEJiXg9sgjBaFrv8\";\n            sout << \"3WgtSQmMRyukOnDPWwDskmUyIHKIye1wOY3H1BUuav52tg8gv1+y2CrVVebRm/8MmhJYe/8DpLeo\";\n            sout << \"1eEAX2SNtZH4VzpZSuAdANtYXgBaNTc0uWtw9Wc8mwo2hTfbu5nVYJ6vlUFP7HH7L+1idfrz832x\";\n            sout << \"l20/+8EKd8y2f20iP6m1mnKCQ9PUPPhWMfWMkJ21VhKJJDcpKhvQq20O/yqhfxabl+73QZiCS/eR\";\n            sout << \"E1ih71FN4x+s952FXOakzYlo5Gge1OCgHE0+YVXBSal4fz6Ye1iRG7+XgLxDIx6AGbOfemRQbOzW\";\n            sout << \"e/8pe0kPqkkS5ogdkCGemb3hKTgGFGXgP9IvJ18VuRDxPSHD1e5THwvULz7V0hUWO4aKx8t8tZIK\";\n            sout << \"flDB/npEo3L/1jU5rLEuX5KQbxJfEY2V22hND1ohUZdU+Uy6BFZ/hdYzFAUyNdLAFS36wB3XThar\";\n            sout << \"54CQ0RGIxCCtv5ucI7VQuc46jkk6SEmZV8FUwv79ExsrB+rAlBvhNOrmVA2vmikrb/iZfA6z1hC2\";\n            sout << \"aj8BGiULdcW0YUiN/TXxoVT0qgh87VjPcOfkj8gTRMF8VGAgRs0HpXVXKZf+ncAOKJ59yu3EsOCp\";\n            sout << \"vSG5zxDxrUYD7TFxrelev/7Jtan4J8ouFsK8ZA4WmBkbWLDBkKvV09c7Jxfmgt27aVI5uuUBJYb0\";\n            sout << \"TdKIG6J/JC85GrRedIb/kRaMiTP0Els6jGp3C/B9PQq6HbzSCUEkLE8is+uWnTDOynbgTtUVEGxH\";\n            sout << \"EKZGBtnPfqgZRDOnZTWMO9Hd9qATpI2qRrgxIvHTUhqD3DQQ37AGTcNsMmj/+mXTBV2vbM9H7Q5K\";\n            sout << \"APzltdgkGc+hZIL8Fy3CXzzRFlXAEoIcnJ3BKT7AdGg3pEaW1YcX4akaOTDmImZelYTCoTGu1R4Y\";\n            sout << \"ZD/rRCeiGR9txS9x9/ptvxeD3J8wYOXxDzCkyMQy1io+izFuN4kTd5MW3RlvepWT4FE2hvjyTyV+\";\n            sout << \"G4F+lcZFjCGmJKguZEzH3Qtww3OTGZqOfL9oADqQsUpEl92hm0uNOPHH6+8gWPZgb3EcCRkWeXaA\";\n            sout << \"DkTbCC5rV04N6Fg3j27K1v7qkykWB4y61W00dFejgPitoYuln4A8lY9RtIKzJYFfSOKnrAqYGMkn\";\n            sout << \"PReI5ZneFTiklSL6FkhWHvr5oz4EsAoU3fLWjky27E1CtpFkPKHLGyc2mnf2N7iBMGa8j2ipy9xd\";\n            sout << \"JwInqdDdGIHR5dUmNAy1A4vyGbOE7qa0ErVy4m3riKkyE0ObQTNoBeYa6CUHwNWCLCbiW2VzRY/H\";\n            sout << \"s6APvI6QIco+Wu9dx36qklvA6/OfM79BsUACnCRG2yo3bHeTeKMwKIx05RkNNJ76eOhjxOiPJBVR\";\n            sout << \"K5V+G3SutaRM0hSK0ABS5nfveZmowfJr8nZHRBAPHyIdv0bJW8lSNIRtZtgwm1dl13+eaeAJNpJm\";\n            sout << \"3eVvhP8c43LG938Bjxs/nfDl5GMzPnyLOIYInIt4wTXCZlRbt6pMXs9IX9/DpUt/AF44b+XQLnUT\";\n            sout << \"DgJa4In4qREDt58wel1oAGe9xpIqdFNPduUuCo/Ly0XHrBFd3jQFgp0JWZ039GtG2YTHpo8rLfu+\";\n            sout << \"TiTAmKnFbVZa6dlOzmVDV+53ptJxiWNfNMa2ri/YEFI7BpKi1FZvMfpGBzNmAdZBAt7kaSvIzqdl\";\n            sout << \"OHMqka3GBbzyW1PusVpj6SWBZ7rsfIFPRdVO4PGcOWSIQ/YlZYXtkV82cw+m4D/ScXdlj0VZBB04\";\n            sout << \"YfeUz1m8tiWsLdHxIKRI1JcLek5PzCQX33RFmfeqGBEa7q/kCzGiJ0QHiJV07Fxm2NKRUZQIWiJO\";\n            sout << \"n1roUf9C06IT03Wd0rcSlwG8Ji9SJZOlBEi7B9Vos61eXMEnkcNiRVeOxLaOfqr20XMde4kquqrS\";\n            sout << \"qZi2ZhNVqokhXNswwMtlMDfWBWWI39q4evlS8c60lQjXg39kyKbyVZOzp6KrJ+xDYUxURb2d/7DZ\";\n            sout << \"+UpikS9DmbUgWqV1pmx84ARtPp8/5teoBM7qd6sRrpJ1Q4cE4WLQfr/nVnVmSfZVzm6yqlxjGvhQ\";\n            sout << \"Bwz85XvMn4xjWIRDNnuwyJh7PoXkoacU54idHA4k7B3qeW59MKtXD3hA34qKUqqE0amH1Xzi3W84\";\n            sout << \"HpL4xT9EoNUPv+ufvo/4Yir/YIMIVuj1BFQACONJWezdbHO7ze7DQrceR9ojpVlkM442CArpnYWZ\";\n            sout << \"3SR0NRB0PFjJcgA3RPVWW591v7Aw3G7/aUh5OLSZsOoxrnE2Hb8wM4wQXutleUjcUCxdliAbLl/k\";\n            sout << \"RcLSE+IzpwRpnSo05sBx91Q71Ws9NeS0Pruy03wScuztfv15MPoBmMH4Nc+JhF/iokGM7C4IICOb\";\n            sout << \"Woffq9KzUSWaIEEO+qaKqfnG7+/bW5U/gDW0xAfvTt0IuXtoJH5/Gq/g/anFdecnyCdBa4C02MFJ\";\n            sout << \"gLqm9Dyiuh5Hny9bAuE08YxgrfpwOx3nGxQ/MrXwGUNjCxJEz4TkmFt/Z6HmOUhobQ4Xue5rK6gp\";\n            sout << \"qWkg7gkXJmpNaj40TFnxQ3Fvw7S1UPNcY3vEvskuYXlB6mI16FCa6ApkR3+krkCKokxelBU5eMxx\";\n            sout << \"+j5Lv8hYzlSlULUJrDOmGRxQ65lOJPmxbuukr6Uaeh3/i5m8GLqJ3EAkeIABkck+sT/OCCS+1hmY\";\n            sout << \"/wRbadX8sd19GjHTLkZ7jwEss0qQj1LdtcEtqXgtzy7+8NhQv9c4KhxFNZdYDezehZYZuf4+UeHM\";\n            sout << \"UAPE6+DX+AtKRD5lSwcAEoFID5GLbsLa+gGWzhmn5dfTDvaJrQNYzI6K1f0MBsWxuXu5SM6dRehm\";\n            sout << \"9FR9es1OnhIFP8bg5uR7lfIEsfAH6ysgkJyylceoooXwE+cALB+IYfk3mIHNuDMbrQxWIMZmS1er\";\n            sout << \"I45Gz53QPLgcSjH9Z1mzrhaZV3ZiJqrTYETtObMRX0136rNLBCaytijF1H4QBJaNEsuJpHAYQHsC\";\n            sout << \"ko8cTk8lzMmh+ENtUjLvrG+pEx9FKCPIgUIZrAAM39fWS5uKhFaAPEkfD/FxbEMdM/hjzbQzcMHy\";\n            sout << \"iYywZCaCYwolzrQtlTIL3I4VqzpUk/vWMIZt/PMK8lUGBDxzELkXNTYepRJ+uR6QZKOU+/LpLk8K\";\n            sout << \"MD6+BZNl2karSYjx9qDDHuADoiNJbSXLV2NqyJiNyTmdKv8E4e52mVFfetoMp+gpd7vMJaAObPuJ\";\n            sout << \"A7rUsNjWz+Zho52LXUSUC1G1MdZPRZPMfk/KvNnXZX93P/KaBXTNLlRf4KkRXQdrnmP5KgKFOvIX\";\n            sout << \"KUMJ7UQtP0koYJl8OsFHG5yX+qI4BOJqVT0eUypXtlW/CHRX51Wl11wIDsTqbi7zEkBu3kFLMfnr\";\n            sout << \"3MEYcVWthG5Y9KecfsdLtRnQVSFRMEKEn1kpVAb7xqZhwKDqREVs+32AawqNxPdO4JOCC/wW0zzH\";\n            sout << \"QlJ8KhbcrxKLaygvVOrqaZGeCNTrrRxpG792CtX4OqXdkxpqcPNjhQJXMgSm/OvHJ1sJOrIHYaru\";\n            sout << \"JPDH/J4e0qg28rlRpN/iY9xc5Q/dMxhoEsv87ehP+MPKF5ByxrWHbNc9IaOiz5BQIQWAc1glXkKc\";\n            sout << \"oyMgoCbZ1Zss8zJ1+k4NwoC59BpnT4KbZHZP7+MbXZidCSosl1P88yC0vj0BX8MK+8x6PA3X9Zc5\";\n            sout << \"Sg2OMThc6WRR3oi/DeHePYqJgPtJwhZt7N651llY8/YIJD7pqVEiB8KJGcrjZ9tDuU0MDTkKnrr7\";\n            sout << \"qhlSl/XFBGq0x9zIfYeBt6k2wgrpE2/FjgziM3YuH/e7jfppGx3S3G4O+yrUuAynknZQ6Opq+Qs1\";\n            sout << \"PYFZMW8Fj+CPMgXGy/2+JPXULK8vf0hN3FfNDeHiGpuGEVaEBHdZdE3CW8cWwyRSdvQHgPbXwEaL\";\n            sout << \"pLGxPhgGQlPLK/JvDQhtL7gqS1LQEAER1sleOHoTV5zEpCsKUcvisz0V7TyFozYnzaG0IcfeGysR\";\n            sout << \"Kx7O4dq05dlnXicv2IrhcCp9+QZSHDL/E/t/SEafxZJu+sIhqknM+Sgx3MAhE/U8KyOANAYy1aPB\";\n            sout << \"H5Qt5RnDbYuFJXHDG9DfEWWcNP8e2EL1CX0/gncYvIz3b5Ge0gv4hwbV23Xzsi3hOki4A/B44nOd\";\n            sout << \"fAE3Ao1D16+6XowEVC8gUh+y1TSnYPTtnB30NbrcMhHNaJP0pYzG41gNaMJNjK8SGXSnPKiXrsJ2\";\n            sout << \"1jsvbLaMTEBdCqw+2lgg/QwEVgUef7JhVNKbQKf/HTtuD50Ofa4PXv37Q92/xnHWHwjbWfeNEZWA\";\n            sout << \"Y5bqQI/MlWBKWSGFjpoQsfbCzS6P3ieD3ID91DmB7tDjTDYm5Wq6LoHAQzx+tTxiq45Qn5tUg0zx\";\n            sout << \"7VC8Xh0ygItADoEqXpKUXdfv0o6G4zxjePM4dvyf4NBkh27q1S/aQwQp8UOury2Eunij57XSxaOb\";\n            sout << \"IFwlFJYC6wtmg6oV0QZAburx8qJMLdIvHyqa5YJJ3HGuHJIyiD+tuxWVxDZSJQ1RedYqBPAiloyy\";\n            sout << \"Z3j6EJKqNh0kq3c0K/B7gpX0P1ZjOFZUadIbEW6dd8bxl0RuyhzdSUMkn4rWgmx7zPvoOEgXzbK+\";\n            sout << \"mJmBT9lEaYE4sFkXfZqDCGq66jdc4RrlD4IZbGkXwMeTuHsfLL1hviKSOyJCTbmS5dKZUdWuVk8R\";\n            sout << \"XFqATzyHHdArHR9RvNa2bQk5b59tODpeKCqECv5DJ5T2ap8u21ctDCJiFCHq3gLfw6IumI1L2m6/\";\n            sout << \"aPGdZ0d4ZMR9ooQvJuhAODKg0ZsA+LjHTakpfUwHpanPWkCbmhuh3oMC+hMX+AqOi55nr2O5uxRL\";\n            sout << \"9UwixLBmRa8g3lbgUGdteTTbvZ2ePyzwxhWp1RS+aFJqtORmRMkgB6vRc4SC1CywKwwHoR3RKEj7\";\n            sout << \"uW6oQyLQqPYevLuBrbO6yn7U6DkU6blGF7jg/2y12MpwYPr8l661YMXXsmVHCVSJ0AsPSGhJ8oL3\";\n            sout << \"Cqk6DJbpyoN8O1xK4zNE0cToRFMhEBjlim0lg56HtbEHfLkqRwnFqfo6vvK6opxJoShMXDa5jrLH\";\n            sout << \"GkpmE4DzaGtZ/P397TF3Y12c6lXJFDYWslp4tMskzsy9FdW63kRUvl6Q3UsWj72qGE6r/PGVetJ9\";\n            sout << \"in33oiVHTjYppFrza0ryzPE02V4uobC3y2DtoG/YK/GJFkhm68O0QKxyuBURMfT4j046fBQAbwUo\";\n            sout << \"B/Ylsb+srIUK6sIEnnzdJ/8ve3f961Yx5Kywf/9kVZnUz5RoiP/bOWXm6jasSq7LEvX2nT2fweup\";\n            sout << \"/TI83XIDWd0rFQoGTfuIuXFfLQbXkX4oZpmYLdr0kQAKjFtNB/JYV5PTE7PskJKD/AS6iYLd2pOf\";\n            sout << \"cEYJxPZWSWUSz+EmRNmeDl3lfch9LD6VXgaxY1xPF0/1uQfU+BBikdVQJPlMzVB9QK17ir6rynim\";\n            sout << \"CP038a8ctWt5RMBsaJPZr7bieh11aTTW2mC65Y3PYQ8WsXofuw4x3xoXI1S/hGCM2QvmgWq29xHp\";\n            sout << \"5Jkp/Z5YLaGBGxCHM+QQm4LzggVnhYjlguAbfEmWFapwhzmx1L26gv2q2AUiozn2I7dAh1vDRKD/\";\n            sout << \"u5XMODPPJE+NTsr5DQz7aIdEwRLZynp1FO+VN71nYDa5G8ruF4v320ocRKm/mQ5uzU4X7w69CLdS\";\n            sout << \"kmag9jfDGvuolYqCooAts5b7tFIcC3WjlXeLPq5y8HmzY69Z72HrISpq0Fyq4vcZaksLSdpv+Pil\";\n            sout << \"iUu6Vmti4LYLHYsmue1UgMzL0qqdRMz6XmCPBkUXYDS4oOoQuDcH5iJo9aWRoADapKUHqIUnoR3O\";\n            sout << \"Vx4h5b2/XtCEb8dNF0ubJ+oZGbAize7SWTGnUCQdpz2wxAWFymc5/5jFxfVU2BKSPhrKRYImgnVU\";\n            sout << \"8GOms14wCx4wyGuRZY3p9s1uPUBNNjDnJqVg6I+7STXJKrYzeP2gP227k2JE3o9eLehe66hcqaPi\";\n            sout << \"egdpG5RfPN9X87FtePJ6lPjJ8j0Ysgoa6l+DDUDuEZHp6APIG5miY893oac8uo/r2RgRNVv6vLFo\";\n            sout << \"8VIFR7IwcLj1zXvwriv/Szw3POh7y8svSb4eGKr1c1/5JTJB58Fcjz0AMm2+rW0Twwb3STxn4SZ6\";\n            sout << \"nXOyP0btY0VCckovcLoFij3lsl21ZGMdfG9cHVlKL88pg4Ip00QmgcQW3QmBBoCjlPlRVSSsDHGY\";\n            sout << \"8TBBGLuxJi7NPzU1HNtjG3cnYw0t49og2hjrIbF+6fHb9x0pPtnJZwX7SbBYlk4Z8v84fR7cjC+9\";\n            sout << \"l6SLvaRgqkTj/aaiiHtC17zaxNhP9wHqXmPUZdKM6xs3vsAF1dYOLPlIv+nmMLBPfravTZDkf3p1\";\n            sout << \"x56EjPHwT1GULNkLBG8iod/cteD0E0GIZf0g5/o0hfI1t18CMGxfMyeaASZugV3+KL1yOwXD07D0\";\n            sout << \"lp8iLn8FlYgXOgUO7+OweJcIu1IwkzLSM2aNbnH3VDPlu/Ff8ZHL0jiuxhQAVT6jdWJSUEOf2yiB\";\n            sout << \"8mIGCK7CH9Xv9l/grSdh6GrE+NvvWqKQrhX1k8wxHEM4PnhMSO4R+5dRFWeeh6cYfTNHTYWZ2xzU\";\n            sout << \"run1L6tULZzpksLtHYDg0vEEq3hDS/3yf+/cvCX4ibt5pUqorTpAtNvbTaguUyBy2TOAy6fSFGh2\";\n            sout << \"eHil/3JEYZXnfFtcBo+pIvt3LWEPlWCUHNKFLQnpd77Y6wUFn3Ku7o7Nu7zBxemmvxxYUXImAlzt\";\n            sout << \"354O5G/5G1GUGFf1K2u11fFcuXrfowEE+1eUEpC0KLyxZhOJa5nA6dKtnQbq8wrGXxuGuJGlDSAu\";\n            sout << \"0sUYLPmELc+kGUyY6A27B0FKFN50bP1U5iWLAtxt0NmPqOnwzvnj5GYQ9R/ZIpzf73N2OoYL4+ba\";\n            sout << \"6E32ION5IxY2YQ1IqEHxsjzvDW5KoQCb8oz63eKgwLHBz/1yhA0ELpzG9ti5pVE4WbGKOtS/2xTh\";\n            sout << \"RIgpnpbB7bPUdtw33cjky7t6UAO+QYI1kg8rscd/Ug44hd627JK61SxnGlK5wBRj7aoUxH2yb3Dt\";\n            sout << \"jMgmcgZYtdIsHjuU63vrN0acMHULcyCRIFuFEtXgnQNIKjPUG3iuN3714Y9sncW5HqDGAYLyRpaA\";\n            sout << \"69XPtqYEajN2uLF1Q9KIeW701X1diQoHw7TFq0p5x1oTMRzjqcz5lnLIM0DycqCPGoGAnyL0o5A3\";\n            sout << \"Rw9qaSq1bB5VOdqpZHyN38huATstlHmcO2GqN2r9k2BKqqDYxuzmhB1K5ugoJID0lm6KfR87e+2q\";\n            sout << \"CQL1tr6ecqFe4LkO6nRR57w6gl48J0tFYuxsgRcktYvkt/BF1JHNnw/BChE9lDBgBZz8TfAqUv5b\";\n            sout << \"Ofi4WiuGxq5sKIa8a5SRwfVbz1h/MBqBEd9nDlZ1acbg9ZGakzwCfH0WrcArLiN9FqGqmiZClS0d\";\n            sout << \"cUwftQDUI7yEoiIb18/479c1VU2q5dJddCBaabm8CtGtd8w8KTANBXX4pZoSuOlYUUQaxYsZ/avm\";\n            sout << \"RYqfU1uOkHlmqm++EvfKEGW/Rmoq/fCIl4mk7YoLpMcub9wlTSVP2W//uvZG0LYwlZScWGOGmo6Z\";\n            sout << \"xa02FmCXVIyXUfnitTEv2oYj3CV/57nW4+1jkXTcYhH8wt5wX5G2eO7qw3esj1x1kL07xmven4Il\";\n            sout << \"nmKMri2FNxrWUBzvCwmfKGfPh1IkQ9LAfaJJATfGeBFI33RQdSILTaozNl88dHbUO8I+ZnySvavV\";\n            sout << \"uX9Ia4Gvrm0nzV6WYbE4SCDjppsaz0CSZy1exA9t/NFoQFjvf25pszQ9JlDtwDm65ssYqCTLjyoJ\";\n            sout << \"AjMMUygef0nD9WxtWkVCywmyR5HIZWqwV/poAROWBUNL72p0kYxDsm8u8D6LFDQJj+/rSQFr4jzF\";\n            sout << \"RkH7zemYp52d7nSo7ZV84Pf11aTTWqg1OCwAFz+bcg5wZObUL48+WzPAPePNtlo2ef4hn3tyi/pj\";\n            sout << \"v62xZax1oHnnB4ozyZqwSd7aH8LGN4G0Pk37PCagVXLEyLEGQXA3NqxxokimT93xORZOF4hZjhUR\";\n            sout << \"EM6aKChyS4DKkB/HN8IEMrPcKL7zadhDrWX6aeAxBOIbF02jTyCo7rFEO4g3TLuy+aX29SStyzAd\";\n            sout << \"bESo1w0hmnjboB/cUVh9SU0rWvyHnBveXBU1QFsmKEpEVXbD9iao+VArYlDKQgXS0elIQIJHLJ2v\";\n            sout << \"8cVk5GtsXQU9Yd5vyzC9R/ZuUD+fuRcoKYwevCjnVegbn4mCK6VICihqWM5etEr9CqdjjzAtemN3\";\n            sout << \"RhW/4c1v6Gfcb3LQIctJmk08SbUfkImRlULjt3sr+iF/9gMx5AneRDqnq1YRbiusqAfpCl83zBFm\";\n            sout << \"/txWD4btmU3/Q9TzIYjcDm8JFIpptv1+F6myuN1ElJPj5dcmfBZ2/KQknRf7cFBSFCfeKS2glsIm\";\n            sout << \"tTj1p8jK+qKf3GS+v/n6VutWgGXAU7bjZSfaWn3wfNX1rJXOX4Czp1dXxmXuxltVQ09bTpEMQL5o\";\n            sout << \"F9LI3ExjgsokVCsnuAc25hTRWP6bUkWsd3fvbVK/Qrg8sYEpq+3836NJyb2BcFVBqmDJaW+MZ2+P\";\n            sout << \"dJwzMjQMFfRNnsEBRwHuVTDwa4tyR+1yFOqG514ohI4UKamdebXPlrjm278ztqaN/4ASFsVoQb7O\";\n            sout << \"nPvqiMT9REV9ZLiK8z2NK4dDr4KUCr/UihBZqX7qQWnFRyy0VooOFAyP9CjfohLthZ8Y0HWFDMpx\";\n            sout << \"0imNkxXlh3CIDNTRXAmgFupIEQyY08sZX/Oqx4NdzpxWLh2S0VJmIupzuxWTnKBRJXWZEVPKqsak\";\n            sout << \"zBsNzdtcqrF5dIIY/7d+8LFdEBIZ56wftYkRRvJt9S7mPIY++gohDronAX/ohfwXwu4jCm0OLWzO\";\n            sout << \"l4FIAdeN0m65Nng2pWnF6M+qB+b5BT3I5cAh7GF4t3woiWOBF7LnjOYmHe7ZkzPzftxeZ820e+eJ\";\n            sout << \"i1pFSQl3/H+aneIsjEQVGxgynGtvGW3pz/0f5rWrRdUG9ZYPJItWXCjJz2k/Eb3fHDA9JVIT9FEM\";\n            sout << \"XCsN2FQguDWy7cDxNMKxVRuhomjmVCR50/W9/Wsjg6+tnNNhY5Iukh40jU9uN/WShMpzXNv2QKxR\";\n            sout << \"bfUtL0zpojBbZOkAd1LZ++bQREzjPBFQ6G18eQa7DphNarttvCzw9qdgvmwpl3CfvW4PeFChxQ2V\";\n            sout << \"SmfUcuFnESjEN30zsEyFtIJNVd1E+4C6vDxk+FRWl+jGbzNkQ1GK+9z6M0HgUxBXMXcHiJbMEJ3s\";\n            sout << \"Ri6PqeKjZUAJzORigJmgOO5wURFI+3EVQ0NuPWfaQ/6UZ1n7fdXi8ncmO4jVwY1ptN/4tJL+bAm0\";\n            sout << \"eu/c6ug2bfNCTx6TnutxBAg5AvxlDrJIUsx+TsM50J4OZmv7pI4dC0UWU3TpzaYHa/cQ+OY61UT/\";\n            sout << \"j1/QPSquxIlWA46SGt/xrUg9iPIWw+2hdRBkhTBE6PrMMHLl5jxWpJ96YH5WDnifNnnhzRDcLfyf\";\n            sout << \"9nZYWQaBzm3JangobvnsDPgjF91OfeFJhVPyUwS5u+Sxw+NKPj9wVAaW3gZVS2BOODAud/EvFfQF\";\n            sout << \"08t3Ab27GGwWNx9ExN/jlq8EHAM+VRcyfn3hBVjLZdt9fs6zZliYdfyNaA/fgO1iLwY4DOSKgALr\";\n            sout << \"Vs5+KDTmyNf5DkAg/W/d1tA/o76/qXUz3gHdm8Q1TqA3ZuR3g1BE6oS4T9Sg62oYIthP99doW8ll\";\n            sout << \"FPr0aF+JHwXzG0k6Ao4wGdKmqi+n91pVYI7r2zE1kKtk7GyF0fSmcVnnP42TQfaUbaKB1bMT+a1V\";\n            sout << \"NMIydv7QD5F2af3El9np7/1S69sGpoNK7PLow71jdlCewGVrq+iYxZaVhe3xHwerQQ1uGfmRxUSK\";\n            sout << \"exonRQPz0yD5fkjRCqq+Hbys1CXe4iKa2uO0pW+yMlvRnMWpV3Bx6uxYR6pECBJ0x8DQHk4cBwa9\";\n            sout << \"J/vAlf6dDaVh4PIZy6PF783iAPRusNy0TcCxXTJbIg5YqUb5QAyJ2HEPbIaKeZwSnhytAJKP98JL\";\n            sout << \"JC+81f3cN/tJKfWQAJz4RgcrbhUfyf5yWK9rPOwvFf5WKfecfPWc6wpT4IqSrlDe3LQqxpFxJwfG\";\n            sout << \"dzNo23TgOFK+H176FNuW7jXD1sUsh9MA3Yycm3BWZ85cK55DOI3T49K2WB0KnFLkhA9wPJNb20qt\";\n            sout << \"m1M8QtKwF6jzpMnbBff/vM4oNL0K0QzXovI4gJTDUkHWUlZ3XxMk9PQIqoKZDp9v2JTNW6cs1zcV\";\n            sout << \"Jcm2XE2ZhTCFmOQ/DIG1AQIzQfOY6s/VRvHPSkIJH76fo1ex2jj5CmbGw2JFNLPDQIIHEjQJGHFw\";\n            sout << \"KpVGso6XF6CdMtcmlswoRrIvN0odvC0md0D1lf09ZuoyNt68aMSxgeBhoQYW4qC6E86Hef3TmzWO\";\n            sout << \"esZCvDs2I3UVKgPEkICz2TEHy7dcC1VzU2k/F/cm3+y33lloDem4Dh2igflppvhthcYCLOmFiEW4\";\n            sout << \"YtxiVJKpIAKbNHqv9qpxNdcbLCsxkENYKwmmG8E3fLSyE7St/z3dvuTuDI35lxANzv1N04YrvfEr\";\n            sout << \"dIPmvepllDz4Ua9TyYQoZezD6UsivW0gfWdbG9dbYnwAZRKEgQjRD1zvGUt/nGCUKdtBDh/Qu7jD\";\n            sout << \"c8KMBJx0meoY4jLZBSw3Rccd/KOvzC3UTSsBeTBSkQL7wuSMWZf2cTI3BiWaVTaUXREVmUG0eeSy\";\n            sout << \"W+Vym1qM2tPWkUm7V3toeS94LU44OlGDPyoHHUOsT663Zew0ao3+rSqS+KASC4L+6oqP3ffSI2WC\";\n            sout << \"517CtYtPA09gFqdWnN02mJ/+gEWrYUZXJsNh31AGQ4e4N2L1Tupy+L+mgkjTyHeiV6dUsvVQ2J36\";\n            sout << \"R2VL8EOQcchBMinBo0WKkP6xoTPcCwwMI7T5sHHR+KVUs2DJXTNluNFhYyOic2ImOwhoOHKwfr7I\";\n            sout << \"bJERGZYKwwBqGPO0mMnB81MZFumFzoo0SNhvNC9a74X8U6gKtDsQCeIHNXWsWxaO2LmjhlZqXEMC\";\n            sout << \"nrLi4UnXweqUgDscbWdq6fE6Ad/ZimmUJlj5iF6aXWj51B2VIgtYXxBFlVPURZDw9z9KPdyidzM1\";\n            sout << \"PSitwb6KwWZK8fJ4ZUVOUt1bIki9wAnpyDdAhrPtDVtngS8RJrcCVRrjQ91Vhr95kSTG4b6VtN23\";\n            sout << \"m3lhkU/T8RAVAphAait/TICzXeXdnFjALDIubsx1e3FMhV/TJHflVQhnahwTaUuIVqb1ZkmP9aMw\";\n            sout << \"0K1G37NbwIRzyHGVWnvJXxKfLeV3n0OJZ3W5dDmTOZSE1s7JdJ4rdEXpiMVsW07TB6JEtIz0c/AV\";\n            sout << \"IvDmgF9QH5Ly4Ko171Lg/tVMjBIhCiBU4zQco6brJHx+MoxEsNUXgUCNoMqqjd1a3F5wGsvhlWpn\";\n            sout << \"iwNpTje2A/ccVQmoJpDSNByMTB/0GsGJTjZ0dWR0KiltaQaKTlRFlGn/2jgbk+i7ujAGj/Gls6DY\";\n            sout << \"WoR/asND5U/rlyzwJS77EefK16ew8w3Nfy2g/vVvpIUQBG67CnjUzxpnutsI7KvZak2Yehg2NIZQ\";\n            sout << \"IAuyXMd5zixobwku63RvLT6Fd6D63HnQhEtgtPTcLJT6rQOf2cXAXN3RLOghcpM44flJ0PW679AQ\";\n            sout << \"pgVrmELVQr2Dvv2fCb3W5k/JdgvTKrJ2YPIY9Y7q5aSZ28VC1u1k6y/KsppJ+6t+TW8PloS+qKNb\";\n            sout << \"2tawgDRraMsNVUTMhABYEPZ+qoYspJPV4rKfVnELc8otpvkR404ulUsELxml0TndtntTjy/f9lmi\";\n            sout << \"I7pfDqPsOUfwUtdhuW1XyIhX3RFmavc/VFLHu8gVSmJgdgxjraoe1ldt4F8vgQu22uZu5yBLtxpw\";\n            sout << \"WgKVifBtJx/lZ4iAPMNJUZt+Fo+1K3uofYmOg78dsM3BSeghNcNI5ki4NrUJ3yWTzfvrUIr90Ee3\";\n            sout << \"VUaGz0/wtOsFI74ef6BaTCYNAt7psf/dwoow4r4FzHgXNqr9MtWvfp22gGCaRLuUWTHgRzIkCflH\";\n            sout << \"YyNFYHD+yTaKmSrYay2bBYFGRFe6Vx9b8FR7fmdyqq4HzRwQ2/FVeSQ50OHeT3vWTTg07M31JkZY\";\n            sout << \"VlTjnw8Ew9N+o+qI9AFaftksVdXr2YjXMpJMwbHcqK6himQLSkzkUEQXsBI6vQSPobBtPM2oNlCs\";\n            sout << \"oEf4AvHYmHxyyzVdSRjQqEoekWURI6htJxRQh0DaDhqOaRQmUp0AkB5StSD8z6o6Wyf0yvzT8OJo\";\n            sout << \"NEjaoZbz82eivQUGf3RmYLZIx4xjZ32GA2fUN50RfgyF/KzW1GNLLykJ2NK+saJKGZB7RC2ZlsI6\";\n            sout << \"CmkHIZeNwG131Opp+ygasp0GBJUzlKnEzmV9CIBigCv2oPPxewEr7T8/OGDPXWhY2LEgVbgyxLdD\";\n            sout << \"MnZlJC28aanAWGoGMcuXgyacFhOWc7I7TTml8jlQv1oDRJU39PQwZZ93HwhhZ2s87wuRYCQdXSH+\";\n            sout << \"pdtb9YblyosciNtYJguXl+2iBdGGIqNAp6oxYj/rI5l0pPY7EUkGEnOzQq/U3zCDPL1tdUymaOh8\";\n            sout << \"+XGYMMo5L34oxvi79Rh4snSaOO5h0fl0aaZES/v/x5QTtQu4H7qwVfWIsOg8ujFFDFeZmmJpb7pc\";\n            sout << \"ff03fNUsHBfS3yf1JvrXhVGDh7byfy8DTFCy07gXUaKJzQJNOjEqX+iu25I+RNxXbfHsRxsWdNEw\";\n            sout << \"6aHRUUb+zThVJGkglO5W/S32SJznnjkHdFu1WXBU/DbM7b/quJTUgWnZRLy6CugMu4I/hp5ArKCh\";\n            sout << \"vekyQySI/9TjOEPEFW37few/H060cZcz1V3DilvOTBrCoItzdjxZB/cmGxPln3mhkPqGr+NsXRdJ\";\n            sout << \"tPMRc91NxvDP1oBnXXEYD418bmxfvqbXZm4Q+bMq07TT5rWABCZ+NFmkgkXryGhfKQWqidxbRenT\";\n            sout << \"8teao4iAbwSHWB/Za5+OPYUS4b2u7OULXqkmbQDnTeJX6ou0VFYUpkXStbtLITLJrvAG0BrMq7G9\";\n            sout << \"09vbgw6e+krF5JHaFXKAgVf3/SlvRrZi6zgPT7wsY1WLGlMAFNAC58UhizDbVV5Xivj/mVxi29s2\";\n            sout << \"tZHKQRshEnuw1KvEp61O4HEnO2dw27v1000YgRz9HtQp9Ra0SsePIjlh8/h5O2VTqJgMlqgAiy9g\";\n            sout << \"l7nvX3Ft3a/K7S8GlVMwM8z4DiSzNf0irgnC/+sVu3ZAy13UiviJTv0gZ6iVL78GdPSqhKq6x8IU\";\n            sout << \"JGX2sbzthVZUpYPm65WjEBKUKsHWIdeAokKh+sS2TGEAo9COawULVwzYttKSY30UlsBLL/ofpjF/\";\n            sout << \"eCWfzunbpZ3MmkXJYVygXCsGgEuxDmWrhcxIF5/pPZDafmaxqHCml/zxew2twDN9lEJV/jqZrwSL\";\n            sout << \"I2awqrzxIp/4TfqYj4C8HOQGb4N246snRl3iH2tvzQZrCg1I2mp1s0+xiHESKtfecHfMt8hbb2QZ\";\n            sout << \"50c/3MAKQb9WatUDqfZuTnnwXMo5vm0Sh9KqLYQj81LFOzKzf1NDil38GSmFGWPsNm7vm8Q6S6BI\";\n            sout << \"MZafbg2gM+ohtKS/u/36ZADS9/bxf90Fzkn5UEjZUOIRBhYowQNilZzHCABNNXFO/5SUzSJqgLIA\";\n\n            // Put the data into the istream sin\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decode the base64 text into its compressed binary form\n            base64_coder.decode(sin,sout);\n            sin.clear();\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decompress the data into its original form\n            compressor.decompress(sin,sout);\n\n            // Return the decoded and decompressed data\n            return sout.str();\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n    };\n\n    face_tester a;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/fft.cpp",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/matrix.h>\n#include <dlib/rand.h>\n#include <dlib/compress_stream.h>\n#include <dlib/base64.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.fft\");\n\n// ----------------------------------------------------------------------------------------\n\n    matrix<complex<double> > rand_complex(long num)\n    {\n        static dlib::rand rnd;\n        matrix<complex<double> > m(num,1);\n\n        for (long i = 0; i < m.size(); ++i)\n        {\n            m(i) = complex<double>(rnd.get_random_gaussian()*10, rnd.get_random_gaussian()*10);\n        }\n        return m;\n    }\n\n    const std::string get_decoded_string();\n    void test_against_saved_good_ffts()\n    {\n        print_spinner();\n        istringstream sin(get_decoded_string());\n        matrix<complex<double>,0,1> m1, m2;\n        matrix<complex<float>,0,1> fm1, fm2;\n        while (sin.peek() != EOF)\n        {\n            deserialize(m1,sin);\n            deserialize(m2,sin);\n\n            fm1 = matrix_cast<complex<float> >(m1);\n            fm2 = matrix_cast<complex<float> >(m2);\n\n            DLIB_TEST(max(norm(fft(m1)-m2)) < 1e-16);\n            DLIB_TEST(max(norm(m1-ifft(m2))) < 1e-16);\n\n            DLIB_TEST(max(norm(fft(fm1)-fm2)) < 1e-7);\n            DLIB_TEST(max(norm(fm1-ifft(fm2))) < 1e-7);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_random_ffts()\n    {\n        print_spinner();\n        for (int iter = 0; iter < 10; ++iter)\n        {\n            for (int size = 1; size <= 64; size *= 2)\n            {\n                const matrix<complex<double>,0,1> m1 = rand_complex(size);\n                const matrix<complex<float>,0,1> fm1 = matrix_cast<complex<float> >(rand_complex(size));\n\n                DLIB_TEST(max(norm(ifft(fft(m1))-m1)) < 1e-16);\n                DLIB_TEST(max(norm(ifft(fft(fm1))-fm1)) < 1e-7);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_random_real_ffts()\n    {\n        print_spinner();\n        for (int iter = 0; iter < 10; ++iter)\n        {\n            for (int size = 1; size <= 64; size *= 2)\n            {\n                const matrix<complex<double>,0,1> m1 = complex_matrix(real(rand_complex(size)));\n                const matrix<complex<float>,0,1> fm1 = matrix_cast<complex<float> >(complex_matrix(real(rand_complex(size))));\n\n                DLIB_TEST(max(norm(ifft(fft(complex_matrix(real(m1))))-m1)) < 1e-16);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_fft : public tester\n    {\n    public:\n        test_fft (\n        ) :\n            tester (\"test_fft\",\n                    \"Runs tests on the fft routines.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_against_saved_good_ffts();\n            test_random_ffts();\n            test_random_real_ffts();\n        }\n    } a;\n\n// ----------------------------------------------------------------------------------------\n\n    // This function returns the contents of the file 'fft_test_data.dat'\n    const std::string get_decoded_string()\n    {\n        dlib::base64 base64_coder;\n        dlib::compress_stream::kernel_1ea compressor;\n        std::ostringstream sout;\n        std::istringstream sin;\n\n        // The base64 encoded data from the file 'fft_test_data.dat' we want to decode and return.\n        sout << \"gO1l2wKz8OsyeYMPYcGx6QdBG65vnrB+omgAJ7Bnsuk9vkTw/Y9Y/UZEFXhVf6qnq92QHPLV16Fo\";\n        sout << \"a+IUHNTjoPAfBOTyfb8QRcTj9SaWpxA65+UCJ+5L6x/TEyPKDtB23S0KRpRSdfxBSW9/rnUrkIv7\";\n        sout << \"6i6LWcxKzdsw2WGsRCX1k3t0adQW49m/yb8LV9Loqs7/phzY7HkJ4D2PLtpc6Wyk1qG/h6KQ7nkF\";\n        sout << \"GFkHIoh+xKXhHpqWaSofx8H8m/++H++g0VSPqfQ1ktFz+K8UtiGoyR2GqpP+br47YLXG3WqVU5Km\";\n        sout << \"Di3+IjQoBH2m4jykD926aRvdRrgUH4gZunokl+U6shv20Zm0NL8j4A46/2f++YPGCVBNJJmcJdI7\";\n        sout << \"9RlPL9SFbJ8rnH5bbLvZ2pKZmmbeZN78yzLUhdGwn4DGpf/Zo1fU2YPUjVKkwY6olW4w3tiBl05a\";\n        sout << \"cS1HwBeQjnajqsXNyudbrBkM1Z9XiwM+J5iMsu5ldaJ8iLn30W2Te2RnZhJRHO8MgL7Fn1j0n0Qb\";\n        sout << \"8dB+6aQYv0l/5LQkr5SX6YSRYX5b5rnqhi8IzJKms6dzoyBm97IGTm8pRxtLXcmsk1MvJcHF2gl2\";\n        sout << \"CslQazsl5iIS6fMxEodmlMdwdfIpp/6MqmeIydSHwdyJJZnNPl2p5X+Il5egmwdaSoDQNphPfTaQ\";\n        sout << \"R0Xh3xqsZKgHLKxB14Rsf/R7Eu9ZASTByX3UrEHsSzLSUo9/G+tS3n1iC30Liusksh2Wkt+/QtDy\";\n        sout << \"A1ZX31H5OlSFwCYC/TYitwyl4U9k7WhHBDoT7MdmVTYQEK1dK48nwOhnZa9prE8n3dD40CCe25q3\";\n        sout << \"Qo4VVYc5tBWu1TfTbshvkmHAcp3Gyw/caqq6jdq5Z2BD1b67i/bY66xhmowOFS8xeA7v6tKdkvpp\";\n        sout << \"Rk8FegzVdB72wpw3872T4K+eplMDcCPGkwIieF5pZStWxhGsNOC0p2wvpFvTpQgfNOGUvRt69hsd\";\n        sout << \"xaUEYlWZcY3sfsiOwPGgBUEEv6b+8W7+8Ddj8Nx4wG+bdWozphfz7THbmOeaDM63imIEHmJbZ47I\";\n        sout << \"QgoyzFD5WoWtZ1wMEv4LL+a63B3FzBcvPvdPaa2QEmyiK9yN7GEePs2Fv2A3ymhGw5NeR1dOzAjz\";\n        sout << \"lEQW01p8opk/dpyLO18zj8d+Hn4EnJkKD0p1u+XuLRda8AnRu/WmSOOpyG5EUrUoEyuvbECLbY9X\";\n        sout << \"3AMgzkbxltmZlkyOOwfCGM0yumGYKdz0aGKdyid7ddLMTpQ908dCNLyRgTybdZG9137PQirgX5+O\";\n        sout << \"08T/+L4EIyyrslOYxpUaLm2ASnSUgiivoIJvfnu8IeH2W9fPupY89ioXIYuwZU8f9FDCA9z7peQw\";\n        sout << \"9H6l4PDdDrB7nwQhncpV9FYLkHQLbSgE1VD+eL6Y2k48pI2zUndcoHEZW72NcmK6E8fDvfgbKkYD\";\n        sout << \"m02RiGuj4tvEEsIVuVa29Q0JGO+37n7Mlz7+RMcUMo1pLnh+jibas6R+1LCy7b4ubiKMFB1gvjut\";\n        sout << \"gjMABy1dJxSOdb9xUa0K/Alwwu3MxdkrbTxwqkn0C2JnVV7z9S2I+PWcfZKzcpg8Itzh/ON6I/DE\";\n        sout << \"EGK3s39XhLI2xPg3PE9R9QMaisqxb3FeP1NkBXrLQtuQfrSk+KZk6ArQWVgtem799fxgipQsa5RH\";\n        sout << \"z2Dq9t+pJzNGUnWg5PWzaAY3lWMscn+BIRhsZfDJ3QBtS9Vmib8r2dtYwXi/Q+FhnAHFfcXbhDC3\";\n        sout << \"GHn16aP2PY1sw8KMtfPRAcqY8Ylbr9EQXjWoIYUs0YyX2Ks8ZgibunTPFz/Wu98RVYswMtjubFaJ\";\n        sout << \"jb0pK9S6qoe/w10CAAHqoAfca7uMOxw9trZZmjCf5vF4leH/nDgsNjesYn21rE6rLhSbg8vaZXo5\";\n        sout << \"I/e1uhZlRz4ZNnMlZSnL70Jt0IjuR0YNphCsGZjmvvZ4ihxrcLrHvAcSTJuqW5EARtvjyQWqBKSP\";\n        sout << \"5XhlkrI73Ejvy+Lhv6n6O7+VrfWa/tGRuvvAToS1wPOP1T2oniDXsNlD0QbMnCao+dTWgkTDiNTk\";\n        sout << \"sFxsoN8YjwHqYUAp+hfnu1Vh2ovyemAUmo87vuG7at6f8MgFSuZffmBkGuijKNDDy7OrHoh7+5/+\";\n        sout << \"aOkcvp0pW3ONZ4l6peRNvzaW5DEBTvcZGvRwVCHWII1eGpzeJKaHWvDfLqjaPkFrG5pR7SGCY/9L\";\n        sout << \"73W2U0JCe2h7VjWbCM7hdvJEgYi/mEarVQpt+0P834es6Rm9rsMCbgbrWl7uv35+LVMTHU29Oxln\";\n        sout << \"bDzBUJQs5KIA81IWR3R7D+HuJvpMkAYMF73c1owI7K74SBOsTq1ayC81aNlK7YwOOjZyBqwsQ5sy\";\n        sout << \"zZi0k9AcKRGmTC323o7Tp/n/gkAU3NObTnqPEJitjGloXqrhPvorixBhHXSZy+wgL5R+04KiF1uU\";\n        sout << \"LEFOzJ0zKUMstTB+fgC7D6ZnVEtUq3HEYnmaRRwEhRSgMTLXE8VvnOdo802pMVN5GMCkH299rJm5\";\n        sout << \"Ina8mTwlC9JrNuYHot5KK/Gny4KPyUeS51cifByPwroemwBHe9EmKCkcEJPoDpG3QMaV36aopyJl\";\n        sout << \"GwhZxaZSqbut9XSWr0IMxHUkFeslRB+n/7Vx+xWpDNjQ7JA5S/B0ZW+YBQPcjA3sRQTey25JD4Jy\";\n        sout << \"RsULxNY5e3mjn59fI8OpBOYfNPTt2Jzppm1GDpym0LHuz7KZ6xk6QAyogk+HMjC/5RcQA7zJWDRM\";\n        sout << \"dXC4CXUjrBxVzmm/YHXv76LrsaFdzJgn+/qzlM6IvIgicMhcJl+hA1swTkgcw6JRalJiDqnvapKP\";\n        sout << \"V+T+/X5PSNMswgZURHQJ2l0PkMrUT909pBOC9t4GCsK8k4rYS2o0I0UYfcpm4jMRU5X34zlT8Qv+\";\n        sout << \"GV3mA0oGq1U2dJwArlPX3gI5sZ2Jsw7Qa5edvQNG5GoRb2j2Muo4AkZXXjbx0KEa5leLIhVL4BAE\";\n        sout << \"2GTdbL7T8hUGY3QlRQGwSVAytjUfXg4jCyn9w6ZbxUOu5MDBuCEtrhRSJNKuBLInK3Bh+fr2FshC\";\n        sout << \"T1eDtIFE2EDEaSbLj4NCNWpTFdKMXZ9CQg2VtoVOIJfgKzqAjjcWX8kqWpMFlQgtdTfIqN7gnFit\";\n        sout << \"do/FO0OzLghevyexHdl+Ze+MjITKOF0mTPPMkcIYcINIR1za6q3rLDZg03+GouzYhL8lwM3WAnkg\";\n        sout << \"Qg+NM6reQATKFK3ieOxacZYnIwOR/ZMM/lO/rHY/ZbdAnJHbMBWwRtK1vDi+o+ZgS7EgsDpsmz/l\";\n        sout << \"PguXPK0Ws51OUhIJJ5YDBv+nVPJabxOYV3dU0z49xFpxNTW9pTISo8mKZvLp2D765kExGJ9YKoAx\";\n        sout << \"Hfi6WEg3pFS9YQLNhOZjE4bQThugIWXhi+2OPgqUIUoV5ctSnP5Lv+xhbkZfjnQQQQffrrU4peSz\";\n        sout << \"6CuNEVLuNuG/mc3WEDZwf1HxYv3u9pr7A79QG0EROf23zPzaf5biE9e9xH+ruPApRHM58H2RpxXU\";\n        sout << \"RlkYnfoAUqyvT3Lhhk6ngv8Axhi4otvz7sRiXQmZO7mtzWzsCTkCJoziwRKlD6P6LYnbm4fRYP1M\";\n        sout << \"MvOuW3NhsQNrsDtgMuvqiVQpRzg157ES1i1qnTjJxTD5emK1RljuQEetbGksyetctWdWiEd8ZfSh\";\n        sout << \"DHBJC2FLucmkMt0LHsVPnk4ni055uMRdKPRKjTE2MjpEsxR52xiWR3MtwXiEhH9fZnUl1IdBl3PG\";\n        sout << \"TfLiZ286m4ePm6JOgNM1chtZir+q8pr4ghk/xycWvHmgkqT9dQcFP8iEtlVLCS22/2mS79cTev2r\";\n        sout << \"yE90otp9vibcTnpORzrnLrMhhpmYRTxRjRaHGhwdJYluARJFBBVTMEenK2ubdLOJ8skZjLzPv1dt\";\n        sout << \"9IrO1sNUwrMpEie8PG7D7DzQ7//jdlC/HUZaGKrwj5aMUULi+ZYiBLYoeL4N8ozAK1u3KtXLKlRE\";\n        sout << \"3Akys4Py8+CmrY5qaaDOXZvwl3FF3skmGhx5KValRXrbndqr3Cks0hXglHgNonZh795galZwu0Jp\";\n        sout << \"ww/mTQLCV0djTdEfjXBUnP49zyGXWWsEsl2jfqEAfBDcT4+mMzAUtBSwwPJYXXAJQz45R32MThNb\";\n        sout << \"k21X+rw63QJe0zIbOJepHz3jaedMkj8GKNYBjqzibNqfYelunBUqW0bpi81HYdN5OFY/3GNKgygG\";\n        sout << \"4R5HJaP+x9e1HxehpI/4pKFC+TAIb29uSV5GtkNTb1fYLm0kjeCZNA5GKtf42gBY52N6STl+lcI0\";\n        sout << \"gD+jJ/ogknne3sRtEJEtCFFe1c50oikyJamQbeUO1PcDUBt8Phl1rI/p4PTP+H686usJVhSDY+b5\";\n        sout << \"9CdS6F7XSSDiXlpFl+Esex30fRZ8zAQsTo9oN0sSZUUJKcyVk0dCqw2mHWPpyM6hYKQ3ij1nYjYl\";\n        sout << \"3PzRfFMlu+dgStcBn70jvlEv5pOWXb2OqrN9nJtb29n8jrB2K2nlbcYoPPiQ3yXk+Wpom82LoT5W\";\n        sout << \"F9NeNwwAB4EDWtB96OU6noW8NHJj7NiADQJGvQpk/3JzIzeBJQCxULYJMRJdBKf61+24F791reHa\";\n        sout << \"qrH+rLUrrv05dIPDTUvGW5LQLTTFFa59OmMIu7WJE7Ln6gMIwDw3FXnGFzaWnHlHL/9jJ0zM1FQL\";\n        sout << \"kfK4wTd++GbeI0gsnXWFK0N0kV/FiHm++J4udWwIXZxH7qZCHtwlT/5oGDVujtAtOPag+txUrjVc\";\n        sout << \"G4iLeiPbV/2Vfc2D1oV5/yyXDDii9qrLH6SOOfgvdiJZr7X3uMUIDGO75x5wBDSxr9t3I2CrX2dM\";\n        sout << \"M6kD7U1+bf5QVRbkh3Us4NAhFVnLNEcrm0x9Yx0wRmxPKgJeGGbWi7/BHi8ShIFllizuxuMyfypC\";\n        sout << \"hhzSlxxbYAQwtcC3cHEnyYZAO7HC6hyke+HQJfxAmKyfguGtzEzsiG18XJVruwz7IoOpZS/O71zy\";\n        sout << \"Nv+T8trOhy59ZUAgIsCAAQJYEBWl/T/qFtkE+tITbVRKtHjbxHSeN12OnHFRoKguJYaakTo4qLs0\";\n        sout << \"fr4E4nZUMfjdF7oI7YutegY9TkiJ9ujLJw4pfY1XRtPrRukEl8orypWXq0gErnYO/RVtK3XImrDp\";\n        sout << \"LY5sXH5pNzkqVH9VCl6lh9sg2HWjNwv9bDcDlIhvTL19Mx9yUtx/iQtG/OKy22tW6ByahPNnMNtA\";\n        sout << \"tBVB38RLf6eJr68mhn10Qg68cXxVL7/zEIZd9rUaCo8xCzeFblDNErKfG02JJ6fbQ6M6ZdNez7Q0\";\n        sout << \"x2IYbz2DEk0wHmR7OtA/oTFMvJlyMt+dDWTEpHnvqkbe+veENpxn2WWy3UsumkvhhtzzmLxyD6Sh\";\n        sout << \"mMbMPwgUjvMG51JfRrgMfJzT49z0sebSfzvid/9QV4lNkR7s9nfUJEwAued4S4klRy3LiFdQhjQR\";\n        sout << \"FOZZNqUge8vxVOzVCfS+xsjvnGrd7azt7LJg6wPXFgPfeE2bRlx+8AoRFG7SUpudmm/bkNw+uNgS\";\n        sout << \"YRdaH8p16RyNoMlSfi/7BNDhtKwrl202pVuCqhFey0mPYehYee2HhLZs6ph+HKMYy8lZ/ac1Q17d\";\n        sout << \"1tcI4WH0Hz0B/3GWl8xWfoq2OO40EIjuCPNhk70MpiytWXggJrKoKPu52GOqTU8+jZ6F+u6U2muZ\";\n        sout << \"6QZLYXDwPaNz/lq5U4ACw767DkhUHd1/h0g6r/RwtLKxdrzYldQto99TAMmHc+z9aIciTv7kl/Gs\";\n        sout << \"WA58nI8aODhwjIkOGaExdlR1k/3JR2tAAj5vRzYlJeakhAA82pA+8xMPZr3HRlQx4DlEjH1spAA=\";\n\n        // Put the data into the istream sin\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decode the base64 text into its compressed binary form\n        base64_coder.decode(sin,sout);\n        sin.clear();\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decompress the data into its original form\n        compressor.decompress(sin,sout);\n\n        // Return the decoded and decompressed data\n        return sout.str();\n    }\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/fhog.cpp",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/image_transforms.h>\n#include <vector>\n#include <sstream>\n#include <dlib/compress_stream.h>\n#include <dlib/base64.h>\n#include <dlib/image_io.h>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.fhog\");\n\n\n    class fhog_tester : public tester\n    {\n    public:\n        fhog_tester (\n        ) :\n            tester (\n                \"test_fhog\",       // the command line argument name for this test\n                \"Run tests on the fhog functions.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n        template <typename image_type>\n        void test_fhog_interlaced(\n            const image_type& img,\n            const int sbin,\n            const array2d<matrix<float,31,1> >& ref_hog\n        )\n        {\n            array2d<matrix<float,31,1> > hog;\n            extract_fhog_features(img, hog, sbin);\n\n            DLIB_TEST(hog.nr() == ref_hog.nr());\n            DLIB_TEST(hog.nc() == ref_hog.nc());\n            for (long r = 0; r < hog.nr(); ++r)\n            {\n                for (long c = 0; c < hog.nc(); ++c)\n                {\n                    DLIB_TEST_MSG(max(abs(hog[r][c] - ref_hog[r][c])) < 1e-6, max(abs(hog[r][c] - ref_hog[r][c])));\n                }\n            }\n        }\n\n        template <typename image_type>\n        void test_fhog_planar(\n            const image_type& img,\n            const int sbin,\n            const array2d<matrix<float,31,1> >& ref_hog\n        )\n        {\n            dlib::array<array2d<float> > hog;\n            extract_fhog_features(img, hog, sbin);\n            DLIB_TEST(hog.size() == 31);\n            DLIB_TEST_MSG(hog[0].nr() == max(static_cast<int>(img.nr()/(double)sbin+0.5)-2,0),\n                hog[0].nr() << \"   \" << max(static_cast<int>(img.nr()/(double)sbin+0.5)-2,0));\n            DLIB_TEST(hog[0].nc() == max(static_cast<int>(img.nc()/(double)sbin+0.5)-2,0));\n\n            DLIB_TEST(hog.size() == 31);\n            for (long o = 0; o < (long)hog.size(); ++o)\n            {\n                DLIB_TEST(hog[o].nr() == ref_hog.nr());\n                DLIB_TEST(hog[o].nc() == ref_hog.nc());\n                for (long r = 0; r < hog[o].nr(); ++r)\n                {\n                    for (long c = 0; c < hog[o].nc(); ++c)\n                    {\n                        DLIB_TEST_MSG(std::abs(hog[o][r][c] - ref_hog[r][c](o)) < 1e-6, std::abs(hog[o][r][c] - ref_hog[r][c](o)));\n                    }\n                }\n            }\n        }\n\n        void test_on_small()\n        {\n            print_spinner();\n            array2d<unsigned char> img;\n            dlib::array<array2d<float> > hog;\n\n            // do this just to make sure it doesn't crash on small images\n            for (int i = 0; i < 10; ++i)\n            {\n                img.set_size(i,i);\n                assign_all_pixels(img, i);\n                extract_fhog_features(img, hog);\n\n                DLIB_TEST(hog.size() == 31);\n                DLIB_TEST(hog[0].nr() == max(static_cast<int>(img.nr()/8.0+0.5)-2,0));\n                DLIB_TEST(hog[0].nc() == max(static_cast<int>(img.nc()/8.0+0.5)-2,0));\n            }\n            for (int i = 1; i < 10; ++i)\n            {\n                img.set_size(i,i+1);\n                assign_all_pixels(img, i);\n                extract_fhog_features(img, hog);\n                DLIB_TEST(hog.size() == 31);\n                DLIB_TEST(hog[0].nr() == max(static_cast<int>(img.nr()/8.0+0.5)-2,0));\n                DLIB_TEST(hog[0].nc() == max(static_cast<int>(img.nc()/8.0+0.5)-2,0));\n            }\n            for (int i = 1; i < 10; ++i)\n            {\n                img.set_size(i+1,i);\n                assign_all_pixels(img, i);\n                extract_fhog_features(img, hog);\n                DLIB_TEST(hog.size() == 31);\n                DLIB_TEST(hog[0].nr() == max(static_cast<int>(img.nr()/8.0+0.5)-2,0));\n                DLIB_TEST(hog[0].nc() == max(static_cast<int>(img.nc()/8.0+0.5)-2,0));\n            }\n        }\n\n        void test_point_transforms()\n        {\n            dlib::rand rnd;\n            for (int iter = 0; iter < 100; ++iter)\n            {\n                for (int cell_size = 1; cell_size < 10; ++cell_size)\n                {\n                    print_spinner();\n                    for (long i = -10; i <= 10; ++i)\n                    {\n                        for (long j = -10; j <= 10; ++j)\n                        {\n                            for (long k = -10; k <= 10; ++k)\n                            {\n                                for (long l = -10; l <= 10; ++l)\n                                {\n                                    rectangle rect(point(i,j), point(k,l));\n                                    const int rows = rnd.get_random_32bit_number()%11+1;\n                                    const int cols = rnd.get_random_32bit_number()%11+1;\n                                    DLIB_TEST_MSG(rect == image_to_fhog(fhog_to_image(rect,cell_size,rows,cols),cell_size,rows,cols),\n                                        \" rows: \"<< rows << \n                                        \" cols: \"<< cols << \n                                        \" cell_size: \"<< cell_size  <<\n                                        \" rect: \"<< rect <<\n                                        \" irect: \"<<fhog_to_image(rect,cell_size,rows,cols) <<\n                                        \" frect: \"<< image_to_fhog(fhog_to_image(rect,cell_size,rows,cols),cell_size,rows,cols)\n                                        );\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n\n        void perform_test (\n        )\n        {\n            test_point_transforms();\n            test_on_small();\n\n            print_spinner();\n            // load the testing data\n            array2d<rgb_pixel> img;\n            array2d<unsigned char> gimg;\n            dlog << LINFO << \"get_decoded_string_face_dng()\";\n            istringstream sin(get_decoded_string_face_dng());\n            load_dng(img, sin);\n            assign_image(gimg, img);\n            dlog << LINFO << \"get_decoded_string_fhog_feats()\";\n            sin.str(get_decoded_string_fhog_feats());\n            int sbin1, sbin2, gsbin1;\n            array2d<matrix<float,31,1> > vhog1, vhog2, gvhog1;\n            deserialize(sbin1, sin);\n            deserialize(vhog1, sin);\n            deserialize(sbin2, sin);\n            deserialize(vhog2, sin);\n            dlog << LINFO << \"get_decoded_string_fhog_grayscale()\";\n            sin.str(get_decoded_string_fhog_grayscale());\n            deserialize(gsbin1, sin);\n            deserialize(gvhog1, sin);\n\n            /*\n            // code used to generate the saved feature data.\n            ofstream fout1(\"feats1.dat\", ios::binary);\n            extract_fhog_features(img, vhog1, sbin1);\n            extract_fhog_features(img, vhog2, sbin2);\n            serialize(sbin1,fout1);\n            serialize(vhog1,fout1);\n            serialize(sbin2,fout1);\n            serialize(vhog2,fout1);\n            ofstream fout2(\"feats2.dat\", ios::binary);\n            extract_fhog_features(gimg, gvhog1, gsbin1);\n            serialize(gsbin1,fout2);\n            serialize(gvhog1,fout2);\n            */\n\n            // make sure the feature extractor always outputs the same answer\n            dlog << LINFO << \"1\";\n            test_fhog_planar(img, sbin1, vhog1);\n            dlog << LINFO << \"2\";\n            test_fhog_planar(img, sbin2, vhog2);\n            dlog << LINFO << \"3\";\n            test_fhog_planar(gimg, gsbin1, gvhog1);\n            dlog << LINFO << \"4\";\n            test_fhog_interlaced(img, sbin1, vhog1);\n            dlog << LINFO << \"5\";\n            test_fhog_interlaced(img, sbin2, vhog2);\n            dlog << LINFO << \"6\";\n            test_fhog_interlaced(gimg, gsbin1, gvhog1);\n\n        }\n\n        // This function returns the contents of the file 'face.dng'\n        const std::string get_decoded_string_face_dng()\n        {\n            dlib::base64 base64_coder;\n            dlib::compress_stream::kernel_1ea compressor;\n            std::ostringstream sout;\n            std::istringstream sin;\n\n            // The base64 encoded data from the file 'face.dng' we want to decode and return.\n            sout << \"RFYXmMpdiStV6dVZSJkJX8t7GVavYwTD+Fn11ZjivhnFQyvVJ5t39yJYrK6Qh6K58ovzMlgPiBLV\";\n            sout << \"nd+ZR0JYVCVvwRapp+dznB9SG9dJbBrsYH68k04uOs9ehP8aK4/EXvcZG6s+rL0rnhVAf7SxL7PT\";\n            sout << \"r/11jIuASMa1daKZjAm5Sc1icGXG2FJjO6CxM8mOzWJ1ze69MPD1bz/QYAWtMUqUUIAM0qOPHY0x\";\n            sout << \"T8tdU+Vo6S6E+8dJpV6a6iDdocbp91meDQcT0/kadhC2tmn0eZoNulTn5MtmsmEeuPI2lLLcRJ9P\";\n            sout << \"yt3c/OJIzI8FaDzYG6aWJ/yBQx/DJF0avAlh7V1UmbD8O/dMoF9nUFDwnhGyS6DYfTXxCYgVgoj+\";\n            sout << \"Ik5RLHY0U/DhNTciFaLX41/MyIt0xcGtxhoVcvwkfIigKnYQsYfNpRdUWseRlZ1KYaR4Oc5B2tie\";\n            sout << \"kH3e5AhrY/HtffCah0sf6MBWJEi7CH9AnVLDQefL8Ph+qCWJGf7cGnM/oAaHQCzHIHVi+mK6EBnN\";\n            sout << \"1NDrzbdXmikwYneB3LUZxCLKZmxsFduB2HgiS0A+tTK6IYc+jqCHqz8N6Gw0sSjAK7rrPDTvxhSN\";\n            sout << \"lX3f6E2IDfVmyvk0l3RhuA1PNEh/nlKR+YxcXHyYW4wGf+UfWScAzKGxrHLxLC7LQycCEaCMkU92\";\n            sout << \"SQV5NSSlwKYKACabK6UJ3gGIpvuQK2Aw7VWmC0iLczqgWsX0GKJR0FAcVL9Ed3nV0Wd0s5BkjBsr\";\n            sout << \"RbUKzw11Qu0toj6BNfwXo/5cY2dtjj93a+CBfNrSEuFyJzZU7cn890c9m+q8C41p+wQdf4pFpjcV\";\n            sout << \"8Kz40Fyt8KtxItWSsACIwmUO9h7DGnyGskWBYrxgDV2VVlvuPAnnSCFPkbdsa/pfnohUq0C5a/ii\";\n            sout << \"BjASduPdaBHpjZ64f+TIaXNAGdrFiN61W6e3fOx4fLFlzPQ8szyWuuDh2hIz1FMflbmu6UOEkQji\";\n            sout << \"w+bwDDJ5OUFmY/00+3B0XAFmj7Pt8OQ70lAVLcX5fC553diQJzrrlJ5p9/8+ILln+oleUVJhtp2q\";\n            sout << \"VCZ9XknXLjkQik30M7orOj+tZt7HDgC5sz/wHU5arOL3nIX5IuIHBJRlB8dERZgoPNQlB090rItP\";\n            sout << \"MuT+Hyr/eR7Kcux7Fy2CoMxcIfWEXvxQoolLKC66q4+SFirdMRjXuwbRXrUBbenmBfMMNDAOkQKO\";\n            sout << \"Bi7d8t1wI9ulNbACtqLbmPjW6iabc0yM4g69cZjRx/JYhV5AaykROJxCP6ZKTw+3ddAht8xoyHLN\";\n            sout << \"40rB40fwEXIvv7qxCdCa3h6l6IRV26fOLdcew1G0qjPORcKK1TPhzmneYvhPZ1m0r6KxWNEnYcFq\";\n            sout << \"WhDGNxj/05eBy2qIiIU/KUPhxKyipF0ekgPoCsWT3S8edYjoaIl5cI0TNpNEwKGRLQeOLBDt+MEh\";\n            sout << \"z1yKm0i2jrtxDBpYf5FW/Fln/XJAK6z9yqSDDTDwQleabvRHDH9bc54bLc0TL9g7/eIj9xcshhaB\";\n            sout << \"zbi7baB/yUnI1+0N6CZ45gV3BcD5n2QLiHME8wELveiMxps6MTf3SdKSRZJcnoVfN4AGYqQV42ec\";\n            sout << \"dFB9y8FLZVL3/8rmB+XEu6YoiGcNK6iATLYQfF0GFRrur0Q6bQgdvXv1uZKtNfYfznsAAu/KBdxX\";\n            sout << \"8qskZBMGA3LxJC3j41VW6Fviy+XUxxcmG9ykbf0COJWDul6ZQ7iRI7rn9EpFIYBM1lKzjdC0UFTW\";\n            sout << \"yDWEE+mf9y+RZdlxHdROFj93FNwzSdzNr1yjqHvZHBZYiuArHEuDPXdxqVRePcID4EHzmpDgWFwR\";\n            sout << \"o5qqDxU8e9UYfS8SG545SPZv69SJVJKld5fQLZ4FbcCjv7wTwrOKTROvurKkxopKt1n69BdDA14H\";\n            sout << \"mViSyK22xK/F7/ydjLoqx6aJ8xyNpoUk6XIeJ5Ei2Lhk84VQk9dxzULVy3KsfRUrZCTTi4YiXkHJ\";\n            sout << \"SmQx4NQKqHR2IOgnJBZuNG9J3Fzv3NKhQpmKL0ZbYLXWdKP9FHWUR0x7y8f74Su+GrplBsjh9NIm\";\n            sout << \"QdaKLa3NvJB1TML1/GNcdJVZUuSaX0cQn4bbumvtcENVbC9u99fGnsaS5FOu4AHd3338zLUMy34C\";\n            sout << \"OpJjU1c/IElgyKmaGYlAolgqGU3lixhxPGBhUlXGfHmST2ZWq/l6NxD//HQXRaRUiQGQzWCvhzOO\";\n            sout << \"ywUlVzl9eJ5e5cdLWvffsPRzBgRMrdHJG4TbSuLAREsSD9QEGab3a6y+qa8T3Si/1Ut+Sn2QvPh2\";\n            sout << \"meqqk9g0fRWtrWxcnbUDU6zMlk36L/o/y5inrHdGY+ixIewhI0n4/Nl3wD96SRITcEVSx6K/BVot\";\n            sout << \"+qIP78I6uk+miUF6MW4AnFyCe1wRNyhT48638KIphSQSKdu7TaBndi2DNgFFvWrm6/cPOqkmCzGC\";\n            sout << \"O22uwHyuY9XhafswKLH02+VD24PIS/Fw7JMP+KzvfCHQd4XxxdsISe0/cjwg26ZfGcnULLY2E+dX\";\n            sout << \"LjdgCxNyFBzFTQ4gB4QExF0dHu+SPoo5T3VAojJbYZqIelFY+u2yQDuS4HCUISPkwuLHXHbcBuwg\";\n            sout << \"5TeuFhyBrlwxHQC/OPACmQJREImiqpzrjmh5QipeEgYHK3Zc72tYSeY7eTzS4jj0eRQ8KiNIGSi2\";\n            sout << \"2LjzAfN2Zm7HGbiBtKZVen96E8HLcrd3nSWnizfaLLWTWB3zu9zz9/vFdaa3TlO6BidYsKomTCgB\";\n            sout << \"wy8yMeykE2qbxgrpRqEqmOkrOI9XtTTJIycfAlwBwoFwuqvGIPtFrYmC/MwRMCphg7acSRcjZg81\";\n            sout << \"5IEqpoq9ca7Zc3s4foteVMCJT1A+qmNAJ/j7IoyeX7GnlM3jsqpYt9BmKfbw5Dr2JB9vzroPV++x\";\n            sout << \"UN2VXRPbahjbIvrTULpeBdmlHU0i3Ya8H/C9RY6c2DhImZ1gDjgn0jQ9GC+CsZpiM2xBvfZZGOEu\";\n            sout << \"c8N8pdo2owD8s5q2G5ZCGNdME/AG+iIlb0P00AX+XR8FYhxKb3y50i1giM41mnkKM/WMGFAnpiuo\";\n            sout << \"YordYSi5plePBnxBfd1Iq46PpsD/n/uUTZMHs6TGp1hM6QriyEhOO261HNHoU+n8m1Omz2cfRJyx\";\n            sout << \"AuFLwHSEqvGCSmslmoDpSg2qOaIWK1LWlN+1sYJj18iL4GRM0A5QzXaS0RThqEgmPjeBOkFBjfSO\";\n            sout << \"hB7mb3sDbY49qbN6P48bGV+yF6y34gYAiVkm2NksHzN4ovwg4O6WMQZwEhNk+4gTIzG69jIm6Hbn\";\n            sout << \"2l48A3CYmn8gcjZw39nrlSxpMf7KPkRsdvGmc5Qx9RjP71zH/KJ2TXP0xxzsaGgmqzXfey5l0Hih\";\n            sout << \"XZtfZw8Y28fHBfm3bnIncS4w9S91no+RYMv0aqc9ty7l+Pa28ELwSgQj9eP4u/i5iq/GPmmSxiTd\";\n            sout << \"Si/eeyK1RFJEP4Tv4f3PkV9Js+azu8BbtU+BLO1FBlVg3CzXH5Pc5FMujLdmlqa495hTmi8YW6Et\";\n            sout << \"Fx8dkC80mYFGpVjS+B6pcQLbLBL9gmKzJf4L94/gXZ25BEDob66+XOaRnJ4RkSAN2g6gFJB9lJDh\";\n            sout << \"rLerp3kP/ubPCvcFywuGx3UjJuwFNHE9m62uiaXFU4m04Kc4n7ccHc6hYUkhkY53v2Qb5SDx2qCf\";\n            sout << \"Yg+PWVXujfYrqxRHSwqtV3yX5kMrtYsYpygb7crweOt58BWUa3duyo23UGJHaCwhGwXat6PEC5DQ\";\n            sout << \"2Oe3LVJmc8eYtD97mHKFPhptBl5u2Bztb3zis/oNj1NdMjnDrNuscEAnrpk1CetvHKLglK63Zo/D\";\n            sout << \"rf6SJcmGR2h9g6wAeV7UdsfD6AvteiPj5sl4UuY9x55pP3CTTYklBO1MaDd/XO3A66uMh95RZVGr\";\n            sout << \"VWDd/uKL+rIuI+vKjz8rt80nv3SyUrY9fbftPdK4pBaVnIt73yZrrqv4Zr28H8XpFFQAV9BPlC9o\";\n            sout << \"a8G+AFx/+W2cSfo9r1Uw7npVvRTe6TtIiKagYUmWpx5BfX0VH/VAW0FUh9oiVfx5rm9eaxfSQnD6\";\n            sout << \"7qBINPxsKq+ZDSXni7qfC3J043Le/uL+3XUqsccvEMoU65akKC3lmw1txoUukv92oxyqPX0eOGsB\";\n            sout << \"AU4JdXCldqjU9K3QhyCvv80ZWotGfUr0TlN1LVZqcF2iq3pX1UDOBsPwz9v0QNg8Bmlqy0Vs+MUj\";\n            sout << \"nMCwU9xErzkXLsuVaG+Llk7mmAl7C34BF9O9qSl2kCmbQYoQ87zS7gm/pK7aKGNsICHrar6vlsKo\";\n            sout << \"BJA++/8XKL3nseNZHzq7hKHnOTzagP52MRf+TPXbTVjQPKnCKVAZJcsOlkmuZc7iDnLn4muHDRjg\";\n            sout << \"y09EYcYlFWhLAgsWmatQBsT028ytgMNrQGHDJdjuNkxYfPo+/91ijaaBiey+DgrUVn0fm20k6/Nm\";\n            sout << \"colrwPwHrK3uOdgBn2ysDeUXU8NLMtR94fIL7etQ9tlUuufwrxEL9zYUM8tpks8HDR51xgTwUOVo\";\n            sout << \"DyGFzOdYQRzwi+kkEPEwkpNQbB258d5w9G5eR00P8B/aSjm+w4FU0MsXM0GgPxnQ+gTpS1cezLTn\";\n            sout << \"eelvJYiq/IInLLxoCXycZFPt3WFQqOBpcs6TV/QucjI/5xMZtP3JHUFv16UKPTFI7p9DF+8Ch5HN\";\n            sout << \"gWXCnRSPdYR4ZRid+Xfzi0TvQsXV6u6PaE+H5MpyNMBWhCwxb6FdiLUW0BswGNpHBaFxjB26Qbmv\";\n            sout << \"OW+s0OuXDvKigjQRkeaYawjRAIAN/+CEYR3oUad2HyJ5Ybr/lRlybQuuIqBhuvpkYzszS7BqrxOh\";\n            sout << \"FJYaivT6r3HbHjaJ+Yz/zNW4KsL80zYkPMP7QgcbbSfE2mAavr+ciXdZBqMMUR50sDNLxep9+hoa\";\n            sout << \"ys9wl75QMdx1jn1qn7f04JMSjCyZ7M4bWSyTW7VEr+NBBLmiMzhI6Ufh1iCUpvrIDSQwSDUL88wt\";\n            sout << \"oSiouRbqizt36TldsvFV6afdLgjRrp2cb4vOQBiltwnY06JraGZnsrb4UCfHZhxd8sq/invK9tUd\";\n            sout << \"D3z8hYyLGbS+3LBCK85r74IYvCuhoUp+KobIZPhvWuvdjmmq3SAxIKHNdLC5hnLVMhGJUrckc18H\";\n            sout << \"9zK53uB3QXX6zGKK62Jph4aOdJoDQaPL0K/yHgn9UayEhH/N1uj3Ao39c05puaxzcSotfBeS5+6K\";\n            sout << \"WYyOOMtt5ikKz79qfj6dVWge22fxXUc6yHYfdga0IbYWRocIx+DuyUZnrRQHihNKgYpvF2vhCX/o\";\n            sout << \"R097oHI4ojZFAX/ZWJ7igJvX7ChiwTjK8KDk+vJ4SUd3IHXaiLkkkd9p6tCuc9Lw5jqWiGrrQKuI\";\n            sout << \"7AmGsPFU2EsfOzmwdZctDGXq2/IutVDmwGiucpBKsRN4y12Q1FWKpceVj2q761LfDx2qJoeZKTPZ\";\n            sout << \"jHPdXnGKcWy+DM6GoH9e5jP4CW+HfdHe474bHfLDbP4NE1oF1vdh4NcLy6woi47hg3FS60z+wePD\";\n            sout << \"bWq29WsSwU5oXq58nMxKOBiMcbGFrkOme/Z59Ybi7Cw1+U3nGE3evCFyVMC6g4f/jvCyWF5I3Nm3\";\n            sout << \"OqmkO6fmZ4ahql6C+RwfdRM8A3FllNPgO5riBNX6RA5xKj+JS+OZUrSSN+tUqcgN18IlmLBExEUt\";\n            sout << \"rdG06PKy+WM8Cju3gtbOFX43H4URr9CQcDxWbN6NoqgF8k5a/4+xf7DilfGJg0E2Vu8GG7tmFSU/\";\n            sout << \"LS6gtfLOFyEnQkTzqK8OhVPVLT62cEfCZN9ZY3iKQyZ+VLQhxwarUAgqeNAMXM40NBJqnUIaaTKa\";\n            sout << \"ryhHefUHazhfVgx2+GikVF9wvMobCvvP1qYONlL9EH+ufuLEw1V35BYIIClbrC2uMrnF0H3QbuJQ\";\n            sout << \"ma69tq8TDPkyDLiaczKuAxUzJoj9reJOYGYTxzP7AQKmmEmEZ2cX6+2klWcRXv23XXN8Ypjjnj+d\";\n            sout << \"fTdzxV4kzcHwOYMsI92tadahezCm9uOR0d8p9IH61QQSlUlJw8tX0TpGkNhZpv23STjQhb+uxzAX\";\n            sout << \"1vYdYbPOenr5vCyhnpp33QezQj9cLhSv1WweplUmZjHcJTkPBdflRA9AuqxDVVnbbofXd4EJDC6k\";\n            sout << \"u7xBoD7EKC+kCEkx7ygj8Gv5GVKbgy1js4gLuYwhJ5aqdNpqm881kkxntfRMluVcdH3IGAUzWR5w\";\n            sout << \"26eq7Je4Ttr1cC/xy452i3pJocbhCqrNUG85RyB5FXHAv6GMvm0rUIa6IyC/kfis+sQsdYkQ8GMQ\";\n            sout << \"wL2s8fdDT6l38N9JbRNwdRv8Xa9QAjwcGNbP2v7tAzM5MyhHW7FImYVAaNAaLbzE8v95zeGpT8Cl\";\n            sout << \"CWronhkcJRab8AKP2UcqAD+mW1hVEAqyDe7oWoZziKa2G5aW2vs/WG0z+NqL1zGvUekDcmJ5L4SK\";\n            sout << \"XgdQgxMb/1k48YqYQZFtQrIqoBbYn4qPeB7i378T5TLcCgB6SldsFdlNzs/czN0doroozh3W+sli\";\n            sout << \"d15Qnv5WMjOinjh0Ybt13wcUzeT2p0ovTtYLoiYAhDeAibydJETLdcozfpXFIJNUSoH6TcLge3tr\";\n            sout << \"0uVP92B1O+n0MibJvLsLUKQ9ueIiHgZb6bUSUixAg89QCDRLCZgkg24DLZ4MMTg7IRfFm2eR2lmJ\";\n            sout << \"Erpe62rf2+JE5JTqU88yn6kLK3bQ9vmaGRZ1NUxibTcdpo4hH91qIldLT+jrdmhrawRjYcRduYGO\";\n            sout << \"WXgjTbgKRTxnqrXwRD4Hl/B1EV6ggYC+jn3LQHaT6bYd1hORmtuLKy9duSHVCNBAZvnto27l+h6g\";\n            sout << \"VbUF8eZasmk+q8Fn83bx7C3eKoHjr6acEUyQxtWVCbmeaMd7h48Mt3Z3r8TyX3DkwQmpClciwpyC\";\n            sout << \"E+pbYEWMZXGOuXPmcHTM/Iky8jNSWyw2lLVQQUzPOJ0v0dtNipYRZqBQCDtSE0JuA3Jo8l00uox2\";\n            sout << \"bH11ErfGplsGZJejPGL8ba90e6xeLwH5oe/GduQ0/Xk4+faqBhy/7TFeexQcFDRCCTrC8+jATm82\";\n            sout << \"vHo+NWJjjDlEI4+F2FOhpRg7MtrrzNP/e+cD++wYeGjkRplbxd5PeyALnjZJ6kghJqFLL3NJ1E4Q\";\n            sout << \"gKmRErg1xWWQzyuDbbXPr5dwwRyZU0gkG0WTwyUy2dFV4KRyn2IbMH6STm+0af96YF0joZzkUroH\";\n            sout << \"ztMN8dWtmQESq6EYQfGlhQzNoBKLXjN3LK4TMWBE+1N5ilXkgv3cnN74RZHdLhEXRJnF29x/DmVQ\";\n            sout << \"qZQ4s31Vk0kqKdQ8tW0rs82+dMMtFv8+P2rYA1GZJQV4P5/TBU36BVetlN+swvULk4XpoqhTTMbx\";\n            sout << \"Oj9tONiyIiJitC3YiCU+G5uL0YETB8nSKrtHRiBD8k7nYj4fbUtSbu9+lKRsVK7kU41mKdBImON1\";\n            sout << \"6Qk0XqAx2DEK4w59khYMRRxOD4u2zZWDVp+Nl7Sd7ihas/vQx5yLXHKmIpjCK3SQYjJz09txIErQ\";\n            sout << \"0wJJZoSxH8efhGsTPuVrbQpGcHLD7bIkWf5kjR9MmOBCmUGgeeGOyi45x0k6Cx+z9oaaTXYcvRtY\";\n            sout << \"M+R8tW5gCLaOPjfbq4QjP6yfYogoaTiSEKOPcMgiOQKrXNiv2ahVBT/lvkm6Q8+IdesGWJtD6xqo\";\n            sout << \"+CC486Du6CFDzAHcnLMk5c3CqDfFGl5Yf68bV4aGm28BaM4vikeKRhm2tULeM7PipfQiI9R9Gy/L\";\n            sout << \"1yZB26qciwCalP4CA2NVjiJut7FZgTF2bO/g0qfvyKsAxMetRTmqALBJi8QvKqAE4i/8gRlTuwgV\";\n            sout << \"x6EGsUPCIcQmD8aJkZgy8+erSAY7MLcnUXu90AC37BLyaOt0tzJKfVRb6cP8wfZHqJneoGSNAA==\";\n\n            // Put the data into the istream sin\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decode the base64 text into its compressed binary form\n            base64_coder.decode(sin,sout);\n            sin.clear();\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decompress the data into its original form\n            compressor.decompress(sin,sout);\n\n            // Return the decoded and decompressed data\n            return sout.str();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        // This function returns the contents of the file 'feats1.dat'\n        const std::string get_decoded_string_fhog_feats()\n        {\n            dlib::base64 base64_coder;\n            dlib::compress_stream::kernel_1ea compressor;\n            std::ostringstream sout;\n            std::istringstream sin;\n\n            // The base64 encoded data from the file 'fhog.feats' we want to decode and return.\n            sout << \"AXAWQhjCEZzu/U+RFPgnRfCFsyRzQjyOA8TMshjEOL3FZhUZD4amYHfLuNN8NZrJyy2CdiXOWrFH\";\n            sout << \"dTTKsMQkSz9f2VGKE6GCsTcZ+fpbk+d7fBnS2DEUkw5ttiSxj/VsrigkeV0MEUR//EP3/w1uvJad\";\n            sout << \"96PFVeqVf6tEmcuuUbYzViC13lfnps7ftXmic5CwLZ97llqMYpLKgfEIXZpelB2al6PyVAg2FOfe\";\n            sout << \"2L/SzviQ001tYYgx+L2v057L/lJdx2+uOQ7tovbsY0zEBEXTr14ZQW5Wd2lWnj+CrBNQ/4wMQZIV\";\n            sout << \"86X5JV6nl/fxrM3eF5+U6U5cZoZFnn9vRONE0kf6/g6W4Z8qQNL2mJ/M8oKoLGtuaaEjymk0ENRM\";\n            sout << \"0M9GMLrO/qfcH/DHUb/HaK851L5sPuf150ecpIbPmQpxTOpI5XwmvwDAP9BCmLazQWQV85wJJFom\";\n            sout << \"LjT9dNi7eRsV0mNCZDwO9iwUTv6KfAR3Vn4t30X3n3+x+Yhnq5PU/4vu7GJpje25uxICm6+PC9bz\";\n            sout << \"QJC3wiw7jrlF8eRb2kZywIJHWtrN39R1tddENrGZkU8LlPTDcqTqfuwC1HXSt0GKlDRBW42DkSxm\";\n            sout << \"E7yKype2G4bgbSnuf/LKftuWlNXzMP3cDFdChtKJNOws6btgvS014C4UGWe3uNVp9SNAmAFyh+UE\";\n            sout << \"rRTl1w3RNom0yvlee9IP1sB8mOEZn5Rrzo2lCyTm6w49PlLfnS293FxvnpRSSlvqUt1lhzzEh7Wd\";\n            sout << \"YjK90oPWGqvNn/bP1vQW35KlVrc+JT9VlewcZRYJAq2OigVxa9Ao8Gs+fFyh8/Aym6Y3Z6+Y7Xna\";\n            sout << \"fsmYdGaUtfniJemtzHatTuhbuo979fqkIDQ6bhHlMN35IyzK26QKzGrMCaHenZEKck9qR8NTkhc0\";\n            sout << \"urO85952cv4aI/cJ5tz8S6f1v71F1gIz76zL0UNlkULQf3tqEleTqVF5Q+YKAtov0Tig9xiSuCZN\";\n            sout << \"btjVVpg06zlRqmnRqWpZU4W7uu19MKe6BGoZ08l5K/3UNgucyuUBTGtTGt35QaML+N4WLcTYj90J\";\n            sout << \"41Tlt+OD4C8nZ1ID982h7X+YxmnSdMNnaeM2Lc/h8twOwg11vHf6OSo6st4yjK201O8lH0Lemips\";\n            sout << \"LsO2qhAsF4AcWVG7HKUNh5jMr7TTQ/SPP2qiJ6eglJYLFAlwtCSXRSJFuK93Y3eUtzDpVDh44tDJ\";\n            sout << \"y+Bsa9oWJrBeBouo9DHG20N+wJB3rOVDprmq1ZGfhkSzqmVzPk6motDY/jkPGZ2E8/NIWpXpyU8z\";\n            sout << \"cUbc8Er2cAVshJ9uGCg0tUh6lGWsrWucpgCS5lI44PJkbSuyFZMbIZrgxrVmkgOa70pmmuHebs+c\";\n            sout << \"GW0FheFD0IHXVxaJtTuPeDuMML/YrAqdyzibareHbg2Hn4aS+qhRUcMyemOzrvjhGF23oSXbJqaO\";\n            sout << \"sJw/DWkt33eFNqWxofXw2pWMMuF8akESryBDyGEfk9nofHoJhTciXGNkuxIiSZtVYsVnKNU9C4ei\";\n            sout << \"31HWlbHjMtG9RD3zqkIXwerCkhElWfxG2M9ja1S7M4+0VrS9nT2ngc/n/KZDpinuB3GIOnnaqiqQ\";\n            sout << \"8ASsOEl9/Ni9Lflomns/CdxWns3OlcU8KVhWHYz5hqV+MI6SQLlS9j39WFKd1IPaer4y1fd99x44\";\n            sout << \"jkyP4ekjoVVfVxpJlb4favfwI1AnFD2K2TaUeULaALTuBwNT5DnRcLNnwqD+6r33rEv94Nk+2+bB\";\n            sout << \"0QPLkojfPlDJocwcGon+z2EHQO4t+RPAafjQb42dNCymI/bIdgwL64vldhl9KfZtXhE4llYhYuLf\";\n            sout << \"xliN92ELGSt8o5IdAsoOoCPdqQh5NujdDs3p8kVSETq1HLilGRnuxyVwrTqJEUC4G5ntPfqXr1Fp\";\n            sout << \"revo1FOr4SRa8+c2GgA7K8/fvXwN59GONFMKxt+sI/xko8hbOQwOu1VEQ2Ak1aS0cc5MoUrhUFhF\";\n            sout << \"gCTqGd+9bWwg95ELl944dD7MIauKl1wHy5iI7u7EDlhvlGhmtU+6lzCmBiDbbPnoki+yZLc0V0UL\";\n            sout << \"jvaYU1WlKZhjWcA7fHkUyGchIe+KJE8DcW+huCO5iz6gPWwy3ZURQEW+wYPD4Sp6szOTOPsNKcN/\";\n            sout << \"j9PxKGDbNO6/Rou+TEfznVuu4ltLKZSDfYMK9g37+XjMLHTU5jCoPm9KJDjFvCTRAcmRoQfwuXyY\";\n            sout << \"o7w4QwcevrjFdb3/IYMrygb57S0iMkFJPUUiCF/bOfQA8tpLePYYtg2ILGGuH2UFwOLszxguBLLD\";\n            sout << \"ziSVWU+xmCi46kKVuNE9gyeT2OCPtn/U+qEu2B89UkbynI5v/FVpJhJf6MjLc1jfDrEi5NflvvCQ\";\n            sout << \"l2QLJGjtfDRJgcXFuuNzWBMiVglMOhT4n3bta7tV2KraK7Yc3Pc0GIZv/zVHf3BqeDEikXdw73tt\";\n            sout << \"aomM2RQstiy71sMmGkmCvUnEbgrY8O60g5nCSmMZIFbbLit9dLyBjHFUELrLxXup7wmkxu+ZVEzT\";\n            sout << \"FxshL754iYXXkXTqVGirp3NNNhGKPGc4g77Yne+nxpkZ4MwOi3wQ7YqPihwIkIdYewBMiQEJ4Y8W\";\n            sout << \"0+Os7iD8OYrccbHKqvKMTE84QOKGZSsGIaCD+iIvv9F9/EIB2ZDv+2aEs/3ix85vtg8L2f6WmGdq\";\n            sout << \"fOdoKVuU2pPIkzlyTNQAwai3NsjcnI++lEpVC8s0K7fpIN8uWDLRnGGuq/G2gFQEoqN8eP0E944k\";\n            sout << \"l/YTW8+baMZVp/wQNA4mo3v2UvDdHrDcZmIvVuwEaAUW4dwylXMazecCG1SMkusYSXGoorB615oF\";\n            sout << \"DaqndLnQSfyJrsXdBdZDAPmsssTuOvCjrjTPnb36+WebHGuLUNYZ1kqjhZt8hnxTFuYN0sTWb+UU\";\n            sout << \"2tL72LNTK66l8LuuQKUMimV2uHT7Dsv4VX6XE+YXczrC0HycSaVmtshxRh99fnNTEtDKo2bXbSTt\";\n            sout << \"s57BqGWi3/orxqSXecUPFYvQBjrIfDrinany5uht/8FK5JH+c4PMTsbiEeQ95RX7eOaBo6IoF7PB\";\n            sout << \"zaXhJH5TW/qwdO6K/Caqvjp+no08tUTdn/hRdGMyQ8cIYXsMaiQKbkpXlGnhoBK34XA12T6pXa+E\";\n            sout << \"QocfgTw773eQRFWN6vmhvuv8Pd3KPJAJO80slizTFSOvxVO68aM7gZdnDFTgfibe/v+2N1xIUq12\";\n            sout << \"B+YWn9yGP232QOnNq0nuAvFLhuzlau3U+qR2n8DThKWTboF02vsqThaQzF+0EPFk/3we6AeAiatk\";\n            sout << \"dcvXEbGk/TkGI1V5ICcpGS/fvivZlqYhAIL+yi5/5M3wPX14KwriXpFVMGKozUYaW05+27adupOM\";\n            sout << \"p4/0EvfeM8T2m+MQ3GcPLA8njXEDbLLWnoZ+YMC3l2OVRMV/yFXkZvQd6tAQUymv1xB03lNv1M1K\";\n            sout << \"tPE1Ps7ucMH3cOjff0fZOEYabEl81VbmYUCYfntdWlApBLrs3gBWiT0uLoiV3cJkq2VWtgpeyAcJ\";\n            sout << \"PiZ4L7AblENmUS9gr/7gYdn3uridNqfoos0uvUCFrIS4a7siub0FpCMwiwSiyZwtUoD5vcq3Khza\";\n            sout << \"DVGJoijIBo/yEgUTho23FJqMaOYyRnVen4i8GH1H7PUhJe7KThuQYk4UQP+XO1qdLITUwBlbNvks\";\n            sout << \"ciB3IIN6QKQTcoDXEEQaMcPYRNhaaGYFDeSZ4yIRhLV5JyPhOiLFj5EOzrC2B14Op4lOkerAY2J5\";\n            sout << \"cx0CN9xEUrm80GJGtKudSd0JKscXIDTBj9lxngSScCmKQRn4AWJ/acRm/fyc5Gpg5PLx+o0jCI97\";\n            sout << \"hm6qOSqslV4GS3BozqP1x18yqrC++IJvOISjjfSvSAkW2s+qv4ba9gfNYIhsJgAan1vaAgSPDXOD\";\n            sout << \"hf9RJHBE7Xi86Ux4uK/o/0GK3R4QsKa1/t6qij0XAlc6lmt6MXbSr/Tnjs4ykAbSjzmiwON9Jnzo\";\n            sout << \"KYQiY46ULY+o+UjbHTMuxkTJQjCKtyertjpISD1yNYBxItA703l4ZLK0iklv0ZrFMyov8y4ySVmF\";\n            sout << \"Tj/eFWy/PpTEQdyzGXrotmYbb+V+BG5e04bq40FsUhhALgSkcGEYoQtxLCZzkbyWQmEN/uXC9Gdk\";\n            sout << \"wG6Iln2vWqzZSRMeGZ61VMm+dzr5CN2iHtFcNQnjwWHgr8C726YO5j5eWLvHqLouU8ufiojzvsvI\";\n            sout << \"ycQ9aUfkcr3AXu8hv0+SOUK8mT5JdQ5aPXc9WOe4c6mdgfOK9Jq2ZJCLgQvj2swIoGQ4OVXn2D4t\";\n            sout << \"MNaKJu0/5ujgOg/634gfxJbicVJLzn30TgWYXX6Ixj/JQW7yxM2iYyHyOl+/SltruQS+NnF+llzd\";\n            sout << \"rYuXYejtciq7Sf+DFNOJPSaTJuI12jSl4yH4fOMMkkxWMM5QkFzgWGK7A90BJFo4Uhy05TELqU8J\";\n            sout << \"FtUWdrngONpIU6haQcDpoYtXVQ8h06yZYJnVQBToS4szMcsPPUVYxITcGnbT470DR5+Rrsm4MSkO\";\n            sout << \"ZXmf4sC2G/k5at6a8o2OKsohg34bNzdo+R6rpJLcMLmUogDdHj7uNjrvMXgZgN2VS33jpsKaVuww\";\n            sout << \"0fm1I1pD6ltIfO+iF5oEOQz6Ml8TSxcGei4xi9Si7g4KGTZ6+KhS/KcdGQv7HsGH1+auYumQvKIJ\";\n            sout << \"mWY1hPH9tLSAB5t6vh6YUg0Fx9G8Wf5Twz8JXsoyRbOs2AAvXcBQ5EPNbNiKz71rzPb0s4Kd3TKJ\";\n            sout << \"cNZexkD8z0J8U/KVzDHA4kyJU9tKB2ZArGPkIYAWw+u9d9VGdxXgst9WtboxuCOy0+y0XiXez1nq\";\n            sout << \"8Tib6FgDNCMKD4uk1GvVs697TYCphk9MlHPUevFlgBJuVI2uOjsnGjBtzQOeuWHyXoz8xQhyLtI6\";\n            sout << \"MnW6c6lCs8REqpAWwuIPF6YLzAZd4uhpOyKFTWI5jus7I2Rkr7RmFDcOCXcnHw7M60Bvcgsa5xy7\";\n            sout << \"AoMab6/pVJr6EjwK2JEmkLaxPUU/F0WqXpI8roFPbIZ0sfuUzZ7tZmkZtelboyTtuEZTxbKagOWR\";\n            sout << \"78qwMM9feTEwicGFlvyiYdUGaIwiIckil3oQO9w6bQAaPnygDcykVMFK1fZaZztYQ8AKiEjyr/V5\";\n            sout << \"dvc04CEShL8uRKDZNY8Y5cDGVHOSR2g/u0t3PDuzMCfmQeKNJQgc0uF3ozXP4xvTvopiK58Y3656\";\n            sout << \"m2ZUfjDIf/g9gRXmrmte452CbaU4HQzlIblKaEJr153rXTQbZPbSHyHOHWRuczQAtnyP6k8YSC+3\";\n            sout << \"zqBtSIvq637hKi+7Ov8NgiYhw78ehwHiPtenLDlB/YMCwqqPNmo+8eYGmtOoRgaQecIoYHYWfaUE\";\n            sout << \"NMtwvnfU5g3JS0j6VZloZxGNmrtuDqWoXclUftoQdsDlE//Q/5+KHzyZjf60WrXx1Ix35UmF9IEI\";\n            sout << \"jEvtLp8KOoWs077NCkXs0HVwuKxbpZx0v3qVb7HwsgcaoypbjhWaMGYflEKvEbJt+TD4MN8kXDEE\";\n            sout << \"VHFdCSOzUplHRdcy4aOkQdzfEYvNTgaiTSO2CautGYgS2m+l6Cd8B4K5PZs99xYFa7t80L1d2Zpe\";\n            sout << \"M9rYCt6RKakTTFDSR94nxxzdyfbA9sVYu6MCD1G0lN+zrEisA6hjqSAqUXsooaW4WTOd3HoNkZeS\";\n            sout << \"tGviSThwRe0awN4pH5dXfHtxaRBkzOBVw12FB6urObgv+3jcnTzRZWvF14ioEmMuKkHb3Ienbv83\";\n            sout << \"71BeuTrUarJazVmIzbH4ulyWwLxEHeKL0r4PIEfbUg7tiU44lMnfxmrFFR6FiwuBxrUvyv/yEmiP\";\n            sout << \"AbMnRjX+4MVrIHr001qxVFOaeK5FehfvmWotuUW63TvubKCRp++5uQDUh/LeMp5ZSX/RRVpEKEwA\";\n            sout << \"It9wUHj/cafFqSwt603pOOtAC+xL0ozsVF1kYyl9vBEow6mBe66WBwekd+DjlzLbehk5oIXSaYsp\";\n            sout << \"zu0iBnukS7YoO/2Ho5JMdkJuHf5AtuC1bDt51FL9McuIHboobI3/K0YrpwPmFORwSUSroXle6XK8\";\n            sout << \"LeX4Fcp6YaicZoFYpLVbhVvrJSW3F4zBERbSqBrHBMxoXMblajhf58RcPKwZPvPnSL+yB5V0VP5X\";\n            sout << \"RJtdo0ir42WND1VCIfVqCCrSg/m+/R2sffd/CzqQ/JuJnwPtKrAvuaZ8zbmq9UkK0WAWY9Wql+gy\";\n            sout << \"AYQNgM6Nd9TNJ7LEyEJQl3nK2qjg67rBCizIdwRcPFSWoWE9DjVz5eFPIJjPG//dpt296BsBeW7U\";\n            sout << \"NhV2Ig9EstFK3+/GC3annnXsT7OQt7QCnx8BvzbVHiFU0n0yikhA1uU9iYm5qsVwdJ23NWimhTeo\";\n            sout << \"XOWG/MVCrPHpV2qs/4PljiPW2eVdzodj+nfDPVwkHwmFm5Y6TGDRBfJWd+ZiXMkrDa2CEMrMvzEL\";\n            sout << \"/DymDMQfMI9HgMiLWmiXS4DjcRL1Fp7DTHcQa9swLcZwbyE8r14L+5xXzDySF/EKJ9LwmldUaN+t\";\n            sout << \"qjmQ7DecED+MkTHMYXnID/Gl3a1/wnrfxa9IuRAwHiIhuwb8siPJT1S2mncAqk7YwUyaY0hl6TB1\";\n            sout << \"GJqoaPTaeFqzTD1zuz5N3cFxx1O0R7OBzHuBtV/JXrZlyzNKZhUaopWCyQ64+RGa/K/lQcyJNVo9\";\n            sout << \"lErihKgf/LNzd7f94T3CmYMRUJZanOLNUWcOg2iJLGR3hy1pnlmc34IgQ5SHZisUBy2jsdK0xoKA\";\n            sout << \"Kb/cPiaZj6ab/4sq+Owh5I66r7FjACv3uILtt69Fz1o4yaOb8z1ZSvFei4CPrikpxYXltEj+aPZq\";\n            sout << \"pAyL3+qrlJ7eOYE2svEpEAiYTztUAn9/ukCZZ71IafGHnhPggc+eizHPuoqfdUa1NWeM7H/XcFHH\";\n            sout << \"b5PQ2mQPCY1gD4SrBqPS7I1QvfMuOSRba9YFbJAecSC9bPHlQQ+c/rma+R3yhyLyXN2j2xzHpgJr\";\n            sout << \"oT2cEn9yT2fHRiZIWqMAJa0KRJgRN0hLjhGQ1VKN4WZfKy8uyqCrAbzBqR0eYcDjkpvD/syBg81K\";\n            sout << \"8acv+5OjBrHgCofewj2DFs0lC3mMlo8qe+GNjxu/CZufpnNabIY4ggwBxdMWZvZQ7j27VwMmvkdd\";\n            sout << \"Uei0foug3YA/Gy/XUTRLhuyYKy9dqdv6VTSiek0aFQyM4kz4KqKlAbGixu17SFgvZ33fP6ZMZ5Pd\";\n            sout << \"eWC+Z1vRafLRpsABf1DJujXUEUZ8HJfWBuuaMkJkxFApcPwctu4SMpZDjnoc/7gblzc0yLr8BRxD\";\n            sout << \"gygNRNu4uVAT3sbaRzYOvF3tq7wr+R7qS2YmPEzhoZyfubEHdV48wmE3XD/RnZJ8maanzDjEH/Q9\";\n            sout << \"yX/a34y6YSlrtNim3R8pI/AddLi86cAcEKfK3V9QXCGFqO7GfQuyZHO75grKpL+6MwRPUWigaLGN\";\n            sout << \"9JfWrc5tpUu8NPY0ACmztq5p8iNqylVgIYOC9LRIl6TKJQXPSY1k73NpzNNzOJhVCCLY2IaCMUtY\";\n            sout << \"pbxZs+VLufZmNFhq1D5qxUDfKII7x9ocFYqtwLnjZztYT1HhDTcwmB+5uQWHoXKRvsTgvSfR1l33\";\n            sout << \"w4mqzDAI4ykfuNbLmymuKaVV2ST6W7pI6xfZd/YD1em6OQYF+F44tj2G846Ry1IsdVK8AiprcFHA\";\n            sout << \"QFxuwxcY9eUgjSvhbK4BKkQgFSzx7yDZTtDxXSWrGsPoHUCh0GKU757B4ubLvDV197o/No9EKfGh\";\n            sout << \"3tlmEwvvwQd7yTgwdbksgVieGZBJqLK5eRe3CqYXpHryPcxydrO+2LPpzUiiHPY5FDRZjnYY+as0\";\n            sout << \"IC4dtlX5BicqVB2gbHiKHbjLf0pob27d/WqQKKfA/7h2wY/jYyckEiX8g9M6I5QeABzABxyyAMlx\";\n            sout << \"zoi3bd/RD35ijUysmIl/+qi3GHaYKK9Bfu1SRb9oPgmFYKKKRrYxm/cypmJXp+GUjlNokWN1u7OM\";\n            sout << \"Nm6oqRRuqYWiCwZge4HHVQkQs6BuH/Nqvd3Bqkt9U1eH4TnkS5MhnYVdHt0hxmG6Py5A446SERn1\";\n            sout << \"gJRsUDXk/kRkird01o1UqCrlhwX9WG1cjY2I9nFsokudgnYryxn+d+hVdM4E4MO5ZHmOXicEn+hZ\";\n            sout << \"N5eyfU7B75rBT/yZzzot1k+B07BE1x8K7N+S5JX07utAi8/htK/a4vxKhJiyx7p8etztBI06LKss\";\n            sout << \"grLKdJtqZvX3kwFEIXqpJn5W2bijJNeQYnJxfFY+5D/k5POGuBYjf9lw7ilnIkbEDkaMWf9Mrt3W\";\n            sout << \"A30zlSEMksIByxqL5/VFx7oM1oSx872AYwXDNNnfITgNwKBwniRHuU68SjWBO37CYYmDhcB7Ug/M\";\n            sout << \"FMX7oBgPrld/Lg/ut/xbWwFOiM1M6L0TmT5HX6RcFSdKg3Sda6adAkSK3Ux2HTZAUVaK8zG2Mm1e\";\n            sout << \"W+/4SSqK29MAZUBK+oEPrNB7An6NgWZ0TRu8sGeMcZCm2Zb+3+ZVUbsTFoG5pFhzzvMGr9fAsh3Z\";\n            sout << \"4Ngvc76mkiqT7xDZw72BUnrPz+eO+RGqMG+oGWJlXd5PYD4XIkW25kBfOr+iK/gCFUsfZbFoHEFa\";\n            sout << \"M9EFExjXiZYOz4iuSZnpeChRQ5wbl/56iTGSMHpB3KKU9Rfyv4dIDGS0KmnSH7Q7mdn2lXerjDmF\";\n            sout << \"zlc7IbX35O0kHeSXaH08ZFf9vBweKQvEW6Qxs59FWPuS47FpXRAPFClwYskLxByN2ux9kxHprAFr\";\n            sout << \"zuNKRyilr/NlCEJn5SiYU2/fAif/YrNNiyxXx7sWwQW2mf9Emqzsrkb+eCqAPs1NmwuHO8JXIyKO\";\n            sout << \"0EbIUaVuENKa+DLtcrfI9HlxhrF8vd8m8s4ZeBHWr3jkbVdcjX9mmtcSrHyHXcWVImc8CJOiR7jw\";\n            sout << \"0HTAydarj2G229/7kLX6RncrRqY6/Z2e0YEbfTt8RDnwriUmKXuf7VUMljP+tWx8aXMlbm47WMaY\";\n            sout << \"nnjZ4wE7UTgrYUce7ehuGDBEM4VaKYrp4n782gXFdo9VhUZ7JEaveARi8Di1SI5MuTQ8N2hUfPKn\";\n            sout << \"JbK8mEjSmcN1sOZBOXxxWX+e9RRsO5t5ujCSy+UBr4gaqMHAlwxtBmif+kl7s9o+UjHOlWLn7V74\";\n            sout << \"PiLxVUzCTHz5A0rX7MyGXMBai8BT5XjmazTZz8YPIiq/ZmnyULon+uTrmBdivNEjDq4M476YfAma\";\n            sout << \"rcqxp/picZEanq8yctrujPHilXH1WuXhkPM+gn9Gkjp/sGfA13JiFeXZO9GJHkqLwBKApqS1HJIf\";\n            sout << \"bhomnqcdp6+hM/IEaNS3dVZ1aTSefIM/OTR2fNVbmzwfENzVke3dCJvw5B8zTsgEXeKuRE58pYaQ\";\n            sout << \"H+ffv486NoO8gXKrUF47ptIj/Tt5apc5Pt1AVFsuaxvry3UrUmY7MLbfM4xB29ah1PY9iYx/OssX\";\n            sout << \"DGvnDskGHiQJlz1s3saJl9qm3BZr3//6D1/CgGvXw0DffJYL9yIqlzoBRKAue/lQbWagNArmsccI\";\n            sout << \"WxVk2TqYgTHwhl40fWSGIuY1kfj6FEAUxBBxGul8y9Cv3e/hMnE0gDQz2tZs7EGqP8WqKPF4BpDh\";\n            sout << \"Ep+6vvj67y2Hf36GALRYNLlhCB5+HygzOW4jwtQvCHxbmtPWvQkRQ8iQ7XlZH0OOATz1FsccBZXr\";\n            sout << \"3+O26cf7zcoZIE28MIQHIJqsDFHCJVr8JVcYITcv46R1z9ZgQQ+z7KK0M6FY6SOgCyu5kyQR6YJd\";\n            sout << \"HEYkNp9J4N21iRr08DUYycJDtrf7xoyYfj2L5QjpPVEKrEhIkjb1kr8uZp/KfCjCkedPBrMsPuOJ\";\n            sout << \"28Acpne2exkkKaunrJZr64Axfgl5t0OIBP79Cqy8PRnMYQTtqHf/pxaHNyrYaXO9vjtTVoV++kaM\";\n            sout << \"svy9Ol/R4LxEXrgtlSYhKF4o6iCJUSiLhE6j/xzyOtRrCAHZ56WCJ7YTm0oa22TtH0DvoFMY11Tr\";\n            sout << \"SZ04ig5Tl8At1jXKymUSnK7EXANVHZmZ+01xTE4efnFIf33N4uWK+c/hEqmS6KCVjuHT9FwTKEIm\";\n            sout << \"4cKum8uhL11rodikW09dYfIyQV9yO0k6EJpeUSQMhPBqbgTWHnVQoHoot+c1uBoOdK/+bRuz5vip\";\n            sout << \"l6+0nmpZZoO+OjdEap1pQqpcTEhmfBuUGXCibggZhHEvHvFGQo5an4N48OQA2B8CccDHMJIDP9+j\";\n            sout << \"0JfmziBnF+ZOLfKLwuuE4uZg87iSWFkwSynsWwoUQ1Cy3u/URW620WLmkx0GDoGPkcsxJ0LVu9dh\";\n            sout << \"OrWWaFesEANPRMCKuuU55hs913KzoOKdgZPzM8dheJZaZB15wi+u/RTm+obSWZVwibTDyLPQ55mz\";\n            sout << \"FSv7Lyp1EDFvxyel+7osJa5ifhLrU5f6CAcKwS5t2IwaZaBxrVaFgX5lQmifY1Gd2new1mkfWYmb\";\n            sout << \"n4AaURVZOBC4U1Dx65ch0PNeEYxk0DLAGOsvdBDbWbFMNc0LiGEF6GiCMBYVsw/cYnjY07cEZg5N\";\n            sout << \"M9RxGfLfVlyy4MW9ek5ov4+NVLV+vaosZvA9gP92vaiS7jBj8qCb2uYIK1mfrjHcOUFqcxgzltBR\";\n            sout << \"eSU3ewoVRJIaVreWX4RSXTomL1GOyfcFQ7gZghSJLKlwgkK6+yvqig0jyuvmiRFJGDYOxQtDykwM\";\n            sout << \"EKOOZrckRdktXs6aFQOla+IRiN3XVUfY2wvx3egfOYPKrJS2HBEdXeIelB7LK6vRx8nwuFAAwZWQ\";\n            sout << \"iB4OvgM8U9N2H1wa0xXWc1897unEm1KxAP1iS44BmZ0PPASPa1RrltkwWMwRtMp9fD08mwLdGe88\";\n            sout << \"fsGIrnwHA0HIShoZaBmCSvX0yfaJ34nchnMukP0B/8v7f2j0t1F6hr5qJNSV3cTNcc2QToBy03ro\";\n            sout << \"GphkM0UhwwoYTlFppF/8LV4QmtsNK9wuziTmv8ghXUgvFRTtVcBMlHY4SFcRKoagFF+B1UfCuVZt\";\n            sout << \"G8fNilXM8zc2/eP3g5FTU3YXRgw2CAheUNiekne53EE4DmDJ1f6n4OyjZFP8PZ85Nzkkco9FW/8/\";\n            sout << \"31JIClFqSE1VGbDXleZMOrdfoknF55krQB7v6Wsu82gzQU2AvvhbuFlPodDKH1xUuUT7gERKv4ka\";\n            sout << \"fdS1xf/PRafedvPX7k8fFZQerqvvUlgO6PaEAxK5MqZqHiUgUh9A/pqBZNBl1kQLP9+G70i1CY9x\";\n            sout << \"tTETsJJTgYz/HP6yXsqeFm52yO24myKHMURYBmOZU6AFyqFCsOdJG/GA5otaO9MG0A3hPdC3Py+2\";\n            sout << \"GWbnl11yPDVImktL+LYbx2oolBWZrelLRuKAtDp4p/Svt5R6fOvYM9XxZnnpR/MNaTt7I8iEZSQe\";\n            sout << \"w57IL33ZfHgKlxEr/ouJgT3vlxqXsuXnP49ytEVKGja0JAOzlShLYqB3GIY9Gb3EtN0h/id1jqQm\";\n            sout << \"QwR8y5q54W8pdYflhgi92YWYroUUIFRxheAgPwUSqrOUNiN6xpSwr2usNY1zvGGsRqFKuhKgh7P7\";\n            sout << \"cvGc2sOj3izPgl4NlR2DaoFTbXd6uDM3IrYGSCFJdbMlonX5cvO91ySJpKwPOnqjAbzBjnZCfepb\";\n            sout << \"4px8fSH5I6LJVU1R+sGRCoewaHTFlsnaCQrsy9BTGMIWwAKCAYCbWN0T4ItZaXhJWarghYGsT57P\";\n            sout << \"MagSlMpKeiToHWnWhPhtxkhm1ZVRuYekcpwrlWwsHBV6O5pEML3wmWZDWJNZWh/GkmhPhf0aF78F\";\n            sout << \"2lOVKBWLYq+4Xt3lVNvqCr7m2rQNH6KzZUNfeoIJH48SgirJQiNNE2iQOsReTQTbCW87NCN4GKGh\";\n            sout << \"Vf5A2JU03N+5fT+dorN/LTQmeKddK0MR2nshO1m0kZSQ9TDUE6Da7ITtIjGpKK1QqohIx9BEMoML\";\n            sout << \"t3BcLTNkK1SaaYRE9Fm8AZXr4z9AILXUKktv5bytIRBZncs8078FdpF+O2JWEzELgG2s/FTHTyjU\";\n            sout << \"NU3A5q6+8LoeSXuoqOZz2QwEMhKwkz7AlujJU/CJ3+uZBAUBythODaVBlaZM6/f8dSY3489Xiu9z\";\n            sout << \"L917CSsYpq4JQWq7I7pOkPjy0t7Y7QmKPITQv4QQmF3P6SJXiainjWDQlZx59RTzg2Z2MDZ0dcWx\";\n            sout << \"f7f44IkngOVEUHi3iwrSygMTySBYdDxei/kBt7oXAAkOMLucZ24VE26nLD1hMAwRz83ENc0sOZAz\";\n            sout << \"F7He/e0H2I53NAYlk0s55wntUcdp3sHh3UOcGyBGcRUipg6NWy/LrWzxWqJdo1DsBpV4iazYLRfB\";\n            sout << \"JdKobsmPGmWSyABV8tea/IuVgqUm5RrWfBUa6Kw2TqVuos2PsGqsRi4cHKl3XQ0GJjbV7qV7Nacn\";\n            sout << \"mRVqIAetzUUZkuyp6Q8OMLX36zwwrlP0rPJaqk24VBEnx2FKjaR/LkP5lUFenOHJuPXSh89pYWA7\";\n            sout << \"7/y1i2ejWuMrpElkJ7qfpTGD/A5ZkNWCyla2VXOXUVjK2t+cBYByjEwlMCwr+tXUXQYVMPf+UzzT\";\n            sout << \"EVv45u14EhFg5XOu7urPZWyO4EbejgEvyyx0c6Zgt7RaQgXn+akwMHI3oDn2NcZYGo8Vwg/fSs6j\";\n            sout << \"Ggzyse3ShPpUr6qb9TT3Vo6hXegWwd6tDPsqDlc62JhQ0MYdw2A1x8aGK1iUCz4pqsWmXWhGPO1g\";\n            sout << \"rXyqBaIrVHDMim3cZO2LY/TOwIJZGuHNvVnQQ0TDYAQEgyej9mVLuWaFuCE/JZlw/8U2VngPVq0w\";\n            sout << \"EePssUQnewMHYTfceXOETEBkU0xl4WLdwaJbvIXG+pPcVzYW8z/D3yh2LU7KHbklffbjWhYyAm3b\";\n            sout << \"nTTR+YTZoF5PwWA9DmsxIbLQJn3Ejss6pOj1YSqq1cD2r1+TZjWefNmH/nncwjU0T6e/iBxkgQLc\";\n            sout << \"NXouKJEemknL/HOvd5sUS6YYbIGg7Pa3ur3Qn0quKT8QSHRPTxZeTP47rSp+Koibf/XfZOdG5RzB\";\n            sout << \"U2Kbz2vi24JkfzbNCG3tjNvzPJVcZrMde1TNVNQVFbXCzMZgO0Za7o3IRyxy05rmieBcGryGX1ln\";\n            sout << \"hnhwSzxSSxnuJ3szdlfw1j68i8LsX+iaZHonWIw21afDPwXaoflD4cZIZI2uPLAKeBoOYMxKyFGj\";\n            sout << \"2KhIVlr+poDcu9gZBMF3CwwxSRZpwVhpUllBfOJDJTLbM3UOyNRMs/U2T6TdxH1fRbgeQcfQ4CqU\";\n            sout << \"D196crANUlHv6VL0bU8CFS5f85YwKO4JliKHZhvQRDtcBrwKIXttWPt1f3OONAscmsl+JtVgVt+r\";\n            sout << \"h1R+X0b/puYAa4tqBvUBiiokN21cQR40Pp5PPLMszGskImO0XM6Fx9spo80xxDLhOXZsV4rJKs3q\";\n            sout << \"lub2BoFFGa/nbd88uBheoBR8lh5d3sWciz8Y6eMMlEASpLmXFg/nqq1jzTlC7lGmAhyqSTAL2dHJ\";\n            sout << \"+8ACp+IgMI8v7DR1TEp0qgwrVC7B6+8bozJlpH73HdqQYkyjAnVcOBTn6KO1pjAJ+YcXqe2ioiBt\";\n            sout << \"OMAlNQVAJZgxpEnwwd16yXDmK+Fp7v8aGEx1EECVaQYW7ZVvKRC9249ioFaEgFjpo+8veoWFd9G3\";\n            sout << \"1E4aBC8rOXrrsI6U3QqWbYlusqvogtKGwT2pMYSidnPneM9iaJ5ixPSlB7VPp4MwdZvPIpOOR8Hq\";\n            sout << \"cFqQfZAa7sDq5idYKPUrRo5XD6szBNbb9Oob6y3G9RQndEEt2363luFr6Nv80r8yuyaUUlRcmPmU\";\n            sout << \"/VCExotSxcx6B4uWyd6UoA1wZv1hY+OCUL0ahArlLzkR2ZxowfeDCn5eoawdQnazyx9wSAEmqGTT\";\n            sout << \"lrT+MyINZeyxp9DTtvjFwVw1aDVT87PF7E4Yw2H5V/55elbLzn+Rlr4AgU7W+RnuwOk52LCKrSud\";\n            sout << \"JTAq/vix0svgRHAs3E8wsLzBsFXc9SZ6/AWptBKuix0lkoDObM8rLJMjxpQPmIyVvB3jWXITDn+n\";\n            sout << \"8ou5GgmZUDeGu3ZiOWbtPhO90akFKl1XDQJ+k9DGrlQd0dbsDa2lTgPbL+3wOD9fdjFzqfmGA2vI\";\n            sout << \"kg75VqCCEOUXbQ8N2U2IALiOEuYblJk7WVsbmOwmEw7T57QVJvivVJ9Z36TJeWfpzIiHCeReso1y\";\n            sout << \"3RGCo1qlsgfwtz5e3/ycu5aEq+Pg1W4EtSpeuIEZyH7zQaUILmAFP23JDmHyZNh9ewxSRfZGETHg\";\n            sout << \"KKN32MMx6taVzf/8+RQhxI3JJ+PSk0vrvUEX4L/2Bri8meJbN5UtWuRN5gha/O8jPDixa4XrMAiq\";\n            sout << \"etOumapH/QhEJBy5NHmcjLH7XpZ72qxTIL6VS6m2GjFUyekOdKZOHDyEKA0FR6wgEnoki7gS0L6N\";\n            sout << \"5plyHCOmd1aBWEXf5+P8EJeh1nmu6AXtDful0kn8G9nNnWrbC+iIj2QQ+XZPxdZIGuJKd6MrXf0y\";\n            sout << \"zW5dznFYvB8R+LTy2SW4WFvMWzJAlggi1N7w25/rvtnt57E+I5TimCjAKJ5Vcjj/R0DOqX4BNnOK\";\n            sout << \"MqeMDogP+DE9NesTswgfFngZBjomZsx8f2Wdzzi/UW0xBZa3yPk+CV+wwTlWNxgBKFCYFC8GlJ41\";\n            sout << \"MQt+TPDsDZJuBdbexuS/PA/zzOE/wZPVXgzLZFmTKsZAfz9894HEHalRlKLgTlvgW65XDihdoh71\";\n            sout << \"HDwdA9Knb9r2qH0dwsOTpoU0uABJkND+V1Ezr3oi35dJ2zw2gR0omEnVXZM9dW8XIp8ln8zegt+S\";\n            sout << \"dyMbNDzX9RClWSIVIGuRYGCahBqXMCJG/AAKvkXM87mZiQsIz6uLvJpkeGiG1ah7kTSjVFIKSYES\";\n            sout << \"73oz5l7AIAIReUzdvMLk5ZbmqdW4JHBR5XBA3rTpAyNEunRi2Ddy1eBt4i8I7GlXaaZ7sVS028ze\";\n            sout << \"VkY4WR/6FJKO8ccbofsJb8BiM8UZdPmkRdEKGgFv13dkq6inmo3S52P5S50mYapa1YKvWCvMHaov\";\n            sout << \"z8BOe6WqptQRGc+vZ4v1vgq40yaWBa9pSTyvntLUKCkQX0qi3ifKhRykXP6SBylckIHs8DfuJqXP\";\n            sout << \"X06djSx/F7IyvBQg90SLa1h5hYRTAchYX1ZgvG7LlSvPp7i+sWCx5D7KpTbF6O7AU8kMPpaRm2wE\";\n            sout << \"RvZ4DCgXdh9Lgw69wRlMfWJEJcV3mOIGDRoBZToyJqgHMDJigCet6NIsD2xvvza5JWPf3DURWRHz\";\n            sout << \"wdVqLXlUivD6/9r290ZcIbdWFMbz2aY9x/ojLrJmAGX/kySItIXsJlDbcvquJWNc6UYrpxurQEku\";\n            sout << \"ejm7E6HjXUPmi9gh2kRkw29A5xIFaugoph9dZSwyCEx2BbqY21hwQ5elfdcvdJD/fe7iiWmfrtxQ\";\n            sout << \"BqVebUOrY5+/vEvMf7EupYK8cxtCb3mvViCR0rGokTwuw7NVuMH6DEJ/zXB7BO/2bPXnr48Q2pmM\";\n            sout << \"pThaXSCJ5Ta1SZqGZRG5pBsUWg8MCQBc/KmDWv5csQlqDJOLvEULRsKdxxcm2wBthRXx97JVHMwe\";\n            sout << \"Tlb1TkjoSIQonMsvU+dRJCW3qhgbR4i0t7wGfbg9YdXG8LiKJHvkpu/IPKHZtaMxOp3O6kl7Lcb+\";\n            sout << \"Zr412Aanu8BN5GP+rW8/C+TjEBG/WeR23iZr6SByC7TCzZwJO25J6mtC1nFxdAUizSmxUfwDwvdE\";\n            sout << \"5WyGMq8TTIHZ9KvKMw/jODKXcviOmLHY9CsPtYXbChnF/fWgQx/ykshrLmtSqFEaOt4YCiPFKQHh\";\n            sout << \"/IjsYqcs0UQeGTk/6tnp8Cewe8A1DAaBEI1RTllobQKLXEUBWAV0VcrVXILhemvApUW0uqu6dSqg\";\n            sout << \"cfv9uvu1BblNEfNmfTcUssCnDQ5c5vFjEB1KESkrBTL+p6bEn2b1bbxQrhiqnVO6mi9anbtBgBU4\";\n            sout << \"lTjSG4KMnsD63xnrLapoU7ReEZxGjsQgm1Af8/lewJajhNOZi3FmDgkb8Lhq2rz8OYy6pwXCEM07\";\n            sout << \"JwMzOWFBZDUA\";\n\n            // Put the data into the istream sin\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decode the base64 text into its compressed binary form\n            base64_coder.decode(sin,sout);\n            sin.clear();\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decompress the data into its original form\n            compressor.decompress(sin,sout);\n\n            // Return the decoded and decompressed data\n            return sout.str();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        // This function returns the contents of the file 'feats2.dat'\n        const std::string get_decoded_string_fhog_grayscale()\n        {\n            dlib::base64 base64_coder;\n            dlib::compress_stream::kernel_1ea compressor;\n            std::ostringstream sout;\n            std::istringstream sin;\n\n            // The base64 encoded data from the file 'fhog.feats' we want to decode and return.\n            sout << \"AXE4jk6QRzUCNtyVtAwaCkqQk/DMJKm1t48e6FXsZJ/Zfw0Utm0AVwNlJU7O2+XVsftV/yE3zO4S\";\n            sout << \"YG9DY33gIQWV6sw7AGva02FE7zlkRbW3IOyZeG5LYs2r4vGYmZvZuYQJ8CVmkJpGrYioIuqWLyoD\";\n            sout << \"IfAFmt0z7HREwTsGxP9BG6UIXb95jQCGocuoO+MxQNpq3qtMAr+C2xnN3Na+ITiKYUX+zEP+FrWJ\";\n            sout << \"uqsYqhyN4H+1rlYaLhrj0nhUs4+Zp+fn3LZecDsZGeq6KDEIM68rOZAY8WWA/o4x30cQ0P299z2m\";\n            sout << \"7Pl1vRxpN3MdgzkS2zlOpGnrexfA3TK07nFcTK4Lc97t/75JULM85uEo6yYUBjyeY7MPYTHaM0tH\";\n            sout << \"+TGdAqQBf6TbnYya1MK0BM0nVLp4TkMeRZj49erCtZIVaFWOYmufs3LywApX8AQZAsBhU0QA5cQu\";\n            sout << \"G6HKcdTiqxUxbjOIueAxWBbDbGIwUj8URJVh/WVW4TAXnzZu48JvRzif++Xeswz6O8+PXdPVp4BG\";\n            sout << \"TaJv9bBwqV1y7lM/T9FxktP3YIcnbW+ezBUh/logAVeLzCAbYaqChRMUkBizO54DEiA+NBDV5ndu\";\n            sout << \"Iax8NL9DFp1zmO8gdJBZZLgzf6K8ZbRwwKNlLEkVEZGKei3aVIwo7ed0tjG4aEIodgAuoXD8oa4p\";\n            sout << \"t7v3sYbn/Wz94AyvAwFV0M1mAMaXqXhpfJSb5CJsSOyKqUtBBhpS58V6Gsq9M9weuwVHee5JI8PI\";\n            sout << \"bY8WlfQNSVo4JcToIdKPhehz4Ywad3gdX8DhSd+WBT2aMomB71jr3m9CcC9da3oxXjh/jVaN/boQ\";\n            sout << \"oY5UqFGZ7T1b42x79PiIoOY339sKYR9vr7WPDHTouVtas/3hJBkBKwXqKmBbRPU2N4DTgpt+1zFq\";\n            sout << \"nig8prSmjiAh9ofp20Pbl5FbYoIdoOfLgYIluAOuT0XhKxLAwWoNGLBA37bGagSxzXnzlDPpFDZ2\";\n            sout << \"WVdrBwehuD4WhBRxMiTZkzJwhzRkyvsBnO/JqFxXAD5b2CvH9p+3P/czeRv2hRjNZaKHEfdMtIWn\";\n            sout << \"lPR1zWmZ3LTMBR8R2kmAUt50Sikzj2TpzLlBhemvUVAcv0HEdiILnp3eilOx/ee7GzEroOMHuOGe\";\n            sout << \"moxWRB1EHj6h2Ya6TVmMb47SzMwKo7mf1PtZ5JLDk61k6Bv9M0WCDiwxlBwC/PjTxHDsTOWRrSJG\";\n            sout << \"roZ/csy/RQF//nA0f8uKC9HWmGTOsrA6VAVteglGi9k6E9etxvmGCQD2ud2tyz2HSnklJAMutXd+\";\n            sout << \"flvArk1avpvwXGoNgT3EsEicUGOg93vXl1A873vbHtwnycMzAa8NYjZGW/GPROg8yKkbpoxK+Zel\";\n            sout << \"+VP14SvqQDKEYDevoGuQWhsQHhW7bYeSa0bSamm9DFzqK2Ld4/aU7JUHYdaAvAJPIHe3F/N8NcJ1\";\n            sout << \"RE7VoQlrVZXBy33Ly6wwiv1rm8yK4sMdBnNXcxzCyG1NkPsmC/16A08Dy8RV7nJhd1iOJ3gy9BUG\";\n            sout << \"Y4ofrw/XzITd6vL8mIJW2jyrVzW2OPqMWy6IO/7CHz7d3k5+7KTKWkksTRsuAYWDgZtU5Umph0kN\";\n            sout << \"/RRnuBRIe/6KYj5/thAY7yLmGFoy8jhDmIikSP/l/pJhUjjgKk1R+oYHGDJ4FSD2KNfRDQ/xHZb2\";\n            sout << \"++ObYSCHAuhB1HoJBwPcmxkFtxjS047iGXnXo+2nchItcrtifnQTeI0qyV6conJnskM4jfhnKsj7\";\n            sout << \"A7y4owQjOvkDwu0GueuDOTo/9mW2NjAaiHCp8yarSV1dPI1b/XR231+p5IEp1zWzqFr+O3pDAL8F\";\n            sout << \"+eU/vj8taOxtT0CcT0gW2rRr8oTigRWCUGP1hxDBdhJtAa7Q+CuFvmtpjm/4fmbroJ5ZVNA/71FN\";\n            sout << \"yL9DKBmiVTwljf+yRpTGhpMG+xky30zS2R150N93YDDXVT9StjKaOrtLap+9w7BtCvXGdPiyR2QN\";\n            sout << \"g7gqzrz31poE36fAwM4san1jbbTC+eYcTErQ2wXCQkVne3kbVOwErB0ayl7rNqkw5b3gAME4+DnN\";\n            sout << \"IM13kdtxY2WeBND96g2enTmFizxHWFzW2asW4/XqGt8EVmzTB4XM/Ytd+XXaNadRUHh44wiNIhPp\";\n            sout << \"txmIbtkSesyQ4YYSmUYEEcYkZwfcRxHUAGCcnQbSKGLq+N5IcyiLVwhXDfK4fqxH7Oi5DmOwAVmV\";\n            sout << \"kdDQ6GP7wDcrkAQS9s6fL04bNf7rodacAPdX4HwIKa2YykdXWOiQhp6BRxjUG44AVV5fiTGP1WVn\";\n            sout << \"MJKXYzSyY5oN3ADAT5em+cIYYVPnsnZBuUzAjHAw3WYj4VlRIrmP+oPdKPFncEyfTn1G7DbmyaPd\";\n            sout << \"TL3DdB8EDImfZ+A2UMr2i7jynH/fFXzsi2PM9cFKxCsEqG2LGr7KZDP2FFEVvWwIDnvUClj9nrHd\";\n            sout << \"zyioiild+DW6PoYvqFQX4LUf9Jr09RiJuIvz35I/15pBQbSnTxD1RFJwR92k0yA3514jYBAtfLmf\";\n            sout << \"/1refalgDjOyD1ntgp3INSYSbpR3TqNIynWwSJGxq9I5aFJypV3Nq8w2Rn3/kld9nqDaTG79ns13\";\n            sout << \"dwfPOiIZyfdrcxkYOtS4+iijs+YE3JhRKVWMf6ub0cVXttJGORgpzgkSoDWNVZ6O3hVydCziYzoS\";\n            sout << \"RgHUH2Oas+aZK5IF3Z3aaRYc0A+wy/PEx84LRHsAYdPUQJr+bGseC4wScP1Dyc3xpeJSR1V9t2tc\";\n            sout << \"AMbhtwcKGX4j5nGnhxSevKzbCDteEnB23TnSQwbuWYmzhB77V3jpu1Cm2h7FcKGM8vPbAQeRBr1b\";\n            sout << \"+RY95s8hsZGi/USiu4TQ/wHZfEGYcHuVBI920d84pPRVe5EJ8+FzZj+Qy7JwriqLN+7WyUCFdwxn\";\n            sout << \"4B+WXHTe2epBJMQzlE25kKDHKb2lDDv5HzVUlrZK4rEShkPNv8SB3U9u20GTLlHJbM8RDvPkNjmu\";\n            sout << \"U4ZLDSJylDaRHWqgchgMnmX08aprI/o1HbgZ5aiByXAUoHSSGHanyYmW/S0LOW7YZH+jOgxzW68U\";\n            sout << \"lheNnX6Z26RdMe5Xtkd5jx2jXgIT7HADCN8wWdZEVT7FvXRoxtO3nz30cbOim/+IvB2lt//OcTJU\";\n            sout << \"BwkyweuhJtiXZV1yY+X2z3dWBjBXVFWidPMMWjTUIwalo9A91RL6ZS25kuBXKm/BV6X/zAHkY+jB\";\n            sout << \"A7qJGLPe5h6SO3GKPSLv0wE+9G6VIhH2TPLfAd+PpqM+xuUNlWlo5JR6ItOgGHuFdjZeDlISYOID\";\n            sout << \"CJn4zfaU6M4Dmw+m1wsIiyQy4Cw0DcZYUjwStEfLJu7BRyFI55wEbXJr36PRWpvB2wzkI4z1u2yM\";\n            sout << \"7bFvguH0teVxtMwQy9S4lT9JlfX8QEqNRsuxzQprPJqj0ie2cFBrvJ2E0FtcuarikbcYAmC1iYdz\";\n            sout << \"Tc2CRVe60taBHR92AsvuTv5OhCIssVc5W+Lbv5e3S0vLwUprWPhfbth/zNevKNiIeogTJOOTQexo\";\n            sout << \"4EhJ2pf8QSz+ixlWi5ffYKLKSx03wYBZ3fNIhJDP+Y0mz2pd0IyGhxDrMAxYHhPjoEGCfYX6fYz2\";\n            sout << \"XQGQ1eTGvNEATqz2v9HxYBicYAcW4mjEcTqsMHMYcboVgqiLxOD+jOHJqNrw+eiuC2Ucu6muQ2es\";\n            sout << \"Zhbo1UNZO/J9XbsZIKa6t0PX0CSczL02Dti8r5rCQ7yeUgwZFzy5oJSShAuUvBDILXBeDhnuU4W3\";\n            sout << \"eooTvk0lkb8sNAgkUlvHXgdN9jkfQuHqX453IOffB9TnxopLuxS3R6uuRa5ED2pWkL0L5ceftRv3\";\n            sout << \"0T/sMlHmTNoQhcJSoINMf7f+WmHa95iD1HolQNFJaDEUzLV1DfD2mntncFZoJ4zlr+b/94qp8s/n\";\n            sout << \"NM0CyoI4ansElbkkjUs7QQp+43pGXu8sRgg7tva7/3vUwLp3Md+8WkX+uppIhj25nlwfkD6IHxdk\";\n            sout << \"uFNPNgdIikcM463W56CKek7LufT8wQG13mJOMJCObvhW/EU/yb/88hegDxeVJKrWHRyebllsFbZ9\";\n            sout << \"UeEWkJPKdA+YHilgfSX0aFgofCDmmh1k/cO2RPqIGIqZSfT//6lFEDdzPcCLp/kd4oq7qh5Ko7lo\";\n            sout << \"bg4N9n6F90oJI+JFJRLy6bEhZC/7obQlP6FFUUqSpizj18+zTLPUaDpt3/eg9QeXUeKcNlkHYt23\";\n            sout << \"AqzS6PqB9t4bUr+E81QUxpegh5V0M4OPQJbFQ4/rna/AwZVDmGRjJLKzkWUwpnIv7f2+Gl+91ly2\";\n            sout << \"ve9Ube6Jf9h9M/j7kppHRARY4QbXauYAcSp3wRaIueJWx36dMsqgzuYfwHIyuhGS3CbC1EHUZwM5\";\n            sout << \"hgCHFvPGHLM7T7p4w6k0e7n8RZJsDybyDAydW8SfSI6LIeX2st4LOHrdLrpUNPyE9JyuIMCSnPaT\";\n            sout << \"1XnjdWev4jjMeXxa1XWbzy0AQpeQ0UYA4OpqRSu1DyoPWf4IA+bf012m5Im/1BiGF972Ie/6CNvS\";\n            sout << \"niYOfmxxLWTihdMtslxiy53y2MW2iDzLxX5nvUSyKXfO1XUlDJGTd/zfUywZcY8cgI/f1IPzr2Lk\";\n            sout << \"3/YKqkJ2De4IpbixDEkbgAroIaoOZXEGD+yNzXVcyISIhMiKHJERdwVxp4j3duc3M04wrwJMZvtK\";\n            sout << \"lk5jnn+ILhTxcpboq8gge4CbWziUUj9du6mklxZaeYBBpB6CzlVLitesXieA/zl2JnWzRMD7Ho3r\";\n            sout << \"LLSqxh9UeFgjFtb3ilKSHNZH6x1DS0hFhEIA\";\n\n            // Put the data into the istream sin\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decode the base64 text into its compressed binary form\n            base64_coder.decode(sin,sout);\n            sin.clear();\n            sin.str(sout.str());\n            sout.str(\"\");\n\n            // Decompress the data into its original form\n            compressor.decompress(sin,sout);\n\n            // Return the decoded and decompressed data\n            return sout.str();\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n    };\n\n    fhog_tester a;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/filtering.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/filtering.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/matrix.h>\n#include <dlib/rand.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.filtering\");\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename filter_type>\n    double test_filter (\n        filter_type kf,\n        int size\n    )\n    {\n        // This test has a point moving in a circle around the origin.  The point\n        // also gets a random bump in a random direction at each time step.\n\n        running_stats<double> rs;\n\n        dlib::rand rnd;\n        int count = 0;\n        const dlib::vector<double,3> z(0,0,1);\n        dlib::vector<double,2> p(10,10), temp;\n        for (int i = 0; i < size; ++i)\n        {\n            // move the point around in a circle\n            p += z.cross(p).normalize()/0.5;\n            // randomly drop measurements\n            if (rnd.get_random_double() < 0.7 || count < 4)\n            {\n                // make a random bump\n                dlib::vector<double,2> pp;\n                pp.x() = rnd.get_random_gaussian()/3;\n                pp.y() = rnd.get_random_gaussian()/3;\n\n                ++count;\n                kf.update(p+pp);\n            }\n            else\n            {\n                kf.update();\n                dlog << LTRACE << \"MISSED MEASUREMENT\";\n            }\n            // figure out the next position\n            temp = (p+z.cross(p).normalize()/0.5);\n            const double error = length(temp - rowm(kf.get_predicted_next_state(),range(0,1)));\n            rs.add(error);\n\n            dlog << LTRACE << temp << \"(\"<< error << \"): \" << trans(kf.get_predicted_next_state());\n\n            // test the serialization a few times.\n            if (count < 10)\n            {\n                ostringstream sout;\n                serialize(kf, sout);\n                istringstream sin(sout.str());\n                filter_type temp;\n                deserialize(temp, sin);\n                kf = temp;\n            }\n        }\n\n\n        return rs.mean();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_kalman_filter()\n    {\n        matrix<double,2,2> R;\n        R = 0.3, 0,\n        0,  0.3;\n\n        // the variables in the state are \n        // x,y, x velocity, y velocity, x acceleration, and y acceleration\n        matrix<double,6,6> A;\n        A = 1, 0, 1, 0, 0, 0,\n        0, 1, 0, 1, 0, 0,\n        0, 0, 1, 0, 1, 0,\n        0, 0, 0, 1, 0, 1,\n        0, 0, 0, 0, 1, 0,\n        0, 0, 0, 0, 0, 1;\n\n        // the measurements only tell us the positions\n        matrix<double,2,6> H;\n        H = 1, 0, 0, 0, 0, 0,\n        0, 1, 0, 0, 0, 0;\n\n\n        kalman_filter<6,2> kf; \n        kf.set_measurement_noise(R);  \n        matrix<double> pn = 0.01*identity_matrix<double,6>();\n        kf.set_process_noise(pn);\n        kf.set_observation_model(H);\n        kf.set_transition_model(A);\n\n        DLIB_TEST(equal(kf.get_observation_model() , H));\n        DLIB_TEST(equal(kf.get_transition_model() , A));\n        DLIB_TEST(equal(kf.get_measurement_noise() , R));\n        DLIB_TEST(equal(kf.get_process_noise() , pn));\n        DLIB_TEST(equal(kf.get_current_estimation_error_covariance() , identity_matrix(pn)));\n\n        double kf_error = test_filter(kf, 300);\n\n        dlog << LINFO << \"kf error: \"<< kf_error;\n        DLIB_TEST_MSG(kf_error < 0.75, kf_error);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_rls_filter()\n    {\n\n        rls_filter rls(10, 0.99, 0.1);\n\n        DLIB_TEST(rls.get_window_size() == 10);\n        DLIB_TEST(rls.get_forget_factor() == 0.99);\n        DLIB_TEST(rls.get_c() == 0.1);\n\n        double rls_error = test_filter(rls, 1000);\n\n        dlog << LINFO << \"rls error: \"<< rls_error;\n        DLIB_TEST_MSG(rls_error < 0.75, rls_error);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class filtering_tester : public tester\n    {\n    public:\n        filtering_tester (\n        ) :\n            tester (\"test_filtering\",\n                    \"Runs tests on the filtering stuff (rls and kalman filters).\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_rls_filter();\n            test_kalman_filter();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/find_max_factor_graph_nmplp.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/optimization.h>\n#include <dlib/unordered_pair.h>\n#include <dlib/rand.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.find_max_factor_graph_nmplp\");\n\n// ----------------------------------------------------------------------------------------\n\n    dlib::rand rnd;\n\n    template <bool fully_connected>\n    class map_problem \n    {\n        /*\n            This is a simple 8 node problem with two cycles in it unless fully_connected is true\n            and then it's a fully connected 8 note graph.\n        */\n\n    public:\n\n        mutable std::map<unordered_pair<int>,std::map<std::pair<int,int>,double> > weights;\n        map_problem()\n        {\n            for (int i = 0; i < 8; ++i)\n            {\n                for (int j = i; j < 8; ++j)\n                {\n                    weights[make_unordered_pair(i,j)][make_pair(0,0)] = rnd.get_random_gaussian();\n                    weights[make_unordered_pair(i,j)][make_pair(0,1)] = rnd.get_random_gaussian();\n                    weights[make_unordered_pair(i,j)][make_pair(1,0)] = rnd.get_random_gaussian();\n                    weights[make_unordered_pair(i,j)][make_pair(1,1)] = rnd.get_random_gaussian();\n                }\n            }\n        }\n\n        struct node_iterator\n        {\n            node_iterator() {}\n            node_iterator(unsigned long nid_): nid(nid_) {}\n            bool operator== (const node_iterator& item) const { return item.nid == nid; }\n            bool operator!= (const node_iterator& item) const { return item.nid != nid; }\n\n            node_iterator& operator++()\n            {\n                ++nid;\n                return *this;\n            }\n\n            unsigned long nid;\n        };\n\n        struct neighbor_iterator\n        {\n            neighbor_iterator() : count(0) {}\n\n            bool operator== (const neighbor_iterator& item) const { return item.node_id() == node_id(); }\n            bool operator!= (const neighbor_iterator& item) const { return item.node_id() != node_id(); }\n            neighbor_iterator& operator++() \n            {\n                ++count;\n                return *this;\n            }\n\n            unsigned long node_id () const\n            {\n                if (fully_connected)\n                {\n                    if (count < home_node)\n                        return count;\n                    else \n                        return count+1;\n                }\n\n                if (home_node < 4)\n                {\n                    if (count == 0)\n                        return (home_node + 4 + 1)%4;\n                    else if (count == 1)\n                        return (home_node + 4 - 1)%4;\n                    else\n                        return 8; // one past the end\n                }\n                else\n                {\n                    if (count == 0)\n                        return (home_node + 4 + 1)%4 + 4;\n                    else if (count == 1)\n                        return (home_node + 4 - 1)%4 + 4;\n                    else\n                        return 8; // one past the end\n                }\n            }\n\n            unsigned long home_node;\n            unsigned long count;\n        };\n\n        unsigned long number_of_nodes (\n        ) const\n        {\n            return 8;\n        }\n\n        node_iterator begin(\n        ) const\n        {\n            node_iterator temp;\n            temp.nid = 0;\n            return temp;\n        }\n\n        node_iterator end(\n        ) const\n        {\n            node_iterator temp;\n            temp.nid = 8;\n            return temp;\n        }\n\n        neighbor_iterator begin(\n            const node_iterator& it\n        ) const\n        {\n            neighbor_iterator temp;\n            temp.home_node = it.nid;\n            return temp;\n        }\n\n        neighbor_iterator begin(\n            const neighbor_iterator& it\n        ) const\n        {\n            neighbor_iterator temp;\n            temp.home_node = it.node_id();\n            return temp;\n        }\n\n        neighbor_iterator end(\n            const node_iterator& \n        ) const\n        {\n            neighbor_iterator temp;\n            temp.home_node = 9;\n            temp.count = 8;\n            return temp;\n        }\n\n        neighbor_iterator end(\n            const neighbor_iterator& \n        ) const\n        {\n            neighbor_iterator temp;\n            temp.home_node = 9;\n            temp.count = 8;\n            return temp;\n        }\n\n\n        unsigned long node_id (\n            const node_iterator& it\n        ) const\n        {\n            return it.nid;\n        }\n\n        unsigned long node_id (\n            const neighbor_iterator& it\n        ) const\n        {\n            return it.node_id();\n        }\n\n\n        unsigned long num_states (\n            const node_iterator& \n        ) const\n        {\n            return 2;\n        }\n\n        unsigned long num_states (\n            const neighbor_iterator& \n        ) const\n        {\n            return 2;\n        }\n\n        double factor_value (const node_iterator& it1, const node_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.nid, it2.nid, s1, s2); }\n        double factor_value (const neighbor_iterator& it1, const node_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.node_id(), it2.nid, s1, s2); }\n        double factor_value (const node_iterator& it1, const neighbor_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.nid, it2.node_id(), s1, s2); }\n        double factor_value (const neighbor_iterator& it1, const neighbor_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.node_id(), it2.node_id(), s1, s2); }\n\n    private:\n\n        double basic_factor_value (\n            unsigned long n1,\n            unsigned long n2,\n            unsigned long s1,\n            unsigned long s2\n        ) const\n        {\n            if (n1 > n2)\n            {\n                swap(n1,n2);\n                swap(s1,s2);\n            }\n            return weights[make_unordered_pair(n1,n2)][make_pair(s1,s2)];\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class map_problem_chain\n    {\n        /*\n            This is a chain structured 8 node graph (so no cycles).\n        */\n\n    public:\n\n        mutable std::map<unordered_pair<int>,std::map<std::pair<int,int>,double> > weights;\n        map_problem_chain()\n        {\n            for (int i = 0; i < 7; ++i)\n            {\n                weights[make_unordered_pair(i,i+1)][make_pair(0,0)] = rnd.get_random_gaussian();\n                weights[make_unordered_pair(i,i+1)][make_pair(0,1)] = rnd.get_random_gaussian();\n                weights[make_unordered_pair(i,i+1)][make_pair(1,0)] = rnd.get_random_gaussian();\n                weights[make_unordered_pair(i,i+1)][make_pair(1,1)] = rnd.get_random_gaussian();\n            }\n        }\n\n        struct node_iterator\n        {\n            node_iterator() {}\n            node_iterator(unsigned long nid_): nid(nid_) {}\n            bool operator== (const node_iterator& item) const { return item.nid == nid; }\n            bool operator!= (const node_iterator& item) const { return item.nid != nid; }\n\n            node_iterator& operator++()\n            {\n                ++nid;\n                return *this;\n            }\n\n            unsigned long nid;\n        };\n\n        struct neighbor_iterator\n        {\n            neighbor_iterator() : count(0) {}\n\n            bool operator== (const neighbor_iterator& item) const { return item.node_id() == node_id(); }\n            bool operator!= (const neighbor_iterator& item) const { return item.node_id() != node_id(); }\n            neighbor_iterator& operator++() \n            {\n                ++count;\n                return *this;\n            }\n\n            unsigned long node_id () const\n            {\n                if (count >= 2)\n                    return 8;\n                return nid[count];\n            }\n\n            unsigned long nid[2];\n            unsigned int count;\n        };\n\n        unsigned long number_of_nodes (\n        ) const\n        {\n            return 8;\n        }\n\n        node_iterator begin(\n        ) const\n        {\n            node_iterator temp;\n            temp.nid = 0;\n            return temp;\n        }\n\n        node_iterator end(\n        ) const\n        {\n            node_iterator temp;\n            temp.nid = 8;\n            return temp;\n        }\n\n        neighbor_iterator begin(\n            const node_iterator& it\n        ) const\n        {\n            neighbor_iterator temp;\n            if (it.nid == 0)\n            {\n                temp.nid[0] = it.nid+1;\n                temp.nid[1] = 8;\n            }\n            else if (it.nid == 7)\n            {\n                temp.nid[0] = it.nid-1;\n                temp.nid[1] = 8;\n            }\n            else\n            {\n                temp.nid[0] = it.nid-1;\n                temp.nid[1] = it.nid+1;\n            }\n            return temp;\n        }\n\n        neighbor_iterator begin(\n            const neighbor_iterator& it\n        ) const\n        {\n            const unsigned long nid = it.node_id();\n            neighbor_iterator temp;\n            if (nid == 0)\n            {\n                temp.nid[0] = nid+1;\n                temp.nid[1] = 8;\n            }\n            else if (nid == 7)\n            {\n                temp.nid[0] = nid-1;\n                temp.nid[1] = 8;\n            }\n            else\n            {\n                temp.nid[0] = nid-1;\n                temp.nid[1] = nid+1;\n            }\n            return temp;\n        }\n\n        neighbor_iterator end(\n            const node_iterator& \n        ) const\n        {\n            neighbor_iterator temp;\n            temp.nid[0] = 8;\n            temp.nid[1] = 8;\n            return temp;\n        }\n\n        neighbor_iterator end(\n            const neighbor_iterator& \n        ) const\n        {\n            neighbor_iterator temp;\n            temp.nid[0] = 8;\n            temp.nid[1] = 8;\n            return temp;\n        }\n\n\n        unsigned long node_id (\n            const node_iterator& it\n        ) const\n        {\n            return it.nid;\n        }\n\n        unsigned long node_id (\n            const neighbor_iterator& it\n        ) const\n        {\n            return it.node_id();\n        }\n\n\n        unsigned long num_states (\n            const node_iterator& \n        ) const\n        {\n            return 2;\n        }\n\n        unsigned long num_states (\n            const neighbor_iterator& \n        ) const\n        {\n            return 2;\n        }\n\n        double factor_value (const node_iterator& it1, const node_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.nid, it2.nid, s1, s2); }\n        double factor_value (const neighbor_iterator& it1, const node_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.node_id(), it2.nid, s1, s2); }\n        double factor_value (const node_iterator& it1, const neighbor_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.nid, it2.node_id(), s1, s2); }\n        double factor_value (const neighbor_iterator& it1, const neighbor_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.node_id(), it2.node_id(), s1, s2); }\n\n    private:\n\n        double basic_factor_value (\n            unsigned long n1,\n            unsigned long n2,\n            unsigned long s1,\n            unsigned long s2\n        ) const\n        {\n            if (n1 > n2)\n            {\n                swap(n1,n2);\n                swap(s1,s2);\n            }\n            return weights[make_unordered_pair(n1,n2)][make_pair(s1,s2)];\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n\n    class map_problem2 \n    {\n        /*\n            This is a simple tree structured graph.  In particular, it is a star made\n            up of 6 nodes.\n        */\n    public:\n        matrix<double> numbers;\n\n        map_problem2()\n        {\n            numbers = randm(5,3,rnd);\n        }\n\n        struct node_iterator\n        {\n            node_iterator() {}\n            node_iterator(unsigned long nid_): nid(nid_) {}\n            bool operator== (const node_iterator& item) const { return item.nid == nid; }\n            bool operator!= (const node_iterator& item) const { return item.nid != nid; }\n\n            node_iterator& operator++()\n            {\n                ++nid;\n                return *this;\n            }\n\n            unsigned long nid;\n        };\n\n        struct neighbor_iterator\n        {\n            neighbor_iterator() : count(0) {}\n\n            bool operator== (const neighbor_iterator& item) const { return item.node_id() == node_id(); }\n            bool operator!= (const neighbor_iterator& item) const { return item.node_id() != node_id(); }\n            neighbor_iterator& operator++() \n            {\n                ++count;\n                return *this;\n            }\n\n            unsigned long node_id () const\n            {\n                if (home_node == 6)\n                    return 6;\n\n                if (home_node < 5)\n                {\n                    // all the nodes are connected to node 5 and nothing else\n                    if (count == 0)\n                        return 5;\n                    else\n                        return 6; // the number returned by the end() functions.\n                }\n                else if (count < 5)\n                {\n                    return count;\n                }\n                else\n                {\n                    return 6;\n                }\n\n            }\n\n            unsigned long home_node;\n            unsigned long count;\n        };\n\n        unsigned long number_of_nodes (\n        ) const\n        {\n            return 6;\n        }\n\n        node_iterator begin(\n        ) const\n        {\n            node_iterator temp;\n            temp.nid = 0;\n            return temp;\n        }\n\n        node_iterator end(\n        ) const\n        {\n            node_iterator temp;\n            temp.nid = 6;\n            return temp;\n        }\n\n        neighbor_iterator begin(\n            const node_iterator& it\n        ) const\n        {\n            neighbor_iterator temp;\n            temp.home_node = it.nid;\n            return temp;\n        }\n\n        neighbor_iterator begin(\n            const neighbor_iterator& it\n        ) const\n        {\n            neighbor_iterator temp;\n            temp.home_node = it.node_id();\n            return temp;\n        }\n\n        neighbor_iterator end(\n            const node_iterator& \n        ) const\n        {\n            neighbor_iterator temp;\n            temp.home_node = 6;\n            return temp;\n        }\n\n        neighbor_iterator end(\n            const neighbor_iterator& \n        ) const\n        {\n            neighbor_iterator temp;\n            temp.home_node = 6;\n            return temp;\n        }\n\n\n        unsigned long node_id (\n            const node_iterator& it\n        ) const\n        {\n            return it.nid;\n        }\n\n        unsigned long node_id (\n            const neighbor_iterator& it\n        ) const\n        {\n            return it.node_id();\n        }\n\n\n        unsigned long num_states (\n            const node_iterator& \n        ) const\n        {\n            return 3;\n        }\n\n        unsigned long num_states (\n            const neighbor_iterator& \n        ) const\n        {\n            return 3;\n        }\n\n        double factor_value (const node_iterator& it1, const node_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.nid, it2.nid, s1, s2); }\n        double factor_value (const neighbor_iterator& it1, const node_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.node_id(), it2.nid, s1, s2); }\n        double factor_value (const node_iterator& it1, const neighbor_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.nid, it2.node_id(), s1, s2); }\n        double factor_value (const neighbor_iterator& it1, const neighbor_iterator& it2, unsigned long s1, unsigned long s2) const\n        { return basic_factor_value(it1.node_id(), it2.node_id(), s1, s2); }\n\n    private:\n\n        double basic_factor_value (\n            unsigned long n1,\n            unsigned long n2,\n            unsigned long s1,\n            unsigned long s2\n        ) const\n        {\n            if (n1 > n2)\n            {\n                swap(n1,n2);\n                swap(s1,s2);\n            }\n\n\n            // basically ignore the other node in this factor.  The node we\n            // are ignoring is the center node of this star graph.  So we basically\n            // let it always have a value of 1.\n            if (s2 == 1)\n                return numbers(n1,s1) + 1;\n            else\n                return numbers(n1,s1);\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename map_problem>\n    double find_total_score (\n        const map_problem& prob,\n        const std::vector<unsigned long>& map_assignment\n    )\n    {\n        typedef typename map_problem::node_iterator node_iterator;\n        typedef typename map_problem::neighbor_iterator neighbor_iterator;\n\n        double score = 0;\n        for (node_iterator i = prob.begin(); i != prob.end(); ++i)\n        {\n            const unsigned long id_i = prob.node_id(i);\n            for (neighbor_iterator j = prob.begin(i); j != prob.end(i); ++j)\n            {\n                const unsigned long id_j = prob.node_id(j);\n                score += prob.factor_value(i,j, map_assignment[id_i], map_assignment[id_j]);\n            }\n        }\n\n        return score;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <\n        typename map_problem\n        >\n    void brute_force_find_max_factor_graph_nmplp (\n        const map_problem& prob,\n        std::vector<unsigned long>& map_assignment\n    )\n    {\n        std::vector<unsigned long> temp_assignment; \n        temp_assignment.resize(prob.number_of_nodes(),0);\n\n        double best_score = -std::numeric_limits<double>::infinity();\n\n        for (unsigned long i = 0; i < 255; ++i)\n        {\n            temp_assignment[0] = (i&0x01)!=0;\n            temp_assignment[1] = (i&0x02)!=0;\n            temp_assignment[2] = (i&0x04)!=0;\n            temp_assignment[3] = (i&0x08)!=0;\n            temp_assignment[4] = (i&0x10)!=0;\n            temp_assignment[5] = (i&0x20)!=0;\n            temp_assignment[6] = (i&0x40)!=0;\n            temp_assignment[7] = (i&0x80)!=0;\n\n            double score = find_total_score(prob,temp_assignment);\n            if (score > best_score)\n            {\n                best_score = score;\n                map_assignment = temp_assignment;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename map_problem>\n    void do_test(\n    )\n    {\n        print_spinner();\n        std::vector<unsigned long> map_assignment1, map_assignment2;\n        map_problem prob;\n        find_max_factor_graph_nmplp(prob, map_assignment1, 1000, 1e-8);\n\n        const double score1 = find_total_score(prob, map_assignment1); \n\n        brute_force_find_max_factor_graph_nmplp(prob, map_assignment2);\n        const double score2 = find_total_score(prob, map_assignment2); \n\n        dlog << LINFO << \"score NMPLP: \" << score1;\n        dlog << LINFO << \"score MAP:   \" << score2;\n\n        DLIB_TEST(std::abs(score1 - score2) < 1e-10);\n        DLIB_TEST(mat(map_assignment1) == mat(map_assignment2));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename map_problem>\n    void do_test2(\n    )\n    {\n        print_spinner();\n        std::vector<unsigned long> map_assignment1, map_assignment2;\n        map_problem prob;\n        find_max_factor_graph_nmplp(prob, map_assignment1, 10, 1e-8);\n\n        const double score1 = find_total_score(prob, map_assignment1); \n\n        map_assignment2.resize(6);\n        map_assignment2[0] = index_of_max(rowm(prob.numbers,0));\n        map_assignment2[1] = index_of_max(rowm(prob.numbers,1));\n        map_assignment2[2] = index_of_max(rowm(prob.numbers,2));\n        map_assignment2[3] = index_of_max(rowm(prob.numbers,3));\n        map_assignment2[4] = index_of_max(rowm(prob.numbers,4));\n        map_assignment2[5] = 1;\n        const double score2 = find_total_score(prob, map_assignment2); \n\n        dlog << LINFO << \"score NMPLP: \" << score1;\n        dlog << LINFO << \"score MAP:   \" << score2;\n        dlog << LINFO << \"MAP assignment: \"<< trans(mat(map_assignment1));\n\n        DLIB_TEST(std::abs(score1 - score2) < 1e-10);\n        DLIB_TEST(mat(map_assignment1) == mat(map_assignment2));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_find_max_factor_graph_nmplp : public tester\n    {\n    public:\n        test_find_max_factor_graph_nmplp (\n        ) :\n            tester (\"test_find_max_factor_graph_nmplp\",\n                    \"Runs tests on the find_max_factor_graph_nmplp routine.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            rnd.clear();\n\n            dlog << LINFO << \"test on a chain structured graph\";\n            for (int i = 0; i < 30; ++i)\n                do_test<map_problem_chain>();\n\n            dlog << LINFO << \"test on a 2 cycle graph\";\n            for (int i = 0; i < 30; ++i)\n                do_test<map_problem<false> >();\n\n            dlog << LINFO << \"test on a fully connected graph\";\n            for (int i = 0; i < 5; ++i)\n                do_test<map_problem<true> >();\n\n            dlog << LINFO << \"test on a tree structured graph\";\n            for (int i = 0; i < 10; ++i)\n                do_test2<map_problem2>();\n        }\n    } a;\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/find_max_factor_graph_viterbi.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/optimization.h>\n#include <dlib/rand.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.find_max_factor_graph_viterbi\");\n\n// ----------------------------------------------------------------------------------------\n\n    dlib::rand rnd;\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long O,\n        unsigned long NS,\n        unsigned long num_nodes,\n        bool all_negative \n        >\n    class map_problem\n    {\n    public:\n        unsigned long order() const { return O; }\n        unsigned long num_states() const { return NS; }\n\n        map_problem()\n        {\n            data = randm(number_of_nodes(),(long)std::pow(num_states(),(double)order()+1), rnd);\n            if (all_negative)\n                data = -data;\n        }\n\n        unsigned long number_of_nodes (\n        ) const\n        {\n            return num_nodes;\n        }\n\n        template <\n            typename EXP \n            >\n        double factor_value (\n            unsigned long node_id,\n            const matrix_exp<EXP>& node_states\n        ) const\n        {\n            if (node_states.size() == 1)\n                return data(node_id, node_states(0));\n            else if (node_states.size() == 2)\n                return data(node_id, node_states(0) + node_states(1)*NS);\n            else if (node_states.size() == 3)\n                return data(node_id, (node_states(0) + node_states(1)*NS)*NS + node_states(2));\n            else \n                return data(node_id, ((node_states(0) + node_states(1)*NS)*NS + node_states(2))*NS + node_states(3));\n        }\n\n        matrix<double> data;\n    };\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename map_problem\n        >\n    void brute_force_find_max_factor_graph_viterbi (\n        const map_problem& prob,\n        std::vector<unsigned long>& map_assignment\n    )\n    {\n        using namespace dlib::impl;\n        const int order = prob.order();\n        const int num_states = prob.num_states();\n\n        map_assignment.resize(prob.number_of_nodes());\n        double best_score = -std::numeric_limits<double>::infinity();\n        matrix<unsigned long,1,0> node_states;\n        node_states.set_size(prob.number_of_nodes());\n        node_states = 0;\n        do\n        {\n            double score = 0;\n            for (unsigned long i = 0; i < prob.number_of_nodes(); ++i)\n            {\n                score += prob.factor_value(i, (colm(node_states,range(i,i-std::min<int>(order,i)))));\n            }\n\n            if (score > best_score)\n            {\n                for (unsigned long i = 0; i < map_assignment.size(); ++i)\n                    map_assignment[i] = node_states(i);\n                best_score = score;\n            }\n\n        } while(advance_state(node_states,num_states));\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        unsigned long order,\n        unsigned long num_states,\n        unsigned long num_nodes,\n        bool all_negative\n        >\n    void do_test_()\n    {\n        dlog << LINFO << \"order: \"<< order \n                      << \"  num_states:   \" << num_states\n                      << \"  num_nodes:    \" << num_nodes\n                      << \"  all_negative: \" << all_negative;\n\n        for (int i = 0; i < 25; ++i)\n        {\n            print_spinner();\n            map_problem<order,num_states,num_nodes,all_negative> prob;\n            std::vector<unsigned long> assign, assign2;\n            brute_force_find_max_factor_graph_viterbi(prob, assign);\n            find_max_factor_graph_viterbi(prob, assign2);\n\n            DLIB_TEST_MSG(mat(assign) == mat(assign2),\n                          trans(mat(assign))\n                          << trans(mat(assign2))\n                          );\n        }\n    }\n\n    template <\n        unsigned long order,\n        unsigned long num_states,\n        unsigned long num_nodes\n        >\n    void do_test()\n    {\n        do_test_<order,num_states,num_nodes,false>();\n    }\n\n    template <\n        unsigned long order,\n        unsigned long num_states,\n        unsigned long num_nodes\n        >\n    void do_test_negative()\n    {\n        do_test_<order,num_states,num_nodes,true>();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_find_max_factor_graph_viterbi : public tester\n    {\n    public:\n        test_find_max_factor_graph_viterbi (\n        ) :\n            tester (\"test_find_max_factor_graph_viterbi\",\n                    \"Runs tests on the find_max_factor_graph_viterbi routine.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            do_test<1,3,0>();\n            do_test<1,3,1>();\n            do_test<1,3,2>();\n            do_test<0,3,2>();\n            do_test_negative<0,3,2>();\n\n            do_test<1,3,8>();\n            do_test<2,3,7>();\n            do_test_negative<2,3,7>();\n            do_test<3,3,8>();\n            do_test<4,3,8>();\n            do_test_negative<4,3,8>();\n            do_test<0,3,8>();\n            do_test<4,3,1>();\n            do_test<4,3,0>();\n\n            do_test<3,2,1>();\n            do_test<3,2,0>();\n            do_test<3,2,2>();\n            do_test<2,2,1>();\n            do_test_negative<3,2,1>();\n            do_test_negative<3,2,0>();\n            do_test_negative<3,2,2>();\n            do_test_negative<2,2,1>();\n\n            do_test<0,3,0>();\n            do_test<1,2,8>();\n            do_test<2,2,7>();\n            do_test<3,2,8>();\n            do_test<0,2,8>();\n\n            do_test<1,1,8>();\n            do_test<2,1,8>();\n            do_test<3,1,8>();\n            do_test<0,1,8>();\n        }\n    } a;\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/geometry.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/geometry.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/string.h>\n#include <dlib/matrix.h>\n#include <dlib/rand.h>\n#include <dlib/array2d.h>\n#include <dlib/image_transforms.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.geometry\");\n\n    void geometry_test (\n    )\n    /*!\n        ensures\n            - runs tests on the geometry stuff compliance with the specs\n    !*/\n    {        \n        print_spinner();\n\n        point p1;\n        point p2(2,3);\n\n        DLIB_TEST(p1.x() == 0);\n        DLIB_TEST(p1.y() == 0);\n        DLIB_TEST(p2.x() == 2);\n        DLIB_TEST(p2.y() == 3);\n\n        DLIB_TEST((-p2).x() == -2);\n        DLIB_TEST((-p2).y() == -3);\n\n\n        p2 += p2;\n        DLIB_TEST(p2.x() == 4);\n        DLIB_TEST(p2.y() == 6);\n\n        dlib::vector<double> v1 = point(1,0);\n        dlib::vector<double> v2(0,0,1);\n\n        p1 = v2.cross(v1);\n        DLIB_TEST(p1 == point(0,1));\n        DLIB_TEST(p1 != point(1,1));\n        DLIB_TEST(p1 != point(1,0));\n\n        p1 = point(2,3);\n        rectangle rect1 = p1;\n        DLIB_TEST(rect1.width() == 1);\n        DLIB_TEST(rect1.height() == 1);\n        p2 = point(1,1);\n\n        rect1 += p2;\n        DLIB_TEST(rect1.left() == 1);\n        DLIB_TEST(rect1.top() == 1);\n        DLIB_TEST(rect1.right() == 2);\n        DLIB_TEST(rect1.bottom() == 3);\n\n        DLIB_TEST(rect1.width() == 2);\n        DLIB_TEST(rect1.height() == 3);\n\n        // test the iostream << and >> operators (via string_cast and cast_to_string)\n        DLIB_TEST(string_cast<point>(\" (1, 2 )\") == point(1,2));\n        DLIB_TEST(string_cast<point>(\" ( -1, 2 )\") == point(-1,2));\n        DLIB_TEST(string_cast<rectangle>(\" [(1, 2 )(3,4)]\") == rectangle(1,2,3,4));\n        DLIB_TEST(string_cast<dlib::vector<double> >(\" (1, 2 , 3.5)\") == dlib::vector<double>(1,2,3.5));\n\n        DLIB_TEST(string_cast<rectangle>(cast_to_string(rect1)) == rect1);\n        DLIB_TEST(string_cast<point>(cast_to_string(p1)) == p1);\n        DLIB_TEST(string_cast<dlib::vector<double> >(cast_to_string(v1)) == v1);\n\n        rectangle rect2;\n\n        // test the serialization code\n        ostringstream sout;\n        serialize(rect1,sout);\n        serialize(p1,sout);\n        serialize(v1,sout);\n        serialize(rect1,sout);\n        serialize(p1,sout);\n        serialize(v1,sout);\n\n        istringstream sin(sout.str());\n\n        deserialize(rect2,sin);\n        deserialize(p2,sin);\n        deserialize(v2,sin);\n        DLIB_TEST(rect2 == rect1);\n        DLIB_TEST(p2 == p1);\n        DLIB_TEST(v2 == v1);\n        deserialize(rect2,sin);\n        deserialize(p2,sin);\n        deserialize(v2,sin);\n        DLIB_TEST(rect2 == rect1);\n        DLIB_TEST(p2 == p1);\n        DLIB_TEST(v2 == v1);\n        DLIB_TEST(sin.good());\n        DLIB_TEST(sin.get() == EOF);\n\n\n        v1.x() = 1;\n        v1.y() = 2;\n        v1.z() = 3;\n\n        matrix<double> mv = v1;\n        DLIB_TEST(mv.nr() == 3);\n        DLIB_TEST(mv.nc() == 1);\n        DLIB_TEST(mv(0) == 1);\n        DLIB_TEST(mv(1) == 2);\n        DLIB_TEST(mv(2) == 3);\n\n        set_all_elements(mv,0);\n        DLIB_TEST(mv(0) == 0);\n        DLIB_TEST(mv(1) == 0);\n        DLIB_TEST(mv(2) == 0);\n\n        mv(0) = 5;\n        mv(1) = 6;\n        mv(2) = 7;\n\n        v1 = mv;\n        DLIB_TEST(v1.x() == 5);\n        DLIB_TEST(v1.y() == 6);\n        DLIB_TEST(v1.z() == 7);\n\n\n        {\n            dlib::vector<double,2> vd2;\n            dlib::vector<double,3> vd3;\n            dlib::vector<long,2> vl2;\n            dlib::vector<long,3> vl3;\n\n            vd2.x() = 2.3;\n            vd2.y() = 4.7;\n\n            vd3.z() = 9;\n\n            vd3 = vd2;\n\n\n\n            vl2 = vd3;\n            vl3 = vd3;\n\n\n            DLIB_TEST(vd2.z() == 0);\n            DLIB_TEST(vd3.z() == 0);\n            DLIB_TEST(vl2.z() == 0);\n            DLIB_TEST(vl3.z() == 0);\n\n            DLIB_TEST(vl2.x() == 2);\n            DLIB_TEST(vl3.x() == 2);\n            DLIB_TEST(vl2.y() == 5);\n            DLIB_TEST(vl3.y() == 5);\n\n\n            DLIB_TEST(abs(vd2.cross(vd3).dot(vd2)) < 1e-7); \n            DLIB_TEST(abs(vd3.cross(vd2).dot(vd2)) < 1e-7); \n            DLIB_TEST(abs(vd2.cross(vd3).dot(vd3)) < 1e-7); \n            DLIB_TEST(abs(vd3.cross(vd2).dot(vd3)) < 1e-7); \n\n            DLIB_TEST(abs(vl2.cross(vl3).dot(vl2)) == 0); \n            DLIB_TEST(abs(vl3.cross(vl2).dot(vl2)) == 0); \n            DLIB_TEST(abs(vl2.cross(vl3).dot(vl3)) == 0); \n            DLIB_TEST(abs(vl3.cross(vl2).dot(vl3)) == 0); \n\n\n            DLIB_TEST((vd2-vd3).length() < 1e-7);\n\n            DLIB_TEST(vl2 == vl3);\n\n\n            vl2.x() = 0;\n            vl2.y() = 0;\n            vl3 = vl2;\n\n            vl2.x() = 4;\n            vl3.y() = 3;\n\n            DLIB_TEST(vl2.cross(vl3).length() == 12);\n            DLIB_TEST(vl3.cross(vl2).length() == 12);\n\n\n            matrix<double> m(3,3);\n            m = 1,2,3,\n                4,5,6,\n                7,8,9;\n\n            vd3.x() = 2;\n            vd3.y() = 3;\n            vd3.z() = 4;\n\n            vd3 = m*vd3;\n\n            DLIB_TEST_MSG(vd3.x() == 1*2 + 2*3 + 3*4,vd3.x() << \" == \" << (1*2 + 2*3 + 3*4));\n            DLIB_TEST(vd3.y() == 4*2 + 5*3 + 6*4);\n            DLIB_TEST(vd3.z() == 7*2 + 8*3 + 9*4);\n\n            (vd3*2).dot(vd3);\n            (vd2*2).dot(vd3);\n            (vd3*2).dot(vd2);\n            (vd2*2).dot(vd2);\n            (2*vd3*2).dot(vd3);\n            (2*vd2*2).dot(vd3);\n            (2*vd3*2).dot(vd2);\n            (2*vd2*2).dot(vd2);\n\n            (vd2 + vd3).dot(vd2);\n            (vd2 - vd3).dot(vd2);\n            (vd2/2).dot(vd2);\n            (vd3/2).dot(vd2);\n        }\n\n        {\n            dlib::vector<double,2> vd2;\n            dlib::vector<long,3> vl3;\n\n            vl3.x() = 1;\n            vl3.y() = 2;\n            vl3.z() = 3;\n\n            vd2.x() = 6.5;\n            vd2.y() = 7.5;\n\n            DLIB_TEST((vl3 + vd2).x() == 1+6.5);\n            DLIB_TEST((vl3 + vd2).y() == 2+7.5);\n            DLIB_TEST((vl3 + vd2).z() == 3+0);\n\n            DLIB_TEST((vl3 - vd2).x() == 1-6.5);\n            DLIB_TEST((vl3 - vd2).y() == 2-7.5);\n            DLIB_TEST((vl3 - vd2).z() == 3-0);\n\n        }\n\n        {\n            dlib::vector<double> v(3,4,5);\n            DLIB_TEST((-v).x() == -3.0);\n            DLIB_TEST((-v).y() == -4.0);\n            DLIB_TEST((-v).z() == -5.0);\n        }\n\n        {\n            rectangle rect;\n\n            point tl(2,3);\n            point tr(8,3);\n            point bl(2,9);\n            point br(8,9);\n\n            rect += tl;\n            rect += tr;\n            rect += bl;\n            rect += br;\n\n            DLIB_TEST(rect.tl_corner() == tl);\n            DLIB_TEST(rect.tr_corner() == tr);\n            DLIB_TEST(rect.bl_corner() == bl);\n            DLIB_TEST(rect.br_corner() == br);\n\n        }\n\n        {\n            point p1, center;\n\n            center = point(3,4);\n            p1 = point(10,4);\n\n            DLIB_TEST(rotate_point(center, p1, pi/2) == point(3,7+4));\n\n            center = point(3,3);\n            p1 = point(10,3);\n\n            DLIB_TEST(rotate_point(center, p1, pi/4) == point(8,8));\n            DLIB_TEST(rotate_point(center, p1, -pi/4) == point(8,-2));\n\n            DLIB_TEST(rotate_point(center, p1, pi/4 + 10*pi) == point(8,8));\n            DLIB_TEST(rotate_point(center, p1, -pi/4 + 10*pi) == point(8,-2));\n            DLIB_TEST(rotate_point(center, p1, pi/4 - 10*pi) == point(8,8));\n            DLIB_TEST(rotate_point(center, p1, -pi/4 - 10*pi) == point(8,-2));\n\n            point_rotator rot(pi/2);\n            DLIB_TEST(rot(point(1,0)) == point(0,1));\n            DLIB_TEST(rot(point(0,1)) == point(-1,0));\n            DLIB_TEST(point(rot.get_m()*(dlib::vector<double,2>(1,0))) == point(0,1));\n            DLIB_TEST(point(rot.get_m()*(dlib::vector<double,2>(0,1))) == point(-1,0));\n        }\n\n        {\n            rectangle rect;\n\n            rect = grow_rect(rect,1);\n            DLIB_TEST(rect.width() == 2);\n            DLIB_TEST(rect.height() == 2);\n            DLIB_TEST(rect.left() == -1);\n            DLIB_TEST(rect.top() == -1);\n            DLIB_TEST(rect.right() == 0);\n            DLIB_TEST(rect.bottom() == 0);\n        }\n        {\n            rectangle rect;\n\n            rect = grow_rect(rect,2);\n            DLIB_TEST(rect.width() == 4);\n            DLIB_TEST(rect.height() == 4);\n            DLIB_TEST(rect.left() == -2);\n            DLIB_TEST(rect.top() == -2);\n            DLIB_TEST(rect.right() == 1);\n            DLIB_TEST(rect.bottom() == 1);\n\n            rect = shrink_rect(rect,1);\n            DLIB_TEST(rect.width() == 2);\n            DLIB_TEST(rect.height() == 2);\n            DLIB_TEST(rect.left() == -1);\n            DLIB_TEST(rect.top() == -1);\n            DLIB_TEST(rect.right() == 0);\n            DLIB_TEST(rect.bottom() == 0);\n        }\n        {\n            std::vector< dlib::vector<double> > a;\n\n            dlib::vector<double> v;\n            dlib::rand rnd;\n\n            for (int i = 0; i < 10; ++i)\n            {\n                v.x() = rnd.get_random_double();\n                v.y() = rnd.get_random_double();\n                v.z() = rnd.get_random_double();\n                a.push_back(v);\n\n            }\n\n            // This test is just to make sure the covariance function can compile when used\n            // on a dlib::vector.  The actual test doesn't matter.\n            DLIB_TEST(sum(covariance(mat(a))) < 10); \n\n        }\n\n\n        DLIB_TEST(rectangle() + point(5,4) + point(10,10) == rectangle(5,4,10,10));\n\n        // make sure the center of a centered rectangle is always right\n        for (long x = -10; x <= 10; ++x)\n        {\n            for (long y = -10; y <= 10; ++y)\n            {\n                for (long w = 0; w < 10; ++w)\n                {\n                    for (long h = 0; h < 10; ++h)\n                    {\n                        DLIB_TEST(center(centered_rect(x,y,w,h)) == point(x,y));\n                    }\n                }\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_border_enumerator()\n    {\n\n\n\n        border_enumerator be;\n        DLIB_TEST(be.at_start() == true);\n        DLIB_TEST(be.size() == 0);\n        DLIB_TEST(be.current_element_valid() == false);\n        DLIB_TEST(be.move_next() == false);\n        DLIB_TEST(be.at_start() == false);\n        DLIB_TEST(be.current_element_valid() == false);\n        DLIB_TEST(be.move_next() == false);\n        DLIB_TEST(be.at_start() == false);\n        DLIB_TEST(be.current_element_valid() == false);\n        DLIB_TEST(be.size() == 0);\n\n        be = border_enumerator(rectangle(4,4,4,4),1);\n        DLIB_TEST(be.at_start() == true);\n        DLIB_TEST(be.size() == 1);\n        be = border_enumerator(rectangle(4,4,4,4),3);\n        DLIB_TEST(be.at_start() == true);\n        DLIB_TEST(be.size() == 1);\n        be = border_enumerator(rectangle(4,4,4,4),0);\n        DLIB_TEST(be.at_start() == true);\n        DLIB_TEST(be.size() == 0);\n        be = border_enumerator(rectangle(4,4,5,5),0);\n        DLIB_TEST(be.at_start() == true);\n        DLIB_TEST(be.size() == 0);\n        be = border_enumerator(rectangle(4,4,5,5),1);\n        DLIB_TEST(be.at_start() == true);\n        DLIB_TEST(be.size() == 4);\n        be = border_enumerator(rectangle(4,4,5,5),2);\n        DLIB_TEST(be.size() == 4);\n        be = border_enumerator(rectangle(4,4,6,6),1);\n        DLIB_TEST(be.size() == 8);\n        be = border_enumerator(rectangle(4,4,6,6),2);\n        DLIB_TEST(be.size() == 9);\n        be = border_enumerator(rectangle(4,4,6,6),3);\n        DLIB_TEST(be.size() == 9);\n        DLIB_TEST(be.at_start() == true);\n\n        array2d<unsigned char> img, img2;\n        for (int size = 1; size < 10; ++size)\n        {\n            for (int bs = 0; bs < 4; ++bs)\n            {\n                img.set_size(size,size);\n                img2.set_size(size,size);\n\n                assign_all_pixels(img, 1);\n                assign_all_pixels(img2, 1);\n\n                zero_border_pixels(img2, bs,bs);\n\n                be = border_enumerator(get_rect(img),bs);\n                DLIB_TEST(be.at_start() == true);\n                DLIB_TEST(be.current_element_valid() == false);\n                while (be.move_next())\n                {\n                    DLIB_TEST(be.at_start() == false);\n                    DLIB_TEST(be.current_element_valid() == true);\n                    DLIB_TEST_MSG(get_rect(img).contains(be.element()) == true,\n                                 get_rect(img) << \"   \" << be.element()\n                    );\n                    const point p = be.element();\n                    img[p.y()][p.x()] = 0;\n                }\n                DLIB_TEST(be.at_start() == false);\n                DLIB_TEST(be.current_element_valid() == false);\n                DLIB_TEST(be.move_next() == false);\n                DLIB_TEST(be.current_element_valid() == false);\n                DLIB_TEST(be.move_next() == false);\n                DLIB_TEST(be.current_element_valid() == false);\n                DLIB_TEST(be.at_start() == false);\n\n                DLIB_TEST(mat(img) == mat(img2));\n\n            }\n        }\n\n        for (int size = 1; size < 10; ++size)\n        {\n            for (int bs = 0; bs < 4; ++bs)\n            {\n                img.set_size(size,size+5);\n                img2.set_size(size,size+5);\n\n                assign_all_pixels(img, 1);\n                assign_all_pixels(img2, 1);\n\n                zero_border_pixels(img2, bs,bs);\n\n                const point shift(4,5);\n\n                be = border_enumerator(translate_rect(get_rect(img),shift),bs);\n                DLIB_TEST(be.at_start() == true);\n                DLIB_TEST(be.current_element_valid() == false);\n                while (be.move_next())\n                {\n                    DLIB_TEST(be.current_element_valid() == true);\n                    DLIB_TEST(be.at_start() == false);\n                    DLIB_TEST_MSG(get_rect(img).contains(be.element()-shift) == true,\n                                 get_rect(img) << \"   \" << be.element()\n                    );\n                    const point p = be.element()-shift;\n                    img[p.y()][p.x()] = 0;\n                }\n                DLIB_TEST(be.current_element_valid() == false);\n                DLIB_TEST(be.move_next() == false);\n                DLIB_TEST(be.current_element_valid() == false);\n                DLIB_TEST(be.move_next() == false);\n                DLIB_TEST(be.current_element_valid() == false);\n                DLIB_TEST(be.at_start() == false);\n\n                DLIB_TEST(mat(img) == mat(img2));\n\n            }\n        }\n\n        for (int size = 1; size < 10; ++size)\n        {\n            for (int bs = 0; bs < 4; ++bs)\n            {\n                img.set_size(size+2,size);\n                img2.set_size(size+2,size);\n\n                assign_all_pixels(img, 1);\n                assign_all_pixels(img2, 1);\n\n                zero_border_pixels(img2, bs,bs);\n\n                const point shift(-4,5);\n\n                be = border_enumerator(translate_rect(get_rect(img),shift),bs);\n                DLIB_TEST(be.current_element_valid() == false);\n                while (be.move_next())\n                {\n                    DLIB_TEST(be.current_element_valid() == true);\n                    DLIB_TEST_MSG(get_rect(img).contains(be.element()-shift) == true,\n                                 get_rect(img) << \"   \" << be.element()\n                    );\n                    const point p = be.element()-shift;\n                    img[p.y()][p.x()] = 0;\n                }\n                DLIB_TEST(be.current_element_valid() == false);\n                DLIB_TEST(be.move_next() == false);\n                DLIB_TEST(be.current_element_valid() == false);\n                DLIB_TEST(be.move_next() == false);\n                DLIB_TEST(be.current_element_valid() == false);\n\n                DLIB_TEST(mat(img) == mat(img2));\n\n            }\n        }\n\n        {\n            matrix<bool,4,5> hits, truth;\n            const rectangle rect = rectangle(1,1,4,3); \n\n            border_enumerator be(rect, rectangle(2,2, 3, 3));\n            DLIB_TEST(be.size() == 8);\n            hits = false;\n            while (be.move_next())\n            {\n                DLIB_TEST(rect.contains(be.element()));\n                hits(be.element().y(), be.element().x()) = true;\n            }\n            DLIB_TEST(be.current_element_valid() == false);\n            DLIB_TEST(be.size() == 8);\n            truth = false;\n            truth(1,1) = truth(1,2) = truth(1,3) = truth(1,4) = truth(2,1) =\n                truth(3,1) = truth(2,4) = truth(3,4) = true;\n            DLIB_TEST_MSG(truth == hits, truth << endl << hits);\n\n\n            \n\n            be = border_enumerator(rect, rectangle(0,0, 9, 9));\n            DLIB_TEST(be.size() == 0);\n            hits = false;\n            while (be.move_next())\n            {\n                DLIB_TEST(rect.contains(be.element()));\n                hits(be.element().y(), be.element().x()) = true;\n            }\n            DLIB_TEST(be.current_element_valid() == false);\n            DLIB_TEST(be.size() == 0);\n            truth = false;\n            DLIB_TEST(truth == hits);\n\n\n\n            be = border_enumerator(rect, rectangle(0,0, 3, 9));\n            DLIB_TEST(be.size() == 3);\n            hits = false;\n            while (be.move_next())\n            {\n                DLIB_TEST(rect.contains(be.element()));\n                hits(be.element().y(), be.element().x()) = true;\n            }\n            DLIB_TEST(be.current_element_valid() == false);\n            DLIB_TEST(be.size() == 3);\n            truth = false;\n            truth(1,4) = truth(2,4) = truth(3,4) = true;\n            DLIB_TEST(truth == hits);\n\n\n\n\n            be = border_enumerator(rect, rectangle(2,1, 4, 3));\n            DLIB_TEST(be.size() == 3);\n            hits = false;\n            while (be.move_next())\n            {\n                DLIB_TEST(rect.contains(be.element()));\n                hits(be.element().y(), be.element().x()) = true;\n            }\n            DLIB_TEST(be.current_element_valid() == false);\n            DLIB_TEST(be.size() == 3);\n            truth = false;\n            truth(1,1) = truth(2,1) = truth(3,1) = true;\n            DLIB_TEST(truth == hits);\n\n\n\n            be = border_enumerator(rect, rectangle(1,1, 5, 2));\n            DLIB_TEST(be.size() == 4);\n            hits = false;\n            while (be.move_next())\n            {\n                DLIB_TEST(rect.contains(be.element()));\n                hits(be.element().y(), be.element().x()) = true;\n            }\n            DLIB_TEST(be.current_element_valid() == false);\n            DLIB_TEST(be.size() == 4);\n            truth = false;\n            truth(3,1) = truth(3,2) = truth(3,3) = truth(3,4) = true;\n            DLIB_TEST(truth == hits);\n\n\n\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_find_affine_transform()\n    {\n        //typedef dlib::vector<double,2> vect;\n        typedef point vect;\n        std::vector<vect> from, to;\n\n        from.push_back(vect(0,0));\n        to.push_back(vect(0,1));\n\n        from.push_back(vect(0,1));\n        to.push_back(vect(1,1));\n\n        from.push_back(vect(1,1));\n        to.push_back(vect(1,0));\n\n        from.push_back(vect(1,0));\n        to.push_back(vect(0,0));\n\n        point_transform_affine t = find_affine_transform(from,to);\n        point_transform_affine tinv = inv(t);\n\n        for (unsigned long i = 0; i < from.size(); ++i)\n        {\n            dlog << LINFO << \"affine transformation error: \"<< length(t(from[i])-to[i]);\n            DLIB_TEST(length(t(from[i])-to[i]) < 1e-14);\n            DLIB_TEST(length(tinv(t(from[i]))-from[i]) < 1e-14);\n            DLIB_TEST(length(t(tinv(from[i]))-from[i]) < 1e-14);\n        }\n\n        ostringstream sout;\n        serialize(t, sout);\n        istringstream sin(sout.str());\n        point_transform_affine t2;\n        DLIB_TEST(length(t2(point(2,3)) - point(2,3)) < 1e-14);\n        deserialize(t2, sin);\n        DLIB_TEST(max(abs(t2.get_m()-t.get_m())) < 1e-14);\n        DLIB_TEST(max(abs(t2.get_b()-t.get_b())) < 1e-14);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double projective_transform_pass_rate(const double error_rate)\n    {\n        print_spinner();\n        dlog << LINFO << \"projective_transform_pass_rate, error_rate: \"<< error_rate;\n        dlib::rand rnd;\n        running_stats<double> pass_rate;\n        for (int rounds = 0; rounds < 1000; ++rounds)\n        {\n            running_stats<double> rs, rs_true;\n            matrix<double> H = 2*(randm(3,3,rnd)-0.5);\n\n            H(0,2) = rnd.get_random_gaussian()*10;\n            H(1,2) = rnd.get_random_gaussian()*10;\n\n\n            H(2,0) = rnd.get_random_double()*2.1;\n            H(2,1) = rnd.get_random_double()*2.1;\n            H(2,2) = 1 + rnd.get_random_gaussian()*3.1; \n\n            point_transform_projective tran(H);\n            point_transform_projective traninv = inv(tran);\n\n            const int num = rnd.get_random_32bit_number()%8 + 4;\n\n            std::vector<dlib::vector<double,2> > from_points, to_points;\n            for (int i = 0; i < num; ++i)\n            {\n                dlib::vector<double,2> p = randm(2,1,rnd)*1000;\n                from_points.push_back(p);\n                to_points.push_back(tran(p) + (randm(2,1,rnd)-0.5)*error_rate);\n                DLIB_TEST(length(traninv(tran(p))-p) <= 1e-5);\n                DLIB_TEST(length(tran(traninv(p))-p) <= 1e-5);\n            }\n\n\n            point_transform_projective tran2 = find_projective_transform(from_points, to_points);\n\n            for (unsigned long i = 0; i < from_points.size(); ++i)\n            {\n                const double err = length_squared(tran2(from_points[i]) - to_points[i]);\n                rs.add(err);\n                const double err_true = length_squared(tran(from_points[i]) - to_points[i]);\n                rs_true.add(err_true);\n            }\n\n            if ( rs.mean() < 0.01)\n            {\n                pass_rate.add(1);\n            }\n            else\n            {\n                dlog << LINFO << \" errors: mean/max: \" << rs.mean() << \"  \" << rs.max();\n                pass_rate.add(0);\n            }\n\n            ostringstream sout;\n            serialize(tran, sout);\n            istringstream sin(sout.str());\n            point_transform_projective tran3;\n            DLIB_TEST(length(tran3(point(2,3)) - point(2,3)) < 1e-14);\n            deserialize(tran3, sin);\n            DLIB_TEST(max(abs(tran3.get_m()-tran.get_m())) < 1e-14);\n        }\n\n        dlog << LINFO << \" pass_rate.mean(): \"<< pass_rate.mean();\n        return pass_rate.mean();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void test_find_similarity_transform()\n    {\n        print_spinner();\n        std::vector<dlib::vector<T,2> > from_points, to_points;\n\n        from_points.push_back(dlib::vector<T,2>(0,0));\n        from_points.push_back(dlib::vector<T,2>(0,1));\n        from_points.push_back(dlib::vector<T,2>(1,0));\n\n        to_points.push_back(dlib::vector<T,2>(8,0));\n        to_points.push_back(dlib::vector<T,2>(6,0));\n        to_points.push_back(dlib::vector<T,2>(8,2));\n\n        point_transform_affine tform = find_similarity_transform(from_points, to_points);\n\n        for (unsigned long i = 0; i < from_points.size(); ++i)\n        {\n            DLIB_TEST(length(tform(from_points[i]) - to_points[i]) < 1e-14);\n        }\n    }\n\n    template <typename T>\n    void test_find_similarity_transform2()\n    {\n        print_spinner();\n        std::vector<dlib::vector<T,2> > from_points, to_points;\n\n        from_points.push_back(dlib::vector<T,2>(0,0));\n        from_points.push_back(dlib::vector<T,2>(0,1));\n\n        to_points.push_back(dlib::vector<T,2>(8,0));\n        to_points.push_back(dlib::vector<T,2>(6,0));\n\n        point_transform_affine tform = find_similarity_transform(from_points, to_points);\n\n        for (unsigned long i = 0; i < from_points.size(); ++i)\n        {\n            DLIB_TEST(length(tform(from_points[i]) - to_points[i]) < 1e-14);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class geometry_tester : public tester\n    {\n    public:\n        geometry_tester (\n        ) :\n            tester (\"test_geometry\",\n                    \"Runs tests on the geometry stuff.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            geometry_test();\n            test_border_enumerator();\n            test_find_affine_transform();\n            DLIB_TEST(projective_transform_pass_rate(0.1) > 0.99);\n            DLIB_TEST(projective_transform_pass_rate(0.0) == 1);\n\n            test_find_similarity_transform<double>(); \n            test_find_similarity_transform2<double>(); \n            test_find_similarity_transform<float>(); \n            test_find_similarity_transform2<float>(); \n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/graph.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/graph.h>\n#include <dlib/graph_utils.h>\n#include <dlib/set.h>\n\n#include \"tester.h\"\n\n// This is called an unnamed-namespace and it has the effect of making everything inside this file \"private\"\n// so that everything you declare will have static linkage.  Thus we won't have any multiply\n// defined symbol errors coming out of the linker when we try to compile the test suite.\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n\n\n    // Declare the logger we will use in this test.  The name of the tester \n    // should start with \"test.\"\n    logger dlog(\"test.graph\");\n\n    template <\n        typename graph\n        >\n    void graph_test (\n    )\n    /*!\n        requires\n            - graph is an implementation of graph/graph_kernel_abstract.h \n              is instantiated with int\n        ensures\n            - runs tests on graph for compliance with the specs\n    !*/\n    {        \n\n        print_spinner();\n\n        COMPILE_TIME_ASSERT(is_graph<graph>::value);\n\n        graph a, b;\n        dlib::set<unsigned long>::compare_1b_c s;\n\n        DLIB_TEST(graph_contains_length_one_cycle(a) == false);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n\n        DLIB_TEST(a.number_of_nodes() == 0);\n\n        a.set_number_of_nodes(5);\n        DLIB_TEST(graph_is_connected(a) == false);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n        DLIB_TEST(a.number_of_nodes() == 5);\n        DLIB_TEST(graph_contains_length_one_cycle(a) == false);\n\n        for (int i = 0; i < 5; ++i)\n        {\n            a.node(i).data = i;\n            DLIB_TEST(a.node(i).index() == (unsigned int)i);\n        }\n\n        a.remove_node(1);\n\n        DLIB_TEST(a.number_of_nodes() == 4);\n\n\n        // make sure that only the number with data == 1 was removed\n        int count = 0;\n        for (int i = 0; i < 4; ++i)\n        {\n            count += a.node(i).data;\n            DLIB_TEST(a.node(i).number_of_neighbors() == 0);\n            DLIB_TEST(a.node(i).index() == (unsigned int)i);\n        }\n\n        DLIB_TEST(count == 9);\n\n\n        a.add_edge(1,1);\n        DLIB_TEST(graph_contains_length_one_cycle(a) == true);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n        DLIB_TEST(a.has_edge(1,1));\n        DLIB_TEST(a.node(1).number_of_neighbors() == 1);\n\n        a.add_edge(1,3);\n        DLIB_TEST(a.node(1).number_of_neighbors() == 2);\n        DLIB_TEST(a.node(2).number_of_neighbors() == 0);\n        DLIB_TEST(a.node(3).number_of_neighbors() == 1);\n        DLIB_TEST(a.has_edge(1,1));\n        DLIB_TEST(a.has_edge(1,3));\n        DLIB_TEST(a.has_edge(3,1));\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n        a.remove_edge(1,1);\n        DLIB_TEST(graph_contains_length_one_cycle(a) == false);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n        DLIB_TEST(a.node(1).number_of_neighbors() == 1);\n        DLIB_TEST(a.node(2).number_of_neighbors() == 0);\n        DLIB_TEST(a.node(3).number_of_neighbors() == 1);\n        DLIB_TEST(a.has_edge(1,1) == false);\n        DLIB_TEST(a.has_edge(1,3));\n        DLIB_TEST(a.has_edge(3,1));\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n\n        swap(a,b);\n\n\n        DLIB_TEST(graph_contains_undirected_cycle(b) == false);\n        DLIB_TEST(b.node(1).number_of_neighbors() == 1);\n        DLIB_TEST(b.node(2).number_of_neighbors() == 0);\n        DLIB_TEST(b.node(3).number_of_neighbors() == 1);\n        DLIB_TEST(b.has_edge(1,1) == false);\n        DLIB_TEST(b.has_edge(1,3));\n        DLIB_TEST(b.has_edge(3,1));\n        DLIB_TEST(graph_contains_undirected_cycle(b) == false);\n\n        DLIB_TEST(a.number_of_nodes() == 0);\n        DLIB_TEST(b.number_of_nodes() == 4);\n\n        copy_graph_structure(b,b);\n        DLIB_TEST(b.number_of_nodes() == 4);\n\n        b.add_edge(1,2);\n        DLIB_TEST(graph_contains_undirected_cycle(b) == false);\n        DLIB_TEST(graph_contains_undirected_cycle(b) == false);\n        b.add_edge(3,2);\n        DLIB_TEST(graph_contains_undirected_cycle(b) == true);\n        b.add_edge(1,1);\n        DLIB_TEST(graph_is_connected(b) == false);\n        b.add_edge(0,2);\n        DLIB_TEST(graph_is_connected(b) == true);\n\n        DLIB_TEST(graph_contains_undirected_cycle(b) == true);\n\n        DLIB_TEST(a.number_of_nodes() == 0);\n\n        for (unsigned long i = 0; i < b.number_of_nodes(); ++i)\n        {\n            for (unsigned long j = 0; j < b.node(i).number_of_neighbors(); ++j)\n            {\n                b.node(i).edge(j) = 'c';\n            }\n        }\n\n        b.node(1).edge(0) = 'a';\n        const unsigned long e1 = b.node(1).neighbor(0).index();\n        b.node(0).edge(0) = 'n';\n        const unsigned long e2 = b.node(0).neighbor(0).index();\n\n        ostringstream sout;\n        serialize(b, sout);\n        istringstream sin(sout.str());\n\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n\n        a.set_number_of_nodes(10);\n        deserialize(a, sin);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n\n        for (unsigned long i = 0; i < a.number_of_nodes(); ++i)\n        {\n            for (unsigned long j = 0; j < a.node(i).number_of_neighbors(); ++j)\n            {\n                if ((i == 0 && a.node(i).neighbor(j).index() == e2) ||\n                    (i == e2 && a.node(i).neighbor(j).index() == 0) )\n                {\n                    DLIB_TEST(a.node(i).edge(j) == 'n');\n                }\n                else if ((i == 1 && a.node(i).neighbor(j).index() == e1) ||\n                         (i == e1 && a.node(i).neighbor(j).index() == 1))\n                {\n                    DLIB_TEST(a.node(i).edge(j) == 'a');\n                }\n                else \n                {\n                    DLIB_TEST(i != 0 || a.node(i).neighbor(j).index() != e2);\n                    DLIB_TEST_MSG(a.node(i).edge(j) == 'c',a.node(i).edge(j));\n                }\n            }\n        }\n\n        DLIB_TEST(a.number_of_nodes() == 4);\n        DLIB_TEST(a.has_edge(1,2) == true);\n        DLIB_TEST(a.has_edge(3,2) == true);\n        DLIB_TEST(a.has_edge(1,1) == true);\n        DLIB_TEST(a.has_edge(0,2) == true);\n        DLIB_TEST(a.has_edge(1,3) == true);\n        DLIB_TEST(a.has_edge(0,1) == false);\n        DLIB_TEST(a.has_edge(0,3) == false);\n        DLIB_TEST(a.has_edge(0,0) == false);\n        DLIB_TEST(a.has_edge(1,0) == false);\n        DLIB_TEST(a.has_edge(3,0) == false);\n\n\n        for (unsigned long i = 0; i < a.number_of_nodes(); ++i)\n        {\n            a.node(i).data = static_cast<int>(i);\n        }\n\n        a.remove_node(2);\n        DLIB_TEST(a.number_of_nodes() == 3);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n\n        count = 0;\n        for (unsigned long i = 0; i < a.number_of_nodes(); ++i)\n        {\n            if (a.node(i).data == 0)\n            {\n                DLIB_TEST(a.node(i).number_of_neighbors() == 0);\n            }\n            else if (a.node(i).data == 1)\n            {\n                DLIB_TEST(a.node(i).number_of_neighbors() == 2);\n            }\n            else if (a.node(i).data == 3)\n            {\n                DLIB_TEST(a.node(i).number_of_neighbors() == 1);\n            }\n            else\n            {\n                DLIB_TEST_MSG(false,\"this is impossible\");\n            }\n\n            for (unsigned long j = 0; j < a.number_of_nodes(); ++j)\n            {\n                if ((a.node(i).data == 1 && a.node(j).data == 1) || \n                    (a.node(i).data == 1 && a.node(j).data == 3) ||\n                    (a.node(i).data == 3 && a.node(j).data == 1))\n                {\n                    DLIB_TEST(a.has_edge(i,j) == true);\n                    ++count;\n                }\n                else\n                {\n                    DLIB_TEST(a.has_edge(i,j) == false);\n                }\n            }\n        }\n        DLIB_TEST_MSG(count == 3,count);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == true);\n        a.remove_edge(1,1);\n        DLIB_TEST(graph_contains_undirected_cycle(a) == false);\n\n        DLIB_TEST(b.number_of_nodes() == 4);\n        b.clear();\n        DLIB_TEST(b.number_of_nodes() == 0);\n\n\n        a.clear();\n\n            /*\n                1      7\n                |     / \\\n                2    6   0\n                 \\  /    |\n                   3    /\n                  / \\  /\n                 4    5\n            */\n        a.set_number_of_nodes(8);\n        a.add_edge(1,2);\n        a.add_edge(2,3);\n        a.add_edge(3,4);\n        a.add_edge(3,5);\n        a.add_edge(3,6);\n        a.add_edge(6,7);\n        a.add_edge(7,0);\n        a.add_edge(0,5);\n\n        DLIB_TEST(graph_is_connected(a));\n\n        dlib::set<dlib::set<unsigned long>::compare_1b_c>::kernel_1b_c sos;\n\n        dlib::graph<dlib::set<unsigned long>::compare_1b_c, dlib::set<unsigned long>::compare_1b_c>::kernel_1a_c join_tree;\n        unsigned long temp;\n        triangulate_graph_and_find_cliques(a,sos);\n        DLIB_TEST(a.number_of_nodes() == 8);\n\n        create_join_tree(a, join_tree);\n        DLIB_TEST(join_tree.number_of_nodes() == 6);\n        DLIB_TEST(graph_is_connected(join_tree) == true);\n        DLIB_TEST(graph_contains_undirected_cycle(join_tree) == false);\n        DLIB_TEST(is_join_tree(a, join_tree));\n\n        // check old edges\n        DLIB_TEST(a.has_edge(1,2));\n        DLIB_TEST(a.has_edge(2,3));\n        DLIB_TEST(a.has_edge(3,4));\n        DLIB_TEST(a.has_edge(3,5));\n        DLIB_TEST(a.has_edge(3,6));\n        DLIB_TEST(a.has_edge(6,7));\n        DLIB_TEST(a.has_edge(7,0));\n        DLIB_TEST(a.has_edge(0,5));\n\n        DLIB_TEST(graph_is_connected(a));\n\n        DLIB_TEST(sos.size() == 6);\n\n\n        temp = 1; s.add(temp);\n        temp = 2; s.add(temp);\n        DLIB_TEST(sos.is_member(s));\n        s.clear();\n        temp = 2; s.add(temp);\n        temp = 3; s.add(temp);\n        DLIB_TEST(sos.is_member(s));\n        s.clear();\n        temp = 4; s.add(temp);\n        temp = 3; s.add(temp);\n        DLIB_TEST(sos.is_member(s));\n\n        sos.reset();\n        while (sos.move_next())\n        {\n            DLIB_TEST(is_clique(a, sos.element()));\n            DLIB_TEST(is_maximal_clique(a, sos.element()));\n        }\n\n    }\n\n\n    void test_copy()\n    {\n        {\n            graph<int,int>::kernel_1a_c a,b;\n\n            a.set_number_of_nodes(3);\n            a.node(0).data = 1;\n            a.node(1).data = 2;\n            a.node(2).data = 3;\n            a.add_edge(0,1);\n            a.add_edge(0,2);\n            edge(a,0,1) = 4;\n            edge(a,0,2) = 5;\n\n            a.add_edge(0,0);\n            edge(a,0,0) = 9;\n            copy_graph(a, b);\n\n            DLIB_TEST(b.number_of_nodes() == 3);\n            DLIB_TEST(b.node(0).data == 1);\n            DLIB_TEST(b.node(1).data == 2);\n            DLIB_TEST(b.node(2).data == 3);\n            DLIB_TEST(edge(b,0,1) == 4);\n            DLIB_TEST(edge(b,0,2) == 5);\n            DLIB_TEST(edge(b,0,0) == 9);\n        }\n        {\n            graph<int,int>::kernel_1a_c a,b;\n\n            a.set_number_of_nodes(4);\n            a.node(0).data = 1;\n            a.node(1).data = 2;\n            a.node(2).data = 3;\n            a.node(3).data = 8;\n            a.add_edge(0,1);\n            a.add_edge(0,2);\n            a.add_edge(2,3);\n            edge(a,0,1) = 4;\n            edge(a,0,2) = 5;\n            edge(a,2,3) = 6;\n\n            copy_graph(a, b);\n\n            DLIB_TEST(b.number_of_nodes() == 4);\n            DLIB_TEST(b.node(0).data == 1);\n            DLIB_TEST(b.node(1).data == 2);\n            DLIB_TEST(b.node(2).data == 3);\n            DLIB_TEST(b.node(3).data == 8);\n            DLIB_TEST(edge(b,0,1) == 4);\n            DLIB_TEST(edge(b,0,2) == 5);\n            DLIB_TEST(edge(b,2,3) == 6);\n        }\n    }\n\n\n\n    class graph_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a test for the graph object.  When it is constructed\n                it adds itself into the testing framework.  The command line switch is\n                specified as test_directed_graph by passing that string to the tester constructor.\n        !*/\n    public:\n        graph_tester (\n        ) :\n            tester (\"test_graph\",\n                    \"Runs tests on the graph component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a_c\";\n            graph_test<graph<int>::kernel_1a_c>();\n\n            dlog << LINFO << \"testing kernel_1a\";\n            graph_test<graph<int>::kernel_1a>();\n\n            test_copy();\n        }\n    } a;\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/graph_cuts.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/graph_cuts.h>\n#include <dlib/graph_utils.h>\n#include <dlib/directed_graph.h>\n#include <dlib/graph.h>\n#include <dlib/rand.h>\n#include <dlib/hash.h>\n#include <dlib/image_transforms.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n\n    logger dlog(\"test.graph_cuts\");\n\n// ----------------------------------------------------------------------------------------\n\n    class dense_potts_problem \n    {\n    public:\n        typedef double value_type;\n    private:\n\n        matrix<value_type,0,1> factors1;\n        matrix<value_type> factors2;\n        matrix<node_label,0,1> labels;\n    public:\n\n        dense_potts_problem (\n            unsigned long num_nodes,\n            dlib::rand& rnd\n        )\n        {\n            factors1 = -7*(randm(num_nodes, 1, rnd)-0.5);\n            factors2 = make_symmetric(randm(num_nodes, num_nodes, rnd) > 0.5);\n            labels.set_size(num_nodes);\n            labels = FREE_NODE;\n        }\n\n        unsigned long number_of_nodes (\n        ) const { return factors1.nr(); }\n\n        unsigned long number_of_neighbors (\n            unsigned long // idx\n        ) const { return number_of_nodes()-1; }\n\n        unsigned long get_neighbor_idx (\n            unsigned long node_id1,\n            unsigned long node_id2\n        ) const\n        {\n            if (node_id2 < node_id1)\n                return node_id2;\n            else\n                return node_id2-1;\n        }\n\n        unsigned long get_neighbor (\n            unsigned long node_id,\n            unsigned long idx\n        ) const\n        {\n            DLIB_TEST(node_id < number_of_nodes());\n            DLIB_TEST(idx < number_of_neighbors(node_id));\n            if (idx < node_id)\n                return idx;\n            else\n                return idx+1;\n        }\n\n        void set_label (\n            const unsigned long& idx,\n            node_label value\n        )\n        {\n            labels(idx) = value;\n        }\n\n        node_label get_label (\n            const unsigned long& idx\n        ) const\n        {\n            return labels(idx);\n        }\n\n\n        value_type factor_value (unsigned long idx) const\n        {\n            DLIB_TEST(idx < number_of_nodes());\n\n            return factors1(idx);\n        }\n\n        value_type factor_value_disagreement (unsigned long idx1, unsigned long idx2) const\n        {\n            DLIB_TEST(idx1 != idx2);\n            DLIB_TEST(idx1 < number_of_nodes());\n            DLIB_TEST(idx2 < number_of_nodes());\n            DLIB_TEST(get_neighbor_idx(idx1,idx2) < number_of_neighbors(idx1));\n            DLIB_TEST(get_neighbor_idx(idx2,idx1) < number_of_neighbors(idx2));\n\n            return factors2(idx1, idx2);\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class image_potts_problem \n    {\n    public:\n        typedef double value_type;\n        const static unsigned long max_number_of_neighbors = 4;\n    private:\n\n        matrix<value_type,0,1> factors1;\n        matrix<value_type> factors2;\n        matrix<node_label,0,1> labels;\n        long nr;\n        long nc;\n        rectangle rect, inner_rect;\n        mutable long count;\n    public:\n\n        image_potts_problem (\n            long nr_,\n            long nc_,\n            dlib::rand& rnd\n        ) : nr(nr_), nc(nc_)\n        {\n            rect = rectangle(0,0,nc-1,nr-1);\n            inner_rect = shrink_rect(rect,1);\n            const unsigned long num_nodes = nr*nc;\n            factors1 = -7*(randm(num_nodes, 1, rnd));\n            factors2 = randm(num_nodes, 4, rnd) > 0.5;\n\n            //factors1 = 0;\n            //set_rowm(factors1, range(0, factors1.nr()/2)) = -1;\n\n            labels.set_size(num_nodes);\n            labels = FREE_NODE;\n\n            count = 0;\n        }\n\n        ~image_potts_problem()\n        {\n            dlog << LTRACE << \"interface calls: \" << count;\n            dlog << LTRACE << \"labels hash: \"<< murmur_hash3_128bit(&labels(0), labels.size()*sizeof(labels(0)), 0).first;\n        }\n\n        unsigned long number_of_nodes (\n        ) const { return factors1.nr(); }\n\n        unsigned long number_of_neighbors (\n            unsigned long idx\n        ) const \n        { \n            ++count;\n            const point& p = get_loc(idx);\n            if (inner_rect.contains(p))\n                return 4;\n            else if (p == rect.tl_corner() ||\n                     p == rect.bl_corner() ||\n                     p == rect.tr_corner() ||\n                     p == rect.br_corner() )\n                return 2;\n            else\n                return 3;\n        }\n\n        unsigned long get_neighbor_idx (\n            long node_id1,\n            long node_id2\n        ) const\n        {\n            ++count;\n            const point& p = get_loc(node_id1);\n            long ret = 0;\n            if (rect.contains(p + point(1,0)))\n            {\n                if (node_id2-node_id1 == 1)\n                    return ret;\n                ++ret;\n            }\n\n            if (rect.contains(p - point(1,0)))\n            {\n                if (node_id2-node_id1 == -1)\n                    return ret;\n                ++ret;\n            }\n\n            if (rect.contains(p + point(0,1)))\n            {\n                if (node_id2-node_id1 == nc)\n                    return ret;\n                ++ret;\n            }\n\n            return ret;\n        }\n\n        unsigned long get_neighbor (\n            long node_id,\n            long idx\n        ) const\n        {\n            ++count;\n            const point& p = get_loc(node_id);\n            if (rect.contains(p + point(1,0)))\n            {\n                if (idx == 0)\n                    return node_id+1;\n                --idx;\n            }\n\n            if (rect.contains(p - point(1,0)))\n            {\n                if (idx == 0)\n                    return node_id-1;\n                --idx;\n            }\n\n            if (rect.contains(p + point(0,1)))\n            {\n                if (idx == 0)\n                    return node_id+nc;\n                --idx;\n            }\n\n            return node_id-nc;\n        }\n\n        void set_label (\n            const unsigned long& idx,\n            node_label value\n        )\n        {\n            ++count;\n            labels(idx) = value;\n        }\n\n        node_label get_label (\n            const unsigned long& idx\n        ) const\n        {\n            ++count;\n            return labels(idx);\n        }\n\n        value_type factor_value (unsigned long idx) const\n        {\n            ++count;\n            DLIB_TEST(idx < (unsigned long)number_of_nodes());\n\n            return factors1(idx);\n        }\n\n        value_type factor_value_disagreement (unsigned long idx1, unsigned long idx2) const\n        {\n            ++count;\n            DLIB_TEST(idx1 != idx2);\n            DLIB_TEST(idx1 < (unsigned long)number_of_nodes());\n            DLIB_TEST(idx2 < (unsigned long)number_of_nodes());\n\n            // make this function symmetric\n            if (idx1 > idx2)\n                swap(idx1,idx2);\n\n\n            DLIB_TEST(get_neighbor(idx1, get_neighbor_idx(idx1, idx2)) == idx2);\n            DLIB_TEST(get_neighbor(idx2, get_neighbor_idx(idx2, idx1)) == idx1);\n\n            // the neighbor relationship better be symmetric\n            DLIB_TEST(get_neighbor_idx(idx1,idx2) < number_of_neighbors(idx1));\n            DLIB_TEST_MSG(get_neighbor_idx(idx2,idx1) < number_of_neighbors(idx2),\n                         \"\\n idx1: \"<< idx1  <<\n                         \"\\n idx2: \"<< idx2  <<\n                         \"\\n get_neighbor_idx(idx2,idx1): \"<< get_neighbor_idx(idx2,idx1) <<\n                         \"\\n number_of_neighbors(idx2): \" << number_of_neighbors(idx2) <<\n                         \"\\n nr: \"<< nr << \n                         \"\\n nc: \"<< nc \n            );\n\n            return factors2(idx1, get_neighbor_idx(idx1,idx2));\n        }\n\n    private:\n        point get_loc (\n            const unsigned long& idx\n        ) const\n        {\n            return point(idx%nc, idx/nc);\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename potts_model>\n    void brute_force_potts_model (\n        potts_model& g\n    )\n    {\n        potts_model m(g);\n\n        const unsigned long num = (unsigned long)std::pow(2.0, (double)m.number_of_nodes());\n\n        double best_score = -std::numeric_limits<double>::infinity();\n        for (unsigned long i = 0; i < num; ++i)\n        {\n            for (unsigned long j = 0; j < m.number_of_nodes(); ++j)\n            {\n                unsigned long T = (1)<<j;\n                T = (T&i);\n                if (T != 0)\n                    m.set_label(j,SINK_CUT);\n                else\n                    m.set_label(j,SOURCE_CUT);\n            }\n\n\n            double score = potts_model_score(m);\n            if (score > best_score)\n            {\n                best_score = score;\n                g = m;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename graph_type>\n    void brute_force_potts_model_on_graph (\n        const graph_type& g,\n        std::vector<node_label>& labels_\n    )\n    {\n        std::vector<node_label> labels;\n        labels.resize(g.number_of_nodes());\n\n        const unsigned long num = (unsigned long)std::pow(2.0, (double)g.number_of_nodes());\n\n        double best_score = -std::numeric_limits<double>::infinity();\n        for (unsigned long i = 0; i < num; ++i)\n        {\n            for (unsigned long j = 0; j < g.number_of_nodes(); ++j)\n            {\n                unsigned long T = (1)<<j;\n                T = (T&i);\n                if (T != 0)\n                    labels[j] = SINK_CUT;\n                else\n                    labels[j] = SOURCE_CUT;\n            }\n\n\n            double score = potts_model_score(g,labels);\n            if (score > best_score)\n            {\n                best_score = score;\n                labels_ = labels;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename graph_type>\n    void make_random_undirected_graph(\n        dlib::rand& rnd,\n        graph_type& g\n    )\n    {\n        typedef typename graph_type::edge_type edge_weight_type;\n        g.clear();\n        const unsigned int num_nodes = rnd.get_random_32bit_number()%8;\n        g.set_number_of_nodes(num_nodes);\n\n        const unsigned int num_edges = static_cast<unsigned int>(num_nodes*(num_nodes-1)/2*rnd.get_random_double() + 0.5);\n\n        // add the right number of randomly selected edges\n        unsigned int count = 0;\n        while (count < num_edges)\n        {\n            unsigned long i = rnd.get_random_32bit_number()%g.number_of_nodes();\n            unsigned long j = rnd.get_random_32bit_number()%g.number_of_nodes();\n            if (i != j && g.has_edge(i, j) == false)\n            {\n                ++count;\n                g.add_edge(i, j);\n                edge(g, i, j) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n            }\n        }\n\n        for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n        {\n            g.node(i).data = static_cast<edge_weight_type>(rnd.get_random_gaussian()*200);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_graph_potts_model(\n        dlib::rand& rnd\n    )\n    {\n        using namespace std;\n        double brute_force_score;\n        double graph_cut_score;\n\n        graph<double,double>::kernel_1a_c temp;\n        make_random_undirected_graph(rnd,temp);\n\n        {\n            std::vector<node_label> labels;\n\n            brute_force_potts_model_on_graph(temp, labels);\n\n            for (unsigned long i = 0; i < temp.number_of_nodes(); ++i)\n            {\n                dlog << LTRACE << \"node \" << i << \": \"<< (int)labels[i];\n            }\n\n            brute_force_score = potts_model_score(temp, labels);\n            dlog << LTRACE << \"brute force score: \"<< brute_force_score;\n        }\n        dlog << LTRACE << \"******************\";\n\n        {\n            std::vector<node_label> labels;\n            find_max_factor_graph_potts(temp, labels);\n            DLIB_TEST(temp.number_of_nodes() == labels.size());\n\n            for (unsigned long i = 0; i < temp.number_of_nodes(); ++i)\n            {\n                dlog << LTRACE << \"node \" << i << \": \"<< (int)labels[i];\n            }\n            graph_cut_score = potts_model_score(temp, labels);\n            dlog << LTRACE << \"graph cut score: \"<< graph_cut_score;\n        }\n\n        DLIB_TEST_MSG(graph_cut_score == brute_force_score, std::abs(graph_cut_score - brute_force_score));\n\n        dlog << LTRACE << \"##################\";\n        dlog << LTRACE << \"##################\";\n        dlog << LTRACE << \"##################\";\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename potts_prob>\n    void impl_test_potts_model (\n        potts_prob& p\n    )\n    {\n        using namespace std;\n        double brute_force_score;\n        double graph_cut_score;\n\n        {\n            potts_prob temp(p);\n            brute_force_potts_model(temp);\n\n            for (unsigned long i = 0; i < temp.number_of_nodes(); ++i)\n            {\n                dlog << LTRACE << \"node \" << i << \": \"<< (int)temp.get_label(i);\n            }\n            brute_force_score = potts_model_score(temp);\n            dlog << LTRACE << \"brute force score: \"<< brute_force_score;\n        }\n        dlog << LTRACE << \"******************\";\n\n        {\n            potts_prob temp(p);\n            find_max_factor_graph_potts(temp);\n\n            for (unsigned long i = 0; i < temp.number_of_nodes(); ++i)\n            {\n                dlog << LTRACE << \"node \" << i << \": \"<< (int)temp.get_label(i);\n            }\n            graph_cut_score = potts_model_score(temp);\n            dlog << LTRACE << \"graph cut score: \"<< graph_cut_score;\n        }\n\n        DLIB_TEST_MSG(graph_cut_score == brute_force_score, std::abs(graph_cut_score - brute_force_score));\n\n        dlog << LTRACE << \"##################\";\n        dlog << LTRACE << \"##################\";\n        dlog << LTRACE << \"##################\";\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n//                                   BASIC MIN CUT STUFF\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename directed_graph>\n    void brute_force_min_cut (\n        directed_graph& g,\n        unsigned long source,\n        unsigned long sink\n    )\n    {\n        typedef typename directed_graph::edge_type edge_weight_type;\n        const unsigned long num = (unsigned long)std::pow(2.0, (double)g.number_of_nodes());\n\n        std::vector<node_label> best_cut(g.number_of_nodes(),FREE_NODE);\n\n        edge_weight_type best_score = std::numeric_limits<edge_weight_type>::max();\n        for (unsigned long i = 0; i < num; ++i)\n        {\n            for (unsigned long j = 0; j < g.number_of_nodes(); ++j)\n            {\n                unsigned long T = (1)<<j;\n                T = (T&i);\n                if (T != 0)\n                    g.node(j).data = SINK_CUT;\n                else\n                    g.node(j).data = SOURCE_CUT;\n            }\n\n            // ignore cuts that don't label the source or sink node the way we want.\n            if (g.node(source).data != SOURCE_CUT ||\n                g.node(sink).data != SINK_CUT)\n                continue;\n\n            edge_weight_type score = graph_cut_score(g);\n            if (score < best_score)\n            {\n                best_score = score;\n                for (unsigned long j = 0; j < g.number_of_nodes(); ++j)\n                    best_cut[j] = g.node(j).data;\n            }\n        }\n\n        for (unsigned long j = 0; j < g.number_of_nodes(); ++j)\n            g.node(j).data =  best_cut[j];\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename directed_graph>\n    void print_graph(\n        const directed_graph& g\n    )\n    {\n        using namespace std;\n        dlog << LTRACE << \"number of nodes: \"<< g.number_of_nodes();\n        for (unsigned long i = 0; i < g.number_of_nodes(); ++i)\n        {\n            for (unsigned long n = 0; n < g.node(i).number_of_children(); ++n)\n                dlog << LTRACE << i << \" -(\" << g.node(i).child_edge(n) << \")-> \" << g.node(i).child(n).index();\n        }\n    }\n\n    template <typename directed_graph>\n    void copy_edge_weights (\n        directed_graph& dest,\n        const directed_graph& src\n    )\n    {\n        for (unsigned long i = 0; i < src.number_of_nodes(); ++i)\n        {\n            for (unsigned long n = 0; n < src.node(i).number_of_children(); ++n)\n            {\n                dest.node(i).child_edge(n) = src.node(i).child_edge(n);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename graph_type>\n    void pick_random_source_and_sink (\n        dlib::rand& rnd,\n        const graph_type& g,\n        unsigned long& source,\n        unsigned long& sink\n    )\n    {\n        source = rnd.get_random_32bit_number()%g.number_of_nodes();\n        sink = rnd.get_random_32bit_number()%g.number_of_nodes();\n        while (sink == source)\n            sink = rnd.get_random_32bit_number()%g.number_of_nodes();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename dgraph_type>\n    void make_random_graph(\n        dlib::rand& rnd,\n        dgraph_type& g,\n        unsigned long& source,\n        unsigned long& sink\n    )\n    {\n        typedef typename dgraph_type::edge_type edge_weight_type;\n        g.clear();\n        const unsigned int num_nodes = rnd.get_random_32bit_number()%7 + 2;\n        g.set_number_of_nodes(num_nodes);\n\n        const unsigned int num_edges = static_cast<unsigned int>(num_nodes*(num_nodes-1)/2*rnd.get_random_double() + 0.5);\n\n        // add the right number of randomly selected edges\n        unsigned int count = 0;\n        while (count < num_edges)\n        {\n            unsigned long parent = rnd.get_random_32bit_number()%g.number_of_nodes();\n            unsigned long child = rnd.get_random_32bit_number()%g.number_of_nodes();\n            if (parent != child && g.has_edge(parent, child) == false)\n            {\n                ++count;\n                g.add_edge(parent, child);\n                edge(g, parent, child) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n\n                // have to have edges both ways\n                swap(parent, child);\n                g.add_edge(parent, child);\n                edge(g, parent, child) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n            }\n        }\n\n        pick_random_source_and_sink(rnd, g, source, sink);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename dgraph_type>\n    void make_random_chain_graph(\n        dlib::rand& rnd,\n        dgraph_type& g,\n        unsigned long& source,\n        unsigned long& sink\n    )\n    {\n        typedef typename dgraph_type::edge_type edge_weight_type;\n        g.clear();\n        const unsigned int num_nodes = rnd.get_random_32bit_number()%7 + 2;\n        g.set_number_of_nodes(num_nodes);\n\n        for (unsigned long i = 1; i < g.number_of_nodes(); ++i)\n        {\n            g.add_edge(i,i-1);\n            g.add_edge(i-1,i);\n            edge(g, i, i-1) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n            edge(g, i-1, i) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n        }\n\n        pick_random_source_and_sink(rnd, g, source, sink);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename dgraph_type>\n    void make_random_grid_graph(\n        dlib::rand& rnd,\n        dgraph_type& g,\n        unsigned long& source,\n        unsigned long& sink\n    )\n    /*!\n        ensures\n            - makes a grid graph like the kind used for potts models.\n    !*/\n    {\n        typedef typename dgraph_type::edge_type edge_weight_type;\n        g.clear();\n        const long nr = rnd.get_random_32bit_number()%2 + 2;\n        const long nc = rnd.get_random_32bit_number()%2 + 2;\n        g.set_number_of_nodes(nr*nc+2);\n\n        const rectangle rect(0,0,nc-1,nr-1);\n        for (long r = 0; r < nr; ++r)\n        {\n            for (long c = 0; c < nc; ++c)\n            {\n                const point p(c,r);\n                const unsigned long i = p.y()*nc + p.x();\n\n                const point n2(c-1,r);\n                if (rect.contains(n2))\n                {\n                    const unsigned long j = n2.y()*nc + n2.x();\n                    g.add_edge(i,j);\n                    g.add_edge(j,i);\n                    edge(g,i,j) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n                    edge(g,j,i) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n                }\n\n                const point n4(c,r-1);\n                if (rect.contains(n4))\n                {\n                    const unsigned long j = n4.y()*nc + n4.x();\n                    g.add_edge(i,j);\n                    g.add_edge(j,i);\n                    edge(g,i,j) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n                    edge(g,j,i) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n                }\n            }\n        }\n\n        // use the last two nodes as source and sink.  Also connect them to all the other nodes.\n        source = g.number_of_nodes()-1;\n        sink = g.number_of_nodes()-2;\n        for (unsigned long i = 0; i < g.number_of_nodes()-2; ++i)\n        {\n            g.add_edge(i,source);\n            g.add_edge(source,i);\n            g.add_edge(i,sink);\n            g.add_edge(sink,i);\n\n            edge(g,i,source) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n            edge(g,source,i) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n            edge(g,i,sink) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n            edge(g,sink,i) = static_cast<edge_weight_type>(rnd.get_random_double()*50);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename min_cut, typename dgraph_type>\n    void run_test_on_graphs (\n        const min_cut& mc,\n        dgraph_type& g1,\n        dgraph_type& g2,\n        unsigned long source,\n        unsigned long sink\n    )\n    {\n        typedef typename dgraph_type::edge_type edge_weight_type;\n        using namespace std;\n\n\n        dlog << LTRACE << \"number of nodes: \"<< g1.number_of_nodes();\n        dlog << LTRACE << \"is graph connected: \"<< graph_is_connected(g1);\n        dlog << LTRACE << \"has self loops:     \"<< graph_contains_length_one_cycle(g1);\n        dlog << LTRACE << \"SOURCE_CUT: \" << source;\n        dlog << LTRACE << \"SINK_CUT:   \" << sink;\n        mc(g1, source, sink);\n        brute_force_min_cut(g2, source, sink);\n\n        print_graph(g1);\n\n        // make sure the flow residuals are 0 at the cut locations\n        for (unsigned long i = 0; i < g1.number_of_nodes(); ++i)\n        {\n            for (unsigned long j = 0; j < g1.node(i).number_of_children(); ++j)\n            {\n                if ((g1.node(i).data == SOURCE_CUT && g1.node(i).child(j).data != SOURCE_CUT) ||\n                    (g1.node(i).data != SINK_CUT && g1.node(i).child(j).data == SINK_CUT)\n                    )\n                {\n                    DLIB_TEST_MSG(g1.node(i).child_edge(j) == 0, g1.node(i).child_edge(j));\n                }\n            }\n        }\n\n        // copy the edge weights from g2 back to g1 so we can compute cut scores\n        copy_edge_weights(g1, g2);\n\n        DLIB_TEST(g1.number_of_nodes() == g2.number_of_nodes());\n        for (unsigned long i = 0; i < g1.number_of_nodes(); ++i)\n        {\n            dlog << LTRACE << \"node \" << i << \": \" << (int)g1.node(i).data << \", \" << (int)g2.node(i).data;\n            if (g1.node(i).data != g2.node(i).data)\n            {\n                edge_weight_type cut_score = graph_cut_score(g1);\n                edge_weight_type brute_force_score = graph_cut_score(g2);\n                dlog << LTRACE << \"graph cut score: \"<< cut_score;\n                dlog << LTRACE << \"brute force score: \"<< brute_force_score;\n\n                if (brute_force_score != cut_score)\n                    print_graph(g1);\n                DLIB_TEST_MSG(brute_force_score == cut_score,std::abs(brute_force_score-cut_score));\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename min_cut, typename edge_weight_type>\n    void test_graph_cuts(dlib::rand& rnd)\n    {\n        typedef typename dlib::directed_graph<node_label, edge_weight_type>::kernel_1a_c dgraph_type;\n        // we will create two identical graphs.\n        dgraph_type g1, g2;\n        min_cut mc;\n\n        unsigned long source, sink;\n\n        dlib::rand rnd_copy(rnd);\n        make_random_graph(rnd,g1, source, sink);\n        make_random_graph(rnd_copy,g2, source, sink);\n        run_test_on_graphs(mc, g1, g2, source, sink);\n\n        rnd_copy = rnd;\n        make_random_grid_graph(rnd,g1, source, sink);\n        make_random_grid_graph(rnd_copy,g2, source, sink);\n        run_test_on_graphs(mc, g1, g2, source, sink);\n\n        rnd_copy = rnd;\n        make_random_chain_graph(rnd,g1, source, sink);\n        make_random_chain_graph(rnd_copy,g2, source, sink);\n        run_test_on_graphs(mc, g1, g2, source, sink);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_potts_grid_problem\n    {\n    public:\n        test_potts_grid_problem(int seed_) :seed(seed_){}\n        int seed;\n\n        long nr() const { return 3;}\n        long nc() const { return 3;}\n\n        typedef double value_type;\n\n        value_type factor_value(unsigned long idx) const\n        {\n            // Copy idx into a char buffer to avoid warnings about violation of strict aliasing \n            // rules when murmur_hash3() gets inlined into this function.\n            char buf[sizeof(idx)];\n            memcpy(buf,&idx,sizeof(idx));\n            // now hash the buffer rather than idx.\n            return ((double)murmur_hash3(buf, sizeof(buf), seed) - std::numeric_limits<uint32>::max()/2.0)/1000.0;\n        }\n\n        value_type factor_value_disagreement(unsigned long idx1, unsigned long idx2) const\n        {\n            return std::abs(factor_value(idx1+idx2)/10.0);\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename prob_type>\n    void brute_force_potts_grid_problem(\n        const prob_type& prob,\n        array2d<unsigned char>& labels\n    )\n    {\n        const unsigned long num = (unsigned long)std::pow(2.0, (double)prob.nr()*prob.nc());\n\n        array2d<unsigned char> temp(prob.nr(), prob.nc());\n        unsigned char* data = &temp[0][0];\n\n        double best_score = -std::numeric_limits<double>::infinity();\n        for (unsigned long i = 0; i < num; ++i)\n        {\n            for (unsigned long j = 0; j < temp.size(); ++j)\n            {\n                unsigned long T = (1)<<j;\n                T = (T&i);\n                if (T != 0)\n                    *(data + j) = SINK_CUT;\n                else\n                    *(data + j) = SOURCE_CUT;\n            }\n\n\n            double score = potts_model_score(prob, temp);\n            if (score > best_score)\n            {\n                best_score = score;\n                assign_image(labels, temp);\n            }\n        }\n    }\n\n    void test_inf()\n    {\n        graph<double,double>::kernel_1a_c g;\n        g.set_number_of_nodes(4);\n        g.add_edge(0,1);\n        g.add_edge(1,2);\n        g.add_edge(2,3);\n        g.add_edge(3,0);\n\n        g.node(0).data = std::numeric_limits<double>::infinity();\n        g.node(1).data = -std::numeric_limits<double>::infinity();\n        g.node(2).data = std::numeric_limits<double>::infinity();\n        g.node(3).data = -std::numeric_limits<double>::infinity();\n\n        edge(g,0,1) = 1;\n        edge(g,1,2) = 1;\n        edge(g,2,3) = 1;\n        edge(g,3,0) = 1;\n\n        std::vector<node_label> labels;\n        find_max_factor_graph_potts(g, labels);\n\n        DLIB_TEST(labels[0] != 0);\n        DLIB_TEST(labels[1] == 0);\n        DLIB_TEST(labels[2] != 0);\n        DLIB_TEST(labels[3] == 0);\n\n        // --------------------------\n\n        g.node(0).data = std::numeric_limits<double>::infinity();\n        g.node(1).data = 0;\n        g.node(2).data = 0;\n        g.node(3).data = -3;\n\n        edge(g,0,1) = 1;\n        edge(g,1,2) = 1;\n        edge(g,2,3) = 1;\n        edge(g,3,0) = 1;\n\n        find_max_factor_graph_potts(g, labels);\n\n        DLIB_TEST(labels[0] != 0);\n        DLIB_TEST(labels[1] != 0);\n        DLIB_TEST(labels[2] != 0);\n        DLIB_TEST(labels[3] == 0);\n\n        // --------------------------\n\n        g.node(0).data = std::numeric_limits<double>::infinity();\n        g.node(1).data = 0;\n        g.node(2).data = 0;\n        g.node(3).data = -0.1;\n\n        edge(g,0,1) = 1;\n        edge(g,1,2) = 1;\n        edge(g,2,3) = 1;\n        edge(g,3,0) = 1;\n\n        find_max_factor_graph_potts(g, labels);\n\n        DLIB_TEST(labels[0] != 0);\n        DLIB_TEST(labels[1] != 0);\n        DLIB_TEST(labels[2] != 0);\n        DLIB_TEST(labels[3] != 0);\n\n        // --------------------------\n\n        g.node(0).data = std::numeric_limits<double>::infinity();\n        g.node(1).data = 0;\n        g.node(2).data = 0;\n        g.node(3).data = -0.1;\n\n        edge(g,0,1) = 1;\n        edge(g,1,2) = 1;\n        edge(g,2,3) = 0;\n        edge(g,3,0) = 0;\n\n        find_max_factor_graph_potts(g, labels);\n\n        DLIB_TEST(labels[0] != 0);\n        DLIB_TEST(labels[1] != 0);\n        DLIB_TEST(labels[2] != 0);\n        DLIB_TEST(labels[3] == 0);\n\n        // --------------------------\n\n        g.node(0).data = -std::numeric_limits<double>::infinity();\n        g.node(1).data = 0;\n        g.node(2).data = 0;\n        g.node(3).data = 0.1;\n\n        edge(g,0,1) = 1;\n        edge(g,1,2) = 1;\n        edge(g,2,3) = 0;\n        edge(g,3,0) = 0;\n\n        find_max_factor_graph_potts(g, labels);\n\n        DLIB_TEST(labels[0] == 0);\n        DLIB_TEST(labels[1] == 0);\n        DLIB_TEST(labels[2] == 0);\n        DLIB_TEST(labels[3] != 0);\n\n        // --------------------------\n\n        g.node(0).data = -std::numeric_limits<double>::infinity();\n        g.node(1).data = std::numeric_limits<double>::infinity();\n        g.node(2).data = 0;\n        g.node(3).data = 0.1;\n\n        edge(g,0,1) = 1;\n        edge(g,1,2) = 1;\n        edge(g,2,3) = 0;\n        edge(g,3,0) = 0;\n\n        find_max_factor_graph_potts(g, labels);\n\n        DLIB_TEST(labels[0] == 0);\n        DLIB_TEST(labels[1] != 0);\n        DLIB_TEST(labels[2] != 0);\n        DLIB_TEST(labels[3] != 0);\n\n        // --------------------------\n\n        g.node(0).data = -10;\n        g.node(1).data = std::numeric_limits<double>::infinity();\n        g.node(2).data = 0;\n        g.node(3).data = 0.1;\n\n        edge(g,0,1) = std::numeric_limits<double>::infinity();\n        edge(g,1,2) = std::numeric_limits<double>::infinity();\n        edge(g,2,3) = std::numeric_limits<double>::infinity();\n        edge(g,3,0) = std::numeric_limits<double>::infinity();\n\n        find_max_factor_graph_potts(g, labels);\n\n        DLIB_TEST(labels[0] != 0);\n        DLIB_TEST(labels[1] != 0);\n        DLIB_TEST(labels[2] != 0);\n        DLIB_TEST(labels[3] != 0);\n\n        // --------------------------\n\n        g.node(0).data = 10;\n        g.node(1).data = -std::numeric_limits<double>::infinity();\n        g.node(2).data = 20.05;\n        g.node(3).data = -0.1;\n\n        edge(g,0,1) = std::numeric_limits<double>::infinity();\n        edge(g,1,2) = 10;\n        edge(g,2,3) = std::numeric_limits<double>::infinity();\n        edge(g,3,0) = 10;\n\n        find_max_factor_graph_potts(g, labels);\n\n        DLIB_TEST(labels[0] == 0);\n        DLIB_TEST(labels[1] == 0);\n        DLIB_TEST(labels[2] == 0);\n        DLIB_TEST(labels[3] == 0);\n\n        // --------------------------\n\n        g.node(0).data = 10;\n        g.node(1).data = -std::numeric_limits<double>::infinity();\n        g.node(2).data = 20.2;\n        g.node(3).data = -0.1;\n\n        edge(g,0,1) = std::numeric_limits<double>::infinity();\n        edge(g,1,2) = 10;\n        edge(g,2,3) = std::numeric_limits<double>::infinity();\n        edge(g,3,0) = 10;\n\n        find_max_factor_graph_potts(g, labels);\n\n        DLIB_TEST(labels[0] == 0);\n        DLIB_TEST(labels[1] == 0);\n        DLIB_TEST(labels[2] != 0);\n        DLIB_TEST(labels[3] != 0);\n    }\n\n    struct potts_pair_image_model \n    {\n        typedef double value_type;\n\n        template <typename pixel_type1, typename pixel_type2>\n        value_type factor_value (\n            const pixel_type1& ,\n            const pixel_type2& v2 \n        ) const\n        {\n            return v2;\n        }\n\n        template <typename pixel_type>\n        value_type factor_value_disagreement (\n            const pixel_type& v1,\n            const pixel_type& v2 \n        ) const\n        {\n            if (v1 == v2)\n                return 10;\n            else\n                return 0;\n        }\n    };\n\n    void test_potts_pair_grid()\n    {\n        array2d<int> img1(40,40);\n        array2d<double> img2(40,40);\n\n        assign_all_pixels(img1, -1);\n        assign_all_pixels(img2, -1);\n\n        img1[4][4] = 1000;\n\n        img2[4][3] = 1;\n        img2[4][4] = 1;\n        img2[4][5] = 1;\n        img2[3][3] = 1;\n        img2[3][4] = 1;\n        img2[3][5] = 1;\n        img2[5][3] = 1;\n        img2[5][4] = 1;\n        img2[5][5] = 1;\n\n        array2d<unsigned char> labels;\n        find_max_factor_graph_potts(make_potts_grid_problem(potts_pair_image_model(),img2,img1), labels);\n\n        dlog << LINFO << \"num true labels: \" << sum(matrix_cast<int>(mat(labels)!=0));\n        DLIB_TEST(sum(matrix_cast<int>(mat(labels)!=0)) == 9);\n        DLIB_TEST(sum(matrix_cast<int>(mat(labels)==0)) == (int)img1.size()-9);\n\n        DLIB_TEST(labels[4][3] != 0);\n        DLIB_TEST(labels[4][4] != 0);\n        DLIB_TEST(labels[4][5] != 0);\n        DLIB_TEST(labels[3][3] != 0);\n        DLIB_TEST(labels[3][4] != 0);\n        DLIB_TEST(labels[3][5] != 0);\n        DLIB_TEST(labels[5][3] != 0);\n        DLIB_TEST(labels[5][4] != 0);\n        DLIB_TEST(labels[5][5] != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class graph_cuts_tester : public tester\n    {\n    public:\n        graph_cuts_tester (\n        ) :\n            tester (\"test_graph_cuts\",\n                    \"Runs tests on the graph cuts tools.\")\n        {}\n\n        dlib::rand rnd;\n\n        void perform_test (\n        )\n        {\n            test_potts_pair_grid();\n            test_inf();\n\n            for (int i = 0; i < 500; ++i)\n            {\n                array2d<unsigned char> labels, brute_labels;\n                test_potts_grid_problem prob(i);\n                find_max_factor_graph_potts(prob, labels);\n                brute_force_potts_grid_problem(prob, brute_labels);\n\n                DLIB_TEST(labels.nr() == brute_labels.nr());\n                DLIB_TEST(labels.nc() == brute_labels.nc());\n                for (long r = 0; r < labels.nr(); ++r)\n                {\n                    for (long c = 0; c < labels.nc(); ++c)\n                    {\n                        bool normal = (labels[r][c] != 0);\n                        bool brute = (brute_labels[r][c] != 0);\n                        DLIB_TEST(normal == brute);\n                    }\n                }\n            }\n\n            for (int i = 0; i < 1000; ++i)\n            {\n                print_spinner();\n                dlog << LTRACE << \"test_grpah_cuts<short> iter: \" << i;\n                test_graph_cuts<min_cut,short>(rnd);\n                print_spinner();\n                dlog << LTRACE << \"test_grpah_cuts<double> iter: \" << i;\n                test_graph_cuts<min_cut,double>(rnd);\n            }\n\n\n            for (int k = 0; k < 300; ++k)\n            {\n                dlog << LTRACE << \"image_potts_problem iter \" << k;\n                print_spinner();\n                image_potts_problem p(3,3, rnd);\n                impl_test_potts_model(p);\n            }\n            for (int k = 0; k < 300; ++k)\n            {\n                dlog << LTRACE << \"dense_potts_problem iter \" << k;\n                print_spinner();\n                dense_potts_problem p(6, rnd);\n                impl_test_potts_model(p);\n            }\n\n            for (int k = 0; k < 300; ++k)\n            {\n                dlog << LTRACE << \"dense_potts_problem iter \" << k;\n                print_spinner();\n                test_graph_potts_model(rnd);\n            }\n        }\n    } a;\n\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/graph_labeler.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/svm_threaded.h>\n#include <dlib/data_io.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n\n\n    logger dlog(\"test.graph_cuts\");\n\n\n    template <\n        typename graph_type,\n        typename samples_type,\n        typename labels_type\n        >\n    void make_data(\n        samples_type& samples,\n        labels_type& labels\n    )\n    {\n        //samples.clear();\n        //labels.clear();\n\n        std::vector<bool> label;\n        graph_type g;\n\n    // ---------------------------\n        g.set_number_of_nodes(4);\n        label.resize(g.number_of_nodes());\n        g.node(0).data = 0, 0, 1; label[0] = true;\n        g.node(1).data = 0, 0, 1; label[1] = true;\n        g.node(2).data = 0, 1, 0; label[2] = false;\n        g.node(3).data = 0, 1, 0; label[3] = false;\n\n        g.add_edge(0,1);\n        g.add_edge(1,2);\n        g.add_edge(2,3);\n        g.add_edge(3,0);\n\n        edge(g,0,1) = 1, 1;\n        edge(g,1,2) = 1, 1;\n        edge(g,2,3) = 1, 1;\n        edge(g,3,0) = 1, 1;\n        samples.push_back(g);\n        labels.push_back(label);\n    // ---------------------------\n\n        g.clear();\n        g.set_number_of_nodes(4);\n        label.resize(g.number_of_nodes());\n        g.node(0).data = 0, 0, 1; label[0] = true;\n        g.node(1).data = 0, 0, 0; label[1] = true;\n        g.node(2).data = 0, 1, 0; label[2] = false;\n        g.node(3).data = 0, 0, 0; label[3] = false;\n\n        g.add_edge(0,1);\n        g.add_edge(1,2);\n        g.add_edge(2,3);\n        g.add_edge(3,0);\n\n        edge(g,0,1) = 1, 0;\n        edge(g,1,2) = 0, 1;\n        edge(g,2,3) = 1, 0;\n        edge(g,3,0) = 0, 1;\n        samples.push_back(g);\n        labels.push_back(label);\n    // ---------------------------\n\n        g.clear();\n        g.set_number_of_nodes(4);\n        label.resize(g.number_of_nodes());\n        g.node(0).data = 0, 1, 0; label[0] = false;\n        g.node(1).data = 0, 1, 0; label[1] = false;\n        g.node(2).data = 0, 1, 0; label[2] = false;\n        g.node(3).data = 0, 0, 0; label[3] = false;\n\n        g.add_edge(0,1);\n        g.add_edge(1,2);\n        g.add_edge(2,3);\n        g.add_edge(3,0);\n\n        edge(g,0,1) = 1, 0;\n        edge(g,1,2) = 0, 1;\n        edge(g,2,3) = 1, 0;\n        edge(g,3,0) = 0, 1;\n        samples.push_back(g);\n        labels.push_back(label);\n    // ---------------------------\n    }\n\n\n\n\n    template <\n        typename graph_type,\n        typename samples_type,\n        typename labels_type\n        >\n    void make_data_sparse(\n        samples_type& samples,\n        labels_type& labels\n    )\n    {\n        //samples.clear();\n        //labels.clear();\n\n        std::vector<bool> label;\n        graph_type g;\n        typename graph_type::edge_type v;\n\n    // ---------------------------\n        g.set_number_of_nodes(4);\n        label.resize(g.number_of_nodes());\n        g.node(0).data[2] = 1; label[0] = true;\n        g.node(1).data[2] = 1; label[1] = true;\n        g.node(2).data[1] = 1; label[2] = false;\n        g.node(3).data[1] = 1; label[3] = false;\n\n        g.add_edge(0,1);\n        g.add_edge(1,2);\n        g.add_edge(2,3);\n        g.add_edge(3,0);\n        g.add_edge(3,1);\n\n        v[0] = 1; v[1] = 1;\n        edge(g,0,1) = v;\n        edge(g,1,2) = v;\n        edge(g,2,3) = v;\n        edge(g,3,0) = v;\n        samples.push_back(g);\n        labels.push_back(label);\n    // ---------------------------\n\n        g.clear();\n        g.set_number_of_nodes(5);\n        label.resize(g.number_of_nodes());\n        g.node(0).data[2] = 1; label[0] = true;\n        g.node(1).data[0] = 0; label[1] = true;\n        g.node(2).data[1] = 1; label[2] = false;\n        g.node(3).data[0] = 0; label[3] = false;\n                               label[4] = true;\n\n        g.add_edge(0,1);\n        g.add_edge(1,4);\n        g.add_edge(1,2);\n        g.add_edge(2,3);\n        g.add_edge(3,0);\n\n        edge(g,0,1)[0] = 1;\n        edge(g,1,4)[0] = 1;\n        edge(g,1,2)[1] = 1;\n        edge(g,2,3)[0] = 1;\n        edge(g,3,0)[1] = 1;\n        samples.push_back(g);\n        labels.push_back(label);\n    // ---------------------------\n\n        g.clear();\n        g.set_number_of_nodes(4);\n        label.resize(g.number_of_nodes());\n        g.node(0).data[1] = 1; label[0] = false;\n        g.node(1).data[1] = 1; label[1] = false;\n        g.node(2).data[1] = 1; label[2] = false;\n        g.node(3).data[1] = 0; label[3] = false;\n\n        g.add_edge(0,1);\n        g.add_edge(1,2);\n        g.add_edge(2,3);\n        g.add_edge(3,0);\n\n        edge(g,0,1)[0] = 1;\n        edge(g,1,2)[1] = 1;\n        edge(g,2,3)[0] = 1;\n        edge(g,3,0)[1] = 1;\n        samples.push_back(g);\n        labels.push_back(label);\n    // ---------------------------\n    }\n\n\n\n\n\n\n    template <\n        typename graph_type,\n        typename samples_type,\n        typename labels_type\n        >\n    void make_data2(\n        samples_type& samples,\n        labels_type& labels\n    )\n    {\n        //samples.clear();\n        //labels.clear();\n\n        std::vector<bool> label;\n        graph_type g;\n\n    // ---------------------------\n        g.set_number_of_nodes(4);\n        label.resize(g.number_of_nodes());\n        g.node(0).data = 0, 0, 1; label[0] = true;\n        g.node(1).data = 0, 0, 1; label[1] = true;\n        g.node(2).data = 0, 1, 0; label[2] = false;\n        g.node(3).data = 0, 1, 0; label[3] = false;\n\n        g.add_edge(0,1);\n        g.add_edge(1,2);\n        g.add_edge(2,3);\n        g.add_edge(3,0);\n\n        edge(g,0,1) = 1, 1;\n        edge(g,1,2) = 1, 1;\n        edge(g,2,3) = 1, 1;\n        edge(g,3,0) = 1, 1;\n        samples.push_back(g);\n        labels.push_back(label);\n    // ---------------------------\n    }\n\n\n\n\n    template <\n        typename graph_type,\n        typename samples_type,\n        typename labels_type\n        >\n    void make_data2_sparse(\n        samples_type& samples,\n        labels_type& labels\n    )\n    {\n        //samples.clear();\n        //labels.clear();\n\n        std::vector<bool> label;\n        graph_type g;\n        typename graph_type::edge_type v;\n\n    // ---------------------------\n        g.set_number_of_nodes(4);\n        label.resize(g.number_of_nodes());\n        g.node(0).data[2] = 1; label[0] = true;\n        g.node(1).data[2] = 1; label[1] = true;\n        g.node(2).data[1] = 1; label[2] = false;\n        g.node(3).data[1] = 1; label[3] = false;\n\n        g.add_edge(0,1);\n        g.add_edge(1,2);\n        g.add_edge(2,3);\n        g.add_edge(3,0);\n\n        v[0] = 1; v[1] = 1;\n        edge(g,0,1) = v;\n        edge(g,1,2) = v;\n        edge(g,2,3) = v;\n        edge(g,3,0) = v;\n        samples.push_back(g);\n        labels.push_back(label);\n    // ---------------------------\n\n    }\n\n\n\n\n\n    template <\n        typename node_vector_type,\n        typename edge_vector_type,\n        typename vector_type,\n        typename graph_type\n        >\n    void test1(\n        const dlib::array<graph_type>& samples,\n        const std::vector<std::vector<bool> >& labels\n    )\n    {\n        dlog << LINFO << \"begin test1()\";\n\n        structural_graph_labeling_trainer<vector_type> trainer;\n        //trainer.be_verbose();\n        trainer.set_epsilon(1e-12);\n        graph_labeler<vector_type> labeler = trainer.train(samples, labels);\n\n\n        // test serialization code for the labeler.\n        std::ostringstream sout;\n        serialize(labeler, sout);\n        std::istringstream sin(sout.str());\n        labeler = graph_labeler<vector_type>();\n        deserialize(labeler, sin);\n\n        std::vector<bool> temp;\n        for (unsigned long k = 0; k < samples.size(); ++k)\n        {\n            temp = labeler(samples[k]);\n            for (unsigned long i = 0; i < temp.size(); ++i)\n            {\n                const bool true_label = (labels[k][i] != 0);\n                const bool pred_label = (temp[i] != 0);\n                DLIB_TEST(true_label == pred_label);\n            }\n        }\n\n        matrix<double> cv;\n\n        cv = test_graph_labeling_function(labeler, samples, labels);\n        DLIB_TEST(sum(cv) == 2);\n        cv = cross_validate_graph_labeling_trainer(trainer, samples, labels, 4);\n        DLIB_TEST(sum(cv) == 2);\n\n        dlog << LINFO << \"edge weights: \" << trans(sparse_to_dense(labeler.get_edge_weights()));\n        dlog << LINFO << \"node weights: \" << trans(sparse_to_dense(labeler.get_node_weights()));\n    }\n\n\n\n    class graph_labeling_tester : public tester\n    {\n    public:\n        graph_labeling_tester (\n        ) :\n            tester (\"test_graph_labeling\",\n                    \"Runs tests on the graph labeling component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            // test with dense vectors\n            {\n                typedef matrix<double,3,1> node_vector_type;\n                typedef matrix<double,2,1> edge_vector_type;\n                typedef matrix<double,0,1> vector_type;\n                typedef dlib::graph<node_vector_type, edge_vector_type>::kernel_1a_c graph_type;\n\n                dlib::array<graph_type> samples;\n                std::vector<std::vector<bool> > labels;\n\n                make_data<graph_type>(samples, labels);\n                make_data<graph_type>(samples, labels);\n                make_data<graph_type>(samples, labels);\n                make_data<graph_type>(samples, labels);\n\n\n                test1<node_vector_type,edge_vector_type,vector_type>(samples, labels);\n            }\n            print_spinner();\n            // test with dense vectors and sparse vectors together \n            {\n                typedef matrix<double,3,1> node_vector_type;\n                typedef matrix<double,2,1> edge_vector_type;\n                typedef std::map<unsigned long,double> vector_type;\n                typedef dlib::graph<node_vector_type, edge_vector_type>::kernel_1a_c graph_type;\n\n                dlib::array<graph_type> samples;\n                std::vector<std::vector<bool> > labels;\n\n                make_data<graph_type>(samples, labels);\n                make_data<graph_type>(samples, labels);\n                make_data<graph_type>(samples, labels);\n                make_data<graph_type>(samples, labels);\n\n\n                test1<node_vector_type,edge_vector_type,vector_type>(samples, labels);\n            }\n            print_spinner();\n            // test with sparse vectors\n            {\n                typedef std::vector<std::pair<unsigned long,double> > vector_type;\n                typedef std::map<unsigned long, double> edge_vector_type;\n                typedef std::map<unsigned long, double> node_vector_type;\n                typedef dlib::graph<node_vector_type, edge_vector_type>::kernel_1a_c graph_type;\n\n                dlib::array<graph_type> samples;\n                std::vector<std::vector<bool> > labels;\n\n                make_data_sparse<graph_type>(samples, labels);\n                make_data_sparse<graph_type>(samples, labels);\n                make_data_sparse<graph_type>(samples, labels);\n                make_data_sparse<graph_type>(samples, labels);\n\n\n                test1<node_vector_type,edge_vector_type,vector_type>(samples, labels);\n            }\n\n\n\n            print_spinner();\n            // test with dense vectors\n            {\n                typedef matrix<double,3,1> node_vector_type;\n                typedef matrix<double,2,1> edge_vector_type;\n                typedef matrix<double,0,1> vector_type;\n                typedef dlib::graph<node_vector_type, edge_vector_type>::kernel_1a_c graph_type;\n\n                dlib::array<graph_type> samples;\n                std::vector<std::vector<bool> > labels;\n\n                make_data2<graph_type>(samples, labels);\n                make_data2<graph_type>(samples, labels);\n                make_data2<graph_type>(samples, labels);\n                make_data2<graph_type>(samples, labels);\n\n\n                test1<node_vector_type,edge_vector_type,vector_type>(samples, labels);\n            }\n            print_spinner();\n            // test with sparse vectors\n            {\n                typedef std::vector<std::pair<unsigned long,double> > vector_type;\n                typedef std::map<unsigned long, double> edge_vector_type;\n                typedef std::map<unsigned long, double> node_vector_type;\n                typedef dlib::graph<node_vector_type, edge_vector_type>::kernel_1a_c graph_type;\n\n                dlib::array<graph_type> samples;\n                std::vector<std::vector<bool> > labels;\n\n                make_data2_sparse<graph_type>(samples, labels);\n                make_data2_sparse<graph_type>(samples, labels);\n                make_data2_sparse<graph_type>(samples, labels);\n                make_data2_sparse<graph_type>(samples, labels);\n\n\n                test1<node_vector_type,edge_vector_type,vector_type>(samples, labels);\n            }\n            print_spinner();\n            // test with sparse vectors and dense mix\n            {\n                typedef matrix<double,0,1> vector_type;\n                typedef std::map<unsigned long, double> edge_vector_type;\n                typedef std::map<unsigned long, double> node_vector_type;\n                typedef dlib::graph<node_vector_type, edge_vector_type>::kernel_1a_c graph_type;\n\n                dlib::array<graph_type> samples;\n                std::vector<std::vector<bool> > labels;\n\n                make_data2_sparse<graph_type>(samples, labels);\n                make_data2_sparse<graph_type>(samples, labels);\n                make_data2_sparse<graph_type>(samples, labels);\n                make_data2_sparse<graph_type>(samples, labels);\n\n\n                test1<node_vector_type,edge_vector_type,vector_type>(samples, labels);\n            }\n        }\n    } a;\n\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/gui/CMakeLists.txt",
    "content": "#\n# This is a CMake makefile.  You can find the cmake utility and\n# information about it at http://www.cmake.org\n#\n\n# create a variable called target_name and set it to the string \"test\"\nset (target_name gui)\n\nPROJECT(${target_name})\n\n# add all the cpp files we want to compile to this list.  This tells\n# cmake that they are part of our target (which is the executable named test)\nADD_EXECUTABLE(${target_name} main.cpp )\n\n# Add the folder containing the dlib folder to the include path\nINCLUDE_DIRECTORIES(../../..)\n\n# Tell cmake to link our target executable to dlib.\nTARGET_LINK_LIBRARIES(${target_name} dlib )\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/gui/main.cpp",
    "content": "#include \"dlib/image_io.h\"\n#include \"dlib/array2d.h\"\n#include \"dlib/gui_core.h\"\n#include \"dlib/assert.h\"\n#include \"dlib/misc_api.h\"\n#include <string>\n#include \"dlib/image_transforms.h\"\n\n#include \"dlib/timer.h\"\n\n#include \"dlib/gui_widgets.h\"\n#include \"dlib/queue.h\"\n#include <sstream>\n#include <iostream>\n#include <fstream>\n\nusing namespace dlib;\nusing namespace std;\n\n\ntypedef dlib::array2d<hsi_pixel> image;\n\n\n\n\n#include \"dlib/base64.h\"\n\n\n\n\nclass color_box : public draggable \n{\n    unsigned char red, green,blue;\n\npublic:\n    color_box (\n        drawable_window& w,\n        rectangle area,\n        unsigned char red_,\n        unsigned char green_,\n        unsigned char blue_\n    ) :\n        draggable(w, MOUSE_WHEEL),\n        red(red_),\n        green(green_),\n        blue(blue_),\n        t(*this,&color_box::action)\n    {\n        rect = area;\n\n        t.set_delay_time(4);\n        // t.start();\n\n        set_draggable_area(rectangle(10,10,500,500));\n\n        enable_events();\n    }\n\n    ~color_box()\n    {\n        disable_events();\n    }\n\nprivate:\n\n    void action (\n        )\n    {\n        ++red;\n        parent.invalidate_rectangle(rect);\n    }\n\n    void draw (\n        const canvas& c\n    ) const\n    {\n        if (hidden == false )\n        {\n            fill_rect(c,rect,rgb_pixel(red,green,blue));\n            std::vector<point> poly;\n            poly.push_back((rect.tl_corner()+rect.tr_corner())/2);\n            poly.push_back((rect.tr_corner()+rect.br_corner())/2);\n            poly.push_back((rect.br_corner()+rect.bl_corner())/2);\n            poly.push_back((rect.bl_corner()+rect.tl_corner())/2);\n            draw_solid_convex_polygon(c,poly,rgb_alpha_pixel(0,0,0,70));\n        }\n    }\n\n    void on_wheel_up(\n        unsigned long state\n    )\n    {\n        if (state == base_window::NONE)\n            cout << \"up scroll, NONE\" << endl;\n        else if (state&base_window::LEFT)\n            cout << \"up scroll, LEFT\" << endl;\n        else if (state&base_window::RIGHT)\n            cout << \"up scroll, RIGHT\" << endl;\n        else if (state&base_window::MIDDLE)\n            cout << \"up scroll, MIDDLE\" << endl;\n        else if (state&base_window::SHIFT)\n            cout << \"up scroll, SHIFT\" << endl;\n        else if (state&base_window::CONTROL)\n            cout << \"up scroll, CONTROL\" << endl;\n\n    }\n\n    void on_wheel_down(\n        unsigned long state\n    )\n    {\n        \n        if (state == base_window::NONE)\n            cout << \"down scroll, NONE\" << endl;\n        else if (state&base_window::LEFT)\n            cout << \"down scroll, LEFT\" << endl;\n        else if (state&base_window::RIGHT)\n            cout << \"down scroll, RIGHT\" << endl;\n        else if (state&base_window::MIDDLE)\n            cout << \"down scroll, MIDDLE\" << endl;\n        else if (state&base_window::SHIFT)\n            cout << \"down scroll, SHIFT\" << endl;\n        else if (state&base_window::CONTROL)\n            cout << \"down scroll, CONTROL\" << endl;\n\n    }\n\n\n    void on_window_resized ()\n    {\n        draggable::on_window_resized();\n    }\n    timer<color_box> t;\n};\n\n\n\n\n\n\nclass win : public drawable_window\n{\n\n    label lbl_last_keydown;\n    label lbl_mod_shift;\n    label lbl_mod_control;\n    label lbl_mod_alt;\n    label lbl_mod_meta;\n    label lbl_mod_caps_lock;\n    label lbl_mod_num_lock;\n    label lbl_mod_scroll_lock;\n    void on_keydown (\n        unsigned long key,\n        bool is_printable,\n        unsigned long state\n    )\n    {\n        if (is_printable)\n            lbl_last_keydown.set_text(string(\"last keydown: \") + (char)key);\n        else\n            lbl_last_keydown.set_text(string(\"last keydown: nonprintable\"));\n\n        if (state&base_window::KBD_MOD_SHIFT)\n            lbl_mod_shift.set_text(\"shift is on\");\n        else\n            lbl_mod_shift.set_text(\"shift is off\");\n\n        if (state&base_window::KBD_MOD_CONTROL)\n            lbl_mod_control.set_text(\"control is on\");\n        else\n            lbl_mod_control.set_text(\"control is off\");\n\n        if (state&base_window::KBD_MOD_ALT)\n            lbl_mod_alt.set_text(\"alt is on\");\n        else\n            lbl_mod_alt.set_text(\"alt is off\");\n\n\n        if (state&base_window::KBD_MOD_META)\n            lbl_mod_meta.set_text(\"meta is on\");\n        else\n            lbl_mod_meta.set_text(\"meta is off\");\n\n        if (state&base_window::KBD_MOD_CAPS_LOCK)\n            lbl_mod_caps_lock.set_text(\"caps_lock is on\");\n        else\n            lbl_mod_caps_lock.set_text(\"caps_lock is off\");\n\n        if (state&base_window::KBD_MOD_NUM_LOCK)\n            lbl_mod_num_lock.set_text(\"num_lock is on\");\n        else\n            lbl_mod_num_lock.set_text(\"num_lock is off\");\n\n\n        if (state&base_window::KBD_MOD_SCROLL_LOCK)\n            lbl_mod_scroll_lock.set_text(\"scroll_lock is on\");\n        else\n            lbl_mod_scroll_lock.set_text(\"scroll_lock is off\");\n\n        drawable_window::on_keydown(key,is_printable,state);\n    }\n\n    void rb_click (\n    )\n    {\n        if (rb.is_checked())\n            rb.set_name(\"radio button checked\");\n        else\n            rb.set_name(\"radio button\");\n        rb.set_checked();\n    }\n\n    void cb_sb_enabled (\n        toggle_button&\n    )\n    {\n        if (sb_enabled.is_checked())\n        { \n            sb.enable();\n            lb.enable();\n            b.enable();\n        }\n        else\n        {\n            lb.disable();\n            sb.disable();\n            b.disable();\n        }\n\n        if (sb_enabled.is_checked())\n            rb.enable();\n        else\n            rb.disable();\n\n        if (sb_enabled.is_checked())\n            tabs.enable();\n        else\n            tabs.disable();\n\n        if (sb_enabled.is_checked())\n            tf.enable();\n        else\n            tf.disable();\n\n        if (sb_enabled.is_checked())\n            tb.enable();\n        else\n            tb.disable();\n\n    }\n\n    void cb_sb_shown (\n    )\n    {\n        if (sb_shown.is_checked())\n        {\n            sb.show();\n            tabs.show();\n            lb.show();\n        }\n        else\n        {\n            sb.hide();\n            tabs.hide();\n            lb.hide();\n        }\n    }\n\n\n    void tab_change (\n        unsigned long new_idx,\n        unsigned long \n    )\n    {\n        tab_label.set_text(tabs.tab_name(new_idx));\n    }\n\n    void scroll_handler (\n    )\n    {\n        ostringstream sout;\n        sout << \"scroll bar pos: \" << sb.slider_pos();\n        sbl.set_text(sout.str());\n    }\n\n    void scroll2_handler (\n    )\n    {\n        sb.set_length(sb2.slider_pos());\n        ostringstream sout;\n        sout << \"scroll bar2 pos: \" << sb2.slider_pos();\n        sbl2.set_text(sout.str());\n        scroll_handler();\n    }\n\n    void scroll3_handler (\n    )\n    {\n        sb.set_max_slider_pos(sb3.slider_pos());\n        ostringstream sout;\n        sout << \"scroll bar3 pos: \" << sb3.slider_pos();\n        sbl3.set_text(sout.str());\n        scroll_handler();\n    }\n\n    void lb_double_click (\n        unsigned long \n    )\n    {\n        dlib::queue<unsigned long>::kernel_2a_c sel;\n        lb.get_selected(sel);\n        sel.reset();\n        while (sel.move_next())\n        {\n            cout << lb[sel.element()] << endl;\n        }\n        //message_box(\"list_box\",lb[idx]);\n    }\n\n    void msg_box (\n    )\n    {\n        message_box(\"title\",\"you clicked the ok button!\\n HURRAY!\");\n    }\n\n\tstatic void try_this_junk (\n\t\tvoid* param\n\t\t)\n\t{\n\t\twin& p = *reinterpret_cast<win*>(param);\n        put_on_clipboard(p.tf.text() + \"\\nfoobar\");\n\n\t\t\n\t}\n\n    void on_set_clipboard (\n    )\n    {\n        create_new_thread(try_this_junk,this);\n\t\t//try_this_junk(this);\n    }\n\n\tstatic void try_this_junk2 (\n\t\tvoid* \n\t\t)\n\t{\n\n        string temp;\n        get_from_clipboard(temp);\n        message_box(\"clipboard\",temp);\n\t\t\n\t}\n    void on_get_clipboard (\n    )\n    {\n        create_new_thread(try_this_junk2,this);\n    }\n\n\n    void on_show_msg_click (\n    )\n    {\n        message_box(\"title\",\"This is a test message.\",*this,&win::msg_box);\n    }\n\n    void on_menu_help (\n    )\n    {\n        message_box(\"About\",\"This is the messy dlib gui regression test program\");\n    }\n\npublic:\n\n    ~win()\n    {\n        close_window();\n    }\n\n    void cbox_clicked (\n    )\n    {\n        if (cbox.is_checked())\n            cbl.set_text(cbox.name() + \" box is checked\");\n        else\n            cbl.set_text(\"box NOT is checked\");\n    }\n\n    win (\n    ): \n        drawable_window(true),\n        lbl_last_keydown(*this),\n        lbl_mod_shift(*this),\n        lbl_mod_control(*this),\n        lbl_mod_alt(*this),\n        lbl_mod_meta(*this),\n        lbl_mod_caps_lock(*this),\n        lbl_mod_num_lock(*this),\n        lbl_mod_scroll_lock(*this),\n        b(*this),\n        btn_count(*this),\n        btn_get_clipboard(*this),\n        btn_set_clipboard(*this),\n        btn_show_message(*this),\n        cb1(*this,rectangle(100,100,200,200),255,0,0),\n        cb2(*this,rectangle(150,150,250,240),0,255,0),\n        cbl(*this),\n        cbox(*this),\n        group1(*this),\n        group2(*this),\n        group3(*this),\n        keyboard_count(1),\n        keydown(*this),\n        keyup(*this),\n        l1(*this),\n        l2(*this),\n        l3(*this),\n        lb(*this),\n        leave_count(*this),\n        left_down(*this),\n        left_up(*this),\n        middle_down(*this),\n        middle_up(*this),\n        mouse_state(*this),\n        mt(*this),\n        nrect(*this),\n        pos(*this),\n        rb(*this),\n        right_down(*this),\n        right_up(*this),\n        sb2(*this,scroll_bar::VERTICAL),\n        sb3(*this,scroll_bar::VERTICAL),\n        sb_enabled(*this),\n        sbl2(*this),\n        sbl3(*this),\n        sbl(*this),\n        sb_shown(*this),\n        sb(*this,scroll_bar::HORIZONTAL),\n        scroll(*this),\n        tab_label(*this),\n        tabs(*this),\n        tf(*this),\n        tb(*this),\n        mbar(*this)\n    {\n        bool use_bdf_fonts = false;\n\n        shared_ptr_thread_safe<bdf_font> f(new bdf_font);\n        \n        if (use_bdf_fonts)\n        {\n\n            ifstream fin(\"/home/davis/source/10x20.bdf\");\n            f->read_bdf_file(fin,0xFFFF);\n\n            mt.set_main_font(f);\n        }\n        //mt.hide();\n        mt.set_pos(5,200);\n\n\n        lbl_last_keydown.set_text(\"?\");\n        lbl_mod_shift.set_text(\"?\");\n        lbl_mod_control.set_text(\"?\");\n        lbl_mod_alt.set_text(\"?\");\n        lbl_mod_meta.set_text(\"?\");\n        lbl_mod_caps_lock.set_text(\"?\");\n        lbl_mod_num_lock.set_text(\"?\");\n        lbl_mod_scroll_lock.set_text(\"?\");\n\n        lbl_last_keydown.set_pos(20,420);\n        lbl_mod_shift.set_pos(20,lbl_last_keydown.bottom()+5);\n        lbl_mod_control.set_pos(20,lbl_mod_shift.bottom()+5);\n        lbl_mod_alt.set_pos(20,lbl_mod_control.bottom()+5);\n        lbl_mod_meta.set_pos(20,lbl_mod_alt.bottom()+5);\n        lbl_mod_caps_lock.set_pos(20,lbl_mod_meta.bottom()+5);\n        lbl_mod_num_lock.set_pos(20,lbl_mod_caps_lock.bottom()+5);\n        lbl_mod_scroll_lock.set_pos(20,lbl_mod_num_lock.bottom()+5);\n\n        lb.set_pos(580,200);\n        lb.set_size(200,300);\n        if (use_bdf_fonts)\n            lb.set_main_font(f);\n\n        dlib::queue<string>::kernel_2a_c qos;\n        string a;\n        a = \"Davis\"; qos.enqueue(a);\n        a = \"king\"; qos.enqueue(a);\n        a = \"one\"; qos.enqueue(a);\n        a = \"two\"; qos.enqueue(a);\n        a = \"three\"; qos.enqueue(a);\n        a = \"yo yo yo alsdkjf asfj lsa jfsf\\n this is a long phrase\"; qos.enqueue(a);\n        a = \"four\"; qos.enqueue(a);\n        a = \"five\"; qos.enqueue(a);\n        a = \"six\"; qos.enqueue(a);\n        a = \"seven\"; qos.enqueue(a);\n        a = \"eight\"; qos.enqueue(a);\n        a = \"nine\"; qos.enqueue(a);\n        a = \"ten\"; qos.enqueue(a);\n        a = \"eleven\"; qos.enqueue(a);\n        a = \"twelve\"; qos.enqueue(a);\n        for (int i = 0; i < 1000; ++i)\n        {\n            a = \"thirteen\"; qos.enqueue(a);\n        }\n        lb.load(qos);\n        lb.select(1);\n        lb.select(2);\n        lb.select(3);\n        lb.select(5);\n        lb.enable_multiple_select();\n        lb.set_double_click_handler(*this,&win::lb_double_click);\n        //        lb.disable_multiple_select();\n\n        btn_show_message.set_pos(50,350);\n        btn_show_message.set_name(\"message_box()\");\n        mbar.set_number_of_menus(2);\n        mbar.set_menu_name(0,\"File\",'F');\n        mbar.set_menu_name(1,\"Help\",'H');\n        mbar.menu(0).add_menu_item(menu_item_text(\"show msg click\",*this,&win::on_show_msg_click,'s'));\n        mbar.menu(0).add_menu_item(menu_item_text(\"get clipboard\",*this,&win::on_get_clipboard,'g'));\n        mbar.menu(0).add_menu_item(menu_item_text(\"set clipboard\",*this,&win::on_set_clipboard,'c'));\n        mbar.menu(0).add_menu_item(menu_item_separator());\n        mbar.menu(0).add_submenu(menu_item_submenu(\"submenu\",'m'), submenu);\n        submenu.add_menu_item(menu_item_separator());\n        submenu.add_menu_item(menu_item_separator());\n        submenu.add_menu_item(menu_item_text(\"show msg click\",*this,&win::on_show_msg_click,'s'));\n        submenu.add_menu_item(menu_item_text(\"get clipboard\",*this,&win::on_get_clipboard,'g'));\n        submenu.add_menu_item(menu_item_text(\"set clipboard\",*this,&win::on_set_clipboard,'c'));\n        submenu.add_menu_item(menu_item_separator());\n        submenu.add_menu_item(menu_item_separator());\n        mbar.menu(1).add_menu_item(menu_item_text(\"About\",*this,&win::on_menu_help,'A'));\n\n        btn_show_message.set_click_handler(*this,&win::on_show_msg_click);\n        btn_get_clipboard.set_pos(btn_show_message.right()+5,btn_show_message.top());\n        btn_get_clipboard.set_name(\"get_from_clipboard()\");\n        btn_get_clipboard.set_click_handler(*this,&win::on_get_clipboard);\n\n        btn_get_clipboard.set_style(button_style_toolbar1());\n        btn_set_clipboard.set_pos(btn_get_clipboard.right()+5,btn_get_clipboard.top());\n        btn_set_clipboard.set_name(\"put_on_clipboard()\");\n        btn_set_clipboard.set_click_handler(*this,&win::on_set_clipboard);\n\n        nrect.set_size(700,500);\n        nrect.set_name(\"test widgets\");\n        nrect.set_pos(2,mbar.bottom()+2);\n\n        //throw dlib::error(\"holy crap batman\");\n        tab_label.set_pos(10,440);\n\n        tabs.set_click_handler(*this,&win::tab_change); \n        tabs.set_pos(5,mbar.bottom()+10);\n        tabs.set_size(280,100);\n        tabs.set_number_of_tabs(3);\n        tabs.set_tab_name(0,\"davis\");\n        tabs.set_tab_name(1,\"edward\");\n        tabs.set_tab_name(2,\"king alsklsdkfj asfd\");\n        tabs.set_tab_group(0,group1);\n        tabs.set_tab_group(1,group2);\n        tabs.set_tab_group(2,group3);\n\n        l1.set_text(\"group one\");\n        l2.set_text(\"group two\");\n        l3.set_text(\"group three\");\n\n        group1.add(l1,0,0);\n        group2.add(l2,20,10);\n        group3.add(l3,0,0);\n\n\n\n        sb_enabled.set_name(\"enabled\");\n        sb_shown.set_name(\"shown\");\n        sb_shown.set_checked();\n        sb_enabled.set_checked();\n        sb_shown.set_click_handler(*this,&win::cb_sb_shown);\n        sb_enabled.set_click_handler(*this,&win::cb_sb_enabled);\n        \n        sb_shown.set_tooltip_text(\"I'm a checkbox\");\n\n        rb.set_click_handler(*this,&win::rb_click);\n\n\n        sb3.set_pos(440,mbar.bottom()+10);\n        sb3.set_max_slider_pos(300);\n        sb3.set_slider_pos(150);\n        sb3.set_length(300);\n        sb2.set_pos(470,mbar.bottom()+10);\n        sb2.set_max_slider_pos(300);\n        sb2.set_length(300);\n        sb.set_pos(500,mbar.bottom()+10);\n        sb.set_max_slider_pos(30);\n        sb.set_length(300);\n\n\n        sb.set_scroll_handler(*this,&win::scroll_handler);\n        sb2.set_scroll_handler(*this,&win::scroll2_handler);\n        sb3.set_scroll_handler(*this,&win::scroll3_handler);\n        sbl.set_pos(540,mbar.bottom()+20);\n        sbl2.set_pos(540,mbar.bottom()+40);\n        sbl3.set_pos(540,mbar.bottom()+60);\n\n        cbox.set_pos(300,mbar.bottom()+30);\n        cbox.set_name(\"davis king\");\n        cbox.set_click_handler(*this,&win::cbox_clicked);\n\n        cbl.set_pos(300,cbox.get_rect().bottom()+1);\n        cbox.set_checked();\n        sb_enabled.set_pos(cbox.get_rect().left(),cbox.get_rect().bottom()+20);\n        sb_shown.set_pos(sb_enabled.get_rect().left(),sb_enabled.get_rect().bottom()+2);\n\n\n\n        if (use_bdf_fonts)\n            rb.set_main_font(f);\n        rb.set_name(\"radio button\");\n        rb.set_pos(sb_shown.get_rect().left(),sb_shown.get_rect().bottom()+2);\n\n\n        cb1.set_z_order(10);\n        cb2.set_z_order(20);\n\n        pos.set_pos(50,50);\n        left_up.set_pos(50,70);\n        left_down.set_pos(50,90);\n        middle_up.set_pos(50,110);\n        middle_down.set_pos(50,130);\n        right_up.set_pos(50,150);\n        right_down.set_pos(50,170);\n\n        mouse_state.set_pos(50,190);\n\n        leave_count.set_pos(50,210);\n\n        scroll_count = 0;\n        scroll.set_pos(50,230);\n\n        btn_count.set_pos(50,250);\n\n\n        keydown.set_pos(50,270);\n        keyup.set_pos(50,290);\n\n        tf.set_pos(50,310);\n        tf.set_text(\"Davis685g@\");\n        tf.set_width(500);\n        tf.set_text_color(rgb_pixel(255,0,0));\n        tf.set_enter_key_handler(*this,&win::on_enter_key);\n        tf.set_focus_lost_handler(*this,&win::on_tf_focus_lost);\n        \n        tb.set_pos(250,400);\n        tb.set_text(\"initial test\\nstring\");\n        tb.set_size(300,300);\n        tb.set_text_color(rgb_pixel(255,0,0));\n        tb.set_enter_key_handler(*this,&win::on_enter_key);\n        tb.set_focus_lost_handler(*this,&win::on_tf_focus_lost);\n        \n\n        button_count = 0;\n        count = 0;\n        b.set_name(\"button\");\n        b.set_pos(540,100);\n        b.set_click_handler(*this,&win::on_click);\n        b.set_tooltip_text(\"hurray i'm a button!\");\n        if (use_bdf_fonts)\n            b.set_main_font(f);\n\n\n        set_size(815,730);\n\n        nrect.wrap_around(\n            cbox.get_rect() +\n            rb.get_rect() + \n            sb_enabled.get_rect() + \n            sb_shown.get_rect());\n\n        flip = 0;\n        open_file_box(*this,&win::on_open_file);\n        open_existing_file_box(*this,&win::on_open_file);\n        save_file_box(*this,&win::on_open_file);\n\n        if (use_bdf_fonts)\n        {\n            tf.set_main_font(f);\n            tb.set_main_font(f);\n        }\n        if (use_bdf_fonts)\n            tabs.set_main_font(f);\n\n    }\n\nprivate:\n\n\n    void on_enter_key()\n    {\n        cout << \"enter key pressed\" << endl;\n    }\n\n    void on_tf_focus_lost()\n    {\n        cout << \"text field/box lost focus\" << endl;\n    }\n\n\n    void on_open_file (const std::string& file)\n    {\n        message_box(\"file opened\",file);\n    }\n\n\n\n\n    void on_click (\n    )\n    {\n        ostringstream sout;\n        sout << \"text field: \" << tf.text();\n        ++button_count;\n        btn_count.set_text(sout.str());\n\n        if (flip == 0)\n        {\n            flip = 1;\n            lb.set_size(200,200);\n        }\n        else if (flip == 1)\n        {\n            flip = 2;\n            lb.set_size(150,200);\n        }\n        else if (flip == 2)\n        {\n            flip = 3;\n            lb.set_size(150,300);\n        }\n        else\n        {\n            flip = 0;\n            lb.set_size(200,300);\n        }\n    }\n\n\n    button b;\n    label btn_count;\n    button btn_get_clipboard;\n    button btn_set_clipboard;\n    button btn_show_message;\n    int button_count;\n    color_box cb1;\n    color_box cb2;\n    label cbl;\n    check_box cbox;\n    int count;\n    int flip;\n    widget_group group1;\n    widget_group group2;\n    widget_group group3;\n    int keyboard_count;\n    label keydown;\n    label keyup;\n    label l1;\n    label l2;\n    label l3;\n    list_box lb;\n    label leave_count;\n    label left_down;\n    label left_up;\n    label middle_down;\n    label middle_up;\n    label mouse_state;\n    mouse_tracker mt;\n    named_rectangle nrect;\n    label pos;\n    radio_button rb;\n    label right_down;\n    label right_up;\n    scroll_bar sb2;\n    scroll_bar sb3;\n    check_box sb_enabled;\n    label sbl2;\n    label sbl3;\n    label sbl;\n    check_box sb_shown;\n    scroll_bar sb;\n    int scroll_count;\n    label scroll;\n    label tab_label;\n    tabbed_display tabs;\n    text_field tf;\n    text_box tb;\n    menu_bar mbar;\n    popup_menu submenu;\n\n};\n\n\nwin w;\n\nint main()\n{\n\n    try\n    {\n\n        image_window win;\n\n        array2d<unsigned char> img;\n        img.set_size(100,100);\n        assign_all_pixels(img,0);\n\n        fill_rect(img, rectangle(1,1,1,1), 255);\n        fill_rect(img, rectangle(1,3,2,5), 255);\n        fill_rect(img, rectangle(4,3,5,4), 255);\n        fill_rect(img, rectangle(9,9,13,10), 255);\n\n        win.set_image(img);\n\n        win.add_overlay(image_display::overlay_rect(rectangle(1,1,1,1), rgb_pixel(255,0,0)));\n        win.add_overlay(image_display::overlay_rect(rectangle(1,3,2,5), rgb_pixel(255,0,0)));\n        win.add_overlay(image_display::overlay_rect(rectangle(4,3,5,4), rgb_pixel(255,0,0)));\n        win.add_overlay(image_display::overlay_rect(rectangle(9,9,13,10), rgb_pixel(255,0,0)));\n\n\n\n        w.set_pos (100,200);\n        w.set_title(\"test window\");\n        w.show();\n\n        w.wait_until_closed();\n    }\n    catch (exception& e)\n    {\n        cout << e.what() << endl;\n    }\n\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/hash.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/hash.h>\n#include <dlib/rand.h>\n#include <dlib/matrix.h>\n#include <dlib/byte_orderer.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.hash\");\n\n\n    template <typename T>\n    void to_little (\n        std::vector<T>& item\n    )\n    {\n        byte_orderer bo;\n        for (unsigned long i = 0; i < item.size(); ++i)\n            bo.host_to_little(item[i]);\n    }\n\n\n    template <typename T>\n    void to_little (\n        matrix<T>& item\n    )\n    {\n        byte_orderer bo;\n        for (long r = 0; r < item.nr(); ++r)\n        {\n            for (long c = 0; c < item.nc(); ++c)\n            {\n                bo.host_to_little(item(r,c));\n            }\n        }\n    }\n\n    // Run the official test for MurmurHash3\n    void murmur_hash_test()\n    {\n        uint8 key[256];\n        uint32 hashes[256];\n        uint32 final = 0;\n\n        memset(key,0,sizeof(key));\n        memset(hashes,0,sizeof(hashes));\n\n        // Hash keys of the form {0}, {0,1}, {0,1,2}... up to N=255,using 256-N as\n        // the seed.\n        for(int i = 0; i < 256; i++)\n        {\n            key[i] = (uint8)i;\n\n            hashes[i] = murmur_hash3(key,i,256-i);\n        }\n\n        byte_orderer bo;\n        bo.host_to_little(hashes);\n        final = murmur_hash3(hashes,sizeof(hashes),0);\n\n        // using ostringstream to avoid compiler error in visual studio 2005\n        ostringstream sout;\n        sout << hex << final;\n        dlog << LINFO << \"final: \"<< sout.str();\n        DLIB_TEST(final == 0xB0F57EE3);\n    }\n\n    void murmur_hash_128_test()\n    {\n        uint8 key[256];\n        uint64 hashes[256*2];\n        uint32 final = 0;\n\n        memset(key,0,sizeof(key));\n        memset(hashes,0,sizeof(hashes));\n\n        // Hash keys of the form {0}, {0,1}, {0,1,2}... up to N=255,using 256-N as\n        // the seed.\n        for(int i = 0; i < 256; i++)\n        {\n            key[i] = (uint8)i;\n\n            const std::pair<uint64,uint64> temp = murmur_hash3_128bit(key,i,256-i);\n            hashes[2*i]   = temp.first;\n            hashes[2*i+1] = temp.second;\n        }\n\n        byte_orderer bo;\n        bo.host_to_little(hashes);\n        final = static_cast<uint32>(murmur_hash3_128bit(hashes,sizeof(hashes),0).first);\n\n        // using ostringstream to avoid compiler error in visual studio 2005\n        ostringstream sout;\n        sout << hex << final;\n        dlog << LINFO << \"final 64: \"<< sout.str();\n        DLIB_TEST(final == 0x6384BA69);\n    }\n\n    void test_murmur_hash_128_4()\n    {\n        byte_orderer bo;\n        dlib::rand rnd;\n        for (int i = 0; i < 100; ++i)\n        {\n            uint32 buf[4] = { rnd.get_random_32bit_number(), \n                rnd.get_random_32bit_number(),\n                rnd.get_random_32bit_number(),\n                rnd.get_random_32bit_number()\n            };\n\n            bo.host_to_little(buf);\n\n            std::pair<uint64,uint64> temp1, temp2;\n\n            // Make sure the 4 integer version of murmur hash does the same thing \n            // as the memory block version.\n            temp1 = murmur_hash3_128bit(buf, sizeof(buf), 0);\n            temp2 = murmur_hash3_128bit(buf[0], buf[1], buf[2], buf[3]);\n            DLIB_TEST( temp1.first == temp2.first);\n            DLIB_TEST( temp1.second == temp2.second);\n        }\n    }\n\n    void test_murmur_hash_128_3()\n    {\n        byte_orderer bo;\n        dlib::rand rnd;\n        for (int i = 0; i < 100; ++i)\n        {\n            uint64 buf[2] = { rnd.get_random_64bit_number(), \n                rnd.get_random_64bit_number(),\n            };\n\n            const uint32 seed = rnd.get_random_32bit_number();\n\n            bo.host_to_little(buf);\n            std::pair<uint64,uint64> temp1, temp2;\n\n            // Make sure the 3 integer version of murmur hash does the same thing \n            // as the memory block version.\n            temp1 = murmur_hash3_128bit(buf, sizeof(buf), seed);\n            temp2 = murmur_hash3_128bit_3(buf[0], buf[1], seed);\n            DLIB_TEST( temp1.first == temp2.first);\n            DLIB_TEST( temp1.second == temp2.second);\n        }\n    }\n\n    void test_murmur_hash_64_2()\n    {\n        byte_orderer bo;\n        dlib::rand rnd;\n        for (int i = 0; i < 100; ++i)\n        {\n            uint32 val = rnd.get_random_32bit_number();\n            const uint32 seed = rnd.get_random_32bit_number();\n\n\n            bo.host_to_little(val);\n            uint32 temp1, temp2;\n\n            // Make sure the 2 integer version of murmur hash does the same thing \n            // as the memory block version.\n            temp1 = murmur_hash3(&val, sizeof(val), seed);\n            temp2 = murmur_hash3_2(val, seed);\n            DLIB_TEST(temp1 == temp2);\n        }\n    }\n\n    void test_murmur_hash_64_3()\n    {\n        byte_orderer bo;\n        dlib::rand rnd;\n        for (int i = 0; i < 100; ++i)\n        {\n            uint32 buf[2] = {rnd.get_random_32bit_number(), \n                             rnd.get_random_32bit_number()};\n            const uint32 seed = rnd.get_random_32bit_number();\n\n\n            bo.host_to_little(buf);\n            uint32 temp1, temp2;\n\n            // Make sure the 2 integer version of murmur hash does the same thing \n            // as the memory block version.\n            temp1 = murmur_hash3(&buf, sizeof(buf), seed);\n            temp2 = murmur_hash3_3(buf[0], buf[1], seed);\n            DLIB_TEST(temp1 == temp2);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    uint64  slow_count_bits ( uint64 v)\n    {\n        uint64 count = 0;\n        for (int i = 0; i < 64; ++i)\n        {\n            if (v&1)\n                ++count;\n            v >>= 1;\n        }\n        return count;\n    }\n\n\n    uint32  slow_count_bits ( uint32 v)\n    {\n        uint32 count = 0;\n        for (int i = 0; i < 32; ++i)\n        {\n            if (v&1)\n                ++count;\n            v >>= 1;\n        }\n        return count;\n    }\n\n\n// ----------------------------------------------------------------------------------------\n\n    void test_hamming_stuff()\n    {\n        dlib::rand rnd;\n        for (int i = 0; i < 10000; ++i)\n        {\n            uint32 v = rnd.get_random_32bit_number();\n            uint64 v2 = rnd.get_random_64bit_number();\n            DLIB_TEST(slow_count_bits(v) == count_bits(v));\n            DLIB_TEST(slow_count_bits(v2) == count_bits(v2));\n        }\n\n        DLIB_TEST(hamming_distance((uint32)0x1F, (uint32)0x0F) == 1);\n        DLIB_TEST(hamming_distance((uint32)0x1F, (uint32)0x1F) == 0);\n        DLIB_TEST(hamming_distance((uint32)0x1F, (uint32)0x19) == 2);\n        DLIB_TEST(hamming_distance((uint32)0x2F, (uint32)0x19) == 4);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_hash : public tester\n    {\n    public:\n        test_hash (\n        ) :\n            tester (\"test_hash\",\n                    \"Runs tests on the hash routines.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n\n            test_hamming_stuff();\n\n            murmur_hash_test();\n            murmur_hash_128_test();\n\n            std::string str1 = \"some random string\";\n            matrix<unsigned char> mat(2,2);\n\n            mat = 1,2,3,4;\n\n            matrix<uint64> mat2(2,3);\n\n            mat2 = 1,2,3,4,5,6;\n\n            to_little(mat2);\n\n            std::vector<unsigned char> v(4);\n            v[0] = 'c';\n            v[1] = 'a';\n            v[2] = 't';\n            v[3] = '!';\n\n            std::vector<uint16> v2(4);\n            v[0] = 'c';\n            v[1] = 'a';\n            v[2] = 't';\n            v[3] = '!';\n            to_little(v2);\n\n            std::map<unsigned char, unsigned char> m;\n            m['c'] = 'C';\n            m['a'] = 'A';\n            m['t'] = 'T';\n\n            dlog << LINFO << \"hash(str1): \"<< dlib::hash(str1);\n            dlog << LINFO << \"hash(v):    \"<< dlib::hash(v);\n            dlog << LINFO << \"hash(v2):   \"<< dlib::hash(v2);\n            dlog << LINFO << \"hash(m):    \"<< dlib::hash(m);\n            dlog << LINFO << \"hash(mat):  \"<< dlib::hash(mat);\n            dlog << LINFO << \"hash(mat2): \"<< dlib::hash(mat2);\n\n            uint32 ui1 = 123485393;\n            uint64 ui2 = ui1;\n            ui2 *= ui2;\n            ui2 *= ui2;\n            dlog << LINFO << \"hash(ui1):                  \"<< dlib::hash(ui1);\n            dlog << LINFO << \"hash(ui2):                  \"<< dlib::hash(ui2);\n            dlog << LINFO << \"hash(make_pair(ui2,ui1)):   \"<< dlib::hash(make_pair(ui2,ui1));\n            dlog << LINFO << \"hash(make_pair(ui2,ui2)):   \"<< dlib::hash(make_pair(ui2,ui2));\n            dlog << LINFO << \"hash(make_pair(ui1,ui1)):   \"<< dlib::hash(make_pair(ui1,ui1));\n            dlog << LINFO << \"hash(ui1,3):                \"<< dlib::hash(ui1,3);\n            dlog << LINFO << \"hash(ui2,3):                \"<< dlib::hash(ui2,3);\n            dlog << LINFO << \"hash(make_pair(ui2,ui1),3): \"<< dlib::hash(make_pair(ui2,ui1),3);\n            dlog << LINFO << \"hash(make_pair(ui2,ui2),3): \"<< dlib::hash(make_pair(ui2,ui2),3);\n            dlog << LINFO << \"hash(make_pair(ui1,ui1),3): \"<< dlib::hash(make_pair(ui1,ui1),3);\n\n            DLIB_TEST(dlib::hash(ui1) == 0x63e272e4);\n            DLIB_TEST(dlib::hash(ui2) == 0xaf55561a);\n            DLIB_TEST(dlib::hash(make_pair(ui2,ui1)) == 0x52685376);\n            DLIB_TEST(dlib::hash(make_pair(ui2,ui2)) == 0xd25d6929);\n            DLIB_TEST(dlib::hash(make_pair(ui1,ui1)) == 0xeea3b63e);\n            DLIB_TEST(dlib::hash(ui1,3) == 0x95d1c4c0);\n            DLIB_TEST(dlib::hash(ui2,3) == 0x6ada728d);\n            DLIB_TEST(dlib::hash(make_pair(ui2,ui1),3) == 0x2f72a0ff);\n            DLIB_TEST(dlib::hash(make_pair(ui2,ui2),3) == 0xac1407f0);\n            DLIB_TEST(dlib::hash(make_pair(ui1,ui1),3) == 0x39ad637a);\n\n\n            DLIB_TEST(dlib::hash(str1) == 0x3ffe6bf6);\n            DLIB_TEST(dlib::hash(v)    == 0xf1af2ca6);\n            DLIB_TEST(dlib::hash(v2)   == 0x63852afc);\n            DLIB_TEST(dlib::hash(m)    == 0xaacc3f6f);\n            DLIB_TEST(dlib::hash(mat)  == 0x3e349da5);\n            DLIB_TEST(dlib::hash(mat2) == 0x3a95dc52);\n            DLIB_TEST(murmur_hash3(&str1[0], str1.size(), 0) == 0x3ffe6bf6);\n\n            dlog << LINFO << \"hash(str1,1): \"<< dlib::hash(str1,1);\n            dlog << LINFO << \"hash(v,3):    \"<< dlib::hash(v,3);\n            dlog << LINFO << \"hash(v2,3):   \"<< dlib::hash(v2,3);\n            dlog << LINFO << \"hash(m,4):    \"<< dlib::hash(m,4);\n            dlog << LINFO << \"hash(mat,5):  \"<< dlib::hash(mat,5);\n            dlog << LINFO << \"hash(mat2,6): \"<< dlib::hash(mat2,6);\n\n            DLIB_TEST(dlib::hash(str1,1) == 0xb17cea93);\n            DLIB_TEST(dlib::hash(v,3)    == 0x7ec9284c);\n            DLIB_TEST(dlib::hash(v2,3)   == 0xb2ce147f);\n            DLIB_TEST(dlib::hash(m,4)    == 0xfa5e7ac2);\n            DLIB_TEST(dlib::hash(mat,5)  == 0x8de27259);\n            DLIB_TEST(dlib::hash(mat2,6) == 0xb8aa7714);\n            DLIB_TEST(murmur_hash3(&str1[0], str1.size(), 1) == 0xb17cea93);\n\n            test_murmur_hash_128_4();\n            test_murmur_hash_128_3();\n            test_murmur_hash_64_2();\n            test_murmur_hash_64_3();\n        }\n    } a;\n\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/hash_map.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/hash_map.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.hash_map\");\n\n    template <\n        typename hash_map\n        >\n    void hash_map_kernel_test (\n    )\n    /*!\n        requires\n            - hash_map is an implementation of hash_map/hash_map_kernel_abstract.h and \n              is instantiated to map int to int\n        ensures\n            - runs tests on hash_map for compliance with the specs \n    !*/\n    {        \n\n        srand(static_cast<unsigned int>(time(0)));\n\n        print_spinner();\n\n\n        hash_map test, test2;\n\n        enumerable<map_pair<int,int> >& e = test;\n        DLIB_TEST(e.at_start() == true);\n\n        for (int j = 0; j < 4; ++j)\n        {\n            print_spinner();\n\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n\n\n            int a,b;\n            a = 8;\n            b = 94;\n            test.add(a,b);\n            DLIB_TEST(test.size() == 1);\n            DLIB_TEST(test.is_in_domain(8) == true);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n            DLIB_TEST(test[8] == 94);\n            a = 53;\n            b = 4;\n            test.add(a,b);\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test.is_in_domain(53) == true);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n            DLIB_TEST(test[53] == 4);\n\n\n            swap(test,test2);\n\n\n            DLIB_TEST_MSG(test2.size() == 2,test2.size());\n            DLIB_TEST(test2.is_in_domain(8) == true);\n            DLIB_TEST(test2.is_in_domain(5) == false);\n            DLIB_TEST(test2.is_in_domain(0) == false);\n            DLIB_TEST(test2.is_in_domain(-999) == false);\n            DLIB_TEST(test2.is_in_domain(4999) == false);\n            DLIB_TEST(test2[8] == 94);\n            DLIB_TEST(test2.size() == 2);\n            DLIB_TEST(test2.is_in_domain(53) == true);\n            DLIB_TEST(test2.is_in_domain(5) == false);\n            DLIB_TEST(test2.is_in_domain(0) == false);\n            DLIB_TEST(test2.is_in_domain(-999) == false);\n            DLIB_TEST(test2.is_in_domain(4999) == false);\n            DLIB_TEST(test2[53] == 4);\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_in_domain(8) == false);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_in_domain(53) == false);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n\n\n            test.clear();\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n\n\n            DLIB_TEST(test.size() == 0);\n\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                b = ::rand();\n                if (!test.is_in_domain(a))\n                    test.add(a,b);\n            }\n\n            DLIB_TEST(test.size() == 10000);\n            test.clear();\n            DLIB_TEST(test.size() == 0);\n\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                b = ::rand();\n                if (!test.is_in_domain(a))\n                    test.add(a,b);\n            }\n\n            DLIB_TEST(test.size() == 10000);\n\n            int count = 0;\n            while (test.move_next())\n            {\n                DLIB_TEST(test.element().key() == test.element().key());\n                DLIB_TEST(test.element().value() == test.element().value());\n                DLIB_TEST(test.element().key() == test.element().key());\n                DLIB_TEST(test.element().value() == test.element().value());\n\n\n\n                ++count;\n            }\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.move_next() == false);\n\n            DLIB_TEST(count == 10000);\n\n            test.swap(test2);\n\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test2.size() == 10000);\n            count = 0;\n            test2.reset();\n\n            test2.move_next();\n            test2.element().value() = 99;\n            DLIB_TEST(test2[test2.element().key()] == 99);\n            DLIB_TEST(test2.element().value() == 99);\n\n            test2.reset();\n\n            while (test2.move_next())\n            {\n                DLIB_TEST(test2[test2.element().key()] == test2.element().value());\n                DLIB_TEST(test2.element().key() == test2.element().key());\n                DLIB_TEST(test2.element().value() == test2.element().value());\n                DLIB_TEST(test2.element().key() == test2.element().key());\n                DLIB_TEST(test2.element().value() == test2.element().value());\n\n                ++count;\n            }\n            DLIB_TEST(test2.size() == 10000);\n            DLIB_TEST(count == 10000);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.move_next() == false);\n\n\n\n            test2.clear();\n            DLIB_TEST(test2.size() == 0);\n            DLIB_TEST(test2.at_start() == true);\n\n            while (test.size() < 20000)\n            {\n                a = ::rand();\n                b = ::rand();\n                if (!test.is_in_domain(a))\n                    test.add(a,b);\n            }\n\n            DLIB_TEST(test.at_start() == true);\n\n            {\n                int* array1 = new int[test.size()];\n                int* array2 = new int[test.size()];\n\n                int* tmp1 = array1;\n                int* tmp2 = array2;\n\n\n\n                // serialize the state of test, then clear test, then\n                // load the state back into test.\n                ostringstream sout;\n                serialize(test,sout);\n                DLIB_TEST(test.at_start() == true);\n                istringstream sin(sout.str());\n                test.clear();\n                deserialize(test,sin);\n                DLIB_TEST(test.at_start() == true);\n\n\n                count = 0;\n                while (test.move_next())\n                {\n                    DLIB_TEST(test.element().key() == test.element().key());\n                    DLIB_TEST(test.element().value() == test.element().value());\n                    DLIB_TEST(test.element().key() == test.element().key());\n                    DLIB_TEST(test.current_element_valid() == true);\n                    *tmp1 = test.element().key();\n                    *tmp2 = test.element().value();\n                    ++tmp1;\n                    ++tmp2;\n                    ++count;\n                }\n                DLIB_TEST(count == 20000);\n\n                tmp1 = array1;\n                tmp2 = array2;\n                for (int i = 0; i < 20000; ++i)\n                {\n                    DLIB_TEST(test.is_in_domain(*tmp1) == true);\n                    DLIB_TEST(test[*tmp1] == *tmp2);\n                    ++tmp1;\n                    ++tmp2;\n                }\n\n                DLIB_TEST(test.size() == 20000);\n\n                tmp1 = array1;\n                tmp2 = array2;\n                count = 0;\n                while (test.size() > 10000)\n                {\n                    test.remove(*tmp1,a,b);\n                    DLIB_TEST(*tmp1 == a);\n                    DLIB_TEST(*tmp2 == b);\n                    ++tmp1;\n                    ++tmp2;\n                    ++count;\n                }\n                DLIB_TEST(count == 10000);\n                DLIB_TEST(test.size() == 10000);\n\n                while (test.move_next())\n                {\n                    DLIB_TEST(test.element().key() == *tmp1);\n                    DLIB_TEST(test.element().key() == *tmp1);\n                    DLIB_TEST(test.element().key() == *tmp1);\n                    DLIB_TEST(test.element().value() == *tmp2);\n                    DLIB_TEST(test.element().value() == *tmp2);\n                    DLIB_TEST(test.element().value() == *tmp2);\n                    ++tmp1;\n                    ++tmp2;\n                    ++count;\n                }\n                DLIB_TEST(count == 20000);\n                DLIB_TEST(test.size() == 10000);\n\n                while (test.size() < 20000)\n                {\n                    a = ::rand();\n                    b = ::rand();\n                    if (!test.is_in_domain(a))\n                        test.add(a,b);\n                }\n\n                test2.swap(test);\n\n                count = 0;\n                while (test2.move_next())\n                {\n                    DLIB_TEST(test2.element().key() == test2.element().key());\n                    DLIB_TEST(test2.element().value() == test2.element().value());\n                    DLIB_TEST(test2.element().key() == test2.element().key());\n\n                    ++count;\n                }\n\n                DLIB_TEST(count == 20000);\n                DLIB_TEST(test2.size() == 20000);\n\n                int c = 0;\n                while (test2.size()>0)\n                {\n                    test2.remove_any(b,c);\n\n                }\n\n                DLIB_TEST(test2.size() == 0);\n                delete [] array1;\n                delete [] array2;\n            }\n\n            test.clear();\n            test2.clear();\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                b = ::rand();\n                if (!test.is_in_domain(a))\n                    test.add(a,b);\n            }\n\n            count = 0; \n            while (test.move_next())\n            {\n\n                DLIB_TEST(test[test.element().key()] == test.element().value());\n\n                ++count;\n                if (count == 5000)\n                    break;\n                DLIB_TEST(test.current_element_valid() == true);\n            }\n\n            test.reset();\n\n            count = 0; \n\n            while (test.move_next())\n            {\n\n                ++count;\n                DLIB_TEST(test.current_element_valid() == true);\n            }\n\n            DLIB_TEST(count == 10000);\n\n\n            test.clear();\n            test2.clear();\n        }\n\n\n\n\n        {\n            test.clear();\n            DLIB_TEST(test.size() == 0);\n            int a = 5;\n            int b = 6;\n            test.add(a,b);\n            a = 7;\n            b = 8;\n            test.add(a,b);\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test[7] == 8);\n            DLIB_TEST(test[5] == 6);\n            DLIB_TEST(test.is_in_domain(7));\n            DLIB_TEST(test.is_in_domain(5));\n            test.destroy(7);\n            DLIB_TEST(test.size() == 1);\n            DLIB_TEST(!test.is_in_domain(7));\n            DLIB_TEST(test.is_in_domain(5));\n            test.destroy(5);\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(!test.is_in_domain(7));\n            DLIB_TEST(!test.is_in_domain(5));\n        }\n\n\n\n    }\n\n\n\n\n\n    class hash_map_tester : public tester\n    {\n    public:\n        hash_map_tester (\n        ) :\n            tester (\"test_hash_map\",\n                    \"Runs tests on the hash_map component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            hash_map_kernel_test<hash_map<int,int,14>::kernel_1a>();\n\n            dlog << LINFO << \"testing kernel_1b_c\";\n            hash_map_kernel_test<hash_map<int,int,14>::kernel_1a_c>();\n\n            dlog << LINFO << \"testing kernel_1b\";\n            hash_map_kernel_test<hash_map<int,int,14>::kernel_1b>();\n            \n            dlog << LINFO << \"testing kernel_1a_c\";\n            hash_map_kernel_test<hash_map<int,int,14>::kernel_1b_c>();\n\n            dlog << LINFO << \"testing kernel_1c\";\n            hash_map_kernel_test<hash_map<int,int,14>::kernel_1c>();\n\n            dlog << LINFO << \"testing kernel_1c_c\";\n            hash_map_kernel_test<hash_map<int,int,14>::kernel_1c_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/hash_set.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/hash_set.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n   \n    logger dlog(\"test.hash_set\");\n\n    template <\n        typename hash_set\n        >\n    void hash_set_kernel_test (\n    )\n    /*!\n        requires\n            - hash_set is an implementation of hash_set/hash_set_kernel_abstract.h and\n              is instantiated with int\n        ensures\n            - runs tests on hash_set for compliance with the specs \n    !*/\n    {        \n\n\n        srand(static_cast<unsigned int>(time(0)));\n\n\n        print_spinner();\n\n        hash_set test, test2;\n\n\n        enumerable<const int>& e = test;\n        DLIB_TEST(e.at_start() == true);\n\n\n        for (int j = 0; j < 4; ++j)\n        {\n            print_spinner();\n\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n\n\n            int a,b = 0;\n            a = 8;\n            test.add(a);\n            DLIB_TEST(test.size() == 1);\n            DLIB_TEST(test.is_member(8) == true);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n            a = 53;\n            test.add(a);\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test.is_member(53) == true);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n\n\n            swap(test,test2);\n\n\n\n            DLIB_TEST(test2.is_member(8) == true);\n            DLIB_TEST(test2.is_member(5) == false);\n            DLIB_TEST(test2.is_member(0) == false);\n            DLIB_TEST(test2.is_member(-999) == false);\n            DLIB_TEST(test2.is_member(4999) == false);\n            DLIB_TEST(test2.size() == 2);\n            DLIB_TEST(test2.is_member(53) == true);\n            DLIB_TEST(test2.is_member(5) == false);\n            DLIB_TEST(test2.is_member(0) == false);\n            DLIB_TEST(test2.is_member(-999) == false);\n            DLIB_TEST(test2.is_member(4999) == false);\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_member(8) == false);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_member(53) == false);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n\n\n            test.clear();\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n\n\n            DLIB_TEST(test.size() == 0);\n\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                if (!test.is_member(a))\n                    test.add(a);\n            }\n\n            DLIB_TEST(test.size() == 10000);\n            test.clear();\n            DLIB_TEST(test.size() == 0);\n\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                if (!test.is_member(a))\n                    test.add(a);\n            }\n\n            DLIB_TEST(test.size() == 10000);\n\n            int count = 0;\n            while (test.move_next())\n            {\n                DLIB_TEST(test.element() == test.element());\n                DLIB_TEST(test.element() == test.element());\n                DLIB_TEST(test.element() == test.element());\n\n\n                ++count;\n            }\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.move_next() == false);\n\n            DLIB_TEST(count == 10000);\n\n            test.swap(test2);\n\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test2.size() == 10000);\n            count = 0;\n            test2.reset();\n            while (test2.move_next())\n            {\n                DLIB_TEST(test2.element() == test2.element());\n                DLIB_TEST(test2.element() == test2.element());\n                DLIB_TEST(test2.element() == test2.element());\n\n                ++count;\n            }\n            DLIB_TEST(test2.size() == 10000);\n            DLIB_TEST(count == 10000);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.move_next() == false);\n\n\n\n            test2.clear();\n            DLIB_TEST(test2.size() == 0);\n            DLIB_TEST(test2.at_start() == true);\n\n            while (test.size() < 20000)\n            {\n                a = ::rand();\n                if (!test.is_member(a))\n                    test.add(a);\n            }\n\n            DLIB_TEST(test.at_start() == true);\n\n            {\n                int* array = new int[test.size()];\n                int* tmp = array;\n\n                // serialize the state of test, then clear test, then\n                // load the state back into test.\n                ostringstream sout;\n                serialize(test,sout);\n                DLIB_TEST(test.at_start() == true);\n                istringstream sin(sout.str());\n                test.clear();\n                deserialize(test,sin);\n\n\n\n                count = 0;\n                while (test.move_next())\n                {\n                    DLIB_TEST(test.element() == test.element());\n                    DLIB_TEST(test.element() == test.element());\n                    DLIB_TEST(test.element() == test.element());\n                    *tmp = test.element();\n                    ++tmp;\n                    ++count;\n                }\n                DLIB_TEST(count == 20000);\n\n                tmp = array;\n                for (int i = 0; i < 20000; ++i)\n                {\n                    DLIB_TEST(test.is_member(*tmp) == true);\n                    ++tmp;\n                }\n\n                DLIB_TEST(test.size() == 20000);\n\n                tmp = array;\n                count = 0;\n                while (test.size() > 10000)\n                {\n                    test.remove(*tmp,a);\n                    DLIB_TEST(*tmp == a);\n                    ++tmp;\n                    ++count;\n                }\n                DLIB_TEST(count == 10000);\n                DLIB_TEST(test.size() == 10000);\n\n                while (test.move_next())\n                {\n                    ++count;\n                }\n                DLIB_TEST(count == 20000);\n                DLIB_TEST(test.size() == 10000);\n\n                while (test.size() < 20000)\n                {\n                    a = ::rand();\n                    if (!test.is_member(a))\n                        test.add(a);\n                }\n\n                test2.swap(test);\n\n                count = 0;\n                while (test2.move_next())\n                {\n                    DLIB_TEST(test2.element() == test2.element());\n                    DLIB_TEST(test2.element() == test2.element());\n                    DLIB_TEST(test2.element() == test2.element());\n\n                    ++count;\n                }\n\n                DLIB_TEST(count == 20000);\n                DLIB_TEST(test2.size() == 20000);\n\n\n                while (test2.size()>0)\n                {\n                    test2.remove_any(b);\n                }\n\n                DLIB_TEST(test2.size() == 0);\n                delete [] array;\n            }\n\n            test.clear();\n            test2.clear();\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                if (!test.is_member(a))\n                    test.add(a);\n            }\n\n            count = 0; \n            while (test.move_next())\n            {                    \n                ++count;\n                if (count == 5000)\n                    break;\n                DLIB_TEST(test.current_element_valid() == true);\n            }\n\n            test.reset();\n\n            count = 0; \n            while (test.move_next())\n            {\n                ++count;\n                DLIB_TEST(test.current_element_valid() == true);\n            }\n\n            DLIB_TEST(count == 10000);\n\n\n            test.clear();\n            test2.clear();\n        }\n\n\n        {\n            test.clear();\n            DLIB_TEST(test.size() == 0);\n            int a = 5;\n            test.add(a);\n            a = 7;\n            test.add(a);\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test.is_member(7));\n            DLIB_TEST(test.is_member(5));\n            test.destroy(7);\n            DLIB_TEST(test.size() == 1);\n            DLIB_TEST(!test.is_member(7));\n            DLIB_TEST(test.is_member(5));\n            test.destroy(5);\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(!test.is_member(7));\n            DLIB_TEST(!test.is_member(5));\n        }\n\n    }\n\n\n\n\n    class hash_set_tester : public tester\n    {\n    public:\n        hash_set_tester (\n        ) :\n            tester (\"test_hash_set\",\n                    \"Runs tests on the hash_set component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            hash_set_kernel_test<hash_set<int,14>::kernel_1a>();\n            dlog << LINFO << \"testing kernel_1a_c\";\n            hash_set_kernel_test<hash_set<int,14>::kernel_1a_c>();\n            dlog << LINFO << \"testing kernel_1b\";\n            hash_set_kernel_test<hash_set<int,14>::kernel_1b>();\n            dlog << LINFO << \"testing kernel_1b_c\";\n            hash_set_kernel_test<hash_set<int,14>::kernel_1b_c>();\n            dlog << LINFO << \"testing kernel_1c\";\n            hash_set_kernel_test<hash_set<int,14>::kernel_1c>();\n            dlog << LINFO << \"testing kernel_1c_c\";\n            hash_set_kernel_test<hash_set<int,14>::kernel_1c_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/hash_table.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/hash_table.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.hash_table\");\n\n    template <\n        typename hash_table\n        >\n    void hash_table_kernel_test (\n    )\n    /*!\n        requires\n            - hash_table is an implementation of hash_table/hash_table_kernel_abstract.h \n              and is instantiated to map ints to ints\n        ensures\n            - runs tests on hash_table for compliance with the specs \n    !*/\n    {        \n\n        srand(static_cast<unsigned int>(time(0)));\n\n\n\n\n        {\n            hash_table test(16);\n\n            DLIB_TEST(test.count(3) == 0);\n\n            enumerable<map_pair<int,int> >& e = test;\n            DLIB_TEST(e.at_start() == true);\n\n            hash_table test2(16);\n\n            hash_table test3(0);\n            hash_table test4(0);\n\n\n            print_spinner();\n\n            int b;\n            for (int j = 0; j < 4; ++j)\n            {\n                int a = 4;\n                b = 5;\n                test2.add(a,b);\n                DLIB_TEST(test2.size() == 1);\n                DLIB_TEST(*test2[4] == 5);\n                DLIB_TEST(test2[99] == 0);\n\n                DLIB_TEST(test2.move_next());\n                DLIB_TEST(test2.element().key() == 4);\n                DLIB_TEST(test2.element().value() == 5);\n\n                swap(test,test2);\n                DLIB_TEST(test.size() == 1);\n                DLIB_TEST(*test[4] == 5);\n                DLIB_TEST(test[99] == 0);\n\n                test.swap(test2);\n\n                a = 99; \n                b = 35;\n                test2.add(a,b);\n                DLIB_TEST(test2.size() == 2);\n                DLIB_TEST(*test2[4] == 5);\n                DLIB_TEST(*test2[99] == 35);\n                DLIB_TEST(test2[99] != 0);\n                DLIB_TEST(test2[949] == 0);\n\n                test2.destroy(4);\n                DLIB_TEST(test2.size() == 1);\n                DLIB_TEST(test2[4] == 0);\n                DLIB_TEST(*test2[99] == 35);\n                DLIB_TEST(test2[99] != 0);\n                DLIB_TEST(test2[949] == 0);\n\n\n\n                test2.destroy(99);\n                DLIB_TEST(test2.size() == 0);\n                DLIB_TEST(test2[4] == 0);                \n                DLIB_TEST(test2[99] == 0);\n                DLIB_TEST(test2[949] == 0);\n\n\n\n                test2.clear();\n            }\n\n\n            print_spinner();\n\n\n\n\n            for (int j = 0; j < 4; ++j)\n            {\n\n                DLIB_TEST(test.count(3) == 0);\n                DLIB_TEST(test.size() == 0);\n                DLIB_TEST(test.at_start() == true);\n                DLIB_TEST(test.current_element_valid() == false);\n                DLIB_TEST(test.move_next() == false);\n                DLIB_TEST(test.at_start() == false);\n                DLIB_TEST(test.current_element_valid() == false);\n                DLIB_TEST(test.move_next() == false);\n                DLIB_TEST(test.move_next() == false);\n\n                int a;\n\n                for (int i = 0; i < 10000; ++i)\n                {\n                    a = ::rand()%1000;\n                    int temp = a;\n                    unsigned long count = test.count(a);\n                    test.add(a,b);\n                    DLIB_TEST(test.count(temp) == count+1);\n                }\n\n                {\n                    unsigned long count = test.count(3);\n\n                    a = 3; test.add(a,b); ++count;\n                    DLIB_TEST(test.count(3) == count);\n                    a = 3; test.add(a,b); ++count;\n                    DLIB_TEST(test.count(3) == count);\n                    a = 3; test.add(a,b); ++count;\n                    DLIB_TEST(test.count(3) == count);\n                    a = 3; test.add(a,b); ++count;\n                    DLIB_TEST(test.count(3) == count);\n                }\n\n\n                test.clear();\n\n\n                for (int i = 0; i < 10000; ++i)\n                {\n                    a = b = i;\n                    unsigned long count = test.count(a);\n                    test.add(a,b);\n                    DLIB_TEST(test.count(i) == count+1);\n                }\n\n                DLIB_TEST(test.size() == 10000);\n                DLIB_TEST(test.at_start() == true);\n                DLIB_TEST(test.current_element_valid() == false);\n                DLIB_TEST(test.move_next() == true);\n                DLIB_TEST(test.at_start() == false);\n                DLIB_TEST(test.current_element_valid() == true);\n                DLIB_TEST(test.move_next() == true);\n                DLIB_TEST(test.move_next() == true);            \n                DLIB_TEST(test.current_element_valid() == true);\n\n\n                test.reset();\n\n                DLIB_TEST(test.size() == 10000);\n                DLIB_TEST(test.at_start() == true);\n                DLIB_TEST(test.current_element_valid() == false);\n\n\n                if (test.size() > 0)\n                {\n                    int* array = new int[test.size()];\n                    int* tmp = array;\n\n                    int count = 0;\n                    while (test.move_next())\n                    {\n                        ++count;\n                        *tmp = test.element().key();\n                        DLIB_TEST(test[*tmp] != 0);                    \n                        DLIB_TEST(*tmp == test.element().key());\n                        DLIB_TEST(*tmp == test.element().value());\n                        DLIB_TEST(*tmp == test.element().key());\n                        DLIB_TEST(test.current_element_valid() == true);\n                        ++tmp;\n                    }\n\n                    DLIB_TEST(count == 10000);\n                    DLIB_TEST(test.at_start() == false);\n                    DLIB_TEST(test.current_element_valid() == false);\n                    DLIB_TEST(test.move_next() == false);\n                    DLIB_TEST(test.current_element_valid() == false);\n                    DLIB_TEST(test.at_start() == false);\n                    DLIB_TEST(test.current_element_valid() == false);\n\n                    DLIB_TEST(test.size() == 10000);\n\n                    swap(test,test2);\n\n\n\n\n                    // serialize the state of test2, then clear test2, then\n                    // load the state back into test2.\n                    ostringstream sout;\n                    serialize(test2,sout);\n                    DLIB_TEST(test2.at_start() == true);\n                    istringstream sin(sout.str());\n                    test2.clear();\n                    deserialize(test2,sin);\n                    DLIB_TEST(test2.at_start() == true);\n\n\n\n\n                    tmp = array;\n                    for (int i = 0; i < 10000; ++i)\n                    {\n                        DLIB_TEST(*test2[*tmp] == *tmp);\n                        DLIB_TEST(*test2[*tmp] == *tmp);\n                        DLIB_TEST(*test2[*tmp] == *tmp);\n                        ++tmp;\n                    }\n\n                    test2.swap(test);\n                    test.reset();\n\n                    DLIB_TEST(test.at_start() == true);\n                    count = 0;\n                    tmp = array;\n                    while (test.size() > 0)\n                    {\n                        test.remove(*tmp,a,b);\n\n                        ++tmp;\n                        ++count;\n                    }\n\n                    DLIB_TEST(count == 10000);\n                    DLIB_TEST(test.size() == 0);\n\n\n\n                    DLIB_TEST(count == 10000);\n\n\n\n\n\n\n\n                    delete [] array;\n                }\n\n                test.move_next();\n\n                for (int i = 0; i < 10000; ++i)\n                {\n                    a = ::rand();\n                    test.add(a,b);\n                }\n\n                DLIB_TEST(test.at_start() == true);\n                DLIB_TEST(test.move_next() == true);\n\n                DLIB_TEST(test.size() == 10000);\n\n                for (int i = 0; i < 10000; ++i)\n                {\n                    test.remove_any(a,b);\n                }\n\n                DLIB_TEST(test.at_start() == true);\n                DLIB_TEST(test.move_next() == false);\n                DLIB_TEST(test.size() == 0);\n\n                test.clear();\n\n\n\n\n\n\n\n\n\n                int* dtmp = new int[10000];\n                int* rtmp = new int[10000];\n\n                int* d = dtmp;\n                int* r = rtmp;\n                for (unsigned long i = 0; i < 10000; ++i)\n                {\n                    a = ::rand();\n                    b = ::rand();\n                    *d = a;\n                    *r = b;\n                    if (test[a] != 0)\n                    {\n                        --i;\n                        continue;\n                    }\n                    test.add(a,b);\n                    ++d;\n                    ++r;\n                    DLIB_TEST(test.size() == i+1);\n                }\n\n                DLIB_TEST(test.size() == 10000);\n\n                for (int i = 0; i < 10000; ++i)\n                {\n                    DLIB_TEST(*test[dtmp[i]] == rtmp[i]);\n                }\n\n\n                delete [] dtmp;\n                delete [] rtmp;\n\n                test.clear();\n            }}\n\n\n            print_spinner();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n            // now do the same thing as above but with a much smaller hash table\n            {\n                hash_table test(13);\n\n                DLIB_TEST(test.count(3) == 0);\n\n                enumerable<map_pair<int,int> >& e = test;\n                DLIB_TEST(e.at_start() == true);\n\n                hash_table test2(16);\n\n                hash_table test3(0);\n                hash_table test4(0);\n\n\n                int b;\n                for (int j = 0; j < 4; ++j)\n                {\n                    int a = 4;\n                    b = 5;\n                    test2.add(a,b);\n                    DLIB_TEST(test2.size() == 1);\n                    DLIB_TEST(*test2[4] == 5);\n                    DLIB_TEST(test2[99] == 0);\n\n\n                    DLIB_TEST(test2.move_next());\n                    DLIB_TEST(test2.element().key() == 4);\n                    DLIB_TEST(test2.element().value() == 5);\n\n                    swap(test,test2);\n                    DLIB_TEST(test.size() == 1);\n                    DLIB_TEST(*test[4] == 5);\n                    DLIB_TEST(test[99] == 0);\n\n                    test.swap(test2);\n\n                    a = 99; \n                    b = 35;\n                    test2.add(a,b);\n                    DLIB_TEST(test2.size() == 2);\n                    DLIB_TEST(*test2[4] == 5);\n                    DLIB_TEST(*test2[99] == 35);\n                    DLIB_TEST(test2[99] != 0);\n                    DLIB_TEST(test2[949] == 0);\n\n                    test2.destroy(4);\n                    DLIB_TEST(test2.size() == 1);\n                    DLIB_TEST(test2[4] == 0);\n                    DLIB_TEST(*test2[99] == 35);\n                    DLIB_TEST(test2[99] != 0);\n                    DLIB_TEST(test2[949] == 0);\n\n\n\n                    test2.destroy(99);\n                    DLIB_TEST(test2.size() == 0);\n                    DLIB_TEST(test2[4] == 0);                \n                    DLIB_TEST(test2[99] == 0);\n                    DLIB_TEST(test2[949] == 0);\n\n\n\n                    test2.clear();\n                }\n\n\n                print_spinner();\n\n\n\n\n                for (int j = 0; j < 4; ++j)\n                {\n\n                    DLIB_TEST(test.count(3) == 0);\n                    DLIB_TEST(test.size() == 0);\n                    DLIB_TEST(test.at_start() == true);\n                    DLIB_TEST(test.current_element_valid() == false);\n                    DLIB_TEST(test.move_next() == false);\n                    DLIB_TEST(test.at_start() == false);\n                    DLIB_TEST(test.current_element_valid() == false);\n                    DLIB_TEST(test.move_next() == false);\n                    DLIB_TEST(test.move_next() == false);\n\n                    int a;\n\n                    for (int i = 0; i < 10000; ++i)\n                    {\n                        a = ::rand()%1000;\n                        int temp = a;\n                        unsigned long count = test.count(a);\n                        test.add(a,b);\n                        DLIB_TEST(test.count(temp) == count+1);\n                    }\n\n                    {\n                        unsigned long count = test.count(3);\n\n                        a = 3; test.add(a,b); ++count;\n                        DLIB_TEST(test.count(3) == count);\n                        a = 3; test.add(a,b); ++count;\n                        DLIB_TEST(test.count(3) == count);\n                        a = 3; test.add(a,b); ++count;\n                        DLIB_TEST(test.count(3) == count);\n                        a = 3; test.add(a,b); ++count;\n                        DLIB_TEST(test.count(3) == count);\n                    }\n\n\n                    test.clear();\n\n\n                    for (int i = 0; i < 10000; ++i)\n                    {\n                        a = b = i;\n                        unsigned long count = test.count(a);\n                        test.add(a,b);\n                        DLIB_TEST(test.count(i) == count+1);\n                    }\n\n                    DLIB_TEST(test.size() == 10000);\n                    DLIB_TEST(test.at_start() == true);\n                    DLIB_TEST(test.current_element_valid() == false);\n                    DLIB_TEST(test.move_next() == true);\n                    DLIB_TEST(test.at_start() == false);\n                    DLIB_TEST(test.current_element_valid() == true);\n                    DLIB_TEST(test.move_next() == true);\n                    DLIB_TEST(test.move_next() == true);            \n                    DLIB_TEST(test.current_element_valid() == true);\n\n\n                    test.reset();\n\n                    DLIB_TEST(test.size() == 10000);\n                    DLIB_TEST(test.at_start() == true);\n                    DLIB_TEST(test.current_element_valid() == false);\n\n\n                    if (test.size() > 0)\n                    {\n                        int* array = new int[test.size()];\n                        int* tmp = array;\n\n                        int count = 0;\n                        while (test.move_next())\n                        {\n                            ++count;\n                            *tmp = test.element().key();\n                            DLIB_TEST(test[*tmp] != 0);                    \n                            DLIB_TEST(*tmp == test.element().key());\n                            DLIB_TEST(*tmp == test.element().value());\n                            DLIB_TEST(*tmp == test.element().key());\n                            DLIB_TEST(test.current_element_valid() == true);\n                            ++tmp;\n                        }\n\n                        DLIB_TEST(count == 10000);\n                        DLIB_TEST(test.at_start() == false);\n                        DLIB_TEST(test.current_element_valid() == false);\n                        DLIB_TEST(test.move_next() == false);\n                        DLIB_TEST(test.current_element_valid() == false);\n                        DLIB_TEST(test.at_start() == false);\n                        DLIB_TEST(test.current_element_valid() == false);\n\n                        DLIB_TEST(test.size() == 10000);\n\n                        swap(test,test2);\n\n                        tmp = array;\n                        for (int i = 0; i < 10000; ++i)\n                        {\n                            DLIB_TEST(*test2[*tmp] == *tmp);\n                            DLIB_TEST(*test2[*tmp] == *tmp);\n                            DLIB_TEST(*test2[*tmp] == *tmp);\n                            ++tmp;\n                        }\n\n                        test2.swap(test);\n                        test.reset();\n\n                        DLIB_TEST(test.at_start() == true);\n                        count = 0;\n                        tmp = array;\n                        while (test.size() > 0)\n                        {\n                            test.remove(*tmp,a,b);\n\n                            ++tmp;\n                            ++count;\n                        }\n\n                        DLIB_TEST(count == 10000);\n                        DLIB_TEST(test.size() == 0);\n\n\n\n                        DLIB_TEST(count == 10000);\n\n\n\n\n\n\n\n                        delete [] array;\n                    }\n\n                    test.move_next();\n\n                    for (int i = 0; i < 10000; ++i)\n                    {\n                        a = ::rand();\n                        test.add(a,b);\n                    }\n\n                    DLIB_TEST(test.at_start() == true);\n                    DLIB_TEST(test.move_next() == true);\n\n                    DLIB_TEST(test.size() == 10000);\n\n                    for (int i = 0; i < 10000; ++i)\n                    {\n                        test.remove_any(a,b);\n                    }\n\n                    DLIB_TEST(test.at_start() == true);\n                    DLIB_TEST(test.move_next() == false);\n                    DLIB_TEST(test.size() == 0);\n\n                    test.clear();\n\n\n\n\n\n\n\n\n                    int* dtmp = new int[10000];\n                    int* rtmp = new int[10000];\n\n                    int* d = dtmp;\n                    int* r = rtmp;\n                    for (unsigned long i = 0; i < 10000; ++i)\n                    {\n                        a = ::rand();\n                        b = ::rand();\n                        *d = a;\n                        *r = b;\n                        if (test[a] != 0)\n                        {\n                            --i;\n                            continue;\n                        }\n                        test.add(a,b);\n                        ++d;\n                        ++r;\n                        DLIB_TEST(test.size() == i+1);\n                    }\n\n                    DLIB_TEST(test.size() == 10000);\n\n                    for (int i = 0; i < 10000; ++i)\n                    {\n                        DLIB_TEST(*test[dtmp[i]] == rtmp[i]);\n                    }\n\n\n                    delete [] dtmp;\n                    delete [] rtmp;\n\n                    test.clear();\n                }}\n\n    }\n\n\n\n\n    class hash_table_tester : public tester\n    {\n    public:\n        hash_table_tester (\n        ) :\n            tester (\"test_hash_table\",\n                    \"Runs tests on the hash_table component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            hash_table_kernel_test<hash_table<int,int>::kernel_1a>  ();\n            dlog << LINFO << \"testing kernel_1a_c\";\n            hash_table_kernel_test<hash_table<int,int>::kernel_1a_c>();\n            dlog << LINFO << \"testing kernel_2a\";\n            hash_table_kernel_test<hash_table<int,int>::kernel_2a>  ();\n            dlog << LINFO << \"testing kernel_2a_c\";\n            hash_table_kernel_test<hash_table<int,int>::kernel_2a_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/hog_image.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/image_keypoint.h>\n#include <dlib/array2d.h>\n#include <dlib/rand.h>\n#include <dlib/pixel.h>\n#include <dlib/image_transforms.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.hog_image\");\n\n// ----------------------------------------------------------------------------------------\n\n    class test_hog_image : public tester\n    {\n    public:\n        test_hog_image (\n        ) :\n            tester (\"test_hog_image\",\n                    \"Runs tests on the hog_image object.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            array2d<unsigned char> img;\n            img.set_size(200,200);\n\n            assign_all_pixels(img, 0);\n\n            hog_image<3,3,1,4,hog_signed_gradient,hog_full_interpolation> hog1, hog1_deserialized;    \n            hog_image<4,4,2,4,hog_signed_gradient,hog_full_interpolation> hog2;    \n\n            hog1.load(img);\n            hog2.load(img);\n\n\n            // Just test all the coordinate mapping functions.\n\n            DLIB_TEST(hog1.get_block_rect(0,0).width() == 3*3);\n            DLIB_TEST(hog1.get_block_rect(0,0).height() == 3*3);\n            DLIB_TEST(hog2.get_block_rect(0,0).width() == 4*4);\n            DLIB_TEST(hog2.get_block_rect(0,0).height() == 4*4);\n\n            DLIB_TEST(get_rect(img).contains(hog1.get_block_rect(0,0)));\n            DLIB_TEST(get_rect(img).contains(hog1.get_block_rect(hog1.nr()-1,hog1.nc()-1)));\n            DLIB_TEST(get_rect(img).contains(hog2.get_block_rect(0,0)));\n            DLIB_TEST(get_rect(img).contains(hog2.get_block_rect(hog2.nr()-1,hog2.nc()-1)));\n\n            dlib::rand rnd;\n            for (int i = 0; i < 20000; ++i)\n            {\n                point p(rnd.get_random_16bit_number(), rnd.get_random_16bit_number());\n                p.x() -= 20000;\n                p.y() -= 20000;\n\n                DLIB_TEST((hog1.feat_to_image_space(hog1.image_to_feat_space(p)) - p).length() <= 3);\n                DLIB_TEST((hog2.feat_to_image_space(hog2.image_to_feat_space(p)) - p).length() <= 10);\n\n                DLIB_TEST_MSG((hog1.image_to_feat_space(hog1.feat_to_image_space(p)) - p).length() <= 3,\n                              p << \"   \" << hog1.feat_to_image_space(p) << \"   \" << hog1.image_to_feat_space(hog1.feat_to_image_space(p)) );\n                DLIB_TEST((hog2.image_to_feat_space(hog2.feat_to_image_space(p)) - p).length() <= 10);\n            }\n\n\n            DLIB_TEST(hog1.feat_to_image_space(point(0,0)) == point(5,5));\n            DLIB_TEST(hog2.feat_to_image_space(point(0,0)) == point(9,9));\n\n            DLIB_TEST(hog1.feat_to_image_space(point(1,1)) == point(8,8));\n            DLIB_TEST(hog2.feat_to_image_space(point(1,1)) == point(17,17));\n\n            DLIB_TEST(hog1.image_to_feat_space(hog1.feat_to_image_space(point(0,0))) == point(0,0));\n            DLIB_TEST(hog2.image_to_feat_space(hog2.feat_to_image_space(point(0,0))) == point(0,0));\n            DLIB_TEST(hog1.image_to_feat_space(hog1.feat_to_image_space(point(1,1))) == point(1,1));\n            DLIB_TEST(hog2.image_to_feat_space(hog2.feat_to_image_space(point(1,1))) == point(1,1));\n            DLIB_TEST(hog1.image_to_feat_space(hog1.feat_to_image_space(point(1,2))) == point(1,2));\n            DLIB_TEST(hog2.image_to_feat_space(hog2.feat_to_image_space(point(1,2))) == point(1,2));\n\n\n\n            DLIB_TEST(hog1_deserialized.size() != hog1.size());\n            DLIB_TEST(hog1_deserialized.nr() != hog1.nr());\n            DLIB_TEST(hog1_deserialized.nc() != hog1.nc());\n            ostringstream sout;\n            serialize(hog1, sout);\n            istringstream sin(sout.str());\n            deserialize(hog1_deserialized, sin);\n\n            DLIB_TEST(hog1_deserialized.size() == hog1.size());\n            DLIB_TEST(hog1_deserialized.nr() == hog1.nr());\n            DLIB_TEST(hog1_deserialized.nc() == hog1.nc());\n            DLIB_TEST(hog1_deserialized(0,2) == hog1(0,2));\n            DLIB_TEST(hog1_deserialized.get_block_rect(1,2) == hog1.get_block_rect(1,2));\n            DLIB_TEST(hog1_deserialized.image_to_feat_space(hog1_deserialized.feat_to_image_space(point(0,0))) == point(0,0));\n            DLIB_TEST(hog1_deserialized.image_to_feat_space(hog1_deserialized.feat_to_image_space(point(1,1))) == point(1,1));\n            DLIB_TEST(hog1_deserialized.image_to_feat_space(hog1_deserialized.feat_to_image_space(point(1,2))) == point(1,2));\n\n\n\n            DLIB_TEST(hog1.size() > 1);\n            DLIB_TEST(hog1.nr() > 1);\n            DLIB_TEST(hog1.nc() > 1);\n            hog1.clear();\n            DLIB_TEST(hog1.size() == 0);\n            DLIB_TEST(hog1.nr() == 0);\n            DLIB_TEST(hog1.nc() == 0);\n        }\n    } a;\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/image.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/pixel.h>\n#include <dlib/array2d.h>\n#include <dlib/image_transforms.h>\n#include <dlib/image_io.h>\n#include <dlib/matrix.h>\n#include <dlib/rand.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.image\");\n\n\n    void image_test (\n    )\n    /*!\n        ensures\n            - runs tests on pixel objects and functions for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n\n        array2d<unsigned char> img1, img2;\n\n        img1.set_size(100,100);\n\n        assign_all_pixels(img1,7);\n\n        assign_image(img2, img1);\n\n        DLIB_TEST_MSG(img1.nr() == 100 && img1.nc() == 100 &&\n                     img2.nr() == 100 && img2.nc() == 100,\"\");\n\n\n        for (long r = 0; r < img1.nr(); ++r)\n        {\n            for (long c = 0; c < img1.nc(); ++c)\n            {\n                DLIB_TEST(img1[r][c] == 7);\n                DLIB_TEST(img2[r][c] == 7);\n            }\n        }\n\n        img2.clear();\n        DLIB_TEST(img2.size() == 0);\n        DLIB_TEST(img2.nr() == 0);\n        DLIB_TEST(img2.nc() == 0);\n        assign_image(img2, mat(img1));\n\n        DLIB_TEST_MSG(img1.nr() == 100 && img1.nc() == 100 &&\n                     img2.nr() == 100 && img2.nc() == 100,\"\");\n\n\n        for (long r = 0; r < img1.nr(); ++r)\n        {\n            for (long c = 0; c < img1.nc(); ++c)\n            {\n                DLIB_TEST(img1[r][c] == 7);\n                DLIB_TEST(img2[r][c] == 7);\n            }\n        }\n\n\n        threshold_image(img1, img2, 4);\n\n        for (long r = 0; r < img1.nr(); ++r)\n        {\n            for (long c = 0; c < img1.nc(); ++c)\n            {\n                DLIB_TEST(img1[r][c] == 7);\n                DLIB_TEST(img2[r][c] == on_pixel);\n            }\n        }\n\n        {\n            array2d<hsi_pixel> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c].h = static_cast<unsigned char>(r*14 + c + 1);\n                    img[r][c].s = static_cast<unsigned char>(r*14 + c + 2);\n                    img[r][c].i = static_cast<unsigned char>(r*14 + c + 3);\n                }\n            }\n\n            ostringstream sout;\n            save_dng(img, sout);\n            istringstream sin(sout.str());\n\n            img.clear();\n            DLIB_TEST(img.nr() == 0);\n            DLIB_TEST(img.nc() == 0);\n\n            load_dng(img, sin);\n            \n            DLIB_TEST(img.nr() == 14);\n            DLIB_TEST(img.nc() == 15);\n\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    DLIB_TEST(img[r][c].h == r*14 + c + 1);\n                    DLIB_TEST(img[r][c].s == r*14 + c + 2);\n                    DLIB_TEST(img[r][c].i == r*14 + c + 3);\n                }\n            }\n        }\n\n\n\n\n        {\n            array2d<rgb_alpha_pixel> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c].red = static_cast<unsigned char>(r*14 + c + 1);\n                    img[r][c].green = static_cast<unsigned char>(r*14 + c + 2);\n                    img[r][c].blue = static_cast<unsigned char>(r*14 + c + 3);\n                    img[r][c].alpha = static_cast<unsigned char>(r*14 + c + 4);\n                }\n            }\n\n            ostringstream sout;\n            save_dng(img, sout);\n            istringstream sin(sout.str());\n\n            img.clear();\n            DLIB_TEST(img.nr() == 0);\n            DLIB_TEST(img.nc() == 0);\n\n            load_dng(img, sin);\n            \n            DLIB_TEST(img.nr() == 14);\n            DLIB_TEST(img.nc() == 15);\n\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    DLIB_TEST(img[r][c].red == r*14 + c + 1);\n                    DLIB_TEST(img[r][c].green == r*14 + c + 2);\n                    DLIB_TEST(img[r][c].blue == r*14 + c + 3);\n                    DLIB_TEST(img[r][c].alpha == r*14 + c + 4);\n                }\n            }\n        }\n\n#ifdef DLIB_PNG_SUPPORT\n        {\n            array2d<rgb_alpha_pixel> img;\n            array2d<rgb_pixel> img2, img3;\n            img.set_size(14,15);\n            img2.set_size(img.nr(),img.nc());\n            img3.set_size(img.nr(),img.nc());\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c].red = static_cast<unsigned char>(r*14 + c + 1);\n                    img[r][c].green = static_cast<unsigned char>(r*14 + c + 2);\n                    img[r][c].blue = static_cast<unsigned char>(r*14 + c + 3);\n                    img[r][c].alpha = static_cast<unsigned char>(r*14 + c + 4);\n                }\n            }\n\n            save_png(img, \"test.png\");\n\n            img.clear();\n            DLIB_TEST(img.nr() == 0);\n            DLIB_TEST(img.nc() == 0);\n\n            load_png(img, \"test.png\");\n            \n            DLIB_TEST(img.nr() == 14);\n            DLIB_TEST(img.nc() == 15);\n\n            assign_all_pixels(img2, 255);\n            assign_all_pixels(img3, 0);\n            load_png(img2, \"test.png\");\n            assign_image(img3, img);\n\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    DLIB_TEST(img[r][c].red == r*14 + c + 1);\n                    DLIB_TEST(img[r][c].green == r*14 + c + 2);\n                    DLIB_TEST(img[r][c].blue == r*14 + c + 3);\n                    DLIB_TEST(img[r][c].alpha == r*14 + c + 4);\n\n                    DLIB_TEST(img2[r][c].red == img3[r][c].red);\n                    DLIB_TEST(img2[r][c].green == img3[r][c].green);\n                    DLIB_TEST(img2[r][c].blue == img3[r][c].blue);\n                }\n            }\n        }\n#endif // DLIB_PNG_SUPPORT\n\n\n\n        {\n            array2d<rgb_pixel> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c].red = static_cast<unsigned char>(r*14 + c + 1);\n                    img[r][c].green = static_cast<unsigned char>(r*14 + c + 2);\n                    img[r][c].blue = static_cast<unsigned char>(r*14 + c + 3);\n                }\n            }\n\n            ostringstream sout;\n            save_dng(img, sout);\n            save_bmp(img, sout);\n            save_dng(img, sout);\n            save_bmp(img, sout);\n            istringstream sin(sout.str());\n\n            for (int i  = 0; i < 2; ++i)\n            {\n                img.clear();\n                DLIB_TEST(img.nr() == 0);\n                DLIB_TEST(img.nc() == 0);\n\n                load_dng(img, sin);\n\n                DLIB_TEST(img.nr() == 14);\n                DLIB_TEST(img.nc() == 15);\n\n                for (long r = 0; r < 14; ++r)\n                {\n                    for (long c = 0; c < 15; ++c)\n                    {\n                        DLIB_TEST(img[r][c].red == r*14 + c + 1);\n                        DLIB_TEST(img[r][c].green == r*14 + c + 2);\n                        DLIB_TEST(img[r][c].blue == r*14 + c + 3);\n                    }\n                }\n\n                img.clear();\n                DLIB_TEST(img.nr() == 0);\n                DLIB_TEST(img.nc() == 0);\n\n                load_bmp(img, sin);\n\n                DLIB_TEST(img.nr() == 14);\n                DLIB_TEST(img.nc() == 15);\n\n                for (long r = 0; r < 14; ++r)\n                {\n                    for (long c = 0; c < 15; ++c)\n                    {\n                        DLIB_TEST_MSG(img[r][c].red == r*14 + c + 1, \"got \" << (int)img[r][c].red << \"  but expected \" << r*14 + c + 1);\n                        DLIB_TEST(img[r][c].green == r*14 + c + 2);\n                        DLIB_TEST(img[r][c].blue == r*14 + c + 3);\n                    }\n                }\n            }\n        }\n        {\n            array2d<bgr_pixel> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c].red = static_cast<unsigned char>(r*14 + c + 1);\n                    img[r][c].green = static_cast<unsigned char>(r*14 + c + 2);\n                    img[r][c].blue = static_cast<unsigned char>(r*14 + c + 3);\n                }\n            }\n\n            ostringstream sout;\n            save_dng(img, sout);\n            save_bmp(img, sout);\n            save_dng(img, sout);\n            save_bmp(img, sout);\n            istringstream sin(sout.str());\n\n            for (int i  = 0; i < 2; ++i)\n            {\n                img.clear();\n                DLIB_TEST(img.nr() == 0);\n                DLIB_TEST(img.nc() == 0);\n\n                load_dng(img, sin);\n\n                DLIB_TEST(img.nr() == 14);\n                DLIB_TEST(img.nc() == 15);\n\n                for (long r = 0; r < 14; ++r)\n                {\n                    for (long c = 0; c < 15; ++c)\n                    {\n                        DLIB_TEST(img[r][c].red == r*14 + c + 1);\n                        DLIB_TEST(img[r][c].green == r*14 + c + 2);\n                        DLIB_TEST(img[r][c].blue == r*14 + c + 3);\n                    }\n                }\n\n                img.clear();\n                DLIB_TEST(img.nr() == 0);\n                DLIB_TEST(img.nc() == 0);\n\n                load_bmp(img, sin);\n\n                DLIB_TEST(img.nr() == 14);\n                DLIB_TEST(img.nc() == 15);\n\n                for (long r = 0; r < 14; ++r)\n                {\n                    for (long c = 0; c < 15; ++c)\n                    {\n                        DLIB_TEST_MSG(img[r][c].red == r*14 + c + 1, \"got \" << (int)img[r][c].red << \"  but expected \" << r*14 + c + 1);\n                        DLIB_TEST(img[r][c].green == r*14 + c + 2);\n                        DLIB_TEST(img[r][c].blue == r*14 + c + 3);\n                    }\n                }\n            }\n        }\n\n#ifdef DLIB_PNG_SUPPORT\n        {\n            array2d<rgb_pixel> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c].red = static_cast<unsigned char>(r*14 + c + 1);\n                    img[r][c].green = static_cast<unsigned char>(r*14 + c + 2);\n                    img[r][c].blue = static_cast<unsigned char>(r*14 + c + 3);\n                }\n            }\n\n            save_png(img, \"test.png\");\n\n            img.clear();\n            DLIB_TEST(img.nr() == 0);\n            DLIB_TEST(img.nc() == 0);\n\n            load_png(img, \"test.png\");\n\n            DLIB_TEST(img.nr() == 14);\n            DLIB_TEST(img.nc() == 15);\n\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    DLIB_TEST(img[r][c].red == r*14 + c + 1);\n                    DLIB_TEST(img[r][c].green == r*14 + c + 2);\n                    DLIB_TEST(img[r][c].blue == r*14 + c + 3);\n                }\n            }\n        }\n        {\n            array2d<bgr_pixel> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c].red = static_cast<unsigned char>(r*14 + c + 1);\n                    img[r][c].green = static_cast<unsigned char>(r*14 + c + 2);\n                    img[r][c].blue = static_cast<unsigned char>(r*14 + c + 3);\n                }\n            }\n\n            save_png(img, \"test.png\");\n\n            img.clear();\n            DLIB_TEST(img.nr() == 0);\n            DLIB_TEST(img.nc() == 0);\n\n            load_png(img, \"test.png\");\n\n            DLIB_TEST(img.nr() == 14);\n            DLIB_TEST(img.nc() == 15);\n\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    DLIB_TEST(img[r][c].red == r*14 + c + 1);\n                    DLIB_TEST(img[r][c].green == r*14 + c + 2);\n                    DLIB_TEST(img[r][c].blue == r*14 + c + 3);\n                }\n            }\n        }\n#endif // DLIB_PNG_SUPPORT\n\n\n\n        {\n            array2d<unsigned short> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c] = static_cast<unsigned short>(r*14 + c + 0xF0);\n                }\n            }\n\n            ostringstream sout;\n            save_dng(img, sout);\n            istringstream sin(sout.str());\n\n            img.clear();\n            DLIB_TEST(img.nr() == 0);\n            DLIB_TEST(img.nc() == 0);\n\n            load_dng(img, sin);\n            \n            DLIB_TEST(img.nr() == 14);\n            DLIB_TEST(img.nc() == 15);\n\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    DLIB_TEST(img[r][c] == r*14 + c + 0xF0);\n                }\n            }\n        }\n\n\n#ifdef DLIB_PNG_SUPPORT\n        {\n            array2d<unsigned short> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c] = static_cast<unsigned short>(r*14 + c + 0xF0);\n                }\n            }\n\n            save_png(img, \"test.png\");\n\n            img.clear();\n            DLIB_TEST(img.nr() == 0);\n            DLIB_TEST(img.nc() == 0);\n\n            load_png(img, \"test.png\");\n            \n            DLIB_TEST(img.nr() == 14);\n            DLIB_TEST(img.nc() == 15);\n\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    DLIB_TEST(img[r][c] == r*14 + c + 0xF0);\n                }\n            }\n        }\n#endif // DLIB_PNG_SUPPORT\n\n\n\n        {\n            array2d<unsigned char> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c] = static_cast<unsigned char>(r*14 + c*111);\n                }\n            }\n\n            ostringstream sout;\n            save_dng(img, sout);\n            save_bmp(img, sout);\n            save_dng(img, sout);\n            save_bmp(img, sout);\n            istringstream sin(sout.str());\n\n            for (int i = 0; i < 2; ++i)\n            {\n                img.clear();\n                DLIB_TEST(img.nr() == 0);\n                DLIB_TEST(img.nc() == 0);\n\n                load_dng(img, sin);\n\n                DLIB_TEST(img.nr() == 14);\n                DLIB_TEST(img.nc() == 15);\n\n                for (long r = 0; r < 14; ++r)\n                {\n                    for (long c = 0; c < 15; ++c)\n                    {\n                        DLIB_TEST(img[r][c] == static_cast<unsigned char>(r*14 + c*111));\n                    }\n                }\n\n\n                img.clear();\n                DLIB_TEST(img.nr() == 0);\n                DLIB_TEST(img.nc() == 0);\n\n                load_bmp(img, sin);\n\n                DLIB_TEST(img.nr() == 14);\n                DLIB_TEST(img.nc() == 15);\n\n                for (long r = 0; r < 14; ++r)\n                {\n                    for (long c = 0; c < 15; ++c)\n                    {\n                        DLIB_TEST(img[r][c] == static_cast<unsigned char>(r*14 + c*111));\n                    }\n                }\n            }\n        }\n\n\n#ifdef DLIB_PNG_SUPPORT\n        {\n            array2d<unsigned char> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c] = static_cast<unsigned char>(r*14 + c);\n                }\n            }\n\n            save_png(img, \"test.png\");\n\n            img.clear();\n            DLIB_TEST(img.nr() == 0);\n            DLIB_TEST(img.nc() == 0);\n\n            load_png(img, \"test.png\");\n\n            DLIB_TEST(img.nr() == 14);\n            DLIB_TEST(img.nc() == 15);\n\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    DLIB_TEST(img[r][c] == r*14 + c);\n                }\n            }\n\n        }\n#endif // DLIB_PNG_SUPPORT\n\n\n        {\n            // in this test we will only assign pixel values that can be\n            // represented with 8 bits even though we are using a wider pixel type.\n            array2d<unsigned short> img;\n            img.set_size(14,15);\n            for (long r = 0; r < 14; ++r)\n            {\n                for (long c = 0; c < 15; ++c)\n                {\n                    img[r][c] = static_cast<unsigned char>(r*14 + c);\n                }\n            }\n\n            ostringstream sout;\n            save_dng(img, sout);\n            save_bmp(img, sout);\n            save_dng(img, sout);\n            save_bmp(img, sout);\n            istringstream sin(sout.str());\n\n            for (int i = 0; i < 2; ++i)\n            {\n                img.clear();\n                DLIB_TEST(img.nr() == 0);\n                DLIB_TEST(img.nc() == 0);\n\n                load_dng(img, sin);\n\n                DLIB_TEST(img.nr() == 14);\n                DLIB_TEST(img.nc() == 15);\n\n                for (long r = 0; r < 14; ++r)\n                {\n                    for (long c = 0; c < 15; ++c)\n                    {\n                        DLIB_TEST(img[r][c] == r*14 + c);\n                    }\n                }\n\n\n                img.clear();\n                DLIB_TEST(img.nr() == 0);\n                DLIB_TEST(img.nc() == 0);\n\n                load_bmp(img, sin);\n\n                DLIB_TEST(img.nr() == 14);\n                DLIB_TEST(img.nc() == 15);\n\n                for (long r = 0; r < 14; ++r)\n                {\n                    for (long c = 0; c < 15; ++c)\n                    {\n                        DLIB_TEST(img[r][c] == r*14 + c);\n                    }\n                }\n            }\n        }\n\n        {\n            array2d<unsigned short> img1;\n            array2d<unsigned char> img2;\n            img1.set_size(10,10);\n            assign_all_pixels(img1, 0);\n\n            img1[5][5] = 10000;\n            img1[7][7] = 10000;\n\n            equalize_histogram(img1, img2);\n\n            for (long r = 0; r < img1.nr(); ++r)\n            {\n                for (long c = 0; c < img2.nc(); ++c)\n                {\n                    if ((r == 5 && c == 5) ||\n                        (r == 7 && c == 7))\n                    {\n                        DLIB_TEST(img2[r][c] == 255);\n                    }\n                    else\n                    {\n                        DLIB_TEST(img2[r][c] == 0);\n                    }\n                }\n            }\n\n        }\n\n        {\n            array2d<unsigned char> img;\n            img.set_size(10,10);\n            assign_all_pixels(img, 0);\n\n            assign_border_pixels(img, 2,2, 4);\n\n            DLIB_TEST(zeros_matrix<unsigned char>(6,6) == subm(mat(img), rectangle(2,2,7,7)));\n            DLIB_TEST(uniform_matrix<unsigned char>(1,10, 4) == rowm(mat(img), 0));\n            DLIB_TEST(uniform_matrix<unsigned char>(1,10, 4) == rowm(mat(img), 1));\n            DLIB_TEST(uniform_matrix<unsigned char>(1,10, 4) == rowm(mat(img), 8));\n            DLIB_TEST(uniform_matrix<unsigned char>(1,10, 4) == rowm(mat(img), 9));\n\n            DLIB_TEST(uniform_matrix<unsigned char>(10,1, 4) == colm(mat(img), 0));\n            DLIB_TEST(uniform_matrix<unsigned char>(10,1, 4) == colm(mat(img), 1));\n            DLIB_TEST(uniform_matrix<unsigned char>(10,1, 4) == colm(mat(img), 8));\n            DLIB_TEST(uniform_matrix<unsigned char>(10,1, 4) == colm(mat(img), 9));\n\n\n            assign_border_pixels(img, 7, 7, 5);\n            DLIB_TEST(uniform_matrix<unsigned char>(10,10, 5) == mat(img));\n            assign_border_pixels(img, 37, 47, 5);\n            DLIB_TEST(uniform_matrix<unsigned char>(10,10, 5) == mat(img));\n        }\n\n        {\n            array2d<unsigned char> img;\n            img.set_size(11,11);\n            assign_all_pixels(img, 0);\n\n            assign_border_pixels(img, 2,2, 4);\n\n            DLIB_TEST(zeros_matrix<unsigned char>(7,7) == subm(mat(img), rectangle(2,2,8,8)));\n            DLIB_TEST(uniform_matrix<unsigned char>(1,11, 4) == rowm(mat(img), 0));\n            DLIB_TEST(uniform_matrix<unsigned char>(1,11, 4) == rowm(mat(img), 1));\n            DLIB_TEST(uniform_matrix<unsigned char>(1,11, 4) == rowm(mat(img), 9));\n            DLIB_TEST(uniform_matrix<unsigned char>(1,11, 4) == rowm(mat(img), 10));\n\n            DLIB_TEST(uniform_matrix<unsigned char>(11,1, 4) == colm(mat(img), 0));\n            DLIB_TEST(uniform_matrix<unsigned char>(11,1, 4) == colm(mat(img), 1));\n            DLIB_TEST(uniform_matrix<unsigned char>(11,1, 4) == colm(mat(img), 9));\n            DLIB_TEST(uniform_matrix<unsigned char>(11,1, 4) == colm(mat(img), 10));\n\n            assign_border_pixels(img, 7, 7, 5);\n            DLIB_TEST(uniform_matrix<unsigned char>(11,11, 5) == mat(img));\n            assign_border_pixels(img, 70, 57, 5);\n            DLIB_TEST(uniform_matrix<unsigned char>(11,11, 5) == mat(img));\n        }\n\n\n    }\n\n\n    template <typename T, typename pixel_type>\n    void test_integral_image (\n    )\n    {\n        dlib::rand rnd;\n\n        array2d<pixel_type> img;\n        integral_image_generic<T> int_img;\n\n        int_img.load(img);\n        DLIB_TEST(int_img.nr() == 0);\n        DLIB_TEST(int_img.nc() == 0);\n\n        // make 5 random images\n        for (int i = 0; i < 5; ++i)\n        {\n            print_spinner();\n            img.set_size(rnd.get_random_16bit_number()%200+1, rnd.get_random_16bit_number()%200+1);\n\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    img[r][c] = (int)rnd.get_random_8bit_number() - 100;\n                }\n            }\n\n            int_img.load(img);\n            DLIB_TEST(int_img.nr() == img.nr());\n            DLIB_TEST(int_img.nc() == img.nc());\n\n            // make 200 random rectangles\n            for (int j = 0; j < 500; ++j)\n            {\n                point p1(rnd.get_random_32bit_number()%img.nc(), rnd.get_random_32bit_number()%img.nr());\n                point p2(rnd.get_random_32bit_number()%img.nc(), rnd.get_random_32bit_number()%img.nr());\n                rectangle rect(p1,p2);\n                DLIB_TEST(int_img.get_sum_of_area(rect) == sum(subm(matrix_cast<T>(mat(img)), rect)));\n                rect = rectangle(p1,p1);\n                DLIB_TEST(int_img.get_sum_of_area(rect) == sum(subm(matrix_cast<T>(mat(img)), rect)));\n            }\n\n        }\n\n\n    }\n\n    void test_filtering2(int nr, int nc, dlib::rand& rnd)\n    {\n        print_spinner();\n        dlog << LINFO << \"test_filtering2(): \" << nr << \"  \" << nc;\n        array2d<float> img(302,301);\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                img[r][c] = rnd.get_random_gaussian();\n            }\n        }\n        matrix<float> filt = matrix_cast<float>(randm(nr,nc,rnd));\n\n        matrix<float> out = xcorr_same(mat(img),filt);\n        matrix<float> out2 = subm(conv(mat(img),flip(filt)), filt.nr()/2, filt.nc()/2, img.nr(), img.nc());\n        // make sure xcorr_same does exactly what the docs say it should.\n        DLIB_TEST(max(abs(out-out2)) < 1e-7);\n\n        // Now compare the filtering functions to xcorr_same to make sure everything does\n        // filtering in the same way.\n        array2d<float> imout(img.nr(), img.nc());\n        assign_all_pixels(imout, 10);\n        rectangle rect = spatially_filter_image(img, imout, filt);\n        border_enumerator be(get_rect(imout),rect);\n        while (be.move_next())\n        {\n            DLIB_TEST(imout[be.element().y()][be.element().x()] == 0)\n        }\n        DLIB_TEST_MSG(max(abs(subm(mat(imout),rect) - subm(out,rect))) < 1e-5, max(abs(subm(mat(imout),rect) - subm(out,rect))));\n\n\n        assign_all_pixels(imout, 10);\n        out = 10;\n        rect = spatially_filter_image(img, imout, filt,2,true,true);\n        be = border_enumerator(get_rect(imout),rect);\n        while (be.move_next())\n        {\n            DLIB_TEST(imout[be.element().y()][be.element().x()] == 10)\n        }\n        out += abs(xcorr_same(mat(img),filt)/2);\n        DLIB_TEST(max(abs(subm(mat(imout),rect) - subm(out,rect))) < 1e-7);\n\n\n        assign_all_pixels(imout, -10);\n        out = -10;\n        rect = spatially_filter_image(img, imout, filt,2,false,true);\n        be = border_enumerator(get_rect(imout),rect);\n        while (be.move_next())\n        {\n            DLIB_TEST(imout[be.element().y()][be.element().x()] == -10)\n        }\n        out += xcorr_same(mat(img),filt)/2;\n        DLIB_TEST_MSG(max(abs(subm(mat(imout),rect) - subm(out,rect))) < 1e-5, max(abs(subm(mat(imout),rect) - subm(out,rect))));\n\n\n\n\n        matrix<float> row_filt = matrix_cast<float>(randm(nc,1,rnd));\n        matrix<float> col_filt = matrix_cast<float>(randm(nr,1,rnd));\n        assign_all_pixels(imout, 10);\n        rect = spatially_filter_image_separable(img, imout, row_filt, col_filt);\n        out = xcorr_same(tmp(xcorr_same(mat(img),trans(row_filt))), col_filt);\n        DLIB_TEST_MSG(max(abs(subm(mat(imout),rect) - subm(out,rect))) < 1e-5, max(abs(subm(mat(imout),rect) - subm(out,rect))));\n\n        be = border_enumerator(get_rect(imout),rect);\n        while (be.move_next())\n        {\n            DLIB_TEST(imout[be.element().y()][be.element().x()] == 0);\n        }\n\n\n        assign_all_pixels(imout, 10);\n        out = 10;\n        rect = spatially_filter_image_separable(img, imout, row_filt, col_filt,2,true,true);\n        out += abs(xcorr_same(tmp(xcorr_same(mat(img),trans(row_filt))), col_filt)/2);\n        DLIB_TEST_MSG(max(abs(subm(mat(imout),rect) - subm(out,rect))) < 1e-7, \n            max(abs(subm(mat(imout),rect) - subm(out,rect))));\n\n        be = border_enumerator(get_rect(imout),rect);\n        while (be.move_next())\n        {\n            DLIB_TEST(imout[be.element().y()][be.element().x()] == 10);\n        }\n\n    }\n\n    template <typename T>\n    void test_filtering(bool use_abs, unsigned long scale )\n    {\n        print_spinner();\n        dlog << LINFO << \"test_filtering(\" << use_abs << \",\" << scale << \")\";\n        array2d<T> img, img2, img3;\n        img.set_size(10,11);\n\n        assign_all_pixels(img, 10);\n\n        matrix<int,3,5> filter2;\n        filter2 = 1,1,1,1,1,\n                  1,1,1,1,1,\n                  1,1,1,1,1;\n\n        assign_all_pixels(img2,3);\n        rectangle brect = spatially_filter_image(img, img2, filter2);\n        DLIB_TEST(brect == shrink_rect(get_rect(img), filter2.nc()/2, filter2.nr()/2));\n\n        const rectangle rect(2,1,img.nc()-3,img.nr()-2);\n\n        for (long r = 0; r<img2.nr(); ++r)\n        {\n            for (long c = 0; c<img2.nc(); ++c)\n            {\n                if (rect.contains(c,r))\n                {\n                    DLIB_TEST_MSG(img2[r][c] == 150, (int)img2[r][c]);\n                }\n                else\n                {\n                    DLIB_TEST_MSG(img2[r][c] == 0,(int)img2[r][c]);\n                }\n            }\n        }\n\n\n        assign_all_pixels(img2,3);\n        assign_all_pixels(img3,3);\n        brect = spatially_filter_image(img, img2, filter2);\n        DLIB_TEST(brect == shrink_rect(get_rect(img), filter2.nc()/2, filter2.nr()/2));\n\n        matrix<int,1,5> row_filter;\n        matrix<int,1,3> col_filter;\n\n        row_filter = 1,1,1,1,1;\n        col_filter = 1,1,1;\n\n        spatially_filter_image_separable(img, img3, row_filter, col_filter);\n\n        DLIB_TEST(mat(img2) == mat(img3));\n\n\n        dlib::rand  rnd;\n\n        for (int i = 0; i < 30; ++i)\n        {\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    img[r][c] = rnd.get_random_8bit_number();\n                }\n            }\n\n            row_filter(0) = ((int)rnd.get_random_8bit_number() - 100)/10;\n            row_filter(1) = ((int)rnd.get_random_8bit_number() - 100)/10;\n            row_filter(2) = ((int)rnd.get_random_8bit_number() - 100)/10;\n            row_filter(3) = ((int)rnd.get_random_8bit_number() - 100)/10;\n            row_filter(4) = ((int)rnd.get_random_8bit_number() - 100)/10;\n            col_filter(0) = ((int)rnd.get_random_8bit_number() - 100)/10;\n            col_filter(1) = ((int)rnd.get_random_8bit_number() - 100)/10;\n            col_filter(2) = ((int)rnd.get_random_8bit_number() - 100)/10;\n\n            const matrix<int,3,5> filter = trans(col_filter)*row_filter;\n\n            assign_all_pixels(img2,3);\n            assign_all_pixels(img3,3);\n            // Just make sure both filtering methods give the same results.\n            rectangle brect1, brect2;\n            brect1 = spatially_filter_image(img, img2, filter, scale, use_abs);\n            brect2 = spatially_filter_image_separable(img, img3, row_filter, col_filter, scale, use_abs);\n            DLIB_TEST(mat(img2) == mat(img3));\n\n            DLIB_TEST(brect1 == shrink_rect(get_rect(img), filter.nc()/2, filter.nr()/2));\n            DLIB_TEST(brect1 == brect2);\n        }\n\n        {\n            array2d<int> img, img2;\n            img.set_size(3,4);\n\n            matrix<int> filter(3,3);\n            filter = 1;\n            assign_all_pixels(img,-1);\n\n            spatially_filter_image(img,img2,filter);\n\n            DLIB_TEST(img2[0][0] == 0);\n            DLIB_TEST(img2[0][1] == 0);\n            DLIB_TEST(img2[0][2] == 0);\n            DLIB_TEST(img2[0][3] == 0);\n\n            DLIB_TEST(img2[1][0] == 0);\n            DLIB_TEST(img2[1][1] == -9);\n            DLIB_TEST(img2[1][2] == -9);\n            DLIB_TEST(img2[1][3] == 0);\n\n            DLIB_TEST(img2[2][0] == 0);\n            DLIB_TEST(img2[2][1] == 0);\n            DLIB_TEST(img2[2][2] == 0);\n            DLIB_TEST(img2[2][3] == 0);\n\n            assign_all_pixels(img,-1);\n\n            spatially_filter_image(img,img2,filter,2,true);\n\n            DLIB_TEST(img2[0][0] == 0);\n            DLIB_TEST(img2[0][1] == 0);\n            DLIB_TEST(img2[0][2] == 0);\n            DLIB_TEST(img2[0][3] == 0);\n\n            DLIB_TEST(img2[1][0] == 0);\n            DLIB_TEST(img2[1][1] == 4);\n            DLIB_TEST(img2[1][2] == 4);\n            DLIB_TEST(img2[1][3] == 0);\n\n            DLIB_TEST(img2[2][0] == 0);\n            DLIB_TEST(img2[2][1] == 0);\n            DLIB_TEST(img2[2][2] == 0);\n            DLIB_TEST(img2[2][3] == 0);\n\n            matrix<int> rowf(3,1), colf(3,1);\n            rowf = 1;\n            colf = 1;\n            assign_all_pixels(img,-1);\n\n            spatially_filter_image_separable(img,img2,rowf,colf);\n            DLIB_TEST(img2[0][0] == 0);\n            DLIB_TEST(img2[0][1] == 0);\n            DLIB_TEST(img2[0][2] == 0);\n            DLIB_TEST(img2[0][3] == 0);\n\n            DLIB_TEST(img2[1][0] == 0);\n            DLIB_TEST(img2[1][1] == -9);\n            DLIB_TEST(img2[1][2] == -9);\n            DLIB_TEST(img2[1][3] == 0);\n\n            DLIB_TEST(img2[2][0] == 0);\n            DLIB_TEST(img2[2][1] == 0);\n            DLIB_TEST(img2[2][2] == 0);\n            DLIB_TEST(img2[2][3] == 0);\n\n            spatially_filter_image_separable(img,img2,rowf,colf,1,true);\n            DLIB_TEST(img2[0][0] == 0);\n            DLIB_TEST(img2[0][1] == 0);\n            DLIB_TEST(img2[0][2] == 0);\n            DLIB_TEST(img2[0][3] == 0);\n\n            DLIB_TEST(img2[1][0] == 0);\n            DLIB_TEST(img2[1][1] == 9);\n            DLIB_TEST(img2[1][2] == 9);\n            DLIB_TEST(img2[1][3] == 0);\n\n            DLIB_TEST(img2[2][0] == 0);\n            DLIB_TEST(img2[2][1] == 0);\n            DLIB_TEST(img2[2][2] == 0);\n            DLIB_TEST(img2[2][3] == 0);\n\n            assign_all_pixels(img2, 3);\n            spatially_filter_image_separable(img,img2,rowf,colf,1,true, true);\n            DLIB_TEST(img2[0][0] == 3);\n            DLIB_TEST(img2[0][1] == 3);\n            DLIB_TEST(img2[0][2] == 3);\n            DLIB_TEST(img2[0][3] == 3);\n\n            DLIB_TEST(img2[1][0] == 3);\n            DLIB_TEST_MSG(img2[1][1] == 9+3, img2[1][1] );\n            DLIB_TEST(img2[1][2] == 9+3);\n            DLIB_TEST(img2[1][3] == 3);\n\n            DLIB_TEST(img2[2][0] == 3);\n            DLIB_TEST(img2[2][1] == 3);\n            DLIB_TEST(img2[2][2] == 3);\n            DLIB_TEST(img2[2][3] == 3);\n        }\n        {\n            array2d<double> img, img2;\n            img.set_size(3,4);\n\n            matrix<double> filter(3,3);\n            filter = 1;\n            assign_all_pixels(img,-1);\n\n            spatially_filter_image(img,img2,filter,2);\n\n            DLIB_TEST(img2[0][0] == 0);\n            DLIB_TEST(img2[0][1] == 0);\n            DLIB_TEST(img2[0][2] == 0);\n            DLIB_TEST(img2[0][3] == 0);\n\n            DLIB_TEST(img2[1][0] == 0);\n            DLIB_TEST(std::abs(img2[1][1] -  -4.5) < 1e-14);\n            DLIB_TEST(std::abs(img2[1][2] -  -4.5) < 1e-14);\n            DLIB_TEST(img2[1][3] == 0);\n\n            DLIB_TEST(img2[2][0] == 0);\n            DLIB_TEST(img2[2][1] == 0);\n            DLIB_TEST(img2[2][2] == 0);\n            DLIB_TEST(img2[2][3] == 0);\n\n        }\n        {\n            array2d<double> img, img2;\n            img.set_size(3,4);\n            img2.set_size(3,4);\n            assign_all_pixels(img2, 8);\n\n            matrix<double> filter(3,3);\n            filter = 1;\n            assign_all_pixels(img,-1);\n\n            spatially_filter_image(img,img2,filter,2, false, true);\n\n            DLIB_TEST(img2[0][0] == 8);\n            DLIB_TEST(img2[0][1] == 8);\n            DLIB_TEST(img2[0][2] == 8);\n            DLIB_TEST(img2[0][3] == 8);\n\n            DLIB_TEST(img2[1][0] == 8);\n            DLIB_TEST(std::abs(img2[1][1] -  -4.5 - 8) < 1e-14);\n            DLIB_TEST(std::abs(img2[1][2] -  -4.5 - 8) < 1e-14);\n            DLIB_TEST(img2[1][3] == 8);\n\n            DLIB_TEST(img2[2][0] == 8);\n            DLIB_TEST(img2[2][1] == 8);\n            DLIB_TEST(img2[2][2] == 8);\n            DLIB_TEST(img2[2][3] == 8);\n\n        }\n    }\n\n\n    void test_zero_border_pixels(\n    )\n    {\n        array2d<unsigned char> img;\n        img.set_size(4,5);\n\n        assign_all_pixels(img, 1);\n        zero_border_pixels(img, 2,1);\n\n        DLIB_TEST(img[0][0] == 0);\n        DLIB_TEST(img[1][0] == 0);\n        DLIB_TEST(img[2][0] == 0);\n        DLIB_TEST(img[3][0] == 0);\n        DLIB_TEST(img[0][1] == 0);\n        DLIB_TEST(img[1][1] == 0);\n        DLIB_TEST(img[2][1] == 0);\n        DLIB_TEST(img[3][1] == 0);\n\n        DLIB_TEST(img[0][3] == 0);\n        DLIB_TEST(img[1][3] == 0);\n        DLIB_TEST(img[2][3] == 0);\n        DLIB_TEST(img[3][3] == 0);\n        DLIB_TEST(img[0][4] == 0);\n        DLIB_TEST(img[1][4] == 0);\n        DLIB_TEST(img[2][4] == 0);\n        DLIB_TEST(img[3][4] == 0);\n\n        DLIB_TEST(img[0][2] == 0);\n        DLIB_TEST(img[3][2] == 0);\n\n        DLIB_TEST(img[1][2] == 1);\n        DLIB_TEST(img[2][2] == 1);\n\n        rectangle rect = get_rect(img);\n        rect.left()+=2;\n        rect.top()+=1;\n        rect.right()-=2;\n        rect.bottom()-=1;\n        assign_all_pixels(img, 1);\n        zero_border_pixels(img, rect);\n\n        DLIB_TEST(img[0][0] == 0);\n        DLIB_TEST(img[1][0] == 0);\n        DLIB_TEST(img[2][0] == 0);\n        DLIB_TEST(img[3][0] == 0);\n        DLIB_TEST(img[0][1] == 0);\n        DLIB_TEST(img[1][1] == 0);\n        DLIB_TEST(img[2][1] == 0);\n        DLIB_TEST(img[3][1] == 0);\n\n        DLIB_TEST(img[0][3] == 0);\n        DLIB_TEST(img[1][3] == 0);\n        DLIB_TEST(img[2][3] == 0);\n        DLIB_TEST(img[3][3] == 0);\n        DLIB_TEST(img[0][4] == 0);\n        DLIB_TEST(img[1][4] == 0);\n        DLIB_TEST(img[2][4] == 0);\n        DLIB_TEST(img[3][4] == 0);\n\n        DLIB_TEST(img[0][2] == 0);\n        DLIB_TEST(img[3][2] == 0);\n\n        DLIB_TEST(img[1][2] == 1);\n        DLIB_TEST(img[2][2] == 1);\n\n        rect.right()+=1;\n        assign_all_pixels(img, 1);\n        zero_border_pixels(img, rect);\n        DLIB_TEST(img[0][0] == 0);\n        DLIB_TEST(img[1][0] == 0);\n        DLIB_TEST(img[2][0] == 0);\n        DLIB_TEST(img[3][0] == 0);\n        DLIB_TEST(img[0][1] == 0);\n        DLIB_TEST(img[1][1] == 0);\n        DLIB_TEST(img[2][1] == 0);\n        DLIB_TEST(img[3][1] == 0);\n\n        DLIB_TEST(img[0][3] == 0);\n        DLIB_TEST(img[1][3] == 1);\n        DLIB_TEST(img[2][3] == 1);\n        DLIB_TEST(img[3][3] == 0);\n        DLIB_TEST(img[0][4] == 0);\n        DLIB_TEST(img[1][4] == 0);\n        DLIB_TEST(img[2][4] == 0);\n        DLIB_TEST(img[3][4] == 0);\n\n        DLIB_TEST(img[0][2] == 0);\n        DLIB_TEST(img[3][2] == 0);\n\n        DLIB_TEST(img[1][2] == 1);\n        DLIB_TEST(img[2][2] == 1);\n    }\n\n\n    void test_label_connected_blobs()\n    {\n        array2d<unsigned char> img;\n        img.set_size(400,401);\n\n        assign_all_pixels(img,0);\n\n        rectangle rect1, rect2, rect3;\n\n        rect1 = centered_rect(99,120, 50,70);\n        rect2 = centered_rect(199,80, 34,68);\n        rect3 = centered_rect(249,180, 120,78);\n\n        fill_rect(img, rect1, 255);\n        fill_rect(img, rect2, 255);\n        fill_rect(img, rect3, 255);\n\n        array2d<unsigned char> labels;\n        unsigned long num;\n        num = label_connected_blobs(img, \n                                    zero_pixels_are_background(),\n                                    neighbors_8(),\n                                    connected_if_both_not_zero(),\n                                    labels);\n\n        DLIB_TEST(num == 4);\n        DLIB_TEST(labels.nr() == img.nr());\n        DLIB_TEST(labels.nc() == img.nc());\n\n        const unsigned char l1 = labels[rect1.top()][rect1.left()];\n        const unsigned char l2 = labels[rect2.top()][rect2.left()];\n        const unsigned char l3 = labels[rect3.top()][rect3.left()];\n\n        DLIB_TEST(l1 != 0 && l2 != 0 && l3 != 0);\n        DLIB_TEST(l1 != l2 && l1 != l3 && l2 != l3);\n\n        for (long r = 0; r < labels.nr(); ++r)\n        {\n            for (long c = 0; c < labels.nc(); ++c)\n            {\n                if (rect1.contains(c,r))\n                {\n                    DLIB_TEST(labels[r][c] == l1);\n                }\n                else if (rect2.contains(c,r))\n                {\n                    DLIB_TEST(labels[r][c] == l2);\n                }\n                else if (rect3.contains(c,r))\n                {\n                    DLIB_TEST(labels[r][c] == l3);\n                }\n                else\n                {\n                    DLIB_TEST(labels[r][c] == 0);\n                }\n            }\n        }\n    }\n\n    void test_label_connected_blobs2()\n    {\n        array2d<unsigned char> img;\n        img.set_size(400,401);\n\n        assign_all_pixels(img,0);\n\n        rectangle rect1, rect2, rect3;\n\n        rect1 = centered_rect(99,120, 50,70);\n        rect2 = centered_rect(199,80, 34,68);\n        rect3 = centered_rect(249,180, 120,78);\n\n        fill_rect(img, rect1, 255);\n        fill_rect(img, rect2, 253);\n        fill_rect(img, rect3, 255);\n\n        array2d<unsigned char> labels;\n        unsigned long num;\n        num = label_connected_blobs(img, \n                                    nothing_is_background(),\n                                    neighbors_4(),\n                                    connected_if_equal(),\n                                    labels);\n\n        DLIB_TEST(num == 5);\n        DLIB_TEST(labels.nr() == img.nr());\n        DLIB_TEST(labels.nc() == img.nc());\n\n        const unsigned char l0 = labels[0][0];\n        const unsigned char l1 = labels[rect1.top()][rect1.left()];\n        const unsigned char l2 = labels[rect2.top()][rect2.left()];\n        const unsigned char l3 = labels[rect3.top()][rect3.left()];\n\n        DLIB_TEST(l0 != 0 && l1 != 0 && l2 != 0 && l3 != 0);\n        DLIB_TEST(l1 != l2 && l1 != l3 && l2 != l3 && \n                  l0 != l1 && l0 != l2 && l0 != l3);\n\n        for (long r = 0; r < labels.nr(); ++r)\n        {\n            for (long c = 0; c < labels.nc(); ++c)\n            {\n                if (rect1.contains(c,r))\n                {\n                    DLIB_TEST(labels[r][c] == l1);\n                }\n                else if (rect2.contains(c,r))\n                {\n                    DLIB_TEST(labels[r][c] == l2);\n                }\n                else if (rect3.contains(c,r))\n                {\n                    DLIB_TEST(labels[r][c] == l3);\n                }\n                else\n                {\n                    DLIB_TEST(labels[r][c] == l0);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename in_image_type,\n        typename out_image_type\n        >\n    void downsample_image (\n        const unsigned long downsample,\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        bool add_to\n    )\n    {\n        out_img.set_size((in_img.nr()+downsample-1)/downsample,\n                         (in_img.nc()+downsample-1)/downsample);\n\n        for (long r = 0; r < out_img.nr(); ++r)\n        {\n            for (long c = 0; c < out_img.nc(); ++c)\n            {\n                if (add_to)\n                    out_img[r][c] += in_img[r*downsample][c*downsample];\n                else\n                    out_img[r][c] = in_img[r*downsample][c*downsample];\n            }\n        }\n    }\n\n    template <\n        typename in_image_type,\n        typename out_image_type,\n        typename EXP1,\n        typename EXP2,\n        typename T\n        >\n    void test_spatially_filter_image_separable_down_simple (\n        const unsigned long downsample,\n        const in_image_type& in_img,\n        out_image_type& out_img,\n        const matrix_exp<EXP1>& row_filter,\n        const matrix_exp<EXP2>& col_filter,\n        T scale,\n        bool use_abs = false,\n        bool add_to = false\n    )\n    {\n        out_image_type temp;\n        spatially_filter_image_separable(in_img, temp, row_filter, col_filter, scale, use_abs, false);\n        downsample_image(downsample, temp, out_img, add_to);\n    }\n\n\n\n\n    template <unsigned long downsample>\n    void test_downsampled_filtering_helper(long row_filt_size, long col_filt_size)\n    {\n        print_spinner();\n        dlog << LTRACE << \"***********************************\";\n        dlog << LTRACE << \"downsample: \" << downsample;\n        dlog << LTRACE << \"row_filt_size: \"<< row_filt_size;\n        dlog << LTRACE << \"col_filt_size: \"<< col_filt_size;\n        dlib::rand rnd;\n        array2d<int> out1, out2;\n        for (long nr = 0; nr < 3; ++nr)\n        {\n            for (long nc = 0; nc < 3; ++nc)\n            {\n                dlog << LTRACE << \"nr: \"<< nr;\n                dlog << LTRACE << \"nc: \"<< nc;\n                array2d<unsigned char> img(25+nr,25+nc);\n                for (int k = 0; k < 5; ++k)\n                {\n                    for (long r = 0; r < img.nr(); ++r)\n                    {\n                        for (long c = 0; c < img.nc(); ++c)\n                        {\n                            img[r][c] = rnd.get_random_8bit_number();\n                        }\n                    }\n\n                    matrix<int,0,1> row_filter(row_filt_size);\n                    matrix<int,0,1> col_filter(col_filt_size);\n\n                    row_filter = matrix_cast<int>(10*randm(row_filt_size,1, rnd));\n                    col_filter = matrix_cast<int>(10*randm(col_filt_size,1, rnd));\n\n                    row_filter -= 3;\n                    col_filter -= 3;\n\n\n                    test_spatially_filter_image_separable_down_simple(downsample, img, out1, row_filter, col_filter,1 );\n                    spatially_filter_image_separable_down(downsample, img, out2, row_filter, col_filter);\n\n                    DLIB_TEST(get_rect(out1) == get_rect(out2));\n                    DLIB_TEST(mat(out1) == mat(out2));\n\n                    test_spatially_filter_image_separable_down_simple(downsample, img, out1, row_filter, col_filter,3, true, true );\n                    spatially_filter_image_separable_down(downsample, img, out2, row_filter, col_filter, 3, true, true);\n\n                    DLIB_TEST(get_rect(out1) == get_rect(out2));\n                    DLIB_TEST(mat(out1) == mat(out2));\n\n                }\n            }\n        }\n    }\n\n    void test_downsampled_filtering()\n    {\n        test_downsampled_filtering_helper<1>(5,5);\n        test_downsampled_filtering_helper<2>(5,5);\n        test_downsampled_filtering_helper<3>(5,5);\n        test_downsampled_filtering_helper<1>(3,5);\n        test_downsampled_filtering_helper<2>(3,5);\n        test_downsampled_filtering_helper<3>(3,5);\n        test_downsampled_filtering_helper<1>(5,3);\n        test_downsampled_filtering_helper<2>(5,3);\n        test_downsampled_filtering_helper<3>(5,3);\n\n        test_downsampled_filtering_helper<1>(3,3);\n        test_downsampled_filtering_helper<2>(3,3);\n        test_downsampled_filtering_helper<3>(3,3);\n\n        test_downsampled_filtering_helper<1>(1,1);\n        test_downsampled_filtering_helper<2>(1,1);\n        test_downsampled_filtering_helper<3>(1,1);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void test_segment_image()\n    {\n        print_spinner();\n        array2d<T> img(100,100);\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                if (c < 50 || r < 50)\n                    assign_pixel(img[r][c], 0);\n                else\n                    assign_pixel(img[r][c], 255);\n            }\n        }\n\n        array2d<unsigned long> out;\n        segment_image(img, out);\n\n        DLIB_TEST(get_rect(img) == get_rect(out));\n        const unsigned long v1 = out[0][0];\n        const unsigned long v2 = out[90][90];\n\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                if (c < 50 || r < 50)\n                {\n                    DLIB_TEST(out[r][c] == v1);\n                }\n                else\n                {\n                    DLIB_TEST(out[r][c] == v2);\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void test_dng_floats(double scale)\n    {\n        dlog << LINFO << \"in test_dng_floats\";\n        print_spinner();\n        array2d<T> img(100,101);\n\n        dlib::rand rnd;\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                T val = rnd.get_random_double()*scale;\n                img[r][c] = val;\n\n                // Lets the float_details object while we are here doing this stuff.\n                float_details temp = val;\n                T val2 = temp;\n                // for the same type we should exactly reproduce the value (unless\n                // it's long double and then maybe it's slightly different).\n                if (is_same_type<T,long double>::value)\n                {\n                    DLIB_TEST(std::abs(val2-val) < scale*std::numeric_limits<T>::epsilon());\n                }\n                else\n                {\n                    DLIB_TEST(val2 == val);\n                }\n\n                float valf = temp;\n                double vald = temp;\n                long double vall = temp;\n\n                DLIB_TEST(std::abs(valf-val) < scale*std::numeric_limits<float>::epsilon());\n                DLIB_TEST(std::abs(vald-val) < scale*std::numeric_limits<double>::epsilon());\n                DLIB_TEST(std::abs(vall-val) < scale*std::numeric_limits<long double>::epsilon());\n            }\n        }\n\n        ostringstream sout;\n        save_dng(img, sout);\n        istringstream sin;\n\n        array2d<float> img1;\n        array2d<double> img2;\n        array2d<long double> img3;\n\n        sin.clear(); sin.str(sout.str());\n        load_dng(img1, sin);\n\n        sin.clear(); sin.str(sout.str());\n        load_dng(img2, sin);\n\n        sin.clear(); sin.str(sout.str());\n        load_dng(img3, sin);\n\n        DLIB_TEST(img.nr() == img1.nr());\n        DLIB_TEST(img.nr() == img2.nr());\n        DLIB_TEST(img.nr() == img3.nr());\n        DLIB_TEST(img.nc() == img1.nc());\n        DLIB_TEST(img.nc() == img2.nc());\n        DLIB_TEST(img.nc() == img3.nc());\n\n        DLIB_TEST(max(abs(mat(img) - matrix_cast<T>(mat(img1)))) < scale*std::numeric_limits<float>::epsilon());\n        DLIB_TEST(max(abs(mat(img) - matrix_cast<T>(mat(img2)))) < scale*std::numeric_limits<double>::epsilon());\n        DLIB_TEST(max(abs(mat(img) - matrix_cast<T>(mat(img3)))) < scale*std::numeric_limits<long double>::epsilon());\n    }\n\n    void test_dng_float_int()\n    {\n        dlog << LINFO << \"in test_dng_float_int\";\n        print_spinner();\n\n        array2d<uint16> img;\n        assign_image(img, gaussian_randm(101,100)*10000);\n\n        ostringstream sout;\n        save_dng(img, sout);\n        istringstream sin(sout.str());\n        array2d<double> img2;\n        load_dng(img2, sin);\n        sout.clear(); sout.str(\"\");\n\n        save_dng(img2, sout);\n        sin.clear(); sin.str(sout.str());\n        array2d<uint16> img3;\n        load_dng(img3, sin);\n\n        // this whole thing should have been totally lossless.\n        DLIB_TEST(mat(img) == mat(img3));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void test_filtering_center (\n        dlib::rand& rnd\n    )\n    {\n        array2d<T> img(rnd.get_random_32bit_number()%100+1,\n            rnd.get_random_32bit_number()%100+1);\n        matrix<T> filt(rnd.get_random_32bit_number()%10+1,\n            rnd.get_random_32bit_number()%10+1);\n\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                img[r][c] = rnd.get_random_32bit_number()%100;\n            }\n        }\n        for (long r = 0; r < filt.nr(); ++r)\n        {\n            for (long c = 0; c < filt.nc(); ++c)\n            {\n                filt(r,c) = rnd.get_random_32bit_number()%100;\n            }\n        }\n\n        array2d<T> out;\n        const rectangle area = spatially_filter_image(img, out, filt);\n\n        for (long r = 0; r < out.nr(); ++r)\n        {\n            for (long c = 0; c < out.nc(); ++c)\n            {\n                const rectangle rect = centered_rect(point(c,r), filt.nc(), filt.nr());\n                if (get_rect(out).contains(rect))\n                {\n                    T val = sum(pointwise_multiply(filt, subm(mat(img),rect)));\n                    DLIB_CASSERT(val == out[r][c],\"err: \" << val-out[r][c]);\n                    DLIB_CASSERT(area.contains(point(c,r)),\"\");\n                }\n                else\n                {\n                    DLIB_CASSERT(!area.contains(point(c,r)),\"\");\n                }\n            }\n        }\n    }\n\n    template <typename T>\n    void test_separable_filtering_center (\n        dlib::rand& rnd\n    )\n    {\n        array2d<T> img(rnd.get_random_32bit_number()%100+1,\n            rnd.get_random_32bit_number()%100+1);\n        matrix<T,1,0> row_filt(rnd.get_random_32bit_number()%10+1);\n        matrix<T,0,1> col_filt(rnd.get_random_32bit_number()%10+1);\n\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                img[r][c] = rnd.get_random_32bit_number()%10;\n            }\n        }\n        for (long r = 0; r < row_filt.size(); ++r)\n        {\n            row_filt(r) = rnd.get_random_32bit_number()%10;\n        }\n        for (long r = 0; r < col_filt.size(); ++r)\n        {\n            col_filt(r) = rnd.get_random_32bit_number()%10;\n        }\n\n        array2d<T> out;\n        const rectangle area = spatially_filter_image_separable(img, out, row_filt, col_filt);\n\n        for (long r = 0; r < out.nr(); ++r)\n        {\n            for (long c = 0; c < out.nc(); ++c)\n            {\n                const rectangle rect = centered_rect(point(c,r), row_filt.size(), col_filt.size());\n                if (get_rect(out).contains(rect))\n                {\n                    T val = sum(pointwise_multiply(col_filt*row_filt, subm(mat(img),rect)));\n                    DLIB_CASSERT(val == out[r][c],\"err: \" << val-out[r][c]);\n\n                    DLIB_CASSERT(area.contains(point(c,r)),\"\");\n                }\n                else\n                {\n                    DLIB_CASSERT(!area.contains(point(c,r)),\"\");\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class image_tester : public tester\n    {\n    public:\n        image_tester (\n        ) :\n            tester (\"test_image\",\n                    \"Runs tests on the image processing objects and functions.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            image_test();\n            test_integral_image<long, unsigned char>();\n            test_integral_image<double, int>();\n            test_integral_image<long, unsigned char>();\n            test_integral_image<double, float>();\n\n            test_zero_border_pixels();\n\n            test_filtering<unsigned char>(false,1);\n            test_filtering<unsigned char>(true,1);\n            test_filtering<unsigned char>(false,3);\n            test_filtering<unsigned char>(true,3);\n            test_filtering<int>(false,1);\n            test_filtering<int>(true,1);\n            test_filtering<int>(false,3);\n            test_filtering<int>(true,3);\n\n            test_label_connected_blobs();\n            test_label_connected_blobs2();\n            test_downsampled_filtering();\n\n            test_segment_image<unsigned char>();\n            test_segment_image<unsigned short>();\n            test_segment_image<double>();\n            test_segment_image<int>();\n            test_segment_image<rgb_pixel>();\n            test_segment_image<rgb_alpha_pixel>();\n\n            test_dng_floats<float>(1);\n            test_dng_floats<double>(1);\n            test_dng_floats<long double>(1);\n            test_dng_floats<float>(1e30);\n            test_dng_floats<double>(1e30);\n            test_dng_floats<long double>(1e30);\n\n            test_dng_float_int();\n\n            dlib::rand rnd;\n            for (int i = 0; i < 10; ++i)\n            {\n                // the spatial filtering stuff is the same as xcorr_same when the filter\n                // sizes are odd.\n                test_filtering2(3,3,rnd);\n                test_filtering2(5,5,rnd);\n                test_filtering2(7,7,rnd);\n            }\n\n            for (int i = 0; i < 100; ++i)\n                test_filtering_center<float>(rnd);\n            for (int i = 0; i < 100; ++i)\n                test_filtering_center<int>(rnd);\n            for (int i = 0; i < 100; ++i)\n                test_separable_filtering_center<int>(rnd);\n            for (int i = 0; i < 100; ++i)\n                test_separable_filtering_center<float>(rnd);\n\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/iosockstream.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/iosockstream.h>\n#include <dlib/server.h>\n#include <vector>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n\n    logger dlog(\"test.iosockstream\");\n\n// ----------------------------------------------------------------------------------------\n\n    class serv : public server_iostream\n    {\n        virtual void on_connect (\n            std::istream& in,\n            std::ostream& out,\n            const std::string& ,\n            const std::string& ,\n            unsigned short ,\n            unsigned short ,\n            uint64 \n        )\n        {\n            try\n            {\n                dlog << LINFO << \"serv1: serving connection\";\n\n                std::string temp;\n                in >> temp;\n                DLIB_TEST(temp == \"word\");\n                in >> temp;\n                DLIB_TEST(temp == \"another\");\n                out << \"yay words \";\n                in >> temp;\n                DLIB_TEST(temp == \"yep\");\n            }\n            catch (error& e)\n            {\n                error_string = e.what();\n            }\n\n        }\n\n\n    public:\n        std::string error_string;\n\n    };\n\n    class serv2 : public server_iostream\n    {\n        virtual void on_connect (\n            std::istream& ,\n            std::ostream& out,\n            const std::string& ,\n            const std::string& ,\n            unsigned short ,\n            unsigned short ,\n            uint64 \n        )\n        {\n            try\n            {\n                dlog << LINFO << \"serv2: serving connection\";\n\n                out << \"one two three four five\";\n            }\n            catch (error& e)\n            {\n                error_string = e.what();\n            }\n\n        }\n\n\n    public:\n        std::string error_string;\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void test1()\n    {\n        dlog << LINFO << \"in test1()\";\n        serv theserv;\n        theserv.set_listening_port(12345);\n        theserv.start_async();\n\n        // wait a little bit to make sure the server has started listening before we try \n        // to connect to it.\n        dlib::sleep(500);\n\n        for (int i = 0; i < 200; ++i)\n        {\n            dlog << LINFO << \"i: \" << i;\n            print_spinner();\n            iosockstream stream(\"localhost:12345\");\n\n            stream << \"word another \";\n            std::string temp;\n            stream >> temp;\n            DLIB_TEST(temp == \"yay\");\n            stream >> temp;\n            DLIB_TEST(temp == \"words\");\n            stream << \"yep \";\n        }\n\n        // Just to make sure the server finishes processing the last connection before\n        // we kill it and accidentally trigger a DLIB_TEST().\n        dlib::sleep(500);\n\n        if (theserv.error_string.size() != 0)\n            throw error(theserv.error_string);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test2()\n    {\n        dlog << LINFO << \"in test2()\";\n        serv2 theserv;\n        theserv.set_listening_port(12345);\n        theserv.start_async();\n\n        // wait a little bit to make sure the server has started listening before we try \n        // to connect to it.\n        dlib::sleep(500);\n\n        for (int i = 0; i < 200; ++i)\n        {\n            dlog << LINFO << \"i: \" << i;\n            print_spinner();\n            iosockstream stream(\"localhost:12345\");\n\n            std::string temp;\n            stream >> temp; DLIB_TEST(temp == \"one\");\n            stream >> temp; DLIB_TEST(temp == \"two\");\n            stream >> temp; DLIB_TEST(temp == \"three\");\n            stream >> temp; DLIB_TEST(temp == \"four\");\n            stream >> temp; DLIB_TEST(temp == \"five\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_iosockstream : public tester\n    {\n    public:\n        test_iosockstream (\n        ) :\n            tester (\"test_iosockstream\",\n                    \"Runs tests on the iosockstream component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test1();\n            test2();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/is_same_object.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm.h>\n#include <vector>\n#include <sstream>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.is_same_object\");\n\n    DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(has_booya_template, void, template booya<int>, (std::string)const);\n    DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(has_booya2_template, void, template booya2<int>, (int)const);\n    DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(has_funct_int, void, funct, (int));\n    DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(has_funct_double, void, funct, (double));\n    DLIB_MAKE_HAS_MEMBER_FUNCTION_TEST(has_funct_f, float, funct_f, (int));\n\n    class htest\n    {\n    public:\n        template <typename EXP>\n        void booya(std::string) const {}\n\n        template <typename EXP>\n        void booya2(EXP) const {}\n\n        void funct(double) {}\n    };\n\n    class htest2\n    {\n    public:\n\n        void funct(int) {}\n\n        float funct_f(int) { return 0;}\n    };\n\n    void test_metaprog()\n    {\n        DLIB_TEST(has_booya2_template<htest>::value  == true)\n        DLIB_TEST(has_booya2_template<htest2>::value == false)\n\n#if _MSC_VER > 1600 // there is a bug in visual studio 2010 and older that prevents this test from working\n        DLIB_TEST(has_booya_template<htest>::value  == true)\n#endif\n\n        DLIB_TEST(has_booya_template<htest2>::value == false)\n\n        DLIB_TEST(has_funct_int<htest>::value  == false)\n        DLIB_TEST(has_funct_int<htest2>::value == true)\n        DLIB_TEST(has_funct_double<htest>::value  == true)\n        DLIB_TEST(has_funct_double<htest2>::value == false)\n\n        DLIB_TEST(has_funct_f<htest>::value  == false)\n        DLIB_TEST(has_funct_f<htest2>::value == true)\n    }\n\n    class is_same_object_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        is_same_object_tester (\n        ) :\n            tester (\n                \"test_is_same_object\",       // the command line argument name for this test\n                \"Run tests on the is_same_object function.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n        struct base {};\n        struct derived : public base {};\n\n        template <bool truth>\n        void go(const base& a, const base& b)\n        {\n            DLIB_TEST( is_same_object(a,b) == truth) ;\n            DLIB_TEST( is_same_object(b,a) == truth) ;\n        }\n\n\n        template <bool truth>\n        void go2(const base& a, const derived& b)\n        {\n            DLIB_TEST( is_same_object(a,b) == truth) ;\n            DLIB_TEST( is_same_object(b,a) == truth) ;\n        }\n\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n\n            int a, b;\n            double d;\n            DLIB_TEST( is_same_object(a,a) == true) ;\n            DLIB_TEST( is_same_object(a,b) == false) ;\n            DLIB_TEST( is_same_object(d,b) == false) ;\n            DLIB_TEST( is_same_object(d,d) == true) ;\n\n            base sb;\n            derived sd, sd2;\n\n            DLIB_TEST( is_same_object(sb,sd) == false) ;\n            DLIB_TEST( is_same_object(sd,sb) == false) ;\n\n            go<true>(sd, sd);\n            go<false>(sd, sd2);\n            go<true>(sb, sb);\n            go<false>(sd, sb);\n\n            go2<true>(sd, sd);\n            go2<false>(sd2, sd);\n            go2<false>(sd, sd2);\n            go2<false>(sb, sd);\n\n            test_metaprog();\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    is_same_object_tester a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/kcentroid.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include <map>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n#include \"checkerboard.h\"\n#include <dlib/statistics.h>\n\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.kcentroid\");\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct unopt_sparse_linear_kernel\n    {\n        typedef typename T::value_type::second_type scalar_type;\n        typedef T sample_type;\n        typedef default_memory_manager mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return dot(a,b);\n        }\n\n        bool operator== (\n            const unopt_sparse_linear_kernel& \n        ) const\n        {\n            return true;\n        }\n    };\n\n    template <typename T>\n    struct unopt_linear_kernel\n    {\n        typedef typename T::type scalar_type;\n        typedef T sample_type;\n        typedef typename T::mem_manager_type mem_manager_type;\n\n        scalar_type operator() (\n            const sample_type& a,\n            const sample_type& b\n        ) const\n        { \n            return trans(a)*b;\n        }\n\n        bool operator== (\n            const unopt_linear_kernel& \n        ) const\n        {\n            return true;\n        }\n    };\n\n    bool approx_equal(double a, double b)\n    {\n        return (std::abs(a-b) < 1000*(std::numeric_limits<double>::epsilon()));\n    }\n\n    bool approx_equal(double a, double b, double eps)\n    {\n        return (std::abs(a-b) < eps);\n    }\n\n    template <typename K>\n    double dist (\n        const K& k,\n        const matrix<double,4,1>& a,\n        const matrix<double,5,1>& b\n    )\n    /*!\n        ensures\n            - returns the distance between the a and b vectors in the\n              feature space defined by the given kernel k.\n    !*/\n    {\n        const double bias = std::sqrt(k.offset);\n        return std::sqrt(length_squared(a-colm(b,0,4)) + std::pow(b(4)-bias,2.0));\n\n    }\n\n    template <typename K>\n    double dist (\n        const K& k,\n        std::map<unsigned long,double> a,\n        std::map<unsigned long,double> b\n    )\n    /*!\n        ensures\n            - returns the distance between the a and b vectors in the\n              feature space defined by the given kernel k.\n    !*/\n    {\n        double temp = 0;\n        const double bias = std::sqrt(k.offset);\n        temp += std::pow(a[0]-b[0],2.0);\n        temp += std::pow(a[1]-b[1],2.0);\n        temp += std::pow(a[2]-b[2],2.0);\n        temp += std::pow(a[3]-b[3],2.0);\n        temp += std::pow(bias-b[4],2.0);\n\n        return std::sqrt(temp);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    void test_kcentroid_with_linear_kernel(\n    )\n    /*!\n        requires\n            - kernel_type::sample_type == a matrix<double,5,1>\n            - kernel_type == a kernel that just computes a dot product\n              between its inputs.  I.e. a linear kernel\n        ensures\n            - tests the kcentroid object with the given kernel\n    !*/\n    {\n        // Here we declare that our samples will be 2 dimensional column vectors.  \n        typedef typename kernel_type::sample_type sample_type;\n\n        kernel_type default_kernel;\n        kcentroid<kernel_type> test(default_kernel,0.001,20);\n\n        sample_type temp, temp2;\n\n        temp = 2,0,0,0,0;\n        dlog << LDEBUG << test(temp) ;\n        dlog << LDEBUG << \"squared_norm(): \" << test.squared_norm() ;\n\n        DLIB_TEST(approx_equal(test(temp), 2));\n        DLIB_TEST(approx_equal(test.squared_norm(), 0));\n\n        // make test store the point(2,0,0,0,0)\n        test.train(temp, 0, 1);\n        dlog << LDEBUG << test(temp) ;\n        dlog << LDEBUG << \"squared_norm(): \" << test.squared_norm() ;\n        DLIB_TEST(approx_equal(test(temp), 0));\n        DLIB_TEST(approx_equal(test.get_distance_function()(temp), 0));\n        DLIB_TEST(approx_equal(test.squared_norm(), 4));\n\n        temp = 0,2,0,0,0;\n        dlog << LDEBUG << test(temp) ;\n        DLIB_TEST(approx_equal(test(temp), std::sqrt(2*2 + 2*2.0)));\n        DLIB_TEST(approx_equal(test.squared_norm(), 4));\n\n        // make test store the point(0,2,0,0,0)\n        test.train(temp, 0, 1);\n\n        dlog << LDEBUG << test(temp) ;\n        DLIB_TEST(approx_equal(test(temp), 0));\n        DLIB_TEST(approx_equal(test.squared_norm(), 4));\n\n        temp = 2,0,0,0,0;\n        DLIB_TEST(approx_equal(test(temp), std::sqrt(2*2 + 2*2.0)));\n        DLIB_TEST(approx_equal(test.squared_norm(), 4));\n\n        // make test store the point(1,1,0,0,0)\n        test.train(temp, 0.5, 0.5);\n\n        temp = 0;\n        DLIB_TEST(approx_equal(test(temp), std::sqrt(2.0)));\n        DLIB_TEST(approx_equal(test.squared_norm(), 2));\n\n        // make test store the point(1,1,0,3,0)\n        temp = 0,0,0,3,0;\n        temp2 = 1,1,0,3,0;\n        test.train(temp, 1, 1);\n\n        temp = 0;\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        temp = 1,2,3,4,5;\n        DLIB_TEST(approx_equal(test(temp), length(temp2-temp)));\n        DLIB_TEST(approx_equal(test.get_distance_function()(temp), length(temp2-temp)));\n\n        // make test store the point(0,1,0,3,-1)\n        temp = 1,0,0,0,1;\n        test.train(temp, 1, -1);\n        temp2 = 0,1,0,3,-1;\n\n        temp = 0;\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        temp = 1,2,3,4,5;\n        DLIB_TEST(approx_equal(test(temp), length(temp2-temp)));\n\n\n        // make test store the -1*point(0,1,0,3,-1)\n        temp = 0,0,0,0,0;\n        test.train(temp, -1, 0);\n        temp2 = -temp2;\n\n        temp = 0;\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        temp = 1,2,-3,4,5;\n        DLIB_TEST(approx_equal(test(temp), length(temp2-temp)));\n\n\n\n        // make test store the point(0,0,0,0,0)\n        temp = 0,0,0,0,0;\n        test.train(temp, 0, 0);\n        temp2 = 0;\n\n        temp = 0;\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        temp = 1,2,-3,4,5;\n        DLIB_TEST(approx_equal(test(temp), length(temp2-temp)));\n\n\n\n        // make test store the point(1,0,0,0,0)\n        temp = 1,0,0,0,0;\n        test.train(temp, 1, 1);\n        temp2 = 1,0,0,0,0;\n\n        temp = 0;\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        DLIB_TEST(approx_equal(test.inner_product(test), length_squared(temp2)));\n        temp = 1,2,-3,4,5;\n        DLIB_TEST(approx_equal(test(temp), length(temp2-temp)));\n        DLIB_TEST(approx_equal(test(test), 0));\n        DLIB_TEST(approx_equal(test.get_distance_function()(test.get_distance_function()), 0));\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    void test_kcentroid_with_offset_linear_kernel(\n    )\n    /*!\n        requires\n            - kernel_type::sample_type == a matrix<double,4,1>\n            - kernel_type == a kernel that just computes a dot product\n              between its inputs + some constant.  I.e. a linear kernel\n              wrapped by offset_kernel\n        ensures\n            - tests the kcentroid object with the given kernel\n    !*/\n    {\n        // Here we declare that our samples will be 2 dimensional column vectors.  \n        typedef typename kernel_type::sample_type sample_type;\n\n        kernel_type k;\n        kcentroid<kernel_type> test(k,0.001,20);\n\n        sample_type temp, temp2, temp3;\n\n        matrix<double,5,1> val, val2;\n\n        const double b = std::sqrt(k.offset);\n\n        temp = 2,0,0,0;\n        temp2 = 0;\n        val = 0;\n        DLIB_TEST(approx_equal(test(temp), dist(k,temp,val)));\n        DLIB_TEST(approx_equal(test(temp2), dist(k,temp2,val)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n\n\n        temp2 = 0;\n\n        // make test store the point(0,0,0,0,b)\n        val = 0,0,0,0,b;\n        test.train(temp2, 0,1);\n\n        temp = 2,0,0,0;\n        dlog << LDEBUG << test(temp) ;\n        dlog << LDEBUG << \"squared_norm(): \" << test.squared_norm() ;\n\n        DLIB_TEST(approx_equal(test(temp), dist(k,temp,val)));\n        DLIB_TEST(approx_equal(test(temp2), dist(k,temp2,val)));\n        DLIB_TEST_MSG(approx_equal(test.get_distance_function()(temp2), dist(k,temp2,val), 1e-6), \n                     test.get_distance_function()(temp2) - dist(k,temp2,val) << \"  compare to: \" <<\n                     test(temp2) - dist(k,temp2,val)\n        );\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n\n\n        // make test store the point(0,0,0,0,0)\n        val = 0,0,0,0,0;\n        test.train(temp2, 1,-1);\n        DLIB_TEST(approx_equal(test(temp), dist(k,temp,val)));\n        DLIB_TEST(approx_equal(test(temp2), dist(k,temp2,val)));\n        DLIB_TEST_MSG(approx_equal(test.get_distance_function()(temp2), dist(k,temp2,val)), \n                     test.get_distance_function()(temp2) - dist(k,temp2,val) << \"  compare to: \" <<\n                     test(temp2) - dist(k,temp2,val)\n        );\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n\n\n\n        val2 = 0,1,0,0,b;\n        val += val2;\n        temp2 = 0,1,0,0;\n        // make test store the point val\n        test.train(temp2, 1,1);\n\n        temp = 1,0,3,0;\n        DLIB_TEST(approx_equal(test(temp), dist(k,temp,val)));\n        DLIB_TEST_MSG(approx_equal(test(temp2), dist(k,temp2,val), 1e-7), \n                     test(temp2) - dist(k,temp2,val));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n        DLIB_TEST_MSG(approx_equal(test(test), 0, 1e-7), test(test));\n\n\n        val2 =  0,1,2.6,8,b;\n        val += val2;\n        temp2 = 0,1,2.6,8;\n        // make test store the point val\n        test.train(temp2, 1,1);\n\n        temp = 1,1,3,0;\n        DLIB_TEST(approx_equal(test(temp), dist(k,temp,val)));\n        DLIB_TEST_MSG(approx_equal(test(temp2), dist(k,temp2,val)), test(temp2) - dist(k,temp2,val));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n        DLIB_TEST(approx_equal(test.inner_product(test), length_squared(val)));\n        DLIB_TEST(approx_equal(test(test), 0));\n        DLIB_TEST_MSG(approx_equal(test.get_distance_function()(test.get_distance_function()), 0, 1e-6), \n                     test.get_distance_function()(test.get_distance_function()));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    void test_kcentroid_with_sparse_linear_kernel(\n    )\n    /*!\n        requires\n            - kernel_type::sample_type == a std::map<unsigned long,double> \n            - kernel_type == a kernel that just computes a dot product\n              between its inputs.  I.e. a linear kernel\n        ensures\n            - tests the kcentroid object with the given kernel\n    !*/\n    {\n        // Here we declare that our samples will be 2 dimensional column vectors.  \n        typedef typename kernel_type::sample_type sample_type;\n\n        kernel_type default_kernel;\n        kcentroid<kernel_type> test(default_kernel,0.001,20);\n\n        dlog << LDEBUG << \"AAAA 1\" ;\n\n        sample_type temp, temp2;\n\n        temp[0] = 2;\n        dlog << LDEBUG << test(temp) ;\n        dlog << LDEBUG << \"squared_norm(): \" << test.squared_norm() ;\n\n        DLIB_TEST(approx_equal(test(temp), 2));\n        DLIB_TEST(approx_equal(test.squared_norm(), 0));\n\n        // make test store the point(2,0,0,0,0)\n        test.train(temp, 0, 1);\n        dlog << LDEBUG << test(temp) ;\n        dlog << LDEBUG << \"squared_norm(): \" << test.squared_norm() ;\n        DLIB_TEST(approx_equal(test(temp), 0));\n        DLIB_TEST(approx_equal(test.squared_norm(), 4));\n\n        dlog << LDEBUG << \"AAAA 2\" ;\n        temp.clear();\n        temp[1] = 2;\n        dlog << LDEBUG << test(temp) ;\n        DLIB_TEST(approx_equal(test(temp), std::sqrt(2*2 + 2*2.0)));\n        DLIB_TEST(approx_equal(test.squared_norm(), 4));\n\n        // make test store the point(0,2,0,0,0)\n        test.train(temp, 0, 1);\n\n        dlog << LDEBUG << test(temp) ;\n        DLIB_TEST(approx_equal(test(temp), 0));\n        DLIB_TEST(approx_equal(test.squared_norm(), 4));\n\n        temp.clear();\n        temp[0] = 2;\n        DLIB_TEST(approx_equal(test(temp), std::sqrt(2*2 + 2*2.0)));\n        DLIB_TEST(approx_equal(test.squared_norm(), 4));\n\n        // make test store the point(1,1,0,0,0)\n        test.train(temp, 0.5, 0.5);\n\n        dlog << LDEBUG << \"AAAA 3\" ;\n        temp.clear();\n        DLIB_TEST(approx_equal(test(temp), std::sqrt(2.0)));\n        DLIB_TEST(approx_equal(test.squared_norm(), 2));\n        DLIB_TEST(approx_equal(test(test), 0));\n        DLIB_TEST(approx_equal(test.get_distance_function()(test.get_distance_function()), 0));\n\n        dlog << LDEBUG << \"AAAA 3.1\" ;\n        // make test store the point(1,1,0,3,0)\n        temp.clear(); temp[3] = 3;\n        temp2.clear(); \n        temp2[0] = 1;\n        temp2[1] = 1;\n        temp2[3] = 3;\n        test.train(temp, 1, 1);\n\n        dlog << LDEBUG << \"AAAA 3.2\" ;\n        temp.clear();\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        dlog << LDEBUG << \"AAAA 3.3\" ;\n        temp[0] = 1;\n        temp[1] = 2;\n        temp[2] = 3;\n        temp[3] = 4;\n        temp[4] = 5;\n        dlog << LDEBUG << \"AAAA 3.4\" ;\n        double junk = dlib::distance(temp2,temp);\n        dlog << LDEBUG << \"AAAA 3.5\" ;\n        DLIB_TEST(approx_equal(test(temp), junk) );\n\n        dlog << LDEBUG << \"AAAA 4\" ;\n        // make test store the point(0,1,0,3,-1)\n        temp.clear();\n        temp[0] = 1;\n        temp[4] = 1;\n        test.train(temp, 1, -1);\n        temp2.clear();\n        temp2[1] = 1;\n        temp2[3] = 3;\n        temp2[4] = -1;\n\n        temp.clear();\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        temp[0] = 1;\n        temp[1] = 2;\n        temp[2] = 3;\n        temp[3] = 4;\n        temp[4] = 5;\n        DLIB_TEST(approx_equal(test(temp), dlib::distance(temp2,temp)));\n\n\n        // make test store the -1*point(0,1,0,3,-1)\n        temp.clear();\n        test.train(temp, -1, 0);\n        temp2[0] = -temp2[0];\n        temp2[1] = -temp2[1];\n        temp2[2] = -temp2[2];\n        temp2[3] = -temp2[3];\n        temp2[4] = -temp2[4];\n\n        dlog << LDEBUG << \"AAAA 5\" ;\n        temp.clear();\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        temp[0] = 1;\n        temp[1] = 2;\n        temp[2] = -3;\n        temp[3] = 4;\n        temp[4] = 5;\n        DLIB_TEST(approx_equal(test(temp), dlib::distance(temp2,temp)));\n\n\n\n        // make test store the point(0,0,0,0,0)\n        temp.clear();\n        test.train(temp, 0, 0);\n        temp2.clear();\n\n        temp.clear();\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        temp[0] = 1;\n        temp[1] = 2;\n        temp[2] = -3;\n        temp[3] = 4;\n        temp[4] = 5;\n        DLIB_TEST(approx_equal(test(temp), dlib::distance(temp2,temp)));\n        DLIB_TEST(approx_equal(test.get_distance_function()(temp), dlib::distance(temp2,temp)));\n\n\n        dlog << LDEBUG << \"AAAA 6\" ;\n\n        // make test store the point(1,0,0,0,0)\n        temp.clear();\n        temp[0] = 1;\n        test.train(temp, 1, 1);\n        temp2.clear();\n        temp2[0] = 1;\n\n        temp.clear();\n        DLIB_TEST(approx_equal(test(temp), length(temp2)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(temp2)));\n        DLIB_TEST(approx_equal(test.inner_product(test), length_squared(temp2)));\n        temp[0] = 1;\n        temp[1] = 2;\n        temp[2] = -3;\n        temp[3] = 4;\n        temp[4] = 5;\n        DLIB_TEST(approx_equal(test(temp), dlib::distance(temp2,temp)));\n        DLIB_TEST(approx_equal(test.get_distance_function()(temp), dlib::distance(temp2,temp)));\n        DLIB_TEST(approx_equal(test(test), 0));\n        DLIB_TEST(approx_equal(test.get_distance_function()(test.get_distance_function()), 0));\n\n        dlog << LDEBUG << \"AAAA 7\" ;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    void test_kcentroid_with_offset_sparse_linear_kernel(\n    )\n    /*!\n        requires\n            - kernel_type::sample_type == a std::map<unsigned long,double> \n            - kernel_type == a kernel that just computes a dot product\n              between its inputs + some constant.  I.e. a linear kernel\n              wrapped by offset_kernel\n        ensures\n            - tests the kcentroid object with the given kernel\n    !*/\n    {\n        // Here we declare that our samples will be 2 dimensional column vectors.  \n        typedef typename kernel_type::sample_type sample_type;\n\n        kernel_type k;\n        kcentroid<kernel_type> test(k,0.001,20);\n\n        sample_type temp, temp2, temp3;\n\n        std::map<unsigned long,double> val, val2;\n\n        const double b = std::sqrt(k.offset);\n\n        temp.clear();\n        temp[0] = 2;\n        temp2.clear();\n        val.clear();\n        DLIB_TEST(approx_equal(test(temp), dist(k,temp,val)));\n        DLIB_TEST(approx_equal(test(temp2), dist(k,temp2,val)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n\n\n        temp2.clear();\n\n        // make test store the point(0,0,0,0,b)\n        val.clear();\n        val[4] = b;\n        test.train(temp2, 0,1);\n\n        temp.clear();\n        temp[0] = 2;\n        dlog << LDEBUG << test(temp) ;\n        dlog << LDEBUG << \"squared_norm(): \" << test.squared_norm() ;\n\n        DLIB_TEST(approx_equal(test(temp), dist(k,temp,val)));\n        DLIB_TEST(approx_equal(test(temp2), dist(k,temp2,val)));\n        DLIB_TEST_MSG(approx_equal(test.get_distance_function()(temp2), dist(k,temp2,val), 1e-7), \n                     test.get_distance_function()(temp2) - dist(k,temp2,val)\n        );\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n        DLIB_TEST(approx_equal(test(test), 0));\n        DLIB_TEST(approx_equal(test.get_distance_function()(test.get_distance_function()), 0, 1e-6));\n\n        // make test store the point(0,0,0,0,0)\n        val.clear();\n        test.train(temp2, 1,-1);\n\n        temp.clear();\n        temp[0] = 2;\n        dlog << LDEBUG << test(temp) ;\n        dlog << LDEBUG << \"squared_norm(): \" << test.squared_norm() ;\n\n        DLIB_TEST_MSG(approx_equal(test(temp), dist(k,temp,val)), test(temp) - dist(k,temp,val));\n        DLIB_TEST(approx_equal(test(temp2), dist(k,temp2,val)));\n        DLIB_TEST(approx_equal(test.get_distance_function()(temp2), dist(k,temp2,val)));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n        DLIB_TEST(approx_equal(test(test), 0));\n        DLIB_TEST(approx_equal(test.get_distance_function()(test.get_distance_function()), 0));\n\n        val2.clear();\n        val2[0] = 0;\n        val2[1] = 1;\n        val2[2] = 0;\n        val2[3] = 0;\n        val2[4] = b;\n        for (unsigned int i = 0; i < 5; ++i) val[i] += val2[i];\n        temp2.clear();\n        temp2[1] = 1;\n        // make test store the point val\n        test.train(temp2, 1,1);\n\n        temp.clear();\n        temp[0] = 1;\n        temp[2] = 3;\n        DLIB_TEST(approx_equal(test(temp), dist(k,temp,val)));\n        DLIB_TEST_MSG(approx_equal(test(temp2), dist(k,temp2,val), 1e-7), \n                     test(temp2) - dist(k,temp2,val));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n\n\n        val2.clear();\n        val2[0] = 0;\n        val2[1] = 1;\n        val2[2] = 2.6;\n        val2[3] = 8;\n        val2[4] = b;\n        for (unsigned int i = 0; i < 5; ++i) val[i] += val2[i];\n\n        temp2.clear();\n        temp2[0] = 0;\n        temp2[1] = 1;\n        temp2[2] = 2.6;\n        temp2[3] = 8;\n        // make test store the point val\n        test.train(temp2, 1,1);\n\n        temp.clear();\n        temp[0] = 1;\n        temp[1] = 1;\n        temp[2] = 3;\n        temp[3] = 0;\n        DLIB_TEST(approx_equal(test(temp), dist(k,temp,val)));\n        DLIB_TEST_MSG(approx_equal(test(temp2), dist(k,temp2,val)), test(temp2) - dist(k,temp2,val));\n        DLIB_TEST(approx_equal(test.squared_norm(), length_squared(val)));\n        DLIB_TEST(approx_equal(test.inner_product(test), length_squared(val)));\n        DLIB_TEST_MSG(approx_equal(test(test), 0, 1e-6), test(test));\n        DLIB_TEST(approx_equal(test.get_distance_function()(test.get_distance_function()), 0));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class kcentroid_tester : public tester\n    {\n    public:\n        kcentroid_tester (\n        ) :\n            tester (\"test_kcentroid\",\n                    \"Runs tests on the kcentroid components.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            // The idea here is to exercize all the various overloads of the kcentroid object.  We also want\n            // to exercize the non-overloaded default version.  That is why we have these unopt_* linear\n            // kernels\n            test_kcentroid_with_linear_kernel<linear_kernel<matrix<double,5,1> > >();\n            test_kcentroid_with_offset_linear_kernel<offset_kernel<linear_kernel<matrix<double,4,1> > > >();\n            test_kcentroid_with_linear_kernel<unopt_linear_kernel<matrix<double,5,1> > >();\n            test_kcentroid_with_offset_linear_kernel<offset_kernel<unopt_linear_kernel<matrix<double,4,1> > > >();\n            test_kcentroid_with_sparse_linear_kernel<sparse_linear_kernel<std::map<unsigned long,double> > >();\n            test_kcentroid_with_offset_sparse_linear_kernel<offset_kernel<sparse_linear_kernel<std::map<unsigned long,double> > > >();\n            test_kcentroid_with_sparse_linear_kernel<unopt_sparse_linear_kernel<std::map<unsigned long,double> > >();\n            test_kcentroid_with_offset_sparse_linear_kernel<offset_kernel<unopt_sparse_linear_kernel<std::map<unsigned long,double> > > >();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/kernel_matrix.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm.h>\n#include <vector>\n#include <sstream>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.kernel_matrix\");\n\n\n    class kernel_matrix_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        kernel_matrix_tester (\n        ) :\n            tester (\n                \"test_kernel_matrix\",       // the command line argument name for this test\n                \"Run tests on the kernel_matrix functions.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n\n            typedef matrix<double,0,1> sample_type;\n            typedef radial_basis_kernel<sample_type> kernel_type;\n            kernel_type kern(0.1);\n\n            std::vector<sample_type> vect1;\n            std::vector<sample_type> vect2;\n\n            const sample_type samp = randm(4,1);\n            sample_type samp2, samp3;\n\n            vect1.push_back(randm(4,1));\n            vect1.push_back(randm(4,1));\n            vect1.push_back(randm(4,1));\n            vect1.push_back(randm(4,1));\n\n            vect2.push_back(randm(4,1));\n            vect2.push_back(randm(4,1));\n            vect2.push_back(randm(4,1));\n            vect2.push_back(randm(4,1));\n            vect2.push_back(randm(4,1));\n\n            matrix<double> K;\n\n            K.set_size(vect1.size(), vect2.size());\n            for (long r = 0; r < K.nr(); ++r)\n            {\n                for (long c = 0; c < K.nc(); ++c)\n                {\n                    K(r,c) = kern(vect1[r], vect2[c]);\n                }\n            }\n            DLIB_TEST(equal(K, kernel_matrix(kern, vect1, vect2)));\n            DLIB_TEST(equal(K, kernel_matrix(kern, mat(vect1), mat(vect2))));\n\n\n            K.set_size(vect2.size(), vect1.size());\n            for (long r = 0; r < K.nr(); ++r)\n            {\n                for (long c = 0; c < K.nc(); ++c)\n                {\n                    K(r,c) = kern(vect2[r], vect1[c]);\n                }\n            }\n            DLIB_TEST(equal(K, kernel_matrix(kern, vect2, vect1)));\n            DLIB_TEST(equal(K, tmp(kernel_matrix(kern, vect2, vect1))));\n            DLIB_TEST(equal(K, kernel_matrix(kern, mat(vect2), mat(vect1))));\n\n\n            K.set_size(vect1.size(), vect1.size());\n            for (long r = 0; r < K.nr(); ++r)\n            {\n                for (long c = 0; c < K.nc(); ++c)\n                {\n                    K(r,c) = kern(vect1[r], vect1[c]);\n                }\n            }\n            DLIB_TEST(equal(K, kernel_matrix(kern, vect1, vect1)));\n            DLIB_TEST(equal(K, tmp(kernel_matrix(kern, vect1, vect1))));\n            DLIB_TEST(equal(K, kernel_matrix(kern, vect1)));\n            DLIB_TEST(equal(K, tmp(kernel_matrix(kern, vect1))));\n            DLIB_TEST(equal(K, kernel_matrix(kern, mat(vect1), mat(vect1))));\n            DLIB_TEST(equal(K, tmp(kernel_matrix(kern, mat(vect1), mat(vect1)))));\n            DLIB_TEST(equal(K, kernel_matrix(kern, mat(vect1))));\n            DLIB_TEST(equal(K, tmp(kernel_matrix(kern, mat(vect1)))));\n\n\n            K.set_size(vect1.size(),1);\n            for (long r = 0; r < K.nr(); ++r)\n            {\n                for (long c = 0; c < K.nc(); ++c)\n                {\n                    K(r,c) = kern(vect1[r], samp);\n                }\n            }\n            DLIB_TEST(equal(K, kernel_matrix(kern, vect1, samp)));\n            DLIB_TEST(equal(K, kernel_matrix(kern, mat(vect1), samp)));\n\n\n            K.set_size(1, vect1.size());\n            for (long r = 0; r < K.nr(); ++r)\n            {\n                for (long c = 0; c < K.nc(); ++c)\n                {\n                    K(r,c) = kern(samp, vect1[c]);\n                }\n            }\n            DLIB_TEST(equal(K, kernel_matrix(kern, samp, vect1)));\n            DLIB_TEST(equal(K, kernel_matrix(kern, samp, mat(vect1))));\n            DLIB_TEST(equal(K, tmp(kernel_matrix(kern, samp, vect1))));\n            DLIB_TEST(equal(K, tmp(kernel_matrix(kern, samp, mat(vect1)))));\n\n\n\n            samp2 = samp;\n            samp3 = samp;\n\n            // test the alias detection\n            samp2 = kernel_matrix(kern, vect1, samp2);\n            DLIB_TEST(equal(samp2, kernel_matrix(kern, vect1, samp)));\n\n            samp3 = trans(kernel_matrix(kern, samp3, vect2));\n            DLIB_TEST(equal(samp3, trans(kernel_matrix(kern, samp, vect2))));\n\n\n            samp2 += kernel_matrix(kern, vect1, samp);\n            DLIB_TEST(equal(samp2, 2*kernel_matrix(kern, vect1, samp)));\n\n            samp3 += trans(kernel_matrix(kern, samp, vect2));\n            DLIB_TEST(equal(samp3, 2*trans(kernel_matrix(kern, samp, vect2))));\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    kernel_matrix_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/kmeans.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/svm.h>\n#include <dlib/matrix.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.kmeans\");\n\n    dlib::rand rnd;\n\n    template <typename sample_type>\n    void run_test(\n        const std::vector<sample_type>& seed_centers\n    )\n    {\n        print_spinner();\n\n\n        sample_type samp;\n\n        std::vector<sample_type> samples;\n\n\n        for (unsigned long j = 0; j < seed_centers.size(); ++j)\n        {\n            for (int i = 0; i < 250; ++i)\n            {\n                samp = randm(seed_centers[0].size(),1,rnd) - 0.5;\n                samples.push_back(samp + seed_centers[j]);\n            }\n        }\n\n        randomize_samples(samples);\n\n        std::vector<sample_type> centers;\n        pick_initial_centers(seed_centers.size(), centers, samples, linear_kernel<sample_type>());\n\n        find_clusters_using_kmeans(samples, centers);\n\n        DLIB_TEST(centers.size() == seed_centers.size());\n\n        std::vector<int> hits(centers.size(),0);\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            unsigned long best_idx = 0;\n            double best_dist = 1e100;\n            for (unsigned long j = 0; j < centers.size(); ++j)\n            {\n                if (length(samples[i] - centers[j]) < best_dist)\n                {\n                    best_dist = length(samples[i] - centers[j]);\n                    best_idx = j;\n                }\n            }\n            hits[best_idx]++;\n        }\n\n        for (unsigned long i = 0; i < hits.size(); ++i)\n        {\n            DLIB_TEST(hits[i] == 250);\n        }\n    }\n\n\n    class test_kmeans : public tester\n    {\n    public:\n        test_kmeans (\n        ) :\n            tester (\"test_kmeans\",\n                    \"Runs tests on the find_clusters_using_kmeans() function.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            {\n                dlog << LINFO << \"test dlib::vector<double,2>\";\n                typedef dlib::vector<double,2> sample_type;\n                std::vector<sample_type> seed_centers;\n                seed_centers.push_back(sample_type(10,10));\n                seed_centers.push_back(sample_type(10,-10));\n                seed_centers.push_back(sample_type(-10,10));\n                seed_centers.push_back(sample_type(-10,-10));\n\n                run_test(seed_centers);\n            }\n            {\n                dlog << LINFO << \"test dlib::vector<double,2>\";\n                typedef dlib::vector<float,2> sample_type;\n                std::vector<sample_type> seed_centers;\n                seed_centers.push_back(sample_type(10,10));\n                seed_centers.push_back(sample_type(10,-10));\n                seed_centers.push_back(sample_type(-10,10));\n                seed_centers.push_back(sample_type(-10,-10));\n\n                run_test(seed_centers);\n            }\n            {\n                dlog << LINFO << \"test dlib::matrix<double,3,1>\";\n                typedef dlib::matrix<double,3,1> sample_type;\n                std::vector<sample_type> seed_centers;\n                sample_type samp;\n                samp = 10,10,0; seed_centers.push_back(samp);\n                samp = -10,10,1; seed_centers.push_back(samp);\n                samp = -10,-10,2; seed_centers.push_back(samp);\n\n                run_test(seed_centers);\n            }\n\n\n        }\n    } a;\n\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/learning_to_track.cpp",
    "content": "// Copyright (C) 2014  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n#include <dlib/rand.h>\n\n\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.learning_to_track\");\n\n// ----------------------------------------------------------------------------------------\n\n    struct detection_dense\n    {\n        typedef struct track_dense track_type;\n        matrix<double,0,1> measurements;\n    };\n\n\n    struct track_dense\n    {\n        typedef matrix<double,0,1> feature_vector_type;\n\n        track_dense()\n        {\n            time_since_last_association = 0;\n        }\n\n        void get_similarity_features(const detection_dense det, feature_vector_type& feats) const\n        {\n            feats = abs(last_measurements - det.measurements);\n        }\n\n        void update_track(const detection_dense det)\n        {\n            last_measurements = det.measurements;\n            time_since_last_association = 0;\n        }\n\n        void propagate_track()\n        {\n            ++time_since_last_association;\n        }\n\n        matrix<double,0,1> last_measurements;\n        unsigned long time_since_last_association;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    struct detection_sparse\n    {\n        typedef struct track_sparse track_type;\n        matrix<double,0,1> measurements;\n    };\n\n\n    struct track_sparse\n    {\n        typedef std::vector<std::pair<unsigned long,double> > feature_vector_type;\n\n        track_sparse()\n        {\n            time_since_last_association = 0;\n        }\n\n        void get_similarity_features(const detection_sparse det, feature_vector_type& feats) const\n        {\n            matrix<double,0,1> temp = abs(last_measurements - det.measurements);\n            feats.clear();\n            for (long i = 0; i < temp.size(); ++i)\n                feats.push_back(make_pair(i, temp(i)));\n        }\n\n        void update_track(const detection_sparse det)\n        {\n            last_measurements = det.measurements;\n            time_since_last_association = 0;\n        }\n\n        void propagate_track()\n        {\n            ++time_since_last_association;\n        }\n\n        matrix<double,0,1> last_measurements;\n        unsigned long time_since_last_association;\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    dlib::rand rnd;\n    const long num_objects = 4;\n    const long num_properties = 6;\n    std::vector<matrix<double,0,1> > object_properties(num_objects);\n\n    void initialize_object_properties()\n    {\n        rnd.set_seed(\"23ja2oirfjaf\");\n        for (unsigned long i = 0; i < object_properties.size(); ++i)\n            object_properties[i] = randm(num_properties,1,rnd);\n    }\n\n    template <typename detection>\n    detection sample_detection_from_sensor(long object_id)\n    {\n        DLIB_CASSERT(object_id < num_objects, \n            \"You can't ask to sample a detection from an object that doesn't exist.\"); \n        detection temp;\n        // Set the measurements equal to the object's true property values plus a little bit of\n        // noise.\n        temp.measurements = object_properties[object_id] + randm(num_properties,1,rnd)*0.1;\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    template <typename detection>\n    std::vector<std::vector<labeled_detection<detection> > > make_random_tracking_data_for_training()\n    {\n        typedef std::vector<labeled_detection<detection> > detections_at_single_time_step;\n        typedef std::vector<detections_at_single_time_step> track_history;\n\n        track_history data;\n\n        // At each time step we get a set of detections from the objects in the world.\n        // Simulate 100 time steps worth of data where there are 3 objects present. \n        const int num_time_steps = 100;\n        for (int i = 0; i < num_time_steps; ++i)\n        {\n            detections_at_single_time_step dets(3);\n            // sample a detection from object 0\n            dets[0].det = sample_detection_from_sensor<detection>(0);\n            dets[0].label = 0;\n\n            // sample a detection from object 1\n            dets[1].det = sample_detection_from_sensor<detection>(1);\n            dets[1].label = 1;\n\n            // sample a detection from object 2\n            dets[2].det = sample_detection_from_sensor<detection>(2);\n            dets[2].label = 2;\n\n            randomize_samples(dets, rnd);\n            data.push_back(dets);\n        }\n\n        // Now let's imagine object 1 and 2 are gone but a new object, object 3 has arrived.  \n        for (int i = 0; i < num_time_steps; ++i)\n        {\n            detections_at_single_time_step dets(2);\n            // sample a detection from object 0\n            dets[0].det = sample_detection_from_sensor<detection>(0);\n            dets[0].label = 0;\n\n            // sample a detection from object 3\n            dets[1].det = sample_detection_from_sensor<detection>(3);\n            dets[1].label = 3;\n\n            randomize_samples(dets, rnd);\n            data.push_back(dets);\n        }\n\n        return data;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename detection>\n    std::vector<detection> make_random_detections(long num_dets)\n    {\n        DLIB_CASSERT(num_dets <= num_objects, \n            \"You can't ask for more detections than there are objects in our little simulation.\"); \n\n        std::vector<detection> dets(num_dets);\n        for (unsigned long i = 0; i < dets.size(); ++i)\n        {\n            dets[i] = sample_detection_from_sensor<detection>(i);\n        }\n        randomize_samples(dets, rnd);\n        return dets;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename detection>\n    void test_tracking_stuff()\n    {\n        print_spinner();\n\n\n        typedef std::vector<labeled_detection<detection> > detections_at_single_time_step;\n        typedef std::vector<detections_at_single_time_step> track_history;\n        std::vector<track_history> data;\n        data.push_back(make_random_tracking_data_for_training<detection>());\n        data.push_back(make_random_tracking_data_for_training<detection>());\n        data.push_back(make_random_tracking_data_for_training<detection>());\n        data.push_back(make_random_tracking_data_for_training<detection>());\n        data.push_back(make_random_tracking_data_for_training<detection>());\n\n\n        structural_track_association_trainer trainer;\n        trainer.set_c(1000);\n        track_association_function<detection> assoc = trainer.train(data);\n\n        double test_val = test_track_association_function(assoc, data); \n        DLIB_TEST_MSG( test_val == 1, test_val);\n        test_val = cross_validate_track_association_trainer(trainer, data, 5); \n        DLIB_TEST_MSG ( test_val == 1, test_val);\n\n\n\n        typedef typename detection::track_type track;\n        std::vector<track> tracks;\n\n        std::vector<detection> dets = make_random_detections<detection>(3);\n        assoc(tracks, dets);\n        DLIB_TEST(tracks.size() == 3);\n\n        dets = make_random_detections<detection>(3);\n        assoc(tracks, dets);\n        DLIB_TEST(tracks.size() == 3);\n\n        dets = make_random_detections<detection>(3);\n        assoc(tracks, dets);\n        DLIB_TEST(tracks.size() == 3);\n\n        dets = make_random_detections<detection>(4);\n        assoc(tracks, dets);\n        DLIB_TEST(tracks.size() == 4);\n\n        dets = make_random_detections<detection>(3);\n        assoc(tracks, dets);\n        DLIB_TEST(tracks.size() == 4);\n        unsigned long total_miss = 0;\n        for (unsigned long i = 0; i < tracks.size(); ++i)\n            total_miss += tracks[i].time_since_last_association;\n        DLIB_TEST(total_miss == 1);\n\n        dets = make_random_detections<detection>(3);\n        assoc(tracks, dets);\n        DLIB_TEST(tracks.size() == 4);\n        total_miss = 0;\n        unsigned long num_zero = 0;\n        for (unsigned long i = 0; i < tracks.size(); ++i)\n        {\n            total_miss += tracks[i].time_since_last_association;\n            if (tracks[i].time_since_last_association == 0)\n                ++num_zero;\n        }\n        DLIB_TEST(total_miss == 2);\n        DLIB_TEST(num_zero == 3);\n\n\n\n        ostringstream sout; \n        serialize(assoc, sout);\n\n        istringstream sin(sout.str());\n        deserialize(assoc, sin);\n        DLIB_TEST( test_track_association_function(assoc, data) == 1);\n    }\n\n\n// ----------------------------------------------------------------------------------------\n\n    class test_learning_to_track : public tester\n    {\n    public:\n        test_learning_to_track (\n        ) :\n            tester (\"test_learning_to_track\",\n                \"Runs tests on the assignment learning code.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            initialize_object_properties();\n            for (int i = 0; i < 3; ++i)\n            {\n                dlog << LINFO << \"run test_tracking_stuff<detection_dense>()\";\n                test_tracking_stuff<detection_dense>();\n                dlog << LINFO << \"run test_tracking_stuff<detection_sparse>()\";\n                test_tracking_stuff<detection_sparse>();\n            }\n        }\n    } a;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/least_squares.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/optimization.h>\n#include \"optimization_test_functions.h\"\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../rand.h\"\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    using namespace dlib::test_functions;\n\n    logger dlog(\"test.least_squares\");\n\n// ----------------------------------------------------------------------------------------\n\n    void test_with_chebyquad()\n    {\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(2);\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"chebyquad 2 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"chebyquad 2 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"chebyquad 2 error: \" << length(ch - chebyquad_solution(2));\n\n            DLIB_TEST(length(ch - chebyquad_solution(2)) < 1e-5);\n\n        }\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(2);\n\n            solve_least_squares_lm(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"LM chebyquad 2 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"LM chebyquad 2 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"LM chebyquad 2 error: \" << length(ch - chebyquad_solution(2));\n\n            DLIB_TEST(length(ch - chebyquad_solution(2)) < 1e-5);\n\n        }\n\n        print_spinner();\n        {\n            matrix<double,2,1> ch;\n\n            ch = chebyquad_start(2);\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"chebyquad 2 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"chebyquad 2 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"chebyquad 2 error: \" << length(ch - chebyquad_solution(2));\n\n            DLIB_TEST(length(ch - chebyquad_solution(2)) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<double,2,1> ch;\n\n            ch = chebyquad_start(2);\n\n            solve_least_squares_lm(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"LM chebyquad 2 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"LM chebyquad 2 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"LM chebyquad 2 error: \" << length(ch - chebyquad_solution(2));\n\n            DLIB_TEST(length(ch - chebyquad_solution(2)) < 1e-5);\n\n        }\n\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(4);\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"chebyquad 4 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"chebyquad 4 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"chebyquad 4 error: \" << length(ch - chebyquad_solution(4));\n\n            DLIB_TEST(length(ch - chebyquad_solution(4)) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(4);\n\n            solve_least_squares_lm(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"LM chebyquad 4 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"LM chebyquad 4 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"LM chebyquad 4 error: \" << length(ch - chebyquad_solution(4));\n\n            DLIB_TEST(length(ch - chebyquad_solution(4)) < 1e-5);\n\n        }\n\n\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(6);\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"chebyquad 6 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"chebyquad 6 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"chebyquad 6 error: \" << length(ch - chebyquad_solution(6));\n\n            // the ch variable contains a permutation of what is in chebyquad_solution(6).\n            // Apparently there is more than one minimum?.  Just check that the objective \n            // goes to zero.\n            DLIB_TEST(chebyquad(ch) < 1e-10);\n\n        }\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(6);\n\n            solve_least_squares_lm(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"LM chebyquad 6 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"LM chebyquad 6 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"LM chebyquad 6 error: \" << length(ch - chebyquad_solution(6));\n\n            DLIB_TEST(chebyquad(ch) < 1e-10);\n\n        }\n\n\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(8);\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"chebyquad 8 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"chebyquad 8 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"chebyquad 8 error: \" << length(ch - chebyquad_solution(8));\n\n            DLIB_TEST(length(ch - chebyquad_solution(8)) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(8);\n\n            solve_least_squares_lm(objective_delta_stop_strategy(1e-13, 80),\n                                chebyquad_residual,\n                                derivative(chebyquad_residual),\n                                range(0,ch.size()-1),\n                                ch);\n\n            dlog << LINFO << \"LM chebyquad 8 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"LM chebyquad 8 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"LM chebyquad 8 error: \" << length(ch - chebyquad_solution(8));\n\n            DLIB_TEST(length(ch - chebyquad_solution(8)) < 1e-5);\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_with_brown()\n    {\n        print_spinner();\n        {\n            matrix<double,4,1> ch;\n\n            ch = brown_start();\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 300),\n                                brown_residual,\n                                derivative(brown_residual),\n                                range(1,20),\n                                ch);\n\n            dlog << LINFO << \"brown obj: \" << brown(ch);\n            dlog << LINFO << \"brown der: \" << length(brown_derivative(ch));\n            dlog << LINFO << \"brown error: \" << length(ch - brown_solution());\n\n            DLIB_TEST_MSG(length(ch - brown_solution()) < 1e-5,length(ch - brown_solution()) );\n\n        }\n        print_spinner();\n        {\n            matrix<double,4,1> ch;\n\n            ch = brown_start();\n\n            solve_least_squares_lm(objective_delta_stop_strategy(1e-13, 80),\n                                brown_residual,\n                                derivative(brown_residual),\n                                range(1,20),\n                                ch);\n\n            dlog << LINFO << \"LM brown obj: \" << brown(ch);\n            dlog << LINFO << \"LM brown der: \" << length(brown_derivative(ch));\n            dlog << LINFO << \"LM brown error: \" << length(ch - brown_solution());\n\n            DLIB_TEST(length(ch - brown_solution()) < 1e-5);\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// These functions are declared here because wrapping the real rosen functions in this\n// way avoids triggering a bug in visual studio 2005 which prevents this code from compiling.\n    double rosen_residual_double (int i, const matrix<double,2,1>& m)\n    { return rosen_residual(i,m); }\n    float rosen_residual_float (int i, const matrix<float,2,1>& m)\n    { return rosen_residual(i,m); }\n\n    matrix<double,2,1> rosen_residual_derivative_double (int i, const matrix<double,2,1>& m)\n    { return rosen_residual_derivative(i,m); }\n    matrix<float,2,1> rosen_residual_derivative_float (int i, const matrix<float,2,1>& m)\n    { return rosen_residual_derivative(i,m); }\n\n    double rosen_big_residual_double (int i, const matrix<double,2,1>& m)\n    { return rosen_big_residual(i,m); }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_with_rosen()\n    {\n\n        print_spinner();\n        {\n            matrix<double,2,1> ch;\n\n            ch = rosen_start<double>();\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 80),\n                                rosen_residual_double,\n                                rosen_residual_derivative_double,\n                                range(1,20),\n                                ch);\n\n            dlog << LINFO << \"rosen obj: \" << rosen(ch);\n            dlog << LINFO << \"rosen error: \" << length(ch - rosen_solution<double>());\n\n            DLIB_TEST(length(ch - rosen_solution<double>()) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<double,2,1> ch;\n\n            ch = rosen_start<double>();\n\n            solve_least_squares_lm(objective_delta_stop_strategy(1e-13, 80),\n                                rosen_residual_double,\n                                rosen_residual_derivative_double,\n                                range(1,20),\n                                ch);\n\n            dlog << LINFO << \"lm rosen obj: \" << rosen(ch);\n            dlog << LINFO << \"lm rosen error: \" << length(ch - rosen_solution<double>());\n\n            DLIB_TEST(length(ch - rosen_solution<double>()) < 1e-5);\n\n        }\n\n\n\n        print_spinner();\n        {\n            matrix<double,2,1> ch;\n\n            ch = rosen_start<double>();\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 80),\n                                rosen_residual_double,\n                                derivative(rosen_residual_double),\n                                range(1,20),\n                                ch);\n\n            dlog << LINFO << \"rosen obj: \" << rosen(ch);\n            dlog << LINFO << \"rosen error: \" << length(ch - rosen_solution<double>());\n\n            DLIB_TEST(length(ch - rosen_solution<double>()) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<float,2,1> ch;\n\n            ch = rosen_start<float>();\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 80),\n                                rosen_residual_float,\n                                derivative(rosen_residual_float),\n                                range(1,20),\n                                ch);\n\n            dlog << LINFO << \"float rosen obj: \" << rosen(ch);\n            dlog << LINFO << \"float rosen error: \" << length(ch - rosen_solution<float>());\n\n            DLIB_TEST(length(ch - rosen_solution<float>()) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<float,2,1> ch;\n\n            ch = rosen_start<float>();\n\n            solve_least_squares_lm(objective_delta_stop_strategy(1e-13, 80),\n                                rosen_residual_float,\n                                derivative(rosen_residual_float),\n                                range(1,20),\n                                ch);\n\n            dlog << LINFO << \"LM float rosen obj: \" << rosen(ch);\n            dlog << LINFO << \"LM float rosen error: \" << length(ch - rosen_solution<float>());\n\n            DLIB_TEST(length(ch - rosen_solution<float>()) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<double,2,1> ch;\n\n            ch = rosen_start<double>();\n\n            solve_least_squares_lm(objective_delta_stop_strategy(1e-13, 80),\n                                rosen_residual_double,\n                                derivative(rosen_residual_double),\n                                range(1,20),\n                                ch);\n\n            dlog << LINFO << \"LM rosen obj: \" << rosen(ch);\n            dlog << LINFO << \"LM rosen error: \" << length(ch - rosen_solution<double>());\n\n            DLIB_TEST(length(ch - rosen_solution<double>()) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<double,2,1> ch;\n\n            ch = rosen_big_start<double>();\n\n            solve_least_squares(objective_delta_stop_strategy(1e-13, 80),\n                                rosen_big_residual_double,\n                                derivative(rosen_big_residual_double),\n                                range(1,2),\n                                ch);\n\n            dlog << LINFO << \"rosen big obj: \" << rosen_big(ch);\n            dlog << LINFO << \"rosen big error: \" << length(ch - rosen_big_solution<double>());\n\n            DLIB_TEST(length(ch - rosen_big_solution<double>()) < 1e-5);\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class optimization_tester : public tester\n    {\n    public:\n        optimization_tester (\n        ) :\n            tester (\"test_least_squares\",\n                    \"Runs tests on the least squares optimization component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_with_chebyquad();\n            test_with_brown();\n            test_with_rosen();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/linear_manifold_regularizer.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/manifold_regularization.h>\n#include <dlib/svm.h>\n#include <dlib/rand.h>\n#include <dlib/string.h>\n#include <dlib/graph_utils_threaded.h>\n#include <vector>\n#include <sstream>\n#include <ctime>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.linear_manifold_regularizer\");\n\n    template <typename hash_type, typename samples_type>\n    void test_find_k_nearest_neighbors_lsh(\n        const samples_type& samples\n    )\n    {\n        std::vector<sample_pair> edges1, edges2;\n\n        find_k_nearest_neighbors(samples, cosine_distance(), 2, edges1);\n        find_k_nearest_neighbors_lsh(samples, cosine_distance(), hash_type(), 2, 6, edges2, 2);\n\n        std::sort(edges1.begin(), edges1.end(), order_by_index<sample_pair>);\n        std::sort(edges2.begin(), edges2.end(), order_by_index<sample_pair>);\n\n        DLIB_TEST_MSG(edges1.size() == edges2.size(), edges1.size() << \"    \" << edges2.size());\n        for (unsigned long i = 0; i < edges1.size(); ++i)\n        {\n            DLIB_TEST(edges1[i] == edges2[i]);\n            DLIB_TEST_MSG(std::abs(edges1[i].distance() - edges2[i].distance()) < 1e-7,\n                edges1[i].distance() - edges2[i].distance());\n        }\n    }\n\n    template <typename scalar_type>\n    void test_knn_lsh_sparse()\n    {\n        dlib::rand rnd;\n        std::vector<std::map<unsigned long,scalar_type> > samples;\n        samples.resize(20);\n        for (unsigned int i = 0; i < samples.size(); ++i)\n        {\n            samples[i][0] = rnd.get_random_gaussian();\n            samples[i][2] = rnd.get_random_gaussian();\n        }\n\n        test_find_k_nearest_neighbors_lsh<hash_similar_angles_64>(samples);\n        test_find_k_nearest_neighbors_lsh<hash_similar_angles_128>(samples);\n        test_find_k_nearest_neighbors_lsh<hash_similar_angles_256>(samples);\n        test_find_k_nearest_neighbors_lsh<hash_similar_angles_512>(samples);\n    }\n\n    template <typename scalar_type>\n    void test_knn_lsh_dense()\n    {\n        dlib::rand rnd;\n        std::vector<matrix<scalar_type,0,1> > samples;\n        samples.resize(20);\n        for (unsigned int i = 0; i < samples.size(); ++i)\n        {\n            samples[i].set_size(2);\n            samples[i](0) = rnd.get_random_gaussian();\n            samples[i](1) = rnd.get_random_gaussian();\n        }\n\n        test_find_k_nearest_neighbors_lsh<hash_similar_angles_64>(samples);\n        test_find_k_nearest_neighbors_lsh<hash_similar_angles_128>(samples);\n        test_find_k_nearest_neighbors_lsh<hash_similar_angles_256>(samples);\n        test_find_k_nearest_neighbors_lsh<hash_similar_angles_512>(samples);\n    }\n\n\n\n    class linear_manifold_regularizer_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        linear_manifold_regularizer_tester (\n        ) :\n            tester (\n                \"test_linear_manifold_regularizer\",       // the command line argument name for this test\n                \"Run tests on the linear_manifold_regularizer object.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n            seed = 1;\n        }\n\n        dlib::rand rnd;\n\n        unsigned long seed;\n\n        typedef matrix<double, 0, 1> sample_type;\n        typedef radial_basis_kernel<sample_type> kernel_type;\n\n        void do_the_test()\n        {\n            print_spinner();\n            std::vector<sample_type> samples;\n\n            // Declare an instance of the kernel we will be using.  \n            const kernel_type kern(0.1);\n\n            const unsigned long num_points = 200;\n\n            // create a large dataset with two concentric circles.  \n            generate_circle(samples, 1, num_points);  // circle of radius 1\n            generate_circle(samples, 5, num_points);  // circle of radius 5\n\n            std::vector<sample_pair> edges;\n            find_percent_shortest_edges_randomly(samples, squared_euclidean_distance(0.1, 4), 1, 10000, \"random seed\", edges);\n\n            dlog << LTRACE << \"number of edges generated: \" << edges.size();\n\n            empirical_kernel_map<kernel_type> ekm;\n\n            ekm.load(kern, randomly_subsample(samples, 100));\n\n            // Project all the samples into the span of our 50 basis samples\n            for (unsigned long i = 0; i < samples.size(); ++i)\n                samples[i] = ekm.project(samples[i]);\n\n\n            // Now create the manifold regularizer.   The result is a transformation matrix that\n            // embodies the manifold assumption discussed above. \n            linear_manifold_regularizer<sample_type> lmr;\n            lmr.build(samples, edges, use_gaussian_weights(0.1));\n            matrix<double> T = lmr.get_transformation_matrix(10000);\n\n            print_spinner();\n\n            // generate the T matrix manually and make sure it matches.  The point of this test\n            // is to make sure that the more complex version of this that happens inside the linear_manifold_regularizer\n            // is correct.  It uses a tedious block of loops to do it in a way that is a lot faster for sparse\n            // W matrices but isn't super straight forward.  \n            matrix<double> X(samples[0].size(), samples.size());\n            for (unsigned long i = 0; i < samples.size(); ++i)\n                set_colm(X,i) = samples[i];\n\n            matrix<double> W(samples.size(), samples.size());\n            W = 0;\n            for (unsigned long i = 0; i < edges.size(); ++i)\n            {\n                W(edges[i].index1(), edges[i].index2()) = use_gaussian_weights(0.1)(edges[i]);\n                W(edges[i].index2(), edges[i].index1()) = use_gaussian_weights(0.1)(edges[i]);\n            }\n            matrix<double> L = diagm(sum_rows(W)) - W;\n            matrix<double> trueT = inv_lower_triangular(chol(identity_matrix<double>(X.nr()) + (10000.0/sum(lowerm(W)))*X*L*trans(X)));\n\n            dlog << LTRACE << \"T error: \"<< max(abs(T - trueT));\n            DLIB_TEST(max(abs(T - trueT)) < 1e-7);\n\n\n            print_spinner();\n            // Apply the transformation generated by the linear_manifold_regularizer to \n            // all our samples.\n            for (unsigned long i = 0; i < samples.size(); ++i)\n                samples[i] = T*samples[i];\n\n\n            // For convenience, generate a projection_function and merge the transformation\n            // matrix T into it.  \n            projection_function<kernel_type> proj = ekm.get_projection_function();\n            proj.weights = T*proj.weights;\n\n\n            // Pick 2 different labeled points.  One on the inner circle and another on the outer.  \n            // For each of these test points we will see if using the single plane that separates\n            // them is a good way to separate the concentric circles.  Also do this a bunch \n            // of times with different randomly chosen points so we can see how robust the result is.\n            for (int itr = 0; itr < 10; ++itr)\n            {\n                print_spinner();\n                std::vector<sample_type> test_points;\n                // generate a random point from the radius 1 circle\n                generate_circle(test_points, 1, 1);\n                // generate a random point from the radius 5 circle\n                generate_circle(test_points, 5, 1);\n\n                // project the two test points into kernel space.  Recall that this projection_function\n                // has the manifold regularizer incorporated into it.  \n                const sample_type class1_point = proj(test_points[0]);\n                const sample_type class2_point = proj(test_points[1]);\n\n                double num_wrong = 0;\n\n                // Now attempt to classify all the data samples according to which point\n                // they are closest to.  The output of this program shows that without manifold \n                // regularization this test will fail but with it it will perfectly classify\n                // all the points.\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                {\n                    double distance_to_class1 = length(samples[i] - class1_point);\n                    double distance_to_class2 = length(samples[i] - class2_point);\n\n                    bool predicted_as_class_1 = (distance_to_class1 < distance_to_class2);\n\n                    bool really_is_class_1 = (i < num_points);\n\n                    // now count how many times we make a mistake\n                    if (predicted_as_class_1 != really_is_class_1)\n                        ++num_wrong;\n                }\n\n                DLIB_TEST_MSG(num_wrong == 0, num_wrong);\n            }\n\n        }\n\n        void generate_circle (\n            std::vector<sample_type>& samples,\n            double radius,\n            const long num\n        )\n        {\n            sample_type m(2,1);\n\n            for (long i = 0; i < num; ++i)\n            {\n                double sign = 1;\n                if (rnd.get_random_double() < 0.5)\n                    sign = -1;\n                m(0) = 2*radius*rnd.get_random_double()-radius;\n                m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n                samples.push_back(m);\n            }\n        }\n\n\n        void test_knn1()\n        {\n            std::vector<matrix<double,2,1> > samples;\n\n            matrix<double,2,1> test;\n            \n            test = 0,0;  samples.push_back(test);\n            test = 1,1;  samples.push_back(test);\n            test = 1,-1;  samples.push_back(test);\n            test = -1,1;  samples.push_back(test);\n            test = -1,-1;  samples.push_back(test);\n\n            std::vector<sample_pair> edges;\n            find_k_nearest_neighbors(samples, squared_euclidean_distance(), 1, edges);\n            DLIB_TEST(edges.size() == 4);\n\n            std::sort(edges.begin(), edges.end(), &order_by_index<sample_pair>);\n\n            DLIB_TEST(edges[0] == sample_pair(0,1,0));\n            DLIB_TEST(edges[1] == sample_pair(0,2,0));\n            DLIB_TEST(edges[2] == sample_pair(0,3,0));\n            DLIB_TEST(edges[3] == sample_pair(0,4,0));\n\n            find_k_nearest_neighbors(samples, squared_euclidean_distance(), 3, edges);\n            DLIB_TEST(edges.size() == 8);\n\n            find_k_nearest_neighbors(samples, squared_euclidean_distance(3.9, 4.1), 3, edges);\n            DLIB_TEST(edges.size() == 4);\n\n            std::sort(edges.begin(), edges.end(), &order_by_index<sample_pair>);\n\n            DLIB_TEST(edges[0] == sample_pair(1,2,0));\n            DLIB_TEST(edges[1] == sample_pair(1,3,0));\n            DLIB_TEST(edges[2] == sample_pair(2,4,0));\n            DLIB_TEST(edges[3] == sample_pair(3,4,0));\n\n            find_k_nearest_neighbors(samples, squared_euclidean_distance(30000, 4.1), 3, edges);\n            DLIB_TEST(edges.size() == 0);\n        }\n\n        void test_knn1_approx()\n        {\n            std::vector<matrix<double,2,1> > samples;\n\n            matrix<double,2,1> test;\n            \n            test = 0,0;  samples.push_back(test);\n            test = 1,1;  samples.push_back(test);\n            test = 1,-1;  samples.push_back(test);\n            test = -1,1;  samples.push_back(test);\n            test = -1,-1;  samples.push_back(test);\n\n            std::vector<sample_pair> edges;\n            find_approximate_k_nearest_neighbors(samples, squared_euclidean_distance(), 1, 10000, seed, edges);\n            DLIB_TEST(edges.size() == 4);\n\n            std::sort(edges.begin(), edges.end(), &order_by_index<sample_pair>);\n\n            DLIB_TEST(edges[0] == sample_pair(0,1,0));\n            DLIB_TEST(edges[1] == sample_pair(0,2,0));\n            DLIB_TEST(edges[2] == sample_pair(0,3,0));\n            DLIB_TEST(edges[3] == sample_pair(0,4,0));\n\n            find_approximate_k_nearest_neighbors(samples, squared_euclidean_distance(), 3, 10000, seed, edges);\n            DLIB_TEST(edges.size() == 8);\n\n            find_approximate_k_nearest_neighbors(samples, squared_euclidean_distance(3.9, 4.1), 3, 10000, seed, edges);\n            DLIB_TEST(edges.size() == 4);\n\n            std::sort(edges.begin(), edges.end(), &order_by_index<sample_pair>);\n\n            DLIB_TEST(edges[0] == sample_pair(1,2,0));\n            DLIB_TEST(edges[1] == sample_pair(1,3,0));\n            DLIB_TEST(edges[2] == sample_pair(2,4,0));\n            DLIB_TEST(edges[3] == sample_pair(3,4,0));\n\n            find_approximate_k_nearest_neighbors(samples, squared_euclidean_distance(30000, 4.1), 3, 10000, seed, edges);\n            DLIB_TEST(edges.size() == 0);\n        }\n\n        void test_knn2()\n        {\n            std::vector<matrix<double,2,1> > samples;\n\n            matrix<double,2,1> test;\n            \n            test = 1,1;  samples.push_back(test);\n            test = 1,-1;  samples.push_back(test);\n            test = -1,1;  samples.push_back(test);\n            test = -1,-1;  samples.push_back(test);\n\n            std::vector<sample_pair> edges;\n            find_k_nearest_neighbors(samples, squared_euclidean_distance(), 2, edges);\n            DLIB_TEST(edges.size() == 4);\n\n            std::sort(edges.begin(), edges.end(), &order_by_index<sample_pair>);\n\n            DLIB_TEST(edges[0] == sample_pair(0,1,0));\n            DLIB_TEST(edges[1] == sample_pair(0,2,0));\n            DLIB_TEST(edges[2] == sample_pair(1,3,0));\n            DLIB_TEST(edges[3] == sample_pair(2,3,0));\n\n            find_k_nearest_neighbors(samples, squared_euclidean_distance(), 200, edges);\n            DLIB_TEST(edges.size() == 4*3/2);\n        }\n\n        void test_knn2_approx()\n        {\n            std::vector<matrix<double,2,1> > samples;\n\n            matrix<double,2,1> test;\n            \n            test = 1,1;  samples.push_back(test);\n            test = 1,-1;  samples.push_back(test);\n            test = -1,1;  samples.push_back(test);\n            test = -1,-1;  samples.push_back(test);\n\n            std::vector<sample_pair> edges;\n            // For this simple graph and high number of samples we will do we should obtain the exact \n            // knn solution.\n            find_approximate_k_nearest_neighbors(samples, squared_euclidean_distance(), 2, 10000, seed,  edges);\n            DLIB_TEST(edges.size() == 4);\n\n            std::sort(edges.begin(), edges.end(), &order_by_index<sample_pair>);\n\n            DLIB_TEST(edges[0] == sample_pair(0,1,0));\n            DLIB_TEST(edges[1] == sample_pair(0,2,0));\n            DLIB_TEST(edges[2] == sample_pair(1,3,0));\n            DLIB_TEST(edges[3] == sample_pair(2,3,0));\n\n\n            find_approximate_k_nearest_neighbors(samples, squared_euclidean_distance(), 200, 10000, seed,  edges);\n            DLIB_TEST(edges.size() == 4*3/2);\n        }\n\n        void perform_test (\n        )\n        {\n            for (int i = 0; i < 5; ++i)\n            {\n                do_the_test();\n\n                ++seed;\n                test_knn1_approx();\n                test_knn2_approx();\n            }\n            test_knn1();\n            test_knn2();\n            test_knn_lsh_sparse<double>();\n            test_knn_lsh_sparse<float>();\n            test_knn_lsh_dense<double>();\n            test_knn_lsh_dense<float>();\n\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    linear_manifold_regularizer_tester a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/lz77_buffer.cpp",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <ctime>\n#include <cstdlib>\n#include <dlib/sliding_buffer.h>\n\n#include <dlib/lz77_buffer.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.lz77_buffer\");\n\n    template <\n        typename buf\n        >\n    void lz77_buffer_kernel_test (\n    )\n    /*!\n        requires\n            - buf is an implementation of lz77_buffer/lz77_buffer_kernel_abstract.h \n        ensures\n            - runs tests on buf for compliance with the specs \n    !*/\n    {        \n        typedef dlib::sliding_buffer<unsigned char>::kernel_1a sbuf;\n\n        buf test(8,20);\n        srand(static_cast<unsigned int>(time(0)));\n\n        DLIB_TEST(test.get_lookahead_buffer_size() == 0);\n        DLIB_TEST(test.get_history_buffer_size() == 0);\n        DLIB_TEST_MSG(test.get_history_buffer_limit() == 256-20,test.get_history_buffer_limit());\n        DLIB_TEST(test.get_lookahead_buffer_limit() == 20);\n\n\n        for (int g = 0; g < 2; ++g)\n        {\n            test.clear();\n\n            for (int i = 0; i < 1000; ++i)\n            {\n                test.add('a');\n            }\n            DLIB_TEST(test.get_lookahead_buffer_size() == 20);\n\n\n            test.shift_buffers(5);\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == 15);\n\n\n\n            unsigned long index, length, temp;\n            temp = test.get_lookahead_buffer_size();\n            test.find_match(index,length,5);\n\n\n            DLIB_TEST_MSG(length <= temp,\n                         \"length: \" << length <<\n                         \"\\ntemp: \" << temp);\n            DLIB_TEST(test.get_lookahead_buffer_size() <= 15);\n\n\n        }\n\n\n        for (int g = 0; g < 2; ++g)\n        {\n\n\n\n            test.clear();\n\n\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_limit() == 256-20);\n            DLIB_TEST(test.get_lookahead_buffer_limit() == 20);\n\n            unsigned long a,b, temp = test.get_lookahead_buffer_size();\n            test.find_match(a,b,0);\n            DLIB_TEST(b <= temp);\n            DLIB_TEST(b == 0);\n\n            test.find_match(a,b,5);\n            DLIB_TEST(b == 0);\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_limit() == 256-20);\n            DLIB_TEST(test.get_lookahead_buffer_limit() == 20);\n\n\n\n            ostringstream sout;\n            sout << \"DLIB_TEST_MSG(test.get_lookahead_buffer_size() == 0,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_size() == 0,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_limit() == 256-20,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_lookahead_buffer_limit() == 20,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_lookahead_buffer_size() == 0,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_size() == 0,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_limit() == 256-20,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_lookahead_buffer_limit() == 20,);\\n\";\n            istringstream sin(sout.str());\n\n            sout.str(\"\");\n            sout.clear();\n\n            unsigned char ch;\n            sbuf sbuffer;\n            sbuffer.set_size(8);\n\n\n            ch = sin.get();\n            sbuffer[0] = ch; sbuffer.rotate_left(1);\n            test.add(ch);\n            DLIB_TEST(test.lookahead_buffer(test.get_lookahead_buffer_size()-1) == ch);\n            DLIB_TEST(test.get_lookahead_buffer_size() == 1);\n            DLIB_TEST(test.get_history_buffer_size() == 0);\n            DLIB_TEST(test.get_lookahead_buffer_limit() == 20);\n\n\n\n            ch = sin.get();\n            sbuffer[0] = ch; sbuffer.rotate_left(1);\n            test.add(ch);\n            DLIB_TEST(test.lookahead_buffer(test.get_lookahead_buffer_size()-1) == ch);\n            DLIB_TEST(test.get_lookahead_buffer_size() == 2);\n            DLIB_TEST(test.get_history_buffer_size() == 0);\n            DLIB_TEST(test.get_lookahead_buffer_limit() == 20);\n\n\n\n            ch = sin.get();\n            sbuffer[0] = ch; sbuffer.rotate_left(1);\n            test.add(ch);\n            DLIB_TEST(test.lookahead_buffer(test.get_lookahead_buffer_size()-1) == ch);\n            DLIB_TEST(test.get_lookahead_buffer_size() == 3);\n            DLIB_TEST(test.get_history_buffer_size() == 0);\n\n            // add 17 chars to test so that the lookahead buffer will be full\n            for (int i = 0; i < 17; ++i)\n            {\n                ch = sin.get();\n                sbuffer[0] = ch; sbuffer.rotate_left(1);\n                test.add(ch);\n                DLIB_TEST(test.lookahead_buffer(test.get_lookahead_buffer_size()-1) == ch);\n            }\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == 20);\n            DLIB_TEST(test.get_history_buffer_size() == 0);\n            DLIB_TEST(test.lookahead_buffer(0) == sbuffer[20]);\n\n\n            ch = sin.get();\n            sbuffer[0] = ch; sbuffer.rotate_left(1);\n            test.add(ch);\n            DLIB_TEST(test.lookahead_buffer(test.get_lookahead_buffer_size()-1) == ch);\n            DLIB_TEST(test.get_lookahead_buffer_size() == 20);\n            DLIB_TEST(test.get_history_buffer_size() == 1);\n\n\n\n\n\n\n            // add the above text to test and make sure it gives the correct results                \n            ch = sin.get();\n            while (sin)\n            {\n                sbuffer[0] = ch; sbuffer.rotate_left(1);\n                test.add(ch);\n                DLIB_TEST(test.lookahead_buffer(test.get_lookahead_buffer_size()-1) == ch);                    \n                DLIB_TEST(test.history_buffer(0) == sbuffer[21]);\n                DLIB_TEST(test.history_buffer(1) == sbuffer[22]);\n\n                ch = sin.get();\n            }\n\n\n\n            // make sure the contents of lookahead_buffer and history_buffer \n            // match what is in sbuffer\n            sbuffer.rotate_right(1);\n            for (unsigned int i = 0; i < test.get_history_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()+i] == test.history_buffer(i));\n            }\n            for (unsigned int i = 0; i < test.get_lookahead_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()-1-i] == test.lookahead_buffer(i));\n            }\n            sbuffer.rotate_left(1);\n\n\n\n\n\n\n\n\n\n\n            sbuffer.rotate_right(1);  // do this because we never put anything in sbuffer[0]\n\n            unsigned long match_index, match_length;\n            unsigned long ltemp = test.get_lookahead_buffer_size();\n            test.find_match(match_index,match_length,0);\n            DLIB_TEST(match_length <= ltemp);\n\n\n            // verify the match with sbuffer\n            for (unsigned int i = 0; i < match_length; ++i)\n            {\n                DLIB_TEST_MSG(sbuffer[19-i] == sbuffer[match_index+20-i],i);\n            }\n\n\n            sin.str(\"\");\n            sin.clear();\n\n        } // for (int g = 0; g < 2; ++g)\n\n\n        for (int g = 0; g < 8; ++g)\n        {\n            test.clear();\n\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_limit() == 256-20);\n            DLIB_TEST(test.get_lookahead_buffer_limit() == 20);\n\n\n            sbuf sbuffer;\n            sbuffer.set_size(8);\n\n            ostringstream sout;\n            sout << \"DLIB_TEST_MSG(test.get_lookahead_buffer_size() == 0,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_size() == 0,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_limit() == 256-20,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_lookahead_buffer_limit() == 20,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_lookahead_buffer_size() == 0,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_limit() == 256-20,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_lookahead_buffer_limit() == 20,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_limit() == 256-20,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_lookahead_buffer_size() == 0,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_limit() == 256-20,);\\n\";\n            sout << \"DLIB_TEST_MSG(test.get_history_buffer_limit() == 256-20,);\\n\";\n            istringstream sin(sout.str());\n\n            unsigned char ch;\n            for (int i = 0; i < 100; ++i)\n            {\n                ch = sin.get();\n                sbuffer[0] = ch; sbuffer.rotate_left(1);\n                test.add(ch);                    \n            }\n\n            // make sure the contents of lookahead_buffer and history_buffer \n            // match what is in sbuffer\n            sbuffer.rotate_right(1);\n            for (unsigned int i = 0; i < test.get_history_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()+i] == test.history_buffer(i));\n            }\n            for (unsigned int i = 0; i < test.get_lookahead_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()-1-i] == test.lookahead_buffer(i));\n            }\n            sbuffer.rotate_left(1);\n\n\n\n\n            unsigned long match_index, match_length;\n            unsigned long ltemp = test.get_lookahead_buffer_size();\n            test.find_match(match_index,match_length,0);\n            DLIB_TEST(match_length <= ltemp);\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == 20-match_length);\n\n            sbuffer.rotate_right(1);  // do this because we never put anything in sbuffer[0]\n            // verify the match with sbuffer\n            for (unsigned int i = 0; i < match_length; ++i)\n            {\n                DLIB_TEST(sbuffer[i+20-match_length] == sbuffer[i+1+match_index+20-match_length]);\n            }\n            sbuffer.rotate_left(1);  // free up sbuffer[0] for new data\n\n\n\n\n            for (int i = 0; i < 7+g*2; ++i)\n            {\n                ch = sin.get();\n                sbuffer[0] = ch; sbuffer.rotate_left(1);\n                test.add(ch);                    \n            }\n\n            ch = '?';\n            sbuffer[0] = ch; sbuffer.rotate_left(1);\n            test.add(ch);  \n            ch = 'a';\n            sbuffer[0] = ch; sbuffer.rotate_left(1);\n            test.add(ch);  \n            ch = 'v';\n            sbuffer[0] = ch; sbuffer.rotate_left(1);\n            test.add(ch);  \n            ch = 'i';\n            sbuffer[0] = ch; sbuffer.rotate_left(1);\n            test.add(ch);  \n            ch = 's';\n            sbuffer[0] = ch; sbuffer.rotate_left(1);\n            test.add(ch);  \n\n\n            // adjust sbuffer due to the last call to test.find_match()\n            // but only if we haven't already added enough (20 or more) chars\n            // to fill the lookahead buffer already.  \n            if (match_length > static_cast<unsigned int>(12+g*2))\n                sbuffer.rotate_left(match_length-(12+g*2)); \n\n\n\n\n\n            // make sure the contents of lookahead_buffer and history_buffer \n            // match what is in sbuffer\n            sbuffer.rotate_right(1);\n            for (unsigned int i = 0; i < test.get_history_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()+i] == test.history_buffer(i));\n            }\n            for (unsigned int i = 0; i < test.get_lookahead_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()-1-i] == test.lookahead_buffer(i));\n            }\n            sbuffer.rotate_left(1);\n\n\n\n\n            test.find_match(match_index,match_length,10+g);\n\n            if (match_length > 0)\n                DLIB_TEST(match_length >= static_cast<unsigned int>(10+g) );\n\n\n            sbuffer.rotate_right(1);  // do this because we never put anything in sbuffer[0]\n            // verify the match with sbuffer\n            for (unsigned int i = 0; i < match_length; ++i)\n            {\n                DLIB_TEST(sbuffer[i+20-match_length] == sbuffer[i+1+match_index+20-match_length]);\n            }\n            sbuffer.rotate_left(1);  // free up sbuffer[0] for new data\n\n        } // for (int g = 0; g < 8; ++g)\n\n\n\n\n\n\n\n        srand(static_cast<unsigned int>(time(0)));\n\n        for (int g = 0; g < 200; ++g)\n        {\n            test.clear();\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_limit() == 256-20);\n            DLIB_TEST(test.get_lookahead_buffer_limit() == 20);\n\n\n            sbuf sbuffer;\n            sbuffer.set_size(8);\n\n            ostringstream sout;\n            int l = ::rand()%500;\n            for (int i = 0; i < l; ++i)\n            {\n                char temp = static_cast<char>(::rand()%256);\n                sout << temp;\n            }\n            istringstream sin(sout.str());\n\n            unsigned char ch;\n            for (int i = 0; i < l; ++i)\n            {\n                ch = sin.get();\n                sbuffer[0] = ch; sbuffer.rotate_left(1);\n                test.add(ch);                    \n            }\n\n            // make sure the contents of lookahead_buffer and history_buffer \n            // match what is in sbuffer\n            sbuffer.rotate_right(1);\n\n            // adjust so that sbuffer[19] is the same as lookahead_buffer[0]\n            if (test.get_lookahead_buffer_size() < 20)\n                sbuffer.rotate_left(20-test.get_lookahead_buffer_size());\n\n            for (unsigned int i = 0; i < test.get_history_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()+i] == test.history_buffer(i));\n            }\n            for (unsigned int i = 0; i < test.get_lookahead_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()-1-i] == test.lookahead_buffer(i));\n            }\n            sbuffer.rotate_left(1);\n\n\n\n            unsigned long match_index, match_length;\n            unsigned long lookahead_size_before = test.get_lookahead_buffer_size();\n            test.find_match(match_index,match_length,0);\n            DLIB_TEST(match_length <= lookahead_size_before);\n\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == lookahead_size_before-match_length);\n\n            sbuffer.rotate_right(1);  // do this because we never put anything in sbuffer[0]\n            // verify the match with sbuffer\n            for (unsigned int i = 0; i < match_length; ++i)\n            {\n                DLIB_TEST_MSG(sbuffer[19-i] == sbuffer[match_index+20-i],i);\n            }\n            sbuffer.rotate_left(1);  // free up sbuffer[0] for new data\n\n        } // for (int g = 0; g < 200; ++g)\n\n\n\n\n\n\n\n\n        srand(static_cast<unsigned int>(time(0)));\n\n        for (int g = 0; g < 300; ++g)\n        {\n            test.clear();\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_size() == 0);\n            DLIB_TEST(test.get_history_buffer_limit() == 256-20);\n            DLIB_TEST(test.get_lookahead_buffer_limit() == 20);\n\n\n            sbuf sbuffer;\n            sbuffer.set_size(8);\n\n            ostringstream sout;\n            int l = ::rand()%500;\n            for (int i = 0; i < l; ++i)\n            {\n                char temp = static_cast<char>(::rand()%20);\n                sout << temp;\n                sout << temp;\n                sout << temp;\n                sout << temp;\n                sout << temp;\n                sout << temp;\n            }\n            istringstream sin(sout.str());\n\n            unsigned char ch;\n            for (int i = 0; i < l; ++i)\n            {\n                ch = sin.get();\n                sbuffer[0] = ch; sbuffer.rotate_left(1);\n                test.add(ch);                    \n            }\n\n            // make sure the contents of lookahead_buffer and history_buffer \n            // match what is in sbuffer\n            sbuffer.rotate_right(1);\n\n            // adjust so that sbuffer[19] is the same as lookahead_buffer[0]\n            if (test.get_lookahead_buffer_size() < 20)\n                sbuffer.rotate_left(20-test.get_lookahead_buffer_size());\n\n            for (unsigned int i = 0; i < test.get_history_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()+i] == test.history_buffer(i));\n            }\n            for (unsigned int i = 0; i < test.get_lookahead_buffer_size(); ++i)\n            {\n                DLIB_TEST(sbuffer[test.get_lookahead_buffer_limit()-1-i] == test.lookahead_buffer(i));\n            }\n            sbuffer.rotate_left(1);\n\n\n\n            unsigned long match_index = 0, match_length = 0;\n            unsigned long lookahead_size_before = test.get_lookahead_buffer_size();\n            unsigned long history_size_before = test.get_history_buffer_size();\n            test.find_match(match_index,match_length,2);\n\n            if (match_length != 0)\n            {\n                DLIB_TEST_MSG(match_index < history_size_before,\n                             \"match_index: \" << match_index <<\n                             \"\\nhistory_size_before: \" << history_size_before);\n\n            }\n\n\n            DLIB_TEST(test.get_lookahead_buffer_size() == lookahead_size_before-match_length);            \n\n            sbuffer.rotate_right(1);  // do this because we never put anything in sbuffer[0]\n            // verify the match with sbuffer\n            for (unsigned int i = 0; i < match_length; ++i)\n            {\n                DLIB_TEST_MSG(sbuffer[19-i] == sbuffer[match_index+20-i],i);\n            }\n            sbuffer.rotate_left(1);  // free up sbuffer[0] for new data\n\n\n\n        } // for (int g = 0; g < 300; ++g)\n\n    }\n\n\n\n\n    class lz77_buffer_tester : public tester\n    {\n    public:\n        lz77_buffer_tester (\n        ) :\n            tester (\"test_lz77_buffer\",\n                    \"Runs tests on the lz77_buffer component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            lz77_buffer_kernel_test<lz77_buffer::kernel_1a>  ();\n            dlog << LINFO << \"testing kernel_1a_c\";\n            lz77_buffer_kernel_test<lz77_buffer::kernel_1a_c>();\n            dlog << LINFO << \"testing kernel_2a\";\n            lz77_buffer_kernel_test<lz77_buffer::kernel_2a>  ();\n            dlog << LINFO << \"testing kernel_2a_c\";\n            lz77_buffer_kernel_test<lz77_buffer::kernel_2a_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/main.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <iostream>\n#include <fstream>\n#include <dlib/cmd_line_parser.h>\n#include \"tester.h\"\n#include <dlib/string.h>\n\n\nusing namespace std;\nusing namespace dlib;\nusing namespace test;\n\ntypedef cmd_line_parser<char>::check_1a_c clp;\n\nstatic logger dlog(\"test.main\");\n\nint main (int argc, char** argv)\n{\n    try\n    {\n        clp parser;\n\n        parser.add_option(\"runall\",\"Run all the tests that don't take any arguments.\");\n        parser.add_option(\"h\",\"Displays this information.\");\n        parser.add_option(\"n\",\"How many times to run the selected tests. The default is 1.\",1);\n        parser.add_option(\"d\",\"log debugging statements to file debug.txt.\");\n        parser.add_option(\"l\",\"Set the logging level (all, trace, debug, info, warn, error, or fatal), the default is all.\",1);\n        parser.add_option(\"a\",\"Append debugging messages to debug.txt rather than clearing the file at program startup.\");\n        parser.add_option(\"q\",\"Be quiet.  Don't print the testing progress or results to standard out.\");\n\n        unsigned long num = 1;\n\n        // add the options for all the different tests\n        testers().reset();\n        while (testers().move_next())\n        {\n            tester& test = *testers().element().value();\n            parser.add_option(test.cmd_line_switch(), test.description(), test.num_of_args());\n        }\n\n        parser.parse(argc,argv);\n\n        parser.check_option_arg_range(\"n\",1,1000000000);\n        const char* singles[] = {\"d\",\"l\",\"a\",\"n\",\"h\",\"runall\",\"q\"};\n        parser.check_one_time_options(singles);\n        const char* d_sub[] = {\"l\",\"a\"};\n        const char* l_args[] = {\"all\", \"trace\", \"debug\", \"info\", \"warn\", \"error\", \"fatal\"};\n        parser.check_sub_options(\"d\",d_sub);\n        parser.check_option_arg_range(\"l\",l_args);\n\n\n        if (parser.option(\"n\"))\n        {\n            num = string_cast<unsigned long>(parser.option(\"n\").argument());\n        }\n\n        if (parser.option(\"q\"))\n        {\n            be_verbose = false;\n        }\n\n        if (parser.option(\"h\"))\n        {\n            cout << \"Usage: test [options]\\n\";\n            parser.print_options(cout);\n            cout << \"\\n\\n\";\n            return 0;\n        }\n\n        ofstream fout;\n        if (parser.option(\"d\"))\n        {\n            if (parser.option(\"a\"))\n                fout.open(\"debug.txt\",ios::app);\n            else\n                fout.open(\"debug.txt\");\n\n            set_all_logging_output_streams(fout);\n\n            if (parser.option(\"l\").count() == 0)\n                set_all_logging_levels(LALL);\n            else if (parser.option(\"l\").argument() == \"all\")\n                set_all_logging_levels(LALL);\n            else if (parser.option(\"l\").argument() == \"trace\")\n                set_all_logging_levels(LTRACE);\n            else if (parser.option(\"l\").argument() == \"debug\")\n                set_all_logging_levels(LDEBUG);\n            else if (parser.option(\"l\").argument() == \"info\")\n                set_all_logging_levels(LINFO);\n            else if (parser.option(\"l\").argument() == \"warn\")\n                set_all_logging_levels(LWARN);\n            else if (parser.option(\"l\").argument() == \"error\")\n                set_all_logging_levels(LERROR);\n            else if (parser.option(\"l\").argument() == \"fatal\")\n                set_all_logging_levels(LFATAL);\n        }\n        else\n        {\n            set_all_logging_levels(LNONE);\n        }\n\n        unsigned long num_of_failed_tests = 0;\n        unsigned long num_of_passed_tests = 0;\n        for (unsigned long i = 0; i < num; ++i)\n        {\n            dlog << LINFO << \"************ Starting Test Run \" << i+1 << \" of \" << num << \". ************\";\n\n            // loop over all the testers and see if they are supposed to run\n            testers().reset();\n            while (testers().move_next())\n            {\n                tester& test= *testers().element().value();\n                const clp::option_type& opt = parser.option(test.cmd_line_switch());\n                // run the test for this option as many times as the user has requested.\n                for (unsigned long j = 0; j < parser.option(\"runall\").count() + opt.count(); ++j)\n                {\n                    // quit this loop if this option has arguments and this round through the loop is\n                    // from the runall option being present.\n                    if (test.num_of_args() > 0 && j == opt.count())\n                        break;\n\n                    if (be_verbose)\n                        cout << \"Running \" << test.cmd_line_switch() << \"   \" << flush;\n\n                    dlog << LINFO << \"Running \" << test.cmd_line_switch();\n                    try\n                    {\n                        switch (test.num_of_args())\n                        {\n                            case 0:\n                                test.perform_test();\n                                break;\n                            case 1:\n                                test.perform_test(opt.argument(0,j));\n                                break;\n                            case 2:\n                                test.perform_test(opt.argument(0,j), opt.argument(1,j));\n                                break;\n                            default:\n                                cerr << \"\\n\\nThe test '\" << test.cmd_line_switch() << \"' requested \" << test.num_of_args()\n                                    << \" arguments but only 2 are supported.\" << endl;\n                                dlog << LINFO << \"The test '\" << test.cmd_line_switch() << \"' requested \" << test.num_of_args()\n                                    << \" arguments but only 2 are supported.\";\n                                break;\n                        }\n                        if (be_verbose)\n                            cout << \"\\r                                                                               \\r\";\n\n                        ++num_of_passed_tests;\n\n                    }\n                    catch (std::exception& e)\n                    {\n                        if (be_verbose)\n                        {\n                            cout << \"\\n\\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\n\";\n                            cout << \"!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TEST FAILED: \" << test.cmd_line_switch() \n                                << \" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!\";\n                            cout << \"\\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\n\\n\";\n                            cout << \"Failure message from test: \" << e.what() << endl;\n                        }\n\n\n                        dlog << LERROR << \"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\";\n                        dlog << LERROR << \"!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TEST FAILED: \" << test.cmd_line_switch() \n                            << \" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!\";\n                        dlog << LERROR << \"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\";\n                        dlog << LERROR << \"Failure message from test: \" << e.what();\n                        ++num_of_failed_tests;\n                    }\n                }\n            }\n        }\n        dlog << LINFO << \"Testing Finished\";\n        if (num_of_passed_tests == 0 && num_of_failed_tests == 0)\n        {\n            cout << \"You didn't select any tests to run.\\n\";\n            cout << \"Try the -h option for more information.\\n\";\n        }\n        else if (num_of_failed_tests == 0)\n        {\n            if (be_verbose)\n            {\n                cout << \"\\n\\nTesting Finished\\n\";\n                cout << \"Total number of individual testing statements executed: \"<< number_of_testing_statements_executed() << endl;\n                cout << \"All tests completed successfully\\n\\n\";\n            }\n            dlog << LINFO << \"Total number of individual testing statements executed: \"<< number_of_testing_statements_executed();\n            dlog << LINFO << \"All tests completed successfully\";\n        }\n        else\n        {\n            if (be_verbose)\n            {\n                cout << \"\\n\\nTesting Finished\\n\";\n                cout << \"Total number of individual testing statements executed: \"<< number_of_testing_statements_executed() << endl;\n                cout << \"Number of failed tests: \" << num_of_failed_tests << \"\\n\";\n                cout << \"Number of passed tests: \" << num_of_passed_tests << \"\\n\\n\";\n            }\n            dlog << LINFO << \"Total number of individual testing statements executed: \"<< number_of_testing_statements_executed();\n            dlog << LWARN << \"Number of failed tests: \" << num_of_failed_tests;\n            dlog << LWARN << \"Number of passed tests: \" << num_of_passed_tests;\n        }\n\n        return num_of_failed_tests;\n    }\n    catch (exception& e)\n    {\n        cout << e.what() << endl;\n        cout << \"\\nTry the -h option for more information.\\n\";\n        cout << endl;\n    }\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/makefile",
    "content": "# This is the makefile used to build the dlib C++ library's regression test suite\n# on Debian Linux using the gcc compiler.\n\n# this is the name of the output executable\nTARGET = dtest \n\n# these are the compile time flags passed to gcc\nCFLAGS = -ggdb  -DDEBUG -DDLIB_NO_GUI_SUPPORT  -I ../..  -Wall\n\n# These are the link time flags passed to gcc\nLFLAGS = -lpthread   -lnsl \n\n# The name of the compiler.  If you only have one version of\n# gcc installed then you probably want to change this to just g++ \nCC = nice g++\n\n####################################################\n####################################################\n#  Here we list all the cpp files we want to compile\n\nSRC = main.cpp\nSRC += tester.cpp\nSRC += ../all/source.cpp \n\nSRC += example.cpp\nSRC += example_args.cpp\n\nSRC += active_learning.cpp\nSRC += any.cpp\nSRC += any_function.cpp\nSRC += array2d.cpp\nSRC += array.cpp\nSRC += assignment_learning.cpp\nSRC += base64.cpp\nSRC += bayes_nets.cpp\nSRC += bigint.cpp\nSRC += binary_search_tree_kernel_1a.cpp\nSRC += binary_search_tree_kernel_2a.cpp\nSRC += binary_search_tree_mm1.cpp\nSRC += binary_search_tree_mm2.cpp\nSRC += bridge.cpp\nSRC += bsp.cpp\nSRC += byte_orderer.cpp\nSRC += cca.cpp\nSRC += clustering.cpp\nSRC += cmd_line_parser.cpp\nSRC += cmd_line_parser_wchar_t.cpp\nSRC += compress_stream.cpp\nSRC += conditioning_class_c.cpp\nSRC += conditioning_class.cpp\nSRC += config_reader.cpp\nSRC += crc32.cpp\nSRC += create_iris_datafile.cpp\nSRC += data_io.cpp\nSRC += directed_graph.cpp\nSRC += discriminant_pca.cpp\nSRC += disjoint_subsets.cpp\nSRC += ekm_and_lisf.cpp\nSRC += empirical_kernel_map.cpp\nSRC += entropy_coder.cpp\nSRC += entropy_encoder_model.cpp\nSRC += face.cpp\nSRC += fft.cpp\nSRC += fhog.cpp\nSRC += filtering.cpp\nSRC += find_max_factor_graph_nmplp.cpp\nSRC += find_max_factor_graph_viterbi.cpp\nSRC += geometry.cpp\nSRC += graph.cpp\nSRC += graph_cuts.cpp\nSRC += graph_labeler.cpp\nSRC += hash.cpp\nSRC += hash_map.cpp\nSRC += hash_set.cpp\nSRC += hash_table.cpp\nSRC += hog_image.cpp\nSRC += image.cpp\nSRC += iosockstream.cpp\nSRC += is_same_object.cpp\nSRC += kcentroid.cpp\nSRC += kernel_matrix.cpp\nSRC += kmeans.cpp\nSRC += learning_to_track.cpp\nSRC += least_squares.cpp\nSRC += linear_manifold_regularizer.cpp\nSRC += lz77_buffer.cpp\nSRC += map.cpp\nSRC += matrix2.cpp\nSRC += matrix3.cpp\nSRC += matrix4.cpp\nSRC += matrix_chol.cpp\nSRC += matrix.cpp\nSRC += matrix_eig.cpp\nSRC += matrix_lu.cpp\nSRC += matrix_qr.cpp\nSRC += max_cost_assignment.cpp\nSRC += max_sum_submatrix.cpp\nSRC += md5.cpp\nSRC += member_function_pointer.cpp\nSRC += metaprogramming.cpp\nSRC += multithreaded_object.cpp\nSRC += numerical_integration.cpp\nSRC += object_detector.cpp\nSRC += oca.cpp\nSRC += one_vs_all_trainer.cpp\nSRC += one_vs_one_trainer.cpp\nSRC += optimization.cpp\nSRC += optimization_test_functions.cpp\nSRC += opt_qp_solver.cpp\nSRC += parallel_for.cpp\nSRC += parse.cpp\nSRC += pipe.cpp\nSRC += pixel.cpp\nSRC += probabilistic.cpp\nSRC += pyramid_down.cpp\nSRC += queue.cpp\nSRC += rand.cpp\nSRC += ranking.cpp\nSRC += read_write_mutex.cpp\nSRC += reference_counter.cpp\nSRC += rls.cpp\nSRC += sammon.cpp\nSRC += scan_image.cpp\nSRC += sequence.cpp\nSRC += sequence_labeler.cpp\nSRC += sequence_segmenter.cpp\nSRC += serialize.cpp\nSRC += set.cpp\nSRC += sldf.cpp\nSRC += sliding_buffer.cpp\nSRC += smart_pointers.cpp\nSRC += sockets2.cpp\nSRC += sockets.cpp\nSRC += sockstreambuf.cpp\nSRC += sparse_vector.cpp\nSRC += stack.cpp\nSRC += static_map.cpp\nSRC += static_set.cpp\nSRC += statistics.cpp\nSRC += std_vector_c.cpp\nSRC += string.cpp\nSRC += svm_c_linear.cpp\nSRC += svm_c_linear_dcd.cpp\nSRC += svm.cpp\nSRC += svm_multiclass_linear.cpp\nSRC += svm_struct.cpp\nSRC += svr_linear_trainer.cpp\nSRC += symmetric_matrix_cache.cpp\nSRC += thread_pool.cpp\nSRC += threads.cpp\nSRC += timer.cpp\nSRC += tokenizer.cpp\nSRC += trust_region.cpp\nSRC += tuple.cpp\nSRC += type_safe_union.cpp\nSRC += vectorstream.cpp\n\n\n####################################################\n\nTMP = $(SRC:.cpp=.o)\nOBJ = $(TMP:.c=.o)\n\n$(TARGET): $(OBJ) \n\t@echo Linking $@\n\t@$(CC) $(OBJ) $(LFLAGS) -o $@\n\t@echo Build Complete\n\n.cpp.o: $<\n\t@echo Compiling $<\n\t@$(CC) -c $(CFLAGS) $< -o $@\n\nclean:\n\t@rm -f $(OBJ) $(TARGET)\n\t@echo All object files and binaries removed\n\ndep: \n\t@echo Running makedepend\n\t@makedepend -- $(CFLAGS) -- $(SRC) 2> /dev/null \n\t@echo Completed makedepend\n\n###############################################################################\n##########  Stuff from makedepend                                         #####\n##########  type make dep at the command line to rebuild the dependencies #####\n##########  Also, DON'T edit the contents of this file beyond this line.  #####\n###############################################################################\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/map.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/map.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.map\");\n\n    template <\n        typename map\n        >\n    void map_kernel_test (\n    )\n    /*!\n        requires\n            - map is an implementation of map/map_kernel_abstract.h and\n              is instantiated to map int to int\n        ensures\n            - runs tests on map for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n\n        srand(static_cast<unsigned int>(time(0)));\n\n\n\n        map test, test2;\n\n        enumerable<map_pair<int,int> >& e = test;\n        DLIB_TEST(e.at_start() == true);\n\n        for (int j = 0; j < 4; ++j)\n        {\n\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n\n\n            int a,b;\n            a = 8;\n            b = 94;\n            test.add(a,b);\n            DLIB_TEST(test.size() == 1);\n            DLIB_TEST(test.is_in_domain(8) == true);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n            DLIB_TEST(test[8] == 94);\n            a = 53;\n            b = 4;\n            test.add(a,b);\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test.is_in_domain(53) == true);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n            DLIB_TEST(test[53] == 4);\n\n\n            swap(test,test2);\n\n\n            DLIB_TEST(test2.size() == 2);\n            DLIB_TEST(test2.is_in_domain(8) == true);\n            DLIB_TEST(test2.is_in_domain(5) == false);\n            DLIB_TEST(test2.is_in_domain(0) == false);\n            DLIB_TEST(test2.is_in_domain(-999) == false);\n            DLIB_TEST(test2.is_in_domain(4999) == false);\n            DLIB_TEST(test2[8] == 94);\n            DLIB_TEST(test2.size() == 2);\n            DLIB_TEST(test2.is_in_domain(53) == true);\n            DLIB_TEST(test2.is_in_domain(5) == false);\n            DLIB_TEST(test2.is_in_domain(0) == false);\n            DLIB_TEST(test2.is_in_domain(-999) == false);\n            DLIB_TEST(test2.is_in_domain(4999) == false);\n            DLIB_TEST(test2[53] == 4);\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_in_domain(8) == false);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_in_domain(53) == false);\n            DLIB_TEST(test.is_in_domain(5) == false);\n            DLIB_TEST(test.is_in_domain(0) == false);\n            DLIB_TEST(test.is_in_domain(-999) == false);\n            DLIB_TEST(test.is_in_domain(4999) == false);\n\n\n            test.clear();\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n\n\n            DLIB_TEST(test.size() == 0);\n\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                b = ::rand();\n                if (!test.is_in_domain(a))\n                    test.add(a,b);\n            }\n\n            DLIB_TEST(test.size() == 10000);\n            test.clear();\n            DLIB_TEST(test.size() == 0);\n\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                b = ::rand();\n                if (!test.is_in_domain(a))\n                    test.add(a,b);\n            }\n\n            DLIB_TEST(test.size() == 10000);\n\n            int count = 0;\n            a = -1;\n            while (test.move_next())\n            {\n                DLIB_TEST(test.element().key() == test.element().key());\n                DLIB_TEST(test.element().value() == test.element().value());\n                DLIB_TEST(test.element().key() == test.element().key());\n                DLIB_TEST(test.element().value() == test.element().value());\n\n\n                DLIB_TEST(a < test.element().key());\n                a = test.element().key();\n                ++count;\n            }\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.move_next() == false);\n\n            DLIB_TEST(count == 10000);\n\n            test.swap(test2);\n\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test2.size() == 10000);\n            count = 0;\n            a = -1;\n            test2.reset();\n\n            test2.move_next();\n            test2.element().value() = 99;\n            DLIB_TEST(test2[test2.element().key()] == 99);\n            DLIB_TEST(test2.element().value() == 99);\n\n            test2.reset();\n\n            while (test2.move_next())\n            {\n                DLIB_TEST(test2[test2.element().key()] == test2.element().value());\n                DLIB_TEST(test2.element().key() == test2.element().key());\n                DLIB_TEST(test2.element().value() == test2.element().value());\n                DLIB_TEST(test2.element().key() == test2.element().key());\n                DLIB_TEST(test2.element().value() == test2.element().value());\n                DLIB_TEST(a < test2.element().key());\n                a = test2.element().key();                \n                ++count;\n            }\n            DLIB_TEST(test2.size() == 10000);\n            DLIB_TEST(count == 10000);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.move_next() == false);\n\n\n\n            test2.clear();\n            DLIB_TEST(test2.size() == 0);\n            DLIB_TEST(test2.at_start() == true);\n\n            while (test.size() < 20000)\n            {\n                a = ::rand();\n                b = ::rand();\n                if (!test.is_in_domain(a))\n                    test.add(a,b);\n            }\n\n            // serialize the state of test, then clear test, then\n            // load the state back into test.\n            ostringstream sout;\n            serialize(test,sout);\n            istringstream sin(sout.str());\n            test.clear();\n            deserialize(test,sin);\n\n            DLIB_TEST(test.at_start() == true);\n\n            {\n                int* array1 = new int[test.size()];\n                int* array2 = new int[test.size()];\n\n                int* tmp1 = array1;\n                int* tmp2 = array2;\n\n                count = 0;\n                while (test.move_next())\n                {\n                    DLIB_TEST(test.element().key() == test.element().key());\n                    DLIB_TEST(test.element().value() == test.element().value());\n                    DLIB_TEST(test.element().key() == test.element().key());\n                    DLIB_TEST(test.current_element_valid() == true);\n                    *tmp1 = test.element().key();\n                    *tmp2 = test.element().value();\n                    ++tmp1;\n                    ++tmp2;\n                    ++count;\n                }\n                DLIB_TEST(count == 20000);\n\n                tmp1 = array1;\n                tmp2 = array2;\n                for (int i = 0; i < 20000; ++i)\n                {\n                    DLIB_TEST(test.is_in_domain(*tmp1) == true);\n                    DLIB_TEST(test[*tmp1] == *tmp2);\n                    ++tmp1;\n                    ++tmp2;\n                }\n\n                DLIB_TEST(test.size() == 20000);\n\n                tmp1 = array1;\n                tmp2 = array2;\n                count = 0;\n                while (test.size() > 10000)\n                {\n                    test.remove(*tmp1,a,b);\n                    DLIB_TEST(*tmp1 == a);\n                    DLIB_TEST(*tmp2 == b);\n                    ++tmp1;\n                    ++tmp2;\n                    ++count;\n                }\n                DLIB_TEST(count == 10000);\n                DLIB_TEST(test.size() == 10000);\n\n                while (test.move_next())\n                {\n                    DLIB_TEST(test.element().key() == *tmp1);\n                    DLIB_TEST(test.element().key() == *tmp1);\n                    DLIB_TEST(test.element().key() == *tmp1);\n                    DLIB_TEST(test.element().value() == *tmp2);\n                    DLIB_TEST(test.element().value() == *tmp2);\n                    DLIB_TEST(test.element().value() == *tmp2);\n                    ++tmp1;\n                    ++tmp2;\n                    ++count;\n                }\n                DLIB_TEST(count == 20000);\n                DLIB_TEST(test.size() == 10000);\n\n                while (test.size() < 20000)\n                {\n                    a = ::rand();\n                    b = ::rand();\n                    if (!test.is_in_domain(a))\n                        test.add(a,b);\n                }\n\n                test2.swap(test);\n\n                count = 0;\n                a = -1;\n                while (test2.move_next())\n                {\n                    DLIB_TEST(test2.element().key() == test2.element().key());\n                    DLIB_TEST(test2.element().value() == test2.element().value());\n                    DLIB_TEST(test2.element().key() == test2.element().key());\n                    DLIB_TEST(a < test2.element().key());\n                    a = test2.element().key();                \n                    ++count;\n                }\n\n                DLIB_TEST(count == 20000);\n                DLIB_TEST(test2.size() == 20000);\n\n                a = -1;\n                int c = 0;\n                while (test2.size()>0)\n                {\n                    test2.remove_any(b,c);\n                    DLIB_TEST( a < b);\n                    a = b;\n                }\n\n                DLIB_TEST(test2.size() == 0);\n                delete [] array1;\n                delete [] array2;\n            }\n\n            test.clear();\n            test2.clear();\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                b = ::rand();\n                if (!test.is_in_domain(a))\n                    test.add(a,b);\n            }\n\n            count = 0; \n            a = -1;\n            while (test.move_next())\n            {\n                DLIB_TEST(a < test.element().key());\n                DLIB_TEST(test[test.element().key()] == test.element().value());\n                a = test.element().key();\n                ++count;\n                if (count == 5000)\n                    break;\n                DLIB_TEST(test.current_element_valid() == true);\n            }\n\n            test.reset();\n\n            count = 0; \n            a = -1;\n            while (test.move_next())\n            {\n                DLIB_TEST(a < test.element().key());\n                a = test.element().key();\n                ++count;\n                DLIB_TEST(test.current_element_valid() == true);\n            }\n\n            DLIB_TEST(count == 10000);\n\n\n            test.clear();\n            test2.clear();\n        }\n\n\n        {\n            test.clear();\n            DLIB_TEST(test.size() == 0);\n            int a = 5;\n            int b = 6;\n            test.add(a,b);\n            a = 7;\n            b = 8;\n            test.add(a,b);\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test[7] == 8);\n            DLIB_TEST(test[5] == 6);\n            DLIB_TEST(test.is_in_domain(7));\n            DLIB_TEST(test.is_in_domain(5));\n            test.destroy(7);\n            DLIB_TEST(test.size() == 1);\n            DLIB_TEST(!test.is_in_domain(7));\n            DLIB_TEST(test.is_in_domain(5));\n            test.destroy(5);\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(!test.is_in_domain(7));\n            DLIB_TEST(!test.is_in_domain(5));\n        }\n\n    }\n\n\n\n\n    class map_tester : public tester\n    {\n    public:\n        map_tester (\n        ) :\n            tester (\"test_map\",\n                    \"Runs tests on the map component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            map_kernel_test<dlib::map<int,int>::kernel_1a>  ();\n            dlog << LINFO << \"testing kernel_1a_c\";\n            map_kernel_test<dlib::map<int,int>::kernel_1a_c>();\n            dlog << LINFO << \"testing kernel_1b\";\n            map_kernel_test<dlib::map<int,int>::kernel_1b>  ();\n            dlog << LINFO << \"testing kernel_1b_c\";\n            map_kernel_test<dlib::map<int,int>::kernel_1b_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/matrix.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n\n#include \"tester.h\"\n#include <dlib/memory_manager_stateless.h>\n#include <dlib/array2d.h>\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.matrix\");\n\n    void matrix_test (\n    )\n    /*!\n        ensures\n            - runs tests on the matrix stuff compliance with the specs\n    !*/\n    {        \n        typedef memory_manager_stateless<char>::kernel_2_2a MM;\n        print_spinner();\n\n\n        {\n            matrix<complex<double>,2,2,MM> m;\n            set_all_elements(m,complex<double>(1,2));\n            DLIB_TEST((conj(m) == uniform_matrix<complex<double>,2,2>(conj(m(0,0)))));\n            DLIB_TEST((real(m) == uniform_matrix<double,2,2>(1)));\n            DLIB_TEST((imag(m) == uniform_matrix<double,2,2>(2)));\n            DLIB_TEST_MSG((sum(abs(norm(m) - uniform_matrix<double,2,2>(5))) < 1e-10 ),norm(m));\n\n        }\n\n        {\n            matrix<double,5,5,MM,column_major_layout> m(5,5);\n\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c; \n                }\n            }\n\n            m = cos(exp(m));\n\n\n            matrix<double> mi = pinv(m ); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix(m))));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix(m))));\n\n            mi = pinv(m,1e-12); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix(m))));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix(m))));\n\n            m = diagm(diag(m));\n            mi = pinv(diagm(diag(m)),1e-12); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix(m))));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix(m))));\n\n            mi = pinv(m,0); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix(m))));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix(m))));\n\n            m = diagm(diag(m));\n            mi = pinv(diagm(diag(m)),0); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix(m))));\n            DLIB_TEST((equal(round_zeros(m*mi,0.000001) , identity_matrix(m))));\n        }\n        {\n            matrix<double,5,0,MM> m(5,5);\n\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c; \n                }\n            }\n\n            m = cos(exp(m));\n\n\n            matrix<double> mi = pinv(m ); \n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,5>())));\n        }\n\n        {\n            matrix<double,0,5,MM> m(5,5);\n\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c; \n                }\n            }\n\n            m = cos(exp(m));\n\n\n            matrix<double> mi = pinv(m ); \n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,5>())));\n        }\n\n\n        {\n            matrix<double> m(5,5);\n\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c; \n                }\n            }\n\n            m = cos(exp(m));\n\n\n            matrix<double> mi = pinv(m ); \n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,5>())));\n        }\n\n        {\n            matrix<double,5,2,MM,column_major_layout> m;\n\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c; \n                }\n            }\n\n            m = cos(exp(m));\n\n\n            matrix<double> mi = pinv(m ); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,2>())));\n        }\n\n        {\n            matrix<double> m(5,2);\n\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c; \n                }\n            }\n\n            m = cos(exp(m));\n\n\n            matrix<double> mi = pinv(m ); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,2>())));\n        }\n\n        {\n            matrix<double,5,2,MM,column_major_layout> m;\n\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c; \n                }\n            }\n\n            m = cos(exp(m));\n\n\n            matrix<double> mi = trans(pinv(trans(m) )); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,2>())));\n        }\n\n        {\n            matrix<double> m(5,2);\n\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c; \n                }\n            }\n\n            m = cos(exp(m));\n\n\n            matrix<double> mi = trans(pinv(trans(m) )); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*m,0.000001) , identity_matrix<double,2>())));\n        }\n\n        {\n            matrix<long> a1(5,1);\n            matrix<long,0,0,MM,column_major_layout> a2(1,5);\n            matrix<long,5,1> b1(5,1);\n            matrix<long,1,5> b2(1,5);\n            matrix<long,0,1> c1(5,1);\n            matrix<long,1,0> c2(1,5);\n            matrix<long,0,1,MM,column_major_layout> d1(5,1);\n            matrix<long,1,0,MM> d2(1,5);\n\n            for (long i = 0; i < 5; ++i)\n            {\n                a1(i) = i;\n                a2(i) = i;\n                b1(i) = i;\n                b2(i) = i;\n                c1(i) = i;\n                c2(i) = i;\n                d1(i) = i;\n                d2(i) = i;\n            }\n\n            DLIB_TEST(a1 == trans(a2));\n            DLIB_TEST(a1 == trans(b2));\n            DLIB_TEST(a1 == trans(c2));\n            DLIB_TEST(a1 == trans(d2));\n\n            DLIB_TEST(a1 == b1);\n            DLIB_TEST(a1 == c1);\n            DLIB_TEST(a1 == d1);\n\n            DLIB_TEST(trans(a1) == c2);\n            DLIB_TEST(trans(b1) == c2);\n            DLIB_TEST(trans(c1) == c2);\n            DLIB_TEST(trans(d1) == c2);\n\n            DLIB_TEST(sum(a1) == 10);\n            DLIB_TEST(sum(a2) == 10);\n            DLIB_TEST(sum(b1) == 10);\n            DLIB_TEST(sum(b2) == 10);\n            DLIB_TEST(sum(c1) == 10);\n            DLIB_TEST(sum(c2) == 10);\n            DLIB_TEST(sum(d1) == 10);\n            DLIB_TEST(sum(d2) == 10);\n\n            const matrix<long> orig1 = a1;\n            const matrix<long> orig2 = a2;\n\n            ostringstream sout;\n            serialize(a1,sout);\n            serialize(a2,sout);\n            serialize(b1,sout);\n            serialize(b2,sout);\n            serialize(c1,sout);\n            serialize(c2,sout);\n            serialize(d1,sout);\n            serialize(d2,sout);\n\n            DLIB_TEST(a1 == orig1);\n            DLIB_TEST(a2 == orig2);\n            DLIB_TEST(b1 == orig1);\n            DLIB_TEST(b2 == orig2);\n            DLIB_TEST(c1 == orig1);\n            DLIB_TEST(c2 == orig2);\n            DLIB_TEST(d1 == orig1);\n            DLIB_TEST(d2 == orig2);\n\n            set_all_elements(a1,99);\n            set_all_elements(a2,99);\n            set_all_elements(b1,99);\n            set_all_elements(b2,99);\n            set_all_elements(c1,99);\n            set_all_elements(c2,99);\n            set_all_elements(d1,99);\n            set_all_elements(d2,99);\n\n            DLIB_TEST(a1 != orig1);\n            DLIB_TEST(a2 != orig2);\n            DLIB_TEST(b1 != orig1);\n            DLIB_TEST(b2 != orig2);\n            DLIB_TEST(c1 != orig1);\n            DLIB_TEST(c2 != orig2);\n            DLIB_TEST(d1 != orig1);\n            DLIB_TEST(d2 != orig2);\n\n            istringstream sin(sout.str());\n\n            deserialize(a1,sin);\n            deserialize(a2,sin);\n            deserialize(b1,sin);\n            deserialize(b2,sin);\n            deserialize(c1,sin);\n            deserialize(c2,sin);\n            deserialize(d1,sin);\n            deserialize(d2,sin);\n\n            DLIB_TEST(a1 == orig1);\n            DLIB_TEST(a2 == orig2);\n            DLIB_TEST(b1 == orig1);\n            DLIB_TEST(b2 == orig2);\n            DLIB_TEST(c1 == orig1);\n            DLIB_TEST(c2 == orig2);\n            DLIB_TEST(d1 == orig1);\n            DLIB_TEST(d2 == orig2);\n\n\n        }\n\n        {\n            matrix<double,1,0> a(5);\n            matrix<double,0,1> b(5);\n            matrix<double,1,5> c(5);\n            matrix<double,5,1> d(5);\n            DLIB_TEST(a.nr() == 1);\n            DLIB_TEST(a.nc() == 5);\n            DLIB_TEST(c.nr() == 1);\n            DLIB_TEST(c.nc() == 5);\n\n            DLIB_TEST(b.nc() == 1);\n            DLIB_TEST(b.nr() == 5);\n            DLIB_TEST(d.nc() == 1);\n            DLIB_TEST(d.nr() == 5);\n        }\n\n        {\n            matrix<double,1,0> a;\n            matrix<double,0,1> b;\n            matrix<double,1,5> c;\n            matrix<double,5,1> d;\n\n            a.set_size(5);\n            b.set_size(5);\n            c.set_size(5);\n            d.set_size(5);\n\n            DLIB_TEST(a.nr() == 1);\n            DLIB_TEST(a.nc() == 5);\n            DLIB_TEST(c.nr() == 1);\n            DLIB_TEST(c.nc() == 5);\n\n            DLIB_TEST(b.nc() == 1);\n            DLIB_TEST(b.nr() == 5);\n            DLIB_TEST(d.nc() == 1);\n            DLIB_TEST(d.nr() == 5);\n        }\n\n        {\n            matrix<double> a(1,5);\n            matrix<double> b(5,1);\n\n            set_all_elements(a,1);\n            set_all_elements(b,1);\n\n\n            a = a*b;\n\n            DLIB_TEST(a(0) == 5);\n        }\n\n        {\n            matrix<double,0,0,MM,column_major_layout> a(6,7);\n\n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = r*a.nc() + c;\n                }\n            }\n\n\n\n            DLIB_TEST(rowm(a,1).nr() == 1);\n            DLIB_TEST(rowm(a,1).nc() == a.nc());\n            DLIB_TEST(colm(a,1).nr() == a.nr());\n            DLIB_TEST(colm(a,1).nc() == 1);\n\n            for (long c = 0; c < a.nc(); ++c)\n            {\n                DLIB_TEST( rowm(a,1)(c) == 1*a.nc() + c);\n            }\n\n            for (long r = 0; r < a.nr(); ++r)\n            {\n                DLIB_TEST( colm(a,1)(r) == r*a.nc() + 1);\n            }\n\n            rectangle rect(2, 1, 3+2-1, 2+1-1);\n            DLIB_TEST(get_rect(a).contains(get_rect(a)));\n            DLIB_TEST(get_rect(a).contains(rect));\n            for (long r = 0; r < 2; ++r)\n            {\n                for (long c = 0; c < 3; ++c)\n                {\n                    DLIB_TEST(subm(a,1,2,2,3)(r,c) == (r+1)*a.nc() + c+2);\n                    DLIB_TEST(subm(a,1,2,2,3) == subm(a,rect));\n                }\n            }\n\n            DLIB_TEST(subm(a,rectangle()).nr() == 0);\n            DLIB_TEST(subm(a,rectangle()).nc() == 0);\n\n        }\n\n        {\n            array2d<double> a;\n            a.set_size(6,7);\n\n\n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a[r][c] = r*a.nc() + c;\n                }\n            }\n\n\n\n            DLIB_TEST(rowm(mat(a),1).nr() == 1);\n            DLIB_TEST(rowm(mat(a),1).nc() == a.nc());\n            DLIB_TEST(colm(mat(a),1).nr() == a.nr());\n            DLIB_TEST(colm(mat(a),1).nc() == 1);\n\n            for (long c = 0; c < a.nc(); ++c)\n            {\n                DLIB_TEST( rowm(mat(a),1)(c) == 1*a.nc() + c);\n            }\n\n            for (long r = 0; r < a.nr(); ++r)\n            {\n                DLIB_TEST( colm(mat(a),1)(r) == r*a.nc() + 1);\n            }\n\n            for (long r = 0; r < 2; ++r)\n            {\n                for (long c = 0; c < 3; ++c)\n                {\n                    DLIB_TEST(subm(mat(a),1,2,2,3)(r,c) == (r+1)*a.nc() + c+2);\n                }\n            }\n\n\n        }\n\n        {\n            array2d<double> m;\n            m.set_size(5,5);\n\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m[r][c] = r*c; \n                }\n            }\n\n\n            matrix<double> mi = pinv(cos(exp(mat(m))) ); \n            DLIB_TEST(mi.nr() == m.nc());\n            DLIB_TEST(mi.nc() == m.nr());\n            DLIB_TEST((equal(round_zeros(mi*cos(exp(mat(m))),0.000001) , identity_matrix<double,5>())));\n            DLIB_TEST((equal(round_zeros(cos(exp(mat(m)))*mi,0.000001) , identity_matrix<double,5>())));\n        }\n\n        {\n            matrix<long,5,5,MM,column_major_layout> m1, res;\n            matrix<long,2,2> m2;\n\n            set_all_elements(m1,0);\n\n\n            long res_vals[] = {\n                9, 9, 9, 9, 9,\n                0, 1, 1, 0, 0,\n                0, 1, 1, 0, 2,\n                0, 0, 2, 2, 2,\n                0, 0, 2, 2, 0\n            };\n\n            res = res_vals;\n\n            set_all_elements(m2, 1);\n            set_subm(m1, range(1,2), range(1,2)) = subm(m2,0,0,2,2);\n            set_all_elements(m2, 2);\n            set_subm(m1, 3,2,2,2) = m2;\n\n            set_colm(m1,4) = trans(rowm(m1,4));\n            set_rowm(m1,0) = 9;\n\n            DLIB_TEST_MSG(m1 == res, \"m1: \\n\" << m1 << \"\\nres: \\n\" << res);\n\n            set_subm(m1,0,0,5,5) = m1*m1;\n            DLIB_TEST_MSG(m1 == res*res, \"m1: \\n\" << m1 << \"\\nres*res: \\n\" << res*res);\n\n            m1 = res;\n            set_subm(m1,1,1,2,2) = subm(m1,0,0,2,2);\n\n            long res_vals2[] = {\n                9, 9, 9, 9, 9,\n                0, 9, 9, 0, 0,\n                0, 0, 1, 0, 2,\n                0, 0, 2, 2, 2,\n                0, 0, 2, 2, 0\n            };\n\n            res = res_vals2;\n            DLIB_TEST_MSG(m1 == res, \"m1: \\n\" << m1 << \"\\nres: \\n\" << res);\n\n\n        }\n\n        {\n            matrix<long,5,5> m1, res;\n            matrix<long,2,2> m2;\n\n            set_all_elements(m1,0);\n\n\n            long res_vals[] = {\n                9, 9, 9, 9, 9,\n                0, 1, 1, 0, 0,\n                0, 1, 1, 0, 2,\n                0, 0, 2, 2, 2,\n                0, 0, 2, 2, 0\n            };\n\n            res = res_vals;\n\n            set_all_elements(m2, 1);\n            set_subm(m1, rectangle(1,1,2,2)) = subm(m2,0,0,2,2);\n            set_all_elements(m2, 2);\n            set_subm(m1, 3,2,2,2) = m2;\n\n            set_colm(m1,4) = trans(rowm(m1,4));\n            set_rowm(m1,0) = 9;\n\n            DLIB_TEST_MSG(m1 == res, \"m1: \\n\" << m1 << \"\\nres: \\n\" << res);\n\n            set_subm(m1,0,0,5,5) = m1*m1;\n            DLIB_TEST_MSG(m1 == res*res, \"m1: \\n\" << m1 << \"\\nres*res: \\n\" << res*res);\n\n            m1 = res;\n            set_subm(m1,1,1,2,2) = subm(m1,0,0,2,2);\n\n            long res_vals2[] = {\n                9, 9, 9, 9, 9,\n                0, 9, 9, 0, 0,\n                0, 0, 1, 0, 2,\n                0, 0, 2, 2, 2,\n                0, 0, 2, 2, 0\n            };\n\n            res = res_vals2;\n            DLIB_TEST_MSG(m1 == res, \"m1: \\n\" << m1 << \"\\nres: \\n\" << res);\n\n\n        }\n\n        {\n            matrix<long,5,5> m1, res;\n            matrix<long,2,2> m2;\n\n            set_all_elements(m1,0);\n\n\n            long res_vals[] = {\n                9, 0, 3, 3, 0,\n                9, 2, 2, 2, 0,\n                9, 2, 2, 2, 0,\n                4, 4, 4, 4, 4,\n                9, 0, 3, 3, 0\n            };\n            long res_vals_c3[] = {\n                9, 0, 3, 0,\n                9, 2, 2, 0,\n                9, 2, 2, 0,\n                4, 4, 4, 4,\n                9, 0, 3, 0\n            };\n            long res_vals_r2[] = {\n                9, 0, 3, 3, 0,\n                9, 2, 2, 2, 0,\n                4, 4, 4, 4, 4,\n                9, 0, 3, 3, 0\n            };\n\n            matrix<long> temp;\n\n            res = res_vals;\n\n            temp = matrix<long,4,5>(res_vals_r2);\n            DLIB_TEST(remove_row<2>(res) == temp);\n            DLIB_TEST(remove_row<2>(res)(3,3) == 3);\n            DLIB_TEST(remove_row<2>(res).nr() == 4);\n            DLIB_TEST(remove_row<2>(res).nc() == 5);\n            DLIB_TEST(remove_row(res,2) == temp);\n            DLIB_TEST(remove_row(res,2)(3,3) == 3);\n            DLIB_TEST(remove_row(res,2).nr() == 4);\n            DLIB_TEST(remove_row(res,2).nc() == 5);\n\n            temp = matrix<long,5,5>(res_vals);\n            temp = remove_row(res,2);\n            DLIB_TEST((temp == matrix<long,4,5>(res_vals_r2)));\n            temp = matrix<long,5,5>(res_vals);\n            temp = remove_col(res,3);\n            DLIB_TEST((temp == matrix<long,5,4>(res_vals_c3)));\n\n            matrix<long,3,1> vect;\n            set_all_elements(vect,1);\n            temp = identity_matrix<long>(3);\n            temp = temp*vect;\n            DLIB_TEST(temp == vect);\n\n            temp = matrix<long,5,4>(res_vals_c3);\n            DLIB_TEST(remove_col(res,3) == temp);\n            DLIB_TEST(remove_col(res,3)(2,3) == 0);\n            DLIB_TEST(remove_col(res,3).nr() == 5);\n            DLIB_TEST(remove_col(res,3).nc() == 4);\n\n            set_all_elements(m2, 1);\n            set_subm(m1, rectangle(1,1,3,2)) = 2;\n            set_all_elements(m2, 2);\n            set_subm(m1, 3,2,2,2) = 3;\n\n            set_colm(m1,0) = 9;\n            set_rowm(m1,0) = rowm(m1,4);\n            set_rowm(m1,3) = 4;\n\n            DLIB_TEST_MSG(m1 == res, \"m1: \\n\" << m1 << \"\\nres: \\n\" << res);\n\n        }\n\n\n        {\n\n            const double stuff[] = { \n                1, 2, 3,\n                6, 3, 3, \n                7, 3, 9};\n\n            matrix<double,3,3> m(stuff);\n\n            // make m be symmetric\n            m = m*trans(m);\n\n            matrix<double> L = chol(m);\n            DLIB_TEST(equal(L*trans(L), m));\n\n            DLIB_TEST_MSG(equal(inv(m), inv_upper_triangular(trans(L))*inv_lower_triangular((L))), \"\") \n            DLIB_TEST(equal(round_zeros(inv_upper_triangular(trans(L))*trans(L),1e-10), identity_matrix<double>(3), 1e-10)); \n            DLIB_TEST(equal(round_zeros(inv_lower_triangular((L))*(L),1e-10) ,identity_matrix<double>(3),1e-10)); \n\n        }\n\n        {\n\n            const double stuff[] = { \n                1, 2, 3, 6, 3, 4,\n                6, 3, 3, 1, 2, 3,\n                7, 3, 9, 54.3, 5, 3,\n                -6, 3, -3, 1, 2, 3,\n                1, 2, 3, 5, -3, 3,\n                7, 3, -9, 54.3, 5, 3\n                };\n\n            matrix<double,6,6> m(stuff);\n\n            // make m be symmetric\n            m = m*trans(m);\n\n            matrix<double> L = chol(m);\n            DLIB_TEST_MSG(equal(L*trans(L), m, 1e-10), L*trans(L)-m);\n\n            DLIB_TEST_MSG(equal(inv(m), inv_upper_triangular(trans(L))*inv_lower_triangular((L))), \"\") \n            DLIB_TEST_MSG(equal(inv(m), trans(inv_lower_triangular(L))*inv_lower_triangular((L))), \"\") \n            DLIB_TEST_MSG(equal(inv(m), trans(inv_lower_triangular(L))*trans(inv_upper_triangular(trans(L)))), \"\") \n            DLIB_TEST_MSG(equal(round_zeros(inv_upper_triangular(trans(L))*trans(L),1e-10) , identity_matrix<double>(6), 1e-10),\n                         round_zeros(inv_upper_triangular(trans(L))*trans(L),1e-10)); \n            DLIB_TEST_MSG(equal(round_zeros(inv_lower_triangular((L))*(L),1e-10) ,identity_matrix<double>(6), 1e-10),\n                         round_zeros(inv_lower_triangular((L))*(L),1e-10)); \n\n        }\n\n        {\n            matrix<int> m(3,4), m2;\n            m = 1,2,3,4,\n                4,5,6,6,\n                6,1,8,0;\n            m2 = m;\n            DLIB_TEST(round(m) == m2);\n            DLIB_TEST(round_zeros(m) == m2);\n\n            m2 = 0,2,3,4,\n                 4,5,6,6,\n                 6,0,8,0;\n\n            DLIB_TEST(round_zeros(m,2) == m2);\n        }\n\n\n        {\n\n            matrix<double,6,6> m(identity_matrix<double>(6)*4.5);\n\n            matrix<double> L = chol(m);\n            DLIB_TEST_MSG(equal(L*trans(L), m, 1e-10), L*trans(L)-m);\n\n            DLIB_TEST_MSG(equal(inv(m), inv_upper_triangular(trans(L))*inv_lower_triangular((L))), \"\") \n            DLIB_TEST_MSG(equal(round_zeros(inv_upper_triangular(trans(L))*trans(L),1e-10) , identity_matrix<double>(6), 1e-10),\n                         round_zeros(inv_upper_triangular(trans(L))*trans(L),1e-10)); \n            DLIB_TEST_MSG(equal(round_zeros(inv_lower_triangular((L))*(L),1e-10) ,identity_matrix<double>(6), 1e-10),\n                         round_zeros(inv_lower_triangular((L))*(L),1e-10)); \n\n        }\n\n        {\n\n            matrix<double,6,6> m(identity_matrix<double>(6)*4.5);\n            m(1,4) = 2;\n\n            DLIB_TEST_MSG(dlib::equal(inv_upper_triangular(m), inv(m),1e-10), inv_upper_triangular(m)-inv(m));\n            DLIB_TEST_MSG(dlib::equal(inv_lower_triangular(trans(m)), inv(trans(m)),1e-10), inv_lower_triangular(trans(m))-inv(trans(m)));\n\n        }\n\n        {\n            matrix<double> a;\n            matrix<float> b;\n            matrix<int> i;\n            a.set_size(1000,10);\n            b.set_size(1000,10);\n            i.set_size(1000,10);\n            dlib::rand rnd;\n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = rnd.get_random_double();\n                    b(r,c) = rnd.get_random_float();\n                    i(r,c) = r+c*r;\n                }\n            }\n\n            // make sure the multiply optimizations aren't messing things up\n            DLIB_TEST(trans(i)*i == tmp(trans(i)*i));\n            DLIB_TEST_MSG(equal(trans(a)*a , tmp(trans(a)*a), 1e-11),max(abs(trans(a)*a - tmp(trans(a)*a))));\n            DLIB_TEST_MSG(equal(trans(b)*b , tmp(trans(b)*b), 1e-3f),max(abs(trans(b)*b - tmp(trans(b)*b))));\n        }\n\n        {\n            matrix<int,4> i(4,1);\n            i(0) = 1;\n            i(1) = 2;\n            i(2) = 3;\n            i(3) = 4;\n            matrix<int,4,4> m;\n            set_all_elements(m,0);\n            m(0,0) = 1;\n            m(1,1) = 2;\n            m(2,2) = 3;\n            m(3,3) = 4;\n\n            DLIB_TEST(diagm(i) == m);\n        }\n\n        {\n            matrix<int,1,4> i;\n            i(0) = 1;\n            i(1) = 2;\n            i(2) = 3;\n            i(3) = 4;\n            matrix<int,4,4> m;\n            set_all_elements(m,0);\n            m(0,0) = 1;\n            m(1,1) = 2;\n            m(2,2) = 3;\n            m(3,3) = 4;\n\n            DLIB_TEST(diagm(i) == m);\n        }\n\n        {\n            matrix<int> i(4,1);\n            i(0) = 1;\n            i(1) = 2;\n            i(2) = 3;\n            i(3) = 4;\n            matrix<int> m(4,4);\n            set_all_elements(m,0);\n            m(0,0) = 1;\n            m(1,1) = 2;\n            m(2,2) = 3;\n            m(3,3) = 4;\n\n            DLIB_TEST(diagm(i) == m);\n        }\n\n        {\n            matrix<int> i(1,4);\n            i(0) = 1;\n            i(1) = 2;\n            i(2) = 3;\n            i(3) = 4;\n            matrix<int> m(4,4);\n            set_all_elements(m,0);\n            m(0,0) = 1;\n            m(1,1) = 2;\n            m(2,2) = 3;\n            m(3,3) = 4;\n\n            DLIB_TEST(diagm(i) == m);\n        }\n\n        {\n            DLIB_TEST(range(0,5).nc() == 6);\n            DLIB_TEST(range(1,5).nc() == 5);\n            DLIB_TEST(range(0,5).nr() == 1);\n            DLIB_TEST(range(1,5).nr() == 1);\n            DLIB_TEST(trans(range(0,5)).nr() == 6);\n            DLIB_TEST(trans(range(1,5)).nr() == 5);\n            DLIB_TEST(trans(range(0,5)).nc() == 1);\n            DLIB_TEST(trans(range(1,5)).nc() == 1);\n\n            DLIB_TEST(range(0,2,5).nc() == 3);\n            DLIB_TEST(range(1,2,5).nc() == 3);\n            DLIB_TEST(range(0,2,5).nr() == 1);\n            DLIB_TEST(range(1,2,5).nr() == 1);\n            DLIB_TEST(trans(range(0,2,5)).nr() == 3);\n            DLIB_TEST(trans(range(1,2,5)).nr() == 3);\n            DLIB_TEST(trans(range(0,2,5)).nc() == 1);\n            DLIB_TEST(trans(range(1,2,5)).nc() == 1);\n\n            DLIB_TEST(range(0,3,6).nc() == 3);\n            DLIB_TEST(range(1,3,5).nc() == 2);\n            DLIB_TEST(range(0,3,5).nr() == 1);\n            DLIB_TEST(range(1,3,5).nr() == 1);\n            DLIB_TEST(trans(range(0,3,6)).nr() == 3);\n            DLIB_TEST(trans(range(1,3,5)).nr() == 2);\n            DLIB_TEST(trans(range(0,3,5)).nc() == 1);\n            DLIB_TEST(trans(range(1,3,5)).nc() == 1);\n\n            DLIB_TEST(range(1,9,5).nc() == 1);\n            DLIB_TEST(range(1,9,5).nr() == 1);\n\n            DLIB_TEST(range(0,0).nc() == 1);\n            DLIB_TEST(range(0,0).nr() == 1);\n\n            DLIB_TEST(range(1,1)(0) == 1);\n\n            DLIB_TEST(range(0,5)(0) == 0 && range(0,5)(1) == 1 && range(0,5)(5) == 5);\n            DLIB_TEST(range(1,2,5)(0) == 1 && range(1,2,5)(1) == 3 && range(1,2,5)(2) == 5);\n            DLIB_TEST((range<0,5>()(0) == 0 && range<0,5>()(1) == 1 && range<0,5>()(5) == 5));\n            DLIB_TEST((range<1,2,5>()(0) == 1 && range<1,2,5>()(1) == 3 && range<1,2,5>()(2) == 5));\n\n\n            DLIB_TEST((range<0,5>().nc() == 6));\n            DLIB_TEST((range<1,5>().nc() == 5));\n            DLIB_TEST((range<0,5>().nr() == 1));\n            DLIB_TEST((range<1,5>().nr() == 1));\n            DLIB_TEST((trans(range<0,5>()).nr() == 6));\n            DLIB_TEST((trans(range<1,5>()).nr() == 5));\n            DLIB_TEST((trans(range<0,5>()).nc() == 1));\n            DLIB_TEST((trans(range<1,5>()).nc() == 1));\n\n            DLIB_TEST((range<0,2,5>().nc() == 3));\n            DLIB_TEST((range<1,2,5>().nc() == 3));\n            DLIB_TEST((range<0,2,5>().nr() == 1));\n            DLIB_TEST((range<1,2,5>().nr() == 1));\n            DLIB_TEST((trans(range<0,2,5>()).nr() == 3));\n            DLIB_TEST((trans(range<1,2,5>()).nr() == 3));\n            DLIB_TEST((trans(range<0,2,5>()).nc() == 1));\n            DLIB_TEST((trans(range<1,2,5>()).nc() == 1));\n\n            DLIB_TEST((range<0,3,6>().nc() == 3));\n            DLIB_TEST((range<1,3,5>().nc() == 2));\n            DLIB_TEST((range<0,3,5>().nr() == 1));\n            DLIB_TEST((range<1,3,5>().nr() == 1));\n            DLIB_TEST((trans(range<0,3,6>()).nr() == 3));\n            DLIB_TEST((trans(range<1,3,5>()).nr() == 2));\n            DLIB_TEST((trans(range<0,3,5>()).nc() == 1));\n            DLIB_TEST((trans(range<1,3,5>()).nc() == 1));\n        }\n\n        {\n            DLIB_TEST(range(5,0).nc() == 6);\n            DLIB_TEST(range(5,1).nc() == 5);\n            DLIB_TEST(range(5,0).nr() == 1);\n            DLIB_TEST(range(5,1).nr() == 1);\n            DLIB_TEST(trans(range(5,0)).nr() == 6);\n            DLIB_TEST(trans(range(5,1)).nr() == 5);\n            DLIB_TEST(trans(range(5,0)).nc() == 1);\n            DLIB_TEST(trans(range(5,1)).nc() == 1);\n\n            DLIB_TEST(range(5,2,0).nc() == 3);\n            DLIB_TEST(range(5,2,1).nc() == 3);\n            DLIB_TEST(range(5,2,0).nr() == 1);\n            DLIB_TEST(range(5,2,1).nr() == 1);\n            DLIB_TEST(trans(range(5,2,0)).nr() == 3);\n            DLIB_TEST(trans(range(5,2,1)).nr() == 3);\n            DLIB_TEST(trans(range(5,2,0)).nc() == 1);\n            DLIB_TEST(trans(range(5,2,1)).nc() == 1);\n\n            DLIB_TEST(range(6,3,0).nc() == 3);\n            DLIB_TEST(range(5,3,1).nc() == 2);\n            DLIB_TEST(range(5,3,0).nr() == 1);\n            DLIB_TEST(range(5,3,1).nr() == 1);\n            DLIB_TEST(trans(range(6,3,0)).nr() == 3);\n            DLIB_TEST(trans(range(5,3,1)).nr() == 2);\n            DLIB_TEST(trans(range(5,3,0)).nc() == 1);\n            DLIB_TEST(trans(range(5,3,1)).nc() == 1);\n\n            DLIB_TEST(range(5,9,1).nc() == 1);\n            DLIB_TEST(range(5,9,1).nr() == 1);\n\n            DLIB_TEST(range(0,0).nc() == 1);\n            DLIB_TEST(range(0,0).nr() == 1);\n\n            DLIB_TEST(range(1,1)(0) == 1);\n\n            DLIB_TEST(range(5,0)(0) == 5 && range(5,0)(1) == 4 && range(5,0)(5) == 0);\n            DLIB_TEST(range(5,2,1)(0) == 5 && range(5,2,1)(1) == 3 && range(5,2,1)(2) == 1);\n            DLIB_TEST((range<5,0>()(0) == 5 && range<5,0>()(1) == 4 && range<5,0>()(5) == 0));\n            DLIB_TEST((range<5,2,1>()(0) == 5 && range<5,2,1>()(1) == 3 && range<5,2,1>()(2) == 1));\n\n\n            DLIB_TEST((range<5,0>().nc() == 6));\n            DLIB_TEST((range<5,1>().nc() == 5));\n            DLIB_TEST((range<5,0>().nr() == 1));\n            DLIB_TEST((range<5,1>().nr() == 1));\n            DLIB_TEST((trans(range<5,0>()).nr() == 6));\n            DLIB_TEST((trans(range<5,1>()).nr() == 5));\n            DLIB_TEST((trans(range<5,0>()).nc() == 1));\n            DLIB_TEST((trans(range<5,1>()).nc() == 1));\n\n            DLIB_TEST((range<5,2,0>().nc() == 3));\n            DLIB_TEST((range<5,2,1>().nc() == 3));\n            DLIB_TEST((range<5,2,0>().nr() == 1));\n            DLIB_TEST((range<5,2,1>().nr() == 1));\n            DLIB_TEST((trans(range<5,2,0>()).nr() == 3));\n            DLIB_TEST((trans(range<5,2,1>()).nr() == 3));\n            DLIB_TEST((trans(range<5,2,0>()).nc() == 1));\n            DLIB_TEST((trans(range<5,2,1>()).nc() == 1));\n\n            DLIB_TEST((range<6,3,0>().nc() == 3));\n            DLIB_TEST((range<5,3,1>().nc() == 2));\n            DLIB_TEST((range<5,3,0>().nr() == 1));\n            DLIB_TEST((range<5,3,1>().nr() == 1));\n            DLIB_TEST((trans(range<6,3,0>()).nr() == 3));\n            DLIB_TEST((trans(range<5,3,1>()).nr() == 2));\n            DLIB_TEST((trans(range<5,3,0>()).nc() == 1));\n            DLIB_TEST((trans(range<5,3,1>()).nc() == 1));\n        }\n\n        {\n            matrix<double> m(4,3);\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c;\n                }\n            }\n\n            DLIB_TEST(subm(m,range(0,3),range(0,0)) == colm(m,0));\n            DLIB_TEST(subm(m,range(0,3),range(1,1)) == colm(m,1));\n            DLIB_TEST(subm(m,range(0,3),range(2,2)) == colm(m,2));\n\n            DLIB_TEST(subm(m,range(0,0),range(0,2)) == rowm(m,0));\n            DLIB_TEST(subm(m,range(1,1),range(0,2)) == rowm(m,1));\n            DLIB_TEST(subm(m,range(2,2),range(0,2)) == rowm(m,2));\n            DLIB_TEST(subm(m,range(3,3),range(0,2)) == rowm(m,3));\n\n            DLIB_TEST(subm(m,0,0,2,2) == subm(m,range(0,1),range(0,1)));\n            DLIB_TEST(subm(m,1,1,2,2) == subm(m,range(1,2),range(1,2)));\n\n            matrix<double,2,2> m2 = subm(m,range(0,2,2),range(0,2,2));\n\n            DLIB_TEST(m2(0,0) == m(0,0));\n            DLIB_TEST(m2(0,1) == m(0,2));\n            DLIB_TEST(m2(1,0) == m(2,0));\n            DLIB_TEST(m2(1,1) == m(2,2));\n\n\n        }\n        {\n            matrix<double,4,3> m(4,3);\n            for (long r = 0; r < m.nr(); ++r)\n            {\n                for (long c = 0; c < m.nc(); ++c)\n                {\n                    m(r,c) = r*c;\n                }\n            }\n\n            DLIB_TEST(subm(m,range<0,3>(),range<0,0>()) == colm(m,0));\n            DLIB_TEST(subm(m,range<0,3>(),range<1,1>()) == colm(m,1));\n            DLIB_TEST(subm(m,range<0,3>(),range<2,2>()) == colm(m,2));\n\n            DLIB_TEST(subm(m,range<0,0>(),range<0,2>()) == rowm(m,0));\n            DLIB_TEST(subm(m,range<1,1>(),range<0,2>()) == rowm(m,1));\n            DLIB_TEST(subm(m,range<2,2>(),range<0,2>()) == rowm(m,2));\n            DLIB_TEST(subm(m,range<3,3>(),range<0,2>()) == rowm(m,3));\n\n            DLIB_TEST(subm(m,0,0,2,2) == subm(m,range<0,1>(),range<0,1>()));\n            DLIB_TEST(subm(m,1,1,2,2) == subm(m,range<1,2>(),range<1,2>()));\n\n            matrix<double,2,2> m2 = subm(m,range<0,2,2>(),range<0,2,2>());\n\n            DLIB_TEST(m2(0,0) == m(0,0));\n            DLIB_TEST(m2(0,1) == m(0,2));\n            DLIB_TEST(m2(1,0) == m(2,0));\n            DLIB_TEST(m2(1,1) == m(2,2));\n\n\n        }\n\n        {\n            matrix<double,4,5> m;\n            set_subm(m, range(0,3), range(0,4)) = 4;\n            DLIB_TEST(min(m) == max(m) && min(m) == 4);\n\n            set_subm(m,range(1,1),range(0,4)) = 7;\n            DLIB_TEST((rowm(m,0) == uniform_matrix<double>(1,5, 4)));\n            DLIB_TEST((rowm(m,1) == uniform_matrix<double>(1,5, 7)));\n            DLIB_TEST((rowm(m,2) == uniform_matrix<double>(1,5, 4)));\n            DLIB_TEST((rowm(m,3) == uniform_matrix<double>(1,5, 4)));\n\n\n            set_subm(m, range(0,2,3), range(0,2,4)) = trans(subm(m,0,0,3,2));\n\n\n            DLIB_TEST(m(0,2) == 7);\n            DLIB_TEST(m(2,2) == 7);\n\n            DLIB_TEST(sum(m) == 7*5+ 7+7 +  4*(4*5 - 7));\n\n        }\n\n        {\n            matrix<double> mat(4,5);\n            DLIB_TEST((uniform_matrix<double>(4,5,1) == ones_matrix<double>(4,5)));\n            DLIB_TEST((uniform_matrix<double>(4,5,1) == ones_matrix(mat)));\n            DLIB_TEST((uniform_matrix<double>(4,5,0) == zeros_matrix<double>(4,5)));\n            DLIB_TEST((uniform_matrix<double>(4,5,0) == zeros_matrix(mat)));\n            DLIB_TEST((uniform_matrix<float>(4,5,1) == ones_matrix<float>(4,5)));\n            DLIB_TEST((uniform_matrix<float>(4,5,0) == zeros_matrix<float>(4,5)));\n            DLIB_TEST((uniform_matrix<complex<double> >(4,5,1) == ones_matrix<complex<double> >(4,5)));\n            DLIB_TEST((uniform_matrix<complex<double> >(4,5,0) == zeros_matrix<complex<double> >(4,5)));\n            DLIB_TEST((uniform_matrix<complex<float> >(4,5,1) == ones_matrix<complex<float> >(4,5)));\n            DLIB_TEST((uniform_matrix<complex<float> >(4,5,0) == zeros_matrix<complex<float> >(4,5)));\n            DLIB_TEST((complex_matrix(ones_matrix<double>(3,3), zeros_matrix<double>(3,3)) == complex_matrix(ones_matrix<double>(3,3))));\n            DLIB_TEST((pointwise_multiply(complex_matrix(ones_matrix<double>(3,3)), ones_matrix<double>(3,3)*2) ==\n                       complex_matrix(2*ones_matrix<double>(3,3))));\n        }\n\n        {\n            DLIB_TEST(( uniform_matrix<double>(303,303, 3)*identity_matrix<double>(303) == uniform_matrix<double,303,303>(3) ) );\n            DLIB_TEST(( uniform_matrix<double,303,303>(3)*identity_matrix<double,303>() == uniform_matrix<double,303,303>(3) ));\n        }\n\n        {\n            matrix<double> m(2,3);\n            m = 1,2,3,\n                5,6,7;\n\n            DLIB_TEST_MSG(m(0,0) == 1 && m(0,1) == 2 && m(0,2) == 3 &&\n                         m(1,0) == 5 && m(1,1) == 6 && m(1,2) == 7,\"\");\n\n            m = 4;\n            DLIB_TEST((m == uniform_matrix<double,2,3>(4)));\n\n            matrix<double,2,3> m2;\n            m2 = 1,2,3,\n                 5,6,7;\n            DLIB_TEST_MSG(m2(0,0) == 1 && m2(0,1) == 2 && m2(0,2) == 3 &&\n                         m2(1,0) == 5 && m2(1,1) == 6 && m2(1,2) == 7,\"\");\n\n            matrix<double,2,1> m3;\n            m3 = 1,\n                 5;\n            DLIB_TEST(m3(0) == 1 && m3(1) == 5 );\n\n            matrix<double,1,2> m4;\n            m4 = 1, 5;\n            DLIB_TEST(m3(0) == 1 && m3(1) == 5 );\n        }\n\n        {\n            matrix<double> m(4,1);\n            m = 3, 1, 5, 2;\n            DLIB_TEST(index_of_min(m) == 1);\n            DLIB_TEST(index_of_max(m) == 2);\n            DLIB_TEST(index_of_min(trans(m)) == 1);\n            DLIB_TEST(index_of_max(trans(m)) == 2);\n        }\n\n        {\n            matrix<double> m1(1,5), m2;\n\n            m1 = 3.0000,  3.7500,  4.5000,  5.2500,  6.0000; \n            m2 = linspace(3, 6, 5);\n\n            DLIB_TEST(equal(m1, m2));\n            \n            m1 = pow(10, m1);\n            m2 = logspace(3, 6, 5);\n\n            DLIB_TEST(equal(m1, m2));\n        }\n\n        {\n            matrix<long> m = cartesian_product(range(1,3), range(0,1));\n\n            matrix<long,2,1> c0, c1, c2, c3, c4, c5;\n            c0 = 1, 0;\n            c1 = 1, 1;\n            c2 = 2, 0;\n            c3 = 2, 1;\n            c4 = 3, 0;\n            c5 = 3, 1;\n\n            DLIB_TEST_MSG(colm(m,0) == c0, colm(m,0) << \"\\n\\n\" << c0);\n            DLIB_TEST(colm(m,1) == c1);\n            DLIB_TEST(colm(m,2) == c2);\n            DLIB_TEST(colm(m,3) == c3);\n            DLIB_TEST(colm(m,4) == c4);\n            DLIB_TEST(colm(m,5) == c5);\n        }\n\n\n        {\n            matrix<double> m(2,2), mr(2,2), mr_max(2,2);\n\n            m = 1, 2,\n                0, 4;\n\n            mr = 1, 1.0/2.0,\n                0,  1.0/4.0;\n\n            mr_max = 1, 1.0/2.0,\n                     std::numeric_limits<double>::max(),  1.0/4.0;\n\n            DLIB_TEST(equal(reciprocal(m), mr));\n            DLIB_TEST(equal(reciprocal_max(m), mr_max));\n\n        }\n\n        {\n            matrix<double> m1, m2;\n            m1.set_size(3,1);\n            m2.set_size(1,3);\n\n            m1 = 1,2,3;\n            m2 = 4,5,6;\n            DLIB_TEST(dot(m1, m2)               == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(m1, trans(m2))        == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(trans(m1), m2)        == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(trans(m1), trans(m2)) == 1*4 + 2*5 + 3*6);\n        }\n\n        {\n            matrix<double,3,1> m1, m2;\n            m1.set_size(3,1);\n            m2.set_size(3,1);\n\n            m1 = 1,2,3;\n            m2 = 4,5,6;\n            DLIB_TEST(dot(m1, m2)               == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(m1, trans(m2))        == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(trans(m1), m2)        == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(trans(m1), trans(m2)) == 1*4 + 2*5 + 3*6);\n        }\n        {\n            matrix<double,1,3> m1, m2;\n            m1.set_size(1,3);\n            m2.set_size(1,3);\n\n            m1 = 1,2,3;\n            m2 = 4,5,6;\n            DLIB_TEST(dot(m1, m2)               == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(m1, trans(m2))        == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(trans(m1), m2)        == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(trans(m1), trans(m2)) == 1*4 + 2*5 + 3*6);\n        }\n        {\n            matrix<double,1,3> m1;\n            matrix<double> m2;\n            m1.set_size(1,3);\n            m2.set_size(3,1);\n\n            m1 = 1,2,3;\n            m2 = 4,5,6;\n            DLIB_TEST(dot(m1, m2)               == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(m1, trans(m2))        == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(trans(m1), m2)        == 1*4 + 2*5 + 3*6);\n            DLIB_TEST(dot(trans(m1), trans(m2)) == 1*4 + 2*5 + 3*6);\n        }\n\n        {\n            matrix<double> m1(3,3), m2(3,3);\n\n            m1 = 1;\n            m2 = 1;\n            m1 = m1*subm(m2,0,0,3,3);\n            DLIB_TEST(is_finite(m1));\n        }\n        {\n            matrix<double,3,1> m1;\n            matrix<double> m2(3,3);\n\n            m1 = 1;\n            m2 = 1;\n            m1 = subm(m2,0,0,3,3)*m1;\n        }\n\n        {\n            matrix<int> m(2,1);\n\n            m = 3,3;\n            m /= m(0);\n\n            DLIB_TEST(m(0) == 1);\n            DLIB_TEST(m(1) == 1);\n        }\n        {\n            matrix<int> m(2,1);\n\n            m = 3,3;\n            m *= m(0);\n\n            DLIB_TEST(m(0) == 9);\n            DLIB_TEST(m(1) == 9);\n        }\n        {\n            matrix<int> m(2,1);\n\n            m = 3,3;\n            m -= m(0);\n\n            DLIB_TEST(m(0) == 0);\n            DLIB_TEST(m(1) == 0);\n        }\n        {\n            matrix<int> m(2,1);\n\n            m = 3,3;\n            m += m(0);\n\n            DLIB_TEST(m(0) == 6);\n            DLIB_TEST(m(1) == 6);\n            DLIB_TEST(is_finite(m));\n        }\n\n\n        {\n            matrix<double> m(3,3);\n            m = 3;\n            m(1,1) = std::numeric_limits<double>::infinity();\n            DLIB_TEST(is_finite(m) == false);\n            m(1,1) = -std::numeric_limits<double>::infinity();\n            DLIB_TEST(is_finite(m) == false);\n            m(1,1) = 2;\n            DLIB_TEST(is_finite(m));\n        }\n\n        {\n            matrix<int> m(4,1), mm, mmm;\n\n            mmm = mm = (m = 1,2,3,4);\n            DLIB_TEST(m(0) == 1);\n            DLIB_TEST(m(1) == 2);\n            DLIB_TEST(m(2) == 3);\n            DLIB_TEST(m(3) == 4);\n            DLIB_TEST(mm == m);\n            DLIB_TEST(mmm == m);\n            DLIB_TEST(mm(0) == 1);\n            DLIB_TEST(mm(1) == 2);\n            DLIB_TEST(mm(2) == 3);\n            DLIB_TEST(mm(3) == 4);\n        }\n\n\n    }\n\n\n\n\n\n\n    class matrix_tester : public tester\n    {\n    public:\n        matrix_tester (\n        ) :\n            tester (\"test_matrix\",\n                    \"Runs tests on the matrix component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            matrix_test();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/matrix2.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n\n#include \"tester.h\"\n#include <dlib/memory_manager_stateless.h>\n#include <dlib/array2d.h>\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.matrix2\");\n\n    dlib::rand rnd;\n\n    void matrix_test (\n    )\n    /*!\n        ensures\n            - runs tests on the matrix stuff compliance with the specs\n    !*/\n    {        \n        typedef memory_manager_stateless<char>::kernel_2_2a MM;\n        print_spinner();\n\n        const double ident[] = {\n            1, 0, 0, 0,\n            0, 1, 0, 0,\n            0, 0, 1, 0,\n            0, 0, 0, 1 };\n\n        const double uniform3[] = {\n            3, 3, 3, 3,\n            3, 3, 3, 3,\n            3, 3, 3, 3,\n            3, 3, 3, 3 \n        };\n\n        const double uniform1[] = {\n            1, 1, 1, 1,\n            1, 1, 1, 1,\n            1, 1, 1, 1,\n            1, 1, 1, 1 \n        };\n\n        const double uniform0[] = {\n            0, 0, 0, 0,\n            0, 0, 0, 0,\n            0, 0, 0, 0,\n            0, 0, 0, 0 \n        };\n\n        const int array[] = {\n            42, 58, 9, 1,\n            9, 5, 8, 2,\n            98, 28, 4, 77, \n            9, 2, 44, 88 };\n\n        const int array2[] = {\n            1, 22, 3,\n            4, 52, 6,\n            7, 8, 9 };\n\n        const int array2_r[] = {\n            52, 6, 4,\n            8, 9, 7,\n            22, 3, 1\n        };\n\n        const double array_f[] = {\n            -0.99, \n            0.99};\n\n\n        matrix<double,2,1,MM> fm(array_f);\n\n        DLIB_TEST(fm.size() == 2);\n        matrix<double> dfm(fm);\n        DLIB_TEST(round(fm)(0) == -1);\n        DLIB_TEST(round(fm)(1) == 1);\n        DLIB_TEST(round(dfm)(0) == -1);\n        DLIB_TEST(round(dfm)(1) == 1);\n        DLIB_TEST(round(dfm).size() == dfm.size());\n\n\n        const int array3[] = { 1, 2, 3, 4 };\n\n        matrix<double,3,3,MM> m3(array2);\n        matrix<double> dm3;\n        DLIB_TEST(dm3.size() == 0);\n        DLIB_TEST(dm3.nr() == 0);\n        DLIB_TEST(dm3.nc() == 0);\n        dm3.set_size(3,4);\n        DLIB_TEST(dm3.nr() == 3);\n        DLIB_TEST(dm3.nc() == 4);\n        DLIB_TEST(dm3.size() == 3*4);\n        dm3.set_size(3,3);\n        DLIB_TEST(dm3.nr() == 3);\n        DLIB_TEST(dm3.nc() == 3);\n        dm3 = m3;\n        dm3(0,0)++;\n        DLIB_TEST( dm3 != m3);\n        dm3 = m3;\n        DLIB_TEST( dm3 == m3);\n        DLIB_TEST( abs(sum(squared(normalize(dm3))) - 1.0) < 1e-10);\n\n        matrix<double,3,4> mrc;\n        mrc.set_size(3,4);\n\n        set_all_elements(mrc,1);\n\n        DLIB_TEST(diag(mrc) == uniform_matrix<double>(3,1,1));\n        DLIB_TEST(diag(matrix<double>(mrc)) == uniform_matrix<double>(3,1,1));\n\n        matrix<double,2,3> mrc2;\n        set_all_elements(mrc2,1);\n        DLIB_TEST((removerc<1,1>(mrc) == mrc2));\n        DLIB_TEST((removerc(mrc,1,1) == mrc2));\n\n        matrix<int,3,3> m4, m5, m6;\n        set_all_elements(m4, 4);\n        set_all_elements(m5, 4);\n        set_all_elements(m6, 1);\n\n        DLIB_TEST(squared(m4) == pointwise_multiply(m4,m4));\n        DLIB_TEST(cubed(m4) == pointwise_multiply(m4,m4,m4));\n        DLIB_TEST(pow(matrix_cast<double>(m4),2) == squared(matrix_cast<double>(m4)));\n        DLIB_TEST(pow(matrix_cast<double>(m4),3) == cubed(matrix_cast<double>(m4)));\n\n        matrix<int> dm4;\n        matrix<int,0,0,memory_manager_stateless<char>::kernel_2_2a> dm5;\n        dm4 = dm4;\n        dm4 = dm5;\n        DLIB_TEST(dm4.nr() == 0);\n        dm4 = m4;\n        dm5 = m5;\n        DLIB_TEST(dm4 == dm5);\n\n\n        DLIB_TEST(m4 == m5);\n        DLIB_TEST(m6 != m5);\n        m4.swap(m6);\n        DLIB_TEST(m6 == m5);\n        DLIB_TEST(m4 != m5);\n\n        DLIB_TEST(m3.nr() == 3);\n        DLIB_TEST(m3.nc() == 3);\n\n        matrix<double,4,1> v(array3), v2;\n        DLIB_TEST(v.nr() == 4);\n        DLIB_TEST(v.nc() == 1);\n\n        std::vector<double> stdv(4);\n        std_vector_c<double> stdv_c(4);\n        dlib::array<double> arr;\n        arr.resize(4);\n        for (long i = 0; i < 4; ++i)\n            stdv[i] = stdv_c[i] = arr[i] = i+1;\n\n        DLIB_TEST(mat(stdv)(0) == 1);\n        DLIB_TEST(mat(stdv)(1) == 2);\n        DLIB_TEST(mat(stdv)(2) == 3);\n        DLIB_TEST(mat(stdv)(3) == 4);\n        DLIB_TEST(mat(stdv).nr() == 4);\n        DLIB_TEST(mat(stdv).nc() == 1);\n        DLIB_TEST(mat(stdv).size() == 4);\n        DLIB_TEST(equal(trans(mat(stdv))*mat(stdv), trans(v)*v));\n        DLIB_TEST(equal(trans(mat(stdv))*mat(stdv), tmp(trans(v)*v)));\n\n        DLIB_TEST(mat(stdv_c)(0) == 1);\n        DLIB_TEST(mat(stdv_c)(1) == 2);\n        DLIB_TEST(mat(stdv_c)(2) == 3);\n        DLIB_TEST(mat(stdv_c)(3) == 4);\n        DLIB_TEST(mat(stdv_c).nr() == 4);\n        DLIB_TEST(mat(stdv_c).nc() == 1);\n        DLIB_TEST(mat(stdv_c).size() == 4);\n        DLIB_TEST(equal(trans(mat(stdv_c))*mat(stdv_c), trans(v)*v));\n\n        DLIB_TEST(mat(arr)(0) == 1);\n        DLIB_TEST(mat(arr)(1) == 2);\n        DLIB_TEST(mat(arr)(2) == 3);\n        DLIB_TEST(mat(arr)(3) == 4);\n        DLIB_TEST(mat(arr).nr() == 4);\n        DLIB_TEST(mat(arr).nc() == 1);\n        DLIB_TEST(mat(arr).size() == 4);\n        DLIB_TEST(equal(trans(mat(arr))*mat(arr), trans(v)*v));\n\n        DLIB_TEST(v(0) == 1);\n        DLIB_TEST(v(1) == 2);\n        DLIB_TEST(v(2) == 3);\n        DLIB_TEST(v(3) == 4);\n        matrix<double> dv = v;\n        DLIB_TEST((trans(v)*v).size() == 1);\n        DLIB_TEST((trans(v)*v).nr() == 1);\n        DLIB_TEST((trans(v)*dv).nr() == 1);\n        DLIB_TEST((trans(dv)*dv).nr() == 1);\n        DLIB_TEST((trans(dv)*v).nr() == 1);\n        DLIB_TEST((trans(v)*v).nc() == 1);\n        DLIB_TEST((trans(v)*dv).nc() == 1);\n        DLIB_TEST((trans(dv)*dv).nc() == 1);\n        DLIB_TEST((trans(dv)*v).nc() == 1);\n        DLIB_TEST((trans(v)*v)(0) == 1*1 + 2*2 + 3*3 + 4*4);\n        DLIB_TEST((trans(dv)*v)(0) == 1*1 + 2*2 + 3*3 + 4*4);\n        DLIB_TEST((trans(dv)*dv)(0) == 1*1 + 2*2 + 3*3 + 4*4);\n        DLIB_TEST((trans(v)*dv)(0) == 1*1 + 2*2 + 3*3 + 4*4);\n\n        dv = trans(dv)*v;\n        DLIB_TEST(dv.nr() == 1);\n        DLIB_TEST(dv.nc() == 1);\n\n        dm3 = m3;\n        DLIB_TEST(floor(det(m3)+0.01) == -444);\n        DLIB_TEST(floor(det(dm3)+0.01) == -444);\n        DLIB_TEST(min(m3) == 1);\n        DLIB_TEST(min(dm3) == 1);\n        DLIB_TEST(max(m3) == 52);\n        DLIB_TEST(max(dm3) == 52);\n        DLIB_TEST(sum(m3) == 112);\n        DLIB_TEST(sum(dm3) == 112);\n        DLIB_TEST(prod(m3) == 41513472);\n        DLIB_TEST(prod(dm3) == 41513472);\n        DLIB_TEST(prod(diag(m3)) == 1*52*9);\n        DLIB_TEST(prod(diag(dm3)) == 1*52*9);\n        DLIB_TEST(sum(diag(m3)) == 1+52+9);\n        DLIB_TEST(sum(diag(dm3)) == 1+52+9);\n        DLIB_TEST(equal(round(10000*m3*inv(m3))/10000 , identity_matrix<double,3>()));\n        DLIB_TEST(equal(round(10000*dm3*inv(m3))/10000 , identity_matrix<double,3>()));\n        DLIB_TEST(equal(round(10000*dm3*inv(dm3))/10000 , identity_matrix<double,3>()));\n        DLIB_TEST(equal(round(10000*m3*inv(dm3))/10000 , identity_matrix<double,3>()));\n        DLIB_TEST(equal(round(10000*tmp(m3*inv(m3)))/10000 , identity_matrix<double,3>()));\n        DLIB_TEST(equal(round(10000*tmp(dm3*inv(m3)))/10000 , identity_matrix<double,3>()));\n        DLIB_TEST(equal(round(10000*tmp(dm3*inv(dm3)))/10000 , identity_matrix<double,3>()));\n        DLIB_TEST(equal(round(10000*tmp(m3*inv(dm3)))/10000 , identity_matrix<double,3>()));\n        DLIB_TEST(-1*m3 == -m3);\n        DLIB_TEST(-1*dm3 == -m3);\n        DLIB_TEST(-1*m3 == -dm3);\n        DLIB_TEST(-1*dm3 == -dm3);\n\n        DLIB_TEST(m3 == dm3);\n        m3(1,1) = 99;\n        DLIB_TEST(m3 != dm3);\n        m3 = dm3;\n        DLIB_TEST(m3 == dm3);\n\n        matrix<double,4,4,MM> mident(ident);\n        matrix<double,4,4> muniform0(uniform0);\n        matrix<double,4,4> muniform1(uniform1);\n        matrix<double,4,4> muniform3(uniform3);\n        matrix<double,4,4> m1(array), m2;\n        DLIB_TEST(m1.nr() == 4);\n        DLIB_TEST(m1.nc() == 4);\n\n        DLIB_TEST(muniform1 + muniform1 + muniform1 == muniform3);\n        DLIB_TEST(muniform1*2 + muniform1 + muniform1 - muniform1 == muniform3);\n        DLIB_TEST(2*muniform1 + muniform1 + muniform1 - muniform1 == muniform3);\n        DLIB_TEST(muniform1 + muniform1 + muniform1 - muniform3 == muniform0);\n        DLIB_TEST(equal(muniform3/3 , muniform1));\n        DLIB_TEST(v != m1);\n        DLIB_TEST(v == v);\n        DLIB_TEST(m1 == m1);\n\n        muniform0.swap(muniform1);\n        DLIB_TEST((muniform1 == matrix_cast<double>(uniform_matrix<long,4,4,0>())));\n        DLIB_TEST((muniform0 == matrix_cast<double>(uniform_matrix<long,4,4,1>())));\n        DLIB_TEST((muniform1 == matrix_cast<double>(uniform_matrix<long>(4,4,0))));\n        DLIB_TEST((muniform0 == matrix_cast<double>(uniform_matrix<long>(4,4,1))));\n        swap(muniform0,muniform1);\n\n        DLIB_TEST((mident == identity_matrix<double,4>()));\n        DLIB_TEST((muniform0 == matrix_cast<double>(uniform_matrix<long,4,4,0>())));\n        DLIB_TEST((muniform1 == matrix_cast<double>(uniform_matrix<long,4,4,1>())));\n        DLIB_TEST((muniform3 == matrix_cast<double>(uniform_matrix<long,4,4,3>())));\n        DLIB_TEST((muniform1*8 == matrix_cast<double>(uniform_matrix<long,4,4,8>())));\n\n        set_all_elements(m2,7);\n        DLIB_TEST(m2 == muniform1*7);\n        m2 = array;\n        DLIB_TEST(m2 == m1);\n\n        const double m1inv[] = {\n            -0.00946427624, 0.0593272941,  0.00970564379,  -0.00973323731, \n            0.0249312057,   -0.0590122427, -0.00583102756, 0.00616002729, \n            -0.00575431149, 0.110081189,   -0.00806792253, 0.00462297692, \n            0.00327847478,  -0.0597669712, 0.00317386196,  0.00990759201 \n        };\n\n        m2 = m1inv;\n        DLIB_TEST((round(m2*m1) == identity_matrix<double,4>()));\n        DLIB_TEST((round(tmp(m2*m1)) == identity_matrix<double,4>()));\n\n        DLIB_TEST_MSG(round(m2*10000) == round(inv(m1)*10000),\n                     round(m2*10000) - round(inv(m1)*10000)\n                     << \"\\n\\n\" << round(m2*10000)\n                     << \"\\n\\n\" << round(inv(m1)*10000)\n                     << \"\\n\\n\" << m2 \n                     << \"\\n\\n\" << inv(m1) \n                     );\n        DLIB_TEST(m1 == abs(-1*m1));\n        DLIB_TEST(abs(m2) == abs(-1*m2));\n\n        DLIB_TEST_MSG(floor(det(m1)+0.01) == 3297875,\"\\nm1: \\n\" << m1 << \"\\ndet(m1): \" << det(m1));\n\n\n        ostringstream sout;\n        m1 = m2;\n        serialize(m1,sout);\n        set_all_elements(m1,0);\n        istringstream sin(sout.str());\n        deserialize(m1,sin);\n        DLIB_TEST_MSG(round(100000*m1) == round(100000*m2),\"m1: \\n\" << m1 << endl << \"m2: \\n\" << m2);\n\n\n        set_all_elements(v,2);\n        v2 =  pointwise_multiply(v, v*2);\n        set_all_elements(v,8);\n        DLIB_TEST(v == v2);\n        DLIB_TEST(v == tmp(v2));\n        DLIB_TEST((v == rotate<2,0>(v))); \n\n        m4 = array2;\n        m5 = array2_r;\n        DLIB_TEST((m5 == rotate<1,1>(m4)));\n\n        m5 = array2;\n        DLIB_TEST((m5*2 == pointwise_multiply(m5,uniform_matrix<int,3,3,2>())));\n        DLIB_TEST((tmp(m5*2) == tmp(pointwise_multiply(m5,uniform_matrix<int,3,3,2>()))));\n\n        v = tmp(v);\n\n\n\n\n        matrix<double> dm10(10,5);\n        DLIB_TEST(dm10.nr() == 10);\n        DLIB_TEST(dm10.nc() == 5);\n        set_all_elements(dm10,4);\n        DLIB_TEST(dm10.nr() == 10);\n        DLIB_TEST(dm10.nc() == 5);\n        matrix<double,10,5> m10;\n        DLIB_TEST(m10.nr() == 10);\n        DLIB_TEST(m10.nc() == 5);\n        set_all_elements(m10,4);\n        DLIB_TEST(dm10 == m10);\n        DLIB_TEST((clamp<0,3>(dm10) == clamp<0,3>(m10)));\n        DLIB_TEST((clamp<0,3>(dm10)(0,2) == 3));\n\n        set_all_elements(dm10,1);\n        set_all_elements(m10,4);\n        DLIB_TEST(4*dm10 == m10);\n        DLIB_TEST(5*dm10 - dm10 == m10);\n        DLIB_TEST((16*dm10)/4 == m10);\n        DLIB_TEST(dm10+dm10+2*dm10 == m10);\n        DLIB_TEST(dm10+tmp(dm10+2*dm10) == m10);\n        set_all_elements(dm10,4);\n        DLIB_TEST(dm10 == m10);\n        DLIB_TEST_MSG(sum(abs(sigmoid(dm10) -sigmoid(m10))) < 1e-10,sum(abs(sigmoid(dm10) -sigmoid(m10))) );\n\n        {\n            matrix<double,2,1> x, l, u, out;\n            x = 3,4;\n\n            l = 1,1;\n            u = 2,2.2;\n\n            out = 2, 2.2;\n            DLIB_TEST(equal(clamp(x, l, u) , out));\n            out = 3, 2.2;\n            DLIB_TEST(!equal(clamp(x, l, u) , out));\n            out = 2, 4.2;\n            DLIB_TEST(!equal(clamp(x, l, u) , out));\n\n            x = 1.5, 1.5;\n            out = x;\n            DLIB_TEST(equal(clamp(x, l, u) , out));\n\n            x = 0.5, 1.5;\n            out = 1, 1.5;\n            DLIB_TEST(equal(clamp(x, l, u) , out));\n\n            x = 1.5, 0.5;\n            out = 1.5, 1.0;\n            DLIB_TEST(equal(clamp(x, l, u) , out));\n\n        }\n\n        matrix<double, 7, 7,MM,column_major_layout> m7;\n        matrix<double> dm7(7,7);\n        dm7 = randm(7,7, rnd);\n        m7 = dm7;\n\n        DLIB_TEST_MSG(max(abs(dm7*inv(dm7) - identity_matrix<double>(7))) < 1e-12, max(abs(dm7*inv(dm7) - identity_matrix<double>(7))));\n        DLIB_TEST(equal(inv(dm7),  inv(m7)));\n        DLIB_TEST(abs(det(dm7) - det(m7)) < 1e-14);\n        DLIB_TEST(abs(min(dm7) - min(m7)) < 1e-14);\n        DLIB_TEST(abs(max(dm7) - max(m7)) < 1e-14);\n        DLIB_TEST_MSG(abs(sum(dm7) - sum(m7)) < 1e-14,sum(dm7) - sum(m7));\n        DLIB_TEST(abs(prod(dm7) -prod(m7)) < 1e-14);\n        DLIB_TEST(equal(diag(dm7) , diag(m7)));\n        DLIB_TEST(equal(trans(dm7) , trans(m7)));\n        DLIB_TEST(equal(abs(dm7) , abs(m7)));\n        DLIB_TEST(equal(round(dm7) , round(m7)));\n        DLIB_TEST(matrix_cast<int>(dm7) == matrix_cast<int>(m7));\n        DLIB_TEST((rotate<2,3>(dm7) == rotate<2,3>(m7)));\n        DLIB_TEST((sum(pointwise_multiply(dm7,dm7) - pointwise_multiply(m7,m7))) < 1e-10);\n        DLIB_TEST((sum(pointwise_multiply(dm7,dm7,dm7) - pointwise_multiply(m7,m7,m7))) < 1e-10);\n        DLIB_TEST_MSG((sum(pointwise_multiply(dm7,dm7,dm7,dm7) - pointwise_multiply(m7,m7,m7,m7))) < 1e-10,\n                     (sum(pointwise_multiply(dm7,dm7,dm7,dm7) - pointwise_multiply(m7,m7,m7,m7)))\n        );\n\n\n        matrix<double> temp(5,5);\n        matrix<double> dsm(5,5);\n        matrix<double,5,5,MM> sm;\n\n        set_all_elements(dsm,1);\n        set_all_elements(sm,1);\n        set_all_elements(temp,1);\n\n        dsm += dsm;\n        sm += sm;\n        DLIB_TEST(dsm == 2*temp);\n        DLIB_TEST(sm == 2*temp);\n        temp = dsm*sm + dsm;\n        dsm += dsm*sm;\n        DLIB_TEST_MSG(temp == dsm,temp - dsm);\n\n        set_all_elements(dsm,1);\n        set_all_elements(sm,1);\n        set_all_elements(temp,1);\n\n        dsm += dsm;\n        sm += sm;\n        DLIB_TEST(dsm == 2*temp);\n        DLIB_TEST(sm == 2*temp);\n        temp = dsm*sm + dsm;\n        sm += dsm*sm;\n        DLIB_TEST_MSG(temp == sm,temp - sm);\n\n        set_all_elements(dsm,1);\n        set_all_elements(sm,1);\n        set_all_elements(temp,1);\n\n        dsm += dsm;\n        sm += sm;\n        DLIB_TEST(dsm == 2*temp);\n        DLIB_TEST(sm == 2*temp);\n        temp = sm - dsm*sm ;\n        sm -= dsm*sm;\n        DLIB_TEST_MSG(temp == sm,temp - sm);\n\n        set_all_elements(dsm,1);\n        set_all_elements(sm,1);\n        set_all_elements(temp,1);\n\n        dsm += dsm;\n        sm += sm;\n        DLIB_TEST(dsm == 2*temp);\n        DLIB_TEST(sm == 2*temp);\n        temp = dsm - dsm*sm ;\n        dsm -= dsm*sm;\n        DLIB_TEST_MSG(temp == dsm,temp - dsm);\n\n        set_all_elements(dsm,1);\n        set_all_elements(sm,1);\n        set_all_elements(temp,2);\n\n        dsm *= 2;\n        sm *= 2;\n        DLIB_TEST(dsm == temp);\n        DLIB_TEST(sm == temp);\n        dsm /= 2;\n        sm /= 2;\n        DLIB_TEST(dsm == temp/2);\n        DLIB_TEST(sm == temp/2);\n\n        dsm += dsm;\n        sm += sm;\n        DLIB_TEST(dsm == temp);\n        DLIB_TEST(sm == temp);\n        dsm += sm;\n        sm += dsm;\n        DLIB_TEST(dsm == 2*temp);\n        DLIB_TEST(sm == temp*3);\n        dsm -= sm;\n        sm -= dsm;\n        DLIB_TEST(dsm == -temp);\n        DLIB_TEST(sm == 4*temp);\n        sm -= sm;\n        dsm -= dsm;\n        DLIB_TEST(dsm == 0*temp);\n        DLIB_TEST(sm == 0*temp);\n\n        set_all_elements(dsm,1);\n        set_all_elements(sm,1);\n        set_all_elements(temp,3);\n        dsm += sm+sm;\n        DLIB_TEST(dsm == temp);\n\n        set_all_elements(dsm,1);\n        set_all_elements(sm,1);\n        set_all_elements(temp,-1);\n        dsm -= sm+sm;\n        DLIB_TEST(dsm == temp);\n\n        set_all_elements(dsm,1);\n        set_all_elements(sm,1);\n        set_all_elements(temp,-1);\n        sm -= dsm+dsm;\n        DLIB_TEST(sm == temp);\n\n        set_all_elements(dsm,1);\n        set_all_elements(sm,1);\n        set_all_elements(temp,3);\n        sm += dsm+dsm;\n        DLIB_TEST(sm == temp);\n\n\n\n        // test the implicit conversion to bool stuff\n        {\n            matrix<float> bt1(3,1);\n            matrix<float,3,1> bt2;\n            set_all_elements(bt1,2);\n            set_all_elements(bt2,3);\n\n\t\t\tfloat val = trans(bt1)*bt2;\n            DLIB_TEST((float)(trans(bt1)*bt2) == 18);\n            DLIB_TEST((float)(trans(bt1)*bt2) != 19);\n\t\t\tDLIB_TEST(val == 18);\n        }\n        {\n            matrix<float,3,1> bt1;\n            matrix<float> bt2(3,1);\n            set_all_elements(bt1,2);\n            set_all_elements(bt2,3);\n\n\t\t\tfloat val = trans(bt1)*bt2;\n            DLIB_TEST((float)(trans(bt1)*bt2) == 18);\n            DLIB_TEST((float)(trans(bt1)*bt2) != 19);\n\t\t\tDLIB_TEST(val == 18);\n        }\n        {\n            matrix<float> bt1(3,1);\n            matrix<float> bt2(3,1);\n            set_all_elements(bt1,2);\n            set_all_elements(bt2,3);\n\n\t\t\tfloat val = trans(bt1)*bt2;\n            DLIB_TEST((float)(trans(bt1)*bt2) == 18);\n            DLIB_TEST((float)(trans(bt1)*bt2) != 19);\n\t\t\tDLIB_TEST(val == 18);\n        }\n        {\n            matrix<float,3,1> bt1;\n            matrix<float,3,1> bt2;\n            set_all_elements(bt1,2);\n            set_all_elements(bt2,3);\n\n\t\t\tfloat val = trans(bt1)*bt2;\n            DLIB_TEST((float)(trans(bt1)*bt2) == 18);\n            DLIB_TEST((float)(trans(bt1)*bt2) != 19);\n\t\t\tDLIB_TEST(val == 18);\n        }\n\n\n\n\n        {\n            srand(423452);\n            const long M = 50;\n            const long N = 40;\n\n            matrix<double> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double> u, u2;  \n            matrix<double> q, q2;\n            matrix<double> v, v2;\n\n            matrix<double> a2;  \n            a2 = tmp(a/2);\n\n\n            svd2(true,true,a2+a2,u,q,v);\n\n            double err = max(abs(a - subm(u,get_rect(a2+a2))*diagm(q)*trans(v)));\n            DLIB_TEST_MSG( err < 1e-11,\"err: \" << err);\n            using dlib::equal;\n            DLIB_TEST((equal(trans(u)*u , identity_matrix<double,M>(), 1e-10)));\n            DLIB_TEST((equal(trans(v)*v , identity_matrix<double,N>(), 1e-10)));\n\n            svd2(false,true,a2+a2,u,q,v2);\n            svd2(true,false,a2+a2,u2,q,v);\n            svd2(false,false,a2+a2,u,q2,v);\n\n            err = max(abs(a - subm(u2,get_rect(a2+a2))*diagm(q2)*trans(v2)));\n            DLIB_TEST_MSG( err < 1e-11,\"err: \" << err);\n            DLIB_TEST((equal(trans(u2)*u2 , identity_matrix<double,M>(), 1e-10)));\n            DLIB_TEST((equal(trans(v2)*v2 , identity_matrix<double,N>(), 1e-10)));\n\n        }\n\n\n        {\n            srand(423452);\n            const long M = 3;\n            const long N = 3;\n\n            matrix<double> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double,M,M> u, u2;  \n            matrix<double> q, q2;\n            matrix<double,N,N> v, v2;\n\n            matrix<double,M,N,MM> a2;  \n            a2 = tmp(a/2);\n\n\n            svd2(true,true,a2+a2,u,q,v);\n\n            double err = max(abs(a - subm(u,get_rect(a2+a2))*diagm(q)*trans(v)));\n            DLIB_TEST_MSG( err < 1e-11,\"err: \" << err);\n            using dlib::equal;\n            DLIB_TEST((equal(trans(u)*u , identity_matrix<double,M>(), 1e-10)));\n            DLIB_TEST((equal(trans(v)*v , identity_matrix<double,N>(), 1e-10)));\n\n            svd2(false,true,a2+a2,u,q,v2);\n            svd2(true,false,a2+a2,u2,q,v);\n            svd2(false,false,a2+a2,u,q2,v);\n\n            err = max(abs(a - subm(u2,get_rect(a2+a2))*diagm(q2)*trans(v2)));\n            DLIB_TEST_MSG( err < 1e-11,\"err: \" << err);\n            DLIB_TEST((equal(trans(u2)*u2 , identity_matrix<double,M>(), 1e-10)));\n            DLIB_TEST((equal(trans(v2)*v2 , identity_matrix<double,N>(), 1e-10)));\n\n        }\n\n        {\n            srand(423452);\n            const long M = 3;\n            const long N = 3;\n\n\n            matrix<double,0,0,default_memory_manager, column_major_layout> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double,M,M,default_memory_manager, column_major_layout> u, u2;  \n            matrix<double,0,0,default_memory_manager, column_major_layout> q, q2;\n            matrix<double,N,N,default_memory_manager, column_major_layout> v, v2;\n\n            matrix<double,M,N,MM, column_major_layout> a2;  \n            a2 = tmp(a/2);\n\n\n            svd2(true,true,a2+a2,u,q,v);\n\n            double err = max(abs(a - subm(u,get_rect(a2+a2))*diagm(q)*trans(v)));\n            DLIB_TEST_MSG( err < 1e-11,\"err: \" << err);\n            using dlib::equal;\n            DLIB_TEST((equal(trans(u)*u , identity_matrix<double,M>(), 1e-10)));\n            DLIB_TEST((equal(trans(v)*v , identity_matrix<double,N>(), 1e-10)));\n\n            svd2(false,true,a2+a2,u,q,v2);\n            svd2(true,false,a2+a2,u2,q,v);\n            svd2(false,false,a2+a2,u,q2,v);\n\n            err = max(abs(a - subm(u2,get_rect(a2+a2))*diagm(q2)*trans(v2)));\n            DLIB_TEST_MSG( err < 1e-11,\"err: \" << err);\n            DLIB_TEST((equal(trans(u2)*u2 , identity_matrix<double,M>(), 1e-10)));\n            DLIB_TEST((equal(trans(v2)*v2 , identity_matrix<double,N>(), 1e-10)));\n\n        }\n\n\n\n        {\n            srand(423452);\n            const long M = 10;\n            const long N = 7;\n\n            matrix<double> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double,M,M> u;  \n            matrix<double> q;\n            matrix<double,N,N> v;\n\n            matrix<double,M,N,MM> a2;  \n            a2 = tmp(a/2);\n\n\n            svd2(true,true,a2+a2,u,q,v);\n\n            double err = sum(round(1e10*(a - subm(u,get_rect(a2+a2))*diagm(q)*trans(v))));\n            DLIB_TEST_MSG(  err == 0,\"err: \" << err);\n            DLIB_TEST((round(1e10*trans(u)*u)  == 1e10*identity_matrix<double,M>()));\n            DLIB_TEST((round(1e10*trans(v)*v)  == 1e10*identity_matrix<double,N>()));\n        }\n\n\n        {\n            srand(423452);\n            const long M = 10;\n            const long N = 7;\n\n            matrix<double> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double,M> u(M,N);  \n            matrix<double> w;\n            matrix<double,N,N> v(N,N);\n\n            matrix<double,M,N,MM> a2;  \n            a2 = tmp(a/2);\n\n\n            svd(a2+a2,u,w,v);\n\n            DLIB_TEST(  sum(round(1e10*(a - u*w*trans(v)))) == 0);\n            DLIB_TEST((round(1e10*trans(u)*u)  == 1e10*identity_matrix<double,N>()));\n            DLIB_TEST((round(1e10*trans(v)*v)  == 1e10*identity_matrix<double,N>()));\n        }\n\n        {\n            srand(423452);\n            const long M = 1;\n            const long N = 1;\n\n            matrix<double> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double,M,N> u;  \n            matrix<double> w;\n            matrix<double,N,N> v;\n\n            matrix<double,M,N> a2;  \n            a2 = 0;\n            a2 = tmp(a/2);\n\n\n            svd(a2+a2,u,w,v);\n\n            DLIB_TEST(  sum(round(1e10*(a - u*w*trans(v)))) == 0);\n            DLIB_TEST((round(1e10*trans(u)*u)  == 1e10*identity_matrix<double,N>()));\n            DLIB_TEST((round(1e10*trans(v)*v)  == 1e10*identity_matrix<double,N>()));\n        }\n\n\n        {\n            srand(53434);\n            const long M = 5;\n            const long N = 5;\n\n            matrix<double> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double,0,N> u(M,N);  \n            matrix<double,N,N> w;\n            matrix<double> v;\n\n            svd(a,u,w,v);\n\n            DLIB_TEST(  sum(round(1e10*(a - u*w*trans(v)))) == 0);\n            DLIB_TEST((round(1e10*trans(u)*u)  == 1e10*identity_matrix<double,N>()));\n            DLIB_TEST((round(1e10*trans(v)*v)  == 1e10*identity_matrix<double,N>()));\n        }\n\n\n        {\n            srand(11234);\n            const long M = 9;\n            const long N = 4;\n\n            matrix<double,0,0,MM> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double> u;  \n            matrix<double,0,0,MM> w;\n            matrix<double> v;\n\n            svd(a,u,w,v);\n\n            DLIB_TEST(  sum(round(1e10*(a - u*w*trans(v)))) == 0);\n            DLIB_TEST((round(1e10*trans(u)*u)  == 1e10*identity_matrix<double,N>()));\n            DLIB_TEST((round(1e10*trans(v)*v)  == 1e10*identity_matrix<double,N>()));\n        }\n\n\n\n        {\n            srand(53934);\n            const long M = 2;\n            const long N = 4;\n\n            matrix<double> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double> u;  \n            matrix<double> w;\n            matrix<double> v;\n\n            svd(a,u,w,v);\n\n            DLIB_TEST(  sum(round(1e10*(a - u*w*trans(v)))) == 0);\n        }\n\n\n        {\n            srand(53234);\n            const long M = 9;\n            const long N = 40;\n\n            matrix<double> a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            matrix<double> u;  \n            matrix<double> w;\n            matrix<double> v;\n\n            svd(a,u,w,v);\n\n            DLIB_TEST(  sum(round(1e10*(a - u*w*trans(v)))) == 0);\n        }\n\n        {\n            srand(53234);\n            const long M = 9;\n            const long N = 40;\n\n            typedef matrix<double,0,0,default_memory_manager, column_major_layout> mat;\n            mat a(M,N);  \n            for (long r = 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = 10*((double)::rand())/RAND_MAX;\n                }\n            }\n\n            mat u;  \n            mat w;\n            mat v;\n\n            svd(a,u,w,v);\n\n            DLIB_TEST(  sum(round(1e10*(a - u*w*trans(v)))) == 0);\n        }\n\n\n        {\n            matrix<double> a(3,3);\n            matrix<double,3,3> b;\n            set_all_elements(a,0);\n\n            a(0,0) = 1;\n            a(1,1) = 2;\n            a(2,2) = 3;\n            b = a;\n\n            DLIB_TEST(diag(a)(0) == 1);\n            DLIB_TEST(diag(a)(1) == 2);\n            DLIB_TEST(diag(a)(2) == 3);\n            DLIB_TEST(diag(a).nr() == 3);\n            DLIB_TEST(diag(a).nc() == 1);\n\n            DLIB_TEST(diag(b)(0) == 1);\n            DLIB_TEST(diag(b)(1) == 2);\n            DLIB_TEST(diag(b)(2) == 3);\n            DLIB_TEST(diag(b).nr() == 3);\n            DLIB_TEST(diag(b).nc() == 1);\n\n            DLIB_TEST(pointwise_multiply(a,b)(0,0) == 1);\n            DLIB_TEST(pointwise_multiply(a,b)(1,1) == 4);\n            DLIB_TEST(pointwise_multiply(a,b)(2,2) == 9);\n            DLIB_TEST(pointwise_multiply(a,b)(1,0) == 0);\n            DLIB_TEST(pointwise_multiply(a,b,a)(1,0) == 0);\n            DLIB_TEST(pointwise_multiply(a,b,a,b)(1,0) == 0);\n\n\n            DLIB_TEST(complex_matrix(a,b)(0,0) == std::complex<double>(1,1));\n            DLIB_TEST(complex_matrix(a,b)(2,2) == std::complex<double>(3,3));\n            DLIB_TEST(complex_matrix(a,b)(2,1) == std::complex<double>(0,0));\n        }\n\n        {\n            matrix<complex<double> > m(2,2), m2(2,2);\n            complex<double> val1(1,2), val2(1.0/complex<double>(1,2));\n            m = val1;\n            m2 = val2;\n\n            DLIB_TEST(equal(reciprocal(m) , m2));\n        }\n        {\n            matrix<complex<float> > m(2,2), m2(2,2);\n            complex<float> val1(1,2), val2(1.0f/complex<float>(1,2));\n            m = val1;\n            m2 = val2;\n\n            DLIB_TEST(equal(reciprocal(m) , m2));\n        }\n\n        {\n            matrix<float,3,1> m1, m2;\n            set_all_elements(m1,2.0);\n            set_all_elements(m2,1.0/2.0);\n            DLIB_TEST(reciprocal(m1) == m2);\n            DLIB_TEST((reciprocal(uniform_matrix<float,3,1>(2.0)) == m2));\n            DLIB_TEST((round_zeros(uniform_matrix<float,3,1>(1e-8f)) == uniform_matrix<float,3,1>(0)) );\n            set_all_elements(m1,2.0);\n            m2 = m1;\n            m1(1,0) = static_cast<float>(1e-8);\n            m2(1,0) = 0;\n            DLIB_TEST(round_zeros(m1) == m2);\n            m1 = round_zeros(m1);\n            DLIB_TEST(m1 == m2);\n        }\n\n        {\n            matrix<matrix<double,2,2> > m;\n            m.set_size(3,3);\n            set_all_elements(m,uniform_matrix<double,2,2>(1));\n            DLIB_TEST((sum(m) == uniform_matrix<double,2,2>(9)));\n            DLIB_TEST((round_zeros(sqrt(sum(m)) - uniform_matrix<double,2,2>(3)) == uniform_matrix<double,2,2>(0)));\n        }\n\n        {\n            matrix<int,2,2> m1;\n            matrix<int> m2;\n            m2.set_size(2,2);\n\n            set_all_elements(m1,2);\n            m2 = uniform_matrix<int,2,2>(2);\n\n            m1 = m1 + m2;\n            DLIB_TEST((m1 == uniform_matrix<int,2,2>(4)));\n\n            set_all_elements(m1,2);\n            set_all_elements(m2,2);\n            m1 = m1*m1;\n            DLIB_TEST((m1 == uniform_matrix<int,2,2>(8)));\n\n            m1(1,0) = 1;\n            set_all_elements(m2,8);\n            m2(0,1) = 1;\n            m1 = trans(m1);\n            DLIB_TEST(m1 == m2);\n        }\n\n        {\n            matrix<double,2,3> m;\n            matrix<double> m2(2,3);\n\n            set_all_elements(m,1);\n            DLIB_TEST(mean(m) == 1);\n            set_all_elements(m,2);\n            DLIB_TEST(mean(m) == 2);\n            m(0,0) = 1;\n            m(0,1) = 1;\n            m(0,2) = 1;\n            DLIB_TEST(abs(mean(m) - 1.5) < 1e-10);\n            DLIB_TEST(abs(variance(m) - 0.3) < 1e-10);\n\n            set_all_elements(m2,1);\n            DLIB_TEST(mean(m2) == 1);\n            set_all_elements(m2,2);\n            DLIB_TEST(mean(m2) == 2);\n            m2(0,0) = 1;\n            m2(0,1) = 1;\n            m2(0,2) = 1;\n            DLIB_TEST(abs(mean(m2) - 1.5) < 1e-10);\n            DLIB_TEST(abs(variance(m2) - 0.3) < 1e-10);\n\n            set_all_elements(m,0);\n            DLIB_TEST(abs(variance(m)) < 1e-10);\n            set_all_elements(m,1);\n            DLIB_TEST(abs(variance(m)) < 1e-10);\n            set_all_elements(m,23.4);\n            DLIB_TEST(abs(variance(m)) < 1e-10);\n        }\n\n        {\n            matrix<matrix<double,3,1,MM>,2,2,MM> m;\n            set_all_elements(m,uniform_matrix<double,3,1>(1));\n            DLIB_TEST((round_zeros(variance(m)) == uniform_matrix<double,3,1>(0)));\n            DLIB_TEST((round_zeros(mean(m)) == uniform_matrix<double,3,1>(1)));\n            m(0,0) = uniform_matrix<double,3,1>(9);\n            DLIB_TEST((round_zeros(variance(m)) == uniform_matrix<double,3,1>(16)));\n            DLIB_TEST((round_zeros(mean(m)) == uniform_matrix<double,3,1>(3)));\n\n            matrix<matrix<double> > m2(2,2);\n            set_all_elements(m2,uniform_matrix<double,3,1>(1));\n            DLIB_TEST((round_zeros(variance(m2)) == uniform_matrix<double,3,1>(0)));\n            DLIB_TEST((round_zeros(mean(m2)) == uniform_matrix<double,3,1>(1)));\n            m2(0,0) = uniform_matrix<double,3,1>(9);\n            DLIB_TEST((round_zeros(variance(m2)) == uniform_matrix<double,3,1>(16)));\n            DLIB_TEST((round_zeros(mean(m2)) == uniform_matrix<double,3,1>(3)));\n        }\n\n\n        {\n            matrix<double> m(4,4), m2;\n            m = 1,2,3,4,\n                1,2,3,4,\n                4,6,8,10,\n                4,6,8,10;\n            m2 = m;\n\n            DLIB_TEST(colm(m,range(0,3)) == m);\n            DLIB_TEST(rowm(m,range(0,3)) == m);\n            DLIB_TEST(colm(m,range(0,0)) == colm(m,0));\n            DLIB_TEST(rowm(m,range(0,0)) == rowm(m,0));\n            DLIB_TEST(colm(m,range(1,1)) == colm(m,1));\n            DLIB_TEST(rowm(m,range(1,1)) == rowm(m,1));\n\n            DLIB_TEST(colm(m,range(2,2)) == colm(m,2));\n            DLIB_TEST(rowm(m,range(2,2)) == rowm(m,2));\n\n            DLIB_TEST(colm(m,range(1,2)) == subm(m,0,1,4,2));\n            DLIB_TEST(rowm(m,range(1,2)) == subm(m,1,0,2,4));\n\n            set_colm(m,range(1,2)) = 9;\n            set_subm(m2,0,1,4,2) = 9;\n            DLIB_TEST(m == m2);\n\n            set_colm(m,range(1,2)) = 11;\n            set_subm(m2,0,1,4,2) = 11;\n            DLIB_TEST(m == m2);\n        }\n\n        {\n            print_spinner();\n            matrix<double,1,1> m1;\n            matrix<double,2,2> m2;\n            matrix<double,3,3> m3;\n            matrix<double,4,4> m4;\n\n            dlib::rand rnd;\n            for (int i = 0; i < 50; ++i)\n            {\n                m1 = randm(1,1,rnd);\n                m2 = randm(2,2,rnd);\n                m3 = randm(3,3,rnd);\n                m4 = randm(4,4,rnd);\n\n                DLIB_TEST(max(abs(m1*inv(m1) - identity_matrix(m1))) < 1e-13);\n                DLIB_TEST(max(abs(m2*inv(m2) - identity_matrix(m2))) < 1e-13);\n                DLIB_TEST(max(abs(m3*inv(m3) - identity_matrix(m3))) < 1e-13);\n                DLIB_TEST(max(abs(m4*inv(m4) - identity_matrix(m4))) < 1e-13);\n            }\n        }\n\n    }\n\n\n\n\n\n\n    class matrix_tester : public tester\n    {\n    public:\n        matrix_tester (\n        ) :\n            tester (\"test_matrix2\",\n                    \"Runs tests on the matrix component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            matrix_test();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/matrix3.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n\n#include \"tester.h\"\n#include <dlib/memory_manager_stateless.h>\n#include <dlib/array2d.h>\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.matrix3\");\n\n\n    const double eps_mul = 200;\n\n    template <typename T, typename U>\n    void check_equal (\n        const T& a,\n        const U& b\n    )\n    {\n        DLIB_TEST(a.nr() == b.nr());\n        DLIB_TEST(a.nc() == b.nc());\n        typedef typename T::type type;\n        for (long r = 0; r < a.nr(); ++r)\n        {\n            for (long c = 0; c < a.nc(); ++c)\n            {\n                type error = std::abs(a(r,c) - b(r,c));\n                DLIB_TEST_MSG(error < std::sqrt(std::numeric_limits<type>::epsilon())*eps_mul, \"error: \" << error <<\n                             \"    eps: \" << std::sqrt(std::numeric_limits<type>::epsilon())*eps_mul);\n            }\n        }\n    }\n\n    template <typename T, typename U>\n    void c_check_equal (\n        const T& a,\n        const U& b\n    )\n    {\n        DLIB_TEST(a.nr() == b.nr());\n        DLIB_TEST(a.nc() == b.nc());\n        typedef typename T::type type;\n        for (long r = 0; r < a.nr(); ++r)\n        {\n            for (long c = 0; c < a.nc(); ++c)\n            {\n                typename type::value_type error = std::abs(a(r,c) - b(r,c));\n                DLIB_TEST_MSG(error < std::sqrt(std::numeric_limits<typename type::value_type>::epsilon())*eps_mul, \"error: \" << error <<\n                             \"    eps: \" << std::sqrt(std::numeric_limits<typename type::value_type>::epsilon())*eps_mul);\n            }\n        }\n    }\n\n    template <typename T, typename U>\n    void assign_no_blas (\n        const T& a_,\n        const U& b\n    )\n    {\n        T& a = const_cast<T&>(a_);\n        DLIB_TEST(a.nr() == b.nr());\n        DLIB_TEST(a.nc() == b.nc());\n        for (long r = 0; r < a.nr(); ++r)\n        {\n            for (long c = 0; c < a.nc(); ++c)\n            {\n                a(r,c) = b(r,c);\n            }\n        }\n    }\n\n    template <typename type>\n    type rnd_num (dlib::rand& rnd)\n    {\n        return static_cast<type>(10*rnd.get_random_double());\n    }\n\n    template <typename type>\n    void test_blas( long rows, long cols)\n    {\n        // The tests in this function exercise the BLAS bindings located in the matrix/matrix_blas_bindings.h file.\n        // It does this by performing an assignment that is subject to BLAS bindings and comparing the\n        // results directly to an unevaluated matrix_exp that should be equal.\n\n        dlib::rand rnd;\n\n        matrix<type> a(rows,cols), temp, temp2, temp3;\n\n        for (int k = 0; k < 6; ++k)\n        {\n            for (long r= 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    a(r,c) = rnd_num<type>(rnd);\n                }\n            }\n            matrix<type> at;\n            at = trans(a);\n\n            matrix<complex<type> > c_a(rows,cols), c_at, c_sqr;\n            for (long r= 0; r < a.nr(); ++r)\n            {\n                for (long c = 0; c < a.nc(); ++c)\n                {\n                    c_a(r,c) = complex<type>(rnd_num<type>(rnd),rnd_num<type>(rnd));\n                }\n            }\n            c_at = trans(c_a);\n            const int size = max(rows,cols);\n            c_sqr = 10*matrix_cast<complex<type> >(complex_matrix(randm(size,size,rnd), randm(size,size,rnd)));\n\n\n            matrix<complex<type> > c_temp(cols,cols), c_temp2(cols,cols);\n            const complex<type> i(0,1);\n\n            const type one = 1;\n            const type two = 1;\n            const type num1 = static_cast<type>(3.6);\n            const type num2 = static_cast<type>(6.6);\n            const type num3 = static_cast<type>(8.6);\n\n            matrix<complex<type>,0,1> c_cv4(cols), c_cv3(rows);\n            matrix<complex<type>,1,0> c_rv4(cols), c_rv3(rows);\n\n            matrix<type,0,1> cv4(cols);\n\n            for (long idx = 0; idx < cv4.size(); ++idx)\n                cv4(idx) = rnd_num<type>(rnd);\n\n            for (long idx = 0; idx < c_cv4.size(); ++idx)\n                c_cv4(idx) = complex<type>(rnd_num<type>(rnd),rnd_num<type>(rnd));\n\n            matrix<type,1,0> rv3(rows);\n\n            for (long idx = 0; idx < rv3.size(); ++idx)\n                rv3(idx) = rnd_num<type>(rnd);\n\n            for (long idx = 0; idx < c_rv3.size(); ++idx)\n                c_rv3(idx) = complex<type>(rnd_num<type>(rnd),rnd_num<type>(rnd));\n\n            matrix<type,0,1> cv3(rows);\n\n            for (long idx = 0; idx < cv3.size(); ++idx)\n                cv3(idx) = rnd_num<type>(rnd);\n\n            for (long idx = 0; idx < c_cv3.size(); ++idx)\n                c_cv3(idx) = complex<type>(rnd_num<type>(rnd),rnd_num<type>(rnd));\n\n            matrix<type,1,0> rv4(cols);\n            for (long idx = 0; idx < rv4.size(); ++idx)\n                rv4(idx) = rnd_num<type>(rnd);\n\n            for (long idx = 0; idx < c_rv4.size(); ++idx)\n                c_rv4(idx) = complex<type>(rnd_num<type>(rnd),rnd_num<type>(rnd));\n\n\n\n            // GEMM tests\n            dlog << LTRACE << \"1.1\";\n            check_equal(tmp(at*a),   at*a);\n            check_equal(tmp(trans(at*a)),   trans(at*a));\n            check_equal(tmp(2.4*trans(4*trans(at*a) + at*3*a)),   2.4*trans(4*trans(at*a) + at*3*a));\n            dlog << LTRACE << \"1.2\";\n            check_equal(tmp(trans(a)*a),   trans(a)*a);\n            check_equal(tmp(trans(trans(a)*a)),   trans(trans(a)*a));\n            dlog << LTRACE << \"1.3\";\n            check_equal(tmp(at*trans(at)),   at*trans(at));\n            check_equal(tmp(trans(at*trans(at))),   trans(at*trans(at)));\n            dlog << LTRACE << \"1.4\";\n            check_equal(tmp(trans(at)*trans(a)),   a*at);\n            check_equal(tmp(trans(trans(at)*trans(a))),   trans(a*at));\n            dlog << LTRACE << \"1.5\";\n\n            print_spinner();\n            c_check_equal(tmp(conj(trans(c_a))*c_a),   trans(conj(c_a))*c_a);\n            dlog << LTRACE << \"1.5.1\";\n            c_check_equal(tmp(trans(conj(trans(c_a))*c_a)),   trans(trans(conj(c_a))*c_a));\n            dlog << LTRACE << \"1.5.2\";\n            c_check_equal(tmp((conj(trans(c_sqr))*trans(c_sqr))),   (trans(conj(c_sqr))*trans(c_sqr)));\n            dlog << LTRACE << \"1.5.3\";\n            c_check_equal(tmp(trans(conj(trans(c_sqr))*trans(c_sqr))),   trans(trans(conj(c_sqr))*trans(c_sqr)));\n            dlog << LTRACE << \"1.6\";\n            c_check_equal(tmp(c_at*trans(conj(c_at))),   c_at*conj(trans(c_at)));\n            dlog << LTRACE << \"1.6.1\";\n            c_check_equal(tmp(trans(c_at*trans(conj(c_at)))),   trans(c_at*conj(trans(c_at))));\n            dlog << LTRACE << \"1.6.2\";\n            c_check_equal(tmp((c_sqr)*trans(conj(c_sqr))),   (c_sqr)*conj(trans(c_sqr)));\n            dlog << LTRACE << \"1.6.2.1\";\n            c_check_equal(tmp(trans(c_sqr)*trans(conj(c_sqr))),   trans(c_sqr)*conj(trans(c_sqr)));\n            dlog << LTRACE << \"1.6.3\";\n            c_check_equal(tmp(trans(trans(c_sqr)*trans(conj(c_sqr)))),   trans(trans(c_sqr)*conj(trans(c_sqr))));\n            dlog << LTRACE << \"1.7\";\n            c_check_equal(tmp(conj(trans(c_at))*trans(conj(c_a))),  conj(trans(c_at))*trans(conj(c_a)));\n            c_check_equal(tmp(trans(conj(trans(c_at))*trans(conj(c_a)))), trans(conj(trans(c_at))*trans(conj(c_a))));\n            dlog << LTRACE << \"1.8\";\n\n            check_equal(tmp(a*trans(rowm(a,1))) ,  a*trans(rowm(a,1)));\n            check_equal(tmp(a*colm(at,1)) ,  a*colm(at,1));\n            check_equal(tmp(subm(a,1,1,2,2)*subm(a,1,2,2,2)), subm(a,1,1,2,2)*subm(a,1,2,2,2));\n\n            dlog << LTRACE << \"1.9\";\n            check_equal(tmp(trans(a*trans(rowm(a,1)))) ,  trans(a*trans(rowm(a,1))));\n            dlog << LTRACE << \"1.10\";\n            check_equal(tmp(trans(a*colm(at,1))) ,  trans(a*colm(at,1)));\n            dlog << LTRACE << \"1.11\";\n            check_equal(tmp(trans(subm(a,1,1,2,2)*subm(a,1,2,2,2))), trans(subm(a,1,1,2,2)*subm(a,1,2,2,2)));\n            dlog << LTRACE << \"1.12\";\n\n            {\n                temp = at*a;\n                temp2 = temp;\n\n                temp += 3.5*at*a;\n                assign_no_blas(temp2, temp2 + 3.5*at*a);\n                check_equal(temp, temp2);\n\n                temp -= at*3.5*a;\n                assign_no_blas(temp2, temp2 - at*3.5*a);\n                check_equal(temp, temp2);\n\n                temp = temp + 4*at*a;\n                assign_no_blas(temp2, temp2 + 4*at*a);\n                check_equal(temp, temp2);\n\n                temp = temp - 2.4*at*a;\n                assign_no_blas(temp2, temp2 - 2.4*at*a);\n                check_equal(temp, temp2);\n            }\n            dlog << LTRACE << \"1.13\";\n            {\n                temp = trans(at*a);\n                temp2 = temp;\n                temp3 = temp;\n\n                dlog << LTRACE << \"1.14\";\n                temp += trans(3.5*at*a);\n                assign_no_blas(temp2, temp2 + trans(3.5*at*a));\n                check_equal(temp, temp2);\n\n                dlog << LTRACE << \"1.15\";\n                temp -= trans(at*3.5*a);\n                assign_no_blas(temp2, temp2 - trans(at*3.5*a));\n                check_equal(temp, temp2);\n\n                dlog << LTRACE << \"1.16\";\n                temp = trans(temp + 4*at*a);\n                assign_no_blas(temp3, trans(temp2 + 4*at*a));\n                check_equal(temp, temp3);\n\n                temp2 = temp;\n                dlog << LTRACE << \"1.17\";\n                temp = trans(temp - 2.4*at*a);\n                assign_no_blas(temp3, trans(temp2 - 2.4*at*a));\n                check_equal(temp, temp3);\n            }\n\n            dlog << LTRACE << \"1.17.1\";\n            {\n                matrix<type> m1, m2;\n\n                m1 = matrix_cast<type>(randm(rows, cols, rnd));\n                m2 = matrix_cast<type>(randm(cols, rows + 8, rnd));\n                check_equal(tmp(m1*m2), m1*m2);\n                check_equal(tmp(trans(m1*m2)), trans(m1*m2));\n\n                m1 = trans(m1);\n                check_equal(tmp(trans(m1)*m2), trans(m1)*m2);\n                check_equal(tmp(trans(trans(m1)*m2)), trans(trans(m1)*m2));\n\n                m2 = trans(m2);\n                check_equal(tmp(trans(m1)*trans(m2)), trans(m1)*trans(m2));\n                check_equal(tmp(trans(trans(m1)*trans(m2))), trans(trans(m1)*trans(m2)));\n\n                m1 = trans(m1);\n                check_equal(tmp(m1*trans(m2)), m1*trans(m2));\n                check_equal(tmp(trans(m1*trans(m2))), trans(m1*trans(m2)));\n            }\n\n            dlog << LTRACE << \"1.17.5\";\n            {\n                matrix<type,1,0> r;\n                matrix<type,0,1> c;\n\n                r = matrix_cast<type>(randm(1, rows+9, rnd));\n                c = matrix_cast<type>(randm(rows, 1, rnd));\n\n                check_equal(tmp(c*r), c*r);\n                check_equal(tmp(trans(c*r)), trans(c*r));\n\n                check_equal(tmp(trans(r)*trans(c)), trans(r)*trans(c));\n                check_equal(tmp(trans(trans(r)*trans(c))), trans(trans(r)*trans(c)));\n            }\n\n            dlog << LTRACE << \"1.18\";\n\n            // GEMV tests\n            check_equal(tmp(a*cv4),  a*cv4);\n            check_equal(tmp(trans(a*cv4)),  trans(a*cv4));\n            check_equal(tmp(rv3*a),  rv3*a);\n            check_equal(tmp(trans(cv4)*at),  trans(cv4)*at);\n            check_equal(tmp(a*trans(rv4)),  a*trans(rv4));\n            check_equal(tmp(trans(a*trans(rv4))),  trans(a*trans(rv4)));\n\n            check_equal(tmp(trans(a)*cv3),  trans(a)*cv3);\n            check_equal(tmp(rv4*trans(a)),  rv4*trans(a));\n            check_equal(tmp(trans(cv3)*trans(at)),  trans(cv3)*trans(at));\n            check_equal(tmp(trans(cv3)*a),  trans(cv3)*a);\n            check_equal(tmp(trans(a)*trans(rv3)),  trans(a)*trans(rv3));\n\n\n            c_check_equal(tmp(trans(conj(c_a))*c_cv3),  trans(conj(c_a))*c_cv3);\n            c_check_equal(tmp(c_rv4*trans(conj(c_a))),  c_rv4*trans(conj(c_a)));\n            c_check_equal(tmp(trans(c_cv3)*trans(conj(c_at))),  trans(c_cv3)*trans(conj(c_at)));\n            c_check_equal(tmp(conj(trans(c_a))*trans(c_rv3)),  trans(conj(c_a))*trans(c_rv3));\n            c_check_equal(tmp(c_rv4*conj(c_at)),  c_rv4*conj(c_at));\n            c_check_equal(tmp(trans(c_cv4)*conj(c_at)),  trans(c_cv4)*conj(c_at));\n\n            dlog << LTRACE << \"2.00\";\n\n            c_check_equal(tmp(trans(trans(conj(c_a))*c_cv3)),           trans(trans(conj(c_a))*c_cv3));\n            c_check_equal(tmp(trans(c_rv4*trans(conj(c_a)))),           trans(c_rv4*trans(conj(c_a))));\n            c_check_equal(tmp(trans(trans(c_cv3)*trans(conj(c_at)))),   trans(trans(c_cv3)*trans(conj(c_at))));\n            dlog << LTRACE << \"2.20\";\n            c_check_equal(tmp(trans(conj(trans(c_a))*trans(c_rv3))),    trans(trans(conj(c_a))*trans(c_rv3)));\n            c_check_equal(tmp(trans(c_rv4*conj(c_at))),                 trans(c_rv4*conj(c_at)));\n            c_check_equal(tmp(trans(trans(c_cv4)*conj(c_at))),          trans(trans(c_cv4)*conj(c_at)));\n\n\n\n            dlog << LTRACE << \"6\";\n            temp = a*at;\n            check_equal(temp, a*at);\n            temp = temp + a*at + trans(at)*at + trans(at)*sin(at);\n            check_equal(temp, a*at + a*at+ trans(at)*at + trans(at)*sin(at));\n\n            dlog << LTRACE << \"6.1\";\n            temp = a*at;\n            check_equal(temp, a*at);\n            temp = a*at + temp;\n            check_equal(temp, a*at + a*at);\n\n            print_spinner();\n            dlog << LTRACE << \"6.2\";\n            temp = a*at;\n            check_equal(temp, a*at);\n            dlog << LTRACE << \"6.2.3\";\n            temp = temp - a*at;\n            dlog << LTRACE << \"6.2.4\";\n            check_equal(temp, a*at-a*at);\n\n            dlog << LTRACE << \"6.3\";\n            temp = a*at;\n            dlog << LTRACE << \"6.3.5\";\n            check_equal(temp, a*at);\n            dlog << LTRACE << \"6.3.6\";\n            temp = a*at - temp;\n            dlog << LTRACE << \"6.4\";\n            check_equal(temp, a*at-a*at);\n\n\n\n            const long d = min(rows,cols);\n            rectangle rect(1,1,d,d);\n            temp.set_size(max(rows,cols)+4,max(rows,cols)+4);\n            set_all_elements(temp,4);\n            temp2 = temp;\n\n            dlog << LTRACE << \"7\";\n            set_subm(temp,rect) = a*at;\n            assign_no_blas( set_subm(temp2,rect) , a*at);\n            check_equal(temp, temp2);\n\n            temp = a;\n            temp2 = a;\n\n            set_colm(temp,1) = a*cv4;\n            assign_no_blas( set_colm(temp2,1) , a*cv4);\n            check_equal(temp, temp2);\n\n            set_rowm(temp,1) = rv3*a;\n            assign_no_blas( set_rowm(temp2,1) , rv3*a);\n            check_equal(temp, temp2);\n\n\n            // Test BLAS GER\n            {\n                temp.set_size(cols,cols);\n                set_all_elements(temp,3);\n                temp2 = temp;\n\n\n                dlog << LTRACE << \"8\";\n                temp += cv4*rv4;\n                assign_no_blas(temp2, temp2 + cv4*rv4);\n                check_equal(temp, temp2);\n\n                dlog << LTRACE << \"8.3\";\n                temp = temp + cv4*rv4;\n                assign_no_blas(temp2, temp2 + cv4*rv4);\n                check_equal(temp, temp2);\n                dlog << LTRACE << \"8.9\";\n            }\n            {\n                temp.set_size(cols,cols);\n                set_all_elements(temp,3);\n                temp2 = temp;\n                temp3 = 0;\n\n                dlog << LTRACE << \"8.10\";\n\n                temp += trans(cv4*rv4);\n                assign_no_blas(temp3, temp2 + trans(cv4*rv4));\n                check_equal(temp, temp3);\n                temp3 = 0;\n\n                dlog << LTRACE << \"8.11\";\n                temp2 = temp;\n                temp = trans(temp + cv4*rv4);\n                assign_no_blas(temp3, trans(temp2 + cv4*rv4));\n                check_equal(temp, temp3);\n                dlog << LTRACE << \"8.12\";\n            }\n            {\n                matrix<complex<type> > temp, temp2, temp3;\n                matrix<complex<type>,0,1 > cv4;\n                matrix<complex<type>,1,0 > rv4;\n                cv4.set_size(cols);\n                rv4.set_size(cols);\n                temp.set_size(cols,cols);\n                set_all_elements(temp,complex<type>(3,5));\n                temp(cols-1, cols-4) = 9;\n                temp2 = temp;\n                temp3.set_size(cols,cols);\n                temp3 = 0;\n\n                for (long i = 0; i < rv4.size(); ++i)\n                {\n                    rv4(i) = complex<type>(rnd_num<type>(rnd),rnd_num<type>(rnd));\n                    cv4(i) = complex<type>(rnd_num<type>(rnd),rnd_num<type>(rnd));\n                }\n\n                dlog << LTRACE << \"8.13\";\n\n                temp += trans(cv4*rv4);\n                assign_no_blas(temp3, temp2 + trans(cv4*rv4));\n                c_check_equal(temp, temp3);\n                temp3 = 0;\n\n                dlog << LTRACE << \"8.14\";\n                temp2 = temp;\n                temp = trans(temp + cv4*rv4);\n                assign_no_blas(temp3, trans(temp2 + cv4*rv4));\n                c_check_equal(temp, temp3);\n                dlog << LTRACE << \"8.15\";\n            }\n\n\n\n\n            set_all_elements(c_temp, one + num1*i);\n            c_temp2 = c_temp;\n            set_all_elements(c_rv4, one + num2*i);\n            set_all_elements(c_cv4, two + num3*i);\n\n\n            dlog << LTRACE << \"9\";\n            c_temp += c_cv4*c_rv4;\n            assign_no_blas(c_temp2, c_temp2 + c_cv4*c_rv4);\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"9.1\";\n            c_temp += c_cv4*conj(c_rv4);\n            assign_no_blas(c_temp2, c_temp2 + c_cv4*conj(c_rv4));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"9.2\";\n            c_temp = c_cv4*conj(c_rv4) + c_temp;\n            assign_no_blas(c_temp2, c_temp2 + c_cv4*conj(c_rv4));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"9.3\";\n            c_temp = trans(c_rv4)*trans(conj(c_cv4)) + c_temp;\n            assign_no_blas(c_temp2, c_temp2 + trans(c_rv4)*trans(conj(c_cv4)));\n            c_check_equal(c_temp, c_temp2);\n\n\n            dlog << LTRACE << \"9.4\";\n            c_temp += conj(c_cv4)*c_rv4;\n            assign_no_blas(c_temp2, c_temp2 + conj(c_cv4)*c_rv4);\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"9.5\";\n            c_temp += conj(c_cv4)*conj(c_rv4);\n            assign_no_blas(c_temp2, c_temp2 + conj(c_cv4)*conj(c_rv4));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"9.6\";\n            c_temp = conj(c_cv4)*conj(c_rv4) + c_temp;\n            assign_no_blas(c_temp2, c_temp2 + conj(c_cv4)*conj(c_rv4));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"9.7\";\n            c_temp = conj(trans(c_rv4))*trans(conj(c_cv4)) + c_temp;\n            assign_no_blas(c_temp2, c_temp2 + conj(trans(c_rv4))*trans(conj(c_cv4)));\n            c_check_equal(c_temp, c_temp2);\n\n\n            dlog << LTRACE << \"10\";\n            c_temp += trans(c_cv4*c_rv4);\n            assign_no_blas(c_temp2, c_temp2 + trans(c_cv4*c_rv4));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"10.1\";\n            c_temp += trans(c_cv4*conj(c_rv4));\n            assign_no_blas(c_temp2, c_temp2 + trans(c_cv4*conj(c_rv4)));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"10.2\";\n            c_temp = trans(c_cv4*conj(c_rv4)) + c_temp;\n            assign_no_blas(c_temp2, c_temp2 + trans(c_cv4*conj(c_rv4)));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"10.3\";\n            c_temp = trans(trans(c_rv4)*trans(conj(c_cv4))) + c_temp;\n            assign_no_blas(c_temp2, c_temp2 + trans(trans(c_rv4)*trans(conj(c_cv4))));\n            c_check_equal(c_temp, c_temp2);\n\n\n            dlog << LTRACE << \"10.4\";\n            c_temp += trans(conj(c_cv4)*c_rv4);\n            assign_no_blas(c_temp2, c_temp2 + trans(conj(c_cv4)*c_rv4));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"10.5\";\n            c_temp += trans(conj(c_cv4)*conj(c_rv4));\n            assign_no_blas(c_temp2, c_temp2 + trans(conj(c_cv4)*conj(c_rv4)));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"10.6\";\n            c_temp = trans(conj(c_cv4)*conj(c_rv4)) + c_temp;\n            assign_no_blas(c_temp2, c_temp2 + trans(conj(c_cv4)*conj(c_rv4)));\n            c_check_equal(c_temp, c_temp2);\n            dlog << LTRACE << \"10.7\";\n            c_temp = trans(conj(trans(c_rv4))*trans(conj(c_cv4))) + c_temp;\n            assign_no_blas(c_temp2, c_temp2 + trans(conj(trans(c_rv4))*trans(conj(c_cv4))));\n            c_check_equal(c_temp, c_temp2);\n\n            dlog << LTRACE << \"10.8\";\n\n\n            print_spinner();\n\n            // Test DOT\n            check_equal( tmp(rv4*cv4), rv4*cv4);\n            check_equal( tmp(trans(rv4*cv4)), trans(rv4*cv4));\n            check_equal( tmp(trans(cv4)*trans(rv4)), trans(cv4)*trans(rv4));\n            check_equal( tmp(rv4*3.9*cv4), rv4*3.9*cv4);\n            check_equal( tmp(trans(cv4)*3.9*trans(rv4)), trans(cv4)*3.9*trans(rv4));\n            check_equal( tmp(rv4*cv4*3.9), rv4*3.9*cv4);\n            check_equal( tmp(trans(cv4)*trans(rv4)*3.9), trans(cv4)*3.9*trans(rv4));\n\n\n            check_equal( tmp(trans(rv4*cv4)),                    trans(rv4*cv4));\n            check_equal( tmp(trans(trans(rv4*cv4))),             trans(trans(rv4*cv4)));\n            check_equal( tmp(trans(trans(cv4)*trans(rv4))),      trans(trans(cv4)*trans(rv4)));\n            check_equal( tmp(trans(rv4*3.9*cv4)),                trans(rv4*3.9*cv4));\n            check_equal( tmp(trans(trans(cv4)*3.9*trans(rv4))),  trans(trans(cv4)*3.9*trans(rv4)));\n            check_equal( tmp(trans(rv4*cv4*3.9)),                trans(rv4*3.9*cv4));\n            check_equal( tmp(trans(trans(cv4)*trans(rv4)*3.9)),  trans(trans(cv4)*3.9*trans(rv4)));\n\n\n            temp.set_size(1,1);\n            temp = 4;\n            check_equal( tmp(temp + rv4*cv4), temp + rv4*cv4);\n            check_equal( tmp(temp + trans(cv4)*trans(rv4)), temp + trans(cv4)*trans(rv4));\n\n            dlog << LTRACE << \"11\";\n\n\n\n            c_check_equal( tmp(conj(c_rv4)*c_cv4), conj(c_rv4)*c_cv4);\n            c_check_equal( tmp(conj(trans(c_cv4))*trans(c_rv4)), trans(conj(c_cv4))*trans(c_rv4));\n\n            c_check_equal( tmp(conj(c_rv4)*i*c_cv4), conj(c_rv4)*i*c_cv4);\n            c_check_equal( tmp(conj(trans(c_cv4))*i*trans(c_rv4)), trans(conj(c_cv4))*i*trans(c_rv4));\n\n            c_temp.set_size(1,1);\n            c_temp = 4;\n            c_check_equal( tmp(c_temp + conj(c_rv4)*c_cv4), c_temp + conj(c_rv4)*c_cv4);\n            c_check_equal( tmp(c_temp + trans(conj(c_cv4))*trans(c_rv4)), c_temp + trans(conj(c_cv4))*trans(c_rv4));\n\n            DLIB_TEST(abs((static_cast<complex<type> >(c_rv4*c_cv4) + i) - ((c_rv4*c_cv4)(0) + i)) < std::sqrt(std::numeric_limits<type>::epsilon())*eps_mul );\n            DLIB_TEST(max(abs((rv4*cv4 + 1.0) - ((rv4*cv4)(0) + 1.0))) < std::sqrt(std::numeric_limits<type>::epsilon())*eps_mul);\n\n        }\n\n        {\n            matrix<int> m(2,3), m2(6,1);\n\n            m = 1,2,3,\n                4,5,6;\n\n            m2 = 1,2,3,4,5,6;\n\n            DLIB_TEST(reshape_to_column_vector(m) == m2);\n            DLIB_TEST(reshape_to_column_vector(m+m) == m2+m2);\n\n        }\n        {\n            matrix<int,2,3> m(2,3);\n            matrix<int> m2(6,1);\n\n            m = 1,2,3,\n                4,5,6;\n\n            m2 = 1,2,3,4,5,6;\n\n            DLIB_TEST(reshape_to_column_vector(m) == m2);\n            DLIB_TEST(reshape_to_column_vector(m+m) == m2+m2);\n\n        }\n    }\n\n\n    void matrix_test (\n    )\n    /*!\n        ensures\n            - runs tests on the matrix stuff compliance with the specs\n    !*/\n    {        \n        print_spinner();\n\n\n        {\n            matrix<long> m1(2,2), m2(2,2);\n\n            m1 = 1, 2,\n            3, 4;\n\n            m2 = 4, 5,\n            6, 7;\n\n\n            DLIB_TEST(subm(tensor_product(m1,m2),range(0,1), range(0,1)) == 1*m2);\n            DLIB_TEST(subm(tensor_product(m1,m2),range(0,1), range(2,3)) == 2*m2);\n            DLIB_TEST(subm(tensor_product(m1,m2),range(2,3), range(0,1)) == 3*m2);\n            DLIB_TEST(subm(tensor_product(m1,m2),range(2,3), range(2,3)) == 4*m2);\n        }\n\n        {\n            print_spinner();\n            dlog << LTRACE << \"testing blas stuff\";\n            dlog << LTRACE << \" \\nsmall double\";\n            test_blas<double>(3,4);\n            print_spinner();\n            dlog << LTRACE << \" \\nsmall float\";\n            test_blas<float>(3,4);\n            print_spinner();\n            dlog << LTRACE << \" \\nbig double\";\n            test_blas<double>(120,131);\n            print_spinner();\n            dlog << LTRACE << \" \\nbig float\";\n            test_blas<float>(120,131);\n            print_spinner();\n            dlog << LTRACE << \"testing done\";\n        }\n\n\n        {\n            matrix<long> m(3,4), ml(3,4), mu(3,4);\n            m = 1,2,3,4,\n                4,5,6,7,\n                7,8,9,0;\n\n            ml = 1,0,0,0,\n                 4,5,0,0,\n                 7,8,9,0;\n\n            mu = 1,2,3,4,\n                 0,5,6,7,\n                 0,0,9,0;\n\n\n            DLIB_TEST(lowerm(m) == ml);\n            DLIB_TEST(upperm(m) == mu);\n\n            ml = 3,0,0,0,\n                 4,3,0,0,\n                 7,8,3,0;\n\n            mu = 4,2,3,4,\n                 0,4,6,7,\n                 0,0,4,0;\n\n            DLIB_TEST(lowerm(m,3) == ml);\n            DLIB_TEST(upperm(m,4) == mu);\n\n        }\n\n        {\n            matrix<long> m(3,4), row(1,3), col(2,1);\n            m = 1,2,3,4,\n                4,5,6,7,\n                7,8,9,0;\n\n            row = 4,5,6;\n            col = 3,6;\n\n            DLIB_TEST(rowm(m, 1, 3) == row);\n            DLIB_TEST(colm(m, 2, 2) == col);\n\n        }\n\n\n        {\n            std::vector<double> v(34, 8);\n            std::vector<double> v2(34, 9);\n\n            DLIB_TEST(mat(&v[0], v.size()) == mat(v));\n            DLIB_TEST(mat(&v2[0], v.size()) != mat(v));\n        }\n\n        {\n            std::vector<long> v(1, 3);\n            std::vector<long> v2(1, 2);\n\n            DLIB_TEST(mat(&v[0], v.size()) == mat(v));\n            DLIB_TEST(mat(&v2[0], v.size()) != mat(v));\n        }\n\n        {\n            matrix<double> a(3,3), b(3,3);\n            a = 1,   2.5, 1,\n                3,   4,   5,\n                0.5, 2.2, 3;\n\n            b = 0, 1, 0,\n                1, 1, 1,\n                0, 1, 1;\n\n            DLIB_TEST((a>1) == b);\n            DLIB_TEST((1<a) == b);\n\n            b = 1, 1, 1,\n                1, 1, 1,\n                0, 1, 1;\n\n            DLIB_TEST((a>=1) == b);\n            DLIB_TEST((1<=a) == b);\n\n            b = 0, 0, 0,\n                0, 0, 0,\n                0, 1, 0;\n            DLIB_TEST((a==2.2) == b);\n            DLIB_TEST((a!=2.2) == (b==0));\n            DLIB_TEST((2.2==a) == b);\n            DLIB_TEST((2.2!=a) == (0==b));\n\n            b = 0, 0, 0,\n                0, 0, 0,\n                1, 0, 0;\n            DLIB_TEST((a<1) == b);\n            DLIB_TEST((1>a) == b);\n\n            b = 1, 0, 1,\n                0, 0, 0,\n                1, 0, 0;\n            DLIB_TEST((a<=1) == b);\n            DLIB_TEST((1>=a) == b);\n        }\n\n        {\n            matrix<double> a, b, c;\n            a = randm(4,2);\n\n            b += a;\n            c -= a;\n\n            DLIB_TEST(equal(a, b));\n            DLIB_TEST(equal(-a, c));\n\n            b += a;\n            c -= a;\n\n            DLIB_TEST(equal(2*a, b));\n            DLIB_TEST(equal(-2*a, c));\n\n            b += a + a;\n            c -= a + a;\n\n            DLIB_TEST(equal(4*a, b));\n            DLIB_TEST(equal(-4*a, c));\n\n            b.set_size(0,0);\n            c.set_size(0,0);\n\n\n            b += a + a;\n            c -= a + a;\n\n            DLIB_TEST(equal(2*a, b));\n            DLIB_TEST(equal(-2*a, c));\n        }\n\n        {\n            matrix<int> a, b, c;\n\n            a.set_size(2, 3);\n            b.set_size(2, 6);\n            c.set_size(4, 3);\n\n            a = 1, 2, 3,\n                4, 5, 6;\n\n            b = 1, 2, 3, 1, 2, 3,\n                4, 5, 6, 4, 5, 6;\n\n            c = 1, 2, 3,\n                4, 5, 6,\n                1, 2, 3,\n                4, 5, 6;\n\n            DLIB_TEST(join_rows(a,a) == b);\n            DLIB_TEST(join_rows(a,abs(a)) == b);\n            DLIB_TEST(join_cols(trans(a), trans(a)) == trans(b));\n            DLIB_TEST(join_cols(a,a) == c)\n            DLIB_TEST(join_cols(a,abs(a)) == c)\n            DLIB_TEST(join_rows(trans(a),trans(a)) == trans(c))\n        }\n\n        {\n            matrix<int, 2, 3> a;\n            matrix<int, 2, 6> b;\n            matrix<int, 4, 3> c;\n\n            a = 1, 2, 3,\n                4, 5, 6;\n\n            b = 1, 2, 3, 1, 2, 3,\n                4, 5, 6, 4, 5, 6;\n\n            c = 1, 2, 3,\n                4, 5, 6,\n                1, 2, 3,\n                4, 5, 6;\n\n            DLIB_TEST(join_rows(a,a) == b);\n            DLIB_TEST(join_rows(a,abs(a)) == b);\n            DLIB_TEST(join_cols(trans(a), trans(a)) == trans(b));\n            DLIB_TEST(join_cols(a,a) == c)\n            DLIB_TEST(join_cols(a,abs(a)) == c)\n            DLIB_TEST(join_rows(trans(a),trans(a)) == trans(c))\n        }\n\n        {\n            matrix<int, 2, 3> a;\n            matrix<int> a2;\n            matrix<int, 2, 6> b;\n            matrix<int, 4, 3> c;\n\n            a = 1, 2, 3,\n                4, 5, 6;\n\n            a2 = a;\n\n            b = 1, 2, 3, 1, 2, 3,\n                4, 5, 6, 4, 5, 6;\n\n            c = 1, 2, 3,\n                4, 5, 6,\n                1, 2, 3,\n                4, 5, 6;\n\n            DLIB_TEST(join_rows(a,a2) == b);\n            DLIB_TEST(join_rows(a2,a) == b);\n            DLIB_TEST(join_cols(trans(a2), trans(a)) == trans(b));\n            DLIB_TEST(join_cols(a2,a) == c)\n            DLIB_TEST(join_cols(a,a2) == c)\n            DLIB_TEST(join_rows(trans(a2),trans(a)) == trans(c))\n        }\n\n        {\n            matrix<int> a, b;\n\n            a.set_size(2,3);\n\n            a = 1, 2, 3,\n                4, 5, 6;\n\n            b.set_size(3,2);\n            b = 1, 2,\n                3, 4,\n                5, 6;\n\n            DLIB_TEST(reshape(a, 3, 2) == b);\n\n            b.set_size(2,3);\n            b = 1, 4, 2,\n                5, 3, 6;\n\n            DLIB_TEST(reshape(trans(a), 2, 3) == b);\n\n        }\n\n        {\n            matrix<int,2,3> a;\n            matrix<int> b;\n\n            a = 1, 2, 3,\n                4, 5, 6;\n\n            b.set_size(3,2);\n            b = 1, 2,\n                3, 4,\n                5, 6;\n\n            DLIB_TEST(reshape(a, 3, 2) == b);\n\n            b.set_size(2,3);\n            b = 1, 4, 2,\n                5, 3, 6;\n\n            DLIB_TEST(reshape(trans(a), 2, 3) == b);\n\n        }\n\n        {\n            std::vector<int> v(6);\n            for (unsigned long i = 0; i < v.size(); ++i)\n                v[i] = i;\n\n            matrix<int,2,3> a;\n            a = 0, 1, 2, \n                3, 4, 5;\n\n            DLIB_TEST(mat(&v[0], 2, 3) == a);\n        }\n\n        {\n            matrix<int> a(3,4);\n            matrix<int> b(3,1), c(1,4);\n\n            a = 1, 2, 3, 6,\n                4, 5, 6, 9,\n                1, 1, 1, 3;\n\n            b(0) = sum(rowm(a,0));\n            b(1) = sum(rowm(a,1));\n            b(2) = sum(rowm(a,2));\n\n            c(0) = sum(colm(a,0));\n            c(1) = sum(colm(a,1));\n            c(2) = sum(colm(a,2));\n            c(3) = sum(colm(a,3));\n\n            DLIB_TEST(sum_cols(a) == b);\n            DLIB_TEST(sum_rows(a) == c);\n\n        }\n\n        {\n            matrix<int> m(3,3);\n\n            m = 1, 2, 3,\n                4, 5, 6,\n                7, 8, 9;\n\n            DLIB_TEST(make_symmetric(m) == trans(make_symmetric(m)));\n            DLIB_TEST(lowerm(make_symmetric(m)) == lowerm(m));\n            DLIB_TEST(upperm(make_symmetric(m)) == trans(lowerm(m)));\n        }\n\n        {\n            matrix<int,3,4> a;\n            matrix<int> b(3,1), c(1,4);\n\n            a = 1, 2, 3, 6,\n                4, 5, 6, 9,\n                1, 1, 1, 3;\n\n            b(0) = sum(rowm(a,0));\n            b(1) = sum(rowm(a,1));\n            b(2) = sum(rowm(a,2));\n\n            c(0) = sum(colm(a,0));\n            c(1) = sum(colm(a,1));\n            c(2) = sum(colm(a,2));\n            c(3) = sum(colm(a,3));\n\n            DLIB_TEST(sum_cols(a) == b);\n            DLIB_TEST(sum_rows(a) == c);\n\n        }\n\n        {\n            matrix<int> m(3,4), s(3,4);\n            m = -2, 1, 5, -5,\n                5, 5, 5, 5,\n                9, 0, -4, -2;\n\n            s = -1, 1, 1, -1,\n                 1, 1, 1, 1, \n                 1, 1, -1, -1;\n\n            DLIB_TEST(sign(m) == s);\n            DLIB_TEST(sign(matrix_cast<double>(m)) == matrix_cast<double>(s));\n        }\n\n    }\n\n\n    void test_matrix_IO()\n    {\n        dlib::rand rnd;\n        print_spinner();\n\n        for (int i = 0; i < 400; ++i)\n        {\n            ostringstream sout;\n            sout.precision(20);\n\n            matrix<double> m1, m2, m3;\n\n            const long r = rnd.get_random_32bit_number()%7+1;\n            const long c = rnd.get_random_32bit_number()%7+1;\n            const long num = rnd.get_random_32bit_number()%2+1;\n\n            m1 = randm(r,c,rnd);\n            sout << m1;\n            if (num != 1)\n                sout << \"\\n\" << m1;\n\n            if (rnd.get_random_double() < 0.3)\n                sout << \"   \\n\";\n            else if (rnd.get_random_double() < 0.3)\n                sout << \"   \\n\\n 3 3 3 3\";\n            else if (rnd.get_random_double() < 0.3)\n                sout << \"   \\n \\n  v 3 3 3 3 3\";\n\n            istringstream sin(sout.str());\n            sin >> m2;\n            DLIB_TEST_MSG(equal(m1,m2),  m1 << \"\\n***********\\n\" << m2);\n\n            if (num != 1)\n            {\n                sin >> m3;\n                DLIB_TEST_MSG(equal(m1,m3),  m1 << \"\\n***********\\n\" << m3);\n            }\n        }\n\n\n        {\n            istringstream sin(\" 1 2\\n3\");\n            matrix<double> m;\n            DLIB_TEST(sin.good());\n            sin >> m;\n            DLIB_TEST(!sin.good());\n        }\n        {\n            istringstream sin(\"\");\n            matrix<double> m;\n            DLIB_TEST(sin.good());\n            sin >> m;\n            DLIB_TEST(!sin.good());\n        }\n    }\n\n\n\n\n    class matrix_tester : public tester\n    {\n    public:\n        matrix_tester (\n        ) :\n            tester (\"test_matrix3\",\n                    \"Runs tests on the matrix component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_matrix_IO();\n            matrix_test();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/matrix4.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n\n#include \"tester.h\"\n#include <dlib/memory_manager_stateless.h>\n#include <dlib/array2d.h>\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.matrix4\");\n\n    void matrix_test (\n    )\n    /*!\n        ensures\n            - runs tests on the matrix stuff compliance with the specs\n    !*/\n    {        \n        print_spinner();\n\n        {\n            matrix<double,3,3> m = round(10*randm(3,3));\n            matrix<double,3,1> v = round(10*randm(3,1));\n\n            DLIB_TEST(equal( m*diagm(v) , m*tmp(diagm(v)) ));\n            DLIB_TEST(equal( scale_columns(m,v) , m*tmp(diagm(v)) ));\n\n            DLIB_TEST(equal( diagm(v)*m , tmp(diagm(v))*m )); \n            DLIB_TEST(equal( scale_rows(m,v) , tmp(diagm(v))*m )); \n        }\n\n        {\n            matrix<double,3,3> m = round(10*randm(3,3));\n            matrix<double,1,3> v = round(10*randm(1,3));\n\n            DLIB_TEST(equal( m*diagm(v) , m*tmp(diagm(v)) ));\n            DLIB_TEST(equal( scale_columns(m,v) , m*tmp(diagm(v)) ));\n\n            DLIB_TEST(equal( diagm(v)*m , tmp(diagm(v))*m )); \n            DLIB_TEST(equal( scale_rows(m,v) , tmp(diagm(v))*m )); \n        }\n\n        {\n            matrix<double> m = round(10*randm(3,3));\n            matrix<double,1,3> v = round(10*randm(1,3));\n\n            DLIB_TEST(equal( m*diagm(v) , m*tmp(diagm(v)) ));\n            DLIB_TEST(equal( scale_columns(m,v) , m*tmp(diagm(v)) ));\n\n            DLIB_TEST(equal( diagm(v)*m , tmp(diagm(v))*m )); \n            DLIB_TEST(equal( scale_rows(m,v) , tmp(diagm(v))*m )); \n        }\n\n        {\n            matrix<double> m = round(10*randm(3,3));\n            matrix<double,0,3> v = round(10*randm(1,3));\n\n            DLIB_TEST(equal( m*diagm(v) , m*tmp(diagm(v)) ));\n            DLIB_TEST(equal( scale_columns(m,v) , m*tmp(diagm(v)) ));\n\n            DLIB_TEST(equal( diagm(v)*m , tmp(diagm(v))*m )); \n            DLIB_TEST(equal( scale_rows(m,v) , tmp(diagm(v))*m )); \n        }\n\n\n        {\n            matrix<double> m = round(10*randm(3,3));\n            matrix<double,1,0> v = round(10*randm(1,3));\n\n            DLIB_TEST(equal( m*diagm(v) , m*tmp(diagm(v)) ));\n            DLIB_TEST(equal( scale_columns(m,v) , m*tmp(diagm(v)) ));\n\n            DLIB_TEST(equal( diagm(v)*m , tmp(diagm(v))*m )); \n            DLIB_TEST(equal( scale_rows(m,v) , tmp(diagm(v))*m )); \n        }\n\n        {\n            matrix<double> m = round(10*randm(3,3));\n            matrix<double,3,0> v = round(10*randm(3,1));\n\n            DLIB_TEST(equal( m*diagm(v) , m*tmp(diagm(v)) ));\n            DLIB_TEST(equal( scale_columns(m,v) , m*tmp(diagm(v)) ));\n\n            DLIB_TEST(equal( diagm(v)*m , tmp(diagm(v))*m )); \n            DLIB_TEST(equal( scale_rows(m,v) , tmp(diagm(v))*m )); \n        }\n\n\n        {\n            matrix<double> m = round(10*randm(3,3));\n            matrix<double,0,1> v = round(10*randm(3,1));\n\n            DLIB_TEST(equal( m*diagm(v) , m*tmp(diagm(v)) ));\n            DLIB_TEST(equal( scale_columns(m,v) , m*tmp(diagm(v)) ));\n\n            DLIB_TEST(equal( diagm(v)*m , tmp(diagm(v))*m )); \n            DLIB_TEST(equal( scale_rows(m,v) , tmp(diagm(v))*m )); \n        }\n\n        {\n            matrix<double,3,3> m = round(10*randm(3,3));\n            matrix<double,3,0> v = round(10*randm(3,1));\n\n            DLIB_TEST(equal( m*diagm(v) , m*tmp(diagm(v)) ));\n            DLIB_TEST(equal( scale_columns(m,v) , m*tmp(diagm(v)) ));\n\n            DLIB_TEST(equal( diagm(v)*m , tmp(diagm(v))*m )); \n            DLIB_TEST(equal( scale_rows(m,v) , tmp(diagm(v))*m )); \n        }\n\n\n        {\n            matrix<double,3,3> m = round(10*randm(3,3));\n            matrix<double,0,1> v = round(10*randm(3,1));\n\n            DLIB_TEST(equal( m*diagm(v) , m*tmp(diagm(v)) ));\n            DLIB_TEST(equal( scale_columns(m,v) , m*tmp(diagm(v)) ));\n\n            DLIB_TEST(equal( diagm(v)*m , tmp(diagm(v))*m )); \n            DLIB_TEST(equal( scale_rows(m,v) , tmp(diagm(v))*m )); \n        }\n\n        {\n            matrix<double,3,5> m = round(10*randm(3,5));\n            matrix<double,0,1> v1 = round(10*randm(5,1));\n            matrix<double,0,1> v2 = round(10*randm(3,1));\n\n            DLIB_TEST(equal( m*diagm(v1) , m*tmp(diagm(v1)) ));\n            DLIB_TEST(equal( scale_columns(m,v1) , m*tmp(diagm(v1)) ));\n\n            DLIB_TEST(equal( diagm(v2)*m , tmp(diagm(v2))*m )); \n            DLIB_TEST(equal( scale_rows(m,v2) , tmp(diagm(v2))*m )); \n        }\n\n        {\n            matrix<double,3,5> m = round(10*randm(3,5));\n            matrix<double,5,1> v1 = round(10*randm(5,1));\n            matrix<double,3,1> v2 = round(10*randm(3,1));\n\n            DLIB_TEST(equal( m*diagm(v1) , m*tmp(diagm(v1)) ));\n            DLIB_TEST(equal( scale_columns(m,v1) , m*tmp(diagm(v1)) ));\n\n            DLIB_TEST(equal( diagm(v2)*m , tmp(diagm(v2))*m )); \n            DLIB_TEST(equal( scale_rows(m,v2) , tmp(diagm(v2))*m )); \n        }\n\n    }\n\n    void test_stuff()\n    {\n        print_spinner();\n\n        {\n            matrix<double> m(3,3), lr(3,3), ud(3,3);\n\n            m = 1,2,3,\n                4,5,6,\n                7,8,9;\n\n\n            lr = 3,2,1,\n                 6,5,4,\n                 9,8,7;\n\n            ud = 7,8,9,\n                 4,5,6,\n                 1,2,3;\n\n            DLIB_TEST(lr == fliplr(m));\n            DLIB_TEST(ud == flipud(m));\n        }\n        {\n            matrix<double> m(3,2), lr(3,2), ud(3,2);\n\n            m = 1,2,\n                3,4,\n                5,6;\n\n            lr = 2,1,\n                 4,3,\n                 6,5;\n\n            ud = 5,6,\n                 3,4,\n                 1,2;\n\n            DLIB_TEST(lr == fliplr(m));\n            DLIB_TEST(ud == flipud(m));\n        }\n\n        {\n            matrix<int> a, b;\n\n            a = matrix_cast<int>(round(10*randm(3,3)));\n            b = a;\n\n            b *= b;\n            DLIB_TEST(b == a*a);\n        }\n\n        {\n            matrix<double> m(2,3), m2(2,3);\n\n            m = 1,2,3,\n                4,5,6;\n\n\n            m2 = 3,4,5,\n                 6,7,8;\n\n            DLIB_TEST(m + 2 == m2);\n            DLIB_TEST(2 + m == m2);\n\n            m += 2;\n            DLIB_TEST(m == m2);\n            m -= 2;\n\n            m2 = 0,1,2,\n                 3,4,5;\n\n            DLIB_TEST(m - 1 == m2);\n\n            m -= 1;\n            DLIB_TEST(m == m2);\n            m += 1;\n\n\n            m2 = 5,4,3,\n                 2,1,0;\n\n            DLIB_TEST(6 - m == m2);\n        }\n\n        {\n            matrix<float> m(2,3), m2(2,3);\n\n            m = 1,2,3,\n                4,5,6;\n\n\n            m2 = 3,4,5,\n                 6,7,8;\n\n            DLIB_TEST(m + 2 == m2);\n            DLIB_TEST(2 + m == m2);\n\n            m += 2;\n            DLIB_TEST(m == m2);\n            m -= 2;\n\n            m2 = 0,1,2,\n                 3,4,5;\n\n            DLIB_TEST(m - 1 == m2);\n\n            m -= 1;\n            DLIB_TEST(m == m2);\n            m += 1;\n\n\n            m2 = 5,4,3,\n                 2,1,0;\n\n            DLIB_TEST(6 - m == m2);\n        }\n\n        {\n            matrix<int> m(2,3), m2(2,3);\n\n            m = 1,2,3,\n                4,5,6;\n\n\n            m2 = 3,4,5,\n                 6,7,8;\n\n            DLIB_TEST(m + 2 == m2);\n            DLIB_TEST(2 + m == m2);\n\n            m += 2;\n            DLIB_TEST(m == m2);\n            m -= 2;\n\n            m2 = 0,1,2,\n                 3,4,5;\n\n            DLIB_TEST(m - 1 == m2);\n\n            m -= 1;\n            DLIB_TEST(m == m2);\n            m += 1;\n\n\n            m2 = 5,4,3,\n                 2,1,0;\n\n            DLIB_TEST(6 - m == m2);\n        }\n\n        {\n            matrix<int,2,3> m, m2;\n\n            m = 1,2,3,\n                4,5,6;\n\n\n            m2 = 3,4,5,\n                 6,7,8;\n\n            DLIB_TEST(m + 2 == m2);\n            DLIB_TEST(2 + m == m2);\n\n            m += 2;\n            DLIB_TEST(m == m2);\n            m -= 2;\n\n            m2 = 0,1,2,\n                 3,4,5;\n\n            DLIB_TEST(m - 1 == m2);\n\n            m -= 1;\n            DLIB_TEST(m == m2);\n            m += 1;\n\n\n            m2 = 5,4,3,\n                 2,1,0;\n\n            DLIB_TEST(6 - m == m2);\n        }\n\n        {\n            matrix<double> m(2,3), m2(3,2);\n\n            m = 1,2,3,\n                4,5,6;\n\n            m2 = 2,5,\n                 3,6,\n                 4,7;\n\n            DLIB_TEST(trans(m+1) == m2);\n            DLIB_TEST(trans(m)+1 == m2);\n            DLIB_TEST(1+trans(m) == m2);\n            DLIB_TEST(1+m-1 == m);\n\n            m = trans(m+1);\n            DLIB_TEST(m == m2);\n            m = trans(m-1);\n            DLIB_TEST(trans(m+1) == m2);\n            m = trans(m)+1;\n            DLIB_TEST(m == m2);\n        }\n\n        {\n            matrix<double> d(3,1), di(3,1);\n            matrix<double> m(3,3);\n             \n            m = 1,2,3,\n                4,5,6,\n                7,8,9;\n\n            d = 1,2,3;\n\n            di = 1, 1/2.0, 1/3.0;\n\n            DLIB_TEST(inv(diagm(d)) == diagm(di));\n            DLIB_TEST(pinv(diagm(d)) == diagm(di));\n            DLIB_TEST(inv(diagm(d))*m == tmp(diagm(di))*m);\n            DLIB_TEST(m*inv(diagm(d)) == m*tmp(diagm(di)));\n\n            DLIB_TEST(equal(inv(diagm(d)) + m , tmp(diagm(di)) + m));\n            DLIB_TEST(equal(m + inv(diagm(d)) , tmp(diagm(di)) + m));\n\n            DLIB_TEST((m + identity_matrix<double>(3) == m + tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + identity_matrix<double,3>() == m + tmp(identity_matrix<double,3>())));\n            DLIB_TEST((m + 2*identity_matrix<double>(3) == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + 2*identity_matrix<double,3>() == m + 2*tmp(identity_matrix<double,3>())));\n            DLIB_TEST((m + identity_matrix<double>(3)*2 == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + identity_matrix<double,3>()*2 == m + 2*tmp(identity_matrix<double,3>())));\n\n            DLIB_TEST((identity_matrix<double>(3) + m == m + tmp(identity_matrix<double>(3))));\n            DLIB_TEST((identity_matrix<double,3>() + m == m + tmp(identity_matrix<double,3>())));\n            DLIB_TEST((2*identity_matrix<double>(3) + m == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((2*identity_matrix<double,3>() + m == m + 2*tmp(identity_matrix<double,3>())));\n\n        }\n        {\n            matrix<double,3,1> d(3,1), di(3,1);\n            matrix<double,3,3> m(3,3);\n             \n            m = 1,2,3,\n                4,5,6,\n                7,8,9;\n\n            d = 1,2,3;\n\n            di = 1, 1/2.0, 1/3.0;\n\n            DLIB_TEST(equal(inv(diagm(d)) , diagm(di)));\n            DLIB_TEST(equal(inv(diagm(d)) , diagm(di)));\n            DLIB_TEST(equal(inv(diagm(d))*m , tmp(diagm(di))*m));\n            DLIB_TEST(equal(m*inv(diagm(d)) , m*tmp(diagm(di))));\n\n            DLIB_TEST_MSG(equal(inv(diagm(d)) + m , tmp(diagm(di)) + m), \n                          (inv(diagm(d)) + m) - (tmp(diagm(di)) + m) );\n            DLIB_TEST(equal(m + inv(diagm(d)) , tmp(diagm(di)) + m));\n\n\n            DLIB_TEST((m + identity_matrix<double>(3) == m + tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + identity_matrix<double,3>() == m + tmp(identity_matrix<double,3>())));\n            DLIB_TEST((m + 2*identity_matrix<double>(3) == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + 2*identity_matrix<double,3>() == m + 2*tmp(identity_matrix<double,3>())));\n            DLIB_TEST((m + identity_matrix<double>(3)*2 == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + identity_matrix<double,3>()*2 == m + 2*tmp(identity_matrix<double,3>())));\n\n            DLIB_TEST((identity_matrix<double>(3) + m == m + tmp(identity_matrix<double>(3))));\n            DLIB_TEST((identity_matrix<double,3>() + m == m + tmp(identity_matrix<double,3>())));\n            DLIB_TEST((2*identity_matrix<double>(3) + m == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((2*identity_matrix<double,3>() + m == m + 2*tmp(identity_matrix<double,3>())));\n        }\n\n        {\n            matrix<double,1,3> d(1,3), di(1,3);\n            matrix<double,3,3> m(3,3);\n             \n            m = 1,2,3,\n                4,5,6,\n                7,8,9;\n\n            d = 1,2,3;\n\n            di = 1, 1/2.0, 1/3.0;\n\n            DLIB_TEST(equal(inv(diagm(d)) , diagm(di)));\n            DLIB_TEST(equal(inv(diagm(d)) , diagm(di)));\n            DLIB_TEST(equal(inv(diagm(d))*m , tmp(diagm(di))*m));\n            DLIB_TEST(equal(m*inv(diagm(d)) , m*tmp(diagm(di))));\n\n            DLIB_TEST(equal(inv(diagm(d)) + m , tmp(diagm(di)) + m));\n            DLIB_TEST(equal(m + inv(diagm(d)) , tmp(diagm(di)) + m));\n\n\n            DLIB_TEST((m + identity_matrix<double>(3) == m + tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + identity_matrix<double,3>() == m + tmp(identity_matrix<double,3>())));\n            DLIB_TEST((m + 2*identity_matrix<double>(3) == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + 2*identity_matrix<double,3>() == m + 2*tmp(identity_matrix<double,3>())));\n            DLIB_TEST((m + identity_matrix<double>(3)*2 == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + identity_matrix<double,3>()*2 == m + 2*tmp(identity_matrix<double,3>())));\n\n            DLIB_TEST((identity_matrix<double>(3) + m == m + tmp(identity_matrix<double>(3))));\n            DLIB_TEST((identity_matrix<double,3>() + m == m + tmp(identity_matrix<double,3>())));\n            DLIB_TEST((2*identity_matrix<double>(3) + m == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((2*identity_matrix<double,3>() + m == m + 2*tmp(identity_matrix<double,3>())));\n        }\n\n        {\n            matrix<double,1,0> d(1,3), di(1,3);\n            matrix<double,0,3> m(3,3);\n             \n            m = 1,2,3,\n                4,5,6,\n                7,8,9;\n\n            d = 1,2,3;\n\n            di = 1, 1/2.0, 1/3.0;\n\n            DLIB_TEST(equal(inv(diagm(d)) , diagm(di)));\n            DLIB_TEST(equal(inv(diagm(d)) , diagm(di)));\n            DLIB_TEST(equal(inv(diagm(d))*m , tmp(diagm(di))*m));\n            DLIB_TEST(equal(m*inv(diagm(d)) , m*tmp(diagm(di))));\n\n            DLIB_TEST(equal(inv(diagm(d)) + m , tmp(diagm(di)) + m));\n            DLIB_TEST(equal(m + inv(diagm(d)) , tmp(diagm(di)) + m));\n\n\n            DLIB_TEST((m + identity_matrix<double>(3) == m + tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + identity_matrix<double,3>() == m + tmp(identity_matrix<double,3>())));\n            DLIB_TEST((m + 2*identity_matrix<double>(3) == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + 2*identity_matrix<double,3>() == m + 2*tmp(identity_matrix<double,3>())));\n            DLIB_TEST((m + identity_matrix<double>(3)*2 == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((m + identity_matrix<double,3>()*2 == m + 2*tmp(identity_matrix<double,3>())));\n\n            DLIB_TEST((identity_matrix<double>(3) + m == m + tmp(identity_matrix<double>(3))));\n            DLIB_TEST((identity_matrix<double,3>() + m == m + tmp(identity_matrix<double,3>())));\n            DLIB_TEST((2*identity_matrix<double>(3) + m == m + 2*tmp(identity_matrix<double>(3))));\n            DLIB_TEST((2*identity_matrix<double,3>() + m == m + 2*tmp(identity_matrix<double,3>())));\n        }\n\n\n        {\n            matrix<double,3,1> d1, d2;\n\n            d1 = 1,2,3;\n\n            d2 = 2,3,4;\n\n            matrix<double,3,3> ans;\n            ans = 2, 0, 0,\n                  0, 6, 0,\n                  0, 0, 12;\n\n            DLIB_TEST(ans == diagm(d1)*diagm(d2));\n        }\n\n\n        dlib::rand rnd;\n        for (int i = 0; i < 1; ++i)\n        {\n            matrix<double> d1 = randm(4,1,rnd);\n            matrix<double,5,1> d2 = randm(5,1,rnd);\n\n            matrix<double,4,5> m = randm(4,5,rnd);\n\n            DLIB_TEST_MSG(equal(pointwise_multiply(d1*trans(d2), m) , diagm(d1)*m*diagm(d2)),\n                          pointwise_multiply(d1*trans(d2), m) - diagm(d1)*m*diagm(d2)\n            );\n            DLIB_TEST(equal(pointwise_multiply(d1*trans(d2), m) , diagm(d1)*(m*diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply(d1*trans(d2), m) , (diagm(d1)*m)*diagm(d2)));\n\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans(reciprocal(d2)), m) , inv(diagm(d1))*m*inv(diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans(reciprocal(d2)), m) , inv(diagm(d1))*(m*inv(diagm(d2)))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans(reciprocal(d2)), m) , (inv(diagm(d1))*m)*inv(diagm(d2))));\n\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans((d2)), m) , inv(diagm(d1))*m*(diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans((d2)), m) , inv(diagm(d1))*(m*(diagm(d2)))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans((d2)), m) , (inv(diagm(d1))*m)*(diagm(d2))));\n\n            DLIB_TEST(equal(pointwise_multiply((d1)*trans(reciprocal(d2)), m) , (diagm(d1))*m*inv(diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply((d1)*trans(reciprocal(d2)), m) , (diagm(d1))*(m*inv(diagm(d2)))));\n            DLIB_TEST(equal(pointwise_multiply((d1)*trans(reciprocal(d2)), m) , ((diagm(d1))*m)*inv(diagm(d2))));\n        }\n        for (int i = 0; i < 1; ++i)\n        {\n            matrix<double,4,1> d1 = randm(4,1,rnd);\n            matrix<double,5,1> d2 = randm(5,1,rnd);\n\n            matrix<double,4,5> m = randm(4,5,rnd);\n\n            DLIB_TEST(equal(pointwise_multiply(d1*trans(d2), m) , diagm(d1)*m*diagm(d2)));\n            DLIB_TEST(equal(pointwise_multiply(d1*trans(d2), m) , diagm(d1)*(m*diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply(d1*trans(d2), m) , (diagm(d1)*m)*diagm(d2)));\n\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans(reciprocal(d2)), m) , inv(diagm(d1))*m*inv(diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans(reciprocal(d2)), m) , inv(diagm(d1))*(m*inv(diagm(d2)))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans(reciprocal(d2)), m) , (inv(diagm(d1))*m)*inv(diagm(d2))));\n\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans((d2)), m) , inv(diagm(d1))*m*(diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans((d2)), m) , inv(diagm(d1))*(m*(diagm(d2)))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans((d2)), m) , (inv(diagm(d1))*m)*(diagm(d2))));\n\n            DLIB_TEST(equal(pointwise_multiply((d1)*trans(reciprocal(d2)), m) , (diagm(d1))*m*inv(diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply((d1)*trans(reciprocal(d2)), m) , (diagm(d1))*(m*inv(diagm(d2)))));\n            DLIB_TEST(equal(pointwise_multiply((d1)*trans(reciprocal(d2)), m) , ((diagm(d1))*m)*inv(diagm(d2))));\n        }\n        for (int i = 0; i < 1; ++i)\n        {\n            matrix<double,4,1> d1 = randm(4,1,rnd);\n            matrix<double,5,1> d2 = randm(5,1,rnd);\n\n            matrix<double,0,0> m = randm(4,5,rnd);\n\n            DLIB_TEST(equal(pointwise_multiply(d1*trans(d2), m) , diagm(d1)*m*diagm(d2)));\n            DLIB_TEST(equal(pointwise_multiply(d1*trans(d2), m) , diagm(d1)*(m*diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply(d1*trans(d2), m) , (diagm(d1)*m)*diagm(d2)));\n\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans(reciprocal(d2)), m) , inv(diagm(d1))*m*inv(diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans(reciprocal(d2)), m) , inv(diagm(d1))*(m*inv(diagm(d2)))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans(reciprocal(d2)), m) , (inv(diagm(d1))*m)*inv(diagm(d2))));\n\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans((d2)), m) , inv(diagm(d1))*m*(diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans((d2)), m) , inv(diagm(d1))*(m*(diagm(d2)))));\n            DLIB_TEST(equal(pointwise_multiply(reciprocal(d1)*trans((d2)), m) , (inv(diagm(d1))*m)*(diagm(d2))));\n\n            DLIB_TEST(equal(pointwise_multiply((d1)*trans(reciprocal(d2)), m) , (diagm(d1))*m*inv(diagm(d2))));\n            DLIB_TEST(equal(pointwise_multiply((d1)*trans(reciprocal(d2)), m) , (diagm(d1))*(m*inv(diagm(d2)))));\n            DLIB_TEST(equal(pointwise_multiply((d1)*trans(reciprocal(d2)), m) , ((diagm(d1))*m)*inv(diagm(d2))));\n        }\n\n\n\n        {\n            for (int i = 0; i < 5; ++i)\n            {\n                matrix<double> m = randm(3,4) + 1;\n\n                DLIB_TEST(equal(1.0/m , reciprocal(m)));\n                DLIB_TEST(equal(0.0/m , zeros_matrix<double>(3,4)));\n            }\n        }\n\n        {\n            matrix<int> m(2,3);\n            m = 1,2,3,\n                4,5,6;\n            matrix<int> M(2,3);\n            M = m;\n\n            DLIB_TEST(upperbound(m,6) == M);\n            DLIB_TEST(upperbound(m,60) == M);\n            DLIB_TEST(lowerbound(m,-2) == M);\n            DLIB_TEST(lowerbound(m,0) == M);\n\n            M = 2,2,3,\n                4,5,6;\n            DLIB_TEST(lowerbound(m,2) == M);\n\n            M = 0,0,0,\n                0,0,0;\n            DLIB_TEST(upperbound(m,0) == M);\n\n            M = 1,2,3,\n                3,3,3;\n            DLIB_TEST(upperbound(m,3) == M);\n        }\n    }\n\n\n\n    template <\n        long D1,\n        long D2, \n        long D3,\n        long D4\n        >\n    void test_conv()\n    {\n        dlog << LINFO << D1 << \" \" << D2 << \" \" << D3 << \" \" << D4;\n        matrix<int,D1,D1> a(1,1);\n        matrix<int,D2,D2> b(2,2); \n        matrix<int,D3,D3> c(3,3); \n        matrix<int,D4,D1> d(4,1);\n\n        a = 4;\n\n        b = 1,2,\n            3,4;\n\n        c = 1,2,3,\n            4,5,6,\n            7,8,9;\n\n        d = 1,\n            2,\n            3,\n            4;\n        \n        matrix<int> temp(4,4), temp2;\n        temp =     1,    4,    7,    6,\n                    7,   23,   33,   24,\n                    19,   53,   63,   42,\n                    21,   52,   59,   36;\n\n        DLIB_TEST(conv(b,c) == temp);\n        DLIB_TEST(conv(c,b) == temp);\n        DLIB_TEST(xcorr(c,flip(b)) == temp);\n\n        temp.set_size(2,2);\n        temp =   23,   33,\n                53,   63;\n        DLIB_TEST(conv_same(b,c) == temp);\n        DLIB_TEST(xcorr_same(b,flip(c)) == temp);\n\n        temp2.set_size(2,2);\n        temp2 = 63, 53,\n                33, 23;\n        DLIB_TEST(flip(temp) == temp2);\n        DLIB_TEST(flip(temp) == fliplr(flipud(temp)));\n\n        DLIB_TEST(conv_valid(b,c).nr() == 0);\n        DLIB_TEST(conv_valid(b,c).nc() == 0);\n\n        DLIB_TEST(conv_valid(c,b) == temp);\n        DLIB_TEST(xcorr_valid(c,flip(b)) == temp);\n\n        temp.set_size(1,1);\n        temp =  16;\n\n        DLIB_TEST(conv(a,a) == temp);\n        DLIB_TEST(conv_same(a,a) == temp);\n        DLIB_TEST(conv_valid(a,a) == temp);\n        DLIB_TEST(xcorr(a,a) == temp);\n        DLIB_TEST(xcorr_same(a,a) == temp);\n        DLIB_TEST(xcorr_valid(a,a) == temp);\n\n        temp.set_size(0,0);\n        DLIB_TEST(conv(temp,temp).nr() == 0);\n        DLIB_TEST(conv(temp,temp).nc() == 0);\n        DLIB_TEST(conv_same(temp,temp).nr() == 0);\n        DLIB_TEST(conv_same(temp,temp).nc() == 0);\n        DLIB_TEST_MSG(conv_valid(temp,temp).nr() == 0, conv_valid(temp,temp).nr());\n        DLIB_TEST(conv_valid(temp,temp).nc() == 0);\n        DLIB_TEST(conv(c,temp).nr() == 0);\n        DLIB_TEST(conv(c,temp).nc() == 0);\n        DLIB_TEST(conv_same(c,temp).nr() == 0);\n        DLIB_TEST(conv_same(c,temp).nc() == 0);\n        DLIB_TEST(conv_valid(c,temp).nr() == 0);\n        DLIB_TEST(conv_valid(c,temp).nc() == 0);\n        DLIB_TEST(conv(temp,c).nr() == 0);\n        DLIB_TEST(conv(temp,c).nc() == 0);\n        DLIB_TEST(conv_same(temp,c).nr() == 0);\n        DLIB_TEST(conv_same(temp,c).nc() == 0);\n        DLIB_TEST(conv_valid(temp,c).nr() == 0);\n        DLIB_TEST(conv_valid(temp,c).nc() == 0);\n\n        temp.set_size(5,2);\n        temp =     1,    2,\n                    5,    8,\n                    9,   14,\n                    13,   20,\n                    12,   16;\n        DLIB_TEST(conv(b,d) == temp);\n        DLIB_TEST(xcorr(b,flip(d)) == temp);\n\n        temp.set_size(2,2);\n        temp =    9,   14,\n                13,   20;\n        DLIB_TEST(conv_same(b,d) == temp);\n        DLIB_TEST(xcorr_same(b,flip(d)) == temp);\n\n        DLIB_TEST(conv_valid(b,d).nr() == 0);\n        DLIB_TEST(xcorr_valid(b,flip(d)).nr() == 0);\n        DLIB_TEST_MSG(conv_valid(b,d).nc() == 0, conv_valid(b,d).nc());\n        DLIB_TEST(xcorr_valid(b,flip(d)).nc() == 0);\n\n        temp.set_size(5,5);\n        temp =      1,     4,    10,    12,     9,\n                    8,    26,    56,    54,    36,\n                    30,    84,   165,   144,    90,\n                    56,   134,   236,   186,   108,\n                    49,   112,   190,   144,    81;\n\n        DLIB_TEST(conv(c,c) == temp);\n        DLIB_TEST(xcorr(c,flip(c)) == temp);\n        matrix<int> temp3 = c;\n        temp3 = conv(temp3,c);\n        DLIB_TEST(temp3 == temp);\n\n        temp3 = c;\n        temp3 = conv(c,temp3);\n        DLIB_TEST(temp3 == temp);\n\n\n        temp.set_size(3,3);\n        temp =     26,    56,    54,\n                    84,   165,   144,\n                    134,   236,   186;\n        DLIB_TEST(conv_same(c,c) == temp);\n        DLIB_TEST(xcorr_same(c,flip(c)) == temp);\n        temp3 = c;\n        temp3 = conv_same(c,temp3);\n        DLIB_TEST(temp3 == temp);\n        temp3 = c;\n        temp3 = conv_same(temp3,c);\n        DLIB_TEST(temp3 == temp);\n\n        temp.set_size(1,1);\n        temp = 165;\n        DLIB_TEST(conv_valid(c,c) == temp);\n        DLIB_TEST(xcorr_valid(c,flip(c)) == temp);\n        temp3 = c;\n        temp3 = conv_valid(c,temp3);\n        DLIB_TEST(temp3 == temp);\n        temp3 = c;\n        temp3 = conv_valid(temp3,c);\n        DLIB_TEST(temp3 == temp);\n\n\n        for (int i = 0; i < 3; ++i)\n        {\n            dlib::rand rnd;\n            matrix<complex<int> > a, b;\n            a = complex_matrix(matrix_cast<int>(round(20*randm(2,7,rnd))), \n                               matrix_cast<int>(round(20*randm(2,7,rnd))));\n            b = complex_matrix(matrix_cast<int>(round(20*randm(3,2,rnd))), \n                               matrix_cast<int>(round(20*randm(3,2,rnd))));\n\n            DLIB_TEST(xcorr(a,b)       == conv(a, flip(conj(b))));\n            DLIB_TEST(xcorr_valid(a,b) == conv_valid(a, flip(conj(b))));\n            DLIB_TEST(xcorr_same(a,b)  == conv_same(a, flip(conj(b))));\n        }\n    }\n\n    void test_complex()\n    {\n        matrix<complex<double> > a, b;\n\n        a = complex_matrix(linspace(1,7,7), linspace(2,8,7));\n        b = complex_matrix(linspace(4,10,7), linspace(2,8,7));\n\n        DLIB_TEST(mean(a) == complex<double>(4, 5));\n    }\n\n    void test_setsubs()\n    {\n        {\n            matrix<double> m(3,3);\n            m = 0;\n\n            set_colm(m,0) += 1;\n            set_rowm(m,0) += 1;\n            set_subm(m,1,1,2,2) += 5;\n\n            matrix<double> m2(3,3);\n            m2 = 2, 1, 1,\n                 1, 5, 5, \n                 1, 5, 5;\n\n            DLIB_TEST(m == m2);\n\n            set_colm(m,0) -= 1;\n            set_rowm(m,0) -= 1;\n            set_subm(m,1,1,2,2) -= 5;\n\n            m2 = 0;\n            DLIB_TEST(m == m2);\n\n            matrix<double,1,3> r;\n            matrix<double,3,1> c;\n            matrix<double,2,2> b;\n            r = 1,2,3;\n\n            c = 2,\n                3,\n                4;\n\n            b = 2,3,\n                4,5;\n\n            set_colm(m,1) += c;\n            set_rowm(m,1) += r;\n            set_subm(m,1,1,2,2) += b;\n\n            m2 = 0, 2, 0,\n                 1, 7, 6,\n                 0, 8, 5;\n\n            DLIB_TEST(m2 == m);\n\n            set_colm(m,1) -= c;\n            set_rowm(m,1) -= r;\n            set_subm(m,1,1,2,2) -= b;\n\n            m2 = 0;\n            DLIB_TEST(m2 == m);\n\n\n            // check that the code path for destructive aliasing works right.\n            m = 2*identity_matrix<double>(3);\n            set_colm(m,1) += m*c;\n            m2 = 2, 4, 0,\n                 0, 8, 0,\n                 0, 8, 2;\n            DLIB_TEST(m == m2);\n\n            m = 2*identity_matrix<double>(3);\n            set_colm(m,1) -= m*c;\n            m2 = 2, -4, 0,\n                 0, -4, 0,\n                 0, -8, 2;\n            DLIB_TEST(m == m2);\n\n            m = 2*identity_matrix<double>(3);\n            set_rowm(m,1) += r*m;\n            m2 = 2, 0, 0,\n                 2, 6, 6,\n                 0, 0, 2;\n            DLIB_TEST(m == m2);\n\n            m = 2*identity_matrix<double>(3);\n            set_rowm(m,1) -= r*m;\n            m2 = 2, 0, 0,\n                -2, -2, -6,\n                 0, 0, 2;\n            DLIB_TEST(m == m2);\n\n            m = identity_matrix<double>(3);\n            const rectangle rect(0,0,1,1);\n            set_subm(m,rect) += subm(m,rect)*b;\n            m2 = 3, 3, 0,\n                 4, 6, 0,\n                 0, 0, 1;\n            DLIB_TEST(m == m2);\n\n            m = identity_matrix<double>(3);\n            set_subm(m,rect) -= subm(m,rect)*b;\n            m2 = -1, -3, 0,\n                 -4, -4, 0,\n                  0, 0, 1;\n            DLIB_TEST(m == m2);\n\n        }\n\n        {\n            matrix<double,1,1> a, b;\n            a = 2;\n            b = 3;\n            DLIB_TEST(dot(a,b) == 6);\n        }\n        {\n            matrix<double,1,1> a;\n            matrix<double,0,1> b(1);\n            a = 2;\n            b = 3;\n            DLIB_TEST(dot(a,b) == 6);\n            DLIB_TEST(dot(b,a) == 6);\n        }\n        {\n            matrix<double,1,1> a;\n            matrix<double,1,0> b(1);\n            a = 2;\n            b = 3;\n            DLIB_TEST(dot(a,b) == 6);\n            DLIB_TEST(dot(b,a) == 6);\n        }\n    }\n\n    template <typename T>\n    std::vector<int> tovect1(const T& m)\n    {\n        std::vector<int> temp;\n        for (typename T::const_iterator i = m.begin(); i != m.end(); ++i)\n        {\n            temp.push_back(*i);\n        }\n        return temp;\n    }\n\n    template <typename T>\n    std::vector<int> tovect2(const T& m)\n    {\n        std::vector<int> temp;\n        for (typename T::const_iterator i = m.begin(); i != m.end(); i++)\n        {\n            temp.push_back(*i);\n        }\n        return temp;\n    }\n\n    template <typename T>\n    std::vector<int> tovect3(const T& m_)\n    {\n        matrix<int> m(m_);\n        std::vector<int> temp;\n        for (matrix<int>::iterator i = m.begin(); i != m.end(); ++i)\n        {\n            temp.push_back(*i);\n        }\n        return temp;\n    }\n\n    template <typename T>\n    std::vector<int> tovect4(const T& m_)\n    {\n        matrix<int> m(m_);\n        std::vector<int> temp;\n        for (matrix<int>::iterator i = m.begin(); i != m.end(); i++)\n        {\n            temp.push_back(*i);\n        }\n        return temp;\n    }\n\n    void test_iterators()\n    {\n        matrix<int> m(3,2);\n        m = 1,2,3,\n        4,5,6;\n\n        std::vector<int> v1 = tovect1(m);\n        std::vector<int> v2 = tovect2(m);\n        std::vector<int> v3 = tovect3(m);\n        std::vector<int> v4 = tovect4(m);\n\n        std::vector<int> v5 = tovect1(m+m);\n        std::vector<int> v6 = tovect2(m+m);\n        std::vector<int> v7 = tovect3(m+m);\n        std::vector<int> v8 = tovect4(m+m);\n\n\n        std::vector<int> a1, a2;\n        for (int i = 1; i <= 6; ++i)\n        {\n            a1.push_back(i);\n            a2.push_back(i*2);\n        }\n\n        DLIB_TEST(max(abs(mat(v1) - mat(a1))) == 0);\n        DLIB_TEST(max(abs(mat(v2) - mat(a1))) == 0);\n        DLIB_TEST(max(abs(mat(v3) - mat(a1))) == 0);\n        DLIB_TEST(max(abs(mat(v4) - mat(a1))) == 0);\n\n        DLIB_TEST(max(abs(mat(v5) - mat(a2))) == 0);\n        DLIB_TEST(max(abs(mat(v6) - mat(a2))) == 0);\n        DLIB_TEST(max(abs(mat(v7) - mat(a2))) == 0);\n        DLIB_TEST(max(abs(mat(v8) - mat(a2))) == 0);\n    }\n\n    void test_linpiece()\n    {\n        matrix<double,0,1> temp = linpiece(5, linspace(-1, 9, 2));\n        DLIB_CASSERT(temp.size() == 1,\"\");\n        DLIB_CASSERT(std::abs(temp(0) - 6) < 1e-13,\"\");\n\n        temp = linpiece(5, linspace(-1, 9, 6));\n        DLIB_CASSERT(temp.size() == 5,\"\");\n        DLIB_CASSERT(std::abs(temp(0) - 2) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(1) - 2) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(2) - 2) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(3) - 0) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(4) - 0) < 1e-13,\"\");\n\n        temp = linpiece(4, linspace(-1, 9, 6));\n        DLIB_CASSERT(temp.size() == 5,\"\");\n        DLIB_CASSERT(std::abs(temp(0) - 2) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(1) - 2) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(2) - 1) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(3) - 0) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(4) - 0) < 1e-13,\"\");\n\n        temp = linpiece(40, linspace(-1, 9, 6));\n        DLIB_CASSERT(temp.size() == 5,\"\");\n        DLIB_CASSERT(std::abs(temp(0) - 2) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(1) - 2) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(2) - 2) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(3) - 2) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(4) - 2) < 1e-13,\"\");\n\n        temp = linpiece(-40, linspace(-1, 9, 6));\n        DLIB_CASSERT(temp.size() == 5,\"\");\n        DLIB_CASSERT(std::abs(temp(0) - 0) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(1) - 0) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(2) - 0) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(3) - 0) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(4) - 0) < 1e-13,\"\");\n\n        temp = linpiece(0, linspace(-1, 9, 6));\n        DLIB_CASSERT(temp.size() == 5,\"\");\n        DLIB_CASSERT(std::abs(temp(0) - 1) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(1) - 0) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(2) - 0) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(3) - 0) < 1e-13,\"\");\n        DLIB_CASSERT(std::abs(temp(4) - 0) < 1e-13,\"\");\n\n    }\n\n    class matrix_tester : public tester\n    {\n    public:\n        matrix_tester (\n        ) :\n            tester (\"test_matrix4\",\n                    \"Runs tests on the scale_rows and scale_columns functions.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_iterators();\n            test_setsubs();\n\n            test_conv<0,0,0,0>();\n            test_conv<1,2,3,4>();\n\n            test_stuff();\n            for (int i = 0; i < 10; ++i)\n                matrix_test();\n\n            test_complex();\n            test_linpiece();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/matrix_chol.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n#include <dlib/string.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.matrix_chol\");\n\n    dlib::rand rnd;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename mat_type>\n    const matrix<typename mat_type::type> symm(const mat_type& m) { return m*trans(m); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename type>\n    const matrix<type> randmat(long r, long c)\n    {\n        matrix<type> m(r,c);\n        for (long row = 0; row < m.nr(); ++row)\n        {\n            for (long col = 0; col < m.nc(); ++col)\n            {\n                m(row,col) = static_cast<type>(rnd.get_random_double()); \n            }\n        }\n\n        return m;\n    }\n\n    template <typename type, long NR, long NC>\n    const matrix<type,NR,NC> randmat()\n    {\n        matrix<type,NR,NC> m;\n        for (long row = 0; row < m.nr(); ++row)\n        {\n            for (long col = 0; col < m.nc(); ++col)\n            {\n                m(row,col) = static_cast<type>(rnd.get_random_double()); \n            }\n        }\n\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_type>\n    void test_cholesky ( const matrix_type& m)\n    {\n        typedef typename matrix_type::type type;\n        const type eps = 10*max(abs(m))*sqrt(std::numeric_limits<type>::epsilon());\n        dlog << LDEBUG << \"test_cholesky():  \" << m.nr() << \" x \" << m.nc() << \"  eps: \" << eps;\n        print_spinner();\n\n\n        cholesky_decomposition<matrix_type> test(m);\n\n        // none of the matrices we should be passing in to test_cholesky() should be non-spd.  \n        DLIB_TEST(test.is_spd() == true);\n\n        type temp;\n        DLIB_TEST_MSG( (temp= max(abs(test.get_l()*trans(test.get_l()) - m))) < eps,temp);\n\n        {\n            matrix<type> mat = chol(m);\n            DLIB_TEST_MSG( (temp= max(abs(mat*trans(mat) - m))) < eps,temp);\n        }\n\n\n        matrix<type> m2;\n        matrix<type,0,1> col;\n\n        m2 = identity_matrix<type>(m.nr());\n        DLIB_TEST_MSG(equal(m*test.solve(m2), m2,eps),max(abs(m*test.solve(m2)- m2)));\n        m2 = randmat<type>(m.nr(),5);\n        DLIB_TEST_MSG(equal(m*test.solve(m2), m2,eps),max(abs(m*test.solve(m2)- m2)));\n        m2 = randmat<type>(m.nr(),1);\n        DLIB_TEST_MSG(equal(m*test.solve(m2), m2,eps),max(abs(m*test.solve(m2)- m2)));\n        col = randmat<type>(m.nr(),1);\n        DLIB_TEST_MSG(equal(m*test.solve(col), col,eps),max(abs(m*test.solve(m2)- m2)));\n\n        // now make us a non-spd matrix\n        if (m.nr() > 2)\n        {\n            matrix<type> sm(lowerm(m));\n            sm(1,1) = 0;\n\n            cholesky_decomposition<matrix_type> test2(sm);\n            DLIB_TEST_MSG(test2.is_spd() == false,  test2.get_l());\n\n\n            cholesky_decomposition<matrix_type> test3(sm*trans(sm));\n            DLIB_TEST_MSG(test3.is_spd() == false,  test3.get_l());\n\n            sm = sm*trans(sm);\n            sm(1,1) = 5;\n            sm(1,0) -= 1;\n            cholesky_decomposition<matrix_type> test4(sm);\n            DLIB_TEST_MSG(test4.is_spd() == false,  test4.get_l());\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void matrix_test_double()\n    {\n\n        test_cholesky(uniform_matrix<double>(1,1,1) + 10*symm(randmat<double>(1,1)));\n        test_cholesky(uniform_matrix<double>(2,2,1) + 10*symm(randmat<double>(2,2)));\n        test_cholesky(uniform_matrix<double>(3,3,1) + 10*symm(randmat<double>(3,3)));\n        test_cholesky(uniform_matrix<double>(4,4,1) + 10*symm(randmat<double>(4,4)));\n        test_cholesky(uniform_matrix<double>(15,15,1) + 10*symm(randmat<double>(15,15)));\n        test_cholesky(uniform_matrix<double>(101,101,1) + 10*symm(randmat<double>(101,101)));\n\n        typedef matrix<double,0,0,default_memory_manager, column_major_layout> mat;\n        test_cholesky(mat(uniform_matrix<double>(101,101,1) + 10*symm(randmat<double>(101,101))));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void matrix_test_float()\n    {\n\n        test_cholesky(uniform_matrix<float>(1,1,1) + 2*symm(randmat<float>(1,1)));\n        test_cholesky(uniform_matrix<float>(2,2,1) + 2*symm(randmat<float>(2,2)));\n        test_cholesky(uniform_matrix<float>(3,3,1) + 2*symm(randmat<float>(3,3)));\n\n        typedef matrix<float,0,0,default_memory_manager, column_major_layout> mat;\n        test_cholesky(mat(uniform_matrix<float>(3,3,1) + 2*symm(randmat<float>(3,3))));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class matrix_tester : public tester\n    {\n    public:\n        matrix_tester (\n        ) :\n            tester (\"test_matrix_chol\",\n                    \"Runs tests on the matrix cholesky component.\")\n        {\n            rnd.set_seed(cast_to_string(time(0)));\n        }\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"seed string: \" << rnd.get_seed();\n\n            dlog << LINFO << \"begin testing with double\";\n            matrix_test_double();\n            dlog << LINFO << \"begin testing with float\";\n            matrix_test_float();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/matrix_eig.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n#include <dlib/string.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.matrix_eig\");\n\n    dlib::rand rnd;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename type>\n    const matrix<type> randm(long r, long c)\n    {\n        matrix<type> m(r,c);\n        for (long row = 0; row < m.nr(); ++row)\n        {\n            for (long col = 0; col < m.nc(); ++col)\n            {\n                m(row,col) = static_cast<type>(rnd.get_random_double()); \n            }\n        }\n\n        return m;\n    }\n\n    template <typename type, long NR, long NC>\n    const matrix<type,NR,NC> randm()\n    {\n        matrix<type,NR,NC> m;\n        for (long row = 0; row < m.nr(); ++row)\n        {\n            for (long col = 0; col < m.nc(); ++col)\n            {\n                m(row,col) = static_cast<type>(rnd.get_random_double()); \n            }\n        }\n\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_type, typename U>\n    void test_eigenvalue_impl ( const matrix_type& m,  const eigenvalue_decomposition<U>& test )\n    {\n        typedef typename matrix_type::type type;\n        const type eps = 10*max(abs(m))*sqrt(std::numeric_limits<type>::epsilon());\n        dlog << LDEBUG << \"test_eigenvalue():  \" << m.nr() << \" x \" << m.nc() << \"  eps: \" << eps;\n        print_spinner();\n\n\n        DLIB_TEST(test.dim() == m.nr());\n\n        // make sure all the various ways of asking for the eigenvalues are actually returning a\n        // consistent set of eigenvalues.\n        DLIB_TEST(equal(real(test.get_eigenvalues()), test.get_real_eigenvalues(), eps)); \n        DLIB_TEST(equal(imag(test.get_eigenvalues()), test.get_imag_eigenvalues(), eps)); \n        DLIB_TEST(equal(real(diag(test.get_d())), test.get_real_eigenvalues(), eps)); \n        DLIB_TEST(equal(imag(diag(test.get_d())), test.get_imag_eigenvalues(), eps)); \n\n        matrix<type> eig1 ( real_eigenvalues(m));\n        matrix<type> eig2 ( test.get_real_eigenvalues());\n        sort(&eig1(0), &eig1(0) + eig1.size());\n        sort(&eig2(0), &eig2(0) + eig2.size());\n        DLIB_TEST(max(abs(eig1 - eig2)) < eps);\n\n        const matrix<type> V = test.get_pseudo_v();\n        const matrix<type> D = test.get_pseudo_d();\n        const matrix<complex<type> > CV = test.get_v();\n        const matrix<complex<type> > CD = test.get_d();\n        const matrix<complex<type> > CM = complex_matrix(m, uniform_matrix<type>(m.nr(),m.nc(),0));\n\n        DLIB_TEST(V.nr() == test.dim());\n        DLIB_TEST(V.nc() == test.dim());\n        DLIB_TEST(D.nr() == test.dim());\n        DLIB_TEST(D.nc() == test.dim());\n\n        // CD is a diagonal matrix\n        DLIB_TEST(diagm(diag(CD)) == CD);\n\n        // verify that these things are actually eigenvalues and eigenvectors of m\n        DLIB_TEST_MSG(max(abs(m*V - V*D)) < eps, max(abs(m*V - V*D)) << \"   \" << eps);\n        DLIB_TEST(max(norm(CM*CV - CV*CD)) < eps);\n\n        // if m is a symmetric matrix\n        if (max(abs(m-trans(m))) < 1e-5)\n        {\n            dlog << LTRACE << \"m is symmetric\";\n            // there aren't any imaginary eigenvalues \n            DLIB_TEST(max(abs(test.get_imag_eigenvalues())) < eps); \n            DLIB_TEST(diagm(diag(D)) == D);\n\n            // only check the determinant against the eigenvalues for small matrices\n            // because for huge ones the determinant might be so big it overflows a floating point number.\n            if (m.nr() < 50) \n            {\n                const type mdet = det(m);\n                DLIB_TEST_MSG(std::abs(prod(test.get_real_eigenvalues()) - mdet) < std::abs(mdet)*sqrt(std::numeric_limits<type>::epsilon()),\n                              std::abs(prod(test.get_real_eigenvalues()) - mdet) <<\"    eps: \" << std::abs(mdet)*sqrt(std::numeric_limits<type>::epsilon())\n                              << \"  mdet: \"<< mdet << \"   prod(eig): \" << prod(test.get_real_eigenvalues())\n                );\n            }\n\n            // V is orthogonal\n            DLIB_TEST(equal(V*trans(V), identity_matrix<type>(test.dim()), eps));\n            DLIB_TEST(equal(m , V*D*trans(V), eps));\n        }\n        else\n        {\n            dlog << LTRACE << \"m is NOT symmetric\";\n            DLIB_TEST_MSG(equal(m , V*D*inv(V), eps), max(abs(m - V*D*inv(V))));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_type>\n    void test_eigenvalue ( const matrix_type& m )\n    {\n        typedef typename matrix_type::type type;\n        typedef typename matrix_type::mem_manager_type MM;\n        matrix<type,matrix_type::NR, matrix_type::NC, MM, row_major_layout> mr(m); \n        matrix<type,matrix_type::NR, matrix_type::NC, MM, column_major_layout> mc(m); \n\n        {\n        eigenvalue_decomposition<matrix_type> test(mr);\n        test_eigenvalue_impl(mr, test);\n\n        eigenvalue_decomposition<matrix_type> test_symm(make_symmetric(mr));\n        test_eigenvalue_impl(make_symmetric(mr), test_symm);\n        }\n\n        {\n        eigenvalue_decomposition<matrix_type> test(mc);\n        test_eigenvalue_impl(mc, test);\n\n        eigenvalue_decomposition<matrix_type> test_symm(make_symmetric(mc));\n        test_eigenvalue_impl(make_symmetric(mc), test_symm);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void matrix_test_double()\n    {\n\n        test_eigenvalue(10*randm<double>(1,1));\n        test_eigenvalue(10*randm<double>(2,2));\n        test_eigenvalue(10*randm<double>(3,3));\n        test_eigenvalue(10*randm<double>(4,4));\n        test_eigenvalue(10*randm<double>(15,15));\n        test_eigenvalue(10*randm<double>(150,150));\n\n        test_eigenvalue(10*randm<double,1,1>());\n        test_eigenvalue(10*randm<double,2,2>());\n        test_eigenvalue(10*randm<double,3,3>());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void matrix_test_float()\n    {\n\n        test_eigenvalue(10*randm<float>(1,1));\n        test_eigenvalue(10*randm<float>(2,2));\n        test_eigenvalue(10*randm<float>(3,3));\n        test_eigenvalue(10*randm<float>(4,4));\n        test_eigenvalue(10*randm<float>(15,15));\n        test_eigenvalue(10*randm<float>(50,50));\n\n        test_eigenvalue(10*randm<float,1,1>());\n        test_eigenvalue(10*randm<float,2,2>());\n        test_eigenvalue(10*randm<float,3,3>());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class matrix_tester : public tester\n    {\n    public:\n        matrix_tester (\n        ) :\n            tester (\"test_matrix_eig\",\n                    \"Runs tests on the matrix eigen decomp component.\")\n        {\n            //rnd.set_seed(cast_to_string(time(0)));\n        }\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"seed string: \" << rnd.get_seed();\n\n            dlog << LINFO << \"begin testing with double\";\n            matrix_test_double();\n            dlog << LINFO << \"begin testing with float\";\n            matrix_test_float();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/matrix_lu.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n#include <dlib/string.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.matrix_lu\");\n\n    dlib::rand rnd;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename mat_type>\n    const matrix<typename mat_type::type> symm(const mat_type& m) { return m*trans(m); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename type>\n    const matrix<type> randmat(long r, long c)\n    {\n        matrix<type> m(r,c);\n        for (long row = 0; row < m.nr(); ++row)\n        {\n            for (long col = 0; col < m.nc(); ++col)\n            {\n                m(row,col) = static_cast<type>(rnd.get_random_double()); \n            }\n        }\n\n        return m;\n    }\n\n    template <typename type, long NR, long NC>\n    const matrix<type,NR,NC> randmat()\n    {\n        matrix<type,NR,NC> m;\n        for (long row = 0; row < m.nr(); ++row)\n        {\n            for (long col = 0; col < m.nc(); ++col)\n            {\n                m(row,col) = static_cast<type>(rnd.get_random_double()); \n            }\n        }\n\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_type>\n    void test_lu ( const matrix_type& m)\n    {\n        typedef typename matrix_type::type type;\n        const type eps = 10*max(abs(m))*sqrt(std::numeric_limits<type>::epsilon());\n        dlog << LDEBUG << \"test_lu():  \" << m.nr() << \" x \" << m.nc() << \"  eps: \" << eps;\n        print_spinner();\n\n\n        lu_decomposition<matrix_type> test(m);\n\n        DLIB_TEST(test.is_square() == (m.nr() == m.nc()));\n\n        DLIB_TEST(test.nr() == m.nr());\n        DLIB_TEST(test.nc() == m.nc());\n\n        dlog << LDEBUG << \"m.nr(): \" << m.nr() << \"  m.nc(): \" << m.nc();\n\n        type temp;\n        DLIB_TEST_MSG( (temp= max(abs(test.get_l()*test.get_u() - rowm(m,test.get_pivot())))) < eps,temp);\n\n        if (test.is_square())\n        {\n            // none of the matrices we should be passing in to test_lu() should be singular.  \n            DLIB_TEST_MSG (abs(test.det()) > eps/100, \"det: \" << test.det() );\n            dlog << LDEBUG << \"big det: \" << test.det();\n\n            DLIB_TEST(test.is_singular() == false);\n\n            matrix<type> m2;\n            matrix<type,0,1> col;\n\n            m2 = identity_matrix<type>(m.nr());\n            DLIB_TEST_MSG(equal(m*test.solve(m2), m2,eps),max(abs(m*test.solve(m2)- m2)));\n            m2 = randmat<type>(m.nr(),5);\n            DLIB_TEST_MSG(equal(m*test.solve(m2), m2,eps),max(abs(m*test.solve(m2)- m2)));\n            m2 = randmat<type>(m.nr(),1);\n            DLIB_TEST_MSG(equal(m*test.solve(m2), m2,eps),max(abs(m*test.solve(m2)- m2)));\n            col = randmat<type>(m.nr(),1);\n            DLIB_TEST_MSG(equal(m*test.solve(col), col,eps),max(abs(m*test.solve(m2)- m2)));\n\n            // now make us a singular matrix\n            if (m.nr() > 1)\n            {\n                matrix<type> sm(m);\n                set_colm(sm,0) = colm(sm,1);\n\n                lu_decomposition<matrix_type> test2(sm);\n                DLIB_TEST_MSG( (temp= max(abs(test2.get_l()*test2.get_u() - rowm(sm,test2.get_pivot())))) < eps,temp);\n\n                // these checks are only accurate for small matrices\n                if (test2.nr() < 100)\n                {\n                    DLIB_TEST_MSG(test2.is_singular() == true,\"det: \" << test2.det());\n                    DLIB_TEST_MSG(abs(test2.det()) < eps,\"det: \" << test2.det());\n                }\n\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void matrix_test_double()\n    {\n\n\n        test_lu(10*randmat<double>(2,2));\n        test_lu(10*randmat<double>(1,1));\n        test_lu(10*symm(randmat<double>(2,2)));\n        test_lu(10*randmat<double>(4,4));\n        test_lu(10*randmat<double>(9,4));\n        test_lu(10*randmat<double>(3,8));\n        test_lu(10*randmat<double>(15,15));\n        test_lu(2*symm(randmat<double>(15,15)));\n        test_lu(10*randmat<double>(100,100));\n        test_lu(10*randmat<double>(137,200));\n        test_lu(10*randmat<double>(200,101));\n\n        test_lu(10*randmat<double,2,2>());\n        test_lu(10*randmat<double,1,1>());\n        test_lu(10*randmat<double,4,3>());\n        test_lu(10*randmat<double,4,4>());\n        test_lu(10*randmat<double,9,4>());\n        test_lu(10*randmat<double,3,8>());\n        test_lu(10*randmat<double,15,15>());\n        test_lu(10*randmat<double,100,100>());\n        test_lu(10*randmat<double,137,200>());\n        test_lu(10*randmat<double,200,101>());\n\n        typedef matrix<double,0,0,default_memory_manager, column_major_layout> mat;\n        test_lu(mat(3*randmat<double>(4,4)));\n        test_lu(mat(3*randmat<double>(9,4)));\n        test_lu(mat(3*randmat<double>(3,8)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void matrix_test_float()\n    {\n\n    // -------------------------------\n\n        test_lu(3*randmat<float>(1,1));\n        test_lu(3*randmat<float>(2,2));\n        test_lu(3*randmat<float>(4,4));\n        test_lu(3*randmat<float>(9,4));\n        test_lu(3*randmat<float>(3,8));\n        test_lu(3*randmat<float>(137,200));\n        test_lu(3*randmat<float>(200,101));\n\n        test_lu(3*randmat<float,1,1>());\n        test_lu(3*randmat<float,2,2>());\n        test_lu(3*randmat<float,4,3>());\n        test_lu(3*randmat<float,4,4>());\n        test_lu(3*randmat<float,9,4>());\n        test_lu(3*randmat<float,3,8>());\n        test_lu(3*randmat<float,137,200>());\n        test_lu(3*randmat<float,200,101>());\n\n        typedef matrix<float,0,0,default_memory_manager, column_major_layout> mat;\n        test_lu(mat(3*randmat<float>(4,4)));\n        test_lu(mat(3*randmat<float>(9,4)));\n        test_lu(mat(3*randmat<float>(3,8)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class matrix_tester : public tester\n    {\n    public:\n        matrix_tester (\n        ) :\n            tester (\"test_matrix_lu\",\n                    \"Runs tests on the matrix LU component.\")\n        {\n            rnd.set_seed(cast_to_string(time(0)));\n        }\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"seed string: \" << rnd.get_seed();\n\n            dlog << LINFO << \"begin testing with double\";\n            matrix_test_double();\n            dlog << LINFO << \"begin testing with float\";\n            matrix_test_float();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/matrix_qr.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n#include <dlib/string.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.matrix_qr\");\n\n    dlib::rand rnd;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename mat_type>\n    const matrix<typename mat_type::type> symm(const mat_type& m) { return m*trans(m); }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename type>\n    const matrix<type> randmat(long r, long c)\n    {\n        matrix<type> m(r,c);\n        for (long row = 0; row < m.nr(); ++row)\n        {\n            for (long col = 0; col < m.nc(); ++col)\n            {\n                m(row,col) = static_cast<type>(rnd.get_random_double()); \n            }\n        }\n\n        return m;\n    }\n\n    template <typename type, long NR, long NC>\n    const matrix<type,NR,NC> randmat()\n    {\n        matrix<type,NR,NC> m;\n        for (long row = 0; row < m.nr(); ++row)\n        {\n            for (long col = 0; col < m.nc(); ++col)\n            {\n                m(row,col) = static_cast<type>(rnd.get_random_double()); \n            }\n        }\n\n        return m;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename matrix_type>\n    void test_qr ( const matrix_type& m)\n    {\n        typedef typename matrix_type::type type;\n        const type eps = 10*max(abs(m))*sqrt(std::numeric_limits<type>::epsilon());\n        dlog << LDEBUG << \"test_qr():  \" << m.nr() << \" x \" << m.nc() << \"  eps: \" << eps;\n        print_spinner();\n\n\n        qr_decomposition<matrix_type> test(m);\n\n\n        DLIB_TEST(test.nr() == m.nr());\n        DLIB_TEST(test.nc() == m.nc());\n\n\n        type temp;\n        DLIB_TEST_MSG( (temp= max(abs(test.get_q()*test.get_r() - m))) < eps,temp);\n\n        // none of the matrices we should be passing in to test_qr() should be non-full rank.  \n        DLIB_TEST(test.is_full_rank() == true);\n\n        if (m.nr() == m.nc())\n        {\n            matrix<type> m2;\n            matrix<type,0,1> col;\n\n            m2 = identity_matrix<type>(m.nr());\n            DLIB_TEST_MSG(equal(m*test.solve(m2), m2,eps),max(abs(m*test.solve(m2)- m2)));\n            m2 = randmat<type>(m.nr(),5);\n            DLIB_TEST_MSG(equal(m*test.solve(m2), m2,eps),max(abs(m*test.solve(m2)- m2)));\n            m2 = randmat<type>(m.nr(),1);\n            DLIB_TEST_MSG(equal(m*test.solve(m2), m2,eps),max(abs(m*test.solve(m2)- m2)));\n            col = randmat<type>(m.nr(),1);\n            DLIB_TEST_MSG(equal(m*test.solve(col), col,eps),max(abs(m*test.solve(m2)- m2)));\n        }\n        else\n        {\n            DLIB_TEST_MSG(dlib::equal(pinv(m), test.solve(identity_matrix<type>(m.nr())), eps), \n                        max(abs(pinv(m) - test.solve(identity_matrix<type>(m.nr())))) );\n        }\n\n        // now make us a non-full rank matrix\n        if (m.nc() > 1)\n        {\n            matrix<type> sm(m);\n            set_colm(sm,0) = colm(sm,1);\n\n            qr_decomposition<matrix_type> test2(sm);\n            DLIB_TEST_MSG( (temp= max(abs(test.get_q()*test.get_r() - m))) < eps,temp);\n\n            if (test2.nc() < 100)\n            {\n                DLIB_TEST_MSG(test2.is_full_rank() == false,\"eps: \" << eps);\n            }\n\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void matrix_test_double()\n    {\n\n        test_qr(10*randmat<double>(1,1));\n        test_qr(10*randmat<double>(2,2));\n        test_qr(10*symm(randmat<double>(2,2)));\n        test_qr(10*randmat<double>(4,4));\n        test_qr(10*randmat<double>(9,4));\n        test_qr(10*randmat<double>(15,15));\n        test_qr(2*symm(randmat<double>(15,15)));\n        test_qr(10*randmat<double>(100,100));\n        test_qr(10*randmat<double>(237,200));\n        test_qr(10*randmat<double>(200,101));\n\n        test_qr(10*randmat<double,1,1>());\n        test_qr(10*randmat<double,2,2>());\n        test_qr(10*randmat<double,4,3>());\n        test_qr(10*randmat<double,4,4>());\n        test_qr(10*randmat<double,9,4>());\n        test_qr(10*randmat<double,15,15>());\n        test_qr(10*randmat<double,100,100>());\n\n        typedef matrix<double,0,0,default_memory_manager, column_major_layout> mat;\n        test_qr(mat(3*randmat<double>(9,4)));\n        test_qr(mat(3*randmat<double>(9,9)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void matrix_test_float()\n    {\n\n\n        test_qr(3*randmat<float>(1,1));\n        test_qr(3*randmat<float>(2,2));\n        test_qr(3*randmat<float>(4,4));\n        test_qr(3*randmat<float>(9,4));\n        test_qr(3*randmat<float>(237,200));\n\n        test_qr(3*randmat<float,1,1>());\n        test_qr(3*randmat<float,2,2>());\n        test_qr(3*randmat<float,4,3>());\n        test_qr(3*randmat<float,4,4>());\n        test_qr(3*randmat<float,9,4>());\n\n        typedef matrix<float,0,0,default_memory_manager, column_major_layout> mat;\n        test_qr(mat(3*randmat<float>(9,4)));\n        test_qr(mat(3*randmat<float>(9,9)));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class matrix_tester : public tester\n    {\n    public:\n        matrix_tester (\n        ) :\n            tester (\"test_matrix_qr\",\n                    \"Runs tests on the matrix QR component.\")\n        {\n            //rnd.set_seed(cast_to_string(time(0)));\n        }\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"seed string: \" << rnd.get_seed();\n\n            dlog << LINFO << \"begin testing with double\";\n            matrix_test_double();\n            dlog << LINFO << \"begin testing with float\";\n            matrix_test_float();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/max_cost_assignment.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/optimization.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../rand.h\"\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.max_cost_assignment\");\n\n// ----------------------------------------------------------------------------------------\n\n    std::vector<std::vector<long> > permutations (\n        matrix<long,1,0> vals\n    )\n    {\n        if (vals.size() == 0)\n        {\n            return std::vector<std::vector<long> >();\n        }\n        else if (vals.size() == 1)\n        {\n            return std::vector<std::vector<long> >(1,std::vector<long>(1,vals(0)));\n        }\n\n\n        std::vector<std::vector<long> > temp;\n\n\n        for (long i = 0; i < vals.size(); ++i)\n        {\n            const std::vector<std::vector<long> >& res = permutations(remove_col(vals,i));       \n\n            for (unsigned long j = 0; j < res.size(); ++j)\n            {\n                temp.resize(temp.size()+1);\n                std::vector<long>& part = temp.back();\n                part.push_back(vals(i));\n                part.insert(part.end(), res[j].begin(), res[j].end());\n            }\n        }\n\n\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    std::vector<long> brute_force_max_cost_assignment (\n        matrix<T> cost\n    )\n    {\n        if (cost.size() == 0)\n            return std::vector<long>();\n\n        const std::vector<std::vector<long> >& perms = permutations(range(0,cost.nc()-1));\n\n        T best_cost = std::numeric_limits<T>::min();\n        unsigned long best_idx = 0;\n        for (unsigned long i = 0; i < perms.size(); ++i)\n        {\n            const T temp = assignment_cost(cost, perms[i]);\n            if (temp > best_cost)\n            {\n                best_idx = i;\n                best_cost = temp;\n            }\n        }\n\n        return perms[best_idx];\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class test_max_cost_assignment : public tester\n    {\n    public:\n        test_max_cost_assignment (\n        ) :\n            tester (\"test_max_cost_assignment\",\n                    \"Runs tests on the max_cost_assignment function.\")\n        {}\n\n        dlib::rand rnd;\n\n        template <typename T>\n        void test_hungarian()\n        {\n            long size = rnd.get_random_32bit_number()%7;\n            long range = rnd.get_random_32bit_number()%100;\n            matrix<T> cost = matrix_cast<T>(randm(size,size,rnd)*range) - range/2;\n\n            // use a uniform cost matrix sometimes\n            if ((rnd.get_random_32bit_number()%100) == 0)\n                cost = rnd.get_random_32bit_number()%100;\n\n            // negate the cost matrix every now and then\n            if ((rnd.get_random_32bit_number()%100) == 0)\n                cost = -cost;\n\n\n            std::vector<long> assign = brute_force_max_cost_assignment(cost);\n            T true_eval = assignment_cost(cost, assign);\n            assign = max_cost_assignment(cost);\n            DLIB_TEST(assignment_cost(cost,assign) == true_eval);\n            assign = max_cost_assignment(matrix_cast<char>(cost));\n            DLIB_TEST(assignment_cost(cost,assign) == true_eval);\n\n\n            cost = matrix_cast<T>(randm(size,size,rnd)*range);\n            assign = brute_force_max_cost_assignment(cost);\n            true_eval = assignment_cost(cost, assign);\n            assign = max_cost_assignment(cost);\n            DLIB_TEST(assignment_cost(cost,assign) == true_eval);\n            assign = max_cost_assignment(matrix_cast<unsigned char>(cost));\n            DLIB_TEST(assignment_cost(cost,assign) == true_eval);\n            assign = max_cost_assignment(matrix_cast<typename unsigned_type<T>::type>(cost));\n            DLIB_TEST(assignment_cost(cost,assign) == true_eval);\n        }\n\n        void perform_test (\n        )\n        {\n            for (long i = 0; i < 1000; ++i)\n            {\n                if ((i%100) == 0)\n                    print_spinner();\n\n                test_hungarian<short>();\n                test_hungarian<int>();\n                test_hungarian<long>();\n                test_hungarian<int64>();\n            }\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/max_sum_submatrix.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/optimization.h>\n#include <dlib/rand.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.max_sum_submatrix\");\n\n// ----------------------------------------------------------------------------------------\n\n    bool order_rects (\n        const rectangle& a,\n        const rectangle& b\n    )\n    {\n        if (a.left() < b.left()) return true;\n        else if (a.left() > b.left()) return false;\n\n        if (a.right() < b.right()) return true;\n        else if (a.right() > b.right()) return false;\n\n        if (a.top() < b.top()) return true;\n        else if (a.top() > b.top()) return false;\n\n        if (a.bottom() < b.bottom()) return true;\n        else if (a.bottom() > b.bottom()) return false;\n\n        return false;\n    }\n\n    void run_test(\n        const int num\n    )\n    {\n        static dlib::rand rnd;\n\n        matrix<int> mat, mask;\n\n        mat.set_size(rnd.get_random_32bit_number()%1000 + 1,\n                     rnd.get_random_32bit_number()%1000 + 1);\n        mask.set_size(mat.nr(), mat.nc());\n        mask = 0;\n\n        mat = -10000;\n\n        std::vector<rectangle> true_rects;\n\n        for (int i = 0; i < num; ++i)\n        {\n            const int width = rnd.get_random_32bit_number()%100 + 1;\n            const int height = rnd.get_random_32bit_number()%100 + 1;\n\n            rectangle rect = centered_rect(rnd.get_random_16bit_number()%mat.nc(),\n                                           rnd.get_random_16bit_number()%mat.nr(),\n                                           width,height);\n            rect = get_rect(mat).intersect(rect);\n\n            // make sure this new rectangle doesn't overlap or abut any others\n            if (sum(subm(mask,grow_rect(rect,1).intersect(get_rect(mask)))) == 0)\n            {\n                set_subm(mat, rect) = rnd.get_random_8bit_number()%100 + 1;\n                set_subm(mask, rect) = 1;\n                true_rects.push_back(rect);\n            }\n        }\n\n\n        std::vector<rectangle> res;\n        res = max_sum_submatrix(mat, true_rects.size()+10, 0);\n\n        DLIB_TEST(res.size() == true_rects.size());\n\n        // make sure big rectangles come first\n        for (unsigned long i = 0; i+1 < res.size(); ++i)\n        {\n            DLIB_TEST(sum(subm(mat,res[i])) >= sum(subm(mat,res[i+1])));\n        }\n\n        // make sure rectangles match\n        sort(true_rects.begin(), true_rects.end(), order_rects);\n        sort(res.begin(), res.end(), order_rects);\n        for (unsigned long i = 0; i < res.size(); ++i)\n        {\n            DLIB_TEST_MSG(res[i] == true_rects[i],\n                          \"i: \" << i << \"  res[i]: \" << res[i] << \"  true_rects[i]: \" <<  true_rects[i]);\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void run_test2()\n    {\n        matrix<T> mat(100,100);\n        mat = 1;\n        std::vector<rectangle> res = max_sum_submatrix(mat, 0, 0);\n\n        DLIB_TEST(res.size() == 0);\n        res = max_sum_submatrix(mat, 1, 0);\n        DLIB_TEST(res.size() == 1);\n        DLIB_TEST(res[0] == get_rect(mat));\n        res = max_sum_submatrix(mat, 3, 0);\n        DLIB_TEST(res.size() == 1);\n        DLIB_TEST(res[0] == get_rect(mat));\n        res = max_sum_submatrix(mat, 3, 10);\n        DLIB_TEST(res.size() == 1);\n        DLIB_TEST(res[0] == get_rect(mat));\n\n        res = max_sum_submatrix(mat, 3, mat.size());\n        DLIB_TEST(res.size() == 0);\n\n        mat = -1;\n        res = max_sum_submatrix(mat, 1, 0);\n        DLIB_TEST(res.size() == 0);\n\n        const rectangle rect1 = rectangle(10,10,40,40);\n        const rectangle rect2 = rectangle(35,35,80,80);\n\n        set_subm(mat, rect1) = 2;\n        set_subm(mat, rect2) = 1;\n        res = max_sum_submatrix(mat, 3, 0);\n        DLIB_TEST(res.size() == 2);\n        DLIB_TEST(res[0] == rect2);\n        DLIB_TEST(res[1] == rect1);\n\n        res = max_sum_submatrix(mat, 3, 2*rect1.area() - 2*(rect1.intersect(rect2)).area());\n        DLIB_TEST(res.size() == 1);\n        DLIB_TEST(res[0] == rect2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    class test_max_sum_submatrix : public tester\n    {\n    public:\n        test_max_sum_submatrix (\n        ) :\n            tester (\"test_max_sum_submatrix\",\n                    \"Runs tests on the max_sum_submatrix() function.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            for (int j = 0; j < 5; ++j)\n            {\n                print_spinner();\n                for (int i = 0; i < 40; ++i)\n                    run_test(i);\n            }\n\n            run_test2<int>();\n            run_test2<short>();\n            run_test2<signed char>();\n            run_test2<float>();\n            run_test2<double>();\n        }\n    } a;\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/md5.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/md5.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.md5\");\n\n    void md5_test (\n    )\n    /*!\n        ensures\n            - runs tests on the md5 stuff compliance with the specs\n    !*/\n    {        \n\n        DLIB_TEST(md5 (\"\") == \"d41d8cd98f00b204e9800998ecf8427e\");\n        DLIB_TEST(md5 (\"a\") == \"0cc175b9c0f1b6a831c399e269772661\");\n        DLIB_TEST(md5 (\"abc\") == \"900150983cd24fb0d6963f7d28e17f72\");\n        DLIB_TEST(md5 (\"message digest\") == \"f96b697d7cb7938d525a2f31aaf161d0\");\n        DLIB_TEST(md5 (\"abcdefghijklmnopqrstuvwxyz\") == \"c3fcd3d76192e4007dfb496cca67e13b\");\n        DLIB_TEST(md5 (\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\") == \"d174ab98d277d9f5a5611c2c9f419d9f\");\n        DLIB_TEST(md5 (\"12345678901234567890123456789012345678901234567890123456789012345678901234567890\") == \"57edf4a22be3c955ac49da2e2107b67a\");\n\n        // make sure the two versions of md5() always agree\n        for (int num = 0; num < 2000; ++num)\n        {\n            std::string temp;\n            for (int i = 0; i < num; ++i)\n                temp += 'a';\n\n            istringstream str(temp);\n            DLIB_TEST(md5(temp) == md5(str));\n        }\n\n    }\n\n\n    class md5_tester : public tester\n    {\n    public:\n        md5_tester (\n        ) :\n            tester (\"test_md5\",\n                    \"Runs tests on the md5 component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            md5_test();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/member_function_pointer.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/member_function_pointer.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.member_function_pointer\");\n\n    class mfp_test_helper_other\n    {\n    public:\n        mfp_test_helper_other (\n        ): i(-1) {}\n\n\n        mutable int i;\n\n\n        void go0 (\n        ) { i = 0; }\n        void go1 (\n            int v1\n        ) { i = 1*v1; }\n        void go2 (\n            int v1,int v2\n        ) { i = 2*v1*v2; }\n        void go3 (\n            int v1,int v2,int v3\n        ) { i = 3*v1*v2*v3; }\n        void go4 (\n            int v1,int v2,int v3,int v4\n        ) { i = 4*v1*v2*v3*v4; }\n\n    };\n\n\n    class mfp_test_helper\n    {\n    public:\n        mfp_test_helper (\n        ): i(-1) {}\n\n\n        mutable int i;\n\n\n        void go0 (\n        ) { i = 0; }\n        void go1 (\n            int v1\n        ) { i = 1*v1; }\n        void go2 (\n            int v1,int v2\n        ) { i = 2*v1*v2; }\n        void go3 (\n            int v1,int v2,int v3\n        ) { i = 3*v1*v2*v3; }\n        void go4 (\n            int v1,int v2,int v3,int v4\n        ) { i = 4*v1*v2*v3*v4; }\n\n    };\n\n    class mfp_test_helper_const\n    {\n    public:\n        mfp_test_helper_const (\n        ): i(-1) {}\n\n\n        mutable int i;\n\n        void go0 (\n        ) const { i = 0; }\n        void go1 (\n            int v1\n        ) const { i = 1*v1; }\n        void go2 (\n            int v1,int v2\n        ) const { i = 2*v1*v2; }\n        void go3 (\n            int v1,int v2,int v3\n        ) const { i = 3*v1*v2*v3; }\n        void go4 (\n            int v1,int v2,int v3,int v4\n        ) const { i = 4*v1*v2*v3*v4; }\n    };\n\n    template <\n        template  <typename P1 = void, typename P2 = void, typename P3 = void, typename P4 = void> class mfp,\n        typename test_helper\n        >\n    void member_function_pointer_kernel_test (\n    )\n    /*!\n        requires\n            - mfp is an implementation of member_function_pointer/member_function_pointer_kernel_abstract.h \n        ensures\n            - runs tests on mfp for compliance with the specs\n    !*/\n    {        \n\n\n        test_helper helper;\n\n        mfp<> a0, b0;\n        mfp<int> a1, b1;\n        mfp<int,int> a2, b2;\n        mfp<int,int,int> a3, b3;\n        mfp<int,int,int,int> a4, b4;\n\n        mfp<> a0c, b0c;\n        mfp<int> a1c, b1c;\n        mfp<int,int> a2c, b2c;\n        mfp<int,int,int> a3c, b3c;\n        mfp<int,int,int,int> a4c, b4c;\n\n        DLIB_TEST(a0c == b0c);\n        DLIB_TEST(a1c == b1c);\n        DLIB_TEST(a2c == b2c);\n        DLIB_TEST(a3c == b3c);\n        DLIB_TEST(a4c == b4c);\n        DLIB_TEST((a0c != b0c) == false);\n        DLIB_TEST((a1c != b1c) == false);\n        DLIB_TEST((a2c != b2c) == false);\n        DLIB_TEST((a3c != b3c) == false);\n        DLIB_TEST((a4c != b4c) == false);\n\n        DLIB_TEST(a0.is_set() == false);\n        DLIB_TEST(b0.is_set() == false);\n        DLIB_TEST(a0c.is_set() == false);\n        DLIB_TEST(b0c.is_set() == false);\n\n        DLIB_TEST(!a0 );\n        DLIB_TEST(!b0 );\n        DLIB_TEST(!a0c);\n        DLIB_TEST(!b0c);\n\n        DLIB_TEST(a1.is_set() == false);\n        DLIB_TEST(b1.is_set() == false);\n        DLIB_TEST(a1c.is_set() == false);\n        DLIB_TEST(b1c.is_set() == false);\n\n        DLIB_TEST(!a1 );\n        DLIB_TEST(!b1 );\n        DLIB_TEST(!a1c);\n        DLIB_TEST(!b1c);\n\n\n        DLIB_TEST(a2.is_set() == false);\n        DLIB_TEST(b2.is_set() == false);\n        DLIB_TEST(a2c.is_set() == false);\n        DLIB_TEST(b2c.is_set() == false);\n\n        DLIB_TEST(!a2);\n        DLIB_TEST(!b2);\n        DLIB_TEST(!a2c);\n        DLIB_TEST(!b2c);\n\n        DLIB_TEST(a3.is_set() == false);\n        DLIB_TEST(b3.is_set() == false);\n        DLIB_TEST(a3c.is_set() == false);\n        DLIB_TEST(b3c.is_set() == false);\n\n        DLIB_TEST(!a3);\n        DLIB_TEST(!b3);\n        DLIB_TEST(!a3c);\n        DLIB_TEST(!b3c);\n\n        DLIB_TEST(a4.is_set() == false);\n        DLIB_TEST(b4.is_set() == false);\n        DLIB_TEST(a4c.is_set() == false);\n        DLIB_TEST(b4c.is_set() == false);\n\n        DLIB_TEST(!a4);\n        DLIB_TEST(!b4);\n        DLIB_TEST(!a4c);\n        DLIB_TEST(!b4c);\n\n        a0.set(helper,&test_helper::go0);\n        a0c.set(helper,&test_helper::go0);\n        DLIB_TEST(a0.is_set() == true);\n        DLIB_TEST(a0c.is_set() == true);\n        DLIB_TEST(b0.is_set() == false);\n        DLIB_TEST(b0c.is_set() == false);\n\n        DLIB_TEST(a0);\n        DLIB_TEST(a0c);\n        DLIB_TEST(!b0);\n        DLIB_TEST(!b0c);\n\n        a0 = a0;\n        DLIB_TEST(a0 == a0);\n        DLIB_TEST(!(a0 != a0));\n        DLIB_TEST(a0.is_set() == true);\n        DLIB_TEST(a0c.is_set() == true);\n        DLIB_TEST(b0.is_set() == false);\n        DLIB_TEST(b0c.is_set() == false);\n\n        DLIB_TEST(a0);\n        DLIB_TEST(a0c);\n        DLIB_TEST(!b0);\n        DLIB_TEST(!b0c);\n\n        swap(a0,b0);\n        swap(a0c,b0c);\n        DLIB_TEST(a0.is_set() == false);\n        DLIB_TEST(a0c.is_set() == false);\n        DLIB_TEST(b0.is_set() == true);\n        DLIB_TEST(b0c.is_set() == true);\n\n        DLIB_TEST(!a0);\n        DLIB_TEST(!a0c);\n        DLIB_TEST(b0);\n        DLIB_TEST(b0c);\n\n        a0 = b0;\n        DLIB_TEST(a0 == a0);\n        DLIB_TEST(a0 == b0);\n        DLIB_TEST(!(a0 != b0));\n        DLIB_TEST(a0.is_set() == true);\n        DLIB_TEST(a0c.is_set() == false);\n        DLIB_TEST(b0.is_set() == true);\n        DLIB_TEST(b0c.is_set() == true);\n\n        DLIB_TEST(a0 );\n        DLIB_TEST(!a0c);\n        DLIB_TEST(b0);\n        DLIB_TEST(b0c);\n\n\n        a0.clear();\n        a0c.clear();\n        b0.clear();\n        b0c.clear();\n        DLIB_TEST(a0.is_set() == false);\n        DLIB_TEST(a0c.is_set() == false);\n        DLIB_TEST(b0.is_set() == false);\n        DLIB_TEST(b0c.is_set() == false);\n\n\n        a1.set(helper,&test_helper::go1);\n        a1c.set(helper,&test_helper::go1);\n        DLIB_TEST(a1.is_set() == true);\n        DLIB_TEST(a1c.is_set() == true);\n        DLIB_TEST(b1.is_set() == false);\n        DLIB_TEST(b1c.is_set() == false);\n        swap(a1,b1);\n        swap(a1c,b1c);\n        DLIB_TEST(a1.is_set() == false);\n        DLIB_TEST(a1c.is_set() == false);\n        DLIB_TEST(b1.is_set() == true);\n        DLIB_TEST(b1c.is_set() == true);\n\n        DLIB_TEST(!a1);\n        DLIB_TEST(!a1c);\n        DLIB_TEST(b1);\n        DLIB_TEST(b1c);\n\n\n        a1 = b1;\n        DLIB_TEST(a1 == a1);\n        DLIB_TEST(a1 == b1);\n        DLIB_TEST(!(a1 != b1));\n        DLIB_TEST(a1.is_set() == true);\n        DLIB_TEST(a1c.is_set() == false);\n        DLIB_TEST(b1.is_set() == true);\n        DLIB_TEST(b1c.is_set() == true);\n\n\n        a1.clear();\n        a1c.clear();\n        b1.clear();\n        b1c.clear();\n        DLIB_TEST(a1.is_set() == false);\n        DLIB_TEST(a1c.is_set() == false);\n        DLIB_TEST(b1.is_set() == false);\n        DLIB_TEST(b1c.is_set() == false);\n\n\n        a2.set(helper,&test_helper::go2);\n        a2c.set(helper,&test_helper::go2);\n        DLIB_TEST(a2.is_set() == true);\n        DLIB_TEST(a2c.is_set() == true);\n        DLIB_TEST(b2.is_set() == false);\n        DLIB_TEST(b2c.is_set() == false);\n        swap(a2,b2);\n        swap(a2c,b2c);\n        DLIB_TEST(a2.is_set() == false);\n        DLIB_TEST(a2c.is_set() == false);\n        DLIB_TEST(b2.is_set() == true);\n        DLIB_TEST(b2c.is_set() == true);\n\n        DLIB_TEST(!a2);\n        DLIB_TEST(!a2c);\n        DLIB_TEST(b2);\n        DLIB_TEST(b2c);\n        if (b2)\n        {\n        }\n        else\n        {\n            DLIB_TEST(false);\n        }\n\n        if (a2c)\n        {\n            DLIB_TEST(false);\n        }\n        else\n        {\n            DLIB_TEST(true);\n        }\n\n        a2 = b2;\n        DLIB_TEST(a2 == a2);\n        DLIB_TEST(a2 == b2);\n        DLIB_TEST(!(a2 != b2));\n        DLIB_TEST(a2.is_set() == true);\n        DLIB_TEST(a2c.is_set() == false);\n        DLIB_TEST(b2.is_set() == true);\n        DLIB_TEST(b2c.is_set() == true);\n\n        a2.clear();\n        a2c.clear();\n        b2.clear();\n        b2c.clear();\n        DLIB_TEST(a2.is_set() == false);\n        DLIB_TEST(a2c.is_set() == false);\n        DLIB_TEST(b2.is_set() == false);\n        DLIB_TEST(b2c.is_set() == false);\n\n\n        a3.set(helper,&test_helper::go3);\n        a3c.set(helper,&test_helper::go3);\n        DLIB_TEST(a3.is_set() == true);\n        DLIB_TEST(a3c.is_set() == true);\n        DLIB_TEST(b3.is_set() == false);\n        DLIB_TEST(b3c.is_set() == false);\n        swap(a3,b3);\n        swap(a3c,b3c);\n        DLIB_TEST(a3.is_set() == false);\n        DLIB_TEST(a3c.is_set() == false);\n        DLIB_TEST(b3.is_set() == true);\n        DLIB_TEST(b3c.is_set() == true);\n\n        a3 = b3;\n        DLIB_TEST(a3 == a3);\n        DLIB_TEST(a3 == b3);\n        DLIB_TEST(!(a3 != b3));\n        DLIB_TEST(a3.is_set() == true);\n        DLIB_TEST(a3c.is_set() == false);\n        DLIB_TEST(b3.is_set() == true);\n        DLIB_TEST(b3c.is_set() == true);\n\n\n        a3.clear();\n        a3c.clear();\n        b3.clear();\n        b3c.clear();\n        DLIB_TEST(a3.is_set() == false);\n        DLIB_TEST(a3c.is_set() == false);\n        DLIB_TEST(b3.is_set() == false);\n        DLIB_TEST(b3c.is_set() == false);\n\n\n        a4.set(helper,&test_helper::go4);\n        a4c.set(helper,&test_helper::go4);\n        DLIB_TEST(a4.is_set() == true);\n        DLIB_TEST(a4c.is_set() == true);\n        DLIB_TEST(b4.is_set() == false);\n        DLIB_TEST(b4c.is_set() == false);\n        swap(a4,b4);\n        swap(a4c,b4c);\n        DLIB_TEST(a4.is_set() == false);\n        DLIB_TEST(a4c.is_set() == false);\n        DLIB_TEST(b4.is_set() == true);\n        DLIB_TEST(b4c.is_set() == true);\n\n        a4 = b4;\n        a4 = b4;\n        a4 = b4;\n        a4 = b4;\n        DLIB_TEST(a4 == a4);\n        DLIB_TEST(a4 == b4);\n        DLIB_TEST(!(a4 != b4));\n        DLIB_TEST(a4.is_set() == true);\n        DLIB_TEST(a4c.is_set() == false);\n        DLIB_TEST(b4.is_set() == true);\n        DLIB_TEST(b4c.is_set() == true);\n\n\n        a4.clear();\n        a4c.clear();\n        b4.clear();\n        b4c.clear();\n        DLIB_TEST(a4.is_set() == false);\n        DLIB_TEST(a4c.is_set() == false);\n        DLIB_TEST(b4.is_set() == false);\n        DLIB_TEST(b4c.is_set() == false);\n\n\n        a0.set(helper,&test_helper::go0);\n        a0c.set(helper,&test_helper::go0);\n        b0 = a0; \n        b0c = a0c;\n        helper.i = -1; \n        a0();\n        DLIB_TEST(helper.i == 0);\n        helper.i = -1; \n        b0();\n        DLIB_TEST(helper.i == 0);\n        helper.i = -1; \n        a0c();\n        DLIB_TEST(helper.i == 0);\n        helper.i = -1; \n        b0c();\n        DLIB_TEST(helper.i == 0);\n\n\n        a1.set(helper,&test_helper::go1);\n        a1c.set(helper,&test_helper::go1);\n        b1 = a1;\n        b1c = a1c;\n        helper.i = -1; \n        a1(1);\n        DLIB_TEST(helper.i == 1);\n        helper.i = -1; \n        b1(10);\n        DLIB_TEST(helper.i == 1*10);\n        helper.i = -1; \n        a1c(20);\n        DLIB_TEST(helper.i == 1*20);\n        helper.i = -1; \n        b1c(30);\n        DLIB_TEST(helper.i == 1*30);\n\n\n        a2.set(helper,&test_helper::go2);\n        a2c.set(helper,&test_helper::go2);\n        b2 = a2;\n        b2c = a2c;\n        helper.i = -1; \n        a2(1,2);\n        DLIB_TEST(helper.i == 2*1*2);\n        helper.i = -1; \n        b2(3,4);\n        DLIB_TEST(helper.i == 2*3*4);\n        helper.i = -1; \n        a2c(5,6);\n        DLIB_TEST(helper.i == 2*5*6);\n        helper.i = -1; \n        b2c(7,8);\n        DLIB_TEST(helper.i == 2*7*8);\n\n\n        a3.set(helper,&test_helper::go3);\n        a3c.set(helper,&test_helper::go3);\n        b3 = a3;\n        b3c = a3c;\n        helper.i = -1; \n        a3(1,2,3);\n        DLIB_TEST(helper.i == 3*1*2*3);\n        helper.i = -1; \n        b3(4,5,6);\n        DLIB_TEST(helper.i == 3*4*5*6);\n        helper.i = -1; \n        a3c(7,8,9);\n        DLIB_TEST(helper.i == 3*7*8*9);\n        helper.i = -1; \n        b3c(1,2,3);\n        DLIB_TEST(helper.i == 3*1*2*3);\n\n\n        a4.set(helper,&test_helper::go4);\n        a4c.set(helper,&test_helper::go4);\n        DLIB_TEST(a4 == a4c);\n        b4 = a4;\n        b4c = a4c;\n        helper.i = -1; \n        a4(1,2,3,4);\n        DLIB_TEST(helper.i == 4*1*2*3*4);\n        helper.i = -1; \n        b4(5,6,7,8);\n        DLIB_TEST(helper.i == 4*5*6*7*8);\n        helper.i = -1; \n        a4c(9,1,2,3);\n        DLIB_TEST(helper.i == 4*9*1*2*3);\n        helper.i = -1; \n        b4c(4,5,6,7);\n        DLIB_TEST(helper.i == 4*4*5*6*7);\n\n        DLIB_TEST(a4 == b4);\n        DLIB_TEST(a4);\n        DLIB_TEST(a4 == b4);\n        a4.clear();\n        DLIB_TEST(a4 != b4);\n        DLIB_TEST(!a4);\n        DLIB_TEST(a4 == 0);\n        DLIB_TEST(a4 == a4);\n        a4 = a4;\n        DLIB_TEST(a4 != b4);\n        DLIB_TEST(!a4);\n        DLIB_TEST(a4 == a4);\n        mfp_test_helper_other other;\n        a4.set(other,&mfp_test_helper_other::go4);\n        DLIB_TEST(a4 != b4);\n        DLIB_TEST(a4);\n        DLIB_TEST(a4 == a4);\n        a4.set(helper,&test_helper::go4);\n        DLIB_TEST(a4 == b4);\n        DLIB_TEST(a4);\n        DLIB_TEST(a4 == a4);\n\n\n\n    }\n\n\n\n    class member_function_pointer_tester : public tester\n    {\n    public:\n        member_function_pointer_tester (\n        ) :\n            tester (\"test_member_function_pointer\",\n                    \"Runs tests on the member_function_pointer component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            member_function_pointer_kernel_test<member_function_pointer,mfp_test_helper>();\n            member_function_pointer_kernel_test<member_function_pointer,mfp_test_helper_const>();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/metaprogramming.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/algs.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.metaprogramming\");\n\n\n    void metaprogramming_test (\n    )\n    /*!\n        ensures\n            - runs tests on template metaprogramming objects and functions for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n\n        DLIB_TEST(is_signed_type<signed char>::value == true);\n        DLIB_TEST(is_signed_type<signed short>::value == true);\n        DLIB_TEST(is_signed_type<signed int>::value == true);\n        DLIB_TEST(is_signed_type<signed long>::value == true);\n        DLIB_TEST(is_unsigned_type<signed char>::value == false);\n        DLIB_TEST(is_unsigned_type<signed short>::value == false);\n        DLIB_TEST(is_unsigned_type<signed int>::value == false);\n        DLIB_TEST(is_unsigned_type<signed long>::value == false);\n\n        DLIB_TEST(is_unsigned_type<unsigned char>::value == true);\n        DLIB_TEST(is_unsigned_type<unsigned short>::value == true);\n        DLIB_TEST(is_unsigned_type<unsigned int>::value == true);\n        DLIB_TEST(is_unsigned_type<unsigned long>::value == true);\n        DLIB_TEST(is_signed_type<unsigned char>::value == false);\n        DLIB_TEST(is_signed_type<unsigned short>::value == false);\n        DLIB_TEST(is_signed_type<unsigned int>::value == false);\n        DLIB_TEST(is_signed_type<unsigned long>::value == false);\n\n\n        COMPILE_TIME_ASSERT(is_signed_type<signed char>::value == true);\n        COMPILE_TIME_ASSERT(is_signed_type<signed short>::value == true);\n        COMPILE_TIME_ASSERT(is_signed_type<signed int>::value == true);\n        COMPILE_TIME_ASSERT(is_signed_type<signed long>::value == true);\n        COMPILE_TIME_ASSERT(is_unsigned_type<signed char>::value == false);\n        COMPILE_TIME_ASSERT(is_unsigned_type<signed short>::value == false);\n        COMPILE_TIME_ASSERT(is_unsigned_type<signed int>::value == false);\n        COMPILE_TIME_ASSERT(is_unsigned_type<signed long>::value == false);\n\n        COMPILE_TIME_ASSERT(is_unsigned_type<unsigned char>::value == true);\n        COMPILE_TIME_ASSERT(is_unsigned_type<unsigned short>::value == true);\n        COMPILE_TIME_ASSERT(is_unsigned_type<unsigned int>::value == true);\n        COMPILE_TIME_ASSERT(is_unsigned_type<unsigned long>::value == true);\n        COMPILE_TIME_ASSERT(is_signed_type<unsigned char>::value == false);\n        COMPILE_TIME_ASSERT(is_signed_type<unsigned short>::value == false);\n        COMPILE_TIME_ASSERT(is_signed_type<unsigned int>::value == false);\n        COMPILE_TIME_ASSERT(is_signed_type<unsigned long>::value == false);\n\n\n    }\n\n\n\n\n    class metaprogramming_tester : public tester\n    {\n    public:\n        metaprogramming_tester (\n        ) :\n            tester (\"test_metaprogramming\",\n                    \"Runs tests on the metaprogramming objects and functions.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            metaprogramming_test();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/multithreaded_object.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <string>\n#include <sstream>\n\n#include <dlib/threads.h>\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n  \n    logger dlog(\"test.multithreaded_object\");\n\n    dlib::mutex cm;\n    int count;\n\n    class test1 :  multithreaded_object\n    {\n    public:\n        test1 ()\n        {\n            DLIB_TEST(number_of_threads_registered() == 0);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            clear();\n            DLIB_TEST(number_of_threads_registered() == 0);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n        }\n\n        ~test1 ()\n        {\n            DLIB_TEST(number_of_threads_registered() == 0);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            stop();\n            DLIB_TEST(number_of_threads_registered() == 0);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            wait();\n            DLIB_TEST(number_of_threads_registered() == 0);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n        }\n\n    private:\n    };\n\n    class test2 : private multithreaded_object\n    {\n    public:\n        test2()\n        {\n            DLIB_TEST(number_of_threads_registered() == 0);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            register_thread(*this,&test2::thread);\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            clear();\n            DLIB_TEST(number_of_threads_registered() == 0);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            register_thread(*this,&test2::thread);\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n        }\n\n        ~test2()\n        {\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            stop();\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            wait();\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n        }\n\n    private:\n\n        void thread()\n        {\n            auto_mutex M(cm);\n            ++count;\n        }\n\n    };\n\n    class test3_c1 : private multithreaded_object\n    {\n    public:\n        test3_c1()\n        {\n            DLIB_TEST(number_of_threads_registered() == 0);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            register_thread(*this,&test3_c1::thread);\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            start();\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(is_running() == true);\n        }\n\n        ~test3_c1()\n        {\n            DLIB_TEST(number_of_threads_registered() == 1);\n            stop();\n            DLIB_TEST(is_running() == false);\n            DLIB_TEST(number_of_threads_registered() == 1);\n            wait();\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n        }\n\n    private:\n\n        void thread()\n        {\n            cm.lock();\n            ++count;\n            cm.unlock();\n            // wait until we are supposed to stop\n            while (!should_stop())\n                dlib::sleep(1);\n        }\n\n    };\n\n    class test4_c2 : private multithreaded_object\n    {\n    public:\n        test4_c2()\n        {\n            DLIB_TEST(number_of_threads_registered() == 0);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            register_thread(*this,&test4_c2::thread);\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n            start();\n            DLIB_TEST(number_of_threads_registered() == 1);\n            DLIB_TEST(number_of_threads_alive() == 1);\n            DLIB_TEST(is_running() == true);\n            register_thread(*this,&test4_c2::thread);\n            DLIB_TEST(number_of_threads_registered() == 2);\n            DLIB_TEST(number_of_threads_alive() == 2);\n            DLIB_TEST(is_running() == true);\n            start();\n            DLIB_TEST(number_of_threads_registered() == 2);\n            DLIB_TEST(number_of_threads_alive() == 2);\n            DLIB_TEST(is_running() == true);\n            start();\n            DLIB_TEST(number_of_threads_registered() == 2);\n            DLIB_TEST(number_of_threads_alive() == 2);\n            DLIB_TEST(is_running() == true);\n            start();\n            DLIB_TEST(number_of_threads_registered() == 2);\n            DLIB_TEST(number_of_threads_alive() == 2);\n            DLIB_TEST(is_running() == true);\n            start();\n            DLIB_TEST(number_of_threads_registered() == 2);\n            DLIB_TEST(number_of_threads_alive() == 2);\n            DLIB_TEST(is_running() == true);\n            pause();\n            DLIB_TEST(number_of_threads_registered() == 2);\n            DLIB_TEST(number_of_threads_alive() == 2);\n            DLIB_TEST(is_running() == false);\n        }\n\n        ~test4_c2()\n        {\n            DLIB_TEST(number_of_threads_registered() == 2);\n            DLIB_TEST(number_of_threads_alive() == 2);\n            DLIB_TEST_MSG(is_running() == false,\"is_running(): \" << is_running());\n            stop();\n            DLIB_TEST(number_of_threads_registered() == 2);\n            DLIB_TEST(is_running() == false);\n            wait();\n            DLIB_TEST(number_of_threads_registered() == 2);\n            DLIB_TEST(number_of_threads_alive() == 0);\n            DLIB_TEST(is_running() == false);\n        }\n\n    private:\n\n        void thread()\n        {\n            auto_mutex M(cm);\n            ++count;\n            while (!should_stop())\n                dlib::sleep(10);\n        }\n\n    };\n\n\n    class test5 : private multithreaded_object\n    {\n    public:\n        test5()\n        {\n            register_thread(*this,&test5::thread1);\n            register_thread(*this,&test5::thread2);\n            register_thread(*this,&test5::thread3);\n            register_thread(*this,&test5::thread3);\n            start();\n        }\n\n        ~test5()\n        {\n            stop();\n            wait();\n        }\n\n    private:\n\n        void thread1()\n        {\n            while (!should_stop())\n                dlib::sleep(10);\n        }\n\n        void thread2()\n        {\n            while (!should_stop())\n                dlib::sleep(10);\n        }\n\n        void thread3()\n        {\n            while (!should_stop())\n                dlib::sleep(10);\n        }\n\n    };\n\n\n    void multithreaded_object_test (\n    )\n    /*!\n        ensures\n            - runs tests on dlib::multithreaded_object for compliance with the specs \n    !*/\n    {        \n\n        count = 0;\n\n        for (int i = 0; i < 5; ++i)\n        {\n            {\n                test1 a1;\n                test2 a2;\n                test3_c1 a3;\n                test4_c2 a4;\n                test5 a5;\n            }\n            DLIB_TEST(count == (i+1)*3);\n            print_spinner();\n        }\n        count = 0;\n\n        for (int i = 0; i < 5; ++i)\n        {\n            {\n                test1 a1;\n                test2 a2;\n                test3_c1 a3;\n                test4_c2 a4;\n                test5 a5;\n                dlib::sleep(50);\n            }\n            DLIB_TEST(count == (i+1)*3);\n            print_spinner();\n        }\n    }\n\n\n    class multithreaded_object_tester : public tester\n    {\n    public:\n        multithreaded_object_tester (\n        ) :\n            tester (\"test_multithreaded_object\",\n                    \"Runs tests on the multithreaded_object component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            multithreaded_object_test();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/numerical_integration.cpp",
    "content": "// Copyright (C) 2013 Steve Taylor (steve98654@gmail.com)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n// This function test battery is given in:\n//\n// Test functions taken from Pedro Gonnet's dissertation at ETH: \n// Adaptive Quadrature Re-Revisited\n// http://e-collection.library.ethz.ch/eserv/eth:65/eth-65-02.pdf\n\n#include <math.h>\n#include <dlib/matrix.h>\n#include <dlib/numeric_constants.h>\n#include <dlib/numerical_integration.h>\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.numerical_integration\");\n\n    class numerical_integration_tester : public tester\n    {\n    public:\n        numerical_integration_tester (\n        ) :\n            tester (\"test_numerical_integration\",\n                    \"Runs tests on the numerical integration function.\",\n                    0\n            )\n        {}\n        \n        void perform_test()\n        {\n\n            dlog <<dlib::LINFO << \"Testing integrate_function_adapt_simpson\";\n\n            matrix<double,23,1> m;\n            double tol = 1e-10;\n            double eps = 1e-8;\n\n            m(0) = integrate_function_adapt_simp(&gg1, 0.0, 1.0, tol);\n            m(1) = integrate_function_adapt_simp(&gg2, 0.0, 1.0, tol);\n            m(2) = integrate_function_adapt_simp(&gg3, 0.0, 1.0, tol);\n            m(3) = integrate_function_adapt_simp(&gg4, 0.0, 1.0, tol);\n            m(4) = integrate_function_adapt_simp(&gg5, -1.0, 1.0, tol);\n            m(5) = integrate_function_adapt_simp(&gg6, 0.0, 1.0, tol);\n            m(6) = integrate_function_adapt_simp(&gg7, 0.0, 1.0, tol);\n            m(7) = integrate_function_adapt_simp(&gg8, 0.0, 1.0, tol);\n            m(8) = integrate_function_adapt_simp(&gg9, 0.0, 1.0, tol);\n            m(9) = integrate_function_adapt_simp(&gg10, 0.0, 1.0, tol);\n            m(10) = integrate_function_adapt_simp(&gg11, 0.0, 1.0, tol);\n            m(11) = integrate_function_adapt_simp(&gg12, 1e-6, 1.0, tol);\n            m(12) = integrate_function_adapt_simp(&gg13, 0.0, 10.0, tol);\n            m(13) = integrate_function_adapt_simp(&gg14, 0.0, 10.0, tol);\n            m(14) = integrate_function_adapt_simp(&gg15, 0.0, 10.0, tol);\n            m(15) = integrate_function_adapt_simp(&gg16, 0.01, 1.0, tol);\n            m(16) = integrate_function_adapt_simp(&gg17, 0.0, pi, tol);\n            m(17) = integrate_function_adapt_simp(&gg18, 0.0, 1.0, tol);\n            m(18) = integrate_function_adapt_simp(&gg19, -1.0, 1.0, tol);\n            m(19) = integrate_function_adapt_simp(&gg20, 0.0, 1.0, tol);\n            m(20) = integrate_function_adapt_simp(&gg21, 0.0, 1.0, tol);\n            m(21) = integrate_function_adapt_simp(&gg22, 0.0, 5.0, tol);\n\n            // Here we compare the approximated integrals against \n            // highly accurate approximations generated either from \n            // the exact integral values or Mathematica's NIntegrate \n            // function using a working precision of 20. \n\n            DLIB_TEST(abs(m(0) - 1.7182818284590452354) < 1e-11);\n            DLIB_TEST(abs(m(1) - 0.7000000000000000000) < eps);\n            DLIB_TEST(abs(m(2) - 0.6666666666666666667) < eps);\n            DLIB_TEST(abs(m(3) - 0.2397141133444008336) < eps);\n            DLIB_TEST(abs(m(4) - 1.5822329637296729331) < 1e-11);\n            DLIB_TEST(abs(m(5) - 0.4000000000000000000) < eps);\n            DLIB_TEST(abs(m(6) - 2.0000000000000000000) < 1e-4);\n            DLIB_TEST(abs(m(7) - 0.8669729873399110375) < eps);\n            DLIB_TEST(abs(m(8) - 1.1547005383792515290) < eps);\n            DLIB_TEST(abs(m(9) - 0.6931471805599453094) < eps);\n            DLIB_TEST(abs(m(10) - 0.3798854930417224753) < eps);\n            DLIB_TEST(abs(m(11) - 0.7775036341124982763) < eps);\n            DLIB_TEST(abs(m(12) - 0.5000000000000000000) < eps);\n            DLIB_TEST(abs(m(13) - 1.0000000000000000000) < eps);\n            DLIB_TEST(abs(m(14) - 0.4993633810764567446) < eps);\n            DLIB_TEST(abs(m(15) - 0.1121393035410217   ) < eps);\n            DLIB_TEST(abs(m(16) - 0.2910187828600526985) < eps);\n            DLIB_TEST(abs(m(17) + 0.4342944819032518276) < 1e-5);\n            DLIB_TEST(abs(m(18) - 1.56439644406905     ) < eps);\n            DLIB_TEST(abs(m(19) - 0.1634949430186372261) < eps);\n            DLIB_TEST(abs(m(20) - 0.0134924856494677726) < eps);\n        }\n\n        static double gg1(double x)\n        {\n            return pow(e,x);\n        }\n        \n        static double gg2(double x)\n        {\n            if(x > 0.3)\n            {\n                return 1.0;\n            }\n            else\n            {\n                return 0;\n            }\n        }\n\n        static double gg3(double x)\n        {\n            return pow(x,0.5);\n        }\n\n        static double gg4(double x)\n        {\n            return 23.0/25.0*cosh(x)-cos(x);\n        }\n\n        static double gg5(double x)\n        {\n            return 1/(pow(x,4) + pow(x,2) + 0.9);\n        }\n\n        static double gg6(double x)    \n        {\n            return pow(x,1.5);\n        }\n    \n        static double gg7(double x)\n        {\n            return pow(x,-0.5);\n        }\n\n        static double gg8(double x)\n        {\n            return 1/(1 + pow(x,4));\n        }\n\n        static double gg9(double x)\n        {\n            return 2/(2 + sin(10*pi*x));\n        }\n    \n        static double gg10(double x)\n        {\n            return 1/(1+x);\n        }\n\n        static double gg11(double x)\n        {\n            return 1.0/(1 + pow(e,x));\n        }\n\n        static double gg12(double x)\n        {\n            return x/(pow(e,x)-1.0);\n        }\n\n        static double gg13(double x)\n        {\n            return sqrt(50.0)*pow(e,-50.0*pi*x*x);\n        }\n\n        static double gg14(double x)\n        {\n            return 25.0*pow(e,-25.0*x);\n        }\n\n        static double gg15(double x)\n        {\n            return 50.0/(pi*(2500.0*x*x+1));\n        }\n\n        static double gg16(double x)\n        {\n            return 50.0*pow((sin(50.0*pi*x)/(50.0*pi*x)),2);\n        }\n\n        static double gg17(double x)\n        {\n            return cos(cos(x)+3*sin(x)+2*cos(2*x)+3*cos(3*x));\n        }\n\n        static double gg18(double x)\n        {\n            return log10(x);\n        }\n\n        static double gg19(double x)\n        {\n            return 1/(1.005+x*x);\n        }\n\n        static double gg20(double x)\n        {\n            return 1/cosh(20.0*(x-1.0/5.0)) + 1/cosh(400.0*(x-2.0/5.0)) \n                + 1/cosh(8000.0*(x-3.0/5.0));\n        }\n\n        static double gg21(double x)\n        {\n            return 1.0/(1.0+(230.0*x-30.0)*(230.0*x-30.0));\n        }\n\n        static double gg22(double x)\n        {\n            if(x < 1)\n            {\n                return (x + 1.0);\n            }\n            else if(x >= 1 && x <= 3)\n            {\n                return (3.0 - x);\n            }\n            else\n            {\n                return 2.0;\n            }\n        }\n\n     };\n\n    numerical_integration_tester a;\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/object_detector.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/statistics.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include \"tester.h\"\n#include <dlib/pixel.h>\n#include <dlib/svm_threaded.h>\n#include <dlib/array.h>\n#include <dlib/set_utils.h>\n#include <dlib/array2d.h>\n#include <dlib/image_keypoint.h>\n#include <dlib/image_processing.h>\n#include <dlib/image_transforms.h>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.object_detector\");\n\n// ----------------------------------------------------------------------------------------\n\n    struct funny_image\n    {\n        array2d<unsigned char> img;\n        long nr() const { return img.nr(); }\n        long nc() const { return img.nc(); }\n    };\n\n    void swap(funny_image& a, funny_image& b)\n    {\n        a.img.swap(b.img);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type,\n        typename detector_type\n        >\n    void validate_some_object_detector_stuff (\n        const image_array_type& images,\n        detector_type& detector,\n        double eps = 1e-10\n    )\n    {\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            std::vector<rectangle> dets = detector(images[i]);\n            std::vector<std::pair<double,rectangle> > dets2;\n\n            detector(images[i], dets2);\n\n            matrix<double,0,1> psi(detector.get_w().size());\n            matrix<double,0,1> psi2(detector.get_w().size());\n            const double thresh = detector.get_w()(detector.get_w().size()-1);\n\n            DLIB_TEST(dets.size() == dets2.size());\n            for (unsigned long j = 0; j < dets.size(); ++j)\n            {\n                DLIB_TEST(dets[j] == dets2[j].second);\n\n                const full_object_detection fdet = detector.get_scanner().get_full_object_detection(dets[j], detector.get_w());\n                psi = 0;\n                detector.get_scanner().get_feature_vector(fdet, psi);\n\n                double check_score = dot(psi,detector.get_w()) - thresh;\n                DLIB_TEST_MSG(std::abs(check_score - dets2[j].first) < eps, std::abs(check_score - dets2[j].first) << \"  check_score: \"<< check_score);\n            }\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class very_simple_feature_extractor : noncopyable\n    {\n        /*!\n        WHAT THIS OBJECT REPRESENTS\n            This object is a feature extractor which goes to every pixel in an image and\n            produces a 32 dimensional feature vector.  This vector is an indicator vector\n            which records the pattern of pixel values in a 4-connected region.  So it should\n            be able to distinguish basic things like whether or not a location falls on the\n            corner of a white box, on an edge, in the middle, etc.\n\n\n            Note that this object also implements the interface defined in dlib/image_keypoint/hashed_feature_image_abstract.h.\n            This means all the member functions in this object are supposed to behave as \n            described in the hashed_feature_image specification.  So when you define your own\n            feature extractor objects you should probably refer yourself to that documentation\n            in addition to reading this example program.\n        !*/\n\n\n    public:\n\n        inline void load (\n            const funny_image& img_\n        )\n        {\n            const array2d<unsigned char>& img = img_.img;\n\n            feat_image.set_size(img.nr(), img.nc());\n            assign_all_pixels(feat_image,0);\n            for (long r = 1; r+1 < img.nr(); ++r)\n            {\n                for (long c = 1; c+1 < img.nc(); ++c)\n                {\n                    unsigned char f = 0;\n                    if (img[r][c])   f |= 0x1;\n                    if (img[r][c+1]) f |= 0x2;\n                    if (img[r][c-1]) f |= 0x4;\n                    if (img[r+1][c]) f |= 0x8;\n                    if (img[r-1][c]) f |= 0x10;\n\n                    // Store the code value for the pattern of pixel values in the 4-connected\n                    // neighborhood around this row and column.\n                    feat_image[r][c] = f;\n                }\n            }\n        }\n\n        inline void load (\n            const array2d<unsigned char>& img\n        )\n        {\n            feat_image.set_size(img.nr(), img.nc());\n            assign_all_pixels(feat_image,0);\n            for (long r = 1; r+1 < img.nr(); ++r)\n            {\n                for (long c = 1; c+1 < img.nc(); ++c)\n                {\n                    unsigned char f = 0;\n                    if (img[r][c])   f |= 0x1;\n                    if (img[r][c+1]) f |= 0x2;\n                    if (img[r][c-1]) f |= 0x4;\n                    if (img[r+1][c]) f |= 0x8;\n                    if (img[r-1][c]) f |= 0x10;\n\n                    // Store the code value for the pattern of pixel values in the 4-connected\n                    // neighborhood around this row and column.\n                    feat_image[r][c] = f;\n                }\n            }\n        }\n\n        inline unsigned long size () const { return feat_image.size(); }\n        inline long nr () const { return feat_image.nr(); }\n        inline long nc () const { return feat_image.nc(); }\n\n        inline long get_num_dimensions (\n        ) const\n        {\n            // Return the dimensionality of the vectors produced by operator()\n            return 32;\n        }\n\n        typedef std::vector<std::pair<unsigned int,double> > descriptor_type;\n\n        inline const descriptor_type& operator() (\n            long row,\n            long col\n        ) const\n            /*!\n                requires\n                    - 0 <= row < nr()\n            - 0 <= col < nc()\n                ensures\n                    - returns a sparse vector which describes the image at the given row and column.  \n                      In particular, this is a vector that is 0 everywhere except for one element. \n            !*/\n        {\n            feat.clear();\n            const unsigned long only_nonzero_element_index = feat_image[row][col];\n            feat.push_back(make_pair(only_nonzero_element_index,1.0));\n            return feat;\n        }\n\n        // This block of functions is meant to provide a way to map between the row/col space taken by\n        // this object's operator() function and the images supplied to load().  In this example it's trivial.  \n        // However, in general, you might create feature extractors which don't perform extraction at every \n        // possible image location (e.g. the hog_image) and thus result in some more complex mapping.  \n        inline const rectangle get_block_rect       ( long row, long col) const { return centered_rect(col,row,3,3); }\n        inline const point image_to_feat_space      ( const point& p) const { return p; } \n        inline const rectangle image_to_feat_space  ( const rectangle& rect) const { return rect; } \n        inline const point feat_to_image_space      ( const point& p) const { return p; } \n        inline const rectangle feat_to_image_space  ( const rectangle& rect) const { return rect; }\n\n        inline friend void serialize   ( const very_simple_feature_extractor& item, std::ostream& out)  { serialize(item.feat_image, out); }\n        inline friend void deserialize ( very_simple_feature_extractor& item, std::istream& in ) { deserialize(item.feat_image, in); }\n\n        void copy_configuration ( const very_simple_feature_extractor& ){}\n\n    private:\n        array2d<unsigned char> feat_image;\n\n        // This variable doesn't logically contribute to the state of this object.  It is here\n        // only to avoid returning a descriptor_type object by value inside the operator() method.\n        mutable descriptor_type feat;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    void make_simple_test_data (\n        image_array_type& images,\n        std::vector<std::vector<rectangle> >& object_locations\n    )\n    {\n        images.clear();\n        object_locations.clear();\n\n        images.resize(3);\n        images[0].set_size(400,400);\n        images[1].set_size(400,400);\n        images[2].set_size(400,400);\n\n        // set all the pixel values to black\n        assign_all_pixels(images[0], 0);\n        assign_all_pixels(images[1], 0);\n        assign_all_pixels(images[2], 0);\n\n        // Now make some squares and draw them onto our black images. All the\n        // squares will be 70 pixels wide and tall.\n\n        std::vector<rectangle> temp;\n        temp.push_back(centered_rect(point(100,100), 70,70)); \n        fill_rect(images[0],temp.back(),255); // Paint the square white\n        temp.push_back(centered_rect(point(200,300), 70,70));\n        fill_rect(images[0],temp.back(),255); // Paint the square white\n        object_locations.push_back(temp);\n\n        temp.clear();\n        temp.push_back(centered_rect(point(140,200), 70,70));\n        fill_rect(images[1],temp.back(),255); // Paint the square white\n        temp.push_back(centered_rect(point(303,200), 70,70));\n        fill_rect(images[1],temp.back(),255); // Paint the square white\n        object_locations.push_back(temp);\n\n        temp.clear();\n        temp.push_back(centered_rect(point(123,121), 70,70));\n        fill_rect(images[2],temp.back(),255); // Paint the square white\n        object_locations.push_back(temp);\n\n        // corrupt each image with random noise just to make this a little more \n        // challenging \n        dlib::rand rnd;\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            for (long r = 0; r < images[i].nr(); ++r)\n            {\n                for (long c = 0; c < images[i].nc(); ++c)\n                {\n                    typedef typename image_array_type::type image_type;\n                    typedef typename image_type::type type;\n                    images[i][r][c] = (type)put_in_range(0,255,images[i][r][c] + 10*rnd.get_random_gaussian());\n                }\n            }\n        }\n    }\n\n    template <\n        typename image_array_type\n        >\n    void make_simple_test_data (\n        image_array_type& images,\n        std::vector<std::vector<full_object_detection> >& object_locations\n    )\n    {\n        images.clear();\n        object_locations.clear();\n\n\n        images.resize(3);\n        images[0].set_size(400,400);\n        images[1].set_size(400,400);\n        images[2].set_size(400,400);\n\n        // set all the pixel values to black\n        assign_all_pixels(images[0], 0);\n        assign_all_pixels(images[1], 0);\n        assign_all_pixels(images[2], 0);\n\n        // Now make some squares and draw them onto our black images. All the\n        // squares will be 70 pixels wide and tall.\n        const int shrink = 0;\n        std::vector<full_object_detection> temp;\n\n        rectangle rect = centered_rect(point(100,100), 70,71);\n        std::vector<point> movable_parts;\n        movable_parts.push_back(shrink_rect(rect,shrink).tl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).tr_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).bl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).br_corner());\n        temp.push_back(full_object_detection(rect, movable_parts)); \n        fill_rect(images[0],rect,255); // Paint the square white\n\n        rect = centered_rect(point(200,200), 70,71);\n        movable_parts.clear();\n        movable_parts.push_back(shrink_rect(rect,shrink).tl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).tr_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).bl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).br_corner());\n        temp.push_back(full_object_detection(rect, movable_parts)); \n        fill_rect(images[0],rect,255); // Paint the square white\n\n        object_locations.push_back(temp);\n        // ------------------------------------\n        temp.clear();\n\n        rect = centered_rect(point(140,200), 70,71);\n        movable_parts.clear();\n        movable_parts.push_back(shrink_rect(rect,shrink).tl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).tr_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).bl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).br_corner());\n        temp.push_back(full_object_detection(rect, movable_parts)); \n        fill_rect(images[1],rect,255); // Paint the square white\n\n\n        rect = centered_rect(point(303,200), 70,71);\n        movable_parts.clear();\n        movable_parts.push_back(shrink_rect(rect,shrink).tl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).tr_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).bl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).br_corner());\n        temp.push_back(full_object_detection(rect, movable_parts)); \n        fill_rect(images[1],rect,255); // Paint the square white\n\n        object_locations.push_back(temp);\n        // ------------------------------------\n        temp.clear();\n\n        rect = centered_rect(point(123,121), 70,71);\n        movable_parts.clear();\n        movable_parts.push_back(shrink_rect(rect,shrink).tl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).tr_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).bl_corner());\n        movable_parts.push_back(shrink_rect(rect,shrink).br_corner());\n        temp.push_back(full_object_detection(rect, movable_parts)); \n        fill_rect(images[2],rect,255); // Paint the square white\n\n        object_locations.push_back(temp);\n\n        // corrupt each image with random noise just to make this a little more \n        // challenging \n        dlib::rand rnd;\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            for (long r = 0; r < images[i].nr(); ++r)\n            {\n                for (long c = 0; c < images[i].nc(); ++c)\n                {\n                    typedef typename image_array_type::type image_type;\n                    typedef typename image_type::type type;\n                    images[i][r][c] = (type)put_in_range(0,255,images[i][r][c] + 40*rnd.get_random_gaussian());\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_fhog_pyramid (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_fhog_pyramid()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef scan_fhog_pyramid<pyramid_down<2> > image_scanner_type;\n        image_scanner_type scanner;\n        scanner.set_detection_window_size(35,35);\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        trainer.set_overlap_tester(test_box_overlap(0,0));\n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n\n            validate_some_object_detector_stuff(images, detector, 1e-6);\n        }\n\n        {\n            std::vector<object_detector<image_scanner_type> > detectors;\n            detectors.push_back(detector);\n            detectors.push_back(detector);\n            detectors.push_back(detector);\n\n            std::vector<rectangle> dets1 = evaluate_detectors(detectors, images[0]);\n            std::vector<rectangle> dets2 = detector(images[0]);\n            DLIB_TEST(dets1.size() > 0);\n            DLIB_TEST(dets2.size()*3 == dets1.size());\n            dlib::set<rectangle>::kernel_1a_c d1, d2;\n            for (unsigned long i = 0; i < dets1.size(); ++i)\n            {\n                if (!d1.is_member(dets1[i]))\n                    d1.add(dets1[i]);\n            }\n            for (unsigned long i = 0; i < dets2.size(); ++i)\n            {\n                if (!d2.is_member(dets2[i]))\n                    d2.add(dets2[i]);\n            }\n            DLIB_TEST(d1.size() == d2.size());\n            DLIB_TEST(set_intersection_size(d1,d2) == d1.size());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_1 (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_1()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef hashed_feature_image<hog_image<3,3,1,4,hog_signed_gradient,hog_full_interpolation> > feature_extractor_type;\n        typedef scan_image_pyramid<pyramid_down<2>, feature_extractor_type> image_scanner_type;\n        image_scanner_type scanner;\n        const rectangle object_box = compute_box_dimensions(1,35*35);\n        scanner.add_detection_template(object_box, create_grid_detection_template(object_box,2,2));\n        setup_hashed_features(scanner, images, 9);\n        use_uniform_feature_weights(scanner);\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        trainer.set_overlap_tester(test_box_overlap(0,0));\n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n\n            validate_some_object_detector_stuff(images, detector);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_1_boxes (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_1_boxes()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef hashed_feature_image<hog_image<3,3,1,4,hog_signed_gradient,hog_full_interpolation> > feature_extractor_type;\n        typedef scan_image_boxes<feature_extractor_type> image_scanner_type;\n        image_scanner_type scanner;\n        setup_hashed_features(scanner, images, 9);\n        use_uniform_feature_weights(scanner);\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        trainer.set_overlap_tester(test_box_overlap(0,0));\n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n\n            validate_some_object_detector_stuff(images, detector);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_1m (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_1m()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<full_object_detection> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef hashed_feature_image<hog_image<3,3,1,4,hog_signed_gradient,hog_full_interpolation> > feature_extractor_type;\n        typedef scan_image_pyramid<pyramid_down<2>, feature_extractor_type> image_scanner_type;\n        image_scanner_type scanner;\n        const rectangle object_box = compute_box_dimensions(1,35*35);\n        std::vector<rectangle> mboxes;\n        const int mbox_size = 20;\n        mboxes.push_back(centered_rect(0,0, mbox_size,mbox_size));\n        mboxes.push_back(centered_rect(0,0, mbox_size,mbox_size));\n        mboxes.push_back(centered_rect(0,0, mbox_size,mbox_size));\n        mboxes.push_back(centered_rect(0,0, mbox_size,mbox_size));\n        scanner.add_detection_template(object_box, create_grid_detection_template(object_box,1,1), mboxes);\n        setup_hashed_features(scanner, images, 9);\n        use_uniform_feature_weights(scanner);\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        trainer.set_overlap_tester(test_box_overlap(0,0));\n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n\n            validate_some_object_detector_stuff(images, detector);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_1_fine_hog (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_1_fine_hog()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef hashed_feature_image<fine_hog_image<3,3,2,4,hog_signed_gradient> > feature_extractor_type;\n        typedef scan_image_pyramid<pyramid_down<2>, feature_extractor_type> image_scanner_type;\n        image_scanner_type scanner;\n        const rectangle object_box = compute_box_dimensions(1,35*35);\n        scanner.add_detection_template(object_box, create_grid_detection_template(object_box,2,2));\n        setup_hashed_features(scanner, images, 9);\n        use_uniform_feature_weights(scanner);\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        trainer.set_overlap_tester(test_box_overlap(0,0));\n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n\n            validate_some_object_detector_stuff(images, detector);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_1_poly (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_1_poly()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef hashed_feature_image<poly_image<2> > feature_extractor_type;\n        typedef scan_image_pyramid<pyramid_down<2>, feature_extractor_type> image_scanner_type;\n        image_scanner_type scanner;\n        const rectangle object_box = compute_box_dimensions(1,35*35);\n        scanner.add_detection_template(object_box, create_grid_detection_template(object_box,2,2));\n        setup_hashed_features(scanner, images, 9);\n        use_uniform_feature_weights(scanner);\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        trainer.set_overlap_tester(test_box_overlap(0,0));\n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n\n            validate_some_object_detector_stuff(images, detector);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_1m_poly (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_1_poly()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<full_object_detection> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef hashed_feature_image<poly_image<2> > feature_extractor_type;\n        typedef scan_image_pyramid<pyramid_down<3>, feature_extractor_type> image_scanner_type;\n        image_scanner_type scanner;\n        const rectangle object_box = compute_box_dimensions(1,35*35);\n        std::vector<rectangle> mboxes;\n        const int mbox_size = 20;\n        mboxes.push_back(centered_rect(0,0, mbox_size,mbox_size));\n        mboxes.push_back(centered_rect(0,0, mbox_size,mbox_size));\n        mboxes.push_back(centered_rect(0,0, mbox_size,mbox_size));\n        mboxes.push_back(centered_rect(0,0, mbox_size,mbox_size));\n        scanner.add_detection_template(object_box, create_grid_detection_template(object_box,2,2), mboxes);\n        setup_hashed_features(scanner, images, 9);\n        use_uniform_feature_weights(scanner);\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        trainer.set_overlap_tester(test_box_overlap(0,0));\n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n\n            validate_some_object_detector_stuff(images, detector);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_1_poly_nn (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_1_poly_nn()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef nearest_neighbor_feature_image<poly_image<5> > feature_extractor_type;\n        typedef scan_image_pyramid<pyramid_down<2>, feature_extractor_type> image_scanner_type;\n        image_scanner_type scanner;\n\n        setup_grid_detection_templates(scanner, object_locations, 2, 2);\n        feature_extractor_type nnfe;\n        pyramid_down<2> pyr_down;\n        poly_image<5> polyi;\n        nnfe.set_basis(randomly_sample_image_features(images, pyr_down, polyi, 80));\n        scanner.copy_configuration(nnfe);\n\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n\n            validate_some_object_detector_stuff(images, detector);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_1_poly_nn_boxes (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_1_poly_nn_boxes()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef nearest_neighbor_feature_image<poly_image<5> > feature_extractor_type;\n        typedef scan_image_boxes<feature_extractor_type> image_scanner_type;\n        image_scanner_type scanner;\n\n        feature_extractor_type nnfe;\n        pyramid_down<2> pyr_down;\n        poly_image<5> polyi;\n        nnfe.set_basis(randomly_sample_image_features(images, pyr_down, polyi, 80));\n        scanner.copy_configuration(nnfe);\n\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n\n            validate_some_object_detector_stuff(images, detector);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_2 (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_2()\";\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        grayscale_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images, object_locations);\n\n        typedef scan_image_pyramid<pyramid_down<5>, very_simple_feature_extractor> image_scanner_type;\n        image_scanner_type scanner;\n        const rectangle object_box = compute_box_dimensions(1,70*70);\n        scanner.add_detection_template(object_box, create_grid_detection_template(object_box,2,2));\n        scanner.set_max_pyramid_levels(1);\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(0);  \n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        res = cross_validate_object_detection_trainer(trainer, images, object_locations, 3);\n        dlog << LINFO << \"3-fold cross validation (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n            validate_some_object_detector_stuff(images, detector);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class pyramid_down_funny : noncopyable\n    {\n        pyramid_down<2> pyr;\n    public:\n\n        template <typename T>\n        dlib::vector<double,2> point_down ( const dlib::vector<T,2>& p) const { return pyr.point_down(p); }\n\n        template <typename T>\n        dlib::vector<double,2> point_up ( const dlib::vector<T,2>& p) const { return pyr.point_up(p); }\n\n        template <typename T>\n        dlib::vector<double,2> point_down ( const dlib::vector<T,2>& p, unsigned int levels) const { return pyr.point_down(p,levels); }\n\n        template <typename T>\n        dlib::vector<double,2> point_up ( const dlib::vector<T,2>& p, unsigned int levels) const { return pyr.point_up(p,levels); }\n\n        rectangle rect_up ( const rectangle& rect) const { return pyr.rect_up(rect); }\n\n        rectangle rect_up ( const rectangle& rect, unsigned int levels) const { return pyr.rect_up(rect,levels); }\n\n        rectangle rect_down ( const rectangle& rect) const { return pyr.rect_down(rect); }\n\n        rectangle rect_down ( const rectangle& rect, unsigned int levels) const { return pyr.rect_down(rect,levels); }\n\n        template <\n            typename in_image_type,\n            typename out_image_type\n            >\n        void operator() (\n            const in_image_type& original,\n            out_image_type& down\n        ) const\n        {\n            pyr(original.img, down.img);\n        }\n\n    };\n\n    // make sure everything works even when the image isn't a dlib::array2d.\n    // So test with funny_image.\n    void test_3 (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_3()\";\n\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        typedef dlib::array<funny_image>  funny_image_array_type;\n        grayscale_image_array_type images_temp;\n        funny_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images_temp, object_locations);\n        images.resize(images_temp.size());\n        for (unsigned long i = 0; i < images_temp.size(); ++i)\n        {\n            images[i].img.swap(images_temp[i]);\n        }\n\n        typedef scan_image_pyramid<pyramid_down_funny, very_simple_feature_extractor> image_scanner_type;\n        image_scanner_type scanner;\n        const rectangle object_box = compute_box_dimensions(1,70*70);\n        scanner.add_detection_template(object_box, create_grid_detection_template(object_box,2,2));\n        scanner.set_max_pyramid_levels(1);\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        res = cross_validate_object_detection_trainer(trainer, images, object_locations, 3);\n        dlog << LINFO << \"3-fold cross validation (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class funny_box_generator\n    {\n    public:\n        template <typename image_type>\n        void operator() (\n            const image_type& img,\n            std::vector<rectangle>& rects\n        ) const\n        {\n            rects.clear();\n            find_candidate_object_locations(img.img, rects);\n            dlog << LINFO << \"funny_box_generator, rects.size(): \"<< rects.size();\n        }\n    };\n\n    inline void serialize(const funny_box_generator&, std::ostream& ) {}\n    inline void deserialize(funny_box_generator&, std::istream& ) {}\n\n\n    // make sure everything works even when the image isn't a dlib::array2d.\n    // So test with funny_image.\n    void test_3_boxes (\n    )\n    {        \n        print_spinner();\n        dlog << LINFO << \"test_3_boxes()\";\n\n\n        typedef dlib::array<array2d<unsigned char> >  grayscale_image_array_type;\n        typedef dlib::array<funny_image>  funny_image_array_type;\n        grayscale_image_array_type images_temp;\n        funny_image_array_type images;\n        std::vector<std::vector<rectangle> > object_locations;\n        make_simple_test_data(images_temp, object_locations);\n        images.resize(images_temp.size());\n        for (unsigned long i = 0; i < images_temp.size(); ++i)\n        {\n            images[i].img.swap(images_temp[i]);\n        }\n\n        typedef scan_image_boxes<very_simple_feature_extractor, funny_box_generator> image_scanner_type;\n        image_scanner_type scanner;\n        structural_object_detection_trainer<image_scanner_type> trainer(scanner);\n        trainer.set_num_threads(4);  \n        object_detector<image_scanner_type> detector = trainer.train(images, object_locations);\n\n        matrix<double> res = test_object_detection_function(detector, images, object_locations);\n        dlog << LINFO << \"Test detector (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        res = cross_validate_object_detection_trainer(trainer, images, object_locations, 3);\n        dlog << LINFO << \"3-fold cross validation (precision,recall): \" << res;\n        DLIB_TEST(sum(res) == 3);\n\n        {\n            ostringstream sout;\n            serialize(detector, sout);\n            istringstream sin(sout.str());\n            object_detector<image_scanner_type> d2;\n            deserialize(d2, sin);\n            matrix<double> res = test_object_detection_function(d2, images, object_locations);\n            dlog << LINFO << \"Test detector (precision,recall): \" << res;\n            DLIB_TEST(sum(res) == 3);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class object_detector_tester : public tester\n    {\n    public:\n        object_detector_tester (\n        ) :\n            tester (\"test_object_detector\",\n                    \"Runs tests on the structural object detection stuff.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_fhog_pyramid();\n            test_1_boxes();\n            test_1_poly_nn_boxes();\n            test_3_boxes();\n\n            test_1();\n            test_1m();\n            test_1_fine_hog();\n            test_1_poly();\n            test_1m_poly();\n            test_1_poly_nn();\n            test_2();\n            test_3();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/oca.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/optimization.h>\n#include <dlib/svm.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.oca\");\n\n// ----------------------------------------------------------------------------------------\n\n    class test_oca : public tester\n    {\n\n    public:\n        test_oca (\n        ) :\n            tester (\"test_oca\",\n                    \"Runs tests on the oca component.\")\n        {\n        }\n\n        void perform_test(\n        )\n        {\n            print_spinner();\n\n            typedef matrix<double,0,1> w_type;\n            w_type w;\n\n            decision_function<linear_kernel<w_type> > df;\n            svm_c_linear_trainer<linear_kernel<w_type> > trainer;\n            trainer.set_c_class1(2);\n            trainer.set_c_class1(3);\n            trainer.set_learns_nonnegative_weights(true);\n            trainer.set_epsilon(1e-12);\n\n            std::vector<w_type> x;\n            w_type temp(2);\n            temp = -1, 1;\n            x.push_back(temp);\n            temp = 1, -1;\n            x.push_back(temp);\n\n            std::vector<double> y;\n            y.push_back(+1);\n            y.push_back(-1);\n\n            w_type true_w(3);\n\n            oca solver;\n\n            // test the version without a non-negativity constraint on w.\n            solver(make_oca_problem_c_svm<w_type>(2.0, 3.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, 0);\n            dlog << LINFO << trans(w);\n            true_w = -0.5, 0.5, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            w_type prior = true_w;\n            solver(make_oca_problem_c_svm<w_type>(20.0, 30.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, prior);\n            dlog << LINFO << trans(w);\n            true_w = -0.5, 0.5, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            prior = 0,0,0;\n            solver(make_oca_problem_c_svm<w_type>(20.0, 30.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, prior);\n            dlog << LINFO << trans(w);\n            true_w = -0.5, 0.5, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            prior = -1,1,0;\n            solver(make_oca_problem_c_svm<w_type>(20.0, 30.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, prior);\n            dlog << LINFO << trans(w);\n            true_w = -1.0, 1.0, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            prior = -0.2,0.2,0;\n            solver(make_oca_problem_c_svm<w_type>(20.0, 30.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, prior);\n            dlog << LINFO << trans(w);\n            true_w = -0.5, 0.5, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            prior = -10.2,-1,0;\n            solver(make_oca_problem_c_svm<w_type>(20.0, 30.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, prior);\n            dlog << LINFO << trans(w);\n            true_w = -10.2, -1.0, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            print_spinner();\n\n            // test the version with a non-negativity constraint on w.\n            solver(make_oca_problem_c_svm<w_type>(2.0, 3.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, 9999);\n            dlog << LINFO << trans(w);\n            true_w = 0, 1, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            df = trainer.train(x,y);\n            w = join_cols(df.basis_vectors(0), uniform_matrix<double>(1,1,-df.b));\n            true_w = 0, 1, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n\n            print_spinner();\n\n            // test the version with a non-negativity constraint on w.\n            solver(make_oca_problem_c_svm<w_type>(2.0, 3.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, 2);\n            dlog << LINFO << trans(w);\n            true_w = 0, 1, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            print_spinner();\n\n\n            // test the version with a non-negativity constraint on w.\n            solver(make_oca_problem_c_svm<w_type>(2.0, 3.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, 1);\n            dlog << LINFO << trans(w);\n            true_w = 0, 1, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            print_spinner();\n\n\n            // switching the labels should change which w weight goes negative.\n            y.clear();\n            y.push_back(-1);\n            y.push_back(+1);\n\n\n            solver(make_oca_problem_c_svm<w_type>(2.0, 3.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, 0);\n            dlog << LINFO << trans(w);\n            true_w = 0.5, -0.5, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            print_spinner();\n\n            solver(make_oca_problem_c_svm<w_type>(2.0, 3.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, 1);\n            dlog << LINFO << trans(w);\n            true_w = 0.5, -0.5, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            print_spinner();\n\n            solver(make_oca_problem_c_svm<w_type>(2.0, 3.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, 2);\n            dlog << LINFO << trans(w);\n            true_w = 1, 0, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            print_spinner();\n\n            solver(make_oca_problem_c_svm<w_type>(2.0, 3.0, mat(x), mat(y), false, 1e-12, 40, max_index_plus_one(x)), w, 5);\n            dlog << LINFO << trans(w);\n            true_w = 1, 0, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n            df = trainer.train(x,y);\n            w = join_cols(df.basis_vectors(0), uniform_matrix<double>(1,1,-df.b));\n            true_w = 1, 0, 0;\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n\n\n            x.clear();\n            y.clear();\n            temp = -2, 2;\n            x.push_back(temp);\n            temp = 0, -0;\n            x.push_back(temp);\n\n            y.push_back(+1);\n            y.push_back(-1);\n\n            trainer.set_c(10);\n            df = trainer.train(x,y);\n            w = join_cols(df.basis_vectors(0), uniform_matrix<double>(1,1,-df.b));\n            true_w = 0, 1, -1;\n            dlog << LINFO << \"w: \" << trans(w);\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n\n            x.clear();\n            y.clear();\n            temp = -2, 2;\n            x.push_back(temp);\n            temp = 0, -0;\n            x.push_back(temp);\n\n            y.push_back(-1);\n            y.push_back(+1);\n\n            trainer.set_c(10);\n            df = trainer.train(x,y);\n            w = join_cols(df.basis_vectors(0), uniform_matrix<double>(1,1,-df.b));\n            true_w = 1, 0, 1;\n            dlog << LINFO << \"w: \" << trans(w);\n            dlog << LINFO << \"error: \"<< max(abs(w-true_w));\n            DLIB_TEST(max(abs(w-true_w)) < 1e-10);\n\n        }\n\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/one_vs_all_trainer.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n#include <vector>\n#include <sstream>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.one_vs_all_trainer\");\n\n\n    class test_one_vs_all_trainer : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        test_one_vs_all_trainer (\n        ) :\n            tester (\n                \"test_one_vs_all_trainer\",       // the command line argument name for this test\n                \"Run tests on the one_vs_all_trainer stuff.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n\n\n        template <typename sample_type, typename label_type>\n        void generate_data (\n            std::vector<sample_type>& samples,\n            std::vector<label_type>& labels\n        )\n        {\n            const long num = 50;\n\n            sample_type m;\n\n            dlib::rand rnd;\n\n\n            // make some samples near the origin\n            double radius = 0.5;\n            for (long i = 0; i < num+10; ++i)\n            {\n                double sign = 1;\n                if (rnd.get_random_double() < 0.5)\n                    sign = -1;\n                m(0) = 2*radius*rnd.get_random_double()-radius;\n                m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n                // add this sample to our set of samples we will run k-means \n                samples.push_back(m);\n                labels.push_back(1);\n            }\n\n            // make some samples in a circle around the origin but far away\n            radius = 10.0;\n            for (long i = 0; i < num+20; ++i)\n            {\n                double sign = 1;\n                if (rnd.get_random_double() < 0.5)\n                    sign = -1;\n                m(0) = 2*radius*rnd.get_random_double()-radius;\n                m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n                // add this sample to our set of samples we will run k-means \n                samples.push_back(m);\n                labels.push_back(2);\n            }\n\n            // make some samples in a circle around the point (25,25) \n            radius = 4.0;\n            for (long i = 0; i < num+30; ++i)\n            {\n                double sign = 1;\n                if (rnd.get_random_double() < 0.5)\n                    sign = -1;\n                m(0) = 2*radius*rnd.get_random_double()-radius;\n                m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n                // translate this point away from the origin\n                m(0) += 25;\n                m(1) += 25;\n\n                // add this sample to our set of samples we will run k-means \n                samples.push_back(m);\n                labels.push_back(3);\n            }\n        }\n\n        template <typename label_type, typename scalar_type>\n        void run_test (\n        )\n        {\n            print_spinner();\n            typedef matrix<scalar_type,2,1> sample_type;\n\n            std::vector<sample_type> samples, norm_samples;\n            std::vector<label_type> labels;\n\n            // First, get our labeled set of training data\n            generate_data(samples, labels);\n\n            typedef one_vs_all_trainer<any_trainer<sample_type,scalar_type>,label_type > ova_trainer;\n\n\n            ova_trainer trainer;\n\n            typedef polynomial_kernel<sample_type> poly_kernel;\n            typedef radial_basis_kernel<sample_type> rbf_kernel;\n\n            // make the binary trainers and set some parameters\n            krr_trainer<rbf_kernel> rbf_trainer;\n            svm_nu_trainer<poly_kernel> poly_trainer;\n            poly_trainer.set_kernel(poly_kernel(0.1, 1, 2));\n            rbf_trainer.set_kernel(rbf_kernel(0.1));\n\n\n            trainer.set_trainer(rbf_trainer);\n            trainer.set_trainer(poly_trainer, 1);\n\n            randomize_samples(samples, labels);\n            matrix<double> res = cross_validate_multiclass_trainer(trainer, samples, labels, 2);\n\n            print_spinner();\n\n            matrix<scalar_type> ans(3,3);\n            ans = 60,  0,  0, \n                  0, 70,  0, \n                  0,  0, 80;\n\n            DLIB_TEST_MSG(ans == res, \"res: \\n\" << res);\n\n            // test using a normalized_function with a one_vs_all_decision_function \n            {\n                poly_trainer.set_kernel(poly_kernel(1.1, 1, 2));\n                trainer.set_trainer(poly_trainer, 1);\n                vector_normalizer<sample_type> normalizer;\n                normalizer.train(samples);\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                    norm_samples.push_back(normalizer(samples[i]));\n                normalized_function<one_vs_all_decision_function<ova_trainer> > ndf;\n                ndf.function = trainer.train(norm_samples, labels);\n                ndf.normalizer = normalizer;\n                DLIB_TEST(ndf(samples[0])  == labels[0]);\n                DLIB_TEST(ndf(samples[40])  == labels[40]);\n                DLIB_TEST(ndf(samples[90])  == labels[90]);\n                DLIB_TEST(ndf(samples[120])  == labels[120]);\n                poly_trainer.set_kernel(poly_kernel(0.1, 1, 2));\n                trainer.set_trainer(poly_trainer, 1);\n                print_spinner();\n            }\n\n            one_vs_all_decision_function<ova_trainer> df = trainer.train(samples, labels);\n\n            DLIB_TEST(df.number_of_classes() == 3);\n\n            DLIB_TEST(df(samples[0])  == labels[0])\n            DLIB_TEST(df(samples[90])  == labels[90])\n\n\n            one_vs_all_decision_function<ova_trainer, \n                decision_function<poly_kernel>,  // This is the output of the poly_trainer\n                decision_function<rbf_kernel>    // This is the output of the rbf_trainer\n            > df2, df3;\n\n\n            df2 = df;\n            ofstream fout(\"df.dat\", ios::binary);\n            serialize(df2, fout);\n            fout.close();\n\n            // load the function back in from disk and store it in df3.  \n            ifstream fin(\"df.dat\", ios::binary);\n            deserialize(df3, fin);\n\n\n            DLIB_TEST(df3(samples[0])  == labels[0])\n            DLIB_TEST(df3(samples[90])  == labels[90])\n            res = test_multiclass_decision_function(df3, samples, labels);\n\n            DLIB_TEST(res == ans);\n\n\n        }\n\n        template <typename label_type, typename scalar_type>\n        void run_probabilistic_test (\n        )\n        {\n            print_spinner();\n            typedef matrix<scalar_type,2,1> sample_type;\n\n            std::vector<sample_type> samples;\n            std::vector<label_type> labels;\n\n            // First, get our labeled set of training data\n            generate_data(samples, labels);\n\n            typedef one_vs_all_trainer<any_trainer<sample_type,scalar_type>,label_type > ova_trainer;\n\n\n            ova_trainer trainer;\n\n            typedef polynomial_kernel<sample_type> poly_kernel;\n            typedef radial_basis_kernel<sample_type> rbf_kernel;\n\n            // make the binary trainers and set some parameters\n            krr_trainer<rbf_kernel> rbf_trainer;\n            svm_nu_trainer<poly_kernel> poly_trainer;\n            poly_trainer.set_kernel(poly_kernel(0.1, 1, 2));\n            rbf_trainer.set_kernel(rbf_kernel(0.1));\n\n\n            trainer.set_trainer(probabilistic(rbf_trainer, 3));\n            trainer.set_trainer(probabilistic(poly_trainer, 3), 1);\n\n            randomize_samples(samples, labels);\n            matrix<double> res = cross_validate_multiclass_trainer(trainer, samples, labels, 2);\n\n            print_spinner();\n\n            matrix<scalar_type> ans(3,3);\n            ans = 60,  0,  0, \n                  0, 70,  0, \n                  0,  0, 80;\n\n            DLIB_TEST_MSG(ans == res, \"res: \\n\" << res);\n\n            one_vs_all_decision_function<ova_trainer> df = trainer.train(samples, labels);\n\n            DLIB_TEST(df.number_of_classes() == 3);\n\n            DLIB_TEST(df(samples[0])  == labels[0])\n            DLIB_TEST(df(samples[90])  == labels[90])\n\n\n            one_vs_all_decision_function<ova_trainer, \n                probabilistic_function<decision_function<poly_kernel> >,  // This is the output of the poly_trainer\n                probabilistic_function<decision_function<rbf_kernel> >    // This is the output of the rbf_trainer\n            > df2, df3;\n\n\n            df2 = df;\n            ofstream fout(\"df.dat\", ios::binary);\n            serialize(df2, fout);\n            fout.close();\n\n            // load the function back in from disk and store it in df3.  \n            ifstream fin(\"df.dat\", ios::binary);\n            deserialize(df3, fin);\n\n\n            DLIB_TEST(df3(samples[0])  == labels[0])\n            DLIB_TEST(df3(samples[90])  == labels[90])\n            res = test_multiclass_decision_function(df3, samples, labels);\n\n            DLIB_TEST(res == ans);\n\n\n        }\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"run_test<double,double>()\";\n            run_test<double,double>();\n\n            dlog << LINFO << \"run_test<int,double>()\";\n            run_test<int,double>();\n\n            dlog << LINFO << \"run_test<double,float>()\";\n            run_test<double,float>();\n\n            dlog << LINFO << \"run_test<int,float>()\";\n            run_test<int,float>();\n\n            dlog << LINFO << \"run_probabilistic_test<double,double>()\";\n            run_probabilistic_test<double,double>();\n\n            dlog << LINFO << \"run_probabilistic_test<int,double>()\";\n            run_probabilistic_test<int,double>();\n\n            dlog << LINFO << \"run_probabilistic_test<double,float>()\";\n            run_probabilistic_test<double,float>();\n\n            dlog << LINFO << \"run_probabilistic_test<int,float>()\";\n            run_probabilistic_test<int,float>();\n        }\n    };\n\n    test_one_vs_all_trainer a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/one_vs_one_trainer.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n#include <dlib/statistics.h>\n#include <vector>\n#include <sstream>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.one_vs_one_trainer\");\n\n\n    class test_one_vs_one_trainer : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        test_one_vs_one_trainer (\n        ) :\n            tester (\n                \"test_one_vs_one_trainer\",       // the command line argument name for this test\n                \"Run tests on the one_vs_one_trainer stuff.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n\n\n        template <typename sample_type, typename label_type>\n        void generate_data (\n            std::vector<sample_type>& samples,\n            std::vector<label_type>& labels\n        )\n        {\n            const long num = 50;\n\n            sample_type m;\n\n            dlib::rand rnd;\n\n\n            // make some samples near the origin\n            double radius = 0.5;\n            for (long i = 0; i < num+10; ++i)\n            {\n                double sign = 1;\n                if (rnd.get_random_double() < 0.5)\n                    sign = -1;\n                m(0) = 2*radius*rnd.get_random_double()-radius;\n                m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n                // add this sample to our set of samples we will run k-means \n                samples.push_back(m);\n                labels.push_back(1);\n            }\n\n            // make some samples in a circle around the origin but far away\n            radius = 10.0;\n            for (long i = 0; i < num+20; ++i)\n            {\n                double sign = 1;\n                if (rnd.get_random_double() < 0.5)\n                    sign = -1;\n                m(0) = 2*radius*rnd.get_random_double()-radius;\n                m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n                // add this sample to our set of samples we will run k-means \n                samples.push_back(m);\n                labels.push_back(2);\n            }\n\n            // make some samples in a circle around the point (25,25) \n            radius = 4.0;\n            for (long i = 0; i < num+30; ++i)\n            {\n                double sign = 1;\n                if (rnd.get_random_double() < 0.5)\n                    sign = -1;\n                m(0) = 2*radius*rnd.get_random_double()-radius;\n                m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n                // translate this point away from the origin\n                m(0) += 25;\n                m(1) += 25;\n\n                // add this sample to our set of samples we will run k-means \n                samples.push_back(m);\n                labels.push_back(3);\n            }\n        }\n\n        template <typename label_type, typename scalar_type>\n        void run_test (\n        )\n        {\n            print_spinner();\n            typedef matrix<scalar_type,2,1> sample_type;\n\n            std::vector<sample_type> samples, norm_samples;\n            std::vector<label_type> labels;\n\n            // First, get our labeled set of training data\n            generate_data(samples, labels);\n\n            typedef one_vs_one_trainer<any_trainer<sample_type,scalar_type>,label_type > ovo_trainer;\n\n\n            ovo_trainer trainer;\n\n            typedef histogram_intersection_kernel<sample_type> hist_kernel;\n            typedef radial_basis_kernel<sample_type> rbf_kernel;\n\n            // make the binary trainers and set some parameters\n            krr_trainer<rbf_kernel> rbf_trainer;\n            svm_nu_trainer<hist_kernel> hist_trainer;\n            rbf_trainer.set_kernel(rbf_kernel(0.1));\n\n\n            trainer.set_trainer(rbf_trainer);\n            trainer.set_trainer(hist_trainer, 1, 2);\n\n            randomize_samples(samples, labels);\n            matrix<double> res = cross_validate_multiclass_trainer(trainer, samples, labels, 2);\n\n            print_spinner();\n\n            matrix<scalar_type> ans(3,3);\n            ans = 60,  0,  0, \n                  0, 70,  0, \n                  0,  0, 80;\n\n            DLIB_TEST_MSG(ans == res, \"res: \\n\" << res);\n\n            // test using a normalized_function with a one_vs_one_decision_function \n            {\n                trainer.set_trainer(hist_trainer, 1, 2);\n                vector_normalizer<sample_type> normalizer;\n                normalizer.train(samples);\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                    norm_samples.push_back(normalizer(samples[i]));\n                normalized_function<one_vs_one_decision_function<ovo_trainer> > ndf;\n                ndf.function = trainer.train(norm_samples, labels);\n                ndf.normalizer = normalizer;\n                DLIB_TEST(ndf(samples[0])  == labels[0]);\n                DLIB_TEST(ndf(samples[40])  == labels[40]);\n                DLIB_TEST(ndf(samples[90])  == labels[90]);\n                DLIB_TEST(ndf(samples[120])  == labels[120]);\n                trainer.set_trainer(hist_trainer, 1, 2);\n                print_spinner();\n            }\n\n\n\n\n            one_vs_one_decision_function<ovo_trainer> df = trainer.train(samples, labels);\n\n            DLIB_TEST(df.number_of_classes() == 3);\n\n            DLIB_TEST(df(samples[0])  == labels[0])\n            DLIB_TEST(df(samples[90])  == labels[90])\n\n\n            one_vs_one_decision_function<ovo_trainer, \n                decision_function<hist_kernel>,  // This is the output of the hist_trainer\n                decision_function<rbf_kernel>    // This is the output of the rbf_trainer\n            > df2, df3;\n\n\n            df2 = df;\n            ofstream fout(\"df.dat\", ios::binary);\n            serialize(df2, fout);\n            fout.close();\n\n            // load the function back in from disk and store it in df3.  \n            ifstream fin(\"df.dat\", ios::binary);\n            deserialize(df3, fin);\n\n\n            DLIB_TEST(df3(samples[0])  == labels[0])\n            DLIB_TEST(df3(samples[90])  == labels[90])\n            res = test_multiclass_decision_function(df3, samples, labels);\n\n            DLIB_TEST(res == ans);\n\n\n        }\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"run_test<double,double>()\";\n            run_test<double,double>();\n\n            dlog << LINFO << \"run_test<int,double>()\";\n            run_test<int,double>();\n\n            dlog << LINFO << \"run_test<double,float>()\";\n            run_test<double,float>();\n\n            dlog << LINFO << \"run_test<int,float>()\";\n            run_test<int,float>();\n        }\n    };\n\n    test_one_vs_one_trainer a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/opt_qp_solver.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/optimization.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include <dlib/rand.h>\n#include <dlib/string.h>\n#include <dlib/statistics.h>\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.opt_qp_solver\");\n\n// ----------------------------------------------------------------------------------------\n\n    class test_smo\n    {\n    public:\n        double penalty;\n        double C;\n\n        double operator() (\n            const matrix<double,0,1>& alpha\n        ) const\n        {\n\n            double obj =  0.5* trans(alpha)*Q*alpha - trans(alpha)*b;\n            double c1 = pow(sum(alpha)-C,2);\n            double c2 = sum(pow(pointwise_multiply(alpha, alpha<0), 2));\n\n            obj += penalty*(c1 + c2);\n\n            return obj;\n        }\n\n        matrix<double> Q, b;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class test_smo_derivative\n    {\n    public:\n        double penalty;\n        double C;\n\n        matrix<double,0,1> operator() (\n            const matrix<double,0,1>& alpha\n        ) const\n        {\n\n            matrix<double,0,1> obj =  Q*alpha - b;\n            matrix<double,0,1> c1 = uniform_matrix<double>(alpha.size(),1, 2*(sum(alpha)-C));\n            matrix<double,0,1> c2 = 2*pointwise_multiply(alpha, alpha<0);\n            \n            return obj + penalty*(c1 + c2);\n        }\n\n        matrix<double> Q, b;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    double compute_objective_value (\n        const matrix<double,0,1>& w,\n        const matrix<double>& A,\n        const matrix<double,0,1>& b,\n        const double C\n    )\n    {\n        return 0.5*dot(w,w) + C*max(trans(A)*w + b);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_qp4_test1()\n    {\n        matrix<double> A(3,2);\n        A = 1,2,\n        -3,1,\n        6,7;\n\n        matrix<double,0,1> b(2);\n        b = 1,\n        2;\n\n        const double C = 2;\n\n        matrix<double,0,1> alpha(2), true_alpha(2);\n        alpha = C/2, C/2;\n\n        solve_qp4_using_smo(A, tmp(trans(A)*A), b, alpha, 1e-9, 800);\n        matrix<double,0,1> w = lowerbound(-A*alpha, 0);\n\n        dlog << LINFO << \"*******************************************************\";\n\n        dlog << LINFO << \"w:     \" << trans(w);\n\n        dlog << LINFO << \"computed obj:      \"<< compute_objective_value(w,A,b,C);\n        w = 0;\n        dlog << LINFO << \"with true w obj:   \"<< compute_objective_value(w,A,b,C);\n\n        dlog << LINFO << \"alpha:      \" << trans(alpha);\n        true_alpha = 0, 2;\n        dlog << LINFO << \"true alpha: \"<< trans(true_alpha);\n\n        dlog << LINFO << \"alpha error: \"<< max(abs(alpha-true_alpha));\n        DLIB_TEST(max(abs(alpha-true_alpha)) < 1e-9);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_qp4_test2()\n    {\n        matrix<double> A(3,2);\n        A = 1,2,\n        3,-1,\n        6,7;\n\n        matrix<double,0,1> b(2);\n        b = 1,\n        2;\n\n        const double C = 2;\n\n        matrix<double,0,1> alpha(2), true_alpha(2);\n        alpha = C/2, C/2;\n\n        solve_qp4_using_smo(A, tmp(trans(A)*A), b, alpha, 1e-9, 800);\n        matrix<double,0,1> w = lowerbound(-A*alpha, 0);\n\n        dlog << LINFO << \"*******************************************************\";\n\n        dlog << LINFO << \"w:     \" << trans(w);\n\n        dlog << LINFO << \"computed obj:      \"<< compute_objective_value(w,A,b,C);\n        w = 0, 0.25, 0;\n        dlog << LINFO << \"with true w obj:   \"<< compute_objective_value(w,A,b,C);\n\n        dlog << LINFO << \"alpha:      \" << trans(alpha);\n        true_alpha = 0.43750, 1.56250;\n        dlog << LINFO << \"true alpha: \"<< trans(true_alpha);\n\n        dlog << LINFO << \"alpha error: \"<< max(abs(alpha-true_alpha));\n        DLIB_TEST(max(abs(alpha-true_alpha)) < 1e-9);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_qp4_test3()\n    {\n        matrix<double> A(3,2);\n        A = 1,2,\n        -3,-1,\n        6,7;\n\n        matrix<double,0,1> b(2);\n        b = 1,\n        2;\n\n        const double C = 2;\n\n        matrix<double,0,1> alpha(2), true_alpha(2);\n        alpha = C/2, C/2;\n\n        solve_qp4_using_smo(A, tmp(trans(A)*A), b, alpha, 1e-9, 800);\n        matrix<double,0,1> w = lowerbound(-A*alpha, 0);\n\n        dlog << LINFO << \"*******************************************************\";\n\n        dlog << LINFO << \"w:     \" << trans(w);\n\n        dlog << LINFO << \"computed obj:      \"<< compute_objective_value(w,A,b,C);\n        w = 0, 2, 0;\n        dlog << LINFO << \"with true w obj:   \"<< compute_objective_value(w,A,b,C);\n\n        dlog << LINFO << \"alpha:      \" << trans(alpha);\n        true_alpha = 0, 2;\n        dlog << LINFO << \"true alpha: \"<< trans(true_alpha);\n\n        dlog << LINFO << \"alpha error: \"<< max(abs(alpha-true_alpha));\n        DLIB_TEST(max(abs(alpha-true_alpha)) < 1e-9);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_qp4_test5()\n    {\n        matrix<double> A(3,3);\n        A = 1,2,4,\n        3,1,6,\n        6,7,-2;\n\n        matrix<double,0,1> b(3);\n        b = 1,\n        2,\n        3;\n\n        const double C = 2;\n\n        matrix<double,0,1> alpha(3), true_alpha(3);\n        alpha = C/2, C/2, 0;\n\n        solve_qp4_using_smo(A, tmp(trans(A)*A), b, alpha, 1e-9, 800);\n        matrix<double,0,1> w = lowerbound(-A*alpha, 0);\n\n\n        dlog << LINFO << \"*******************************************************\";\n\n        dlog << LINFO << \"w:     \" << trans(w);\n\n        dlog << LINFO << \"computed obj:      \"<< compute_objective_value(w,A,b,C);\n        w = 0, 0, 0.11111111111111111111;\n        dlog << LINFO << \"with true w obj:   \"<< compute_objective_value(w,A,b,C);\n\n        dlog << LINFO << \"alpha:      \" << trans(alpha);\n        true_alpha = 0, 0.432098765432099, 1.567901234567901;\n        dlog << LINFO << \"true alpha: \"<< trans(true_alpha);\n\n        dlog << LINFO << \"alpha error: \"<< max(abs(alpha-true_alpha));\n        DLIB_TEST(max(abs(alpha-true_alpha)) < 1e-9);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_qp4_test4()\n    {\n        matrix<double> A(3,2);\n        A = 1,2,\n        3,1,\n        6,7;\n\n        matrix<double,0,1> b(2);\n        b = 1,\n        2;\n\n        const double C = 2;\n\n        matrix<double,0,1> alpha(2), true_alpha(2);\n        alpha = C/2, C/2;\n\n        solve_qp4_using_smo(A, tmp(trans(A)*A), b, alpha, 1e-9, 800);\n        matrix<double,0,1> w = lowerbound(-A*alpha, 0);\n\n        dlog << LINFO << \"*******************************************************\";\n\n        dlog << LINFO << \"w:     \" << trans(w);\n\n        dlog << LINFO << \"computed obj:      \"<< compute_objective_value(w,A,b,C);\n        w = 0, 0, 0;\n        dlog << LINFO << \"with true w obj:   \"<< compute_objective_value(w,A,b,C);\n\n        dlog << LINFO << \"alpha:      \" << trans(alpha);\n        true_alpha = 0, 2;\n        dlog << LINFO << \"true alpha: \"<< trans(true_alpha);\n\n        dlog << LINFO << \"alpha error: \"<< max(abs(alpha-true_alpha));\n        DLIB_TEST(max(abs(alpha-true_alpha)) < 1e-9);\n    }\n\n    void test_qp4_test6()\n    {\n        matrix<double> A(3,3);\n        A = 1,2,4,\n        3,1,6,\n        6,7,-2;\n\n        matrix<double,0,1> b(3);\n        b = -1,\n        -2,\n        -3;\n\n        const double C = 2;\n\n        matrix<double,0,1> alpha(3), true_alpha(3);\n        alpha = C/2, C/2, 0;\n\n        solve_qp4_using_smo(A, tmp(trans(A)*A), b, alpha, 1e-9, 800);\n        matrix<double,0,1> w = lowerbound(-A*alpha, 0);\n\n        dlog << LINFO << \"*******************************************************\";\n\n        dlog << LINFO << \"w:     \" << trans(w);\n\n        dlog << LINFO << \"computed obj:      \"<< compute_objective_value(w,A,b,C);\n        w = 0, 0, 0;\n        dlog << LINFO << \"with true w obj:   \"<< compute_objective_value(w,A,b,C);\n\n        dlog << LINFO << \"alpha:      \" << trans(alpha);\n        true_alpha = 2, 0, 0;\n        dlog << LINFO << \"true alpha: \"<< trans(true_alpha);\n\n        dlog << LINFO << \"alpha error: \"<< max(abs(alpha-true_alpha));\n        DLIB_TEST(max(abs(alpha-true_alpha)) < 1e-9);\n    }\n\n    void test_qp4_test7()\n    {\n        matrix<double> A(3,3);\n        A = -1,2,4,\n        -3,1,6,\n        -6,7,-2;\n\n        matrix<double,0,1> b(3);\n        b = -1,\n        -2,\n        3;\n\n        matrix<double> Q(3,3);\n        Q = 4,-5,6,\n        1,-4,2,\n        -9,-4,5;\n        Q = Q*trans(Q);\n\n        const double C = 2;\n\n        matrix<double,0,1> alpha(3), true_alpha(3);\n        alpha = C/2, C/2, 0;\n\n        solve_qp4_using_smo(A, Q, b, alpha, 1e-9, 800);\n\n        dlog << LINFO << \"*******************************************************\";\n\n        dlog << LINFO << \"alpha:      \" << trans(alpha);\n        true_alpha = 0, 2, 0;\n        dlog << LINFO << \"true alpha: \"<< trans(true_alpha);\n\n        dlog << LINFO << \"alpha error: \"<< max(abs(alpha-true_alpha));\n        DLIB_TEST(max(abs(alpha-true_alpha)) < 1e-9);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_solve_qp4_using_smo()\n    {\n        test_qp4_test1();\n        test_qp4_test2();\n        test_qp4_test3();\n        test_qp4_test4();\n        test_qp4_test5();\n        test_qp4_test6();\n        test_qp4_test7();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class opt_qp_solver_tester : public tester\n    {\n        /*\n            The idea here is just to solve the same problem with two different\n            methods and check that they basically agree.  The SMO solver should be\n            very accurate but for this problem the BFGS solver is relatively\n            inaccurate.  So this test is really just a sanity check on the SMO\n            solver.\n        */\n    public:\n        opt_qp_solver_tester (\n        ) :\n            tester (\"test_opt_qp_solver\",\n                    \"Runs tests on the solve_qp_using_smo component.\")\n        {\n            thetime = time(0);\n        }\n\n        time_t thetime;\n        dlib::rand rnd;\n\n        void perform_test(\n        )\n        {\n            print_spinner();\n            test_solve_qp4_using_smo();\n            print_spinner();\n\n            ++thetime;\n            //dlog << LINFO << \"time seed: \" << thetime;\n            //rnd.set_seed(cast_to_string(thetime));\n\n            running_stats<double> rs;\n\n            for (int i = 0; i < 40; ++i)\n            {\n                for (long dims = 1; dims < 6; ++dims)\n                {\n                    rs.add(do_the_test(dims, 1.0));\n                }\n            }\n\n            for (int i = 0; i < 40; ++i)\n            {\n                for (long dims = 1; dims < 6; ++dims)\n                {\n                    rs.add(do_the_test(dims, 5.0));\n                }\n            }\n\n            dlog << LINFO << \"disagreement mean: \" << rs.mean();\n            dlog << LINFO << \"disagreement stddev: \" << rs.stddev();\n            DLIB_TEST_MSG(rs.mean() < 0.001, rs.mean());\n            DLIB_TEST_MSG(rs.stddev() < 0.001, rs.stddev());\n        }\n\n        double do_the_test (\n            const long dims,\n            double C\n        )\n        {\n            print_spinner();\n            dlog << LINFO << \"dims: \" << dims;\n            dlog << LINFO << \"testing with C == \" << C;\n            test_smo test;\n\n            test.Q = randm(dims, dims, rnd);\n            test.Q = trans(test.Q)*test.Q;\n            test.b = randm(dims,1, rnd);\n            test.C = C;\n\n            test_smo_derivative der;\n            der.Q = test.Q;\n            der.b = test.b;\n            der.C = test.C;\n\n\n            matrix<double,0,1> x(dims), alpha(dims);\n\n\n            test.penalty = 20000;\n            der.penalty = test.penalty;\n\n            alpha = C/alpha.size();\n            x = alpha;\n\n            const unsigned long max_iter = 400000;\n            solve_qp_using_smo(test.Q, test.b, alpha, 0.00000001, max_iter);\n            DLIB_TEST_MSG(abs(sum(alpha) - C) < 1e-13, abs(sum(alpha) - C) );\n            dlog << LTRACE << \"alpha: \" << alpha;\n            dlog << LINFO << \"SMO: true objective: \"<< 0.5*trans(alpha)*test.Q*alpha - trans(alpha)*test.b;\n\n\n            double obj = find_min(bfgs_search_strategy(),\n                                  objective_delta_stop_strategy(1e-13, 5000),\n                                  test,\n                                  der,\n                                  x,\n                                  -10);\n\n\n            dlog << LINFO << \"BFGS: objective: \" << obj;\n            dlog << LINFO << \"BFGS: true objective: \"<< 0.5*trans(x)*test.Q*x - trans(x)*test.b;\n            dlog << LINFO << \"sum(x): \" << sum(x);\n            dlog << LINFO << x;\n\n            double disagreement = max(abs(x-alpha));\n            dlog << LINFO << \"Disagreement: \" << disagreement;\n            return disagreement;\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/optimization.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include \"optimization_test_functions.h\"\n#include <dlib/optimization.h>\n#include <dlib/statistics.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.optimization\");\n\n// ----------------------------------------------------------------------------------------\n\n    bool approx_equal (\n        double a,\n        double b\n    )\n    {\n        return std::abs(a - b) < 100*std::numeric_limits<double>::epsilon();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long total_count = 0;\n\n\n    template <typename T>\n    double apq ( const T& x)\n    {\n        DLIB_ASSERT(x.nr() > 1 && x.nc() == 1,\"\");\n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        double temp = 0;\n        for (long r = 0; r < x.nr(); ++r)\n        {\n            temp += (r+1)*x(r)*x(r);\n        }\n\n        ++total_count;\n\n        return temp + 1/100.0*(x(0) + x(x.nr()-1))*(x(0) + x(x.nr()-1));\n    }\n\n    template <typename T>\n    T der_apq ( const T& x)\n    {\n        DLIB_ASSERT(x.nr() > 1 && x.nc() == 1,\"\");\n        COMPILE_TIME_ASSERT(is_matrix<T>::value);\n        T temp(x.nr());\n        for (long r = 0; r < x.nr(); ++r)\n        {\n            temp(r) = 2*(r+1)*x(r) ;\n        }\n\n        temp(0) += 1/50.0*(x(0) + x(x.nr()-1));\n        temp(x.nr()-1) += 1/50.0*(x(0) + x(x.nr()-1));\n\n        ++total_count;\n\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // Rosenbrock's function.  minimum at (1,1)\n    double rosen ( const matrix<double,2,1>& x)\n    {\n        ++total_count;\n        return 100*pow(x(1) - x(0)*x(0),2) + pow(1 - x(0),2);\n    }\n\n    matrix<double,2,1> der_rosen ( const matrix<double,2,1>& x)\n    {\n        ++total_count;\n        matrix<double,2,1> res;\n        res(0) = -400*x(0)*(x(1)-x(0)*x(0)) - 2*(1-x(0));\n        res(1) = 200*(x(1)-x(0)*x(0));\n        return res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // negative of Rosenbrock's function.  minimum at (1,1)\n    double neg_rosen ( const matrix<double,2,1>& x)\n    {\n        ++total_count;\n        return -(100*pow(x(1) - x(0)*x(0),2) + pow(1 - x(0),2));\n    }\n\n    matrix<double,2,1> der_neg_rosen ( const matrix<double,2,1>& x)\n    {\n        ++total_count;\n        matrix<double,2,1> res;\n        res(0) = -400*x(0)*(x(1)-x(0)*x(0)) - 2*(1-x(0));\n        res(1) = 200*(x(1)-x(0)*x(0));\n        return -res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double simple ( const matrix<double,2,1>& x)\n    {\n        ++total_count;\n        return 10*x(0)*x(0) + x(1)*x(1);\n    }\n\n    matrix<double,2,1> der_simple ( const matrix<double,2,1>& x)\n    {\n        ++total_count;\n        matrix<double,2,1> res;\n        res(0) = 20*x(0);\n        res(1) = 2*x(1);\n        return res;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    double powell ( const matrix<double,4,1>& x)\n    {\n        ++total_count;\n        return pow(x(0) + 10*x(1),2) +\n            pow(std::sqrt(5.0)*(x(2) - x(3)),2) + \n            pow((x(1) - 2*x(2))*(x(1) - 2*x(2)),2) +\n            pow(std::sqrt(10.0)*(x(0) - x(3))*(x(0) - x(3)),2);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n// a simple function with a minimum at zero\n    double single_variable_function ( double x)\n    {\n        ++total_count;\n        return 3*x*x + 5;\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    void test_apq (\n        const matrix<double,0,1> p\n    )\n    {\n        typedef matrix<double,0,1> T;\n        const double eps = 1e-12;\n        const double minf = -10;\n        matrix<double,0,1> x(p.nr()), opt(p.nr());\n        set_all_elements(opt, 0);\n        double val = 0;\n\n        if (p.size() < 20)\n            dlog << LINFO << \"testing with apq and the start point: \" << trans(p);\n        else\n            dlog << LINFO << \"testing with apq and a big vector with \" << p.size() << \" components.\";\n\n        // don't use bfgs on really large vectors\n        if (p.size() < 20)\n        {\n            total_count = 0;\n            x = p;\n            val = find_min(bfgs_search_strategy(), \n                     objective_delta_stop_strategy(eps),\n                     wrap_function(apq<T>), wrap_function(der_apq<T>), x, minf);\n            DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n            DLIB_TEST(approx_equal(val , apq(x)));\n            dlog << LINFO << \"find_min() bgfs: got apq in \" << total_count;\n\n            total_count = 0;\n            x = p;\n            find_min(bfgs_search_strategy(), \n                     gradient_norm_stop_strategy(),\n                     wrap_function(apq<T>), wrap_function(der_apq<T>), x, minf);\n            DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n            dlog << LINFO << \"find_min() bgfs(gn): got apq in \" << total_count;\n        }\n\n\n        if (p.size() < 100)\n        {\n            total_count = 0;\n            x = p;\n            val=find_min_bobyqa(wrap_function(apq<T>), x, 2*x.size()+1,\n                            uniform_matrix<double>(x.size(),1,-1e100),\n                            uniform_matrix<double>(x.size(),1,1e100),\n                            (max(abs(x))+1)/10,\n                            1e-6,\n                            10000);\n            DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n            DLIB_TEST(approx_equal(val , apq(x)));\n            dlog << LINFO << \"find_min_bobyqa(): got apq in \" << total_count;\n        }\n\n        total_count = 0;\n        x = p;\n        val=find_min(lbfgs_search_strategy(10), \n                 objective_delta_stop_strategy(eps),\n                 wrap_function(apq<T>), wrap_function(der_apq<T>), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , apq(x)));\n        dlog << LINFO << \"find_min() lbgfs-10: got apq in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(lbfgs_search_strategy(1), \n                 objective_delta_stop_strategy(eps),\n                 wrap_function(apq<T>), wrap_function(der_apq<T>), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , apq(x)));\n        dlog << LINFO << \"find_min() lbgfs-1: got apq in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(cg_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 wrap_function(apq<T>), wrap_function(der_apq<T>), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , apq(x)));\n        dlog << LINFO << \"find_min() cg: got apq in \" << total_count;\n\n\n        // don't do approximate derivative tests if the input point is really long\n        if (p.size() < 20)\n        {\n            total_count = 0;\n            x = p;\n            val=find_min(bfgs_search_strategy(),\n                     objective_delta_stop_strategy(eps),\n                     wrap_function(apq<T>), derivative(wrap_function(apq<T>)), x, minf);\n            DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n            DLIB_TEST(approx_equal(val , apq(x)));\n            dlog << LINFO << \"find_min() bfgs: got apq/noder in \" << total_count;\n\n\n            total_count = 0;\n            x = p;\n            val=find_min(cg_search_strategy(),\n                     objective_delta_stop_strategy(eps),\n                     wrap_function(apq<T>), derivative(wrap_function(apq<T>)), x, minf);\n            DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n            DLIB_TEST(approx_equal(val , apq(x)));\n            dlog << LINFO << \"find_min() cg: got apq/noder in \" << total_count;\n\n\n            total_count = 0;\n            x = p;\n            val=find_min_using_approximate_derivatives(bfgs_search_strategy(),\n                                                   objective_delta_stop_strategy(eps), \n                                                   wrap_function(apq<T>), x, minf);\n            DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n            DLIB_TEST(approx_equal(val , apq(x)));\n            dlog << LINFO << \"find_min() bfgs: got apq/noder2 in \" << total_count;\n\n\n            total_count = 0;\n            x = p;\n            val=find_min_using_approximate_derivatives(lbfgs_search_strategy(10),\n                                                   objective_delta_stop_strategy(eps), \n                                                   wrap_function(apq<T>), x, minf);\n            DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n            dlog << LINFO << \"find_min() lbfgs-10: got apq/noder2 in \" << total_count;\n\n\n            total_count = 0;\n            x = p;\n            val=find_min_using_approximate_derivatives(cg_search_strategy(),\n                                                   objective_delta_stop_strategy(eps),\n                                                   wrap_function(apq<T>), x, minf);\n            DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n            DLIB_TEST(approx_equal(val , apq(x)));\n            dlog << LINFO << \"find_min() cg: got apq/noder2 in \" << total_count;\n        }\n    }\n\n    void test_powell (\n        const matrix<double,4,1> p\n    )\n    {\n        const double eps = 1e-15;\n        const double minf = -1;\n        matrix<double,4,1> x, opt;\n        opt(0) = 0;\n        opt(1) = 0;\n        opt(2) = 0;\n        opt(3) = 0;\n\n        double val = 0;\n\n        dlog << LINFO << \"testing with powell and the start point: \" << trans(p);\n\n        /*\n        total_count = 0;\n        x = p;\n        val=find_min(bfgs_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 powell, derivative(powell,1e-8), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-2),opt-x);\n        DLIB_TEST(approx_equal(val , powell(x)));\n        dlog << LINFO << \"find_min() bfgs: got powell/noder in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(cg_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 powell, derivative(powell,1e-9), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-2),opt-x);\n        DLIB_TEST(approx_equal(val , powell(x)));\n        dlog << LINFO << \"find_min() cg: got powell/noder in \" << total_count;\n        */\n\n        total_count = 0;\n        x = p;\n        val=find_min_using_approximate_derivatives(bfgs_search_strategy(),\n                                               objective_delta_stop_strategy(eps),\n                                               powell, x, minf, 1e-10);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-1),opt-x);\n        DLIB_TEST(approx_equal(val , powell(x)));\n        dlog << LINFO << \"find_min() bfgs: got powell/noder2 in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min_using_approximate_derivatives(lbfgs_search_strategy(4),\n                                               objective_delta_stop_strategy(eps),\n                                               powell, x, minf, 1e-10);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-1),opt-x);\n        DLIB_TEST(approx_equal(val , powell(x)));\n        dlog << LINFO << \"find_min() lbfgs-4: got powell/noder2 in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min_using_approximate_derivatives(lbfgs_search_strategy(4),\n                                               gradient_norm_stop_strategy(),\n                                               powell, x, minf, 1e-10);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-1),opt-x);\n        DLIB_TEST(approx_equal(val , powell(x)));\n        dlog << LINFO << \"find_min() lbfgs-4(gn): got powell/noder2 in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min_using_approximate_derivatives(cg_search_strategy(),\n                                               objective_delta_stop_strategy(eps),\n                                               powell, x, minf, 1e-10);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-1),opt-x);\n        DLIB_TEST(approx_equal(val , powell(x)));\n        dlog << LINFO << \"find_min() cg: got powell/noder2 in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min_bobyqa(powell, x, 2*x.size()+1,\n                        uniform_matrix<double>(x.size(),1,-1e100),\n                        uniform_matrix<double>(x.size(),1,1e100),\n                        (max(abs(x))+1)/10,\n                        1e-7,\n                        10000);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-3),opt-x);\n        DLIB_TEST(approx_equal(val , powell(x)));\n        dlog << LINFO << \"find_min_bobyqa(): got powell in \" << total_count;\n\n    }\n\n\n\n    void test_simple (\n        const matrix<double,2,1> p\n    )\n    {\n        const double eps = 1e-12;\n        const double minf = -10000;\n        matrix<double,2,1> x, opt;\n        opt(0) = 0;\n        opt(1) = 0;\n        double val = 0;\n\n        dlog << LINFO << \"testing with simple and the start point: \" << trans(p);\n\n        total_count = 0;\n        x = p;\n        val=find_min(bfgs_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 simple, der_simple, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() bfgs: got simple in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(bfgs_search_strategy(),\n                 gradient_norm_stop_strategy(),\n                 simple, der_simple, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() bfgs(gn): got simple in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(lbfgs_search_strategy(3),\n                 objective_delta_stop_strategy(eps),\n                 simple, der_simple, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() lbfgs-3: got simple in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(cg_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 simple, der_simple, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() cg: got simple in \" << total_count;\n\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(bfgs_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 simple, derivative(simple), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() bfgs: got simple/noder in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(lbfgs_search_strategy(8),\n                 objective_delta_stop_strategy(eps),\n                 simple, derivative(simple), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() lbfgs-8: got simple/noder in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(cg_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 simple, derivative(simple), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() cg: got simple/noder in \" << total_count;\n\n\n\n        total_count = 0;\n        x = p;\n        val=find_min_using_approximate_derivatives(bfgs_search_strategy(),\n                                               objective_delta_stop_strategy(eps),\n                                               simple, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() bfgs: got simple/noder2 in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min_using_approximate_derivatives(lbfgs_search_strategy(6),\n                                               objective_delta_stop_strategy(eps),\n                                               simple, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() lbfgs-6: got simple/noder2 in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min_using_approximate_derivatives(cg_search_strategy(),\n                                               objective_delta_stop_strategy(eps),\n                                               simple, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min() cg: got simple/noder2 in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min_bobyqa(simple, x, 2*x.size()+1,\n                        uniform_matrix<double>(x.size(),1,-1e100),\n                        uniform_matrix<double>(x.size(),1,1e100),\n                        (max(abs(x))+1)/10,\n                        1e-6,\n                        10000);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , simple(x)));\n        dlog << LINFO << \"find_min_bobyqa(): got simple in \" << total_count;\n\n    }\n\n\n    void test_rosen (\n        const matrix<double,2,1> p\n    )\n    {\n        const double eps = 1e-15;\n        const double minf = -10;\n        matrix<double,2,1> x, opt;\n        opt(0) = 1;\n        opt(1) = 1;\n\n        double val = 0;\n\n        dlog << LINFO << \"testing with rosen and the start point: \" << trans(p);\n\n        total_count = 0;\n        x = p;\n        val=find_min(bfgs_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 rosen, der_rosen, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-7),opt-x);\n        DLIB_TEST(approx_equal(val , rosen(x)));\n        dlog << LINFO << \"find_min() bfgs: got rosen in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(bfgs_search_strategy(),\n                 gradient_norm_stop_strategy(),\n                 rosen, der_rosen, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-7),opt-x);\n        DLIB_TEST(approx_equal(val , rosen(x)));\n        dlog << LINFO << \"find_min() bfgs(gn): got rosen in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(lbfgs_search_strategy(20),\n                 objective_delta_stop_strategy(eps),\n                 rosen, der_rosen, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-7),opt-x);\n        DLIB_TEST(approx_equal(val , rosen(x)));\n        dlog << LINFO << \"find_min() lbfgs-20: got rosen in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(cg_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 rosen, der_rosen, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-7),opt-x);\n        DLIB_TEST(approx_equal(val , rosen(x)));\n        dlog << LINFO << \"find_min() cg: got rosen in \" << total_count;\n\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(bfgs_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 rosen, derivative(rosen,1e-5), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-4),opt-x);\n        DLIB_TEST(approx_equal(val , rosen(x)));\n        dlog << LINFO << \"find_min() bfgs: got rosen/noder in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(lbfgs_search_strategy(5),\n                 objective_delta_stop_strategy(eps),\n                 rosen, derivative(rosen,1e-5), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-4),opt-x);\n        DLIB_TEST(approx_equal(val , rosen(x)));\n        dlog << LINFO << \"find_min() lbfgs-5: got rosen/noder in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min(cg_search_strategy(),\n                 objective_delta_stop_strategy(eps),\n                 rosen, derivative(rosen,1e-5), x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-4),opt-x);\n        DLIB_TEST(approx_equal(val , rosen(x)));\n        dlog << LINFO << \"find_min() cg: got rosen/noder in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_min_using_approximate_derivatives(cg_search_strategy(),\n                                               objective_delta_stop_strategy(eps),\n                                               rosen, x, minf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-4),opt-x);\n        DLIB_TEST(approx_equal(val , rosen(x)));\n        dlog << LINFO << \"find_min() cg: got rosen/noder2 in \" << total_count;\n\n\n        if (max(abs(p)) < 1000)\n        {\n            total_count = 0;\n            x = p;\n            val=find_min_bobyqa(rosen, x, 2*x.size()+1,\n                            uniform_matrix<double>(x.size(),1,-1e100),\n                            uniform_matrix<double>(x.size(),1,1e100),\n                            (max(abs(x))+1)/10,\n                            1e-6,\n                            10000);\n            DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n            DLIB_TEST(approx_equal(val , rosen(x)));\n            dlog << LINFO << \"find_min_bobyqa(): got rosen in \" << total_count;\n        }\n    }\n\n\n    void test_neg_rosen (\n        const matrix<double,2,1> p\n    )\n    {\n        const double eps = 1e-15;\n        const double maxf = 10;\n        matrix<double,2,1> x, opt;\n        opt(0) = 1;\n        opt(1) = 1;\n\n        double val = 0;\n\n        dlog << LINFO << \"testing with neg_rosen and the start point: \" << trans(p);\n\n        total_count = 0;\n        x = p;\n        val=find_max(\n            bfgs_search_strategy(), \n            objective_delta_stop_strategy(eps), neg_rosen, der_neg_rosen, x, maxf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-7),opt-x);\n        DLIB_TEST(approx_equal(val , neg_rosen(x)));\n        dlog << LINFO << \"find_max() bfgs: got neg_rosen in \" << total_count;\n\n        total_count = 0;\n        x = p;\n        val=find_max(\n            lbfgs_search_strategy(5), \n            objective_delta_stop_strategy(eps), neg_rosen, der_neg_rosen, x, maxf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-7),opt-x);\n        DLIB_TEST(approx_equal(val , neg_rosen(x)));\n        dlog << LINFO << \"find_max() lbfgs-5: got neg_rosen in \" << total_count;\n\n        total_count = 0;\n        x = p;\n        val=find_max(\n            lbfgs_search_strategy(5), \n            objective_delta_stop_strategy(eps), neg_rosen, derivative(neg_rosen), x, maxf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-7),opt-x);\n        DLIB_TEST(approx_equal(val , neg_rosen(x)));\n        dlog << LINFO << \"find_max() lbfgs-5: got neg_rosen/noder in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_max_using_approximate_derivatives(\n            cg_search_strategy(), \n            objective_delta_stop_strategy(eps), neg_rosen, x, maxf);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-7),opt-x);\n        DLIB_TEST(approx_equal(val , neg_rosen(x)));\n        dlog << LINFO << \"find_max() cg: got neg_rosen/noder2 in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        val=find_max_bobyqa(neg_rosen, x, 2*x.size()+1,\n                        uniform_matrix<double>(x.size(),1,-1e100),\n                        uniform_matrix<double>(x.size(),1,1e100),\n                        (max(abs(x))+1)/10,\n                        1e-6,\n                        10000);\n        DLIB_TEST_MSG(dlib::equal(x,opt, 1e-5),opt-x);\n        DLIB_TEST(approx_equal(val , neg_rosen(x)));\n        dlog << LINFO << \"find_max_bobyqa(): got neg_rosen in \" << total_count;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_single_variable_function (\n        const double p\n    )\n    {\n        const double eps = 1e-7;\n\n\n        dlog << LINFO << \"testing with single_variable_function and the start point: \" << p;\n        double out, x;\n\n        total_count = 0;\n        x = p;\n        out = find_min_single_variable(single_variable_function, x, -1e100, 1e100, eps, 1000);\n        DLIB_TEST_MSG(std::abs(out-5) < 1e-6, out-5);\n        DLIB_TEST_MSG(std::abs(x) < 1e-6, x);\n        dlog << LINFO << \"find_min_single_variable(): got single_variable_function in \" << total_count;\n\n\n        total_count = 0;\n        x = p;\n        out = -find_max_single_variable(negate_function(single_variable_function), x, -1e100, 1e100, eps, 1000);\n        DLIB_TEST_MSG(std::abs(out-5) < 1e-6, out-5);\n        DLIB_TEST_MSG(std::abs(x) < 1e-6, x);\n        dlog << LINFO << \"find_max_single_variable(): got single_variable_function in \" << total_count;\n\n\n        if (p > 0)\n        {\n            total_count = 0;\n            x = p;\n            out = find_min_single_variable(single_variable_function, x, -1e-4, 1e100, eps, 1000);\n            DLIB_TEST_MSG(std::abs(out-5) < 1e-6, out-5);\n            DLIB_TEST_MSG(std::abs(x) < 1e-6, x);\n            dlog << LINFO << \"find_min_single_variable(): got single_variable_function in \" << total_count;\n\n\n            if (p > 3)\n            {\n                total_count = 0;\n                x = p;\n                out = -find_max_single_variable(negate_function(single_variable_function), x, 3, 1e100, eps, 1000);\n                DLIB_TEST_MSG(std::abs(out - (3*3*3+5)) < 1e-6, out-(3*3*3+5));\n                DLIB_TEST_MSG(std::abs(x-3) < 1e-6, x);\n                dlog << LINFO << \"find_max_single_variable(): got single_variable_function in \" << total_count;\n            }\n        }\n\n        if (p < 0)\n        {\n            total_count = 0;\n            x = p;\n            out = find_min_single_variable(single_variable_function, x, -1e100, 1e-4, eps, 1000);\n            DLIB_TEST_MSG(std::abs(out-5) < 1e-6, out-5);\n            DLIB_TEST_MSG(std::abs(x) < 1e-6, x);\n            dlog << LINFO << \"find_min_single_variable(): got single_variable_function in \" << total_count;\n\n            if (p < -3)\n            {\n                total_count = 0;\n                x = p;\n                out = find_min_single_variable(single_variable_function, x, -1e100, -3, eps, 1000);\n                DLIB_TEST_MSG(std::abs(out - (3*3*3+5)) < 1e-6, out-(3*3*3+5));\n                DLIB_TEST_MSG(std::abs(x+3) < 1e-6, x);\n                dlog << LINFO << \"find_min_single_variable(): got single_variable_function in \" << total_count;\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void optimization_test (\n    )\n    /*!\n        ensures\n            - runs tests on the optimization stuff compliance with the specs\n    !*/\n    {        \n        matrix<double,0,1> p;\n\n        print_spinner();\n\n        p.set_size(2);\n\n        // test with single_variable_function\n        test_single_variable_function(0);\n        test_single_variable_function(1);\n        test_single_variable_function(-10);\n        test_single_variable_function(-100);\n        test_single_variable_function(900.53);\n\n        // test with the rosen function\n        p(0) = 9;\n        p(1) = -4.9;\n        test_rosen(p);\n        test_neg_rosen(p);\n\n        p(0) = 0;\n        p(1) = 0;\n        test_rosen(p);\n\n        p(0) = 5323;\n        p(1) = 98248;\n        test_rosen(p);\n\n        // test with the simple function\n        p(0) = 1;\n        p(1) = 1;\n        test_simple(p);\n\n        p(0) = 0.5;\n        p(1) = -9;\n        test_simple(p);\n\n        p(0) = 645;\n        p(1) = 839485;\n        test_simple(p);\n\n        print_spinner();\n\n        // test with the apq function\n        p.set_size(5);\n\n        p(0) = 1;\n        p(1) = 1;\n        p(2) = 1;\n        p(3) = 1;\n        p(4) = 1;\n        test_apq(p);\n\n        p(0) = 1;\n        p(1) = 2;\n        p(2) = 3;\n        p(3) = 4;\n        p(4) = 5;\n        test_apq(p);\n\n        p(0) = 1;\n        p(1) = 2;\n        p(2) = -3;\n        p(3) = 4;\n        p(4) = 5;\n        test_apq(p);\n\n        print_spinner();\n\n        p(0) = 1;\n        p(1) = 2324;\n        p(2) = -3;\n        p(3) = 4;\n        p(4) = 534534;\n        test_apq(p);\n\n        p.set_size(10);\n        p(0) = 1;\n        p(1) = 2;\n        p(2) = -3;\n        p(3) = 4;\n        p(4) = 5;\n        p(5) = 1;\n        p(6) = 2;\n        p(7) = -3;\n        p(8) = 4;\n        p(9) = 5;\n        test_apq(p);\n\n        // test apq with a big vector\n        p.set_size(500);\n        dlib::rand rnd;\n        for (long i = 0; i < p.size(); ++i)\n        {\n            p(i) = rnd.get_random_double()*20 - 10; \n        }\n        test_apq(p);\n\n        print_spinner();\n\n        // test with the powell function\n        p.set_size(4);\n\n        p(0) = 3;\n        p(1) = -1;\n        p(2) = 0;\n        p(3) = 1;\n        test_powell(p);\n\n        {\n            matrix<double,2,1> m;\n            m(0) = -0.43;\n            m(1) = 0.919;\n            DLIB_TEST(dlib::equal(der_rosen(m) , derivative(rosen)(m),1e-5));\n\n            DLIB_TEST_MSG(std::abs(derivative(make_line_search_function(rosen,m,m))(0) - \n                                  make_line_search_function(derivative(rosen),m,m)(0)) < 1e-5,\"\");\n            DLIB_TEST_MSG(std::abs(derivative(make_line_search_function(rosen,m,m))(1) - \n                                  make_line_search_function(derivative(rosen),m,m)(1)) < 1e-5,\"\");\n\n            DLIB_TEST_MSG(std::abs(derivative(make_line_search_function(rosen,m,m))(0) - \n                                  make_line_search_function(der_rosen,m,m)(0)) < 1e-5,\"\");\n            DLIB_TEST_MSG(std::abs(derivative(make_line_search_function(rosen,m,m))(1) - \n                                  make_line_search_function(der_rosen,m,m)(1)) < 1e-5,\"\");\n        }\n        {\n            matrix<double,2,1> m;\n            m(0) = 1;\n            m(1) = 2;\n            DLIB_TEST(dlib::equal(der_rosen(m) , derivative(rosen)(m),1e-5));\n\n            DLIB_TEST_MSG(std::abs(derivative(make_line_search_function(rosen,m,m))(0) - \n                                  make_line_search_function(derivative(rosen),m,m)(0)) < 1e-5,\"\");\n            DLIB_TEST_MSG(std::abs(derivative(make_line_search_function(rosen,m,m))(1) - \n                                  make_line_search_function(derivative(rosen),m,m)(1)) < 1e-5,\"\");\n\n            DLIB_TEST_MSG(std::abs(derivative(make_line_search_function(rosen,m,m))(0) - \n                                  make_line_search_function(der_rosen,m,m)(0)) < 1e-5,\"\");\n            DLIB_TEST_MSG(std::abs(derivative(make_line_search_function(rosen,m,m))(1) - \n                                  make_line_search_function(der_rosen,m,m)(1)) < 1e-5,\"\");\n        }\n\n        {\n            matrix<double,2,1> m;\n            m = 1,2;\n            DLIB_TEST(std::abs(neg_rosen(m) - negate_function(rosen)(m) ) < 1e-16);\n        }\n\n    }\n\n    template <typename der_funct, typename T>\n    double unconstrained_gradient_magnitude (\n        const der_funct& grad,\n        const T& x,\n        const T& lower,\n        const T& upper\n    )\n    {\n        T g = grad(x);\n\n        double unorm = 0;\n\n        for (long i = 0; i < g.size(); ++i)\n        {\n            if (lower(i) < x(i) && x(i) < upper(i))\n                unorm += g(i)*g(i);\n            else if (x(i) == lower(i) && g(i) < 0)\n                unorm += g(i)*g(i);\n            else if (x(i) == upper(i) && g(i) > 0)\n                unorm += g(i)*g(i);\n        }\n\n        return unorm;\n    }\n\n    template <typename der_funct, typename T>\n    double unconstrained_gradient_magnitude_neg_funct (\n        const der_funct& grad,\n        const T& x,\n        const T& lower,\n        const T& upper\n    )\n    {\n        T g = grad(x);\n\n        double unorm = 0;\n\n        for (long i = 0; i < g.size(); ++i)\n        {\n            if (lower(i) < x(i) && x(i) < upper(i))\n                unorm += g(i)*g(i);\n            else if (x(i) == lower(i) && g(i) > 0)\n                unorm += g(i)*g(i);\n            else if (x(i) == upper(i) && g(i) < 0)\n                unorm += g(i)*g(i);\n        }\n\n        return unorm;\n    }\n\n    template <typename search_strategy_type>\n    double test_bound_solver_neg_rosen (dlib::rand& rnd, search_strategy_type search_strategy)\n    {\n        using namespace dlib::test_functions;\n        print_spinner();\n        matrix<double,2,1> starting_point, lower, upper, x;\n\n\n        // pick random bounds\n        lower = rnd.get_random_gaussian()+1, rnd.get_random_gaussian()+1;\n        upper = rnd.get_random_gaussian()+1, rnd.get_random_gaussian()+1;\n        while (upper(0) < lower(0)) upper(0) = rnd.get_random_gaussian()+1;\n        while (upper(1) < lower(1)) upper(1) = rnd.get_random_gaussian()+1;\n\n        starting_point = rnd.get_random_double()*(upper(0)-lower(0))+lower(0), \n                       rnd.get_random_double()*(upper(1)-lower(1))+lower(1);\n\n        dlog << LINFO << \"lower: \"<< trans(lower);\n        dlog << LINFO << \"upper: \"<< trans(upper);\n        dlog << LINFO << \"starting: \"<< trans(starting_point);\n\n        x = starting_point;\n        double val = find_max_box_constrained( \n            search_strategy,\n            objective_delta_stop_strategy(1e-16, 500), \n            neg_rosen, der_neg_rosen, x,\n            lower,  \n            upper   \n        );\n\n        DLIB_TEST_MSG(std::abs(val - neg_rosen(x)) < 1e-11, std::abs(val - neg_rosen(x)));\n        dlog << LINFO << \"neg_rosen solution:\\n\" << x;\n\n        dlog << LINFO << \"neg_rosen gradient: \"<< trans(der_neg_rosen(x));\n        const double gradient_residual = unconstrained_gradient_magnitude_neg_funct(der_neg_rosen, x, lower, upper);\n        dlog << LINFO << \"gradient_residual: \"<< gradient_residual;\n\n        return gradient_residual;\n    }\n\n    template <typename search_strategy_type>\n    double test_bound_solver_rosen (dlib::rand& rnd, search_strategy_type search_strategy)\n    {\n        using namespace dlib::test_functions;\n        print_spinner();\n        matrix<double,2,1> starting_point, lower, upper, x;\n\n\n        // pick random bounds and sometimes put the upper bound at zero so we can have\n        // a test where the optimal value has a bound active at 0 so make sure this case\n        // works properly.\n        if (rnd.get_random_double() > 0.2)\n        {\n            lower = rnd.get_random_gaussian()+1, rnd.get_random_gaussian()+1;\n            upper = rnd.get_random_gaussian()+1, rnd.get_random_gaussian()+1;\n            while (upper(0) < lower(0)) upper(0) = rnd.get_random_gaussian()+1;\n            while (upper(1) < lower(1)) upper(1) = rnd.get_random_gaussian()+1;\n        }\n        else\n        {\n            upper = 0,0;\n            if (rnd.get_random_double() > 0.5)\n                upper(0) = -rnd.get_random_double();\n            if (rnd.get_random_double() > 0.5)\n                upper(1) = -rnd.get_random_double();\n\n            lower = rnd.get_random_double()+1, rnd.get_random_double()+1;\n            lower = upper - lower;\n        }\n        const bool pick_uniform_bounds = rnd.get_random_double() > 0.9;\n        if (pick_uniform_bounds)\n        {\n            double x = rnd.get_random_gaussian()*2;\n            double y = rnd.get_random_gaussian()*2;\n            lower = min(x,y);\n            upper = max(x,y);\n        }\n\n        starting_point = rnd.get_random_double()*(upper(0)-lower(0))+lower(0), \n                       rnd.get_random_double()*(upper(1)-lower(1))+lower(1);\n\n        dlog << LINFO << \"lower: \"<< trans(lower);\n        dlog << LINFO << \"upper: \"<< trans(upper);\n        dlog << LINFO << \"starting: \"<< trans(starting_point);\n\n        x = starting_point;\n        double val;\n        if (!pick_uniform_bounds)\n        {\n            val = find_min_box_constrained( \n                search_strategy,\n                objective_delta_stop_strategy(1e-16, 500), \n                rosen, der_rosen, x,\n                lower,  \n                upper   \n            );\n        }\n        else\n        {\n            val = find_min_box_constrained( \n                search_strategy,\n                objective_delta_stop_strategy(1e-16, 500), \n                rosen, der_rosen, x,\n                lower(0),  \n                upper(0)   \n            );\n        }\n\n\n        DLIB_TEST_MSG(std::abs(val - rosen(x)) < 1e-11, std::abs(val - rosen(x)));\n        dlog << LINFO << \"rosen solution:\\n\" << x;\n\n        dlog << LINFO << \"rosen gradient: \"<< trans(der_rosen(x));\n        const double gradient_residual = unconstrained_gradient_magnitude(der_rosen, x, lower, upper);\n        dlog << LINFO << \"gradient_residual: \"<< gradient_residual;\n\n        return gradient_residual;\n    }\n\n    template <typename search_strategy_type>\n    double test_bound_solver_brown (dlib::rand& rnd, search_strategy_type search_strategy)\n    {\n        using namespace dlib::test_functions;\n        print_spinner();\n        matrix<double,4,1> starting_point(4), lower(4), upper(4), x;\n\n        const matrix<double,0,1> solution = brown_solution();\n\n        // pick random bounds\n        lower = rnd.get_random_gaussian(), rnd.get_random_gaussian(), rnd.get_random_gaussian(), rnd.get_random_gaussian();\n        lower = lower*10 + solution;\n        upper = rnd.get_random_gaussian(), rnd.get_random_gaussian(), rnd.get_random_gaussian(), rnd.get_random_gaussian();\n        upper = upper*10 + solution;\n        for (int i = 0; i < lower.size(); ++i)\n        {\n            if (upper(i) < lower(i)) \n                swap(upper(i),lower(i));\n        }\n\n        starting_point = rnd.get_random_double()*(upper(0)-lower(0))+lower(0), \n                       rnd.get_random_double()*(upper(1)-lower(1))+lower(1),\n                       rnd.get_random_double()*(upper(2)-lower(2))+lower(2),\n                       rnd.get_random_double()*(upper(3)-lower(3))+lower(3);\n\n        dlog << LINFO << \"lower: \"<< trans(lower);\n        dlog << LINFO << \"upper: \"<< trans(upper);\n        dlog << LINFO << \"starting: \"<< trans(starting_point);\n\n        x = starting_point;\n        double val = find_min_box_constrained( \n            search_strategy,\n            objective_delta_stop_strategy(1e-16, 500), \n            brown, brown_derivative, x,\n            lower,  \n            upper   \n        );\n\n        DLIB_TEST(std::abs(val - brown(x)) < 1e-14);\n        dlog << LINFO << \"brown solution:\\n\" << x;\n        return unconstrained_gradient_magnitude(brown_derivative, x, lower, upper);\n    }\n\n    template <typename search_strategy_type>\n    void test_box_constrained_optimizers(search_strategy_type search_strategy)\n    {\n        dlib::rand rnd;\n        running_stats<double> rs;\n\n        dlog << LINFO << \"test find_min_box_constrained() on rosen\";\n        for (int i = 0; i < 10000; ++i)\n            rs.add(test_bound_solver_rosen(rnd, search_strategy));\n        dlog << LINFO << \"mean rosen gradient: \" << rs.mean();\n        dlog << LINFO << \"max rosen gradient:  \" << rs.max();\n        DLIB_TEST(rs.mean() < 1e-12);\n        DLIB_TEST(rs.max() < 1e-9);\n\n        dlog << LINFO << \"test find_min_box_constrained() on brown\";\n        rs.clear();\n        for (int i = 0; i < 1000; ++i)\n            rs.add(test_bound_solver_brown(rnd, search_strategy));\n        dlog << LINFO << \"mean brown gradient: \" << rs.mean();\n        dlog << LINFO << \"max brown gradient:  \" << rs.max();\n        dlog << LINFO << \"min brown gradient:  \" << rs.min();\n        DLIB_TEST(rs.mean() < 1e-5);\n        DLIB_TEST(rs.max() < 1e-2);\n        DLIB_TEST(rs.min() < 1e-10);\n\n        dlog << LINFO << \"test find_max_box_constrained() on neg_rosen\";\n        rs.clear();\n        for (int i = 0; i < 1000; ++i)\n            rs.add(test_bound_solver_neg_rosen(rnd, search_strategy));\n        dlog << LINFO << \"mean neg_rosen gradient: \" << rs.mean();\n        dlog << LINFO << \"max neg_rosen gradient:  \" << rs.max();\n        DLIB_TEST(rs.mean() < 1e-12);\n        DLIB_TEST(rs.max() < 1e-9);\n\n    }\n\n    void test_poly_min_extract_2nd()\n    {\n        double off;\n\n        off = 0.0; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n        off = 0.1; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n        off = 0.2; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n        off = 0.3; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n        off = 0.4; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n        off = 0.5; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n        off = 0.6; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n        off = 0.8; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n        off = 0.9; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n        off = 1.0; DLIB_TEST(std::abs( poly_min_extrap(off*off, -2*off, (1-off)*(1-off)) - off) < 1e-13); \n    }\n\n    class optimization_tester : public tester\n    {\n    public:\n        optimization_tester (\n        ) :\n            tester (\"test_optimization\",\n                    \"Runs tests on the optimization component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"test_box_constrained_optimizers(bfgs_search_strategy())\";\n            test_box_constrained_optimizers(bfgs_search_strategy());\n            dlog << LINFO << \"test_box_constrained_optimizers(lbfgs_search_strategy(5))\";\n            test_box_constrained_optimizers(lbfgs_search_strategy(5));\n            test_poly_min_extract_2nd();\n            optimization_test();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/optimization_test_functions.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include \"optimization_test_functions.h\"\n\n/*\n\n    Most of the code in this file is converted from the set of Fortran 90 routines \n    created by John Burkardt.\n\n    The original Fortran can be found here: http://orion.math.iastate.edu/burkardt/f_src/testopt/testopt.html\n\n*/\n\n\nnamespace dlib\n{\n    namespace test_functions\n    {\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double,0,1> chebyquad_residuals(const matrix<double,0,1>& x)\n        {\n            matrix<double,0,1> fvec(x.size());\n            const int n = x.size();\n            int i;\n            int j;\n            double t;\n            double t1;\n            double t2;\n            double th;\n            fvec = 0;\n\n            for (j = 1; j <= n; ++j)\n            {\n                t1 = 1.0E+00;\n                t2 = 2.0E+00 * x(j-1) - 1.0E+00;\n                t = 2.0E+00 * t2;\n                for (i = 1; i <= n; ++i)\n                {\n                    fvec(i-1) = fvec(i-1) + t2;\n                    th = t * t2 - t1;\n                    t1 = t2;\n                    t2 = th;\n                }\n            }\n\n            for (i = 1; i <= n; ++i)\n            {\n                fvec(i-1) = fvec(i-1) / (double) ( n );\n                if ( ( i%2 ) == 0 ) \n                    fvec(i-1) = fvec(i-1) + 1.0E+00 / ( (double)i*i - 1.0E+00 );\n            }\n\n            return fvec;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        double chebyquad_residual(int i, const matrix<double,0,1>& x)\n        {\n            return chebyquad_residuals(x)(i);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        int& chebyquad_calls() \n        {\n            static int count = 0;\n            return count;\n        }\n\n        double chebyquad(const matrix<double,0,1>& x )\n        {\n            chebyquad_calls()++;\n            return sum(squared(chebyquad_residuals(x)));\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double,0,1> chebyquad_derivative (const matrix<double,0,1>& x)\n        {\n            const int n = x.size();\n            matrix<double,0,1> fvec = chebyquad_residuals(x);\n            matrix<double,0,1> g(n);\n            int i;\n            int j;\n            double s1;\n            double s2;\n            double t;\n            double t1;\n            double t2;\n            double th;\n\n            for (j = 1; j <= n; ++j)\n            {\n                g(j-1) = 0.0E+00;\n                t1 = 1.0E+00;\n                t2 = 2.0E+00 * x(j-1) - 1.0E+00;\n                t = 2.0E+00 * t2;\n                s1 = 0.0E+00;\n                s2 = 2.0E+00;\n                for (i = 1; i <= n; ++i)\n                {\n                    g(j-1) = g(j-1) + fvec(i-1) * s2;\n                    th = 4.0E+00 * t2 + t * s2 - s1;\n                    s1 = s2;\n                    s2 = th;\n                    th = t * t2 - t1;\n                    t1 = t2;\n                    t2 = th;\n                }\n            }\n\n            g = 2.0E+00 * g / (double) ( n );\n\n            return g;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double,0,1> chebyquad_start (int n)\n        {\n            int i;\n            matrix<double,0,1> x(n);\n\n            for (i = 1; i <= n; ++i)\n                x(i-1) = double ( i ) / double ( n + 1 );\n\n            return x;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double,0,1> chebyquad_solution (int n)\n        {\n            matrix<double,0,1> x(n);\n\n            x = 0;\n            switch (n)\n            {\n                case 2:\n                    x = 0.2113249E+00, 0.7886751E+00;\n                    break;\n                case 4:\n                    x = 0.1026728E+00, 0.4062037E+00, 0.5937963E+00, 0.8973272E+00;\n                    break;\n                case 6:\n                    x = 0.066877E+00, 0.288741E+00, 0.366682E+00, 0.633318E+00, 0.711259E+00, 0.933123E+00;\n                    break;\n                case 8:\n                    x = 0.043153E+00, 0.193091E+00, 0.266329E+00, 0.500000E+00, 0.500000E+00, 0.733671E+00, 0.806910E+00, 0.956847E+00;\n                    break;\n                default:\n                    std::ostringstream sout;\n                    sout << \"don't know chebyquad solution for n = \" << n;\n                    throw dlib::error(sout.str());\n                    break;\n            }\n\n            return x;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double> chebyquad_hessian(const matrix<double,0,1>& x)\n        {\n            const int lda = x.size();\n            const int n = x.size();\n            double d1;\n            double d2;\n            matrix<double,0,1> fvec = chebyquad_residuals(x);\n            matrix<double,0,1> gvec(n);\n            matrix<double> h(lda,n);\n            int i;\n            int j;\n            int k;\n            double p1;\n            double p2;\n            double s1;\n            double s2;\n            double ss1;\n            double ss2;\n            double t;\n            double t1;\n            double t2;\n            double th;\n            double tt;\n            double tth;\n            double tt1;\n            double tt2;\n            h = 0;\n\n            d1 = 1.0E+00 / double ( n );\n            d2 = 2.0E+00 * d1;\n\n            for (j = 1; j <= n; ++j)\n            {\n\n                h(j-1,j-1) = 4.0E+00 * d1;\n                t1 = 1.0E+00;\n                t2 = 2.0E+00 * x(j-1) - 1.0E+00;\n                t = 2.0E+00 * t2;\n                s1 = 0.0E+00;\n                s2 = 2.0E+00;\n                p1 = 0.0E+00;\n                p2 = 0.0E+00;\n                gvec(0) = s2;\n\n                for (i = 2; i <= n; ++i)\n                {\n                    th = 4.0E+00 * t2 + t * s2 - s1;\n                    s1 = s2;\n                    s2 = th;\n                    th = t * t2 - t1;\n                    t1 = t2;\n                    t2 = th;\n                    th = 8.0E+00 * s1 + t * p2 - p1;\n                    p1 = p2;\n                    p2 = th;\n                    gvec(i-1) = s2;\n                    h(j-1,j-1) = h(j-1,j-1) + fvec(i-1) * th + d1 * s2*s2;\n                }\n\n                h(j-1,j-1) = d2 * h(j-1,j-1);\n\n                for (k = 1; k <= j-1; ++k)\n                {\n\n                    h(j-1,k-1) = 0.0;\n                    tt1 = 1.0E+00;\n                    tt2 = 2.0E+00 * x(k-1) - 1.0E+00;\n                    tt = 2.0E+00 * tt2;\n                    ss1 = 0.0E+00;\n                    ss2 = 2.0E+00;\n\n                    for (i = 1; i <= n; ++i)\n                    {\n                        h(j-1,k-1) = h(j-1,k-1) + ss2 * gvec(i-1);\n                        tth = 4.0E+00 * tt2 + tt * ss2 - ss1;\n                        ss1 = ss2;\n                        ss2 = tth;\n                        tth = tt * tt2 - tt1;\n                        tt1 = tt2;\n                        tt2 = tth;\n                    }\n\n                    h(j-1,k-1) = d2 * d1 * h(j-1,k-1);\n\n                }\n\n            }\n\n            h = make_symmetric(h);\n            return h;\n        }\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        double brown_residual (int i, const matrix<double,4,1>& x)\n        /*!\n            requires\n                - 1 <= i <= 20\n            ensures\n                - returns the ith brown residual\n        !*/\n        {\n            double c;\n            double f;\n            double f1;\n            double f2;\n\n            f = 0.0E+00;\n\n\n            c = double ( i ) / 5.0E+00;\n            f1 = x(0) + c * x(1) - std::exp ( c );\n            f2 = x(2) + std::sin ( c ) * x(3) - std::cos ( c );\n\n            f = f1*f1 + f2*f2; \n\n            return f;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        double brown ( const matrix<double,4,1>& x)\n        {\n            double f;\n            int i;\n\n            f = 0;\n\n            for (i = 1; i <= 20; ++i)\n            {\n                f += std::pow(brown_residual(i, x), 2);\n            }\n\n            return f;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double,4,1> brown_derivative ( const matrix<double,4,1>& x)\n        {\n            double c;\n            double df1dx1;\n            double df1dx2;\n            double df2dx3;\n            double df2dx4;\n            double f1;\n            double f2;\n            matrix<double,4,1> g;\n            int i;\n\n            g = 0;\n\n            for (i = 1; i <= 20; ++i)\n            {\n\n                c = double ( i ) / 5.0E+00;\n\n                f1 = x(0) + c * x(1) - std::exp ( c );\n                f2 = x(2) + std::sin ( c ) * x(3) - std::cos ( c );\n\n                df1dx1 = 1.0E+00;\n                df1dx2 = c;\n                df2dx3 = 1.0E+00;\n                df2dx4 = std::sin ( c );\n\n                using std::pow;\n                g(0) = g(0) + 4.0E+00 * ( pow(f1,3) * df1dx1 + f1 * pow(f2,2) * df1dx1 );\n                g(1) = g(1) + 4.0E+00 * ( pow(f1,3) * df1dx2 + f1 * pow(f2,2) * df1dx2 );\n                g(2) = g(2) + 4.0E+00 * ( pow(f1,2) * f2 * df2dx3 + pow(f2,3) * df2dx3 );\n                g(3) = g(3) + 4.0E+00 * ( pow(f1,2) * f2 * df2dx4 + pow(f2,3) * df2dx4 );\n\n            }\n\n            return g;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double,4,4> brown_hessian ( const matrix<double,4,1>& x)\n        {\n            double c;\n            double df1dx1;\n            double df1dx2;\n            double df2dx3;\n            double df2dx4;\n            double f1;\n            double f2;\n            matrix<double,4,4> h;\n            int i;\n\n            h = 0;\n\n            for (i = 1; i <= 20; ++i)\n            {\n\n                c = double ( i ) / 5.0E+00;\n\n                f1 = x(0) + c * x(1) - std::exp ( c );\n                f2 = x(2) + std::sin ( c ) * x(3) - std::cos ( c );\n\n                df1dx1 = 1.0E+00;\n                df1dx2 = c;\n                df2dx3 = 1.0E+00;\n                df2dx4 = std::sin ( c );\n\n                using std::pow;\n                h(0,0) = h(0,0) + 12.0E+00 * pow(f1,2) * df1dx1 * df1dx1 + 4.0E+00 * pow(f2,2) * df1dx1 * df1dx1;\n                h(0,1) = h(0,1) + 12.0E+00 * pow(f1,2) * df1dx1 * df1dx2 + 4.0E+00 * pow(f2,2) * df1dx1 * df1dx2;\n                h(0,2) = h(0,2) + 8.0E+00 * f1 * f2 * df1dx1 * df2dx3;\n                h(0,3) = h(0,3) + 8.0E+00 * f1 * f2 * df1dx1 * df2dx4;\n\n                h(1,0) = h(1,0) + 12.0E+00 * pow(f1,2) * df1dx2 * df1dx1 + 4.0E+00 * pow(f2,2) * df1dx2 * df1dx1;\n                h(1,1) = h(1,1) + 12.0E+00 * pow(f1,2) * df1dx2 * df1dx2 + 4.0E+00 * pow(f2,2) * df1dx2 * df1dx1;\n                h(1,2) = h(1,2) + 8.0E+00 * f1 * f2 * df1dx2 * df2dx3;\n                h(1,3) = h(1,3) + 8.0E+00 * f1 * f2 * df1dx2 * df2dx4;\n\n                h(2,0) = h(2,0) + 8.0E+00 * f1 * f2 * df2dx3 * df1dx1;\n                h(2,1) = h(2,1) + 8.0E+00 * f1 * f2 * df2dx3 * df1dx2;\n                h(2,2) = h(2,2) + 4.0E+00 * pow(f1,2) * df2dx3 * df2dx3 + 12.0E+00 * pow(f2,2) * df2dx3 * df2dx3;\n                h(2,3) = h(2,3) + 4.0E+00 * pow(f1,2) * df2dx4 * df2dx3 + 12.0E+00 * pow(f2,2) * df2dx3 * df2dx4;\n\n                h(3,0) = h(3,0) + 8.0E+00 * f1 * f2 * df2dx4 * df1dx1;\n                h(3,1) = h(3,1) + 8.0E+00 * f1 * f2 * df2dx4 * df1dx2;\n                h(3,2) = h(3,2) + 4.0E+00 * pow(f1,2) * df2dx3 * df2dx4 + 12.0E+00 * pow(f2,2) * df2dx4 * df2dx3;\n                h(3,3) = h(3,3) + 4.0E+00 * pow(f1,2) * df2dx4 * df2dx4 + 12.0E+00 * pow(f2,2) * df2dx4 * df2dx4;\n\n            }\n\n            return make_symmetric(h);\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double,4,1> brown_start ()\n        {\n            matrix<double,4,1> x;\n            x = 25.0E+00, 5.0E+00, -5.0E+00, -1.0E+00;\n            return x;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double,4,1> brown_solution ()\n        {\n            matrix<double,4,1> x;\n            // solution from original documentation.\n            //x = -11.5844E+00, 13.1999E+00, -0.406200E+00, 0.240998E+00;\n            x = -11.594439905669450042, 13.203630051593080452, -0.40343948856573402795, 0.23677877338218666914;\n            return x;\n        }\n\n    // ----------------------------------------------------------------------------------------\n\n    }\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/optimization_test_functions.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_OPTIMIZATION_TEST_FUNCTiONS_H_h_\n#define DLIB_OPTIMIZATION_TEST_FUNCTiONS_H_h_\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <cmath>\n\n/*\n\n    Most of the code in this file is converted from the set of Fortran 90 routines \n    created by John Burkardt.\n\n    The original Fortran can be found here: http://orion.math.iastate.edu/burkardt/f_src/testopt/testopt.html\n\n*/\n\n// GCC 4.8 gives false alarms about some variables being uninitialized.  Disable these\n// false warnings.\n#if ( defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 8)\n    #pragma GCC diagnostic ignored \"-Wmaybe-uninitialized\"\n#endif\n\n\nnamespace dlib\n{\n    namespace test_functions\n    {\n\n    // ----------------------------------------------------------------------------------------\n\n        matrix<double,0,1> chebyquad_residuals(const matrix<double,0,1>& x);\n\n        double chebyquad_residual(int i, const matrix<double,0,1>& x);\n\n        int& chebyquad_calls();\n\n        double chebyquad(const matrix<double,0,1>& x );\n\n        matrix<double,0,1> chebyquad_derivative (const matrix<double,0,1>& x);\n\n        matrix<double,0,1> chebyquad_start (int n);\n\n        matrix<double,0,1> chebyquad_solution (int n);\n\n        matrix<double> chebyquad_hessian(const matrix<double,0,1>& x);\n\n    // ----------------------------------------------------------------------------------------\n\n        class chebyquad_function_model \n        {\n        public:\n\n            // Define the type used to represent column vectors\n            typedef matrix<double,0,1> column_vector;\n            // Define the type used to represent the hessian matrix\n            typedef matrix<double> general_matrix;\n\n            double operator() ( \n                const column_vector& x\n            ) const\n            {\n                return chebyquad(x);\n            }\n\n            void get_derivative_and_hessian (\n                const column_vector& x,\n                column_vector& d,\n                general_matrix& h\n            ) const\n            {\n                d = chebyquad_derivative(x);\n                h = chebyquad_hessian(x);\n            }\n        };\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        double brown_residual (int i, const matrix<double,4,1>& x);\n        /*!\n            requires\n                - 1 <= i <= 20\n            ensures\n                - returns the ith brown residual\n        !*/\n\n        double brown ( const matrix<double,4,1>& x);\n\n        matrix<double,4,1> brown_derivative ( const matrix<double,4,1>& x);\n\n        matrix<double,4,4> brown_hessian ( const matrix<double,4,1>& x);\n\n        matrix<double,4,1> brown_start ();\n\n        matrix<double,4,1> brown_solution ();\n\n        class brown_function_model \n        {\n        public:\n\n            // Define the type used to represent column vectors\n            typedef matrix<double,4,1> column_vector;\n            // Define the type used to represent the hessian matrix\n            typedef matrix<double> general_matrix;\n\n            double operator() ( \n                const column_vector& x\n            ) const\n            {\n                return brown(x);\n            }\n\n            void get_derivative_and_hessian (\n                const column_vector& x,\n                column_vector& d,\n                general_matrix& h\n            ) const\n            {\n                d = brown_derivative(x);\n                h = brown_hessian(x);\n            }\n        };\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        matrix<T,2,1> rosen_big_start()\n        {\n            matrix<T,2,1> x;\n            x = -1.2, -1;\n            return x;\n        }\n\n    // This is a variation on the Rosenbrock test function but with large residuals.  The\n    // minimum is at 1, 1 and the objective value is 1.\n        template <typename T>\n        T rosen_big_residual (int i, const matrix<T,2,1>& m)\n        {\n            using std::pow;\n            const T x = m(0); \n            const T y = m(1);\n\n            if (i == 1)\n            {\n                return 100*pow(y - x*x,2)+1.0;\n            }\n            else \n            {\n                return pow(1 - x,2) + 1.0;\n            }\n        }\n\n        template <typename T>\n        T rosen_big ( const matrix<T,2,1>& m)\n        {\n            using std::pow;\n            return 0.5*(pow(rosen_big_residual(1,m),2) + pow(rosen_big_residual(2,m),2));\n        }\n\n        template <typename T>\n        matrix<T,2,1> rosen_big_solution ()\n        {\n            matrix<T,2,1> x;\n            // solution from original documentation.\n            x = 1,1;\n            return x;\n        }\n\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n    // ----------------------------------------------------------------------------------------\n\n        template <typename T>\n        matrix<T,2,1> rosen_start()\n        {\n            matrix<T,2,1> x;\n            x = -1.2, -1;\n            return x;\n        }\n\n        template <typename T>\n        T rosen ( const matrix<T,2,1>& m)\n        {\n            const T x = m(0); \n            const T y = m(1);\n\n            using std::pow;\n            // compute Rosenbrock's function and return the result\n            return 100.0*pow(y - x*x,2) + pow(1 - x,2);\n        }\n\n        template <typename T>\n        T rosen_residual (int i, const matrix<T,2,1>& m)\n        {\n            const T x = m(0); \n            const T y = m(1);\n\n\n            if (i == 1)\n            {\n                return 10*(y - x*x);\n            }\n            else\n            {\n                return 1 - x;\n            }\n        }\n\n        template <typename T>\n        matrix<T,2,1> rosen_residual_derivative (int i, const matrix<T,2,1>& m)\n        {\n            const T x = m(0); \n\n            matrix<T,2,1> d;\n\n            if (i == 1)\n            {\n                d = -20*x, 10;\n            }\n            else\n            {\n                d = -1, 0;\n            }\n            return d;\n        }\n\n        template <typename T>\n        const matrix<T,2,1> rosen_derivative ( const matrix<T,2,1>& m)\n        {\n            const T x = m(0);\n            const T y = m(1);\n\n            // make us a column vector of length 2\n            matrix<T,2,1> res(2);\n\n            // now compute the gradient vector\n            res(0) = -400*x*(y-x*x) - 2*(1-x); // derivative of rosen() with respect to x\n            res(1) = 200*(y-x*x);              // derivative of rosen() with respect to y\n            return res;\n        }\n\n        template <typename T>\n        const matrix<T,2,2> rosen_hessian ( const matrix<T,2,1>& m)\n        {\n            const T x = m(0);\n            const T y = m(1);\n\n            // make us a column vector of length 2\n            matrix<T,2,2> res;\n\n            // now compute the gradient vector\n            res(0,0) = -400*y + 3*400*x*x + 2; \n            res(1,1) = 200;              \n\n            res(0,1) = -400*x;              \n            res(1,0) = -400*x;              \n            return res;\n        }\n\n        template <typename T>\n        matrix<T,2,1> rosen_solution ()\n        {\n            matrix<T,2,1> x;\n            // solution from original documentation.\n            x = 1,1;\n            return x;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename T>\n        struct rosen_function_model\n        {\n            typedef matrix<T,2,1> column_vector;\n            typedef matrix<T,2,2> general_matrix;\n\n            T operator() ( column_vector x) const\n            {\n                return static_cast<T>(rosen(x));\n            }\n\n            void get_derivative_and_hessian (\n                const column_vector& x,\n                column_vector& d,\n                general_matrix& h\n            ) const \n            {\n                d = rosen_derivative(x);\n                h = rosen_hessian(x);\n            }\n\n        };\n\n    // ----------------------------------------------------------------------------------------\n\n    }\n}\n\n#endif // DLIB_OPTIMIZATION_TEST_FUNCTiONS_H_h_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/parallel_for.cpp",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/threads.h>\n#include <vector>\n#include <sstream>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.parallel_for\");\n\n    class assign_element\n    {\n    public:\n\n        assign_element(\n            std::vector<int>& vect_\n        ) : vect(vect_){}\n\n        std::vector<int>& vect;\n\n        void go (long i ) \n        {\n            DLIB_TEST( 0 <= i && i < (long)vect.size());\n            vect[i] = i;\n        }\n\n        void operator() (long i ) const\n        {\n            DLIB_TEST( 0 <= i && i < (long)vect.size());\n            vect[i] = i;\n        }\n\n    };\n\n    void test_parallel_for(long start)\n    {\n        std::vector<int> vect(200,0);\n\n        parallel_for(4, start, vect.size(), assign_element(vect));\n\n        for (long i = 0; i < start;  ++i)\n        {\n            DLIB_TEST(vect[i] == 0);\n        }\n        for (long i = start; i < (long)vect.size(); ++i)\n        {\n            DLIB_TEST(vect[i] == i);\n        }\n    }\n\n    void test_parallel_for2(long start)\n    {\n        std::vector<int> vect(200,0);\n\n        assign_element temp(vect);\n        parallel_for(4, start, vect.size(), temp, &assign_element::go);\n\n        for (long i = 0; i < start;  ++i)\n        {\n            DLIB_TEST(vect[i] == 0);\n        }\n        for (long i = start; i < (long)vect.size(); ++i)\n        {\n            DLIB_TEST(vect[i] == i);\n        }\n    }\n\n    struct parfor_test_helper\n    {\n        mutable std::vector<int> test;\n\n        parfor_test_helper() : test(400,100000)\n        {\n        }\n\n        void go(long begin, long end)\n        {\n            for (long i = begin; i < end; ++i)\n                test[i] = i;\n        }\n\n        void operator()(long begin, long end) const\n        {\n            for (long i = begin; i < end; ++i)\n                test[i] = i;\n        }\n\n        void go2(long i)\n        {\n            test[i] = i;\n        }\n\n    };\n\n    struct parfor_test_helper2\n    {\n        mutable std::vector<int> test;\n\n        parfor_test_helper2() : test(400,100000)\n        {\n        }\n\n        void operator()(long i) const\n        {\n            test[i] = i;\n        }\n\n    };\n\n    void test_parallel_for_additional()\n    {\n        {\n            parfor_test_helper helper;\n            parallel_for(4, 0, helper.test.size(), helper, &parfor_test_helper::go2);\n\n            for (unsigned long i = 0; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for(4, 10, helper.test.size(), helper, &parfor_test_helper::go2);\n\n            for (unsigned long i = 0; i < 10; ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == 100000, helper.test[i]);\n            }\n            for (unsigned long i = 10; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for_blocked(4, 0, helper.test.size(), helper, &parfor_test_helper::go);\n\n            for (unsigned long i = 0; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for_blocked(4, 10, helper.test.size(), helper, &parfor_test_helper::go);\n\n            for (unsigned long i = 0; i < 10; ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == 100000, helper.test[i]);\n            }\n            for (unsigned long i = 10; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for_blocked(4, 0, helper.test.size(), helper);\n\n            for (unsigned long i = 0; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for_blocked(4, 10, helper.test.size(), helper);\n\n            for (unsigned long i = 0; i < 10; ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == 100000, helper.test[i]);\n            }\n            for (unsigned long i = 10; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper2 helper;\n            parallel_for(4, 0, helper.test.size(), helper);\n\n            for (unsigned long i = 0; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper2 helper;\n            parallel_for(4, 10, helper.test.size(), helper);\n\n            for (unsigned long i = 0; i < 10; ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == 100000, helper.test[i]);\n            }\n            for (unsigned long i = 10; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n\n\n\n\n\n\n        {\n            parfor_test_helper helper;\n            parallel_for_verbose(4, 0, helper.test.size(), helper, &parfor_test_helper::go2);\n\n            for (unsigned long i = 0; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for_verbose(4, 10, helper.test.size(), helper, &parfor_test_helper::go2);\n\n            for (unsigned long i = 0; i < 10; ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == 100000, helper.test[i]);\n            }\n            for (unsigned long i = 10; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for_blocked_verbose(4, 0, helper.test.size(), helper, &parfor_test_helper::go);\n\n            for (unsigned long i = 0; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for_blocked_verbose(4, 10, helper.test.size(), helper, &parfor_test_helper::go);\n\n            for (unsigned long i = 0; i < 10; ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == 100000, helper.test[i]);\n            }\n            for (unsigned long i = 10; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for_blocked_verbose(4, 0, helper.test.size(), helper);\n\n            for (unsigned long i = 0; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper helper;\n            parallel_for_blocked_verbose(4, 10, helper.test.size(), helper);\n\n            for (unsigned long i = 0; i < 10; ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == 100000, helper.test[i]);\n            }\n            for (unsigned long i = 10; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper2 helper;\n            parallel_for_verbose(4, 0, helper.test.size(), helper);\n\n            for (unsigned long i = 0; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n        {\n            parfor_test_helper2 helper;\n            parallel_for_verbose(4, 10, helper.test.size(), helper);\n\n            for (unsigned long i = 0; i < 10; ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == 100000, helper.test[i]);\n            }\n            for (unsigned long i = 10; i < helper.test.size(); ++i)\n            {\n                DLIB_CASSERT(helper.test[i] == (long)i, helper.test[i]);\n            }\n        }\n    }\n\n    class test_parallel_for_routines : public tester\n    {\n    public:\n        test_parallel_for_routines (\n        ) :\n            tester (\n                \"test_parallel_for\",       // the command line argument name for this test\n                \"Run tests on the parallel_for routines.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n        void perform_test (\n        )\n        {\n            test_parallel_for(0);\n            test_parallel_for(30);\n            test_parallel_for(50);\n            test_parallel_for2(0);\n            test_parallel_for2(30);\n            test_parallel_for2(50);\n\n            test_parallel_for_additional();\n        }\n    };\n\n    test_parallel_for_routines a;\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/parse.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <dlib/optimization.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n\n    logger dlog(\"test.parse\");\n\n// ----------------------------------------------------------------------------------------\n\n    const unsigned long DET = 0;\n    const unsigned long N   = 1;\n    const unsigned long V   = 2;\n    const unsigned long NP  = 3;\n    const unsigned long VP  = 4;\n    const unsigned long S   = 5;\n    const unsigned long B   = 6;\n    const unsigned long G   = 7;\n    const unsigned long A   = 8;\n\n    typedef unsigned long tags;\n\n    template <bool has_glue_term>\n    void user_defined_ruleset (\n        const std::vector<tags>& words,\n        const constituent<tags>& c,\n        std::vector<std::pair<tags,double> >& possible_ids\n    )\n    {\n        DLIB_TEST(c.begin < c.k && c.k < c.end && c.end <= words.size());\n        DLIB_TEST(possible_ids.size() == 0);\n\n        if (c.left_tag == NP && c.right_tag == VP)      possible_ids.push_back(make_pair(S,log(0.80)));\n        else if (c.left_tag == DET && c.right_tag == N) possible_ids.push_back(make_pair(NP,log(0.30)));\n        else if (c.left_tag == VP && c.right_tag == A) possible_ids.push_back(make_pair(VP,log(0.30)));\n        else if (c.left_tag == V && c.right_tag == NP)\n        {\n            possible_ids.push_back(make_pair(VP,log(0.20)));\n            possible_ids.push_back(make_pair(B,0.10));\n        }\n        else if (has_glue_term)\n        {\n            possible_ids.push_back(make_pair(G, log(0.01)));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void dotest1()\n    {\n        print_spinner();\n        dlog << LINFO << \"in dotest1()\";\n\n        std::vector<std::string> words;\n        std::vector<tags> sequence;\n        for (int i = 0; i < 8; ++i)\n        {\n            sequence.push_back(DET);\n            sequence.push_back(N);\n            sequence.push_back(V);\n            sequence.push_back(DET);\n            sequence.push_back(N);\n            sequence.push_back(A);\n\n            words.push_back(\"The\");\n            words.push_back(\"flight\");\n            words.push_back(\"includes\");\n            words.push_back(\"a\");\n            words.push_back(\"meal\");\n            words.push_back(\"AWORD\");\n        }\n\n        std::vector<parse_tree_element<tags> > parse_tree;\n\n        find_max_parse_cky(sequence, user_defined_ruleset<true>, parse_tree);\n        DLIB_TEST(parse_tree.size() != 0);\n\n\n        std::vector<unsigned long> roots;\n        find_trees_not_rooted_with_tag(parse_tree, G, roots);\n        DLIB_TEST(roots.size() == 8);\n\n        for (unsigned long i = 0; i < roots.size(); ++i)\n        {\n            dlog << LINFO << parse_tree_to_string(parse_tree, words, roots[i]);\n            DLIB_TEST(parse_tree_to_string(parse_tree, words, roots[i]) == \"[[The flight] [[includes [a meal]] AWORD]]\");\n            dlog << LINFO << parse_tree_to_string_tagged(parse_tree, words, roots[i]);\n            DLIB_TEST(parse_tree_to_string_tagged(parse_tree, words, roots[i]) == \"[5 [3 The flight] [4 [4 includes [3 a meal]] AWORD]]\");\n        }\n\n\n        words.clear();\n        sequence.clear();\n\n        for (int i = 0; i < 2; ++i)\n        {\n            sequence.push_back(DET);\n            sequence.push_back(N);\n            sequence.push_back(V);\n            sequence.push_back(DET);\n            sequence.push_back(N);\n\n            words.push_back(\"The\");\n            words.push_back(\"flight\");\n            words.push_back(\"includes\");\n            words.push_back(\"a\");\n            words.push_back(\"meal\");\n        }\n\n        find_max_parse_cky(sequence, user_defined_ruleset<true>, parse_tree);\n        DLIB_TEST(parse_tree.size() != 0);\n\n        const std::string str1 = \"[[[The flight] [includes [a meal]]] [[The flight] [includes [a meal]]]]\";\n        const std::string str2 = \"[7 [5 [3 The flight] [4 includes [3 a meal]]] [5 [3 The flight] [4 includes [3 a meal]]]]\";\n        dlog << LINFO << parse_tree_to_string(parse_tree, words);\n        DLIB_TEST(parse_tree_to_string(parse_tree, words) == str1);\n        dlog << LINFO << parse_tree_to_string_tagged(parse_tree, words);\n        DLIB_TEST(parse_tree_to_string_tagged(parse_tree, words) == str2);\n\n        const std::string str3 = \"[[The flight] [includes [a meal]]] [[The flight] [includes [a meal]]]\";\n        const std::string str4 = \"[5 [3 The flight] [4 includes [3 a meal]]] [5 [3 The flight] [4 includes [3 a meal]]]\";\n        dlog << LINFO << parse_trees_to_string(parse_tree, words, G);\n        DLIB_TEST(parse_trees_to_string(parse_tree, words, G) == str3);\n        dlog << LINFO << parse_trees_to_string_tagged(parse_tree, words, G);\n        DLIB_TEST(parse_trees_to_string_tagged(parse_tree, words, G) == str4);\n\n        sequence.clear();\n        find_max_parse_cky(sequence, user_defined_ruleset<true>, parse_tree);\n        DLIB_TEST(parse_tree.size() == 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void dotest2()\n    {\n        print_spinner();\n        dlog << LINFO << \"in dotest2()\";\n\n        std::vector<std::string> words;\n        std::vector<tags> sequence;\n        for (int i = 0; i < 8; ++i)\n        {\n            sequence.push_back(DET);\n            sequence.push_back(N);\n            sequence.push_back(V);\n            sequence.push_back(DET);\n            sequence.push_back(N);\n\n            words.push_back(\"The\");\n            words.push_back(\"flight\");\n            words.push_back(\"includes\");\n            words.push_back(\"a\");\n            words.push_back(\"meal\");\n        }\n\n        std::vector<parse_tree_element<tags> > parse_tree;\n\n        find_max_parse_cky(sequence, user_defined_ruleset<false>, parse_tree);\n        DLIB_TEST(parse_tree.size() == 0);\n\n\n        std::vector<unsigned long> roots;\n        find_trees_not_rooted_with_tag(parse_tree, G, roots);\n        DLIB_TEST(roots.size() == 0);\n\n\n        words.clear();\n        sequence.clear();\n\n        for (int i = 0; i < 2; ++i)\n        {\n            sequence.push_back(DET);\n            sequence.push_back(N);\n            sequence.push_back(V);\n            sequence.push_back(DET);\n            sequence.push_back(N);\n\n            words.push_back(\"The\");\n            words.push_back(\"flight\");\n            words.push_back(\"includes\");\n            words.push_back(\"a\");\n            words.push_back(\"meal\");\n        }\n\n        find_max_parse_cky(sequence, user_defined_ruleset<false>, parse_tree);\n        DLIB_TEST(parse_tree.size() == 0);\n\n        sequence.clear();\n        find_max_parse_cky(sequence, user_defined_ruleset<false>, parse_tree);\n        DLIB_TEST(parse_tree.size() == 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class parse_tester : public tester\n    {\n    public:\n        parse_tester (\n        ) :\n            tester (\"test_parse\",\n                    \"Runs tests on the parsing tools.\")\n        {}\n\n\n        void perform_test (\n        )\n        {\n            dotest1();\n            dotest2();\n        }\n    } a;\n\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/pipe.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/misc_api.h>\n#include <dlib/pipe.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.pipe\");\n\n    namespace pipe_kernel_test_helpers\n    {\n        const unsigned long proc1_count = 10000;\n        mutex m;\n        signaler s(m);\n        unsigned long threads_running = 0;\n        bool found_error;\n\n        inline void add_running_thread (\n        )\n        {\n            auto_mutex M(m);\n            ++threads_running;\n        }\n\n        inline void remove_running_thread (\n        )\n        {\n            auto_mutex M(m);\n            --threads_running;\n            s.broadcast();\n        }\n\n        inline void wait_for_threads (\n        )\n        {\n            auto_mutex M(m);\n            while (threads_running > 0)\n                s.wait();\n        }\n\n        template <\n            typename pipe\n            >\n        void threadproc1 (\n            void* param\n        )\n        {\n            add_running_thread();\n            pipe& p = *static_cast<pipe*>(param);\n            try\n            {\n\n                int last = -1;\n                for (unsigned long i = 0; i < proc1_count; ++i)\n                {\n                    int cur=0;\n                    DLIB_TEST(p.dequeue(cur) == true);\n                    DLIB_TEST(last + 1 == cur);\n                    last = cur;\n                }\n                DLIB_TEST(p.size() == 0);\n            }\n            catch(exception& e)\n            {\n                auto_mutex M(m);\n                found_error = true;\n                cout << \"\\n\\nERRORS FOUND\" << endl;\n                cout << e.what() << endl;\n                dlog << LWARN << \"ERRORS FOUND\";\n                dlog << LWARN << e.what();\n                p.disable();\n            }        \n\n            remove_running_thread();\n        }\n\n\n        template <\n            typename pipe\n            >\n        void threadproc2 (\n            void* param\n        )\n        {\n            add_running_thread();\n            pipe& p = *static_cast<pipe*>(param);\n            try\n            {\n\n                int last = -1;\n                int cur;\n                while (p.dequeue(cur))\n                {\n                    DLIB_TEST(last < cur);\n                    last = cur;\n                }\n                auto_mutex M(m);\n            }\n            catch(exception& e)\n            {\n                auto_mutex M(m);\n                found_error = true;\n                cout << \"\\n\\nERRORS FOUND\" << endl;\n                cout << e.what() << endl;\n                dlog << LWARN << \"ERRORS FOUND\";\n                dlog << LWARN << e.what();\n                p.disable();\n            }        \n            remove_running_thread();\n        }\n\n\n\n        template <\n            typename pipe\n            >\n        void threadproc3 (\n            void* param\n        )\n        {\n            add_running_thread();\n            pipe& p = *static_cast<pipe*>(param);\n            try\n            {\n\n                int last = -1;\n                int cur;\n                while (p.dequeue_or_timeout(cur,100000))\n                {\n                    DLIB_TEST(last < cur);\n                    last = cur;\n                }\n                auto_mutex M(m);\n            }\n            catch(exception& e)\n            {\n                auto_mutex M(m);\n                found_error = true;\n                cout << \"\\n\\nERRORS FOUND\" << endl;\n                cout << e.what() << endl;\n                dlog << LWARN << \"ERRORS FOUND\";\n                dlog << LWARN << e.what();\n                p.disable();\n            }        \n            remove_running_thread();\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template<typename in_type, typename out_type>\n    class PipelineProcessor : private dlib::threaded_object\n    {\n    public:\n        PipelineProcessor(\n            dlib::pipe<in_type> & in,\n            dlib::pipe<out_type> & out) :\n            InPipe(in),\n            OutPipe(out),\n            InMsg(),\n            OutMsg() {\n                start();\n            }\n\n        ~PipelineProcessor() {\n            // signal the thread to stop\n            stop();\n            wait();\n        }\n\n    private:\n        dlib::pipe<in_type> & InPipe;\n        dlib::pipe<out_type> & OutPipe;\n\n        in_type InMsg;\n        out_type OutMsg;\n\n        void thread() \n        {\n            while (!should_stop()) {\n                if(InPipe.dequeue_or_timeout(InMsg, 100)) \n                {\n                    // if function signals ready to send OutMsg\n                    while (!OutPipe.enqueue_or_timeout(OutMsg, 100)) \n                    {\n                        // try to send until should stop\n                        if (should_stop()) \n                        {\n                            return;\n                        }\n                    }\n                }\n            }\n        };\n    };\n\n\n    void do_zero_size_test_with_timeouts()\n    {\n        dlog << LINFO << \"in do_zero_size_test_with_timeouts()\";\n        // make sure we can get though this without deadlocking\n        for (int k = 0; k < 10; ++k)\n        {\n            dlib::pipe<int> in_pipe(10);\n            dlib::pipe<float> out_pipe(0);\n            {\n                PipelineProcessor<int, float> pp(in_pipe, out_pipe);\n\n                int in = 1;\n                in_pipe.enqueue(in);\n                in = 2;\n                in_pipe.enqueue(in);\n                in = 3;\n                in_pipe.enqueue(in);\n                // sleep to make sure thread enqueued\n                dlib::sleep(100);\n\n                float out = 1.0f;\n                out_pipe.dequeue(out);\n                dlib::sleep(100);\n            }\n            print_spinner();\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename pipe\n        >\n    void pipe_kernel_test (\n    )\n    /*!\n        requires\n            - pipe is an implementation of pipe/pipe_kernel_abstract.h and\n              is instantiated with int\n        ensures\n            - runs tests on pipe for compliance with the specs \n    !*/\n    {        \n        using namespace pipe_kernel_test_helpers;\n        found_error = false;\n\n\n        print_spinner();\n        pipe test(10), test2(100);\n        pipe test_0(0), test2_0(0);\n        pipe test_1(1), test2_1(1);\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test2.size() == 0);\n        DLIB_TEST(test_0.size() == 0);\n        DLIB_TEST(test2_0.size() == 0);\n        DLIB_TEST(test_1.size() == 0);\n        DLIB_TEST(test2_1.size() == 0);\n\n        DLIB_TEST(test.is_enqueue_enabled() == true);\n        DLIB_TEST(test.is_dequeue_enabled() == true);\n        DLIB_TEST(test.is_enabled() == true);\n\n        test.empty();\n        test2.empty();\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test2.size() == 0);\n\n        test_0.empty();\n        test2_0.empty();\n        DLIB_TEST(test_0.size() == 0);\n        DLIB_TEST(test2_0.size() == 0);\n\n        test_1.empty();\n        test2_1.empty();\n        DLIB_TEST(test_1.size() == 0);\n        DLIB_TEST(test2_1.size() == 0);\n\n\n\n        int a;\n        a = 3;\n        test.enqueue(a);\n        DLIB_TEST(test.size() == 1);\n        a = 5;\n        test.enqueue(a);\n        DLIB_TEST(test.size() == 2);\n\n        a = 0;\n        test.dequeue(a);\n        DLIB_TEST(a == 3);\n        DLIB_TEST(test.size() == 1);\n\n        a = 0;\n        test.dequeue(a);\n        DLIB_TEST(a == 5);\n        DLIB_TEST(test.size() == 0);\n\n\n        print_spinner();\n        {\n            dlog << LINFO << \"starting normal length pipe tests\";\n            create_new_thread(&threadproc1<pipe>,&test);\n            create_new_thread(&threadproc2<pipe>,&test2);\n            create_new_thread(&threadproc2<pipe>,&test2);\n            create_new_thread(&threadproc2<pipe>,&test2);\n\n            for (unsigned long i = 0; i < proc1_count; ++i)\n            {\n                a = i;\n                test.enqueue(a);\n            }\n            DLIB_TEST(test.is_enqueue_enabled() == true);\n            test.disable_enqueue();\n            DLIB_TEST(test.is_enqueue_enabled() == false);\n            for (unsigned long i = 0; i < proc1_count; ++i)\n            {\n                a = i;\n                test.enqueue(a);\n            }\n\n            for (unsigned long i = 0; i < 100000; ++i)\n            {\n                a = i;\n                if (i%2 == 0)\n                    test2.enqueue(a);\n                else\n                    test2.enqueue_or_timeout(a,100000);\n            }\n\n            test2.wait_for_num_blocked_dequeues(3);\n            DLIB_TEST(test2.size() == 0);\n            test2.disable();\n\n            wait_for_threads();\n            DLIB_TEST(test2.size() == 0);\n\n            test2.enable();\n\n            print_spinner();\n\n            create_new_thread(&threadproc3<pipe>,&test2);\n            create_new_thread(&threadproc3<pipe>,&test2);\n\n\n            for (unsigned long i = 0; i < 100000; ++i)\n            {\n                a = i;\n                if (i%2 == 0)\n                    test2.enqueue(a);\n                else\n                    test2.enqueue_or_timeout(a,100000);\n            }\n\n            test2.wait_for_num_blocked_dequeues(2);\n            DLIB_TEST(test2.size() == 0);\n            test2.disable();\n\n            wait_for_threads();\n            DLIB_TEST(test2.size() == 0);\n\n        }\n\n\n        print_spinner();\n        {\n            dlog << LINFO << \"starting 0 length pipe tests\";\n            create_new_thread(&threadproc1<pipe>,&test_0);\n            create_new_thread(&threadproc2<pipe>,&test2_0);\n            create_new_thread(&threadproc2<pipe>,&test2_0);\n            create_new_thread(&threadproc2<pipe>,&test2_0);\n            dlog << LTRACE << \"0: 1\";\n\n            for (unsigned long i = 0; i < proc1_count; ++i)\n            {\n                a = i;\n                test_0.enqueue(a);\n            }\n\n            dlog << LTRACE << \"0: 2\";\n            DLIB_TEST(test_0.is_enqueue_enabled() == true);\n            test_0.disable_enqueue();\n            DLIB_TEST(test_0.is_enqueue_enabled() == false);\n            for (unsigned long i = 0; i < proc1_count; ++i)\n            {\n                a = i;\n                test_0.enqueue(a);\n            }\n\n            dlog << LTRACE << \"0: 3\";\n            for (unsigned long i = 0; i < 100000; ++i)\n            {\n                a = i;\n                if (i%2 == 0)\n                    test2_0.enqueue(a);\n                else\n                    test2_0.enqueue_or_timeout(a,100000);\n            }\n\n            print_spinner();\n            dlog << LTRACE << \"0: 4\";\n            test2_0.wait_for_num_blocked_dequeues(3);\n            DLIB_TEST(test2_0.size() == 0);\n            test2_0.disable();\n\n            wait_for_threads();\n            DLIB_TEST(test2_0.size() == 0);\n\n            dlog << LTRACE << \"0: 5\";\n            test2_0.enable();\n\n\n            create_new_thread(&threadproc3<pipe>,&test2_0);\n            create_new_thread(&threadproc3<pipe>,&test2_0);\n\n\n            for (unsigned long i = 0; i < 20000; ++i)\n            {\n                if ((i%100) == 0)\n                    print_spinner();\n\n                a = i;\n                if (i%2 == 0)\n                    test2_0.enqueue(a);\n                else\n                    test2_0.enqueue_or_timeout(a,100000);\n            }\n\n            dlog << LTRACE << \"0: 6\";\n            test2_0.wait_for_num_blocked_dequeues(2);\n            DLIB_TEST(test2_0.size() == 0);\n            test2_0.disable();\n\n            wait_for_threads();\n            DLIB_TEST(test2_0.size() == 0);\n\n            dlog << LTRACE << \"0: 7\";\n        }\n\n        print_spinner();\n        {\n            dlog << LINFO << \"starting 1 length pipe tests\";\n            create_new_thread(&threadproc1<pipe>,&test_1);\n            create_new_thread(&threadproc2<pipe>,&test2_1);\n            create_new_thread(&threadproc2<pipe>,&test2_1);\n            create_new_thread(&threadproc2<pipe>,&test2_1);\n\n            for (unsigned long i = 0; i < proc1_count; ++i)\n            {\n                a = i;\n                test_1.enqueue(a);\n            }\n            DLIB_TEST(test_1.is_enqueue_enabled() == true);\n            test_1.disable_enqueue();\n            DLIB_TEST(test_1.is_enqueue_enabled() == false);\n            for (unsigned long i = 0; i < proc1_count; ++i)\n            {\n                a = i;\n                test_1.enqueue(a);\n            }\n            print_spinner();\n\n            for (unsigned long i = 0; i < 100000; ++i)\n            {\n                a = i;\n                if (i%2 == 0)\n                    test2_1.enqueue(a);\n                else\n                    test2_1.enqueue_or_timeout(a,100000);\n            }\n\n            test2_1.wait_for_num_blocked_dequeues(3);\n            DLIB_TEST(test2_1.size() == 0);\n            test2_1.disable();\n\n            wait_for_threads();\n            DLIB_TEST(test2_1.size() == 0);\n\n            test2_1.enable();\n\n\n            create_new_thread(&threadproc3<pipe>,&test2_1);\n            create_new_thread(&threadproc3<pipe>,&test2_1);\n\n\n            for (unsigned long i = 0; i < 100000; ++i)\n            {\n                a = i;\n                if (i%2 == 0)\n                    test2_1.enqueue(a);\n                else\n                    test2_1.enqueue_or_timeout(a,100000);\n            }\n\n            test2_1.wait_for_num_blocked_dequeues(2);\n            DLIB_TEST(test2_1.size() == 0);\n            test2_1.disable();\n\n            wait_for_threads();\n            DLIB_TEST(test2_1.size() == 0);\n\n        }\n\n        test.enable_enqueue();\n        test_0.enable_enqueue();\n        test_1.enable_enqueue();\n\n        DLIB_TEST(test.is_enabled());\n        DLIB_TEST(test.is_enqueue_enabled());\n        DLIB_TEST(test_0.is_enabled());\n        DLIB_TEST(test_0.is_enqueue_enabled());\n        DLIB_TEST(test_1.is_enabled());\n        DLIB_TEST(test_1.is_enqueue_enabled());\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test_0.size() == 0);\n        DLIB_TEST(test_1.size() == 0);\n        DLIB_TEST(test.max_size() == 10);\n        DLIB_TEST(test_0.max_size() == 0);\n        DLIB_TEST(test_1.max_size() == 1);\n\n\n        for (int i = 0; i < 100; ++i)\n        {\n            a = 1;\n            test.enqueue_or_timeout(a,0);\n            a = 1;\n            test_0.enqueue_or_timeout(a,0);\n            a = 1;\n            test_1.enqueue_or_timeout(a,0);\n        }\n\n        DLIB_TEST_MSG(test.size() == 10,\"size: \" << test.size() );\n        DLIB_TEST_MSG(test_0.size() == 0,\"size: \" << test.size() );\n        DLIB_TEST_MSG(test_1.size() == 1,\"size: \" << test.size() );\n\n        for (int i = 0; i < 10; ++i)\n        {\n            a = 0;\n            DLIB_TEST(test.enqueue_or_timeout(a,10) == false);\n            a = 0;\n            DLIB_TEST(test_0.enqueue_or_timeout(a,10) == false);\n            a = 0;\n            DLIB_TEST(test_1.enqueue_or_timeout(a,10) == false);\n        }\n\n        DLIB_TEST_MSG(test.size() == 10,\"size: \" << test.size() );\n        DLIB_TEST_MSG(test_0.size() == 0,\"size: \" << test.size() );\n        DLIB_TEST_MSG(test_1.size() == 1,\"size: \" << test.size() );\n\n        for (int i = 0; i < 10; ++i)\n        {\n            a = 0;\n            DLIB_TEST(test.dequeue_or_timeout(a,0) == true);\n            DLIB_TEST(a == 1);\n        }\n\n        DLIB_TEST(test.max_size() == 10);\n        DLIB_TEST(test_0.max_size() == 0);\n        DLIB_TEST(test_1.max_size() == 1);\n\n        a = 0;\n        DLIB_TEST(test_1.dequeue_or_timeout(a,0) == true);\n\n        DLIB_TEST(test.max_size() == 10);\n        DLIB_TEST(test_0.max_size() == 0);\n        DLIB_TEST(test_1.max_size() == 1);\n\n\n        DLIB_TEST_MSG(a == 1,\"a: \" << a);\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test_0.size() == 0);\n        DLIB_TEST(test_1.size() == 0);\n\n        DLIB_TEST(test.dequeue_or_timeout(a,0) == false);\n        DLIB_TEST(test_0.dequeue_or_timeout(a,0) == false);\n        DLIB_TEST(test_1.dequeue_or_timeout(a,0) == false);\n        DLIB_TEST(test.dequeue_or_timeout(a,10) == false);\n        DLIB_TEST(test_0.dequeue_or_timeout(a,10) == false);\n        DLIB_TEST(test_1.dequeue_or_timeout(a,10) == false);\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test_0.size() == 0);\n        DLIB_TEST(test_1.size() == 0);\n\n        DLIB_TEST(found_error == false);\n\n\n\n\n        {\n            test.enable();\n            test.enable_enqueue();\n            test.empty();\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_enabled() == true);\n            DLIB_TEST(test.is_enqueue_enabled() == true);\n            DLIB_TEST(test.is_dequeue_enabled() == true);\n            test.disable_dequeue();\n            dlog << LINFO << \"Make sure disable_dequeue() works right...\";\n            DLIB_TEST(test.is_dequeue_enabled() == false);\n            DLIB_TEST(test.dequeue(a) == false);\n            test.wait_until_empty();\n            a = 4;\n            test.enqueue(a);\n            test.wait_until_empty();\n            test.wait_for_num_blocked_dequeues(4);\n            DLIB_TEST(test.size() == 1);\n            DLIB_TEST(test.dequeue(a) == false);\n            DLIB_TEST(test.dequeue_or_timeout(a,10000) == false);\n            DLIB_TEST(test.size() == 1);\n            a = 0;\n            test.enable_dequeue();\n            DLIB_TEST(test.is_dequeue_enabled() == true);\n            DLIB_TEST(test.dequeue(a) == true);\n            DLIB_TEST(a == 4);\n            test_1.wait_until_empty();\n        }\n        {\n            test_1.enable();\n            test_1.enable_enqueue();\n            test_1.empty();\n            DLIB_TEST(test_1.size() == 0);\n            DLIB_TEST(test_1.is_enabled() == true);\n            DLIB_TEST(test_1.is_enqueue_enabled() == true);\n            DLIB_TEST(test_1.is_dequeue_enabled() == true);\n            test_1.disable_dequeue();\n            dlog << LINFO << \"Make sure disable_dequeue() works right...\";\n            DLIB_TEST(test_1.is_dequeue_enabled() == false);\n            DLIB_TEST(test_1.dequeue(a) == false);\n            a = 4;\n            test_1.wait_for_num_blocked_dequeues(4);\n            test_1.wait_for_num_blocked_dequeues(0);\n            test_1.enqueue(a);\n            test_1.wait_until_empty();\n            DLIB_TEST(test_1.size() == 1);\n            DLIB_TEST(test_1.dequeue(a) == false);\n            DLIB_TEST(test_1.dequeue_or_timeout(a,10000) == false);\n            DLIB_TEST(test_1.size() == 1);\n            a = 0;\n            test_1.enable_dequeue();\n            DLIB_TEST(test_1.is_dequeue_enabled() == true);\n            DLIB_TEST(test_1.dequeue(a) == true);\n            DLIB_TEST(a == 4);\n            test_1.wait_until_empty();\n        }\n\n    }\n\n\n\n\n    class pipe_tester : public tester\n    {\n    public:\n        pipe_tester (\n        ) :\n            tester (\"test_pipe\",\n                    \"Runs tests on the pipe component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            pipe_kernel_test<dlib::pipe<int> >();\n\n            do_zero_size_test_with_timeouts();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/pixel.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/pixel.h>\n#include <dlib/matrix.h>\n#include <dlib/image_io.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.pixel\");\n\n\n    void pixel_test (\n    )\n    /*!\n        ensures\n            - runs tests on pixel objects and functions for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n\n        unsigned char p_gray;\n        unsigned short p_gray16;\n        long p_int;\n        float p_float;\n        signed char p_schar;\n        rgb_pixel p_rgb;\n        hsi_pixel p_hsi, p_hsi2;\n        rgb_alpha_pixel p_rgba;\n\n        assign_pixel(p_int, 0.0f);\n        assign_pixel(p_float, 0.0f);\n        assign_pixel(p_schar, 0);\n\n        assign_pixel(p_gray, -2);\n        assign_pixel(p_rgb,0);\n        assign_pixel(p_hsi, -4);\n        assign_pixel(p_rgba, p_int);\n        assign_pixel(p_gray16,0);\n\n        DLIB_TEST(p_int == 0);\n        DLIB_TEST(p_float == 0);\n        DLIB_TEST(p_schar == 0);\n\n        DLIB_TEST(p_gray == 0);\n        DLIB_TEST(p_gray16 == 0);\n\n        DLIB_TEST(p_rgb.red == 0);\n        DLIB_TEST(p_rgb.green == 0);\n        DLIB_TEST(p_rgb.blue == 0);\n\n        DLIB_TEST(p_rgba.red == 0);\n        DLIB_TEST(p_rgba.green == 0);\n        DLIB_TEST(p_rgba.blue == 0);\n        DLIB_TEST(p_rgba.alpha == 255);\n\n        DLIB_TEST(p_hsi.h == 0);\n        DLIB_TEST(p_hsi.s == 0);\n        DLIB_TEST(p_hsi.i == 0);\n\n        assign_pixel(p_gray,10);\n        assign_pixel(p_gray16,10);\n        assign_pixel(p_rgb,10);\n        assign_pixel(p_hsi,10);\n        assign_pixel(p_rgba,10);\n\n        assign_pixel(p_int, -10);\n        assign_pixel(p_float, -10);\n        assign_pixel(p_schar, -10);\n\n        DLIB_TEST(p_int == -10);\n        DLIB_TEST(p_float == -10);\n        DLIB_TEST(p_schar == -10);\n\n        DLIB_TEST(p_gray == 10);\n        DLIB_TEST(p_gray16 == 10);\n\n        DLIB_TEST(p_rgb.red == 10);\n        DLIB_TEST(p_rgb.green == 10);\n        DLIB_TEST(p_rgb.blue == 10);\n\n        DLIB_TEST(p_rgba.red == 10);\n        DLIB_TEST(p_rgba.green == 10);\n        DLIB_TEST(p_rgba.blue == 10);\n        DLIB_TEST(p_rgba.alpha == 255);\n\n        DLIB_TEST(p_hsi.h == 0);\n        DLIB_TEST(p_hsi.s == 0);\n        DLIB_TEST(p_hsi.i == 10);\n\n        assign_pixel(p_gray16,12345);\n        DLIB_TEST(p_gray16 == 12345);\n\n        assign_pixel(p_float,3.141);\n        DLIB_TEST(p_float == 3.141f);\n\n        p_rgb.red = 255;\n        p_rgb.green = 100;\n        p_rgb.blue = 50;\n\n        p_rgba.alpha = 4;\n        assign_pixel(p_gray,p_rgb);\n        assign_pixel(p_rgb,p_rgb);\n        assign_pixel(p_rgba,p_rgb);\n        assign_pixel(p_hsi,p_rgb);\n\n        assign_pixel(p_float,p_rgb);\n        assign_pixel(p_int,p_rgb);\n        assign_pixel(p_schar,p_rgb);\n\n        DLIB_TEST(p_schar == std::numeric_limits<signed char>::max());\n\n        DLIB_TEST(p_int == (255+100+50)/3);\n        DLIB_TEST_MSG(p_float == (255+100+50)/3, p_float - (255+100+50)/3);\n        DLIB_TEST(p_gray == (255+100+50)/3);\n\n        DLIB_TEST(p_rgb.red == 255);\n        DLIB_TEST(p_rgb.green == 100);\n        DLIB_TEST(p_rgb.blue == 50);\n\n        DLIB_TEST(p_rgba.red == 255);\n        DLIB_TEST(p_rgba.green == 100);\n        DLIB_TEST(p_rgba.blue == 50);\n        DLIB_TEST(p_rgba.alpha == 255);\n\n        DLIB_TEST(p_hsi.i > 0);\n        DLIB_TEST(p_hsi.s > 0);\n        DLIB_TEST(p_hsi.h > 0);\n\n        assign_pixel(p_rgb,0);\n        DLIB_TEST(p_rgb.red == 0);\n        DLIB_TEST(p_rgb.green == 0);\n        DLIB_TEST(p_rgb.blue == 0);\n        assign_pixel(p_rgb, p_hsi);\n\n        DLIB_TEST_MSG(p_rgb.red > 251 ,(int)p_rgb.green);\n        DLIB_TEST_MSG(p_rgb.green > 96 && p_rgb.green < 104,(int)p_rgb.green);\n        DLIB_TEST_MSG(p_rgb.blue > 47 && p_rgb.blue < 53,(int)p_rgb.green);\n\n        assign_pixel(p_hsi2, p_hsi);\n        DLIB_TEST(p_hsi.h == p_hsi2.h);\n        DLIB_TEST(p_hsi.s == p_hsi2.s);\n        DLIB_TEST(p_hsi.i == p_hsi2.i);\n        assign_pixel(p_hsi,0);\n        DLIB_TEST(p_hsi.h == 0);\n        DLIB_TEST(p_hsi.s == 0);\n        DLIB_TEST(p_hsi.i == 0);\n        assign_pixel(p_hsi, p_rgba);\n\n        DLIB_TEST(p_hsi.h == p_hsi2.h);\n        DLIB_TEST(p_hsi.s == p_hsi2.s);\n        DLIB_TEST(p_hsi.i == p_hsi2.i);\n\n        assign_pixel(p_rgba, 100);\n        assign_pixel(p_gray, 10);\n        assign_pixel(p_rgb, 10);\n        assign_pixel(p_hsi, 10);\n\n        assign_pixel(p_schar, 10);\n        assign_pixel(p_float, 10);\n        assign_pixel(p_int, 10);\n\n        p_rgba.alpha = 0;\n        assign_pixel(p_gray, p_rgba);\n        DLIB_TEST(p_gray == 10);\n        assign_pixel(p_schar, p_rgba);\n        DLIB_TEST(p_schar == 10);\n        assign_pixel(p_int, p_rgba);\n        DLIB_TEST(p_int == 10);\n        assign_pixel(p_float, p_rgba);\n        DLIB_TEST(p_float == 10);\n        assign_pixel(p_rgb, p_rgba);\n        DLIB_TEST(p_rgb.red == 10);\n        DLIB_TEST(p_rgb.green == 10);\n        DLIB_TEST(p_rgb.blue == 10);\n\n        assign_pixel(p_hsi, p_rgba);\n        assign_pixel(p_hsi2, p_rgb);\n        DLIB_TEST(p_hsi.h == 0);\n        DLIB_TEST(p_hsi.s == 0);\n        DLIB_TEST_MSG(p_hsi.i < p_hsi2.i+2 && p_hsi.i > p_hsi2.i -2,(int)p_hsi.i << \"   \" << (int)p_hsi2.i);\n\n        assign_pixel(p_rgba, 100);\n        assign_pixel(p_gray, 10);\n        assign_pixel(p_schar, 10);\n        assign_pixel(p_float, 10);\n        assign_pixel(p_int, 10);\n\n        assign_pixel(p_rgb, 10);\n        p_rgba.alpha = 128;\n        assign_pixel(p_gray, p_rgba);\n        assign_pixel(p_schar, p_rgba);\n        assign_pixel(p_float, p_rgba);\n        assign_pixel(p_int, p_rgba);\n        assign_pixel(p_rgb, p_rgba);\n        DLIB_TEST(p_gray == (100 + 10)/2);\n        DLIB_TEST(p_schar == (100 + 10)/2);\n        DLIB_TEST(p_int == (100 + 10)/2);\n        DLIB_TEST(p_float == (100 + 10)/2);\n        DLIB_TEST(p_rgb.red == (100 + 10)/2);\n        DLIB_TEST(p_rgb.green == (100 + 10)/2);\n        DLIB_TEST(p_rgb.blue == (100 + 10)/2);\n\n        assign_pixel(p_rgba, 100);\n        assign_pixel(p_gray, 10);\n        assign_pixel(p_schar, 10);\n        assign_pixel(p_int, 10);\n        assign_pixel(p_float, 10);\n        assign_pixel(p_rgb, 10);\n        DLIB_TEST(p_rgba.alpha == 255);\n        assign_pixel(p_gray, p_rgba);\n        assign_pixel(p_schar, p_rgba);\n        assign_pixel(p_int, p_rgba);\n        assign_pixel(p_float, p_rgba);\n        assign_pixel(p_rgb, p_rgba);\n        DLIB_TEST(p_gray == 100);\n        DLIB_TEST(p_schar == 100);\n        DLIB_TEST(p_int == 100);\n        DLIB_TEST(p_float == 100);\n        DLIB_TEST(p_rgb.red == 100);\n        DLIB_TEST(p_rgb.green == 100);\n        DLIB_TEST(p_rgb.blue == 100);\n\n\n        p_rgb.red = 1;\n        p_rgb.green = 2;\n        p_rgb.blue = 3;\n\n        p_rgba.red = 4;\n        p_rgba.green = 5;\n        p_rgba.blue = 6;\n        p_rgba.alpha = 7;\n\n        p_gray = 8;\n        p_schar = 8;\n        p_int = 8;\n        p_float = 8;\n\n        p_hsi.h = 9;\n        p_hsi.s = 10;\n        p_hsi.i = 11;\n\n        ostringstream sout;\n        serialize(p_rgb,sout);\n        serialize(p_rgba,sout);\n        serialize(p_gray,sout);\n        serialize(p_schar,sout);\n        serialize(p_int,sout);\n        serialize(p_float,sout);\n        serialize(p_hsi,sout);\n\n        assign_pixel(p_rgb,0);\n        assign_pixel(p_rgba,0);\n        assign_pixel(p_gray,0);\n        assign_pixel(p_schar,0);\n        assign_pixel(p_int,0);\n        assign_pixel(p_float,0);\n        assign_pixel(p_hsi,0);\n\n        istringstream sin(sout.str());\n\n        deserialize(p_rgb,sin);\n        deserialize(p_rgba,sin);\n        deserialize(p_gray,sin);\n        deserialize(p_schar,sin);\n        deserialize(p_int,sin);\n        deserialize(p_float,sin);\n        deserialize(p_hsi,sin);\n\n        DLIB_TEST(p_rgb.red == 1);\n        DLIB_TEST(p_rgb.green == 2);\n        DLIB_TEST(p_rgb.blue == 3);\n\n        DLIB_TEST(p_rgba.red == 4);\n        DLIB_TEST(p_rgba.green == 5);\n        DLIB_TEST(p_rgba.blue == 6);\n        DLIB_TEST(p_rgba.alpha == 7);\n\n        DLIB_TEST(p_gray == 8);\n        DLIB_TEST(p_schar == 8);\n        DLIB_TEST(p_int == 8);\n        DLIB_TEST(p_float == 8);\n\n        DLIB_TEST(p_hsi.h == 9);\n        DLIB_TEST(p_hsi.s == 10);\n        DLIB_TEST(p_hsi.i == 11);\n\n        {\n            matrix<double,1,1> m_gray, m_schar, m_int, m_float;\n            matrix<double,3,1> m_rgb, m_hsi;\n\n            m_gray = pixel_to_vector<double>(p_gray);\n            m_schar = pixel_to_vector<double>(p_schar);\n            m_int = pixel_to_vector<double>(p_int);\n            m_float = pixel_to_vector<double>(p_float);\n\n            m_hsi = pixel_to_vector<double>(p_hsi);\n            m_rgb = pixel_to_vector<double>(p_rgb);\n\n            DLIB_TEST(m_gray(0) == p_gray);\n            DLIB_TEST(m_float(0) == p_float);\n            DLIB_TEST(m_int(0) == p_int);\n            DLIB_TEST(m_schar(0) == p_schar);\n\n            DLIB_TEST(m_rgb(0) == p_rgb.red);\n            DLIB_TEST(m_rgb(1) == p_rgb.green);\n            DLIB_TEST(m_rgb(2) == p_rgb.blue);\n            DLIB_TEST(m_hsi(0) == p_hsi.h);\n            DLIB_TEST(m_hsi(1) == p_hsi.s);\n            DLIB_TEST(m_hsi(2) == p_hsi.i);\n\n            DLIB_TEST(p_rgb.red == 1);\n            DLIB_TEST(p_rgb.green == 2);\n            DLIB_TEST(p_rgb.blue == 3);\n\n            DLIB_TEST(p_rgba.red == 4);\n            DLIB_TEST(p_rgba.green == 5);\n            DLIB_TEST(p_rgba.blue == 6);\n            DLIB_TEST(p_rgba.alpha == 7);\n\n            DLIB_TEST(p_gray == 8);\n            DLIB_TEST(p_int == 8);\n            DLIB_TEST(p_float == 8);\n            DLIB_TEST(p_schar == 8);\n\n            DLIB_TEST(p_hsi.h == 9);\n            DLIB_TEST(p_hsi.s == 10);\n            DLIB_TEST(p_hsi.i == 11);\n\n            assign_pixel(p_gray,0);\n            assign_pixel(p_hsi,0);\n            assign_pixel(p_rgb,0);\n\n            vector_to_pixel(p_gray, m_gray);\n            vector_to_pixel(p_hsi, m_hsi);\n            vector_to_pixel(p_rgb, m_rgb);\n\n            DLIB_TEST(p_rgb.red == 1);\n            DLIB_TEST(p_rgb.green == 2);\n            DLIB_TEST(p_rgb.blue == 3);\n\n            DLIB_TEST(p_rgba.red == 4);\n            DLIB_TEST(p_rgba.green == 5);\n            DLIB_TEST(p_rgba.blue == 6);\n            DLIB_TEST(p_rgba.alpha == 7);\n\n            DLIB_TEST(p_gray == 8);\n\n            DLIB_TEST(p_hsi.h == 9);\n            DLIB_TEST(p_hsi.s == 10);\n            DLIB_TEST(p_hsi.i == 11);\n        }\n\n\n\n\n        {\n            unsigned char p_gray;\n            unsigned short p_gray16;\n            long p_int;\n            float p_float;\n            signed char p_schar;\n            rgb_pixel p_rgb;\n            hsi_pixel p_hsi, p_hsi2;\n            rgb_alpha_pixel p_rgba;\n\n\n            assign_pixel(p_gray, 0);\n            assign_pixel(p_gray16, 0);\n            assign_pixel(p_int, 0);\n            assign_pixel(p_float, 0);\n            assign_pixel(p_schar, 0);\n            assign_pixel(p_rgb, 0);\n            assign_pixel(p_hsi, 0);\n\n\n            assign_pixel(p_gray, 100);\n            assign_pixel(p_schar, p_gray);\n            DLIB_TEST(p_schar == 100);\n\n            assign_pixel(p_gray, 200);\n            assign_pixel(p_schar, p_gray);\n            DLIB_TEST(p_schar == std::numeric_limits<signed char>::max());\n\n            assign_pixel(p_int, p_gray);\n            DLIB_TEST(p_int == 200);\n\n            assign_pixel(p_float, p_gray);\n            DLIB_TEST(p_float == 200);\n\n            assign_pixel(p_rgb, p_float);\n            DLIB_TEST(p_rgb.red == 200);\n            DLIB_TEST(p_rgb.green == 200);\n            DLIB_TEST(p_rgb.blue == 200);\n\n            p_schar = 0;\n            assign_pixel(p_schar, p_rgb);\n            DLIB_TEST(p_schar == std::numeric_limits<signed char>::max());\n\n\n            p_schar = -10;\n            assign_pixel(p_float, p_schar);\n            DLIB_TEST(p_float == -10);\n            assign_pixel(p_int, p_schar);\n            DLIB_TEST(p_int == -10);\n            assign_pixel(p_schar, p_schar);\n            DLIB_TEST(p_schar == -10);\n            assign_pixel(p_gray, p_schar);\n            DLIB_TEST(p_gray == 0);\n\n            assign_pixel(p_rgb, p_schar);\n            DLIB_TEST(p_rgb.red == 0);\n            DLIB_TEST(p_rgb.green == 0);\n            DLIB_TEST(p_rgb.blue == 0);\n            \n            assign_pixel(p_gray16, p_schar);\n            DLIB_TEST(p_gray16 == 0);\n\n            DLIB_TEST(get_pixel_intensity(p_float) == -10);\n            DLIB_TEST(get_pixel_intensity(p_int) == -10);\n            DLIB_TEST(get_pixel_intensity(p_schar) == -10);\n            DLIB_TEST(get_pixel_intensity(p_rgb) == 0);\n            DLIB_TEST(get_pixel_intensity(p_gray16) == 0);\n\n            p_rgb.red = 100;\n            p_rgb.green = 100;\n            p_rgb.blue = 100;\n            DLIB_TEST(get_pixel_intensity(p_rgb) == 100);\n            p_rgb.red = 1;\n            p_rgb.green = 2;\n            p_rgb.blue = 3;\n            DLIB_TEST(get_pixel_intensity(p_rgb) == 2);\n            p_rgba.alpha = 100;\n            p_rgba.red = 100;\n            p_rgba.green = 100;\n            p_rgba.blue = 100;\n            DLIB_TEST(get_pixel_intensity(p_rgba) == 100);\n            p_rgba.red = 1;\n            p_rgba.green = 2;\n            p_rgba.blue = 3;\n            p_rgba.alpha = 0;\n            DLIB_TEST(get_pixel_intensity(p_rgba) == 2);\n            p_hsi.h = 123;\n            p_hsi.s = 100;\n            p_hsi.i = 84;\n            DLIB_TEST(get_pixel_intensity(p_hsi) == 84);\n\n            p_float = 54.25;\n            DLIB_TEST(get_pixel_intensity(p_float) == 54.25);\n\n            assign_pixel(p_gray, p_float);\n            DLIB_TEST(get_pixel_intensity(p_gray) == 54);\n\n            assign_pixel_intensity(p_float, -1000);\n            assign_pixel_intensity(p_schar, -100);\n            assign_pixel_intensity(p_int, -10000);\n            assign_pixel_intensity(p_gray, -100);\n\n            p_rgba.red = 10;\n            p_rgba.green = 10;\n            p_rgba.blue = 10;\n            p_rgba.alpha = 0;\n            DLIB_TEST_MSG(get_pixel_intensity(p_rgba) == 10, (int)get_pixel_intensity(p_rgba));\n            assign_pixel_intensity(p_rgba, 2);\n            DLIB_TEST_MSG(p_rgba.red == 2, (int)p_rgba.red);\n            DLIB_TEST_MSG(p_rgba.green == 2, (int)p_rgba.green);\n            DLIB_TEST_MSG(p_rgba.blue == 2, (int)p_rgba.blue);\n            DLIB_TEST_MSG(p_rgba.alpha == 0, (int)p_rgba.alpha);\n            DLIB_TEST_MSG(get_pixel_intensity(p_rgba) == 2, (int)get_pixel_intensity(p_rgba));\n\n            DLIB_TEST(p_float == -1000);\n            DLIB_TEST(get_pixel_intensity(p_float) == -1000);\n            DLIB_TEST(p_schar == -100);\n            DLIB_TEST(get_pixel_intensity(p_schar) == -100);\n            DLIB_TEST(p_int == -10000);\n            DLIB_TEST(get_pixel_intensity(p_int) == -10000);\n            DLIB_TEST(p_gray == 0);\n            assign_pixel_intensity(p_gray, 1000);\n            DLIB_TEST(p_gray == 255);\n            DLIB_TEST(get_pixel_intensity(p_gray) == 255);\n\n            assign_pixel_intensity(p_float, p_gray);\n            DLIB_TEST(p_float == 255);\n            DLIB_TEST(get_pixel_intensity(p_float) == 255);\n\n            assign_pixel_intensity(p_int, p_gray);\n            DLIB_TEST(p_int == 255);\n            DLIB_TEST(get_pixel_intensity(p_int) == 255);\n\n\n            p_float = 1e10;\n            assign_pixel(p_schar, p_float);\n            DLIB_TEST(p_schar == std::numeric_limits<signed char>::max());\n\n            p_float = -1e10;\n            assign_pixel(p_schar, p_float);\n            DLIB_TEST(p_schar == std::numeric_limits<signed char>::min());\n\n            double p_double = 1e200;\n            assign_pixel(p_float, p_double);\n            DLIB_TEST(p_float == std::numeric_limits<float>::max());\n\n            p_double = -1e200;\n            assign_pixel(p_float, p_double);\n            DLIB_TEST(p_float == -std::numeric_limits<float>::max());\n        }\n\n\n    }\n\n\n\n\n    class pixel_tester : public tester\n    {\n    public:\n        pixel_tester (\n        ) :\n            tester (\"test_pixel\",\n                    \"Runs tests on the pixel objects and functions.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            pixel_test();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/probabilistic.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n#include \"checkerboard.h\"\n#include <dlib/statistics.h>\n\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.probabilistic\");\n\n// ----------------------------------------------------------------------------------------\n\n    class test_probabilistic : public tester\n    {\n    public:\n        test_probabilistic (\n        ) :\n            tester (\"test_probabilistic\",\n                    \"Runs tests on the probabilistic trainer adapter.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n\n\n            typedef double scalar_type;\n            typedef matrix<scalar_type,2,1> sample_type;\n\n            std::vector<sample_type> x;\n            std::vector<matrix<double,0,1> > x_linearized;\n            std::vector<scalar_type> y;\n\n            get_checkerboard_problem(x,y, 1000, 2);\n\n            random_subset_selector<sample_type> rx;\n            random_subset_selector<scalar_type> ry;\n            rx.set_max_size(x.size());\n            ry.set_max_size(x.size());\n\n            dlog << LINFO << \"pos labels: \"<< sum(mat(y) == +1);\n            dlog << LINFO << \"neg labels: \"<< sum(mat(y) == -1);\n\n            for (unsigned long i = 0; i < x.size(); ++i)\n            {\n                rx.add(x[i]);\n                ry.add(y[i]);\n            }\n\n            const scalar_type gamma = 2.0;\n\n            typedef radial_basis_kernel<sample_type> kernel_type;\n\n            krr_trainer<kernel_type> krr_trainer;\n            krr_trainer.use_classification_loss_for_loo_cv();\n            krr_trainer.set_kernel(kernel_type(gamma));\n            krr_trainer.set_basis(randomly_subsample(x, 100));\n            probabilistic_decision_function<kernel_type> df;\n\n            dlog << LINFO << \"cross validation: \" << cross_validate_trainer(krr_trainer, rx,ry, 4);\n            print_spinner();\n\n            running_stats<scalar_type> rs_pos, rs_neg;\n\n            print_spinner();\n            df = probabilistic(krr_trainer,3).train(x, y);\n            for (unsigned long i = 0; i < x.size(); ++i)\n            {\n                if (y[i] > 0)\n                    rs_pos.add(df(x[i]));\n                else\n                    rs_neg.add(df(x[i]));\n            }\n            dlog << LINFO << \"rs_pos.mean(): \"<< rs_pos.mean();\n            dlog << LINFO << \"rs_neg.mean(): \"<< rs_neg.mean();\n            DLIB_TEST_MSG(rs_pos.mean() > 0.95, rs_pos.mean());\n            DLIB_TEST_MSG(rs_neg.mean() < 0.05, rs_neg.mean());\n            rs_pos.clear();\n            rs_neg.clear();\n\n\n            print_spinner();\n            df = probabilistic(krr_trainer,3).train(rx, ry);\n            for (unsigned long i = 0; i < x.size(); ++i)\n            {\n                if (y[i] > 0)\n                    rs_pos.add(df(x[i]));\n                else\n                    rs_neg.add(df(x[i]));\n            }\n            dlog << LINFO << \"rs_pos.mean(): \"<< rs_pos.mean();\n            dlog << LINFO << \"rs_neg.mean(): \"<< rs_neg.mean();\n            DLIB_TEST_MSG(rs_pos.mean() > 0.95, rs_pos.mean());\n            DLIB_TEST_MSG(rs_neg.mean() < 0.05, rs_neg.mean());\n            rs_pos.clear();\n            rs_neg.clear();\n\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/pyramid_down.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/image_transforms.h>\n//#include <dlib/gui_widgets.h>\n#include <dlib/rand.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.pyramid_down\");\n\n// ----------------------------------------------------------------------------------------\n\nvoid test_pyramid_down_grayscale()\n{\n    array2d<unsigned char> img, down;\n    pyramid_down<2> pyr;\n\n    img.set_size(300,264);\n\n    assign_all_pixels(img, 10);\n\n    pyr(img, down);\n\n    DLIB_TEST(std::abs(down.nr()*2 - img.nr()) < 5);\n    DLIB_TEST(std::abs(down.nc()*2 - img.nc()) < 5);\n\n    rectangle rect1 = get_rect(img);\n    rectangle rect2 = pyr.rect_up(get_rect(down));\n    double overlap = rect1.intersect(rect2).area() / (double)(rect1 + rect2).area();\n    DLIB_TEST(overlap > 0.95);\n\n    rect1 = get_rect(down);\n    rect2 = pyr.rect_down(get_rect(img));\n    overlap = rect1.intersect(rect2).area() / (double)(rect1 + rect2).area();\n    DLIB_TEST(overlap > 0.95);\n\n    DLIB_TEST(min(mat(down)) == 10);\n    DLIB_TEST(max(mat(down)) == 10);\n}\n\nvoid test_pyramid_down_rgb()\n{\n    array2d<rgb_pixel> img;\n    array2d<bgr_pixel> down;\n    pyramid_down<2> pyr;\n\n    img.set_size(231, 351);\n\n    assign_all_pixels(img, rgb_pixel(1,2,3));\n\n    pyr(img, down);\n\n    DLIB_TEST(std::abs(down.nr()*2 - img.nr()) < 5);\n    DLIB_TEST(std::abs(down.nc()*2 - img.nc()) < 5);\n\n    rectangle rect1 = get_rect(img);\n    rectangle rect2 = pyr.rect_up(get_rect(down));\n    double overlap = rect1.intersect(rect2).area() / (double)(rect1 + rect2).area();\n    DLIB_TEST(overlap > 0.95);\n\n    rect1 = get_rect(down);\n    rect2 = pyr.rect_down(get_rect(img));\n    overlap = rect1.intersect(rect2).area() / (double)(rect1 + rect2).area();\n    DLIB_TEST(overlap > 0.95);\n\n    bool pixels_match = true;\n    for (long r = 0; r < down.nr(); ++r)\n    {\n        for (long c = 0; c < down.nc(); ++c)\n        {\n            if (down[r][c].red != 1 ||\n                down[r][c].green != 2 ||\n                down[r][c].blue != 3 )\n            {\n                pixels_match = false;\n            }\n        }\n    }\n    DLIB_TEST(pixels_match);\n}\n\n//  ----------------------------------------------------------------------------\n\ntemplate <typename image_type>\nrgb_pixel mean_pixel (\n    const image_type& img,\n    const rectangle& rect\n)\n{\n    long red = 0;\n    long green = 0;\n    long blue = 0;\n    for (long r = rect.top(); r <= rect.bottom(); ++r)\n    {\n        for (long c = rect.left(); c <= rect.right(); ++c)\n        {\n            red += img[r][c].red;\n            green += img[r][c].green;\n            blue += img[r][c].blue;\n        }\n    }\n\n    const long n = rect.area();\n    return rgb_pixel(red/n, green/n, blue/n);\n}\n\n//  ----------------------------------------------------------------------------\n\ntemplate <typename pyramid_down_type>\nvoid test_pyramid_down_rgb2()\n{\n    array2d<rgb_pixel> img, img3;\n    array2d<unsigned char> img2, img4;\n\n\n    img.set_size(300,400);\n    assign_all_pixels(img, 0);\n    rectangle rect1 = centered_rect( 10,10, 14, 14);\n    rectangle rect2 = centered_rect( 100,100, 34, 42);\n    rectangle rect3 = centered_rect( 310,215, 65, 21);\n\n    fill_rect(img, rect1, rgb_pixel(255,0,0));\n    fill_rect(img, rect2, rgb_pixel(0,255,0));\n    fill_rect(img, rect3, rgb_pixel(0,0,255));\n\n\n\n    pyramid_down_type pyr;\n\n    pyr(img, img2);\n    pyr(img, img3);\n\n\n    DLIB_TEST(((rect1.tl_corner() - pyr.rect_down(pyr.rect_up(rect1,2),2).tl_corner()).length()) < 1);\n    DLIB_TEST(((rect1.br_corner() - pyr.rect_down(pyr.rect_up(rect1,2),2).br_corner()).length()) < 1);\n    DLIB_TEST(((rect2.tl_corner() - pyr.rect_down(pyr.rect_up(rect2,2),2).tl_corner()).length()) < 1);\n    DLIB_TEST(((rect2.br_corner() - pyr.rect_down(pyr.rect_up(rect2,2),2).br_corner()).length()) < 1);\n    DLIB_TEST(((rect3.tl_corner() - pyr.rect_down(pyr.rect_up(rect3,2),2).tl_corner()).length()) < 1);\n    DLIB_TEST(((rect3.br_corner() - pyr.rect_down(pyr.rect_up(rect3,2),2).br_corner()).length()) < 1);\n\n    rect1 = shrink_rect(pyr.rect_down(rect1),1);\n    rect2 = shrink_rect(pyr.rect_down(rect2),1);\n    rect3 = shrink_rect(pyr.rect_down(rect3),1);\n\n    DLIB_TEST(rect1.area() > 10);\n    DLIB_TEST(rect2.area() > 10);\n    DLIB_TEST(rect3.area() > 10);\n\n    /*\n    image_window my_window(img);\n    image_window win2(img2);\n    image_window win3(img3);\n    win2.add_overlay(image_window::overlay_rect(rect1, rgb_pixel(255,0,0)));\n    win2.add_overlay(image_window::overlay_rect(rect2, rgb_pixel(255,0,0)));\n    win2.add_overlay(image_window::overlay_rect(rect3, rgb_pixel(255,0,0)));\n    win3.add_overlay(image_window::overlay_rect(rect1, rgb_pixel(255,0,0)));\n    win3.add_overlay(image_window::overlay_rect(rect2, rgb_pixel(255,0,0)));\n    win3.add_overlay(image_window::overlay_rect(rect3, rgb_pixel(255,0,0)));\n    */\n\n\n    DLIB_TEST(std::abs((int)mean(subm(matrix_cast<long>(mat(img2)),rect1)) - 255/3) < 3);\n    DLIB_TEST(std::abs((int)mean(subm(matrix_cast<long>(mat(img2)),rect2)) - 255/3) < 3);\n    DLIB_TEST(std::abs((int)mean(subm(matrix_cast<long>(mat(img2)),rect3)) - 255/3) < 3);\n    assign_image(img4, img);\n    DLIB_TEST(std::abs((int)mean(mat(img4)) - mean(mat(img2))) < 2);\n\n\n    rgb_pixel mean1 = mean_pixel(img3, rect1);\n    rgb_pixel mean2 = mean_pixel(img3, rect2);\n    rgb_pixel mean3 = mean_pixel(img3, rect3);\n    rgb_pixel mean_all_true = mean_pixel(img, get_rect(img));\n    rgb_pixel mean_all = mean_pixel(img3, get_rect(img3));\n    DLIB_TEST(mean1.red > 250);\n    DLIB_TEST(mean1.green < 3);\n    DLIB_TEST(mean1.blue < 3);\n\n    DLIB_TEST(mean2.red < 3);\n    DLIB_TEST(mean2.green > 250);\n    DLIB_TEST(mean2.blue < 3);\n\n    DLIB_TEST(mean3.red < 3);\n    DLIB_TEST(mean3.green < 3);\n    DLIB_TEST(mean3.blue > 250);\n\n    DLIB_TEST(std::abs((int)mean_all_true.red - mean_all.red) < 1);\n    DLIB_TEST(std::abs((int)mean_all_true.green - mean_all.green) < 1);\n    DLIB_TEST(std::abs((int)mean_all_true.blue - mean_all.blue) < 1);\n\n    //my_window.wait_until_closed();\n}\n\n\n// ----------------------------------------------------------------------------------------\n\ntemplate <typename pyramid_down_type>\nvoid test_pyramid_down_grayscale2()\n{\n    array2d<unsigned char> img, img3;\n    array2d<unsigned char> img2, img4;\n\n\n    img.set_size(300,400);\n    assign_all_pixels(img, 0);\n    rectangle rect1 = centered_rect( 10,10, 14, 14);\n    rectangle rect2 = centered_rect( 100,100, 34, 42);\n    rectangle rect3 = centered_rect( 310,215, 65, 21);\n\n    fill_rect(img, rect1, 255);\n    fill_rect(img, rect2, 170);\n    fill_rect(img, rect3, 100);\n\n\n\n    pyramid_down_type pyr;\n\n    pyr(img, img2);\n    pyr(img, img3);\n\n\n    DLIB_TEST(((rect1.tl_corner() - pyr.rect_down(pyr.rect_up(rect1,2),2).tl_corner()).length()) < 1);\n    DLIB_TEST(((rect1.br_corner() - pyr.rect_down(pyr.rect_up(rect1,2),2).br_corner()).length()) < 1);\n    DLIB_TEST(((rect2.tl_corner() - pyr.rect_down(pyr.rect_up(rect2,2),2).tl_corner()).length()) < 1);\n    DLIB_TEST(((rect2.br_corner() - pyr.rect_down(pyr.rect_up(rect2,2),2).br_corner()).length()) < 1);\n    DLIB_TEST(((rect3.tl_corner() - pyr.rect_down(pyr.rect_up(rect3,2),2).tl_corner()).length()) < 1);\n    DLIB_TEST(((rect3.br_corner() - pyr.rect_down(pyr.rect_up(rect3,2),2).br_corner()).length()) < 1);\n\n    rect1 = shrink_rect(pyr.rect_down(rect1),1);\n    rect2 = shrink_rect(pyr.rect_down(rect2),1);\n    rect3 = shrink_rect(pyr.rect_down(rect3),1);\n\n    DLIB_TEST(rect1.area() > 10);\n    DLIB_TEST(rect2.area() > 10);\n    DLIB_TEST(rect3.area() > 10);\n\n    /*\n    image_window my_window(img);\n    image_window win2(img2);\n    image_window win3(img3);\n    win2.add_overlay(image_window::overlay_rect(rect1, rgb_pixel(255,0,0)));\n    win2.add_overlay(image_window::overlay_rect(rect2, rgb_pixel(255,0,0)));\n    win2.add_overlay(image_window::overlay_rect(rect3, rgb_pixel(255,0,0)));\n    win3.add_overlay(image_window::overlay_rect(rect1, rgb_pixel(255,0,0)));\n    win3.add_overlay(image_window::overlay_rect(rect2, rgb_pixel(255,0,0)));\n    win3.add_overlay(image_window::overlay_rect(rect3, rgb_pixel(255,0,0)));\n    */\n\n\n    DLIB_TEST(std::abs((int)mean(subm(matrix_cast<long>(mat(img2)),rect1)) - 255) < 3);\n    DLIB_TEST(std::abs((int)mean(subm(matrix_cast<long>(mat(img2)),rect2)) - 170) < 3);\n    DLIB_TEST(std::abs((int)mean(subm(matrix_cast<long>(mat(img2)),rect3)) - 100) < 3);\n    assign_image(img4, img);\n    DLIB_TEST(std::abs((int)mean(mat(img4)) - mean(mat(img2))) < 2);\n\n\n    //my_window.wait_until_closed();\n\n\n\n    // make sure the coordinate mapping is invertible when it should be\n    for (int l = 0; l < 4; ++l)\n    {\n        for (long x = -10; x <= 10; ++x)\n        {\n            for (long y = -10; y <= 10; ++y)\n            {\n                DLIB_TEST_MSG(point(pyr.point_down(pyr.point_up(point(x,y),l),l)) == point(x,y), \n                    point(x,y) << \"  \" << pyr.point_up(point(x,y),l) << \"   \" << pyr.point_down(pyr.point_up(point(x,y),l),l));\n                DLIB_TEST_MSG(point(pyr.point_down(point(pyr.point_up(point(x,y),l)),l)) == point(x,y), \n                    point(x,y) << \"  \" << pyr.point_up(point(x,y),l) << \"   \" << pyr.point_down(point(pyr.point_up(point(x,y),l)),l));\n            }\n        }\n    }\n}\n\n\n// ----------------------------------------------------------------------------------------\n\ntemplate <typename pyramid_down_type>\nvoid test_pyramid_down_small_sizes()\n{\n    // just make sure it doesn't get messed up with small images.  This test\n    // is only really useful if asserts are enabled.\n    pyramid_down_type pyr;\n\n    for (int size = 0; size < 20; ++size)\n    {\n        array2d<unsigned char> img1(size,size);\n        array2d<rgb_pixel> img2(size,size);\n\n        array2d<unsigned char> out1;\n        array2d<rgb_pixel> out2;\n\n        assign_all_pixels(img1, 0);\n        assign_all_pixels(img2, 0);\n\n        pyr(img1, out1);\n        pyr(img2, out2);\n    }\n}\n\n// ----------------------------------------------------------------------------------------\n\n\n    class test_pyramid_down : public tester\n    {\n    public:\n        test_pyramid_down (\n        ) :\n            tester (\"test_pyramid_down\",\n                    \"Runs tests on the pyramid_down() function.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            test_pyramid_down_grayscale();\n            print_spinner();\n            test_pyramid_down_rgb();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_small_sizes<pyramid_down<2> >();\";\n            test_pyramid_down_small_sizes<pyramid_down<2> >();\n            dlog << LINFO << \"call test_pyramid_down_small_sizes<pyramid_down<3> >();\";\n            test_pyramid_down_small_sizes<pyramid_down<3> >();\n            dlog << LINFO << \"call test_pyramid_down_small_sizes<pyramid_down<4> >();\";\n            test_pyramid_down_small_sizes<pyramid_down<4> >();\n            dlog << LINFO << \"call test_pyramid_down_small_sizes<pyramid_down<5> >();\";\n            test_pyramid_down_small_sizes<pyramid_down<5> >();\n            dlog << LINFO << \"call test_pyramid_down_small_sizes<pyramid_disable>();\";\n            test_pyramid_down_small_sizes<pyramid_disable>();\n            dlog << LINFO << \"call test_pyramid_down_small_sizes<pyramid_down<9> >();\";\n            test_pyramid_down_small_sizes<pyramid_down<9> >();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_rgb2<pyramid_down<2> >();\";\n            test_pyramid_down_rgb2<pyramid_down<2> >();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_rgb2<pyramid_down<3> >();\";\n            test_pyramid_down_rgb2<pyramid_down<3> >();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_rgb2<pyramid_down<4> >();\";\n            test_pyramid_down_rgb2<pyramid_down<4> >();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_rgb2<pyramid_down<5> >();\";\n            test_pyramid_down_rgb2<pyramid_down<5> >();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_rgb2<pyramid_down<8> >();\";\n            test_pyramid_down_rgb2<pyramid_down<8> >();\n\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_grayscale2<pyramid_down<2> >();\";\n            test_pyramid_down_grayscale2<pyramid_down<2> >();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_grayscale2<pyramid_down<3> >();\";\n            test_pyramid_down_grayscale2<pyramid_down<3> >();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_grayscale2<pyramid_down<4> >();\";\n            test_pyramid_down_grayscale2<pyramid_down<4> >();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_grayscale2<pyramid_down<5> >();\";\n            test_pyramid_down_grayscale2<pyramid_down<5> >();\n\n            print_spinner();\n            dlog << LINFO << \"call test_pyramid_down_grayscale2<pyramid_down<6> >();\";\n            test_pyramid_down_grayscale2<pyramid_down<6> >();\n        }\n    } a;\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/queue.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/queue.h>\n#include <dlib/memory_manager_global.h>\n\n#include \"tester.h\"\n\n// This is called an unnamed-namespace and it has the effect of making everything inside this file \"private\"\n// so that everything you declare will have static linkage.  Thus we won't have any multiply\n// defined symbol errors coming out of the linker when we try to compile the test suite.\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    // Declare the logger we will use in this test.  The name of the tester \n    // should start with \"test.\"\n    logger dlog(\"test.queue\");\n\n    template <\n        typename queue\n        >\n    void queue_sort_test (\n    )\n    /*!\n        requires\n            - queue is an implementation of queue/queue_sort_abstract.h \n              is instantiated with int\n        ensures\n            - runs tests on queue for compliance with the specs\n    !*/\n    {        \n\n        print_spinner();\n        srand(static_cast<unsigned int>(time(0)));\n\n        queue q,q2;\n\n        enumerable<int>& e = q;\n\n        // I will use these DLIB_TEST_MSG macros to assert that conditions are true.  If they are\n        // false then it means we have detected an error in the queue object.  CASSERT\n        // will then throw an exception which we will catch at the end of this function and\n        // report as an error/failed test.\n        DLIB_TEST(e.at_start() == true);\n\n        int a = 0;\n\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q.at_start() == true);\n        DLIB_TEST(q.current_element_valid() == false);\n\n        q.sort();\n\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q.at_start() == true);\n        DLIB_TEST(q.current_element_valid() == false);\n\n        DLIB_TEST (q.move_next() == false);\n        DLIB_TEST (q.move_next() == false);\n        DLIB_TEST (q.move_next() == false);\n        DLIB_TEST (q.move_next() == false);\n        DLIB_TEST (q.move_next() == false);\n        DLIB_TEST (q.move_next() == false);\n\n\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q.at_start() == false);\n        DLIB_TEST(q.current_element_valid() == false);\n\n\n        q.reset();\n\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q.at_start() == true);\n        DLIB_TEST(q.current_element_valid() == false);\n\n\n\n\n\n\n\n\n\n\n\n        q.clear();\n        q2.clear();\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q2.size() == 0);\n\n        for (int i = 0; i < 10000; ++i)\n        {\n            int a = i;\n            q.enqueue(a);\n        }\n\n        q2.cat(q);\n\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q2.size() == 10000);\n\n        int g = 0;\n        while (q2.move_next())\n        {\n            DLIB_TEST_MSG(q2.element() == g,g);\n            ++g;\n        }\n\n        for (int i = 0;i < 10000; ++i)\n        {\n            int a = 0;\n            q2.dequeue(a);\n            DLIB_TEST(a == i);\n        }\n\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q2.size() == 0);\n        q.clear();\n        q2.clear();\n\n\n\n\n        print_spinner();\n\n\n        dlog << LTRACE << \"creating big pre-sorted queue\";\n        q.clear();\n        DLIB_TEST(q.size() == 0);\n\n        for (int i = 0; i < 10000; ++i)\n        {\n            int a = i;\n            q.enqueue(a);\n        }\n\n        dlog << LTRACE << \"sorting already sorted queue\";\n        q.sort();\n\n\n        dlog << LTRACE << \"done sorting, checking the results\";\n        for (int i = 0; i < 10000; ++i)\n        {\n            q.dequeue(a);\n            DLIB_TEST(a == i);\n        }\n\n\n        q.clear();\n        dlog << LTRACE << \"done with the big pre-sorted queue test\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n        q.clear();\n        q2.clear();\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q2.size() == 0);\n\n        for (int i = 0; i < 1; ++i)\n        {\n            int a = i;\n            q.enqueue(a);\n        }\n\n        q2.cat(q);\n\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q2.size() == 1);\n\n\n\n        g = 0;\n        while (q2.move_next())\n        {\n            DLIB_TEST_MSG(q2.element() == g,g);\n            ++g;\n        }\n\n        for (int i = 0;i < 1; ++i)\n        {\n            int a = 0;\n            q2.dequeue(a);\n            DLIB_TEST(a == i);\n        }\n\n        DLIB_TEST(q.size() == 0);\n        DLIB_TEST(q2.size() == 0);\n        q.clear();\n        q2.clear();\n\n\n\n\n\n\n\n        print_spinner();\n\n\n\n\n\n\n\n\n\n\n\n        for (int j = 0; j < 3; ++j)\n        {\n            for (int i = 0; i < 10000; ++i)\n            {\n                a = ::rand();\n                q.enqueue(a);\n            }\n\n            while (q.move_next()) ;\n\n            DLIB_TEST(q.at_start() == false);\n\n            q.sort();\n\n            DLIB_TEST(q.at_start() == true);\n\n            // serialize the state of q, then clear q, then\n            // load the state back into q.\n            ostringstream sout;\n            serialize(q,sout);\n            DLIB_TEST(q.at_start() == true);\n            istringstream sin(sout.str());\n            q.clear();\n            deserialize(q,sin);\n\n\n            DLIB_TEST(q.at_start() == true);\n\n            a = 0;\n            int last = 0;\n            while (q.move_next())\n            {\n                ++a;\n                DLIB_TEST_MSG(last <= q.element(),\"items weren't actually sorted\");\n                last = q.element();\n                DLIB_TEST(q.current_element_valid() == true);\n                DLIB_TEST(q.at_start() == false);\n                DLIB_TEST(q.current_element_valid() == true);\n\n\n            }\n            DLIB_TEST_MSG(a == 10000,\"some items were lost between the sorting and iterating\");\n\n\n            DLIB_TEST(q.size() == 10000);\n            swap(q,q2);\n            DLIB_TEST(q2.at_start() == false);\n            DLIB_TEST(q2.current_element_valid() == false);\n\n            DLIB_TEST (q2.move_next() == false);\n            DLIB_TEST (q2.move_next() == false);\n            DLIB_TEST (q2.move_next() == false);\n            DLIB_TEST (q2.move_next() == false);\n            DLIB_TEST (q2.move_next() == false);\n            DLIB_TEST (q2.move_next() == false);\n\n\n            DLIB_TEST(q2.size() == 10000);\n            DLIB_TEST(q2.at_start() == false);\n            DLIB_TEST(q2.current_element_valid() == false);\n\n            q2.clear();\n\n            q.swap(q2);\n\n            DLIB_TEST(q.size() == 0);\n            DLIB_TEST(q.at_start() == true);\n            DLIB_TEST(q.current_element_valid() == false);\n        }\n\n\n\n        print_spinner();\n\n\n\n        // try the above code but this time with just one element\n        // in the queue\n        for (int j = 0; j < 3; ++j)\n        {\n            for (int i = 0; i < 1; ++i)\n            {\n                a = ::rand();\n                q.enqueue(a);\n            }\n\n            q.sort();\n\n            a = 0;\n            int last = 0;\n            while (q.move_next())\n            {\n                ++a;\n                DLIB_TEST_MSG(last <= q.element(),\"items weren't actually sorted\");\n                DLIB_TEST(q.current_element_valid() == true);\n\n            }\n            DLIB_TEST_MSG(a == 1,\"some items were lost between the sorting and iterating\");\n\n\n            DLIB_TEST(q.size() == 1);\n            DLIB_TEST(q.at_start() == false);\n            DLIB_TEST(q.current_element_valid() == false);\n\n            q.clear();\n\n            DLIB_TEST(q.size() == 0);\n            DLIB_TEST(q.at_start() == true);\n            DLIB_TEST(q.current_element_valid() == false);\n        }\n\n\n        print_spinner();\n\n        {\n            q.clear();\n            remover<int>& go = q;\n            for (int i = 0; i < 100; ++i)\n            {\n                int a = 3;\n                q.enqueue(a);\n            }\n            DLIB_TEST(go.size() == 100);                \n            for (int i = 0; i < 100; ++i)\n            {\n                int a = 9;\n                q.remove_any(a);\n                DLIB_TEST(a == 3);\n            }\n            DLIB_TEST(go.size() == 0);\n        }\n\n    }\n\n\n    struct factory\n    {\n        template <typename U>\n        struct return_type {\n            typedef typename memory_manager<U>::kernel_3c type;\n        };\n\n        template <typename U>\n        static typename return_type<U>::type* get_instance (\n        )\n        {\n            static typename return_type<U>::type a;\n            return &a;\n        }\n    };\n\n\n\n\n    class queue_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a test for the queue object.  When it is constructed\n                it adds itself into the testing framework.  The command line switch is\n                specified as test_queue by passing that string to the tester constructor.\n        !*/\n    public:\n        queue_tester (\n        ) :\n            tester (\"test_queue\",\n                    \"Runs tests on the queue component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            // There are multiple implementations of the queue object so use\n            // the templated function defined above to test them all and report\n            // a failed test if any of them don't pass.\n\n            typedef dlib::memory_manager_global<char,factory>::kernel_1a mm;\n\n\n            dlog << LINFO << \"testing sort_1a_c\";\n            queue_sort_test<queue<int, mm>::sort_1a_c>  ();\n            dlog << LINFO << \"testing sort_1a\";\n            queue_sort_test<queue<int, mm>::sort_1a>();\n            dlog << LINFO << \"testing sort_1b\";\n            queue_sort_test<queue<int, mm>::sort_1b>  ();\n            dlog << LINFO << \"testing sort_1b_c\";\n            queue_sort_test<queue<int, mm>::sort_1b_c>();\n            dlog << LINFO << \"testing sort_1c\";\n            queue_sort_test<queue<int, mm>::sort_1c>  ();\n            dlog << LINFO << \"testing sort_1c_c\";\n            queue_sort_test<queue<int, mm>::sort_1c_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/rand.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <cmath>\n#include <dlib/rand.h>\n#include <dlib/compress_stream.h>\n#include <dlib/hash.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.rand\");\n\n    void check_bpp (\n        const std::string str\n    )\n    {\n        istringstream rdata;\n        ostringstream sout;\n        rdata.str(str);\n        double compressed_size;\n        compress_stream::kernel_1a cs1;\n        compress_stream::kernel_2a cs2;\n\n        compress_stream_kernel_1<\n            entropy_encoder_model_kernel_5<257,entropy_encoder::kernel_1a,4000000,4>,\n            entropy_decoder_model_kernel_5<257,entropy_decoder::kernel_1a,4000000,4>,\n            crc32::kernel_1a\n            > cs3;\n\n\n        print_spinner();\n\n        rdata.clear();\n        rdata.seekg(0);\n        sout.clear();\n        sout.str(\"\");\n        cs1.compress(rdata,sout);\n        compressed_size = sout.str().size();\n        compressed_size *= 8;\n        compressed_size /= str.size();\n        DLIB_TEST_MSG(compressed_size >= 8, \"order 0 bps: \" << compressed_size);\n        dlog << LINFO << \"order 0: \" << compressed_size;\n\n        print_spinner();\n\n        rdata.clear();\n        rdata.seekg(0);\n        sout.clear();\n        sout.str(\"\");\n        cs2.compress(rdata,sout);\n        compressed_size = sout.str().size();\n        compressed_size *= 8;\n        compressed_size /= str.size();\n        DLIB_TEST_MSG(compressed_size >= 8, \"order 1 bps: \" << compressed_size);\n        dlog << LINFO << \"order 1: \" << compressed_size;\n\n        print_spinner();\n\n        rdata.clear();\n        rdata.seekg(0);\n        sout.clear();\n        sout.str(\"\");\n        cs3.compress(rdata,sout);\n        compressed_size = sout.str().size();\n        compressed_size *= 8;\n        compressed_size /= str.size();\n        DLIB_TEST_MSG(compressed_size >= 8, \"order 4 bps: \" << compressed_size);\n        dlog << LINFO << \"order 4: \" << compressed_size;\n\n    }\n\n    template <\n        typename rand\n        >\n    void rand_test (\n    )\n    /*!\n        requires\n            - rand is an implementation of rand/rand_kernel_abstract.h \n              is instantiated with int\n        ensures\n            - runs tests on rand for compliance with the specs\n    !*/\n    {        \n\n        ostringstream seed;\n        seed << (unsigned int)time(0);\n\n        ostringstream sout;\n\n\n        rand r, r2;\n        DLIB_TEST(r.get_seed() == \"\");\n        r.set_seed(seed.str());\n\n        DLIB_TEST(r.get_seed() == seed.str());\n        r.clear();\n        DLIB_TEST(r.get_seed() == \"\");\n        swap(r,r2);\n        DLIB_TEST(r.get_seed() == \"\");\n        r.set_seed(seed.str());\n        DLIB_TEST(r.get_seed() == seed.str());\n        swap(r,r2);\n        DLIB_TEST(r2.get_seed() == seed.str());\n        DLIB_TEST(r.get_seed() == \"\");\n        swap(r,r2);\n        DLIB_TEST(r.get_seed() == seed.str());\n        DLIB_TEST(r2.get_seed() == \"\");\n\n        print_spinner();\n        unsigned long size = 100000;\n        for (unsigned long i = 0; i < size; ++i) \n        {\n            uint32 ch = r.get_random_32bit_number();\n            sout.write((char*)&ch,4);\n        }\n\n        check_bpp(sout.str());\n        sout.clear();\n        sout.str(\"\");\n\n        print_spinner();\n        for (unsigned long i = 0; i < size; ++i) \n        {\n            uint16 ch = r.get_random_16bit_number();\n            sout.write((char*)&ch,2);\n        }\n\n        check_bpp(sout.str());\n        sout.clear();\n        sout.str(\"\");\n\n        print_spinner();\n        for (unsigned long i = 0; i < size; ++i) \n        {\n            unsigned char ch = r.get_random_8bit_number();\n            sout.write((char*)&ch,1);\n        }\n\n        check_bpp(sout.str());\n        sout.clear();\n        sout.str(\"\");\n\n\n        // make sure the things can serialize right\n        {\n            r.clear();\n            r2.clear();\n\n\n            for (int i =0; i < 1000; ++i)\n            {\n                r.get_random_32bit_number();\n                r.get_random_gaussian();\n            }\n\n            ostringstream sout;\n            serialize(r, sout);\n\n            istringstream sin(sout.str());\n            deserialize(r2, sin);\n\n\n            for (int i =0; i < 1000; ++i)\n            {\n                DLIB_TEST(r.get_random_32bit_number() == r2.get_random_32bit_number());\n                DLIB_TEST(std::abs(r.get_random_gaussian() - r2.get_random_gaussian()) < 1e-14);\n            }\n        }\n\n\n        // make sure calling clear() and set_seed(\"\") do the same thing\n        {\n            r.clear();\n            r2.set_seed(\"\");\n            rand r3;\n\n\n            DLIB_TEST(r.get_seed() == r2.get_seed());\n            DLIB_TEST(r.get_seed() == r3.get_seed());\n\n\n            for (int i =0; i < 1000; ++i)\n            {\n                const uint32 num1 = r.get_random_32bit_number();\n                const uint32 num2 = r2.get_random_32bit_number();\n                const uint32 num3 = r3.get_random_32bit_number();\n                DLIB_TEST( num1 == num2);\n                DLIB_TEST( num1 == num3);\n            }\n        }\n\n    }\n\n\n    template <typename rand_type>\n    void test_normal_numbers(\n        rand_type& rnd\n    )\n    {\n        print_spinner();\n        dlog << LINFO << \"test normality\";\n        double cnt1 = 0; // num <= -1.2\n        double cnt2 = 0; // num <= -0.5 \n        double cnt3 = 0; // num <= 0\n        double cnt4 = 0; // num <= 0.5\n        double cnt5 = 0; // num <= 1.2\n\n        const unsigned long total = 1000000;\n        for (unsigned long i = 0; i < total; ++i)\n        {\n            const double r = rnd.get_random_gaussian();\n            if (r <= -1.2) cnt1 += 1;\n            if (r <= -0.5) cnt2 += 1;\n            if (r <=  0)   cnt3 += 1;\n            if (r <=  0.5) cnt4 += 1;\n            if (r <=  1.2) cnt5 += 1;\n        }\n\n        cnt1 /= total;\n        cnt2 /= total;\n        cnt3 /= total;\n        cnt4 /= total;\n        cnt5 /= total;\n\n        dlog << LINFO << \"cnt1: \"<< cnt1;\n        dlog << LINFO << \"cnt2: \"<< cnt2;\n        dlog << LINFO << \"cnt3: \"<< cnt3;\n        dlog << LINFO << \"cnt4: \"<< cnt4;\n        dlog << LINFO << \"cnt5: \"<< cnt5;\n\n        DLIB_TEST(std::abs(cnt1 - 0.11507) < 0.001);\n        DLIB_TEST(std::abs(cnt2 - 0.30854) < 0.001);\n        DLIB_TEST(std::abs(cnt3 - 0.5)     < 0.001);\n        DLIB_TEST(std::abs(cnt4 - 0.69146) < 0.001);\n        DLIB_TEST(std::abs(cnt5 - 0.88493) < 0.001);\n\n    }\n\n    void test_gaussian_random_hash()\n    {\n        print_spinner();\n        dlog << LINFO << \"test_gaussian_random_hash()\";\n        double cnt1 = 0; // num <= -1.2\n        double cnt2 = 0; // num <= -0.5 \n        double cnt3 = 0; // num <= 0\n        double cnt4 = 0; // num <= 0.5\n        double cnt5 = 0; // num <= 1.2\n\n        const unsigned long total = 1000000;\n        for (unsigned long i = 0; i < total; ++i)\n        {\n            const double r = gaussian_random_hash(i,0,0);\n            if (r <= -1.2) cnt1 += 1;\n            if (r <= -0.5) cnt2 += 1;\n            if (r <=  0)   cnt3 += 1;\n            if (r <=  0.5) cnt4 += 1;\n            if (r <=  1.2) cnt5 += 1;\n        }\n        for (unsigned long i = 0; i < total; ++i)\n        {\n            const double r = gaussian_random_hash(0,i,0);\n            if (r <= -1.2) cnt1 += 1;\n            if (r <= -0.5) cnt2 += 1;\n            if (r <=  0)   cnt3 += 1;\n            if (r <=  0.5) cnt4 += 1;\n            if (r <=  1.2) cnt5 += 1;\n        }\n        for (unsigned long i = 0; i < total; ++i)\n        {\n            const double r = gaussian_random_hash(0,0,i);\n            if (r <= -1.2) cnt1 += 1;\n            if (r <= -0.5) cnt2 += 1;\n            if (r <=  0)   cnt3 += 1;\n            if (r <=  0.5) cnt4 += 1;\n            if (r <=  1.2) cnt5 += 1;\n        }\n\n        cnt1 /= total*3;\n        cnt2 /= total*3;\n        cnt3 /= total*3;\n        cnt4 /= total*3;\n        cnt5 /= total*3;\n\n        dlog << LINFO << \"cnt1: \"<< cnt1;\n        dlog << LINFO << \"cnt2: \"<< cnt2;\n        dlog << LINFO << \"cnt3: \"<< cnt3;\n        dlog << LINFO << \"cnt4: \"<< cnt4;\n        dlog << LINFO << \"cnt5: \"<< cnt5;\n\n        DLIB_TEST(std::abs(cnt1 - 0.11507) < 0.001);\n        DLIB_TEST(std::abs(cnt2 - 0.30854) < 0.001);\n        DLIB_TEST(std::abs(cnt3 - 0.5)     < 0.001);\n        DLIB_TEST(std::abs(cnt4 - 0.69146) < 0.001);\n        DLIB_TEST(std::abs(cnt5 - 0.88493) < 0.001);\n    }\n\n    void test_uniform_random_hash()\n    {\n        print_spinner();\n        dlog << LINFO << \"test_uniform_random_hash()\";\n        double cnt1 = 0; // num <= 0.2\n        double cnt2 = 0; // num <= 0.4 \n        double cnt3 = 0; // num <= 0.6\n        double cnt4 = 0; // num <= 0.8\n        double cnt5 = 0; // num <= 1.0\n\n        double min_val = 10;\n        double max_val = 0;\n\n        const unsigned long total = 1000000;\n        for (unsigned long i = 0; i < total; ++i)\n        {\n            const double r = uniform_random_hash(i,0,0);\n            min_val = min(r,min_val);\n            max_val = max(r,max_val);\n\n            if (r <=  0.2) cnt1 += 1;\n            if (r <=  0.4) cnt2 += 1;\n            if (r <=  0.6) cnt3 += 1;\n            if (r <=  0.8) cnt4 += 1;\n            if (r <=  1.0) cnt5 += 1;\n        }\n        for (unsigned long i = 0; i < total; ++i)\n        {\n            const double r = uniform_random_hash(0,i,0);\n            min_val = min(r,min_val);\n            max_val = max(r,max_val);\n\n            if (r <=  0.2) cnt1 += 1;\n            if (r <=  0.4) cnt2 += 1;\n            if (r <=  0.6) cnt3 += 1;\n            if (r <=  0.8) cnt4 += 1;\n            if (r <=  1.0) cnt5 += 1;\n        }\n        for (unsigned long i = 0; i < total; ++i)\n        {\n            const double r = uniform_random_hash(0,0,i);\n            min_val = min(r,min_val);\n            max_val = max(r,max_val);\n\n            if (r <=  0.2) cnt1 += 1;\n            if (r <=  0.4) cnt2 += 1;\n            if (r <=  0.6) cnt3 += 1;\n            if (r <=  0.8) cnt4 += 1;\n            if (r <=  1.0) cnt5 += 1;\n        }\n\n        cnt1 /= total*3;\n        cnt2 /= total*3;\n        cnt3 /= total*3;\n        cnt4 /= total*3;\n        cnt5 /= total*3;\n\n        dlog << LINFO << \"cnt1: \"<< cnt1;\n        dlog << LINFO << \"cnt2: \"<< cnt2;\n        dlog << LINFO << \"cnt3: \"<< cnt3;\n        dlog << LINFO << \"cnt4: \"<< cnt4;\n        dlog << LINFO << \"cnt5: \"<< cnt5;\n        dlog << LINFO << \"min_val: \"<< min_val;\n        dlog << LINFO << \"max_val: \"<< max_val;\n\n        DLIB_TEST(std::abs(cnt1 - 0.2) < 0.001);\n        DLIB_TEST(std::abs(cnt2 - 0.4) < 0.001);\n        DLIB_TEST(std::abs(cnt3 - 0.6) < 0.001);\n        DLIB_TEST(std::abs(cnt4 - 0.8) < 0.001);\n        DLIB_TEST(std::abs(cnt5 - 1.0) < 0.001);\n        DLIB_TEST(std::abs(min_val - 0.0) < 0.001);\n        DLIB_TEST(std::abs(max_val - 1.0) < 0.001);\n    }\n\n    class rand_tester : public tester\n    {\n    public:\n        rand_tester (\n        ) :\n            tester (\"test_rand\",\n                    \"Runs tests on the rand component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            rand_test<dlib::rand>();\n            rand_test<dlib::rand>();\n\n            dlib::rand rnd;\n            test_normal_numbers(rnd);\n            test_gaussian_random_hash();\n            test_uniform_random_hash();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/ranking.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#include <dlib/svm.h>\n#include <dlib/rand.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <map>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n\n    logger dlog(\"test.ranking\");\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void brute_force_count_ranking_inversions (\n        const std::vector<T>& x,\n        const std::vector<T>& y,\n        std::vector<unsigned long>& x_count,\n        std::vector<unsigned long>& y_count\n    )\n    {\n        x_count.assign(x.size(),0);\n        y_count.assign(y.size(),0);\n\n        for (unsigned long i = 0; i < x.size(); ++i)\n        {\n            for (unsigned long j = 0; j < y.size(); ++j)\n            {\n                if (x[i] <= y[j])\n                {\n                    x_count[i]++;\n                    y_count[j]++;\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_count_ranking_inversions()\n    {\n        print_spinner();\n        dlog << LINFO << \"in test_count_ranking_inversions()\";\n\n        dlib::rand rnd;\n        std::vector<int> x, y;\n        std::vector<unsigned long> x_count, y_count;\n        std::vector<unsigned long> x_count2, y_count2;\n        for (int iter = 0; iter < 5000; ++iter)\n        {\n            x.resize(rnd.get_random_32bit_number()%10);\n            y.resize(rnd.get_random_32bit_number()%10);\n            for (unsigned long i = 0; i < x.size(); ++i)\n                x[i] = ((int)rnd.get_random_32bit_number()%10) - 5;\n            for (unsigned long i = 0; i < y.size(); ++i)\n                y[i] = ((int)rnd.get_random_32bit_number()%10) - 5;\n\n            count_ranking_inversions(x, y, x_count, y_count);\n            brute_force_count_ranking_inversions(x, y, x_count2, y_count2);\n\n            DLIB_TEST(mat(x_count) == mat(x_count2));\n            DLIB_TEST(mat(y_count) == mat(y_count2));\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void run_prior_test()\n    {\n        print_spinner();\n        typedef matrix<double,3,1> sample_type;\n        typedef linear_kernel<sample_type> kernel_type;\n\n        svm_rank_trainer<kernel_type> trainer;\n\n        ranking_pair<sample_type> data;\n\n        sample_type samp;\n        samp = 0, 0, 1; data.relevant.push_back(samp); \n        samp = 0, 1, 0; data.nonrelevant.push_back(samp); \n\n        trainer.set_c(10);\n        decision_function<kernel_type> df = trainer.train(data);\n\n        trainer.set_prior(df);\n\n        data.relevant.clear();\n        data.nonrelevant.clear();\n        samp = 1, 0, 0; data.relevant.push_back(samp); \n        samp = 0, 1, 0; data.nonrelevant.push_back(samp); \n\n        df = trainer.train(data);\n\n        dlog << LINFO << trans(df.basis_vectors(0));\n        DLIB_TEST(df.basis_vectors(0)(0) > 0);\n        DLIB_TEST(df.basis_vectors(0)(1) < 0);\n        DLIB_TEST(df.basis_vectors(0)(2) > 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void run_prior_sparse_test()\n    {\n        print_spinner();\n        typedef std::map<unsigned long,double> sample_type;\n        typedef sparse_linear_kernel<sample_type> kernel_type;\n\n        svm_rank_trainer<kernel_type> trainer;\n\n        ranking_pair<sample_type> data;\n\n        sample_type samp;\n        samp[0] = 1; data.relevant.push_back(samp); samp.clear();\n        samp[1] = 1; data.nonrelevant.push_back(samp); samp.clear();\n\n        trainer.set_c(10);\n        decision_function<kernel_type> df = trainer.train(data);\n\n        trainer.set_prior(df);\n\n        data.relevant.clear();\n        data.nonrelevant.clear();\n        samp[2] = 1; data.relevant.push_back(samp); samp.clear();\n        samp[1] = 1; data.nonrelevant.push_back(samp); samp.clear();\n\n        df = trainer.train(data);\n\n        matrix<double,0,1> w = sparse_to_dense(df.basis_vectors(0));\n        dlog << LINFO << trans(w);\n        DLIB_TEST(w(0) > 0.1);\n        DLIB_TEST(w(1) < -0.1);\n        DLIB_TEST(w(2) > 0.1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void dotest1()\n    {\n        print_spinner();\n        dlog << LINFO << \"in dotest1()\";\n\n        typedef matrix<double,4,1> sample_type;\n\n        typedef linear_kernel<sample_type> kernel_type;\n\n        svm_rank_trainer<kernel_type> trainer;\n\n\n        std::vector<ranking_pair<sample_type> > samples;\n\n        ranking_pair<sample_type> p;\n        sample_type samp;\n\n        samp = 0, 0, 0, 1; p.relevant.push_back(samp);\n        samp = 1, 0, 0, 0; p.nonrelevant.push_back(samp);\n        samples.push_back(p);\n\n        samp = 0, 0, 1, 0; p.relevant.push_back(samp);\n        samp = 1, 0, 0, 0; p.nonrelevant.push_back(samp);\n        samp = 0, 1, 0, 0; p.nonrelevant.push_back(samp);\n        samp = 0, 1, 0, 0; p.nonrelevant.push_back(samp);\n        samples.push_back(p);\n\n\n        trainer.set_c(10);\n\n        decision_function<kernel_type> df = trainer.train(samples);\n\n        dlog << LINFO << \"accuracy: \"<< test_ranking_function(df, samples);\n        matrix<double,1,2> res;\n        res = 1,1;\n        DLIB_TEST(equal(test_ranking_function(df, samples), res));\n\n        DLIB_TEST(equal(test_ranking_function(trainer.train(samples[1]), samples), res));\n\n        trainer.set_epsilon(1e-13);\n        df = trainer.train(samples);\n\n        dlog << LINFO << df.basis_vectors(0);\n        sample_type truew;\n        truew = -0.5, -0.5, 0.5, 0.5;\n        DLIB_TEST(length(truew - df.basis_vectors(0)) < 1e-10);\n\n        dlog << LINFO << \"accuracy: \"<< test_ranking_function(df, samples);\n        DLIB_TEST(equal(test_ranking_function(df, samples), res));\n\n        dlog << LINFO << \"cv-accuracy: \"<< cross_validate_ranking_trainer(trainer, samples,2);\n        DLIB_TEST(std::abs(cross_validate_ranking_trainer(trainer, samples,2)(0) - 0.7777777778) < 0.0001);\n\n        trainer.set_learns_nonnegative_weights(true);\n        df = trainer.train(samples);\n        truew = 0, 0, 1.0, 1.0;\n        dlog << LINFO << df.basis_vectors(0);\n        DLIB_TEST(length(truew - df.basis_vectors(0)) < 1e-10);\n        dlog << LINFO << \"accuracy: \"<< test_ranking_function(df, samples);\n        DLIB_TEST(equal(test_ranking_function(df, samples), res));\n\n\n        samples.clear();\n        samples.push_back(p);\n        samples.push_back(p);\n        samples.push_back(p);\n        samples.push_back(p);\n        dlog << LINFO << \"cv-accuracy: \"<< cross_validate_ranking_trainer(trainer, samples,4);\n        DLIB_TEST(equal(cross_validate_ranking_trainer(trainer, samples,4) , res));\n\n        df.basis_vectors(0) = 0;\n        dlog << LINFO << \"BAD RANKING:\" << test_ranking_function(df, samples);\n        DLIB_TEST(test_ranking_function(df, samples)(1) < 0.5);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void dotest_sparse_vectors()\n    {\n        print_spinner();\n        dlog << LINFO << \"in dotest_sparse_vectors()\";\n\n        typedef std::map<unsigned long,double> sample_type;\n\n        typedef sparse_linear_kernel<sample_type> kernel_type;\n\n        svm_rank_trainer<kernel_type> trainer;\n\n\n        std::vector<ranking_pair<sample_type> > samples;\n\n        ranking_pair<sample_type> p;\n        sample_type samp;\n\n        samp[3] = 1; p.relevant.push_back(samp); samp.clear();\n        samp[0] = 1; p.nonrelevant.push_back(samp); samp.clear();\n        samples.push_back(p);\n\n        samp[2] = 1; p.relevant.push_back(samp); samp.clear();\n        samp[0] = 1; p.nonrelevant.push_back(samp); samp.clear();\n        samp[1] = 1; p.nonrelevant.push_back(samp); samp.clear();\n        samp[1] = 1; p.nonrelevant.push_back(samp); samp.clear();\n        samples.push_back(p);\n\n\n        trainer.set_c(10);\n\n        decision_function<kernel_type> df = trainer.train(samples);\n\n        matrix<double,1,2> res;\n        res = 1,1;\n\n        dlog << LINFO << \"accuracy: \"<< test_ranking_function(df, samples);\n        DLIB_TEST(equal(test_ranking_function(df, samples), res));\n\n        DLIB_TEST(equal(test_ranking_function(trainer.train(samples[1]), samples), res));\n\n        trainer.set_epsilon(1e-13);\n        df = trainer.train(samples);\n\n        dlog << LINFO << sparse_to_dense(df.basis_vectors(0));\n        sample_type truew;\n        truew[0] = -0.5;\n        truew[1] = -0.5;\n        truew[2] =  0.5;\n        truew[3] =  0.5;\n        DLIB_TEST(length(subtract(truew , df.basis_vectors(0))) < 1e-10);\n\n        dlog << LINFO << \"accuracy: \"<< test_ranking_function(df, samples);\n        DLIB_TEST(equal(test_ranking_function(df, samples), res));\n\n        dlog << LINFO << \"cv-accuracy: \"<< cross_validate_ranking_trainer(trainer, samples,2);\n        DLIB_TEST(std::abs(cross_validate_ranking_trainer(trainer, samples,2)(0) - 0.7777777778) < 0.0001);\n\n        trainer.set_learns_nonnegative_weights(true);\n        df = trainer.train(samples);\n        truew[0] =  0.0;\n        truew[1] =  0.0;\n        truew[2] =  1.0;\n        truew[3] =  1.0;\n        dlog << LINFO << sparse_to_dense(df.basis_vectors(0));\n        DLIB_TEST(length(subtract(truew , df.basis_vectors(0))) < 1e-10);\n        dlog << LINFO << \"accuracy: \"<< test_ranking_function(df, samples);\n        DLIB_TEST(equal(test_ranking_function(df, samples), res));\n\n\n        samples.clear();\n        samples.push_back(p);\n        samples.push_back(p);\n        samples.push_back(p);\n        samples.push_back(p);\n        dlog << LINFO << \"cv-accuracy: \"<< cross_validate_ranking_trainer(trainer, samples,4);\n        DLIB_TEST(equal(cross_validate_ranking_trainer(trainer, samples,4) , res) );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename K, bool use_dcd_trainer>\n    class simple_rank_trainer\n    {\n    public:\n        template <typename T>\n        decision_function<K> train (\n            const ranking_pair<T>& pair\n        ) const\n        {\n            typedef matrix<double,10,1> sample_type;\n\n            std::vector<sample_type> relevant = pair.relevant;\n            std::vector<sample_type> nonrelevant = pair.nonrelevant;\n\n            std::vector<sample_type> samples;\n            std::vector<double> labels;\n            for (unsigned long i = 0; i < relevant.size(); ++i)\n            {\n                for (unsigned long j = 0; j < nonrelevant.size(); ++j)\n                {\n                    samples.push_back(relevant[i] - nonrelevant[j]);\n                    labels.push_back(+1);\n                    samples.push_back(nonrelevant[i] - relevant[j]);\n                    labels.push_back(-1);\n                }\n            }\n\n            if (use_dcd_trainer)\n            {\n                svm_c_linear_dcd_trainer<K> trainer;\n                trainer.set_c(1.0/samples.size());\n                trainer.set_epsilon(1e-10);\n                trainer.force_last_weight_to_1(true);\n                //trainer.be_verbose();\n                return trainer.train(samples, labels);\n            }\n            else\n            {\n                svm_c_linear_trainer<K> trainer;\n                trainer.set_c(1.0);\n                trainer.set_epsilon(1e-13);\n                trainer.force_last_weight_to_1(true);\n                //trainer.be_verbose();\n                decision_function<K> df = trainer.train(samples, labels);\n                DLIB_TEST_MSG(df.b == 0, df.b);\n                return df;\n            }\n        }\n    };\n\n    template <bool use_dcd_trainer>\n    void test_svmrank_weight_force_dense()\n    {\n        print_spinner();\n        dlog << LINFO << \"use_dcd_trainer: \"<< use_dcd_trainer;\n\n        typedef matrix<double,10,1> sample_type;\n        typedef linear_kernel<sample_type> kernel_type;\n\n        ranking_pair<sample_type> pair;\n\n        for (int i = 0; i < 20; ++i)\n        {\n            pair.relevant.push_back(abs(gaussian_randm(10,1,i)));\n        }\n\n        for (int i = 0; i < 20; ++i)\n        {\n            pair.nonrelevant.push_back(-abs(gaussian_randm(10,1,i+10000)));\n            pair.nonrelevant.back()(9) += 1;\n        }\n\n\n        svm_rank_trainer<kernel_type> trainer;\n        trainer.force_last_weight_to_1(true);\n        trainer.set_epsilon(1e-13);\n        //trainer.be_verbose();\n        decision_function<kernel_type> df;\n        df = trainer.train(pair);\n\n        matrix<double,1,2> res;\n        res = 1,1;\n        dlog << LINFO << \"weights: \"<< trans(df.basis_vectors(0));\n        const matrix<double,1,2> acc1 = test_ranking_function(df, pair);\n        dlog << LINFO << \"ranking accuracy: \" << acc1;\n        DLIB_TEST(equal(acc1,res));\n\n        simple_rank_trainer<kernel_type,use_dcd_trainer> strainer;\n        decision_function<kernel_type> df2;\n        df2 = strainer.train(pair);\n        dlog << LINFO << \"weights: \"<< trans(df2.basis_vectors(0));\n        const matrix<double,1,2> acc2 = test_ranking_function(df2, pair);\n        dlog << LINFO << \"ranking accuracy: \" << acc2;\n        DLIB_TEST(equal(acc2,res));\n\n        dlog << LINFO << \"w error: \" << max(abs(df.basis_vectors(0) - df2.basis_vectors(0)));\n        dlog << LINFO << \"b error: \" << abs(df.b - df2.b);\n        DLIB_TEST(std::abs(max(abs(df.basis_vectors(0) - df2.basis_vectors(0)))) < 1e-8);\n        DLIB_TEST(std::abs(abs(df.b - df2.b)) < 1e-8);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class test_ranking_tools : public tester\n    {\n    public:\n        test_ranking_tools (\n        ) :\n            tester (\"test_ranking\",\n                    \"Runs tests on the ranking tools.\")\n        {}\n\n\n        void perform_test (\n        )\n        {\n            test_count_ranking_inversions();\n            dotest1();\n            dotest_sparse_vectors();\n            test_svmrank_weight_force_dense<true>();\n            test_svmrank_weight_force_dense<false>();\n            run_prior_test();\n            run_prior_sparse_test();\n\n        }\n    } a;\n\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/read_write_mutex.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/misc_api.h>\n#include <dlib/threads.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.read_write_mutex\");\n\n    class read_write_mutex_tester : public tester, multithreaded_object\n    {\n    public:\n        read_write_mutex_tester (\n        ) :\n            tester (\"test_read_write_mutex\",\n                    \"Runs tests on the read_write_mutex component.\")\n        {\n            register_thread(*this, &read_write_mutex_tester::thread_write);\n            register_thread(*this, &read_write_mutex_tester::thread_write);\n            register_thread(*this, &read_write_mutex_tester::thread_write);\n\n            register_thread(*this, &read_write_mutex_tester::thread_readonly);\n            register_thread(*this, &read_write_mutex_tester::thread_readonly);\n            register_thread(*this, &read_write_mutex_tester::thread_readonly);\n            register_thread(*this, &read_write_mutex_tester::thread_readonly2);\n            register_thread(*this, &read_write_mutex_tester::thread_readonly2);\n            register_thread(*this, &read_write_mutex_tester::thread_readonly2);\n\n        }\n\n        read_write_mutex m;\n\n        mutex mut;\n        int num_write;\n        int num_read;\n        int max_read;\n\n        bool failure;\n\n        void thread_write ()\n        {\n            // do this so that the readonly threads can get into their loops first.  This way\n            // we can see if the mutex lets many readers into their area\n            dlib::sleep(250);\n            for (int i = 0; i < 6; ++i)\n            {\n                auto_mutex lock(m);\n\n                mut.lock();\n                ++num_write;\n                mut.unlock();\n\n                // only one write thread should ever be active at once\n                if (num_write != 1)\n                {\n                    failure = true;\n                    dlog << LERROR << \"1\";\n                }\n\n                dlib::sleep(300);\n\n                // only one write thread should ever be active at once\n                if (num_write != 1)\n                {\n                    failure = true;\n                    dlog << LERROR << \"2\";\n                }\n\n                mut.lock();\n                --num_write;\n                mut.unlock();\n\n                print_spinner();\n            }\n            dlog << LINFO << \"exit thread_write()\";\n        }\n\n        void do_readonly_stuff()\n        {\n            mut.lock();\n            ++num_read;\n            max_read = max(num_read, max_read);\n            mut.unlock();\n\n            if (num_write != 0)\n            {\n                failure = true;\n                dlog << LERROR << \"3\";\n            }\n\n            dlib::sleep(300);\n\n            if (num_write != 0)\n            {\n                failure = true;\n                dlog << LERROR << \"4\";\n            }\n\n            mut.lock();\n            max_read = max(num_read, max_read);\n            --num_read;\n            mut.unlock();\n\n            print_spinner();\n        }\n\n        void thread_readonly ()\n        {\n            for (int i = 0; i < 6; ++i)\n            {\n                auto_mutex_readonly lock(m);\n                DLIB_TEST(lock.has_read_lock());\n                DLIB_TEST(!lock.has_write_lock());\n                do_readonly_stuff();\n\n                lock.lock_readonly();\n                DLIB_TEST(lock.has_read_lock());\n                DLIB_TEST(!lock.has_write_lock());\n                lock.unlock();\n                DLIB_TEST(!lock.has_read_lock());\n                DLIB_TEST(!lock.has_write_lock());\n                lock.lock_readonly();\n                DLIB_TEST(lock.has_read_lock());\n                DLIB_TEST(!lock.has_write_lock());\n                lock.lock_write();\n                DLIB_TEST(!lock.has_read_lock());\n                DLIB_TEST(lock.has_write_lock());\n                lock.lock_write();\n                DLIB_TEST(!lock.has_read_lock());\n                DLIB_TEST(lock.has_write_lock());\n            }\n\n            dlog << LINFO << \"exit thread_readonly()\";\n        }\n\n        void thread_readonly2 ()\n        {\n            for (int i = 0; i < 6; ++i)\n            {\n                m.lock_readonly();\n                auto_unlock_readonly unlock(m);\n\n                do_readonly_stuff();\n            }\n            dlog << LINFO << \"exit thread_readonly2()\";\n        }\n\n\n        void perform_test (\n        )\n        {\n            num_write = 0;\n            num_read = 0;\n            max_read = 0;\n            failure = false;\n\n            // doing this big block of weird stuff should have no effect.  \n            {\n                m.unlock();\n\n                m.lock_readonly();\n                m.lock_readonly();\n                m.unlock();\n                m.unlock_readonly();\n                m.unlock();\n                m.unlock_readonly();\n\n                m.unlock();\n                m.unlock_readonly();\n\n                m.lock();\n                m.unlock_readonly();\n                m.unlock_readonly();\n                m.unlock();\n            }\n\n\n            // start up our testing threads\n            start();\n\n            // wait for the threads to finish\n            wait();\n\n\n            DLIB_TEST(failure == false);\n            DLIB_TEST_MSG(max_read == 6, \"max_read: \"<< max_read);\n\n        }\n\n    } a;\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/reference_counter.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/reference_counter.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.reference_counter\");\n\n    template <\n        typename ref_counter \n        >\n    void reference_counter_test (\n    )\n    /*!\n        requires\n            - ref_counter is an implementation of reference_counter/reference_counter_kernel_abstract.h \n              and is instantiated to contain an int \n        ensures\n            - runs tests on reference_counter for compliance with the specs \n    !*/\n    {        \n\n        ref_counter a, b, c;\n\n        for (long i = 0; i < 10; ++i)\n        {\n            print_spinner();\n            for (long j = 0; j < 10000; ++j)\n            {\n                a.modify() = j;\n                b.modify() = j+1;\n                c.modify() = j+2;\n                DLIB_ASSERT(a.access() == j,\"\");\n                DLIB_ASSERT(b.access() == j+1,\"\");\n                DLIB_ASSERT(c.access() == j+2,\"\");\n                DLIB_ASSERT(a.modify() == j,\"\");\n                DLIB_ASSERT(b.modify() == j+1,\"\");\n                DLIB_ASSERT(c.modify() == j+2,\"\");\n                DLIB_ASSERT(a.access() == j,\"\");\n                DLIB_ASSERT(b.access() == j+1,\"\");\n                DLIB_ASSERT(c.access() == j+2,\"\");\n                DLIB_ASSERT(a.modify() == j,\"\");\n                DLIB_ASSERT(b.modify() == j+1,\"\");\n                DLIB_ASSERT(c.modify() == j+2,\"\");\n                a = c;\n                DLIB_ASSERT(a.access() == j+2,\"\");\n                DLIB_ASSERT(b.access() == j+1,\"\");\n                DLIB_ASSERT(c.access() == j+2,\"\");\n                DLIB_ASSERT(a.modify() == j+2,\"\");\n                DLIB_ASSERT(b.modify() == j+1,\"\");\n                DLIB_ASSERT(c.modify() == j+2,\"\");\n                DLIB_ASSERT(a.access() == j+2,\"\");\n                DLIB_ASSERT(b.access() == j+1,\"\");\n                DLIB_ASSERT(c.access() == j+2,\"\");\n                DLIB_ASSERT(a.modify() == j+2,\"\");\n                DLIB_ASSERT(b.modify() == j+1,\"\");\n                DLIB_ASSERT(c.modify() == j+2,\"\");\n\n                a = b = c;\n                DLIB_ASSERT(a.access() == b.access(),\"\");\n                DLIB_ASSERT(a.access() == c.access(),\"\");\n                DLIB_ASSERT(c.access() == b.access(),\"\");\n                a.modify() = j;\n                DLIB_ASSERT(a.access() == j,\"\");\n                DLIB_ASSERT(a.access() != b.access(),\"\");\n                DLIB_ASSERT(a.access() != c.access(),\"\");\n                DLIB_ASSERT(c.access() == b.access(),\"\");\n                DLIB_ASSERT(c.access() == j+2,\"\");\n                DLIB_ASSERT(b.access() == j+2,\"\");\n\n                DLIB_ASSERT(a.access() == j,\"\");\n                a = a;\n                DLIB_ASSERT(a.access() == j,\"\");\n                c = c;\n                DLIB_ASSERT(c.access() == j+2,\"\");\n                DLIB_ASSERT(b.access() == j+2,\"\");\n                swap(a,c);\n                DLIB_ASSERT(a.access() == j+2,\"\");\n                DLIB_ASSERT(c.access() == j,\"\");\n                DLIB_ASSERT(b.access() == j+2,\"\");\n            }\n        }\n\n    }\n\n\n\n\n\n    class reference_counter_tester : public tester\n    {\n    public:\n        reference_counter_tester (\n        ) :\n            tester (\"test_reference_counter\",\n                    \"Runs tests on the reference_counter component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            reference_counter_test<reference_counter<int>::kernel_1a>  ();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/rls.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <cmath>\n#include <dlib/svm.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.rls\");\n\n\n    void test_rls()\n    {\n        dlib::rand rnd;\n\n        running_stats<double> rs1, rs2, rs3, rs4, rs5;\n\n        for (int k = 0; k < 2; ++k)\n        {\n            for (long num_vars = 1; num_vars < 4; ++num_vars)\n            {\n                print_spinner();\n                for (long size = 1; size < 300; ++size)\n                {\n                    {\n                        matrix<double> X = randm(size,num_vars,rnd);\n                        matrix<double,0,1> Y = randm(size,1,rnd);\n\n\n                        const double C = 1000;\n                        const double forget_factor = 1.0;\n                        rls r(forget_factor, C);\n                        for (long i = 0; i < Y.size(); ++i)\n                        {\n                            r.train(trans(rowm(X,i)), Y(i));\n                        }\n\n\n                        matrix<double> w = pinv(1.0/C*identity_matrix<double>(X.nc()) + trans(X)*X)*trans(X)*Y;\n\n                        rs1.add(length(r.get_w() - w));\n                    }\n\n                    {\n                        matrix<double> X = randm(size,num_vars,rnd);\n                        matrix<double,0,1> Y = randm(size,1,rnd);\n\n                        matrix<double,0,1> G(size,1);\n\n                        const double C = 10000;\n                        const double forget_factor = 0.8;\n                        rls r(forget_factor, C);\n                        for (long i = 0; i < Y.size(); ++i)\n                        {\n                            r.train(trans(rowm(X,i)), Y(i));\n\n                            G(i) = std::pow(forget_factor, i/2.0);\n                        }\n\n                        G = flipud(G);\n\n                        X = diagm(G)*X;\n                        Y = diagm(G)*Y;\n\n                        matrix<double> w = pinv(1.0/C*identity_matrix<double>(X.nc()) + trans(X)*X)*trans(X)*Y;\n\n                        rs5.add(length(r.get_w() - w));\n                    }\n\n                    {\n                        matrix<double> X = randm(size,num_vars,rnd);\n                        matrix<double> Y = colm(X,0)*10;\n\n\n                        const double C = 1000000;\n                        const double forget_factor = 1.0;\n                        rls r(forget_factor, C);\n                        for (long i = 0; i < Y.size(); ++i)\n                        {\n                            r.train(trans(rowm(X,i)), Y(i));\n                        }\n\n\n                        matrix<double> w = pinv(1.0/C*identity_matrix<double>(X.nc()) + trans(X)*X)*trans(X)*Y;\n\n                        rs2.add(length(r.get_w() - w));\n                    }\n\n                    {\n                        matrix<double> X = join_rows(randm(size,num_vars,rnd)-0.5, ones_matrix<double>(size,1));\n                        matrix<double> Y = uniform_matrix<double>(size,1,10);\n\n\n                        const double C = 1e7;\n                        const double forget_factor = 1.0;\n\n                        matrix<double> w = pinv(1.0/C*identity_matrix<double>(X.nc()) + trans(X)*X)*trans(X)*Y;\n\n                        rls r(forget_factor, C);\n                        for (long i = 0; i < Y.size(); ++i)\n                        {\n                            r.train(trans(rowm(X,i)), Y(i));\n                            rs3.add(std::abs(r(trans(rowm(X,i))) - 10));\n                        }\n\n\n                    }\n                    {\n                        matrix<double> X = randm(size,num_vars,rnd)-0.5;\n                        matrix<double> Y = colm(X,0)*10;\n\n\n                        const double C = 1e6;\n                        const double forget_factor = 0.7;\n\n\n                        rls r(forget_factor, C);\n                        DLIB_TEST(std::abs(r.get_c() - C) < 1e-10);\n                        DLIB_TEST(std::abs(r.get_forget_factor() - forget_factor) < 1e-15);\n                        DLIB_TEST(r.get_w().size() == 0);\n\n                        for (long i = 0; i < Y.size(); ++i)\n                        {\n                            r.train(trans(rowm(X,i)), Y(i));\n                            rs4.add(std::abs(r(trans(rowm(X,i))) - X(i,0)*10));\n                        }\n\n                        DLIB_TEST(r.get_w().size() == num_vars);\n\n                        decision_function<linear_kernel<matrix<double,0,1> > > df = r.get_decision_function();\n                        DLIB_TEST(std::abs(df(trans(rowm(X,0))) - r(trans(rowm(X,0)))) < 1e-15);\n                    }\n                }\n            } \n        }\n\n        dlog << LINFO << \"rs1.mean(): \" << rs1.mean();\n        dlog << LINFO << \"rs2.mean(): \" << rs2.mean();\n        dlog << LINFO << \"rs3.mean(): \" << rs3.mean();\n        dlog << LINFO << \"rs4.mean(): \" << rs4.mean();\n        dlog << LINFO << \"rs5.mean(): \" << rs5.mean();\n        dlog << LINFO << \"rs1.max(): \" << rs1.max();\n        dlog << LINFO << \"rs2.max(): \" << rs2.max();\n        dlog << LINFO << \"rs3.max(): \" << rs3.max();\n        dlog << LINFO << \"rs4.max(): \" << rs4.max();\n        dlog << LINFO << \"rs5.max(): \" << rs5.max();\n\n        DLIB_TEST_MSG(rs1.mean() < 1e-10, rs1.mean());\n        DLIB_TEST_MSG(rs2.mean() < 1e-9, rs2.mean());\n        DLIB_TEST_MSG(rs3.mean() < 1e-6, rs3.mean());\n        DLIB_TEST_MSG(rs4.mean() < 1e-6, rs4.mean());\n        DLIB_TEST_MSG(rs5.mean() < 1e-3, rs5.mean());\n\n        DLIB_TEST_MSG(rs1.max() < 1e-10, rs1.max());\n        DLIB_TEST_MSG(rs2.max() < 1e-6,  rs2.max());\n        DLIB_TEST_MSG(rs3.max() < 0.001, rs3.max());\n        DLIB_TEST_MSG(rs4.max() < 0.01,  rs4.max());\n        DLIB_TEST_MSG(rs5.max() < 0.1,  rs5.max());\n        \n    }\n\n\n\n\n    class rls_tester : public tester\n    {\n    public:\n        rls_tester (\n        ) :\n            tester (\"test_rls\",\n                    \"Runs tests on the rls component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_rls();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sammon.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <cmath>\n#include <dlib/statistics.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.sammon\");\n\n\n    std::vector<matrix<double,4,1> > make_test_data4(\n    )\n    {\n        std::vector<matrix<double,4,1> > data;\n\n        matrix<double,4,1> m;\n\n        m = 0,0,0, 0; data.push_back(m);\n        m = 1,0,0, 0; data.push_back(m);\n        m = 0,1,0, 0; data.push_back(m);\n        m = 0,0,1, 0; data.push_back(m);\n\n        return data;\n    }\n\n    std::vector<matrix<double,3,1> > make_test_data3(\n    )\n    {\n        std::vector<matrix<double,3,1> > data;\n\n        matrix<double,3,1> m;\n\n        m = 0,0,0; data.push_back(m);\n        m = 1,0,0; data.push_back(m);\n        m = 0,1,0; data.push_back(m);\n        m = 0,0,1; data.push_back(m);\n\n        return data;\n    }\n\n    std::vector<matrix<double> > make_test_data3d(\n    )\n    {\n        std::vector<matrix<double> > data;\n\n        matrix<double,3,1> m;\n\n        m = 0,0,0; data.push_back(m);\n        m = 1,0,0; data.push_back(m);\n        m = 0,1,0; data.push_back(m);\n        m = 0,0,1; data.push_back(m);\n\n        return data;\n    }\n\n\n    void runtest()\n    {\n        sammon_projection s;\n        std::vector<matrix<double, 0, 1> >  projs = s(make_test_data3(),2);\n        running_stats<double> rs1, rs2;\n\n        rs1.add(length(projs[0] - projs[1]));\n        rs1.add(length(projs[0] - projs[2]));\n        rs1.add(length(projs[0] - projs[3]));\n\n        rs2.add(length(projs[1] - projs[2]));\n        rs2.add(length(projs[2] - projs[3]));\n        rs2.add(length(projs[3] - projs[1]));\n\n        DLIB_TEST(rs1.stddev()/rs1.mean() < 1e-4);\n        DLIB_TEST(rs2.stddev()/rs2.mean() < 1e-4);\n\n\n\n        projs = s(make_test_data4(),2);\n        rs1.clear();\n        rs2.clear();\n\n        rs1.add(length(projs[0] - projs[1]));\n        rs1.add(length(projs[0] - projs[2]));\n        rs1.add(length(projs[0] - projs[3]));\n\n        rs2.add(length(projs[1] - projs[2]));\n        rs2.add(length(projs[2] - projs[3]));\n        rs2.add(length(projs[3] - projs[1]));\n\n        DLIB_TEST(rs1.stddev()/rs1.mean() < 1e-4);\n        DLIB_TEST(rs2.stddev()/rs2.mean() < 1e-4);\n\n        projs = s(make_test_data3d(),2);\n        rs1.clear();\n        rs2.clear();\n\n        rs1.add(length(projs[0] - projs[1]));\n        rs1.add(length(projs[0] - projs[2]));\n        rs1.add(length(projs[0] - projs[3]));\n\n        rs2.add(length(projs[1] - projs[2]));\n        rs2.add(length(projs[2] - projs[3]));\n        rs2.add(length(projs[3] - projs[1]));\n\n        DLIB_TEST(rs1.stddev()/rs1.mean() < 1e-4);\n        DLIB_TEST(rs2.stddev()/rs2.mean() < 1e-4);\n    }\n\n    void runtest2()\n    {\n        sammon_projection s;\n        std::vector<matrix<double, 0, 1> >  projs, temp;\n\n        DLIB_TEST(s(projs,3).size() == 0);\n\n        matrix<double,2,1> m;\n        m = 1,2;\n        projs.push_back(m);\n        temp = s(projs,2);\n        DLIB_TEST(temp.size() == 1);\n        DLIB_TEST(temp[0].size() == 2);\n\n        projs.push_back(m);\n        temp = s(projs,1);\n        DLIB_TEST(temp.size() == 2);\n        DLIB_TEST(temp[0].size() == 1);\n        DLIB_TEST(temp[1].size() == 1);\n    }\n\n    void runtest3(int num_dims)\n    {\n        sammon_projection s;\n        std::vector<matrix<double, 0, 1> >  projs;\n        matrix<double,3,1> m;\n        m = 1, 1, 1;\n        projs.push_back(m);\n\n        m = 1, 2, 1;\n        projs.push_back(m);\n\n        m = 1, 3, 1;\n        projs.push_back(m);\n\n        projs = s(projs,num_dims);\n\n        const double d1a = length(projs[0] - projs[1]);\n        const double d1b = length(projs[1] - projs[2]);\n        const double d2  = length(projs[0] - projs[2]);\n\n        DLIB_TEST(std::abs(d1a-d1b)/d1a < 1e-8);\n        DLIB_TEST(std::abs(d2/d1a-2) < 1e-8);\n    }\n\n    void runtest4(int num_dims)\n    {\n        sammon_projection s;\n        std::vector<matrix<double, 0, 1> >  projs;\n        matrix<double,3,1> m;\n        m = 1, 1, 1;\n        projs.push_back(m);\n\n        m = 1, 2, 1;\n        projs.push_back(m);\n\n\n        projs = s(projs,num_dims);\n\n        DLIB_TEST(length(projs[0] - projs[1]) > 1e-5); \n    }\n\n    class sammon_tester : public tester\n    {\n    public:\n        sammon_tester (\n        ) :\n            tester (\"test_sammon\",\n                    \"Runs tests on the sammon_projection component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            runtest();\n            print_spinner();\n            runtest2();\n            print_spinner();\n            runtest3(2);\n            print_spinner();\n            runtest4(2);\n            runtest3(1);\n            print_spinner();\n            runtest4(1);\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/scan_image.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include \"dlib/image_processing.h\"\n\n#include \"dlib/test/tester.h\"\n\n#include \"dlib/image_transforms.h\"\n#include \"dlib/pixel.h\"\n#include \"dlib/array2d.h\"\n#include \"dlib/array.h\"\n\n// ----------------------------------------------------------------------------------------\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    using dlib::array;\n\n    // Declare the logger we will use in this test.  The name of the tester \n    // should start with \"test.\"\n    logger dlog(\"test.scan_image\");\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename image_type1, typename image_type2>\n    void sum_filter_i (\n        const image_type1& img,\n        image_type2& out,\n        const rectangle& rect\n    )\n    {\n        typedef typename image_type1::type pixel_type;\n        typedef typename promote<pixel_type>::type ptype;\n        integral_image_generic<ptype> iimg;\n        iimg.load(img);\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                const rectangle temp = translate_rect(rect, point(c,r)).intersect(get_rect(iimg));\n                if (temp.is_empty() == false)\n                    out[r][c] += iimg.get_sum_of_area(temp);\n            }\n        }\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    void scan_image_i (\n        std::vector<std::pair<double, point> >& dets,\n        const image_array_type& images,\n        const std::vector<std::pair<unsigned int, rectangle> >& rects,\n        const double thresh,\n        const unsigned long max_dets\n    )\n    {\n        typedef typename image_array_type::type::type pixel_type;\n        typedef typename promote<pixel_type>::type ptype;\n        array<integral_image_generic<ptype> > iimg;\n        iimg.set_max_size(images.size());\n        iimg.set_size(images.size());\n\n        for (unsigned long i = 0; i < iimg.size(); ++i)\n            iimg[i].load(images[i]);\n\n\n        dets.clear();\n\n\n        for (long r = 0; r < images[0].nr(); ++r)\n        {\n            for (long c = 0; c < images[0].nc(); ++c)\n            {\n                ptype temp = 0;\n                for (unsigned long i = 0; i < rects.size(); ++i)\n                {\n                    rectangle rtemp = translate_rect(rects[i].second,point(c,r)).intersect(get_rect(images[0]));\n                    if (rtemp.is_empty() == false)\n                        temp += iimg[rects[i].first].get_sum_of_area(rtemp);\n                }\n                if (temp > thresh)\n                {\n                    dets.push_back(std::make_pair(temp, point(c,r)));\n\n                    if (dets.size() >= max_dets)\n                        return;\n\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_array_type\n        >\n    void scan_image_old (\n        std::vector<std::pair<double, point> >& dets,\n        const image_array_type& images,\n        const std::vector<std::pair<unsigned int, rectangle> >& rects,\n        const double thresh,\n        const unsigned long max_dets\n    )\n    {\n        dets.clear();\n        if (max_dets == 0)\n            return;\n\n        typedef typename image_array_type::type::type pixel_type;\n        typedef typename promote<pixel_type>::type ptype;\n\n        std::vector<std::vector<ptype> > column_sums(rects.size());\n        for (unsigned long i = 0; i < column_sums.size(); ++i)\n        {\n            const typename image_array_type::type& img = images[rects[i].first];\n            column_sums[i].resize(img.nc() + rects[i].second.width(),0);\n\n            const long top    = -1 + rects[i].second.top();\n            const long bottom = -1 + rects[i].second.bottom();\n            long left = rects[i].second.left()-1;\n\n            // initialize column_sums[i] at row -1\n            for (unsigned long j = 0; j < column_sums[i].size(); ++j)\n            {\n                rectangle strip(left,top,left,bottom);\n                strip = strip.intersect(get_rect(img));\n                if (!strip.is_empty())\n                {\n                    column_sums[i][j] = sum(matrix_cast<ptype>(subm(mat(img),strip)));\n                }\n\n                ++left;\n            }\n        }\n\n\n        const rectangle area = get_rect(images[0]);\n\n        for (long r = 0; r < images[0].nr(); ++r)\n        {\n            // set to sum at point(-1,r). i.e. should be equal to sum_of_rects_in_images(images, rects, point(-1,r))\n            // We compute it's value in the next loop.\n            ptype cur_sum = 0;\n                            \n            // Update the first part of column_sums since we only work on the c+width part of column_sums\n            // in the main loop.\n            for (unsigned long i = 0; i < rects.size(); ++i)\n            {\n                const typename image_array_type::type& img = images[rects[i].first];\n                const long top    = r + rects[i].second.top() - 1;\n                const long bottom = r + rects[i].second.bottom();\n                const long width  = rects[i].second.width();\n                for (long k = 0; k < width; ++k)\n                {\n                    const long right  = k-width + rects[i].second.right();\n\n                    const ptype br_corner = area.contains(right,bottom) ? img[bottom][right] : 0;\n                    const ptype tr_corner = area.contains(right,top)    ? img[top][right]    : 0;\n                    // update the sum in this column now that we are on the next row\n                    column_sums[i][k] = column_sums[i][k] + br_corner - tr_corner;\n                    cur_sum += column_sums[i][k];\n                }\n            }\n\n            for (long c = 0; c < images[0].nc(); ++c)\n            {\n                for (unsigned long i = 0; i < rects.size(); ++i)\n                {\n                    const typename image_array_type::type& img = images[rects[i].first];\n                    const long top    = r + rects[i].second.top() - 1;\n                    const long bottom = r + rects[i].second.bottom();\n                    const long right  = c + rects[i].second.right();\n                    const long width  =     rects[i].second.width();\n\n                    const ptype br_corner = area.contains(right,bottom) ? img[bottom][right] : 0;\n                    const ptype tr_corner = area.contains(right,top)    ? img[top][right]    : 0;\n                    // update the sum in this column now that we are on the next row\n                    column_sums[i][c+width] = column_sums[i][c+width] + br_corner - tr_corner;\n\n\n                    // add in the new right side of the rect and subtract the old right side.\n                    cur_sum = cur_sum + column_sums[i][c+width] - column_sums[i][c];\n                    \n                }\n\n                if (cur_sum > thresh)\n                {\n                    dets.push_back(std::make_pair(cur_sum, point(c,r)));\n\n                    if (dets.size() >= max_dets)\n                        return;\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void run_test1()\n    {\n        dlog << LINFO << \"run_test1()\";\n\n        print_spinner();\n        array2d<unsigned char> img, temp_img;\n        img.set_size(600,600);\n        assign_all_pixels(img,0);\n        rectangle rect = centered_rect(10,10,5,5);\n        dlog << LTRACE << \"expected: 10,10\";\n        fill_rect(img, rect, 255); \n\n\n        array<array2d<unsigned char> > images;\n        std::vector<std::pair<unsigned int, rectangle> > rects;\n        for (int i = 0; i < 10; ++i)\n        {\n            assign_image(temp_img, img);\n            images.push_back(temp_img);\n            rects.push_back(make_pair(i,centered_rect(0,0,5,5)));\n        }\n\n        std::vector<std::pair<double, point> > dets, dets2, dets3;\n\n\n        dlog << LTRACE << \"best score: \"<< sum_of_rects_in_images(images,rects,point(10,10));\n        scan_image(dets,images,rects,30000, 100);\n        scan_image_i(dets2,images,rects,30000, 100);\n        scan_image_old(dets3,images,rects,30000, 100);\n\n\n\n        dlog << LTRACE << \"dets.size(): \"<< dets.size();\n        dlog << LTRACE << \"dets2.size(): \"<< dets2.size();\n        dlog << LTRACE << \"dets3.size(): \"<< dets3.size();\n\n        DLIB_TEST(dets.size() == dets2.size());\n        DLIB_TEST(dets.size() == dets3.size());\n\n        for (unsigned long i = 0; i < dets.size(); ++i)\n        {\n            //dlog << LTRACE << \"dets[\"<<i<<\"]: \" << dets[i].second << \"  -> \" << dets[i].first;\n            //dlog << LTRACE << \"dets2[\"<<i<<\"]: \" << dets2[i].second << \"  -> \" << dets2[i].first;\n            //dlog << LTRACE << \"dets3[\"<<i<<\"]: \" << dets3[i].second << \"  -> \" << dets3[i].first;\n\n            DLIB_TEST(sum_of_rects_in_images(images, rects, dets[i].second) == dets[i].first);\n            DLIB_TEST(sum_of_rects_in_images(images, rects, dets2[i].second) == dets2[i].first);\n            DLIB_TEST(sum_of_rects_in_images(images, rects, dets3[i].second) == dets3[i].first);\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void run_test2()\n    {\n        print_spinner();\n        dlog << LINFO << \"run_test2()\";\n        array2d<unsigned char> img, temp_img;\n        img.set_size(600,600);\n        assign_all_pixels(img,0);\n        rectangle rect = centered_rect(10,11,5,6);\n        dlog << LTRACE << \"expected: 10,11\";\n        fill_rect(img, rect, 255); \n\n\n        array<array2d<unsigned char> > images;\n        std::vector<std::pair<unsigned int, rectangle> > rects;\n        for (int i = 0; i < 10; ++i)\n        {\n            assign_image(temp_img, img);\n            images.push_back(temp_img);\n            rects.push_back(make_pair(i,centered_rect(0,0,5,5)));\n            rects.push_back(make_pair(i,centered_rect(3,2,5,6)));\n        }\n\n        std::vector<std::pair<double, point> > dets, dets2, dets3;\n\n\n        scan_image(dets,images,rects,30000, 100);\n        scan_image_i(dets2,images,rects,30000, 100);\n        scan_image_old(dets3,images,rects,30000, 100);\n\n\n\n        dlog << LTRACE << \"dets.size(): \"<< dets.size();\n        dlog << LTRACE << \"dets2.size(): \"<< dets2.size();\n        dlog << LTRACE << \"dets3.size(): \"<< dets3.size();\n\n        DLIB_TEST(dets.size() == dets2.size());\n        DLIB_TEST(dets.size() == dets3.size());\n\n        for (unsigned long i = 0; i < dets.size(); ++i)\n        {\n            //dlog << LTRACE << \"dets[\"<<i<<\"]: \" << dets[i].second << \"  -> \" << dets[i].first;\n            //dlog << LTRACE << \"dets2[\"<<i<<\"]: \" << dets2[i].second << \"  -> \" << dets2[i].first;\n            //dlog << LTRACE << \"dets3[\"<<i<<\"]: \" << dets3[i].second << \"  -> \" << dets3[i].first;\n\n            DLIB_TEST(sum_of_rects_in_images(images, rects, dets[i].second) == dets[i].first);\n            DLIB_TEST(sum_of_rects_in_images(images, rects, dets2[i].second) == dets2[i].first);\n            DLIB_TEST(sum_of_rects_in_images(images, rects, dets3[i].second) == dets3[i].first);\n        }\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void run_test3(const double thresh)\n    {\n        dlog << LINFO << \"running run_test3(\"<<thresh<<\")\";\n        dlib::rand rnd;\n\n        rnd.set_seed(\"235\");\n\n        array<array2d<pixel_type> > images;\n        images.resize(1);\n        images[0].set_size(200,180);\n\n        for (int iter = 0; iter < 50; ++iter)\n        {\n            print_spinner();\n            assign_all_pixels(images[0], thresh - 0.0001);\n\n            for (int i = 0; i < 20; ++i)\n            {\n                point p1(rnd.get_random_32bit_number()%images[0].nc(),\n                         rnd.get_random_32bit_number()%images[0].nr());\n                point p2(rnd.get_random_32bit_number()%images[0].nc(),\n                         rnd.get_random_32bit_number()%images[0].nr());\n\n                rectangle rect(p1,p2);\n                fill_rect(images[0], rect, static_cast<pixel_type>(rnd.get_random_double()*10 - 5));\n            }\n\n            std::vector<std::pair<unsigned int, rectangle> > rects;\n            rects.push_back(make_pair(0,centered_rect(0,0,1+rnd.get_random_32bit_number()%40,1+rnd.get_random_32bit_number()%40)));\n            rects.push_back(make_pair(0,centered_rect(0,0,1+rnd.get_random_32bit_number()%40,1+rnd.get_random_32bit_number()%40)));\n\n\n\n\n            std::vector<std::pair<double, point> > dets, dets2, dets3;\n            scan_image(dets,images,rects,thresh, 100);\n            scan_image_i(dets2,images,rects,thresh, 100);\n            scan_image_old(dets3,images,rects,thresh, 100);\n\n            dlog << LTRACE << \"dets.size(): \"<< dets.size();\n            dlog << LTRACE << \"dets2.size(): \"<< dets2.size();\n            dlog << LTRACE << \"dets3.size(): \"<< dets3.size();\n\n            DLIB_TEST(dets.size() == dets2.size());\n            DLIB_TEST(dets.size() == dets3.size());\n\n            for (unsigned long i = 0; i < dets.size(); ++i)\n            {\n                //dlog << LTRACE << \"dets[\"<<i<<\"]: \" << dets[i].second << \"  -> \" << dets[i].first;\n                //dlog << LTRACE << \"dets2[\"<<i<<\"]: \" << dets2[i].second << \"  -> \" << dets2[i].first;\n                //dlog << LTRACE << \"dets3[\"<<i<<\"]: \" << dets3[i].second << \"  -> \" << dets3[i].first;\n\n                DLIB_TEST_MSG(std::abs(sum_of_rects_in_images(images, rects, dets[i].second) - dets[i].first) < 1e-6,\n                              \"error: \"<< sum_of_rects_in_images(images, rects, dets[i].second) - dets[i].first\n                              << \"   dets[\"<<i<<\"].second: \" << dets[i].second\n                              );\n                DLIB_TEST_MSG(std::abs(sum_of_rects_in_images(images, rects, dets2[i].second) - dets2[i].first) < 1e-6,\n                              sum_of_rects_in_images(images, rects, dets2[i].second) - dets2[i].first\n                              );\n                DLIB_TEST_MSG(std::abs(sum_of_rects_in_images(images, rects, dets3[i].second) - dets3[i].first) < 1e-6,\n                              \"error: \"<< sum_of_rects_in_images(images, rects, dets3[i].second) - dets3[i].first\n                              << \"   dets3[\"<<i<<\"].first: \" << dets3[i].first\n                              << \"   dets3[\"<<i<<\"].second: \" << dets3[i].second\n                              );\n            }\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename pixel_type>\n    void test_sum_filter (\n    )\n    {\n        dlib::rand rnd;\n\n        for (int k = 0; k < 20; ++k)\n        {\n            print_spinner();\n\n            array2d<pixel_type> img(1 + rnd.get_random_32bit_number()%100,\n                                    1 + rnd.get_random_32bit_number()%100);\n\n            for (long r = 0; r < img.nr(); ++r)\n            {\n                for (long c = 0; c < img.nc(); ++c)\n                {\n                    img[r][c] = static_cast<pixel_type>(100*(rnd.get_random_double()-0.5));\n                }\n            }\n\n            array2d<long> test1(img.nr(), img.nc());\n            array2d<double> test2(img.nr(), img.nc());\n            array2d<long> test1_i(img.nr(), img.nc());\n            array2d<double> test2_i(img.nr(), img.nc());\n\n            assign_all_pixels(test1, 0);\n            assign_all_pixels(test2, 0);\n            assign_all_pixels(test1_i, 0);\n            assign_all_pixels(test2_i, 0);\n\n            for (int i = 0; i < 10; ++i)\n            {\n                const long width  = rnd.get_random_32bit_number()%10 + 1;\n                const long height = rnd.get_random_32bit_number()%10 + 1;\n                const point p(rnd.get_random_32bit_number()%img.nc(),\n                              rnd.get_random_32bit_number()%img.nr());\n\n                const rectangle rect = centered_rect(p, width, height);\n                sum_filter(img, test1, rect);\n                sum_filter(img, test2, rect);\n                sum_filter(img, test1_i, rect);\n                sum_filter(img, test2_i, rect);\n\n                DLIB_TEST(mat(test1) == mat(test1_i));\n                DLIB_TEST(mat(test2) == mat(test2_i));\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename image_type1, \n        typename image_type2\n        >\n    void naive_max_filter (\n        const image_type1& img,\n        image_type2& out,\n        const long width,\n        const long height,\n        typename image_type1::type thresh\n        )\n    {\n        const rectangle area = get_rect(img);\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                const rectangle win = centered_rect(point(c,r),width,height).intersect(area);\n                out[r][c] += std::max(dlib::max(subm(mat(img),win)), thresh);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_max_filter(long rows, long cols, long width, long height, dlib::rand& rnd)\n    {\n        array2d<int> img(rows, cols);\n        rectangle rect = centered_rect(0,0, width, height);\n\n        array2d<int> out(img.nr(),img.nc());\n        assign_all_pixels(out, 0);\n        array2d<int> out2(img.nr(),img.nc());\n        assign_all_pixels(out2, 0);\n\n        for (long r = 0; r < img.nr(); ++r)\n        {\n            for (long c = 0; c < img.nc(); ++c)\n            {\n                img[r][c] = rnd.get_random_32bit_number();\n            }\n        }\n\n        const int thresh = rnd.get_random_32bit_number();\n\n        naive_max_filter(img, out2, rect.width(), rect.height(), thresh);\n        max_filter(img, out, rect.width(), rect.height(), thresh);\n\n        DLIB_TEST_MSG(mat(out) == mat(out2),\n                                \"rows: \"<< rows \n                                << \"\\ncols: \"<< rows \n                                << \"\\nwidth: \"<< width \n                                << \"\\nheight: \"<< height );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_max_filter()\n    {\n        dlib::rand rnd;\n        for (int iter = 0; iter < 300; ++iter)\n        {\n            print_spinner();\n            test_max_filter(0,0,1,1,rnd);\n            test_max_filter(0,0,3,1,rnd);\n            test_max_filter(0,0,3,3,rnd);\n            test_max_filter(0,0,1,3,rnd);\n            test_max_filter(1,1,1,1,rnd);\n            test_max_filter(2,2,1,1,rnd);\n            test_max_filter(3,3,1,1,rnd);\n            test_max_filter(3,3,3,3,rnd);\n            test_max_filter(3,3,2,2,rnd);\n            test_max_filter(3,3,3,5,rnd);\n            test_max_filter(3,3,6,8,rnd);\n            test_max_filter(20,20,901,901,rnd);\n            test_max_filter(5,5,1,5,rnd);\n            test_max_filter(50,50,9,9,rnd);\n            test_max_filter(50,50,9,9,rnd);\n            test_max_filter(50,50,10,10,rnd);\n            test_max_filter(50,50,11,10,rnd);\n            test_max_filter(50,50,10,11,rnd);\n            test_max_filter(50,50,10,21,rnd);\n            test_max_filter(50,50,20,10,rnd);\n            test_max_filter(50,50,20,10,rnd);\n            test_max_filter(50,50,9,9,rnd);\n            test_max_filter(20,20,1,901,rnd);\n            test_max_filter(20,20,3,901,rnd);\n            test_max_filter(20,20,901,1,rnd);\n        }\n\n        for (int iter = 0; iter < 200; ++iter)\n        {\n            print_spinner();\n            test_max_filter((int)rnd.get_random_8bit_number()%100+1,\n                            (int)rnd.get_random_8bit_number()%100+1,\n                            (int)rnd.get_random_8bit_number()%150+1,\n                            (int)rnd.get_random_8bit_number()%150+1,\n                            rnd);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void make_images (\n        dlib::rand& rnd,\n        array<array2d<unsigned char> >& images,\n        long num,\n        long nr,\n        long nc\n    )\n    {\n        images.resize(num);\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            images[i].set_size(nr,nc);\n        }\n\n        for (unsigned long i = 0; i < images.size(); ++i)\n        {\n            for (long r = 0; r < nr; ++r)\n            {\n                for (long c = 0; c < nc; ++c)\n                {\n                    images[i][r][c] = rnd.get_random_8bit_number();\n                }\n            }\n        }\n    }\n\n\n    template <\n        typename image_array_type\n        >\n    void brute_force_scan_image_movable_parts (\n        std::vector<std::pair<double, point> >& dets,\n        const image_array_type& images,\n        const rectangle& window,\n        const std::vector<std::pair<unsigned int, rectangle> >& fixed_rects,\n        const std::vector<std::pair<unsigned int, rectangle> >& movable_rects,\n        const double thresh,\n        const unsigned long \n    )\n    {\n        dets.clear();\n        if (movable_rects.size() == 0 && fixed_rects.size() == 0)\n            return;\n\n        for (long r = 0; r < images[0].nr(); ++r)\n        {\n            for (long c = 0; c < images[0].nc(); ++c)\n            {\n                const point p(c,r);\n                double score = sum_of_rects_in_images_movable_parts(images,\n                                                                    window,\n                                                                    fixed_rects,\n                                                                    movable_rects,\n                                                                    p); \n\n                if (score >= thresh)\n                {\n                    dets.push_back(make_pair(score,p));\n                }\n            }\n        }\n    }\n\n    void test_scan_images_movable_parts()\n    {\n        array<array2d<unsigned char> > images;\n        dlib::rand rnd;\n        for (int iter = 0; iter < 40; ++iter)\n        {\n            print_spinner();\n            const int num_images = rnd.get_random_32bit_number()%4+1;\n\n            make_images(rnd,images, num_images, \n                        rnd.get_random_32bit_number()%50+1,\n                        rnd.get_random_32bit_number()%50+1\n                        );\n\n            std::vector<std::pair<double,point> > dets1, dets2;\n            std::vector<std::pair<unsigned int, rectangle> > fixed_rects, movable_rects;\n\n            double total_area = 0;\n            for (unsigned long i = 0; i < images.size(); ++i)\n            {\n                fixed_rects.push_back(make_pair(i, centered_rect(\n                            rnd.get_random_32bit_number()%10-5,\n                            rnd.get_random_32bit_number()%10-5,\n                            rnd.get_random_32bit_number()%10,\n                            rnd.get_random_32bit_number()%10\n                            )));\n\n                total_area += fixed_rects.back().second.area();\n\n                movable_rects.push_back(make_pair(i, centered_rect(\n                            0,\n                            0,\n                            rnd.get_random_32bit_number()%10+1,\n                            rnd.get_random_32bit_number()%10+1\n                            )));\n                total_area += movable_rects.back().second.area();\n            }\n\n            const rectangle window = centered_rect(0,0, \n                                                rnd.get_random_32bit_number()%15+1,\n                                                rnd.get_random_32bit_number()%15+1);\n            dlog << LINFO << \"window size: \"<< window.width() << \", \" << window.height();\n            const double thresh = total_area*130;\n            const unsigned long max_dets = get_rect(images[0]).area();\n\n            scan_image_movable_parts(dets1,images,window,fixed_rects,movable_rects,thresh, max_dets);\n            brute_force_scan_image_movable_parts(dets2,images,window,fixed_rects,movable_rects,thresh, max_dets);\n\n            dlog << LINFO << \"max_possible dets: \" << max_dets;\n            dlog << LINFO << \"regular dets: \" << dets1.size();\n            dlog << LINFO << \"brute force:  \" << dets2.size();\n            DLIB_TEST(dets1.size() == dets2.size());\n\n            array2d<double> check(images[0].nr(), images[0].nc());\n            assign_all_pixels(check, 1e-300);\n            for (unsigned long i = 0; i < dets1.size(); ++i)\n            {\n                const point p = dets1[i].second;\n                check[p.y()][p.x()] = dets1[i].first;\n            }\n            for (unsigned long i = 0; i < dets2.size(); ++i)\n            {\n                const point p = dets2[i].second;\n                DLIB_TEST(std::abs(check[p.y()][p.x()] - dets2[i].first) < 1e-10);\n            }\n            dlog << LINFO << \"=======================\\n\";\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class scan_image_tester : public tester\n    {\n    public:\n        scan_image_tester (\n        ) :\n            tester (\"test_scan_image\",\n                    \"Runs tests on the scan_image routine.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_scan_images_movable_parts();\n            test_max_filter();\n\n            run_test1();\n            run_test2();\n            run_test3<unsigned char>(1);\n            run_test3<unsigned char>(-1);\n            run_test3<double>(1);\n            run_test3<double>(-1);\n\n            test_sum_filter<unsigned char>();\n            test_sum_filter<double>();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sequence.cpp",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/sequence.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.sequence\");\n\n    template <\n        typename seq\n        >\n    void sequence_sort_test (\n    )\n    /*!\n        requires\n            - seq is an implementation of sequence/sequence_sort_aseqract.h is instantiated \n              with int\n        ensures\n            - runs tests on seq for compliance with the specs \n    !*/\n    {        \n\n\n        srand(static_cast<unsigned int>(time(0)));\n\n\n        print_spinner();\n\n\n\n\n\n        {\n            // this test is to make sure that jumping around via\n            // operator[] doesn't corrupt the object\n\n            seq a;\n\n            for (int i = 0; i < 100; ++i)\n            {\n                int x = i;\n                a.add(a.size(),x);\n            }\n\n\n            int x = 0;\n\n            for (int i = 0; i < (int)a.size(); ++i)\n            {\n                DLIB_TEST_MSG(a[i] >= i,\"1\");\n                // cout << a[i] << endl;\n            }\n\n            for (unsigned long i = 0; i < a.size(); ++i)\n            {\n                for (unsigned long j = i+1; j < a.size(); ++j)\n                {\n                    if ((a[j]+a[i])%3 ==0)\n                    {                    \n                        a.remove(j,x);\n                        --j;\n                    }\n                }\n            }\n\n            //cout << endl;\n\n            for (int i = 0; i < (int)a.size(); ++i)\n            {\n                //   cout << a[i] << endl;\n                DLIB_TEST_MSG(a[i] >= i,\"2\");               \n            }\n\n        }\n\n\n\n\n\n\n\n        seq test, test2;\n\n        DLIB_TEST(test.size() == 0);\n        DLIB_TEST(test.at_start() == true);\n        DLIB_TEST(test.current_element_valid() == false);\n\n        enumerable<int>& e = test;\n\n        DLIB_TEST(e.at_start() == true);\n        DLIB_TEST(e.current_element_valid() == false);\n\n\n        for (int g = 0; g < 5; ++g)\n        {\n            test.clear();\n            test2.clear();\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(e.at_start() == true);\n            DLIB_TEST(e.current_element_valid() == false);\n\n            DLIB_TEST(e.move_next() == false);\n            DLIB_TEST(e.current_element_valid() == false);\n            DLIB_TEST(e.at_start() == false);\n            DLIB_TEST(test.at_start() == false);\n            swap(test,test2);\n            DLIB_TEST(test.at_start() == true);\n            test.clear();\n            test2.clear();\n\n            int a;\n\n\n            for (int i = 0; i < 100; ++i)\n            {\n                a = i;\n                test.add(i,a);\n            }\n\n            DLIB_TEST(test.size() == 100);\n\n            for (int i = 0; i < static_cast<int>(test.size()); ++i)\n            {       \n                DLIB_TEST(test[i] == i);\n            }   \n\n            swap(test,test2);\n\n            a = 0;\n            DLIB_TEST(test2.at_start() == true);\n            while(test2.move_next())\n            {\n                DLIB_TEST(test2.at_start() == false);\n                DLIB_TEST(test2.current_element_valid() == true);\n                DLIB_TEST(test2.element() == a);\n                ++a;\n            }\n\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n\n            test2.reset();\n\n            DLIB_TEST(test2.at_start() == true);\n            DLIB_TEST(test2.current_element_valid() == false);\n\n            a = 0;\n            while(test2.move_next())\n            {\n                DLIB_TEST(test2.at_start() == false);\n                DLIB_TEST(test2.current_element_valid() == true);\n                DLIB_TEST(test2.element() == a);\n                ++a;\n            }\n\n\n\n\n\n            for (int i = 0; i < 1000; ++i)\n            {\n                a = ::rand();\n                test.add(0,a);\n            }\n            DLIB_TEST(test.size() == 1000);\n\n            test.sort();\n\n\n            for (unsigned long i = 0; i < test.size()-1; ++i)\n            {\n                DLIB_TEST(test[i] <= test[i+1]);    \n            }\n\n            a = 0;\n            while(test.move_next())\n            {\n                DLIB_TEST(a <= test.element());\n                a = test.element();\n            }\n\n\n            test.clear();\n            test2.clear();\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test2.size() == 0);\n\n            for (int i = 0; i < 100; ++i)\n            {\n                a = i;\n                test.add(i,a);\n            }\n\n            for (int i = 100; i < 200; ++i)\n            {\n                a = i;\n                test.add(i,a);\n            }\n\n            test.cat(test2);\n            DLIB_TEST(test.size() == 200);\n            DLIB_TEST(test2.size() == 0);\n\n\n            // serialize the state of test, then clear test, then\n            // load the state back into test.\n            ostringstream sout;\n            serialize(test,sout);\n            DLIB_TEST(test.at_start() == true);\n            istringstream sin(sout.str());\n            test.clear();\n            deserialize(test,sin);\n\n\n            for (int i = 0; i < 200; ++i)\n            {\n                DLIB_TEST(test[i] == i);\n            }\n\n            a = 0;\n            while (test.move_next())\n            {\n                DLIB_TEST(test.element() == a);\n                DLIB_TEST(test[0]==0);\n                ++a;\n            }\n\n            DLIB_TEST(a == 200);\n\n            DLIB_TEST(test[9] == 9);\n            test.remove(9,a);\n            DLIB_TEST(a == 9);\n            DLIB_TEST(test[9] == 10);\n            DLIB_TEST(test.size() == 199);\n\n            test.remove(0,a);\n            DLIB_TEST(test[0] == 1);\n            DLIB_TEST(test.size() == 198);\n            DLIB_TEST(a == 0);\n            DLIB_TEST(test[9] == 11);\n            DLIB_TEST(test[20] == 22);\n\n\n\n\n        }\n\n        {\n            test.clear();\n            for (int i = 0; i < 100; ++i)\n            {\n                int a = 3;\n                test.add(0,a);\n            }\n            DLIB_TEST(test.size() == 100);\n            remover<int>& go = test;\n            for (int i = 0; i < 100; ++i)\n            {\n                int a = 9;\n                go.remove_any(a);\n                DLIB_TEST(a == 3);\n            }\n            DLIB_TEST(go.size() == 0);\n        }\n\n\n    }\n\n\n\n\n    class sequence_tester : public tester\n    {\n    public:\n        sequence_tester (\n        ) :\n            tester (\"test_sequence\",\n                    \"Runs tests on the sequence component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing sort_1a\";\n            sequence_sort_test<sequence<int>::sort_1a>  ();\n            dlog << LINFO << \"testing sort_1a_c\";\n            sequence_sort_test<sequence<int>::sort_1a_c>();\n            dlog << LINFO << \"testing sort_2a\";\n            sequence_sort_test<sequence<int>::sort_2a>  ();\n            dlog << LINFO << \"testing sort_2a_c\";\n            sequence_sort_test<sequence<int>::sort_2a_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sequence_labeler.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n#include <dlib/rand.h>\n\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.sequence_labeler\");\n\n// ----------------------------------------------------------------------------------------\n\n    const unsigned long num_label_states = 3; // the \"hidden\" states\n    const unsigned long num_sample_states = 3;\n\n// ----------------------------------------------------------------------------------------\n\n    struct funny_sequence\n    {\n        std::vector<unsigned long> item;\n        unsigned long size() const { return item.size(); }\n    };\n    funny_sequence make_funny_sequence(const std::vector<unsigned long>& item)\n    {\n        funny_sequence temp;\n        temp.item = item;\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class feature_extractor\n    {\n    public:\n        typedef funny_sequence sequence_type; \n\n        unsigned long num_features() const\n        {\n            return num_label_states*num_label_states + num_label_states*num_sample_states;\n        }\n\n        unsigned long order() const \n        { \n            return 1; \n        }\n\n        unsigned long num_labels() const \n        { \n            return num_label_states; \n        }\n\n        template <typename feature_setter, typename EXP>\n        void get_features (\n            feature_setter& set_feature,\n            const sequence_type& x,\n            const matrix_exp<EXP>& y,\n            unsigned long position\n        ) const\n        {\n            if (y.size() > 1)\n                set_feature(y(1)*num_label_states + y(0));\n\n            set_feature(num_label_states*num_label_states +\n                        y(0)*num_sample_states + x.item[position]);\n        }\n    };\n\n    class feature_extractor_partial\n    {\n    public:\n        typedef funny_sequence sequence_type; \n\n        unsigned long num_features() const\n        {\n            return num_label_states*num_label_states + num_label_states*num_sample_states;\n        }\n\n        unsigned long order() const \n        { \n            return 1; \n        }\n\n        unsigned long num_labels() const \n        { \n            return num_label_states; \n        }\n\n        template <typename feature_setter, typename EXP>\n        void get_features (\n            feature_setter& set_feature,\n            const sequence_type& x,\n            const matrix_exp<EXP>& y,\n            unsigned long position\n        ) const\n        {\n            if (y.size() > 1)\n            {\n                set_feature(y(1)*num_label_states + y(0), 0.5);\n                set_feature(y(1)*num_label_states + y(0), 0.5);\n            }\n\n            set_feature(num_label_states*num_label_states +\n                        y(0)*num_sample_states + x.item[position],0.25);\n            set_feature(num_label_states*num_label_states +\n                        y(0)*num_sample_states + x.item[position],0.75);\n        }\n    };\n\n    bool called_rejct_labeling = false;\n    class feature_extractor2\n    {\n    public:\n        typedef funny_sequence sequence_type; \n\n        unsigned long num_features() const\n        {\n            return num_label_states*num_label_states + num_label_states*num_sample_states;\n        }\n\n        unsigned long order() const \n        { \n            return 1; \n        }\n\n        unsigned long num_labels() const \n        { \n            return num_label_states; \n        }\n\n        template <typename EXP>\n        bool reject_labeling (\n            const sequence_type& ,\n            const matrix_exp<EXP>& ,\n            unsigned long \n        ) const\n        {\n            called_rejct_labeling = true;\n            return false;\n        }\n\n        template <typename feature_setter, typename EXP>\n        void get_features (\n            feature_setter& set_feature,\n            const sequence_type& x,\n            const matrix_exp<EXP>& y,\n            unsigned long position\n        ) const\n        {\n            if (y.size() > 1)\n                set_feature(y(1)*num_label_states + y(0));\n\n            set_feature(num_label_states*num_label_states +\n                        y(0)*num_sample_states + x.item[position]);\n        }\n    };\n\n    void serialize(const feature_extractor&, std::ostream&) {}\n    void deserialize(feature_extractor&, std::istream&) {}\n    void serialize(const feature_extractor2&, std::ostream&) {}\n    void deserialize(feature_extractor2&, std::istream&) {}\n\n// ----------------------------------------------------------------------------------------\n\n    void sample_hmm (\n        dlib::rand& rnd,\n        const matrix<double>& transition_probabilities,\n        const matrix<double>& emission_probabilities,\n        unsigned long previous_label,\n        unsigned long& next_label,\n        unsigned long& next_sample\n    )\n    /*!\n        requires\n            - previous_label < transition_probabilities.nr()\n            - transition_probabilities.nr() == transition_probabilities.nc()\n            - transition_probabilities.nr() == emission_probabilities.nr()\n            - The rows of transition_probabilities and emission_probabilities must sum to 1.\n              (i.e. sum_cols(transition_probabilities) and sum_cols(emission_probabilities)\n              must evaluate to vectors of all 1s.)\n        ensures\n            - This function randomly samples the HMM defined by transition_probabilities\n              and emission_probabilities assuming that the previous hidden state\n              was previous_label. \n            - The HMM is defined by:\n                - P(next_label |previous_label) == transition_probabilities(previous_label, next_label)\n                - P(next_sample|next_label)     == emission_probabilities  (next_label,     next_sample)\n            - #next_label == the sampled value of the hidden state\n            - #next_sample == the sampled value of the observed state\n    !*/\n    {\n        // sample next_label\n        double p = rnd.get_random_double();\n        for (long c = 0; p >= 0 && c < transition_probabilities.nc(); ++c)\n        {\n            next_label = c;\n            p -= transition_probabilities(previous_label, c);\n        }\n\n        // now sample next_sample\n        p = rnd.get_random_double();\n        for (long c = 0; p >= 0 && c < emission_probabilities.nc(); ++c)\n        {\n            next_sample = c;\n            p -= emission_probabilities(next_label, c);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void make_dataset (\n        const matrix<double>& transition_probabilities,\n        const matrix<double>& emission_probabilities,\n        std::vector<funny_sequence>& samples,\n        std::vector<std::vector<unsigned long> >& labels,\n        unsigned long dataset_size\n    )\n    /*!\n        requires\n            - transition_probabilities.nr() == transition_probabilities.nc()\n            - transition_probabilities.nr() == emission_probabilities.nr()\n            - The rows of transition_probabilities and emission_probabilities must sum to 1.\n              (i.e. sum_cols(transition_probabilities) and sum_cols(emission_probabilities)\n              must evaluate to vectors of all 1s.)\n        ensures\n            - This function randomly samples a bunch of sequences from the HMM defined by \n              transition_probabilities and emission_probabilities. \n            - The HMM is defined by:\n                - The probability of transitioning from hidden state H1 to H2 \n                  is given by transition_probabilities(H1,H2).\n                - The probability of a hidden state H producing an observed state\n                  O is given by emission_probabilities(H,O).\n            - #samples.size() == labels.size() == dataset_size\n            - for all valid i:\n                - #labels[i] is a randomly sampled sequence of hidden states from the\n                  given HMM.  #samples[i] is its corresponding randomly sampled sequence\n                  of observed states.\n    !*/\n    {\n        samples.clear();\n        labels.clear();\n\n        dlib::rand rnd;\n\n        // now randomly sample some labeled sequences from our Hidden Markov Model\n        for (unsigned long iter = 0; iter < dataset_size; ++iter)\n        {\n            const unsigned long sequence_size = rnd.get_random_32bit_number()%20+3;\n            std::vector<unsigned long> sample(sequence_size);\n            std::vector<unsigned long> label(sequence_size);\n\n            unsigned long previous_label = rnd.get_random_32bit_number()%num_label_states;\n            for (unsigned long i = 0; i < sample.size(); ++i)\n            {\n                unsigned long next_label=0, next_sample=0;\n                sample_hmm(rnd, transition_probabilities, emission_probabilities, \n                           previous_label, next_label, next_sample);\n\n                label[i] = next_label;\n                sample[i] = next_sample;\n\n                previous_label = next_label;\n            }\n\n            samples.push_back(make_funny_sequence(sample));\n            labels.push_back(label);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename fe_type>\n    void do_test()\n    {\n        called_rejct_labeling = false;\n\n        matrix<double> transition_probabilities(num_label_states, num_label_states);\n        transition_probabilities = 0.05, 0.90, 0.05,\n        0.05, 0.05, 0.90,\n        0.90, 0.05, 0.05;\n\n        matrix<double> emission_probabilities(num_label_states,num_sample_states);\n        emission_probabilities = 0.5, 0.5, 0.0,\n        0.0, 0.5, 0.5,\n        0.5, 0.0, 0.5;\n\n        print_spinner();\n\n\n        std::vector<funny_sequence> samples;\n        std::vector<std::vector<unsigned long> > labels;\n        make_dataset(transition_probabilities,emission_probabilities, \n                     samples, labels, 1000);\n\n        dlog << LINFO << \"samples.size(): \"<< samples.size();\n\n        // print out some of the randomly sampled sequences\n        for (int i = 0; i < 10; ++i)\n        {\n            dlog << LINFO << \"hidden states:   \" << trans(mat(labels[i]));\n            dlog << LINFO << \"observed states: \" << trans(mat(samples[i].item));\n            dlog << LINFO << \"******************************\";\n        }\n\n        print_spinner();\n        structural_sequence_labeling_trainer<fe_type> trainer;\n        trainer.set_c(4);\n        DLIB_TEST(trainer.get_c() == 4);\n        trainer.set_num_threads(4);\n        DLIB_TEST(trainer.get_num_threads() == 4);\n\n\n\n        // Learn to do sequence labeling from the dataset\n        sequence_labeler<fe_type> labeler = trainer.train(samples, labels);\n\n        std::vector<unsigned long> predicted_labels = labeler(samples[0]);\n        dlog << LINFO << \"true hidden states:      \"<< trans(mat(labels[0]));\n        dlog << LINFO << \"predicted hidden states: \"<< trans(mat(predicted_labels));\n\n        DLIB_TEST(mat(labels[0]) == mat(predicted_labels));\n\n\n        print_spinner();\n\n\n        // We can also do cross-validation \n        matrix<double> confusion_matrix;\n        confusion_matrix = cross_validate_sequence_labeler(trainer, samples, labels, 4);\n        dlog << LINFO << \"cross-validation: \";\n        dlog << LINFO << confusion_matrix;\n        double accuracy = sum(diag(confusion_matrix))/sum(confusion_matrix);\n        dlog << LINFO << \"label accuracy: \"<< accuracy;\n        DLIB_TEST(std::abs(accuracy - 0.882) < 0.01);\n\n        print_spinner();\n\n\n        matrix<double,0,1> true_hmm_model_weights = log(join_cols(reshape_to_column_vector(transition_probabilities),\n                                                                  reshape_to_column_vector(emission_probabilities)));\n\n        sequence_labeler<fe_type> labeler_true(true_hmm_model_weights); \n\n        confusion_matrix = test_sequence_labeler(labeler_true, samples, labels);\n        dlog << LINFO << \"True HMM model: \";\n        dlog << LINFO << confusion_matrix;\n        accuracy = sum(diag(confusion_matrix))/sum(confusion_matrix);\n        dlog << LINFO << \"label accuracy: \"<< accuracy;\n        DLIB_TEST(std::abs(accuracy - 0.882) < 0.01);\n\n\n\n        print_spinner();\n\n\n\n\n        // Finally, the labeler can be serialized to disk just like most dlib objects.\n        ostringstream sout;\n        serialize(labeler, sout);\n\n        sequence_labeler<fe_type> labeler2;\n        // recall from disk\n        istringstream sin(sout.str());\n        deserialize(labeler2, sin);\n        confusion_matrix = test_sequence_labeler(labeler2, samples, labels);\n        dlog << LINFO << \"deserialized labeler: \";\n        dlog << LINFO << confusion_matrix;\n        accuracy = sum(diag(confusion_matrix))/sum(confusion_matrix);\n        dlog << LINFO << \"label accuracy: \"<< accuracy;\n        DLIB_TEST(std::abs(accuracy - 0.882) < 0.01);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test2()\n    {\n        /*\n            The point of this test is to make sure calling set_feature() multiple\n            times works the way it is supposed to.\n        */\n\n        print_spinner();\n        std::vector<funny_sequence> samples;\n        std::vector<std::vector<unsigned long> > labels;\n\n        matrix<double> transition_probabilities(num_label_states, num_label_states);\n        transition_probabilities = 0.05, 0.90, 0.05,\n        0.05, 0.05, 0.90,\n        0.90, 0.05, 0.05;\n\n        matrix<double> emission_probabilities(num_label_states,num_sample_states);\n        emission_probabilities = 0.5, 0.5, 0.0,\n        0.0, 0.5, 0.5,\n        0.5, 0.0, 0.5;\n\n\n        make_dataset(transition_probabilities,emission_probabilities, \n                     samples, labels, 1000);\n\n        dlog << LINFO << \"samples.size(): \"<< samples.size();\n\n        structural_sequence_labeling_trainer<feature_extractor> trainer;\n        structural_sequence_labeling_trainer<feature_extractor_partial> trainer_part;\n        trainer.set_c(4);\n        trainer_part.set_c(4);\n        trainer.set_num_threads(4);\n        trainer_part.set_num_threads(4);\n        trainer.set_epsilon(1e-8);\n        trainer_part.set_epsilon(1e-8);\n\n\n\n        // Learn to do sequence labeling from the dataset\n        sequence_labeler<feature_extractor> labeler = trainer.train(samples, labels);\n        sequence_labeler<feature_extractor_partial> labeler_part = trainer_part.train(samples, labels);\n\n        dlog << LINFO << \"weight disagreement:  \"<< max(abs(labeler.get_weights() - labeler_part.get_weights()));\n        dlog << LINFO << \"max weight magnitude: \"<< max(abs(labeler.get_weights()));\n\n        // Both feature extractors should be equivalent.\n        DLIB_TEST(max(abs(labeler.get_weights() - labeler_part.get_weights())) < 1e-6);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class sequence_labeler_tester : public tester\n    {\n    public:\n        sequence_labeler_tester (\n        ) :\n            tester (\"test_sequence_labeler\",\n                    \"Runs tests on the sequence labeling code.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            do_test<feature_extractor>();\n            DLIB_TEST(called_rejct_labeling == false);\n            do_test<feature_extractor2>();\n            DLIB_TEST(called_rejct_labeling == true);\n\n            test2();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sequence_segmenter.cpp",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n#include <dlib/rand.h>\n\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.sequence_segmenter\");\n\n// ----------------------------------------------------------------------------------------\n\n    dlib::rand rnd;\n\n    template <bool use_BIO_model_, bool use_high_order_features_, bool allow_negative_weights_>\n    class unigram_extractor\n    {\n    public:\n\n        const static bool use_BIO_model = use_BIO_model_;\n        const static bool use_high_order_features = use_high_order_features_;\n        const static bool allow_negative_weights = allow_negative_weights_;\n\n        typedef std::vector<unsigned long> sequence_type; \n\n        std::map<unsigned long, matrix<double,0,1> > feats;\n\n        unigram_extractor()\n        {\n            matrix<double,0,1> v1, v2, v3;\n            v1 = randm(num_features(), 1, rnd);\n            v2 = randm(num_features(), 1, rnd);\n            v3 = randm(num_features(), 1, rnd);\n            v1(0) = 1;\n            v2(1) = 1;\n            v3(2) = 1;\n            v1(3) = -1;\n            v2(4) = -1;\n            v3(5) = -1;\n            for (unsigned long i = 0; i < num_features(); ++i)\n            {\n                if ( i < 3)\n                    feats[i] = v1;\n                else if (i < 6)\n                    feats[i] = v2;\n                else\n                    feats[i] = v3;\n            }\n        }\n\n        unsigned long num_features() const { return 10; }\n        unsigned long window_size() const { return 3; }\n\n        template <typename feature_setter>\n        void get_features (\n            feature_setter& set_feature,\n            const sequence_type& x,\n            unsigned long position\n        ) const\n        {\n            const matrix<double,0,1>& m = feats.find(x[position])->second;\n            for (unsigned long i = 0; i < num_features(); ++i)\n            {\n                set_feature(i, m(i));\n            }\n        }\n\n    };\n\n    template <bool use_BIO_model_, bool use_high_order_features_, bool neg>\n    void serialize(const unigram_extractor<use_BIO_model_,use_high_order_features_,neg>& item , std::ostream& out )\n    {\n        serialize(item.feats, out);\n    }\n\n    template <bool use_BIO_model_, bool use_high_order_features_, bool neg>\n    void deserialize(unigram_extractor<use_BIO_model_,use_high_order_features_,neg>& item, std::istream& in)\n    {\n        deserialize(item.feats, in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void make_dataset (\n        std::vector<std::vector<unsigned long> >& samples,\n        std::vector<std::vector<unsigned long> >& labels,\n        unsigned long dataset_size\n    )\n    {\n        samples.clear();\n        labels.clear();\n\n        samples.resize(dataset_size);\n        labels.resize(dataset_size);\n\n\n        unigram_extractor<true,true,true> fe;\n        dlib::rand rnd;\n\n        for (unsigned long iter = 0; iter < dataset_size; ++iter)\n        {\n\n            samples[iter].resize(10);\n            labels[iter].resize(10);\n\n            for (unsigned long i = 0; i < samples[iter].size(); ++i)\n            {\n                samples[iter][i] = rnd.get_random_32bit_number()%fe.num_features();\n                if (samples[iter][i] < 3)\n                {\n                    labels[iter][i] = impl_ss::BEGIN;\n                }\n                else if (samples[iter][i] < 6)\n                {\n                    labels[iter][i] = impl_ss::INSIDE;\n                }\n                else\n                {\n                    labels[iter][i] = impl_ss::OUTSIDE;\n                }\n\n                if (i != 0)\n                {\n                    // do rejection sampling to avoid impossible labels\n                    if (labels[iter][i] == impl_ss::INSIDE &&\n                        labels[iter][i-1] == impl_ss::OUTSIDE)\n                    {\n                        --i;\n                    }\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void make_dataset2 (\n        std::vector<std::vector<unsigned long> >& samples,\n        std::vector<std::vector<std::pair<unsigned long, unsigned long> > >& segments,\n        unsigned long dataset_size\n    )\n    {\n        segments.clear();\n        std::vector<std::vector<unsigned long> > labels;\n        make_dataset(samples, labels, dataset_size);\n        segments.resize(samples.size());\n\n        // Convert from BIO tagging to the explicit segments representation.\n        for (unsigned long k = 0; k < labels.size(); ++k)\n        {\n            for (unsigned long i = 0; i < labels[k].size(); ++i)\n            {\n                if (labels[k][i] == impl_ss::BEGIN)\n                {\n                    const unsigned long begin = i;\n                    ++i;\n                    while (i < labels[k].size() && labels[k][i] == impl_ss::INSIDE)\n                        ++i;\n\n                    segments[k].push_back(std::make_pair(begin, i));\n                    --i;\n                }\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <bool use_BIO_model, bool use_high_order_features, bool allow_negative_weights>\n    void do_test()\n    {\n        dlog << LINFO << \"use_BIO_model: \"<< use_BIO_model;\n        dlog << LINFO << \"use_high_order_features: \"<< use_high_order_features;\n        dlog << LINFO << \"allow_negative_weights: \"<< allow_negative_weights;\n\n        std::vector<std::vector<unsigned long> > samples;\n        std::vector<std::vector<std::pair<unsigned long,unsigned long> > > segments;\n        make_dataset2( samples, segments, 100);\n\n        print_spinner();\n        typedef unigram_extractor<use_BIO_model,use_high_order_features,allow_negative_weights> fe_type;\n\n        fe_type fe_temp;\n        fe_type fe_temp2;\n        structural_sequence_segmentation_trainer<fe_type> trainer(fe_temp2);\n        trainer.set_c(5);\n        trainer.set_num_threads(1);\n\n\n        sequence_segmenter<fe_type> labeler = trainer.train(samples, segments);\n\n        print_spinner();\n\n        const std::vector<std::pair<unsigned long, unsigned long> > predicted_labels = labeler(samples[1]);\n        const std::vector<std::pair<unsigned long, unsigned long> > true_labels = segments[1];\n        /*\n        for (unsigned long i = 0; i < predicted_labels.size(); ++i)\n            cout << \"[\"<<predicted_labels[i].first<<\",\"<<predicted_labels[i].second<<\") \";\n        cout << endl;\n        for (unsigned long i = 0; i < true_labels.size(); ++i)\n            cout << \"[\"<<true_labels[i].first<<\",\"<<true_labels[i].second<<\") \";\n        cout << endl;\n        */\n\n        DLIB_TEST(predicted_labels.size() > 0);\n        DLIB_TEST(predicted_labels.size() == true_labels.size());\n        for (unsigned long i = 0; i < predicted_labels.size(); ++i)\n        {\n            DLIB_TEST(predicted_labels[i].first == true_labels[i].first);\n            DLIB_TEST(predicted_labels[i].second == true_labels[i].second);\n        }\n\n\n        matrix<double> res;\n\n        res = cross_validate_sequence_segmenter(trainer, samples, segments, 3);\n        dlog << LINFO << \"cv res:   \"<< res;\n        DLIB_TEST(min(res) > 0.98);\n        make_dataset2( samples, segments, 100);\n        res = test_sequence_segmenter(labeler, samples, segments);\n        dlog << LINFO << \"test res: \"<< res;\n        DLIB_TEST(min(res) > 0.98);\n\n        print_spinner();\n\n        ostringstream sout;\n        serialize(labeler, sout);\n        istringstream sin(sout.str());\n        sequence_segmenter<fe_type> labeler2;\n        deserialize(labeler2, sin);\n\n        res = test_sequence_segmenter(labeler2, samples, segments);\n        dlog << LINFO << \"test res2: \"<< res;\n        DLIB_TEST(min(res) > 0.98);\n\n        long N;\n        if (use_BIO_model)\n            N = 3*3+3;\n        else\n            N = 5*5+5;\n        const double min_normal_weight = min(colm(labeler2.get_weights(), 0, labeler2.get_weights().size()-N));\n        const double min_trans_weight = min(labeler2.get_weights());\n        dlog << LINFO << \"min_normal_weight: \" << min_normal_weight;\n        dlog << LINFO << \"min_trans_weight:  \" << min_trans_weight;\n        if (allow_negative_weights)\n        {\n            DLIB_TEST(min_normal_weight < 0);\n            DLIB_TEST(min_trans_weight < 0);\n        }\n        else\n        {\n            DLIB_TEST(min_normal_weight == 0);\n            DLIB_TEST(min_trans_weight < 0);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    class unit_test_sequence_segmenter : public tester\n    {\n    public:\n        unit_test_sequence_segmenter (\n        ) :\n            tester (\"test_sequence_segmenter\",\n                \"Runs tests on the sequence segmenting code.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            do_test<true,true,false>();\n            do_test<true,false,false>();\n            do_test<false,true,false>();\n            do_test<false,false,false>();\n            do_test<true,true,true>();\n            do_test<true,false,true>();\n            do_test<false,true,true>();\n            do_test<false,false,true>();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/serialize.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <iostream>\n#include <fstream>\n#include <sstream>\n#include <dlib/compress_stream.h>\n#include <dlib/base64.h>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/serialize.h>\n#include <dlib/image_transforms.h>\n\n#include \"tester.h\"\n\nnamespace dlib\n{\n    static bool operator!=(const rgb_pixel& a, const rgb_pixel& b)\n    {\n        return !(a.red==b.red && a.green==b.green && a.blue==b.blue);\n    }\n    static bool operator!=(const bgr_pixel& a, const bgr_pixel& b)\n    {\n        return !(a.red==b.red && a.green==b.green && a.blue==b.blue);\n    }\n\n    static bool operator!=(const hsi_pixel& a, const hsi_pixel& b)\n    {\n        return !(a.h==b.h && a.s==b.s && a.i==b.i);\n    }\n    static bool operator!=(const rgb_alpha_pixel& a, const rgb_alpha_pixel& b)\n    {\n        return !(a.red==b.red && a.green==b.green && a.blue==b.blue && a.alpha==b.alpha);\n    }\n\n}\n\nnamespace  \n{\n\n// ----------------------------------------------------------------------------------------\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    struct test_object\n    {\n        signed char i1;\n        signed short i2;\n        signed long i3;\n        unsigned char i4;\n        unsigned short i5;\n        unsigned long i6;\n        uint64 i7;\n        int64 i8;\n\n        signed char i1_0;\n        signed short i2_0;\n        signed long i3_0;\n        unsigned char i4_0;\n        unsigned short i5_0;\n        unsigned long i6_0;\n        uint64 i7_0;\n        int64 i8_0;\n\n        signed char i1_n;\n        signed short i2_n;\n        signed long i3_n;\n\n\n        float f1;\n        double f2;\n        long double f3;\n        float f1_inf;\n        double f2_inf;\n        long double f3_inf;\n        float f1_ninf;\n        double f2_ninf;\n        long double f3_ninf;\n        float f1_qnan;\n        double f2_qnan;\n        long double f3_qnan;\n        float f1_snan;\n        double f2_snan;\n        long double f3_snan;\n\n        std::string s1;\n        std::wstring s2;\n\n        int array[10];\n\n        bool b_true;\n        bool b_false;\n\n\n        void set_state_1(\n        )\n        {\n            i1 = 1;\n            i2 = 2;\n            i3 = 3;\n            i4 = 4;\n            i5 = 5;\n            i6 = 6;\n            i7 = 7;\n            i8 = 8;\n\n            i1_0 = 0;\n            i2_0 = 0;\n            i3_0 = 0;\n            i4_0 = 0;\n            i5_0 = 0;\n            i6_0 = 0;\n            i7_0 = 0;\n            i8_0 = 0;\n\n            i1_n = -1;\n            i2_n = -2;\n            i3_n = -3;\n\n            f1 = 123.456f;\n            f2 = 543.341;\n            f3 = 5234234.23;\n\n            f1_inf = numeric_limits<float>::infinity();\n            f2_inf = numeric_limits<double>::infinity();\n            f3_inf = numeric_limits<long double>::infinity();\n            f1_ninf = -numeric_limits<float>::infinity();\n            f2_ninf = -numeric_limits<double>::infinity();\n            f3_ninf = -numeric_limits<long double>::infinity();\n            f1_qnan = numeric_limits<float>::quiet_NaN();\n            f2_qnan = numeric_limits<double>::quiet_NaN();\n            f3_qnan = numeric_limits<long double>::quiet_NaN();\n            f1_snan = numeric_limits<float>::signaling_NaN();\n            f2_snan = numeric_limits<double>::signaling_NaN();\n            f3_snan = numeric_limits<long double>::signaling_NaN();\n\n            s1 = \"davis\";\n            s2 = L\"yo yo yo\";\n\n            for (int i = 0; i < 10; ++i)\n                array[i] = i; \n\n            b_true = true;\n            b_false = false;\n        }\n\n        void set_state_2(\n        )\n        {\n            i1 = 10;\n            i2 = 20;\n            i3 = 30;\n            i4 = 40;\n            i5 = 50;\n            i6 = 60;\n            i7 = 70;\n            i8 = 80;\n\n            i1_0 = 5;\n            i2_0 = 6;\n            i3_0 = 7;\n            i4_0 = 8;\n            i5_0 = 9;\n            i6_0 = 10;\n            i7_0 = 11;\n            i8_0 = 12;\n\n            i1_n = -13;\n            i2_n = -25;\n            i3_n = -12;\n\n            f1 = 45.3f;\n            f2 = 0.001;\n            f3 = 2.332;\n\n            f1_inf = f1;\n            f2_inf = f2;\n            f3_inf = f3;\n            f1_ninf = f1;\n            f2_ninf = f2;\n            f3_ninf = f3;\n            f1_qnan = f1;\n            f2_qnan = f2;\n            f3_qnan = f3;\n            f1_snan = f1;\n            f2_snan = f2;\n            f3_snan = f3;\n\n            s1 = \"\";\n            s2 = L\"\";\n\n            for (int i = 0; i < 10; ++i)\n                array[i] = 10-i; \n\n            b_true = false;\n            b_false = true;\n        }\n\n        void assert_in_state_1 (\n        )\n        {\n            DLIB_TEST (i1 == 1);\n            DLIB_TEST (i2 == 2);\n            DLIB_TEST (i3 == 3);\n            DLIB_TEST (i4 == 4);\n            DLIB_TEST (i5 == 5);\n            DLIB_TEST (i6 == 6);\n            DLIB_TEST (i7 == 7);\n            DLIB_TEST (i8 == 8);\n\n            DLIB_TEST (i1_0 == 0);\n            DLIB_TEST (i2_0 == 0);\n            DLIB_TEST (i3_0 == 0);\n            DLIB_TEST (i4_0 == 0);\n            DLIB_TEST (i5_0 == 0);\n            DLIB_TEST (i6_0 == 0);\n            DLIB_TEST (i7_0 == 0);\n            DLIB_TEST (i8_0 == 0);\n\n            DLIB_TEST (i1_n == -1);\n            DLIB_TEST (i2_n == -2);\n            DLIB_TEST (i3_n == -3);\n\n            DLIB_TEST (abs(f1 -123.456) < 1e-5);\n            DLIB_TEST (abs(f2 - 543.341) < 1e-10);\n            DLIB_TEST (abs(f3 - 5234234.23) < 1e-10);\n\n            DLIB_TEST (f1_inf == numeric_limits<float>::infinity());\n            DLIB_TEST (f2_inf == numeric_limits<double>::infinity());\n            DLIB_TEST (f3_inf == numeric_limits<long double>::infinity());\n            DLIB_TEST (f1_ninf == -numeric_limits<float>::infinity());\n            DLIB_TEST (f2_ninf == -numeric_limits<double>::infinity());\n            DLIB_TEST (f3_ninf == -numeric_limits<long double>::infinity());\n            DLIB_TEST (!(f1_qnan <= numeric_limits<float>::infinity() && f1_qnan >= -numeric_limits<float>::infinity() ));\n            DLIB_TEST (!(f2_qnan <= numeric_limits<double>::infinity() && f1_qnan >= -numeric_limits<double>::infinity() ));\n            DLIB_TEST (!(f3_qnan <= numeric_limits<long double>::infinity() && f1_qnan >= -numeric_limits<long double>::infinity() ));\n            DLIB_TEST (!(f1_snan <= numeric_limits<float>::infinity() && f1_qnan >= -numeric_limits<float>::infinity() ));\n            DLIB_TEST (!(f2_snan <= numeric_limits<double>::infinity() && f1_qnan >= -numeric_limits<double>::infinity() ));\n            DLIB_TEST (!(f3_snan <= numeric_limits<long double>::infinity() && f1_qnan >= -numeric_limits<long double>::infinity() ));\n\n            DLIB_TEST (s1 == \"davis\");\n            DLIB_TEST (s2 == L\"yo yo yo\");\n\n            for (int i = 0; i < 10; ++i)\n            {\n                DLIB_TEST (array[i] == i);\n            }\n\n            DLIB_TEST (b_true == true);\n            DLIB_TEST (b_false == false);\n\n        }\n\n        void assert_in_state_2 (\n        )\n        {\n            DLIB_TEST (i1 == 10);\n            DLIB_TEST (i2 == 20);\n            DLIB_TEST (i3 == 30);\n            DLIB_TEST (i4 == 40);\n            DLIB_TEST (i5 == 50);\n            DLIB_TEST (i6 == 60);\n            DLIB_TEST (i7 == 70);\n            DLIB_TEST (i8 == 80);\n\n            DLIB_TEST (i1_0 == 5);\n            DLIB_TEST (i2_0 == 6);\n            DLIB_TEST (i3_0 == 7);\n            DLIB_TEST (i4_0 == 8);\n            DLIB_TEST (i5_0 == 9);\n            DLIB_TEST (i6_0 == 10);\n            DLIB_TEST (i7_0 == 11);\n            DLIB_TEST (i8_0 == 12);\n\n            DLIB_TEST (i1_n == -13);\n            DLIB_TEST (i2_n == -25);\n            DLIB_TEST (i3_n == -12);\n\n            DLIB_TEST (abs(f1 - 45.3) < 1e-5);\n            DLIB_TEST (abs(f2 - 0.001) < 1e-10);\n            DLIB_TEST (abs(f3 - 2.332) < 1e-10);\n            DLIB_TEST (abs(f1_inf - 45.3) < 1e-5);\n            DLIB_TEST (abs(f2_inf - 0.001) < 1e-10);\n            DLIB_TEST (abs(f3_inf - 2.332) < 1e-10);\n            DLIB_TEST (abs(f1_ninf - 45.3) < 1e-5);\n            DLIB_TEST (abs(f2_ninf - 0.001) < 1e-10);\n            DLIB_TEST (abs(f3_ninf - 2.332) < 1e-10);\n            DLIB_TEST (abs(f1_qnan - 45.3) < 1e-5);\n            DLIB_TEST (abs(f2_qnan - 0.001) < 1e-10);\n            DLIB_TEST (abs(f3_qnan - 2.332) < 1e-10);\n            DLIB_TEST (abs(f1_snan - 45.3) < 1e-5);\n            DLIB_TEST (abs(f2_snan - 0.001) < 1e-10);\n            DLIB_TEST (abs(f3_snan - 2.332) < 1e-10);\n\n            DLIB_TEST (s1 == \"\");\n            DLIB_TEST (s2 == L\"\");\n\n            for (int i = 0; i < 10; ++i)\n            {\n                DLIB_TEST (array[i] == 10-i);\n            }\n\n            DLIB_TEST (b_true == false);\n            DLIB_TEST (b_false == true);\n\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void serialize (\n        const test_object& item,\n        std::ostream& out\n    )\n    {\n        dlib::serialize(item.i1,out);\n        dlib::serialize(item.i2,out);\n        dlib::serialize(item.i3,out);\n        dlib::serialize(item.i4,out);\n        dlib::serialize(item.i5,out);\n        dlib::serialize(item.i6,out);\n        dlib::serialize(item.i7,out);\n        dlib::serialize(item.i8,out);\n\n        dlib::serialize(item.i1_0,out);\n        dlib::serialize(item.i2_0,out);\n        dlib::serialize(item.i3_0,out);\n        dlib::serialize(item.i4_0,out);\n        dlib::serialize(item.i5_0,out);\n        dlib::serialize(item.i6_0,out);\n        dlib::serialize(item.i7_0,out);\n        dlib::serialize(item.i8_0,out);\n\n        dlib::serialize(item.i1_n,out);\n        dlib::serialize(item.i2_n,out);\n        dlib::serialize(item.i3_n,out);\n\n\n        dlib::serialize(item.f1,out);\n        dlib::serialize(item.f2,out);\n        dlib::serialize(item.f3,out);\n\n        dlib::serialize(item.f1_inf,out);\n        dlib::serialize(item.f2_inf,out);\n        dlib::serialize(item.f3_inf,out);\n        dlib::serialize(item.f1_ninf,out);\n        dlib::serialize(item.f2_ninf,out);\n        dlib::serialize(item.f3_ninf,out);\n        dlib::serialize(item.f1_qnan,out);\n        dlib::serialize(item.f2_qnan,out);\n        dlib::serialize(item.f3_qnan,out);\n        dlib::serialize(item.f1_snan,out);\n        dlib::serialize(item.f2_snan,out);\n        dlib::serialize(item.f3_snan,out);\n\n        dlib::serialize(item.s1,out);\n        dlib::serialize(item.s2,out);\n\n        dlib::serialize(item.array,out);\n\n        dlib::serialize(item.b_true,out);\n        dlib::serialize(item.b_false,out);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void deserialize (\n        test_object& item,\n        std::istream& in \n    )\n    {\n        dlib::deserialize(item.i1,in);\n        dlib::deserialize(item.i2,in);\n        dlib::deserialize(item.i3,in);\n        dlib::deserialize(item.i4,in);\n        dlib::deserialize(item.i5,in);\n        dlib::deserialize(item.i6,in);\n        dlib::deserialize(item.i7,in);\n        dlib::deserialize(item.i8,in);\n\n        dlib::deserialize(item.i1_0,in);\n        dlib::deserialize(item.i2_0,in);\n        dlib::deserialize(item.i3_0,in);\n        dlib::deserialize(item.i4_0,in);\n        dlib::deserialize(item.i5_0,in);\n        dlib::deserialize(item.i6_0,in);\n        dlib::deserialize(item.i7_0,in);\n        dlib::deserialize(item.i8_0,in);\n\n        dlib::deserialize(item.i1_n,in);\n        dlib::deserialize(item.i2_n,in);\n        dlib::deserialize(item.i3_n,in);\n\n\n        dlib::deserialize(item.f1,in);\n        dlib::deserialize(item.f2,in);\n        dlib::deserialize(item.f3,in);\n\n        dlib::deserialize(item.f1_inf,in);\n        dlib::deserialize(item.f2_inf,in);\n        dlib::deserialize(item.f3_inf,in);\n        dlib::deserialize(item.f1_ninf,in);\n        dlib::deserialize(item.f2_ninf,in);\n        dlib::deserialize(item.f3_ninf,in);\n        dlib::deserialize(item.f1_qnan,in);\n        dlib::deserialize(item.f2_qnan,in);\n        dlib::deserialize(item.f3_qnan,in);\n        dlib::deserialize(item.f1_snan,in);\n        dlib::deserialize(item.f2_snan,in);\n        dlib::deserialize(item.f3_snan,in);\n\n        dlib::deserialize(item.s1,in);\n        dlib::deserialize(item.s2,in);\n\n        dlib::deserialize(item.array,in);\n\n        dlib::deserialize(item.b_true,in);\n        dlib::deserialize(item.b_false,in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // This function returns the contents of the file 'stuff.bin' but using the old \n    // floating point serialization format.\n    const std::string get_decoded_string()\n    {\n        dlib::base64::kernel_1a base64_coder;\n        dlib::compress_stream::kernel_1ea compressor;\n        std::ostringstream sout;\n        std::istringstream sin;\n\n\n        // The base64 encoded data from the file 'stuff.bin' we want to decode and return.\n        sout << \"AVaifX9zEbXa9aocsrcRuvnNrR3WLuuU5eLWiy0UeXmnKXGLKZz8V44gzT4CM6wnCmAHFQug8G3C\";\n        sout << \"4cuLdNgp2ApkeLcvwFNJRENE0ShrRaxEBFEA8nah7vm8B2VmgImNblCejuP5IcDt60EaCKlqiit8\";\n        sout << \"+JGrzYxqBm3xFS4P+qlOROdbxc7pXBmUdh0rqNSEvn0FBPdoqY/5SpHgA2yAcH8XFrM1cdu0xS3P\";\n        sout << \"8PBcmLMJ7bFdzplwhrjuxtm4NfEOi6Rl9sU44AXycYgJd0+uH+dyoI9X3co5b3YWJtjvdVeztNAr\";\n        sout << \"BfSPfR6oAVNfiMBG7QA=\";\n\n\n        // Put the data into the istream sin\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decode the base64 text into its compressed binary form\n        base64_coder.decode(sin,sout);\n        sin.clear();\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decompress the data into its original form\n        compressor.decompress(sin,sout);\n\n        // Return the decoded and decompressed data\n        return sout.str();\n    }\n\n\n    // This function returns the contents of the file 'stuff.bin' but using the new \n    // floating point serialization format.\n    const std::string get_decoded_string2()\n    {\n        dlib::base64 base64_coder;\n        dlib::compress_stream::kernel_1ea compressor;\n        std::ostringstream sout;\n        std::istringstream sin;\n\n        // The base64 encoded data from the file 'stuff.bin' we want to decode and return.\n        sout << \"AVaifX9zEbXa9aocsrcRuvnNqzZLptZ5mRd46xScCIfX6sq/46hG9JwIInElG50EtJKJY/+jAWit\";\n        sout << \"TpDBWrxBz124JRLsBz62h0D3Tqgnd8zygRx7t33Ybw40o07MrhzNEHgYavUukaPje5by78JIWHgk\";\n        sout << \"l7nb/TK+9ndVLrAThJ4v+GiPT3kh9H1tAAAAAQhbLa06pQjhrnjTXcRox1ZBEAV9/q1zAA==\";\n\n        // Put the data into the istream sin\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decode the base64 text into its compressed binary form\n        base64_coder.decode(sin,sout);\n        sin.clear();\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decompress the data into its original form\n        compressor.decompress(sin,sout);\n\n        // Return the decoded and decompressed data\n        return sout.str();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // Declare the logger we will use in this test.  The name of the tester \n    // should start with \"test.\"\n    logger dlog(\"test.serialize\");\n\n    void serialize_test (\n    )\n    /*!\n        ensures\n            - runs tests on the serialization code for compliance with the specs\n    !*/\n    {        \n\n\n        print_spinner();\n\n        ostringstream sout;\n        test_object obj;\n\n        obj.set_state_1();\n        obj.assert_in_state_1();\n        serialize(obj, sout);\n        obj.assert_in_state_1();\n\n        obj.set_state_2();\n        obj.assert_in_state_2();\n        serialize(obj, sout);\n        obj.assert_in_state_2();\n\n\n        istringstream sin(sout.str());\n\n        deserialize(obj,sin);\n        obj.assert_in_state_1();\n        deserialize(obj,sin);\n        obj.assert_in_state_2();\n\n\n        // now do the same thing as above but deserialize from some stored binary\n        // data to make sure the serialized values are portable between different\n        // machines\n\n        sin.clear();\n        sin.str(get_decoded_string());\n        deserialize(obj,sin);\n        obj.assert_in_state_1();\n        deserialize(obj,sin);\n        obj.assert_in_state_2();\n\n\n        sin.clear();\n        sin.str(get_decoded_string2());\n        deserialize(obj,sin);\n        obj.assert_in_state_1();\n        deserialize(obj,sin);\n        obj.assert_in_state_2();\n\n\n        /*\n        // This is the code that produced the encoded data stored in the get_decoded_string() function\n            ofstream fout(\"stuff.bin\",ios::binary);\n            obj.set_state_1();\n            obj.assert_in_state_1();\n            serialize(obj, fout);\n            obj.assert_in_state_1();\n\n            obj.set_state_2();\n            obj.assert_in_state_2();\n            serialize(obj, fout);\n            obj.assert_in_state_2();\n            */\n\n\n        test_object obj2;\n        obj.set_state_1();\n        obj2.set_state_2();\n        dlib::serialize(\"serialization_test.dat\") << obj << obj2;\n        obj.assert_in_state_1();\n        obj2.assert_in_state_2();\n        obj.set_state_2();\n        obj2.set_state_1();\n        obj.assert_in_state_2();\n        obj2.assert_in_state_1();\n        dlib::deserialize(\"serialization_test.dat\") >> obj >> obj2;\n        obj.assert_in_state_1();\n        obj2.assert_in_state_2();\n    }\n\n\n    template <typename T>\n    void test_vector (\n    )\n    {\n        std::vector<T> a, b;\n\n        for (int i = -10; i < 30; ++i)\n        {\n            a.push_back(i);\n        }\n\n        ostringstream sout;\n        dlib::serialize(a, sout);\n        istringstream sin(sout.str());\n\n        dlib::deserialize(b, sin);\n\n\n        DLIB_TEST(a.size() == b.size());\n        DLIB_TEST(a.size() == 40);\n        for (unsigned long i = 0; i < a.size(); ++i)\n        {\n            DLIB_TEST(a[i] == b[i]);\n        }\n\n        std::vector<T> c;\n        sout.str(\"\");\n        dlib::serialize(c, sout);\n        sin.str(sout.str());\n        dlib::deserialize(a, sin);\n        DLIB_TEST(a.size() == 0);\n        DLIB_TEST(c.size() == 0);\n    }\n\n    void test_vector_bool (\n    )\n    {\n        std::vector<bool> a, b;\n\n        a.push_back(true);\n        a.push_back(true);\n        a.push_back(false);\n        a.push_back(true);\n        a.push_back(false);\n        a.push_back(true);\n\n        ostringstream sout;\n        dlib::serialize(a, sout);\n        istringstream sin(sout.str());\n\n        dlib::deserialize(b, sin);\n\n\n        DLIB_TEST(a.size() == b.size());\n        DLIB_TEST(a.size() == 6);\n        for (unsigned long i = 0; i < a.size(); ++i)\n        {\n            DLIB_TEST(a[i] == b[i]);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // This function returns the contents of the file 'matarray.dat'\n    const std::string get_decoded_string_matarray_old()\n    {\n        dlib::base64 base64_coder;\n        dlib::compress_stream::kernel_1ea compressor;\n        std::ostringstream sout;\n        std::istringstream sin;\n\n        // The base64 encoded data from the file 'matarray.dat' we want to decode and return.\n        sout << \"AW852sEbTIeV+m/wLUcKJKPW+6IclviUWZcFh1daDZ0blDjPNTgPx0Lv56sIEwlG4I6C5OJzJBkZ\";\n        sout << \"PvczLjS7IEKh6eg7amNOyEexsQSgojL1oMe2gDEfkyInUGPJV90sNS0cvp/hIB134V8JCTYUP6vH\";\n        sout << \"9qpegLSIIQG+/NjLWyK2472vC88BJfKgkL3CPLMjQwB3tB928FNLbESDLIvpnb6q9ve68iuoyZZt\";\n        sout << \"z3TTJxHW3MIdgzuhNomvPxfo/Q+7lC/Orj0FewUX90al6DckwzOtLVRidh/ZKpsQsxzJYQGkjdX5\";\n        sout << \"mDzzXKqQb3Y3DnzEmwtRD9CUON3iRv1r26gHWLYorrYA\";\n\n\n        // Put the data into the istream sin\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decode the base64 text into its compressed binary form\n        base64_coder.decode(sin,sout);\n        sin.clear();\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decompress the data into its original form\n        compressor.decompress(sin,sout);\n\n        // Return the decoded and decompressed data\n        return sout.str();\n    }\n\n    // This function returns the contents of the file 'matarray.dat'\n    const std::string get_decoded_string_matarray()\n    {\n        dlib::base64 base64_coder;\n        dlib::compress_stream::kernel_1ea compressor;\n        std::ostringstream sout;\n        std::istringstream sin;\n\n        // The base64 encoded data from the file 'matarray.dat' we want to decode and return.\n        sout << \"gO6XH2WGbm8Xaw3a5FJbh3V823W6P2Qk/vHaAAAAARccIppHWdmViaKby7JA5PQvXjYMWUYvXRHv\";\n        sout << \"xPdURZl1un3CT/rjT11Yry0y3+1W7GBmfBJ0gVFKGdiGuqoNAMtmzL/ll3YfEQ7ED7aB33aDTktw\";\n        sout << \"AWVkHT+gqTbKwjP+8YvB3s3ziK640ITOAWazAghKDVl7AHGn+fjq29paBZMczuJofl8FinZUhwa9\";\n        sout << \"Ol5gdAEQa6VZDmJUeo2soTJcEDpkW9LkRmXvjQkyEHfEHQNFDfQq4p2U+dHz4lOKlcj3VzQIeG/s\";\n        sout << \"oxa9KhJND4aQ5xeNUUHUzFBU3XhQHlyDIn/RNdX/ZwA=\";\n\n\n        // Put the data into the istream sin\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decode the base64 text into its compressed binary form\n        base64_coder.decode(sin,sout);\n        sin.clear();\n        sin.str(sout.str());\n        sout.str(\"\");\n\n        // Decompress the data into its original form\n        compressor.decompress(sin,sout);\n\n        // Return the decoded and decompressed data\n        return sout.str();\n    }\n\n    void setup_mats_and_arrays (\n        array2d<int>& a,\n        matrix<int>& m,\n        array2d<unsigned char>&  img1,\n        array2d<rgb_pixel>&      img2,\n        array2d<bgr_pixel>&      img3,\n        array2d<rgb_alpha_pixel>& img4,\n        array2d<hsi_pixel>&      img5\n    )\n    {\n        a.set_size(3,5);\n        int cnt = 0;\n        for (long r = 0; r < a.nr(); ++r)\n        {\n            for (long c = 0; c < a.nc(); ++c)\n            {\n                a[r][c] = cnt++;\n            }\n        }\n        m = mat(a);\n\n        img1.set_size(3,5);\n        img2.set_size(3,5);\n        img3.set_size(3,5);\n        img4.set_size(3,5);\n        img5.set_size(3,5);\n\n        assign_all_pixels(img1, 0);\n        assign_all_pixels(img2, 0);\n        assign_all_pixels(img3, 0);\n        assign_all_pixels(img4, 0);\n        assign_all_pixels(img5, 0);\n\n        unsigned char pcnt = 0;\n        for (long r = 0; r < img1.nr(); ++r)\n        {\n            for (long c = 0; c < img1.nc(); ++c)\n            {\n                rgb_alpha_pixel temp;\n                temp.red = pcnt++;\n                temp.green = pcnt++;\n                temp.blue = pcnt++;\n                temp.alpha = 150+pcnt++;\n                assign_pixel(img1[r][c], temp);\n                assign_pixel(img2[r][c], temp);\n                assign_pixel(img3[r][c], temp);\n                assign_pixel(img4[r][c], temp);\n            }\n        }\n\n        for (long r = 0; r < img5.nr(); ++r)\n        {\n            for (long c = 0; c < img5.nc(); ++c)\n            {\n                img5[r][c].h = pcnt++;\n                img5[r][c].s = pcnt++;\n                img5[r][c].i = pcnt++;\n            }\n        }\n    }\n\n\n    void test_deserialize(\n        std::istream& fin\n    )\n    {\n        array2d<int> a;\n        matrix<int> m;\n        array2d<unsigned char>  img1;\n        array2d<rgb_pixel>      img2;\n        array2d<bgr_pixel>      img3;\n        array2d<rgb_alpha_pixel> img4;\n        array2d<hsi_pixel>      img5;\n        setup_mats_and_arrays(a,m,img1,img2,img3,img4,img5);\n\n\n        array2d<unsigned char>  img1_;\n        array2d<rgb_pixel>      img2_;\n        array2d<bgr_pixel>      img3_;\n        array2d<rgb_alpha_pixel> img4_;\n        array2d<hsi_pixel>      img5_;\n\n        matrix<int> m_;\n        array2d<int> a_;\n\n        deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));\n        deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));\n        deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));\n        deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));\n\n        deserialize(img1_, fin); DLIB_TEST(mat(img1_) == mat(img1));\n        deserialize(img2_, fin); DLIB_TEST(mat(img2_) == mat(img2));\n        deserialize(img3_, fin); DLIB_TEST(mat(img3_) == mat(img3));\n        deserialize(img4_, fin); DLIB_TEST(mat(img4_) == mat(img4));\n        deserialize(img5_, fin); DLIB_TEST(mat(img5_) == mat(img5));\n    }\n\n    void test_deserialize_all_array2d(\n        std::istream& fin\n    )\n    {\n        array2d<int> a;\n        matrix<int> m;\n        array2d<unsigned char>  img1;\n        array2d<rgb_pixel>      img2;\n        array2d<bgr_pixel>      img3;\n        array2d<rgb_alpha_pixel> img4;\n        array2d<hsi_pixel>      img5;\n        setup_mats_and_arrays(a,m,img1,img2,img3,img4,img5);\n\n\n        array2d<unsigned char>  img1_;\n        array2d<rgb_pixel>      img2_;\n        array2d<bgr_pixel>      img3_;\n        array2d<rgb_alpha_pixel> img4_;\n        array2d<hsi_pixel>      img5_;\n\n        array2d<int> m_;\n        array2d<int> a_;\n\n        deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));\n        deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));\n        deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));\n        deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));\n\n        deserialize(img1_, fin); DLIB_TEST(mat(img1_) == mat(img1));\n        deserialize(img2_, fin); DLIB_TEST(mat(img2_) == mat(img2));\n        deserialize(img3_, fin); DLIB_TEST(mat(img3_) == mat(img3));\n        deserialize(img4_, fin); DLIB_TEST(mat(img4_) == mat(img4));\n        deserialize(img5_, fin); DLIB_TEST(mat(img5_) == mat(img5));\n    }\n\n    void test_deserialize_all_matrix(\n        std::istream& fin\n    )\n    {\n        array2d<int> a;\n        matrix<int> m;\n        array2d<unsigned char>  img1;\n        array2d<rgb_pixel>      img2;\n        array2d<bgr_pixel>      img3;\n        array2d<rgb_alpha_pixel> img4;\n        array2d<hsi_pixel>      img5;\n        setup_mats_and_arrays(a,m,img1,img2,img3,img4,img5);\n\n\n        matrix<unsigned char>  img1_;\n        matrix<rgb_pixel>      img2_;\n        matrix<bgr_pixel>      img3_;\n        matrix<rgb_alpha_pixel> img4_;\n        matrix<hsi_pixel>      img5_;\n\n        matrix<int> m_;\n        matrix<int> a_;\n\n        deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));\n        deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));\n        deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));\n        deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));\n\n        deserialize(img1_, fin); DLIB_TEST(mat(img1_) == mat(img1));\n        deserialize(img2_, fin); DLIB_TEST(mat(img2_) == mat(img2));\n        deserialize(img3_, fin); DLIB_TEST(mat(img3_) == mat(img3));\n        deserialize(img4_, fin); DLIB_TEST(mat(img4_) == mat(img4));\n        deserialize(img5_, fin); DLIB_TEST(mat(img5_) == mat(img5));\n    }\n\n    void test_array2d_and_matrix_serialization()\n    {\n        ostringstream sout;\n        array2d<int> a;\n        matrix<int> m;\n        array2d<unsigned char>  img1;\n        array2d<rgb_pixel>      img2;\n        array2d<bgr_pixel>      img3;\n        array2d<rgb_alpha_pixel> img4;\n        array2d<hsi_pixel>      img5;\n        setup_mats_and_arrays(a,m,img1,img2,img3,img4,img5);\n\n        serialize(a, sout);\n        serialize(m, sout);\n        serialize(a, sout);\n        serialize(m, sout);\n\n        serialize(img1, sout);\n        serialize(img2, sout);\n        serialize(img3, sout);\n        serialize(img4, sout);\n        serialize(img5, sout);\n\n    // --------------------\n\n        {\n            istringstream sin(sout.str());\n            test_deserialize(sin);\n        }\n        {\n            istringstream sin(sout.str());\n            test_deserialize_all_array2d(sin);\n        }\n        {\n            istringstream sin(sout.str());\n            test_deserialize_all_matrix(sin);\n        }\n\n\n        {\n            istringstream sin(get_decoded_string_matarray());\n            test_deserialize(sin);\n        }\n        {\n            istringstream sin(get_decoded_string_matarray());\n            test_deserialize_all_array2d(sin);\n        }\n        {\n            istringstream sin(get_decoded_string_matarray());\n            test_deserialize_all_matrix(sin);\n        }\n\n\n        {\n            // Make sure we can still deserialize the serialization \n            // format for array2d and matrix objects used by older versions \n            // of dlib.\n            istringstream sin(get_decoded_string_matarray_old());\n            test_deserialize(sin);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_strings()\n    {\n        string str1 = \"stuff\";\n        char buf[6];\n        buf[0] = 0;\n        buf[1] = 1;\n        buf[2] = 2;\n        buf[3] = 0;\n        buf[4] = 3;\n        buf[5] = 3;\n\n        dlib::serialize(\"ser_test_string.dat\") << str1 << buf << \"morestuff\" << \"\";\n\n        string str2, str3, str4;\n        char buf2[6];\n        memset(buf2,0,sizeof(buf2));\n        dlib::deserialize(\"ser_test_string.dat\") >> str2 >> buf2 >> str3 >> str4;\n        DLIB_TEST(str2 == \"stuff\");\n        DLIB_TEST(str3 == \"morestuff\");\n        DLIB_TEST(str4 == \"\");\n        DLIB_TEST(buf2[0] == 0);\n        DLIB_TEST(buf2[1] == 1);\n        DLIB_TEST(buf2[2] == 2);\n        DLIB_TEST(buf2[3] == 0);\n        DLIB_TEST(buf2[4] == 3);\n        DLIB_TEST(buf2[5] == 3);\n\n\n        ofstream fout(\"ser_test_string.dat\", ios::binary);\n        dlib::serialize(str1, fout);\n        dlib::serialize(buf, fout);\n        dlib::serialize(\"morestuff\", fout);\n        fout.close();\n        ifstream fin(\"ser_test_string.dat\", ios::binary);\n        memset(buf2,0,sizeof(buf2));\n        str2.clear();\n        str3.clear();\n        dlib::deserialize(str2, fin);\n        dlib::deserialize(buf2, fin);\n        dlib::deserialize(str3, fin);\n\n        DLIB_TEST(str2 == \"stuff\");\n        DLIB_TEST(str3 == \"morestuff\");\n        DLIB_TEST(buf2[0] == 0);\n        DLIB_TEST(buf2[1] == 1);\n        DLIB_TEST(buf2[2] == 2);\n        DLIB_TEST(buf2[3] == 0);\n        DLIB_TEST(buf2[4] == 3);\n        DLIB_TEST(buf2[5] == 3);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class serialize_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a test for the serialization .  When it is constructed\n                it adds itself into the testing framework.  The command line switch is\n                specified as test_serialize by passing that string to the tester constructor.\n        !*/\n    public:\n        serialize_tester (\n        ) :\n            tester (\"test_serialize\",\n                    \"Runs tests on the serialization code.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            serialize_test();\n            test_vector<char>();\n            test_vector<unsigned char>();\n            test_vector<int>();\n            test_vector_bool();\n            test_array2d_and_matrix_serialization();\n            test_strings();\n        }\n    } a;\n\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/set.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/set.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.set\");\n\n    template <\n        typename set\n        >\n    void set_compare_test (\n    )\n    /*!\n        requires\n            - set is an implementation of set/set_compare_abstract.h and\n              is instantiated with int\n        ensures\n            - runs tests on set for compliance with the specs \n    !*/\n    {        \n\n\n        srand(static_cast<unsigned int>(time(0)));\n\n\n\n        set test, test2;\n\n        enumerable<const int>& e = test;\n        DLIB_TEST(e.at_start() == true);\n\n        for (int j = 0; j < 4; ++j)\n        {\n\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n\n\n            int a,b = 0;\n            a = 8;\n            test.add(a);\n            DLIB_TEST(test.size() == 1);\n            DLIB_TEST(test.is_member(8) == true);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n            a = 53;\n            test.add(a);\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test.is_member(53) == true);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n\n\n            swap(test,test2);\n\n\n\n            DLIB_TEST(test2.is_member(8) == true);\n            DLIB_TEST(test2.is_member(5) == false);\n            DLIB_TEST(test2.is_member(0) == false);\n            DLIB_TEST(test2.is_member(-999) == false);\n            DLIB_TEST(test2.is_member(4999) == false);\n            DLIB_TEST(test2.size() == 2);\n            DLIB_TEST(test2.is_member(53) == true);\n            DLIB_TEST(test2.is_member(5) == false);\n            DLIB_TEST(test2.is_member(0) == false);\n            DLIB_TEST(test2.is_member(-999) == false);\n            DLIB_TEST(test2.is_member(4999) == false);\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_member(8) == false);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.is_member(53) == false);\n            DLIB_TEST(test.is_member(5) == false);\n            DLIB_TEST(test.is_member(0) == false);\n            DLIB_TEST(test.is_member(-999) == false);\n            DLIB_TEST(test.is_member(4999) == false);\n\n\n            test.clear();\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n\n\n            DLIB_TEST(test.size() == 0);\n\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                if (!test.is_member(a))\n                    test.add(a);\n            }\n\n            DLIB_TEST(test.size() == 10000);\n            test.clear();\n            DLIB_TEST(test.size() == 0);\n\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                if (!test.is_member(a))\n                    test.add(a);\n            }\n\n            DLIB_TEST(test.size() == 10000);\n\n            int count = 0;\n            a = 0;\n            while (test.move_next())\n            {\n                enumerable<const int>& gogo = test;\n                gogo.element();\n\n                DLIB_TEST(test.element() == test.element());\n                DLIB_TEST(test.element() == test.element());\n                DLIB_TEST(test.element() == test.element());\n\n                DLIB_TEST(a <= test.element());\n                a = test.element();\n                ++count;\n            }\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.move_next() == false);\n\n            DLIB_TEST(count == 10000);\n\n            test.swap(test2);\n\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test2.size() == 10000);\n            count = 0;\n            a = -1;\n            test2.reset();\n            while (test2.move_next())\n            {\n                DLIB_TEST(test2.element() == test2.element());\n                DLIB_TEST(test2.element() == test2.element());\n                DLIB_TEST(test2.element() == test2.element());\n                DLIB_TEST(a < test2.element());\n                a = test2.element();                \n                ++count;\n            }\n            DLIB_TEST(test2.size() == 10000);\n            DLIB_TEST(count == 10000);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.move_next() == false);\n\n\n\n            test2.clear();\n            DLIB_TEST(test2.size() == 0);\n            DLIB_TEST(test2.at_start() == true);\n\n            while (test.size() < 20000)\n            {\n                a = ::rand();\n                if (!test.is_member(a))\n                    test.add(a);\n            }\n\n            DLIB_TEST(test.at_start() == true);\n\n            {\n                int* array = new int[test.size()];\n                int* tmp = array;\n\n                count = 0;\n                while (test.move_next())\n                {\n                    DLIB_TEST(test.element() == test.element());\n                    DLIB_TEST(test.element() == test.element());\n                    DLIB_TEST(test.element() == test.element());\n                    *tmp = test.element();\n                    ++tmp;\n                    ++count;\n                }\n                DLIB_TEST(count == 20000);\n\n                // serialize the state of test, then clear test, then\n                // load the state back into test.\n                ostringstream sout;\n                serialize(test,sout);\n                DLIB_TEST(test.at_start() == true);\n                istringstream sin(sout.str());\n                test.clear();\n                deserialize(test,sin);\n\n\n\n                tmp = array;\n                for (int i = 0; i < 20000; ++i)\n                {\n                    DLIB_TEST(test.is_member(*tmp) == true);\n                    ++tmp;\n                }\n\n                DLIB_TEST(test.size() == 20000);\n\n                tmp = array;\n                count = 0;\n                while (test.size() > 10000)\n                {\n                    test.remove(*tmp,a);\n                    DLIB_TEST(*tmp == a);\n                    ++tmp;\n                    ++count;\n                }\n                DLIB_TEST(count == 10000);\n                DLIB_TEST(test.size() == 10000);\n\n                while (test.move_next())\n                {\n                    DLIB_TEST(test.element() == *tmp);\n                    DLIB_TEST(test.element() == *tmp);\n                    DLIB_TEST(test.element() == *tmp);\n                    ++tmp;\n                    ++count;\n                }\n                DLIB_TEST(count == 20000);\n                DLIB_TEST(test.size() == 10000);\n\n                while (test.size() < 20000)\n                {\n                    a = ::rand();\n                    if (!test.is_member(a))\n                        test.add(a);\n                }\n\n                test2.swap(test);\n\n                count = 0;\n                a = 0;\n                while (test2.move_next())\n                {\n                    DLIB_TEST(test2.element() == test2.element());\n                    DLIB_TEST(test2.element() == test2.element());\n                    DLIB_TEST(test2.element() == test2.element());\n                    DLIB_TEST(a <= test2.element());\n                    a = test2.element();                \n                    ++count;\n                }\n\n                DLIB_TEST(count == 20000);\n                DLIB_TEST(test2.size() == 20000);\n\n                a = -1;\n                while (test2.size()>0)\n                {\n                    test2.remove_any(b);\n                    DLIB_TEST( a < b);\n                    a = b;\n                }\n\n                DLIB_TEST(test2.size() == 0);\n                delete [] array;\n            }\n\n            test.clear();\n            test2.clear();\n            while (test.size() < 10000)\n            {\n                a = ::rand();\n                if (!test.is_member(a))\n                    test.add(a);\n            }\n\n            count = 0; \n            a = -1;\n            while (test.move_next())\n            {\n                DLIB_TEST(a < test.element());\n                a = test.element();\n                ++count;\n                if (count == 5000)\n                    break;\n                DLIB_TEST(test.current_element_valid() == true);\n            }\n\n            test.reset();\n\n            count = 0; \n            a = -1;\n            while (test.move_next())\n            {\n                DLIB_TEST(a < test.element());\n                a = test.element();\n                ++count;\n                DLIB_TEST(test.current_element_valid() == true);\n            }\n\n            DLIB_TEST(count == 10000);\n\n\n            test.clear();\n            test2.clear();\n        }\n\n\n\n        {\n            DLIB_TEST(test == test2);\n            DLIB_TEST((test < test2) == false);\n            DLIB_TEST((test2 < test) == false);\n\n            int a = 3, b = 3;\n            test.add(a);\n            test2.add(b);\n            test.move_next();                \n            DLIB_TEST(test == test2);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test.move_next();\n            DLIB_TEST((test < test2) == false);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test.move_next();\n            DLIB_TEST((test2 < test) == false);\n            DLIB_TEST(test.at_start() && test2.at_start());\n\n            a = 2; b = 5;\n            test.add(a);\n            test2.add(b);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test2.move_next();\n            DLIB_TEST((test == test2) == false);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test2.move_next();                \n            DLIB_TEST((test < test2) == true);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test2.move_next();                \n            DLIB_TEST((test2 < test) == false);\n            DLIB_TEST(test.at_start() && test2.at_start());\n\n\n            a = 8;\n            test.add(a);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test2.move_next();\n            DLIB_TEST((test == test2) == false);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test2.move_next();                \n            DLIB_TEST((test < test2) == false);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test2.move_next();                \n            DLIB_TEST((test2 < test) == true);\n            DLIB_TEST(test.at_start() && test2.at_start());\n\n            test.clear();\n\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test2.move_next();\n            DLIB_TEST((test == test2) == false);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test2.move_next();                \n            DLIB_TEST((test < test2) == true);\n            DLIB_TEST(test.at_start() && test2.at_start());\n            test2.move_next();                \n            DLIB_TEST((test2 < test) == false);\n            DLIB_TEST(test.at_start() && test2.at_start());\n\n\n        }\n\n\n        {\n            test.clear();\n            DLIB_TEST(test.size() == 0);\n            int a = 5;\n            test.add(a);\n            a = 7;\n            test.add(a);\n            DLIB_TEST(test.size() == 2);\n            DLIB_TEST(test.is_member(7));\n            DLIB_TEST(test.is_member(5));\n            test.destroy(7);\n            DLIB_TEST(test.size() == 1);\n            DLIB_TEST(!test.is_member(7));\n            DLIB_TEST(test.is_member(5));\n            test.destroy(5);\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(!test.is_member(7));\n            DLIB_TEST(!test.is_member(5));\n        }\n\n\n    }\n\n\n\n\n    class set_tester : public tester\n    {\n    public:\n        set_tester (\n        ) :\n            tester (\"test_set\",\n                    \"Runs tests on the set component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing compare_1a\";\n            set_compare_test<dlib::set<int>::compare_1a>  ();\n            dlog << LINFO << \"testing compare_1a_c\";\n            set_compare_test<dlib::set<int>::compare_1a_c>();\n            dlog << LINFO << \"testing compare_1b\";\n            set_compare_test<dlib::set<int>::compare_1b>  ();\n            dlog << LINFO << \"testing compare_1b_c\";\n            set_compare_test<dlib::set<int>::compare_1b_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sldf.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm.h>\n#include <dlib/rand.h>\n#include <dlib/string.h>\n#include <vector>\n#include <sstream>\n#include <ctime>\n#include <dlib/data_io.h>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.sldf\");\n\n\n    class sldf_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        sldf_tester (\n        ) :\n            tester (\n                \"test_sldf\",       // the command line argument name for this test\n                \"Run tests on the simplify_linear_decision_function routines.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n        dlib::rand rnd;\n\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            typedef std::map<unsigned long,double> sample_type;\n\n            typedef matrix<double,0,1> dense_sample_type;\n\n            typedef sparse_linear_kernel<sample_type> kernel_type;\n            typedef linear_kernel<dense_sample_type> dense_kernel_type;\n\n\n            svm_nu_trainer<kernel_type> linear_trainer;\n            linear_trainer.set_nu(0.2);\n            svm_nu_trainer<dense_kernel_type> dense_linear_trainer;\n            dense_linear_trainer.set_nu(0.2);\n\n            std::vector<sample_type> samples;\n            std::vector<double> labels;\n\n            // make an instance of a sample vector so we can use it below\n            sample_type sample;\n\n            // Now lets go into a loop and randomly generate 300 samples.\n            double label = +1;\n            for (int i = 0; i < 300; ++i)\n            {\n                // flip this flag\n                label *= -1;\n\n                sample.clear();\n\n                // now make a random sparse sample with at most 10 non-zero elements\n                for (int j = 0; j < 10; ++j)\n                {\n                    int idx = rnd.get_random_32bit_number()%100;\n                    double value = rnd.get_random_double();\n\n                    sample[idx] = label*value;\n                }\n\n                // Also save the samples we are generating so we can let the svm_c_linear_trainer\n                // learn from them below.  \n                samples.push_back(sample);\n                labels.push_back(label);\n            }\n\n\n            {\n                print_spinner();\n                dlog << LINFO << \" test with sparse samples \";\n                decision_function<kernel_type> df = linear_trainer.train(samples, labels);\n\n                dlog << LINFO << \"df.basis_vectors.size(): \"<< df.basis_vectors.size();\n                DLIB_TEST(df.basis_vectors.size() > 4);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(df, samples, labels);\n\n                // save the outputs of the decision function before we mess with it\n                std::vector<double> prev_vals;\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                    prev_vals.push_back(df(samples[i]));\n\n                df = simplify_linear_decision_function(df);\n\n                dlog << LINFO << \"df.basis_vectors.size(): \"<< df.basis_vectors.size();\n                DLIB_TEST(df.basis_vectors.size() == 1);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(df, samples, labels);\n\n                // now check that the simplified decision function still produces the same results\n                std::vector<double> cur_vals;\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                    cur_vals.push_back(df(samples[i]));\n\n                const double err = max(abs(mat(cur_vals) - mat(prev_vals)));\n                dlog << LINFO << \"simplify error: \"<< err;\n                DLIB_TEST(err < 1e-13);\n\n            }\n\n\n            // same as above but call simplify_linear_decision_function() two times\n            {\n                print_spinner();\n                dlog << LINFO << \" test with sparse samples \";\n                decision_function<kernel_type> df = linear_trainer.train(samples, labels);\n\n                dlog << LINFO << \"df.basis_vectors.size(): \"<< df.basis_vectors.size();\n                DLIB_TEST(df.basis_vectors.size() > 4);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(df, samples, labels);\n\n                // save the outputs of the decision function before we mess with it\n                std::vector<double> prev_vals;\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                    prev_vals.push_back(df(samples[i]));\n\n                df = simplify_linear_decision_function(df);\n                df = simplify_linear_decision_function(df);\n\n                dlog << LINFO << \"df.basis_vectors.size(): \"<< df.basis_vectors.size();\n                DLIB_TEST(df.basis_vectors.size() == 1);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(df, samples, labels);\n\n                // now check that the simplified decision function still produces the same results\n                std::vector<double> cur_vals;\n                for (unsigned long i = 0; i < samples.size(); ++i)\n                    cur_vals.push_back(df(samples[i]));\n\n                const double err = max(abs(mat(cur_vals) - mat(prev_vals)));\n                dlog << LINFO << \"simplify error: \"<< err;\n                DLIB_TEST(err < 1e-13);\n\n            }\n\n\n            {\n                print_spinner();\n                dlog << LINFO << \" test with dense samples \";\n                std::vector<dense_sample_type> dense_samples(sparse_to_dense(samples));\n\n                // In addition to the rule we learned with the pegasos trainer lets also use our linear_trainer\n                // to learn a decision rule.\n                decision_function<dense_kernel_type> dense_df = dense_linear_trainer.train(dense_samples, labels);\n\n                dlog << LINFO << \"dense_df.basis_vectors.size(): \"<< dense_df.basis_vectors.size();\n                DLIB_TEST(dense_df.basis_vectors.size() > 4);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(dense_df, dense_samples, labels);\n\n                // save the outputs of the decision function before we mess with it\n                std::vector<double> prev_vals;\n                for (unsigned long i = 0; i < dense_samples.size(); ++i)\n                    prev_vals.push_back(dense_df(dense_samples[i]));\n\n                dense_df = simplify_linear_decision_function(dense_df);\n\n                dlog << LINFO << \"dense_df.basis_vectors.size(): \"<< dense_df.basis_vectors.size();\n                DLIB_TEST(dense_df.basis_vectors.size() == 1);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(dense_df, dense_samples, labels);\n\n\n                // now check that the simplified decision function still produces the same results\n                std::vector<double> cur_vals;\n                for (unsigned long i = 0; i < dense_samples.size(); ++i)\n                    cur_vals.push_back(dense_df(dense_samples[i]));\n\n                const double err = max(abs(mat(cur_vals) - mat(prev_vals)));\n                dlog << LINFO << \"simplify error: \"<< err;\n                DLIB_TEST(err < 1e-13);\n            }\n\n            // same as above but call simplify_linear_decision_function() two times\n            {\n                print_spinner();\n                dlog << LINFO << \" test with dense samples \";\n                std::vector<dense_sample_type> dense_samples(sparse_to_dense(samples));\n\n                // In addition to the rule we learned with the pegasos trainer lets also use our linear_trainer\n                // to learn a decision rule.\n                decision_function<dense_kernel_type> dense_df = dense_linear_trainer.train(dense_samples, labels);\n\n                dlog << LINFO << \"dense_df.basis_vectors.size(): \"<< dense_df.basis_vectors.size();\n                DLIB_TEST(dense_df.basis_vectors.size() > 4);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(dense_df, dense_samples, labels);\n\n                // save the outputs of the decision function before we mess with it\n                std::vector<double> prev_vals;\n                for (unsigned long i = 0; i < dense_samples.size(); ++i)\n                    prev_vals.push_back(dense_df(dense_samples[i]));\n\n                dense_df = simplify_linear_decision_function(dense_df);\n                dense_df = simplify_linear_decision_function(dense_df);\n\n                dlog << LINFO << \"dense_df.basis_vectors.size(): \"<< dense_df.basis_vectors.size();\n                DLIB_TEST(dense_df.basis_vectors.size() == 1);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(dense_df, dense_samples, labels);\n\n\n                // now check that the simplified decision function still produces the same results\n                std::vector<double> cur_vals;\n                for (unsigned long i = 0; i < dense_samples.size(); ++i)\n                    cur_vals.push_back(dense_df(dense_samples[i]));\n\n                const double err = max(abs(mat(cur_vals) - mat(prev_vals)));\n                dlog << LINFO << \"simplify error: \"<< err;\n                DLIB_TEST(err < 1e-13);\n            }\n\n            {\n                print_spinner();\n\n                dlog << LINFO << \" test with sparse samples and a vector normalizer\";\n                std::vector<dense_sample_type> dense_samples(sparse_to_dense(samples));\n                std::vector<dense_sample_type> norm_samples;\n\n                // make a normalizer and normalize everything\n                vector_normalizer<dense_sample_type> normalizer;\n                normalizer.train(dense_samples);\n                for (unsigned long i = 0; i < dense_samples.size(); ++i)\n                    norm_samples.push_back(normalizer(dense_samples[i]));\n\n                normalized_function<decision_function<dense_kernel_type> > dense_df;\n\n                dense_df.normalizer = normalizer;\n                dense_df.function = dense_linear_trainer.train(norm_samples, labels);\n\n                dlog << LINFO << \"dense_df.function.basis_vectors.size(): \"<< dense_df.function.basis_vectors.size();\n                DLIB_TEST(dense_df.function.basis_vectors.size() > 4);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(dense_df, dense_samples, labels);\n\n                // save the outputs of the decision function before we mess with it\n                std::vector<double> prev_vals;\n                for (unsigned long i = 0; i < dense_samples.size(); ++i)\n                    prev_vals.push_back(dense_df(dense_samples[i]));\n\n\n                decision_function<dense_kernel_type> simple_df = simplify_linear_decision_function(dense_df);\n\n                dlog << LINFO << \"simple_df.basis_vectors.size(): \"<< simple_df.basis_vectors.size();\n                DLIB_TEST(simple_df.basis_vectors.size() == 1);\n\n                dlog << LINFO << \"test scores: \"<< test_binary_decision_function(simple_df, dense_samples, labels);\n\n\n                // now check that the simplified decision function still produces the same results\n                std::vector<double> cur_vals;\n                for (unsigned long i = 0; i < dense_samples.size(); ++i)\n                    cur_vals.push_back(simple_df(dense_samples[i]));\n\n                const double err = max(abs(mat(cur_vals) - mat(prev_vals)));\n                dlog << LINFO << \"simplify error: \"<< err;\n                DLIB_TEST(err < 1e-13);\n\n            }\n\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    sldf_tester a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sliding_buffer.cpp",
    "content": "// Copyright (C) 2004  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <ctime>\n#include <cstdlib>\n\n#include <dlib/sliding_buffer.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.sliding_buffer\");\n\n    template <\n        typename buf\n        >\n    void sliding_buffer_kernel_test (\n    )\n    /*!\n        requires\n            - buf is an implementation of sliding_buffer/sliding_buffer_kernel_abstract.h \n            - buf is instantiated with T=unsigned char\n        ensures\n            - runs tests on buf for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n\n        buf test;\n\n        DLIB_TEST(test.size() == 0);\n\n        test.set_size(3);\n        buf test2;\n\n        DLIB_TEST(test.size() == 8);\n\n        for (int g = 0; g < 2; ++g)\n        {\n\n            test.clear();\n\n            DLIB_TEST(test.size() == 0);\n            test.set_size(2);\n\n            DLIB_TEST(test.size() == 4);\n\n\n\n            test[0] = 'a';\n            test[1] = 's';\n            test[2] = 'd';\n            test[3] = 'f';\n\n            unsigned long id = test.get_element_id(2);\n            DLIB_TEST(test[test.get_element_index(id)] == 'd');\n\n\n            DLIB_TEST(test[0] == 'a');\n            DLIB_TEST(test[1] == 's');\n            DLIB_TEST(test[2] == 'd');\n            DLIB_TEST(test[3] == 'f');\n\n            DLIB_TEST(test2.size() == 0);\n            swap(test,test2);\n            DLIB_TEST(test2.size() == 4);\n\n            DLIB_TEST(test2[0] == 'a');\n            DLIB_TEST(test2[1] == 's');\n            DLIB_TEST(test2[2] == 'd');\n            DLIB_TEST(test2[3] == 'f');\n\n            swap(test,test2);\n\n            test.rotate_left(4);\n\n\n            DLIB_TEST(test[test.get_element_index(id)] == 'd');\n\n            DLIB_TEST(test[0] == 'a');\n            DLIB_TEST(test[1] == 's');\n            DLIB_TEST(test[2] == 'd');\n            DLIB_TEST(test[3] == 'f');\n\n            test.rotate_right(1);\n\n            DLIB_TEST(test[test.get_element_index(id)] == 'd');\n\n            DLIB_TEST(test[0] == 's');\n            DLIB_TEST(test[1] == 'd');\n            DLIB_TEST(test[2] == 'f');\n            DLIB_TEST(test[3] == 'a');   \n\n\n            test.rotate_left(1);\n\n            DLIB_TEST(test[test.get_element_index(id)] == 'd');\n            DLIB_TEST(test[0] == 'a');\n            DLIB_TEST(test[1] == 's');\n            DLIB_TEST(test[2] == 'd');\n            DLIB_TEST(test[3] == 'f');\n\n\n            test.rotate_left(16);\n\n            DLIB_TEST(test[test.get_element_index(id)] == 'd');\n            DLIB_TEST(test[0] == 'a');\n            DLIB_TEST(test[1] == 's');\n            DLIB_TEST(test[2] == 'd');\n            DLIB_TEST(test[3] == 'f');\n\n\n            test.rotate_left(2);\n\n            DLIB_TEST(test[test.get_element_index(id)] == 'd');\n\n            DLIB_TEST(test[0] == 'd');\n            DLIB_TEST(test[1] == 'f');\n            DLIB_TEST(test[2] == 'a');\n            DLIB_TEST(test[3] == 's');\n\n            test.rotate_left(1);\n\n            DLIB_TEST(test[test.get_element_index(id)] == 'd');\n            DLIB_TEST(test[0] == 's');\n            DLIB_TEST(test[1] == 'd');\n            DLIB_TEST(test[2] == 'f');\n            DLIB_TEST(test[3] == 'a');\n\n            test.rotate_left(1);\n\n            DLIB_TEST(test[test.get_element_index(id)] == 'd');\n            DLIB_TEST(test[0] == 'a');\n            DLIB_TEST(test[1] == 's');\n            DLIB_TEST(test[2] == 'd');\n            DLIB_TEST(test[3] == 'f');\n\n            DLIB_TEST(test.size() == 4);\n\n            test[0] = 'x';\n\n            DLIB_TEST(test[0] == 'x');\n            DLIB_TEST(test[1] == 's');\n            DLIB_TEST(test[2] == 'd');\n            DLIB_TEST(test[3] == 'f');\n\n            test.rotate_left(1);\n\n            DLIB_TEST_MSG(test[0] == 'f',test[0]);\n            DLIB_TEST(test[1] == 'x');\n            DLIB_TEST(test[2] == 's');\n            DLIB_TEST(test[3] == 'd');\n\n\n            test[0] = 'x';\n\n            DLIB_TEST(test[0] == 'x');\n            DLIB_TEST(test[1] == 'x');\n            DLIB_TEST(test[2] == 's');\n            DLIB_TEST(test[3] == 'd');\n\n\n            test.rotate_left(1);\n\n\n            DLIB_TEST(test[0] == 'd');\n            DLIB_TEST(test[1] == 'x');\n            DLIB_TEST(test[2] == 'x');\n            DLIB_TEST(test[3] == 's');\n\n\n\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == true);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == true);\n\n            test.clear();\n            test2.clear();\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n\n            swap(test,test2);\n\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n            DLIB_TEST(test2.move_next() == false);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test2.current_element_valid() == false);\n\n\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.at_start() == false);\n\n            test.set_size(3);\n            DLIB_TEST(test.size() == 8);\n\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == true);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == true);\n            test.reset();\n            DLIB_TEST(test.size() == 8);\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == true);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == true);\n\n\n            test.rotate_right(1);\n            DLIB_TEST(test.size() == 8);\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == true);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == true);\n\n            test.rotate_left(1);\n            DLIB_TEST(test.size() == 8);\n            DLIB_TEST(test.at_start() == true);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == true);\n            DLIB_TEST(test.at_start() == false);\n            DLIB_TEST(test.current_element_valid() == true);\n            test.reset();\n\n\n            for (unsigned long i = 0; i < test.size(); ++i)\n            {\n                test[i] = static_cast<unsigned char>(i);\n            }\n\n            unsigned long count = 0;\n            while (test.move_next())\n            {\n                DLIB_TEST(test.element() == count);\n                ++count;\n            }\n\n            DLIB_TEST(count == test.size());\n\n\n            test2.clear();\n            ostringstream sout;\n            istringstream sin;\n\n            serialize(test,sout);\n            sin.str(sout.str());\n            deserialize(test2,sin);\n\n            char ch;\n            sin >> ch;\n            DLIB_TEST( !sin);\n\n            DLIB_TEST(test2.size() == test.size());\n\n\n            for (unsigned long i = 0; i < test.size(); ++i)\n            {\n                DLIB_TEST_MSG(test[i] == test2[i],\n                             \"\\ni:        \" << i <<\n                             \"\\ntest[i]:  \" << test[i] <<\n                             \"\\ntest2[i]: \" << test2[i]);\n            }\n\n            count = 0;\n            while (test.move_next() && test2.move_next())\n            {\n                DLIB_TEST(test.element() == count);\n                DLIB_TEST(test2.element() == count);\n                ++count;\n            }\n\n            DLIB_TEST(test2.size() == count);\n            DLIB_TEST(test.size() == count);\n\n            test2.clear();\n\n\n        } // for (int g = 0; g < 2; ++g)\n\n\n    }\n\n\n\n    void test_circular_buffer()\n    {\n        circular_buffer<int> buf;\n\n        DLIB_TEST(buf.size() == 0);\n\n        buf.assign(4, 0);\n        DLIB_TEST(buf.size() == 4);\n\n        DLIB_TEST(buf[0] == 0);\n        DLIB_TEST(buf[1] == 0);\n        DLIB_TEST(buf[2] == 0);\n        DLIB_TEST(buf[3] == 0);\n        buf.push_back(1);\n        DLIB_TEST(buf[0] == 0);\n        DLIB_TEST(buf[1] == 0);\n        DLIB_TEST(buf[2] == 0);\n        DLIB_TEST(buf[3] == 1);\n        buf.push_back(2);\n        DLIB_TEST(buf[0] == 0);\n        DLIB_TEST(buf[1] == 0);\n        DLIB_TEST(buf[2] == 1);\n        DLIB_TEST(buf[3] == 2);\n        buf.push_front(3);\n        DLIB_TEST(buf[0] == 3);\n        DLIB_TEST(buf[1] == 0);\n        DLIB_TEST(buf[2] == 0);\n        DLIB_TEST(buf[3] == 1);\n        buf.push_front(4);\n        DLIB_TEST(buf.front() == 4);\n        DLIB_TEST(buf[0] == 4);\n        DLIB_TEST(buf[1] == 3);\n        DLIB_TEST(buf[2] == 0);\n        DLIB_TEST(buf[3] == 0);\n\n        buf.assign(4, 5);\n        DLIB_TEST(buf[0] == 5);\n        DLIB_TEST(buf[1] == 5);\n        DLIB_TEST(buf[2] == 5);\n        DLIB_TEST(buf[3] == 5);\n\n        buf.push_back(3);\n        DLIB_TEST(buf[0] == 5);\n        DLIB_TEST(buf[1] == 5);\n        DLIB_TEST(buf[2] == 5);\n        DLIB_TEST(buf[3] == 3);\n        buf.push_back(2);\n        DLIB_TEST(buf[0] == 5);\n        DLIB_TEST(buf[1] == 5);\n        DLIB_TEST(buf[2] == 3);\n        DLIB_TEST(buf[3] == 2);\n        buf.push_back(1);\n        DLIB_TEST(buf[0] == 5);\n        DLIB_TEST(buf[1] == 3);\n        DLIB_TEST(buf[2] == 2);\n        DLIB_TEST(buf[3] == 1);\n        buf.push_back(0);\n        DLIB_TEST(buf[0] == 3);\n        DLIB_TEST(buf[1] == 2);\n        DLIB_TEST(buf[2] == 1);\n        DLIB_TEST(buf[3] == 0);\n        buf.push_back(-1);\n        DLIB_TEST(buf.back() == -1);\n        DLIB_TEST(buf[0] == 2);\n        DLIB_TEST(buf[1] == 1);\n        DLIB_TEST(buf[2] == 0);\n        DLIB_TEST(buf[3] == -1);\n\n        buf.resize(1);\n        buf[0] = 9;\n        DLIB_TEST(buf.size() == 1);\n        DLIB_TEST(buf[0] == 9);\n        buf.push_back(1);\n        DLIB_TEST(buf[0] == 1);\n        buf.push_back(4);\n        DLIB_TEST(buf[0] == 4);\n        buf.push_front(3);\n        DLIB_TEST(buf[0] == 3);\n\n        buf.clear();\n        DLIB_TEST(buf.size() == 0);\n\n        buf.assign(3, 0);\n\n        circular_buffer<int> buf2, buf3;\n\n        buf.push_back(1);\n        buf.push_back(2);\n\n        ostringstream sout;\n        serialize(buf, sout);\n        istringstream sin(sout.str());\n        deserialize(buf2, sin);\n\n        DLIB_TEST(buf.size() == buf2.size());\n        for (unsigned long i = 0; i < buf.size(); ++i)\n            DLIB_TEST(buf[i] == buf2[i]);\n\n        buf.swap(buf3);\n        DLIB_TEST(buf.size() == 0);\n        DLIB_TEST(buf3.size() == buf2.size());\n        for (unsigned long i = 0; i < buf3.size(); ++i)\n            DLIB_TEST(buf3[i] == buf2[i]);\n\n\n\n    }\n\n\n\n    class sliding_buffer_tester : public tester\n    {\n    public:\n        sliding_buffer_tester (\n        ) :\n            tester (\"test_sliding_buffer\",\n                    \"Runs tests on the sliding_buffer component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            sliding_buffer_kernel_test<sliding_buffer<unsigned char>::kernel_1a>  ();\n            dlog << LINFO << \"testing kernel_1a_c\";\n            sliding_buffer_kernel_test<sliding_buffer<unsigned char>::kernel_1a_c>();\n\n            test_circular_buffer();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/smart_pointers.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/smart_pointers.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    bool used_array_delete;\n    template <typename T>\n    struct test_deleter\n    {\n        void operator() (T* item) const\n        {\n            used_array_delete = false;\n            delete item;\n        }\n    };\n\n    template <typename T>\n    struct test_deleter<T[]>\n    {\n        void operator() (T* item) const\n        {\n            used_array_delete = true;\n            delete [] item;\n        }\n    };\n\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.smart_pointers\");\n\n    int counter = 0;\n    struct base\n    {\n        int num;\n        virtual ~base() {}\n    };\n\n    struct derived : public base\n    {\n        derived() {  ++counter; }\n        ~derived() { --counter; }\n    };\n\n    int deleter_called = 0;\n    void deleter ( derived* p) { ++deleter_called; delete p; }\n    void deleter_base ( base* p) { ++deleter_called; delete p; }\n    typedef void (*D)(derived*);\n    typedef void (*Db)(base*);\n\n    void smart_pointers_test (\n    )\n    /*!\n        ensures\n            - runs tests on the smart pointers for compliance with the specs\n    !*/\n    {        \n        counter = 0;\n        deleter_called = 0;\n\n        {\n            DLIB_TEST_MSG(counter == 0,counter);\n            scoped_ptr<base> p1(new derived);\n            scoped_ptr<derived> p2(new derived);\n            scoped_ptr<derived> p3;\n            DLIB_TEST_MSG(counter == 2,counter);\n            DLIB_TEST(!p3);\n\n            p1->num = 1;\n            p2->num = 2;\n            DLIB_TEST(p1->num == 1);\n            DLIB_TEST(p2->num == 2);\n\n            (*p1).num = 3;\n            (*p2).num = 4;\n            DLIB_TEST(p1->num == 3);\n            DLIB_TEST(p2->num == 4);\n\n            DLIB_TEST_MSG(counter == 2,counter);\n\n            DLIB_TEST(p1);\n            DLIB_TEST(p2);\n\n            DLIB_TEST_MSG(counter == 2,counter);\n            p1.reset();\n            DLIB_TEST_MSG(counter == 1,counter);\n            DLIB_TEST(!p1);\n            DLIB_TEST(p2);\n            p1.reset(new derived);\n            DLIB_TEST_MSG(counter == 2,counter);\n            DLIB_TEST(p1);\n\n\n            DLIB_TEST_MSG(counter == 2,counter);\n            p2.reset();\n            DLIB_TEST_MSG(counter == 1,counter);\n            DLIB_TEST(!p2);\n            derived* d = new derived;\n            p2.reset(d);\n            DLIB_TEST(p2.get() == d);\n            DLIB_TEST_MSG(counter == 2,counter);\n            DLIB_TEST(p2);\n            DLIB_TEST(!p3);\n            p2->num = 9;\n            swap(p2,p3);\n            DLIB_TEST(!p2);\n            DLIB_TEST(p3);\n            DLIB_TEST(p3->num == 9);\n            p2.swap(p3);\n            DLIB_TEST(p2);\n            DLIB_TEST(!p3);\n            DLIB_TEST(p2->num == 9);\n\n\n            DLIB_TEST_MSG(counter == 2,counter);\n\n        }\n        DLIB_TEST_MSG(counter == 0,counter);\n\n        {\n            base* realp1 = new derived;\n            derived* realp2 = new derived;\n            dlib::shared_ptr<base> p1(realp1);\n            dlib::shared_ptr<derived> p2(realp2,&deleter);\n            dlib::shared_ptr<base> p3;\n            dlib::shared_ptr<derived> p4;\n            DLIB_TEST(p4.get() == 0);\n            DLIB_TEST(p1);\n            DLIB_TEST(p2);\n            DLIB_TEST(!p3);\n            DLIB_TEST(!p4);\n            DLIB_TEST(p1.get() == realp1);\n            DLIB_TEST(p2.get() == realp2);\n            p1->num = 1;\n            p2->num = 2;\n            DLIB_TEST((*p1).num == 1);\n            DLIB_TEST((*p2).num == 2);\n\n            p1.swap(p3);\n            DLIB_TEST(!p1);\n            DLIB_TEST(p3);\n            DLIB_TEST((*p3).num == 1);\n            DLIB_TEST(p3->num == 1);\n            swap(p1,p3);\n            DLIB_TEST(p1);\n            DLIB_TEST(!p3);\n            DLIB_TEST((*p1).num == 1);\n            DLIB_TEST(p1->num == 1);\n            DLIB_TEST_MSG(counter == 2,counter);\n\n            DLIB_TEST(p1.unique());\n            DLIB_TEST(p2.unique());\n            DLIB_TEST(!p3.unique());\n            DLIB_TEST(!p4.unique());\n\n            DLIB_TEST(p1.use_count() == 1);\n            DLIB_TEST(p2.use_count() == 1);\n            DLIB_TEST(p3.use_count() == 0);\n            DLIB_TEST(p4.use_count() == 0);\n\n            dlib::shared_ptr<base> p11(p1);\n\n            DLIB_TEST(!p1.unique());\n            DLIB_TEST(p2.unique());\n            DLIB_TEST(!p3.unique());\n            DLIB_TEST(!p4.unique());\n\n            DLIB_TEST(p1.use_count() == 2);\n            DLIB_TEST(p2.use_count() == 1);\n            DLIB_TEST(p3.use_count() == 0);\n            DLIB_TEST(p4.use_count() == 0);\n\n            dlib::shared_ptr<base> p22(p2);\n\n            DLIB_TEST(!p1.unique());\n            DLIB_TEST(!p2.unique());\n            DLIB_TEST(!p3.unique());\n            DLIB_TEST(!p4.unique());\n\n            DLIB_TEST(p1.use_count() == 2);\n            DLIB_TEST(p2.use_count() == 2);\n            DLIB_TEST(p3.use_count() == 0);\n            DLIB_TEST(p4.use_count() == 0);\n\n            DLIB_TEST(p11.get() == realp1);\n            DLIB_TEST(p11 == p1);\n            DLIB_TEST(p22 == p2);\n            DLIB_TEST(p3 == p4);\n            DLIB_TEST(p11 != p22);\n            DLIB_TEST(p1 != p2);\n            DLIB_TEST(p3 != p1);\n            DLIB_TEST(p3 != p11);\n            DLIB_TEST(p3 != p2);\n\n\n            p1 = p1 = p1;\n            DLIB_TEST(p1.use_count() == 2);\n            DLIB_TEST(p1->num == 1);\n            DLIB_TEST(p11.use_count() == 2);\n            p1.reset();\n            DLIB_TEST(p1.get() == 0);\n            DLIB_TEST(p1.use_count() == 0);\n            DLIB_TEST(p1.unique() == false);\n            DLIB_TEST(p11.use_count() == 1);\n            p11 = p2;\n            DLIB_TEST(p1.use_count() == 0);\n            DLIB_TEST(p1.unique() == false);\n            DLIB_TEST(p11.use_count() == 3);\n            DLIB_TEST(p11.unique() == false);\n\n            // now p11, p2, and p22 all reference the same thing and the rest are null\n            DLIB_TEST_MSG((p11 < p2) == false,\"\")\n                DLIB_TEST_MSG((p2 < p11) == false,\"\")\n\n                DLIB_TEST(get_deleter<D>(p4) == 0);\n            p4 = p2;\n            DLIB_TEST(get_deleter<D>(p4) != 0);\n            DLIB_TEST(get_deleter<D>(p4) == get_deleter<D>(p2));\n            DLIB_TEST(get_deleter<D>(p4) == get_deleter<D>(p11));\n            DLIB_TEST(get_deleter<int>(p4) == 0);\n\n            realp1 = new derived;\n            p1.reset(realp1, &deleter_base);\n            DLIB_TEST(p1.get() == realp1);\n            DLIB_TEST(p1.unique());\n            DLIB_TEST(p1.use_count() == 1);\n            DLIB_TEST(*get_deleter<Db>(p1) == &deleter_base);\n            DLIB_TEST(p1 != p4);\n            p4 = dynamic_pointer_cast<derived>(p1);\n            DLIB_TEST(!p1.unique());\n            DLIB_TEST(p1.use_count() == 2);\n            DLIB_TEST(p1 == p4);\n\n            realp1 = new derived;\n            p1.reset(realp1);\n            DLIB_TEST(p1.get() == realp1);\n            DLIB_TEST(p1.unique());\n            DLIB_TEST(p1.use_count() == 1);\n            DLIB_TEST(get_deleter<D>(p1) == 0);\n\n\n            auto_ptr<derived> ap1(new derived);\n            auto_ptr<derived> ap2(new derived);\n            ap1->num = 35;\n            ap2->num = 36;\n\n            DLIB_TEST(ap1.get() != 0);\n            DLIB_TEST(ap2.get() != 0);\n            p1 = ap2;\n            p2 = ap1;\n\n            DLIB_TEST(ap1.get() == 0);\n            DLIB_TEST(p1.unique());\n            DLIB_TEST(p1.use_count() == 1);\n            DLIB_TEST(ap2.get() == 0);\n            DLIB_TEST(p2.unique());\n            DLIB_TEST(p2.use_count() == 1);\n            DLIB_TEST(p1->num == 36);\n            DLIB_TEST(p2->num == 35);\n\n        }\n\n        DLIB_TEST_MSG(counter == 0,counter);\n        DLIB_TEST_MSG(deleter_called == 2,counter);\n\n        dlib::weak_ptr<base> wp4;\n        {\n            dlib::shared_ptr<derived> p1(new derived, &deleter_base);\n            dlib::shared_ptr<derived> p2;\n            dlib::shared_ptr<base> p3;\n\n            dlib::weak_ptr<derived> wp1;\n            dlib::weak_ptr<base> wp2;\n            dlib::weak_ptr<base> wp3;\n\n            dlib::weak_ptr<derived> wp1c(p1);\n            dlib::weak_ptr<base> wp2c(p1);\n            dlib::weak_ptr<base> wp3c(p2);\n\n            DLIB_TEST(wp1c.use_count() == 1);\n            DLIB_TEST(wp1c.lock() == p1);\n            DLIB_TEST(wp1c.expired() == false);\n\n            DLIB_TEST(wp2c.use_count() == 1);\n            DLIB_TEST(wp2c.lock() == p1);\n            DLIB_TEST(wp2c.expired() == false);\n\n            DLIB_TEST(wp3c.use_count() == 0);\n            DLIB_TEST(wp3c.lock() == dlib::shared_ptr<base>());\n            DLIB_TEST(wp3c.expired() == true);\n\n            DLIB_TEST(wp2.use_count() == 0);\n            DLIB_TEST(wp2.expired() == true);\n            DLIB_TEST(wp2.lock().use_count() == 0);\n            DLIB_TEST(wp2.lock().unique() == false);\n\n            wp1 = p1;\n            wp2 = wp1;\n            wp3 = p1;\n\n            DLIB_TEST(p1.use_count() == 1);\n            DLIB_TEST(p1.unique());\n            DLIB_TEST(wp1.use_count() == 1);\n            DLIB_TEST(wp2.use_count() == 1);\n            DLIB_TEST(wp3.use_count() == 1);\n            DLIB_TEST(wp1.expired() == false);\n            DLIB_TEST(wp2.expired() == false);\n            DLIB_TEST(wp3.expired() == false);\n            DLIB_TEST(wp1.lock() == p1);\n            DLIB_TEST(wp2.lock() == p1);\n            DLIB_TEST(wp3.lock() == p1);\n\n            wp3.reset();\n\n            DLIB_TEST(p1.use_count() == 1);\n            DLIB_TEST(p1.unique());\n            DLIB_TEST(wp1.use_count() == 1);\n            DLIB_TEST(wp2.use_count() == 1);\n            DLIB_TEST(wp3.use_count() == 0);\n            DLIB_TEST(wp1.expired() == false);\n            DLIB_TEST(wp2.expired() == false);\n            DLIB_TEST(wp3.expired() == true);\n            DLIB_TEST(wp1.lock() == p1);\n            DLIB_TEST(wp2.lock() == p1);\n            DLIB_TEST(wp3.lock() == dlib::shared_ptr<base>());\n\n\n            p1.reset();\n\n            DLIB_TEST(p1.use_count() == 0);\n            DLIB_TEST(p1.unique() == false);\n            DLIB_TEST(wp1.use_count() == 0);\n            DLIB_TEST(wp2.use_count() == 0);\n            DLIB_TEST(wp3.use_count() == 0);\n            DLIB_TEST(wp1.expired() == true);\n            DLIB_TEST(wp2.expired() == true);\n            DLIB_TEST(wp3.expired() == true);\n            DLIB_TEST(wp1.lock() == dlib::shared_ptr<base>());\n            DLIB_TEST(wp2.lock() == dlib::shared_ptr<base>());\n            DLIB_TEST(wp3.lock() == dlib::shared_ptr<base>());\n\n            p1.reset(new derived);\n\n            DLIB_TEST(p1.use_count() == 1);\n            DLIB_TEST(p1.unique() == true);\n            DLIB_TEST(wp1.use_count() == 0);\n            DLIB_TEST(wp2.use_count() == 0);\n            DLIB_TEST(wp3.use_count() == 0);\n            DLIB_TEST(wp1.expired() == true);\n            DLIB_TEST(wp2.expired() == true);\n            DLIB_TEST(wp3.expired() == true);\n            DLIB_TEST(wp1.lock() == dlib::shared_ptr<base>());\n            DLIB_TEST(wp2.lock() == dlib::shared_ptr<base>());\n            DLIB_TEST(wp3.lock() == dlib::shared_ptr<base>());\n\n            DLIB_TEST(wp4.expired() == true);\n            DLIB_TEST(wp4.lock() == dlib::shared_ptr<base>());\n            wp4 = p1;\n            p3 = p1;\n            DLIB_TEST(wp4.expired() == false);\n            DLIB_TEST(wp4.lock() == p3);\n\n\n            bool ok = false;\n            try {\n                dlib::shared_ptr<base> bad_ptr(wp1);\n            } catch (dlib::bad_weak_ptr&)\n            {\n                ok = true;\n            }\n            DLIB_TEST(ok);\n        }\n        DLIB_TEST(wp4.expired() == true);\n        DLIB_TEST(wp4.lock() == dlib::shared_ptr<base>());\n\n\n        DLIB_TEST_MSG(counter == 0,counter);\n        DLIB_TEST_MSG(deleter_called == 3,counter);\n\n        {\n            scoped_ptr<int[]> a(new int[10]);\n\n            {\n                used_array_delete = false;\n                scoped_ptr<int[],test_deleter<int[]> > b(new int[10]);\n\n                for (int i = 0; i < 10; ++i)\n                {\n                    a[i] = i;\n                    b[i] = i;\n                }\n            }\n            DLIB_TEST(used_array_delete == true);\n\n\n            {\n                used_array_delete = true;\n                scoped_ptr<int,test_deleter<int> > c(new int);\n            }\n            DLIB_TEST(used_array_delete == false);\n\n            scoped_ptr<const int[]> const_a(new int[10]);\n\n        }\n\n    }\n\n\n\n    class smart_pointers_tester : public tester\n    {\n    public:\n        smart_pointers_tester (\n        ) :\n            tester (\"test_smart_pointers\",\n                    \"Runs tests on the smart pointers.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            smart_pointers_test();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sockets.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/sockets.h>\n#include <dlib/server.h>\n#include <dlib/misc_api.h>\n\n#include \"tester.h\"\n\nnamespace  {\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    dlib::mutex gm;\n    dlib::signaler gs(gm);\n    const char magic_num = 42;\n    const int min_bytes_sent = 10000;\n    int assigned_port;\n\n    logger dlog(\"test.sockets\");\n\n// ----------------------------------------------------------------------------------------\n\n    class serv : public server::kernel_1a_c\n    {\n    public:\n        serv (\n        ) :\n            error_occurred (false),\n            got_connections(false)\n        {}\n\n        void on_listening_port_assigned (\n        )\n        {\n            auto_mutex M(gm);\n            assigned_port = get_listening_port();\n            gs.broadcast();\n        }\n\n\n        void on_connect (\n            connection& con\n        )\n        {\n            dlog << LINFO << \"in serv::on_connect(): got new connection\";\n            int status;\n            int count = 0;\n            char buf[100];\n            while ((status = con.read(buf,sizeof(buf))) > 0)\n            {\n                for (int i = 0; i < status; ++i)\n                {\n                    if (buf[i] != magic_num)\n                    {\n                        tag = 4.0;\n                        error_occurred = true;\n                    }\n                }\n                count += status;\n            }\n            if (count != min_bytes_sent)\n            {\n                tag = 5.0;\n                error_occurred = true;\n            }\n            got_connections = true;\n            dlog << LINFO << \"in serv::on_connect(): on_connect ending\";\n        }\n\n        bool error_occurred;\n        bool got_connections;\n        double tag;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class thread_container : public multithreaded_object\n    {\n    public:\n\n        serv& srv;\n\n        thread_container (\n            serv& srv_\n        ) : srv(srv_)\n        {\n            for (int i = 0; i < 10; ++i)\n                register_thread(*this, &thread_container::thread_proc);\n\n            // start up the threads\n            start();\n        }\n\n        ~thread_container ()\n        {\n            // wait for all threads to terminate\n            wait();\n        }\n\n        void thread_proc (\n        )\n        {\n            try\n            {\n                dlog << LTRACE << \"enter thread\";\n                {\n                    auto_mutex M(gm);\n                    while (assigned_port == 0)\n                        gs.wait();\n                }\n\n                int status;\n                scoped_ptr<connection> con;\n                string hostname;\n                string ip;\n                status = get_local_hostname(hostname);\n                if (status)\n                {\n                    srv.tag = 1.0;\n                    srv.error_occurred = true;\n                    srv.clear();\n                    dlog << LERROR << \"leaving thread, line: \" << __LINE__;\n                    dlog << LERROR << \"get_local_hostname() failed\";\n                    return;\n                }\n\n                status = hostname_to_ip(hostname,ip);\n                if (status)\n                {\n                    srv.tag = 2.0;\n                    srv.error_occurred = true;\n                    srv.clear();\n                    dlog << LERROR << \"leaving thread, line: \" << __LINE__;\n                    dlog << LERROR << \"hostname_to_ip() failed\";\n                    return;\n                }\n\n                dlog << LTRACE << \"try to connect to the server at port \" << srv.get_listening_port();\n                status = create_connection(con,srv.get_listening_port(),ip);\n                if (status)\n                {\n                    srv.tag = 3.0;\n                    srv.error_occurred = true;\n                    srv.clear();\n                    dlog << LERROR << \"leaving thread, line: \" << __LINE__;\n                    dlog << LERROR << \"create_connection() failed\";\n                    return;\n                }\n\n                dlog << LTRACE << \"sending magic_num to server\";\n                int i;\n                for (i = 0; i < min_bytes_sent; ++i)\n                {\n                    con->write(&magic_num,1); \n                }\n\n                dlog << LTRACE << \"shutting down connection to server\";\n                close_gracefully(con);\n                dlog << LTRACE << \"finished calling close_gracefully() on the connection\";\n            }\n            catch (exception& e)\n            {\n                srv.error_occurred = true;\n                dlog << LERROR << \"exception thrown in thread_proc(): \" << e.what();\n                cout << \"exception thrown in thread_proc(): \" << e.what();\n            }\n            dlog << LTRACE << \"exit thread\";\n        }\n    };\n\n    void run_server(serv* srv)\n    {\n        dlog << LTRACE << \"calling srv.start()\";\n        srv->start();\n        dlog << LTRACE << \"srv.start() just ended.\";\n    }\n\n    void sockets_test (\n    )\n    /*!\n        requires\n            - sockets is an implementation of sockets/sockets_kernel_abstract.h \n              is instantiated with int\n        ensures\n            - runs tests on sockets for compliance with the specs\n    !*/\n    {        \n\n        dlog << LTRACE << \"starting test\";\n        serv srv;\n\n        assigned_port = 0;\n\n\n        dlog << LTRACE << \"spawning threads\";\n        thread_container stuff(srv);\n\n\n\n        thread_function thread2(run_server, &srv);\n\n        // wait until all the sending threads have ended\n        stuff.wait();\n\n        if (srv.error_occurred)\n        {\n            dlog << LDEBUG << \"tag: \" << srv.tag;\n        }\n\n        srv.clear();\n\n        dlog << LTRACE << \"ending successful test\";\n        DLIB_TEST( !srv.error_occurred); \n        DLIB_TEST( srv.got_connections); \n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    class sockets_tester : public tester\n    {\n    public:\n        sockets_tester (\n        ) :\n            tester (\"test_sockets\",\n                    \"Runs tests on the sockets component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            sockets_test();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sockets2.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/sockets.h>\n#include <dlib/threads.h>\n#include <dlib/array.h>\n#include <algorithm>\n\n// This is called an unnamed-namespace and it has the effect of making everything \n// inside this file \"private\" so that everything you declare will have static linkage.  \n// Thus we won't have any multiply defined symbol errors coming out of the linker when \n// we try to compile the test suite.\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    // Declare the logger we will use in this test.  The name of the logger \n    // should start with \"test.\"\n    dlib::logger dlog(\"test.sockets2\");\n\n\n    class sockets2_tester : public tester, private multithreaded_object \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n\n        short port_num;\n        string data_to_send;\n\n        bool test_failed;\n\n        void write_thread (\n        )\n        {\n            try\n            {\n                scoped_ptr<connection> con(connect(\"127.0.0.1\", port_num));\n\n                // Send a copy of the data down the connection so we can test our the read() function\n                // that uses timeouts in the main thread.\n                if (con->write(data_to_send.data(), data_to_send.size()) != (int)data_to_send.size())\n                {\n                    test_failed = true;\n                    dlog << LERROR << \"failed to send all the data down the connection\";\n                }\n\n                close_gracefully(con,300000);\n            }\n            catch (exception& e)\n            {\n                test_failed = true;\n                dlog << LERROR << e.what();\n            }\n        }\n\n        void no_write_thread (\n        )\n        {\n            try\n            {\n                scoped_ptr<connection> con(connect(\"127.0.0.1\", port_num));\n\n                // just do nothing until the connection closes\n                char ch;\n                con->read(&ch, 1);\n                dlog << LDEBUG << \"silent connection finally closing\";\n            }\n            catch (exception& e)\n            {\n                test_failed = true;\n                dlog << LERROR << e.what();\n            }\n        }\n\n    public:\n        sockets2_tester (\n        ) :\n            tester (\n                \"test_sockets2\",       // the command line argument name for this test\n                \"Run sockets2 tests.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n            register_thread(*this, &sockets2_tester::write_thread);\n            register_thread(*this, &sockets2_tester::write_thread);\n            register_thread(*this, &sockets2_tester::write_thread);\n            register_thread(*this, &sockets2_tester::write_thread);\n            register_thread(*this, &sockets2_tester::write_thread);\n            register_thread(*this, &sockets2_tester::no_write_thread);\n        }\n\n        void perform_test (\n        )\n        {\n            run_tests(0);\n            run_tests(40);\n        }\n\n        void run_tests (\n            unsigned long timeout_to_use\n        )\n        {\n            // make sure there aren't any threads running\n            wait();\n\n            port_num = 5000;\n            test_failed = false;\n\n            print_spinner();\n            data_to_send = \"oi 2m3ormao2m fo2im3fo23mi o2mi3 foa2m3fao23ifm2o3fmia23oima23iom3giugbiua\";\n            // make the block of data much larger\n            for (int i = 0; i < 11; ++i)\n                data_to_send = data_to_send + data_to_send;\n\n            dlog << LINFO << \"data block size: \" << data_to_send.size();\n\n\n            scoped_ptr<listener> list;\n            DLIB_TEST(create_listener(list, port_num, \"127.0.0.1\") == 0);\n            DLIB_TEST(list);\n\n            // kick off the sending threads\n            start();\n\n\n            dlib::array<scoped_ptr<connection> > cons;\n            std::vector<long> bytes_received(6,0);\n            scoped_ptr<connection> con_temp;\n            \n            // accept the 6 connections we should get\n            for (int i = 0; i < 6; ++i)\n            {\n                DLIB_TEST(list->accept(con_temp) == 0);\n                cons.push_back(con_temp);\n                print_spinner();\n            }\n\n            int finished_cons = 0;\n\n            // now receive all the bytes from the sending threads\n            while (finished_cons < 5)\n            {\n                for (unsigned long i = 0; i < cons.size(); ++i)\n                {\n                    if (cons[i])\n                    {\n                        const int buf_size = 3000;\n                        char buf[buf_size];\n\n                        int status = cons[i]->read(buf, buf_size, timeout_to_use);\n\n                        if (status > 0)\n                        {\n                            DLIB_TEST(equal(buf, buf+status, data_to_send.begin()+bytes_received[i]));\n                            bytes_received[i] += status;\n                        }\n                        else if (status == 0)\n                        {\n                            // the connection is closed to kill it\n                            cons[i].reset();\n                            ++finished_cons;\n                        }\n                    }\n                }\n                print_spinner();\n            }\n\n            for (unsigned long i = 0; i < bytes_received.size(); ++i)\n            {\n                DLIB_TEST(bytes_received[i] == (long)data_to_send.size() || cons[i]);\n            }\n\n\n            dlog << LINFO << \"All data received correctly\";\n\n            cons.clear();\n\n\n            print_spinner();\n\n            DLIB_TEST(test_failed == false);\n\n\n            // wait for all the sending threads to terminate\n            wait();\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    sockets2_tester a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sockstreambuf.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/sockets.h>\n#include <dlib/misc_api.h>\n#include <dlib/sockstreambuf.h>\n#include <vector>\n#include <dlib/smart_pointers.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    dlib::mutex m;\n    dlib::signaler s(m);\n    bool thread_running;\n\n    logger dlog(\"test.sockstreambuf\");\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename ssb>\n    struct thread_proc_struct\n    {\n    static void thread_proc (\n        void* param\n    )\n    {\n        \n        listener& list = *static_cast<listener*>(param);\n        connection* con;\n        list.accept(con);\n\n        ssb buf(con);\n        ostream out(&buf);\n\n\n        char ch;\n        char* bigbuf = new char[1000000];\n\n\n        for (int i = 'a'; i < 'z'; ++i)\n        {\n            ch = i;\n            out << ch << \" \";\n        }\n\n        out.put('A');\n\n        for (int i = 0; i < 256; ++i)\n        {\n            ch = i;\n            out.write(&ch,1);\n        }\n\n        for (int i = -100; i < 25600; ++i)\n        {\n            out << i << \" \";\n        }\n\n        out.put('A');\n\n        for (int i = -100; i < 25600; ++i)\n        {\n            out.write((char*)&i,sizeof(i));\n        }\n\n        for (int i = 0; i < 1000000; ++i)\n        {\n            bigbuf[i] = (i&0xFF);\n        }\n        out.write(bigbuf,1000000);\n\n        out.put('d');\n        out.put('a');\n        out.put('v');\n        out.put('i');\n        out.put('s');\n\n\n        string tstring = \"this is a test\";\n        int tint = -853;\n        unsigned int tuint = 89;\n        serialize(tstring,out);\n        serialize(tint,out);\n        serialize(tuint,out);\n\n\n        out.flush();\n\n\n        auto_mutex M(m);\n        thread_running = false;\n        s.signal();\n\n        dlib::sleep(300);\n        delete con;\n        delete &list;\n\n        delete [] bigbuf;\n    }\n    };\n\n    template <typename ssb>\n    void sockstreambuf_test (\n    )\n    /*!\n        requires\n            - ssb is an implementation of sockstreambuf/sockstreambuf_kernel_abstract.h \n        ensures\n            - runs tests on ssb for compliance with the specs\n    !*/\n    {        \n        char ch;\n        vector<char> vbuf;\n        vbuf.resize(1000000);\n        char* bigbuf = &vbuf[0];\n        connection* con;\n\n        print_spinner();\n        thread_running = true;\n        listener* list;\n        if (create_listener(list,0))\n        {\n            DLIB_TEST_MSG(false, \"Unable to create a listener\");\n        }\n\n        create_new_thread(&thread_proc_struct<ssb>::thread_proc,list);\n\n        if (create_connection(con,list->get_listening_port(),\"127.0.0.1\"))\n        {\n            DLIB_TEST_MSG(false, \"Unable to create a connection\");\n        }\n\n        // make sure con gets deleted\n        scoped_ptr<connection> del_con(con);\n\n        ssb buf(con);\n        istream in(&buf);\n\n\n\n        for (int i = 'a'; i < 'z'; ++i)\n        {\n            in >> ch;\n            char c = i;\n            DLIB_TEST_MSG(ch == c,\"ch: \" << (int)ch << \"  c: \" << (int)c);\n        }\n\n        in.get();\n        DLIB_TEST_MSG(in.peek() == 'A', \"*\" << in.peek() << \"*\");\n        in.get();\n\n        for (int i = 0; i < 256; ++i)\n        {\n            in.read(&ch,1);\n            char c = i;\n            DLIB_TEST_MSG(ch == c,\"ch: \" << (int)ch << \"  c: \" << (int)c );\n        }\n\n        for (int i = -100; i < 25600; ++i)\n        {\n            int n = 0;\n            in >> n;\n            DLIB_TEST_MSG(n == i,\"n: \" << n << \"   i:\" << i);\n        }\n\n        in.get();\n        DLIB_TEST_MSG(in.peek() == 'A', \"*\" << in.peek() << \"*\");\n        in.get();\n\n        for (int i = -100; i < 25600; ++i)\n        {\n            int n;\n            in.read((char*)&n,sizeof(n));\n            DLIB_TEST_MSG(n == i,\"n: \" << n << \"   i:\" << i);\n        }\n\n        in.read(bigbuf,1000000);\n        for (int i = 0; i < 1000000; ++i)\n        {\n            DLIB_TEST(bigbuf[i] == (char)(i&0xFF));\n        }\n\n        DLIB_TEST(in.get() == 'd');\n        DLIB_TEST(in.get() == 'a');\n        DLIB_TEST(in.get() == 'v');\n        DLIB_TEST(in.get() == 'i');\n\n        DLIB_TEST(in.peek() == 's');\n\n        DLIB_TEST(in.get() == 's');\n\n        in.putback('s');\n        DLIB_TEST(in.peek() == 's');\n\n        DLIB_TEST(in.get() == 's');\n\n\n        string tstring;\n        int tint;\n        unsigned int tuint;\n        deserialize(tstring,in);\n        deserialize(tint,in);\n        deserialize(tuint,in);\n\n        DLIB_TEST(tstring == \"this is a test\");\n        DLIB_TEST(tint == -853);\n        DLIB_TEST(tuint == 89);\n\n\n\n        auto_mutex M(m);\n        while (thread_running)\n            s.wait();\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n\n    class sockstreambuf_tester : public tester\n    {\n    public:\n        sockstreambuf_tester (\n        ) :\n            tester (\"test_sockstreambuf\",\n                    \"Runs tests on the sockstreambuf component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing sockstreambuf\";\n            sockstreambuf_test<sockstreambuf>();\n            dlog << LINFO << \"testing sockstreambuf_unbuffered\";\n            sockstreambuf_test<sockstreambuf_unbuffered>();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/sparse_vector.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <dlib/sparse_vector.h>\n#include \"tester.h\"\n#include <dlib/rand.h>\n#include <dlib/string.h>\n#include <vector>\n#include <sstream>\n#include <ctime>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.sparse_vector\");\n\n    void test_sparse_matrix_vector_multiplies()\n    {\n        dlib::rand rnd;\n\n        const long size = 30;\n\n        for (int iter = 0; iter < 10; ++iter)\n        {\n            print_spinner();\n\n            std::vector<sample_pair> edges;\n            std::vector<ordered_sample_pair> oedges;\n            matrix<double> M(size,size);\n            M = 0;\n            for (long i = 0; i < M.size()/3; ++i)\n            {\n                const long r = rnd.get_random_32bit_number()%M.nr();\n                const long c = rnd.get_random_32bit_number()%M.nc();\n                const double d = rnd.get_random_gaussian()*10;\n                M(r,c) += d;\n                oedges.push_back(ordered_sample_pair(r,c,d));\n            }\n\n            matrix<double> SM(size,size);\n            SM = 0;\n            for (long i = 0; i < SM.size()/3; ++i)\n            {\n                const long r = rnd.get_random_32bit_number()%SM.nr();\n                const long c = rnd.get_random_32bit_number()%SM.nc();\n                const double d = rnd.get_random_gaussian()*10;\n                SM(r,c) += d;\n                if (r != c)\n                    SM(c,r) += d;\n                edges.push_back(sample_pair(r,c,d));\n            }\n\n            const matrix<double> v = randm(size,1);\n\n            matrix<double> result;\n\n            sparse_matrix_vector_multiply(oedges, v, result);\n            DLIB_TEST_MSG(length(M*v - result) < 1e-12, length(M*v - result));\n\n            sparse_matrix_vector_multiply(edges, v, result);\n            DLIB_TEST_MSG(length(SM*v - result) < 1e-12, length(SM*v - result));\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_sparse_matrix_vector_multiply1()\n    {\n        print_spinner();\n        std::map<unsigned long,double> sv;\n        sv[2] = 8;\n        sv[6] = 2.3;\n\n        matrix<double,10,1> v;\n        v = 0;\n        v(2) = 8;\n        v(6) = 2.3;\n\n\n        matrix<double,0,1> r1, r2;\n\n        r1 = gaussian_randm(4,10)*v;\n        r2 = sparse_matrix_vector_multiply(gaussian_randm(4,std::numeric_limits<long>::max()),sv);\n\n        DLIB_TEST(max(abs(r1-r2)) < 1e-15);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_sparse_matrix_vector_multiply2()\n    {\n        std::vector<std::pair<unsigned long,double> > sv;\n        sv.push_back(make_pair(6, 1.42));\n        sv.push_back(make_pair(3, 5));\n\n        matrix<double,9,1> v;\n        v = 0;\n        v(3) = 5;\n        v(6) = 1.42;\n\n\n        matrix<double,0,1> r1, r2;\n\n        r1 = gaussian_randm(3,9)*v;\n        r2 = sparse_matrix_vector_multiply(gaussian_randm(3,std::numeric_limits<long>::max()),sv);\n\n        DLIB_TEST(max(abs(r1-r2)) < 1e-15);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_make_sparse_vector_inplace()\n    {\n        std::vector<std::pair<unsigned long,double> > vect;\n        vect.push_back(make_pair(4,1));\n        vect.push_back(make_pair(0,1));\n        vect.push_back(make_pair(4,1));\n        vect.push_back(make_pair(3,1));\n        vect.push_back(make_pair(8,1));\n        vect.push_back(make_pair(8,1));\n        vect.push_back(make_pair(8,1));\n        vect.push_back(make_pair(8,1));\n\n        make_sparse_vector_inplace(vect);\n\n        DLIB_TEST(vect.size() == 4);\n        DLIB_TEST(vect[0].first == 0);\n        DLIB_TEST(vect[1].first == 3);\n        DLIB_TEST(vect[2].first == 4);\n        DLIB_TEST(vect[3].first == 8);\n\n        DLIB_TEST(vect[0].second == 1);\n        DLIB_TEST(vect[1].second == 1);\n        DLIB_TEST(vect[2].second == 2);\n        DLIB_TEST(vect[3].second == 4);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class sparse_vector_tester : public tester\n    {\n    public:\n        sparse_vector_tester (\n        ) :\n            tester (\n                \"test_sparse_vector\",       // the command line argument name for this test\n                \"Run tests on the sparse_vector routines.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n\n        void perform_test (\n        )\n        {\n            test_make_sparse_vector_inplace();\n\n            std::map<unsigned int, double> v;\n            v[4] = 8;\n            v[2] = -4;\n            v[9] = 10;\n\n            DLIB_TEST(max(v) == 10);\n            DLIB_TEST(min(v) == -4);\n\n            v.clear();\n            v[4] = 8;\n            v[9] = 10;\n            DLIB_TEST(max(v) == 10);\n            DLIB_TEST(min(v) == 0);\n\n\n            v.clear();\n            v[4] = -9;\n            v[9] = -4;\n            DLIB_TEST(max(v) == 0);\n            DLIB_TEST(min(v) == -9);\n\n\n            {\n                matrix<double> a(2,2), b(2,2);\n                a = randm(2,2);\n                b = randm(2,2);\n\n                DLIB_TEST(equal(a-b, subtract(a,b)));\n                DLIB_TEST(equal(a+b, add(a,b)));\n                DLIB_TEST(equal(a-(b+b), subtract(a,b+b)));\n                DLIB_TEST(equal(a+b+b, add(a,b+b)));\n            }\n\n            {\n                std::map<unsigned long,double> a, b, c;\n                a[1] = 2;\n                a[3] = 5;\n\n                b[0] = 3;\n                b[1] = 1;\n\n                c = add(a,b);\n                DLIB_TEST(c.size() == 3);\n                DLIB_TEST(c[0] == 3);\n                DLIB_TEST(c[1] == 3);\n                DLIB_TEST(c[3] == 5);\n\n                c = subtract(a,b);\n                DLIB_TEST(c.size() == 3);\n                DLIB_TEST(c[0] == -3);\n                DLIB_TEST(c[1] == 1);\n                DLIB_TEST(c[3] == 5);\n\n                c = add(b,a);\n                DLIB_TEST(c.size() == 3);\n                DLIB_TEST(c[0] == 3);\n                DLIB_TEST(c[1] == 3);\n                DLIB_TEST(c[3] == 5);\n\n                c = subtract(b,a);\n                DLIB_TEST(c.size() == 3);\n                DLIB_TEST(c[0] == 3);\n                DLIB_TEST(c[1] == -1);\n                DLIB_TEST(c[3] == -5);\n\n                std::vector<std::pair<unsigned long,double> > aa, bb, cc;\n\n                aa.assign(a.begin(), a.end());\n                bb.assign(b.begin(), b.end());\n\n                cc = add(aa,bb); \n                DLIB_TEST(cc.size() == 3);\n                DLIB_TEST(cc[0].first == 0);\n                DLIB_TEST(cc[1].first == 1);\n                DLIB_TEST(cc[2].first == 3);\n                DLIB_TEST(cc[0].second == 3);\n                DLIB_TEST(cc[1].second == 3);\n                DLIB_TEST(cc[2].second == 5);\n\n                cc = subtract(aa,bb); \n                DLIB_TEST(cc.size() == 3);\n                DLIB_TEST(cc[0].first == 0);\n                DLIB_TEST(cc[1].first == 1);\n                DLIB_TEST(cc[2].first == 3);\n                DLIB_TEST(cc[0].second == -3);\n                DLIB_TEST(cc[1].second == 1);\n                DLIB_TEST(cc[2].second == 5);\n\n                cc = add(bb,aa); \n                DLIB_TEST(cc.size() == 3);\n                DLIB_TEST(cc[0].first == 0);\n                DLIB_TEST(cc[1].first == 1);\n                DLIB_TEST(cc[2].first == 3);\n                DLIB_TEST(cc[0].second == 3);\n                DLIB_TEST(cc[1].second == 3);\n                DLIB_TEST(cc[2].second == 5);\n\n                cc = subtract(bb,aa); \n                DLIB_TEST(cc.size() == 3);\n                DLIB_TEST(cc[0].first == 0);\n                DLIB_TEST(cc[1].first == 1);\n                DLIB_TEST(cc[2].first == 3);\n                DLIB_TEST(cc[0].second == 3);\n                DLIB_TEST(cc[1].second == -1);\n                DLIB_TEST(cc[2].second == -5);\n\n            }\n\n            test_sparse_matrix_vector_multiplies();\n            test_sparse_matrix_vector_multiply1();\n            test_sparse_matrix_vector_multiply2();\n\n            {\n                matrix<double,0,1> a, b;\n                a = gaussian_randm(6,1, 0);\n                b = gaussian_randm(6,1, 1);\n\n                std::vector<std::pair<unsigned long,double> > aa, bb;\n\n                assign(aa, a);\n                assign(bb, b);\n\n                // dot() does something special when the sparse vectors have entries for\n                // each dimension, which is what happens when they are copied from dense\n                // vectors.  So the point of the tests in this block is to make sure dot()\n                // works right in this case.\n                DLIB_TEST(std::abs(dot(a,b) - dot(aa,bb)) < 1e-14);\n                a(3) = 0;\n                assign(aa, a);\n                DLIB_TEST(std::abs(dot(a,b) - dot(aa,bb)) < 1e-14);\n            }\n        }\n    };\n\n    sparse_vector_tester a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/stack.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/stack.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.stack\");\n\n    template <\n        typename stack\n        >\n    void stack_kernel_test (\n    )\n    /*!\n        requires\n            - stack is an implementation of stack/stack_sort_abstract.h \n              stack is instantiated with int\n        ensures\n            - runs tests on stack for compliance with the specs\n    !*/\n    {        \n\n\n        srand(static_cast<unsigned int>(time(0)));\n\n        print_spinner();\n\n        stack a1, a2;\n\n\n\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.at_start());\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.move_next() == false);\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.at_start() == false);\n        DLIB_TEST(a1.move_next() == false);\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.at_start() == false);            \n        DLIB_TEST(a1.size() == 0);\n\n        swap(a1,a2);\n        DLIB_TEST(a2.size() == 0);\n        DLIB_TEST(a2.current_element_valid() == false);\n        DLIB_TEST(a2.at_start() == false);\n        DLIB_TEST(a2.move_next() == false);\n        DLIB_TEST(a2.current_element_valid() == false);\n        DLIB_TEST(a2.size() == 0);\n        DLIB_TEST(a2.at_start() == false);            \n        DLIB_TEST(a2.size() == 0);\n\n\n\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.at_start());\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.move_next() == false);\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.at_start() == false);\n        DLIB_TEST(a1.move_next() == false);\n        DLIB_TEST(a1.current_element_valid() == false);\n        DLIB_TEST(a1.size() == 0);\n        DLIB_TEST(a1.at_start() == false);            \n        DLIB_TEST(a1.size() == 0);\n\n        a1.reset();\n        a2.reset();\n\n        for (unsigned long k = 0; k < 4; ++k)\n        {\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start() == false);            \n            DLIB_TEST(a1.size() == 0);\n\n            swap(a1,a2);\n            DLIB_TEST(a2.size() == 0);\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.at_start() == false);\n            DLIB_TEST(a2.move_next() == false);\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.size() == 0);\n            DLIB_TEST(a2.at_start() == false);            \n            DLIB_TEST(a2.size() == 0);\n\n\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start() == false);            \n            DLIB_TEST(a1.size() == 0);\n\n            a1.clear();\n            a2.clear();\n\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start() == false);            \n            DLIB_TEST(a1.size() == 0);\n\n            swap(a1,a2);\n            DLIB_TEST(a2.size() == 0);\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.at_start() == false);\n            DLIB_TEST(a2.move_next() == false);\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.size() == 0);\n            DLIB_TEST(a2.at_start() == false);            \n            DLIB_TEST(a2.size() == 0);\n\n\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start());\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == false);\n            DLIB_TEST(a1.move_next() == false);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a1.at_start() == false);            \n            DLIB_TEST(a1.size() == 0);\n\n            a1.clear();\n            a2.clear();\n\n\n            for (unsigned long i = 0; i < 100; ++i)\n            {\n                int a = (int)i;\n                a1.push(a);\n            }\n\n            DLIB_TEST(a1.size() == 100);\n\n            int count = 99;\n            while (a1.move_next())\n            {\n                DLIB_TEST_MSG(a1.element() == count,a1.element() << \" : \" << count);\n                --count;\n            }\n\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == false);\n\n            a1.swap(a2);\n\n            count = 99;\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.at_start() == false);\n            DLIB_TEST(a1.current_element_valid() == false);\n            DLIB_TEST(a1.at_start() == true);\n\n            DLIB_TEST(a1.size() == 0);\n            DLIB_TEST(a2.size() == 100);\n            DLIB_TEST(a2.current() == 99);\n\n            a2.reset();\n            while (a2.move_next())\n            {\n                DLIB_TEST(a2.element() == count--);\n            }                \n\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.at_start() == false);\n            int b = 4;\n            a2.push(b);\n            DLIB_TEST(a2.current_element_valid() == false);\n            DLIB_TEST(a2.at_start() == true);\n\n            DLIB_TEST(a2.current() == 4);\n            int c = 0;\n            a2.pop(c);\n            DLIB_TEST(c == 4);\n\n            // serialize the state of a2, then clear a2, then\n            // load the state back into a2.\n            ostringstream sout;\n            serialize(a2,sout);\n            DLIB_TEST(a2.at_start() == true);\n            istringstream sin(sout.str());\n            a2.clear();\n            deserialize(a2,sin);\n\n\n            count = 99;\n            while (a2.size())\n            {\n                int a = 0;\n                DLIB_TEST(a2.current() == count);\n                DLIB_TEST(const_cast<const stack&>(a2).current() == count);\n                a2.pop(a);\n                DLIB_TEST(a == count--);\n            }\n\n\n\n\n\n\n            a1.clear();\n            a2.clear();\n        }\n\n\n        {\n            a1.clear();\n            remover<int>& go = a1;\n            for (int i = 0; i < 100; ++i)\n            {\n                int a = 3;\n                a1.push(a);\n            }\n            DLIB_TEST(go.size() == 100);                \n            for (int i = 0; i < 100; ++i)\n            {\n                int a = 9;\n                a1.remove_any(a);\n                DLIB_TEST(a == 3);\n            }\n            DLIB_TEST(go.size() == 0);\n        }\n\n    }\n\n\n\n\n    class stack_tester : public tester\n    {\n    public:\n        stack_tester (\n        ) :\n            tester (\"test_stack\",\n                    \"Runs tests on the stack component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            stack_kernel_test<stack<int>::kernel_1a>  ();\n            dlog << LINFO << \"testing kernel_1a_c\";\n            stack_kernel_test<stack<int>::kernel_1a_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/static_map.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/hash_table.h>\n#include <dlib/binary_search_tree.h>\n\n#include <dlib/static_map.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.static_map\");\n\n    template <\n        typename map\n        >\n    void static_map_kernel_test (\n    )\n    /*!\n        requires\n            - map is an implementation of static_map/static_map_kernel_abstract.h and\n              is instantiated to map int to int\n        ensures\n            - runs tests on map for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n        srand(static_cast<unsigned int>(time(0)));\n\n        typedef binary_search_tree<int,int>::kernel_2a_c bst;\n        typedef hash_table<int,int>::kernel_1a_c ht;\n\n        const unsigned long table_4_max_size = 100;\n        const unsigned long tree_max_size = 50000;\n        ht table_4(4);\n        ht table_8(8);\n        bst tree;\n\n        ht table_4b(4);\n        ht table_8b(8);\n        bst treeb;\n\n\n        // just do the following to make sure operator[] doesn't hang\n        // under some instances\n        {\n            int g = 1, h = 1;\n            treeb.add(g,h);\n            map test;\n            map test2;\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test.at_start());\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.move_next() == false);\n            DLIB_TEST(test.current_element_valid() == false);\n            DLIB_TEST(test.at_start() == false);\n\n            swap(test,test2);\n            DLIB_TEST(test2.at_start() == false);\n            DLIB_TEST(test.at_start() == true);\n\n            swap(test,test2);\n            DLIB_TEST(test.at_start() == false);\n\n\n            DLIB_TEST(test.size() == 0);\n            DLIB_TEST(test[1] == 0);\n            DLIB_TEST(test[2] == 0);\n            DLIB_TEST(test[3] == 0);\n            DLIB_TEST(test[0] == 0);\n\n            test.load(treeb);\n            DLIB_TEST(test.at_start());\n            DLIB_TEST(test[1] != 0);\n            DLIB_TEST(test[2] == 0);\n            DLIB_TEST(test[3] == 0);\n            DLIB_TEST(test[0] == 0);\n\n            test2.clear();\n            swap(test2,test);\n            DLIB_TEST(test2[1] != 0);\n            DLIB_TEST(test2[2] == 0);\n            DLIB_TEST(test2[3] == 0);\n            DLIB_TEST(test2[0] == 0);\n            DLIB_TEST(test[1] == 0);\n            DLIB_TEST(test[2] == 0);\n            DLIB_TEST(test[3] == 0);\n            DLIB_TEST(test[0] == 0);\n\n\n            DLIB_TEST(treeb.size() == 0);\n            treeb.clear();\n        }\n\n\n        for (unsigned long i = 0; i < table_4_max_size; ++i)\n        {\n            int a = ::rand()&0xFF;\n            int b = a + 1;\n            int ab = a;\n            int bb = b;\n            table_4.add(a,b);\n            table_4b.add(ab,bb);\n        }\n\n        for (unsigned long i = 0; i < table_4_max_size; ++i)\n        {\n            int a = ::rand()&0xF;\n            int b = a + 1;\n            int ab = a;\n            int bb = b;\n            table_8.add(a,b);\n            table_8b.add(ab,bb);\n        }\n\n        for (unsigned long i = 0; i < tree_max_size; ++i)\n        {\n            int a = ::rand()&0xFFF;\n            int b = a + 1;\n            int ab = a;\n            int bb = b;\n            tree.add(a,b);\n            treeb.add(ab,bb);\n        }\n\n        map m_4;\n        m_4.load(table_4);\n        map m_8;\n        m_8.load(table_8);\n        map m_t;\n        m_t.load(tree);\n        map e;\n        e.load(table_4);\n\n        DLIB_TEST(e.size() == 0);\n        DLIB_TEST(e.at_start() == true);\n        DLIB_TEST(e.current_element_valid() == false);     \n        DLIB_TEST(e.move_next() == false);\n        DLIB_TEST(e.at_start() == false);\n        DLIB_TEST(e.current_element_valid() == false);            \n\n        DLIB_TEST(m_4.size() == table_4b.size());\n        DLIB_TEST(m_8.size() == table_8b.size());\n        DLIB_TEST(m_t.size() == treeb.size());\n\n        DLIB_TEST(m_4.at_start() == true);\n        DLIB_TEST(m_8.at_start() == true);\n        DLIB_TEST(m_t.at_start() == true);\n        DLIB_TEST(m_4.current_element_valid() == false);            \n        DLIB_TEST(m_8.current_element_valid() == false);            \n        DLIB_TEST(m_t.current_element_valid() == false);     \n\n\n        DLIB_TEST(m_4.move_next() == true);\n        DLIB_TEST(m_4.at_start() == false);\n        DLIB_TEST(m_4.current_element_valid() == true);\n        DLIB_TEST(m_8.move_next() == true);\n        DLIB_TEST(m_8.at_start() == false);\n        DLIB_TEST(m_8.current_element_valid() == true);\n        DLIB_TEST(m_t.move_next() == true);\n        DLIB_TEST(m_t.at_start() == false);\n        DLIB_TEST(m_t.current_element_valid() == true);\n\n        m_4.reset();\n        m_8.reset();\n        m_t.reset();\n\n        while (m_4.move_next())\n        {\n            DLIB_TEST( table_4b[m_4.element().key()] != 0);\n            DLIB_TEST( *table_4b[m_4.element().key()] == m_4.element().value());\n        }\n\n        // serialize the state of m_4, then clear m_4, then\n        // load the state back into m_4.\n        ostringstream sout;\n        serialize(m_4,sout);\n        DLIB_TEST(m_4.at_start() == true);\n        istringstream sin(sout.str());\n        m_4.clear();\n        deserialize(m_4,sin);\n        DLIB_TEST(m_4.at_start() == true);\n\n\n\n        while (table_4b.move_next())\n        {\n            DLIB_TEST( m_4[table_4b.element().key()] != 0);\n            DLIB_TEST( *m_4[table_4b.element().key()] == table_4b.element().value());\n        }\n\n        // serialize the state of m_8, then clear m_8, then\n        // load the state back into m_8.\n        sout.str(\"\");\n        serialize(m_8,sout);\n        DLIB_TEST(m_8.at_start() == true);\n        sin.str(sout.str());\n        m_8.clear();\n        deserialize(m_8,sin);\n        DLIB_TEST(m_8.at_start() == true);\n\n        while (m_8.move_next())\n        {\n            DLIB_TEST( table_8b[m_8.element().key()] != 0);\n            DLIB_TEST( *table_8b[m_8.element().key()] == m_8.element().value());\n        }\n\n        while (table_8b.move_next())\n        {\n            DLIB_TEST( m_8[table_8b.element().key()] != 0);\n            DLIB_TEST( *m_8[table_8b.element().key()] == table_8b.element().value());\n        }\n\n\n        while (m_t.move_next())\n        {\n            DLIB_TEST( treeb[m_t.element().key()] != 0);\n            DLIB_TEST( *treeb[m_t.element().key()] == m_t.element().value());\n        }\n\n        // make sure operator[] doesn't hang\n        for (int l = 1; l < 10000; ++l)\n        {\n            DLIB_TEST(m_t[l+0xFFF] == 0);\n        }\n\n        while (treeb.move_next())\n        {\n            DLIB_TEST( m_t[treeb.element().key()] != 0);\n            DLIB_TEST( *m_t[treeb.element().key()] == treeb.element().value());\n        }\n\n\n\n        m_4.reset();\n        m_8.reset();\n        m_t.reset();\n\n        int last = 0;\n        while (m_4.move_next())\n        {\n            DLIB_TEST(last <= m_4.element().key());\n            DLIB_TEST(m_4.element().key() + 1 == m_4.element().value());\n            last = m_4.element().key();\n        }\n\n        last = 0;\n        while (m_8.move_next())\n        {\n            DLIB_TEST(last <= m_8.element().key());\n            DLIB_TEST(m_8.element().key() + 1 == m_8.element().value());\n            last = m_8.element().key();\n        }\n\n        last = 0;\n        while (m_t.move_next())\n        {\n            DLIB_TEST(last <= m_t.element().key());\n            DLIB_TEST(m_t.element().key() + 1 == m_t.element().value());\n            last = m_t.element().key();\n        }\n\n\n\n\n\n\n        // this is just to test swap\n        m_4.swap(m_8);\n        m_4.reset();\n        table_4b.reset();\n        while (m_8.move_next())\n        {\n            DLIB_TEST( table_4b[m_8.element().key()] != 0);\n            DLIB_TEST( *table_4b[m_8.element().key()] == m_8.element().value());\n        }\n\n        while (table_4b.move_next())\n        {\n            DLIB_TEST( m_8[table_4b.element().key()] != 0);\n            DLIB_TEST( *m_8[table_4b.element().key()] == table_4b.element().value());\n        }\n\n    }\n\n\n\n\n\n    class static_map_tester : public tester\n    {\n    public:\n        static_map_tester (\n        ) :\n            tester (\"test_static_map\",\n                    \"Runs tests on the static_map component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            static_map_kernel_test<static_map<int,int>::kernel_1a>  ();\n            dlog << LINFO << \"testing kernel_1a_c\";\n            static_map_kernel_test<static_map<int,int>::kernel_1a_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/static_set.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/queue.h>\n#include <dlib/static_set.h>\n#include <dlib/set.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.static_set\");\n\n    template <\n        typename set\n        >\n    void static_set_kernel_test (\n    )\n    /*!\n        requires\n            - set is an implementation of static_set/static_set_kernel_abstract.h and\n              is instantiated to hold ints\n        ensures\n            - runs tests on set for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n\n        srand(static_cast<unsigned int>(time(0)));\n\n        typedef queue<int>::kernel_2a_c queue_of_int;\n        typedef dlib::set<int>::kernel_1a_c set_of_int;\n\n        queue_of_int q, qb, qc;\n        set_of_int ds;\n\n        set S;\n        S.load(ds);\n\n        for (int k = 1; k < 1000; ++k)\n        {\n            q.clear();\n            qb.clear();\n            qc.clear();\n            unsigned long num = k; \n            for (unsigned long i = 0; i < num; ++i)\n            {\n                int a = ::rand()&0xFF;\n                int b = a;\n                int c = a;\n                q.enqueue(a);\n                qb.enqueue(b);\n                qc.enqueue(c);\n            }\n\n\n\n            set s;\n\n            DLIB_TEST(s.size() == 0);\n            DLIB_TEST(s.at_start());\n            DLIB_TEST(s.current_element_valid() == false);\n            DLIB_TEST(s.move_next() == false);\n            DLIB_TEST(s.current_element_valid() == false);\n            DLIB_TEST(s.at_start() == false);\n\n            s.load(q);\n            DLIB_TEST(s.at_start());\n            set se;\n            se.load(q);\n\n            DLIB_TEST(se.size() == 0);\n            DLIB_TEST(se.at_start() == true);\n            DLIB_TEST(se.current_element_valid() == false);     \n            DLIB_TEST(se.move_next() == false);\n            DLIB_TEST(se.at_start() == false);\n            DLIB_TEST(se.current_element_valid() == false);\n\n\n            DLIB_TEST(s.size() == qb.size());\n            DLIB_TEST(s.at_start() == true);\n            DLIB_TEST(s.current_element_valid() == false);     \n            DLIB_TEST(s.move_next() == true);\n            DLIB_TEST(s.at_start() == false);\n            DLIB_TEST(s.current_element_valid() == true);\n            s.reset();\n            se.reset();\n\n            swap(se,s);\n\n            DLIB_TEST(s.size() == 0);\n            DLIB_TEST(s.at_start() == true);\n            DLIB_TEST(s.current_element_valid() == false);     \n            DLIB_TEST(s.move_next() == false);\n            DLIB_TEST(s.at_start() == false);\n            DLIB_TEST(s.current_element_valid() == false);\n\n            DLIB_TEST(se.size() == qb.size());\n            DLIB_TEST(se.at_start() == true);\n            DLIB_TEST(se.current_element_valid() == false);     \n            DLIB_TEST(se.move_next() == true);\n            DLIB_TEST(se.at_start() == false);\n            DLIB_TEST(se.current_element_valid() == true);\n            s.reset();\n            se.reset();\n\n            swap(se,s);\n\n\n\n            int last = 0;\n            while (s.move_next())\n            {\n                DLIB_TEST(last <= s.element());\n                last = s.element();\n            }\n\n\n\n            while (qb.move_next())\n            {\n                int a;\n                qb.dequeue(a);\n                DLIB_TEST(s.is_member(a));\n                DLIB_TEST(!se.is_member(a));\n\n                // make sure is_member() doesn't hang\n                for (int l = 0; l < 100; ++l)\n                {\n                    int a = ::rand();\n                    s.is_member(a);\n                }\n            }\n\n            swap(s,se);\n\n            // serialize the state of se, then clear se, then\n            // load the state back into se.\n            ostringstream sout;\n            serialize(se,sout);\n            DLIB_TEST(se.at_start() == true);\n            istringstream sin(sout.str());\n            se.clear();\n            deserialize(se,sin);\n            DLIB_TEST(se.at_start() == true);\n\n\n            last = 0;\n            while (se.move_next())\n            {\n                DLIB_TEST(last <= se.element());\n                last = se.element();\n            }\n\n\n            DLIB_TEST(s.size() == 0);\n            DLIB_TEST(se.size() == qc.size());\n\n            while (qc.move_next())\n            {\n                int a;\n                qc.dequeue(a);\n                DLIB_TEST(se.is_member(a));\n                DLIB_TEST(!s.is_member(a));\n            }\n\n\n        }\n    }\n\n\n\n\n\n    class static_set_tester : public tester\n    {\n    public:\n        static_set_tester (\n        ) :\n            tester (\"test_static_set\",\n                    \"Runs tests on the static_set component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            static_set_kernel_test<static_set<int>::kernel_1a>  ();\n            dlog << LINFO << \"testing kernel_1a_c\";\n            static_set_kernel_test<static_set<int>::kernel_1a_c>();\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/statistics.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/statistics.h>\n#include <dlib/rand.h>\n#include <dlib/svm.h>\n#include <algorithm>\n#include <dlib/matrix.h>\n#include <cmath>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.statistics\");\n\n\n\n    class statistics_tester : public tester\n    {\n    public:\n        statistics_tester (\n        ) :\n            tester (\"test_statistics\",\n                    \"Runs tests on the statistics component.\")\n        {}\n\n        void test_random_subset_selector ()\n        {\n            random_subset_selector<double> rand_set;\n\n            for (int j = 0; j < 30; ++j)\n            {\n                print_spinner();\n\n                running_stats<double> rs, rs2;\n\n                rand_set.set_max_size(1000);\n\n                for (double i = 0; i < 100000; ++i)\n                {\n                    rs.add(i);\n                    rand_set.add(i);\n                }\n\n\n                for (unsigned long i = 0; i < rand_set.size(); ++i)\n                    rs2.add(rand_set[i]);\n\n\n                dlog << LDEBUG << \"true mean:    \" << rs.mean();\n                dlog << LDEBUG << \"true sampled: \" << rs2.mean();\n                double ratio = rs.mean()/rs2.mean();\n                DLIB_TEST_MSG(0.96 < ratio  && ratio < 1.04, \" ratio: \" << ratio);\n            }\n\n\n            {\n                random_subset_selector<int> r1, r2;\n                r1.set_max_size(300);\n                for (int i = 0; i < 4000; ++i)\n                    r1.add(i);\n\n                ostringstream sout;\n                serialize(r1, sout);\n                istringstream sin(sout.str());\n                deserialize(r2, sin);\n\n                DLIB_TEST(r1.size() == r2.size());\n                DLIB_TEST(r1.max_size() == r2.max_size());\n                DLIB_TEST(r1.next_add_accepts() == r2.next_add_accepts());\n                DLIB_TEST(std::equal(r1.begin(), r1.end(), r2.begin()));\n\n                for (int i = 0; i < 4000; ++i)\n                {\n                    r1.add(i);\n                    r2.add(i);\n                }\n\n                DLIB_TEST(r1.size() == r2.size());\n                DLIB_TEST(r1.max_size() == r2.max_size());\n                DLIB_TEST(r1.next_add_accepts() == r2.next_add_accepts());\n                DLIB_TEST(std::equal(r1.begin(), r1.end(), r2.begin()));\n            }\n        }\n\n        void test_random_subset_selector2 ()\n        {\n            random_subset_selector<double> rand_set;\n            DLIB_TEST(rand_set.next_add_accepts() == false);\n            DLIB_TEST(rand_set.size() == 0);\n            DLIB_TEST(rand_set.max_size() == 0);\n\n            for (int j = 0; j < 30; ++j)\n            {\n                print_spinner();\n\n                running_stats<double> rs, rs2;\n\n                rand_set.set_max_size(1000);\n                DLIB_TEST(rand_set.next_add_accepts() == true);\n\n                for (double i = 0; i < 100000; ++i)\n                {\n                    rs.add(i);\n                    if (rand_set.next_add_accepts())\n                        rand_set.add(i);\n                    else\n                        rand_set.add();\n                }\n\n                DLIB_TEST(rand_set.size() == 1000);\n                DLIB_TEST(rand_set.max_size() == 1000);\n\n                for (unsigned long i = 0; i < rand_set.size(); ++i)\n                    rs2.add(rand_set[i]);\n\n\n                dlog << LDEBUG << \"true mean:    \" << rs.mean();\n                dlog << LDEBUG << \"true sampled: \" << rs2.mean();\n                double ratio = rs.mean()/rs2.mean();\n                DLIB_TEST_MSG(0.96 < ratio  && ratio < 1.04, \" ratio: \" << ratio);\n            }\n        }\n\n        void test_running_cross_covariance ()\n        {\n            running_cross_covariance<matrix<double> > rcc1, rcc2;\n\n            matrix<double,0,1> xm, ym;\n            const int num = 40;\n\n            dlib::rand rnd;\n            for (int i = 0; i < num; ++i)\n            {\n                matrix<double,0,1> x = randm(4,1,rnd);\n                matrix<double,0,1> y = randm(4,1,rnd);\n\n                xm += x/num;\n                ym += y/num;\n\n                if (i < 15)\n                    rcc1.add(x,y);\n                else\n                    rcc2.add(x,y);\n            }\n\n            rnd.clear();\n            matrix<double> cov;\n            for (int i = 0; i < num; ++i)\n            {\n                matrix<double,0,1> x = randm(4,1,rnd);\n                matrix<double,0,1> y = randm(4,1,rnd);\n                cov += (x-xm)*trans(y-ym);\n            }\n            cov /= num-1;\n\n            running_cross_covariance<matrix<double> > rcc = rcc1 + rcc2;\n            DLIB_TEST(max(abs(rcc.covariance_xy()-cov)) < 1e-14);\n            DLIB_TEST(max(abs(rcc.mean_x()-xm)) < 1e-14);\n            DLIB_TEST(max(abs(rcc.mean_y()-ym)) < 1e-14);\n        }\n\n        std::map<unsigned long,double> dense_to_sparse ( \n            const matrix<double,0,1>& x\n        )\n        {\n            std::map<unsigned long,double> temp;\n            for (long i = 0; i < x.size(); ++i)\n                temp[i] = x(i);\n            return temp;\n        }\n\n        void test_running_cross_covariance_sparse()\n        {\n            running_cross_covariance<matrix<double> > rcc1, rcc2;\n\n            running_covariance<matrix<double> > rc1, rc2;\n\n            matrix<double,0,1> xm, ym;\n            const int num = 40;\n\n            rc1.set_dimension(4);\n            rc2.set_dimension(4);\n\n            rcc1.set_dimensions(4,5);\n            rcc2.set_dimensions(4,5);\n\n            dlib::rand rnd;\n            for (int i = 0; i < num; ++i)\n            {\n                matrix<double,0,1> x = randm(4,1,rnd);\n                matrix<double,0,1> y = randm(5,1,rnd);\n\n                xm += x/num;\n                ym += y/num;\n\n                if (i < 15)\n                {\n                    rcc1.add(x,dense_to_sparse(y));\n                    rc1.add(x);\n                }\n                else if (i < 30)\n                {\n                    rcc2.add(dense_to_sparse(x),y);\n                    rc2.add(dense_to_sparse(x));\n                }\n                else\n                {\n                    rcc2.add(dense_to_sparse(x),dense_to_sparse(y));\n                    rc2.add(x);\n                }\n            }\n\n            rnd.clear();\n            matrix<double> cov, cov2;\n            for (int i = 0; i < num; ++i)\n            {\n                matrix<double,0,1> x = randm(4,1,rnd);\n                matrix<double,0,1> y = randm(5,1,rnd);\n                cov += (x-xm)*trans(y-ym);\n                cov2 += (x-xm)*trans(x-xm);\n            }\n            cov /= num-1;\n            cov2 /= num-1;\n\n            running_cross_covariance<matrix<double> > rcc = rcc1 + rcc2;\n            DLIB_TEST_MSG(max(abs(rcc.covariance_xy()-cov)) < 1e-14, max(abs(rcc.covariance_xy()-cov)));\n            DLIB_TEST(max(abs(rcc.mean_x()-xm)) < 1e-14);\n            DLIB_TEST(max(abs(rcc.mean_y()-ym)) < 1e-14);\n\n            running_covariance<matrix<double> > rc = rc1 + rc2;\n            DLIB_TEST(max(abs(rc.covariance()-cov2)) < 1e-14);\n            DLIB_TEST(max(abs(rc.mean()-xm)) < 1e-14);\n        }\n\n        void test_running_covariance (\n        )\n        {\n            dlib::rand rnd;\n            std::vector<matrix<double,0,1> > vects;\n\n            running_covariance<matrix<double,0,1> > cov, cov2;\n            DLIB_TEST(cov.in_vector_size() == 0);\n\n            for (unsigned long dims = 1; dims < 5; ++dims)\n            {\n                for (unsigned long samps = 2; samps < 10; ++samps)\n                {\n                    vects.clear();\n                    cov.clear();\n                    DLIB_TEST(cov.in_vector_size() == 0);\n                    for (unsigned long i = 0; i < samps; ++i)\n                    {\n                        vects.push_back(randm(dims,1,rnd));\n                        cov.add(vects.back());\n\n                    }\n                    DLIB_TEST(cov.in_vector_size() == (long)dims);\n\n                    DLIB_TEST(equal(mean(mat(vects)), cov.mean()));\n                    DLIB_TEST_MSG(equal(covariance(mat(vects)), cov.covariance()),\n                              max(abs(covariance(mat(vects)) - cov.covariance()))\n                              << \"   dims = \" << dims << \"   samps = \" << samps\n                              );\n                }\n            }\n\n            for (unsigned long dims = 1; dims < 5; ++dims)\n            {\n                for (unsigned long samps = 2; samps < 10; ++samps)\n                {\n                    vects.clear();\n                    cov.clear();\n                    cov2.clear();\n                    DLIB_TEST(cov.in_vector_size() == 0);\n                    for (unsigned long i = 0; i < samps; ++i)\n                    {\n                        vects.push_back(randm(dims,1,rnd));\n                        if ((i%2) == 0)\n                            cov.add(vects.back());\n                        else\n                            cov2.add(vects.back());\n\n                    }\n                    DLIB_TEST((cov+cov2).in_vector_size() == (long)dims);\n\n                    DLIB_TEST(equal(mean(mat(vects)), (cov+cov2).mean()));\n                    DLIB_TEST_MSG(equal(covariance(mat(vects)), (cov+cov2).covariance()),\n                              max(abs(covariance(mat(vects)) - (cov+cov2).covariance()))\n                              << \"   dims = \" << dims << \"   samps = \" << samps\n                              );\n                }\n            }\n\n        }\n\n        void test_running_stats()\n        {\n            print_spinner();\n\n            running_stats<double> rs, rs2;\n\n            running_scalar_covariance<double> rsc1, rsc2;\n\n            for (double i = 0; i < 100; ++i)\n            {\n                rs.add(i);\n\n                rsc1.add(i,i);\n                rsc2.add(i,i);\n                rsc2.add(i,-i);\n            }\n\n            // make sure the running_stats and running_scalar_covariance agree\n            DLIB_TEST_MSG(std::abs(rs.mean() - rsc1.mean_x()) < 1e-10, std::abs(rs.mean() - rsc1.mean_x()));\n            DLIB_TEST(std::abs(rs.mean() - rsc1.mean_y()) < 1e-10);\n            DLIB_TEST(std::abs(rs.stddev() - rsc1.stddev_x()) < 1e-10);\n            DLIB_TEST(std::abs(rs.stddev() - rsc1.stddev_y()) < 1e-10);\n            DLIB_TEST(std::abs(rs.variance() - rsc1.variance_x()) < 1e-10);\n            DLIB_TEST(std::abs(rs.variance() - rsc1.variance_y()) < 1e-10);\n            DLIB_TEST(rs.current_n() == rsc1.current_n());\n\n            DLIB_TEST(std::abs(rsc1.correlation() - 1) < 1e-10);\n            DLIB_TEST(std::abs(rsc2.correlation() - 0) < 1e-10);\n\n\n\n            // test serialization of running_stats\n            ostringstream sout;\n            serialize(rs, sout);\n            istringstream sin(sout.str());\n            deserialize(rs2, sin);\n            // make sure the running_stats and running_scalar_covariance agree\n            DLIB_TEST_MSG(std::abs(rs2.mean() - rsc1.mean_x()) < 1e-10, std::abs(rs2.mean() - rsc1.mean_x()));\n            DLIB_TEST(std::abs(rs2.mean() - rsc1.mean_y()) < 1e-10);\n            DLIB_TEST(std::abs(rs2.stddev() - rsc1.stddev_x()) < 1e-10);\n            DLIB_TEST(std::abs(rs2.stddev() - rsc1.stddev_y()) < 1e-10);\n            DLIB_TEST(std::abs(rs2.variance() - rsc1.variance_x()) < 1e-10);\n            DLIB_TEST(std::abs(rs2.variance() - rsc1.variance_y()) < 1e-10);\n            DLIB_TEST(rs2.current_n() == rsc1.current_n());\n\n            rsc1.clear();\n            rsc1.add(1, -1);\n            rsc1.add(0, 0);\n            rsc1.add(1, -1);\n            rsc1.add(0, 0);\n            rsc1.add(1, -1);\n            rsc1.add(0, 0);\n\n            DLIB_TEST(std::abs(rsc1.covariance() - -0.3) < 1e-10);\n        }\n\n        void test_skewness_and_kurtosis_1()\n        {\n\n            dlib::rand rnum;\n            running_stats<double> rs1;\n\n            double tp = 0;\n\n            rnum.set_seed(\"DlibRocks\");\n\n            for(int i = 0; i< 1000000; i++)\n            {\n                tp = rnum.get_random_gaussian();\n                rs1.add(tp);\n            }   \n\n            // check the unbiased skewness and excess kurtosis of one million Gaussian\n            // draws are both near_vects zero.\n            DLIB_TEST(abs(rs1.skewness()) < 0.1);\n            DLIB_TEST(abs(rs1.ex_kurtosis()) < 0.1);\n        }\n\n        void test_skewness_and_kurtosis_2()\n        {\n\n            string str = \"DlibRocks\";\n\n            for(int j = 0; j<5 ; j++)\n            {\n                matrix<double,1,100000> dat;\n                dlib::rand rnum;\n                running_stats<double> rs1;\n     \n                double tp = 0;\n                double n = 100000;\n                double xb = 0;\n    \n                double sknum = 0;\n                double skdenom = 0;\n                double unbi_skew = 0;\n    \n                double exkurnum = 0;\n                double exkurdenom = 0;\n                double unbi_exkur = 0;\n\n                random_shuffle(str.begin(), str.end());\n                rnum.set_seed(str);\n\n                for(int i = 0; i<n; i++)\n                {\n                    tp = rnum.get_random_gaussian();\n                    rs1.add(tp);\n                    dat(i)=tp;\n                    xb += dat(i);\n                }   \n    \n                xb = xb/n;\n\n                for(int i = 0; i < n; i++ )\n                { \n                    sknum += pow(dat(i) - xb,3);\n                    skdenom += pow(dat(i) - xb,2);\n                    exkurnum += pow(dat(i) - xb,4);\n                    exkurdenom += pow(dat(i)-xb,2);\n                }\n\n                sknum = sknum/n;\n                skdenom = pow(skdenom/n,1.5);\n                exkurnum = exkurnum/n;\n                exkurdenom = pow(exkurdenom/n,2);\n    \n                unbi_skew = sqrt(n*(n-1))/(n-2)*sknum/skdenom;\n                unbi_exkur = (n-1)*((n+1)*(exkurnum/exkurdenom-3)+6)/((n-2)*(n-3));\n\n                dlog << LINFO << \"Skew Diff: \" <<  unbi_skew - rs1.skewness();\n                dlog << LINFO << \"Kur Diff: \" << unbi_exkur - rs1.ex_kurtosis();\n                \n                // Test an alternative implementation of the unbiased skewness and excess\n                // kurtosis against the one in running_stats.\n                DLIB_TEST(abs(unbi_skew - rs1.skewness()) < 1e-10);\n                DLIB_TEST(abs(unbi_exkur - rs1.ex_kurtosis()) < 1e-10);\n            }\n        }\n\n        void test_randomize_samples()\n        {\n            std::vector<unsigned int> t(15),u(15),v(15);\n\n            for (unsigned long i = 0; i < t.size(); ++i)\n            {\n                t[i] = i;\n                u[i] = i+1;\n                v[i] = i+2;\n            }\n            randomize_samples(t,u,v);\n\n            DLIB_TEST(t.size() == 15);\n            DLIB_TEST(u.size() == 15);\n            DLIB_TEST(v.size() == 15);\n\n            for (unsigned long i = 0; i < t.size(); ++i)\n            {\n                const unsigned long val = t[i];\n                DLIB_TEST(u[i] == val+1);\n                DLIB_TEST(v[i] == val+2);\n            }\n        }\n        void test_randomize_samples2()\n        {\n            dlib::matrix<int,15,1> t(15),u(15),v(15);\n\n            for (long i = 0; i < t.size(); ++i)\n            {\n                t(i) = i;\n                u(i) = i+1;\n                v(i) = i+2;\n            }\n            randomize_samples(t,u,v);\n\n            DLIB_TEST(t.size() == 15);\n            DLIB_TEST(u.size() == 15);\n            DLIB_TEST(v.size() == 15);\n\n            for (long i = 0; i < t.size(); ++i)\n            {\n                const long val = t(i);\n                DLIB_TEST(u(i) == val+1);\n                DLIB_TEST(v(i) == val+2);\n            }\n        }\n\n        void another_test()\n        {\n            std::vector<double> a;\n\n            running_stats<double> rs1, rs2;\n\n            for (int i = 0; i < 10; ++i)\n            {\n                rs1.add(i);\n                a.push_back(i);\n            }\n\n            DLIB_TEST(std::abs(variance(mat(a)) - rs1.variance()) < 1e-13);\n            DLIB_TEST(std::abs(stddev(mat(a)) - rs1.stddev()) < 1e-13);\n            DLIB_TEST(std::abs(mean(mat(a)) - rs1.mean()) < 1e-13);\n\n            for (int i = 10; i < 20; ++i)\n            {\n                rs2.add(i);\n                a.push_back(i);\n            }\n\n            DLIB_TEST(std::abs(variance(mat(a)) - (rs1+rs2).variance()) < 1e-13);\n            DLIB_TEST(std::abs(mean(mat(a)) - (rs1+rs2).mean()) < 1e-13);\n            DLIB_TEST((rs1+rs2).current_n() == 20);\n\n            running_scalar_covariance<double> rc1, rc2, rc3;\n            dlib::rand rnd;\n            for (double i = 0; i < 10; ++i)\n            {\n                const double a = i + rnd.get_random_gaussian();\n                const double b = i + rnd.get_random_gaussian();\n                rc1.add(a,b);\n                rc3.add(a,b);\n            }\n            for (double i = 11; i < 20; ++i)\n            {\n                const double a = i + rnd.get_random_gaussian();\n                const double b = i + rnd.get_random_gaussian();\n                rc2.add(a,b);\n                rc3.add(a,b);\n            }\n\n            DLIB_TEST(std::abs((rc1+rc2).mean_x() - rc3.mean_x()) < 1e-13);\n            DLIB_TEST(std::abs((rc1+rc2).mean_y() - rc3.mean_y()) < 1e-13);\n            DLIB_TEST_MSG(std::abs((rc1+rc2).variance_x() - rc3.variance_x()) < 1e-13, std::abs((rc1+rc2).variance_x() - rc3.variance_x()));\n            DLIB_TEST(std::abs((rc1+rc2).variance_y() - rc3.variance_y()) < 1e-13);\n            DLIB_TEST(std::abs((rc1+rc2).covariance() - rc3.covariance()) < 1e-13);\n            DLIB_TEST((rc1+rc2).current_n() == rc3.current_n());\n\n        }\n\n        void test_average_precision()\n        {\n            std::vector<bool> items;\n            DLIB_TEST(average_precision(items) == 1);\n            DLIB_TEST(average_precision(items,1) == 0);\n\n            items.push_back(true);\n            DLIB_TEST(average_precision(items) == 1);\n            DLIB_TEST(std::abs(average_precision(items,1) - 0.5) < 1e-14);\n\n            items.push_back(true);\n            DLIB_TEST(average_precision(items) == 1);\n            DLIB_TEST(std::abs(average_precision(items,1) - 2.0/3.0) < 1e-14);\n\n            items.push_back(false);\n\n            DLIB_TEST(average_precision(items) == 1);\n            DLIB_TEST(std::abs(average_precision(items,1) - 2.0/3.0) < 1e-14);\n\n            items.push_back(true);\n\n            DLIB_TEST(std::abs(average_precision(items) - (2.0+3.0/4.0)/3.0) < 1e-14);\n\n            items.push_back(true);\n\n            DLIB_TEST(std::abs(average_precision(items)   - (2.0 + 4.0/5.0 + 4.0/5.0)/4.0) < 1e-14);\n            DLIB_TEST(std::abs(average_precision(items,1) - (2.0 + 4.0/5.0 + 4.0/5.0)/5.0) < 1e-14);\n        }\n\n\n        template <typename sample_type>\n        void check_distance_metrics (\n            const std::vector<frobmetric_training_sample<sample_type> >& samples\n        )\n        {\n            running_stats<double> rs;\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                for (unsigned long j = 0; j < samples[i].near_vects.size(); ++j)\n                {\n                    const double d1 = length_squared(samples[i].anchor_vect - samples[i].near_vects[j]);\n                    for (unsigned long k = 0; k < samples[i].far_vects.size(); ++k)\n                    {\n                        const double d2 = length_squared(samples[i].anchor_vect - samples[i].far_vects[k]);\n                        rs.add(d2-d1);\n                    }\n                }\n            }\n\n            dlog << LINFO << \"dist gap max:    \"<< rs.max();\n            dlog << LINFO << \"dist gap min:    \"<< rs.min();\n            dlog << LINFO << \"dist gap mean:   \"<< rs.mean();\n            dlog << LINFO << \"dist gap stddev: \"<< rs.stddev();\n            DLIB_TEST(rs.min() >= 0.99);\n            DLIB_TEST(rs.mean() >= 0.9999);\n        }\n\n        void test_vector_normalizer_frobmetric(dlib::rand& rnd)\n        { \n            print_spinner();\n            typedef matrix<double,0,1> sample_type;\n            vector_normalizer_frobmetric<sample_type> normalizer;\n\n            std::vector<frobmetric_training_sample<sample_type> > samples;\n            frobmetric_training_sample<sample_type> samp;\n\n            const long key = 1;\n            const long dims = 5;\n            // Lets make some two class training data.  Each sample will have dims dimensions but\n            // only the one with index equal to key will be meaningful.  In particular, if the key\n            // dimension is > 0 then the sample is class +1 and -1 otherwise.  \n\n            long k = 0;\n            for (int i = 0; i < 50; ++i)\n            {\n                samp.clear();\n                samp.anchor_vect = gaussian_randm(dims,1,k++);\n                if (samp.anchor_vect(key) > 0)\n                    samp.anchor_vect(key) = rnd.get_random_double() + 5;\n                else\n                    samp.anchor_vect(key) = -(rnd.get_random_double() + 5);\n\n                matrix<double,0,1> temp;\n\n                for (int j = 0; j < 5; ++j)\n                {\n                    // Don't always put an equal number of near_vects and far_vects vectors into the\n                    // training samples.\n                    const int numa = rnd.get_random_32bit_number()%2 + 1;\n                    const int numb = rnd.get_random_32bit_number()%2 + 1;\n\n                    for (int num = 0; num < numa; ++num)\n                    {\n                        temp = gaussian_randm(dims,1,k++); temp(key) = 0.1;\n                        //temp = gaussian_randm(dims,1,k++); temp(key) = std::abs(temp(key));\n                        if (samp.anchor_vect(key) > 0) samp.near_vects.push_back(temp);\n                        else                    samp.far_vects.push_back(temp);\n                    }\n\n                    for (int num = 0; num < numb; ++num)\n                    {\n                        temp = gaussian_randm(dims,1,k++); temp(key) = -0.1;\n                        //temp = gaussian_randm(dims,1,k++); temp(key) = -std::abs(temp(key));\n                        if (samp.anchor_vect(key) < 0) samp.near_vects.push_back(temp);\n                        else                    samp.far_vects.push_back(temp);\n                    }\n                }\n                samples.push_back(samp);\n            }\n\n            normalizer.set_epsilon(0.0001);\n            normalizer.set_c(100);\n            normalizer.set_max_iterations(6000);\n            normalizer.train(samples);\n\n            dlog << LINFO << \"learned transform: \\n\" << normalizer.transform();\n\n            matrix<double,0,1> total;\n\n            for (unsigned long i = 0; i < samples.size(); ++i)\n            {\n                samples[i].anchor_vect = normalizer(samples[i].anchor_vect);\n                total += samples[i].anchor_vect;\n                for (unsigned long j = 0; j < samples[i].near_vects.size(); ++j)\n                    samples[i].near_vects[j] = normalizer(samples[i].near_vects[j]);\n                for (unsigned long j = 0; j < samples[i].far_vects.size(); ++j)\n                    samples[i].far_vects[j] = normalizer(samples[i].far_vects[j]);\n            }\n            total /= samples.size();\n            dlog << LINFO << \"sample transformed means: \"<< trans(total);\n            DLIB_TEST(length(total) < 1e-9);\n            check_distance_metrics(samples);\n\n            // make sure serialization works\n            stringstream os;\n            serialize(normalizer, os);\n            vector_normalizer_frobmetric<sample_type> normalizer2;\n            deserialize(normalizer2, os);\n            DLIB_TEST(equal(normalizer.transform(), normalizer2.transform()));\n            DLIB_TEST(equal(normalizer.transformed_means(), normalizer2.transformed_means()));\n            DLIB_TEST(normalizer.in_vector_size() == normalizer2.in_vector_size());\n            DLIB_TEST(normalizer.out_vector_size() == normalizer2.out_vector_size());\n            DLIB_TEST(normalizer.get_max_iterations() == normalizer2.get_max_iterations());\n            DLIB_TEST(std::abs(normalizer.get_c() - normalizer2.get_c()) < 1e-14);\n            DLIB_TEST(std::abs(normalizer.get_epsilon() - normalizer2.get_epsilon()) < 1e-14);\n\n        }\n\n\n        void perform_test (\n        )\n        {\n            dlib::rand rnd;\n            for (int i = 0; i < 5; ++i)\n                test_vector_normalizer_frobmetric(rnd);\n\n            test_random_subset_selector();\n            test_random_subset_selector2();\n            test_running_covariance();\n            test_running_cross_covariance();\n            test_running_cross_covariance_sparse();\n            test_running_stats();\n            test_skewness_and_kurtosis_1();\n            test_skewness_and_kurtosis_2();\n            test_randomize_samples();\n            test_randomize_samples2();\n            another_test();\n            test_average_precision();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/std_vector_c.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/stl_checked.h>\n\n#include \"tester.h\"\n\n// This is called an unnamed-namespace and it has the effect of making everything inside this file \"private\"\n// so that everything you declare will have static linkage.  Thus we won't have any multiply\n// defined symbol errors coming out of the linker when we try to compile the test suite.\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    // Declare the logger we will use in this test.  The name of the tester \n    // should start with \"test.\"\n    logger dlog(\"test.std_vector_c\");\n\n\n    class std_vector_c_tester : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a test for the std_vector_c object.  When it is constructed\n                it adds itself into the testing framework.  The command line switch is\n                specified as test_std_vector_c by passing that string to the tester constructor.\n        !*/\n    public:\n        std_vector_c_tester (\n        ) :\n            tester (\"test_std_vector_c\",\n                    \"Runs tests on the std_vector_c component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            std::vector<int> c;\n            std_vector_c<int> a, b;\n            a.push_back(3);\n            a.push_back(2);\n            a.push_back(1);\n\n            DLIB_TEST(a[0] == 3);\n            DLIB_TEST(a[1] == 2);\n            DLIB_TEST(a[2] == 1);\n            c = a;\n            DLIB_TEST(c[0] == 3);\n            DLIB_TEST(c[1] == 2);\n            DLIB_TEST(c[2] == 1);\n            DLIB_TEST(c.size() == 3);\n            DLIB_TEST(a.size() == 3);\n            DLIB_TEST(b.size() == 0);\n\n            DLIB_TEST(a == c);\n            DLIB_TEST(!(a != c));\n            DLIB_TEST(a <= c);\n            DLIB_TEST(a >= c);\n            DLIB_TEST(!(a < c));\n            DLIB_TEST(!(a > c));\n\n            swap(b,c);\n            DLIB_TEST(b[0] == 3);\n            DLIB_TEST(b[1] == 2);\n            DLIB_TEST(b[2] == 1);\n            DLIB_TEST(c.size() == 0);\n            DLIB_TEST(b.size() == 3);\n            swap(c,b);\n            DLIB_TEST(c[0] == 3);\n            DLIB_TEST(c[1] == 2);\n            DLIB_TEST(c[2] == 1);\n            DLIB_TEST(c.size() == 3);\n            DLIB_TEST(b.size() == 0);\n            swap(a,b);\n            DLIB_TEST(b[0] == 3);\n            DLIB_TEST(b[1] == 2);\n            DLIB_TEST(b[2] == 1);\n            DLIB_TEST(b.size() == 3);\n            DLIB_TEST(a.size() == 0);\n\n\n            swap(b,c);\n            swap(c,c);\n\n\n            std_vector_c<int> h(a);\n            std_vector_c<int> i(c);\n            std::vector<int> j(b);\n        }\n    } a;\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/string.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/string.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.string\");\n\n\n    void string_test (\n    )\n    /*!\n        ensures\n            - runs tests on string functions for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n\n        string a = \"  davis  \";\n        string A = \"  DAVIS  \";\n        string empty = \"    \";\n\n        dlog << LTRACE << 1;\n\n        double dval;\n        int ival;\n        bool bval;\n\n        DLIB_TEST_MSG(string_cast<int>(\"5\") == 5,string_cast<int>(\"5\"));\n        DLIB_TEST_MSG(string_cast<int>(\"0x5\") == 5,string_cast<int>(\"0x5\"));\n        DLIB_TEST_MSG(string_cast<int>(\"0xA\") == 10,string_cast<int>(\"0xA\"));\n        DLIB_TEST(string_cast<float>(\"0.5\") == 0.5);\n        DLIB_TEST((dval = sa =\"0.5\") == 0.5);\n        DLIB_TEST(string_cast<std::string>(\"0.5 !\") == \"0.5 !\");\n        DLIB_TEST(string_cast<bool>(\"true\") == true);\n        DLIB_TEST((bval = sa = \"true\") == true);\n        DLIB_TEST(string_cast<bool>(\"false\") == false);\n        DLIB_TEST(string_cast<bool>(\"TRUE\") == true);\n        DLIB_TEST(string_cast<bool>(\"FALSE\") == false);\n        DLIB_TEST((bval = sa = \"FALSE\") == false);\n\n        dlog << LTRACE << 2;\n\n        DLIB_TEST_MSG(string_cast<int>(L\"5\") == 5,string_cast<int>(\"5\"));\n        DLIB_TEST_MSG((ival = sa = L\"5\") == 5,string_cast<int>(\"5\"));\n        dlog << LTRACE << 2.1;\n        DLIB_TEST_MSG(string_cast<int>(L\"0x5\") == 5,string_cast<int>(\"0x5\"));\n        DLIB_TEST_MSG(string_cast<int>(L\"0xA\") == 10,string_cast<int>(\"0xA\"));\n        DLIB_TEST(string_cast<float>(L\"0.5\") == 0.5);\n        DLIB_TEST(string_cast<std::string>(L\"0.5 !\") == \"0.5 !\");\n        DLIB_TEST(string_cast<bool>(L\"true\") == true);\n        DLIB_TEST(string_cast<bool>(L\"false\") == false);\n        DLIB_TEST(string_cast<bool>(L\"TRUE\") == true);\n        DLIB_TEST((bval = sa = L\"TRUE\") == true);\n        DLIB_TEST(string_cast<bool>(L\"FALSE\") == false);\n\n        dlog << LTRACE << 3;\n\n        DLIB_TEST(cast_to_string(5) == \"5\");\n        DLIB_TEST(cast_to_string(5.5) == \"5.5\");\n\n        dlog << LTRACE << 4;\n        DLIB_TEST(cast_to_wstring(5) == L\"5\");\n        DLIB_TEST(cast_to_wstring(5.5) == L\"5.5\");\n        dlog << LTRACE << 5;\n        DLIB_TEST(toupper(a) == A);\n        DLIB_TEST(toupper(A) == A);\n        DLIB_TEST(tolower(a) == a);\n        DLIB_TEST(tolower(A) == a);\n        DLIB_TEST(trim(a) == \"davis\");\n        DLIB_TEST(ltrim(a) == \"davis  \");\n        DLIB_TEST(rtrim(a) == \"  davis\");\n        DLIB_TEST(trim(string_cast<wstring>(a)) == L\"davis\");\n        DLIB_TEST(ltrim(string_cast<wstring>(a)) == L\"davis  \");\n        DLIB_TEST(rtrim(string_cast<wstring>(a)) == L\"  davis\");\n        DLIB_TEST(trim(a, \" \") == \"davis\");\n        DLIB_TEST(ltrim(a, \" \") == \"davis  \");\n        DLIB_TEST(rtrim(a, \" \") == \"  davis\");\n        DLIB_TEST(trim(empty) == \"\");\n        DLIB_TEST(ltrim(empty) == \"\");\n        DLIB_TEST(rtrim(empty) == \"\");\n        DLIB_TEST(trim(string_cast<wstring>(empty)) == L\"\");\n        DLIB_TEST(ltrim(string_cast<wstring>(empty)) == L\"\");\n        DLIB_TEST(rtrim(string_cast<wstring>(empty)) == L\"\");\n        DLIB_TEST(trim(empty, \" \") == \"\");\n        DLIB_TEST(ltrim(empty, \" \") == \"\");\n        DLIB_TEST(rtrim(empty, \" \") == \"\");\n\n\n        dlog << LTRACE << 6;\n        DLIB_TEST( (lpad(wstring(L\"davis\"), 10) == L\"     davis\")); \n        DLIB_TEST( (rpad(wstring(L\"davis\"), 10) == L\"davis     \")); \n        DLIB_TEST( (pad(wstring(L\"davis\"), 10) ==  L\"  davis   \")); \n\n        DLIB_TEST( (lpad(string(\"davis\"), -10) == \"davis\")); \n        DLIB_TEST( (rpad(string(\"davis\"), -10) == \"davis\")); \n        DLIB_TEST( (pad(string(\"davis\"), -10) == \"davis\")); \n        DLIB_TEST( (lpad(string(\"davis\"), 10) == \"     davis\")); \n        DLIB_TEST( (rpad(string(\"davis\"), 10) == \"davis     \")); \n        DLIB_TEST( (pad(string(\"davis\"), 10) ==  \"  davis   \")); \n        DLIB_TEST( (lpad(string(\"davis\"), 10, string(\"*\")) == \"*****davis\")); \n        DLIB_TEST( (rpad(string(\"davis\"), 10, string(\"*\")) == \"davis*****\")); \n        DLIB_TEST( (pad(string(\"davis\"), 10, string(\"*\")) == \"**davis***\")); \n        DLIB_TEST( (lpad(string(\"davis\"), 10, string(\"_-\")) == \"_-_-_davis\")); \n        DLIB_TEST( (rpad(string(\"davis\"), 10, string(\"_-\")) == \"davis_-_-_\")); \n        DLIB_TEST( (pad(string(\"davis\"), 10, string(\"_-\")) == \"_-davis_-_\")); \n        DLIB_TEST( (lpad(string(\"davis\"), 10, string(\"willy wanka\")) == \"willydavis\")); \n        DLIB_TEST( (rpad(string(\"davis\"), 10, string(\"willy wanka\")) == \"daviswilly\")); \n        DLIB_TEST( (pad(string(\"davis\"), 10, string(\"willy wanka\")) == \"widaviswil\")); \n        DLIB_TEST( (lpad(string(\"davis\"), 10, \"*\")) == \"*****davis\"); \n        DLIB_TEST( (rpad(string(\"davis\"), 10, \"*\") == \"davis*****\")); \n        DLIB_TEST( (pad(string(\"davis\"), 10, \"*\") == \"**davis***\")); \n        DLIB_TEST( (lpad(string(\"davis\"), 10, \"_-\") == \"_-_-_davis\")); \n        DLIB_TEST( (rpad(string(\"davis\"), 10, \"_-\") == \"davis_-_-_\")); \n        DLIB_TEST( (pad(string(\"davis\"), 10, \"_-\") == \"_-davis_-_\")); \n        DLIB_TEST( (lpad(string(\"davis\"), 10, \"willy wanka\") == \"willydavis\")); \n        DLIB_TEST( (rpad(string(\"davis\"), 10, \"willy wanka\") == \"daviswilly\")); \n        DLIB_TEST( (pad(string(\"davis\"), 10, \"willy wanka\") == \"widaviswil\")); \n        dlog << LTRACE << 7;\n\n        a = \"file.txt\";\n        DLIB_TEST( (left_substr(a,string(\".\")) == \"file\"));\n        DLIB_TEST( (left_substr(a,\".\") == \"file\"));\n        DLIB_TEST( (right_substr(a,string(\".\")) == \"txt\"));\n        DLIB_TEST( (right_substr(a,\".\") == \"txt\"));\n\n        DLIB_TEST( (left_substr(a,\" \") == \"file.txt\"));\n        DLIB_TEST( (right_substr(a,\" \") == \"\"));\n\n        DLIB_TEST( (left_substr(a,\"\") == \"file.txt\"));\n        DLIB_TEST( (right_substr(a,\"\") == \"\"));\n\n        wstring ws = L\"file.txt\";\n        DLIB_TEST( (left_substr(ws,wstring(L\".\")) == L\"file\"));\n        DLIB_TEST_MSG( (left_substr(ws,L\".\") == L\"file\"), L\"\");\n        DLIB_TEST( (right_substr(ws,wstring(L\".\")) == L\"txt\"));\n        DLIB_TEST_MSG( (right_substr(ws,L\".\") == L\"txt\"), L\"\");\n\n\n        dlog << LTRACE << 8;\n        {\n            ostringstream sout;\n            wchar_t w = 85;\n            char c = 4;\n            serialize(w,sout);\n            serialize(c,sout);\n            w = static_cast<wchar_t>(-1);\n            serialize(w,sout);\n            c = static_cast<char>(-1);\n            serialize(c,sout);\n\n            istringstream sin(sout.str());\n            w = 0;\n            c = 0;\n            deserialize(w,sin);\n            deserialize(c,sin);\n            DLIB_TEST(w == 85);\n            DLIB_TEST(c == 4);\n            deserialize(w,sin);\n            deserialize(c,sin);\n            DLIB_TEST(w == static_cast<wchar_t>(-1));\n            DLIB_TEST(c == static_cast<char>(-1));\n\n            wstring str = L\"test string\";\n\n            sout.str(\"\");\n            serialize(str, sout);\n            sin.clear();\n            sin.str(sout.str());\n            str = L\"something else\";\n            deserialize(str,sin);\n            DLIB_TEST(str == L\"test string\");\n        }\n    }\n\n\n    void test_split()\n    {\n        std::vector<string> v;\n\n        string str;\n        string delim = \" , \";\n\n        v = split(string(\"one, two,three four\"),\" ,\");\n        DLIB_TEST(v.size() == 4);\n        DLIB_TEST(v[0] == \"one\");\n        DLIB_TEST(v[1] == \"two\");\n        DLIB_TEST(v[2] == \"three\");\n        DLIB_TEST(v[3] == \"four\");\n\n        v = split(string(\"one, two,three four\"),delim);\n        DLIB_TEST(v.size() == 4);\n        DLIB_TEST(v[0] == \"one\");\n        DLIB_TEST(v[1] == \"two\");\n        DLIB_TEST(v[2] == \"three\");\n        DLIB_TEST(v[3] == \"four\");\n\n        v = split(string(\"\"));\n        DLIB_TEST(v.size() == 0);\n\n        v = split(string(\"   \"));\n        DLIB_TEST(v.size() == 0);\n\n        v = split(string(\" one two  \"));\n        DLIB_TEST(v.size() == 2);\n        DLIB_TEST(v[0] == \"one\");\n        DLIB_TEST(v[1] == \"two\");\n\n        v = split(string(\" one   \"));\n        DLIB_TEST(v.size() == 1);\n        DLIB_TEST(v[0] == \"one\");\n\n        v = split(string(\"one\"));\n        DLIB_TEST(v.size() == 1);\n        DLIB_TEST(v[0] == \"one\");\n\n        v = split(string(\"o\"));\n        DLIB_TEST(v.size() == 1);\n        DLIB_TEST(v[0] == \"o\");\n\n\n        std::vector<wstring> wv;\n        wstring wstr = L\"test string\";\n        wv = split(wstr);\n        DLIB_TEST(wv.size() == 2);\n        DLIB_TEST(wv[0] == L\"test\");\n        DLIB_TEST(wv[1] == L\"string\");\n        wv = split(wstr,L\" \");\n        DLIB_TEST(wv.size() == 2);\n        DLIB_TEST(wv[0] == L\"test\");\n        DLIB_TEST(wv[1] == L\"string\");\n\n\n        wstr = L\"test string hah\";\n        DLIB_TEST(split_on_first(wstr).first == L\"test\");\n        DLIB_TEST(split_on_first(wstr).second == L\"string hah\");\n        DLIB_TEST(split_on_first(wstr,L\"#\").first == L\"test string hah\");\n        DLIB_TEST(split_on_first(wstr,L\"#\").second == L\"\");\n        DLIB_TEST(split_on_last(wstr).first == L\"test string\");\n        DLIB_TEST(split_on_last(wstr).second == L\"hah\");\n        DLIB_TEST(split_on_last(wstr,L\"#\").first == L\"test string hah\");\n        DLIB_TEST(split_on_last(wstr,L\"#\").second == L\"\");\n        wstr = L\"\";\n        DLIB_TEST(split_on_first(wstr).first == L\"\");\n        DLIB_TEST(split_on_first(wstr).second == L\"\");\n\n        str = \"test string hah\";\n        DLIB_TEST(split_on_first(str).first == \"test\");\n        DLIB_TEST(split_on_first(str).second == \"string hah\");\n        DLIB_TEST(split_on_first(str,\"#\").first == \"test string hah\");\n        DLIB_TEST(split_on_first(str,\"#\").second == \"\");\n        DLIB_TEST(split_on_last(str).first == \"test string\");\n        DLIB_TEST(split_on_last(str).second == \"hah\");\n        DLIB_TEST(split_on_last(str,\"#\").first == \"test string hah\");\n        DLIB_TEST(split_on_last(str,\"#\").second == \"\");\n        str = \"\";\n        DLIB_TEST(split_on_first(str).first == \"\");\n        DLIB_TEST(split_on_first(str).second == \"\");\n\n        wstr = L\"test.string.hah\";\n        DLIB_TEST(split_on_first(wstr,L\".\").first == L\"test\");\n        DLIB_TEST(split_on_first(wstr,L\".\").second == L\"string.hah\");\n        DLIB_TEST(split_on_first(wstr).first == L\"test.string.hah\");\n        DLIB_TEST(split_on_first(wstr).second == L\"\");\n        DLIB_TEST(split_on_last(wstr,L\".\").first == L\"test.string\");\n        DLIB_TEST(split_on_last(wstr,L\".\").second == L\"hah\");\n        DLIB_TEST(split_on_last(wstr).first == L\"test.string.hah\");\n        DLIB_TEST(split_on_last(wstr).second == L\"\");\n        wstr = L\"\";\n        DLIB_TEST(split_on_first(wstr).first == L\"\");\n        DLIB_TEST(split_on_first(wstr).second == L\"\");\n\n        str = \"test.string.hah\";\n        DLIB_TEST(split_on_first(str,\".\").first == \"test\");\n        DLIB_TEST(split_on_first(str,\".\").second == \"string.hah\");\n        DLIB_TEST(split_on_first(str).first == \"test.string.hah\");\n        DLIB_TEST(split_on_first(str).second == \"\");\n        DLIB_TEST(split_on_last(str,\".\").first == \"test.string\");\n        DLIB_TEST(split_on_last(str,\".\").second == \"hah\");\n        DLIB_TEST(split_on_last(str).first == \"test.string.hah\");\n        DLIB_TEST(split_on_last(str).second == \"\");\n        str = \"\";\n        DLIB_TEST(split_on_first(str).first == \"\");\n        DLIB_TEST(split_on_first(str).second == \"\");\n    }\n\n\n\n    class string_tester : public tester\n    {\n    public:\n        string_tester (\n        ) :\n            tester (\"test_string\",\n                    \"Runs tests on the string objects and functions.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            string_test();\n            test_split();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/svm.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n#include \"checkerboard.h\"\n#include <dlib/statistics.h>\n\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.svm\");\n\n// ----------------------------------------------------------------------------------------\n\n    void test_clutering (\n    )\n    {\n        dlog << LINFO << \"   being test_clutering()\";\n        // Here we declare that our samples will be 2 dimensional column vectors.  \n        typedef matrix<double,2,1> sample_type;\n\n        // Now we are making a typedef for the kind of kernel we want to use.  I picked the\n        // radial basis kernel because it only has one parameter and generally gives good\n        // results without much fiddling.\n        typedef radial_basis_kernel<sample_type> kernel_type;\n\n        // Here we declare an instance of the kcentroid object.  The first argument to the constructor\n        // is the kernel we wish to use.  The second is a parameter that determines the numerical \n        // accuracy with which the object will perform part of the learning algorithm.  Generally\n        // smaller values give better results but cause the algorithm to run slower.  You just have\n        // to play with it to decide what balance of speed and accuracy is right for your problem.\n        // Here we have set it to 0.01.\n        kcentroid<kernel_type> kc(kernel_type(0.1),0.01);\n\n        // Now we make an instance of the kkmeans object and tell it to use kcentroid objects\n        // that are configured with the parameters from the kc object we defined above.\n        kkmeans<kernel_type> test(kc);\n\n        std::vector<sample_type> samples;\n        std::vector<sample_type> initial_centers;\n\n        sample_type m;\n\n        dlib::rand rnd;\n\n        print_spinner();\n        // we will make 50 points from each class\n        const long num = 50;\n\n        // make some samples near the origin\n        double radius = 0.5;\n        for (long i = 0; i < num; ++i)\n        {\n            double sign = 1;\n            if (rnd.get_random_double() < 0.5)\n                sign = -1;\n            m(0) = 2*radius*rnd.get_random_double()-radius;\n            m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n            // add this sample to our set of samples we will run k-means \n            samples.push_back(m);\n        }\n\n        // make some samples in a circle around the origin but far away\n        radius = 10.0;\n        for (long i = 0; i < num; ++i)\n        {\n            double sign = 1;\n            if (rnd.get_random_double() < 0.5)\n                sign = -1;\n            m(0) = 2*radius*rnd.get_random_double()-radius;\n            m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n            // add this sample to our set of samples we will run k-means \n            samples.push_back(m);\n        }\n\n        // make some samples in a circle around the point (25,25) \n        radius = 4.0;\n        for (long i = 0; i < num; ++i)\n        {\n            double sign = 1;\n            if (rnd.get_random_double() < 0.5)\n                sign = -1;\n            m(0) = 2*radius*rnd.get_random_double()-radius;\n            m(1) = sign*sqrt(radius*radius - m(0)*m(0));\n\n            // translate this point away from the origin\n            m(0) += 25;\n            m(1) += 25;\n\n            // add this sample to our set of samples we will run k-means \n            samples.push_back(m);\n        }\n        print_spinner();\n\n        // tell the kkmeans object we made that we want to run k-means with k set to 3. \n        // (i.e. we want 3 clusters)\n        test.set_number_of_centers(3);\n\n        // You need to pick some initial centers for the k-means algorithm.  So here\n        // we will use the dlib::pick_initial_centers() function which tries to find\n        // n points that are far apart (basically).  \n        pick_initial_centers(3, initial_centers, samples, test.get_kernel());\n\n        print_spinner();\n        // now run the k-means algorithm on our set of samples.  \n        test.train(samples,initial_centers);\n        print_spinner();\n\n        const unsigned long class1 = test(samples[0]);\n        const unsigned long class2 = test(samples[num]);\n        const unsigned long class3 = test(samples[2*num]);\n        // now loop over all our samples and print out their predicted class.  In this example\n        // all points are correctly identified.\n        for (unsigned long i = 0; i < samples.size()/3; ++i)\n        {\n            DLIB_TEST(test(samples[i]) == class1);\n            DLIB_TEST(test(samples[i+num]) == class2);\n            DLIB_TEST(test(samples[i+2*num]) == class3);\n        }\n\n        dlog << LINFO << \"   end test_clutering()\";\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // Here is the sinc function we will be trying to learn with the krls\n    // object.\n    double sinc(double x)\n    {\n        if (x == 0)\n            return 1;\n        return sin(x)/x;\n    }\n\n\n    void test_regression (\n    )\n    {\n        dlog << LINFO << \"   being test_regression()\";\n        // Here we declare that our samples will be 1 dimensional column vectors.  The reason for\n        // using a matrix here is that in general you can use N dimensional vectors as inputs to the\n        // krls object.  But here we only have 1 dimension to make the example simple.\n        typedef matrix<double,1,1> sample_type;\n\n        // Now we are making a typedef for the kind of kernel we want to use.  I picked the\n        // radial basis kernel because it only has one parameter and generally gives good\n        // results without much fiddling.\n        typedef radial_basis_kernel<sample_type> kernel_type;\n\n        // Here we declare an instance of the krls object.  The first argument to the constructor\n        // is the kernel we wish to use.  The second is a parameter that determines the numerical \n        // accuracy with which the object will perform part of the regression algorithm.  Generally\n        // smaller values give better results but cause the algorithm to run slower.  You just have\n        // to play with it to decide what balance of speed and accuracy is right for your problem.\n        // Here we have set it to 0.001.\n        krls<kernel_type> test(kernel_type(0.1),0.001);\n        rvm_regression_trainer<kernel_type> rvm_test;\n        rvm_test.set_kernel(test.get_kernel());\n\n        krr_trainer<kernel_type> krr_test;\n        krr_test.set_kernel(test.get_kernel());\n\n        svr_trainer<kernel_type> svr_test;\n        svr_test.set_kernel(test.get_kernel());\n        svr_test.set_epsilon_insensitivity(0.0001);\n        svr_test.set_c(10);\n\n        rbf_network_trainer<kernel_type> rbf_test;\n        rbf_test.set_kernel(test.get_kernel());\n        rbf_test.set_num_centers(13);\n\n        print_spinner();\n        std::vector<sample_type> samples;\n        std::vector<sample_type> samples2;\n        std::vector<double> labels;\n        std::vector<double> labels2;\n        // now we train our object on a few samples of the sinc function.\n        sample_type m;\n        for (double x = -10; x <= 5; x += 0.6)\n        {\n            m(0) = x;\n            test.train(m, sinc(x));\n\n            samples.push_back(m);\n            samples2.push_back(m);\n            labels.push_back(sinc(x));\n            labels2.push_back(2);\n        }\n\n        print_spinner();\n        decision_function<kernel_type> test2 = rvm_test.train(samples, labels);\n        print_spinner();\n        decision_function<kernel_type> test3 = rbf_test.train(samples, labels);\n        print_spinner();\n        decision_function<kernel_type> test4 = krr_test.train(samples, labels);\n        print_spinner();\n        decision_function<kernel_type> test5 = svr_test.train(samples, labels);\n        print_spinner();\n\n        // now we output the value of the sinc function for a few test points as well as the \n        // value predicted by krls object.\n        m(0) = 2.5; dlog << LDEBUG << \"krls: \" << sinc(m(0)) << \"   \" << test(m); DLIB_TEST(abs(sinc(m(0)) - test(m)) < 0.01);\n        m(0) = 0.1; dlog << LDEBUG << \"krls: \" << sinc(m(0)) << \"   \" << test(m); DLIB_TEST(abs(sinc(m(0)) - test(m)) < 0.01);\n        m(0) = -4;  dlog << LDEBUG << \"krls: \" << sinc(m(0)) << \"   \" << test(m); DLIB_TEST(abs(sinc(m(0)) - test(m)) < 0.01);\n        m(0) = 5.0; dlog << LDEBUG << \"krls: \" << sinc(m(0)) << \"   \" << test(m); DLIB_TEST(abs(sinc(m(0)) - test(m)) < 0.01);\n\n        m(0) = 2.5; dlog << LDEBUG << \"rvm: \" << sinc(m(0)) << \"   \" << test2(m); DLIB_TEST(abs(sinc(m(0)) - test2(m)) < 0.01);\n        m(0) = 0.1; dlog << LDEBUG << \"rvm: \" << sinc(m(0)) << \"   \" << test2(m); DLIB_TEST(abs(sinc(m(0)) - test2(m)) < 0.01);\n        m(0) = -4;  dlog << LDEBUG << \"rvm: \" << sinc(m(0)) << \"   \" << test2(m); DLIB_TEST(abs(sinc(m(0)) - test2(m)) < 0.01);\n        m(0) = 5.0; dlog << LDEBUG << \"rvm: \" << sinc(m(0)) << \"   \" << test2(m); DLIB_TEST(abs(sinc(m(0)) - test2(m)) < 0.01);\n\n        m(0) = 2.5; dlog << LDEBUG << \"rbf: \" << sinc(m(0)) << \"   \" << test3(m); DLIB_TEST(abs(sinc(m(0)) - test3(m)) < 0.01);\n        m(0) = 0.1; dlog << LDEBUG << \"rbf: \" << sinc(m(0)) << \"   \" << test3(m); DLIB_TEST(abs(sinc(m(0)) - test3(m)) < 0.01);\n        m(0) = -4;  dlog << LDEBUG << \"rbf: \" << sinc(m(0)) << \"   \" << test3(m); DLIB_TEST(abs(sinc(m(0)) - test3(m)) < 0.01);\n        m(0) = 5.0; dlog << LDEBUG << \"rbf: \" << sinc(m(0)) << \"   \" << test3(m); DLIB_TEST(abs(sinc(m(0)) - test3(m)) < 0.01);\n\n        m(0) = 2.5; dlog << LDEBUG << \"krr: \" << sinc(m(0)) << \"   \" << test4(m); DLIB_TEST(abs(sinc(m(0)) - test4(m)) < 0.01);\n        m(0) = 0.1; dlog << LDEBUG << \"krr: \" << sinc(m(0)) << \"   \" << test4(m); DLIB_TEST(abs(sinc(m(0)) - test4(m)) < 0.01);\n        m(0) = -4;  dlog << LDEBUG << \"krr: \" << sinc(m(0)) << \"   \" << test4(m); DLIB_TEST(abs(sinc(m(0)) - test4(m)) < 0.01);\n        m(0) = 5.0; dlog << LDEBUG << \"krr: \" << sinc(m(0)) << \"   \" << test4(m); DLIB_TEST(abs(sinc(m(0)) - test4(m)) < 0.01);\n\n        m(0) = 2.5; dlog << LDEBUG << \"svr: \" << sinc(m(0)) << \"   \" << test5(m); DLIB_TEST(abs(sinc(m(0)) - test5(m)) < 0.01);\n        m(0) = 0.1; dlog << LDEBUG << \"svr: \" << sinc(m(0)) << \"   \" << test5(m); DLIB_TEST(abs(sinc(m(0)) - test5(m)) < 0.01);\n        m(0) = -4;  dlog << LDEBUG << \"svr: \" << sinc(m(0)) << \"   \" << test5(m); DLIB_TEST(abs(sinc(m(0)) - test5(m)) < 0.01);\n        m(0) = 5.0; dlog << LDEBUG << \"svr: \" << sinc(m(0)) << \"   \" << test5(m); DLIB_TEST(abs(sinc(m(0)) - test5(m)) < 0.01);\n\n\n        randomize_samples(samples, labels);\n        dlog << LINFO << \"KRR MSE and R-squared: \"<< cross_validate_regression_trainer(krr_test, samples, labels, 6);\n        dlog << LINFO << \"SVR MSE and R-squared: \"<< cross_validate_regression_trainer(svr_test, samples, labels, 6);\n        matrix<double,1,2> cv = cross_validate_regression_trainer(krr_test, samples, labels, 6);\n        DLIB_TEST(cv(0) < 1e-4);\n        DLIB_TEST(cv(1) > 0.99);\n        cv = cross_validate_regression_trainer(svr_test, samples, labels, 6);\n        DLIB_TEST(cv(0) < 1e-4);\n        DLIB_TEST(cv(1) > 0.99);\n\n\n\n\n        randomize_samples(samples2, labels2);\n        dlog << LINFO << \"KRR MSE and R-squared: \"<< cross_validate_regression_trainer(krr_test, samples2, labels2, 6);\n        dlog << LINFO << \"SVR MSE and R-squared: \"<< cross_validate_regression_trainer(svr_test, samples2, labels2, 6);\n        cv = cross_validate_regression_trainer(krr_test, samples2, labels2, 6);\n        DLIB_TEST(cv(0) < 1e-4);\n        cv = cross_validate_regression_trainer(svr_test, samples2, labels2, 6);\n        DLIB_TEST(cv(0) < 1e-4);\n\n        dlog << LINFO << \"   end test_regression()\";\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_anomaly_detection (\n    ) \n    {\n        dlog << LINFO << \"   begin test_anomaly_detection()\";\n        // Here we declare that our samples will be 2 dimensional column vectors.  \n        typedef matrix<double,2,1> sample_type;\n\n        // Now we are making a typedef for the kind of kernel we want to use.  I picked the\n        // radial basis kernel because it only has one parameter and generally gives good\n        // results without much fiddling.\n        typedef radial_basis_kernel<sample_type> kernel_type;\n\n        // Here we declare an instance of the kcentroid object.  The first argument to the constructor\n        // is the kernel we wish to use.  The second is a parameter that determines the numerical \n        // accuracy with which the object will perform part of the learning algorithm.  Generally\n        // smaller values give better results but cause the algorithm to run slower.  You just have\n        // to play with it to decide what balance of speed and accuracy is right for your problem.\n        // Here we have set it to 0.01.\n        kcentroid<kernel_type> test(kernel_type(0.1),0.01);\n\n\n        svm_one_class_trainer<kernel_type> one_class_trainer;\n        one_class_trainer.set_nu(0.4);\n        one_class_trainer.set_kernel(kernel_type(0.2));\n\n        std::vector<sample_type> samples;\n\n        // now we train our object on a few samples of the sinc function.\n        sample_type m;\n        for (double x = -15; x <= 8; x += 1)\n        {\n            m(0) = x;\n            m(1) = sinc(x);\n            test.train(m);\n            samples.push_back(m);\n        }\n\n        decision_function<kernel_type> df = one_class_trainer.train(samples);\n\n        running_stats<double> rs;\n\n        // Now lets output the distance from the centroid to some points that are from the sinc function.\n        // These numbers should all be similar.  We will also calculate the statistics of these numbers\n        // by accumulating them into the running_stats object called rs.  This will let us easily\n        // find the mean and standard deviation of the distances for use below.\n        dlog << LDEBUG << \"Points that are on the sinc function:\\n\";\n        m(0) = -1.5; m(1) = sinc(m(0)); dlog << LDEBUG << \"   \" << test(m);  rs.add(test(m));\n        m(0) = -1.5; m(1) = sinc(m(0)); dlog << LDEBUG << \"   \" << test(m);  rs.add(test(m));\n        m(0) = -0;   m(1) = sinc(m(0)); dlog << LDEBUG << \"   \" << test(m);  rs.add(test(m));\n        m(0) = -0.5; m(1) = sinc(m(0)); dlog << LDEBUG << \"   \" << test(m);  rs.add(test(m));\n        m(0) = -4.1; m(1) = sinc(m(0)); dlog << LDEBUG << \"   \" << test(m);  rs.add(test(m));\n        m(0) = -1.5; m(1) = sinc(m(0)); dlog << LDEBUG << \"   \" << test(m);  rs.add(test(m));\n        m(0) = -0.5; m(1) = sinc(m(0)); dlog << LDEBUG << \"   \" << test(m);  rs.add(test(m));\n\n        m(0) = -1.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(rs.scale(test(m)) < 2, rs.scale(test(m)));\n        m(0) = -1.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(rs.scale(test(m)) < 2, rs.scale(test(m)));\n        m(0) = -0;   m(1) = sinc(m(0)); DLIB_TEST_MSG(rs.scale(test(m)) < 2, rs.scale(test(m)));\n        m(0) = -0.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(rs.scale(test(m)) < 2, rs.scale(test(m)));\n        m(0) = -4.1; m(1) = sinc(m(0)); DLIB_TEST_MSG(rs.scale(test(m)) < 2, rs.scale(test(m)));\n        m(0) = -1.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(rs.scale(test(m)) < 2, rs.scale(test(m)));\n        m(0) = -0.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(rs.scale(test(m)) < 2, rs.scale(test(m)));\n\n        const double thresh = 0.01;\n        m(0) = -1.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(df(m)+thresh > 0, df(m));\n        m(0) = -1.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(df(m)+thresh > 0, df(m));\n        m(0) = -0;   m(1) = sinc(m(0)); DLIB_TEST_MSG(df(m)+thresh > 0, df(m));\n        m(0) = -0.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(df(m)+thresh > 0, df(m));\n        m(0) = -4.1; m(1) = sinc(m(0)); DLIB_TEST_MSG(df(m)+thresh > 0, df(m));\n        m(0) = -1.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(df(m)+thresh > 0, df(m));\n        m(0) = -0.5; m(1) = sinc(m(0)); DLIB_TEST_MSG(df(m)+thresh > 0, df(m));\n\n        dlog << LDEBUG;\n        // Lets output the distance from the centroid to some points that are NOT from the sinc function.\n        // These numbers should all be significantly bigger than previous set of numbers.  We will also\n        // use the rs.scale() function to find out how many standard deviations they are away from the \n        // mean of the test points from the sinc function.  So in this case our criterion for \"significantly bigger\"\n        // is > 3 or 4 standard deviations away from the above points that actually are on the sinc function.\n        dlog << LDEBUG << \"Points that are NOT on the sinc function:\\n\";\n        m(0) = -1.5; m(1) = sinc(m(0))+4;   \n        dlog << LDEBUG << \"   \" << test(m) << \" is \" << rs.scale(test(m)) << \" standard deviations from sinc.\";\n        DLIB_TEST_MSG(rs.scale(test(m)) > 6, rs.scale(test(m)));\n        DLIB_TEST_MSG(df(m) + thresh < 0, df(m));\n\n        m(0) = -1.5; m(1) = sinc(m(0))+3;   \n        dlog << LDEBUG << \"   \" << test(m) << \" is \" << rs.scale(test(m)) << \" standard deviations from sinc.\";\n        DLIB_TEST_MSG(rs.scale(test(m)) > 6, rs.scale(test(m)));\n        DLIB_TEST_MSG(df(m) + thresh < 0, df(m));\n\n        m(0) = -0;   m(1) = -sinc(m(0));    \n        dlog << LDEBUG << \"   \" << test(m) << \" is \" << rs.scale(test(m)) << \" standard deviations from sinc.\";\n        DLIB_TEST_MSG(rs.scale(test(m)) > 6, rs.scale(test(m)));\n        DLIB_TEST_MSG(df(m) + thresh < 0, df(m));\n\n        m(0) = -0.5; m(1) = -sinc(m(0));    \n        dlog << LDEBUG << \"   \" << test(m) << \" is \" << rs.scale(test(m)) << \" standard deviations from sinc.\";\n        DLIB_TEST_MSG(rs.scale(test(m)) > 6, rs.scale(test(m)));\n        DLIB_TEST_MSG(df(m) + thresh < 0, df(m));\n\n        m(0) = -4.1; m(1) = sinc(m(0))+2;   \n        dlog << LDEBUG << \"   \" << test(m) << \" is \" << rs.scale(test(m)) << \" standard deviations from sinc.\";\n        DLIB_TEST_MSG(rs.scale(test(m)) > 6, rs.scale(test(m)));\n        DLIB_TEST_MSG(df(m) + thresh < 0, df(m));\n\n        m(0) = -1.5; m(1) = sinc(m(0))+0.9; \n        dlog << LDEBUG << \"   \" << test(m) << \" is \" << rs.scale(test(m)) << \" standard deviations from sinc.\";\n        DLIB_TEST_MSG(rs.scale(test(m)) > 6, rs.scale(test(m)));\n        DLIB_TEST_MSG(df(m) + thresh < 0, df(m));\n\n        m(0) = -0.5; m(1) = sinc(m(0))+1;   \n        dlog << LDEBUG << \"   \" << test(m) << \" is \" << rs.scale(test(m)) << \" standard deviations from sinc.\";\n        DLIB_TEST_MSG(rs.scale(test(m)) > 6, rs.scale(test(m)));\n        DLIB_TEST_MSG(df(m) + thresh < 0, df(m));\n\n        dlog << LINFO << \"   end test_anomaly_detection()\";\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void unittest_binary_classification (\n    )\n    /*!\n        ensures\n            - runs tests on the svm stuff compliance with the specs\n    !*/\n    {        \n        dlog << LINFO << \"   begin unittest_binary_classification()\";\n        print_spinner();\n\n\n        typedef double scalar_type;\n        typedef matrix<scalar_type,2,1> sample_type;\n\n        std::vector<sample_type> x;\n        std::vector<matrix<double,0,1> > x_linearized;\n        std::vector<scalar_type> y;\n\n        get_checkerboard_problem(x,y, 300, 2);\n        const scalar_type gamma = 1;\n\n        typedef radial_basis_kernel<sample_type> kernel_type;\n\n        rbf_network_trainer<kernel_type> rbf_trainer;\n        rbf_trainer.set_kernel(kernel_type(gamma));\n        rbf_trainer.set_num_centers(100);\n\n        rvm_trainer<kernel_type> rvm_trainer;\n        rvm_trainer.set_kernel(kernel_type(gamma));\n\n        krr_trainer<kernel_type> krr_trainer;\n        krr_trainer.use_classification_loss_for_loo_cv();\n        krr_trainer.set_kernel(kernel_type(gamma));\n\n        svm_pegasos<kernel_type> pegasos_trainer;\n        pegasos_trainer.set_kernel(kernel_type(gamma));\n        pegasos_trainer.set_lambda(0.00001);\n\n\n        svm_c_ekm_trainer<kernel_type> ocas_ekm_trainer;\n        ocas_ekm_trainer.set_kernel(kernel_type(gamma));\n        ocas_ekm_trainer.set_c(100000);\n\n        svm_nu_trainer<kernel_type> trainer;\n        trainer.set_kernel(kernel_type(gamma));\n        trainer.set_nu(0.05);\n\n        svm_c_trainer<kernel_type> c_trainer;\n        c_trainer.set_kernel(kernel_type(gamma));\n        c_trainer.set_c(100);\n\n        svm_c_linear_trainer<linear_kernel<matrix<double,0,1> > > lin_trainer;\n        lin_trainer.set_c(100000);\n        // use an ekm to linearize this dataset so we can use it with the lin_trainer\n        empirical_kernel_map<kernel_type> ekm;\n        ekm.load(kernel_type(gamma), x);\n        for (unsigned long i = 0; i < x.size(); ++i)\n            x_linearized.push_back(ekm.project(x[i]));\n\n\n        print_spinner();\n        matrix<scalar_type> rvm_cv = cross_validate_trainer_threaded(rvm_trainer, x,y, 4, 2);\n        print_spinner();\n        matrix<scalar_type> krr_cv = cross_validate_trainer_threaded(krr_trainer, x,y, 4, 2);\n        print_spinner();\n        matrix<scalar_type> svm_cv = cross_validate_trainer(trainer, x,y, 4);\n        print_spinner();\n        matrix<scalar_type> svm_c_cv = cross_validate_trainer(c_trainer, x,y, 4);\n        print_spinner();\n        matrix<scalar_type> rbf_cv = cross_validate_trainer_threaded(rbf_trainer, x,y, 10, 2);\n        print_spinner();\n        matrix<scalar_type> lin_cv = cross_validate_trainer_threaded(lin_trainer, x_linearized, y, 4, 2);\n        print_spinner();\n        matrix<scalar_type> ocas_ekm_cv = cross_validate_trainer_threaded(ocas_ekm_trainer, x, y, 4, 2);\n        print_spinner();\n        ocas_ekm_trainer.set_basis(randomly_subsample(x, 300));\n        matrix<scalar_type> ocas_ekm_cv2 = cross_validate_trainer_threaded(ocas_ekm_trainer, x, y, 4, 2);\n        print_spinner();\n        matrix<scalar_type> peg_cv = cross_validate_trainer_threaded(batch(pegasos_trainer,1.0), x,y, 4, 2);\n        print_spinner();\n        matrix<scalar_type> peg_c_cv = cross_validate_trainer_threaded(batch_cached(pegasos_trainer,1.0), x,y, 4, 2);\n        print_spinner();\n\n        dlog << LDEBUG << \"rvm cv:        \" << rvm_cv;\n        dlog << LDEBUG << \"krr cv:        \" << krr_cv;\n        dlog << LDEBUG << \"nu-svm cv:     \" << svm_cv;\n        dlog << LDEBUG << \"C-svm cv:      \" << svm_c_cv;\n        dlog << LDEBUG << \"rbf cv:        \" << rbf_cv;\n        dlog << LDEBUG << \"lin cv:        \" << lin_cv;\n        dlog << LDEBUG << \"ocas_ekm cv:   \" << ocas_ekm_cv;\n        dlog << LDEBUG << \"ocas_ekm cv2:  \" << ocas_ekm_cv2;\n        dlog << LDEBUG << \"peg cv:        \" << peg_cv;\n        dlog << LDEBUG << \"peg cached cv: \" << peg_c_cv;\n\n        // make sure the cached version of pegasos computes the same result\n        DLIB_TEST_MSG(sum(abs(peg_cv - peg_c_cv)) < std::sqrt(std::numeric_limits<double>::epsilon()),\n                      sum(abs(peg_cv - peg_c_cv)) << \"   \\n\" << peg_cv << peg_c_cv  );\n\n        DLIB_TEST_MSG(mean(rvm_cv) > 0.9, rvm_cv);\n        DLIB_TEST_MSG(mean(krr_cv) > 0.9, krr_cv);\n        DLIB_TEST_MSG(mean(svm_cv) > 0.9, svm_cv);\n        DLIB_TEST_MSG(mean(svm_c_cv) > 0.9, svm_c_cv);\n        DLIB_TEST_MSG(mean(rbf_cv) > 0.9, rbf_cv);\n        DLIB_TEST_MSG(mean(lin_cv) > 0.9, lin_cv);\n        DLIB_TEST_MSG(mean(peg_cv) > 0.9, peg_cv);\n        DLIB_TEST_MSG(mean(peg_c_cv) > 0.9, peg_c_cv);\n        DLIB_TEST_MSG(mean(ocas_ekm_cv) > 0.9, ocas_ekm_cv);\n        DLIB_TEST_MSG(mean(ocas_ekm_cv2) > 0.9, ocas_ekm_cv2);\n\n        const long num_sv = trainer.train(x,y).basis_vectors.size();\n        print_spinner();\n        const long num_rv = rvm_trainer.train(x,y).basis_vectors.size();\n        print_spinner();\n        dlog << LDEBUG << \"num sv: \" << num_sv;\n        dlog << LDEBUG << \"num rv: \" << num_rv;\n        print_spinner();\n        ocas_ekm_trainer.clear_basis();\n        const long num_bv = ocas_ekm_trainer.train(x,y).basis_vectors.size();\n        dlog << LDEBUG << \"num ekm bv: \" << num_bv;\n\n        DLIB_TEST(num_rv <= 17);\n        DLIB_TEST_MSG(num_sv <= 45, num_sv);\n        DLIB_TEST_MSG(num_bv <= 45, num_bv);\n\n        decision_function<kernel_type> df = reduced2(trainer, 19).train(x,y);\n        print_spinner();\n\n        matrix<scalar_type> svm_reduced_error = test_binary_decision_function(df, x, y);\n        print_spinner();\n        dlog << LDEBUG << \"svm reduced test error: \" << svm_reduced_error;\n        dlog << LDEBUG << \"svm reduced num sv: \" << df.basis_vectors.size();\n        DLIB_TEST(mean(svm_reduced_error) > 0.9);\n\n        svm_cv = cross_validate_trainer(reduced(trainer,30), x,y, 4);\n        dlog << LDEBUG << \"svm reduced cv: \" << svm_cv;\n        DLIB_TEST_MSG(mean(svm_cv) > 0.9, svm_cv);\n\n        DLIB_TEST(df.basis_vectors.size() <= 19);\n        dlog << LINFO << \"   end unittest_binary_classification()\";\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename kernel_type>\n    struct kernel_der_obj\n    {\n        typename kernel_type::sample_type x;\n        kernel_type k;\n\n        double operator()(const typename kernel_type::sample_type& y) const { return k(x,y); }\n    };\n\n\n    template <typename kernel_type>\n    void test_kernel_derivative (\n        const kernel_type& k,\n        const typename kernel_type::sample_type& x, \n        const typename kernel_type::sample_type& y \n    )\n    {\n        kernel_der_obj<kernel_type> obj;\n        obj.x = x;\n        obj.k = k;\n        kernel_derivative<kernel_type> der(obj.k);\n        DLIB_TEST(dlib::equal(derivative(obj)(y) , der(obj.x,y), 1e-5));\n    }\n\n    void test_kernel_derivative (\n    )\n    {\n        typedef matrix<double, 2, 1> sample_type;\n\n        sigmoid_kernel<sample_type> k1;\n        radial_basis_kernel<sample_type> k2;\n        linear_kernel<sample_type> k3;\n        polynomial_kernel<sample_type> k4(2,3,4);\n\n        offset_kernel<sigmoid_kernel<sample_type> > k5;\n        offset_kernel<radial_basis_kernel<sample_type> > k6;\n\n        dlib::rand rnd;\n\n        sample_type x, y;\n        for (int i = 0; i < 10; ++i)\n        {\n            x = randm(2,1,rnd);\n            y = randm(2,1,rnd);\n            test_kernel_derivative(k1, x, y);\n            test_kernel_derivative(k2, x, y);\n            test_kernel_derivative(k3, x, y);\n            test_kernel_derivative(k4, x, y);\n            test_kernel_derivative(k5, x, y);\n            test_kernel_derivative(k6, x, y);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_svm_trainer2()\n    {\n        typedef matrix<double, 2, 1> sample_type;\n        typedef linear_kernel<sample_type> kernel_type;\n\n\n        std::vector<sample_type> samples;\n        std::vector<double> labels;\n\n        sample_type samp;\n        samp(0) = 1;\n        samp(1) = 1;\n        samples.push_back(samp);\n        labels.push_back(+1);\n\n        samp(0) = 1;\n        samp(1) = 2;\n        samples.push_back(samp);\n        labels.push_back(-1);\n\n        svm_c_trainer<kernel_type> trainer;\n\n        decision_function<kernel_type> df = trainer.train(samples, labels);\n\n        samp(0) = 1;\n        samp(1) = 1;\n        dlog << LINFO << \"test +1 : \"<< df(samp);\n        DLIB_TEST(df(samp) > 0);\n        samp(0) = 1;\n        samp(1) = 2;\n        dlog << LINFO << \"test -1 : \"<< df(samp);\n        DLIB_TEST(df(samp) < 0);\n\n        svm_nu_trainer<kernel_type> trainer2;\n        df = trainer2.train(samples, labels);\n\n        samp(0) = 1;\n        samp(1) = 1;\n        dlog << LINFO << \"test +1 : \"<< df(samp);\n        DLIB_TEST(df(samp) > 0);\n        samp(0) = 1;\n        samp(1) = 2;\n        dlog << LINFO << \"test -1 : \"<< df(samp);\n        DLIB_TEST(df(samp) < 0);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class svm_tester : public tester\n    {\n    public:\n        svm_tester (\n        ) :\n            tester (\"test_svm\",\n                    \"Runs tests on the svm/kernel algorithm components.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_kernel_derivative();\n            unittest_binary_classification();\n            test_clutering();\n            test_regression();\n            test_anomaly_detection();\n            test_svm_trainer2();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/svm_c_linear.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../stl_checked.h\"\n#include \"../array.h\"\n#include \"../rand.h\"\n#include \"checkerboard.h\"\n#include <dlib/statistics.h>\n\n#include \"tester.h\"\n#include <dlib/svm.h>\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.svm_c_linear\");\n\n    typedef matrix<double, 0, 1> sample_type;\n    typedef std::vector<std::pair<unsigned int, double> > sparse_sample_type;\n\n// ----------------------------------------------------------------------------------------\n\n    void run_prior_test()\n    {\n        typedef matrix<double,3,1> sample_type;\n        typedef linear_kernel<sample_type> kernel_type;\n\n        svm_c_linear_trainer<kernel_type> trainer;\n\n        std::vector<sample_type> samples;\n        std::vector<double> labels;\n\n        sample_type samp;\n        samp = 0, 0, 1; samples.push_back(samp); labels.push_back(+1);\n        samp = 0, 1, 0; samples.push_back(samp); labels.push_back(-1);\n\n        trainer.set_c(10);\n        decision_function<kernel_type> df = trainer.train(samples, labels);\n\n        trainer.set_prior(df);\n\n        samples.clear();\n        labels.clear();\n        samp = 1, 0, 0; samples.push_back(samp); labels.push_back(+1);\n        samp = 0, 1, 0; samples.push_back(samp); labels.push_back(-1);\n\n        df = trainer.train(samples, labels);\n\n        samp = 0, 0, 1; samples.push_back(samp); labels.push_back(+1);\n        matrix<double,1,2> rs = test_binary_decision_function(df, samples, labels);\n        dlog << LINFO << rs;\n        DLIB_TEST(rs(0) == 1);\n        DLIB_TEST(rs(1) == 1);\n\n        dlog << LINFO << trans(df.basis_vectors(0));\n        DLIB_TEST(df.basis_vectors(0)(0) > 0);\n        DLIB_TEST(df.basis_vectors(0)(1) < 0);\n        DLIB_TEST(df.basis_vectors(0)(2) > 0);\n    }\n\n    void run_prior_sparse_test()\n    {\n        typedef std::map<unsigned long,double> sample_type;\n        typedef sparse_linear_kernel<sample_type> kernel_type;\n\n        svm_c_linear_trainer<kernel_type> trainer;\n\n        std::vector<sample_type> samples;\n        std::vector<double> labels;\n\n        sample_type samp;\n        samp[0] = 1; samples.push_back(samp); labels.push_back(+1); samp.clear();\n        samp[1] = 1; samples.push_back(samp); labels.push_back(-1); samp.clear();\n\n        trainer.set_c(10);\n        decision_function<kernel_type> df = trainer.train(samples, labels);\n\n        trainer.set_prior(df);\n\n        samples.clear();\n        labels.clear();\n        samp[2] = 1; samples.push_back(samp); labels.push_back(+1); samp.clear();\n        samp[1] = 1; samples.push_back(samp); labels.push_back(-1); samp.clear();\n\n        df = trainer.train(samples, labels);\n\n        matrix<double,1,2> rs = test_binary_decision_function(df, samples, labels);\n        dlog << LINFO << rs;\n        DLIB_TEST(rs(0) == 1);\n        DLIB_TEST(rs(1) == 1);\n\n        matrix<double,0,1> w = sparse_to_dense(df.basis_vectors(0));\n        dlog << LINFO << trans(w);\n        DLIB_TEST(w(0) > 0.1);\n        DLIB_TEST(w(1) < -0.1);\n        DLIB_TEST(w(2) > 0.1);\n    }\n\n    void get_simple_points (\n        std::vector<sample_type>& samples,\n        std::vector<double>& labels\n    )\n    {\n        samples.clear();\n        labels.clear();\n        sample_type samp(2);\n\n        samp = 0,0;\n        samples.push_back(samp);\n        labels.push_back(-1);\n\n        samp = 0,1;\n        samples.push_back(samp);\n        labels.push_back(-1);\n\n        samp = 3,0;\n        samples.push_back(samp);\n        labels.push_back(+1);\n\n        samp = 3,1;\n        samples.push_back(samp);\n        labels.push_back(+1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void get_simple_points_sparse (\n        std::vector<sparse_sample_type>& samples,\n        std::vector<double>& labels\n    )\n    {\n        samples.clear();\n        labels.clear();\n        sparse_sample_type samp;\n\n        samp.push_back(make_pair(0, 0.0));\n        samp.push_back(make_pair(1, 0.0));\n        samples.push_back(samp);\n        labels.push_back(-1);\n\n        samp.clear();\n        samp.push_back(make_pair(0, 0.0));\n        samp.push_back(make_pair(1, 1.0));\n        samples.push_back(samp);\n        labels.push_back(-1);\n\n        samp.clear();\n        samp.push_back(make_pair(0, 3.0));\n        samp.push_back(make_pair(1, 0.0));\n        samples.push_back(samp);\n        labels.push_back(+1);\n\n        samp.clear();\n        samp.push_back(make_pair(0, 3.0));\n        samp.push_back(make_pair(1, 1.0));\n        samples.push_back(samp);\n        labels.push_back(+1);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_sparse (\n    )\n    {\n        print_spinner();\n        dlog << LINFO << \"test with sparse vectors\";\n        std::vector<sparse_sample_type> samples;\n        std::vector<double> labels;\n\n        sample_type samp;\n\n        get_simple_points_sparse(samples,labels);\n\n        svm_c_linear_trainer<sparse_linear_kernel<sparse_sample_type> > trainer;\n        trainer.set_c(1e4);\n        //trainer.be_verbose();\n        trainer.set_epsilon(1e-11);\n\n\n        double obj;\n        decision_function<sparse_linear_kernel<sparse_sample_type> > df = trainer.train(samples, labels, obj);\n        dlog << LDEBUG << \"obj: \"<< obj;\n        DLIB_TEST_MSG(abs(obj - 0.72222222222) < 1e-7, obj);\n\n        DLIB_TEST(abs(df(samples[0]) - (-1)) < 1e-6);\n        DLIB_TEST(abs(df(samples[1]) - (-1)) < 1e-6);\n        DLIB_TEST(abs(df(samples[2]) - (1)) < 1e-6);\n        DLIB_TEST(abs(df(samples[3]) - (1)) < 1e-6);\n\n\n        // While we are at it, make sure the krr_trainer works with sparse samples\n        krr_trainer<sparse_linear_kernel<sparse_sample_type> > krr;\n\n        df = krr.train(samples, labels);\n        DLIB_TEST(abs(df(samples[0]) - (-1)) < 1e-6);\n        DLIB_TEST(abs(df(samples[1]) - (-1)) < 1e-6);\n        DLIB_TEST(abs(df(samples[2]) - (1)) < 1e-6);\n        DLIB_TEST(abs(df(samples[3]) - (1)) < 1e-6);\n\n\n        // Now test some of the sparse helper functions\n        DLIB_TEST(max_index_plus_one(samples) == 2);\n        DLIB_TEST(max_index_plus_one(samples[0]) == 2);\n\n        matrix<double,3,1> m;\n        m = 1;\n        add_to(m, samples[3]);\n        DLIB_TEST(m(0) == 1 + samples[3][0].second);\n        DLIB_TEST(m(1) == 1 + samples[3][1].second);\n        DLIB_TEST(m(2) == 1);\n\n        m = 1;\n        subtract_from(m, samples[3]);\n        DLIB_TEST(m(0) == 1 - samples[3][0].second);\n        DLIB_TEST(m(1) == 1 - samples[3][1].second);\n        DLIB_TEST(m(2) == 1);\n\n        m = 1;\n        add_to(m, samples[3], 2);\n        DLIB_TEST(m(0) == 1 + 2*samples[3][0].second);\n        DLIB_TEST(m(1) == 1 + 2*samples[3][1].second);\n        DLIB_TEST(m(2) == 1);\n\n        m = 1;\n        subtract_from(m, samples[3], 2);\n        DLIB_TEST(m(0) == 1 - 2*samples[3][0].second);\n        DLIB_TEST(m(1) == 1 - 2*samples[3][1].second);\n        DLIB_TEST(m(2) == 1);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_dense (\n    )\n    {\n        print_spinner();\n        dlog << LINFO << \"test with dense vectors\";\n        std::vector<sample_type> samples;\n        std::vector<double> labels;\n\n        sample_type samp;\n\n        get_simple_points(samples,labels);\n\n        svm_c_linear_trainer<linear_kernel<sample_type> > trainer;\n        trainer.set_c(1e4);\n        //trainer.be_verbose();\n        trainer.set_epsilon(1e-11);\n\n\n        double obj;\n        decision_function<linear_kernel<sample_type> > df = trainer.train(samples, labels, obj);\n        dlog << LDEBUG << \"obj: \"<< obj;\n        DLIB_TEST_MSG(abs(obj - 0.72222222222) < 1e-7, abs(obj - 0.72222222222));\n        // There shouldn't be any margin violations since this dataset is so trivial.  So that means the objective\n        // should be exactly the squared norm of the decision plane (times 0.5).\n        DLIB_TEST_MSG(abs(length_squared(df.basis_vectors(0))*0.5 + df.b*df.b*0.5 - 0.72222222222) < 1e-7, \n                      length_squared(df.basis_vectors(0))*0.5 + df.b*df.b*0.5);\n\n        DLIB_TEST(abs(df(samples[0]) - (-1)) < 1e-6);\n        DLIB_TEST(abs(df(samples[1]) - (-1)) < 1e-6);\n        DLIB_TEST(abs(df(samples[2]) - (1)) < 1e-6);\n        DLIB_TEST(abs(df(samples[3]) - (1)) < 1e-6);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class tester_svm_c_linear : public tester\n    {\n    public:\n        tester_svm_c_linear (\n        ) :\n            tester (\"test_svm_c_linear\",\n                    \"Runs tests on the svm_c_linear_trainer.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_dense();\n            test_sparse();\n            run_prior_test();\n            run_prior_sparse_test();\n\n            // test mixed sparse and dense dot products\n            {\n                std::map<unsigned int, double> sv;\n                matrix<double,0,1> dv(4);\n\n                dv = 1,2,3,4;\n\n                sv[0] = 1;\n                sv[3] = 1;\n\n\n                DLIB_TEST(dot(sv,dv) == 5);\n                DLIB_TEST(dot(dv,sv) == 5);\n                DLIB_TEST(dot(dv,dv) == 30);\n                DLIB_TEST(dot(sv,sv) == 2);\n\n                sv[10] = 9;\n                DLIB_TEST(dot(sv,dv) == 5);\n            }\n\n            // test mixed sparse dense assignments\n            {\n                std::map<unsigned int, double> sv, sv2;\n                std::vector<std::pair<unsigned int, double> > sv3;\n                matrix<double,0,1> dv(4), dv2;\n\n                dv = 1,2,3,4;\n\n                sv[0] = 1;\n                sv[3] = 1;\n\n\n                assign(dv2, dv);\n\n                DLIB_TEST(dv2.size() == 4);\n                DLIB_TEST(dv2(0) == 1);\n                DLIB_TEST(dv2(1) == 2);\n                DLIB_TEST(dv2(2) == 3);\n                DLIB_TEST(dv2(3) == 4);\n\n                assign(sv2, dv);\n                DLIB_TEST(sv2.size() == 4);\n                DLIB_TEST(sv2[0] == 1);\n                DLIB_TEST(sv2[1] == 2);\n                DLIB_TEST(sv2[2] == 3);\n                DLIB_TEST(sv2[3] == 4);\n\n                assign(sv2, sv);\n                DLIB_TEST(sv2.size() == 2);\n                DLIB_TEST(sv2[0] == 1);\n                DLIB_TEST(sv2[1] == 0);\n                DLIB_TEST(sv2[2] == 0);\n                DLIB_TEST(sv2[3] == 1);\n\n                assign(sv3, sv);\n                DLIB_TEST(sv3.size() == 2);\n                DLIB_TEST(sv3[0].second == 1);\n                DLIB_TEST(sv3[1].second == 1);\n                DLIB_TEST(sv3[0].first == 0);\n                DLIB_TEST(sv3[1].first == 3);\n\n                assign(sv3, dv);\n                DLIB_TEST(sv3.size() == 4);\n                DLIB_TEST(sv3[0].second == 1);\n                DLIB_TEST(sv3[1].second == 2);\n                DLIB_TEST(sv3[2].second == 3);\n                DLIB_TEST(sv3[3].second == 4);\n                DLIB_TEST(sv3[0].first == 0);\n                DLIB_TEST(sv3[1].first == 1);\n                DLIB_TEST(sv3[2].first == 2);\n                DLIB_TEST(sv3[3].first == 3);\n\n                assign(sv3, sv);\n                DLIB_TEST(sv3.size() == 2);\n                DLIB_TEST(sv3[0].second == 1);\n                DLIB_TEST(sv3[1].second == 1);\n                DLIB_TEST(sv3[0].first == 0);\n                DLIB_TEST(sv3[1].first == 3);\n\n                sv.clear();\n                assign(sv, sv3);\n                DLIB_TEST(sv.size() == 2);\n                DLIB_TEST(sv[0] == 1);\n                DLIB_TEST(sv[1] == 0);\n                DLIB_TEST(sv[2] == 0);\n                DLIB_TEST(sv[3] == 1);\n\n            }\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/svm_c_linear_dcd.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/svm.h>\n#include <dlib/rand.h>\n#include <dlib/statistics.h>\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.svm_c_linear_dcd\");\n\n// ----------------------------------------------------------------------------------------\n\n    void test_sparse()\n    {\n        typedef std::map<unsigned long,double> sample_type;\n\n\n        typedef sparse_linear_kernel<sample_type> kernel_type;\n\n\n\n        svm_c_linear_trainer<kernel_type> linear_trainer_cpa;\n        svm_c_linear_dcd_trainer<kernel_type> linear_trainer;\n\n        svm_c_linear_dcd_trainer<kernel_type>::optimizer_state state;\n\n        const double C = 0.2;\n        linear_trainer.set_epsilon(1e-10);\n        linear_trainer_cpa.set_epsilon(1e-10);\n\n\n        std::vector<sample_type> samples;\n        std::vector<double> labels;\n\n        // make an instance of a sample vector so we can use it below\n        sample_type sample;\n\n        decision_function<kernel_type> df, df2, df3;\n\n        dlib::rand rnd;\n        // Now lets go into a loop and randomly generate 10000 samples.\n        double label = +1;\n        for (int i = 0; i < 100; ++i)\n        {\n            // flip this flag\n            label *= -1;\n\n            sample.clear();\n\n            // now make a random sparse sample with at most 10 non-zero elements\n            for (int j = 0; j < 5; ++j)\n            {\n                int idx = rnd.get_random_32bit_number()%10;\n                double value = rnd.get_random_double();\n\n                sample[idx] = label*value;\n            }\n\n            // Also save the samples we are generating so we can let the svm_c_linear_trainer\n            // learn from them below.  \n            samples.push_back(sample);\n            labels.push_back(label);\n\n            if (samples.size() > 1)\n            {\n                linear_trainer_cpa.set_c_class1(C);\n                linear_trainer_cpa.set_c_class2(1.5*C);\n                linear_trainer.set_c_class1(C/samples.size());\n                linear_trainer.set_c_class2(1.5*C/samples.size());\n\n                df = linear_trainer.train(samples, labels, state);\n                df2 = linear_trainer_cpa.train(samples, labels);\n                df3 = linear_trainer.train(samples, labels);\n\n                DLIB_TEST_MSG( dlib::distance(df.basis_vectors(0), df2.basis_vectors(0)) < 1e-8, dlib::distance(df.basis_vectors(0), df2.basis_vectors(0)));\n                DLIB_TEST( std::abs(df.b - df2.b) < 1e-8);\n                DLIB_TEST( dlib::distance(df.basis_vectors(0), df3.basis_vectors(0)) < 1e-8);\n                DLIB_TEST( std::abs(df.b - df3.b) < 1e-8);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_normal_no_bias()\n    {\n        typedef matrix<double,10,1> sample_type;\n\n\n        typedef linear_kernel<sample_type> kernel_type;\n\n\n\n        svm_c_linear_trainer<kernel_type> linear_trainer_cpa;\n        svm_c_linear_dcd_trainer<kernel_type> linear_trainer;\n\n        svm_c_linear_dcd_trainer<kernel_type>::optimizer_state state;\n\n        const double C = 1.0;\n        linear_trainer.set_epsilon(1e-10);\n        linear_trainer_cpa.set_epsilon(1e-10);\n\n        linear_trainer.include_bias(false);\n\n\n        std::vector<sample_type> samples, samples_explict_bias;\n        std::vector<double> labels;\n\n        // make an instance of a sample vector so we can use it below\n        sample_type sample;\n\n        decision_function<kernel_type> df, df2, df3;\n\n        dlib::rand rnd;\n        // Now lets go into a loop and randomly generate 10000 samples.\n        double label = +1;\n        for (int i = 0; i < 100; ++i)\n        {\n            // flip this flag\n            label *= -1;\n\n            sample = 0;\n\n            // now make a random sparse sample with at most 10 non-zero elements\n            for (int j = 0; j < 5; ++j)\n            {\n                int idx = rnd.get_random_32bit_number()%9;\n                double value = rnd.get_random_double();\n\n                sample(idx) = label*value;\n            }\n\n            // Also save the samples we are generating so we can let the svm_c_linear_trainer\n            // learn from them below.  \n            samples.push_back(sample);\n            labels.push_back(label);\n\n            sample(9) = -1;\n            samples_explict_bias.push_back(sample);\n\n            if (samples.size() > 1)\n            {\n                linear_trainer_cpa.set_c_class1(C);\n                linear_trainer_cpa.set_c_class2(1.5*C);\n                linear_trainer.set_c_class1(C/samples.size());\n                linear_trainer.set_c_class2(1.5*C/samples.size());\n\n                df = linear_trainer.train(samples_explict_bias, labels, state);\n                df2 = linear_trainer_cpa.train(samples, labels);\n                df3 = linear_trainer.train(samples_explict_bias, labels);\n\n                DLIB_TEST( std::abs(df2.basis_vectors(0)(9)) < 1e-7);\n                DLIB_TEST_MSG( max(abs(colm(df.basis_vectors(0),0,9) - colm(df2.basis_vectors(0),0,9))) < 1e-6, max(abs(colm(df.basis_vectors(0),0,9) - colm(df2.basis_vectors(0),0,9))));\n                DLIB_TEST( std::abs(df.basis_vectors(0)(9) - df2.b) < 1e-6);\n                DLIB_TEST( max(abs(df.basis_vectors(0) - df3.basis_vectors(0))) < 1e-6);\n                DLIB_TEST( std::abs(df.b - df3.b) < 1e-7);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_normal()\n    {\n        typedef matrix<double,10,1> sample_type;\n\n\n        typedef linear_kernel<sample_type> kernel_type;\n\n\n\n        svm_c_linear_trainer<kernel_type> linear_trainer_cpa;\n        svm_c_linear_dcd_trainer<kernel_type> linear_trainer;\n\n        svm_c_linear_dcd_trainer<kernel_type>::optimizer_state state;\n\n        const double C = 1;\n        linear_trainer.set_epsilon(1e-10);\n        linear_trainer_cpa.set_epsilon(1e-10);\n\n        std::vector<sample_type> samples;\n        std::vector<double> labels;\n\n        // make an instance of a sample vector so we can use it below\n        sample_type sample;\n\n        decision_function<kernel_type> df, df2, df3;\n\n        dlib::rand rnd;\n        // Now lets go into a loop and randomly generate 10000 samples.\n        double label = +1;\n        for (int i = 0; i < 100; ++i)\n        {\n            // flip this flag\n            label *= -1;\n\n            sample = 0;\n\n            // now make a random sparse sample with at most 10 non-zero elements\n            for (int j = 0; j < 5; ++j)\n            {\n                int idx = rnd.get_random_32bit_number()%10;\n                double value = rnd.get_random_double();\n\n                sample(idx) = label*value;\n            }\n\n            // Also save the samples we are generating so we can let the svm_c_linear_trainer\n            // learn from them below.  \n            samples.push_back(sample);\n            labels.push_back(label);\n\n            if (samples.size() > 1)\n            {\n                linear_trainer_cpa.set_c_class1(C);\n                linear_trainer_cpa.set_c_class2(1.5*C);\n                linear_trainer.set_c_class1(C/samples.size());\n                linear_trainer.set_c_class2(1.5*C/samples.size());\n\n                df = linear_trainer.train(samples, labels, state);\n                df2 = linear_trainer_cpa.train(samples, labels);\n                df3 = linear_trainer.train(samples, labels);\n\n                DLIB_TEST_MSG( max(abs(df.basis_vectors(0) - df2.basis_vectors(0))) < 1e-7, max(abs(df.basis_vectors(0) - df2.basis_vectors(0))));\n                DLIB_TEST( std::abs(df.b - df2.b) < 1e-7);\n                DLIB_TEST( max(abs(df.basis_vectors(0) - df3.basis_vectors(0))) < 1e-7);\n                DLIB_TEST( std::abs(df.b - df3.b) < 1e-7);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_normal_force_last_weight(bool have_bias, bool force_weight)\n    {\n        typedef matrix<double,10,1> sample_type;\n        dlog << LINFO << \"have_bias: \"<< have_bias << \"   force_weight: \"<< force_weight;\n\n\n        typedef linear_kernel<sample_type> kernel_type;\n\n\n        svm_c_linear_trainer<kernel_type> linear_trainer_cpa;\n\n        svm_c_linear_dcd_trainer<kernel_type> linear_trainer;\n\n        svm_c_linear_dcd_trainer<kernel_type>::optimizer_state state;\n\n        const double C = 1;\n        linear_trainer.set_epsilon(1e-10);\n        linear_trainer_cpa.set_epsilon(1e-11);\n\n        linear_trainer_cpa.force_last_weight_to_1(force_weight);\n\n        linear_trainer.force_last_weight_to_1(force_weight);\n        linear_trainer.include_bias(have_bias);\n\n        std::vector<sample_type> samples;\n        std::vector<double> labels;\n\n        // make an instance of a sample vector so we can use it below\n        sample_type sample;\n\n        decision_function<kernel_type> df, df2;\n\n        running_stats<double> rs;\n\n        dlib::rand rnd;\n        // Now lets go into a loop and randomly generate 10000 samples.\n        double label = +1;\n        for (int i = 0; i < 40; ++i)\n        {\n            // flip this flag\n            label *= -1;\n\n            sample = 0;\n\n            // now make a random sparse sample with at most 10 non-zero elements\n            for (int j = 0; j < 5; ++j)\n            {\n                int idx = rnd.get_random_32bit_number()%9;\n                double value = rnd.get_random_double();\n\n                sample(idx) = label*value + label;\n            }\n\n            sample(9) = 4;\n\n            // Also save the samples we are generating so we can let the svm_c_linear_trainer\n            // learn from them below.  \n            samples.push_back(sample);\n            labels.push_back(label);\n\n            linear_trainer.set_c(C);\n            linear_trainer_cpa.set_c(C*samples.size());\n\n            df = linear_trainer.train(samples, labels, state);\n\n            if (force_weight)\n            {\n                DLIB_TEST(std::abs(df.basis_vectors(0)(9) - 1) < 1e-8);\n                DLIB_TEST(std::abs(df.b) < 1e-8);\n\n                if (samples.size() > 1)\n                {\n                    df2 = linear_trainer_cpa.train(samples, labels);\n                    DLIB_TEST_MSG( max(abs(df.basis_vectors(0) - df2.basis_vectors(0))) < 1e-7, max(abs(df.basis_vectors(0) - df2.basis_vectors(0))));\n                    DLIB_TEST( std::abs(df.b - df2.b) < 1e-7);\n                }\n            }\n\n            if (!have_bias)\n                DLIB_TEST(std::abs(df.b) < 1e-8);\n\n\n            for (unsigned long k = 0; k < samples.size(); ++k)\n            {\n                //cout << \"pred: \"<< labels[k]*df(samples[k]) << endl;\n                rs.add(labels[k]*df(samples[k]));\n            }\n        }\n        DLIB_TEST_MSG(std::abs(rs.min()-1) < 1e-7, std::abs(rs.min()-1));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_normal_1_sample(double label)\n    {\n        typedef matrix<double,10,1> sample_type;\n\n\n        typedef linear_kernel<sample_type> kernel_type;\n\n\n\n        svm_c_linear_dcd_trainer<kernel_type> linear_trainer;\n\n        svm_c_linear_dcd_trainer<kernel_type>::optimizer_state state;\n\n        const double C = 10;\n        linear_trainer.set_epsilon(1e-10);\n        linear_trainer.set_c(C);\n\n\n        linear_trainer.force_last_weight_to_1(true);\n        linear_trainer.include_bias(false);\n\n        std::vector<sample_type> samples;\n        std::vector<double> labels;\n\n        // make an instance of a sample vector so we can use it below\n        sample_type sample;\n\n        sample = 0;\n        sample(0) = -1;\n        sample(1) = -1;\n        sample(9) = 4;\n\n        samples.push_back(sample);\n        labels.push_back(label);\n\n        for (int i = 0; i < 4; ++i)\n        {\n            decision_function<kernel_type> df;\n            df = linear_trainer.train(samples, labels);\n\n            if (label > 0)\n            {\n                DLIB_TEST(std::abs(df(samples[0])-4) < 1e-8);\n            }\n            else\n            {\n                DLIB_TEST(std::abs(df(samples[0])+1) < 1e-8);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_sparse_1_sample(double label)\n    {\n        typedef std::vector<std::pair<unsigned long,double> > sample_type;\n\n\n        typedef sparse_linear_kernel<sample_type> kernel_type;\n\n\n\n        svm_c_linear_dcd_trainer<kernel_type> linear_trainer;\n\n        svm_c_linear_dcd_trainer<kernel_type>::optimizer_state state;\n\n        const double C = 10;\n        linear_trainer.set_epsilon(1e-10);\n        linear_trainer.set_c(C);\n\n\n        linear_trainer.force_last_weight_to_1(true);\n        linear_trainer.include_bias(false);\n\n        std::vector<sample_type> samples;\n        std::vector<double> labels;\n\n        // make an instance of a sample vector so we can use it below\n        sample_type sample;\n\n        sample.push_back(make_pair(0,-1));\n        sample.push_back(make_pair(1,1));\n        sample.push_back(make_pair(9,4));\n\n        for (int i = 0; i < 4; ++i)\n        {\n            samples.push_back(sample);\n            labels.push_back(label);\n\n            decision_function<kernel_type> df;\n            df = linear_trainer.train(samples, labels);\n\n\n            if (label > 0)\n            {\n                DLIB_TEST(std::abs(df(samples[0])-4) < 1e-8);\n            }\n            else\n            {\n                DLIB_TEST(std::abs(df(samples[0])+1) < 1e-8);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class tester_svm_c_linear_dcd : public tester\n    {\n    public:\n        tester_svm_c_linear_dcd (\n        ) :\n            tester (\"test_svm_c_linear_dcd\",\n                \"Runs tests on the svm_c_linear_dcd_trainer.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test_normal();\n            print_spinner();\n            test_normal_no_bias();\n            print_spinner();\n            test_sparse();\n            print_spinner();\n            test_normal_force_last_weight(false,false);\n            print_spinner();\n            test_normal_force_last_weight(false,true);\n            print_spinner();\n            test_normal_force_last_weight(true,false);\n            print_spinner();\n            test_normal_force_last_weight(true,true);\n            print_spinner();\n            test_normal_1_sample(+1);\n            print_spinner();\n            test_normal_1_sample(-1);\n            print_spinner();\n            test_sparse_1_sample(+1);\n            print_spinner();\n            test_sparse_1_sample(-1);\n            print_spinner();\n        }\n    } a;\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/svm_multiclass_linear.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/svm_threaded.h>\n#include <dlib/data_io.h>\n#include \"create_iris_datafile.h\"\n#include <vector>\n#include <map>\n#include <sstream>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.svm_multiclass_trainer\");\n\n\n    class test_svm_multiclass_trainer : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        test_svm_multiclass_trainer (\n        ) :\n            tester (\n                \"test_svm_multiclass_trainer\",       // the command line argument name for this test\n                \"Run tests on the svm_multiclass_linear_trainer stuff.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n\n        void test_prior ()\n        {\n            print_spinner();\n            typedef matrix<double,4,1> sample_type;\n            typedef linear_kernel<sample_type> kernel_type;\n\n            std::vector<sample_type> samples;\n            std::vector<int> labels;\n\n            for (int i = 0; i < 4; ++i)\n            {\n                if (i==2)\n                    ++i;\n                for (int iter = 0; iter < 5; ++iter)\n                {\n                    sample_type samp;\n                    samp = 0;\n                    samp(i) = 1;\n                    samples.push_back(samp);\n                    labels.push_back(i);\n                }\n            }\n\n\n            svm_multiclass_linear_trainer<kernel_type,int> trainer;\n\n            multiclass_linear_decision_function<kernel_type,int> df = trainer.train(samples, labels);\n\n            //cout << \"test: \\n\" << test_multiclass_decision_function(df, samples, labels) << endl;\n            //cout << df.weights << endl;\n            //cout << df.b << endl;\n\n            std::vector<sample_type> samples2;\n            std::vector<int> labels2;\n            int i = 2;\n            for (int iter = 0; iter < 5; ++iter)\n            {\n                sample_type samp;\n                samp = 0;\n                samp(i) = 1;\n                samples2.push_back(samp);\n                labels2.push_back(i);\n                samples.push_back(samp);\n                labels.push_back(i);\n            }\n\n            trainer.set_prior(df);\n            trainer.set_c(0.1);\n            df = trainer.train(samples2, labels2);\n\n            matrix<double> res = test_multiclass_decision_function(df, samples, labels);\n            dlog << LINFO << \"test: \\n\" << res;\n            dlog << LINFO << df.weights;\n            dlog << LINFO << df.b;\n            DLIB_TEST((unsigned int)sum(diag(res))==samples.size());\n        }\n\n        void test_prior_sparse ()\n        {\n            print_spinner();\n            typedef std::map<unsigned long,double> sample_type;\n            typedef sparse_linear_kernel<sample_type> kernel_type;\n\n            std::vector<sample_type> samples;\n            std::vector<int> labels;\n\n            for (int i = 0; i < 4; ++i)\n            {\n                if (i==2)\n                    ++i;\n                for (int iter = 0; iter < 5; ++iter)\n                {\n                    sample_type samp;\n                    samp[i] = 1;\n                    samples.push_back(samp);\n                    labels.push_back(i);\n                }\n            }\n\n\n            svm_multiclass_linear_trainer<kernel_type,int> trainer;\n\n            multiclass_linear_decision_function<kernel_type,int> df = trainer.train(samples, labels);\n\n            //cout << \"test: \\n\" << test_multiclass_decision_function(df, samples, labels) << endl;\n            //cout << df.weights << endl;\n            //cout << df.b << endl;\n\n            std::vector<sample_type> samples2;\n            std::vector<int> labels2;\n            int i = 2;\n            for (int iter = 0; iter < 5; ++iter)\n            {\n                sample_type samp;\n                samp[i] = 1;\n                samp[i+10] = 1;\n                samples2.push_back(samp);\n                labels2.push_back(i);\n                samples.push_back(samp);\n                labels.push_back(i);\n            }\n\n            trainer.set_prior(df);\n            trainer.set_c(0.1);\n            df = trainer.train(samples2, labels2);\n\n            matrix<double> res = test_multiclass_decision_function(df, samples, labels);\n            dlog << LINFO << \"test: \\n\" << res;\n            dlog << LINFO << df.weights;\n            dlog << LINFO << df.b;\n            DLIB_TEST((unsigned int)sum(diag(res))==samples.size());\n        }\n\n        template <typename sample_type>\n        void run_test()\n        {\n            print_spinner();\n\n            typedef typename sample_type::value_type::second_type scalar_type;\n\n            std::vector<sample_type> samples;\n            std::vector<scalar_type> labels;\n\n            load_libsvm_formatted_data(\"iris.scale\",samples, labels);\n\n            DLIB_TEST(samples.size() == 150);\n            DLIB_TEST(labels.size() == 150);\n\n            typedef sparse_linear_kernel<sample_type> kernel_type;\n            svm_multiclass_linear_trainer<kernel_type> trainer;\n            trainer.set_c(100);\n            trainer.set_epsilon(0.000001);\n\n            randomize_samples(samples, labels);\n            matrix<double> cv = cross_validate_multiclass_trainer(trainer, samples, labels, 4);\n\n            dlog << LINFO << \"confusion matrix: \\n\" << cv;\n            const scalar_type cv_accuracy = sum(diag(cv))/sum(cv);\n            dlog << LINFO << \"cv accuracy: \" << cv_accuracy;\n            DLIB_TEST(cv_accuracy > 0.97);\n\n\n\n\n            {\n                print_spinner();\n                typedef matrix<scalar_type,0,1> dsample_type;\n                std::vector<dsample_type> dsamples = sparse_to_dense(samples);\n                DLIB_TEST(dsamples.size() == 150);\n\n                typedef linear_kernel<dsample_type> kernel_type;\n                svm_multiclass_linear_trainer<kernel_type> trainer;\n                trainer.set_c(100);\n\n                cv = cross_validate_multiclass_trainer(trainer, dsamples, labels, 4);\n\n                dlog << LINFO << \"dense confusion matrix: \\n\" << cv;\n                const scalar_type cv_accuracy = sum(diag(cv))/sum(cv);\n                dlog << LINFO << \"dense cv accuracy: \" << cv_accuracy;\n                DLIB_TEST(cv_accuracy > 0.97);\n            }\n\n        }\n\n\n\n\n        void perform_test (\n        )\n        {\n            print_spinner();\n            create_iris_datafile();\n\n            run_test<std::map<unsigned int, double> >();\n            run_test<std::map<unsigned int, float> >();\n            run_test<std::vector<std::pair<unsigned int, float> > >();\n            run_test<std::vector<std::pair<unsigned long, double> > >();\n\n            test_prior();\n            test_prior_sparse();\n        }\n    };\n\n    test_svm_multiclass_trainer a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/svm_struct.cpp",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/svm_threaded.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.svm_struct\");\n\n\n    template <\n        typename matrix_type,\n        typename sample_type,\n        typename label_type\n        >\n    class test_multiclass_svm_problem : public structural_svm_problem_threaded<matrix_type,\n                                                                 std::vector<std::pair<unsigned long,typename matrix_type::type> > > \n    {\n\n    public:\n        typedef typename matrix_type::type scalar_type;\n        typedef std::vector<std::pair<unsigned long,scalar_type> > feature_vector_type;\n\n        test_multiclass_svm_problem (\n            const std::vector<sample_type>& samples_,\n            const std::vector<label_type>& labels_\n        ) :\n            structural_svm_problem_threaded<matrix_type,\n                std::vector<std::pair<unsigned long,typename matrix_type::type> > >(2),\n            samples(samples_),\n            labels(labels_),\n            dims(10+1) // +1 for the bias\n        {\n            for (int i = 0; i < 10; ++i)\n            {\n                distinct_labels.push_back(i);\n            }\n        }\n\n        virtual long get_num_dimensions (\n        ) const\n        {\n            return dims*10;\n        }\n\n        virtual long get_num_samples (\n        ) const \n        {\n            return static_cast<long>(samples.size());\n        }\n\n        virtual void get_truth_joint_feature_vector (\n            long idx,\n            feature_vector_type& psi\n        ) const \n        {\n            assign(psi, samples[idx]);\n            // Add a constant -1 to account for the bias term.\n            psi.push_back(std::make_pair(dims-1,static_cast<scalar_type>(-1)));\n\n            // Find which distinct label goes with this psi.\n            const long label_idx = index_of_max(mat(distinct_labels) == labels[idx]);\n\n            offset_feature_vector(psi, dims*label_idx);\n        }\n\n        virtual void separation_oracle (\n            const long idx,\n            const matrix_type& current_solution,\n            scalar_type& loss,\n            feature_vector_type& psi\n        ) const \n        {\n            scalar_type best_val = -std::numeric_limits<scalar_type>::infinity();\n            unsigned long best_idx = 0;\n\n            // Figure out which label is the best.  That is, what label maximizes\n            // LOSS(idx,y) + F(x,y).  Note that y in this case is given by distinct_labels[i].\n            for (unsigned long i = 0; i < distinct_labels.size(); ++i)\n            {\n                // Compute the F(x,y) part:\n                // perform: temp == dot(relevant part of current solution, samples[idx]) - current_bias\n                scalar_type temp = dot(rowm(current_solution, range(i*dims, (i+1)*dims-2)), samples[idx]) - current_solution((i+1)*dims-1);\n\n                // Add the LOSS(idx,y) part:\n                if (labels[idx] != distinct_labels[i])\n                    temp += 1;\n\n                // Now temp == LOSS(idx,y) + F(x,y).  Check if it is the biggest we have seen.\n                if (temp > best_val)\n                {\n                    best_val = temp;\n                    best_idx = i;\n                }\n            }\n\n            assign(psi, samples[idx]);\n            // add a constant -1 to account for the bias term\n            psi.push_back(std::make_pair(dims-1,static_cast<scalar_type>(-1)));\n\n            offset_feature_vector(psi, dims*best_idx);\n\n            if (distinct_labels[best_idx] == labels[idx])\n                loss = 0;\n            else\n                loss = 1;\n        }\n\n    private:\n\n        void offset_feature_vector (\n            feature_vector_type& sample,\n            const unsigned long val\n        ) const\n        {\n            if (val != 0)\n            {\n                for (typename feature_vector_type::iterator i = sample.begin(); i != sample.end(); ++i)\n                {\n                    i->first += val;\n                }\n            }\n        }\n\n\n        const std::vector<sample_type>& samples;\n        const std::vector<label_type>& labels;\n        std::vector<label_type> distinct_labels;\n        const long dims;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename label_type_ = typename K::scalar_type \n        >\n    class test_svm_multiclass_linear_trainer2\n    {\n    public:\n        typedef label_type_ label_type;\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        typedef multiclass_linear_decision_function<kernel_type, label_type> trained_function_type;\n\n\n        test_svm_multiclass_linear_trainer2 (\n        ) :\n            C(10),\n            eps(1e-4),\n            verbose(false)\n        {\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const\n        {\n            scalar_type svm_objective = 0;\n            return train(all_samples, all_labels, svm_objective);\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels,\n            scalar_type& svm_objective\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(all_samples,all_labels),\n                \"\\t trained_function_type test_svm_multiclass_linear_trainer2::train(all_samples,all_labels)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t all_samples.size():     \" << all_samples.size() \n                << \"\\n\\t all_labels.size():      \" << all_labels.size() \n                );\n\n            typedef matrix<scalar_type,0,1> w_type;\n            w_type weights;\n            std::vector<sample_type> samples1(all_samples.begin(), all_samples.begin()+all_samples.size()/2);\n            std::vector<sample_type> samples2(all_samples.begin()+all_samples.size()/2, all_samples.end());\n\n            std::vector<label_type> labels1(all_labels.begin(), all_labels.begin()+all_labels.size()/2);\n            std::vector<label_type> labels2(all_labels.begin()+all_labels.size()/2, all_labels.end());\n            test_multiclass_svm_problem<w_type, sample_type, label_type> problem1(samples1, labels1);\n            test_multiclass_svm_problem<w_type, sample_type, label_type> problem2(samples2, labels2);\n            problem1.set_max_cache_size(3);\n            problem2.set_max_cache_size(0);\n\n            svm_struct_processing_node node1(problem1, 12345, 3);\n            svm_struct_processing_node node2(problem2, 12346, 0);\n\n            solver.set_inactive_plane_threshold(50);\n            solver.set_subproblem_epsilon(1e-4);\n\n            svm_struct_controller_node controller;\n            controller.set_c(C);\n            controller.set_epsilon(eps);\n            if (verbose)\n                controller.be_verbose();\n            controller.add_processing_node(\"127.0.0.1\", 12345);\n            controller.add_processing_node(\"localhost:12346\");\n            svm_objective = controller(solver, weights);\n\n\n\n            trained_function_type df;\n\n            const long dims = max_index_plus_one(all_samples);\n            df.labels  = select_all_distinct_labels(all_labels);\n            df.weights = colm(reshape(weights, df.labels.size(), dims+1), range(0,dims-1));\n            df.b       = colm(reshape(weights, df.labels.size(), dims+1), dims);\n            return df;\n        }\n\n    private:\n        scalar_type C;\n        scalar_type eps;\n        bool verbose;\n        mutable oca solver;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename label_type_ = typename K::scalar_type \n        >\n    class test_svm_multiclass_linear_trainer3\n    {\n    public:\n        typedef label_type_ label_type;\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        typedef multiclass_linear_decision_function<kernel_type, label_type> trained_function_type;\n\n\n        test_svm_multiclass_linear_trainer3 (\n        ) :\n            C(10),\n            eps(1e-4),\n            verbose(false)\n        {\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const\n        {\n            scalar_type svm_objective = 0;\n            return train(all_samples, all_labels, svm_objective);\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels,\n            scalar_type& svm_objective\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(all_samples,all_labels),\n                \"\\t trained_function_type test_svm_multiclass_linear_trainer3::train(all_samples,all_labels)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t all_samples.size():     \" << all_samples.size() \n                << \"\\n\\t all_labels.size():      \" << all_labels.size() \n                );\n\n            typedef matrix<scalar_type,0,1> w_type;\n            w_type weights;\n            test_multiclass_svm_problem<w_type, sample_type, label_type> problem(all_samples, all_labels);\n            problem.set_max_cache_size(0);\n\n            problem.set_c(C);\n            problem.set_epsilon(eps);\n\n            if (verbose)\n                problem.be_verbose();\n            \n            solver.set_inactive_plane_threshold(50);\n            solver.set_subproblem_epsilon(1e-4);\n            svm_objective = solver(problem, weights);\n\n\n            trained_function_type df;\n\n            const long dims = max_index_plus_one(all_samples);\n            df.labels  = select_all_distinct_labels(all_labels);\n            df.weights = colm(reshape(weights, df.labels.size(), dims+1), range(0,dims-1));\n            df.b       = colm(reshape(weights, df.labels.size(), dims+1), dims);\n            return df;\n        }\n\n    private:\n        scalar_type C;\n        scalar_type eps;\n        bool verbose;\n        mutable oca solver;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename label_type_ = typename K::scalar_type \n        >\n    class test_svm_multiclass_linear_trainer4\n    {\n    public:\n        typedef label_type_ label_type;\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        typedef multiclass_linear_decision_function<kernel_type, label_type> trained_function_type;\n\n\n        test_svm_multiclass_linear_trainer4 (\n        ) :\n            C(10),\n            eps(1e-4),\n            verbose(false)\n        {\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const\n        {\n            scalar_type svm_objective = 0;\n            return train(all_samples, all_labels, svm_objective);\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels,\n            scalar_type& svm_objective\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(all_samples,all_labels),\n                \"\\t trained_function_type test_svm_multiclass_linear_trainer4::train(all_samples,all_labels)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t all_samples.size():     \" << all_samples.size() \n                << \"\\n\\t all_labels.size():      \" << all_labels.size() \n                );\n\n            typedef matrix<scalar_type,0,1> w_type;\n            w_type weights;\n            test_multiclass_svm_problem<w_type, sample_type, label_type> problem(all_samples, all_labels);\n            problem.set_max_cache_size(3);\n\n            problem.set_c(C);\n            problem.set_epsilon(eps);\n\n            if (verbose)\n                problem.be_verbose();\n            \n            solver.set_inactive_plane_threshold(50);\n            solver.set_subproblem_epsilon(1e-4);\n            svm_objective = solver(problem, weights);\n\n\n            trained_function_type df;\n\n            const long dims = max_index_plus_one(all_samples);\n            df.labels  = select_all_distinct_labels(all_labels);\n            df.weights = colm(reshape(weights, df.labels.size(), dims+1), range(0,dims-1));\n            df.b       = colm(reshape(weights, df.labels.size(), dims+1), dims);\n            return df;\n        }\n\n    private:\n        scalar_type C;\n        scalar_type eps;\n        bool verbose;\n        mutable oca solver;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename K,\n        typename label_type_ = typename K::scalar_type \n        >\n    class test_svm_multiclass_linear_trainer5\n    {\n    public:\n        typedef label_type_ label_type;\n        typedef K kernel_type;\n        typedef typename kernel_type::scalar_type scalar_type;\n        typedef typename kernel_type::sample_type sample_type;\n        typedef typename kernel_type::mem_manager_type mem_manager_type;\n\n        typedef multiclass_linear_decision_function<kernel_type, label_type> trained_function_type;\n\n\n        test_svm_multiclass_linear_trainer5 (\n        ) :\n            C(10),\n            eps(1e-4),\n            verbose(false)\n        {\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels\n        ) const\n        {\n            scalar_type svm_objective = 0;\n            return train(all_samples, all_labels, svm_objective);\n        }\n\n        trained_function_type train (\n            const std::vector<sample_type>& all_samples,\n            const std::vector<label_type>& all_labels,\n            scalar_type& svm_objective\n        ) const\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(is_learning_problem(all_samples,all_labels),\n                \"\\t trained_function_type test_svm_multiclass_linear_trainer5::train(all_samples,all_labels)\"\n                << \"\\n\\t invalid inputs were given to this function\"\n                << \"\\n\\t all_samples.size():     \" << all_samples.size() \n                << \"\\n\\t all_labels.size():      \" << all_labels.size() \n                );\n\n            typedef matrix<scalar_type,0,1> w_type;\n            w_type weights;\n            const long dims = max_index_plus_one(all_samples);\n            trained_function_type df;\n            df.labels  = select_all_distinct_labels(all_labels);\n            multiclass_svm_problem<w_type, sample_type, label_type> problem(all_samples, all_labels, df.labels, dims, 4);\n            problem.set_max_cache_size(3);\n\n            problem.set_c(C);\n            problem.set_epsilon(eps);\n\n            if (verbose)\n                problem.be_verbose();\n            \n            solver.set_inactive_plane_threshold(50);\n            solver.set_subproblem_epsilon(1e-4);\n            svm_objective = solver(problem, weights);\n\n\n\n            df.weights = colm(reshape(weights, df.labels.size(), dims+1), range(0,dims-1));\n            df.b       = colm(reshape(weights, df.labels.size(), dims+1), dims);\n            return df;\n        }\n\n    private:\n        scalar_type C;\n        scalar_type eps;\n        bool verbose;\n        mutable oca solver;\n    };\n\n\n// ----------------------------------------------------------------------------------------\n\n    typedef matrix<double,10,1> sample_type;\n    typedef double scalar_type;\n\n    void make_dataset (\n        std::vector<sample_type>& samples,\n        std::vector<scalar_type>& labels,\n        int num,\n        dlib::rand& rnd\n    )\n    {\n        samples.clear();\n        labels.clear();\n        for (int i = 0; i < 10; ++i)\n        {\n            for (int j = 0; j < num; ++j)\n            {\n                sample_type samp;\n                samp = 0;\n                samp(i) = 10*rnd.get_random_double()+1;\n\n                samples.push_back(samp);\n                labels.push_back(i);\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_svm_struct : public tester\n    {\n    public:\n        test_svm_struct (\n        ) :\n            tester (\"test_svm_struct\",\n                    \"Runs tests on the structural svm components.\")\n        {}\n\n        void run_test (\n            const std::vector<sample_type>& samples,\n            const std::vector<scalar_type>& labels,\n            const double true_obj\n        )\n        {\n            typedef linear_kernel<sample_type> kernel_type;\n            svm_multiclass_linear_trainer<kernel_type> trainer1;\n            test_svm_multiclass_linear_trainer2<kernel_type> trainer2;\n            test_svm_multiclass_linear_trainer3<kernel_type> trainer3;\n            test_svm_multiclass_linear_trainer4<kernel_type> trainer4;\n            test_svm_multiclass_linear_trainer5<kernel_type> trainer5;\n\n            trainer1.set_epsilon(1e-4);\n            trainer1.set_c(10);\n\n\n            multiclass_linear_decision_function<kernel_type,double> df1, df2, df3, df4, df5;\n            double obj1, obj2, obj3, obj4, obj5;\n\n            // Solve a multiclass SVM a whole bunch of different ways and make sure\n            // they all give the same answer.\n            print_spinner();\n            df1 = trainer1.train(samples, labels, obj1);\n            print_spinner();\n            df2 = trainer2.train(samples, labels, obj2);\n            print_spinner();\n            df3 = trainer3.train(samples, labels, obj3);\n            print_spinner();\n            df4 = trainer4.train(samples, labels, obj4);\n            print_spinner();\n            df5 = trainer5.train(samples, labels, obj5);\n            print_spinner();\n\n            dlog << LINFO << \"obj1: \"<< obj1;\n            dlog << LINFO << \"obj2: \"<< obj2;\n            dlog << LINFO << \"obj3: \"<< obj3;\n            dlog << LINFO << \"obj4: \"<< obj4;\n            dlog << LINFO << \"obj5: \"<< obj5;\n            DLIB_TEST(std::abs(obj1 - obj2) < 1e-2);\n            DLIB_TEST(std::abs(obj1 - obj3) < 1e-2);\n            DLIB_TEST(std::abs(obj1 - obj4) < 1e-2);\n            DLIB_TEST(std::abs(obj1 - obj5) < 1e-2);\n            DLIB_TEST(std::abs(obj1 - true_obj) < 1e-2);\n            DLIB_TEST(std::abs(obj2 - true_obj) < 1e-2);\n            DLIB_TEST(std::abs(obj3 - true_obj) < 1e-2);\n            DLIB_TEST(std::abs(obj4 - true_obj) < 1e-2);\n            DLIB_TEST(std::abs(obj5 - true_obj) < 1e-2);\n\n            dlog << LINFO << \"weight error: \"<< max(abs(df1.weights - df2.weights));\n            dlog << LINFO << \"weight error: \"<< max(abs(df1.weights - df3.weights));\n            dlog << LINFO << \"weight error: \"<< max(abs(df1.weights - df4.weights));\n            dlog << LINFO << \"weight error: \"<< max(abs(df1.weights - df5.weights));\n\n            DLIB_TEST(max(abs(df1.weights - df2.weights)) < 1e-2);\n            DLIB_TEST(max(abs(df1.weights - df3.weights)) < 1e-2);\n            DLIB_TEST(max(abs(df1.weights - df4.weights)) < 1e-2);\n            DLIB_TEST(max(abs(df1.weights - df5.weights)) < 1e-2);\n\n            dlog << LINFO << \"b error: \"<< max(abs(df1.b - df2.b));\n            dlog << LINFO << \"b error: \"<< max(abs(df1.b - df3.b));\n            dlog << LINFO << \"b error: \"<< max(abs(df1.b - df4.b));\n            dlog << LINFO << \"b error: \"<< max(abs(df1.b - df5.b));\n            DLIB_TEST(max(abs(df1.b - df2.b)) < 1e-2);\n            DLIB_TEST(max(abs(df1.b - df3.b)) < 1e-2);\n            DLIB_TEST(max(abs(df1.b - df4.b)) < 1e-2);\n            DLIB_TEST(max(abs(df1.b - df5.b)) < 1e-2);\n\n            matrix<double> res = test_multiclass_decision_function(df1, samples, labels);\n            dlog << LINFO << res;\n            dlog << LINFO << \"accuracy: \" << sum(diag(res))/sum(res);\n            DLIB_TEST(sum(diag(res)) == samples.size());\n\n            res = test_multiclass_decision_function(df2, samples, labels);\n            dlog << LINFO << res;\n            dlog << LINFO << \"accuracy: \" << sum(diag(res))/sum(res);\n            DLIB_TEST(sum(diag(res)) == samples.size());\n\n            res = test_multiclass_decision_function(df3, samples, labels);\n            dlog << LINFO << res;\n            dlog << LINFO << \"accuracy: \" << sum(diag(res))/sum(res);\n            DLIB_TEST(sum(diag(res)) == samples.size());\n\n            res = test_multiclass_decision_function(df4, samples, labels);\n            dlog << LINFO << res;\n            dlog << LINFO << \"accuracy: \" << sum(diag(res))/sum(res);\n            DLIB_TEST(sum(diag(res)) == samples.size());\n\n            res = test_multiclass_decision_function(df5, samples, labels);\n            dlog << LINFO << res;\n            dlog << LINFO << \"accuracy: \" << sum(diag(res))/sum(res);\n            DLIB_TEST(sum(diag(res)) == samples.size());\n        }\n\n        void perform_test (\n        )\n        {\n            std::vector<sample_type> samples;\n            std::vector<scalar_type> labels;\n\n            dlib::rand rnd;\n\n            dlog << LINFO << \"test with 100 samples per class\";\n            make_dataset(samples, labels, 100, rnd);\n            run_test(samples, labels, 1.155);\n\n            dlog << LINFO << \"test with 1 sample per class\";\n            make_dataset(samples, labels, 1, rnd);\n            run_test(samples, labels, 0.251);\n\n            dlog << LINFO << \"test with 2 sample per class\";\n            make_dataset(samples, labels, 2, rnd);\n            run_test(samples, labels, 0.444);\n        }\n    } a;\n\n\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/svr_linear_trainer.cpp",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/matrix.h>\n#include <sstream>\n#include <string>\n#include <ctime>\n#include <vector>\n#include <dlib/statistics.h>\n\n#include \"tester.h\"\n#include <dlib/svm.h>\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.svr_linear_trainer\");\n\n    typedef matrix<double, 0, 1> sample_type;\n    typedef std::vector<std::pair<unsigned int, double> > sparse_sample_type;\n\n// ----------------------------------------------------------------------------------------\n\n    double sinc(double x)\n    {\n        if (x == 0)\n            return 1;\n        return sin(x)/x;\n    }\n\n    template <typename scalar_type>\n    void test1()\n    {\n        typedef matrix<scalar_type,0,1> sample_type;\n\n        typedef radial_basis_kernel<sample_type> kernel_type;\n\n        print_spinner();\n\n        std::vector<sample_type> samples;\n        std::vector<scalar_type> targets;\n\n        // The first thing we do is pick a few training points from the sinc() function.\n        sample_type m(1);\n        for (scalar_type x = -10; x <= 4; x += 1)\n        {\n            m(0) = x;\n\n            samples.push_back(m);\n            targets.push_back(sinc(x)+1.1);\n        }\n\n        randomize_samples(samples, targets);\n\n        empirical_kernel_map<kernel_type> ekm;\n        ekm.load(kernel_type(0.1), samples);\n\n        for (unsigned long i = 0; i < samples.size(); ++i)\n            samples[i] = ekm.project(samples[i]);\n\n        svr_linear_trainer<linear_kernel<sample_type> > linear_trainer;\n        linear_trainer.set_epsilon(0.0001);\n        linear_trainer.set_c(30);\n        linear_trainer.set_epsilon_insensitivity(0.001);\n\n        matrix<double> res = cross_validate_regression_trainer(linear_trainer, samples, targets, 5);\n        dlog << LINFO << \"MSE and R-Squared: \"<< res;\n        DLIB_TEST(res(0) < 1e-4);\n        DLIB_TEST(res(1) > 0.99);\n\n        dlib::rand rnd;\n\n        samples.clear();\n        targets.clear();\n        std::vector<scalar_type> noisefree_targets;\n        for (scalar_type x = 0; x <= 5; x += 0.1)\n        {\n            m(0) = x;\n            samples.push_back(matrix_cast<scalar_type>(linpiece(m, linspace(0,5,20))));\n            targets.push_back(x*x + rnd.get_random_gaussian());\n            noisefree_targets.push_back(x*x);\n        }\n        linear_trainer.set_learns_nonnegative_weights(true);\n        linear_trainer.set_epsilon_insensitivity(1.0);\n        decision_function<linear_kernel<sample_type> > df2 = linear_trainer.train(samples, targets);\n\n        print_spinner();\n        res = test_regression_function(df2, samples, noisefree_targets);\n        dlog << LINFO << \"MSE and R-Squared: \"<< res;\n        DLIB_TEST(res(0) < 0.15);\n        DLIB_TEST(res(1) > 0.98);\n        DLIB_TEST(df2.basis_vectors.size()==1);\n        DLIB_TEST(max(df2.basis_vectors(0)) >= 0);\n\n        linear_trainer.force_last_weight_to_1(true);\n        df2 = linear_trainer.train(samples, targets);\n        DLIB_TEST(std::abs(df2.basis_vectors(0)(samples[0].size()-1) - 1.0) < 1e-14);\n\n        res = test_regression_function(df2, samples, noisefree_targets);\n        dlog << LINFO << \"MSE and R-Squared: \"<< res;\n        DLIB_TEST(res(0) < 0.20);\n        DLIB_TEST(res(1) > 0.98);\n\n\n        // convert into sparse vectors and try it out\n        typedef std::vector<std::pair<unsigned long, scalar_type> > sparse_samp;\n        std::vector<sparse_samp> ssamples;\n        for (unsigned long i = 0; i < samples.size(); ++i)\n        {\n            sparse_samp s;\n            for (long j = 0; j < samples[i].size(); ++j)\n                s.push_back(make_pair(j,samples[i](j)));\n            ssamples.push_back(s);\n        }\n\n        svr_linear_trainer<sparse_linear_kernel<sparse_samp> > strainer;\n        strainer.set_learns_nonnegative_weights(true);\n        strainer.set_epsilon_insensitivity(1.0);\n        strainer.set_c(30);\n        decision_function<sparse_linear_kernel<sparse_samp> > df;\n        df = strainer.train(ssamples, targets);\n        res = test_regression_function(df, ssamples, noisefree_targets);\n        dlog << LINFO << \"MSE and R-Squared: \"<< res;\n        DLIB_TEST(res(0) < 0.15);\n        DLIB_TEST(res(1) > 0.98);\n        DLIB_TEST(df2.basis_vectors.size()==1);\n        DLIB_TEST(max(sparse_to_dense(df2.basis_vectors(0))) >= 0);\n    }\n\n\n// ----------------------------------------------------------------------------------------\n\n    class tester_svr_linear_trainer : public tester\n    {\n    public:\n        tester_svr_linear_trainer (\n        ) :\n            tester (\"test_svr_linear_trainer\",\n                    \"Runs tests on the svr_linear_trainer.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"TEST double\";\n            test1<double>();\n            dlog << LINFO << \"TEST float\";\n            test1<float>();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/symmetric_matrix_cache.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include \"tester.h\"\n#include <dlib/matrix.h>\n#include <dlib/rand.h>\n#include <vector>\n#include <sstream>\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    dlib::logger dlog(\"test.symmetric_matrix_cache\");\n\n\n    class test_symmetric_matrix_cache : public tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a unit test.  When it is constructed\n                it adds itself into the testing framework.\n        !*/\n    public:\n        test_symmetric_matrix_cache (\n        ) :\n            tester (\n                \"test_symmetric_matrix_cache\",       // the command line argument name for this test\n                \"Run tests on the symmetric_matrix_cache function.\", // the command line argument description\n                0                     // the number of command line arguments for this test\n            )\n        {\n        }\n\n        dlib::rand rnd;\n\n    // -----------------------------------\n\n        template <typename EXP1, typename EXP2>\n        void test_colm_exp (\n            const matrix_exp<EXP1>& m1,\n            const matrix_exp<EXP2>& m2\n        )\n        {\n            for (long i = 0; i < m1.nc(); ++i)\n            {\n\n                typename colm_exp<EXP1>::type c1 = colm(m1,i);\n                typename colm_exp<EXP2>::type c2 = colm(m2,i);\n\n                DLIB_TEST(equal(c1 , c2));\n                DLIB_TEST(equal(colm(m1,i) , c2));\n                DLIB_TEST(equal(c1 , colm(m2,i)));\n                DLIB_TEST(equal(colm(m1,i) , colm(m2,i)));\n            }\n\n\n            // Get a bunch of columns at once to test out the reference\n            // counting and automatic cache expansion built into the symmetric_matrix_cache.  \n            // This test verifies that, for example, getting column 3 doesn't stomp on\n            // any of the previous columns.\n            typename colm_exp<EXP1>::type c1_0 = colm(m1,0);\n            typename colm_exp<EXP1>::type c1_1 = colm(m1,1);\n            typename colm_exp<EXP1>::type c1_2 = colm(m1,2);\n            typename colm_exp<EXP1>::type c1_3 = colm(m1,3);\n            typename colm_exp<EXP1>::type c1_4 = colm(m1,4);\n            typename colm_exp<EXP1>::type c1_5 = colm(m1,5);\n\n            typename colm_exp<EXP2>::type c2_0 = colm(m2,0);\n            typename colm_exp<EXP2>::type c2_1 = colm(m2,1);\n            typename colm_exp<EXP2>::type c2_2 = colm(m2,2);\n            typename colm_exp<EXP2>::type c2_3 = colm(m2,3);\n            typename colm_exp<EXP2>::type c2_4 = colm(m2,4);\n            typename colm_exp<EXP2>::type c2_5 = colm(m2,5);\n\n            DLIB_TEST(equal(c1_0, c2_0));\n            DLIB_TEST(equal(c1_1, c2_1));\n            DLIB_TEST(equal(c1_2, c2_2));\n            DLIB_TEST(equal(c1_3, c2_3));\n            DLIB_TEST(equal(c1_4, c2_4));\n            DLIB_TEST(equal(c1_5, c2_5));\n        }\n\n    // -----------------------------------\n\n        template <typename EXP1, typename EXP2>\n        void test_rowm_exp (\n            const matrix_exp<EXP1>& m1,\n            const matrix_exp<EXP2>& m2\n        )\n        {\n            for (long i = 0; i < m1.nc(); ++i)\n            {\n\n                typename rowm_exp<EXP1>::type r1 = rowm(m1,i);\n                typename rowm_exp<EXP2>::type r2 = rowm(m2,i);\n\n                DLIB_TEST(equal(r1 , r2));\n                DLIB_TEST(equal(rowm(m1,i) , r2));\n                DLIB_TEST(equal(r1 , rowm(m2,i)));\n                DLIB_TEST(equal(rowm(m1,i) , rowm(m2,i)));\n            }\n\n\n            // Get a bunch of rows at once to test out the reference\n            // counting and automatic cache expansion built into the symmetric_matrix_cache.  \n            // This test verifies that, for example, getting row 3 doesn't stomp on\n            // any of the previous rows.\n            typename rowm_exp<EXP1>::type r1_0 = rowm(m1,0);\n            typename rowm_exp<EXP1>::type r1_1 = rowm(m1,1);\n            typename rowm_exp<EXP1>::type r1_2 = rowm(m1,2);\n            typename rowm_exp<EXP1>::type r1_3 = rowm(m1,3);\n            typename rowm_exp<EXP1>::type r1_4 = rowm(m1,4);\n            typename rowm_exp<EXP1>::type r1_5 = rowm(m1,5);\n\n            typename rowm_exp<EXP2>::type r2_0 = rowm(m2,0);\n            typename rowm_exp<EXP2>::type r2_1 = rowm(m2,1);\n            typename rowm_exp<EXP2>::type r2_2 = rowm(m2,2);\n            typename rowm_exp<EXP2>::type r2_3 = rowm(m2,3);\n            typename rowm_exp<EXP2>::type r2_4 = rowm(m2,4);\n            typename rowm_exp<EXP2>::type r2_5 = rowm(m2,5);\n\n            DLIB_TEST(equal(r1_0, r2_0));\n            DLIB_TEST(equal(r1_1, r2_1));\n            DLIB_TEST(equal(r1_2, r2_2));\n            DLIB_TEST(equal(r1_3, r2_3));\n            DLIB_TEST(equal(r1_4, r2_4));\n            DLIB_TEST(equal(r1_5, r2_5));\n        }\n\n    // -----------------------------------\n\n        template <typename EXP1, typename EXP2>\n        void test_diag_exp (\n            const matrix_exp<EXP1>& m1,\n            const matrix_exp<EXP2>& m2\n        )\n        {\n\n            typename diag_exp<EXP1>::type c1 = diag(m1);\n            typename diag_exp<EXP2>::type c2 = diag(m2);\n\n            DLIB_TEST(equal(c1 , c2));\n            DLIB_TEST(equal(diag(m1) , c2));\n            DLIB_TEST(equal(c1 , diag(m2)));\n            DLIB_TEST(equal(diag(m1) , diag(m2)));\n        }\n\n    // -----------------------------------\n\n        void test_stuff (\n            long csize \n        )\n        {\n            print_spinner();\n            dlog << LINFO << \"csize: \"<< csize;\n            matrix<double> m = randm(10,10,rnd);\n\n            m = make_symmetric(m);\n\n            DLIB_TEST(equal(symmetric_matrix_cache<float>(m, csize), matrix_cast<float>(m)));\n            DLIB_TEST(equal(symmetric_matrix_cache<double>(m, csize), matrix_cast<double>(m)));\n\n            dlog << LINFO << \"test colm/rowm\";\n\n\n            for (long i = 0; i < m.nr(); ++i)\n            {\n                DLIB_TEST(equal(colm(symmetric_matrix_cache<float>(m, csize),i), colm(matrix_cast<float>(m),i)));\n                DLIB_TEST(equal(rowm(symmetric_matrix_cache<float>(m, csize),i), rowm(matrix_cast<float>(m),i)));\n                // things are supposed to be symmetric\n                DLIB_TEST(equal(colm(symmetric_matrix_cache<float>(m, csize),i), trans(rowm(matrix_cast<float>(m),i))));\n                DLIB_TEST(equal(rowm(symmetric_matrix_cache<float>(m, csize),i), trans(colm(matrix_cast<float>(m),i))));\n            }\n\n            dlog << LINFO << \"test diag\";\n            DLIB_TEST(equal(diag(symmetric_matrix_cache<float>(m,csize)), diag(matrix_cast<float>(m))));\n\n            test_colm_exp(symmetric_matrix_cache<float>(m,csize), matrix_cast<float>(m));\n            test_rowm_exp(symmetric_matrix_cache<float>(m,csize), matrix_cast<float>(m));\n            test_diag_exp(symmetric_matrix_cache<float>(m,csize), matrix_cast<float>(m));\n\n            test_colm_exp(tmp(symmetric_matrix_cache<float>(m,csize)), tmp(matrix_cast<float>(m)));\n            test_rowm_exp(symmetric_matrix_cache<float>(m,csize), tmp(matrix_cast<float>(m)));\n            test_diag_exp(tmp(symmetric_matrix_cache<float>(m,csize)), tmp(matrix_cast<float>(m)));\n        }\n\n\n        void perform_test (\n        )\n        {\n\n            for (int itr = 0; itr < 5; ++itr)\n            {\n                test_stuff(0);\n                test_stuff(1);\n                test_stuff(2);\n            }\n\n        }\n    };\n\n    // Create an instance of this object.  Doing this causes this test\n    // to be automatically inserted into the testing framework whenever this cpp file\n    // is linked into the project.  Note that since we are inside an unnamed-namespace \n    // we won't get any linker errors about the symbol a being defined multiple times. \n    test_symmetric_matrix_cache a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/tester.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#include <string>\n#include \"tester.h\"\n#include <cstdlib>\n#include <dlib/threads.h>\n\nnamespace test\n{\n// -----------------------------------------------------------------------------\n\n    bool be_verbose = true;\n\n// -----------------------------------------------------------------------------\n\n    static dlib::mutex spinner_mutex;\n    static dlib::mutex test_count_mutex;\n    dlib::uint64 test_count = 0;\n\n// -----------------------------------------------------------------------------\n\n    dlib::uint64 number_of_testing_statements_executed (\n    )\n    {\n        dlib::auto_mutex lock(test_count_mutex);\n        return test_count;\n    }\n\n    void increment_test_count (\n    )\n    {\n        test_count_mutex.lock();\n        ++test_count;\n        test_count_mutex.unlock();\n    }\n\n// -----------------------------------------------------------------------------\n\n    void check_test (\n        bool _exp,\n        long line,\n        const char* file,\n        const char* _exp_str\n    )\n    {\n        test_count_mutex.lock();\n        ++test_count;\n        test_count_mutex.unlock();\n        if ( !(_exp) )                                                         \n        {                                                                       \n            std::ostringstream dlib_o_out;                                       \n            dlib_o_out << \"\\n\\nError occurred at line \" << line << \".\\n\";    \n            dlib_o_out << \"Error occurred in file \" << file << \".\\n\";      \n            dlib_o_out << \"Failing expression was \" << _exp_str << \".\\n\";           \n            throw dlib::error(dlib_o_out.str());      \n        }\n    }                                                                      \n\n// -----------------------------------------------------------------------------\n\n    map_of_testers& testers (\n    )\n    {\n        static map_of_testers t;\n        return t;\n    }\n\n// -----------------------------------------------------------------------------\n\n    tester::\n    tester (\n        const std::string& switch_name_x,\n        const std::string& description_x,\n        unsigned long num_of_args_x\n    ) :\n        switch_name(switch_name_x),\n        description_(description_x),\n        num_of_args_(num_of_args_x)\n    {\n        using namespace std;\n        if (testers().is_in_domain(switch_name))\n        {\n            cerr << \"ERROR: More than one tester has been defined with the switch '\" << switch_name << \"'.\" << endl;\n            exit(1);\n        }\n\n        string temp(switch_name);\n        tester* t = this;\n        testers().add(temp,t);\n    }\n\n// -----------------------------------------------------------------------------\n\n    const std::string& tester::\n    cmd_line_switch (\n    ) const\n    {\n        return switch_name;\n    }\n\n// -----------------------------------------------------------------------------\n\n    const std::string& tester::\n    description (\n    ) const\n    {\n        return description_;\n    }\n\n// -----------------------------------------------------------------------------\n\n    unsigned long tester::\n    num_of_args (\n    ) const\n    {\n        return num_of_args_;\n    }\n\n// -----------------------------------------------------------------------------\n\n    void tester::\n    perform_test (\n    )\n    {\n    }\n\n// -----------------------------------------------------------------------------\n\n    void tester::\n    perform_test (\n        const std::string&  \n    )\n    {\n    }\n\n// -----------------------------------------------------------------------------\n\n    void tester::\n    perform_test (\n        const std::string&, \n        const std::string& \n    )\n    {\n    }\n\n// -----------------------------------------------------------------------------\n\n    void print_spinner (\n    )\n    {\n        if (be_verbose)\n        {\n            using namespace std;\n            dlib::auto_mutex M(spinner_mutex);\n            static int i = 0;\n            cout << \"\\b\\b\";\n            switch (i)\n            {\n                case 0: cout << '|'; break;\n                case 1: cout << '/'; break;\n                case 2: cout << '-'; break;\n                case 3: cout << '\\\\'; break;\n            }\n            cout << \" \" << flush;\n            i = (i+1)%4;\n        }\n    }\n\n// -----------------------------------------------------------------------------\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/tester.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TESTEr_\n#define DLIB_TESTEr_\n\n#include <iostream>\n#include <string>\n#include <dlib/map.h>\n#include <dlib/logger.h>\n#include <dlib/assert.h>\n#include <dlib/algs.h>\n#include <typeinfo>\n\n#ifdef  __INTEL_COMPILER\n// ignore the bogus warning about not overloading perform_test() all the way\n#pragma warning (disable: 654)\n#endif\n\n\n#define DLIB_TEST(_exp) check_test(_exp, __LINE__, __FILE__, #_exp);\n\n#define DLIB_TEST_MSG(_exp,_message)                                        \\\n    {increment_test_count(); if ( !(_exp) )                                 \\\n    {                                                                       \\\n        std::ostringstream dlib_o_out;                                       \\\n        dlib_o_out << \"\\n\\nError occurred at line \" << __LINE__ << \".\\n\";    \\\n        dlib_o_out << \"Error occurred in file \" << __FILE__ << \".\\n\";        \\\n        dlib_o_out << \"Failing expression was \" << #_exp << \".\\n\";           \\\n        dlib_o_out << _message << \"\\n\";                                      \\\n        throw dlib::error(dlib_o_out.str());                                 \\\n    }}\n\nnamespace test\n{\n    class tester;\n    typedef dlib::map<std::string,tester*>::kernel_1a_c map_of_testers;\n\n    map_of_testers& testers (\n    );\n\n// -----------------------------------------------------------------------------\n\n    void check_test (\n        bool _exp,\n        long line,\n        const char* file,\n        const char* _exp_str\n    );\n    \n// -----------------------------------------------------------------------------\n\n// This bool controls any cout statements in this program.  Only print to \n// standard out if we should be verbose.  The default is true\n    extern bool be_verbose;\n\n// -----------------------------------------------------------------------------\n\n    dlib::uint64 number_of_testing_statements_executed (\n    );\n    /*!\n        ensures\n            - returns the total number of DLIB_TEST and DLIB_TEST_MSG\n              statements executed since program startup.\n    !*/\n\n    void increment_test_count (\n    );\n    /*!\n        ensures\n            - increments number_of_testing_statements_executed()\n    !*/\n\n// -----------------------------------------------------------------------------\n\n    void print_spinner (\n    );\n    /*!\n        ensures\n            - reprints the spinner\n    !*/\n\n// -----------------------------------------------------------------------------\n\n    class tester\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a generic regression test.\n        !*/\n\n    public:\n\n        tester (\n            const std::string& switch_name,\n            const std::string& description_,\n            unsigned long num_of_args_ = 0\n        );\n        /*!\n            requires\n                - testers().is_in_domain(switch_name) == false\n            ensures\n                - #cmd_line_switch() == switch_name\n                - #description() == description_\n                - #num_of_args() == num_of_args_\n                - adds this tester to the testers() map.\n        !*/\n\n        virtual ~tester (\n        ){}\n\n        const std::string& cmd_line_switch (\n        ) const;\n        /*!\n            ensures\n                - returns the name of the command line switch for this tester.\n        !*/\n\n        const std::string& description (\n        ) const;\n        /*!\n            ensures\n                - returns the description of what this tester tests.\n        !*/\n\n        unsigned long num_of_args (\n        ) const;\n        /*!\n            ensures\n                - returns the number of arguments this test expects\n        !*/\n\n        virtual void perform_test (\n        );\n        /*!\n            requires\n                - is invoked when number_of_args() == 0\n            ensures\n                - performs the test and throws an exception \n                  derived from std::exception if the test fails.\n        !*/\n\n        virtual void perform_test (\n            const std::string& arg \n        );\n        /*!\n            requires\n                - is invoked when number_of_args() == 1\n            ensures\n                - performs the test and throws an exception \n                  derived from std::exception if the test fails.\n        !*/\n\n        virtual void perform_test (\n            const std::string& arg1, \n            const std::string& arg2 \n        );\n        /*!\n            requires\n                - is invoked when number_of_args() == 2\n            ensures\n                - performs the test and throws an exception \n                  derived from std::exception if the test fails.\n        !*/\n\n    private:\n\n    // ---------------------------------------------------------------------------\n    //             Implementation Details\n    // ---------------------------------------------------------------------------\n\n        /*!\n            CONVENTION\n                - switch_name == cmd_line_switch()\n                - description_ == description()\n                - num_of_args_ == num_of_args()\n                - test::tester[switch_name] == this\n        !*/\n\n        const std::string switch_name;\n        const std::string description_;\n        const unsigned long num_of_args_;\n    };\n\n}\n\n#endif // DLIB_TESTEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/thread_pool.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/misc_api.h>\n#include <dlib/threads.h>\n#include <dlib/any.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.thread_pool\");\n\n\n    struct some_struct : noncopyable\n    {\n        float val;\n    };\n\n    int global_var = 0;\n\n    struct add_functor\n    {\n        add_functor() { var = 1;}\n        add_functor(int v):var(v) {}\n\n        template <typename T, typename U, typename V>\n        void operator()(T a, U b, V& res)\n        {\n            dlib::sleep(20);\n            res = a + b;\n        }\n\n        void set_global_var() { global_var = 9; }\n        void set_global_var_const() const { global_var = 9; }\n\n        void set_global_var_arg1(int val) { global_var = val; }\n        void set_global_var_const_arg1(int val) const { global_var = val; }\n        void set_global_var_arg2(int val, int val2) { global_var = val+val2; }\n        void set_global_var_const_arg2(int val, int val2) const { global_var = val+val2; }\n\n        void operator()()\n        {\n            global_var = 9;\n        }\n\n        // use an any just so that if this object goes out of scope\n        // then var will get all messed up.\n        any var;\n        void operator()(int& a) { dlib::sleep(100); a = var.get<int>(); }\n        void operator()(int& a, int& b) { dlib::sleep(100); a = var.get<int>(); b = 2; }\n        void operator()(int& a, int& b, int& c) { dlib::sleep(100); a = var.get<int>(); b = 2; c = 3; }\n        void operator()(int& a, int& b, int& c, int& d) { dlib::sleep(100); a = var.get<int>(); b = 2; c = 3; d = 4; }\n    };\n\n\n    void set_global_var() {  global_var = 9; }\n\n    void gset_struct_to_zero (some_struct& a) { a.val = 0; }\n    void gset_to_zero (int& a) { a = 0; }\n    void gincrement (int& a) { ++a; }\n    void gadd (int a, const int& b, int& res) { dlib::sleep(20); res = a + b; }\n    void gadd1(int& a, int& res) { res += a; }\n    void gadd2 (int c, int a, const int& b, int& res) { dlib::sleep(20); res = a + b + c; }\n\n    class thread_pool_tester : public tester\n    {\n    public:\n        thread_pool_tester (\n        ) :\n            tester (\"test_thread_pool\",\n                    \"Runs tests on the thread_pool component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            add_functor f;\n            for (int num_threads= 0; num_threads < 4; ++num_threads)\n            {\n                future<int> a, b, c, res, d;\n                thread_pool tp(num_threads);\n                print_spinner();\n\n                future<some_struct> obj;\n\n\n                for (int i = 0; i < 4; ++i)\n                {\n                    a = 1;\n                    b = 2;\n                    c = 3;\n                    res = 4;\n\n\n                    DLIB_TEST(a==a);\n                    DLIB_TEST(a!=b);\n                    DLIB_TEST(a==1);\n\n                    tp.add_task(gset_to_zero, a);\n                    tp.add_task(gset_to_zero, b);\n                    tp.add_task(*this, &thread_pool_tester::set_to_zero, c);\n                    tp.add_task(gset_to_zero, res);\n                    DLIB_TEST(a == 0);\n                    DLIB_TEST(b == 0);\n                    DLIB_TEST(c == 0);\n                    DLIB_TEST(res == 0);\n\n\n                    tp.add_task(gincrement, a);\n                    tp.add_task(*this, &thread_pool_tester::increment, b);\n                    tp.add_task(*this, &thread_pool_tester::increment, c);\n                    tp.add_task(gincrement, res);\n\n                    DLIB_TEST(a == 1);\n                    DLIB_TEST(b == 1);\n                    DLIB_TEST(c == 1);\n                    DLIB_TEST(res == 1);\n\n                    tp.add_task(&gincrement, a);\n                    tp.add_task(*this, &thread_pool_tester::increment, b);\n                    tp.add_task(*this, &thread_pool_tester::increment, c);\n                    tp.add_task(&gincrement, res);\n                    tp.add_task(gincrement, a);\n                    tp.add_task(*this, &thread_pool_tester::increment, b);\n                    tp.add_task(*this, &thread_pool_tester::increment, c);\n                    tp.add_task(gincrement, res);\n\n                    DLIB_TEST(a == 3);\n                    DLIB_TEST(b == 3);\n                    DLIB_TEST(c == 3);\n                    DLIB_TEST(res == 3);\n\n                    tp.add_task(*this, &thread_pool_tester::increment, c);\n                    tp.add_task(gincrement, res);\n                    DLIB_TEST(c == 4);\n                    DLIB_TEST(res == 4);\n\n\n                    tp.add_task(gadd, a, b, res);\n                    DLIB_TEST(res == a+b);\n                    DLIB_TEST(res == 6);\n                    a = 3;\n                    b = 4;\n                    res = 99;\n                    DLIB_TEST(res == 99);\n                    tp.add_task(*this, &thread_pool_tester::add, a, b, res);\n                    DLIB_TEST(res == a+b);\n                    DLIB_TEST(res == 7);\n\n                    a = 1;\n                    b = 2;\n                    c = 3;\n                    res = 88;\n                    DLIB_TEST(res == 88);\n                    DLIB_TEST(a == 1);\n                    DLIB_TEST(b == 2);\n                    DLIB_TEST(c == 3);\n\n                    tp.add_task(gadd2, a, b, c, res);\n                    DLIB_TEST(res == 6);\n                    DLIB_TEST(a == 1);\n                    DLIB_TEST(b == 2);\n                    DLIB_TEST(c == 3);\n\n                    a = 1;\n                    b = 2;\n                    c = 3;\n                    res = 88;\n                    DLIB_TEST(res == 88);\n                    DLIB_TEST(a == 1);\n                    DLIB_TEST(b == 2);\n                    DLIB_TEST(c == 3);\n                    tp.add_task(*this, &thread_pool_tester::add2, a, b, c, res);\n                    DLIB_TEST(res == 6);\n                    DLIB_TEST(a == 1);\n                    DLIB_TEST(b == 2);\n                    DLIB_TEST(c == 3);\n\n                    a = 1;\n                    b = 2;\n                    c = 3;\n                    res = 88;\n                    tp.add_task(gadd1, a, b);\n                    DLIB_TEST(a == 1);\n                    DLIB_TEST(b == 3);\n                    a = 2;\n                    tp.add_task(*this, &thread_pool_tester::add1, a, b);\n                    DLIB_TEST(a == 2);\n                    DLIB_TEST(b == 5);\n\n\n                    val = 4;\n                    uint64 id = tp.add_task(*this, &thread_pool_tester::zero_val);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(val == 0);\n                    id = tp.add_task(*this, &thread_pool_tester::accum2, 1,2);\n                    tp.wait_for_all_tasks();\n                    DLIB_TEST(val == 3);\n                    id = tp.add_task(*this, &thread_pool_tester::accum1, 3);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(val == 6);\n\n\n                    obj.get().val = 8;\n                    DLIB_TEST(obj.get().val == 8);\n                    tp.add_task(gset_struct_to_zero, obj);\n                    DLIB_TEST(obj.get().val == 0);\n                    obj.get().val = 8;\n                    DLIB_TEST(obj.get().val == 8);\n                    tp.add_task(*this,&thread_pool_tester::set_struct_to_zero, obj);\n                    DLIB_TEST(obj.get().val == 0);\n\n                    a = 1;\n                    b = 2;\n                    res = 0;\n                    tp.add_task(f, a, b, res);\n                    DLIB_TEST(a == 1);\n                    DLIB_TEST(b == 2);\n                    DLIB_TEST(res == 3);\n\n\n                    global_var = 0;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task(&set_global_var);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 9);\n\n                    global_var = 0;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task(f);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 9);\n\n                    global_var = 0;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task(f, &add_functor::set_global_var);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 9);\n\n                    global_var = 0;\n                    a = 4;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task(f, &add_functor::set_global_var_arg1, a);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 4);\n\n                    global_var = 0;\n                    a = 4;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task_by_value(f, &add_functor::set_global_var_arg1, a);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 4);\n\n\n\n                    global_var = 0;\n                    a = 4;\n                    b = 3;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task(f, &add_functor::set_global_var_arg2, a, b);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 7);\n\n                    global_var = 0;\n                    a = 4;\n                    b = 3;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task_by_value(f, &add_functor::set_global_var_arg2, a, b);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 7);\n\n                    global_var = 0;\n                    a = 4;\n                    b = 3;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task(f, &add_functor::set_global_var_const_arg2, a, b);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 7);\n\n                    global_var = 0;\n                    a = 4;\n                    b = 3;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task_by_value(f, &add_functor::set_global_var_const_arg2, a, b);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 7);\n\n\n\n\n\n\n                    global_var = 0;\n                    a = 4;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task(f, &add_functor::set_global_var_const_arg1, a);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 4);\n\n                    global_var = 0;\n                    a = 4;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task_by_value(f, &add_functor::set_global_var_const_arg1, a);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 4);\n\n                    global_var = 0;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task_by_value(f, &add_functor::set_global_var);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 9);\n\n\n                    global_var = 0;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task(f, &add_functor::set_global_var_const);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 9);\n\n\n                    global_var = 0;\n                    DLIB_TEST(global_var == 0);\n                    id = tp.add_task_by_value(f, &add_functor::set_global_var_const);\n                    tp.wait_for_task(id);\n                    DLIB_TEST(global_var == 9);\n\n\n\n                }\n\n                // add this task just to to perterb the thread pool before it goes out of scope\n                tp.add_task(f, a, b, res);\n\n                for (int k = 0; k < 3; ++k)\n                {\n                    print_spinner();\n                    global_var = 0;\n                    tp.add_task_by_value(add_functor());\n                    tp.wait_for_all_tasks();\n                    DLIB_TEST(global_var == 9);\n\n                    a = 0; b = 0; c = 0; d = 0;\n                    tp.add_task_by_value(add_functor(), a);\n                    DLIB_TEST(a == 1);\n                    a = 0; b = 0; c = 0; d = 0;\n                    tp.add_task_by_value(add_functor(8), a, b);\n                    DLIB_TEST(a == 8);\n                    DLIB_TEST(b == 2);\n                    a = 0; b = 0; c = 0; d = 0;\n                    tp.add_task_by_value(add_functor(), a, b, c);\n                    DLIB_TEST(a == 1);\n                    DLIB_TEST(b == 2);\n                    DLIB_TEST(c == 3);\n                    a = 0; b = 0; c = 0; d = 0;\n                    tp.add_task_by_value(add_functor(5), a, b, c, d);\n                    DLIB_TEST(a == 5);\n                    DLIB_TEST(b == 2);\n                    DLIB_TEST(c == 3);\n                    DLIB_TEST(d == 4);\n                }\n\n            }\n        }\n\n        long val;\n        void accum1(long a) { val += a; }\n        void accum2(long a, long b) { val += a + b; }\n        void zero_val() { dlib::sleep(20); val = 0; }\n\n\n        void set_struct_to_zero (some_struct& a) { a.val = 0; }\n        void set_to_zero (int& a) { dlib::sleep(20); a = 0; }\n        void increment (int& a) const { dlib::sleep(20); ++a; }\n        void add (int a, const int& b, int& res) { dlib::sleep(20); res = a + b; }\n        void add1(int& a, int& res) const { res += a; }\n        void add2 (int c, int a, const int& b, int& res) { res = a + b + c; }\n\n\n    } a;\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/threads.cpp",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/misc_api.h>\n#include <dlib/threads.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.threads\");\n\n    class threads_tester : public tester\n    {\n    public:\n        threads_tester (\n        ) :\n            tester (\"test_threads\",\n                    \"Runs tests on the threads component.\"),\n            sm(cm)\n        {}\n\n        thread_specific_data<int> tsd;\n        rmutex cm;\n        rsignaler sm;\n        int count;\n        bool failure;\n\n        void perform_test (\n        )\n        {\n            failure = false;\n            print_spinner();\n\n\n            count = 10;\n            if (!create_new_thread<threads_tester,&threads_tester::thread1>(*this)) failure = true;\n            if (!create_new_thread<threads_tester,&threads_tester::thread2>(*this)) failure = true;\n            if (!create_new_thread<threads_tester,&threads_tester::thread3>(*this)) failure = true;\n            if (!create_new_thread<threads_tester,&threads_tester::thread4>(*this)) failure = true;\n            if (!create_new_thread<threads_tester,&threads_tester::thread5>(*this)) failure = true;\n            if (!create_new_thread<threads_tester,&threads_tester::thread6>(*this)) failure = true;\n            if (!create_new_thread<threads_tester,&threads_tester::thread7>(*this)) failure = true;\n            if (!create_new_thread<threads_tester,&threads_tester::thread8>(*this)) failure = true;\n            if (!create_new_thread<threads_tester,&threads_tester::thread9>(*this)) failure = true;\n            if (!create_new_thread<threads_tester,&threads_tester::thread10>(*this)) failure = true;\n\n            thread(66);\n\n            // this should happen in the main program thread\n            if (is_dlib_thread())\n                failure = true;\n\n            auto_mutex M(cm);\n            while (count > 0 && !failure)\n                sm.wait();\n\n\n            DLIB_TEST(!failure);\n        }\n\n        void thread_end_handler (\n        )\n        {\n            auto_mutex M(cm);\n            --count;\n            if (count == 0)\n                sm.signal();\n        }\n\n        void thread1() { thread(1); }\n        void thread2() \n        { \n            thread(2); \n            if (is_dlib_thread() == false)\n                failure = true;\n        }\n        void thread3() { thread(3); }\n        void thread4() { thread(4); }\n        void thread5() { thread(5); }\n        void thread6() { thread(6); }\n        void thread7() { thread(7); }\n        void thread8() { thread(8); }\n        void thread9() { thread(9); }\n        void thread10() { thread(10); }\n\n        void thread (\n            int num\n        )\n        {\n            dlog << LTRACE << \"starting thread num \" << num;\n            if (is_dlib_thread())\n                register_thread_end_handler(*this,&threads_tester::thread_end_handler);\n            tsd.data() = num;\n            for (int i = 0; i < 0x3FFFF; ++i)\n            {\n                if ((i&0xFFF) == 0)\n                {\n                    print_spinner();\n                    dlib::sleep(10);\n                }\n                // if this isn't equal to num then there is a problem with the thread specific data stuff\n                if (tsd.data() != num)\n                {\n                    auto_mutex M(cm);\n                    failure = true;\n                    sm.signal();\n                }\n            }\n            dlog << LTRACE << \"ending of thread num \" << num;\n\n        }\n    } a;\n\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/timer.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n\n#include <dlib/timer.h>\n#include <dlib/timeout.h>\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n\n    logger dlog(\"test.timer\");\n\n    class timer_test_helper\n    {\n    public:\n        mutex m;\n        int count;\n        dlib::uint64 timestamp;\n        dlib::timestamper ts;\n\n        timer_test_helper():count(0), timestamp(0){}\n        void add() \n        { \n            m.lock(); \n            ++count; \n            m.unlock(); \n        }\n\n        void delayed_add()\n        {\n            dlib::sleep(1000);\n            print_spinner();\n            add();\n        }\n\n        void set_timestamp()\n        {\n            m.lock();\n            timestamp = ts.get_timestamp();\n            dlog << LTRACE << \"in set_timestamp(), time is \" << timestamp;\n            dlib::sleep(1);\n            print_spinner();\n            m.unlock();\n        }\n    };\n\n    template <\n        typename timer_t\n        >\n    void timer_test2 (\n    )\n    /*!\n        requires\n            - timer_t is an implementation of dlib/timer/timer_abstract.h is instantiated \n              timer_test_helper\n        ensures\n            - runs tests on timer_t for compliance with the specs \n    !*/\n    {        \n        for (int j = 0; j < 4; ++j)\n        {\n            print_spinner();\n            timer_test_helper h;\n\n            timer_t t1(h,&timer_test_helper::set_timestamp);\n            t1.set_delay_time(0);\n            dlog << LTRACE << \"t1.start()\";\n            t1.start();\n\n            dlib::sleep(60);\n            print_spinner();\n            t1.stop_and_wait();\n\n            dlib::uint64 cur_time = h.ts.get_timestamp();\n            dlog << LTRACE << \"get current time: \" << cur_time;\n\n            // make sure the action function has been called recently\n            DLIB_TEST_MSG((cur_time-h.timestamp)/1000 < 30, (cur_time-h.timestamp)/1000);\n\n        }\n    }\n\n    template <\n        typename timer_t\n        >\n    void timer_test (\n    )\n    /*!\n        requires\n            - timer_t is an implementation of dlib/timer/timer_abstract.h is instantiated \n              timer_test_helper\n        ensures\n            - runs tests on timer_t for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n        for (int j = 0; j < 3; ++j)\n        {\n            timer_test_helper h;\n\n            timer_t t1(h,&timer_test_helper::add);\n            timer_t t2(h,&timer_test_helper::add);\n            timer_t t3(h,&timer_test_helper::add);\n\n            DLIB_TEST(t1.delay_time() == 1000);\n            DLIB_TEST(t2.delay_time() == 1000);\n            DLIB_TEST(t3.delay_time() == 1000);\n            DLIB_TEST(t1.is_running() == false);\n            DLIB_TEST(t2.is_running() == false);\n            DLIB_TEST(t3.is_running() == false);\n            DLIB_TEST(t1.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t2.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t3.action_function() == &timer_test_helper::add);\n            DLIB_TEST(&t1.action_object() == &h);\n            DLIB_TEST(&t2.action_object() == &h);\n            DLIB_TEST(&t3.action_object() == &h);\n\n            t1.set_delay_time(1000);\n            t2.set_delay_time(500);\n            t3.set_delay_time(200);\n\n            DLIB_TEST(t1.delay_time() == 1000);\n            DLIB_TEST(t2.delay_time() == 500);\n            DLIB_TEST(t3.delay_time() == 200);\n            DLIB_TEST(t1.is_running() == false);\n            DLIB_TEST(t2.is_running() == false);\n            DLIB_TEST(t3.is_running() == false);\n            DLIB_TEST(t1.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t2.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t3.action_function() == &timer_test_helper::add);\n            DLIB_TEST(&t1.action_object() == &h);\n            DLIB_TEST(&t2.action_object() == &h);\n            DLIB_TEST(&t3.action_object() == &h);\n            dlib::sleep(1100);\n            print_spinner();\n            DLIB_TEST(h.count == 0);\n\n            t1.stop_and_wait();\n            t2.stop_and_wait();\n            t3.stop_and_wait();\n\n            dlib::sleep(1100);\n            print_spinner();\n            DLIB_TEST(h.count == 0);\n            DLIB_TEST(t1.delay_time() == 1000);\n            DLIB_TEST(t2.delay_time() == 500);\n            DLIB_TEST(t3.delay_time() == 200);\n            DLIB_TEST(t1.is_running() == false);\n            DLIB_TEST(t2.is_running() == false);\n            DLIB_TEST(t3.is_running() == false);\n            DLIB_TEST(t1.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t2.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t3.action_function() == &timer_test_helper::add);\n            DLIB_TEST(&t1.action_object() == &h);\n            DLIB_TEST(&t2.action_object() == &h);\n            DLIB_TEST(&t3.action_object() == &h);\n\n            t1.start();\n            t2.start();\n            t3.start();\n\n            DLIB_TEST(t1.delay_time() == 1000);\n            DLIB_TEST(t2.delay_time() == 500);\n            DLIB_TEST(t3.delay_time() == 200);\n            DLIB_TEST(t1.is_running() == true);\n            DLIB_TEST(t2.is_running() == true);\n            DLIB_TEST(t3.is_running() == true);\n            DLIB_TEST(t1.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t2.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t3.action_function() == &timer_test_helper::add);\n            DLIB_TEST(&t1.action_object() == &h);\n            DLIB_TEST(&t2.action_object() == &h);\n            DLIB_TEST(&t3.action_object() == &h);\n\n            t1.stop();\n            t2.stop();\n            t3.stop();\n\n            DLIB_TEST(t1.delay_time() == 1000);\n            DLIB_TEST(t2.delay_time() == 500);\n            DLIB_TEST(t3.delay_time() == 200);\n            DLIB_TEST(t1.is_running() == false);\n            DLIB_TEST(t2.is_running() == false);\n            DLIB_TEST(t3.is_running() == false);\n            DLIB_TEST(t1.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t2.action_function() == &timer_test_helper::add);\n            DLIB_TEST(t3.action_function() == &timer_test_helper::add);\n            DLIB_TEST(&t1.action_object() == &h);\n            DLIB_TEST(&t2.action_object() == &h);\n            DLIB_TEST(&t3.action_object() == &h);\n\n            DLIB_TEST(h.count == 0);\n            dlib::sleep(1100);\n            print_spinner();\n            DLIB_TEST(h.count == 0);\n\n            for (int i = 1; i <= 3; ++i)\n            {\n                t1.start();\n                t2.start();\n                t3.start();\n\n                DLIB_TEST(t1.is_running() == true);\n                DLIB_TEST(t2.is_running() == true);\n                DLIB_TEST(t3.is_running() == true);\n\n                dlib::sleep(1100);\n                print_spinner();\n                // this should allow the timers to trigger 8 times\n                t1.stop();\n                t2.stop();\n                t3.stop();\n\n                DLIB_TEST_MSG(h.count == 8*i,\"h.count: \" << h.count << \" i: \" << i);\n                dlib::sleep(1100);\n                DLIB_TEST_MSG(h.count == 8*i,\"h.count: \" << h.count << \" i: \" << i);\n            }\n\n\n            t1.stop_and_wait();\n\n            h.count = 0;\n            t1.start();\n            dlib::sleep(300);\n            print_spinner();\n            DLIB_TEST_MSG(h.count == 0,h.count);\n            t1.set_delay_time(400);\n            dlib::sleep(200);\n            print_spinner();\n            DLIB_TEST_MSG(h.count == 1,h.count);\n            dlib::sleep(250);\n            print_spinner();\n            DLIB_TEST_MSG(h.count == 1,h.count);\n            dlib::sleep(100);\n            print_spinner();\n            DLIB_TEST_MSG(h.count == 2,h.count);\n            t1.set_delay_time(2000);\n            DLIB_TEST_MSG(h.count == 2,h.count);\n            dlib::sleep(1000);\n            print_spinner();\n            DLIB_TEST_MSG(h.count == 2,h.count);\n            t1.clear();\n\n            h.count = 0;\n            t3.start();\n            DLIB_TEST(t3.is_running() == true);\n            DLIB_TEST(t3.delay_time() == 200);\n            DLIB_TEST_MSG(h.count == 0,h.count);\n            t3.clear();\n            DLIB_TEST(t3.is_running() == false);\n            DLIB_TEST(t3.delay_time() == 1000);\n            DLIB_TEST_MSG(h.count == 0,h.count);\n            dlib::sleep(200);\n            print_spinner();\n            DLIB_TEST(t3.is_running() == false);\n            DLIB_TEST(t3.delay_time() == 1000);\n            DLIB_TEST_MSG(h.count == 0,h.count);\n\n\n            {\n                h.count = 0;\n                timer_t t4(h,&timer_test_helper::delayed_add);\n                t4.set_delay_time(100);\n                t4.start();\n                DLIB_TEST_MSG(h.count == 0,h.count);\n                dlib::sleep(400);\n                print_spinner();\n                DLIB_TEST_MSG(h.count == 0,h.count);\n                t4.stop_and_wait();\n                DLIB_TEST_MSG(h.count == 1,h.count);\n                DLIB_TEST(t4.is_running() == false);\n            }\n\n            {\n                h.count = 0;\n                timer_t t4(h,&timer_test_helper::delayed_add);\n                t4.set_delay_time(100);\n                t4.start();\n                DLIB_TEST_MSG(h.count == 0,h.count);\n                dlib::sleep(400);\n                print_spinner();\n                DLIB_TEST_MSG(h.count == 0,h.count);\n                t4.clear();\n                DLIB_TEST(t4.is_running() == false);\n                DLIB_TEST_MSG(h.count == 0,h.count);\n                t4.stop_and_wait();\n                DLIB_TEST_MSG(h.count == 1,h.count);\n                DLIB_TEST(t4.is_running() == false);\n            }\n\n            {\n                h.count = 0;\n                timer_t t5(h,&timer_test_helper::delayed_add);\n                t5.set_delay_time(100);\n                t5.start();\n                DLIB_TEST_MSG(h.count == 0,h.count);\n                dlib::sleep(400);\n                print_spinner();\n                DLIB_TEST_MSG(h.count == 0,h.count);\n            }\n            DLIB_TEST_MSG(h.count == 1,h.count);\n\n        }\n\n    }\n\n\n\n\n    class timer_tester : public tester\n    {\n    public:\n        timer_tester (\n        ) :\n            tester (\"test_timer\",\n                    \"Runs tests on the timer component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing timer_heavy with test_timer\";\n            timer_test<timer_heavy<timer_test_helper> >  ();\n            dlog << LINFO << \"testing timer_heavy with test_timer2\";\n            timer_test2<timer_heavy<timer_test_helper> >  ();\n\n            dlog << LINFO << \"testing timer with test_timer\";\n            timer_test<timer<timer_test_helper> >  ();\n            dlog << LINFO << \"testing timer with test_timer2\";\n            timer_test2<timer<timer_test_helper> >  ();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/tokenizer.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <string>\n#include <sstream>\n\n#include <dlib/tokenizer.h>\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace std;\n    using namespace dlib;\n  \n    logger dlog(\"test.tokenizer\");\n\n    template <\n        typename tok\n        >\n    void tokenizer_kernel_test (\n    )\n    /*!\n        requires\n            - tok is an implementation of tokenizer_kernel_abstract.h\n        ensures\n            - runs tests on tok for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n\n        tok test;\n\n        DLIB_TEST(test.numbers() == \"0123456789\");\n        DLIB_TEST(test.uppercase_letters() == \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\");\n        DLIB_TEST(test.lowercase_letters() == \"abcdefghijklmnopqrstuvwxyz\");\n\n        DLIB_TEST_MSG(test.get_identifier_body() == \"_\" + test.lowercase_letters() +\n                     test.uppercase_letters() + test.numbers(),\"\");\n        DLIB_TEST_MSG(test.get_identifier_head() == \"_\" + test.lowercase_letters() +\n                     test.uppercase_letters(),\"\");\n\n        DLIB_TEST(test.stream_is_set() == false);\n        test.clear();\n        DLIB_TEST(test.stream_is_set() == false);\n\n        DLIB_TEST_MSG(test.get_identifier_body() == \"_\" + test.lowercase_letters() +\n                     test.uppercase_letters() + test.numbers(),\"\");\n        DLIB_TEST_MSG(test.get_identifier_head() == \"_\" + test.lowercase_letters() +\n                     test.uppercase_letters(),\"\");\n\n        tok test2;\n\n        ostringstream sout;\n        istringstream sin;\n        test2.set_stream(sin);\n\n        DLIB_TEST(test2.stream_is_set());\n        DLIB_TEST(&test2.get_stream() == &sin);\n\n        int type;\n        string token;\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::END_OF_FILE);\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::END_OF_FILE);\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::END_OF_FILE);            \n\n\n        sin.clear();\n        sin.str(\"  The cat 123asdf1234 ._ \\n test.\");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST(token == \"  \");\n\n        DLIB_TEST(test2.peek_type() == tok::IDENTIFIER);\n        DLIB_TEST(test2.peek_token() == \"The\"); \n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"The\");            \n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST(token == \" \");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"cat\");            \n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST(token == \" \");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::NUMBER);\n        DLIB_TEST_MSG(token == \"123\",\"token: \" << token);\n\n        DLIB_TEST(test2.peek_type() == tok::IDENTIFIER);\n        DLIB_TEST(test2.peek_token() == \"asdf1234\");\n        DLIB_TEST(test2.peek_type() == tok::IDENTIFIER);\n        DLIB_TEST(test2.peek_token() == \"asdf1234\");\n        DLIB_TEST(test2.peek_type() == tok::IDENTIFIER);\n        DLIB_TEST(test2.peek_token() == \"asdf1234\");\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"asdf1234\");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(token == \" \",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::CHAR);\n        DLIB_TEST_MSG(token == \".\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"_\");\n\n        DLIB_TEST(test2.peek_type() == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(test2.peek_token() == \" \",\"token: \\\"\" << token << \"\\\"\" <<\n                     \"\\ntoken size: \" << (unsigned int)token.size());\n\n        swap(test,test2);\n\n        DLIB_TEST(test2.stream_is_set() == false);\n\n        DLIB_TEST(test.peek_type() == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(test.peek_token() == \" \",\"token: \\\"\" << token << \"\\\"\" <<\n                     \"\\ntoken size: \" << (unsigned int)token.size());\n        test.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(token == \" \",\"token: \\\"\" << token << \"\\\"\" <<\n                     \"\\ntoken size: \" << (unsigned int)token.size());\n\n        test.get_token(type,token);\n        DLIB_TEST_MSG(type == tok::END_OF_LINE,\"token: \" << token);\n        DLIB_TEST_MSG(token == \"\\n\",\"token: \" << token);\n\n        swap(test,test2);\n        DLIB_TEST(test.stream_is_set() == false);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(token == \" \",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST_MSG(token == \"test\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::CHAR);\n        DLIB_TEST_MSG(token == \".\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::END_OF_FILE);\n\n\n\n\n\n\n\n\n\n\n        test2.set_identifier_token(\"_\" + test.uppercase_letters() +\n                                   test.lowercase_letters(),test.numbers() + \"_\" + test.uppercase_letters()\n                                   +test.lowercase_letters());\n\n\n        sin.clear();\n        sin.str(\"  The cat 123asdf1234 ._ \\n\\r test.\");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST(token == \"  \");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"The\");            \n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST(token == \" \");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"cat\");            \n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST(token == \" \");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::NUMBER);\n        DLIB_TEST_MSG(token == \"123\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"asdf1234\");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(token == \" \",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::CHAR);\n        DLIB_TEST_MSG(token == \".\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"_\");\n\n        swap(test,test2);\n\n        DLIB_TEST(test2.stream_is_set() == false);\n\n        test.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(token == \" \",\"token: \\\"\" << token << \"\\\"\" <<\n                     \"\\ntoken size: \" << (unsigned int)token.size());\n\n        test.get_token(type,token);\n        DLIB_TEST_MSG(type == tok::END_OF_LINE,\"token: \" << token);\n        DLIB_TEST_MSG(token == \"\\n\",\"token: \" << token);\n\n        swap(test,test2);\n        DLIB_TEST(test.stream_is_set() == false);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(token == \"\\r \",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST_MSG(token == \"test\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::CHAR);\n        DLIB_TEST_MSG(token == \".\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::END_OF_FILE);\n\n\n\n\n\n\n\n\n\n\n\n\n\n        test2.set_identifier_token(test.uppercase_letters() +\n                                   test.lowercase_letters(),test.numbers() + test.uppercase_letters()\n                                   +test.lowercase_letters());\n\n\n        sin.clear();\n        sin.str(\"  The cat 123as_df1234 ._ \\n test.\");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST(token == \"  \");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"The\");            \n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST(token == \" \");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"cat\");            \n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST(token == \" \");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::NUMBER);\n        DLIB_TEST_MSG(token == \"123\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"as\");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::CHAR);\n        DLIB_TEST_MSG(token == \"_\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST(token == \"df1234\");\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(token == \" \",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::CHAR);\n        DLIB_TEST_MSG(token == \".\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::CHAR);\n        DLIB_TEST(token == \"_\");\n\n        swap(test,test2);\n\n        DLIB_TEST(test2.stream_is_set() == false);\n\n        test.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(token == \" \",\"token: \\\"\" << token << \"\\\"\" <<\n                     \"\\ntoken size: \" << (unsigned int)token.size());\n\n        test.get_token(type,token);\n        DLIB_TEST_MSG(type == tok::END_OF_LINE,\"token: \" << token);\n        DLIB_TEST_MSG(token == \"\\n\",\"token: \" << token);\n\n        swap(test,test2);\n        DLIB_TEST(test.stream_is_set() == false);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::WHITE_SPACE);\n        DLIB_TEST_MSG(token == \" \",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::IDENTIFIER);\n        DLIB_TEST_MSG(token == \"test\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::CHAR);\n        DLIB_TEST_MSG(token == \".\",\"token: \" << token);\n\n        test2.get_token(type,token);\n        DLIB_TEST(type == tok::END_OF_FILE);\n\n\n    }\n\n\n\n\n\n    class tokenizer_tester : public tester\n    {\n    public:\n        tokenizer_tester (\n        ) :\n            tester (\"test_tokenizer\",\n                    \"Runs tests on the tokenizer component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"testing kernel_1a\";\n            tokenizer_kernel_test<tokenizer::kernel_1a>  ();\n            dlog << LINFO << \"testing kernel_1a_c\";\n            tokenizer_kernel_test<tokenizer::kernel_1a_c>();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/trust_region.cpp",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/optimization.h>\n#include \"optimization_test_functions.h\"\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n#include \"../rand.h\"\n\n#include \"tester.h\"\n\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n    using namespace dlib::test_functions;\n\n    logger dlog(\"test.trust_region\");\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    struct neg_rosen_model\n    {\n        typedef matrix<T,0,1> column_vector;\n        typedef matrix<T,0,0> general_matrix;\n\n        T operator() ( column_vector x) const\n        {\n            return -static_cast<T>(rosen<T>(x));\n        }\n\n        void get_derivative_and_hessian (\n            const column_vector& x,\n            column_vector& d,\n            general_matrix& h\n        ) const \n        {\n            d = -matrix_cast<T>(rosen_derivative<T>(x));\n            h = -matrix_cast<T>(rosen_hessian<T>(x));\n        }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    dlib::rand rnd;\n\n    template <typename T>\n    void test_with_rosen()\n    {\n        print_spinner();\n\n        matrix<T,2,1> ans;\n        ans = 1,1;\n\n        matrix<T,2,1> p = 100*matrix_cast<T>(randm(2,1,rnd)) - 50;\n\n        T obj = find_min_trust_region(objective_delta_stop_strategy(1e-12, 100), rosen_function_model<T>(), p);\n\n        DLIB_TEST_MSG(std::abs(obj) < 1e-10, \"obj: \" << obj);\n        DLIB_TEST_MSG(length(p-ans) < 1e-5, \"length(p): \" << length(p-ans));\n\n        matrix<T,0,1> p2 = 100*matrix_cast<T>(randm(2,1,rnd)) - 50;\n        obj = find_max_trust_region(objective_delta_stop_strategy(1e-12, 100), neg_rosen_model<T>(), p2);\n\n        DLIB_TEST_MSG(std::abs(obj) < 1e-10, \"obj: \" << obj);\n        DLIB_TEST_MSG(length(p-ans) < 1e-5, \"length(p): \" << length(p-ans));\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_trust_region_sub_problem()\n    {\n        dlog << LINFO << \"subproblem test 1\";\n        {\n            matrix<double,2,2> B;\n            B = 1, 0,\n                0, 1;\n\n            matrix<double,2,1> g, p, ans;\n            g = 0;\n\n            ans = 0;\n\n            solve_trust_region_subproblem(B,g,1,p, 0.001, 10);\n\n            DLIB_TEST(length(p-ans) < 1e-10);\n            solve_trust_region_subproblem(B,g,1,p, 0.001, 1);\n            DLIB_TEST(length(p-ans) < 1e-10);\n        }\n\n        dlog << LINFO << \"subproblem test 2\";\n        {\n            matrix<double,2,2> B;\n            B = 1, 0,\n                0, 1;\n\n            B *= 0.1;\n\n            matrix<double,2,1> g, p, ans;\n            g = 1;\n\n            ans = -g / length(g);\n\n            solve_trust_region_subproblem(B,g,1,p, 1e-6, 20);\n\n            DLIB_TEST(length(p-ans) < 1e-4);\n        }\n\n        dlog << LINFO << \"subproblem test 3\";\n        {\n            matrix<double,2,2> B;\n            B = 0, 0,\n                0, 0;\n\n            matrix<double,2,1> g, p, ans;\n            g = 1;\n\n            ans = -g / length(g);\n\n            solve_trust_region_subproblem(B,g,1,p, 1e-6, 20);\n\n            dlog << LINFO << \"ans: \" << trans(ans);\n            dlog << LINFO << \"p: \" << trans(p);\n            DLIB_TEST(length(p-ans) < 1e-4);\n        }\n        return;\n\n        dlog << LINFO << \"subproblem test 4\";\n        {\n            matrix<double,2,2> B;\n            B = 2, 0,\n                0, -1;\n\n\n            matrix<double,2,1> g, p, ans;\n            g = 0;\n\n            ans = 0, -1;\n\n            solve_trust_region_subproblem(B,g,1,p, 1e-6, 20);\n\n            DLIB_TEST(length(p-ans) < 1e-4);\n        }\n\n\n        dlog << LINFO << \"subproblem test 5\";\n        {\n            matrix<double,2,2> B;\n            B = 2, 0,\n                0, -1;\n\n\n            matrix<double,2,1> g, p, ans;\n            g = 0, 1;\n\n            ans = 0, -1;\n\n            solve_trust_region_subproblem(B,g,1,p, 1e-6, 20);\n\n            DLIB_TEST(length(p-ans) < 1e-4);\n        }\n\n        dlog << LINFO << \"subproblem test 6\";\n        for (int i = 0; i < 10; ++i)\n        {\n            matrix<double,10,10> B;\n\n            B = randm(10,10, rnd);\n\n            B = 0.01*B*trans(B);\n\n\n            matrix<double,10,1> g, p, ans;\n            g = 1;\n\n            solve_trust_region_subproblem(B,g,1,p, 1e-6, 20);\n\n            DLIB_TEST(std::abs(length(p) - 1) < 1e-4);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void test_problems()\n    {\n        print_spinner();\n        {\n            matrix<double,4,1> ch;\n\n            ch = brown_start();\n\n            find_min_trust_region(objective_delta_stop_strategy(1e-7, 80),\n                                  brown_function_model(),\n                                  ch);\n\n            dlog << LINFO << \"brown obj: \" << brown(ch);\n            dlog << LINFO << \"brown der: \" << length(brown_derivative(ch));\n            dlog << LINFO << \"brown error: \" << length(ch - brown_solution());\n\n            DLIB_TEST(length(ch - brown_solution()) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<double,2,1> ch;\n\n            ch = rosen_start<double>();\n\n            find_min_trust_region(objective_delta_stop_strategy(1e-7, 80),\n                                  rosen_function_model<double>(),\n                                  ch);\n\n            dlog << LINFO << \"rosen obj: \" << rosen(ch);\n            dlog << LINFO << \"rosen der: \" << length(rosen_derivative(ch));\n            dlog << LINFO << \"rosen error: \" << length(ch - rosen_solution<double>());\n\n            DLIB_TEST(length(ch - rosen_solution<double>()) < 1e-5);\n        }\n\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(2);\n\n            find_min_trust_region(objective_delta_stop_strategy(1e-7, 80),\n                                  chebyquad_function_model(),\n                                  ch);\n\n            dlog << LINFO << \"chebyquad 2 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"chebyquad 2 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"chebyquad 2 error: \" << length(ch - chebyquad_solution(2));\n\n            DLIB_TEST(length(ch - chebyquad_solution(2)) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(4);\n\n            find_min_trust_region(objective_delta_stop_strategy(1e-7, 80),\n                                  chebyquad_function_model(),\n                                  ch);\n\n            dlog << LINFO << \"chebyquad 4 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"chebyquad 4 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"chebyquad 4 error: \" << length(ch - chebyquad_solution(4));\n\n            DLIB_TEST(length(ch - chebyquad_solution(4)) < 1e-5);\n        }\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(6);\n\n            find_min_trust_region(objective_delta_stop_strategy(1e-12, 80),\n                                  chebyquad_function_model(),\n                                  ch);\n\n            dlog << LINFO << \"chebyquad 6 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"chebyquad 6 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"chebyquad 6 error: \" << length(ch - chebyquad_solution(6));\n\n            DLIB_TEST(length(ch - chebyquad_solution(6)) < 1e-5);\n\n        }\n        print_spinner();\n        {\n            matrix<double,0,1> ch;\n\n            ch = chebyquad_start(8);\n\n            find_min_trust_region(objective_delta_stop_strategy(1e-10, 80),\n                                  chebyquad_function_model(),\n                                  ch);\n\n            dlog << LINFO << \"chebyquad 8 obj: \" << chebyquad(ch);\n            dlog << LINFO << \"chebyquad 8 der: \" << length(chebyquad_derivative(ch));\n            dlog << LINFO << \"chebyquad 8 error: \" << length(ch - chebyquad_solution(8));\n\n            DLIB_TEST(length(ch - chebyquad_solution(8)) < 1e-5);\n        }\n\n    }\n\n\n\n    class optimization_tester : public tester\n    {\n    public:\n        optimization_tester (\n        ) :\n            tester (\"test_trust_region\",\n                    \"Runs tests on the trust region optimization component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            dlog << LINFO << \"test with rosen<float>\";\n            for (int i = 0; i < 50; ++i)\n                test_with_rosen<float>();\n\n            dlog << LINFO << \"test with rosen<double>\";\n            for (int i = 0; i < 50; ++i)\n                test_with_rosen<double>();\n\n\n            test_trust_region_sub_problem();\n\n            test_problems();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/tuple.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/tuple.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.tuple\");\n\n    struct nil \n    {\n        template <typename T>\n        void operator() (\n            const T& \n        ) const\n        {\n        }\n    };\n\n\n    struct inc \n    {\n        template <typename T>\n        void operator() (\n            T& a\n        ) const\n        {\n            a += 1;\n        }\n    };\n\n\n    template <typename T>\n    void check_const (\n        const T& t\n    )\n    {\n        t.template get<0>();\n\n        typedef typename T::template get_type<0>::type type0;\n        t.template get<type0>();\n        t.template index<type0>();\n    }\n\n    template <typename T>\n    void check_nonconst (\n        T& t\n    )\n    {\n        t.template get<0>();\n\n        typedef typename T::template get_type<0>::type type0;\n        t.template get<type0>();\n        t.template index<type0>();\n    }\n\n    void tuple_test (\n    )\n    /*!\n        ensures\n            - runs tests on tuple functions for compliance with the specs \n    !*/\n    {        \n\n        print_spinner();\n\n        using dlib::tuple;\n\n        tuple<> a;\n        tuple<int> b;\n        tuple<int, float> c;\n\n\n        a.get<1>();\n        a.get<2>();\n        a.get<3>();\n        a.get<4>();\n        a.get<5>();\n\n        check_nonconst(b);\n        check_nonconst(c);\n        check_const(b);\n        check_const(c);\n\n        COMPILE_TIME_ASSERT((is_same_type<tuple<>::get_type<0>::type, null_type>::value));\n        COMPILE_TIME_ASSERT((is_same_type<tuple<int>::get_type<0>::type, int>::value));\n        COMPILE_TIME_ASSERT((is_same_type<tuple<int,float>::get_type<0>::type, int>::value));\n        COMPILE_TIME_ASSERT((is_same_type<tuple<int,float>::get_type<1>::type, float>::value));\n        COMPILE_TIME_ASSERT((is_same_type<tuple<int,float>::get_type<2>::type, null_type>::value));\n\n        b.get<0>() = 8;\n        DLIB_TEST(b.get<int>() == 8);\n        DLIB_TEST(b.index<int>() == 0);\n\n        c.get<0>() = 9;\n        DLIB_TEST(c.get<int>() == 9);\n        DLIB_TEST(c.index<int>() == 0);\n        c.get<1>() = 3.0;\n        DLIB_TEST(c.get<float>() == 3.0);\n        DLIB_TEST(c.index<float>() == 1);\n\n\n\n        {\n            typedef tuple<int, short, long> T;\n            T a, b;\n            a.get<0>() = 1;\n            a.get<1>() = 3;\n            a.get<2>() = 2;\n\n            b = a;\n\n            inc i;\n            nil n;\n            a.for_each(inc());\n            a.for_each(i);\n            const_cast<const T&>(a).for_each(nil());\n            const_cast<const T&>(a).for_each(n);\n\n            DLIB_TEST(a.get<0>() == b.get<0>()+2);\n            DLIB_TEST(a.get<1>() == b.get<1>()+2);\n            DLIB_TEST(a.get<2>() == b.get<2>()+2);\n\n            ostringstream sout;\n\n            serialize(a,sout);\n            istringstream sin(sout.str());\n            deserialize(b,sin);\n\n            DLIB_TEST(a.get<0>() == b.get<0>());\n            DLIB_TEST(a.get<1>() == b.get<1>());\n            DLIB_TEST(a.get<2>() == b.get<2>());\n\n            a.for_index(i,0);\n            a.for_index(inc(),1);\n            const_cast<const T&>(a).for_index(n,2);\n            const_cast<const T&>(a).for_index(nil(),0);\n\n            DLIB_TEST(a.get<0>() == b.get<0>()+1);\n            DLIB_TEST(a.get<1>() == b.get<1>()+1);\n            DLIB_TEST(a.get<2>() == b.get<2>()+0);\n\n            swap(a,b);\n\n            DLIB_TEST(b.get<0>() == a.get<0>()+1);\n            DLIB_TEST(b.get<1>() == a.get<1>()+1);\n            DLIB_TEST(b.get<2>() == a.get<2>()+0);\n        }\n\n\n    }\n\n\n\n\n    class tuple_tester : public tester\n    {\n    public:\n        tuple_tester (\n        ) :\n            tester (\"test_tuple\",\n                    \"Runs tests on the tuple object\")\n        {}\n\n        void perform_test (\n        )\n        {\n            tuple_test();\n        }\n    } a;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/type_safe_union.cpp",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <dlib/type_safe_union.h>\n\n#include \"tester.h\"\n\nnamespace  \n{\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n    logger dlog(\"test.type_safe_union\");\n\n    struct can_not_copy: noncopyable {};\n    void serialize(const can_not_copy&, std::ostream&) {}\n    void deserialize(can_not_copy&, std::istream&) {}\n\n    void swap(can_not_copy&, can_not_copy&) {}\n\n    class test\n    {\n\n    private:\n\n        enum kind\n        {\n            FLOAT, DOUBLE, CHAR, STRING, NONE\n        };\n\n        void operator() (float val)\n        {\n            DLIB_TEST(val == f_val);\n            last_kind = FLOAT;\n        }\n\n        void operator() (double val)\n        {\n            DLIB_TEST(val == d_val);\n            last_kind = DOUBLE;\n        }\n\n        void operator() (char val)\n        {\n            DLIB_TEST(val == c_val);\n            last_kind = CHAR;\n        }\n\n        void operator()(std::string& val)\n        {\n            DLIB_TEST(val == s_val);\n            last_kind = STRING;\n        }\n\n        void operator()(const std::string& val)\n        {\n            DLIB_TEST(val == s_val);\n            last_kind = STRING;\n        }\n\n    // ------------------------------\n\n        friend class type_safe_union<float, double, char, std::string>;\n        typedef      type_safe_union<float, double, char, std::string> tsu;\n        tsu a, b, c;\n\n        float f_val;\n        double d_val;\n        char c_val;\n        std::string s_val;\n\n        kind last_kind;\n\n    public:\n        void test_stuff()\n        {\n            DLIB_TEST(a.is_empty() == true);\n            DLIB_TEST(a.contains<char>() == false);\n            DLIB_TEST(a.contains<float>() == false);\n            DLIB_TEST(a.contains<double>() == false);\n            DLIB_TEST(a.contains<std::string>() == false);\n            DLIB_TEST(a.contains<long>() == false);\n\n            DLIB_TEST(a.get_type_id<int>() == -1);\n            DLIB_TEST(a.get_type_id<float>() == 1);\n            DLIB_TEST(a.get_type_id<double>() == 2);\n            DLIB_TEST(a.get_type_id<char>() == 3);\n            DLIB_TEST(a.get_type_id<std::string>() == 4);\n            DLIB_TEST(a.get_type_id<tsu>() == -1);\n\n\n            f_val = 4.345f;\n            a.get<float>() = f_val;\n\n            DLIB_TEST(a.is_empty() == false);\n            DLIB_TEST(a.contains<char>() == false);\n            DLIB_TEST(a.contains<float>() == true);\n            DLIB_TEST(a.contains<double>() == false);\n            DLIB_TEST(a.contains<std::string>() == false);\n            DLIB_TEST(a.contains<long>() == false);\n\n\n            last_kind = NONE;\n            const_cast<const tsu&>(a).apply_to_contents(*this);\n            DLIB_TEST(last_kind == FLOAT);\n\n        // -----------\n\n            d_val = 4.345;\n            a.get<double>() = d_val;\n            last_kind = NONE;\n            a.apply_to_contents(*this);\n            DLIB_TEST(last_kind == DOUBLE);\n\n        // -----------\n\n            c_val = 'a';\n            a.get<char>() = c_val;\n            last_kind = NONE;\n            const_cast<const tsu&>(a).apply_to_contents(*this);\n            DLIB_TEST(last_kind == CHAR);\n\n        // -----------\n\n            s_val = \"test string\";\n            a.get<std::string>() = s_val;\n            last_kind = NONE;\n            a.apply_to_contents(*this);\n            DLIB_TEST(last_kind == STRING);\n\n        // -----------\n            DLIB_TEST(a.is_empty() == false);\n            DLIB_TEST(a.contains<char>() == false);\n            DLIB_TEST(a.contains<float>() == false);\n            DLIB_TEST(a.contains<double>() == false);\n            DLIB_TEST(a.contains<std::string>() == true);\n            DLIB_TEST(a.contains<long>() == false);\n        // -----------\n\n            a.swap(b);\n\n            DLIB_TEST(a.is_empty() == true);\n            DLIB_TEST(a.contains<char>() == false);\n            DLIB_TEST(a.contains<float>() == false);\n            DLIB_TEST(a.contains<double>() == false);\n            DLIB_TEST(a.contains<std::string>() == false);\n            DLIB_TEST(a.contains<long>() == false);\n\n            DLIB_TEST(b.is_empty() == false);\n            DLIB_TEST(b.contains<char>() == false);\n            DLIB_TEST(b.contains<float>() == false);\n            DLIB_TEST(b.contains<double>() == false);\n            DLIB_TEST(b.contains<std::string>() == true);\n            DLIB_TEST(b.contains<long>() == false);\n\n\n            last_kind = NONE;\n            b.apply_to_contents(*this);\n            DLIB_TEST(last_kind == STRING);\n\n        // -----------\n\n            b.swap(a);\n\n            DLIB_TEST(b.is_empty() == true);\n            DLIB_TEST(b.contains<char>() == false);\n            DLIB_TEST(b.contains<float>() == false);\n            DLIB_TEST(b.contains<double>() == false);\n            DLIB_TEST(b.contains<std::string>() == false);\n            DLIB_TEST(b.contains<long>() == false);\n\n            DLIB_TEST(a.is_empty() == false);\n            DLIB_TEST(a.contains<char>() == false);\n            DLIB_TEST(a.contains<float>() == false);\n            DLIB_TEST(a.contains<double>() == false);\n            DLIB_TEST(a.contains<std::string>() == true);\n            DLIB_TEST(a.contains<long>() == false);\n\n\n            last_kind = NONE;\n            a.apply_to_contents(*this);\n            DLIB_TEST(last_kind == STRING);\n            last_kind = NONE;\n            b.apply_to_contents(*this);\n            DLIB_TEST(last_kind == NONE);\n\n\n            a.get<char>() = 'a';\n            b.get<char>() = 'b';\n\n            DLIB_TEST(a.is_empty() == false);\n            DLIB_TEST(a.contains<char>() == true);\n            DLIB_TEST(b.is_empty() == false);\n            DLIB_TEST(b.contains<char>() == true);\n            DLIB_TEST(a.contains<float>() == false);\n            DLIB_TEST(b.contains<float>() == false);\n\n\n            DLIB_TEST(a.get<char>() == 'a');\n            DLIB_TEST(b.get<char>() == 'b');\n\n            swap(a,b);\n\n\n            DLIB_TEST(a.is_empty() == false);\n            DLIB_TEST(a.contains<char>() == true);\n            DLIB_TEST(b.is_empty() == false);\n            DLIB_TEST(b.contains<char>() == true);\n            DLIB_TEST(a.contains<float>() == false);\n            DLIB_TEST(b.contains<float>() == false);\n\n            DLIB_TEST(a.get<char>() == 'b');\n            DLIB_TEST(b.get<char>() == 'a');\n\n        // -----------\n\n            a.get<char>() = 'a';\n            b.get<std::string>() = \"a string\";\n\n            DLIB_TEST(a.is_empty() == false);\n            DLIB_TEST(a.contains<char>() == true);\n            DLIB_TEST(b.is_empty() == false);\n            DLIB_TEST(b.contains<char>() == false);\n            DLIB_TEST(a.contains<std::string>() == false);\n            DLIB_TEST(b.contains<std::string>() == true);\n\n\n            DLIB_TEST(a.get<char>() == 'a');\n            DLIB_TEST(b.get<std::string>() == \"a string\");\n\n            swap(a,b);\n\n            DLIB_TEST(b.is_empty() == false);\n            DLIB_TEST(b.contains<char>() == true);\n            DLIB_TEST(a.is_empty() == false);\n            DLIB_TEST(a.contains<char>() == false);\n            DLIB_TEST(b.contains<std::string>() == false);\n            DLIB_TEST(a.contains<std::string>() == true);\n\n\n            DLIB_TEST(b.get<char>() == 'a');\n            DLIB_TEST(a.get<std::string>() == \"a string\");\n\n\n\n\n            {\n                type_safe_union<char, float, std::string> a, b, empty_union;\n\n                ostringstream sout;\n                istringstream sin;\n\n                a.get<char>() = 'd';\n\n                serialize(a, sout);\n\n                sin.str(sout.str());\n                deserialize(b, sin);\n\n                DLIB_TEST(b.contains<int>() == false);\n                DLIB_TEST(b.contains<float>() == false);\n                DLIB_TEST(b.contains<char>() == true);\n                DLIB_TEST(b.get<char>() == 'd');\n\n                DLIB_TEST(a.contains<int>() == false);\n                DLIB_TEST(a.contains<float>() == false);\n                DLIB_TEST(a.contains<char>() == true);\n                DLIB_TEST(a.get<char>() == 'd');\n\n                sin.clear();\n                sout.clear();\n                sout.str(\"\");\n\n                a.get<std::string>() = \"davis\";\n\n                serialize(a, sout);\n                sin.str(sout.str());\n                deserialize(b, sin);\n\n\n                DLIB_TEST(b.contains<int>() == false);\n                DLIB_TEST(b.contains<float>() == false);\n                DLIB_TEST(b.contains<std::string>() == true);\n                DLIB_TEST(b.get<std::string>() == \"davis\");\n\n                sin.clear();\n                sout.clear();\n                sout.str(\"\");\n\n                serialize(empty_union, sout);\n                sin.str(sout.str());\n                deserialize(b, sin);\n\n                DLIB_TEST(b.is_empty() == true);\n\n            }\n\n            {\n                type_safe_union<char, float, std::string> a, b, empty_union;\n\n                ostringstream sout;\n                istringstream sin;\n\n                a = 'd';\n\n                serialize(a, sout);\n\n                sin.str(sout.str());\n                deserialize(b, sin);\n\n                DLIB_TEST(b.contains<int>() == false);\n                DLIB_TEST(b.contains<float>() == false);\n                DLIB_TEST(b.contains<char>() == true);\n                DLIB_TEST(b.get<char>() == 'd');\n\n                DLIB_TEST(a.contains<int>() == false);\n                DLIB_TEST(a.contains<float>() == false);\n                DLIB_TEST(a.contains<char>() == true);\n                DLIB_TEST(a.get<char>() == 'd');\n\n                sin.clear();\n                sout.clear();\n                sout.str(\"\");\n\n                a = std::string(\"davis\");\n\n                serialize(a, sout);\n                sin.str(sout.str());\n                deserialize(b, sin);\n\n\n                DLIB_TEST(b.contains<int>() == false);\n                DLIB_TEST(b.contains<float>() == false);\n                DLIB_TEST(b.contains<std::string>() == true);\n                DLIB_TEST(b.get<std::string>() == \"davis\");\n\n                sin.clear();\n                sout.clear();\n                sout.str(\"\");\n\n                serialize(empty_union, sout);\n                sin.str(sout.str());\n                deserialize(b, sin);\n\n                DLIB_TEST(b.is_empty() == true);\n\n            }\n\n            {\n                typedef type_safe_union<char, float, std::string, can_not_copy> tsu_type;\n                tsu_type a('d'), aa(std::string(\"davis\")), b, empty_union;\n\n                ostringstream sout;\n                istringstream sin;\n\n\n                serialize(a, sout);\n\n                sin.str(sout.str());\n                deserialize(b, sin);\n\n                DLIB_TEST(b.contains<int>() == false);\n                DLIB_TEST(b.contains<float>() == false);\n                DLIB_TEST(b.contains<char>() == true);\n                DLIB_TEST(b.get<char>() == 'd');\n\n                DLIB_TEST(a.contains<int>() == false);\n                DLIB_TEST(a.contains<float>() == false);\n                DLIB_TEST(a.contains<char>() == true);\n                DLIB_TEST(a.get<char>() == 'd');\n\n                DLIB_TEST(aa.contains<int>() == false);\n                DLIB_TEST(aa.contains<float>() == false);\n                DLIB_TEST(aa.contains<char>() == false);\n                DLIB_TEST(aa.contains<std::string>() == true);\n\n                sin.clear();\n                sout.clear();\n                sout.str(\"\");\n\n\n                serialize(aa, sout);\n                sin.str(sout.str());\n                deserialize(b, sin);\n\n\n                DLIB_TEST(b.contains<int>() == false);\n                DLIB_TEST(b.contains<float>() == false);\n                DLIB_TEST(b.contains<std::string>() == true);\n                DLIB_TEST(b.get<std::string>() == \"davis\");\n\n                sin.clear();\n                sout.clear();\n                sout.str(\"\");\n\n                serialize(empty_union, sout);\n                sin.str(sout.str());\n                deserialize(b, sin);\n\n                DLIB_TEST(b.is_empty() == true);\n\n                a.get<can_not_copy>();\n                DLIB_TEST(a.contains<can_not_copy>() == true);\n\n            }\n        }\n\n    };\n\n\n\n    class type_safe_union_tester : public tester\n    {\n    public:\n        type_safe_union_tester (\n        ) :\n            tester (\"test_type_safe_union\",\n                    \"Runs tests on the type_safe_union object\")\n        {}\n\n        void perform_test (\n        )\n        {\n            for (int i = 0; i < 10; ++i)\n            {\n                test a;\n                a.test_stuff();\n            }\n        }\n    } a;\n\n}\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/test/vectorstream.cpp",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n\n#include <dlib/vectorstream.h>\n\n#include <sstream>\n#include <string>\n#include <cstdlib>\n#include <ctime>\n#include <vector>\n\n#include \"tester.h\"\n\nnamespace  \n{\n\n    using namespace test;\n    using namespace dlib;\n    using namespace std;\n\n\n    logger dlog(\"test.vectorstream\");\n\n// ----------------------------------------------------------------------------------------\n\n    void test1()\n    {\n        print_spinner();\n\n        std::vector<char> buf;\n        vectorstream s(buf);\n\n        for (int i = -1000; i <= 1000; ++i)\n        {\n            char ch = i;\n            s.put(ch);\n        }\n\n        DLIB_TEST(buf.size() == 2001);\n\n        int cnt = -1000;\n        for (unsigned long i = 0; i < buf.size(); ++i)\n        {\n            char ch = cnt;\n            DLIB_TEST(buf[i] == ch);\n            ++cnt;\n        }\n\n        for (int i = -1000; i <= 1000; ++i)\n        {\n            DLIB_TEST(s.peek() != EOF)\n            char ch1 = i;\n            char ch2 = s.get();\n            DLIB_TEST(ch1 == ch2);\n        }\n\n        DLIB_TEST(s.peek() == EOF);\n        DLIB_TEST(s.get() == EOF);\n\n        s.clear();\n        s.seekg(6);\n\n        for (int i = -1000+6; i <= 1000; ++i)\n        {\n            DLIB_TEST(s.peek() != EOF)\n            char ch1 = i;\n            char ch2 = s.get();\n            DLIB_TEST(ch1 == ch2);\n        }\n\n        DLIB_TEST(s.peek() == EOF);\n        DLIB_TEST(s.get() == EOF);\n\n        std::string temp;\n        temp = \"one two three!\";\n\n        s.seekg(0);\n        buf.clear();\n        s.clear();\n\n        serialize(temp, s);\n        std::string temp2;\n        deserialize(temp2, s);\n        DLIB_TEST(temp2 == temp);\n\n        s.put('1');\n        s.put('2');\n        s.put('3');\n        s.put('4');\n        DLIB_TEST(s.get() == '1');\n        DLIB_TEST(s.get() == '2');\n        DLIB_TEST(s.get() == '3');\n        DLIB_TEST(s.get() == '4');\n\n        s.putback('4');\n        DLIB_TEST(s.get() == '4');\n        s.putback('4');\n        s.putback('3');\n        s.putback('2');\n        s.putback('1');\n        DLIB_TEST(s.get() == '1');\n        DLIB_TEST(s.get() == '2');\n        DLIB_TEST(s.get() == '3');\n        DLIB_TEST(s.get() == '4');\n        DLIB_TEST(s.good() == true);\n        DLIB_TEST(s.get() == EOF);\n        DLIB_TEST(s.good() == false);\n\n        // make sure seeking to a crazy offset doesn't mess things up\n        s.clear();\n        s.seekg(1000000);\n        DLIB_TEST(s.get() == EOF);\n        DLIB_TEST(s.good() == false);\n        s.clear();\n        s.seekg(1000000);\n        char sbuf[100];\n        s.read(sbuf, sizeof(sbuf));\n        DLIB_TEST(s.good() == false);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class test_vectorstream : public tester\n    {\n    public:\n        test_vectorstream (\n        ) :\n            tester (\"test_vectorstream\",\n                    \"Runs tests on the vectorstream component.\")\n        {}\n\n        void perform_test (\n        )\n        {\n            test1();\n        }\n    } a;\n\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/auto_mutex_extension.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_AUTO_MUTEX_EXTENSIOn_\n#define DLIB_AUTO_MUTEX_EXTENSIOn_\n\n#include \"threads_kernel.h\"\n#include \"rmutex_extension.h\"\n#include \"read_write_mutex_extension.h\"\n#include \"auto_mutex_extension_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class auto_mutex\n    {\n        /*!\n            INITIAL VALUE\n                - if (m != 0) then\n                    - the mutex pointed to by m is locked\n                - if (r != 0) then\n                    - the mutex pointed to by r is locked\n                - if (rw != 0) then\n                    - the mutex pointed to by rw is locked\n                - exactly one of r, m, or rw is not 0.\n\n            CONVENTION\n                - if (m != 0) then\n                    - the mutex pointed to by m is locked\n                - if (r != 0) then\n                    - the mutex pointed to by r is locked\n                - if (rw != 0) then\n                    - the mutex pointed to by rw is locked\n                - exactly one of r, m, or rw is not 0.\n        !*/\n    public:\n\n        explicit auto_mutex (\n            const mutex& m_\n        ) : m(&m_),\n            r(0),\n            rw(0)\n        {\n            m->lock();\n        }\n\n        explicit auto_mutex (\n            const rmutex& r_\n        ) : m(0),\n            r(&r_),\n            rw(0)\n        {\n            r->lock();\n        }\n\n        explicit auto_mutex (\n            const read_write_mutex& rw_\n        ) : m(0),\n            r(0),\n            rw(&rw_)\n        {\n            rw->lock();\n        }\n\n        void unlock()\n        {\n            if (m != 0)\n            {\n                m->unlock();\n                m = 0;\n            }\n            else if (r != 0)\n            {\n                r->unlock();\n                r = 0;\n            }\n            else if (rw != 0)\n            {\n                rw->unlock();\n                rw = 0;\n            }\n        }\n\n        ~auto_mutex (\n        )\n        {\n            unlock();\n        }\n\n    private:\n\n        const mutex* m;\n        const rmutex* r;\n        const read_write_mutex* rw;\n\n        // restricted functions\n        auto_mutex(auto_mutex&);        // copy constructor\n        auto_mutex& operator=(auto_mutex&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class auto_mutex_readonly\n    {\n    public:\n\n        explicit auto_mutex_readonly (\n            const read_write_mutex& rw_\n        ) : rw(rw_), _has_write_lock(false), _has_read_lock(true)\n        {\n            rw.lock_readonly();\n        }\n\n        ~auto_mutex_readonly (\n        )\n        {\n            unlock();\n        }\n\n        void lock_readonly (\n        )\n        {\n            if (!_has_read_lock)\n            {\n                unlock();\n                rw.lock_readonly();\n                _has_read_lock = true;\n            }\n        }\n\n        void lock_write (\n        )\n        {\n            if (!_has_write_lock)\n            {\n                unlock();\n                rw.lock();\n                _has_write_lock = true;\n            }\n        }\n\n        void unlock (\n        )\n        {\n            if (_has_write_lock)\n            {\n                rw.unlock();\n                _has_write_lock = false;\n            }\n            else if (_has_read_lock)\n            {\n                rw.unlock_readonly();\n                _has_read_lock = false;\n            }\n        }\n\n        bool has_read_lock (\n        ) { return _has_read_lock; }\n\n        bool has_write_lock (\n        ) { return _has_write_lock; }\n\n    private:\n\n        const read_write_mutex& rw;\n        bool _has_write_lock;\n        bool _has_read_lock;\n\n        // restricted functions\n        auto_mutex_readonly(auto_mutex_readonly&);        // copy constructor\n        auto_mutex_readonly& operator=(auto_mutex_readonly&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AUTO_MUTEX_EXTENSIOn_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/auto_mutex_extension_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_AUTO_MUTEX_EXTENSIOn_ABSTRACT_\n#ifdef DLIB_AUTO_MUTEX_EXTENSIOn_ABSTRACT_\n\n#include \"threads_kernel_abstract.h\"\n#include \"rmutex_extension_abstract.h\"\n#include \"read_write_mutex_extension_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class auto_mutex\n    {\n        /*!\n            INITIAL VALUE\n                The mutex given in the constructor is locked and associated with this \n                object.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a mechanism for automatically locking and unlocking\n                a mutex object.\n        !*/\n    public:\n\n        explicit auto_mutex (\n            const mutex& m\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - m will be locked\n        !*/\n\n        explicit auto_mutex (\n            const rmutex& m\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - m will be locked\n        !*/\n\n        explicit auto_mutex (\n            const read_write_mutex& m\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - m will be locked via m.lock() (i.e. a write lock will be obtained)\n        !*/\n\n        void unlock(\n        );\n        /*!\n            ensures\n                - if (unlock() has not already been called) then\n                    - The mutex associated with *this has been unlocked.  This is useful if\n                      you want to unlock a mutex before the auto_mutex destructor executes.\n        !*/\n\n        ~auto_mutex (\n        );\n        /*!\n            ensures\n                - all resources allocated by *this have been freed\n                - calls unlock()\n        !*/\n\n    private:\n        // restricted functions\n        auto_mutex(auto_mutex&);        // copy constructor\n        auto_mutex& operator=(auto_mutex&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class auto_mutex_readonly\n    {\n        /*!\n            INITIAL VALUE\n                The mutex given in the constructor is locked using a read-only lock and\n                associated with this object.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a mechanism for automatically locking and unlocking\n                a read_write_mutex object.  In particular, a readonly lock is used.\n        !*/\n    public:\n\n        explicit auto_mutex_readonly (\n            const read_write_mutex& m\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - a readonly lock will be obtained on m using m.lock_readonly()\n                - #has_read_lock() == true\n        !*/\n\n        ~auto_mutex_readonly (\n        );\n        /*!\n            ensures\n                - all resources allocated by *this have been freed\n                - the mutex associated with *this has been unlocked\n        !*/\n\n        bool has_read_lock (\n        );\n        /*!\n            ensures\n                - returns true if this object has called read_write_mutex::lock_readonly()\n                  on its associated mutex and has yet to release that lock.\n        !*/\n\n        bool has_write_lock (\n        ); \n        /*!\n            ensures\n                - returns true if this object has called read_write_mutex::lock() on its\n                  associated mutex and has yet to release that lock.\n        !*/\n\n        void lock_readonly (\n        );\n        /*!\n            ensures\n                - This function converts the lock on the associated mutex into a readonly lock.\n                  Specifically:\n                  if (!has_read_lock()) then\n                    - if (has_write_lock()) then\n                        - unlocks the associated mutex and then relocks it by calling\n                          read_write_mutex::lock_readonly()\n                    - else\n                        - locks the associated mutex by calling read_write_mutex::lock_readonly()\n                - #has_read_lock() == true\n                - Note that the lock switch is not atomic.  This means that whatever\n                  resource is protected by the mutex might have been modified during the\n                  call to lock_readonly().\n        !*/\n\n        void lock_write (\n        );\n        /*!\n            ensures\n                - This function converts the lock on the associated mutex into a write lock.\n                  Specifically:\n                  if (!has_write_lock()) then\n                    - if (has_read_lock()) then\n                        - unlocks the associated mutex and then relocks it by calling\n                          read_write_mutex::lock()\n                    - else\n                        - locks the associated mutex by calling read_write_mutex::lock()\n                - #has_write_lock() == true\n                - Note that the lock switch is not atomic.  This means that whatever\n                  resource is protected by the mutex might have been modified during the\n                  call to lock_write().\n        !*/\n\n        void unlock (\n        );\n        /*!\n            ensures\n                - if (has_read_lock() || has_write_lock()) then\n                    - unlocks the associated mutex.  This is useful if you want to unlock a\n                      mutex before the auto_mutex_readonly destructor executes.\n                - #has_read_lock() == false\n                - #has_write_lock() == false\n        !*/\n\n    private:\n        // restricted functions\n        auto_mutex_readonly(auto_mutex_readonly&);        // copy constructor\n        auto_mutex_readonly& operator=(auto_mutex_readonly&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AUTO_MUTEX_EXTENSIOn_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/auto_unlock_extension.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_AUTO_UNLOCK_EXTENSIOn_\n#define DLIB_AUTO_UNLOCK_EXTENSIOn_\n\n#include \"threads_kernel.h\"\n#include \"rmutex_extension.h\"\n#include \"read_write_mutex_extension.h\"\n#include \"auto_unlock_extension_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class auto_unlock\n    {\n        /*!\n            INITIAL VALUE\n                - if (m != 0) then\n                    - the mutex pointed to by m is locked\n                - if (r != 0) then\n                    - the mutex pointed to by r is locked\n                - if (rw != 0) then\n                    - the mutex pointed to by rw is locked\n                - exactly one of r, m, or rw is not 0.\n\n            CONVENTION\n                - if (m != 0) then\n                    - the mutex pointed to by m is locked\n                - if (r != 0) then\n                    - the mutex pointed to by r is locked\n                - if (rw != 0) then\n                    - the mutex pointed to by rw is locked\n                - exactly one of r, m, or rw is not 0.\n        !*/\n    public:\n\n        explicit auto_unlock (\n            const mutex& m_\n        ) : m(&m_),\n            r(0),\n            rw(0)\n        {}\n\n        explicit auto_unlock (\n            const rmutex& r_\n        ) : m(0),\n            r(&r_),\n            rw(0)\n        {}\n\n        explicit auto_unlock (\n            const read_write_mutex& rw_\n        ) : m(0),\n            r(0),\n            rw(&rw_)\n        {}\n\n        ~auto_unlock (\n        )\n        {\n            if (m != 0)\n                m->unlock();\n            else if (r != 0)\n                r->unlock();\n            else\n                rw->unlock();\n        }\n\n    private:\n\n        const mutex* m;\n        const rmutex* r;\n        const read_write_mutex* rw;\n\n        // restricted functions\n        auto_unlock(auto_unlock&);        // copy constructor\n        auto_unlock& operator=(auto_unlock&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class auto_unlock_readonly\n    {\n\n    public:\n\n        explicit auto_unlock_readonly (\n            const read_write_mutex& rw_\n        ) :\n            rw(rw_)\n        {}\n\n        ~auto_unlock_readonly (\n        )\n        {\n            rw.unlock_readonly();\n        }\n\n    private:\n\n        const read_write_mutex& rw;\n\n        // restricted functions\n        auto_unlock_readonly(auto_unlock_readonly&);        // copy constructor\n        auto_unlock_readonly& operator=(auto_unlock_readonly&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AUTO_UNLOCK_EXTENSIOn_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/auto_unlock_extension_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_AUTO_UNLOCK_EXTENSIOn_ABSTRACT_\n#ifdef DLIB_AUTO_UNLOCK_EXTENSIOn_ABSTRACT_\n\n#include \"threads_kernel_abstract.h\"\n#include \"rmutex_extension_abstract.h\"\n#include \"read_write_mutex_extension_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class auto_unlock\n    {\n        /*!\n            INITIAL VALUE\n                The mutex given in the constructor is associated with this object.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a mechanism for automatically unlocking\n                a mutex object.  It is useful when you already have a locked mutex\n                and want to make sure it gets unlocked even if an exception is thrown \n                or you quit the function at a weird spot.\n        !*/\n    public:\n\n        explicit auto_unlock (\n            const mutex& m\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - does not modify m in any way \n        !*/\n\n        explicit auto_unlock (\n            const rmutex& m\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - does not modify m in any way \n        !*/\n\n        explicit auto_unlock (\n            const read_write_mutex& m\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - does not modify m in any way \n        !*/\n\n        ~auto_unlock (\n        );\n        /*!\n            ensures\n                - all resources allocated by *this have been freed\n                - calls unlock() on the mutex associated with *this\n        !*/\n\n    private:\n        // restricted functions\n        auto_unlock(auto_unlock&);        // copy constructor\n        auto_unlock& operator=(auto_unlock&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class auto_unlock_readonly\n    {\n        /*!\n            INITIAL VALUE\n                The mutex given in the constructor is associated with this object.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a mechanism for automatically unlocking\n                a read_write_mutex object.  It is useful when you already have a locked mutex\n                and want to make sure it gets unlocked even if an exception is thrown \n                or you quit the function at a weird spot.  Note that the mutex\n                is unlocked by calling unlock_readonly() on it.\n        !*/\n    public:\n\n        explicit auto_unlock_readonly (\n            const read_write_mutex& m\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - does not modify m in any way \n        !*/\n\n        ~auto_unlock_readonly (\n        );\n        /*!\n            ensures\n                - all resources allocated by *this have been freed\n                - calls unlock_readonly() on the mutex associated with *this\n        !*/\n\n    private:\n        // restricted functions\n        auto_unlock_readonly(auto_unlock_readonly&);        // copy constructor\n        auto_unlock_readonly& operator=(auto_unlock_readonly&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_AUTO_UNLOCK_EXTENSIOn_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/create_new_thread_extension.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_CREATE_NEW_THREAD_EXTENSIOn_\n#define DLIB_CREATE_NEW_THREAD_EXTENSIOn_ \n\n#include \"threads_kernel_abstract.h\"\n#include \"create_new_thread_extension_abstract.h\"\n#include \"../threads.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        void (T::*funct)()\n        >\n    inline void dlib_create_new_thread_helper (\n        void* obj\n    )\n    {\n        T* o = static_cast<T*>(obj);\n        (o->*funct)();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        void (T::*funct)()\n        >\n    inline bool create_new_thread (\n        T& obj\n    )\n    {\n        return create_new_thread(dlib_create_new_thread_helper<T,funct>,&obj);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CREATE_NEW_THREAD_EXTENSIOn_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/create_new_thread_extension_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_CREATE_NEW_THREAD_EXTENSIOn_ABSTRACT_\n#ifdef DLIB_CREATE_NEW_THREAD_EXTENSIOn_ABSTRACT_ \n\n#include \"threads_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T,\n        void (T::*funct)()\n        >\n    bool create_new_thread (\n        T& obj\n    );\n    /*!\n        ensures\n            - creates a new thread and calls obj.*funct() from it.\n            - returns true upon success and false upon failure to create the new thread.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_CREATE_NEW_THREAD_EXTENSIOn_ABSTRACT_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/multithreaded_object_extension.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MULTITHREADED_OBJECT_EXTENSIOn_CPP\n#define DLIB_MULTITHREADED_OBJECT_EXTENSIOn_CPP\n\n#include \"multithreaded_object_extension.h\"\n#include \"create_new_thread_extension.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    multithreaded_object::\n    multithreaded_object (\n    ):\n        s(m_),\n        is_running_(false),\n        should_stop_(false),\n        threads_started(0)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    multithreaded_object::\n    ~multithreaded_object (\n    )\n    {\n        DLIB_ASSERT(number_of_threads_alive() == 0,\n               \"\\tmultithreaded_object::~multithreaded_object()\"\n               << \"\\n\\tYou have let a multithreaded object destruct itself before terminating its threads\"\n               << \"\\n\\tthis: \" << this\n        );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void multithreaded_object::\n    clear (\n    )\n    {\n        auto_mutex M(m_);\n        stop();\n        wait();\n        dead_threads.clear();\n        is_running_ = false;\n        should_stop_ = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool multithreaded_object::\n    is_running (\n    ) const \n    {\n        auto_mutex M(m_);\n        return is_running_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long multithreaded_object::\n    number_of_threads_registered (\n    ) const\n    {\n        auto_mutex M(m_);\n        return thread_ids.size() + dead_threads.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long multithreaded_object::\n    number_of_threads_alive (\n    ) const\n    {\n        auto_mutex M(m_);\n        return threads_started;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void multithreaded_object::\n    wait (\n    ) const\n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(thread_ids.is_in_domain(get_thread_id()) == false,\n               \"\\tvoid multithreaded_object::wait()\"\n               << \"\\n\\tYou can NOT call this function from one of the threads registered in this object\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        while (threads_started > 0)\n            s.wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void multithreaded_object::\n    start (\n    )\n    {\n        auto_mutex M(m_);\n        const unsigned long num_threads_registered = dead_threads.size() + thread_ids.size();\n        // start any dead threads\n        for (unsigned long i = threads_started; i < num_threads_registered; ++i)\n        {\n            if (create_new_thread<multithreaded_object,&multithreaded_object::thread_helper>(*this) == false)\n            {\n                should_stop_ = true;\n                is_running_ = false;\n                throw thread_error();\n            }\n            ++threads_started;\n        }\n        is_running_ = true;\n        should_stop_ = false;\n        s.broadcast();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void multithreaded_object::\n    pause (\n    )\n    {\n        auto_mutex M(m_);\n        is_running_ = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void multithreaded_object::\n    stop (\n    )\n    {\n        auto_mutex M(m_);\n        should_stop_ = true;\n        is_running_ = false;\n        s.broadcast();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool multithreaded_object::\n    should_stop (\n    ) const\n    {\n        auto_mutex M(m_);\n        DLIB_ASSERT(thread_ids.is_in_domain(get_thread_id()),\n               \"\\tbool multithreaded_object::should_stop()\"\n               << \"\\n\\tYou can only call this function from one of the registered threads in this object\"\n               << \"\\n\\tthis: \" << this\n        );\n        while (is_running_ == false && should_stop_ == false)\n            s.wait();\n        return should_stop_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    multithreaded_object::raii_thread_helper::\n    raii_thread_helper(\n        multithreaded_object& self_,\n        thread_id_type id_\n    ) : self(self_), id(id_){}\n\n    multithreaded_object::raii_thread_helper::\n    ~raii_thread_helper()\n    {\n        auto_mutex M(self.m_);\n        if (self.thread_ids.is_in_domain(id))\n        {\n            mfp temp;\n            thread_id_type id_temp;\n            self.thread_ids.remove(id,id_temp,temp);\n            // put this thread's registered function back into the dead_threads queue\n            self.dead_threads.enqueue(temp);\n        }\n\n        --self.threads_started;\n        // If this is the last thread to terminate then\n        // signal that that is the case.\n        if (self.threads_started == 0)\n        {\n            self.is_running_ = false;\n            self.should_stop_ = false;\n            self.s.broadcast();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void multithreaded_object::\n    thread_helper(\n    )\n    {\n        mfp mf;\n        thread_id_type id = get_thread_id();\n\n        // this guy's destructor does all the necessary cleanup in this function\n        raii_thread_helper raii(*this, id);\n\n        // if there is a dead_thread sitting around then pull it\n        // out and put it into mf\n        {\n            auto_mutex M(m_);\n            if (dead_threads.size() > 0)\n            {\n                dead_threads.dequeue(mf);\n                mfp temp(mf);\n                thread_ids.add(id,temp);\n            }\n        }\n\n        if (mf.is_set())\n        {\n            // call the registered thread function\n            mf();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MULTITHREADED_OBJECT_EXTENSIOn_CPP\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/multithreaded_object_extension.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_MULTITHREADED_OBJECT_EXTENSIOn_\n#define DLIB_MULTITHREADED_OBJECT_EXTENSIOn_ \n\n#include \"multithreaded_object_extension_abstract.h\"\n#include \"threads_kernel.h\"\n#include \"auto_mutex_extension.h\"\n#include \"rmutex_extension.h\"\n#include \"rsignaler_extension.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n#include \"../map.h\"\n#include \"../member_function_pointer.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class multithreaded_object\n    {\n        /*!\n            INITIAL VALUE\n                - is_running_ == false\n                - should_stop_ == false\n                - thread_ids.size() == 0\n                - dead_threads.size() == 0\n                - threads_started == 0\n\n            CONVENTION\n                - number_of_threads_registered() == thread_ids.size() + dead_threads.size()\n                - number_of_threads_alive() == threads_started \n\n                - is_running() == is_running_\n                - should_stop() == should_stop_\n\n                - thread_ids == a map of current thread ids to the member function\n                  pointers that that thread runs.  \n                - threads_started == the number of threads that have been spawned to run \n                  thread_helper but haven't ended yet.\n                  \n                - dead_threads == a queue that contains all the member function pointers\n                  for threads that are currently registered but not running\n\n                - m_ == the mutex used to protect all our variables\n                - s == the signaler for m_\n        !*/\n\n    public:\n\n        multithreaded_object (\n        );\n\n        virtual ~multithreaded_object (\n        ) = 0;\n\n        void clear (\n        );\n\n        bool is_running (\n        ) const;\n\n        unsigned long number_of_threads_alive (\n        ) const;\n\n        unsigned long number_of_threads_registered (\n        ) const;\n\n        void wait (\n        ) const;\n\n        void start (\n        );\n\n        void pause (\n        );\n\n        void stop (\n        );\n\n    protected:\n\n        bool should_stop (\n        ) const;\n\n        template <\n            typename T\n            >\n        void register_thread (\n            T& object,\n            void (T::*thread)()\n        )\n        {\n            auto_mutex M(m_);\n            try\n            {\n                mfp mf;\n                mf.set(object,thread);\n                dead_threads.enqueue(mf);\n                if (is_running_)\n                    start();\n            }\n            catch (...)\n            {\n                is_running_ = false;\n                should_stop_ = true;\n                s.broadcast();\n                throw;\n            }\n        }\n\n    private:\n\n        class raii_thread_helper\n        {\n        public:\n            raii_thread_helper(multithreaded_object& self_, thread_id_type id_);\n            ~raii_thread_helper();\n\n            multithreaded_object& self;\n            thread_id_type id;\n        };\n\n        void thread_helper(\n        );\n\n        typedef member_function_pointer<> mfp;\n\n        rmutex m_;\n        rsignaler s;\n        map<thread_id_type,mfp,memory_manager<char>::kernel_2a>::kernel_1a thread_ids;\n        queue<mfp,memory_manager<char>::kernel_2a>::kernel_1a dead_threads;\n\n        bool is_running_;\n        bool should_stop_;\n        unsigned long threads_started;\n\n        // restricted functions\n        multithreaded_object(multithreaded_object&);        // copy constructor\n        multithreaded_object& operator=(multithreaded_object&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"multithreaded_object_extension.cpp\"\n#endif\n\n#endif // DLIB_MULTITHREADED_OBJECT_EXTENSIOn_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/multithreaded_object_extension_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_MULTITHREADED_OBJECT_EXTENSIOn_ABSTRACT_\n#ifdef DLIB_MULTITHREADED_OBJECT_EXTENSIOn_ABSTRACT_ \n\n#include \"threads_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class multithreaded_object\n    {\n        /*!\n            INITIAL VALUE\n                - is_running() == false\n                - number_of_threads_alive() == 0\n                - number_of_threads_registered() == 0\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a multithreaded object.  It is similar to \n                the threaded_object except it allows you to have many threads in a \n                single object rather than just one.  To use it you inherit from it \n                and register the member functions in your new class that you want \n                to run in their own threads by calling register_thread().  Then when \n                you call start() it will spawn all the registered functions\n                in their own threads.\n        !*/\n\n    public:\n\n        multithreaded_object (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create threading objects.\n        !*/\n\n        virtual ~multithreaded_object (\n        ) = 0;\n        /*!\n            requires\n                - number_of_threads_alive() == 0\n                  (i.e. in the destructor for the object you derive from this one you\n                  must wait for all the threads to end.)\n            ensures\n                - all resources allocated by *this have been freed.  \n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n                - blocks until all threads have terminated\n            throws\n                - std::bad_alloc or dlib::thread_error\n                    if an exception is thrown then *this is unusable \n                    until clear() is called and succeeds\n        !*/\n\n        bool is_running (\n        ) const;\n        /*!\n            ensures\n                - if (number_of_threads_alive() > 0 && the threads are currently supposed to be executing) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        unsigned long number_of_threads_alive (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads that are currently alive (i.e.\n                  the number of threads that have started but not yet terminated)\n        !*/\n\n        unsigned long number_of_threads_registered (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads that have been registered by\n                  calls to register_thread()\n        !*/\n\n        void wait (\n        ) const;\n        /*!\n            requires\n                - is not called from one of this object's threads \n            ensures\n                - if (number_of_threads_alive() > 0) then\n                    - blocks until all the threads in this object have terminated \n                      (i.e. blocks until number_of_threads_alive() == 0)\n        !*/\n\n        void start (\n        );\n        /*!\n            ensures\n                - #number_of_threads_alive() == number_of_threads_registered()\n                - #is_running() == true\n                - #should_stop() == false\n                - all the threads registered are up and running. \n            throws\n                - std::bad_alloc or dlib::thread_error\n                    If either of these exceptions are thrown then \n                    #is_running() == false and should_stop() == true\n        !*/\n\n        void pause (\n        );\n        /*!\n            ensures\n                - #is_running() == false\n        !*/\n\n        void stop (\n        );\n        /*!\n            ensures\n                - #should_stop() == true\n                - #is_running() == false\n        !*/\n\n    protected:\n\n        template <\n            typename T\n            >\n        void register_thread (\n            T& object,\n            void (T::*thread)()\n        );\n        /*!\n            requires\n                - (object.*thread)() forms a valid function call\n                - the thread function does not throw\n            ensures\n                - registers the member function pointed to by thread as one of the threads\n                  that runs when is_running() == true\n                - #number_of_threads_registered() == number_of_threads_registered() + 1\n                - if (is_running() == true)\n                    - spawns this new member function in its own thread\n                    - #number_of_threads_alive() += number_of_threads_alive() + 1\n            throws\n                - std::bad_alloc or dlib::thread_error\n                    If either of these exceptions are thrown then \n                    #is_running() == false and should_stop() == true\n        !*/\n\n        bool should_stop (\n        ) const;\n        /*!\n            requires\n                - is only called from one of the registered threads in this object \n            ensures\n                - if (is_running() == false && should_stop() == false) then\n                    - blocks until (#is_running() == true || #should_stop() == true) \n                - if (this thread is supposed to terminate) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n    private:\n\n        // restricted functions\n        multithreaded_object(multithreaded_object&);        // copy constructor\n        multithreaded_object& operator=(multithreaded_object&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_MULTITHREADED_OBJECT_EXTENSIOn_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/parallel_for_extension.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_PARALLEL_FoR_Hh_\n#define DLIB_PARALLEL_FoR_Hh_ \n\n#include \"parallel_for_extension_abstract.h\"\n#include \"thread_pool_extension.h\"\n#include \"../console_progress_indicator.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n\n        template <typename T>\n        class helper_parallel_for\n        {\n        public:\n            helper_parallel_for (\n                T& obj_,\n                void (T::*funct_)(long)\n            ) : \n                obj(obj_),\n                funct(funct_)\n            {}\n\n            T& obj;\n            void (T::*funct)(long);\n\n            void process_block (long begin, long end)\n            {\n                for (long i = begin; i < end; ++i)\n                    (obj.*funct)(i);\n            }\n        };\n        \n        template <typename T>\n        class helper_parallel_for_funct\n        {\n        public:\n            helper_parallel_for_funct (\n                const T& funct_\n            ) : funct(funct_) {}\n\n            const T& funct;\n\n            void run(long i)\n            {\n                funct(i);\n            }\n        };\n\n        template <typename T>\n        class helper_parallel_for_funct2\n        {\n        public:\n            helper_parallel_for_funct2 (\n                const T& funct_\n            ) : funct(funct_) {}\n\n            const T& funct;\n\n            void run(long begin, long end)\n            {\n                funct(begin, end);\n            }\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked (\n        thread_pool& tp,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long, long),\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_blocked()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        if (tp.num_threads_in_pool() != 0)\n        {\n            const long num = end-begin;\n            const long num_workers = static_cast<long>(tp.num_threads_in_pool());\n            // How many samples to process in a single task (aim for chunks_per_thread jobs per worker)\n            const long block_size = std::max(1L, num/(num_workers*chunks_per_thread));\n            for (long i = 0; i < num; i+=block_size)\n            {\n                tp.add_task(obj, funct, begin+i, begin+std::min(i+block_size, num));\n            }\n            tp.wait_for_all_tasks();\n        }\n        else\n        {\n            // Since there aren't any threads in the pool we might as well just invoke\n            // the function directly since that's all the thread_pool object would do.\n            // But doing it ourselves skips a mutex lock.\n            (obj.*funct)(begin, end);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long, long),\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_blocked()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        thread_pool tp(num_threads);\n        parallel_for_blocked(tp, begin, end, obj, funct, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked (\n        thread_pool& tp,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_blocked()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::helper_parallel_for_funct2<T> helper(funct);\n        parallel_for_blocked(tp, begin, end,  helper, &impl::helper_parallel_for_funct2<T>::run,  chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_blocked()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        thread_pool tp(num_threads);\n        parallel_for_blocked(tp, begin, end, funct, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for (\n        thread_pool& tp,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long),\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::helper_parallel_for<T> helper(obj, funct);\n        parallel_for_blocked(tp, begin, end, helper, &impl::helper_parallel_for<T>::process_block, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long),\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        thread_pool tp(num_threads);\n        parallel_for(tp, begin, end, obj, funct, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for (\n        thread_pool& tp,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::helper_parallel_for_funct<T> helper(funct);\n        parallel_for(tp, begin, end,  helper, &impl::helper_parallel_for_funct<T>::run,  chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        thread_pool tp(num_threads);\n        parallel_for(tp, begin, end, funct, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace impl\n    {\n        template <typename T>\n        class parfor_verbose_helper\n        {\n        public:\n            parfor_verbose_helper(T& obj_, void (T::*funct_)(long), long begin, long end) :\n                obj(obj_), funct(funct_), pbar(end-begin)\n            {\n                count = 0;\n                wrote_to_screen = pbar.print_status(0);\n            }\n\n            ~parfor_verbose_helper()\n            {\n                if (wrote_to_screen)\n                    std::cout << std::endl;\n            }\n\n            mutable long count;\n            T& obj;\n            void (T::*funct)(long);\n            mutable console_progress_indicator pbar;\n            mutable bool wrote_to_screen;\n            mutex m;\n\n            void operator()(long i) const\n            {\n                (obj.*funct)(i);\n                {\n                    auto_mutex lock(m);\n                    wrote_to_screen = pbar.print_status(++count) || wrote_to_screen;\n                }\n            }\n\n        };\n\n        template <typename T>\n        class parfor_verbose_helper3\n        {\n        public:\n            parfor_verbose_helper3(T& obj_, void (T::*funct_)(long,long), long begin, long end) :\n                obj(obj_), funct(funct_), pbar(end-begin)\n            {\n                count = 0;\n                wrote_to_screen = pbar.print_status(0);\n            }\n\n            ~parfor_verbose_helper3()\n            {\n                if (wrote_to_screen)\n                    std::cout << std::endl;\n            }\n\n            mutable long count;\n            T& obj;\n            void (T::*funct)(long,long);\n            mutable console_progress_indicator pbar;\n            mutable bool wrote_to_screen;\n            mutex m;\n\n            void operator()(long begin, long end) const\n            {\n                (obj.*funct)(begin, end);\n                {\n                    auto_mutex lock(m);\n                    count += end-begin;\n                    wrote_to_screen = pbar.print_status(count) || wrote_to_screen;\n                }\n            }\n        };\n\n        template <typename T>\n        class parfor_verbose_helper2\n        {\n        public:\n            parfor_verbose_helper2(const T& obj_, long begin, long end) : obj(obj_), pbar(end-begin)\n            {\n                count = 0;\n                wrote_to_screen = pbar.print_status(0);\n            }\n\n            ~parfor_verbose_helper2()\n            {\n                if (wrote_to_screen)\n                    std::cout << std::endl;\n            }\n\n            mutable long count;\n            const T& obj;\n            mutable console_progress_indicator pbar;\n            mutable bool wrote_to_screen;\n            mutex m;\n\n            void operator()(long i) const\n            {\n                obj(i);\n                {\n                    auto_mutex lock(m);\n                    wrote_to_screen = pbar.print_status(++count) || wrote_to_screen;\n                }\n            }\n\n            void operator()(long begin, long end) const\n            {\n                obj(begin, end);\n                {\n                    auto_mutex lock(m);\n                    count += end-begin;\n                    wrote_to_screen = pbar.print_status(count) || wrote_to_screen;\n                }\n            }\n        };\n    }\n\n    template <typename T>\n    void parallel_for_verbose (\n        thread_pool& tp,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long),\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_verbose()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::parfor_verbose_helper<T> helper(obj, funct, begin, end);\n        parallel_for(tp, begin, end, helper, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_verbose (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long),\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_verbose()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::parfor_verbose_helper<T> helper(obj, funct, begin, end);\n        parallel_for(num_threads, begin, end, helper, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_verbose (\n        thread_pool& tp,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_verbose()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::parfor_verbose_helper2<T> helper(funct, begin, end);\n        parallel_for(tp, begin, end,  helper, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_verbose (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_verbose()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::parfor_verbose_helper2<T> helper(funct, begin, end);\n        parallel_for(num_threads, begin, end, helper, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked_verbose (\n        thread_pool& tp,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long,long),\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_blocked_verbose()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::parfor_verbose_helper3<T> helper(obj, funct, begin, end);\n        parallel_for_blocked(tp, begin, end, helper, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked_verbose (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long,long),\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_blocked_verbose()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::parfor_verbose_helper3<T> helper(obj, funct, begin, end);\n        parallel_for_blocked(num_threads, begin, end, helper, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked_verbose (\n        thread_pool& tp,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_blocked_verbose()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::parfor_verbose_helper2<T> helper(funct, begin, end);\n        parallel_for_blocked(tp, begin, end,  helper, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked_verbose (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_ASSERT(begin <= end && chunks_per_thread > 0,\n            \"\\t void parallel_for_blocked_verbose()\"\n            << \"\\n\\t Invalid inputs were given to this function\"\n            << \"\\n\\t begin: \" << begin \n            << \"\\n\\t end:   \" << end\n            << \"\\n\\t chunks_per_thread: \" << chunks_per_thread\n            );\n\n        impl::parfor_verbose_helper2<T> helper(funct, begin, end);\n        parallel_for_blocked(num_threads, begin, end, helper, chunks_per_thread);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_PARALLEL_FoR_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/parallel_for_extension_abstract.h",
    "content": "// Copyright (C) 2013  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_PARALLEL_FoR_ABSTRACT_Hh_\n#ifdef DLIB_PARALLEL_FoR_ABSTRACT_Hh_ \n\n#include \"thread_pool_extension_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked (\n        thread_pool& tp,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long, long),\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This is a convenience function for submitting a block of jobs to a thread_pool.  \n              In particular, given the half open range [begin, end), this function will\n              split the range into approximately tp.num_threads_in_pool()*chunks_per_thread\n              blocks, which it will then submit to the thread_pool.  The given thread_pool\n              will then call (obj.*funct)() on each of the subranges.\n            - To be precise, suppose we have broken the range [begin, end) into the\n              following subranges:\n                - [begin[0], end[0])\n                - [begin[1], end[1])\n                - [begin[2], end[2])\n                  ...\n                - [begin[n], end[n])\n              Then parallel_for_blocked() submits each of these subranges to tp for\n              processing such that (obj.*funct)(begin[i], end[i]) is invoked for all valid\n              values of i.  Moreover, the subranges are non-overlapping and completely\n              cover the total range of [begin, end).\n            - This function will not perform any memory allocations or create any system\n              resources such as mutex objects.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long, long),\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is equivalent to the following block of code:\n                thread_pool tp(num_threads);\n                parallel_for_blocked(tp, begin, end, obj, funct, chunks_per_thread);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked (\n        thread_pool& tp,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - chunks_per_thread > 0\n            - begin <= end\n            - funct does not throw any exceptions\n        ensures\n            - This is a convenience function for submitting a block of jobs to a\n              thread_pool.  In particular, given the range [begin, end), this function will\n              split the range into approximately tp.num_threads_in_pool()*chunks_per_thread\n              blocks, which it will then submit to the thread_pool.  The given thread_pool\n              will then call funct() on each of the subranges.\n            - To be precise, suppose we have broken the range [begin, end) into the\n              following subranges:\n                - [begin[0], end[0])\n                - [begin[1], end[1])\n                - [begin[2], end[2])\n                  ...\n                - [begin[n], end[n])\n              Then parallel_for_blocked() submits each of these subranges to tp for\n              processing such that funct(begin[i], end[i]) is invoked for all valid values\n              of i.\n            - This function will not perform any memory allocations or create any system\n              resources such as mutex objects.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is equivalent to the following block of code:\n                thread_pool tp(num_threads);\n                parallel_for_blocked(tp, begin, end, funct, chunks_per_thread);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for (\n        thread_pool& tp,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long),\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is equivalent to the following function call:\n              parallel_for_blocked(tp, begin, end, [&](long begin_sub, long end_sub) \n                {\n                  for (long i = begin_sub; i < end_sub; ++i)\n                      (obj.*funct)(i);  \n                }, chunks_per_thread);\n            - Therefore, this routine invokes (obj.*funct)(i) for all i in the range\n              [begin, end).  However, it does so using tp.num_threads_in_pool() parallel\n              threads.\n            - This function will not perform any memory allocations or create any system\n              resources such as mutex objects.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long),\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is equivalent to the following block of code:\n                thread_pool tp(num_threads);\n                parallel_for(tp, begin, end, obj, funct, chunks_per_thread);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for (\n        thread_pool& tp,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is equivalent to the following function call:\n              parallel_for_blocked(tp, begin, end, [&](long begin_sub, long end_sub) \n                {\n                  for (long i = begin_sub; i < end_sub; ++i)\n                      funct(i);  \n                }, chunks_per_thread);\n            - Therefore, this routine invokes funct(i) for all i in the range [begin, end).\n              However, it does so using tp.num_threads_in_pool() parallel threads.\n            - This function will not perform any memory allocations or create any system\n              resources such as mutex objects.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is equivalent to the following block of code:\n                thread_pool tp(num_threads);\n                parallel_for(tp, begin, end, funct, chunks_per_thread);\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_verbose (\n        thread_pool& tp,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long),\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is identical to the parallel_for() routine defined above except\n              that it will print messages to cout showing the progress in executing the\n              parallel for loop.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_verbose (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long),\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is identical to the parallel_for() routine defined above except\n              that it will print messages to cout showing the progress in executing the\n              parallel for loop.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_verbose (\n        thread_pool& tp,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is identical to the parallel_for() routine defined above except\n              that it will print messages to cout showing the progress in executing the\n              parallel for loop.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_verbose (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is identical to the parallel_for() routine defined above except\n              that it will print messages to cout showing the progress in executing the\n              parallel for loop.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked_verbose (\n        thread_pool& tp,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long,long),\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is identical to the parallel_for_blocked() routine defined\n              above except that it will print messages to cout showing the progress in\n              executing the parallel for loop.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked_verbose (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        T& obj,\n        void (T::*funct)(long,long),\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is identical to the parallel_for_blocked() routine defined\n              above except that it will print messages to cout showing the progress in\n              executing the parallel for loop.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked_verbose (\n        thread_pool& tp,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is identical to the parallel_for_blocked() routine defined\n              above except that it will print messages to cout showing the progress in\n              executing the parallel for loop.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void parallel_for_blocked_verbose (\n        unsigned long num_threads,\n        long begin,\n        long end,\n        const T& funct,\n        long chunks_per_thread = 8\n    );\n    /*!\n        requires\n            - begin <= end\n            - chunks_per_thread > 0\n            - funct does not throw any exceptions\n        ensures\n            - This function is identical to the parallel_for_blocked() routine defined\n              above except that it will print messages to cout showing the progress in\n              executing the parallel for loop.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_PARALLEL_FoR_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/posix.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADS_KERNEl_1_\n#include \"threads_kernel_2.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/read_write_mutex_extension.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_READ_WRITE_MUTEX_EXTENSIOn_\n#define DLIB_READ_WRITE_MUTEX_EXTENSIOn_\n\n#include \"threads_kernel.h\"\n#include \"read_write_mutex_extension_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class read_write_mutex\n    {\n        /*!\n            INITIAL VALUE\n                - max_locks == defined by constructor \n                - available_locks == max_locks\n                - write_lock_in_progress == false\n                - write_lock_active == false\n\n            CONVENTION\n                - Each time someone gets a read only lock they take one of the \"available locks\"\n                  and each write lock takes all possible locks (i.e. max_locks).  The number of\n                  available locks is recorded in available_locks.  Any time you try to lock this \n                  object and there aren't available locks you have to wait.\n\n                - max_locks == max_readonly_locks()\n\n                - if (some thread is on the process of obtaining a write lock) then\n                    - write_lock_in_progress == true\n                - else\n                    - write_lock_in_progress == false\n\n                - if (some thread currently has a write lock on this mutex) then\n                    - write_lock_active == true\n                - else\n                    - write_lock_active == false\n        !*/\n\n    public:\n\n        read_write_mutex (\n        ) : s(m),\n            max_locks(0xFFFFFFFF),\n            available_locks(max_locks),\n            write_lock_in_progress(false),\n            write_lock_active(false)\n        {}\n\n        explicit read_write_mutex (\n            unsigned long max_locks_\n        ) : s(m),\n            max_locks(max_locks_),\n            available_locks(max_locks_),\n            write_lock_in_progress(false),\n            write_lock_active(false)\n        {\n            // make sure requires clause is not broken\n            DLIB_ASSERT(max_locks > 0,\n                \"\\t read_write_mutex::read_write_mutex(max_locks)\"\n                << \"\\n\\t You must give a non-zero value for max_locks\"\n                << \"\\n\\t this: \" << this\n                );\n        }\n\n        ~read_write_mutex (\n        )\n        {}\n\n        void lock (\n        ) const\n        {\n            m.lock();\n\n            // If another write lock is already in progress then wait for it to finish\n            // before we start trying to grab all the available locks.  This way we \n            // don't end up fighting over the locks.\n            while (write_lock_in_progress)\n                s.wait();\n\n            // grab the right to perform a write lock\n            write_lock_in_progress = true;\n\n            // now start grabbing all the locks\n            unsigned long locks_obtained = available_locks;\n            available_locks = 0;\n            while (locks_obtained != max_locks)\n            {\n                s.wait();\n                locks_obtained += available_locks;\n                available_locks = 0;\n            }\n\n            write_lock_in_progress = false;\n            write_lock_active = true;\n\n            m.unlock();\n        }\n\n        void unlock (\n        ) const\n        {\n            m.lock();\n\n            // only do something if there really was a lock in place\n            if (write_lock_active)\n            {\n                available_locks = max_locks;\n                write_lock_active = false;\n                s.broadcast();\n            }\n\n            m.unlock();\n        }\n\n        void lock_readonly (\n        ) const\n        {\n            m.lock();\n\n            while (available_locks == 0)\n                s.wait();\n\n            --available_locks;\n\n            m.unlock();\n        }\n\n        void unlock_readonly (\n        ) const\n        {\n            m.lock();\n\n            // If this condition is false then it means there are no more readonly locks\n            // to free.  So we don't do anything.\n            if (available_locks != max_locks && !write_lock_active)\n            {\n                ++available_locks;\n\n                // only perform broadcast when there is another thread that might be listening\n                if (available_locks == 1 || write_lock_in_progress)\n                {\n                    s.broadcast();\n                }\n            }\n\n            m.unlock();\n        }\n\n        unsigned long max_readonly_locks (\n        ) const\n        {\n            return max_locks;\n        }\n\n    private:\n        mutex m;\n        signaler s;\n        const unsigned long max_locks;\n        mutable unsigned long available_locks;\n        mutable bool write_lock_in_progress; \n        mutable bool write_lock_active;\n\n        // restricted functions\n        read_write_mutex(read_write_mutex&);        // copy constructor\n        read_write_mutex& operator=(read_write_mutex&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_READ_WRITE_MUTEX_EXTENSIOn_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/read_write_mutex_extension_abstract.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_READWRITE_MUTEX_EXTENSIOn_ABSTRACT_\n#ifdef DLIB_READWRITE_MUTEX_EXTENSIOn_ABSTRACT_\n\n#include \"threads_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class read_write_mutex\n    {\n        /*!\n            INITIAL VALUE\n                read_write_mutex is in the fully unlocked state\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a mutex intended to be used for synchronous \n                thread control of shared data. When a thread wants to access some \n                shared data it locks out other threads by calling lock() and calls \n                unlock() when it is finished.   \n\n                This mutex also has the additional ability to distinguish between\n                a lock for the purposes of modifying some shared data, a write lock,\n                and a lock for the purposes of only reading shared data, a readonly\n                lock.  The lock() and unlock() functions are used for write locks while\n                the lock_readonly() and unlock_readonly() are for readonly locks.  \n\n                The difference between a readonly and write lock can be understood as \n                follows.  The read_write_mutex will allow many threads to obtain simultaneous\n                readonly locks but will only allow a single thread to obtain a write lock.\n                Moreover, while the write lock is obtained no other threads are allowed\n                to have readonly locks.  \n        !*/\n    public:\n\n        read_write_mutex (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - max_readonly_locks() == 0xFFFFFFFF\n                  (i.e. about 4 billion)\n            throws\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create the read_write_mutex.\n        !*/\n\n        explicit read_write_mutex (\n            unsigned long max_locks\n        );\n        /*!\n            requires\n                - max_locks > 0\n            ensures\n                - #*this is properly initialized\n                - max_readonly_locks() == max_locks\n            throws\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create the read_write_mutex.\n        !*/\n\n        ~read_write_mutex (\n        );\n        /*!\n            requires\n                - *this is not locked\n            ensures\n                - all resources allocated by *this have been freed\n        !*/\n\n        void lock (\n        ) const;\n        /*!\n            requires\n                - The thread calling this function does not have any kind of lock on this \n                  object\n            ensures\n                - if (there is any kind of lock on *this) then \n                    - the calling thread is put to sleep until a write lock becomes available. \n                      Once available, a write lock is obtained on this mutex and this function \n                      terminates.\n                - else  \n                    - a write lock is obtained on this mutex and the calling thread is not put to sleep \n        !*/\n\n        void unlock (\n        ) const;\n        /*!\n            ensures\n                - if (there is a write lock on *this) then\n                    - #*this is unlocked (i.e. other threads may now lock this object)\n                - else\n                    - the call to unlock() has no effect\n        !*/\n\n        unsigned long max_readonly_locks (\n        ) const;\n        /*!\n            ensures\n                - returns the maximum number of concurrent readonly locks this object will allow.\n        !*/\n\n        void lock_readonly (\n        ) const;\n        /*!\n            requires\n                - The thread calling this function does not already have a write\n                  lock on this object\n            ensures\n                - if (there is a write lock on *this or there are no free readonly locks) then\n                    - the calling thread is put to sleep until there is no longer a write lock\n                      and a free readonly lock is available.  Once this is the case, a readonly \n                      lock is obtained and this function terminates.\n                - else \n                    - a readonly lock is obtained on *this and the calling thread is not put\n                      to sleep.  Note that multiple readonly locks can be obtained at once.\n        !*/\n\n        void unlock_readonly (\n        ) const;\n        /*!\n            ensures\n                - if (there is a readonly lock on *this) then\n                    - one readonly lock is removed from *this.  \n                - else\n                    - the call to unlock_readonly() has no effect.\n        !*/\n\n    private:\n        // restricted functions\n        read_write_mutex(read_write_mutex&);        // copy constructor\n        read_write_mutex& operator=(read_write_mutex&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_READWRITE_MUTEX_EXTENSIOn_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/rmutex_extension.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RMUTEX_EXTENSIOn_\n#define DLIB_RMUTEX_EXTENSIOn_\n\n#include \"threads_kernel.h\"\n#include \"rmutex_extension_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class rmutex\n    {\n        /*!\n            INITIAL VALUE\n                count == 0\n                thread_id == 0\n\n            CONVENTION\n                - count == lock_count()\n\n                - if (no thread currently has a lock on this mutex) then\n                    - count == 0\n                - else\n                    - count == the number of times the thread that owns this mutex has\n                      called lock()\n                    - thread_id == the id of this thread.\n        !*/\n    public:\n\n        rmutex (\n        ) : s(m),\n            thread_id(0),\n            count(0)\n        {}\n\n        ~rmutex (\n        )\n        {}\n\n        unsigned long lock_count (\n        ) const\n        {\n            return count;\n        }\n\n        void lock (\n            unsigned long times = 1\n        ) const\n        {\n            const thread_id_type current_thread_id = get_thread_id();\n            m.lock();\n            if (thread_id == current_thread_id)\n            {\n                // we already own this mutex in this case\n                count += times;                \n            }\n            else\n            {\n                // wait for our turn to claim this rmutex\n                while (count != 0)\n                    s.wait();\n\n                count = times;\n                thread_id = current_thread_id;\n            }\n            m.unlock();\n        }\n\n        void unlock (\n            unsigned long times = 1\n        ) const\n        {\n            const thread_id_type current_thread_id = get_thread_id();\n            m.lock();\n            if (thread_id == current_thread_id)\n            {\n                if (count <= times)\n                {\n                    count = 0;\n                    s.signal();\n                }\n                else\n                {\n                    count -= times;\n                }\n            }\n            m.unlock();\n        }\n\n    private:\n        mutex m;\n        signaler s;\n        mutable thread_id_type thread_id;\n        mutable unsigned long count;\n\n        // restricted functions\n        rmutex(rmutex&);        // copy constructor\n        rmutex& operator=(rmutex&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RMUTEX_EXTENSIOn_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/rmutex_extension_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RMUTEX_EXTENSIOn_ABSTRACT_\n#ifdef DLIB_RMUTEX_EXTENSIOn_ABSTRACT_\n\n#include \"threads_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class rmutex\n    {\n        /*!\n            INITIAL VALUE\n                rmutex is in the unlocked state\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a recursive mutex intended to be used for synchronous \n                thread control of shared data. When a thread wants to access some \n                shared data it locks out other threads by calling lock() and calls \n                unlock() when it is finished.  \n\n                The difference between this and the normal mutex object is that it is safe to\n                call lock() from a thread that already has a lock on this mutex.  Doing\n                so just increments a counter but otherwise has no effect on the mutex.\n                Note that unlock() must be called for each call to lock() to release the\n                mutex.\n        !*/\n    public:\n\n        rmutex (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create the rmutex.\n        !*/\n\n        ~rmutex (\n        );\n        /*!\n            requires\n                - *this is not locked\n            ensures\n                - all resources allocated by *this have been freed\n        !*/\n\n        unsigned long lock_count (\n        ) const;\n        /*!\n            requires\n                - the calling thread has a lock on this mutex\n            ensures\n                - returns the number of times the thread has called lock()\n        !*/\n\n        void lock (\n            unsigned long times = 1\n        ) const;\n        /*!\n            ensures\n                - if (*this is currently locked by another thread) then \n                    - the thread that called lock() on *this is put to sleep until \n                      it becomes available.               \n                    - #lock_count() == times\n                - if (*this is currently unlocked) then \n                    - #*this becomes locked and the current thread is NOT put to sleep \n                      but now \"owns\" #*this\n                    - #lock_count() == times\n                - if (*this is locked and owned by the current thread) then\n                    - the calling thread retains its lock on *this and isn't put to sleep.  \n                    - #lock_count() == lock_count() + times\n        !*/\n\n        void unlock (\n            unsigned long times = 1\n        ) const;\n        /*!\n            ensures\n                - if (*this is currently locked and owned by the thread calling unlock) then\n                    - if (lock_count() <= times ) then\n                        - #*this is unlocked (i.e. other threads may now lock this object)\n                    - else\n                        - #*this will remain locked\n                        - #lock_count() == lock_count() - times\n                - else\n                    - the call to unlock() has no effect\n        !*/\n\n\n    private:\n        // restricted functions\n        rmutex(rmutex&);        // copy constructor\n        rmutex& operator=(rmutex&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RMUTEX_EXTENSIOn_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/rsignaler_extension.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_RSIGNALER_EXTENSIOn_\n#define DLIB_RSIGNALER_EXTENSIOn_ \n\n#include \"rsignaler_extension_abstract.h\"\n#include \"rmutex_extension.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class rsignaler\n    {\n    public:\n        rsignaler (\n            const rmutex& associated_mutex\n        ) : \n            assoc_mutex(associated_mutex),\n            s(m)\n        {}\n\n        ~rsignaler (\n        )\n        {}\n\n        void wait (\n        ) const\n        {\n            m.lock();\n            const unsigned long lock_count = assoc_mutex.lock_count();\n            assoc_mutex.unlock(lock_count);\n            s.wait();\n            m.unlock();\n            assoc_mutex.lock(lock_count);\n        }\n\n        bool wait_or_timeout (\n            unsigned long milliseconds\n        ) const\n        {\n            m.lock();\n            const unsigned long lock_count = assoc_mutex.lock_count();\n            assoc_mutex.unlock(lock_count);\n            bool res = s.wait_or_timeout(milliseconds);\n            m.unlock();\n            assoc_mutex.lock(lock_count);\n            return res;\n        }\n\n        void signal (\n        ) const \n        { \n            m.lock();\n            s.signal(); \n            m.unlock();\n        }\n\n        void broadcast (\n        ) const \n        { \n            m.lock();\n            s.broadcast(); \n            m.unlock();\n        }\n\n        const rmutex& get_mutex (\n        ) const { return assoc_mutex; }\n\n    private:\n\n        const rmutex& assoc_mutex;\n        mutex m;\n        signaler s;\n\n\n        // restricted functions\n        rsignaler(rsignaler&);        // copy constructor\n        rsignaler& operator=(rsignaler&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RSIGNALER_EXTENSIOn_ \n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/rsignaler_extension_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_RSIGNALER_EXTENSIOn_ABSTRACT_\n#ifdef DLIB_RSIGNALER_EXTENSIOn_ABSTRACT_ \n\n#include \"threads_kernel_abstract.h\"\n#include \"rmutex_extension_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class rsignaler\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an event signaling system for threads.  It gives \n                a thread the ability to wake up other threads that are waiting for a \n                particular signal. \n\n                Each rsignaler object is associated with one and only one rmutex object.  \n                More than one rsignaler object may be associated with a single rmutex\n                but a signaler object may only be associated with a single rmutex.\n\n                NOTE:\n                You must guard against spurious wakeups.  This means that a thread\n                might return from a call to wait even if no other thread called\n                signal.  This is rare but must be guarded against. \n\n                Also note that this object is identical to the signaler object \n                except that it works with rmutex objects rather than mutex objects.\n        !*/\n\n    public:\n\n        rsignaler (\n            const rmutex& associated_mutex\n        );\n        /*!\n            ensures\n                - #*this is properly initialized \n                - #get_mutex() == associated_mutex\n            throws\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create the signaler.    \n        !*/\n\n\n        ~rsignaler (\n        );\n        /*!\n            ensures\n                - all resources allocated by *this have been freed\n        !*/\n\n        void wait (\n        ) const;\n        /*!\n            requires\n                - get_mutex() is locked and owned by the calling thread\n            ensures\n                - atomically unlocks get_mutex() and blocks the calling thread                      \n                - calling thread may wake if another thread calls signal() or broadcast()\n                  on *this\n                - when wait() returns the calling thread again has a lock on get_mutex()\n        !*/\n\n        bool wait_or_timeout (\n            unsigned long milliseconds\n        ) const;\n        /*!\n            requires\n                - get_mutex() is locked and owned by the calling thread\n            ensures\n                - atomically unlocks get_mutex() and blocks the calling thread\n                - calling thread may wake if another thread calls signal() or broadcast()\n                  on *this\n                - after the specified number of milliseconds has elapsed the calling thread\n                  will wake once get_mutex() is free\n                - when wait returns the calling thread again has a lock on get_mutex()\n\n                - returns false if the call to wait_or_timeout timed out \n                - returns true if the call did not time out\n        !*/\n\n        void signal (\n        ) const;\n        /*!\n            ensures\n                - if (at least one thread is waiting on *this) then\n                    - at least one of the waiting threads will wake \n        !*/\n\n        void broadcast (\n        ) const;\n        /*!\n            ensures\n                - any and all threads waiting on *this will wake \n        !*/\n\n        const rmutex& get_mutex (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the rmutex associated with *this\n        !*/\n\n\n    private:\n        // restricted functions\n        rsignaler(rsignaler&);        // copy constructor\n        rsignaler& operator=(rsignaler&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_RSIGNALER_EXTENSIOn_ABSTRACT_ \n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/thread_function_extension.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREAD_FUNCTIOn_\n#define DLIB_THREAD_FUNCTIOn_ \n\n#include \"thread_function_extension_abstract.h\"\n#include \"threads_kernel.h\"\n#include \"auto_mutex_extension.h\"\n#include \"threaded_object_extension.h\"\n#include \"../smart_pointers.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class thread_function : private threaded_object\n    {\n        \n        class base_funct\n        {\n        public:\n            virtual void go() = 0;\n            virtual ~base_funct() {}\n        };\n\n        template <typename F, typename T1, typename T2, typename T3, typename T4>\n        class super_funct_4 : public base_funct\n        {\n        public:\n            super_funct_4 ( F funct, T1 arg1, T2 arg2, T3 arg3, T4 arg4) :\n                f(funct),\n                a1(arg1),\n                a2(arg2),\n                a3(arg3),\n                a4(arg4)\n            {\n            }\n\n            void go() { f(a1, a2, a3, a4); }\n\n\n            F f;\n            T1 a1;\n            T2 a2;\n            T3 a3;\n            T4 a4;\n        };\n\n        template <typename F, typename T1, typename T2, typename T3>\n        class super_funct_3 : public base_funct\n        {\n        public:\n            super_funct_3 ( F funct, T1 arg1, T2 arg2, T3 arg3):\n                f(funct),\n                a1(arg1),\n                a2(arg2),\n                a3(arg3)\n            {\n            }\n\n            void go() { f(a1, a2, a3); }\n\n\n            F f;\n            T1 a1;\n            T2 a2;\n            T3 a3;\n        };\n\n        template <typename F, typename T1, typename T2>\n        class super_funct_2 : public base_funct\n        {\n        public:\n            super_funct_2 ( F funct, T1 arg1, T2 arg2) :\n                f(funct),\n                a1(arg1),\n                a2(arg2)\n            {\n            }\n\n            void go() { f(a1, a2); }\n\n\n            F f;\n            T1 a1;\n            T2 a2;\n        };\n\n        template <typename F, typename T>\n        class super_funct_1 : public base_funct\n        {\n        public:\n            super_funct_1 ( F funct, T arg) : f(funct), a(arg)\n            {\n            }\n\n            void go() { f(a); }\n\n\n            F f;\n            T a;\n        };\n\n        template <typename F>\n        class super_funct_0 : public base_funct\n        {\n        public:\n            super_funct_0 ( F funct) : f(funct)\n            {\n            }\n            \n            void go() { f(); }\n\n            F f;\n        };\n\n    public:\n\n        template <typename F>\n        thread_function (\n            F funct\n        )\n        {\n            f.reset(new super_funct_0<F>(funct));\n            start();\n        }\n\n        template <typename F, typename T>\n        thread_function (\n            F funct,\n            T arg\n        )\n        {\n            f.reset(new super_funct_1<F,T>(funct,arg));\n            start();\n        }\n\n        template <typename F, typename T1, typename T2>\n        thread_function (\n            F funct,\n            T1 arg1,\n            T2 arg2\n        )\n        {\n            f.reset(new super_funct_2<F,T1,T2>(funct, arg1, arg2));\n            start();\n        }\n\n        template <typename F, typename T1, typename T2, typename T3>\n        thread_function (\n            F funct,\n            T1 arg1,\n            T2 arg2,\n            T3 arg3\n        )\n        {\n            f.reset(new super_funct_3<F,T1,T2,T3>(funct, arg1, arg2, arg3));\n            start();\n        }\n\n        template <typename F, typename T1, typename T2, typename T3, typename T4>\n        thread_function (\n            F funct,\n            T1 arg1,\n            T2 arg2,\n            T3 arg3,\n            T4 arg4\n        )\n        {\n            f.reset(new super_funct_4<F,T1,T2,T3,T4>(funct, arg1, arg2, arg3, arg4));\n            start();\n        }\n\n        ~thread_function (\n        )\n        {\n            threaded_object::wait();\n        }\n\n        bool is_alive (\n        ) const\n        {\n            return threaded_object::is_alive();\n        }\n\n        void wait (\n        ) const\n        {\n            threaded_object::wait();\n        }\n\n    private:\n\n        void thread ()\n        {\n            f->go();\n        }\n\n        scoped_ptr<base_funct> f;\n\n        // restricted functions\n        thread_function(thread_function&);        // copy constructor\n        thread_function& operator=(thread_function&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THREAD_FUNCTIOn_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/thread_function_extension_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_THREAD_FUNCTIOn_ABSTRACT_\n#ifdef DLIB_THREAD_FUNCTIOn_ABSTRACT_ \n\n#include \"threads_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class thread_function \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a thread on a global C++ function or function\n                object.  That is, it allows you to run a function in its own thread.\n        !*/\n    public:\n\n        template <typename F>\n        thread_function (\n            F funct\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - the function funct has been started in its own thread\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create threading objects.\n        !*/\n\n        template <typename F, typename T1>\n        thread_function (\n            F funct,\n            T1 arg1\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - A thread has been created and it will call funct(arg1)\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create threading objects.\n        !*/\n\n        template <typename F, typename T1, typename T2>\n        thread_function (\n            F funct,\n            T1 arg1,\n            T2 arg2\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - A thread has been created and it will call funct(arg1, arg2)\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create threading objects.\n        !*/\n\n        template <typename F, typename T1, typename T2, typename T3>\n        thread_function (\n            F funct,\n            T1 arg1,\n            T2 arg2,\n            T3 arg3\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - A thread has been created and it will call funct(arg1, arg2, arg3)\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create threading objects.\n        !*/\n\n        template <typename F, typename T1, typename T2, typename T3, typename T4>\n        thread_function (\n            F funct,\n            T1 arg1,\n            T2 arg2,\n            T3 arg3,\n            T4 arg4\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n                - A thread has been created and it will call funct(arg1, arg2, arg3, arg4)\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create threading objects.\n        !*/\n\n        ~thread_function (\n        );\n        /*!\n            ensures\n                - all resources allocated by *this have been freed.  \n                - blocks until is_alive() == false\n        !*/\n\n        bool is_alive (\n        ) const;\n        /*!\n            ensures\n                - if (this object's thread has yet to terminate) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void wait (\n        ) const;\n        /*!\n            ensures\n                - if (is_alive() == true) then\n                    - blocks until this object's thread terminates\n        !*/\n\n    private:\n\n        // restricted functions\n        thread_function(thread_function&);        // copy constructor\n        thread_function& operator=(thread_function&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THREAD_FUNCTIOn_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/thread_pool_extension.cpp",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREAD_POOl_CPPh_\n#define DLIB_THREAD_POOl_CPPh_ \n\n#include \"thread_pool_extension.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    thread_pool_implementation::\n    thread_pool_implementation (\n        unsigned long num_threads\n    ) : \n        task_done_signaler(m),\n        task_ready_signaler(m),\n        we_are_destructing(false)\n    {\n        tasks.resize(num_threads);\n        for (unsigned long i = 0; i < num_threads; ++i)\n        {\n            register_thread(*this, &thread_pool_implementation::thread);\n        }\n\n        start();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void thread_pool_implementation::\n    shutdown_pool (\n    )\n    {\n        {\n            auto_mutex M(m);\n            \n            // first wait for all pending tasks to finish\n            bool found_task = true;\n            while (found_task)\n            {\n                found_task = false;\n                for (unsigned long i = 0; i < tasks.size(); ++i)\n                {\n                    // If task bucket i has a task that is currently supposed to be processed\n                    if (tasks[i].is_empty() == false)\n                    {\n                        found_task = true;\n                        break;\n                    }\n                }\n\n                if (found_task)\n                    task_done_signaler.wait();\n            }\n\n            // now tell the threads to kill themselves\n            we_are_destructing = true;\n            task_ready_signaler.broadcast();\n        }\n\n        wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    thread_pool_implementation::\n    ~thread_pool_implementation()\n    {\n        shutdown_pool();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long thread_pool_implementation::\n    num_threads_in_pool (\n    ) const\n    {\n        auto_mutex M(m);\n        return tasks.size();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void thread_pool_implementation::\n    wait_for_task (\n        uint64 task_id\n    ) const\n    {\n        auto_mutex M(m);\n        if (tasks.size() != 0)\n        {\n            const unsigned long idx = task_id_to_index(task_id);\n            while (tasks[idx].task_id == task_id)\n                task_done_signaler.wait();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void thread_pool_implementation::\n    wait_for_all_tasks (\n    ) const\n    {\n        const thread_id_type thread_id = get_thread_id();\n\n        auto_mutex M(m);\n        bool found_task = true;\n        while (found_task)\n        {\n            found_task = false;\n            for (unsigned long i = 0; i < tasks.size(); ++i)\n            {\n                // If task bucket i has a task that is currently supposed to be processed\n                // and it originated from the calling thread\n                if (tasks[i].is_empty() == false && tasks[i].thread_id == thread_id)\n                {\n                    found_task = true;\n                    break;\n                }\n            }\n\n            if (found_task)\n                task_done_signaler.wait();\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool thread_pool_implementation::\n    is_worker_thread (\n        const thread_id_type id\n    ) const\n    {\n        for (unsigned long i = 0; i < worker_thread_ids.size(); ++i)\n        {\n            if (worker_thread_ids[i] == id)\n                return true;\n        }\n\n        // if there aren't any threads in the pool then we consider all threads\n        // to be worker threads\n        if (tasks.size() == 0)\n            return true;\n        else\n            return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void thread_pool_implementation::\n    thread (\n    )\n    {\n        {\n            // save the id of this worker thread into worker_thread_ids\n            auto_mutex M(m);\n            thread_id_type id = get_thread_id();\n            worker_thread_ids.push_back(id);\n        }\n\n        task_state_type task;\n        while (we_are_destructing == false)\n        {\n            long idx = 0;\n\n            // wait for a task to do \n            { auto_mutex M(m);\n                while ( (idx = find_ready_task()) == -1 && we_are_destructing == false)\n                    task_ready_signaler.wait();\n\n                if (we_are_destructing)\n                    break;\n\n                tasks[idx].is_being_processed = true;\n                task = tasks[idx];\n            }\n\n            // now do the task\n            if (task.bfp)\n                task.bfp();\n            else if (task.mfp0)\n                task.mfp0();\n            else if (task.mfp1)\n                task.mfp1(task.arg1);\n            else if (task.mfp2)\n                task.mfp2(task.arg1, task.arg2);\n\n            // Now let others know that we finished the task.  We do this\n            // by clearing out the state of this task\n            { auto_mutex M(m);\n                tasks[idx].is_being_processed = false;\n                tasks[idx].task_id = 0;\n                tasks[idx].bfp.clear();\n                tasks[idx].mfp0.clear();\n                tasks[idx].mfp1.clear();\n                tasks[idx].mfp2.clear();\n                tasks[idx].arg1 = 0;\n                tasks[idx].arg2 = 0;\n                task_done_signaler.broadcast();\n            }\n\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long thread_pool_implementation::\n    find_empty_task_slot (\n    ) const\n    {\n        for (unsigned long i = 0; i < tasks.size(); ++i)\n        {\n            if (tasks[i].is_empty())\n                return i;\n        }\n\n        return -1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    long thread_pool_implementation::\n    find_ready_task (\n    ) const\n    {\n        for (unsigned long i = 0; i < tasks.size(); ++i)\n        {\n            if (tasks[i].is_ready())\n                return i;\n        }\n\n        return -1;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    uint64 thread_pool_implementation::\n    make_next_task_id (\n        long idx\n    )\n    {\n        uint64 id = tasks[idx].next_task_id * tasks.size() + idx;\n        tasks[idx].next_task_id += 1;\n        return id;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    unsigned long thread_pool_implementation::\n    task_id_to_index (\n        uint64 id\n    ) const\n    {\n        return static_cast<unsigned long>(id%tasks.size());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    uint64 thread_pool_implementation::\n    add_task_internal (\n        const bfp_type& bfp,\n        shared_ptr<function_object_copy>& item\n    )\n    {\n        auto_mutex M(m);\n        const thread_id_type my_thread_id = get_thread_id();\n\n        // find a thread that isn't doing anything\n        long idx = find_empty_task_slot();\n        if (idx == -1 && is_worker_thread(my_thread_id))\n        {\n            // this function is being called from within a worker thread and there\n            // aren't any other worker threads free so just perform the task right\n            // here\n\n            M.unlock();\n            bfp();\n\n            // return a task id that is both non-zero and also one\n            // that is never normally returned.  This way calls\n            // to wait_for_task() will never block given this id.\n            return 1;\n        }\n\n        // wait until there is a thread that isn't doing anything\n        while (idx == -1)\n        {\n            task_done_signaler.wait();\n            idx = find_empty_task_slot();\n        }\n\n        tasks[idx].thread_id = my_thread_id;\n        tasks[idx].task_id = make_next_task_id(idx);\n        tasks[idx].bfp = bfp;\n        tasks[idx].function_copy.swap(item);\n\n        task_ready_signaler.signal();\n\n        return tasks[idx].task_id;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool thread_pool_implementation::\n    is_task_thread (\n    ) const\n    {\n        auto_mutex M(m);\n        return is_worker_thread(get_thread_id());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n\n#endif // DLIB_THREAD_POOl_CPPh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/thread_pool_extension.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREAD_POOl_Hh_\n#define DLIB_THREAD_POOl_Hh_ \n\n#include \"thread_pool_extension_abstract.h\"\n#include \"multithreaded_object_extension.h\"\n#include \"../member_function_pointer.h\"\n#include \"../bound_function_pointer.h\"\n#include \"threads_kernel.h\"\n#include \"auto_mutex_extension.h\"\n#include \"../uintn.h\"\n#include \"../array.h\"\n#include \"../smart_pointers_thread_safe.h\"\n#include \"../smart_pointers.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class thread_pool_implementation;\n\n    template <\n        typename T\n        >\n    class future\n    {\n        /*!\n            INITIAL VALUE\n                - task_id == 0\n                - tp.get() == 0\n\n            CONVENTION\n                - is_ready() == (tp.get() == 0)\n                - get() == var\n\n                - if (tp.get() != 0)\n                    - tp == a pointer to the thread_pool_implementation that is using this future object\n                    - task_id == the task id of the task in the thread pool tp that is using\n                      this future object.\n        !*/\n    public:\n\n        future (\n        ) : task_id(0) {}\n\n        future (\n            const T& item\n        ) : task_id(0), var(item) {}\n\n        future (\n            const future& item\n        ) :task_id(0), var(item.get()) {}\n\n        ~future (\n        ) { wait(); }\n\n        future& operator=(\n            const T& item\n        ) { get() = item; return *this; }\n\n        future& operator=(\n            const future& item\n        ) { get() = item.get(); return *this; }\n\n        operator T& (\n        ) { return get(); }\n\n        operator const T& (\n        ) const { return get(); }\n\n        T& get (\n        ) { wait(); return var; }\n\n        const T& get (\n        ) const { wait(); return var; }\n\n        bool is_ready (\n        ) const { return tp.get() == 0; }\n\n    private:\n\n        friend class thread_pool;\n\n        inline void wait () const;\n\n        mutable uint64 task_id;\n        mutable shared_ptr_thread_safe<thread_pool_implementation> tp;\n\n        T var;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    inline void swap (\n        future<T>& a,\n        future<T>& b\n    ) { dlib::exchange(a.get(), b.get()); }\n    // Note that dlib::exchange() just calls std::swap.  I'm only using it because\n    // this works around some bugs in certain compilers.\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T> bool operator== (const future<T>& a, const future<T>& b) { return a.get() == b.get(); }\n    template <typename T> bool operator!= (const future<T>& a, const future<T>& b) { return a.get() != b.get(); }\n    template <typename T> bool operator<= (const future<T>& a, const future<T>& b) { return a.get() <= b.get(); }\n    template <typename T> bool operator>= (const future<T>& a, const future<T>& b) { return a.get() >= b.get(); }\n    template <typename T> bool operator<  (const future<T>& a, const future<T>& b) { return a.get() <  b.get(); }\n    template <typename T> bool operator>  (const future<T>& a, const future<T>& b) { return a.get() >  b.get(); }\n\n    template <typename T> bool operator== (const future<T>& a, const T& b)         { return a.get() == b; }\n    template <typename T> bool operator== (const T& a,         const future<T>& b) { return a       == b.get(); }\n    template <typename T> bool operator!= (const future<T>& a, const T& b)         { return a.get() != b; }\n    template <typename T> bool operator!= (const T& a,         const future<T>& b) { return a       != b.get(); }\n    template <typename T> bool operator<= (const future<T>& a, const T& b)         { return a.get() <= b; }\n    template <typename T> bool operator<= (const T& a,         const future<T>& b) { return a       <= b.get(); }\n    template <typename T> bool operator>= (const future<T>& a, const T& b)         { return a.get() >= b; }\n    template <typename T> bool operator>= (const T& a,         const future<T>& b) { return a       >= b.get(); }\n    template <typename T> bool operator<  (const future<T>& a, const T& b)         { return a.get() <  b; }\n    template <typename T> bool operator<  (const T& a,         const future<T>& b) { return a       <  b.get(); }\n    template <typename T> bool operator>  (const future<T>& a, const T& b)         { return a.get() >  b; }\n    template <typename T> bool operator>  (const T& a,         const future<T>& b) { return a       >  b.get(); }\n\n// ----------------------------------------------------------------------------------------\n\n    class thread_pool_implementation : private multithreaded_object\n    {\n        /*!\n            CONVENTION\n                - num_threads_in_pool() == tasks.size()\n                - if (the destructor has been called) then\n                    - we_are_destructing == true\n                - else\n                    - we_are_destructing == false\n\n                - is_task_thread() == is_worker_thread(get_thread_id())\n\n                - m == the mutex used to protect everything in this object\n                - worker_thread_ids == an array that contains the thread ids for\n                  all the threads in the thread pool\n        !*/\n        typedef bound_function_pointer::kernel_1a_c bfp_type;\n\n        friend class thread_pool;\n        explicit thread_pool_implementation (\n            unsigned long num_threads\n        );\n\n    public:\n        ~thread_pool_implementation(\n        );\n\n        void wait_for_task (\n            uint64 task_id\n        ) const;\n\n        unsigned long num_threads_in_pool (\n        ) const;\n\n        void wait_for_all_tasks (\n        ) const;\n\n        bool is_task_thread (\n        ) const;\n\n        template <typename T>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)()\n        )\n        {\n            auto_mutex M(m);\n            const thread_id_type my_thread_id = get_thread_id();\n\n            // find a thread that isn't doing anything\n            long idx = find_empty_task_slot();\n            if (idx == -1 && is_worker_thread(my_thread_id))\n            {\n                // this function is being called from within a worker thread and there\n                // aren't any other worker threads free so just perform the task right\n                // here\n\n                M.unlock();\n                (obj.*funct)();\n\n                // return a task id that is both non-zero and also one\n                // that is never normally returned.  This way calls\n                // to wait_for_task() will never block given this id.\n                return 1;\n            }\n\n            // wait until there is a thread that isn't doing anything\n            while (idx == -1)\n            {\n                task_done_signaler.wait();\n                idx = find_empty_task_slot();\n            }\n\n            tasks[idx].thread_id = my_thread_id;\n            tasks[idx].task_id = make_next_task_id(idx);\n            tasks[idx].mfp0.set(obj,funct);\n\n            task_ready_signaler.signal();\n\n            return tasks[idx].task_id;\n        }\n\n        template <typename T>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(long),\n            long arg1\n        )\n        {\n            auto_mutex M(m);\n            const thread_id_type my_thread_id = get_thread_id();\n\n            // find a thread that isn't doing anything\n            long idx = find_empty_task_slot();\n            if (idx == -1 && is_worker_thread(my_thread_id))\n            {\n                // this function is being called from within a worker thread and there\n                // aren't any other worker threads free so just perform the task right\n                // here\n\n                M.unlock();\n                (obj.*funct)(arg1);\n\n                // return a task id that is both non-zero and also one\n                // that is never normally returned.  This way calls\n                // to wait_for_task() will never block given this id.\n                return 1;\n            }\n\n            // wait until there is a thread that isn't doing anything\n            while (idx == -1)\n            {\n                task_done_signaler.wait();\n                idx = find_empty_task_slot();\n            }\n\n            tasks[idx].thread_id = my_thread_id;\n            tasks[idx].task_id = make_next_task_id(idx);\n            tasks[idx].mfp1.set(obj,funct);\n            tasks[idx].arg1 = arg1;\n\n            task_ready_signaler.signal();\n\n            return tasks[idx].task_id;\n        }\n\n        template <typename T>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(long,long),\n            long arg1,\n            long arg2\n        )\n        {\n            auto_mutex M(m);\n            const thread_id_type my_thread_id = get_thread_id();\n\n            // find a thread that isn't doing anything\n            long idx = find_empty_task_slot();\n            if (idx == -1 && is_worker_thread(my_thread_id))\n            {\n                // this function is being called from within a worker thread and there\n                // aren't any other worker threads free so just perform the task right\n                // here\n\n                M.unlock();\n                (obj.*funct)(arg1, arg2);\n\n                // return a task id that is both non-zero and also one\n                // that is never normally returned.  This way calls\n                // to wait_for_task() will never block given this id.\n                return 1;\n            }\n\n            // wait until there is a thread that isn't doing anything\n            while (idx == -1)\n            {\n                task_done_signaler.wait();\n                idx = find_empty_task_slot();\n            }\n\n            tasks[idx].thread_id = my_thread_id;\n            tasks[idx].task_id = make_next_task_id(idx);\n            tasks[idx].mfp2.set(obj,funct);\n            tasks[idx].arg1 = arg1;\n            tasks[idx].arg2 = arg2;\n\n            task_ready_signaler.signal();\n\n            return tasks[idx].task_id;\n        }\n\n        struct function_object_copy \n        {\n            virtual ~function_object_copy(){}\n        };\n\n        template <typename T>\n        struct function_object_copy_instance : function_object_copy\n        {\n            function_object_copy_instance(const T& item_) : item(item_) {}\n            T item;\n            virtual ~function_object_copy_instance(){}\n        };\n\n        uint64 add_task_internal (\n            const bfp_type& bfp,\n            shared_ptr<function_object_copy>& item\n        );\n        /*!\n            ensures\n                - adds a task to call the given bfp object.\n                - swaps item into the internal task object which will have a lifetime\n                  at least as long as the running task.\n                - returns the task id for this new task\n        !*/\n\n        uint64 add_task_internal (\n            const bfp_type& bfp\n        ) { shared_ptr<function_object_copy> temp; return add_task_internal(bfp, temp); }\n        /*!\n            ensures\n                - adds a task to call the given bfp object.\n                - returns the task id for this new task\n        !*/\n\n        void shutdown_pool (\n        );\n        /*!\n            ensures\n                - causes all threads to terminate and blocks the\n                  caller until this happens.\n        !*/\n\n    private:\n\n        bool is_worker_thread (\n            const thread_id_type id\n        ) const;\n        /*!\n            requires\n                - m is locked\n            ensures\n                - if (thread with given id is one of the thread pool's worker threads or num_threads_in_pool() == 0) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void thread (\n        );\n        /*!\n            this is the function that executes the threads in the thread pool\n        !*/\n\n        long find_empty_task_slot (\n        ) const;\n        /*!\n            requires\n                - m is locked\n            ensures\n                - if (there is currently a empty task slot) then\n                    - returns the index of that task slot in tasks\n                    - there is a task slot\n                - else\n                    - returns -1\n        !*/\n\n        long find_ready_task (\n        ) const;\n        /*!\n            requires\n                - m is locked\n            ensures\n                - if (there is currently a task to do) then\n                    - returns the index of that task in tasks\n                - else\n                    - returns -1\n        !*/\n\n        uint64 make_next_task_id (\n            long idx\n        );\n        /*!\n            requires\n                - m is locked\n                - 0 <= idx < tasks.size()\n            ensures\n                - returns the next index to be used for tasks that are placed in\n                  tasks[idx]\n        !*/\n\n        unsigned long task_id_to_index (\n            uint64 id\n        ) const;\n        /*!\n            requires\n                - m is locked\n                - num_threads_in_pool() != 0\n            ensures\n                - returns the index in tasks corresponding to the given id\n        !*/\n\n        struct task_state_type\n        {\n            task_state_type() : is_being_processed(false), task_id(0), next_task_id(2), arg1(0), arg2(0) {}\n\n            bool is_ready () const \n            /*!\n                ensures\n                    - if (is_empty() == false && no thread is currently processing this task) then\n                        - returns true\n                    - else\n                        - returns false\n            !*/\n            {\n                return !is_being_processed && !is_empty();\n            }\n\n            bool is_empty () const\n            /*!\n                ensures\n                    - if (this task state is empty.  i.e. it doesn't contain a task to be processed) then\n                        - returns true\n                    - else \n                        - returns false\n            !*/\n            {\n                return task_id == 0;\n            }\n\n            bool is_being_processed;  // true when a thread is working on this task \n            uint64 task_id; // the id of this task.  0 means this task is empty\n            thread_id_type thread_id; // the id of the thread that requested this task \n\n            uint64 next_task_id;\n\n            long arg1;\n            long arg2;\n\n            member_function_pointer<> mfp0;\n            member_function_pointer<long> mfp1;\n            member_function_pointer<long,long> mfp2;\n            bfp_type bfp;\n\n            shared_ptr<function_object_copy> function_copy;\n\n        };\n\n        array<task_state_type> tasks;\n        array<thread_id_type> worker_thread_ids;\n\n        mutex m;\n        signaler task_done_signaler;\n        signaler task_ready_signaler;\n        bool we_are_destructing;\n\n        // restricted functions\n        thread_pool_implementation(thread_pool_implementation&);        // copy constructor\n        thread_pool_implementation& operator=(thread_pool_implementation&);    // assignment operator\n\n    };\n\n\n// ----------------------------------------------------------------------------------------\n\n    class thread_pool \n    {\n        /*!\n            This object is just a shell that holds a shared_ptr_thread_safe \n            to the real thread_pool_implementation object.  The reason for doing\n            it this way is so that we can allow any mixture of destruction orders\n            between thread_pool objects and futures.  Whoever gets destroyed\n            last cleans up the thread_pool_implementation resources.\n        !*/\n        typedef bound_function_pointer::kernel_1a_c bfp_type;\n\n    public:\n        explicit thread_pool (\n            unsigned long num_threads\n        ) \n        {\n            impl.reset(new thread_pool_implementation(num_threads));\n        }\n\n        ~thread_pool (\n        )\n        {\n            impl->shutdown_pool();\n        }\n\n        void wait_for_task (\n            uint64 task_id\n        ) const { impl->wait_for_task(task_id); }\n\n        unsigned long num_threads_in_pool (\n        ) const { return impl->num_threads_in_pool(); }\n\n        void wait_for_all_tasks (\n        ) const { impl->wait_for_all_tasks(); }\n\n        bool is_task_thread (\n        ) const { return impl->is_task_thread(); }\n\n        template <typename T>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)()\n        )\n        {\n            return impl->add_task(obj, funct);\n        }\n\n        template <typename T>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(long),\n            long arg1\n        )\n        {\n            return impl->add_task(obj, funct, arg1);\n        }\n\n        template <typename T>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(long,long),\n            long arg1,\n            long arg2\n        )\n        {\n            return impl->add_task(obj, funct, arg1, arg2);\n        }\n\n        // --------------------\n\n        template <typename F>\n        uint64 add_task (\n            F& function_object\n        ) \n        { \n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            bfp_type temp;\n            temp.set(function_object);\n            uint64 id = impl->add_task_internal(temp);\n\n            return id;\n        }\n        \n        template <typename F>\n        uint64 add_task_by_value (\n            const F& function_object\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<F>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<F>(function_object);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n\n            bfp_type temp;\n            temp.set(ptr->item);\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            return id;\n        }\n        \n        template <typename T>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)() const\n        ) \n        { \n            bfp_type temp;\n            temp.set(obj,funct);\n            uint64 id = impl->add_task_internal(temp);\n\n            return id;\n        }\n        \n        template <typename T>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)() const\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<const T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<const T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item,funct);\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            return id;\n        }\n        \n        template <typename T>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)() \n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item,funct);\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            return id;\n        }\n\n        uint64 add_task (\n            void (*funct)()\n        ) \n        { \n            bfp_type temp;\n            temp.set(funct);\n            uint64 id = impl->add_task_internal(temp);\n\n            return id;\n        }\n\n        // --------------------\n\n        template <typename F, typename A1>\n        uint64 add_task (\n            F& function_object,\n            future<A1>& arg1\n        ) \n        { \n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            bfp_type temp;\n            temp.set(function_object,arg1.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            return id;\n        }\n        \n        template <typename F, typename A1>\n        uint64 add_task_by_value (\n            const F& function_object,\n            future<A1>& arg1\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<F>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<F>(function_object);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, arg1.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(T1),\n            future<A1>& arg1\n        ) \n        { \n            bfp_type temp;\n            temp.set(obj,funct,arg1.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            return id;\n        }\n\n        template <typename T, typename T1, typename A1>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1),\n            future<A1>& arg1\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item,funct,arg1.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            return id;\n        }\n        \n        \n        template <typename T, typename T1, typename A1>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)(T1) const,\n            future<A1>& arg1\n        ) \n        { \n            bfp_type temp;\n            temp.set(obj,funct,arg1.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1) const,\n            future<A1>& arg1\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<const T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<const T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item,funct,arg1.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            return id;\n        }\n        \n        template <typename T1, typename A1>\n        uint64 add_task (\n            void (*funct)(T1),\n            future<A1>& arg1\n        ) \n        { \n            bfp_type temp;\n            temp.set(funct,arg1.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            return id;\n        }\n\n        // --------------------\n\n        template <typename F, typename A1, typename A2>\n        uint64 add_task (\n            F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2\n        ) \n        { \n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            bfp_type temp;\n            temp.set(function_object, arg1.get(), arg2.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            return id;\n        }\n        \n        template <typename F, typename A1, typename A2>\n        uint64 add_task_by_value (\n            const F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<F>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<F>(function_object);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, arg1.get(), arg2.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(T1,T2),\n            future<A1>& arg1,\n            future<A2>& arg2\n        ) \n        { \n            bfp_type temp;\n            temp.set(obj, funct, arg1.get(), arg2.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2),\n            future<A1>& arg1,\n            future<A2>& arg2\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, funct, arg1.get(), arg2.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)(T1,T2) const,\n            future<A1>& arg1,\n            future<A2>& arg2\n        ) \n        { \n            bfp_type temp;\n            temp.set(obj, funct, arg1.get(), arg2.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2) const,\n            future<A1>& arg1,\n            future<A2>& arg2\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<const T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<const T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, funct, arg1.get(), arg2.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            return id;\n        }\n        \n        template <typename T1, typename A1,\n                  typename T2, typename A2>\n        uint64 add_task (\n            void (*funct)(T1,T2),\n            future<A1>& arg1,\n            future<A2>& arg2\n        ) \n        { \n            bfp_type temp;\n            temp.set(funct, arg1.get(), arg2.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            return id;\n        }\n\n        // --------------------\n\n        template <typename F, typename A1, typename A2, typename A3>\n        uint64 add_task (\n            F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ) \n        { \n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            bfp_type temp;\n            temp.set(function_object, arg1.get(), arg2.get(), arg3.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            return id;\n        }\n        \n        template <typename F, typename A1, typename A2, typename A3>\n        uint64 add_task_by_value (\n            const F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<F>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<F>(function_object);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, arg1.get(), arg2.get(), arg3.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(T1,T2,T3),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ) \n        { \n            bfp_type temp;\n            temp.set(obj, funct, arg1.get(), arg2.get(), arg3.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, funct, arg1.get(), arg2.get(), arg3.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3) const,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ) \n        { \n            bfp_type temp;\n            temp.set(obj, funct, arg1.get(), arg2.get(), arg3.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3) const,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<const T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<const T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, funct, arg1.get(), arg2.get(), arg3.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            return id;\n        }\n        \n        template <typename T1, typename A1,\n                  typename T2, typename A2,\n                  typename T3, typename A3>\n        uint64 add_task (\n            void (*funct)(T1,T2,T3),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ) \n        { \n            bfp_type temp;\n            temp.set(funct, arg1.get(), arg2.get(), arg3.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            return id;\n        }\n\n        // --------------------\n\n        template <typename F, typename A1, typename A2, typename A3, typename A4>\n        uint64 add_task (\n            F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ) \n        { \n            COMPILE_TIME_ASSERT(is_function<F>::value == false);\n            COMPILE_TIME_ASSERT(is_pointer_type<F>::value == false);\n            \n            bfp_type temp;\n            temp.set(function_object, arg1.get(), arg2.get(), arg3.get(), arg4.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            arg4.task_id = id;\n            arg4.tp = impl;\n            return id;\n        }\n        \n        template <typename F, typename A1, typename A2, typename A3, typename A4>\n        uint64 add_task_by_value (\n            const F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<F>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<F>(function_object);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, arg1.get(), arg2.get(), arg3.get(), arg4.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the future to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            arg4.task_id = id;\n            arg4.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3,\n                              typename T4, typename A4>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(T1,T2,T3,T4),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ) \n        { \n            bfp_type temp;\n            temp.set(obj, funct, arg1.get(), arg2.get(), arg3.get(), arg4.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            arg4.task_id = id;\n            arg4.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3,\n                              typename T4, typename A4>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3,T4),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, funct, arg1.get(), arg2.get(), arg3.get(), arg4.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            arg4.task_id = id;\n            arg4.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3,\n                              typename T4, typename A4>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3,T4) const,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ) \n        { \n            bfp_type temp;\n            temp.set(obj, funct, arg1.get(), arg2.get(), arg3.get(), arg4.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            arg4.task_id = id;\n            arg4.tp = impl;\n            return id;\n        }\n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3,\n                              typename T4, typename A4>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3,T4) const,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ) \n        { \n            thread_pool_implementation::function_object_copy_instance<const T>* ptr = 0;\n            ptr = new thread_pool_implementation::function_object_copy_instance<const T>(obj);\n            shared_ptr<thread_pool_implementation::function_object_copy> function_copy(ptr);\n\n            bfp_type temp;\n            temp.set(ptr->item, funct, arg1.get(), arg2.get(), arg3.get(), arg4.get());\n            uint64 id = impl->add_task_internal(temp, function_copy);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            arg4.task_id = id;\n            arg4.tp = impl;\n            return id;\n        }\n        \n        template <typename T1, typename A1,\n                  typename T2, typename A2,\n                  typename T3, typename A3,\n                  typename T4, typename A4>\n        uint64 add_task (\n            void (*funct)(T1,T2,T3,T4),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ) \n        { \n            bfp_type temp;\n            temp.set(funct, arg1.get(), arg2.get(), arg3.get(), arg4.get());\n            uint64 id = impl->add_task_internal(temp);\n\n            // tie the futures to this task\n            arg1.task_id = id;\n            arg1.tp = impl;\n            arg2.task_id = id;\n            arg2.tp = impl;\n            arg3.task_id = id;\n            arg3.tp = impl;\n            arg4.task_id = id;\n            arg4.tp = impl;\n            return id;\n        }\n\n    private:\n\n        shared_ptr_thread_safe<thread_pool_implementation> impl;\n\n        // restricted functions\n        thread_pool(thread_pool&);        // copy constructor\n        thread_pool& operator=(thread_pool&);    // assignment operator\n\n    };\n\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void future<T>::\n    wait (\n    ) const\n    {\n        if (tp)\n        {\n            tp->wait_for_task(task_id);\n            tp.reset();\n            task_id = 0;\n        }\n    }\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#ifdef NO_MAKEFILE\n#include \"thread_pool_extension.cpp\"\n#endif\n\n#endif // DLIB_THREAD_POOl_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/thread_pool_extension_abstract.h",
    "content": "// Copyright (C) 2008  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_THREAD_POOl_ABSTRACT_Hh_\n#ifdef DLIB_THREAD_POOl_ABSTRACT_Hh_ \n\n#include \"threads_kernel_abstract.h\"\n#include \"../uintn.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class future\n    {\n        /*!\n            INITIAL VALUE \n                - is_ready() == true\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a container that allows you to safely pass objects \n                into the tasks performed by the thread_pool object defined below.  An\n                example will make it clear:\n\n                    // Suppose you have a global function defined as follows\n                    void add (int a, int b, int& result) { result = a + b; }\n\n                    // Also suppose you have a thread_pool named tp defined somewhere.\n                    // Then you could do the following.\n                    future<int> a, b, result;\n                    a = 3;\n                    b = 4;\n                    // this function call causes another thread to execute a call to the add() function\n                    // and passes in the int objects contained in a, b, and result\n                    tp.add_task(add,a,b,result);\n                    // This line will wait for the task in the thread pool to finish and then print the\n                    // value in the result integer.  So it will print a 7.\n                    cout << result << endl;\n        !*/\n\n    public:\n        future (\n        );\n        /*!\n            ensures\n                - The object of type T contained in this future has\n                  an initial value for its type. \n                - #is_ready() == true\n        !*/\n\n        future (\n            const T& item\n        );\n        /*!\n            ensures\n                - #get() == item\n                - #is_ready() == true\n        !*/\n\n        future (\n            const future& item\n        ); \n        /*!\n            ensures\n                - if (item.is_ready() == false) then\n                    - the call to this function blocks until the thread processing the task related\n                      to the item future has finished.\n                - #is_ready() == true\n                - #item.is_ready() == true\n                - #get() == item.get()\n        !*/\n\n        ~future (\n        );\n        /*!\n            ensures\n                - if (is_ready() == false) then\n                    - the call to this function blocks until the thread processing the task related\n                      to this future has finished.\n        !*/\n\n        bool is_ready (\n        ) const;\n        /*!\n            ensures\n                - if (the value of this future may not yet be ready to be accessed because it \n                  is in use by a task in a thread_pool) then\n                    - returns false \n                - else\n                    - returns true \n        !*/\n\n        future& operator=(\n            const T& item\n        );\n        /*!\n            ensures\n                - if (is_ready() == false) then\n                    - the call to this function blocks until the thread processing the task related\n                      to this future has finished.\n                - #is_ready() == true\n                - #get() == item\n                - returns *this\n        !*/\n\n        future& operator=(\n            const future& item\n        );\n        /*!\n            ensures\n                - if (is_ready() == false || item.is_ready() == false) then\n                    - the call to this function blocks until the threads processing the tasks related\n                      to this future and the item future have finished.\n                - #is_ready() == true\n                - #item.is_ready() == true\n                - #get() == item.get()\n                - returns *this\n        !*/\n\n        operator T& (\n        );\n        /*!\n            ensures\n                - if (is_ready() == false) then\n                    - the call to this function blocks until the thread processing the task related\n                      to this future has finished.\n                - #is_ready() == true\n                - returns get()\n        !*/\n\n        operator const T& (\n        ) const;\n        /*!\n            ensures\n                - if (is_ready() == false) then\n                    - the call to this function blocks until the thread processing the task related\n                      to this future has finished.\n                - #is_ready() == true\n                - returns get()\n        !*/\n\n        T& get (\n        );\n        /*!\n            ensures\n                - if (is_ready() == false) then\n                    - the call to this function blocks until the thread processing the task related\n                      to this future has finished.\n                - #is_ready() == true\n                - returns a non-const reference to the object of type T contained inside this future\n        !*/\n\n        const T& get (\n        ) const;\n        /*!\n            ensures\n                - if (is_ready() == false) then\n                    - the call to this function blocks until the thread processing the task related\n                      to this future has finished.\n                - #is_ready() == true\n                - returns a const reference to the object of type T contained inside this future\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    inline void swap (\n        future<T>& a,\n        future<T>& b\n    ) { std::swap(a.get(), b.get()); }\n    /*!\n        provides a global swap function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n\n//  The future object comes with overloads for all the usual comparison operators.\n\n    template <typename T> bool operator== (const future<T>& a, const future<T>& b) { return a.get() == b.get(); }\n    template <typename T> bool operator!= (const future<T>& a, const future<T>& b) { return a.get() != b.get(); }\n    template <typename T> bool operator<= (const future<T>& a, const future<T>& b) { return a.get() <= b.get(); }\n    template <typename T> bool operator>= (const future<T>& a, const future<T>& b) { return a.get() >= b.get(); }\n    template <typename T> bool operator<  (const future<T>& a, const future<T>& b) { return a.get() <  b.get(); }\n    template <typename T> bool operator>  (const future<T>& a, const future<T>& b) { return a.get() >  b.get(); }\n\n    template <typename T> bool operator== (const future<T>& a, const T& b)         { return a.get() == b; }\n    template <typename T> bool operator== (const T& a,         const future<T>& b) { return a       == b.get(); }\n    template <typename T> bool operator!= (const future<T>& a, const T& b)         { return a.get() != b; }\n    template <typename T> bool operator!= (const T& a,         const future<T>& b) { return a       != b.get(); }\n    template <typename T> bool operator<= (const future<T>& a, const T& b)         { return a.get() <= b; }\n    template <typename T> bool operator<= (const T& a,         const future<T>& b) { return a       <= b.get(); }\n    template <typename T> bool operator>= (const future<T>& a, const T& b)         { return a.get() >= b; }\n    template <typename T> bool operator>= (const T& a,         const future<T>& b) { return a       >= b.get(); }\n    template <typename T> bool operator<  (const future<T>& a, const T& b)         { return a.get() <  b; }\n    template <typename T> bool operator<  (const T& a,         const future<T>& b) { return a       <  b.get(); }\n    template <typename T> bool operator>  (const future<T>& a, const T& b)         { return a.get() >  b; }\n    template <typename T> bool operator>  (const T& a,         const future<T>& b) { return a       >  b.get(); }\n\n// ----------------------------------------------------------------------------------------\n\n    class thread_pool \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a fixed size group of threads which you can\n                submit tasks to and then wait for those tasks to be completed. \n\n                Note that setting the number of threads to 0 is a valid way to\n                use this object.  It causes it to not contain any threads\n                at all.  When tasks are submitted to the object in this mode\n                the tasks are processed within the calling thread.  So in this\n                mode any thread that calls add_task() is considered to be\n                a thread_pool thread capable of executing tasks.\n\n                This object is also implemented such that no memory allocations occur \n                after the thread_pool has been constructed so long as the user doesn't \n                call any of the add_task_by_value() routines.  The future object also \n                doesn't perform any memory allocations or contain any system resources \n                such as mutex objects. \n\n            EXCEPTIONS\n                Note that if an exception is thrown inside a task thread and \n                is not caught then the normal rule for uncaught exceptions in\n                threads applies. That is, the application will be terminated.\n        !*/\n\n    public:\n        explicit thread_pool (\n            unsigned long num_threads\n        );\n        /*!\n            ensures\n                - #num_threads_in_pool() == num_threads\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create threading objects.\n        !*/\n\n        ~thread_pool(\n        );\n        /*!\n            ensures\n                - blocks until all tasks in the pool have finished.\n        !*/\n\n        bool is_task_thread (\n        ) const;\n        /*!\n            ensures\n                - if (the thread calling this function is one of the threads in this\n                  thread pool or num_threads_in_pool() == 0) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        unsigned long num_threads_in_pool (\n        ) const;\n        /*!\n            ensures\n                - returns the number of threads contained in this thread pool.  That is, returns\n                  the maximum number of tasks that this object will process concurrently.\n        !*/\n\n        template <typename F>\n        uint64 add_task_by_value (\n            const F& function_object\n        );\n        /*!\n            requires\n                - function_object() is a valid expression \n            ensures\n                - makes a copy of function_object, call it FCOPY.\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls FCOPY() within the calling thread and returns when it finishes\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls FCOPY().\n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        template <typename T>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)()\n        );\n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n                - obj will not go out of scope until after the task has completed (i.e. \n                  this function passes obj to the task by reference.  If you want to avoid\n                  this restriction then use add_task_by_value())\n            ensures\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls (obj.*funct)() within the calling thread and returns\n                      when it finishes.\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls (obj.*funct)()\n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        template <typename T>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)() \n        ); \n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n            ensures\n                - makes a copy of obj, call it OBJ_COPY.\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls (OBJ_COPY.*funct)() within the calling thread and returns \n                      when it finishes.\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls (OBJ_COPY.*funct)().\n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        template <typename T>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(long),\n            long arg1\n        );\n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n                - obj will not go out of scope until after the task has completed (i.e. \n                  this function passes obj to the task by reference.  If you want to avoid\n                  this restriction then use add_task_by_value())\n            ensures\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls (obj.*funct)(arg1) within the calling thread and returns\n                      when it finishes\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls (obj.*funct)(arg1)\n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        template <typename T>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(long,long),\n            long arg1,\n            long arg2\n        );\n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n                - obj will not go out of scope until after the task has completed (i.e. \n                  this function passes obj to the task by reference.  If you want to avoid\n                  this restriction then use add_task_by_value())\n            ensures\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls (obj.*funct)(arg1,arg2) within the calling thread and returns\n                      when it finishes\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls (obj.*funct)(arg1,arg2)\n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        void wait_for_task (\n            uint64 task_id\n        ) const;\n        /*!\n            ensures\n                - if (there is currently a task with the given id being executed in the thread pool) then\n                    - the call to this function blocks until the task with the given id is complete\n                - else\n                    - the call to this function returns immediately\n        !*/\n\n        void wait_for_all_tasks (\n        ) const;\n        /*!\n            ensures\n                - the call to this function blocks until all tasks which were submitted\n                  to the thread pool by the thread that is calling this function have \n                  finished.\n        !*/\n\n        // --------------------\n\n        template <typename F, typename A1>\n        uint64 add_task (\n            F& function_object,\n            future<A1>& arg1\n        );\n        /*!\n            requires\n                - function_object(arg1.get()) is a valid expression \n                  (i.e. The A1 type stored in the future must be a type that can be passed into the given function object)\n                - function_object will not go out of scope until after the task has completed (i.e. \n                  this function passes function_object to the task by reference.  If you want to avoid\n                  this restriction then use add_task_by_value())\n            ensures\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls function_object(arg1.get()) within the calling thread and returns\n                      when it finishes\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls function_object(arg1.get()).\n                - #arg1.is_ready() == false \n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        template <typename F, typename A1>\n        uint64 add_task_by_value (\n            const F& function_object,\n            future<A1>& arg1\n        );\n        /*!\n            requires\n                - function_object(arg1.get()) is a valid expression \n                  (i.e. The A1 type stored in the future must be a type that can be passed into the given function object)\n            ensures\n                - makes a copy of function_object, call it FCOPY.\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls FCOPY(arg1.get()) within the calling thread and returns when it finishes\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls FCOPY(arg1.get()).\n                - #arg1.is_ready() == false \n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        template <typename T, typename T1, typename A1>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(T1),\n            future<A1>& arg1\n        ); \n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n                - (obj.*funct)(arg1.get()) must be a valid expression.\n                  (i.e. The A1 type stored in the future must be a type that can be passed into the given function)\n                - obj will not go out of scope until after the task has completed (i.e. \n                  this function passes obj to the task by reference.  If you want to avoid\n                  this restriction then use add_task_by_value())\n            ensures\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls (obj.*funct)(arg1.get()) within the calling thread and returns\n                      when it finishes\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls (obj.*funct)(arg1.get()).\n                - #arg1.is_ready() == false \n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n        \n        template <typename T, typename T1, typename A1>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1),\n            future<A1>& arg1\n        ); \n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n                - (obj.*funct)(arg1.get()) must be a valid expression.\n                  (i.e. The A1 type stored in the future must be a type that can be passed into the given function)\n            ensures\n                - makes a copy of obj, call it OBJ_COPY.\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls (OBJ_COPY.*funct)(arg1.get()) within the calling thread and returns \n                      when it finishes.\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls (OBJ_COPY.*funct)(arg1.get()).\n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        template <typename T, typename T1, typename A1>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)(T1) const,\n            future<A1>& arg1\n        ); \n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n                - (obj.*funct)(arg1.get()) must be a valid expression.\n                  (i.e. The A1 type stored in the future must be a type that can be passed into the given function)\n                - obj will not go out of scope until after the task has completed (i.e. \n                  this function passes obj to the task by reference.  If you want to avoid\n                  this restriction then use add_task_by_value())\n            ensures\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls (obj.*funct)(arg1.get()) within the calling thread and returns\n                      when it finishes\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls (obj.*funct)(arg1.get()).\n                - #arg1.is_ready() == false \n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n        \n        template <typename T, typename T1, typename A1>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1) const,\n            future<A1>& arg1\n        ); \n        /*!\n            requires\n                - funct == a valid member function pointer for class T\n                - (obj.*funct)(arg1.get()) must be a valid expression.\n                  (i.e. The A1 type stored in the future must be a type that can be passed into the given function)\n            ensures\n                - makes a copy of obj, call it OBJ_COPY.\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls (OBJ_COPY.*funct)(arg1.get()) within the calling thread and returns \n                      when it finishes.\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls (OBJ_COPY.*funct)(arg1.get()).\n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        template <typename T1, typename A1>\n        uint64 add_task (\n            void (*funct)(T1),\n            future<A1>& arg1\n        ); \n        /*!\n            requires\n                - funct == a valid function pointer \n                - (funct)(arg1.get()) must be a valid expression.\n                  (i.e. The A1 type stored in the future must be a type that can be passed into the given function)\n            ensures\n                - if (is_task_thread() == true and there aren't any free threads available) then\n                    - calls funct(arg1.get()) within the calling thread and returns\n                      when it finishes\n                - else\n                    - the call to this function blocks until there is a free thread in the pool\n                      to process this new task.  Once a free thread is available the task\n                      is handed off to that thread which then calls funct(arg1.get()).\n                - #arg1.is_ready() == false \n                - returns a task id that can be used by this->wait_for_task() to wait\n                  for the submitted task to finish.\n        !*/\n\n        // --------------------------------------------------------------------------------\n        // The remainder of this class just contains overloads for add_task() and add_task_by_value() \n        // that take up to 4 futures (as well as 0 futures).  Their behavior is identical to the above \n        // add_task() and add_task_by_value() functions.\n        // --------------------------------------------------------------------------------\n\n        template <typename F, typename A1, typename A2>\n        uint64 add_task (\n            F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2\n        );\n\n        template <typename F, typename A1, typename A2>\n        uint64 add_task_by_value (\n            const F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2\n        );\n\n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(T1,T2),\n            future<A1>& arg1,\n            future<A2>& arg2\n        ); \n        \n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2),\n            future<A1>& arg1,\n            future<A2>& arg2\n        ); \n\n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)(T1,T2) const,\n            future<A1>& arg1,\n            future<A2>& arg2\n        ); \n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2) const,\n            future<A1>& arg1,\n            future<A2>& arg2\n        ); \n\n        template <typename T1, typename A1,\n                  typename T2, typename A2>\n        uint64 add_task (\n            void (*funct)(T1,T2),\n            future<A1>& arg1,\n            future<A2>& arg2\n        ); \n\n        // --------------------\n\n        template <typename F, typename A1, typename A2, typename A3>\n        uint64 add_task (\n            F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        );\n\n        template <typename F, typename A1, typename A2, typename A3>\n        uint64 add_task_by_value (\n            const F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        );\n\n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(T1,T2,T3),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ); \n\n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ); \n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3) const,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ); \n\n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3) const,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ); \n        \n        template <typename T1, typename A1,\n                  typename T2, typename A2,\n                  typename T3, typename A3>\n        uint64 add_task (\n            void (*funct)(T1,T2,T3),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3\n        ); \n\n        // --------------------\n\n        template <typename F, typename A1, typename A2, typename A3, typename A4>\n        uint64 add_task (\n            F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        );\n\n        template <typename F, typename A1, typename A2, typename A3, typename A4>\n        uint64 add_task_by_value (\n            const F& function_object,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        );\n\n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3,\n                              typename T4, typename A4>\n        uint64 add_task (\n            T& obj,\n            void (T::*funct)(T1,T2,T3,T4),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ); \n\n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3,\n                              typename T4, typename A4>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3,T4),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ); \n        \n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3,\n                              typename T4, typename A4>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3,T4) const,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ); \n\n        template <typename T, typename T1, typename A1,\n                              typename T2, typename A2,\n                              typename T3, typename A3,\n                              typename T4, typename A4>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)(T1,T2,T3,T4) const,\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        ); \n        \n        template <typename T1, typename A1,\n                  typename T2, typename A2,\n                  typename T3, typename A3,\n                  typename T4, typename A4>\n        uint64 add_task (\n            void (*funct)(T1,T2,T3,T4),\n            future<A1>& arg1,\n            future<A2>& arg2,\n            future<A3>& arg3,\n            future<A4>& arg4\n        );\n\n        // --------------------\n\n        template <typename F>\n        uint64 add_task (\n            F& function_object\n        );\n\n        template <typename T>\n        uint64 add_task (\n            const T& obj,\n            void (T::*funct)() const,\n        ); \n        \n        template <typename T>\n        uint64 add_task_by_value (\n            const T& obj,\n            void (T::*funct)() const\n        ); \n\n        uint64 add_task (\n            void (*funct)()\n        ); \n\n        // --------------------\n\n    private:\n\n        // restricted functions\n        thread_pool(thread_pool&);        // copy constructor\n        thread_pool& operator=(thread_pool&);    // assignment operator\n    };\n\n}\n\n// ----------------------------------------------------------------------------------------\n\n#endif // DLIB_THREAD_POOl_ABSTRACT_Hh_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/thread_specific_data_extension.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREAD_SPECIFIC_DATA_EXTENSIOn_\n#define DLIB_THREAD_SPECIFIC_DATA_EXTENSIOn_\n\n#include \"thread_specific_data_extension_abstract.h\"\n#include \"threads_kernel_abstract.h\"\n#include \"../binary_search_tree.h\"\n#include \"auto_mutex_extension.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class thread_specific_data\n    {\n        /*!\n            CONVENTION\n                - for all valid ID:\n                  (*items[ID]) == pointer to the data for thread with id ID\n        !*/\n    public:\n\n        thread_specific_data (\n        )\n        {\n            thread_end_handler_calls_left = 0;\n        }\n\n        ~thread_specific_data (\n        )\n        {\n            // We should only call the unregister_thread_end_handler function if there are\n            // some outstanding callbacks we expect to get.  Otherwise lets avoid calling it\n            // since the dlib state that maintains the registered thread end handlers may have\n            // been destructed already (since the program might be in the process of terminating).\n            bool call_unregister = false;\n            m.lock();\n            if (thread_end_handler_calls_left > 0)\n                call_unregister = true;\n            m.unlock();\n\n            if (call_unregister)\n                unregister_thread_end_handler(const_cast<thread_specific_data&>(*this),&thread_specific_data::thread_end_handler);\n\n            auto_mutex M(m);\n            items.reset();\n            while (items.move_next())\n            {\n                delete items.element().value();\n            }\n        }\n\n        inline T& data (\n        ) { return get_data(); }\n\n        inline const T& data (\n        ) const { return get_data(); }\n\n    private:\n\n        T& get_data (\n        ) const\n        {\n            thread_id_type id = get_thread_id();\n            auto_mutex M(m);\n\n            T** item = items[id];\n            if (item)\n            {\n                return **item;\n            }\n            else\n            {\n                // register an end handler for this thread so long as it is a dlib created thread.\n                T* new_item = new T;\n\n                bool in_tree = false;\n                try\n                {\n                    T* temp_item = new_item;\n                    thread_id_type temp_id = id;\n                    items.add(temp_id,temp_item);\n                    in_tree = true;\n\n                    if (is_dlib_thread(id))\n                    {\n                        register_thread_end_handler(const_cast<thread_specific_data&>(*this),&thread_specific_data::thread_end_handler);\n                        ++thread_end_handler_calls_left;\n                    }\n                }\n                catch (...)\n                {\n                    if (in_tree)\n                    {\n                        items.destroy(id);\n                    }\n                    delete new_item;\n                    throw;\n                }\n\n                return *new_item;\n            }\n        }\n\n        void thread_end_handler (\n        )\n        {\n            const thread_id_type id = get_thread_id();\n            thread_id_type junk = 0;\n            T* item = 0;\n            auto_mutex M(m);\n            --thread_end_handler_calls_left;\n            if (items[id])\n            {\n                items.remove(id,junk,item);\n                delete item;\n            }\n        }\n\n        mutable typename binary_search_tree<thread_id_type,T*>::kernel_2a items;\n        mutex m;\n        mutable long thread_end_handler_calls_left;\n\n        // restricted functions\n        thread_specific_data(thread_specific_data&);        // copy constructor\n        thread_specific_data& operator=(thread_specific_data&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THREAD_SPECIFIC_DATA_EXTENSIOn_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/thread_specific_data_extension_abstract.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_THREAD_SPECIFIC_DATA_EXTENSIOn_ABSTRACT_\n#ifdef DLIB_THREAD_SPECIFIC_DATA_EXTENSIOn_ABSTRACT_\n\n#include \"threads_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class thread_specific_data\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a container of thread specific data.  When\n                a thread calls the data() member function it gets a reference to a T object\n                that is specific to its own thread.  Each subsequent call to data() from that\n                thread returns the same instance.  Also note that when a thread ends\n                the instance of its data() object gets destroyed and freed (if the thread\n                was created by the dlib library).  So any pointers or references to the object \n                will be invalid after the thread has ended.\n        !*/\n    public:\n\n        thread_specific_data (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n        !*/\n\n        ~thread_specific_data (\n        );\n        /*!\n            ensures\n                - all resources allocated by *this have been freed.  This includes\n                  all the thread specific data returned by the data() functions.\n        !*/\n\n        T& data (\n        );\n        /*!\n            ensures\n                - if (the calling thread has NOT called this->data() before) then\n                    - constructs an instance of T that is specific to the calling\n                      thread.\n                - returns a reference to the T instance that was constructed for \n                  the calling thread.\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor\n                  If an exception is thrown then the call to data() will have\n                  no effect on *this.\n        !*/\n\n        const T& data (\n        ) const;\n        /*!\n            ensures\n                - if (the calling thread has NOT called this->data() before) then\n                    - constructs an instance of T that is specific to the calling\n                      thread.\n                - returns a const reference to the T instance that was constructed for \n                  the calling thread.\n            throws\n                - std::bad_alloc or any exception thrown by T's constructor\n                  If an exception is thrown then the call to data() will have\n                  no effect on *this.\n        !*/\n\n    private:\n        // restricted functions\n        thread_specific_data(thread_specific_data&);        // copy constructor\n        thread_specific_data& operator=(thread_specific_data&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THREAD_SPECIFIC_DATA_EXTENSIOn_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threaded_object_extension.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADED_OBJECT_EXTENSIOn_CPP\n#define DLIB_THREADED_OBJECT_EXTENSIOn_CPP\n\n#include \"threaded_object_extension.h\"\n#include \"create_new_thread_extension.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    threaded_object::\n    threaded_object (\n    ):\n        s(m_),\n        id1(0),\n        is_running_(false),\n        is_alive_(false),\n        should_stop_(false),\n        id_valid(false)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    threaded_object::\n    ~threaded_object (\n    )\n    {\n        DLIB_ASSERT(is_alive() == false,\n               \"\\tthreaded_object::~threaded_object()\"\n               << \"\\n\\tYou have let a threaded object destruct itself before terminating its thread\"\n               << \"\\n\\tthis: \" << this\n        );\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool threaded_object::\n    is_running (\n    ) const \n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(id1 != get_thread_id() || id_valid == false,\n               \"\\tbool threaded_object::is_running()\"\n               << \"\\n\\tYou can NOT call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        return is_running_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool threaded_object::\n    is_alive (\n    ) const\n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(id1 != get_thread_id() || id_valid == false,\n               \"\\tbool threaded_object::is_alive()\"\n               << \"\\n\\tYou can NOT call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        return is_alive_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void threaded_object::\n    wait (\n    ) const\n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(id1 != get_thread_id() || id_valid == false,\n               \"\\tvoid threaded_object::wait()\"\n               << \"\\n\\tYou can NOT call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        while (is_alive_)\n            s.wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void threaded_object::\n    start (\n    )\n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(id1 != get_thread_id() || id_valid == false,\n               \"\\tvoid threaded_object::start()\"\n               << \"\\n\\tYou can NOT call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        if (is_alive_ == false)\n        {\n            if (create_new_thread<threaded_object,&threaded_object::thread_helper>(*this) == false)\n            {\n                is_running_ = false;\n                throw thread_error();\n            }\n        }\n        is_alive_ = true;\n        is_running_ = true;\n        should_stop_ = false;\n        s.broadcast();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void threaded_object::\n    restart (\n    )\n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(id1 != get_thread_id() || id_valid == false,\n               \"\\tvoid threaded_object::restart()\"\n               << \"\\n\\tYou can NOT call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        if (is_alive_ == false)\n        {\n            if (create_new_thread<threaded_object,&threaded_object::thread_helper>(*this) == false)\n            {\n                is_running_ = false;\n                throw thread_error();\n            }\n            should_respawn_ = false;\n        }\n        else\n        {\n            should_respawn_ = true;\n        }\n        is_alive_ = true;\n        is_running_ = true;\n        should_stop_ = false;\n        s.broadcast();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void threaded_object::\n    set_respawn (\n    )\n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(id1 != get_thread_id() || id_valid == false,\n               \"\\tvoid threaded_object::set_respawn()\"\n               << \"\\n\\tYou can NOT call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        should_respawn_ = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool threaded_object::\n    should_respawn (\n    ) const\n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(id1 != get_thread_id() || id_valid == false,\n               \"\\tbool threaded_object::should_respawn()\"\n               << \"\\n\\tYou can NOT call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        return should_respawn_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void threaded_object::\n    pause (\n    )\n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(id1 != get_thread_id() || id_valid == false,\n               \"\\tvoid threaded_object::pause()\"\n               << \"\\n\\tYou can NOT call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        is_running_ = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void threaded_object::\n    stop (\n    )\n    {\n        auto_mutex M(m_);\n\n        DLIB_ASSERT(id1 != get_thread_id() || id_valid == false,\n               \"\\tvoid threaded_object::stop()\"\n               << \"\\n\\tYou can NOT call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n\n        should_stop_ = true;\n        is_running_ = false;\n        should_respawn_ = false;\n        s.broadcast();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool threaded_object::\n    should_stop (\n    ) const\n    {\n        auto_mutex M(m_);\n        DLIB_ASSERT(is_alive_ && id1 == get_thread_id() && id_valid == true,\n               \"\\tbool threaded_object::should_stop()\"\n               << \"\\n\\tYou can only call this function from the thread that executes threaded_object::thread\"\n               << \"\\n\\tthis: \" << this\n        );\n        while (is_running_ == false && should_stop_ == false)\n            s.wait();\n        return should_stop_;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void threaded_object::\n    thread_helper(\n    )\n    {\n#ifdef ENABLE_ASSERTS\n        id1 = get_thread_id();\n        id_valid = true;\n#endif\n        while (true)\n        {\n            m_.lock();\n            should_respawn_ = false;\n            m_.unlock();\n\n            thread();\n\n            auto_mutex M(m_);\n\n            if (should_respawn_)\n                continue;\n\n#ifdef ENABLE_ASSERTS\n            id_valid = false;\n#endif\n\n            is_alive_ = false;\n            is_running_ = false;\n            should_stop_ = false;\n            s.broadcast();\n\n            return;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THREADED_OBJECT_EXTENSIOn_CPP\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threaded_object_extension.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADED_OBJECT_EXTENSIOn_\n#define DLIB_THREADED_OBJECT_EXTENSIOn_ \n\n#include \"threaded_object_extension_abstract.h\"\n#include \"threads_kernel.h\"\n#include \"auto_mutex_extension.h\"\n#include \"../algs.h\"\n#include \"../assert.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class threaded_object\n    {\n        /*!\n            INITIAL VALUE\n                - is_running_ == false\n                - is_alive_ == false \n                - should_stop_ == false\n                - should_respawn_ == false\n\n#ifdef ENABLE_ASSERTS\n                - id_valid == false \n                - id1 == get_main_thread_id()\n#endif\n\n            CONVENTION\n                - is_running() == is_running_\n                - is_alive() == is_alive_\n                - should_stop() == should_stop_\n                - should_respawn() == should_respawn_\n\n\n#ifdef ENABLE_ASSERTS\n                - if (when thread() is executing) then\n                    - id1 == the id of the running thread \n                    - id_valid == true\n                - else\n                    - id1 == an undefined value\n                    - id_valid == false\n#endif\n\n                - m_ == the mutex used to protect all our variables\n                - s == the signaler for m_\n        !*/\n\n    public:\n\n        threaded_object (\n        );\n\n        virtual ~threaded_object (\n        );\n\n        bool is_running (\n        ) const;\n\n        bool is_alive (\n        ) const;\n\n        void wait (\n        ) const;\n\n        void start (\n        );\n\n        void restart (\n        );\n\n        void set_respawn (\n        );\n\n        bool should_respawn (\n        ) const;\n\n        void pause (\n        );\n\n        void stop (\n        );\n\n    protected:\n\n        bool should_stop (\n        ) const;\n\n    private:\n\n        void thread_helper(\n        );\n\n        virtual void thread (\n        ) = 0;\n\n        mutex m_;\n        signaler s;\n        thread_id_type id1;\n        bool is_running_;\n        bool is_alive_;\n        bool should_stop_;\n        bool should_respawn_;\n        bool id_valid;\n\n        // restricted functions\n        threaded_object(threaded_object&);        // copy constructor\n        threaded_object& operator=(threaded_object&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"threaded_object_extension.cpp\"\n#endif\n\n#endif // DLIB_THREADED_OBJECT_EXTENSIOn_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threaded_object_extension_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_THREADED_OBJECT_EXTENSIOn_ABSTRACT_\n#ifdef DLIB_THREADED_OBJECT_EXTENSIOn_ABSTRACT_ \n\n#include \"threads_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class threaded_object\n    {\n        /*!\n            INITIAL VALUE\n                - is_running() == false\n                - is_alive() == false \n                - should_respawn() == false\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple threaded object.  To use it you inherit\n                from it and define the thread() function.  Then when you call start()\n                it will spawn a thread that calls this->thread().  \n        !*/\n    public:\n\n        threaded_object (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create threading objects.\n        !*/\n\n        virtual ~threaded_object (\n        );\n        /*!\n            requires\n                - is_alive() == false\n                  (i.e. in the destructor for the object you derive from this one you\n                  must wait for this->thread() to end.)\n            ensures\n                - all resources allocated by *this have been freed.  \n        !*/\n\n        bool is_running (\n        ) const;\n        /*!\n            requires\n                - is not called from this->thread()\n            ensures\n                - if (is_alive() && this->thread() is currently supposed to be executing) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool is_alive (\n        ) const;\n        /*!\n            requires\n                - is not called from this->thread()\n            ensures\n                - if (this->thread() has been called by some thread and has yet to terminate) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        void wait (\n        ) const;\n        /*!\n            requires\n                - is not called from this->thread()\n            ensures\n                - if (is_alive() == true) then\n                    - blocks until this->thread() terminates\n        !*/\n\n        void start (\n        );\n        /*!\n            requires\n                - is not called from this->thread()\n            ensures\n                - #is_alive() == true\n                - #is_running() == true\n                - #should_stop() == false\n            throws\n                - std::bad_alloc or dlib::thread_error\n                    If either of these exceptions are thrown then \n                    #is_alive() == false and #is_running() == false\n        !*/\n\n        void set_respawn (\n        );\n        /*!\n            requires\n                - is not called from this->thread()\n            ensures\n                - #should_respawn() == true\n        !*/\n\n        bool should_respawn (\n        ) const;\n        /*!\n            requires\n                - is not called from this->thread()\n            ensures\n                - returns true if the thread will automatically restart upon termination and\n                  false otherwise.  Note that every time a thread starts it sets should_respawn() \n                  back to false.  Therefore, a single call to set_respawn() can cause at most\n                  one respawn to occur. \n        !*/\n\n        void restart (\n        );\n        /*!\n            requires\n                - is not called from this->thread()\n            ensures\n                - This function atomically executes set_respawn() and start().  The precise meaning of this\n                  is defined below.\n                - if (is_alive()) then\n                    - #should_respawn() == true\n                - else\n                    - #should_respawn() == false \n                - #is_alive() == true\n                - #is_running() == true\n                - #should_stop() == false\n            throws\n                - std::bad_alloc or dlib::thread_error\n                    If either of these exceptions are thrown then \n                    #is_alive() == false and #is_running() == false\n        !*/\n\n        void pause (\n        );\n        /*!\n            requires\n                - is not called from this->thread()\n            ensures\n                - #is_running() == false\n        !*/\n\n        void stop (\n        );\n        /*!\n            requires\n                - is not called from this->thread()\n            ensures\n                - #should_stop() == true\n                - #is_running() == false\n                - #should_respawn() == false\n        !*/\n\n    protected:\n\n        bool should_stop (\n        ) const;\n        /*!\n            requires\n                - is only called from the thread that executes this->thread()\n            ensures\n                - calls to this function block until (#is_running() == true || #should_stop() == true) \n                - if (this thread is supposed to terminate) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n    private:\n\n        virtual void thread (\n        ) = 0;\n        /*!\n            requires\n                - is executed in its own thread\n                - is only executed in one thread at a time\n            throws\n                - does not throw any exceptions\n        !*/\n\n        // restricted functions\n        threaded_object(threaded_object&);        // copy constructor\n        threaded_object& operator=(threaded_object&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THREADED_OBJECT_EXTENSIOn_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threads_kernel.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADs_KERNEL_\n#define DLIB_THREADs_KERNEL_\n\n#include \"../platform.h\"\n\n#ifdef WIN32\n#include \"windows.h\"\n#endif\n\n#ifndef WIN32\n#include \"posix.h\"\n#endif\n\n#endif // DLIB_THREADs_KERNEL_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threads_kernel_1.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADS_KERNEL_1_CPp_\n#define DLIB_THREADS_KERNEL_1_CPp_\n\n#include \"../platform.h\"\n\n#ifdef WIN32\n\n#include \"threads_kernel_1.h\"\n\n#include <process.h>\n\n\nnamespace dlib\n{\n    namespace threads_kernel_shared_helpers\n    {\n\n    // -----------------------------------------------------------------------------------\n\n        struct info\n        {\n            void* param;\n            void (*funct)(void*);\n        };\n\n    // -----------------------------------------------------------------------------------\n\n        unsigned int __stdcall thread_starter (\n            void* param\n        )\n        {\n            info* alloc_p = static_cast<info*>(param);\n            info p = *alloc_p;\n            delete alloc_p;\n\n            p.funct(p.param);\n            return 0;\n        }\n\n    // -----------------------------------------------------------------------------------\n\n        bool spawn_thread (\n            void (*funct)(void*),\n            void* param\n        )\n        {\n            info* p;\n            try { p = new info; }\n            catch (...) { return false; }\n\n            p->funct = funct;\n            p->param = param;\n\n\n            unsigned int garbage;\n\n            HANDLE thandle = (HANDLE)_beginthreadex (NULL,0,thread_starter,p,0,&garbage);\n            // make thread and add it to the pool\n\n            // return false if _beginthreadex didn't work\n            if ( thandle == 0)\n            {\n                delete p;\n                return false;\n            }\n\n            // throw away the thread handle\n            CloseHandle(thandle); \n            return true;\n        }\n\n    // -----------------------------------------------------------------------------------\n\n    }\n\n}\n\n#endif // WIN32\n\n#endif // DLIB_THREADS_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threads_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADS_KERNEl_1_\n#define DLIB_THREADS_KERNEl_1_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n#include \"threads_kernel_abstract.h\"\n\n#include \"../windows_magic.h\"\n#include <windows.h>\n#include \"../algs.h\"\n\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n    \n    typedef DWORD thread_id_type;\n\n    inline thread_id_type get_thread_id (\n    )\n    {\n        return GetCurrentThreadId();\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // mutex object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    // forward declaration of signaler\n    class signaler;\n\n    class mutex\n    {\n    public:\n\n        mutex (\n        ) \n        {\n            InitializeCriticalSection(&cs);\n        }\n\n        ~mutex (\n        ) { DeleteCriticalSection(&cs); }\n\n        void lock (\n        ) const { EnterCriticalSection(&cs); }\n\n        void unlock (\n        ) const { LeaveCriticalSection(&cs); }\n\n    private:\n\n        mutable CRITICAL_SECTION cs;\n\n        // restricted functions\n        mutex(mutex&);        // copy constructor\n        mutex& operator=(mutex&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // signaler object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class signaler\n    {\n\n    public:\n        signaler (\n            const mutex& associated_mutex\n        ) :\n            hSemaphore(CreateSemaphore (NULL, 0, 100000000, NULL)),\n            waiters(0),\n            hCountSema(CreateSemaphore (NULL,0,100000000,NULL)),\n            m(associated_mutex)\n        {           \n            if (hSemaphore == NULL || hCountSema == NULL)\n            {\n                if (hSemaphore != NULL)\n                {\n                    CloseHandle(hSemaphore); \n                }\n\n                if (hCountSema != NULL)\n                {\n                    CloseHandle(hCountSema); \n                }\n\n                throw dlib::thread_error(ECREATE_SIGNALER,\n        \"in function signaler::signaler() an error occurred making the signaler\"\n                );        \n            }\n        }\n\n        ~signaler (\n        ) { CloseHandle(hSemaphore); CloseHandle(hCountSema);}\n\n        void wait (\n        ) const\n        { \n            // get a lock on the mutex for the waiters variable\n            waiters_mutex.lock();\n            // mark that one more thread will be waiting on this signaler\n            ++waiters;\n            // release the mutex for waiters\n            waiters_mutex.unlock();\n\n            // release the associated mutex\n            m.unlock();\n\n            // wait for the semaphore to be signaled\n            WaitForSingleObject (hSemaphore,INFINITE);\n\n            // signal that we are awake\n            ReleaseSemaphore(hCountSema,(LONG)1,NULL);\n\n            // relock the associated mutex \n            m.lock();\n        }\n\n        bool wait_or_timeout (\n            unsigned long milliseconds\n        ) const\n        { \n            // get a lock on the mutex for the waiters variable\n            waiters_mutex.lock();\n            // mark that one more thread will be waiting on this signaler\n            ++waiters;\n            // release the mutex for waiters\n            waiters_mutex.unlock();\n\n            // release the associated mutex\n            m.unlock();\n\n            bool value;\n\n            // wait for the semaphore to be signaled\n            if ( WaitForSingleObject (hSemaphore, milliseconds ) == WAIT_TIMEOUT )\n            {\n                // in this case we should decrement waiters because we are returning\n                // due to a timeout rather than because someone called signal() or \n                // broadcast().\n                value = false;\n\n                // signal that we are awake\n                ReleaseSemaphore(hCountSema,(LONG)1,NULL);\n\n                // get a lock on the mutex for the waiters variable\n                waiters_mutex.lock();\n                // mark that one less thread will be waiting on this signaler. \n                if (waiters != 0)\n                    --waiters;\n                // release the mutex for waiters\n                waiters_mutex.unlock();\n            }\n            else \n            {\n                value = true;\n\n                // signal that we are awake\n                ReleaseSemaphore(hCountSema,(LONG)1,NULL);\n            }\n\n\n            // relock the associated mutex \n            m.lock();\n\n            return value;\n        }\n\n        void signal (\n        ) const \n        { \n            // get a lock on the mutex for the waiters variable\n            waiters_mutex.lock();\n            \n            if (waiters > 0)\n            {\n                --waiters;\n                // make the semaphore release one waiting thread\n                ReleaseSemaphore(hSemaphore,1,NULL);\n\n                // wait for signaled thread to wake up\n                WaitForSingleObject(hCountSema,INFINITE);               \n            }\n\n            // release the mutex for waiters\n            waiters_mutex.unlock();\n        }\n\n        void broadcast (\n        ) const \n        { \n            // get a lock on the mutex for the waiters variable\n            waiters_mutex.lock();\n            \n            if (waiters > 0)\n            {   \n                // make the semaphore release all the waiting threads\n                ReleaseSemaphore(hSemaphore,(LONG)waiters,NULL);\n\n                // wait for count to be zero\n                for (unsigned long i = 0; i < waiters; ++i)\n                {\n                    WaitForSingleObject(hCountSema,INFINITE);\n                }\n\n                waiters = 0;\n            }\n\n            // release the mutex for waiters\n            waiters_mutex.unlock();\n        }\n\n        const mutex& get_mutex (\n        ) const { return m; }\n\n    private:\n\n        mutable HANDLE hSemaphore;\n\n        mutable unsigned long waiters;\n        mutex waiters_mutex;\n        \n\n        mutable HANDLE hCountSema;\n\n        const mutex& m;\n\n        // restricted functions\n        signaler(signaler&);        // copy constructor\n        signaler& operator=(signaler&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    namespace threads_kernel_shared_helpers\n    {\n        bool spawn_thread (\n            void (*funct)(void*),\n            void* param\n        );\n        /*!\n            is identical to create_new_thread() but just doesn't use any thread pooling.\n        !*/\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#include \"threads_kernel_shared.h\"\n\n#ifdef NO_MAKEFILE\n#include \"threads_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_THREADS_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threads_kernel_2.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADS_KERNEL_2_CPp_\n#define DLIB_THREADS_KERNEL_2_CPp_\n\n#include \"../platform.h\"\n\n#ifdef POSIX\n\n#include \"threads_kernel_2.h\"\n\n\nnamespace dlib\n{\n    namespace threads_kernel_shared_helpers\n    {\n\n    // -----------------------------------------------------------------------------------\n\n        struct info\n        {\n            void* param;\n            void (*funct)(void*);\n        };\n\n    // -----------------------------------------------------------------------------------\n\n        void* thread_starter (\n            void* param\n        )\n        {\n            info* alloc_p = static_cast<info*>(param);\n            info p = *alloc_p;\n            delete alloc_p;\n\n            // detach self\n            pthread_detach(pthread_self());\n\n            p.funct(p.param);\n            return 0;\n        }\n\n    // -----------------------------------------------------------------------------------\n\n        bool spawn_thread (\n            void (*funct)(void*),\n            void* param\n        )\n        {\n            info* p;\n            try { p = new info; }\n            catch (...) { return false; }\n\n            p->funct = funct;\n            p->param = param;\n\n            pthread_t thread_id;\n            if ( pthread_create (&thread_id, 0, thread_starter, p) )\n            {\n                delete p;\n                return false;\n            }\n            return true;\n        }\n\n    // -----------------------------------------------------------------------------------\n\n    }\n\n}\n\n#endif // POSIX\n\n#endif // DLIB_THREADS_KERNEL_2_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threads_kernel_2.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADS_KERNEl_2_\n#define DLIB_THREADS_KERNEl_2_\n\n#ifdef DLIB_ISO_CPP_ONLY\n#error \"DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code.  Turn DLIB_ISO_CPP_ONLY off if you want to use it.\"\n#endif\n\n#include \"threads_kernel_abstract.h\"\n#include <pthread.h>\n#include <errno.h>\n#include <sys/time.h>\n#include \"../algs.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n    \n    typedef pthread_t thread_id_type;\n\n    inline thread_id_type get_thread_id (\n    )\n    {\n        return pthread_self();\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // mutex object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    // forward declaration of signaler \n    class signaler;\n\n    class mutex\n    {\n        // give signaler access to hMutex\n        friend class signaler;\n    public:\n\n        mutex (\n        )\n        { \n            if (pthread_mutex_init(&myMutex,0)) \n            {\n                throw dlib::thread_error(ECREATE_MUTEX,\n        \"in function mutex::mutex() an error occurred making the mutex\"\n                );      \n            }\n        }\n\n        ~mutex (\n        ) { pthread_mutex_destroy(&myMutex); }\n\n        void lock (\n        ) const { pthread_mutex_lock(&myMutex); }\n\n        void unlock (\n        ) const { pthread_mutex_unlock(&myMutex); }\n\n    private:\n\n        mutable pthread_mutex_t myMutex;\n\n        // restricted functions\n        mutex(mutex&);        // copy constructor\n        mutex& operator=(mutex&);    // assignement opertor\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // signaler object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class signaler\n    {\n\n    public:\n\n\n        signaler (\n            const mutex& assoc_mutex\n        ) :\n            associated_mutex(&assoc_mutex.myMutex),\n            m(assoc_mutex)\n        { \n            if (pthread_cond_init(&cond,0))\n            {\n                throw dlib::thread_error(ECREATE_SIGNALER,\n        \"in function signaler::signaler() an error occurred making the signaler\"\n                );      \n            }\n        }\n\n        ~signaler (\n        ) { pthread_cond_destroy(&cond); }\n\n        void wait (\n        ) const\n        { \n            pthread_cond_wait(&cond,associated_mutex);\n        }\n\n        bool wait_or_timeout (\n            unsigned long milliseconds\n        ) const\n        { \n            timespec time_to_wait;\n\n            timeval curtime;\n            gettimeofday(&curtime,0);\n\n            // get the time and adjust the timespec object by the appropriate amount\n            time_to_wait.tv_sec = milliseconds/1000 + curtime.tv_sec;\n            time_to_wait.tv_nsec = curtime.tv_usec;\n            time_to_wait.tv_nsec *= 1000; \n            time_to_wait.tv_nsec += (milliseconds%1000)*1000000;\n\n            time_to_wait.tv_sec += time_to_wait.tv_nsec/1000000000;\n            time_to_wait.tv_nsec = time_to_wait.tv_nsec%1000000000;\n\n            if ( pthread_cond_timedwait(&cond,associated_mutex,&time_to_wait) == ETIMEDOUT)\n            {\n                return false;\n            }\n            else \n            {\n                return true;\n            }\n        }\n\n        void signal (\n        ) const { pthread_cond_signal(&cond); }\n\n        void broadcast (\n        ) const { pthread_cond_broadcast(&cond); }\n\n        const mutex& get_mutex (\n        ) const { return m; }\n\n    private:\n\n        pthread_mutex_t* const associated_mutex;\n        mutable pthread_cond_t  cond;\n        const mutex& m;\n\n        // restricted functions\n        signaler(signaler&);        // copy constructor\n        signaler& operator=(signaler&);    // assignement opertor\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    namespace threads_kernel_shared_helpers\n    {\n        bool spawn_thread (\n            void (*funct)(void*),\n            void* param\n        );\n        /*!\n            is identical to create_new_thread() but just doesn't use any thread pooling.\n        !*/\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#include \"threads_kernel_shared.h\"\n\n#ifdef NO_MAKEFILE\n#include \"threads_kernel_2.cpp\"\n#endif\n\n#endif // DLIB_THREADS_KERNEl_2_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threads_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_THREADS_KERNEl_ABSTRACT_\n#ifdef DLIB_THREADS_KERNEl_ABSTRACT_\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    /*!\n        THREAD POOLING\n            When threads end they go into a global thread pool and each waits there \n            for 30 seconds before timing out and having its resources returned to the \n            operating system.  When create_new_thread() is called it first looks in the\n            thread pool to see if there are any threads it can snatch from the pool, if \n            not then it makes a new one.  \n\n            Note that whenever I say something happens when a thread \"terminates\" or \"ends\"\n            I mean \"when it returns to the thread pool.\"  From the client programmer point\n            of view a thread terminates/ends when it returns to the dlib thread pool and you \n            shouldn't and indeed don't need to know when it actually gets its resources\n            reclaimed by the operating system.\n\n            If you want to change the timeout to a different value you can #define \n            DLIB_THREAD_POOL_TIMEOUT to whatever value (in milliseconds) that you like.\n\n        EXCEPTIONS\n            Unless specified otherwise, nothing in this file throws exceptions.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    thread_id_type get_thread_id (\n    );\n    /*!\n        ensures\n            - returns a unique id for the calling thread.  Note that while the id is unique \n              among all currently existing threads it may have been used by a previous\n              thread that has terminated.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    bool is_dlib_thread (\n        thread_id_type id = get_thread_id()\n    );\n    /*!\n        ensures\n            - if (the thread with the given id was spawned by a call to\n                  dlib::create_new_thread) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void register_thread_end_handler (\n        T& obj,\n        void (T::*handler)()\n    );\n    /*!\n        requires\n            - handler == a valid member function pointer for class T\n            - handler does not throw\n            - handler does not call register_thread_end_handler()\n            - handler does not block\n            - is_dlib_thread() == true (i.e. the calling thread was spawned by dlib::create_new_thread())\n        ensures\n            - let ID == the thread id for the thread calling register_thread_end_handler()\n            - (obj.*handler)() will be called when the thread with thread id ID is \n              terminating and it will be called from within that terminating thread.  \n              (i.e. inside the handler function get_thread_id() == ID == the id of the \n              thread that is terminating. )\n            - each call to this function adds another handler that will be called when\n              the given thread terminates.  This means that if you call it a bunch of \n              times then you will end up registering multiple handlers (or single \n              handlers multiple times) that will be called when the thread ends. \n        throws\n            - std::bad_alloc\n              If this exception is thrown then the call to this function had no effect.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void unregister_thread_end_handler (\n        T& obj,\n        void (T::*handler)()\n    );\n    /*!\n        requires\n            - handler == a valid member function pointer for class T\n        ensures\n            - Undoes all previous calls to register_thread_end_handler(obj,handler).  \n              So the given handler won't be called when any threads end.\n        throws\n            - std::bad_alloc\n              If this exception is thrown then the call to this function had no effect.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    bool create_new_thread (\n        void (*funct)(void*),\n        void* param\n    );\n    /*!\n        ensures\n            - creates a new thread for the function pointed to by funct \n            - passes it param as its parameter. (i.e. calls funct(param) from the new thread)\n            - returns true upon success and false upon failure to create the new thread\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // mutex object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class mutex\n    {\n        /*!\n            INITIAL VALUE\n                mutex is in the unlocked state\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a mutex intended to be used for synchronous \n                thread control of shared data. When a thread wants to access some \n                shared data it locks out other threads by calling lock() and calls \n                unlock() when it is finished.  \n        !*/\n    public:\n\n        mutex (\n        );\n        /*!\n            ensures\n                - #*this is properly initialized\n            throws\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create the mutex.\n        !*/\n\n        ~mutex (\n        );\n        /*!\n            requires\n                - *this is not locked\n            ensures\n                - all resources allocated by *this have been freed\n        !*/\n\n        void lock (\n        ) const;\n        /*!\n            requires\n                - the thread calling lock() does not already have a lock on *this\n            ensures\n                - if (*this is currently locked by another thread) then \n                    - the thread that called lock() on *this is put to sleep until \n                      it becomes available                  \n                - if (*this is currently unlocked) then \n                    - #*this becomes locked and the current thread is NOT put to sleep \n                      but now \"owns\" #*this\n        !*/\n\n        void unlock (\n        ) const;\n        /*!\n            requires\n                - the thread calling unlock() already has a lock on *this\n            ensures\n                - #*this is unlocked (i.e. other threads may now lock this object)\n        !*/\n\n\n    private:\n        // restricted functions\n        mutex(mutex&);        // copy constructor\n        mutex& operator=(mutex&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // signaler object\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class signaler\n    {\n        /*!\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an event signaling system for threads.  It gives \n                a thread the ability to wake up other threads that are waiting for a \n                particular signal. \n\n                Each signaler object is associated with one and only one mutex object.  \n                More than one signaler object may be associated with a single mutex\n                but a signaler object may only be associated with a single mutex.\n\n                NOTE:\n                You must guard against spurious wakeups.  This means that a thread\n                might return from a call to wait even if no other thread called\n                signal.  This is rare but must be guarded against. \n        !*/\n    public:\n\n        signaler (\n            const mutex& associated_mutex\n        );\n        /*!\n            ensures\n                - #*this is properly initialized \n                - #get_mutex() == associated_mutex\n            throws\n                - dlib::thread_error\n                    the constructor may throw this exception if there is a problem \n                    gathering resources to create the signaler.    \n        !*/\n\n\n        ~signaler (\n        );\n        /*!\n            ensures\n                - all resources allocated by *this have been freed\n        !*/\n\n        void wait (\n        ) const;\n        /*!\n            requires\n                - get_mutex() is locked and owned by the calling thread\n            ensures\n                - atomically unlocks get_mutex() and blocks the calling thread                      \n                - calling thread may wake if another thread calls signal() or broadcast()\n                  on *this\n                - when wait() returns the calling thread again has a lock on get_mutex()\n        !*/\n\n        bool wait_or_timeout (\n            unsigned long milliseconds\n        ) const;\n        /*!\n            requires\n                - get_mutex() is locked and owned by the calling thread\n            ensures\n                - atomically unlocks get_mutex() and blocks the calling thread\n                - calling thread may wake if another thread calls signal() or broadcast()\n                  on *this\n                - after the specified number of milliseconds has elapsed the calling thread\n                  will wake once get_mutex() is free\n                - when wait returns the calling thread again has a lock on get_mutex()\n\n                - returns false if the call to wait_or_timeout timed out \n                - returns true if the call did not time out\n        !*/\n\n\n        void signal (\n        ) const;\n        /*!\n            ensures\n                - if (at least one thread is waiting on *this) then\n                    - at least one of the waiting threads will wake \n        !*/\n\n        void broadcast (\n        ) const;\n        /*!\n            ensures\n                - any and all threads waiting on *this will wake \n        !*/\n\n        const mutex& get_mutex (\n        ) const;\n        /*!\n            ensures\n                - returns a const reference to the mutex associated with *this\n        !*/\n\n    private:\n        // restricted functions\n        signaler(signaler&);        // copy constructor\n        signaler& operator=(signaler&);    // assignment operator\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THREADS_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threads_kernel_shared.cpp",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADS_KERNEL_SHARED_CPp_\n#define DLIB_THREADS_KERNEL_SHARED_CPp_\n\n#include \"threads_kernel_shared.h\"\n#include \"../assert.h\"\n#include \"../platform.h\"\n#include <iostream>\n\n// The point of this block of code is to cause a link time error that will prevent a user\n// from compiling part of their application with DLIB_ASSERT enabled and part with them\n// disabled since doing that would be a violation of C++'s one definition rule. \nextern \"C\"\n{\n#ifdef ENABLE_ASSERTS\n    int USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives;\n#else\n    int USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives_;\n#endif\n}\n\n#ifndef DLIB_THREAD_POOL_TIMEOUT\n// default to 30000 milliseconds\n#define DLIB_THREAD_POOL_TIMEOUT 30000\n#endif\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// threader functions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    namespace threads_kernel_shared \n    {\n\n        bool thread_pool_has_been_destroyed = false;\n\n// ----------------------------------------------------------------------------------------\n\n        threader& thread_pool (\n        ) \n        {\n            static threader* thread_pool = new threader;\n            return *thread_pool;\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        struct threader_destruct_helper\n        {\n            // cause the thread pool to begin its destruction process when \n            // global objects start to be destroyed\n            ~threader_destruct_helper()\n            {\n                thread_pool().destruct_if_ready();\n            }\n        };\n        static threader_destruct_helper a;\n\n// ----------------------------------------------------------------------------------------\n\n        bool threader::\n        is_dlib_thread (\n            thread_id_type id\n        )\n        {\n            auto_mutex M(data_mutex);\n            return thread_ids.is_member(id);\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        threader::\n        threader (\n        ) :\n            total_count(0),\n            function_pointer(0),\n            pool_count(0),\n            data_ready(data_mutex),\n            data_empty(data_mutex),\n            destruct(false),\n            destructed(data_mutex),\n            do_not_ever_destruct(false)\n        {\n#ifdef WIN32\n            // Trying to destroy the global thread pool when we are part of a DLL and the\n            // DLL is being unloaded can sometimes lead to weird behavior.  For example, in\n            // the python interpreter you will get the interpreter to hang.  Or if we are\n            // part of a MATLAB mex file and the file is being unloaded there can also be\n            // similar weird issues.  So when we are using dlib on windows we just disable\n            // the destruction of the global thread pool since it doesn't matter anyway.\n            // It's resources will just get freed by the OS.  This is even the recommended\n            // thing to do by Microsoft (http://blogs.msdn.com/b/oldnewthing/archive/2012/01/05/10253268.aspx).\n            // \n            // As an aside, it's worth pointing out that the reason we try and free\n            // resources on program shutdown on other operating systems is so we can have\n            // clean reports from tools like valgrind which check for memory leaks.  But\n            // trying to do this on windows is a lost cause so we give up in this case and\n            // follow the Microsoft recommendation.\n            do_not_ever_destruct = true;\n#endif // WIN32\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        threader::\n        ~threader (\n        )\n        { \n            data_mutex.lock();\n            destruct = true;\n            data_ready.broadcast();\n\n            // wait for all the threads to end\n            while (total_count > 0)\n                destructed.wait();\n\n            thread_pool_has_been_destroyed = true;\n            data_mutex.unlock();\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        void threader::\n        destruct_if_ready (\n        )\n        {\n            if (do_not_ever_destruct)\n                return;\n\n            data_mutex.lock();\n\n            // if there aren't any active threads, just maybe some sitting around\n            // in the pool then just destroy the threader\n            if (total_count == pool_count)\n            {\n                destruct = true;\n                data_ready.broadcast();\n                data_mutex.unlock();\n                delete this;\n            }\n            else\n            {\n                // There are still some user threads running so there isn't\n                // much we can really do.  Just let the program end without\n                // cleaning up threading resources.  \n                data_mutex.unlock();\n            }\n        }\n\n// ----------------------------------------------------------------------------------------\n\n        void threader::\n        call_end_handlers (\n        )\n        {\n            reg.m.lock();\n            const thread_id_type id = get_thread_id();\n            thread_id_type id_copy;\n            member_function_pointer<> mfp;\n\n            // Remove all the member function pointers for this thread from the tree \n            // and call them.\n            while (reg.reg[id] != 0)\n            {\n                reg.reg.remove(id,id_copy,mfp);\n                reg.m.unlock();\n                mfp();\n                reg.m.lock();\n            }\n            reg.m.unlock();\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        bool threader::\n        create_new_thread (\n            void (*funct)(void*),\n            void* param\n        )\n        {\n\n            // get a lock on the data mutex\n            auto_mutex M(data_mutex);\n\n            // loop to ensure that the new function pointer is in the data\n            while (true)\n            {\n                // if the data is empty then add new data and quit loop\n                if (function_pointer == 0)\n                {\n                    parameter = param;\n                    function_pointer = funct;\n                    break;\n                }\n                else\n                {\n                    // wait for data to become empty\n                    data_empty.wait();\n                }\n            }\n\n\n            // get a thread for this new data\n            // if a new thread must be created\n            if (pool_count == 0)\n            {\n                // make thread and add it to the pool\n                if ( threads_kernel_shared_helpers::spawn_thread(thread_starter, this) == false )\n                {\n                    function_pointer = 0;\n                    parameter = 0;\n                    data_empty.signal();\n                    return false;\n                }\n                ++total_count;\n            }\n            // wake up a thread from the pool\n            else\n            {\n                data_ready.signal();\n            }\n\n            return true;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        void thread_starter (\n            void* object\n        )\n        {\n            // get a reference to the calling threader object\n            threader& self = *static_cast<threader*>(object);\n\n\n            {\n            auto_mutex M(self.data_mutex);\n\n            // add this thread id\n            thread_id_type thread_id = get_thread_id();\n            self.thread_ids.add(thread_id);\n\n            // indicate that this thread is now in the thread pool\n            ++self.pool_count;\n\n            while (self.destruct == false)\n            {\n                // if data is ready then process it and launch the thread\n                // if its not ready then go back into the pool\n                while (self.function_pointer != 0)\n                {                \n                    // indicate that this thread is now out of the thread pool\n                    --self.pool_count;\n\n                    // get the data for the function call\n                    void (*funct)(void*) = self.function_pointer;\n                    void* param = self.parameter;\n                    self.function_pointer = 0;\n\n                    // signal that the data is now empty\n                    self.data_empty.signal();\n\n                    self.data_mutex.unlock();\n                    // Call funct with its intended parameter.  If this function throws then\n                    // we intentionally let the exception escape the thread and result in whatever\n                    // happens when it gets caught by the OS (generally the program is terminated).\n                    funct(param);\n                    self.call_end_handlers();\n\n                    self.data_mutex.lock();\n\n                    // indicate that this thread is now back in the thread pool\n                    ++self.pool_count;\n                }\n\n                if (self.destruct == true)\n                    break;\n\n                // if we timed out and there isn't any work to do then\n                // this thread will quit this loop and end.\n                if (self.data_ready.wait_or_timeout(DLIB_THREAD_POOL_TIMEOUT) == false && \n                    self.function_pointer == 0)\n                    break;\n\n            }\n\n            // remove this thread id from thread_ids\n            thread_id = get_thread_id();\n            self.thread_ids.destroy(thread_id);\n\n            // indicate that this thread is now out of the thread pool\n            --self.pool_count;\n            --self.total_count;\n\n            self.destructed.signal();\n\n            } // end of auto_mutex M(self.data_mutex) block\n        }\n\n    // ------------------------------------------------------------------------------------\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool is_dlib_thread (\n        thread_id_type id\n    )\n    {\n        return threads_kernel_shared::thread_pool().is_dlib_thread(id);\n    }\n\n    bool is_dlib_thread (\n    )\n    {\n        return is_dlib_thread(get_thread_id());\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_THREADS_KERNEL_SHARED_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/threads_kernel_shared.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADS_KERNEl_SHARED_\n#define DLIB_THREADS_KERNEl_SHARED_\n\n// this file should be included at the bottom of one of the thread kernel headers for a \n// specific platform.\n//#include \"../threads.h\"\n#include \"auto_mutex_extension.h\"\n#include \"../binary_search_tree.h\"\n#include \"../member_function_pointer.h\"\n#include \"../memory_manager.h\"\n#include \"../queue.h\"\n#include \"../set.h\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nextern \"C\"\n{\n// =========================>>> WHY YOU ARE GETTING AN ERROR HERE <<<=========================\n// The point of this block of code is to cause a link time error that will prevent a user\n// from compiling part of their application with DLIB_ASSERT enabled and part with it\n// disabled since doing that would be a violation of C++'s one definition rule.  So if you\n// are getting an error here then you are either not enabling DLIB_ASSERT consistently\n// (e.g. by compiling part of your program in a debug mode and part in a release mode) or\n// you have simply forgotten to compile dlib/all/source.cpp into your application.\n// =========================>>> WHY YOU ARE GETTING AN ERROR HERE <<<=========================\n#ifdef ENABLE_ASSERTS\n    extern int USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives;\n    inline int dlib_check_consistent_assert_usage() { USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives = 0; return 0; }\n#else\n    extern int USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives_;\n    inline int dlib_check_consistent_assert_usage() { USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives_ = 0; return 0; }\n#endif\n    const int dlib_check_assert_helper_variable = dlib_check_consistent_assert_usage();\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nnamespace dlib\n{\n\n\n// ----------------------------------------------------------------------------------------\n\n    namespace threads_kernel_shared\n    {\n        void thread_starter (\n            void*\n        );\n\n        class threader\n        {\n            /*!\n                INITIAL VALUE\n                    - pool_count == 0 and\n                    - data_ready is associated with the mutex data_mutex \n                    - data_empty is associated with the mutex data_mutex\n                    - destructed is associated with the mutex data_mutex\n                    - destruct == false\n                    - total_count == 0\n                    - function_pointer == 0\n                    - do_not_ever_destruct == false\n\n                CONVENTION\n                    - data_ready is associated with the mutex data_mutex \n                    - data_empty is associated with the mutex data_mutex \n                    - data_ready == a signaler used signal when there is new data waiting \n                      to start a thread with.\n                    - data_empty == a signaler used to signal when the data is now empty \n                    - pool_count == the number of suspended threads in the thread pool \n                    - total_count == the number of threads that are executing anywhere.  i.e.\n                      pool_count + the ones that are currently running some user function.\n                    - if (function_pointer != 0) then\n                        - parameter == a void pointer pointing to the parameter which \n                          should be used to start the next thread \n                        - function_pointer == a pointer to the next function to make a \n                          new thread with\n\n                    - if (the destructor is running) then\n                        - destruct == true\n                    - else\n                        - destruct == false\n\n                    - thread_ids is locked by the data_mutex\n                    - thread_ids == a set that contains the thread id for each thread spawned by this\n                      object.\n            !*/\n\n\n        public:\n            threader (\n            );\n           \n            ~threader (\n            );\n\n            void destruct_if_ready (\n            );\n            /*!\n                ensures\n                    - if (there are no threads currently running and we haven't set do_not_ever_destruct) then\n                        - calls delete this\n                    - else\n                        - does nothing\n            !*/\n\n            bool create_new_thread (\n                void (*funct)(void*),\n                void* param\n            );\n\n            template <\n                typename T\n                >\n            void unregister_thread_end_handler (\n                T& obj,\n                void (T::*handler)()\n            )\n            {\n                member_function_pointer<> mfp, junk_mfp;\n                mfp.set(obj,handler);\n\n                thread_id_type junk_id;\n\n                // find any member function pointers in the registry that point to the same\n                // thing as mfp and remove them\n                auto_mutex M(reg.m);\n                reg.reg.reset();\n                while (reg.reg.move_next())\n                {\n                    while (reg.reg.current_element_valid() && reg.reg.element().value() == mfp)\n                    {\n                        reg.reg.remove_current_element(junk_id, junk_mfp);\n                    }\n                }\n            }\n\n            template <\n                typename T\n                >\n            void register_thread_end_handler (\n                T& obj,\n                void (T::*handler)()\n            )\n            {\n                thread_id_type id = get_thread_id();\n                member_function_pointer<> mfp;\n                mfp.set(obj,handler);\n\n                auto_mutex M(reg.m);\n                reg.reg.add(id,mfp);\n            }\n\n            bool is_dlib_thread (\n                thread_id_type id\n            );\n\n        private:\n\n            friend void thread_starter (\n                void*\n            );\n\n            void call_end_handlers (\n            );\n            /*!\n                ensures\n                    - calls the registered end handlers for the calling thread and\n                      then removes them from reg.reg\n            !*/\n\n\n            // private data\n            set<thread_id_type,memory_manager<char>::kernel_2b>::kernel_1b_c thread_ids;\n            unsigned long total_count;\n            void* parameter;\n            void (*function_pointer)(void*);\n            unsigned long pool_count;\n            mutex data_mutex;           // mutex to protect the above data\n            signaler data_ready;        // signaler to signal when there is new data\n            signaler data_empty;        // signaler to signal when the data is empty\n            bool destruct;\n            signaler destructed;        // signaler to signal when a thread has ended \n            bool do_not_ever_destruct;\n\n            struct registry_type\n            {\n                mutex m;\n                binary_search_tree<\n                    thread_id_type,\n                    member_function_pointer<>,\n                    memory_manager<char>::kernel_2a\n                    >::kernel_2a_c reg;\n            };\n\n            // stuff for the register_thread_end_handler \n            registry_type reg;\n\n\n            // restricted functions\n            threader(threader&);        // copy constructor\n            threader& operator=(threader&);    // assignement opertor\n\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        threader& thread_pool (\n        ); \n        /*!\n            ensures\n                - returns a reference to the global threader object\n        !*/\n\n    // ------------------------------------------------------------------------------------\n\n        extern bool thread_pool_has_been_destroyed;\n    }\n\n    bool is_dlib_thread (\n        thread_id_type id \n    );\n\n    bool is_dlib_thread (\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    inline bool create_new_thread (\n        void (*funct)(void*),\n        void* param\n    )\n    {\n        try\n        {\n            // now make this thread\n            return threads_kernel_shared::thread_pool().create_new_thread(funct,param);\n        }\n        catch (std::bad_alloc&)\n        {\n            return false;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    inline void register_thread_end_handler (\n        T& obj,\n        void (T::*handler)()\n    )\n    {\n        DLIB_ASSERT(is_dlib_thread(),            \n               \"\\tvoid register_thread_end_handler\"\n            << \"\\n\\tYou can't register a thread end handler for a thread dlib didn't spawn.\"\n            );\n\n        threads_kernel_shared::thread_pool().register_thread_end_handler(obj,handler);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    inline void unregister_thread_end_handler (\n        T& obj,\n        void (T::*handler)()\n    )\n    {\n        // Check if the thread pool has been destroyed and if it has then don't do anything.\n        // This bool here is always true except when the program has started to terminate and\n        // the thread pool object has been destroyed.  This if is here to catch other global\n        // objects that have destructors that try to call unregister_thread_end_handler().  \n        // Without this check we get into trouble if the thread pool is destroyed before these\n        // objects.\n        if (threads_kernel_shared::thread_pool_has_been_destroyed == false)\n            threads_kernel_shared::thread_pool().unregister_thread_end_handler(obj,handler);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"threads_kernel_shared.cpp\"\n#endif\n\n#endif // DLIB_THREADS_KERNEl_SHARED_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads/windows.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADS_KERNEl_2_\n#include \"threads_kernel_1.h\"\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/threads.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_THREADs_\n#define DLIB_THREADs_\n\n#include \"threads/threads_kernel.h\"\n\n#include \"threads/auto_mutex_extension.h\"\n#include \"threads/auto_unlock_extension.h\"\n#include \"threads/create_new_thread_extension.h\"\n#include \"threads/multithreaded_object_extension.h\"\n#include \"threads/rmutex_extension.h\"\n#include \"threads/rsignaler_extension.h\"\n#include \"threads/threaded_object_extension.h\"\n#include \"threads/thread_specific_data_extension.h\"\n#include \"threads/thread_function_extension.h\"\n#include \"threads/thread_pool_extension.h\"\n#include \"threads/read_write_mutex_extension.h\"\n#include \"threads/parallel_for_extension.h\"\n\n#endif // DLIB_THREADs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/time_this.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TIME_THIs_\n#define DLIB_TIME_THIs_\n\n\n#include \"platform.h\"\n\n\n\n#ifndef WIN32\n\n#include <sys/times.h>\n#include <limits.h>\n#include <unistd.h>\n#include <iostream>\n// ----------------------------------------------------------------------------------------\n\n#define TIME_THIS_TO(_tt_op,_tt_out)                                                        \\\n    {                                                                                       \\\n        clock_t _tt_start, _tt_end;                                                         \\\n        tms _tt_timesbuf;                                                                   \\\n        _tt_start = times(&_tt_timesbuf);                                                   \\\n        _tt_op;                                                                             \\\n        _tt_end = times(&_tt_timesbuf);                                                     \\\n        long _tt_ticks = sysconf(_SC_CLK_TCK);                                              \\\n        if ((double)(_tt_end-_tt_start)/(double)_tt_ticks < 1)                              \\\n        {                                                                                   \\\n            _tt_out << \"\\ntime: \"                                                           \\\n            << (int)(1000*((double)(_tt_end-_tt_start)/(double)_tt_ticks)) << \"ms\\n\";       \\\n        }                                                                                   \\\n        else                                                                                \\\n        {                                                                                   \\\n            _tt_out << \"\\ntime: \"                                                           \\\n                      << (double)(_tt_end-_tt_start)/(double)_tt_ticks << \"sec\\n\";          \\\n        }                                                                                   \\\n    }                                                                                       \\\n\n\n#define TIME_THIS(_tt_op)  TIME_THIS_TO(_tt_op,std::cout)\n\n// ----------------------------------------------------------------------------------------\n\n\n#endif\n\n#ifdef WIN32\n\n#include \"windows_magic.h\"\n#include <windows.h>    // for GetTickCount()\n#include <iostream>\n\n// ----------------------------------------------------------------------------------------\n\n#define TIME_THIS_TO(_tt_op,_tt_out)                                                        \\\n    {                                                                                       \\\n        unsigned long _tt_count = GetTickCount();                                           \\\n        _tt_op;                                                                             \\\n        _tt_count = GetTickCount() - _tt_count;                                             \\\n        if (_tt_count < 1000)                                                               \\\n        {                                                                                   \\\n            _tt_out << \"\\ntime: \" << _tt_count << \"ms\\n\";                                   \\\n        }                                                                                   \\\n        else                                                                                \\\n        {                                                                                   \\\n            _tt_out << \"\\ntime: \" << static_cast<double>(_tt_count)/1000 << \"sec\\n\";        \\\n        }                                                                                   \\\n    }                                                                                       \\\n\n#define TIME_THIS(_tt_op) TIME_THIS_TO(_tt_op,std::cout)\n\n// ----------------------------------------------------------------------------------------\n\n#endif\n\n#endif // DLIB_TIME_THIs_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/timeout/timeout.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TIMEOUT_KERNEl_1_\n#define DLIB_TIMEOUT_KERNEl_1_\n\n#include \"../threads.h\"\n#include \"../algs.h\"\n#include \"../misc_api.h\"\n#include \"timeout_abstract.h\"\n#include \"../uintn.h\"\n#include \"../timer.h\"\n\n#ifdef _MSC_VER\n// this is to disable the \"'this' : used in base member initializer list\"\n// warning you get from some of the GUI objects since all the objects\n// require that their parent class be passed into their constructor. \n// In this case though it is totally safe so it is ok to disable this warning.\n#pragma warning(disable : 4355)\n#endif // _MSC_VER\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    class timeout \n    {\n        /*!\n            INITIAL VALUE\n                - b == a pointer to some kind of bind object\n\n            CONVENTION\n                - b == a pointer to some kind of bind object\n        !*/\n\n        class bind\n        {\n        public:\n            virtual void go() = 0;\n            virtual ~bind() {}\n        };\n\n        template <typename T>\n        class functor : public bind\n        {\n        public:\n            functor(const T& f) : function(f) {}\n            T function;\n            void go() { function(); }\n        };\n\n        template <typename T, typename R>\n        class zero : public bind\n        {\n        public:\n            T* object;\n            R (T::*callback_function)();\n            void go() { (object->*callback_function)(); }\n\n        };\n\n        template <typename T, typename R, typename U>\n        class one : public bind\n        {\n        public:\n            T* object;\n            R (T::*callback_function)(U);\n            U val;\n            void go() { (object->*callback_function)(val); }\n        };\n\n    public:\n\n        // This typedef is here for backwards compatibility with previous versions of dlib.\n        typedef timeout kernel_1a;\n\n        template <\n            typename T\n            >\n        timeout (\n            T callback_function,\n            unsigned long ms_to_timeout\n        ) :\n            t(*this,&timeout::trigger_timeout)\n        {\n            b = new functor<T>(callback_function);\n            t.set_delay_time(ms_to_timeout);\n            t.start();\n        }\n\n        template <\n            typename T\n            >\n        timeout (  \n            T& object,\n            void (T::*callback_function)(),\n            unsigned long ms_to_timeout\n        ): \n            t(*this,&timeout::trigger_timeout)\n        {\n            zero<T,void>* B = new zero<T,void>;\n            b = B;\n            B->object = &object;\n            B->callback_function = callback_function;\n            t.set_delay_time(ms_to_timeout);\n            t.start();\n        }\n\n        template <\n            typename T,\n            typename U\n            >\n        timeout (  \n            T& object,\n            void (T::*callback_function)(U callback_function_argument),\n            unsigned long ms_to_timeout,\n            U callback_function_argument\n        ): \n            t(*this,&timeout::trigger_timeout)\n        {\n            one<T,void,U>* B = new one<T,void,U>;\n            b = B;\n            B->object = &object; \n            B->callback_function = callback_function;\n            B->val = callback_function_argument;\n            t.set_delay_time(ms_to_timeout);\n            t.start();\n        }\n\n        template <\n            typename T\n            >\n        timeout (  \n            T& object,\n            int (T::*callback_function)(),\n            unsigned long ms_to_timeout\n        ): \n            t(*this,&timeout::trigger_timeout)\n        {\n            zero<T,int>* B = new zero<T,int>;\n            b = B;\n            B->object = &object;\n            B->callback_function = callback_function;\n            t.set_delay_time(ms_to_timeout);\n            t.start();\n        }\n\n        template <\n            typename T,\n            typename U\n            >\n        timeout (  \n            T& object,\n            int (T::*callback_function)(U callback_function_argument),\n            unsigned long ms_to_timeout,\n            U callback_function_argument\n        ): \n            t(*this,&timeout::trigger_timeout)\n        {\n            one<T,int,U>* B = new one<T,int,U>;\n            b = B;\n            B->object = &object; \n            B->callback_function = callback_function;\n            B->val = callback_function_argument;\n            t.set_delay_time(ms_to_timeout);\n            t.start();\n        }\n\n        virtual ~timeout (\n        )\n        {\n            t.stop_and_wait();\n            delete b;\n        }\n\n    private:\n\n        void trigger_timeout ()\n        {\n            b->go();\n            t.stop();\n        }\n\n        dlib::timer<timeout> t;\n        bind* b;\n\n        // restricted functions\n        timeout(const timeout&);        // copy constructor\n        timeout& operator=(const timeout&);    // assignment operator\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TIMEOUT_KERNEl_1_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/timeout/timeout_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_TIMEOUT_KERNEl_ABSTRACT_\n#ifdef DLIB_TIMEOUT_KERNEl_ABSTRACT_\n\n#include \"../threads.h\"\n\nnamespace dlib\n{\n\n    class timeout \n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object provides a simple way to implement a timeout.  An example will\n                make its use clear.  Suppose we want to read from a socket but we want to\n                terminate the connection if the read takes longer than 10 seconds.  This\n                could be accomplished as follows:\n\n                connection* con = a connection from somewhere;\n                {\n                    // setup a timer that will call con->shutdown() in 10 seconds\n                    timeout t(*con,&connection::shutdown,10000); \n                    // Now call read on the connection.  If this call to read() takes more\n                    // than 10 seconds then the t timeout will trigger and shutdown the\n                    // connection.  If read completes in less than 10 seconds then the t\n                    // object will be destructed on the next line due to the } and then the\n                    // timeout won't trigger.\n                    con->read(buf,100);\n                }\n\n                \n                Alternatively, if you have a compiler capable of using C++11 lambda\n                functions, you can use a syntax like this:\n                {\n                    timeout t([con](){ con->shutdown(); }, 10000);\n                    con->read(buf,100);\n                }\n\n                More generally, you can use this with things other than sockets.  For\n                example, the following statement will print \"Hello world!\" after 1000ms:\n                    timeout t([](){ cout << \"Hello world!\" << endl; },  1000);\n\n\n\n            THREAD SAFETY\n                All methods of this class are thread safe. \n        !*/\n\n    public:\n\n        template <\n            typename T\n            >\n        timeout (\n            T callback_function,\n            unsigned long ms_to_timeout\n        );\n        /*!\n            requires\n                - callback_function does not throw\n            ensures                \n                - does not block.\n                - #*this is properly initialized\n                - if (this object isn't destructed in ms_to_timeout milliseconds) then\n                    - callback_function() will be called in ms_to_timeout milliseconds.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        template <\n            typename T\n            >\n        timeout (  \n            T& object,\n            void (T::*callback_function)(),\n            unsigned long ms_to_timeout\n        );\n        /*!\n            requires\n                - callback_function does not throw\n            ensures                \n                - does not block.\n                - #*this is properly initialized\n                - if (this object isn't destructed in ms_to_timeout milliseconds) then\n                    - (object.*callback_function)() will be called in ms_to_timeout \n                      milliseconds.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        template <\n            typename T,\n            typename U\n            >\n        timeout (  \n            T& object,\n            void (T::*callback_function)(U callback_function_argument),\n            unsigned long ms_to_timeout,\n            U callback_function_argument\n        );\n        /*!\n            requires\n                - callback_function does not throw\n            ensures                \n                - does not block.\n                - #*this is properly initialized\n                - if (this object isn't destructed in ms_to_timeout milliseconds) then\n                    - (object.*callback_function)(callback_function_argument) will be \n                      called in ms_to_timeout milliseconds.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        template <\n            typename T\n            >\n        timeout (  \n            T& object,\n            int (T::*callback_function)(),\n            unsigned long ms_to_timeout\n        );\n        /*!\n            requires\n                - callback_function does not throw\n            ensures                \n                - does not block.\n                - #*this is properly initialized\n                - if (this object isn't destructed in ms_to_timeout milliseconds) then\n                    - (object.*callback_function)() will be called in ms_to_timeout \n                      milliseconds.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        template <\n            typename T,\n            typename U\n            >\n        timeout (  \n            T& object,\n            int (T::*callback_function)(U callback_function_argument),\n            unsigned long ms_to_timeout,\n            U callback_function_argument\n        );\n        /*!\n            requires\n                - callback_function does not throw\n            ensures                \n                - does not block.\n                - #*this is properly initialized\n                - if (this object isn't destructed in ms_to_timeout milliseconds) then\n                    - (object.*callback_function)(callback_function_argument) will be \n                      called in ms_to_timeout milliseconds.\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~timeout (\n        );\n        /*!\n            requires\n                - is not called from inside the callback_function given to the\n                  constructor.\n            ensures\n                - any resources associated with *this have been released\n                - if (the callback_function hasn't been called yet) then\n                    - the callback_function specified in the constructor will not be called\n        !*/\n\n    private:\n\n        // restricted functions\n        timeout(const timeout&);        // copy constructor\n        timeout& operator=(const timeout&);    // assignment operator\n\n    };    \n\n}\n\n#endif // DLIB_TIMEOUT_KERNEl_ABSTRACT_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/timeout.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TIMEOUt_\n#define DLIB_TIMEOUt_\n\n#include \"timeout/timeout.h\"\n\n#endif // DLIB_TIMEOUt_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/timer/timer.cpp",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TIMER_cPPh_\n#define DLIB_TIMER_cPPh_\n\n#include \"timer.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    timer_global_clock::\n    timer_global_clock(\n    ): \n        s(m),\n        shutdown(false),\n        running(false)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    timer_global_clock::\n    ~timer_global_clock()\n    {\n        m.lock();\n        shutdown = true;\n        s.signal();\n        m.unlock();\n        wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void timer_global_clock::\n    add (\n        timer_base* r\n    )\n    {\n        if (r->in_global_clock == false)\n        {\n            // if the thread isn't running then start it up\n            if (!running)\n            {\n                start();\n                running = true;\n            }\n\n            uint64 t = ts.get_timestamp() + r->delay*1000;\n            tm.reset();\n            if (!tm.move_next() || t < tm.element().key())\n            {\n                // we need to make the thread adjust its next time to\n                // trigger if this new event occurrs sooner than the\n                // next event in tm\n                s.signal();\n            }\n            timer_base* rtemp = r;\n            uint64 ttemp = t;\n            tm.add(ttemp,rtemp);\n            r->next_time_to_run = t;\n            r->in_global_clock = true;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void timer_global_clock::\n    remove (\n        timer_base* r\n    )\n    {\n        if (r->in_global_clock)\n        {\n            tm.position_enumerator(r->next_time_to_run-1);\n            do\n            {\n                if (tm.element().value() == r)\n                {\n                    uint64 t;\n                    timer_base* rtemp;\n                    tm.remove_current_element(t,rtemp);\n                    r->in_global_clock = false;\n                    break;\n                }\n            } while (tm.move_next());\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void timer_global_clock::\n    adjust_delay (\n        timer_base* r,\n        unsigned long new_delay\n    )\n    {\n        if (r->in_global_clock)\n        {\n            remove(r);\n            // compute the new next_time_to_run and store it in t\n            uint64 t = r->next_time_to_run;\n            t -= r->delay*1000;\n            t += new_delay*1000;\n\n            tm.reset();\n            if (!tm.move_next() || t < tm.element().key())\n            {\n                // we need to make the thread adjust its next time to\n                // trigger if this new event occurrs sooner than the\n                // next event in tm\n                s.signal();\n            }\n\n            // set this incase add throws\n            r->running = false;\n            r->delay = new_delay;\n\n            timer_base* rtemp = r;\n            uint64 ttemp = t;\n            tm.add(ttemp,rtemp);\n            r->next_time_to_run = t;\n            r->in_global_clock = true;\n\n            // put this back now that we know add didn't throw\n            r->running = true;\n\n        }\n        else\n        {\n            r->delay = new_delay;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void timer_global_clock::\n    thread()\n    {\n        auto_mutex M(m);\n        while (!shutdown)\n        {\n            unsigned long delay = 100000;\n\n            tm.reset();\n            tm.move_next();\n            // loop and start all the action functions for timers that should have\n            // triggered.\n            while(tm.current_element_valid())\n            {\n                const uint64 cur_time = ts.get_timestamp();\n                uint64 t = tm.element().key();\n                // if the next event in tm is ready to trigger\n                if (t <= cur_time + 999)\n                {\n                    // remove this event from the tm map\n                    timer_base* r = tm.element().value();\n                    timer_base* rtemp;\n                    tm.remove_current_element(t,rtemp);\n                    r->in_global_clock = false;\n\n                    // if this timer is still \"running\" then start its action function\n                    if (r->running)\n                    {\n                        r->restart();\n                    }\n                }\n                else\n                {\n                    // there aren't any more timers that should trigger so we compute\n                    // the delay to the next timer event.\n                    delay = static_cast<unsigned long>((t - cur_time)/1000);\n                    break;\n                }\n            }\n\n            s.wait_or_timeout(delay);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    shared_ptr_thread_safe<timer_global_clock> get_global_clock()\n    {\n        static shared_ptr_thread_safe<timer_global_clock> d(new timer_global_clock);\n        return d;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // do this just to make sure get_global_clock() gets called at program startup\n    class timer_global_clock_helper\n    {\n    public:\n        timer_global_clock_helper()\n        {\n            get_global_clock();\n        }\n    };\n    static timer_global_clock_helper call_get_global_clock;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TIMER_cPPh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/timer/timer.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TIMEr_Hh_\n#define DLIB_TIMEr_Hh_\n\n#include \"../threads.h\"\n#include \"../algs.h\"\n#include \"../misc_api.h\"\n#include \"timer_abstract.h\"\n#include \"../uintn.h\"\n#include \"../binary_search_tree.h\"\n#include \"../smart_pointers_thread_safe.h\"\n#include \"timer_heavy.h\"\n\nnamespace dlib\n{\n\n    struct timer_base : public threaded_object\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object contains the base members of the timer object.\n                It exists so that we can access them from outside any templated functions.\n        !*/\n\n        unsigned long delay;\n        // these are only modified by the global_clock\n        uint64 next_time_to_run;\n        timestamper ts;\n        bool running;\n        bool in_global_clock;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    class timer_global_clock : private threaded_object\n    {\n        /*!\n            This object sets up a timer that triggers the action function\n            for timer objects that are tracked inside this object. \n            INITIAL VALUE\n                - shutdown == false\n                - running == false\n\n            CONVENTION\n                - if (shutdown) then\n                    - thread() should terminate\n                - else (running) then\n                    - thread() is running\n\n                - tm[time] == pointer to a timer_base object \n        !*/\n        typedef binary_search_tree<uint64,timer_base*,memory_manager<char>::kernel_2b>::kernel_2a_c time_map;\n    public:\n\n        ~timer_global_clock();\n\n        void add (\n            timer_base* r\n        );\n        /*!\n            requires\n                - m is locked\n            ensures\n                - starts the thread if it isn't already started\n                - adds r to tm\n                - #r->in_global_clock == true\n                - updates r->next_time_to_run appropriately according to\n                    r->delay\n        !*/\n\n        void remove (\n            timer_base* r\n        );\n        /*!\n            requires\n                - m is locked\n            ensures\n                - if (r is in tm) then\n                    - removes r from tm\n                - #r->in_global_clock == false\n        !*/\n\n        void adjust_delay (\n            timer_base* r,\n            unsigned long new_delay\n        );\n        /*!\n            requires\n                - m is locked\n            ensures\n                - #r->delay == new_delay\n                - if (r->in_global_clock) then\n                    - the time to the next event will have been appropriately adjusted\n        !*/\n\n        mutex m;\n\n        friend shared_ptr_thread_safe<timer_global_clock> get_global_clock();\n\n    private:\n        timer_global_clock();\n\n        time_map tm;  \n        signaler s;\n        bool shutdown;\n        bool running;\n        timestamper ts;\n\n        void thread();\n        /*!\n            ensures\n                - spawns timer tasks as is appropriate\n        !*/\n    };\n    shared_ptr_thread_safe<timer_global_clock> get_global_clock();\n    /*!\n        ensures\n            - returns the global instance of the timer_global_clock object\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    class timer : private timer_base \n    {\n        /*!\n            INITIAL VALUE\n                - running   == false\n                - delay     == 1000\n                - ao        == a pointer to the action_object()\n                - af        == a pointer to the action_function()\n                - in_global_clock == false\n                - next_time_to_run == 0\n                - gc == get_global_clock()\n\n            CONVENTION\n                - the mutex used to lock everything is gc->m\n                - running == is_running()\n                - delay == delay_time()\n                - *ao == action_object()\n                - af == action_function()    \n                - if (!running) then\n                    - in_global_clock == false\n                - else \n                    - next_time_to_run == the next time this timer should run according\n                      to the timestamper in the global_clock\n        !*/\n\n    public:\n\n        // These typedefs are here for backwards compatibility with previous versions of\n        // dlib.\n        typedef timer_heavy<T> kernel_1a;\n        typedef timer kernel_2a;\n\n        typedef void (T::*af_type)();\n\n        timer(  \n            T& ao_,\n            af_type af_\n        );\n\n        virtual ~timer(\n        );\n\n        void clear(\n        );\n\n        af_type action_function (\n        ) const;\n\n        const T& action_object (\n        ) const;\n\n        T& action_object (\n        );\n\n        bool is_running (\n        ) const;\n\n        unsigned long delay_time (\n        ) const;\n\n        void set_delay_time (\n            unsigned long milliseconds\n        );\n        \n        void start (            \n        );\n\n        void stop (\n        );\n\n        void stop_and_wait (\n        );\n\n    private: \n\n        void thread (\n        );\n        /*!\n            ensures\n                - calls the action function\n        !*/\n\n        // data members\n        T& ao;\n        const af_type af;\n        shared_ptr_thread_safe<timer_global_clock> gc;\n\n        // restricted functions\n        timer(const timer&);        // copy constructor\n        timer& operator=(const timer&);    // assignment operator\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename T\n        >\n    timer<T>::\n    timer(  \n        T& ao_,\n        af_type af_\n    ) : \n        ao(ao_),\n        af(af_),\n        gc(get_global_clock())\n    {\n        delay = 1000;\n        next_time_to_run = 0;\n        running = false;\n        in_global_clock = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    timer<T>::\n    ~timer(\n    )\n    {\n        clear();\n        wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer<T>::\n    clear(\n    )\n    {\n        auto_mutex M(gc->m);\n        running = false;\n        gc->remove(this);\n        delay = 1000;        \n        next_time_to_run = 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    typename timer<T>::af_type timer<T>::\n    action_function (\n    ) const\n    {\n        return af;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const T& timer<T>::\n    action_object (\n    ) const\n    {\n        return ao;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    T& timer<T>::\n    action_object (\n    )\n    {\n        return ao;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool timer<T>::\n    is_running (\n    ) const\n    {\n        auto_mutex M(gc->m);\n        return running;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    unsigned long timer<T>::\n    delay_time (\n    ) const\n    {\n        auto_mutex M(gc->m);\n        return delay;        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer<T>::\n    set_delay_time (\n        unsigned long milliseconds\n    )\n    {\n        auto_mutex M(gc->m);\n        gc->adjust_delay(this,milliseconds);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer<T>::\n    start (            \n    )\n    {\n        auto_mutex M(gc->m);\n        if (!running)\n        {\n            gc->add(this);\n            running = true;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer<T>::\n    stop (\n    )\n    {\n        gc->m.lock();\n        running = false;\n        gc->remove(this);\n        gc->m.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer<T>::\n    thread (\n    )\n    {\n        // call the action function\n        (ao.*af)(); \n        auto_mutex M(gc->m);\n        if (running)\n        {\n            gc->remove(this);\n            gc->add(this);\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer<T>::\n    stop_and_wait (\n    )\n    {\n        gc->m.lock();\n        running = false;\n        gc->remove(this);\n        gc->m.unlock();\n        wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"timer.cpp\"\n#endif\n\n#endif // DLIB_TIMEr_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/timer/timer_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_TIMER_KERNEl_ABSTRACT_\n#ifdef DLIB_TIMER_KERNEl_ABSTRACT_\n\n#include \"../threads.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class timer \n    {\n        /*!\n            INITIAL VALUE\n                is_running()      == false\n                delay_time()      == 1000\n                action_object()   == The object that is passed into the constructor\n                action_function() == The member function pointer that is passed to \n                                     the constructor.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a timer that will call a given member function \n                (the action function) repeatedly at regular intervals and in its own\n                thread.\n\n                Note that the delay_time() is measured in milliseconds but you are not \n                guaranteed to have that level of resolution.  The actual resolution\n                is implementation dependent.\n\n            THREAD SAFETY\n                All methods of this class are thread safe. \n        !*/\n\n    public:\n\n        typedef void (T::*af_type)();\n\n        timer (  \n            T& ao,\n            af_type af\n        );\n        /*!\n            requires\n                - af does not throw\n            ensures                \n                - does not block.\n                - #*this is properly initialized\n                - #action_object() == ao\n                - #action_function() == af\n                  (af is a member function pointer to a member in the class T)\n            throws\n                - std::bad_alloc\n                - dlib::thread_error\n        !*/\n\n        virtual ~timer (\n        );\n        /*!\n            requires\n                - is not called from inside the action_function()\n            ensures\n                - any resources associated with *this have been released\n                - will not call the action_function() anymore.\n                - if (the action function is currently executing) then\n                    - blocks until it finishes\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n                - does not block\n            throws\n                - std::bad_alloc or dlib::thread_error\n                    If either of these exceptions are thrown then #*this is unusable \n                    until clear() is called and succeeds.\n        !*/\n\n        af_type action_function (\n        ) const;\n        /*!\n            ensures\n                - does not block.\n                - returns a pointer to the member function of action_object() that is\n                  called by *this.\n        !*/\n\n        const T& action_object (\n        ) const;\n        /*!\n            ensures\n                - does not block.\n                - returns a const reference to the object used to call the member\n                  function pointer action_function()\n        !*/\n\n        T& action_object (\n        );\n        /*!\n            ensures\n                - does not block.\n                - returns a non-const reference to the object used to call the member\n                  function pointer action_function()\n        !*/\n\n        bool is_running (\n        ) const;\n        /*!\n            ensures\n                - does not block.\n                - if (*this is currently scheduled to call the action_function()) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        unsigned long delay_time (\n        ) const;\n        /*!\n            ensures\n                - does not block.\n                - returns the amount of time, in milliseconds, that *this will wait between\n                  the return of one call to the action_function() and the beginning of the\n                  next call to the action_function().\n        !*/\n\n        void set_delay_time (\n            unsigned long milliseconds\n        );\n        /*!            \n            ensures\n                - does not block.\n                - #delay_time() == milliseconds\n            throws\n                - std::bad_alloc or dlib::thread_error\n                    If either of these exceptions are thrown then #is_running() == false\n                    but otherwise this function succeeds\n        !*/\n        \n        void start (            \n        );\n        /*!\n            ensures\n                - does not block.\n                - if (is_running() == false) then\n                    - #is_running() == true\n                    - The action_function() will run in another thread.\n                    - The first call to the action_function() will occur in roughly \n                      delay_time() milliseconds.\n                - else\n                    - this call to start() has no effect\n            throws\n                - dlib::thread_error or std::bad_alloc\n                    If this exception is thrown then #is_running() == false but \n                    otherwise this call to start() has no effect.\n        !*/\n\n        void stop (\n        );\n        /*!\n            ensures\n                - #is_running() == false\n                - does not block.\n        !*/\n\n        void stop_and_wait (\n        );\n        /*!\n            ensures \n                - #is_running() == false\n                - if (the action function is currently executing) then\n                    - blocks until it finishes\n        !*/\n\n    private:\n\n        // restricted functions\n        timer(const timer<T>&);        // copy constructor\n        timer<T>& operator=(const timer<T>&);    // assignment operator\n\n    };    \n\n}\n\n#endif // DLIB_TIMER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/timer/timer_heavy.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TIMER_KERNEl_1_\n#define DLIB_TIMER_KERNEl_1_\n\n#include \"../threads.h\"\n#include \"../algs.h\"\n#include \"../misc_api.h\"\n#include \"timer_abstract.h\"\n\nnamespace dlib\n{\n\n    template <\n        typename T\n        >\n    class timer_heavy\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an implementation of the timer_abstract.h interface.  It is very\n                simple and uses only one thread which is always alive in a timer_heavy.\n                The reason this object exists is for historical reasons.  Originally, the\n                dlib::timer was a multi-implementation component and the timer_heavy was\n                its first implementation.  It was superseded later by the more efficient\n                dlib::timer.  However, timer_heavy is still around so that\n                dlib::timer::kernel_1a has something to refer to.  This way, old client\n                code which somehow depends on the same thread always calling a timer action\n                function isn't going to be disrupted.\n\n\n            INITIAL VALUE\n                - running   == false\n                - delay     == 1000\n                - ao        == a pointer to the action_object()\n                - af        == a pointer to the action_function()\n                - m         == a mutex that locks everything in this class\n                - s         == a signaler for mutex m\n                - stop_running == false\n\n            CONVENTION\n                - running && !stop_running == is_running()\n                - delay == delay_time()\n                - *ao == action_object()\n                - af == action_function()    \n\n                - if (running) then\n                    - there is a thread running\n                - if (is_running()) then\n                    - next_time_to_run == the time when the next execution of the action\n                      function should occurr.  (the time is given by ts.get_timestamp())\n\n                - stop_running is used to tell the thread to quit.  If it is\n                  set to true then the thread should end.\n        !*/\n\n    public:\n\n        typedef void (T::*af_type)();\n\n        timer_heavy(  \n            T& ao_,\n            af_type af_\n        );\n\n        virtual ~timer_heavy(\n        );\n\n        void clear(\n        );\n\n        af_type action_function (\n        ) const;\n\n        const T& action_object (\n        ) const;\n\n        T& action_object (\n        );\n\n        bool is_running (\n        ) const;\n\n        unsigned long delay_time (\n        ) const;\n\n        void set_delay_time (\n            unsigned long milliseconds\n        );\n        \n        void start (            \n        );\n\n        void stop (\n        );\n\n        void stop_and_wait (\n        );\n\n    private:\n\n        void thread (\n        );\n        /*!\n            requires\n                - is run in its own thread\n            ensures\n                - calls the action function for the given timer object in the manner\n                  specified by timer_kernel_abstract.h\n        !*/\n\n        // data members\n        T& ao;\n        const af_type af;\n        unsigned long delay;\n        mutex m;\n        signaler s;\n\n        bool running;\n        bool stop_running;\n        timestamper ts;\n        uint64 next_time_to_run;\n\n        // restricted functions\n        timer_heavy(const timer_heavy<T>&);        // copy constructor\n        timer_heavy<T>& operator=(const timer_heavy<T>&);    // assignment operator\n\n    };    \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    \n    template <\n        typename T\n        >\n    timer_heavy<T>::\n    timer_heavy(  \n        T& ao_,\n        af_type af_\n    ) : \n        ao(ao_),\n        af(af_),\n        delay(1000),\n        s(m),\n        running(false),\n        stop_running(false)\n    {\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    timer_heavy<T>::\n    ~timer_heavy(\n    )\n    {\n        stop_and_wait();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer_heavy<T>::\n    clear(\n    )\n    {\n        m.lock();\n        stop_running = true;\n        delay = 1000;        \n        s.broadcast();\n        m.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    typename timer_heavy<T>::af_type timer_heavy<T>::\n    action_function (\n    ) const\n    {\n        return af;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    const T& timer_heavy<T>::\n    action_object (\n    ) const\n    {\n        return ao;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    T& timer_heavy<T>::\n    action_object (\n    )\n    {\n        return ao;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    bool timer_heavy<T>::\n    is_running (\n    ) const\n    {\n        auto_mutex M(m);\n        return running && !stop_running;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    unsigned long timer_heavy<T>::\n    delay_time (\n    ) const\n    {\n        auto_mutex M(m);\n        return delay;        \n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer_heavy<T>::\n    set_delay_time (\n        unsigned long milliseconds\n    )\n    {\n        m.lock();\n\n        // if (is_running()) then we should adjust next_time_to_run\n        if (running && !stop_running)\n        {\n            next_time_to_run -= delay*1000;\n            next_time_to_run += milliseconds*1000;\n        }\n\n        delay = milliseconds;\n        s.broadcast();\n        m.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer_heavy<T>::\n    start (            \n    )\n    {\n        auto_mutex M(m);\n\n        // if (is_running() == false) then reset the countdown to the next call \n        // to the action_function()\n        if ( (running && !stop_running) == false)\n            next_time_to_run = ts.get_timestamp() + delay*1000;\n\n        stop_running = false;\n        if (running == false)\n        {\n            running = true;\n\n            // start the thread\n            if (create_new_thread<timer_heavy,&timer_heavy::thread>(*this) == false)\n            {\n                running = false;\n                throw dlib::thread_error(\"error creating new thread in timer_heavy::start\");\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer_heavy<T>::\n    stop (\n    )\n    {\n        m.lock();\n        stop_running = true;\n        s.broadcast();\n        m.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer_heavy<T>::\n    thread (\n    )\n    {\n        auto_mutex M(m);\n        unsigned long delay_remaining;\n        uint64 current_time = ts.get_timestamp();\n\n        if (current_time < next_time_to_run)\n            delay_remaining = static_cast<unsigned long>((next_time_to_run-current_time)/1000);\n        else\n            delay_remaining = 0;\n\n        while (stop_running == false)\n        {\n            if (delay_remaining > 0)\n                s.wait_or_timeout(delay_remaining);\n\n            if (stop_running)\n                break;            \n\n            current_time = ts.get_timestamp();\n            if (current_time < next_time_to_run)\n            {\n                // then we woke up too early so we should keep waiting\n                delay_remaining = static_cast<unsigned long>((next_time_to_run-current_time)/1000);\n\n                // rounding might make this be zero anyway.  So if it is\n                // then we will say we have hit the next time to run.\n                if (delay_remaining > 0)\n                    continue;\n            }\n\n            // call the action function \n            m.unlock();\n            (ao.*af)(); \n            m.lock();\n\n            current_time = ts.get_timestamp();\n            next_time_to_run = current_time + delay*1000;\n            delay_remaining = delay;\n        }\n        running = false;\n        stop_running = false;\n        s.broadcast();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    void timer_heavy<T>::\n    stop_and_wait (\n    )\n    {\n        m.lock();\n        if (running)\n        {\n            // make the running thread terminate\n            stop_running = true;\n\n            s.broadcast();\n            // wait for the thread to quit\n            while (running)\n                s.wait();          \n        }\n        m.unlock();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TIMER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/timer.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TIMEr_\n#define DLIB_TIMEr_\n\n#include \"timer/timer.h\"\n#include \"timer/timer_heavy.h\"\n\n#endif // DLIB_TIMEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/timing.h",
    "content": "// Copyright (C) 2011  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TImING_Hh_\n#define DLIB_TImING_Hh_\n\n#include \"misc_api.h\"\n#include <cstring>\n#include \"string.h\"\n\n#include <iostream>\n\n// ----------------------------------------------------------------------------------------\n\n/*!A timing\n\n    This set of functions is useful for determining how much time is spent\n    executing blocks of code.  Consider the following example:\n\n    int main()\n    {\n        using namespace dlib::timing;\n        for (int i = 0; i < 10; ++i)\n        {\n            // timing block #1\n            start(1,\"block #1\");\n            dlib::sleep(500);\n            stop(1);\n\n            // timing block #2\n            start(2,\"block #2\");\n            dlib::sleep(1000);\n            stop(2);\n        }\n\n        print();\n    }\n\n    This program would output:\n        Timing report: \n            block #1: 5.0 seconds\n            block #2: 10.0 seconds\n\n    So we spent 5 seconds in block #1 and 10 seconds in block #2\n\n\n\n    Additionally, note that you can use an RAII style timing block object.  For\n    example, if we wanted to find out how much time we spent in a loop a convenient\n    way to do this would be as follows:\n\n    int main()\n    {\n        using namespace dlib::timing;\n        for (int i = 0; i < 10; ++i)\n        {\n            block tb(1, \"main loop\");\n\n            dlib::sleep(1500);\n        } \n\n        print();\n    }\n\n    This program would output:\n        Timing report: \n            block main loop: 15.0 seconds\n\n!*/\n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n    namespace timing\n    {\n        const int TIME_SLOTS = 500;\n        const int NAME_LENGTH = 40;\n\n        inline uint64* time_buf()\n        {\n            static uint64 buf[TIME_SLOTS] = {0};\n            return buf;\n        }\n\n        inline char* name_buf(int i, const char* name)\n        {\n            static char buf[TIME_SLOTS][NAME_LENGTH] = {{0}};\n            // if this name buffer is empty then copy name into it\n            if (buf[i][0] == '\\0')\n            {\n                using namespace std;\n                strncpy(buf[i], name, NAME_LENGTH-1);\n                buf[i][NAME_LENGTH-1] = '\\0';\n            }\n            // return the name buffer\n            return buf[i];\n        }\n\n        inline timestamper& ts()\n        {\n            static timestamper ts_;\n            return ts_;\n        }\n\n        inline void start(int i )\n        {\n            time_buf()[i] -= ts().get_timestamp();\n        }\n\n        inline void start(int i, const char* name)\n        {\n            time_buf()[i] -= ts().get_timestamp();\n            name_buf(i,name);\n        }\n\n        inline void stop(int i)\n        {\n            time_buf()[i] += ts().get_timestamp();\n        }\n\n        inline void print()\n        {\n            using namespace std;\n            cout << \"Timing report: \" << endl;\n\n            // figure out how long the longest name is going to be.\n            unsigned long max_name_length = 0;\n            for (int i = 0; i < TIME_SLOTS; ++i)\n            {\n                string name;\n                // Check if the name buffer is empty.  Use the name it contains if it isn't.\n                if (name_buf(i,\"\")[0] != '\\0')\n                    name = name_buf(i,\"\");\n                else \n                    name = cast_to_string(i);\n                max_name_length = std::max<unsigned long>(max_name_length, name.size());\n            }\n\n            for (int i = 0; i < TIME_SLOTS; ++i)\n            {\n                if (time_buf()[i] != 0)\n                {\n                    double time = time_buf()[i]/1000.0;\n                    string name;\n                    // Check if the name buffer is empty.  Use the name it contains if it isn't.\n                    if (name_buf(i,\"\")[0] != '\\0')\n                        name = name_buf(i,\"\");\n                    else \n                        name = cast_to_string(i);\n\n                    // make sure the name is always the same length.  Do so by padding with spaces\n                    if (name.size() < max_name_length)\n                        name += string(max_name_length-name.size(),' ');\n\n                    if (time < 1000)\n                        cout << \"  \" << name << \": \" << time << \" milliseconds\" << endl;\n                    else if (time < 1000*1000)\n                        cout << \"  \" << name << \": \" << time/1000.0 << \" seconds\" << endl;\n                    else if (time < 1000*1000*60)\n                        cout << \"  \" << name << \": \" << time/1000.0/60.0 << \" minutes\" << endl;\n                    else\n                        cout << \"  \" << name << \": \" << time/1000.0/60.0/60.0 << \" hours\" << endl;\n                }\n            }\n        }\n\n        inline void clear()\n        {\n            for (int i = 0; i < TIME_SLOTS; ++i)\n            {\n                // clear timing buffer\n                time_buf()[i] = 0;\n                // clear name buffer\n                name_buf(i,\"\")[0] = '\\0';\n            }\n        }\n\n        struct block\n        {\n            /*!\n                WHAT THIS OBJECT REPRESENTS\n                    This is an RAII tool for calling start() and stop()\n            !*/\n\n            block(int i):idx(i) {start(idx);}\n            block(int i, const char* str):idx(i) {start(idx,str);}\n            ~block() { stop(idx); }\n            const int idx;\n        };\n    }\n}\n\n\n#endif // DLIB_TImING_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/tokenizer/tokenizer_kernel_1.cpp",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TOKENIZER_KERNEL_1_CPp_\n#define DLIB_TOKENIZER_KERNEL_1_CPp_\n#include \"tokenizer_kernel_1.h\"\n\n#include <iostream>\n#include <cstdio>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    tokenizer_kernel_1::\n    tokenizer_kernel_1 (        \n    ) :\n        headset(0),\n        bodyset(0),\n        have_peeked(false)\n    {\n        try\n        {\n            headset = new bool[UCHAR_MAX];\n            bodyset = new bool[UCHAR_MAX];\n\n            clear();\n        }\n        catch (...)\n        {\n            if (headset) delete [] headset;\n            if (bodyset) delete [] headset;\n            throw;\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    tokenizer_kernel_1::\n    ~tokenizer_kernel_1 (\n    )\n    {\n        delete [] bodyset;\n        delete [] headset;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tokenizer_kernel_1::\n    clear(\n    )\n    {\n        using namespace std;\n\n        in = 0;\n        streambuf = 0;\n        have_peeked = false;\n\n        head = \"_\" + lowercase_letters() + uppercase_letters();\n        body = \"_\" + lowercase_letters() + uppercase_letters() + numbers();\n\n        for (unsigned long i = 0; i < UCHAR_MAX; ++i)\n        {\n            headset[i] = false;\n            bodyset[i] = false;\n        }\n\n        for (string::size_type i = 0; i < head.size(); ++i)\n            headset[static_cast<unsigned char>(head[i])] = true;\n        for (string::size_type i = 0; i < body.size(); ++i)\n            bodyset[static_cast<unsigned char>(body[i])] = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tokenizer_kernel_1::\n    set_stream (\n        std::istream& in_\n    )\n    {\n        in = &in_;\n        streambuf = in_.rdbuf();\n        have_peeked = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool tokenizer_kernel_1::\n    stream_is_set (\n    ) const\n    {\n        return (in != 0);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    std::istream& tokenizer_kernel_1::\n    get_stream (\n    ) const\n    {\n        return *in;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tokenizer_kernel_1::\n    get_token (\n        int& type,\n        std::string& token\n    )\n    {\n        if (!have_peeked)\n        {\n            std::streambuf::int_type ch;\n            ch = streambuf->sbumpc();\n\n            switch (ch)\n            {\n            case EOF:\n                type = END_OF_FILE;\n                token.clear();\n                return;\n\n            case '\\n':\n                type = END_OF_LINE;\n                token = \"\\n\";\n                return;\n\n            case '\\r':\n            case ' ':\n            case '\\t':\n                type = WHITE_SPACE;\n                token = static_cast<char>(ch);\n                ch = streambuf->sgetc();\n                while ((ch == ' ' || ch == '\\t' || ch == '\\r') && ch != EOF)\n                {\n                    token += static_cast<char>(ch);\n                    ch = streambuf->snextc();\n                }\n                return;\n\n            default:\n                if (headset[static_cast<unsigned char>(ch)])\n                {\n                    type = IDENTIFIER;\n                    token = static_cast<char>(ch);\n                    ch = streambuf->sgetc();\n                    while ( bodyset[static_cast<unsigned char>(ch)] && ch != EOF )\n                    {\n                        token += static_cast<char>(ch);\n                        ch = streambuf->snextc();\n                    }\n                }\n                else if ('0' <= ch && ch <= '9')\n                {\n                    type = NUMBER;\n                    token = static_cast<char>(ch);\n                    ch = streambuf->sgetc();\n                    while (('0' <= ch && ch <= '9') && ch != EOF)\n                    {\n                        token += static_cast<char>(ch);\n                        ch = streambuf->snextc();\n                    }\n                }\n                else\n                {\n                    type = CHAR;\n                    token = static_cast<char>(ch);\n                }\n                return;\n            } // switch (ch)\n        }\n        \n        // if we get this far it means we have peeked so we should \n        // return the peek data.\n        type = next_type;\n        token = next_token;\n        have_peeked = false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    int tokenizer_kernel_1::\n    peek_type (\n    ) const\n    {\n        const_cast<tokenizer_kernel_1*>(this)->get_token(next_type,next_token);\n        have_peeked = true;\n        return next_type;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string& tokenizer_kernel_1::\n    peek_token (\n    ) const\n    {\n        const_cast<tokenizer_kernel_1*>(this)->get_token(next_type,next_token);\n        have_peeked = true;\n        return next_token;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    void tokenizer_kernel_1::\n    swap (\n        tokenizer_kernel_1& item\n    )\n    {\n        exchange(in,item.in);\n        exchange(streambuf,item.streambuf);\n        exchange(head,item.head);\n        exchange(body,item.body);\n        exchange(bodyset,item.bodyset);\n        exchange(headset,item.headset);\n        exchange(have_peeked,item.have_peeked);\n        exchange(next_type,item.next_type);\n        exchange(next_token,item.next_token);\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    void tokenizer_kernel_1::\n    set_identifier_token (\n        const std::string& head_,\n        const std::string& body_\n    )\n    {\n        using namespace std;\n\n        head = head_;\n        body = body_;\n\n        for (unsigned long i = 0; i < UCHAR_MAX; ++i)\n        {\n            headset[i] = false;\n            bodyset[i] = false;\n        }\n\n        for (string::size_type i = 0; i < head.size(); ++i)\n            headset[static_cast<unsigned char>(head[i])] = true;\n        for (string::size_type i = 0; i < body.size(); ++i)\n            bodyset[static_cast<unsigned char>(body[i])] = true;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    const std::string tokenizer_kernel_1::\n    get_identifier_head (\n    ) const\n    {\n        return head;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    const std::string tokenizer_kernel_1::\n    get_identifier_body (\n    ) const\n    {\n        return body;\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    const std::string tokenizer_kernel_1::\n    lowercase_letters (\n    ) const\n    {\n        return std::string(\"abcdefghijklmnopqrstuvwxyz\");\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    const std::string tokenizer_kernel_1::\n    uppercase_letters (\n    ) const\n    {\n        return std::string(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\");\n    }\n\n// ----------------------------------------------------------------------------------------\n    \n    const std::string tokenizer_kernel_1::\n    numbers (\n    ) const\n    {\n        return std::string(\"0123456789\");\n    }\n    \n// ----------------------------------------------------------------------------------------\n    \n}\n#endif // DLIB_TOKENIZER_KERNEL_1_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/tokenizer/tokenizer_kernel_1.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TOKENIZER_KERNEl_1_\n#define DLIB_TOKENIZER_KERNEl_1_\n\n#include <string>\n#include <iosfwd>\n#include <climits>\n#include \"../algs.h\"\n#include \"tokenizer_kernel_abstract.h\"\n\nnamespace dlib\n{\n\n    class tokenizer_kernel_1 \n    {\n        /*!\n            INITIAL VALUE\n                - in == 0\n                - streambuf == 0\n                - have_peeked == false\n                - head == \"_\" + lowercase_letters() + uppercase_letters()\n                - body == \"_\" + lowercase_letters() + uppercase_letters() + numbers()\n                - headset == pointer to an array of UCHAR_MAX bools and set according \n                  to the CONVENTION.\n                - bodyset == pointer to an array of UCHAR_MAX bools and set according \n                  to the CONVENTION.\n\n            CONVENTION  \n                - if (stream_is_set()) then\n                    - get_stream() == *in\n                    - streambuf == in->rdbuf()\n                - else\n                    - in == 0\n                    - streambuf == 0\n\n                - body == get_identifier_body()\n                - head == get_identifier_head()\n\n                - if (the char x appears in head) then\n                    - headset[static_cast<unsigned char>(x)] == true\n                - else\n                    - headset[static_cast<unsigned char>(x)] == false\n\n                - if (the char x appears in body) then\n                    - bodyset[static_cast<unsigned char>(x)] == true\n                - else\n                    - bodyset[static_cast<unsigned char>(x)] == false\n\n                - if (have_peeked) then\n                    - next_token == the next token to be returned from get_token()\n                    - next_type == the type of token in peek_token\n        !*/\n\n    public:\n\n        // The name of this enum is irrelevant but on some compilers (gcc on MAC OS X) not having it named\n        // causes an error for whatever reason\n        enum some_random_name\n        {\n            END_OF_LINE,\n            END_OF_FILE,\n            IDENTIFIER,\n            CHAR,\n            NUMBER,\n            WHITE_SPACE\n        };\n\n        tokenizer_kernel_1 (        \n        );\n\n        virtual ~tokenizer_kernel_1 (\n        );\n\n        void clear(\n        );\n\n        void set_stream (\n            std::istream& in\n        );\n\n        bool stream_is_set (\n        ) const;\n\n        std::istream& get_stream (\n        ) const;\n\n        void get_token (\n            int& type,\n            std::string& token\n        );\n\n        void swap (\n            tokenizer_kernel_1& item\n        );\n\n        void set_identifier_token (\n            const std::string& head,\n            const std::string& body\n        );\n\n        int peek_type (\n        ) const;\n\n        const std::string& peek_token (\n        ) const;\n\n        const std::string get_identifier_head (\n        ) const;\n\n        const std::string get_identifier_body (\n        ) const;\n\n        const std::string lowercase_letters (\n        ) const;\n\n        const std::string uppercase_letters (\n        ) const;\n\n        const std::string numbers (\n        ) const;\n\n    private:\n\n        // restricted functions\n        tokenizer_kernel_1(const tokenizer_kernel_1&);        // copy constructor\n        tokenizer_kernel_1& operator=(const tokenizer_kernel_1&);    // assignment operator\n\n\n        // data members\n        std::istream* in;\n        std::streambuf* streambuf;\n        std::string head;\n        std::string body;\n        bool* headset;\n        bool* bodyset;\n\n        mutable std::string next_token;\n        mutable int next_type;\n        mutable bool have_peeked;\n    };    \n\n    inline void swap (\n        tokenizer_kernel_1& a, \n        tokenizer_kernel_1& b \n    ) { a.swap(b); }   \n\n}\n\n#ifdef NO_MAKEFILE\n#include \"tokenizer_kernel_1.cpp\"\n#endif\n\n#endif // DLIB_TOKENIZER_KERNEl_1\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/tokenizer/tokenizer_kernel_abstract.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_TOKENIZER_KERNEl_ABSTRACT_\n#ifdef DLIB_TOKENIZER_KERNEl_ABSTRACT_\n\n#include <string>\n#include <ioswfd>\n\nnamespace dlib\n{\n\n    class tokenizer \n    {\n        /*!\n            INITIAL VALUE\n                stream_is_set() == false\n                get_identifier_head() == \"_\" + lowercase_letters() + uppercase_letters()\n                get_identifier_body() == \"_\" + lowercase_letters() + uppercase_letters() + \n                                         numbers()\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple tokenizer for textual data.\n\n            BUFFERING\n                This object is allowed to buffer data from the input stream.\n                Thus if you clear it or switch streams (via calling set_stream())\n                any buffered data will be lost.\n\n            TOKENS\n                When picking out tokens the tokenizer will always extract the \n                longest token it can.  For example, if faced with the string \n                \"555\" it will consider the three 5s to be a single NUMBER \n                token not three smaller NUMBER tokens.\n\n                Also note that no characters in the input stream are discarded.\n                They will all be returned in the text of some token.  \n                Additionally, each character will never be returned more than once.  \n                This means that if you concatenated all returned tokens it would exactly\n                reproduce the contents of the input stream.\n\n                The tokens are defined as follows:\n\n                END_OF_LINE\n                    This is a single character token and is always the '\\n' \n                    character.\n\n                END_OF_FILE\n                    This token represents the end of file.  It doesn't have any\n                    actual characters associated with it.  \n\n                IDENTIFIER\n                    This is a multi-character token.  It is defined as a string that\n                    begins with a character from get_identifier_head() and is \n                    followed by any number of characters from get_identifier_body().\n                       \n                NUMBER\n                    This is a multi-character token.  It is defined as a sequence of\n                    numbers. \n\n                WHITE_SPACE\n                    This is a multi character token.  It is defined as a sequence of\n                    one or more spaces, carrage returns, and tabs.  I.e. It is\n                    composed of characters from the following string \" \\r\\t\".\n\n                CHAR\n                    This is a single character token.  It matches anything that isn't\n                    part of one of the above tokens.                    \n        !*/\n\n    public:\n\n        enum \n        {\n            END_OF_LINE,\n            END_OF_FILE,\n            IDENTIFIER,\n            CHAR,\n            NUMBER,\n            WHITE_SPACE\n        };\n\n        tokenizer (        \n        );\n        /*!\n            ensures                \n                - #*this is properly initialized\n            throws\n                - std::bad_alloc\n        !*/\n\n        virtual ~tokenizer (\n        );\n        /*!\n            ensures\n                - any resources associated with *this have been released\n        !*/\n\n        void clear(\n        );\n        /*!\n            ensures\n                - #*this has its initial value\n            throws\n                - std::bad_alloc\n                    If this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds.\n        !*/\n\n        void set_stream (\n            std::istream& in\n        );\n        /*!\n            ensures\n                - #*this will read data from in and tokenize it\n                - #stream_is_set() == true\n                - #get_stream() == in\n        !*/\n\n        bool stream_is_set (\n        ) const;\n        /*!\n            ensures\n                - returns true if a stream has been associated with *this by calling\n                  set_stream()\n        !*/\n\n        std::istream& get_stream (\n        ) const;\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - returns a reference to the istream object that *this is reading \n                  from.\n        !*/\n\n        void get_token (\n            int& type,\n            std::string& token\n        );\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - #token == the next token from the input stream get_stream()\n                - #type == the type of the token in #token\n            throws\n                - bad_alloc\n                    If this exception is thrown then the call to this function will \n                    have no effect on *this but the values of #type and #token will be \n                    undefined.  Additionally, some characters may have been read\n                    from the stream get_stream() and lost.\n        !*/\n\n        int peek_type (\n        ) const;\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - returns the type of the token that will be returned from\n                  the next call to get_token()\n            throws\n                - bad_alloc\n                    If this exception is thrown then the call to this function will \n                    have no effect on *this.  However, some characters may have been \n                    read from the stream get_stream() and lost.\n        !*/\n\n        const std::string& peek_token (\n        ) const;\n        /*!\n            requires\n                - stream_is_set() == true\n            ensures\n                - returns the text of the token that will be returned from\n                  the next call to get_token()\n            throws\n                - bad_alloc\n                    If this exception is thrown then the call to this function will \n                    have no effect on *this.  However, some characters may have been \n                    read from the stream get_stream() and lost.\n        !*/\n\n        void set_identifier_token (\n            const std::string& head,\n            const std::string& body\n        );\n        /*!\n            requires\n                - head.find_first_of(\" \\r\\t\\n0123456789\") == std::string::npos\n                  (i.e. head doesn't contain any characters from the string\n                  \" \\r\\t\\n0123456789\").\n                - body.find_frst_of(\" \\r\\t\\n\") == std::string::npos\n                  (i.e. body doesn't contain any characters from the string \" \\r\\t\\n\").\n            ensures\n                - #get_identifier_head() == head\n                - #get_identifier_body() == body\n            throws\n                - std::bad_alloc\n                    If this exception is thrown then #*this is unusable \n                    until clear() is called and succeeds.\n        !*/\n\n        const std::string get_identifier_head (\n        ) const;\n        /*!\n            ensures\n                - returns a string containing the characters that can be the start\n                  of an IDENTIFIER token.\n            throws\n                - std::bad_alloc\n                    If this exception is thrown then the call to this function\n                    has no effect.\n        !*/\n\n        const std::string get_identifier_body (\n        ) const;\n        /*!\n            ensures\n                - returns a string containing the characters that can appear in the\n                  body of an IDENTIFIER token.\n            throws\n                - std::bad_alloc\n                    If this exception is thrown then the call to this function\n                    has no effect.\n        !*/\n\n        const std::string lowercase_letters (\n        ) const;\n        /*!\n            ensures\n                - returns \"abcdefghijklmnopqrstuvwxyz\"\n            throws\n                - std::bad_alloc\n                    If this exception is thrown then the call to this function\n                    has no effect.\n        !*/\n\n        const std::string uppercase_letters (\n        ) const;\n        /*!\n            ensures\n                - returns \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n            throws\n                - std::bad_alloc\n                    If this exception is thrown then the call to this function\n                    has no effect.\n        !*/\n\n        const std::string numbers (\n        ) const;\n        /*!\n            ensures\n                - returns \"0123456789\"\n            throws\n                - std::bad_alloc\n                    If this exception is thrown then the call to this function\n                    has no effect.\n        !*/\n\n        void swap (\n            tokenizer& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n    private:\n\n        // restricted functions\n        tokenizer(const tokenizer&);        // copy constructor\n        tokenizer& operator=(const tokenizer&);    // assignment operator\n\n    };    \n\n    inline void swap (\n        tokenizer& a, \n        tokenizer& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n}\n\n#endif // DLIB_TOKENIZER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/tokenizer/tokenizer_kernel_c.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TOKENIZER_KERNEl_C_\n#define DLIB_TOKENIZER_KERNEl_C_\n\n#include \"tokenizer_kernel_abstract.h\"\n#include \"../assert.h\"\n#include <string>\n#include <iostream>\n\nnamespace dlib\n{\n\n    template <\n        typename tokenizer\n        >\n    class tokenizer_kernel_c : public tokenizer\n    {\n        \n        public:\n            std::istream& get_stream (\n            ) const;\n\n            void get_token (\n                int& type,\n                std::string& token\n            );\n\n            void set_identifier_token (\n                const std::string& head,\n                const std::string& body\n            );\n\n            int peek_type (\n            ) const;\n\n            const std::string& peek_token (\n            ) const;\n    };\n\n    template <\n        typename tokenizer\n        >\n    inline void swap (\n        tokenizer_kernel_c<tokenizer>& a, \n        tokenizer_kernel_c<tokenizer>& b \n    ) { a.swap(b); }  \n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tokenizer\n        >\n    void tokenizer_kernel_c<tokenizer>::\n    set_identifier_token (\n        const std::string& head,\n        const std::string& body\n    ) \n    {\n        using namespace std;\n        // make sure requires clause is not broken\n        DLIB_CASSERT( head.find_first_of(\" \\r\\t\\n0123456789\") == string::npos &&\n                body.find_first_of(\" \\r\\t\\n\") == string::npos ,\n            \"\\tvoid tokenizer::set_identifier_token()\"\n            << \"\\n\\tyou can't define the IDENTIFIER token this way.\"\n            << \"\\n\\thead: \" << head\n            << \"\\n\\tbody: \" << body\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        tokenizer::set_identifier_token(head,body);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tokenizer\n        >\n    std::istream& tokenizer_kernel_c<tokenizer>::\n    get_stream (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tstd::istream& tokenizer::get_stream()\"\n            << \"\\n\\tyou must set a stream for this object before you can get it\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return tokenizer::get_stream();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tokenizer\n        >\n    int tokenizer_kernel_c<tokenizer>::\n    peek_type (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tint tokenizer::peek_type()\"\n            << \"\\n\\tyou must set a stream for this object before you peek at what it contains\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return tokenizer::peek_type();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tokenizer\n        >\n    const std::string& tokenizer_kernel_c<tokenizer>::\n    peek_token (\n    ) const\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tint tokenizer::peek_token()\"\n            << \"\\n\\tyou must set a stream for this object before you peek at what it contains\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        return tokenizer::peek_token();\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename tokenizer\n        >\n    void tokenizer_kernel_c<tokenizer>::\n    get_token (\n        int& type,\n        std::string& token\n    )\n    {\n        // make sure requires clause is not broken\n        DLIB_CASSERT( this->stream_is_set() == true,\n            \"\\tvoid tokenizer::get_token()\"\n            << \"\\n\\tyou must set a stream for this object before you can get tokens from it.\"\n            << \"\\n\\tthis: \" << this\n            );\n\n        // call the real function\n        tokenizer::get_token(type,token);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TOKENIZER_KERNEl_C_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/tokenizer.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TOKENIZEr_\n#define DLIB_TOKENIZEr_\n\n#include \"tokenizer/tokenizer_kernel_1.h\"\n#include \"tokenizer/tokenizer_kernel_c.h\"\n\n\nnamespace dlib\n{\n\n    class tokenizer\n    {\n        tokenizer() {}\n\n\n    public:\n        \n        //----------- kernels ---------------\n\n        // kernel_1a        \n        typedef     tokenizer_kernel_1\n                    kernel_1a;\n        typedef     tokenizer_kernel_c<kernel_1a>\n                    kernel_1a_c;\n          \n\n    };\n}\n\n#endif // DLIB_TOKENIZEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/tuple/tuple.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TUPLe_H_\n#define DLIB_TUPLe_H_\n\n#include \"../enable_if.h\"\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"tuple_abstract.h\"\n\n// ----------------------------------------------------------------------------------------\n\n#define DLIB_TUPLE_GLOBAL_HELPERS(N)                                                \\\n    DLIB_TUPLE_GH(N##0) DLIB_TUPLE_GH(N##1) DLIB_TUPLE_GH(N##2) DLIB_TUPLE_GH(N##3) \\\n    DLIB_TUPLE_GH(N##4) DLIB_TUPLE_GH(N##5) DLIB_TUPLE_GH(N##6) DLIB_TUPLE_GH(N##7) \n\n#define DLIB_TUPLE_GH(N)  DLIB_TUPLE_GET_INDEX(N)  DLIB_TUPLE_GET_ITEM(N) DLIB_TUPLE_GET_HELPER_STRUCT(N)\n\n#define DLIB_TUPLE_MEMBER_GET(N)                                                    \\\n    DLIB_TUPLE_MG(N##0) DLIB_TUPLE_MG(N##1) DLIB_TUPLE_MG(N##2) DLIB_TUPLE_MG(N##3) \\\n    DLIB_TUPLE_MG(N##4) DLIB_TUPLE_MG(N##5) DLIB_TUPLE_MG(N##6) DLIB_TUPLE_MG(N##7) \n\n#define DLIB_TUPLE_GET_INDEX(N) \\\n    template <class Q, class T> const typename enable_if<is_same_type<typename T::type##N,Q>, long>::type get_index (const T&) {return N;}\n\n#define DLIB_TUPLE_GET_ITEM(N) \\\n    template <class Q,class T> const typename enable_if<is_same_type<typename T::type##N,Q>,Q>::type& get_item_const (const T& t) {return t.v##N;}\\\n    template <class Q,class T>       typename enable_if<is_same_type<typename T::type##N,Q>,Q>::type& get_item (      T& t) {return t.v##N;}\n\n\n#define DLIB_TUPLE_GET_HELPER_STRUCT(N)                         \\\n    template <class T> struct get_helper<N,T>                   \\\n    {                                                           \\\n        typedef typename T::type##N type;                       \\\n        static const type& get(const T& t) { return t.v##N; }   \\\n        static       type& get( T& t) { return t.v##N; }        \\\n    };  \n\n#define DLIB_TUPLE_TEMPLATE_LIST(N) \\\n    class T##N##0 = null_type, class T##N##1 = null_type, class T##N##2 = null_type, class T##N##3 = null_type, \\\n    class T##N##4 = null_type, class T##N##5 = null_type, class T##N##6 = null_type, class T##N##7 = null_type\n\n#define DLIB_TUPLE_VARIABLE_LIST(N) \\\n    T##N##0 v##N##0; T##N##1 v##N##1; T##N##2 v##N##2; T##N##3 v##N##3; \\\n    T##N##4 v##N##4; T##N##5 v##N##5; T##N##6 v##N##6; T##N##7 v##N##7;  \\\n    typedef T##N##0 type##N##0; typedef T##N##1 type##N##1; typedef T##N##2 type##N##2;  \\\n    typedef T##N##3 type##N##3; typedef T##N##4 type##N##4; typedef T##N##5 type##N##5;  \\\n    typedef T##N##6 type##N##6; typedef T##N##7 type##N##7; \n\n// ----------------------------------------------------------------------------------------\n\nnamespace dlib\n{\n\n    struct null_type{};\n\n    // provide default serialization for the null_type\n    inline void serialize (\n        const null_type& ,\n        std::ostream&\n    ){}\n    inline void deserialize (\n        null_type& ,\n        std::istream&\n    ){}\n\n// ----------------------------------------------------------------------------------------\n\n    namespace tuple_helpers\n    {\n        template <long idx, class T> struct get_helper;\n\n        // use these preprocessor macros to declare all the global stuff used by the\n        // tuple member functions.\n        DLIB_TUPLE_GLOBAL_HELPERS(0)\n        DLIB_TUPLE_GLOBAL_HELPERS(01)\n        DLIB_TUPLE_GLOBAL_HELPERS(02)\n        DLIB_TUPLE_GLOBAL_HELPERS(03)\n\n    // ------------------------------------------------------------------------------------\n\n    // use templates to recursively enumerate everything in the tuple that isn't a null_type\n        template <\n            typename T,\n            typename F,\n            long i = 0,\n            typename enabled = void \n            >\n        struct for_each \n        {\n            static void go(\n                T& a, \n                F& funct\n            ) \n            {\n                funct(a.template get<i>());\n                for_each<T,F,i+1>::go(a,funct);\n            }\n\n            static bool go(\n                T& a, \n                F& funct,\n                long idx\n            ) \n            /*!\n                ensures\n                    - returns true if the function was applied to the given index\n                    - returns false if the index is invalid so the function wasn't \n                      applied to anything\n            !*/\n            {\n                if (idx == i)\n                {\n                    funct(a.template get<i>());\n                    return true;\n                }\n                else\n                {\n                    return for_each<T,F,i+1>::go(a,funct,idx);\n                }\n            }\n        };\n\n        template <bool v1, bool v2> struct template_or { const static bool value = true; };\n        template <> struct template_or<false,false> { const static bool value = false; };\n\n        // the base case of the recursion\n        template <\n            typename T,\n            typename F,\n            long i\n            >\n        struct for_each<T,F,i,typename enable_if<template_or<i == T::max_fields , is_same_type<null_type,typename T::template get_type<i>::type >::value> >::type >\n        { \n            static void go( T&, F& ) { } \n            static bool go( T&, F&, long ) { return false; } \n        };\n\n    // ------------------------------------------------------------------------------------\n\n    // use templates to recursively enumerate everything in the tuple that isn't a null_type\n        template <\n            typename T,\n            long i = 0,\n            typename enabled = void \n            >\n        struct tuple_swap \n        {\n            static void go(\n                T& a,\n                T& b \n            ) \n            {\n                exchange(a.template get<i>(), b.template get<i>());\n                tuple_swap<T,i+1>::go(a,b);\n            }\n        };\n\n        template <typename T, long i>\n        struct at_base_case\n        {\n\n        };\n\n        // the base case of the recursion\n        template <\n            typename T,\n            long i\n            >\n        struct tuple_swap<T,i,typename enable_if<template_or<i == T::max_fields, is_same_type<null_type,typename T::template get_type<i>::type >::value > >::type >\n        { static void go( T&, T& ) { } };\n\n    // ------------------------------------------------------------------------------------\n\n        struct tuple_serialize\n        {\n            tuple_serialize (std::ostream& out_) : out(out_){}\n            std::ostream& out;\n\n            template <typename T>\n            void operator() (\n                T& a\n            ) const { serialize(a,out); }\n        };\n\n    // ------------------------------------------------------------------------------------\n\n        struct tuple_deserialize\n        {\n            tuple_deserialize (std::istream& in_) : in(in_){}\n            std::istream& in; \n            template <typename T>\n            void operator() (\n                T& a\n            ) const { deserialize(a,in); }\n        };\n\n\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    // use these preprocessor macros to declare 4*8 template arguments (below we count them in octal)\n    template < \n        DLIB_TUPLE_TEMPLATE_LIST(0),  // args 00-07\n        DLIB_TUPLE_TEMPLATE_LIST(01), // args 010-017 \n        DLIB_TUPLE_TEMPLATE_LIST(02), // args 020-027\n        DLIB_TUPLE_TEMPLATE_LIST(03)  // args 030-037\n        >\n    class tuple\n    {\n    public:\n\n        // use these macros to declare 8*4 member variables\n        DLIB_TUPLE_VARIABLE_LIST(0)\n        DLIB_TUPLE_VARIABLE_LIST(01)\n        DLIB_TUPLE_VARIABLE_LIST(02)\n        DLIB_TUPLE_VARIABLE_LIST(03)\n\n        const static long max_fields = 4*8;\n\n        template < long idx > \n        struct get_type \n        { \n            typedef typename tuple_helpers::get_helper<idx,tuple>::type type; \n        };\n\n        template < long idx > \n        const typename tuple_helpers::get_helper<idx,tuple>::type& get (\n        ) const { return tuple_helpers::get_helper<idx,tuple>::get(*this); }\n\n        template < long idx >       \n        typename tuple_helpers::get_helper<idx,tuple>::type& get (\n        ) { return tuple_helpers::get_helper<idx,tuple>::get(*this); }\n\n        template < class Q>  \n        long index (\n        ) const { return tuple_helpers::get_index<Q>(*this); }\n\n        template <class Q>  \n        const Q& get (\n        ) const {return tuple_helpers::get_item_const<Q>(*this);}\n\n        template <class Q> \n        Q& get (\n        ) {return tuple_helpers::get_item<Q>(*this);}\n\n\n\n\n        template <typename F>\n        void for_index (\n            F& funct,\n            long idx\n        ) \n        { \n            // do this #ifdef stuff to avoid getting a warning about valid_idx not being\n            // used when ENABLE_ASSERTS isn't defined.\n#ifdef ENABLE_ASSERTS\n            const bool valid_idx = tuple_helpers::for_each<tuple,F>::go(*this,funct,idx); \n#else\n            tuple_helpers::for_each<tuple,F>::go(*this,funct,idx); \n#endif\n            DLIB_ASSERT(valid_idx,\n                \"\\tvoid tuple::for_index()\"\n                << \"\\n\\tYou have attempted to call for_index() with an index out of the valid range\"\n                << \"\\n\\tidx:  \" << idx \n                << \"\\n\\tthis: \" << this\n                );\n        }\n\n        template <typename F>\n        void for_index (\n            F& funct,\n            long idx\n        ) const \n        { \n            // do this #ifdef stuff to avoid getting a warning about valid_idx not being\n            // used when ENABLE_ASSERTS isn't defined.\n#ifdef ENABLE_ASSERTS\n            const bool valid_idx = tuple_helpers::for_each<const tuple,F>::go(*this,funct,idx); \n#else\n            tuple_helpers::for_each<const tuple,F>::go(*this,funct,idx); \n#endif\n            DLIB_ASSERT(valid_idx,\n                \"\\tvoid tuple::for_index()\"\n                << \"\\n\\tYou have attempted to call for_index() with an index out of the valid range\"\n                << \"\\n\\tidx:  \" << idx \n                << \"\\n\\tthis: \" << this\n                );\n        }\n\n        template <typename F>\n        void for_index (\n            const F& funct,\n            long idx\n        ) \n        { \n            // do this #ifdef stuff to avoid getting a warning about valid_idx not being\n            // used when ENABLE_ASSERTS isn't defined.\n#ifdef ENABLE_ASSERTS\n            const bool valid_idx = tuple_helpers::for_each<tuple,const F>::go(*this,funct,idx); \n#else\n            tuple_helpers::for_each<tuple,const F>::go(*this,funct,idx); \n#endif\n            DLIB_ASSERT(valid_idx,\n                \"\\tvoid tuple::for_index()\"\n                << \"\\n\\tYou have attempted to call for_index() with an index out of the valid range\"\n                << \"\\n\\tidx:  \" << idx \n                << \"\\n\\tthis: \" << this\n                );\n        }\n\n        template <typename F>\n        void for_index (\n            const F& funct,\n            long idx\n        ) const\n        { \n            // do this #ifdef stuff to avoid getting a warning about valid_idx not being\n            // used when ENABLE_ASSERTS isn't defined.\n#ifdef ENABLE_ASSERTS\n            const bool valid_idx = tuple_helpers::for_each<const tuple,const F>::go(*this,funct,idx); \n#else\n            tuple_helpers::for_each<const tuple,const F>::go(*this,funct,idx); \n#endif\n            DLIB_ASSERT(valid_idx,\n                \"\\tvoid tuple::for_index()\"\n                << \"\\n\\tYou have attempted to call for_index() with an index out of the valid range\"\n                << \"\\n\\tidx:  \" << idx \n                << \"\\n\\tthis: \" << this\n                );\n        }\n\n\n\n\n        template <typename F>\n        void for_each (\n            F& funct\n        ) { tuple_helpers::for_each<tuple,F>::go(*this,funct); }\n\n        template <typename F>\n        void for_each (\n            F& funct\n        ) const { tuple_helpers::for_each<const tuple,F>::go(*this,funct); }\n\n        template <typename F>\n        void for_each (\n            const F& funct\n        ) const { tuple_helpers::for_each<const tuple,const F>::go(*this,funct); }\n\n        template <typename F>\n        void for_each (\n            const F& funct\n        ) { tuple_helpers::for_each<tuple,const F>::go(*this,funct); }\n\n\n\n\n        inline friend void serialize (\n            tuple& item,\n            std::ostream& out\n        )\n        {\n            try\n            {\n                item.for_each(tuple_helpers::tuple_serialize(out));\n            }\n            catch (serialization_error& e)\n            {\n                throw serialization_error(e.info + \"\\n   while serializing an object of type dlib::tuple<>\");\n            }\n        }\n\n        inline friend void deserialize (\n            tuple& item,\n            std::istream& in \n        )\n        {\n            try\n            {\n                item.for_each(tuple_helpers::tuple_deserialize(in));\n            }\n            catch (serialization_error& e)\n            {\n                throw serialization_error(e.info + \"\\n   while deserializing an object of type dlib::tuple<>\");\n            }\n        }\n\n        inline friend void swap (\n            tuple& a,\n            tuple& b\n        )\n        {\n            tuple_helpers::tuple_swap<tuple>::go(a,b);\n        }\n\n        inline void swap(\n            tuple& item\n        ) { tuple_helpers::tuple_swap<tuple>::go(item,*this); }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TUPLe_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/tuple/tuple_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_TUPLe_ABSTRACT_H_\n#ifdef DLIB_TUPLe_ABSTRACT_H_\n\n#include \"../algs.h\"\n#include \"../serialize.h\"\n#include \"tuple_abstract.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct null_type\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object is the default type used as the default\n                template argument to the tuple object's template arguments. \n\n                Also note that it has no state associated with it.\n        !*/\n    };\n\n    inline void serialize (\n        const null_type& ,\n        std::ostream&\n    ){}\n    inline void deserialize (\n        null_type& ,\n        std::istream&\n    ){}\n    /*!\n        Serialization support is provided for null_type because in some cases \n        it makes your code a little more concise and easier to deal with\n        when using tuple objects and serialization.  The serialization literally\n        does nothing though.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template < \n        typename T0 = null_type, \n        typename T1 = null_type, \n        typename T2 = null_type, \n        typename T3 = null_type, \n           ... \n        typename T31 = null_type\n        >\n    class tuple\n    {\n        /*!\n            INITIAL VALUE\n                Each object in the tuple is default initialized by its own constructor.\n                The tuple object itself does not modify them or add any additional\n                state.\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a container of between 0 and 31 objects \n                where the objects contained are specified in the template\n                arguments.\n\n            EXAMPLE\n                We can declare a tuple that contains an int, a float, and a char like so:\n                tuple<int,float,char> ex;\n\n                Then we can access each of these by their index number.  The index number\n                is just the order each type has in the template argument list.  So we have:\n                ex.get<0>() = 5;     // assign the int the value 5 \n                ex.get<1>() = 3.14;  // assign the float the value 3.14\n                ex.get<2>() = 'c';   // assign the char the value 'c'\n\n                Also, since we only have one of each type in this example tuple we can\n                unambiguously access each field in the tuple by their types.  So for\n                example, we can use this syntax to access our fields:\n                ex.get<int>()   // returns 5\n                ex.get<float>() // returns 3.14\n                ex.get<char>()  // returns 'c'\n\n                We can also get the indexes of each of these fields like so:\n                ex.index<int>()   // returns 0 \n                ex.index<float>() // returns 1 \n                ex.index<char>()  // returns 2 \n        !*/\n\n    public:\n        // the maximum number of items this tuple template can contain\n        const static long max_fields = 32;\n\n        template <long index> \n        struct get_type \n        { \n            typedef (the type of the Tindex template argument) type;\n        };\n\n        template <long index> \n        const get_type<index>::type& get (\n        ) const;\n        /*!\n            requires\n                - 0 <= index <= 31\n            ensures\n                - returns a const reference to the index(th) object contained\n                  inside this tuple\n        !*/\n\n        template <long index>       \n        get_type<index>::type& get (\n        );\n        /*!\n            requires\n                - 0 <= index <= 31\n            ensures\n                - returns a non-const reference to the index(th) object contained\n                  inside this tuple\n        !*/\n\n        template <typename Q>  \n        const long index (\n        ) const;\n        /*!\n            requires\n                - Q is a type of object contained in this tuple and there is\n                  only one object of that type in the tuple\n            ensures\n                - returns the index of the object in this tuple with type Q\n        !*/\n\n        template <typename Q>  \n        const Q& get (\n        ) const;\n        /*!\n            requires\n                - Q is a type of object contained in this tuple and there is\n                  only one object of that type in the tuple\n            ensures\n                - returns a const reference to the object in this tuple\n                  with type Q \n        !*/\n\n        template <typename Q> \n        Q& get (\n        ); \n        /*!\n            requires\n                - Q is a type of object contained in this tuple and there is\n                  only one object of that type in the tuple\n            ensures\n                - returns a non-const reference to the object in this tuple\n                  with type Q \n        !*/\n\n        template <typename F>\n        void for_each (\n            F& funct\n        );\n        /*!\n            requires\n                - funct is a templated function object \n            ensures\n                - for each item X in this tuple that isn't a null_type object: \n                    - calls funct(X);\n        !*/\n\n        template <typename F>\n        void for_each (\n            F& funct\n        ) const;\n        /*!\n            requires\n                - funct is a templated function object \n            ensures\n                - for each item X in this tuple that isn't a null_type object: \n                    - calls funct(X);\n        !*/\n\n        template <typename F>\n        void for_each (\n            const F& funct\n        );\n        /*!\n            requires\n                - funct is a templated function object \n            ensures\n                - for each item X in this tuple that isn't a null_type object: \n                    - calls funct(X);\n        !*/\n\n        template <typename F>\n        void for_each (\n            const F& funct\n        ) const;\n        /*!\n            requires\n                - funct is a templated function object \n            ensures\n                - for each item X in this tuple that isn't a null_type object: \n                    - calls funct(X);\n        !*/\n\n        template <typename F>\n        void for_index (\n            F& funct,\n            long idx\n        );\n        /*!\n            requires\n                - funct is a templated function object \n                - 0 <= idx < max_fields && get_type<idx>::type != null_type\n                  (i.e. idx must be the index of a non-null_type object in this tuple)\n            ensures\n                - calls funct(this->get<idx>());\n        !*/\n\n        template <typename F>\n        void for_index (\n            F& funct,\n            long idx\n        ) const;\n        /*!\n            requires\n                - funct is a templated function object \n                - 0 <= idx < max_fields && get_type<idx>::type != null_type\n                  (i.e. idx must be the index of a non-null_type object in this tuple)\n            ensures\n                - calls funct(this->get<idx>());\n        !*/\n\n        template <typename F>\n        void for_index (\n            const F& funct,\n            long idx\n        );\n        /*!\n            requires\n                - funct is a templated function object \n                - 0 <= idx < max_fields && get_type<idx>::type != null_type\n                  (i.e. idx must be the index of a non-null_type object in this tuple)\n            ensures\n                - calls funct(this->get<idx>());\n        !*/\n\n        template <typename F>\n        void for_index (\n            const F& funct,\n            long idx\n        ) const;\n        /*!\n            requires\n                - funct is a templated function object \n                - 0 <= idx < max_fields && get_type<idx>::type != null_type\n                  (i.e. idx must be the index of a non-null_type object in this tuple)\n            ensures\n                - calls funct(this->get<idx>());\n        !*/\n\n        void swap (\n            tuple& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/ \n\n        // -------------------------------------------------\n        //        global functions for tuple objects\n        // -------------------------------------------------\n\n        friend void swap (\n            tuple& a, \n            tuple& b \n        ) { a.swap(b); }   \n        /*!\n            provides a global swap function\n        !*/\n\n        friend void serialize (\n            const tuple& item, \n            std::ostream& out \n        );   \n        /*!\n            provides serialization support \n        !*/\n\n        friend void deserialize (\n            tuple& item, \n            std::istream& in\n        );   \n        /*!\n            provides deserialization support \n        !*/\n\n    };\n    \n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TUPLe_ABSTRACT_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/tuple.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TUPLe_TOP_\n#define DLIB_TUPLe_TOP_ \n\n#include \"tuple/tuple.h\"\n\n#endif // DLIB_TUPLe_TOPh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/type_safe_union/type_safe_union_kernel.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TYPE_SAFE_UNIOn_h_ \n#define DLIB_TYPE_SAFE_UNIOn_h_\n\n#include \"type_safe_union_kernel_abstract.h\"\n#include \"../algs.h\"\n#include \"../noncopyable.h\"\n#include \"../serialize.h\"\n#include <new>\n#include <iostream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    struct _void{};\n    inline void serialize( const _void&, std::ostream&){}\n    inline void deserialize(  _void&, std::istream&){}\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T1,\n        typename T2 = _void,\n        typename T3 = _void,\n        typename T4 = _void,\n        typename T5 = _void, \n        typename T6 = _void,\n        typename T7 = _void,\n        typename T8 = _void,\n        typename T9 = _void,\n        typename T10 = _void,\n\n        typename T11 = _void,\n        typename T12 = _void,\n        typename T13 = _void,\n        typename T14 = _void,\n        typename T15 = _void,\n        typename T16 = _void,\n        typename T17 = _void,\n        typename T18 = _void,\n        typename T19 = _void,\n        typename T20 = _void\n        >\n    class type_safe_union : noncopyable\n    {\n        /*!\n            CONVENTION\n                - is_empty() ==  (type_identity == 0)\n                - contains<T>() == (type_identity == get_type_id<T>())\n                - mem.get() == the block of memory on the stack which is\n                  where objects in the union are stored\n        !*/\n\n    private:\n\n        template <typename T, typename U>\n        void invoke_on (\n            T& obj,\n            U& item\n        ) const\n        {\n            obj(item);\n        }\n\n        template <typename T>\n        void invoke_on (\n            T& ,\n            _void \n        ) const\n        {\n        }\n\n\n        const static size_t max_size = tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<\n                                       tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<tmax<sizeof(T1),\n                                                        sizeof(T2)>::value,\n                                                        sizeof(T3)>::value,\n                                                        sizeof(T4)>::value,\n                                                        sizeof(T5)>::value,\n                                                        sizeof(T6)>::value,\n                                                        sizeof(T7)>::value,\n                                                        sizeof(T8)>::value,\n                                                        sizeof(T9)>::value,\n                                                        sizeof(T10)>::value,\n                                                        sizeof(T11)>::value,\n                                                        sizeof(T12)>::value,\n                                                        sizeof(T13)>::value,\n                                                        sizeof(T14)>::value,\n                                                        sizeof(T15)>::value,\n                                                        sizeof(T16)>::value,\n                                                        sizeof(T17)>::value,\n                                                        sizeof(T18)>::value,\n                                                        sizeof(T19)>::value,\n                                                        sizeof(T20)>::value;\n\n        // --------------------------------------------\n\n        // member data\n        stack_based_memory_block<max_size> mem;\n        int type_identity;\n\n        // --------------------------------------------\n\n        template <typename T>\n        void validate_type()\n        {\n            // ERROR: You are trying to get a type of object that isn't\n            // representable by this type_safe_union.  I.e. The given\n            // type T isn't one of the ones given to this object's template\n            // arguments.\n            COMPILE_TIME_ASSERT(( is_same_type<T,T1>::value ||\n                                 is_same_type<T,T2>::value ||\n                                 is_same_type<T,T3>::value ||\n                                 is_same_type<T,T4>::value ||\n                                 is_same_type<T,T5>::value ||\n                                 is_same_type<T,T6>::value ||\n                                 is_same_type<T,T7>::value ||\n                                 is_same_type<T,T8>::value ||\n                                 is_same_type<T,T9>::value ||\n                                 is_same_type<T,T10>::value ||\n\n                                 is_same_type<T,T11>::value ||\n                                 is_same_type<T,T12>::value ||\n                                 is_same_type<T,T13>::value ||\n                                 is_same_type<T,T14>::value ||\n                                 is_same_type<T,T15>::value ||\n                                 is_same_type<T,T16>::value ||\n                                 is_same_type<T,T17>::value ||\n                                 is_same_type<T,T18>::value ||\n                                 is_same_type<T,T19>::value ||\n                                 is_same_type<T,T20>::value \n                                    ));\n\n        }\n\n\n        struct destruct_helper\n        {\n            template <typename T>\n            void operator() (T& item) const\n            {\n                item.~T();\n            }\n        };\n\n        void destruct (\n        ) \n        /*!\n            ensures\n                - #is_empty() == true\n        !*/\n        {\n            // destruct whatever is in this object\n            apply_to_contents(destruct_helper());\n\n            // mark this object as being empty\n            type_identity = 0;\n        }\n\n        template <typename T>\n        void construct (\n        )  \n        { \n            if (type_identity != get_type_id<T>())\n            {\n                destruct(); \n                new(mem.get()) T(); \n                type_identity = get_type_id<T>();\n            }\n        }\n\n        template <typename T>\n        void construct (\n            const T& item\n        )  \n        { \n            if (type_identity != get_type_id<T>())\n            {\n                destruct(); \n                new(mem.get()) T(item); \n                type_identity = get_type_id<T>();\n            }\n        }\n\n        template <typename T> \n        T& unchecked_get(\n        ) \n        /*!\n            requires\n                - contains<T>() == true\n            ensures\n                - returns a non-const reference to the T object\n        !*/\n        { \n            return *static_cast<T*>(mem.get()); \n        }\n\n        template <typename T> \n        const T& unchecked_get(\n        ) const\n        /*!\n            requires\n                - contains<T>() == true\n            ensures\n                - returns a const reference to the T object\n        !*/\n        { \n            return *static_cast<const T*>(mem.get()); \n        }\n\n        template <typename T>\n        void operator() (T& item) \n        /*\n            This function is used by the swap function of this class.  See that\n            function to see how this works.\n        */\n        {\n            exchange(get<T>(), item);\n        }\n\n    public:\n\n        typedef T1 type1;\n        typedef T2 type2;\n        typedef T3 type3;\n        typedef T4 type4;\n        typedef T5 type5;\n        typedef T6 type6;\n        typedef T7 type7;\n        typedef T8 type8;\n        typedef T9 type9;\n        typedef T10 type10;\n        typedef T11 type11;\n        typedef T12 type12;\n        typedef T13 type13;\n        typedef T14 type14;\n        typedef T15 type15;\n        typedef T16 type16;\n        typedef T17 type17;\n        typedef T18 type18;\n        typedef T19 type19;\n        typedef T20 type20;\n\n\n        type_safe_union() : type_identity(0) \n        { \n        }\n\n        template <typename T>\n        type_safe_union (\n            const T& item\n        ) : type_identity(0)\n        {\n            validate_type<T>();\n            construct(item);\n        }\n\n        ~type_safe_union()\n        {\n            destruct();\n        }\n\n        template <typename T>\n        static int get_type_id (\n        ) \n        {\n            if (is_same_type<T,T1>::value) return 1;\n            if (is_same_type<T,T2>::value) return 2;\n            if (is_same_type<T,T3>::value) return 3;\n            if (is_same_type<T,T4>::value) return 4;\n            if (is_same_type<T,T5>::value) return 5;\n\n            if (is_same_type<T,T6>::value) return 6;\n            if (is_same_type<T,T7>::value) return 7;\n            if (is_same_type<T,T8>::value) return 8;\n            if (is_same_type<T,T9>::value) return 9;\n            if (is_same_type<T,T10>::value) return 10;\n\n            if (is_same_type<T,T11>::value) return 11;\n            if (is_same_type<T,T12>::value) return 12;\n            if (is_same_type<T,T13>::value) return 13;\n            if (is_same_type<T,T14>::value) return 14;\n            if (is_same_type<T,T15>::value) return 15;\n\n            if (is_same_type<T,T16>::value) return 16;\n            if (is_same_type<T,T17>::value) return 17;\n            if (is_same_type<T,T18>::value) return 18;\n            if (is_same_type<T,T19>::value) return 19;\n            if (is_same_type<T,T20>::value) return 20;\n\n            // return a number that doesn't match any of the\n            // valid states of type_identity\n            return -1;\n        }\n\n        template <typename T>\n        bool contains (\n        ) const\n        {\n            return type_identity == get_type_id<T>();\n        }\n\n        bool is_empty (\n        ) const\n        {\n            return type_identity == 0;\n        }\n\n\n    public:\n\n        template <\n            typename t1, typename t2, typename t3, typename t4, typename t5,\n            typename t6, typename t7, typename t8, typename t9, typename t10,\n            typename t11, typename t12, typename t13, typename t14, typename t15,\n            typename t16, typename t17, typename t18, typename t19, typename t20\n            >\n        friend void serialize (\n            const type_safe_union<t1,t2,t3,t4,t5,t6,t7,t8,t9,t10, t11,t12,t13,t14,t15,t16,t17,t18,t19,t20>& item,\n            std::ostream& out\n        );\n\n\n        template <\n            typename T\n            >\n        void apply_to_contents (\n            T& obj\n        ) \n        {\n            switch (type_identity)\n            {\n                // do nothing because we are empty\n                case 0: break;\n\n                case 1: invoke_on(obj,unchecked_get<T1>());  break;\n                case 2: invoke_on(obj,unchecked_get<T2>());  break;\n                case 3: invoke_on(obj,unchecked_get<T3>());  break;\n                case 4: invoke_on(obj,unchecked_get<T4>());  break;\n                case 5: invoke_on(obj,unchecked_get<T5>());  break;\n\n                case 6: invoke_on(obj,unchecked_get<T6>());  break;\n                case 7: invoke_on(obj,unchecked_get<T7>());  break;\n                case 8: invoke_on(obj,unchecked_get<T8>());  break;\n                case 9: invoke_on(obj,unchecked_get<T9>());  break;\n                case 10: invoke_on(obj,unchecked_get<T10>());  break;\n\n                case 11: invoke_on(obj,unchecked_get<T11>());  break;\n                case 12: invoke_on(obj,unchecked_get<T12>());  break;\n                case 13: invoke_on(obj,unchecked_get<T13>());  break;\n                case 14: invoke_on(obj,unchecked_get<T14>());  break;\n                case 15: invoke_on(obj,unchecked_get<T15>());  break;\n\n                case 16: invoke_on(obj,unchecked_get<T16>());  break;\n                case 17: invoke_on(obj,unchecked_get<T17>());  break;\n                case 18: invoke_on(obj,unchecked_get<T18>());  break;\n                case 19: invoke_on(obj,unchecked_get<T19>());  break;\n                case 20: invoke_on(obj,unchecked_get<T20>());  break;\n            }\n        }\n\n        template <\n            typename T\n            >\n        void apply_to_contents (\n            const T& obj\n        ) \n        {\n            switch (type_identity)\n            {\n                // do nothing because we are empty\n                case 0: break;\n\n                case 1: invoke_on(obj,unchecked_get<T1>());  break;\n                case 2: invoke_on(obj,unchecked_get<T2>());  break;\n                case 3: invoke_on(obj,unchecked_get<T3>());  break;\n                case 4: invoke_on(obj,unchecked_get<T4>());  break;\n                case 5: invoke_on(obj,unchecked_get<T5>());  break;\n\n                case 6: invoke_on(obj,unchecked_get<T6>());  break;\n                case 7: invoke_on(obj,unchecked_get<T7>());  break;\n                case 8: invoke_on(obj,unchecked_get<T8>());  break;\n                case 9: invoke_on(obj,unchecked_get<T9>());  break;\n                case 10: invoke_on(obj,unchecked_get<T10>());  break;\n\n                case 11: invoke_on(obj,unchecked_get<T11>());  break;\n                case 12: invoke_on(obj,unchecked_get<T12>());  break;\n                case 13: invoke_on(obj,unchecked_get<T13>());  break;\n                case 14: invoke_on(obj,unchecked_get<T14>());  break;\n                case 15: invoke_on(obj,unchecked_get<T15>());  break;\n\n                case 16: invoke_on(obj,unchecked_get<T16>());  break;\n                case 17: invoke_on(obj,unchecked_get<T17>());  break;\n                case 18: invoke_on(obj,unchecked_get<T18>());  break;\n                case 19: invoke_on(obj,unchecked_get<T19>());  break;\n                case 20: invoke_on(obj,unchecked_get<T20>());  break;\n            }\n        }\n\n        template <\n            typename T\n            >\n        void apply_to_contents (\n            T& obj\n        ) const\n        {\n            switch (type_identity)\n            {\n                // do nothing because we are empty\n                case 0: break;\n\n                case 1: invoke_on(obj,unchecked_get<T1>());  break;\n                case 2: invoke_on(obj,unchecked_get<T2>());  break;\n                case 3: invoke_on(obj,unchecked_get<T3>());  break;\n                case 4: invoke_on(obj,unchecked_get<T4>());  break;\n                case 5: invoke_on(obj,unchecked_get<T5>());  break;\n\n                case 6: invoke_on(obj,unchecked_get<T6>());  break;\n                case 7: invoke_on(obj,unchecked_get<T7>());  break;\n                case 8: invoke_on(obj,unchecked_get<T8>());  break;\n                case 9: invoke_on(obj,unchecked_get<T9>());  break;\n                case 10: invoke_on(obj,unchecked_get<T10>());  break;\n\n                case 11: invoke_on(obj,unchecked_get<T11>());  break;\n                case 12: invoke_on(obj,unchecked_get<T12>());  break;\n                case 13: invoke_on(obj,unchecked_get<T13>());  break;\n                case 14: invoke_on(obj,unchecked_get<T14>());  break;\n                case 15: invoke_on(obj,unchecked_get<T15>());  break;\n\n                case 16: invoke_on(obj,unchecked_get<T16>());  break;\n                case 17: invoke_on(obj,unchecked_get<T17>());  break;\n                case 18: invoke_on(obj,unchecked_get<T18>());  break;\n                case 19: invoke_on(obj,unchecked_get<T19>());  break;\n                case 20: invoke_on(obj,unchecked_get<T20>());  break;\n            }\n        }\n\n        template <\n            typename T\n            >\n        void apply_to_contents (\n            const T& obj\n        ) const\n        {\n            switch (type_identity)\n            {\n                // do nothing because we are empty\n                case 0: break;\n\n                case 1: invoke_on(obj,unchecked_get<T1>());  break;\n                case 2: invoke_on(obj,unchecked_get<T2>());  break;\n                case 3: invoke_on(obj,unchecked_get<T3>());  break;\n                case 4: invoke_on(obj,unchecked_get<T4>());  break;\n                case 5: invoke_on(obj,unchecked_get<T5>());  break;\n\n                case 6: invoke_on(obj,unchecked_get<T6>());  break;\n                case 7: invoke_on(obj,unchecked_get<T7>());  break;\n                case 8: invoke_on(obj,unchecked_get<T8>());  break;\n                case 9: invoke_on(obj,unchecked_get<T9>());  break;\n                case 10: invoke_on(obj,unchecked_get<T10>());  break;\n\n                case 11: invoke_on(obj,unchecked_get<T11>());  break;\n                case 12: invoke_on(obj,unchecked_get<T12>());  break;\n                case 13: invoke_on(obj,unchecked_get<T13>());  break;\n                case 14: invoke_on(obj,unchecked_get<T14>());  break;\n                case 15: invoke_on(obj,unchecked_get<T15>());  break;\n\n                case 16: invoke_on(obj,unchecked_get<T16>());  break;\n                case 17: invoke_on(obj,unchecked_get<T17>());  break;\n                case 18: invoke_on(obj,unchecked_get<T18>());  break;\n                case 19: invoke_on(obj,unchecked_get<T19>());  break;\n                case 20: invoke_on(obj,unchecked_get<T20>());  break;\n            }\n        }\n\n        void swap (\n            type_safe_union& item\n        )\n        {\n            // if both *this and item contain the same type of thing\n            if (type_identity == item.type_identity)\n            {\n                // swap the things in this and item.  \n                item.apply_to_contents(*this);\n            }\n            else if (type_identity == 0)\n            {\n                // *this doesn't contain anything.  So swap this and item and\n                // then destruct item.\n                item.apply_to_contents(*this);\n                item.destruct();\n            }\n            else if (item.type_identity == 0)\n            {\n                // *this doesn't contain anything.  So swap this and item and\n                // then destruct this.\n                apply_to_contents(item);\n                destruct();\n            }\n            else\n            {\n                type_safe_union temp;\n                // swap *this into temp\n                apply_to_contents(temp);\n                // swap item into *this\n                item.apply_to_contents(*this);\n                // swap temp into item\n                temp.apply_to_contents(item);\n            }\n        }\n\n        template <typename T> \n        T& get(\n        ) \n        { \n            validate_type<T>();\n            construct<T>();  \n            return *static_cast<T*>(mem.get()); \n        }\n\n        template <typename T>\n        type_safe_union& operator= ( const T& item) { get<T>() = item; return *this; }\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T1, typename T2, typename T3, typename T4, typename T5,\n        typename T6, typename T7, typename T8, typename T9, typename T10,\n        typename T11, typename T12, typename T13, typename T14, typename T15,\n        typename T16, typename T17, typename T18, typename T19, typename T20\n        >\n    inline void swap (\n        type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10, T11,T12,T13,T14,T15,T16,T17,T18,T19,T20>& a, \n        type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10, T11,T12,T13,T14,T15,T16,T17,T18,T19,T20>& b \n    ) { a.swap(b); }   \n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename from, \n        typename T1, typename T2, typename T3, typename T4, typename T5,\n        typename T6, typename T7, typename T8, typename T9, typename T10,\n        typename T11, typename T12, typename T13, typename T14, typename T15,\n        typename T16, typename T17, typename T18, typename T19, typename T20\n        >\n    struct is_convertible<from,\n        type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10, T11,T12,T13,T14,T15,T16,T17,T18,T19,T20> >\n    {\n        const static bool value = is_convertible<from,T1>::value ||\n                                  is_convertible<from,T2>::value ||\n                                  is_convertible<from,T3>::value ||\n                                  is_convertible<from,T4>::value ||\n                                  is_convertible<from,T5>::value ||\n                                  is_convertible<from,T6>::value ||\n                                  is_convertible<from,T7>::value ||\n                                  is_convertible<from,T8>::value ||\n                                  is_convertible<from,T9>::value ||\n                                  is_convertible<from,T10>::value ||\n                                  is_convertible<from,T11>::value ||\n                                  is_convertible<from,T12>::value ||\n                                  is_convertible<from,T13>::value ||\n                                  is_convertible<from,T14>::value ||\n                                  is_convertible<from,T15>::value ||\n                                  is_convertible<from,T16>::value ||\n                                  is_convertible<from,T17>::value ||\n                                  is_convertible<from,T18>::value ||\n                                  is_convertible<from,T19>::value ||\n                                  is_convertible<from,T20>::value;\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    namespace impl_tsu\n    {\n        struct serialize_helper\n        {\n            /*\n                This is a function object to help us serialize type_safe_unions\n            */\n\n            std::ostream& out;\n            serialize_helper(std::ostream& out_): out(out_) {}\n            template <typename T>\n            void operator() (const T& item) const { serialize(item, out); } \n        };\n    }\n\n    template <\n        typename T1, typename T2, typename T3, typename T4, typename T5,\n        typename T6, typename T7, typename T8, typename T9, typename T10,\n        typename T11, typename T12, typename T13, typename T14, typename T15,\n        typename T16, typename T17, typename T18, typename T19, typename T20\n        >\n    void serialize (\n        const type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10, T11,T12,T13,T14,T15,T16,T17,T18,T19,T20>& item,\n        std::ostream& out\n    )\n    {\n        try\n        {\n            // save the type_identity\n            serialize(item.type_identity, out);\n            item.apply_to_contents(dlib::impl_tsu::serialize_helper(out));\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while serializing an object of type type_safe_union\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T1, typename T2, typename T3, typename T4, typename T5,\n        typename T6, typename T7, typename T8, typename T9, typename T10,\n        typename T11, typename T12, typename T13, typename T14, typename T15,\n        typename T16, typename T17, typename T18, typename T19, typename T20\n        >\n    void deserialize (\n        type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10, T11,T12,T13,T14,T15,T16,T17,T18,T19,T20>&  item,\n        std::istream& in\n    )\n    {\n        try\n        {\n            typedef type_safe_union<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10, T11,T12,T13,T14,T15,T16,T17,T18,T19,T20> tsu_type;\n\n            int type_identity;\n            deserialize(type_identity, in);\n            switch (type_identity)\n            {\n                // swap an empty type_safe_union into item since it should be in the empty state\n                case 0: tsu_type().swap(item); break;\n\n                case 1: deserialize(item.template get<T1>(), in);  break;\n                case 2: deserialize(item.template get<T2>(), in);  break;\n                case 3: deserialize(item.template get<T3>(), in);  break;\n                case 4: deserialize(item.template get<T4>(), in);  break;\n                case 5: deserialize(item.template get<T5>(), in);  break;\n\n                case 6: deserialize(item.template get<T6>(), in);  break;\n                case 7: deserialize(item.template get<T7>(), in);  break;\n                case 8: deserialize(item.template get<T8>(), in);  break;\n                case 9: deserialize(item.template get<T9>(), in);  break;\n                case 10: deserialize(item.template get<T10>(), in);  break;\n\n                case 11: deserialize(item.template get<T11>(), in);  break;\n                case 12: deserialize(item.template get<T12>(), in);  break;\n                case 13: deserialize(item.template get<T13>(), in);  break;\n                case 14: deserialize(item.template get<T14>(), in);  break;\n                case 15: deserialize(item.template get<T15>(), in);  break;\n\n                case 16: deserialize(item.template get<T16>(), in);  break;\n                case 17: deserialize(item.template get<T17>(), in);  break;\n                case 18: deserialize(item.template get<T18>(), in);  break;\n                case 19: deserialize(item.template get<T19>(), in);  break;\n                case 20: deserialize(item.template get<T20>(), in);  break;\n\n                default: throw serialization_error(\"Corrupt data detected while deserializing type_safe_union\");\n            }\n        }\n        catch (serialization_error& e)\n        {\n            throw serialization_error(e.info + \"\\n   while deserializing an object of type type_safe_union\");\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TYPE_SAFE_UNIOn_h_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/type_safe_union/type_safe_union_kernel_abstract.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_TYPE_SAFE_UNION_KERNEl_ABSTRACT_\n#ifdef DLIB_TYPE_SAFE_UNION_KERNEl_ABSTRACT_\n\n#include \"../algs.h\"\n#include \"../noncopyable.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T1,\n        typename T2 = _void,  // _void indicates parameter not used.\n        typename T3 = _void,\n        typename T4 = _void,\n        typename T5 = _void, \n        typename T6 = _void,\n        typename T7 = _void,\n        typename T8 = _void,\n        typename T9 = _void,\n        typename T10 = _void,\n        typename T11 = _void,\n        typename T12 = _void,\n        typename T13 = _void,\n        typename T14 = _void,\n        typename T15 = _void,\n        typename T16 = _void,\n        typename T17 = _void,\n        typename T18 = _void,\n        typename T19 = _void,\n        typename T20 = _void\n        >\n    class type_safe_union : noncopyable\n    {\n        /*!\n            REQUIREMENTS ON ALL TEMPLATE ARGUMENTS\n                All template arguments must be default constructable and have\n                a global swap.\n\n            INITIAL VALUE\n                - is_empty() == true\n                - contains<U>() == false, for all possible values of U\n\n            WHAT THIS OBJECT REPRESENTS \n                This object is a type safe analogue of the classic C union object. \n                The type_safe_union, unlike a union, can contain non-POD types such \n                as std::string.  \n\n                For example:\n                    union my_union\n                    {\n                        int a;\n                        std::string b;   // Error, std::string isn't a POD\n                    };\n\n                    type_safe_union<int,std::string> my_type_safe_union;  // No error\n        !*/\n\n    public:\n\n        typedef T1 type1;\n        typedef T2 type2;\n        typedef T3 type3;\n        typedef T4 type4;\n        typedef T5 type5;\n        typedef T6 type6;\n        typedef T7 type7;\n        typedef T8 type8;\n        typedef T9 type9;\n        typedef T10 type10;\n        typedef T11 type11;\n        typedef T12 type12;\n        typedef T13 type13;\n        typedef T14 type14;\n        typedef T15 type15;\n        typedef T16 type16;\n        typedef T17 type17;\n        typedef T18 type18;\n        typedef T19 type19;\n        typedef T20 type20;\n\n        type_safe_union(\n        );\n        /*!\n            ensures\n                - this object is properly initialized\n        !*/\n\n        template <typename T>\n        type_safe_union (\n            const T& item\n        );\n        /*!\n            requires\n                - T must be one of the types given to this object's template arguments\n            ensures\n                - this object is properly initialized\n                - #get<T>() == item\n                  (i.e. this object will contain a copy of item)\n        !*/\n\n        ~type_safe_union(\n        );\n        /*!\n            ensures\n                - all resources associated with this object have been freed\n        !*/\n\n        template <typename T>\n        static int get_type_id (\n        );\n        /*!\n           ensures\n              - if (T is the same type as one of the template arguments) then\n                 - returns a number indicating which template argument it is.\n                   (e.g. if T is the same type as T3 then this function returns 3)\n               - else\n                  - returns -1\n        !*/\n\n        template <typename T>\n        bool contains (\n        ) const;\n        /*!\n            ensures\n                - if (this type_safe_union currently contains an object of type T) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        bool is_empty (\n        ) const;\n        /*!\n            ensures\n                - if (this type_safe_union currently contains any object at all) then\n                    - returns true\n                - else\n                    - returns false\n        !*/\n\n        template <typename T>\n        void apply_to_contents (\n            T& obj\n        );\n        /*!\n            requires\n                - obj is a function object capable of operating on all the types contained\n                  in this type_safe_union.  I.e.  obj(this->get<U>()) must be a valid\n                  expression for all the possible U types.\n            ensures\n                - if (is_empty() == false) then\n                    - Let U denote the type of object currently contained in this type_safe_union\n                    - calls obj(this->get<U>())\n                    - The object returned by this->get<U>() will be non-const\n        !*/\n\n        template <typename T>\n        void apply_to_contents (\n            const T& obj\n        );\n        /*!\n            requires\n                - obj is a function object capable of operating on all the types contained\n                  in this type_safe_union.  I.e.  obj(this->get<U>()) must be a valid\n                  expression for all the possible U types.\n            ensures\n                - if (is_empty() == false) then\n                    - Let U denote the type of object currently contained in this type_safe_union\n                    - calls obj(this->get<U>())\n                    - The object returned by this->get<U>() will be non-const\n        !*/\n\n        template <typename T>\n        void apply_to_contents (\n            T& obj\n        ) const;\n        /*!\n            requires\n                - obj is a function object capable of operating on all the types contained\n                  in this type_safe_union.  I.e.  obj(this->get<U>()) must be a valid\n                  expression for all the possible U types.\n            ensures\n                - if (is_empty() == false) then\n                    - Let U denote the type of object currently contained in this type_safe_union\n                    - calls obj(this->get<U>())\n                    - The object returned by this->get<U>() will be const\n        !*/\n\n        template <typename T>\n        void apply_to_contents (\n            const T& obj\n        ) const;\n        /*!\n            requires\n                - obj is a function object capable of operating on all the types contained\n                  in this type_safe_union.  I.e.  obj(this->get<U>()) must be a valid\n                  expression for all the possible U types.\n            ensures\n                - if (is_empty() == false) then\n                    - Let U denote the type of object currently contained in this type_safe_union\n                    - calls obj(this->get<U>())\n                    - The object returned by this->get<U>() will be const\n        !*/\n\n        template <typename T> \n        T& get(\n        );\n        /*!\n            requires\n                - T must be one of the types given to this object's template arguments\n            ensures\n                - #is_empty() == false\n                - #contains<T>() == true\n                - if (contains<T>() == true)\n                    - returns a non-const reference to the object contained in this type_safe_union.\n                - else\n                    - Constructs an object of type T inside *this\n                    - Any previous object stored in this type_safe_union is destructed and its\n                      state is lost.\n                    - returns a non-const reference to the newly created T object.\n        !*/\n\n        template <typename T>\n        type_safe_union& operator= (\n            const T& item\n        );\n        /*!\n            requires\n                - T must be one of the types given to this object's template arguments\n            ensures\n                - #get<T>() == item\n                  (i.e. this object will contain a copy of item)\n                - returns *this\n        !*/\n\n        void swap (\n            type_safe_union& item\n        );\n        /*!\n            ensures\n                - swaps *this and item\n        !*/\n\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template < ...  >\n    inline void swap (\n        type_safe_union<...>& a, \n        type_safe_union<...>& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template < ... >\n    void serialize (\n        const type_safe_union<...>& item, \n        std::ostream& out \n    );   \n    /*!\n        provides serialization support \n\n        Note that type_safe_union objects are serialized as follows:\n         - if (item.is_empty()) then\n            - perform: serialize(0, out)\n         - else\n            - perform: serialize(item.get_type_id<type_of_object_in_item>(), out);\n                       serialize(item.get<type_of_object_in_item>(), out);\n    !*/\n\n    template < ...  >\n    void deserialize (\n        type_safe_union<...>& item, \n        std::istream& in\n    );   \n    /*!\n        provides deserialization support \n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_TYPE_SAFE_UNION_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/type_safe_union.h",
    "content": "// Copyright (C) 2009  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_TYPE_SAFE_UNIOn_TOP_\n#define DLIB_TYPE_SAFE_UNIOn_TOP_ \n\n#include \"type_safe_union/type_safe_union_kernel.h\"\n\n#endif // DLIB_TYPE_SAFE_UNIOn_TOP_\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/uintn.h",
    "content": "// Copyright (C) 2005  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n\n#ifndef DLIB_UINtn_\n#define DLIB_UINtn_\n\n#include \"assert.h\"\n\nnamespace dlib\n{\n\n    /*!\n        uint64 is a typedef for an unsigned integer that is exactly 64 bits wide.\n        uint32 is a typedef for an unsigned integer that is exactly 32 bits wide.\n        uint16 is a typedef for an unsigned integer that is exactly 16 bits wide.\n        uint8  is a typedef for an unsigned integer that is exactly 8  bits wide.\n\n        int64 is a typedef for an integer that is exactly 64 bits wide.\n        int32 is a typedef for an integer that is exactly 32 bits wide.\n        int16 is a typedef for an integer that is exactly 16 bits wide.\n        int8  is a typedef for an integer that is exactly 8  bits wide.\n    !*/\n\n\n#ifdef __GNUC__\n    typedef unsigned long long uint64;\n    typedef long long int64;\n#elif defined(__BORLANDC__)\n    typedef unsigned __int64 uint64;\n    typedef __int64 int64;\n#elif defined(_MSC_VER)\n    typedef unsigned __int64 uint64;\n    typedef __int64 int64;\n#else\n    typedef unsigned long long uint64;\n    typedef long long int64;\n#endif\n\n    typedef unsigned short uint16;\n    typedef unsigned int   uint32;\n    typedef unsigned char  uint8;\n\n    typedef short int16;\n    typedef int   int32;\n    typedef char  int8;\n\n\n    // make sure these types have the right sizes on this platform\n    COMPILE_TIME_ASSERT(sizeof(uint8)  == 1);\n    COMPILE_TIME_ASSERT(sizeof(uint16) == 2);\n    COMPILE_TIME_ASSERT(sizeof(uint32) == 4);\n    COMPILE_TIME_ASSERT(sizeof(uint64) == 8);\n\n    COMPILE_TIME_ASSERT(sizeof(int8)  == 1);\n    COMPILE_TIME_ASSERT(sizeof(int16) == 2);\n    COMPILE_TIME_ASSERT(sizeof(int32) == 4);\n    COMPILE_TIME_ASSERT(sizeof(int64) == 8);\n\n\n\n    template <typename T, size_t s = sizeof(T)>\n    struct unsigned_type;\n    template <typename T>\n    struct unsigned_type<T,1> { typedef uint8 type; };\n    template <typename T>\n    struct unsigned_type<T,2> { typedef uint16 type; };\n    template <typename T>\n    struct unsigned_type<T,4> { typedef uint32 type; };\n    template <typename T>\n    struct unsigned_type<T,8> { typedef uint64 type; };\n    /*!\n        ensures\n            - sizeof(unsigned_type<T>::type) == sizeof(T)\n            - unsigned_type<T>::type is an unsigned integral type\n    !*/\n\n    template <typename T, typename U>\n    T zero_extend_cast(\n        const U val\n    )\n    /*!\n        requires\n            - U and T are integral types\n        ensures\n            - let ut be a typedef for unsigned_type<U>::type\n            - return static_cast<T>(static_cast<ut>(val));\n    !*/\n    {\n        typedef typename unsigned_type<U>::type ut;\n        return static_cast<T>(static_cast<ut>(val));\n    }\n\n}\n\n#endif // DLIB_UINtn_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/unicode/unicode.cpp",
    "content": "// Copyright (C) 2008 Keita Mochizuki, Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_UNICODe_CPp_\n#define DLIB_UNICODe_CPp_\n#include \"unicode.h\"\n#include <cwchar>\n#include \"../string.h\"\n#include <vector>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    static const unichar SURROGATE_FIRST_TOP = 0xD800;\n    static const unichar SURROGATE_SECOND_TOP = 0xDC00;\n    static const unichar SURROGATE_CLEARING_MASK = 0x03FF;\n    static const unichar SURROGATE_TOP = SURROGATE_FIRST_TOP;\n    static const unichar SURROGATE_END = 0xE000;\n    static const unichar SMP_TOP = 0x10000;\n    static const int VALID_BITS = 10;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T> bool is_surrogate(T ch)\n    {\n        return (zero_extend_cast<unichar>(ch) >= SURROGATE_TOP && \n                zero_extend_cast<unichar>(ch) < SURROGATE_END);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T> unichar surrogate_pair_to_unichar(T first, T second)\n    {\n        return ((first & SURROGATE_CLEARING_MASK) << VALID_BITS) | ((second & SURROGATE_CLEARING_MASK) + SMP_TOP);\n    }\n    //110110 0000000000\n    //110111 0000000000\n\n// ----------------------------------------------------------------------------------------\n\n    void unichar_to_surrogate_pair(unichar input, unichar &first, unichar &second)\n    {\n        first = ((input - SMP_TOP) >> VALID_BITS) | SURROGATE_FIRST_TOP;\n        second = (input & SURROGATE_CLEARING_MASK) | SURROGATE_SECOND_TOP;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <int N> void wstr2ustring_t(const wchar_t *src, size_t src_len, ustring &dest);\n\n    template <> void wstr2ustring_t<4>(const wchar_t *src, size_t , ustring &dest)\n    {\n        dest.assign((const unichar *)(src));\n    }\n\n    template <> void wstr2ustring_t<2>(const wchar_t *src, size_t src_len, ustring &dest)\n    {\n        size_t wlen = 0;\n        for (size_t i = 0; i < src_len; i++)\n        {\n            is_surrogate(src[i]) ? i++, wlen++ : wlen++;\n        }\n        dest.resize(wlen);\n        for (size_t i = 0, ii = 0; ii < src_len; ++i)\n        {\n            if (is_surrogate(src[ii]))\n            {\n                dest[i] = surrogate_pair_to_unichar(src[ii], src[ii+1]);\n                ii += 2;\n            }else\n            {\n                dest[i] = zero_extend_cast<unichar>(src[ii]);\n                ii++;\n            }\n        }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const ustring convert_wstring_to_utf32(const std::wstring &src)\n    {\n        ustring dest;\n        wstr2ustring_t<sizeof(wchar_t)>(src.c_str(), src.size(), dest);\n        return dest;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <int N> struct ustring2wstr\n    {\n    };\n\n    // for the environment of sizeof(wchar_t) == 2 (i.e. Win32)\n    template <> struct ustring2wstr<2>\n    {\n        wchar_t *wstr;\n        size_t wlen;\n        ustring2wstr(const ustring &src){\n            wlen = 0;\n            for (size_t i = 0; i < src.length(); ++i)\n            {\n                if (src[i] < SMP_TOP) wlen++;\n                else wlen += 2;\n            }\n            wstr = new wchar_t[wlen+1];\n            wstr[wlen] = L'\\0';\n\n            size_t wi = 0;\n            for (size_t i = 0; i < src.length(); ++i)\n            {\n                if (src[i] < SMP_TOP)\n                {\n                    wstr[wi++] = (wchar_t)src[i];\n                }else\n                {\n                    unichar high, low;\n                    unichar_to_surrogate_pair(src[i], high, low);\n                    wstr[wi++] = (wchar_t)high;\n                    wstr[wi++] = (wchar_t)low;\n                }\n            }\n        }\n        ~ustring2wstr()\n        {\n            delete[] wstr;\n        }\n    };\n\n    // for the environment of sizeof(wchar_t) == 4 (i.e. Unix gcc)\n    template <> struct ustring2wstr<4>\n    {\n        const wchar_t *wstr;\n        size_t wlen;\n        ustring2wstr(const ustring &src){\n            wstr = (const wchar_t *)(src.c_str());\n            wlen = src.size();\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    const std::wstring convert_utf32_to_wstring(const ustring &src)\n    {\n        ustring2wstr<sizeof(wchar_t)> conv(src);\n        std::wstring dest(conv.wstr);\n        return dest;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::wstring convert_mbstring_to_wstring(const std::string &src)\n    {\n        std::vector<wchar_t> wstr(src.length()+5);\n        std::mbstowcs(&wstr[0], src.c_str(), src.length()+1);\n        return std::wstring(&wstr[0]);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string convert_wstring_to_mbstring(const std::wstring &src)\n    {\n        using namespace std;\n        std::string str;\n        str.resize((src.length() + 1) * MB_CUR_MAX);\n        wcstombs(&str[0], src.c_str(), str.size());\n        return std::string(&str[0]);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_UNICODe_CPp_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/unicode/unicode.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net), and Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_UNICODe_H_\n#define DLIB_UNICODe_H_\n\n#include \"../uintn.h\"\n#include \"../algs.h\"\n#include \"unicode_abstract.h\"\n#include <string>\n#include <cstring>\n\n#include <fstream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    typedef uint32 unichar;\n\n#if defined(__GNUC__) && __GNUC__ < 4 && __GNUC_MINOR__ < 4\n    struct unichar_traits \n    {\n        typedef dlib::unichar    char_type;\n        typedef dlib::unichar    int_type;\n        typedef std::streamoff   off_type;\n        typedef std::streampos   pos_type;\n        typedef std::mbstate_t   state_type;\n\n        static void assign(char_type& c1, const char_type& c2) { c1 = c2; }\n        static bool eq(const char_type& c1, const char_type& c2) { return c1 == c2; }\n        static bool lt(const char_type& c1, const char_type& c2) { return c1 < c2; }\n        static int compare(const char_type* s1, const char_type* s2, size_t n) \n        {\n            for (size_t i = 0; i < n; ++i)\n            {\n                if (s1[i] < s2[i])\n                    return -1;\n                else if (s1[i] > s2[i])\n                    return 1;\n            }\n            return 0;\n        }\n\n        static size_t length(const char_type* s)\n        {\n            size_t i = 0;\n            while (s[i] != 0)\n                ++i;\n            return i;\n        }\n\n        static const char_type* find(const char_type* s, size_t n,\n                                     const char_type& a)\n        {\n            for (size_t i = 0; i < n; ++i)\n            {\n                if (s[i] == a)\n                {\n                    return s+i;\n                }\n            }\n            return 0;\n        }\n\n        static char_type* move(char_type* s1, const char_type* s2, size_t n)\n        {\n            return static_cast<char_type*>(std::memmove(s1, s2, sizeof(char_type)*n));\n        }\n\n        static char_type* copy(char_type* s1, const char_type* s2, size_t n)\n        {\n            for (size_t i = 0; i < n; ++i)\n                s1[i] = s2[i];\n\n            return s1;\n        }\n\n        static char_type* assign(char_type* s, size_t n, char_type a)\n        {\n            for (size_t i = 0; i < n; ++i)\n                s[i] = a;\n\n            return s;\n        }\n\n\n        static int_type not_eof(const int_type& c) \n        {\n            if (!eq_int_type(c,eof()))\n                return to_int_type(c);\n            else\n                return 0;\n        }\n\n        static char_type to_char_type(const int_type& c) { return static_cast<char_type>(c); }\n        static int_type to_int_type(const char_type& c) { return zero_extend_cast<int_type>(c); }\n\n        static bool eq_int_type(const int_type& c1, const int_type& c2) { return c1 == c2; }\n\n        static int_type eof() { return static_cast<int_type>(EOF); }\n    };\n\n    typedef std::basic_string<unichar, unichar_traits> ustring;\n#else\n    typedef std::basic_string<unichar> ustring;\n#endif\n\n// ----------------------------------------------------------------------------------------\n\n    namespace unicode_helpers\n    {\n\n        template <\n            typename charT\n            >\n        int u8_to_u32(\n            charT& result,\n            std::istream& in\n        )\n        /*!\n            ensures\n                - if (there just wasn't any more data and we hit EOF) then\n                    - returns 0\n                - else if (we decoded another character without error) then\n                    - #result == the decoded character\n                    - returns the number of bytes consumed to make this character\n                - else\n                    - some error occurred\n                    - returns -1\n        !*/\n        {\n            int val = in.get();\n            if (val == EOF)\n                return 0;\n\n            unichar ch[4];\n            ch[0] = zero_extend_cast<unichar>(val);\n            if ( ch[0] < 0x80 )\n            {\n                result = static_cast<charT>(ch[0]);\n                return 1;\n            }\n            if ( ( ch[0] & ~0x3F ) == 0x80 )\n            {\n                // invalid leading byte\n                return -1;\n            }\n            if ( ( ch[0] & ~0x1F ) == 0xC0 )\n            {\n                val = in.get();\n                if ( val == EOF )\n                    return -1;\n                \n                ch[1] = zero_extend_cast<unichar>(val); \n                if ( ( ch[1] & ~0x3F ) != 0x80 )\n                    return -1; // invalid tail\n                if ( ( ch[0] & ~0x01 ) == 0xC0 )\n                    return -1; // overlong form\n                ch[0] &= 0x1F;\n                ch[1] &= 0x3F;\n                result = static_cast<charT>(( ch[0] << 6 ) | ch[1]);\n                return 2;\n            }\n            if ( ( ch[0] & ~0x0F ) == 0xE0 )\n            {\n                for ( unsigned n = 1;n < 3;n++ )\n                {\n                    val = in.get();\n                    if ( val == EOF )\n                        return -1;\n                    ch[n] = zero_extend_cast<unichar>(val); \n                    if ( ( ch[n] & ~0x3F ) != 0x80 )\n                        return -1; // invalid tail\n                    ch[n] &= 0x3F;\n                }\n                ch[0] &= 0x0F;\n                result = static_cast<charT>(( ch[0] << 12 ) | ( ch[1] << 6 ) | ch[2]);\n                if ( result < 0x0800 )\n                    return -1; // overlong form\n                if ( result >= 0xD800 && result < 0xE000 )\n                    return -1; // invalid character (UTF-16 surrogate pairs)\n                if ( result >= 0xFDD0 && result <= 0xFDEF )\n                    return -1; // noncharacter\n                if ( result >= 0xFFFE )\n                    return -1; // noncharacter\n                return 3;\n            }\n            if ( ( ch[0] & ~0x07 ) == 0xF0 )\n            {\n                for ( unsigned n = 1;n < 4;n++ )\n                {\n                    val = in.get();\n                    if ( val == EOF )\n                        return -1;\n                    ch[n] = zero_extend_cast<unichar>(val); \n                    if ( ( ch[n] & ~0x3F ) != 0x80 )\n                        return -1; // invalid tail\n                    ch[n] &= 0x3F;\n                }\n                if ( ( ch[0] ^ 0xF6 ) < 4 )\n                    return -1;\n                ch[0] &= 0x07;\n                result  = static_cast<charT>(( ch[0] << 18 ) | ( ch[1] << 12 ) | ( ch[2] << 6 ) | ch[3]);\n                if ( result < 0x10000 )\n                    return -1; // overlong form\n                if ( (result & 0xFFFF) >= 0xFFFE )\n                    return -1; // noncharacter\n                return 4;\n            }\n            return -1;\n        }\n\n    // ------------------------------------------------------------------------------------\n\n        template <typename charT>\n        class basic_utf8_streambuf : public std::basic_streambuf<charT>\n        {\n        public:\n            basic_utf8_streambuf (\n                std::ifstream& fin_\n            ) :\n                fin(fin_)\n            {\n                this->setg(in_buffer+max_putback, \n                     in_buffer+max_putback, \n                     in_buffer+max_putback);\n            }\n\n        protected:\n\n            typedef typename std::basic_streambuf<charT>::int_type int_type;\n\n            // input functions\n            int_type underflow( \n            )\n            {\n                if (this->gptr() < this->egptr())\n                {\n                    return zero_extend_cast<int_type>(*this->gptr());\n                }\n\n                int num_put_back = static_cast<int>(this->gptr() - this->eback());\n                if (num_put_back > max_putback)\n                {\n                    num_put_back = max_putback;\n                }\n\n                // copy the putback characters into the putback end of the in_buffer\n                std::memmove(in_buffer+(max_putback-num_put_back), this->gptr()-num_put_back, num_put_back);\n\n\n                // fill the buffer with characters\n                int n = in_buffer_size-max_putback;\n                int i;\n                for (i = 0; i < n; ++i)\n                {\n                    charT ch;\n                    if (unicode_helpers::u8_to_u32(ch,fin) > 0)\n                    {\n                        (in_buffer+max_putback)[i] = ch;\n                    }\n                    else\n                    {\n                        break;\n                    }\n                }\n\n                if (i == 0)\n                {\n                    // an error occurred or we hit EOF\n                    return EOF;\n                }\n\n                // reset in_buffer pointers\n                this->setg (in_buffer+(max_putback-num_put_back),\n                      in_buffer+max_putback,\n                      in_buffer+max_putback+i);\n\n                return zero_extend_cast<int_type>(*this->gptr());\n            }\n\n        private:\n            std::ifstream& fin;\n            static const int max_putback = 4;\n            static const int in_buffer_size = 10;\n            charT in_buffer[in_buffer_size];\n        };\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    bool is_combining_char(\n        const T ch_\n    )\n    {\n        const unichar ch = zero_extend_cast<unichar>(ch_);\n        if ( ch < 0x300 ) return false;\n        if ( ch < 0x370 ) return true;\n\n        if ( ch < 0x800 )\n        {\n            if ( ch < 0x483 )return false;if ( ch < 0x48A )return true;\n\n            if ( ch < 0x591 )return false;if ( ch < 0x5D0 )\n            {\n                if ( ch == 0x5C0 )return false;\n                if ( ch == 0x5C3 )return false;\n                if ( ch == 0x5C6 )return false;\n                return true;\n            }\n            if ( ch < 0x610 )return false;if ( ch < 0x616 )return true;\n            if ( ch < 0x64B )return false;if ( ch < 0x660 )return true;\n\n            if ( ch == 0x670 )return true;\n\n            if ( ch < 0x6D6 )return false;if ( ch < 0x6EE )\n            {\n                if ( ch == 0x6DD )return false;\n                if ( ch == 0x6E5 )return false;\n                if ( ch == 0x6E6 )return false;\n                if ( ch == 0x6E9 )return false;\n                return true;\n            }\n            if ( ch == 0x711 )return true;\n\n            if ( ch < 0x730 )return false;if ( ch < 0x74B )return true;\n            if ( ch < 0x7A6 )return false;if ( ch < 0x7B1 )return true;\n            if ( ch < 0x7EB )return false;if ( ch < 0x7F4 )return true;\n            return false;\n        }\n        if ( ch < 0xA00 )\n        {\n            if ( ch < 0x901 )return false;if ( ch < 0x904 )return true;\n            if ( ch < 0x93C )return false;if ( ch < 0x955 )\n            {\n                if ( ch == 0x93D )return false;\n                if ( ch == 0x950 )return false;\n                return true;\n            }\n            if ( ch < 0x962 )return false;if ( ch < 0x964 )return true;\n            if ( ch < 0x981 )return false;if ( ch < 0x984 )return true;\n            if ( ch < 0x9BC )return false;if ( ch < 0x9D8 )\n            {\n                if ( ch == 0x9BD )return false;\n                if ( ch == 0x9CE )return false;\n                return true;\n            }\n            if ( ch < 0x9E2 )return false;if ( ch < 0x9E4 )return true;\n            return false;\n        }\n        if ( ch < 0xC00 )\n        {\n            if ( ch < 0xA01 )return false;if ( ch < 0xA04 )return true;\n            if ( ch < 0xA3C )return false;if ( ch < 0xA4E )return true;\n            if ( ch < 0xA70 )return false;if ( ch < 0xA72 )return true;\n            if ( ch < 0xA81 )return false;if ( ch < 0xA84 )return true;\n            if ( ch < 0xABC )return false;if ( ch < 0xACE )\n            {\n                if ( ch == 0xABD )return false;\n                return true;\n            }\n            if ( ch < 0xAE2 )return false;if ( ch < 0xAE4 )return true;\n            if ( ch < 0xB01 )return false;if ( ch < 0xB04 )return true;\n            if ( ch < 0xB3C )return false;if ( ch < 0xB58 )\n            {\n                if ( ch == 0xB3D )return false;\n                return true;\n            }\n            if ( ch == 0xB82 )return true;\n\n            if ( ch < 0xBBE )return false;if ( ch < 0xBD8 )return true;\n\n            if ( ch == 0xBF4 )return true;\n            if ( ch == 0xBF8 )return true;\n            return false;\n        }\n        if(ch < 0xE00)\n        {\n            if ( ch < 0xC01 )return false;if ( ch < 0xC04 )return true;\n            if ( ch < 0xC3E )return false;if ( ch < 0xC57 )return true;\n            if ( ch < 0xC82 )return false;if ( ch < 0xC84 )return true;\n            if ( ch < 0xCBC )return false;if ( ch < 0xCD7 )\n            {\n                if ( ch == 0xCBD )return false;\n                return true;\n            }\n            if ( ch < 0xCE2 )return false;if ( ch < 0xCE4 )return true;\n            if ( ch < 0xD02 )return false;if ( ch < 0xD04 )return true;\n            if ( ch < 0xD3E )return false;if ( ch < 0xD58 )return true;\n            if ( ch < 0xD82 )return false;if ( ch < 0xD84 )return true;\n            if ( ch < 0xDCA )return false;if ( ch < 0xDF4 )return true;\n            return false;\n        }\n        if(ch < 0x1000)\n        {\n            if ( ch == 0xE31 )return true;\n\n            if ( ch < 0xE34 )return false;if ( ch < 0xE3B )return true;\n            if ( ch < 0xE47 )return false;if ( ch < 0xE4F )return true;\n\n            if ( ch == 0xEB1 )return true;\n\n            if ( ch < 0xEB4 )return false;if ( ch < 0xEBD )return true;\n            if ( ch < 0xEC8 )return false;if ( ch < 0xECE )return true;\n            if ( ch < 0xF18 )return false;if ( ch < 0xF1A )return true;\n\n            if ( ch == 0xF35 )return true;\n            if ( ch == 0xF37 )return true;\n            if ( ch == 0xF39 )return true;\n\n            if ( ch < 0xF3E )return false;if ( ch < 0xF40 )return true;\n            if ( ch < 0xF71 )return false;if ( ch < 0xF88 )\n            {\n                if ( ch == 0xF85 )return false;\n                return true;\n            }\n            if ( ch < 0xF90 )return false;if ( ch < 0xFBD )return true;\n\n            if ( ch == 0xFC6 )return true;\n            return false;\n        }\n        if ( ch < 0x1800 )\n        {\n            if ( ch < 0x102C )return false;if ( ch < 0x1040 )return true;\n            if ( ch < 0x1056 )return false;if ( ch < 0x105A )return true;\n\n            if ( ch == 0x135F )return true;\n\n            if ( ch < 0x1712 )return false;if ( ch < 0x1715 )return true;\n            if ( ch < 0x1732 )return false;if ( ch < 0x1735 )return true;\n            if ( ch < 0x1752 )return false;if ( ch < 0x1754 )return true;\n            if ( ch < 0x1772 )return false;if ( ch < 0x1774 )return true;\n            if ( ch < 0x17B6 )return false;if ( ch < 0x17D4 )return true;\n\n            if ( ch == 0x17DD )return true;\n            return false;\n        }\n        if(ch < 0x2000)\n        {\n            if ( ch < 0x180B )return false;if ( ch < 0x180E )return true;\n\n            if ( ch == 0x18A9 )return true;\n\n            if ( ch < 0x1920 )return false;if ( ch < 0x193C )return true;\n            if ( ch < 0x19B0 )return false;if ( ch < 0x19C1 )return true;\n            if ( ch < 0x19C8 )return false;if ( ch < 0x19CA )return true;\n            if ( ch < 0x1A17 )return false;if ( ch < 0x1A1C )return true;\n            if ( ch < 0x1B00 )return false;if ( ch < 0x1B05 )return true;\n            if ( ch < 0x1B34 )return false;if ( ch < 0x1B45 )return true;\n            if ( ch < 0x1B6B )return false;if ( ch < 0x1B74 )return true;\n            if ( ch < 0x1DC0 )return false;if ( ch < 0x1E00 )return true;\n            return false;\n        }\n        if ( ch < 0x20D0 )return false;if ( ch < 0x2100 )return true;\n        if ( ch < 0x302A )return false;if ( ch < 0x3030 )return true;\n        if ( ch < 0x3099 )return false;if ( ch < 0x309B )return true;\n\n        if ( ch == 0xA802 )return true;\n        if ( ch == 0xA806 )return true;\n        if ( ch == 0xA80B )return true;\n\n        if ( ch < 0xA823 )return false;if ( ch < 0xA828 )return true;\n\n        if ( ch == 0xFB1E )return true;\n\n        if ( ch < 0xFE00 )return false;if ( ch < 0xFE10 )return true;\n        if ( ch < 0xFE20 )return false;if ( ch < 0xFE30 )return true;\n        if ( ch < 0x10A01 )return false;if ( ch < 0x10A10 )return true;\n        if ( ch < 0x10A38 )return false;if ( ch < 0x10A40 )return true;\n        if ( ch < 0x1D165 )return false;if ( ch < 0x1D16A )return true;\n        if ( ch < 0x1D16D )return false;if ( ch < 0x1D173 )return true;\n        if ( ch < 0x1D17B )return false;if ( ch < 0x1D183 )return true;\n        if ( ch < 0x1D185 )return false;if ( ch < 0x1D18C )return true;\n        if ( ch < 0x1D1AA )return false;if ( ch < 0x1D1AE )return true;\n        if ( ch < 0x1D242 )return false;if ( ch < 0x1D245 )return true;\n        if ( ch < 0xE0100 )return false;if ( ch < 0xE01F0 )return true;\n        return false;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    class invalid_utf8_error : public error\n    {\n    public:\n        invalid_utf8_error():error(EUTF8_TO_UTF32) {}\n    };\n\n    inline const ustring convert_utf8_to_utf32 (\n        const std::string& str\n    )\n    {\n        using namespace unicode_helpers;\n        ustring temp;\n        std::istringstream sin(str);\n\n        temp.reserve(str.size());\n\n        int status;\n        unichar ch;\n        while ( (status = u8_to_u32(ch,sin)) > 0)\n            temp.push_back(ch);\n\n        if (status < 0)\n            throw invalid_utf8_error();\n\n        return temp;\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    bool is_surrogate(unichar ch);\n\n    unichar surrogate_pair_to_unichar(unichar first, unichar second);\n\n    void unichar_to_surrogate_pair(unichar unicode, unichar &first, unichar &second);\n\n\n    const ustring convert_wstring_to_utf32 (\n        const std::wstring &wstr\n    );\n\n    const std::wstring convert_utf32_to_wstring (\n        const ustring &src\n    );\n\n    const std::wstring convert_mbstring_to_wstring (\n        const std::string &src\n    );\n\n    const std::string convert_wstring_to_mbstring(\n        const std::wstring &src\n    );\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename charT>\n    class basic_utf8_ifstream : public std::basic_istream<charT>\n    {\n    public:\n\n        basic_utf8_ifstream (\n        ) : std::basic_istream<charT>(&buf), buf(fin) {}\n\n        basic_utf8_ifstream (\n            const char* file_name,\n            std::ios_base::openmode mode = std::ios::in \n        ) : \n            std::basic_istream<charT>(&buf),\n            buf(fin)\n        {\n            fin.open(file_name,mode);\n            // make this have the same error state as fin\n            this->clear(fin.rdstate());\n        }\n\n        basic_utf8_ifstream (\n            const std::string& file_name,\n            std::ios_base::openmode mode = std::ios::in \n        ) : \n            std::basic_istream<charT>(&buf),\n            buf(fin)\n        {\n            fin.open(file_name.c_str(),mode);\n            // make this have the same error state as fin\n            this->clear(fin.rdstate());\n        }\n\n        void open(\n            const std::string& file_name,\n            std::ios_base::openmode mode = std::ios::in \n        )\n        {\n            open(file_name.c_str(),mode);\n        }\n\n        void open (\n            const char* file_name,\n            std::ios_base::openmode mode = std::ios::in \n        )\n        {\n            fin.close();\n            fin.clear();\n            fin.open(file_name,mode);\n            // make this have the same error state as fin\n            this->clear(fin.rdstate());\n        }\n\n        void close (\n        )\n        {\n            fin.close();\n            // make this have the same error state as fin\n            this->clear(fin.rdstate());\n        }\n\n    private:\n\n        std::ifstream fin;\n        unicode_helpers::basic_utf8_streambuf<charT> buf;\n    };\n\n    typedef basic_utf8_ifstream<unichar> utf8_uifstream;\n    typedef basic_utf8_ifstream<wchar_t> utf8_wifstream;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#ifdef NO_MAKEFILE\n#include \"unicode.cpp\"\n#endif\n\n#endif // DLIB_UNICODe_H_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/unicode/unicode_abstract.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net), and Nils Labugt\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_UNICODe_ABSTRACT_H_\n#ifdef DLIB_UNICODe_ABSTRACT_H_\n\n#include \"../uintn.h\"\n#include \"../error.h\"\n#include <string>\n#include <fstream>\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    // a typedef for an unsigned 32bit integer to hold our UNICODE characters \n    typedef uint32 unichar;\n\n    // a typedef for a string object to hold our UNICODE strings\n    typedef std::basic_string<unichar> ustring;\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    bool is_combining_char(\n        const T ch_\n    );\n    /*!\n        ensures\n            - if (ch_ is a unicode combining character) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n    bool is_surrogate(\n        unichar ch\n    );\n    /*!\n        ensures\n            - if (ch is a unicode surrogate character) then\n                - returns true\n            - else\n                - returns false\n    !*/\n\n    unichar surrogate_pair_to_unichar(\n        unichar first, \n        unichar second\n    );\n    /*!\n        requires\n            - 0xD800 <= first < 0xDC00\n            - 0xDC00 <= second < 0xE000\n            - is_surrogate(first) == true\n            - is_surrogate(second) == true\n        ensures\n            - converts two surrogates into one unicode character\n    !*/\n\n    void unichar_to_surrogate_pair(\n        unichar ch, \n        unichar& first, \n        unichar& second\n    );\n    /*!\n        requires\n            - ch >= 0x10000 (i.e. is not in Basic Multilingual Plane) \n        ensures\n            - surrogate_pair_to_unichar(#first,#second) == ch\n              (i.e. converts ch into two surrogate characters)\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    class invalid_utf8_error : public error\n    {\n    public:\n        invalid_utf8_error():error(EUTF8_TO_UTF32) {}\n    };\n\n    const ustring convert_utf8_to_utf32 (\n        const std::string& str\n    );\n    /*!\n        ensures\n            - if (str is a valid UTF-8 encoded string) then\n                - returns a copy of str that has been converted into a\n                  unichar string\n            - else\n                - throws invalid_utf8_error\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const ustring convert_wstring_to_utf32 (\n        const std::wstring &wstr\n    );\n    /*!\n        requires\n            - wstr is a valid UTF-16 string when sizeof(wchar_t) == 2\n            - wstr is a valid UTF-32 string when sizeof(wchar_t) == 4\n        ensures\n            - converts wstr into UTF-32 string\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const std::wstring convert_utf32_to_wstring (\n        const ustring &str\n    );\n    /*!\n        requires\n            - str is a valid UTF-32 encoded string\n        ensures\n            - converts str into wstring whose encoding is UTF-16 when sizeof(wchar_t) == 2\n            - converts str into wstring whose encoding is UTF-32 when sizeof(wchar_t) == 4\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const std::wstring convert_mbstring_to_wstring (\n        const std::string &str\n    );\n    /*!\n        requires\n            - str is a valid multibyte string whose encoding is same as current locale setting\n        ensures\n            - converts str into wstring whose encoding is UTF-16 when sizeof(wchar_t) == 2\n            - converts str into wstring whose encoding is UTF-32 when sizeof(wchar_t) == 4\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    const std::string convert_wstring_to_mbstring (\n        const std::wstring &src\n    );\n    /*!\n        requires\n            - str is a valid wide character string string whose encoding is same as current \n              locale setting\n        ensures\n            - returns a multibyte encoded version of the given string\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename charT\n        >\n    class basic_utf8_ifstream : public std::basic_istream<charT>\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This object represents an input file stream much like the\n                normal std::ifstream except that it knows how to read UTF-8 \n                data.  So when you read characters out of this stream it will\n                automatically convert them from the UTF-8 multibyte encoding\n                into a fixed width wide character encoding.\n        !*/\n\n    public:\n\n        basic_utf8_ifstream (\n        );\n        /*!\n            ensures\n                - constructs an input stream that isn't yet associated with\n                  a file.\n        !*/\n\n        basic_utf8_ifstream (\n            const char* file_name,\n            std::ios_base::openmode mode = std::ios::in \n        );\n        /*!\n            ensures\n                - tries to open the given file for reading by this stream\n                - mode is interpreted exactly the same was as the open mode\n                  argument used by std::ifstream.\n        !*/\n\n        basic_utf8_ifstream (\n            const std::string& file_name,\n            std::ios_base::openmode mode = std::ios::in \n        );\n        /*!\n            ensures\n                - tries to open the given file for reading by this stream\n                - mode is interpreted exactly the same was as the open mode\n                  argument used by std::ifstream.\n        !*/\n\n        void open(\n            const std::string& file_name,\n            std::ios_base::openmode mode = std::ios::in \n        );\n        /*!\n            ensures\n                - tries to open the given file for reading by this stream\n                - mode is interpreted exactly the same was as the open mode\n                  argument used by std::ifstream.\n        !*/\n\n        void open (\n            const char* file_name,\n            std::ios_base::openmode mode = std::ios::in \n        );\n        /*!\n            ensures\n                - tries to open the given file for reading by this stream\n                - mode is interpreted exactly the same was as the open mode\n                  argument used by std::ifstream.\n        !*/\n\n        void close (\n        );\n        /*!\n            ensures\n                - any file opened by this stream has been closed\n        !*/\n    };\n\n    typedef basic_utf8_ifstream<unichar> utf8_uifstream;\n    typedef basic_utf8_ifstream<wchar_t> utf8_wifstream;\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_UNICODe_ABSTRACT_H_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/unicode.h",
    "content": "// Copyright (C) 2007  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_UNICODe_TOP_\n#define DLIB_UNICODe_TOP_ \n\n#include \"unicode/unicode.h\"\n\n#endif // DLIB_UNICODe_TOP_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/unordered_pair.h",
    "content": "// Copyright (C) 2010  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_UNORDERED_PAiR_Hh_\n#define DLIB_UNORDERED_PAiR_Hh_\n\n#include \"serialize.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n\n    template <\n        typename T\n        >\n    struct unordered_pair \n    {\n        /*!\n            REQUIREMENTS ON T\n                T must be default constructable, copyable, and comparable using\n                operator < and ==\n\n            WHAT THIS OBJECT REPRESENTS\n                This object is very similar to the std::pair struct except unordered_pair \n                is only capable of representing an unordered set of two items rather than \n                an ordered list of two items like std::pair.  \n\n                This is best illustrated by example.  Suppose we have the following\n                five variables:\n                    std::pair<int,int> p1(1, 5), p2(5,1);\n                    unordered_pair<int> up1(1,5), up2(5,1), up3(6,7);\n\n                Then it is the case that:   \n                    up1 == up2\n                    up1 != up3\n                    p1 != p2\n\n               So the unordered_pair doesn't care about the order of the arguments.\n               In this case, up1 and up2 are both equivalent.\n\n        !*/\n\n        typedef T type;\n        typedef T first_type;\n        typedef T second_type;\n\n        const T first;\n        const T second;\n\n        unordered_pair() : first(), second() \n        /*!\n            ensures\n                - #first and #second are default initialized\n        !*/ {}\n\n        unordered_pair(\n            const T& a, \n            const T& b\n        ) :\n            first( a < b ? a : b),\n            second(a < b ? b : a)\n        /*!\n            ensures\n                - #first <= #second\n                - #first and #second contain copies of the items a and b.\n        !*/ {}\n\n        template <typename U>\n        unordered_pair (\n            const unordered_pair <U>& p\n        ) :\n            first(p.first),\n            second(p.second)\n        /*!\n            ensures\n                - #*this is a copy of p\n        !*/ {}\n\n        unordered_pair& operator= (\n            const unordered_pair& item\n        ) \n        /*!\n            ensures\n                - #*this == item\n        !*/\n        {\n            const_cast<T&>(first) = item.first;\n            const_cast<T&>(second) = item.second;\n            return *this;\n        }\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    bool operator==(const unordered_pair<T>& a, const unordered_pair <T>& b)\n    {\n        return a.first == b.first && a.second == b.second;\n    }\n\n    template <typename T>\n    bool operator!=(const unordered_pair<T>& a, const unordered_pair <T>& b)\n    {\n        return !(a == b);\n    }\n\n    template <typename T>\n    bool operator<(const unordered_pair<T>& a, const unordered_pair<T>& b)\n    {\n        return (a.first < b.first || (!(b.first < a.first) && a.second < b.second));\n    }\n\n    template <typename T>\n    bool operator>(const unordered_pair<T>& a, const unordered_pair <T>& b)\n    {\n        return b < a;\n    }\n\n    template <typename T>\n    bool operator<=(const unordered_pair<T>& a, const unordered_pair <T>& b)\n    {\n        return !(b < a);\n    }\n\n    template <typename T>\n    bool operator>=(const unordered_pair<T>& a, const unordered_pair <T>& b)\n    {\n        return !(a < b);\n    }\n\n    template <typename T>\n    unordered_pair<T> make_unordered_pair (const T& a, const T& b)\n    {\n        return unordered_pair<T>(a,b);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    template <typename T>\n    void serialize (\n        const unordered_pair<T>& item,\n        std::ostream& out\n    )\n    {\n        try\n        { \n            serialize(item.first,out); \n            serialize(item.second,out); \n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while serializing object of type unordered_pair\"); }\n    }\n\n    template <typename T>\n    void deserialize (\n        unordered_pair<T>& item,\n        std::istream& in \n    )\n    {\n        try\n        { \n            T a, b;\n            deserialize(a,in); \n            deserialize(b,in); \n            item = make_unordered_pair(a,b);\n        }\n        catch (serialization_error& e)\n        { throw serialization_error(e.info + \"\\n   while deserializing object of type unordered_pair\"); }\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_UNORDERED_PAiR_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/vectorstream/vectorstream.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_VECTORStREAM_Hh_\n#define DLIB_VECTORStREAM_Hh_\n\n#include \"vectorstream_abstract.h\"\n\n#include <cstring>\n#include <iostream>\n#include <streambuf>\n#include <vector>\n#include <cstdio>\n#include \"../algs.h\"\n\n\n#ifdef _MSC_VER\n// Disable the warning about inheriting from std::iostream 'via dominance' since this warning is a warning about\n// visual studio conforming to the standard and is ignorable.  See http://connect.microsoft.com/VisualStudio/feedback/details/733720/inheriting-from-std-fstream-produces-c4250-warning\n// for further details if interested.\n#pragma warning(disable : 4250)\n#endif // _MSC_VER\n\nnamespace dlib\n{\n    class vectorstream : public std::iostream\n    {\n        class vector_streambuf : public std::streambuf\n        {\n            typedef std::vector<char>::size_type size_type;\n            size_type read_pos; // buffer[read_pos] == next byte to read from buffer\n        public:\n            std::vector<char>& buffer;\n\n            vector_streambuf(\n                std::vector<char>& buffer_\n            ) :\n                read_pos(0),\n                buffer(buffer_) \n            {}\n\n\n            void seekg(size_type pos)\n            {\n                read_pos = pos;\n            }\n\n            // ------------------------ OUTPUT FUNCTIONS ------------------------\n\n            int_type overflow ( int_type c)\n            {\n                if (c != EOF) buffer.push_back(static_cast<char>(c));\n                return c;\n            }\n\n            std::streamsize xsputn ( const char* s, std::streamsize num)\n            {\n                buffer.insert(buffer.end(), s, s+num);\n                return num;\n            }\n\n            // ------------------------ INPUT FUNCTIONS ------------------------\n\n            int_type underflow( \n            )\n            {\n                if (read_pos < buffer.size())\n                    return static_cast<unsigned char>(buffer[read_pos]);\n                else\n                    return EOF;\n            }\n\n            int_type uflow( \n            )\n            {   \n                if (read_pos < buffer.size())\n                    return static_cast<unsigned char>(buffer[read_pos++]);\n                else\n                    return EOF;\n            }\n\n            int_type pbackfail(\n                int_type c\n            )\n            {  \n                // if they are trying to push back a character that they didn't read last\n                // that is an error\n                const unsigned long prev = read_pos-1;\n                if (c != EOF && prev < buffer.size() && \n                    c != static_cast<unsigned char>(buffer[prev]))\n                {\n                    return EOF;\n                }\n\n                read_pos = prev;\n                return 1;\n            }\n\n            std::streamsize xsgetn (\n                char* s, \n                std::streamsize n\n            )\n            { \n                if (read_pos < buffer.size())\n                {\n                    const size_type num = std::min<size_type>(n, buffer.size()-read_pos);\n                    std::memcpy(s, &buffer[read_pos], num);\n                    read_pos += num;\n                    return num;\n                }\n                return 0;\n            }\n\n        };\n\n    public:\n\n        vectorstream (\n            std::vector<char>& buffer\n        ) :\n            std::iostream(&buf),\n            buf(buffer)\n        {}\n\n        std::istream& seekg (\n            std::streampos pos\n        )\n        {\n            buf.seekg(pos);\n            return *this;\n        }\n\n    private:\n        vector_streambuf buf;\n    };\n}\n\n#endif // DLIB_VECTORStREAM_Hh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/vectorstream/vectorstream_abstract.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_VECTORStREAM_ABSTRACT_Hh_\n#ifdef DLIB_VECTORStREAM_ABSTRACT_Hh_\n\n#include <iostream>\n#include <vector>\n\nnamespace dlib\n{\n    class vectorstream : public std::iostream\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is an iostream object that reads and writes from an in-memory buffer.\n                It functions very much the same way as the std::stringstream object.\n                However, while the std::stringstream holds its buffer internally and it can\n                only be accessed by copying it out, the vectorstream uses an external\n                std::vector<char> as its buffer.  That is, it holds a reference to an\n                external vector and does not contain any internal buffers of its own.  \n\n                This object is useful as a slightly more efficient alternative to the\n                std::stringstream since you can avoid the overhead of copying buffer\n                contents to and from the stream.  This is particularly useful when used as\n                a source or target for serialization routines.\n        !*/\n\n    public:\n\n        vectorstream (\n            std::vector<char>& buffer\n        );\n        /*!\n            ensures\n                - This object will use the given vector as its read/write buffer.  That is:\n                    - Any data written to this stream will be appended to the given buffer\n                    - Any data read from this stream is read from the given buffer,\n                      starting with buffer[0], then buffer[1], and so on.  Just like\n                      std::stringstream, writes to the stream do not move the position of\n                      the next byte that will be read from the buffer.\n                - This constructor does not copy the buffer.  Only a reference to it will\n                  be used.  Therefore, any time data is written to this stream it will\n                  immediately show up in the buffer.\n        !*/\n\n        std::istream& seekg (\n            std::streampos pos\n        );\n        /*!\n            ensures\n                - The next read from this object will read from the position buffer[pos],\n                  where buffer is the std::vector given to this object's constructor.  Note\n                  that if pos >= buffer.size() then the next read will simply return EOF.\n                - returns *this\n        !*/\n\n    };\n}\n\n#endif // DLIB_VECTORStREAM_ABSTRACT_Hh_\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/vectorstream.h",
    "content": "// Copyright (C) 2012  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_VECTORSTReAMh_\n#define DLIB_VECTORSTReAMh_\n\n#include \"vectorstream/vectorstream.h\"\n\n\n#endif // DLIB_VECTORSTReAMh_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/windows_magic.h",
    "content": "// Copyright (C) 2006  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_WINDOWS_MAGIc_ \n#define DLIB_WINDOWS_MAGIc_ \n\n#include \"platform.h\"\n\n#ifdef WIN32\n\n// This file contains all the magical #defines you have to setup  before you\n// include the windows header files.  \n\n#ifndef NOMINMAX\n#define NOMINMAX // prevent windows from messing with std::min and std::max\n#endif\n\n// Prevent windows from #defining IN or OUT\n#ifndef _NO_W32_PSEUDO_MODIFIERS\n#define _NO_W32_PSEUDO_MODIFIERS\n#endif\n\n// now just for good measure undefine min and max if they are defined\n#ifdef min\n#undef min\n#endif\n\n#ifdef max \n#undef max \n#endif\n\n#ifdef NO_MAKEFILE\n// only define this if all the cpp files are going to be sucked into the headers \n// because otherwise we don't need it since everything is isolated in the sockets\n// cpp file and this declaration for _WINSOCKAPI_ appears there also.\n#ifndef _WINSOCKAPI_\n#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */\n#endif\n#endif\n\n// This is something stupid you have to do to make visual studio include the right\n// stuff.  I don't really know what the deal is with this.\n//#if _WIN32_WINNT < 0x0500\n//#undef _WIN32_WINNT\n//#define _WIN32_WINNT 0x0500\n//#endif\n\n#endif // WIN32\n\n#endif // DLIB_WINDOWS_MAGIc_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/xml_parser/xml_parser_kernel_1.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_XML_PARSER_KERNEl_1_\n#define DLIB_XML_PARSER_KERNEl_1_\n\n\n#include \"xml_parser_kernel_abstract.h\"\n\n#include <sstream>\n#include <string>\n#include <fstream>\n#include <iostream>\n#include \"xml_parser_kernel_interfaces.h\"\n#include \"../algs.h\"\n#include <cstdio>\n#include \"../map.h\"\n#include \"../stack.h\"\n#include \"../sequence.h\"\n#include \"../memory_manager.h\"\n\nnamespace dlib\n{\n\n    class xml_parser\n    {\n        typedef dlib::map<std::string,std::string,memory_manager<char>::kernel_2a>::kernel_1b map;\n        typedef dlib::stack<std::string,memory_manager<char>::kernel_2a>::kernel_1a stack;\n        typedef sequence<document_handler*>::kernel_2a seq_dh;\n        typedef sequence<error_handler*>::kernel_2a seq_eh;\n\n         /*!                \n            INITIAL VALUE\n                dh_list.size() == 0\n                eh_list.size() == 0\n\n            CONVENTION\n                dh_list == a sequence of pointers to all the document_handlers that\n                           have been added to the xml_parser\n                eh_list == a sequence of pointers to all the error_handlers that\n                           have been added to the xml_parser\n\n                map is used to implement the attribute_list interface\n                stack is used just inside the parse function\n                seq_dh is used to make the dh_list member variable\n                seq_eh is used to make the eh_list member variable\n        !*/\n\n\n       \n        public:\n\n            // These typedefs are here for backwards compatibily with previous versions of\n            // dlib.\n            typedef xml_parser kernel_1a;\n            typedef xml_parser kernel_1a_c;\n\n            xml_parser(\n            ) {}\n\n            virtual ~xml_parser(\n            ){}\n\n            inline void clear(\n            );\n\n            inline void parse (\n                std::istream& in\n            );\n  \n            inline void add_document_handler (\n                document_handler& item\n            );\n\n            inline void add_error_handler (\n                error_handler& item\n            );\n\n\n            inline void swap (\n                xml_parser& item\n            );\n   \n\n        private:\n    \n            // -----------------------------------\n\n            // attribute_list interface implementation\n            class attrib_list : public attribute_list\n            {\n            public:\n                // the list of attribute name/value pairs\n                map list;\n\n                bool is_in_list (\n                    const std::string& key\n                ) const\n                {\n                    return list.is_in_domain(key);\n                }\n\n                const std::string& operator[] (\n                    const std::string& key\n                ) const\n                {\n                    return list[key];\n                }\n\n                bool at_start (\n                ) const { return list.at_start(); }\n\n                void reset (\n                ) const { return list.reset(); }\n\n                bool current_element_valid (\n                ) const { return list.current_element_valid(); }\n\n                const type& element (\n                ) const { return list.element(); }\n\n                type& element (\n                ) { return list.element(); }\n\n                bool move_next (\n                ) const { return list.move_next(); }\n\n                unsigned long size (\n                ) const { return list.size(); }\n            };\n\n            \n            // -----------------------------------\n\n            enum token_type\n            {\n                element_start, // the first tag of an element\n                element_end,   // the last tag of an element\n                empty_element, // the singular tag of an empty element\n                pi,            // processing instruction\n                chars,         // the non-markup data between tags\n                chars_cdata,   // the data from a CDATA section\n                eof,           // this token is returned when we reach the end of input\n                error,         // this token indicates that the tokenizer couldn't\n                               // determine which category the next token fits into\n                dtd,           // this token is for an entire dtd \n                comment        // this is a token for comments\n            };\n            /*\n                notes about the tokens:\n                    the tokenizer guarantees that the following tokens to not \n                    contain the '<' character except as the first character of the token\n                    element_start, element_end, empty_element, and pi.  they also only\n                    contain the '>' characer as their last character.\n\n                    it is also guaranteed that pi is at least of the form <??>.  that\n                    is to say that it always always begins with <? and ends with ?>.\n\n                    it is also guaranteed that all markup tokens will begin with the '<'\n                    character and end with the '>'. there won't be any leading or\n                    trailing whitespaces.   this whitespace is considered a chars token.\n            */\n\n\n            // private member functions\n            inline void get_next_token(\n                std::istream& in,\n                std::string& token_text,\n                int& token_kind,\n                unsigned long& line_number\n            );\n            /*!\n                ensures\n                    gets the next token from in and puts it in token_text and\n                    token_kind == the kind of the token found and\n                    line_number is incremented every time a '\\n' is encountered and\n                    entity references are translated into the characters they represent\n                    only for chars tokens\n            !*/\n\n            inline int parse_element (\n                const std::string& token,\n                std::string& name,\n                attrib_list& atts\n            );\n            /*!\n                requires\n                    token is a token of kind start_element or empty_element\n                ensures\n                    gets the element name and puts it into the string name and\n                    parses out the attributes and puts them into the attribute_list atts\n\n                    return 0 upon success or\n                    returns -1 if it failed to parse token\n            !*/\n\n            inline int parse_pi (\n                const std::string& token,\n                std::string& target,\n                std::string& data\n            );\n            /*!\n                requires\n                    token is a token of kind pi\n                ensures\n                    the target from the processing instruction is put into target and\n                    the data from the processing instruction is put into data\n\n                    return 0 upon success or\n                    returns -1 if it failed to parse token\n            !*/\n\n            inline int parse_element_end (\n                const std::string& token,\n                std::string& name\n            );\n            /*!\n                requires\n                    token is a token of kind element_end\n                ensures\n                    the name from the ending element tag is put into the string name\n                    \n                    return 0 upon success or\n                    returns -1 if it failed to parse token\n            !*/\n\n            inline int change_entity (\n                std::istream& in\n            );\n            /*!\n                ensures\n                    performs the following translations and returns the new character\n                                amp;   -> &\n                                lt;    -> <\n                                gt;    -> >\n                                apos;  -> '\n                                quot;  -> \"\n\n                    or returns -1 if we hit an undefined entity reference or EOF. \n                            (i.e. it was not one of the entities listed above)\n\n            !*/\n\n            // -----------------------------------\n\n            // private member data\n            seq_dh dh_list;\n            seq_eh eh_list;\n\n            // -----------------------------------\n\n            // restricted functions: assignment and copy construction\n            xml_parser(xml_parser&);   \n            xml_parser& operator= (\n                        xml_parser&\n                        );  \n\n    };\n\n    inline void swap (\n        xml_parser& a, \n        xml_parser& b \n    ) { a.swap(b); }   \n\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n \n    void xml_parser::\n    clear(\n    )\n    {\n        // unregister all event handlers\n        eh_list.clear();\n        dh_list.clear();\n    }\n\n// ----------------------------------------------------------------------------------------\n        \n    void xml_parser::\n    parse (\n        std::istream& in\n    )\n    {\n        DLIB_CASSERT ( in.fail() == false ,\n            \"\\tvoid xml_parser::parse\"\n            << \"\\n\\tthe input stream must not be in the fail state\"\n            << \"\\n\\tthis: \" << this\n            );\n\n\n        // save which exceptions in will throw and make it so it won't throw any\n        // for the life of this function\n        std::ios::iostate old_exceptions = in.exceptions();\n        // set it to not throw anything\n        in.exceptions(std::ios::goodbit);\n\n\n        try \n        {\n            unsigned long line_number = 1;\n\n            // skip any whitespace before the start of the document\n            while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == '\\n' || in.peek() == '\\r' ) \n            {\n                if (in.peek() == '\\n')\n                    ++line_number;\n                in.get();\n            }\n\n\n\n            stack tags; // this stack contains the last start tag seen\n            bool seen_fatal_error = false;\n            bool seen_root_tag = false;  // this is true after we have seen the root tag\n            \n\n\n            // notify all the document_handlers that we are about to being parsing\n            for (unsigned long i = 0; i < dh_list.size(); ++i)\n            {\n                dh_list[i]->start_document();\n            }\n\n\n            std::string chars_buf; // used to collect chars data between consecutive\n                                // chars and chars_cdata tokens so that \n                                // document_handlers receive all chars data between\n                                // tags in one call\n\n            // variables to be used with the parsing functions\n            attrib_list atts;\n            std::string name;\n            std::string target;\n            std::string data;\n\n            \n\n            // variables to use with the get_next_token() function\n            std::string token_text;\n            int token_kind;\n\n            get_next_token(in,token_text,token_kind,line_number);\n\n\n            while (token_kind != eof)\n            {          \n                bool is_empty = false;  // this becomes true when this token is an empty_element\n\n                switch (token_kind)\n                {\n\n\n                case empty_element: is_empty = true;\n                case element_start:\n                    {\n                        seen_root_tag = true;\n\n                        int status = parse_element(token_text,name,atts);\n                        // if there was no error parsing the element\n                        if (status == 0)\n                        {\n                            // notify all the document_handlers\n                            for (unsigned long i = 0; i < dh_list.size(); ++i)\n                            {\n                                dh_list[i]->start_element(line_number,name,atts);\n                                if (is_empty)\n                                    dh_list[i]->end_element(line_number,name);\n                            }\n                        }\n                        else\n                        {\n                            seen_fatal_error = true;\n                        }\n\n                        // if this is an element_start token then push the name of\n                        // the element on to the stack\n                        if (token_kind == element_start)\n                        {\n                            tags.push(name);\n                        }\n\n                    }break;\n\n                // ----------------------------------------\n\n                case element_end:\n                    {\n\n                        int status = parse_element_end (token_text,name);\n\n                        // if there was no error parsing the element\n                        if (status == 0)\n                        {\n                            // make sure this ending element tag matches the last start\n                            // element tag we saw\n                            if ( tags.size() == 0 || name != tags.current())\n                            {\n                                // they don't match so signal a fatal error\n                                seen_fatal_error = true;\n                            }\n                            else\n                            {\n                                // notify all the document_handlers\n                                for (unsigned long i = 0; i < dh_list.size(); ++i)\n                                {\n                                    dh_list[i]->end_element(line_number,name);\n                                }\n\n                                // they match so throw away this element name\n                                tags.pop(name);\n                            }\n                        }\n                        else\n                        {\n                            seen_fatal_error = true;\n                        }\n\n\n                    }break;\n\n                // ----------------------------------------\n\n                case pi:\n                    {\n\n                        int status = parse_pi (token_text,target,data);\n                        // if there was no error parsing the element\n                        if (status == 0)\n                        {\n                            // notify all the document_handlers\n                            for (unsigned long i = 0; i < dh_list.size(); ++i)\n                            {\n                                dh_list[i]->processing_instruction(line_number,target,data);\n                            }\n                        }\n                        else\n                        {\n                            // notify all the error_handlers\n                            for (unsigned long i = 0; i < eh_list.size(); ++i)\n                            {\n                                eh_list[i]->error(line_number);\n                            }\n                        }\n                        while (in.peek() == ' ' || in.peek() == '\\t' || in.peek() == '\\n' || in.peek() == '\\r' ) \n                        {\n                            if (in.peek() == '\\n')\n                                ++line_number;\n                            in.get();\n                        }\n\n\n                    }break;\n\n                // ----------------------------------------\n\n                case chars:\n                    {\n                        if (tags.size() != 0)\n                        {\n                            chars_buf += token_text;\n                        }\n                        else if (token_text.find_first_not_of(\" \\t\\r\\n\") != std::string::npos)\n                        {\n                            // you can't have non whitespace chars data outside the root element\n                            seen_fatal_error = true;                        \n                        }\n                    }break;\n\n                // ----------------------------------------\n\n                case chars_cdata:\n                    {\n                        if (tags.size() != 0)\n                        {\n                            chars_buf += token_text;\n                        }\n                        else\n                        {\n                            // you can't have chars_data outside the root element\n                            seen_fatal_error = true;\n                        }\n                    }break;\n\n                // ----------------------------------------\n\n                case eof:\n                    break;\n\n                // ----------------------------------------\n\n                case error:\n                    {\n                        seen_fatal_error = true;\n                    }break;\n\n                // ----------------------------------------\n\n                case dtd:       // fall though\n                case comment:   // do nothing\n                    break;\n\n                // ----------------------------------------\n\n\n                }\n\n                // if there was a fatal error then quit loop\n                if (seen_fatal_error)\n                    break;\n\n                // if we have seen the last tag then quit the loop\n                if (tags.size() == 0 && seen_root_tag)\n                    break;\n                \n\n                get_next_token(in,token_text,token_kind,line_number);\n\n                // if the next token is not a chars or chars_cdata token then flush\n                // the chars_buf to the document_handlers\n                if ( (token_kind != chars) && \n                    (token_kind != chars_cdata) &&\n                    (token_kind != dtd) && \n                    (token_kind != comment) &&\n                    (chars_buf.size() != 0)\n                    )\n                {\n                    // notify all the document_handlers\n                    for (unsigned long i = 0; i < dh_list.size(); ++i)\n                    {\n                        dh_list[i]->characters(chars_buf);\n                    }\n                    chars_buf.erase();\n                }\n\n\n            } //while (token_kind != eof)\n\n\n\n\n            // you can't have any unmatched tags or any fatal erros\n            if (tags.size() != 0 || seen_fatal_error)\n            {\n                // notify all the error_handlers\n                for (unsigned long i = 0; i < eh_list.size(); ++i)\n                {\n                    eh_list[i]->fatal_error(line_number);\n                }\n                \n            }\n\n\n            // notify all the document_handlers that we have ended parsing\n            for (unsigned long i = 0; i < dh_list.size(); ++i)\n            {\n                dh_list[i]->end_document();\n            }\n        \n        }\n        catch (...)\n        {\n            // notify all the document_handlers that we have ended parsing\n            for (unsigned long i = 0; i < dh_list.size(); ++i)\n            {\n                dh_list[i]->end_document();\n            }\n\n            // restore the old exception settings to in\n            in.exceptions(old_exceptions);\n\n            // don't forget to rethrow the exception\n            throw;\n        }\n\n        // restore the old exception settings to in\n        in.exceptions(old_exceptions);\n\n    }\n\n// ----------------------------------------------------------------------------------------\n        \n    void xml_parser::\n    add_document_handler (\n        document_handler& item\n    )\n    {\n        document_handler* temp = &item;\n        dh_list.add(dh_list.size(),temp);\n    }\n\n// ----------------------------------------------------------------------------------------\n        \n    void xml_parser::\n    add_error_handler (\n        error_handler& item\n    )\n    {\n        error_handler* temp = &item;\n        eh_list.add(eh_list.size(),temp);\n    }\n\n// ----------------------------------------------------------------------------------------\n        \n    void xml_parser::\n    swap (\n        xml_parser& item\n    )\n    {\n        dh_list.swap(item.dh_list);\n        eh_list.swap(item.eh_list);\n    }\n   \n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n    // private member function definitions\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n        \n    void xml_parser::\n    get_next_token(\n        std::istream& in,\n        std::string& token_text,\n        int& token_kind,\n        unsigned long& line_number\n    )\n    {\n\n        token_text.erase();\n\n        std::istream::int_type ch1 = in.get();\n        std::istream::int_type ch2;\n\n\n        switch (ch1)\n        {\n\n        // -----------------------------------------\n\n            // this is the start of some kind of a tag\n        case '<':\n            {\n                ch2 = in.get();\n                switch (ch2)\n                {\n                \n                // ---------------------------------\n\n                    // this is a dtd, comment, or chars_cdata token \n                case '!':\n                    {\n                        // if this is a CDATA section *******************************\n                        if ( in.peek() == '[')\n                        {\n                            token_kind = chars_cdata;\n\n                            // throw away the '['\n                            in.get();\n\n                            // make sure the next chars are CDATA[\n                            std::istream::int_type ch = in.get();\n                            if (ch != 'C')                                \n                                token_kind = error;\n                            ch = in.get();\n                            if (ch != 'D')\n                                token_kind = error;\n                            ch = in.get();\n                            if (ch != 'A')\n                                token_kind = error;\n                            ch = in.get();\n                            if (ch != 'T')\n                                token_kind = error;\n                            ch = in.get();\n                            if (ch != 'A')\n                                token_kind = error;\n                            ch = in.get();\n                            if (ch != '[')\n                                token_kind = error;\n                            // if this is an error token then end\n                            if (token_kind == error)\n                                break;\n\n\n                            // get the rest of the chars and put them into token_text\n                            int brackets_seen = 0; // this is the number of ']' chars\n                                                   // we have seen in a row\n                            bool seen_closing = false; // true if we have seen ]]>\n                            do\n                            {\n                                ch = in.get();\n\n                                if (ch == '\\n')\n                                    ++line_number;\n\n                                token_text += ch;\n\n                                // if this is the closing \n                                if (brackets_seen == 2 && ch == '>')\n                                    seen_closing = true;\n                                // if we are seeing a bracket\n                                else if (ch == ']')\n                                    ++brackets_seen;\n                                // if we didn't see a bracket\n                                else\n                                    brackets_seen = 0;\n\n\n                            } while ( (!seen_closing) && (ch != EOF) );\n\n                            // check if this is an error token\n                            if (ch == EOF)\n                            {\n                                token_kind = error;\n                            }\n                            else\n                            {\n                                token_text.erase(token_text.size()-3);\n                            }\n\n                            \n\n                        }\n                        // this is a comment token ****************************\n                        else if (in.peek() == '-')\n                        {\n\n                            token_text += ch1;\n                            token_text += ch2;\n                            token_text += '-';\n\n                            token_kind = comment;\n\n                            // throw away the '-' char\n                            in.get();\n\n                            // make sure the next char is another '-'\n                            std::istream::int_type ch = in.get();\n                            if (ch != '-')\n                            {\n                                token_kind = error;\n                                break;\n                            }\n\n                            token_text += '-';\n\n\n                            // get the rest of the chars and put them into token_text\n                            int hyphens_seen = 0; // this is the number of '-' chars\n                                                   // we have seen in a row\n                            bool seen_closing = false; // true if we have seen ]]>\n                            do\n                            {\n                                ch = in.get();\n\n                                if (ch == '\\n')\n                                    ++line_number;\n\n                                token_text += ch;\n\n                                // if this should be a closing block\n                                if (hyphens_seen == 2)\n                                {\n                                    if (ch == '>')\n                                        seen_closing = true;\n                                    else // this isn't a closing so make it signal error\n                                        ch = EOF;\n                                }\n                                // if we are seeing a hyphen\n                                else if (ch == '-')\n                                    ++hyphens_seen;\n                                // if we didn't see a hyphen\n                                else\n                                    hyphens_seen = 0;\n\n\n                            } while ( (!seen_closing) && (ch != EOF) );\n\n                            // check if this is an error token\n                            if (ch == EOF)\n                            {\n                                token_kind = error;\n                            }\n\n\n\n\n\n                        }\n                        else // this is a dtd token *************************\n                        {\n\n                            token_text += ch1;\n                            token_text += ch2;\n                            int bracket_depth = 1;  // this is the number of '<' chars seen \n                                                    // minus the number of '>' chars seen\n\n                            std::istream::int_type ch;\n                            do\n                            {\n                                ch = in.get();\n                                if (ch == '>')\n                                    --bracket_depth;\n                                else if (ch == '<')\n                                    ++bracket_depth;\n                                else if (ch == '\\n')\n                                    ++line_number;\n\n                                token_text += ch;\n                                \n                            } while ( (bracket_depth > 0) && (ch != EOF) );\n\n                            // make sure we didn't just hit EOF\n                            if (bracket_depth == 0)\n                            {\n                                token_kind = dtd;\n                            }\n                            else\n                            {\n                                token_kind = error;\n                            }\n                        }\n                    }\n                    break;\n\n                // ---------------------------------\n\n                    // this is a pi token \n                case '?':\n                    {\n                        token_text += ch1;\n                        token_text += ch2;\n                        std::istream::int_type ch;\n                        \n                        do\n                        {\n                            ch = in.get();\n                            token_text += ch;\n                            if (ch == '\\n')\n                                ++line_number;\n                            // else if we hit a < then thats an error\n                            else if (ch == '<')\n                                ch = EOF;\n                        } while (ch != '>' && ch != EOF);\n                        // if we hit the end of the pi\n                        if (ch == '>')\n                        {\n                            // make sure there was a trailing '?'\n                            if ( (token_text.size() > 3) && \n                                (token_text[token_text.size()-2] != '?') \n                                )\n                            {\n                                token_kind = error;\n                            }\n                            else\n                            {\n                                token_kind = pi;\n                            }\n                        }\n                        // if we hit EOF unexpectidely then error\n                        else\n                        {\n                            token_kind = error;\n                        }\n                    }\n                    break;\n\n                // ---------------------------------\n\n                    // this is an error token\n                case EOF:\n                    {\n                        token_kind = error;\n                    }\n                    break;\n\n                // ---------------------------------\n                    // this is an element_end token\n                case '/':\n                    {\n                        token_kind = element_end;\n                        token_text += ch1;\n                        token_text += ch2;\n                        std::istream::int_type ch;\n                        do\n                        {\n                            ch = in.get();\n                            if (ch == '\\n')\n                                ++line_number;\n                            // else if we hit a < then thats an error\n                            else if (ch == '<')\n                                ch = EOF;\n                            token_text += ch;                                \n                        } while ( (ch != '>') && (ch != EOF));\n\n                        // check if this is an error token\n                        if (ch == EOF)\n                        {\n                            token_kind = error;\n                        }\n                    }\n                    break;\n\n\n                // ---------------------------------\n\n                    // this is an element_start or empty_element token\n                default:\n                    {\n\n                        token_text += ch1;\n                        token_text += ch2;\n                        std::istream::int_type ch = '\\0';\n                        std::istream::int_type last;\n                        do\n                        {\n                            last = ch;\n                            ch = in.get();\n                            if (ch == '\\n')\n                                ++line_number;\n                            // else if we hit a < then thats an error\n                            else if (ch == '<')\n                                ch = EOF;\n                            token_text += ch;                                \n                        } while ( (ch != '>') && (ch != EOF));\n\n                        // check if this is an error token\n                        if (ch == EOF)\n                        {\n                            token_kind = error;\n                        }\n                        // if this is an empty_element\n                        else if (last == '/')\n                        {\n                            token_kind = empty_element;\n                        }\n                        else\n                        {\n                            token_kind = element_start;\n                        }\n                        \n                \n                    }\n                    break;\n\n                // ---------------------------------\n\n                }\n\n            }\n            break;\n\n        // -----------------------------------------\n\n            // this is an eof token\n        case EOF:\n            {\n                token_kind = eof;                \n            }\n            break;\n\n        // -----------------------------------------\n\n            // this is a chars token\n        default:\n            {\n                if (ch1 == '\\n')\n                {\n                    ++line_number;\n                    token_text += ch1;\n                }\n                // if the first thing in this chars token is an entity reference\n                else if (ch1 == '&')\n                {\n                    \n                    int temp = change_entity(in);\n                    if (temp == -1)\n                    {\n                        token_kind = error;\n                        break;\n                    }\n                    else\n                    {\n                        token_text += temp;\n                    }\n                }\n                else\n                {\n                    token_text += ch1;\n                }\n                \n\n                token_kind = chars;\n                \n                std::istream::int_type ch = 0;\n                while (in.peek() != '<' && in.peek() != EOF)\n                {\n                    ch = in.get();\n\n                    if (ch == '\\n')\n                        ++line_number;\n\n                    // if this is one of the predefined entity references then change it\n                    if (ch == '&')\n                    {\n                        int temp = change_entity(in);\n                        if (temp == -1)\n                        {\n                            ch = EOF;\n                            break;\n                        }\n                        else\n                            token_text += temp;\n                    }\n                    else\n                    {\n                        token_text += ch;\n                    }\n                }\n\n                // if this is an error token\n                if (ch == EOF)\n                {\n                    token_kind = error;\n                }\n\n            }\n            break;\n\n        // -----------------------------------------\n\n        }\n       \n\n    }\n\n\n\n// ----------------------------------------------------------------------------------------\n        \n    int xml_parser::\n    parse_element (\n        const std::string& token,\n        std::string& name,\n        attrib_list& atts\n    )\n    {\n        name.erase();\n        atts.list.clear();\n     \n        // there must be at least one character between the <>\n        if (token[1] == '>')\n            return -1;\n\n        std::string::size_type i;\n        std::istream::int_type ch = token[1];\n        i = 2;\n\n        // fill out name.  the name can not contain any of the following characters\n        while ( (ch != '>') && \n                (ch != ' ') && \n                (ch != '=') && \n                (ch != '/') && \n                (ch != '\\t') && \n                (ch != '\\r') &&\n                (ch != '\\n')\n            )\n        {\n            name += ch;\n            ch = token[i];\n            ++i;\n        }\n\n        // skip any whitespaces\n        while ( ch == ' ' || ch == '\\t' || ch == '\\n' || ch == '\\r' )\n        {\n             ch = token[i];\n             ++i;\n        }\n\n        // find any attributes\n        while (ch != '>' && ch != '/')\n        {\n            std::string attribute_name;\n            std::string attribute_value;\n\n            // fill out attribute_name\n            while ( (ch != '=') && \n                    (ch != ' ') && \n                    (ch != '\\t') && \n                    (ch != '\\r') &&\n                    (ch != '\\n') &&\n                    (ch != '>')\n                    )\n            {\n                attribute_name += ch;\n                ch = token[i];\n                ++i;\n            }    \n\n            // you can't have empty attribute names\n            if (attribute_name.size() == 0)\n                return -1;\n\n            // if we hit > too early then return error\n            if (ch == '>')\n                return -1;\n\n            // skip any whitespaces\n            while (ch == ' ' || ch == '\\t' || ch =='\\n' || ch =='\\r')\n            {\n                ch = token[i];\n                ++i;\n            }\n\n            // the next char should be a '=', error if it's not\n            if (ch != '=')\n                return -1;\n\n            // get the next char\n            ch = token[i];  \n            ++i;  \n\n            // skip any whitespaces\n            while (ch == ' ' || ch == '\\t' || ch =='\\n' || ch =='\\r')\n            {\n                ch = token[i];\n                ++i;\n            }\n\n\n            // get the delimiter for the attribute value\n            std::istream::int_type delimiter = ch; // this should be either a ' or \" character\n            ch = token[i];  // get the next char\n            ++i;            \n            if (delimiter != '\\'' && delimiter!='\"')\n                return -1;\n\n\n            // fill out attribute_value\n            while ( (ch != delimiter) &&\n                    (ch != '>')\n                    )\n            {\n                attribute_value += ch;\n                ch = token[i];\n                ++i;\n            }  \n\n\n            // if there was no delimiter then this is an error\n            if (ch == '>')\n            {\n                return -1;\n            }          \n\n            // go to the next char\n            ch = token[i];\n            ++i;\n\n            // the next char must be either a '>' or '/' (denoting the end of the tag)\n            // or a white space character\n            if (ch != '>' && ch != ' ' && ch != '/' && ch != '\\t' && ch !='\\n' && ch !='\\r')\n                return -1;\n\n            // skip any whitespaces\n            while (ch == ' ' || ch == '\\t' || ch =='\\n' || ch =='\\r')\n            {\n                ch = token[i];\n                ++i;\n            }\n\n\n            // add attribute_value and attribute_name to atts\n            if (atts.list.is_in_domain(attribute_name))\n            {\n                // attributes may not be multiply defined\n                return -1;\n            }\n            else\n            {\n                atts.list.add(attribute_name,attribute_value);\n            }\n\n\n        }\n\n        // you can't have an element with no name\n        if (name.size() == 0)\n            return -1;\n\n        return 0;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n        \n    int xml_parser::\n    parse_pi (\n        const std::string& token,\n        std::string& target,\n        std::string& data\n    )\n    {\n        target.erase();\n        data.erase();\n\n        std::istream::int_type ch = token[2];\n        std::string::size_type i = 3;\n        while (ch != ' ' && ch != '?' && ch != '\\t' && ch != '\\n' && ch!='\\r')\n        {\n            target += ch;\n            ch = token[i];\n            ++i;\n        }\n        if (target.size() == 0)\n            return -1;\n\n        // if we aren't at a ? character then go to the next character\n        if (ch != '?' )\n        {\n            ch = token[i];\n            ++i;\n        }\n\n        // if we still aren't at the end of the processing instruction then\n        // set this stuff in the data section\n        while (ch != '?')\n        {\n            data += ch;\n            ch = token[i];\n            ++i;\n        }\n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n        \n    int xml_parser::\n    parse_element_end (\n        const std::string& token,\n        std::string& name\n    )\n    {\n        name.erase();\n        std::string::size_type end = token.size()-1;\n        for (std::string::size_type i = 2; i < end; ++i)\n        {\n            if (token[i] == ' ' || token[i] == '\\t' || token[i] == '\\n'|| token[i] == '\\r')\n                break;\n            name += token[i];\n        }\n\n        if (name.size() == 0)\n            return -1;\n\n        return 0;\n    }\n\n// ----------------------------------------------------------------------------------------\n        \n    int xml_parser::\n    change_entity (\n        std::istream& in\n    )\n    {\n        \n        std::istream::int_type buf[6];\n   \n        \n        buf[1] = in.get();\n\n        // if this is an undefined entity reference then return error\n        if (buf[1] != 'a' && \n            buf[1] != 'l' &&\n            buf[1] != 'g' &&\n            buf[1] != 'q'\n            )\n            return -1;\n\n\n        buf[2] = in.get();\n        // if this is an undefined entity reference then return error\n        if (buf[2] != 'm' && \n            buf[2] != 't' &&\n            buf[2] != 'p' &&\n            buf[2] != 'u'\n            )\n            return -1;\n\n\n        buf[3] = in.get();\n        // if this is an undefined entity reference then return error\n        if (buf[3] != 'p' && \n            buf[3] != ';' &&\n            buf[3] != 'o'\n            )\n            return -1;\n\n        // check if this is &lt; or &gt;\n        if  (buf[3] == ';')\n        {\n            if (buf[2] != 't')\n                return -1;\n\n            // if this is &lt; then return '<'\n            if (buf[1] == 'l')\n                return '<';\n            // if this is &gt; then return '>'\n            if (buf[1] == 'g')\n                return '>';\n\n            // it is neither so it must be an undefined entity reference\n            return -1;\n        }\n\n\n        buf[4] = in.get();\n        // if this should be &amp;\n        if (buf[4] == ';')\n        {\n            // if this is not &amp; then return error\n            if (buf[1] != 'a' ||\n                buf[2] != 'm' || \n                buf[3] != 'p'\n                )\n                return -1;\n\n            return '&';\n        }\n\n        buf[5] = in.get();\n\n        // if this should be &apos;\n        if (buf[1] == 'a' &&\n            buf[2] == 'p' &&\n            buf[3] == 'o' &&\n            buf[4] == 's' &&\n            buf[5] == ';'\n            )\n            return '\\'';\n\n\n        // if this should be &quot;\n        if (buf[1] == 'q' &&\n            buf[2] == 'u' &&\n            buf[3] == 'o' &&\n            buf[4] == 't' &&\n            buf[5] == ';'\n            )\n            return '\"';\n\n\n        // it was an undefined entity reference\n        return -1;\n\n    }\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class xml_parse_error : public error\n    {\n    public:\n        xml_parse_error(\n            const std::string& a\n        ): error(a) {}\n    };\n\n    namespace impl\n    {\n        class default_xml_error_handler : public error_handler\n        {\n            std::string filename;\n\n        public:\n\n            default_xml_error_handler (\n            ) {}\n\n            default_xml_error_handler (\n                const std::string& filename_\n            ) :filename(filename_) {}\n\n            virtual void error (\n                const unsigned long \n            )\n            {\n                // just ignore non-fatal errors\n            }\n\n            virtual void fatal_error (\n                const unsigned long line_number\n            )\n            {\n                std::ostringstream sout;\n                if (filename.size() != 0)\n                    sout << \"There is a fatal error on line \" << line_number << \" in the XML file '\"<<filename<<\"'.\";\n                else\n                    sout << \"There is a fatal error on line \" << line_number << \" in the XML being processed.\";\n\n                throw xml_parse_error(sout.str());\n            }\n        };\n    }\n\n    inline void parse_xml (\n        std::istream& in,\n        document_handler& dh,\n        error_handler& eh\n    )\n    {\n        xml_parser parser;\n        parser.add_document_handler(dh);\n        parser.add_error_handler(eh);\n        parser.parse(in);\n    }\n\n    inline void parse_xml (\n        std::istream& in,\n        error_handler& eh,\n        document_handler& dh\n    )\n    {\n        xml_parser parser;\n        parser.add_document_handler(dh);\n        parser.add_error_handler(eh);\n        parser.parse(in);\n    }\n\n    inline void parse_xml (\n        std::istream& in,\n        error_handler& eh\n    )\n    {\n        xml_parser parser;\n        parser.add_error_handler(eh);\n        parser.parse(in);\n    }\n\n    inline void parse_xml (\n        std::istream& in,\n        document_handler& dh\n    )\n    {\n        xml_parser parser;\n        parser.add_document_handler(dh);\n        impl::default_xml_error_handler eh;\n        parser.add_error_handler(eh);\n        parser.parse(in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n    inline void parse_xml (\n        const std::string& filename,\n        document_handler& dh,\n        error_handler& eh\n    )\n    {\n        std::ifstream in(filename.c_str());\n        if (!in)\n            throw xml_parse_error(\"Unable to open file '\" + filename + \"'.\");\n        xml_parser parser;\n        parser.add_document_handler(dh);\n        parser.add_error_handler(eh);\n        parser.parse(in);\n    }\n\n    inline void parse_xml (\n        const std::string& filename,\n        error_handler& eh,\n        document_handler& dh\n    )\n    {\n        std::ifstream in(filename.c_str());\n        if (!in)\n            throw xml_parse_error(\"Unable to open file '\" + filename + \"'.\");\n        xml_parser parser;\n        parser.add_document_handler(dh);\n        parser.add_error_handler(eh);\n        parser.parse(in);\n    }\n\n    inline void parse_xml (\n        const std::string& filename,\n        error_handler& eh\n    )\n    {\n        std::ifstream in(filename.c_str());\n        if (!in)\n            throw xml_parse_error(\"Unable to open file '\" + filename + \"'.\");\n        xml_parser parser;\n        parser.add_error_handler(eh);\n        parser.parse(in);\n    }\n\n    inline void parse_xml (\n        const std::string& filename,\n        document_handler& dh\n    )\n    {\n        std::ifstream in(filename.c_str());\n        if (!in)\n            throw xml_parse_error(\"Unable to open file '\" + filename + \"'.\");\n        xml_parser parser;\n        parser.add_document_handler(dh);\n        impl::default_xml_error_handler eh(filename);\n        parser.add_error_handler(eh);\n        parser.parse(in);\n    }\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_XML_PARSER_KERNEl_1_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/xml_parser/xml_parser_kernel_abstract.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#undef DLIB_XML_PARSER_KERNEl_ABSTRACT_\n#ifdef DLIB_XML_PARSER_KERNEl_ABSTRACT_\n\n#include <string>\n#include <iosfwd>\n#include \"xml_parser_kernel_interfaces.h\"\n\nnamespace dlib\n{\n\n    class xml_parser\n    {\n\n        /*!                \n            INITIAL VALUE\n                no objects are registered to receive events \n\n\n            WHAT THIS OBJECT REPRESENTS\n                This object represents a simple SAX style event driven XML parser.  \n                It takes its input from an input stream object and sends events to all \n                registered document_handler and error_handler objects.\n\n                note that this xml parser ignores all DTD related XML markup.  It will \n                parse XML documents with DTD's but it just won't check if the document\n                is valid.  This also means that entity references may not be used except\n                for the predefined ones which are as follows:\n                    &amp;\n                    &lt;\n                    &gt;\n                    &apos;\n                    &quot;\n\n                also note that there is no interpreting of entity references inside\n                a CDATA section or inside of tags, they are only interpreted inside \n                normal non-markup data.\n\n                This parser considers the end of the xml document to be the closing \n                tag of the root tag (as opposed to using EOF as the end of the\n                document).  This is a deviation from the xml standard.\n\n                Aside from ignoring DTD stuff and entity references everywhere but\n                data, and the above comment regarding EOF, this parser should conform \n                to the rest of the XML standard.\n        !*/\n        \n        public:\n\n\n            xml_parser(\n            );\n            /*!\n                ensures \n                    - #*this is properly initialized\n                throws\n                    - std::bad_alloc\n            !*/\n\n            virtual ~xml_parser(\n            ); \n            /*!\n                ensures\n                    - all memory associated with *this has been released\n            !*/\n\n            void clear(\n            );\n            /*!\n                ensures\n                    - #*this has its initial value\n                throws\n                    - std::bad_alloc\n                        if this exception is thrown then *this is unusable \n                        until clear() is called and succeeds\n            !*/\n\n            void parse (\n                std::istream& in\n            );\n            /*!\n                requires\n                    - in.fail() == false\n                ensures\n                    - the data from the input stream in will be parsed and the appropriate\n                      events will be generated \n                    - parsing will stop when the parser has reached the closing tag\n                      for the xml document or EOF (which ever comes first). Note that\n                      hitting EOF first is a fatal error.\n                throws\n                    - std::bad_alloc\n                        if parse() throws then it will be unusable until clear() is \n                        called and succeeds\n                    - other exceptions\n                        document_handlers and error_handlers my throw any exception.  If \n                        they throw while parse() is running then parse() will let the \n                        exception propagate out and the xml_parser object will be unusable \n                        until clear() is called and succeeds.    note that end_document()\n                        is still called.\n            !*/\n  \n            void add_document_handler (\n                document_handler& item\n            );\n            /*!\n                ensures\n                    - item will now receive document events from the parser\n                throws\n                    - std::bad_alloc\n                        if add_document_handler() throws then it has no effect\n            !*/\n\n            void add_error_handler (\n                error_handler& item\n            );\n            /*!\n                ensures\n                    - item will now receive error events from the parser\n                throws\n                    - std::bad_alloc\n                        if add_error_handler() throws then it has no effect\n            !*/\n\n\n            void swap (\n                xml_parser& item\n            );\n            /*!\n                ensures\n                    - swaps *this and item\n            !*/ \n    \n\n        private:\n\n            // restricted functions\n            xml_parser(xml_parser&);        // copy constructor\n            xml_parser& operator=(xml_parser&);    // assignment operator\n\n    };\n\n\n    inline void swap (\n        xml_parser& a, \n        xml_parser& b \n    ) { a.swap(b); }   \n    /*!\n        provides a global swap function\n    !*/\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class xml_parse_error : public error\n    {\n        /*!\n            WHAT THIS OBJECT REPRESENTS\n                This is the exception object thrown by the parse_xml() routines defined\n                below.\n        !*/\n    };\n\n// ----------------------------------------------------------------------------------------\n\n    void parse_xml (\n        std::istream& in,\n        document_handler& dh,\n        error_handler& eh\n    );\n    /*!\n        ensures\n            - makes an xml_parser and tells it to parse the given input stream using the\n              supplied document_handler and error_handler.\n    !*/\n\n    void parse_xml (\n        std::istream& in,\n        error_handler& eh,\n        document_handler& dh\n    )\n    /*!\n        ensures\n            - makes an xml_parser and tells it to parse the given input stream using the\n              supplied document_handler and error_handler.\n    !*/\n\n    void parse_xml (\n        std::istream& in,\n        error_handler& eh\n    );\n    /*!\n        ensures\n            - makes an xml_parser and tells it to parse the given input stream using the\n              supplied error_handler.\n    !*/\n\n    void parse_xml (\n        std::istream& in,\n        document_handler& dh\n    );\n    /*!\n        ensures\n            - makes an xml_parser and tells it to parse the given input stream using the\n              supplied document_handler.\n            - Uses a default error handler that will throw an xml_parse_error exception\n              if a fatal parsing error is encountered.\n        throws\n            - xml_parse_error\n                Thrown if a fatal parsing error is encountered.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n    void parse_xml (\n        const std::string& filename,\n        document_handler& dh,\n        error_handler& eh\n    );\n    /*!\n        ensures\n            - makes an xml_parser and tells it to parse the given input file using the\n              supplied error_handler and document_handler.\n        throws\n            - xml_parse_error\n                Thrown if there is a problem opening the input file.\n    !*/\n\n    void parse_xml (\n        const std::string& filename,\n        error_handler& eh,\n        document_handler& dh\n    );\n    /*!\n        ensures\n            - makes an xml_parser and tells it to parse the given input file using the\n              supplied error_handler and document_handler.\n        throws\n            - xml_parse_error\n                Thrown if there is a problem opening the input file.\n    !*/\n\n    void parse_xml (\n        const std::string& filename,\n        error_handler& eh\n    );\n    /*!\n        ensures\n            - makes an xml_parser and tells it to parse the given input file using the\n              supplied error_handler.\n        throws\n            - xml_parse_error\n                Thrown if there is a problem opening the input file.\n    !*/\n\n    void parse_xml (\n        const std::string& filename,\n        document_handler& dh\n    );\n    /*!\n        ensures\n            - makes an xml_parser and tells it to parse the given input file using the\n              supplied document_handler.\n            - Uses a default error handler that will throw an xml_parse_error exception\n              if a fatal parsing error is encountered.\n        throws\n            - xml_parse_error\n                Thrown if a fatal parsing error is encountered or if there is a problem\n                opening the input file.\n    !*/\n\n// ----------------------------------------------------------------------------------------\n\n}\n\n#endif // DLIB_XML_PARSER_KERNEl_ABSTRACT_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/xml_parser/xml_parser_kernel_interfaces.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_XML_PARSER_KERNEl_INTERFACES_\n#define DLIB_XML_PARSER_KERNEl_INTERFACES_\n\n#include <string>\n#include \"../interfaces/enumerable.h\"\n#include \"../interfaces/map_pair.h\"\n\nnamespace dlib\n{\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class attribute_list : public enumerable<map_pair<std::string,std::string> >\n    {\n\n        /*!                \n            WHAT THIS OBJECT REPRESENTS\n                this object represents a list of the attributes found in\n                an XML element.  each attribute is associated with a value.\n        !*/\n\n\n    public:\n\n        inline virtual ~attribute_list (\n        ) =0;\n\n\n        virtual bool is_in_list (\n            const std::string& key\n        ) const =0;\n        /*!\n            ensures\n                - returns true if there is an attribute named key in the list \n                - returns false\n        !*/\n\n        virtual const std::string& operator[] (\n            const std::string& key\n        ) const =0;\n        /*!\n            requires\n                - is_in_list(key) == true\n            ensures\n                - returns a const reference to the value associated with the \n                  attribute named key.\n        !*/\n\n    protected:\n\n        // restricted functions\n        attribute_list& operator=(attribute_list&) {return *this;}\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class document_handler\n    {\n        /*!                \n            EXCEPTIONS\n                a document_handler is allowed to throw any exception\n\n\n            WHAT THIS OBJECT REPRESENTS\n                this object is an interface for handling the basic events\n                generated by an XML parser\n        !*/\n\n\n    public:\n\n        inline virtual ~document_handler (\n        ) =0;\n\n        virtual void start_document (\n        )=0;\n        /*!\n            requires\n                - is called when the document parsing begins\n        !*/\n\n        virtual void end_document (\n        )=0;\n        /*!\n            requires\n                - is called after the document parsing has ended.  note that this\n                  is always called, even if an error occurs.\n        !*/\n\n        virtual void start_element ( \n            const unsigned long line_number,\n            const std::string& name,\n            const dlib::attribute_list& atts\n        )=0;\n        /*!\n            requires\n                - is called when an opening element tag is encountered.\n                - line_number == the line number where the opening tag for this element \n                  was encountered.\n                - name == the name of the element encountered \n                - atts == a list containing all the attributes in this element and their \n                  associated values\n        !*/\n\n        virtual void end_element ( \n            const unsigned long line_number,\n            const std::string& name\n        )=0;\n        /*!\n            requires\n                - is called when a closing element tag is encountered. (note that this\n                  includes tags such as <example_tag/>.  I.e. the previous tag would\n                  trigger a start_element() callback as well as an end_element() callback)\n                - line_number == the line number where the closing tag for this \n                  element was encountered and\n                - name == the name of the element encountered\n        !*/\n\n        virtual void characters ( \n            const std::string& data\n        )=0;\n        /*!\n            requires\n                - is called just before we encounter a start_element, end_element, or \n                  processing_instruction tag but only if there was data between the \n                  last and next tag.  \n                  (i.e. data will never be \"\")\n                - data == all the normal non-markup data and CDATA between the next and\n                  last tag in the document.  \n        !*/\n\n        virtual void processing_instruction (\n            const unsigned long line_number,\n            const std::string& target,\n            const std::string& data\n        )=0;\n        /*!\n            requires\n                - is called when a processing instruction is encountered\n                - line_number == the line number where this processing instruction\n                  was encountered \n                - target == the target value for this processing instruction \n                - data == the data value for this processing instruction\n        !*/\n\n    protected:\n\n        // restricted functions\n        document_handler& operator=(document_handler&) { return *this; }\n    };\n\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    class error_handler\n    {\n        /*!                \n            EXCEPTIONS\n                an error_handler is allowed to throw any exception\n\n\n            WHAT THIS OBJECT REPRESENTS\n                this object is an interface for handling the error/warning\n                events generated by an XML parser\n        !*/\n\n    public:\n\n        inline virtual ~error_handler (\n        ) =0;\n\n        virtual void error (\n            const unsigned long line_number\n        )=0;\n        /*!\n            requires\n                - is called when an error that does NOT require the parser to halt\n                  is encountered. (i.e. somewhat minor errors in the input)\n                - line_number == the line number where this error was encountered\n\n            the following events trigger an error:\n                an invalid processing instruction\n        !*/\n\n        virtual void fatal_error (\n            const unsigned long line_number\n        )=0;\n        /*!\n            requires\n                - is called when an error that requires the parser to abort its parsing\n                  is encountered (i.e. fatal errors in the input) \n                - line_number == the line number where this fatal error was encountered\n\n            the following events trigger a fatal_error:\n                Everything other than the events listed above for error. \n                Also note that encountering an entity reference other than the \n                predefined ones listed in xml_parser_kernel_abstract is a fatal_error.\n                Hitting EOF before the closing tag for the document is also a fatal_error.\n        !*/\n\n    protected:\n\n        // restricted functions\n        error_handler& operator=(error_handler&) { return *this;}\n    };\n\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n// ----------------------------------------------------------------------------------------\n\n    document_handler::~document_handler (\n    ){}\n    attribute_list::~attribute_list (\n    ){}\n    error_handler::~error_handler (\n    ){}\n\n}\n\n#endif // DLIB_XML_PARSER_KERNEl_INTERFACES_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/dlib/include/dlib/xml_parser.h",
    "content": "// Copyright (C) 2003  Davis E. King (davis@dlib.net)\n// License: Boost Software License   See LICENSE.txt for the full license.\n#ifndef DLIB_XML_PARSEr_\n#define DLIB_XML_PARSEr_\n\n#include <string>\n\n#include \"xml_parser/xml_parser_kernel_interfaces.h\"\n#include \"xml_parser/xml_parser_kernel_1.h\"\n\n\n#endif // DLIB_XML_PARSEr_\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/CHANGES",
    "content": "------------------------------------------------------------------------\nThe list of most significant changes made over time in\nIntel(R) Threading Building Blocks (Intel(R) TBB).\n\nIntel TBB 4.4 Update 3\nTBB_INTERFACE_VERSION == 9003\n\nChanges (w.r.t. Intel TBB 4.4 Update 2):\n\n- Modified parallel_sort to not require a default constructor for values\n    and to use iter_swap() for value swapping.\n- Added support for creating or initializing a task_arena instance that\n    is connected to the arena currently used by the thread.\n- graph/binpack example modified to use multifunction_node.\n- For performance analysis, use Intel(R) VTune(TM) Amplifier XE 2015\n    and higher; older versions are no longer supported.\n- Improved support for compilation with disabled RTTI, by omitting its use\n    in auxiliary code, such as assertions. However some functionality,\n    particularly the flow graph, does not work if RTTI is disabled.\n- The tachyon example for Android* can be built using Android Studio 1.5\n    and higher with experimental Gradle plugin 0.4.0.\n\nPreview Features:\n\n- Added class opencl_subbufer that allows using OpenCL* sub-buffer\n    objects with opencl_node.\n- Class global_control supports the value of 1 for\n    max_allowed_parallelism.\n\nBugs fixed:\n\n- Fixed a race causing \"TBB Warning: setaffinity syscall failed\" message.\n- Fixed a compilation issue on OS X* with Intel(R) C++ Compiler 15.0.\n- Fixed a bug in queuing_rw_mutex::downgrade() that could temporarily\n    block new readers.\n- Fixed speculative_spin_rw_mutex to stop using the lazy subscription\n    technique due to its known flaws.\n- Fixed memory leaks in the tool support code.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 2\nTBB_INTERFACE_VERSION == 9002\n\nChanges (w.r.t. Intel TBB 4.4 Update 1):\n\n- Improved interoperability with Intel(R) OpenMP RTL (libiomp) on Linux:\n    OpenMP affinity settings do not affect the default number of threads\n    used in the task scheduler. Intel(R) C++ Compiler 16.0 Update 1\n    or later is required.\n- Added a new flow graph example with different implementations of the\n    Cholesky Factorization algorithm.\n\nPreview Features:\n\n- Added template class opencl_node to the flow graph API. It allows a\n    flow graph to offload computations to OpenCL* devices.\n- Extended join_node to use type-specified message keys. It simplifies\n    the API of the node by obtaining message keys via functions\n    associated with the message type (instead of node ports).\n- Added static_partitioner that minimizes overhead of parallel_for and\n    parallel_reduce for well-balanced workloads.\n- Improved template class async_node in the flow graph API to support\n    user settable concurrency limits.\n\nBugs fixed:\n\n- Fixed a possible crash in the GUI layer for library examples on Linux.\n\n------------------------------------------------------------------------\nIntel TBB 4.4 Update 1\nTBB_INTERFACE_VERSION == 9001\n\nChanges (w.r.t. Intel TBB 4.4):\n\n- Added support for Microsoft* Visual Studio* 2015.\n- Intel TBB no longer performs dynamic replacement of memory allocation\n    functions for Microsoft Visual Studio 2005 and earlier versions.\n- For GCC 4.7 and higher, the intrinsics-based platform isolation layer\n    uses __atomic_* built-ins instead of the legacy __sync_* ones.\n    This change is inspired by a contribution from Mathieu Malaterre.\n- Improvements in task_arena:\n    Several application threads may join a task_arena and execute tasks\n    simultaneously. The amount of concurrency reserved for application\n    threads at task_arena construction can be set to any value between\n    0 and the arena concurrency limit.\n- The fractal example was modified to demonstrate class task_arena\n    and moved to examples/task_arena/fractal.\n\nBugs fixed:\n\n- Fixed a deadlock during destruction of task_scheduler_init objects\n    when one of destructors is set to wait for worker threads.\n- Added a workaround for a possible crash on OS X* when dynamic memory\n    allocator replacement (libtbbmalloc_proxy) is used and memory is\n    released during application startup.\n- Usage of mutable functors with task_group::run_and_wait() and\n    task_arena::enqueue() is disabled. An attempt to pass a functor\n    which operator()() is not const will produce compilation errors.\n- Makefiles and environment scripts now properly recognize GCC 5.0 and\n    higher.\n\nOpen-source contributions integrated:\n\n- Improved performance of parallel_for_each for inputs allowing random\n    access, by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.4\nTBB_INTERFACE_VERSION == 9000\n\nChanges (w.r.t. Intel TBB 4.3 Update 6):\n\n- The following features are now fully supported:\n    tbb::flow::composite_node;\n    additional policies of tbb::flow::graph_node::reset().\n- Platform abstraction layer for Windows* OS updated to use compiler\n    intrinsics for most atomic operations.\n- The tbb/compat/thread header updated to automatically include\n    C++11 <thread> where available.\n- Fixes and refactoring in the task scheduler and class task_arena.\n- Added key_matching policy to tbb::flow::join_node, which removes\n    the restriction on the type that can be compared-against.\n- For tag_matching join_node, tag_value is redefined to be 64 bits\n    wide on all architectures.\n- Expanded the documentation for the flow graph with details about\n    node semantics and behavior.\n- Added dynamic replacement of C11 standard function aligned_alloc()\n    under Linux* OS.\n- Added C++11 move constructors and assignment operators to\n    tbb::enumerable_thread_specific container.\n- Added hashing support for tbb::tbb_thread::id.\n- On OS X*, binaries that depend on libstdc++ are not provided anymore.\n    In the makefiles, libc++ is now used by default; for building with\n    libstdc++, specify stdlib=libstdc++ in the make command line.\n\nPreview Features:\n\n- Added a new example, graph/fgbzip2, that shows usage of\n    tbb::flow::async_node.\n- Modification to the low-level API for memory pools:\n    added a function for finding a memory pool by an object allocated\n    from that pool.\n- tbb::memory_pool now does not request memory till the first allocation\n    from the pool.\n\nChanges affecting backward compatibility:\n\n- Internal layout of flow graph nodes has changed; recompilation is\n    recommended for all binaries that use the flow graph.\n- Resetting a tbb::flow::source_node will immediately activate it,\n    unless it was created in inactive state.\n\nBugs fixed:\n\n- Failure at creation of a memory pool will not cause process\n    termination anymore.\n\nOpen-source contributions integrated:\n\n- Supported building TBB with Clang on AArch64 with use of built-in\n    intrinsics by David A.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 6\nTBB_INTERFACE_VERSION == 8006\n\nChanges (w.r.t. Intel TBB 4.3 Update 5):\n\n- Supported zero-copy realloc for objects >1MB under Linux* via\n    mremap system call.\n- C++11 move-aware insert and emplace methods have been added to\n    concurrent_hash_map container.\n- install_name is set to @rpath/<library name> on OS X*.\n\nPreview Features:\n\n- Added template class async_node to the flow graph API. It allows a\n    flow graph to communicate with an external activity managed by\n    the user or another runtime.\n- Improved speed of flow::graph::reset() clearing graph edges.\n    rf_extract flag has been renamed rf_clear_edges.\n- extract() method of graph nodes now takes no arguments.\n\nBugs fixed:\n\n- concurrent_unordered_{set,map} behaves correctly for degenerate\n    hashes.\n- Fixed a race condition in the memory allocator that may lead to\n    excessive memory consumption under high multithreading load.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 5\nTBB_INTERFACE_VERSION == 8005\n\nChanges (w.r.t. Intel TBB 4.3 Update 4):\n\n- Added add_ref_count() method of class tbb::task.\n\nPreview Features:\n\n- Added class global_control for application-wide control of allowed\n    parallelism and thread stack size.\n- memory_pool_allocator now throws the std::bad_alloc exception on\n    allocation failure.\n- Exceptions thrown for by memory pool constructors changed from\n    std::bad_alloc to std::invalid_argument and std::runtime_error.\n\nBugs fixed:\n\n- scalable_allocator now throws the std::bad_alloc exception on\n    allocation failure.\n- Fixed a race condition in the memory allocator that may lead to\n    excessive memory consumption under high multithreading load.\n- A new scheduler created right after destruction of the previous one\n    might be unable to modify the number of worker threads.\n\nOpen-source contributions integrated:\n\n- (Added but not enabled) push_front() method of class tbb::task_list\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 4\nTBB_INTERFACE_VERSION == 8004\n\nChanges (w.r.t. Intel TBB 4.3 Update 3):\n\n- Added a C++11 variadic constructor for enumerable_thread_specific.\n    The arguments from this constructor are used to construct\n    thread-local values.\n- Improved exception safety for enumerable_thread_specific.\n- Added documentation for tbb::flow::tagged_msg class and\n    tbb::flow::output_port function.\n- Fixed build errors for systems that do not support dynamic linking.\n- C++11 move-aware insert and emplace methods have been added to\n    concurrent unordered containers.\n\nPreview Features:\n\n- Interface-breaking change: typedefs changed for node predecessor and\n    successor lists, affecting copy_predecessors and copy_successors\n    methods.\n- Added template class composite_node to the flow graph API. It packages\n    a subgraph to represent it as a first-class flow graph node.\n- make_edge and remove_edge now accept multiport nodes as arguments,\n    automatically using the node port with index 0 for an edge.\n\nOpen-source contributions integrated:\n\n- Draft code for enumerable_thread_specific constructor with multiple\n    arguments (see above) by Adrien Guinet.\n- Fix for GCC invocation on IBM* Blue Gene*\n    by Jeff Hammond and Raf Schietekat.\n- Extended testing with smart pointers for Clang & libc++\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 3\nTBB_INTERFACE_VERSION == 8003\n\nChanges (w.r.t. Intel TBB 4.3 Update 2):\n\n- Move constructor and assignment operator were added to unique_lock.\n\nPreview Features:\n\n- Time overhead for memory pool destruction was reduced.\n\nOpen-source contributions integrated:\n\n- Build error fix for iOS* by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 2\nTBB_INTERFACE_VERSION == 8002\n\nChanges (w.r.t. Intel TBB 4.3 Update 1):\n\n- Binary files for 64-bit Android* applications were added as part of the\n    Linux* OS package.\n- Exact exception propagation is enabled for Intel C++ Compiler on OS X*.\n- concurrent_vector::shrink_to_fit was optimized for types that support\n    C++11 move semantics.\n\nBugs fixed:\n\n- Fixed concurrent unordered containers to insert elements much faster\n    in debug mode.\n- Fixed concurrent priority queue to support types that do not have\n    copy constructors.\n- Fixed enumerable_thread_specific to forbid copying from an instance\n    with a different value type.\n\nOpen-source contributions integrated:\n\n- Support for PathScale* EKOPath* Compiler by Erik Lindahl.\n\n------------------------------------------------------------------------\nIntel TBB 4.3 Update 1\nTBB_INTERFACE_VERSION == 8001\n\nChanges (w.r.t. Intel TBB 4.3):\n\n- The ability to split blocked_ranges in a proportion, used by\n    affinity_partitioner since version 4.2 Update 4, became a formal\n    extension of the Range concept.\n- More checks for an incorrect address to release added to the debug\n    version of the memory allocator.\n- Different kind of solutions for each TBB example were merged.\n\nPreview Features:\n\n- Task priorities are re-enabled in preview binaries.\n\nBugs fixed:\n\n- Fixed a duplicate symbol when TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE is\n    used in multiple compilation units.\n- Fixed a crash in __itt_fini_ittlib seen on Ubuntu 14.04.\n- Fixed a crash in memory release after dynamic replacement of the\n    OS X* memory allocator.\n- Fixed incorrect indexing of arrays in seismic example.\n- Fixed a data race in lazy initialization of task_arena.\n\nOpen-source contributions integrated:\n\n- Fix for dumping information about gcc and clang compiler versions\n    by Misty De Meo.\n\n------------------------------------------------------------------------\nIntel TBB 4.3\nTBB_INTERFACE_VERSION == 8000\n\nChanges (w.r.t. Intel TBB 4.2 Update 5):\n\n- The following features are now fully supported: flow::indexer_node,\n    task_arena, speculative_spin_rw_mutex.\n- Compatibility with C++11 standard improved for tbb/compat/thread\n    and tbb::mutex.\n- C++11 move constructors have been added to concurrent_queue and\n    concurrent_bounded_queue.\n- C++11 move constructors and assignment operators have been added to\n    concurrent_vector, concurrent_hash_map, concurrent_priority_queue,\n    concurrent_unordered_{set,multiset,map,multimap}.\n- C++11 move-aware emplace/push/pop methods have been added to\n    concurrent_vector, concurrent_queue, concurrent_bounded_queue,\n    concurrent_priority_queue.\n- Methods to insert a C++11 initializer list have been added:\n    concurrent_vector::grow_by(), concurrent_hash_map::insert(),\n    concurrent_unordered_{set,multiset,map,multimap}::insert().\n- Testing for compatibility of containers with some C++11 standard\n    library types has been added.\n- Dynamic replacement of standard memory allocation routines has been\n    added for OS X*.\n- Microsoft* Visual Studio* projects for Intel TBB examples updated\n    to VS 2010.\n- For open-source packages, debugging information (line numbers) in\n    precompiled binaries now matches the source code.\n- Debug information was added to release builds for OS X*, Solaris*,\n    FreeBSD* operating systems and MinGW*.\n- Various improvements in documentation, debug diagnostics and examples.\n\nPreview Features:\n\n- Additional actions on reset of graphs, and extraction of individual\n    nodes from a graph (TBB_PREVIEW_FLOW_GRAPH_FEATURES).\n- Support for an arbitrary number of arguments in parallel_invoke\n   (TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE).\n\nChanges affecting backward compatibility:\n\n- For compatibility with C++11 standard, copy and move constructors and\n    assignment operators are disabled for all mutex classes. To allow\n    the old behavior, use TBB_DEPRECATED_MUTEX_COPYING macro.\n- flow::sequencer_node rejects messages with repeating sequence numbers.\n- Changed internal interface between tbbmalloc and tbbmalloc_proxy.\n- Following deprecated functionality has been removed:\n    old debugging macros TBB_DO_ASSERT & TBB_DO_THREADING_TOOLS;\n    no-op depth-related methods in class task;\n    tbb::deprecated::concurrent_queue;\n    deprecated variants of concurrent_vector methods.\n- register_successor() and remove_successor() are deprecated as methods\n    to add and remove edges in flow::graph; use make_edge() and\n    remove_edge() instead.\n\nBugs fixed:\n\n- Fixed incorrect scalable_msize() implementation for aligned objects.\n- Flow graph buffering nodes now destroy their copy of forwarded items.\n- Multiple fixes in task_arena implementation, including for:\n    inconsistent task scheduler state inside executed functions;\n    incorrect floating-point settings and exception propagation;\n    possible stalls in concurrent invocations of execute().\n- Fixed floating-point settings propagation when the same instance of\n    task_group_context is used in different arenas.\n- Fixed compilation error in pipeline.h with Intel Compiler on OS X*.\n- Added missed headers for individual components to tbb.h.\n\nOpen-source contributions integrated:\n\n- Range interface addition to parallel_do, parallel_for_each and\n    parallel_sort by Stephan Dollberg.\n- Variadic template implementation of parallel_invoke\n    by Kizza George Mbidde (see Preview Features).\n- Improvement in Seismic example for MacBook Pro* with Retina* display\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 5\nTBB_INTERFACE_VERSION == 7005\n\nChanges (w.r.t. Intel TBB 4.2 Update 4):\n\n- The second template argument of class aligned_space<T,N> now is set\n    to 1 by default.\n\nPreview Features:\n\n- Better support for exception safety, task priorities and floating\n    point settings in class task_arena.\n- task_arena::current_slot() has been renamed to\n    task_arena::current_thread_index().\n\nBugs fixed:\n\n- Task priority change possibly ignored by a worker thread entering\n    a nested parallel construct.\n- Memory leaks inside the task scheduler when running on\n    Intel(R) Xeon Phi(tm) coprocessor.\n\nOpen-source contributions integrated:\n\n- Improved detection of X Window support for Intel TBB examples\n    and other feedback by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 4\nTBB_INTERFACE_VERSION == 7004\n\nChanges (w.r.t. Intel TBB 4.2 Update 3):\n\n- Added possibility to specify floating-point settings at invocation\n    of most parallel algorithms (including flow::graph) via\n    task_group_context.\n- Added dynamic replacement of malloc_usable_size() under\n    Linux*/Android* and dlmalloc_usable_size() under Android*.\n- Added new methods to concurrent_vector:\n    grow_by() that appends a sequence between two given iterators;\n    grow_to_at_least() that initializes new elements with a given value.\n- Improved affinity_partitioner for better performance on balanced\n    workloads.\n- Improvements in the task scheduler, including better scalability\n    when threads search for a task arena, and better diagnostics.\n- Improved allocation performance for workloads that do intensive\n    allocation/releasing of same-size objects larger than ~8KB from\n    multiple threads.\n- Exception support is enabled by default for 32-bit MinGW compilers.\n- The tachyon example for Android* can be built for all targets\n    supported by the installed NDK.\n- Added Windows Store* version of the tachyon example.\n- GettingStarted/sub_string_finder example ported to offload execution\n    on Windows* for Intel(R) Many Integrated Core Architecture.\n\nPreview Features:\n\n- Removed task_scheduler_observer::on_scheduler_leaving() callback.\n- Added task_scheduler_observer::may_sleep() callback.\n- The CPF or_node has been renamed indexer_node. The input to\n    indexer_node is now a list of types. The output of indexer_node is\n    a tagged_msg type composed of a tag and a value. For indexer_node,\n    the tag is a size_t.\n\nBugs fixed:\n\n- Fixed data races in preview extensions of task_scheduler_observer.\n- Added noexcept(false) for destructor of task_group_base to avoid\n    crash on cancelation of structured task group in C++11.\n\nOpen-source contributions integrated:\n\n- Improved concurrency detection for BG/Q, and other improvements\n    by Raf Schietekat.\n- Fix for crashes in enumerable_thread_specific in case if a contained\n    object is too big to be constructed on the stack by Adrien Guinet.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 3\nTBB_INTERFACE_VERSION == 7003\n\nChanges (w.r.t. Intel TBB 4.2 Update 2):\n\n- Added support for Microsoft* Visual Studio* 2013.\n- Improved Microsoft* PPL-compatible form of parallel_for for better \n    support of auto-vectorization.\n- Added a new example for cancellation and reset in the flow graph:\n    Kohonen self-organizing map (examples/graph/som).\n- Various improvements in source code, tests, and makefiles.\n\nBugs fixed:\n\n- Added dynamic replacement of _aligned_msize() previously missed.\n- Fixed task_group::run_and_wait() to throw invalid_multiple_scheduling\n    exception if the specified task handle is already scheduled.\n\nOpen-source contributions integrated:\n\n- A fix for ARM* processors by Steve Capper.\n- Improvements in std::swap calls by Robert Maynard.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 2\nTBB_INTERFACE_VERSION == 7002\n\nChanges (w.r.t. Intel TBB 4.2 Update 1):\n\n- Enable C++11 features for Microsoft* Visual Studio* 2013 Preview.\n- Added a test for compatibility of TBB containers with C++11\n    range-based for loop.\n\nChanges affecting backward compatibility:\n\n- Internal layout changed for class tbb::flow::limiter_node.\n\nPreview Features:\n\n- Added speculative_spin_rw_mutex, a read-write lock class which uses\n    Intel(R) Transactional Synchronization Extensions.\n\nBugs fixed:\n\n- When building for Intel(R) Xeon Phi(tm) coprocessor, TBB programs\n    no longer require explicit linking with librt and libpthread.\n\nOpen-source contributions integrated:\n\n- Fixes for ARM* processors by Steve Capper, Leif Lindholm\n    and Steven Noonan.\n- Support for Clang on Linux by Raf Schietekat.\n- Typo correction in scheduler.cpp by Julien Schueller.\n\n------------------------------------------------------------------------\nIntel TBB 4.2 Update 1\nTBB_INTERFACE_VERSION == 7001\n\nChanges (w.r.t. Intel TBB 4.2):\n\n- Added project files for Microsoft* Visual Studio* 2010.\n- Initial support of Microsoft* Visual Studio* 2013 Preview.\n- Enable C++11 features available in Intel(R) C++ Compiler 14.0.\n- scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, <size>) can be\n    used to urge releasing memory from tbbmalloc internal buffers when\n    the given limit is exceeded.\n\nPreview Features:\n\n- Class task_arena no longer requires linking with a preview library,\n    though still remains a community preview feature.\n- The method task_arena::wait_until_empty() is removed.\n- The method task_arena::current_slot() now returns -1 if \n    the task scheduler is not initialized in the thread.\n\nChanges affecting backward compatibility:\n\n- Because of changes in internal layout of graph nodes, the namespace\n    interface number of flow::graph has been incremented from 6 to 7.\n\nBugs fixed:\n\n- Fixed a race in lazy initialization of task_arena.\n- Fixed flow::graph::reset() to prevent situations where tasks would be\n    spawned in the process of resetting the graph to its initial state.\n- Fixed decrement bug in limiter_node.\n- Fixed a race in arc deletion in the flow graph.\n\nOpen-source contributions integrated:\n\n- Improved support for IBM* Blue Gene* by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.2\nTBB_INTERFACE_VERSION == 7000\n\nChanges (w.r.t. Intel TBB 4.1 Update 4):\n\n- Added speculative_spin_mutex, which uses Intel(R) Transactional\n    Synchronization Extensions when they are supported by hardware.\n- Binary files linked with libc++ (the C++ standard library in Clang)\n    were added on OS X*.\n- For OS X* exact exception propagation is supported with Clang;\n    it requires use of libc++ and corresponding Intel TBB binaries.\n- Support for C++11 initializer lists in constructor and assigment\n    has been added to concurrent_hash_map, concurrent_unordered_set,\n    concurrent_unordered_multiset, concurrent_unordered_map,\n    concurrent_unordered_multimap.\n- The memory allocator may now clean its per-thread memory caches\n    when it cannot get more memory.\n- Added the scalable_allocation_command() function for on-demand\n    cleaning of internal memory caches.\n- Reduced the time overhead for freeing memory objects smaller than ~8K.\n- Simplified linking with the debug library for applications that use\n    Intel TBB in code offloaded to Intel(R) Xeon Phi(tm) coprocessors.\n    See an example in\n    examples/GettingStarted/sub_string_finder/Makefile.\n- Various improvements in source code, scripts and makefiles.\n\nChanges affecting backward compatibility:\n\n- tbb::flow::graph has been modified to spawn its tasks;\n    the old behaviour (task enqueuing) is deprecated. This change may\n    impact applications that expected a flow graph to make progress\n    without calling wait_for_all(), which is no longer guaranteed. See\n    the documentation for more details.\n- Changed the return values of the scalable_allocation_mode() function.\n\nBugs fixed:\n\n- Fixed a leak of parallel_reduce body objects when execution is\n    cancelled or an exception is thrown, as suggested by Darcy Harrison.\n- Fixed a race in the task scheduler which can lower the effective\n    priority despite the existence of higher priority tasks.\n- On Linux an error during destruction of the internal thread local\n    storage no longer results in an exception.\n\nOpen-source contributions integrated:\n\n- Fixed task_group_context state propagation to unrelated context trees\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 4\nTBB_INTERFACE_VERSION == 6105\n\nChanges (w.r.t. Intel TBB 4.1 Update 3):\n\n- Use /volatile:iso option with VS 2012 to disable extended\n    semantics for volatile variables.\n- Various improvements in affinity_partitioner, scheduler,\n    tests, examples, makefiles.\n- Concurrent_priority_queue class now supports initialization/assignment\n    via C++11 initializer list feature (std::initializer_list<T>).\n\nBugs fixed:\n\n- Fixed more possible stalls in concurrent invocations of\n    task_arena::execute(), especially waiting for enqueued tasks.\n- Fixed requested number of workers for task_arena(P,0).\n- Fixed interoperability with Intel(R) VTune(TM) Amplifier XE in\n    case of using task_arena::enqueue() from a terminating thread.\n\nOpen-source contributions integrated:\n\n- Type fixes, cleanups, and code beautification by Raf Schietekat.\n- Improvements in atomic operations for big endian platforms\n    by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 3\nTBB_INTERFACE_VERSION == 6103\n\nChanges (w.r.t. Intel TBB 4.1 Update 2):\n\n- Binary files for Android* applications were added to the Linux* OS\n    package.\n- Binary files for Windows Store* applications were added to the\n    Windows* OS package.\n- Exact exception propagation (exception_ptr) support on Linux OS is\n    now turned on by default for GCC 4.4 and higher.\n- Stopped implicit use of large memory pages by tbbmalloc (Linux-only).\n    Now use of large pages must be explicitly enabled with\n    scalable_allocation_mode() function or TBB_MALLOC_USE_HUGE_PAGES\n    environment variable.\n\nCommunity Preview Features:\n\n- Extended class task_arena constructor and method initialize() to\n    allow some concurrency to be reserved strictly for application\n    threads.\n- New methods terminate() and is_active() were added to class\n    task_arena.\n\nBugs fixed:\n\n- Fixed initialization of hashing helper constant in the hash\n    containers.\n- Fixed possible stalls in concurrent invocations of\n    task_arena::execute() when no worker thread is available to make\n    progress.\n- Fixed incorrect calculation of hardware concurrency in the presence\n    of inactive processor groups, particularly on systems running\n    Windows* 8 and Windows* Server 2012.\n\nOpen-source contributions integrated:\n\n- The fix for the GUI examples on OS X* systems by Raf Schietekat.\n- Moved some power-of-2 calculations to functions to improve readability\n    by Raf Schietekat.\n- C++11/Clang support improvements by arcata.\n- ARM* platform isolation layer by Steve Capper, Leif Lindholm, Leo Lara\n    (ARM).\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 2\nTBB_INTERFACE_VERSION == 6102\n\nChanges (w.r.t. Intel TBB 4.1 Update 1):\n\n- Objects up to 128 MB are now cached by the tbbmalloc. Previously\n    the threshold was 8MB. Objects larger than 128 MB are still\n    processed by direct OS calls.\n- concurrent_unordered_multiset and concurrent_unordered_multimap\n    have been added, based on Microsoft* PPL prototype.\n- Ability to value-initialize a tbb::atomic<T> variable on construction\n    in C++11, with const expressions properly supported.\n\nCommunity Preview Features:\n\n- Added a possibility to wait until all worker threads terminate.\n    This is necessary before calling fork() from an application.\n\nBugs fixed:\n\n- Fixed data race in tbbmalloc that might lead to memory leaks\n    for large object allocations.\n- Fixed task_arena::enqueue() to use task_group_context of target arena.\n- Improved implementation of 64 bit atomics on ia32.\n\n------------------------------------------------------------------------\nIntel TBB 4.1 Update 1\nTBB_INTERFACE_VERSION == 6101\n\nChanges (w.r.t. Intel TBB 4.1):\n\n- concurrent_vector class now supports initialization/assignment\n    via C++11 initializer list feature (std::initializer_list<T>)\n- Added implementation of the platform isolation layer based on\n    Intel compiler atomic built-ins; it is supposed to work on\n    any platform supported by compiler version 12.1 and newer.\n- Using GetNativeSystemInfo() instead of GetSystemInfo() to support\n    more than 32 processors for 32-bit applications under WOW64.\n- The following form of parallel_for: \n    parallel_for(first, last, [step,] f[, context]) now accepts an\n    optional partitioner parameter after the function f.\n\nBackward-incompatible API changes:\n\n- The library no longer injects tuple in to namespace std.\n    In previous releases, tuple was injected into namespace std by\n    flow_graph.h when std::tuple was not available.  In this release,\n    flow_graph.h now uses tbb::flow::tuple.  On platforms where\n    std::tuple is available, tbb::flow::tuple is typedef'ed to\n    std::tuple.  On all other platforms, tbb::flow::tuple provides\n    a subset of the functionality defined by std::tuple. Users of\n    flow_graph.h may need to change their uses of std::tuple to\n    tbb::flow::tuple to ensure compatibility with non-C++11 compliant\n    compilers.\n\nBugs fixed:\n\n- Fixed local observer to be able to override propagated CPU state and\n    to provide correct value of task_arena::current_slot() in callbacks.\n\n------------------------------------------------------------------------\nIntel TBB 4.1\nTBB_INTERFACE_VERSION == 6100\n\nChanges (w.r.t. Intel TBB 4.0 Update 5):\n\n- _WIN32_WINNT must be set to 0x0501 or greater in order to use TBB\n    on Microsoft* Windows*.\n- parallel_deterministic_reduce template function is fully supported.\n- TBB headers can be used with C++0x/C++11 mode (-std=c++0x) of GCC\n    and Intel(R) Compiler.\n- C++11 std::make_exception_ptr is used where available, instead of\n    std::copy_exception from earlier C++0x implementations.\n- Improvements in the TBB allocator to reduce extra memory consumption.\n- Partial refactoring of the task scheduler data structures.\n- TBB examples allow more flexible specification of the thread number,\n    including arithmetic and geometric progression.\n\nBugs fixed:\n\n- On Linux & OS X*, pre-built TBB binaries do not yet support exact\n    exception propagation via C++11 exception_ptr. To prevent run time\n    errors, by default TBB headers disable exact exception propagation\n    even if the C++ implementation provides exception_ptr.\n\nCommunity Preview Features:\n\n- Added: class task_arena, for work submission by multiple application\n    threads with thread-independent control of concurrency level.\n- Added: task_scheduler_observer can be created as local to a master\n    thread, to observe threads that work on behalf of that master.\n    Local observers may have new on_scheduler_leaving() callback.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 5\nTBB_INTERFACE_VERSION == 6005\n\nChanges (w.r.t. Intel TBB 4.0 Update 4):\n\n- Parallel pipeline optimization (directly storing small objects in the\n    interstage data buffers) limited to trivially-copyable types for\n    C++11 and a short list of types for earlier compilers.\n- _VARIADIC_MAX switch is honored for TBB tuple implementation\n    and flow::graph nodes based on tuple.\n- Support of Cocoa framework was added to the GUI examples on OS X*\n    systems.\n\nBugs fixed:\n\n- Fixed a tv_nsec overflow bug in condition_variable::wait_for. \n- Fixed execution order of enqueued tasks with different priorities.\n- Fixed a bug with task priority changes causing lack of progress\n    for fire-and-forget tasks when TBB was initialized to use 1 thread.\n- Fixed duplicate symbol problem when linking multiple compilation\n    units that include flow_graph.h on VC 10.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 4\nTBB_INTERFACE_VERSION == 6004\n\nChanges (w.r.t. Intel TBB 4.0 Update 3):\n\n- The TBB memory allocator transparently supports large pages on Linux.\n- A new flow_graph example, logic_sim, was added.\n- Support for DirectX* 9 was added to GUI examples.\n\nCommunity Preview Features:\n\n- Added: aggregator, a new concurrency control mechanism.\n\nBugs fixed:\n\n- The abort operation on concurrent_bounded_queue now leaves the queue\n    in a reusable state. If a bad_alloc or bad_last_alloc exception is\n    thrown while the queue is recovering from an abort, that exception\n    will be reported instead of user_abort on the thread on which it\n    occurred, and the queue will not be reusable.\n- Steal limiting heuristic fixed to avoid premature stealing disabling\n    when large amount of __thread data is allocated on thread stack.\n- Fixed a low-probability leak of arenas in the task scheduler.\n- In STL-compatible allocator classes, the method construct() was fixed\n    to comply with C++11 requirements.\n- Fixed a bug that prevented creation of fixed-size memory pools\n    smaller than 2M.\n- Significantly reduced the amount of warnings from various compilers.\n\nOpen-source contributions integrated:\n\n- Multiple improvements by Raf Schietekat.\n- Basic support for Clang on OS X* by Blas Rodriguez Somoza.\n- Fixes for warnings and corner-case bugs by Blas Rodriguez Somoza\n    and Edward Lam.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 3\nTBB_INTERFACE_VERSION == 6003\n\nChanges (w.r.t. Intel TBB 4.0 Update 2):\n\n- Modifications to the low-level API for memory pools:\n    added support for aligned allocations;\n    pool policies reworked to allow backward-compatible extensions;\n    added a policy to not return memory space till destruction;\n    pool_reset() does not return memory space anymore.\n- Class tbb::flow::graph_iterator added to iterate over all nodes\n    registered with a graph instance.\n- multioutput_function_node has been renamed multifunction_node.\n    multifunction_node and split_node are now fully-supported features.\n- For the tagged join node, the policy for try_put of an item with\n    already existing tag has been defined: the item will be rejected.\n- Matching the behavior on Windows, on other platforms the optional\n    shared libraries (libtbbmalloc, libirml) now are also searched\n    only in the directory where libtbb is located.\n- The platform isolation layer based on GCC built-ins is extended.\n\nBackward-incompatible API changes:\n\n- a graph reference parameter is now required to be passed to the\n    constructors of the following flow graph nodes: overwrite_node, \n    write_once_node, broadcast_node, and the CPF or_node.\n- the following tbb::flow node methods and typedefs have been renamed:\n       Old                             New\n    join_node and or_node:\n       inputs()                 ->     input_ports()\n       input_ports_tuple_type   ->     input_ports_type\n    multifunction_node and split_node:\n       ports_type               ->     output_ports_type\n\nBugs fixed:\n\n- Not all logical processors were utilized on systems with more than\n    64 cores split by Windows into several processor groups.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 6002\n\nChanges (w.r.t. Intel TBB 4.0 Update 1 commercial-aligned release):\n\n- concurrent_bounded_queue now has an abort() operation that releases \n    threads involved in pending push or pop operations. The released \n    threads will receive a tbb::user_abort exception.\n- Added Community Preview Feature:  concurrent_lru_cache container, \n    a concurrent implementation of LRU (least-recently-used) cache.\n\nBugs fixed:\n\n- fixed a race condition in the TBB scalable allocator.\n- concurrent_queue counter wraparound bug was fixed, which occurred when\n    the number of push and pop operations exceeded ~>4 billion on IA32.\n- fixed races in the TBB scheduler that could put workers asleep too\n    early, especially in presence of affinitized tasks.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 6000 (forgotten to increment)\n\nChanges (w.r.t. Intel TBB 4.0 commercial-aligned release):\n\n- Memory leaks fixed in binpack example.\n- Improvements and fixes in the TBB allocator.\n\n------------------------------------------------------------------------\nIntel TBB 4.0 commercial-aligned release\nTBB_INTERFACE_VERSION == 6000\n\nChanges (w.r.t. Intel TBB 3.0 Update 8 commercial-aligned release):\n\n- concurrent_priority_queue is now a fully supported feature.\n    Capacity control methods were removed.\n- Flow graph is now a fully supported feature.\n- A new memory backend has been implemented in the TBB allocator.\n    It can reuse freed memory for both small and large objects, and\n    returns unused memory blocks to the OS more actively.\n- Improved partitioning algorithms for parallel_for and parallel_reduce\n    to better handle load imbalance.\n- The convex_hull example has been refactored for reproducible\n    performance results.\n- The major interface version has changed from 5 to 6.\n    Deprecated interfaces might be removed in future releases.\n\nCommunity Preview Features:\n\n- Added: serial subset, i.e. sequential implementations of TBB generic\n    algorithms (currently, only provided for parallel_for).\n- Preview of new flow graph nodes:\n    or_node (accepts multiple inputs, forwards each input separately\n      to all successors),\n    split_node (accepts tuples, and forwards each element of a tuple\n      to a corresponding successor), and\n    multioutput_function_node (accepts one input, and passes the input\n    and a tuple of output ports to the function body to support outputs\n    to multiple successors).\n- Added: memory pools for more control on memory source, grouping,\n    and collective deallocation.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 8 commercial-aligned release\nTBB_INTERFACE_VERSION == 5008\n\nChanges (w.r.t. Intel TBB 3.0 Update 7 commercial-aligned release):\n\n- Task priorities become an official feature of TBB,\n    not community preview as before.\n- Atomics API extended, and implementation refactored.\n- Added task::set_parent() method.\n- Added concurrent_unordered_set container.\n\nOpen-source contributions integrated:\n\n- PowerPC support by Raf Schietekat.\n- Fix of potential task pool overrun and other improvements\n    in the task scheduler by Raf Schietekat.\n- Fix in parallel_for_each to work with std::set in Visual* C++ 2010.\n\nCommunity Preview Features:\n\n- Graph community preview feature was renamed to flow graph.\n    Multiple improvements in the implementation.\n    Binpack example was added for the feature.\n- A number of improvements to concurrent_priority_queue.\n    Shortpath example was added for the feature.\n- TBB runtime loaded functionality was added (Windows*-only).\n    It allows to specify which versions of TBB should be used,\n    as well as to set directories for the library search.\n- parallel_deterministic_reduce template function was added.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 7 commercial-aligned release\nTBB_INTERFACE_VERSION == 5006 (forgotten to increment)\n\nChanges (w.r.t. Intel TBB 3.0 Update 6 commercial-aligned release):\n\n- Added implementation of the platform isolation layer based on \n    GCC atomic built-ins; it is supposed to work on any platform \n    where GCC has these built-ins.\n\nCommunity Preview Features:\n\n- Graph's dining_philosophers example added.\n- A number of improvements to graph and concurrent_priority_queue.\n\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 6 commercial-aligned release\nTBB_INTERFACE_VERSION == 5006\n\nChanges (w.r.t. Intel TBB 3.0 Update 5 commercial-aligned release):\n\n- Added Community Preview feature: task and task group priority, and\n    Fractal example demonstrating it.\n- parallel_pipeline optimized for data items of small and large sizes.\n- Graph's join_node is now parametrized with a tuple of up to 10 types.\n- Improved performance of concurrent_priority_queue.\n\nOpen-source contributions integrated:\n\n- Initial NetBSD support by Aleksej Saushev.\n\nBugs fixed:\n\n- Failure to enable interoperability with Intel(R) Cilk(tm) Plus runtime\n    library, and a crash caused by invoking the interoperability layer\n    after one of the libraries was unloaded.\n- Data race that could result in concurrent_unordered_map structure\n    corruption after call to clear() method.\n- Stack corruption caused by PIC version of 64-bit CAS compiled by Intel\n    compiler on Linux.\n- Inconsistency of exception propagation mode possible when application\n    built with Microsoft* Visual Studio* 2008 or earlier uses TBB built\n    with Microsoft* Visual Studio* 2010.\n- Affinitizing master thread to a subset of available CPUs after TBB\n    scheduler was initialized tied all worker threads to the same CPUs.\n- Method is_stolen_task() always returned 'false' for affinitized tasks.\n- write_once_node and overwrite_node did not immediately send buffered\n    items to successors\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 5 commercial-aligned release\nTBB_INTERFACE_VERSION == 5005\n\nChanges (w.r.t. Intel TBB 3.0 Update 4 commercial-aligned release):\n\n- Added Community Preview feature: graph.\n- Added automatic propagation of master thread FPU settings to\n    TBB worker threads.\n- Added a public function to perform a sequentially consistent full\n    memory fence: tbb::atomic_fence() in tbb/atomic.h.\n\nBugs fixed:\n\n- Data race that could result in scheduler data structures corruption\n    when using fire-and-forget tasks.\n- Potential referencing of destroyed concurrent_hash_map element after\n    using erase(accessor&A) method with A acquired as const_accessor.\n- Fixed a correctness bug in the convex hull example.\n\nOpen-source contributions integrated:\n\n- Patch for calls to internal::atomic_do_once() by Andrey Semashev.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 4 commercial-aligned release\nTBB_INTERFACE_VERSION == 5004\n\nChanges (w.r.t. Intel TBB 3.0 Update 3 commercial-aligned release):\n\n- Added Community Preview feature: concurrent_priority_queue.\n- Fixed library loading to avoid possibility for remote code execution,\n    see http://www.microsoft.com/technet/security/advisory/2269637.mspx.\n- Added support of more than 64 cores for appropriate Microsoft*\n    Windows* versions. For more details, see \n    http://msdn.microsoft.com/en-us/library/dd405503.aspx.\n- Default number of worker threads is adjusted in accordance with \n    process affinity mask.\n\nBugs fixed:\n\n- Calls of scalable_* functions from inside the allocator library\n    caused issues if the functions were overridden by another module.\n- A crash occurred if methods run() and wait() were called concurrently\n    for an empty tbb::task_group (1736).\n- The tachyon example exhibited build problems associated with\n    bug 554339 on Microsoft* Visual Studio* 2010. Project files were\n    modified as a partial workaround to overcome the problem. See\n    http://connect.microsoft.com/VisualStudio/feedback/details/554339.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 3 commercial-aligned release\nTBB_INTERFACE_VERSION == 5003\n\nChanges (w.r.t. Intel TBB 3.0 Update 2 commercial-aligned release):\n\n- cache_aligned_allocator class reworked to use scalable_aligned_malloc.\n- Improved performance of count() and equal_range() methods\n    in concurrent_unordered_map.\n- Improved implementation of 64-bit atomic loads and stores on 32-bit\n    platforms, including compilation with VC 7.1.\n- Added implementation of atomic operations on top of OSAtomic API\n    provided by OS X*.\n- Removed gratuitous try/catch blocks surrounding thread function calls\n  in tbb_thread.\n- Xcode* projects were added for sudoku and game_of_life examples.\n- Xcode* projects were updated to work without TBB framework.\n\nBugs fixed:\n\n- Fixed a data race in task scheduler destruction that on rare occasion\n    could result in memory corruption.\n- Fixed idle spinning in thread bound filters in tbb::pipeline (1670).\n\nOpen-source contributions integrated:\n\n- MinGW-64 basic support by brsomoza (partially).\n- Patch for atomic.h by Andrey Semashev.\n- Support for AIX & GCC on PowerPC by Giannis Papadopoulos.\n- Various improvements by Raf Schietekat.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 5002\n\nChanges (w.r.t. Intel TBB 3.0 Update 1 commercial-aligned release):\n\n- Destructor of tbb::task_group class throws missing_wait exception\n    if there are tasks running when it is invoked.\n- Interoperability layer with Intel Cilk Plus runtime library added\n    to protect TBB TLS in case of nested usage with Intel Cilk Plus.\n- Compilation fix for dependent template names in concurrent_queue.\n- Memory allocator code refactored to ease development and maintenance.\n\nBugs fixed:\n\n- Improved interoperability with other Intel software tools on Linux in\n    case of dynamic replacement of memory allocator (1700)\n- Fixed install issues that prevented installation on\n    Mac OS* X 10.6.4 (1711).\n\n------------------------------------------------------------------------\nIntel TBB 3.0 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 5000 (forgotten to increment)\n\nChanges (w.r.t. Intel TBB 3.0 commercial-aligned release):\n\n- Decreased memory fragmentation by allocations bigger than 8K.\n- Lazily allocate worker threads, to avoid creating unnecessary stacks.\n\nBugs fixed:\n\n- TBB allocator used much more memory than malloc (1703) - see above.\n- Deadlocks happened in some specific initialization scenarios\n    of the TBB allocator (1701, 1704).\n- Regression in enumerable_thread_specific: excessive requirements\n    for object constructors.\n- A bug in construction of parallel_pipeline filters when body instance\n    was a temporary object.\n- Incorrect usage of memory fences on PowerPC and XBOX360 platforms.\n- A subtle issue in task group context binding that could result\n    in cancelation signal being missed by nested task groups.\n- Incorrect construction of concurrent_unordered_map if specified\n    number of buckets is not power of two.\n- Broken count() and equal_range() of concurrent_unordered_map.\n- Return type of postfix form of operator++ for hash map's iterators.\n\n------------------------------------------------------------------------\nIntel TBB 3.0 commercial-aligned release\nTBB_INTERFACE_VERSION == 5000\n\nChanges (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):\n\n- All open-source-release changes down to TBB 2.2 U3 below\n    were incorporated into this release.\n\n------------------------------------------------------------------------\n20100406 open-source release\n\nChanges (w.r.t. 20100310 open-source release):\n\n- Added support for Microsoft* Visual Studio* 2010, including binaries.\n- Added a PDF file with recommended Design Patterns for TBB.\n- Added parallel_pipeline function and companion classes and functions\n    that provide a strongly typed lambda-friendly pipeline interface.\n- Reworked enumerable_thread_specific to use a custom implementation of\n    hash map that is more efficient for ETS usage models.\n- Added example for class task_group; see examples/task_group/sudoku.\n- Removed two examples, as they were long outdated and superceded:\n    pipeline/text_filter (use pipeline/square);\n    parallel_while/parallel_preorder (use parallel_do/parallel_preorder).\n- PDF documentation updated.\n- Other fixes and changes in code, tests, and examples.\n\nBugs fixed:\n\n- Eliminated build errors with MinGW32.\n- Fixed post-build step and other issues in VS projects for examples.\n- Fixed discrepancy between scalable_realloc and scalable_msize that\n    caused crashes with malloc replacement on Windows.\n\n------------------------------------------------------------------------\n20100310 open-source release\n\nChanges (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):\n\n- Version macros changed in anticipation of a future release.\n- Directory structure aligned with Intel(R) C++ Compiler;\n    now TBB binaries reside in <arch>/<os_key>/[bin|lib]\n    (in TBB 2.x, it was [bin|lib]/<arch>/<os_key>).\n- Visual Studio projects changed for examples: instead of separate set\n    of files for each VS version, now there is single 'msvs' directory\n    that contains workspaces for MS C++ compiler (<example>_cl.sln) and\n    Intel C++ compiler (<example>_icl.sln). Works with VS 2005 and above.\n- The name versioning scheme for backward compatibility was improved;\n    now compatibility-breaking changes are done in a separate namespace.\n- Added concurrent_unordered_map implementation based on a prototype\n    developed in Microsoft for a future version of PPL.\n- Added PPL-compatible writer-preference RW lock (reader_writer_lock).\n- Added TBB_IMPLEMENT_CPP0X macro to control injection of C++0x names\n    implemented in TBB into namespace std.\n- Added almost-C++0x-compatible std::condition_variable, plus a bunch\n    of other C++0x classes required by condition_variable.\n- With TBB_IMPLEMENT_CPP0X, tbb_thread can be also used as std::thread.\n- task.cpp was split into several translation units to structure\n    TBB scheduler sources layout. Static data layout and library\n    initialization logic were also updated.\n- TBB scheduler reworked to prevent master threads from stealing\n    work belonging to other masters.\n- Class task was extended with enqueue() method, and slightly changed\n    semantics of methods spawn() and destroy(). For exact semantics,\n    refer to TBB Reference manual.\n- task_group_context now allows for destruction by non-owner threads.\n- Added TBB_USE_EXCEPTIONS macro to control use of exceptions in TBB\n    headers. It turns off (i.e. sets to 0) automatically if specified\n    compiler options disable exception handling.\n- TBB is enabled to run on top of Microsoft's Concurrency Runtime\n    on Windows* 7 (via our worker dispatcher known as RML).\n- Removed old unused busy-waiting code in concurrent_queue.\n- Described the advanced build & test options in src/index.html.\n- Warning level for GCC raised with -Wextra and a few other options.\n- Multiple fixes and improvements in code, tests, examples, and docs.\n\nOpen-source contributions integrated:\n\n- Xbox support by Roman Lut (Deep Shadows), though further changes are\n    required to make it working; e.g. post-2.1 entry points are missing.\n- \"Eventcount\" by Dmitry Vyukov evolved into concurrent_monitor,\n    an internal class used in the implementation of concurrent_queue.\n\n------------------------------------------------------------------------\nIntel TBB 2.2 Update 3 commercial-aligned release\nTBB_INTERFACE_VERSION == 4003\n\nChanges (w.r.t. Intel TBB 2.2 Update 2 commercial-aligned release):\n\n- PDF documentation updated.\n\nBugs fixed:\n\n- concurrent_hash_map compatibility issue exposed on Linux in case\n    two versions of the container were used by different modules.\n- enforce 16 byte stack alignment for consistence with GCC; required\n    to work correctly with 128-bit variables processed by SSE.\n- construct() methods of allocator classes now use global operator new.\n\n------------------------------------------------------------------------\nIntel TBB 2.2 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 4002\n\nChanges (w.r.t. Intel TBB 2.2 Update 1 commercial-aligned release):\n\n- parallel_invoke and parallel_for_each now take function objects\n    by const reference, not by value.\n- Building TBB with /MT is supported, to avoid dependency on particular\n    versions of Visual C++* runtime DLLs. TBB DLLs built with /MT\n    are located in vc_mt directory.\n- Class critical_section introduced.\n- Improvements in exception support: new exception classes introduced,\n    all exceptions are thrown via an out-of-line internal method.\n- Improvements and fixes in the TBB allocator and malloc replacement,\n    including robust memory identification, and more reliable dynamic\n    function substitution on Windows*.\n- Method swap() added to class tbb_thread.\n- Methods rehash() and bucket_count() added to concurrent_hash_map.\n- Added support for Visual Studio* 2010 Beta2. No special binaries\n    provided, but CRT-independent DLLs (vc_mt) should work.\n- Other fixes and improvements in code, tests, examples, and docs.\n\nOpen-source contributions integrated:\n\n- The fix to build 32-bit TBB on Mac OS* X 10.6.\n- GCC-based port for SPARC Solaris by Michailo Matijkiw, with use of\n    earlier work by Raf Schietekat.\n\nBugs fixed:\n\n- 159 - TBB build for PowerPC* running Mac OS* X.\n- 160 - IBM* Java segfault if used with TBB allocator.\n- crash in concurrent_queue<char> (1616).\n\n------------------------------------------------------------------------\nIntel TBB 2.2 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 4001\n\nChanges (w.r.t. Intel TBB 2.2 commercial-aligned release):\n\n- Incorporates all changes from open-source releases below.\n- Documentation was updated.\n- TBB scheduler auto-initialization now covers all possible use cases.\n- concurrent_queue: made argument types of sizeof used in paddings\n  consistent with those actually used.\n- Memory allocator was improved: supported corner case of user's malloc\n    calling scalable_malloc (non-Windows), corrected processing of\n    memory allocation requests during tbb memory allocator startup\n    (Linux).\n- Windows malloc replacement has got better support for static objects.\n- In pipeline setups that do not allow actual parallelism, execution\n    by a single thread is guaranteed, idle spinning eliminated, and\n    performance improved.\n- RML refactoring and clean-up.\n- New constructor for concurrent_hash_map allows reserving space for\n    a number of items.\n- Operator delete() added to the TBB exception classes.\n- Lambda support was improved in parallel_reduce.\n- gcc 4.3 warnings were fixed for concurrent_queue.\n- Fixed possible initialization deadlock in modules using TBB entities\n    during construction of global static objects.\n- Copy constructor in concurrent_hash_map was fixed.\n- Fixed a couple of rare crashes in the scheduler possible before\n    in very specific use cases.\n- Fixed a rare crash in the TBB allocator running out of memory.\n- New tests were implemented, including test_lambda.cpp that checks\n    support for lambda expressions.\n- A few other small changes in code, tests, and documentation.\n\n------------------------------------------------------------------------\n20090809 open-source release\n\nChanges (w.r.t. Intel TBB 2.2 commercial-aligned release):\n\n- Fixed known exception safety issues in concurrent_vector.\n- Better concurrency of simultaneous grow requests in concurrent_vector.\n- TBB allocator further improves performance of large object allocation.\n- Problem with source of text relocations was fixed on Linux\n- Fixed bugs related to malloc replacement under Windows\n- A few other small changes in code and documentation.\n\n------------------------------------------------------------------------\nIntel TBB 2.2 commercial-aligned release\nTBB_INTERFACE_VERSION == 4000\n\nChanges (w.r.t. Intel TBB 2.1 U4 commercial-aligned release):\n\n- Incorporates all changes from open-source releases below.\n- Architecture folders renamed from em64t to intel64 and from itanium\n    to ia64.\n- Major Interface version changed from 3 to 4. Deprecated interfaces\n    might be removed in future releases.\n- Parallel algorithms that use partitioners have switched to use\n    the auto_partitioner by default.\n- Improved memory allocator performance for allocations bigger than 8K.\n- Added new thread-bound filters functionality for pipeline.\n- New implementation of concurrent_hash_map that improves performance\n    significantly.\n- A few other small changes in code and documentation.\n\n------------------------------------------------------------------------\n20090511 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Basic support for MinGW32 development kit.\n- Added tbb::zero_allocator class that initializes memory with zeros.\n    It can be used as an adaptor to any STL-compatible allocator class.\n- Added tbb::parallel_for_each template function as alias to parallel_do.\n- Added more overloads for tbb::parallel_for.\n- Added support for exact exception propagation (can only be used with\n    compilers that support C++0x std::exception_ptr).\n- tbb::atomic template class can be used with enumerations.\n- mutex, recursive_mutex, spin_mutex, spin_rw_mutex classes extended\n    with explicit lock/unlock methods.\n- Fixed size() and grow_to_at_least() methods of tbb::concurrent_vector\n    to provide space allocation guarantees. More methods added for\n    compatibility with std::vector, including some from C++0x.\n- Preview of a lambda-friendly interface for low-level use of tasks.\n- scalable_msize function added to the scalable allocator (Windows only).\n- Rationalized internal auxiliary functions for spin-waiting and backoff.\n- Several tests undergo decent refactoring.\n\nChanges affecting backward compatibility:\n\n- Improvements in concurrent_queue, including limited API changes.\n    The previous version is deprecated; its functionality is accessible\n    via methods of the new tbb::concurrent_bounded_queue class.\n- grow* and push_back methods of concurrent_vector changed to return\n    iterators; old semantics is deprecated.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 4 commercial-aligned release\nTBB_INTERFACE_VERSION == 3016\n\nChanges (w.r.t. Intel TBB 2.1 U3 commercial-aligned release):\n\n- Added tests for aligned memory allocations and malloc replacement.\n- Several improvements for better bundling with Intel(R) C++ Compiler.\n- A few other small changes in code and documentaion.\n\nBugs fixed:\n\n- 150 - request to build TBB examples with debug info in release mode.\n- backward compatibility issue with concurrent_queue on Windows.\n- dependency on VS 2005 SP1 runtime libraries removed.\n- compilation of GUI examples under Xcode* 3.1 (1577).\n- On Windows, TBB allocator classes can be instantiated with const types\n    for compatibility with MS implementation of STL containers (1566).\n\n------------------------------------------------------------------------\n20090313 open-source release\n\nChanges (w.r.t. 20081109 open-source release):\n\n- Includes all changes introduced in TBB 2.1 Update 2 & Update 3\n    commercial-aligned releases (see below for details).\n- Added tbb::parallel_invoke template function. It runs up to 10\n    user-defined functions in parallel and waits for them to complete.\n- Added a special library providing ability to replace the standard\n    memory allocation routines in Microsoft* C/C++ RTL (malloc/free,\n    global new/delete, etc.) with the TBB memory allocator.\n    Usage details are described in include/tbb/tbbmalloc_proxy.h file.\n- Task scheduler switched to use new implementation of its core\n    functionality (deque based task pool, new structure of arena slots).\n- Preview of Microsoft* Visual Studio* 2005 project files for\n    building the library is available in build/vsproject folder.\n- Added tests for aligned memory allocations and malloc replacement.\n- Added parallel_for/game_of_life.net example (for Windows only)\n    showing TBB usage in a .NET application.\n- A number of other fixes and improvements to code, tests, makefiles,\n    examples and documents.\n\nBugs fixed:\n\n- The same list as in TBB 2.1 Update 4 right above.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 3 commercial-aligned release\nTBB_INTERFACE_VERSION == 3015\n\nChanges (w.r.t. Intel TBB 2.1 U2 commercial-aligned release):\n\n- Added support for aligned allocations to the TBB memory allocator.\n- Added a special library to use with LD_PRELOAD on Linux* in order to\n    replace the standard memory allocation routines in C/C++ with the\n    TBB memory allocator.\n- Added null_mutex and null_rw_mutex: no-op classes interface-compliant\n    to other TBB mutexes.\n- Improved performance of parallel_sort, to close most of the serial gap\n    with std::sort, and beat it on 2 and more cores.\n- A few other small changes.\n\nBugs fixed:\n\n- the problem where parallel_for hanged after exception throw\n    if affinity_partitioner was used (1556).\n- get rid of VS warnings about mbstowcs deprecation (1560),\n    as well as some other warnings.\n- operator== for concurrent_vector::iterator fixed to work correctly\n    with different vector instances.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 2 commercial-aligned release\nTBB_INTERFACE_VERSION == 3014\n\nChanges (w.r.t. Intel TBB 2.1 U1 commercial-aligned release):\n\n- Incorporates all open-source-release changes down to TBB 2.1 U1,\n    except for:\n    - 20081019 addition of enumerable_thread_specific;\n- Warning level for Microsoft* Visual C++* compiler raised to /W4 /Wp64;\n    warnings found on this level were cleaned or suppressed.\n- Added TBB_runtime_interface_version API function.\n- Added new example: pipeline/square.\n- Added exception handling and cancellation support\n    for parallel_do and pipeline.\n- Added copy constructor and [begin,end) constructor to concurrent_queue.\n- Added some support for beta version of Intel(R) Parallel Amplifier.\n- Added scripts to set environment for cross-compilation of 32-bit\n    applications on 64-bit Linux with Intel(R) C++ Compiler.\n- Fixed semantics of concurrent_vector::clear() to not deallocate\n    internal arrays. Fixed compact() to perform such deallocation later.\n- Fixed the issue with atomic<T*> when T is incomplete type.\n- Improved support for PowerPC* Macintosh*, including the fix\n    for a bug in masked compare-and-swap reported by a customer.\n- As usual, a number of other improvements everywhere.\n\n------------------------------------------------------------------------\n20081109 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Added new serial out of order filter for tbb::pipeline.\n- Fixed the issue with atomic<T*>::operator= reported at the forum.\n- Fixed the issue with using tbb::task::self() in task destructor\n    reported at the forum.\n- A number of other improvements to code, tests, makefiles, examples\n    and documents.\n\nOpen-source contributions integrated:\n- Changes in the memory allocator were partially integrated.\n\n------------------------------------------------------------------------\n20081019 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Introduced enumerable_thread_specific<T>.  This new class provides a\n    wrapper around native thread local storage as well as iterators and\n    ranges for accessing the thread local copies (1533).\n- Improved support for Intel(R) Threading Analysis Tools\n    on Intel(R) 64 architecture.\n- Dependency from Microsoft* CRT was integrated to the libraries using\n    manifests, to avoid issues if called from code that uses different\n    version of Visual C++* runtime than the library.\n- Introduced new defines TBB_USE_ASSERT, TBB_USE_DEBUG,\n    TBB_USE_PERFORMANCE_WARNINGS, TBB_USE_THREADING_TOOLS.\n- A number of other improvements to code, tests, makefiles, examples\n    and documents.\n\nOpen-source contributions integrated:\n\n- linker optimization: /incremental:no .\n\n------------------------------------------------------------------------\n20080925 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Same fix for a memory leak in the memory allocator as in TBB 2.1 U1.\n- Improved support for lambda functions.\n- Fixed more concurrent_queue issues reported at the forum.\n- A number of other improvements to code, tests, makefiles, examples\n    and documents.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 Update 1 commercial-aligned release\nTBB_INTERFACE_VERSION == 3013\n\nChanges (w.r.t. Intel TBB 2.1 commercial-aligned release):\n\n- Fixed small memory leak in the memory allocator.\n- Incorporates all open-source-release changes since TBB 2.1,\n    except for:\n    - 20080825 changes for parallel_do;\n\n------------------------------------------------------------------------\n20080825 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Added exception handling and cancellation support for parallel_do.\n- Added default HashCompare template argument for concurrent_hash_map.\n- Fixed concurrent_queue.clear() issues due to incorrect assumption\n    about clear() being private method.\n- Added the possibility to use TBB in applications that change\n    default calling conventions (Windows* only).\n- Many improvements to code, tests, examples, makefiles and documents.\n\nBugs fixed:\n\n- 120, 130 - memset declaration missed in concurrent_hash_map.h\n\n------------------------------------------------------------------------\n20080724 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Inline assembly for atomic operations improved for gcc 4.3\n- A few more improvements to the code.\n\n------------------------------------------------------------------------\n20080709 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- operator=() was added to the tbb_thread class according to\n    the current working draft for std::thread.\n- Recognizing SPARC* in makefiles for Linux* and Sun Solaris*.\n\nBugs fixed:\n\n- 127 - concurrent_hash_map::range fixed to split correctly.\n\nOpen-source contributions integrated:\n\n- fix_set_midpoint.diff by jyasskin\n- SPARC* support in makefiles by Raf Schietekat\n\n------------------------------------------------------------------------\n20080622 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Fixed a hang that rarely happened on Linux\n    during deinitialization of the TBB scheduler.\n- Improved support for Intel(R) Thread Checker.\n- A few more improvements to the code.\n\n------------------------------------------------------------------------\nIntel TBB 2.1 commercial-aligned release\nTBB_INTERFACE_VERSION == 3011\n\nChanges (w.r.t. Intel TBB 2.0 U3 commercial-aligned release):\n\n- All open-source-release changes down to, and including, TBB 2.0 below,\n    were incorporated into this release.\n\n------------------------------------------------------------------------\n20080605 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Explicit control of exported symbols by version scripts added on Linux.\n- Interfaces polished for exception handling & algorithm cancellation.\n- Cache behavior improvements in the scalable allocator.\n- Improvements in text_filter, polygon_overlay, and other examples.\n- A lot of other stability improvements in code, tests, and makefiles.\n- First release where binary packages include headers/docs/examples, so\n    binary packages are now self-sufficient for using TBB.\n\nOpen-source contributions integrated:\n\n- atomics patch (partially).\n- tick_count warning patch.\n\nBugs fixed:\n\n- 118 - fix for boost compatibility.\n- 123 - fix for tbb_machine.h.\n\n------------------------------------------------------------------------\n20080512 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Fixed a problem with backward binary compatibility\n    of debug Linux builds.\n- Sun* Studio* support added.\n- soname support added on Linux via linker script. To restore backward\n    binary compatibility, *.so -> *.so.2 softlinks should be created.\n- concurrent_hash_map improvements - added few new forms of insert()\n    method and fixed precondition and guarantees of erase() methods.\n    Added runtime warning reporting about bad hash function used for\n    the container. Various improvements for performance and concurrency.\n- Cancellation mechanism reworked so that it does not hurt scalability.\n- Algorithm parallel_do reworked. Requirement for Body::argument_type\n    definition removed, and work item argument type can be arbitrarily\n    cv-qualified.\n- polygon_overlay example added.\n- A few more improvements to code, tests, examples and Makefiles.\n\nOpen-source contributions integrated:\n\n- Soname support patch for Bugzilla #112.\n\nBugs fixed:\n\n- 112 - fix for soname support.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 U3 commercial-aligned release (package 017, April 20, 2008)\n\nCorresponds to commercial 019 (for Linux*, 020; for Mac OS* X, 018)\npackages.\n\nChanges (w.r.t. Intel TBB 2.0 U2 commercial-aligned release):\n\n- Does not contain open-source-release changes below; this release is\n    only a minor update of TBB 2.0 U2.\n- Removed spin-waiting in pipeline and concurrent_queue.\n- A few more small bug fixes from open-source releases below.\n\n------------------------------------------------------------------------\n20080408 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- count_strings example reworked: new word generator implemented, hash\n    function replaced, and tbb_allocator is used with std::string class.\n- Static methods of spin_rw_mutex were replaced by normal member\n    functions, and the class name was versioned.\n- tacheon example was renamed to tachyon.\n- Improved support for Intel(R) Thread Checker.\n- A few more minor improvements.\n\nOpen-source contributions integrated:\n\n- Two sets of Sun patches for IA Solaris support.\n\n------------------------------------------------------------------------\n20080402 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Exception handling and cancellation support for tasks and algorithms\n    fully enabled.\n- Exception safety guaranties defined and fixed for all concurrent\n    containers.\n- User-defined memory allocator support added to all concurrent\n    containers.\n- Performance improvement of concurrent_hash_map, spin_rw_mutex.\n- Critical fix for a rare race condition during scheduler\n    initialization/de-initialization.\n- New methods added for concurrent containers to be closer to STL,\n    as well as automatic filters removal from pipeline\n    and __TBB_AtomicAND function.\n- The volatile keyword dropped from where it is not really needed.\n- A few more minor improvements.\n\n------------------------------------------------------------------------\n20080319 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Support for gcc version 4.3 was added.\n- tbb_thread class, near compatible with std::thread expected in C++0x,\n    was added.\n\nBugs fixed:\n\n- 116 - fix for compilation issues with gcc version 4.2.1.\n- 120 - fix for compilation issues with gcc version 4.3.\n\n------------------------------------------------------------------------\n20080311 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- An enumerator added for pipeline filter types (serial vs. parallel).\n- New task_scheduler_observer class introduced, to observe when\n    threads start and finish interacting with the TBB task scheduler.\n- task_scheduler_init reverted to not use internal versioned class;\n    binary compatibility guaranteed with stable releases only.\n- Various improvements to code, tests, examples and Makefiles.\n\n------------------------------------------------------------------------\n20080304 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Task-to-thread affinity support, previously kept under a macro,\n    now fully legalized.\n- Work-in-progress on cache_aligned_allocator improvements.\n- Pipeline really supports parallel input stage; it's no more serialized.\n- Various improvements to code, tests, examples and Makefiles.\n\nBugs fixed:\n\n- 119 - fix for scalable_malloc sometimes failing to return a big block.\n- TR575 - fixed a deadlock occurring on Windows in startup/shutdown\n    under some conditions.\n\n------------------------------------------------------------------------\n20080226 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Introduced tbb_allocator to select between standard allocator and\n    tbb::scalable_allocator when available.\n- Removed spin-waiting in pipeline and concurrent_queue.\n- Improved performance of concurrent_hash_map by using tbb_allocator.\n- Improved support for Intel(R) Thread Checker.\n- Various improvements to code, tests, examples and Makefiles.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 U2 commercial-aligned release (package 017, February 14, 2008)\n\nCorresponds to commercial 017 (for Linux*, 018; for Mac OS* X, 016)\npackages.\n\nChanges (w.r.t. Intel TBB 2.0 U1 commercial-aligned release):\n\n- Does not contain open-source-release changes below; this release is\n    only a minor update of TBB 2.0 U1.\n- Add support for Microsoft* Visual Studio* 2008, including binary\n    libraries and VS2008 projects for examples.\n- Use SwitchToThread() not Sleep() to yield threads on Windows*.\n- Enhancements to Doxygen-readable comments in source code.\n- A few more small bug fixes from open-source releases below.\n\nBugs fixed:\n\n- TR569 - Memory leak in concurrent_queue.\n\n------------------------------------------------------------------------\n20080207 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Improvements and minor fixes in VS2008 projects for examples.\n- Improvements in code for gating worker threads that wait for work,\n  previously consolidated under #if IMPROVED_GATING, now legalized.\n- Cosmetic changes in code, examples, tests.\n\nBugs fixed:\n\n- 113 - Iterators and ranges should be convertible to their const\n    counterparts.\n- TR569 - Memory leak in concurrent_queue.\n\n------------------------------------------------------------------------\n20080122 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Updated examples/parallel_for/seismic to improve the visuals and to\n    use the affinity_partitioner (20071127 and forward) for better\n    performance.\n- Minor improvements to unittests and performance tests.\n\n------------------------------------------------------------------------\n20080115 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Cleanup, simplifications and enhancements to the Makefiles for\n    building the libraries (see build/index.html for high-level\n    changes) and the examples.\n- Use SwitchToThread() not Sleep() to yield threads on Windows*.\n- Engineering work-in-progress on exception safety/support.\n- Engineering work-in-progress on affinity_partitioner for\n    parallel_reduce.\n- Engineering work-in-progress on improved gating for worker threads\n    (idle workers now block in the OS instead of spinning).\n- Enhancements to Doxygen-readable comments in source code.\n\nBugs fixed:\n\n- 102 - Support for parallel build with gmake -j\n- 114 - /Wp64 build warning on Windows*.\n\n------------------------------------------------------------------------\n20071218 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Full support for Microsoft* Visual Studio* 2008 in open-source.\n    Binaries for vc9/ will be available in future stable releases.\n- New recursive_mutex class.\n- Full support for 32-bit PowerMac including export files for builds.\n- Improvements to parallel_do.\n\n------------------------------------------------------------------------\n20071206 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Support for Microsoft* Visual Studio* 2008 in building libraries\n    from source as well as in vc9/ projects for examples.\n- Small fixes to the affinity_partitioner first introduced in 20071127.\n- Small fixes to the thread-stack size hook first introduced in 20071127.\n- Engineering work in progress on concurrent_vector.\n- Engineering work in progress on exception behavior.\n- Unittest improvements.\n\n------------------------------------------------------------------------\n20071127 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- Task-to-thread affinity support (affinity partitioner) first appears.\n- More work on concurrent_vector.\n- New parallel_do algorithm (function-style version of parallel while)\n    and parallel_do/parallel_preorder example.\n- New task_scheduler_init() hooks for getting default_num_threads() and\n    for setting thread stack size.\n- Support for weak memory consistency models in the code base.\n- Futex usage in the task scheduler (Linux).\n- Started adding 32-bit PowerMac support.\n- Intel(R) 9.1 compilers are now the base supported Intel(R) compiler\n    version.\n- TBB libraries added to link line automatically on Microsoft Windows*\n    systems via #pragma comment linker directives.\n\nOpen-source contributions integrated:\n\n- FreeBSD platform support patches.\n- AIX weak memory model patch.\n\nBugs fixed:\n\n- 108 - Removed broken affinity.h reference.\n- 101 - Does not build on Debian Lenny (replaced arch with uname -m).\n\n------------------------------------------------------------------------\n20071030 open-source release\n\nChanges (w.r.t. previous open-source release):\n\n- More work on concurrent_vector.\n- Better support for building with -Wall -Werror (or not) as desired.\n- A few fixes to eliminate extraneous warnings.\n- Begin introduction of versioning hooks so that the internal/API\n    version is tracked via TBB_INTERFACE_VERSION.  The newest binary\n    libraries should always work with previously-compiled code when-\n    ever possible.\n- Engineering work in progress on using futex inside the mutexes (Linux).\n- Engineering work in progress on exception behavior.\n- Engineering work in progress on a new parallel_do algorithm.\n- Unittest improvements.\n\n------------------------------------------------------------------------\n20070927 open-source release\n\nChanges (w.r.t. Intel TBB 2.0 U1 commercial-aligned release):\n\n- Minor update to TBB 2.0 U1 below.\n- Begin introduction of new concurrent_vector interfaces not released\n    with TBB 2.0 U1.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 U1 commercial-aligned release (package 014, October 1, 2007)\n\nCorresponds to commercial 014 (for Linux*, 016) packages.\n\nChanges (w.r.t. Intel TBB 2.0 commercial-aligned release):\n\n- All open-source-release changes down to, and including, TBB 2.0\n    below, were incorporated into this release.\n- Made a number of changes to the officially supported OS list:\n    Added Linux* OSs:\n\tAsianux* 3, Debian* 4.0, Fedora Core* 6, Fedora* 7,\n\tTurbo Linux* 11, Ubuntu* 7.04;\n    Dropped Linux* OSs:\n\tAsianux* 2, Fedora Core* 4, Haansoft* Linux 2006 Server,\n\tMandriva/Mandrake* 10.1, Miracle Linux* 4.0,\n\tRed Flag* DC Server 5.0;\n    Only Mac OS* X 10.4.9 (and forward) and Xcode* tool suite 2.4.1 (and\n\tforward) are now supported.\n- Commercial installers on Linux* fixed to recommend the correct\n    binaries to use in more cases, with less unnecessary warnings.\n- Changes to eliminate spurious build warnings.\n\nOpen-source contributions integrated:\n\n- Two small header guard macro patches; it also fixed bug #94.\n- New blocked_range3d class.\n\nBugs fixed:\n\n- 93 - Removed misleading comments in task.h.\n- 94 - See above.\n\n------------------------------------------------------------------------\n20070815 open-source release\n\nChanges:\n\n- Changes to eliminate spurious build warnings.\n- Engineering work in progress on concurrent_vector allocator behavior.\n- Added hooks to use the Intel(R) compiler code coverage tools.\n\nOpen-source contributions integrated:\n\n- Mac OS* X build warning patch.\n\nBugs fixed:\n\n- 88 - Fixed TBB compilation errors if both VS2005 and Windows SDK are\n    installed.\n\n------------------------------------------------------------------------\n20070719 open-source release\n\nChanges:\n\n- Minor update to TBB 2.0 commercial-aligned release below.\n- Changes to eliminate spurious build warnings.\n\n------------------------------------------------------------------------\nIntel TBB 2.0 commercial-aligned release (package 010, July 19, 2007)\n\nCorresponds to commercial 010 (for Linux*, 012) packages.\n\n- TBB open-source debut release.\n\n------------------------------------------------------------------------\nIntel TBB 1.1 commercial release (April 10, 2007)\n\nChanges (w.r.t. Intel TBB 1.0 commercial release):\n\n- auto_partitioner which offered an automatic alternative to specifying\n    a grain size parameter to estimate the best granularity for tasks.\n- The release was added to the Intel(R) C++ Compiler 10.0 Pro.\n\n------------------------------------------------------------------------\nIntel TBB 1.0 Update 2 commercial release\n\nChanges (w.r.t. Intel TBB 1.0 Update 1 commercial release):\n\n- Mac OS* X 64-bit support added.\n- Source packages for commercial releases introduced.\n\n------------------------------------------------------------------------\nIntel TBB 1.0 Update 1 commercial-aligned release\n\nChanges (w.r.t. Intel TBB 1.0 commercial release):\n\n- Fix for critical package issue on Mac OS* X.\n\n------------------------------------------------------------------------\nIntel TBB 1.0 commercial release (August 29, 2006)\n\nChanges (w.r.t. Intel TBB 1.0 beta commercial release):\n\n- New namespace (and compatibility headers for old namespace).\n    Namespaces are tbb and tbb::internal and all classes are in the\n    underscore_style not the WindowsStyle.\n- New class: scalable_allocator (and cache_aligned_allocator using that\n    if it exists).\n- Added parallel_for/tacheon example.\n- Removed C-style casts from headers for better C++ compliance.\n- Bug fixes.\n- Documentation improvements.\n- Improved performance of the concurrent_hash_map class.\n- Upgraded parallel_sort() to support STL-style random-access iterators\n    instead of just pointers.\n- The Windows vs7_1 directories renamed to vs7.1 in examples.\n- New class: spin version of reader-writer lock.\n- Added push_back() interface to concurrent_vector().\n\n------------------------------------------------------------------------\nIntel TBB 1.0 beta commercial release\n\nInitial release.\n\nFeatures / APIs:\n\n- Concurrent containers: ConcurrentHashTable, ConcurrentVector,\n    ConcurrentQueue.\n- Parallel algorithms: ParallelFor, ParallelReduce, ParallelScan,\n    ParallelWhile, Pipeline, ParallelSort.\n- Support: AlignedSpace, BlockedRange (i.e., 1D), BlockedRange2D\n- Task scheduler with multi-master support.\n- Atomics: read, write, fetch-and-store, fetch-and-add, compare-and-swap.\n- Locks: spin, reader-writer, queuing, OS-wrapper.\n- Memory allocation: STL-style memory allocator that avoids false\n    sharing.\n- Timers.\n\nTools Support:\n- Intel(R) Thread Checker 3.0.\n- Intel(R) Thread Profiler 3.0.\n\nDocumentation:\n- First Use Documents: README.txt, INSTALL.txt, Release_Notes.txt,\n    Doc_Index.html, Getting_Started.pdf, Tutorial.pdf, Reference.pdf.\n- Class hierarchy HTML pages (Doxygen).\n- Tree of index.html pages for navigating the installed package, esp.\n    for the examples.\n\nExamples:\n- One for each of these TBB features: ConcurrentHashTable, ParallelFor,\n    ParallelReduce, ParallelWhile, Pipeline, Task.\n- Live copies of examples from Getting_Started.pdf.\n- TestAll example that exercises every class and header in the package\n    (i.e., a \"liveness test\").\n- Compilers: see Release_Notes.txt.\n- APIs: OpenMP, WinThreads, Pthreads.\n\nPackaging:\n- Package for Windows installs IA-32 and EM64T bits.\n- Package for Linux installs IA-32, EM64T and IPF bits.\n- Package for Mac OS* X installs IA-32 bits.\n- All packages support Intel(R) software setup assistant (ISSA) and\n    install-time FLEXlm license checking.\n- ISSA support allows license file to be specified directly in case of\n    no Internet connection or problems with IRC or serial #s.\n- Linux installer allows root or non-root, RPM or non-RPM installs.\n- FLEXlm license servers (for those who need floating/counted licenses)\n    are provided separately on Intel(R) Premier.\n\n------------------------------------------------------------------------\nIntel and Cilk are registered trademarks or trademarks of Intel Corporation or its\nsubsidiaries in the United States and other countries.\n\n* Other names and brands may be claimed as the property of others.\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/COPYING",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n----------------     END OF Gnu General Public License     ----------------\n\nThe source code of Threading Building Blocks is distributed under version 2\nof the GNU General Public License, with the so-called \"runtime exception,\"\nas follows (or see any header or implementation file):\n\n   As a special exception, you may use this file as part of a free software\n   library without restriction.  Specifically, if other files instantiate\n   templates or use macros or inline functions from this file, or you compile\n   this file and link it with other files to produce an executable, this\n   file does not by itself cause the resulting executable to be covered by\n   the GNU General Public License.  This exception does not however\n   invalidate any other reasons why the executable file might be covered by\n   the GNU General Public License.\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/README",
    "content": "Intel(R) Threading Building Blocks - README\n\nSee index.html for directions and documentation.\n\nIf source is present (./Makefile and src/ directories),\ntype 'gmake' in this directory to build and test.\n\nSee examples/index.html for runnable examples and directions.\n\nSee http://threadingbuildingblocks.org for full documentation\nand software information.\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nInclude files for Intel&reg; Threading Building Blocks (Intel&reg; TBB).\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"tbb/index.html\">tbb</A>\n<DD>Include files for Intel TBB classes and functions.\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2016 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/serial/tbb/parallel_for.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_SERIAL_parallel_for_H\n#define __TBB_SERIAL_parallel_for_H\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <stdexcept>\n#include <string> // required to construct std exception classes\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\n#include \"tbb_annotate.h\"\n\n#ifndef __TBB_NORMAL_EXECUTION\n#include \"tbb/blocked_range.h\"\n#include \"tbb/partitioner.h\"\n#endif\n\nnamespace tbb {\nnamespace serial {\nnamespace interface9 {\n\n// parallel_for serial annotated implementation\n\ntemplate< typename Range, typename Body, typename Partitioner >\nclass start_for : tbb::internal::no_copy {\n    Range my_range;\n    const Body my_body;\n    typename Partitioner::task_partition_type my_partition;\n    void execute();\n\n    //! Constructor for root task.\n    start_for( const Range& range, const Body& body, Partitioner& partitioner ) :\n        my_range( range ),\n        my_body( body ),\n        my_partition( partitioner )\n    {\n    }\n\n    //! Splitting constructor used to generate children.\n    /** this becomes left child.  Newly constructed object is right child. */\n    start_for( start_for& parent_, typename Partitioner::split_type& split_obj ) :\n        my_range( parent_.my_range, split_obj ),\n        my_body( parent_.my_body ),\n        my_partition( parent_.my_partition, split_obj )\n    {\n    }\n\npublic:\n    static void run(  const Range& range, const Body& body, Partitioner& partitioner ) {\n        if( !range.empty() ) {\n            ANNOTATE_SITE_BEGIN( tbb_parallel_for );\n            {\n                start_for a( range, body, partitioner );\n                a.execute();\n            }\n            ANNOTATE_SITE_END( tbb_parallel_for );\n        }\n    }\n};\n\ntemplate< typename Range, typename Body, typename Partitioner >\nvoid start_for< Range, Body, Partitioner >::execute() {\n    if( !my_range.is_divisible() || !my_partition.is_divisible() ) {\n        ANNOTATE_TASK_BEGIN( tbb_parallel_for_range );\n        {\n            my_body( my_range );\n        }\n        ANNOTATE_TASK_END( tbb_parallel_for_range );\n    } else {\n        typename Partitioner::split_type split_obj;\n        start_for b( *this, split_obj );\n        this->execute(); // Execute the left interval first to keep the serial order.\n        b.execute();     // Execute the right interval then.\n    }\n}\n\n//! Parallel iteration over range with default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body ) {\n    serial::interface9::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());\n}\n\n//! Parallel iteration over range with simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,const simple_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with auto_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,const auto_partitioner>::run(range,body,partitioner);\n}\n\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration over range with static_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,const static_partitioner>::run(range,body,partitioner);\n}\n#endif\n\n//! Parallel iteration over range with affinity_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner ) {\n    serial::interface9::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);\n}\n\n//! Implementation of parallel iteration over stepped range of integers with explicit step and partitioner (ignored)\ntemplate <typename Index, typename Function, typename Partitioner>\nvoid parallel_for_impl(Index first, Index last, Index step, const Function& f, Partitioner& ) {\n    if (step <= 0 )\n        throw std::invalid_argument( \"nonpositive_step\" );\n    else if (last > first) {\n        // Above \"else\" avoids \"potential divide by zero\" warning on some platforms\n        ANNOTATE_SITE_BEGIN( tbb_parallel_for );\n        for( Index i = first; i < last; i = i + step ) {\n            ANNOTATE_TASK_BEGIN( tbb_parallel_for_iteration );\n            { f( i ); }\n            ANNOTATE_TASK_END( tbb_parallel_for_iteration );\n        }\n        ANNOTATE_SITE_END( tbb_parallel_for );\n    }\n}\n\n//! Parallel iteration over a range of integers with explicit step and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with explicit step and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const simple_partitioner& p) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, step, f, p);\n}\n//! Parallel iteration over a range of integers with explicit step and auto partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& p) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, p);\n}\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration over a range of integers with explicit step and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& p) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, p);\n}\n#endif\n//! Parallel iteration over a range of integers with explicit step and affinity partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& p) {\n    parallel_for_impl(first, last, step, f, p);\n}\n\n//! Parallel iteration over a range of integers with default step and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with default step and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const simple_partitioner& p) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, p);\n}\n//! Parallel iteration over a range of integers with default step and auto partitioner\ntemplate <typename Index, typename Function>\n    void parallel_for(Index first, Index last, const Function& f, const auto_partitioner& p) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, p);\n}\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration over a range of integers with default step and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const static_partitioner& p) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, p);\n}\n#endif\n//! Parallel iteration over a range of integers with default step and affinity_partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, affinity_partitioner& p) {\n    parallel_for_impl(first, last, static_cast<Index>(1), f, p);\n}\n\n} // namespace interfaceX\n\nusing interface9::parallel_for;\n\n} // namespace serial\n\n#ifndef __TBB_NORMAL_EXECUTION\nusing serial::interface9::parallel_for;\n#endif\n\n} // namespace tbb\n\n#endif /* __TBB_SERIAL_parallel_for_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/serial/tbb/tbb_annotate.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_annotate_H\n#define __TBB_annotate_H\n\n// Macros used by the Intel(R) Parallel Advisor.\n#ifdef __TBB_NORMAL_EXECUTION\n    #define ANNOTATE_SITE_BEGIN( site )\n    #define ANNOTATE_SITE_END( site )\n    #define ANNOTATE_TASK_BEGIN( task )\n    #define ANNOTATE_TASK_END( task )\n    #define ANNOTATE_LOCK_ACQUIRE( lock )\n    #define ANNOTATE_LOCK_RELEASE( lock )\n#else\n    #include <advisor-annotate.h>\n#endif\n\n#endif /* __TBB_annotate_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/aggregator.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__aggregator_H\n#define __TBB__aggregator_H\n\n#if !TBB_PREVIEW_AGGREGATOR\n#error Set TBB_PREVIEW_AGGREGATOR before including aggregator.h\n#endif\n\n#include \"atomic.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\nnamespace interface6 {\n\nusing namespace tbb::internal;\n\nclass aggregator_operation {\n    template<typename handler_type> friend class aggregator_ext;\n    uintptr_t status;\n    aggregator_operation* my_next;\npublic:\n    enum aggregator_operation_status { agg_waiting=0, agg_finished };\n    aggregator_operation() : status(agg_waiting), my_next(NULL) {}\n    /// Call start before handling this operation\n    void start() { call_itt_notify(acquired, &status); }\n    /// Call finish when done handling this operation\n    /** The operation will be released to its originating thread, and possibly deleted. */\n    void finish() { itt_store_word_with_release(status, uintptr_t(agg_finished)); }\n    aggregator_operation* next() { return itt_hide_load_word(my_next);}\n    void set_next(aggregator_operation* n) { itt_hide_store_word(my_next, n); }\n};\n\nnamespace internal {\n\nclass basic_operation_base : public aggregator_operation {\n    friend class basic_handler;\n    virtual void apply_body() = 0;\npublic:\n    basic_operation_base() : aggregator_operation() {}\n    virtual ~basic_operation_base() {}\n};\n\ntemplate<typename Body>\nclass basic_operation : public basic_operation_base, no_assign {\n    const Body& my_body;\n    /*override*/ void apply_body() { my_body(); }\npublic:\n    basic_operation(const Body& b) : basic_operation_base(), my_body(b) {}\n};\n\nclass basic_handler {\npublic:\n    basic_handler() {}\n    void operator()(aggregator_operation* op_list) const {\n        while (op_list) {\n            // ITT note: &(op_list->status) tag is used to cover accesses to the operation data.\n            // The executing thread \"acquires\" the tag (see start()) and then performs\n            // the associated operation w/o triggering a race condition diagnostics.\n            // A thread that created the operation is waiting for its status (see execute_impl()),\n            // so when this thread is done with the operation, it will \"release\" the tag\n            // and update the status (see finish()) to give control back to the waiting thread.\n            basic_operation_base& request = static_cast<basic_operation_base&>(*op_list);\n            // IMPORTANT: need to advance op_list to op_list->next() before calling request.finish()\n            op_list = op_list->next();\n            request.start();\n            request.apply_body();\n            request.finish();\n        }\n    }\n};\n\n} // namespace internal\n\n//! Aggregator base class and expert interface\n/** An aggregator for collecting operations coming from multiple sources and executing\n    them serially on a single thread. */\ntemplate <typename handler_type>\nclass aggregator_ext : tbb::internal::no_copy {\npublic:\n    aggregator_ext(const handler_type& h) : handler_busy(0), handle_operations(h) { mailbox = NULL; }\n\n    //! EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.\n    /** Details of user-made operations must be handled by user-provided handler */\n    void process(aggregator_operation *op) { execute_impl(*op); }\n\n protected:\n    /** Place operation in mailbox, then either handle mailbox or wait for the operation\n        to be completed by a different thread. */\n    void execute_impl(aggregator_operation& op) {\n        aggregator_operation* res;\n\n        // ITT note: &(op.status) tag is used to cover accesses to this operation. This\n        // thread has created the operation, and now releases it so that the handler\n        // thread may handle the associated operation w/o triggering a race condition;\n        // thus this tag will be acquired just before the operation is handled in the\n        // handle_operations functor.\n        call_itt_notify(releasing, &(op.status));\n        // insert the operation in the queue\n        do {\n            // ITT may flag the following line as a race; it is a false positive:\n            // This is an atomic read; we don't provide itt_hide_load_word for atomics\n            op.my_next = res = mailbox; // NOT A RACE\n        } while (mailbox.compare_and_swap(&op, res) != res);\n        if (!res) { // first in the list; handle the operations\n            // ITT note: &mailbox tag covers access to the handler_busy flag, which this\n            // waiting handler thread will try to set before entering handle_operations.\n            call_itt_notify(acquired, &mailbox);\n            start_handle_operations();\n            __TBB_ASSERT(op.status, NULL);\n        }\n        else { // not first; wait for op to be ready\n            call_itt_notify(prepare, &(op.status));\n            spin_wait_while_eq(op.status, uintptr_t(aggregator_operation::agg_waiting));\n            itt_load_word_with_acquire(op.status);\n        }\n    }\n\n\n private:\n    //! An atomically updated list (aka mailbox) of aggregator_operations\n    atomic<aggregator_operation *> mailbox;\n\n    //! Controls thread access to handle_operations\n    /** Behaves as boolean flag where 0=false, 1=true */\n    uintptr_t handler_busy;\n\n    handler_type handle_operations;\n\n    //! Trigger the handling of operations when the handler is free\n    void start_handle_operations() {\n        aggregator_operation *pending_operations;\n\n        // ITT note: &handler_busy tag covers access to mailbox as it is passed\n        // between active and waiting handlers.  Below, the waiting handler waits until\n        // the active handler releases, and the waiting handler acquires &handler_busy as\n        // it becomes the active_handler. The release point is at the end of this\n        // function, when all operations in mailbox have been handled by the\n        // owner of this aggregator.\n        call_itt_notify(prepare, &handler_busy);\n        // get handler_busy: only one thread can possibly spin here at a time\n        spin_wait_until_eq(handler_busy, uintptr_t(0));\n        call_itt_notify(acquired, &handler_busy);\n        // acquire fence not necessary here due to causality rule and surrounding atomics\n        __TBB_store_with_release(handler_busy, uintptr_t(1));\n\n        // ITT note: &mailbox tag covers access to the handler_busy flag itself.\n        // Capturing the state of the mailbox signifies that handler_busy has been\n        // set and a new active handler will now process that list's operations.\n        call_itt_notify(releasing, &mailbox);\n        // grab pending_operations\n        pending_operations = mailbox.fetch_and_store(NULL);\n\n        // handle all the operations\n        handle_operations(pending_operations);\n\n        // release the handler\n        itt_store_word_with_release(handler_busy, uintptr_t(0));\n    }\n};\n\n//! Basic aggregator interface\nclass aggregator : private aggregator_ext<internal::basic_handler> {\npublic:\n    aggregator() : aggregator_ext<internal::basic_handler>(internal::basic_handler()) {}\n    //! BASIC INTERFACE: Enter a function for exclusive execution by the aggregator.\n    /** The calling thread stores the function object in a basic_operation and\n        places the operation in the aggregator's mailbox */\n    template<typename Body>\n    void execute(const Body& b) {\n        internal::basic_operation<Body> op(b);\n        this->execute_impl(op);\n    }\n};\n\n} // namespace interface6\n\nusing interface6::aggregator;\nusing interface6::aggregator_ext;\nusing interface6::aggregator_operation;\n\n} // namespace tbb\n\n#endif  // __TBB__aggregator_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/aligned_space.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_aligned_space_H\n#define __TBB_aligned_space_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n\nnamespace tbb {\n\n//! Block of space aligned sufficiently to construct an array T with N elements.\n/** The elements are not constructed or destroyed by this class.\n    @ingroup memory_allocation */\ntemplate<typename T,size_t N=1>\nclass aligned_space {\nprivate:\n    typedef __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;\n    element_type array[(sizeof(T)*N+sizeof(element_type)-1)/sizeof(element_type)];\npublic:\n    //! Pointer to beginning of array\n    T* begin() {return internal::punned_cast<T*>(this);}\n\n    //! Pointer to one past last element in array.\n    T* end() {return begin()+N;}\n};\n\n} // namespace tbb\n\n#endif /* __TBB_aligned_space_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/atomic.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_atomic_H\n#define __TBB_atomic_H\n\n#include <cstddef>\n\n#if _MSC_VER\n#define __TBB_LONG_LONG __int64\n#else\n#define __TBB_LONG_LONG long long\n#endif /* _MSC_VER */\n\n#include \"tbb_machine.h\"\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    #pragma warning (push)\n    #pragma warning (disable: 4244 4267 4512)\n#endif\n\nnamespace tbb {\n\n//! Specifies memory semantics.\nenum memory_semantics {\n    //! Sequential consistency\n    full_fence,\n    //! Acquire\n    acquire,\n    //! Release\n    release,\n    //! No ordering\n    relaxed\n};\n\n//! @cond INTERNAL\nnamespace internal {\n\n#if __TBB_ATTRIBUTE_ALIGNED_PRESENT\n    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));\n#elif __TBB_DECLSPEC_ALIGN_PRESENT\n    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;\n#else\n    #error Do not know syntax for forcing alignment.\n#endif\n\ntemplate<size_t S>\nstruct atomic_rep;           // Primary template declared, but never defined.\n\ntemplate<>\nstruct atomic_rep<1> {       // Specialization\n    typedef int8_t word;\n};\ntemplate<>\nstruct atomic_rep<2> {       // Specialization\n    typedef int16_t word;\n};\ntemplate<>\nstruct atomic_rep<4> {       // Specialization\n#if _MSC_VER && !_WIN64\n    // Work-around that avoids spurious /Wp64 warnings\n    typedef intptr_t word;\n#else\n    typedef int32_t word;\n#endif\n};\n#if __TBB_64BIT_ATOMICS\ntemplate<>\nstruct atomic_rep<8> {       // Specialization\n    typedef int64_t word;\n};\n#endif\n\ntemplate<typename value_type, size_t size>\nstruct aligned_storage;\n\n//the specializations are needed to please MSVC syntax of __declspec(align()) which accept _literal_ constants only\n#if __TBB_ATOMIC_CTORS\n    #define ATOMIC_STORAGE_PARTIAL_SPECIALIZATION(S)                  \\\n    template<typename value_type>                                     \\\n    struct aligned_storage<value_type,S> {                            \\\n        __TBB_DECL_ATOMIC_FIELD(value_type,my_value,S)                \\\n        aligned_storage() = default ;                                 \\\n        constexpr aligned_storage(value_type value):my_value(value){} \\\n    };                                                                \\\n\n#else\n    #define ATOMIC_STORAGE_PARTIAL_SPECIALIZATION(S)                  \\\n    template<typename value_type>                                     \\\n    struct aligned_storage<value_type,S> {                            \\\n        __TBB_DECL_ATOMIC_FIELD(value_type,my_value,S)                \\\n    };                                                                \\\n\n#endif\n\ntemplate<typename value_type>\nstruct aligned_storage<value_type,1> {\n    value_type my_value;\n#if __TBB_ATOMIC_CTORS\n    aligned_storage() = default ;\n    constexpr aligned_storage(value_type value):my_value(value){}\n#endif\n};\n\nATOMIC_STORAGE_PARTIAL_SPECIALIZATION(2)\nATOMIC_STORAGE_PARTIAL_SPECIALIZATION(4)\n#if __TBB_64BIT_ATOMICS\nATOMIC_STORAGE_PARTIAL_SPECIALIZATION(8)\n#endif\n\ntemplate<size_t Size, memory_semantics M>\nstruct atomic_traits;        // Primary template declared, but not defined.\n\n#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                                                         \\\n    template<> struct atomic_traits<S,M> {                                                               \\\n        typedef atomic_rep<S>::word word;                                                                \\\n        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \\\n            return __TBB_machine_cmpswp##S##M(location,new_value,comparand);                             \\\n        }                                                                                                \\\n        inline static word fetch_and_add( volatile void* location, word addend ) {                       \\\n            return __TBB_machine_fetchadd##S##M(location,addend);                                        \\\n        }                                                                                                \\\n        inline static word fetch_and_store( volatile void* location, word value ) {                      \\\n            return __TBB_machine_fetchstore##S##M(location,value);                                       \\\n        }                                                                                                \\\n    };\n\n#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                                                  \\\n    template<memory_semantics M>                                                                         \\\n    struct atomic_traits<S,M> {                                                                          \\\n        typedef atomic_rep<S>::word word;                                                                \\\n        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \\\n            return __TBB_machine_cmpswp##S(location,new_value,comparand);                                \\\n        }                                                                                                \\\n        inline static word fetch_and_add( volatile void* location, word addend ) {                       \\\n            return __TBB_machine_fetchadd##S(location,addend);                                           \\\n        }                                                                                                \\\n        inline static word fetch_and_store( volatile void* location, word value ) {                      \\\n            return __TBB_machine_fetchstore##S(location,value);                                          \\\n        }                                                                                                \\\n    };\n\ntemplate<memory_semantics M>\nstruct atomic_load_store_traits;    // Primary template declaration\n\n#define __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(M)                      \\\n    template<> struct atomic_load_store_traits<M> {                     \\\n        template <typename T>                                           \\\n        inline static T load( const volatile T& location ) {            \\\n            return __TBB_load_##M( location );                          \\\n        }                                                               \\\n        template <typename T>                                           \\\n        inline static void store( volatile T& location, T value ) {     \\\n            __TBB_store_##M( location, value );                         \\\n        }                                                               \\\n    }\n\n#if __TBB_USE_FENCED_ATOMICS\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,relaxed)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,relaxed)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,relaxed)\n#if __TBB_64BIT_ATOMICS\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,full_fence)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,acquire)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,release)\n__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,relaxed)\n#endif\n#else /* !__TBB_USE_FENCED_ATOMICS */\n__TBB_DECL_ATOMIC_PRIMITIVES(1)\n__TBB_DECL_ATOMIC_PRIMITIVES(2)\n__TBB_DECL_ATOMIC_PRIMITIVES(4)\n#if __TBB_64BIT_ATOMICS\n__TBB_DECL_ATOMIC_PRIMITIVES(8)\n#endif\n#endif /* !__TBB_USE_FENCED_ATOMICS */\n\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(full_fence);\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(acquire);\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(release);\n__TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(relaxed);\n\n//! Additive inverse of 1 for type T.\n/** Various compilers issue various warnings if -1 is used with various integer types.\n    The baroque expression below avoids all the warnings (we hope). */\n#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))\n\n//! Base class that provides basic functionality for atomic<T> without fetch_and_add.\n/** Works for any type T that has the same size as an integral type, has a trivial constructor/destructor,\n    and can be copied/compared by memcpy/memcmp. */\ntemplate<typename T>\nstruct atomic_impl {\nprotected:\n    aligned_storage<T,sizeof(T)> my_storage;\nprivate:\n    //TODO: rechecks on recent versions of gcc if union is still the _only_ way to do a conversion without warnings\n    //! Union type used to convert type T to underlying integral type.\n    template<typename value_type>\n    union converter {\n        typedef typename atomic_rep<sizeof(value_type)>::word bits_type;\n        converter(){}\n        converter(value_type a_value) : value(a_value) {}\n        value_type value;\n        bits_type bits;\n    };\n\n    template<typename value_t>\n    static typename converter<value_t>::bits_type to_bits(value_t value){\n        return converter<value_t>(value).bits;\n    }\n    template<typename value_t>\n    static value_t to_value(typename converter<value_t>::bits_type bits){\n        converter<value_t> u;\n        u.bits = bits;\n        return u.value;\n    }\n\n    template<typename value_t>\n    union ptr_converter;            //Primary template declared, but never defined.\n\n    template<typename value_t>\n    union ptr_converter<value_t *> {\n        ptr_converter(){}\n        ptr_converter(value_t* a_value) : value(a_value) {}\n        value_t* value;\n        uintptr_t bits;\n    };\n    //TODO: check if making to_bits accepting reference (thus unifying it with to_bits_ref)\n    //does not hurt performance\n    template<typename value_t>\n    static typename converter<value_t>::bits_type & to_bits_ref(value_t& value){\n        //TODO: this #ifdef is temporary workaround, as union conversion seems to fail\n        //on suncc for 64 bit types for 32 bit target\n        #if !__SUNPRO_CC\n            return *(typename converter<value_t>::bits_type*)ptr_converter<value_t*>(&value).bits;\n        #else\n            return *(typename converter<value_t>::bits_type*)(&value);\n        #endif\n    }\n\n\npublic:\n    typedef T value_type;\n\n#if __TBB_ATOMIC_CTORS\n    atomic_impl() = default ;\n    constexpr atomic_impl(value_type value):my_storage(value){}\n#endif\n    template<memory_semantics M>\n    value_type fetch_and_store( value_type value ) {\n          return to_value<value_type>(\n                  internal::atomic_traits<sizeof(value_type),M>::fetch_and_store( &my_storage.my_value, to_bits(value) )\n          );\n    }\n\n    value_type fetch_and_store( value_type value ) {\n        return fetch_and_store<full_fence>(value);\n    }\n\n    template<memory_semantics M>\n    value_type compare_and_swap( value_type value, value_type comparand ) {\n        return to_value<value_type>(\n                internal::atomic_traits<sizeof(value_type),M>::compare_and_swap( &my_storage.my_value, to_bits(value), to_bits(comparand) )\n        );\n    }\n\n    value_type compare_and_swap( value_type value, value_type comparand ) {\n        return compare_and_swap<full_fence>(value,comparand);\n    }\n\n    operator value_type() const volatile {                // volatile qualifier here for backwards compatibility\n        return  to_value<value_type>(\n                __TBB_load_with_acquire( to_bits_ref(my_storage.my_value) )\n        );\n    }\n\n    template<memory_semantics M>\n    value_type load () const {\n        return to_value<value_type>(\n                internal::atomic_load_store_traits<M>::load( to_bits_ref(my_storage.my_value) )\n        );\n    }\n\n    value_type load () const {\n        return load<acquire>();\n    }\n\n    template<memory_semantics M>\n    void store ( value_type value ) {\n        internal::atomic_load_store_traits<M>::store( to_bits_ref(my_storage.my_value), to_bits(value));\n    }\n\n    void store ( value_type value ) {\n        store<release>( value );\n    }\n\nprotected:\n    value_type store_with_release( value_type rhs ) {\n       //TODO: unify with store<release>\n        __TBB_store_with_release( to_bits_ref(my_storage.my_value), to_bits(rhs) );\n        return rhs;\n    }\n};\n\n//! Base class that provides basic functionality for atomic<T> with fetch_and_add.\n/** I is the underlying type.\n    D is the difference type.\n    StepType should be char if I is an integral type, and T if I is a T*. */\ntemplate<typename I, typename D, typename StepType>\nstruct atomic_impl_with_arithmetic: atomic_impl<I> {\npublic:\n    typedef I value_type;\n#if    __TBB_ATOMIC_CTORS\n    atomic_impl_with_arithmetic() = default ;\n    constexpr atomic_impl_with_arithmetic(value_type value): atomic_impl<I>(value){}\n#endif\n    template<memory_semantics M>\n    value_type fetch_and_add( D addend ) {\n        return value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_add( &this->my_storage.my_value, addend*sizeof(StepType) ));\n    }\n\n    value_type fetch_and_add( D addend ) {\n        return fetch_and_add<full_fence>(addend);\n    }\n\n    template<memory_semantics M>\n    value_type fetch_and_increment() {\n        return fetch_and_add<M>(1);\n    }\n\n    value_type fetch_and_increment() {\n        return fetch_and_add(1);\n    }\n\n    template<memory_semantics M>\n    value_type fetch_and_decrement() {\n        return fetch_and_add<M>(__TBB_MINUS_ONE(D));\n    }\n\n    value_type fetch_and_decrement() {\n        return fetch_and_add(__TBB_MINUS_ONE(D));\n    }\n\npublic:\n    value_type operator+=( D value ) {\n        return fetch_and_add(value)+value;\n    }\n\n    value_type operator-=( D value ) {\n        // Additive inverse of value computed using binary minus,\n        // instead of unary minus, for sake of avoiding compiler warnings.\n        return operator+=(D(0)-value);\n    }\n\n    value_type operator++() {\n        return fetch_and_add(1)+1;\n    }\n\n    value_type operator--() {\n        return fetch_and_add(__TBB_MINUS_ONE(D))-1;\n    }\n\n    value_type operator++(int) {\n        return fetch_and_add(1);\n    }\n\n    value_type operator--(int) {\n        return fetch_and_add(__TBB_MINUS_ONE(D));\n    }\n};\n\n} /* Internal */\n//! @endcond\n\n//! Primary template for atomic.\n/** See the Reference for details.\n    @ingroup synchronization */\ntemplate<typename T>\nstruct atomic: internal::atomic_impl<T> {\n#if __TBB_ATOMIC_CTORS\n    atomic() = default;\n    constexpr atomic(T arg): internal::atomic_impl<T>(arg) {}\n#endif\n    T operator=( T rhs ) {\n        // \"this\" required here in strict ISO C++ because store_with_release is a dependent name\n        return this->store_with_release(rhs);\n    }\n    atomic<T>& operator=( const atomic<T>& rhs ) {this->store_with_release(rhs); return *this;}\n};\n\n#if __TBB_ATOMIC_CTORS\n    #define __TBB_DECL_ATOMIC(T)                                                                    \\\n        template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {              \\\n            atomic() = default;                                                                     \\\n            constexpr atomic(T arg): internal::atomic_impl_with_arithmetic<T,T,char>(arg) {}        \\\n                                                                                                    \\\n            T operator=( T rhs ) {return store_with_release(rhs);}                                  \\\n            atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}   \\\n        };\n#else\n    #define __TBB_DECL_ATOMIC(T)                                                                    \\\n        template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {              \\\n            T operator=( T rhs ) {return store_with_release(rhs);}                                  \\\n            atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}   \\\n        };\n#endif\n\n#if __TBB_64BIT_ATOMICS\n//TODO: consider adding non-default (and atomic) copy constructor for 32bit platform\n__TBB_DECL_ATOMIC(__TBB_LONG_LONG)\n__TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG)\n#else\n// test_atomic will verify that sizeof(long long)==8\n#endif\n__TBB_DECL_ATOMIC(long)\n__TBB_DECL_ATOMIC(unsigned long)\n\n#if _MSC_VER && !_WIN64\n#if __TBB_ATOMIC_CTORS\n/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option.\n   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T)\n   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be\n   type synonyms on the platform.  Type U should be the wider variant of T from the\n   perspective of /Wp64. */\n#define __TBB_DECL_ATOMIC_ALT(T,U) \\\n    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {             \\\n        atomic() = default ;                                                                   \\\n        constexpr atomic(T arg): internal::atomic_impl_with_arithmetic<T,T,char>(arg) {}       \\\n        T operator=( U rhs ) {return store_with_release(T(rhs));}                              \\\n        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \\\n    };\n#else\n#define __TBB_DECL_ATOMIC_ALT(T,U) \\\n    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {             \\\n        T operator=( U rhs ) {return store_with_release(T(rhs));}                              \\\n        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \\\n    };\n#endif\n__TBB_DECL_ATOMIC_ALT(unsigned,size_t)\n__TBB_DECL_ATOMIC_ALT(int,ptrdiff_t)\n#else\n__TBB_DECL_ATOMIC(unsigned)\n__TBB_DECL_ATOMIC(int)\n#endif /* _MSC_VER && !_WIN64 */\n\n__TBB_DECL_ATOMIC(unsigned short)\n__TBB_DECL_ATOMIC(short)\n__TBB_DECL_ATOMIC(char)\n__TBB_DECL_ATOMIC(signed char)\n__TBB_DECL_ATOMIC(unsigned char)\n\n#if !_MSC_VER || defined(_NATIVE_WCHAR_T_DEFINED)\n__TBB_DECL_ATOMIC(wchar_t)\n#endif /* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */\n\n//! Specialization for atomic<T*> with arithmetic and operator->.\ntemplate<typename T> struct atomic<T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {\n#if __TBB_ATOMIC_CTORS\n    atomic() = default ;\n    constexpr atomic(T* arg): internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T>(arg) {}\n#endif\n    T* operator=( T* rhs ) {\n        // \"this\" required here in strict ISO C++ because store_with_release is a dependent name\n        return this->store_with_release(rhs);\n    }\n    atomic<T*>& operator=( const atomic<T*>& rhs ) {\n        this->store_with_release(rhs); return *this;\n    }\n    T* operator->() const {\n        return (*this);\n    }\n};\n\n//! Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->.\ntemplate<> struct atomic<void*>: internal::atomic_impl<void*> {\n#if __TBB_ATOMIC_CTORS\n    atomic() = default ;\n    constexpr atomic(void* arg): internal::atomic_impl<void*>(arg) {}\n#endif\n    void* operator=( void* rhs ) {\n        // \"this\" required here in strict ISO C++ because store_with_release is a dependent name\n        return this->store_with_release(rhs);\n    }\n    atomic<void*>& operator=( const atomic<void*>& rhs ) {\n        this->store_with_release(rhs); return *this;\n    }\n};\n\n// Helpers to workaround ugly syntax of calling template member function of a\n// template class with template argument dependent on template parameters.\n\ntemplate <memory_semantics M, typename T>\nT load ( const atomic<T>& a ) { return a.template load<M>(); }\n\ntemplate <memory_semantics M, typename T>\nvoid store ( atomic<T>& a, T value ) { a.template store<M>(value); }\n\nnamespace interface6{\n//! Make an atomic for use in an initialization (list), as an alternative to zero-initialization or normal assignment.\ntemplate<typename T>\natomic<T> make_atomic(T t) {\n    atomic<T> a;\n    store<relaxed>(a,t);\n    return a;\n}\n}\nusing interface6::make_atomic;\n\nnamespace internal {\ntemplate<memory_semantics M, typename T >\nvoid swap(atomic<T> & lhs, atomic<T> & rhs){\n    T tmp = load<M>(lhs);\n    store<M>(lhs,load<M>(rhs));\n    store<M>(rhs,tmp);\n}\n\n// only to aid in the gradual conversion of ordinary variables to proper atomics\ntemplate<typename T>\ninline atomic<T>& as_atomic( T& t ) {\n    return (atomic<T>&)t;\n}\n} // namespace tbb::internal\n\n} // namespace tbb\n\n#if _MSC_VER && !__INTEL_COMPILER\n    #pragma warning (pop)\n#endif // warnings 4244, 4267 are back\n\n#endif /* __TBB_atomic_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/blocked_range.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_blocked_range_H\n#define __TBB_blocked_range_H\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n\n/** \\page range_req Requirements on range concept\n    Class \\c R implementing the concept of range must define:\n    - \\code R::R( const R& ); \\endcode               Copy constructor\n    - \\code R::~R(); \\endcode                        Destructor\n    - \\code bool R::is_divisible() const; \\endcode   True if range can be partitioned into two subranges\n    - \\code bool R::empty() const; \\endcode          True if range is empty\n    - \\code R::R( R& r, split ); \\endcode            Split range \\c r into two subranges.\n**/\n\n//! A range over which to iterate.\n/** @ingroup algorithms */\ntemplate<typename Value>\nclass blocked_range {\npublic:\n    //! Type of a value\n    /** Called a const_iterator for sake of algorithms that need to treat a blocked_range\n        as an STL container. */\n    typedef Value const_iterator;\n\n    //! Type for size of a range\n    typedef std::size_t size_type;\n\n    //! Construct range with default-constructed values for begin and end.\n    /** Requires that Value have a default constructor. */\n    blocked_range() : my_end(), my_begin() {}\n\n    //! Construct range over half-open interval [begin,end), with the given grainsize.\n    blocked_range( Value begin_, Value end_, size_type grainsize_=1 ) :\n        my_end(end_), my_begin(begin_), my_grainsize(grainsize_)\n    {\n        __TBB_ASSERT( my_grainsize>0, \"grainsize must be positive\" );\n    }\n\n    //! Beginning of range.\n    const_iterator begin() const {return my_begin;}\n\n    //! One past last value in range.\n    const_iterator end() const {return my_end;}\n\n    //! Size of the range\n    /** Unspecified if end()<begin(). */\n    size_type size() const {\n        __TBB_ASSERT( !(end()<begin()), \"size() unspecified if end()<begin()\" );\n        return size_type(my_end-my_begin);\n    }\n\n    //! The grain size for this range.\n    size_type grainsize() const {return my_grainsize;}\n\n    //------------------------------------------------------------------------\n    // Methods that implement Range concept\n    //------------------------------------------------------------------------\n\n    //! True if range is empty.\n    bool empty() const {return !(my_begin<my_end);}\n\n    //! True if range is divisible.\n    /** Unspecified if end()<begin(). */\n    bool is_divisible() const {return my_grainsize<size();}\n\n    //! Split range.\n    /** The new Range *this has the second part, the old range r has the first part.\n        Unspecified if end()<begin() or !is_divisible(). */\n    blocked_range( blocked_range& r, split ) :\n        my_end(r.my_end),\n        my_begin(do_split(r, split())),\n        my_grainsize(r.my_grainsize)\n    {\n        // only comparison 'less than' is required from values of blocked_range objects\n        __TBB_ASSERT( !(my_begin < r.my_end) && !(r.my_end < my_begin), \"blocked_range has been split incorrectly\" );\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split\n    static const bool is_splittable_in_proportion = true;\n\n    //! Split range.\n    /** The new Range *this has the second part split according to specified proportion, the old range r has the first part.\n        Unspecified if end()<begin() or !is_divisible(). */\n    blocked_range( blocked_range& r, proportional_split& proportion ) :\n        my_end(r.my_end),\n        my_begin(do_split(r, proportion)),\n        my_grainsize(r.my_grainsize)\n    {\n        // only comparison 'less than' is required from values of blocked_range objects\n        __TBB_ASSERT( !(my_begin < r.my_end) && !(r.my_end < my_begin), \"blocked_range has been split incorrectly\" );\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\nprivate:\n    /** NOTE: my_end MUST be declared before my_begin, otherwise the forking constructor will break. */\n    Value my_end;\n    Value my_begin;\n    size_type my_grainsize;\n\n    //! Auxiliary function used by forking constructor.\n    /** Using this function lets us not require that Value support assignment or default construction. */\n    static Value do_split( blocked_range& r, split )\n    {\n        __TBB_ASSERT( r.is_divisible(), \"cannot split blocked_range that is not divisible\" );\n        Value middle = r.my_begin + (r.my_end - r.my_begin) / 2u;\n        r.my_end = middle;\n        return middle;\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    static Value do_split( blocked_range& r, proportional_split& proportion )\n    {\n        __TBB_ASSERT( r.is_divisible(), \"cannot split blocked_range that is not divisible\" );\n\n        // usage of 32-bit floating point arithmetic is not enough to handle ranges of\n        // more than 2^24 iterations accurately. However, even on ranges with 2^64\n        // iterations the computational error approximately equals to 0.000001% which\n        // makes small impact on uniform distribution of such range's iterations (assuming\n        // all iterations take equal time to complete). See 'test_partitioner_whitebox'\n        // for implementation of an exact split algorithm\n        size_type right_part = size_type(float(r.size()) * float(proportion.right())\n                                         / float(proportion.left() + proportion.right()) + 0.5f);\n        return r.my_end = Value(r.my_end - right_part);\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\n    template<typename RowValue, typename ColValue>\n    friend class blocked_range2d;\n\n    template<typename RowValue, typename ColValue, typename PageValue>\n    friend class blocked_range3d;\n};\n\n} // namespace tbb\n\n#endif /* __TBB_blocked_range_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/blocked_range2d.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_blocked_range2d_H\n#define __TBB_blocked_range2d_H\n\n#include \"tbb_stddef.h\"\n#include \"blocked_range.h\"\n\nnamespace tbb {\n\n//! A 2-dimensional range that models the Range concept.\n/** @ingroup algorithms */\ntemplate<typename RowValue, typename ColValue=RowValue>\nclass blocked_range2d {\npublic:\n    //! Type for size of an iteration range\n    typedef blocked_range<RowValue> row_range_type;\n    typedef blocked_range<ColValue> col_range_type;\n\nprivate:\n    row_range_type my_rows;\n    col_range_type my_cols;\n\npublic:\n\n    blocked_range2d( RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize,\n                     ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize ) :\n        my_rows(row_begin,row_end,row_grainsize),\n        my_cols(col_begin,col_end,col_grainsize)\n    {\n    }\n\n    blocked_range2d( RowValue row_begin, RowValue row_end,\n                     ColValue col_begin, ColValue col_end ) :\n        my_rows(row_begin,row_end),\n        my_cols(col_begin,col_end)\n    {\n    }\n\n    //! True if range is empty\n    bool empty() const {\n        // Yes, it is a logical OR here, not AND.\n        return my_rows.empty() || my_cols.empty();\n    }\n\n    //! True if range is divisible into two pieces.\n    bool is_divisible() const {\n        return my_rows.is_divisible() || my_cols.is_divisible();\n    }\n\n    blocked_range2d( blocked_range2d& r, split ) :\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        split split_obj;\n        do_split(r, split_obj);\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split\n    static const bool is_splittable_in_proportion = true;\n\n    blocked_range2d( blocked_range2d& r, proportional_split& proportion ) :\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        do_split(r, proportion);\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\n    template <typename Split>\n    void do_split( blocked_range2d& r, Split& split_obj )\n    {\n        if( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {\n            my_cols.my_begin = col_range_type::do_split(r.my_cols, split_obj);\n        } else {\n            my_rows.my_begin = row_range_type::do_split(r.my_rows, split_obj);\n        }\n    }\n\n    //! The rows of the iteration space\n    const row_range_type& rows() const {return my_rows;}\n\n    //! The columns of the iteration space\n    const col_range_type& cols() const {return my_cols;}\n};\n\n} // namespace tbb\n\n#endif /* __TBB_blocked_range2d_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/blocked_range3d.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_blocked_range3d_H\n#define __TBB_blocked_range3d_H\n\n#include \"tbb_stddef.h\"\n#include \"blocked_range.h\"\n\nnamespace tbb {\n\n//! A 3-dimensional range that models the Range concept.\n/** @ingroup algorithms */\ntemplate<typename PageValue, typename RowValue=PageValue, typename ColValue=RowValue>\nclass blocked_range3d {\npublic:\n    //! Type for size of an iteration range\n    typedef blocked_range<PageValue> page_range_type;\n    typedef blocked_range<RowValue>  row_range_type;\n    typedef blocked_range<ColValue>  col_range_type;\n\nprivate:\n    page_range_type my_pages;\n    row_range_type  my_rows;\n    col_range_type  my_cols;\n\npublic:\n\n    blocked_range3d( PageValue page_begin, PageValue page_end,\n                     RowValue  row_begin,  RowValue row_end,\n                     ColValue  col_begin,  ColValue col_end ) :\n        my_pages(page_begin,page_end),\n        my_rows(row_begin,row_end),\n        my_cols(col_begin,col_end)\n    {\n    }\n\n    blocked_range3d( PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize,\n                     RowValue  row_begin,  RowValue row_end,   typename row_range_type::size_type row_grainsize,\n                     ColValue  col_begin,  ColValue col_end,   typename col_range_type::size_type col_grainsize ) :\n        my_pages(page_begin,page_end,page_grainsize),\n        my_rows(row_begin,row_end,row_grainsize),\n        my_cols(col_begin,col_end,col_grainsize)\n    {\n    }\n\n    //! True if range is empty\n    bool empty() const {\n        // Yes, it is a logical OR here, not AND.\n        return my_pages.empty() || my_rows.empty() || my_cols.empty();\n    }\n\n    //! True if range is divisible into two pieces.\n    bool is_divisible() const {\n        return  my_pages.is_divisible() || my_rows.is_divisible() || my_cols.is_divisible();\n    }\n\n    blocked_range3d( blocked_range3d& r, split ) :\n        my_pages(r.my_pages),\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        split split_obj;\n        do_split(r, split_obj);\n    }\n\n#if __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n    //! Static field to support proportional split\n    static const bool is_splittable_in_proportion = true;\n\n    blocked_range3d( blocked_range3d& r, proportional_split& proportion ) :\n        my_pages(r.my_pages),\n        my_rows(r.my_rows),\n        my_cols(r.my_cols)\n    {\n        do_split(r, proportion);\n    }\n#endif /* __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES */\n\n    template <typename Split>\n    void do_split( blocked_range3d& r, Split& split_obj)\n    {\n        if ( my_pages.size()*double(my_rows.grainsize()) < my_rows.size()*double(my_pages.grainsize()) ) {\n            if ( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {\n                my_cols.my_begin = col_range_type::do_split(r.my_cols, split_obj);\n            } else {\n                my_rows.my_begin = row_range_type::do_split(r.my_rows, split_obj);\n            }\n\t} else {\n            if ( my_pages.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_pages.grainsize()) ) {\n                my_cols.my_begin = col_range_type::do_split(r.my_cols, split_obj);\n            } else {\n                my_pages.my_begin = page_range_type::do_split(r.my_pages, split_obj);\n            }\n        }\n    }\n\n    //! The pages of the iteration space\n    const page_range_type& pages() const {return my_pages;}\n\n    //! The rows of the iteration space\n    const row_range_type& rows() const {return my_rows;}\n\n    //! The columns of the iteration space\n    const col_range_type& cols() const {return my_cols;}\n\n};\n\n} // namespace tbb\n\n#endif /* __TBB_blocked_range3d_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/cache_aligned_allocator.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_cache_aligned_allocator_H\n#define __TBB_cache_aligned_allocator_H\n\n#include <new>\n#include \"tbb_stddef.h\"\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n #include <utility> // std::forward\n#endif\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n    //! Cache/sector line size.\n    /** @ingroup memory_allocation */\n    size_t __TBB_EXPORTED_FUNC NFS_GetLineSize();\n\n    //! Allocate memory on cache/sector line boundary.\n    /** @ingroup memory_allocation */\n    void* __TBB_EXPORTED_FUNC NFS_Allocate( size_t n_element, size_t element_size, void* hint );\n\n    //! Free memory allocated by NFS_Allocate.\n    /** Freeing a NULL pointer is allowed, but has no effect.\n        @ingroup memory_allocation */\n    void __TBB_EXPORTED_FUNC NFS_Free( void* );\n}\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate<typename T>\nclass cache_aligned_allocator {\npublic:\n    typedef typename internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef cache_aligned_allocator<U> other;\n    };\n\n    cache_aligned_allocator() throw() {}\n    cache_aligned_allocator( const cache_aligned_allocator& ) throw() {}\n    template<typename U> cache_aligned_allocator(const cache_aligned_allocator<U>&) throw() {}\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects, starting on a cache/sector line.\n    pointer allocate( size_type n, const void* hint=0 ) {\n        // The \"hint\" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt\n        return pointer(internal::NFS_Allocate( n, sizeof(value_type), const_cast<void*>(hint) ));\n    }\n\n    //! Free block of memory that starts on a cache line\n    void deallocate( pointer p, size_type ) {\n        internal::NFS_Free(p);\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        return (~size_t(0)-internal::NFS_MaxLineSize)/sizeof(value_type);\n    }\n\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) {p->~value_type();}\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<>\nclass cache_aligned_allocator<void> {\npublic:\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<typename U> struct rebind {\n        typedef cache_aligned_allocator<U> other;\n    };\n};\n\ntemplate<typename T, typename U>\ninline bool operator==( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return true;}\n\ntemplate<typename T, typename U>\ninline bool operator!=( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return false;}\n\n} // namespace tbb\n\n#endif /* __TBB_cache_aligned_allocator_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/combinable.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_combinable_H\n#define __TBB_combinable_H\n\n#include \"enumerable_thread_specific.h\"\n#include \"cache_aligned_allocator.h\"\n\nnamespace tbb {\n/** \\name combinable\n    **/\n//@{\n//! Thread-local storage with optional reduction\n/** @ingroup containers */\n    template <typename T>\n        class combinable {\n    private:\n        typedef typename tbb::cache_aligned_allocator<T> my_alloc;\n\n        typedef typename tbb::enumerable_thread_specific<T, my_alloc, ets_no_key> my_ets_type;\n        my_ets_type my_ets;\n\n    public:\n\n        combinable() { }\n\n        template <typename finit>\n        combinable( finit _finit) : my_ets(_finit) { }\n\n        //! destructor\n        ~combinable() {\n        }\n\n        combinable(const combinable& other) : my_ets(other.my_ets) { }\n\n        combinable & operator=( const combinable & other) { my_ets = other.my_ets; return *this; }\n\n        void clear() { my_ets.clear(); }\n\n        T& local() { return my_ets.local(); }\n\n        T& local(bool & exists) { return my_ets.local(exists); }\n\n        // combine_func_t has signature T(T,T) or T(const T&, const T&)\n        template <typename combine_func_t>\n        T combine(combine_func_t f_combine) { return my_ets.combine(f_combine); }\n\n        // combine_func_t has signature void(T) or void(const T&)\n        template <typename combine_func_t>\n        void combine_each(combine_func_t f_combine) { my_ets.combine_each(f_combine); }\n\n    };\n} // namespace tbb\n#endif /* __TBB_combinable_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/compat/condition_variable",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_condition_variable_H\n#define __TBB_condition_variable_H\n\n#if _WIN32||_WIN64\n#include \"../machine/windows_api.h\"\n\nnamespace tbb { \nnamespace interface5 {\nnamespace internal { \nstruct condition_variable_using_event\n{\n    //! Event for blocking waiting threads.\n    HANDLE event;\n    //! Protects invariants involving n_waiters, release_count, and epoch.\n    CRITICAL_SECTION mutex;\n    //! Number of threads waiting on this condition variable\n    int n_waiters;\n    //! Number of threads remaining that should no longer wait on this condition variable.\n    int release_count;\n    //! To keep threads from waking up prematurely with earlier signals.\n    unsigned epoch;\n};\n}}} // namespace tbb::interface5::internal\n\n#ifndef CONDITION_VARIABLE_INIT\ntypedef void* CONDITION_VARIABLE;\ntypedef CONDITION_VARIABLE* PCONDITION_VARIABLE;\n#endif\n\n#else /* if not _WIN32||_WIN64 */\n#include <errno.h> // some systems need it for ETIMEDOUT\n#include <pthread.h>\n#if __linux__\n#include <ctime>\n#else /* generic Unix */\n#include <sys/time.h>\n#endif\n#endif /* _WIN32||_WIN64 */\n\n#include \"../tbb_stddef.h\"\n#include \"../mutex.h\"\n#include \"../tbb_thread.h\"\n#include \"../tbb_exception.h\"\n#include \"../tbb_profiling.h\"\n\nnamespace tbb {\n\nnamespace interface5 {\n\n// C++0x standard working draft 30.4.3\n// Lock tag types\nstruct defer_lock_t { }; //! do not acquire ownership of the mutex\nstruct try_to_lock_t { }; //! try to acquire ownership of the mutex without blocking\nstruct adopt_lock_t { }; //! assume the calling thread has already\nconst defer_lock_t defer_lock = {};\nconst try_to_lock_t try_to_lock = {};\nconst adopt_lock_t adopt_lock = {};\n\n// C++0x standard working draft 30.4.3.1\n//! lock_guard \ntemplate<typename M>\nclass lock_guard : tbb::internal::no_copy {\npublic:\n    //! mutex type\n    typedef M mutex_type;\n\n    //! Constructor\n    /** precondition: If mutex_type is not a recursive mutex, the calling thread\n        does not own the mutex m. */\n    explicit lock_guard(mutex_type& m) : pm(m) {m.lock();}\n    \n    //! Adopt_lock constructor\n    /** precondition: the calling thread owns the mutex m. */\n    lock_guard(mutex_type& m, adopt_lock_t) : pm(m) {}\n\n    //! Destructor\n    ~lock_guard() { pm.unlock(); }\nprivate:\n    mutex_type& pm;\n};\n\n// C++0x standard working draft 30.4.3.2\n//! unique_lock \ntemplate<typename M>\nclass unique_lock : tbb::internal::no_copy {\n    friend class condition_variable;\npublic:\n    typedef M mutex_type;\n\n    // 30.4.3.2.1 construct/copy/destroy\n    // NB: Without constructors that take an r-value reference to a unique_lock, the following constructor is of little use.\n    //! Constructor\n    /** postcondition: pm==0 && owns==false */\n    unique_lock() : pm(NULL), owns(false) {}\n\n    //! Constructor\n    /** precondition: if mutex_type is not a recursive mutex, the  calling thread\n        does not own the mutex m.  If the precondition is not met, a deadlock occurs.\n        postcondition: pm==&m and owns==true */\n    explicit unique_lock(mutex_type& m) : pm(&m) {m.lock(); owns=true;}\n\n    //! Defer_lock constructor\n    /** postcondition: pm==&m and owns==false */\n    unique_lock(mutex_type& m, defer_lock_t) : pm(&m), owns(false) {}\n\n    //! Try_to_lock constructor\n    /** precondition: if mutex_type is not a recursive mutex, the  calling thread\n       does not own the mutex m.  If the precondition is not met, a deadlock occurs.\n       postcondition: pm==&m and owns==res where res is the value returned by\n       the call to m.try_lock(). */\n    unique_lock(mutex_type& m, try_to_lock_t) : pm(&m) {owns = m.try_lock();}\n\n    //! Adopt_lock constructor\n    /** precondition: the calling thread owns the mutex. If it does not, mutex->unlock() would fail.\n        postcondition: pm==&m and owns==true */\n    unique_lock(mutex_type& m, adopt_lock_t) : pm(&m), owns(true) {}\n\n    //! Timed unique_lock acquisition.\n    /** To avoid requiring support for namespace chrono, this method deviates from the working draft in that \n        it uses tbb::tick_count::interval_t to specify the time duration. */\n    unique_lock(mutex_type& m, const tick_count::interval_t &i) : pm(&m) {owns = try_lock_for( i );}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    /** postconditions: pm == src_p.pm and owns == src_p.owns (where src_p is the state of src just prior to this\n        construction), src.pm == 0 and src.owns == false. */\n    unique_lock(unique_lock && src): pm(NULL), owns(false) {this->swap(src);}\n\n    //! Move assignment\n    /** effects: If owns calls pm->unlock().\n        Postconditions: pm == src_p.pm and owns == src_p.owns (where src_p is the state of src just prior to this\n        assignment), src.pm == 0 and src.owns == false. */\n    unique_lock& operator=(unique_lock && src) {\n        if (owns)\n            this->unlock();\n        pm = NULL;\n        this->swap(src);\n        return *this;\n    }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Destructor\n    ~unique_lock() { if( owns ) pm->unlock(); }\n\n    // 30.4.3.2.2 locking\n    //! Lock the mutex and own it.\n    void lock() {\n        if( pm ) {\n            if( !owns ) {\n                pm->lock();\n                owns = true;\n            } else \n                throw_exception_v4( tbb::internal::eid_possible_deadlock );\n        } else \n            throw_exception_v4( tbb::internal::eid_operation_not_permitted );\n        __TBB_ASSERT( owns, NULL );\n    }\n\n    //! Try to lock the mutex. \n    /** If successful, note that this lock owns it. Otherwise, set it false. */\n    bool try_lock() {\n        if( pm ) {\n            if( !owns )\n                owns = pm->try_lock();\n            else\n                throw_exception_v4( tbb::internal::eid_possible_deadlock );\n        } else \n            throw_exception_v4( tbb::internal::eid_operation_not_permitted );\n        return owns;\n    }\n \n    //! Try to lock the mutex. \n    bool try_lock_for( const tick_count::interval_t &i );\n\n    //! Unlock the mutex\n    /** And note that this lock no longer owns it. */\n    void unlock() { \n        if( owns ) {\n            pm->unlock();\n            owns = false;\n        } else\n            throw_exception_v4( tbb::internal::eid_operation_not_permitted );\n        __TBB_ASSERT( !owns, NULL );\n    }\n\n    // 30.4.3.2.3 modifiers\n    //! Swap the two unique locks\n    void swap(unique_lock& u) {\n        mutex_type* t_pm = u.pm;    u.pm   = pm;    pm   = t_pm;\n        bool t_owns      = u.owns;  u.owns = owns;  owns = t_owns;\n    }\n\n    //! Release control over the mutex.\n    mutex_type* release() {\n        mutex_type* o_pm = pm; \n        pm = NULL; \n        owns = false; \n        return o_pm; \n    }\n\n    // 30.4.3.2.4 observers\n    //! Does this lock own the mutex?\n    bool owns_lock() const { return owns; }\n\n    // TODO: Un-comment 'explicit' when the last non-C++0x compiler support is dropped\n    //! Does this lock own the mutex?\n    /*explicit*/ operator bool() const { return owns; }\n\n    //! Return the mutex that this lock currently has.\n    mutex_type* mutex() const { return pm; }\n\nprivate:\n    mutex_type* pm;\n    bool owns;\n};\n\ntemplate<typename M>\nbool unique_lock<M>::try_lock_for( const tick_count::interval_t &i)\n{ \n    const int unique_lock_tick = 100; /* microseconds; 0.1 milliseconds */\n    // the smallest wait-time is 0.1 milliseconds.\n    bool res = pm->try_lock();\n    int duration_in_micro; \n    if( !res && (duration_in_micro=int(i.seconds()*1e6))>unique_lock_tick ) {\n        tick_count::interval_t i_100( double(unique_lock_tick)/1e6 /* seconds */); // 100 microseconds = 0.1*10E-3\n        do {\n            this_tbb_thread::sleep(i_100); // sleep for 100 micro seconds\n            duration_in_micro -= unique_lock_tick;\n            res = pm->try_lock();\n        } while( !res && duration_in_micro>unique_lock_tick );\n    }\n    return (owns=res);\n}\n\n//! Swap the two unique locks that have the mutexes of same type \ntemplate<typename M>\nvoid swap(unique_lock<M>& x, unique_lock<M>& y) { x.swap( y ); }\n\nnamespace internal {\n\n#if _WIN32||_WIN64\nunion condvar_impl_t {\n    condition_variable_using_event cv_event;\n    CONDITION_VARIABLE             cv_native;\n};\nvoid __TBB_EXPORTED_FUNC internal_initialize_condition_variable( condvar_impl_t& cv );\nvoid __TBB_EXPORTED_FUNC internal_destroy_condition_variable(    condvar_impl_t& cv );\nvoid __TBB_EXPORTED_FUNC internal_condition_variable_notify_one( condvar_impl_t& cv );\nvoid __TBB_EXPORTED_FUNC internal_condition_variable_notify_all( condvar_impl_t& cv );\nbool __TBB_EXPORTED_FUNC internal_condition_variable_wait( condvar_impl_t& cv, mutex* mtx, const tick_count::interval_t* i = NULL );\n\n#else /* if !(_WIN32||_WIN64), i.e., POSIX threads */\ntypedef pthread_cond_t condvar_impl_t;\n#endif\n\n} // namespace internal\n\n//! cv_status\n/** C++0x standard working draft 30.5 */\nenum cv_status { no_timeout, timeout }; \n\n//! condition variable\n/** C++0x standard working draft 30.5.1 \n    @ingroup synchronization */\nclass condition_variable : tbb::internal::no_copy {\npublic:\n    //! Constructor\n    condition_variable() { \n#if _WIN32||_WIN64\n        internal_initialize_condition_variable( my_cv ); \n#else\n        pthread_cond_init( &my_cv, NULL );\n#endif\n    }\n\n    //! Destructor\n    ~condition_variable() { \n        //precondition: There shall be no thread blocked on *this.\n#if _WIN32||_WIN64\n        internal_destroy_condition_variable( my_cv );\n#else\n        pthread_cond_destroy( &my_cv );\n#endif\n    }\n\n    //! Notify one thread and wake it up\n    void notify_one() { \n#if _WIN32||_WIN64\n        internal_condition_variable_notify_one( my_cv ); \n#else\n        pthread_cond_signal( &my_cv );\n#endif\n    }\n\n    //! Notify all threads \n    void notify_all() { \n#if _WIN32||_WIN64\n        internal_condition_variable_notify_all( my_cv ); \n#else\n        pthread_cond_broadcast( &my_cv );\n#endif\n    }\n\n    //! Release the mutex associated with the lock and wait on this condition variable\n    void wait(unique_lock<mutex>& lock);\n\n    //! Wait on this condition variable while pred is false\n    template <class Predicate>\n    void wait(unique_lock<mutex>& lock, Predicate pred) {\n        while( !pred() )\n            wait( lock );\n    }\n\n    //! Timed version of wait()\n    cv_status wait_for(unique_lock<mutex>& lock, const tick_count::interval_t &i );\n\n    //! Timed version of the predicated wait\n    /** The loop terminates when pred() returns true or when the time duration specified by rel_time (i) has elapsed. */\n    template<typename Predicate>\n    bool wait_for(unique_lock<mutex>& lock, const tick_count::interval_t &i, Predicate pred)\n    {\n        while( !pred() ) {\n            cv_status st = wait_for( lock, i );\n            if( st==timeout )\n                return pred();\n        }\n        return true;\n    }\n\n    // C++0x standard working draft. 30.2.3\n    typedef internal::condvar_impl_t* native_handle_type;\n\n    native_handle_type native_handle() { return (native_handle_type) &my_cv; }\n\nprivate:\n    internal::condvar_impl_t my_cv;\n};\n\n\n#if _WIN32||_WIN64\ninline void condition_variable::wait( unique_lock<mutex>& lock )\n{\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    if( !internal_condition_variable_wait( my_cv, lock.mutex() ) ) {\n        int ec = GetLastError();\n        // on Windows 7, SleepConditionVariableCS() may return ERROR_TIMEOUT while the doc says it returns WAIT_TIMEOUT\n        __TBB_ASSERT_EX( ec!=WAIT_TIMEOUT&&ec!=ERROR_TIMEOUT, NULL );\n        lock.owns = true;\n        throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n    }\n    lock.owns = true;\n}\n\ninline cv_status condition_variable::wait_for( unique_lock<mutex>& lock, const tick_count::interval_t& i )\n{\n    cv_status rc = no_timeout;\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    // condvar_wait could be SleepConditionVariableCS (or SleepConditionVariableSRW) or our own pre-vista cond_var_wait()\n    if( !internal_condition_variable_wait( my_cv, lock.mutex(), &i ) ) {\n        int ec = GetLastError();\n        if( ec==WAIT_TIMEOUT || ec==ERROR_TIMEOUT )\n            rc = timeout;\n        else {\n            lock.owns = true;\n            throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n        }\n    }\n    lock.owns = true;\n    return rc;\n}\n\n#else /* !(_WIN32||_WIN64) */\ninline void condition_variable::wait( unique_lock<mutex>& lock )\n{\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    if( pthread_cond_wait( &my_cv, lock.mutex()->native_handle() ) ) {\n        lock.owns = true;\n        throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n    }\n    // upon successful return, the mutex has been locked and is owned by the calling thread.\n    lock.owns = true;\n}\n\ninline cv_status condition_variable::wait_for( unique_lock<mutex>& lock, const tick_count::interval_t& i )\n{\n#if __linux__\n    struct timespec req;\n    double sec = i.seconds();\n    clock_gettime( CLOCK_REALTIME, &req );\n    req.tv_sec  += static_cast<long>(sec);\n    req.tv_nsec += static_cast<long>( (sec - static_cast<long>(sec))*1e9 );\n#else /* generic Unix */\n    struct timeval tv;\n    struct timespec req;\n    double sec = i.seconds();\n    int status = gettimeofday(&tv, NULL);\n    __TBB_ASSERT_EX( status==0, \"gettimeofday failed\" );\n    req.tv_sec  = tv.tv_sec + static_cast<long>(sec);\n    req.tv_nsec = tv.tv_usec*1000 + static_cast<long>( (sec - static_cast<long>(sec))*1e9 );\n#endif /*(choice of OS) */\n    if( req.tv_nsec>=1e9 ) {\n        req.tv_sec  += 1;\n        req.tv_nsec -= static_cast<long int>(1e9);\n    }\n    __TBB_ASSERT( 0<=req.tv_nsec && req.tv_nsec<1e9, NULL );\n\n    int ec;\n    cv_status rc = no_timeout;\n    __TBB_ASSERT( lock.owns, NULL );\n    lock.owns = false;\n    if( ( ec=pthread_cond_timedwait( &my_cv, lock.mutex()->native_handle(), &req ) ) ) {\n        if( ec==ETIMEDOUT )\n            rc = timeout;\n        else {\n            __TBB_ASSERT( lock.try_lock()==false, NULL );\n            lock.owns = true;\n            throw_exception_v4( tbb::internal::eid_condvar_wait_failed );\n        }\n    }\n    lock.owns = true;\n    return rc;\n}\n#endif /* !(_WIN32||_WIN64) */\n\n} // namespace interface5\n\n__TBB_DEFINE_PROFILING_SET_NAME(interface5::condition_variable)\n\n} // namespace tbb \n\n#if TBB_IMPLEMENT_CPP0X\n\nnamespace std {\n\nusing tbb::interface5::defer_lock_t;\nusing tbb::interface5::try_to_lock_t;\nusing tbb::interface5::adopt_lock_t;\nusing tbb::interface5::defer_lock;\nusing tbb::interface5::try_to_lock;\nusing tbb::interface5::adopt_lock;\nusing tbb::interface5::lock_guard;\nusing tbb::interface5::unique_lock;\nusing tbb::interface5::swap;   /* this is for void std::swap(unique_lock<M>&,unique_lock<M>&) */\nusing tbb::interface5::condition_variable;\nusing tbb::interface5::cv_status;\nusing tbb::interface5::timeout;\nusing tbb::interface5::no_timeout;\n\n} // namespace std \n\n#endif /* TBB_IMPLEMENT_CPP0X */\n\n#endif /* __TBB_condition_variable_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/compat/ppl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_compat_ppl_H\n#define __TBB_compat_ppl_H\n\n#include \"../task_group.h\"\n#include \"../parallel_invoke.h\"\n#include \"../parallel_for_each.h\"\n#include \"../parallel_for.h\"\n#include \"../tbb_exception.h\"\n#include \"../critical_section.h\"\n#include \"../reader_writer_lock.h\"\n#include \"../combinable.h\"\n\nnamespace Concurrency {\n\n#if __TBB_TASK_GROUP_CONTEXT\n    using tbb::task_handle;\n    using tbb::task_group_status;\n    using tbb::task_group;\n    using tbb::structured_task_group;\n    using tbb::invalid_multiple_scheduling;\n    using tbb::missing_wait;\n    using tbb::make_task;\n\n    using tbb::not_complete;\n    using tbb::complete;\n    using tbb::canceled;\n\n    using tbb::is_current_task_group_canceling;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    using tbb::parallel_invoke;\n    using tbb::strict_ppl::parallel_for;\n    using tbb::parallel_for_each;\n    using tbb::critical_section;\n    using tbb::reader_writer_lock;\n    using tbb::combinable;\n\n    using tbb::improper_lock;\n\n} // namespace Concurrency\n\n#endif /* __TBB_compat_ppl_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/compat/thread",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_thread_H\n#define __TBB_thread_H\n\n#include \"../tbb_config.h\"\n\n#if TBB_IMPLEMENT_CPP0X\n\n#include \"../tbb_thread.h\"\n\nnamespace std {\n\ntypedef tbb::tbb_thread thread;\n\nnamespace this_thread {\n    using tbb::this_tbb_thread::get_id;\n    using tbb::this_tbb_thread::yield;\n\n    inline void sleep_for(const tbb::tick_count::interval_t& rel_time) {\n        tbb::internal::thread_sleep_v3( rel_time );\n    }\n}\n\n} // namespace std\n\n#else /* TBB_IMPLEMENT_CPP0X */\n\n#define __TBB_COMPAT_THREAD_RECURSION_PROTECTOR 1\n#include <thread>\n#undef __TBB_COMPAT_THREAD_RECURSION_PROTECTOR\n\n#endif /* TBB_IMPLEMENT_CPP0X */\n\n#else /* __TBB_thread_H */\n\n#if __TBB_COMPAT_THREAD_RECURSION_PROTECTOR\n#error The tbb/compat/thread header attempts to include itself. \\\n       Please make sure that {TBBROOT}/include/tbb/compat is NOT in include paths.\n#endif\n\n#endif /* __TBB_thread_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/compat/tuple",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_tuple_H\n#define __TBB_tuple_H\n\n#include <utility>\n#include \"../tbb_stddef.h\"\n\n// build preprocessor variables for varying number of arguments\n// Need the leading comma so the empty __TBB_T_PACK will not cause a syntax error.\n#if __TBB_VARIADIC_MAX <= 5\n#define __TBB_T_PACK\n#define __TBB_U_PACK\n#define __TBB_TYPENAME_T_PACK\n#define __TBB_TYPENAME_U_PACK\n#define __TBB_NULL_TYPE_PACK\n#define __TBB_REF_T_PARAM_PACK\n#define __TBB_CONST_REF_T_PARAM_PACK\n#define __TBB_T_PARAM_LIST_PACK\n#define __TBB_CONST_NULL_REF_PACK\n//\n#elif __TBB_VARIADIC_MAX == 6\n#define __TBB_T_PACK ,__T5\n#define __TBB_U_PACK ,__U5\n#define __TBB_TYPENAME_T_PACK , typename __T5\n#define __TBB_TYPENAME_U_PACK , typename __U5\n#define __TBB_NULL_TYPE_PACK , null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5\n#define __TBB_CONST_REF_T_PARAM_PACK ,const __T5& t5\n#define __TBB_T_PARAM_LIST_PACK ,t5\n#define __TBB_CONST_NULL_REF_PACK , const null_type&\n//\n#elif __TBB_VARIADIC_MAX == 7\n#define __TBB_T_PACK ,__T5, __T6\n#define __TBB_U_PACK ,__U5, __U6\n#define __TBB_TYPENAME_T_PACK , typename __T5 , typename __T6\n#define __TBB_TYPENAME_U_PACK , typename __U5 , typename __U6\n#define __TBB_NULL_TYPE_PACK , null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6\n#define __TBB_CONST_REF_T_PARAM_PACK ,const __T5& t5, const __T6& t6\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&\n//\n#elif __TBB_VARIADIC_MAX == 8\n#define __TBB_T_PACK ,__T5, __T6, __T7\n#define __TBB_U_PACK ,__U5, __U6, __U7\n#define __TBB_TYPENAME_T_PACK , typename __T5 , typename __T6, typename __T7\n#define __TBB_TYPENAME_U_PACK , typename __U5 , typename __U6, typename __U7\n#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6, __T7& t7\n#define __TBB_CONST_REF_T_PARAM_PACK , const __T5& t5, const __T6& t6, const __T7& t7\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&\n//\n#elif __TBB_VARIADIC_MAX == 9\n#define __TBB_T_PACK ,__T5, __T6, __T7, __T8\n#define __TBB_U_PACK ,__U5, __U6, __U7, __U8\n#define __TBB_TYPENAME_T_PACK , typename __T5, typename __T6, typename __T7, typename __T8\n#define __TBB_TYPENAME_U_PACK , typename __U5, typename __U6, typename __U7, typename __U8\n#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6, __T7& t7, __T8& t8\n#define __TBB_CONST_REF_T_PARAM_PACK , const __T5& t5, const __T6& t6, const __T7& t7, const __T8& t8\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7 ,t8\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&, const null_type&\n//\n#elif __TBB_VARIADIC_MAX >= 10\n#define __TBB_T_PACK ,__T5, __T6, __T7, __T8, __T9\n#define __TBB_U_PACK ,__U5, __U6, __U7, __U8, __U9\n#define __TBB_TYPENAME_T_PACK , typename __T5, typename __T6, typename __T7, typename __T8, typename __T9\n#define __TBB_TYPENAME_U_PACK , typename __U5, typename __U6, typename __U7, typename __U8, typename __U9\n#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type, null_type, null_type\n#define __TBB_REF_T_PARAM_PACK ,__T5& t5, __T6& t6, __T7& t7, __T8& t8, __T9& t9\n#define __TBB_CONST_REF_T_PARAM_PACK , const __T5& t5, const __T6& t6, const __T7& t7, const __T8& t8, const __T9& t9\n#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7 ,t8 ,t9\n#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&, const null_type&, const null_type&\n#endif\n\n\n\nnamespace tbb {\nnamespace interface5 {\n\nnamespace internal {\nstruct null_type { };\n}\nusing internal::null_type;\n\n// tuple forward declaration\ntemplate <typename __T0=null_type, typename __T1=null_type, typename __T2=null_type,\n          typename __T3=null_type, typename __T4=null_type\n#if __TBB_VARIADIC_MAX >= 6\n, typename __T5=null_type\n#if __TBB_VARIADIC_MAX >= 7\n, typename __T6=null_type\n#if __TBB_VARIADIC_MAX >= 8\n, typename __T7=null_type\n#if __TBB_VARIADIC_MAX >= 9\n, typename __T8=null_type\n#if __TBB_VARIADIC_MAX >= 10\n, typename __T9=null_type\n#endif\n#endif\n#endif\n#endif\n#endif\n>\nclass tuple;\n\nnamespace internal {\n\n// const null_type temp\ninline const null_type cnull() { return null_type(); }\n\n// cons forward declaration\ntemplate <typename __HT, typename __TT> struct cons;\n\n// type of a component of the cons\ntemplate<int __N, typename __T>\nstruct component {\n    typedef typename __T::tail_type next;\n    typedef typename component<__N-1,next>::type type;\n};\n\ntemplate<typename __T>\nstruct component<0,__T> {\n    typedef typename __T::head_type type;\n};\n\ntemplate<>\nstruct component<0,null_type> {\n    typedef null_type type;\n};\n\n// const version of component\n\ntemplate<int __N, typename __T>\nstruct component<__N, const __T>\n{\n    typedef typename __T::tail_type next;\n    typedef const typename component<__N-1,next>::type type;\n};\n\ntemplate<typename __T>\nstruct component<0, const __T>\n{\n    typedef const typename __T::head_type type;\n};\n\n\n// helper class for getting components of cons\ntemplate< int __N>\nstruct get_helper {\ntemplate<typename __HT, typename __TT>\ninline static typename component<__N, cons<__HT,__TT> >::type& get(cons<__HT,__TT>& ti) {\n    return get_helper<__N-1>::get(ti.tail);\n}\ntemplate<typename __HT, typename __TT>\ninline static typename component<__N, cons<__HT,__TT> >::type const& get(const cons<__HT,__TT>& ti) {\n    return get_helper<__N-1>::get(ti.tail);\n}\n};\n\ntemplate<>\nstruct get_helper<0> {\ntemplate<typename __HT, typename __TT>\ninline static typename component<0, cons<__HT,__TT> >::type& get(cons<__HT,__TT>& ti) {\n    return ti.head;\n}\ntemplate<typename __HT, typename __TT>\ninline static typename component<0, cons<__HT,__TT> >::type const& get(const cons<__HT,__TT>& ti) {\n    return ti.head;\n}\n};\n\n// traits adaptor\ntemplate <typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK>\nstruct tuple_traits {\n    typedef cons <__T0, typename tuple_traits<__T1, __T2, __T3, __T4 __TBB_T_PACK , null_type>::U > U;\n};\n\ntemplate <typename __T0>\nstruct tuple_traits<__T0, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > {\n    typedef cons<__T0, null_type> U;\n};\n\ntemplate<>\nstruct tuple_traits<null_type, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > {\n    typedef null_type U;\n};\n\n\n// core cons defs\ntemplate <typename __HT, typename __TT>\nstruct cons{\n\n    typedef __HT head_type;\n    typedef __TT tail_type;\n\n    head_type head; \n    tail_type tail;\n\n    static const int length = 1 + tail_type::length;\n\n    // default constructors\n    explicit cons() : head(), tail() { }\n\n    // non-default constructors\n    cons(head_type& h, const tail_type& t) : head(h), tail(t) { }\n\n    template <typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\n    cons(const __T0& t0, const __T1& t1, const __T2& t2, const __T3& t3, const __T4& t4 __TBB_CONST_REF_T_PARAM_PACK) :\n        head(t0), tail(t1, t2, t3, t4 __TBB_T_PARAM_LIST_PACK, cnull()) { }\n\n    template <typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\n    cons(__T0& t0, __T1& t1, __T2& t2, __T3& t3, __T4& t4 __TBB_REF_T_PARAM_PACK) :\n        head(t0), tail(t1, t2, t3, t4 __TBB_T_PARAM_LIST_PACK , cnull()) { }\n\n    template <typename __HT1, typename __TT1>\n    cons(const cons<__HT1,__TT1>& other) : head(other.head), tail(other.tail) { }\n\n    cons& operator=(const cons& other) { head = other.head; tail = other.tail; return *this; }\n\n    friend bool operator==(const cons& me, const cons& other) {\n        return me.head == other.head && me.tail == other.tail;\n    }\n    friend bool operator<(const cons& me, const cons& other)  {\n        return me.head < other.head || (!(other.head < me.head) && me.tail < other.tail);\n    }\n    friend bool operator>(const cons& me, const cons& other)  { return other<me; }\n    friend bool operator!=(const cons& me, const cons& other) { return !(me==other); }\n    friend bool operator>=(const cons& me, const cons& other) { return !(me<other); }\n    friend bool operator<=(const cons& me, const cons& other) { return !(me>other); }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator==(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) {\n        return me.head == other.head && me.tail == other.tail;\n    }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator<(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) {\n        return me.head < other.head || (!(other.head < me.head) && me.tail < other.tail);\n    }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator>(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return other<me; }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator!=(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return !(me==other); }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator>=(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return !(me<other); }\n\n    template<typename __HT1, typename __TT1>\n    friend bool operator<=(const cons<__HT,__TT>& me, const cons<__HT1,__TT1>& other) { return !(me>other); }\n\n\n};  // cons\n\n\ntemplate <typename __HT>\nstruct cons<__HT,null_type> { \n\n    typedef __HT head_type;\n    typedef null_type tail_type;\n\n    head_type head; \n\n    static const int length = 1;\n\n    // default constructor\n    cons() : head() { /*std::cout << \"default constructor 1\\n\";*/ }\n\n    cons(const null_type&, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head() { /*std::cout << \"default constructor 2\\n\";*/ }\n\n    // non-default constructor\n    template<typename __T1>\n    cons(__T1& t1, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(t1) { /*std::cout << \"non-default a1, t1== \" << t1 << \"\\n\";*/}\n\n    cons(head_type& h, const null_type& = null_type() ) : head(h) { }\n    cons(const head_type& t0, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(t0) { }\n\n    // converting constructor\n    template<typename __HT1>\n    cons(__HT1 h1, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(h1) { }\n\n    // copy constructor\n    template<typename __HT1>\n    cons( const cons<__HT1, null_type>& other) : head(other.head) { }\n\n    // assignment operator\n    cons& operator=(const cons& other) { head = other.head; return *this; }\n\n    friend bool operator==(const cons& me, const cons& other) { return me.head == other.head; }\n    friend bool operator<(const cons& me, const cons& other) { return me.head < other.head; }\n    friend bool operator>(const cons& me, const cons& other) { return other<me; }\n    friend bool operator!=(const cons& me, const cons& other) {return !(me==other); }\n    friend bool operator<=(const cons& me, const cons& other) {return !(me>other); }\n    friend bool operator>=(const cons& me, const cons& other) {return !(me<other); }\n\n    template<typename __HT1>\n    friend bool operator==(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) {\n        return me.head == other.head;\n    }\n\n    template<typename __HT1>\n    friend bool operator<(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) {\n        return me.head < other.head;\n    }\n\n    template<typename __HT1>\n    friend bool operator>(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return other<me; }\n\n    template<typename __HT1>\n    friend bool operator!=(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return !(me==other); }\n\n    template<typename __HT1>\n    friend bool operator<=(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return !(me>other); }\n\n    template<typename __HT1>\n    friend bool operator>=(const cons<__HT,null_type>& me, const cons<__HT1,null_type>& other) { return !(me<other); }\n\n};  // cons\n\ntemplate <>\nstruct cons<null_type,null_type> { typedef null_type tail_type; static const int length = 0; };\n\n// wrapper for default constructor\ntemplate<typename __T>\ninline const __T wrap_dcons(__T*) { return __T(); }\n\n} // namespace internal\n\n// tuple definition\ntemplate<typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\nclass tuple : public internal::tuple_traits<__T0, __T1, __T2, __T3, __T4 __TBB_T_PACK >::U {\n    // friends\n    template <typename __T> friend class tuple_size;\n    template<int __N, typename __T> friend struct tuple_element;\n\n    // stl components\n    typedef tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK > value_type;\n    typedef value_type *pointer;\n    typedef const value_type *const_pointer;\n    typedef value_type &reference;\n    typedef const value_type &const_reference;\n    typedef size_t size_type;\n\n    typedef typename internal::tuple_traits<__T0,__T1,__T2,__T3, __T4 __TBB_T_PACK >::U my_cons;\n\npublic:\n    tuple(const __T0& t0=internal::wrap_dcons((__T0*)NULL)\n          ,const __T1& t1=internal::wrap_dcons((__T1*)NULL)\n          ,const __T2& t2=internal::wrap_dcons((__T2*)NULL)\n          ,const __T3& t3=internal::wrap_dcons((__T3*)NULL)\n          ,const __T4& t4=internal::wrap_dcons((__T4*)NULL)\n#if __TBB_VARIADIC_MAX >= 6\n          ,const __T5& t5=internal::wrap_dcons((__T5*)NULL)\n#if __TBB_VARIADIC_MAX >= 7\n          ,const __T6& t6=internal::wrap_dcons((__T6*)NULL)\n#if __TBB_VARIADIC_MAX >= 8\n          ,const __T7& t7=internal::wrap_dcons((__T7*)NULL)\n#if __TBB_VARIADIC_MAX >= 9\n          ,const __T8& t8=internal::wrap_dcons((__T8*)NULL)\n#if __TBB_VARIADIC_MAX >= 10\n          ,const __T9& t9=internal::wrap_dcons((__T9*)NULL)\n#endif\n#endif\n#endif\n#endif\n#endif\n          ) :\n        my_cons(t0,t1,t2,t3,t4 __TBB_T_PARAM_LIST_PACK) { }\n\n    template<int __N>\n    struct internal_tuple_element {\n        typedef typename internal::component<__N,my_cons>::type type;\n    };\n\n    template<int __N>\n    typename internal_tuple_element<__N>::type& get() { return internal::get_helper<__N>::get(*this); }\n\n    template<int __N>\n    typename internal_tuple_element<__N>::type const& get() const { return internal::get_helper<__N>::get(*this); }\n\n    template<typename __U1, typename __U2>\n    tuple& operator=(const internal::cons<__U1,__U2>& other) {\n        my_cons::operator=(other);\n        return *this;\n    }\n\n    template<typename __U1, typename __U2>\n    tuple& operator=(const std::pair<__U1,__U2>& other) {\n        // __TBB_ASSERT(tuple_size<value_type>::value == 2, \"Invalid size for pair to tuple assignment\");\n        this->head = other.first;\n        this->tail.head = other.second;\n        return *this;\n    }\n\n    friend bool operator==(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)==(other);}\n    friend bool operator<(const tuple& me,  const tuple& other) {return static_cast<const my_cons &>(me)<(other);}\n    friend bool operator>(const tuple& me,  const tuple& other) {return static_cast<const my_cons &>(me)>(other);}\n    friend bool operator!=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)!=(other);}\n    friend bool operator>=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)>=(other);}\n    friend bool operator<=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)<=(other);}\n\n};  // tuple\n\n// empty tuple\ntemplate<>\nclass tuple<null_type, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > : public null_type {\n};\n\n// helper classes\n\ntemplate < typename __T>\nclass tuple_size {\npublic:\n    static const size_t value = 1 + tuple_size<typename __T::tail_type>::value;\n};\n\ntemplate <>\nclass tuple_size<tuple<> > { \npublic:\n    static const size_t value = 0;\n};\n\ntemplate <>\nclass tuple_size<null_type> {\npublic:\n    static const size_t value = 0;\n};\n\ntemplate<int __N, typename __T>\nstruct tuple_element {\n    typedef typename internal::component<__N, typename __T::my_cons>::type type;\n};\n\ntemplate<int __N, typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\ninline static typename tuple_element<__N,tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK > >::type&\n    get(tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK >& t) { return internal::get_helper<__N>::get(t); }\n\ntemplate<int __N, typename __T0, typename __T1, typename __T2, typename __T3, typename __T4 __TBB_TYPENAME_T_PACK >\ninline static typename tuple_element<__N,tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK > >::type const&\n    get(const tuple<__T0,__T1,__T2,__T3,__T4 __TBB_T_PACK >& t) { return internal::get_helper<__N>::get(t); }\n\n}  // interface5\n} // tbb\n\n#if !__TBB_CPP11_TUPLE_PRESENT\nnamespace tbb {\n    namespace flow {\n        using tbb::interface5::tuple;\n        using tbb::interface5::tuple_size;\n        using tbb::interface5::tuple_element;\n        using tbb::interface5::get;\n    }\n}\n#endif\n\n#undef __TBB_T_PACK\n#undef __TBB_U_PACK\n#undef __TBB_TYPENAME_T_PACK\n#undef __TBB_TYPENAME_U_PACK\n#undef __TBB_NULL_TYPE_PACK\n#undef __TBB_REF_T_PARAM_PACK\n#undef __TBB_CONST_REF_T_PARAM_PACK\n#undef __TBB_T_PARAM_LIST_PACK\n#undef __TBB_CONST_NULL_REF_PACK\n \n#endif /* __TBB_tuple_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/concurrent_hash_map.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_concurrent_hash_map_H\n#define __TBB_concurrent_hash_map_H\n\n#include \"tbb_stddef.h\"\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <iterator>\n#include <utility>      // Need std::pair\n#include <cstring>      // Need std::memset\n#include <algorithm>    // Need std::swap\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\n#include \"cache_aligned_allocator.h\"\n#include \"tbb_allocator.h\"\n#include \"spin_rw_mutex.h\"\n#include \"atomic.h\"\n#include \"tbb_exception.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n#if __TBB_INITIALIZER_LISTS_PRESENT\n#include <initializer_list>\n#endif\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n#include <typeinfo>\n#endif\n#if __TBB_STATISTICS\n#include <stdio.h>\n#endif\n\nnamespace tbb {\n\nnamespace interface5 {\n\n    template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> > >\n    class concurrent_hash_map;\n\n    //! @cond INTERNAL\n    namespace internal {\n    using namespace tbb::internal;\n\n\n    //! Type of a hash code.\n    typedef size_t hashcode_t;\n    //! Node base type\n    struct hash_map_node_base : tbb::internal::no_copy {\n        //! Mutex type\n        typedef spin_rw_mutex mutex_t;\n        //! Scoped lock type for mutex\n        typedef mutex_t::scoped_lock scoped_t;\n        //! Next node in chain\n        hash_map_node_base *next;\n        mutex_t mutex;\n    };\n    //! Incompleteness flag value\n    static hash_map_node_base *const rehash_req = reinterpret_cast<hash_map_node_base*>(size_t(3));\n    //! Rehashed empty bucket flag\n    static hash_map_node_base *const empty_rehashed = reinterpret_cast<hash_map_node_base*>(size_t(0));\n    //! base class of concurrent_hash_map\n    class hash_map_base {\n    public:\n        //! Size type\n        typedef size_t size_type;\n        //! Type of a hash code.\n        typedef size_t hashcode_t;\n        //! Segment index type\n        typedef size_t segment_index_t;\n        //! Node base type\n        typedef hash_map_node_base node_base;\n        //! Bucket type\n        struct bucket : tbb::internal::no_copy {\n            //! Mutex type for buckets\n            typedef spin_rw_mutex mutex_t;\n            //! Scoped lock type for mutex\n            typedef mutex_t::scoped_lock scoped_t;\n            mutex_t mutex;\n            node_base *node_list;\n        };\n        //! Count of segments in the first block\n        static size_type const embedded_block = 1;\n        //! Count of segments in the first block\n        static size_type const embedded_buckets = 1<<embedded_block;\n        //! Count of segments in the first block\n        static size_type const first_block = 8; //including embedded_block. perfect with bucket size 16, so the allocations are power of 4096\n        //! Size of a pointer / table size\n        static size_type const pointers_per_table = sizeof(segment_index_t) * 8; // one segment per bit\n        //! Segment pointer\n        typedef bucket *segment_ptr_t;\n        //! Segment pointers table type\n        typedef segment_ptr_t segments_table_t[pointers_per_table];\n        //! Hash mask = sum of allocated segment sizes - 1\n        atomic<hashcode_t> my_mask;\n        //! Segment pointers table. Also prevents false sharing between my_mask and my_size\n        segments_table_t my_table;\n        //! Size of container in stored items\n        atomic<size_type> my_size; // It must be in separate cache line from my_mask due to performance effects\n        //! Zero segment\n        bucket my_embedded_segment[embedded_buckets];\n#if __TBB_STATISTICS\n        atomic<unsigned> my_info_resizes; // concurrent ones\n        mutable atomic<unsigned> my_info_restarts; // race collisions\n        atomic<unsigned> my_info_rehashes;  // invocations of rehash_bucket\n#endif\n        //! Constructor\n        hash_map_base() {\n            std::memset( this, 0, pointers_per_table*sizeof(segment_ptr_t) // 32*4=128   or 64*8=512\n                + sizeof(my_size) + sizeof(my_mask)  // 4+4 or 8+8\n                + embedded_buckets*sizeof(bucket) ); // n*8 or n*16\n            for( size_type i = 0; i < embedded_block; i++ ) // fill the table\n                my_table[i] = my_embedded_segment + segment_base(i);\n            my_mask = embedded_buckets - 1;\n            __TBB_ASSERT( embedded_block <= first_block, \"The first block number must include embedded blocks\");\n#if __TBB_STATISTICS\n            my_info_resizes = 0; // concurrent ones\n            my_info_restarts = 0; // race collisions\n            my_info_rehashes = 0;  // invocations of rehash_bucket\n#endif\n        }\n\n        //! @return segment index of given index in the array\n        static segment_index_t segment_index_of( size_type index ) {\n            return segment_index_t( __TBB_Log2( index|1 ) );\n        }\n\n        //! @return the first array index of given segment\n        static segment_index_t segment_base( segment_index_t k ) {\n            return (segment_index_t(1)<<k & ~segment_index_t(1));\n        }\n\n        //! @return segment size except for @arg k == 0\n        static size_type segment_size( segment_index_t k ) {\n            return size_type(1)<<k; // fake value for k==0\n        }\n\n        //! @return true if @arg ptr is valid pointer\n        static bool is_valid( void *ptr ) {\n            return reinterpret_cast<uintptr_t>(ptr) > uintptr_t(63);\n        }\n\n        //! Initialize buckets\n        static void init_buckets( segment_ptr_t ptr, size_type sz, bool is_initial ) {\n            if( is_initial ) std::memset(ptr, 0, sz*sizeof(bucket) );\n            else for(size_type i = 0; i < sz; i++, ptr++) {\n                *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;\n                ptr->node_list = rehash_req;\n            }\n        }\n\n        //! Add node @arg n to bucket @arg b\n        static void add_to_bucket( bucket *b, node_base *n ) {\n            __TBB_ASSERT(b->node_list != rehash_req, NULL);\n            n->next = b->node_list;\n            b->node_list = n; // its under lock and flag is set\n        }\n\n        //! Exception safety helper\n        struct enable_segment_failsafe : tbb::internal::no_copy {\n            segment_ptr_t *my_segment_ptr;\n            enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}\n            ~enable_segment_failsafe() {\n                if( my_segment_ptr ) *my_segment_ptr = 0; // indicate no allocation in progress\n            }\n        };\n\n        //! Enable segment\n        void enable_segment( segment_index_t k, bool is_initial = false ) {\n            __TBB_ASSERT( k, \"Zero segment must be embedded\" );\n            enable_segment_failsafe watchdog( my_table, k );\n            cache_aligned_allocator<bucket> alloc;\n            size_type sz;\n            __TBB_ASSERT( !is_valid(my_table[k]), \"Wrong concurrent assignment\");\n            if( k >= first_block ) {\n                sz = segment_size( k );\n                segment_ptr_t ptr = alloc.allocate( sz );\n                init_buckets( ptr, sz, is_initial );\n                itt_hide_store_word( my_table[k], ptr );\n                sz <<= 1;// double it to get entire capacity of the container\n            } else { // the first block\n                __TBB_ASSERT( k == embedded_block, \"Wrong segment index\" );\n                sz = segment_size( first_block );\n                segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );\n                init_buckets( ptr, sz - embedded_buckets, is_initial );\n                ptr -= segment_base(embedded_block);\n                for(segment_index_t i = embedded_block; i < first_block; i++) // calc the offsets\n                    itt_hide_store_word( my_table[i], ptr + segment_base(i) );\n            }\n            itt_store_word_with_release( my_mask, sz-1 );\n            watchdog.my_segment_ptr = 0;\n        }\n\n        //! Get bucket by (masked) hashcode\n        bucket *get_bucket( hashcode_t h ) const throw() { // TODO: add throw() everywhere?\n            segment_index_t s = segment_index_of( h );\n            h -= segment_base(s);\n            segment_ptr_t seg = my_table[s];\n            __TBB_ASSERT( is_valid(seg), \"hashcode must be cut by valid mask for allocated segments\" );\n            return &seg[h];\n        }\n\n        // internal serial rehashing helper\n        void mark_rehashed_levels( hashcode_t h ) throw () {\n            segment_index_t s = segment_index_of( h );\n            while( segment_ptr_t seg = my_table[++s] )\n                if( seg[h].node_list == rehash_req ) {\n                    seg[h].node_list = empty_rehashed;\n                    mark_rehashed_levels( h + ((hashcode_t)1<<s) ); // optimized segment_base(s)\n                }\n        }\n\n        //! Check for mask race\n        // Splitting into two functions should help inlining\n        inline bool check_mask_race( const hashcode_t h, hashcode_t &m ) const {\n            hashcode_t m_now, m_old = m;\n            m_now = (hashcode_t) itt_load_word_with_acquire( my_mask );\n            if( m_old != m_now )\n                return check_rehashing_collision( h, m_old, m = m_now );\n            return false;\n        }\n\n        //! Process mask race, check for rehashing collision\n        bool check_rehashing_collision( const hashcode_t h, hashcode_t m_old, hashcode_t m ) const {\n            __TBB_ASSERT(m_old != m, NULL); // TODO?: m arg could be optimized out by passing h = h&m\n            if( (h & m_old) != (h & m) ) { // mask changed for this hashcode, rare event\n                // condition above proves that 'h' has some other bits set beside 'm_old'\n                // find next applicable mask after m_old    //TODO: look at bsl instruction\n                for( ++m_old; !(h & m_old); m_old <<= 1 ) // at maximum few rounds depending on the first block size\n                    ;\n                m_old = (m_old<<1) - 1; // get full mask from a bit\n                __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);\n                // check whether it is rehashing/ed\n                if( itt_load_word_with_acquire(get_bucket(h & m_old)->node_list) != rehash_req )\n                {\n#if __TBB_STATISTICS\n                    my_info_restarts++; // race collisions\n#endif\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        //! Insert a node and check for load factor. @return segment index to enable.\n        segment_index_t insert_new_node( bucket *b, node_base *n, hashcode_t mask ) {\n            size_type sz = ++my_size; // prefix form is to enforce allocation after the first item inserted\n            add_to_bucket( b, n );\n            // check load factor\n            if( sz >= mask ) { // TODO: add custom load_factor\n                segment_index_t new_seg = __TBB_Log2( mask+1 ); //optimized segment_index_of\n                __TBB_ASSERT( is_valid(my_table[new_seg-1]), \"new allocations must not publish new mask until segment has allocated\");\n                static const segment_ptr_t is_allocating = (segment_ptr_t)2;\n                if( !itt_hide_load_word(my_table[new_seg])\n                  && as_atomic(my_table[new_seg]).compare_and_swap(is_allocating, NULL) == NULL )\n                    return new_seg; // The value must be processed\n            }\n            return 0;\n        }\n\n        //! Prepare enough segments for number of buckets\n        void reserve(size_type buckets) {\n            if( !buckets-- ) return;\n            bool is_initial = !my_size;\n            for( size_type m = my_mask; buckets > m; m = my_mask )\n                enable_segment( segment_index_of( m+1 ), is_initial );\n        }\n        //! Swap hash_map_bases\n        void internal_swap(hash_map_base &table) {\n            using std::swap;\n            swap(this->my_mask, table.my_mask);\n            swap(this->my_size, table.my_size);\n            for(size_type i = 0; i < embedded_buckets; i++)\n                swap(this->my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);\n            for(size_type i = embedded_block; i < pointers_per_table; i++)\n                swap(this->my_table[i], table.my_table[i]);\n        }\n    };\n\n    template<typename Iterator>\n    class hash_map_range;\n\n    //! Meets requirements of a forward iterator for STL */\n    /** Value is either the T or const T type of the container.\n        @ingroup containers */\n    template<typename Container, typename Value>\n    class hash_map_iterator\n        : public std::iterator<std::forward_iterator_tag,Value>\n    {\n        typedef Container map_type;\n        typedef typename Container::node node;\n        typedef hash_map_base::node_base node_base;\n        typedef hash_map_base::bucket bucket;\n\n        template<typename C, typename T, typename U>\n        friend bool operator==( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend bool operator!=( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend ptrdiff_t operator-( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );\n\n        template<typename C, typename U>\n        friend class hash_map_iterator;\n\n        template<typename I>\n        friend class hash_map_range;\n\n        void advance_to_next_bucket() { // TODO?: refactor to iterator_base class\n            size_t k = my_index+1;\n            while( my_bucket && k <= my_map->my_mask ) {\n                // Following test uses 2's-complement wizardry\n                if( k& (k-2) ) // not the beginning of a segment\n                    ++my_bucket;\n                else my_bucket = my_map->get_bucket( k );\n                my_node = static_cast<node*>( my_bucket->node_list );\n                if( hash_map_base::is_valid(my_node) ) {\n                    my_index = k; return;\n                }\n                ++k;\n            }\n            my_bucket = 0; my_node = 0; my_index = k; // the end\n        }\n#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)\n        template<typename Key, typename T, typename HashCompare, typename A>\n        friend class interface5::concurrent_hash_map;\n#else\n    public: // workaround\n#endif\n        //! concurrent_hash_map over which we are iterating.\n        const Container *my_map;\n\n        //! Index in hash table for current item\n        size_t my_index;\n\n        //! Pointer to bucket\n        const bucket *my_bucket;\n\n        //! Pointer to node that has current item\n        node *my_node;\n\n        hash_map_iterator( const Container &map, size_t index, const bucket *b, node_base *n );\n\n    public:\n        //! Construct undefined iterator\n        hash_map_iterator() {}\n        hash_map_iterator( const hash_map_iterator<Container,typename Container::value_type> &other ) :\n            my_map(other.my_map),\n            my_index(other.my_index),\n            my_bucket(other.my_bucket),\n            my_node(other.my_node)\n        {}\n        Value& operator*() const {\n            __TBB_ASSERT( hash_map_base::is_valid(my_node), \"iterator uninitialized or at end of container?\" );\n            return my_node->item;\n        }\n        Value* operator->() const {return &operator*();}\n        hash_map_iterator& operator++();\n\n        //! Post increment\n        hash_map_iterator operator++(int) {\n            hash_map_iterator old(*this);\n            operator++();\n            return old;\n        }\n    };\n\n    template<typename Container, typename Value>\n    hash_map_iterator<Container,Value>::hash_map_iterator( const Container &map, size_t index, const bucket *b, node_base *n ) :\n        my_map(&map),\n        my_index(index),\n        my_bucket(b),\n        my_node( static_cast<node*>(n) )\n    {\n        if( b && !hash_map_base::is_valid(n) )\n            advance_to_next_bucket();\n    }\n\n    template<typename Container, typename Value>\n    hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {\n        my_node = static_cast<node*>( my_node->next );\n        if( !my_node ) advance_to_next_bucket();\n        return *this;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator==( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {\n        return i.my_node == j.my_node && i.my_map == j.my_map;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator!=( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {\n        return i.my_node != j.my_node || i.my_map != j.my_map;\n    }\n\n    //! Range class used with concurrent_hash_map\n    /** @ingroup containers */\n    template<typename Iterator>\n    class hash_map_range {\n        typedef typename Iterator::map_type map_type;\n        Iterator my_begin;\n        Iterator my_end;\n        mutable Iterator my_midpoint;\n        size_t my_grainsize;\n        //! Set my_midpoint to point approximately half way between my_begin and my_end.\n        void set_midpoint() const;\n        template<typename U> friend class hash_map_range;\n    public:\n        //! Type for size of a range\n        typedef std::size_t size_type;\n        typedef typename Iterator::value_type value_type;\n        typedef typename Iterator::reference reference;\n        typedef typename Iterator::difference_type difference_type;\n        typedef Iterator iterator;\n\n        //! True if range is empty.\n        bool empty() const {return my_begin==my_end;}\n\n        //! True if range can be partitioned into two subranges.\n        bool is_divisible() const {\n            return my_midpoint!=my_end;\n        }\n        //! Split range.\n        hash_map_range( hash_map_range& r, split ) :\n            my_end(r.my_end),\n            my_grainsize(r.my_grainsize)\n        {\n            r.my_end = my_begin = r.my_midpoint;\n            __TBB_ASSERT( !empty(), \"Splitting despite the range is not divisible\" );\n            __TBB_ASSERT( !r.empty(), \"Splitting despite the range is not divisible\" );\n            set_midpoint();\n            r.set_midpoint();\n        }\n        //! type conversion\n        template<typename U>\n        hash_map_range( hash_map_range<U>& r) :\n            my_begin(r.my_begin),\n            my_end(r.my_end),\n            my_midpoint(r.my_midpoint),\n            my_grainsize(r.my_grainsize)\n        {}\n        //! Init range with container and grainsize specified\n        hash_map_range( const map_type &map, size_type grainsize_ = 1 ) :\n            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),\n            my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),\n            my_grainsize( grainsize_ )\n        {\n            __TBB_ASSERT( grainsize_>0, \"grainsize must be positive\" );\n            set_midpoint();\n        }\n        const Iterator& begin() const {return my_begin;}\n        const Iterator& end() const {return my_end;}\n        //! The grain size for this range.\n        size_type grainsize() const {return my_grainsize;}\n    };\n\n    template<typename Iterator>\n    void hash_map_range<Iterator>::set_midpoint() const {\n        // Split by groups of nodes\n        size_t m = my_end.my_index-my_begin.my_index;\n        if( m > my_grainsize ) {\n            m = my_begin.my_index + m/2u;\n            hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);\n            my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);\n        } else {\n            my_midpoint = my_end;\n        }\n        __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,\n            \"my_begin is after my_midpoint\" );\n        __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,\n            \"my_midpoint is after my_end\" );\n        __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,\n            \"[my_begin, my_midpoint) range should not be empty\" );\n    }\n\n    } // internal\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress \"conditional expression is constant\" warning.\n    #pragma warning( push )\n    #pragma warning( disable: 4127 )\n#endif\n\n//! Unordered map from Key to T.\n/** concurrent_hash_map is associative container with concurrent access.\n\n@par Compatibility\n    The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).\n\n@par Exception Safety\n    - Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.\n    - If exception happens during insert() operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).\n    - If exception happens during operator=() operation, the container can have a part of source items, and methods size() and empty() can return wrong results.\n\n@par Changes since TBB 2.1\n    - Replaced internal algorithm and data structure. Patent is pending.\n    - Added buckets number argument for constructor\n\n@par Changes since TBB 2.0\n    - Fixed exception-safety\n    - Added template argument for allocator\n    - Added allocator argument in constructors\n    - Added constructor from a range of iterators\n    - Added several new overloaded insert() methods\n    - Added get_allocator()\n    - Added swap()\n    - Added count()\n    - Added overloaded erase(accessor &) and erase(const_accessor&)\n    - Added equal_range() [const]\n    - Added [const_]pointer, [const_]reference, and allocator_type types\n    - Added global functions: operator==(), operator!=(), and swap()\n\n    @ingroup containers */\ntemplate<typename Key, typename T, typename HashCompare, typename Allocator>\nclass concurrent_hash_map : protected internal::hash_map_base {\n    template<typename Container, typename Value>\n    friend class internal::hash_map_iterator;\n\n    template<typename I>\n    friend class internal::hash_map_range;\n\npublic:\n    typedef Key key_type;\n    typedef T mapped_type;\n    typedef std::pair<const Key,T> value_type;\n    typedef hash_map_base::size_type size_type;\n    typedef ptrdiff_t difference_type;\n    typedef value_type *pointer;\n    typedef const value_type *const_pointer;\n    typedef value_type &reference;\n    typedef const value_type &const_reference;\n    typedef internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;\n    typedef internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;\n    typedef internal::hash_map_range<iterator> range_type;\n    typedef internal::hash_map_range<const_iterator> const_range_type;\n    typedef Allocator allocator_type;\n\nprotected:\n    friend class const_accessor;\n    struct node;\n    typedef typename Allocator::template rebind<node>::other node_allocator_type;\n    node_allocator_type my_allocator;\n    HashCompare my_hash_compare;\n\n    struct node : public node_base {\n        value_type item;\n        node( const Key &key ) : item(key, T()) {}\n        node( const Key &key, const T &t ) : item(key, t) {}\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        node( const Key &key, T &&t ) : item(key, std::move(t)) {}\n        node( value_type&& i ) : item(std::move(i)){}\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n        template<typename... Args>\n        node( Args&&... args ) : item(std::forward<Args>(args)...) {}\n#if __TBB_COPY_FROM_NON_CONST_REF_BROKEN\n        node( value_type& i ) : item(const_cast<const value_type&>(i)) {}\n#endif //__TBB_COPY_FROM_NON_CONST_REF_BROKEN\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n        node( const value_type& i ) : item(i) {}\n\n        // exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17\n        void *operator new( size_t /*size*/, node_allocator_type &a ) {\n            void *ptr = a.allocate(1);\n            if(!ptr)\n                tbb::internal::throw_exception(tbb::internal::eid_bad_alloc);\n            return ptr;\n        }\n        // match placement-new form above to be called if exception thrown in constructor\n        void operator delete( void *ptr, node_allocator_type &a ) { a.deallocate(static_cast<node*>(ptr),1); }\n    };\n\n    void delete_node( node_base *n ) {\n        my_allocator.destroy( static_cast<node*>(n) );\n        my_allocator.deallocate( static_cast<node*>(n), 1);\n    }\n\n    static node* allocate_node_copy_construct(node_allocator_type& allocator, const Key &key, const T * t){\n        return  new( allocator ) node(key, *t);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    static node* allocate_node_move_construct(node_allocator_type& allocator, const Key &key, const T * t){\n        return  new( allocator ) node(key, std::move(*const_cast<T*>(t)));\n    }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Args>\n    static node* allocate_node_emplace_construct(node_allocator_type& allocator, Args&&... args){\n        return  new( allocator ) node(std::forward<Args>(args)...);\n    }\n#endif //#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif\n\n    static node* allocate_node_default_construct(node_allocator_type& allocator, const Key &key, const T * ){\n        return  new( allocator ) node(key);\n    }\n\n    static node* do_not_allocate_node(node_allocator_type& , const Key &, const T * ){\n        __TBB_ASSERT(false,\"this dummy function should not be called\");\n        return NULL;\n    }\n\n    node *search_bucket( const key_type &key, bucket *b ) const {\n        node *n = static_cast<node*>( b->node_list );\n        while( is_valid(n) && !my_hash_compare.equal(key, n->item.first) )\n            n = static_cast<node*>( n->next );\n        __TBB_ASSERT(n != internal::rehash_req, \"Search can be executed only for rehashed bucket\");\n        return n;\n    }\n\n    //! bucket accessor is to find, rehash, acquire a lock, and access a bucket\n    class bucket_accessor : public bucket::scoped_t {\n        bucket *my_b;\n    public:\n        bucket_accessor( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) { acquire( base, h, writer ); }\n        //! find a bucket by masked hashcode, optionally rehash, and acquire the lock\n        inline void acquire( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) {\n            my_b = base->get_bucket( h );\n            // TODO: actually, notification is unnecessary here, just hiding double-check\n            if( itt_load_word_with_acquire(my_b->node_list) == internal::rehash_req\n                && try_acquire( my_b->mutex, /*write=*/true ) )\n            {\n                if( my_b->node_list == internal::rehash_req ) base->rehash_bucket( my_b, h ); //recursive rehashing\n            }\n            else bucket::scoped_t::acquire( my_b->mutex, writer );\n            __TBB_ASSERT( my_b->node_list != internal::rehash_req, NULL);\n        }\n        //! check whether bucket is locked for write\n        bool is_writer() { return bucket::scoped_t::is_writer; }\n        //! get bucket pointer\n        bucket *operator() () { return my_b; }\n    };\n\n    // TODO refactor to hash_base\n    void rehash_bucket( bucket *b_new, const hashcode_t h ) {\n        __TBB_ASSERT( *(intptr_t*)(&b_new->mutex), \"b_new must be locked (for write)\");\n        __TBB_ASSERT( h > 1, \"The lowermost buckets can't be rehashed\" );\n        __TBB_store_with_release(b_new->node_list, internal::empty_rehashed); // mark rehashed\n        hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit\n#if __TBB_STATISTICS\n        my_info_rehashes++; // invocations of rehash_bucket\n#endif\n\n        bucket_accessor b_old( this, h & mask );\n\n        mask = (mask<<1) | 1; // get full mask for new bucket\n        __TBB_ASSERT( (mask&(mask+1))==0 && (h & mask) == h, NULL );\n    restart:\n        for( node_base **p = &b_old()->node_list, *n = __TBB_load_with_acquire(*p); is_valid(n); n = *p ) {\n            hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );\n#if TBB_USE_ASSERT\n            hashcode_t bmask = h & (mask>>1);\n            bmask = bmask==0? 1 : ( 1u<<(__TBB_Log2( bmask )+1 ) ) - 1; // minimal mask of parent bucket\n            __TBB_ASSERT( (c & bmask) == (h & bmask), \"hash() function changed for key in table\" );\n#endif\n            if( (c & mask) == h ) {\n                if( !b_old.is_writer() )\n                    if( !b_old.upgrade_to_writer() ) {\n                        goto restart; // node ptr can be invalid due to concurrent erase\n                    }\n                *p = n->next; // exclude from b_old\n                add_to_bucket( b_new, n );\n            } else p = &n->next; // iterate to next item\n        }\n    }\n\n    struct call_clear_on_leave {\n        concurrent_hash_map* my_ch_map;\n        call_clear_on_leave( concurrent_hash_map* a_ch_map ) : my_ch_map(a_ch_map) {}\n        void dismiss() {my_ch_map = 0;}\n        ~call_clear_on_leave(){\n            if (my_ch_map){\n                my_ch_map->clear();\n            }\n        }\n    };\npublic:\n\n    class accessor;\n    //! Combines data access, locking, and garbage collection.\n    class const_accessor : private node::scoped_t /*which derived from no_copy*/ {\n        friend class concurrent_hash_map<Key,T,HashCompare,Allocator>;\n        friend class accessor;\n    public:\n        //! Type of value\n        typedef const typename concurrent_hash_map::value_type value_type;\n\n        //! True if result is empty.\n        bool empty() const { return !my_node; }\n\n        //! Set to null\n        void release() {\n            if( my_node ) {\n                node::scoped_t::release();\n                my_node = 0;\n            }\n        }\n\n        //! Return reference to associated value in hash table.\n        const_reference operator*() const {\n            __TBB_ASSERT( my_node, \"attempt to dereference empty accessor\" );\n            return my_node->item;\n        }\n\n        //! Return pointer to associated value in hash table.\n        const_pointer operator->() const {\n            return &operator*();\n        }\n\n        //! Create empty result\n        const_accessor() : my_node(NULL) {}\n\n        //! Destroy result after releasing the underlying reference.\n        ~const_accessor() {\n            my_node = NULL; // scoped lock's release() is called in its destructor\n        }\n    protected:\n        bool is_writer() { return node::scoped_t::is_writer; }\n        node *my_node;\n        hashcode_t my_hash;\n    };\n\n    //! Allows write access to elements and combines data access, locking, and garbage collection.\n    class accessor: public const_accessor {\n    public:\n        //! Type of value\n        typedef typename concurrent_hash_map::value_type value_type;\n\n        //! Return reference to associated value in hash table.\n        reference operator*() const {\n            __TBB_ASSERT( this->my_node, \"attempt to dereference empty accessor\" );\n            return this->my_node->item;\n        }\n\n        //! Return pointer to associated value in hash table.\n        pointer operator->() const {\n            return &operator*();\n        }\n    };\n\n    //! Construct empty table.\n    concurrent_hash_map( const allocator_type &a = allocator_type() )\n        : internal::hash_map_base(), my_allocator(a)\n    {}\n\n    //! Construct empty table with n preallocated buckets. This number serves also as initial concurrency level.\n    concurrent_hash_map( size_type n, const allocator_type &a = allocator_type() )\n        : my_allocator(a)\n    {\n        reserve( n );\n    }\n\n    //! Copy constructor\n    concurrent_hash_map( const concurrent_hash_map &table, const allocator_type &a = allocator_type() )\n        : internal::hash_map_base(), my_allocator(a)\n    {\n        internal_copy(table);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    concurrent_hash_map( concurrent_hash_map &&table )\n        : internal::hash_map_base(), my_allocator(std::move(table.get_allocator()))\n    {\n        swap(table);\n    }\n\n    //! Move constructor\n    concurrent_hash_map( concurrent_hash_map &&table, const allocator_type &a )\n        : internal::hash_map_base(), my_allocator(a)\n    {\n        if (a == table.get_allocator()){\n            this->swap(table);\n        }else{\n            call_clear_on_leave scope_guard(this);\n            internal_copy(std::make_move_iterator(table.begin()), std::make_move_iterator(table.end()));\n            scope_guard.dismiss();\n        }\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Construction with copying iteration range and given allocator instance\n    template<typename I>\n    concurrent_hash_map( I first, I last, const allocator_type &a = allocator_type() )\n        : my_allocator(a)\n    {\n        reserve( std::distance(first, last) ); // TODO: load_factor?\n        internal_copy(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Construct empty table with n preallocated buckets. This number serves also as initial concurrency level.\n    concurrent_hash_map( std::initializer_list<value_type> il, const allocator_type &a = allocator_type() )\n        : my_allocator(a)\n    {\n        reserve(il.size());\n        internal_copy(il.begin(), il.end());\n    }\n\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Assignment\n    concurrent_hash_map& operator=( const concurrent_hash_map &table ) {\n        if( this!=&table ) {\n            clear();\n            internal_copy(table);\n        }\n        return *this;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move Assignment\n    concurrent_hash_map& operator=( concurrent_hash_map &&table ) {\n        if(this != &table){\n            typedef typename tbb::internal::allocator_traits<allocator_type>::propagate_on_container_move_assignment pocma_t;\n            if(pocma_t::value || this->my_allocator == table.my_allocator) {\n                concurrent_hash_map trash (std::move(*this));\n                //TODO: swapping allocators here may be a problem, replace with single direction moving iff pocma is set\n                this->swap(table);\n            } else {\n                //do per element move\n                concurrent_hash_map moved_copy(std::move(table), this->my_allocator);\n                this->swap(moved_copy);\n            }\n        }\n        return *this;\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Assignment\n    concurrent_hash_map& operator=( std::initializer_list<value_type> il ) {\n        clear();\n        reserve(il.size());\n        internal_copy(il.begin(), il.end());\n        return *this;\n    }\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n\n    //! Rehashes and optionally resizes the whole table.\n    /** Useful to optimize performance before or after concurrent operations.\n        Also enables using of find() and count() concurrent methods in serial context. */\n    void rehash(size_type n = 0);\n\n    //! Clear table\n    void clear();\n\n    //! Clear table and destroy it.\n    ~concurrent_hash_map() { clear(); }\n\n    //------------------------------------------------------------------------\n    // Parallel algorithm support\n    //------------------------------------------------------------------------\n    range_type range( size_type grainsize=1 ) {\n        return range_type( *this, grainsize );\n    }\n    const_range_type range( size_type grainsize=1 ) const {\n        return const_range_type( *this, grainsize );\n    }\n\n    //------------------------------------------------------------------------\n    // STL support - not thread-safe methods\n    //------------------------------------------------------------------------\n    iterator begin() { return iterator( *this, 0, my_embedded_segment, my_embedded_segment->node_list ); }\n    iterator end() { return iterator( *this, 0, 0, 0 ); }\n    const_iterator begin() const { return const_iterator( *this, 0, my_embedded_segment, my_embedded_segment->node_list ); }\n    const_iterator end() const { return const_iterator( *this, 0, 0, 0 ); }\n    std::pair<iterator, iterator> equal_range( const Key& key ) { return internal_equal_range( key, end() ); }\n    std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const { return internal_equal_range( key, end() ); }\n\n    //! Number of items in table.\n    size_type size() const { return my_size; }\n\n    //! True if size()==0.\n    bool empty() const { return my_size == 0; }\n\n    //! Upper bound on size.\n    size_type max_size() const {return (~size_type(0))/sizeof(node);}\n\n    //! Returns the current number of buckets\n    size_type bucket_count() const { return my_mask+1; }\n\n    //! return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    //! swap two instances. Iterators are invalidated\n    void swap( concurrent_hash_map &table );\n\n    //------------------------------------------------------------------------\n    // concurrent map operations\n    //------------------------------------------------------------------------\n\n    //! Return count of items (0 or 1)\n    size_type count( const Key &key ) const {\n        return const_cast<concurrent_hash_map*>(this)->lookup(/*insert*/false, key, NULL, NULL, /*write=*/false, &do_not_allocate_node );\n    }\n\n    //! Find item and acquire a read lock on the item.\n    /** Return true if item is found, false otherwise. */\n    bool find( const_accessor &result, const Key &key ) const {\n        result.release();\n        return const_cast<concurrent_hash_map*>(this)->lookup(/*insert*/false, key, NULL, &result, /*write=*/false, &do_not_allocate_node );\n    }\n\n    //! Find item and acquire a write lock on the item.\n    /** Return true if item is found, false otherwise. */\n    bool find( accessor &result, const Key &key ) {\n        result.release();\n        return lookup(/*insert*/false, key, NULL, &result, /*write=*/true, &do_not_allocate_node );\n    }\n\n    //! Insert item (if not already present) and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    bool insert( const_accessor &result, const Key &key ) {\n        result.release();\n        return lookup(/*insert*/true, key, NULL, &result, /*write=*/false, &allocate_node_default_construct );\n    }\n\n    //! Insert item (if not already present) and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    bool insert( accessor &result, const Key &key ) {\n        result.release();\n        return lookup(/*insert*/true, key, NULL, &result, /*write=*/true, &allocate_node_default_construct );\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    bool insert( const_accessor &result, const value_type &value ) {\n        result.release();\n        return lookup(/*insert*/true, value.first, &value.second, &result, /*write=*/false, &allocate_node_copy_construct );\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    bool insert( accessor &result, const value_type &value ) {\n        result.release();\n        return lookup(/*insert*/true, value.first, &value.second, &result, /*write=*/true, &allocate_node_copy_construct );\n    }\n\n    //! Insert item by copying if there is no such key present already\n    /** Returns true if item is inserted. */\n    bool insert( const value_type &value ) {\n        return lookup(/*insert*/true, value.first, &value.second, NULL, /*write=*/false, &allocate_node_copy_construct );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    bool insert( const_accessor &result, value_type && value ) {\n        return generic_move_insert(result, std::move(value));\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    bool insert( accessor &result, value_type && value ) {\n        return generic_move_insert(result, std::move(value));\n    }\n\n    //! Insert item by copying if there is no such key present already\n    /** Returns true if item is inserted. */\n    bool insert( value_type && value ) {\n        return generic_move_insert(accessor_not_used(), std::move(value));\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.\n    /** Returns true if item is new. */\n    template<typename... Args>\n    bool emplace( const_accessor &result, Args&&... args ) {\n        return generic_emplace(result, std::forward<Args>(args)...);\n    }\n\n    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.\n    /** Returns true if item is new. */\n    template<typename... Args>\n    bool emplace( accessor &result, Args&&... args ) {\n        return generic_emplace(result, std::forward<Args>(args)...);\n    }\n\n    //! Insert item by copying if there is no such key present already\n    /** Returns true if item is inserted. */\n    template<typename... Args>\n    bool emplace( Args&&... args ) {\n        return generic_emplace(accessor_not_used(), std::forward<Args>(args)...);\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Insert range [first, last)\n    template<typename I>\n    void insert( I first, I last ) {\n        for ( ; first != last; ++first )\n            insert( *first );\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Insert initializer list\n    void insert( std::initializer_list<value_type> il ) {\n        insert( il.begin(), il.end() );\n    }\n#endif //__TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Erase item.\n    /** Return true if item was erased by particularly this call. */\n    bool erase( const Key& key );\n\n    //! Erase item by const_accessor.\n    /** Return true if item was erased by particularly this call. */\n    bool erase( const_accessor& item_accessor ) {\n        return exclude( item_accessor );\n    }\n\n    //! Erase item by accessor.\n    /** Return true if item was erased by particularly this call. */\n    bool erase( accessor& item_accessor ) {\n        return exclude( item_accessor );\n    }\n\nprotected:\n    //! Insert or find item and optionally acquire a lock on the item.\n    bool lookup(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write,  node* (*allocate_node)(node_allocator_type& ,  const Key &, const T * ), node *tmp_n = 0  ) ;\n\n    struct accessor_not_used { void release(){}};\n    friend const_accessor* accessor_location( accessor_not_used const& ){ return NULL;}\n    friend const_accessor* accessor_location( const_accessor & a )      { return &a;}\n\n    friend bool is_write_access_needed( accessor const& )           { return true;}\n    friend bool is_write_access_needed( const_accessor const& )     { return false;}\n    friend bool is_write_access_needed( accessor_not_used const& )  { return false;}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    template<typename Accessor>\n    bool generic_move_insert( Accessor && result, value_type && value ) {\n        result.release();\n        return lookup(/*insert*/true, value.first, &value.second, accessor_location(result), is_write_access_needed(result), &allocate_node_move_construct );\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename Accessor, typename... Args>\n    bool generic_emplace( Accessor && result, Args &&... args ) {\n        result.release();\n        node * node_ptr = allocate_node_emplace_construct(my_allocator, std::forward<Args>(args)...);\n        return lookup(/*insert*/true, node_ptr->item.first, NULL, accessor_location(result), is_write_access_needed(result), &do_not_allocate_node, node_ptr );\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! delete item by accessor\n    bool exclude( const_accessor &item_accessor );\n\n    //! Returns an iterator for an item defined by the key, or for the next item after it (if upper==true)\n    template<typename I>\n    std::pair<I, I> internal_equal_range( const Key& key, I end ) const;\n\n    //! Copy \"source\" to *this, where *this must start out empty.\n    void internal_copy( const concurrent_hash_map& source );\n\n    template<typename I>\n    void internal_copy( I first, I last );\n\n    //! Fast find when no concurrent erasure is used. For internal use inside TBB only!\n    /** Return pointer to item with given key, or NULL if no such item exists.\n        Must not be called concurrently with erasure operations. */\n    const_pointer internal_fast_find( const Key& key ) const {\n        hashcode_t h = my_hash_compare.hash( key );\n        hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n        node *n;\n    restart:\n        __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n        bucket *b = get_bucket( h & m );\n        // TODO: actually, notification is unnecessary here, just hiding double-check\n        if( itt_load_word_with_acquire(b->node_list) == internal::rehash_req )\n        {\n            bucket::scoped_t lock;\n            if( lock.try_acquire( b->mutex, /*write=*/true ) ) {\n                if( b->node_list == internal::rehash_req)\n                    const_cast<concurrent_hash_map*>(this)->rehash_bucket( b, h & m ); //recursive rehashing\n            }\n            else lock.acquire( b->mutex, /*write=*/false );\n            __TBB_ASSERT(b->node_list!=internal::rehash_req,NULL);\n        }\n        n = search_bucket( key, b );\n        if( n )\n            return &n->item;\n        else if( check_mask_race( h, m ) )\n            goto restart;\n        return 0;\n    }\n};\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nbool concurrent_hash_map<Key,T,HashCompare,A>::lookup( bool op_insert, const Key &key, const T *t, const_accessor *result, bool write, node* (*allocate_node)(node_allocator_type& , const Key&, const T*), node *tmp_n ) {\n    __TBB_ASSERT( !result || !result->my_node, NULL );\n    bool return_value;\n    hashcode_t const h = my_hash_compare.hash( key );\n    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n    segment_index_t grow_segment = 0;\n    node *n;\n    restart:\n    {//lock scope\n        __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n        return_value = false;\n        // get bucket\n        bucket_accessor b( this, h & m );\n\n        // find a node\n        n = search_bucket( key, b() );\n        if( op_insert ) {\n            // [opt] insert a key\n            if( !n ) {\n                if( !tmp_n ) {\n                    tmp_n = allocate_node(my_allocator, key, t);\n                }\n                if( !b.is_writer() && !b.upgrade_to_writer() ) { // TODO: improved insertion\n                    // Rerun search_list, in case another thread inserted the item during the upgrade.\n                    n = search_bucket( key, b() );\n                    if( is_valid(n) ) { // unfortunately, it did\n                        b.downgrade_to_reader();\n                        goto exists;\n                    }\n                }\n                if( check_mask_race(h, m) )\n                    goto restart; // b.release() is done in ~b().\n                // insert and set flag to grow the container\n                grow_segment = insert_new_node( b(), n = tmp_n, m );\n                tmp_n = 0;\n                return_value = true;\n            }\n        } else { // find or count\n            if( !n ) {\n                if( check_mask_race( h, m ) )\n                    goto restart; // b.release() is done in ~b(). TODO: replace by continue\n                return false;\n            }\n            return_value = true;\n        }\n    exists:\n        if( !result ) goto check_growth;\n        // TODO: the following seems as generic/regular operation\n        // acquire the item\n        if( !result->try_acquire( n->mutex, write ) ) {\n            for( tbb::internal::atomic_backoff backoff(true);; ) {\n                if( result->try_acquire( n->mutex, write ) ) break;\n                if( !backoff.bounded_pause() ) {\n                    // the wait takes really long, restart the operation\n                    b.release();\n                    __TBB_ASSERT( !op_insert || !return_value, \"Can't acquire new item in locked bucket?\" );\n                    __TBB_Yield();\n                    m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n                    goto restart;\n                }\n            }\n        }\n    }//lock scope\n    result->my_node = n;\n    result->my_hash = h;\ncheck_growth:\n    // [opt] grow the container\n    if( grow_segment ) {\n#if __TBB_STATISTICS\n        my_info_resizes++; // concurrent ones\n#endif\n        enable_segment( grow_segment );\n    }\n    if( tmp_n ) // if op_insert only\n        delete_node( tmp_n );\n    return return_value;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\ntemplate<typename I>\nstd::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range( const Key& key, I end_ ) const {\n    hashcode_t h = my_hash_compare.hash( key );\n    hashcode_t m = my_mask;\n    __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n    h &= m;\n    bucket *b = get_bucket( h );\n    while( b->node_list == internal::rehash_req ) {\n        m = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit\n        b = get_bucket( h &= m );\n    }\n    node *n = search_bucket( key, b );\n    if( !n )\n        return std::make_pair(end_, end_);\n    iterator lower(*this, h, b, n), upper(lower);\n    return std::make_pair(lower, ++upper);\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nbool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_accessor ) {\n    __TBB_ASSERT( item_accessor.my_node, NULL );\n    node_base *const n = item_accessor.my_node;\n    hashcode_t const h = item_accessor.my_hash;\n    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\n    do {\n        // get bucket\n        bucket_accessor b( this, h & m, /*writer=*/true );\n        node_base **p = &b()->node_list;\n        while( *p && *p != n )\n            p = &(*p)->next;\n        if( !*p ) { // someone else was first\n            if( check_mask_race( h, m ) )\n                continue;\n            item_accessor.release();\n            return false;\n        }\n        __TBB_ASSERT( *p == n, NULL );\n        *p = n->next; // remove from container\n        my_size--;\n        break;\n    } while(true);\n    if( !item_accessor.is_writer() ) // need to get exclusive lock\n        item_accessor.upgrade_to_writer(); // return value means nothing here\n    item_accessor.release();\n    delete_node( n ); // Only one thread can delete it\n    return true;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nbool concurrent_hash_map<Key,T,HashCompare,A>::erase( const Key &key ) {\n    node_base *n;\n    hashcode_t const h = my_hash_compare.hash( key );\n    hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );\nrestart:\n    {//lock scope\n        // get bucket\n        bucket_accessor b( this, h & m );\n    search:\n        node_base **p = &b()->node_list;\n        n = *p;\n        while( is_valid(n) && !my_hash_compare.equal(key, static_cast<node*>(n)->item.first ) ) {\n            p = &n->next;\n            n = *p;\n        }\n        if( !n ) { // not found, but mask could be changed\n            if( check_mask_race( h, m ) )\n                goto restart;\n            return false;\n        }\n        else if( !b.is_writer() && !b.upgrade_to_writer() ) {\n            if( check_mask_race( h, m ) ) // contended upgrade, check mask\n                goto restart;\n            goto search;\n        }\n        *p = n->next;\n        my_size--;\n    }\n    {\n        typename node::scoped_t item_locker( n->mutex, /*write=*/true );\n    }\n    // note: there should be no threads pretending to acquire this mutex again, do not try to upgrade const_accessor!\n    delete_node( n ); // Only one thread can delete it due to write lock on the bucket\n    return true;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::swap(concurrent_hash_map<Key,T,HashCompare,A> &table) {\n    //TODO: respect C++11 allocator_traits<A>::propogate_on_constainer_swap\n    using std::swap;\n    swap(this->my_allocator, table.my_allocator);\n    swap(this->my_hash_compare, table.my_hash_compare);\n    internal_swap(table);\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::rehash(size_type sz) {\n    reserve( sz ); // TODO: add reduction of number of buckets as well\n    hashcode_t mask = my_mask;\n    hashcode_t b = (mask+1)>>1; // size or first index of the last segment\n    __TBB_ASSERT((b&(b-1))==0, NULL); // zero or power of 2\n    bucket *bp = get_bucket( b ); // only the last segment should be scanned for rehashing\n    for(; b <= mask; b++, bp++ ) {\n        node_base *n = bp->node_list;\n        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, \"Broken internal structure\" );\n        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, \"concurrent or unexpectedly terminated operation during rehash() execution\" );\n        if( n == internal::rehash_req ) { // rehash bucket, conditional because rehashing of a previous bucket may affect this one\n            hashcode_t h = b; bucket *b_old = bp;\n            do {\n                __TBB_ASSERT( h > 1, \"The lowermost buckets can't be rehashed\" );\n                hashcode_t m = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit\n                b_old = get_bucket( h &= m );\n            } while( b_old->node_list == internal::rehash_req );\n            // now h - is index of the root rehashed bucket b_old\n            mark_rehashed_levels( h ); // mark all non-rehashed children recursively across all segments\n            for( node_base **p = &b_old->node_list, *q = *p; is_valid(q); q = *p ) {\n                hashcode_t c = my_hash_compare.hash( static_cast<node*>(q)->item.first );\n                if( (c & mask) != h ) { // should be rehashed\n                    *p = q->next; // exclude from b_old\n                    bucket *b_new = get_bucket( c & mask );\n                    __TBB_ASSERT( b_new->node_list != internal::rehash_req, \"hash() function changed for key in table or internal error\" );\n                    add_to_bucket( b_new, q );\n                } else p = &q->next; // iterate to next item\n            }\n        }\n    }\n#if TBB_USE_PERFORMANCE_WARNINGS\n    int current_size = int(my_size), buckets = int(mask)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics\n    static bool reported = false;\n#endif\n#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS\n    for( b = 0; b <= mask; b++ ) {// only last segment should be scanned for rehashing\n        if( b & (b-2) ) ++bp; // not the beginning of a segment\n        else bp = get_bucket( b );\n        node_base *n = bp->node_list;\n        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, \"concurrent or unexpectedly terminated operation during rehash() execution\" );\n        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed, \"Broken internal structure\" );\n#if TBB_USE_PERFORMANCE_WARNINGS\n        if( n == internal::empty_rehashed ) empty_buckets++;\n        else if( n->next ) overpopulated_buckets++;\n#endif\n#if TBB_USE_ASSERT\n        for( ; is_valid(n); n = n->next ) {\n            hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first ) & mask;\n            __TBB_ASSERT( h == b, \"hash() function changed for key in table or internal error\" );\n        }\n#endif\n    }\n#endif // TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS\n#if TBB_USE_PERFORMANCE_WARNINGS\n    if( buckets > current_size) empty_buckets -= buckets - current_size;\n    else overpopulated_buckets -= current_size - buckets; // TODO: load_factor?\n    if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {\n        tbb::internal::runtime_warning(\n            \"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\\nSize: %d  Empties: %d  Overlaps: %d\",\n#if __TBB_USE_OPTIONAL_RTTI\n            typeid(*this).name(),\n#else\n            \"concurrent_hash_map\",\n#endif\n            current_size, empty_buckets, overpopulated_buckets );\n        reported = true;\n    }\n#endif\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::clear() {\n    hashcode_t m = my_mask;\n    __TBB_ASSERT((m&(m+1))==0, \"data structure is invalid\");\n#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n    int current_size = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics\n    static bool reported = false;\n#endif\n    bucket *bp = 0;\n    // check consistency\n    for( segment_index_t b = 0; b <= m; b++ ) {\n        if( b & (b-2) ) ++bp; // not the beginning of a segment\n        else bp = get_bucket( b );\n        node_base *n = bp->node_list;\n        __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, \"Broken internal structure\" );\n        __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, \"concurrent or unexpectedly terminated operation during clear() execution\" );\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n        if( n == internal::empty_rehashed ) empty_buckets++;\n        else if( n == internal::rehash_req ) buckets--;\n        else if( n->next ) overpopulated_buckets++;\n#endif\n#if __TBB_EXTRA_DEBUG\n        for(; is_valid(n); n = n->next ) {\n            hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );\n            h &= m;\n            __TBB_ASSERT( h == b || get_bucket(h)->node_list == internal::rehash_req, \"hash() function changed for key in table or internal error\" );\n        }\n#endif\n    }\n#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n#if __TBB_STATISTICS\n    printf( \"items=%d buckets: capacity=%d rehashed=%d empty=%d overpopulated=%d\"\n        \" concurrent: resizes=%u rehashes=%u restarts=%u\\n\",\n        current_size, int(m+1), buckets, empty_buckets, overpopulated_buckets,\n        unsigned(my_info_resizes), unsigned(my_info_rehashes), unsigned(my_info_restarts) );\n    my_info_resizes = 0; // concurrent ones\n    my_info_restarts = 0; // race collisions\n    my_info_rehashes = 0;  // invocations of rehash_bucket\n#endif\n    if( buckets > current_size) empty_buckets -= buckets - current_size;\n    else overpopulated_buckets -= current_size - buckets; // TODO: load_factor?\n    if( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {\n        tbb::internal::runtime_warning(\n            \"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\\nSize: %d  Empties: %d  Overlaps: %d\",\n#if __TBB_USE_OPTIONAL_RTTI\n            typeid(*this).name(),\n#else\n            \"concurrent_hash_map\",\n#endif\n            current_size, empty_buckets, overpopulated_buckets );\n        reported = true;\n    }\n#endif\n#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS\n    my_size = 0;\n    segment_index_t s = segment_index_of( m );\n    __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], \"wrong mask or concurrent grow\" );\n    cache_aligned_allocator<bucket> alloc;\n    do {\n        __TBB_ASSERT( is_valid( my_table[s] ), \"wrong mask or concurrent grow\" );\n        segment_ptr_t buckets_ptr = my_table[s];\n        size_type sz = segment_size( s ? s : 1 );\n        for( segment_index_t i = 0; i < sz; i++ )\n            for( node_base *n = buckets_ptr[i].node_list; is_valid(n); n = buckets_ptr[i].node_list ) {\n                buckets_ptr[i].node_list = n->next;\n                delete_node( n );\n            }\n        if( s >= first_block) // the first segment or the next\n            alloc.deallocate( buckets_ptr, sz );\n        else if( s == embedded_block && embedded_block != first_block )\n            alloc.deallocate( buckets_ptr, segment_size(first_block)-embedded_buckets );\n        if( s >= embedded_block ) my_table[s] = 0;\n    } while(s-- > 0);\n    my_mask = embedded_buckets - 1;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::internal_copy( const concurrent_hash_map& source ) {\n    reserve( source.my_size ); // TODO: load_factor?\n    hashcode_t mask = source.my_mask;\n    if( my_mask == mask ) { // optimized version\n        bucket *dst = 0, *src = 0;\n        bool rehash_required = false;\n        for( hashcode_t k = 0; k <= mask; k++ ) {\n            if( k & (k-2) ) ++dst,src++; // not the beginning of a segment\n            else { dst = get_bucket( k ); src = source.get_bucket( k ); }\n            __TBB_ASSERT( dst->node_list != internal::rehash_req, \"Invalid bucket in destination table\");\n            node *n = static_cast<node*>( src->node_list );\n            if( n == internal::rehash_req ) { // source is not rehashed, items are in previous buckets\n                rehash_required = true;\n                dst->node_list = internal::rehash_req;\n            } else for(; n; n = static_cast<node*>( n->next ) ) {\n                add_to_bucket( dst, new( my_allocator ) node(n->item.first, n->item.second) );\n                ++my_size; // TODO: replace by non-atomic op\n            }\n        }\n        if( rehash_required ) rehash();\n    } else internal_copy( source.begin(), source.end() );\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\ntemplate<typename I>\nvoid concurrent_hash_map<Key,T,HashCompare,A>::internal_copy(I first, I last) {\n    hashcode_t m = my_mask;\n    for(; first != last; ++first) {\n        hashcode_t h = my_hash_compare.hash( (*first).first );\n        bucket *b = get_bucket( h & m );\n        __TBB_ASSERT( b->node_list != internal::rehash_req, \"Invalid bucket in destination table\");\n        node *n = new( my_allocator ) node(*first);\n        add_to_bucket( b, n );\n        ++my_size; // TODO: replace by non-atomic op\n    }\n}\n\n} // namespace interface5\n\nusing interface5::concurrent_hash_map;\n\n\ntemplate<typename Key, typename T, typename HashCompare, typename A1, typename A2>\ninline bool operator==(const concurrent_hash_map<Key, T, HashCompare, A1> &a, const concurrent_hash_map<Key, T, HashCompare, A2> &b) {\n    if(a.size() != b.size()) return false;\n    typename concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());\n    typename concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());\n    for(; i != i_end; ++i) {\n        j = b.equal_range(i->first).first;\n        if( j == j_end || !(i->second == j->second) ) return false;\n    }\n    return true;\n}\n\ntemplate<typename Key, typename T, typename HashCompare, typename A1, typename A2>\ninline bool operator!=(const concurrent_hash_map<Key, T, HashCompare, A1> &a, const concurrent_hash_map<Key, T, HashCompare, A2> &b)\n{    return !(a == b); }\n\ntemplate<typename Key, typename T, typename HashCompare, typename A>\ninline void swap(concurrent_hash_map<Key, T, HashCompare, A> &a, concurrent_hash_map<Key, T, HashCompare, A> &b)\n{    a.swap( b ); }\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif // warning 4127 is back\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_hash_map_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/concurrent_lru_cache.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_concurrent_lru_cache_H\n#define __TBB_concurrent_lru_cache_H\n\n#if ! TBB_PREVIEW_CONCURRENT_LRU_CACHE\n    #error Set TBB_PREVIEW_CONCURRENT_LRU_CACHE to include concurrent_lru_cache.h\n#endif\n\n#include <map>\n#include <list>\n\n#include \"tbb_stddef.h\"\n#include \"atomic.h\"\n#include \"internal/_aggregator_impl.h\"\n\nnamespace tbb{\nnamespace interface6 {\n\n\ntemplate <typename key_type, typename value_type, typename value_functor_type = value_type (*)(key_type) >\nclass concurrent_lru_cache : internal::no_assign{\nprivate:\n    typedef concurrent_lru_cache self_type;\n    typedef value_functor_type value_function_type;\n    typedef std::size_t ref_counter_type;\n    struct map_value_type;\n    typedef std::map<key_type, map_value_type> map_storage_type;\n    typedef std::list<typename map_storage_type::iterator> lru_list_type;\n    struct map_value_type {\n        value_type my_value;\n        ref_counter_type my_ref_counter;\n        typename lru_list_type::iterator my_lru_list_iterator;\n        bool my_is_ready;\n\n        map_value_type (value_type const& a_value,  ref_counter_type a_ref_counter,    typename lru_list_type::iterator a_lru_list_iterator, bool a_is_ready)\n            : my_value(a_value), my_ref_counter(a_ref_counter), my_lru_list_iterator (a_lru_list_iterator), my_is_ready(a_is_ready)\n        {}\n    };\n\n    class handle_object;\n\n    struct aggregator_operation;\n    typedef aggregator_operation aggregated_operation_type;\n    typedef tbb::internal::aggregating_functor<self_type,aggregated_operation_type> aggregator_function_type;\n    friend class tbb::internal::aggregating_functor<self_type,aggregated_operation_type>;\n    typedef tbb::internal::aggregator<aggregator_function_type, aggregated_operation_type> aggregator_type;\n\nprivate:\n    value_function_type my_value_function;\n    std::size_t const my_number_of_lru_history_items;\n    map_storage_type my_map_storage;\n    lru_list_type my_lru_list;\n    aggregator_type my_aggregator;\n\npublic:\n    typedef handle_object handle;\n\npublic:\n    concurrent_lru_cache(value_function_type f, std::size_t number_of_lru_history_items)\n        : my_value_function(f),my_number_of_lru_history_items(number_of_lru_history_items)\n    {\n        my_aggregator.initialize_handler(aggregator_function_type(this));\n    }\n\n    handle_object operator[](key_type k){\n        retrieve_aggregator_operation op(k);\n        my_aggregator.execute(&op);\n        if (op.is_new_value_needed()){\n             op.result().second.my_value = my_value_function(k);\n             __TBB_store_with_release(op.result().second.my_is_ready, true);\n        }else{\n            tbb::internal::spin_wait_while_eq(op.result().second.my_is_ready,false);\n        }\n        return handle_object(*this,op.result());\n    }\nprivate:\n    void signal_end_of_usage(typename map_storage_type::reference value_ref){\n        signal_end_of_usage_aggregator_operation op(value_ref);\n        my_aggregator.execute(&op);\n    }\n\nprivate:\n    struct handle_move_t:no_assign{\n        concurrent_lru_cache & my_cache_ref;\n        typename map_storage_type::reference my_map_record_ref;\n        handle_move_t(concurrent_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_ref(cache_ref),my_map_record_ref(value_ref) {};\n    };\n    class handle_object {\n        concurrent_lru_cache * my_cache_pointer;\n        typename map_storage_type::reference my_map_record_ref;\n    public:\n        handle_object(concurrent_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_pointer(&cache_ref), my_map_record_ref(value_ref) {}\n        handle_object(handle_move_t m):my_cache_pointer(&m.my_cache_ref), my_map_record_ref(m.my_map_record_ref){}\n        operator handle_move_t(){ return move(*this);}\n        value_type& value(){\n            __TBB_ASSERT(my_cache_pointer,\"get value from moved from object?\");\n            return my_map_record_ref.second.my_value;\n        }\n        ~handle_object(){\n            if (my_cache_pointer){\n                my_cache_pointer->signal_end_of_usage(my_map_record_ref);\n            }\n        }\n    private:\n        friend handle_move_t move(handle_object& h){\n            return handle_object::move(h);\n        }\n        static handle_move_t move(handle_object& h){\n            __TBB_ASSERT(h.my_cache_pointer,\"move from the same object twice ?\");\n            concurrent_lru_cache * cache_pointer = NULL;\n            std::swap(cache_pointer,h.my_cache_pointer);\n            return handle_move_t(*cache_pointer,h.my_map_record_ref);\n        }\n    private:\n        void operator=(handle_object&);\n#if __SUNPRO_CC\n    // Presumably due to a compiler error, private copy constructor\n    // breaks expressions like handle h = cache[key];\n    public:\n#endif\n        handle_object(handle_object &);\n    };\nprivate:\n    //TODO: looks like aggregator_operation is a perfect match for statically typed variant type\n    struct aggregator_operation : tbb::internal::aggregated_operation<aggregator_operation>{\n        enum e_op_type {op_retive, op_signal_end_of_usage};\n        //TODO: try to use pointer to function apply_visitor here\n        //TODO: try virtual functions and measure the difference\n        e_op_type my_operation_type;\n        aggregator_operation(e_op_type operation_type): my_operation_type(operation_type) {}\n        void cast_and_handle(self_type& container ){\n            if (my_operation_type==op_retive){\n                static_cast<retrieve_aggregator_operation*>(this)->handle(container);\n            }else{\n                static_cast<signal_end_of_usage_aggregator_operation*>(this)->handle(container);\n            }\n        }\n    };\n    struct retrieve_aggregator_operation : aggregator_operation, private internal::no_assign {\n        key_type my_key;\n        typename map_storage_type::pointer my_result_map_record_pointer;\n        bool my_is_new_value_needed;\n        retrieve_aggregator_operation(key_type key):aggregator_operation(aggregator_operation::op_retive),my_key(key),my_is_new_value_needed(false){}\n        void handle(self_type& container ){\n            my_result_map_record_pointer = & container.retrieve_serial(my_key,my_is_new_value_needed);\n        }\n        typename map_storage_type::reference result(){ return * my_result_map_record_pointer; }\n        bool is_new_value_needed(){return my_is_new_value_needed;}\n    };\n    struct signal_end_of_usage_aggregator_operation : aggregator_operation, private internal::no_assign {\n        typename map_storage_type::reference my_map_record_ref;\n        signal_end_of_usage_aggregator_operation(typename map_storage_type::reference map_record_ref):aggregator_operation(aggregator_operation::op_signal_end_of_usage),my_map_record_ref(map_record_ref){}\n        void handle(self_type& container ){\n            container.signal_end_of_usage_serial(my_map_record_ref);\n        }\n    };\n\nprivate:\n   void handle_operations(aggregator_operation* op_list){\n       while(op_list){\n           op_list->cast_and_handle(*this);\n           aggregator_operation* tmp = op_list;\n           op_list=op_list->next;\n           tbb::internal::itt_store_word_with_release(tmp->status, uintptr_t(1));\n       }\n   }\n\nprivate:\n   typename map_storage_type::reference retrieve_serial(key_type k, bool& is_new_value_needed){\n        typename map_storage_type::iterator it = my_map_storage.find(k);\n        if (it == my_map_storage.end()){\n            it = my_map_storage.insert(it,std::make_pair(k,map_value_type(value_type(),0,my_lru_list.end(),false)));\n            is_new_value_needed = true;\n        }else {\n            typename lru_list_type::iterator list_it = it->second.my_lru_list_iterator;\n            if (list_it!=my_lru_list.end()) {\n                __TBB_ASSERT(!it->second.my_ref_counter,\"item to be evicted should not have a live references\");\n                //item is going to be used. Therefore it is not a subject for eviction\n                //so - remove it from LRU history.\n                my_lru_list.erase(list_it);\n                it->second.my_lru_list_iterator= my_lru_list.end();\n            }\n        }\n        ++(it->second.my_ref_counter);\n        return *it;\n    }\n\n    void signal_end_of_usage_serial(typename map_storage_type::reference map_record_ref){\n        typename map_storage_type::iterator it = my_map_storage.find(map_record_ref.first);\n        __TBB_ASSERT(it!=my_map_storage.end(),\"cache should not return past-end iterators to outer world\");\n        __TBB_ASSERT(&(*it) == &map_record_ref,\"dangling reference has been returned to outside world? data race ?\");\n        __TBB_ASSERT( my_lru_list.end()== std::find(my_lru_list.begin(),my_lru_list.end(),it),\n                \"object in use should not be in list of unused objects \");\n        if (! --(it->second.my_ref_counter)){\n            //it was the last reference so put it to the LRU history\n            if (my_lru_list.size()>=my_number_of_lru_history_items){\n                //evict items in order to get a space\n                size_t number_of_elements_to_evict = 1 + my_lru_list.size() - my_number_of_lru_history_items;\n                for (size_t i=0; i<number_of_elements_to_evict; ++i){\n                    typename map_storage_type::iterator it_to_evict = my_lru_list.back();\n                    __TBB_ASSERT(!it_to_evict->second.my_ref_counter,\"item to be evicted should not have a live references\");\n                    my_lru_list.pop_back();\n                    my_map_storage.erase(it_to_evict);\n                }\n            }\n            my_lru_list.push_front(it);\n            it->second.my_lru_list_iterator = my_lru_list.begin();\n        }\n    }\n};\n} // namespace interface6\n\nusing interface6::concurrent_lru_cache;\n\n} // namespace tbb\n#endif //__TBB_concurrent_lru_cache_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/concurrent_priority_queue.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_concurrent_priority_queue_H\n#define __TBB_concurrent_priority_queue_H\n\n#include \"atomic.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"tbb_exception.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_aggregator_impl.h\"\n#include <vector>\n#include <iterator>\n#include <functional>\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    #include <initializer_list>\n#endif\n\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n    #include <type_traits>\n#endif\n\nnamespace tbb {\nnamespace interface5 {\nnamespace internal {\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n    template<typename T, bool C = std::is_copy_constructible<T>::value>\n    struct use_element_copy_constructor {\n        typedef tbb::internal::true_type type;\n    };\n    template<typename T>\n    struct use_element_copy_constructor <T,false> {\n        typedef tbb::internal::false_type type;\n    };\n#else\n    template<typename>\n    struct use_element_copy_constructor {\n        typedef tbb::internal::true_type type;\n    };\n#endif\n} // namespace internal\n\nusing namespace tbb::internal;\n\n//! Concurrent priority queue\ntemplate <typename T, typename Compare=std::less<T>, typename A=cache_aligned_allocator<T> >\nclass concurrent_priority_queue {\n public:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    typedef size_t size_type;\n\n    //! Difference type for iterator\n    typedef ptrdiff_t difference_type;\n\n    //! Allocator type\n    typedef A allocator_type;\n\n    //! Constructs a new concurrent_priority_queue with default capacity\n    explicit concurrent_priority_queue(const allocator_type& a = allocator_type()) : mark(0), my_size(0), data(a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n    }\n\n    //! Constructs a new concurrent_priority_queue with init_sz capacity\n    explicit concurrent_priority_queue(size_type init_capacity, const allocator_type& a = allocator_type()) :\n        mark(0), my_size(0), data(a)\n    {\n        data.reserve(init_capacity);\n        my_aggregator.initialize_handler(my_functor_t(this));\n    }\n\n    //! [begin,end) constructor\n    template<typename InputIterator>\n    concurrent_priority_queue(InputIterator begin, InputIterator end, const allocator_type& a = allocator_type()) :\n        mark(0), data(begin, end, a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n        my_size = data.size();\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from std::initializer_list\n    concurrent_priority_queue(std::initializer_list<T> init_list, const allocator_type &a = allocator_type()) :\n        mark(0),data(init_list.begin(), init_list.end(), a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n        my_size = data.size();\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Copy constructor\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    explicit concurrent_priority_queue(const concurrent_priority_queue& src) : mark(src.mark),\n        my_size(src.my_size), data(src.data.begin(), src.data.end(), src.data.get_allocator())\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n    }\n\n    //! Copy constructor with specific allocator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue(const concurrent_priority_queue& src, const allocator_type& a) : mark(src.mark),\n        my_size(src.my_size), data(src.data.begin(), src.data.end(), a)\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n        heapify();\n    }\n\n    //! Assignment operator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue& operator=(const concurrent_priority_queue& src) {\n        if (this != &src) {\n            vector_t(src.data.begin(), src.data.end(), src.data.get_allocator()).swap(data);\n            mark = src.mark;\n            my_size = src.my_size;\n        }\n        return *this;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue(concurrent_priority_queue&& src) : mark(src.mark),\n        my_size(src.my_size), data(std::move(src.data))\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n    }\n\n    //! Move constructor with specific allocator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue(concurrent_priority_queue&& src, const allocator_type& a) : mark(src.mark),\n        my_size(src.my_size),\n#if __TBB_ALLOCATOR_TRAITS_PRESENT\n        data(std::move(src.data), a)\n#else\n    // Some early version of C++11 STL vector does not have a constructor of vector(vector&& , allocator).\n    // It seems that the reason is absence of support of allocator_traits (stateful allocators).\n        data(a)\n#endif //__TBB_ALLOCATOR_TRAITS_PRESENT\n    {\n        my_aggregator.initialize_handler(my_functor_t(this));\n#if !__TBB_ALLOCATOR_TRAITS_PRESENT\n        if (a != src.data.get_allocator()){\n            data.reserve(src.data.size());\n            data.assign(std::make_move_iterator(src.data.begin()), std::make_move_iterator(src.data.end()));\n        }else{\n            data = std::move(src.data);\n        }\n#endif //!__TBB_ALLOCATOR_TRAITS_PRESENT\n    }\n\n    //! Move assignment operator\n    /** This operation is unsafe if there are pending concurrent operations on the src queue. */\n    concurrent_priority_queue& operator=( concurrent_priority_queue&& src) {\n        if (this != &src) {\n            mark = src.mark;\n            my_size = src.my_size;\n#if !__TBB_ALLOCATOR_TRAITS_PRESENT\n            if (data.get_allocator() != src.data.get_allocator()){\n                vector_t(std::make_move_iterator(src.data.begin()), std::make_move_iterator(src.data.end()), data.get_allocator()).swap(data);\n            }else\n#endif //!__TBB_ALLOCATOR_TRAITS_PRESENT\n            {\n                data = std::move(src.data);\n            }\n        }\n        return *this;\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n    //! Assign the queue from [begin,end) range, not thread-safe\n    template<typename InputIterator>\n    void assign(InputIterator begin, InputIterator end) {\n        vector_t(begin, end, data.get_allocator()).swap(data);\n        mark = 0;\n        my_size = data.size();\n        heapify();\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Assign the queue from std::initializer_list, not thread-safe\n    void assign(std::initializer_list<T> il) { this->assign(il.begin(), il.end()); }\n\n    //! Assign from std::initializer_list, not thread-safe\n    concurrent_priority_queue& operator=(std::initializer_list<T> il) {\n        this->assign(il.begin(), il.end());\n        return *this;\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Returns true if empty, false otherwise\n    /** Returned value may not reflect results of pending operations.\n        This operation reads shared data and will trigger a race condition. */\n    bool empty() const { return size()==0; }\n\n    //! Returns the current number of elements contained in the queue\n    /** Returned value may not reflect results of pending operations.\n        This operation reads shared data and will trigger a race condition. */\n    size_type size() const { return __TBB_load_with_acquire(my_size); }\n\n    //! Pushes elem onto the queue, increasing capacity of queue if necessary\n    /** This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    void push(const_reference elem) {\n#if __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT\n        __TBB_STATIC_ASSERT( std::is_copy_constructible<value_type>::value, \"The type is not copy constructible. Copying push operation is impossible.\" );\n#endif\n        cpq_operation op_data(elem, PUSH_OP);\n        my_aggregator.execute(&op_data);\n        if (op_data.status == FAILED) // exception thrown\n            throw_exception(eid_bad_alloc);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Pushes elem onto the queue, increasing capacity of queue if necessary\n    /** This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    void push(value_type &&elem) {\n        cpq_operation op_data(elem, PUSH_RVALUE_OP);\n        my_aggregator.execute(&op_data);\n        if (op_data.status == FAILED) // exception thrown\n            throw_exception(eid_bad_alloc);\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    //! Constructs a new element using args as the arguments for its construction and pushes it onto the queue */\n    /** This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    template<typename... Args>\n    void emplace(Args&&... args) {\n        push(value_type(std::forward<Args>(args)...));\n    }\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Gets a reference to and removes highest priority element\n    /** If a highest priority element was found, sets elem and returns true,\n        otherwise returns false.\n        This operation can be safely used concurrently with other push, try_pop or emplace operations. */\n    bool try_pop(reference elem) {\n        cpq_operation op_data(POP_OP);\n        op_data.elem = &elem;\n        my_aggregator.execute(&op_data);\n        return op_data.status==SUCCEEDED;\n    }\n\n    //! Clear the queue; not thread-safe\n    /** This operation is unsafe if there are pending concurrent operations on the queue.\n        Resets size, effectively emptying queue; does not free space.\n        May not clear elements added in pending operations. */\n    void clear() {\n        data.clear();\n        mark = 0;\n        my_size = 0;\n    }\n\n    //! Swap this queue with another; not thread-safe\n    /** This operation is unsafe if there are pending concurrent operations on the queue. */\n    void swap(concurrent_priority_queue& q) {\n        using std::swap;\n        data.swap(q.data);\n        swap(mark, q.mark);\n        swap(my_size, q.my_size);\n    }\n\n    //! Return allocator object\n    allocator_type get_allocator() const { return data.get_allocator(); }\n\n private:\n    enum operation_type {INVALID_OP, PUSH_OP, POP_OP, PUSH_RVALUE_OP};\n    enum operation_status { WAIT=0, SUCCEEDED, FAILED };\n\n    class cpq_operation : public aggregated_operation<cpq_operation> {\n     public:\n        operation_type type;\n        union {\n            value_type *elem;\n            size_type sz;\n        };\n        cpq_operation(const_reference e, operation_type t) :\n            type(t), elem(const_cast<value_type*>(&e)) {}\n        cpq_operation(operation_type t) : type(t) {}\n    };\n\n    class my_functor_t {\n        concurrent_priority_queue<T, Compare, A> *cpq;\n     public:\n        my_functor_t() {}\n        my_functor_t(concurrent_priority_queue<T, Compare, A> *cpq_) : cpq(cpq_) {}\n        void operator()(cpq_operation* op_list) {\n            cpq->handle_operations(op_list);\n        }\n    };\n\n    typedef tbb::internal::aggregator< my_functor_t, cpq_operation > aggregator_t;\n    aggregator_t my_aggregator;\n    //! Padding added to avoid false sharing\n    char padding1[NFS_MaxLineSize - sizeof(aggregator_t)];\n    //! The point at which unsorted elements begin\n    size_type mark;\n    __TBB_atomic size_type my_size;\n    Compare compare;\n    //! Padding added to avoid false sharing\n    char padding2[NFS_MaxLineSize - (2*sizeof(size_type)) - sizeof(Compare)];\n    //! Storage for the heap of elements in queue, plus unheapified elements\n    /** data has the following structure:\n\n         binary unheapified\n          heap   elements\n        ____|_______|____\n        |       |       |\n        v       v       v\n        [_|...|_|_|...|_| |...| ]\n         0       ^       ^       ^\n                 |       |       |__capacity\n                 |       |__my_size\n                 |__mark\n\n        Thus, data stores the binary heap starting at position 0 through\n        mark-1 (it may be empty).  Then there are 0 or more elements\n        that have not yet been inserted into the heap, in positions\n        mark through my_size-1. */\n    typedef std::vector<value_type, allocator_type> vector_t;\n    vector_t data;\n\n    void handle_operations(cpq_operation *op_list) {\n        cpq_operation *tmp, *pop_list=NULL;\n\n        __TBB_ASSERT(mark == data.size(), NULL);\n\n        // First pass processes all constant (amortized; reallocation may happen) time pushes and pops.\n        while (op_list) {\n            // ITT note: &(op_list->status) tag is used to cover accesses to op_list\n            // node. This thread is going to handle the operation, and so will acquire it\n            // and perform the associated operation w/o triggering a race condition; the\n            // thread that created the operation is waiting on the status field, so when\n            // this thread is done with the operation, it will perform a\n            // store_with_release to give control back to the waiting thread in\n            // aggregator::insert_operation.\n            call_itt_notify(acquired, &(op_list->status));\n            __TBB_ASSERT(op_list->type != INVALID_OP, NULL);\n            tmp = op_list;\n            op_list = itt_hide_load_word(op_list->next);\n            if (tmp->type == POP_OP) {\n                if (mark < data.size() &&\n                    compare(data[0], data[data.size()-1])) {\n                    // there are newly pushed elems and the last one\n                    // is higher than top\n                    *(tmp->elem) = move(data[data.size()-1]);\n                    __TBB_store_with_release(my_size, my_size-1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                    data.pop_back();\n                    __TBB_ASSERT(mark<=data.size(), NULL);\n                }\n                else { // no convenient item to pop; postpone\n                    itt_hide_store_word(tmp->next, pop_list);\n                    pop_list = tmp;\n                }\n            } else { // PUSH_OP or PUSH_RVALUE_OP\n                __TBB_ASSERT(tmp->type == PUSH_OP || tmp->type == PUSH_RVALUE_OP, \"Unknown operation\" );\n                __TBB_TRY{\n                    if (tmp->type == PUSH_OP) {\n                        push_back_helper(*(tmp->elem), typename internal::use_element_copy_constructor<value_type>::type());\n                    } else {\n                        data.push_back(move(*(tmp->elem)));\n                    }\n                    __TBB_store_with_release(my_size, my_size + 1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                } __TBB_CATCH(...) {\n                    itt_store_word_with_release(tmp->status, uintptr_t(FAILED));\n                }\n            }\n        }\n\n        // second pass processes pop operations\n        while (pop_list) {\n            tmp = pop_list;\n            pop_list = itt_hide_load_word(pop_list->next);\n            __TBB_ASSERT(tmp->type == POP_OP, NULL);\n            if (data.empty()) {\n                itt_store_word_with_release(tmp->status, uintptr_t(FAILED));\n            }\n            else {\n                __TBB_ASSERT(mark<=data.size(), NULL);\n                if (mark < data.size() &&\n                    compare(data[0], data[data.size()-1])) {\n                    // there are newly pushed elems and the last one is\n                    // higher than top\n                    *(tmp->elem) = move(data[data.size()-1]);\n                    __TBB_store_with_release(my_size, my_size-1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                    data.pop_back();\n                }\n                else { // extract top and push last element down heap\n                    *(tmp->elem) = move(data[0]);\n                    __TBB_store_with_release(my_size, my_size-1);\n                    itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));\n                    reheap();\n                }\n            }\n        }\n\n        // heapify any leftover pushed elements before doing the next\n        // batch of operations\n        if (mark<data.size()) heapify();\n        __TBB_ASSERT(mark == data.size(), NULL);\n    }\n\n    //! Merge unsorted elements into heap\n    void heapify() {\n        if (!mark && data.size()>0) mark = 1;\n        for (; mark<data.size(); ++mark) {\n            // for each unheapified element under size\n            size_type cur_pos = mark;\n            value_type to_place = move(data[mark]);\n            do { // push to_place up the heap\n                size_type parent = (cur_pos-1)>>1;\n                if (!compare(data[parent], to_place)) break;\n                data[cur_pos] = move(data[parent]);\n                cur_pos = parent;\n            } while( cur_pos );\n            data[cur_pos] = move(to_place);\n        }\n    }\n\n    //! Re-heapify after an extraction\n    /** Re-heapify by pushing last element down the heap from the root. */\n    void reheap() {\n        size_type cur_pos=0, child=1;\n\n        while (child < mark) {\n            size_type target = child;\n            if (child+1 < mark && compare(data[child], data[child+1]))\n                ++target;\n            // target now has the higher priority child\n            if (compare(data[target], data[data.size()-1])) break;\n            data[cur_pos] = move(data[target]);\n            cur_pos = target;\n            child = (cur_pos<<1)+1;\n        }\n        if (cur_pos != data.size()-1)\n            data[cur_pos] = move(data[data.size()-1]);\n        data.pop_back();\n        if (mark > data.size()) mark = data.size();\n    }\n\n    void push_back_helper(const T& t, tbb::internal::true_type) {\n        data.push_back(t);\n    }\n\n    void push_back_helper(const T&, tbb::internal::false_type) {\n        __TBB_ASSERT( false, \"The type is not copy constructible. Copying push operation is impossible.\" );\n    }\n};\n\n} // namespace interface5\n\nusing interface5::concurrent_priority_queue;\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_priority_queue_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/concurrent_queue.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_concurrent_queue_H\n#define __TBB_concurrent_queue_H\n\n#include \"internal/_concurrent_queue_impl.h\"\n\nnamespace tbb {\n\nnamespace strict_ppl {\n\n//! A high-performance thread-safe non-blocking concurrent queue.\n/** Multiple threads may each push and pop concurrently.\n    Assignment construction is not allowed.\n    @ingroup containers */\ntemplate<typename T, typename A = cache_aligned_allocator<T> >\nclass concurrent_queue: public internal::concurrent_queue_base_v3<T> {\n    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;\n\n    //! Allocator type\n    typedef typename A::template rebind<char>::other page_allocator_type;\n    page_allocator_type my_allocator;\n\n    //! Allocates a block of size n (bytes)\n    /*override*/ virtual void *allocate_block( size_t n ) {\n        void *b = reinterpret_cast<void*>(my_allocator.allocate( n ));\n        if( !b )\n            internal::throw_exception(internal::eid_bad_alloc);\n        return b;\n    }\n\n    //! Deallocates block created by allocate_block.\n    /*override*/ virtual void deallocate_block( void *b, size_t n ) {\n        my_allocator.deallocate( reinterpret_cast<char*>(b), n );\n    }\n\n    static void copy_construct_item(T* location, const void* src){\n        new (location) T(*static_cast<const T*>(src));\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    static void move_construct_item(T* location, const void* src) {\n        new (location) T( std::move(*static_cast<T*>(const_cast<void*>(src))) );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\npublic:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    typedef size_t size_type;\n\n    //! Difference type for iterator\n    typedef ptrdiff_t difference_type;\n\n    //! Allocator type\n    typedef A allocator_type;\n\n    //! Construct empty queue\n    explicit concurrent_queue(const allocator_type& a = allocator_type()) :\n        my_allocator( a )\n    {\n    }\n\n    //! [begin,end) constructor\n    template<typename InputIterator>\n    concurrent_queue( InputIterator begin, InputIterator end, const allocator_type& a = allocator_type()) :\n        my_allocator( a )\n    {\n        for( ; begin != end; ++begin )\n            this->push(*begin);\n    }\n\n    //! Copy constructor\n    concurrent_queue( const concurrent_queue& src, const allocator_type& a = allocator_type()) :\n        internal::concurrent_queue_base_v3<T>(), my_allocator( a )\n    {\n        this->assign( src, copy_construct_item );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructors\n    concurrent_queue( concurrent_queue&& src ) :\n        internal::concurrent_queue_base_v3<T>(), my_allocator( std::move(src.my_allocator) )\n    {\n        this->internal_swap( src );\n    }\n\n    concurrent_queue( concurrent_queue&& src, const allocator_type& a ) :\n        internal::concurrent_queue_base_v3<T>(), my_allocator( a )\n    {\n        // checking that memory allocated by one instance of allocator can be deallocated\n        // with another\n        if( my_allocator == src.my_allocator) {\n            this->internal_swap( src );\n        } else {\n            // allocators are different => performing per-element move\n            this->assign( src, move_construct_item );\n            src.clear();\n        }\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Destroy queue\n    ~concurrent_queue();\n\n    //! Enqueue an item at tail of queue.\n    void push( const T& source ) {\n        this->internal_push( &source, copy_construct_item );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void push( T&& source ) {\n        this->internal_push( &source, move_construct_item );\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Arguments>\n    void emplace( Arguments&&... args ) {\n        push( T(std::forward<Arguments>( args )...) );\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Attempt to dequeue an item from head of queue.\n    /** Does not wait for item to become available.\n        Returns true if successful; false otherwise. */\n    bool try_pop( T& result ) {\n        return this->internal_try_pop( &result );\n    }\n\n    //! Return the number of items in the queue; thread unsafe\n    size_type unsafe_size() const {return this->internal_size();}\n\n    //! Equivalent to size()==0.\n    bool empty() const {return this->internal_empty();}\n\n    //! Clear the queue. not thread-safe.\n    void clear() ;\n\n    //! Return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    typedef internal::concurrent_queue_iterator<concurrent_queue,T> iterator;\n    typedef internal::concurrent_queue_iterator<concurrent_queue,const T> const_iterator;\n\n    //------------------------------------------------------------------------\n    // The iterators are intended only for debugging.  They are slow and not thread safe.\n    //------------------------------------------------------------------------\n    iterator unsafe_begin() {return iterator(*this);}\n    iterator unsafe_end() {return iterator();}\n    const_iterator unsafe_begin() const {return const_iterator(*this);}\n    const_iterator unsafe_end() const {return const_iterator();}\n} ;\n\ntemplate<typename T, class A>\nconcurrent_queue<T,A>::~concurrent_queue() {\n    clear();\n    this->internal_finish_clear();\n}\n\ntemplate<typename T, class A>\nvoid concurrent_queue<T,A>::clear() {\n    while( !empty() ) {\n        T value;\n        this->internal_try_pop(&value);\n    }\n}\n\n} // namespace strict_ppl\n\n//! A high-performance thread-safe blocking concurrent bounded queue.\n/** This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics.\n    Note that method names agree with the PPL-style concurrent queue.\n    Multiple threads may each push and pop concurrently.\n    Assignment construction is not allowed.\n    @ingroup containers */\ntemplate<typename T, class A = cache_aligned_allocator<T> >\nclass concurrent_bounded_queue: public internal::concurrent_queue_base_v8 {\n    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;\n\n    //! Allocator type\n    typedef typename A::template rebind<char>::other page_allocator_type;\n    page_allocator_type my_allocator;\n\n    typedef typename concurrent_queue_base_v3::padded_page<T> padded_page;\n    typedef typename concurrent_queue_base_v3::copy_specifics copy_specifics;\n\n    //! Class used to ensure exception-safety of method \"pop\"\n    class destroyer: internal::no_copy {\n        T& my_value;\n    public:\n        destroyer( T& value ) : my_value(value) {}\n        ~destroyer() {my_value.~T();}\n    };\n\n    T& get_ref( page& p, size_t index ) {\n        __TBB_ASSERT( index<items_per_page, NULL );\n        return (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];\n    }\n\n    /*override*/ virtual void copy_item( page& dst, size_t index, const void* src ) {\n        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src));\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    /*override*/ virtual void move_item( page& dst, size_t index, const void* src ) {\n        new( &get_ref(dst,index) ) T( std::move(*static_cast<T*>(const_cast<void*>(src))) );\n    }\n#else\n    /*override*/ virtual void move_item( page&, size_t, const void* ) {\n        __TBB_ASSERT( false, \"Unreachable code\" );\n    }\n#endif\n\n    /*override*/ virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) {\n        new( &get_ref(dst,dindex) ) T( get_ref( const_cast<page&>(src), sindex ) );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    /*override*/ virtual void move_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) {\n        new( &get_ref(dst,dindex) ) T( std::move(get_ref( const_cast<page&>(src), sindex )) );\n    }\n#else\n    /*override*/ virtual void move_page_item( page&, size_t, const page&, size_t ) {\n        __TBB_ASSERT( false, \"Unreachable code\" );\n    }\n#endif\n\n    /*override*/ virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) {\n        T& from = get_ref(src,index);\n        destroyer d(from);\n        *static_cast<T*>(dst) = tbb::internal::move( from );\n    }\n\n    /*override*/ virtual page *allocate_page() {\n        size_t n = sizeof(padded_page) + (items_per_page-1)*sizeof(T);\n        page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));\n        if( !p )\n            internal::throw_exception(internal::eid_bad_alloc);\n        return p;\n    }\n\n    /*override*/ virtual void deallocate_page( page *p ) {\n        size_t n = sizeof(padded_page) + (items_per_page-1)*sizeof(T);\n        my_allocator.deallocate( reinterpret_cast<char*>(p), n );\n    }\n\npublic:\n    //! Element type in the queue.\n    typedef T value_type;\n\n    //! Allocator type\n    typedef A allocator_type;\n\n    //! Reference type\n    typedef T& reference;\n\n    //! Const reference type\n    typedef const T& const_reference;\n\n    //! Integral type for representing size of the queue.\n    /** Note that the size_type is a signed integral type.\n        This is because the size can be negative if there are pending pops without corresponding pushes. */\n    typedef std::ptrdiff_t size_type;\n\n    //! Difference type for iterator\n    typedef std::ptrdiff_t difference_type;\n\n    //! Construct empty queue\n    explicit concurrent_bounded_queue(const allocator_type& a = allocator_type()) :\n        concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n    }\n\n    //! Copy constructor\n    concurrent_bounded_queue( const concurrent_bounded_queue& src, const allocator_type& a = allocator_type())\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n        assign( src );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructors\n    concurrent_bounded_queue( concurrent_bounded_queue&& src )\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( std::move(src.my_allocator) )\n    {\n        internal_swap( src );\n    }\n\n    concurrent_bounded_queue( concurrent_bounded_queue&& src, const allocator_type& a )\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n        // checking that memory allocated by one instance of allocator can be deallocated\n        // with another\n        if( my_allocator == src.my_allocator) {\n            this->internal_swap( src );\n        } else {\n            // allocators are different => performing per-element move\n            this->move_content( src );\n            src.clear();\n        }\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! [begin,end) constructor\n    template<typename InputIterator>\n    concurrent_bounded_queue( InputIterator begin, InputIterator end,\n                              const allocator_type& a = allocator_type())\n        : concurrent_queue_base_v8( sizeof(T) ), my_allocator( a )\n    {\n        for( ; begin != end; ++begin )\n            internal_push_if_not_full(&*begin);\n    }\n\n    //! Destroy queue\n    ~concurrent_bounded_queue();\n\n    //! Enqueue an item at tail of queue.\n    void push( const T& source ) {\n        internal_push( &source );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move an item at tail of queue.\n    void push( T&& source ) {\n        internal_push_move( &source );\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Arguments>\n    void emplace( Arguments&&... args ) {\n        push( T(std::forward<Arguments>( args )...) );\n    }\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Dequeue item from head of queue.\n    /** Block until an item becomes available, and then dequeue it. */\n    void pop( T& destination ) {\n        internal_pop( &destination );\n    }\n\n#if TBB_USE_EXCEPTIONS\n    //! Abort all pending queue operations\n    void abort() {\n        internal_abort();\n    }\n#endif\n\n    //! Enqueue an item at tail of queue if queue is not already full.\n    /** Does not wait for queue to become not full.\n        Returns true if item is pushed; false if queue was already full. */\n    bool try_push( const T& source ) {\n        return internal_push_if_not_full( &source );\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move an item at tail of queue if queue is not already full.\n    /** Does not wait for queue to become not full.\n        Returns true if item is pushed; false if queue was already full. */\n    bool try_push( T&& source ) {\n        return internal_push_move_if_not_full( &source );\n    }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Arguments>\n    bool try_emplace( Arguments&&... args ) {\n        return try_push( T(std::forward<Arguments>( args )...) );\n    }\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Attempt to dequeue an item from head of queue.\n    /** Does not wait for item to become available.\n        Returns true if successful; false otherwise. */\n    bool try_pop( T& destination ) {\n        return internal_pop_if_present( &destination );\n    }\n\n    //! Return number of pushes minus number of pops.\n    /** Note that the result can be negative if there are pops waiting for the\n        corresponding pushes.  The result can also exceed capacity() if there\n        are push operations in flight. */\n    size_type size() const {return internal_size();}\n\n    //! Equivalent to size()<=0.\n    bool empty() const {return internal_empty();}\n\n    //! Maximum number of allowed elements\n    size_type capacity() const {\n        return my_capacity;\n    }\n\n    //! Set the capacity\n    /** Setting the capacity to 0 causes subsequent try_push operations to always fail,\n        and subsequent push operations to block forever. */\n    void set_capacity( size_type new_capacity ) {\n        internal_set_capacity( new_capacity, sizeof(T) );\n    }\n\n    //! return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    //! clear the queue. not thread-safe.\n    void clear() ;\n\n    typedef internal::concurrent_queue_iterator<concurrent_bounded_queue,T> iterator;\n    typedef internal::concurrent_queue_iterator<concurrent_bounded_queue,const T> const_iterator;\n\n    //------------------------------------------------------------------------\n    // The iterators are intended only for debugging.  They are slow and not thread safe.\n    //------------------------------------------------------------------------\n    iterator unsafe_begin() {return iterator(*this);}\n    iterator unsafe_end() {return iterator();}\n    const_iterator unsafe_begin() const {return const_iterator(*this);}\n    const_iterator unsafe_end() const {return const_iterator();}\n\n};\n\ntemplate<typename T, class A>\nconcurrent_bounded_queue<T,A>::~concurrent_bounded_queue() {\n    clear();\n    internal_finish_clear();\n}\n\ntemplate<typename T, class A>\nvoid concurrent_bounded_queue<T,A>::clear() {\n    while( !empty() ) {\n        T value;\n        internal_pop_if_present(&value);\n    }\n}\n\nusing strict_ppl::concurrent_queue;\n\n} // namespace tbb\n\n#endif /* __TBB_concurrent_queue_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/concurrent_unordered_map.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n/* Container implementations in this header are based on PPL implementations\n   provided by Microsoft. */\n\n#ifndef __TBB_concurrent_unordered_map_H\n#define __TBB_concurrent_unordered_map_H\n\n#include \"internal/_concurrent_unordered_impl.h\"\n\nnamespace tbb\n{\n\nnamespace interface5 {\n\n// Template class for hash map traits\ntemplate<typename Key, typename T, typename Hash_compare, typename Allocator, bool Allow_multimapping>\nclass concurrent_unordered_map_traits\n{\nprotected:\n    typedef std::pair<const Key, T> value_type;\n    typedef Key key_type;\n    typedef Hash_compare hash_compare;\n    typedef typename Allocator::template rebind<value_type>::other allocator_type;\n    enum { allow_multimapping = Allow_multimapping };\n\n    concurrent_unordered_map_traits() : my_hash_compare() {}\n    concurrent_unordered_map_traits(const hash_compare& hc) : my_hash_compare(hc) {}\n\n    class value_compare : public std::binary_function<value_type, value_type, bool>\n    {\n        friend class concurrent_unordered_map_traits<Key, T, Hash_compare, Allocator, Allow_multimapping>;\n\n    public:\n        bool operator()(const value_type& left, const value_type& right) const\n        {\n            return (my_hash_compare(left.first, right.first));\n        }\n\n        value_compare(const hash_compare& comparator) : my_hash_compare(comparator) {}\n\n    protected:\n        hash_compare my_hash_compare;    // the comparator predicate for keys\n    };\n\n    template<class Type1, class Type2>\n    static const Key& get_key(const std::pair<Type1, Type2>& value) {\n        return (value.first);\n    }\n\n    hash_compare my_hash_compare; // the comparator predicate for keys\n};\n\ntemplate <typename Key, typename T, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,\n         typename Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >\nclass concurrent_unordered_map :\n    public internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T,\n    internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, false> traits_type;\n    typedef internal::concurrent_unordered_base< traits_type > base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::end;\n    using base_type::find;\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef T mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_map(size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n    }\n\n    concurrent_unordered_map(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {\n    }\n\n    template <typename Iterator>\n    concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_map(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN\n    concurrent_unordered_map(const concurrent_unordered_map& table)\n        : base_type(table)\n    {\n    }\n\n    concurrent_unordered_map& operator=(const concurrent_unordered_map& table)\n    {\n        return static_cast<concurrent_unordered_map&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_map(concurrent_unordered_map&& table)\n        : base_type(std::move(table))\n    {\n    }\n\n    concurrent_unordered_map& operator=(concurrent_unordered_map&& table)\n    {\n        return static_cast<concurrent_unordered_map&>(base_type::operator=(std::move(table)));\n    }\n#endif //__TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN\n\n    concurrent_unordered_map(const concurrent_unordered_map& table, const Allocator& a)\n        : base_type(table, a)\n    {\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_map(concurrent_unordered_map&& table, const Allocator& a) : base_type(std::move(table), a)\n    {\n    }\n#endif\n    // Observers\n    mapped_type& operator[](const key_type& key)\n    {\n        iterator where = find(key);\n\n        if (where == end())\n        {\n            where = insert(std::pair<key_type, mapped_type>(key, mapped_type())).first;\n        }\n\n        return ((*where).second);\n    }\n\n    mapped_type& at(const key_type& key)\n    {\n        iterator where = find(key);\n\n        if (where == end())\n        {\n            tbb::internal::throw_exception(tbb::internal::eid_invalid_key);\n        }\n\n        return ((*where).second);\n    }\n\n    const mapped_type& at(const key_type& key) const\n    {\n        const_iterator where = find(key);\n\n        if (where == end())\n        {\n            tbb::internal::throw_exception(tbb::internal::eid_invalid_key);\n        }\n\n        return ((*where).second);\n    }\n};\n\ntemplate < typename Key, typename T, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,\n        typename Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >\nclass concurrent_unordered_multimap :\n    public internal::concurrent_unordered_base< concurrent_unordered_map_traits< Key, T,\n    internal::hash_compare<Key, Hasher, Key_equality>, Allocator, true> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, true> traits_type;\n    typedef internal::concurrent_unordered_base<traits_type> base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef T mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_multimap(size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n    }\n\n    concurrent_unordered_multimap(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {\n    }\n\n    template <typename Iterator>\n    concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets,key_compare(_Hasher,_Key_equality), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_unordered_multimap(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN\n    concurrent_unordered_multimap(const concurrent_unordered_multimap& table)\n        : base_type(table)\n    {\n    }\n\n    concurrent_unordered_multimap& operator=(const concurrent_unordered_multimap& table)\n    {\n        return static_cast<concurrent_unordered_multimap&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_multimap(concurrent_unordered_multimap&& table)\n        : base_type(std::move(table))\n    {\n    }\n\n    concurrent_unordered_multimap& operator=(concurrent_unordered_multimap&& table)\n    {\n        return static_cast<concurrent_unordered_multimap&>(base_type::operator=(std::move(table)));\n    }\n#endif //__TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN\n\n    concurrent_unordered_multimap(const concurrent_unordered_multimap& table, const Allocator& a)\n        : base_type(table, a)\n    {\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_multimap(concurrent_unordered_multimap&& table, const Allocator& a) : base_type(std::move(table), a)\n    {\n    }\n#endif\n};\n} // namespace interface5\n\nusing interface5::concurrent_unordered_map;\nusing interface5::concurrent_unordered_multimap;\n\n} // namespace tbb\n\n#endif// __TBB_concurrent_unordered_map_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/concurrent_unordered_set.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n/* Container implementations in this header are based on PPL implementations\n   provided by Microsoft. */\n\n#ifndef __TBB_concurrent_unordered_set_H\n#define __TBB_concurrent_unordered_set_H\n\n#include \"internal/_concurrent_unordered_impl.h\"\n\nnamespace tbb\n{\n\nnamespace interface5 {\n\n// Template class for hash set traits\ntemplate<typename Key, typename Hash_compare, typename Allocator, bool Allow_multimapping>\nclass concurrent_unordered_set_traits\n{\nprotected:\n    typedef Key value_type;\n    typedef Key key_type;\n    typedef Hash_compare hash_compare;\n    typedef typename Allocator::template rebind<value_type>::other allocator_type;\n    enum { allow_multimapping = Allow_multimapping };\n\n    concurrent_unordered_set_traits() : my_hash_compare() {}\n    concurrent_unordered_set_traits(const hash_compare& hc) : my_hash_compare(hc) {}\n\n    typedef hash_compare value_compare;\n\n    static const Key& get_key(const value_type& value) {\n        return value;\n    }\n\n    hash_compare my_hash_compare; // the comparator predicate for keys\n};\n\ntemplate <typename Key, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>, typename Allocator = tbb::tbb_allocator<Key> >\nclass concurrent_unordered_set : public internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key, hash_compare, Allocator, false> > base_type;\n    typedef concurrent_unordered_set_traits<Key, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> traits_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef Key mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_set(size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n    }\n\n    concurrent_unordered_set(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {\n    }\n\n    template <typename Iterator>\n    concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n   concurrent_unordered_set(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN\n    concurrent_unordered_set(const concurrent_unordered_set& table)\n        : base_type(table)\n    {\n    }\n\n    concurrent_unordered_set& operator=(const concurrent_unordered_set& table)\n    {\n        return static_cast<concurrent_unordered_set&>(base_type::operator=(table));\n    }\n\n    concurrent_unordered_set(concurrent_unordered_set&& table)\n        : base_type(std::move(table))\n    {\n    }\n\n    concurrent_unordered_set& operator=(concurrent_unordered_set&& table)\n    {\n        return static_cast<concurrent_unordered_set&>(base_type::operator=(std::move(table)));\n    }\n#endif //__TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN\n\n    concurrent_unordered_set(const concurrent_unordered_set& table, const Allocator& a)\n        : base_type(table, a)\n    {\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_set(concurrent_unordered_set&& table, const Allocator& a)\n        : base_type(std::move(table), a)\n    {\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n\n};\n\ntemplate <typename Key, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,\n         typename Allocator = tbb::tbb_allocator<Key> >\nclass concurrent_unordered_multiset :\n    public internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key,\n    internal::hash_compare<Key, Hasher, Key_equality>, Allocator, true> >\n{\n    // Base type definitions\n    typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;\n    typedef concurrent_unordered_set_traits<Key, hash_compare, Allocator, true> traits_type;\n    typedef internal::concurrent_unordered_base< traits_type > base_type;\n#if __TBB_EXTRA_DEBUG\npublic:\n#endif\n    using traits_type::allow_multimapping;\npublic:\n    using base_type::insert;\n\n    // Type definitions\n    typedef Key key_type;\n    typedef typename base_type::value_type value_type;\n    typedef Key mapped_type;\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n    typedef hash_compare key_compare;\n\n    typedef typename base_type::allocator_type allocator_type;\n    typedef typename base_type::pointer pointer;\n    typedef typename base_type::const_pointer const_pointer;\n    typedef typename base_type::reference reference;\n    typedef typename base_type::const_reference const_reference;\n\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::difference_type difference_type;\n\n    typedef typename base_type::iterator iterator;\n    typedef typename base_type::const_iterator const_iterator;\n    typedef typename base_type::iterator local_iterator;\n    typedef typename base_type::const_iterator const_local_iterator;\n\n    // Construction/destruction/copying\n    explicit concurrent_unordered_multiset(size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n    }\n\n    concurrent_unordered_multiset(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)\n    {\n    }\n\n    template <typename Iterator>\n    concurrent_unordered_multiset(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,\n        const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),\n        const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(_Hasher, _Key_equality), a)\n    {\n        insert(first, last);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n   concurrent_unordered_multiset(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number, const hasher& a_hasher = hasher(),\n        const key_equal& a_keyeq = key_equal(), const allocator_type& a = allocator_type())\n        : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)\n    {\n        this->insert(il.begin(),il.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN\n   concurrent_unordered_multiset(const concurrent_unordered_multiset& table)\n        : base_type(table)\n    {\n    }\n\n   concurrent_unordered_multiset& operator=(const concurrent_unordered_multiset& table)\n    {\n        return static_cast<concurrent_unordered_multiset&>(base_type::operator=(table));\n    }\n\n   concurrent_unordered_multiset(concurrent_unordered_multiset&& table)\n        : base_type(std::move(table))\n    {\n    }\n\n   concurrent_unordered_multiset& operator=(concurrent_unordered_multiset&& table)\n    {\n        return static_cast<concurrent_unordered_multiset&>(base_type::operator=(std::move(table)));\n    }\n#endif //__TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN\n\n    concurrent_unordered_multiset(const concurrent_unordered_multiset& table, const Allocator& a)\n        : base_type(table, a)\n    {\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_multiset(concurrent_unordered_multiset&& table, const Allocator& a)\n        : base_type(std::move(table), a)\n    {\n    }\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n};\n} // namespace interface5\n\nusing interface5::concurrent_unordered_set;\nusing interface5::concurrent_unordered_multiset;\n\n} // namespace tbb\n\n#endif// __TBB_concurrent_unordered_set_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/concurrent_vector.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_concurrent_vector_H\n#define __TBB_concurrent_vector_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_exception.h\"\n#include \"atomic.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"blocked_range.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include <new>\n#include <cstring>   // for memset()\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <algorithm>\n#include <iterator>\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    // VS2008/VC9 seems to have an issue; limits pull in math.h\n    #pragma warning( push )\n    #pragma warning( disable: 4985 )\n#endif\n#include <limits> /* std::numeric_limits */\n#if _MSC_VER==1500 && !__INTEL_COMPILER\n    #pragma warning( pop )\n#endif\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    #include <initializer_list>\n#endif\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (push)\n#if defined(_Wp64)\n    #pragma warning (disable: 4267)\n#endif\n    #pragma warning (disable: 4127) //warning C4127: conditional expression is constant\n#endif\n\nnamespace tbb {\n\ntemplate<typename T, class A = cache_aligned_allocator<T> >\nclass concurrent_vector;\n\ntemplate<typename Container, typename Value>\nclass vector_iterator;\n\n//! @cond INTERNAL\nnamespace internal {\n\n    //! Bad allocation marker\n    static void *const vector_allocation_error_flag = reinterpret_cast<void*>(size_t(63));\n\n    //! Exception helper function\n    template<typename T>\n    void handle_unconstructed_elements(T* array, size_t n_of_elements){\n        std::memset( array, 0, n_of_elements * sizeof( T ) );\n    }\n\n    //! Base class of concurrent vector implementation.\n    /** @ingroup containers */\n    class concurrent_vector_base_v3 {\n    protected:\n\n        // Basic types declarations\n        typedef size_t segment_index_t;\n        typedef size_t size_type;\n\n        // Using enumerations due to Mac linking problems of static const variables\n        enum {\n            // Size constants\n            default_initial_segments = 1, // 2 initial items\n            //! Number of slots for segment pointers inside the class\n            pointers_per_short_table = 3, // to fit into 8 words of entire structure\n            pointers_per_long_table = sizeof(segment_index_t) * 8 // one segment per bit\n        };\n\n        struct segment_not_used {};\n        struct segment_allocated {};\n        struct segment_allocation_failed {};\n\n        class segment_t;\n        class segment_value_t {\n            void* array;\n        private:\n            //TODO: More elegant way to grant access to selected functions _only_?\n            friend class segment_t;\n            explicit segment_value_t(void* an_array):array(an_array) {}\n        public:\n            friend bool operator==(segment_value_t const& lhs, segment_not_used ) { return lhs.array == 0;}\n            friend bool operator==(segment_value_t const& lhs, segment_allocated) { return lhs.array > internal::vector_allocation_error_flag;}\n            friend bool operator==(segment_value_t const& lhs, segment_allocation_failed) { return lhs.array == internal::vector_allocation_error_flag;}\n            template<typename argument_type>\n            friend bool operator!=(segment_value_t const& lhs, argument_type arg) { return ! (lhs == arg);}\n\n            template<typename T>\n            T* pointer() const {  return static_cast<T*>(const_cast<void*>(array)); }\n        };\n\n        friend void enforce_segment_allocated(segment_value_t const& s, internal::exception_id exception = eid_bad_last_alloc){\n            if(s != segment_allocated()){\n                internal::throw_exception(exception);\n            }\n        }\n\n        // Segment pointer.\n        class segment_t {\n            atomic<void*> array;\n        public:\n            segment_t(){ store<relaxed>(segment_not_used());}\n            //Copy ctor and assignment operator are defined to ease using of stl algorithms.\n            //These algorithms usually not a synchronization point, so, semantic is\n            //intentionally relaxed here.\n            segment_t(segment_t const& rhs ){ array.store<relaxed>(rhs.array.load<relaxed>());}\n\n            void swap(segment_t & rhs ){\n                tbb::internal::swap<relaxed>(array, rhs.array);\n            }\n\n            segment_t& operator=(segment_t const& rhs ){\n                array.store<relaxed>(rhs.array.load<relaxed>());\n                return *this;\n            }\n\n            template<memory_semantics M>\n            segment_value_t load() const { return segment_value_t(array.load<M>());}\n\n            template<memory_semantics M>\n            void store(segment_not_used) {\n                array.store<M>(0);\n            }\n\n            template<memory_semantics M>\n            void store(segment_allocation_failed) {\n                __TBB_ASSERT(load<relaxed>() != segment_allocated(),\"transition from \\\"allocated\\\" to \\\"allocation failed\\\" state looks non-logical\");\n                array.store<M>(internal::vector_allocation_error_flag);\n            }\n\n            template<memory_semantics M>\n            void store(void* allocated_segment_pointer) __TBB_NOEXCEPT(true) {\n                __TBB_ASSERT(segment_value_t(allocated_segment_pointer) == segment_allocated(),\n                     \"other overloads of store should be used for marking segment as not_used or allocation_failed\" );\n                array.store<M>(allocated_segment_pointer);\n            }\n\n#if TBB_USE_ASSERT\n            ~segment_t() {\n                __TBB_ASSERT(load<relaxed>() != segment_allocated(), \"should have been freed by clear\" );\n            }\n#endif /* TBB_USE_ASSERT */\n        };\n        friend void swap(segment_t & , segment_t & ) __TBB_NOEXCEPT(true);\n\n        // Data fields\n\n        //! allocator function pointer\n        void* (*vector_allocator_ptr)(concurrent_vector_base_v3 &, size_t);\n\n        //! count of segments in the first block\n        atomic<size_type> my_first_block;\n\n        //! Requested size of vector\n        atomic<size_type> my_early_size;\n\n        //! Pointer to the segments table\n        atomic<segment_t*> my_segment;\n\n        //! embedded storage of segment pointers\n        segment_t my_storage[pointers_per_short_table];\n\n        // Methods\n\n        concurrent_vector_base_v3() {\n            //Here the semantic is intentionally relaxed.\n            //The reason this is next:\n            //Object that is in middle of construction (i.e. its constructor is not yet finished)\n            //cannot be used concurrently until the construction is finished.\n            //Thus to flag other threads that construction is finished, some synchronization with\n            //acquire-release semantic should be done by the (external) code that uses the vector.\n            //So, no need to do the synchronization inside the vector.\n\n            my_early_size.store<relaxed>(0);\n            my_first_block.store<relaxed>(0); // here is not default_initial_segments\n            my_segment.store<relaxed>(my_storage);\n        }\n\n        __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();\n\n        //these helpers methods use the fact that segments are allocated so\n        //that every segment size is a (increasing) power of 2.\n        //with one exception 0 segment has size of 2 as well segment 1;\n        //e.g. size of segment with index of 3 is 2^3=8;\n        static segment_index_t segment_index_of( size_type index ) {\n            return segment_index_t( __TBB_Log2( index|1 ) );\n        }\n\n        static segment_index_t segment_base( segment_index_t k ) {\n            return (segment_index_t(1)<<k & ~segment_index_t(1));\n        }\n\n        static inline segment_index_t segment_base_index_of( segment_index_t &index ) {\n            segment_index_t k = segment_index_of( index );\n            index -= segment_base(k);\n            return k;\n        }\n\n        static size_type segment_size( segment_index_t k ) {\n            return segment_index_t(1)<<k; // fake value for k==0\n        }\n\n\n        static bool is_first_element_in_segment(size_type element_index){\n            //check if element_index is a power of 2 that is at least 2.\n            //The idea is to detect if the iterator crosses a segment boundary,\n            //and 2 is the minimal index for which it's true\n            __TBB_ASSERT(element_index, \"there should be no need to call \"\n                                        \"is_first_element_in_segment for 0th element\" );\n            return is_power_of_two_at_least( element_index, 2 );\n        }\n\n        //! An operation on an n-element array starting at begin.\n        typedef void (__TBB_EXPORTED_FUNC *internal_array_op1)(void* begin, size_type n );\n\n        //! An operation on n-element destination array and n-element source array.\n        typedef void (__TBB_EXPORTED_FUNC *internal_array_op2)(void* dst, const void* src, size_type n );\n\n        //! Internal structure for compact()\n        struct internal_segments_table {\n            segment_index_t first_block;\n            segment_t table[pointers_per_long_table];\n        };\n\n        void __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );\n        size_type __TBB_EXPORTED_METHOD internal_capacity() const;\n        void internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src );\n        size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, const void *src );\n        void* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );\n        segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );\n        void* __TBB_EXPORTED_METHOD internal_compact( size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy );\n        void __TBB_EXPORTED_METHOD internal_copy( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy );\n        void __TBB_EXPORTED_METHOD internal_assign( const concurrent_vector_base_v3& src, size_type element_size,\n                              internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );\n        //! Obsolete\n        void __TBB_EXPORTED_METHOD internal_throw_exception(size_type) const;\n        void __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);\n\n        void __TBB_EXPORTED_METHOD internal_resize( size_type n, size_type element_size, size_type max_size, const void *src,\n                                                    internal_array_op1 destroy, internal_array_op2 init );\n        size_type __TBB_EXPORTED_METHOD internal_grow_to_at_least_with_result( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );\n\n        //! Deprecated entry point for backwards compatibility to TBB 2.1.\n        void __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );\nprivate:\n        //! Private functionality\n        class helper;\n        friend class helper;\n\n        template<typename Container, typename Value>\n        friend class vector_iterator;\n\n    };\n\n    inline void swap(concurrent_vector_base_v3::segment_t & lhs, concurrent_vector_base_v3::segment_t & rhs) __TBB_NOEXCEPT(true) {\n        lhs.swap(rhs);\n    }\n\n    typedef concurrent_vector_base_v3 concurrent_vector_base;\n\n    //! Meets requirements of a forward iterator for STL and a Value for a blocked_range.*/\n    /** Value is either the T or const T type of the container.\n        @ingroup containers */\n    template<typename Container, typename Value>\n    class vector_iterator\n    {\n        //! concurrent_vector over which we are iterating.\n        Container* my_vector;\n\n        //! Index into the vector\n        size_t my_index;\n\n        //! Caches my_vector-&gt;internal_subscript(my_index)\n        /** NULL if cached value is not available */\n        mutable Value* my_item;\n\n        template<typename C, typename T>\n        friend vector_iterator<C,T> operator+( ptrdiff_t offset, const vector_iterator<C,T>& v );\n\n        template<typename C, typename T, typename U>\n        friend bool operator==( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend bool operator<( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename T, typename U>\n        friend ptrdiff_t operator-( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );\n\n        template<typename C, typename U>\n        friend class internal::vector_iterator;\n\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n        template<typename T, class A>\n        friend class tbb::concurrent_vector;\n#else\npublic:\n#endif\n\n        vector_iterator( const Container& vector, size_t index, void *ptr = 0 ) :\n            my_vector(const_cast<Container*>(&vector)),\n            my_index(index),\n            my_item(static_cast<Value*>(ptr))\n        {}\n\n    public:\n        //! Default constructor\n        vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}\n\n        vector_iterator( const vector_iterator<Container,typename Container::value_type>& other ) :\n            my_vector(other.my_vector),\n            my_index(other.my_index),\n            my_item(other.my_item)\n        {}\n\n        vector_iterator operator+( ptrdiff_t offset ) const {\n            return vector_iterator( *my_vector, my_index+offset );\n        }\n        vector_iterator &operator+=( ptrdiff_t offset ) {\n            my_index+=offset;\n            my_item = NULL;\n            return *this;\n        }\n        vector_iterator operator-( ptrdiff_t offset ) const {\n            return vector_iterator( *my_vector, my_index-offset );\n        }\n        vector_iterator &operator-=( ptrdiff_t offset ) {\n            my_index-=offset;\n            my_item = NULL;\n            return *this;\n        }\n        Value& operator*() const {\n            Value* item = my_item;\n            if( !item ) {\n                item = my_item = &my_vector->internal_subscript(my_index);\n            }\n            __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), \"corrupt cache\" );\n            return *item;\n        }\n        Value& operator[]( ptrdiff_t k ) const {\n            return my_vector->internal_subscript(my_index+k);\n        }\n        Value* operator->() const {return &operator*();}\n\n        //! Pre increment\n        vector_iterator& operator++() {\n            size_t element_index = ++my_index;\n            if( my_item ) {\n                //TODO: consider using of knowledge about \"first_block optimization\" here as well?\n                if( concurrent_vector_base::is_first_element_in_segment(element_index)) {\n                    //if the iterator crosses a segment boundary, the pointer become invalid\n                    //as possibly next segment is in another memory location\n                    my_item= NULL;\n                } else {\n                    ++my_item;\n                }\n            }\n            return *this;\n        }\n\n        //! Pre decrement\n        vector_iterator& operator--() {\n            __TBB_ASSERT( my_index>0, \"operator--() applied to iterator already at beginning of concurrent_vector\" );\n            size_t element_index = my_index--;\n            if( my_item ) {\n                if(concurrent_vector_base::is_first_element_in_segment(element_index)) {\n                    //if the iterator crosses a segment boundary, the pointer become invalid\n                    //as possibly next segment is in another memory location\n                    my_item= NULL;\n                } else {\n                    --my_item;\n                }\n            }\n            return *this;\n        }\n\n        //! Post increment\n        vector_iterator operator++(int) {\n            vector_iterator result = *this;\n            operator++();\n            return result;\n        }\n\n        //! Post decrement\n        vector_iterator operator--(int) {\n            vector_iterator result = *this;\n            operator--();\n            return result;\n        }\n\n        // STL support\n\n        typedef ptrdiff_t difference_type;\n        typedef Value value_type;\n        typedef Value* pointer;\n        typedef Value& reference;\n        typedef std::random_access_iterator_tag iterator_category;\n    };\n\n    template<typename Container, typename T>\n    vector_iterator<Container,T> operator+( ptrdiff_t offset, const vector_iterator<Container,T>& v ) {\n        return vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator==( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return i.my_index==j.my_index && i.my_vector == j.my_vector;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator!=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(i==j);\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator<( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return i.my_index<j.my_index;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator>( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return j<i;\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator>=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(i<j);\n    }\n\n    template<typename Container, typename T, typename U>\n    bool operator<=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return !(j<i);\n    }\n\n    template<typename Container, typename T, typename U>\n    ptrdiff_t operator-( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {\n        return ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);\n    }\n\n    template<typename T, class A>\n    class allocator_base {\n    public:\n        typedef typename A::template\n            rebind<T>::other allocator_type;\n        allocator_type my_allocator;\n\n        allocator_base(const allocator_type &a = allocator_type() ) : my_allocator(a) {}\n\n    };\n\n} // namespace internal\n//! @endcond\n\n//! Concurrent vector container\n/** concurrent_vector is a container having the following main properties:\n    - It provides random indexed access to its elements. The index of the first element is 0.\n    - It ensures safe concurrent growing its size (different threads can safely append new elements).\n    - Adding new elements does not invalidate existing iterators and does not change indices of existing items.\n\n@par Compatibility\n    The class meets all Container Requirements and Reversible Container Requirements from\n    C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet\n    Sequence Requirements due to absence of insert() and erase() methods.\n\n@par Exception Safety\n    Methods working with memory allocation and/or new elements construction can throw an\n    exception if allocator fails to allocate memory or element's default constructor throws one.\n    Concurrent vector's element of type T must conform to the following requirements:\n    - Throwing an exception is forbidden for destructor of T.\n    - Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.\n    .\n    Otherwise, the program's behavior is undefined.\n@par\n    If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation.\n    Invalid state means:\n    - There are no guarantees that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.\n    - An invalid vector instance cannot be repaired; it is unable to grow anymore.\n    - Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.\n    - Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using at() method a C++ exception is thrown.\n    .\n    If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.\n\n@par Fragmentation\n    Unlike an STL vector, a concurrent_vector does not move existing elements if it needs\n    to allocate more memory. The container is divided into a series of contiguous arrays of\n    elements. The first reservation, growth, or assignment operation determines the size of\n    the first array. Using small number of elements as initial size incurs fragmentation that\n    may increase element access time. Internal layout can be optimized by method compact() that\n    merges several smaller arrays into one solid.\n\n@par Changes since TBB 2.1\n    - Fixed guarantees of concurrent_vector::size() and grow_to_at_least() methods to assure elements are allocated.\n    - Methods end()/rbegin()/back() are partly thread-safe since they use size() to get the end of vector\n    - Added resize() methods (not thread-safe)\n    - Added cbegin/cend/crbegin/crend methods\n    - Changed return type of methods grow* and push_back to iterator\n\n@par Changes since TBB 2.0\n    - Implemented exception-safety guarantees\n    - Added template argument for allocator\n    - Added allocator argument in constructors\n    - Faster index calculation\n    - First growth call specifies a number of segments to be merged in the first allocation.\n    - Fixed memory blow up for swarm of vector's instances of small size\n    - Added grow_by(size_type n, const_reference t) growth using copying constructor to init new items.\n    - Added STL-like constructors.\n    - Added operators ==, < and derivatives\n    - Added at() method, approved for using after an exception was thrown inside the vector\n    - Added get_allocator() method.\n    - Added assign() methods\n    - Added compact() method to defragment first segments\n    - Added swap() method\n    - range() defaults on grainsize = 1 supporting auto grainsize algorithms.\n\n    @ingroup containers */\ntemplate<typename T, class A>\nclass concurrent_vector: protected internal::allocator_base<T, A>,\n                         private internal::concurrent_vector_base {\nprivate:\n    template<typename I>\n    class generic_range_type: public blocked_range<I> {\n    public:\n        typedef T value_type;\n        typedef T& reference;\n        typedef const T& const_reference;\n        typedef I iterator;\n        typedef ptrdiff_t difference_type;\n        generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : blocked_range<I>(begin_,end_,grainsize_) {}\n        template<typename U>\n        generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {}\n        generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}\n    };\n\n    template<typename C, typename U>\n    friend class internal::vector_iterator;\n\npublic:\n    //------------------------------------------------------------------------\n    // STL compatible types\n    //------------------------------------------------------------------------\n    typedef internal::concurrent_vector_base_v3::size_type size_type;\n    typedef typename internal::allocator_base<T, A>::allocator_type allocator_type;\n\n    typedef T value_type;\n    typedef ptrdiff_t difference_type;\n    typedef T& reference;\n    typedef const T& const_reference;\n    typedef T *pointer;\n    typedef const T *const_pointer;\n\n    typedef internal::vector_iterator<concurrent_vector,T> iterator;\n    typedef internal::vector_iterator<concurrent_vector,const T> const_iterator;\n\n#if !defined(_MSC_VER) || _CPPLIB_VER>=300\n    // Assume ISO standard definition of std::reverse_iterator\n    typedef std::reverse_iterator<iterator> reverse_iterator;\n    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;\n#else\n    // Use non-standard std::reverse_iterator\n    typedef std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;\n    typedef std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;\n#endif /* defined(_MSC_VER) && (_MSC_VER<1300) */\n\n    //------------------------------------------------------------------------\n    // Parallel algorithm support\n    //------------------------------------------------------------------------\n    typedef generic_range_type<iterator> range_type;\n    typedef generic_range_type<const_iterator> const_range_type;\n\n    //------------------------------------------------------------------------\n    // STL compatible constructors & destructors\n    //------------------------------------------------------------------------\n\n    //! Construct empty vector.\n    explicit concurrent_vector(const allocator_type &a = allocator_type())\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n    }\n\n    //Constructors are not required to have synchronization\n    //(for more details see comment in the concurrent_vector_base constructor).\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Constructor from initializer_list\n    concurrent_vector(std::initializer_list<T> init_list, const allocator_type &a = allocator_type())\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_assign_iterators(init_list.begin(), init_list.end());\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();;\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>());\n            __TBB_RETHROW();\n        }\n\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Copying constructor\n    concurrent_vector( const concurrent_vector& vector, const allocator_type& a = allocator_type() )\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_copy(vector, sizeof(T), &copy_array);\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>());\n            __TBB_RETHROW();\n        }\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move constructor\n    //TODO add __TBB_NOEXCEPT(true) and static_assert(std::has_nothrow_move_constructor<A>::value)\n    concurrent_vector( concurrent_vector&& source)\n        : internal::allocator_base<T, A>(std::move(source)), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        concurrent_vector_base_v3::internal_swap(source);\n    }\n\n    concurrent_vector( concurrent_vector&& source, const allocator_type& a)\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        //C++ standard requires instances of an allocator being compared for equality,\n        //which means that memory allocated by one instance is possible to deallocate with the other one.\n        if (a == source.my_allocator) {\n            concurrent_vector_base_v3::internal_swap(source);\n        } else {\n            __TBB_TRY {\n                internal_copy(source, sizeof(T), &move_array);\n            } __TBB_CATCH(...) {\n                segment_t *table = my_segment.load<relaxed>();\n                internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>());\n                __TBB_RETHROW();\n            }\n        }\n    }\n\n#endif\n\n    //! Copying constructor for vector with different allocator type\n    template<class M>\n    concurrent_vector( const concurrent_vector<T, M>& vector, const allocator_type& a = allocator_type() )\n        : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_copy(vector.internal_vector_base(), sizeof(T), &copy_array);\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Construction with initial size specified by argument n\n    explicit concurrent_vector(size_type n)\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_resize( n, sizeof(T), max_size(), NULL, &destroy_array, &initialize_array );\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance\n    concurrent_vector(size_type n, const_reference t, const allocator_type& a = allocator_type())\n        : internal::allocator_base<T, A>(a)\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Construction with copying iteration range and given allocator instance\n    template<class I>\n    concurrent_vector(I first, I last, const allocator_type &a = allocator_type())\n        : internal::allocator_base<T, A>(a)\n    {\n        vector_allocator_ptr = &internal_allocator;\n        __TBB_TRY {\n            internal_assign_range(first, last, static_cast<is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );\n        } __TBB_CATCH(...) {\n            segment_t *table = my_segment.load<relaxed>();\n            internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n            __TBB_RETHROW();\n        }\n    }\n\n    //! Assignment\n    concurrent_vector& operator=( const concurrent_vector& vector ) {\n        if( this != &vector )\n            internal_assign(vector, sizeof(T), &destroy_array, &assign_array, &copy_array);\n        return *this;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //TODO: add __TBB_NOEXCEPT()\n    //! Move assignment\n    concurrent_vector& operator=( concurrent_vector&& other ) {\n        __TBB_ASSERT(this != &other, \"Move assignment to itself is prohibited \");\n        typedef typename tbb::internal::allocator_traits<A>::propagate_on_container_move_assignment pocma_t;\n        if(pocma_t::value || this->my_allocator == other.my_allocator) {\n            concurrent_vector trash (std::move(*this));\n            internal_swap(other);\n            if (pocma_t::value) {\n                this->my_allocator = std::move(other.my_allocator);\n            }\n        } else {\n            internal_assign(other, sizeof(T), &destroy_array, &move_assign_array, &move_array);\n        }\n        return *this;\n    }\n#endif\n    //TODO: add an template assignment operator? (i.e. with different element type)\n\n    //! Assignment for vector with different allocator type\n    template<class M>\n    concurrent_vector& operator=( const concurrent_vector<T, M>& vector ) {\n        if( static_cast<void*>( this ) != static_cast<const void*>( &vector ) )\n            internal_assign(vector.internal_vector_base(),\n                sizeof(T), &destroy_array, &assign_array, &copy_array);\n        return *this;\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Assignment for initializer_list\n    concurrent_vector& operator=( std::initializer_list<T> init_list ) {\n        internal_clear(&destroy_array);\n        internal_assign_iterators(init_list.begin(), init_list.end());\n        return *this;\n    }\n#endif //#if __TBB_INITIALIZER_LISTS_PRESENT\n\n    //------------------------------------------------------------------------\n    // Concurrent operations\n    //------------------------------------------------------------------------\n    //! Grow by \"delta\" elements.\n    /** Returns iterator pointing to the first new element. */\n    iterator grow_by( size_type delta ) {\n        return iterator(*this, delta ? internal_grow_by( delta, sizeof(T), &initialize_array, NULL ) : my_early_size.load());\n    }\n\n    //! Grow by \"delta\" elements using copying constructor.\n    /** Returns iterator pointing to the first new element. */\n    iterator grow_by( size_type delta, const_reference t ) {\n        return iterator(*this, delta ? internal_grow_by( delta, sizeof(T), &initialize_array_by, static_cast<const void*>(&t) ) : my_early_size.load());\n    }\n\n    /** Returns iterator pointing to the first new element. */\n    template<typename I>\n    iterator grow_by( I first, I last ) {\n        typename std::iterator_traits<I>::difference_type delta = std::distance(first, last);\n        __TBB_ASSERT( delta >= 0, NULL);\n\n        return iterator(*this, delta ? internal_grow_by(delta, sizeof(T), &copy_range<I>, static_cast<const void*>(&first)) : my_early_size.load());\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    /** Returns iterator pointing to the first new element. */\n    iterator grow_by( std::initializer_list<T> init_list ) {\n        return grow_by( init_list.begin(), init_list.end() );\n    }\n#endif //#if __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! Append minimal sequence of elements such that size()>=n.\n    /** The new elements are default constructed.  Blocks until all elements in range [0..n) are allocated.\n        May return while other elements are being constructed by other threads.\n        Returns iterator that points to beginning of appended sequence.\n        If no elements were appended, returns iterator pointing to nth element. */\n    iterator grow_to_at_least( size_type n ) {\n        size_type m=0;\n        if( n ) {\n            m = internal_grow_to_at_least_with_result( n, sizeof(T), &initialize_array, NULL );\n            if( m>n ) m=n;\n        }\n        return iterator(*this, m);\n    };\n\n    /** Analogous to grow_to_at_least( size_type n ) with exception that the new\n        elements are initialized by copying of t instead of default construction. */\n    iterator grow_to_at_least( size_type n, const_reference t ) {\n        size_type m=0;\n        if( n ) {\n            m = internal_grow_to_at_least_with_result( n, sizeof(T), &initialize_array_by, &t);\n            if( m>n ) m=n;\n        }\n        return iterator(*this, m);\n    };\n\n    //! Push item\n    /** Returns iterator pointing to the new element. */\n    iterator push_back( const_reference item )\n    {\n        push_back_helper prolog(*this);\n        new(prolog.internal_push_back_result()) T(item);\n        return prolog.return_iterator_and_dismiss();\n    }\n\n#if    __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Push item, move-aware\n    /** Returns iterator pointing to the new element. */\n    iterator push_back(  T&& item )\n    {\n        push_back_helper prolog(*this);\n        new(prolog.internal_push_back_result()) T(std::move(item));\n        return prolog.return_iterator_and_dismiss();\n    }\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    //! Push item, create item \"in place\" with provided arguments\n    /** Returns iterator pointing to the new element. */\n    template<typename... Args>\n    iterator emplace_back(  Args&&... args )\n    {\n        push_back_helper prolog(*this);\n        new(prolog.internal_push_back_result()) T(std::forward<Args>(args)...);\n        return prolog.return_iterator_and_dismiss();\n    }\n#endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif //__TBB_CPP11_RVALUE_REF_PRESENT\n    //! Get reference to element at given index.\n    /** This method is thread-safe for concurrent reads, and also while growing the vector,\n        as long as the calling thread has checked that index < size(). */\n    reference operator[]( size_type index ) {\n        return internal_subscript(index);\n    }\n\n    //! Get const reference to element at given index.\n    const_reference operator[]( size_type index ) const {\n        return internal_subscript(index);\n    }\n\n    //! Get reference to element at given index. Throws exceptions on errors.\n    reference at( size_type index ) {\n        return internal_subscript_with_exceptions(index);\n    }\n\n    //! Get const reference to element at given index. Throws exceptions on errors.\n    const_reference at( size_type index ) const {\n        return internal_subscript_with_exceptions(index);\n    }\n\n    //! Get range for iterating with parallel algorithms\n    range_type range( size_t grainsize = 1 ) {\n        return range_type( begin(), end(), grainsize );\n    }\n\n    //! Get const range for iterating with parallel algorithms\n    const_range_type range( size_t grainsize = 1 ) const {\n        return const_range_type( begin(), end(), grainsize );\n    }\n\n    //------------------------------------------------------------------------\n    // Capacity\n    //------------------------------------------------------------------------\n    //! Return size of vector. It may include elements under construction\n    size_type size() const {\n        size_type sz = my_early_size, cp = internal_capacity();\n        return cp < sz ? cp : sz;\n    }\n\n    //! Return false if vector is not empty or has elements under construction at least.\n    bool empty() const {return !my_early_size;}\n\n    //! Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value.\n    size_type capacity() const {return internal_capacity();}\n\n    //! Allocate enough space to grow to size n without having to allocate more memory later.\n    /** Like most of the methods provided for STL compatibility, this method is *not* thread safe.\n        The capacity afterwards may be bigger than the requested reservation. */\n    void reserve( size_type n ) {\n        if( n )\n            internal_reserve(n, sizeof(T), max_size());\n    }\n\n    //! Resize the vector. Not thread-safe.\n    void resize( size_type n ) {\n        internal_resize( n, sizeof(T), max_size(), NULL, &destroy_array, &initialize_array );\n    }\n\n    //! Resize the vector, copy t for new elements. Not thread-safe.\n    void resize( size_type n, const_reference t ) {\n        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );\n    }\n\n    //! Optimize memory usage and fragmentation.\n    void shrink_to_fit();\n\n    //! Upper bound on argument to reserve.\n    size_type max_size() const {return (~size_type(0))/sizeof(T);}\n\n    //------------------------------------------------------------------------\n    // STL support\n    //------------------------------------------------------------------------\n\n    //! start iterator\n    iterator begin() {return iterator(*this,0);}\n    //! end iterator\n    iterator end() {return iterator(*this,size());}\n    //! start const iterator\n    const_iterator begin() const {return const_iterator(*this,0);}\n    //! end const iterator\n    const_iterator end() const {return const_iterator(*this,size());}\n    //! start const iterator\n    const_iterator cbegin() const {return const_iterator(*this,0);}\n    //! end const iterator\n    const_iterator cend() const {return const_iterator(*this,size());}\n    //! reverse start iterator\n    reverse_iterator rbegin() {return reverse_iterator(end());}\n    //! reverse end iterator\n    reverse_iterator rend() {return reverse_iterator(begin());}\n    //! reverse start const iterator\n    const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}\n    //! reverse end const iterator\n    const_reverse_iterator rend() const {return const_reverse_iterator(begin());}\n    //! reverse start const iterator\n    const_reverse_iterator crbegin() const {return const_reverse_iterator(end());}\n    //! reverse end const iterator\n    const_reverse_iterator crend() const {return const_reverse_iterator(begin());}\n    //! the first item\n    reference front() {\n        __TBB_ASSERT( size()>0, NULL);\n        const segment_value_t& segment_value = my_segment[0].template load<relaxed>();\n        return (segment_value.template pointer<T>())[0];\n    }\n    //! the first item const\n    const_reference front() const {\n        __TBB_ASSERT( size()>0, NULL);\n        const segment_value_t& segment_value = my_segment[0].template load<relaxed>();\n        return (segment_value.template pointer<const T>())[0];\n    }\n    //! the last item\n    reference back() {\n        __TBB_ASSERT( size()>0, NULL);\n        return internal_subscript( size()-1 );\n    }\n    //! the last item const\n    const_reference back() const {\n        __TBB_ASSERT( size()>0, NULL);\n        return internal_subscript( size()-1 );\n    }\n    //! return allocator object\n    allocator_type get_allocator() const { return this->my_allocator; }\n\n    //! assign n items by copying t item\n    void assign(size_type n, const_reference t) {\n        clear();\n        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );\n    }\n\n    //! assign range [first, last)\n    template<class I>\n    void assign(I first, I last) {\n        clear(); internal_assign_range( first, last, static_cast<is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! assigns an initializer list\n    void assign(std::initializer_list<T> init_list) {\n        clear(); internal_assign_iterators( init_list.begin(), init_list.end());\n    }\n#endif //# __TBB_INITIALIZER_LISTS_PRESENT\n\n    //! swap two instances\n    void swap(concurrent_vector &vector) {\n        using std::swap;\n        if( this != &vector ) {\n            concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));\n            swap(this->my_allocator, vector.my_allocator);\n        }\n    }\n\n    //! Clear container while keeping memory allocated.\n    /** To free up the memory, use in conjunction with method compact(). Not thread safe **/\n    void clear() {\n        internal_clear(&destroy_array);\n    }\n\n    //! Clear and destroy vector.\n    ~concurrent_vector() {\n        segment_t *table = my_segment.load<relaxed>();\n        internal_free_segments( table, internal_clear(&destroy_array), my_first_block.load<relaxed>() );\n        // base class destructor call should be then\n    }\n\n    const internal::concurrent_vector_base_v3 &internal_vector_base() const { return *this; }\nprivate:\n    //! Allocate k items\n    static void *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {\n        return static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);\n    }\n    //! Free k segments from table\n    void internal_free_segments(segment_t table[], segment_index_t k, segment_index_t first_block);\n\n    //! Get reference to element at given index.\n    T& internal_subscript( size_type index ) const;\n\n    //! Get reference to element at given index with errors checks\n    T& internal_subscript_with_exceptions( size_type index ) const;\n\n    //! assign n items by copying t\n    void internal_assign_n(size_type n, const_pointer p) {\n        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(p), &destroy_array, p? &initialize_array_by : &initialize_array );\n    }\n\n    //! helper class\n    template<bool B> class is_integer_tag;\n\n    //! assign integer items by copying when arguments are treated as iterators. See C++ Standard 2003 23.1.1p9\n    template<class I>\n    void internal_assign_range(I first, I last, is_integer_tag<true> *) {\n        internal_assign_n(static_cast<size_type>(first), &static_cast<T&>(last));\n    }\n    //! inline proxy assign by iterators\n    template<class I>\n    void internal_assign_range(I first, I last, is_integer_tag<false> *) {\n        internal_assign_iterators(first, last);\n    }\n    //! assign by iterators\n    template<class I>\n    void internal_assign_iterators(I first, I last);\n\n    //these functions are marked __TBB_EXPORTED_FUNC as they are called from within the library\n\n    //! Construct n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC initialize_array( void* begin, const void*, size_type n );\n\n    //! Copy-construct n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC initialize_array_by( void* begin, const void* src, size_type n );\n\n    //! Copy-construct n instances of T by copying single element pointed to by src, starting at \"dst\".\n    static void __TBB_EXPORTED_FUNC copy_array( void* dst, const void* src, size_type n );\n\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n    //! Either opy or move-construct n instances of T, starting at \"dst\" by copying according element of src array.\n    static void __TBB_EXPORTED_FUNC move_array_if_noexcept( void* dst, const void* src, size_type n );\n#endif //__TBB_MOVE_IF_NO_EXCEPT_PRESENT\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! Move-construct n instances of T, starting at \"dst\" by copying according element of src array.\n    static void __TBB_EXPORTED_FUNC move_array( void* dst, const void* src, size_type n );\n\n    //! Move-assign (using operator=) n instances of T, starting at \"dst\" by assigning according element of src array.\n    static void __TBB_EXPORTED_FUNC move_assign_array( void* dst, const void* src, size_type n );\n#endif\n    //! Copy-construct n instances of T, starting at \"dst\" by iterator range of [p_type_erased_iterator, p_type_erased_iterator+n).\n    template<typename Iterator>\n    static void __TBB_EXPORTED_FUNC copy_range( void* dst, const void* p_type_erased_iterator, size_type n );\n\n    //! Assign (using operator=) n instances of T, starting at \"dst\" by assigning according element of src array.\n    static void __TBB_EXPORTED_FUNC assign_array( void* dst, const void* src, size_type n );\n\n    //! Destroy n instances of T, starting at \"begin\".\n    static void __TBB_EXPORTED_FUNC destroy_array( void* begin, size_type n );\n\n    //! Exception-aware helper class for filling a segment by exception-danger operators of user class\n    class internal_loop_guide : internal::no_copy {\n    public:\n        const pointer array;\n        const size_type n;\n        size_type i;\n\n        static const T* as_const_pointer(const void *ptr) { return static_cast<const T *>(ptr); }\n        static T* as_pointer(const void *src) { return static_cast<T*>(const_cast<void *>(src)); }\n\n        internal_loop_guide(size_type ntrials, void *ptr)\n            : array(as_pointer(ptr)), n(ntrials), i(0) {}\n        void init() {   for(; i < n; ++i) new( &array[i] ) T(); }\n        void init(const void *src) { for(; i < n; ++i) new( &array[i] ) T(*as_const_pointer(src)); }\n        void copy(const void *src) { for(; i < n; ++i) new( &array[i] ) T(as_const_pointer(src)[i]); }\n        void assign(const void *src) { for(; i < n; ++i) array[i] = as_const_pointer(src)[i]; }\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        void move_assign(const void *src)       { for(; i < n; ++i) array[i]         =  std::move(as_pointer(src)[i]);   }\n        void move_construct(const void *src)    { for(; i < n; ++i) new( &array[i] ) T( std::move(as_pointer(src)[i]) ); }\n#endif\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n        void move_construct_if_noexcept(const void *src)    { for(; i < n; ++i) new( &array[i] ) T( std::move_if_noexcept(as_pointer(src)[i]) ); }\n#endif //__TBB_MOVE_IF_NOEXCEPT_PRESENT\n\n        //TODO: rename to construct_range\n        template<class I> void iterate(I &src) { for(; i < n; ++i, ++src) new( &array[i] ) T( *src ); }\n        ~internal_loop_guide() {\n            if(i < n) {// if an exception was raised, fill the rest of items with zeros\n                internal::handle_unconstructed_elements(array+i, n-i);\n            }\n        }\n    };\n\n    struct push_back_helper : internal::no_copy{\n        struct element_construction_guard : internal::no_copy{\n            pointer element;\n\n            element_construction_guard(pointer an_element) : element (an_element){}\n            void dismiss(){ element = NULL; }\n            ~element_construction_guard(){\n                if (element){\n                    internal::handle_unconstructed_elements(element, 1);\n                }\n            }\n        };\n\n        concurrent_vector & v;\n        size_type k;\n        element_construction_guard g;\n\n        push_back_helper(concurrent_vector & vector) :\n            v(vector),\n            g (static_cast<T*>(v.internal_push_back(sizeof(T),k)))\n        {}\n\n        pointer internal_push_back_result(){ return g.element;}\n        iterator return_iterator_and_dismiss(){\n            pointer ptr = g.element;\n            g.dismiss();\n            return iterator(v, k, ptr);\n        }\n    };\n};\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning (push)\n#pragma warning (disable: 4701) // potentially uninitialized local variable \"old\"\n#endif\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::shrink_to_fit() {\n    internal_segments_table old;\n    __TBB_TRY {\n        internal_array_op2 copy_or_move_array =\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\n                &move_array_if_noexcept\n#else\n                &copy_array\n#endif\n        ;\n        if( internal_compact( sizeof(T), &old, &destroy_array, copy_or_move_array ) )\n            internal_free_segments( old.table, pointers_per_long_table, old.first_block ); // free joined and unnecessary segments\n    } __TBB_CATCH(...) {\n        if( old.first_block ) // free segment allocated for compacting. Only for support of exceptions in ctor of user T[ype]\n            internal_free_segments( old.table, 1, old.first_block );\n        __TBB_RETHROW();\n    }\n}\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning (pop)\n#endif // warning 4701 is back\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::internal_free_segments(segment_t table[], segment_index_t k, segment_index_t first_block) {\n    // Free the arrays\n    while( k > first_block ) {\n        --k;\n        segment_value_t segment_value = table[k].load<relaxed>();\n        table[k].store<relaxed>(segment_not_used());\n        if( segment_value == segment_allocated() ) // check for correct segment pointer\n            this->my_allocator.deallocate( (segment_value.pointer<T>()), segment_size(k) );\n    }\n    segment_value_t segment_value = table[0].load<relaxed>();\n    if( segment_value == segment_allocated() ) {\n        __TBB_ASSERT( first_block > 0, NULL );\n        while(k > 0) table[--k].store<relaxed>(segment_not_used());\n        this->my_allocator.deallocate( (segment_value.pointer<T>()), segment_size(first_block) );\n    }\n}\n\ntemplate<typename T, class A>\nT& concurrent_vector<T, A>::internal_subscript( size_type index ) const {\n    //TODO: unify both versions of internal_subscript\n    __TBB_ASSERT( index < my_early_size, \"index out of bounds\" );\n    size_type j = index;\n    segment_index_t k = segment_base_index_of( j );\n    __TBB_ASSERT( my_segment.load<acquire>() != my_storage || k < pointers_per_short_table, \"index is being allocated\" );\n    //no need in load with acquire (load<acquire>) since thread works in own space or gets\n    //the information about added elements via some form of external synchronization\n    //TODO: why not make a load of my_segment relaxed as well ?\n    //TODO: add an assertion that my_segment[k] is properly aligned to please ITT\n    segment_value_t segment_value =  my_segment[k].template load<relaxed>();\n    __TBB_ASSERT( segment_value != segment_allocation_failed(), \"the instance is broken by bad allocation. Use at() instead\" );\n    __TBB_ASSERT( segment_value != segment_not_used(), \"index is being allocated\" );\n    return (( segment_value.pointer<T>()))[j];\n}\n\ntemplate<typename T, class A>\nT& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index ) const {\n    if( index >= my_early_size )\n        internal::throw_exception(internal::eid_out_of_range); // throw std::out_of_range\n    size_type j = index;\n    segment_index_t k = segment_base_index_of( j );\n    //TODO: refactor this condition into separate helper function, e.g. fits_into_small_table\n    if( my_segment.load<acquire>() == my_storage && k >= pointers_per_short_table )\n        internal::throw_exception(internal::eid_segment_range_error); // throw std::range_error\n    // no need in load with acquire (load<acquire>) since thread works in own space or gets\n    //the information about added elements via some form of external synchronization\n    //TODO: why not make a load of my_segment relaxed as well ?\n    //TODO: add an assertion that my_segment[k] is properly aligned to please ITT\n    segment_value_t segment_value =  my_segment[k].template load<relaxed>();\n    enforce_segment_allocated(segment_value, internal::eid_index_range_error);\n    return (segment_value.pointer<T>())[j];\n}\n\ntemplate<typename T, class A> template<class I>\nvoid concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {\n    __TBB_ASSERT(my_early_size == 0, NULL);\n    size_type n = std::distance(first, last);\n    if( !n ) return;\n    internal_reserve(n, sizeof(T), max_size());\n    my_early_size = n;\n    segment_index_t k = 0;\n    //TODO: unify segment iteration code with concurrent_base_v3::helper\n    size_type sz = segment_size( my_first_block );\n    while( sz < n ) {\n        internal_loop_guide loop(sz, my_segment[k].template load<relaxed>().template pointer<void>());\n        loop.iterate(first);\n        n -= sz;\n        if( !k ) k = my_first_block;\n        else { ++k; sz <<= 1; }\n    }\n    internal_loop_guide loop(n, my_segment[k].template load<relaxed>().template pointer<void>());\n    loop.iterate(first);\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::initialize_array( void* begin, const void *, size_type n ) {\n    internal_loop_guide loop(n, begin); loop.init();\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::initialize_array_by( void* begin, const void *src, size_type n ) {\n    internal_loop_guide loop(n, begin); loop.init(src);\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::copy_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.copy(src);\n}\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::move_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.move_construct(src);\n}\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::move_assign_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.move_assign(src);\n}\n#endif\n\n#if __TBB_MOVE_IF_NOEXCEPT_PRESENT\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::move_array_if_noexcept( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.move_construct_if_noexcept(src);\n}\n#endif //__TBB_MOVE_IF_NOEXCEPT_PRESENT\n\ntemplate<typename T, class A>\ntemplate<typename I>\nvoid concurrent_vector<T, A>::copy_range( void* dst, const void* p_type_erased_iterator, size_type n ){\n    I & iterator ((*const_cast<I*>(static_cast<const I*>(p_type_erased_iterator))));\n    internal_loop_guide loop(n, dst); loop.iterate(iterator);\n}\n\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::assign_array( void* dst, const void* src, size_type n ) {\n    internal_loop_guide loop(n, dst); loop.assign(src);\n}\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warning\n    #pragma warning (push)\n    #pragma warning (disable: 4189)\n#endif\ntemplate<typename T, class A>\nvoid concurrent_vector<T, A>::destroy_array( void* begin, size_type n ) {\n    T* array = static_cast<T*>(begin);\n    for( size_type j=n; j>0; --j )\n        array[j-1].~T(); // destructors are supposed to not throw any exceptions\n}\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4189 is back\n\n// concurrent_vector's template functions\ntemplate<typename T, class A1, class A2>\ninline bool operator==(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b) {\n    //TODO: call size() only once per vector (in operator==)\n    // Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());\n    if(a.size() != b.size()) return false;\n    typename concurrent_vector<T, A1>::const_iterator i(a.begin());\n    typename concurrent_vector<T, A2>::const_iterator j(b.begin());\n    for(; i != a.end(); ++i, ++j)\n        if( !(*i == *j) ) return false;\n    return true;\n}\n\ntemplate<typename T, class A1, class A2>\ninline bool operator!=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return !(a == b); }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator<(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator>(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return b < a; }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator<=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return !(b < a); }\n\ntemplate<typename T, class A1, class A2>\ninline bool operator>=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)\n{    return !(a < b); }\n\ntemplate<typename T, class A>\ninline void swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)\n{    a.swap( b ); }\n\n} // namespace tbb\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4267,4127 are back\n\n#endif /* __TBB_concurrent_vector_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/critical_section.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef _TBB_CRITICAL_SECTION_H_\n#define _TBB_CRITICAL_SECTION_H_\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#include <errno.h>\n#endif  // _WIN32||WIN64\n\n#include \"tbb_stddef.h\"\n#include \"tbb_thread.h\"\n#include \"tbb_exception.h\"\n\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n    namespace internal {\nclass critical_section_v4 : internal::no_copy {\n#if _WIN32||_WIN64\n    CRITICAL_SECTION my_impl;\n#else\n    pthread_mutex_t my_impl;\n#endif\n    tbb_thread::id my_tid;\npublic:\n\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    critical_section_v4() {\n#if _WIN32||_WIN64\n        InitializeCriticalSectionEx( &my_impl, 4000, 0 );\n#else\n        pthread_mutex_init(&my_impl, NULL);\n#endif\n        internal_construct();\n    }\n\n    ~critical_section_v4() {\n        __TBB_ASSERT(my_tid == tbb_thread::id(), \"Destroying a still-held critical section\");\n#if _WIN32||_WIN64\n        DeleteCriticalSection(&my_impl);\n#else\n        pthread_mutex_destroy(&my_impl);\n#endif\n    }\n\n    class scoped_lock : internal::no_copy {\n    private:\n        critical_section_v4 &my_crit;\n    public:\n        scoped_lock( critical_section_v4& lock_me) :my_crit(lock_me) {\n            my_crit.lock();\n        }\n\n        ~scoped_lock() {\n            my_crit.unlock();\n        }\n    };\n\n    void lock() {\n        tbb_thread::id local_tid = this_tbb_thread::get_id();\n        if(local_tid == my_tid) throw_exception( eid_improper_lock );\n#if _WIN32||_WIN64\n        EnterCriticalSection( &my_impl );\n#else\n        int rval = pthread_mutex_lock(&my_impl);\n        __TBB_ASSERT_EX(!rval, \"critical_section::lock: pthread_mutex_lock failed\");\n#endif\n        __TBB_ASSERT(my_tid == tbb_thread::id(), NULL);\n        my_tid = local_tid;\n    }\n\n    bool try_lock() {\n        bool gotlock;\n        tbb_thread::id local_tid = this_tbb_thread::get_id();\n        if(local_tid == my_tid) return false;\n#if _WIN32||_WIN64\n        gotlock = TryEnterCriticalSection( &my_impl ) != 0;\n#else\n        int rval = pthread_mutex_trylock(&my_impl);\n        // valid returns are 0 (locked) and [EBUSY]\n        __TBB_ASSERT(rval == 0 || rval == EBUSY, \"critical_section::trylock: pthread_mutex_trylock failed\");\n        gotlock = rval == 0;\n#endif\n        if(gotlock)  {\n            my_tid = local_tid;\n        }\n        return gotlock;\n    }\n\n    void unlock() {\n        __TBB_ASSERT(this_tbb_thread::get_id() == my_tid, \"thread unlocking critical_section is not thread that locked it\");\n        my_tid = tbb_thread::id();\n#if _WIN32||_WIN64\n        LeaveCriticalSection( &my_impl );\n#else\n        int rval = pthread_mutex_unlock(&my_impl);\n        __TBB_ASSERT_EX(!rval, \"critical_section::unlock: pthread_mutex_unlock failed\");\n#endif\n    }\n\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = true;\n}; // critical_section_v4\n} // namespace internal\ntypedef internal::critical_section_v4 critical_section;\n\n__TBB_DEFINE_PROFILING_SET_NAME(critical_section)\n} // namespace tbb\n#endif  // _TBB_CRITICAL_SECTION_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/enumerable_thread_specific.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_enumerable_thread_specific_H\n#define __TBB_enumerable_thread_specific_H\n\n#include \"atomic.h\"\n#include \"concurrent_vector.h\"\n#include \"tbb_thread.h\"\n#include \"tbb_allocator.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"aligned_space.h\"\n#include \"internal/_template_helpers.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n#include \"tbb_profiling.h\"\n#include <string.h>  // for memcpy\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#endif\n\n#define __TBB_ETS_USE_CPP11 \\\n    (__TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT \\\n     && __TBB_CPP11_DECLTYPE_PRESENT && __TBB_CPP11_LAMBDAS_PRESENT)\n\nnamespace tbb {\n\n//! enum for selecting between single key and key-per-instance versions\nenum ets_key_usage_type { ets_key_per_instance, ets_no_key };\n\nnamespace interface6 {\n\n    // Forward declaration to use in internal classes\n    template <typename T, typename Allocator, ets_key_usage_type ETS_key_type>\n    class enumerable_thread_specific;\n\n    //! @cond\n    namespace internal {\n\n        using namespace tbb::internal;\n\n        template<ets_key_usage_type ETS_key_type>\n        class ets_base: tbb::internal::no_copy {\n        protected:\n            typedef tbb_thread::id key_type;\n#if __TBB_PROTECTED_NESTED_CLASS_BROKEN\n        public:\n#endif\n            struct slot;\n\n            struct array {\n                array* next;\n                size_t lg_size;\n                slot& at( size_t k ) {\n                    return ((slot*)(void*)(this+1))[k];\n                }\n                size_t size() const {return (size_t)1<<lg_size;}\n                size_t mask() const {return size()-1;}\n                size_t start( size_t h ) const {\n                    return h>>(8*sizeof(size_t)-lg_size);\n                }\n            };\n            struct slot {\n                key_type key;\n                void* ptr;\n                bool empty() const {return key == key_type();}\n                bool match( key_type k ) const {return key == k;}\n                bool claim( key_type k ) {\n                    // TODO: maybe claim ptr, because key_type is not guaranteed to fit into word size\n                    return atomic_compare_and_swap(key, k, key_type()) == key_type();\n                }\n            };\n#if __TBB_PROTECTED_NESTED_CLASS_BROKEN\n        protected:\n#endif\n\n            //! Root of linked list of arrays of decreasing size.\n            /** NULL if and only if my_count==0.\n                Each array in the list is half the size of its predecessor. */\n            atomic<array*> my_root;\n            atomic<size_t> my_count;\n            virtual void* create_local() = 0;\n            virtual void* create_array(size_t _size) = 0;  // _size in bytes\n            virtual void free_array(void* ptr, size_t _size) = 0; // _size in bytes\n            array* allocate( size_t lg_size ) {\n                size_t n = 1<<lg_size;\n                array* a = static_cast<array*>(create_array( sizeof(array)+n*sizeof(slot) ));\n                a->lg_size = lg_size;\n                std::memset( a+1, 0, n*sizeof(slot) );\n                return a;\n            }\n            void free(array* a) {\n                size_t n = 1<<(a->lg_size);\n                free_array( (void *)a, size_t(sizeof(array)+n*sizeof(slot)) );\n            }\n\n            ets_base() {my_root=NULL; my_count=0;}\n            virtual ~ets_base();  // g++ complains if this is not virtual\n            void* table_lookup( bool& exists );\n            void table_clear();\n            // The following functions are not used in concurrent context,\n            // so we don't need synchronization and ITT annotations there.\n            void table_elementwise_copy( const ets_base& other,\n                                         void*(*add_element)(ets_base&, void*) ) {\n                __TBB_ASSERT(!my_root,NULL);\n                __TBB_ASSERT(!my_count,NULL);\n                if( !other.my_root ) return;\n                array* root = my_root = allocate(other.my_root->lg_size);\n                root->next = NULL;\n                my_count = other.my_count;\n                size_t mask = root->mask();\n                for( array* r=other.my_root; r; r=r->next ) {\n                    for( size_t i=0; i<r->size(); ++i ) {\n                        slot& s1 = r->at(i);\n                        if( !s1.empty() ) {\n                            for( size_t j = root->start(tbb::tbb_hash<key_type>()(s1.key)); ; j=(j+1)&mask ) {\n                                slot& s2 = root->at(j);\n                                if( s2.empty() ) {\n                                    s2.ptr = add_element(*this, s1.ptr);\n                                    s2.key = s1.key;\n                                    break;\n                                }\n                                else if( s2.match(s1.key) )\n                                    break;\n                            }\n                        }\n                    }\n                }\n            }\n            void table_swap( ets_base& other ) {\n               __TBB_ASSERT(this!=&other, \"Don't swap an instance with itself\");\n               tbb::internal::swap<relaxed>(my_root, other.my_root);\n               tbb::internal::swap<relaxed>(my_count, other.my_count);\n            }\n        };\n\n        template<ets_key_usage_type ETS_key_type>\n        ets_base<ETS_key_type>::~ets_base() {\n            __TBB_ASSERT(!my_root, NULL);\n        }\n\n        template<ets_key_usage_type ETS_key_type>\n        void ets_base<ETS_key_type>::table_clear() {\n            while( array* r = my_root ) {\n                my_root = r->next;\n                free(r);\n            }\n            my_count = 0;\n        }\n\n        template<ets_key_usage_type ETS_key_type>\n        void* ets_base<ETS_key_type>::table_lookup( bool& exists ) {\n            const key_type k = tbb::this_tbb_thread::get_id();\n\n            __TBB_ASSERT(k != key_type(),NULL);\n            void* found;\n            size_t h = tbb::tbb_hash<key_type>()(k);\n            for( array* r=my_root; r; r=r->next ) {\n                call_itt_notify(acquired,r);\n                size_t mask=r->mask();\n                for(size_t i = r->start(h); ;i=(i+1)&mask) {\n                    slot& s = r->at(i);\n                    if( s.empty() ) break;\n                    if( s.match(k) ) {\n                        if( r==my_root ) {\n                            // Success at top level\n                            exists = true;\n                            return s.ptr;\n                        } else {\n                            // Success at some other level.  Need to insert at top level.\n                            exists = true;\n                            found = s.ptr;\n                            goto insert;\n                        }\n                    }\n                }\n            }\n            // Key does not yet exist.  The density of slots in the table does not exceed 0.5,\n            // for if this will occur a new table is allocated with double the current table\n            // size, which is swapped in as the new root table.  So an empty slot is guaranteed.\n            exists = false;\n            found = create_local();\n            {\n                size_t c = ++my_count;\n                array* r = my_root;\n                call_itt_notify(acquired,r);\n                if( !r || c>r->size()/2 ) {\n                    size_t s = r ? r->lg_size : 2;\n                    while( c>size_t(1)<<(s-1) ) ++s;\n                    array* a = allocate(s);\n                    for(;;) {\n                        a->next = r;\n                        call_itt_notify(releasing,a);\n                        array* new_r = my_root.compare_and_swap(a,r);\n                        if( new_r==r ) break;\n                        call_itt_notify(acquired, new_r);\n                        if( new_r->lg_size>=s ) {\n                            // Another thread inserted an equal or  bigger array, so our array is superfluous.\n                            free(a);\n                            break;\n                        }\n                        r = new_r;\n                    }\n                }\n            }\n        insert:\n        // Whether a slot has been found in an older table, or if it has been inserted at this level,\n        // it has already been accounted for in the total.  Guaranteed to be room for it, and it is\n        // not present, so search for empty slot and use it.\n            array* ir = my_root;\n            call_itt_notify(acquired, ir);\n            size_t mask = ir->mask();\n            for(size_t i = ir->start(h);;i=(i+1)&mask) {\n                slot& s = ir->at(i);\n                if( s.empty() ) {\n                    if( s.claim(k) ) {\n                        s.ptr = found;\n                        return found;\n                    }\n                }\n            }\n        }\n\n        //! Specialization that exploits native TLS\n        template <>\n        class ets_base<ets_key_per_instance>: protected ets_base<ets_no_key> {\n            typedef ets_base<ets_no_key> super;\n#if _WIN32||_WIN64\n#if __TBB_WIN8UI_SUPPORT\n            typedef DWORD tls_key_t;\n            void create_key() { my_key = FlsAlloc(NULL); }\n            void destroy_key() { FlsFree(my_key); }\n            void set_tls(void * value) { FlsSetValue(my_key, (LPVOID)value); }\n            void* get_tls() { return (void *)FlsGetValue(my_key); }\n#else\n            typedef DWORD tls_key_t;\n            void create_key() { my_key = TlsAlloc(); }\n            void destroy_key() { TlsFree(my_key); }\n            void set_tls(void * value) { TlsSetValue(my_key, (LPVOID)value); }\n            void* get_tls() { return (void *)TlsGetValue(my_key); }\n#endif\n#else\n            typedef pthread_key_t tls_key_t;\n            void create_key() { pthread_key_create(&my_key, NULL); }\n            void destroy_key() { pthread_key_delete(my_key); }\n            void set_tls( void * value ) const { pthread_setspecific(my_key, value); }\n            void* get_tls() const { return pthread_getspecific(my_key); }\n#endif\n            tls_key_t my_key;\n            virtual void* create_local() = 0;\n            virtual void* create_array(size_t _size) = 0;  // _size in bytes\n            virtual void free_array(void* ptr, size_t _size) = 0; // size in bytes\n        protected:\n            ets_base() {create_key();}\n            ~ets_base() {destroy_key();}\n            void* table_lookup( bool& exists ) {\n                void* found = get_tls();\n                if( found ) {\n                    exists=true;\n                } else {\n                    found = super::table_lookup(exists);\n                    set_tls(found);\n                }\n                return found;\n            }\n            void table_clear() {\n                destroy_key();\n                create_key();\n                super::table_clear();\n            }\n            void table_swap( ets_base& other ) {\n               using std::swap;\n               __TBB_ASSERT(this!=&other, \"Don't swap an instance with itself\");\n               swap(my_key, other.my_key);\n               super::table_swap(other);\n            }\n        };\n\n        //! Random access iterator for traversing the thread local copies.\n        template< typename Container, typename Value >\n        class enumerable_thread_specific_iterator\n#if defined(_WIN64) && defined(_MSC_VER)\n            // Ensure that Microsoft's internal template function _Val_type works correctly.\n            : public std::iterator<std::random_access_iterator_tag,Value>\n#endif /* defined(_WIN64) && defined(_MSC_VER) */\n        {\n            //! current position in the concurrent_vector\n\n            Container *my_container;\n            typename Container::size_type my_index;\n            mutable Value *my_value;\n\n            template<typename C, typename T>\n            friend enumerable_thread_specific_iterator<C,T>\n            operator+( ptrdiff_t offset, const enumerable_thread_specific_iterator<C,T>& v );\n\n            template<typename C, typename T, typename U>\n            friend bool operator==( const enumerable_thread_specific_iterator<C,T>& i,\n                                    const enumerable_thread_specific_iterator<C,U>& j );\n\n            template<typename C, typename T, typename U>\n            friend bool operator<( const enumerable_thread_specific_iterator<C,T>& i,\n                                   const enumerable_thread_specific_iterator<C,U>& j );\n\n            template<typename C, typename T, typename U>\n            friend ptrdiff_t operator-( const enumerable_thread_specific_iterator<C,T>& i,\n                                        const enumerable_thread_specific_iterator<C,U>& j );\n\n            template<typename C, typename U>\n            friend class enumerable_thread_specific_iterator;\n\n            public:\n\n            enumerable_thread_specific_iterator( const Container &container, typename Container::size_type index ) :\n                my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}\n\n            //! Default constructor\n            enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}\n\n            template<typename U>\n            enumerable_thread_specific_iterator( const enumerable_thread_specific_iterator<Container, U>& other ) :\n                    my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}\n\n            enumerable_thread_specific_iterator operator+( ptrdiff_t offset ) const {\n                return enumerable_thread_specific_iterator(*my_container, my_index + offset);\n            }\n\n            enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {\n                my_index += offset;\n                my_value = NULL;\n                return *this;\n            }\n\n            enumerable_thread_specific_iterator operator-( ptrdiff_t offset ) const {\n                return enumerable_thread_specific_iterator( *my_container, my_index-offset );\n            }\n\n            enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {\n                my_index -= offset;\n                my_value = NULL;\n                return *this;\n            }\n\n            Value& operator*() const {\n                Value* value = my_value;\n                if( !value ) {\n                    value = my_value = (*my_container)[my_index].value();\n                }\n                __TBB_ASSERT( value==(*my_container)[my_index].value(), \"corrupt cache\" );\n                return *value;\n            }\n\n            Value& operator[]( ptrdiff_t k ) const {\n               return (*my_container)[my_index + k].value;\n            }\n\n            Value* operator->() const {return &operator*();}\n\n            enumerable_thread_specific_iterator& operator++() {\n                ++my_index;\n                my_value = NULL;\n                return *this;\n            }\n\n            enumerable_thread_specific_iterator& operator--() {\n                --my_index;\n                my_value = NULL;\n                return *this;\n            }\n\n            //! Post increment\n            enumerable_thread_specific_iterator operator++(int) {\n                enumerable_thread_specific_iterator result = *this;\n                ++my_index;\n                my_value = NULL;\n                return result;\n            }\n\n            //! Post decrement\n            enumerable_thread_specific_iterator operator--(int) {\n                enumerable_thread_specific_iterator result = *this;\n                --my_index;\n                my_value = NULL;\n                return result;\n            }\n\n            // STL support\n            typedef ptrdiff_t difference_type;\n            typedef Value value_type;\n            typedef Value* pointer;\n            typedef Value& reference;\n            typedef std::random_access_iterator_tag iterator_category;\n        };\n\n        template<typename Container, typename T>\n        enumerable_thread_specific_iterator<Container,T>\n        operator+( ptrdiff_t offset, const enumerable_thread_specific_iterator<Container,T>& v ) {\n            return enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator==( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return i.my_index==j.my_index && i.my_container == j.my_container;\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator!=( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return !(i==j);\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator<( const enumerable_thread_specific_iterator<Container,T>& i,\n                        const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return i.my_index<j.my_index;\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator>( const enumerable_thread_specific_iterator<Container,T>& i,\n                        const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return j<i;\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator>=( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return !(i<j);\n        }\n\n        template<typename Container, typename T, typename U>\n        bool operator<=( const enumerable_thread_specific_iterator<Container,T>& i,\n                         const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return !(j<i);\n        }\n\n        template<typename Container, typename T, typename U>\n        ptrdiff_t operator-( const enumerable_thread_specific_iterator<Container,T>& i,\n                             const enumerable_thread_specific_iterator<Container,U>& j ) {\n            return i.my_index-j.my_index;\n        }\n\n    template<typename SegmentedContainer, typename Value >\n        class segmented_iterator\n#if defined(_WIN64) && defined(_MSC_VER)\n        : public std::iterator<std::input_iterator_tag, Value>\n#endif\n        {\n            template<typename C, typename T, typename U>\n            friend bool operator==(const segmented_iterator<C,T>& i, const segmented_iterator<C,U>& j);\n\n            template<typename C, typename T, typename U>\n            friend bool operator!=(const segmented_iterator<C,T>& i, const segmented_iterator<C,U>& j);\n\n            template<typename C, typename U>\n            friend class segmented_iterator;\n\n            public:\n\n                segmented_iterator() {my_segcont = NULL;}\n\n                segmented_iterator( const SegmentedContainer& _segmented_container ) :\n                    my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),\n                    outer_iter(my_segcont->end()) { }\n\n                ~segmented_iterator() {}\n\n                typedef typename SegmentedContainer::iterator outer_iterator;\n                typedef typename SegmentedContainer::value_type InnerContainer;\n                typedef typename InnerContainer::iterator inner_iterator;\n\n                // STL support\n                typedef ptrdiff_t difference_type;\n                typedef Value value_type;\n                typedef typename SegmentedContainer::size_type size_type;\n                typedef Value* pointer;\n                typedef Value& reference;\n                typedef std::input_iterator_tag iterator_category;\n\n                // Copy Constructor\n                template<typename U>\n                segmented_iterator(const segmented_iterator<SegmentedContainer, U>& other) :\n                    my_segcont(other.my_segcont),\n                    outer_iter(other.outer_iter),\n                    // can we assign a default-constructed iterator to inner if we're at the end?\n                    inner_iter(other.inner_iter)\n                {}\n\n                // assignment\n                template<typename U>\n                segmented_iterator& operator=( const segmented_iterator<SegmentedContainer, U>& other) {\n                    if(this != &other) {\n                        my_segcont = other.my_segcont;\n                        outer_iter = other.outer_iter;\n                        if(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;\n                    }\n                    return *this;\n                }\n\n                // allow assignment of outer iterator to segmented iterator.  Once it is\n                // assigned, move forward until a non-empty inner container is found or\n                // the end of the outer container is reached.\n                segmented_iterator& operator=(const outer_iterator& new_outer_iter) {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    // check that this iterator points to something inside the segmented container\n                    for(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {\n                        if( !outer_iter->empty() ) {\n                            inner_iter = outer_iter->begin();\n                            break;\n                        }\n                    }\n                    return *this;\n                }\n\n                // pre-increment\n                segmented_iterator& operator++() {\n                    advance_me();\n                    return *this;\n                }\n\n                // post-increment\n                segmented_iterator operator++(int) {\n                    segmented_iterator tmp = *this;\n                    operator++();\n                    return tmp;\n                }\n\n                bool operator==(const outer_iterator& other_outer) const {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    return (outer_iter == other_outer &&\n                            (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));\n                }\n\n                bool operator!=(const outer_iterator& other_outer) const {\n                    return !operator==(other_outer);\n\n                }\n\n                // (i)* RHS\n                reference operator*() const {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    __TBB_ASSERT(outer_iter != my_segcont->end(), \"Dereferencing a pointer at end of container\");\n                    __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); // should never happen\n                    return *inner_iter;\n                }\n\n                // i->\n                pointer operator->() const { return &operator*();}\n\n            private:\n                SegmentedContainer*             my_segcont;\n                outer_iterator outer_iter;\n                inner_iterator inner_iter;\n\n                void advance_me() {\n                    __TBB_ASSERT(my_segcont != NULL, NULL);\n                    __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); // not true if there are no inner containers\n                    __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); // not true if the inner containers are all empty.\n                    ++inner_iter;\n                    while(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {\n                        inner_iter = outer_iter->begin();\n                    }\n                }\n        };    // segmented_iterator\n\n        template<typename SegmentedContainer, typename T, typename U>\n        bool operator==( const segmented_iterator<SegmentedContainer,T>& i,\n                         const segmented_iterator<SegmentedContainer,U>& j ) {\n            if(i.my_segcont != j.my_segcont) return false;\n            if(i.my_segcont == NULL) return true;\n            if(i.outer_iter != j.outer_iter) return false;\n            if(i.outer_iter == i.my_segcont->end()) return true;\n            return i.inner_iter == j.inner_iter;\n        }\n\n        // !=\n        template<typename SegmentedContainer, typename T, typename U>\n        bool operator!=( const segmented_iterator<SegmentedContainer,T>& i,\n                         const segmented_iterator<SegmentedContainer,U>& j ) {\n            return !(i==j);\n        }\n\n        template<typename T>\n        struct construct_by_default: tbb::internal::no_assign {\n            void construct(void*where) {new(where) T();} // C++ note: the () in T() ensure zero initialization.\n            construct_by_default( int ) {}\n        };\n\n        template<typename T>\n        struct construct_by_exemplar: tbb::internal::no_assign {\n            const T exemplar;\n            void construct(void*where) {new(where) T(exemplar);}\n            construct_by_exemplar( const T& t ) : exemplar(t) {}\n#if __TBB_ETS_USE_CPP11\n            construct_by_exemplar( T&& t ) : exemplar(std::move(t)) {}\n#endif\n        };\n\n        template<typename T, typename Finit>\n        struct construct_by_finit: tbb::internal::no_assign {\n            Finit f;\n            void construct(void* where) {new(where) T(f());}\n            construct_by_finit( const Finit& f_ ) : f(f_) {}\n#if __TBB_ETS_USE_CPP11\n            construct_by_finit( Finit&& f_ ) : f(std::move(f_)) {}\n#endif\n        };\n\n#if __TBB_ETS_USE_CPP11\n        template<typename T, typename... P>\n        struct construct_by_args: tbb::internal::no_assign {\n            internal::stored_pack<P...> pack;\n            void construct(void* where) {\n                internal::call( [where](const typename strip<P>::type&... args ){\n                   new(where) T(args...);\n                }, pack );\n            }\n            construct_by_args( P&& ... args ) : pack(std::forward<P>(args)...) {}\n        };\n#endif\n\n        // storage for initialization function pointer\n        // TODO: consider removing the template parameter T here and in callback_leaf\n        template<typename T>\n        class callback_base {\n        public:\n            // Clone *this\n            virtual callback_base* clone() const = 0;\n            // Destruct and free *this\n            virtual void destroy() = 0;\n            // Need virtual destructor to satisfy GCC compiler warning\n            virtual ~callback_base() { }\n            // Construct T at where\n            virtual void construct(void* where) = 0;\n        };\n\n        template <typename T, typename Constructor>\n        class callback_leaf: public callback_base<T>, Constructor {\n#if __TBB_ETS_USE_CPP11\n            template<typename... P> callback_leaf( P&& ... params ) : Constructor(std::forward<P>(params)...) {}\n#else\n            template<typename X> callback_leaf( const X& x ) : Constructor(x) {}\n#endif\n            // TODO: make the construction/destruction consistent (use allocator.construct/destroy)\n            typedef typename tbb::tbb_allocator<callback_leaf> my_allocator_type;\n\n            /*override*/ callback_base<T>* clone() const {\n                return make(*this);\n            }\n\n            /*override*/ void destroy() {\n                my_allocator_type().destroy(this);\n                my_allocator_type().deallocate(this,1);\n            }\n\n            /*override*/ void construct(void* where) {\n                Constructor::construct(where);\n            }\n        public:\n#if __TBB_ETS_USE_CPP11\n            template<typename... P>\n            static callback_base<T>* make( P&& ... params ) {\n                void* where = my_allocator_type().allocate(1);\n                return new(where) callback_leaf( std::forward<P>(params)... );\n            }\n#else\n            template<typename X>\n            static callback_base<T>* make( const X& x ) {\n                void* where = my_allocator_type().allocate(1);\n                return new(where) callback_leaf(x);\n            }\n#endif\n        };\n\n        //! Template for recording construction of objects in table\n        /** All maintenance of the space will be done explicitly on push_back,\n            and all thread local copies must be destroyed before the concurrent\n            vector is deleted.\n\n            The flag is_built is initialized to false.  When the local is\n            successfully-constructed, set the flag to true or call value_committed().\n            If the constructor throws, the flag will be false.\n        */\n        // TODO: make a constructor for ets_element that takes a callback_base.  make is_built private\n        template<typename U>\n        struct ets_element {\n            tbb::aligned_space<U> my_space;\n            bool is_built;\n            ets_element() { is_built = false; }  // not currently-built\n            U* value() { return my_space.begin(); }\n            U* value_committed() { is_built = true; return my_space.begin(); }\n            ~ets_element() {\n                if(is_built) {\n                    my_space.begin()->~U();\n                    is_built = false;\n                }\n            }\n        };\n\n        // A predicate that can be used for a compile-time compatibility check of ETS instances\n        // Ideally, it should have been declared inside the ETS class, but unfortunately\n        // in that case VS2013 does not enable the variadic constructor.\n        template<typename T, typename ETS> struct is_compatible_ets { static const bool value = false; };\n        template<typename T, typename U, typename A, ets_key_usage_type C>\n        struct is_compatible_ets< T, enumerable_thread_specific<U,A,C> > { static const bool value = internal::is_same_type<T,U>::value; };\n\n#if __TBB_ETS_USE_CPP11\n        // A predicate that checks whether, for a variable 'foo' of type T, foo() is a valid expression\n        template <typename T>\n        class is_callable_no_args {\n        private:\n            typedef char yes[1];\n            typedef char no [2];\n\n            template<typename U> static yes& decide( decltype(declval<U>()())* );\n            template<typename U> static no&  decide(...);\n        public:\n            static const bool value = (sizeof(decide<T>(NULL)) == sizeof(yes));\n        };\n#endif\n\n    } // namespace internal\n    //! @endcond\n\n    //! The enumerable_thread_specific container\n    /** enumerable_thread_specific has the following properties:\n        - thread-local copies are lazily created, with default, exemplar or function initialization.\n        - thread-local copies do not move (during lifetime, and excepting clear()) so the address of a copy is invariant.\n        - the contained objects need not have operator=() defined if combine is not used.\n        - enumerable_thread_specific containers may be copy-constructed or assigned.\n        - thread-local copies can be managed by hash-table, or can be accessed via TLS storage for speed.\n        - outside of parallel contexts, the contents of all thread-local copies are accessible by iterator or using combine or combine_each methods\n\n    @par Segmented iterator\n        When the thread-local objects are containers with input_iterators defined, a segmented iterator may\n        be used to iterate over all the elements of all thread-local copies.\n\n    @par combine and combine_each\n        - Both methods are defined for enumerable_thread_specific.\n        - combine() requires the type T have operator=() defined.\n        - neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)\n        - Both are evaluated in serial context (the methods are assumed to be non-benign.)\n\n    @ingroup containers */\n    template <typename T,\n              typename Allocator=cache_aligned_allocator<T>,\n              ets_key_usage_type ETS_key_type=ets_no_key >\n    class enumerable_thread_specific: internal::ets_base<ETS_key_type> {\n\n        template<typename U, typename A, ets_key_usage_type C> friend class enumerable_thread_specific;\n\n        typedef internal::padded< internal::ets_element<T> > padded_element;\n\n        //! A generic range, used to create range objects from the iterators\n        template<typename I>\n        class generic_range_type: public blocked_range<I> {\n        public:\n            typedef T value_type;\n            typedef T& reference;\n            typedef const T& const_reference;\n            typedef I iterator;\n            typedef ptrdiff_t difference_type;\n            generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : blocked_range<I>(begin_,end_,grainsize_) {}\n            template<typename U>\n            generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {}\n            generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}\n        };\n\n        typedef typename Allocator::template rebind< padded_element >::other padded_allocator_type;\n        typedef tbb::concurrent_vector< padded_element, padded_allocator_type > internal_collection_type;\n\n        internal::callback_base<T> *my_construct_callback;\n\n        internal_collection_type my_locals;\n\n        // TODO: consider unifying the callback mechanism for all create_local* methods below\n        //   (likely non-compatible and requires interface version increase)\n        /*override*/ void* create_local() {\n            padded_element& lref = *my_locals.grow_by(1);\n            my_construct_callback->construct(lref.value());\n            return lref.value_committed();\n        }\n\n        static void* create_local_by_copy( internal::ets_base<ets_no_key>& base, void* p ) {\n            enumerable_thread_specific& ets = static_cast<enumerable_thread_specific&>(base);\n            padded_element& lref = *ets.my_locals.grow_by(1);\n            new(lref.value()) T(*static_cast<T*>(p));\n            return lref.value_committed();\n        }\n\n#if __TBB_ETS_USE_CPP11\n        static void* create_local_by_move( internal::ets_base<ets_no_key>& base, void* p ) {\n            enumerable_thread_specific& ets = static_cast<enumerable_thread_specific&>(base);\n            padded_element& lref = *ets.my_locals.grow_by(1);\n            new(lref.value()) T(std::move(*static_cast<T*>(p)));\n            return lref.value_committed();\n        }\n#endif\n\n        typedef typename Allocator::template rebind< uintptr_t >::other array_allocator_type;\n\n        // _size is in bytes\n        /*override*/ void* create_array(size_t _size) {\n            size_t nelements = (_size + sizeof(uintptr_t) -1) / sizeof(uintptr_t);\n            return array_allocator_type().allocate(nelements);\n        }\n\n        /*override*/ void free_array( void* _ptr, size_t _size) {\n            size_t nelements = (_size + sizeof(uintptr_t) -1) / sizeof(uintptr_t);\n            array_allocator_type().deallocate( reinterpret_cast<uintptr_t *>(_ptr),nelements);\n        }\n\n    public:\n\n        //! Basic types\n        typedef Allocator allocator_type;\n        typedef T value_type;\n        typedef T& reference;\n        typedef const T& const_reference;\n        typedef T* pointer;\n        typedef const T* const_pointer;\n        typedef typename internal_collection_type::size_type size_type;\n        typedef typename internal_collection_type::difference_type difference_type;\n\n        // Iterator types\n        typedef typename internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;\n        typedef typename internal::enumerable_thread_specific_iterator< internal_collection_type, const value_type > const_iterator;\n\n        // Parallel range types\n        typedef generic_range_type< iterator > range_type;\n        typedef generic_range_type< const_iterator > const_range_type;\n\n        //! Default constructor.  Each local instance of T is default constructed.\n        enumerable_thread_specific() : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_default<T> >::make(/*dummy argument*/0)\n        ){}\n\n        //! Constructor with initializer functor.  Each local instance of T is constructed by T(finit()).\n        template <typename Finit\n#if __TBB_ETS_USE_CPP11\n                  , typename = typename internal::enable_if<internal::is_callable_no_args<typename internal::strip<Finit>::type>::value>::type\n#endif\n        >\n        enumerable_thread_specific( Finit finit ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_finit<T,Finit> >::make( tbb::internal::move(finit) )\n        ){}\n\n        //! Constructor with exemplar. Each local instance of T is copy-constructed from the exemplar.\n        enumerable_thread_specific( const T& exemplar ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( exemplar )\n        ){}\n\n#if __TBB_ETS_USE_CPP11\n        enumerable_thread_specific( T&& exemplar ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( std::move(exemplar) )\n        ){}\n\n        //! Variadic constructor with initializer arguments.  Each local instance of T is constructed by T(args...)\n        template <typename P1, typename... P,\n                  typename = typename internal::enable_if<!internal::is_callable_no_args<typename internal::strip<P1>::type>::value\n                                                          && !internal::is_compatible_ets<T, typename internal::strip<P1>::type>::value\n                                                          && !internal::is_same_type<T, typename internal::strip<P1>::type>::value\n                                                         >::type>\n        enumerable_thread_specific( P1&& arg1, P&& ... args ) : my_construct_callback(\n            internal::callback_leaf<T,internal::construct_by_args<T,P1,P...> >::make( std::forward<P1>(arg1), std::forward<P>(args)... )\n        ){}\n#endif\n\n        //! Destructor\n        ~enumerable_thread_specific() {\n            if(my_construct_callback) my_construct_callback->destroy();\n            // Deallocate the hash table before overridden free_array() becomes inaccessible\n            this->internal::ets_base<ets_no_key>::table_clear();\n        }\n\n        //! returns reference to local, discarding exists\n        reference local() {\n            bool exists;\n            return local(exists);\n        }\n\n        //! Returns reference to calling thread's local copy, creating one if necessary\n        reference local(bool& exists)  {\n            void* ptr = this->table_lookup(exists);\n            return *(T*)ptr;\n        }\n\n        //! Get the number of local copies\n        size_type size() const { return my_locals.size(); }\n\n        //! true if there have been no local copies created\n        bool empty() const { return my_locals.empty(); }\n\n        //! begin iterator\n        iterator begin() { return iterator( my_locals, 0 ); }\n        //! end iterator\n        iterator end() { return iterator(my_locals, my_locals.size() ); }\n\n        //! begin const iterator\n        const_iterator begin() const { return const_iterator(my_locals, 0); }\n\n        //! end const iterator\n        const_iterator end() const { return const_iterator(my_locals, my_locals.size()); }\n\n        //! Get range for parallel algorithms\n        range_type range( size_t grainsize=1 ) { return range_type( begin(), end(), grainsize ); }\n\n        //! Get const range for parallel algorithms\n        const_range_type range( size_t grainsize=1 ) const { return const_range_type( begin(), end(), grainsize ); }\n\n        //! Destroys local copies\n        void clear() {\n            my_locals.clear();\n            this->table_clear();\n            // callback is not destroyed\n        }\n\n    private:\n\n        template<typename A2, ets_key_usage_type C2>\n        void internal_copy(const enumerable_thread_specific<T, A2, C2>& other) {\n#if __TBB_ETS_USE_CPP11 && TBB_USE_ASSERT\n            // this tests is_compatible_ets\n            __TBB_STATIC_ASSERT( (internal::is_compatible_ets<T, typename internal::strip<decltype(other)>::type>::value), \"is_compatible_ets fails\" );\n#endif\n            // Initialize my_construct_callback first, so that it is valid even if rest of this routine throws an exception.\n            my_construct_callback = other.my_construct_callback->clone();\n            __TBB_ASSERT(my_locals.size()==0,NULL);\n            my_locals.reserve(other.size());\n            this->table_elementwise_copy( other, create_local_by_copy );\n        }\n\n        void internal_swap(enumerable_thread_specific& other) {\n            using std::swap;\n            __TBB_ASSERT( this!=&other, NULL );\n            swap(my_construct_callback, other.my_construct_callback);\n            // concurrent_vector::swap() preserves storage space,\n            // so addresses to the vector kept in ETS hash table remain valid.\n            swap(my_locals, other.my_locals);\n            this->internal::ets_base<ETS_key_type>::table_swap(other);\n        }\n\n#if __TBB_ETS_USE_CPP11\n        template<typename A2, ets_key_usage_type C2>\n        void internal_move(enumerable_thread_specific<T, A2, C2>&& other) {\n#if TBB_USE_ASSERT\n            // this tests is_compatible_ets\n            __TBB_STATIC_ASSERT( (internal::is_compatible_ets<T, typename internal::strip<decltype(other)>::type>::value), \"is_compatible_ets fails\" );\n#endif\n            my_construct_callback = other.my_construct_callback;\n            other.my_construct_callback = NULL;\n            __TBB_ASSERT(my_locals.size()==0,NULL);\n            my_locals.reserve(other.size());\n            this->table_elementwise_copy( other, create_local_by_move );\n        }\n#endif\n\n    public:\n\n        enumerable_thread_specific( const enumerable_thread_specific& other )\n        : internal::ets_base<ETS_key_type>() /* prevents GCC warnings with -Wextra */\n        {\n            internal_copy(other);\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific( const enumerable_thread_specific<T, Alloc, Cachetype>& other )\n        {\n            internal_copy(other);\n        }\n\n#if __TBB_ETS_USE_CPP11\n        enumerable_thread_specific( enumerable_thread_specific&& other ) : my_construct_callback()\n        {\n            internal_swap(other);\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific( enumerable_thread_specific<T, Alloc, Cachetype>&& other ) : my_construct_callback()\n        {\n            internal_move(std::move(other));\n        }\n#endif\n\n        enumerable_thread_specific& operator=( const enumerable_thread_specific& other )\n        {\n            if( this != &other ) {\n                this->clear();\n                my_construct_callback->destroy();\n                internal_copy( other );\n            }\n            return *this;\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific& operator=( const enumerable_thread_specific<T, Alloc, Cachetype>& other )\n        {\n            __TBB_ASSERT( static_cast<void*>(this)!=static_cast<const void*>(&other), NULL ); // Objects of different types\n            this->clear();\n            my_construct_callback->destroy();\n            internal_copy(other);\n            return *this;\n        }\n\n#if __TBB_ETS_USE_CPP11\n        enumerable_thread_specific& operator=( enumerable_thread_specific&& other )\n        {\n            if( this != &other )\n                internal_swap(other);\n            return *this;\n        }\n\n        template<typename Alloc, ets_key_usage_type Cachetype>\n        enumerable_thread_specific& operator=( enumerable_thread_specific<T, Alloc, Cachetype>&& other )\n        {\n            __TBB_ASSERT( static_cast<void*>(this)!=static_cast<const void*>(&other), NULL ); // Objects of different types\n            this->clear();\n            my_construct_callback->destroy();\n            internal_move(std::move(other));\n            return *this;\n        }\n#endif\n\n        // combine_func_t has signature T(T,T) or T(const T&, const T&)\n        template <typename combine_func_t>\n        T combine(combine_func_t f_combine) {\n            if(begin() == end()) {\n                internal::ets_element<T> location;\n                my_construct_callback->construct(location.value());\n                return *location.value_committed();\n            }\n            const_iterator ci = begin();\n            T my_result = *ci;\n            while(++ci != end())\n                my_result = f_combine( my_result, *ci );\n            return my_result;\n        }\n\n        // combine_func_t takes T by value or by [const] reference, and returns nothing\n        template <typename combine_func_t>\n        void combine_each(combine_func_t f_combine) {\n            for(iterator ci = begin(); ci != end(); ++ci) {\n                f_combine( *ci );\n            }\n        }\n\n    }; // enumerable_thread_specific\n\n    template< typename Container >\n    class flattened2d {\n\n        // This intermediate typedef is to address issues with VC7.1 compilers\n        typedef typename Container::value_type conval_type;\n\n    public:\n\n        //! Basic types\n        typedef typename conval_type::size_type size_type;\n        typedef typename conval_type::difference_type difference_type;\n        typedef typename conval_type::allocator_type allocator_type;\n        typedef typename conval_type::value_type value_type;\n        typedef typename conval_type::reference reference;\n        typedef typename conval_type::const_reference const_reference;\n        typedef typename conval_type::pointer pointer;\n        typedef typename conval_type::const_pointer const_pointer;\n\n        typedef typename internal::segmented_iterator<Container, value_type> iterator;\n        typedef typename internal::segmented_iterator<Container, const value_type> const_iterator;\n\n        flattened2d( const Container &c, typename Container::const_iterator b, typename Container::const_iterator e ) :\n            my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }\n\n        flattened2d( const Container &c ) :\n            my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }\n\n        iterator begin() { return iterator(*my_container) = my_begin; }\n        iterator end() { return iterator(*my_container) = my_end; }\n        const_iterator begin() const { return const_iterator(*my_container) = my_begin; }\n        const_iterator end() const { return const_iterator(*my_container) = my_end; }\n\n        size_type size() const {\n            size_type tot_size = 0;\n            for(typename Container::const_iterator i = my_begin; i != my_end; ++i) {\n                tot_size += i->size();\n            }\n            return tot_size;\n        }\n\n    private:\n\n        Container *my_container;\n        typename Container::const_iterator my_begin;\n        typename Container::const_iterator my_end;\n\n    };\n\n    template <typename Container>\n    flattened2d<Container> flatten2d(const Container &c, const typename Container::const_iterator b, const typename Container::const_iterator e) {\n        return flattened2d<Container>(c, b, e);\n    }\n\n    template <typename Container>\n    flattened2d<Container> flatten2d(const Container &c) {\n        return flattened2d<Container>(c);\n    }\n\n} // interface6\n\nnamespace internal {\nusing interface6::internal::segmented_iterator;\n}\n\nusing interface6::enumerable_thread_specific;\nusing interface6::flattened2d;\nusing interface6::flatten2d;\n\n} // namespace tbb\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/flow_graph.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_flow_graph_H\n#define __TBB_flow_graph_H\n\n#include \"tbb_stddef.h\"\n#include \"atomic.h\"\n#include \"spin_mutex.h\"\n#include \"null_mutex.h\"\n#include \"spin_rw_mutex.h\"\n#include \"null_rw_mutex.h\"\n#include \"task.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"tbb_exception.h\"\n#include \"internal/_template_helpers.h\"\n#include \"internal/_aggregator_impl.h\"\n#include \"tbb_profiling.h\"\n\n#if __TBB_PREVIEW_ASYNC_NODE\n#include \"task_arena.h\"\n#endif\n\n#if TBB_DEPRECATED_FLOW_ENQUEUE\n#define FLOW_SPAWN(a) tbb::task::enqueue((a))\n#else\n#define FLOW_SPAWN(a) tbb::task::spawn((a))\n#endif\n\n// use the VC10 or gcc version of tuple if it is available.\n#if __TBB_CPP11_TUPLE_PRESENT\n    #include <tuple>\nnamespace tbb {\n    namespace flow {\n        using std::tuple;\n        using std::tuple_size;\n        using std::tuple_element;\n        using std::get;\n    }\n}\n#else\n    #include \"compat/tuple\"\n#endif\n\n#include<list>\n#include<queue>\n\n/** @file\n  \\brief The graph related classes and functions\n\n  There are some applications that best express dependencies as messages\n  passed between nodes in a graph.  These messages may contain data or\n  simply act as signals that a predecessors has completed. The graph\n  class and its associated node classes can be used to express such\n  applications.\n*/\n\nnamespace tbb {\nnamespace flow {\n\n//! An enumeration the provides the two most common concurrency levels: unlimited and serial\nenum concurrency { unlimited = 0, serial = 1 };\n\nnamespace interface8 {\n\nnamespace internal {\n    template<typename T, typename M> class successor_cache;\n    template<typename T, typename M> class broadcast_cache;\n    template<typename T, typename M> class round_robin_cache;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    template< typename C> class edge_container;\n#endif\n}\n\n//A generic null type\nstruct null_type {};\n\n//! An empty class used for messages that mean \"I'm done\"\nclass continue_msg {};\n\ntemplate< typename T > class sender;\ntemplate< typename T > class receiver;\nclass continue_receiver;\n\n//! Pure virtual template class that defines a sender of messages of type T\ntemplate< typename T >\nclass sender {\npublic:\n    //! The output type of this sender\n    typedef T output_type;\n\n    //! The successor type for this node\n    typedef receiver<T> successor_type;\n\n    virtual ~sender() {}\n\n    //! Add a new successor to this node\n    virtual bool register_successor( successor_type &r ) = 0;\n\n    //! Removes a successor from this node\n    virtual bool remove_successor( successor_type &r ) = 0;\n\n    //! Request an item from the sender\n    virtual bool try_get( T & ) { return false; }\n\n    //! Reserves an item in the sender\n    virtual bool try_reserve( T & ) { return false; }\n\n    //! Releases the reserved item\n    virtual bool try_release( ) { return false; }\n\n    //! Consumes the reserved item\n    virtual bool try_consume( ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    //! interface to record edges for traversal & deletion\n    typedef typename  internal::edge_container<successor_type> built_successors_type;\n    typedef typename  built_successors_type::edge_list_type successor_list_type;\n    virtual built_successors_type &built_successors()                   = 0;\n    virtual void    internal_add_built_successor( successor_type & )    = 0;\n    virtual void    internal_delete_built_successor( successor_type & ) = 0;\n    virtual void    copy_successors( successor_list_type &)             = 0;\n    virtual size_t  successor_count()                                   = 0;\n#endif\n};  // class sender<T>\n\ntemplate< typename T > class limiter_node;  // needed for resetting decrementer\ntemplate< typename R, typename B > class run_and_put_task;\n\nstatic tbb::task * const SUCCESSFULLY_ENQUEUED = (task *)-1;\n\n// flags to modify the behavior of the graph reset().  Can be combined.\nenum reset_flags {\n    rf_reset_protocol   = 0,\n    rf_reset_bodies     = 1<<0,  // delete the current node body, reset to a copy of the initial node body.\n    rf_clear_edges      = 1<<1   // delete edges\n};\n\n// enqueue left task if necessary.  Returns the non-enqueued task if there is one.\nstatic inline tbb::task *combine_tasks( tbb::task * left, tbb::task * right) {\n    // if no RHS task, don't change left.\n    if(right == NULL) return left;\n    // right != NULL\n    if(left == NULL) return right;\n    if(left == SUCCESSFULLY_ENQUEUED) return right;\n    // left contains a task\n    if(right != SUCCESSFULLY_ENQUEUED) {\n        // both are valid tasks\n        FLOW_SPAWN(*left);\n        return right;\n    }\n    return left;\n}\n\n//! Pure virtual template class that defines a receiver of messages of type T\ntemplate< typename T >\nclass receiver {\npublic:\n    //! The input type of this receiver\n    typedef T input_type;\n\n    //! The predecessor type for this node\n    typedef sender<T> predecessor_type;\n\n    //! Destructor\n    virtual ~receiver() {}\n\n    //! Put an item to the receiver\n    bool try_put( const T& t ) {\n        task *res = try_put_task(t);\n        if (!res) return false;\n        if (res != SUCCESSFULLY_ENQUEUED) FLOW_SPAWN(*res);\n        return true;\n    }\n\n    //! put item to successor; return task to run the successor if possible.\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    virtual task *try_put_task(const T& t) = 0;\npublic:\n\n    //! Add a predecessor to the node\n    virtual bool register_predecessor( predecessor_type & ) { return false; }\n\n    //! Remove a predecessor from the node\n    virtual bool remove_predecessor( predecessor_type & ) { return false; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename internal::edge_container<predecessor_type> built_predecessors_type;\n    typedef typename built_predecessors_type::edge_list_type predecessor_list_type;\n    virtual built_predecessors_type &built_predecessors()                  = 0;\n    virtual void   internal_add_built_predecessor( predecessor_type & )    = 0;\n    virtual void   internal_delete_built_predecessor( predecessor_type & ) = 0;\n    virtual void   copy_predecessors( predecessor_list_type & )            = 0;\n    virtual size_t predecessor_count()                                     = 0;\n#endif\n\nprotected:\n    //! put receiver back in initial state\n    template<typename U> friend class limiter_node;\n    virtual void reset_receiver(reset_flags f = rf_reset_protocol) = 0;\n\n    template<typename TT, typename M> friend class internal::successor_cache;\n    virtual bool is_continue_receiver() { return false; }\n\n#if __TBB_PREVIEW_OPENCL_NODE\n    template< typename, typename > friend class proxy_dependency_receiver;\n#endif /* __TBB_PREVIEW_OPENCL_NODE */\n}; // class receiver<T>\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n//* holder of edges both for caches and for those nodes which do not have predecessor caches.\n// C == receiver< ... > or sender< ... >, depending.\nnamespace internal {\ntemplate<typename C>\nclass edge_container {\n\npublic:\n    typedef std::list<C *, tbb::tbb_allocator<C *> > edge_list_type;\n\n    void add_edge( C &s) {\n        built_edges.push_back( &s );\n    }\n\n    void delete_edge( C &s) {\n        for ( typename edge_list_type::iterator i = built_edges.begin(); i != built_edges.end(); ++i ) {\n            if ( *i == &s )  {\n                (void)built_edges.erase(i);\n                return;  // only remove one predecessor per request\n            }\n        }\n    }\n\n    void copy_edges( edge_list_type &v) {\n        v = built_edges;\n    }\n\n    size_t edge_count() {\n        return (size_t)(built_edges.size());\n    }\n\n    void clear() {\n        built_edges.clear();\n    }\n\n    // methods remove the statement from all predecessors/successors liste in the edge\n    // container.\n    template< typename S > void sender_extract( S &s );\n    template< typename R > void receiver_extract( R &r );\n\nprivate:\n    edge_list_type built_edges;\n};  // class edge_container\n}  // namespace internal\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n//! Base class for receivers of completion messages\n/** These receivers automatically reset, but cannot be explicitly waited on */\nclass continue_receiver : public receiver< continue_msg > {\npublic:\n\n    //! The input type\n    typedef continue_msg input_type;\n\n    //! The predecessor type for this node\n    typedef sender< continue_msg > predecessor_type;\n\n    //! Constructor\n    continue_receiver( int number_of_predecessors = 0 ) {\n        my_predecessor_count = my_initial_predecessor_count = number_of_predecessors;\n        my_current_count = 0;\n    }\n\n    //! Copy constructor\n    continue_receiver( const continue_receiver& src ) : receiver<continue_msg>() {\n        my_predecessor_count = my_initial_predecessor_count = src.my_initial_predecessor_count;\n        my_current_count = 0;\n    }\n\n    //! Destructor\n    virtual ~continue_receiver() { }\n\n    //! Increments the trigger threshold\n    /* override */ bool register_predecessor( predecessor_type & ) {\n        spin_mutex::scoped_lock l(my_mutex);\n        ++my_predecessor_count;\n        return true;\n    }\n\n    //! Decrements the trigger threshold\n    /** Does not check to see if the removal of the predecessor now makes the current count\n        exceed the new threshold.  So removing a predecessor while the graph is active can cause\n        unexpected results. */\n    /* override */ bool remove_predecessor( predecessor_type & ) {\n        spin_mutex::scoped_lock l(my_mutex);\n        --my_predecessor_count;\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef internal::edge_container<predecessor_type> built_predecessors_type;\n    typedef built_predecessors_type::edge_list_type predecessor_list_type;\n    /*override*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; }\n\n    /*override*/ void internal_add_built_predecessor( predecessor_type &s) {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_built_predecessors.add_edge( s );\n    }\n\n    /*override*/ void internal_delete_built_predecessor( predecessor_type &s) {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_built_predecessors.delete_edge(s);\n    }\n\n    /*override*/ void copy_predecessors( predecessor_list_type &v) {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_built_predecessors.copy_edges(v);\n    }\n\n    /*override*/ size_t predecessor_count() {\n        spin_mutex::scoped_lock l(my_mutex);\n        return my_built_predecessors.edge_count();\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    // execute body is supposed to be too small to create a task for.\n    /* override */ task *try_put_task( const input_type & ) {\n        {\n            spin_mutex::scoped_lock l(my_mutex);\n            if ( ++my_current_count < my_predecessor_count )\n                return SUCCESSFULLY_ENQUEUED;\n            else\n                my_current_count = 0;\n        }\n        task * res = execute();\n        return res? res : SUCCESSFULLY_ENQUEUED;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    // continue_receiver must contain its own built_predecessors because it does\n    // not have a node_cache.\n    built_predecessors_type my_built_predecessors;\n#endif\n    spin_mutex my_mutex;\n    int my_predecessor_count;\n    int my_current_count;\n    int my_initial_predecessor_count;\n    // the friend declaration in the base class did not eliminate the \"protected class\"\n    // error in gcc 4.1.2\n    template<typename U> friend class limiter_node;\n\n    /*override*/void reset_receiver( reset_flags f ) {\n        my_current_count = 0;\n        if (f & rf_clear_edges) {\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            my_built_predecessors.clear();\n#endif\n            my_predecessor_count = my_initial_predecessor_count;\n        }\n    }\n\n    //! Does whatever should happen when the threshold is reached\n    /** This should be very fast or else spawn a task.  This is\n        called while the sender is blocked in the try_put(). */\n    virtual task * execute() = 0;\n    template<typename TT, typename M> friend class internal::successor_cache;\n    /*override*/ bool is_continue_receiver() { return true; }\n\n}; // class continue_receiver\n}  // interface8\n\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n    template <typename K, typename T>\n    K key_from_message( const T &t ) {\n        return t.key();\n    }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n\n    using interface8::sender;\n    using interface8::receiver;\n    using interface8::continue_receiver;\n}  // flow\n}  // tbb\n\n#include \"internal/_flow_graph_trace_impl.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n\nnamespace tbb {\nnamespace flow {\nnamespace interface8 {\n\n#include \"internal/_flow_graph_impl.h\"\n#include \"internal/_flow_graph_types_impl.h\"\nusing namespace internal::graph_policy_namespace;\n\nclass graph;\nclass graph_node;\n\ntemplate <typename GraphContainerType, typename GraphNodeType>\nclass graph_iterator {\n    friend class graph;\n    friend class graph_node;\npublic:\n    typedef size_t size_type;\n    typedef GraphNodeType value_type;\n    typedef GraphNodeType* pointer;\n    typedef GraphNodeType& reference;\n    typedef const GraphNodeType& const_reference;\n    typedef std::forward_iterator_tag iterator_category;\n\n    //! Default constructor\n    graph_iterator() : my_graph(NULL), current_node(NULL) {}\n\n    //! Copy constructor\n    graph_iterator(const graph_iterator& other) :\n        my_graph(other.my_graph), current_node(other.current_node)\n    {}\n\n    //! Assignment\n    graph_iterator& operator=(const graph_iterator& other) {\n        if (this != &other) {\n            my_graph = other.my_graph;\n            current_node = other.current_node;\n        }\n        return *this;\n    }\n\n    //! Dereference\n    reference operator*() const;\n\n    //! Dereference\n    pointer operator->() const;\n\n    //! Equality\n    bool operator==(const graph_iterator& other) const {\n        return ((my_graph == other.my_graph) && (current_node == other.current_node));\n    }\n\n    //! Inequality\n    bool operator!=(const graph_iterator& other) const { return !(operator==(other)); }\n\n    //! Pre-increment\n    graph_iterator& operator++() {\n        internal_forward();\n        return *this;\n    }\n\n    //! Post-increment\n    graph_iterator operator++(int) {\n        graph_iterator result = *this;\n        operator++();\n        return result;\n    }\n\nprivate:\n    // the graph over which we are iterating\n    GraphContainerType *my_graph;\n    // pointer into my_graph's my_nodes list\n    pointer current_node;\n\n    //! Private initializing constructor for begin() and end() iterators\n    graph_iterator(GraphContainerType *g, bool begin);\n    void internal_forward();\n};  // class graph_iterator\n\n//! The graph class\n/** This class serves as a handle to the graph */\nclass graph : tbb::internal::no_copy {\n    friend class graph_node;\n\n    template< typename Body >\n    class run_task : public task {\n    public:\n        run_task( Body& body ) : my_body(body) {}\n        task *execute() {\n            my_body();\n            return NULL;\n        }\n    private:\n        Body my_body;\n    };\n\n    template< typename Receiver, typename Body >\n    class run_and_put_task : public task {\n    public:\n        run_and_put_task( Receiver &r, Body& body ) : my_receiver(r), my_body(body) {}\n        task *execute() {\n            task *res = my_receiver.try_put_task( my_body() );\n            if (res == SUCCESSFULLY_ENQUEUED) res = NULL;\n            return res;\n        }\n    private:\n        Receiver &my_receiver;\n        Body my_body;\n    };\n    typedef std::list<task *> task_list_type;\n\n#if __TBB_PREVIEW_ASYNC_NODE\n    class wait_functor {\n        task* graph_root_task;\n    public:\n        wait_functor( task* t ) : graph_root_task(t) {}\n        void operator()() const { graph_root_task->wait_for_all(); }\n    };\n\n    void prepare_task_arena( bool reinit = false ) {\n        if (reinit) {\n            __TBB_ASSERT( my_task_arena, NULL );\n            my_task_arena->terminate();\n            my_task_arena->initialize(tbb::task_arena::attach());\n        } else {\n            my_task_arena = new tbb::task_arena(tbb::task_arena::attach());\n        }\n        if (!my_task_arena->is_active()) // failed to attach\n            my_task_arena->initialize(); // create a new, default-initialized arena\n        __TBB_ASSERT(my_task_arena->is_active(), NULL);\n    }\n#endif\n\npublic:\n    //! Constructs a graph with isolated task_group_context\n    graph() : my_nodes(NULL), my_nodes_last(NULL) {\n#if __TBB_PREVIEW_ASYNC_NODE\n        prepare_task_arena();\n#endif\n        own_context = true;\n        cancelled = false;\n        caught_exception = false;\n        my_context = new task_group_context();\n        my_root_task = ( new ( task::allocate_root(*my_context) ) empty_task );\n        my_root_task->set_ref_count(1);\n        tbb::internal::fgt_graph( this );\n        my_is_active = true;\n    }\n\n    //! Constructs a graph with use_this_context as context\n    explicit graph(task_group_context& use_this_context) :\n      my_context(&use_this_context), my_nodes(NULL), my_nodes_last(NULL) {\n#if __TBB_PREVIEW_ASYNC_NODE\n        prepare_task_arena();\n#endif\n        own_context = false;\n        my_root_task = ( new ( task::allocate_root(*my_context) ) empty_task );\n        my_root_task->set_ref_count(1);\n        tbb::internal::fgt_graph( this );\n        my_is_active = true;\n    }\n\n    //! Destroys the graph.\n    /** Calls wait_for_all, then destroys the root task and context. */\n    ~graph() {\n        wait_for_all();\n        my_root_task->set_ref_count(0);\n        task::destroy( *my_root_task );\n        if (own_context) delete my_context;\n#if __TBB_PREVIEW_ASYNC_NODE\n        delete my_task_arena;\n#endif\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    void set_name( const char *name ) {\n        tbb::internal::fgt_graph_desc( this, name );\n    }\n#endif\n\n    //! Used to register that an external entity may still interact with the graph.\n    /** The graph will not return from wait_for_all until a matching number of decrement_wait_count calls\n        is made. */\n    void increment_wait_count() {\n        if (my_root_task)\n            my_root_task->increment_ref_count();\n    }\n\n    //! Deregisters an external entity that may have interacted with the graph.\n    /** The graph will not return from wait_for_all until all the number of decrement_wait_count calls\n        matches the number of increment_wait_count calls. */\n    void decrement_wait_count() {\n        if (my_root_task)\n            my_root_task->decrement_ref_count();\n    }\n\n    //! Spawns a task that runs a body and puts its output to a specific receiver\n    /** The task is spawned as a child of the graph. This is useful for running tasks\n        that need to block a wait_for_all() on the graph.  For example a one-off source. */\n    template< typename Receiver, typename Body >\n        void run( Receiver &r, Body body ) {\n            if(is_active()) {\n                FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *root_task() ) )\n                   run_and_put_task< Receiver, Body >( r, body )) );\n            }\n    }\n\n    //! Spawns a task that runs a function object\n    /** The task is spawned as a child of the graph. This is useful for running tasks\n        that need to block a wait_for_all() on the graph. For example a one-off source. */\n    template< typename Body >\n    void run( Body body ) {\n        if(is_active()) {\n            FLOW_SPAWN( * new ( task::allocate_additional_child_of( *root_task() ) ) run_task< Body >( body ) );\n        }\n    }\n\n    //! Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls.\n    /** The waiting thread will go off and steal work while it is block in the wait_for_all. */\n    void wait_for_all() {\n        cancelled = false;\n        caught_exception = false;\n        if (my_root_task) {\n#if TBB_USE_EXCEPTIONS\n            try {\n#endif\n#if __TBB_PREVIEW_ASYNC_NODE\n                my_task_arena->execute(wait_functor(my_root_task));\n#else\n                my_root_task->wait_for_all();\n#endif\n                cancelled = my_context->is_group_execution_cancelled();\n#if TBB_USE_EXCEPTIONS\n            }\n            catch(...) {\n                my_root_task->set_ref_count(1);\n                my_context->reset();\n                caught_exception = true;\n                cancelled = true;\n                throw;\n            }\n#endif\n            // TODO: the \"if\" condition below is just a work-around to support the concurrent wait\n            // mode. The cancelation and exception mechanisms are still broken in this mode.\n            // Consider using task group not to re-implement the same functionality.\n            if ( !(my_context->traits() & task_group_context::concurrent_wait) ) {\n                my_context->reset();  // consistent with behavior in catch()\n                my_root_task->set_ref_count(1);\n            }\n        }\n    }\n\n    //! Returns the root task of the graph\n    task * root_task() {\n        return my_root_task;\n    }\n\n    void set_active(bool a = true) {\n       my_is_active = a;\n    }\n\n    bool is_active() {\n       return my_is_active;\n    }\n\n    void add_task_to_reset_list(task *tp) {\n        my_reset_task_list.push_back(tp);\n    }\n\n    // ITERATORS\n    template<typename C, typename N>\n    friend class graph_iterator;\n\n    // Graph iterator typedefs\n    typedef graph_iterator<graph,graph_node> iterator;\n    typedef graph_iterator<const graph,const graph_node> const_iterator;\n\n    // Graph iterator constructors\n    //! start iterator\n    iterator begin() { return iterator(this, true); }\n    //! end iterator\n    iterator end() { return iterator(this, false); }\n     //! start const iterator\n    const_iterator begin() const { return const_iterator(this, true); }\n    //! end const iterator\n    const_iterator end() const { return const_iterator(this, false); }\n    //! start const iterator\n    const_iterator cbegin() const { return const_iterator(this, true); }\n    //! end const iterator\n    const_iterator cend() const { return const_iterator(this, false); }\n\n    //! return status of graph execution\n    bool is_cancelled() { return cancelled; }\n    bool exception_thrown() { return caught_exception; }\n\n    // thread-unsafe state reset.\n    void reset(reset_flags f = rf_reset_protocol);\n\nprivate:\n    task *my_root_task;\n    task_group_context *my_context;\n    bool own_context;\n    bool cancelled;\n    bool caught_exception;\n    bool my_is_active;\n    task_list_type my_reset_task_list;\n\n    graph_node *my_nodes, *my_nodes_last;\n\n    spin_mutex nodelist_mutex;\n    void register_node(graph_node *n);\n    void remove_node(graph_node *n);\n\n#if __TBB_PREVIEW_ASYNC_NODE\n    template < typename Input, typename Output, typename Policy, typename Allocator >\n    friend class async_node;\n    task_arena* my_task_arena;\n#endif\n};  // class graph\n\ntemplate <typename C, typename N>\ngraph_iterator<C,N>::graph_iterator(C *g, bool begin) : my_graph(g), current_node(NULL)\n{\n    if (begin) current_node = my_graph->my_nodes;\n    //else it is an end iterator by default\n}\n\ntemplate <typename C, typename N>\ntypename graph_iterator<C,N>::reference graph_iterator<C,N>::operator*() const {\n    __TBB_ASSERT(current_node, \"graph_iterator at end\");\n    return *operator->();\n}\n\ntemplate <typename C, typename N>\ntypename graph_iterator<C,N>::pointer graph_iterator<C,N>::operator->() const {\n    return current_node;\n}\n\n\ntemplate <typename C, typename N>\nvoid graph_iterator<C,N>::internal_forward() {\n    if (current_node) current_node = current_node->next;\n}\n\n//! The base of all graph nodes.\nclass graph_node : tbb::internal::no_assign {\n    friend class graph;\n    template<typename C, typename N>\n    friend class graph_iterator;\nprotected:\n    graph& my_graph;\n    graph_node *next, *prev;\npublic:\n    graph_node(graph& g) : my_graph(g) {\n        my_graph.register_node(this);\n    }\n    virtual ~graph_node() {\n        my_graph.remove_node(this);\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    virtual void set_name( const char *name ) = 0;\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    virtual void extract( ) = 0;\n#endif\n\nprotected:\n    // performs the reset on an individual node.\n    virtual void reset_node(reset_flags f=rf_reset_protocol) = 0;\n};  // class graph_node\n\ninline void graph::register_node(graph_node *n) {\n    n->next = NULL;\n    {\n        spin_mutex::scoped_lock lock(nodelist_mutex);\n        n->prev = my_nodes_last;\n        if (my_nodes_last) my_nodes_last->next = n;\n        my_nodes_last = n;\n        if (!my_nodes) my_nodes = n;\n    }\n}\n\ninline void graph::remove_node(graph_node *n) {\n    {\n        spin_mutex::scoped_lock lock(nodelist_mutex);\n        __TBB_ASSERT(my_nodes && my_nodes_last, \"graph::remove_node: Error: no registered nodes\");\n        if (n->prev) n->prev->next = n->next;\n        if (n->next) n->next->prev = n->prev;\n        if (my_nodes_last == n) my_nodes_last = n->prev;\n        if (my_nodes == n) my_nodes = n->next;\n    }\n    n->prev = n->next = NULL;\n}\n\ninline void graph::reset(  reset_flags f ) {\n    // reset context\n    set_active(false);\n    if(my_context) my_context->reset();\n    cancelled = false;\n    caught_exception = false;\n    // reset all the nodes comprising the graph\n    for(iterator ii = begin(); ii != end(); ++ii) {\n        graph_node *my_p = &(*ii);\n        my_p->reset_node(f);\n    }\n#if __TBB_PREVIEW_ASYNC_NODE\n    // Reattach the arena. Might be useful to run the graph in a particular task_arena\n    // while not limiting graph lifetime to a single task_arena::execute() call.\n    prepare_task_arena( /*reinit=*/true );\n#endif\n    set_active(true);\n    // now spawn the tasks necessary to start the graph\n    for(task_list_type::iterator rti = my_reset_task_list.begin(); rti != my_reset_task_list.end(); ++rti) {\n        FLOW_SPAWN(*(*rti));\n    }\n    my_reset_task_list.clear();\n}\n\n\n#include \"internal/_flow_graph_node_impl.h\"\n\n//! An executable node that acts as a source, i.e. it has no predecessors\ntemplate < typename Output >\nclass source_node : public graph_node, public sender< Output > {\nprotected:\n    using graph_node::my_graph;\npublic:\n    //! The type of the output message, which is complete\n    typedef Output output_type;\n\n    //! The type of successors of this node\n    typedef receiver< Output > successor_type;\n\n    //Source node has no input type\n    typedef null_type input_type;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename sender<output_type>::built_successors_type built_successors_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    //! Constructor for a node with a successor\n    template< typename Body >\n    source_node( graph &g, Body body, bool is_active = true )\n        : graph_node(g), my_active(is_active), init_my_active(is_active),\n        my_body( new internal::source_body_leaf< output_type, Body>(body) ),\n        my_init_body( new internal::source_body_leaf< output_type, Body>(body) ),\n        my_reserved(false), my_has_cached_item(false)\n    {\n        my_successors.set_owner(this);\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_SOURCE_NODE, &this->my_graph,\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! Copy constructor\n    source_node( const source_node& src ) :\n        graph_node(src.my_graph), sender<Output>(),\n        my_active(src.init_my_active),\n        init_my_active(src.init_my_active), my_body( src.my_init_body->clone() ), my_init_body(src.my_init_body->clone() ),\n        my_reserved(false), my_has_cached_item(false)\n    {\n        my_successors.set_owner(this);\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_SOURCE_NODE, &this->my_graph,\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! The destructor\n    ~source_node() { delete my_body; delete my_init_body; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //! Add a new successor to this node\n    /* override */ bool register_successor( successor_type &r ) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.register_successor(r);\n        if ( my_active )\n            spawn_put();\n        return true;\n    }\n\n    //! Removes a successor from this node\n    /* override */ bool remove_successor( successor_type &r ) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.remove_successor(r);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\n    /*override*/ built_successors_type &built_successors() { return my_successors.built_successors(); }\n\n    /*override*/void internal_add_built_successor( successor_type &r) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.internal_add_built_successor(r);\n    }\n\n    /*override*/void internal_delete_built_successor( successor_type &r) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_successors.internal_delete_built_successor(r);\n    }\n\n    /*override*/size_t successor_count() {\n        spin_mutex::scoped_lock lock(my_mutex);\n        return my_successors.successor_count();\n    }\n\n    /*override*/void copy_successors(successor_list_type &v) {\n        spin_mutex::scoped_lock l(my_mutex);\n        my_successors.copy_successors(v);\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    //! Request an item from the node\n    /*override */ bool try_get( output_type &v ) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        if ( my_reserved )\n            return false;\n\n        if ( my_has_cached_item ) {\n            v = my_cached_item;\n            my_has_cached_item = false;\n            return true;\n        }\n        // we've been asked to provide an item, but we have none.  enqueue a task to\n        // provide one.\n        spawn_put();\n        return false;\n    }\n\n    //! Reserves an item.\n    /* override */ bool try_reserve( output_type &v ) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        if ( my_reserved ) {\n            return false;\n        }\n\n        if ( my_has_cached_item ) {\n            v = my_cached_item;\n            my_reserved = true;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    //! Release a reserved item.\n    /** true = item has been released and so remains in sender, dest must request or reserve future items */\n    /* override */ bool try_release( ) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        __TBB_ASSERT( my_reserved && my_has_cached_item, \"releasing non-existent reservation\" );\n        my_reserved = false;\n        if(!my_successors.empty())\n            spawn_put();\n        return true;\n    }\n\n    //! Consumes a reserved item\n    /* override */ bool try_consume( ) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        __TBB_ASSERT( my_reserved && my_has_cached_item, \"consuming non-existent reservation\" );\n        my_reserved = false;\n        my_has_cached_item = false;\n        if ( !my_successors.empty() ) {\n            spawn_put();\n        }\n        return true;\n    }\n\n    //! Activates a node that was created in the inactive state\n    void activate() {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_active = true;\n        if ( !my_successors.empty() )\n            spawn_put();\n    }\n\n    template<typename Body>\n    Body copy_function_object() {\n        internal::source_body<output_type> &body_ref = *this->my_body;\n        return dynamic_cast< internal::source_body_leaf<output_type, Body> & >(body_ref).get_body();\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    /*override*/void extract( ) {\n        my_successors.built_successors().sender_extract(*this);   // removes \"my_owner\" == this from each successor\n        my_active = init_my_active;\n        my_reserved = false;\n        if(my_has_cached_item) my_has_cached_item = false;\n    }\n#endif\n\nprotected:\n\n    //! resets the source_node to its initial state\n    /*override*/void reset_node( reset_flags f) {\n        my_active = init_my_active;\n        my_reserved =false;\n        if(my_has_cached_item) {\n            my_has_cached_item = false;\n        }\n        if(f & rf_clear_edges) my_successors.clear();\n        if(f & rf_reset_bodies) {\n            internal::source_body<output_type> *tmp = my_init_body->clone();\n            delete my_body;\n            my_body = tmp;\n        }\n        if(my_active)\n            this->my_graph.add_task_to_reset_list(create_put_task());\n    }\n\nprivate:\n    spin_mutex my_mutex;\n    bool my_active;\n    bool init_my_active;\n    internal::source_body<output_type> *my_body;\n    internal::source_body<output_type> *my_init_body;\n    internal::broadcast_cache< output_type > my_successors;\n    bool my_reserved;\n    bool my_has_cached_item;\n    output_type my_cached_item;\n\n    // used by apply_body_bypass, can invoke body of node.\n    bool try_reserve_apply_body(output_type &v) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        if ( my_reserved ) {\n            return false;\n        }\n        if ( !my_has_cached_item ) {\n            tbb::internal::fgt_begin_body( my_body );\n            bool r = (*my_body)(my_cached_item);\n            tbb::internal::fgt_end_body( my_body );\n            if (r) {\n                my_has_cached_item = true;\n            }\n        }\n        if ( my_has_cached_item ) {\n            v = my_cached_item;\n            my_reserved = true;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    // when resetting, and if the source_node was created with my_active == true, then\n    // when we reset the node we must store a task to run the node, and spawn it only\n    // after the reset is complete and is_active() is again true.  This is why we don't\n    // test for is_active() here.\n    task* create_put_task() {\n        return ( new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                        internal:: source_task_bypass < source_node< output_type > >( *this ) );\n    }\n\n    //! Spawns a task that applies the body\n    /* override */ void spawn_put( ) {\n        if(this->my_graph.is_active()) {\n            FLOW_SPAWN( *create_put_task());\n        }\n    }\n\n    friend class internal::source_task_bypass< source_node< output_type > >;\n    //! Applies the body.  Returning SUCCESSFULLY_ENQUEUED okay; forward_task_bypass will handle it.\n    /* override */ task * apply_body_bypass( ) {\n        output_type v;\n        if ( !try_reserve_apply_body(v) )\n            return NULL;\n\n        task *last_task = my_successors.try_put_task(v);\n        if ( last_task )\n            try_consume();\n        else\n            try_release();\n        return last_task;\n    }\n};  // class source_node\n\ntemplate<typename T>\nstruct allocate_buffer {\n    static const bool value = false;\n};\n\ntemplate<>\nstruct allocate_buffer<queueing> {\n    static const bool value = true;\n};\n\n//! Implements a function node that supports Input -> Output\ntemplate < typename Input, typename Output = continue_msg, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >\nclass function_node : public graph_node, public internal::function_input<Input,Output,Allocator>, public internal::function_output<Output> {\npublic:\n    typedef Input input_type;\n    typedef Output output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n    typedef internal::function_input<input_type,output_type,Allocator> fInput_type;\n    typedef internal::function_input_queue<input_type, Allocator> input_queue_type;\n    typedef internal::function_output<output_type> fOutput_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename fInput_type::predecessor_list_type predecessor_list_type;\n    typedef typename fOutput_type::successor_list_type successor_list_type;\n#endif\n    using fInput_type::my_predecessors;\n\n    //! Constructor\n    // input_queue_type is allocated here, but destroyed in the function_input_base.\n    // TODO: pass the graph_buffer_policy to the function_input_base so it can all\n    // be done in one place.  This would be an interface-breaking change.\n    template< typename Body >\n    function_node( graph &g, size_t concurrency, Body body ) :\n        graph_node(g), fInput_type(g, concurrency, body, allocate_buffer<Policy>::value ?\n               new input_queue_type( ) : NULL ) {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->graph_node::my_graph,\n                static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! Copy constructor\n    function_node( const function_node& src ) :\n        graph_node(src.graph_node::my_graph),\n        fInput_type(src, allocate_buffer<Policy>::value ? new input_queue_type : NULL),\n        fOutput_type() {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->graph_node::my_graph,\n                static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    /*override*/void extract( ) {\n        my_predecessors.built_predecessors().receiver_extract(*this);\n        successors().built_successors().sender_extract(*this);\n    }\n#endif\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    using fInput_type::try_put_task;\n\n    /* override */ internal::broadcast_cache<output_type> &successors () { return fOutput_type::my_successors; }\n\n    // override of graph_node's reset.\n    /*override*/void reset_node(reset_flags f) {\n        fInput_type::reset_function_input(f);\n        // TODO: use clear() instead.\n        if(f & rf_clear_edges) {\n            successors().clear();\n            my_predecessors.clear();\n        }\n        __TBB_ASSERT(!(f & rf_clear_edges) || successors().empty(), \"function_node successors not empty\");\n        __TBB_ASSERT(this->my_predecessors.empty(), \"function_node predecessors not empty\");\n    }\n\n};  // class function_node\n\n\n//! implements a function node that supports Input -> (set of outputs)\n// Output is a tuple of output types.\ntemplate < typename Input, typename Output, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >\nclass multifunction_node :\n    public graph_node,\n    public internal::multifunction_input\n    <\n        Input,\n        typename internal::wrap_tuple_elements<\n            tbb::flow::tuple_size<Output>::value,  // #elements in tuple\n            internal::multifunction_output,  // wrap this around each element\n            Output // the tuple providing the types\n        >::type,\n        Allocator\n    > {\nprotected:\n    using graph_node::my_graph;\n    static const int N = tbb::flow::tuple_size<Output>::value;\npublic:\n    typedef Input input_type;\n    typedef null_type output_type;\n    typedef typename internal::wrap_tuple_elements<N,internal::multifunction_output, Output>::type output_ports_type;\n    typedef internal::multifunction_input<input_type, output_ports_type, Allocator> fInput_type;\n    typedef internal::function_input_queue<input_type, Allocator> input_queue_type;\nprivate:\n    typedef typename internal::multifunction_input<input_type, output_ports_type, Allocator> base_type;\n    using fInput_type::my_predecessors;\npublic:\n    template<typename Body>\n    multifunction_node( graph &g, size_t concurrency, Body body ) :\n        graph_node(g), base_type(g,concurrency, body,  allocate_buffer<Policy>::value ? new input_queue_type : NULL) {\n        tbb::internal::fgt_multioutput_node_with_body<N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,\n                &this->graph_node::my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n    multifunction_node( const multifunction_node &other) :\n        graph_node(other.graph_node::my_graph), base_type(other,  allocate_buffer<Policy>::value ? new input_queue_type : NULL) {\n        tbb::internal::fgt_multioutput_node_with_body<N>( tbb::internal::FLOW_MULTIFUNCTION_NODE,\n                &this->graph_node::my_graph, static_cast<receiver<input_type> *>(this),\n                this->output_ports(), this->my_body );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_multioutput_node_desc( this, name );\n    }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    void extract( ) {\n        my_predecessors.built_predecessors().receiver_extract(*this);\n        base_type::extract();\n    }\n#endif\n    // all the guts are in multifunction_input...\nprotected:\n    /*override*/void reset_node(reset_flags f) { base_type::reset(f); }\n};  // multifunction_node\n\n//! split_node: accepts a tuple as input, forwards each element of the tuple to its\n//  successors.  The node has unlimited concurrency, so though it is marked as\n//  \"rejecting\" it does not reject inputs.\ntemplate<typename TupleType, typename Allocator=cache_aligned_allocator<TupleType> >\nclass split_node : public multifunction_node<TupleType, TupleType, rejecting, Allocator> {\n    static const int N = tbb::flow::tuple_size<TupleType>::value;\n    typedef multifunction_node<TupleType,TupleType,rejecting,Allocator> base_type;\npublic:\n    typedef typename base_type::output_ports_type output_ports_type;\n    typedef typename base_type::output_type output_type;\nprivate:\n    struct splitting_body {\n        void operator()(const TupleType& t, output_ports_type &p) {\n            internal::emit_element<N>::emit_this(t, p);\n        }\n    };\npublic:\n    typedef TupleType input_type;\n    typedef Allocator allocator_type;\n    split_node(graph &g) : base_type(g, unlimited, splitting_body()) {\n        tbb::internal::fgt_multioutput_node<N>( tbb::internal::FLOW_SPLIT_NODE, &this->graph_node::my_graph,\n                                                          static_cast<receiver<input_type> *>(this), this->output_ports() );\n    }\n\n    split_node( const split_node & other) : base_type(other) {\n        tbb::internal::fgt_multioutput_node<N>( tbb::internal::FLOW_SPLIT_NODE, &this->graph_node::my_graph,\n                                                          static_cast<receiver<input_type> *>(this), this->output_ports() );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_multioutput_node_desc( this, name );\n    }\n#endif\n\n};\n\n//! Implements an executable node that supports continue_msg -> Output\ntemplate <typename Output>\nclass continue_node : public graph_node, public internal::continue_input<Output>, public internal::function_output<Output> {\nprotected:\n    using graph_node::my_graph;\npublic:\n    typedef continue_msg input_type;\n    typedef Output output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n    typedef internal::continue_input<Output> fInput_type;\n    typedef internal::function_output<output_type> fOutput_type;\n\n    //! Constructor for executable node with continue_msg -> Output\n    template <typename Body >\n    continue_node( graph &g, Body body ) :\n        graph_node(g), internal::continue_input<output_type>( g, body ) {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,\n                                           static_cast<receiver<input_type> *>(this),\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n\n    //! Constructor for executable node with continue_msg -> Output\n    template <typename Body >\n    continue_node( graph &g, int number_of_predecessors, Body body ) :\n        graph_node(g), internal::continue_input<output_type>( g, number_of_predecessors, body ) {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,\n                                           static_cast<receiver<input_type> *>(this),\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n    //! Copy constructor\n    continue_node( const continue_node& src ) :\n        graph_node(src.graph_node::my_graph), internal::continue_input<output_type>(src),\n        internal::function_output<Output>() {\n        tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph,\n                                           static_cast<receiver<input_type> *>(this),\n                                           static_cast<sender<output_type> *>(this), this->my_body );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    /*override graph_node*/ void extract() {\n        fInput_type::my_built_predecessors.receiver_extract(*this);\n        successors().built_successors().sender_extract(*this);\n    }\n#endif\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    using fInput_type::try_put_task;\n    /* override */ internal::broadcast_cache<output_type> &successors () { return fOutput_type::my_successors; }\n\n    /*override*/void reset_node(reset_flags f) {\n        fInput_type::reset_receiver(f);\n        if(f & rf_clear_edges)successors().clear();\n        __TBB_ASSERT(!(f & rf_clear_edges) || successors().empty(), \"continue_node not reset\");\n    }\n\n};  // continue_node\n\ntemplate< typename T >\nclass overwrite_node : public graph_node, public receiver<T>, public sender<T> {\nprotected:\n    using graph_node::my_graph;\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n    typedef typename sender<output_type>::built_successors_type built_successors_type;\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    overwrite_node(graph &g) : graph_node(g), my_buffer_is_valid(false) {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_OVERWRITE_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    // Copy constructor; doesn't take anything from src; default won't work\n    overwrite_node( const overwrite_node& src ) :\n        graph_node(src.my_graph), receiver<T>(), sender<T>(), my_buffer_is_valid(false)\n    {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_OVERWRITE_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    ~overwrite_node() {}\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    /* override */ bool register_successor( successor_type &s ) {\n        spin_mutex::scoped_lock l( my_mutex );\n        if (my_buffer_is_valid && this->my_graph.is_active()) {\n            // We have a valid value that must be forwarded immediately.\n            if ( s.try_put( my_buffer ) || !s.register_predecessor( *this  ) ) {\n                // We add the successor: it accepted our put or it rejected it but won't let us become a predecessor\n                my_successors.register_successor( s );\n            } else {\n                // We don't add the successor: it rejected our put and we became its predecessor instead\n                return false;\n            }\n        } else {\n            // No valid value yet, just add as successor\n            my_successors.register_successor( s );\n        }\n        return true;\n    }\n\n    /* override */ bool remove_successor( successor_type &s ) {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.remove_successor(s);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    /*override*/built_predecessors_type &built_predecessors() { return my_built_predecessors; }\n    /*override*/built_successors_type   &built_successors()   { return my_successors.built_successors(); }\n\n    /*override*/void internal_add_built_successor( successor_type &s) {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.internal_add_built_successor(s);\n    }\n\n    /*override*/void internal_delete_built_successor( successor_type &s) {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.internal_delete_built_successor(s);\n    }\n\n    /*override*/size_t successor_count() {\n        spin_mutex::scoped_lock l( my_mutex );\n        return my_successors.successor_count();\n    }\n\n    /*override*/ void copy_successors(successor_list_type &v) {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_successors.copy_successors(v);\n    }\n\n    /*override*/ void internal_add_built_predecessor( predecessor_type &p) {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_built_predecessors.add_edge(p);\n    }\n\n    /*override*/ void internal_delete_built_predecessor( predecessor_type &p) {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_built_predecessors.delete_edge(p);\n    }\n\n    /*override*/size_t predecessor_count() {\n        spin_mutex::scoped_lock l( my_mutex );\n        return my_built_predecessors.edge_count();\n    }\n\n    /*override*/void copy_predecessors(predecessor_list_type &v) {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_built_predecessors.copy_edges(v);\n    }\n\n    /*override*/ void extract() {\n        my_buffer_is_valid = false;\n        built_successors().sender_extract(*this);\n        built_predecessors().receiver_extract(*this);\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    /* override */ bool try_get( input_type &v ) {\n        spin_mutex::scoped_lock l( my_mutex );\n        if ( my_buffer_is_valid ) {\n            v = my_buffer;\n            return true;\n        }\n        return false;\n    }\n\n    bool is_valid() {\n       spin_mutex::scoped_lock l( my_mutex );\n       return my_buffer_is_valid;\n    }\n\n    void clear() {\n       spin_mutex::scoped_lock l( my_mutex );\n       my_buffer_is_valid = false;\n    }\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    /* override */ task * try_put_task( const input_type &v ) {\n        spin_mutex::scoped_lock l( my_mutex );\n        my_buffer = v;\n        my_buffer_is_valid = true;\n        task * rtask = my_successors.try_put_task(v);\n        if (!rtask) rtask = SUCCESSFULLY_ENQUEUED;\n        return rtask;\n    }\n\n    spin_mutex my_mutex;\n    internal::broadcast_cache< input_type, null_rw_mutex > my_successors;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    internal::edge_container<predecessor_type> my_built_predecessors;\n#endif\n    input_type my_buffer;\n    bool my_buffer_is_valid;\n    /*override*/void reset_receiver(reset_flags /*f*/) {}\n\n    /*override*/void reset_node( reset_flags f) {\n        my_buffer_is_valid = false;\n       if (f&rf_clear_edges) {\n           my_successors.clear();\n       }\n    }\n};  // overwrite_node\n\ntemplate< typename T >\nclass write_once_node : public overwrite_node<T> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n\n    //! Constructor\n    write_once_node(graph& g) : overwrite_node<T>(g) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_WRITE_ONCE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor: call base class copy constructor\n    write_once_node( const write_once_node& src ) : overwrite_node<T>(src) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_WRITE_ONCE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    /* override */ task *try_put_task( const T &v ) {\n        spin_mutex::scoped_lock l( this->my_mutex );\n        if ( this->my_buffer_is_valid ) {\n            return NULL;\n        } else {\n            this->my_buffer = v;\n            this->my_buffer_is_valid = true;\n            task *res = this->my_successors.try_put_task(v);\n            if (!res) res = SUCCESSFULLY_ENQUEUED;\n            return res;\n        }\n    }\n};\n\n//! Forwards messages of type T to all successors\ntemplate <typename T>\nclass broadcast_node : public graph_node, public receiver<T>, public sender<T> {\nprotected:\n    using graph_node::my_graph;\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\nprivate:\n    internal::broadcast_cache<input_type> my_successors;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    internal::edge_container<predecessor_type> my_built_predecessors;\n    spin_mutex pred_mutex;  // serialize accesses on edge_container\n#endif\npublic:\n\n    broadcast_node(graph& g) : graph_node(g) {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_BROADCAST_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    // Copy constructor\n    broadcast_node( const broadcast_node& src ) :\n        graph_node(src.my_graph), receiver<T>(), sender<T>()\n    {\n        my_successors.set_owner( this );\n        tbb::internal::fgt_node( tbb::internal::FLOW_BROADCAST_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //! Adds a successor\n    virtual bool register_successor( receiver<T> &r ) {\n        my_successors.register_successor( r );\n        return true;\n    }\n\n    //! Removes s as a successor\n    virtual bool remove_successor( receiver<T> &r ) {\n        my_successors.remove_successor( r );\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename sender<T>::built_successors_type built_successors_type;\n\n    /*override sender*/ built_successors_type &built_successors() { return my_successors.built_successors(); }\n\n    /*override sender*/ void internal_add_built_successor(successor_type &r) {\n        my_successors.internal_add_built_successor(r);\n    }\n\n    /*override sender*/ void internal_delete_built_successor(successor_type &r) {\n        my_successors.internal_delete_built_successor(r);\n    }\n\n    /*override sender*/ size_t successor_count() {\n        return my_successors.successor_count();\n    }\n\n    /*override*/ void copy_successors(successor_list_type &v) {\n        my_successors.copy_successors(v);\n    }\n\n    typedef typename receiver<T>::built_predecessors_type built_predecessors_type;\n\n    /*override receiver*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; }\n\n    /*override*/ void internal_add_built_predecessor( predecessor_type &p) {\n        spin_mutex::scoped_lock l(pred_mutex);\n        my_built_predecessors.add_edge(p);\n    }\n\n    /*override*/ void internal_delete_built_predecessor( predecessor_type &p) {\n        spin_mutex::scoped_lock l(pred_mutex);\n        my_built_predecessors.delete_edge(p);\n    }\n\n    /*override*/ size_t predecessor_count() {\n        spin_mutex::scoped_lock l(pred_mutex);\n        return my_built_predecessors.edge_count();\n    }\n\n    /*override*/ void copy_predecessors(predecessor_list_type &v) {\n        spin_mutex::scoped_lock l(pred_mutex);\n        my_built_predecessors.copy_edges(v);\n    }\n\n    /*override graph_node*/ void extract() {\n        my_built_predecessors.receiver_extract(*this);\n        my_successors.built_successors().sender_extract(*this);\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\nprotected:\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    //! build a task to run the successor if possible.  Default is old behavior.\n    /*override*/ task *try_put_task(const T& t) {\n        task *new_task = my_successors.try_put_task(t);\n        if (!new_task) new_task = SUCCESSFULLY_ENQUEUED;\n        return new_task;\n    }\n\n    /*override*/void reset_receiver(reset_flags /*f*/) {}\n\n    /*override*/void reset_node(reset_flags f) {\n        if (f&rf_clear_edges) {\n           my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n           my_built_predecessors.clear();\n#endif\n        }\n        __TBB_ASSERT(!(f & rf_clear_edges) || my_successors.empty(), \"Error resetting broadcast_node\");\n    }\n};  // broadcast_node\n\n//! Forwards messages in arbitrary order\ntemplate <typename T, typename A=cache_aligned_allocator<T> >\nclass buffer_node : public graph_node, public internal::reservable_item_buffer<T, A>, public receiver<T>, public sender<T> {\nprotected:\n    using graph_node::my_graph;\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n    typedef buffer_node<T, A> class_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\nprotected:\n    typedef size_t size_type;\n    internal::round_robin_cache< T, null_rw_mutex > my_successors;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    internal::edge_container<predecessor_type> my_built_predecessors;\n#endif\n\n    friend class internal::forward_task_bypass< buffer_node< T, A > >;\n\n    enum op_type {reg_succ, rem_succ, req_item, res_item, rel_res, con_res, put_item, try_fwd_task\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        , add_blt_succ, del_blt_succ,\n        add_blt_pred, del_blt_pred,\n        blt_succ_cnt, blt_pred_cnt,\n        blt_succ_cpy, blt_pred_cpy   // create vector copies of preds and succs\n#endif\n    };\n    enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\n    // implements the aggregator_operation concept\n    class buffer_operation : public internal::aggregated_operation< buffer_operation > {\n    public:\n        char type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        task * ltask;\n        union {\n            input_type *elem;\n            successor_type *r;\n            predecessor_type *p;\n            size_t cnt_val;\n            successor_list_type *svec;\n            predecessor_list_type *pvec;\n        };\n#else\n        T *elem;\n        task * ltask;\n        successor_type *r;\n#endif\n        buffer_operation(const T& e, op_type t) : type(char(t))\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                                                  , ltask(NULL), elem(const_cast<T*>(&e))\n#else\n                                                  , elem(const_cast<T*>(&e)) , ltask(NULL)\n#endif\n        {}\n        buffer_operation(op_type t) : type(char(t)),  ltask(NULL) {}\n    };\n\n    bool forwarder_busy;\n    typedef internal::aggregating_functor<class_type, buffer_operation> handler_type;\n    friend class internal::aggregating_functor<class_type, buffer_operation>;\n    internal::aggregator< handler_type, buffer_operation> my_aggregator;\n\n    virtual void handle_operations(buffer_operation *op_list) {\n        buffer_operation *tmp = NULL;\n        bool try_forwarding=false;\n        while (op_list) {\n            tmp = op_list;\n            op_list = op_list->next;\n            switch (tmp->type) {\n            case reg_succ: internal_reg_succ(tmp);  try_forwarding = true; break;\n            case rem_succ: internal_rem_succ(tmp); break;\n            case req_item: internal_pop(tmp); break;\n            case res_item: internal_reserve(tmp); break;\n            case rel_res:  internal_release(tmp);  try_forwarding = true; break;\n            case con_res:  internal_consume(tmp);  try_forwarding = true; break;\n            case put_item: internal_push(tmp);  try_forwarding = (tmp->status == SUCCEEDED); break;\n            case try_fwd_task: internal_forward_task(tmp); break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            // edge recording\n            case add_blt_succ: internal_add_built_succ(tmp); break;\n            case del_blt_succ: internal_del_built_succ(tmp); break;\n            case add_blt_pred: internal_add_built_pred(tmp); break;\n            case del_blt_pred: internal_del_built_pred(tmp); break;\n            case blt_succ_cnt: internal_succ_cnt(tmp); break;\n            case blt_pred_cnt: internal_pred_cnt(tmp); break;\n            case blt_succ_cpy: internal_copy_succs(tmp); break;\n            case blt_pred_cpy: internal_copy_preds(tmp); break;\n#endif\n            }\n        }\n        if (try_forwarding && !forwarder_busy) {\n            if(this->my_graph.is_active()) {\n                forwarder_busy = true;\n                task *new_task = new(task::allocate_additional_child_of(*(this->my_graph.root_task()))) internal::\n                        forward_task_bypass\n                        < buffer_node<input_type, A> >(*this);\n                // tmp should point to the last item handled by the aggregator.  This is the operation\n                // the handling thread enqueued.  So modifying that record will be okay.\n                tbb::task *z = tmp->ltask;\n                tmp->ltask = combine_tasks(z, new_task);  // in case the op generated a task\n            }\n        }\n    }  // handle_operations\n\n    inline task *grab_forwarding_task( buffer_operation &op_data) {\n        return op_data.ltask;\n    }\n\n    inline bool enqueue_forwarding_task(buffer_operation &op_data) {\n        task *ft = grab_forwarding_task(op_data);\n        if(ft) {\n            FLOW_SPAWN(*ft);\n            return true;\n        }\n        return false;\n    }\n\n    //! This is executed by an enqueued task, the \"forwarder\"\n    virtual task *forward_task() {\n        buffer_operation op_data(try_fwd_task);\n        task *last_task = NULL;\n        do {\n            op_data.status = WAIT;\n            op_data.ltask = NULL;\n            my_aggregator.execute(&op_data);\n            tbb::task *xtask = op_data.ltask;\n            last_task = combine_tasks(last_task, xtask);\n        } while (op_data.status == SUCCEEDED);\n        return last_task;\n    }\n\n    //! Register successor\n    virtual void internal_reg_succ(buffer_operation *op) {\n        my_successors.register_successor(*(op->r));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    //! Remove successor\n    virtual void internal_rem_succ(buffer_operation *op) {\n        my_successors.remove_successor(*(op->r));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename sender<T>::built_successors_type built_successors_type;\n\n    /*override sender*/ built_successors_type &built_successors() { return my_successors.built_successors(); }\n\n    virtual void internal_add_built_succ(buffer_operation *op) {\n        my_successors.internal_add_built_successor(*(op->r));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    virtual void internal_del_built_succ(buffer_operation *op) {\n        my_successors.internal_delete_built_successor(*(op->r));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    typedef typename receiver<T>::built_predecessors_type built_predecessors_type;\n\n    /*override receiver*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; }\n\n    virtual void internal_add_built_pred(buffer_operation *op) {\n        my_built_predecessors.add_edge(*(op->p));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    virtual void internal_del_built_pred(buffer_operation *op) {\n        my_built_predecessors.delete_edge(*(op->p));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    virtual void internal_succ_cnt(buffer_operation *op) {\n        op->cnt_val = my_successors.successor_count();\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    virtual void internal_pred_cnt(buffer_operation *op) {\n        op->cnt_val = my_built_predecessors.edge_count();\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    virtual void internal_copy_succs(buffer_operation *op) {\n        my_successors.copy_successors(*(op->svec));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    virtual void internal_copy_preds(buffer_operation *op) {\n        my_built_predecessors.copy_edges(*(op->pvec));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    //! Tries to forward valid items to successors\n    virtual void internal_forward_task(buffer_operation *op) {\n        if (this->my_reserved || !this->my_item_valid(this->my_tail-1)) {\n            __TBB_store_with_release(op->status, FAILED);\n            this->forwarder_busy = false;\n            return;\n        }\n        T i_copy;\n        task * last_task = NULL;\n        size_type counter = my_successors.size();\n        // Try forwarding, giving each successor a chance\n        while (counter>0 && !this->buffer_empty() && this->my_item_valid(this->my_tail-1)) {\n            this->copy_back(i_copy);\n            task *new_task = my_successors.try_put_task(i_copy);\n            if(new_task) {\n                last_task = combine_tasks(last_task, new_task);\n                this->destroy_back();\n            }\n            --counter;\n        }\n        op->ltask = last_task;  // return task\n        if (last_task && !counter) {\n            __TBB_store_with_release(op->status, SUCCEEDED);\n        }\n        else {\n            __TBB_store_with_release(op->status, FAILED);\n            forwarder_busy = false;\n        }\n    }\n\n    virtual void internal_push(buffer_operation *op) {\n        this->push_back(*(op->elem));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    virtual void internal_pop(buffer_operation *op) {\n        if(this->pop_back(*(op->elem))) {\n            __TBB_store_with_release(op->status, SUCCEEDED);\n        }\n        else {\n            __TBB_store_with_release(op->status, FAILED);\n        }\n    }\n\n    virtual void internal_reserve(buffer_operation *op) {\n        if(this->reserve_front(*(op->elem))) {\n            __TBB_store_with_release(op->status, SUCCEEDED);\n        }\n        else {\n            __TBB_store_with_release(op->status, FAILED);\n        }\n    }\n\n    virtual void internal_consume(buffer_operation *op) {\n        this->consume_front();\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    virtual void internal_release(buffer_operation *op) {\n        this->release_front();\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\npublic:\n    //! Constructor\n    buffer_node( graph &g ) : graph_node(g), internal::reservable_item_buffer<T>(),\n        forwarder_busy(false) {\n        my_successors.set_owner(this);\n        my_aggregator.initialize_handler(handler_type(this));\n        tbb::internal::fgt_node( tbb::internal::FLOW_BUFFER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    buffer_node( const buffer_node& src ) : graph_node(src.my_graph),\n        internal::reservable_item_buffer<T>(), receiver<T>(), sender<T>() {\n        forwarder_busy = false;\n        my_successors.set_owner(this);\n        my_aggregator.initialize_handler(handler_type(this));\n        tbb::internal::fgt_node( tbb::internal::FLOW_BUFFER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<sender<output_type> *>(this) );\n    }\n\n    virtual ~buffer_node() {}\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //\n    // message sender implementation\n    //\n\n    //! Adds a new successor.\n    /** Adds successor r to the list of successors; may forward tasks.  */\n    /* override */ bool register_successor( successor_type &r ) {\n        buffer_operation op_data(reg_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    /*override*/ void internal_add_built_successor( successor_type &r) {\n        buffer_operation op_data(add_blt_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n    }\n\n    /*override*/ void internal_delete_built_successor( successor_type &r) {\n        buffer_operation op_data(del_blt_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n    }\n\n    /*override*/ void internal_add_built_predecessor( predecessor_type &p) {\n        buffer_operation op_data(add_blt_pred);\n        op_data.p = &p;\n        my_aggregator.execute(&op_data);\n    }\n\n    /*override*/ void internal_delete_built_predecessor( predecessor_type &p) {\n        buffer_operation op_data(del_blt_pred);\n        op_data.p = &p;\n        my_aggregator.execute(&op_data);\n    }\n\n    /*override*/ size_t predecessor_count() {\n        buffer_operation op_data(blt_pred_cnt);\n        my_aggregator.execute(&op_data);\n        return op_data.cnt_val;\n    }\n\n    /*override*/ size_t successor_count() {\n        buffer_operation op_data(blt_succ_cnt);\n        my_aggregator.execute(&op_data);\n        return op_data.cnt_val;\n    }\n\n    /*override*/ void copy_predecessors( predecessor_list_type &v ) {\n        buffer_operation op_data(blt_pred_cpy);\n        op_data.pvec = &v;\n        my_aggregator.execute(&op_data);\n    }\n\n    /*override*/ void copy_successors( successor_list_type &v ) {\n        buffer_operation op_data(blt_succ_cpy);\n        op_data.svec = &v;\n        my_aggregator.execute(&op_data);\n    }\n\n#endif\n\n    //! Removes a successor.\n    /** Removes successor r from the list of successors.\n        It also calls r.remove_predecessor(*this) to remove this node as a predecessor. */\n    /* override */ bool remove_successor( successor_type &r ) {\n        r.remove_predecessor(*this);\n        buffer_operation op_data(rem_succ);\n        op_data.r = &r;\n        my_aggregator.execute(&op_data);\n        // even though this operation does not cause a forward, if we are the handler, and\n        // a forward is scheduled, we may be the first to reach this point after the aggregator,\n        // and so should check for the task.\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\n    //! Request an item from the buffer_node\n    /**  true = v contains the returned item<BR>\n         false = no item has been returned */\n    /* override */ bool try_get( T &v ) {\n        buffer_operation op_data(req_item);\n        op_data.elem = &v;\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return (op_data.status==SUCCEEDED);\n    }\n\n    //! Reserves an item.\n    /**  false = no item can be reserved<BR>\n         true = an item is reserved */\n    /* override */ bool try_reserve( T &v ) {\n        buffer_operation op_data(res_item);\n        op_data.elem = &v;\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return (op_data.status==SUCCEEDED);\n    }\n\n    //! Release a reserved item.\n    /**  true = item has been released and so remains in sender */\n    /* override */ bool try_release() {\n        buffer_operation op_data(rel_res);\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\n    //! Consumes a reserved item.\n    /** true = item is removed from sender and reservation removed */\n    /* override */ bool try_consume() {\n        buffer_operation op_data(con_res);\n        my_aggregator.execute(&op_data);\n        (void)enqueue_forwarding_task(op_data);\n        return true;\n    }\n\nprotected:\n\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    //! receive an item, return a task *if possible\n    /* override */ task *try_put_task(const T &t) {\n        buffer_operation op_data(t, put_item);\n        my_aggregator.execute(&op_data);\n        task *ft = grab_forwarding_task(op_data);\n        // sequencer_nodes can return failure (if an item has been previously inserted)\n        // We have to spawn the returned task if our own operation fails.\n\n        if(ft && op_data.status == FAILED) {\n            // we haven't succeeded queueing the item, but for some reason the\n            // call returned a task (if another request resulted in a successful\n            // forward this could happen.)  Queue the task and reset the pointer.\n            FLOW_SPAWN(*ft); ft = NULL;\n        }\n        else if(!ft && op_data.status == SUCCEEDED) {\n            ft = SUCCESSFULLY_ENQUEUED;\n        }\n        return ft;\n    }\n\n    /*override*/void reset_receiver(reset_flags /*f*/) { }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\npublic:\n    /* override*/ void extract() {\n        my_built_predecessors.receiver_extract(*this);\n        my_successors.built_successors().sender_extract(*this);\n    }\n#endif\n\nprotected:\n    /*override*/void reset_node( reset_flags f) {\n        internal::reservable_item_buffer<T, A>::reset();\n        // TODO: just clear structures\n        if (f&rf_clear_edges) {\n            my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            my_built_predecessors.clear();\n#endif\n        }\n        forwarder_busy = false;\n    }\n\n\n};  // buffer_node\n\n//! Forwards messages in FIFO order\ntemplate <typename T, typename A=cache_aligned_allocator<T> >\nclass queue_node : public buffer_node<T, A> {\nprotected:\n    typedef buffer_node<T, A> base_type;\n    typedef typename base_type::size_type size_type;\n    typedef typename base_type::buffer_operation queue_operation;\n\n    enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\n    /* override */ void internal_forward_task(queue_operation *op) {\n        if (this->my_reserved || !this->my_item_valid(this->my_head)) {\n            __TBB_store_with_release(op->status, FAILED);\n            this->forwarder_busy = false;\n            return;\n        }\n        T i_copy;\n        task *last_task = NULL;\n        size_type counter = this->my_successors.size();\n        // Keep trying to send items while there is at least one accepting successor\n        while (counter>0 && this->my_item_valid(this->my_head)) {\n            this->copy_front(i_copy);\n            task *new_task = this->my_successors.try_put_task(i_copy);\n            if(new_task) {\n                this->destroy_front();\n                last_task = combine_tasks(last_task, new_task);\n            }\n            --counter;\n        }\n        op->ltask = last_task;\n        if (last_task && !counter)\n            __TBB_store_with_release(op->status, SUCCEEDED);\n        else {\n            __TBB_store_with_release(op->status, FAILED);\n            this->forwarder_busy = false;\n        }\n    }\n\n    /* override */ void internal_pop(queue_operation *op) {\n        if ( this->my_reserved || !this->my_item_valid(this->my_head)){\n            __TBB_store_with_release(op->status, FAILED);\n        }\n        else {\n            this->pop_front(*(op->elem));\n            __TBB_store_with_release(op->status, SUCCEEDED);\n        }\n    }\n    /* override */ void internal_reserve(queue_operation *op) {\n        if (this->my_reserved || !this->my_item_valid(this->my_head)) {\n            __TBB_store_with_release(op->status, FAILED);\n        }\n        else {\n            this->reserve_front(*(op->elem));\n            __TBB_store_with_release(op->status, SUCCEEDED);\n        }\n    }\n    /* override */ void internal_consume(queue_operation *op) {\n        this->consume_front();\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n\n    //! Constructor\n    queue_node( graph &g ) : base_type(g) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    queue_node( const queue_node& src) : base_type(src) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n    /*override*/void reset_node( reset_flags f) {\n        base_type::reset_node(f);\n    }\n};  // queue_node\n\n//! Forwards messages in sequence order\ntemplate< typename T, typename A=cache_aligned_allocator<T> >\nclass sequencer_node : public queue_node<T, A> {\n    internal::function_body< T, size_t > *my_sequencer;\n    // my_sequencer should be a benign function and must be callable\n    // from a parallel context.  Does this mean it needn't be reset?\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n\n    //! Constructor\n    template< typename Sequencer >\n    sequencer_node( graph &g, const Sequencer& s ) : queue_node<T, A>(g),\n        my_sequencer(new internal::function_body_leaf< T, size_t, Sequencer>(s) ) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_SEQUENCER_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    sequencer_node( const sequencer_node& src ) : queue_node<T, A>(src),\n        my_sequencer( src.my_sequencer->clone() ) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_SEQUENCER_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Destructor\n    ~sequencer_node() { delete my_sequencer; }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\nprotected:\n    typedef typename buffer_node<T, A>::size_type size_type;\n    typedef typename buffer_node<T, A>::buffer_operation sequencer_operation;\n\n    enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\nprivate:\n    /* override */ void internal_push(sequencer_operation *op) {\n        size_type tag = (*my_sequencer)(*(op->elem));\n#if !TBB_DEPRECATED_SEQUENCER_DUPLICATES\n        if(tag < this->my_head) {\n            // have already emitted a message with this tag\n            __TBB_store_with_release(op->status, FAILED);\n            return;\n        }\n#endif\n        // cannot modify this->my_tail now; the buffer would be inconsistent.\n        size_t new_tail = (tag+1 > this->my_tail) ? tag+1 : this->my_tail;\n\n        if(this->size(new_tail) > this->capacity()) {\n            this->grow_my_array(this->size(new_tail));\n        }\n        this->my_tail = new_tail;\n        if(this->place_item(tag,*(op->elem))) {\n            __TBB_store_with_release(op->status, SUCCEEDED);\n        }\n        else {\n            // already have a message with this tag\n            __TBB_store_with_release(op->status, FAILED);\n        }\n    }\n};  // sequencer_node\n\n//! Forwards messages in priority order\ntemplate< typename T, typename Compare = std::less<T>, typename A=cache_aligned_allocator<T> >\nclass priority_queue_node : public buffer_node<T, A> {\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef buffer_node<T,A> base_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n\n    //! Constructor\n    priority_queue_node( graph &g ) : buffer_node<T, A>(g), mark(0) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    priority_queue_node( const priority_queue_node &src ) : buffer_node<T, A>(src), mark(0) {\n        tbb::internal::fgt_node( tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),\n                                 static_cast<receiver<input_type> *>(this),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n\nprotected:\n\n    /*override*/void reset_node( reset_flags f) {\n        mark = 0;\n        base_type::reset_node(f);\n    }\n\n    typedef typename buffer_node<T, A>::size_type size_type;\n    typedef typename buffer_node<T, A>::item_type item_type;\n    typedef typename buffer_node<T, A>::buffer_operation prio_operation;\n\n    enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\n    /* override */ void handle_operations(prio_operation *op_list) {\n        prio_operation *tmp = op_list /*, *pop_list*/ ;\n        bool try_forwarding=false;\n        while (op_list) {\n            tmp = op_list;\n            op_list = op_list->next;\n            switch (tmp->type) {\n            case buffer_node<T, A>::reg_succ: this->internal_reg_succ(tmp); try_forwarding = true; break;\n            case buffer_node<T, A>::rem_succ: this->internal_rem_succ(tmp); break;\n            case buffer_node<T, A>::put_item: internal_push(tmp); try_forwarding = true; break;\n            case buffer_node<T, A>::try_fwd_task: internal_forward_task(tmp); break;\n            case buffer_node<T, A>::rel_res: internal_release(tmp); try_forwarding = true; break;\n            case buffer_node<T, A>::con_res: internal_consume(tmp); try_forwarding = true; break;\n            case buffer_node<T, A>::req_item: internal_pop(tmp); break;\n            case buffer_node<T, A>::res_item: internal_reserve(tmp); break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            case buffer_node<T, A>::add_blt_succ: this->internal_add_built_succ(tmp); break;\n            case buffer_node<T, A>::del_blt_succ: this->internal_del_built_succ(tmp); break;\n            case buffer_node<T, A>::add_blt_pred: this->internal_add_built_pred(tmp); break;\n            case buffer_node<T, A>::del_blt_pred: this->internal_del_built_pred(tmp); break;\n            case buffer_node<T, A>::blt_succ_cnt: this->internal_succ_cnt(tmp); break;\n            case buffer_node<T, A>::blt_pred_cnt: this->internal_pred_cnt(tmp); break;\n            case buffer_node<T, A>::blt_succ_cpy: this->internal_copy_succs(tmp); break;\n            case buffer_node<T, A>::blt_pred_cpy: this->internal_copy_preds(tmp); break;\n#endif\n            }\n        }\n        // process pops!  for now, no special pop processing\n        // concurrent_priority_queue handles pushes first, then pops.\n        // that is the genesis of this comment\n        if (mark<this->my_tail) heapify();\n        __TBB_ASSERT(mark == this->my_tail, \"mark unequal after heapify\");\n        if (try_forwarding && !this->forwarder_busy) {  // could we also test for this->my_tail (queue non-empty)?\n            if(this->my_graph.is_active()) {\n                this->forwarder_busy = true;\n                task *new_task = new(task::allocate_additional_child_of(*(this->my_graph.root_task()))) internal::\n                        forward_task_bypass\n                        < buffer_node<input_type, A> >(*this);\n                // tmp should point to the last item handled by the aggregator.  This is the operation\n                // the handling thread enqueued.  So modifying that record will be okay.\n                tbb::task *tmp1 = tmp->ltask;\n                tmp->ltask = combine_tasks(tmp1, new_task);\n            }\n        }\n    }\n\n    //! Tries to forward valid items to successors\n    /* override */ void internal_forward_task(prio_operation *op) {\n        T i_copy;\n        task * last_task = NULL; // flagged when a successor accepts\n        size_type counter = this->my_successors.size();\n\n        if (this->my_reserved || this->my_tail == 0) {\n            __TBB_store_with_release(op->status, FAILED);\n            this->forwarder_busy = false;\n            return;\n        }\n        // Keep trying to send while there exists an accepting successor\n        while (counter>0 && this->my_tail > 0) {\n            prio_copy(i_copy);\n            task * new_task = this->my_successors.try_put_task(i_copy);\n            if ( new_task ) {\n                last_task = combine_tasks(last_task, new_task);\n                prio_pop();\n            }\n            --counter;\n        }\n        op->ltask = last_task;\n        if (last_task && !counter)\n            __TBB_store_with_release(op->status, SUCCEEDED);\n        else {\n            __TBB_store_with_release(op->status, FAILED);\n            this->forwarder_busy = false;\n        }\n    }\n\n    /* override */ void internal_push(prio_operation *op) {\n        prio_push(*(op->elem));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n    }\n\n    /* override */ void internal_pop(prio_operation *op) {\n        // if empty or already reserved, don't pop\n        if ( this->my_reserved == true || this->my_tail == 0 ) {\n            __TBB_store_with_release(op->status, FAILED);\n            return;\n        }\n\n        prio_copy(*(op->elem));\n        __TBB_store_with_release(op->status, SUCCEEDED);\n        prio_pop();\n\n    }\n\n    // pops the highest-priority item, saves copy\n    /* override */ void internal_reserve(prio_operation *op) {\n        if (this->my_reserved == true || this->my_tail == 0) {\n            __TBB_store_with_release(op->status, FAILED);\n            return;\n        }\n        this->my_reserved = true;\n        prio_copy(*(op->elem));\n        reserved_item = *(op->elem);\n        __TBB_store_with_release(op->status, SUCCEEDED);\n        prio_pop();\n    }\n\n    /* override */ void internal_consume(prio_operation *op) {\n        __TBB_store_with_release(op->status, SUCCEEDED);\n        this->my_reserved = false;\n        reserved_item = input_type();\n    }\n\n    /* override */ void internal_release(prio_operation *op) {\n        __TBB_store_with_release(op->status, SUCCEEDED);\n        prio_push(reserved_item);\n        this->my_reserved = false;\n        reserved_item = input_type();\n    }\nprivate:\n    Compare compare;\n    size_type mark;\n\n    input_type reserved_item;\n\n    // in case a reheap has not been done after a push, check if the mark item is higher than the 0'th item\n    bool prio_use_tail() {\n        __TBB_ASSERT(mark <= this->my_tail, \"mark outside bounds before test\");\n        return mark < this->my_tail && compare(this->get_my_item(0), this->get_my_item(this->my_tail - 1));\n    }\n\n    // prio_push: checks that the item will fit, expand array if necessary, put at end\n    void prio_push(const T &src) {\n        if ( this->my_tail >= this->my_array_size )\n            this->grow_my_array( this->my_tail + 1 );\n        (void) this->place_item(this->my_tail, src);\n        ++(this->my_tail);\n        __TBB_ASSERT(mark < this->my_tail, \"mark outside bounds after push\");\n    }\n\n    // prio_pop: deletes highest priority item from the array, and if it is item\n    // 0, move last item to 0 and reheap.  If end of array, just destroy and decrement tail\n    // and mark.  Assumes the array has already been tested for emptiness; no failure.\n    void prio_pop()  {\n        if (prio_use_tail()) {\n            // there are newly pushed elems; last one higher than top\n            // copy the data\n            this->destroy_item(this->my_tail-1);\n            --(this->my_tail);\n            __TBB_ASSERT(mark <= this->my_tail, \"mark outside bounds after pop\");\n            return;\n        }\n        this->destroy_item(0);\n        if(this->my_tail > 1) {\n            // push the last element down heap\n            __TBB_ASSERT(this->my_item_valid(this->my_tail - 1), NULL);\n            this->move_item(0,this->my_tail - 1);\n        }\n        --(this->my_tail);\n        if(mark > this->my_tail) --mark;\n        if (this->my_tail > 1) // don't reheap for heap of size 1\n            reheap();\n        __TBB_ASSERT(mark <= this->my_tail, \"mark outside bounds after pop\");\n    }\n\n    void prio_copy(T &res) {\n        if (prio_use_tail()) {\n            res = this->get_my_item(this->my_tail - 1);\n        }\n        else {\n            res = this->get_my_item(0);\n        }\n    }\n\n    // turn array into heap\n    void heapify() {\n        if(this->my_tail == 0) {\n            mark = 0;\n            return;\n        }\n        if (!mark) mark = 1;\n        for (; mark<this->my_tail; ++mark) { // for each unheaped element\n            size_type cur_pos = mark;\n            input_type to_place;\n            this->fetch_item(mark,to_place);\n            do { // push to_place up the heap\n                size_type parent = (cur_pos-1)>>1;\n                if (!compare(this->get_my_item(parent), to_place))\n                    break;\n                this->move_item(cur_pos, parent);\n                cur_pos = parent;\n            } while( cur_pos );\n            (void) this->place_item(cur_pos, to_place);\n        }\n    }\n\n    // otherwise heapified array with new root element; rearrange to heap\n    void reheap() {\n        size_type cur_pos=0, child=1;\n        while (child < mark) {\n            size_type target = child;\n            if (child+1<mark &&\n                compare(this->get_my_item(child),\n                        this->get_my_item(child+1)))\n                ++target;\n            // target now has the higher priority child\n            if (compare(this->get_my_item(target),\n                        this->get_my_item(cur_pos)))\n                break;\n            // swap\n            this->swap_items(cur_pos, target);\n            cur_pos = target;\n            child = (cur_pos<<1)+1;\n        }\n    }\n};  // priority_queue_node\n\n//! Forwards messages only if the threshold has not been reached\n/** This node forwards items until its threshold is reached.\n    It contains no buffering.  If the downstream node rejects, the\n    message is dropped. */\ntemplate< typename T >\nclass limiter_node : public graph_node, public receiver< T >, public sender< T > {\nprotected:\n    using graph_node::my_graph;\npublic:\n    typedef T input_type;\n    typedef T output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n    typedef typename sender<output_type>::built_successors_type built_successors_type;\n    typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n    typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\nprivate:\n    size_t my_threshold;\n    size_t my_count; //number of successful puts\n    size_t my_tries; //number of active put attempts\n    internal::reservable_predecessor_cache< T, spin_mutex > my_predecessors;\n    spin_mutex my_mutex;\n    internal::broadcast_cache< T > my_successors;\n    int init_decrement_predecessors;\n\n    friend class internal::forward_task_bypass< limiter_node<T> >;\n\n    // Let decrementer call decrement_counter()\n    friend class internal::decrementer< limiter_node<T> >;\n\n    bool check_conditions() {  // always called under lock\n        return ( my_count + my_tries < my_threshold && !my_predecessors.empty() && !my_successors.empty() );\n    }\n\n    // only returns a valid task pointer or NULL, never SUCCESSFULLY_ENQUEUED\n    task *forward_task() {\n        input_type v;\n        task *rval = NULL;\n        bool reserved = false;\n            {\n                spin_mutex::scoped_lock lock(my_mutex);\n                if ( check_conditions() )\n                    ++my_tries;\n                else\n                    return NULL;\n            }\n\n        //SUCCESS\n        // if we can reserve and can put, we consume the reservation \n        // we increment the count and decrement the tries\n        if ( (my_predecessors.try_reserve(v)) == true ){\n            reserved=true;\n            if ( (rval = my_successors.try_put_task(v)) != NULL ){\n                {\n                    spin_mutex::scoped_lock lock(my_mutex);\n                    ++my_count;\n                    --my_tries;\n                    my_predecessors.try_consume();\n                    if ( check_conditions() ) {\n                        if ( this->my_graph.is_active() ) {\n                            task *rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                                internal::forward_task_bypass< limiter_node<T> >( *this );\n                            FLOW_SPAWN (*rtask);\n                        }\n                    }\n                }\n                return rval;\n            }\n        }\n        //FAILURE\n        //if we can't reserve, we decrement the tries\n        //if we can reserve but can't put, we decrement the tries and release the reservation\n        {\n            spin_mutex::scoped_lock lock(my_mutex);\n            --my_tries;\n            if (reserved) my_predecessors.try_release();\n            if ( check_conditions() ) {\n                if ( this->my_graph.is_active() ) {\n                    task *rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                        internal::forward_task_bypass< limiter_node<T> >( *this );\n                    __TBB_ASSERT(!rval, \"Have two tasks to handle\");\n                    return rtask;\n                }\n            }\n            return rval;\n        }\n    }\n\n    void forward() {\n        __TBB_ASSERT(false, \"Should never be called\");\n        return;\n    }\n\n    task * decrement_counter() {\n        {\n            spin_mutex::scoped_lock lock(my_mutex);\n            if(my_count) --my_count;\n        }\n        return forward_task();\n    }\n\npublic:\n    //! The internal receiver< continue_msg > that decrements the count\n    internal::decrementer< limiter_node<T> > decrement;\n\n    //! Constructor\n    limiter_node(graph &g, size_t threshold, int num_decrement_predecessors=0) :\n        graph_node(g), my_threshold(threshold), my_count(0), my_tries(0),\n        init_decrement_predecessors(num_decrement_predecessors),\n        decrement(num_decrement_predecessors)\n    {\n        my_predecessors.set_owner(this);\n        my_successors.set_owner(this);\n        decrement.set_owner(this);\n        tbb::internal::fgt_node( tbb::internal::FLOW_LIMITER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<receiver<continue_msg> *>(&decrement),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n    //! Copy constructor\n    limiter_node( const limiter_node& src ) :\n        graph_node(src.my_graph), receiver<T>(), sender<T>(),\n        my_threshold(src.my_threshold), my_count(0), my_tries(0),\n        init_decrement_predecessors(src.init_decrement_predecessors),\n        decrement(src.init_decrement_predecessors)\n    {\n        my_predecessors.set_owner(this);\n        my_successors.set_owner(this);\n        decrement.set_owner(this);\n        tbb::internal::fgt_node( tbb::internal::FLOW_LIMITER_NODE, &this->my_graph,\n                                 static_cast<receiver<input_type> *>(this), static_cast<receiver<continue_msg> *>(&decrement),\n                                 static_cast<sender<output_type> *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    //! Replace the current successor with this new successor\n    /* override */ bool register_successor( receiver<output_type> &r ) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        bool was_empty = my_successors.empty();\n        my_successors.register_successor(r);\n        //spawn a forward task if this is the only successor\n        if ( was_empty && !my_predecessors.empty() && my_count + my_tries < my_threshold ) {\n            if ( this->my_graph.is_active() ) {\n                FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                            internal::forward_task_bypass < limiter_node<T> >( *this ) ) );\n            }\n        }\n        return true;\n    }\n\n    //! Removes a successor from this node\n    /** r.remove_predecessor(*this) is also called. */\n    /* override */ bool remove_successor( receiver<output_type> &r ) {\n        r.remove_predecessor(*this);\n        my_successors.remove_successor(r);\n        return true;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    /*override*/ built_successors_type &built_successors() { return my_successors.built_successors(); }\n    /*override*/ built_predecessors_type &built_predecessors() { return my_predecessors.built_predecessors(); }\n\n    /*override*/void internal_add_built_successor(receiver<output_type> &src) {\n        my_successors.internal_add_built_successor(src);\n    }\n\n    /*override*/void internal_delete_built_successor(receiver<output_type> &src) {\n        my_successors.internal_delete_built_successor(src);\n    }\n\n    /*override*/size_t successor_count() { return my_successors.successor_count(); }\n\n    /*override*/ void copy_successors(successor_list_type &v) {\n        my_successors.copy_successors(v);\n    }\n\n    /*override*/void internal_add_built_predecessor(sender<output_type> &src) {\n        my_predecessors.internal_add_built_predecessor(src);\n    }\n\n    /*override*/void internal_delete_built_predecessor(sender<output_type> &src) {\n        my_predecessors.internal_delete_built_predecessor(src);\n    }\n\n    /*override*/size_t predecessor_count() { return my_predecessors.predecessor_count(); }\n\n    /*override*/ void copy_predecessors(predecessor_list_type &v) {\n        my_predecessors.copy_predecessors(v);\n    }\n\n    /*override*/void extract() {\n        my_count = 0;\n        my_successors.built_successors().sender_extract(*this);\n        my_predecessors.built_predecessors().receiver_extract(*this);\n        decrement.built_predecessors().receiver_extract(decrement);\n    }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    //! Adds src to the list of cached predecessors.\n    /* override */ bool register_predecessor( predecessor_type &src ) {\n        spin_mutex::scoped_lock lock(my_mutex);\n        my_predecessors.add( src );\n        if ( my_count + my_tries < my_threshold && !my_successors.empty() && this->my_graph.is_active() ) {\n            FLOW_SPAWN( (* new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                        internal::forward_task_bypass < limiter_node<T> >( *this ) ) );\n        }\n        return true;\n    }\n\n    //! Removes src from the list of cached predecessors.\n    /* override */ bool remove_predecessor( predecessor_type &src ) {\n        my_predecessors.remove( src );\n        return true;\n    }\n\nprotected:\n\n    template< typename R, typename B > friend class run_and_put_task;\n    template<typename X, typename Y> friend class internal::broadcast_cache;\n    template<typename X, typename Y> friend class internal::round_robin_cache;\n    //! Puts an item to this receiver\n    /* override */ task *try_put_task( const T &t ) {\n        {\n            spin_mutex::scoped_lock lock(my_mutex);\n            if ( my_count + my_tries >= my_threshold )\n                return NULL;\n            else\n                ++my_tries;\n        }\n\n        task * rtask = my_successors.try_put_task(t);\n\n        if ( !rtask ) {  // try_put_task failed.\n            spin_mutex::scoped_lock lock(my_mutex);\n            --my_tries;\n            if ( check_conditions() && this->my_graph.is_active() ) {\n                rtask = new ( task::allocate_additional_child_of( *(this->my_graph.root_task()) ) )\n                    internal::forward_task_bypass< limiter_node<T> >( *this );\n            }\n        }\n        else {\n            spin_mutex::scoped_lock lock(my_mutex);\n            ++my_count;\n            --my_tries;\n             }\n        return rtask;\n    }\n\n    /*override*/void reset_receiver(reset_flags /*f*/) {\n        __TBB_ASSERT(false,NULL);  // should never be called\n    }\n\n    /*override*/void reset_node( reset_flags f) {\n        my_count = 0;\n        if(f & rf_clear_edges) {\n            my_predecessors.clear();\n            my_successors.clear();\n        }\n        else\n        {\n            my_predecessors.reset( );\n        }\n        decrement.reset_receiver(f);\n    }\n};  // limiter_node\n\n#include \"internal/_flow_graph_join_impl.h\"\n\nusing internal::reserving_port;\nusing internal::queueing_port;\nusing internal::key_matching_port;\nusing internal::input_port;\nusing internal::tag_value;\n\ntemplate<typename OutputTuple, typename JP=queueing> class join_node;\n\ntemplate<typename OutputTuple>\nclass join_node<OutputTuple,reserving>: public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value, reserving_port, OutputTuple, reserving> {\nprivate:\n    static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n    typedef typename internal::unfolded_join_node<N, reserving_port, OutputTuple, reserving> unfolded_type;\npublic:\n    typedef OutputTuple output_type;\n    typedef typename unfolded_type::input_ports_type input_ports_type;\n    join_node(graph &g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    join_node(const join_node &other) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_RESERVING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n};\n\ntemplate<typename OutputTuple>\nclass join_node<OutputTuple,queueing>: public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value, queueing_port, OutputTuple, queueing> {\nprivate:\n    static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n    typedef typename internal::unfolded_join_node<N, queueing_port, OutputTuple, queueing> unfolded_type;\npublic:\n    typedef OutputTuple output_type;\n    typedef typename unfolded_type::input_ports_type input_ports_type;\n    join_node(graph &g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    join_node(const join_node &other) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_QUEUEING, &this->my_graph,\n                                            this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n};\n\n// template for key_matching join_node\n// tag_matching join_node is a specialization of key_matching, and is source-compatible.\ntemplate<typename OutputTuple, typename K, typename KHash>\nclass join_node<OutputTuple, key_matching<K, KHash> > : public internal::unfolded_join_node<tbb::flow::tuple_size<OutputTuple>::value,\n      key_matching_port, OutputTuple, key_matching<K,KHash> > {\nprivate:\n    static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n    typedef typename internal::unfolded_join_node<N, key_matching_port, OutputTuple, key_matching<K,KHash> > unfolded_type;\npublic:\n    typedef OutputTuple output_type;\n    typedef typename unfolded_type::input_ports_type input_ports_type;\n\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n    join_node(graph &g) : unfolded_type(g) {}\n#endif  /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n\n    template<typename __TBB_B0, typename __TBB_B1>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1) : unfolded_type(g, b0, b1) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2) : unfolded_type(g, b0, b1, b2) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3) : unfolded_type(g, b0, b1, b2, b3) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4) :\n            unfolded_type(g, b0, b1, b2, b3, b4) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#if __TBB_VARIADIC_MAX >= 6\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5) :\n            unfolded_type(g, b0, b1, b2, b3, b4, b5) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 7\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6) :\n            unfolded_type(g, b0, b1, b2, b3, b4, b5, b6) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 8\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6, typename __TBB_B7>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,\n            __TBB_B7 b7) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 9\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6, typename __TBB_B7, typename __TBB_B8>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,\n            __TBB_B7 b7, __TBB_B8 b8) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n#if __TBB_VARIADIC_MAX >= 10\n    template<typename __TBB_B0, typename __TBB_B1, typename __TBB_B2, typename __TBB_B3, typename __TBB_B4,\n        typename __TBB_B5, typename __TBB_B6, typename __TBB_B7, typename __TBB_B8, typename __TBB_B9>\n    join_node(graph &g, __TBB_B0 b0, __TBB_B1 b1, __TBB_B2 b2, __TBB_B3 b3, __TBB_B4 b4, __TBB_B5 b5, __TBB_B6 b6,\n            __TBB_B7 b7, __TBB_B8 b8, __TBB_B9 b9) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n#endif\n    join_node(const join_node &other) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_JOIN_NODE_TAG_MATCHING, &this->my_graph,\n                                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n};\n\n// indexer node\n#include \"internal/_flow_graph_indexer_impl.h\"\n\ntemplate<typename T0, typename T1=null_type, typename T2=null_type, typename T3=null_type,\n                      typename T4=null_type, typename T5=null_type, typename T6=null_type,\n                      typename T7=null_type, typename T8=null_type, typename T9=null_type> class indexer_node;\n\n//indexer node specializations\ntemplate<typename T0>\nclass indexer_node<T0> : public internal::unfolded_indexer_node<tuple<T0> > {\nprivate:\n    static const int N = 1;\npublic:\n    typedef tuple<T0> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n     void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1>\nclass indexer_node<T0, T1> : public internal::unfolded_indexer_node<tuple<T0, T1> > {\nprivate:\n    static const int N = 2;\npublic:\n    typedef tuple<T0, T1> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n     void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1, typename T2>\nclass indexer_node<T0, T1, T2> : public internal::unfolded_indexer_node<tuple<T0, T1, T2> > {\nprivate:\n    static const int N = 3;\npublic:\n    typedef tuple<T0, T1, T2> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n        void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1, typename T2, typename T3>\nclass indexer_node<T0, T1, T2, T3> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3> > {\nprivate:\n    static const int N = 4;\npublic:\n    typedef tuple<T0, T1, T2, T3> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4>\nclass indexer_node<T0, T1, T2, T3, T4> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4> > {\nprivate:\n    static const int N = 5;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n\n#if __TBB_VARIADIC_MAX >= 6\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>\nclass indexer_node<T0, T1, T2, T3, T4, T5> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5> > {\nprivate:\n    static const int N = 6;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 6\n\n#if __TBB_VARIADIC_MAX >= 7\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6>\nclass indexer_node<T0, T1, T2, T3, T4, T5, T6> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6> > {\nprivate:\n    static const int N = 7;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 7\n\n#if __TBB_VARIADIC_MAX >= 8\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6, typename T7>\nclass indexer_node<T0, T1, T2, T3, T4, T5, T6, T7> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6, T7> > {\nprivate:\n    static const int N = 8;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 8\n\n#if __TBB_VARIADIC_MAX >= 9\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6, typename T7, typename T8>\nclass indexer_node<T0, T1, T2, T3, T4, T5, T6, T7, T8> : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> > {\nprivate:\n    static const int N = 9;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7, T8> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 9\n\n#if __TBB_VARIADIC_MAX >= 10\ntemplate<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5,\n         typename T6, typename T7, typename T8, typename T9>\nclass indexer_node/*default*/ : public internal::unfolded_indexer_node<tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> > {\nprivate:\n    static const int N = 10;\npublic:\n    typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> InputTuple;\n    typedef typename internal::tagged_msg<size_t, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> output_type;\n    typedef typename internal::unfolded_indexer_node<InputTuple> unfolded_type;\n    indexer_node(graph& g) : unfolded_type(g) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n    // Copy constructor\n    indexer_node( const indexer_node& other ) : unfolded_type(other) {\n        tbb::internal::fgt_multiinput_node<N>( tbb::internal::FLOW_INDEXER_NODE, &this->my_graph,\n                                           this->input_ports(), static_cast< sender< output_type > *>(this) );\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n};\n#endif //variadic max 10\n\n//! Makes an edge between a single predecessor and a single successor\ntemplate< typename T >\ninline void make_edge( sender<T> &p, receiver<T> &s ) {\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    s.internal_add_built_predecessor(p);\n    p.internal_add_built_successor(s);\n#endif\n    p.register_successor( s );\n    tbb::internal::fgt_make_edge( &p, &s );\n}\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n//Makes an edge from port 0 of a multi-output predecessor to port 0 of a multi-input successor.\ntemplate< typename T, typename V,\n          typename = typename T::output_ports_type, typename = typename V::input_ports_type >\ninline void make_edge( T& output, V& input) {\n    make_edge(get<0>(output.output_ports()), get<0>(input.input_ports()));\n}\n\n//Makes an edge from port 0 of a multi-output predecessor to a receiver.\ntemplate< typename T, typename R,\n          typename = typename T::output_ports_type >\ninline void make_edge( T& output, receiver<R>& input) {\n     make_edge(get<0>(output.output_ports()), input);\n}\n\n//Makes an edge from a sender to port 0 of a multi-input successor.\ntemplate< typename S,  typename V,\n          typename = typename V::input_ports_type >\ninline void make_edge( sender<S>& output, V& input) {\n     make_edge(output, get<0>(input.input_ports()));\n}\n#endif\n\n//! Removes an edge between a single predecessor and a single successor\ntemplate< typename T >\ninline void remove_edge( sender<T> &p, receiver<T> &s ) {\n    p.remove_successor( s );\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    // TODO: should we try to remove p from the predecessor list of s, in case the edge is reversed?\n    p.internal_delete_built_successor(s);\n    s.internal_delete_built_predecessor(p);\n#endif\n    tbb::internal::fgt_remove_edge( &p, &s );\n}\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n//Removes an edge between port 0 of a multi-output predecessor and port 0 of a multi-input successor.\ntemplate< typename T, typename V,\n          typename = typename T::output_ports_type, typename = typename V::input_ports_type >\ninline void remove_edge( T& output, V& input) {\n    remove_edge(get<0>(output.output_ports()), get<0>(input.input_ports()));\n}\n\n//Removes an edge between port 0 of a multi-output predecessor and a receiver.\ntemplate< typename T, typename R,\n          typename = typename T::output_ports_type >\ninline void remove_edge( T& output, receiver<R>& input) {\n     remove_edge(get<0>(output.output_ports()), input);\n}\n//Removes an edge between a sender and port 0 of a multi-input successor.\ntemplate< typename S,  typename V,\n          typename = typename V::input_ports_type >\ninline void remove_edge( sender<S>& output, V& input) {\n     remove_edge(output, get<0>(input.input_ports()));\n}\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\ntemplate<typename C >\ntemplate< typename S >\nvoid internal::edge_container<C>::sender_extract( S &s ) {\n    edge_list_type e = built_edges;\n    for ( typename edge_list_type::iterator i = e.begin(); i != e.end(); ++i ) {\n        remove_edge(s, **i);\n    }\n}\n\ntemplate<typename C >\ntemplate< typename R >\nvoid internal::edge_container<C>::receiver_extract( R &r ) {\n    edge_list_type e = built_edges;\n    for ( typename edge_list_type::iterator i = e.begin(); i != e.end(); ++i ) {\n        remove_edge(**i, r);\n    }\n}\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n//! Returns a copy of the body from a function or continue node\ntemplate< typename Body, typename Node >\nBody copy_body( Node &n ) {\n    return n.template copy_function_object<Body>();\n}\n\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n\n//composite_node\ntemplate< typename InputTuple, typename OutputTuple > class composite_node;\n\ntemplate< typename... InputTypes, typename... OutputTypes>\nclass composite_node <tbb::flow::tuple<InputTypes...>, tbb::flow::tuple<OutputTypes...> > : public graph_node, tbb::internal::no_copy {\n\npublic:\n    typedef tbb::flow::tuple< receiver<InputTypes>&... > input_ports_type;\n    typedef tbb::flow::tuple< sender<OutputTypes>&... > output_ports_type;\n\nprivate:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    const char *my_type_name;\n#endif\n    input_ports_type *my_input_ports;\n    output_ports_type *my_output_ports;\n\n    static const size_t NUM_INPUTS = sizeof...(InputTypes);\n    static const size_t NUM_OUTPUTS = sizeof...(OutputTypes);\n\nprotected:\n    /*override*/void reset_node(reset_flags) {}\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    composite_node( graph &g, const char *type_name = \"composite_node\") : graph_node(g), my_type_name(type_name), my_input_ports(NULL), my_output_ports(NULL)  {\n        tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );\n    }\n#else\n    composite_node( graph &g) : graph_node(g), my_input_ports(NULL), my_output_ports(NULL) {}\n#endif\n\n   template<typename T1, typename T2>\n   void set_external_ports(T1&& input_ports_tuple, T2&& output_ports_tuple) {\n       __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, \"number of arguments does not match number of input ports\");\n       __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, \"number of arguments does not match number of output ports\");\n      my_input_ports =  new input_ports_type(std::forward<T1>(input_ports_tuple));\n      my_output_ports = new output_ports_type(std::forward<T2>(output_ports_tuple));\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n      tbb::internal::fgt_internal_input_helper<T1, NUM_INPUTS>::register_port( this, input_ports_tuple);\n      tbb::internal::fgt_internal_output_helper<T2, NUM_OUTPUTS>::register_port( this, output_ports_tuple);\n#endif\n   }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    template< typename... NodeTypes >\n    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }\n\n    template< typename... NodeTypes >\n    void add_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }\n#else\n    template<typename... Nodes> void add_nodes(Nodes&...) { }\n    template<typename... Nodes> void add_visible_nodes(Nodes&...) { }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );\n    }\n#endif\n\n    input_ports_type input_ports() {\n         __TBB_ASSERT(my_input_ports, \"input ports not set, call set_external_ports to set input ports\");\n         return *my_input_ports;\n    }\n\n    output_ports_type output_ports() {\n         __TBB_ASSERT(my_output_ports, \"output ports not set, call set_external_ports to set output ports\");\n         return *my_output_ports;\n    }\n\n    virtual ~composite_node() {\n        if(my_input_ports) delete my_input_ports;\n        if(my_output_ports) delete my_output_ports;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    /*override*/void extract() {\n        __TBB_ASSERT(false, \"Current composite_node implementation does not support extract\");\n    }\n#endif\n};  // class composite_node\n\n//composite_node with only input ports\ntemplate< typename... InputTypes>\nclass composite_node <tbb::flow::tuple<InputTypes...>, tbb::flow::tuple<> > : public graph_node, tbb::internal::no_copy {\npublic:\n    typedef tbb::flow::tuple< receiver<InputTypes>&... > input_ports_type;\n\nprivate:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    const char *my_type_name;\n#endif\n    input_ports_type *my_input_ports;\n    static const size_t NUM_INPUTS = sizeof...(InputTypes);\n\nprotected:\n    /*override*/void reset_node(reset_flags) {}\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    composite_node( graph &g, const char *type_name = \"composite_node\") : graph_node(g), my_type_name(type_name), my_input_ports(NULL)  {\n        tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );\n    }\n#else\n    composite_node( graph &g) : graph_node(g), my_input_ports(NULL) {}\n#endif\n\n   template<typename T>\n   void set_external_ports(T&& input_ports_tuple) {\n       __TBB_STATIC_ASSERT(NUM_INPUTS == tbb::flow::tuple_size<input_ports_type>::value, \"number of arguments does not match number of input ports\");\n\n      my_input_ports =  new input_ports_type(std::forward<T>(input_ports_tuple));\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n      tbb::internal::fgt_internal_input_helper<T, NUM_INPUTS>::register_port( this, std::forward<T>(input_ports_tuple));\n#endif\n   }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    template< typename... NodeTypes >\n    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }\n\n    template< typename... NodeTypes >\n    void add_nodes( const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }\n#else\n    template<typename... Nodes> void add_nodes(Nodes&...) {}\n    template<typename... Nodes> void add_visible_nodes(Nodes&...) {}\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );\n    }\n#endif\n\n    input_ports_type input_ports() {\n         __TBB_ASSERT(my_input_ports, \"input ports not set, call set_external_ports to set input ports\");\n         return *my_input_ports;\n    }\n\n    virtual ~composite_node() {\n        if(my_input_ports) delete my_input_ports;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    /*override*/void extract() {\n        __TBB_ASSERT(false, \"Current composite_node implementation does not support extract\");\n    }\n#endif\n\n};  // class composite_node\n\n//composite_nodes with only output_ports\ntemplate<typename... OutputTypes>\nclass composite_node <tbb::flow::tuple<>, tbb::flow::tuple<OutputTypes...> > : public graph_node, tbb::internal::no_copy {\npublic:\n    typedef tbb::flow::tuple< sender<OutputTypes>&... > output_ports_type;\n\nprivate:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    const char *my_type_name;\n#endif\n    output_ports_type *my_output_ports;\n    static const size_t NUM_OUTPUTS = sizeof...(OutputTypes);\n\nprotected:\n    /*override*/void reset_node(reset_flags) {}\n\npublic:\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    composite_node( graph &g, const char *type_name = \"composite_node\") : graph_node(g), my_type_name(type_name), my_output_ports(NULL) {\n        tbb::internal::itt_make_task_group( tbb::internal::ITT_DOMAIN_FLOW, this, tbb::internal::FLOW_NODE, &g, tbb::internal::FLOW_GRAPH, tbb::internal::FLOW_COMPOSITE_NODE );\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, my_type_name );\n    }\n#else\n    composite_node( graph &g) : graph_node(g), my_output_ports(NULL) {}\n#endif\n\n   template<typename T>\n   void set_external_ports(T&& output_ports_tuple) {\n       __TBB_STATIC_ASSERT(NUM_OUTPUTS == tbb::flow::tuple_size<output_ports_type>::value, \"number of arguments does not match number of output ports\");\n\n      my_output_ports = new output_ports_type(std::forward<T>(output_ports_tuple));\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n      tbb::internal::fgt_internal_output_helper<T, NUM_OUTPUTS>::register_port( this, std::forward<T>(output_ports_tuple));\n#endif\n   }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    template<typename... NodeTypes >\n    void add_visible_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, true, n...); }\n\n    template<typename... NodeTypes >\n    void add_nodes(const NodeTypes&... n) { internal::add_nodes_impl(this, false, n...); }\n#else\n    template<typename... Nodes> void add_nodes(Nodes&...) {}\n    template<typename... Nodes> void add_visible_nodes(Nodes&...) {}\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n        tbb::internal::fgt_multiinput_multioutput_node_desc( this, name );\n    }\n#endif\n\n    output_ports_type output_ports() {\n         __TBB_ASSERT(my_output_ports, \"output ports not set, call set_external_ports to set output ports\");\n         return *my_output_ports;\n    }\n\n    virtual ~composite_node() {\n        if(my_output_ports) delete my_output_ports;\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    /*override*/void extract() {\n        __TBB_ASSERT(false, \"Current composite_node implementation does not support extract\");\n    }\n#endif\n\n};  // class composite_node\n\n#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES\n\n#if __TBB_PREVIEW_ASYNC_NODE\nnamespace internal {\n//! Pure virtual template class that defines interface for async communication\ntemplate < typename Output >\nclass async_gateway {\npublic:\n    typedef Output output_type;\n\n    //! Submit signal from an asynchronous activity to FG\n    virtual bool async_try_put( const output_type &i ) = 0;\n\n    //! Increment reference count of graph to prevent premature return from wait_for_all\n    virtual void async_reserve() = 0;\n\n    //! Decrement reference count of graph to allow return from wait_for_all\n    virtual void async_commit() = 0;\n\n    virtual ~async_gateway() {}\n};\n\ntemplate<typename Input, typename Ports, typename AsyncGateway, typename Body>\nclass async_body {\npublic:\n    typedef AsyncGateway async_gateway_type;\n\n    async_body(const Body &body, async_gateway_type *gateway) : my_body(body), my_async_gateway(gateway) { }\n\n    async_body(const async_body &other) : my_body(other.my_body), my_async_gateway(other.my_async_gateway) { }\n\n    void operator()( const Input &v, Ports & ) {\n        my_body(v, *my_async_gateway);\n    }\n\n    Body get_body() { return my_body; }\n\n    void set_async_gateway(async_gateway_type *gateway) {\n        my_async_gateway = gateway;\n    }\n\nprivate:\n    Body my_body;\n    async_gateway_type *my_async_gateway;\n};\n\n}\n\n//! Implements async node\ntemplate < typename Input, typename Output, typename Policy = queueing, typename Allocator=cache_aligned_allocator<Input> >\nclass async_node : public multifunction_node< Input, tuple< Output >, Policy, Allocator >, public internal::async_gateway<Output>, public sender< Output > {\nprotected:\n    typedef multifunction_node< Input, tuple< Output >, Policy, Allocator > base_type;\n\npublic:\n    typedef Input input_type;\n    typedef Output output_type;\n    typedef sender< input_type > predecessor_type;\n    typedef receiver< output_type > successor_type;\n    typedef internal::async_gateway< output_type > async_gateway_type;\n\nprotected:\n    typedef typename internal::multifunction_input<Input, typename base_type::output_ports_type, Allocator> mfn_input_type;\n\n    struct try_put_functor {\n        typedef internal::multifunction_output<Output> output_port_type;\n        output_port_type *port;\n        const Output *value;\n        bool result;\n        try_put_functor(output_port_type &p, const Output &v) : port(&p), value(&v), result(false) { }\n        void operator()() {\n            result = port->try_put(*value);\n        }\n    };\n\npublic:\n    template<typename Body>\n    async_node( graph &g, size_t concurrency, Body body ) :\n        base_type( g, concurrency, internal::async_body<Input, typename base_type::output_ports_type, async_gateway_type, Body>(body, this) ) {\n        tbb::internal::fgt_multioutput_node<1>( tbb::internal::FLOW_ASYNC_NODE,\n                                                &this->graph_node::my_graph,\n                                                static_cast<receiver<input_type> *>(this),\n                                                this->output_ports() );\n    }\n\n    async_node( const async_node &other ) : base_type(other) {\n        typedef internal::multifunction_body<input_type, typename base_type::output_ports_type> mfn_body_type;\n        mfn_body_type &body_ref = *this->my_body;\n        body_ref.set_gateway(static_cast<async_gateway_type *>(this));\n        mfn_body_type &init_body_ref = *this->my_init_body;\n        init_body_ref.set_gateway(static_cast<async_gateway_type *>(this));\n        tbb::internal::fgt_multioutput_node<1>( tbb::internal::FLOW_ASYNC_NODE, &this->graph_node::my_graph, static_cast<receiver<input_type> *>(this), this->output_ports() );\n    }\n\n    virtual ~async_node() {}\n\n    /* override */ async_gateway_type& async_gateway() {\n        return static_cast< async_gateway_type& >(*this);\n    }\n\n    //! Implements async_gateway::async_try_put for an external activity to submit a message to FG\n    /*override*/ bool async_try_put(const output_type &i ) {\n        internal::multifunction_output<output_type> &port_0 = internal::output_port<0>(*this);\n        graph &g = this->graph_node::my_graph;\n        tbb::internal::fgt_async_try_put_begin(static_cast<receiver<input_type> *>(this), &port_0);\n        __TBB_ASSERT(g.my_task_arena && g.my_task_arena->is_active(), NULL);\n        try_put_functor tpf(port_0, i);\n        g.my_task_arena->execute(tpf);\n        tbb::internal::fgt_async_try_put_end(static_cast<receiver<input_type> *>(this), &port_0);\n        return tpf.result;\n    }\n\n    /*override*/ void async_reserve() {\n        this->graph_node::my_graph.increment_wait_count();\n        tbb::internal::fgt_async_reserve(static_cast<receiver<input_type> *>(this), &this->graph_node::my_graph);\n    }\n\n    /*override*/ void async_commit() {\n        this->graph_node::my_graph.decrement_wait_count();\n        tbb::internal::fgt_async_commit(static_cast<receiver<input_type> *>(this), &this->graph_node::my_graph);\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n    /* override */ void set_name( const char *name ) {\n            tbb::internal::fgt_node_desc( this, name );\n    }\n#endif\n\n    // Define sender< Output >\n\n    //! Add a new successor to this node\n    /* override */ bool register_successor( successor_type &r ) {\n        return internal::output_port<0>(*this).register_successor(r);\n    }\n\n    //! Removes a successor from this node\n    /* override */  bool remove_successor( successor_type &r ) {\n        return internal::output_port<0>(*this).remove_successor(r);\n    }\n\n    template<typename Body>\n    Body copy_function_object() {\n        typedef internal::multifunction_body<input_type, typename base_type::output_ports_type> mfn_body_type;\n        typedef internal::async_body<Input, typename base_type::output_ports_type, async_gateway_type, Body> async_body_type;\n        mfn_body_type &body_ref = *this->my_body;\n        async_body_type ab = dynamic_cast< internal::multifunction_body_leaf<input_type, typename base_type::output_ports_type, async_body_type> & >(body_ref).get_body();\n        return ab.get_body();\n    }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    //! interface to record edges for traversal & deletion\n    typedef typename  internal::edge_container<successor_type> built_successors_type;\n    typedef typename  built_successors_type::edge_list_type successor_list_type;\n    /* override */ built_successors_type &built_successors() {\n        return internal::output_port<0>(*this).built_successors();\n    }\n\n    /* override */ void    internal_add_built_successor( successor_type &r ) {\n        internal::output_port<0>(*this).internal_add_built_successor(r);\n    }\n\n    /* override */ void    internal_delete_built_successor( successor_type &r ) {\n        internal::output_port<0>(*this).internal_delete_built_successor(r);\n    }\n\n    /* override */ void    copy_successors( successor_list_type &l ) {\n        internal::output_port<0>(*this).copy_successors(l);\n    }\n\n    /* override */ size_t  successor_count() {\n        return internal::output_port<0>(*this).successor_count();\n    }\n#endif\n\nprotected:\n\n    /*override*/ void reset_node( reset_flags f) {\n       base_type::reset_node(f);\n    }\n\n};\n\n#endif // __TBB_PREVIEW_ASYNC_NODE\n\n} // interface8\n\n    using interface8::reset_flags;\n    using interface8::rf_reset_protocol;\n    using interface8::rf_reset_bodies;\n    using interface8::rf_clear_edges;\n\n    using interface8::graph;\n    using interface8::graph_node;\n    using interface8::continue_msg;\n\n    using interface8::source_node;\n    using interface8::function_node;\n    using interface8::multifunction_node;\n    using interface8::split_node;\n    using interface8::internal::output_port;\n    using interface8::indexer_node;\n    using interface8::internal::tagged_msg;\n    using interface8::internal::cast_to;\n    using interface8::internal::is_a;\n    using interface8::continue_node;\n    using interface8::overwrite_node;\n    using interface8::write_once_node;\n    using interface8::broadcast_node;\n    using interface8::buffer_node;\n    using interface8::queue_node;\n    using interface8::sequencer_node;\n    using interface8::priority_queue_node;\n    using interface8::limiter_node;\n    using namespace interface8::internal::graph_policy_namespace;\n    using interface8::join_node;\n    using interface8::input_port;\n    using interface8::copy_body;\n    using interface8::make_edge;\n    using interface8::remove_edge;\n    using interface8::internal::tag_value;\n#if __TBB_FLOW_GRAPH_CPP11_FEATURES\n     using interface8::composite_node;\n#endif\n#if __TBB_PREVIEW_ASYNC_NODE\n    using interface8::async_node;\n#endif\n} // flow\n} // tbb\n\n#undef __TBB_PFG_RESET_ARG\n#undef __TBB_COMMA\n\n#endif // __TBB_flow_graph_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/flow_graph_opencl_node.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_flow_graph_opencl_node_H\n#define __TBB_flow_graph_opencl_node_H\n\n#include \"tbb/tbb_config.h\"\n#if __TBB_PREVIEW_OPENCL_NODE\n\n#include \"flow_graph.h\"\n\n#include <vector>\n#include <string>\n#include <algorithm>\n#include <iostream>\n#include <fstream>\n#include <map>\n#include <array>\n#include <mutex>\n#include <unordered_map>\n\n#ifdef __APPLE__\n#include <OpenCL/opencl.h>\n#else\n#include <CL/cl.h>\n#endif\n\nnamespace tbb {\nnamespace flow {\n\nnamespace interface8 {\n\nclass opencl_foundation;\nclass opencl_device_list;\n\ntemplate <typename Factory>\nclass opencl_buffer_impl;\n\nclass default_opencl_factory;\n\nclass opencl_graph : public graph {\npublic:\n    //! Constructs a graph with isolated task_group_context\n    opencl_graph() : my_opencl_foundation( NULL ) {}\n    //! Constructs a graph with an user context\n    explicit opencl_graph( task_group_context& context ) : graph( context ), my_opencl_foundation( NULL ) {}\n    //! Destroys a graph\n    ~opencl_graph();\n    //! Available devices\n    const opencl_device_list& available_devices();\n    default_opencl_factory& opencl_factory();\nprotected:\n    opencl_foundation *my_opencl_foundation;\n    opencl_foundation &get_opencl_foundation();\n\n    template <typename T, typename Factory>\n    friend class opencl_buffer;\n    template <cl_channel_order channel_order, cl_channel_type channel_type, typename Factory>\n    friend class opencl_image2d;\n    template<typename... Args>\n    friend class opencl_node;\n    template <typename DeviceFilter>\n    friend class opencl_factory;\n};\n\ntemplate <typename T, typename Factory>\nclass dependency_msg;\n\ntemplate< typename T, typename Factory >\nclass proxy_dependency_receiver;\n\ntemplate< typename T, typename Factory >\nclass receiver<dependency_msg<T, Factory>> {\npublic:\n    //! The predecessor type for this node\n    typedef sender<dependency_msg<T, Factory>> predecessor_type;\n    typedef proxy_dependency_receiver<T, Factory> proxy;\n\n    receiver() : my_ordinary_receiver( *this ) {}\n\n    //! Put an item to the receiver\n    bool try_put( const T& t ) {\n        return my_ordinary_receiver.try_put(t);\n    }\n\n    //! Put an item to the receiver\n    virtual task *try_put_task( const dependency_msg<T, Factory>& ) = 0;\n\n    //! Add a predecessor to the node\n    virtual bool register_predecessor( predecessor_type & ) { return false; }\n\n    //! Remove a predecessor from the node\n    virtual bool remove_predecessor( predecessor_type & ) { return false; }\n\nprotected:\n    //! put receiver back in initial state\n    virtual void reset_receiver( reset_flags f = rf_reset_protocol ) = 0;\n    virtual bool is_continue_receiver() { return false; }\nprivate:\n    class ordinary_receiver : public receiver < T >, tbb::internal::no_assign {\n        //! The predecessor type for this node\n        typedef sender<T> predecessor_type;\n        typedef sender<dependency_msg<T, Factory>> dependency_predecessor_type;\n    public:\n        ordinary_receiver(receiver<dependency_msg<T, Factory>>& owner) : my_owner(owner) {}\n\n        //! Put an item to the receiver\n        /* override */ task *try_put_task( const T& t ) {\n            return my_owner.try_put_task( dependency_msg<T, Factory>( t ) );\n        }\n\n        //! Add a predecessor to the node\n        /* override */ bool register_predecessor( predecessor_type &p ) {\n            tbb::spin_mutex::scoped_lock lock( my_predecessor_map_mutex );\n            typename predecessor_map_type::iterator it = my_predecessor_map.emplace( std::piecewise_construct_t(), std::make_tuple( &p ), std::tie( p ) );\n            if ( !my_owner.register_predecessor( it->second ) ) {\n                my_predecessor_map.erase( it );\n                return false;\n            }\n            return true;\n        }\n\n        //! Remove a predecessor from the node\n        /* override */ bool remove_predecessor( predecessor_type &p ) {\n            tbb::spin_mutex::scoped_lock lock( my_predecessor_map_mutex );\n            typename predecessor_map_type::iterator it = my_predecessor_map.find( &p );\n            __TBB_ASSERT( it != my_predecessor_map.end(), \"Failed to find the predecessor\" );\n            if ( !my_owner.remove_predecessor( it->second ) )\n                return false;\n            my_predecessor_map.erase( it );\n            return true;\n        }\n\n    protected:\n        //! put receiver back in initial state\n        /* override */ void reset_receiver( reset_flags f = rf_reset_protocol ) {\n            my_owner.reset_receiver( f );\n        };\n        /* override */ bool is_continue_receiver() {\n            return my_owner.is_continue_receiver();\n        }\n\n    private:\n        receiver<dependency_msg<T, Factory>>& my_owner;\n\n        typedef std::multimap<predecessor_type*, typename dependency_predecessor_type::proxy> predecessor_map_type;\n        predecessor_map_type my_predecessor_map;\n        tbb::spin_mutex my_predecessor_map_mutex;\n    };\n    ordinary_receiver my_ordinary_receiver;\npublic:\n    ordinary_receiver& ordinary_receiver() { return my_ordinary_receiver; }\n};\n\ntemplate< typename T, typename Factory >\nclass proxy_dependency_sender;\n\ntemplate< typename T, typename Factory >\nclass proxy_dependency_receiver : public receiver < dependency_msg<T, Factory> >, tbb::internal::no_assign {\npublic:\n    typedef sender<dependency_msg<T, Factory>> predecessor_type;\n\n    proxy_dependency_receiver( receiver<T>& r ) : my_r( r ) {}\n\n    //! Put an item to the receiver\n    /* override */ task *try_put_task( const dependency_msg<T, Factory> &d ) {\n        receive_if_memory_object( d );\n        receiver<T> *r = &my_r;\n        d.register_callback( [r]( const T& t ) {\n            r->try_put( t );\n        } );\n        d.clear_event();\n        return SUCCESSFULLY_ENQUEUED;\n    }\n\n    //! Add a predecessor to the node\n    /* override */ bool register_predecessor( predecessor_type &s ) {\n        return my_r.register_predecessor( s.ordinary_sender() );\n    }\n    //! Remove a predecessor from the node\n    /* override */ bool remove_predecessor( predecessor_type &s ) {\n        return my_r.remove_predecessor( s.ordinary_sender() );\n    }\nprotected:\n    //! put receiver back in initial state\n    /* override */ void reset_receiver( reset_flags f = rf_reset_protocol ) {\n        my_r.reset_receiver( f );\n    };\n\n    /* override */ bool is_continue_receiver() {\n        return my_r.is_continue_receiver();\n    }\nprivate:\n    receiver<T> &my_r;\n};\n\ntemplate< typename T, typename Factory >\nclass sender<dependency_msg<T, Factory>> {\npublic:\n    sender() : my_ordinary_sender( *this ) {}\n\n    //! The successor type for this sender\n    typedef receiver<dependency_msg<T, Factory>> successor_type;\n    typedef proxy_dependency_sender<T, Factory> proxy;\n\n    //! Add a new successor to this node\n    virtual bool register_successor( successor_type &r ) = 0;\n\n    //! Removes a successor from this node\n    virtual bool remove_successor( successor_type &r ) = 0;\n\n    //! Request an item from the sender\n    virtual bool try_get( dependency_msg<T, Factory> & ) { return false; }\n\n    //! Reserves an item in the sender\n    virtual bool try_reserve( dependency_msg<T, Factory> & ) { return false; }\nprivate:\n    class ordinary_sender : public sender < T >, tbb::internal::no_assign {\n        //! The successor type for this sender\n        typedef receiver<T> successor_type;\n        typedef receiver<dependency_msg<T, Factory>> dependency_successor_type;\n    public:\n        ordinary_sender(sender<dependency_msg<T, Factory>>& owner) : my_owner(owner) {}\n\n        //! Add a new successor to this node\n        /* override */ bool register_successor( successor_type &r ) {\n            tbb::spin_mutex::scoped_lock lock( my_successor_map_mutex );\n            typename successor_map_type::iterator it = my_successor_map.emplace( std::piecewise_construct_t(), std::make_tuple( &r ), std::tie( r ) );\n            if ( !my_owner.register_successor( it->second ) ) {\n                my_successor_map.erase( it );\n                return false;\n            }\n            return true;\n        }\n\n        //! Removes a successor from this node\n        /* override */ bool remove_successor( successor_type &r ) {\n            tbb::spin_mutex::scoped_lock lock( my_successor_map_mutex );\n            typename successor_map_type::iterator it = my_successor_map.find( &r );\n            __TBB_ASSERT( it != my_successor_map.end(), \"The predecessor has already been registered\" );\n            if ( !my_owner.remove_successor( it->second ) )\n                return false;\n            my_successor_map.erase( it );\n            return true;\n        }\n\n        //! Request an item from the sender\n        /* override */ bool try_get( T &t ) {\n            dependency_msg<T, Factory> d;\n            if ( my_owner.try_get( d ) ) {\n                t = d.data();\n                return true;\n            }\n            return false;\n        }\n\n        /* override */ bool try_reserve( T &t ) {\n            dependency_msg<T, Factory> d;\n            if ( my_owner.try_reserve( d ) ) {\n                t = d.data();\n                return true;\n            }\n            return false;\n        }\n\n        bool has_host_successors() {\n            tbb::spin_mutex::scoped_lock lock( my_successor_map_mutex );\n            return !my_successor_map.empty();\n        }\n    private:\n        sender<dependency_msg<T, Factory>>& my_owner;\n\n        typedef std::multimap<successor_type*, typename dependency_successor_type::proxy> successor_map_type;\n        successor_map_type my_successor_map;\n        tbb::spin_mutex my_successor_map_mutex;\n    };\n    ordinary_sender my_ordinary_sender;\npublic:\n    ordinary_sender& ordinary_sender() { return my_ordinary_sender; }\n\n    bool has_host_successors() {\n        return my_ordinary_sender.has_host_successors();\n    }\n};\n\ntemplate< typename T, typename Factory >\nclass proxy_dependency_sender : public sender < dependency_msg<T, Factory> >, tbb::internal::no_assign {\npublic:\n    typedef receiver<dependency_msg<T, Factory>> successor_type;\n\n    proxy_dependency_sender( sender<T>& s ) : my_s( s ) {}\n\n    //! Add a new successor to this node\n    /* override */ bool register_successor( successor_type &r ) {\n        return my_s.register_successor( r.ordinary_receiver() );\n    }\n\n    //! Removes a successor from this node\n    /* override */ bool remove_successor( successor_type &r ) {\n        return my_s.remove_successor( r.ordinary_receiver() );\n    }\n\n    //! Request an item from the sender\n    /* override */ bool try_get( dependency_msg<T, Factory> &d ) {\n        return my_s.try_get( d.data() );\n    }\n\n    //! Reserves an item in the sender\n    /* override */ bool try_reserve( dependency_msg<T, Factory> &d ) {\n        return my_s.try_reserve( d.data() );\n    }\n\n    //! Releases the reserved item\n    /* override */ bool try_release() {\n        return my_s.try_release();\n    }\n\n    //! Consumes the reserved item\n    /* override */ bool try_consume() {\n        return my_s.try_consume();\n    }\nprivate:\n    sender<T> &my_s;\n};\n\ntemplate<typename T, typename Factory>\ninline void make_edge( sender<T> &s, receiver<dependency_msg<T, Factory>> &r ) {\n    make_edge( s, r.ordinary_receiver() );\n}\n\ntemplate<typename T, typename Factory>\ninline void make_edge( sender<dependency_msg<T, Factory>> &s, receiver<T> &r ) {\n    make_edge( s.ordinary_sender(), r );\n}\n\ntemplate<typename T, typename Factory>\ninline void remove_edge( sender<T> &s, receiver<dependency_msg<T, Factory>> &r ) {\n    remove_edge( s, r.ordinary_receiver() );\n}\n\ntemplate<typename T, typename Factory>\ninline void remove_edge( sender<dependency_msg<T, Factory>> &s, receiver<T> &r ) {\n    remove_edge( s.ordinary_sender(), r );\n}\n\ninline void enforce_cl_retcode( cl_int err, std::string msg ) {\n    if ( err != CL_SUCCESS ) {\n        std::cerr << msg << std::endl;\n        throw msg;\n    }\n}\n\ntemplate <typename T>\nT event_info( cl_event e, cl_event_info i ) {\n    T res;\n    enforce_cl_retcode( clGetEventInfo( e, i, sizeof( res ), &res, NULL ), \"Failed to get OpenCL event information\" );\n    return res;\n}\n\ntemplate <typename T>\nT device_info( cl_device_id d, cl_device_info i ) {\n    T res;\n    enforce_cl_retcode( clGetDeviceInfo( d, i, sizeof( res ), &res, NULL ), \"Failed to get OpenCL device information\" );\n    return res;\n}\ntemplate <>\nstd::string device_info<std::string>( cl_device_id d, cl_device_info i ) {\n    size_t required;\n    enforce_cl_retcode( clGetDeviceInfo( d, i, 0, NULL, &required ), \"Failed to get OpenCL device information\" );\n\n    char *buff = (char*)alloca( required );\n    enforce_cl_retcode( clGetDeviceInfo( d, i, required, buff, NULL ), \"Failed to get OpenCL device information\" );\n\n    return buff;\n}\ntemplate <typename T>\nT platform_info( cl_platform_id p, cl_platform_info i ) {\n    T res;\n    enforce_cl_retcode( clGetPlatformInfo( p, i, sizeof( res ), &res, NULL ), \"Failed to get OpenCL platform information\" );\n    return res;\n}\ntemplate <>\nstd::string platform_info<std::string>( cl_platform_id p, cl_platform_info  i ) {\n    size_t required;\n    enforce_cl_retcode( clGetPlatformInfo( p, i, 0, NULL, &required ), \"Failed to get OpenCL platform information\" );\n\n    char *buff = (char*)alloca( required );\n    enforce_cl_retcode( clGetPlatformInfo( p, i, required, buff, NULL ), \"Failed to get OpenCL platform information\" );\n\n    return buff;\n}\n\n\nclass opencl_device {\npublic:\n    typedef size_t device_id_type;\n    enum : device_id_type {\n        unknown = device_id_type( -2 ),\n        host = device_id_type( -1 )\n    };\n\n    opencl_device() : my_device_id( unknown ) {}\n\n    opencl_device( cl_device_id cl_d_id, device_id_type device_id ) : my_device_id( device_id ), my_cl_device_id( cl_d_id ) {}\n\n    std::string platform_profile() const {\n        return platform_info<std::string>( platform(), CL_PLATFORM_PROFILE );\n    }\n    std::string platform_version() const {\n        return platform_info<std::string>( platform(), CL_PLATFORM_VERSION );\n    }\n    std::string platform_name() const {\n        return platform_info<std::string>( platform(), CL_PLATFORM_NAME );\n    }\n    std::string platform_vendor() const {\n        return platform_info<std::string>( platform(), CL_PLATFORM_VENDOR );\n    }\n    std::string platform_extensions() const {\n        return platform_info<std::string>( platform(), CL_PLATFORM_EXTENSIONS );\n    }\n\n    template <typename T>\n    void info( cl_device_info i, T &t ) const {\n        t = device_info<T>( my_cl_device_id, i );\n    }\n    std::string version() const {\n        // The version string format: OpenCL<space><major_version.minor_version><space><vendor-specific information>\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_VERSION );\n    }\n    int major_version() const {\n        int major;\n        std::sscanf( version().c_str(), \"OpenCL %d\", &major );\n        return major;\n    }\n    int minor_version() const {\n        int major, minor;\n        std::sscanf( version().c_str(), \"OpenCL %d.%d\", &major, &minor );\n        return minor;\n    }\n    bool out_of_order_exec_mode_on_host_present() const {\n#if CL_VERSION_2_0\n        if ( major_version() >= 2 )\n            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_ON_HOST_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;\n        else\n#endif /* CL_VERSION_2_0 */\n            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;\n    }\n    bool out_of_order_exec_mode_on_device_present() const {\n#if CL_VERSION_2_0\n        if ( major_version() >= 2 )\n            return (device_info<cl_command_queue_properties>( my_cl_device_id, CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES ) & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0;\n        else\n#endif /* CL_VERSION_2_0 */\n            return false;\n    }\n    std::array<size_t, 3> max_work_item_sizes() const {\n        return device_info<std::array<size_t, 3>>( my_cl_device_id, CL_DEVICE_MAX_WORK_ITEM_SIZES );\n    }\n    size_t max_work_group_size() const {\n        return device_info<size_t>( my_cl_device_id, CL_DEVICE_MAX_WORK_GROUP_SIZE );\n    }\n    bool built_in_kernel_available( const std::string& k ) const {\n        const std::string semi = \";\";\n        // Added semicolumns to force an exact match (to avoid a partial match, e.g. \"add\" is partly matched with \"madd\").\n        return (semi + built_in_kernels() + semi).find( semi + k + semi ) != std::string::npos;\n    }\n    std::string built_in_kernels() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_BUILT_IN_KERNELS );\n    }\n    std::string name() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_NAME );\n    }\n    cl_bool available() const {\n        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_AVAILABLE );\n    }\n    cl_bool compiler_available() const {\n        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_COMPILER_AVAILABLE );\n    }\n    cl_bool linker_available() const {\n        return device_info<cl_bool>( my_cl_device_id, CL_DEVICE_LINKER_AVAILABLE );\n    }\n    bool extension_available( const std::string &ext ) const {\n        const std::string space = \" \";\n        // Added space to force an exact match (to avoid a partial match, e.g. \"ext\" is partly matched with \"ext2\").\n        return (space + extensions() + space).find( space + ext + space ) != std::string::npos;\n    }\n    std::string extensions() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_EXTENSIONS );\n    }\n\n    cl_device_type type() const {\n        return device_info<cl_device_type>( my_cl_device_id, CL_DEVICE_TYPE );\n    }\n\n    std::string vendor() const {\n        return device_info<std::string>( my_cl_device_id, CL_DEVICE_VENDOR );\n    }\n\n    cl_uint address_bits() const {\n        return device_info<cl_uint>( my_cl_device_id, CL_DEVICE_ADDRESS_BITS );\n    }\n\n    cl_device_id device_id() const {\n        return my_cl_device_id;\n    }\n\n    cl_command_queue command_queue() const {\n        return my_cl_command_queue;\n    }\n\n    void set_command_queue( cl_command_queue cmd_queue ) {\n        my_cl_command_queue = cmd_queue;\n    }\n\nprivate:\n    opencl_device( cl_device_id d_id ) : my_device_id( unknown ), my_cl_device_id( d_id ) {}\n\n    cl_platform_id platform() const {\n        return device_info<cl_platform_id>( my_cl_device_id, CL_DEVICE_PLATFORM );\n    }\n\n    device_id_type my_device_id;\n    cl_device_id my_cl_device_id;\n    cl_command_queue my_cl_command_queue;\n\n    friend bool operator==(opencl_device d1, opencl_device d2) { return d1.my_cl_device_id == d2.my_cl_device_id; }\n\n    template <typename DeviceFilter>\n    friend class opencl_factory;\n    template <typename Factory>\n    friend class opencl_memory;\n    template <typename Factory>\n    friend class opencl_program;\n    friend class opencl_foundation;\n\n#if TBB_USE_ASSERT\n    template <typename T, typename Factory>\n    friend class opencl_buffer;\n#endif\n};\n\nclass opencl_device_list {\n    typedef std::vector<opencl_device> container_type;\npublic:\n    typedef container_type::iterator iterator;\n    typedef container_type::const_iterator const_iterator;\n    typedef container_type::size_type size_type;\n\n    opencl_device_list() {}\n    opencl_device_list( std::initializer_list<opencl_device> il ) : my_container( il ) {}\n\n    void add( opencl_device d ) { my_container.push_back( d ); }\n    size_type size() const { return my_container.size(); }\n    iterator begin() { return my_container.begin(); }\n    iterator end() { return my_container.end(); }\n    const_iterator begin() const { return my_container.begin(); }\n    const_iterator end() const { return my_container.end(); }\n    const_iterator cbegin() const { return my_container.cbegin(); }\n    const_iterator cend() const { return my_container.cend(); }\nprivate:\n    container_type my_container;\n};\n\nclass callback_base : tbb::internal::no_copy {\npublic:\n    virtual void call() const = 0;\n    virtual ~callback_base() {}\n};\n\ntemplate <typename Callback, typename T>\nclass callback : public callback_base {\n    graph &my_graph;\n    Callback my_callback;\n    T my_data;\npublic:\n    callback( graph &g, Callback c, const T& t ) : my_graph( g ), my_callback( c ), my_data( t ) {\n        // Extend the graph lifetime until the callback completion.\n        my_graph.increment_wait_count();\n    }\n    ~callback() {\n        // Release the reference to the graph.\n        my_graph.decrement_wait_count();\n    }\n    /* override */ void call() const {\n        my_callback( my_data );\n    }\n};\n\ntemplate <typename T, typename Factory = default_opencl_factory>\nclass dependency_msg {\npublic:\n    typedef T value_type;\n\n    dependency_msg() = default;\n    explicit dependency_msg( const T& data ) : my_data( data ) {}\n    dependency_msg( opencl_graph &g, const T& data ) : my_data( data ), my_graph( &g ) {}\n    dependency_msg( const T& data, cl_event event ) : my_data( data ), my_event( event ), my_is_event( true ) {\n        enforce_cl_retcode( clRetainEvent( my_event ), \"Failed to retain an event\" );\n    }\n    T& data( bool wait = true ) {\n        if ( my_is_event && wait ) {\n            enforce_cl_retcode( clWaitForEvents( 1, &my_event ), \"Failed to wait for an event\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n            my_is_event = false;\n        }\n        return my_data;\n    }\n\n    const T& data( bool wait = true ) const {\n        if ( my_is_event && wait ) {\n            enforce_cl_retcode( clWaitForEvents( 1, &my_event ), \"Failed to wait for an event\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n            my_is_event = false;\n        }\n        return my_data;\n    }\n\n    dependency_msg( const dependency_msg &dmsg ) : my_data( dmsg.my_data ), my_event( dmsg.my_event ), my_is_event( dmsg.my_is_event ), my_graph( dmsg.my_graph ) {\n        if ( my_is_event )\n            enforce_cl_retcode( clRetainEvent( my_event ), \"Failed to retain an event\" );\n    }\n\n    dependency_msg( dependency_msg &&dmsg ) : my_data( std::move(dmsg.my_data) ), my_event( dmsg.my_event ), my_is_event( dmsg.my_is_event ), my_graph( dmsg.my_graph ) {\n        dmsg.my_is_event = false;\n    }\n\n    dependency_msg& operator=(const dependency_msg &dmsg) {\n        my_data = dmsg.my_data;\n        my_event = dmsg.my_event;\n        my_is_event = dmsg.my_is_event;\n        my_graph = dmsg.my_graph;\n        if ( my_is_event )\n            enforce_cl_retcode( clRetainEvent( my_event ), \"Failed to retain an event\" );\n        return *this;\n    }\n\n    ~dependency_msg() {\n        if ( my_is_event )\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n    }\n\n    cl_event const * get_event() const { return my_is_event ? &my_event : NULL; }\n    void set_event( cl_event e ) const {\n        if ( my_is_event ) {\n            cl_command_queue cq = event_info<cl_command_queue>( my_event, CL_EVENT_COMMAND_QUEUE );\n            if ( cq != event_info<cl_command_queue>( e, CL_EVENT_COMMAND_QUEUE ) )\n                enforce_cl_retcode( clFlush( cq ), \"Failed to flush an OpenCL command queue\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n        }\n        my_is_event = true;\n        my_event = e;\n        clRetainEvent( my_event );\n    }\n\n    void set_graph( graph &g ) {\n        my_graph = &g;\n    }\n\n    void clear_event() const {\n        if ( my_is_event ) {\n            enforce_cl_retcode( clFlush( event_info<cl_command_queue>( my_event, CL_EVENT_COMMAND_QUEUE ) ), \"Failed to flush an OpenCL command queue\" );\n            enforce_cl_retcode( clReleaseEvent( my_event ), \"Failed to release an event\" );\n        }\n        my_is_event = false;\n    }\n\n    template <typename Callback>\n    void register_callback( Callback c ) const {\n        __TBB_ASSERT( my_is_event, \"The OpenCL event is not set\" );\n        __TBB_ASSERT( my_graph, \"The graph is not set\" );\n        enforce_cl_retcode( clSetEventCallback( my_event, CL_COMPLETE, register_callback_func, new callback<Callback, T>( *my_graph, c, my_data ) ), \"Failed to set an OpenCL callback\" );\n    }\n\n    operator T&() { return data(); }\n    operator const T&() const { return data(); }\n\nprivate:\n    static void CL_CALLBACK register_callback_func( cl_event, cl_int event_command_exec_status, void *data ) {\n        tbb::internal::suppress_unused_warning( event_command_exec_status );\n        __TBB_ASSERT( event_command_exec_status == CL_COMPLETE, NULL );\n        __TBB_ASSERT( data, NULL );\n        callback_base *c = static_cast<callback_base*>(data);\n        c->call();\n        delete c;\n    }\n\n    T my_data;\n    mutable cl_event my_event;\n    mutable bool my_is_event = false;\n    graph *my_graph = NULL;\n};\n\ntemplate <typename K, typename T, typename Factory>\nK key_from_message( const dependency_msg<T, Factory> &dmsg ) {\n    using tbb::flow::key_from_message;\n    const T &t = dmsg.data( false );\n    __TBB_STATIC_ASSERT( true, \"\" );\n    return key_from_message<K, T>( t );\n}\n\ntemplate <typename Factory>\nclass opencl_memory {\npublic:\n    opencl_memory() {}\n    opencl_memory( Factory &f ) : my_host_ptr( NULL ), my_factory( &f ), my_sending_event_present( false ) {\n        my_curr_device_id = my_factory->devices().begin()->my_device_id;\n    }\n\n    ~opencl_memory() {\n        if ( my_sending_event_present ) enforce_cl_retcode( clReleaseEvent( my_sending_event ), \"Failed to release an event for the OpenCL buffer\" );\n        enforce_cl_retcode( clReleaseMemObject( my_cl_mem ), \"Failed to release an memory object\" );\n    }\n\n    cl_mem get_cl_mem() const {\n        return my_cl_mem;\n    }\n\n    void* get_host_ptr() {\n        if ( !my_host_ptr ) {\n            dependency_msg<void*, Factory> d = receive( NULL );\n            d.data();\n            __TBB_ASSERT( d.data() == my_host_ptr, NULL );\n        }\n        return my_host_ptr;\n    }\n\n    Factory *factory() const { return my_factory; }\n\n    dependency_msg<void*, Factory> send( opencl_device d, const cl_event *e );\n    dependency_msg<void*, Factory> receive( const cl_event *e );\n    virtual void map_memory( opencl_device, dependency_msg<void*, Factory> & ) = 0;\nprotected:\n    cl_mem my_cl_mem;\n    tbb::atomic<opencl_device::device_id_type> my_curr_device_id;\n    void* my_host_ptr;\n    Factory *my_factory;\n\n    tbb::spin_mutex my_sending_lock;\n    bool my_sending_event_present;\n    cl_event my_sending_event;\n};\n\ntemplate <typename Factory>\nclass opencl_buffer_impl : public opencl_memory<Factory> {\n    size_t my_size;\npublic:\n    opencl_buffer_impl( size_t size, Factory& f ) : opencl_memory<Factory>( f ), my_size( size ) {\n        cl_int err;\n        this->my_cl_mem = clCreateBuffer( this->my_factory->context(), CL_MEM_ALLOC_HOST_PTR, size, NULL, &err );\n        enforce_cl_retcode( err, \"Failed to create an OpenCL buffer\" );\n    }\n\n    // The constructor for subbuffers.\n    opencl_buffer_impl( cl_mem m, size_t index, size_t size, Factory& f ) : opencl_memory<Factory>( f ), my_size( size ) {\n        cl_int err;\n        cl_buffer_region region = { index, size };\n        this->my_cl_mem = clCreateSubBuffer( m, 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &err );\n        enforce_cl_retcode( err, \"Failed to create an OpenCL subbuffer\" );\n    }\n\n    size_t size() const {\n        return my_size;\n    }\n\n    /* override */ void map_memory( opencl_device device, dependency_msg<void*, Factory> &dmsg ) {\n        this->my_factory->enque_map_buffer( device, *this, dmsg );\n    }\n\n#if TBB_USE_ASSERT\n    template <typename, typename>\n    friend class opencl_buffer;\n#endif\n};\n\nenum access_type {\n    read_write,\n    write_only,\n    read_only\n};\n\ntemplate <typename T, typename Factory = default_opencl_factory>\nclass opencl_subbuffer;\n\ntemplate <typename T, typename Factory = default_opencl_factory>\nclass opencl_buffer {\npublic:\n    typedef cl_mem native_object_type;\n    typedef opencl_buffer memory_object_type;\n    typedef Factory opencl_factory_type;\n\n    template<access_type a> using iterator = T*;\n\n    template <access_type a>\n    iterator<a> access() const {\n        T* ptr = (T*)my_impl->get_host_ptr();\n        __TBB_ASSERT( ptr, NULL );\n        return iterator<a>( ptr );\n    }\n\n    T* data() const { return &access<read_write>()[0]; }\n\n    template <access_type a = read_write>\n    iterator<a> begin() const { return access<a>(); }\n\n    template <access_type a = read_write>\n    iterator<a> end() const { return access<a>()+my_impl->size()/sizeof(T); }\n\n    size_t size() const { return my_impl->size()/sizeof(T); }\n\n    T& operator[] ( ptrdiff_t k ) { return begin()[k]; }\n\n    opencl_buffer() {}\n    opencl_buffer( opencl_graph &g, size_t size );\n    opencl_buffer( Factory &f, size_t size ) : my_impl( std::make_shared<impl_type>( size*sizeof(T), f ) ) {}\n\n    cl_mem native_object() const {\n        return my_impl->get_cl_mem();\n    }\n\n    const opencl_buffer& memory_object() const {\n        return *this;\n    }\n\n    void send( opencl_device device, dependency_msg<opencl_buffer, Factory> &dependency ) const {\n        __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );\n        dependency_msg<void*, Factory> d = my_impl->send( device, dependency.get_event() );\n        const cl_event *e = d.get_event();\n        if ( e ) dependency.set_event( *e );\n        else dependency.clear_event();\n    }\n    void receive( const dependency_msg<opencl_buffer, Factory> &dependency ) const {\n        __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );\n        dependency_msg<void*, Factory> d = my_impl->receive( dependency.get_event() );\n        const cl_event *e = d.get_event();\n        if ( e ) dependency.set_event( *e );\n        else dependency.clear_event();\n    }\n\n    opencl_subbuffer<T, Factory> subbuffer( size_t index, size_t size ) const;\nprivate:\n    // The constructor for subbuffers.\n    opencl_buffer( Factory &f, cl_mem m, size_t index, size_t size ) : my_impl( std::make_shared<impl_type>( m, index*sizeof(T), size*sizeof(T), f ) ) {}\n\n    typedef opencl_buffer_impl<Factory> impl_type;\n\n    std::shared_ptr<impl_type> my_impl;\n\n    friend bool operator==(const opencl_buffer<T, Factory> &lhs, const opencl_buffer<T, Factory> &rhs) {\n        return lhs.my_impl == rhs.my_impl;\n    }\n\n    template <typename>\n    friend class opencl_factory;\n    template <typename, typename>\n    friend class opencl_subbuffer;\n};\n\ntemplate <typename T, typename Factory>\nclass opencl_subbuffer : public opencl_buffer<T, Factory> {\n    opencl_buffer<T, Factory> my_owner;\npublic:\n    opencl_subbuffer() {}\n    opencl_subbuffer( const opencl_buffer<T, Factory> &owner, size_t index, size_t size ) :\n        opencl_buffer<T, Factory>( *owner.my_impl->factory(), owner.native_object(), index, size ), my_owner( owner ) {}\n};\n\ntemplate <typename T, typename Factory>\nopencl_subbuffer<T, Factory> opencl_buffer<T, Factory>::subbuffer( size_t index, size_t size ) const {\n    return opencl_subbuffer<T, Factory>( *this, index, size );\n}\n\n\ntemplate <typename DeviceFilter>\nclass opencl_factory {\npublic:\n    opencl_factory( opencl_graph &g ) : my_graph( g ) {}\n    ~opencl_factory() {\n        if ( my_devices.size() ) {\n            for ( opencl_device d : my_devices ) {\n                enforce_cl_retcode( clReleaseCommandQueue( d.my_cl_command_queue ), \"Failed to release a command queue\" );\n            }\n            enforce_cl_retcode( clReleaseContext( my_cl_context ), \"Failed to release a context\" );\n        }\n    }\n\n    bool init( const opencl_device_list &device_list ) {\n        tbb::spin_mutex::scoped_lock lock( my_devices_mutex );\n        if ( !my_devices.size() ) {\n            my_devices = device_list;\n            return true;\n        }\n        return false;\n    }\n\n\nprivate:\n    template <typename Factory>\n    void enque_map_buffer( opencl_device device, opencl_buffer_impl<Factory> &buffer, dependency_msg<void*, Factory>& dmsg ) {\n        cl_event const* e1 = dmsg.get_event();\n        cl_event e2;\n        cl_int err;\n        void *ptr = clEnqueueMapBuffer( device.my_cl_command_queue, buffer.get_cl_mem(), false, CL_MAP_READ | CL_MAP_WRITE, 0, buffer.size(),\n            e1 == NULL ? 0 : 1, e1, &e2, &err );\n        enforce_cl_retcode( err, \"Failed to map a buffer\" );\n        dmsg.data( false ) = ptr;\n        dmsg.set_event( e2 );\n        enforce_cl_retcode( clReleaseEvent( e2 ), \"Failed to release an event\" );\n    }\n\n\n    template <typename Factory>\n    void enque_unmap_buffer( opencl_device device, opencl_memory<Factory> &memory, dependency_msg<void*, Factory>& dmsg ) {\n        cl_event const* e1 = dmsg.get_event();\n        cl_event e2;\n        enforce_cl_retcode(\n            clEnqueueUnmapMemObject( device.my_cl_command_queue, memory.get_cl_mem(), memory.get_host_ptr(), e1 == NULL ? 0 : 1, e1, &e2 ),\n           \"Failed to unmap a buffer\" );\n        dmsg.set_event( e2 );\n        enforce_cl_retcode( clReleaseEvent( e2 ), \"Failed to release an event\" );\n    }\n\n    template <typename GlbNDRange, typename LclNDRange>\n    cl_event enqueue_kernel( opencl_device device, cl_kernel kernel,\n        GlbNDRange&& global_work_size, LclNDRange&& local_work_size, cl_uint num_events, cl_event* event_list ) {\n        auto g_it = global_work_size.begin();\n        auto l_it = local_work_size.begin();\n        __TBB_ASSERT( g_it != global_work_size.end() , \"Empty global work size\" );\n        __TBB_ASSERT( l_it != local_work_size.end() , \"Empty local work size\" );\n        std::array<size_t, 3> g_size, l_size, g_offset = { { 0, 0, 0 } };\n        cl_uint s;\n        for ( s = 0; s < 3 && g_it != global_work_size.end() && l_it != local_work_size.end(); ++s ) {\n            g_size[s] = *g_it++;\n            l_size[s] = *l_it++;\n        }\n        cl_event event;\n        enforce_cl_retcode(\n            clEnqueueNDRangeKernel( device.my_cl_command_queue, kernel, s,\n                g_offset.data(), g_size.data(), l_size[0] ? l_size.data() : NULL, num_events, num_events ? event_list : NULL, &event ),\n            \"Failed to enqueue a kernel\" );\n        return event;\n    }\n\n    void flush( opencl_device device ) {\n        enforce_cl_retcode( clFlush( device.my_cl_command_queue ), \"Failed to flush an OpenCL command queue\" );\n    }\n\n    const opencl_device_list& devices() {\n        std::call_once( my_once_flag, &opencl_factory::init_once, this );\n        return my_devices;\n    }\n\n    bool is_same_context( opencl_device::device_id_type d1, opencl_device::device_id_type d2 ) {\n        __TBB_ASSERT( d1 != opencl_device::unknown && d2 != opencl_device::unknown, NULL );\n        // Currently, factory supports only one context so if the both devices are not host it means the are in the same context.\n        if ( d1 != opencl_device::host && d2 != opencl_device::host )\n            return true;\n        return d1 == d2;\n    }\n\n    opencl_factory( const opencl_factory& );\n    opencl_factory& operator=(const opencl_factory&);\n\n    cl_context context() {\n        std::call_once( my_once_flag, &opencl_factory::init_once, this );\n        return my_cl_context;\n    }\n\n    void init_once();\n\n    std::once_flag my_once_flag;\n    opencl_device_list my_devices;\n    cl_context my_cl_context;\n    opencl_graph &my_graph;\n\n    tbb::spin_mutex my_devices_mutex;\n\n    template <typename Factory>\n    friend class opencl_program;\n    template <typename Factory>\n    friend class opencl_buffer_impl;\n    template <typename Factory>\n    friend class opencl_memory;\n    template <typename... Args>\n    friend class opencl_node;\n};\n\ntemplate <typename Factory>\ndependency_msg<void*, Factory> opencl_memory<Factory>::receive( const cl_event *e ) {\n    dependency_msg<void*, Factory> d = e ? dependency_msg<void*, Factory>( my_host_ptr, *e ) : dependency_msg<void*, Factory>( my_host_ptr );\n    // Concurrent receives are prohibited so we do not worry about synchronization.\n    if ( my_curr_device_id.load<tbb::relaxed>() != opencl_device::host ) {\n        map_memory( *my_factory->devices().begin(), d );\n        my_curr_device_id.store<tbb::relaxed>( opencl_device::host );\n        my_host_ptr = d.data( false );\n    }\n    // Release the sending event\n    if ( my_sending_event_present ) {\n        enforce_cl_retcode( clReleaseEvent( my_sending_event ), \"Failed to release an event\" );\n        my_sending_event_present = false;\n    }\n    return d;\n}\n\ntemplate <typename Factory>\ndependency_msg<void*, Factory> opencl_memory<Factory>::send( opencl_device device, const cl_event *e ) {\n    opencl_device::device_id_type device_id = device.my_device_id;\n    if ( !my_factory->is_same_context( my_curr_device_id.load<tbb::acquire>(), device_id ) ) {\n        __TBB_ASSERT( !e, \"The buffer has come from another opencl_node but it is not on a device\" );\n        {\n            tbb::spin_mutex::scoped_lock lock( my_sending_lock );\n            if ( !my_factory->is_same_context( my_curr_device_id.load<tbb::relaxed>(), device_id ) ) {\n                __TBB_ASSERT( my_host_ptr, \"The buffer has not been mapped\" );\n                dependency_msg<void*, Factory> d( my_host_ptr );\n                my_factory->enque_unmap_buffer( device, *this, d );\n                my_sending_event = *d.get_event();\n                my_sending_event_present = true;\n                enforce_cl_retcode( clRetainEvent( my_sending_event ), \"Failed to retain an event\" );\n                my_host_ptr = NULL;\n                my_curr_device_id.store<tbb::release>(device_id);\n            }\n        }\n        __TBB_ASSERT( my_sending_event_present, NULL );\n    }\n\n    // !e means that buffer has come from the host\n    if ( !e && my_sending_event_present ) e = &my_sending_event;\n\n    __TBB_ASSERT( !my_host_ptr, \"The buffer has not been unmapped\" );\n    return e ? dependency_msg<void*, Factory>( NULL, *e ) : dependency_msg<void*, Factory>( NULL );\n}\n\nstruct default_opencl_factory_device_filter {\n    opencl_device_list operator()( const opencl_device_list &devices ) {\n        opencl_device_list dl;\n        dl.add( *devices.begin() );\n        return dl;\n    }\n};\n\nclass default_opencl_factory : public opencl_factory < default_opencl_factory_device_filter > {\npublic:\n    default_opencl_factory( opencl_graph &g ) : opencl_factory( g ) {}\nprivate:\n    default_opencl_factory( const default_opencl_factory& );\n    default_opencl_factory& operator=(const default_opencl_factory&);\n};\n\nclass opencl_foundation : tbb::internal::no_assign {\n    struct default_device_selector_type {\n        opencl_device operator()( const opencl_device_list& devices ) {\n            return *devices.begin();\n        }\n    };\npublic:\n    opencl_foundation( opencl_graph &g ) : my_default_opencl_factory( g ), my_default_device_selector() {\n        cl_uint num_platforms;\n        enforce_cl_retcode( clGetPlatformIDs( 0, NULL, &num_platforms ), \"clGetPlatformIDs failed\" );\n\n        std::vector<cl_platform_id> platforms( num_platforms );\n        enforce_cl_retcode( clGetPlatformIDs( num_platforms, platforms.data(), NULL ), \"clGetPlatformIDs failed\" );\n\n        cl_uint num_all_devices = 0;\n        for ( cl_platform_id p : platforms ) {\n            cl_uint num_devices;\n            enforce_cl_retcode( clGetDeviceIDs( p, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices ), \"clGetDeviceIDs failed\" );\n            num_all_devices += num_devices;\n        }\n\n        std::vector<cl_device_id> devices( num_all_devices );\n        std::vector<cl_device_id>::iterator it = devices.begin();\n        for ( cl_platform_id p : platforms ) {\n            cl_uint num_devices;\n            enforce_cl_retcode( clGetDeviceIDs( p, CL_DEVICE_TYPE_ALL, (cl_uint)std::distance( it, devices.end() ), &*it, &num_devices ), \"clGetDeviceIDs failed\" );\n            it += num_devices;\n        }\n\n        for ( cl_device_id d : devices ) my_devices.add( opencl_device( d ) );\n    }\n\n    default_opencl_factory &get_default_opencl_factory() {\n        return my_default_opencl_factory;\n    }\n\n    const opencl_device_list &get_all_devices() {\n        return my_devices;\n    }\n\n    default_device_selector_type get_default_device_selector() { return my_default_device_selector; }\n\nprivate:\n    default_opencl_factory my_default_opencl_factory;\n    opencl_device_list my_devices;\n\n    const default_device_selector_type my_default_device_selector;\n};\n\nopencl_foundation &opencl_graph::get_opencl_foundation() {\n    opencl_foundation* INITIALIZATION = (opencl_foundation*)1;\n    if ( my_opencl_foundation <= INITIALIZATION ) {\n        if ( tbb::internal::as_atomic( my_opencl_foundation ).compare_and_swap( INITIALIZATION, NULL ) == 0 ) {\n            my_opencl_foundation = new opencl_foundation( *this );\n        }\n        else {\n            tbb::internal::spin_wait_while_eq( my_opencl_foundation, INITIALIZATION );\n        }\n    }\n\n    __TBB_ASSERT( my_opencl_foundation > INITIALIZATION, \"opencl_foundation is not initialized\");\n    return *my_opencl_foundation;\n}\n\nopencl_graph::~opencl_graph() {\n    if ( my_opencl_foundation )\n        delete my_opencl_foundation;\n}\n\ntemplate <typename DeviceFilter>\nvoid opencl_factory<DeviceFilter>::init_once() {\n        {\n            tbb::spin_mutex::scoped_lock lock( my_devices_mutex );\n            if ( !my_devices.size() )\n                my_devices = DeviceFilter()(my_graph.get_opencl_foundation().get_all_devices());\n        }\n\n    enforce_cl_retcode( my_devices.size() ? CL_SUCCESS : CL_INVALID_DEVICE, \"No devices in the device list\" );\n    cl_platform_id platform_id = my_devices.begin()->platform();\n    for ( opencl_device_list::iterator it = ++my_devices.begin(); it != my_devices.end(); ++it )\n        enforce_cl_retcode( it->platform() == platform_id ? CL_SUCCESS : CL_INVALID_PLATFORM, \"All devices should be in the same platform\" );\n\n    std::vector<cl_device_id> cl_device_ids;\n    for ( opencl_device d : my_devices ) cl_device_ids.push_back( d.my_cl_device_id );\n\n    cl_context_properties context_properties[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform_id, (cl_context_properties)NULL };\n    cl_int err;\n    cl_context ctx = clCreateContext( context_properties,\n        (cl_uint)cl_device_ids.size(),\n        cl_device_ids.data(),\n        NULL, NULL, &err );\n    enforce_cl_retcode( err, \"Failed to create context\" );\n    my_cl_context = ctx;\n\n    size_t device_counter = 0;\n    for ( opencl_device &d : my_devices ) {\n        d.my_device_id = device_counter++;\n        cl_int err2;\n        cl_command_queue cq;\n#if CL_VERSION_2_0\n        if ( d.major_version() >= 2 ) {\n            if ( d.out_of_order_exec_mode_on_host_present() ) {\n                cl_queue_properties props[] = { CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0 };\n                cq = clCreateCommandQueueWithProperties( ctx, d.my_cl_device_id, props, &err2 );\n            } else {\n                cl_queue_properties props[] = { 0 };\n                cq = clCreateCommandQueueWithProperties( ctx, d.my_cl_device_id, props, &err2 );\n            }\n        } else\n#endif\n        {\n            cl_command_queue_properties props = d.out_of_order_exec_mode_on_host_present() ? CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE : 0;\n            // Suppress \"declared deprecated\" warning for the next line.\n#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n#endif\n#if _MSC_VER || __INTEL_COMPILER\n#pragma warning( push )\n#if __INTEL_COMPILER\n#pragma warning (disable: 1478)\n#else\n#pragma warning (disable: 4996)\n#endif\n#endif\n            cq = clCreateCommandQueue( ctx, d.my_cl_device_id, props, &err2 );\n#if _MSC_VER || __INTEL_COMPILER\n#pragma warning( pop )\n#endif\n#if __TBB_GCC_WARNING_SUPPRESSION_PRESENT\n#pragma GCC diagnostic pop\n#endif\n        }\n        enforce_cl_retcode( err2, \"Failed to create command queue\" );\n        d.my_cl_command_queue = cq;\n    }\n}\n\nconst opencl_device_list &opencl_graph::available_devices() {\n    return get_opencl_foundation().get_all_devices();\n}\n\ndefault_opencl_factory &opencl_graph::opencl_factory() {\n    return get_opencl_foundation().get_default_opencl_factory();\n}\n\ntemplate <typename T, typename Factory>\nopencl_buffer<T, Factory>::opencl_buffer( opencl_graph &g, size_t size ) : my_impl( std::make_shared<impl_type>( size*sizeof(T), g.get_opencl_foundation().get_default_opencl_factory() ) ) {}\n\n    \nenum class opencl_program_type {\n    SOURCE,\n    PRECOMPILED,\n    SPIR\n};\n\ntemplate <typename Factory = default_opencl_factory>\nclass opencl_program : tbb::internal::no_assign {\npublic:\n    opencl_program( opencl_program_type type, const std::string& program_name ) : my_type(type) , my_arg_str( program_name) {}\n    opencl_program( const char* program_name ) : opencl_program( std::string( program_name ) ) {}\n    opencl_program( const std::string& program_name ) : opencl_program( opencl_program_type::SOURCE, program_name ) {}\n\n    opencl_program( const opencl_program &src ) : my_type( src.type ), my_arg_str( src.my_arg_str ), my_cl_program( src.my_cl_program ) {\n        // Set my_do_once_flag to the called state.\n        std::call_once( my_do_once_flag, [](){} );\n    }\nprivate:\n    opencl_program( cl_program program ) : my_cl_program( program ) {\n        // Set my_do_once_flag to the called state.\n        std::call_once( my_do_once_flag, [](){} );\n    }\n\n    cl_kernel get_kernel( const std::string& k, Factory &f ) const {\n        std::call_once( my_do_once_flag, [this, &k, &f](){ this->init( f, k ); } );\n        cl_int err;\n        cl_kernel kernel = clCreateKernel( my_cl_program, k.c_str(), &err );\n        enforce_cl_retcode( err, std::string( \"Failed to create kernel: \" ) + k );\n        return kernel;\n    }\n\n    class file_reader {\n    public:\n        file_reader( const std::string& filepath ) {\n            std::ifstream file_descriptor( filepath, std::ifstream::binary );\n            if ( !file_descriptor.is_open() ) {\n                std::string str = std::string( \"Could not open file: \" ) + filepath;\n                std::cerr << str << std::endl;\n                throw str;\n            }\n            file_descriptor.seekg( 0, file_descriptor.end );\n            size_t length = size_t( file_descriptor.tellg() );\n            file_descriptor.seekg( 0, file_descriptor.beg );\n            my_content.resize( length );\n            char* begin = &*my_content.begin();\n            file_descriptor.read( begin, length );\n            file_descriptor.close();\n        }\n        const char* content() { return &*my_content.cbegin(); }\n        size_t length() { return my_content.length(); }\n    private:\n        std::string my_content;\n    };\n\n    class opencl_program_builder {\n    public:\n        typedef void (CL_CALLBACK *cl_callback_type)(cl_program, void*);\n        opencl_program_builder( Factory& f, const std::string& name, cl_program program,\n                                cl_uint num_devices, cl_device_id* device_list,\n                                const char* options, cl_callback_type callback,\n                                void* user_data ) {\n            cl_int err = clBuildProgram( program, num_devices, device_list, options,\n                                         callback, user_data );\n            if( err == CL_SUCCESS )\n                return;\n            std::string str = std::string( \"Failed to build program: \" ) + name;\n            if ( err == CL_BUILD_PROGRAM_FAILURE ) {\n                const opencl_device_list &devices = f.devices();\n                for ( opencl_device d : devices ) {\n                    std::cerr << \"Build log for device: \" << d.name() << std::endl;\n                    size_t log_size;\n                    cl_int query_err = clGetProgramBuildInfo(\n                        program, d.my_cl_device_id, CL_PROGRAM_BUILD_LOG, 0, NULL,\n                        &log_size );\n                    enforce_cl_retcode( query_err, \"Failed to get build log size\" );\n                    if( log_size ) {\n                        std::vector<char> output;\n                        output.resize( log_size );\n                        query_err = clGetProgramBuildInfo(\n                            program, d.my_cl_device_id, CL_PROGRAM_BUILD_LOG,\n                            output.size(), output.data(), NULL );\n                        enforce_cl_retcode( query_err, \"Failed to get build output\" );\n                        std::cerr << output.data() << std::endl;\n                    } else {\n                        std::cerr << \"No build log available\" << std::endl;\n                    }\n                }\n            }\n            enforce_cl_retcode( err, str );\n        }\n    };\n\n    class opencl_device_filter {\n    public:\n        template<typename Filter>\n        opencl_device_filter( cl_uint& num_devices, cl_device_id* device_list,\n                              Filter filter, const char* message ) {\n            for ( cl_uint i = 0; i < num_devices; ++i )\n                if ( filter(device_list[i]) ) {\n                    device_list[i--] = device_list[--num_devices];\n                }\n            if ( !num_devices )\n                enforce_cl_retcode( CL_DEVICE_NOT_AVAILABLE, message );\n        }\n    };\n\n    void init( Factory &f, const std::string& ) const {\n        cl_uint num_devices;\n        enforce_cl_retcode( clGetContextInfo( f.context(), CL_CONTEXT_NUM_DEVICES, sizeof( num_devices ), &num_devices, NULL ),\n            \"Failed to get OpenCL context info\" );\n        if ( !num_devices )\n            enforce_cl_retcode( CL_DEVICE_NOT_FOUND, \"No supported devices found\" );\n        cl_device_id *device_list = (cl_device_id *)alloca( num_devices*sizeof( cl_device_id ) );\n        enforce_cl_retcode( clGetContextInfo( f.context(), CL_CONTEXT_DEVICES, num_devices*sizeof( cl_device_id ), device_list, NULL ),\n            \"Failed to get OpenCL context info\" );\n        const char *options = NULL;\n        switch ( my_type ) {\n        case opencl_program_type::SOURCE: {\n            file_reader fr( my_arg_str );\n            const char *s[] = { fr.content() };\n            const size_t l[] = { fr.length() };\n            cl_int err;\n            my_cl_program = clCreateProgramWithSource( f.context(), 1, s, l, &err );\n            enforce_cl_retcode( err, std::string( \"Failed to create program: \" ) + my_arg_str );\n            opencl_device_filter(\n                num_devices, device_list,\n                []( const opencl_device& d ) -> bool {\n                    return !d.compiler_available() || !d.linker_available();\n                }, \"No one device supports building program from sources\" );\n            opencl_program_builder(\n                f, my_arg_str, my_cl_program, num_devices, device_list,\n                options, /*callback*/ NULL, /*user data*/NULL );\n            break;\n        }\n        case opencl_program_type::SPIR:\n            options = \"-x spir\";\n        case opencl_program_type::PRECOMPILED: {\n            file_reader fr( my_arg_str );\n            std::vector<const unsigned char*> s(\n                num_devices, reinterpret_cast<const unsigned char*>(fr.content()) );\n            std::vector<size_t> l( num_devices, fr.length() );\n            std::vector<cl_int> bin_statuses( num_devices, -1 );\n            cl_int err;\n            my_cl_program = clCreateProgramWithBinary( f.context(), num_devices,\n                                                       device_list, l.data(), s.data(),\n                                                       bin_statuses.data(), &err );\n            if( err != CL_SUCCESS ) {\n                std::string statuses_str;\n                for( cl_int st : bin_statuses )\n                    statuses_str += std::to_string( st );\n                enforce_cl_retcode( err, std::string( \"Failed to create program, error \" + std::to_string( err ) + \" : \" ) + my_arg_str +\n                                    std::string( \", binary_statuses = \" ) + statuses_str );\n            }\n            opencl_program_builder(\n                f, my_arg_str, my_cl_program, num_devices, device_list,\n                options, /*callback*/ NULL, /*user data*/NULL );\n            break;\n        }\n        default:\n            __TBB_ASSERT( false, \"Unsupported program type\" );\n        }\n    }\n\n    opencl_program_type my_type;\n    std::string my_arg_str;\n    mutable cl_program my_cl_program;\n    mutable std::once_flag my_do_once_flag;\n\n    template<typename... Args>\n    friend class opencl_node;\n};\n\ntemplate <int N1,int N2>\nstruct port_ref_impl {\n    // \"+1\" since the port_ref range is a closed interval (includes its endpoints).\n    static const int size = N2-N1+1;\n\n};\n\n// The purpose of the port_ref_impl is the pretty syntax: the deduction of a compile-time constant is processed from the return type.\n// So it is possible to use this helper without parentheses, e.g. \"port_ref<0>\".\ntemplate <int N1, int N2 = N1>\nport_ref_impl<N1,N2> port_ref() {\n    return port_ref_impl<N1,N2>();\n};\n\ntemplate <typename T>\nstruct num_arguments {\n    static const int value = 1;\n};\n\ntemplate <int N1, int N2>\nstruct num_arguments<port_ref_impl<N1,N2>(*)()> {\n    static const int value = port_ref_impl<N1,N2>::size;\n};\n\ntemplate <int N1, int N2>\nstruct num_arguments<port_ref_impl<N1,N2>> {\n    static const int value = port_ref_impl<N1,N2>::size;\n};\n\ntemplate<typename... Args>\nclass opencl_node;\n\ntemplate <typename... Args>\nvoid ignore_return_values( Args&&... ) {}\n\ntemplate <typename T>\nT or_return_values( T&& t ) { return t; }\ntemplate <typename T, typename... Rest>\nT or_return_values( T&& t, Rest&&... rest ) {\n    return t | or_return_values( std::forward<Rest>(rest)... );\n}\n\n\n#define is_typedef(type)                                                    \\\n    template <typename T>                                                   \\\n    struct is_##type {                                                      \\\n        template <typename C>                                               \\\n        static std::true_type check( typename C::type* );                   \\\n        template <typename C>                                               \\\n        static std::false_type check( ... );                                \\\n                                                                            \\\n        static const bool value = decltype(check<T>(0))::value;             \\\n    }\n\nis_typedef( native_object_type );\nis_typedef( memory_object_type );\n\ntemplate <typename T>\ntypename std::enable_if<is_native_object_type<T>::value, typename T::native_object_type>::type get_native_object( const T &t ) {\n    return t.native_object();\n}\n\ntemplate <typename T>\ntypename std::enable_if<!is_native_object_type<T>::value, T>::type get_native_object( T t ) {\n    return t;\n}\n\n// send_if_memory_object checks if the T type has memory_object_type and call the send method for the object.\ntemplate <typename T, typename Factory>\ntypename std::enable_if<is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device device, dependency_msg<T, Factory> &dmsg ) {\n    const T &t = dmsg.data( false );\n    typedef typename T::memory_object_type mem_obj_t;\n    mem_obj_t mem_obj = t.memory_object();\n    dependency_msg<mem_obj_t, Factory> d( mem_obj );\n    if ( dmsg.get_event() ) d.set_event( *dmsg.get_event() );\n    mem_obj.send( device, d );\n    if ( d.get_event() ) dmsg.set_event( *d.get_event() );\n}\n\ntemplate <typename T>\ntypename std::enable_if<is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device device, const T &t ) {\n    typedef typename T::memory_object_type mem_obj_t;\n    mem_obj_t mem_obj = t.memory_object();\n    dependency_msg<mem_obj_t, typename mem_obj_t::opencl_factory_type> dmsg( mem_obj );\n    mem_obj.send( device, dmsg );\n}\n\ntemplate <typename T>\ntypename std::enable_if<!is_memory_object_type<T>::value>::type send_if_memory_object( opencl_device, const T& ) {};\n\n// receive_if_memory_object checks if the T type has memory_object_type and call the receive method for the object.\ntemplate <typename T, typename Factory>\ntypename std::enable_if<is_memory_object_type<T>::value>::type receive_if_memory_object( const dependency_msg<T, Factory> &dmsg ) {\n    const T &t = dmsg.data( false );\n    typedef typename T::memory_object_type mem_obj_t;\n    mem_obj_t mem_obj = t.memory_object();\n    dependency_msg<mem_obj_t, Factory> d( mem_obj );\n    if ( dmsg.get_event() ) d.set_event( *dmsg.get_event() );\n    mem_obj.receive( d );\n    if ( d.get_event() ) dmsg.set_event( *d.get_event() );\n}\n\ntemplate <typename T>\ntypename std::enable_if<!is_memory_object_type<T>::value>::type  receive_if_memory_object( const T& ) {}\n\ntemplate<typename JP>\nstruct key_from_policy {\n    typedef size_t type;\n    typedef std::false_type is_key_matching;\n};\n\ntemplate<typename Key>\nstruct key_from_policy< key_matching<Key> > {\n    typedef Key type;\n    typedef std::true_type is_key_matching;\n};\n\ntemplate<typename Key>\nstruct key_from_policy< key_matching<Key&> > {\n    typedef const Key &type;\n    typedef std::true_type is_key_matching;\n};\n\ntemplate<typename Key>\nclass opencl_device_with_key {\n    opencl_device my_device;\n    typename std::decay<Key>::type my_key;\npublic:\n    // TODO: investigate why defaul ctor is required\n    opencl_device_with_key() {}\n    opencl_device_with_key( opencl_device d, Key k ) : my_device( d ), my_key( k ) {}\n    Key key() const { return my_key; }\n    opencl_device device() const { return my_device; }\n};\n\n/*\n    /---------------------------------------- opencl_node ---------------------------------------\\\n    |                                                                                            |\n    |   /--------------\\   /----------------------\\   /-----------\\   /----------------------\\   |\n    |   |              |   |    (device_with_key) O---O           |   |                      |   |\n    |   |              |   |                      |   |           |   |                      |   |\n    O---O indexer_node O---O device_selector_node O---O join_node O---O      kernel_node     O---O\n    |   |              |   | (multifunction_node) |   |           |   | (multifunction_node) |   |\n    O---O              |   |                      O---O           |   |                      O---O\n    |   \\--------------/   \\----------------------/   \\-----------/   \\----------------------/   |\n    |                                                                                            |\n    \\--------------------------------------------------------------------------------------------/\n*/\n\ntemplate<typename JP, typename Factory, typename... Ports>\nclass opencl_node< tuple<Ports...>, JP, Factory > : public composite_node < tuple<dependency_msg<Ports, Factory>...>, tuple<dependency_msg<Ports, Factory>...> >{\n    typedef tuple<dependency_msg<Ports, Factory>...> input_tuple;\n    typedef input_tuple output_tuple;\n    typedef typename key_from_policy<JP>::type key_type;\n    typedef composite_node<input_tuple, output_tuple> base_type;\n    static const size_t NUM_INPUTS = tuple_size<input_tuple>::value;\n    static const size_t NUM_OUTPUTS = tuple_size<output_tuple>::value;\n\n    typedef typename internal::make_sequence<NUM_INPUTS>::type input_sequence;\n    typedef typename internal::make_sequence<NUM_OUTPUTS>::type output_sequence;\n\n    typedef indexer_node<dependency_msg<Ports, Factory>...> indexer_node_type;\n    typedef typename indexer_node_type::output_type indexer_node_output_type;\n    typedef tuple<opencl_device_with_key<key_type>, dependency_msg<Ports, Factory>...> kernel_input_tuple;\n    typedef multifunction_node<indexer_node_output_type, kernel_input_tuple> device_selector_node;\n    typedef multifunction_node<kernel_input_tuple, output_tuple> kernel_multifunction_node;\n\n    template <int... S>\n    typename base_type::input_ports_type get_input_ports( internal::sequence<S...> ) {\n        return std::tie( internal::input_port<S>( my_indexer_node )... );\n    }\n\n    template <int... S>\n    typename base_type::output_ports_type get_output_ports( internal::sequence<S...> ) {\n        return std::tie( internal::output_port<S>( my_kernel_node )... );\n    }\n\n    typename base_type::input_ports_type get_input_ports() {\n        return get_input_ports( input_sequence() );\n    }\n\n    typename base_type::output_ports_type get_output_ports() {\n        return get_output_ports( output_sequence() );\n    }\n\n    template <int N>\n    int make_Nth_edge() {\n        make_edge( internal::output_port<N>( my_device_selector_node ), internal::input_port<N>( my_join_node ) );\n        return 0;\n    }\n\n    template <int... S>\n    void make_edges( internal::sequence<S...> ) {\n        make_edge( my_indexer_node, my_device_selector_node );\n        make_edge( my_device_selector_node, my_join_node );\n        ignore_return_values( make_Nth_edge<S + 1>()... );\n        make_edge( my_join_node, my_kernel_node );\n    }\n\n    void make_edges() {\n        make_edges( input_sequence() );\n    }\n\n    class device_selector_base {\n    public:\n        virtual void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) = 0;\n        virtual device_selector_base *clone( opencl_node &n ) const = 0;\n        virtual ~device_selector_base() {}\n    };\n\n    template <typename UserFunctor>\n    class device_selector : public device_selector_base, tbb::internal::no_assign {\n    public:\n        device_selector( UserFunctor uf, opencl_node &n, Factory &f ) : my_user_functor( uf ), my_node(n), my_factory( f ) {\n            my_port_epoches.fill( 0 );\n        }\n\n        /* override */ void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) {\n            send_and_put( my_port_epoches[v.tag()], v, op, input_sequence() );\n            __TBB_ASSERT( (std::is_same<typename key_from_policy<JP>::is_key_matching, std::false_type>::value) || my_port_epoches[v.tag()] == 0, \"Epoch is changed when key matching is requested\" );\n        }\n\n        /* override */ device_selector_base *clone( opencl_node &n ) const {\n            return new device_selector( my_user_functor, n, my_factory );\n        }\n    private:\n        template <int... S>\n        void send_and_put( size_t &epoch, const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op, internal::sequence<S...> ) {\n            typedef void(device_selector<UserFunctor>::*send_and_put_fn)(size_t &, const indexer_node_output_type &, typename device_selector_node::output_ports_type &);\n            static std::array <send_and_put_fn, NUM_INPUTS > dispatch = { { &device_selector<UserFunctor>::send_and_put_impl<S>... } };\n            (this->*dispatch[v.tag()])( epoch, v, op );\n        }\n\n        template <typename T>\n        key_type get_key( std::false_type, const T &, size_t &epoch ) {\n            __TBB_STATIC_ASSERT( (std::is_same<key_type, size_t>::value), \"\" );\n            return epoch++;\n        }\n\n        template <typename T>\n        key_type get_key( std::true_type, const T &t, size_t &/*epoch*/ ) {\n            using tbb::flow::key_from_message;\n            return key_from_message<key_type>( t );\n        }\n\n        template <int N>\n        void send_and_put_impl( size_t &epoch, const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) {\n            typedef typename tuple_element<N + 1, typename device_selector_node::output_ports_type>::type::output_type elem_type;\n            elem_type e = internal::cast_to<elem_type>( v );\n            opencl_device device = get_device( get_key( typename key_from_policy<JP>::is_key_matching(), e, epoch ), get<0>( op ) );\n            send_if_memory_object( device, e );\n            get<N + 1>( op ).try_put( e );\n        }\n\n        template< typename DevicePort >\n        opencl_device get_device( key_type key, DevicePort& dp ) {\n            typename std::unordered_map<typename std::decay<key_type>::type, epoch_desc>::iterator it = my_devices.find( key );\n            if ( it == my_devices.end() ) {\n                opencl_device d = my_user_functor( my_factory.devices() );\n                std::tie( it, std::ignore ) = my_devices.insert( std::make_pair( key, d ) );\n                bool res = dp.try_put( opencl_device_with_key<key_type>( d, key ) );\n                __TBB_ASSERT_EX( res, NULL );\n                my_node.notify_new_device( d );\n            }\n            epoch_desc &e = it->second;\n            opencl_device d = e.my_device;\n            if ( ++e.my_request_number == NUM_INPUTS ) my_devices.erase( it );\n            return d;\n        }\n\n        struct epoch_desc {\n            epoch_desc( opencl_device d ) : my_device( d ), my_request_number( 0 ) {}\n            opencl_device my_device;\n            size_t my_request_number;\n        };\n\n        std::unordered_map<typename std::decay<key_type>::type, epoch_desc> my_devices;\n        std::array<size_t, NUM_INPUTS> my_port_epoches;\n        UserFunctor my_user_functor;\n        opencl_node &my_node;\n        Factory &my_factory;\n    };\n\n    class device_selector_body {\n    public:\n        device_selector_body( device_selector_base *d ) : my_device_selector( d ) {}\n\n        /* override */ void operator()( const indexer_node_output_type &v, typename device_selector_node::output_ports_type &op ) {\n            (*my_device_selector)(v, op);\n        }\n    private:\n        device_selector_base *my_device_selector;\n    };\n\n    // Forward declaration.\n    class ndranges_mapper_base;\n\n    class opencl_kernel_base : tbb::internal::no_copy {\n        cl_kernel clone_kernel() const {\n            size_t ret_size;\n\n            std::vector<char> kernel_name;\n            for ( size_t curr_size = 32;; curr_size <<= 1 ) {\n                kernel_name.resize( curr_size <<= 1 );\n                enforce_cl_retcode( clGetKernelInfo( my_kernel, CL_KERNEL_FUNCTION_NAME, curr_size, kernel_name.data(), &ret_size ), \"Failed to get kernel info\" );\n                if ( ret_size < curr_size ) break;\n            }\n\n            cl_program program;\n            enforce_cl_retcode( clGetKernelInfo( my_kernel, CL_KERNEL_PROGRAM, sizeof( program ), &program, &ret_size ), \"Failed to get kernel info\" );\n            __TBB_ASSERT( ret_size == sizeof( program ), NULL );\n\n            return opencl_program<Factory>( program ).get_kernel( kernel_name.data(), my_factory );\n        }\n\n        // ------------- NDRange getters ------------- //\n        template <typename NDRange>\n        NDRange ndrange_value( NDRange&& r, const kernel_input_tuple& ) const { return r; }\n        template <int N>\n        typename tuple_element<N+1,kernel_input_tuple>::type::value_type ndrange_value( port_ref_impl<N,N>, const kernel_input_tuple& ip ) const {\n            // \"+1\" since get<0>(ip) is opencl_device.\n            return get<N+1>(ip).data(false);\n        }\n        template <int N1,int N2>\n        void ndrange_value( port_ref_impl<N1,N2>, const kernel_input_tuple& ip ) const {\n            __TBB_STATIC_ASSERT( N1==N2, \"Do not use a port_ref range (e.g. port_ref<0,2>) as an argument for the set_ndranges routine\" );\n        }\n        template <int N>\n        typename tuple_element<N+1,kernel_input_tuple>::type::value_type ndrange_value( port_ref_impl<N,N>(*)(), const kernel_input_tuple& ip ) const {\n            return ndrange_value(port_ref<N,N>(), ip);\n        }\n        template <int N1,int N2>\n        void ndrange_value( port_ref_impl<N1,N2>(*)(), const kernel_input_tuple& ip ) const {\n            return ndrange_value(port_ref<N1,N2>(), ip);\n        }\n        // ------------------------------------------- //\n    public:\n        typedef typename kernel_multifunction_node::output_ports_type output_ports_type;\n\n        virtual void enqueue( const ndranges_mapper_base *ndranges_mapper, const kernel_input_tuple &ip, output_ports_type &op, graph &g ) = 0;\n        virtual void send_memory_objects( opencl_device d ) = 0;\n        virtual opencl_kernel_base *clone() const = 0;\n        virtual ~opencl_kernel_base () {\n            enforce_cl_retcode( clReleaseKernel( my_kernel ), \"Failed to release a kernel\" );\n        }\n\n        template <typename GlbNDRange, typename LclNDRange>\n        cl_event enqueue( GlbNDRange&& glb_range, LclNDRange&& lcl_range, int num_events, std::array<cl_event, NUM_INPUTS> events, const kernel_input_tuple& ip ) {\n            return my_factory.enqueue_kernel( get<0>( ip ).device(), my_kernel, ndrange_value( glb_range, ip ), ndrange_value( lcl_range, ip ), num_events, events.data() );\n        }\n    protected:\n        opencl_kernel_base( const opencl_program<Factory>& p, const std::string& kernel_name, Factory &f )\n            : my_kernel( p.get_kernel( kernel_name, f ) ), my_factory( f )\n        {}\n\n        opencl_kernel_base( const opencl_kernel_base &k )\n            : my_kernel( k.clone_kernel() ), my_factory( k.my_factory )\n        {}\n\n        const cl_kernel my_kernel;\n        Factory &my_factory;\n    };\n\n    // Container for ndrandes. It can contain either port references or real ndranges.\n    class ndranges_mapper_base {\n    public:\n        virtual cl_event enqueue_kernel( opencl_kernel_base *k, const kernel_input_tuple& ip, int num_events, const std::array<cl_event, NUM_INPUTS> &events ) const = 0;\n        virtual ndranges_mapper_base *clone() const = 0;\n        virtual ~ndranges_mapper_base() {}\n    };\n\n    template <typename... Args>\n    class opencl_kernel : public opencl_kernel_base {\n        typedef typename opencl_kernel_base::output_ports_type output_ports_type;\n        // --------- Kernel argument helpers --------- //\n        template <int Place, typename T>\n        void set_one_kernel_arg(const T& t) {\n            auto p = get_native_object( t );\n            enforce_cl_retcode( clSetKernelArg( this->my_kernel, Place, sizeof( p ), &p ), \"Failed to set a kernel argument\" );\n        }\n\n        template <int Place, int N>\n        int set_one_arg_from_range( const kernel_input_tuple& ip ) {\n            // \"+1\" since get<0>(ip) is opencl_device\n            set_one_kernel_arg<Place>( get<N + 1>( ip ).data( false ) );\n            return 0;\n        }\n\n        template <int Place, int Start, int... S>\n        void set_args_range(const kernel_input_tuple& ip, internal::sequence<S...>) {\n            ignore_return_values( set_one_arg_from_range<Place + S, Start + S>( ip )... );\n        }\n\n        template <int Place, int N1, int N2>\n        void set_arg_impl( const kernel_input_tuple& ip, port_ref_impl<N1, N2> ) {\n            set_args_range<Place,N1>( ip, typename internal::make_sequence<port_ref_impl<N1, N2>::size>::type() );\n        }\n\n        template <int Place, int N1, int N2>\n        void set_arg_impl( const kernel_input_tuple& ip, port_ref_impl<N1, N2>(*)() ) {\n            set_arg_impl<Place>( ip, port_ref<N1, N2>() );\n        }\n\n        template <int Place, typename T>\n        void set_arg_impl( const kernel_input_tuple&, const T& t ) {\n            set_one_kernel_arg<Place>( t );\n        }\n\n        template <int>\n        void set_args( const kernel_input_tuple& ) {}\n\n        template <int Place, typename T, typename... Rest>\n        void set_args( const kernel_input_tuple& ip, const T& t, Rest&&... rest ) {\n            set_arg_impl<Place>( ip, t );\n            set_args<Place+num_arguments<T>::value>( ip, std::forward<Rest>(rest)... );\n        }\n        // ------------------------------------------- //\n\n        // -------- Kernel event list helpers -------- //\n        int add_event_to_list( std::array<cl_event, NUM_INPUTS> &events, int &num_events, const cl_event *e ) {\n            __TBB_ASSERT( (static_cast<typename std::array<cl_event, NUM_INPUTS>::size_type>(num_events) < events.size()), NULL );\n            if ( e ) events[num_events++] = *e;\n            return 0;\n        }\n\n        template <int... S>\n        int generate_event_list( std::array<cl_event, NUM_INPUTS> &events, const kernel_input_tuple& ip, internal::sequence<S...> ) {\n            int num_events = 0;\n            ignore_return_values( add_event_to_list( events, num_events, get<S + 1>( ip ).get_event() )... );\n            return num_events;\n        }\n        // ------------------------------------------- //\n\n        // ---------- Update events helpers ---------- //\n        template <int N>\n        bool update_event_and_try_put( graph &g, cl_event e, const kernel_input_tuple& ip, output_ports_type &op ) {\n            auto t = get<N + 1>( ip );\n            t.set_event( e );\n            t.set_graph( g );\n            auto &port = get<N>( op );\n            return port.try_put( t );\n        }\n\n        template <int... S>\n        bool update_events_and_try_put( graph &g, cl_event e, const kernel_input_tuple& ip, output_ports_type &op, internal::sequence<S...> ) {\n            return or_return_values( update_event_and_try_put<S>( g, e, ip, op )... );\n        }\n        // ------------------------------------------- //\n\n        class set_args_func : tbb::internal::no_assign {\n        public:\n            set_args_func( opencl_kernel &k, const kernel_input_tuple &ip ) : my_opencl_kernel( k ), my_ip( ip ) {}\n            // It is immpossible to use Args... because a function pointer cannot be casted to a function reference implicitly.\n            // Allow the compiler to deduce types for function pointers automatically.\n            template <typename... A>\n            void operator()( A&&... a ) {\n                my_opencl_kernel.set_args<0>( my_ip, std::forward<A>( a )... );\n            }\n        private:\n            opencl_kernel &my_opencl_kernel;\n            const kernel_input_tuple &my_ip;\n        };\n\n        class send_func : tbb::internal::no_assign {\n        public:\n            send_func( opencl_device d ) : my_device( d ) {}\n            void operator()() {}\n            template <typename T, typename... Rest>\n            void operator()( T &&t, Rest&&... rest ) {\n                send_if_memory_object( my_device, std::forward<T>( t ) );\n                (*this)( std::forward<Rest>( rest )... );\n            }\n        private:\n            opencl_device my_device;\n        };\n\n        static void CL_CALLBACK decrement_wait_count_callback( cl_event, cl_int event_command_exec_status, void *data ) {\n            tbb::internal::suppress_unused_warning( event_command_exec_status );\n            __TBB_ASSERT( event_command_exec_status == CL_COMPLETE, NULL );\n            graph &g = *static_cast<graph*>(data);\n            g.decrement_wait_count();\n        }\n\n    public:\n        opencl_kernel( const opencl_program<Factory>& p, const std::string &kernel_name, Factory &f, Args&&... args )\n            : opencl_kernel_base( p, kernel_name, f )\n            , my_args_pack( std::forward<Args>( args )... )\n        {}\n\n        opencl_kernel( const opencl_kernel_base &k ) : opencl_kernel_base( k ), my_args_pack( k.my_args_pack ) {}\n\n        opencl_kernel( const opencl_kernel_base &k, Args&&... args ) : opencl_kernel_base( k ), my_args_pack( std::forward<Args>(args)... ) {}\n\n        /* override */ void enqueue( const ndranges_mapper_base *ndrange_mapper, const kernel_input_tuple &ip, output_ports_type &op, graph &g ) {\n            // Set arguments for the kernel.\n            tbb::internal::call( set_args_func( *this, ip ), my_args_pack );\n\n            // Gather events from all ports to an array.\n            std::array<cl_event, NUM_INPUTS> events;\n            int num_events = generate_event_list( events, ip, input_sequence() );\n\n            // Enqueue the kernel. ndrange_mapper is used only to obtain ndrange. Actually, it calls opencl_kernel_base::enqueue.\n            cl_event e = ndrange_mapper->enqueue_kernel( this, ip, num_events, events );\n\n            // Update events in dependency messages and try_put them to the output ports.\n            if ( !update_events_and_try_put( g, e, ip, op, input_sequence() ) ) {\n                // No one message was passed to successors so set a callback to extend the graph lifetime until the kernel completion.\n                g.increment_wait_count();\n                enforce_cl_retcode( clSetEventCallback( e, CL_COMPLETE, decrement_wait_count_callback, &g ), \"Failed to set a callback\" );\n                this->my_factory.flush( get<0>( ip ).device() );\n            }\n            // Release our own reference to cl_event.\n            enforce_cl_retcode( clReleaseEvent( e ), \"Failed to release an event\" );\n        }\n\n        virtual void send_memory_objects( opencl_device d ) {\n            // Find opencl_buffer and send them to the devece.\n            tbb::internal::call( send_func( d ), my_args_pack );\n        }\n\n        /* override */ opencl_kernel_base *clone() const {\n            // Create new opencl_kernel with copying constructor.\n            return new opencl_kernel<Args...>( *this );\n        }\n\n    private:\n        tbb::internal::stored_pack<Args...> my_args_pack;\n    };\n\n    template <typename GlbNDRange, typename LclNDRange>\n    class ndranges_mapper : public ndranges_mapper_base, tbb::internal::no_assign {\n    public:\n        template <typename GRange, typename LRange>\n        ndranges_mapper( GRange&& glb, LRange&& lcl ) : my_global_work_size( glb ), my_local_work_size( lcl ) {}\n\n        /*override*/ cl_event enqueue_kernel( opencl_kernel_base *k, const kernel_input_tuple &ip, int num_events, const std::array<cl_event, NUM_INPUTS> &events ) const {\n            return k->enqueue( my_global_work_size, my_local_work_size, num_events, events, ip );\n        }\n\n        /*override*/ ndranges_mapper_base *clone() const {\n            return new ndranges_mapper<GlbNDRange, LclNDRange>( my_global_work_size, my_local_work_size );\n        }\n\n    private:\n        GlbNDRange my_global_work_size;\n        LclNDRange my_local_work_size;\n    };\n\n    void enqueue_kernel( const kernel_input_tuple &ip, typename opencl_kernel_base::output_ports_type &op ) const {\n        __TBB_ASSERT(my_ndranges_mapper, \"NDRanges are not set. Call set_ndranges before running opencl_node.\");\n        my_opencl_kernel->enqueue( my_ndranges_mapper, ip, op, this->my_graph );\n    }\n\n    // Body for kernel_multifunction_node.\n    class kernel_body : tbb::internal::no_assign {\n    public:\n        kernel_body( const opencl_node &node ) : my_opencl_node( node ) {}\n        void operator()( const kernel_input_tuple &ip, typename opencl_kernel_base::output_ports_type &op ) {\n            my_opencl_node.enqueue_kernel( ip, op );\n        }\n    private:\n        const opencl_node &my_opencl_node;\n    };\n\n    template <typename... Args>\n    opencl_kernel_base *make_opencl_kernel( const opencl_program<Factory> &p, const std::string &kernel_name, Factory &f, Args&&... args ) const {\n        return new opencl_kernel<Args...>( p, kernel_name, f, std::forward<Args>( args )... );\n    }\n\n    template <typename GlobalNDRange, typename LocalNDRange = std::array<size_t,3>>\n    void set_ndranges_impl( GlobalNDRange&& global_work_size, LocalNDRange&& local_work_size = std::array<size_t, 3>( { { 0, 0, 0 } } ) ) {\n        if ( my_ndranges_mapper ) delete my_ndranges_mapper;\n        my_ndranges_mapper = new ndranges_mapper<typename std::decay<GlobalNDRange>::type, typename std::decay<LocalNDRange>::type>\n                ( std::forward<GlobalNDRange>( global_work_size ), std::forward<LocalNDRange>( local_work_size ) );\n    }\n\n    void notify_new_device( opencl_device d ) {\n        my_opencl_kernel->send_memory_objects( d );\n    }\n\npublic:\n    template <typename DeviceSelector>\n    opencl_node( opencl_graph &g, const opencl_program<Factory> &p, const std::string &kernel_name, DeviceSelector d, Factory &f )\n        : base_type( g )\n        , my_indexer_node( g )\n        , my_device_selector( new device_selector<DeviceSelector>( d, *this, f ) )\n        , my_device_selector_node( g, serial, device_selector_body( my_device_selector ) )\n        , my_join_node( g )\n        , my_kernel_node( g, serial, kernel_body( *this ) )\n        // By default, opencl_node maps all its ports to the kernel arguments on a one-to-one basis.\n        , my_opencl_kernel( make_opencl_kernel( p , kernel_name, f, port_ref<0, NUM_INPUTS - 1>()) )\n        , my_ndranges_mapper( NULL )\n    {\n        base_type::set_external_ports( get_input_ports(), get_output_ports() );\n        make_edges();\n    }\n\n    opencl_node( opencl_graph &g, const opencl_program<Factory> &p, const std::string &kernel_name, Factory &f )\n        : opencl_node( g, p, kernel_name, g.get_opencl_foundation().get_default_device_selector(), f )\n        {}\n\n\n    opencl_node( const opencl_node &node )\n        : base_type( node.my_graph )\n        , my_indexer_node( node.my_indexer_node )\n        , my_device_selector( node.my_device_selector->clone( *this ) )\n        , my_device_selector_node( node.my_graph, serial, device_selector_body( my_device_selector ) )\n        , my_join_node( node.my_join_node )\n        , my_kernel_node( node.my_graph, serial, kernel_body( *this ) )\n        , my_opencl_kernel( node.my_opencl_kernel->clone() )\n        , my_ndranges_mapper( node.my_ndranges_mapper ? node.my_ndranges_mapper->clone() : NULL )\n    {\n        base_type::set_external_ports( get_input_ports(), get_output_ports() );\n        make_edges();\n    }\n\n    opencl_node( opencl_node &&node )\n        : base_type( node.my_graph )\n        , my_indexer_node( std::move( node.my_indexer_node ) )\n        , my_device_selector( node.my_device_selector->clone(*this) )\n        , my_device_selector_node( node.my_graph, serial, device_selector_body( my_device_selector ) )\n        , my_join_node( std::move( node.my_join_node ) )\n        , my_kernel_node( node.my_graph, serial, kernel_body( *this ) )\n        , my_opencl_kernel( node.my_opencl_kernel )\n        , my_ndranges_mapper( node.my_ndranges_mapper )\n    {\n        base_type::set_external_ports( get_input_ports(), get_output_ports() );\n        make_edges();\n        // Set moving node mappers to NULL to prevent double deallocation.\n        node.my_opencl_kernel = NULL;\n        node.my_ndranges_mapper = NULL;\n    }\n\n    ~opencl_node() {\n        if ( my_opencl_kernel ) delete my_opencl_kernel;\n        if ( my_ndranges_mapper ) delete my_ndranges_mapper;\n        if ( my_device_selector ) delete my_device_selector;\n    }\n\n    template <typename T>\n    void set_ndranges( std::initializer_list<T> global_work_size ) {\n        set_ndranges_impl( internal::initializer_list_wrapper<T>( global_work_size ) );\n    }\n\n    template <typename GlobalNDRange>\n    void set_ndranges( GlobalNDRange&& global_work_size ) {\n        set_ndranges_impl( std::forward<GlobalNDRange>( global_work_size ) );\n    }\n\n    template <typename T, typename LocalNDRange>\n    void set_ndranges( std::initializer_list<T> global_work_size, LocalNDRange&& local_work_size ) {\n        set_ndranges_impl( internal::initializer_list_wrapper<T>(global_work_size), std::forward<LocalNDRange>( local_work_size ) );\n    }\n\n    template <typename T1, typename T2 = T1>\n    void set_ndranges( std::initializer_list<T1> global_work_size, std::initializer_list<T2> local_work_size ) {\n        set_ndranges_impl( internal::initializer_list_wrapper<T1>(global_work_size), internal::initializer_list_wrapper<T2>(local_work_size) );\n    }\n\n    template <typename GlobalNDRange, typename LocalNDRange>\n    void set_ndranges( GlobalNDRange&& global_work_size, LocalNDRange&& local_work_size ) {\n        set_ndranges_impl( std::forward<GlobalNDRange>(global_work_size), std::forward<LocalNDRange>(local_work_size) );\n    }\n\n    template <typename GlobalNDRange, typename T>\n    void set_ndranges( GlobalNDRange&& global_work_size, std::initializer_list<T> local_work_size ) {\n        set_ndranges_impl( std::forward<GlobalNDRange>( global_work_size ), internal::initializer_list_wrapper<T>( local_work_size ) );\n    }\n\n    template <typename... Args>\n    void set_args( Args&&... args ) {\n        // Copy the base class of opencl_kernal and create new storage for \"Args...\".\n        opencl_kernel_base *new_opencl_kernel = new opencl_kernel<Args...>( *my_opencl_kernel, std::forward<Args>( args )... );\n        delete my_opencl_kernel;\n        my_opencl_kernel = new_opencl_kernel;\n    }\n\nprotected:\n    /* override */ void reset_node( reset_flags = rf_reset_protocol ) { __TBB_ASSERT( false, \"Not implemented yet\" ); }\n\nprivate:\n    indexer_node_type my_indexer_node;\n    device_selector_base *my_device_selector;\n    device_selector_node my_device_selector_node;\n    join_node<kernel_input_tuple, JP> my_join_node;\n    kernel_multifunction_node my_kernel_node;\n\n    opencl_kernel_base *my_opencl_kernel;\n    ndranges_mapper_base *my_ndranges_mapper;\n};\n\ntemplate<typename JP, typename... Ports>\nclass opencl_node< tuple<Ports...>, JP > : public opencl_node < tuple<Ports...>, JP, default_opencl_factory > {\n    typedef opencl_node < tuple<Ports...>, JP, default_opencl_factory > base_type;\npublic:\n    opencl_node( opencl_graph &g, const std::string &kernel )\n        : base_type( g, kernel, g.get_opencl_foundation().get_default_device_selector(), g.get_opencl_foundation().get_default_opencl_factory() )\n    {}\n    opencl_node( opencl_graph &g, const opencl_program<default_opencl_factory> &p, const std::string &kernel )\n        : base_type( g, p, kernel,\n                g.get_opencl_foundation().get_default_device_selector(), g.get_opencl_foundation().get_default_opencl_factory() )\n    {}\n    template <typename DeviceSelector>\n    opencl_node( opencl_graph &g, const opencl_program<default_opencl_factory> &p, const std::string &kernel, DeviceSelector d )\n        : base_type( g, p , kernel, d, g.get_opencl_foundation().get_default_opencl_factory() )\n    {}\n};\n\ntemplate<typename... Ports>\nclass opencl_node< tuple<Ports...> > : public opencl_node < tuple<Ports...>, queueing, default_opencl_factory > {\n    typedef opencl_node < tuple<Ports...>, queueing, default_opencl_factory > base_type;\npublic:\n    opencl_node( opencl_graph &g, const std::string &kernel )\n        : base_type( g, kernel, g.get_opencl_foundation().get_default_device_selector(), g.get_opencl_foundation().get_default_opencl_factory() )\n    {}\n    opencl_node( opencl_graph &g, const opencl_program<default_opencl_factory> &p, const std::string &kernel )\n        : base_type( g, p, kernel,\n                g.get_opencl_foundation().get_default_device_selector(), g.get_opencl_foundation().get_default_opencl_factory() )\n    {}\n    template <typename DeviceSelector>\n    opencl_node( opencl_graph &g, const opencl_program<default_opencl_factory> &p, const std::string &kernel, DeviceSelector d )\n        : base_type( g, p, kernel, d, g.get_opencl_foundation().get_default_opencl_factory() )\n    {}\n};\n\n} // namespace interface8\n\nusing interface8::opencl_graph;\nusing interface8::opencl_node;\nusing interface8::read_only;\nusing interface8::read_write;\nusing interface8::write_only;\nusing interface8::opencl_buffer;\nusing interface8::opencl_subbuffer;\nusing interface8::opencl_device;\nusing interface8::opencl_device_list;\nusing interface8::opencl_program;\nusing interface8::opencl_program_type;\nusing interface8::dependency_msg;\nusing interface8::port_ref;\nusing interface8::opencl_factory;\n\n} // namespace flow\n} // namespace tbb\n#endif /* __TBB_PREVIEW_OPENCL_NODE */\n\n#endif // __TBB_flow_graph_opencl_node_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/global_control.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_global_control_H\n#define __TBB_global_control_H\n\n#if !TBB_PREVIEW_GLOBAL_CONTROL && !__TBB_BUILD\n#error Set TBB_PREVIEW_GLOBAL_CONTROL before including global_control.h\n#endif\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\nnamespace interface9 {\n\nclass global_control {\npublic:\n    enum parameter {\n        max_allowed_parallelism,\n        thread_stack_size,\n        parameter_max // insert new parameters above this point\n    };\n\n    global_control(parameter p, size_t value) :\n        my_value(value), my_next(NULL), my_param(p) {\n        __TBB_ASSERT(my_param < parameter_max, \"Invalid parameter\");\n#if __TBB_WIN8UI_SUPPORT\n        // For Windows Store* apps it's impossible to set stack size\n        if (p==thread_stack_size)\n            return;\n#elif __TBB_x86_64 && (_WIN32 || _WIN64)\n        if (p==thread_stack_size)\n            __TBB_ASSERT_RELEASE((unsigned)value == value, \"Stack size is limited to unsigned int range\");\n#endif\n        if (my_param==max_allowed_parallelism)\n            __TBB_ASSERT_RELEASE(my_value>0, \"max_allowed_parallelism cannot be 0.\");\n        internal_create();\n    }\n\n    ~global_control() {\n        __TBB_ASSERT(my_param < parameter_max, \"Invalid parameter. Probably the object was corrupted.\");\n#if __TBB_WIN8UI_SUPPORT\n        // For Windows Store* apps it's impossible to set stack size\n        if (my_param==thread_stack_size)\n            return;\n#endif\n        internal_destroy();\n    }\n\n    static size_t active_value(parameter p) {\n        __TBB_ASSERT(p < parameter_max, \"Invalid parameter\");\n        return active_value((int)p);\n    }\nprivate:\n    size_t    my_value;\n    global_control *my_next;\n    parameter my_param;\n\n    void __TBB_EXPORTED_METHOD internal_create();\n    void __TBB_EXPORTED_METHOD internal_destroy();\n    static size_t __TBB_EXPORTED_FUNC active_value(int param);\n};\n} // namespace interface9\n\nusing interface9::global_control;\n\n} // tbb\n\n#endif // __TBB_global_control_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/index.html",
    "content": "<HTML>\n<BODY>\n\n<H2>Overview</H2>\nInclude files for Intel&reg; Threading Building Blocks classes and functions.\n\n<BR><A HREF=\".\">Click here</A> to see all files in the directory.\n\n<H2>Directories</H2>\n<DL>\n<DT><A HREF=\"compat\">compat</A>\n<DD>Include files for source level compatibility with other frameworks.\n<DT><A HREF=\"internal\">internal</A>\n<DD>Include files with implementation details; not for direct use.\n<DT><A HREF=\"machine\">machine</A>\n<DD>Include files for low-level architecture specific functionality; not for direct use.\n</DL>\n\n<HR>\n<A HREF=\"../index.html\">Up to parent directory</A>\n<p></p>\nCopyright &copy; 2005-2016 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_aggregator_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__aggregator_impl_H\n#define __TBB__aggregator_impl_H\n\n#include \"../atomic.h\"\n#if !__TBBMALLOC_BUILD\n#include \"../tbb_profiling.h\"\n#endif\n\nnamespace tbb {\nnamespace interface6 {\nnamespace internal {\n\nusing namespace tbb::internal;\n\n//! aggregated_operation base class\ntemplate <typename Derived>\nclass aggregated_operation {\n public:\n    uintptr_t status;\n    Derived *next;\n    aggregated_operation() : status(0), next(NULL) {}\n};\n\n//! Aggregator base class\n/** An aggregator for collecting operations coming from multiple sources and executing\n    them serially on a single thread.  operation_type must be derived from\n    aggregated_operation. The parameter handler_type is a functor that will be passed the\n    list of operations and is expected to handle each operation appropriately, setting the\n    status of each operation to non-zero.*/\ntemplate < typename operation_type >\nclass aggregator_generic {\npublic:\n    aggregator_generic() : handler_busy(false) { pending_operations = NULL; }\n\n    //! Place operation in list\n    /** Place operation in list and either handle list or wait for operation to\n        complete.\n        long_life_time specifies life time of an operation inserting in an aggregator.\n        \"Long\" (long_life_time == true) life time operation can be accessed\n        even after executing it.\n        \"Short\" (long_life_time == false) life time operations can be destroyed\n        during executing so any access to it after executing is invalid.*/\n    template < typename handler_type >\n    void execute(operation_type *op, handler_type &handle_operations, bool long_life_time = true) {\n        operation_type *res;\n        // op->status should be read before inserting the operation in the\n        // aggregator queue since it can become invalid after executing a\n        // handler (if the operation has 'short' life time.)\n        const uintptr_t status = op->status;\n\n        // ITT note: &(op->status) tag is used to cover accesses to this op node. This\n        // thread has created the operation, and now releases it so that the handler\n        // thread may handle the associated operation w/o triggering a race condition;\n        // thus this tag will be acquired just before the operation is handled in the\n        // handle_operations functor.\n        call_itt_notify(releasing, &(op->status));\n        // insert the operation in the queue.\n        do {\n            // ITT may flag the following line as a race; it is a false positive:\n            // This is an atomic read; we don't provide itt_hide_load_word for atomics\n            op->next = res = pending_operations; // NOT A RACE\n        } while (pending_operations.compare_and_swap(op, res) != res);\n        if (!res) { // first in the list; handle the operations.\n            // ITT note: &pending_operations tag covers access to the handler_busy flag,\n            // which this waiting handler thread will try to set before entering\n            // handle_operations.\n            call_itt_notify(acquired, &pending_operations);\n            start_handle_operations(handle_operations);\n            // The operation with 'short' life time can already be destroyed.\n            if (long_life_time)\n                __TBB_ASSERT(op->status, NULL);\n        }\n        // not first; wait for op to be ready.\n        else if (!status) { // operation is blocking here.\n            __TBB_ASSERT(long_life_time, \"The blocking operation cannot have 'short' life time. Since it can already be destroyed.\");\n            call_itt_notify(prepare, &(op->status));\n            spin_wait_while_eq(op->status, uintptr_t(0));\n            itt_load_word_with_acquire(op->status);\n        }\n    }\n\n private:\n    //! An atomically updated list (aka mailbox) of pending operations\n    atomic<operation_type *> pending_operations;\n    //! Controls thread access to handle_operations\n    uintptr_t handler_busy;\n\n    //! Trigger the handling of operations when the handler is free\n    template < typename handler_type >\n    void start_handle_operations( handler_type &handle_operations ) {\n        operation_type *op_list;\n\n        // ITT note: &handler_busy tag covers access to pending_operations as it is passed\n        // between active and waiting handlers.  Below, the waiting handler waits until\n        // the active handler releases, and the waiting handler acquires &handler_busy as\n        // it becomes the active_handler. The release point is at the end of this\n        // function, when all operations in pending_operations have been handled by the\n        // owner of this aggregator.\n        call_itt_notify(prepare, &handler_busy);\n        // get the handler_busy:\n        // only one thread can possibly spin here at a time\n        spin_wait_until_eq(handler_busy, uintptr_t(0));\n        call_itt_notify(acquired, &handler_busy);\n        // acquire fence not necessary here due to causality rule and surrounding atomics\n        __TBB_store_with_release(handler_busy, uintptr_t(1));\n\n        // ITT note: &pending_operations tag covers access to the handler_busy flag\n        // itself. Capturing the state of the pending_operations signifies that\n        // handler_busy has been set and a new active handler will now process that list's\n        // operations.\n        call_itt_notify(releasing, &pending_operations);\n        // grab pending_operations\n        op_list = pending_operations.fetch_and_store(NULL);\n\n        // handle all the operations\n        handle_operations(op_list);\n\n        // release the handler\n        itt_store_word_with_release(handler_busy, uintptr_t(0));\n    }\n};\n\ntemplate < typename handler_type, typename operation_type >\nclass aggregator : public aggregator_generic<operation_type> {\n    handler_type handle_operations;\npublic:\n    aggregator() {}\n    explicit aggregator(handler_type h) : handle_operations(h) {}\n\n    void initialize_handler(handler_type h) { handle_operations = h; }\n\n    void execute(operation_type *op) {\n        aggregator_generic<operation_type>::execute(op, handle_operations);\n    }\n};\n\n// the most-compatible friend declaration (vs, gcc, icc) is\n//    template<class U, class V> friend class aggregating_functor;\ntemplate<typename aggregating_class, typename operation_list>\nclass aggregating_functor {\n    aggregating_class *fi;\npublic:\n    aggregating_functor() {}\n    aggregating_functor(aggregating_class *fi_) : fi(fi_) {}\n    void operator()(operation_list* op_list) { fi->handle_operations(op_list); }\n};\n\n} // namespace internal\n} // namespace interface6\n\nnamespace internal {\n    using interface6::internal::aggregated_operation;\n    using interface6::internal::aggregator_generic;\n    using interface6::internal::aggregator;\n    using interface6::internal::aggregating_functor;\n} // namespace internal\n\n} // namespace tbb\n\n#endif  // __TBB__aggregator_impl_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_concurrent_queue_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__concurrent_queue_impl_H\n#define __TBB__concurrent_queue_impl_H\n\n#ifndef __TBB_concurrent_queue_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"../tbb_stddef.h\"\n#include \"../tbb_machine.h\"\n#include \"../atomic.h\"\n#include \"../spin_mutex.h\"\n#include \"../cache_aligned_allocator.h\"\n#include \"../tbb_exception.h\"\n#include \"../tbb_profiling.h\"\n#include <new>\n#include <utility>\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <iterator>\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\nnamespace tbb {\n\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n\n// forward declaration\nnamespace strict_ppl {\ntemplate<typename T, typename A> class concurrent_queue;\n}\n\ntemplate<typename T, typename A> class concurrent_bounded_queue;\n\n#endif\n\n//! For internal use only.\nnamespace strict_ppl {\n\n//! @cond INTERNAL\nnamespace internal {\n\nusing namespace tbb::internal;\n\ntypedef size_t ticket;\n\ntemplate<typename T> class micro_queue ;\ntemplate<typename T> class micro_queue_pop_finalizer ;\ntemplate<typename T> class concurrent_queue_base_v3;\ntemplate<typename T> struct concurrent_queue_rep;\n\n//! parts of concurrent_queue_rep that do not have references to micro_queue\n/**\n * For internal use only.\n */\nstruct concurrent_queue_rep_base : no_copy {\n    template<typename T> friend class micro_queue;\n    template<typename T> friend class concurrent_queue_base_v3;\n\nprotected:\n    //! Approximately n_queue/golden ratio\n    static const size_t phi = 3;\n\npublic:\n    // must be power of 2\n    static const size_t n_queue = 8;\n\n    //! Prefix on a page\n    struct page {\n        page* next;\n        uintptr_t mask;\n    };\n\n    atomic<ticket> head_counter;\n    char pad1[NFS_MaxLineSize-sizeof(atomic<ticket>)];\n    atomic<ticket> tail_counter;\n    char pad2[NFS_MaxLineSize-sizeof(atomic<ticket>)];\n\n    //! Always a power of 2\n    size_t items_per_page;\n\n    //! Size of an item\n    size_t item_size;\n\n    //! number of invalid entries in the queue\n    atomic<size_t> n_invalid_entries;\n\n    char pad3[NFS_MaxLineSize-sizeof(size_t)-sizeof(size_t)-sizeof(atomic<size_t>)];\n} ;\n\ninline bool is_valid_page(const concurrent_queue_rep_base::page* p) {\n    return uintptr_t(p)>1;\n}\n\n//! Abstract class to define interface for page allocation/deallocation\n/**\n * For internal use only.\n */\nclass concurrent_queue_page_allocator\n{\n    template<typename T> friend class micro_queue ;\n    template<typename T> friend class micro_queue_pop_finalizer ;\nprotected:\n    virtual ~concurrent_queue_page_allocator() {}\nprivate:\n    virtual concurrent_queue_rep_base::page* allocate_page() = 0;\n    virtual void deallocate_page( concurrent_queue_rep_base::page* p ) = 0;\n} ;\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n// unary minus operator applied to unsigned type, result still unsigned\n#pragma warning( push )\n#pragma warning( disable: 4146 )\n#endif\n\n//! A queue using simple locking.\n/** For efficiency, this class has no constructor.\n    The caller is expected to zero-initialize it. */\ntemplate<typename T>\nclass micro_queue : no_copy {\npublic:\n    typedef void (*item_constructor_t)(T* location, const void* src);\nprivate:\n    typedef concurrent_queue_rep_base::page page;\n\n    //! Class used to ensure exception-safety of method \"pop\"\n    class destroyer: no_copy {\n        T& my_value;\n    public:\n        destroyer( T& value ) : my_value(value) {}\n        ~destroyer() {my_value.~T();}\n    };\n\n    void copy_item( page& dst, size_t dindex, const void* src, item_constructor_t construct_item ) {\n        construct_item( &get_ref(dst, dindex), src );\n    }\n\n    void copy_item( page& dst, size_t dindex, const page& src, size_t sindex,\n        item_constructor_t construct_item )\n    {\n        T& src_item = get_ref( const_cast<page&>(src), sindex );\n        construct_item( &get_ref(dst, dindex), static_cast<const void*>(&src_item) );\n    }\n\n    void assign_and_destroy_item( void* dst, page& src, size_t index ) {\n        T& from = get_ref(src,index);\n        destroyer d(from);\n        *static_cast<T*>(dst) = tbb::internal::move( from );\n    }\n\n    void spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) const ;\n\npublic:\n    friend class micro_queue_pop_finalizer<T>;\n\n    struct padded_page: page {\n        //! Not defined anywhere - exists to quiet warnings.\n        padded_page();\n        //! Not defined anywhere - exists to quiet warnings.\n        void operator=( const padded_page& );\n        //! Must be last field.\n        T last;\n    };\n\n    static T& get_ref( page& p, size_t index ) {\n        return (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];\n    }\n\n    atomic<page*> head_page;\n    atomic<ticket> head_counter;\n\n    atomic<page*> tail_page;\n    atomic<ticket> tail_counter;\n\n    spin_mutex page_mutex;\n\n    void push( const void* item, ticket k, concurrent_queue_base_v3<T>& base,\n        item_constructor_t construct_item ) ;\n\n    bool pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) ;\n\n    micro_queue& assign( const micro_queue& src, concurrent_queue_base_v3<T>& base,\n        item_constructor_t construct_item ) ;\n\n    page* make_copy( concurrent_queue_base_v3<T>& base, const page* src_page, size_t begin_in_page,\n        size_t end_in_page, ticket& g_index, item_constructor_t construct_item ) ;\n\n    void invalidate_page_and_rethrow( ticket k ) ;\n};\n\ntemplate<typename T>\nvoid micro_queue<T>::spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) const {\n    for( atomic_backoff b(true);;b.pause() ) {\n        ticket c = counter;\n        if( c==k ) return;\n        else if( c&1 ) {\n            ++rb.n_invalid_entries;\n            throw_exception( eid_bad_last_alloc );\n        }\n    }\n}\n\ntemplate<typename T>\nvoid micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<T>& base,\n    item_constructor_t construct_item )\n{\n    k &= -concurrent_queue_rep_base::n_queue;\n    page* p = NULL;\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page);\n    if( !index ) {\n        __TBB_TRY {\n            concurrent_queue_page_allocator& pa = base;\n            p = pa.allocate_page();\n        } __TBB_CATCH (...) {\n            ++base.my_rep->n_invalid_entries;\n            invalidate_page_and_rethrow( k );\n        }\n        p->mask = 0;\n        p->next = NULL;\n    }\n\n    if( tail_counter != k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );\n    call_itt_notify(acquired, &tail_counter);\n\n    if( p ) {\n        spin_mutex::scoped_lock lock( page_mutex );\n        page* q = tail_page;\n        if( is_valid_page(q) )\n            q->next = p;\n        else\n            head_page = p;\n        tail_page = p;\n    } else {\n        p = tail_page;\n    }\n\n    __TBB_TRY {\n        copy_item( *p, index, item, construct_item );\n        // If no exception was thrown, mark item as present.\n        itt_hide_store_word(p->mask,  p->mask | uintptr_t(1)<<index);\n        call_itt_notify(releasing, &tail_counter);\n        tail_counter += concurrent_queue_rep_base::n_queue;\n    } __TBB_CATCH (...) {\n        ++base.my_rep->n_invalid_entries;\n        call_itt_notify(releasing, &tail_counter);\n        tail_counter += concurrent_queue_rep_base::n_queue;\n        __TBB_RETHROW();\n    }\n}\n\ntemplate<typename T>\nbool micro_queue<T>::pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) {\n    k &= -concurrent_queue_rep_base::n_queue;\n    if( head_counter!=k ) spin_wait_until_eq( head_counter, k );\n    call_itt_notify(acquired, &head_counter);\n    if( tail_counter==k ) spin_wait_while_eq( tail_counter, k );\n    call_itt_notify(acquired, &tail_counter);\n    page& p = *head_page;\n    __TBB_ASSERT( &p, NULL );\n    size_t index = modulo_power_of_two( k/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );\n    bool success = false;\n    {\n        micro_queue_pop_finalizer<T> finalizer( *this, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? &p : NULL );\n        if( p.mask & uintptr_t(1)<<index ) {\n            success = true;\n            assign_and_destroy_item( dst, p, index );\n        } else {\n            --base.my_rep->n_invalid_entries;\n        }\n    }\n    return success;\n}\n\ntemplate<typename T>\nmicro_queue<T>& micro_queue<T>::assign( const micro_queue<T>& src, concurrent_queue_base_v3<T>& base,\n    item_constructor_t construct_item )\n{\n    head_counter = src.head_counter;\n    tail_counter = src.tail_counter;\n\n    const page* srcp = src.head_page;\n    if( is_valid_page(srcp) ) {\n        ticket g_index = head_counter;\n        __TBB_TRY {\n            size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;\n            size_t index = modulo_power_of_two( head_counter/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );\n            size_t end_in_first_page = (index+n_items<base.my_rep->items_per_page)?(index+n_items):base.my_rep->items_per_page;\n\n            head_page = make_copy( base, srcp, index, end_in_first_page, g_index, construct_item );\n            page* cur_page = head_page;\n\n            if( srcp != src.tail_page ) {\n                for( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {\n                    cur_page->next = make_copy( base, srcp, 0, base.my_rep->items_per_page, g_index, construct_item );\n                    cur_page = cur_page->next;\n                }\n\n                __TBB_ASSERT( srcp==src.tail_page, NULL );\n                size_t last_index = modulo_power_of_two( tail_counter/concurrent_queue_rep_base::n_queue, base.my_rep->items_per_page );\n                if( last_index==0 ) last_index = base.my_rep->items_per_page;\n\n                cur_page->next = make_copy( base, srcp, 0, last_index, g_index, construct_item );\n                cur_page = cur_page->next;\n            }\n            tail_page = cur_page;\n        } __TBB_CATCH (...) {\n            invalidate_page_and_rethrow( g_index );\n        }\n    } else {\n        head_page = tail_page = NULL;\n    }\n    return *this;\n}\n\ntemplate<typename T>\nvoid micro_queue<T>::invalidate_page_and_rethrow( ticket k ) {\n    // Append an invalid page at address 1 so that no more pushes are allowed.\n    page* invalid_page = (page*)uintptr_t(1);\n    {\n        spin_mutex::scoped_lock lock( page_mutex );\n        itt_store_word_with_release(tail_counter, k+concurrent_queue_rep_base::n_queue+1);\n        page* q = tail_page;\n        if( is_valid_page(q) )\n            q->next = invalid_page;\n        else\n            head_page = invalid_page;\n        tail_page = invalid_page;\n    }\n    __TBB_RETHROW();\n}\n\ntemplate<typename T>\nconcurrent_queue_rep_base::page* micro_queue<T>::make_copy( concurrent_queue_base_v3<T>& base,\n    const concurrent_queue_rep_base::page* src_page, size_t begin_in_page, size_t end_in_page,\n    ticket& g_index, item_constructor_t construct_item )\n{\n    concurrent_queue_page_allocator& pa = base;\n    page* new_page = pa.allocate_page();\n    new_page->next = NULL;\n    new_page->mask = src_page->mask;\n    for( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )\n        if( new_page->mask & uintptr_t(1)<<begin_in_page )\n            copy_item( *new_page, begin_in_page, *src_page, begin_in_page, construct_item );\n    return new_page;\n}\n\ntemplate<typename T>\nclass micro_queue_pop_finalizer: no_copy {\n    typedef concurrent_queue_rep_base::page page;\n    ticket my_ticket;\n    micro_queue<T>& my_queue;\n    page* my_page;\n    concurrent_queue_page_allocator& allocator;\npublic:\n    micro_queue_pop_finalizer( micro_queue<T>& queue, concurrent_queue_base_v3<T>& b, ticket k, page* p ) :\n        my_ticket(k), my_queue(queue), my_page(p), allocator(b)\n    {}\n    ~micro_queue_pop_finalizer() ;\n};\n\ntemplate<typename T>\nmicro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {\n    page* p = my_page;\n    if( is_valid_page(p) ) {\n        spin_mutex::scoped_lock lock( my_queue.page_mutex );\n        page* q = p->next;\n        my_queue.head_page = q;\n        if( !is_valid_page(q) ) {\n            my_queue.tail_page = NULL;\n        }\n    }\n    itt_store_word_with_release(my_queue.head_counter, my_ticket);\n    if( is_valid_page(p) ) {\n        allocator.deallocate_page( p );\n    }\n}\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n#pragma warning( pop )\n#endif // warning 4146 is back\n\ntemplate<typename T> class concurrent_queue_iterator_rep ;\ntemplate<typename T> class concurrent_queue_iterator_base_v3;\n\n//! representation of concurrent_queue_base\n/**\n * the class inherits from concurrent_queue_rep_base and defines an array of micro_queue<T>'s\n */\ntemplate<typename T>\nstruct concurrent_queue_rep : public concurrent_queue_rep_base {\n    micro_queue<T> array[n_queue];\n\n    //! Map ticket to an array index\n    static size_t index( ticket k ) {\n        return k*phi%n_queue;\n    }\n\n    micro_queue<T>& choose( ticket k ) {\n        // The formula here approximates LRU in a cache-oblivious way.\n        return array[index(k)];\n    }\n};\n\n//! base class of concurrent_queue\n/**\n * The class implements the interface defined by concurrent_queue_page_allocator\n * and has a pointer to an instance of concurrent_queue_rep.\n */\ntemplate<typename T>\nclass concurrent_queue_base_v3: public concurrent_queue_page_allocator {\nprivate:\n    //! Internal representation\n    concurrent_queue_rep<T>* my_rep;\n\n    friend struct concurrent_queue_rep<T>;\n    friend class micro_queue<T>;\n    friend class concurrent_queue_iterator_rep<T>;\n    friend class concurrent_queue_iterator_base_v3<T>;\n\nprotected:\n    typedef typename concurrent_queue_rep<T>::page page;\n\nprivate:\n    typedef typename micro_queue<T>::padded_page padded_page;\n    typedef typename micro_queue<T>::item_constructor_t item_constructor_t;\n\n    /* override */ virtual page *allocate_page() {\n        concurrent_queue_rep<T>& r = *my_rep;\n        size_t n = sizeof(padded_page) + (r.items_per_page-1)*sizeof(T);\n        return reinterpret_cast<page*>(allocate_block ( n ));\n    }\n\n    /* override */ virtual void deallocate_page( concurrent_queue_rep_base::page *p ) {\n        concurrent_queue_rep<T>& r = *my_rep;\n        size_t n = sizeof(padded_page) + (r.items_per_page-1)*sizeof(T);\n        deallocate_block( reinterpret_cast<void*>(p), n );\n    }\n\n    //! custom allocator\n    virtual void *allocate_block( size_t n ) = 0;\n\n    //! custom de-allocator\n    virtual void deallocate_block( void *p, size_t n ) = 0;\n\nprotected:\n    concurrent_queue_base_v3();\n\n    /* override */ virtual ~concurrent_queue_base_v3() {\n#if TBB_USE_ASSERT\n        size_t nq = my_rep->n_queue;\n        for( size_t i=0; i<nq; i++ )\n            __TBB_ASSERT( my_rep->array[i].tail_page==NULL, \"pages were not freed properly\" );\n#endif /* TBB_USE_ASSERT */\n        cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);\n    }\n\n    //! Enqueue item at tail of queue\n    void internal_push( const void* src, item_constructor_t construct_item ) {\n         concurrent_queue_rep<T>& r = *my_rep;\n         ticket k = r.tail_counter++;\n         r.choose(k).push( src, k, *this, construct_item );\n    }\n\n    //! Attempt to dequeue item from queue.\n    /** NULL if there was no item to dequeue. */\n    bool internal_try_pop( void* dst ) ;\n\n    //! Get size of queue; result may be invalid if queue is modified concurrently\n    size_t internal_size() const ;\n\n    //! check if the queue is empty; thread safe\n    bool internal_empty() const ;\n\n    //! free any remaining pages\n    /* note that the name may be misleading, but it remains so due to a historical accident. */\n    void internal_finish_clear() ;\n\n    //! Obsolete\n    void internal_throw_exception() const {\n        throw_exception( eid_bad_alloc );\n    }\n\n    //! copy or move internal representation\n    void assign( const concurrent_queue_base_v3& src, item_constructor_t construct_item ) ;\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! swap internal representation\n    void internal_swap( concurrent_queue_base_v3& src ) {\n        std::swap( my_rep, src.my_rep );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n};\n\ntemplate<typename T>\nconcurrent_queue_base_v3<T>::concurrent_queue_base_v3() {\n    const size_t item_size = sizeof(T);\n    my_rep = cache_aligned_allocator<concurrent_queue_rep<T> >().allocate(1);\n    __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, \"alignment error\" );\n    __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, \"alignment error\" );\n    memset(my_rep,0,sizeof(concurrent_queue_rep<T>));\n    my_rep->item_size = item_size;\n    my_rep->items_per_page = item_size<=  8 ? 32 :\n                             item_size<= 16 ? 16 :\n                             item_size<= 32 ?  8 :\n                             item_size<= 64 ?  4 :\n                             item_size<=128 ?  2 :\n                             1;\n}\n\ntemplate<typename T>\nbool concurrent_queue_base_v3<T>::internal_try_pop( void* dst ) {\n    concurrent_queue_rep<T>& r = *my_rep;\n    ticket k;\n    do {\n        k = r.head_counter;\n        for(;;) {\n            if( (ptrdiff_t)(r.tail_counter-k)<=0 ) {\n                // Queue is empty\n                return false;\n            }\n            // Queue had item with ticket k when we looked.  Attempt to get that item.\n            ticket tk=k;\n#if defined(_MSC_VER) && defined(_Wp64)\n    #pragma warning (push)\n    #pragma warning (disable: 4267)\n#endif\n            k = r.head_counter.compare_and_swap( tk+1, tk );\n#if defined(_MSC_VER) && defined(_Wp64)\n    #pragma warning (pop)\n#endif\n            if( k==tk )\n                break;\n            // Another thread snatched the item, retry.\n        }\n    } while( !r.choose( k ).pop( dst, k, *this ) );\n    return true;\n}\n\ntemplate<typename T>\nsize_t concurrent_queue_base_v3<T>::internal_size() const {\n    concurrent_queue_rep<T>& r = *my_rep;\n    __TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );\n    ticket hc = r.head_counter;\n    size_t nie = r.n_invalid_entries;\n    ticket tc = r.tail_counter;\n    __TBB_ASSERT( hc!=tc || !nie, NULL );\n    ptrdiff_t sz = tc-hc-nie;\n    return sz<0 ? 0 :  size_t(sz);\n}\n\ntemplate<typename T>\nbool concurrent_queue_base_v3<T>::internal_empty() const {\n    concurrent_queue_rep<T>& r = *my_rep;\n    ticket tc = r.tail_counter;\n    ticket hc = r.head_counter;\n    // if tc!=r.tail_counter, the queue was not empty at some point between the two reads.\n    return tc==r.tail_counter && tc==hc+r.n_invalid_entries ;\n}\n\ntemplate<typename T>\nvoid concurrent_queue_base_v3<T>::internal_finish_clear() {\n    concurrent_queue_rep<T>& r = *my_rep;\n    size_t nq = r.n_queue;\n    for( size_t i=0; i<nq; ++i ) {\n        page* tp = r.array[i].tail_page;\n        if( is_valid_page(tp) ) {\n            __TBB_ASSERT( r.array[i].head_page==tp, \"at most one page should remain\" );\n            deallocate_page( tp );\n            r.array[i].tail_page = NULL;\n        } else\n            __TBB_ASSERT( !is_valid_page(r.array[i].head_page), \"head page pointer corrupt?\" );\n    }\n}\n\ntemplate<typename T>\nvoid concurrent_queue_base_v3<T>::assign( const concurrent_queue_base_v3& src,\n    item_constructor_t construct_item )\n{\n    concurrent_queue_rep<T>& r = *my_rep;\n    r.items_per_page = src.my_rep->items_per_page;\n\n    // copy concurrent_queue_rep data\n    r.head_counter = src.my_rep->head_counter;\n    r.tail_counter = src.my_rep->tail_counter;\n    r.n_invalid_entries = src.my_rep->n_invalid_entries;\n\n    // copy or move micro_queues\n    for( size_t i = 0; i < r.n_queue; ++i )\n        r.array[i].assign( src.my_rep->array[i], *this, construct_item);\n\n    __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter,\n            \"the source concurrent queue should not be concurrently modified.\" );\n}\n\ntemplate<typename Container, typename Value> class concurrent_queue_iterator;\n\ntemplate<typename T>\nclass concurrent_queue_iterator_rep: no_assign {\n    typedef typename micro_queue<T>::padded_page padded_page;\npublic:\n    ticket head_counter;\n    const concurrent_queue_base_v3<T>& my_queue;\n    typename concurrent_queue_base_v3<T>::page* array[concurrent_queue_rep<T>::n_queue];\n    concurrent_queue_iterator_rep( const concurrent_queue_base_v3<T>& queue ) :\n        head_counter(queue.my_rep->head_counter),\n        my_queue(queue)\n    {\n        for( size_t k=0; k<concurrent_queue_rep<T>::n_queue; ++k )\n            array[k] = queue.my_rep->array[k].head_page;\n    }\n\n    //! Set item to point to kth element.  Return true if at end of queue or item is marked valid; false otherwise.\n    bool get_item( T*& item, size_t k ) ;\n};\n\ntemplate<typename T>\nbool concurrent_queue_iterator_rep<T>::get_item( T*& item, size_t k ) {\n    if( k==my_queue.my_rep->tail_counter ) {\n        item = NULL;\n        return true;\n    } else {\n        typename concurrent_queue_base_v3<T>::page* p = array[concurrent_queue_rep<T>::index(k)];\n        __TBB_ASSERT(p,NULL);\n        size_t i = modulo_power_of_two( k/concurrent_queue_rep<T>::n_queue, my_queue.my_rep->items_per_page );\n        item = &micro_queue<T>::get_ref(*p,i);\n        return (p->mask & uintptr_t(1)<<i)!=0;\n    }\n}\n\n//! Constness-independent portion of concurrent_queue_iterator.\n/** @ingroup containers */\ntemplate<typename Value>\nclass concurrent_queue_iterator_base_v3 : no_assign {\n    //! Represents concurrent_queue over which we are iterating.\n    /** NULL if one past last element in queue. */\n    concurrent_queue_iterator_rep<Value>* my_rep;\n\n    template<typename C, typename T, typename U>\n    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    template<typename C, typename T, typename U>\n    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\nprotected:\n    //! Pointer to current item\n    Value* my_item;\n\n    //! Default constructor\n    concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {\n#if __TBB_GCC_OPTIMIZER_ORDERING_BROKEN\n        __TBB_compiler_fence();\n#endif\n    }\n\n    //! Copy constructor\n    concurrent_queue_iterator_base_v3( const concurrent_queue_iterator_base_v3& i )\n    : no_assign(), my_rep(NULL), my_item(NULL) {\n        assign(i);\n    }\n\n    //! Construct iterator pointing to head of queue.\n    concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3<Value>& queue ) ;\n\n    //! Assignment\n    void assign( const concurrent_queue_iterator_base_v3<Value>& other ) ;\n\n    //! Advance iterator one step towards tail of queue.\n    void advance() ;\n\n    //! Destructor\n    ~concurrent_queue_iterator_base_v3() {\n        cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);\n        my_rep = NULL;\n    }\n};\n\ntemplate<typename Value>\nconcurrent_queue_iterator_base_v3<Value>::concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3<Value>& queue ) {\n    my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);\n    new( my_rep ) concurrent_queue_iterator_rep<Value>(queue);\n    size_t k = my_rep->head_counter;\n    if( !my_rep->get_item(my_item, k) ) advance();\n}\n\ntemplate<typename Value>\nvoid concurrent_queue_iterator_base_v3<Value>::assign( const concurrent_queue_iterator_base_v3<Value>& other ) {\n    if( my_rep!=other.my_rep ) {\n        if( my_rep ) {\n            cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);\n            my_rep = NULL;\n        }\n        if( other.my_rep ) {\n            my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);\n            new( my_rep ) concurrent_queue_iterator_rep<Value>( *other.my_rep );\n        }\n    }\n    my_item = other.my_item;\n}\n\ntemplate<typename Value>\nvoid concurrent_queue_iterator_base_v3<Value>::advance() {\n    __TBB_ASSERT( my_item, \"attempt to increment iterator past end of queue\" );\n    size_t k = my_rep->head_counter;\n    const concurrent_queue_base_v3<Value>& queue = my_rep->my_queue;\n#if TBB_USE_ASSERT\n    Value* tmp;\n    my_rep->get_item(tmp,k);\n    __TBB_ASSERT( my_item==tmp, NULL );\n#endif /* TBB_USE_ASSERT */\n    size_t i = modulo_power_of_two( k/concurrent_queue_rep<Value>::n_queue, queue.my_rep->items_per_page );\n    if( i==queue.my_rep->items_per_page-1 ) {\n        typename concurrent_queue_base_v3<Value>::page*& root = my_rep->array[concurrent_queue_rep<Value>::index(k)];\n        root = root->next;\n    }\n    // advance k\n    my_rep->head_counter = ++k;\n    if( !my_rep->get_item(my_item, k) ) advance();\n}\n\n//! Similar to C++0x std::remove_cv\n/** \"tbb_\" prefix added to avoid overload confusion with C++0x implementations. */\ntemplate<typename T> struct tbb_remove_cv {typedef T type;};\ntemplate<typename T> struct tbb_remove_cv<const T> {typedef T type;};\ntemplate<typename T> struct tbb_remove_cv<volatile T> {typedef T type;};\ntemplate<typename T> struct tbb_remove_cv<const volatile T> {typedef T type;};\n\n//! Meets requirements of a forward iterator for STL.\n/** Value is either the T or const T type of the container.\n    @ingroup containers */\ntemplate<typename Container, typename Value>\nclass concurrent_queue_iterator: public concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>,\n        public std::iterator<std::forward_iterator_tag,Value> {\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n    template<typename T, class A>\n    friend class ::tbb::strict_ppl::concurrent_queue;\n#else\npublic:\n#endif\n    //! Construct iterator pointing to head of queue.\n    concurrent_queue_iterator( const concurrent_queue_base_v3<Value>& queue ) :\n        concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(queue)\n    {\n    }\n\npublic:\n    concurrent_queue_iterator() {}\n\n    concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :\n        concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(other)\n    {}\n\n    //! Iterator assignment\n    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {\n        this->assign(other);\n        return *this;\n    }\n\n    //! Reference to current item\n    Value& operator*() const {\n        return *static_cast<Value*>(this->my_item);\n    }\n\n    Value* operator->() const {return &operator*();}\n\n    //! Advance to next item in queue\n    concurrent_queue_iterator& operator++() {\n        this->advance();\n        return *this;\n    }\n\n    //! Post increment\n    Value* operator++(int) {\n        Value* result = &operator*();\n        operator++();\n        return result;\n    }\n}; // concurrent_queue_iterator\n\n\ntemplate<typename C, typename T, typename U>\nbool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item==j.my_item;\n}\n\ntemplate<typename C, typename T, typename U>\nbool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item!=j.my_item;\n}\n\n} // namespace internal\n\n//! @endcond\n\n} // namespace strict_ppl\n\n//! @cond INTERNAL\nnamespace internal {\n\nclass concurrent_queue_rep;\nclass concurrent_queue_iterator_rep;\nclass concurrent_queue_iterator_base_v3;\ntemplate<typename Container, typename Value> class concurrent_queue_iterator;\n\n//! For internal use only.\n/** Type-independent portion of concurrent_queue.\n    @ingroup containers */\nclass concurrent_queue_base_v3: no_copy {\nprivate:\n    //! Internal representation\n    concurrent_queue_rep* my_rep;\n\n    friend class concurrent_queue_rep;\n    friend struct micro_queue;\n    friend class micro_queue_pop_finalizer;\n    friend class concurrent_queue_iterator_rep;\n    friend class concurrent_queue_iterator_base_v3;\nprotected:\n    //! Prefix on a page\n    struct page {\n        page* next;\n        uintptr_t mask;\n    };\n\n    //! Capacity of the queue\n    ptrdiff_t my_capacity;\n\n    //! Always a power of 2\n    size_t items_per_page;\n\n    //! Size of an item\n    size_t item_size;\n\n    enum copy_specifics { copy, move };\n\n#if __TBB_PROTECTED_NESTED_CLASS_BROKEN\npublic:\n#endif\n    template<typename T>\n    struct padded_page: page {\n        //! Not defined anywhere - exists to quiet warnings.\n        padded_page();\n        //! Not defined anywhere - exists to quiet warnings.\n        void operator=( const padded_page& );\n        //! Must be last field.\n        T last;\n    };\n\nprivate:\n    virtual void copy_item( page& dst, size_t index, const void* src ) = 0;\n    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) = 0;\nprotected:\n    __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );\n    virtual __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();\n\n    //! Enqueue item at tail of queue using copy operation\n    void __TBB_EXPORTED_METHOD internal_push( const void* src );\n\n    //! Dequeue item from head of queue\n    void __TBB_EXPORTED_METHOD internal_pop( void* dst );\n\n    //! Abort all pending queue operations\n    void __TBB_EXPORTED_METHOD internal_abort();\n\n    //! Attempt to enqueue item onto queue using copy operation\n    bool __TBB_EXPORTED_METHOD internal_push_if_not_full( const void* src );\n\n    //! Attempt to dequeue item from queue.\n    /** NULL if there was no item to dequeue. */\n    bool __TBB_EXPORTED_METHOD internal_pop_if_present( void* dst );\n\n    //! Get size of queue\n    ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const;\n\n    //! Check if the queue is emtpy\n    bool __TBB_EXPORTED_METHOD internal_empty() const;\n\n    //! Set the queue capacity\n    void __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );\n\n    //! custom allocator\n    virtual page *allocate_page() = 0;\n\n    //! custom de-allocator\n    virtual void deallocate_page( page *p ) = 0;\n\n    //! free any remaining pages\n    /* note that the name may be misleading, but it remains so due to a historical accident. */\n    void __TBB_EXPORTED_METHOD internal_finish_clear() ;\n\n    //! throw an exception\n    void __TBB_EXPORTED_METHOD internal_throw_exception() const;\n\n    //! copy internal representation\n    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_base_v3& src ) ;\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    //! swap queues\n    void internal_swap( concurrent_queue_base_v3& src ) {\n        std::swap( my_capacity, src.my_capacity );\n        std::swap( items_per_page, src.items_per_page );\n        std::swap( item_size, src.item_size );\n        std::swap( my_rep, src.my_rep );\n    }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n    //! Enqueues item at tail of queue using specified operation (copy or move)\n    void internal_insert_item( const void* src, copy_specifics op_type );\n\n    //! Attempts to enqueue at tail of queue using specified operation (copy or move)\n    bool internal_insert_if_not_full( const void* src, copy_specifics op_type );\n\n    //! Assigns one queue to another using specified operation (copy or move)\n    void internal_assign( const concurrent_queue_base_v3& src, copy_specifics op_type );\nprivate:\n    virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) = 0;\n};\n\n//! For internal use only.\n/** Backward compatible modification of concurrent_queue_base_v3\n    @ingroup containers */\nclass concurrent_queue_base_v8: public concurrent_queue_base_v3 {\nprotected:\n    concurrent_queue_base_v8( size_t item_sz ) : concurrent_queue_base_v3( item_sz ) {}\n\n    //! move items\n    void __TBB_EXPORTED_METHOD move_content( concurrent_queue_base_v8& src ) ;\n\n    //! Attempt to enqueue item onto queue using move operation\n    bool __TBB_EXPORTED_METHOD internal_push_move_if_not_full( const void* src );\n\n    //! Enqueue item at tail of queue using move operation\n    void __TBB_EXPORTED_METHOD internal_push_move( const void* src );\nprivate:\n    friend struct micro_queue;\n    virtual void move_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) = 0;\n    virtual void move_item( page& dst, size_t index, const void* src ) = 0;\n};\n\n//! Type-independent portion of concurrent_queue_iterator.\n/** @ingroup containers */\nclass concurrent_queue_iterator_base_v3 {\n    //! concurrent_queue over which we are iterating.\n    /** NULL if one past last element in queue. */\n    concurrent_queue_iterator_rep* my_rep;\n\n    template<typename C, typename T, typename U>\n    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    template<typename C, typename T, typename U>\n    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );\n\n    void initialize( const concurrent_queue_base_v3& queue, size_t offset_of_data );\nprotected:\n    //! Pointer to current item\n    void* my_item;\n\n    //! Default constructor\n    concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {}\n\n    //! Copy constructor\n    concurrent_queue_iterator_base_v3( const concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {\n        assign(i);\n    }\n\n    //! Obsolete entry point for constructing iterator pointing to head of queue.\n    /** Does not work correctly for SSE types. */\n    __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3& queue );\n\n    //! Construct iterator pointing to head of queue.\n    __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3& queue, size_t offset_of_data );\n\n    //! Assignment\n    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_iterator_base_v3& i );\n\n    //! Advance iterator one step towards tail of queue.\n    void __TBB_EXPORTED_METHOD advance();\n\n    //! Destructor\n    __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();\n};\n\ntypedef concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;\n\n//! Meets requirements of a forward iterator for STL.\n/** Value is either the T or const T type of the container.\n    @ingroup containers */\ntemplate<typename Container, typename Value>\nclass concurrent_queue_iterator: public concurrent_queue_iterator_base,\n        public std::iterator<std::forward_iterator_tag,Value> {\n\n#if !__TBB_TEMPLATE_FRIENDS_BROKEN\n    template<typename T, class A>\n    friend class ::tbb::concurrent_bounded_queue;\n#else\npublic:\n#endif\n\n    //! Construct iterator pointing to head of queue.\n    concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :\n        concurrent_queue_iterator_base_v3(queue,__TBB_offsetof(concurrent_queue_base_v3::padded_page<Value>,last))\n    {\n    }\n\npublic:\n    concurrent_queue_iterator() {}\n\n    /** If Value==Container::value_type, then this routine is the copy constructor.\n        If Value==const Container::value_type, then this routine is a conversion constructor. */\n    concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :\n        concurrent_queue_iterator_base_v3(other)\n    {}\n\n    //! Iterator assignment\n    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {\n        assign(other);\n        return *this;\n    }\n\n    //! Reference to current item\n    Value& operator*() const {\n        return *static_cast<Value*>(my_item);\n    }\n\n    Value* operator->() const {return &operator*();}\n\n    //! Advance to next item in queue\n    concurrent_queue_iterator& operator++() {\n        advance();\n        return *this;\n    }\n\n    //! Post increment\n    Value* operator++(int) {\n        Value* result = &operator*();\n        operator++();\n        return result;\n    }\n}; // concurrent_queue_iterator\n\n\ntemplate<typename C, typename T, typename U>\nbool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item==j.my_item;\n}\n\ntemplate<typename C, typename T, typename U>\nbool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {\n    return i.my_item!=j.my_item;\n}\n\n} // namespace internal;\n\n//! @endcond\n\n} // namespace tbb\n\n#endif /* __TBB__concurrent_queue_impl_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_concurrent_unordered_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n/* Container implementations in this header are based on PPL implementations\n   provided by Microsoft. */\n\n#ifndef __TBB__concurrent_unordered_impl_H\n#define __TBB__concurrent_unordered_impl_H\n#if !defined(__TBB_concurrent_unordered_map_H) && !defined(__TBB_concurrent_unordered_set_H) && !defined(__TBB_concurrent_hash_map_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"../tbb_stddef.h\"\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <iterator>\n#include <utility>      // Need std::pair\n#include <functional>   // Need std::equal_to (in ../concurrent_unordered_*.h)\n#include <string>       // For tbb_hasher\n#include <cstring>      // Need std::memset\n#include <algorithm>    // Need std::swap\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\n#include \"../atomic.h\"\n#include \"../tbb_exception.h\"\n#include \"../tbb_allocator.h\"\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    #include <initializer_list>\n#endif\n\n#include \"_tbb_hash_compare_impl.h\"\n\nnamespace tbb {\nnamespace interface5 {\n//! @cond INTERNAL\nnamespace internal {\n\ntemplate <typename T, typename Allocator>\nclass split_ordered_list;\ntemplate <typename Traits>\nclass concurrent_unordered_base;\n\n// Forward list iterators (without skipping dummy elements)\ntemplate<class Solist, typename Value>\nclass flist_iterator : public std::iterator<std::forward_iterator_tag, Value>\n{\n    template <typename T, typename Allocator>\n    friend class split_ordered_list;\n    template <typename Traits>\n    friend class concurrent_unordered_base;\n    template<class M, typename V>\n    friend class flist_iterator;\n\n    typedef typename Solist::nodeptr_t nodeptr_t;\npublic:\n    typedef typename Solist::value_type value_type;\n    typedef typename Solist::difference_type difference_type;\n    typedef typename Solist::pointer pointer;\n    typedef typename Solist::reference reference;\n\n    flist_iterator() : my_node_ptr(0) {}\n    flist_iterator( const flist_iterator<Solist, typename Solist::value_type> &other )\n        : my_node_ptr(other.my_node_ptr) {}\n\n    reference operator*() const { return my_node_ptr->my_element; }\n    pointer operator->() const { return &**this; }\n\n    flist_iterator& operator++() {\n        my_node_ptr = my_node_ptr->my_next;\n        return *this;\n    }\n\n    flist_iterator operator++(int) {\n        flist_iterator tmp = *this;\n        ++*this;\n        return tmp;\n    }\n\nprotected:\n    flist_iterator(nodeptr_t pnode) : my_node_ptr(pnode) {}\n    nodeptr_t get_node_ptr() const { return my_node_ptr; }\n\n    nodeptr_t my_node_ptr;\n\n    template<typename M, typename T, typename U>\n    friend bool operator==( const flist_iterator<M,T> &i, const flist_iterator<M,U> &j );\n    template<typename M, typename T, typename U>\n    friend bool operator!=( const flist_iterator<M,T>& i, const flist_iterator<M,U>& j );\n};\n\ntemplate<typename Solist, typename T, typename U>\nbool operator==( const flist_iterator<Solist,T> &i, const flist_iterator<Solist,U> &j ) {\n    return i.my_node_ptr == j.my_node_ptr;\n}\ntemplate<typename Solist, typename T, typename U>\nbool operator!=( const flist_iterator<Solist,T>& i, const flist_iterator<Solist,U>& j ) {\n    return i.my_node_ptr != j.my_node_ptr;\n}\n\n// Split-order list iterators, needed to skip dummy elements\ntemplate<class Solist, typename Value>\nclass solist_iterator : public flist_iterator<Solist, Value>\n{\n    typedef flist_iterator<Solist, Value> base_type;\n    typedef typename Solist::nodeptr_t nodeptr_t;\n    using base_type::get_node_ptr;\n    template <typename T, typename Allocator>\n    friend class split_ordered_list;\n    template<class M, typename V>\n    friend class solist_iterator;\n    template<typename M, typename T, typename U>\n    friend bool operator==( const solist_iterator<M,T> &i, const solist_iterator<M,U> &j );\n    template<typename M, typename T, typename U>\n    friend bool operator!=( const solist_iterator<M,T>& i, const solist_iterator<M,U>& j );\n\n    const Solist *my_list_ptr;\n    solist_iterator(nodeptr_t pnode, const Solist *plist) : base_type(pnode), my_list_ptr(plist) {}\n\npublic:\n    typedef typename Solist::value_type value_type;\n    typedef typename Solist::difference_type difference_type;\n    typedef typename Solist::pointer pointer;\n    typedef typename Solist::reference reference;\n\n    solist_iterator() {}\n    solist_iterator(const solist_iterator<Solist, typename Solist::value_type> &other )\n        : base_type(other), my_list_ptr(other.my_list_ptr) {}\n\n    reference operator*() const {\n        return this->base_type::operator*();\n    }\n\n    pointer operator->() const {\n        return (&**this);\n    }\n\n    solist_iterator& operator++() {\n        do ++(*(base_type *)this);\n        while (get_node_ptr() != NULL && get_node_ptr()->is_dummy());\n\n        return (*this);\n    }\n\n    solist_iterator operator++(int) {\n        solist_iterator tmp = *this;\n        do ++*this;\n        while (get_node_ptr() != NULL && get_node_ptr()->is_dummy());\n\n        return (tmp);\n    }\n};\n\ntemplate<typename Solist, typename T, typename U>\nbool operator==( const solist_iterator<Solist,T> &i, const solist_iterator<Solist,U> &j ) {\n    return i.my_node_ptr == j.my_node_ptr && i.my_list_ptr == j.my_list_ptr;\n}\ntemplate<typename Solist, typename T, typename U>\nbool operator!=( const solist_iterator<Solist,T>& i, const solist_iterator<Solist,U>& j ) {\n    return i.my_node_ptr != j.my_node_ptr || i.my_list_ptr != j.my_list_ptr;\n}\n\n// Forward type and class definitions\ntypedef size_t sokey_t;\n\n\n// Forward list in which elements are sorted in a split-order\ntemplate <typename T, typename Allocator>\nclass split_ordered_list\n{\npublic:\n    typedef split_ordered_list<T, Allocator> self_type;\n    typedef typename Allocator::template rebind<T>::other allocator_type;\n    struct node;\n    typedef node *nodeptr_t;\n\n    typedef typename allocator_type::size_type size_type;\n    typedef typename allocator_type::difference_type difference_type;\n    typedef typename allocator_type::pointer pointer;\n    typedef typename allocator_type::const_pointer const_pointer;\n    typedef typename allocator_type::reference reference;\n    typedef typename allocator_type::const_reference const_reference;\n    typedef typename allocator_type::value_type value_type;\n\n    typedef solist_iterator<self_type, const value_type> const_iterator;\n    typedef solist_iterator<self_type, value_type> iterator;\n    typedef flist_iterator<self_type, const value_type> raw_const_iterator;\n    typedef flist_iterator<self_type, value_type> raw_iterator;\n\n    // Node that holds the element in a split-ordered list\n    struct node : tbb::internal::no_assign\n    {\n    private:\n        // for compilers that try to generate default constructors though they are not needed.\n        node();  // VS 2008, 2010, 2012\n    public:\n        // Initialize the node with the given order key\n        void init(sokey_t order_key) {\n            my_order_key = order_key;\n            my_next = NULL;\n        }\n\n        // Return the order key (needed for hashing)\n        sokey_t get_order_key() const { // TODO: remove\n            return my_order_key;\n        }\n\n        // Inserts the new element in the list in an atomic fashion\n        nodeptr_t atomic_set_next(nodeptr_t new_node, nodeptr_t current_node)\n        {\n            // Try to change the next pointer on the current element to a new element, only if it still points to the cached next\n            nodeptr_t exchange_node = tbb::internal::as_atomic(my_next).compare_and_swap(new_node, current_node);\n\n            if (exchange_node == current_node) // TODO: why this branch?\n            {\n                // Operation succeeded, return the new node\n                return new_node;\n            }\n            else\n            {\n                // Operation failed, return the \"interfering\" node\n                return exchange_node;\n            }\n        }\n\n        // Checks if this element in the list is a dummy, order enforcing node. Dummy nodes are used by buckets\n        // in the hash table to quickly index into the right subsection of the split-ordered list.\n        bool is_dummy() const {\n            return (my_order_key & 0x1) == 0;\n        }\n\n\n        nodeptr_t  my_next;      // Next element in the list\n        value_type my_element;   // Element storage\n        sokey_t    my_order_key; // Order key for this element\n    };\n\n    // Allocate a new node with the given order key; used to allocate dummy nodes\n    nodeptr_t create_node(sokey_t order_key) {\n        nodeptr_t pnode = my_node_allocator.allocate(1);\n        pnode->init(order_key);\n        return (pnode);\n    }\n\n    // Allocate a new node with the given order key and value\n    template<typename Arg>\n    nodeptr_t create_node(sokey_t order_key, __TBB_FORWARDING_REF(Arg) t){\n        nodeptr_t pnode = my_node_allocator.allocate(1);\n\n        //TODO: use RAII scoped guard instead of explicit catch\n        __TBB_TRY {\n            new(static_cast<void*>(&pnode->my_element)) T(tbb::internal::forward<Arg>(t));\n            pnode->init(order_key);\n        } __TBB_CATCH(...) {\n            my_node_allocator.deallocate(pnode, 1);\n            __TBB_RETHROW();\n        }\n\n        return (pnode);\n    }\n\n    // Allocate a new node with the given parameters for constructing value\n    template<typename __TBB_PARAMETER_PACK Args>\n    nodeptr_t create_node_v( __TBB_FORWARDING_REF(Args) __TBB_PARAMETER_PACK args){\n        nodeptr_t pnode = my_node_allocator.allocate(1);\n\n        //TODO: use RAII scoped guard instead of explicit catch\n        __TBB_TRY {\n            new(static_cast<void*>(&pnode->my_element)) T(__TBB_PACK_EXPANSION(tbb::internal::forward<Args>(args)));\n        } __TBB_CATCH(...) {\n            my_node_allocator.deallocate(pnode, 1);\n            __TBB_RETHROW();\n        }\n\n        return (pnode);\n    }\n\n   split_ordered_list(allocator_type a = allocator_type())\n       : my_node_allocator(a), my_element_count(0)\n    {\n        // Immediately allocate a dummy node with order key of 0. This node\n        // will always be the head of the list.\n        my_head = create_node(sokey_t(0));\n    }\n\n    ~split_ordered_list()\n    {\n        // Clear the list\n        clear();\n\n        // Remove the head element which is not cleared by clear()\n        nodeptr_t pnode = my_head;\n        my_head = NULL;\n\n        __TBB_ASSERT(pnode != NULL && pnode->my_next == NULL, \"Invalid head list node\");\n\n        destroy_node(pnode);\n    }\n\n    // Common forward list functions\n\n    allocator_type get_allocator() const {\n        return (my_node_allocator);\n    }\n\n    void clear() {\n        nodeptr_t pnext;\n        nodeptr_t pnode = my_head;\n\n        __TBB_ASSERT(my_head != NULL, \"Invalid head list node\");\n        pnext = pnode->my_next;\n        pnode->my_next = NULL;\n        pnode = pnext;\n\n        while (pnode != NULL)\n        {\n            pnext = pnode->my_next;\n            destroy_node(pnode);\n            pnode = pnext;\n        }\n\n        my_element_count = 0;\n    }\n\n    // Returns a first non-dummy element in the SOL\n    iterator begin() {\n        return first_real_iterator(raw_begin());\n    }\n\n    // Returns a first non-dummy element in the SOL\n    const_iterator begin() const {\n        return first_real_iterator(raw_begin());\n    }\n\n    iterator end() {\n        return (iterator(0, this));\n    }\n\n    const_iterator end() const {\n        return (const_iterator(0, this));\n    }\n\n    const_iterator cbegin() const {\n        return (((const self_type *)this)->begin());\n    }\n\n    const_iterator cend() const {\n        return (((const self_type *)this)->end());\n    }\n\n    // Checks if the number of elements (non-dummy) is 0\n    bool empty() const {\n        return (my_element_count == 0);\n    }\n\n    // Returns the number of non-dummy elements in the list\n    size_type size() const {\n        return my_element_count;\n    }\n\n    // Returns the maximum size of the list, determined by the allocator\n    size_type max_size() const {\n        return my_node_allocator.max_size();\n    }\n\n    // Swaps 'this' list with the passed in one\n    void swap(self_type& other)\n    {\n        if (this == &other)\n        {\n            // Nothing to do\n            return;\n        }\n\n            std::swap(my_element_count, other.my_element_count);\n            std::swap(my_head, other.my_head);\n    }\n\n    // Split-order list functions\n\n    // Returns a first element in the SOL, which is always a dummy\n    raw_iterator raw_begin() {\n        return raw_iterator(my_head);\n    }\n\n    // Returns a first element in the SOL, which is always a dummy\n    raw_const_iterator raw_begin() const {\n        return raw_const_iterator(my_head);\n    }\n\n    raw_iterator raw_end() {\n        return raw_iterator(0);\n    }\n\n    raw_const_iterator raw_end() const {\n        return raw_const_iterator(0);\n    }\n\n    static sokey_t get_order_key(const raw_const_iterator& it) {\n        return it.get_node_ptr()->get_order_key();\n    }\n\n    static sokey_t get_safe_order_key(const raw_const_iterator& it) {\n        if( !it.get_node_ptr() )  return ~sokey_t(0);\n        return it.get_node_ptr()->get_order_key();\n    }\n\n    // Returns a public iterator version of the internal iterator. Public iterator must not\n    // be a dummy private iterator.\n    iterator get_iterator(raw_iterator it) {\n        __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), \"Invalid user node (dummy)\");\n        return iterator(it.get_node_ptr(), this);\n    }\n\n    // Returns a public iterator version of the internal iterator. Public iterator must not\n    // be a dummy private iterator.\n    const_iterator get_iterator(raw_const_iterator it) const {\n        __TBB_ASSERT(it.get_node_ptr() == NULL || !it.get_node_ptr()->is_dummy(), \"Invalid user node (dummy)\");\n        return const_iterator(it.get_node_ptr(), this);\n    }\n\n    // Returns a non-const version of the raw_iterator\n    raw_iterator get_iterator(raw_const_iterator it) {\n        return raw_iterator(it.get_node_ptr());\n    }\n\n    // Returns a non-const version of the iterator\n    static iterator get_iterator(const_iterator it) {\n        return iterator(it.my_node_ptr, it.my_list_ptr);\n    }\n\n    // Returns a public iterator version of a first non-dummy internal iterator at or after\n    // the passed in internal iterator.\n    iterator first_real_iterator(raw_iterator it)\n    {\n        // Skip all dummy, internal only iterators\n        while (it != raw_end() && it.get_node_ptr()->is_dummy())\n            ++it;\n\n        return iterator(it.get_node_ptr(), this);\n    }\n\n    // Returns a public iterator version of a first non-dummy internal iterator at or after\n    // the passed in internal iterator.\n    const_iterator first_real_iterator(raw_const_iterator it) const\n    {\n        // Skip all dummy, internal only iterators\n        while (it != raw_end() && it.get_node_ptr()->is_dummy())\n            ++it;\n\n        return const_iterator(it.get_node_ptr(), this);\n    }\n\n    // Erase an element using the allocator\n    void destroy_node(nodeptr_t pnode) {\n        if (!pnode->is_dummy()) my_node_allocator.destroy(pnode);\n        my_node_allocator.deallocate(pnode, 1);\n    }\n\n    // Try to insert a new element in the list.\n    // If insert fails, return the node that was inserted instead.\n    static nodeptr_t try_insert_atomic(nodeptr_t previous, nodeptr_t new_node, nodeptr_t current_node) {\n        new_node->my_next = current_node;\n        return previous->atomic_set_next(new_node, current_node);\n    }\n\n    // Insert a new element between passed in iterators\n    std::pair<iterator, bool> try_insert(raw_iterator it, raw_iterator next, nodeptr_t pnode, size_type *new_count)\n    {\n        nodeptr_t inserted_node = try_insert_atomic(it.get_node_ptr(), pnode, next.get_node_ptr());\n\n        if (inserted_node == pnode)\n        {\n            // If the insert succeeded, check that the order is correct and increment the element count\n            check_range(it, next);\n            *new_count = tbb::internal::as_atomic(my_element_count).fetch_and_increment();\n            return std::pair<iterator, bool>(iterator(pnode, this), true);\n        }\n        else\n        {\n            return std::pair<iterator, bool>(end(), false);\n        }\n    }\n\n    // Insert a new dummy element, starting search at a parent dummy element\n    raw_iterator insert_dummy(raw_iterator it, sokey_t order_key)\n    {\n        raw_iterator last = raw_end();\n        raw_iterator where = it;\n\n        __TBB_ASSERT(where != last, \"Invalid head node\");\n\n        ++where;\n\n        // Create a dummy element up front, even though it may be discarded (due to concurrent insertion)\n        nodeptr_t dummy_node = create_node(order_key);\n\n        for (;;)\n        {\n            __TBB_ASSERT(it != last, \"Invalid head list node\");\n\n            // If the head iterator is at the end of the list, or past the point where this dummy\n            // node needs to be inserted, then try to insert it.\n            if (where == last || get_order_key(where) > order_key)\n            {\n                __TBB_ASSERT(get_order_key(it) < order_key, \"Invalid node order in the list\");\n\n                // Try to insert it in the right place\n                nodeptr_t inserted_node = try_insert_atomic(it.get_node_ptr(), dummy_node, where.get_node_ptr());\n\n                if (inserted_node == dummy_node)\n                {\n                    // Insertion succeeded, check the list for order violations\n                    check_range(it, where);\n                    return raw_iterator(dummy_node);\n                }\n                else\n                {\n                    // Insertion failed: either dummy node was inserted by another thread, or\n                    // a real element was inserted at exactly the same place as dummy node.\n                    // Proceed with the search from the previous location where order key was\n                    // known to be larger (note: this is legal only because there is no safe\n                    // concurrent erase operation supported).\n                    where = it;\n                    ++where;\n                    continue;\n                }\n            }\n            else if (get_order_key(where) == order_key)\n            {\n                // Another dummy node with the same value found, discard the new one.\n                destroy_node(dummy_node);\n                return where;\n            }\n\n            // Move the iterator forward\n            it = where;\n            ++where;\n        }\n\n    }\n\n    // This erase function can handle both real and dummy nodes\n    void erase_node(raw_iterator previous, raw_const_iterator& where)\n    {\n        nodeptr_t pnode = (where++).get_node_ptr();\n        nodeptr_t prevnode = previous.get_node_ptr();\n        __TBB_ASSERT(prevnode->my_next == pnode, \"Erase must take consecutive iterators\");\n        prevnode->my_next = pnode->my_next;\n\n        destroy_node(pnode);\n    }\n\n    // Erase the element (previous node needs to be passed because this is a forward only list)\n    iterator erase_node(raw_iterator previous, const_iterator where)\n    {\n        raw_const_iterator it = where;\n        erase_node(previous, it);\n        my_element_count--;\n\n        return get_iterator(first_real_iterator(it));\n    }\n\n    // Move all elements from the passed in split-ordered list to this one\n    void move_all(self_type& source)\n    {\n        raw_const_iterator first = source.raw_begin();\n        raw_const_iterator last = source.raw_end();\n\n        if (first == last)\n            return;\n\n        nodeptr_t previous_node = my_head;\n        raw_const_iterator begin_iterator = first++;\n\n        // Move all elements one by one, including dummy ones\n        for (raw_const_iterator it = first; it != last;)\n        {\n            nodeptr_t pnode = it.get_node_ptr();\n\n            nodeptr_t dummy_node = pnode->is_dummy() ? create_node(pnode->get_order_key()) : create_node(pnode->get_order_key(), pnode->my_element);\n            previous_node = try_insert_atomic(previous_node, dummy_node, NULL);\n            __TBB_ASSERT(previous_node != NULL, \"Insertion must succeed\");\n            raw_const_iterator where = it++;\n            source.erase_node(get_iterator(begin_iterator), where);\n        }\n        check_range();\n    }\n\n\nprivate:\n    //Need to setup private fields of split_ordered_list in move constructor and assignment of concurrent_unordered_base\n    template <typename Traits>\n    friend class concurrent_unordered_base;\n\n    // Check the list for order violations\n    void check_range( raw_iterator first, raw_iterator last )\n    {\n#if TBB_USE_ASSERT\n        for (raw_iterator it = first; it != last; ++it)\n        {\n            raw_iterator next = it;\n            ++next;\n\n            __TBB_ASSERT(next == raw_end() || get_order_key(next) >= get_order_key(it), \"!!! List order inconsistency !!!\");\n        }\n#else\n        tbb::internal::suppress_unused_warning(first, last);\n#endif\n    }\n    void check_range()\n    {\n#if TBB_USE_ASSERT\n        check_range( raw_begin(), raw_end() );\n#endif\n    }\n\n    typename allocator_type::template rebind<node>::other my_node_allocator;  // allocator object for nodes\n    size_type                                             my_element_count;   // Total item count, not counting dummy nodes\n    nodeptr_t                                             my_head;            // pointer to head node\n};\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning(push)\n#pragma warning(disable: 4127) // warning C4127: conditional expression is constant\n#endif\n\ntemplate <typename Traits>\nclass concurrent_unordered_base : public Traits\n{\nprotected:\n    // Type definitions\n    typedef concurrent_unordered_base<Traits> self_type;\n    typedef typename Traits::value_type value_type;\n    typedef typename Traits::key_type key_type;\n    typedef typename Traits::hash_compare hash_compare;\n    typedef typename Traits::value_compare value_compare;\n    typedef typename Traits::allocator_type allocator_type;\n    typedef typename hash_compare::hasher hasher;\n    typedef typename hash_compare::key_equal key_equal;\n    typedef typename allocator_type::pointer pointer;\n    typedef typename allocator_type::const_pointer const_pointer;\n    typedef typename allocator_type::reference reference;\n    typedef typename allocator_type::const_reference const_reference;\n    typedef typename allocator_type::size_type size_type;\n    typedef typename allocator_type::difference_type difference_type;\n    typedef split_ordered_list<value_type, typename Traits::allocator_type> solist_t;\n    typedef typename solist_t::nodeptr_t nodeptr_t;\n    // Iterators that walk the entire split-order list, including dummy nodes\n    typedef typename solist_t::raw_iterator raw_iterator;\n    typedef typename solist_t::raw_const_iterator raw_const_iterator;\n    typedef typename solist_t::iterator iterator; // TODO: restore const iterator for unordered_sets\n    typedef typename solist_t::const_iterator const_iterator;\n    typedef iterator local_iterator;\n    typedef const_iterator const_local_iterator;\n    using Traits::my_hash_compare;\n    using Traits::get_key;\n    using Traits::allow_multimapping;\n\n    static const size_type initial_bucket_number = 8;                               // Initial number of buckets\nprivate:\n    typedef std::pair<iterator, iterator> pairii_t;\n    typedef std::pair<const_iterator, const_iterator> paircc_t;\n\n    static size_type const pointers_per_table = sizeof(size_type) * 8;              // One bucket segment per bit\n    static const size_type initial_bucket_load = 4;                                // Initial maximum number of elements per bucket\n\n    struct call_internal_clear_on_exit{\n        concurrent_unordered_base* my_instance;\n        call_internal_clear_on_exit(concurrent_unordered_base* instance) : my_instance(instance) {}\n        void dismiss(){ my_instance = NULL;}\n        ~call_internal_clear_on_exit(){\n            if (my_instance){\n                my_instance->internal_clear();\n            }\n        }\n    };\nprotected:\n    // Constructors/Destructors\n    concurrent_unordered_base(size_type n_of_buckets = initial_bucket_number,\n        const hash_compare& hc = hash_compare(), const allocator_type& a = allocator_type())\n        : Traits(hc), my_solist(a),\n          my_allocator(a), my_maximum_bucket_size((float) initial_bucket_load)\n    {\n        if( n_of_buckets == 0) ++n_of_buckets;\n        my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)n_of_buckets*2-1); // round up to power of 2\n        internal_init();\n    }\n\n    concurrent_unordered_base(const concurrent_unordered_base& right, const allocator_type& a)\n        : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)\n    {\n        internal_init();\n        internal_copy(right);\n    }\n\n    concurrent_unordered_base(const concurrent_unordered_base& right)\n        : Traits(right.my_hash_compare), my_solist(right.get_allocator()), my_allocator(right.get_allocator())\n    {\n        //FIXME:exception safety seems to be broken here\n        internal_init();\n        internal_copy(right);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_base(concurrent_unordered_base&& right)\n        : Traits(right.my_hash_compare), my_solist(right.get_allocator()), my_allocator(right.get_allocator())\n    {\n        internal_init();\n        swap(right);\n    }\n\n    concurrent_unordered_base(concurrent_unordered_base&& right, const allocator_type& a)\n        : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)\n    {\n        call_internal_clear_on_exit clear_buckets_on_exception(this);\n\n        internal_init();\n        if (a == right.get_allocator()){\n            this->swap(right);\n        }else{\n            my_maximum_bucket_size = right.my_maximum_bucket_size;\n            my_number_of_buckets = right.my_number_of_buckets;\n            my_solist.my_element_count = right.my_solist.my_element_count;\n\n            if (! right.my_solist.empty()){\n                nodeptr_t previous_node = my_solist.my_head;\n\n                // Move all elements one by one, including dummy ones\n                for (raw_const_iterator it = ++(right.my_solist.raw_begin()), last = right.my_solist.raw_end(); it != last; ++it)\n                {\n                    const nodeptr_t pnode = it.get_node_ptr();\n                    nodeptr_t node;\n                    if (pnode->is_dummy()) {\n                        node = my_solist.create_node(pnode->get_order_key());\n                        size_type bucket = __TBB_ReverseBits(pnode->get_order_key()) % my_number_of_buckets;\n                        set_bucket(bucket, node);\n                    }else{\n                        node = my_solist.create_node(pnode->get_order_key(), std::move(pnode->my_element));\n                    }\n\n                    previous_node = my_solist.try_insert_atomic(previous_node, node, NULL);\n                    __TBB_ASSERT(previous_node != NULL, \"Insertion of node failed. Concurrent inserts in constructor ?\");\n                }\n                my_solist.check_range();\n            }\n        }\n\n        clear_buckets_on_exception.dismiss();\n    }\n\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    concurrent_unordered_base& operator=(const concurrent_unordered_base& right) {\n        if (this != &right)\n            internal_copy(right);\n        return (*this);\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    concurrent_unordered_base& operator=(concurrent_unordered_base&& other)\n    {\n        if(this != &other){\n            typedef typename tbb::internal::allocator_traits<allocator_type>::propagate_on_container_move_assignment pocma_t;\n            if(pocma_t::value || this->my_allocator == other.my_allocator) {\n                concurrent_unordered_base trash (std::move(*this));\n                swap(other);\n                if (pocma_t::value) {\n                    using std::swap;\n                    //TODO: swapping allocators here may be a problem, replace with single direction moving\n                    swap(this->my_solist.my_node_allocator, other.my_solist.my_node_allocator);\n                    swap(this->my_allocator, other.my_allocator);\n                }\n            } else {\n                concurrent_unordered_base moved_copy(std::move(other),this->my_allocator);\n                this->swap(moved_copy);\n            }\n        }\n        return *this;\n    }\n\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! assignment operator from initializer_list\n    concurrent_unordered_base& operator=(std::initializer_list<value_type> il)\n    {\n        this->clear();\n        this->insert(il.begin(),il.end());\n        return (*this);\n    }\n#endif // __TBB_INITIALIZER_LISTS_PRESENT\n\n\n    ~concurrent_unordered_base() {\n        // Delete all node segments\n        internal_clear();\n    }\n\npublic:\n    allocator_type get_allocator() const {\n        return my_solist.get_allocator();\n    }\n\n    // Size and capacity function\n    bool empty() const {\n        return my_solist.empty();\n    }\n\n    size_type size() const {\n        return my_solist.size();\n    }\n\n    size_type max_size() const {\n        return my_solist.max_size();\n    }\n\n    // Iterators\n    iterator begin() {\n        return my_solist.begin();\n    }\n\n    const_iterator begin() const {\n        return my_solist.begin();\n    }\n\n    iterator end() {\n        return my_solist.end();\n    }\n\n    const_iterator end() const {\n        return my_solist.end();\n    }\n\n    const_iterator cbegin() const {\n        return my_solist.cbegin();\n    }\n\n    const_iterator cend() const {\n        return my_solist.cend();\n    }\n\n    // Parallel traversal support\n    class const_range_type : tbb::internal::no_assign {\n        const concurrent_unordered_base &my_table;\n        raw_const_iterator my_begin_node;\n        raw_const_iterator my_end_node;\n        mutable raw_const_iterator my_midpoint_node;\n    public:\n        //! Type for size of a range\n        typedef typename concurrent_unordered_base::size_type size_type;\n        typedef typename concurrent_unordered_base::value_type value_type;\n        typedef typename concurrent_unordered_base::reference reference;\n        typedef typename concurrent_unordered_base::difference_type difference_type;\n        typedef typename concurrent_unordered_base::const_iterator iterator;\n\n        //! True if range is empty.\n        bool empty() const {return my_begin_node == my_end_node;}\n\n        //! True if range can be partitioned into two subranges.\n        bool is_divisible() const {\n            return my_midpoint_node != my_end_node;\n        }\n        //! Split range.\n        const_range_type( const_range_type &r, split ) :\n            my_table(r.my_table), my_end_node(r.my_end_node)\n        {\n            r.my_end_node = my_begin_node = r.my_midpoint_node;\n            __TBB_ASSERT( !empty(), \"Splitting despite the range is not divisible\" );\n            __TBB_ASSERT( !r.empty(), \"Splitting despite the range is not divisible\" );\n            set_midpoint();\n            r.set_midpoint();\n        }\n        //! Init range with container and grainsize specified\n        const_range_type( const concurrent_unordered_base &a_table ) :\n            my_table(a_table), my_begin_node(a_table.my_solist.begin()),\n            my_end_node(a_table.my_solist.end())\n        {\n            set_midpoint();\n        }\n        iterator begin() const { return my_table.my_solist.get_iterator(my_begin_node); }\n        iterator end() const { return my_table.my_solist.get_iterator(my_end_node); }\n        //! The grain size for this range.\n        size_type grainsize() const { return 1; }\n\n        //! Set my_midpoint_node to point approximately half way between my_begin_node and my_end_node.\n        void set_midpoint() const {\n            if( my_begin_node == my_end_node ) // not divisible\n                my_midpoint_node = my_end_node;\n            else {\n                sokey_t begin_key = solist_t::get_safe_order_key(my_begin_node);\n                sokey_t end_key = solist_t::get_safe_order_key(my_end_node);\n                size_t mid_bucket = __TBB_ReverseBits( begin_key + (end_key-begin_key)/2 ) % my_table.my_number_of_buckets;\n                while ( !my_table.is_initialized(mid_bucket) ) mid_bucket = my_table.get_parent(mid_bucket);\n                if(__TBB_ReverseBits(mid_bucket) > begin_key) {\n                    // found a dummy_node between begin and end\n                    my_midpoint_node = my_table.my_solist.first_real_iterator(my_table.get_bucket( mid_bucket ));\n                }\n                else {\n                    // didn't find a dummy node between begin and end.\n                    my_midpoint_node = my_end_node;\n                }\n#if TBB_USE_ASSERT\n                {\n                    sokey_t mid_key = solist_t::get_safe_order_key(my_midpoint_node);\n                    __TBB_ASSERT( begin_key < mid_key, \"my_begin_node is after my_midpoint_node\" );\n                    __TBB_ASSERT( mid_key <= end_key, \"my_midpoint_node is after my_end_node\" );\n                }\n#endif // TBB_USE_ASSERT\n            }\n        }\n    };\n\n    class range_type : public const_range_type {\n    public:\n        typedef typename concurrent_unordered_base::iterator iterator;\n        //! Split range.\n        range_type( range_type &r, split ) : const_range_type( r, split() ) {}\n        //! Init range with container and grainsize specified\n        range_type( const concurrent_unordered_base &a_table ) : const_range_type(a_table) {}\n\n        iterator begin() const { return solist_t::get_iterator( const_range_type::begin() ); }\n        iterator end() const { return solist_t::get_iterator( const_range_type::end() ); }\n    };\n\n    range_type range() {\n        return range_type( *this );\n    }\n\n    const_range_type range() const {\n        return const_range_type( *this );\n    }\n\n    // Modifiers\n    std::pair<iterator, bool> insert(const value_type& value) {\n        return internal_insert(value);\n    }\n\n    iterator insert(const_iterator, const value_type& value) {\n        // Ignore hint\n        return insert(value).first;\n    }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    std::pair<iterator, bool> insert(value_type&& value) {\n        return internal_insert(std::move(value));\n    }\n\n    iterator insert(const_iterator, value_type&& value) {\n        // Ignore hint\n        return insert(std::move(value)).first;\n    }\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template<typename... Args>\n    std::pair<iterator, bool> emplace(Args&&... args) {\n        nodeptr_t pnode = my_solist.create_node_v(tbb::internal::forward<Args>(args)...);\n        const sokey_t hashed_element_key = (sokey_t) my_hash_compare(get_key(pnode->my_element));\n        const sokey_t order_key = split_order_key_regular(hashed_element_key);\n        pnode->init(order_key);\n\n        return internal_insert(pnode->my_element, pnode);\n    }\n\n    template<typename... Args>\n    iterator emplace_hint(const_iterator, Args&&... args) {\n        // Ignore hint\n        return emplace(tbb::internal::forward<Args>(args)...).first;\n    }\n\n#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n    template<class Iterator>\n    void insert(Iterator first, Iterator last) {\n        for (Iterator it = first; it != last; ++it)\n            insert(*it);\n    }\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    //! Insert initializer list\n    void insert(std::initializer_list<value_type> il) {\n        insert(il.begin(), il.end());\n    }\n#endif\n\n    iterator unsafe_erase(const_iterator where) {\n        return internal_erase(where);\n    }\n\n    iterator unsafe_erase(const_iterator first, const_iterator last) {\n        while (first != last)\n            unsafe_erase(first++);\n        return my_solist.get_iterator(first);\n    }\n\n    size_type unsafe_erase(const key_type& key) {\n        pairii_t where = equal_range(key);\n        size_type item_count = internal_distance(where.first, where.second);\n        unsafe_erase(where.first, where.second);\n        return item_count;\n    }\n\n    void swap(concurrent_unordered_base& right) {\n        if (this != &right) {\n            std::swap(my_hash_compare, right.my_hash_compare); // TODO: check what ADL meant here\n            my_solist.swap(right.my_solist);\n            internal_swap_buckets(right);\n            std::swap(my_number_of_buckets, right.my_number_of_buckets);\n            std::swap(my_maximum_bucket_size, right.my_maximum_bucket_size);\n        }\n    }\n\n    // Observers\n    hasher hash_function() const {\n        return my_hash_compare.my_hash_object;\n    }\n\n    key_equal key_eq() const {\n        return my_hash_compare.my_key_compare_object;\n    }\n\n    void clear() {\n        // Clear list\n        my_solist.clear();\n\n        // Clear buckets\n        internal_clear();\n\n        // Initialize bucket 0\n        __TBB_ASSERT(my_buckets[0] == NULL, NULL);\n        raw_iterator dummy_node = my_solist.raw_begin();\n        set_bucket(0, dummy_node);\n    }\n\n    // Lookup\n    iterator find(const key_type& key) {\n        return internal_find(key);\n    }\n\n    const_iterator find(const key_type& key) const {\n        return const_cast<self_type*>(this)->internal_find(key);\n    }\n\n    size_type count(const key_type& key) const {\n        if(allow_multimapping) {\n            paircc_t answer = equal_range(key);\n            size_type item_count = internal_distance(answer.first, answer.second);\n            return item_count;\n        } else {\n            return const_cast<self_type*>(this)->internal_find(key) == end()?0:1;\n        }\n    }\n\n    std::pair<iterator, iterator> equal_range(const key_type& key) {\n        return internal_equal_range(key);\n    }\n\n    std::pair<const_iterator, const_iterator> equal_range(const key_type& key) const {\n        return const_cast<self_type*>(this)->internal_equal_range(key);\n    }\n\n    // Bucket interface - for debugging\n    size_type unsafe_bucket_count() const {\n        return my_number_of_buckets;\n    }\n\n    size_type unsafe_max_bucket_count() const {\n        return segment_size(pointers_per_table-1);\n    }\n\n    size_type unsafe_bucket_size(size_type bucket) {\n        size_type item_count = 0;\n        if (is_initialized(bucket)) {\n            raw_iterator it = get_bucket(bucket);\n            ++it;\n            for (; it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy(); ++it)\n                ++item_count;\n        }\n        return item_count;\n    }\n\n    size_type unsafe_bucket(const key_type& key) const {\n        sokey_t order_key = (sokey_t) my_hash_compare(key);\n        size_type bucket = order_key % my_number_of_buckets;\n        return bucket;\n    }\n\n    // If the bucket is initialized, return a first non-dummy element in it\n    local_iterator unsafe_begin(size_type bucket) {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_iterator it = get_bucket(bucket);\n        return my_solist.first_real_iterator(it);\n    }\n\n    // If the bucket is initialized, return a first non-dummy element in it\n    const_local_iterator unsafe_begin(size_type bucket) const\n    {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_const_iterator it = get_bucket(bucket);\n        return my_solist.first_real_iterator(it);\n    }\n\n    // @REVIEW: Takes O(n)\n    // Returns the iterator after the last non-dummy element in the bucket\n    local_iterator unsafe_end(size_type bucket)\n    {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_iterator it = get_bucket(bucket);\n\n        // Find the end of the bucket, denoted by the dummy element\n        do ++it;\n        while(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());\n\n        // Return the first real element past the end of the bucket\n        return my_solist.first_real_iterator(it);\n    }\n\n    // @REVIEW: Takes O(n)\n    // Returns the iterator after the last non-dummy element in the bucket\n    const_local_iterator unsafe_end(size_type bucket) const\n    {\n        if (!is_initialized(bucket))\n            return end();\n\n        raw_const_iterator it = get_bucket(bucket);\n\n        // Find the end of the bucket, denoted by the dummy element\n        do ++it;\n        while(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());\n\n        // Return the first real element past the end of the bucket\n        return my_solist.first_real_iterator(it);\n    }\n\n    const_local_iterator unsafe_cbegin(size_type bucket) const {\n        return ((const self_type *) this)->unsafe_begin(bucket);\n    }\n\n    const_local_iterator unsafe_cend(size_type bucket) const {\n        return ((const self_type *) this)->unsafe_end(bucket);\n    }\n\n    // Hash policy\n    float load_factor() const {\n        return (float) size() / (float) unsafe_bucket_count();\n    }\n\n    float max_load_factor() const {\n        return my_maximum_bucket_size;\n    }\n\n    void max_load_factor(float newmax) {\n        if (newmax != newmax || newmax < 0)\n            tbb::internal::throw_exception(tbb::internal::eid_invalid_load_factor);\n        my_maximum_bucket_size = newmax;\n    }\n\n    // This function is a noop, because the underlying split-ordered list\n    // is already sorted, so an increase in the bucket number will be\n    // reflected next time this bucket is touched.\n    void rehash(size_type buckets) {\n        size_type current_buckets = my_number_of_buckets;\n        if (current_buckets >= buckets)\n            return;\n        my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)buckets*2-1); // round up to power of 2\n    }\n\nprivate:\n\n    // Initialize the hash and keep the first bucket open\n    void internal_init() {\n        // Allocate an array of segment pointers\n        memset(my_buckets, 0, pointers_per_table * sizeof(void *));\n\n        // Initialize bucket 0\n        raw_iterator dummy_node = my_solist.raw_begin();\n        set_bucket(0, dummy_node);\n    }\n\n    void internal_clear() {\n        for (size_type index = 0; index < pointers_per_table; ++index) {\n            if (my_buckets[index] != NULL) {\n                size_type sz = segment_size(index);\n                for (size_type index2 = 0; index2 < sz; ++index2)\n                    my_allocator.destroy(&my_buckets[index][index2]);\n                my_allocator.deallocate(my_buckets[index], sz);\n                my_buckets[index] = 0;\n            }\n        }\n    }\n\n    void internal_copy(const self_type& right) {\n        clear();\n\n        my_maximum_bucket_size = right.my_maximum_bucket_size;\n        my_number_of_buckets = right.my_number_of_buckets;\n\n        __TBB_TRY {\n            insert(right.begin(), right.end());\n            my_hash_compare = right.my_hash_compare;\n        } __TBB_CATCH(...) {\n            my_solist.clear();\n            __TBB_RETHROW();\n        }\n    }\n\n    void internal_swap_buckets(concurrent_unordered_base& right)\n    {\n        // Swap all node segments\n        for (size_type index = 0; index < pointers_per_table; ++index)\n        {\n            raw_iterator * iterator_pointer = my_buckets[index];\n            my_buckets[index] = right.my_buckets[index];\n            right.my_buckets[index] = iterator_pointer;\n        }\n    }\n\n    //TODO: why not use std::distance?\n    // Hash APIs\n    static size_type internal_distance(const_iterator first, const_iterator last)\n    {\n        size_type num = 0;\n\n        for (const_iterator it = first; it != last; ++it)\n            ++num;\n\n        return num;\n    }\n\n    // Insert an element in the hash given its value\n    template< typename ValueType>\n    std::pair<iterator, bool> internal_insert( __TBB_FORWARDING_REF(ValueType) value, nodeptr_t pnode = NULL)\n    {\n        sokey_t order_key = (sokey_t) my_hash_compare(get_key(value));\n        size_type bucket = order_key % my_number_of_buckets;\n\n        //TODO:refactor the get_bucket related stuff into separate function something like acquire_bucket(key_type)\n        // If bucket is empty, initialize it first\n        if (!is_initialized(bucket))\n            init_bucket(bucket);\n\n        size_type new_count = 0;\n        order_key = split_order_key_regular(order_key);\n        raw_iterator it = get_bucket(bucket);\n        raw_iterator last = my_solist.raw_end();\n        raw_iterator where = it;\n\n        __TBB_ASSERT(where != last, \"Invalid head node\");\n\n        // First node is a dummy node\n        ++where;\n\n        for (;;)\n        {\n            if (where == last || solist_t::get_order_key(where) > order_key ||\n                    // if multimapped, stop at the first item equal to us.\n                    (allow_multimapping && solist_t::get_order_key(where) == order_key &&\n                     !my_hash_compare(get_key(*where), get_key(value))))\n            {\n                 if (!pnode)\n                     pnode = my_solist.create_node(order_key, tbb::internal::forward<ValueType>(value));\n\n                // Try to insert 'pnode' between 'it' and 'where'\n                std::pair<iterator, bool> result = my_solist.try_insert(it, where, pnode, &new_count);\n\n                if (result.second)\n                {\n                    // Insertion succeeded, adjust the table size, if needed\n                    adjust_table_size(new_count, my_number_of_buckets);\n                    return result;\n                }\n                else\n                {\n                    // Insertion failed: either the same node was inserted by another thread, or\n                    // another element was inserted at exactly the same place as this node.\n                    // Proceed with the search from the previous location where order key was\n                    // known to be larger (note: this is legal only because there is no safe\n                    // concurrent erase operation supported).\n                    where = it;\n                    ++where;\n                    continue;\n                }\n            }\n            else if (!allow_multimapping && solist_t::get_order_key(where) == order_key &&\n                    my_hash_compare(get_key(*where), get_key(value)) == 0)\n            { // Element already in the list, return it\n                 if (pnode)\n                     my_solist.destroy_node(pnode);\n                return std::pair<iterator, bool>(my_solist.get_iterator(where), false);\n            }\n            // Move the iterator forward\n            it = where;\n            ++where;\n        }\n    }\n\n    // Find the element in the split-ordered list\n    iterator internal_find(const key_type& key)\n    {\n        sokey_t order_key = (sokey_t) my_hash_compare(key);\n        size_type bucket = order_key % my_number_of_buckets;\n\n        // If bucket is empty, initialize it first\n        if (!is_initialized(bucket))\n            init_bucket(bucket);\n\n        order_key = split_order_key_regular(order_key);\n        raw_iterator last = my_solist.raw_end();\n\n        for (raw_iterator it = get_bucket(bucket); it != last; ++it)\n        {\n            if (solist_t::get_order_key(it) > order_key)\n            {\n                // If the order key is smaller than the current order key, the element\n                // is not in the hash.\n                return end();\n            }\n            else if (solist_t::get_order_key(it) == order_key)\n            {\n                // The fact that order keys match does not mean that the element is found.\n                // Key function comparison has to be performed to check whether this is the\n                // right element. If not, keep searching while order key is the same.\n                if (!my_hash_compare(get_key(*it), key))\n                    return my_solist.get_iterator(it);\n            }\n        }\n\n        return end();\n    }\n\n    // Erase an element from the list. This is not a concurrency safe function.\n    iterator internal_erase(const_iterator it)\n    {\n        //const reference extends lifetime of possible temporary coming from get_key\n        const key_type& key = get_key(*it);\n        sokey_t order_key = (sokey_t) my_hash_compare(key);\n        size_type bucket = order_key % my_number_of_buckets;\n\n        // If bucket is empty, initialize it first\n        if (!is_initialized(bucket))\n            init_bucket(bucket);\n\n        order_key = split_order_key_regular(order_key);\n\n        raw_iterator previous = get_bucket(bucket);\n        raw_iterator last = my_solist.raw_end();\n        raw_iterator where = previous;\n\n        __TBB_ASSERT(where != last, \"Invalid head node\");\n\n        // First node is a dummy node\n        ++where;\n\n        for (;;) {\n            if (where == last)\n                return end();\n            else if (my_solist.get_iterator(where) == it)\n                return my_solist.erase_node(previous, it);\n\n            // Move the iterator forward\n            previous = where;\n            ++where;\n        }\n    }\n\n    // Return the [begin, end) pair of iterators with the same key values.\n    // This operation makes sense only if mapping is many-to-one.\n    pairii_t internal_equal_range(const key_type& key)\n    {\n        sokey_t order_key = (sokey_t) my_hash_compare(key);\n        size_type bucket = order_key % my_number_of_buckets;\n\n        // If bucket is empty, initialize it first\n        if (!is_initialized(bucket))\n            init_bucket(bucket);\n\n        order_key = split_order_key_regular(order_key);\n        raw_iterator end_it = my_solist.raw_end();\n\n        for (raw_iterator it = get_bucket(bucket); it != end_it; ++it)\n        {\n            if (solist_t::get_order_key(it) > order_key)\n            {\n                // There is no element with the given key\n                return pairii_t(end(), end());\n            }\n            else if (solist_t::get_order_key(it) == order_key && !my_hash_compare(get_key(*it), key))\n            {\n                iterator first = my_solist.get_iterator(it);\n                iterator last = first;\n                do ++last; while( allow_multimapping && last != end() && !my_hash_compare(get_key(*last), key) );\n                return pairii_t(first, last);\n            }\n        }\n\n        return pairii_t(end(), end());\n    }\n\n    // Bucket APIs\n    void init_bucket(size_type bucket)\n    {\n        // Bucket 0 has no parent.\n        __TBB_ASSERT( bucket != 0, \"The first bucket must always be initialized\");\n\n        size_type parent_bucket = get_parent(bucket);\n\n        // All parent_bucket buckets have to be initialized before this bucket is\n        if (!is_initialized(parent_bucket))\n            init_bucket(parent_bucket);\n\n        raw_iterator parent = get_bucket(parent_bucket);\n\n        // Create a dummy first node in this bucket\n        raw_iterator dummy_node = my_solist.insert_dummy(parent, split_order_key_dummy(bucket));\n        set_bucket(bucket, dummy_node);\n    }\n\n    void adjust_table_size(size_type total_elements, size_type current_size)\n    {\n        // Grow the table by a factor of 2 if possible and needed\n        if ( ((float) total_elements / (float) current_size) > my_maximum_bucket_size )\n        {\n            // Double the size of the hash only if size has not changed in between loads\n            my_number_of_buckets.compare_and_swap(2u*current_size, current_size);\n            //Simple \"my_number_of_buckets.compare_and_swap( current_size<<1, current_size );\" does not work for VC8\n            //due to overzealous compiler warnings in /Wp64 mode\n        }\n    }\n\n    size_type get_parent(size_type bucket) const\n    {\n        // Unsets bucket's most significant turned-on bit\n        size_type msb = __TBB_Log2((uintptr_t)bucket);\n        return bucket & ~(size_type(1) << msb);\n    }\n\n\n    // Dynamic sized array (segments)\n    //! @return segment index of given index in the array\n    static size_type segment_index_of( size_type index ) {\n        return size_type( __TBB_Log2( uintptr_t(index|1) ) );\n    }\n\n    //! @return the first array index of given segment\n    static size_type segment_base( size_type k ) {\n        return (size_type(1)<<k & ~size_type(1));\n    }\n\n    //! @return segment size\n    static size_type segment_size( size_type k ) {\n        return k? size_type(1)<<k : 2;\n    }\n\n    raw_iterator get_bucket(size_type bucket) const {\n        size_type segment = segment_index_of(bucket);\n        bucket -= segment_base(segment);\n        __TBB_ASSERT( my_buckets[segment], \"bucket must be in an allocated segment\" );\n        return my_buckets[segment][bucket];\n    }\n\n    void set_bucket(size_type bucket, raw_iterator dummy_head) {\n        size_type segment = segment_index_of(bucket);\n        bucket -= segment_base(segment);\n\n        if (my_buckets[segment] == NULL) {\n            size_type sz = segment_size(segment);\n            raw_iterator * new_segment = my_allocator.allocate(sz);\n            std::memset(new_segment, 0, sz*sizeof(raw_iterator));\n\n            if (my_buckets[segment].compare_and_swap( new_segment, NULL) != NULL)\n                my_allocator.deallocate(new_segment, sz);\n        }\n\n        my_buckets[segment][bucket] = dummy_head;\n    }\n\n    bool is_initialized(size_type bucket) const {\n        size_type segment = segment_index_of(bucket);\n        bucket -= segment_base(segment);\n\n        if (my_buckets[segment] == NULL)\n            return false;\n\n        raw_iterator it = my_buckets[segment][bucket];\n        return (it.get_node_ptr() != NULL);\n    }\n\n    // Utilities for keys\n\n    // A regular order key has its original hash value reversed and the last bit set\n    sokey_t split_order_key_regular(sokey_t order_key) const {\n        return __TBB_ReverseBits(order_key) | 0x1;\n    }\n\n    // A dummy order key has its original hash value reversed and the last bit unset\n    sokey_t split_order_key_dummy(sokey_t order_key) const {\n        return __TBB_ReverseBits(order_key) & ~sokey_t(0x1);\n    }\n\n    // Shared variables\n    atomic<size_type>                                             my_number_of_buckets;       // Current table size\n    solist_t                                                      my_solist;                  // List where all the elements are kept\n    typename allocator_type::template rebind<raw_iterator>::other my_allocator;               // Allocator object for segments\n    float                                                         my_maximum_bucket_size;     // Maximum size of the bucket\n    atomic<raw_iterator*>                                         my_buckets[pointers_per_table]; // The segment table\n};\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n#pragma warning(pop) // warning 4127 is back\n#endif\n\n} // namespace internal\n//! @endcond\n} // namespace interface5\n} // namespace tbb\n#endif // __TBB__concurrent_unordered_impl_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_flow_graph_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__flow_graph_impl_H\n#define __TBB__flow_graph_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX (in flow_graph.h)\n\nnamespace internal {\n\n    typedef tbb::internal::uint64_t tag_value;\n\n    using tbb::internal::strip;\n\n    namespace graph_policy_namespace {\n\n        struct rejecting { };\n        struct reserving { };\n        struct queueing  { };\n\n        // K == type of field used for key-matching.  Each tag-matching port will be provided\n        // functor that, given an object accepted by the port, will return the\n        /// field of type K being used for matching.\n        template<typename K, typename KHash=tbb_hash_compare<typename strip<K>::type > >\n        struct key_matching {\n            typedef K key_type;\n            typedef typename strip<K>::type base_key_type;\n            typedef KHash hash_compare_type;\n        };\n\n        // old tag_matching join's new specifier\n        typedef key_matching<tag_value> tag_matching;\n    }\n\n// -------------- function_body containers ----------------------\n\n    //! A functor that takes no input and generates a value of type Output\n    template< typename Output >\n    class source_body : tbb::internal::no_assign {\n    public:\n        virtual ~source_body() {}\n        virtual bool operator()(Output &output) = 0;\n        virtual source_body* clone() = 0;\n    };\n\n    //! The leaf for source_body\n    template< typename Output, typename Body>\n    class source_body_leaf : public source_body<Output> {\n    public:\n        source_body_leaf( const Body &_body ) : body(_body) { }\n        /*override*/ bool operator()(Output &output) { return body( output ); }\n        /*override*/ source_body_leaf* clone() {\n            return new source_body_leaf< Output, Body >(body);\n        }\n        Body get_body() { return body; }\n    private:\n        Body body;\n    };\n\n    //! A functor that takes an Input and generates an Output\n    template< typename Input, typename Output >\n    class function_body : tbb::internal::no_assign {\n    public:\n        virtual ~function_body() {}\n        virtual Output operator()(const Input &input) = 0;\n        virtual function_body* clone() = 0;\n    };\n\n    //! the leaf for function_body\n    template <typename Input, typename Output, typename B>\n    class function_body_leaf : public function_body< Input, Output > {\n    public:\n        function_body_leaf( const B &_body ) : body(_body) { }\n        Output operator()(const Input &i) { return body(i); }\n        B get_body() { return body; }\n        /*override*/ function_body_leaf* clone() {\n            return new function_body_leaf< Input, Output, B >(body);\n        }\n    private:\n        B body;\n    };\n\n    //! the leaf for function_body specialized for Input and output of continue_msg\n    template <typename B>\n    class function_body_leaf< continue_msg, continue_msg, B> : public function_body< continue_msg, continue_msg > {\n    public:\n        function_body_leaf( const B &_body ) : body(_body) { }\n        continue_msg operator()( const continue_msg &i ) {\n            body(i);\n            return i;\n        }\n        B get_body() { return body; }\n        /*override*/ function_body_leaf* clone() {\n           return new function_body_leaf< continue_msg, continue_msg, B >(body);\n        }\n    private:\n        B body;\n    };\n\n    //! the leaf for function_body specialized for Output of continue_msg\n    template <typename Input, typename B>\n    class function_body_leaf< Input, continue_msg, B> : public function_body< Input, continue_msg > {\n    public:\n        function_body_leaf( const B &_body ) : body(_body) { }\n        continue_msg operator()(const Input &i) {\n            body(i);\n            return continue_msg();\n        }\n        B get_body() { return body; }\n        /*override*/ function_body_leaf* clone() {\n            return new function_body_leaf< Input, continue_msg, B >(body);\n        }\n    private:\n        B body;\n    };\n\n    //! the leaf for function_body specialized for Input of continue_msg\n    template <typename Output, typename B>\n    class function_body_leaf< continue_msg, Output, B > : public function_body< continue_msg, Output > {\n    public:\n        function_body_leaf( const B &_body ) : body(_body) { }\n        Output operator()(const continue_msg &i) {\n            return body(i);\n        }\n        B get_body() { return body; }\n        /*override*/ function_body_leaf* clone() {\n            return new function_body_leaf< continue_msg, Output, B >(body);\n        }\n    private:\n        B body;\n    };\n\n#if __TBB_PREVIEW_ASYNC_NODE\ntemplate< typename T, typename = typename T::async_gateway_type >\nvoid set_async_gateway(T *body, void *g) {\n    body->set_async_gateway(static_cast<typename T::async_gateway_type *>(g));\n}\n\ninline void set_async_gateway(...) { }\n#endif\n\n    //! function_body that takes an Input and a set of output ports\n    template<typename Input, typename OutputSet>\n    class multifunction_body : tbb::internal::no_assign {\n    public:\n        virtual ~multifunction_body () {}\n        virtual void operator()(const Input &/* input*/, OutputSet &/*oset*/) = 0;\n        virtual multifunction_body* clone() = 0;\n#if __TBB_PREVIEW_ASYNC_NODE\n        virtual void set_gateway(void *gateway) = 0;\n#endif\n    };\n\n    //! leaf for multifunction.  OutputSet can be a std::tuple or a vector.\n    template<typename Input, typename OutputSet, typename B >\n    class multifunction_body_leaf : public multifunction_body<Input, OutputSet> {\n    public:\n        multifunction_body_leaf(const B &_body) : body(_body) { }\n        void operator()(const Input &input, OutputSet &oset) {\n            body(input, oset); // body may explicitly put() to one or more of oset.\n        }\n        B get_body() { return body; }\n\n#if __TBB_PREVIEW_ASYNC_NODE\n        /*override*/  void set_gateway(void *gateway) {\n           set_async_gateway(&body, gateway);\n        }\n#endif\n        /*override*/ multifunction_body_leaf* clone() {\n            return new multifunction_body_leaf<Input, OutputSet,B>(body);\n        }\n\n    private:\n        B body;\n    };\n\n// ------ function bodies for hash_buffers and key-matching joins.\n\ntemplate<typename Input, typename Output>\nclass type_to_key_function_body : tbb::internal::no_assign {\n    public:\n        virtual ~type_to_key_function_body() {}\n        virtual Output operator()(const Input &input) = 0;  // returns an Output\n        virtual type_to_key_function_body* clone() = 0;\n};\n\n// specialization for ref output\ntemplate<typename Input, typename Output>\nclass type_to_key_function_body<Input,Output&> : tbb::internal::no_assign {\n    public:\n        virtual ~type_to_key_function_body() {}\n        virtual const Output & operator()(const Input &input) = 0;  // returns a const Output&\n        virtual type_to_key_function_body* clone() = 0;\n};\n\ntemplate <typename Input, typename Output, typename B>\nclass type_to_key_function_body_leaf : public type_to_key_function_body<Input, Output> {\npublic:\n    type_to_key_function_body_leaf( const B &_body ) : body(_body) { }\n    /*override*/Output operator()(const Input &i) { return body(i); }\n    B get_body() { return body; }\n    /*override*/ type_to_key_function_body_leaf* clone() {\n        return new type_to_key_function_body_leaf< Input, Output, B>(body);\n    }\nprivate:\n    B body;\n};\n\ntemplate <typename Input, typename Output, typename B>\nclass type_to_key_function_body_leaf<Input,Output&,B> : public type_to_key_function_body< Input, Output&> {\npublic:\n    type_to_key_function_body_leaf( const B &_body ) : body(_body) { }\n\n    /*override*/const Output& operator()(const Input &i) {\n        return body(i);\n    }\n\n    B get_body() { return body; }\n\n    /*override*/ type_to_key_function_body_leaf* clone() {\n        return new type_to_key_function_body_leaf< Input, Output&, B>(body);\n    }\n\nprivate:\n    B body;\n};\n\n// --------------------------- end of function_body containers ------------------------\n\n// --------------------------- node task bodies ---------------------------------------\n\n    //! A task that calls a node's forward_task function\n    template< typename NodeType >\n    class forward_task_bypass : public task {\n\n        NodeType &my_node;\n\n    public:\n\n        forward_task_bypass( NodeType &n ) : my_node(n) {}\n\n        task *execute() {\n            task * new_task = my_node.forward_task();\n            if (new_task == SUCCESSFULLY_ENQUEUED) new_task = NULL;\n            return new_task;\n        }\n    };\n\n    //! A task that calls a node's apply_body_bypass function, passing in an input of type Input\n    //  return the task* unless it is SUCCESSFULLY_ENQUEUED, in which case return NULL\n    template< typename NodeType, typename Input >\n    class apply_body_task_bypass : public task {\n\n        NodeType &my_node;\n        Input my_input;\n\n    public:\n\n        apply_body_task_bypass( NodeType &n, const Input &i ) : my_node(n), my_input(i) {}\n\n        task *execute() {\n            task * next_task = my_node.apply_body_bypass( my_input );\n            if(next_task == SUCCESSFULLY_ENQUEUED) next_task = NULL;\n            return next_task;\n        }\n    };\n\n    //! A task that calls a node's apply_body_bypass function with no input\n    template< typename NodeType >\n    class source_task_bypass : public task {\n\n        NodeType &my_node;\n\n    public:\n\n        source_task_bypass( NodeType &n ) : my_node(n) {}\n\n        task *execute() {\n            task *new_task = my_node.apply_body_bypass( );\n            if(new_task == SUCCESSFULLY_ENQUEUED) return NULL;\n            return new_task;\n        }\n    };\n\n// ------------------------ end of node task bodies -----------------------------------\n\n    //! An empty functor that takes an Input and returns a default constructed Output\n    template< typename Input, typename Output >\n    struct empty_body {\n       Output operator()( const Input & ) const { return Output(); }\n    };\n\n    //! A node_cache maintains a std::queue of elements of type T.  Each operation is protected by a lock.\n    template< typename T, typename M=spin_mutex >\n    class node_cache {\n        public:\n\n        typedef size_t size_type;\n\n        bool empty() {\n            typename mutex_type::scoped_lock lock( my_mutex );\n            return internal_empty();\n        }\n\n        void add( T &n ) {\n            typename mutex_type::scoped_lock lock( my_mutex );\n            internal_push(n);\n        }\n\n        void remove( T &n ) {\n            typename mutex_type::scoped_lock lock( my_mutex );\n            for ( size_t i = internal_size(); i != 0; --i ) {\n                T &s = internal_pop();\n                if ( &s == &n )  return;  // only remove one predecessor per request\n                internal_push(s);\n            }\n        }\n\n        void clear() {\n            while( !my_q.empty()) (void)my_q.pop();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            my_built_predecessors.clear();\n#endif\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef edge_container<T> built_predecessors_type;\n        built_predecessors_type &built_predecessors() { return my_built_predecessors; }\n\n        typedef typename edge_container<T>::edge_list_type predecessor_list_type;\n        void internal_add_built_predecessor( T &n ) {\n            typename mutex_type::scoped_lock lock( my_mutex );\n            my_built_predecessors.add_edge(n);\n        }\n\n        void internal_delete_built_predecessor( T &n ) {\n            typename mutex_type::scoped_lock lock( my_mutex );\n            my_built_predecessors.delete_edge(n);\n        }\n\n        void copy_predecessors( predecessor_list_type &v) {\n            typename mutex_type::scoped_lock lock( my_mutex );\n            my_built_predecessors.copy_edges(v);\n        }\n\n        size_t predecessor_count() {\n            typename mutex_type::scoped_lock lock(my_mutex);\n            return (size_t)(my_built_predecessors.edge_count());\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    protected:\n\n        typedef M mutex_type;\n        mutex_type my_mutex;\n        std::queue< T * > my_q;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_predecessors_type my_built_predecessors;\n#endif\n\n        // Assumes lock is held\n        inline bool internal_empty( )  {\n            return my_q.empty();\n        }\n\n        // Assumes lock is held\n        inline size_type internal_size( )  {\n            return my_q.size();\n        }\n\n        // Assumes lock is held\n        inline void internal_push( T &n )  {\n            my_q.push(&n);\n        }\n\n        // Assumes lock is held\n        inline T &internal_pop() {\n            T *v = my_q.front();\n            my_q.pop();\n            return *v;\n        }\n\n    };\n\n    //! A cache of predecessors that only supports try_get\n    template< typename T, typename M=spin_mutex >\n    class predecessor_cache : public node_cache< sender<T>, M > {\n    public:\n        typedef M mutex_type;\n        typedef T output_type;\n        typedef sender<output_type> predecessor_type;\n        typedef receiver<output_type> successor_type;\n\n        predecessor_cache( ) : my_owner( NULL ) { }\n\n        void set_owner( successor_type *owner ) { my_owner = owner; }\n\n        bool get_item( output_type &v ) {\n\n            bool msg = false;\n\n            do {\n                predecessor_type *src;\n                {\n                    typename mutex_type::scoped_lock lock(this->my_mutex);\n                    if ( this->internal_empty() ) {\n                        break;\n                    }\n                    src = &this->internal_pop();\n                }\n\n                // Try to get from this sender\n                msg = src->try_get( v );\n\n                if (msg == false) {\n                    // Relinquish ownership of the edge\n                    if (my_owner)\n                        src->register_successor( *my_owner );\n                } else {\n                    // Retain ownership of the edge\n                    this->add(*src);\n                }\n            } while ( msg == false );\n            return msg;\n        }\n\n        // If we are removing arcs (rf_clear_edges), call clear() rather than reset().\n        void reset() {\n            if (my_owner) {\n                for(;;) {\n                    predecessor_type *src;\n                    {\n                        if (this->internal_empty()) break;\n                        src = &this->internal_pop();\n                    }\n                    src->register_successor( *my_owner );\n                }\n            }\n        }\n\n    protected:\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        using node_cache< sender<T>, M >::my_built_predecessors;\n#endif\n        successor_type *my_owner;\n    };\n\n    //! An cache of predecessors that supports requests and reservations\n    template< typename T, typename M=spin_mutex >\n    class reservable_predecessor_cache : public predecessor_cache< T, M > {\n    public:\n        typedef M mutex_type;\n        typedef T output_type;\n        typedef sender<T> predecessor_type;\n        typedef receiver<T> successor_type;\n\n        reservable_predecessor_cache( ) : reserved_src(NULL) { }\n\n        bool\n        try_reserve( output_type &v ) {\n            bool msg = false;\n\n            do {\n                {\n                    typename mutex_type::scoped_lock lock(this->my_mutex);\n                    if ( reserved_src || this->internal_empty() )\n                        return false;\n\n                    reserved_src = &this->internal_pop();\n                }\n\n                // Try to get from this sender\n                msg = reserved_src->try_reserve( v );\n\n                if (msg == false) {\n                    typename mutex_type::scoped_lock lock(this->my_mutex);\n                    // Relinquish ownership of the edge\n                    reserved_src->register_successor( *this->my_owner );\n                    reserved_src = NULL;\n                } else {\n                    // Retain ownership of the edge\n                    this->add( *reserved_src );\n                }\n            } while ( msg == false );\n\n            return msg;\n        }\n\n        bool\n        try_release( ) {\n            reserved_src->try_release( );\n            reserved_src = NULL;\n            return true;\n        }\n\n        bool\n        try_consume( ) {\n            reserved_src->try_consume( );\n            reserved_src = NULL;\n            return true;\n        }\n\n        void reset( ) {\n            reserved_src = NULL;\n            predecessor_cache<T,M>::reset( );\n        }\n\n        void clear() {\n            reserved_src = NULL;\n            predecessor_cache<T,M>::clear();\n        }\n\n    private:\n        predecessor_type *reserved_src;\n    };\n\n\n    //! An abstract cache of successors\n    template<typename T, typename M=spin_rw_mutex >\n    class successor_cache : tbb::internal::no_copy {\n    protected:\n\n        typedef M mutex_type;\n        mutex_type my_mutex;\n\n        typedef receiver<T> successor_type;\n        typedef receiver<T> *pointer_type;\n        typedef std::list< pointer_type > successors_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        edge_container<successor_type> my_built_successors;\n#endif\n        successors_type my_successors;\n\n        sender<T> *my_owner;\n\n    public:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename edge_container<successor_type>::edge_list_type successor_list_type;\n\n        edge_container<successor_type> &built_successors() { return my_built_successors; }\n\n        void internal_add_built_successor( successor_type &r) {\n            typename mutex_type::scoped_lock l(my_mutex, true);\n            my_built_successors.add_edge( r );\n        }\n\n        void internal_delete_built_successor( successor_type &r) {\n            typename mutex_type::scoped_lock l(my_mutex, true);\n            my_built_successors.delete_edge(r);\n        }\n\n        void copy_successors( successor_list_type &v) {\n            typename mutex_type::scoped_lock l(my_mutex, false);\n            my_built_successors.copy_edges(v);\n        }\n\n        size_t successor_count() {\n            typename mutex_type::scoped_lock l(my_mutex,false);\n            return my_built_successors.edge_count();\n        }\n\n#endif /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        successor_cache( ) : my_owner(NULL) {}\n\n        void set_owner( sender<T> *owner ) { my_owner = owner; }\n\n        virtual ~successor_cache() {}\n\n        void register_successor( successor_type &r ) {\n            typename mutex_type::scoped_lock l(my_mutex, true);\n            my_successors.push_back( &r );\n        }\n\n        void remove_successor( successor_type &r ) {\n            typename mutex_type::scoped_lock l(my_mutex, true);\n            for ( typename successors_type::iterator i = my_successors.begin();\n                  i != my_successors.end(); ++i ) {\n                if ( *i == & r ) {\n                    my_successors.erase(i);\n                    break;\n                }\n            }\n        }\n\n        bool empty() {\n            typename mutex_type::scoped_lock l(my_mutex, false);\n            return my_successors.empty();\n        }\n\n        void clear() {\n            my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            my_built_successors.clear();\n#endif\n        }\n\n        virtual task * try_put_task( const T &t ) = 0;\n     };  // successor_cache<T>\n\n    //! An abstract cache of successors, specialized to continue_msg\n    template<>\n    class successor_cache< continue_msg > : tbb::internal::no_copy {\n    protected:\n\n        typedef spin_rw_mutex mutex_type;\n        mutex_type my_mutex;\n\n        typedef receiver<continue_msg> successor_type;\n        typedef receiver<continue_msg> *pointer_type;\n        typedef std::list< pointer_type > successors_type;\n        successors_type my_successors;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        edge_container<successor_type> my_built_successors;\n        typedef edge_container<successor_type>::edge_list_type successor_list_type;\n#endif\n\n        sender<continue_msg> *my_owner;\n\n    public:\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\n        edge_container<successor_type> &built_successors() { return my_built_successors; }\n\n        void internal_add_built_successor( successor_type &r) {\n            mutex_type::scoped_lock l(my_mutex, true);\n            my_built_successors.add_edge( r );\n        }\n\n        void internal_delete_built_successor( successor_type &r) {\n            mutex_type::scoped_lock l(my_mutex, true);\n            my_built_successors.delete_edge(r);\n        }\n\n        void copy_successors( successor_list_type &v) {\n            mutex_type::scoped_lock l(my_mutex, false);\n            my_built_successors.copy_edges(v);\n        }\n\n        size_t successor_count() {\n            mutex_type::scoped_lock l(my_mutex,false);\n            return my_built_successors.edge_count();\n        }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        successor_cache( ) : my_owner(NULL) {}\n\n        void set_owner( sender<continue_msg> *owner ) { my_owner = owner; }\n\n        virtual ~successor_cache() {}\n\n        void register_successor( successor_type &r ) {\n            mutex_type::scoped_lock l(my_mutex, true);\n            my_successors.push_back( &r );\n            if ( my_owner && r.is_continue_receiver() ) {\n                r.register_predecessor( *my_owner );\n            }\n        }\n\n        void remove_successor( successor_type &r ) {\n            mutex_type::scoped_lock l(my_mutex, true);\n            for ( successors_type::iterator i = my_successors.begin();\n                  i != my_successors.end(); ++i ) {\n                if ( *i == & r ) {\n                    // TODO: Check if we need to test for continue_receiver before\n                    // removing from r.\n                    if ( my_owner )\n                        r.remove_predecessor( *my_owner );\n                    my_successors.erase(i);\n                    break;\n                }\n            }\n        }\n\n        bool empty() {\n            mutex_type::scoped_lock l(my_mutex, false);\n            return my_successors.empty();\n        }\n\n        void clear() {\n            my_successors.clear();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            my_built_successors.clear();\n#endif\n        }\n\n        virtual task * try_put_task( const continue_msg &t ) = 0;\n\n    };  // successor_cache< continue_msg >\n\n    //! A cache of successors that are broadcast to\n    template<typename T, typename M=spin_rw_mutex>\n    class broadcast_cache : public successor_cache<T, M> {\n        typedef M mutex_type;\n        typedef typename successor_cache<T,M>::successors_type successors_type;\n\n    public:\n\n        broadcast_cache( ) {}\n\n        // as above, but call try_put_task instead, and return the last task we received (if any)\n        /*override*/ task * try_put_task( const T &t ) {\n            task * last_task = NULL;\n            bool upgraded = true;\n            typename mutex_type::scoped_lock l(this->my_mutex, upgraded);\n            typename successors_type::iterator i = this->my_successors.begin();\n            while ( i != this->my_successors.end() ) {\n                task *new_task = (*i)->try_put_task(t);\n                last_task = combine_tasks(last_task, new_task);  // enqueue if necessary\n                if(new_task) {\n                    ++i;\n                }\n                else {  // failed\n                    if ( (*i)->register_predecessor(*this->my_owner) ) {\n                        if (!upgraded) {\n                            l.upgrade_to_writer();\n                            upgraded = true;\n                        }\n                        i = this->my_successors.erase(i);\n                    } else {\n                        ++i;\n                    }\n                }\n            }\n            return last_task;\n        }\n\n    };\n\n    //! A cache of successors that are put in a round-robin fashion\n    template<typename T, typename M=spin_rw_mutex >\n    class round_robin_cache : public successor_cache<T, M> {\n        typedef size_t size_type;\n        typedef M mutex_type;\n        typedef typename successor_cache<T,M>::successors_type successors_type;\n\n    public:\n\n        round_robin_cache( ) {}\n\n        size_type size() {\n            typename mutex_type::scoped_lock l(this->my_mutex, false);\n            return this->my_successors.size();\n        }\n\n        /*override*/task *try_put_task( const T &t ) {\n            bool upgraded = true;\n            typename mutex_type::scoped_lock l(this->my_mutex, upgraded);\n            typename successors_type::iterator i = this->my_successors.begin();\n            while ( i != this->my_successors.end() ) {\n                task *new_task = (*i)->try_put_task(t);\n                if ( new_task ) {\n                    return new_task;\n                } else {\n                   if ( (*i)->register_predecessor(*this->my_owner) ) {\n                       if (!upgraded) {\n                           l.upgrade_to_writer();\n                           upgraded = true;\n                       }\n                       i = this->my_successors.erase(i);\n                   }\n                   else {\n                       ++i;\n                   }\n                }\n            }\n            return NULL;\n        }\n    };\n\n    template<typename T>\n    class decrementer : public continue_receiver, tbb::internal::no_copy {\n\n        T *my_node;\n\n        task *execute() {\n            return my_node->decrement_counter();\n        }\n\n    public:\n\n        typedef continue_msg input_type;\n        typedef continue_msg output_type;\n        decrementer( int number_of_predecessors = 0 ) : continue_receiver( number_of_predecessors ) { }\n        void set_owner( T *node ) { my_node = node; }\n    };\n\n}\n\n#endif // __TBB__flow_graph_impl_H\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_flow_graph_indexer_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__flow_graph_indexer_impl_H\n#define __TBB__flow_graph_indexer_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"tbb/internal/_flow_graph_types_impl.h\"\n\nnamespace internal {\n\n    // Output of the indexer_node is a tbb::flow::tagged_msg, and will be of\n    // the form  tagged_msg<tag, result>\n    // where the value of tag will indicate which result was put to the\n    // successor.\n\n    template<typename IndexerNodeBaseType, typename T, size_t K>\n    task* do_try_put(const T &v, void *p) {\n        typename IndexerNodeBaseType::output_type o(K, v);\n        return reinterpret_cast<IndexerNodeBaseType *>(p)->try_put_task(&o);\n    }\n\n    template<typename TupleTypes,int N>\n    struct indexer_helper {\n        template<typename IndexerNodeBaseType, typename PortTuple>\n        static inline void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p) {\n            typedef typename tuple_element<N-1, TupleTypes>::type T;\n            task *(*indexer_node_put_task)(const T&, void *) = do_try_put<IndexerNodeBaseType, T, N-1>;\n            tbb::flow::get<N-1>(my_input).set_up(p, indexer_node_put_task);\n            indexer_helper<TupleTypes,N-1>::template set_indexer_node_pointer<IndexerNodeBaseType,PortTuple>(my_input, p);\n        }\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            indexer_helper<TupleTypes,N-1>::reset_inputs(my_input, f);\n            tbb::flow::get<N-1>(my_input).reset_receiver(f);\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract(InputTuple &my_input) {\n            indexer_helper<TupleTypes,N-1>::extract(my_input);\n            tbb::flow::get<N-1>(my_input).extract_receiver();\n        }\n#endif\n    };\n\n    template<typename TupleTypes>\n    struct indexer_helper<TupleTypes,1> {\n        template<typename IndexerNodeBaseType, typename PortTuple>\n        static inline void set_indexer_node_pointer(PortTuple &my_input, IndexerNodeBaseType *p) {\n            typedef typename tuple_element<0, TupleTypes>::type T;\n            task *(*indexer_node_put_task)(const T&, void *) = do_try_put<IndexerNodeBaseType, T, 0>;\n            tbb::flow::get<0>(my_input).set_up(p, indexer_node_put_task);\n        }\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            tbb::flow::get<0>(my_input).reset_receiver(f);\n        }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract(InputTuple &my_input) {\n            tbb::flow::get<0>(my_input).extract_receiver();\n        }\n#endif\n    };\n\n    template<typename T>\n    class indexer_input_port : public receiver<T> {\n    private:\n        void* my_indexer_ptr;\n        typedef task* (* forward_function_ptr)(T const &, void* );\n        forward_function_ptr my_try_put_task;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        spin_mutex my_pred_mutex;\n        typedef typename receiver<T>::built_predecessors_type built_predecessors_type;\n        built_predecessors_type my_built_predecessors;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n    public:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        indexer_input_port() : my_pred_mutex() {}\n        indexer_input_port( const indexer_input_port & /*other*/ ) : receiver<T>(), my_pred_mutex() {\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n        void set_up(void *p, forward_function_ptr f) {\n                my_indexer_ptr = p;\n                my_try_put_task = f;\n            }\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<T>::predecessor_list_type predecessor_list_type;\n\n        /*override*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; }\n\n        /*override*/size_t predecessor_count() {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            return my_built_predecessors.edge_count();\n        }\n        /*override*/void internal_add_built_predecessor(sender<T> &p) {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            my_built_predecessors.add_edge(p);\n        }\n        /*override*/void internal_delete_built_predecessor(sender<T> &p) {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            my_built_predecessors.delete_edge(p);\n        }\n        /*override*/void copy_predecessors( predecessor_list_type &v) {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            return my_built_predecessors.copy_edges(v);\n        }\n        /*override*/void clear_predecessors() {\n            spin_mutex::scoped_lock l(my_pred_mutex);\n            my_built_predecessors.clear();\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task(const T &v) {\n            return my_try_put_task(v, my_indexer_ptr);\n        }\n\n    public:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        /*override*/void reset_receiver(reset_flags f) { if(f&rf_clear_edges) my_built_predecessors.clear(); }\n#else\n        /*override*/void reset_receiver(reset_flags /*f*/) { }\n#endif\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract_receiver() { my_built_predecessors.receiver_extract(*this); }\n#endif\n    };\n\n    template<typename InputTuple, typename OutputType, typename StructTypes>\n    class indexer_node_FE {\n    public:\n        static const int N = tbb::flow::tuple_size<InputTuple>::value;\n        typedef OutputType output_type;\n        typedef InputTuple input_type;\n\n        // Some versions of Intel C++ compiler fail to generate an implicit constructor for the class which has std::tuple as a member.\n        indexer_node_FE() : my_inputs() {}\n\n        input_type &input_ports() { return my_inputs; }\n    protected:\n        input_type my_inputs;\n    };\n\n    //! indexer_node_base\n    template<typename InputTuple, typename OutputType, typename StructTypes>\n    class indexer_node_base : public graph_node, public indexer_node_FE<InputTuple, OutputType,StructTypes>,\n                           public sender<OutputType> {\n    protected:\n       using graph_node::my_graph;\n    public:\n        static const size_t N = tbb::flow::tuple_size<InputTuple>::value;\n        typedef OutputType output_type;\n        typedef StructTypes tuple_types;\n        typedef receiver<output_type> successor_type;\n        typedef indexer_node_FE<InputTuple, output_type,StructTypes> input_ports_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename sender<output_type>::built_successors_type built_successors_type;\n        typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    private:\n        // ----------- Aggregator ------------\n        enum op_type { reg_succ, rem_succ, try__put_task\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_succ, del_blt_succ,\n             blt_succ_cnt, blt_succ_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef indexer_node_base<InputTuple,output_type,StructTypes> class_type;\n\n        class indexer_node_base_operation : public aggregated_operation<indexer_node_base_operation> {\n        public:\n            char type;\n            union {\n                output_type const *my_arg;\n                successor_type *my_succ;\n                task *bypass_t;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                successor_list_type *succv;\n#endif\n            };\n            indexer_node_base_operation(const output_type* e, op_type t) :\n                type(char(t)), my_arg(e) {}\n            indexer_node_base_operation(const successor_type &s, op_type t) : type(char(t)),\n                my_succ(const_cast<successor_type *>(&s)) {}\n            indexer_node_base_operation(op_type t) : type(char(t)) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, indexer_node_base_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, indexer_node_base_operation>;\n        aggregator<handler_type, indexer_node_base_operation> my_aggregator;\n\n        void handle_operations(indexer_node_base_operation* op_list) {\n            indexer_node_base_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n\n                case reg_succ:\n                    my_successors.register_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n\n                case rem_succ:\n                    my_successors.remove_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case try__put_task: {\n                        current->bypass_t = my_successors.try_put_task(*(current->my_arg));\n                        __TBB_store_with_release(current->status, SUCCEEDED);  // return of try_put_task actual return value\n                    }\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_succ:\n                    my_successors.internal_add_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_succ:\n                    my_successors.internal_delete_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cnt:\n                    current->cnt_val = my_successors.successor_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cpy:\n                    my_successors.copy_successors(*(current->succv));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n        // ---------- end aggregator -----------\n    public:\n        indexer_node_base(graph& g) : graph_node(g), input_ports_type() {\n            indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this);\n            my_successors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        indexer_node_base(const indexer_node_base& other) : graph_node(other.my_graph), input_ports_type(), sender<output_type>() {\n            indexer_helper<StructTypes,N>::set_indexer_node_pointer(this->my_inputs, this);\n            my_successors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        bool register_successor(successor_type &r) {\n            indexer_node_base_operation op_data(r, reg_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        bool remove_successor( successor_type &r) {\n            indexer_node_base_operation op_data(r, rem_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        task * try_put_task(output_type const *v) {\n            indexer_node_base_operation op_data(v, try__put_task);\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n\n        built_successors_type &built_successors() { return my_successors.built_successors(); }\n\n        void internal_add_built_successor( successor_type &r) {\n            indexer_node_base_operation op_data(r, add_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        void internal_delete_built_successor( successor_type &r) {\n            indexer_node_base_operation op_data(r, del_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        size_t successor_count() {\n            indexer_node_base_operation op_data(blt_succ_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        void copy_successors( successor_list_type &v) {\n            indexer_node_base_operation op_data(blt_succ_cpy);\n            op_data.succv = &v;\n            my_aggregator.execute(&op_data);\n        }\n        void extract() {\n            my_successors.built_successors().sender_extract(*this);\n            indexer_helper<StructTypes,N>::extract(this->my_inputs);\n        }\n#endif /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n    protected:\n        /*override*/void reset_node(reset_flags f) {\n            if(f & rf_clear_edges) {\n                my_successors.clear();\n                indexer_helper<StructTypes,N>::reset_inputs(this->my_inputs,f);\n            }\n        }\n\n    private:\n        broadcast_cache<output_type, null_rw_mutex> my_successors;\n    };  //indexer_node_base\n\n\n    template<int N, typename InputTuple> struct input_types;\n\n    template<typename InputTuple>\n    struct input_types<1, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename internal::tagged_msg<size_t, first_type > type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<2, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<3, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<4, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<5, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<6, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<7, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type> type;\n    };\n\n\n    template<typename InputTuple>\n    struct input_types<8, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename tuple_element<7, InputTuple>::type eighth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type, eighth_type> type;\n    };\n\n\n    template<typename InputTuple>\n    struct input_types<9, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename tuple_element<7, InputTuple>::type eighth_type;\n        typedef typename tuple_element<8, InputTuple>::type nineth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type, eighth_type, nineth_type> type;\n    };\n\n    template<typename InputTuple>\n    struct input_types<10, InputTuple> {\n        typedef typename tuple_element<0, InputTuple>::type first_type;\n        typedef typename tuple_element<1, InputTuple>::type second_type;\n        typedef typename tuple_element<2, InputTuple>::type third_type;\n        typedef typename tuple_element<3, InputTuple>::type fourth_type;\n        typedef typename tuple_element<4, InputTuple>::type fifth_type;\n        typedef typename tuple_element<5, InputTuple>::type sixth_type;\n        typedef typename tuple_element<6, InputTuple>::type seventh_type;\n        typedef typename tuple_element<7, InputTuple>::type eighth_type;\n        typedef typename tuple_element<8, InputTuple>::type nineth_type;\n        typedef typename tuple_element<9, InputTuple>::type tenth_type;\n        typedef typename internal::tagged_msg<size_t, first_type, second_type, third_type,\n                                                      fourth_type, fifth_type, sixth_type,\n                                                      seventh_type, eighth_type, nineth_type,\n                                                      tenth_type> type;\n    };\n\n    // type generators\n    template<typename OutputTuple>\n    struct indexer_types : public input_types<tuple_size<OutputTuple>::value, OutputTuple> {\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef typename input_types<N, OutputTuple>::type output_type;\n        typedef typename wrap_tuple_elements<N,indexer_input_port,OutputTuple>::type input_ports_type;\n        typedef internal::indexer_node_FE<input_ports_type,output_type,OutputTuple> indexer_FE_type;\n        typedef internal::indexer_node_base<input_ports_type, output_type, OutputTuple> indexer_base_type;\n    };\n\n    template<class OutputTuple>\n    class unfolded_indexer_node : public indexer_types<OutputTuple>::indexer_base_type {\n    public:\n        typedef typename indexer_types<OutputTuple>::input_ports_type input_ports_type;\n        typedef OutputTuple tuple_types;\n        typedef typename indexer_types<OutputTuple>::output_type output_type;\n    private:\n        typedef typename indexer_types<OutputTuple>::indexer_base_type base_type;\n    public:\n        unfolded_indexer_node(graph& g) : base_type(g) {}\n        unfolded_indexer_node(const unfolded_indexer_node &other) : base_type(other) {}\n    };\n\n} /* namespace internal */\n\n#endif  /* __TBB__flow_graph_indexer_impl_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_flow_graph_item_buffer_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__flow_graph_item_buffer_impl_H\n#define __TBB__flow_graph_item_buffer_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"tbb/internal/_flow_graph_types_impl.h\"  // for aligned_pair\n\n// in namespace tbb::flow::interfaceX (included in _flow_graph_node_impl.h)\n\n    //! Expandable buffer of items.  The possible operations are push, pop,\n    //* tests for empty and so forth.  No mutual exclusion is built in.\n    //* objects are constructed into and explicitly-destroyed.  get_my_item gives\n    // a read-only reference to the item in the buffer.  set_my_item may be called\n    // with either an empty or occupied slot.\n\n    using internal::aligned_pair;\n    using internal::alignment_of;\n\nnamespace internal {\n\n    template <typename T, typename A=cache_aligned_allocator<T> >\n    class item_buffer {\n    public:\n        typedef T item_type;\n        enum buffer_item_state { no_item=0, has_item=1, reserved_item=2 };\n    protected:\n        typedef size_t size_type;\n        typedef typename aligned_pair<item_type, buffer_item_state>::type buffer_item_type;\n        typedef typename A::template rebind<buffer_item_type>::other allocator_type;\n\n        buffer_item_type *my_array;\n        size_type my_array_size;\n        static const size_type initial_buffer_size = 4;\n        size_type my_head;\n        size_type my_tail;\n\n        bool buffer_empty() { return my_head == my_tail; }\n\n        buffer_item_type &item(size_type i) {\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].second))%alignment_of<buffer_item_state>::value),NULL);\n            __TBB_ASSERT(!(size_type(&(my_array[i&(my_array_size-1)].first))%alignment_of<item_type>::value), NULL);\n            return my_array[i & (my_array_size - 1) ];\n        }\n\n        bool my_item_valid(size_type i) { return (i < my_tail) && (i >= my_head) && (item(i).second != no_item); }\n        bool my_item_reserved(size_type i) { return item(i).second == reserved_item; }\n\n        // object management in buffer\n        const item_type &get_my_item(size_t i) {\n            __TBB_ASSERT(my_item_valid(i),\"attempt to get invalid item\");\n            item_type *itm = (tbb::internal::punned_cast<item_type *>(&(item(i).first)));\n            return *(const item_type *)itm;\n        }\n\n        // may be called with an empty slot or a slot that has already been constructed into.\n        void set_my_item(size_t i, const item_type &o) {\n            if(item(i).second != no_item) {\n                destroy_item(i);\n            }\n            new(&(item(i).first)) item_type(o);\n            item(i).second = has_item;\n        }\n\n        // destructively-fetch an object from the buffer\n        void fetch_item(size_t i, item_type &o) {\n            __TBB_ASSERT(my_item_valid(i), \"Trying to fetch an empty slot\");\n            o = get_my_item(i);  // could have std::move assign semantics\n            destroy_item(i);\n        }\n\n        // move an existing item from one slot to another.  The moved-to slot must be unoccupied,\n        // the moved-from slot must exist and not be reserved.  The after, from will be empty,\n        // to will be occupied but not reserved\n        void move_item(size_t to, size_t from) {\n            __TBB_ASSERT(!my_item_valid(to), \"Trying to move to a non-empty slot\");\n            __TBB_ASSERT(my_item_valid(from), \"Trying to move from an empty slot\");\n            set_my_item(to, get_my_item(from));   // could have std::move semantics\n            destroy_item(from);\n\n        }\n\n        // put an item in an empty slot.  Return true if successful, else false\n        bool place_item(size_t here, const item_type &me) {\n#if !TBB_DEPRECATED_SEQUENCER_DUPLICATES\n            if(my_item_valid(here)) return false;\n#endif\n            set_my_item(here, me);\n            return true;\n        }\n\n        // could be implemented with std::move semantics\n        void swap_items(size_t i, size_t j) {\n            __TBB_ASSERT(my_item_valid(i) && my_item_valid(j), \"attempt to swap invalid item(s)\");\n            item_type temp = get_my_item(i);\n            set_my_item(i, get_my_item(j));\n            set_my_item(j, temp);\n        }\n\n        void destroy_item(size_type i) {\n            __TBB_ASSERT(my_item_valid(i), \"destruction of invalid item\");\n            (tbb::internal::punned_cast<item_type *>(&(item(i).first)))->~item_type();\n            item(i).second = no_item;\n        }\n\n        // returns a copy of the front\n        void copy_front(item_type &v) {\n            __TBB_ASSERT(my_item_valid(my_head), \"attempt to fetch head non-item\");\n            v = get_my_item(my_head);\n        }\n        // returns a copy of the back\n        void copy_back(item_type &v) {\n            __TBB_ASSERT(my_item_valid(my_tail-1), \"attempt to fetch head non-item\");\n            v = get_my_item(my_tail-1);\n        }\n\n        // following methods are for reservation of the front of a bufffer.\n        void reserve_item(size_type i) { __TBB_ASSERT(my_item_valid(i) && !my_item_reserved(i), \"item cannot be reserved\"); item(i).second = reserved_item; }\n        void release_item(size_type i) { __TBB_ASSERT(my_item_reserved(i), \"item is not reserved\"); item(i).second = has_item; }\n\n        void destroy_front() { destroy_item(my_head); ++my_head; }\n        void destroy_back() { destroy_item(my_tail-1); --my_tail; }\n\n        // we have to be able to test against a new tail value without changing my_tail\n        // grow_array doesn't work if we change my_tail when the old array is too small\n        size_type size(size_t new_tail = 0) { return (new_tail ? new_tail : my_tail) - my_head; }\n        size_type capacity() { return my_array_size; }\n        // sequencer_node does not use this method, so we don't\n        // need a version that passes in the new_tail value.\n        bool buffer_full() { return size() >= capacity(); }\n\n        //! Grows the internal array.\n        void grow_my_array( size_t minimum_size ) {\n            // test that we haven't made the structure inconsistent.\n            __TBB_ASSERT(capacity() >= my_tail - my_head, \"total items exceed capacity\");\n            size_type new_size = my_array_size ? 2*my_array_size : initial_buffer_size;\n            while( new_size<minimum_size )\n                new_size*=2;\n\n            buffer_item_type* new_array = allocator_type().allocate(new_size);\n\n            // initialize validity to \"no\"\n            for( size_type i=0; i<new_size; ++i ) { new_array[i].second = no_item; }\n\n            for( size_type i=my_head; i<my_tail; ++i) {\n                if(my_item_valid(i)) {  // sequencer_node may have empty slots\n                    // placement-new copy-construct; could be std::move\n                    char *new_space = (char *)&(new_array[i&(new_size-1)].first);\n                    (void)new(new_space) item_type(get_my_item(i));\n                    new_array[i&(new_size-1)].second = item(i).second;\n                }\n            }\n\n            clean_up_buffer(/*reset_pointers*/false);\n\n            my_array = new_array;\n            my_array_size = new_size;\n        }\n\n        bool push_back(item_type &v) {\n            if(buffer_full()) {\n                grow_my_array(size() + 1);\n            }\n            set_my_item(my_tail, v);\n            ++my_tail;\n            return true;\n        }\n\n        bool pop_back(item_type &v) {\n            if (!my_item_valid(my_tail-1)) {\n                return false;\n            }\n            copy_back(v);\n            destroy_back();\n            return true;\n        }\n\n        bool pop_front(item_type &v) {\n            if(!my_item_valid(my_head)) {\n                return false;\n            }\n            copy_front(v);\n            destroy_front();\n            return true;\n        }\n\n        // This is used both for reset and for grow_my_array.  In the case of grow_my_array\n        // we want to retain the values of the head and tail.\n        void clean_up_buffer(bool reset_pointers) {\n            if (my_array) {\n                for( size_type i=my_head; i<my_tail; ++i ) {\n                    if(my_item_valid(i))\n                        destroy_item(i);\n                }\n                allocator_type().deallocate(my_array,my_array_size);\n            }\n            my_array = NULL;\n            if(reset_pointers) {\n                my_head = my_tail = my_array_size = 0;\n            }\n        }\n\n    public:\n        //! Constructor\n        item_buffer( ) : my_array(NULL), my_array_size(0),\n            my_head(0), my_tail(0) {\n            grow_my_array(initial_buffer_size);\n        }\n\n        ~item_buffer() {\n            clean_up_buffer(/*reset_pointers*/true);\n        }\n\n        void reset() { clean_up_buffer(/*reset_pointers*/true); grow_my_array(initial_buffer_size); }\n\n    };\n\n    //! item_buffer with reservable front-end.  NOTE: if reserving, do not\n    //* complete operation with pop_front(); use consume_front().\n    //* No synchronization built-in.\n    template<typename T, typename A=cache_aligned_allocator<T> >\n    class reservable_item_buffer : public item_buffer<T, A> {\n    protected:\n        using item_buffer<T, A>::my_item_valid;\n        using item_buffer<T, A>::my_head;\n\n    public:\n        reservable_item_buffer() : item_buffer<T, A>(), my_reserved(false) {}\n        void reset() {my_reserved = false; item_buffer<T,A>::reset(); }\n    protected:\n\n        bool reserve_front(T &v) {\n            if(my_reserved || !my_item_valid(my_head)) return false;\n            my_reserved = true;\n            // reserving the head\n            this->copy_front(v);\n            this->reserve_item(this->my_head);\n            return true;\n        }\n\n        void consume_front() {\n            __TBB_ASSERT(my_reserved, \"Attempt to consume a non-reserved item\");\n            this->destroy_front();\n            my_reserved = false;\n        }\n\n        void release_front() {\n            __TBB_ASSERT(my_reserved, \"Attempt to release a non-reserved item\");\n            this->release_item(this->my_head);\n            my_reserved = false;\n        }\n\n        bool my_reserved;\n    };\n\n}  // namespace internal\n\n#endif // __TBB__flow_graph_item_buffer_impl_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_flow_graph_join_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__flow_graph_join_impl_H\n#define __TBB__flow_graph_join_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\nnamespace internal {\n\n    struct forwarding_base {\n        forwarding_base(graph &g) : graph_pointer(&g) {}\n        virtual ~forwarding_base() {}\n        // decrement_port_count may create a forwarding task.  If we cannot handle the task\n        // ourselves, ask decrement_port_count to deal with it.\n        virtual task * decrement_port_count(bool handle_task) = 0;\n        virtual void increment_port_count() = 0;\n        // moved here so input ports can queue tasks\n        graph* graph_pointer;\n    };\n\n    // specialization that lets us keep a copy of the current_key for building results.\n    // KeyType can be a reference type.\n    template<typename KeyType>\n    struct matching_forwarding_base :public forwarding_base {\n        typedef typename tbb::internal::strip<KeyType>::type current_key_type;\n        matching_forwarding_base(graph &g) : forwarding_base(g) { }\n        virtual task * increment_key_count(current_key_type const & /*t*/, bool /*handle_task*/) = 0; // {return NULL;}\n        current_key_type current_key; // so ports can refer to FE's desired items\n    };\n\n    template< int N >\n    struct join_helper {\n\n        template< typename TupleType, typename PortType >\n        static inline void set_join_node_pointer(TupleType &my_input, PortType *port) {\n            tbb::flow::get<N-1>( my_input ).set_join_node_pointer(port);\n            join_helper<N-1>::set_join_node_pointer( my_input, port );\n        }\n        template< typename TupleType >\n        static inline void consume_reservations( TupleType &my_input ) {\n            tbb::flow::get<N-1>( my_input ).consume();\n            join_helper<N-1>::consume_reservations( my_input );\n        }\n\n        template< typename TupleType >\n        static inline void release_my_reservation( TupleType &my_input ) {\n            tbb::flow::get<N-1>( my_input ).release();\n        }\n\n        template <typename TupleType>\n        static inline void release_reservations( TupleType &my_input) {\n            join_helper<N-1>::release_reservations(my_input);\n            release_my_reservation(my_input);\n        }\n\n        template< typename InputTuple, typename OutputTuple >\n        static inline bool reserve( InputTuple &my_input, OutputTuple &out) {\n            if ( !tbb::flow::get<N-1>( my_input ).reserve( tbb::flow::get<N-1>( out ) ) ) return false;\n            if ( !join_helper<N-1>::reserve( my_input, out ) ) {\n                release_my_reservation( my_input );\n                return false;\n            }\n            return true;\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_my_item( InputTuple &my_input, OutputTuple &out) {\n            bool res = tbb::flow::get<N-1>(my_input).get_item(tbb::flow::get<N-1>(out) ); // may fail\n            return join_helper<N-1>::get_my_item(my_input, out) && res;       // do get on other inputs before returning\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_items(InputTuple &my_input, OutputTuple &out) {\n            return get_my_item(my_input, out);\n        }\n\n        template<typename InputTuple>\n        static inline void reset_my_port(InputTuple &my_input) {\n            join_helper<N-1>::reset_my_port(my_input);\n            tbb::flow::get<N-1>(my_input).reset_port();\n        }\n\n        template<typename InputTuple>\n        static inline void reset_ports(InputTuple& my_input) {\n            reset_my_port(my_input);\n        }\n\n        template<typename InputTuple, typename KeyFuncTuple>\n        static inline void set_key_functors(InputTuple &my_input, KeyFuncTuple &my_key_funcs) {\n            tbb::flow::get<N-1>(my_input).set_my_key_func(tbb::flow::get<N-1>(my_key_funcs));\n            tbb::flow::get<N-1>(my_key_funcs) = NULL;\n            join_helper<N-1>::set_key_functors(my_input, my_key_funcs);\n        }\n\n        template< typename KeyFuncTuple>\n        static inline void copy_key_functors(KeyFuncTuple &my_inputs, KeyFuncTuple &other_inputs) {\n            if(tbb::flow::get<N-1>(other_inputs).get_my_key_func()) {\n                tbb::flow::get<N-1>(my_inputs).set_my_key_func(tbb::flow::get<N-1>(other_inputs).get_my_key_func()->clone());\n            }\n            join_helper<N-1>::copy_key_functors(my_inputs, other_inputs);\n        }\n\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            join_helper<N-1>::reset_inputs(my_input, f);\n            tbb::flow::get<N-1>(my_input).reset_receiver(f);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract_inputs(InputTuple &my_input) {\n            join_helper<N-1>::extract_inputs(my_input);\n            tbb::flow::get<N-1>(my_input).extract_receiver();\n        }\n#endif\n    };  // join_helper<N>\n\n    template< >\n    struct join_helper<1> {\n\n        template< typename TupleType, typename PortType >\n        static inline void set_join_node_pointer(TupleType &my_input, PortType *port) {\n            tbb::flow::get<0>( my_input ).set_join_node_pointer(port);\n        }\n\n        template< typename TupleType >\n        static inline void consume_reservations( TupleType &my_input ) {\n            tbb::flow::get<0>( my_input ).consume();\n        }\n\n        template< typename TupleType >\n        static inline void release_my_reservation( TupleType &my_input ) {\n            tbb::flow::get<0>( my_input ).release();\n        }\n\n        template<typename TupleType>\n        static inline void release_reservations( TupleType &my_input) {\n            release_my_reservation(my_input);\n        }\n\n        template< typename InputTuple, typename OutputTuple >\n        static inline bool reserve( InputTuple &my_input, OutputTuple &out) {\n            return tbb::flow::get<0>( my_input ).reserve( tbb::flow::get<0>( out ) );\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_my_item( InputTuple &my_input, OutputTuple &out) {\n            return tbb::flow::get<0>(my_input).get_item(tbb::flow::get<0>(out));\n        }\n\n        template<typename InputTuple, typename OutputTuple>\n        static inline bool get_items(InputTuple &my_input, OutputTuple &out) {\n            return get_my_item(my_input, out);\n        }\n\n        template<typename InputTuple>\n        static inline void reset_my_port(InputTuple &my_input) {\n            tbb::flow::get<0>(my_input).reset_port();\n        }\n\n        template<typename InputTuple>\n        static inline void reset_ports(InputTuple& my_input) {\n            reset_my_port(my_input);\n        }\n\n        template<typename InputTuple, typename KeyFuncTuple>\n        static inline void set_key_functors(InputTuple &my_input, KeyFuncTuple &my_key_funcs) {\n            tbb::flow::get<0>(my_input).set_my_key_func(tbb::flow::get<0>(my_key_funcs));\n            tbb::flow::get<0>(my_key_funcs) = NULL;\n        }\n\n        template< typename KeyFuncTuple>\n        static inline void copy_key_functors(KeyFuncTuple &my_inputs, KeyFuncTuple &other_inputs) {\n            if(tbb::flow::get<0>(other_inputs).get_my_key_func()) {\n                tbb::flow::get<0>(my_inputs).set_my_key_func(tbb::flow::get<0>(other_inputs).get_my_key_func()->clone());\n            }\n        }\n        template<typename InputTuple>\n        static inline void reset_inputs(InputTuple &my_input, reset_flags f) {\n            tbb::flow::get<0>(my_input).reset_receiver(f);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        template<typename InputTuple>\n        static inline void extract_inputs(InputTuple &my_input) {\n            tbb::flow::get<0>(my_input).extract_receiver();\n        }\n#endif\n    };  // join_helper<1>\n\n    //! The two-phase join port\n    template< typename T >\n    class reserving_port : public receiver<T> {\n    public:\n        typedef T input_type;\n        typedef sender<T> predecessor_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n        typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n#endif\n    private:\n        // ----------- Aggregator ------------\n        enum op_type { reg_pred, rem_pred, res_item, rel_res, con_res\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef reserving_port<T> class_type;\n\n        class reserving_port_operation : public aggregated_operation<reserving_port_operation> {\n        public:\n            char type;\n            union {\n                T *my_arg;\n                predecessor_type *my_pred;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                predecessor_list_type *plist;\n#endif\n            };\n            reserving_port_operation(const T& e, op_type t) :\n                type(char(t)), my_arg(const_cast<T*>(&e)) {}\n            reserving_port_operation(const predecessor_type &s, op_type t) : type(char(t)),\n                my_pred(const_cast<predecessor_type *>(&s)) {}\n            reserving_port_operation(op_type t) : type(char(t)) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, reserving_port_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, reserving_port_operation>;\n        aggregator<handler_type, reserving_port_operation> my_aggregator;\n\n        void handle_operations(reserving_port_operation* op_list) {\n            reserving_port_operation *current;\n            bool no_predecessors;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case reg_pred:\n                    no_predecessors = my_predecessors.empty();\n                    my_predecessors.add(*(current->my_pred));\n                    if ( no_predecessors ) {\n                        (void) my_join->decrement_port_count(true); // may try to forward\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case rem_pred:\n                    my_predecessors.remove(*(current->my_pred));\n                    if(my_predecessors.empty()) my_join->increment_port_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case res_item:\n                    if ( reserved ) {\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    else if ( my_predecessors.try_reserve( *(current->my_arg) ) ) {\n                        reserved = true;\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    } else {\n                        if ( my_predecessors.empty() ) {\n                            my_join->increment_port_count();\n                        }\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    break;\n                case rel_res:\n                    reserved = false;\n                    my_predecessors.try_release( );\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case con_res:\n                    reserved = false;\n                    my_predecessors.try_consume( );\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred:\n                    my_predecessors.internal_add_built_predecessor(*(current->my_pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_pred:\n                    my_predecessors.internal_delete_built_predecessor(*(current->my_pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    current->cnt_val = my_predecessors.predecessor_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_predecessors.copy_predecessors(*(current->plist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        task *try_put_task( const T & ) {\n            return NULL;\n        }\n\n    public:\n\n        //! Constructor\n        reserving_port() : reserved(false) {\n            my_join = NULL;\n            my_predecessors.set_owner( this );\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        // copy constructor\n        reserving_port(const reserving_port& /* other */) : receiver<T>() {\n            reserved = false;\n            my_join = NULL;\n            my_predecessors.set_owner( this );\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        void set_join_node_pointer(forwarding_base *join) {\n            my_join = join;\n        }\n\n        //! Add a predecessor\n        bool register_predecessor( sender<T> &src ) {\n            reserving_port_operation op_data(src, reg_pred);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        //! Remove a predecessor\n        bool remove_predecessor( sender<T> &src ) {\n            reserving_port_operation op_data(src, rem_pred);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        //! Reserve an item from the port\n        bool reserve( T &v ) {\n            reserving_port_operation op_data(v, res_item);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        //! Release the port\n        void release( ) {\n            reserving_port_operation op_data(rel_res);\n            my_aggregator.execute(&op_data);\n        }\n\n        //! Complete use of the port\n        void consume( ) {\n            reserving_port_operation op_data(con_res);\n            my_aggregator.execute(&op_data);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        /*override*/ built_predecessors_type &built_predecessors() { return my_predecessors.built_predecessors(); }\n        /*override*/void internal_add_built_predecessor(predecessor_type &src) {\n            reserving_port_operation op_data(src, add_blt_pred);\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/void internal_delete_built_predecessor(predecessor_type &src) {\n            reserving_port_operation op_data(src, del_blt_pred);\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/size_t predecessor_count() {\n            reserving_port_operation op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        /*override*/void copy_predecessors(predecessor_list_type &l) {\n            reserving_port_operation op_data(blt_pred_cpy);\n            op_data.plist = &l;\n            my_aggregator.execute(&op_data);\n        }\n\n        void extract_receiver() {\n            my_predecessors.built_predecessors().receiver_extract(*this);\n        }\n\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        /*override*/void reset_receiver( reset_flags f) {\n            if(f & rf_clear_edges) my_predecessors.clear();\n            else\n            my_predecessors.reset();\n            reserved = false;\n            __TBB_ASSERT(!(f&rf_clear_edges) || my_predecessors.empty(), \"port edges not removed\");\n        }\n\n    private:\n        forwarding_base *my_join;\n        reservable_predecessor_cache< T, null_mutex > my_predecessors;\n        bool reserved;\n    };  // reserving_port\n\n    //! queueing join_port\n    template<typename T>\n    class queueing_port : public receiver<T>, public item_buffer<T> {\n    public:\n        typedef T input_type;\n        typedef sender<T> predecessor_type;\n        typedef queueing_port<T> class_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n#endif\n\n    // ----------- Aggregator ------------\n    private:\n        enum op_type { get__item, res_port, try__put_task\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\n        class queueing_port_operation : public aggregated_operation<queueing_port_operation> {\n        public:\n            char type;\n            T my_val;\n            T *my_arg;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            sender<T> *pred;\n            size_t cnt_val;\n            predecessor_list_type *plist;\n#endif\n            task * bypass_t;\n            // constructor for value parameter\n            queueing_port_operation(const T& e, op_type t) :\n                type(char(t)), my_val(e)\n                , bypass_t(NULL)\n            {}\n            // constructor for pointer parameter\n            queueing_port_operation(const T* p, op_type t) :\n                type(char(t)), my_arg(const_cast<T*>(p))\n                , bypass_t(NULL)\n            {}\n            // constructor with no parameter\n            queueing_port_operation(op_type t) : type(char(t))\n                , bypass_t(NULL)\n            {}\n        };\n\n        typedef internal::aggregating_functor<class_type, queueing_port_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, queueing_port_operation>;\n        aggregator<handler_type, queueing_port_operation> my_aggregator;\n\n        void handle_operations(queueing_port_operation* op_list) {\n            queueing_port_operation *current;\n            bool was_empty;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case try__put_task: {\n                        task *rtask = NULL;\n                        was_empty = this->buffer_empty();\n                        this->push_back(current->my_val);\n                        if (was_empty) rtask = my_join->decrement_port_count(false);\n                        else\n                            rtask = SUCCESSFULLY_ENQUEUED;\n                        current->bypass_t = rtask;\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                case get__item:\n                    if(!this->buffer_empty()) {\n                        this->copy_front(*(current->my_arg));\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    else {\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    break;\n                case res_port:\n                    __TBB_ASSERT(this->my_item_valid(this->my_head), \"No item to reset\");\n                    this->destroy_front();\n                    if(this->my_item_valid(this->my_head)) {\n                        (void)my_join->decrement_port_count(true);\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred:\n                    my_built_predecessors.add_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_pred:\n                    my_built_predecessors.delete_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    current->cnt_val = my_built_predecessors.edge_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_built_predecessors.copy_edges(*(current->plist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n    // ------------ End Aggregator ---------------\n\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        /*override*/task *try_put_task(const T &v) {\n            queueing_port_operation op_data(v, try__put_task);\n            my_aggregator.execute(&op_data);\n            __TBB_ASSERT(op_data.status == SUCCEEDED || !op_data.bypass_t, \"inconsistent return from aggregator\");\n            if(!op_data.bypass_t) return SUCCESSFULLY_ENQUEUED;\n            return op_data.bypass_t;\n        }\n\n    public:\n\n        //! Constructor\n        queueing_port() : item_buffer<T>() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! copy constructor\n        queueing_port(const queueing_port& /* other */) : receiver<T>(), item_buffer<T>() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! record parent for tallying available items\n        void set_join_node_pointer(forwarding_base *join) {\n            my_join = join;\n        }\n\n        bool get_item( T &v ) {\n            queueing_port_operation op_data(&v, get__item);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        // reset_port is called when item is accepted by successor, but\n        // is initiated by join_node.\n        void reset_port() {\n            queueing_port_operation op_data(res_port);\n            my_aggregator.execute(&op_data);\n            return;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        /*override*/ built_predecessors_type &built_predecessors() { return my_built_predecessors; }\n\n        /*override*/void internal_add_built_predecessor(sender<T> &p) {\n            queueing_port_operation op_data(add_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/void internal_delete_built_predecessor(sender<T> &p) {\n            queueing_port_operation op_data(del_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/size_t predecessor_count() {\n            queueing_port_operation op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        /*override*/void copy_predecessors(predecessor_list_type &l) {\n            queueing_port_operation op_data(blt_pred_cpy);\n            op_data.plist = &l;\n            my_aggregator.execute(&op_data);\n        }\n\n        void extract_receiver() {\n            item_buffer<T>::reset();\n            my_built_predecessors.receiver_extract(*this);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        /*override*/void reset_receiver(reset_flags f) {\n            tbb::internal::suppress_unused_warning(f);\n            item_buffer<T>::reset();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            if (f & rf_clear_edges)\n                my_built_predecessors.clear();\n#endif\n        }\n\n    private:\n        forwarding_base *my_join;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        edge_container<sender<T> > my_built_predecessors;\n#endif\n    };  // queueing_port\n\n#include \"_flow_graph_tagged_buffer_impl.h\"\n\n    template<typename K>\n    struct count_element {\n        K my_key;\n        size_t my_value;\n    };\n\n    // method to access the key in the counting table\n    // the ref has already been removed from K\n    template< typename K >\n    struct key_to_count_functor {\n        typedef count_element<K> table_item_type;\n        const K& operator()(const table_item_type& v) { return v.my_key; }\n    };\n\n    // the ports can have only one template parameter.  We wrap the types needed in\n    // a traits type\n    template< class TraitsType >\n    class key_matching_port :\n        public receiver<typename TraitsType::T>,\n        public hash_buffer< typename TraitsType::K, typename TraitsType::T, typename TraitsType::TtoK,\n                typename TraitsType::KHash > {\n    public:\n        typedef TraitsType traits;\n        typedef key_matching_port<traits> class_type;\n        typedef typename TraitsType::T input_type;\n        typedef typename TraitsType::K key_type;\n        typedef typename tbb::internal::strip<key_type>::type noref_key_type;\n        typedef sender<input_type> predecessor_type;\n        typedef typename TraitsType::TtoK type_to_key_func_type;\n        typedef typename TraitsType::KHash hash_compare_type;\n        typedef hash_buffer< key_type, input_type, type_to_key_func_type, hash_compare_type > buffer_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename receiver<input_type>::built_predecessors_type built_predecessors_type;\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n#endif\n    private:\n// ----------- Aggregator ------------\n    private:\n        enum op_type { try__put, get__item, res_port\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n           , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n\n        class key_matching_port_operation : public aggregated_operation<key_matching_port_operation> {\n        public:\n            char type;\n            input_type my_val;\n            input_type *my_arg;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            predecessor_type *pred;\n            size_t cnt_val;\n            predecessor_list_type *plist;\n#endif\n            // constructor for value parameter\n            key_matching_port_operation(const input_type& e, op_type t) :\n                type(char(t)), my_val(e) {}\n            // constructor for pointer parameter\n            key_matching_port_operation(const input_type* p, op_type t) :\n                type(char(t)), my_arg(const_cast<input_type*>(p)) {}\n            // constructor with no parameter\n            key_matching_port_operation(op_type t) : type(char(t)) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, key_matching_port_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, key_matching_port_operation>;\n        aggregator<handler_type, key_matching_port_operation> my_aggregator;\n\n        void handle_operations(key_matching_port_operation* op_list) {\n            key_matching_port_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case try__put: {\n                        bool was_inserted = this->insert_with_key(current->my_val);\n                        // return failure if a duplicate insertion occurs\n                        __TBB_store_with_release(current->status, was_inserted ? SUCCEEDED : FAILED);\n                    }\n                    break;\n                case get__item:\n                    // use current_key from FE for item\n                    if(!this->find_with_key(my_join->current_key, *(current->my_arg))) {\n                        __TBB_ASSERT(false, \"Failed to find item corresponding to current_key.\");\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case res_port:\n                    // use current_key from FE for item\n                    this->delete_with_key(my_join->current_key);\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred:\n                    my_built_predecessors.add_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_pred:\n                    my_built_predecessors.delete_edge(*(current->pred));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    current->cnt_val = my_built_predecessors.edge_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_built_predecessors.copy_edges(*(current->plist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif\n                }\n            }\n        }\n// ------------ End Aggregator ---------------\n    protected:\n        template< typename R, typename B > friend class run_and_put_task;\n        template<typename X, typename Y> friend class internal::broadcast_cache;\n        template<typename X, typename Y> friend class internal::round_robin_cache;\n        /*override*/task *try_put_task(const input_type& v) {\n            key_matching_port_operation op_data(v, try__put);\n            task *rtask = NULL;\n            my_aggregator.execute(&op_data);\n            if(op_data.status == SUCCEEDED) {\n                rtask = my_join->increment_key_count((*(this->get_key_func()))(v), false);  // may spawn\n                // rtask has to reflect the return status of the try_put\n                if(!rtask) rtask = SUCCESSFULLY_ENQUEUED;\n            }\n            return rtask;\n        }\n\n    public:\n\n        key_matching_port() : receiver<input_type>(), buffer_type() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        // copy constructor\n        key_matching_port(const key_matching_port& /*other*/) : receiver<input_type>(), buffer_type() {\n            my_join = NULL;\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        ~key_matching_port() { }\n\n        void set_join_node_pointer(forwarding_base *join) {\n            my_join = dynamic_cast<matching_forwarding_base<key_type>*>(join);\n        }\n\n        void set_my_key_func(type_to_key_func_type *f) { this->set_key_func(f); }\n\n        type_to_key_func_type* get_my_key_func() { return this->get_key_func(); }\n\n        bool get_item( input_type &v ) {\n            // aggregator uses current_key from FE for Key\n            key_matching_port_operation op_data(&v, get__item);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        /*override*/built_predecessors_type &built_predecessors() { return my_built_predecessors; }\n\n        /*override*/void internal_add_built_predecessor(sender<input_type> &p) {\n            key_matching_port_operation op_data(add_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/void internal_delete_built_predecessor(sender<input_type> &p) {\n            key_matching_port_operation op_data(del_blt_pred);\n            op_data.pred = &p;\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/size_t predecessor_count() {\n            key_matching_port_operation op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        /*override*/void copy_predecessors(predecessor_list_type &l) {\n            key_matching_port_operation op_data(blt_pred_cpy);\n            op_data.plist = &l;\n            my_aggregator.execute(&op_data);\n        }\n#endif\n\n        // reset_port is called when item is accepted by successor, but\n        // is initiated by join_node.\n        void reset_port() {\n            key_matching_port_operation op_data(res_port);\n            my_aggregator.execute(&op_data);\n            return;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract_receiver() {\n            buffer_type::reset();\n            my_built_predecessors.receiver_extract(*this);\n        }\n#endif\n        /*override*/void reset_receiver(reset_flags f ) {\n            tbb::internal::suppress_unused_warning(f);\n            buffer_type::reset();\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n           if (f & rf_clear_edges)\n              my_built_predecessors.clear();\n#endif\n        }\n\n    private:\n        // my_join forwarding base used to count number of inputs that\n        // received key.\n        matching_forwarding_base<key_type> *my_join;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        edge_container<predecessor_type> my_built_predecessors;\n#endif\n    };  // key_matching_port\n\n    using namespace graph_policy_namespace;\n\n    template<typename JP, typename InputTuple, typename OutputTuple>\n    class join_node_base;\n\n    //! join_node_FE : implements input port policy\n    template<typename JP, typename InputTuple, typename OutputTuple>\n    class join_node_FE;\n\n    template<typename InputTuple, typename OutputTuple>\n    class join_node_FE<reserving, InputTuple, OutputTuple> : public forwarding_base {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef OutputTuple output_type;\n        typedef InputTuple input_type;\n        typedef join_node_base<reserving, InputTuple, OutputTuple> base_node_type; // for forwarding\n\n        join_node_FE(graph &g) : forwarding_base(g), my_node(NULL) {\n            ports_with_no_inputs = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        join_node_FE(const join_node_FE& other) : forwarding_base(*(other.forwarding_base::graph_pointer)), my_node(NULL) {\n            ports_with_no_inputs = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }\n\n       void increment_port_count() {\n            ++ports_with_no_inputs;\n        }\n\n        // if all input_ports have predecessors, spawn forward to try and consume tuples\n        task * decrement_port_count(bool handle_task) {\n            if(ports_with_no_inputs.fetch_and_decrement() == 1) {\n                if(this->graph_pointer->is_active()) {\n                    task *rtask = new ( task::allocate_additional_child_of( *(this->graph_pointer->root_task()) ) )\n                        forward_task_bypass<base_node_type>(*my_node);\n                    if(!handle_task) return rtask;\n                    FLOW_SPAWN(*rtask);\n                }\n            }\n            return NULL;\n        }\n\n        input_type &input_ports() { return my_inputs; }\n\n    protected:\n\n        void reset(  reset_flags f) {\n            // called outside of parallel contexts\n            ports_with_no_inputs = N;\n            join_helper<N>::reset_inputs(my_inputs, f);\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract( ) {\n            // called outside of parallel contexts\n            ports_with_no_inputs = N;\n            join_helper<N>::extract_inputs(my_inputs);\n        }\n#endif\n\n        // all methods on input ports should be called under mutual exclusion from join_node_base.\n\n        bool tuple_build_may_succeed() {\n            return !ports_with_no_inputs;\n        }\n\n        bool try_to_make_tuple(output_type &out) {\n            if(ports_with_no_inputs) return false;\n            return join_helper<N>::reserve(my_inputs, out);\n        }\n\n        void tuple_accepted() {\n            join_helper<N>::consume_reservations(my_inputs);\n        }\n        void tuple_rejected() {\n            join_helper<N>::release_reservations(my_inputs);\n        }\n\n        input_type my_inputs;\n        base_node_type *my_node;\n        atomic<size_t> ports_with_no_inputs;\n    };  // join_node_FE<reserving, ... >\n\n    template<typename InputTuple, typename OutputTuple>\n    class join_node_FE<queueing, InputTuple, OutputTuple> : public forwarding_base {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef OutputTuple output_type;\n        typedef InputTuple input_type;\n        typedef join_node_base<queueing, InputTuple, OutputTuple> base_node_type; // for forwarding\n\n        join_node_FE(graph &g) : forwarding_base(g), my_node(NULL) {\n            ports_with_no_items = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        join_node_FE(const join_node_FE& other) : forwarding_base(*(other.forwarding_base::graph_pointer)), my_node(NULL) {\n            ports_with_no_items = N;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n        }\n\n        // needed for forwarding\n        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }\n\n        void reset_port_count() {\n            ports_with_no_items = N;\n        }\n\n        // if all input_ports have items, spawn forward to try and consume tuples\n        task * decrement_port_count(bool handle_task)\n        {\n            if(ports_with_no_items.fetch_and_decrement() == 1) {\n                if(this->graph_pointer->is_active()) {\n                    task *rtask = new ( task::allocate_additional_child_of( *(this->graph_pointer->root_task()) ) )\n                        forward_task_bypass <base_node_type>(*my_node);\n                    if(!handle_task) return rtask;\n                    FLOW_SPAWN( *rtask);\n                }\n            }\n            return NULL;\n        }\n\n        void increment_port_count() { __TBB_ASSERT(false, NULL); }  // should never be called\n\n        input_type &input_ports() { return my_inputs; }\n\n    protected:\n\n        void reset(  reset_flags f) {\n            reset_port_count();\n            join_helper<N>::reset_inputs(my_inputs, f );\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() {\n            reset_port_count();\n            join_helper<N>::extract_inputs(my_inputs);\n        }\n#endif\n        // all methods on input ports should be called under mutual exclusion from join_node_base.\n\n        bool tuple_build_may_succeed() {\n            return !ports_with_no_items;\n        }\n\n        bool try_to_make_tuple(output_type &out) {\n            if(ports_with_no_items) return false;\n            return join_helper<N>::get_items(my_inputs, out);\n        }\n\n        void tuple_accepted() {\n            reset_port_count();\n            join_helper<N>::reset_ports(my_inputs);\n        }\n        void tuple_rejected() {\n            // nothing to do.\n        }\n\n        input_type my_inputs;\n        base_node_type *my_node;\n        atomic<size_t> ports_with_no_items;\n    };  // join_node_FE<queueing, ...>\n\n    // key_matching join front-end.\n    template<typename InputTuple, typename OutputTuple, typename K, typename KHash>\n    class join_node_FE<key_matching<K,KHash>, InputTuple, OutputTuple> : public matching_forwarding_base<K>,\n             // buffer of key value counts\n              public hash_buffer<   // typedefed below to key_to_count_buffer_type\n                  typename tbb::internal::strip<K>::type&,        // force ref type on K\n                  count_element<typename tbb::internal::strip<K>::type>,\n                  internal::type_to_key_function_body<\n                      count_element<typename tbb::internal::strip<K>::type>,\n                      typename tbb::internal::strip<K>::type& >,\n                  KHash >,\n             // buffer of output items\n             public item_buffer<OutputTuple> {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputTuple>::value;\n        typedef OutputTuple output_type;\n        typedef InputTuple input_type;\n        typedef K key_type;\n        typedef typename tbb::internal::strip<key_type>::type unref_key_type;\n        typedef KHash key_hash_compare;\n        // must use K without ref.\n        typedef count_element<unref_key_type> count_element_type;\n        // method that lets us refer to the key of this type.\n        typedef key_to_count_functor<unref_key_type> key_to_count_func;\n        typedef internal::type_to_key_function_body< count_element_type, unref_key_type&> TtoK_function_body_type;\n        typedef internal::type_to_key_function_body_leaf<count_element_type, unref_key_type&, key_to_count_func> TtoK_function_body_leaf_type;\n        // this is the type of the special table that keeps track of the number of discrete\n        // elements corresponding to each key that we've seen.\n        typedef hash_buffer< unref_key_type&, count_element_type, TtoK_function_body_type, key_hash_compare >\n                 key_to_count_buffer_type;\n        typedef item_buffer<output_type> output_buffer_type;\n        typedef join_node_base<key_matching<key_type,key_hash_compare>, InputTuple, OutputTuple> base_node_type; // for forwarding\n        typedef matching_forwarding_base<key_type> forwarding_base_type;\n\n// ----------- Aggregator ------------\n        // the aggregator is only needed to serialize the access to the hash table.\n        // and the output_buffer_type base class\n    private:\n        enum op_type { res_count, inc_count, may_succeed, try_make };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef join_node_FE<key_matching<key_type,key_hash_compare>, InputTuple, OutputTuple> class_type;\n\n        class key_matching_FE_operation : public aggregated_operation<key_matching_FE_operation> {\n        public:\n            char type;\n            unref_key_type my_val;\n            output_type* my_output;\n            task *bypass_t;\n            bool enqueue_task;\n            // constructor for value parameter\n            key_matching_FE_operation(const unref_key_type& e , bool q_task , op_type t) : type(char(t)), my_val(e),\n                 my_output(NULL), bypass_t(NULL), enqueue_task(q_task) {}\n            key_matching_FE_operation(output_type *p, op_type t) : type(char(t)), my_output(p), bypass_t(NULL),\n                 enqueue_task(true) {}\n            // constructor with no parameter\n            key_matching_FE_operation(op_type t) : type(char(t)), my_output(NULL), bypass_t(NULL), enqueue_task(true) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, key_matching_FE_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, key_matching_FE_operation>;\n        aggregator<handler_type, key_matching_FE_operation> my_aggregator;\n\n        // called from aggregator, so serialized\n        // returns a task pointer if the a task would have been enqueued but we asked that\n        // it be returned.  Otherwise returns NULL.\n        task * fill_output_buffer(unref_key_type &t, bool should_enqueue, bool handle_task) {\n            output_type l_out;\n            task *rtask = NULL;\n            bool do_fwd = should_enqueue && this->buffer_empty() && this->graph_pointer->is_active();\n            this->current_key = t;\n            this->delete_with_key(this->current_key);   // remove the key\n            if(join_helper<N>::get_items(my_inputs, l_out)) {  //  <== call back\n                this->push_back(l_out);\n                if(do_fwd) {  // we enqueue if receiving an item from predecessor, not if successor asks for item\n                    rtask = new ( task::allocate_additional_child_of( *(this->graph_pointer->root_task()) ) )\n                        forward_task_bypass<base_node_type>(*my_node);\n                    if(handle_task) {\n                        FLOW_SPAWN(*rtask);\n                        rtask = NULL;\n                    }\n                    do_fwd = false;\n                }\n                // retire the input values\n                join_helper<N>::reset_ports(my_inputs);  //  <== call back\n            }\n            else {\n                __TBB_ASSERT(false, \"should have had something to push\");\n            }\n            return rtask;\n        }\n\n        void handle_operations(key_matching_FE_operation* op_list) {\n            key_matching_FE_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case res_count:  // called from BE\n                    {\n                        this->destroy_front();\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                case inc_count: {  // called from input ports\n                        count_element_type *p = 0;\n                        unref_key_type &t = current->my_val;\n                        bool do_enqueue = current->enqueue_task;\n                        if(!(this->find_ref_with_key(t,p))) {\n                            count_element_type ev;\n                            ev.my_key = t;\n                            ev.my_value = 0;\n                            this->insert_with_key(ev);\n                            if(!(this->find_ref_with_key(t,p))) {\n                                __TBB_ASSERT(false, \"should find key after inserting it\");\n                            }\n                        }\n                        if(++(p->my_value) == size_t(N)) {\n                            task *rtask = fill_output_buffer(t, true, do_enqueue);\n                            __TBB_ASSERT(!rtask || !do_enqueue, \"task should not be returned\");\n                            current->bypass_t = rtask;\n                        }\n                    }\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case may_succeed:  // called from BE\n                    __TBB_store_with_release(current->status, this->buffer_empty() ? FAILED : SUCCEEDED);\n                    break;\n                case try_make:  // called from BE\n                    if(this->buffer_empty()) {\n                        __TBB_store_with_release(current->status, FAILED);\n                    }\n                    else {\n                        this->copy_front(*(current->my_output));\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                }\n            }\n        }\n// ------------ End Aggregator ---------------\n\n    public:\n        template<typename FunctionTuple>\n        join_node_FE(graph &g, FunctionTuple &TtoK_funcs) : forwarding_base_type(g), my_node(NULL) {\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n            join_helper<N>::set_key_functors(my_inputs, TtoK_funcs);\n            my_aggregator.initialize_handler(handler_type(this));\n                    TtoK_function_body_type *cfb = new TtoK_function_body_leaf_type(key_to_count_func());\n            this->set_key_func(cfb);\n        }\n\n        join_node_FE(const join_node_FE& other) : forwarding_base_type(*(other.forwarding_base_type::graph_pointer)), key_to_count_buffer_type(),\n        output_buffer_type() {\n            my_node = NULL;\n            join_helper<N>::set_join_node_pointer(my_inputs, this);\n            join_helper<N>::copy_key_functors(my_inputs, const_cast<input_type &>(other.my_inputs));\n            my_aggregator.initialize_handler(handler_type(this));\n            TtoK_function_body_type *cfb = new TtoK_function_body_leaf_type(key_to_count_func());\n            this->set_key_func(cfb);\n        }\n\n        // needed for forwarding\n        void set_my_node(base_node_type *new_my_node) { my_node = new_my_node; }\n\n        void reset_port_count() {  // called from BE\n            key_matching_FE_operation op_data(res_count);\n            my_aggregator.execute(&op_data);\n            return;\n        }\n\n        // if all input_ports have items, spawn forward to try and consume tuples\n        // return a task if we are asked and did create one.\n        /*override*/ task *increment_key_count(unref_key_type const & t, bool handle_task) {  // called from input_ports\n            key_matching_FE_operation op_data(t, handle_task, inc_count);\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n        /*override*/ task *decrement_port_count(bool /*handle_task*/) { __TBB_ASSERT(false, NULL); return NULL; }\n\n        void increment_port_count() { __TBB_ASSERT(false, NULL); }  // should never be called\n\n        input_type &input_ports() { return my_inputs; }\n\n    protected:\n\n        void reset(  reset_flags f ) {\n            // called outside of parallel contexts\n            join_helper<N>::reset_inputs(my_inputs, f);\n\n            key_to_count_buffer_type::reset();\n            output_buffer_type::reset();\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        void extract() {\n            // called outside of parallel contexts\n            join_helper<N>::extract_inputs(my_inputs);\n            key_to_count_buffer_type::reset();  // have to reset the tag counts\n            output_buffer_type::reset();  // also the queue of outputs\n            // my_node->current_tag = NO_TAG;\n        }\n#endif\n        // all methods on input ports should be called under mutual exclusion from join_node_base.\n\n        bool tuple_build_may_succeed() {  // called from back-end\n            key_matching_FE_operation op_data(may_succeed);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        // cannot lock while calling back to input_ports.  current_key will only be set\n        // and reset under the aggregator, so it will remain consistent.\n        bool try_to_make_tuple(output_type &out) {\n            key_matching_FE_operation op_data(&out,try_make);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        void tuple_accepted() {\n            reset_port_count();  // reset current_key after ports reset.\n        }\n\n        void tuple_rejected() {\n            // nothing to do.\n        }\n\n        input_type my_inputs;  // input ports\n        base_node_type *my_node;\n    }; // join_node_FE<key_matching<K,KHash>, InputTuple, OutputTuple>\n\n    //! join_node_base\n    template<typename JP, typename InputTuple, typename OutputTuple>\n    class join_node_base : public graph_node, public join_node_FE<JP, InputTuple, OutputTuple>,\n                           public sender<OutputTuple> {\n    protected:\n        using graph_node::my_graph;\n    public:\n        typedef OutputTuple output_type;\n\n        typedef receiver<output_type> successor_type;\n        typedef join_node_FE<JP, InputTuple, OutputTuple> input_ports_type;\n        using input_ports_type::tuple_build_may_succeed;\n        using input_ports_type::try_to_make_tuple;\n        using input_ports_type::tuple_accepted;\n        using input_ports_type::tuple_rejected;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename sender<output_type>::built_successors_type built_successors_type;\n        typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n    private:\n        // ----------- Aggregator ------------\n        enum op_type { reg_succ, rem_succ, try__get, do_fwrd, do_fwrd_bypass\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_succ, del_blt_succ, blt_succ_cnt, blt_succ_cpy\n#endif\n        };\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        typedef join_node_base<JP,InputTuple,OutputTuple> class_type;\n\n        class join_node_base_operation : public aggregated_operation<join_node_base_operation> {\n        public:\n            char type;\n            union {\n                output_type *my_arg;\n                successor_type *my_succ;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                successor_list_type *slist;\n#endif\n            };\n            task *bypass_t;\n            join_node_base_operation(const output_type& e, op_type t) : type(char(t)),\n                my_arg(const_cast<output_type*>(&e)), bypass_t(NULL) {}\n            join_node_base_operation(const successor_type &s, op_type t) : type(char(t)),\n                my_succ(const_cast<successor_type *>(&s)), bypass_t(NULL) {}\n            join_node_base_operation(op_type t) : type(char(t)), bypass_t(NULL) {}\n        };\n\n        typedef internal::aggregating_functor<class_type, join_node_base_operation> handler_type;\n        friend class internal::aggregating_functor<class_type, join_node_base_operation>;\n        bool forwarder_busy;\n        aggregator<handler_type, join_node_base_operation> my_aggregator;\n\n        void handle_operations(join_node_base_operation* op_list) {\n            join_node_base_operation *current;\n            while(op_list) {\n                current = op_list;\n                op_list = op_list->next;\n                switch(current->type) {\n                case reg_succ: {\n                        my_successors.register_successor(*(current->my_succ));\n                        if(tuple_build_may_succeed() && !forwarder_busy && this->graph_node::my_graph.is_active()) {\n                            task *rtask = new ( task::allocate_additional_child_of(*(this->graph_node::my_graph.root_task())) )\n                                    forward_task_bypass\n                                    <join_node_base<JP,InputTuple,OutputTuple> >(*this);\n                            FLOW_SPAWN(*rtask);\n                            forwarder_busy = true;\n                        }\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                    }\n                    break;\n                case rem_succ:\n                    my_successors.remove_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case try__get:\n                    if(tuple_build_may_succeed()) {\n                        if(try_to_make_tuple(*(current->my_arg))) {\n                            tuple_accepted();\n                            __TBB_store_with_release(current->status, SUCCEEDED);\n                        }\n                        else __TBB_store_with_release(current->status, FAILED);\n                    }\n                    else __TBB_store_with_release(current->status, FAILED);\n                    break;\n                case do_fwrd_bypass: {\n                        bool build_succeeded;\n                        task *last_task = NULL;\n                        output_type out;\n                        if(tuple_build_may_succeed()) {  // checks output queue of FE\n                            do {\n                                build_succeeded = try_to_make_tuple(out);  // fetch front_end of queue\n                                if(build_succeeded) {\n                                    task *new_task = my_successors.try_put_task(out);\n                                    last_task = combine_tasks(last_task, new_task);\n                                    if(new_task) {\n                                        tuple_accepted();\n                                    }\n                                    else {\n                                        tuple_rejected();\n                                        build_succeeded = false;\n                                    }\n                                }\n                            } while(build_succeeded);\n                        }\n                        current->bypass_t = last_task;\n                        __TBB_store_with_release(current->status, SUCCEEDED);\n                        forwarder_busy = false;\n                    }\n                    break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_succ:\n                    my_successors.internal_add_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case del_blt_succ:\n                    my_successors.internal_delete_built_successor(*(current->my_succ));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cnt:\n                    current->cnt_val = my_successors.successor_count();\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n                case blt_succ_cpy:\n                    my_successors.copy_successors(*(current->slist));\n                    __TBB_store_with_release(current->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n        // ---------- end aggregator -----------\n    public:\n        join_node_base(graph &g) : graph_node(g), input_ports_type(g), forwarder_busy(false) {\n            my_successors.set_owner(this);\n            input_ports_type::set_my_node(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        join_node_base(const join_node_base& other) :\n            graph_node(other.graph_node::my_graph), input_ports_type(other),\n            sender<OutputTuple>(), forwarder_busy(false), my_successors() {\n            my_successors.set_owner(this);\n            input_ports_type::set_my_node(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        template<typename FunctionTuple>\n        join_node_base(graph &g, FunctionTuple f) : graph_node(g), input_ports_type(g, f), forwarder_busy(false) {\n            my_successors.set_owner(this);\n            input_ports_type::set_my_node(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        bool register_successor(successor_type &r) {\n            join_node_base_operation op_data(r, reg_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        bool remove_successor( successor_type &r) {\n            join_node_base_operation op_data(r, rem_succ);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n        bool try_get( output_type &v) {\n            join_node_base_operation op_data(v, try__get);\n            my_aggregator.execute(&op_data);\n            return op_data.status == SUCCEEDED;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        /*override*/built_successors_type &built_successors() { return my_successors.built_successors(); }\n\n        /*override*/void internal_add_built_successor( successor_type &r) {\n            join_node_base_operation op_data(r, add_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/void internal_delete_built_successor( successor_type &r) {\n            join_node_base_operation op_data(r, del_blt_succ);\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/size_t successor_count() {\n            join_node_base_operation op_data(blt_succ_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        /*override*/ void copy_successors(successor_list_type &l) {\n            join_node_base_operation op_data(blt_succ_cpy);\n            op_data.slist = &l;\n            my_aggregator.execute(&op_data);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        /*override*/void extract() {\n            input_ports_type::extract();\n            my_successors.built_successors().sender_extract(*this);\n        }\n#endif\n\n    protected:\n\n        /*override*/void reset_node(reset_flags f) {\n            input_ports_type::reset(f);\n            if(f & rf_clear_edges) my_successors.clear();\n        }\n\n    private:\n        broadcast_cache<output_type, null_rw_mutex> my_successors;\n\n        friend class forward_task_bypass< join_node_base<JP, InputTuple, OutputTuple> >;\n        task *forward_task() {\n            join_node_base_operation op_data(do_fwrd_bypass);\n            my_aggregator.execute(&op_data);\n            return op_data.bypass_t;\n        }\n\n    };  // join_node_base\n\n    // join base class type generator\n    template<int N, template<class> class PT, typename OutputTuple, typename JP>\n    struct join_base {\n        typedef typename internal::join_node_base<JP, typename wrap_tuple_elements<N,PT,OutputTuple>::type, OutputTuple> type;\n    };\n\n    template<int N, typename OutputTuple, typename K, typename KHash>\n    struct join_base<N, key_matching_port, OutputTuple, key_matching<K,KHash> > {\n        typedef key_matching<K, KHash> key_traits_type;\n        typedef K key_type;\n        typedef KHash key_hash_compare;\n        typedef typename internal::join_node_base< key_traits_type,\n                // ports type\n                typename wrap_key_tuple_elements<N,key_matching_port,key_traits_type,OutputTuple>::type,\n                OutputTuple > type;\n    };\n\n    //! unfolded_join_node : passes input_ports_type to join_node_base.  We build the input port type\n    //  using tuple_element.  The class PT is the port type (reserving_port, queueing_port, key_matching_port)\n    //  and should match the typename.\n\n    template<int N, template<class> class PT, typename OutputTuple, typename JP>\n    class unfolded_join_node : public join_base<N,PT,OutputTuple,JP>::type {\n    public:\n        typedef typename wrap_tuple_elements<N, PT, OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<JP, input_ports_type, output_type > base_type;\n    public:\n        unfolded_join_node(graph &g) : base_type(g) {}\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n    template <typename K, typename T>\n    struct key_from_message_body {\n        K operator()(const T& t) const {\n            using tbb::flow::key_from_message;\n            return key_from_message<K>(t);\n        }\n    };\n    // Adds const to reference type\n    template <typename K, typename T>\n    struct key_from_message_body<K&,T> {\n        const K& operator()(const T& t) const {\n            using tbb::flow::key_from_message;\n            return key_from_message<const K&>(t);\n        }\n    };\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n    // key_matching unfolded_join_node.  This must be a separate specialization because the constructors\n    // differ.\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<2,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<2,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n    public:\n        typedef typename wrap_key_tuple_elements<2,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 2, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<3,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<3,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n    public:\n        typedef typename wrap_key_tuple_elements<3,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 3, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<4,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<4,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n    public:\n        typedef typename wrap_key_tuple_elements<4,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash>, input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 4, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<5,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<5,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n    public:\n        typedef typename wrap_key_tuple_elements<5,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 5, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n\n#if __TBB_VARIADIC_MAX >= 6\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<6,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<6,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n    public:\n        typedef typename wrap_key_tuple_elements<6,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4, typename Body5>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4, Body5 body5)\n                : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 6, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 7\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<7,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<7,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n    public:\n        typedef typename wrap_key_tuple_elements<7,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n                 typename Body5, typename Body6>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 7, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 8\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<8,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<8,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n        typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;\n    public:\n        typedef typename wrap_key_tuple_elements<8,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),\n                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n                 typename Body5, typename Body6, typename Body7>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6, Body7 body7) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),\n                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 8, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 9\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<9,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<9,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n        typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;\n        typedef typename tbb::flow::tuple_element<8, OutputTuple>::type T8;\n    public:\n        typedef typename wrap_key_tuple_elements<9,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;\n        typedef typename internal::type_to_key_function_body<T8, K> *f8_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p, f8_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),\n                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>()),\n                    new internal::type_to_key_function_body_leaf<T8, K, key_from_message_body<K,T8> >(key_from_message_body<K,T8>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n                 typename Body5, typename Body6, typename Body7, typename Body8>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6, Body7 body7, Body8 body8) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),\n                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7),\n                    new internal::type_to_key_function_body_leaf<T8, K, Body8>(body8)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 9, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 10\n    template<typename OutputTuple, typename K, typename KHash>\n    class unfolded_join_node<10,key_matching_port,OutputTuple,key_matching<K,KHash> > : public\n            join_base<10,key_matching_port,OutputTuple,key_matching<K,KHash> >::type {\n        typedef typename tbb::flow::tuple_element<0, OutputTuple>::type T0;\n        typedef typename tbb::flow::tuple_element<1, OutputTuple>::type T1;\n        typedef typename tbb::flow::tuple_element<2, OutputTuple>::type T2;\n        typedef typename tbb::flow::tuple_element<3, OutputTuple>::type T3;\n        typedef typename tbb::flow::tuple_element<4, OutputTuple>::type T4;\n        typedef typename tbb::flow::tuple_element<5, OutputTuple>::type T5;\n        typedef typename tbb::flow::tuple_element<6, OutputTuple>::type T6;\n        typedef typename tbb::flow::tuple_element<7, OutputTuple>::type T7;\n        typedef typename tbb::flow::tuple_element<8, OutputTuple>::type T8;\n        typedef typename tbb::flow::tuple_element<9, OutputTuple>::type T9;\n    public:\n        typedef typename wrap_key_tuple_elements<10,key_matching_port,key_matching<K,KHash>,OutputTuple>::type input_ports_type;\n        typedef OutputTuple output_type;\n    private:\n        typedef join_node_base<key_matching<K,KHash> , input_ports_type, output_type > base_type;\n        typedef typename internal::type_to_key_function_body<T0, K> *f0_p;\n        typedef typename internal::type_to_key_function_body<T1, K> *f1_p;\n        typedef typename internal::type_to_key_function_body<T2, K> *f2_p;\n        typedef typename internal::type_to_key_function_body<T3, K> *f3_p;\n        typedef typename internal::type_to_key_function_body<T4, K> *f4_p;\n        typedef typename internal::type_to_key_function_body<T5, K> *f5_p;\n        typedef typename internal::type_to_key_function_body<T6, K> *f6_p;\n        typedef typename internal::type_to_key_function_body<T7, K> *f7_p;\n        typedef typename internal::type_to_key_function_body<T8, K> *f8_p;\n        typedef typename internal::type_to_key_function_body<T9, K> *f9_p;\n        typedef typename tbb::flow::tuple< f0_p, f1_p, f2_p, f3_p, f4_p, f5_p, f6_p, f7_p, f8_p, f9_p > func_initializer_type;\n    public:\n#if __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING\n        unfolded_join_node(graph &g) : base_type(g,\n                func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, key_from_message_body<K,T0> >(key_from_message_body<K,T0>()),\n                    new internal::type_to_key_function_body_leaf<T1, K, key_from_message_body<K,T1> >(key_from_message_body<K,T1>()),\n                    new internal::type_to_key_function_body_leaf<T2, K, key_from_message_body<K,T2> >(key_from_message_body<K,T2>()),\n                    new internal::type_to_key_function_body_leaf<T3, K, key_from_message_body<K,T3> >(key_from_message_body<K,T3>()),\n                    new internal::type_to_key_function_body_leaf<T4, K, key_from_message_body<K,T4> >(key_from_message_body<K,T4>()),\n                    new internal::type_to_key_function_body_leaf<T5, K, key_from_message_body<K,T5> >(key_from_message_body<K,T5>()),\n                    new internal::type_to_key_function_body_leaf<T6, K, key_from_message_body<K,T6> >(key_from_message_body<K,T6>()),\n                    new internal::type_to_key_function_body_leaf<T7, K, key_from_message_body<K,T7> >(key_from_message_body<K,T7>()),\n                    new internal::type_to_key_function_body_leaf<T8, K, key_from_message_body<K,T8> >(key_from_message_body<K,T8>()),\n                    new internal::type_to_key_function_body_leaf<T9, K, key_from_message_body<K,T9> >(key_from_message_body<K,T9>())\n                    ) ) {\n        }\n#endif /* __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING */\n        template<typename Body0, typename Body1, typename Body2, typename Body3, typename Body4,\n            typename Body5, typename Body6, typename Body7, typename Body8, typename Body9>\n        unfolded_join_node(graph &g, Body0 body0, Body1 body1, Body2 body2, Body3 body3, Body4 body4,\n                Body5 body5, Body6 body6, Body7 body7, Body8 body8, Body9 body9) : base_type(g, func_initializer_type(\n                    new internal::type_to_key_function_body_leaf<T0, K, Body0>(body0),\n                    new internal::type_to_key_function_body_leaf<T1, K, Body1>(body1),\n                    new internal::type_to_key_function_body_leaf<T2, K, Body2>(body2),\n                    new internal::type_to_key_function_body_leaf<T3, K, Body3>(body3),\n                    new internal::type_to_key_function_body_leaf<T4, K, Body4>(body4),\n                    new internal::type_to_key_function_body_leaf<T5, K, Body5>(body5),\n                    new internal::type_to_key_function_body_leaf<T6, K, Body6>(body6),\n                    new internal::type_to_key_function_body_leaf<T7, K, Body7>(body7),\n                    new internal::type_to_key_function_body_leaf<T8, K, Body8>(body8),\n                    new internal::type_to_key_function_body_leaf<T9, K, Body9>(body9)\n                    ) ) {\n            __TBB_STATIC_ASSERT(tbb::flow::tuple_size<OutputTuple>::value == 10, \"wrong number of body initializers\");\n        }\n        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}\n    };\n#endif\n\n    //! templated function to refer to input ports of the join node\n    template<size_t N, typename JNT>\n    typename tbb::flow::tuple_element<N, typename JNT::input_ports_type>::type &input_port(JNT &jn) {\n        return tbb::flow::get<N>(jn.input_ports());\n    }\n\n}\n#endif // __TBB__flow_graph_join_impl_H\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_flow_graph_node_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__flow_graph_node_impl_H\n#define __TBB__flow_graph_node_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include \"_flow_graph_item_buffer_impl.h\"\n\n//! @cond INTERNAL\nnamespace internal {\n\n    using tbb::internal::aggregated_operation;\n    using tbb::internal::aggregating_functor;\n    using tbb::internal::aggregator;\n\n     template< typename T, typename A >\n     class function_input_queue : public item_buffer<T,A> {\n     public:\n         bool pop( T& t ) {\n             return this->pop_front( t );\n         }\n\n         bool push( T& t ) {\n             return this->push_back( t );\n         }\n     };\n\n    //! Input and scheduling for a function node that takes a type Input as input\n    //  The only up-ref is apply_body_impl, which should implement the function\n    //  call and any handling of the result.\n    template< typename Input, typename A, typename ImplType >\n    class function_input_base : public receiver<Input>, tbb::internal::no_assign {\n        enum op_stat {WAIT=0, SUCCEEDED, FAILED};\n        enum op_type {reg_pred, rem_pred, app_body, try_fwd, tryput_bypass, app_body_bypass\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n            , add_blt_pred, del_blt_pred,\n            blt_pred_cnt, blt_pred_cpy   // create vector copies of preds and succs\n#endif\n        };\n        typedef function_input_base<Input, A, ImplType> class_type;\n\n    public:\n\n        //! The input type of this receiver\n        typedef Input input_type;\n        typedef sender<Input> predecessor_type;\n        typedef predecessor_cache<input_type, null_mutex > predecessor_cache_type;\n        typedef function_input_queue<input_type, A> input_queue_type;\n        typedef typename A::template rebind< input_queue_type >::other queue_allocator_type;\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename predecessor_cache_type::built_predecessors_type built_predecessors_type;\n        typedef typename receiver<input_type>::predecessor_list_type predecessor_list_type;\n#endif\n\n        //! Constructor for function_input_base\n        function_input_base( graph &g, size_t max_concurrency, input_queue_type *q = NULL)\n            : my_graph(g), my_max_concurrency(max_concurrency), my_concurrency(0),\n              my_queue(q), forwarder_busy(false) {\n            my_predecessors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! Copy constructor\n        function_input_base( const function_input_base& src, input_queue_type *q = NULL) :\n            receiver<Input>(), tbb::internal::no_assign(),\n            my_graph(src.my_graph), my_max_concurrency(src.my_max_concurrency),\n            my_concurrency(0), my_queue(q), forwarder_busy(false)\n        {\n            my_predecessors.set_owner(this);\n            my_aggregator.initialize_handler(handler_type(this));\n        }\n\n        //! Destructor\n        // The queue is allocated by the constructor for {multi}function_node.\n        // TODO: pass the graph_buffer_policy to the base so it can allocate the queue instead.\n        // This would be an interface-breaking change.\n        virtual ~function_input_base() {\n            if ( my_queue ) delete my_queue;\n        }\n\n        //! Put to the node, returning a task if available\n        virtual task * try_put_task( const input_type &t ) {\n           if ( my_max_concurrency == 0 ) {\n               return create_body_task( t );\n           } else {\n               operation_type op_data(t, tryput_bypass);\n               my_aggregator.execute(&op_data);\n               if(op_data.status == SUCCEEDED ) {\n                   return op_data.bypass_t;\n               }\n               return NULL;\n           }\n        }\n\n        //! Adds src to the list of cached predecessors.\n        /* override */ bool register_predecessor( predecessor_type &src ) {\n            operation_type op_data(reg_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n            return true;\n        }\n\n        //! Removes src from the list of cached predecessors.\n        /* override */ bool remove_predecessor( predecessor_type &src ) {\n            operation_type op_data(rem_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n            return true;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        //! Adds to list of predecessors added by make_edge\n        /*override*/ void internal_add_built_predecessor( predecessor_type &src) {\n            operation_type op_data(add_blt_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n        }\n\n        //! removes from to list of predecessors (used by remove_edge)\n        /*override*/ void internal_delete_built_predecessor( predecessor_type &src) {\n            operation_type op_data(del_blt_pred);\n            op_data.r = &src;\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/ size_t predecessor_count() {\n            operation_type op_data(blt_pred_cnt);\n            my_aggregator.execute(&op_data);\n            return op_data.cnt_val;\n        }\n\n        /*override*/ void copy_predecessors(predecessor_list_type &v) {\n            operation_type op_data(blt_pred_cpy);\n            op_data.predv = &v;\n            my_aggregator.execute(&op_data);\n        }\n\n        /*override*/built_predecessors_type &built_predecessors() {\n            return my_predecessors.built_predecessors();\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n    protected:\n\n        void reset_function_input_base( reset_flags f) {\n            my_concurrency = 0;\n            if(my_queue) {\n                my_queue->reset();\n            }\n            reset_receiver(f);\n            forwarder_busy = false;\n        }\n\n        graph& my_graph;\n        const size_t my_max_concurrency;\n        size_t my_concurrency;\n        input_queue_type *my_queue;\n        predecessor_cache<input_type, null_mutex > my_predecessors;\n\n        /*override*/void reset_receiver( reset_flags f) {\n            if( f & rf_clear_edges) my_predecessors.clear();\n            else\n                my_predecessors.reset();\n            __TBB_ASSERT(!(f & rf_clear_edges) || my_predecessors.empty(), \"function_input_base reset failed\");\n        }\n\n    private:\n\n        friend class apply_body_task_bypass< class_type, input_type >;\n        friend class forward_task_bypass< class_type >;\n\n        class operation_type : public aggregated_operation< operation_type > {\n        public:\n            char type;\n            union {\n                input_type *elem;\n                predecessor_type *r;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                size_t cnt_val;\n                predecessor_list_type *predv;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n            };\n            tbb::task *bypass_t;\n            operation_type(const input_type& e, op_type t) :\n                type(char(t)), elem(const_cast<input_type*>(&e)) {}\n            operation_type(op_type t) : type(char(t)), r(NULL) {}\n        };\n\n        bool forwarder_busy;\n        typedef internal::aggregating_functor<class_type, operation_type> handler_type;\n        friend class internal::aggregating_functor<class_type, operation_type>;\n        aggregator< handler_type, operation_type > my_aggregator;\n\n        void handle_operations(operation_type *op_list) {\n            operation_type *tmp;\n            while (op_list) {\n                tmp = op_list;\n                op_list = op_list->next;\n                switch (tmp->type) {\n                case reg_pred:\n                    my_predecessors.add(*(tmp->r));\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    if (!forwarder_busy) {\n                        forwarder_busy = true;\n                        spawn_forward_task();\n                    }\n                    break;\n                case rem_pred:\n                    my_predecessors.remove(*(tmp->r));\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n                case app_body:\n                    __TBB_ASSERT(my_max_concurrency != 0, NULL);\n                    --my_concurrency;\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    if (my_concurrency<my_max_concurrency) {\n                        input_type i;\n                        bool item_was_retrieved = false;\n                        if ( my_queue )\n                            item_was_retrieved = my_queue->pop(i);\n                        else\n                            item_was_retrieved = my_predecessors.get_item(i);\n                        if (item_was_retrieved) {\n                            ++my_concurrency;\n                            spawn_body_task(i);\n                        }\n                    }\n                    break;\n                case app_body_bypass: {\n                        task * new_task = NULL;\n                        __TBB_ASSERT(my_max_concurrency != 0, NULL);\n                        --my_concurrency;\n                        if (my_concurrency<my_max_concurrency) {\n                            input_type i;\n                            bool item_was_retrieved = false;\n                            if ( my_queue )\n                                item_was_retrieved = my_queue->pop(i);\n                            else\n                                item_was_retrieved = my_predecessors.get_item(i);\n                            if (item_was_retrieved) {\n                                ++my_concurrency;\n                                new_task = create_body_task(i);\n                            }\n                        }\n                        tmp->bypass_t = new_task;\n                        __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    }\n                    break;\n                case tryput_bypass: internal_try_put_task(tmp);  break;\n                case try_fwd: internal_forward(tmp);  break;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n                case add_blt_pred: {\n                         my_predecessors.internal_add_built_predecessor(*(tmp->r));\n                        __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    }\n                    break;\n                case del_blt_pred:\n                    my_predecessors.internal_delete_built_predecessor(*(tmp->r));\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n                case blt_pred_cnt:\n                    tmp->cnt_val = my_predecessors.predecessor_count();\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n                case blt_pred_cpy:\n                    my_predecessors.copy_predecessors( *(tmp->predv) );\n                    __TBB_store_with_release(tmp->status, SUCCEEDED);\n                    break;\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n                }\n            }\n        }\n\n        //! Put to the node, but return the task instead of enqueueing it\n        void internal_try_put_task(operation_type *op) {\n            __TBB_ASSERT(my_max_concurrency != 0, NULL);\n            if (my_concurrency < my_max_concurrency) {\n               ++my_concurrency;\n               task * new_task = create_body_task(*(op->elem));\n               op->bypass_t = new_task;\n               __TBB_store_with_release(op->status, SUCCEEDED);\n           } else if ( my_queue && my_queue->push(*(op->elem)) ) {\n               op->bypass_t = SUCCESSFULLY_ENQUEUED;\n               __TBB_store_with_release(op->status, SUCCEEDED);\n           } else {\n               op->bypass_t = NULL;\n               __TBB_store_with_release(op->status, FAILED);\n           }\n        }\n\n        //! Tries to spawn bodies if available and if concurrency allows\n        void internal_forward(operation_type *op) {\n            op->bypass_t = NULL;\n            if (my_concurrency<my_max_concurrency || !my_max_concurrency) {\n                input_type i;\n                bool item_was_retrieved = false;\n                if ( my_queue )\n                    item_was_retrieved = my_queue->pop(i);\n                else\n                    item_was_retrieved = my_predecessors.get_item(i);\n                if (item_was_retrieved) {\n                    ++my_concurrency;\n                    op->bypass_t = create_body_task(i);\n                    __TBB_store_with_release(op->status, SUCCEEDED);\n                    return;\n                }\n            }\n            __TBB_store_with_release(op->status, FAILED);\n            forwarder_busy = false;\n        }\n\n        //! Applies the body to the provided input\n        //  then decides if more work is available\n        task * apply_body_bypass( input_type &i ) {\n            task * new_task = static_cast<ImplType *>(this)->apply_body_impl_bypass(i);\n            if ( my_max_concurrency != 0 ) {\n                operation_type op_data(app_body_bypass);  // tries to pop an item or get_item, enqueues another apply_body\n                my_aggregator.execute(&op_data);\n                tbb::task *ttask = op_data.bypass_t;\n                new_task = combine_tasks(new_task, ttask);\n            }\n            return new_task;\n        }\n\n        //! allocates a task to apply a body\n        inline task * create_body_task( const input_type &input ) {\n\n            return (my_graph.is_active()) ?\n                new(task::allocate_additional_child_of(*(my_graph.root_task())))\n                    apply_body_task_bypass < class_type, input_type >(*this, input) :\n                NULL;\n        }\n\n       //! Spawns a task that applies a body\n       inline void spawn_body_task( const input_type &input ) {\n           task* tp = create_body_task(input);\n           // tp == NULL => g.reset(), which shouldn't occur in concurrent context\n           if(tp) {\n               FLOW_SPAWN(*tp);\n           }\n       }\n\n       //! This is executed by an enqueued task, the \"forwarder\"\n       task *forward_task() {\n           operation_type op_data(try_fwd);\n           task *rval = NULL;\n           do {\n               op_data.status = WAIT;\n               my_aggregator.execute(&op_data);\n               if(op_data.status == SUCCEEDED) {\n                   tbb::task *ttask = op_data.bypass_t;\n                   rval = combine_tasks(rval, ttask);\n               }\n           } while (op_data.status == SUCCEEDED);\n           return rval;\n       }\n\n       inline task *create_forward_task() {\n           return (my_graph.is_active()) ?\n               new(task::allocate_additional_child_of(*(my_graph.root_task()))) forward_task_bypass< class_type >(*this) :\n               NULL;\n       }\n\n       //! Spawns a task that calls forward()\n       inline void spawn_forward_task() {\n           task* tp = create_forward_task();\n           if(tp) {\n               FLOW_SPAWN(*tp);\n           }\n       }\n    };  // function_input_base\n\n    //! Implements methods for a function node that takes a type Input as input and sends\n    //  a type Output to its successors.\n    template< typename Input, typename Output, typename A>\n    class function_input : public function_input_base<Input, A, function_input<Input,Output,A> > {\n    public:\n        typedef Input input_type;\n        typedef Output output_type;\n        typedef function_body<input_type, output_type> function_body_type;\n        typedef function_input<Input,Output,A> my_class;\n        typedef function_input_base<Input, A, my_class> base_type;\n        typedef function_input_queue<input_type, A> input_queue_type;\n\n        // constructor\n        template<typename Body>\n        function_input( graph &g, size_t max_concurrency, Body& body, input_queue_type *q = NULL ) :\n            base_type(g, max_concurrency, q),\n            my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),\n            my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) {\n        }\n\n        //! Copy constructor\n        function_input( const function_input& src, input_queue_type *q = NULL ) :\n                base_type(src, q),\n                my_body( src.my_init_body->clone() ),\n                my_init_body(src.my_init_body->clone() ) {\n        }\n\n        ~function_input() {\n            delete my_body;\n            delete my_init_body;\n        }\n\n        template< typename Body >\n        Body copy_function_object() {\n            function_body_type &body_ref = *this->my_body;\n            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body();\n        }\n\n        task * apply_body_impl_bypass( const input_type &i) {\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n            // There is an extra copied needed to capture the\n            // body execution without the try_put\n            tbb::internal::fgt_begin_body( my_body );\n            output_type v = (*my_body)(i);\n            tbb::internal::fgt_end_body( my_body );\n            task * new_task = successors().try_put_task( v );\n#else\n            task * new_task = successors().try_put_task( (*my_body)(i) );\n#endif\n            return new_task;\n        }\n\n    protected:\n\n        void reset_function_input(reset_flags f) {\n            base_type::reset_function_input_base(f);\n            if(f & rf_reset_bodies) {\n                function_body_type *tmp = my_init_body->clone();\n                delete my_body;\n                my_body = tmp;\n            }\n        }\n\n        function_body_type *my_body;\n        function_body_type *my_init_body;\n        virtual broadcast_cache<output_type > &successors() = 0;\n\n    };  // function_input\n\n\n    // helper templates to clear the successor edges of the output ports of an multifunction_node\n    template<int N> struct clear_element {\n        template<typename P> static void clear_this(P &p) {\n            (void)tbb::flow::get<N-1>(p).successors().clear();\n            clear_element<N-1>::clear_this(p);\n        }\n        template<typename P> static bool this_empty(P &p) {\n            if(tbb::flow::get<N-1>(p).successors().empty())\n                return clear_element<N-1>::this_empty(p);\n            return false;\n        }\n    };\n\n    template<> struct clear_element<1> {\n        template<typename P> static void clear_this(P &p) {\n            (void)tbb::flow::get<0>(p).successors().clear();\n        }\n        template<typename P> static bool this_empty(P &p) {\n            return tbb::flow::get<0>(p).successors().empty();\n        }\n    };\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n    // helper templates to extract the output ports of an multifunction_node from graph\n    template<int N> struct extract_element {\n        template<typename P> static void extract_this(P &p) {\n            (void)tbb::flow::get<N-1>(p).successors().built_successors().sender_extract(tbb::flow::get<N-1>(p));\n            extract_element<N-1>::extract_this(p);\n        }\n    };\n\n    template<> struct extract_element<1> {\n        template<typename P> static void extract_this(P &p) {\n            (void)tbb::flow::get<0>(p).successors().built_successors().sender_extract(tbb::flow::get<0>(p));\n        }\n    };\n#endif\n\n    //! Implements methods for a function node that takes a type Input as input\n    //  and has a tuple of output ports specified.\n    template< typename Input, typename OutputPortSet, typename A>\n    class multifunction_input : public function_input_base<Input, A, multifunction_input<Input,OutputPortSet,A> > {\n    public:\n        static const int N = tbb::flow::tuple_size<OutputPortSet>::value;\n        typedef Input input_type;\n        typedef OutputPortSet output_ports_type;\n        typedef multifunction_body<input_type, output_ports_type> multifunction_body_type;\n        typedef multifunction_input<Input,OutputPortSet,A> my_class;\n        typedef function_input_base<Input, A, my_class> base_type;\n        typedef function_input_queue<input_type, A> input_queue_type;\n\n        // constructor\n        template<typename Body>\n        multifunction_input(\n                graph &g,\n                size_t max_concurrency,\n                Body& body,\n                input_queue_type *q = NULL ) :\n            base_type(g, max_concurrency, q),\n            my_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ),\n            my_init_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ) {\n        }\n\n        //! Copy constructor\n        multifunction_input( const multifunction_input& src, input_queue_type *q = NULL ) :\n                base_type(src, q),\n                my_body( src.my_init_body->clone() ),\n                my_init_body(src.my_init_body->clone() ) {\n        }\n\n        ~multifunction_input() {\n            delete my_body;\n            delete my_init_body;\n        }\n\n        template< typename Body >\n        Body copy_function_object() {\n            multifunction_body_type &body_ref = *this->my_body;\n            return dynamic_cast< internal::multifunction_body_leaf<input_type, output_ports_type, Body> & >(body_ref).get_body();\n        }\n\n        // for multifunction nodes we do not have a single successor as such.  So we just tell\n        // the task we were successful.\n        task * apply_body_impl_bypass( const input_type &i) {\n            tbb::internal::fgt_begin_body( my_body );\n            (*my_body)(i, my_output_ports);\n            tbb::internal::fgt_end_body( my_body );\n            task * new_task = SUCCESSFULLY_ENQUEUED;\n            return new_task;\n        }\n\n        output_ports_type &output_ports(){ return my_output_ports; }\n\n    protected:\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        /*override*/void extract() {\n            extract_element<N>::extract_this(my_output_ports);\n        }\n#endif\n\n        /*override*/void reset(reset_flags f) {\n            base_type::reset_function_input_base(f);\n            if(f & rf_clear_edges)clear_element<N>::clear_this(my_output_ports);\n            if(f & rf_reset_bodies) {\n                multifunction_body_type *tmp = my_init_body->clone();\n                delete my_body;\n                my_body = tmp;\n            }\n            __TBB_ASSERT(!(f & rf_clear_edges) || clear_element<N>::this_empty(my_output_ports), \"multifunction_node reset failed\");\n        }\n\n        multifunction_body_type *my_body;\n        multifunction_body_type *my_init_body;\n        output_ports_type my_output_ports;\n\n    };  // multifunction_input\n\n    // template to refer to an output port of a multifunction_node\n    template<size_t N, typename MOP>\n    typename tbb::flow::tuple_element<N, typename MOP::output_ports_type>::type &output_port(MOP &op) {\n        return tbb::flow::get<N>(op.output_ports());\n    }\n\n// helper structs for split_node\n    template<int N>\n    struct emit_element {\n        template<typename T, typename P>\n        static void emit_this(const T &t, P &p) {\n            (void)tbb::flow::get<N-1>(p).try_put(tbb::flow::get<N-1>(t));\n            emit_element<N-1>::emit_this(t,p);\n        }\n    };\n\n    template<>\n    struct emit_element<1> {\n        template<typename T, typename P>\n        static void emit_this(const T &t, P &p) {\n            (void)tbb::flow::get<0>(p).try_put(tbb::flow::get<0>(t));\n        }\n    };\n\n    //! Implements methods for an executable node that takes continue_msg as input\n    template< typename Output >\n    class continue_input : public continue_receiver {\n    public:\n\n        //! The input type of this receiver\n        typedef continue_msg input_type;\n\n        //! The output type of this receiver\n        typedef Output output_type;\n        typedef function_body<input_type, output_type> function_body_type;\n\n        template< typename Body >\n        continue_input( graph &g, Body& body )\n            : my_graph_ptr(&g),\n             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),\n             my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { }\n\n        template< typename Body >\n        continue_input( graph &g, int number_of_predecessors, Body& body )\n            : continue_receiver( number_of_predecessors ), my_graph_ptr(&g),\n             my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ),\n             my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) )\n        { }\n\n        continue_input( const continue_input& src ) : continue_receiver(src),\n            my_graph_ptr(src.my_graph_ptr),\n            my_body( src.my_init_body->clone() ),\n            my_init_body( src.my_init_body->clone() ) {}\n\n        ~continue_input() {\n            delete my_body;\n            delete my_init_body;\n        }\n\n        template< typename Body >\n        Body copy_function_object() {\n            function_body_type &body_ref = *my_body;\n            return dynamic_cast< internal::function_body_leaf<input_type, output_type, Body> & >(body_ref).get_body();\n        }\n\n        /*override*/void reset_receiver( reset_flags f) {\n            continue_receiver::reset_receiver(f);\n            if(f & rf_reset_bodies) {\n                function_body_type *tmp = my_init_body->clone();\n                delete my_body;\n                my_body = tmp;\n            }\n        }\n\n    protected:\n\n        graph* my_graph_ptr;\n        function_body_type *my_body;\n        function_body_type *my_init_body;\n\n        virtual broadcast_cache<output_type > &successors() = 0;\n\n        friend class apply_body_task_bypass< continue_input< Output >, continue_msg >;\n\n        //! Applies the body to the provided input\n        task *apply_body_bypass( input_type ) {\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n            // There is an extra copied needed to capture the\n            // body execution without the try_put\n            tbb::internal::fgt_begin_body( my_body );\n            output_type v = (*my_body)( continue_msg() );\n            tbb::internal::fgt_end_body( my_body );\n            return successors().try_put_task( v );\n#else\n            return successors().try_put_task( (*my_body)( continue_msg() ) );\n#endif\n        }\n\n        //! Spawns a task that applies the body\n        /* override */ task *execute( ) {\n            return (my_graph_ptr->is_active()) ?\n                new ( task::allocate_additional_child_of( *(my_graph_ptr->root_task()) ) )\n                    apply_body_task_bypass< continue_input< Output >, continue_msg >( *this, continue_msg() ) :\n                NULL;\n        }\n\n    };  // continue_input\n\n    //! Implements methods for both executable and function nodes that puts Output to its successors\n    template< typename Output >\n    class function_output : public sender<Output> {\n    public:\n\n        template<int N> friend struct clear_element;\n        typedef Output output_type;\n        typedef receiver<output_type> successor_type;\n        typedef broadcast_cache<output_type> broadcast_cache_type;\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        typedef typename sender<output_type>::built_successors_type built_successors_type;\n        typedef typename sender<output_type>::successor_list_type successor_list_type;\n#endif\n\n        function_output() { my_successors.set_owner(this); }\n        function_output(const function_output & /*other*/) : sender<output_type>() {\n            my_successors.set_owner(this);\n        }\n\n        //! Adds a new successor to this node\n        /* override */ bool register_successor( receiver<output_type> &r ) {\n            successors().register_successor( r );\n            return true;\n        }\n\n        //! Removes a successor from this node\n        /* override */ bool remove_successor( receiver<output_type> &r ) {\n            successors().remove_successor( r );\n            return true;\n        }\n\n#if TBB_PREVIEW_FLOW_GRAPH_FEATURES\n        built_successors_type &built_successors() { return successors().built_successors(); }\n\n\n        /*override*/ void internal_add_built_successor( receiver<output_type> &r) {\n            successors().internal_add_built_successor( r );\n        }\n\n        /*override*/ void internal_delete_built_successor( receiver<output_type> &r) {\n            successors().internal_delete_built_successor( r );\n        }\n\n        /*override*/ size_t successor_count() {\n            return successors().successor_count();\n        }\n\n        /*override*/ void  copy_successors( successor_list_type &v) {\n            successors().copy_successors(v);\n        }\n#endif  /* TBB_PREVIEW_FLOW_GRAPH_FEATURES */\n\n        // for multifunction_node.  The function_body that implements\n        // the node will have an input and an output tuple of ports.  To put\n        // an item to a successor, the body should\n        //\n        //    get<I>(output_ports).try_put(output_value);\n        //\n        // if task pointer is returned will always spawn and return true, else\n        // return value will be bool returned from successors.try_put.\n        task *try_put_task(const output_type &i) { return my_successors.try_put_task(i); }\n\n        broadcast_cache_type &successors() { return my_successors; }\n    protected:\n        broadcast_cache_type my_successors;\n\n    };  // function_output\n\n    template< typename Output >\n    class multifunction_output : public function_output<Output> {\n    public:\n        typedef Output output_type;\n        typedef function_output<output_type> base_type;\n        using base_type::my_successors;\n\n        multifunction_output() : base_type() {my_successors.set_owner(this);}\n        multifunction_output( const multifunction_output &/*other*/) : base_type() { my_successors.set_owner(this); }\n\n        bool try_put(const output_type &i) {\n            task *res = my_successors.try_put_task(i);\n            if(!res) return false;\n            if(res != SUCCESSFULLY_ENQUEUED) FLOW_SPAWN(*res);\n            return true;\n        }\n    };  // multifunction_output\n\n//composite_node\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE && __TBB_FLOW_GRAPH_CPP11_FEATURES\n    template<typename CompositeType>\n    void add_nodes_impl(CompositeType*, bool) {}\n\n    template< typename CompositeType, typename NodeType1, typename... NodeTypes >\n    void add_nodes_impl(CompositeType *c_node, bool visible, const NodeType1& n1, const NodeTypes&... n) {\n        void *addr = const_cast<NodeType1 *>(&n1);\n\n        if(visible)\n            tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, c_node, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_parent_of, addr, tbb::internal::FLOW_NODE );\n        else\n            tbb::internal::itt_relation_add( tbb::internal::ITT_DOMAIN_FLOW, addr, tbb::internal::FLOW_NODE, tbb::internal::__itt_relation_is_child_of, c_node, tbb::internal::FLOW_NODE );\n        add_nodes_impl(c_node, visible, n...);\n    }\n#endif\n\n}  // internal\n\n#endif // __TBB__flow_graph_node_impl_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_flow_graph_tagged_buffer_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n// a hash table buffer that can expand, and can support as many deletions as\n// additions, list-based, with elements of list held in array (for destruction\n// management), multiplicative hashing (like ets).  No synchronization built-in.\n//\n\n#ifndef __TBB__flow_graph_hash_buffer_impl_H\n#define __TBB__flow_graph_hash_buffer_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX::internal\n\n// elements in the table are a simple list; we need pointer to next element to\n// traverse the chain\ntemplate<typename ValueType>\nstruct buffer_element_type {\n    // the second parameter below is void * because we can't forward-declare the type\n    // itself, so we just reinterpret_cast below.\n    typedef typename aligned_pair<ValueType, void *>::type type;\n};\n\ntemplate\n    <\n     typename Key,         // type of key within ValueType\n     typename ValueType,\n     typename ValueToKey,  // abstract method that returns \"const Key\" or \"const Key&\" given ValueType\n     typename HashCompare, // has hash and equal\n     typename Allocator=tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >\n    >\nclass hash_buffer : public HashCompare {\npublic:\n    static const size_t INITIAL_SIZE = 8;  // initial size of the hash pointer table\n    typedef ValueType value_type;\n    typedef typename buffer_element_type< value_type >::type element_type;\n    typedef value_type *pointer_type;\n    typedef element_type *list_array_type;  // array we manage manually\n    typedef list_array_type *pointer_array_type;\n    typedef typename Allocator::template rebind<list_array_type>::other pointer_array_allocator_type;\n    typedef typename Allocator::template rebind<element_type>::other elements_array_allocator;\n    typedef typename tbb::internal::strip<Key>::type Knoref;\n\nprivate:\n    ValueToKey *my_key;\n    size_t my_size;\n    size_t nelements;\n    pointer_array_type pointer_array;    // pointer_array[my_size]\n    list_array_type elements_array;      // elements_array[my_size / 2]\n    element_type* free_list;\n\n    size_t mask() { return my_size - 1; }\n\n    void set_up_free_list( element_type **p_free_list, list_array_type la, size_t sz) {\n        for(size_t i=0; i < sz - 1; ++i ) {  // construct free list\n            la[i].second = &(la[i+1]);\n        }\n        la[sz-1].second = NULL;\n        *p_free_list = (element_type *)&(la[0]);\n    }\n\n    // cleanup for exceptions\n    struct DoCleanup {\n        pointer_array_type *my_pa;\n        list_array_type *my_elements;\n        size_t my_size;\n\n        DoCleanup(pointer_array_type &pa, list_array_type &my_els, size_t sz) :\n            my_pa(&pa), my_elements(&my_els), my_size(sz) {  }\n        ~DoCleanup() {\n            if(my_pa) {\n                size_t dont_care = 0;\n                internal_free_buffer(*my_pa, *my_elements, my_size, dont_care);\n            }\n        }\n    };\n\n    // exception-safety requires we do all the potentially-throwing operations first\n    void grow_array() {\n        size_t new_size = my_size*2;\n        size_t new_nelements = nelements;  // internal_free_buffer zeroes this\n        list_array_type new_elements_array = NULL;\n        pointer_array_type new_pointer_array = NULL;\n        list_array_type new_free_list = NULL;\n        {\n            DoCleanup my_cleanup(new_pointer_array, new_elements_array, new_size);\n            new_elements_array = elements_array_allocator().allocate(my_size);\n            new_pointer_array = pointer_array_allocator_type().allocate(new_size);\n            for(size_t i=0; i < new_size; ++i) new_pointer_array[i] = NULL;\n            set_up_free_list(&new_free_list, new_elements_array, my_size );\n\n            for(size_t i=0; i < my_size; ++i) {\n                for( element_type* op = pointer_array[i]; op; op = (element_type *)(op->second)) {\n                    value_type *ov = reinterpret_cast<value_type *>(&(op->first));\n                    // could have std::move semantics\n                    internal_insert_with_key(new_pointer_array, new_size, new_free_list, *ov);\n                }\n            }\n            my_cleanup.my_pa = NULL;\n            my_cleanup.my_elements = NULL;\n        }\n\n        internal_free_buffer(pointer_array, elements_array, my_size, nelements);\n        free_list = new_free_list;\n        pointer_array = new_pointer_array;\n        elements_array = new_elements_array;\n        my_size = new_size;\n        nelements = new_nelements;\n    }\n\n    // v should have perfect forwarding if std::move implemented.\n    // we use this method to move elements in grow_array, so can't use class fields\n    void internal_insert_with_key( element_type **p_pointer_array, size_t p_sz, list_array_type &p_free_list,\n            const value_type &v) {\n        size_t l_mask = p_sz-1;\n        __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n        size_t h = this->hash((*my_key)(v)) & l_mask;\n        __TBB_ASSERT(p_free_list, \"Error: free list not set up.\");\n        element_type* my_elem = p_free_list; p_free_list = (element_type *)(p_free_list->second);\n        (void) new(&(my_elem->first)) value_type(v);\n        my_elem->second = p_pointer_array[h];\n        p_pointer_array[h] = my_elem;\n    }\n\n    void internal_initialize_buffer() {\n        pointer_array = pointer_array_allocator_type().allocate(my_size);\n        for(size_t i = 0; i < my_size; ++i) pointer_array[i] = NULL;\n        elements_array = elements_array_allocator().allocate(my_size / 2);\n        set_up_free_list(&free_list, elements_array, my_size / 2);\n    }\n\n    // made static so an enclosed class can use to properly dispose of the internals\n    static void internal_free_buffer( pointer_array_type &pa, list_array_type &el, size_t &sz, size_t &ne ) {\n        if(pa) {\n            for(size_t i = 0; i < sz; ++i ) {\n                element_type *p_next;\n                for( element_type *p = pa[i]; p; p = p_next) {\n                    p_next = (element_type *)p->second;\n                    internal::punned_cast<value_type *>(&(p->first))->~value_type();\n                }\n            }\n            pointer_array_allocator_type().deallocate(pa, sz);\n            pa = NULL;\n        }\n        // Separate test (if allocation of pa throws, el may be allocated.\n        // but no elements will be constructed.)\n        if(el) {\n            elements_array_allocator().deallocate(el, sz / 2);\n            el = NULL;\n        }\n        sz = INITIAL_SIZE;\n        ne = 0;\n    }\n\npublic:\n    hash_buffer() : my_key(NULL), my_size(INITIAL_SIZE), nelements(0) {\n        internal_initialize_buffer();\n    }\n\n    ~hash_buffer() {\n        internal_free_buffer(pointer_array, elements_array, my_size, nelements);\n        if(my_key) delete my_key;\n    }\n\n    void reset() {\n        internal_free_buffer(pointer_array, elements_array, my_size, nelements);\n        internal_initialize_buffer();\n    }\n\n    // Take ownership of func object allocated with new.\n    // This method is only used internally, so can't be misused by user.\n    void set_key_func(ValueToKey *vtk) { my_key = vtk; }\n    // pointer is used to clone()\n    ValueToKey* get_key_func() { return my_key; }\n\n    bool insert_with_key(const value_type &v) {\n        pointer_type p = NULL;\n        __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n        if(find_ref_with_key((*my_key)(v), p)) {\n            p->~value_type();\n            (void) new(p) value_type(v);  // copy-construct into the space\n            return false;\n        }\n        ++nelements;\n        if(nelements*2 > my_size) grow_array();\n        internal_insert_with_key(pointer_array, my_size, free_list, v);\n        return true;\n    }\n\n    // returns true and sets v to array element if found, else returns false.\n    bool find_ref_with_key(const Knoref& k, pointer_type &v) {\n        size_t i = this->hash(k) & mask();\n        for(element_type* p = pointer_array[i]; p; p = (element_type *)(p->second)) {\n            pointer_type pv = reinterpret_cast<pointer_type>(&(p->first));\n            __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n            if(this->equal((*my_key)(*pv), k)) {\n                v = pv;\n                return true;\n            }\n        }\n        return false;\n    }\n\n    bool find_with_key( const Knoref& k, value_type &v) {\n        value_type *p;\n        if(find_ref_with_key(k, p)) {\n            v = *p;\n            return true;\n        }\n        else\n            return false;\n    }\n\n    void delete_with_key(const Knoref& k) {\n        size_t h = this->hash(k) & mask();\n        element_type* prev = NULL;\n        for(element_type* p = pointer_array[h]; p; prev = p, p = (element_type *)(p->second)) {\n            value_type *vp = reinterpret_cast<value_type *>(&(p->first));\n            __TBB_ASSERT(my_key, \"Error: value-to-key functor not provided\");\n            if(this->equal((*my_key)(*vp), k)) {\n                vp->~value_type();\n                if(prev) prev->second = p->second;\n                else pointer_array[h] = (element_type *)(p->second);\n                p->second = free_list;\n                free_list = p;\n                --nelements;\n                return;\n            }\n        }\n        __TBB_ASSERT(false, \"key not found for delete\");\n    }\n};\n#endif // __TBB__flow_graph_hash_buffer_impl_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_flow_graph_trace_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef _FGT_GRAPH_TRACE_IMPL_H\n#define _FGT_GRAPH_TRACE_IMPL_H\n\n#include \"../tbb_profiling.h\"\n\nnamespace tbb {\n    namespace internal {\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n\nstatic inline void fgt_internal_create_input_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_INPUT_PORT, node, FLOW_NODE, name_index );\n}\n\nstatic inline void fgt_internal_create_output_port( void *node, void *p, string_index name_index ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, p, FLOW_OUTPUT_PORT, node, FLOW_NODE, name_index );\n}\n\ntemplate<typename InputType>\nvoid register_input_port(void *node, tbb::flow::receiver<InputType>* port, string_index name_index) {\n    //TODO: Make fgt_internal_create_input_port a function template?\n    fgt_internal_create_input_port( node, port, name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_input_helper {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_input_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_INPUT_PORT_0 + N - 1) );\n        fgt_internal_input_helper<PortsTuple, N-1>::register_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_input_helper<PortsTuple, 1> {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_input_port( node, &(tbb::flow::get<0>(ports)), FLOW_INPUT_PORT_0 );\n    }\n};\n\ntemplate<typename OutputType>\nvoid register_output_port(void *node, tbb::flow::sender<OutputType>* port, string_index name_index) {\n    //TODO: Make fgt_internal_create_output_port a function template?\n    fgt_internal_create_output_port( node, static_cast<void *>(port), name_index);\n}\n\ntemplate < typename PortsTuple, int N >\nstruct fgt_internal_output_helper {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_output_port( node, &(tbb::flow::get<N-1>(ports)), static_cast<tbb::internal::string_index>(FLOW_OUTPUT_PORT_0 + N - 1) );\n        fgt_internal_output_helper<PortsTuple, N-1>::register_port( node, ports );\n    }\n};\n\ntemplate < typename PortsTuple >\nstruct fgt_internal_output_helper<PortsTuple,1> {\n    static void register_port( void *node, PortsTuple &ports ) {\n        register_output_port( node, &(tbb::flow::get<0>(ports)), FLOW_OUTPUT_PORT_0 );\n    }\n};\n\ntemplate< typename NodeType >\nvoid fgt_multioutput_node_desc( const NodeType *node, const char *desc ) {\n    void *addr =  (void *)( static_cast< tbb::flow::receiver< typename NodeType::input_type > * >(const_cast< NodeType *>(node)) );\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );\n}\n\ntemplate< typename NodeType >\nvoid fgt_multiinput_multioutput_node_desc( const NodeType *node, const char *desc ) {\n    void *addr =  const_cast<NodeType *>(node);\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );\n}\n\ntemplate< typename NodeType >\nstatic inline void fgt_node_desc( const NodeType *node, const char *desc ) {\n    void *addr =  (void *)( static_cast< tbb::flow::sender< typename NodeType::output_type > * >(const_cast< NodeType *>(node)) );\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, addr, FLOW_NODE, FLOW_OBJECT_NAME, desc );\n}\n\nstatic inline void fgt_graph_desc( void *g, const char *desc ) {\n    itt_metadata_str_add( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, FLOW_OBJECT_NAME, desc );\n}\n\nstatic inline void fgt_body( void *node, void *body ) {\n    itt_relation_add( ITT_DOMAIN_FLOW, body, FLOW_BODY, __itt_relation_is_child_of, node, FLOW_NODE );\n}\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node( string_index t, void *g, void *input_port, PortsTuple &ports ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 );\n    fgt_internal_output_helper<PortsTuple, N>::register_port( input_port, ports );\n}\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node_with_body( string_index t, void *g, void *input_port, PortsTuple &ports, void *body ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, input_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_input_port( input_port, input_port, FLOW_INPUT_PORT_0 );\n    fgt_internal_output_helper<PortsTuple, N>::register_port( input_port, ports );\n    fgt_body( input_port, body );\n}\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multiinput_node( string_index t, void *g, PortsTuple &ports, void *output_port) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );\n    fgt_internal_input_helper<PortsTuple, N>::register_port( output_port, ports );\n}\n\nstatic inline void fgt_node( string_index t, void *g, void *output_port ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );\n}\n\nstatic inline void fgt_node_with_body( string_index t, void *g, void *output_port, void *body ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, output_port, FLOW_NODE, g, FLOW_GRAPH, t );\n    fgt_internal_create_output_port( output_port, output_port, FLOW_OUTPUT_PORT_0 );\n    fgt_body( output_port, body );\n}\n\n\nstatic inline void fgt_node( string_index t, void *g, void *input_port, void *output_port ) {\n    fgt_node( t, g, output_port );\n    fgt_internal_create_input_port( output_port, input_port, FLOW_INPUT_PORT_0 );\n}\n\nstatic inline void fgt_node_with_body( string_index t, void *g, void *input_port, void *output_port, void *body ) {\n    fgt_node_with_body( t, g, output_port, body );\n    fgt_internal_create_input_port( output_port, input_port, FLOW_INPUT_PORT_0 );\n}\n\n\nstatic inline void  fgt_node( string_index t, void *g, void *input_port, void *decrement_port, void *output_port ) {\n    fgt_node( t, g, input_port, output_port );\n    fgt_internal_create_input_port( output_port, decrement_port, FLOW_INPUT_PORT_1 );\n}\n\nstatic inline void fgt_make_edge( void *output_port, void *input_port ) {\n    itt_relation_add( ITT_DOMAIN_FLOW, output_port, FLOW_OUTPUT_PORT, __itt_relation_is_predecessor_to, input_port, FLOW_INPUT_PORT);\n}\n\nstatic inline void fgt_remove_edge( void *output_port, void *input_port ) {\n    itt_relation_add( ITT_DOMAIN_FLOW, output_port, FLOW_OUTPUT_PORT, __itt_relation_is_sibling_of, input_port, FLOW_INPUT_PORT);\n}\n\nstatic inline void fgt_graph( void *g ) {\n    itt_make_task_group( ITT_DOMAIN_FLOW, g, FLOW_GRAPH, NULL, FLOW_NULL, FLOW_GRAPH );\n}\n\nstatic inline void fgt_begin_body( void *body ) {\n    itt_task_begin( ITT_DOMAIN_FLOW, body, FLOW_BODY, NULL, FLOW_NULL, FLOW_BODY );\n}\n\nstatic inline void fgt_end_body( void * ) {\n    itt_task_end( ITT_DOMAIN_FLOW );\n}\n\nstatic inline void fgt_async_try_put_begin( void *node, void *port ) {\n    itt_task_begin( ITT_DOMAIN_FLOW, port, FLOW_OUTPUT_PORT, node, FLOW_NODE, FLOW_OUTPUT_PORT );\n}\n\nstatic inline void fgt_async_try_put_end( void *, void * ) {\n    itt_task_end( ITT_DOMAIN_FLOW );\n}\n\nstatic inline void fgt_async_reserve( void *node, void *graph ) {\n    itt_region_begin( ITT_DOMAIN_FLOW, node, FLOW_NODE, graph, FLOW_GRAPH, FLOW_NULL );\n}\n\nstatic inline void fgt_async_commit( void *node, void *graph ) {\n    itt_region_end( ITT_DOMAIN_FLOW, node, FLOW_NODE );\n}\n\n#else // TBB_PREVIEW_FLOW_GRAPH_TRACE\n\nstatic inline void fgt_graph( void * /*g*/ ) { }\n\ntemplate< typename NodeType >\nstatic inline void fgt_multioutput_node_desc( const NodeType * /*node*/, const char * /*desc*/ ) { }\n\ntemplate< typename NodeType >\nstatic inline void fgt_node_desc( const NodeType * /*node*/, const char * /*desc*/ ) { }\n\nstatic inline void fgt_graph_desc( void * /*g*/, const char * /*desc*/ ) { }\n\nstatic inline void fgt_body( void * /*node*/, void * /*body*/ ) { }\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, PortsTuple & /*ports*/ ) { }\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multioutput_node_with_body( string_index /*t*/, void * /*g*/, void * /*input_port*/, PortsTuple & /*ports*/, void * /*body*/ ) { }\n\ntemplate< int N, typename PortsTuple >\nstatic inline void fgt_multiinput_node( string_index /*t*/, void * /*g*/, PortsTuple & /*ports*/, void * /*output_port*/ ) { }\n\nstatic inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*output_port*/ ) { }\nstatic inline void fgt_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*output_port*/ ) { }\nstatic inline void  fgt_node( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*decrement_port*/, void * /*output_port*/ ) { }\n\nstatic inline void fgt_node_with_body( string_index /*t*/, void * /*g*/, void * /*output_port*/, void * /*body*/ ) { }\nstatic inline void fgt_node_with_body( string_index /*t*/, void * /*g*/, void * /*input_port*/, void * /*output_port*/, void * /*body*/ ) { }\n\nstatic inline void fgt_make_edge( void * /*output_port*/, void * /*input_port*/ ) { }\nstatic inline void fgt_remove_edge( void * /*output_port*/, void * /*input_port*/ ) { }\n\nstatic inline void fgt_begin_body( void * /*body*/ ) { }\nstatic inline void fgt_end_body( void *  /*body*/) { }\nstatic inline void fgt_async_try_put_begin( void * /*node*/, void * /*port*/ ) { }\nstatic inline void fgt_async_try_put_end( void * /*node*/ , void * /*port*/ ) { }\nstatic inline void fgt_async_reserve( void * /*node*/, void * /*graph*/ ) { }\nstatic inline void fgt_async_commit( void * /*node*/, void * /*graph*/ ) { }\n\n#endif // TBB_PREVIEW_FLOW_GRAPH_TRACE\n\n    } // namespace internal\n} // namespace tbb\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_flow_graph_types_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__flow_graph_types_impl_H\n#define __TBB__flow_graph_types_impl_H\n\n#ifndef __TBB_flow_graph_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n// included in namespace tbb::flow::interfaceX\n\nnamespace internal {\n\n    // the change to key_matching (adding a K and KHash template parameter, making it a class)\n    // means we have to pass this data to the key_matching_port.  All the ports have only one\n    // template parameter, so we have to wrap the following types in a trait:\n    //\n    //    . K == key_type\n    //    . KHash == hash and compare for Key\n    //    . TtoK == function_body that given an object of T, returns its K\n    //    . T == type accepted by port, and stored in the hash table\n    //\n    // The port will have an additional parameter on node construction, which is a function_body\n    // that accepts a const T& and returns a K which is the field in T which is its K.\n    template<typename Kp, typename KHashp, typename Tp>\n    struct KeyTrait {\n        typedef Kp K;\n        typedef Tp T;\n        typedef internal::type_to_key_function_body<T,K> TtoK;\n        typedef KHashp KHash;\n    };\n\n// wrap each element of a tuple in a template, and make a tuple of the result.\n    template<int N, template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements;\n\n    // A wrapper that generates the traits needed for each port of a key-matching join,\n    // and the type of the tuple of input ports.\n    template<int N, template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements;\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<1, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<1, PT, KeyTraits, TypeTuple > {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<2, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<2, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<3, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<3, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<4, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<4, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,\n                PT<KeyTrait3> > type;\n    };\n\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<5, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<5, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>,\n                PT<KeyTrait3>, PT<KeyTrait4> > type;\n    };\n\n#if __TBB_VARIADIC_MAX >= 6\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<6, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<6, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 7\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<7, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<7, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 8\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<8, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<7,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<8, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 9\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<9, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<7,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<8,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<9, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<8,TypeTuple>::type> KeyTrait8;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8> > type;\n    };\n#endif\n\n#if __TBB_VARIADIC_MAX >= 10\n    template<template<class> class PT, typename TypeTuple>\n    struct wrap_tuple_elements<10, PT, TypeTuple> {\n        typedef typename tbb::flow::tuple<\n                PT<typename tbb::flow::tuple_element<0,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<1,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<2,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<3,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<4,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<5,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<6,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<7,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<8,TypeTuple>::type>,\n                PT<typename tbb::flow::tuple_element<9,TypeTuple>::type> >\n            type;\n    };\n\n    template<template<class> class PT, typename KeyTraits, typename TypeTuple>\n    struct wrap_key_tuple_elements<10, PT, KeyTraits, TypeTuple> {\n        typedef typename KeyTraits::key_type K;\n        typedef typename KeyTraits::hash_compare_type KHash;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<0,TypeTuple>::type> KeyTrait0;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<1,TypeTuple>::type> KeyTrait1;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<2,TypeTuple>::type> KeyTrait2;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<3,TypeTuple>::type> KeyTrait3;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<4,TypeTuple>::type> KeyTrait4;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<5,TypeTuple>::type> KeyTrait5;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<6,TypeTuple>::type> KeyTrait6;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<7,TypeTuple>::type> KeyTrait7;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<8,TypeTuple>::type> KeyTrait8;\n        typedef KeyTrait<K, KHash, typename tbb::flow::tuple_element<9,TypeTuple>::type> KeyTrait9;\n        typedef typename tbb::flow::tuple< PT<KeyTrait0>, PT<KeyTrait1>, PT<KeyTrait2>, PT<KeyTrait3>,\n                PT<KeyTrait4>, PT<KeyTrait5>, PT<KeyTrait6>, PT<KeyTrait7>, PT<KeyTrait8>,\n                PT<KeyTrait9> > type;\n    };\n#endif\n\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n    template< int... S > class sequence {};\n\n    template< int N, int... S >\n    struct make_sequence : make_sequence < N - 1, N - 1, S... > {};\n\n    template< int... S >\n    struct make_sequence < 0, S... > {\n        typedef sequence<S...> type;\n    };\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n\n#if __TBB_INITIALIZER_LISTS_PRESENT\n    // Until C++14 std::initializer_list does not guarantee life time of contained objects.\n    template <typename T>\n    class initializer_list_wrapper {\n    public:\n        typedef T value_type;\n        typedef const T& reference;\n        typedef const T& const_reference;\n        typedef size_t size_type;\n\n        typedef T* iterator;\n        typedef const T* const_iterator;\n\n        initializer_list_wrapper( std::initializer_list<T> il ) __TBB_NOEXCEPT( true ) : my_begin( static_cast<T*>(malloc( il.size()*sizeof( T ) )) ) {\n            iterator dst = my_begin;\n            for ( typename std::initializer_list<T>::const_iterator src = il.begin(); src != il.end(); ++src )\n                new (dst++) T( *src );\n            my_end = dst;\n        }\n\n        initializer_list_wrapper( const initializer_list_wrapper<T>& ilw ) __TBB_NOEXCEPT( true ) : my_begin( static_cast<T*>(malloc( ilw.size()*sizeof( T ) )) ) {\n            iterator dst = my_begin;\n            for ( typename std::initializer_list<T>::const_iterator src = ilw.begin(); src != ilw.end(); ++src )\n                new (dst++) T( *src );\n            my_end = dst;\n        }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        initializer_list_wrapper( initializer_list_wrapper<T>&& ilw ) __TBB_NOEXCEPT( true ) : my_begin( ilw.my_begin ), my_end( ilw.my_end ) {\n            ilw.my_begin = ilw.my_end = NULL;\n        }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n        ~initializer_list_wrapper() {\n            if ( my_begin )\n                free( my_begin );\n        }\n\n        const_iterator begin() const __TBB_NOEXCEPT(true) { return my_begin; }\n        const_iterator end() const __TBB_NOEXCEPT(true) { return my_end; }\n        size_t size() const __TBB_NOEXCEPT(true) { return (size_t)(my_end - my_begin); }\n\n    private:\n        iterator my_begin;\n        iterator my_end;\n    };\n#endif /* __TBB_INITIALIZER_LISTS_PRESENT */\n\n//! type mimicking std::pair but with trailing fill to ensure each element of an array\n//* will have the correct alignment\n    template<typename T1, typename T2, size_t REM>\n    struct type_plus_align {\n        char first[sizeof(T1)];\n        T2 second;\n        char fill1[REM];\n    };\n\n    template<typename T1, typename T2>\n    struct type_plus_align<T1,T2,0> {\n        char first[sizeof(T1)];\n        T2 second;\n    };\n\n    template<class U> struct alignment_of {\n        typedef struct { char t; U    padded; } test_alignment;\n        static const size_t value = sizeof(test_alignment) - sizeof(U);\n    };\n\n    // T1, T2 are actual types stored.  The space defined for T1 in the type returned\n    // is a char array of the correct size.  Type T2 should be trivially-constructible,\n    // T1 must be explicitly managed.\n    template<typename T1, typename T2>\n    struct aligned_pair {\n        static const size_t t1_align = alignment_of<T1>::value;\n        static const size_t t2_align = alignment_of<T2>::value;\n        typedef type_plus_align<T1, T2, 0 > just_pair;\n        static const size_t max_align = t1_align < t2_align ? t2_align : t1_align;\n        static const size_t extra_bytes = sizeof(just_pair) % max_align;\n        static const size_t remainder = extra_bytes ? max_align - extra_bytes : 0;\n    public:\n        typedef type_plus_align<T1,T2,remainder> type;\n    };  // aligned_pair\n\n// support for variant type\n// type we use when we're not storing a value\nstruct default_constructed { };\n\n// type which contains another type, tests for what type is contained, and references to it.\n// internal::Wrapper<T>\n//     void CopyTo( void *newSpace) : builds a Wrapper<T> copy of itself in newSpace\n\n// struct to allow us to copy and test the type of objects\nstruct WrapperBase {\n    virtual ~WrapperBase() {}\n    virtual void CopyTo(void* /*newSpace*/) const {  }\n};\n\n// Wrapper<T> contains a T, with the ability to test what T is.  The Wrapper<T> can be\n// constructed from a T, can be copy-constructed from another Wrapper<T>, and can be\n// examined via value(), but not modified.\ntemplate<typename T>\nstruct Wrapper: public WrapperBase {\n    typedef T value_type;\n    typedef T* pointer_type;\nprivate:\n    T value_space;\npublic:\n    const value_type &value() const { return value_space; }\n\nprivate:\n    Wrapper();\n\n    // on exception will ensure the Wrapper will contain only a trivially-constructed object\n    struct _unwind_space {\n        pointer_type space;\n        _unwind_space(pointer_type p) : space(p) {}\n        ~_unwind_space() {\n            if(space) (void) new (space) Wrapper<default_constructed>(default_constructed());\n        }\n    };\npublic:\n    explicit Wrapper( const T& other ) : value_space(other) { }\n    explicit Wrapper(const Wrapper& other) : value_space(other.value_space) { }\n\n    /*override*/void CopyTo(void* newSpace) const {\n        _unwind_space guard((pointer_type)newSpace);\n        (void) new(newSpace) Wrapper(value_space);\n        guard.space = NULL;\n    }\n    /*override*/~Wrapper() { }\n};\n\n// specialization for array objects\ntemplate<typename T, size_t N>\nstruct Wrapper<T[N]> : public WrapperBase {\n    typedef T value_type;\n    typedef T* pointer_type;\n    // space must be untyped.\n    typedef T ArrayType[N];\nprivate:\n    // The space is not of type T[N] because when copy-constructing, it would be\n    // default-initialized and then copied to in some fashion, resulting in two\n    // constructions and one destruction per element.  If the type is char[ ], we\n    // placement new into each element, resulting in one construction per element.\n    static const size_t space_size = sizeof(ArrayType) / sizeof(char);\n    char value_space[space_size];\n\n\n    // on exception will ensure the already-built objects will be destructed\n    // (the value_space is a char array, so it is already trivially-destructible.)\n    struct _unwind_class {\n        pointer_type space;\n        int    already_built;\n        _unwind_class(pointer_type p) : space(p), already_built(0) {}\n        ~_unwind_class() {\n            if(space) {\n                for(size_t i = already_built; i > 0 ; --i ) space[i-1].~value_type();\n                (void) new(space) Wrapper<default_constructed>(default_constructed());\n            }\n        }\n    };\npublic:\n    const ArrayType &value() const {\n        char *vp = const_cast<char *>(value_space);\n        return reinterpret_cast<ArrayType &>(*vp);\n    }\n\nprivate:\n    Wrapper();\npublic:\n    // have to explicitly construct because other decays to a const value_type*\n    explicit Wrapper(const ArrayType& other) {\n        _unwind_class guard((pointer_type)value_space);\n        pointer_type vp = reinterpret_cast<pointer_type>(&value_space);\n        for(size_t i = 0; i < N; ++i ) {\n            (void) new(vp++) value_type(other[i]);\n            ++(guard.already_built);\n        }\n        guard.space = NULL;\n    }\n    explicit Wrapper(const Wrapper& other) : WrapperBase() {\n        // we have to do the heavy lifting to copy contents\n        _unwind_class guard((pointer_type)value_space);\n        pointer_type dp = reinterpret_cast<pointer_type>(value_space);\n        pointer_type sp = reinterpret_cast<pointer_type>(const_cast<char *>(other.value_space));\n        for(size_t i = 0; i < N; ++i, ++dp, ++sp) {\n            (void) new(dp) value_type(*sp);\n            ++(guard.already_built);\n        }\n        guard.space = NULL;\n    }\n\n    /*override*/void CopyTo(void* newSpace) const {\n        (void) new(newSpace) Wrapper(*this);  // exceptions handled in copy constructor\n    }\n\n    /*override*/~Wrapper() {\n        // have to destroy explicitly in reverse order\n        pointer_type vp = reinterpret_cast<pointer_type>(&value_space);\n        for(size_t i = N; i > 0 ; --i ) vp[i-1].~value_type();\n    }\n};\n\n// given a tuple, return the type of the element that has the maximum alignment requirement.\n// Given a tuple and that type, return the number of elements of the object with the max\n// alignment requirement that is at least as big as the largest object in the tuple.\n\ntemplate<bool, class T1, class T2> struct pick_one;\ntemplate<class T1, class T2> struct pick_one<true , T1, T2> { typedef T1 type; };\ntemplate<class T1, class T2> struct pick_one<false, T1, T2> { typedef T2 type; };\n\ntemplate< template<class> class Selector, typename T1, typename T2 >\nstruct pick_max {\n    typedef typename pick_one< (Selector<T1>::value > Selector<T2>::value), T1, T2 >::type type;\n};\n\ntemplate<typename T> struct size_of { static const int value = sizeof(T); };\n\ntemplate< size_t N, class Tuple, template<class> class Selector > struct pick_tuple_max {\n    typedef typename pick_tuple_max<N-1, Tuple, Selector>::type LeftMaxType;\n    typedef typename tbb::flow::tuple_element<N-1, Tuple>::type ThisType;\n    typedef typename pick_max<Selector, LeftMaxType, ThisType>::type type;\n};\n\ntemplate< class Tuple, template<class> class Selector > struct pick_tuple_max<0, Tuple, Selector> {\n    typedef typename tbb::flow::tuple_element<0, Tuple>::type type;\n};\n\n// is the specified type included in a tuple?\ntemplate<class Q, size_t N, class Tuple>\nstruct is_element_of {\n    typedef typename tbb::flow::tuple_element<N-1, Tuple>::type T_i;\n    static const bool value = tbb::internal::is_same_type<Q,T_i>::value || is_element_of<Q,N-1,Tuple>::value;\n};\n\ntemplate<class Q, class Tuple>\nstruct is_element_of<Q,0,Tuple> {\n    typedef typename tbb::flow::tuple_element<0, Tuple>::type T_i;\n    static const bool value = tbb::internal::is_same_type<Q,T_i>::value;\n};\n\n// allow the construction of types that are listed tuple.  If a disallowed type\n// construction is written, a method involving this type is created.  The\n// type has no definition, so a syntax error is generated.\ntemplate<typename T> struct ERROR_Type_Not_allowed_In_Tagged_Msg_Not_Member_Of_Tuple;\n\ntemplate<typename T, bool BUILD_IT> struct do_if;\ntemplate<typename T>\nstruct do_if<T, true> {\n    static void construct(void *mySpace, const T& x) {\n        (void) new(mySpace) Wrapper<T>(x);\n    }\n};\ntemplate<typename T>\nstruct do_if<T, false> {\n    static void construct(void * /*mySpace*/, const T& x) {\n        // This method is instantiated when the type T does not match any of the\n        // element types in the Tuple in variant<Tuple>.\n        ERROR_Type_Not_allowed_In_Tagged_Msg_Not_Member_Of_Tuple<T>::bad_type(x);\n    }\n};\n\n// Tuple tells us the allowed types that variant can hold.  It determines the alignment of the space in\n// Wrapper, and how big Wrapper is.\n//\n// the object can only be tested for type, and a read-only reference can be fetched by cast_to<T>().\n\nusing tbb::internal::punned_cast;\nstruct tagged_null_type {};\ntemplate<typename TagType, typename T0, typename T1=tagged_null_type, typename T2=tagged_null_type, typename T3=tagged_null_type,\n                           typename T4=tagged_null_type, typename T5=tagged_null_type, typename T6=tagged_null_type,\n                           typename T7=tagged_null_type, typename T8=tagged_null_type, typename T9=tagged_null_type>\nclass tagged_msg {\n    typedef tbb::flow::tuple<T0, T1, T2, T3, T4\n                  //TODO: Should we reject lists longer than a tuple can hold?\n                  #if __TBB_VARIADIC_MAX >= 6\n                  , T5\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 7\n                  , T6\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 8\n                  , T7\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 9\n                  , T8\n                  #endif\n                  #if __TBB_VARIADIC_MAX >= 10\n                  , T9\n                  #endif\n                  > Tuple;\n\nprivate:\n    class variant {\n        static const size_t N = tbb::flow::tuple_size<Tuple>::value;\n        typedef typename pick_tuple_max<N, Tuple, alignment_of>::type AlignType;\n        typedef typename pick_tuple_max<N, Tuple, size_of>::type MaxSizeType;\n        static const size_t MaxNBytes = (sizeof(Wrapper<MaxSizeType>)+sizeof(AlignType)-1);\n        static const size_t MaxNElements = MaxNBytes/sizeof(AlignType);\n        typedef typename tbb::aligned_space<AlignType, MaxNElements> SpaceType;\n        SpaceType my_space;\n        static const size_t MaxSize = sizeof(SpaceType);\n\n    public:\n        variant() { (void) new(&my_space) Wrapper<default_constructed>(default_constructed()); }\n\n        template<typename T>\n        variant( const T& x ) {\n            do_if<T, is_element_of<T, N, Tuple>::value>::construct(&my_space,x);\n        }\n\n        variant(const variant& other) {\n            const WrapperBase * h = punned_cast<const WrapperBase *>(&(other.my_space));\n            h->CopyTo(&my_space);\n        }\n\n        // assignment must destroy and re-create the Wrapper type, as there is no way\n        // to create a Wrapper-to-Wrapper assign even if we find they agree in type.\n        void operator=( const variant& rhs ) {\n            if(&rhs != this) {\n                WrapperBase *h = punned_cast<WrapperBase *>(&my_space);\n                h->~WrapperBase();\n                const WrapperBase *ch = punned_cast<const WrapperBase *>(&(rhs.my_space));\n                ch->CopyTo(&my_space);\n            }\n        }\n\n        template<typename U>\n        const U& variant_cast_to() const {\n            const Wrapper<U> *h = dynamic_cast<const Wrapper<U>*>(punned_cast<const WrapperBase *>(&my_space));\n            if(!h) {\n                tbb::internal::throw_exception(tbb::internal::eid_bad_tagged_msg_cast);\n            }\n            return h->value();\n        }\n        template<typename U>\n        bool variant_is_a() const { return dynamic_cast<const Wrapper<U>*>(punned_cast<const WrapperBase *>(&my_space)) != NULL; }\n\n        bool variant_is_default_constructed() const {return variant_is_a<default_constructed>();}\n\n        ~variant() {\n            WrapperBase *h = punned_cast<WrapperBase *>(&my_space);\n            h->~WrapperBase();\n        }\n    }; //class variant\n\n    TagType my_tag;\n    variant my_msg;\n\npublic:\n    tagged_msg(): my_tag(TagType(~0)), my_msg(){}\n\n    template<typename T, typename R>\n    tagged_msg(T const &index, R const &value) : my_tag(index), my_msg(value) {}\n\n    #if __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN\n    template<typename T, typename R, size_t N>\n    tagged_msg(T const &index,  R (&value)[N]) : my_tag(index), my_msg(value) {}\n    #endif\n\n    void set_tag(TagType const &index) {my_tag = index;}\n    TagType tag() const {return my_tag;}\n\n    template<typename V>\n    const V& cast_to() const {return my_msg.template variant_cast_to<V>();}\n\n    template<typename V>\n    bool is_a() const {return my_msg.template variant_is_a<V>();}\n\n    bool is_default_constructed() const {return my_msg.variant_is_default_constructed();}\n}; //class tagged_msg\n\n// template to simplify cast and test for tagged_msg in template contexts\ntemplate<typename V, typename T>\nconst V& cast_to(T const &t) { return t.template cast_to<V>(); }\n\ntemplate<typename V, typename T>\nbool is_a(T const &t) { return t.template is_a<V>(); }\n\n}  // namespace internal\n\n#endif  /* __TBB__flow_graph_types_impl_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_mutex_padding.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_mutex_padding_H\n#define __TBB_mutex_padding_H\n\n// wrapper for padding mutexes to be alone on a cache line, without requiring they be allocated\n// from a pool.  Because we allow them to be defined anywhere they must be two cache lines in size.\n\n\nnamespace tbb {\nnamespace interface7 {\nnamespace internal {\n\nstatic const size_t cache_line_size = 64;\n\n// Pad a mutex to occupy a number of full cache lines sufficient to avoid false sharing\n// with other data; space overhead is up to 2*cache_line_size-1.\ntemplate<typename Mutex, bool is_rw> class padded_mutex;\n\ntemplate<typename Mutex>\nclass padded_mutex<Mutex,false> : tbb::internal::mutex_copy_deprecated_and_disabled {\n    typedef long pad_type;\n    pad_type my_pad[((sizeof(Mutex)+cache_line_size-1)/cache_line_size+1)*cache_line_size/sizeof(pad_type)];\n\n    Mutex *impl() { return (Mutex *)((uintptr_t(this)|(cache_line_size-1))+1);}\n\npublic:\n    static const bool is_rw_mutex = Mutex::is_rw_mutex;\n    static const bool is_recursive_mutex = Mutex::is_recursive_mutex;\n    static const bool is_fair_mutex = Mutex::is_fair_mutex;\n\n    padded_mutex() { new(impl()) Mutex(); }\n    ~padded_mutex() { impl()->~Mutex(); }\n\n    //! Represents acquisition of a mutex.\n    class scoped_lock :  tbb::internal::no_copy {\n        typename Mutex::scoped_lock my_scoped_lock;\n    public:\n        scoped_lock() : my_scoped_lock() {}\n        scoped_lock( padded_mutex& m ) : my_scoped_lock(*m.impl()) { }\n        ~scoped_lock() {  }\n\n        void acquire( padded_mutex& m ) { my_scoped_lock.acquire(*m.impl()); }\n        bool try_acquire( padded_mutex& m ) { return my_scoped_lock.try_acquire(*m.impl()); }\n        void release() { my_scoped_lock.release(); }\n    };\n};\n\ntemplate<typename Mutex>\nclass padded_mutex<Mutex,true> : tbb::internal::mutex_copy_deprecated_and_disabled {\n    typedef long pad_type;\n    pad_type my_pad[((sizeof(Mutex)+cache_line_size-1)/cache_line_size+1)*cache_line_size/sizeof(pad_type)];\n\n    Mutex *impl() { return (Mutex *)((uintptr_t(this)|(cache_line_size-1))+1);}\n\npublic:\n    static const bool is_rw_mutex = Mutex::is_rw_mutex;\n    static const bool is_recursive_mutex = Mutex::is_recursive_mutex;\n    static const bool is_fair_mutex = Mutex::is_fair_mutex;\n\n    padded_mutex() { new(impl()) Mutex(); }\n    ~padded_mutex() { impl()->~Mutex(); }\n\n    //! Represents acquisition of a mutex.\n    class scoped_lock :  tbb::internal::no_copy {\n        typename Mutex::scoped_lock my_scoped_lock;\n    public:\n        scoped_lock() : my_scoped_lock() {}\n        scoped_lock( padded_mutex& m, bool write = true ) : my_scoped_lock(*m.impl(),write) { }\n        ~scoped_lock() {  }\n\n        void acquire( padded_mutex& m, bool write = true ) { my_scoped_lock.acquire(*m.impl(),write); }\n        bool try_acquire( padded_mutex& m, bool write = true ) { return my_scoped_lock.try_acquire(*m.impl(),write); }\n        bool upgrade_to_writer() { return my_scoped_lock.upgrade_to_writer(); }\n        bool downgrade_to_reader() { return my_scoped_lock.downgrade_to_reader(); }\n        void release() { my_scoped_lock.release(); }\n    };\n};\n\n} // namespace internal\n} // namespace interface7\n} // namespace tbb\n\n#endif /* __TBB_mutex_padding_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_range_iterator.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_range_iterator_H\n#define __TBB_range_iterator_H\n\n#include \"../tbb_stddef.h\"\n\n#if __TBB_CPP11_STD_BEGIN_END_PRESENT && __TBB_CPP11_AUTO_PRESENT && __TBB_CPP11_DECLTYPE_PRESENT\n    #include <iterator>\n#endif\n\nnamespace tbb {\n    // iterators to first and last elements of container\n    namespace internal {\n\n#if __TBB_CPP11_STD_BEGIN_END_PRESENT && __TBB_CPP11_AUTO_PRESENT && __TBB_CPP11_DECLTYPE_PRESENT\n        using std::begin;\n        using std::end;\n        template<typename Container>\n        auto first(Container& c)-> decltype(begin(c))  {return begin(c);}\n\n        template<typename Container>\n        auto first(const Container& c)-> decltype(begin(c))  {return begin(c);}\n\n        template<typename Container>\n        auto last(Container& c)-> decltype(begin(c))  {return end(c);}\n\n        template<typename Container>\n        auto last(const Container& c)-> decltype(begin(c)) {return end(c);}\n#else\n        template<typename Container>\n        typename Container::iterator first(Container& c) {return c.begin();}\n\n        template<typename Container>\n        typename Container::const_iterator first(const Container& c) {return c.begin();}\n\n        template<typename Container>\n        typename Container::iterator last(Container& c) {return c.end();}\n\n        template<typename Container>\n        typename Container::const_iterator last(const Container& c) {return c.end();}\n#endif\n\n        template<typename T, size_t size>\n        T* first(T (&arr) [size]) {return arr;}\n\n        template<typename T, size_t size>\n        T* last(T (&arr) [size]) {return arr + size;}\n    } //namespace internal\n}  //namespace tbb\n\n#endif // __TBB_range_iterator_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_tbb_hash_compare_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n// must be included outside namespaces.\n#ifndef __TBB_tbb_hash_compare_impl_H\n#define __TBB_tbb_hash_compare_impl_H\n\n#include <string>\n\nnamespace tbb {\nnamespace interface5 {\nnamespace internal {\n\n// Template class for hash compare\ntemplate<typename Key, typename Hasher, typename Key_equality>\nclass hash_compare\n{\npublic:\n    typedef Hasher hasher;\n    typedef Key_equality key_equal;\n\n    hash_compare() {}\n\n    hash_compare(Hasher a_hasher) : my_hash_object(a_hasher) {}\n\n    hash_compare(Hasher a_hasher, Key_equality a_keyeq) : my_hash_object(a_hasher), my_key_compare_object(a_keyeq) {}\n\n    size_t operator()(const Key& key) const {\n        return ((size_t)my_hash_object(key));\n    }\n\n    bool operator()(const Key& key1, const Key& key2) const {\n        return (!my_key_compare_object(key1, key2));\n    }\n\n    Hasher       my_hash_object;        // The hash object\n    Key_equality my_key_compare_object; // The equality comparator object\n};\n\n//! Hash multiplier\nstatic const size_t hash_multiplier = tbb::internal::select_size_t_constant<2654435769U, 11400714819323198485ULL>::value;\n\n} // namespace internal\n\n//! Hasher functions\ntemplate<typename T>\ninline size_t tbb_hasher( const T& t ) {\n    return static_cast<size_t>( t ) * internal::hash_multiplier;\n}\ntemplate<typename P>\ninline size_t tbb_hasher( P* ptr ) {\n    size_t const h = reinterpret_cast<size_t>( ptr );\n    return (h >> 3) ^ h;\n}\ntemplate<typename E, typename S, typename A>\ninline size_t tbb_hasher( const std::basic_string<E,S,A>& s ) {\n    size_t h = 0;\n    for( const E* c = s.c_str(); *c; ++c )\n        h = static_cast<size_t>(*c) ^ (h * internal::hash_multiplier);\n    return h;\n}\ntemplate<typename F, typename S>\ninline size_t tbb_hasher( const std::pair<F,S>& p ) {\n    return tbb_hasher(p.first) ^ tbb_hasher(p.second);\n}\n\n} // namespace interface5\nusing interface5::tbb_hasher;\n\n// Template class for hash compare\ntemplate<typename Key>\nclass tbb_hash\n{\npublic:\n    tbb_hash() {}\n\n    size_t operator()(const Key& key) const\n    {\n        return tbb_hasher(key);\n    }\n};\n\n//! hash_compare that is default argument for concurrent_hash_map\ntemplate<typename Key>\nstruct tbb_hash_compare {\n    static size_t hash( const Key& a ) { return tbb_hasher(a); }\n    static bool equal( const Key& a, const Key& b ) { return a == b; }\n};\n\n}  // namespace tbb\n#endif  /*  __TBB_tbb_hash_compare_impl_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_tbb_strings.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\nTBB_STRING_RESOURCE(FLOW_BROADCAST_NODE, \"broadcast_node\")\nTBB_STRING_RESOURCE(FLOW_BUFFER_NODE, \"buffer_node\")\nTBB_STRING_RESOURCE(FLOW_CONTINUE_NODE, \"continue_node\")\nTBB_STRING_RESOURCE(FLOW_FUNCTION_NODE, \"function_node\")\nTBB_STRING_RESOURCE(FLOW_JOIN_NODE_QUEUEING, \"join_node (queueing)\")\nTBB_STRING_RESOURCE(FLOW_JOIN_NODE_RESERVING, \"join_node (reserving)\")\nTBB_STRING_RESOURCE(FLOW_JOIN_NODE_TAG_MATCHING, \"join_node (tag_matching)\")\nTBB_STRING_RESOURCE(FLOW_LIMITER_NODE, \"limiter_node\")\nTBB_STRING_RESOURCE(FLOW_MULTIFUNCTION_NODE, \"multifunction_node\")\nTBB_STRING_RESOURCE(FLOW_OR_NODE, \"or_node\") //no longer in use, kept for backward compatibility\nTBB_STRING_RESOURCE(FLOW_OVERWRITE_NODE, \"overwrite_node\")\nTBB_STRING_RESOURCE(FLOW_PRIORITY_QUEUE_NODE, \"priority_queue_node\")\nTBB_STRING_RESOURCE(FLOW_QUEUE_NODE, \"queue_node\")\nTBB_STRING_RESOURCE(FLOW_SEQUENCER_NODE, \"sequencer_node\")\nTBB_STRING_RESOURCE(FLOW_SOURCE_NODE, \"source_node\")\nTBB_STRING_RESOURCE(FLOW_SPLIT_NODE, \"split_node\")\nTBB_STRING_RESOURCE(FLOW_WRITE_ONCE_NODE, \"write_once_node\")\nTBB_STRING_RESOURCE(FLOW_BODY, \"body\")\nTBB_STRING_RESOURCE(FLOW_GRAPH, \"graph\")\nTBB_STRING_RESOURCE(FLOW_NODE, \"node\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT, \"input_port\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_0, \"input_port_0\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_1, \"input_port_1\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_2, \"input_port_2\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_3, \"input_port_3\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_4, \"input_port_4\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_5, \"input_port_5\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_6, \"input_port_6\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_7, \"input_port_7\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_8, \"input_port_8\")\nTBB_STRING_RESOURCE(FLOW_INPUT_PORT_9, \"input_port_9\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT, \"output_port\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_0, \"output_port_0\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_1, \"output_port_1\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_2, \"output_port_2\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_3, \"output_port_3\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_4, \"output_port_4\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_5, \"output_port_5\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_6, \"output_port_6\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_7, \"output_port_7\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_8, \"output_port_8\")\nTBB_STRING_RESOURCE(FLOW_OUTPUT_PORT_9, \"output_port_9\")\nTBB_STRING_RESOURCE(FLOW_OBJECT_NAME, \"object_name\")\nTBB_STRING_RESOURCE(FLOW_NULL, \"null\")\nTBB_STRING_RESOURCE(FLOW_INDEXER_NODE, \"indexer_node\")\nTBB_STRING_RESOURCE(FLOW_COMPOSITE_NODE, \"composite_node\")\nTBB_STRING_RESOURCE(FLOW_ASYNC_NODE, \"async_node\")\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_tbb_windef.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_tbb_windef_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif /* __TBB_tbb_windef_H */\n\n// Check that the target Windows version has all API calls requried for TBB.\n// Do not increase the version in condition beyond 0x0500 without prior discussion!\n#if defined(_WIN32_WINNT) && _WIN32_WINNT<0x0501\n#error TBB is unable to run on old Windows versions; _WIN32_WINNT must be 0x0501 or greater.\n#endif\n\n#if !defined(_MT)\n#error TBB requires linkage with multithreaded C/C++ runtime library. \\\n       Choose multithreaded DLL runtime in project settings, or use /MD[d] compiler switch.\n#endif\n\n// Workaround for the problem with MVSC headers failing to define namespace std\nnamespace std {\n  using ::size_t; using ::ptrdiff_t;\n}\n\n#define __TBB_STRING_AUX(x) #x\n#define __TBB_STRING(x) __TBB_STRING_AUX(x)\n\n// Default setting of TBB_USE_DEBUG\n#ifdef TBB_USE_DEBUG\n#    if TBB_USE_DEBUG\n#        if !defined(_DEBUG)\n#            pragma message(__FILE__ \"(\" __TBB_STRING(__LINE__) \") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0\")\n#        endif\n#    else\n#        if defined(_DEBUG)\n#            pragma message(__FILE__ \"(\" __TBB_STRING(__LINE__) \") : Warning: Recommend using /MD if compiling with TBB_USE_DEBUG==0\")\n#        endif\n#    endif\n#endif\n\n#if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBB_NO_IMPLICIT_LINKAGE)\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#endif\n\n#if _MSC_VER\n    #if !__TBB_NO_IMPLICIT_LINKAGE\n        #ifdef __TBB_LIB_NAME\n\t        #pragma comment(lib, __TBB_STRING(__TBB_LIB_NAME))\n        #else\n\t\t\t#ifdef _DEBUG\n\t\t\t\t#pragma comment(lib, \"tbb_debug.lib\")\n\t\t\t#else\n\t\t\t\t#pragma comment(lib, \"tbb.lib\")\n\t\t\t#endif\n        #endif\n    #endif\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_template_helpers.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_template_helpers_H\n#define __TBB_template_helpers_H\n\n#include <utility>\n\nnamespace tbb { namespace internal {\n\n//! Enables one or the other code branches\ntemplate<bool Condition, typename T = void> struct enable_if {};\ntemplate<typename T> struct enable_if<true, T> { typedef T type; };\n\n//! Strips its template type argument from cv- and ref-qualifiers\ntemplate<typename T> struct strip                     { typedef T type; };\ntemplate<typename T> struct strip<const T>            { typedef T type; };\ntemplate<typename T> struct strip<volatile T>         { typedef T type; };\ntemplate<typename T> struct strip<const volatile T>   { typedef T type; };\ntemplate<typename T> struct strip<T&>                 { typedef T type; };\ntemplate<typename T> struct strip<const T&>           { typedef T type; };\ntemplate<typename T> struct strip<volatile T&>        { typedef T type; };\ntemplate<typename T> struct strip<const volatile T&>  { typedef T type; };\n//! Specialization for function pointers\ntemplate<typename T> struct strip<T(&)()>             { typedef T(*type)(); };\n#if __TBB_CPP11_RVALUE_REF_PRESENT\ntemplate<typename T> struct strip<T&&>                { typedef T type; };\ntemplate<typename T> struct strip<const T&&>          { typedef T type; };\ntemplate<typename T> struct strip<volatile T&&>       { typedef T type; };\ntemplate<typename T> struct strip<const volatile T&&> { typedef T type; };\n#endif\n//! Specialization for arrays converts to a corresponding pointer\ntemplate<typename T, size_t N> struct strip<T(&)[N]>                { typedef T* type; };\ntemplate<typename T, size_t N> struct strip<const T(&)[N]>          { typedef const T* type; };\ntemplate<typename T, size_t N> struct strip<volatile T(&)[N]>       { typedef volatile T* type; };\ntemplate<typename T, size_t N> struct strip<const volatile T(&)[N]> { typedef const volatile T* type; };\n\n//! Detects whether two given types are the same\ntemplate<class U, class V> struct is_same_type      { static const bool value = false; };\ntemplate<class W>          struct is_same_type<W,W> { static const bool value = true; };\n\ntemplate<typename T> struct is_ref { static const bool value = false; };\ntemplate<typename U> struct is_ref<U&> { static const bool value = true; };\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n\n//! Allows to store a function parameter pack as a variable and later pass it to another function\ntemplate< typename... Types >\nstruct stored_pack;\n\ntemplate<>\nstruct stored_pack<>\n{\n    typedef stored_pack<> pack_type;\n    stored_pack() {}\n\n    // Friend front-end functions\n    template< typename F, typename Pack > friend void call( F&& f, Pack&& p );\n    template< typename Ret, typename F, typename Pack > friend Ret call_and_return( F&& f, Pack&& p );\n\nprotected:\n    // Ideally, ref-qualified non-static methods would be used,\n    // but that would greatly reduce the set of compilers where it works.\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, const pack_type& /*pack*/, Preceding&&... params ) {\n        return std::forward<F>(f)( std::forward<Preceding>(params)... );\n    }\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, pack_type&& /*pack*/, Preceding&&... params ) {\n        return std::forward<F>(f)( std::forward<Preceding>(params)... );\n    }\n};\n\ntemplate< typename T, typename... Types >\nstruct stored_pack<T, Types...> : stored_pack<Types...>\n{\n    typedef stored_pack<T, Types...> pack_type;\n    typedef stored_pack<Types...> pack_remainder;\n    // Since lifetime of original values is out of control, copies should be made.\n    // Thus references should be stripped away from the deduced type.\n    typename strip<T>::type leftmost_value;\n\n    // Here rvalue references act in the same way as forwarding references,\n    // as long as class template parameters were deduced via forwarding references.\n    stored_pack( T&& t, Types&&... types )\n    : pack_remainder(std::forward<Types>(types)...), leftmost_value(std::forward<T>(t)) {}\n\n    // Friend front-end functions\n    template< typename F, typename Pack > friend void call( F&& f, Pack&& p );\n    template< typename Ret, typename F, typename Pack > friend Ret call_and_return( F&& f, Pack&& p );\n\nprotected:\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, const pack_type& pack, Preceding&&... params ) {\n        return pack_remainder::template call<Ret>(\n            std::forward<F>(f), static_cast<const pack_remainder&>(pack),\n            std::forward<Preceding>(params)... , pack.leftmost_value\n        );\n    }\n    template< typename Ret, typename F, typename... Preceding >\n    static Ret call( F&& f, pack_type&& pack, Preceding&&... params ) {\n        return pack_remainder::template call<Ret>(\n            std::forward<F>(f), static_cast<pack_remainder&&>(pack),\n            std::forward<Preceding>(params)... , std::move(pack.leftmost_value)\n        );\n    }\n};\n\n//! Calls the given function with arguments taken from a stored_pack\ntemplate< typename F, typename Pack >\nvoid call( F&& f, Pack&& p ) {\n    strip<Pack>::type::template call<void>( std::forward<F>(f), std::forward<Pack>(p) );\n}\n\ntemplate< typename Ret, typename F, typename Pack >\nRet call_and_return( F&& f, Pack&& p ) {\n    return strip<Pack>::type::template call<Ret>( std::forward<F>(f), std::forward<Pack>(p) );\n}\n\ntemplate< typename... Types >\nstored_pack<Types...> save_pack( Types&&... types ) {\n    return stored_pack<Types...>( std::forward<Types>(types)... );\n}\n\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n} } // namespace internal, namespace tbb\n\n#endif /* __TBB_template_helpers_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_x86_eliding_mutex_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__x86_eliding_mutex_impl_H\n#define __TBB__x86_eliding_mutex_impl_H\n\n#ifndef __TBB_spin_mutex_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if ( __TBB_x86_32 || __TBB_x86_64 )\n\nnamespace tbb {\nnamespace interface7 {\nnamespace internal {\n\ntemplate<typename Mutex, bool is_rw>\nclass padded_mutex;\n\n//! An eliding lock that occupies a single byte.\n/** A x86_eliding_mutex is an HLE-enabled spin mutex. It is recommended to\n    put the mutex on a cache line that is not shared by the data it protects.\n    It should be used for locking short critical sections where the lock is\n    contended but the data it protects are not.  If zero-initialized, the\n    mutex is considered unheld.\n    @ingroup synchronization */\nclass x86_eliding_mutex : tbb::internal::mutex_copy_deprecated_and_disabled {\n    //! 0 if lock is released, 1 if lock is acquired.\n    __TBB_atomic_flag flag;\n\n    friend class padded_mutex<x86_eliding_mutex, false>;\n\npublic:\n    //! Construct unacquired lock.\n    /** Equivalent to zero-initialization of *this. */\n    x86_eliding_mutex() : flag(0) {}\n\n// bug in gcc 3.x.x causes syntax error in spite of the friend declaration above.\n// Make the scoped_lock public in that case.\n#if __TBB_USE_X86_ELIDING_MUTEX || __TBB_GCC_VERSION < 40000\n#else\n    // by default we will not provide the scoped_lock interface.  The user\n    // should use the padded version of the mutex.  scoped_lock is used in\n    // padded_mutex template.\nprivate:\n#endif\n    // scoped_lock in padded_mutex<> is the interface to use.\n    //! Represents acquisition of a mutex.\n    class scoped_lock : tbb::internal::no_copy {\n    private:\n        //! Points to currently held mutex, or NULL if no lock is held.\n        x86_eliding_mutex* my_mutex;\n\n    public:\n        //! Construct without acquiring a mutex.\n        scoped_lock() : my_mutex(NULL) {}\n\n        //! Construct and acquire lock on a mutex.\n        scoped_lock( x86_eliding_mutex& m ) : my_mutex(NULL) { acquire(m); }\n\n        //! Acquire lock.\n        void acquire( x86_eliding_mutex& m ) {\n            __TBB_ASSERT( !my_mutex, \"already holding a lock\" );\n\n            my_mutex=&m;\n            my_mutex->lock();\n        }\n\n        //! Try acquiring lock (non-blocking)\n        /** Return true if lock acquired; false otherwise. */\n        bool try_acquire( x86_eliding_mutex& m ) {\n            __TBB_ASSERT( !my_mutex, \"already holding a lock\" );\n\n            bool result = m.try_lock();\n            if( result ) {\n                my_mutex = &m;\n            }\n            return result;\n        }\n\n        //! Release lock\n        void release() {\n            __TBB_ASSERT( my_mutex, \"release on scoped_lock that is not holding a lock\" );\n\n            my_mutex->unlock();\n            my_mutex = NULL;\n        }\n\n        //! Destroy lock.  If holding a lock, releases the lock first.\n        ~scoped_lock() {\n            if( my_mutex ) {\n                release();\n            }\n        }\n    };\n#if __TBB_USE_X86_ELIDING_MUTEX || __TBB_GCC_VERSION < 40000\n#else\npublic:\n#endif  /* __TBB_USE_X86_ELIDING_MUTEX */\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire lock\n    void lock() {\n        __TBB_LockByteElided(flag);\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n        return __TBB_TryLockByteElided(flag);\n    }\n\n    //! Release lock\n    void unlock() {\n        __TBB_UnlockByteElided( flag );\n    }\n}; // end of x86_eliding_mutex\n\n} // namespace internal\n} // namespace interface7\n} // namespace tbb\n\n#endif /* ( __TBB_x86_32 || __TBB_x86_64 ) */\n\n#endif /* __TBB__x86_eliding_mutex_impl_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/internal/_x86_rtm_rw_mutex_impl.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB__x86_rtm_rw_mutex_impl_H\n#define __TBB__x86_rtm_rw_mutex_impl_H\n\n#ifndef __TBB_spin_rw_mutex_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if __TBB_TSX_AVAILABLE\n\n#include \"../tbb_stddef.h\"\n#include \"../tbb_machine.h\"\n#include \"../tbb_profiling.h\"\n#include \"../spin_rw_mutex.h\"\n\nnamespace tbb {\nnamespace interface8 {\nnamespace internal {\n\nenum RTM_type {\n    RTM_not_in_mutex,\n    RTM_transacting_reader,\n    RTM_transacting_writer,\n    RTM_real_reader,\n    RTM_real_writer\n};\n\nstatic const unsigned long speculation_granularity = 64;\n\n//! Fast, unfair, spinning speculation-enabled reader-writer lock with backoff and\n//  writer-preference\n/** @ingroup synchronization */\nclass x86_rtm_rw_mutex: private spin_rw_mutex {\n#if __TBB_USE_X86_RTM_RW_MUTEX || __TBB_GCC_VERSION < 40000\n// bug in gcc 3.x.x causes syntax error in spite of the friend declaration below.\n// Make the scoped_lock public in that case.\npublic:\n#else\nprivate:\n#endif\n    friend class interface7::internal::padded_mutex<x86_rtm_rw_mutex,true>;\n    class scoped_lock;   // should be private\n    friend class scoped_lock;\nprivate:\n    //! @cond INTERNAL\n\n    //! Internal construct unacquired mutex.\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    //! Internal acquire write lock.\n    // only_speculate == true if we're doing a try_lock, else false.\n    void __TBB_EXPORTED_METHOD internal_acquire_writer(x86_rtm_rw_mutex::scoped_lock&, bool only_speculate=false);\n\n    //! Internal acquire read lock.\n    // only_speculate == true if we're doing a try_lock, else false.\n    void __TBB_EXPORTED_METHOD internal_acquire_reader(x86_rtm_rw_mutex::scoped_lock&, bool only_speculate=false);\n\n    //! Internal upgrade reader to become a writer.\n    bool __TBB_EXPORTED_METHOD internal_upgrade( x86_rtm_rw_mutex::scoped_lock& );\n\n    //! Out of line code for downgrading a writer to a reader.\n    bool __TBB_EXPORTED_METHOD internal_downgrade( x86_rtm_rw_mutex::scoped_lock& );\n\n    //! Internal try_acquire write lock.\n    bool __TBB_EXPORTED_METHOD internal_try_acquire_writer( x86_rtm_rw_mutex::scoped_lock& );\n\n    //! Internal release lock.\n    void __TBB_EXPORTED_METHOD internal_release( x86_rtm_rw_mutex::scoped_lock& );\n\n    static x86_rtm_rw_mutex* internal_get_mutex( const spin_rw_mutex::scoped_lock& lock )\n    {\n        return static_cast<x86_rtm_rw_mutex*>( lock.internal_get_mutex() );\n    }\n    static void internal_set_mutex( spin_rw_mutex::scoped_lock& lock, spin_rw_mutex* mtx )\n    {\n        lock.internal_set_mutex( mtx );\n    }\n    //! @endcond\npublic:\n    //! Construct unacquired mutex.\n    x86_rtm_rw_mutex() {\n        w_flag = false;\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n#if TBB_USE_ASSERT\n    //! Empty destructor.\n    ~x86_rtm_rw_mutex() {}\n#endif /* TBB_USE_ASSERT */\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n#if __TBB_USE_X86_RTM_RW_MUTEX || __TBB_GCC_VERSION < 40000\n#else\n    // by default we will not provide the scoped_lock interface.  The user\n    // should use the padded version of the mutex.  scoped_lock is used in\n    // padded_mutex template.\nprivate:\n#endif\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    // Speculation-enabled scoped lock for spin_rw_mutex\n    // The idea is to be able to reuse the acquire/release methods of spin_rw_mutex\n    // and its scoped lock wherever possible.  The only way to use a speculative lock is to use\n    // a scoped_lock. (because transaction_state must be local)\n\n    class scoped_lock : tbb::internal::no_copy {\n        friend class x86_rtm_rw_mutex;\n        spin_rw_mutex::scoped_lock my_scoped_lock;\n\n        RTM_type transaction_state;\n\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() : my_scoped_lock(), transaction_state(RTM_not_in_mutex) {\n        }\n\n        //! Acquire lock on given mutex.\n        scoped_lock( x86_rtm_rw_mutex& m, bool write = true ) : my_scoped_lock(),\n            transaction_state(RTM_not_in_mutex) {\n            acquire(m, write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if(transaction_state != RTM_not_in_mutex) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( x86_rtm_rw_mutex& m, bool write = true ) {\n            if( write ) m.internal_acquire_writer(*this);\n            else        m.internal_acquire_reader(*this);\n        }\n\n        //! Release lock\n        void release() {\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( transaction_state!=RTM_not_in_mutex, \"lock is not acquired\" );\n            return mutex->internal_release(*this);\n        }\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer() {\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( transaction_state==RTM_transacting_reader || transaction_state==RTM_real_reader, \"Invalid state for upgrade\" );\n            return mutex->internal_upgrade(*this);\n        }\n\n        //! Downgrade writer to become a reader.\n        /** Returns whether the downgrade happened without releasing and re-acquiring the lock */\n        bool downgrade_to_reader() {\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( transaction_state==RTM_transacting_writer || transaction_state==RTM_real_writer, \"Invalid state for downgrade\" );\n            return mutex->internal_downgrade(*this);\n        }\n\n        //! Attempt to acquire mutex.\n        /** returns true if successful.  */\n        bool try_acquire( x86_rtm_rw_mutex& m, bool write = true ) {\n#if TBB_USE_ASSERT\n            x86_rtm_rw_mutex* mutex = x86_rtm_rw_mutex::internal_get_mutex(my_scoped_lock);\n            __TBB_ASSERT( !mutex, \"lock is already acquired\" );\n#endif\n            // have to assign m to our mutex.\n            // cannot set the mutex, because try_acquire in spin_rw_mutex depends on it being NULL.\n            if(write) return m.internal_try_acquire_writer(*this);\n            // speculatively acquire the lock.  If this fails, do try_acquire on the spin_rw_mutex.\n            m.internal_acquire_reader(*this, /*only_speculate=*/true);\n            if(transaction_state == RTM_transacting_reader) return true;\n            if( my_scoped_lock.try_acquire(m, false)) {\n                transaction_state = RTM_real_reader;\n                return true;\n            }\n            return false;\n        }\n\n        };  // class x86_rtm_rw_mutex::scoped_lock\n\n    // ISO C++0x compatibility methods not provided because we cannot maintain\n    // state about whether a thread is in a transaction.\n\nprivate:\n    char pad[speculation_granularity-sizeof(spin_rw_mutex)]; // padding\n\n    // If true, writer holds the spin_rw_mutex.\n    tbb::atomic<bool> w_flag;  // want this on a separate cache line\n\n};  // x86_rtm_rw_mutex\n\n}  // namespace internal\n}  // namespace interface8\n}  // namespace tbb\n\n#endif  /* __TBB_TSX_AVAILABLE */\n#endif /* __TBB__x86_rtm_rw_mutex_impl_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/gcc_armv7.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n/*\n    Platform isolation layer for the ARMv7-a architecture.\n*/\n\n#ifndef __TBB_machine_H\n#error Do not include this file directly; include tbb_machine.h instead\n#endif\n\n//TODO: is ARMv7 is the only version ever to support?\n#if !(__ARM_ARCH_7A__)\n#error compilation requires an ARMv7-a architecture.\n#endif\n\n#include <sys/param.h>\n#include <unistd.h>\n\n#define __TBB_WORDSIZE 4\n\n// Traditionally ARM is little-endian.\n// Note that, since only the layout of aligned 32-bit words is of interest,\n// any apparent PDP-endianness of 32-bit words at half-word alignment or\n// any little-endian ordering of big-endian 32-bit words in 64-bit quantities\n// may be disregarded for this setting.\n#if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#elif defined(__BYTE_ORDER__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n\n#define __TBB_compiler_fence()    __asm__ __volatile__(\"\": : :\"memory\")\n#define __TBB_full_memory_fence() __asm__ __volatile__(\"dmb ish\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_full_memory_fence()\n#define __TBB_acquire_consistency_helper() __TBB_full_memory_fence()\n#define __TBB_release_consistency_helper() __TBB_full_memory_fence()\n\n//--------------------------------------------------\n// Compare and swap\n//--------------------------------------------------\n\n/**\n * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n * @return value originally in memory at ptr, regardless of success\n*/\nstatic inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand )\n{\n    int32_t oldval, res;\n\n    __TBB_full_memory_fence();\n\n    do {\n    __asm__ __volatile__(\n        \"ldrex      %1, [%3]\\n\"\n        \"mov        %0, #0\\n\"\n        \"cmp        %1, %4\\n\"\n        \"it         eq\\n\"\n        \"strexeq    %0, %5, [%3]\\n\"\n        : \"=&r\" (res), \"=&r\" (oldval), \"+Qo\" (*(volatile int32_t*)ptr)\n        : \"r\" ((int32_t *)ptr), \"Ir\" (comparand), \"r\" (value)\n        : \"cc\");\n    } while (res);\n\n    __TBB_full_memory_fence();\n\n    return oldval;\n}\n\n/**\n * Atomic CAS for 64 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n * @return value originally in memory at ptr, regardless of success\n */\nstatic inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, int64_t comparand )\n{\n    int64_t oldval;\n    int32_t res;\n\n    __TBB_full_memory_fence();\n\n    do {\n        __asm__ __volatile__(\n            \"mov        %0, #0\\n\"\n            \"ldrexd     %1, %H1, [%3]\\n\"\n            \"cmp        %1, %4\\n\"\n            \"it         eq\\n\"\n            \"cmpeq      %H1, %H4\\n\"\n            \"it         eq\\n\"\n            \"strexdeq   %0, %5, %H5, [%3]\"\n        : \"=&r\" (res), \"=&r\" (oldval), \"+Qo\" (*(volatile int64_t*)ptr)\n        : \"r\" ((int64_t *)ptr), \"r\" (comparand), \"r\" (value)\n        : \"cc\");\n    } while (res);\n\n    __TBB_full_memory_fence();\n\n    return oldval;\n}\n\nstatic inline int32_t __TBB_machine_fetchadd4(volatile void* ptr, int32_t addend)\n{\n    unsigned long tmp;\n    int32_t result, tmp2;\n\n    __TBB_full_memory_fence();\n\n    __asm__ __volatile__(\n\"1:     ldrex   %0, [%4]\\n\"\n\"       add     %3, %0, %5\\n\"\n\"       strex   %1, %3, [%4]\\n\"\n\"       cmp     %1, #0\\n\"\n\"       bne     1b\\n\"\n    : \"=&r\" (result), \"=&r\" (tmp), \"+Qo\" (*(volatile int32_t*)ptr), \"=&r\"(tmp2)\n    : \"r\" ((int32_t *)ptr), \"Ir\" (addend)\n    : \"cc\");\n\n    __TBB_full_memory_fence();\n\n    return result;\n}\n\nstatic inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend)\n{\n    unsigned long tmp;\n    int64_t result, tmp2;\n\n    __TBB_full_memory_fence();\n\n    __asm__ __volatile__(\n\"1:     ldrexd  %0, %H0, [%4]\\n\"\n\"       adds    %3, %0, %5\\n\"\n\"       adc     %H3, %H0, %H5\\n\"\n\"       strexd  %1, %3, %H3, [%4]\\n\"\n\"       cmp     %1, #0\\n\"\n\"       bne     1b\"\n    : \"=&r\" (result), \"=&r\" (tmp), \"+Qo\" (*(volatile int64_t*)ptr), \"=&r\"(tmp2)\n    : \"r\" ((int64_t *)ptr), \"r\" (addend)\n    : \"cc\");\n\n\n    __TBB_full_memory_fence();\n\n    return result;\n}\n\ninline void __TBB_machine_pause (int32_t delay )\n{\n    while(delay>0)\n    {\n\t__TBB_compiler_fence();\n        delay--;\n    }\n}\n\nnamespace tbb {\nnamespace internal {\n    template <typename T, size_t S>\n    struct machine_load_store_relaxed {\n        static inline T load ( const volatile T& location ) {\n            const T value = location;\n\n            /*\n            * An extra memory barrier is required for errata #761319\n            * Please see http://infocenter.arm.com/help/topic/com.arm.doc.uan0004a\n            */\n            __TBB_acquire_consistency_helper();\n            return value;\n        }\n\n        static inline void store ( volatile T& location, T value ) {\n            location = value;\n        }\n    };\n}} // namespaces internal, tbb\n\n// Machine specific atomic operations\n\n#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)\n#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n\n// Use generics for some things\n#define __TBB_USE_GENERIC_PART_WORD_CAS                         1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD                   1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_STORE                 1\n#define __TBB_USE_GENERIC_FETCH_STORE                           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_DWORD_LOAD_STORE                      1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE     1\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/gcc_generic.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_generic_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_gcc_generic_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n#define __TBB_WORDSIZE      __SIZEOF_POINTER__\n\n#if __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN\n    #define __TBB_64BIT_ATOMICS 0\n#endif\n\n/** FPU control setting not available for non-Intel architectures on Android **/\n#if __ANDROID__ && __TBB_generic_arch\n    #define __TBB_CPU_CTL_ENV_PRESENT 0\n#endif\n\n// __BYTE_ORDER__ is used in accordance with http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html,\n// but __BIG_ENDIAN__ or __LITTLE_ENDIAN__ may be more commonly found instead.\n#if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#elif defined(__BYTE_ORDER__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n#if __TBB_GCC_VERSION < 40700\n// Use __sync_* builtins\n\n/** As this generic implementation has absolutely no information about underlying\n    hardware, its performance most likely will be sub-optimal because of full memory\n    fence usages where a more lightweight synchronization means (or none at all)\n    could suffice. Thus if you use this header to enable TBB on a new platform,\n    consider forking it and relaxing below helpers as appropriate. **/\n#define __TBB_acquire_consistency_helper()  __sync_synchronize()\n#define __TBB_release_consistency_helper()  __sync_synchronize()\n#define __TBB_full_memory_fence()           __sync_synchronize()\n#define __TBB_control_consistency_helper()  __sync_synchronize()\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                                                         \\\ninline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                    \\\n    return __sync_val_compare_and_swap(reinterpret_cast<volatile T *>(ptr),comparand,value);      \\\n}                                                                                                 \\\ninline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                               \\\n    return __sync_fetch_and_add(reinterpret_cast<volatile T *>(ptr),value);                       \\\n}\n\n#define __TBB_USE_GENERIC_FETCH_STORE 1\n\n#else\n// __TBB_GCC_VERSION >= 40700; use __atomic_* builtins available since gcc 4.7\n\n#define __TBB_compiler_fence()              __asm__ __volatile__(\"\": : :\"memory\")\n// Acquire and release fence intrinsics in GCC might miss compiler fence.\n// Adding it at both sides of an intrinsic, as we do not know what reordering can be made.\n#define __TBB_acquire_consistency_helper()  __TBB_compiler_fence(); __atomic_thread_fence(__ATOMIC_ACQUIRE); __TBB_compiler_fence()\n#define __TBB_release_consistency_helper()  __TBB_compiler_fence(); __atomic_thread_fence(__ATOMIC_RELEASE); __TBB_compiler_fence()\n#define __TBB_full_memory_fence()           __atomic_thread_fence(__ATOMIC_SEQ_CST)\n#define __TBB_control_consistency_helper()  __TBB_acquire_consistency_helper()\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                                                         \\\ninline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                    \\\n    (void)__atomic_compare_exchange_n(reinterpret_cast<volatile T *>(ptr), &comparand, value,     \\\n                                      false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);                 \\\n    return comparand;                                                                             \\\n}                                                                                                 \\\ninline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                               \\\n    return __atomic_fetch_add(reinterpret_cast<volatile T *>(ptr), value, __ATOMIC_SEQ_CST);      \\\n}                                                                                                 \\\ninline T __TBB_machine_fetchstore##S( volatile void *ptr, T value ) {                             \\\n    return __atomic_exchange_n(reinterpret_cast<volatile T *>(ptr), value, __ATOMIC_SEQ_CST);     \\\n}\n\n#endif // __TBB_GCC_VERSION < 40700\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,int8_t)\n__TBB_MACHINE_DEFINE_ATOMICS(2,int16_t)\n__TBB_MACHINE_DEFINE_ATOMICS(4,int32_t)\n__TBB_MACHINE_DEFINE_ATOMICS(8,int64_t)\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\nnamespace tbb{ namespace internal { namespace gcc_builtins {\n    inline int clz(unsigned int x){ return __builtin_clz(x);};\n    inline int clz(unsigned long int x){ return __builtin_clzl(x);};\n    inline int clz(unsigned long long int x){ return __builtin_clzll(x);};\n}}}\n//gcc __builtin_clz builtin count _number_ of leading zeroes\nstatic inline intptr_t __TBB_machine_lg( uintptr_t x ) {\n    return sizeof(x)*8 - tbb::internal::gcc_builtins::clz(x) -1 ;\n}\n\n\ntypedef unsigned char __TBB_Flag;\ntypedef __TBB_atomic __TBB_Flag __TBB_atomic_flag;\n\n#if __TBB_GCC_VERSION < 40700\n// Use __sync_* builtins\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uintptr_t addend ) {\n    __sync_fetch_and_or(reinterpret_cast<volatile uintptr_t *>(ptr),addend);\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uintptr_t addend ) {\n    __sync_fetch_and_and(reinterpret_cast<volatile uintptr_t *>(ptr),addend);\n}\n\ninline bool __TBB_machine_try_lock_byte( __TBB_atomic_flag &flag ) {\n    return __sync_lock_test_and_set(&flag,1)==0;\n}\n\ninline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag ) {\n    __sync_lock_release(&flag);\n}\n\n#else\n// __TBB_GCC_VERSION >= 40700; use __atomic_* builtins available since gcc 4.7\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uintptr_t addend ) {\n    __atomic_fetch_or(reinterpret_cast<volatile uintptr_t *>(ptr),addend,__ATOMIC_SEQ_CST);\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uintptr_t addend ) {\n    __atomic_fetch_and(reinterpret_cast<volatile uintptr_t *>(ptr),addend,__ATOMIC_SEQ_CST);\n}\n\ninline bool __TBB_machine_try_lock_byte( __TBB_atomic_flag &flag ) {\n    return !__atomic_test_and_set(&flag,__ATOMIC_ACQUIRE);\n}\n\ninline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag ) {\n    __atomic_clear(&flag,__ATOMIC_RELEASE);\n}\n\n#endif // __TBB_GCC_VERSION < 40700\n\n// Machine specific atomic operations\n#define __TBB_AtomicOR(P,V)     __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V)    __TBB_machine_and(P,V)\n\n#define __TBB_TryLockByte   __TBB_machine_try_lock_byte\n#define __TBB_UnlockByte    __TBB_machine_unlock_byte\n\n// Definition of other functions\n#define __TBB_Log2(V)           __TBB_machine_lg(V)\n\n// TODO: implement with __atomic_* builtins where available\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#if __TBB_WORDSIZE==4\n    #define __TBB_USE_GENERIC_DWORD_LOAD_STORE              1\n#endif\n\n#if __TBB_x86_32 || __TBB_x86_64\n#include \"gcc_itsx.h\"\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/gcc_ia32_common.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_machine_gcc_ia32_common_H\n#define __TBB_machine_gcc_ia32_common_H\n\n//TODO: Add a higher-level function, e.g. tbb::interal::log2(), into tbb_stddef.h, which\n//uses __TBB_Log2 and contains the assert and remove the assert from here and all other\n//platform-specific headers.\n//TODO: Check if use of gcc intrinsic gives a better chance for cross call optimizations\ntemplate <typename T>\nstatic inline intptr_t __TBB_machine_lg( T x ) {\n    __TBB_ASSERT(x>0, \"The logarithm of a non-positive value is undefined.\");\n    uintptr_t j, i = x;\n    __asm__(\"bsr %1,%0\" : \"=r\"(j) : \"r\"(i));\n    return j;\n}\n#define __TBB_Log2(V)  __TBB_machine_lg(V)\n\n#ifndef __TBB_Pause\n//TODO: check if raising a ratio of pause instructions to loop control instructions\n//(via e.g. loop unrolling) gives any benefit for HT.  E.g, the current implementation\n//does about 2 CPU-consuming instructions for every pause instruction.  Perhaps for\n//high pause counts it should use an unrolled loop to raise the ratio, and thus free\n//up more integer cycles for the other hyperthread.  On the other hand, if the loop is\n//unrolled too far, it won't fit in the core's loop cache, and thus take away\n//instruction decode slots from the other hyperthread.\n\n//TODO: check if use of gcc __builtin_ia32_pause intrinsic gives a \"some how\" better performing code\nstatic inline void __TBB_machine_pause( int32_t delay ) {\n    for (int32_t i = 0; i < delay; i++) {\n       __asm__ __volatile__(\"pause;\");\n    }\n    return;\n}\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n#endif /* !__TBB_Pause */\n\nnamespace tbb { namespace internal { typedef uint64_t machine_tsc_t; } }\nstatic inline tbb::internal::machine_tsc_t __TBB_machine_time_stamp() {\n#if __INTEL_COMPILER\n    return _rdtsc();\n#else\n    tbb::internal::uint32_t hi, lo;\n    __asm__ __volatile__(\"rdtsc\" : \"=d\"(hi), \"=a\"(lo));\n    return (tbb::internal::machine_tsc_t( hi ) << 32) | lo;\n#endif\n}\n#define __TBB_time_stamp() __TBB_machine_time_stamp()\n\n// API to retrieve/update FPU control setting\n#ifndef __TBB_CPU_CTL_ENV_PRESENT\n#define __TBB_CPU_CTL_ENV_PRESENT 1\nnamespace tbb {\nnamespace internal {\nclass cpu_ctl_env {\nprivate:\n    int     mxcsr;\n    short   x87cw;\n    static const int MXCSR_CONTROL_MASK = ~0x3f; /* all except last six status bits */\npublic:\n    bool operator!=( const cpu_ctl_env& ctl ) const { return mxcsr != ctl.mxcsr || x87cw != ctl.x87cw; }\n    void get_env() {\n    #if __TBB_ICC_12_0_INL_ASM_FSTCW_BROKEN\n        cpu_ctl_env loc_ctl;\n        __asm__ __volatile__ (\n                \"stmxcsr %0\\n\\t\"\n                \"fstcw %1\"\n                : \"=m\"(loc_ctl.mxcsr), \"=m\"(loc_ctl.x87cw)\n        );\n        *this = loc_ctl;\n    #else\n        __asm__ __volatile__ (\n                \"stmxcsr %0\\n\\t\"\n                \"fstcw %1\"\n                : \"=m\"(mxcsr), \"=m\"(x87cw)\n        );\n    #endif\n        mxcsr &= MXCSR_CONTROL_MASK;\n    }\n    void set_env() const {\n        __asm__ __volatile__ (\n                \"ldmxcsr %0\\n\\t\"\n                \"fldcw %1\"\n                : : \"m\"(mxcsr), \"m\"(x87cw)\n        );\n    }\n};\n} // namespace internal\n} // namespace tbb\n#endif /* !__TBB_CPU_CTL_ENV_PRESENT */\n\n#include \"gcc_itsx.h\"\n\n#endif /* __TBB_machine_gcc_ia32_common_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/gcc_itsx.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_itsx_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_gcc_itsx_H\n\n#define __TBB_OP_XACQUIRE 0xF2\n#define __TBB_OP_XRELEASE 0xF3\n#define __TBB_OP_LOCK     0xF0\n\n#define __TBB_STRINGIZE_INTERNAL(arg) #arg\n#define __TBB_STRINGIZE(arg) __TBB_STRINGIZE_INTERNAL(arg)\n\n#ifdef __TBB_x86_64\n#define __TBB_r_out \"=r\"\n#else\n#define __TBB_r_out \"=q\"\n#endif\n\ninline static uint8_t __TBB_machine_try_lock_elided( volatile uint8_t* lk )\n{\n    uint8_t value = 1;\n    __asm__ volatile (\".byte \" __TBB_STRINGIZE(__TBB_OP_XACQUIRE)\"; lock; xchgb %0, %1;\"\n                      : __TBB_r_out(value), \"=m\"(*lk)  : \"0\"(value), \"m\"(*lk) : \"memory\" );\n    return uint8_t(value^1);\n}\n\ninline static void __TBB_machine_try_lock_elided_cancel()\n{\n    // 'pause' instruction aborts HLE/RTM transactions\n    __asm__ volatile (\"pause\\n\" : : : \"memory\" );\n}\n\ninline static void __TBB_machine_unlock_elided( volatile uint8_t* lk )\n{\n    __asm__ volatile (\".byte \" __TBB_STRINGIZE(__TBB_OP_XRELEASE)\"; movb $0, %0\"\n                      : \"=m\"(*lk) : \"m\"(*lk) : \"memory\" );\n}\n\n#if __TBB_TSX_INTRINSICS_PRESENT\n#include <immintrin.h>\n\n#define __TBB_machine_is_in_transaction _xtest\n#define __TBB_machine_begin_transaction _xbegin\n#define __TBB_machine_end_transaction   _xend\n#define __TBB_machine_transaction_conflict_abort() _xabort(0xff)\n\n#else\n\n/*!\n * Check if the instruction is executed in a transaction or not\n */\ninline static bool __TBB_machine_is_in_transaction()\n{\n    int8_t res = 0;\n#if __TBB_x86_32\n    __asm__ volatile (\".byte 0x0F; .byte 0x01; .byte 0xD6;\\n\"\n                      \"setz %0\" : \"=q\"(res) : : \"memory\" );\n#else\n    __asm__ volatile (\".byte 0x0F; .byte 0x01; .byte 0xD6;\\n\"\n                      \"setz %0\" : \"=r\"(res) : : \"memory\" );\n#endif\n    return res==0;\n}\n\n/*!\n * Enter speculative execution mode.\n * @return -1 on success\n *         abort cause ( or 0 ) on abort\n */\ninline static uint32_t __TBB_machine_begin_transaction()\n{\n    uint32_t res = ~uint32_t(0);   // success value\n    __asm__ volatile (\"1: .byte  0xC7; .byte 0xF8;\\n\"           //  XBEGIN <abort-offset>\n                      \"   .long  2f-1b-6\\n\"                     //  2f-1b == difference in addresses of start\n                                                                //  of XBEGIN and the MOVL\n                                                                //  2f - 1b - 6 == that difference minus the size of the\n                                                                //  XBEGIN instruction.  This is the abort offset to\n                                                                //  2: below.\n                      \"    jmp   3f\\n\"                          //  success (leave -1 in res)\n                      \"2:  movl  %%eax,%0\\n\"                    //  store failure code in res\n                      \"3:\"\n                      :\"=r\"(res):\"0\"(res):\"memory\",\"%eax\");\n    return res;\n}\n\n/*!\n * Attempt to commit/end transaction\n */\ninline static void __TBB_machine_end_transaction()\n{\n    __asm__ volatile (\".byte 0x0F; .byte 0x01; .byte 0xD5\" :::\"memory\");   // XEND\n}\n\n/*\n * aborts with code 0xFF (lock already held)\n */\ninline static void __TBB_machine_transaction_conflict_abort()\n{\n    __asm__ volatile (\".byte 0xC6; .byte 0xF8; .byte 0xFF\" :::\"memory\");\n}\n\n#endif /* __TBB_TSX_INTRINSICS_PRESENT */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/ibm_aix51.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n// TODO: revise by comparing with mac_ppc.h\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_ibm_aix51_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_ibm_aix51_H\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_BIG // assumption based on operating system\n\n#include <stdint.h>\n#include <unistd.h>\n#include <sched.h>\n\nextern \"C\" {\nint32_t __TBB_machine_cas_32 (volatile void* ptr, int32_t value, int32_t comparand);\nint64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t comparand);\nvoid __TBB_machine_flush ();\nvoid __TBB_machine_lwsync ();\nvoid __TBB_machine_isync ();\n}\n\n// Mapping of old entry point names retained for the sake of backward binary compatibility\n#define __TBB_machine_cmpswp4 __TBB_machine_cas_32\n#define __TBB_machine_cmpswp8 __TBB_machine_cas_64\n\n#define __TBB_Yield() sched_yield()\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_FETCH_ADD                         1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#if __GNUC__\n    #define __TBB_control_consistency_helper() __asm__ __volatile__( \"isync\": : :\"memory\")\n    #define __TBB_acquire_consistency_helper() __asm__ __volatile__(\"lwsync\": : :\"memory\")\n    #define __TBB_release_consistency_helper() __asm__ __volatile__(\"lwsync\": : :\"memory\")\n    #define __TBB_full_memory_fence()          __asm__ __volatile__(  \"sync\": : :\"memory\")\n#else\n    // IBM C++ Compiler does not support inline assembly\n    // TODO: Since XL 9.0 or earlier GCC syntax is supported. Replace with more\n    //       lightweight implementation (like in mac_ppc.h)\n    #define __TBB_control_consistency_helper() __TBB_machine_isync ()\n    #define __TBB_acquire_consistency_helper() __TBB_machine_lwsync ()\n    #define __TBB_release_consistency_helper() __TBB_machine_lwsync ()\n    #define __TBB_full_memory_fence()          __TBB_machine_flush ()\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/icc_generic.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_icc_generic_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if ! __TBB_ICC_BUILTIN_ATOMICS_PRESENT\n    #error \"Intel C++ Compiler of at least 12.0 version is needed to use ICC intrinsics port\"\n#endif\n\n#define __TBB_machine_icc_generic_H\n\n//ICC mimics the \"native\" target compiler\n#if _MSC_VER\n    #include \"msvc_ia32_common.h\"\n#else\n    #include \"gcc_ia32_common.h\"\n#endif\n\n//TODO: Make __TBB_WORDSIZE macro optional for ICC intrinsics port.\n//As compiler intrinsics are used for all the operations it is possible to do.\n\n#if __TBB_x86_32\n    #define __TBB_WORDSIZE 4\n#else\n    #define __TBB_WORDSIZE 8\n#endif\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n//__TBB_compiler_fence() defined just in case, as it seems not to be used on its own anywhere else\n#ifndef __TBB_compiler_fence\n#if _MSC_VER\n    //TODO: any way to use same intrinsics on windows and linux?\n    #pragma intrinsic(_ReadWriteBarrier)\n    #define __TBB_compiler_fence()    _ReadWriteBarrier()\n#else\n    #define __TBB_compiler_fence()    __asm__ __volatile__(\"\": : :\"memory\")\n#endif\n#endif\n\n#ifndef __TBB_full_memory_fence\n#if _MSC_VER\n    //TODO: any way to use same intrinsics on windows and linux?\n    #pragma intrinsic(_mm_mfence)\n    #define __TBB_full_memory_fence() _mm_mfence()\n#else\n    #define __TBB_full_memory_fence() __asm__ __volatile__(\"mfence\": : :\"memory\")\n#endif\n#endif\n\n#ifndef __TBB_control_consistency_helper\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#endif\n\nnamespace tbb { namespace internal {\n//TODO: is there any way to reuse definition of memory_order enum from ICC instead of copy paste.\n//however it seems unlikely that ICC will silently change exact enum values, as they are defined\n//in the ISO exactly like this.\n//TODO: add test that exact values of the enum are same as in the ISO C++11\ntypedef enum memory_order {\n    memory_order_relaxed, memory_order_consume, memory_order_acquire,\n    memory_order_release, memory_order_acq_rel, memory_order_seq_cst\n} memory_order;\n\nnamespace icc_intrinsics_port {\n    template <typename T>\n    T convert_argument(T value){\n        return value;\n    }\n    //The overload below is needed to have explicit conversion of pointer to void* in argument list.\n    //compiler bug?\n    //TODO: add according broken macro and recheck with ICC 13.0 if the overload is still needed\n    template <typename T>\n    void* convert_argument(T* value){\n        return (void*)value;\n    }\n}\n//TODO: code below is a bit repetitive, consider simplifying it\ntemplate <typename T, size_t S>\nstruct machine_load_store {\n    static T load_with_acquire ( const volatile T& location ) {\n        return __atomic_load_explicit(&location, memory_order_acquire);\n    }\n    static void store_with_release ( volatile T &location, T value ) {\n        __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_release);\n    }\n};\n\ntemplate <typename T, size_t S>\nstruct machine_load_store_relaxed {\n    static inline T load ( const T& location ) {\n        return __atomic_load_explicit(&location, memory_order_relaxed);\n    }\n    static inline void store (  T& location, T value ) {\n        __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_relaxed);\n    }\n};\n\ntemplate <typename T, size_t S>\nstruct machine_load_store_seq_cst {\n    static T load ( const volatile T& location ) {\n        return __atomic_load_explicit(&location, memory_order_seq_cst);\n    }\n\n    static void store ( volatile T &location, T value ) {\n        __atomic_store_explicit(&location, value, memory_order_seq_cst);\n    }\n};\n\n}} // namespace tbb::internal\n\nnamespace tbb{ namespace internal { namespace icc_intrinsics_port{\n    typedef enum memory_order_map {\n        relaxed = memory_order_relaxed,\n        acquire = memory_order_acquire,\n        release = memory_order_release,\n        full_fence=  memory_order_seq_cst\n    } memory_order_map;\n}}}// namespace tbb::internal\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,M)                                                     \\\ninline T __TBB_machine_cmpswp##S##M( volatile void *ptr, T value, T comparand ) {               \\\n    __atomic_compare_exchange_strong_explicit(                                                  \\\n            (T*)ptr                                                                             \\\n            ,&comparand                                                                         \\\n            ,value                                                                              \\\n            , tbb::internal::icc_intrinsics_port::M                                             \\\n            , tbb::internal::icc_intrinsics_port::M);                                           \\\n    return comparand;                                                                           \\\n}                                                                                               \\\n                                                                                                \\\ninline T __TBB_machine_fetchstore##S##M(volatile void *ptr, T value) {                          \\\n    return __atomic_exchange_explicit((T*)ptr, value, tbb::internal::icc_intrinsics_port::M);   \\\n}                                                                                               \\\n                                                                                                \\\ninline T __TBB_machine_fetchadd##S##M(volatile void *ptr, T value) {                            \\\n    return __atomic_fetch_add_explicit((T*)ptr, value, tbb::internal::icc_intrinsics_port::M);  \\\n}                                                                                               \\\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(1,tbb::internal::int8_t, relaxed)\n\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(2,tbb::internal::int16_t, relaxed)\n\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(4,tbb::internal::int32_t, relaxed)\n\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, full_fence)\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, acquire)\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, release)\n__TBB_MACHINE_DEFINE_ATOMICS(8,tbb::internal::int64_t, relaxed)\n\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\n#define __TBB_USE_FENCED_ATOMICS                            1\n\nnamespace tbb { namespace internal {\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(full_fence)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(full_fence)\n\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(acquire)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(release)\n\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(relaxed)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(relaxed)\n\ntemplate <typename T>\nstruct machine_load_store<T,8> {\n    static T load_with_acquire ( const volatile T& location ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            return __atomic_load_explicit(&location, memory_order_acquire);\n        } else {\n            return __TBB_machine_generic_load8acquire(&location);\n        }\n    }\n    static void store_with_release ( volatile T &location, T value ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_release);\n        } else {\n            return __TBB_machine_generic_store8release(&location,value);\n        }\n    }\n};\n\ntemplate <typename T>\nstruct machine_load_store_relaxed<T,8> {\n    static T load( const volatile T& location ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            return __atomic_load_explicit(&location, memory_order_relaxed);\n        } else {\n            return __TBB_machine_generic_load8relaxed(&location);\n        }\n    }\n    static void store( volatile T &location, T value ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            __atomic_store_explicit(&location, icc_intrinsics_port::convert_argument(value), memory_order_relaxed);\n        } else {\n            return __TBB_machine_generic_store8relaxed(&location,value);\n        }\n    }\n};\n\ntemplate <typename T >\nstruct machine_load_store_seq_cst<T,8> {\n    static T load ( const volatile T& location ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            return __atomic_load_explicit(&location, memory_order_seq_cst);\n        } else {\n            return __TBB_machine_generic_load8full_fence(&location);\n        }\n\n    }\n\n    static void store ( volatile T &location, T value ) {\n        if( tbb::internal::is_aligned(&location,8)) {\n            __atomic_store_explicit(&location, value, memory_order_seq_cst);\n        } else {\n            return __TBB_machine_generic_store8full_fence(&location,value);\n        }\n\n    }\n};\n\n#endif\n}} // namespace tbb::internal\ntemplate <typename T>\ninline void __TBB_machine_OR( T *operand, T addend ) {\n    __atomic_fetch_or_explicit(operand, addend, tbb::internal::memory_order_seq_cst);\n}\n\ntemplate <typename T>\ninline void __TBB_machine_AND( T *operand, T addend ) {\n    __atomic_fetch_and_explicit(operand, addend, tbb::internal::memory_order_seq_cst);\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/linux_common.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_machine_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#include <sched.h>\n#define __TBB_Yield()  sched_yield()\n\n#include <unistd.h>\n/* Futex definitions */\n#include <sys/syscall.h>\n\n#if defined(SYS_futex)\n\n#define __TBB_USE_FUTEX 1\n#include <limits.h>\n#include <errno.h>\n// Unfortunately, some versions of Linux do not have a header that defines FUTEX_WAIT and FUTEX_WAKE.\n\n#ifdef FUTEX_WAIT\n#define __TBB_FUTEX_WAIT FUTEX_WAIT\n#else\n#define __TBB_FUTEX_WAIT 0\n#endif\n\n#ifdef FUTEX_WAKE\n#define __TBB_FUTEX_WAKE FUTEX_WAKE\n#else\n#define __TBB_FUTEX_WAKE 1\n#endif\n\n#ifndef __TBB_ASSERT\n#error machine specific headers must be included after tbb_stddef.h\n#endif\n\nnamespace tbb {\n\nnamespace internal {\n\ninline int futex_wait( void *futex, int comparand ) {\n    int r = syscall( SYS_futex,futex,__TBB_FUTEX_WAIT,comparand,NULL,NULL,0 );\n#if TBB_USE_ASSERT\n    int e = errno;\n    __TBB_ASSERT( r==0||r==EWOULDBLOCK||(r==-1&&(e==EAGAIN||e==EINTR)), \"futex_wait failed.\" );\n#endif /* TBB_USE_ASSERT */\n    return r;\n}\n\ninline int futex_wakeup_one( void *futex ) {\n    int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,1,NULL,NULL,0 );\n    __TBB_ASSERT( r==0||r==1, \"futex_wakeup_one: more than one thread woken up?\" );\n    return r;\n}\n\ninline int futex_wakeup_all( void *futex ) {\n    int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,INT_MAX,NULL,NULL,0 );\n    __TBB_ASSERT( r>=0, \"futex_wakeup_all: error in waking up threads\" );\n    return r;\n}\n\n} /* namespace internal */\n\n} /* namespace tbb */\n\n#endif /* SYS_futex */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/linux_ia32.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_ia32_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_linux_ia32_H\n\n#include <stdint.h>\n#include \"gcc_ia32_common.h\"\n\n#define __TBB_WORDSIZE 4\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#define __TBB_compiler_fence() __asm__ __volatile__(\"\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n#define __TBB_full_memory_fence()          __asm__ __volatile__(\"mfence\": : :\"memory\")\n\n#if __TBB_ICC_ASM_VOLATILE_BROKEN\n#define __TBB_VOLATILE\n#else\n#define __TBB_VOLATILE volatile\n#endif\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,X,R)                                        \\\nstatic inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand )  \\\n{                                                                                    \\\n    T result;                                                                        \\\n                                                                                     \\\n    __asm__ __volatile__(\"lock\\ncmpxchg\" X \" %2,%1\"                                  \\\n                          : \"=a\"(result), \"=m\"(*(__TBB_VOLATILE T*)ptr)              \\\n                          : \"q\"(value), \"0\"(comparand), \"m\"(*(__TBB_VOLATILE T*)ptr) \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend)              \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxadd\" X \" %0,%1\"                                     \\\n                          : R (result), \"=m\"(*(__TBB_VOLATILE T*)ptr)                \\\n                          : \"0\"(addend), \"m\"(*(__TBB_VOLATILE T*)ptr)                \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)            \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxchg\" X \" %0,%1\"                                     \\\n                          : R (result), \"=m\"(*(__TBB_VOLATILE T*)ptr)                \\\n                          : \"0\"(value), \"m\"(*(__TBB_VOLATILE T*)ptr)                 \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,int8_t,\"\",\"=q\")\n__TBB_MACHINE_DEFINE_ATOMICS(2,int16_t,\"\",\"=r\")\n__TBB_MACHINE_DEFINE_ATOMICS(4,int32_t,\"l\",\"=r\")\n\n#if __INTEL_COMPILER\n#pragma warning( push )\n// reference to EBX in a function requiring stack alignment\n#pragma warning( disable: 998 )\n#endif\n\n#if __TBB_GCC_CAS8_BUILTIN_INLINING_BROKEN\n#define  __TBB_IA32_CAS8_NOINLINE  __attribute__ ((noinline))\n#else\n#define  __TBB_IA32_CAS8_NOINLINE\n#endif\n\nstatic inline __TBB_IA32_CAS8_NOINLINE int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )  {\n//TODO: remove the extra part of condition once __TBB_GCC_BUILTIN_ATOMICS_PRESENT is lowered to gcc version 4.1.2\n#if (__TBB_GCC_BUILTIN_ATOMICS_PRESENT || (__TBB_GCC_VERSION >= 40102)) && !__TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN\n    return __sync_val_compare_and_swap( reinterpret_cast<volatile int64_t*>(ptr), comparand, value );\n#else /* !__TBB_GCC_BUILTIN_ATOMICS_PRESENT */\n    //TODO: look like ICC 13.0 has some issues with this code, investigate it more deeply\n    int64_t result;\n    union {\n        int64_t i64;\n        int32_t i32[2];\n    };\n    i64 = value;\n#if __PIC__\n    /* compiling position-independent code */\n    // EBX register preserved for compliance with position-independent code rules on IA32\n    int32_t tmp;\n    __asm__ __volatile__ (\n            \"movl  %%ebx,%2\\n\\t\"\n            \"movl  %5,%%ebx\\n\\t\"\n#if __GNUC__==3\n            \"lock\\n\\t cmpxchg8b %1\\n\\t\"\n#else\n            \"lock\\n\\t cmpxchg8b (%3)\\n\\t\"\n#endif\n            \"movl  %2,%%ebx\"\n             : \"=A\"(result)\n             , \"=m\"(*(__TBB_VOLATILE int64_t *)ptr)\n             , \"=m\"(tmp)\n#if __GNUC__==3\n             : \"m\"(*(__TBB_VOLATILE int64_t *)ptr)\n#else\n             : \"SD\"(ptr)\n#endif\n             , \"0\"(comparand)\n             , \"m\"(i32[0]), \"c\"(i32[1])\n             : \"memory\"\n#if __INTEL_COMPILER\n             ,\"ebx\"\n#endif\n    );\n#else /* !__PIC__ */\n    __asm__ __volatile__ (\n            \"lock\\n\\t cmpxchg8b %1\\n\\t\"\n             : \"=A\"(result), \"=m\"(*(__TBB_VOLATILE int64_t *)ptr)\n             : \"m\"(*(__TBB_VOLATILE int64_t *)ptr)\n             , \"0\"(comparand)\n             , \"b\"(i32[0]), \"c\"(i32[1])\n             : \"memory\"\n    );\n#endif /* __PIC__ */\n    return result;\n#endif /* !__TBB_GCC_BUILTIN_ATOMICS_PRESENT */\n}\n\n#undef __TBB_IA32_CAS8_NOINLINE\n\n#if __INTEL_COMPILER\n#pragma warning( pop )\n#endif // warning 998 is back\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uint32_t addend ) {\n    __asm__ __volatile__(\"lock\\norl %1,%0\" : \"=m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"r\"(addend), \"m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"memory\");\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uint32_t addend ) {\n    __asm__ __volatile__(\"lock\\nandl %1,%0\" : \"=m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"r\"(addend), \"m\"(*(__TBB_VOLATILE uint32_t *)ptr) : \"memory\");\n}\n\n//TODO: Check if it possible and profitable for IA-32 architecture on (Linux* and Windows*)\n//to use of 64-bit load/store via floating point registers together with full fence\n//for sequentially consistent load/store, instead of CAS.\n\n#if __clang__\n#define __TBB_fildq  \"fildll\"\n#define __TBB_fistpq \"fistpll\"\n#else\n#define __TBB_fildq  \"fildq\"\n#define __TBB_fistpq \"fistpq\"\n#endif\n\nstatic inline int64_t __TBB_machine_aligned_load8 (const volatile void *ptr) {\n    __TBB_ASSERT(tbb::internal::is_aligned(ptr,8),\"__TBB_machine_aligned_load8 should be used with 8 byte aligned locations only \\n\");\n    int64_t result;\n    __asm__ __volatile__ ( __TBB_fildq  \" %1\\n\\t\"\n                           __TBB_fistpq \" %0\" :  \"=m\"(result) : \"m\"(*(const __TBB_VOLATILE uint64_t*)ptr) : \"memory\" );\n    return result;\n}\n\nstatic inline void __TBB_machine_aligned_store8 (volatile void *ptr, int64_t value ) {\n    __TBB_ASSERT(tbb::internal::is_aligned(ptr,8),\"__TBB_machine_aligned_store8 should be used with 8 byte aligned locations only \\n\");\n    // Aligned store\n    __asm__ __volatile__ ( __TBB_fildq  \" %1\\n\\t\"\n                           __TBB_fistpq \" %0\" :  \"=m\"(*(__TBB_VOLATILE int64_t*)ptr) : \"m\"(value) : \"memory\" );\n}\n\nstatic inline int64_t __TBB_machine_load8 (const volatile void *ptr) {\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    if( tbb::internal::is_aligned(ptr,8)) {\n#endif\n        return __TBB_machine_aligned_load8(ptr);\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    } else {\n        // Unaligned load\n        return __TBB_machine_cmpswp8(const_cast<void*>(ptr),0,0);\n    }\n#endif\n}\n\n//! Handles misaligned 8-byte store\n/** Defined in tbb_misc.cpp */\nextern \"C\" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value );\nextern \"C\" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr );\n\nstatic inline void __TBB_machine_store8(volatile void *ptr, int64_t value) {\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    if( tbb::internal::is_aligned(ptr,8)) {\n#endif\n        __TBB_machine_aligned_store8(ptr,value);\n#if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN\n    } else {\n        // Unaligned store\n#if TBB_USE_PERFORMANCE_WARNINGS\n        __TBB_machine_store8_slow_perf_warning(ptr);\n#endif /* TBB_USE_PERFORMANCE_WARNINGS */\n        __TBB_machine_store8_slow(ptr,value);\n    }\n#endif\n}\n\n// Machine specific atomic operations\n#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)\n\n#define __TBB_USE_GENERIC_DWORD_FETCH_ADD                   1\n#define __TBB_USE_GENERIC_DWORD_FETCH_STORE                 1\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/linux_ia64.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_ia64_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_linux_ia64_H\n\n#include <stdint.h>\n#include <ia64intrin.h>\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#if __INTEL_COMPILER\n    #define __TBB_compiler_fence()\n    #define __TBB_control_consistency_helper() __TBB_compiler_fence()\n    #define __TBB_acquire_consistency_helper()\n    #define __TBB_release_consistency_helper()\n    #define __TBB_full_memory_fence()          __mf()\n#else\n    #define __TBB_compiler_fence() __asm__ __volatile__(\"\": : :\"memory\")\n    #define __TBB_control_consistency_helper() __TBB_compiler_fence()\n    // Even though GCC imbues volatile loads with acquire semantics, it sometimes moves\n    // loads over the acquire fence. The following helpers stop such incorrect code motion.\n    #define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n    #define __TBB_release_consistency_helper() __TBB_compiler_fence()\n    #define __TBB_full_memory_fence()          __asm__ __volatile__(\"mf\": : :\"memory\")\n#endif /* !__INTEL_COMPILER */\n\n// Most of the functions will be in a .s file\n// TODO: revise dynamic_link, memory pools and etc. if the library dependency is removed.\n\nextern \"C\" {\n    int8_t __TBB_machine_fetchadd1__TBB_full_fence (volatile void *ptr, int8_t addend);\n    int8_t __TBB_machine_fetchadd1acquire(volatile void *ptr, int8_t addend);\n    int8_t __TBB_machine_fetchadd1release(volatile void *ptr, int8_t addend);\n\n    int16_t __TBB_machine_fetchadd2__TBB_full_fence (volatile void *ptr, int16_t addend);\n    int16_t __TBB_machine_fetchadd2acquire(volatile void *ptr, int16_t addend);\n    int16_t __TBB_machine_fetchadd2release(volatile void *ptr, int16_t addend);\n\n    int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value);\n    int32_t __TBB_machine_fetchadd4acquire(volatile void *ptr, int32_t addend);\n    int32_t __TBB_machine_fetchadd4release(volatile void *ptr, int32_t addend);\n\n    int64_t __TBB_machine_fetchadd8__TBB_full_fence (volatile void *ptr, int64_t value);\n    int64_t __TBB_machine_fetchadd8acquire(volatile void *ptr, int64_t addend);\n    int64_t __TBB_machine_fetchadd8release(volatile void *ptr, int64_t addend);\n\n    int8_t __TBB_machine_fetchstore1__TBB_full_fence (volatile void *ptr, int8_t value);\n    int8_t __TBB_machine_fetchstore1acquire(volatile void *ptr, int8_t value);\n    int8_t __TBB_machine_fetchstore1release(volatile void *ptr, int8_t value);\n\n    int16_t __TBB_machine_fetchstore2__TBB_full_fence (volatile void *ptr, int16_t value);\n    int16_t __TBB_machine_fetchstore2acquire(volatile void *ptr, int16_t value);\n    int16_t __TBB_machine_fetchstore2release(volatile void *ptr, int16_t value);\n\n    int32_t __TBB_machine_fetchstore4__TBB_full_fence (volatile void *ptr, int32_t value);\n    int32_t __TBB_machine_fetchstore4acquire(volatile void *ptr, int32_t value);\n    int32_t __TBB_machine_fetchstore4release(volatile void *ptr, int32_t value);\n\n    int64_t __TBB_machine_fetchstore8__TBB_full_fence (volatile void *ptr, int64_t value);\n    int64_t __TBB_machine_fetchstore8acquire(volatile void *ptr, int64_t value);\n    int64_t __TBB_machine_fetchstore8release(volatile void *ptr, int64_t value);\n\n    int8_t __TBB_machine_cmpswp1__TBB_full_fence (volatile void *ptr, int8_t value, int8_t comparand);\n    int8_t __TBB_machine_cmpswp1acquire(volatile void *ptr, int8_t value, int8_t comparand);\n    int8_t __TBB_machine_cmpswp1release(volatile void *ptr, int8_t value, int8_t comparand);\n\n    int16_t __TBB_machine_cmpswp2__TBB_full_fence (volatile void *ptr, int16_t value, int16_t comparand);\n    int16_t __TBB_machine_cmpswp2acquire(volatile void *ptr, int16_t value, int16_t comparand);\n    int16_t __TBB_machine_cmpswp2release(volatile void *ptr, int16_t value, int16_t comparand);\n\n    int32_t __TBB_machine_cmpswp4__TBB_full_fence (volatile void *ptr, int32_t value, int32_t comparand);\n    int32_t __TBB_machine_cmpswp4acquire(volatile void *ptr, int32_t value, int32_t comparand);\n    int32_t __TBB_machine_cmpswp4release(volatile void *ptr, int32_t value, int32_t comparand);\n\n    int64_t __TBB_machine_cmpswp8__TBB_full_fence (volatile void *ptr, int64_t value, int64_t comparand);\n    int64_t __TBB_machine_cmpswp8acquire(volatile void *ptr, int64_t value, int64_t comparand);\n    int64_t __TBB_machine_cmpswp8release(volatile void *ptr, int64_t value, int64_t comparand);\n\n    int64_t __TBB_machine_lg(uint64_t value);\n    void __TBB_machine_pause(int32_t delay);\n    bool __TBB_machine_trylockbyte( volatile unsigned char &ptr );\n    int64_t __TBB_machine_lockbyte( volatile unsigned char &ptr );\n\n    //! Retrieves the current RSE backing store pointer. IA64 specific.\n    void* __TBB_get_bsp();\n\n    int32_t __TBB_machine_load1_relaxed(const void *ptr);\n    int32_t __TBB_machine_load2_relaxed(const void *ptr);\n    int32_t __TBB_machine_load4_relaxed(const void *ptr);\n    int64_t __TBB_machine_load8_relaxed(const void *ptr);\n\n    void __TBB_machine_store1_relaxed(void *ptr, int32_t value);\n    void __TBB_machine_store2_relaxed(void *ptr, int32_t value);\n    void __TBB_machine_store4_relaxed(void *ptr, int32_t value);\n    void __TBB_machine_store8_relaxed(void *ptr, int64_t value);\n} // extern \"C\"\n\n// Mapping old entry points to the names corresponding to the new full_fence identifier.\n#define __TBB_machine_fetchadd1full_fence   __TBB_machine_fetchadd1__TBB_full_fence\n#define __TBB_machine_fetchadd2full_fence   __TBB_machine_fetchadd2__TBB_full_fence\n#define __TBB_machine_fetchadd4full_fence   __TBB_machine_fetchadd4__TBB_full_fence\n#define __TBB_machine_fetchadd8full_fence   __TBB_machine_fetchadd8__TBB_full_fence\n#define __TBB_machine_fetchstore1full_fence __TBB_machine_fetchstore1__TBB_full_fence\n#define __TBB_machine_fetchstore2full_fence __TBB_machine_fetchstore2__TBB_full_fence\n#define __TBB_machine_fetchstore4full_fence __TBB_machine_fetchstore4__TBB_full_fence\n#define __TBB_machine_fetchstore8full_fence __TBB_machine_fetchstore8__TBB_full_fence\n#define __TBB_machine_cmpswp1full_fence     __TBB_machine_cmpswp1__TBB_full_fence\n#define __TBB_machine_cmpswp2full_fence     __TBB_machine_cmpswp2__TBB_full_fence\n#define __TBB_machine_cmpswp4full_fence     __TBB_machine_cmpswp4__TBB_full_fence\n#define __TBB_machine_cmpswp8full_fence     __TBB_machine_cmpswp8__TBB_full_fence\n\n// Mapping relaxed operations to the entry points implementing them.\n/** On IA64 RMW operations implicitly have acquire semantics. Thus one cannot\n    actually have completely relaxed RMW operation here. **/\n#define __TBB_machine_fetchadd1relaxed      __TBB_machine_fetchadd1acquire\n#define __TBB_machine_fetchadd2relaxed      __TBB_machine_fetchadd2acquire\n#define __TBB_machine_fetchadd4relaxed      __TBB_machine_fetchadd4acquire\n#define __TBB_machine_fetchadd8relaxed      __TBB_machine_fetchadd8acquire\n#define __TBB_machine_fetchstore1relaxed    __TBB_machine_fetchstore1acquire\n#define __TBB_machine_fetchstore2relaxed    __TBB_machine_fetchstore2acquire\n#define __TBB_machine_fetchstore4relaxed    __TBB_machine_fetchstore4acquire\n#define __TBB_machine_fetchstore8relaxed    __TBB_machine_fetchstore8acquire\n#define __TBB_machine_cmpswp1relaxed        __TBB_machine_cmpswp1acquire\n#define __TBB_machine_cmpswp2relaxed        __TBB_machine_cmpswp2acquire\n#define __TBB_machine_cmpswp4relaxed        __TBB_machine_cmpswp4acquire\n#define __TBB_machine_cmpswp8relaxed        __TBB_machine_cmpswp8acquire\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,V)                               \\\n    template <typename T>                                               \\\n    struct machine_load_store_relaxed<T,S> {                      \\\n        static inline T load ( const T& location ) {                    \\\n            return (T)__TBB_machine_load##S##_relaxed(&location);       \\\n        }                                                               \\\n        static inline void store ( T& location, T value ) {             \\\n            __TBB_machine_store##S##_relaxed(&location, (V)value);      \\\n        }                                                               \\\n    }\n\nnamespace tbb {\nnamespace internal {\n    __TBB_MACHINE_DEFINE_ATOMICS(1,int8_t);\n    __TBB_MACHINE_DEFINE_ATOMICS(2,int16_t);\n    __TBB_MACHINE_DEFINE_ATOMICS(4,int32_t);\n    __TBB_MACHINE_DEFINE_ATOMICS(8,int64_t);\n}} // namespaces internal, tbb\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\n#define __TBB_USE_FENCED_ATOMICS                            1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n// Definition of Lock functions\n#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)\n#define __TBB_LockByte(P)    __TBB_machine_lockbyte(P)\n\n// Definition of other utility functions\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n#define __TBB_Log2(V)  __TBB_machine_lg(V)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/linux_intel64.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_intel64_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_linux_intel64_H\n\n#include <stdint.h>\n#include \"gcc_ia32_common.h\"\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#define __TBB_compiler_fence() __asm__ __volatile__(\"\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n\n#ifndef __TBB_full_memory_fence\n#define __TBB_full_memory_fence() __asm__ __volatile__(\"mfence\": : :\"memory\")\n#endif\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,X)                                          \\\nstatic inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand )  \\\n{                                                                                    \\\n    T result;                                                                        \\\n                                                                                     \\\n    __asm__ __volatile__(\"lock\\ncmpxchg\" X \" %2,%1\"                                  \\\n                          : \"=a\"(result), \"=m\"(*(volatile T*)ptr)                    \\\n                          : \"q\"(value), \"0\"(comparand), \"m\"(*(volatile T*)ptr)       \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend)              \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxadd\" X \" %0,%1\"                                     \\\n                          : \"=r\"(result),\"=m\"(*(volatile T*)ptr)                     \\\n                          : \"0\"(addend), \"m\"(*(volatile T*)ptr)                      \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n                                                                                     \\\nstatic inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)            \\\n{                                                                                    \\\n    T result;                                                                        \\\n    __asm__ __volatile__(\"lock\\nxchg\" X \" %0,%1\"                                     \\\n                          : \"=r\"(result),\"=m\"(*(volatile T*)ptr)                     \\\n                          : \"0\"(value), \"m\"(*(volatile T*)ptr)                       \\\n                          : \"memory\");                                               \\\n    return result;                                                                   \\\n}                                                                                    \\\n\n__TBB_MACHINE_DEFINE_ATOMICS(1,int8_t,\"\")\n__TBB_MACHINE_DEFINE_ATOMICS(2,int16_t,\"\")\n__TBB_MACHINE_DEFINE_ATOMICS(4,int32_t,\"\")\n__TBB_MACHINE_DEFINE_ATOMICS(8,int64_t,\"q\")\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uint64_t value ) {\n    __asm__ __volatile__(\"lock\\norq %1,%0\" : \"=m\"(*(volatile uint64_t*)ptr) : \"r\"(value), \"m\"(*(volatile uint64_t*)ptr) : \"memory\");\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uint64_t value ) {\n    __asm__ __volatile__(\"lock\\nandq %1,%0\" : \"=m\"(*(volatile uint64_t*)ptr) : \"r\"(value), \"m\"(*(volatile uint64_t*)ptr) : \"memory\");\n}\n\n#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)\n\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/mac_ppc.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_gcc_power_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_gcc_power_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n// TODO: rename to gcc_power.h?\n// This file is for Power Architecture with compilers supporting GNU inline-assembler syntax (currently GNU g++ and IBM XL).\n// Note that XL V9.0 (sometimes?) has trouble dealing with empty input and/or clobber lists, so they should be avoided.\n\n#if __powerpc64__ || __ppc64__\n    // IBM XL documents __powerpc64__ (and __PPC64__).\n    // Apple documents __ppc64__ (with __ppc__ only on 32-bit).\n    #define __TBB_WORDSIZE 8\n#else\n    #define __TBB_WORDSIZE 4\n#endif\n\n// Traditionally Power Architecture is big-endian.\n// Little-endian could be just an address manipulation (compatibility with TBB not verified),\n// or normal little-endian (on more recent systems). Embedded PowerPC systems may support\n// page-specific endianness, but then one endianness must be hidden from TBB so that it still sees only one.\n#if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#elif defined(__BYTE_ORDER__)\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n// On Power Architecture, (lock-free) 64-bit atomics require 64-bit hardware:\n#if __TBB_WORDSIZE==8\n    // Do not change the following definition, because TBB itself will use 64-bit atomics in 64-bit builds.\n    #define __TBB_64BIT_ATOMICS 1\n#elif __bgp__\n    // Do not change the following definition, because this is known 32-bit hardware.\n    #define __TBB_64BIT_ATOMICS 0\n#else\n    // To enable 64-bit atomics in 32-bit builds, set the value below to 1 instead of 0.\n    // You must make certain that the program will only use them on actual 64-bit hardware\n    // (which typically means that the entire program is only executed on such hardware),\n    // because their implementation involves machine instructions that are illegal elsewhere.\n    // The setting can be chosen independently per compilation unit,\n    // which also means that TBB itself does not need to be rebuilt.\n    // Alternatively (but only for the current architecture and TBB version),\n    // override the default as a predefined macro when invoking the compiler.\n    #ifndef __TBB_64BIT_ATOMICS\n    #define __TBB_64BIT_ATOMICS 0\n    #endif\n#endif\n\ninline int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t comparand )\n{\n    int32_t result;\n\n    __asm__ __volatile__(\"sync\\n\"\n                         \"0:\\n\\t\"\n                         \"lwarx %[res],0,%[ptr]\\n\\t\"     /* load w/ reservation */\n                         \"cmpw %[res],%[cmp]\\n\\t\"        /* compare against comparand */\n                         \"bne- 1f\\n\\t\"                   /* exit if not same */\n                         \"stwcx. %[val],0,%[ptr]\\n\\t\"    /* store new value */\n                         \"bne- 0b\\n\"                     /* retry if reservation lost */\n                         \"1:\\n\\t\"                        /* the exit */\n                         \"isync\"\n                         : [res]\"=&r\"(result)\n                         , \"+m\"(* (int32_t*) ptr)        /* redundant with \"memory\" */\n                         : [ptr]\"r\"(ptr)\n                         , [val]\"r\"(value)\n                         , [cmp]\"r\"(comparand)\n                         : \"memory\"                      /* compiler full fence */\n                         , \"cr0\"                         /* clobbered by cmp and/or stwcx. */\n                         );\n    return result;\n}\n\n#if __TBB_WORDSIZE==8\n\ninline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )\n{\n    int64_t result;\n    __asm__ __volatile__(\"sync\\n\"\n                         \"0:\\n\\t\"\n                         \"ldarx %[res],0,%[ptr]\\n\\t\"     /* load w/ reservation */\n                         \"cmpd %[res],%[cmp]\\n\\t\"        /* compare against comparand */\n                         \"bne- 1f\\n\\t\"                   /* exit if not same */\n                         \"stdcx. %[val],0,%[ptr]\\n\\t\"    /* store new value */\n                         \"bne- 0b\\n\"                     /* retry if reservation lost */\n                         \"1:\\n\\t\"                        /* the exit */\n                         \"isync\"\n                         : [res]\"=&r\"(result)\n                         , \"+m\"(* (int64_t*) ptr)        /* redundant with \"memory\" */\n                         : [ptr]\"r\"(ptr)\n                         , [val]\"r\"(value)\n                         , [cmp]\"r\"(comparand)\n                         : \"memory\"                      /* compiler full fence */\n                         , \"cr0\"                         /* clobbered by cmp and/or stdcx. */\n                         );\n    return result;\n}\n\n#elif __TBB_64BIT_ATOMICS /* && __TBB_WORDSIZE==4 */\n\ninline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )\n{\n    int64_t result;\n    int64_t value_register, comparand_register, result_register; // dummy variables to allocate registers\n    __asm__ __volatile__(\"sync\\n\\t\"\n                         \"ld %[val],%[valm]\\n\\t\"\n                         \"ld %[cmp],%[cmpm]\\n\"\n                         \"0:\\n\\t\"\n                         \"ldarx %[res],0,%[ptr]\\n\\t\"     /* load w/ reservation */\n                         \"cmpd %[res],%[cmp]\\n\\t\"        /* compare against comparand */\n                         \"bne- 1f\\n\\t\"                   /* exit if not same */\n                         \"stdcx. %[val],0,%[ptr]\\n\\t\"    /* store new value */\n                         \"bne- 0b\\n\"                     /* retry if reservation lost */\n                         \"1:\\n\\t\"                        /* the exit */\n                         \"std %[res],%[resm]\\n\\t\"\n                         \"isync\"\n                         : [resm]\"=m\"(result)\n                         , [res] \"=&r\"(   result_register)\n                         , [val] \"=&r\"(    value_register)\n                         , [cmp] \"=&r\"(comparand_register)\n                         , \"+m\"(* (int64_t*) ptr)        /* redundant with \"memory\" */\n                         : [ptr] \"r\"(ptr)\n                         , [valm]\"m\"(value)\n                         , [cmpm]\"m\"(comparand)\n                         : \"memory\"                      /* compiler full fence */\n                         , \"cr0\"                         /* clobbered by cmpd and/or stdcx. */\n                         );\n    return result;\n}\n\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n\n#define __TBB_MACHINE_DEFINE_LOAD_STORE(S,ldx,stx,cmpx)                                                       \\\n    template <typename T>                                                                                     \\\n    struct machine_load_store<T,S> {                                                                          \\\n        static inline T load_with_acquire(const volatile T& location) {                                       \\\n            T result;                                                                                         \\\n            __asm__ __volatile__(ldx \" %[res],0(%[ptr])\\n\"                                                    \\\n                                 \"0:\\n\\t\"                                                                     \\\n                                 cmpx \" %[res],%[res]\\n\\t\"                                                    \\\n                                 \"bne- 0b\\n\\t\"                                                                \\\n                                 \"isync\"                                                                      \\\n                                 : [res]\"=r\"(result)                                                          \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , \"m\"(location)       /* redundant with \"memory\" */                          \\\n                                 : \"memory\"            /* compiler acquire fence */                           \\\n                                 , \"cr0\"               /* clobbered by cmpw/cmpd */);                         \\\n            return result;                                                                                    \\\n        }                                                                                                     \\\n        static inline void store_with_release(volatile T &location, T value) {                                \\\n            __asm__ __volatile__(\"lwsync\\n\\t\"                                                                 \\\n                                 stx \" %[val],0(%[ptr])\"                                                      \\\n                                 : \"=m\"(location)      /* redundant with \"memory\" */                          \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , [val]\"r\"(value)                                                            \\\n                                 : \"memory\"/*compiler release fence*/ /*(cr0 not affected)*/);                \\\n        }                                                                                                     \\\n    };                                                                                                        \\\n                                                                                                              \\\n    template <typename T>                                                                                     \\\n    struct machine_load_store_relaxed<T,S> {                                                                  \\\n        static inline T load (const __TBB_atomic T& location) {                                               \\\n            T result;                                                                                         \\\n            __asm__ __volatile__(ldx \" %[res],0(%[ptr])\"                                                      \\\n                                 : [res]\"=r\"(result)                                                          \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , \"m\"(location)                                                              \\\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/                            \\\n            return result;                                                                                    \\\n        }                                                                                                     \\\n        static inline void store (__TBB_atomic T &location, T value) {                                        \\\n            __asm__ __volatile__(stx \" %[val],0(%[ptr])\"                                                      \\\n                                 : \"=m\"(location)                                                             \\\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */                       \\\n                                 , [val]\"r\"(value)                                                            \\\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/                            \\\n        }                                                                                                     \\\n    };\n\nnamespace tbb {\nnamespace internal {\n    __TBB_MACHINE_DEFINE_LOAD_STORE(1,\"lbz\",\"stb\",\"cmpw\")\n    __TBB_MACHINE_DEFINE_LOAD_STORE(2,\"lhz\",\"sth\",\"cmpw\")\n    __TBB_MACHINE_DEFINE_LOAD_STORE(4,\"lwz\",\"stw\",\"cmpw\")\n\n#if __TBB_WORDSIZE==8\n\n    __TBB_MACHINE_DEFINE_LOAD_STORE(8,\"ld\" ,\"std\",\"cmpd\")\n\n#elif __TBB_64BIT_ATOMICS /* && __TBB_WORDSIZE==4 */\n\n    template <typename T>\n    struct machine_load_store<T,8> {\n        static inline T load_with_acquire(const volatile T& location) {\n            T result;\n            T result_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"ld %[res],0(%[ptr])\\n\\t\"\n                                 \"std %[res],%[resm]\\n\"\n                                 \"0:\\n\\t\"\n                                 \"cmpd %[res],%[res]\\n\\t\"\n                                 \"bne- 0b\\n\\t\"\n                                 \"isync\"\n                                 : [resm]\"=m\"(result)\n                                 , [res]\"=&r\"(result_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , \"m\"(location)       /* redundant with \"memory\" */\n                                 : \"memory\"            /* compiler acquire fence */\n                                 , \"cr0\"               /* clobbered by cmpd */);\n            return result;\n        }\n\n        static inline void store_with_release(volatile T &location, T value) {\n            T value_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"lwsync\\n\\t\"\n                                 \"ld %[val],%[valm]\\n\\t\"\n                                 \"std %[val],0(%[ptr])\"\n                                 : \"=m\"(location)      /* redundant with \"memory\" */\n                                 , [val]\"=&r\"(value_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , [valm]\"m\"(value)\n                                 : \"memory\"/*compiler release fence*/ /*(cr0 not affected)*/);\n        }\n    };\n\n    struct machine_load_store_relaxed<T,8> {\n        static inline T load (const volatile T& location) {\n            T result;\n            T result_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"ld %[res],0(%[ptr])\\n\\t\"\n                                 \"std %[res],%[resm]\"\n                                 : [resm]\"=m\"(result)\n                                 , [res]\"=&r\"(result_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , \"m\"(location)\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/\n            return result;\n        }\n\n        static inline void store (volatile T &location, T value) {\n            T value_register; // dummy variable to allocate a register\n            __asm__ __volatile__(\"ld %[val],%[valm]\\n\\t\"\n                                 \"std %[val],0(%[ptr])\"\n                                 : \"=m\"(location)\n                                 , [val]\"=&r\"(value_register)\n                                 : [ptr]\"b\"(&location) /* cannot use register 0 here */\n                                 , [valm]\"m\"(value)\n                                 ); /*(no compiler fence)*/ /*(cr0 not affected)*/\n        }\n    };\n    #define __TBB_machine_load_store_relaxed_8\n\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n\n}} // namespaces internal, tbb\n\n#undef __TBB_MACHINE_DEFINE_LOAD_STORE\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_FETCH_ADD                         1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#define __TBB_control_consistency_helper() __asm__ __volatile__(\"isync\": : :\"memory\")\n#define __TBB_full_memory_fence()          __asm__ __volatile__( \"sync\": : :\"memory\")\n\nstatic inline intptr_t __TBB_machine_lg( uintptr_t x ) {\n    __TBB_ASSERT(x, \"__TBB_Log2(0) undefined\");\n    // cntlzd/cntlzw starts counting at 2^63/2^31 (ignoring any higher-order bits), and does not affect cr0\n#if __TBB_WORDSIZE==8\n    __asm__ __volatile__ (\"cntlzd %0,%0\" : \"+r\"(x));\n    return 63-static_cast<intptr_t>(x);\n#else\n    __asm__ __volatile__ (\"cntlzw %0,%0\" : \"+r\"(x));\n    return 31-static_cast<intptr_t>(x);\n#endif\n}\n#define __TBB_Log2(V) __TBB_machine_lg(V)\n\n// Assumes implicit alignment for any 32-bit value\ntypedef uint32_t __TBB_Flag;\n#define __TBB_Flag __TBB_Flag\n\ninline bool __TBB_machine_trylockbyte( __TBB_atomic __TBB_Flag &flag ) {\n    return __TBB_machine_cmpswp4(&flag,1,0)==0;\n}\n#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/macos_common.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_macos_common_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_macos_common_H\n\n#include <sched.h>\n#define __TBB_Yield()  sched_yield()\n\n// __TBB_HardwareConcurrency\n\n#include <sys/types.h>\n#include <sys/sysctl.h>\n\nstatic inline int __TBB_macos_available_cpu() {\n    int name[2] = {CTL_HW, HW_AVAILCPU};\n    int ncpu;\n    size_t size = sizeof(ncpu);\n    sysctl( name, 2, &ncpu, &size, NULL, 0 );\n    return ncpu;\n}\n\n#define __TBB_HardwareConcurrency() __TBB_macos_available_cpu()\n\n#ifndef __TBB_full_memory_fence\n    // TBB has not recognized the architecture (none of the architecture abstraction\n    // headers was included).\n    #define __TBB_UnknownArchitecture 1\n#endif\n\n#if __TBB_UnknownArchitecture\n// Implementation of atomic operations based on OS provided primitives\n#include <libkern/OSAtomic.h>\n\nstatic inline int64_t __TBB_machine_cmpswp8_OsX(volatile void *ptr, int64_t value, int64_t comparand)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), \"address not properly aligned for OS X* atomics\");\n    int64_t* address = (int64_t*)ptr;\n    while( !OSAtomicCompareAndSwap64Barrier(comparand, value, address) ){\n#if __TBB_WORDSIZE==8\n        int64_t snapshot = *address;\n#else\n        int64_t snapshot = OSAtomicAdd64( 0, address );\n#endif\n        if( snapshot!=comparand ) return snapshot;\n    }\n    return comparand;\n}\n\n#define __TBB_machine_cmpswp8 __TBB_machine_cmpswp8_OsX\n\n#endif /* __TBB_UnknownArchitecture */\n\n#if __TBB_UnknownArchitecture\n\n#ifndef __TBB_WORDSIZE\n#define __TBB_WORDSIZE __SIZEOF_POINTER__\n#endif\n\n#ifdef __TBB_ENDIANNESS\n    // Already determined based on hardware architecture.\n#elif __BIG_ENDIAN__\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n#elif __LITTLE_ENDIAN__\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n#else\n    #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n#endif\n\n/** As this generic implementation has absolutely no information about underlying\n    hardware, its performance most likely will be sub-optimal because of full memory\n    fence usages where a more lightweight synchronization means (or none at all)\n    could suffice. Thus if you use this header to enable TBB on a new platform,\n    consider forking it and relaxing below helpers as appropriate. **/\n#define __TBB_control_consistency_helper() OSMemoryBarrier()\n#define __TBB_acquire_consistency_helper() OSMemoryBarrier()\n#define __TBB_release_consistency_helper() OSMemoryBarrier()\n#define __TBB_full_memory_fence()          OSMemoryBarrier()\n\nstatic inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), \"address not properly aligned for OS X* atomics\");\n    int32_t* address = (int32_t*)ptr;\n    while( !OSAtomicCompareAndSwap32Barrier(comparand, value, address) ){\n        int32_t snapshot = *address;\n        if( snapshot!=comparand ) return snapshot;\n    }\n    return comparand;\n}\n\nstatic inline int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,4), \"address not properly aligned for OS X* atomics\");\n    return OSAtomicAdd32Barrier(addend, (int32_t*)ptr) - addend;\n}\n\nstatic inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend)\n{\n    __TBB_ASSERT( tbb::internal::is_aligned(ptr,8), \"address not properly aligned for OS X* atomics\");\n    return OSAtomicAdd64Barrier(addend, (int64_t*)ptr) - addend;\n}\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD               1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#if __TBB_WORDSIZE == 4\n    #define __TBB_USE_GENERIC_DWORD_LOAD_STORE              1\n#endif\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#endif /* __TBB_UnknownArchitecture */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/mic_common.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_mic_common_H\n#define __TBB_mic_common_H\n\n#ifndef __TBB_machine_H\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#if ! __TBB_DEFINE_MIC\n    #error mic_common.h should be included only when building for Intel(R) Many Integrated Core Architecture\n#endif\n\n#ifndef __TBB_PREFETCHING\n#define __TBB_PREFETCHING 1\n#endif\n#if __TBB_PREFETCHING\n#include <immintrin.h>\n#define __TBB_cl_prefetch(p) _mm_prefetch((const char*)p, _MM_HINT_T1)\n#define __TBB_cl_evict(p) _mm_clevict(p, _MM_HINT_T1)\n#endif\n\n/** Intel(R) Many Integrated Core Architecture does not support mfence and pause instructions **/\n#define __TBB_full_memory_fence() __asm__ __volatile__(\"lock; addl $0,(%%rsp)\":::\"memory\")\n#define __TBB_Pause(x) _mm_delay_32(16*(x))\n#define __TBB_STEALING_PAUSE 1500/16\n#include <sched.h>\n#define __TBB_Yield() sched_yield()\n\n/** Specifics **/\n#define __TBB_STEALING_ABORT_ON_CONTENTION 1\n#define __TBB_YIELD2P 1\n#define __TBB_HOARD_NONLOCAL_TASKS 1\n\n#if ! ( __FreeBSD__ || __linux__ )\n    #error Intel(R) Many Integrated Core Compiler does not define __FreeBSD__ or __linux__ anymore. Check for the __TBB_XXX_BROKEN defined under __FreeBSD__ or __linux__.\n#endif /* ! ( __FreeBSD__ || __linux__ ) */\n\n#endif /* __TBB_mic_common_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/msvc_armv7.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_msvc_armv7_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_msvc_armv7_H\n\n#include <intrin.h>\n#include <float.h>\n\n#define __TBB_WORDSIZE 4\n\n#define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED\n\n#if defined(TBB_WIN32_USE_CL_BUILTINS)\n// We can test this on _M_IX86\n#pragma intrinsic(_ReadWriteBarrier)\n#pragma intrinsic(_mm_mfence)\n#define __TBB_compiler_fence()    _ReadWriteBarrier()\n#define __TBB_full_memory_fence() _mm_mfence()\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n#else\n//Now __dmb(_ARM_BARRIER_SY) is used for both compiler and memory fences\n//This might be changed later after testing\n#define __TBB_compiler_fence()    __dmb(_ARM_BARRIER_SY)\n#define __TBB_full_memory_fence() __dmb(_ARM_BARRIER_SY)\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_full_memory_fence()\n#define __TBB_release_consistency_helper() __TBB_full_memory_fence()\n#endif\n\n//--------------------------------------------------\n// Compare and swap\n//--------------------------------------------------\n\n/**\n * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n * @return value originally in memory at ptr, regardless of success\n*/\n\n#define __TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(S,T,F)                                               \\\ninline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                   \\\n    return _InterlockedCompareExchange##F(reinterpret_cast<volatile T *>(ptr),value,comparand);  \\\n}                                                                                                \\\n\n#define __TBB_MACHINE_DEFINE_ATOMICS_FETCHADD(S,T,F)                                             \\\ninline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                              \\\n    return _InterlockedExchangeAdd##F(reinterpret_cast<volatile T *>(ptr),value);                \\\n}                                                                                                \\\n\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(1,char,8)\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(2,short,16)\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(4,long,)\n__TBB_MACHINE_DEFINE_ATOMICS_CMPSWP(8,__int64,64)\n__TBB_MACHINE_DEFINE_ATOMICS_FETCHADD(4,long,)\n#if defined(TBB_WIN32_USE_CL_BUILTINS)\n// No _InterlockedExchangeAdd64 intrinsic on _M_IX86\n#define __TBB_64BIT_ATOMICS 0\n#else\n__TBB_MACHINE_DEFINE_ATOMICS_FETCHADD(8,__int64,64)\n#endif\n\ninline void __TBB_machine_pause (int32_t delay )\n{\n    while(delay>0)\n    {\n        __TBB_compiler_fence();\n        delay--;\n    }\n}\n\n// API to retrieve/update FPU control setting\n#define __TBB_CPU_CTL_ENV_PRESENT 1\n\nnamespace tbb {\nnamespace internal {\n\ntemplate <typename T, size_t S>\nstruct machine_load_store_relaxed {\n    static inline T load ( const volatile T& location ) {\n        const T value = location;\n\n        /*\n        * An extra memory barrier is required for errata #761319\n        * Please see http://infocenter.arm.com/help/topic/com.arm.doc.uan0004a\n        */\n        __TBB_acquire_consistency_helper();\n        return value;\n    }\n\n    static inline void store ( volatile T& location, T value ) {\n        location = value;\n    }\n};\n\nclass cpu_ctl_env {\nprivate:\n    unsigned int my_ctl;\npublic:\n    bool operator!=( const cpu_ctl_env& ctl ) const { return my_ctl != ctl.my_ctl; }\n    void get_env() { my_ctl = _control87(0, 0); }\n    void set_env() const { _control87( my_ctl, ~0U ); }\n};\n\n} // namespace internal\n} // namespaces tbb\n\n// Machine specific atomic operations\n#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)\n#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n\n// Use generics for some things\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE               1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD                   1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_STORE                 1\n#define __TBB_USE_GENERIC_FETCH_STORE                           1\n#define __TBB_USE_GENERIC_DWORD_LOAD_STORE                      1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE     1\n\n#if defined(TBB_WIN32_USE_CL_BUILTINS)\n#if !__TBB_WIN8UI_SUPPORT\nextern \"C\" __declspec(dllimport) int __stdcall SwitchToThread( void );\n#define __TBB_Yield()  SwitchToThread()\n#else\n#include<thread>\n#define __TBB_Yield()  std::this_thread::yield()\n#endif\n#else\n#define __TBB_Yield() __yield()\n#endif\n\n// Machine specific atomic operations\n#define __TBB_AtomicOR(P,V)     __TBB_machine_OR(P,V)\n#define __TBB_AtomicAND(P,V)    __TBB_machine_AND(P,V)\n\ntemplate <typename T1,typename T2>\ninline void __TBB_machine_OR( T1 *operand, T2 addend ) {\n    _InterlockedOr((long volatile *)operand, (long)addend);\n}\n\ntemplate <typename T1,typename T2>\ninline void __TBB_machine_AND( T1 *operand, T2 addend ) {\n    _InterlockedAnd((long volatile *)operand, (long)addend);\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/msvc_ia32_common.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_msvc_ia32_common_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_msvc_ia32_common_H\n\n#include <intrin.h>\n\n//TODO: consider moving this macro to tbb_config.h and using where MSVC asm is used\n#if  !_M_X64 || __INTEL_COMPILER\n    #define __TBB_X86_MSVC_INLINE_ASM_AVAILABLE 1\n#else\n    //MSVC in x64 mode does not accept inline assembler\n    #define __TBB_X86_MSVC_INLINE_ASM_AVAILABLE 0\n    #define __TBB_NO_X86_MSVC_INLINE_ASM_MSG \"The compiler being used is not supported (outdated?)\"\n#endif\n\n#if _M_X64\n    #define __TBB_r(reg_name) r##reg_name\n    #define __TBB_W(name) name##64\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        typedef __int64 word;\n    }}}\n#else\n    #define __TBB_r(reg_name) e##reg_name\n    #define __TBB_W(name) name\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        typedef long word;\n    }}}\n#endif\n\n#if _MSC_VER>=1600 && (!__INTEL_COMPILER || __INTEL_COMPILER>=1310)\n    // S is the operand size in bytes, B is the suffix for intrinsics for that size\n    #define __TBB_MACHINE_DEFINE_ATOMICS(S,B,T,U)                                           \\\n    __pragma(intrinsic( _InterlockedCompareExchange##B ))                                   \\\n    static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \\\n        return _InterlockedCompareExchange##B ( (T*)ptr, value, comparand );                \\\n    }                                                                                       \\\n    __pragma(intrinsic( _InterlockedExchangeAdd##B ))                                       \\\n    static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, U addend ) {           \\\n        return _InterlockedExchangeAdd##B ( (T*)ptr, addend );                              \\\n    }                                                                                       \\\n    __pragma(intrinsic( _InterlockedExchange##B ))                                          \\\n    static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, U value ) {          \\\n        return _InterlockedExchange##B ( (T*)ptr, value );                                  \\\n    }\n\n    // Atomic intrinsics for 1, 2, and 4 bytes are available for x86 & x64\n    __TBB_MACHINE_DEFINE_ATOMICS(1,8,char,__int8)\n    __TBB_MACHINE_DEFINE_ATOMICS(2,16,short,__int16)\n    __TBB_MACHINE_DEFINE_ATOMICS(4,,long,__int32)\n\n    #if __TBB_WORDSIZE==8\n    __TBB_MACHINE_DEFINE_ATOMICS(8,64,__int64,__int64)\n    #endif\n\n    #undef __TBB_MACHINE_DEFINE_ATOMICS\n    #define __TBB_ATOMIC_PRIMITIVES_DEFINED\n#endif /*_MSC_VER>=1600*/\n\n#if _MSC_VER>=1300 || __INTEL_COMPILER>=1100\n    #pragma intrinsic(_ReadWriteBarrier)\n    #pragma intrinsic(_mm_mfence)\n    #define __TBB_compiler_fence()    _ReadWriteBarrier()\n    #define __TBB_full_memory_fence() _mm_mfence()\n#elif __TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n    #define __TBB_compiler_fence()    __asm { __asm nop }\n    #define __TBB_full_memory_fence() __asm { __asm mfence }\n#else\n    #error Unsupported compiler; define __TBB_{control,acquire,release}_consistency_helper to support it\n#endif\n\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n\n#if (_MSC_VER>=1300) || (__INTEL_COMPILER)\n    #pragma intrinsic(_mm_pause)\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        static inline void pause (uintptr_t delay ) {\n            for (;delay>0; --delay )\n                _mm_pause();\n        }\n    }}}\n    #define __TBB_Pause(V) tbb::internal::msvc_intrinsics::pause(V)\n    #define __TBB_SINGLE_PAUSE _mm_pause()\n#else\n    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG\n    #endif\n    namespace tbb { namespace internal { namespace msvc_inline_asm\n        static inline void pause (uintptr_t delay ) {\n            _asm\n            {\n                mov __TBB_r(ax), delay\n              __TBB_L1:\n                pause\n                add __TBB_r(ax), -1\n                jne __TBB_L1\n            }\n            return;\n        }\n    }}}\n    #define __TBB_Pause(V) tbb::internal::msvc_inline_asm::pause(V)\n    #define __TBB_SINGLE_PAUSE __asm pause\n#endif\n\n#if (_MSC_VER>=1400 && !__INTEL_COMPILER) || (__INTEL_COMPILER>=1200)\n// MSVC did not have this intrinsic prior to VC8.\n// ICL 11.1 fails to compile a TBB example if __TBB_Log2 uses the intrinsic.\n    #pragma intrinsic(__TBB_W(_BitScanReverse))\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        static inline uintptr_t lg_bsr( uintptr_t i ){\n            unsigned long j;\n            __TBB_W(_BitScanReverse)( &j, i );\n            return j;\n        }\n    }}}\n    #define __TBB_Log2(V) tbb::internal::msvc_intrinsics::lg_bsr(V)\n#else\n    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG\n    #endif\n    namespace tbb { namespace internal { namespace msvc_inline_asm {\n        static inline uintptr_t lg_bsr( uintptr_t i ){\n            uintptr_t j;\n            __asm\n            {\n                bsr __TBB_r(ax), i\n                mov j, __TBB_r(ax)\n            }\n            return j;\n        }\n    }}}\n    #define __TBB_Log2(V) tbb::internal::msvc_inline_asm::lg_bsr(V)\n#endif\n\n#if _MSC_VER>=1400\n    #pragma intrinsic(__TBB_W(_InterlockedOr))\n    #pragma intrinsic(__TBB_W(_InterlockedAnd))\n    namespace tbb { namespace internal { namespace msvc_intrinsics {\n        static inline void lock_or( volatile void *operand, intptr_t addend ){\n            __TBB_W(_InterlockedOr)((volatile word*)operand, addend);\n        }\n        static inline void lock_and( volatile void *operand, intptr_t addend ){\n            __TBB_W(_InterlockedAnd)((volatile word*)operand, addend);\n        }\n    }}}\n    #define __TBB_AtomicOR(P,V)  tbb::internal::msvc_intrinsics::lock_or(P,V)\n    #define __TBB_AtomicAND(P,V) tbb::internal::msvc_intrinsics::lock_and(P,V)\n#else\n    #if !__TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n        #error __TBB_NO_X86_MSVC_INLINE_ASM_MSG\n    #endif\n    namespace tbb { namespace internal { namespace msvc_inline_asm {\n        static inline void lock_or( volatile void *operand, __int32 addend ) {\n            __asm\n            {\n                mov eax, addend\n                mov edx, [operand]\n                lock or [edx], eax\n            }\n         }\n         static inline void lock_and( volatile void *operand, __int32 addend ) {\n            __asm\n            {\n                mov eax, addend\n                mov edx, [operand]\n                lock and [edx], eax\n            }\n         }\n    }}}\n    #define __TBB_AtomicOR(P,V)  tbb::internal::msvc_inline_asm::lock_or(P,V)\n    #define __TBB_AtomicAND(P,V) tbb::internal::msvc_inline_asm::lock_and(P,V)\n#endif\n\n#pragma intrinsic(__rdtsc)\nnamespace tbb { namespace internal { typedef uint64_t machine_tsc_t; } }\nstatic inline tbb::internal::machine_tsc_t __TBB_machine_time_stamp() {\n    return __rdtsc();\n}\n#define __TBB_time_stamp() __TBB_machine_time_stamp()\n\n// API to retrieve/update FPU control setting\n#define __TBB_CPU_CTL_ENV_PRESENT 1\n\nnamespace tbb { namespace internal { class cpu_ctl_env; } }\n#if __TBB_X86_MSVC_INLINE_ASM_AVAILABLE\n    inline void __TBB_get_cpu_ctl_env ( tbb::internal::cpu_ctl_env* ctl ) {\n        __asm {\n            __asm mov     __TBB_r(ax), ctl\n            __asm stmxcsr [__TBB_r(ax)]\n            __asm fstcw   [__TBB_r(ax)+4]\n        }\n    }\n    inline void __TBB_set_cpu_ctl_env ( const tbb::internal::cpu_ctl_env* ctl ) {\n        __asm {\n            __asm mov     __TBB_r(ax), ctl\n            __asm ldmxcsr [__TBB_r(ax)]\n            __asm fldcw   [__TBB_r(ax)+4]\n        }\n    }\n#else\n    extern \"C\" {\n        void __TBB_EXPORTED_FUNC __TBB_get_cpu_ctl_env ( tbb::internal::cpu_ctl_env* );\n        void __TBB_EXPORTED_FUNC __TBB_set_cpu_ctl_env ( const tbb::internal::cpu_ctl_env* );\n    }\n#endif\n\nnamespace tbb {\nnamespace internal {\nclass cpu_ctl_env {\nprivate:\n    int         mxcsr;\n    short       x87cw;\n    static const int MXCSR_CONTROL_MASK = ~0x3f; /* all except last six status bits */\npublic:\n    bool operator!=( const cpu_ctl_env& ctl ) const { return mxcsr != ctl.mxcsr || x87cw != ctl.x87cw; }\n    void get_env() {\n        __TBB_get_cpu_ctl_env( this );\n        mxcsr &= MXCSR_CONTROL_MASK;\n    }\n    void set_env() const { __TBB_set_cpu_ctl_env( this ); }\n};\n} // namespace internal\n} // namespace tbb\n\n#if !__TBB_WIN8UI_SUPPORT\nextern \"C\" __declspec(dllimport) int __stdcall SwitchToThread( void );\n#define __TBB_Yield()  SwitchToThread()\n#else\n#include<thread>\n#define __TBB_Yield()  std::this_thread::yield()\n#endif\n\n#undef __TBB_r\n#undef __TBB_W\n#undef __TBB_word\n\nextern \"C\" {\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_try_lock_elided (volatile void* ptr);\n    void   __TBB_EXPORTED_FUNC __TBB_machine_unlock_elided (volatile void* ptr);\n\n    // 'pause' instruction aborts HLE/RTM transactions\n    inline static void __TBB_machine_try_lock_elided_cancel() { __TBB_SINGLE_PAUSE; }\n\n#if __TBB_TSX_INTRINSICS_PRESENT\n    #define __TBB_machine_is_in_transaction _xtest\n    #define __TBB_machine_begin_transaction _xbegin\n    #define __TBB_machine_end_transaction   _xend\n    // The value (0xFF) below comes from the\n    // Intel(R) 64 and IA-32 Architectures Optimization Reference Manual 12.4.5 lock not free\n    #define __TBB_machine_transaction_conflict_abort() _xabort(0xFF)\n#else\n    __int8           __TBB_EXPORTED_FUNC __TBB_machine_is_in_transaction();\n    unsigned __int32 __TBB_EXPORTED_FUNC __TBB_machine_begin_transaction();\n    void             __TBB_EXPORTED_FUNC __TBB_machine_end_transaction();\n    void             __TBB_EXPORTED_FUNC __TBB_machine_transaction_conflict_abort();\n#endif /* __TBB_TSX_INTRINSICS_PRESENT */\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/sunos_sparc.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_sunos_sparc_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_sunos_sparc_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n#define __TBB_WORDSIZE 8\n// Big endian is assumed for SPARC.\n// While hardware may support page-specific bi-endianness, only big endian pages may be exposed to TBB\n#define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n\n/** To those working on SPARC hardware. Consider relaxing acquire and release\n    consistency helpers to no-op (as this port covers TSO mode only). **/\n#define __TBB_compiler_fence()             __asm__ __volatile__ (\"\": : :\"memory\")\n#define __TBB_control_consistency_helper() __TBB_compiler_fence()\n#define __TBB_acquire_consistency_helper() __TBB_compiler_fence()\n#define __TBB_release_consistency_helper() __TBB_compiler_fence()\n#define __TBB_full_memory_fence()          __asm__ __volatile__(\"membar #LoadLoad|#LoadStore|#StoreStore|#StoreLoad\": : : \"memory\")\n\n//--------------------------------------------------\n// Compare and swap\n//--------------------------------------------------\n\n/**\n * Atomic CAS for 32 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n ( @return value originally in memory at ptr, regardless of success\n*/\nstatic inline int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand ){\n  int32_t result;\n  __asm__ __volatile__(\n                       \"cas\\t[%5],%4,%1\"\n                       : \"=m\"(*(int32_t *)ptr), \"=r\"(result)\n                       : \"m\"(*(int32_t *)ptr), \"1\"(value), \"r\"(comparand), \"r\"(ptr)\n                       : \"memory\");\n  return result;\n}\n\n/**\n * Atomic CAS for 64 bit values, if *ptr==comparand, then *ptr=value, returns *ptr\n * @param ptr pointer to value in memory to be swapped with value if *ptr==comparand\n * @param value value to assign *ptr to if *ptr==comparand\n * @param comparand value to compare with *ptr\n ( @return value originally in memory at ptr, regardless of success\n */\nstatic inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, int64_t comparand ){\n  int64_t result;\n  __asm__ __volatile__(\n                       \"casx\\t[%5],%4,%1\"\n               : \"=m\"(*(int64_t *)ptr), \"=r\"(result)\n               : \"m\"(*(int64_t *)ptr), \"1\"(value), \"r\"(comparand), \"r\"(ptr)\n               : \"memory\");\n  return result;\n}\n\n//---------------------------------------------------\n// Fetch and add\n//---------------------------------------------------\n\n/**\n * Atomic fetch and add for 32 bit values, in this case implemented by continuously checking success of atomicity\n * @param ptr pointer to value to add addend to\n * @param addened value to add to *ptr\n * @return value at ptr before addened was added\n */\nstatic inline int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend){\n  int32_t result;\n  __asm__ __volatile__ (\n                        \"0:\\t add\\t %3, %4, %0\\n\"           // do addition\n                        \"\\t cas\\t [%2], %3, %0\\n\"           // cas to store result in memory\n                        \"\\t cmp\\t %3, %0\\n\"                 // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%icc, 0b\\n\"         // if not try again\n                        \"\\t mov %0, %3\\n\"                   // use branch delay slot to move new value in memory to be added\n               : \"=&r\"(result), \"=m\"(*(int32_t *)ptr)\n               : \"r\"(ptr), \"r\"(*(int32_t *)ptr), \"r\"(addend), \"m\"(*(int32_t *)ptr)\n               : \"ccr\", \"memory\");\n  return result;\n}\n\n/**\n * Atomic fetch and add for 64 bit values, in this case implemented by continuously checking success of atomicity\n * @param ptr pointer to value to add addend to\n * @param addened value to add to *ptr\n * @return value at ptr before addened was added\n */\nstatic inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend){\n  int64_t result;\n  __asm__ __volatile__ (\n                        \"0:\\t add\\t %3, %4, %0\\n\"           // do addition\n                        \"\\t casx\\t [%2], %3, %0\\n\"          // cas to store result in memory\n                        \"\\t cmp\\t %3, %0\\n\"                 // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%xcc, 0b\\n\"         // if not try again\n                        \"\\t mov %0, %3\\n\"                   // use branch delay slot to move new value in memory to be added\n                : \"=&r\"(result), \"=m\"(*(int64_t *)ptr)\n                : \"r\"(ptr), \"r\"(*(int64_t *)ptr), \"r\"(addend), \"m\"(*(int64_t *)ptr)\n                : \"ccr\", \"memory\");\n  return result;\n}\n\n//--------------------------------------------------------\n// Logarithm (base two, integer)\n//--------------------------------------------------------\n\nstatic inline int64_t __TBB_machine_lg( uint64_t x ) {\n    __TBB_ASSERT(x, \"__TBB_Log2(0) undefined\");\n    uint64_t count;\n    // one hot encode\n    x |= (x >> 1);\n    x |= (x >> 2);\n    x |= (x >> 4);\n    x |= (x >> 8);\n    x |= (x >> 16);\n    x |= (x >> 32);\n    // count 1's\n    __asm__ (\"popc %1, %0\" : \"=r\"(count) : \"r\"(x) );\n    return count-1;\n}\n\n//--------------------------------------------------------\n\nstatic inline void __TBB_machine_or( volatile void *ptr, uint64_t value ) {\n  __asm__ __volatile__ (\n                        \"0:\\t or\\t %2, %3, %%g1\\n\"          // do operation\n                        \"\\t casx\\t [%1], %2, %%g1\\n\"        // cas to store result in memory\n                        \"\\t cmp\\t %2, %%g1\\n\"               // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%xcc, 0b\\n\"         // if not try again\n                        \"\\t mov %%g1, %2\\n\"                 // use branch delay slot to move new value in memory to be added\n                : \"=m\"(*(int64_t *)ptr)\n                : \"r\"(ptr), \"r\"(*(int64_t *)ptr), \"r\"(value), \"m\"(*(int64_t *)ptr)\n                : \"ccr\", \"g1\", \"memory\");\n}\n\nstatic inline void __TBB_machine_and( volatile void *ptr, uint64_t value ) {\n  __asm__ __volatile__ (\n                        \"0:\\t and\\t %2, %3, %%g1\\n\"         // do operation\n                        \"\\t casx\\t [%1], %2, %%g1\\n\"        // cas to store result in memory\n                        \"\\t cmp\\t %2, %%g1\\n\"               // check if value from memory is original\n                        \"\\t bne,a,pn\\t %%xcc, 0b\\n\"         // if not try again\n                        \"\\t mov %%g1, %2\\n\"                 // use branch delay slot to move new value in memory to be added\n                : \"=m\"(*(int64_t *)ptr)\n                : \"r\"(ptr), \"r\"(*(int64_t *)ptr), \"r\"(value), \"m\"(*(int64_t *)ptr)\n                : \"ccr\", \"g1\", \"memory\");\n}\n\n\nstatic inline void __TBB_machine_pause( int32_t delay ) {\n    // do nothing, inlined, doesn't matter\n}\n\n// put 0xff in memory location, return memory value,\n//  generic trylockbyte puts 0x01, however this is fine\n//  because all that matters is that 0 is unlocked\nstatic inline bool __TBB_machine_trylockbyte(unsigned char &flag){\n    unsigned char result;\n    __asm__ __volatile__ (\n            \"ldstub\\t [%2], %0\\n\"\n        : \"=r\"(result), \"=m\"(flag)\n        : \"r\"(&flag), \"m\"(flag)\n        : \"memory\");\n    return result == 0;\n}\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD               1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)\n#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)\n\n// Definition of other functions\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n#define __TBB_Log2(V)  __TBB_machine_lg(V)\n\n#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/windows_api.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_machine_windows_api_H\n#define __TBB_machine_windows_api_H\n\n#if _WIN32 || _WIN64\n\n#if _XBOX\n\n#define NONET\n#define NOD3D\n#include <xtl.h>\n\n#else // Assume \"usual\" Windows\n\n#include <windows.h>\n\n#endif // _XBOX\n\n#if _WIN32_WINNT < 0x0600\n// The following Windows API function is declared explicitly;\n// otherwise it fails to compile by VS2005.\n#if !defined(WINBASEAPI) || (_WIN32_WINNT < 0x0501 && _MSC_VER == 1400)\n#define __TBB_WINBASEAPI extern \"C\"\n#else\n#define __TBB_WINBASEAPI WINBASEAPI\n#endif\n__TBB_WINBASEAPI BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );\n__TBB_WINBASEAPI BOOL WINAPI InitializeCriticalSectionAndSpinCount( LPCRITICAL_SECTION, DWORD );\n// Overloading WINBASEAPI macro and using local functions missing in Windows XP/2003\n#define InitializeCriticalSectionEx inlineInitializeCriticalSectionEx\n#define CreateSemaphoreEx inlineCreateSemaphoreEx\n#define CreateEventEx inlineCreateEventEx\ninline BOOL WINAPI inlineInitializeCriticalSectionEx( LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD )\n{\n    return InitializeCriticalSectionAndSpinCount( lpCriticalSection, dwSpinCount );\n}\ninline HANDLE WINAPI inlineCreateSemaphoreEx( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName, DWORD, DWORD )\n{\n    return CreateSemaphore( lpSemaphoreAttributes, lInitialCount, lMaximumCount, lpName );\n}\ninline HANDLE WINAPI inlineCreateEventEx( LPSECURITY_ATTRIBUTES lpEventAttributes, LPCTSTR lpName, DWORD dwFlags, DWORD )\n{\n    BOOL manual_reset = dwFlags&0x00000001 ? TRUE : FALSE; // CREATE_EVENT_MANUAL_RESET\n    BOOL initial_set  = dwFlags&0x00000002 ? TRUE : FALSE; // CREATE_EVENT_INITIAL_SET\n    return CreateEvent( lpEventAttributes, manual_reset, initial_set, lpName );\n}\n#endif\n\n#if defined(RTL_SRWLOCK_INIT)\n#ifndef __TBB_USE_SRWLOCK\n// TODO: turn it on when bug 1952 will be fixed\n#define __TBB_USE_SRWLOCK 0\n#endif\n#endif\n\n#else\n#error tbb/machine/windows_api.h should only be used for Windows based platforms\n#endif // _WIN32 || _WIN64\n\n#endif // __TBB_machine_windows_api_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/windows_ia32.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_windows_ia32_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_windows_ia32_H\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings in /Wp64 mode\n    #pragma warning (push)\n    #pragma warning (disable: 4244 4267)\n#endif\n\n#include \"msvc_ia32_common.h\"\n\n#define __TBB_WORDSIZE 4\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\nextern \"C\" {\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand );\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend );\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value );\n    void __TBB_EXPORTED_FUNC __TBB_machine_store8 (volatile void *ptr, __int64 value );\n    __int64 __TBB_EXPORTED_FUNC __TBB_machine_load8 (const volatile void *ptr);\n}\n\n#ifndef __TBB_ATOMIC_PRIMITIVES_DEFINED\n\n#define __TBB_MACHINE_DEFINE_ATOMICS(S,T,U,A,C) \\\nstatic inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \\\n    T result; \\\n    volatile T *p = (T *)ptr; \\\n    __asm \\\n    { \\\n       __asm mov edx, p \\\n       __asm mov C , value \\\n       __asm mov A , comparand \\\n       __asm lock cmpxchg [edx], C \\\n       __asm mov result, A \\\n    } \\\n    return result; \\\n} \\\n\\\nstatic inline T __TBB_machine_fetchadd##S ( volatile void * ptr, U addend ) { \\\n    T result; \\\n    volatile T *p = (T *)ptr; \\\n    __asm \\\n    { \\\n        __asm mov edx, p \\\n        __asm mov A, addend \\\n        __asm lock xadd [edx], A \\\n        __asm mov result, A \\\n    } \\\n    return result; \\\n}\\\n\\\nstatic inline T __TBB_machine_fetchstore##S ( volatile void * ptr, U value ) { \\\n    T result; \\\n    volatile T *p = (T *)ptr; \\\n    __asm \\\n    { \\\n        __asm mov edx, p \\\n        __asm mov A, value \\\n        __asm lock xchg [edx], A \\\n        __asm mov result, A \\\n    } \\\n    return result; \\\n}\n\n\n__TBB_MACHINE_DEFINE_ATOMICS(1, __int8, __int8, al, cl)\n__TBB_MACHINE_DEFINE_ATOMICS(2, __int16, __int16, ax, cx)\n__TBB_MACHINE_DEFINE_ATOMICS(4, ptrdiff_t, ptrdiff_t, eax, ecx)\n\n#undef __TBB_MACHINE_DEFINE_ATOMICS\n\n#endif /*__TBB_ATOMIC_PRIMITIVES_DEFINED*/\n\n//TODO: Check if it possible and profitable for IA-32 architecture on (Linux and Windows)\n//to use of 64-bit load/store via floating point registers together with full fence\n//for sequentially consistent load/store, instead of CAS.\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warnings 4244, 4267 are back\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/windows_intel64.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_windows_intel64_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_windows_intel64_H\n\n#define __TBB_WORDSIZE 8\n#define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE\n\n#include \"msvc_ia32_common.h\"\n\n#ifndef __TBB_ATOMIC_PRIMITIVES_DEFINED\n\n#include <intrin.h>\n#pragma intrinsic(_InterlockedCompareExchange,_InterlockedExchangeAdd,_InterlockedExchange)\n#pragma intrinsic(_InterlockedCompareExchange64,_InterlockedExchangeAdd64,_InterlockedExchange64)\n\n// ATTENTION: if you ever change argument types in machine-specific primitives,\n// please take care of atomic_word<> specializations in tbb/atomic.h\nextern \"C\" {\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp1 (volatile void *ptr, __int8 value, __int8 comparand );\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd1 (volatile void *ptr, __int8 addend );\n    __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore1 (volatile void *ptr, __int8 value );\n    __int16 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp2 (volatile void *ptr, __int16 value, __int16 comparand );\n    __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd2 (volatile void *ptr, __int16 addend );\n    __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore2 (volatile void *ptr, __int16 value );\n}\n\ninline long __TBB_machine_cmpswp4 (volatile void *ptr, __int32 value, __int32 comparand ) {\n    return _InterlockedCompareExchange( (long*)ptr, value, comparand );\n}\ninline long __TBB_machine_fetchadd4 (volatile void *ptr, __int32 addend ) {\n    return _InterlockedExchangeAdd( (long*)ptr, addend );\n}\ninline long __TBB_machine_fetchstore4 (volatile void *ptr, __int32 value ) {\n    return _InterlockedExchange( (long*)ptr, value );\n}\n\ninline __int64 __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand ) {\n    return _InterlockedCompareExchange64( (__int64*)ptr, value, comparand );\n}\ninline __int64 __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend ) {\n    return _InterlockedExchangeAdd64( (__int64*)ptr, addend );\n}\ninline __int64 __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value ) {\n    return _InterlockedExchange64( (__int64*)ptr, value );\n}\n\n#endif /*__TBB_ATOMIC_PRIMITIVES_DEFINED*/\n\n#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/machine/xbox360_ppc.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n// TODO: revise by comparing with mac_ppc.h\n\n#if !defined(__TBB_machine_H) || defined(__TBB_machine_xbox360_ppc_H)\n#error Do not #include this internal file directly; use public TBB headers instead.\n#endif\n\n#define __TBB_machine_xbox360_ppc_H\n\n#define NONET\n#define NOD3D\n#include \"xtl.h\"\n#include \"ppcintrinsics.h\"\n\n#if _MSC_VER >= 1300\nextern \"C\" void _MemoryBarrier();\n#pragma intrinsic(_MemoryBarrier)\n#define __TBB_control_consistency_helper() __isync()\n#define __TBB_acquire_consistency_helper() _MemoryBarrier()\n#define __TBB_release_consistency_helper() _MemoryBarrier()\n#endif\n\n#define __TBB_full_memory_fence() __sync()\n\n#define __TBB_WORDSIZE 4\n#define __TBB_ENDIANNESS __TBB_ENDIAN_BIG\n\n//todo: define __TBB_USE_FENCED_ATOMICS and define acquire/release primitives to maximize performance\n\ninline __int32 __TBB_machine_cmpswp4(volatile void *ptr, __int32 value, __int32 comparand ) {\n __sync();\n __int32 result = InterlockedCompareExchange((volatile LONG*)ptr, value, comparand);\n __isync();\n return result;\n}\n\ninline __int64 __TBB_machine_cmpswp8(volatile void *ptr, __int64 value, __int64 comparand )\n{\n __sync();\n __int64 result = InterlockedCompareExchange64((volatile LONG64*)ptr, value, comparand);\n __isync();\n return result;\n}\n\n#define __TBB_USE_GENERIC_PART_WORD_CAS                     1\n#define __TBB_USE_GENERIC_FETCH_ADD                         1\n#define __TBB_USE_GENERIC_FETCH_STORE                       1\n#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1\n#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1\n#define __TBB_USE_GENERIC_DWORD_LOAD_STORE                  1\n#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1\n\n#pragma optimize( \"\", off )\ninline void __TBB_machine_pause (__int32 delay )\n{\n for (__int32 i=0; i<delay; i++) {;};\n}\n#pragma optimize( \"\", on )\n\n#define __TBB_Yield()  Sleep(0)\n#define __TBB_Pause(V) __TBB_machine_pause(V)\n\n// This port uses only 2 hardware threads for TBB on XBOX 360.\n// Others are left to sound etc.\n// Change the following mask to allow TBB use more HW threads.\nstatic const int __TBB_XBOX360_HARDWARE_THREAD_MASK = 0x0C;\n\nstatic inline int __TBB_XBOX360_DetectNumberOfWorkers()\n{\n     char a[__TBB_XBOX360_HARDWARE_THREAD_MASK];  //compile time assert - at least one bit should be set always\n     a[0]=0;\n\n     return ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 0) & 1) +\n            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 1) & 1) +\n            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 2) & 1) +\n            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 3) & 1) +\n            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 4) & 1) +\n            ((__TBB_XBOX360_HARDWARE_THREAD_MASK >> 5) & 1) + 1;  // +1 accommodates for the master thread\n}\n\nstatic inline int __TBB_XBOX360_GetHardwareThreadIndex(int workerThreadIndex)\n{\n    workerThreadIndex %= __TBB_XBOX360_DetectNumberOfWorkers()-1;\n    int m = __TBB_XBOX360_HARDWARE_THREAD_MASK;\n    int index = 0;\n    int skipcount = workerThreadIndex;\n    while (true)\n    {\n        if ((m & 1)!=0)\n        {\n            if (skipcount==0) break;\n            skipcount--;\n        }\n        m >>= 1;\n       index++;\n    }\n    return index;\n}\n\n#define __TBB_HardwareConcurrency() __TBB_XBOX360_DetectNumberOfWorkers()\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/memory_pool.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_memory_pool_H\n#define __TBB_memory_pool_H\n\n#if !TBB_PREVIEW_MEMORY_POOL\n#error Set TBB_PREVIEW_MEMORY_POOL to include memory_pool.h\n#endif\n/** @file */\n\n#include \"scalable_allocator.h\"\n#include <new> // std::bad_alloc\n#include <stdexcept> // std::runtime_error, std::invalid_argument\n// required in C++03 to construct std::runtime_error and std::invalid_argument\n#include <string>\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#include <utility> // std::forward\n#endif\n\n#if __TBB_EXTRA_DEBUG\n#define __TBBMALLOC_ASSERT ASSERT\n#else\n#define __TBBMALLOC_ASSERT(a,b) ((void)0)\n#endif\n\nnamespace tbb {\nnamespace interface6 {\n//! @cond INTERNAL\nnamespace internal {\n\n//! Base of thread-safe pool allocator for variable-size requests\nclass pool_base : tbb::internal::no_copy {\n    // Pool interface is separate from standard allocator classes because it has\n    // to maintain internal state, no copy or assignment. Move and swap are possible.\npublic:\n    //! Reset pool to reuse its memory (free all objects at once)\n    void recycle() { rml::pool_reset(my_pool); }\n\n    //! The \"malloc\" analogue to allocate block of memory of size bytes\n    void *malloc(size_t size) { return rml::pool_malloc(my_pool, size); }\n\n    //! The \"free\" analogue to discard a previously allocated piece of memory.\n    void free(void* ptr) { rml::pool_free(my_pool, ptr); }\n\n    //! The \"realloc\" analogue complementing pool_malloc.\n    // Enables some low-level optimization possibilities\n    void *realloc(void* ptr, size_t size) {\n        return rml::pool_realloc(my_pool, ptr, size);\n    }\n\nprotected:\n    //! destroy pool - must be called in a child class\n    void destroy() { rml::pool_destroy(my_pool); }\n\n    rml::MemoryPool *my_pool;\n};\n\n} // namespace internal\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** @ingroup memory_allocation */\ntemplate<typename T, typename P = internal::pool_base>\nclass memory_pool_allocator {\nprotected:\n    typedef P pool_type;\n    pool_type *my_pool;\n    template<typename U, typename R>\n    friend class memory_pool_allocator;\n    template<typename V, typename U, typename R>\n    friend bool operator==( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\n    template<typename V, typename U, typename R>\n    friend bool operator!=( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\npublic:\n    typedef typename tbb::internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef memory_pool_allocator<U, P> other;\n    };\n\n    memory_pool_allocator(pool_type &pool) throw() : my_pool(&pool) {}\n    memory_pool_allocator(const memory_pool_allocator& src) throw() : my_pool(src.my_pool) {}\n    template<typename U>\n    memory_pool_allocator(const memory_pool_allocator<U,P>& src) throw() : my_pool(src.my_pool) {}\n\n    pointer address(reference x) const { return &x; }\n    const_pointer address(const_reference x) const { return &x; }\n\n    //! Allocate space for n objects.\n    pointer allocate( size_type n, const void* /*hint*/ = 0) {\n        pointer p = static_cast<pointer>( my_pool->malloc( n*sizeof(value_type) ) );\n        if (!p)\n            tbb::internal::throw_exception(std::bad_alloc());\n        return p;\n    }\n    //! Free previously allocated block of memory.\n    void deallocate( pointer p, size_type ) {\n        my_pool->free(p);\n    }\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        size_type max = static_cast<size_type>(-1) / sizeof (value_type);\n        return (max > 0 ? max : 1);\n    }\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) { ::new((void*)(p)) value_type(value); }\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) { p->~value_type(); }\n\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<typename P>\nclass memory_pool_allocator<void, P> {\npublic:\n    typedef P pool_type;\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<typename U> struct rebind {\n        typedef memory_pool_allocator<U, P> other;\n    };\n\n    memory_pool_allocator( pool_type &pool) throw() : my_pool(&pool) {}\n    memory_pool_allocator( const memory_pool_allocator& src) throw() : my_pool(src.my_pool) {}\n    template<typename U>\n    memory_pool_allocator(const memory_pool_allocator<U,P>& src) throw() : my_pool(src.my_pool) {}\n\nprotected:\n    pool_type *my_pool;\n    template<typename U, typename R>\n    friend class memory_pool_allocator;\n    template<typename V, typename U, typename R>\n    friend bool operator==( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\n    template<typename V, typename U, typename R>\n    friend bool operator!=( const memory_pool_allocator<V,R>& a, const memory_pool_allocator<U,R>& b);\n};\n\ntemplate<typename T, typename U, typename P>\ninline bool operator==( const memory_pool_allocator<T,P>& a, const memory_pool_allocator<U,P>& b) {return a.my_pool==b.my_pool;}\n\ntemplate<typename T, typename U, typename P>\ninline bool operator!=( const memory_pool_allocator<T,P>& a, const memory_pool_allocator<U,P>& b) {return a.my_pool!=b.my_pool;}\n\n\n//! Thread-safe growable pool allocator for variable-size requests\ntemplate <typename Alloc>\nclass memory_pool : public internal::pool_base {\n    Alloc my_alloc; // TODO: base-class optimization\n    static void *allocate_request(intptr_t pool_id, size_t & bytes);\n    static int deallocate_request(intptr_t pool_id, void*, size_t raw_bytes);\n\npublic:\n    //! construct pool with underlying allocator\n    memory_pool(const Alloc &src = Alloc());\n\n    //! destroy pool\n    ~memory_pool() { destroy(); } // call the callbacks first and destroy my_alloc latter\n\n};\n\nclass fixed_pool : public internal::pool_base {\n    void *my_buffer;\n    size_t my_size;\n    inline static void *allocate_request(intptr_t pool_id, size_t & bytes);\n\npublic:\n    //! construct pool with underlying allocator\n    inline fixed_pool(void *buf, size_t size);\n    //! destroy pool\n    ~fixed_pool() { destroy(); }\n};\n\n//////////////// Implementation ///////////////\n\ntemplate <typename Alloc>\nmemory_pool<Alloc>::memory_pool(const Alloc &src) : my_alloc(src) {\n    rml::MemPoolPolicy args(allocate_request, deallocate_request,\n                            sizeof(typename Alloc::value_type));\n    rml::MemPoolError res = rml::pool_create_v1(intptr_t(this), &args, &my_pool);\n    if (res!=rml::POOL_OK)\n        tbb::internal::throw_exception(std::runtime_error(\"Can't create pool\"));\n}\ntemplate <typename Alloc>\nvoid *memory_pool<Alloc>::allocate_request(intptr_t pool_id, size_t & bytes) {\n    memory_pool<Alloc> &self = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);\n    const size_t unit_size = sizeof(typename Alloc::value_type);\n    __TBBMALLOC_ASSERT( 0 == bytes%unit_size, NULL);\n    void *ptr;\n    __TBB_TRY { ptr = self.my_alloc.allocate( bytes/unit_size ); }\n    __TBB_CATCH(...) { return 0; }\n    return ptr;\n}\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    // Workaround for erroneous \"unreachable code\" warning in the template below.\n    // Specific for VC++ 17-18 compiler\n    #pragma warning (push)\n    #pragma warning (disable: 4702)\n#endif\ntemplate <typename Alloc>\nint memory_pool<Alloc>::deallocate_request(intptr_t pool_id, void* raw_ptr, size_t raw_bytes) {\n    memory_pool<Alloc> &self = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);\n    const size_t unit_size = sizeof(typename Alloc::value_type);\n    __TBBMALLOC_ASSERT( 0 == raw_bytes%unit_size, NULL);\n    self.my_alloc.deallocate( static_cast<typename Alloc::value_type*>(raw_ptr), raw_bytes/unit_size );\n    return 0;\n}\n#if __TBB_MSVC_UNREACHABLE_CODE_IGNORED\n    #pragma warning (pop)\n#endif\ninline fixed_pool::fixed_pool(void *buf, size_t size) : my_buffer(buf), my_size(size) {\n    if (!buf || !size)\n        // TODO: improve support for mode with exceptions disabled\n        tbb::internal::throw_exception(std::invalid_argument(\"Zero in parameter is invalid\"));\n    rml::MemPoolPolicy args(allocate_request, 0, size, /*fixedPool=*/true);\n    rml::MemPoolError res = rml::pool_create_v1(intptr_t(this), &args, &my_pool);\n    if (res!=rml::POOL_OK)\n        tbb::internal::throw_exception(std::runtime_error(\"Can't create pool\"));\n}\ninline void *fixed_pool::allocate_request(intptr_t pool_id, size_t & bytes) {\n    fixed_pool &self = *reinterpret_cast<fixed_pool*>(pool_id);\n    __TBBMALLOC_ASSERT(0 != self.my_size, \"The buffer must not be used twice.\");\n    bytes = self.my_size;\n    self.my_size = 0; // remember that buffer has been used\n    return self.my_buffer;\n}\n\n} //namespace interface6\nusing interface6::memory_pool_allocator;\nusing interface6::memory_pool;\nusing interface6::fixed_pool;\n} //namespace tbb\n\n#undef __TBBMALLOC_ASSERT\n#endif// __TBB_memory_pool_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/mutex.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_mutex_H\n#define __TBB_mutex_H\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#endif /* _WIN32||_WIN64 */\n\n#include <new>\n#include \"aligned_space.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n//! Wrapper around the platform's native reader-writer lock.\n/** For testing purposes only.\n    @ingroup synchronization */\nclass mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired mutex.\n    mutex() {\n#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS\n    internal_construct();\n#else\n  #if _WIN32||_WIN64\n        InitializeCriticalSectionEx(&impl, 4000, 0);\n  #else\n        int error_code = pthread_mutex_init(&impl,NULL);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"mutex: pthread_mutex_init failed\");\n  #endif /* _WIN32||_WIN64*/\n#endif /* TBB_USE_ASSERT */\n    };\n\n    ~mutex() {\n#if TBB_USE_ASSERT\n        internal_destroy();\n#else\n  #if _WIN32||_WIN64\n        DeleteCriticalSection(&impl);\n  #else\n        pthread_mutex_destroy(&impl);\n\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    };\n\n    class scoped_lock;\n    friend class scoped_lock;\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock : internal::no_copy {\n    public:\n        //! Construct lock that has not acquired a mutex.\n        scoped_lock() : my_mutex(NULL) {};\n\n        //! Acquire lock on given mutex.\n        scoped_lock( mutex& mutex ) {\n            acquire( mutex );\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( my_mutex )\n                release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( mutex& mutex ) {\n#if TBB_USE_ASSERT\n            internal_acquire(mutex);\n#else\n            mutex.lock();\n            my_mutex = &mutex;\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Try acquire lock on given mutex.\n        bool try_acquire( mutex& mutex ) {\n#if TBB_USE_ASSERT\n            return internal_try_acquire (mutex);\n#else\n            bool result = mutex.try_lock();\n            if( result )\n                my_mutex = &mutex;\n            return result;\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Release lock\n        void release() {\n#if TBB_USE_ASSERT\n            internal_release ();\n#else\n            my_mutex->unlock();\n            my_mutex = NULL;\n#endif /* TBB_USE_ASSERT */\n        }\n\n    private:\n        //! The pointer to the current mutex to work\n        mutex* my_mutex;\n\n        //! All checks from acquire using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_acquire( mutex& m );\n\n        //! All checks from try_acquire using mutex.state were moved here\n        bool __TBB_EXPORTED_METHOD internal_try_acquire( mutex& m );\n\n        //! All checks from release using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_release();\n\n        friend class mutex;\n    };\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire lock\n    void lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        new(tmp.begin()) scoped_lock(*this);\n#else\n  #if _WIN32||_WIN64\n        EnterCriticalSection(&impl);\n  #else\n        int error_code = pthread_mutex_lock(&impl);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"mutex: pthread_mutex_lock failed\");\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = NULL;\n        return s.internal_try_acquire(*this);\n#else\n  #if _WIN32||_WIN64\n        return TryEnterCriticalSection(&impl)!=0;\n  #else\n        return pthread_mutex_trylock(&impl)==0;\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = this;\n        s.internal_release();\n#else\n  #if _WIN32||_WIN64\n        LeaveCriticalSection(&impl);\n  #else\n        pthread_mutex_unlock(&impl);\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Return native_handle\n  #if _WIN32||_WIN64\n    typedef LPCRITICAL_SECTION native_handle_type;\n  #else\n    typedef pthread_mutex_t* native_handle_type;\n  #endif\n    native_handle_type native_handle() { return (native_handle_type) &impl; }\n\n    enum state_t {\n        INITIALIZED=0x1234,\n        DESTROYED=0x789A,\n        HELD=0x56CD\n    };\nprivate:\n#if _WIN32||_WIN64\n    CRITICAL_SECTION impl;\n    enum state_t state;\n#else\n    pthread_mutex_t impl;\n#endif /* _WIN32||_WIN64 */\n\n    //! All checks from mutex constructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    //! All checks from mutex destructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_destroy();\n\n#if _WIN32||_WIN64\npublic:\n    //!  Set the internal state\n    void set_state( state_t to ) { state = to; }\n#endif\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_mutex_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/null_mutex.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_null_mutex_H\n#define __TBB_null_mutex_H\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n\n//! A mutex which does nothing\n/** A null_mutex does no operation and simulates success.\n    @ingroup synchronization */\nclass null_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Represents acquisition of a mutex.\n    class scoped_lock : internal::no_copy {\n    public:\n        scoped_lock() {}\n        scoped_lock( null_mutex& ) {}\n        ~scoped_lock() {}\n        void acquire( null_mutex& ) {}\n        bool try_acquire( null_mutex& ) { return true; }\n        void release() {}\n    };\n\n    null_mutex() {}\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = true;\n    static const bool is_fair_mutex = true;\n};\n\n}\n\n#endif /* __TBB_null_mutex_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/null_rw_mutex.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_null_rw_mutex_H\n#define __TBB_null_rw_mutex_H\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n\n//! A rw mutex which does nothing\n/** A null_rw_mutex is a rw mutex that does nothing and simulates successful operation.\n    @ingroup synchronization */\nclass null_rw_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Represents acquisition of a mutex.\n    class scoped_lock : internal::no_copy {\n    public:\n        scoped_lock() {}\n        scoped_lock( null_rw_mutex& , bool = true ) {}\n        ~scoped_lock() {}\n        void acquire( null_rw_mutex& , bool = true ) {}\n        bool upgrade_to_writer() { return true; }\n        bool downgrade_to_reader() { return true; }\n        bool try_acquire( null_rw_mutex& , bool = true ) { return true; }\n        void release() {}\n    };\n\n    null_rw_mutex() {}\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = true;\n    static const bool is_fair_mutex = true;\n};\n\n}\n\n#endif /* __TBB_null_rw_mutex_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/parallel_do.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_parallel_do_H\n#define __TBB_parallel_do_H\n\n#include \"internal/_range_iterator.h\"\n#include \"internal/_template_helpers.h\"\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include <iterator>\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n    template<typename Body, typename Item> class parallel_do_feeder_impl;\n    template<typename Body> class do_group_task;\n} // namespace internal\n//! @endcond\n\n//! Class the user supplied algorithm body uses to add new tasks\n/** \\param Item Work item type **/\ntemplate<typename Item>\nclass parallel_do_feeder: internal::no_copy\n{\n    parallel_do_feeder() {}\n    virtual ~parallel_do_feeder () {}\n    virtual void internal_add( const Item& item ) = 0;\n    template<typename Body_, typename Item_> friend class internal::parallel_do_feeder_impl;\npublic:\n    //! Add a work item to a running parallel_do.\n    // TODO: add an overload for r-value reference\n    void add( const Item& item ) {internal_add(item);}\n};\n\n//! @cond INTERNAL\nnamespace internal {\n    //! For internal use only.\n    /** Selects one of the two possible forms of function call member operator.\n        @ingroup algorithms **/\n    template<class Body, typename Item>\n    class parallel_do_operator_selector\n    {\n        typedef parallel_do_feeder<Item> Feeder;\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, A1& arg1, A2&, void (Body::*)(CvItem) const ) {\n            obj(arg1);\n        }\n        template<typename A1, typename A2, typename CvItem >\n        static void internal_call( const Body& obj, A1& arg1, A2& arg2, void (Body::*)(CvItem, parallel_do_feeder<Item>&) const ) {\n            obj(arg1, arg2);\n        }\n\n    public:\n        template<typename A1, typename A2 >\n        static void call( const Body& obj, A1& arg1, A2& arg2 )\n        {\n            internal_call( obj, arg1, arg2, &Body::operator() );\n        }\n    };\n\n    //! For internal use only.\n    /** Executes one iteration of a do.\n        @ingroup algorithms */\n    template<typename Body, typename Item>\n    class do_iteration_task: public task\n    {\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        Item my_value;\n        feeder_type& my_feeder;\n\n        do_iteration_task( const Item& value, feeder_type& feeder ) :\n            my_value(value), my_feeder(feeder)\n        {}\n\n        /*override*/\n        task* execute()\n        {\n            // TODO: use move semantics for my_value\n            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, my_value, my_feeder);\n            return NULL;\n        }\n\n        template<typename Body_, typename Item_> friend class parallel_do_feeder_impl;\n    }; // class do_iteration_task\n\n    template<typename Iterator, typename Body, typename Item>\n    class do_iteration_task_iter: public task\n    {\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        Iterator my_iter;\n        feeder_type& my_feeder;\n\n        do_iteration_task_iter( const Iterator& iter, feeder_type& feeder ) :\n            my_iter(iter), my_feeder(feeder)\n        {}\n\n        /*override*/\n        task* execute()\n        {\n            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, *my_iter, my_feeder);\n            return NULL;\n        }\n\n        template<typename Iterator_, typename Body_, typename Item_> friend class do_group_task_forward;\n        template<typename Body_, typename Item_> friend class do_group_task_input;\n        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;\n    }; // class do_iteration_task_iter\n\n    //! For internal use only.\n    /** Implements new task adding procedure.\n        @ingroup algorithms **/\n    template<class Body, typename Item>\n    class parallel_do_feeder_impl : public parallel_do_feeder<Item>\n    {\n        /*override*/\n        void internal_add( const Item& item )\n        {\n            typedef do_iteration_task<Body, Item> iteration_type;\n\n            iteration_type& t = *new (task::allocate_additional_child_of(*my_barrier)) iteration_type(item, *this);\n\n            t.spawn( t );\n        }\n    public:\n        const Body* my_body;\n        empty_task* my_barrier;\n\n        parallel_do_feeder_impl()\n        {\n            my_barrier = new( task::allocate_root() ) empty_task();\n            __TBB_ASSERT(my_barrier, \"root task allocation failed\");\n        }\n\n#if __TBB_TASK_GROUP_CONTEXT\n        parallel_do_feeder_impl(tbb::task_group_context &context)\n        {\n            my_barrier = new( task::allocate_root(context) ) empty_task();\n            __TBB_ASSERT(my_barrier, \"root task allocation failed\");\n        }\n#endif\n\n        ~parallel_do_feeder_impl()\n        {\n            my_barrier->destroy(*my_barrier);\n        }\n    }; // class parallel_do_feeder_impl\n\n\n    //! For internal use only\n    /** Unpacks a block of iterations.\n        @ingroup algorithms */\n\n    template<typename Iterator, typename Body, typename Item>\n    class do_group_task_forward: public task\n    {\n        static const size_t max_arg_size = 4;\n\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        feeder_type& my_feeder;\n        Iterator my_first;\n        size_t my_size;\n\n        do_group_task_forward( Iterator first, size_t size, feeder_type& feeder )\n            : my_feeder(feeder), my_first(first), my_size(size)\n        {}\n\n        /*override*/ task* execute()\n        {\n            typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;\n            __TBB_ASSERT( my_size>0, NULL );\n            task_list list;\n            task* t;\n            size_t k=0;\n            for(;;) {\n                t = new( allocate_child() ) iteration_type( my_first, my_feeder );\n                ++my_first;\n                if( ++k==my_size ) break;\n                list.push_back(*t);\n            }\n            set_ref_count(int(k+1));\n            spawn(list);\n            spawn_and_wait_for_all(*t);\n            return NULL;\n        }\n\n        template<typename Iterator_, typename Body_, typename _Item> friend class do_task_iter;\n    }; // class do_group_task_forward\n\n    template<typename Body, typename Item>\n    class do_group_task_input: public task\n    {\n        static const size_t max_arg_size = 4;\n\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n        feeder_type& my_feeder;\n        size_t my_size;\n        aligned_space<Item, max_arg_size> my_arg;\n\n        do_group_task_input( feeder_type& feeder )\n            : my_feeder(feeder), my_size(0)\n        {}\n\n        /*override*/ task* execute()\n        {\n            typedef do_iteration_task_iter<Item*, Body, Item> iteration_type;\n            __TBB_ASSERT( my_size>0, NULL );\n            task_list list;\n            task* t;\n            size_t k=0;\n            for(;;) {\n                t = new( allocate_child() ) iteration_type( my_arg.begin() + k, my_feeder );\n                if( ++k==my_size ) break;\n                list.push_back(*t);\n            }\n            set_ref_count(int(k+1));\n            spawn(list);\n            spawn_and_wait_for_all(*t);\n            return NULL;\n        }\n\n        ~do_group_task_input(){\n            for( size_t k=0; k<my_size; ++k)\n                (my_arg.begin() + k)->~Item();\n        }\n\n        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;\n    }; // class do_group_task_input\n\n    //! For internal use only.\n    /** Gets block of iterations and packages them into a do_group_task.\n        @ingroup algorithms */\n    template<typename Iterator, typename Body, typename Item>\n    class do_task_iter: public task\n    {\n        typedef parallel_do_feeder_impl<Body, Item> feeder_type;\n\n    public:\n        do_task_iter( Iterator first, Iterator last , feeder_type& feeder ) :\n            my_first(first), my_last(last), my_feeder(feeder)\n        {}\n\n    private:\n        Iterator my_first;\n        Iterator my_last;\n        feeder_type& my_feeder;\n\n        /* Do not merge run(xxx) and run_xxx() methods. They are separated in order\n            to make sure that compilers will eliminate unused argument of type xxx\n            (that is will not put it on stack). The sole purpose of this argument\n            is overload resolution.\n\n            An alternative could be using template functions, but explicit specialization\n            of member function templates is not supported for non specialized class\n            templates. Besides template functions would always fall back to the least\n            efficient variant (the one for input iterators) in case of iterators having\n            custom tags derived from basic ones. */\n        /*override*/ task* execute()\n        {\n            typedef typename std::iterator_traits<Iterator>::iterator_category iterator_tag;\n            return run( (iterator_tag*)NULL );\n        }\n\n        /** This is the most restricted variant that operates on input iterators or\n            iterators with unknown tags (tags not derived from the standard ones). **/\n        inline task* run( void* ) { return run_for_input_iterator(); }\n\n        task* run_for_input_iterator() {\n            typedef do_group_task_input<Body, Item> block_type;\n\n            block_type& t = *new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);\n            size_t k=0;\n            while( !(my_first == my_last) ) {\n                // TODO: move *my_first\n                new (t.my_arg.begin() + k) Item(*my_first);\n                ++my_first;\n                if( ++k==block_type::max_arg_size ) {\n                    if ( !(my_first == my_last) )\n                        recycle_to_reexecute();\n                    break;\n                }\n            }\n            if( k==0 ) {\n                destroy(t);\n                return NULL;\n            } else {\n                t.my_size = k;\n                return &t;\n            }\n        }\n\n        inline task* run( std::forward_iterator_tag* ) { return run_for_forward_iterator(); }\n\n        task* run_for_forward_iterator() {\n            typedef do_group_task_forward<Iterator, Body, Item> block_type;\n\n            Iterator first = my_first;\n            size_t k=0;\n            while( !(my_first==my_last) ) {\n                ++my_first;\n                if( ++k==block_type::max_arg_size ) {\n                    if ( !(my_first==my_last) )\n                        recycle_to_reexecute();\n                    break;\n                }\n            }\n            return k==0 ? NULL : new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(first, k, my_feeder);\n        }\n\n        inline task* run( std::random_access_iterator_tag* ) { return run_for_random_access_iterator(); }\n\n        task* run_for_random_access_iterator() {\n            typedef do_group_task_forward<Iterator, Body, Item> block_type;\n            typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;\n\n            size_t k = static_cast<size_t>(my_last-my_first);\n            if( k > block_type::max_arg_size ) {\n                Iterator middle = my_first + k/2;\n\n                empty_task& c = *new( allocate_continuation() ) empty_task;\n                do_task_iter& b = *new( c.allocate_child() ) do_task_iter(middle, my_last, my_feeder);\n                recycle_as_child_of(c);\n\n                my_last = middle;\n                c.set_ref_count(2);\n                c.spawn(b);\n                return this;\n            }else if( k != 0 ) {\n                task_list list;\n                task* t;\n                size_t k1=0;\n                for(;;) {\n                    t = new( allocate_child() ) iteration_type(my_first, my_feeder);\n                    ++my_first;\n                    if( ++k1==k ) break;\n                    list.push_back(*t);\n                }\n                set_ref_count(int(k+1));\n                spawn(list);\n                spawn_and_wait_for_all(*t);\n            }\n            return NULL;\n        }\n    }; // class do_task_iter\n\n    //! For internal use only.\n    /** Implements parallel iteration over a range.\n        @ingroup algorithms */\n    template<typename Iterator, typename Body, typename Item>\n    void run_parallel_do( Iterator first, Iterator last, const Body& body\n#if __TBB_TASK_GROUP_CONTEXT\n        , task_group_context& context\n#endif\n        )\n    {\n        typedef do_task_iter<Iterator, Body, Item> root_iteration_task;\n#if __TBB_TASK_GROUP_CONTEXT\n        parallel_do_feeder_impl<Body, Item> feeder(context);\n#else\n        parallel_do_feeder_impl<Body, Item> feeder;\n#endif\n        feeder.my_body = &body;\n\n        root_iteration_task &t = *new( feeder.my_barrier->allocate_child() ) root_iteration_task(first, last, feeder);\n\n        feeder.my_barrier->set_ref_count(2);\n        feeder.my_barrier->spawn_and_wait_for_all(t);\n    }\n\n    //! For internal use only.\n    /** Detects types of Body's operator function arguments.\n        @ingroup algorithms **/\n    template<typename Iterator, typename Body, typename Item>\n    void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item) const\n#if __TBB_TASK_GROUP_CONTEXT\n        , task_group_context& context\n#endif // __TBB_TASK_GROUP_CONTEXT\n        )\n    {\n        run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body\n#if __TBB_TASK_GROUP_CONTEXT\n            , context\n#endif // __TBB_TASK_GROUP_CONTEXT\n            );\n    }\n\n    //! For internal use only.\n    /** Detects types of Body's operator function arguments.\n        @ingroup algorithms **/\n    template<typename Iterator, typename Body, typename Item, typename _Item>\n    void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item, parallel_do_feeder<_Item>&) const\n#if __TBB_TASK_GROUP_CONTEXT\n        , task_group_context& context\n#endif // __TBB_TASK_GROUP_CONTEXT\n        )\n    {\n        run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body\n#if __TBB_TASK_GROUP_CONTEXT\n            , context\n#endif // __TBB_TASK_GROUP_CONTEXT\n            );\n    }\n\n} // namespace internal\n//! @endcond\n\n\n/** \\page parallel_do_body_req Requirements on parallel_do body\n    Class \\c Body implementing the concept of parallel_do body must define:\n    - \\code\n        B::operator()(\n                cv_item_type item,\n                parallel_do_feeder<item_type>& feeder\n        ) const\n\n        OR\n\n        B::operator()( cv_item_type& item ) const\n      \\endcode                                               Process item.\n                                                             May be invoked concurrently  for the same \\c this but different \\c item.\n\n    - \\code item_type( const item_type& ) \\endcode\n                                                             Copy a work item.\n    - \\code ~item_type() \\endcode                            Destroy a work item\n**/\n\n/** \\name parallel_do\n    See also requirements on \\ref parallel_do_body_req \"parallel_do Body\". **/\n//@{\n//! Parallel iteration over a range, with optional addition of more work.\n/** @ingroup algorithms */\ntemplate<typename Iterator, typename Body>\nvoid parallel_do( Iterator first, Iterator last, const Body& body )\n{\n    if ( first == last )\n        return;\n#if __TBB_TASK_GROUP_CONTEXT\n    task_group_context context;\n#endif // __TBB_TASK_GROUP_CONTEXT\n    internal::select_parallel_do( first, last, body, &Body::operator()\n#if __TBB_TASK_GROUP_CONTEXT\n        , context\n#endif // __TBB_TASK_GROUP_CONTEXT\n        );\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(Range& rng, const Body& body) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body);\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(const Range& rng, const Body& body) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration over a range, with optional addition of more work and user-supplied context\n/** @ingroup algorithms */\ntemplate<typename Iterator, typename Body>\nvoid parallel_do( Iterator first, Iterator last, const Body& body, task_group_context& context  )\n{\n    if ( first == last )\n        return;\n    internal::select_parallel_do( first, last, body, &Body::operator(), context );\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(Range& rng, const Body& body, task_group_context& context) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body, context);\n}\n\ntemplate<typename Range, typename Body>\nvoid parallel_do(const Range& rng, const Body& body, task_group_context& context) {\n    parallel_do(tbb::internal::first(rng), tbb::internal::last(rng), body, context);\n}\n\n#endif // __TBB_TASK_GROUP_CONTEXT\n\n//@}\n\n} // namespace\n\n#endif /* __TBB_parallel_do_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/parallel_for.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_parallel_for_H\n#define __TBB_parallel_for_H\n\n#include <new>\n#include \"task.h\"\n#include \"partitioner.h\"\n#include \"blocked_range.h\"\n#include \"tbb_exception.h\"\n\nnamespace tbb {\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n\n    //! allocate right task with new parent\n    void* allocate_sibling(task* start_for_task, size_t bytes);\n\n    //! Task type used in parallel_for\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner>\n    class start_for: public task {\n        Range my_range;\n        const Body my_body;\n        typename Partitioner::task_partition_type my_partition;\n        /*override*/ task* execute();\n\n        //! Update affinity info, if any.\n        /*override*/ void note_affinity( affinity_id id ) {\n            my_partition.note_affinity( id );\n        }\n\n    public:\n        //! Constructor for root task.\n        start_for( const Range& range, const Body& body, Partitioner& partitioner ) :\n            my_range(range),\n            my_body(body),\n            my_partition(partitioner)\n        {\n        }\n        //! Splitting constructor used to generate children.\n        /** parent_ becomes left child.  Newly constructed object is right child. */\n        start_for( start_for& parent_, typename Partitioner::split_type& split_obj) :\n            my_range(parent_.my_range, split_obj),\n            my_body(parent_.my_body),\n            my_partition(parent_.my_partition, split_obj)\n        {\n            my_partition.set_affinity(*this);\n        }\n        //! Construct right child from the given range as response to the demand.\n        /** parent_ remains left child.  Newly constructed object is right child. */\n        start_for( start_for& parent_, const Range& r, depth_t d ) :\n            my_range(r),\n            my_body(parent_.my_body),\n            my_partition(parent_.my_partition, split())\n        {\n            my_partition.set_affinity(*this);\n            my_partition.align_depth( d );\n        }\n        static void run(  const Range& range, const Body& body, Partitioner& partitioner ) {\n            if( !range.empty() ) {\n#if !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP\n                start_for& a = *new(task::allocate_root()) start_for(range,body,partitioner);\n#else\n                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,\n                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.\n                task_group_context context;\n                start_for& a = *new(task::allocate_root(context)) start_for(range,body,partitioner);\n#endif /* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */\n                task::spawn_root_and_wait(a);\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        static void run(  const Range& range, const Body& body, Partitioner& partitioner, task_group_context& context ) {\n            if( !range.empty() ) {\n                start_for& a = *new(task::allocate_root(context)) start_for(range,body,partitioner);\n                task::spawn_root_and_wait(a);\n            }\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        //! Run body for range, serves as callback for partitioner\n        void run_body( Range &r ) { my_body( r ); }\n\n        //! spawn right task, serves as callback for partitioner\n        void offer_work(typename Partitioner::split_type& split_obj) {\n            spawn( *new( allocate_sibling(static_cast<task*>(this), sizeof(start_for)) ) start_for(*this, split_obj) );\n        }\n        //! spawn right task, serves as callback for partitioner\n        void offer_work(const Range& r, depth_t d = 0) {\n            spawn( *new( allocate_sibling(static_cast<task*>(this), sizeof(start_for)) ) start_for(*this, r, d) );\n        }\n    };\n\n    //! allocate right task with new parent\n    // TODO: 'inline' here is to avoid multiple definition error but for sake of code size this should not be inlined\n    inline void* allocate_sibling(task* start_for_task, size_t bytes) {\n        task* parent_ptr = new( start_for_task->allocate_continuation() ) flag_task();\n        start_for_task->set_parent(parent_ptr);\n        parent_ptr->set_ref_count(2);\n        return &parent_ptr->allocate_child().allocate(bytes);\n    }\n\n    //! execute task for parallel_for\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_for<Range,Body,Partitioner>::execute() {\n        my_partition.check_being_stolen( *this );\n        my_partition.execute(*this, my_range);\n        return NULL;\n    }\n} // namespace internal\n//! @endcond\n} // namespace interfaceX\n\n//! @cond INTERNAL\nnamespace internal {\n    using interface9::internal::start_for;\n\n    //! Calls the function with values from range [begin, end) with a step provided\n    template<typename Function, typename Index>\n    class parallel_for_body : internal::no_assign {\n        const Function &my_func;\n        const Index my_begin;\n        const Index my_step;\n    public:\n        parallel_for_body( const Function& _func, Index& _begin, Index& _step )\n            : my_func(_func), my_begin(_begin), my_step(_step) {}\n\n        void operator()( const tbb::blocked_range<Index>& r ) const {\n            // A set of local variables to help the compiler with vectorization of the following loop.\n            Index b = r.begin();\n            Index e = r.end();\n            Index ms = my_step;\n            Index k = my_begin + b*ms;\n\n#if __INTEL_COMPILER\n#pragma ivdep\n#if __TBB_ASSERT_ON_VECTORIZATION_FAILURE\n#pragma vector always assert\n#endif\n#endif\n            for ( Index i = b; i < e; ++i, k += ms ) {\n                my_func( k );\n            }\n        }\n    };\n} // namespace internal\n//! @endcond\n\n// Requirements on Range concept are documented in blocked_range.h\n\n/** \\page parallel_for_body_req Requirements on parallel_for body\n    Class \\c Body implementing the concept of parallel_for body must define:\n    - \\code Body::Body( const Body& ); \\endcode                 Copy constructor\n    - \\code Body::~Body(); \\endcode                             Destructor\n    - \\code void Body::operator()( Range& r ) const; \\endcode   Function call operator applying the body to range \\c r.\n**/\n\n/** \\name parallel_for\n    See also requirements on \\ref range_req \"Range\" and \\ref parallel_for_body_req \"parallel_for Body\". **/\n//@{\n\n//! Parallel iteration over range with default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body ) {\n    internal::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());\n}\n\n//! Parallel iteration over range with simple partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner ) {\n    internal::start_for<Range,Body,const simple_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel iteration over range with auto_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner ) {\n    internal::start_for<Range,Body,const auto_partitioner>::run(range,body,partitioner);\n}\n\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration over range with static_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner ) {\n    internal::start_for<Range,Body,const static_partitioner>::run(range,body,partitioner);\n}\n#endif\n\n//! Parallel iteration over range with affinity_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner ) {\n    internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration over range with default partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, task_group_context& context ) {\n    internal::start_for<Range,Body,const __TBB_DEFAULT_PARTITIONER>::run(range, body, __TBB_DEFAULT_PARTITIONER(), context);\n}\n\n//! Parallel iteration over range with simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,const simple_partitioner>::run(range, body, partitioner, context);\n}\n\n//! Parallel iteration over range with auto_partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,const auto_partitioner>::run(range, body, partitioner, context);\n}\n\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration over range with static_partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, const static_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,const static_partitioner>::run(range, body, partitioner, context);\n}\n#endif\n\n//! Parallel iteration over range with affinity_partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner, task_group_context& context ) {\n    internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n//@}\n\nnamespace strict_ppl {\n\n//@{\n//! Implementation of parallel iteration over stepped range of integers with explicit step and partitioner\ntemplate <typename Index, typename Function, typename Partitioner>\nvoid parallel_for_impl(Index first, Index last, Index step, const Function& f, Partitioner& partitioner) {\n    if (step <= 0 )\n        internal::throw_exception(internal::eid_nonpositive_step); // throws std::invalid_argument\n    else if (last > first) {\n        // Above \"else\" avoids \"potential divide by zero\" warning on some platforms\n        Index end = (last - first - Index(1)) / step + Index(1);\n        tbb::blocked_range<Index> range(static_cast<Index>(0), end);\n        internal::parallel_for_body<Function, Index> body(f, first, step);\n        tbb::parallel_for(range, body, partitioner);\n    }\n}\n\n//! Parallel iteration over a range of integers with a step provided and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with a step provided and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const simple_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, step, f, partitioner);\n}\n//! Parallel iteration over a range of integers with a step provided and auto partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, partitioner);\n}\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration over a range of integers with a step provided and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, partitioner);\n}\n#endif\n//! Parallel iteration over a range of integers with a step provided and affinity partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& partitioner) {\n    parallel_for_impl(first, last, step, f, partitioner);\n}\n\n//! Parallel iteration over a range of integers with a default step value and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner());\n}\n//! Parallel iteration over a range of integers with a default step value and simple partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const simple_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, partitioner);\n}\n//! Parallel iteration over a range of integers with a default step value and auto partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const auto_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, partitioner);\n}\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration over a range of integers with a default step value and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const static_partitioner& partitioner) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, partitioner);\n}\n#endif\n//! Parallel iteration over a range of integers with a default step value and affinity partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, affinity_partitioner& partitioner) {\n    parallel_for_impl(first, last, static_cast<Index>(1), f, partitioner);\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Implementation of parallel iteration over stepped range of integers with explicit step, task group context, and partitioner\ntemplate <typename Index, typename Function, typename Partitioner>\nvoid parallel_for_impl(Index first, Index last, Index step, const Function& f, Partitioner& partitioner, tbb::task_group_context &context) {\n    if (step <= 0 )\n        internal::throw_exception(internal::eid_nonpositive_step); // throws std::invalid_argument\n    else if (last > first) {\n        // Above \"else\" avoids \"potential divide by zero\" warning on some platforms\n        Index end = (last - first - Index(1)) / step + Index(1);\n        tbb::blocked_range<Index> range(static_cast<Index>(0), end);\n        internal::parallel_for_body<Function, Index> body(f, first, step);\n        tbb::parallel_for(range, body, partitioner, context);\n    }\n}\n\n//! Parallel iteration over a range of integers with explicit step, task group context, and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, auto_partitioner(), context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and simple partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const simple_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, step, f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with explicit step, task group context, and auto partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const auto_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, step, f, partitioner, context);\n}\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration over a range of integers with explicit step, task group context, and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, const static_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, step, f, partitioner, context);\n}\n#endif\n//! Parallel iteration over a range of integers with explicit step, task group context, and affinity partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, Index step, const Function& f, affinity_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl(first, last, step, f, partitioner, context);\n}\n\n\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and default partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, auto_partitioner(), context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and simple partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const simple_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const simple_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and auto partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const auto_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const auto_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and static partitioner\ntemplate <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, const static_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl<Index,Function,const static_partitioner>(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n#endif\n//! Parallel iteration over a range of integers with a default step value, explicit task group context, and affinity_partitioner\n template <typename Index, typename Function>\nvoid parallel_for(Index first, Index last, const Function& f, affinity_partitioner& partitioner, tbb::task_group_context &context) {\n    parallel_for_impl(first, last, static_cast<Index>(1), f, partitioner, context);\n}\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n//@}\n\n} // namespace strict_ppl\n\nusing strict_ppl::parallel_for;\n\n} // namespace tbb\n\n#if TBB_PREVIEW_SERIAL_SUBSET\n#define __TBB_NORMAL_EXECUTION\n#include \"../serial/tbb/parallel_for.h\"\n#undef __TBB_NORMAL_EXECUTION\n#endif\n\n#endif /* __TBB_parallel_for_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/parallel_for_each.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_parallel_for_each_H\n#define __TBB_parallel_for_each_H\n\n#include \"parallel_do.h\"\n#include \"parallel_for.h\"\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n    // The class calls user function in operator()\n    template <typename Function, typename Iterator>\n    class parallel_for_each_body_do : internal::no_assign {\n        const Function &my_func;\n    public:\n        parallel_for_each_body_do(const Function &_func) : my_func(_func) {}\n\n        void operator()(typename std::iterator_traits<Iterator>::reference value) const {\n            my_func(value);\n        }\n    };\n\n    // The class calls user function in operator()\n    template <typename Function, typename Iterator>\n    class parallel_for_each_body_for : internal::no_assign {\n        const Function &my_func;\n    public:\n        parallel_for_each_body_for(const Function &_func) : my_func(_func) {}\n\n        void operator()(tbb::blocked_range<Iterator> range) const {\n#if __INTEL_COMPILER\n#pragma ivdep\n#endif\n            for(Iterator it = range.begin(), end = range.end(); it != end; ++it) {\n                my_func(*it);\n            }\n        }\n    };\n\n    template<typename Iterator, typename Function, typename Generic>\n    struct parallel_for_each_impl {\n#if __TBB_TASK_GROUP_CONTEXT\n        static void doit(Iterator first, Iterator last, const Function& f, task_group_context &context) {\n            internal::parallel_for_each_body_do<Function, Iterator> body(f);\n            tbb::parallel_do(first, last, body, context);\n        }\n#endif\n        static void doit(Iterator first, Iterator last, const Function& f) {\n            internal::parallel_for_each_body_do<Function, Iterator> body(f);\n            tbb::parallel_do(first, last, body);\n        }\n    };\n    template<typename Iterator, typename Function>\n    struct parallel_for_each_impl<Iterator, Function, std::random_access_iterator_tag> {\n#if __TBB_TASK_GROUP_CONTEXT\n        static void doit(Iterator first, Iterator last, const Function& f, task_group_context &context) {\n            internal::parallel_for_each_body_for<Function, Iterator> body(f);\n            tbb::parallel_for(tbb::blocked_range<Iterator>(first, last), body, context);\n        }\n#endif\n        static void doit(Iterator first, Iterator last, const Function& f) {\n            internal::parallel_for_each_body_for<Function, Iterator> body(f);\n            tbb::parallel_for(tbb::blocked_range<Iterator>(first, last), body);\n        }\n    };\n} // namespace internal\n//! @endcond\n\n/** \\name parallel_for_each\n    **/\n//@{\n//! Calls function f for all items from [first, last) interval using user-supplied context\n/** @ingroup algorithms */\n#if __TBB_TASK_GROUP_CONTEXT\ntemplate<typename Iterator, typename Function>\nvoid parallel_for_each(Iterator first, Iterator last, const Function& f, task_group_context &context) {\n    internal::parallel_for_each_impl<Iterator, Function, typename std::iterator_traits<Iterator>::iterator_category>::doit(first, last, f, context);\n}\n\n//! Calls function f for all items from rng using user-supplied context\n/** @ingroup algorithms */\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(Range& rng, const Function& f, task_group_context& context) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f, context);\n}\n\n//! Calls function f for all items from const rng user-supplied context\n/** @ingroup algorithms */\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(const Range& rng, const Function& f, task_group_context& context) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f, context);\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Uses default context\ntemplate<typename Iterator, typename Function>\nvoid parallel_for_each(Iterator first, Iterator last, const Function& f) {\n    internal::parallel_for_each_impl<Iterator, Function, typename std::iterator_traits<Iterator>::iterator_category>::doit(first, last, f);\n}\n\n//! Uses default context\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(Range& rng, const Function& f) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f);\n}\n\n//! Uses default context\ntemplate<typename Range, typename Function>\nvoid parallel_for_each(const Range& rng, const Function& f) {\n    parallel_for_each(tbb::internal::first(rng), tbb::internal::last(rng), f);\n}\n\n//@}\n\n} // namespace\n\n#endif /* __TBB_parallel_for_each_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/parallel_invoke.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_parallel_invoke_H\n#define __TBB_parallel_invoke_H\n\n#include \"task.h\"\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n    #include <utility>\n#endif\n\nnamespace tbb {\n\n#if !__TBB_TASK_GROUP_CONTEXT\n    /** Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs. **/\n    struct task_group_context {};\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! @cond INTERNAL\nnamespace internal {\n    // Simple task object, executing user method\n    template<typename function>\n    class function_invoker : public task{\n    public:\n        function_invoker(const function& _function) : my_function(_function) {}\n    private:\n        const function &my_function;\n        /*override*/\n        task* execute()\n        {\n            my_function();\n            return NULL;\n        }\n    };\n\n    // The class spawns two or three child tasks\n    template <size_t N, typename function1, typename function2, typename function3>\n    class spawner : public task {\n    private:\n        const function1& my_func1;\n        const function2& my_func2;\n        const function3& my_func3;\n        bool is_recycled;\n\n        task* execute (){\n            if(is_recycled){\n                return NULL;\n            }else{\n                __TBB_ASSERT(N==2 || N==3, \"Number of arguments passed to spawner is wrong\");\n                set_ref_count(N);\n                recycle_as_safe_continuation();\n                internal::function_invoker<function2>* invoker2 = new (allocate_child()) internal::function_invoker<function2>(my_func2);\n                __TBB_ASSERT(invoker2, \"Child task allocation failed\");\n                spawn(*invoker2);\n                size_t n = N; // To prevent compiler warnings\n                if (n>2) {\n                    internal::function_invoker<function3>* invoker3 = new (allocate_child()) internal::function_invoker<function3>(my_func3);\n                    __TBB_ASSERT(invoker3, \"Child task allocation failed\");\n                    spawn(*invoker3);\n                }\n                my_func1();\n                is_recycled = true;\n                return NULL;\n            }\n        } // execute\n\n    public:\n        spawner(const function1& _func1, const function2& _func2, const function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}\n    };\n\n    // Creates and spawns child tasks\n    class parallel_invoke_helper : public empty_task {\n    public:\n        // Dummy functor class\n        class parallel_invoke_noop {\n        public:\n            void operator() () const {}\n        };\n        // Creates a helper object with user-defined number of children expected\n        parallel_invoke_helper(int number_of_children)\n        {\n            set_ref_count(number_of_children + 1);\n        }\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n        void add_children() {}\n        void add_children(tbb::task_group_context&) {}\n\n        template <typename function>\n        void add_children(function&& _func)\n        {\n            internal::function_invoker<function>* invoker = new (allocate_child()) internal::function_invoker<function>(std::forward<function>(_func));\n            __TBB_ASSERT(invoker, \"Child task allocation failed\");\n            spawn(*invoker);\n        }\n\n        template<typename function>\n        void add_children(function&& _func, tbb::task_group_context&)\n        {\n            add_children(std::forward<function>(_func));\n        }\n\n        // Adds child(ren) task(s) and spawns them\n        template <typename function1, typename function2, typename... function>\n        void add_children(function1&& _func1, function2&& _func2, function&&... _func)\n        {\n            // The third argument is dummy, it is ignored actually.\n            parallel_invoke_noop noop;\n            typedef internal::spawner<2, function1, function2, parallel_invoke_noop> spawner_type;\n            spawner_type & sub_root = *new(allocate_child()) spawner_type(std::forward<function1>(_func1), std::forward<function2>(_func2), noop);\n            spawn(sub_root);\n            add_children(std::forward<function>(_func)...);\n        }\n#else\n        // Adds child task and spawns it\n        template <typename function>\n        void add_children (const function &_func)\n        {\n            internal::function_invoker<function>* invoker = new (allocate_child()) internal::function_invoker<function>(_func);\n            __TBB_ASSERT(invoker, \"Child task allocation failed\");\n            spawn(*invoker);\n        }\n\n        // Adds a task with multiple child tasks and spawns it\n        // two arguments\n        template <typename function1, typename function2>\n        void add_children (const function1& _func1, const function2& _func2)\n        {\n            // The third argument is dummy, it is ignored actually.\n            parallel_invoke_noop noop;\n            internal::spawner<2, function1, function2, parallel_invoke_noop>& sub_root = *new(allocate_child())internal::spawner<2, function1, function2, parallel_invoke_noop>(_func1, _func2, noop);\n            spawn(sub_root);\n        }\n        // three arguments\n        template <typename function1, typename function2, typename function3>\n        void add_children (const function1& _func1, const function2& _func2, const function3& _func3)\n        {\n            internal::spawner<3, function1, function2, function3>& sub_root = *new(allocate_child())internal::spawner<3, function1, function2, function3>(_func1, _func2, _func3);\n            spawn(sub_root);\n        }\n#endif // __TBB_VARIADIC_PARALLEL_INVOKE\n\n        // Waits for all child tasks\n        template <typename F0>\n        void run_and_finish(const F0& f0)\n        {\n            internal::function_invoker<F0>* invoker = new (allocate_child()) internal::function_invoker<F0>(f0);\n            __TBB_ASSERT(invoker, \"Child task allocation failed\");\n            spawn_and_wait_for_all(*invoker);\n        }\n    };\n    // The class destroys root if exception occurred as well as in normal case\n    class parallel_invoke_cleaner: internal::no_copy {\n    public:\n#if __TBB_TASK_GROUP_CONTEXT\n        parallel_invoke_cleaner(int number_of_children, tbb::task_group_context& context)\n            : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))\n#else\n        parallel_invoke_cleaner(int number_of_children, tbb::task_group_context&)\n            : root(*new(task::allocate_root()) internal::parallel_invoke_helper(number_of_children))\n#endif /* !__TBB_TASK_GROUP_CONTEXT */\n        {}\n\n        ~parallel_invoke_cleaner(){\n            root.destroy(root);\n        }\n        internal::parallel_invoke_helper& root;\n    };\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n//  Determine whether the last parameter in a pack is task_group_context\n    template<typename... T> struct impl_selector; // to workaround a GCC bug\n\n    template<typename T1, typename... T> struct impl_selector<T1, T...> {\n        typedef typename impl_selector<T...>::type type;\n    };\n\n    template<typename T> struct impl_selector<T> {\n        typedef false_type type;\n    };\n    template<> struct impl_selector<task_group_context&> {\n        typedef true_type  type;\n    };\n\n    // Select task_group_context parameter from the back of a pack\n    inline task_group_context& get_context( task_group_context& tgc ) { return tgc; }\n\n    template<typename T1, typename... T>\n    task_group_context& get_context( T1&& /*ignored*/, T&&... t )\n    { return get_context( std::forward<T>(t)... ); }\n\n    // task_group_context is known to be at the back of the parameter pack\n    template<typename F0, typename F1, typename... F>\n    void parallel_invoke_impl(true_type, F0&& f0, F1&& f1, F&&... f) {\n        __TBB_STATIC_ASSERT(sizeof...(F)>0, \"Variadic parallel_invoke implementation broken?\");\n        // # of child tasks: f0, f1, and a task for each two elements of the pack except the last\n        const size_t number_of_children = 2 + sizeof...(F)/2;\n        parallel_invoke_cleaner cleaner(number_of_children, get_context(std::forward<F>(f)...));\n        parallel_invoke_helper& root = cleaner.root;\n\n        root.add_children(std::forward<F>(f)...);\n        root.add_children(std::forward<F1>(f1));\n        root.run_and_finish(std::forward<F0>(f0));\n    }\n\n    // task_group_context is not in the pack, needs to be added\n    template<typename F0, typename F1, typename... F>\n    void parallel_invoke_impl(false_type, F0&& f0, F1&& f1, F&&... f) {\n        tbb::task_group_context context;\n        // Add context to the arguments, and redirect to the other overload\n        parallel_invoke_impl(true_type(), std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F>(f)..., context);\n    }\n#endif\n} // namespace internal\n//! @endcond\n\n/** \\name parallel_invoke\n    **/\n//@{\n//! Executes a list of tasks in parallel and waits for all tasks to complete.\n/** @ingroup algorithms */\n\n#if __TBB_VARIADIC_PARALLEL_INVOKE\n\n// parallel_invoke for two or more arguments via variadic templates\n// presence of task_group_context is defined automatically\ntemplate<typename F0, typename F1, typename... F>\nvoid parallel_invoke(F0&& f0, F1&& f1, F&&... f) {\n    typedef typename internal::impl_selector<internal::false_type, F...>::type selector_type;\n    internal::parallel_invoke_impl(selector_type(), std::forward<F0>(f0), std::forward<F1>(f1), std::forward<F>(f)...);\n}\n\n#else\n\n// parallel_invoke with user-defined context\n// two arguments\ntemplate<typename F0, typename F1 >\nvoid parallel_invoke(const F0& f0, const F1& f1, tbb::task_group_context& context) {\n    internal::parallel_invoke_cleaner cleaner(2, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f1);\n\n    root.run_and_finish(f0);\n}\n\n// three arguments\ntemplate<typename F0, typename F1, typename F2 >\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, tbb::task_group_context& context) {\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f2);\n    root.add_children(f1);\n\n    root.run_and_finish(f0);\n}\n\n// four arguments\ntemplate<typename F0, typename F1, typename F2, typename F3>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f3);\n    root.add_children(f2);\n    root.add_children(f1);\n\n    root.run_and_finish(f0);\n}\n\n// five arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4 >\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// six arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4, const F5& f5,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f5, f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// seven arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(3, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f6, f5, f4);\n    root.add_children(f3, f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// eight arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f7, f6, f5);\n    root.add_children(f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// nine arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f8, f7, f6);\n    root.add_children(f5, f4, f3);\n    root.add_children(f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// ten arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8, typename F9>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8, const F9& f9,\n                     tbb::task_group_context& context)\n{\n    internal::parallel_invoke_cleaner cleaner(4, context);\n    internal::parallel_invoke_helper& root = cleaner.root;\n\n    root.add_children(f9, f8, f7);\n    root.add_children(f6, f5, f4);\n    root.add_children(f3, f2, f1);\n\n    root.run_and_finish(f0);\n}\n\n// two arguments\ntemplate<typename F0, typename F1>\nvoid parallel_invoke(const F0& f0, const F1& f1) {\n    task_group_context context;\n    parallel_invoke<F0, F1>(f0, f1, context);\n}\n// three arguments\ntemplate<typename F0, typename F1, typename F2>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2) {\n    task_group_context context;\n    parallel_invoke<F0, F1, F2>(f0, f1, f2, context);\n}\n// four arguments\ntemplate<typename F0, typename F1, typename F2, typename F3 >\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3) {\n    task_group_context context;\n    parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);\n}\n// five arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4) {\n    task_group_context context;\n    parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);\n}\n// six arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4, const F5& f5) {\n    task_group_context context;\n    parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);\n}\n// seven arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6)\n{\n    task_group_context context;\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);\n}\n// eight arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7)\n{\n    task_group_context context;\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);\n}\n// nine arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8)\n{\n    task_group_context context;\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);\n}\n// ten arguments\ntemplate<typename F0, typename F1, typename F2, typename F3, typename F4,\n         typename F5, typename F6, typename F7, typename F8, typename F9>\nvoid parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, const F4& f4,\n                     const F5& f5, const F6& f6, const F7& f7, const F8& f8, const F9& f9)\n{\n    task_group_context context;\n    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);\n}\n#endif // __TBB_VARIADIC_PARALLEL_INVOKE\n//@}\n\n} // namespace\n\n#endif /* __TBB_parallel_invoke_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/parallel_reduce.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_parallel_reduce_H\n#define __TBB_parallel_reduce_H\n\n#include <new>\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include \"partitioner.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n\n    using namespace tbb::internal;\n\n    /** Values for reduction_context. */\n    enum {\n        root_task, left_child, right_child\n    };\n\n    /** Represented as a char, not enum, for compactness. */\n    typedef char reduction_context;\n\n    //! Task type used to combine the partial results of parallel_reduce.\n    /** @ingroup algorithms */\n    template<typename Body>\n    class finish_reduce: public flag_task {\n        //! Pointer to body, or NULL if the left child has not yet finished.\n        bool has_right_zombie;\n        const reduction_context my_context;\n        Body* my_body;\n        aligned_space<Body> zombie_space;\n        finish_reduce( reduction_context context_ ) :\n            has_right_zombie(false), // TODO: substitute by flag_task::child_stolen?\n            my_context(context_),\n            my_body(NULL)\n        {\n        }\n        ~finish_reduce() {\n            if( has_right_zombie )\n                zombie_space.begin()->~Body();\n        }\n        task* execute() {\n            if( has_right_zombie ) {\n                // Right child was stolen.\n                Body* s = zombie_space.begin();\n                my_body->join( *s );\n                // Body::join() won't be called if canceled. Defer destruction to destructor\n            }\n            if( my_context==left_child )\n                itt_store_word_with_release( static_cast<finish_reduce*>(parent())->my_body, my_body );\n            return NULL;\n        }\n        template<typename Range,typename Body_, typename Partitioner>\n        friend class start_reduce;\n    };\n\n    //! allocate right task with new parent\n    void allocate_sibling(task* start_reduce_task, task *tasks[], size_t start_bytes, size_t finish_bytes);\n\n    //! Task type used to split the work of parallel_reduce.\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner>\n    class start_reduce: public task {\n        typedef finish_reduce<Body> finish_type;\n        Body* my_body;\n        Range my_range;\n        typename Partitioner::task_partition_type my_partition;\n        reduction_context my_context;\n        /*override*/ task* execute();\n        //! Update affinity info, if any\n        /*override*/ void note_affinity( affinity_id id ) {\n            my_partition.note_affinity( id );\n        }\n        template<typename Body_>\n        friend class finish_reduce;\n\npublic:\n        //! Constructor used for root task\n        start_reduce( const Range& range, Body* body, Partitioner& partitioner ) :\n            my_body(body),\n            my_range(range),\n            my_partition(partitioner),\n            my_context(root_task)\n        {\n        }\n        //! Splitting constructor used to generate children.\n        /** parent_ becomes left child.  Newly constructed object is right child. */\n        start_reduce( start_reduce& parent_, typename Partitioner::split_type& split_obj ) :\n            my_body(parent_.my_body),\n            my_range(parent_.my_range, split_obj),\n            my_partition(parent_.my_partition, split_obj),\n            my_context(right_child)\n        {\n            my_partition.set_affinity(*this);\n            parent_.my_context = left_child;\n        }\n        //! Construct right child from the given range as response to the demand.\n        /** parent_ remains left child.  Newly constructed object is right child. */\n        start_reduce( start_reduce& parent_, const Range& r, depth_t d ) :\n            my_body(parent_.my_body),\n            my_range(r),\n            my_partition(parent_.my_partition, split()),\n            my_context(right_child)\n        {\n            my_partition.set_affinity(*this);\n            my_partition.align_depth( d ); // TODO: move into constructor of partitioner\n            parent_.my_context = left_child;\n        }\n        static void run( const Range& range, Body& body, Partitioner& partitioner ) {\n            if( !range.empty() ) {\n#if !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP\n                task::spawn_root_and_wait( *new(task::allocate_root()) start_reduce(range,&body,partitioner) );\n#else\n                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,\n                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.\n                task_group_context context;\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_reduce(range,&body,partitioner) );\n#endif /* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        static void run( const Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {\n            if( !range.empty() )\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_reduce(range,&body,partitioner) );\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        //! Run body for range\n        void run_body( Range &r ) { (*my_body)( r ); }\n\n        //! spawn right task, serves as callback for partitioner\n        // TODO: remove code duplication from 'offer_work' methods\n        void offer_work(typename Partitioner::split_type& split_obj) {\n            task *tasks[2];\n            allocate_sibling(static_cast<task*>(this), tasks, sizeof(start_reduce), sizeof(finish_type));\n            new((void*)tasks[0]) finish_type(my_context);\n            new((void*)tasks[1]) start_reduce(*this, split_obj);\n            spawn(*tasks[1]);\n        }\n        //! spawn right task, serves as callback for partitioner\n        void offer_work(const Range& r, depth_t d = 0) {\n            task *tasks[2];\n            allocate_sibling(static_cast<task*>(this), tasks, sizeof(start_reduce), sizeof(finish_type));\n            new((void*)tasks[0]) finish_type(my_context);\n            new((void*)tasks[1]) start_reduce(*this, r, d);\n            spawn(*tasks[1]);\n        }\n    };\n\n    //! allocate right task with new parent\n    // TODO: 'inline' here is to avoid multiple definition error but for sake of code size this should not be inlined\n    inline void allocate_sibling(task* start_reduce_task, task *tasks[], size_t start_bytes, size_t finish_bytes) {\n        tasks[0] = &start_reduce_task->allocate_continuation().allocate(finish_bytes);\n        start_reduce_task->set_parent(tasks[0]);\n        tasks[0]->set_ref_count(2);\n        tasks[1] = &tasks[0]->allocate_child().allocate(start_bytes);\n    }\n\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_reduce<Range,Body,Partitioner>::execute() {\n        my_partition.check_being_stolen( *this );\n        if( my_context==right_child ) {\n            finish_type* parent_ptr = static_cast<finish_type*>(parent());\n            if( !itt_load_word_with_acquire(parent_ptr->my_body) ) { // TODO: replace by is_stolen_task() or by parent_ptr->ref_count() == 2???\n                my_body = new( parent_ptr->zombie_space.begin() ) Body(*my_body,split());\n                parent_ptr->has_right_zombie = true;\n            }\n        } else __TBB_ASSERT(my_context==root_task,NULL);// because left leaf spawns right leafs without recycling\n        my_partition.execute(*this, my_range);\n        if( my_context==left_child ) {\n            finish_type* parent_ptr = static_cast<finish_type*>(parent());\n            __TBB_ASSERT(my_body!=parent_ptr->zombie_space.begin(),NULL);\n            itt_store_word_with_release(parent_ptr->my_body, my_body );\n        }\n        return NULL;\n    }\n\n    //! Task type used to combine the partial results of parallel_deterministic_reduce.\n    /** @ingroup algorithms */\n    template<typename Body>\n    class finish_deterministic_reduce: public task {\n        Body &my_left_body;\n        Body my_right_body;\n\n        finish_deterministic_reduce( Body &body ) :\n            my_left_body( body ),\n            my_right_body( body, split() )\n        {\n        }\n        task* execute() {\n            my_left_body.join( my_right_body );\n            return NULL;\n        }\n        template<typename Range,typename Body_>\n        friend class start_deterministic_reduce;\n    };\n\n    //! Task type used to split the work of parallel_deterministic_reduce.\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class start_deterministic_reduce: public task {\n        typedef finish_deterministic_reduce<Body> finish_type;\n        Body &my_body;\n        Range my_range;\n        /*override*/ task* execute();\n\n        //! Constructor used for root task\n        start_deterministic_reduce( const Range& range, Body& body ) :\n            my_body( body ),\n            my_range( range )\n        {\n        }\n        //! Splitting constructor used to generate children.\n        /** parent_ becomes left child.  Newly constructed object is right child. */\n        start_deterministic_reduce( start_deterministic_reduce& parent_, finish_type& c ) :\n            my_body( c.my_right_body ),\n            my_range( parent_.my_range, split() )\n        {\n        }\n\npublic:\n        static void run( const Range& range, Body& body ) {\n            if( !range.empty() ) {\n#if !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP\n                task::spawn_root_and_wait( *new(task::allocate_root()) start_deterministic_reduce(range,&body) );\n#else\n                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,\n                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.\n                task_group_context context;\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_deterministic_reduce(range,body) );\n#endif /* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */\n            }\n        }\n#if __TBB_TASK_GROUP_CONTEXT\n        static void run( const Range& range, Body& body, task_group_context& context ) {\n            if( !range.empty() )\n                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_deterministic_reduce(range,body) );\n        }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    };\n\n    template<typename Range, typename Body>\n    task* start_deterministic_reduce<Range,Body>::execute() {\n        if( !my_range.is_divisible() ) {\n            my_body( my_range );\n            return NULL;\n        } else {\n            finish_type& c = *new( allocate_continuation() ) finish_type( my_body );\n            recycle_as_child_of(c);\n            c.set_ref_count(2);\n            start_deterministic_reduce& b = *new( c.allocate_child() ) start_deterministic_reduce( *this, c );\n            task::spawn(b);\n            return this;\n        }\n    }\n} // namespace internal\n//! @endcond\n} //namespace interfaceX\n\n//! @cond INTERNAL\nnamespace internal {\n    using interface9::internal::start_reduce;\n    using interface9::internal::start_deterministic_reduce;\n    //! Auxiliary class for parallel_reduce; for internal use only.\n    /** The adaptor class that implements \\ref parallel_reduce_body_req \"parallel_reduce Body\"\n        using given \\ref parallel_reduce_lambda_req \"anonymous function objects\".\n     **/\n    /** @ingroup algorithms */\n    template<typename Range, typename Value, typename RealBody, typename Reduction>\n    class lambda_reduce_body {\n\n//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced\n//       (might require some performance measurements)\n\n        const Value&     identity_element;\n        const RealBody&  my_real_body;\n        const Reduction& my_reduction;\n        Value            my_value;\n        lambda_reduce_body& operator= ( const lambda_reduce_body& other );\n    public:\n        lambda_reduce_body( const Value& identity, const RealBody& body, const Reduction& reduction )\n            : identity_element(identity)\n            , my_real_body(body)\n            , my_reduction(reduction)\n            , my_value(identity)\n        { }\n        lambda_reduce_body( const lambda_reduce_body& other )\n            : identity_element(other.identity_element)\n            , my_real_body(other.my_real_body)\n            , my_reduction(other.my_reduction)\n            , my_value(other.my_value)\n        { }\n        lambda_reduce_body( lambda_reduce_body& other, tbb::split )\n            : identity_element(other.identity_element)\n            , my_real_body(other.my_real_body)\n            , my_reduction(other.my_reduction)\n            , my_value(other.identity_element)\n        { }\n        void operator()(Range& range) {\n            my_value = my_real_body(range, const_cast<const Value&>(my_value));\n        }\n        void join( lambda_reduce_body& rhs ) {\n            my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));\n        }\n        Value result() const {\n            return my_value;\n        }\n    };\n\n} // namespace internal\n//! @endcond\n\n// Requirements on Range concept are documented in blocked_range.h\n\n/** \\page parallel_reduce_body_req Requirements on parallel_reduce body\n    Class \\c Body implementing the concept of parallel_reduce body must define:\n    - \\code Body::Body( Body&, split ); \\endcode        Splitting constructor.\n                                                        Must be able to run concurrently with operator() and method \\c join\n    - \\code Body::~Body(); \\endcode                     Destructor\n    - \\code void Body::operator()( Range& r ); \\endcode Function call operator applying body to range \\c r\n                                                        and accumulating the result\n    - \\code void Body::join( Body& b ); \\endcode        Join results.\n                                                        The result in \\c b should be merged into the result of \\c this\n**/\n\n/** \\page parallel_reduce_lambda_req Requirements on parallel_reduce anonymous function objects (lambda functions)\n    TO BE DOCUMENTED\n**/\n\n/** \\name parallel_reduce\n    See also requirements on \\ref range_req \"Range\" and \\ref parallel_reduce_body_req \"parallel_reduce Body\". **/\n//@{\n\n//! Parallel iteration with reduction and default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body ) {\n    internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_PARTITIONER() );\n}\n\n//! Parallel iteration with reduction and simple_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const simple_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );\n}\n\n//! Parallel iteration with reduction and auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const auto_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );\n}\n\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration with reduction and static_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const static_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,const static_partitioner>::run( range, body, partitioner );\n}\n#endif\n\n//! Parallel iteration with reduction and affinity_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, affinity_partitioner& partitioner ) {\n    internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );\n}\n\n//! Parallel iteration with reduction, auto_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const auto_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );\n}\n\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration with reduction, static_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, const static_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,const static_partitioner>::run( range, body, partitioner, context );\n}\n#endif\n\n//! Parallel iteration with reduction, affinity_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_reduce( const Range& range, Body& body, affinity_partitioner& partitioner, task_group_context& context ) {\n    internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/** parallel_reduce overloads that work with anonymous function objects\n    (see also \\ref parallel_reduce_lambda_req \"requirements on parallel_reduce anonymous function objects\"). **/\n\n//! Parallel iteration with reduction and default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const __TBB_DEFAULT_PARTITIONER>\n                          ::run(range, body, __TBB_DEFAULT_PARTITIONER() );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and simple_partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const simple_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const simple_partitioner>\n                          ::run(range, body, partitioner );\n    return body.result();\n}\n\n//! Parallel iteration with reduction and auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const auto_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const auto_partitioner>\n                          ::run( range, body, partitioner );\n    return body.result();\n}\n\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration with reduction and static_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const static_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const static_partitioner>\n                                        ::run( range, body, partitioner );\n    return body.result();\n}\n#endif\n\n//! Parallel iteration with reduction and affinity_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       affinity_partitioner& partitioner ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,affinity_partitioner>\n                                        ::run( range, body, partitioner );\n    return body.result();\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const simple_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const simple_partitioner>\n                          ::run( range, body, partitioner, context );\n    return body.result();\n}\n\n//! Parallel iteration with reduction, auto_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const auto_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const auto_partitioner>\n                          ::run( range, body, partitioner, context );\n    return body.result();\n}\n\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! Parallel iteration with reduction, static_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       const static_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const static_partitioner>\n                                        ::run( range, body, partitioner, context );\n    return body.result();\n}\n#endif\n\n//! Parallel iteration with reduction, affinity_partitioner and user-supplied context\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       affinity_partitioner& partitioner, task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,affinity_partitioner>\n                                        ::run( range, body, partitioner, context );\n    return body.result();\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Parallel iteration with deterministic reduction and default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body ) {\n    internal::start_deterministic_reduce<Range,Body>::run( range, body );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_deterministic_reduce( const Range& range, Body& body, task_group_context& context ) {\n    internal::start_deterministic_reduce<Range,Body>::run( range, body, context );\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n/** parallel_reduce overloads that work with anonymous function objects\n    (see also \\ref parallel_reduce_lambda_req \"requirements on parallel_reduce anonymous function objects\"). **/\n\n//! Parallel iteration with deterministic reduction and default partitioner.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >\n                          ::run(range, body);\n    return body.result();\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Value, typename RealBody, typename Reduction>\nValue parallel_deterministic_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,\n                       task_group_context& context ) {\n    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);\n    internal::start_deterministic_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >\n                          ::run( range, body, context );\n    return body.result();\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n//@}\n\n} // namespace tbb\n\n#endif /* __TBB_parallel_reduce_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/parallel_scan.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_parallel_scan_H\n#define __TBB_parallel_scan_H\n\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include <new>\n#include \"partitioner.h\"\n\nnamespace tbb {\n\n//! Used to indicate that the initial scan is being performed.\n/** @ingroup algorithms */\nstruct pre_scan_tag {\n    static bool is_final_scan() {return false;}\n};\n\n//! Used to indicate that the final scan is being performed.\n/** @ingroup algorithms */\nstruct final_scan_tag {\n    static bool is_final_scan() {return true;}\n};\n\n//! @cond INTERNAL\nnamespace internal {\n\n    //! Performs final scan for a leaf\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class final_sum: public task {\n    public:\n        Body my_body;\n    private:\n        aligned_space<Range> my_range;\n        //! Where to put result of last subrange, or NULL if not last subrange.\n        Body* my_stuff_last;\n    public:\n        final_sum( Body& body_ ) :\n            my_body(body_,split())\n        {\n            poison_pointer(my_stuff_last);\n        }\n        ~final_sum() {\n            my_range.begin()->~Range();\n        }\n        void finish_construction( const Range& range_, Body* stuff_last_ ) {\n            new( my_range.begin() ) Range(range_);\n            my_stuff_last = stuff_last_;\n        }\n    private:\n        /*override*/ task* execute() {\n            my_body( *my_range.begin(), final_scan_tag() );\n            if( my_stuff_last )\n                my_stuff_last->assign(my_body);\n            return NULL;\n        }\n    };\n\n    //! Split work to be done in the scan.\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class sum_node: public task {\n        typedef final_sum<Range,Body> final_sum_type;\n    public:\n        final_sum_type *my_incoming;\n        final_sum_type *my_body;\n        Body *my_stuff_last;\n    private:\n        final_sum_type *my_left_sum;\n        sum_node *my_left;\n        sum_node *my_right;\n        bool my_left_is_final;\n        Range my_range;\n        sum_node( const Range range_, bool left_is_final_ ) :\n            my_left_sum(NULL),\n            my_left(NULL),\n            my_right(NULL),\n            my_left_is_final(left_is_final_),\n            my_range(range_)\n        {\n            // Poison fields that will be set by second pass.\n            poison_pointer(my_body);\n            poison_pointer(my_incoming);\n        }\n        task* create_child( const Range& range_, final_sum_type& f, sum_node* n, final_sum_type* incoming_, Body* stuff_last_ ) {\n            if( !n ) {\n                f.recycle_as_child_of( *this );\n                f.finish_construction( range_, stuff_last_ );\n                return &f;\n            } else {\n                n->my_body = &f;\n                n->my_incoming = incoming_;\n                n->my_stuff_last = stuff_last_;\n                return n;\n            }\n        }\n        /*override*/ task* execute() {\n            if( my_body ) {\n                if( my_incoming )\n                    my_left_sum->my_body.reverse_join( my_incoming->my_body );\n                recycle_as_continuation();\n                sum_node& c = *this;\n                task* b = c.create_child(Range(my_range,split()),*my_left_sum,my_right,my_left_sum,my_stuff_last);\n                task* a = my_left_is_final ? NULL : c.create_child(my_range,*my_body,my_left,my_incoming,NULL);\n                set_ref_count( (a!=NULL)+(b!=NULL) );\n                my_body = NULL;\n                if( a ) spawn(*b);\n                else a = b;\n                return a;\n            } else {\n                return NULL;\n            }\n        }\n        template<typename Range_,typename Body_,typename Partitioner_>\n        friend class start_scan;\n\n        template<typename Range_,typename Body_>\n        friend class finish_scan;\n    };\n\n    //! Combine partial results\n    /** @ingroup algorithms */\n    template<typename Range, typename Body>\n    class finish_scan: public task {\n        typedef sum_node<Range,Body> sum_node_type;\n        typedef final_sum<Range,Body> final_sum_type;\n        final_sum_type** const my_sum;\n        sum_node_type*& my_return_slot;\n    public:\n        final_sum_type* my_right_zombie;\n        sum_node_type& my_result;\n\n        /*override*/ task* execute() {\n            __TBB_ASSERT( my_result.ref_count()==(my_result.my_left!=NULL)+(my_result.my_right!=NULL), NULL );\n            if( my_result.my_left )\n                my_result.my_left_is_final = false;\n            if( my_right_zombie && my_sum )\n                ((*my_sum)->my_body).reverse_join(my_result.my_left_sum->my_body);\n            __TBB_ASSERT( !my_return_slot, NULL );\n            if( my_right_zombie || my_result.my_right ) {\n                my_return_slot = &my_result;\n            } else {\n                destroy( my_result );\n            }\n            if( my_right_zombie && !my_sum && !my_result.my_right ) {\n                destroy(*my_right_zombie);\n                my_right_zombie = NULL;\n            }\n            return NULL;\n        }\n\n        finish_scan( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) :\n            my_sum(sum_),\n            my_return_slot(return_slot_),\n            my_right_zombie(NULL),\n            my_result(result_)\n        {\n            __TBB_ASSERT( !my_return_slot, NULL );\n        }\n    };\n\n    //! Initial task to split the work\n    /** @ingroup algorithms */\n    template<typename Range, typename Body, typename Partitioner=simple_partitioner>\n    class start_scan: public task {\n        typedef sum_node<Range,Body> sum_node_type;\n        typedef final_sum<Range,Body> final_sum_type;\n        final_sum_type* my_body;\n        /** Non-null if caller is requesting total. */\n        final_sum_type** my_sum;\n        sum_node_type** my_return_slot;\n        /** Null if computing root. */\n        sum_node_type* my_parent_sum;\n        bool my_is_final;\n        bool my_is_right_child;\n        Range my_range;\n        typename Partitioner::partition_type my_partition;\n        /*override*/ task* execute();\n    public:\n        start_scan( sum_node_type*& return_slot_, start_scan& parent_, sum_node_type* parent_sum_ ) :\n            my_body(parent_.my_body),\n            my_sum(parent_.my_sum),\n            my_return_slot(&return_slot_),\n            my_parent_sum(parent_sum_),\n            my_is_final(parent_.my_is_final),\n            my_is_right_child(false),\n            my_range(parent_.my_range,split()),\n            my_partition(parent_.my_partition,split())\n        {\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        }\n\n        start_scan( sum_node_type*& return_slot_, const Range& range_, final_sum_type& body_, const Partitioner& partitioner_) :\n            my_body(&body_),\n            my_sum(NULL),\n            my_return_slot(&return_slot_),\n            my_parent_sum(NULL),\n            my_is_final(true),\n            my_is_right_child(false),\n            my_range(range_),\n            my_partition(partitioner_)\n        {\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        }\n\n        static void run( const Range& range_, Body& body_, const Partitioner& partitioner_ ) {\n            if( !range_.empty() ) {\n                typedef internal::start_scan<Range,Body,Partitioner> start_pass1_type;\n                internal::sum_node<Range,Body>* root = NULL;\n                typedef internal::final_sum<Range,Body> final_sum_type;\n                final_sum_type* temp_body = new(task::allocate_root()) final_sum_type( body_ );\n                start_pass1_type& pass1 = *new(task::allocate_root()) start_pass1_type(\n                    /*my_return_slot=*/root,\n                    range_,\n                    *temp_body,\n                    partitioner_ );\n                task::spawn_root_and_wait( pass1 );\n                if( root ) {\n                    root->my_body = temp_body;\n                    root->my_incoming = NULL;\n                    root->my_stuff_last = &body_;\n                    task::spawn_root_and_wait( *root );\n                } else {\n                    body_.assign(temp_body->my_body);\n                    temp_body->finish_construction( range_, NULL );\n                    temp_body->destroy(*temp_body);\n                }\n            }\n        }\n    };\n\n    template<typename Range, typename Body, typename Partitioner>\n    task* start_scan<Range,Body,Partitioner>::execute() {\n        typedef internal::finish_scan<Range,Body> finish_pass1_type;\n        finish_pass1_type* p = my_parent_sum ? static_cast<finish_pass1_type*>( parent() ) : NULL;\n        // Inspecting p->result.left_sum would ordinarily be a race condition.\n        // But we inspect it only if we are not a stolen task, in which case we\n        // know that task assigning to p->result.left_sum has completed.\n        bool treat_as_stolen = my_is_right_child && (is_stolen_task() || my_body!=p->my_result.my_left_sum);\n        if( treat_as_stolen ) {\n            // Invocation is for right child that has been really stolen or needs to be virtually stolen\n            p->my_right_zombie = my_body = new( allocate_root() ) final_sum_type(my_body->my_body);\n            my_is_final = false;\n        }\n        task* next_task = NULL;\n        if( (my_is_right_child && !treat_as_stolen) || !my_range.is_divisible() || my_partition.should_execute_range(*this) ) {\n            if( my_is_final )\n                (my_body->my_body)( my_range, final_scan_tag() );\n            else if( my_sum )\n                (my_body->my_body)( my_range, pre_scan_tag() );\n            if( my_sum )\n                *my_sum = my_body;\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        } else {\n            sum_node_type* result;\n            if( my_parent_sum )\n                result = new(allocate_additional_child_of(*my_parent_sum)) sum_node_type(my_range,/*my_left_is_final=*/my_is_final);\n            else\n                result = new(task::allocate_root()) sum_node_type(my_range,/*my_left_is_final=*/my_is_final);\n            finish_pass1_type& c = *new( allocate_continuation()) finish_pass1_type(*my_return_slot,my_sum,*result);\n            // Split off right child\n            start_scan& b = *new( c.allocate_child() ) start_scan( /*my_return_slot=*/result->my_right, *this, result );\n            b.my_is_right_child = true;\n            // Left child is recycling of *this.  Must recycle this before spawning b,\n            // otherwise b might complete and decrement c.ref_count() to zero, which\n            // would cause c.execute() to run prematurely.\n            recycle_as_child_of(c);\n            c.set_ref_count(2);\n            c.spawn(b);\n            my_sum = &result->my_left_sum;\n            my_return_slot = &result->my_left;\n            my_is_right_child = false;\n            next_task = this;\n            my_parent_sum = result;\n            __TBB_ASSERT( !*my_return_slot, NULL );\n        }\n        return next_task;\n    }\n} // namespace internal\n//! @endcond\n\n// Requirements on Range concept are documented in blocked_range.h\n\n/** \\page parallel_scan_body_req Requirements on parallel_scan body\n    Class \\c Body implementing the concept of parallel_scan body must define:\n    - \\code Body::Body( Body&, split ); \\endcode    Splitting constructor.\n                                                    Split \\c b so that \\c this and \\c b can accumulate separately\n    - \\code Body::~Body(); \\endcode                 Destructor\n    - \\code void Body::operator()( const Range& r, pre_scan_tag ); \\endcode\n                                                    Preprocess iterations for range \\c r\n    - \\code void Body::operator()( const Range& r, final_scan_tag ); \\endcode\n                                                    Do final processing for iterations of range \\c r\n    - \\code void Body::reverse_join( Body& a ); \\endcode\n                                                    Merge preprocessing state of \\c a into \\c this, where \\c a was\n                                                    created earlier from \\c b by b's splitting constructor\n**/\n\n/** \\name parallel_scan\n    See also requirements on \\ref range_req \"Range\" and \\ref parallel_scan_body_req \"parallel_scan Body\". **/\n//@{\n\n//! Parallel prefix with default partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_scan( const Range& range, Body& body ) {\n    internal::start_scan<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());\n}\n\n//! Parallel prefix with simple_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_scan( const Range& range, Body& body, const simple_partitioner& partitioner ) {\n    internal::start_scan<Range,Body,simple_partitioner>::run(range,body,partitioner);\n}\n\n//! Parallel prefix with auto_partitioner\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Body>\nvoid parallel_scan( const Range& range, Body& body, const auto_partitioner& partitioner ) {\n    internal::start_scan<Range,Body,auto_partitioner>::run(range,body,partitioner);\n}\n//@}\n\n} // namespace tbb\n\n#endif /* __TBB_parallel_scan_H */\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/parallel_sort.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_parallel_sort_H\n#define __TBB_parallel_sort_H\n\n#include \"parallel_for.h\"\n#include \"blocked_range.h\"\n#include \"internal/_range_iterator.h\"\n#include <algorithm>\n#include <iterator>\n#include <functional>\n\nnamespace tbb {\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\n\nusing tbb::internal::no_assign;\n\n//! Range used in quicksort to split elements into subranges based on a value.\n/** The split operation selects a splitter and places all elements less than or equal\n    to the value in the first range and the remaining elements in the second range.\n    @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nclass quick_sort_range: private no_assign {\n\n    inline size_t median_of_three(const RandomAccessIterator &array, size_t l, size_t m, size_t r) const {\n        return comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) )\n                                        : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );\n    }\n\n    inline size_t pseudo_median_of_nine( const RandomAccessIterator &array, const quick_sort_range &range ) const {\n        size_t offset = range.size/8u;\n        return median_of_three(array,\n                               median_of_three(array, 0, offset, offset*2),\n                               median_of_three(array, offset*3, offset*4, offset*5),\n                               median_of_three(array, offset*6, offset*7, range.size - 1) );\n\n    }\n\n    size_t split_range( quick_sort_range& range ) {\n        using std::iter_swap;\n        RandomAccessIterator array = range.begin;\n        RandomAccessIterator key0 = range.begin;\n        size_t m = pseudo_median_of_nine(array, range);\n        if (m) iter_swap ( array, array+m );\n\n        size_t i=0;\n        size_t j=range.size;\n        // Partition interval [i+1,j-1] with key *key0.\n        for(;;) {\n            __TBB_ASSERT( i<j, NULL );\n            // Loop must terminate since array[l]==*key0.\n            do {\n                --j;\n                __TBB_ASSERT( i<=j, \"bad ordering relation?\" );\n            } while( comp( *key0, array[j] ));\n            do {\n                __TBB_ASSERT( i<=j, NULL );\n                if( i==j ) goto partition;\n                ++i;\n            } while( comp( array[i],*key0 ));\n            if( i==j ) goto partition;\n            iter_swap( array+i, array+j );\n        }\npartition:\n        // Put the partition key were it belongs\n        iter_swap( array+j, key0 );\n        // array[l..j) is less or equal to key.\n        // array(j..r) is greater or equal to key.\n        // array[j] is equal to key\n        i=j+1;\n        size_t new_range_size = range.size-i;\n        range.size = j;\n        return new_range_size;\n    }\n\npublic:\n\n    static const size_t grainsize = 500;\n    const Compare &comp;\n    size_t size;\n    RandomAccessIterator begin;\n\n    quick_sort_range( RandomAccessIterator begin_, size_t size_, const Compare &comp_ ) :\n        comp(comp_), size(size_), begin(begin_) {}\n\n    bool empty() const {return size==0;}\n    bool is_divisible() const {return size>=grainsize;}\n\n    quick_sort_range( quick_sort_range& range, split )\n        : comp(range.comp)\n        , size(split_range(range))\n          // +1 accounts for the pivot element, which is at its correct place\n          // already and, therefore, is not included into subranges.\n        , begin(range.begin+range.size+1) {}\n};\n\n#if __TBB_TASK_GROUP_CONTEXT\n//! Body class used to test if elements in a range are presorted\n/** @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nclass quick_sort_pretest_body : no_assign {\n    const Compare &comp;\n\npublic:\n    quick_sort_pretest_body(const Compare &_comp) : comp(_comp) {}\n\n    void operator()( const blocked_range<RandomAccessIterator>& range ) const {\n        task &my_task = task::self();\n        RandomAccessIterator my_end = range.end();\n\n        int i = 0;\n        for (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {\n            if ( i%64 == 0 && my_task.is_cancelled() ) break;\n\n            // The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1\n            if ( comp( *(k), *(k-1) ) ) {\n                my_task.cancel_group_execution();\n                break;\n            }\n        }\n    }\n\n};\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Body class used to sort elements in a range that is smaller than the grainsize.\n/** @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nstruct quick_sort_body {\n    void operator()( const quick_sort_range<RandomAccessIterator,Compare>& range ) const {\n        //SerialQuickSort( range.begin, range.size, range.comp );\n        std::sort( range.begin, range.begin + range.size, range.comp );\n    }\n};\n\n//! Wrapper method to initiate the sort by calling parallel_for.\n/** @ingroup algorithms */\ntemplate<typename RandomAccessIterator, typename Compare>\nvoid parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp ) {\n#if __TBB_TASK_GROUP_CONTEXT\n    task_group_context my_context;\n    const int serial_cutoff = 9;\n\n    __TBB_ASSERT( begin + serial_cutoff < end, \"min_parallel_size is smaller than serial cutoff?\" );\n    RandomAccessIterator k = begin;\n    for ( ; k != begin + serial_cutoff; ++k ) {\n        if ( comp( *(k+1), *k ) ) {\n            goto do_parallel_quick_sort;\n        }\n    }\n\n    parallel_for( blocked_range<RandomAccessIterator>(k+1, end),\n                  quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),\n                  auto_partitioner(),\n                  my_context);\n\n    if (my_context.is_group_execution_cancelled())\ndo_parallel_quick_sort:\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n        parallel_for( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ),\n                      quick_sort_body<RandomAccessIterator,Compare>(),\n                      auto_partitioner() );\n}\n\n} // namespace internal\n//! @endcond\n} // namespace interfaceX\n\n/** \\page parallel_sort_iter_req Requirements on iterators for parallel_sort\n    Requirements on the iterator type \\c It and its value type \\c T for \\c parallel_sort:\n\n    - \\code void iter_swap( It a, It b ) \\endcode Swaps the values of the elements the given\n    iterators \\c a and \\c b are pointing to. \\c It should be a random access iterator.\n\n    - \\code bool Compare::operator()( const T& x, const T& y ) \\endcode True if x comes before y;\n**/\n\n/** \\name parallel_sort\n    See also requirements on \\ref parallel_sort_iter_req \"iterators for parallel_sort\". **/\n//@{\n\n//! Sorts the data in [begin,end) using the given comparator\n/** The compare function object is used for all comparisons between elements during sorting.\n    The compare object must define a bool operator() function.\n    @ingroup algorithms **/\ntemplate<typename RandomAccessIterator, typename Compare>\nvoid parallel_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp) {\n    const int min_parallel_size = 500;\n    if( end > begin ) {\n        if (end - begin < min_parallel_size) {\n            std::sort(begin, end, comp);\n        } else {\n            interface9::internal::parallel_quick_sort(begin, end, comp);\n        }\n    }\n}\n\n//! Sorts the data in [begin,end) with a default comparator \\c std::less<RandomAccessIterator>\n/** @ingroup algorithms **/\ntemplate<typename RandomAccessIterator>\ninline void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end ) {\n    parallel_sort( begin, end, std::less< typename std::iterator_traits<RandomAccessIterator>::value_type >() );\n}\n\n//! Sorts the data in rng using the given comparator\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Compare>\nvoid parallel_sort(Range& rng, const Compare& comp) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng), comp);\n}\n\n//! Sorts the data in const rng using the given comparator\n/** @ingroup algorithms **/\ntemplate<typename Range, typename Compare>\nvoid parallel_sort(const Range& rng, const Compare& comp) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng), comp);\n}\n\n//! Sorts the data in rng with a default comparator \\c std::less<RandomAccessIterator>\n/** @ingroup algorithms **/\ntemplate<typename Range>\nvoid parallel_sort(Range& rng) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng));\n}\n\n//! Sorts the data in const rng with a default comparator \\c std::less<RandomAccessIterator>\n/** @ingroup algorithms **/\ntemplate<typename Range>\nvoid parallel_sort(const Range& rng) {\n    parallel_sort(tbb::internal::first(rng), tbb::internal::last(rng));\n}\n\n//! Sorts the data in the range \\c [begin,end) with a default comparator \\c std::less<T>\n/** @ingroup algorithms **/\ntemplate<typename T>\ninline void parallel_sort( T * begin, T * end ) {\n    parallel_sort( begin, end, std::less< T >() );\n}\n//@}\n\n\n} // namespace tbb\n\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/parallel_while.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_parallel_while\n#define __TBB_parallel_while\n\n#include \"task.h\"\n#include <new>\n\nnamespace tbb {\n\ntemplate<typename Body>\nclass parallel_while;\n\n//! @cond INTERNAL\nnamespace internal {\n\n    template<typename Stream, typename Body> class while_task;\n\n    //! For internal use only.\n    /** Executes one iteration of a while.\n        @ingroup algorithms */\n    template<typename Body>\n    class while_iteration_task: public task {\n        const Body& my_body;\n        typename Body::argument_type my_value;\n        /*override*/ task* execute() {\n            my_body(my_value);\n            return NULL;\n        }\n        while_iteration_task( const typename Body::argument_type& value, const Body& body ) :\n            my_body(body), my_value(value)\n        {}\n        template<typename Body_> friend class while_group_task;\n        friend class tbb::parallel_while<Body>;\n    };\n\n    //! For internal use only\n    /** Unpacks a block of iterations.\n        @ingroup algorithms */\n    template<typename Body>\n    class while_group_task: public task {\n        static const size_t max_arg_size = 4;\n        const Body& my_body;\n        size_t size;\n        typename Body::argument_type my_arg[max_arg_size];\n        while_group_task( const Body& body ) : my_body(body), size(0) {}\n        /*override*/ task* execute() {\n            typedef while_iteration_task<Body> iteration_type;\n            __TBB_ASSERT( size>0, NULL );\n            task_list list;\n            task* t;\n            size_t k=0;\n            for(;;) {\n                t = new( allocate_child() ) iteration_type(my_arg[k],my_body);\n                if( ++k==size ) break;\n                list.push_back(*t);\n            }\n            set_ref_count(int(k+1));\n            spawn(list);\n            spawn_and_wait_for_all(*t);\n            return NULL;\n        }\n        template<typename Stream, typename Body_> friend class while_task;\n    };\n\n    //! For internal use only.\n    /** Gets block of iterations from a stream and packages them into a while_group_task.\n        @ingroup algorithms */\n    template<typename Stream, typename Body>\n    class while_task: public task {\n        Stream& my_stream;\n        const Body& my_body;\n        empty_task& my_barrier;\n        /*override*/ task* execute() {\n            typedef while_group_task<Body> block_type;\n            block_type& t = *new( allocate_additional_child_of(my_barrier) ) block_type(my_body);\n            size_t k=0;\n            while( my_stream.pop_if_present(t.my_arg[k]) ) {\n                if( ++k==block_type::max_arg_size ) {\n                    // There might be more iterations.\n                    recycle_to_reexecute();\n                    break;\n                }\n            }\n            if( k==0 ) {\n                destroy(t);\n                return NULL;\n            } else {\n                t.size = k;\n                return &t;\n            }\n        }\n        while_task( Stream& stream, const Body& body, empty_task& barrier ) :\n            my_stream(stream),\n            my_body(body),\n            my_barrier(barrier)\n        {}\n        friend class tbb::parallel_while<Body>;\n    };\n\n} // namespace internal\n//! @endcond\n\n//! Parallel iteration over a stream, with optional addition of more work.\n/** The Body b has the requirement: \\n\n        \"b(v)\"                      \\n\n        \"b.argument_type\"           \\n\n    where v is an argument_type\n    @ingroup algorithms */\ntemplate<typename Body>\nclass parallel_while: internal::no_copy {\npublic:\n    //! Construct empty non-running parallel while.\n    parallel_while() : my_body(NULL), my_barrier(NULL) {}\n\n    //! Destructor cleans up data members before returning.\n    ~parallel_while() {\n        if( my_barrier ) {\n            my_barrier->destroy(*my_barrier);\n            my_barrier = NULL;\n        }\n    }\n\n    //! Type of items\n    typedef typename Body::argument_type value_type;\n\n    //! Apply body.apply to each item in the stream.\n    /** A Stream s has the requirements \\n\n         \"S::value_type\"                \\n\n         \"s.pop_if_present(value) is convertible to bool */\n    template<typename Stream>\n    void run( Stream& stream, const Body& body );\n\n    //! Add a work item while running.\n    /** Should be executed only by body.apply or a thread spawned therefrom. */\n    void add( const value_type& item );\n\nprivate:\n    const Body* my_body;\n    empty_task* my_barrier;\n};\n\ntemplate<typename Body>\ntemplate<typename Stream>\nvoid parallel_while<Body>::run( Stream& stream, const Body& body ) {\n    using namespace internal;\n    empty_task& barrier = *new( task::allocate_root() ) empty_task();\n    my_body = &body;\n    my_barrier = &barrier;\n    my_barrier->set_ref_count(2);\n    while_task<Stream,Body>& w = *new( my_barrier->allocate_child() ) while_task<Stream,Body>( stream, body, barrier );\n    my_barrier->spawn_and_wait_for_all(w);\n    my_barrier->destroy(*my_barrier);\n    my_barrier = NULL;\n    my_body = NULL;\n}\n\ntemplate<typename Body>\nvoid parallel_while<Body>::add( const value_type& item ) {\n    __TBB_ASSERT(my_barrier,\"attempt to add to parallel_while that is not running\");\n    typedef internal::while_iteration_task<Body> iteration_type;\n    iteration_type& i = *new( task::allocate_additional_child_of(*my_barrier) ) iteration_type(item,*my_body);\n    task::self().spawn( i );\n}\n\n} // namespace\n\n#endif /* __TBB_parallel_while */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/partitioner.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_partitioner_H\n#define __TBB_partitioner_H\n\n#ifndef __TBB_INITIAL_CHUNKS\n// initial task divisions per thread\n#define __TBB_INITIAL_CHUNKS 2\n#endif\n#ifndef __TBB_RANGE_POOL_CAPACITY\n// maximum number of elements in range pool\n#define __TBB_RANGE_POOL_CAPACITY 8\n#endif\n#ifndef __TBB_INIT_DEPTH\n// initial value for depth of range pool\n#define __TBB_INIT_DEPTH 5\n#endif\n#ifndef __TBB_DEMAND_DEPTH_ADD\n// when imbalance is found range splits this value times more\n#define __TBB_DEMAND_DEPTH_ADD 2\n#endif\n#ifndef __TBB_STATIC_THRESHOLD\n// necessary number of clocks for the work to be distributed among all tasks\n#define __TBB_STATIC_THRESHOLD 40000\n#endif\n#if __TBB_DEFINE_MIC\n#define __TBB_NONUNIFORM_TASK_CREATION 1\n#ifdef __TBB_time_stamp\n#define __TBB_USE_MACHINE_TIME_STAMPS 1\n#define __TBB_task_duration() __TBB_STATIC_THRESHOLD\n#endif // __TBB_machine_time_stamp\n#endif // __TBB_DEFINE_MIC\n\n#include \"task.h\"\n#include \"aligned_space.h\"\n#include \"atomic.h\"\n#include \"internal/_template_helpers.h\"\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    // Workaround for overzealous compiler warnings\n    #pragma warning (push)\n    #pragma warning (disable: 4244)\n#endif\n\nnamespace tbb {\n\nclass auto_partitioner;\nclass simple_partitioner;\n#if TBB_PREVIEW_STATIC_PARTITIONER\nclass static_partitioner;\n#endif\nclass affinity_partitioner;\n\nnamespace interface9 {\n    namespace internal {\n        class affinity_partition_type;\n    }\n}\n\nnamespace internal { //< @cond INTERNAL\nsize_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();\n\n//! Defines entry point for affinity partitioner into tbb run-time library.\nclass affinity_partitioner_base_v3: no_copy {\n    friend class tbb::affinity_partitioner;\n    friend class tbb::interface9::internal::affinity_partition_type;\n    //! Array that remembers affinities of tree positions to affinity_id.\n    /** NULL if my_size==0. */\n    affinity_id* my_array;\n    //! Number of elements in my_array.\n    size_t my_size;\n    //! Zeros the fields.\n    affinity_partitioner_base_v3() : my_array(NULL), my_size(0) {}\n    //! Deallocates my_array.\n    ~affinity_partitioner_base_v3() {resize(0);}\n    //! Resize my_array.\n    /** Retains values if resulting size is the same. */\n    void __TBB_EXPORTED_METHOD resize( unsigned factor );\n};\n\n//! Provides backward-compatible methods for partition objects without affinity.\nclass partition_type_base {\npublic:\n    void set_affinity( task & ) {}\n    void note_affinity( task::affinity_id ) {}\n    task* continue_after_execute_range() {return NULL;}\n    bool decide_whether_to_delay() {return false;}\n    void spawn_or_delay( bool, task& b ) {\n        task::spawn(b);\n    }\n};\n\ntemplate<typename Range, typename Body, typename Partitioner> class start_scan;\n\n} //< namespace internal @endcond\n\nnamespace serial {\nnamespace interface9 {\ntemplate<typename Range, typename Body, typename Partitioner> class start_for;\n}\n}\n\nnamespace interface9 {\n//! @cond INTERNAL\nnamespace internal {\nusing namespace tbb::internal;\ntemplate<typename Range, typename Body, typename Partitioner> class start_for;\ntemplate<typename Range, typename Body, typename Partitioner> class start_reduce;\n\n//! Join task node that contains shared flag for stealing feedback\nclass flag_task: public task {\npublic:\n    tbb::atomic<bool> my_child_stolen;\n    flag_task() { my_child_stolen = false; }\n    task* execute() { return NULL; }\n    static void mark_task_stolen(task &t) {\n        tbb::atomic<bool> &flag = static_cast<flag_task*>(t.parent())->my_child_stolen;\n#if TBB_USE_THREADING_TOOLS\n        // Threading tools respect lock prefix but report false-positive data-race via plain store\n        flag.fetch_and_store<release>(true);\n#else\n        flag = true;\n#endif //TBB_USE_THREADING_TOOLS\n    }\n    static bool is_peer_stolen(task &t) {\n        return static_cast<flag_task*>(t.parent())->my_child_stolen;\n    }\n};\n\n//! Depth is a relative depth of recursive division inside a range pool. Relative depth allows\n//! infinite absolute depth of the recursion for heavily unbalanced workloads with range represented\n//! by a number that cannot fit into machine word.\ntypedef unsigned char depth_t;\n\n//! Range pool stores ranges of type T in a circular buffer with MaxCapacity\ntemplate <typename T, depth_t MaxCapacity>\nclass range_vector {\n    depth_t my_head;\n    depth_t my_tail;\n    depth_t my_size;\n    depth_t my_depth[MaxCapacity]; // relative depths of stored ranges\n    tbb::aligned_space<T, MaxCapacity> my_pool;\n\npublic:\n    //! initialize via first range in pool\n    range_vector(const T& elem) : my_head(0), my_tail(0), my_size(1) {\n        my_depth[0] = 0;\n        new( static_cast<void *>(my_pool.begin()) ) T(elem);//TODO: std::move?\n    }\n    ~range_vector() {\n        while( !empty() ) pop_back();\n    }\n    bool empty() const { return my_size == 0; }\n    depth_t size() const { return my_size; }\n    //! Populates range pool via ranges up to max depth or while divisible\n    //! max_depth starts from 0, e.g. value 2 makes 3 ranges in the pool up to two 1/4 pieces\n    void split_to_fill(depth_t max_depth) {\n        while( my_size < MaxCapacity && is_divisible(max_depth) ) {\n            depth_t prev = my_head;\n            my_head = (my_head + 1) % MaxCapacity;\n            new(my_pool.begin()+my_head) T(my_pool.begin()[prev]); // copy TODO: std::move?\n            my_pool.begin()[prev].~T(); // instead of assignment\n            new(my_pool.begin()+prev) T(my_pool.begin()[my_head], split()); // do 'inverse' split\n            my_depth[my_head] = ++my_depth[prev];\n            my_size++;\n        }\n    }\n    void pop_back() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::pop_back() with empty size\");\n        my_pool.begin()[my_head].~T();\n        my_size--;\n        my_head = (my_head + MaxCapacity - 1) % MaxCapacity;\n    }\n    void pop_front() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::pop_front() with empty size\");\n        my_pool.begin()[my_tail].~T();\n        my_size--;\n        my_tail = (my_tail + 1) % MaxCapacity;\n    }\n    T& back() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::back() with empty size\");\n        return my_pool.begin()[my_head];\n    }\n    T& front() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::front() with empty size\");\n        return my_pool.begin()[my_tail];\n    }\n    //! similarly to front(), returns depth of the first range in the pool\n    depth_t front_depth() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::front_depth() with empty size\");\n        return my_depth[my_tail];\n    }\n    depth_t back_depth() {\n        __TBB_ASSERT(my_size > 0, \"range_vector::back_depth() with empty size\");\n        return my_depth[my_head];\n    }\n    bool is_divisible(depth_t max_depth) {\n        return back_depth() < max_depth && back().is_divisible();\n    }\n};\n\n//! Provides default methods for partition objects and common algorithm blocks.\ntemplate <typename Partition>\nstruct partition_type_base {\n    typedef split split_type;\n    // decision makers\n    void set_affinity( task & ) {}\n    void note_affinity( task::affinity_id ) {}\n    bool check_being_stolen(task &) { return false; } // part of old should_execute_range()\n    bool check_for_demand(task &) { return false; }\n    bool is_divisible() { return true; } // part of old should_execute_range()\n    depth_t max_depth() { return 0; }\n    void align_depth(depth_t) { }\n    template <typename Range> split_type get_split() { return split(); }\n    Partition& self() { return *static_cast<Partition*>(this); } // CRTP helper\n\n    template<typename StartType, typename Range>\n    void work_balance(StartType &start, Range &range) {\n        start.run_body( range ); // simple partitioner goes always here\n    }\n\n    template<typename StartType, typename Range>\n    void execute(StartType &start, Range &range) {\n        // The algorithm in a few words ([]-denotes calls to decision methods of partitioner):\n        // [If this task is stolen, adjust depth and divisions if necessary, set flag].\n        // If range is divisible {\n        //    Spread the work while [initial divisions left];\n        //    Create trap task [if necessary];\n        // }\n        // If not divisible or [max depth is reached], execute, else do the range pool part\n        if ( range.is_divisible() ) {\n            if ( self().is_divisible() ) {\n                do { // split until is divisible\n                    typename Partition::split_type split_obj = self().template get_split<Range>();\n                    start.offer_work( split_obj );\n                } while ( range.is_divisible() && self().is_divisible() );\n            }\n        }\n        self().work_balance(start, range);\n    }\n};\n\n//! Provides default splitting strategy for partition objects.\ntemplate <typename Partition>\nstruct adaptive_mode : partition_type_base<Partition> {\n    typedef Partition my_partition;\n    using partition_type_base<Partition>::self; // CRTP helper to get access to derived classes\n    size_t my_divisor;\n    // For affinity_partitioner, my_divisor indicates the number of affinity array indices the task reserves.\n    // A task which has only one index must produce the right split without reserved index in order to avoid\n    // it to be overwritten in note_affinity() of the created (right) task.\n    // I.e. a task created deeper than the affinity array can remember must not save its affinity (LIFO order)\n    static const unsigned factor = 1;\n    adaptive_mode() : my_divisor(tbb::internal::get_initial_auto_partitioner_divisor() / 4 * my_partition::factor) {}\n    adaptive_mode(adaptive_mode &src, split) : my_divisor(do_split(src, split())) {}\n    adaptive_mode(adaptive_mode &src, const proportional_split& split_obj) : my_divisor(do_split(src, split_obj)) {}\n    /*! Override do_split methods in order to specify splitting strategy */\n    size_t do_split(adaptive_mode &src, split) {\n        return src.my_divisor /= 2u;\n    }\n    size_t do_split(adaptive_mode &src, const proportional_split& split_obj) {\n#if __TBB_ENABLE_RANGE_FEEDBACK\n        size_t portion = size_t(float(src.my_divisor) * float(split_obj.right())\n                                / float(split_obj.left() + split_obj.right()) + 0.5f);\n#else\n        size_t portion = split_obj.right() * my_partition::factor;\n#endif\n        portion = (portion + my_partition::factor/2) & (0ul - my_partition::factor);\n#if __TBB_ENABLE_RANGE_FEEDBACK\n        /** Corner case handling */\n        if (!portion)\n            portion = my_partition::factor;\n        else if (portion == src.my_divisor)\n            portion = src.my_divisor - my_partition::factor;\n#endif\n        src.my_divisor -= portion;\n        return portion;\n    }\n    bool is_divisible() { // part of old should_execute_range()\n        return my_divisor > my_partition::factor;\n    }\n};\n\n//! Provides default linear indexing of partitioner's sequence\ntemplate <typename Partition>\nstruct linear_affinity_mode : adaptive_mode<Partition> {\n    using adaptive_mode<Partition>::my_divisor;\n    size_t my_head;\n    using adaptive_mode<Partition>::self;\n    linear_affinity_mode() : adaptive_mode<Partition>(), my_head(0) {}\n    linear_affinity_mode(linear_affinity_mode &src, split) : adaptive_mode<Partition>(src, split())\n        , my_head(src.my_head + src.my_divisor) {}\n    linear_affinity_mode(linear_affinity_mode &src, const proportional_split& split_obj) : adaptive_mode<Partition>(src, split_obj)\n        , my_head(src.my_head + src.my_divisor) {}\n    void set_affinity( task &t ) {\n        if( my_divisor )\n            t.set_affinity( affinity_id(my_head) + 1 );\n    }\n};\n\n//! Class determines whether template parameter has static boolean constant\n//! 'is_splittable_in_proportion' initialized with value of 'true' or not.\n/** If template parameter has such field that has been initialized with non-zero\n *  value then class field will be set to 'true', otherwise - 'false'\n */\ntemplate <typename Range>\nclass is_splittable_in_proportion {\nprivate:\n    typedef char yes[1];\n    typedef char no [2];\n\n    template <typename range_type> static yes& decide(typename enable_if<range_type::is_splittable_in_proportion>::type *);\n    template <typename range_type> static no& decide(...);\npublic:\n    // equals to 'true' if and only if static const variable 'is_splittable_in_proportion' of template parameter\n    // initialized with the value of 'true'\n    static const bool value = (sizeof(decide<Range>(0)) == sizeof(yes));\n};\n\n//! Provides default methods for non-balancing partition objects.\ntemplate<class Mode>\nstruct unbalancing_partition_type : Mode {\n    using Mode::self;\n    unbalancing_partition_type() : Mode() {}\n    unbalancing_partition_type(unbalancing_partition_type& p, split) : Mode(p, split()) {}\n    unbalancing_partition_type(unbalancing_partition_type& p, const proportional_split& split_obj) : Mode(p, split_obj) {}\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Suppress \"conditional expression is constant\" warning.\n    #pragma warning( push )\n    #pragma warning( disable: 4127 )\n#endif\n    template <typename Range>\n    proportional_split get_split() {\n        if (is_splittable_in_proportion<Range>::value) {\n            size_t size = self().my_divisor / Mode::my_partition::factor;\n#if __TBB_NONUNIFORM_TASK_CREATION\n            size_t right = (size + 2) / 3;\n#else\n            size_t right = size / 2;\n#endif\n            size_t left = size - right;\n            return proportional_split(left, right);\n        } else {\n            return proportional_split(1, 1);\n        }\n    }\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning( pop )\n#endif // warning 4127 is back\n};\n\n/*! Determine work-balance phase implementing splitting & stealing actions */\ntemplate<class Mode>\nstruct balancing_partition_type : unbalancing_partition_type<Mode> {\n    using Mode::self;\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n    tbb::internal::machine_tsc_t my_dst_tsc;\n#endif\n    enum {\n        begin = 0,\n        run,\n        pass\n    } my_delay;\n    depth_t my_max_depth;\n    static const unsigned range_pool_size = __TBB_RANGE_POOL_CAPACITY;\n    balancing_partition_type(): unbalancing_partition_type<Mode>()\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n        , my_dst_tsc(0)\n#endif\n        , my_delay(begin)\n        , my_max_depth(__TBB_INIT_DEPTH) {}\n    balancing_partition_type(balancing_partition_type& p, split)\n        : unbalancing_partition_type<Mode>(p, split())\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n        , my_dst_tsc(0)\n#endif\n        , my_delay(pass)\n        , my_max_depth(p.my_max_depth) {}\n    balancing_partition_type(balancing_partition_type& p, const proportional_split& split_obj)\n        : unbalancing_partition_type<Mode>(p, split_obj)\n#ifdef __TBB_USE_MACHINE_TIME_STAMPS\n        , my_dst_tsc(0)\n#endif\n        , my_delay(begin)\n        , my_max_depth(p.my_max_depth) {}\n    bool check_being_stolen( task &t) { // part of old should_execute_range()\n        if( !(self().my_divisor / Mode::my_partition::factor) ) { // if not from the top P tasks of binary tree\n            self().my_divisor = 1; // TODO: replace by on-stack flag (partition_state's member)?\n            if( t.is_stolen_task() && t.parent()->ref_count() >= 2 ) { // runs concurrently with the left task\n#if __TBB_USE_OPTIONAL_RTTI\n                // RTTI is available, check whether the cast is valid\n                __TBB_ASSERT(dynamic_cast<flag_task*>(t.parent()), 0);\n                // correctness of the cast relies on avoiding the root task for which:\n                // - initial value of my_divisor != 0 (protected by separate assertion)\n                // - is_stolen_task() always returns false for the root task.\n#endif\n                flag_task::mark_task_stolen(t);\n                if( !my_max_depth ) my_max_depth++;\n                my_max_depth += __TBB_DEMAND_DEPTH_ADD;\n                return true;\n            }\n        }\n        return false;\n    }\n    depth_t max_depth() { return my_max_depth; }\n    void align_depth(depth_t base) {\n        __TBB_ASSERT(base <= my_max_depth, 0);\n        my_max_depth -= base;\n    }\n    template<typename StartType, typename Range>\n    void work_balance(StartType &start, Range &range) {\n        if( !range.is_divisible() || !self().max_depth() ) {\n            start.run_body( range ); // simple partitioner goes always here\n        }\n        else { // do range pool\n            internal::range_vector<Range, range_pool_size> range_pool(range);\n            do {\n                range_pool.split_to_fill(self().max_depth()); // fill range pool\n                if( self().check_for_demand( start ) ) {\n                    if( range_pool.size() > 1 ) {\n                        start.offer_work( range_pool.front(), range_pool.front_depth() );\n                        range_pool.pop_front();\n                        continue;\n                    }\n                    if( range_pool.is_divisible(self().max_depth()) ) // was not enough depth to fork a task\n                        continue; // note: next split_to_fill() should split range at least once\n                }\n                start.run_body( range_pool.back() );\n                range_pool.pop_back();\n            } while( !range_pool.empty() && !start.is_cancelled() );\n        }\n    }\n    bool check_for_demand( task &t ) {\n        if( pass == my_delay ) {\n            if( self().my_divisor > 1 ) // produce affinitized tasks while they have slot in array\n                return true; // do not do my_max_depth++ here, but be sure range_pool is splittable once more\n            else if( self().my_divisor && my_max_depth ) { // make balancing task\n                self().my_divisor = 0; // once for each task; depth will be decreased in align_depth()\n                return true;\n            }\n            else if( flag_task::is_peer_stolen(t) ) {\n                my_max_depth += __TBB_DEMAND_DEPTH_ADD;\n                return true;\n            }\n        } else if( begin == my_delay ) {\n#ifndef __TBB_USE_MACHINE_TIME_STAMPS\n            my_delay = pass;\n#else\n            my_dst_tsc = __TBB_time_stamp() + __TBB_task_duration();\n            my_delay = run;\n        } else if( run == my_delay ) {\n            if( __TBB_time_stamp() < my_dst_tsc ) {\n                __TBB_ASSERT(my_max_depth > 0, NULL);\n                 my_max_depth--; // increase granularity since tasks seem having too small work\n                return false;\n            }\n            my_delay = pass;\n            return true;\n#endif // __TBB_USE_MACHINE_TIME_STAMPS\n        }\n        return false;\n    }\n};\n\nclass auto_partition_type: public balancing_partition_type<adaptive_mode<auto_partition_type> > {\npublic:\n    auto_partition_type( const auto_partitioner& )\n        : balancing_partition_type<adaptive_mode<auto_partition_type> >() {\n        my_divisor *= __TBB_INITIAL_CHUNKS;\n    }\n    auto_partition_type( auto_partition_type& src, split)\n        : balancing_partition_type<adaptive_mode<auto_partition_type> >(src, split()) {}\n    bool is_divisible() { // part of old should_execute_range()\n        if( my_divisor > 1 ) return true;\n        if( my_divisor && my_max_depth ) { // can split the task. TODO: on-stack flag instead\n            // keep same fragmentation while splitting for the local task pool\n            my_max_depth--;\n            my_divisor = 0; // decrease max_depth once per task\n            return true;\n        } else return false;\n    }\n    bool check_for_demand(task &t) {\n        if( flag_task::is_peer_stolen(t) ) {\n            my_max_depth += __TBB_DEMAND_DEPTH_ADD;\n            return true;\n        } else return false;\n    }\n};\n\nclass simple_partition_type: public partition_type_base<simple_partition_type> {\npublic:\n    simple_partition_type( const simple_partitioner& ) {}\n    simple_partition_type( const simple_partition_type&, split ) {}\n    //! simplified algorithm\n    template<typename StartType, typename Range>\n    void execute(StartType &start, Range &range) {\n        split_type split_obj = split(); // start.offer_work accepts split_type as reference\n        while( range.is_divisible() )\n            start.offer_work( split_obj );\n        start.run_body( range );\n    }\n};\n\n#if TBB_PREVIEW_STATIC_PARTITIONER\n#ifndef __TBB_STATIC_PARTITIONER_BASE_TYPE\n#define __TBB_STATIC_PARTITIONER_BASE_TYPE unbalancing_partition_type\n#endif\nclass static_partition_type : public __TBB_STATIC_PARTITIONER_BASE_TYPE<linear_affinity_mode<static_partition_type> > {\npublic:\n    typedef proportional_split split_type;\n    static_partition_type( const static_partitioner& )\n        : __TBB_STATIC_PARTITIONER_BASE_TYPE<linear_affinity_mode<static_partition_type> >() {}\n    static_partition_type( static_partition_type& p, split )\n        : __TBB_STATIC_PARTITIONER_BASE_TYPE<linear_affinity_mode<static_partition_type> >(p, split()) {}\n    static_partition_type( static_partition_type& p, const proportional_split& split_obj )\n        : __TBB_STATIC_PARTITIONER_BASE_TYPE<linear_affinity_mode<static_partition_type> >(p, split_obj) {}\n};\n#undef __TBB_STATIC_PARTITIONER_BASE_TYPE\n#endif\n\nclass affinity_partition_type : public balancing_partition_type<linear_affinity_mode<affinity_partition_type> > {\n    static const unsigned factor_power = 4; // TODO: get a unified formula based on number of computing units\n    tbb::internal::affinity_id* my_array;\npublic:\n    static const unsigned factor = 1 << factor_power; // number of slots in affinity array per task\n    typedef proportional_split split_type;\n    affinity_partition_type( tbb::internal::affinity_partitioner_base_v3& ap )\n        : balancing_partition_type<linear_affinity_mode<affinity_partition_type> >() {\n        __TBB_ASSERT( (factor&(factor-1))==0, \"factor must be power of two\" );\n        ap.resize(factor);\n        my_array = ap.my_array;\n        my_max_depth = factor_power + 1;\n        __TBB_ASSERT( my_max_depth < __TBB_RANGE_POOL_CAPACITY, 0 );\n    }\n    affinity_partition_type(affinity_partition_type& p, split)\n        : balancing_partition_type<linear_affinity_mode<affinity_partition_type> >(p, split())\n        , my_array(p.my_array) {}\n    affinity_partition_type(affinity_partition_type& p, const proportional_split& split_obj)\n        : balancing_partition_type<linear_affinity_mode<affinity_partition_type> >(p, split_obj)\n        , my_array(p.my_array) {}\n    void set_affinity( task &t ) {\n        if( my_divisor ) {\n            if( !my_array[my_head] )\n                // TODO: consider new ideas with my_array for both affinity and static partitioner's, then code reuse\n                t.set_affinity( affinity_id(my_head / factor + 1) );\n            else\n                t.set_affinity( my_array[my_head] );\n        }\n    }\n    void note_affinity( task::affinity_id id ) {\n        if( my_divisor )\n            my_array[my_head] = id;\n    }\n};\n\n//! Backward-compatible partition for auto and affinity partition objects.\nclass old_auto_partition_type: public tbb::internal::partition_type_base {\n    size_t num_chunks;\n    static const size_t VICTIM_CHUNKS = 4;\npublic:\n    bool should_execute_range(const task &t) {\n        if( num_chunks<VICTIM_CHUNKS && t.is_stolen_task() )\n            num_chunks = VICTIM_CHUNKS;\n        return num_chunks==1;\n    }\n    old_auto_partition_type( const auto_partitioner& )\n      : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}\n    old_auto_partition_type( const affinity_partitioner& )\n      : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}\n    old_auto_partition_type( old_auto_partition_type& pt, split ) {\n        num_chunks = pt.num_chunks = (pt.num_chunks+1u) / 2u;\n    }\n};\n\n} // namespace interfaceX::internal\n//! @endcond\n} // namespace interfaceX\n\n//! A simple partitioner\n/** Divides the range until the range is not divisible.\n    @ingroup algorithms */\nclass simple_partitioner {\npublic:\n    simple_partitioner() {}\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility\n    class partition_type: public internal::partition_type_base {\n    public:\n        bool should_execute_range(const task& ) {return false;}\n        partition_type( const simple_partitioner& ) {}\n        partition_type( const partition_type&, split ) {}\n    };\n    // new implementation just extends existing interface\n    typedef interface9::internal::simple_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::simple_partition_type::split_type split_type;\n};\n\n//! An auto partitioner\n/** The range is initial divided into several large chunks.\n    Chunks are further subdivided into smaller pieces if demand detected and they are divisible.\n    @ingroup algorithms */\nclass auto_partitioner {\npublic:\n    auto_partitioner() {}\n\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility\n    typedef interface9::internal::old_auto_partition_type partition_type;\n    // new implementation just extends existing interface\n    typedef interface9::internal::auto_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::auto_partition_type::split_type split_type;\n};\n\n#if TBB_PREVIEW_STATIC_PARTITIONER\n//! A static partitioner\nclass static_partitioner {\npublic:\n    static_partitioner() {}\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility\n    typedef interface9::internal::old_auto_partition_type partition_type;\n    // new implementation just extends existing interface\n    typedef interface9::internal::static_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::static_partition_type::split_type split_type;\n};\n#endif\n\n//! An affinity partitioner\nclass affinity_partitioner: internal::affinity_partitioner_base_v3 {\npublic:\n    affinity_partitioner() {}\n\nprivate:\n    template<typename Range, typename Body, typename Partitioner> friend class serial::interface9::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_for;\n    template<typename Range, typename Body, typename Partitioner> friend class interface9::internal::start_reduce;\n    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;\n    // backward compatibility - for parallel_scan only\n    typedef interface9::internal::old_auto_partition_type partition_type;\n    // new implementation just extends existing interface\n    typedef interface9::internal::affinity_partition_type task_partition_type;\n\n    // TODO: consider to make split_type public\n    typedef interface9::internal::affinity_partition_type::split_type split_type;\n};\n\n} // namespace tbb\n\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4244 is back\n#undef __TBB_INITIAL_CHUNKS\n#undef __TBB_RANGE_POOL_CAPACITY\n#undef __TBB_INIT_DEPTH\n#endif /* __TBB_partitioner_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/pipeline.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_pipeline_H\n#define __TBB_pipeline_H\n\n#include \"atomic.h\"\n#include \"task.h\"\n#include \"tbb_allocator.h\"\n#include <cstddef>\n\n#if __TBB_CPP11_TYPE_PROPERTIES_PRESENT || __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT\n#include <type_traits>\n#endif\n\nnamespace tbb {\n\nclass pipeline;\nclass filter;\n\n//! @cond INTERNAL\nnamespace internal {\n\n// The argument for PIPELINE_VERSION should be an integer between 2 and 9\n#define __TBB_PIPELINE_VERSION(x) ((unsigned char)(x-2)<<1)\n\ntypedef unsigned long Token;\ntypedef long tokendiff_t;\nclass stage_task;\nclass input_buffer;\nclass pipeline_root_task;\nclass pipeline_cleaner;\n\n} // namespace internal\n\nnamespace interface6 {\n    template<typename T, typename U> class filter_t;\n\n    namespace internal {\n        class pipeline_proxy;\n    }\n}\n\n//! @endcond\n\n//! A stage in a pipeline.\n/** @ingroup algorithms */\nclass filter: internal::no_copy {\nprivate:\n    //! Value used to mark \"not in pipeline\"\n    static filter* not_in_pipeline() {return reinterpret_cast<filter*>(intptr_t(-1));}\nprotected:\n    //! The lowest bit 0 is for parallel vs. serial\n    static const unsigned char filter_is_serial = 0x1;\n\n    //! 4th bit distinguishes ordered vs unordered filters.\n    /** The bit was not set for parallel filters in TBB 2.1 and earlier,\n        but is_ordered() function always treats parallel filters as out of order. */\n    static const unsigned char filter_is_out_of_order = 0x1<<4;\n\n    //! 5th bit distinguishes thread-bound and regular filters.\n    static const unsigned char filter_is_bound = 0x1<<5;\n\n    //! 6th bit marks input filters emitting small objects\n    static const unsigned char filter_may_emit_null = 0x1<<6;\n\n    //! 7th bit defines exception propagation mode expected by the application.\n    static const unsigned char exact_exception_propagation =\n#if TBB_USE_CAPTURED_EXCEPTION\n            0x0;\n#else\n            0x1<<7;\n#endif /* TBB_USE_CAPTURED_EXCEPTION */\n\n    static const unsigned char current_version = __TBB_PIPELINE_VERSION(5);\n    static const unsigned char version_mask = 0x7<<1; // bits 1-3 are for version\npublic:\n    enum mode {\n        //! processes multiple items in parallel and in no particular order\n        parallel = current_version | filter_is_out_of_order,\n        //! processes items one at a time; all such filters process items in the same order\n        serial_in_order = current_version | filter_is_serial,\n        //! processes items one at a time and in no particular order\n        serial_out_of_order = current_version | filter_is_serial | filter_is_out_of_order,\n        //! @deprecated use serial_in_order instead\n        serial = serial_in_order\n    };\nprotected:\n    filter( bool is_serial_ ) :\n        next_filter_in_pipeline(not_in_pipeline()),\n        my_input_buffer(NULL),\n        my_filter_mode(static_cast<unsigned char>((is_serial_ ? serial : parallel) | exact_exception_propagation)),\n        prev_filter_in_pipeline(not_in_pipeline()),\n        my_pipeline(NULL),\n        next_segment(NULL)\n    {}\n\n    filter( mode filter_mode ) :\n        next_filter_in_pipeline(not_in_pipeline()),\n        my_input_buffer(NULL),\n        my_filter_mode(static_cast<unsigned char>(filter_mode | exact_exception_propagation)),\n        prev_filter_in_pipeline(not_in_pipeline()),\n        my_pipeline(NULL),\n        next_segment(NULL)\n    {}\n\n    // signal end-of-input for concrete_filters\n    void __TBB_EXPORTED_METHOD set_end_of_input();\n\npublic:\n    //! True if filter is serial.\n    bool is_serial() const {\n        return bool( my_filter_mode & filter_is_serial );\n    }\n\n    //! True if filter must receive stream in order.\n    bool is_ordered() const {\n        return (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;\n    }\n\n    //! True if filter is thread-bound.\n    bool is_bound() const {\n        return ( my_filter_mode & filter_is_bound )==filter_is_bound;\n    }\n\n    //! true if an input filter can emit null\n    bool object_may_be_null() {\n        return ( my_filter_mode & filter_may_emit_null ) == filter_may_emit_null;\n    }\n\n    //! Operate on an item from the input stream, and return item for output stream.\n    /** Returns NULL if filter is a sink. */\n    virtual void* operator()( void* item ) = 0;\n\n    //! Destroy filter.\n    /** If the filter was added to a pipeline, the pipeline must be destroyed first. */\n    virtual __TBB_EXPORTED_METHOD ~filter();\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Destroys item if pipeline was cancelled.\n    /** Required to prevent memory leaks.\n        Note it can be called concurrently even for serial filters.*/\n    virtual void finalize( void* /*item*/ ) {};\n#endif\n\nprivate:\n    //! Pointer to next filter in the pipeline.\n    filter* next_filter_in_pipeline;\n\n    //! has the filter not yet processed all the tokens it will ever see?\n    //  (pipeline has not yet reached end_of_input or this filter has not yet\n    //  seen the last token produced by input_filter)\n    bool has_more_work();\n\n    //! Buffer for incoming tokens, or NULL if not required.\n    /** The buffer is required if the filter is serial or follows a thread-bound one. */\n    internal::input_buffer* my_input_buffer;\n\n    friend class internal::stage_task;\n    friend class internal::pipeline_root_task;\n    friend class pipeline;\n    friend class thread_bound_filter;\n\n    //! Storage for filter mode and dynamically checked implementation version.\n    const unsigned char my_filter_mode;\n\n    //! Pointer to previous filter in the pipeline.\n    filter* prev_filter_in_pipeline;\n\n    //! Pointer to the pipeline.\n    pipeline* my_pipeline;\n\n    //! Pointer to the next \"segment\" of filters, or NULL if not required.\n    /** In each segment, the first filter is not thread-bound but follows a thread-bound one. */\n    filter* next_segment;\n};\n\n//! A stage in a pipeline served by a user thread.\n/** @ingroup algorithms */\nclass thread_bound_filter: public filter {\npublic:\n    enum result_type {\n        // item was processed\n        success,\n        // item is currently not available\n        item_not_available,\n        // there are no more items to process\n        end_of_stream\n    };\nprotected:\n    thread_bound_filter(mode filter_mode):\n         filter(static_cast<mode>(filter_mode | filter::filter_is_bound))\n    {\n        __TBB_ASSERT(filter_mode & filter::filter_is_serial, \"thread-bound filters must be serial\");\n    }\npublic:\n    //! If a data item is available, invoke operator() on that item.\n    /** This interface is non-blocking.\n        Returns 'success' if an item was processed.\n        Returns 'item_not_available' if no item can be processed now\n        but more may arrive in the future, or if token limit is reached.\n        Returns 'end_of_stream' if there are no more items to process. */\n    result_type __TBB_EXPORTED_METHOD try_process_item();\n\n    //! Wait until a data item becomes available, and invoke operator() on that item.\n    /** This interface is blocking.\n        Returns 'success' if an item was processed.\n        Returns 'end_of_stream' if there are no more items to process.\n        Never returns 'item_not_available', as it blocks until another return condition applies. */\n    result_type __TBB_EXPORTED_METHOD process_item();\n\nprivate:\n    //! Internal routine for item processing\n    result_type internal_process_item(bool is_blocking);\n};\n\n//! A processing pipeline that applies filters to items.\n/** @ingroup algorithms */\nclass pipeline {\npublic:\n    //! Construct empty pipeline.\n    __TBB_EXPORTED_METHOD pipeline();\n\n    /** Though the current implementation declares the destructor virtual, do not rely on this\n        detail.  The virtualness is deprecated and may disappear in future versions of TBB. */\n    virtual __TBB_EXPORTED_METHOD ~pipeline();\n\n    //! Add filter to end of pipeline.\n    void __TBB_EXPORTED_METHOD add_filter( filter& filter_ );\n\n    //! Run the pipeline to completion.\n    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Run the pipeline to completion with user-supplied context.\n    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );\n#endif\n\n    //! Remove all filters from the pipeline.\n    void __TBB_EXPORTED_METHOD clear();\n\nprivate:\n    friend class internal::stage_task;\n    friend class internal::pipeline_root_task;\n    friend class filter;\n    friend class thread_bound_filter;\n    friend class internal::pipeline_cleaner;\n    friend class tbb::interface6::internal::pipeline_proxy;\n\n    //! Pointer to first filter in the pipeline.\n    filter* filter_list;\n\n    //! Pointer to location where address of next filter to be added should be stored.\n    filter* filter_end;\n\n    //! task who's reference count is used to determine when all stages are done.\n    task* end_counter;\n\n    //! Number of idle tokens waiting for input stage.\n    atomic<internal::Token> input_tokens;\n\n    //! Global counter of tokens\n    atomic<internal::Token> token_counter;\n\n    //! False until fetch_input returns NULL.\n    bool end_of_input;\n\n    //! True if the pipeline contains a thread-bound filter; false otherwise.\n    bool has_thread_bound_filters;\n\n    //! Remove filter from pipeline.\n    void remove_filter( filter& filter_ );\n\n    //! Not used, but retained to satisfy old export files.\n    void __TBB_EXPORTED_METHOD inject_token( task& self );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Does clean up if pipeline is cancelled or exception occurred\n    void clear_filters();\n#endif\n};\n\n//------------------------------------------------------------------------\n// Support for lambda-friendly parallel_pipeline interface\n//------------------------------------------------------------------------\n\nnamespace interface6 {\n\nnamespace internal {\n    template<typename T, typename U, typename Body> class concrete_filter;\n}\n\n//! input_filter control to signal end-of-input for parallel_pipeline\nclass flow_control {\n    bool is_pipeline_stopped;\n    flow_control() { is_pipeline_stopped = false; }\n    template<typename T, typename U, typename Body> friend class internal::concrete_filter;\npublic:\n    void stop() { is_pipeline_stopped = true; }\n};\n\n//! @cond INTERNAL\nnamespace internal {\n\ntemplate<typename T> struct tbb_large_object {enum { value = sizeof(T) > sizeof(void *) }; };\n\n// Obtain type properties in one or another way\n#if   __TBB_CPP11_TYPE_PROPERTIES_PRESENT\ntemplate<typename T> struct tbb_trivially_copyable { enum { value = std::is_trivially_copyable<T>::value }; };\n#elif __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT\ntemplate<typename T> struct tbb_trivially_copyable { enum { value = std::has_trivial_copy_constructor<T>::value }; };\n#else\n// Explicitly list the types we wish to be placed as-is in the pipeline input_buffers.\ntemplate<typename T> struct tbb_trivially_copyable { enum { value = false }; };\ntemplate<typename T> struct tbb_trivially_copyable <T*> { enum { value = true }; };\ntemplate<> struct tbb_trivially_copyable <short> { enum { value = true }; };\ntemplate<> struct tbb_trivially_copyable <unsigned short> { enum { value = true }; };\ntemplate<> struct tbb_trivially_copyable <int> { enum { value = !tbb_large_object<int>::value }; };\ntemplate<> struct tbb_trivially_copyable <unsigned int> { enum { value = !tbb_large_object<int>::value }; };\ntemplate<> struct tbb_trivially_copyable <long> { enum { value = !tbb_large_object<long>::value }; };\ntemplate<> struct tbb_trivially_copyable <unsigned long> { enum { value = !tbb_large_object<long>::value }; };\ntemplate<> struct tbb_trivially_copyable <float> { enum { value = !tbb_large_object<float>::value }; };\ntemplate<> struct tbb_trivially_copyable <double> { enum { value = !tbb_large_object<double>::value }; };\n#endif // Obtaining type properties\n\ntemplate<typename T> struct is_large_object {enum { value = tbb_large_object<T>::value || !tbb_trivially_copyable<T>::value }; };\n\ntemplate<typename T, bool> class token_helper;\n\n// large object helper (uses tbb_allocator)\ntemplate<typename T>\nclass token_helper<T, true> {\n    public:\n    typedef typename tbb::tbb_allocator<T> allocator;\n    typedef T* pointer;\n    typedef T value_type;\n    static pointer create_token(const value_type & source) {\n        pointer output_t = allocator().allocate(1);\n        return new (output_t) T(source);\n    }\n    static value_type & token(pointer & t) { return *t;}\n    static void * cast_to_void_ptr(pointer ref) { return (void *) ref; }\n    static pointer cast_from_void_ptr(void * ref) { return (pointer)ref; }\n    static void destroy_token(pointer token) {\n        allocator().destroy(token);\n        allocator().deallocate(token,1);\n    }\n};\n\n// pointer specialization\ntemplate<typename T>\nclass token_helper<T*, false > {\n    public:\n    typedef T* pointer;\n    typedef T* value_type;\n    static pointer create_token(const value_type & source) { return source; }\n    static value_type & token(pointer & t) { return t;}\n    static void * cast_to_void_ptr(pointer ref) { return (void *)ref; }\n    static pointer cast_from_void_ptr(void * ref) { return (pointer)ref; }\n    static void destroy_token( pointer /*token*/) {}\n};\n\n// small object specialization (converts void* to the correct type, passes objects directly.)\ntemplate<typename T>\nclass token_helper<T, false> {\n    typedef union {\n        T actual_value;\n        void * void_overlay;\n    } type_to_void_ptr_map;\n    public:\n    typedef T pointer;  // not really a pointer in this case.\n    typedef T value_type;\n    static pointer create_token(const value_type & source) {\n        return source; }\n    static value_type & token(pointer & t) { return t;}\n    static void * cast_to_void_ptr(pointer ref) {\n        type_to_void_ptr_map mymap;\n        mymap.void_overlay = NULL;\n        mymap.actual_value = ref;\n        return mymap.void_overlay;\n    }\n    static pointer cast_from_void_ptr(void * ref) {\n        type_to_void_ptr_map mymap;\n        mymap.void_overlay = ref;\n        return mymap.actual_value;\n    }\n    static void destroy_token( pointer /*token*/) {}\n};\n\ntemplate<typename T, typename U, typename Body>\nclass concrete_filter: public tbb::filter {\n    const Body& my_body;\n    typedef token_helper<T,is_large_object<T>::value > t_helper;\n    typedef typename t_helper::pointer t_pointer;\n    typedef token_helper<U,is_large_object<U>::value > u_helper;\n    typedef typename u_helper::pointer u_pointer;\n\n    /*override*/ void* operator()(void* input) {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        u_pointer output_u = u_helper::create_token(my_body(t_helper::token(temp_input)));\n        t_helper::destroy_token(temp_input);\n        return u_helper::cast_to_void_ptr(output_u);\n    }\n\n    /*override*/ void finalize(void * input) {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        t_helper::destroy_token(temp_input);\n    }\n\npublic:\n    concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}\n};\n\n// input\ntemplate<typename U, typename Body>\nclass concrete_filter<void,U,Body>: public filter {\n    const Body& my_body;\n    typedef token_helper<U, is_large_object<U>::value > u_helper;\n    typedef typename u_helper::pointer u_pointer;\n\n    /*override*/void* operator()(void*) {\n        flow_control control;\n        u_pointer output_u = u_helper::create_token(my_body(control));\n        if(control.is_pipeline_stopped) {\n            u_helper::destroy_token(output_u);\n            set_end_of_input();\n            return NULL;\n        }\n        return u_helper::cast_to_void_ptr(output_u);\n    }\n\npublic:\n    concrete_filter(tbb::filter::mode filter_mode, const Body& body) :\n        filter(static_cast<tbb::filter::mode>(filter_mode | filter_may_emit_null)),\n        my_body(body)\n    {}\n};\n\ntemplate<typename T, typename Body>\nclass concrete_filter<T,void,Body>: public filter {\n    const Body& my_body;\n    typedef token_helper<T, is_large_object<T>::value > t_helper;\n    typedef typename t_helper::pointer t_pointer;\n\n    /*override*/ void* operator()(void* input) {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        my_body(t_helper::token(temp_input));\n        t_helper::destroy_token(temp_input);\n        return NULL;\n    }\n    /*override*/ void finalize(void* input) {\n        t_pointer temp_input = t_helper::cast_from_void_ptr(input);\n        t_helper::destroy_token(temp_input);\n    }\n\npublic:\n    concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}\n};\n\ntemplate<typename Body>\nclass concrete_filter<void,void,Body>: public filter {\n    const Body& my_body;\n\n    /** Override privately because it is always called virtually */\n    /*override*/ void* operator()(void*) {\n        flow_control control;\n        my_body(control);\n        void* output = control.is_pipeline_stopped ? NULL : (void*)(intptr_t)-1;\n        return output;\n    }\npublic:\n    concrete_filter(filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}\n};\n\n//! The class that represents an object of the pipeline for parallel_pipeline().\n/** It primarily serves as RAII class that deletes heap-allocated filter instances. */\nclass pipeline_proxy {\n    tbb::pipeline my_pipe;\npublic:\n    pipeline_proxy( const filter_t<void,void>& filter_chain );\n    ~pipeline_proxy() {\n        while( filter* f = my_pipe.filter_list )\n            delete f; // filter destructor removes it from the pipeline\n    }\n    tbb::pipeline* operator->() { return &my_pipe; }\n};\n\n//! Abstract base class that represents a node in a parse tree underlying a filter_t.\n/** These nodes are always heap-allocated and can be shared by filter_t objects. */\nclass filter_node: tbb::internal::no_copy {\n    /** Count must be atomic because it is hidden state for user, but might be shared by threads. */\n    tbb::atomic<intptr_t> ref_count;\nprotected:\n    filter_node() {\n        ref_count = 0;\n#ifdef __TBB_TEST_FILTER_NODE_COUNT\n        ++(__TBB_TEST_FILTER_NODE_COUNT);\n#endif\n    }\npublic:\n    //! Add concrete_filter to pipeline\n    virtual void add_to( pipeline& ) = 0;\n    //! Increment reference count\n    void add_ref() {++ref_count;}\n    //! Decrement reference count and delete if it becomes zero.\n    void remove_ref() {\n        __TBB_ASSERT(ref_count>0,\"ref_count underflow\");\n        if( --ref_count==0 )\n            delete this;\n    }\n    virtual ~filter_node() {\n#ifdef __TBB_TEST_FILTER_NODE_COUNT\n        --(__TBB_TEST_FILTER_NODE_COUNT);\n#endif\n    }\n};\n\n//! Node in parse tree representing result of make_filter.\ntemplate<typename T, typename U, typename Body>\nclass filter_node_leaf: public filter_node  {\n    const tbb::filter::mode mode;\n    const Body body;\n    /*override*/void add_to( pipeline& p ) {\n        concrete_filter<T,U,Body>* f = new concrete_filter<T,U,Body>(mode,body);\n        p.add_filter( *f );\n    }\npublic:\n    filter_node_leaf( tbb::filter::mode m, const Body& b ) : mode(m), body(b) {}\n};\n\n//! Node in parse tree representing join of two filters.\nclass filter_node_join: public filter_node {\n    friend class filter_node; // to suppress GCC 3.2 warnings\n    filter_node& left;\n    filter_node& right;\n    /*override*/~filter_node_join() {\n       left.remove_ref();\n       right.remove_ref();\n    }\n    /*override*/void add_to( pipeline& p ) {\n        left.add_to(p);\n        right.add_to(p);\n    }\npublic:\n    filter_node_join( filter_node& x, filter_node& y ) : left(x), right(y) {\n       left.add_ref();\n       right.add_ref();\n    }\n};\n\n} // namespace internal\n//! @endcond\n\n//! Create a filter to participate in parallel_pipeline\ntemplate<typename T, typename U, typename Body>\nfilter_t<T,U> make_filter(tbb::filter::mode mode, const Body& body) {\n    return new internal::filter_node_leaf<T,U,Body>(mode, body);\n}\n\ntemplate<typename T, typename V, typename U>\nfilter_t<T,U> operator& (const filter_t<T,V>& left, const filter_t<V,U>& right) {\n    __TBB_ASSERT(left.root,\"cannot use default-constructed filter_t as left argument of '&'\");\n    __TBB_ASSERT(right.root,\"cannot use default-constructed filter_t as right argument of '&'\");\n    return new internal::filter_node_join(*left.root,*right.root);\n}\n\n//! Class representing a chain of type-safe pipeline filters\ntemplate<typename T, typename U>\nclass filter_t {\n    typedef internal::filter_node filter_node;\n    filter_node* root;\n    filter_t( filter_node* root_ ) : root(root_) {\n        root->add_ref();\n    }\n    friend class internal::pipeline_proxy;\n    template<typename T_, typename U_, typename Body>\n    friend filter_t<T_,U_> make_filter(tbb::filter::mode, const Body& );\n    template<typename T_, typename V_, typename U_>\n    friend filter_t<T_,U_> operator& (const filter_t<T_,V_>& , const filter_t<V_,U_>& );\npublic:\n    // TODO: add move-constructors, move-assignment, etc. where C++11 is available.\n    filter_t() : root(NULL) {}\n    filter_t( const filter_t<T,U>& rhs ) : root(rhs.root) {\n        if( root ) root->add_ref();\n    }\n    template<typename Body>\n    filter_t( tbb::filter::mode mode, const Body& body ) :\n        root( new internal::filter_node_leaf<T,U,Body>(mode, body) ) {\n        root->add_ref();\n    }\n\n    void operator=( const filter_t<T,U>& rhs ) {\n        // Order of operations below carefully chosen so that reference counts remain correct\n        // in unlikely event that remove_ref throws exception.\n        filter_node* old = root;\n        root = rhs.root;\n        if( root ) root->add_ref();\n        if( old ) old->remove_ref();\n    }\n    ~filter_t() {\n        if( root ) root->remove_ref();\n    }\n    void clear() {\n        // Like operator= with filter_t() on right side.\n        if( root ) {\n            filter_node* old = root;\n            root = NULL;\n            old->remove_ref();\n        }\n    }\n};\n\ninline internal::pipeline_proxy::pipeline_proxy( const filter_t<void,void>& filter_chain ) : my_pipe() {\n    __TBB_ASSERT( filter_chain.root, \"cannot apply parallel_pipeline to default-constructed filter_t\"  );\n    filter_chain.root->add_to(my_pipe);\n}\n\ninline void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t<void,void>& filter_chain\n#if __TBB_TASK_GROUP_CONTEXT\n    , tbb::task_group_context& context\n#endif\n    ) {\n    internal::pipeline_proxy pipe(filter_chain);\n    // tbb::pipeline::run() is called via the proxy\n    pipe->run(max_number_of_live_tokens\n#if __TBB_TASK_GROUP_CONTEXT\n              , context\n#endif\n    );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\ninline void parallel_pipeline(size_t max_number_of_live_tokens, const filter_t<void,void>& filter_chain) {\n    tbb::task_group_context context;\n    parallel_pipeline(max_number_of_live_tokens, filter_chain, context);\n}\n#endif // __TBB_TASK_GROUP_CONTEXT\n\n} // interface6\n\nusing interface6::flow_control;\nusing interface6::filter_t;\nusing interface6::make_filter;\nusing interface6::parallel_pipeline;\n\n} // tbb\n\n#endif /* __TBB_pipeline_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/queuing_mutex.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_queuing_mutex_H\n#define __TBB_queuing_mutex_H\n\n#include \"tbb_config.h\"\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <cstring>\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\n#include \"atomic.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n//! Queuing mutex with local-only spinning.\n/** @ingroup synchronization */\nclass queuing_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired mutex.\n    queuing_mutex() {\n        q_tail = NULL;\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock: internal::no_copy {\n        //! Initialize fields to mean \"no lock held\".\n        void initialize() {\n            mutex = NULL;\n#if TBB_USE_ASSERT\n            internal::poison_pointer(next);\n#endif /* TBB_USE_ASSERT */\n        }\n\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() {initialize();}\n\n        //! Acquire lock on given mutex.\n        scoped_lock( queuing_mutex& m ) {\n            initialize();\n            acquire(m);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void __TBB_EXPORTED_METHOD acquire( queuing_mutex& m );\n\n        //! Acquire lock on given mutex if free (i.e. non-blocking)\n        bool __TBB_EXPORTED_METHOD try_acquire( queuing_mutex& m );\n\n        //! Release lock.\n        void __TBB_EXPORTED_METHOD release();\n\n    private:\n        //! The pointer to the mutex owned, or NULL if not holding a mutex.\n        queuing_mutex* mutex;\n\n        //! The pointer to the next competitor for a mutex\n        scoped_lock *next;\n\n        //! The local spin-wait variable\n        /** Inverted (0 - blocked, 1 - acquired the mutex) for the sake of\n            zero-initialization.  Defining it as an entire word instead of\n            a byte seems to help performance slightly. */\n        uintptr_t going;\n    };\n\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = true;\n\nprivate:\n    //! The last competitor requesting the lock\n    atomic<scoped_lock*> q_tail;\n\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(queuing_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_queuing_mutex_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/queuing_rw_mutex.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_queuing_rw_mutex_H\n#define __TBB_queuing_rw_mutex_H\n\n#include \"tbb_config.h\"\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <cstring>\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\n#include \"atomic.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n\n//! Queuing reader-writer mutex with local-only spinning.\n/** Adapted from Krieger, Stumm, et al. pseudocode at\n    http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93\n    @ingroup synchronization */\nclass queuing_rw_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired mutex.\n    queuing_rw_mutex() {\n        q_tail = NULL;\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n    //! Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL\n    ~queuing_rw_mutex() {\n#if TBB_USE_ASSERT\n        __TBB_ASSERT( !q_tail, \"destruction of an acquired mutex\");\n#endif\n    }\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock: internal::no_copy {\n        //! Initialize fields to mean \"no lock held\".\n        void initialize() {\n            my_mutex = NULL;\n#if TBB_USE_ASSERT\n            my_state = 0xFF; // Set to invalid state\n            internal::poison_pointer(my_next);\n            internal::poison_pointer(my_prev);\n#endif /* TBB_USE_ASSERT */\n        }\n\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() {initialize();}\n\n        //! Acquire lock on given mutex.\n        scoped_lock( queuing_rw_mutex& m, bool write=true ) {\n            initialize();\n            acquire(m,write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( my_mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( queuing_rw_mutex& m, bool write=true );\n\n        //! Acquire lock on given mutex if free (i.e. non-blocking)\n        bool try_acquire( queuing_rw_mutex& m, bool write=true );\n\n        //! Release lock.\n        void release();\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer();\n\n        //! Downgrade writer to become a reader.\n        bool downgrade_to_reader();\n\n    private:\n        //! The pointer to the mutex owned, or NULL if not holding a mutex.\n        queuing_rw_mutex* my_mutex;\n\n        //! The pointer to the previous and next competitors for a mutex\n        scoped_lock *__TBB_atomic my_prev, *__TBB_atomic my_next;\n\n        typedef unsigned char state_t;\n\n        //! State of the request: reader, writer, active reader, other service states\n        atomic<state_t> my_state;\n\n        //! The local spin-wait variable\n        /** Corresponds to \"spin\" in the pseudocode but inverted for the sake of zero-initialization */\n        unsigned char __TBB_atomic my_going;\n\n        //! A tiny internal lock\n        unsigned char my_internal_lock;\n\n        //! Acquire the internal lock\n        void acquire_internal_lock();\n\n        //! Try to acquire the internal lock\n        /** Returns true if lock was successfully acquired. */\n        bool try_acquire_internal_lock();\n\n        //! Release the internal lock\n        void release_internal_lock();\n\n        //! Wait for internal lock to be released\n        void wait_for_release_of_internal_lock();\n\n        //! A helper function\n        void unblock_or_wait_on_internal_lock( uintptr_t );\n    };\n\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = true;\n\nprivate:\n    //! The last competitor requesting the lock\n    atomic<scoped_lock*> q_tail;\n\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(queuing_rw_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_queuing_rw_mutex_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/reader_writer_lock.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_reader_writer_lock_H\n#define __TBB_reader_writer_lock_H\n\n#include \"tbb_thread.h\"\n#include \"tbb_allocator.h\"\n#include \"atomic.h\"\n\nnamespace tbb {\nnamespace interface5 {\n//! Writer-preference reader-writer lock with local-only spinning on readers.\n/** Loosely adapted from Mellor-Crummey and Scott pseudocode at\n    http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp\n    @ingroup synchronization */\n    class reader_writer_lock : tbb::internal::no_copy {\n public:\n    friend class scoped_lock;\n    friend class scoped_lock_read;\n    //! Status type for nodes associated with lock instances\n    /** waiting_nonblocking: the wait state for nonblocking lock\n          instances; for writes, these transition straight to active\n          states; for reads, these are unused.\n\n        waiting: the start and spin state for all lock instances; these will\n          transition to active state when appropriate.  Non-blocking write locks\n          transition from this state to waiting_nonblocking immediately.\n\n        active: the active state means that the lock instance holds\n          the lock; it will transition to invalid state during node deletion\n\n        invalid: the end state for all nodes; this is set in the\n          destructor so if we encounter this state, we are looking at\n          memory that has already been freed\n\n        The state diagrams below describe the status transitions.\n        Single arrows indicate that the thread that owns the node is\n        responsible for the transition; double arrows indicate that\n        any thread could make the transition.\n\n        State diagram for scoped_lock status:\n\n        waiting ----------> waiting_nonblocking\n          |     _____________/       |\n          V    V                     V\n        active -----------------> invalid\n\n        State diagram for scoped_lock_read status:\n\n        waiting\n          |\n          V\n        active ----------------->invalid\n\n    */\n    enum status_t { waiting_nonblocking, waiting, active, invalid };\n\n    //! Constructs a new reader_writer_lock\n    reader_writer_lock() {\n        internal_construct();\n    }\n\n    //! Destructs a reader_writer_lock object\n    ~reader_writer_lock() {\n        internal_destroy();\n    }\n\n    //! The scoped lock pattern for write locks\n    /** Scoped locks help avoid the common problem of forgetting to release the lock.\n        This type also serves as the node for queuing locks. */\n    class scoped_lock : tbb::internal::no_copy {\n    public:\n        friend class reader_writer_lock;\n\n        //! Construct with blocking attempt to acquire write lock on the passed-in lock\n        scoped_lock(reader_writer_lock& lock) {\n            internal_construct(lock);\n        }\n\n        //! Destructor, releases the write lock\n        ~scoped_lock() {\n            internal_destroy();\n        }\n\n        void* operator new(size_t s) {\n            return tbb::internal::allocate_via_handler_v3(s);\n        }\n        void operator delete(void* p) {\n            tbb::internal::deallocate_via_handler_v3(p);\n        }\n\n    private:\n        //! The pointer to the mutex to lock\n        reader_writer_lock *mutex;\n        //! The next queued competitor for the mutex\n        scoped_lock* next;\n        //! Status flag of the thread associated with this node\n        atomic<status_t> status;\n\n        //! Construct scoped_lock that is not holding lock\n        scoped_lock();\n\n        void __TBB_EXPORTED_METHOD internal_construct(reader_writer_lock&);\n        void __TBB_EXPORTED_METHOD internal_destroy();\n   };\n\n    //! The scoped lock pattern for read locks\n    class scoped_lock_read : tbb::internal::no_copy {\n    public:\n        friend class reader_writer_lock;\n\n        //! Construct with blocking attempt to acquire read lock on the passed-in lock\n        scoped_lock_read(reader_writer_lock& lock) {\n            internal_construct(lock);\n        }\n\n        //! Destructor, releases the read lock\n        ~scoped_lock_read() {\n            internal_destroy();\n        }\n\n        void* operator new(size_t s) {\n            return tbb::internal::allocate_via_handler_v3(s);\n        }\n        void operator delete(void* p) {\n            tbb::internal::deallocate_via_handler_v3(p);\n        }\n\n    private:\n        //! The pointer to the mutex to lock\n        reader_writer_lock *mutex;\n        //! The next queued competitor for the mutex\n        scoped_lock_read *next;\n        //! Status flag of the thread associated with this node\n        atomic<status_t> status;\n\n        //! Construct scoped_lock_read that is not holding lock\n        scoped_lock_read();\n\n        void __TBB_EXPORTED_METHOD internal_construct(reader_writer_lock&);\n        void __TBB_EXPORTED_METHOD internal_destroy();\n    };\n\n    //! Acquires the reader_writer_lock for write.\n    /** If the lock is currently held in write mode by another\n        context, the writer will block by spinning on a local\n        variable.  Exceptions thrown: improper_lock The context tries\n        to acquire a reader_writer_lock that it already has write\n        ownership of.*/\n    void __TBB_EXPORTED_METHOD lock();\n\n    //! Tries to acquire the reader_writer_lock for write.\n    /** This function does not block.  Return Value: True or false,\n        depending on whether the lock is acquired or not.  If the lock\n        is already held by this acquiring context, try_lock() returns\n        false. */\n    bool __TBB_EXPORTED_METHOD try_lock();\n\n    //! Acquires the reader_writer_lock for read.\n    /** If the lock is currently held by a writer, this reader will\n        block and wait until the writers are done.  Exceptions thrown:\n        improper_lock The context tries to acquire a\n        reader_writer_lock that it already has write ownership of. */\n    void __TBB_EXPORTED_METHOD lock_read();\n\n    //! Tries to acquire the reader_writer_lock for read.\n    /** This function does not block.  Return Value: True or false,\n        depending on whether the lock is acquired or not.  */\n    bool __TBB_EXPORTED_METHOD try_lock_read();\n\n    //! Releases the reader_writer_lock\n    void __TBB_EXPORTED_METHOD unlock();\n\n private:\n    void __TBB_EXPORTED_METHOD internal_construct();\n    void __TBB_EXPORTED_METHOD internal_destroy();\n\n    //! Attempts to acquire write lock\n    /** If unavailable, spins in blocking case, returns false in non-blocking case. */\n    bool start_write(scoped_lock *);\n    //! Sets writer_head to w and attempts to unblock\n    void set_next_writer(scoped_lock *w);\n    //! Relinquishes write lock to next waiting writer or group of readers\n    void end_write(scoped_lock *);\n    //! Checks if current thread holds write lock\n    bool is_current_writer();\n\n    //! Attempts to acquire read lock\n    /** If unavailable, spins in blocking case, returns false in non-blocking case. */\n    void start_read(scoped_lock_read *);\n    //! Unblocks pending readers\n    void unblock_readers();\n    //! Relinquishes read lock by decrementing counter; last reader wakes pending writer\n    void end_read();\n\n    //! The list of pending readers\n    atomic<scoped_lock_read*> reader_head;\n    //! The list of pending writers\n    atomic<scoped_lock*> writer_head;\n    //! The last node in the list of pending writers\n    atomic<scoped_lock*> writer_tail;\n    //! Writer that owns the mutex; tbb_thread::id() otherwise.\n    tbb_thread::id my_current_writer;\n    //! Status of mutex\n    atomic<uintptr_t> rdr_count_and_flags; // used with __TBB_AtomicOR, which assumes uintptr_t\n};\n\n} // namespace interface5\n\nusing interface5::reader_writer_lock;\n\n} // namespace tbb\n\n#endif /* __TBB_reader_writer_lock_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/recursive_mutex.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_recursive_mutex_H\n#define __TBB_recursive_mutex_H\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#else\n#include <pthread.h>\n#endif /* _WIN32||_WIN64 */\n\n#include <new>\n#include \"aligned_space.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_profiling.h\"\n\nnamespace tbb {\n//! Mutex that allows recursive mutex acquisition.\n/** Mutex that allows recursive mutex acquisition.\n    @ingroup synchronization */\nclass recursive_mutex : internal::mutex_copy_deprecated_and_disabled {\npublic:\n    //! Construct unacquired recursive_mutex.\n    recursive_mutex() {\n#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS\n        internal_construct();\n#else\n  #if _WIN32||_WIN64\n        InitializeCriticalSectionEx(&impl, 4000, 0);\n  #else\n        pthread_mutexattr_t mtx_attr;\n        int error_code = pthread_mutexattr_init( &mtx_attr );\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutexattr_init failed\");\n\n        pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );\n        error_code = pthread_mutex_init( &impl, &mtx_attr );\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutex_init failed\");\n\n        pthread_mutexattr_destroy( &mtx_attr );\n  #endif /* _WIN32||_WIN64*/\n#endif /* TBB_USE_ASSERT */\n    };\n\n    ~recursive_mutex() {\n#if TBB_USE_ASSERT\n        internal_destroy();\n#else\n  #if _WIN32||_WIN64\n        DeleteCriticalSection(&impl);\n  #else\n        pthread_mutex_destroy(&impl);\n\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    };\n\n    class scoped_lock;\n    friend class scoped_lock;\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock: internal::no_copy {\n    public:\n        //! Construct lock that has not acquired a recursive_mutex.\n        scoped_lock() : my_mutex(NULL) {};\n\n        //! Acquire lock on given mutex.\n        scoped_lock( recursive_mutex& mutex ) {\n#if TBB_USE_ASSERT\n            my_mutex = &mutex;\n#endif /* TBB_USE_ASSERT */\n            acquire( mutex );\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( my_mutex )\n                release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( recursive_mutex& mutex ) {\n#if TBB_USE_ASSERT\n            internal_acquire( mutex );\n#else\n            my_mutex = &mutex;\n            mutex.lock();\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Try acquire lock on given recursive_mutex.\n        bool try_acquire( recursive_mutex& mutex ) {\n#if TBB_USE_ASSERT\n            return internal_try_acquire( mutex );\n#else\n            bool result = mutex.try_lock();\n            if( result )\n                my_mutex = &mutex;\n            return result;\n#endif /* TBB_USE_ASSERT */\n        }\n\n        //! Release lock\n        void release() {\n#if TBB_USE_ASSERT\n            internal_release();\n#else\n            my_mutex->unlock();\n            my_mutex = NULL;\n#endif /* TBB_USE_ASSERT */\n        }\n\n    private:\n        //! The pointer to the current recursive_mutex to work\n        recursive_mutex* my_mutex;\n\n        //! All checks from acquire using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_acquire( recursive_mutex& m );\n\n        //! All checks from try_acquire using mutex.state were moved here\n        bool __TBB_EXPORTED_METHOD internal_try_acquire( recursive_mutex& m );\n\n        //! All checks from release using mutex.state were moved here\n        void __TBB_EXPORTED_METHOD internal_release();\n\n        friend class recursive_mutex;\n    };\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = true;\n    static const bool is_fair_mutex = false;\n\n    // C++0x compatibility interface\n\n    //! Acquire lock\n    void lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        new(tmp.begin()) scoped_lock(*this);\n#else\n  #if _WIN32||_WIN64\n        EnterCriticalSection(&impl);\n  #else\n        int error_code = pthread_mutex_lock(&impl);\n        if( error_code )\n            tbb::internal::handle_perror(error_code,\"recursive_mutex: pthread_mutex_lock failed\");\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        return (new(tmp.begin()) scoped_lock)->internal_try_acquire(*this);\n#else\n  #if _WIN32||_WIN64\n        return TryEnterCriticalSection(&impl)!=0;\n  #else\n        return pthread_mutex_trylock(&impl)==0;\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_ASSERT\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = this;\n        s.internal_release();\n#else\n  #if _WIN32||_WIN64\n        LeaveCriticalSection(&impl);\n  #else\n        pthread_mutex_unlock(&impl);\n  #endif /* _WIN32||_WIN64 */\n#endif /* TBB_USE_ASSERT */\n    }\n\n    //! Return native_handle\n  #if _WIN32||_WIN64\n    typedef LPCRITICAL_SECTION native_handle_type;\n  #else\n    typedef pthread_mutex_t* native_handle_type;\n  #endif\n    native_handle_type native_handle() { return (native_handle_type) &impl; }\n\nprivate:\n#if _WIN32||_WIN64\n    CRITICAL_SECTION impl;\n    enum state_t {\n        INITIALIZED=0x1234,\n        DESTROYED=0x789A,\n    } state;\n#else\n    pthread_mutex_t impl;\n#endif /* _WIN32||_WIN64 */\n\n    //! All checks from mutex constructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    //! All checks from mutex destructor using mutex.state were moved here\n    void __TBB_EXPORTED_METHOD internal_destroy();\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_recursive_mutex_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/runtime_loader.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_runtime_loader_H\n#define __TBB_runtime_loader_H\n\n#if ! TBB_PREVIEW_RUNTIME_LOADER\n    #error Set TBB_PREVIEW_RUNTIME_LOADER to include runtime_loader.h\n#endif\n\n#include \"tbb_stddef.h\"\n#include <climits>\n\n#if _MSC_VER\n    #if ! __TBB_NO_IMPLICIT_LINKAGE\n        #ifdef _DEBUG\n            #pragma comment( linker, \"/nodefaultlib:tbb_debug.lib\" )\n            #pragma comment( linker, \"/defaultlib:tbbproxy_debug.lib\" )\n        #else\n            #pragma comment( linker, \"/nodefaultlib:tbb.lib\" )\n            #pragma comment( linker, \"/defaultlib:tbbproxy.lib\" )\n        #endif\n    #endif\n#endif\n\nnamespace tbb {\n\nnamespace interface6 {\n\n//! Load TBB at runtime.\n/*!\n\n\\b Usage:\n\nIn source code:\n\n\\code\n#include \"tbb/runtime_loader.h\"\n\nchar const * path[] = { \"<install dir>/lib/ia32\", NULL };\ntbb::runtime_loader loader( path );\n\n// Now use TBB.\n\\endcode\n\nLink with \\c tbbproxy.lib (or \\c libtbbproxy.a) instead of \\c tbb.lib (\\c libtbb.dylib,\n\\c libtbb.so).\n\nTBB library will be loaded at runtime from \\c <install dir>/lib/ia32 directory.\n\n\\b Attention:\n\nAll \\c runtime_loader objects (in the same module, i.e. exe or dll) share some global state.\nThe most noticeable piece of global state is loaded TBB library.\nThere are some implications:\n\n    -   Only one TBB library can be loaded per module.\n\n    -   If one object has already loaded TBB library, another object will not load TBB.\n        If the loaded TBB library is suitable for the second object, both will use TBB\n        cooperatively, otherwise the second object will report an error.\n\n    -   \\c runtime_loader objects will not work (correctly) in parallel due to absence of\n        synchronization.\n\n*/\n\nclass runtime_loader : tbb::internal::no_copy {\n\n    public:\n\n        //! Error mode constants.\n        enum error_mode {\n            em_status,     //!< Save status of operation and continue.\n            em_throw,      //!< Throw an exception of tbb::runtime_loader::error_code type.\n            em_abort       //!< Print message to \\c stderr and call \\c abort().\n        }; // error_mode\n\n        //! Error codes.\n        enum error_code {\n            ec_ok,         //!< No errors.\n            ec_bad_call,   //!< Invalid function call (e. g. load() called when TBB is already loaded).\n            ec_bad_arg,    //!< Invalid argument passed.\n            ec_bad_lib,    //!< Invalid library found (e. g. \\c TBB_runtime_version symbol not found).\n            ec_bad_ver,    //!< TBB found but version is not suitable.\n            ec_no_lib      //!< No suitable TBB library found.\n        }; // error_code\n\n        //! Initialize object but do not load TBB.\n        runtime_loader( error_mode mode = em_abort );\n\n        //! Initialize object and load TBB.\n        /*!\n            See load() for details.\n\n            If error mode is \\c em_status, call status() to check whether TBB was loaded or not.\n        */\n        runtime_loader(\n            char const * path[],                           //!< List of directories to search TBB in.\n            int          min_ver = TBB_INTERFACE_VERSION,  //!< Minimal suitable version of TBB.\n            int          max_ver = INT_MAX,                //!< Maximal suitable version of TBB.\n            error_mode   mode    = em_abort                //!< Error mode for this object.\n        );\n\n        //! Destroy object.\n        ~runtime_loader();\n\n        //! Load TBB.\n        /*!\n            The method searches the directories specified in \\c path[] array for the TBB library.\n            When the library is found, it is loaded and its version is checked. If the version is\n            not suitable, the library is unloaded, and the search continues.\n\n            \\b Note:\n\n            For security reasons, avoid using relative directory names. For example, never load\n            TBB from current (\\c \".\"), parent (\\c \"..\") or any other relative directory (like\n            \\c \"lib\" ). Use only absolute directory names (e. g. \"/usr/local/lib\").\n\n            For the same security reasons, avoid using system default directories (\\c \"\") on\n            Windows. (See http://www.microsoft.com/technet/security/advisory/2269637.mspx for\n            details.)\n\n            Neglecting these rules may cause your program to execute 3-rd party malicious code.\n\n            \\b Errors:\n                -   \\c ec_bad_call - TBB already loaded by this object.\n                -   \\c ec_bad_arg - \\p min_ver and/or \\p max_ver negative or zero,\n                    or \\p min_ver > \\p max_ver.\n                -   \\c ec_bad_ver - TBB of unsuitable version already loaded by another object.\n                -   \\c ec_no_lib - No suitable library found.\n        */\n        error_code\n        load(\n            char const * path[],                           //!< List of directories to search TBB in.\n            int          min_ver = TBB_INTERFACE_VERSION,  //!< Minimal suitable version of TBB.\n            int          max_ver = INT_MAX                 //!< Maximal suitable version of TBB.\n\n        );\n\n\n        //! Report status.\n        /*!\n            If error mode is \\c em_status, the function returns status of the last operation.\n        */\n        error_code status();\n\n    private:\n\n        error_mode const my_mode;\n        error_code       my_status;\n        bool             my_loaded;\n\n}; // class runtime_loader\n\n} // namespace interface6\n\nusing interface6::runtime_loader;\n\n} // namespace tbb\n\n#endif /* __TBB_runtime_loader_H */\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/scalable_allocator.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_scalable_allocator_H\n#define __TBB_scalable_allocator_H\n/** @file */\n\n#include <stddef.h> /* Need ptrdiff_t and size_t from here. */\n#if !_MSC_VER\n#include <stdint.h> /* Need intptr_t from here. */\n#endif\n\n#if !defined(__cplusplus) && __ICC==1100\n    #pragma warning (push)\n    #pragma warning (disable: 991)\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n#if _MSC_VER >= 1400\n#define __TBB_EXPORTED_FUNC   __cdecl\n#else\n#define __TBB_EXPORTED_FUNC\n#endif\n\n/** The \"malloc\" analogue to allocate block of memory of size bytes.\n  * @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_malloc (size_t size);\n\n/** The \"free\" analogue to discard a previously allocated piece of memory.\n    @ingroup memory_allocation */\nvoid   __TBB_EXPORTED_FUNC scalable_free (void* ptr);\n\n/** The \"realloc\" analogue complementing scalable_malloc.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_realloc (void* ptr, size_t size);\n\n/** The \"calloc\" analogue complementing scalable_malloc.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_calloc (size_t nobj, size_t size);\n\n/** The \"posix_memalign\" analogue.\n    @ingroup memory_allocation */\nint __TBB_EXPORTED_FUNC scalable_posix_memalign (void** memptr, size_t alignment, size_t size);\n\n/** The \"_aligned_malloc\" analogue.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_aligned_malloc (size_t size, size_t alignment);\n\n/** The \"_aligned_realloc\" analogue.\n    @ingroup memory_allocation */\nvoid * __TBB_EXPORTED_FUNC scalable_aligned_realloc (void* ptr, size_t size, size_t alignment);\n\n/** The \"_aligned_free\" analogue.\n    @ingroup memory_allocation */\nvoid __TBB_EXPORTED_FUNC scalable_aligned_free (void* ptr);\n\n/** The analogue of _msize/malloc_size/malloc_usable_size.\n    Returns the usable size of a memory block previously allocated by scalable_*,\n    or 0 (zero) if ptr does not point to such a block.\n    @ingroup memory_allocation */\nsize_t __TBB_EXPORTED_FUNC scalable_msize (void* ptr);\n\n/* Results for scalable_allocation_* functions */\ntypedef enum {\n    TBBMALLOC_OK,\n    TBBMALLOC_INVALID_PARAM,\n    TBBMALLOC_UNSUPPORTED,\n    TBBMALLOC_NO_MEMORY,\n    TBBMALLOC_NO_EFFECT\n} ScalableAllocationResult;\n\n/* Setting TBB_MALLOC_USE_HUGE_PAGES environment variable to 1 enables huge pages.\n   scalable_allocation_mode call has priority over environment variable. */\ntypedef enum {\n    TBBMALLOC_USE_HUGE_PAGES,  /* value turns using huge pages on and off */\n    /* deprecated, kept for backward compatibility only */\n    USE_HUGE_PAGES = TBBMALLOC_USE_HUGE_PAGES,\n    /* try to limit memory consumption value Bytes, clean internal buffers\n       if limit is exceeded, but not prevents from requesting memory from OS */\n    TBBMALLOC_SET_SOFT_HEAP_LIMIT\n} AllocationModeParam;\n\n/** Set TBB allocator-specific allocation modes.\n    @ingroup memory_allocation */\nint __TBB_EXPORTED_FUNC scalable_allocation_mode(int param, intptr_t value);\n\ntypedef enum {\n    /* Clean internal allocator buffers for all threads.\n       Returns TBBMALLOC_NO_EFFECT if no buffers cleaned,\n       TBBMALLOC_OK if some memory released from buffers. */\n    TBBMALLOC_CLEAN_ALL_BUFFERS,\n    /* Clean internal allocator buffer for current thread only.\n       Return values same as for TBBMALLOC_CLEAN_ALL_BUFFERS. */\n    TBBMALLOC_CLEAN_THREAD_BUFFERS\n} ScalableAllocationCmd;\n\n/** Call TBB allocator-specific commands.\n    @ingroup memory_allocation */\nint __TBB_EXPORTED_FUNC scalable_allocation_command(int cmd, void *param);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* __cplusplus */\n\n#ifdef __cplusplus\n\n//! The namespace rml contains components of low-level memory pool interface.\nnamespace rml {\nclass MemoryPool;\n\ntypedef void *(*rawAllocType)(intptr_t pool_id, size_t &bytes);\n// returns non-zero in case of error\ntypedef int   (*rawFreeType)(intptr_t pool_id, void* raw_ptr, size_t raw_bytes);\n\n/*\nMemPoolPolicy extension must be compatible with such structure fields layout\n\nstruct MemPoolPolicy {\n    rawAllocType pAlloc;\n    rawFreeType  pFree;\n    size_t       granularity;   // granularity of pAlloc allocations\n};\n*/\n\nstruct MemPoolPolicy {\n    enum {\n        TBBMALLOC_POOL_VERSION = 1\n    };\n\n    rawAllocType pAlloc;\n    rawFreeType  pFree;\n                 // granularity of pAlloc allocations. 0 means default used.\n    size_t       granularity;\n    int          version;\n                 // all memory consumed at 1st pAlloc call and never returned,\n                 // no more pAlloc calls after 1st\n    unsigned     fixedPool : 1,\n                 // memory consumed but returned only at pool termination\n                 keepAllMemory : 1,\n                 reserved : 30;\n\n    MemPoolPolicy(rawAllocType pAlloc_, rawFreeType pFree_,\n                  size_t granularity_ = 0, bool fixedPool_ = false,\n                  bool keepAllMemory_ = false) :\n        pAlloc(pAlloc_), pFree(pFree_), granularity(granularity_), version(TBBMALLOC_POOL_VERSION),\n        fixedPool(fixedPool_), keepAllMemory(keepAllMemory_),\n        reserved(0) {}\n};\n\n// enums have same values as appropriate enums from ScalableAllocationResult\n// TODO: use ScalableAllocationResult in pool_create directly\nenum MemPoolError {\n    // pool created successfully\n    POOL_OK = TBBMALLOC_OK,\n    // invalid policy parameters found\n    INVALID_POLICY = TBBMALLOC_INVALID_PARAM,\n     // requested pool policy is not supported by allocator library\n    UNSUPPORTED_POLICY = TBBMALLOC_UNSUPPORTED,\n    // lack of memory during pool creation\n    NO_MEMORY = TBBMALLOC_NO_MEMORY,\n    // action takes no effect\n    NO_EFFECT = TBBMALLOC_NO_EFFECT\n};\n\nMemPoolError pool_create_v1(intptr_t pool_id, const MemPoolPolicy *policy,\n                            rml::MemoryPool **pool);\n\nbool  pool_destroy(MemoryPool* memPool);\nvoid *pool_malloc(MemoryPool* memPool, size_t size);\nvoid *pool_realloc(MemoryPool* memPool, void *object, size_t size);\nvoid *pool_aligned_malloc(MemoryPool* mPool, size_t size, size_t alignment);\nvoid *pool_aligned_realloc(MemoryPool* mPool, void *ptr, size_t size, size_t alignment);\nbool  pool_reset(MemoryPool* memPool);\nbool  pool_free(MemoryPool *memPool, void *object);\nMemoryPool *pool_identify(void *object);\n}\n\n#include <new>      /* To use new with the placement argument */\n\n/* Ensure that including this header does not cause implicit linkage with TBB */\n#ifndef __TBB_NO_IMPLICIT_LINKAGE\n    #define __TBB_NO_IMPLICIT_LINKAGE 1\n    #include \"tbb_stddef.h\"\n    #undef  __TBB_NO_IMPLICIT_LINKAGE\n#else\n    #include \"tbb_stddef.h\"\n#endif\n\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n #include <utility> // std::forward\n#endif\n\nnamespace tbb {\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! @cond INTERNAL\nnamespace internal {\n\n#if TBB_USE_EXCEPTIONS\n// forward declaration is for inlining prevention\ntemplate<typename E> __TBB_NOINLINE( void throw_exception(const E &e) );\n#endif\n\n// keep throw in a separate function to prevent code bloat\ntemplate<typename E>\nvoid throw_exception(const E &e) {\n    __TBB_THROW(e);\n}\n\n} // namespace internal\n//! @endcond\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate<typename T>\nclass scalable_allocator {\npublic:\n    typedef typename internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<class U> struct rebind {\n        typedef scalable_allocator<U> other;\n    };\n\n    scalable_allocator() throw() {}\n    scalable_allocator( const scalable_allocator& ) throw() {}\n    template<typename U> scalable_allocator(const scalable_allocator<U>&) throw() {}\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects.\n    pointer allocate( size_type n, const void* /*hint*/ =0 ) {\n        pointer p = static_cast<pointer>( scalable_malloc( n * sizeof(value_type) ) );\n        if (!p)\n            internal::throw_exception(std::bad_alloc());\n        return p;\n    }\n\n    //! Free previously allocated block of memory\n    void deallocate( pointer p, size_type ) {\n        scalable_free( p );\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        size_type absolutemax = static_cast<size_type>(-1) / sizeof (value_type);\n        return (absolutemax > 0 ? absolutemax : 1);\n    }\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) { ::new((void*)(p)) value_type( std::move( value ) ); }\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    void destroy( pointer p ) {p->~value_type();}\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<>\nclass scalable_allocator<void> {\npublic:\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<class U> struct rebind {\n        typedef scalable_allocator<U> other;\n    };\n};\n\ntemplate<typename T, typename U>\ninline bool operator==( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return true;}\n\ntemplate<typename T, typename U>\ninline bool operator!=( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return false;}\n\n} // namespace tbb\n\n#if _MSC_VER\n    #if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)\n        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1\n    #endif\n\n    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE\n        #ifdef _DEBUG\n            #pragma comment(lib, \"tbbmalloc_debug.lib\")\n        #else\n            #pragma comment(lib, \"tbbmalloc.lib\")\n        #endif\n    #endif\n\n\n#endif\n\n#endif /* __cplusplus */\n\n#if !defined(__cplusplus) && __ICC==1100\n    #pragma warning (pop)\n#endif // ICC 11.0 warning 991 is back\n\n#endif /* __TBB_scalable_allocator_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/spin_mutex.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_spin_mutex_H\n#define __TBB_spin_mutex_H\n\n#include <cstddef>\n#include <new>\n#include \"aligned_space.h\"\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_mutex_padding.h\"\n\nnamespace tbb {\n\n//! A lock that occupies a single byte.\n/** A spin_mutex is a spin mutex that fits in a single byte.\n    It should be used only for locking short critical sections\n    (typically less than 20 instructions) when fairness is not an issue.\n    If zero-initialized, the mutex is considered unheld.\n    @ingroup synchronization */\nclass spin_mutex : internal::mutex_copy_deprecated_and_disabled {\n    //! 0 if lock is released, 1 if lock is acquired.\n    __TBB_atomic_flag flag;\n\npublic:\n    //! Construct unacquired lock.\n    /** Equivalent to zero-initialization of *this. */\n    spin_mutex() : flag(0) {\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n    //! Represents acquisition of a mutex.\n    class scoped_lock : internal::no_copy {\n    private:\n        //! Points to currently held mutex, or NULL if no lock is held.\n        spin_mutex* my_mutex;\n\n        //! Value to store into spin_mutex::flag to unlock the mutex.\n        /** This variable is no longer used. Instead, 0 and 1 are used to\n            represent that the lock is free and acquired, respectively.\n            We keep the member variable here to ensure backward compatibility */\n        __TBB_Flag my_unlock_value;\n\n        //! Like acquire, but with ITT instrumentation.\n        void __TBB_EXPORTED_METHOD internal_acquire( spin_mutex& m );\n\n        //! Like try_acquire, but with ITT instrumentation.\n        bool __TBB_EXPORTED_METHOD internal_try_acquire( spin_mutex& m );\n\n        //! Like release, but with ITT instrumentation.\n        void __TBB_EXPORTED_METHOD internal_release();\n\n        friend class spin_mutex;\n\n    public:\n        //! Construct without acquiring a mutex.\n        scoped_lock() : my_mutex(NULL), my_unlock_value(0) {}\n\n        //! Construct and acquire lock on a mutex.\n        scoped_lock( spin_mutex& m ) : my_unlock_value(0) {\n            internal::suppress_unused_warning(my_unlock_value);\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            my_mutex=NULL;\n            internal_acquire(m);\n#else\n            my_mutex=&m;\n            __TBB_LockByte(m.flag);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/\n        }\n\n        //! Acquire lock.\n        void acquire( spin_mutex& m ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            internal_acquire(m);\n#else\n            my_mutex = &m;\n            __TBB_LockByte(m.flag);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/\n        }\n\n        //! Try acquiring lock (non-blocking)\n        /** Return true if lock acquired; false otherwise. */\n        bool try_acquire( spin_mutex& m ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            return internal_try_acquire(m);\n#else\n            bool result = __TBB_TryLockByte(m.flag);\n            if( result )\n                my_mutex = &m;\n            return result;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/\n        }\n\n        //! Release lock\n        void release() {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            internal_release();\n#else\n            __TBB_UnlockByte(my_mutex->flag);\n            my_mutex = NULL;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n        }\n\n        //! Destroy lock.  If holding a lock, releases the lock first.\n        ~scoped_lock() {\n            if( my_mutex ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n                internal_release();\n#else\n                __TBB_UnlockByte(my_mutex->flag);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n            }\n        }\n    };\n\n    //! Internal constructor with ITT instrumentation.\n    void __TBB_EXPORTED_METHOD internal_construct();\n\n    // Mutex traits\n    static const bool is_rw_mutex = false;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire lock\n    void lock() {\n#if TBB_USE_THREADING_TOOLS\n        aligned_space<scoped_lock> tmp;\n        new(tmp.begin()) scoped_lock(*this);\n#else\n        __TBB_LockByte(flag);\n#endif /* TBB_USE_THREADING_TOOLS*/\n    }\n\n    //! Try acquiring lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {\n#if TBB_USE_THREADING_TOOLS\n        aligned_space<scoped_lock> tmp;\n        return (new(tmp.begin()) scoped_lock)->internal_try_acquire(*this);\n#else\n        return __TBB_TryLockByte(flag);\n#endif /* TBB_USE_THREADING_TOOLS*/\n    }\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_THREADING_TOOLS\n        aligned_space<scoped_lock> tmp;\n        scoped_lock& s = *tmp.begin();\n        s.my_mutex = this;\n        s.internal_release();\n#else\n        __TBB_store_with_release(flag, 0);\n#endif /* TBB_USE_THREADING_TOOLS */\n    }\n\n    friend class scoped_lock;\n}; // end of spin_mutex\n\n__TBB_DEFINE_PROFILING_SET_NAME(spin_mutex)\n\n} // namespace tbb\n\n#if ( __TBB_x86_32 || __TBB_x86_64 )\n#include \"internal/_x86_eliding_mutex_impl.h\"\n#endif\n\nnamespace tbb {\n//! A cross-platform spin mutex with speculative lock acquisition.\n/** On platforms with proper HW support, this lock may speculatively execute\n    its critical sections, using HW mechanisms to detect real data races and\n    ensure atomicity of the critical sections. In particular, it uses\n    Intel(R) Transactional Synchronization Extensions (Intel(R) TSX).\n    Without such HW support, it behaves like a spin_mutex.\n    It should be used for locking short critical sections where the lock is\n    contended but the data it protects are not.  If zero-initialized, the\n    mutex is considered unheld.\n    @ingroup synchronization */\n\n#if ( __TBB_x86_32 || __TBB_x86_64 )\ntypedef interface7::internal::padded_mutex<interface7::internal::x86_eliding_mutex,false> speculative_spin_mutex;\n#else\ntypedef interface7::internal::padded_mutex<spin_mutex,false> speculative_spin_mutex;\n#endif\n__TBB_DEFINE_PROFILING_SET_NAME(speculative_spin_mutex)\n\n} // namespace tbb\n\n#endif /* __TBB_spin_mutex_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/spin_rw_mutex.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_spin_rw_mutex_H\n#define __TBB_spin_rw_mutex_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include \"internal/_mutex_padding.h\"\n\nnamespace tbb {\n\n#if __TBB_TSX_AVAILABLE\nnamespace interface8 { namespace internal {\n    class x86_rtm_rw_mutex;\n}}\n#endif\n\nclass spin_rw_mutex_v3;\ntypedef spin_rw_mutex_v3 spin_rw_mutex;\n\n//! Fast, unfair, spinning reader-writer lock with backoff and writer-preference\n/** @ingroup synchronization */\nclass spin_rw_mutex_v3 : internal::mutex_copy_deprecated_and_disabled {\n    //! @cond INTERNAL\n\n    //! Internal acquire write lock.\n    bool __TBB_EXPORTED_METHOD internal_acquire_writer();\n\n    //! Out of line code for releasing a write lock.\n    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */\n    void __TBB_EXPORTED_METHOD internal_release_writer();\n\n    //! Internal acquire read lock.\n    void __TBB_EXPORTED_METHOD internal_acquire_reader();\n\n    //! Internal upgrade reader to become a writer.\n    bool __TBB_EXPORTED_METHOD internal_upgrade();\n\n    //! Out of line code for downgrading a writer to a reader.\n    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */\n    void __TBB_EXPORTED_METHOD internal_downgrade();\n\n    //! Internal release read lock.\n    void __TBB_EXPORTED_METHOD internal_release_reader();\n\n    //! Internal try_acquire write lock.\n    bool __TBB_EXPORTED_METHOD internal_try_acquire_writer();\n\n    //! Internal try_acquire read lock.\n    bool __TBB_EXPORTED_METHOD internal_try_acquire_reader();\n\n    //! @endcond\npublic:\n    //! Construct unacquired mutex.\n    spin_rw_mutex_v3() : state(0) {\n#if TBB_USE_THREADING_TOOLS\n        internal_construct();\n#endif\n    }\n\n#if TBB_USE_ASSERT\n    //! Destructor asserts if the mutex is acquired, i.e. state is zero.\n    ~spin_rw_mutex_v3() {\n        __TBB_ASSERT( !state, \"destruction of an acquired mutex\");\n    };\n#endif /* TBB_USE_ASSERT */\n\n    //! The scoped locking pattern\n    /** It helps to avoid the common problem of forgetting to release lock.\n        It also nicely provides the \"node\" for queuing locks. */\n    class scoped_lock : internal::no_copy {\n#if __TBB_TSX_AVAILABLE\n        friend class tbb::interface8::internal::x86_rtm_rw_mutex;\n        // helper methods for x86_rtm_rw_mutex\n        spin_rw_mutex *internal_get_mutex() const { return mutex; }\n        void internal_set_mutex(spin_rw_mutex* m) { mutex = m; }\n#endif\n    public:\n        //! Construct lock that has not acquired a mutex.\n        /** Equivalent to zero-initialization of *this. */\n        scoped_lock() : mutex(NULL), is_writer(false) {}\n\n        //! Acquire lock on given mutex.\n        scoped_lock( spin_rw_mutex& m, bool write = true ) : mutex(NULL) {\n            acquire(m, write);\n        }\n\n        //! Release lock (if lock is held).\n        ~scoped_lock() {\n            if( mutex ) release();\n        }\n\n        //! Acquire lock on given mutex.\n        void acquire( spin_rw_mutex& m, bool write = true ) {\n            __TBB_ASSERT( !mutex, \"holding mutex already\" );\n            is_writer = write;\n            mutex = &m;\n            if( write ) mutex->internal_acquire_writer();\n            else        mutex->internal_acquire_reader();\n        }\n\n        //! Upgrade reader to become a writer.\n        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */\n        bool upgrade_to_writer() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( !is_writer, \"not a reader\" );\n            is_writer = true;\n            return mutex->internal_upgrade();\n        }\n\n        //! Release lock.\n        void release() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            spin_rw_mutex *m = mutex;\n            mutex = NULL;\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            if( is_writer ) m->internal_release_writer();\n            else            m->internal_release_reader();\n#else\n            if( is_writer ) __TBB_AtomicAND( &m->state, READERS );\n            else            __TBB_FetchAndAddWrelease( &m->state, -(intptr_t)ONE_READER);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n        }\n\n        //! Downgrade writer to become a reader.\n        bool downgrade_to_reader() {\n            __TBB_ASSERT( mutex, \"lock is not acquired\" );\n            __TBB_ASSERT( is_writer, \"not a writer\" );\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n            mutex->internal_downgrade();\n#else\n            __TBB_FetchAndAddW( &mutex->state, ((intptr_t)ONE_READER-WRITER));\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n            is_writer = false;\n            return true;\n        }\n\n        //! Try acquire lock on given mutex.\n        bool try_acquire( spin_rw_mutex& m, bool write = true ) {\n            __TBB_ASSERT( !mutex, \"holding mutex already\" );\n            bool result;\n            is_writer = write;\n            result = write? m.internal_try_acquire_writer()\n                          : m.internal_try_acquire_reader();\n            if( result )\n                mutex = &m;\n            return result;\n        }\n\n    protected:\n\n        //! The pointer to the current mutex that is held, or NULL if no mutex is held.\n        spin_rw_mutex* mutex;\n\n        //! If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.\n        /** Not defined if not holding a lock. */\n        bool is_writer;\n    };\n\n    // Mutex traits\n    static const bool is_rw_mutex = true;\n    static const bool is_recursive_mutex = false;\n    static const bool is_fair_mutex = false;\n\n    // ISO C++0x compatibility methods\n\n    //! Acquire writer lock\n    void lock() {internal_acquire_writer();}\n\n    //! Try acquiring writer lock (non-blocking)\n    /** Return true if lock acquired; false otherwise. */\n    bool try_lock() {return internal_try_acquire_writer();}\n\n    //! Release lock\n    void unlock() {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n        if( state&WRITER ) internal_release_writer();\n        else               internal_release_reader();\n#else\n        if( state&WRITER ) __TBB_AtomicAND( &state, READERS );\n        else               __TBB_FetchAndAddWrelease( &state, -(intptr_t)ONE_READER);\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n    }\n\n    // Methods for reader locks that resemble ISO C++0x compatibility methods.\n\n    //! Acquire reader lock\n    void lock_read() {internal_acquire_reader();}\n\n    //! Try acquiring reader lock (non-blocking)\n    /** Return true if reader lock acquired; false otherwise. */\n    bool try_lock_read() {return internal_try_acquire_reader();}\n\nprotected:\n    typedef intptr_t state_t;\n    static const state_t WRITER = 1;\n    static const state_t WRITER_PENDING = 2;\n    static const state_t READERS = ~(WRITER | WRITER_PENDING);\n    static const state_t ONE_READER = 4;\n    static const state_t BUSY = WRITER | READERS;\n    //! State of lock\n    /** Bit 0 = writer is holding lock\n        Bit 1 = request by a writer to acquire lock (hint to readers to wait)\n        Bit 2..N = number of readers holding lock */\n    state_t state;\n\nprivate:\n    void __TBB_EXPORTED_METHOD internal_construct();\n};\n\n__TBB_DEFINE_PROFILING_SET_NAME(spin_rw_mutex)\n\n} // namespace tbb\n\n#if __TBB_TSX_AVAILABLE\n#include \"internal/_x86_rtm_rw_mutex_impl.h\"\n#endif\n\nnamespace tbb {\nnamespace interface8 {\n//! A cross-platform spin reader/writer mutex with speculative lock acquisition.\n/** On platforms with proper HW support, this lock may speculatively execute\n    its critical sections, using HW mechanisms to detect real data races and\n    ensure atomicity of the critical sections. In particular, it uses\n    Intel(R) Transactional Synchronization Extensions (Intel(R) TSX).\n    Without such HW support, it behaves like a spin_rw_mutex.\n    It should be used for locking short critical sections where the lock is\n    contended but the data it protects are not.\n    @ingroup synchronization */\n#if __TBB_TSX_AVAILABLE\ntypedef interface7::internal::padded_mutex<tbb::interface8::internal::x86_rtm_rw_mutex,true> speculative_spin_rw_mutex;\n#else\ntypedef interface7::internal::padded_mutex<tbb::spin_rw_mutex,true> speculative_spin_rw_mutex;\n#endif\n}  // namespace interface8\n\nusing interface8::speculative_spin_rw_mutex;\n__TBB_DEFINE_PROFILING_SET_NAME(speculative_spin_rw_mutex)\n} // namespace tbb\n#endif /* __TBB_spin_rw_mutex_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/task.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_task_H\n#define __TBB_task_H\n\n#include \"tbb_stddef.h\"\n#include \"tbb_machine.h\"\n#include \"tbb_profiling.h\"\n#include <climits>\n\ntypedef struct ___itt_caller *__itt_caller;\n\nnamespace tbb {\n\nclass task;\nclass task_list;\nclass task_group_context;\n\n// MSVC does not allow taking the address of a member that was defined\n// privately in task_base and made public in class task via a using declaration.\n#if _MSC_VER || (__GNUC__==3 && __GNUC_MINOR__<3)\n#define __TBB_TASK_BASE_ACCESS public\n#else\n#define __TBB_TASK_BASE_ACCESS private\n#endif\n\nnamespace internal { //< @cond INTERNAL\n\n    class allocate_additional_child_of_proxy: no_assign {\n        //! No longer used, but retained for binary layout compatibility.  Always NULL.\n        task* self;\n        task& parent;\n    public:\n        explicit allocate_additional_child_of_proxy( task& parent_ ) : self(NULL), parent(parent_) {}\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n\n    struct cpu_ctl_env_space { int space[sizeof(internal::uint64_t)/sizeof(int)]; };\n} //< namespace internal @endcond\n\nnamespace interface5 {\n    namespace internal {\n        //! Base class for methods that became static in TBB 3.0.\n        /** TBB's evolution caused the \"this\" argument for several methods to become obsolete.\n            However, for backwards binary compatibility, the new methods need distinct names,\n            otherwise the One Definition Rule would be broken.  Hence the new methods are\n            defined in this private base class, and then exposed in class task via\n            using declarations. */\n        class task_base: tbb::internal::no_copy {\n        __TBB_TASK_BASE_ACCESS:\n            friend class tbb::task;\n\n            //! Schedule task for execution when a worker becomes available.\n            static void spawn( task& t );\n\n            //! Spawn multiple tasks and clear list.\n            static void spawn( task_list& list );\n\n            //! Like allocate_child, except that task's parent becomes \"t\", not this.\n            /** Typically used in conjunction with schedule_to_reexecute to implement while loops.\n               Atomically increments the reference count of t.parent() */\n            static tbb::internal::allocate_additional_child_of_proxy allocate_additional_child_of( task& t ) {\n                return tbb::internal::allocate_additional_child_of_proxy(t);\n            }\n\n            //! Destroy a task.\n            /** Usually, calling this method is unnecessary, because a task is\n                implicitly deleted after its execute() method runs.  However,\n                sometimes a task needs to be explicitly deallocated, such as\n                when a root task is used as the parent in spawn_and_wait_for_all. */\n            static void __TBB_EXPORTED_FUNC destroy( task& victim );\n        };\n    } // internal\n} // interface5\n\n//! @cond INTERNAL\nnamespace internal {\n\n    class scheduler: no_copy {\n    public:\n        //! For internal use only\n        virtual void spawn( task& first, task*& next ) = 0;\n\n        //! For internal use only\n        virtual void wait_for_all( task& parent, task* child ) = 0;\n\n        //! For internal use only\n        virtual void spawn_root_and_wait( task& first, task*& next ) = 0;\n\n        //! Pure virtual destructor;\n        //  Have to have it just to shut up overzealous compilation warnings\n        virtual ~scheduler() = 0;\n\n        //! For internal use only\n        virtual void enqueue( task& t, void* reserved ) = 0;\n    };\n\n    //! A reference count\n    /** Should always be non-negative.  A signed type is used so that underflow can be detected. */\n    typedef intptr_t reference_count;\n\n    //! An id as used for specifying affinity.\n    typedef unsigned short affinity_id;\n\n#if __TBB_TASK_GROUP_CONTEXT\n    class generic_scheduler;\n\n    struct context_list_node_t {\n        context_list_node_t *my_prev,\n                            *my_next;\n    };\n\n    class allocate_root_with_context_proxy: no_assign {\n        task_group_context& my_context;\n    public:\n        allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    class allocate_root_proxy: no_assign {\n    public:\n        static task& __TBB_EXPORTED_FUNC allocate( size_t size );\n        static void __TBB_EXPORTED_FUNC free( task& );\n    };\n\n    class allocate_continuation_proxy: no_assign {\n    public:\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n\n    class allocate_child_proxy: no_assign {\n    public:\n        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;\n        void __TBB_EXPORTED_METHOD free( task& ) const;\n    };\n\n    //! Memory prefix to a task object.\n    /** This class is internal to the library.\n        Do not reference it directly, except within the library itself.\n        Fields are ordered in way that preserves backwards compatibility and yields\n        good packing on typical 32-bit and 64-bit platforms.\n\n        In case task prefix size exceeds 32 or 64 bytes on IA32 and Intel64\n        architectures correspondingly, consider dynamic setting of task_alignment\n        and task_prefix_reservation_size based on the maximal operand size supported\n        by the current CPU.\n\n        @ingroup task_scheduling */\n    class task_prefix {\n    private:\n        friend class tbb::task;\n        friend class tbb::interface5::internal::task_base;\n        friend class tbb::task_list;\n        friend class internal::scheduler;\n        friend class internal::allocate_root_proxy;\n        friend class internal::allocate_child_proxy;\n        friend class internal::allocate_continuation_proxy;\n        friend class internal::allocate_additional_child_of_proxy;\n\n#if __TBB_TASK_GROUP_CONTEXT\n        //! Shared context that is used to communicate asynchronous state changes\n        /** Currently it is used to broadcast cancellation requests generated both\n            by users and as the result of unhandled exceptions in the task::execute()\n            methods. */\n        task_group_context  *context;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n        //! The scheduler that allocated the task, or NULL if the task is big.\n        /** Small tasks are pooled by the scheduler that allocated the task.\n            If a scheduler needs to free a small task allocated by another scheduler,\n            it returns the task to that other scheduler.  This policy avoids\n            memory space blowup issues for memory allocators that allocate from\n            thread-specific pools. */\n        scheduler* origin;\n\n#if __TBB_TASK_PRIORITY\n        union {\n#endif /* __TBB_TASK_PRIORITY */\n        //! Obsolete. The scheduler that owns the task.\n        /** Retained only for the sake of backward binary compatibility.\n            Still used by inline methods in the task.h header. **/\n        scheduler* owner;\n\n#if __TBB_TASK_PRIORITY\n        //! Pointer to the next offloaded lower priority task.\n        /** Used to maintain a list of offloaded tasks inside the scheduler. **/\n        task* next_offloaded;\n        };\n#endif /* __TBB_TASK_PRIORITY */\n\n        //! The task whose reference count includes me.\n        /** In the \"blocking style\" of programming, this field points to the parent task.\n            In the \"continuation-passing style\" of programming, this field points to the\n            continuation of the parent. */\n        tbb::task* parent;\n\n        //! Reference count used for synchronization.\n        /** In the \"continuation-passing style\" of programming, this field is\n            the difference of the number of allocated children minus the\n            number of children that have completed.\n            In the \"blocking style\" of programming, this field is one more than the difference. */\n        __TBB_atomic reference_count ref_count;\n\n        //! Obsolete. Used to be scheduling depth before TBB 2.2\n        /** Retained only for the sake of backward binary compatibility.\n            Not used by TBB anymore. **/\n        int depth;\n\n        //! A task::state_type, stored as a byte for compactness.\n        /** This state is exposed to users via method task::state(). */\n        unsigned char state;\n\n        //! Miscellaneous state that is not directly visible to users, stored as a byte for compactness.\n        /** 0x0 -> version 1.0 task\n            0x1 -> version >=2.1 task\n            0x10 -> task was enqueued\n            0x20 -> task_proxy\n            0x40 -> task has live ref_count\n            0x80 -> a stolen task */\n        unsigned char extra_state;\n\n        affinity_id affinity;\n\n        //! \"next\" field for list of task\n        tbb::task* next;\n\n        //! The task corresponding to this task_prefix.\n        tbb::task& task() {return *reinterpret_cast<tbb::task*>(this+1);}\n    };\n\n} // namespace internal\n//! @endcond\n\n#if __TBB_TASK_GROUP_CONTEXT\n\n#if __TBB_TASK_PRIORITY\nnamespace internal {\n    static const int priority_stride_v4 = INT_MAX / 4;\n}\n\nenum priority_t {\n    priority_normal = internal::priority_stride_v4 * 2,\n    priority_low = priority_normal - internal::priority_stride_v4,\n    priority_high = priority_normal + internal::priority_stride_v4\n};\n\n#endif /* __TBB_TASK_PRIORITY */\n\n#if TBB_USE_CAPTURED_EXCEPTION\n    class tbb_exception;\n#else\n    namespace internal {\n        class tbb_exception_ptr;\n    }\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n\nclass task_scheduler_init;\nnamespace interface7 { class task_arena; }\n\n//! Used to form groups of tasks\n/** @ingroup task_scheduling\n    The context services explicit cancellation requests from user code, and unhandled\n    exceptions intercepted during tasks execution. Intercepting an exception results\n    in generating internal cancellation requests (which is processed in exactly the\n    same way as external ones).\n\n    The context is associated with one or more root tasks and defines the cancellation\n    group that includes all the descendants of the corresponding root task(s). Association\n    is established when a context object is passed as an argument to the task::allocate_root()\n    method. See task_group_context::task_group_context for more details.\n\n    The context can be bound to another one, and other contexts can be bound to it,\n    forming a tree-like structure: parent -> this -> children. Arrows here designate\n    cancellation propagation direction. If a task in a cancellation group is cancelled\n    all the other tasks in this group and groups bound to it (as children) get cancelled too.\n\n    IMPLEMENTATION NOTE:\n    When adding new members to task_group_context or changing types of existing ones,\n    update the size of both padding buffers (_leading_padding and _trailing_padding)\n    appropriately. See also VERSIONING NOTE at the constructor definition below. **/\nclass task_group_context : internal::no_copy {\nprivate:\n    friend class internal::generic_scheduler;\n    friend class task_scheduler_init;\n    friend class interface7::task_arena;\n\n#if TBB_USE_CAPTURED_EXCEPTION\n    typedef tbb_exception exception_container_type;\n#else\n    typedef internal::tbb_exception_ptr exception_container_type;\n#endif\n\n    enum version_traits_word_layout {\n        traits_offset = 16,\n        version_mask = 0xFFFF,\n        traits_mask = 0xFFFFul << traits_offset\n    };\n\npublic:\n    enum kind_type {\n        isolated,\n        bound\n    };\n\n    enum traits_type {\n        exact_exception = 0x0001ul << traits_offset,\n#if __TBB_FP_CONTEXT\n        fp_settings     = 0x0002ul << traits_offset,\n#endif\n        concurrent_wait = 0x0004ul << traits_offset,\n#if TBB_USE_CAPTURED_EXCEPTION\n        default_traits = 0\n#else\n        default_traits = exact_exception\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n    };\n\nprivate:\n    enum state {\n        may_have_children = 1,\n        // the following enumerations must be the last, new 2^x values must go above\n        next_state_value, low_unused_state_bit = (next_state_value-1)*2\n    };\n\n    union {\n        //! Flavor of this context: bound or isolated.\n        // TODO: describe asynchronous use, and whether any memory semantics are needed\n        __TBB_atomic kind_type my_kind;\n        uintptr_t _my_kind_aligner;\n    };\n\n    //! Pointer to the context of the parent cancellation group. NULL for isolated contexts.\n    task_group_context *my_parent;\n\n    //! Used to form the thread specific list of contexts without additional memory allocation.\n    /** A context is included into the list of the current thread when its binding to\n        its parent happens. Any context can be present in the list of one thread only. **/\n    internal::context_list_node_t my_node;\n\n    //! Used to set and maintain stack stitching point for Intel Performance Tools.\n    __itt_caller itt_caller;\n\n    //! Leading padding protecting accesses to frequently used members from false sharing.\n    /** Read accesses to the field my_cancellation_requested are on the hot path inside\n        the scheduler. This padding ensures that this field never shares the same cache\n        line with a local variable that is frequently written to. **/\n    char _leading_padding[internal::NFS_MaxLineSize\n                          - 2 * sizeof(uintptr_t)- sizeof(void*) - sizeof(internal::context_list_node_t)\n                          - sizeof(__itt_caller)\n#if __TBB_FP_CONTEXT\n                          - sizeof(internal::cpu_ctl_env_space)\n#endif\n                         ];\n\n#if __TBB_FP_CONTEXT\n    //! Space for platform-specific FPU settings.\n    /** Must only be accessed inside TBB binaries, and never directly in user\n        code or inline methods. */\n    internal::cpu_ctl_env_space my_cpu_ctl_env;\n#endif\n\n    //! Specifies whether cancellation was requested for this task group.\n    uintptr_t my_cancellation_requested;\n\n    //! Version for run-time checks and behavioral traits of the context.\n    /** Version occupies low 16 bits, and traits (zero or more ORed enumerators\n        from the traits_type enumerations) take the next 16 bits.\n        Original (zeroth) version of the context did not support any traits. **/\n    uintptr_t my_version_and_traits;\n\n    //! Pointer to the container storing exception being propagated across this task group.\n    exception_container_type *my_exception;\n\n    //! Scheduler instance that registered this context in its thread specific list.\n    internal::generic_scheduler *my_owner;\n\n    //! Internal state (combination of state flags, currently only may_have_children).\n    uintptr_t my_state;\n\n#if __TBB_TASK_PRIORITY\n    //! Priority level of the task group (in normalized representation)\n    intptr_t my_priority;\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! Trailing padding protecting accesses to frequently used members from false sharing\n    /** \\sa _leading_padding **/\n    char _trailing_padding[internal::NFS_MaxLineSize - 2 * sizeof(uintptr_t) - 2 * sizeof(void*)\n#if __TBB_TASK_PRIORITY\n                            - sizeof(intptr_t)\n#endif /* __TBB_TASK_PRIORITY */\n                          ];\n\npublic:\n    //! Default & binding constructor.\n    /** By default a bound context is created. That is this context will be bound\n        (as child) to the context of the task calling task::allocate_root(this_context)\n        method. Cancellation requests passed to the parent context are propagated\n        to all the contexts bound to it. Similarly priority change is propagated\n        from the parent context to its children.\n\n        If task_group_context::isolated is used as the argument, then the tasks associated\n        with this context will never be affected by events in any other context.\n\n        Creating isolated contexts involve much less overhead, but they have limited\n        utility. Normally when an exception occurs in an algorithm that has nested\n        ones running, it is desirably to have all the nested algorithms cancelled\n        as well. Such a behavior requires nested algorithms to use bound contexts.\n\n        There is one good place where using isolated algorithms is beneficial. It is\n        a master thread. That is if a particular algorithm is invoked directly from\n        the master thread (not from a TBB task), supplying it with explicitly\n        created isolated context will result in a faster algorithm startup.\n\n        VERSIONING NOTE:\n        Implementation(s) of task_group_context constructor(s) cannot be made\n        entirely out-of-line because the run-time version must be set by the user\n        code. This will become critically important for binary compatibility, if\n        we ever have to change the size of the context object.\n\n        Boosting the runtime version will also be necessary if new data fields are\n        introduced in the currently unused padding areas and these fields are updated\n        by inline methods. **/\n    task_group_context ( kind_type relation_with_parent = bound,\n                         uintptr_t t = default_traits )\n        : my_kind(relation_with_parent)\n        , my_version_and_traits(2 | t)\n    {\n        init();\n    }\n\n    // Do not introduce standalone unbind method since it will break state propagation assumptions\n    __TBB_EXPORTED_METHOD ~task_group_context ();\n\n    //! Forcefully reinitializes the context after the task tree it was associated with is completed.\n    /** Because the method assumes that all the tasks that used to be associated with\n        this context have already finished, calling it while the context is still\n        in use somewhere in the task hierarchy leads to undefined behavior.\n\n        IMPORTANT: This method is not thread safe!\n\n        The method does not change the context's parent if it is set. **/\n    void __TBB_EXPORTED_METHOD reset ();\n\n    //! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.\n    /** \\return false if cancellation has already been requested, true otherwise.\n\n        Note that canceling never fails. When false is returned, it just means that\n        another thread (or this one) has already sent cancellation request to this\n        context or to one of its ancestors (if this context is bound). It is guaranteed\n        that when this method is concurrently called on the same not yet cancelled\n        context, true will be returned by one and only one invocation. **/\n    bool __TBB_EXPORTED_METHOD cancel_group_execution ();\n\n    //! Returns true if the context received cancellation request.\n    bool __TBB_EXPORTED_METHOD is_group_execution_cancelled () const;\n\n    //! Records the pending exception, and cancels the task group.\n    /** May be called only from inside a catch-block. If the context is already\n        cancelled, does nothing.\n        The method brings the task group associated with this context exactly into\n        the state it would be in, if one of its tasks threw the currently pending\n        exception during its execution. In other words, it emulates the actions\n        of the scheduler's dispatch loop exception handler. **/\n    void __TBB_EXPORTED_METHOD register_pending_exception ();\n\n#if __TBB_FP_CONTEXT\n    //! Captures the current FPU control settings to the context.\n    /** Because the method assumes that all the tasks that used to be associated with\n        this context have already finished, calling it while the context is still\n        in use somewhere in the task hierarchy leads to undefined behavior.\n\n        IMPORTANT: This method is not thread safe!\n\n        The method does not change the FPU control settings of the context's parent. **/\n    void __TBB_EXPORTED_METHOD capture_fp_settings ();\n#endif\n\n#if __TBB_TASK_PRIORITY\n    //! Changes priority of the task group\n    void set_priority ( priority_t );\n\n    //! Retrieves current priority of the current task group\n    priority_t priority () const;\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! Returns the context's trait\n    uintptr_t traits() const { return my_version_and_traits & traits_mask; }\n\nprotected:\n    //! Out-of-line part of the constructor.\n    /** Singled out to ensure backward binary compatibility of the future versions. **/\n    void __TBB_EXPORTED_METHOD init ();\n\nprivate:\n    friend class task;\n    friend class internal::allocate_root_with_context_proxy;\n\n    static const kind_type binding_required = bound;\n    static const kind_type binding_completed = kind_type(bound+1);\n    static const kind_type detached = kind_type(binding_completed+1);\n    static const kind_type dying = kind_type(detached+1);\n\n    //! Propagates any state change detected to *this, and as an optimisation possibly also upward along the heritage line.\n    template <typename T>\n    void propagate_task_group_state ( T task_group_context::*mptr_state, task_group_context& src, T new_state );\n\n    //! Registers this context with the local scheduler and binds it to its parent context\n    void bind_to ( internal::generic_scheduler *local_sched );\n\n    //! Registers this context with the local scheduler\n    void register_with ( internal::generic_scheduler *local_sched );\n\n#if __TBB_FP_CONTEXT\n    //! Copies FPU control setting from another context\n    // TODO: Consider adding #else stub in order to omit #if sections in other code\n    void copy_fp_settings( const task_group_context &src );\n#endif /* __TBB_FP_CONTEXT */\n}; // class task_group_context\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n//! Base class for user-defined tasks.\n/** @ingroup task_scheduling */\nclass task: __TBB_TASK_BASE_ACCESS interface5::internal::task_base {\n\n    //! Set reference count\n    void __TBB_EXPORTED_METHOD internal_set_ref_count( int count );\n\n    //! Decrement reference count and return its new value.\n    internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();\n\nprotected:\n    //! Default constructor.\n    task() {prefix().extra_state=1;}\n\npublic:\n    //! Destructor.\n    virtual ~task() {}\n\n    //! Should be overridden by derived classes.\n    virtual task* execute() = 0;\n\n    //! Enumeration of task states that the scheduler considers.\n    enum state_type {\n        //! task is running, and will be destroyed after method execute() completes.\n        executing,\n        //! task to be rescheduled.\n        reexecute,\n        //! task is in ready pool, or is going to be put there, or was just taken off.\n        ready,\n        //! task object is freshly allocated or recycled.\n        allocated,\n        //! task object is on free list, or is going to be put there, or was just taken off.\n        freed,\n        //! task to be recycled as continuation\n        recycle\n#if __TBB_RECYCLE_TO_ENQUEUE\n        //! task to be scheduled for starvation-resistant execution\n        ,to_enqueue\n#endif\n    };\n\n    //------------------------------------------------------------------------\n    // Allocating tasks\n    //------------------------------------------------------------------------\n\n    //! Returns proxy for overloaded new that allocates a root task.\n    static internal::allocate_root_proxy allocate_root() {\n        return internal::allocate_root_proxy();\n    }\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Returns proxy for overloaded new that allocates a root task associated with user supplied context.\n    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {\n        return internal::allocate_root_with_context_proxy(ctx);\n    }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    //! Returns proxy for overloaded new that allocates a continuation task of *this.\n    /** The continuation's parent becomes the parent of *this. */\n    internal::allocate_continuation_proxy& allocate_continuation() {\n        return *reinterpret_cast<internal::allocate_continuation_proxy*>(this);\n    }\n\n    //! Returns proxy for overloaded new that allocates a child task of *this.\n    internal::allocate_child_proxy& allocate_child() {\n        return *reinterpret_cast<internal::allocate_child_proxy*>(this);\n    }\n\n    //! Define recommended static form via import from base class.\n    using task_base::allocate_additional_child_of;\n\n#if __TBB_DEPRECATED_TASK_INTERFACE\n    //! Destroy a task.\n    /** Usually, calling this method is unnecessary, because a task is\n        implicitly deleted after its execute() method runs.  However,\n        sometimes a task needs to be explicitly deallocated, such as\n        when a root task is used as the parent in spawn_and_wait_for_all. */\n    void __TBB_EXPORTED_METHOD destroy( task& t );\n#else /* !__TBB_DEPRECATED_TASK_INTERFACE */\n    //! Define recommended static form via import from base class.\n    using task_base::destroy;\n#endif /* !__TBB_DEPRECATED_TASK_INTERFACE */\n\n    //------------------------------------------------------------------------\n    // Recycling of tasks\n    //------------------------------------------------------------------------\n\n    //! Change this to be a continuation of its former self.\n    /** The caller must guarantee that the task's refcount does not become zero until\n        after the method execute() returns.  Typically, this is done by having\n        method execute() return a pointer to a child of the task.  If the guarantee\n        cannot be made, use method recycle_as_safe_continuation instead.\n\n        Because of the hazard, this method may be deprecated in the future. */\n    void recycle_as_continuation() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running?\" );\n        prefix().state = allocated;\n    }\n\n    //! Recommended to use, safe variant of recycle_as_continuation\n    /** For safety, it requires additional increment of ref_count.\n        With no descendants and ref_count of 1, it has the semantics of recycle_to_reexecute. */\n    void recycle_as_safe_continuation() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running?\" );\n        prefix().state = recycle;\n    }\n\n    //! Change this to be a child of new_parent.\n    void recycle_as_child_of( task& new_parent ) {\n        internal::task_prefix& p = prefix();\n        __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, \"execute not running, or already recycled\" );\n        __TBB_ASSERT( prefix().ref_count==0, \"no child tasks allowed when recycled as a child\" );\n        __TBB_ASSERT( p.parent==NULL, \"parent must be null\" );\n        __TBB_ASSERT( new_parent.prefix().state<=recycle, \"corrupt parent's state\" );\n        __TBB_ASSERT( new_parent.prefix().state!=freed, \"parent already freed\" );\n        p.state = allocated;\n        p.parent = &new_parent;\n#if __TBB_TASK_GROUP_CONTEXT\n        p.context = new_parent.prefix().context;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    }\n\n    //! Schedule this for reexecution after current execute() returns.\n    /** Made obsolete by recycle_as_safe_continuation; may become deprecated. */\n    void recycle_to_reexecute() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running, or already recycled\" );\n        __TBB_ASSERT( prefix().ref_count==0, \"no child tasks allowed when recycled for reexecution\" );\n        prefix().state = reexecute;\n    }\n\n#if __TBB_RECYCLE_TO_ENQUEUE\n    //! Schedule this to enqueue after descendant tasks complete.\n    /** Save enqueue/spawn difference, it has the semantics of recycle_as_safe_continuation. */\n    void recycle_to_enqueue() {\n        __TBB_ASSERT( prefix().state==executing, \"execute not running, or already recycled\" );\n        prefix().state = to_enqueue;\n    }\n#endif /* __TBB_RECYCLE_TO_ENQUEUE */\n\n    //------------------------------------------------------------------------\n    // Spawning and blocking\n    //------------------------------------------------------------------------\n\n    //! Set reference count\n    void set_ref_count( int count ) {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n        internal_set_ref_count(count);\n#else\n        prefix().ref_count = count;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n    }\n\n    //! Atomically increment reference count.\n    /** Has acquire semantics */\n    void increment_ref_count() {\n        __TBB_FetchAndIncrementWacquire( &prefix().ref_count );\n    }\n\n    //! Atomically adds to reference count and returns its new value.\n    /** Has release-acquire semantics */\n    int add_ref_count( int count ) {\n        internal::call_itt_notify( internal::releasing, &prefix().ref_count );\n        internal::reference_count k = count+__TBB_FetchAndAddW( &prefix().ref_count, count );\n        __TBB_ASSERT( k>=0, \"task's reference count underflowed\" );\n        if( k==0 )\n            internal::call_itt_notify( internal::acquired, &prefix().ref_count );\n        return int(k);\n    }\n\n    //! Atomically decrement reference count and returns its new value.\n    /** Has release semantics. */\n    int decrement_ref_count() {\n#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT\n        return int(internal_decrement_ref_count());\n#else\n        return int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;\n#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */\n    }\n\n    //! Define recommended static forms via import from base class.\n    using task_base::spawn;\n\n    //! Similar to spawn followed by wait_for_all, but more efficient.\n    void spawn_and_wait_for_all( task& child ) {\n        prefix().owner->wait_for_all( *this, &child );\n    }\n\n    //! Similar to spawn followed by wait_for_all, but more efficient.\n    void __TBB_EXPORTED_METHOD spawn_and_wait_for_all( task_list& list );\n\n    //! Spawn task allocated by allocate_root, wait for it to complete, and deallocate it.\n    static void spawn_root_and_wait( task& root ) {\n        root.prefix().owner->spawn_root_and_wait( root, root.prefix().next );\n    }\n\n    //! Spawn root tasks on list and wait for all of them to finish.\n    /** If there are more tasks than worker threads, the tasks are spawned in\n        order of front to back. */\n    static void spawn_root_and_wait( task_list& root_list );\n\n    //! Wait for reference count to become one, and set reference count to zero.\n    /** Works on tasks while waiting. */\n    void wait_for_all() {\n        prefix().owner->wait_for_all( *this, NULL );\n    }\n\n    //! Enqueue task for starvation-resistant execution.\n#if __TBB_TASK_PRIORITY\n    /** The task will be enqueued on the normal priority level disregarding the\n        priority of its task group.\n\n        The rationale of such semantics is that priority of an enqueued task is\n        statically fixed at the moment of its enqueuing, while task group priority\n        is dynamic. Thus automatic priority inheritance would be generally a subject\n        to the race, which may result in unexpected behavior.\n\n        Use enqueue() overload with explicit priority value and task::group_priority()\n        method to implement such priority inheritance when it is really necessary. **/\n#endif /* __TBB_TASK_PRIORITY */\n    static void enqueue( task& t ) {\n        t.prefix().owner->enqueue( t, NULL );\n    }\n\n#if __TBB_TASK_PRIORITY\n    //! Enqueue task for starvation-resistant execution on the specified priority level.\n    static void enqueue( task& t, priority_t p ) {\n        __TBB_ASSERT( p == priority_low || p == priority_normal || p == priority_high, \"Invalid priority level value\" );\n        t.prefix().owner->enqueue( t, (void*)p );\n    }\n#endif /* __TBB_TASK_PRIORITY */\n\n    //! The innermost task being executed or destroyed by the current thread at the moment.\n    static task& __TBB_EXPORTED_FUNC self();\n\n    //! task on whose behalf this task is working, or NULL if this is a root.\n    task* parent() const {return prefix().parent;}\n\n    //! sets parent task pointer to specified value\n    void set_parent(task* p) {\n#if __TBB_TASK_GROUP_CONTEXT\n        __TBB_ASSERT(!p || prefix().context == p->prefix().context, \"The tasks must be in the same context\");\n#endif\n        prefix().parent = p;\n    }\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! This method is deprecated and will be removed in the future.\n    /** Use method group() instead. **/\n    task_group_context* context() {return prefix().context;}\n\n    //! Pointer to the task group descriptor.\n    task_group_context* group () { return prefix().context; }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n    //! True if task was stolen from the task pool of another thread.\n    bool is_stolen_task() const {\n        return (prefix().extra_state & 0x80)!=0;\n    }\n\n    //------------------------------------------------------------------------\n    // Debugging\n    //------------------------------------------------------------------------\n\n    //! Current execution state\n    state_type state() const {return state_type(prefix().state);}\n\n    //! The internal reference count.\n    int ref_count() const {\n#if TBB_USE_ASSERT\n        internal::reference_count ref_count_ = prefix().ref_count;\n        __TBB_ASSERT( ref_count_==int(ref_count_), \"integer overflow error\");\n#endif\n        return int(prefix().ref_count);\n    }\n\n    //! Obsolete, and only retained for the sake of backward compatibility. Always returns true.\n    bool __TBB_EXPORTED_METHOD is_owned_by_current_thread() const;\n\n    //------------------------------------------------------------------------\n    // Affinity\n    //------------------------------------------------------------------------\n\n    //! An id as used for specifying affinity.\n    /** Guaranteed to be integral type.  Value of 0 means no affinity. */\n    typedef internal::affinity_id affinity_id;\n\n    //! Set affinity for this task.\n    void set_affinity( affinity_id id ) {prefix().affinity = id;}\n\n    //! Current affinity of this task\n    affinity_id affinity() const {return prefix().affinity;}\n\n    //! Invoked by scheduler to notify task that it ran on unexpected thread.\n    /** Invoked before method execute() runs, if task is stolen, or task has\n        affinity but will be executed on another thread.\n\n        The default action does nothing. */\n    virtual void __TBB_EXPORTED_METHOD note_affinity( affinity_id id );\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! Moves this task from its current group into another one.\n    /** Argument ctx specifies the new group.\n\n        The primary purpose of this method is to associate unique task group context\n        with a task allocated for subsequent enqueuing. In contrast to spawned tasks\n        enqueued ones normally outlive the scope where they were created. This makes\n        traditional usage model where task group context are allocated locally on\n        the stack inapplicable. Dynamic allocation of context objects is performance\n        inefficient. Method change_group() allows to make task group context object\n        a member of the task class, and then associate it with its containing task\n        object in the latter's constructor. **/\n    void __TBB_EXPORTED_METHOD change_group ( task_group_context& ctx );\n\n    //! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.\n    /** \\return false if cancellation has already been requested, true otherwise. **/\n    bool cancel_group_execution () { return prefix().context->cancel_group_execution(); }\n\n    //! Returns true if the context has received cancellation request.\n    bool is_cancelled () const { return prefix().context->is_group_execution_cancelled(); }\n#else\n    bool is_cancelled () const { return false; }\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#if __TBB_TASK_PRIORITY\n    //! Changes priority of the task group this task belongs to.\n    void set_group_priority ( priority_t p ) {  prefix().context->set_priority(p); }\n\n    //! Retrieves current priority of the task group this task belongs to.\n    priority_t group_priority () const { return prefix().context->priority(); }\n\n#endif /* __TBB_TASK_PRIORITY */\n\nprivate:\n    friend class interface5::internal::task_base;\n    friend class task_list;\n    friend class internal::scheduler;\n    friend class internal::allocate_root_proxy;\n#if __TBB_TASK_GROUP_CONTEXT\n    friend class internal::allocate_root_with_context_proxy;\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n    friend class internal::allocate_continuation_proxy;\n    friend class internal::allocate_child_proxy;\n    friend class internal::allocate_additional_child_of_proxy;\n\n    //! Get reference to corresponding task_prefix.\n    /** Version tag prevents loader on Linux from using the wrong symbol in debug builds. **/\n    internal::task_prefix& prefix( internal::version_tag* = NULL ) const {\n        return reinterpret_cast<internal::task_prefix*>(const_cast<task*>(this))[-1];\n    }\n}; // class task\n\n//! task that does nothing.  Useful for synchronization.\n/** @ingroup task_scheduling */\nclass empty_task: public task {\n    /*override*/ task* execute() {\n        return NULL;\n    }\n};\n\n//! @cond INTERNAL\nnamespace internal {\n    template<typename F>\n    class function_task : public task {\n#if __TBB_ALLOW_MUTABLE_FUNCTORS\n        F my_func;\n#else\n        const F my_func;\n#endif\n        /*override*/ task* execute() {\n            my_func();\n            return NULL;\n        }\n    public:\n        function_task( const F& f ) : my_func(f) {}\n    };\n} // namespace internal\n//! @endcond\n\n//! A list of children.\n/** Used for method task::spawn_children\n    @ingroup task_scheduling */\nclass task_list: internal::no_copy {\nprivate:\n    task* first;\n    task** next_ptr;\n    friend class task;\n    friend class interface5::internal::task_base;\npublic:\n    //! Construct empty list\n    task_list() : first(NULL), next_ptr(&first) {}\n\n    //! Destroys the list, but does not destroy the task objects.\n    ~task_list() {}\n\n    //! True if list if empty; false otherwise.\n    bool empty() const {return !first;}\n\n    //! Push task onto back of list.\n    void push_back( task& task ) {\n        task.prefix().next = NULL;\n        *next_ptr = &task;\n        next_ptr = &task.prefix().next;\n    }\n#if __TBB_TODO\n    // TODO: add this method and implement&document the local execution ordering. See more in generic_scheduler::local_spawn\n    //! Push task onto front of list (FIFO local execution, like individual spawning in the same order).\n    void push_front( task& task ) {\n        if( empty() ) {\n            push_back(task);\n        } else {\n            task.prefix().next = first;\n            first = &task;\n        }\n    }\n#endif\n    //! Pop the front task from the list.\n    task& pop_front() {\n        __TBB_ASSERT( !empty(), \"attempt to pop item from empty task_list\" );\n        task* result = first;\n        first = result->prefix().next;\n        if( !first ) next_ptr = &first;\n        return *result;\n    }\n\n    //! Clear the list\n    void clear() {\n        first=NULL;\n        next_ptr=&first;\n    }\n};\n\ninline void interface5::internal::task_base::spawn( task& t ) {\n    t.prefix().owner->spawn( t, t.prefix().next );\n}\n\ninline void interface5::internal::task_base::spawn( task_list& list ) {\n    if( task* t = list.first ) {\n        t->prefix().owner->spawn( *t, *list.next_ptr );\n        list.clear();\n    }\n}\n\ninline void task::spawn_root_and_wait( task_list& root_list ) {\n    if( task* t = root_list.first ) {\n        t->prefix().owner->spawn_root_and_wait( *t, *root_list.next_ptr );\n        root_list.clear();\n    }\n}\n\n} // namespace tbb\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_root_proxy& ) {\n    return &tbb::internal::allocate_root_proxy::allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_root_proxy& ) {\n    tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );\n}\n\n#if __TBB_TASK_GROUP_CONTEXT\ninline void *operator new( size_t bytes, const tbb::internal::allocate_root_with_context_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_root_with_context_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_continuation_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_continuation_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_child_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_child_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n\ninline void *operator new( size_t bytes, const tbb::internal::allocate_additional_child_of_proxy& p ) {\n    return &p.allocate(bytes);\n}\n\ninline void operator delete( void* task, const tbb::internal::allocate_additional_child_of_proxy& p ) {\n    p.free( *static_cast<tbb::task*>(task) );\n}\n\n#endif /* __TBB_task_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/task_arena.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_task_arena_H\n#define __TBB_task_arena_H\n\n#include \"task.h\"\n#include \"tbb_exception.h\"\n#if TBB_USE_THREADING_TOOLS\n#include \"atomic.h\" // for as_atomic\n#endif\n\n#if __TBB_TASK_ARENA\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n    //! Internal to library. Should not be used by clients.\n    /** @ingroup task_scheduling */\n    class arena;\n    class task_scheduler_observer_v3;\n} // namespace internal\n//! @endcond\n\nnamespace interface7 {\n//! @cond INTERNAL\nnamespace internal {\nusing namespace tbb::internal; //e.g. function_task from task.h\n\nclass delegate_base : no_assign {\npublic:\n    virtual void operator()() const = 0;\n    virtual ~delegate_base() {}\n};\n\ntemplate<typename F>\nclass delegated_function : public delegate_base {\n    F &my_func;\n    /*override*/ void operator()() const {\n        my_func();\n    }\npublic:\n    delegated_function ( F& f ) : my_func(f) {}\n};\n\nclass task_arena_base {\nprotected:\n    //! NULL if not currently initialized.\n    internal::arena* my_arena;\n\n#if __TBB_TASK_GROUP_CONTEXT\n    //! default context of the arena\n    task_group_context *my_context;\n#endif\n\n    //! Concurrency level for deferred initialization\n    int my_max_concurrency;\n\n    //! Reserved master slots\n    unsigned my_master_slots;\n\n    //! Special settings\n    intptr_t my_version_and_traits;\n\n    enum {\n        default_flags = 0\n#if __TBB_TASK_GROUP_CONTEXT\n        | (task_group_context::default_traits & task_group_context::exact_exception)  // 0 or 1 << 16\n        , exact_exception_flag = task_group_context::exact_exception // used to specify flag for context directly\n#endif\n    };\n\n    task_arena_base(int max_concurrency, unsigned reserved_for_masters)\n        : my_arena(0)\n#if __TBB_TASK_GROUP_CONTEXT\n        , my_context(0)\n#endif\n        , my_max_concurrency(max_concurrency)\n        , my_master_slots(reserved_for_masters)\n        , my_version_and_traits(default_flags)\n        {}\n\n    void __TBB_EXPORTED_METHOD internal_initialize();\n    void __TBB_EXPORTED_METHOD internal_terminate();\n    void __TBB_EXPORTED_METHOD internal_attach();\n    void __TBB_EXPORTED_METHOD internal_enqueue( task&, intptr_t ) const;\n    void __TBB_EXPORTED_METHOD internal_execute( delegate_base& ) const;\n    void __TBB_EXPORTED_METHOD internal_wait() const;\n    static int __TBB_EXPORTED_FUNC internal_current_slot();\npublic:\n    //! Typedef for number of threads that is automatic.\n    static const int automatic = -1; // any value < 1 means 'automatic'\n\n};\n\n} // namespace internal\n//! @endcond\n\n/** 1-to-1 proxy representation class of scheduler's arena\n * Constructors set up settings only, real construction is deferred till the first method invocation\n * Destructor only removes one of the references to the inner arena representation.\n * Final destruction happens when all the references (and the work) are gone.\n */\nclass task_arena : public internal::task_arena_base {\n    friend class tbb::internal::task_scheduler_observer_v3;\n    bool my_initialized;\n    void mark_initialized() {\n        __TBB_ASSERT( my_arena, \"task_arena initialization is incomplete\" );\n#if __TBB_TASK_GROUP_CONTEXT\n        __TBB_ASSERT( my_context, \"task_arena initialization is incomplete\" );\n#endif\n#if TBB_USE_THREADING_TOOLS\n        // Actual synchronization happens in internal_initialize & internal_attach.\n        // The race on setting my_initialized is benign, but should be hidden from Intel(R) Inspector\n        internal::as_atomic(my_initialized).fetch_and_store<release>(true);\n#else\n        my_initialized = true;\n#endif\n    }\n\npublic:\n    //! Creates task_arena with certain concurrency limits\n    /** Sets up settings only, real construction is deferred till the first method invocation\n     *  @arg max_concurrency specifies total number of slots in arena where threads work\n     *  @arg reserved_for_masters specifies number of slots to be used by master threads only.\n     *       Value of 1 is default and reflects behavior of implicit arenas.\n     **/\n    task_arena(int max_concurrency = automatic, unsigned reserved_for_masters = 1)\n        : task_arena_base(max_concurrency, reserved_for_masters)\n        , my_initialized(false)\n    {}\n\n    //! Copies settings from another task_arena\n    task_arena(const task_arena &s) // copy settings but not the reference or instance\n        : task_arena_base(s.my_max_concurrency, s.my_master_slots)\n        , my_initialized(false)\n    {}\n\n    //! Tag class used to indicate the \"attaching\" constructor\n    struct attach {};\n\n    //! Creates an instance of task_arena attached to the current arena of the thread\n    task_arena( attach )\n        : task_arena_base(automatic, 1) // use default settings if attach fails\n        , my_initialized(false)\n    {\n        internal_attach();\n        if( my_arena ) my_initialized = true;\n    }\n\n    //! Forces allocation of the resources for the task_arena as specified in constructor arguments\n    inline void initialize() {\n        if( !my_initialized ) {\n            internal_initialize();\n            mark_initialized();\n        }\n    }\n\n    //! Overrides concurrency level and forces initialization of internal representation\n    inline void initialize(int max_concurrency, unsigned reserved_for_masters = 1) {\n        // TODO: decide if this call must be thread-safe\n        __TBB_ASSERT( !my_arena, \"Impossible to modify settings of an already initialized task_arena\");\n        if( !my_initialized ) {\n            my_max_concurrency = max_concurrency;\n            my_master_slots = reserved_for_masters;\n            initialize();\n        }\n    }\n\n    //! Attaches this instance to the current arena of the thread\n    inline void initialize(attach) {\n        // TODO: decide if this call must be thread-safe\n        __TBB_ASSERT( !my_arena, \"Impossible to modify settings of an already initialized task_arena\");\n        if( !my_initialized ) {\n            internal_attach();\n            if( !my_arena ) internal_initialize();\n            mark_initialized();\n        }\n    }\n\n    //! Removes the reference to the internal arena representation.\n    //! Not thread safe wrt concurrent invocations of other methods.\n    inline void terminate() {\n        if( my_initialized ) {\n            internal_terminate();\n            my_initialized = false;\n        }\n    }\n\n    //! Removes the reference to the internal arena representation, and destroys the external object.\n    //! Not thread safe wrt concurrent invocations of other methods.\n    ~task_arena() {\n        terminate();\n    }\n\n    //! Returns true if the arena is active (initialized); false otherwise.\n    //! The name was chosen to match a task_scheduler_init method with the same semantics.\n    bool is_active() const { return my_initialized; }\n\n    //! Enqueues a task into the arena to process a functor, and immediately returns.\n    //! Does not require the calling thread to join the arena\n    template<typename F>\n    void enqueue( const F& f ) {\n        initialize();\n#if __TBB_TASK_GROUP_CONTEXT\n        internal_enqueue( *new( task::allocate_root(*my_context) ) internal::function_task<F>(f), 0 );\n#else\n        internal_enqueue( *new( task::allocate_root() ) internal::function_task<F>(f), 0 );\n#endif\n    }\n\n#if __TBB_TASK_PRIORITY\n    //! Enqueues a task with priority p into the arena to process a functor f, and immediately returns.\n    //! Does not require the calling thread to join the arena\n    template<typename F>\n    void enqueue( const F& f, priority_t p ) {\n        __TBB_ASSERT( p == priority_low || p == priority_normal || p == priority_high, \"Invalid priority level value\" );\n        initialize();\n#if __TBB_TASK_GROUP_CONTEXT\n        internal_enqueue( *new( task::allocate_root(*my_context) ) internal::function_task<F>(f), (intptr_t)p );\n#else\n        internal_enqueue( *new( task::allocate_root() ) internal::function_task<F>(f), (intptr_t)p );\n#endif\n    }\n#endif// __TBB_TASK_PRIORITY\n\n    //! Joins the arena and executes a functor, then returns\n    //! If not possible to join, wraps the functor into a task, enqueues it and waits for task completion\n    //! Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread\n    template<typename F>\n    void execute(F& f) {\n        initialize();\n        internal::delegated_function<F> d(f);\n        internal_execute( d );\n    }\n\n    //! Joins the arena and executes a functor, then returns\n    //! If not possible to join, wraps the functor into a task, enqueues it and waits for task completion\n    //! Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread\n    template<typename F>\n    void execute(const F& f) {\n        initialize();\n        internal::delegated_function<const F> d(f);\n        internal_execute( d );\n    }\n\n#if __TBB_EXTRA_DEBUG\n    //! Wait for all work in the arena to be completed\n    //! Even submitted by other application threads\n    //! Joins arena if/when possible (in the same way as execute())\n    void debug_wait_until_empty() {\n        initialize();\n        internal_wait();\n    }\n#endif //__TBB_EXTRA_DEBUG\n\n    //! Returns the index, aka slot number, of the calling thread in its current arena\n    inline static int current_thread_index() {\n        return internal_current_slot();\n    }\n};\n\n} // namespace interfaceX\n\nusing interface7::task_arena;\n\n} // namespace tbb\n\n#endif /* __TBB_TASK_ARENA */\n\n#endif /* __TBB_task_arena_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/task_group.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_task_group_H\n#define __TBB_task_group_H\n\n#include \"task.h\"\n#include \"tbb_exception.h\"\n\n#if __TBB_TASK_GROUP_CONTEXT\n\nnamespace tbb {\n\nnamespace internal {\n    template<typename F> class task_handle_task;\n}\n\nclass task_group;\nclass structured_task_group;\n\ntemplate<typename F>\nclass task_handle : internal::no_assign {\n    template<typename _F> friend class internal::task_handle_task;\n    friend class task_group;\n    friend class structured_task_group;\n\n    static const intptr_t scheduled = 0x1;\n\n    F my_func;\n    intptr_t my_state;\n\n    void mark_scheduled () {\n        // The check here is intentionally lax to avoid the impact of interlocked operation\n        if ( my_state & scheduled )\n            internal::throw_exception( internal::eid_invalid_multiple_scheduling );\n        my_state |= scheduled;\n    }\npublic:\n    task_handle( const F& f ) : my_func(f), my_state(0) {}\n\n    void operator() () const { my_func(); }\n};\n\nenum task_group_status {\n    not_complete,\n    complete,\n    canceled\n};\n\nnamespace internal {\n\ntemplate<typename F>\nclass task_handle_task : public task {\n    task_handle<F>& my_handle;\n    /*override*/ task* execute() {\n        my_handle();\n        return NULL;\n    }\npublic:\n    task_handle_task( task_handle<F>& h ) : my_handle(h) { h.mark_scheduled(); }\n};\n\nclass task_group_base : internal::no_copy {\nprotected:\n    empty_task* my_root;\n    task_group_context my_context;\n\n    task& owner () { return *my_root; }\n\n    template<typename F>\n    task_group_status internal_run_and_wait( F& f ) {\n        __TBB_TRY {\n            if ( !my_context.is_group_execution_cancelled() )\n                f();\n        } __TBB_CATCH( ... ) {\n            my_context.register_pending_exception();\n        }\n        return wait();\n    }\n\n    template<typename F, typename Task>\n    void internal_run( F& f ) {\n        owner().spawn( *new( owner().allocate_additional_child_of(*my_root) ) Task(f) );\n    }\n\npublic:\n    task_group_base( uintptr_t traits = 0 )\n        : my_context(task_group_context::bound, task_group_context::default_traits | traits)\n    {\n        my_root = new( task::allocate_root(my_context) ) empty_task;\n        my_root->set_ref_count(1);\n    }\n\n    ~task_group_base() __TBB_NOEXCEPT(false) {\n        if( my_root->ref_count() > 1 ) {\n            bool stack_unwinding_in_progress = std::uncaught_exception();\n            // Always attempt to do proper cleanup to avoid inevitable memory corruption\n            // in case of missing wait (for the sake of better testability & debuggability)\n            if ( !is_canceling() )\n                cancel();\n            __TBB_TRY {\n                my_root->wait_for_all();\n            } __TBB_CATCH (...) {\n                task::destroy(*my_root);\n                __TBB_RETHROW();\n            }\n            task::destroy(*my_root);\n            if ( !stack_unwinding_in_progress )\n                internal::throw_exception( internal::eid_missing_wait );\n        }\n        else {\n            task::destroy(*my_root);\n        }\n    }\n\n    template<typename F>\n    void run( task_handle<F>& h ) {\n        internal_run< task_handle<F>, internal::task_handle_task<F> >( h );\n    }\n\n    task_group_status wait() {\n        __TBB_TRY {\n            my_root->wait_for_all();\n        } __TBB_CATCH( ... ) {\n            my_context.reset();\n            __TBB_RETHROW();\n        }\n        if ( my_context.is_group_execution_cancelled() ) {\n            // TODO: the reset method is not thread-safe. Ensure the correct behavior.\n            my_context.reset();\n            return canceled;\n        }\n        return complete;\n    }\n\n    bool is_canceling() {\n        return my_context.is_group_execution_cancelled();\n    }\n\n    void cancel() {\n        my_context.cancel_group_execution();\n    }\n}; // class task_group_base\n\n} // namespace internal\n\nclass task_group : public internal::task_group_base {\npublic:\n    task_group () : task_group_base( task_group_context::concurrent_wait ) {}\n\n#if __SUNPRO_CC\n    template<typename F>\n    void run( task_handle<F>& h ) {\n        internal_run< task_handle<F>, internal::task_handle_task<F> >( h );\n    }\n#else\n    using task_group_base::run;\n#endif\n\n    template<typename F>\n    void run( const F& f ) {\n        internal_run< const F, internal::function_task<F> >( f );\n    }\n\n    template<typename F>\n    task_group_status run_and_wait( const F& f ) {\n        return internal_run_and_wait<const F>( f );\n    }\n\n    template<typename F>\n    task_group_status run_and_wait( task_handle<F>& h ) {\n      h.mark_scheduled();\n      return internal_run_and_wait< task_handle<F> >( h );\n    }\n}; // class task_group\n\nclass structured_task_group : public internal::task_group_base {\npublic:\n    template<typename F>\n    task_group_status run_and_wait ( task_handle<F>& h ) {\n        h.mark_scheduled();\n        return internal_run_and_wait< task_handle<F> >( h );\n    }\n\n    task_group_status wait() {\n        task_group_status res = task_group_base::wait();\n        my_root->set_ref_count(1);\n        return res;\n    }\n}; // class structured_task_group\n\ninline\nbool is_current_task_group_canceling() {\n    return task::self().is_cancelled();\n}\n\ntemplate<class F>\ntask_handle<F> make_task( const F& f ) {\n    return task_handle<F>( f );\n}\n\n} // namespace tbb\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#endif /* __TBB_task_group_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/task_scheduler_init.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_task_scheduler_init_H\n#define __TBB_task_scheduler_init_H\n\n#include \"tbb_stddef.h\"\n#include \"limits.h\"\n\nnamespace tbb {\n\ntypedef std::size_t stack_size_type;\n\n//! @cond INTERNAL\nnamespace internal {\n    //! Internal to library. Should not be used by clients.\n    /** @ingroup task_scheduling */\n    class scheduler;\n} // namespace internal\n//! @endcond\n\n//! Class delimiting the scope of task scheduler activity.\n/** A thread can construct a task_scheduler_init object and keep it alive\n    while it uses TBB's tasking subsystem (including parallel algorithms).\n\n    This class allows to customize properties of the TBB task pool to some extent.\n    For example it can limit concurrency level of parallel work initiated by the\n    given thread. It also can be used to specify stack size of the TBB worker threads,\n    though this setting is not effective if the thread pool has already been created.\n\n    If a parallel construct is used without task_scheduler_init object previously\n    created, the scheduler will be initialized automatically with default settings,\n    and will persist until this thread exits. Default concurrency level is defined\n    as described in task_scheduler_init::initialize().\n    @ingroup task_scheduling */\nclass task_scheduler_init: internal::no_copy {\n    enum ExceptionPropagationMode {\n        propagation_mode_exact = 1u,\n        propagation_mode_captured = 2u,\n        propagation_mode_mask = propagation_mode_exact | propagation_mode_captured\n    };\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n    enum {\n        wait_workers_in_terminate_flag = 128u\n    };\n#endif\n\n    /** NULL if not currently initialized. */\n    internal::scheduler* my_scheduler;\npublic:\n\n    //! Typedef for number of threads that is automatic.\n    static const int automatic = -1;\n\n    //! Argument to initialize() or constructor that causes initialization to be deferred.\n    static const int deferred = -2;\n\n    //! Ensure that scheduler exists for this thread\n    /** A value of -1 lets TBB decide on the number of threads, which is usually\n        maximal hardware concurrency for this process, that is the number of logical\n        CPUs on the machine (possibly limited by the processor affinity mask of this\n        process (Windows) or of this thread (Linux, FreeBSD). It is preferable option\n        for production code because it helps to avoid nasty surprises when several\n        TBB based components run side-by-side or in a nested fashion inside the same\n        process.\n\n        The number_of_threads is ignored if any other task_scheduler_inits\n        currently exist.  A thread may construct multiple task_scheduler_inits.\n        Doing so does no harm because the underlying scheduler is reference counted. */\n    void __TBB_EXPORTED_METHOD initialize( int number_of_threads=automatic );\n\n    //! The overloaded method with stack size parameter\n    /** Overloading is necessary to preserve ABI compatibility */\n    void __TBB_EXPORTED_METHOD initialize( int number_of_threads, stack_size_type thread_stack_size );\n\n    //! Inverse of method initialize.\n    void __TBB_EXPORTED_METHOD terminate();\n\n    //! Shorthand for default constructor followed by call to initialize(number_of_threads).\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n    task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0, bool wait_workers_in_terminate = false ) : my_scheduler(NULL)\n#else\n    task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)\n#endif\n    {\n        // Two lowest order bits of the stack size argument may be taken to communicate\n        // default exception propagation mode of the client to be used when the\n        // client manually creates tasks in the master thread and does not use\n        // explicit task group context object. This is necessary because newer\n        // TBB binaries with exact propagation enabled by default may be used\n        // by older clients that expect tbb::captured_exception wrapper.\n        // All zeros mean old client - no preference.\n        __TBB_ASSERT( !(thread_stack_size & propagation_mode_mask), \"Requested stack size is not aligned\" );\n#if TBB_USE_EXCEPTIONS\n        thread_stack_size |= TBB_USE_CAPTURED_EXCEPTION ? propagation_mode_captured : propagation_mode_exact;\n#endif /* TBB_USE_EXCEPTIONS */\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n        if (wait_workers_in_terminate)\n            my_scheduler = (internal::scheduler*)wait_workers_in_terminate_flag;\n#endif\n        initialize( number_of_threads, thread_stack_size );\n    }\n\n    //! Destroy scheduler for this thread if thread has no other live task_scheduler_inits.\n    ~task_scheduler_init() {\n        if( my_scheduler )\n            terminate();\n        internal::poison_pointer( my_scheduler );\n    }\n    //! Returns the number of threads TBB scheduler would create if initialized by default.\n    /** Result returned by this method does not depend on whether the scheduler\n        has already been initialized.\n\n        Because tbb 2.0 does not support blocking tasks yet, you may use this method\n        to boost the number of threads in the tbb's internal pool, if your tasks are\n        doing I/O operations. The optimal number of additional threads depends on how\n        much time your tasks spend in the blocked state.\n\n        Before TBB 3.0 U4 this method returned the number of logical CPU in the\n        system. Currently on Windows, Linux and FreeBSD it returns the number of\n        logical CPUs available to the current process in accordance with its affinity\n        mask.\n\n        NOTE: The return value of this method never changes after its first invocation.\n        This means that changes in the process affinity mask that took place after\n        this method was first invoked will not affect the number of worker threads\n        in the TBB worker threads pool. */\n    static int __TBB_EXPORTED_FUNC default_num_threads ();\n\n    //! Returns true if scheduler is active (initialized); false otherwise\n    bool is_active() const { return my_scheduler != NULL; }\n};\n\n} // namespace tbb\n\n#endif /* __TBB_task_scheduler_init_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/task_scheduler_observer.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_task_scheduler_observer_H\n#define __TBB_task_scheduler_observer_H\n\n#include \"atomic.h\"\n#if __TBB_TASK_ARENA\n#include \"task_arena.h\"\n#endif //__TBB_TASK_ARENA\n\n#if __TBB_SCHEDULER_OBSERVER\n\nnamespace tbb {\nnamespace interface6 {\nclass task_scheduler_observer;\n}\nnamespace internal {\n\nclass observer_proxy;\nclass observer_list;\n\nclass task_scheduler_observer_v3 {\n    friend class observer_proxy;\n    friend class observer_list;\n    friend class interface6::task_scheduler_observer;\n\n    //! Pointer to the proxy holding this observer.\n    /** Observers are proxied by the scheduler to maintain persistent lists of them. **/\n    observer_proxy* my_proxy;\n\n    //! Counter preventing the observer from being destroyed while in use by the scheduler.\n    /** Valid only when observation is on. **/\n    atomic<intptr_t> my_busy_count;\n\npublic:\n    //! Enable or disable observation\n    /** For local observers the method can be used only when the current thread\n        has the task scheduler initialized or is attached to an arena.\n\n        Repeated calls with the same state are no-ops. **/\n    void __TBB_EXPORTED_METHOD observe( bool state=true );\n\n    //! Returns true if observation is enabled, false otherwise.\n    bool is_observing() const {return my_proxy!=NULL;}\n\n    //! Construct observer with observation disabled.\n    task_scheduler_observer_v3() : my_proxy(NULL) { my_busy_count.store<relaxed>(0); }\n\n    //! Entry notification\n    /** Invoked from inside observe(true) call and whenever a worker enters the arena\n        this observer is associated with. If a thread is already in the arena when\n        the observer is activated, the entry notification is called before it\n        executes the first stolen task.\n\n        Obsolete semantics. For global observers it is called by a thread before\n        the first steal since observation became enabled. **/\n    virtual void on_scheduler_entry( bool /*is_worker*/ ) {}\n\n    //! Exit notification\n    /** Invoked from inside observe(false) call and whenever a worker leaves the\n        arena this observer is associated with.\n\n        Obsolete semantics. For global observers it is called by a thread before\n        the first steal since observation became enabled. **/\n    virtual void on_scheduler_exit( bool /*is_worker*/ ) {}\n\n    //! Destructor automatically switches observation off if it is enabled.\n    virtual ~task_scheduler_observer_v3() { if(my_proxy) observe(false);}\n};\n\n} // namespace internal\n\n#if __TBB_ARENA_OBSERVER\nnamespace interface6 {\nclass task_scheduler_observer : public internal::task_scheduler_observer_v3 {\n    friend class internal::task_scheduler_observer_v3;\n    friend class internal::observer_proxy;\n    friend class internal::observer_list;\n\n    /** Negative numbers with the largest absolute value to minimize probability\n        of coincidence in case of a bug in busy count usage. **/\n    // TODO: take more high bits for version number\n    static const intptr_t v6_trait = (intptr_t)((~(uintptr_t)0 >> 1) + 1);\n\n    //! contains task_arena pointer or tag indicating local or global semantics of the observer\n    intptr_t my_context_tag;\n    enum { global_tag = 0, implicit_tag = 1 };\n\npublic:\n    //! Construct local or global observer in inactive state (observation disabled).\n    /** For a local observer entry/exit notifications are invoked whenever a worker\n        thread joins/leaves the arena of the observer's owner thread. If a thread is\n        already in the arena when the observer is activated, the entry notification is\n        called before it executes the first stolen task. **/\n    /** TODO: Obsolete.\n        Global observer semantics is obsolete as it violates master thread isolation\n        guarantees and is not composable. Thus the current default behavior of the\n        constructor is obsolete too and will be changed in one of the future versions\n        of the library. **/\n    task_scheduler_observer( bool local = false ) {\n        my_context_tag = local? implicit_tag : global_tag;\n    }\n\n#if __TBB_TASK_ARENA\n    //! Construct local observer for a given arena in inactive state (observation disabled).\n    /** entry/exit notifications are invoked whenever a thread joins/leaves arena.\n        If a thread is already in the arena when the observer is activated, the entry notification\n        is called before it executes the first stolen task. **/\n    task_scheduler_observer( task_arena & a) {\n        my_context_tag = (intptr_t)&a;\n    }\n#endif //__TBB_TASK_ARENA\n\n    /** Destructor protects instance of the observer from concurrent notification.\n       It is recommended to disable observation before destructor of a derived class starts,\n       otherwise it can lead to concurrent notification callback on partly destroyed object **/\n    virtual ~task_scheduler_observer() { if(my_proxy) observe(false); }\n\n    //! Enable or disable observation\n    /** Warning: concurrent invocations of this method are not safe.\n        Repeated calls with the same state are no-ops. **/\n    void observe( bool state=true ) {\n        if( state && !my_proxy ) {\n            __TBB_ASSERT( !my_busy_count, \"Inconsistent state of task_scheduler_observer instance\");\n            my_busy_count.store<relaxed>(v6_trait);\n        }\n        internal::task_scheduler_observer_v3::observe(state);\n    }\n\n    //! Return commands for may_sleep()\n    enum { keep_awake = false, allow_sleep = true };\n\n    //! The callback can be invoked by a worker thread before it goes to sleep.\n    /** If it returns false ('keep_awake'), the thread will keep spinning and looking for work.\n        It will not be called for master threads. **/\n    virtual bool may_sleep() { return allow_sleep; }\n};\n\n} //namespace interface6\nusing interface6::task_scheduler_observer;\n#else /*__TBB_ARENA_OBSERVER*/\ntypedef tbb::internal::task_scheduler_observer_v3 task_scheduler_observer;\n#endif /*__TBB_ARENA_OBSERVER*/\n\n} // namespace tbb\n\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n#endif /* __TBB_task_scheduler_observer_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tbb.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_tbb_H\n#define __TBB_tbb_H\n\n/**\n    This header bulk-includes declarations or definitions of all the functionality\n    provided by TBB (save for malloc dependent headers).\n\n    If you use only a few TBB constructs, consider including specific headers only.\n    Any header listed below can be included independently of others.\n**/\n\n#if TBB_PREVIEW_AGGREGATOR\n#include \"aggregator.h\"\n#endif\n#include \"aligned_space.h\"\n#include \"atomic.h\"\n#include \"blocked_range.h\"\n#include \"blocked_range2d.h\"\n#include \"blocked_range3d.h\"\n#include \"cache_aligned_allocator.h\"\n#include \"combinable.h\"\n#include \"concurrent_hash_map.h\"\n#if TBB_PREVIEW_CONCURRENT_LRU_CACHE\n#include \"concurrent_lru_cache.h\"\n#endif\n#include \"concurrent_priority_queue.h\"\n#include \"concurrent_queue.h\"\n#include \"concurrent_unordered_map.h\"\n#include \"concurrent_unordered_set.h\"\n#include \"concurrent_vector.h\"\n#include \"critical_section.h\"\n#include \"enumerable_thread_specific.h\"\n#include \"flow_graph.h\"\n#if TBB_PREVIEW_GLOBAL_CONTROL\n#include \"global_control.h\"\n#endif\n#include \"mutex.h\"\n#include \"null_mutex.h\"\n#include \"null_rw_mutex.h\"\n#include \"parallel_do.h\"\n#include \"parallel_for.h\"\n#include \"parallel_for_each.h\"\n#include \"parallel_invoke.h\"\n#include \"parallel_reduce.h\"\n#include \"parallel_scan.h\"\n#include \"parallel_sort.h\"\n#include \"partitioner.h\"\n#include \"pipeline.h\"\n#include \"queuing_mutex.h\"\n#include \"queuing_rw_mutex.h\"\n#include \"reader_writer_lock.h\"\n#include \"recursive_mutex.h\"\n#include \"spin_mutex.h\"\n#include \"spin_rw_mutex.h\"\n#include \"task.h\"\n#include \"task_arena.h\"\n#include \"task_group.h\"\n#include \"task_scheduler_init.h\"\n#include \"task_scheduler_observer.h\"\n#include \"tbb_allocator.h\"\n#include \"tbb_exception.h\"\n#include \"tbb_thread.h\"\n#include \"tick_count.h\"\n\n#endif /* __TBB_tbb_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tbb_allocator.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_tbb_allocator_H\n#define __TBB_tbb_allocator_H\n\n#include \"tbb_stddef.h\"\n#include <new>\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n #include <utility> // std::forward\n#endif\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <cstring>\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\nnamespace tbb {\n\n//! @cond INTERNAL\nnamespace internal {\n\n    //! Deallocates memory using FreeHandler\n    /** The function uses scalable_free if scalable allocator is available and free if not*/\n    void __TBB_EXPORTED_FUNC deallocate_via_handler_v3( void *p );\n\n    //! Allocates memory using MallocHandler\n    /** The function uses scalable_malloc if scalable allocator is available and malloc if not*/\n    void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n );\n\n    //! Returns true if standard malloc/free are used to work with memory.\n    bool __TBB_EXPORTED_FUNC is_malloc_used_v3();\n}\n//! @endcond\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    // Workaround for erroneous \"unreferenced parameter\" warning in method destroy.\n    #pragma warning (push)\n    #pragma warning (disable: 4100)\n#endif\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The class selects the best memory allocation mechanism available\n    from scalable_malloc and standard malloc.\n    The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate<typename T>\nclass tbb_allocator {\npublic:\n    typedef typename internal::allocator_type<T>::value_type value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> struct rebind {\n        typedef tbb_allocator<U> other;\n    };\n\n    //! Specifies current allocator\n    enum malloc_type {\n        scalable,\n        standard\n    };\n\n    tbb_allocator() throw() {}\n    tbb_allocator( const tbb_allocator& ) throw() {}\n    template<typename U> tbb_allocator(const tbb_allocator<U>&) throw() {}\n\n    pointer address(reference x) const {return &x;}\n    const_pointer address(const_reference x) const {return &x;}\n\n    //! Allocate space for n objects.\n    pointer allocate( size_type n, const void* /*hint*/ = 0) {\n        return pointer(internal::allocate_via_handler_v3( n * sizeof(value_type) ));\n    }\n\n    //! Free previously allocated block of memory.\n    void deallocate( pointer p, size_type ) {\n        internal::deallocate_via_handler_v3(p);\n    }\n\n    //! Largest value for which method allocate might succeed.\n    size_type max_size() const throw() {\n        size_type max = static_cast<size_type>(-1) / sizeof (value_type);\n        return (max > 0 ? max : 1);\n    }\n\n    //! Copy-construct value at location pointed to by p.\n#if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n    template<typename U, typename... Args>\n    void construct(U *p, Args&&... args)\n        { ::new((void *)p) U(std::forward<Args>(args)...); }\n#else // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n    void construct( pointer p, value_type&& value ) {::new((void*)(p)) value_type(std::move(value));}\n#endif\n    void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}\n#endif // __TBB_ALLOCATOR_CONSTRUCT_VARIADIC\n\n    //! Destroy value at location pointed to by p.\n    void destroy( pointer p ) {p->~value_type();}\n\n    //! Returns current allocator\n    static malloc_type allocator_type() {\n        return internal::is_malloc_used_v3() ? standard : scalable;\n    }\n};\n\n#if _MSC_VER && !defined(__INTEL_COMPILER)\n    #pragma warning (pop)\n#endif // warning 4100 is back\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<>\nclass tbb_allocator<void> {\npublic:\n    typedef void* pointer;\n    typedef const void* const_pointer;\n    typedef void value_type;\n    template<typename U> struct rebind {\n        typedef tbb_allocator<U> other;\n    };\n};\n\ntemplate<typename T, typename U>\ninline bool operator==( const tbb_allocator<T>&, const tbb_allocator<U>& ) {return true;}\n\ntemplate<typename T, typename U>\ninline bool operator!=( const tbb_allocator<T>&, const tbb_allocator<U>& ) {return false;}\n\n//! Meets \"allocator\" requirements of ISO C++ Standard, Section 20.1.5\n/** The class is an adapter over an actual allocator that fills the allocation\n    using memset function with template argument C as the value.\n    The members are ordered the same way they are in section 20.4.1\n    of the ISO C++ standard.\n    @ingroup memory_allocation */\ntemplate <typename T, template<typename X> class Allocator = tbb_allocator>\nclass zero_allocator : public Allocator<T>\n{\npublic:\n    typedef Allocator<T> base_allocator_type;\n    typedef typename base_allocator_type::value_type value_type;\n    typedef typename base_allocator_type::pointer pointer;\n    typedef typename base_allocator_type::const_pointer const_pointer;\n    typedef typename base_allocator_type::reference reference;\n    typedef typename base_allocator_type::const_reference const_reference;\n    typedef typename base_allocator_type::size_type size_type;\n    typedef typename base_allocator_type::difference_type difference_type;\n    template<typename U> struct rebind {\n        typedef zero_allocator<U, Allocator> other;\n    };\n\n    zero_allocator() throw() { }\n    zero_allocator(const zero_allocator &a) throw() : base_allocator_type( a ) { }\n    template<typename U>\n    zero_allocator(const zero_allocator<U> &a) throw() : base_allocator_type( Allocator<U>( a ) ) { }\n\n    pointer allocate(const size_type n, const void *hint = 0 ) {\n        pointer ptr = base_allocator_type::allocate( n, hint );\n        std::memset( ptr, 0, n * sizeof(value_type) );\n        return ptr;\n    }\n};\n\n//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1\n/** @ingroup memory_allocation */\ntemplate<template<typename T> class Allocator>\nclass zero_allocator<void, Allocator> : public Allocator<void> {\npublic:\n    typedef Allocator<void> base_allocator_type;\n    typedef typename base_allocator_type::value_type value_type;\n    typedef typename base_allocator_type::pointer pointer;\n    typedef typename base_allocator_type::const_pointer const_pointer;\n    template<typename U> struct rebind {\n        typedef zero_allocator<U, Allocator> other;\n    };\n};\n\ntemplate<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>\ninline bool operator==( const zero_allocator<T1,B1> &a, const zero_allocator<T2,B2> &b) {\n    return static_cast< B1<T1> >(a) == static_cast< B2<T2> >(b);\n}\ntemplate<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>\ninline bool operator!=( const zero_allocator<T1,B1> &a, const zero_allocator<T2,B2> &b) {\n    return static_cast< B1<T1> >(a) != static_cast< B2<T2> >(b);\n}\n\n} // namespace tbb\n\n#endif /* __TBB_tbb_allocator_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tbb_config.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_tbb_config_H\n#define __TBB_tbb_config_H\n\n/** This header is supposed to contain macro definitions and C style comments only.\n    The macros defined here are intended to control such aspects of TBB build as\n    - presence of compiler features\n    - compilation modes\n    - feature sets\n    - known compiler/platform issues\n**/\n\n/* This macro marks incomplete code or comments describing ideas which are considered for the future.\n * See also for plain comment with TODO and FIXME marks for small improvement opportunities.\n */\n#define __TBB_TODO 0\n\n/*Check which standard library we use on OS X.*/\n/*__TBB_SYMBOL is defined only while processing exported symbols list where C++ is not allowed.*/\n#if !defined(__TBB_SYMBOL) && __APPLE__\n    #include <cstddef>\n#endif\n\n// note that when ICC is in use __TBB_GCC_VERSION might not closely match GCC version on the machine\n#define __TBB_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)\n\n#if __clang__\n    /**according to clang documentation version can be vendor specific **/\n    #define __TBB_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)\n#endif\n\n/** Target OS is either iOS* or iOS* simulator **/\n#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__\n    #define __TBB_IOS 1\n#endif\n\n/** Preprocessor symbols to determine HW architecture **/\n\n#if _WIN32||_WIN64\n#   if defined(_M_X64)||defined(__x86_64__)  // the latter for MinGW support\n#       define __TBB_x86_64 1\n#   elif defined(_M_IA64)\n#       define __TBB_ipf 1\n#   elif defined(_M_IX86)||defined(__i386__) // the latter for MinGW support\n#       define __TBB_x86_32 1\n#   else\n#       define __TBB_generic_arch 1\n#   endif\n#else /* Assume generic Unix */\n#   if !__linux__ && !__APPLE__\n#       define __TBB_generic_os 1\n#   endif\n#   if __TBB_IOS\n#       define __TBB_generic_arch 1\n#   elif __x86_64__\n#       define __TBB_x86_64 1\n#   elif __ia64__\n#       define __TBB_ipf 1\n#   elif __i386__||__i386  // __i386 is for Sun OS\n#       define __TBB_x86_32 1\n#   else\n#       define __TBB_generic_arch 1\n#   endif\n#endif\n\n#if __MIC__ || __MIC2__\n#define __TBB_DEFINE_MIC 1\n#endif\n\n#define __TBB_TSX_AVAILABLE  (__TBB_x86_32 || __TBB_x86_64) && !__TBB_DEFINE_MIC\n\n/** Presence of compiler features **/\n\n#if __INTEL_COMPILER == 9999 && __INTEL_COMPILER_BUILD_DATE == 20110811\n/* Intel(R) Composer XE 2011 Update 6 incorrectly sets __INTEL_COMPILER. Fix it. */\n    #undef __INTEL_COMPILER\n    #define __INTEL_COMPILER 1210\n#endif\n\n#if __TBB_GCC_VERSION >= 40400 && !defined(__INTEL_COMPILER)\n    /** warning suppression pragmas available in GCC since 4.4 **/\n    #define __TBB_GCC_WARNING_SUPPRESSION_PRESENT 1\n#endif\n\n/* Select particular features of C++11 based on compiler version.\n   ICC 12.1 (Linux), GCC 4.3 and higher, clang 2.9 and higher\n   set __GXX_EXPERIMENTAL_CXX0X__ in c++11 mode.\n\n   Compilers that mimics other compilers (ICC, clang) must be processed before\n   compilers they mimic (GCC, MSVC).\n\n   TODO: The following conditions should be extended when new compilers/runtimes\n   support added.\n */\n\n#if __INTEL_COMPILER\n    /** C++11 mode detection macros for Intel C++ compiler (enabled by -std=c++0x option):\n          __INTEL_CXX11_MODE__ for version >=13.0\n          __STDC_HOSTED__ for version >=12.0 on Windows,\n          __GXX_EXPERIMENTAL_CXX0X__ for version >=12.0 on Linux and OS X. **/\n    //  On Windows, C++11 features supported by Visual Studio 2010 and higher are enabled by default\n    #ifndef __INTEL_CXX11_MODE__\n        #define __INTEL_CXX11_MODE__ ((_MSC_VER && __STDC_HOSTED__) || __GXX_EXPERIMENTAL_CXX0X__)\n        // TODO: check if more conditions can be simplified with the above macro\n    #endif\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    (__INTEL_CXX11_MODE__ && __VARIADIC_TEMPLATES)\n    // Both r-value reference support in compiler and std::move/std::forward\n    // presence in C++ standard library is checked.\n    #define __TBB_CPP11_RVALUE_REF_PRESENT            ((__GXX_EXPERIMENTAL_CXX0X__ && (__TBB_GCC_VERSION >= 40300 || _LIBCPP_VERSION) || _MSC_VER >= 1600) && __INTEL_COMPILER >= 1200)\n    #if  _MSC_VER >= 1600\n        #define __TBB_EXCEPTION_PTR_PRESENT           ( __INTEL_COMPILER > 1300                                                \\\n                                                      /*ICC 12.1 Upd 10 and 13 beta Upd 2 fixed exception_ptr linking  issue*/ \\\n                                                      || (__INTEL_COMPILER == 1300 && __INTEL_COMPILER_BUILD_DATE >= 20120530) \\\n                                                      || (__INTEL_COMPILER == 1210 && __INTEL_COMPILER_BUILD_DATE >= 20120410) )\n    /** libstdc++ that comes with GCC 4.6 use C++11 features not supported by ICC 12.1.\n     *  Because of that ICC 12.1 does not support C++11 mode with with gcc 4.6 (or higher),\n     *  and therefore does not  define __GXX_EXPERIMENTAL_CXX0X__ macro **/\n    #elif __TBB_GCC_VERSION >= 40404 && __TBB_GCC_VERSION < 40600\n        #define __TBB_EXCEPTION_PTR_PRESENT           (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1200)\n    #elif __TBB_GCC_VERSION >= 40600\n        #define __TBB_EXCEPTION_PTR_PRESENT           (__GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1300)\n    #elif _LIBCPP_VERSION\n        #define __TBB_EXCEPTION_PTR_PRESENT           __GXX_EXPERIMENTAL_CXX0X__\n    #else\n        #define __TBB_EXCEPTION_PTR_PRESENT           0\n    #endif\n    #define __TBB_STATIC_ASSERT_PRESENT               (__INTEL_CXX11_MODE__ || _MSC_VER >= 1600)\n    #define __TBB_CPP11_TUPLE_PRESENT                 (_MSC_VER >= 1600 || (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300))\n    #if (__clang__ && __INTEL_COMPILER > 1400)\n        /* Older versions of Intel Compiler do not have __has_include */\n        #if (__has_feature(__cxx_generalized_initializers__) && __has_include(<initializer_list>))\n            #define __TBB_INITIALIZER_LISTS_PRESENT   1\n        #endif\n    #else\n        #define __TBB_INITIALIZER_LISTS_PRESENT       __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1800 || __TBB_GCC_VERSION >= 40400 || _LIBCPP_VERSION)\n    #endif\n\n    #define __TBB_CONSTEXPR_PRESENT                   __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200\n    /** ICC seems to disable support of noexcept event in c++11 when compiling in compatibility mode for gcc <4.6 **/\n    #define __TBB_NOEXCEPT_PRESENT                    __INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1300 && (__TBB_GCC_VERSION >= 40600 || _LIBCPP_VERSION || _MSC_VER)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         (_MSC_VER >= 1700 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1310 && (__TBB_GCC_VERSION >= 40600 || _LIBCPP_VERSION))\n    #define __TBB_CPP11_AUTO_PRESENT                  (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_CPP11_DECLTYPE_PRESENT              (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && __INTEL_COMPILER >= 1210)\n    #define __TBB_CPP11_LAMBDAS_PRESENT               (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200)\n#elif __clang__\n//TODO: these options need to be rechecked\n/** on OS X* the only way to get C++11 is to use clang. For library features (e.g. exception_ptr) libc++ is also\n *  required. So there is no need to check GCC version for clang**/\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    (__has_feature(__cxx_variadic_templates__))\n    #define __TBB_CPP11_RVALUE_REF_PRESENT            (__has_feature(__cxx_rvalue_references__) && (__TBB_GCC_VERSION >= 40300 || _LIBCPP_VERSION))\n/** TODO: extend exception_ptr related conditions to cover libstdc++ **/\n    #define __TBB_EXCEPTION_PTR_PRESENT               (__cplusplus >= 201103L && _LIBCPP_VERSION)\n    #define __TBB_STATIC_ASSERT_PRESENT               __has_feature(__cxx_static_assert__)\n    /**Clang (preprocessor) has problems with dealing with expression having __has_include in #ifs\n     * used inside C++ code. (At least version that comes with OS X 10.8 : Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)) **/\n    #if (__GXX_EXPERIMENTAL_CXX0X__ && __has_include(<tuple>))\n        #define __TBB_CPP11_TUPLE_PRESENT             1\n    #endif\n    #if (__has_feature(__cxx_generalized_initializers__) && __has_include(<initializer_list>))\n        #define __TBB_INITIALIZER_LISTS_PRESENT       1\n    #endif\n    #define __TBB_CONSTEXPR_PRESENT                   __has_feature(__cxx_constexpr__)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  (__has_feature(__cxx_defaulted_functions__) && __has_feature(__cxx_deleted_functions__))\n    /**For some unknown reason  __has_feature(__cxx_noexcept) does not yield true for all cases. Compiler bug ? **/\n    #define __TBB_NOEXCEPT_PRESENT                    (__cplusplus >= 201103L)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         (__has_feature(__cxx_range_for__) && _LIBCPP_VERSION)\n    #define __TBB_CPP11_AUTO_PRESENT                  __has_feature(__cxx_auto_type__)\n    #define __TBB_CPP11_DECLTYPE_PRESENT              __has_feature(__cxx_decltype__)\n    #define __TBB_CPP11_LAMBDAS_PRESENT               __has_feature(cxx_lambdas)\n#elif __GNUC__\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    __GXX_EXPERIMENTAL_CXX0X__\n    #define __TBB_CPP11_RVALUE_REF_PRESENT            __GXX_EXPERIMENTAL_CXX0X__\n    /** __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 here is a substitution for _GLIBCXX_ATOMIC_BUILTINS_4, which is a prerequisite\n        for exception_ptr but cannot be used in this file because it is defined in a header, not by the compiler.\n        If the compiler has no atomic intrinsics, the C++ library should not expect those as well. **/\n    #define __TBB_EXCEPTION_PTR_PRESENT               (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40404 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\n    #define __TBB_STATIC_ASSERT_PRESENT               (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)\n    #define __TBB_CPP11_TUPLE_PRESENT                 (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300)\n    #define __TBB_INITIALIZER_LISTS_PRESENT           (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    /** gcc seems have to support constexpr from 4.4 but tests in (test_atomic) seeming reasonable fail to compile prior 4.6**/\n    #define __TBB_CONSTEXPR_PRESENT                   (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_NOEXCEPT_PRESENT                    (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40600)\n    #define __TBB_CPP11_AUTO_PRESENT                  (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_CPP11_DECLTYPE_PRESENT              (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40400)\n    #define __TBB_CPP11_LAMBDAS_PRESENT               (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40500)\n#elif _MSC_VER\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    (_MSC_VER >= 1800)\n    #define __TBB_CPP11_RVALUE_REF_PRESENT            (_MSC_VER >= 1600)\n    #define __TBB_EXCEPTION_PTR_PRESENT               (_MSC_VER >= 1600)\n    #define __TBB_STATIC_ASSERT_PRESENT               (_MSC_VER >= 1600)\n    #define __TBB_CPP11_TUPLE_PRESENT                 (_MSC_VER >= 1600)\n    #define __TBB_INITIALIZER_LISTS_PRESENT           (_MSC_VER >= 1800)\n    #define __TBB_CONSTEXPR_PRESENT                   (_MSC_VER >= 1900)\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  (_MSC_VER >= 1800)\n    #define __TBB_NOEXCEPT_PRESENT                    (_MSC_VER >= 1900)\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         (_MSC_VER >= 1700)\n    #define __TBB_CPP11_AUTO_PRESENT                  (_MSC_VER >= 1600)\n    #define __TBB_CPP11_DECLTYPE_PRESENT              (_MSC_VER >= 1600)\n    #define __TBB_CPP11_LAMBDAS_PRESENT               (_MSC_VER >= 1600)\n#else\n    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT    0\n    #define __TBB_CPP11_RVALUE_REF_PRESENT            0\n    #define __TBB_EXCEPTION_PTR_PRESENT               0\n    #define __TBB_STATIC_ASSERT_PRESENT               0\n    #define __TBB_CPP11_TUPLE_PRESENT                 0\n    #define __TBB_INITIALIZER_LISTS_PRESENT           0\n    #define __TBB_CONSTEXPR_PRESENT                   0\n    #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT  0\n    #define __TBB_NOEXCEPT_PRESENT                    0\n    #define __TBB_CPP11_STD_BEGIN_END_PRESENT         0\n    #define __TBB_CPP11_AUTO_PRESENT                  0\n    #define __TBB_CPP11_DECLTYPE_PRESENT              0\n    #define __TBB_CPP11_LAMBDAS_PRESENT               0\n#endif\n\n// C++11 standard library features\n\n#define __TBB_CPP11_VARIADIC_TUPLE_PRESENT          (!_MSC_VER || _MSC_VER >=1800)\n#define __TBB_CPP11_TYPE_PROPERTIES_PRESENT         (_LIBCPP_VERSION || _MSC_VER >= 1700 || (__TBB_GCC_VERSION >= 50000 && __GXX_EXPERIMENTAL_CXX0X__))\n#define __TBB_TR1_TYPE_PROPERTIES_IN_STD_PRESENT    (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40300 || _MSC_VER >= 1600)\n// GCC supported some of type properties since 4.7\n#define __TBB_CPP11_IS_COPY_CONSTRUCTIBLE_PRESENT   (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700 || __TBB_CPP11_TYPE_PROPERTIES_PRESENT)\n\n// In GCC and MSVC, implementation of std::move_if_noexcept is not aligned with noexcept\n#define __TBB_MOVE_IF_NOEXCEPT_PRESENT           (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700 || _MSC_VER >= 1900 || __clang__ && _LIBCPP_VERSION && __TBB_NOEXCEPT_PRESENT)\n//TODO: Probably more accurate way is to analyze version of stdlibc++ via__GLIBCXX__ instead of __TBB_GCC_VERSION\n#define __TBB_ALLOCATOR_TRAITS_PRESENT              (__cplusplus >= 201103L && _LIBCPP_VERSION  || _MSC_VER >= 1700 ||                                             \\\n                                                     __GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700 && !(__TBB_GCC_VERSION == 40700 && __TBB_DEFINE_MIC) \\\n                                                    )\n#define __TBB_MAKE_EXCEPTION_PTR_PRESENT         (__TBB_EXCEPTION_PTR_PRESENT && (_MSC_VER >= 1700 || __TBB_GCC_VERSION >= 40600 || _LIBCPP_VERSION))\n\n//TODO: not clear how exactly this macro affects exception_ptr - investigate\n// On linux ICC fails to find existing std::exception_ptr in libstdc++ without this define\n#if __INTEL_COMPILER && __GNUC__ && __TBB_EXCEPTION_PTR_PRESENT && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\n    #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\n#endif\n\n// Work around a bug in MinGW32\n#if __MINGW32__ && __TBB_EXCEPTION_PTR_PRESENT && !defined(_GLIBCXX_ATOMIC_BUILTINS_4)\n    #define _GLIBCXX_ATOMIC_BUILTINS_4\n#endif\n\n#if __GNUC__ || __SUNPRO_CC || __IBMCPP__\n    /* ICC defines __GNUC__ and so is covered */\n    #define __TBB_ATTRIBUTE_ALIGNED_PRESENT 1\n#elif _MSC_VER && (_MSC_VER >= 1300 || __INTEL_COMPILER)\n    #define __TBB_DECLSPEC_ALIGN_PRESENT 1\n#endif\n\n/* Actually ICC supports gcc __sync_* intrinsics starting 11.1,\n * but 64 bit support for 32 bit target comes in later ones*/\n/* TODO: change the version back to 4.1.2 once macro __TBB_WORD_SIZE become optional */\n/* Assumed that all clang versions have these gcc compatible intrinsics. */\n#if __TBB_GCC_VERSION >= 40306 || __INTEL_COMPILER >= 1200 || __clang__\n    /** built-in atomics available in GCC since 4.1.2 **/\n    #define __TBB_GCC_BUILTIN_ATOMICS_PRESENT 1\n#endif\n\n#if __INTEL_COMPILER >= 1200\n    /** built-in C++11 style atomics available in ICC since 12.0 **/\n    #define __TBB_ICC_BUILTIN_ATOMICS_PRESENT 1\n#endif\n\n#define __TBB_TSX_INTRINSICS_PRESENT ((__RTM__ || _MSC_VER>=1700 || __INTEL_COMPILER>=1300) && !__TBB_DEFINE_MIC && !__ANDROID__)\n\n/** User controlled TBB features & modes **/\n\n#ifndef TBB_USE_DEBUG\n#ifdef _DEBUG\n#define TBB_USE_DEBUG _DEBUG\n#else\n#define TBB_USE_DEBUG 0\n#endif\n#endif /* TBB_USE_DEBUG */\n\n#ifndef TBB_USE_ASSERT\n#define TBB_USE_ASSERT TBB_USE_DEBUG\n#endif /* TBB_USE_ASSERT */\n\n#ifndef TBB_USE_THREADING_TOOLS\n#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG\n#endif /* TBB_USE_THREADING_TOOLS */\n\n#ifndef TBB_USE_PERFORMANCE_WARNINGS\n#ifdef TBB_PERFORMANCE_WARNINGS\n#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS\n#else\n#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG\n#endif /* TBB_PEFORMANCE_WARNINGS */\n#endif /* TBB_USE_PERFORMANCE_WARNINGS */\n\n#if __TBB_DEFINE_MIC || defined(_XBOX)\n    #if TBB_USE_EXCEPTIONS\n        #error The platform does not properly support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.\n    #elif !defined(TBB_USE_EXCEPTIONS)\n        #define TBB_USE_EXCEPTIONS 0\n    #endif\n#elif !(__EXCEPTIONS || defined(_CPPUNWIND) || __SUNPRO_CC)\n    #if TBB_USE_EXCEPTIONS\n        #error Compilation settings do not support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.\n    #elif !defined(TBB_USE_EXCEPTIONS)\n        #define TBB_USE_EXCEPTIONS 0\n    #endif\n#elif !defined(TBB_USE_EXCEPTIONS)\n    #define TBB_USE_EXCEPTIONS 1\n#endif\n\n#if __clang__ && !__INTEL_COMPILER\n#define __TBB_USE_OPTIONAL_RTTI __has_feature(cxx_rtti)\n#elif defined(_CPPRTTI)\n#define __TBB_USE_OPTIONAL_RTTI 1\n#else\n#define __TBB_USE_OPTIONAL_RTTI (__GXX_RTTI || __RTTI || __INTEL_RTTI__)\n#endif\n\n#ifndef TBB_IMPLEMENT_CPP0X\n/** By default, use C++11 classes if available **/\n    #if __clang__\n        /* Old versions of Intel Compiler do not have __has_include or cannot use it in #define */\n        #if (__INTEL_COMPILER && (__INTEL_COMPILER < 1500 || __INTEL_COMPILER == 1500 && __INTEL_COMPILER_UPDATE <= 1))\n            #define TBB_IMPLEMENT_CPP0X !(_LIBCPP_VERSION && (__cplusplus >= 201103L))\n        #else\n            #define TBB_IMPLEMENT_CPP0X (__cplusplus < 201103L || (!__has_include(<thread>) && !__has_include(<condition_variable>)))\n        #endif\n    #elif __GNUC__\n        #define TBB_IMPLEMENT_CPP0X (__TBB_GCC_VERSION < 40400 || !__GXX_EXPERIMENTAL_CXX0X__)\n    #elif _MSC_VER\n        #define TBB_IMPLEMENT_CPP0X (_MSC_VER < 1700)\n    #else\n        // TODO: Reconsider general approach to be more reliable, e.g. (!(__cplusplus >= 201103L && __ STDC_HOSTED__))\n        #define TBB_IMPLEMENT_CPP0X (!__STDCPP_THREADS__)\n    #endif\n#endif /* TBB_IMPLEMENT_CPP0X */\n\n/* TBB_USE_CAPTURED_EXCEPTION should be explicitly set to either 0 or 1, as it is used as C++ const */\n#ifndef TBB_USE_CAPTURED_EXCEPTION\n    /** IA-64 architecture pre-built TBB binaries do not support exception_ptr. **/\n    #if __TBB_EXCEPTION_PTR_PRESENT && !defined(__ia64__)\n        #define TBB_USE_CAPTURED_EXCEPTION 0\n    #else\n        #define TBB_USE_CAPTURED_EXCEPTION 1\n    #endif\n#else /* defined TBB_USE_CAPTURED_EXCEPTION */\n    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT\n        #error Current runtime does not support std::exception_ptr. Set TBB_USE_CAPTURED_EXCEPTION and make sure that your code is ready to catch tbb::captured_exception.\n    #endif\n#endif /* defined TBB_USE_CAPTURED_EXCEPTION */\n\n/** Check whether the request to use GCC atomics can be satisfied **/\n#if TBB_USE_GCC_BUILTINS && !__TBB_GCC_BUILTIN_ATOMICS_PRESENT\n    #error \"GCC atomic built-ins are not supported.\"\n#endif\n\n/** Internal TBB features & modes **/\n\n/** __TBB_WEAK_SYMBOLS_PRESENT denotes that the system supports the weak symbol mechanism **/\n#ifndef __TBB_WEAK_SYMBOLS_PRESENT\n#define __TBB_WEAK_SYMBOLS_PRESENT ( !_WIN32 && !__APPLE__ && !__sun && (__TBB_GCC_VERSION >= 40000 || __INTEL_COMPILER ) )\n#endif\n\n/** __TBB_DYNAMIC_LOAD_ENABLED describes the system possibility to load shared libraries at run time **/\n#ifndef __TBB_DYNAMIC_LOAD_ENABLED\n    #define __TBB_DYNAMIC_LOAD_ENABLED 1\n#endif\n\n/** __TBB_SOURCE_DIRECTLY_INCLUDED is a mode used in whitebox testing when\n    it's necessary to test internal functions not exported from TBB DLLs\n**/\n#if (_WIN32||_WIN64) && (__TBB_SOURCE_DIRECTLY_INCLUDED || TBB_USE_PREVIEW_BINARY)\n    #define __TBB_NO_IMPLICIT_LINKAGE 1\n    #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1\n#endif\n\n#ifndef __TBB_COUNT_TASK_NODES\n    #define __TBB_COUNT_TASK_NODES TBB_USE_ASSERT\n#endif\n\n#ifndef __TBB_TASK_GROUP_CONTEXT\n    #define __TBB_TASK_GROUP_CONTEXT 1\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#ifndef __TBB_SCHEDULER_OBSERVER\n    #define __TBB_SCHEDULER_OBSERVER 1\n#endif /* __TBB_SCHEDULER_OBSERVER */\n\n#ifndef __TBB_FP_CONTEXT\n    #define __TBB_FP_CONTEXT __TBB_TASK_GROUP_CONTEXT\n#endif /* __TBB_FP_CONTEXT */\n\n#if __TBB_FP_CONTEXT && !__TBB_TASK_GROUP_CONTEXT\n    #error __TBB_FP_CONTEXT requires __TBB_TASK_GROUP_CONTEXT to be enabled\n#endif\n\n#ifndef __TBB_TASK_ARENA\n    #define __TBB_TASK_ARENA 1\n#endif /* __TBB_TASK_ARENA  */\n#if __TBB_TASK_ARENA\n    #define __TBB_RECYCLE_TO_ENQUEUE __TBB_BUILD // keep non-official\n    #if !__TBB_SCHEDULER_OBSERVER\n        #error __TBB_TASK_ARENA requires __TBB_SCHEDULER_OBSERVER to be enabled\n    #endif\n#endif /* __TBB_TASK_ARENA */\n\n#ifndef __TBB_ARENA_OBSERVER\n    #define __TBB_ARENA_OBSERVER ((__TBB_BUILD||TBB_PREVIEW_LOCAL_OBSERVER)&& __TBB_SCHEDULER_OBSERVER)\n#endif /* __TBB_ARENA_OBSERVER */\n\n#ifndef __TBB_SLEEP_PERMISSION\n    #define __TBB_SLEEP_PERMISSION ((__TBB_CPF_BUILD||TBB_PREVIEW_LOCAL_OBSERVER)&& __TBB_SCHEDULER_OBSERVER)\n#endif /* __TBB_SLEEP_PERMISSION */\n\n#if TBB_PREVIEW_FLOW_GRAPH_TRACE\n// Users of flow-graph trace need to explicitly link against the preview library.  This\n// prevents the linker from implicitly linking an application with a preview version of\n// TBB and unexpectedly bringing in other community preview features, which might change\n// the behavior of the application.\n#define __TBB_NO_IMPLICIT_LINKAGE 1\n#endif /* TBB_PREVIEW_FLOW_GRAPH_TRACE */\n\n#ifndef __TBB_ITT_STRUCTURE_API\n#define __TBB_ITT_STRUCTURE_API ( !__TBB_DEFINE_MIC && (__TBB_CPF_BUILD || TBB_PREVIEW_FLOW_GRAPH_TRACE) )\n#endif\n\n#if TBB_USE_EXCEPTIONS && !__TBB_TASK_GROUP_CONTEXT\n    #error TBB_USE_EXCEPTIONS requires __TBB_TASK_GROUP_CONTEXT to be enabled\n#endif\n\n#ifndef __TBB_TASK_PRIORITY\n    #define __TBB_TASK_PRIORITY (__TBB_TASK_GROUP_CONTEXT)\n#endif /* __TBB_TASK_PRIORITY */\n\n#if __TBB_TASK_PRIORITY && !__TBB_TASK_GROUP_CONTEXT\n    #error __TBB_TASK_PRIORITY requires __TBB_TASK_GROUP_CONTEXT to be enabled\n#endif\n\n#if TBB_PREVIEW_WAITING_FOR_WORKERS || __TBB_BUILD\n    #define __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE 1\n#endif\n\n#ifndef __TBB_ENQUEUE_ENFORCED_CONCURRENCY\n    #define __TBB_ENQUEUE_ENFORCED_CONCURRENCY 1\n#endif\n\n#if !defined(__TBB_SURVIVE_THREAD_SWITCH) && \\\n          (_WIN32 || _WIN64 || __APPLE__ || (__linux__ && !__ANDROID__))\n    #define __TBB_SURVIVE_THREAD_SWITCH 1\n#endif /* __TBB_SURVIVE_THREAD_SWITCH */\n\n#ifndef __TBB_DEFAULT_PARTITIONER\n#if TBB_DEPRECATED\n/** Default partitioner for parallel loop templates in TBB 1.0-2.1 */\n#define __TBB_DEFAULT_PARTITIONER tbb::simple_partitioner\n#else\n/** Default partitioner for parallel loop templates since TBB 2.2 */\n#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner\n#endif /* TBB_DEPRECATED */\n#endif /* !defined(__TBB_DEFAULT_PARTITIONER */\n\n#ifndef __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES\n#define __TBB_USE_PROPORTIONAL_SPLIT_IN_BLOCKED_RANGES 1\n#endif\n\n#ifndef __TBB_ENABLE_RANGE_FEEDBACK\n#define __TBB_ENABLE_RANGE_FEEDBACK 0\n#endif\n\n#ifdef _VARIADIC_MAX\n    #define __TBB_VARIADIC_MAX _VARIADIC_MAX\n#else\n    #if _MSC_VER == 1700\n        #define __TBB_VARIADIC_MAX 5 // VS11 setting, issue resolved in VS12\n    #elif _MSC_VER == 1600\n        #define __TBB_VARIADIC_MAX 10 // VS10 setting\n    #else\n        #define __TBB_VARIADIC_MAX 15\n    #endif\n#endif\n\n/** __TBB_WIN8UI_SUPPORT enables support of New Windows*8 Store Apps and limit a possibility to load\n    shared libraries at run time only from application container **/\n#if defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_APP\n    #define __TBB_WIN8UI_SUPPORT 1\n#else\n    #define __TBB_WIN8UI_SUPPORT 0\n#endif\n\n/** Macros of the form __TBB_XXX_BROKEN denote known issues that are caused by\n    the bugs in compilers, standard or OS specific libraries. They should be\n    removed as soon as the corresponding bugs are fixed or the buggy OS/compiler\n    versions go out of the support list.\n**/\n\n#if __ANDROID__ && __TBB_GCC_VERSION <= 40403 && !__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8\n    /** Necessary because on Android 8-byte CAS and F&A are not available for some processor architectures,\n        but no mandatory warning message appears from GCC 4.4.3. Instead, only a linkage error occurs when\n        these atomic operations are used (such as in unit test test_atomic.exe). **/\n    #define __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN 1\n#elif __TBB_x86_32 && __TBB_GCC_VERSION == 40102 && ! __GNUC_RH_RELEASE__\n    /** GCC 4.1.2 erroneously emit call to external function for 64 bit sync_ intrinsics.\n        However these functions are not defined anywhere. It seems that this problem was fixed later on\n        and RHEL got an updated version of gcc 4.1.2. **/\n    #define __TBB_GCC_64BIT_ATOMIC_BUILTINS_BROKEN 1\n#endif\n\n#if __GNUC__ && __TBB_x86_64 && __INTEL_COMPILER == 1200\n    #define __TBB_ICC_12_0_INL_ASM_FSTCW_BROKEN 1\n#endif\n\n#if _MSC_VER && __INTEL_COMPILER && (__INTEL_COMPILER<1110 || __INTEL_COMPILER==1110 && __INTEL_COMPILER_BUILD_DATE < 20091012)\n    /** Necessary to avoid ICL error (or warning in non-strict mode):\n        \"exception specification for implicitly declared virtual destructor is\n        incompatible with that of overridden one\". **/\n    #define __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN 1\n#endif\n\n#if !__INTEL_COMPILER && (_MSC_VER && _MSC_VER < 1500 || __TBB_GCC_VERSION && __TBB_GCC_VERSION < 40102)\n    /** gcc 3.4.6 (and earlier) and VS2005 (and earlier) do not allow declaring template class as a friend\n        of classes defined in other namespaces. **/\n    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1\n#endif\n\n//TODO: recheck for different clang versions \n#if __GLIBC__==2 && __GLIBC_MINOR__==3 ||  (__APPLE__ && ( __INTEL_COMPILER==1200 && !TBB_USE_DEBUG))\n    /** Macro controlling EH usages in TBB tests.\n        Some older versions of glibc crash when exception handling happens concurrently. **/\n    #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 1\n#else\n    #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 0\n#endif\n\n#if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110\n    /** That's a bug in Intel compiler 11.1.044/IA-32/Windows, that leads to a worker thread crash on the thread's startup. **/\n    #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1\n#endif\n\n#if __clang__ || (__GNUC__==3 && __GNUC_MINOR__==3 && !defined(__INTEL_COMPILER))\n    /** Bugs with access to nested classes declared in protected area */\n    #define __TBB_PROTECTED_NESTED_CLASS_BROKEN 1\n#endif\n\n#if __MINGW32__ && __TBB_GCC_VERSION < 40200\n    /** MinGW has a bug with stack alignment for routines invoked from MS RTLs.\n        Since GCC 4.2, the bug can be worked around via a special attribute. **/\n    #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 1\n#else\n    #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 0\n#endif\n\n#if __TBB_GCC_VERSION==40300 && !__INTEL_COMPILER && !__clang__\n    /* GCC of this version may rashly ignore control dependencies */\n    #define __TBB_GCC_OPTIMIZER_ORDERING_BROKEN 1\n#endif\n\n#if __FreeBSD__\n    /** A bug in FreeBSD 8.0 results in kernel panic when there is contention\n        on a mutex created with this attribute. **/\n    #define __TBB_PRIO_INHERIT_BROKEN 1\n\n    /** A bug in FreeBSD 8.0 results in test hanging when an exception occurs\n        during (concurrent?) object construction by means of placement new operator. **/\n    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1\n#endif /* __FreeBSD__ */\n\n#if (__linux__ || __APPLE__) && __i386__ && defined(__INTEL_COMPILER)\n    /** The Intel compiler for IA-32 (Linux|OS X) crashes or generates\n        incorrect code when __asm__ arguments have a cast to volatile. **/\n    #define __TBB_ICC_ASM_VOLATILE_BROKEN 1\n#endif\n\n#if !__INTEL_COMPILER && (_MSC_VER || __GNUC__==3 && __GNUC_MINOR__<=2)\n    /** Bug in GCC 3.2 and MSVC compilers that sometimes return 0 for __alignof(T)\n        when T has not yet been instantiated. **/\n    #define __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN 1\n#endif\n\n#if __TBB_DEFINE_MIC\n    /** Main thread and user's thread have different default thread affinity masks. **/\n    #define __TBB_MAIN_THREAD_AFFINITY_BROKEN 1\n#endif\n\n#if __GXX_EXPERIMENTAL_CXX0X__ && !defined(__EXCEPTIONS) && \\\n    ((!__INTEL_COMPILER && !__clang__ && (__TBB_GCC_VERSION>=40400 && __TBB_GCC_VERSION<40600)) || \\\n     (__INTEL_COMPILER<=1400 && (__TBB_GCC_VERSION>=40400 && __TBB_GCC_VERSION<=40801)))\n/* There is an issue for specific GCC toolchain when C++11 is enabled\n   and exceptions are disabled:\n   exceprion_ptr.h/nested_exception.h use throw unconditionally.\n   GCC can ignore 'throw' since 4.6; but with ICC the issue still exists.\n */\n    #define __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN 1\n#else\n    #define __TBB_LIBSTDCPP_EXCEPTION_HEADERS_BROKEN 0\n#endif\n\n#if __INTEL_COMPILER==1300 && __TBB_GCC_VERSION>=40700 && defined(__GXX_EXPERIMENTAL_CXX0X__)\n/* Some C++11 features used inside libstdc++ are not supported by Intel compiler.\n * Checking version of gcc instead of libstdc++ because\n *  - they are directly connected,\n *  - for now it is not possible to check version of any standard library in this file\n */\n    #define __TBB_ICC_13_0_CPP11_STDLIB_SUPPORT_BROKEN 1\n#else\n    #define __TBB_ICC_13_0_CPP11_STDLIB_SUPPORT_BROKEN 0\n#endif\n\n#if (__GNUC__==4 && __GNUC_MINOR__==4 ) && !defined(__INTEL_COMPILER) && !defined(__clang__)\n    /** excessive warnings related to strict aliasing rules in GCC 4.4 **/\n    #define __TBB_GCC_STRICT_ALIASING_BROKEN 1\n    /* topical remedy: #pragma GCC diagnostic ignored \"-Wstrict-aliasing\" */\n    #if !__TBB_GCC_WARNING_SUPPRESSION_PRESENT\n        #error Warning suppression is not supported, while should.\n    #endif\n#endif\n\n/*In a PIC mode some versions of GCC 4.1.2 generate incorrect inlined code for 8 byte __sync_val_compare_and_swap intrinsic */\n#if __TBB_GCC_VERSION == 40102 && __PIC__ && !defined(__INTEL_COMPILER) && !defined(__clang__)\n    #define __TBB_GCC_CAS8_BUILTIN_INLINING_BROKEN 1\n#endif\n\n#if __TBB_x86_32 && (__linux__ || __APPLE__ || _WIN32 || __sun || __ANDROID__) &&  (__INTEL_COMPILER || (__GNUC__==3 && __GNUC_MINOR__==3 )||(__MINGW32__ ) && (__GNUC__==4 && __GNUC_MINOR__==5 ) || __SUNPRO_CC)\n    // Some compilers for IA-32 fail to provide 8-byte alignment of objects on the stack,\n    // even if the object specifies 8-byte alignment.  On such platforms, the IA-32 implementation\n    // of 64 bit atomics (e.g. atomic<long long>) use different tactics depending upon\n    // whether the object is properly aligned or not.\n    #define __TBB_FORCE_64BIT_ALIGNMENT_BROKEN 1\n#else\n    #define __TBB_FORCE_64BIT_ALIGNMENT_BROKEN 0\n#endif\n\n#if __GNUC__ && !__INTEL_COMPILER && !__clang__ && __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT && __TBB_GCC_VERSION < 40700\n    #define __TBB_ZERO_INIT_WITH_DEFAULTED_CTOR_BROKEN 1\n#endif\n\n#if _MSC_VER && _MSC_VER <= 1800 && !__INTEL_COMPILER\n    // With MSVC, when an array is passed by const reference to a template function,\n    // constness from the function parameter may get propagated to the template parameter.\n    #define __TBB_CONST_REF_TO_ARRAY_TEMPLATE_PARAM_BROKEN 1\n#endif\n\n// A compiler bug: a disabled copy constructor prevents use of the moving constructor\n#define __TBB_IF_NO_COPY_CTOR_MOVE_SEMANTICS_BROKEN (_MSC_VER && (__INTEL_COMPILER >= 1300 && __INTEL_COMPILER <= 1310) && !__INTEL_CXX11_MODE__)\n\n// MSVC 2013 and ICC do not generate implicit move constructor for empty derived class\n#define __TBB_CPP11_IMPLICIT_MOVE_MEMBERS_GENERATION_FOR_DERIVED_BROKEN  (__TBB_CPP11_RVALUE_REF_PRESENT &&  \\\n      ( !__INTEL_COMPILER && _MSC_VER && _MSC_VER <= 1800 || __INTEL_COMPILER && __INTEL_COMPILER <= 1600 ))\n\n#define __TBB_CPP11_DECLVAL_BROKEN (_MSC_VER == 1600 || (__GNUC__ && __TBB_GCC_VERSION < 40500) )\n\n// Intel C++ compiler has difficulties with copying std::pair with VC11 std::reference_wrapper being a const member\n#define __TBB_COPY_FROM_NON_CONST_REF_BROKEN (_MSC_VER == 1700 && __INTEL_COMPILER && __INTEL_COMPILER < 1600)\n//The implicit upcasting of the tuple of a reference of a derived class to a base class fails on icc 13.X\n//if the system's gcc environment is 4.8\n#if (__INTEL_COMPILER >=1300 && __INTEL_COMPILER <=1310) && __TBB_GCC_VERSION>=40700 && __GXX_EXPERIMENTAL_CXX0X__\n    #define __TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN 1\n#endif\n\n/** End of __TBB_XXX_BROKEN macro section **/\n\n#if defined(_MSC_VER) && _MSC_VER>=1500 && !defined(__INTEL_COMPILER)\n    // A macro to suppress erroneous or benign \"unreachable code\" MSVC warning (4702)\n    #define __TBB_MSVC_UNREACHABLE_CODE_IGNORED 1\n#endif\n\n#define __TBB_ATOMIC_CTORS     (__TBB_CONSTEXPR_PRESENT && __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT && (!__TBB_ZERO_INIT_WITH_DEFAULTED_CTOR_BROKEN))\n\n// Many OS versions (Android 4.0.[0-3] for example) need workaround for dlopen to avoid non-recursive loader lock hang\n// Setting the workaround for all compile targets ($APP_PLATFORM) below Android 4.4 (android-19) \n#if __ANDROID__ \n#include <android/api-level.h>\n#define __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND  (__ANDROID_API__ < 19)\n#endif\n\n#define __TBB_ALLOCATOR_CONSTRUCT_VARIADIC      (__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT)\n\n#define __TBB_VARIADIC_PARALLEL_INVOKE          (TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE && __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT)\n#define __TBB_FLOW_GRAPH_CPP11_FEATURES         (__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT \\\n                                                && __TBB_CPP11_RVALUE_REF_PRESENT && __TBB_CPP11_AUTO_PRESENT) \\\n                                                && __TBB_CPP11_VARIADIC_TUPLE_PRESENT && !__TBB_UPCAST_OF_TUPLE_OF_REF_BROKEN\n#define __TBB_PREVIEW_ASYNC_NODE (__TBB_FLOW_GRAPH_CPP11_FEATURES && TBB_PREVIEW_FLOW_GRAPH_NODES)\n#define __TBB_PREVIEW_OPENCL_NODE               (__TBB_FLOW_GRAPH_CPP11_FEATURES && TBB_PREVIEW_FLOW_GRAPH_NODES && !TBB_IMPLEMENT_CPP0X)\n#define __TBB_PREVIEW_MESSAGE_BASED_KEY_MATCHING (TBB_PREVIEW_FLOW_GRAPH_FEATURES || __TBB_PREVIEW_OPENCL_NODE)\n#endif /* __TBB_tbb_config_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tbb_exception.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_exception_H\n#define __TBB_exception_H\n\n#include \"tbb_stddef.h\"\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <exception>\n#include <new>    //required for bad_alloc definition, operators new\n#include <string> // required to construct std exception classes\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\nnamespace tbb {\n\n//! Exception for concurrent containers\nclass bad_last_alloc : public std::bad_alloc {\npublic:\n    /*override*/ const char* what() const throw();\n#if __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN\n    /*override*/ ~bad_last_alloc() throw() {}\n#endif\n};\n\n//! Exception for PPL locks\nclass improper_lock : public std::exception {\npublic:\n    /*override*/ const char* what() const throw();\n};\n\n//! Exception for user-initiated abort\nclass user_abort : public std::exception {\npublic:\n    /*override*/ const char* what() const throw();\n};\n\n//! Exception for missing wait on structured_task_group\nclass missing_wait : public std::exception {\npublic:\n    /*override*/ const char* what() const throw();\n};\n\n//! Exception for repeated scheduling of the same task_handle\nclass invalid_multiple_scheduling : public std::exception {\npublic:\n    /*override*/ const char* what() const throw();\n};\n\nnamespace internal {\n//! Obsolete\nvoid __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4();\n\nenum exception_id {\n    eid_bad_alloc = 1,\n    eid_bad_last_alloc,\n    eid_nonpositive_step,\n    eid_out_of_range,\n    eid_segment_range_error,\n    eid_index_range_error,\n    eid_missing_wait,\n    eid_invalid_multiple_scheduling,\n    eid_improper_lock,\n    eid_possible_deadlock,\n    eid_operation_not_permitted,\n    eid_condvar_wait_failed,\n    eid_invalid_load_factor,\n    eid_reserved, // free slot for backward compatibility, can be reused.\n    eid_invalid_swap,\n    eid_reservation_length_error,\n    eid_invalid_key,\n    eid_user_abort,\n    eid_reserved1,\n#if __TBB_SUPPORTS_WORKERS_WAITING_IN_TERMINATE\n    // This id is used only inside library and only for support of CPF functionality.\n    // So, if we drop the functionality, eid_reserved1 can be safely renamed and reused.\n    eid_blocking_sch_init = eid_reserved1,\n#endif\n    eid_bad_tagged_msg_cast,\n    //! The last enumerator tracks the number of defined IDs. It must remain the last one.\n    /** When adding new IDs, place them immediately _before_ this comment (that is\n        _after_ all the existing IDs. NEVER insert new IDs between the existing ones. **/\n    eid_max\n};\n\n//! Gathers all throw operators in one place.\n/** Its purpose is to minimize code bloat that can be caused by throw operators\n    scattered in multiple places, especially in templates. **/\nvoid __TBB_EXPORTED_FUNC throw_exception_v4 ( exception_id );\n\n//! Versionless convenience wrapper for throw_exception_v4()\ninline void throw_exception ( exception_id eid ) { throw_exception_v4(eid); }\n\n} // namespace internal\n} // namespace tbb\n\n#if __TBB_TASK_GROUP_CONTEXT\n#include \"tbb_allocator.h\"\n#include <typeinfo> //for typeid\n\nnamespace tbb {\n\n//! Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.\n/** If an unhandled exception of the type derived from tbb::tbb_exception is intercepted\n    by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in\n    the root thread. The root thread is the thread that has started the outermost algorithm\n    or root task sharing the same task_group_context with the guilty algorithm/task (the one\n    that threw the exception first).\n\n    Note: when documentation mentions workers with respect to exception handling,\n    masters are implied as well, because they are completely equivalent in this context.\n    Consequently a root thread can be master or worker thread.\n\n    NOTE: In case of nested algorithms or complex task hierarchies when the nested\n    levels share (explicitly or by means of implicit inheritance) the task group\n    context of the outermost level, the exception may be (re-)thrown multiple times\n    (ultimately - in each worker on each nesting level) before reaching the root\n    thread at the outermost level. IMPORTANT: if you intercept an exception derived\n    from this class on a nested level, you must re-throw it in the catch block by means\n    of the \"throw;\" operator.\n\n    TBB provides two implementations of this interface: tbb::captured_exception and\n    template class tbb::movable_exception. See their declarations for more info. **/\nclass tbb_exception : public std::exception\n{\n    /** No operator new is provided because the TBB usage model assumes dynamic\n        creation of the TBB exception objects only by means of applying move()\n        operation on an exception thrown out of TBB scheduler. **/\n    void* operator new ( size_t );\n\npublic:\n#if __clang__\n    // At -O3 or even -O2 optimization level, Clang may fully throw away an empty destructor\n    // of tbb_exception from destructors of derived classes. As a result, it does not create\n    // vtable for tbb_exception, which is a required part of TBB binary interface.\n    // Making the destructor non-empty (with just a semicolon) prevents that optimization.\n    ~tbb_exception() throw() { /* keep the semicolon! */ ; }\n#endif\n\n    //! Creates and returns pointer to the deep copy of this exception object.\n    /** Move semantics is allowed. **/\n    virtual tbb_exception* move () throw() = 0;\n\n    //! Destroys objects created by the move() method.\n    /** Frees memory and calls destructor for this exception object.\n        Can and must be used only on objects created by the move method. **/\n    virtual void destroy () throw() = 0;\n\n    //! Throws this exception object.\n    /** Make sure that if you have several levels of derivation from this interface\n        you implement or override this method on the most derived level. The implementation\n        is as simple as \"throw *this;\". Failure to do this will result in exception\n        of a base class type being thrown. **/\n    virtual void throw_self () = 0;\n\n    //! Returns RTTI name of the originally intercepted exception\n    virtual const char* name() const throw() = 0;\n\n    //! Returns the result of originally intercepted exception's what() method.\n    virtual const char* what() const throw() = 0;\n\n    /** Operator delete is provided only to allow using existing smart pointers\n        with TBB exception objects obtained as the result of applying move()\n        operation on an exception thrown out of TBB scheduler.\n\n        When overriding method move() make sure to override operator delete as well\n        if memory is allocated not by TBB's scalable allocator. **/\n    void operator delete ( void* p ) {\n        internal::deallocate_via_handler_v3(p);\n    }\n};\n\n//! This class is used by TBB to propagate information about unhandled exceptions into the root thread.\n/** Exception of this type is thrown by TBB in the root thread (thread that started a parallel\n    algorithm ) if an unhandled exception was intercepted during the algorithm execution in one\n    of the workers.\n    \\sa tbb::tbb_exception **/\nclass captured_exception : public tbb_exception\n{\npublic:\n    captured_exception ( const captured_exception& src )\n        : tbb_exception(src), my_dynamic(false)\n    {\n        set(src.my_exception_name, src.my_exception_info);\n    }\n\n    captured_exception ( const char* name_, const char* info )\n        : my_dynamic(false)\n    {\n        set(name_, info);\n    }\n\n    __TBB_EXPORTED_METHOD ~captured_exception () throw();\n\n    captured_exception& operator= ( const captured_exception& src ) {\n        if ( this != &src ) {\n            clear();\n            set(src.my_exception_name, src.my_exception_info);\n        }\n        return *this;\n    }\n\n    /*override*/\n    captured_exception* __TBB_EXPORTED_METHOD move () throw();\n\n    /*override*/\n    void __TBB_EXPORTED_METHOD destroy () throw();\n\n    /*override*/\n    void throw_self () { __TBB_THROW(*this); }\n\n    /*override*/\n    const char* __TBB_EXPORTED_METHOD name() const throw();\n\n    /*override*/\n    const char* __TBB_EXPORTED_METHOD what() const throw();\n\n    void __TBB_EXPORTED_METHOD set ( const char* name, const char* info ) throw();\n    void __TBB_EXPORTED_METHOD clear () throw();\n\nprivate:\n    //! Used only by method clone().\n    captured_exception() {}\n\n    //! Functionally equivalent to {captured_exception e(name,info); return e.clone();}\n    static captured_exception* allocate ( const char* name, const char* info );\n\n    bool my_dynamic;\n    const char* my_exception_name;\n    const char* my_exception_info;\n};\n\n//! Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread\n/** Code using TBB can instantiate this template with an arbitrary ExceptionData type\n    and throw this exception object. Such exceptions are intercepted by the TBB scheduler\n    and delivered to the root thread ().\n    \\sa tbb::tbb_exception **/\ntemplate<typename ExceptionData>\nclass movable_exception : public tbb_exception\n{\n    typedef movable_exception<ExceptionData> self_type;\n\npublic:\n    movable_exception ( const ExceptionData& data_ )\n        : my_exception_data(data_)\n        , my_dynamic(false)\n        , my_exception_name(\n#if TBB_USE_EXCEPTIONS\n        typeid(self_type).name()\n#else /* !TBB_USE_EXCEPTIONS */\n        \"movable_exception\"\n#endif /* !TBB_USE_EXCEPTIONS */\n        )\n    {}\n\n    movable_exception ( const movable_exception& src ) throw ()\n        : tbb_exception(src)\n        , my_exception_data(src.my_exception_data)\n        , my_dynamic(false)\n        , my_exception_name(src.my_exception_name)\n    {}\n\n    ~movable_exception () throw() {}\n\n    const movable_exception& operator= ( const movable_exception& src ) {\n        if ( this != &src ) {\n            my_exception_data = src.my_exception_data;\n            my_exception_name = src.my_exception_name;\n        }\n        return *this;\n    }\n\n    ExceptionData& data () throw() { return my_exception_data; }\n\n    const ExceptionData& data () const throw() { return my_exception_data; }\n\n    /*override*/ const char* name () const throw() { return my_exception_name; }\n\n    /*override*/ const char* what () const throw() { return \"tbb::movable_exception\"; }\n\n    /*override*/\n    movable_exception* move () throw() {\n        void* e = internal::allocate_via_handler_v3(sizeof(movable_exception));\n        if ( e ) {\n            ::new (e) movable_exception(*this);\n            ((movable_exception*)e)->my_dynamic = true;\n        }\n        return (movable_exception*)e;\n    }\n    /*override*/\n    void destroy () throw() {\n        __TBB_ASSERT ( my_dynamic, \"Method destroy can be called only on dynamically allocated movable_exceptions\" );\n        if ( my_dynamic ) {\n            this->~movable_exception();\n            internal::deallocate_via_handler_v3(this);\n        }\n    }\n    /*override*/\n    void throw_self () { __TBB_THROW( *this ); }\n\nprotected:\n    //! User data\n    ExceptionData  my_exception_data;\n\nprivate:\n    //! Flag specifying whether this object has been dynamically allocated (by the move method)\n    bool my_dynamic;\n\n    //! RTTI name of this class\n    /** We rely on the fact that RTTI names are static string constants. **/\n    const char* my_exception_name;\n};\n\n#if !TBB_USE_CAPTURED_EXCEPTION\nnamespace internal {\n\n//! Exception container that preserves the exact copy of the original exception\n/** This class can be used only when the appropriate runtime support (mandated\n    by C++0x) is present **/\nclass tbb_exception_ptr {\n    std::exception_ptr  my_ptr;\n\npublic:\n    static tbb_exception_ptr* allocate ();\n    static tbb_exception_ptr* allocate ( const tbb_exception& tag );\n    //! This overload uses move semantics (i.e. it empties src)\n    static tbb_exception_ptr* allocate ( captured_exception& src );\n\n    //! Destroys this objects\n    /** Note that objects of this type can be created only by the allocate() method. **/\n    void destroy () throw();\n\n    //! Throws the contained exception .\n    void throw_self () { std::rethrow_exception(my_ptr); }\n\nprivate:\n    tbb_exception_ptr ( const std::exception_ptr& src ) : my_ptr(src) {}\n    tbb_exception_ptr ( const captured_exception& src ) :\n        #if __TBB_MAKE_EXCEPTION_PTR_PRESENT\n            my_ptr(std::make_exception_ptr(src))  // the final function name in C++11\n        #else\n            my_ptr(std::copy_exception(src))      // early C++0x drafts name\n        #endif\n    {}\n}; // class tbb::internal::tbb_exception_ptr\n\n} // namespace internal\n#endif /* !TBB_USE_CAPTURED_EXCEPTION */\n\n} // namespace tbb\n\n#endif /* __TBB_TASK_GROUP_CONTEXT */\n\n#endif /* __TBB_exception_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tbb_machine.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_machine_H\n#define __TBB_machine_H\n\n/** This header provides basic platform abstraction layer by hooking up appropriate\n    architecture/OS/compiler specific headers from the /include/tbb/machine directory.\n    If a plug-in header does not implement all the required APIs, it must specify\n    the missing ones by setting one or more of the following macros:\n\n    __TBB_USE_GENERIC_PART_WORD_CAS\n    __TBB_USE_GENERIC_PART_WORD_FETCH_ADD\n    __TBB_USE_GENERIC_PART_WORD_FETCH_STORE\n    __TBB_USE_GENERIC_FETCH_ADD\n    __TBB_USE_GENERIC_FETCH_STORE\n    __TBB_USE_GENERIC_DWORD_FETCH_ADD\n    __TBB_USE_GENERIC_DWORD_FETCH_STORE\n    __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE\n    __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE\n    __TBB_USE_GENERIC_RELAXED_LOAD_STORE\n    __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE\n\n    In this case tbb_machine.h will add missing functionality based on a minimal set \n    of APIs that are required to be implemented by all plug-n headers as described\n    further.\n    Note that these generic implementations may be sub-optimal for a particular\n    architecture, and thus should be relied upon only after careful evaluation\n    or as the last resort.\n\n    Additionally __TBB_64BIT_ATOMICS can be set to 0 on a 32-bit architecture to\n    indicate that the port is not going to support double word atomics. It may also\n    be set to 1 explicitly, though normally this is not necessary as tbb_machine.h\n    will set it automatically.\n\n    __TBB_ENDIANNESS macro can be defined by the implementation as well.\n    It is used only if __TBB_USE_GENERIC_PART_WORD_CAS is set (or for testing),\n    and must specify the layout of aligned 16-bit and 32-bit data anywhere within a process\n    (while the details of unaligned 16-bit or 32-bit data or of 64-bit data are irrelevant).\n    The layout must be the same at all relevant memory locations within the current process;\n    in case of page-specific endianness, one endianness must be kept \"out of sight\".\n    Possible settings, reflecting hardware and possibly O.S. convention, are:\n    -  __TBB_ENDIAN_BIG for big-endian data,\n    -  __TBB_ENDIAN_LITTLE for little-endian data,\n    -  __TBB_ENDIAN_DETECT for run-time detection iff exactly one of the above,\n    -  __TBB_ENDIAN_UNSUPPORTED to prevent undefined behavior if none of the above.\n\n    Prerequisites for each architecture port\n    ----------------------------------------\n    The following functions and macros have no generic implementation. Therefore they must be\n    implemented in each machine architecture specific header either as a conventional\n    function or as a functional macro.\n\n    __TBB_WORDSIZE\n        This is the size of machine word in bytes, i.e. for 32 bit systems it\n        should be defined to 4.\n\n    __TBB_Yield()\n        Signals OS that the current thread is willing to relinquish the remainder\n        of its time quantum.\n\n    __TBB_full_memory_fence()\n        Must prevent all memory operations from being reordered across it (both\n        by hardware and compiler). All such fences must be totally ordered (or\n        sequentially consistent).\n\n    __TBB_machine_cmpswp4( volatile void *ptr, int32_t value, int32_t comparand )\n        Must be provided if __TBB_USE_FENCED_ATOMICS is not set.\n\n    __TBB_machine_cmpswp8( volatile void *ptr, int32_t value, int64_t comparand )\n        Must be provided for 64-bit architectures if __TBB_USE_FENCED_ATOMICS is not set,\n        and for 32-bit architectures if __TBB_64BIT_ATOMICS is set\n\n    __TBB_machine_<op><S><fence>(...), where\n        <op> = {cmpswp, fetchadd, fetchstore}\n        <S> = {1, 2, 4, 8}\n        <fence> = {full_fence, acquire, release, relaxed}\n        Must be provided if __TBB_USE_FENCED_ATOMICS is set.\n\n    __TBB_control_consistency_helper()\n        Bridges the memory-semantics gap between architectures providing only\n        implicit C++0x \"consume\" semantics (like Power Architecture) and those\n        also implicitly obeying control dependencies (like IA-64 architecture).\n        It must be used only in conditional code where the condition is itself\n        data-dependent, and will then make subsequent code behave as if the\n        original data dependency were acquired.\n        It needs only a compiler fence where implied by the architecture\n        either specifically (like IA-64 architecture) or because generally stronger\n        \"acquire\" semantics are enforced (like x86).\n        It is always valid, though potentially suboptimal, to replace\n        control with acquire on the load and then remove the helper.\n\n    __TBB_acquire_consistency_helper(), __TBB_release_consistency_helper()\n        Must be provided if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE is set.\n        Enforce acquire and release semantics in generic implementations of fenced\n        store and load operations. Depending on the particular architecture/compiler\n        combination they may be a hardware fence, a compiler fence, both or nothing.\n **/\n\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\nnamespace internal { //< @cond INTERNAL\n\n////////////////////////////////////////////////////////////////////////////////\n// Overridable helpers declarations\n//\n// A machine/*.h file may choose to define these templates, otherwise it must\n// request default implementation by setting appropriate __TBB_USE_GENERIC_XXX macro(s).\n//\ntemplate <typename T, std::size_t S>\nstruct machine_load_store;\n\ntemplate <typename T, std::size_t S>\nstruct machine_load_store_relaxed;\n\ntemplate <typename T, std::size_t S>\nstruct machine_load_store_seq_cst;\n//\n// End of overridable helpers declarations\n////////////////////////////////////////////////////////////////////////////////\n\ntemplate<size_t S> struct atomic_selector;\n\ntemplate<> struct atomic_selector<1> {\n    typedef int8_t word;\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\ntemplate<> struct atomic_selector<2> {\n    typedef int16_t word;\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\ntemplate<> struct atomic_selector<4> {\n#if _MSC_VER && !_WIN64\n    // Work-around that avoids spurious /Wp64 warnings\n    typedef intptr_t word;\n#else\n    typedef int32_t word;\n#endif\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\ntemplate<> struct atomic_selector<8> {\n    typedef int64_t word;\n    inline static word fetch_store ( volatile void* location, word value );\n};\n\n}} //< namespaces internal @endcond, tbb\n\n#define __TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(M)                                        \\\n    inline void __TBB_machine_generic_store8##M(volatile void *ptr, int64_t value) {         \\\n        for(;;) {                                                                            \\\n            int64_t result = *(volatile int64_t *)ptr;                                       \\\n            if( __TBB_machine_cmpswp8##M(ptr,value,result)==result ) break;                  \\\n        }                                                                                    \\\n    }                                                                                        \\\n\n#define __TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(M)                                         \\\n    inline int64_t __TBB_machine_generic_load8##M(const volatile void *ptr) {                \\\n        /* Comparand and new value may be anything, they only must be equal, and      */     \\\n        /* the value should have a low probability to be actually found in 'location'.*/     \\\n        const int64_t anyvalue = 2305843009213693951LL;                                      \\\n        return __TBB_machine_cmpswp8##M(const_cast<volatile void *>(ptr),anyvalue,anyvalue); \\\n    }                                                                                        \\\n\n// The set of allowed values for __TBB_ENDIANNESS (see above for details)\n#define __TBB_ENDIAN_UNSUPPORTED -1\n#define __TBB_ENDIAN_LITTLE       0\n#define __TBB_ENDIAN_BIG          1\n#define __TBB_ENDIAN_DETECT       2\n\n#if _WIN32||_WIN64\n\n#ifdef _MANAGED\n#pragma managed(push, off)\n#endif\n\n    #if __MINGW64__ || __MINGW32__\n        extern \"C\" __declspec(dllimport) int __stdcall SwitchToThread( void );\n        #define __TBB_Yield()  SwitchToThread()\n        #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)\n            #include \"machine/gcc_generic.h\"\n        #elif __MINGW64__\n            #include \"machine/linux_intel64.h\"\n        #elif __MINGW32__\n            #include \"machine/linux_ia32.h\"\n        #endif\n    #elif (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #elif defined(_M_IX86) && !defined(__TBB_WIN32_USE_CL_BUILTINS)\n        #include \"machine/windows_ia32.h\"\n    #elif defined(_M_X64) \n        #include \"machine/windows_intel64.h\"\n    #elif defined(_XBOX)\n        #include \"machine/xbox360_ppc.h\"\n    #elif defined(_M_ARM) || defined(__TBB_WIN32_USE_CL_BUILTINS)\n        #include \"machine/msvc_armv7.h\"\n    #endif\n\n#ifdef _MANAGED\n#pragma managed(pop)\n#endif\n\n#elif __TBB_DEFINE_MIC\n\n    #include \"machine/mic_common.h\"\n    #if (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #else\n        #include \"machine/linux_intel64.h\"\n    #endif\n\n#elif __linux__ || __FreeBSD__ || __NetBSD__\n\n    #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/gcc_generic.h\"\n    #elif (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #elif __i386__\n        #include \"machine/linux_ia32.h\"\n    #elif __x86_64__\n        #include \"machine/linux_intel64.h\"\n    #elif __ia64__\n        #include \"machine/linux_ia64.h\"\n    #elif __powerpc__\n        #include \"machine/mac_ppc.h\"\n    #elif __arm__\n        #include \"machine/gcc_armv7.h\"\n    #elif __TBB_GCC_BUILTIN_ATOMICS_PRESENT\n        #include \"machine/gcc_generic.h\"\n    #endif\n    #include \"machine/linux_common.h\"\n\n#elif __APPLE__\n    //TODO:  TBB_USE_GCC_BUILTINS is not used for Mac, Sun, Aix\n    #if (TBB_USE_ICC_BUILTINS && __TBB_ICC_BUILTIN_ATOMICS_PRESENT)\n        #include \"machine/icc_generic.h\"\n    #elif __TBB_x86_32\n        #include \"machine/linux_ia32.h\"\n    #elif __TBB_x86_64\n        #include \"machine/linux_intel64.h\"\n    #elif __POWERPC__\n        #include \"machine/mac_ppc.h\"\n    #endif\n    #include \"machine/macos_common.h\"\n\n#elif _AIX\n\n    #include \"machine/ibm_aix51.h\"\n\n#elif __sun || __SUNPRO_CC\n\n    #define __asm__ asm\n    #define __volatile__ volatile\n\n    #if __i386  || __i386__\n        #include \"machine/linux_ia32.h\"\n    #elif __x86_64__\n        #include \"machine/linux_intel64.h\"\n    #elif __sparc\n        #include \"machine/sunos_sparc.h\"\n    #endif\n    #include <sched.h>\n\n    #define __TBB_Yield() sched_yield()\n\n#endif /* OS selection */\n\n#ifndef __TBB_64BIT_ATOMICS\n    #define __TBB_64BIT_ATOMICS 1\n#endif\n\n//TODO: replace usage of these functions with usage of tbb::atomic, and then remove them\n//TODO: map functions with W suffix to use cast to tbb::atomic and according op, i.e. as_atomic().op()\n// Special atomic functions\n#if __TBB_USE_FENCED_ATOMICS\n    #define __TBB_machine_cmpswp1   __TBB_machine_cmpswp1full_fence\n    #define __TBB_machine_cmpswp2   __TBB_machine_cmpswp2full_fence\n    #define __TBB_machine_cmpswp4   __TBB_machine_cmpswp4full_fence\n    #define __TBB_machine_cmpswp8   __TBB_machine_cmpswp8full_fence\n\n    #if __TBB_WORDSIZE==8\n        #define __TBB_machine_fetchadd8             __TBB_machine_fetchadd8full_fence\n        #define __TBB_machine_fetchstore8           __TBB_machine_fetchstore8full_fence\n        #define __TBB_FetchAndAddWrelease(P,V)      __TBB_machine_fetchadd8release(P,V)\n        #define __TBB_FetchAndIncrementWacquire(P)  __TBB_machine_fetchadd8acquire(P,1)\n        #define __TBB_FetchAndDecrementWrelease(P)  __TBB_machine_fetchadd8release(P,(-1))\n    #else\n        #define __TBB_machine_fetchadd4             __TBB_machine_fetchadd4full_fence\n        #define __TBB_machine_fetchstore4           __TBB_machine_fetchstore4full_fence\n        #define __TBB_FetchAndAddWrelease(P,V)      __TBB_machine_fetchadd4release(P,V)\n        #define __TBB_FetchAndIncrementWacquire(P)  __TBB_machine_fetchadd4acquire(P,1)\n        #define __TBB_FetchAndDecrementWrelease(P)  __TBB_machine_fetchadd4release(P,(-1))\n    #endif /* __TBB_WORDSIZE==4 */\n#else /* !__TBB_USE_FENCED_ATOMICS */\n    #define __TBB_FetchAndAddWrelease(P,V)      __TBB_FetchAndAddW(P,V)\n    #define __TBB_FetchAndIncrementWacquire(P)  __TBB_FetchAndAddW(P,1)\n    #define __TBB_FetchAndDecrementWrelease(P)  __TBB_FetchAndAddW(P,(-1))\n#endif /* !__TBB_USE_FENCED_ATOMICS */\n\n#if __TBB_WORDSIZE==4\n    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp4(P,V,C)\n    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd4(P,V)\n    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore4(P,V)\n#elif  __TBB_WORDSIZE==8\n    #if __TBB_USE_GENERIC_DWORD_LOAD_STORE || __TBB_USE_GENERIC_DWORD_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_STORE\n        #error These macros should only be used on 32-bit platforms.\n    #endif\n\n    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp8(P,V,C)\n    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd8(P,V)\n    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore8(P,V)\n#else /* __TBB_WORDSIZE != 8 */\n    #error Unsupported machine word size.\n#endif /* __TBB_WORDSIZE */\n\n#ifndef __TBB_Pause\n    inline void __TBB_Pause(int32_t) {\n        __TBB_Yield();\n    }\n#endif\n\nnamespace tbb {\n\n//! Sequentially consistent full memory fence.\ninline void atomic_fence () { __TBB_full_memory_fence(); }\n\nnamespace internal { //< @cond INTERNAL\n\n//! Class that implements exponential backoff.\n/** See implementation of spin_wait_while_eq for an example. */\nclass atomic_backoff : no_copy {\n    //! Time delay, in units of \"pause\" instructions.\n    /** Should be equal to approximately the number of \"pause\" instructions\n        that take the same time as an context switch. Must be a power of two.*/\n    static const int32_t LOOPS_BEFORE_YIELD = 16;\n    int32_t count;\npublic:\n    // In many cases, an object of this type is initialized eagerly on hot path,\n    // as in for(atomic_backoff b; ; b.pause()) { /*loop body*/ }\n    // For this reason, the construction cost must be very small!\n    atomic_backoff() : count(1) {}\n    // This constructor pauses immediately; do not use on hot paths!\n    atomic_backoff( bool ) : count(1) { pause(); }\n\n    //! Pause for a while.\n    void pause() {\n        if( count<=LOOPS_BEFORE_YIELD ) {\n            __TBB_Pause(count);\n            // Pause twice as long the next time.\n            count*=2;\n        } else {\n            // Pause is so long that we might as well yield CPU to scheduler.\n            __TBB_Yield();\n        }\n    }\n\n    //! Pause for a few times and return false if saturated.\n    bool bounded_pause() {\n        __TBB_Pause(count);\n        if( count<LOOPS_BEFORE_YIELD ) {\n            // Pause twice as long the next time.\n            count*=2;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    void reset() {\n        count = 1;\n    }\n};\n\n//! Spin WHILE the value of the variable is equal to a given value\n/** T and U should be comparable types. */\ntemplate<typename T, typename U>\nvoid spin_wait_while_eq( const volatile T& location, U value ) {\n    atomic_backoff backoff;\n    while( location==value ) backoff.pause();\n}\n\n//! Spin UNTIL the value of the variable is equal to a given value\n/** T and U should be comparable types. */\ntemplate<typename T, typename U>\nvoid spin_wait_until_eq( const volatile T& location, const U value ) {\n    atomic_backoff backoff;\n    while( location!=value ) backoff.pause();\n}\n\ntemplate <typename predicate_type>\nvoid spin_wait_while(predicate_type condition){\n    atomic_backoff backoff;\n    while( condition() ) backoff.pause();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Generic compare-and-swap applied to only a part of a machine word.\n//\n#ifndef __TBB_ENDIANNESS\n#define __TBB_ENDIANNESS __TBB_ENDIAN_DETECT\n#endif\n\n#if __TBB_USE_GENERIC_PART_WORD_CAS && __TBB_ENDIANNESS==__TBB_ENDIAN_UNSUPPORTED\n#error Generic implementation of part-word CAS may not be used with __TBB_ENDIAN_UNSUPPORTED\n#endif\n\n#if __TBB_ENDIANNESS!=__TBB_ENDIAN_UNSUPPORTED\n//\n// This function is the only use of __TBB_ENDIANNESS.\n// The following restrictions/limitations apply for this operation:\n//  - T must be an integer type of at most 4 bytes for the casts and calculations to work\n//  - T must also be less than 4 bytes to avoid compiler warnings when computing mask\n//      (and for the operation to be useful at all, so no workaround is applied)\n//  - the architecture must consistently use either little-endian or big-endian (same for all locations)\n//\n// TODO: static_assert for the type requirements stated above\ntemplate<typename T>\ninline T __TBB_MaskedCompareAndSwap (volatile T * const ptr, const T value, const T comparand ) {\n    struct endianness{ static bool is_big_endian(){\n        #if __TBB_ENDIANNESS==__TBB_ENDIAN_DETECT\n            const uint32_t probe = 0x03020100;\n            return (((const char*)(&probe))[0]==0x03);\n        #elif __TBB_ENDIANNESS==__TBB_ENDIAN_BIG || __TBB_ENDIANNESS==__TBB_ENDIAN_LITTLE\n            return __TBB_ENDIANNESS==__TBB_ENDIAN_BIG;\n        #else\n            #error Unexpected value of __TBB_ENDIANNESS\n        #endif\n    }};\n\n    const uint32_t byte_offset            = (uint32_t) ((uintptr_t)ptr & 0x3);\n    volatile uint32_t * const aligned_ptr = (uint32_t*)((uintptr_t)ptr - byte_offset );\n\n    // location of T within uint32_t for a C++ shift operation\n    const uint32_t bits_to_shift     = 8*(endianness::is_big_endian() ? (4 - sizeof(T) - (byte_offset)) : byte_offset);\n    const uint32_t mask              = (((uint32_t)1<<(sizeof(T)*8)) - 1 )<<bits_to_shift;\n    // for signed T, any sign extension bits in cast value/comparand are immediately clipped by mask\n    const uint32_t shifted_comparand = ((uint32_t)comparand << bits_to_shift)&mask;\n    const uint32_t shifted_value     = ((uint32_t)value     << bits_to_shift)&mask;\n\n    for( atomic_backoff b;;b.pause() ) {\n        const uint32_t surroundings  = *aligned_ptr & ~mask ; // may have changed during the pause\n        const uint32_t big_comparand = surroundings | shifted_comparand ;\n        const uint32_t big_value     = surroundings | shifted_value     ;\n        // __TBB_machine_cmpswp4 presumed to have full fence.\n        // Cast shuts up /Wp64 warning\n        const uint32_t big_result = (uint32_t)__TBB_machine_cmpswp4( aligned_ptr, big_value, big_comparand );\n        if( big_result == big_comparand                    // CAS succeeded\n          || ((big_result ^ big_comparand) & mask) != 0)   // CAS failed and the bits of interest have changed\n        {\n            return T((big_result & mask) >> bits_to_shift);\n        }\n        else continue;                                     // CAS failed but the bits of interest were not changed\n    }\n}\n#endif // __TBB_ENDIANNESS!=__TBB_ENDIAN_UNSUPPORTED\n////////////////////////////////////////////////////////////////////////////////\n\ntemplate<size_t S, typename T>\ninline T __TBB_CompareAndSwapGeneric (volatile void *ptr, T value, T comparand );\n\ntemplate<>\ninline int8_t __TBB_CompareAndSwapGeneric <1,int8_t> (volatile void *ptr, int8_t value, int8_t comparand ) {\n#if __TBB_USE_GENERIC_PART_WORD_CAS\n    return __TBB_MaskedCompareAndSwap<int8_t>((volatile int8_t *)ptr,value,comparand);\n#else\n    return __TBB_machine_cmpswp1(ptr,value,comparand);\n#endif\n}\n\ntemplate<>\ninline int16_t __TBB_CompareAndSwapGeneric <2,int16_t> (volatile void *ptr, int16_t value, int16_t comparand ) {\n#if __TBB_USE_GENERIC_PART_WORD_CAS\n    return __TBB_MaskedCompareAndSwap<int16_t>((volatile int16_t *)ptr,value,comparand);\n#else\n    return __TBB_machine_cmpswp2(ptr,value,comparand);\n#endif\n}\n\ntemplate<>\ninline int32_t __TBB_CompareAndSwapGeneric <4,int32_t> (volatile void *ptr, int32_t value, int32_t comparand ) {\n    // Cast shuts up /Wp64 warning\n    return (int32_t)__TBB_machine_cmpswp4(ptr,value,comparand);\n}\n\n#if __TBB_64BIT_ATOMICS\ntemplate<>\ninline int64_t __TBB_CompareAndSwapGeneric <8,int64_t> (volatile void *ptr, int64_t value, int64_t comparand ) {\n    return __TBB_machine_cmpswp8(ptr,value,comparand);\n}\n#endif\n\ntemplate<size_t S, typename T>\ninline T __TBB_FetchAndAddGeneric (volatile void *ptr, T addend) {\n    T result;\n    for( atomic_backoff b;;b.pause() ) {\n        result = *reinterpret_cast<volatile T *>(ptr);\n        // __TBB_CompareAndSwapGeneric presumed to have full fence.\n        if( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result )\n            break;\n    }\n    return result;\n}\n\ntemplate<size_t S, typename T>\ninline T __TBB_FetchAndStoreGeneric (volatile void *ptr, T value) {\n    T result;\n    for( atomic_backoff b;;b.pause() ) {\n        result = *reinterpret_cast<volatile T *>(ptr);\n        // __TBB_CompareAndSwapGeneric presumed to have full fence.\n        if( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result )\n            break;\n    }\n    return result;\n}\n\n#if __TBB_USE_GENERIC_PART_WORD_CAS\n#define __TBB_machine_cmpswp1 tbb::internal::__TBB_CompareAndSwapGeneric<1,int8_t>\n#define __TBB_machine_cmpswp2 tbb::internal::__TBB_CompareAndSwapGeneric<2,int16_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_PART_WORD_FETCH_ADD\n#define __TBB_machine_fetchadd1 tbb::internal::__TBB_FetchAndAddGeneric<1,int8_t>\n#define __TBB_machine_fetchadd2 tbb::internal::__TBB_FetchAndAddGeneric<2,int16_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_ADD\n#define __TBB_machine_fetchadd4 tbb::internal::__TBB_FetchAndAddGeneric<4,int32_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_ADD\n#define __TBB_machine_fetchadd8 tbb::internal::__TBB_FetchAndAddGeneric<8,int64_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_PART_WORD_FETCH_STORE\n#define __TBB_machine_fetchstore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,int8_t>\n#define __TBB_machine_fetchstore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,int16_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_STORE\n#define __TBB_machine_fetchstore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,int32_t>\n#endif\n\n#if __TBB_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_DWORD_FETCH_STORE\n#define __TBB_machine_fetchstore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,int64_t>\n#endif\n\n#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE\n#define __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(S)                                             \\\n    atomic_selector<S>::word atomic_selector<S>::fetch_store ( volatile void* location, word value ) {  \\\n        return __TBB_machine_fetchstore##S( location, value );                                          \\\n    }\n\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(1)\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(2)\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(4)\n__TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(8)\n\n#undef __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE\n#endif /* __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */\n\n#if __TBB_USE_GENERIC_DWORD_LOAD_STORE\n/*TODO: find a more elegant way to handle function names difference*/\n#if ! __TBB_USE_FENCED_ATOMICS\n    /* This name forwarding is needed for generic implementation of\n     * load8/store8 defined below (via macro) to pick the right CAS function*/\n    #define   __TBB_machine_cmpswp8full_fence __TBB_machine_cmpswp8\n#endif\n__TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(full_fence)\n__TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(full_fence)\n\n#if ! __TBB_USE_FENCED_ATOMICS\n    #undef   __TBB_machine_cmpswp8full_fence\n#endif\n\n#define __TBB_machine_store8 tbb::internal::__TBB_machine_generic_store8full_fence\n#define __TBB_machine_load8  tbb::internal::__TBB_machine_generic_load8full_fence\n#endif /* __TBB_USE_GENERIC_DWORD_LOAD_STORE */\n\n#if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE\n/** Fenced operations use volatile qualifier to prevent compiler from optimizing\n    them out, and on architectures with weak memory ordering to induce compiler\n    to generate code with appropriate acquire/release semantics.\n    On architectures like IA32, Intel64 (and likely Sparc TSO) volatile has\n    no effect on code gen, and consistency helpers serve as a compiler fence (the\n    latter being true for IA64/gcc as well to fix a bug in some gcc versions).\n    This code assumes that the generated instructions will operate atomically,\n    which typically requires a type that can be moved in a single instruction,\n    cooperation from the compiler for effective use of such an instruction,\n    and appropriate alignment of the data. **/\ntemplate <typename T, size_t S>\nstruct machine_load_store {\n    static T load_with_acquire ( const volatile T& location ) {\n        T to_return = location;\n        __TBB_acquire_consistency_helper();\n        return to_return;\n    }\n    static void store_with_release ( volatile T &location, T value ) {\n        __TBB_release_consistency_helper();\n        location = value;\n    }\n};\n\n//in general, plain load and store of 32bit compiler is not atomic for 64bit types\n#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS\ntemplate <typename T>\nstruct machine_load_store<T,8> {\n    static T load_with_acquire ( const volatile T& location ) {\n        return (T)__TBB_machine_load8( (const volatile void*)&location );\n    }\n    static void store_with_release ( volatile T& location, T value ) {\n        __TBB_machine_store8( (volatile void*)&location, (int64_t)value );\n    }\n};\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n#endif /* __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE */\n\n#if __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE\ntemplate <typename T, size_t S>\nstruct machine_load_store_seq_cst {\n    static T load ( const volatile T& location ) {\n        __TBB_full_memory_fence();\n        return machine_load_store<T,S>::load_with_acquire( location );\n    }\n#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE\n    static void store ( volatile T &location, T value ) {\n        atomic_selector<S>::fetch_store( (volatile void*)&location, (typename atomic_selector<S>::word)value );\n    }\n#else /* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */\n    static void store ( volatile T &location, T value ) {\n        machine_load_store<T,S>::store_with_release( location, value );\n        __TBB_full_memory_fence();\n    }\n#endif /* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */\n};\n\n#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS\n/** The implementation does not use functions __TBB_machine_load8/store8 as they\n    are not required to be sequentially consistent. **/\ntemplate <typename T>\nstruct machine_load_store_seq_cst<T,8> {\n    static T load ( const volatile T& location ) {\n        // Comparand and new value may be anything, they only must be equal, and\n        // the value should have a low probability to be actually found in 'location'.\n        const int64_t anyvalue = 2305843009213693951LL;\n        return __TBB_machine_cmpswp8( (volatile void*)const_cast<volatile T*>(&location), anyvalue, anyvalue );\n    }\n    static void store ( volatile T &location, T value ) {\n        int64_t result = (volatile int64_t&)location;\n        while ( __TBB_machine_cmpswp8((volatile void*)&location, (int64_t)value, result) != result )\n            result = (volatile int64_t&)location;\n    }\n};\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n#endif /*__TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE */\n\n#if __TBB_USE_GENERIC_RELAXED_LOAD_STORE\n// Relaxed operations add volatile qualifier to prevent compiler from optimizing them out.\n/** Volatile should not incur any additional cost on IA32, Intel64, and Sparc TSO\n    architectures. However on architectures with weak memory ordering compiler may\n    generate code with acquire/release semantics for operations on volatile data. **/\ntemplate <typename T, size_t S>\nstruct machine_load_store_relaxed {\n    static inline T load ( const volatile T& location ) {\n        return location;\n    }\n    static inline void store ( volatile T& location, T value ) {\n        location = value;\n    }\n};\n\n#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS\ntemplate <typename T>\nstruct machine_load_store_relaxed<T,8> {\n    static inline T load ( const volatile T& location ) {\n        return (T)__TBB_machine_load8( (const volatile void*)&location );\n    }\n    static inline void store ( volatile T& location, T value ) {\n        __TBB_machine_store8( (volatile void*)&location, (int64_t)value );\n    }\n};\n#endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */\n#endif /* __TBB_USE_GENERIC_RELAXED_LOAD_STORE */\n\n#undef __TBB_WORDSIZE //this macro is forbidden to use outside of atomic machinery\n\ntemplate<typename T>\ninline T __TBB_load_with_acquire(const volatile T &location) {\n    return machine_load_store<T,sizeof(T)>::load_with_acquire( location );\n}\ntemplate<typename T, typename V>\ninline void __TBB_store_with_release(volatile T& location, V value) {\n    machine_load_store<T,sizeof(T)>::store_with_release( location, T(value) );\n}\n//! Overload that exists solely to avoid /Wp64 warnings.\ninline void __TBB_store_with_release(volatile size_t& location, size_t value) {\n    machine_load_store<size_t,sizeof(size_t)>::store_with_release( location, value );\n}\n\ntemplate<typename T>\ninline T __TBB_load_full_fence(const volatile T &location) {\n    return machine_load_store_seq_cst<T,sizeof(T)>::load( location );\n}\ntemplate<typename T, typename V>\ninline void __TBB_store_full_fence(volatile T& location, V value) {\n    machine_load_store_seq_cst<T,sizeof(T)>::store( location, T(value) );\n}\n//! Overload that exists solely to avoid /Wp64 warnings.\ninline void __TBB_store_full_fence(volatile size_t& location, size_t value) {\n    machine_load_store_seq_cst<size_t,sizeof(size_t)>::store( location, value );\n}\n\ntemplate<typename T>\ninline T __TBB_load_relaxed (const volatile T& location) {\n    return machine_load_store_relaxed<T,sizeof(T)>::load( const_cast<T&>(location) );\n}\ntemplate<typename T, typename V>\ninline void __TBB_store_relaxed ( volatile T& location, V value ) {\n    machine_load_store_relaxed<T,sizeof(T)>::store( const_cast<T&>(location), T(value) );\n}\n//! Overload that exists solely to avoid /Wp64 warnings.\ninline void __TBB_store_relaxed ( volatile size_t& location, size_t value ) {\n    machine_load_store_relaxed<size_t,sizeof(size_t)>::store( const_cast<size_t&>(location), value );\n}\n\n// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as\n// strict as type T.  The type should have a trivial default constructor and destructor, so that\n// arrays of that type can be declared without initializers.\n// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands\n// to a type bigger than T.\n// The default definition here works on machines where integers are naturally aligned and the\n// strictest alignment is 64.\n#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict\n\n#if __TBB_ATTRIBUTE_ALIGNED_PRESENT\n\n#define __TBB_DefineTypeWithAlignment(PowerOf2)       \\\nstruct __TBB_machine_type_with_alignment_##PowerOf2 { \\\n    uint32_t member[PowerOf2/sizeof(uint32_t)];       \\\n} __attribute__((aligned(PowerOf2)));\n#define __TBB_alignof(T) __alignof__(T)\n\n#elif __TBB_DECLSPEC_ALIGN_PRESENT\n\n#define __TBB_DefineTypeWithAlignment(PowerOf2)       \\\n__declspec(align(PowerOf2))                           \\\nstruct __TBB_machine_type_with_alignment_##PowerOf2 { \\\n    uint32_t member[PowerOf2/sizeof(uint32_t)];       \\\n};\n#define __TBB_alignof(T) __alignof(T)\n\n#else /* A compiler with unknown syntax for data alignment */\n#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T)\n#endif\n\n/* Now declare types aligned to useful powers of two */\n// TODO: Is __TBB_DefineTypeWithAlignment(8) needed on 32 bit platforms?\n__TBB_DefineTypeWithAlignment(16)\n__TBB_DefineTypeWithAlignment(32)\n__TBB_DefineTypeWithAlignment(64)\n\ntypedef __TBB_machine_type_with_alignment_64 __TBB_machine_type_with_strictest_alignment;\n\n// Primary template is a declaration of incomplete type so that it fails with unknown alignments\ntemplate<size_t N> struct type_with_alignment;\n\n// Specializations for allowed alignments\ntemplate<> struct type_with_alignment<1> { char member; };\ntemplate<> struct type_with_alignment<2> { uint16_t member; };\ntemplate<> struct type_with_alignment<4> { uint32_t member; };\ntemplate<> struct type_with_alignment<8> { uint64_t member; };\ntemplate<> struct type_with_alignment<16> {__TBB_machine_type_with_alignment_16 member; };\ntemplate<> struct type_with_alignment<32> {__TBB_machine_type_with_alignment_32 member; };\ntemplate<> struct type_with_alignment<64> {__TBB_machine_type_with_alignment_64 member; };\n\n#if __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN\n//! Work around for bug in GNU 3.2 and MSVC compilers.\n/** Bug is that compiler sometimes returns 0 for __alignof(T) when T has not yet been instantiated.\n    The work-around forces instantiation by forcing computation of sizeof(T) before __alignof(T). */\ntemplate<size_t Size, typename T>\nstruct work_around_alignment_bug {\n    static const size_t alignment = __TBB_alignof(T);\n};\n#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment>\n#else\n#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__TBB_alignof(T)>\n#endif  /* __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN */\n\n#endif  /* __TBB_TypeWithAlignmentAtLeastAsStrict */\n\n// Template class here is to avoid instantiation of the static data for modules that don't use it\ntemplate<typename T>\nstruct reverse {\n    static const T byte_table[256];\n};\n// An efficient implementation of the reverse function utilizes a 2^8 lookup table holding the bit-reversed\n// values of [0..2^8 - 1]. Those values can also be computed on the fly at a slightly higher cost.\ntemplate<typename T>\nconst T reverse<T>::byte_table[256] = {\n    0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,\n    0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,\n    0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,\n    0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,\n    0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,\n    0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,\n    0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,\n    0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,\n    0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,\n    0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,\n    0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,\n    0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,\n    0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,\n    0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,\n    0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,\n    0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF\n};\n\n} // namespace internal @endcond\n} // namespace tbb\n\n// Preserving access to legacy APIs\nusing tbb::internal::__TBB_load_with_acquire;\nusing tbb::internal::__TBB_store_with_release;\n\n// Mapping historically used names to the ones expected by atomic_load_store_traits\n#define __TBB_load_acquire  __TBB_load_with_acquire\n#define __TBB_store_release __TBB_store_with_release\n\n#ifndef __TBB_Log2\ninline intptr_t __TBB_Log2( uintptr_t x ) {\n    if( x==0 ) return -1;\n    intptr_t result = 0;\n\n#if !defined(_M_ARM)\n    uintptr_t tmp_;\n    if( sizeof(x)>4 && (tmp_ = ((uint64_t)x)>>32) ) { x=tmp_; result += 32; }\n#endif\n    if( uintptr_t tmp = x>>16 ) { x=tmp; result += 16; }\n    if( uintptr_t tmp = x>>8 )  { x=tmp; result += 8; }\n    if( uintptr_t tmp = x>>4 )  { x=tmp; result += 4; }\n    if( uintptr_t tmp = x>>2 )  { x=tmp; result += 2; }\n\n    return (x&2)? result+1: result;\n}\n#endif\n\n#ifndef __TBB_AtomicOR\ninline void __TBB_AtomicOR( volatile void *operand, uintptr_t addend ) {\n    for( tbb::internal::atomic_backoff b;;b.pause() ) {\n        uintptr_t tmp = *(volatile uintptr_t *)operand;\n        uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);\n        if( result==tmp ) break;\n    }\n}\n#endif\n\n#ifndef __TBB_AtomicAND\ninline void __TBB_AtomicAND( volatile void *operand, uintptr_t addend ) {\n    for( tbb::internal::atomic_backoff b;;b.pause() ) {\n        uintptr_t tmp = *(volatile uintptr_t *)operand;\n        uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);\n        if( result==tmp ) break;\n    }\n}\n#endif\n\n#if __TBB_PREFETCHING\n#ifndef __TBB_cl_prefetch\n#error This platform does not define cache management primitives required for __TBB_PREFETCHING\n#endif\n\n#ifndef __TBB_cl_evict\n#define __TBB_cl_evict(p)\n#endif\n#endif\n\n#ifndef __TBB_Flag\ntypedef unsigned char __TBB_Flag;\n#endif\ntypedef __TBB_atomic __TBB_Flag __TBB_atomic_flag;\n\n#ifndef __TBB_TryLockByte\ninline bool __TBB_TryLockByte( __TBB_atomic_flag &flag ) {\n    return __TBB_machine_cmpswp1(&flag,1,0)==0;\n}\n#endif\n\n#ifndef __TBB_LockByte\ninline __TBB_Flag __TBB_LockByte( __TBB_atomic_flag& flag ) {\n    tbb::internal::atomic_backoff backoff;\n    while( !__TBB_TryLockByte(flag) ) backoff.pause();\n    return 0;\n}\n#endif\n\n#ifndef  __TBB_UnlockByte\n#define __TBB_UnlockByte(addr) __TBB_store_with_release((addr),0)\n#endif\n\n// lock primitives with TSX\n#if ( __TBB_x86_32 || __TBB_x86_64 )  /* only on ia32/intel64 */\ninline void __TBB_TryLockByteElidedCancel() { __TBB_machine_try_lock_elided_cancel(); }\n\ninline bool __TBB_TryLockByteElided( __TBB_atomic_flag& flag ) {\n    bool res = __TBB_machine_try_lock_elided( &flag )!=0;\n    // to avoid the \"lemming\" effect, we need to abort the transaction\n    // if  __TBB_machine_try_lock_elided returns false (i.e., someone else\n    // has acquired the mutex non-speculatively).\n    if( !res ) __TBB_TryLockByteElidedCancel();\n    return res;\n}\n\ninline void __TBB_LockByteElided( __TBB_atomic_flag& flag )\n{\n    for(;;) {\n        tbb::internal::spin_wait_while_eq( flag, 1 );\n        if( __TBB_machine_try_lock_elided( &flag ) )\n            return;\n        // Another thread acquired the lock \"for real\".\n        // To avoid the \"lemming\" effect, we abort the transaction.\n        __TBB_TryLockByteElidedCancel();\n    }\n}\n\ninline void __TBB_UnlockByteElided( __TBB_atomic_flag& flag ) {\n    __TBB_machine_unlock_elided( &flag );\n}\n#endif\n\n#ifndef __TBB_ReverseByte\ninline unsigned char __TBB_ReverseByte(unsigned char src) {\n    return tbb::internal::reverse<unsigned char>::byte_table[src];\n}\n#endif\n\ntemplate<typename T>\nT __TBB_ReverseBits(T src) {\n    T dst;\n    unsigned char *original = (unsigned char *) &src;\n    unsigned char *reversed = (unsigned char *) &dst;\n\n    for( int i = sizeof(T)-1; i >= 0; i-- )\n        reversed[i] = __TBB_ReverseByte( original[sizeof(T)-i-1] );\n\n    return dst;\n}\n\n#endif /* __TBB_machine_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tbb_profiling.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_profiling_H\n#define __TBB_profiling_H\n\nnamespace tbb {\n    namespace internal {\n\n        //\n        // This is not under __TBB_ITT_STRUCTURE_API because these values are used directly in flow_graph.h.\n        //\n\n        // include list of index names\n        #define TBB_STRING_RESOURCE(index_name,str) index_name,\n        enum string_index {\n           #include \"internal/_tbb_strings.h\"\n           NUM_STRINGS\n        };\n        #undef TBB_STRING_RESOURCE\n\n        enum itt_relation\n        {\n        __itt_relation_is_unknown = 0,\n        __itt_relation_is_dependent_on,         /**< \"A is dependent on B\" means that A cannot start until B completes */\n        __itt_relation_is_sibling_of,           /**< \"A is sibling of B\" means that A and B were created as a group */\n        __itt_relation_is_parent_of,            /**< \"A is parent of B\" means that A created B */\n        __itt_relation_is_continuation_of,      /**< \"A is continuation of B\" means that A assumes the dependencies of B */\n        __itt_relation_is_child_of,             /**< \"A is child of B\" means that A was created by B (inverse of is_parent_of) */\n        __itt_relation_is_continued_by,         /**< \"A is continued by B\" means that B assumes the dependencies of A (inverse of is_continuation_of) */\n        __itt_relation_is_predecessor_to        /**< \"A is predecessor to B\" means that B cannot start until A completes (inverse of is_dependent_on) */\n        };\n\n    }\n}\n\n// Check if the tools support is enabled\n#if (_WIN32||_WIN64||__linux__) && !__MINGW32__ && TBB_USE_THREADING_TOOLS\n\n#if _WIN32||_WIN64\n#include <stdlib.h>  /* mbstowcs_s */\n#endif\n#include \"tbb_stddef.h\"\n\nnamespace tbb {\n    namespace internal {\n\n#if _WIN32||_WIN64\n        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const wchar_t* name );\n        inline size_t multibyte_to_widechar( wchar_t* wcs, const char* mbs, size_t bufsize) {\n#if _MSC_VER>=1400\n            size_t len;\n            mbstowcs_s( &len, wcs, bufsize, mbs, _TRUNCATE );\n            return len;   // mbstowcs_s counts null terminator\n#else\n            size_t len = mbstowcs( wcs, mbs, bufsize );\n            if(wcs && len!=size_t(-1) )\n                wcs[len<bufsize-1? len: bufsize-1] = wchar_t('\\0');\n            return len+1; // mbstowcs does not count null terminator\n#endif\n        }\n#else\n        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const char* name );\n#endif\n    } // namespace internal\n} // namespace tbb\n\n//! Macro __TBB_DEFINE_PROFILING_SET_NAME(T) defines \"set_name\" methods for sync objects of type T\n/** Should be used in the \"tbb\" namespace only.\n    Don't place semicolon after it to avoid compiler warnings. **/\n#if _WIN32||_WIN64\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)                       \\\n        namespace profiling {                                                       \\\n            inline void set_name( sync_object_type& obj, const wchar_t* name ) {    \\\n                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \\\n            }                                                                       \\\n            inline void set_name( sync_object_type& obj, const char* name ) {       \\\n                size_t len = tbb::internal::multibyte_to_widechar(NULL, name, 0);   \\\n                wchar_t *wname = new wchar_t[len];                                  \\\n                tbb::internal::multibyte_to_widechar(wname, name, len);             \\\n                set_name( obj, wname );                                             \\\n                delete[] wname;                                                     \\\n            }                                                                       \\\n        }\n#else /* !WIN */\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)                       \\\n        namespace profiling {                                                       \\\n            inline void set_name( sync_object_type& obj, const char* name ) {       \\\n                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \\\n            }                                                                       \\\n        }\n#endif /* !WIN */\n\n#else /* no tools support */\n\n#if _WIN32||_WIN64\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)               \\\n        namespace profiling {                                               \\\n            inline void set_name( sync_object_type&, const wchar_t* ) {}    \\\n            inline void set_name( sync_object_type&, const char* ) {}       \\\n        }\n#else /* !WIN */\n    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)               \\\n        namespace profiling {                                               \\\n            inline void set_name( sync_object_type&, const char* ) {}       \\\n        }\n#endif /* !WIN */\n\n#endif /* no tools support */\n\n#include \"atomic.h\"\n// Need these to work regardless of tools support\nnamespace tbb {\n    namespace internal {\n\n        enum notify_type {prepare=0, cancel, acquired, releasing};\n\n        const uintptr_t NUM_NOTIFY_TYPES = 4; // set to # elements in enum above\n\n        void __TBB_EXPORTED_FUNC call_itt_notify_v5(int t, void *ptr);\n        void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3(void *dst, void *src);\n        void* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3(const void *src);\n        void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );\n#if __TBB_ITT_STRUCTURE_API\n        enum itt_domain_enum { ITT_DOMAIN_FLOW=0 };\n\n        void __TBB_EXPORTED_FUNC itt_make_task_group_v7( itt_domain_enum domain, void *group, unsigned long long group_extra,\n                                                         void *parent, unsigned long long parent_extra, string_index name_index );\n        void __TBB_EXPORTED_FUNC itt_metadata_str_add_v7( itt_domain_enum domain, void *addr, unsigned long long addr_extra,\n                                                          string_index key, const char *value );\n        void __TBB_EXPORTED_FUNC itt_relation_add_v7( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,\n                                                      itt_relation relation, void *addr1, unsigned long long addr1_extra );\n        void __TBB_EXPORTED_FUNC itt_task_begin_v7( itt_domain_enum domain, void *task, unsigned long long task_extra,\n                                                    void *parent, unsigned long long parent_extra, string_index name_index );\n        void __TBB_EXPORTED_FUNC itt_task_end_v7( itt_domain_enum domain );\n\n        void __TBB_EXPORTED_FUNC itt_region_begin_v9( itt_domain_enum domain, void *region, unsigned long long region_extra,\n                                                      void *parent, unsigned long long parent_extra, string_index name_index );\n        void __TBB_EXPORTED_FUNC itt_region_end_v9( itt_domain_enum domain, void *region, unsigned long long region_extra );\n#endif // __TBB_ITT_STRUCTURE_API\n\n        // two template arguments are to workaround /Wp64 warning with tbb::atomic specialized for unsigned type\n        template <typename T, typename U>\n        inline void itt_store_word_with_release(tbb::atomic<T>& dst, U src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n            itt_store_pointer_with_release_v3(&dst, (void *)uintptr_t(src));\n#else\n            dst = src;\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline T itt_load_word_with_acquire(const tbb::atomic<T>& src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n            // Workaround for overzealous compiler warnings\n            #pragma warning (push)\n            #pragma warning (disable: 4311)\n#endif\n            T result = (T)itt_load_pointer_with_acquire_v3(&src);\n#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)\n            #pragma warning (pop)\n#endif\n            return result;\n#else\n            return src;\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline void itt_store_word_with_release(T& dst, T src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n            itt_store_pointer_with_release_v3(&dst, (void *)src);\n#else\n            __TBB_store_with_release(dst, src);\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline T itt_load_word_with_acquire(const T& src) {\n#if TBB_USE_THREADING_TOOLS\n            // This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized\");\n            return (T)itt_load_pointer_with_acquire_v3(&src);\n#else\n            return __TBB_load_with_acquire(src);\n#endif // TBB_USE_THREADING_TOOLS\n        }\n\n        template <typename T>\n        inline void itt_hide_store_word(T& dst, T src) {\n#if TBB_USE_THREADING_TOOLS\n            //TODO: This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized\");\n            itt_store_pointer_with_release_v3(&dst, (void *)src);\n#else\n            dst = src;\n#endif\n        }\n\n        //TODO: rename to itt_hide_load_word_relaxed\n        template <typename T>\n        inline T itt_hide_load_word(const T& src) {\n#if TBB_USE_THREADING_TOOLS\n            //TODO: This assertion should be replaced with static_assert\n            __TBB_ASSERT(sizeof(T) == sizeof(void *), \"Type must be word-sized.\");\n            return (T)itt_load_pointer_v3(&src);\n#else\n            return src;\n#endif\n        }\n\n#if TBB_USE_THREADING_TOOLS\n        inline void call_itt_notify(notify_type t, void *ptr) {\n            call_itt_notify_v5((int)t, ptr);\n        }\n\n#else\n        inline void call_itt_notify(notify_type /*t*/, void * /*ptr*/) {}\n\n#endif // TBB_USE_THREADING_TOOLS\n\n#if __TBB_ITT_STRUCTURE_API\n        inline void itt_make_task_group( itt_domain_enum domain, void *group, unsigned long long group_extra,\n                                         void *parent, unsigned long long parent_extra, string_index name_index ) {\n            itt_make_task_group_v7( domain, group, group_extra, parent, parent_extra, name_index );\n        }\n\n        inline void itt_metadata_str_add( itt_domain_enum domain, void *addr, unsigned long long addr_extra,\n                                          string_index key, const char *value ) {\n            itt_metadata_str_add_v7( domain, addr, addr_extra, key, value );\n        }\n\n        inline void itt_relation_add( itt_domain_enum domain, void *addr0, unsigned long long addr0_extra,\n                                      itt_relation relation, void *addr1, unsigned long long addr1_extra ) {\n            itt_relation_add_v7( domain, addr0, addr0_extra, relation, addr1, addr1_extra );\n        }\n\n        inline void itt_task_begin( itt_domain_enum domain, void *task, unsigned long long task_extra,\n                                                        void *parent, unsigned long long parent_extra, string_index name_index ) {\n            itt_task_begin_v7( domain, task, task_extra, parent, parent_extra, name_index );\n        }\n\n        inline void itt_task_end( itt_domain_enum domain ) {\n            itt_task_end_v7( domain );\n        }\n\n        inline void itt_region_begin( itt_domain_enum domain, void *region, unsigned long long region_extra,\n                                      void *parent, unsigned long long parent_extra, string_index name_index ) {\n            itt_region_begin_v9( domain, region, region_extra, parent, parent_extra, name_index );\n        }\n\n        inline void itt_region_end( itt_domain_enum domain, void *region, unsigned long long region_extra  ) {\n            itt_region_end_v9( domain, region, region_extra );\n        }\n#endif // __TBB_ITT_STRUCTURE_API\n\n    } // namespace internal\n} // namespace tbb\n\n#endif /* __TBB_profiling_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tbb_stddef.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_tbb_stddef_H\n#define __TBB_tbb_stddef_H\n\n// Marketing-driven product version\n#define TBB_VERSION_MAJOR 4\n#define TBB_VERSION_MINOR 4\n\n// Engineering-focused interface version\n#define TBB_INTERFACE_VERSION 9003\n#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000\n\n// The oldest major interface version still supported\n// To be used in SONAME, manifests, etc.\n#define TBB_COMPATIBLE_INTERFACE_VERSION 2\n\n#define __TBB_STRING_AUX(x) #x\n#define __TBB_STRING(x) __TBB_STRING_AUX(x)\n\n// We do not need defines below for resource processing on windows\n#if !defined RC_INVOKED\n\n// Define groups for Doxygen documentation\n/**\n * @defgroup algorithms         Algorithms\n * @defgroup containers         Containers\n * @defgroup memory_allocation  Memory Allocation\n * @defgroup synchronization    Synchronization\n * @defgroup timing             Timing\n * @defgroup task_scheduling    Task Scheduling\n */\n\n// Simple text that is displayed on the main page of Doxygen documentation.\n/**\n * \\mainpage Main Page\n *\n * Click the tabs above for information about the\n * - <a href=\"./modules.html\">Modules</a> (groups of functionality) implemented by the library\n * - <a href=\"./annotated.html\">Classes</a> provided by the library\n * - <a href=\"./files.html\">Files</a> constituting the library.\n * .\n * Please note that significant part of TBB functionality is implemented in the form of\n * template functions, descriptions of which are not accessible on the <a href=\"./annotated.html\">Classes</a>\n * tab. Use <a href=\"./modules.html\">Modules</a> or <a href=\"./namespacemembers.html\">Namespace/Namespace Members</a>\n * tabs to find them.\n *\n * Additional pieces of information can be found here\n * - \\subpage concepts\n * .\n */\n\n/** \\page concepts TBB concepts\n\n    A concept is a set of requirements to a type, which are necessary and sufficient\n    for the type to model a particular behavior or a set of behaviors. Some concepts\n    are specific to a particular algorithm (e.g. algorithm body), while other ones\n    are common to several algorithms (e.g. range concept).\n\n    All TBB algorithms make use of different classes implementing various concepts.\n    Implementation classes are supplied by the user as type arguments of template\n    parameters and/or as objects passed as function call arguments. The library\n    provides predefined  implementations of some concepts (e.g. several kinds of\n    \\ref range_req \"ranges\"), while other ones must always be implemented by the user.\n\n    TBB defines a set of minimal requirements each concept must conform to. Here is\n    the list of different concepts hyperlinked to the corresponding requirements specifications:\n    - \\subpage range_req\n    - \\subpage parallel_do_body_req\n    - \\subpage parallel_for_body_req\n    - \\subpage parallel_reduce_body_req\n    - \\subpage parallel_scan_body_req\n    - \\subpage parallel_sort_iter_req\n**/\n\n// tbb_config.h should be included the first since it contains macro definitions used in other headers\n#include \"tbb_config.h\"\n\n#if _MSC_VER >=1400\n    #define __TBB_EXPORTED_FUNC   __cdecl\n    #define __TBB_EXPORTED_METHOD __thiscall\n#else\n    #define __TBB_EXPORTED_FUNC\n    #define __TBB_EXPORTED_METHOD\n#endif\n\n#if __INTEL_COMPILER || _MSC_VER\n#define __TBB_NOINLINE(decl) __declspec(noinline) decl\n#elif __GNUC__\n#define __TBB_NOINLINE(decl) decl __attribute__ ((noinline))\n#else\n#define __TBB_NOINLINE(decl) decl\n#endif\n\n#if __TBB_NOEXCEPT_PRESENT\n#define __TBB_NOEXCEPT(expression) noexcept(expression)\n#else\n#define __TBB_NOEXCEPT(expression)\n#endif\n\n#include <cstddef>      /* Need size_t and ptrdiff_t */\n\n#if _MSC_VER\n    #define __TBB_tbb_windef_H\n    #include \"internal/_tbb_windef.h\"\n    #undef __TBB_tbb_windef_H\n#endif\n#if !defined(_MSC_VER) || _MSC_VER>=1600\n    #include <stdint.h>\n#endif\n\n//! Type for an assertion handler\ntypedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );\n\n#if __TBBMALLOC_BUILD\nnamespace rml { namespace internal {\n #define __TBB_ASSERT_RELEASE(predicate,message) ((predicate)?((void)0) : rml::internal::assertion_failure(__FILE__,__LINE__,#predicate,message))\n#else\nnamespace tbb {\n #define __TBB_ASSERT_RELEASE(predicate,message) ((predicate)?((void)0) : tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))\n#endif\n\n    //! Set assertion handler and return previous value of it.\n    assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler );\n\n    //! Process an assertion failure.\n    /** Normally called from __TBB_ASSERT macro.\n        If assertion handler is null, print message for assertion failure and abort.\n        Otherwise call the assertion handler. */\n    void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment );\n\n#if __TBBMALLOC_BUILD\n}}  // namespace rml::internal\n#else\n} // namespace tbb\n#endif\n\n#if TBB_USE_ASSERT\n\n    //! Assert that x is true.\n    /** If x is false, print assertion failure message.\n        If the comment argument is not NULL, it is printed as part of the failure message.\n        The comment argument has no other effect. */\n    #define __TBB_ASSERT(predicate,message) __TBB_ASSERT_RELEASE(predicate,message)\n\n    #define __TBB_ASSERT_EX __TBB_ASSERT\n\n#else /* !TBB_USE_ASSERT */\n\n    //! No-op version of __TBB_ASSERT.\n    #define __TBB_ASSERT(predicate,comment) ((void)0)\n    //! \"Extended\" version is useful to suppress warnings if a variable is only used with an assert\n    #define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))\n\n#endif /* !TBB_USE_ASSERT */\n\n//! The namespace tbb contains all components of the library.\nnamespace tbb {\n\n    namespace internal {\n#if _MSC_VER && _MSC_VER<1600\n        typedef __int8 int8_t;\n        typedef __int16 int16_t;\n        typedef __int32 int32_t;\n        typedef __int64 int64_t;\n        typedef unsigned __int8 uint8_t;\n        typedef unsigned __int16 uint16_t;\n        typedef unsigned __int32 uint32_t;\n        typedef unsigned __int64 uint64_t;\n#else /* Posix */\n        using ::int8_t;\n        using ::int16_t;\n        using ::int32_t;\n        using ::int64_t;\n        using ::uint8_t;\n        using ::uint16_t;\n        using ::uint32_t;\n        using ::uint64_t;\n#endif /* Posix */\n    } // namespace internal\n\n    using std::size_t;\n    using std::ptrdiff_t;\n\n//! The function returns the interface version of the TBB shared library being used.\n/**\n * The version it returns is determined at runtime, not at compile/link time.\n * So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time.\n */\nextern \"C\" int __TBB_EXPORTED_FUNC TBB_runtime_interface_version();\n\n/**\n * @cond INTERNAL\n * @brief Identifiers declared inside namespace internal should never be used directly by client code.\n */\nnamespace internal {\n\n//! Compile-time constant that is upper bound on cache line/sector size.\n/** It should be used only in situations where having a compile-time upper\n    bound is more useful than a run-time exact answer.\n    @ingroup memory_allocation */\nconst size_t NFS_MaxLineSize = 128;\n\n/** Label for data that may be accessed from different threads, and that may eventually become wrapped\n    in a formal atomic type.\n\n    Note that no problems have yet been observed relating to the definition currently being empty,\n    even if at least \"volatile\" would seem to be in order to avoid data sometimes temporarily hiding\n    in a register (although \"volatile\" as a \"poor man's atomic\" lacks several other features of a proper\n    atomic, some of which are now provided instead through specialized functions).\n\n    Note that usage is intentionally compatible with a definition as qualifier \"volatile\",\n    both as a way to have the compiler help enforce use of the label and to quickly rule out\n    one potential issue.\n\n    Note however that, with some architecture/compiler combinations, e.g. on IA-64 architecture, \"volatile\"\n    also has non-portable memory semantics that are needlessly expensive for \"relaxed\" operations.\n\n    Note that this must only be applied to data that will not change bit patterns when cast to/from\n    an integral type of the same length; tbb::atomic must be used instead for, e.g., floating-point types.\n\n    TODO: apply wherever relevant **/\n#define __TBB_atomic // intentionally empty, see above\n\ntemplate<class T, size_t S, size_t R>\nstruct padded_base : T {\n    char pad[S - R];\n};\ntemplate<class T, size_t S> struct padded_base<T, S, 0> : T {};\n\n//! Pads type T to fill out to a multiple of cache line size.\ntemplate<class T, size_t S = NFS_MaxLineSize>\nstruct padded : padded_base<T, S, sizeof(T) % S> {};\n\n//! Extended variant of the standard offsetof macro\n/** The standard offsetof macro is not sufficient for TBB as it can be used for\n    POD-types only. The constant 0x1000 (not NULL) is necessary to appease GCC. **/\n#define __TBB_offsetof(class_name, member_name) \\\n    ((ptrdiff_t)&(reinterpret_cast<class_name*>(0x1000)->member_name) - 0x1000)\n\n//! Returns address of the object containing a member with the given name and address\n#define __TBB_get_object_ref(class_name, member_name, member_addr) \\\n    (*reinterpret_cast<class_name*>((char*)member_addr - __TBB_offsetof(class_name, member_name)))\n\n//! Throws std::runtime_error with what() returning error_code description prefixed with aux_info\nvoid __TBB_EXPORTED_FUNC handle_perror( int error_code, const char* aux_info );\n\n#if TBB_USE_EXCEPTIONS\n    #define __TBB_TRY try\n    #define __TBB_CATCH(e) catch(e)\n    #define __TBB_THROW(e) throw e\n    #define __TBB_RETHROW() throw\n#else /* !TBB_USE_EXCEPTIONS */\n    inline bool __TBB_false() { return false; }\n    #define __TBB_TRY\n    #define __TBB_CATCH(e) if ( tbb::internal::__TBB_false() )\n    #define __TBB_THROW(e) ((void)0)\n    #define __TBB_RETHROW() ((void)0)\n#endif /* !TBB_USE_EXCEPTIONS */\n\n//! Report a runtime warning.\nvoid __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... );\n\n#if TBB_USE_ASSERT\nstatic void* const poisoned_ptr = reinterpret_cast<void*>(-1);\n\n//! Set p to invalid pointer value.\n//  Also works for regular (non-__TBB_atomic) pointers.\ntemplate<typename T>\ninline void poison_pointer( T* __TBB_atomic & p ) { p = reinterpret_cast<T*>(poisoned_ptr); }\n\n/** Expected to be used in assertions only, thus no empty form is defined. **/\ntemplate<typename T>\ninline bool is_poisoned( T* p ) { return p == reinterpret_cast<T*>(poisoned_ptr); }\n#else\ntemplate<typename T>\ninline void poison_pointer( T* __TBB_atomic & ) {/*do nothing*/}\n#endif /* !TBB_USE_ASSERT */\n\n//! Cast between unrelated pointer types.\n/** This method should be used sparingly as a last resort for dealing with\n    situations that inherently break strict ISO C++ aliasing rules. */\n// T is a pointer type because it will be explicitly provided by the programmer as a template argument;\n// U is a referent type to enable the compiler to check that \"ptr\" is a pointer, deducing U in the process.\ntemplate<typename T, typename U>\ninline T punned_cast( U* ptr ) {\n    uintptr_t x = reinterpret_cast<uintptr_t>(ptr);\n    return reinterpret_cast<T>(x);\n}\n\n//! Base class for types that should not be assigned.\nclass no_assign {\n    // Deny assignment\n    void operator=( const no_assign& );\npublic:\n#if __GNUC__\n    //! Explicitly define default construction, because otherwise gcc issues gratuitous warning.\n    no_assign() {}\n#endif /* __GNUC__ */\n};\n\n//! Base class for types that should not be copied or assigned.\nclass no_copy: no_assign {\n    //! Deny copy construction\n    no_copy( const no_copy& );\npublic:\n    //! Allow default construction\n    no_copy() {}\n};\n\n#if TBB_DEPRECATED_MUTEX_COPYING\nclass mutex_copy_deprecated_and_disabled {};\n#else\n// By default various implementations of mutexes are not copy constructible\n// and not copy assignable.\nclass mutex_copy_deprecated_and_disabled : no_copy {};\n#endif\n\n//! A function to check if passed in pointer is aligned on a specific border\ntemplate<typename T>\ninline bool is_aligned(T* pointer, uintptr_t alignment) {\n    return 0==((uintptr_t)pointer & (alignment-1));\n}\n\n//! A function to check if passed integer is a power of 2\ntemplate<typename integer_type>\ninline bool is_power_of_two(integer_type arg) {\n    return arg && (0 == (arg & (arg - 1)));\n}\n\n//! A function to compute arg modulo divisor where divisor is a power of 2.\ntemplate<typename argument_integer_type, typename divisor_integer_type>\ninline argument_integer_type modulo_power_of_two(argument_integer_type arg, divisor_integer_type divisor) {\n    __TBB_ASSERT( is_power_of_two(divisor), \"Divisor should be a power of two\" );\n    return (arg & (divisor - 1));\n}\n\n\n//! A function to determine if arg is a power of 2 at least as big as another power of 2.\n// i.e. for strictly positive i and j, with j being a power of 2,\n// determines whether i==j<<k for some nonnegative k (so i==j yields true).\ntemplate<typename argument_integer_type, typename power2_integer_type>\ninline bool is_power_of_two_at_least(argument_integer_type arg, power2_integer_type power2) {\n    __TBB_ASSERT( is_power_of_two(power2), \"Divisor should be a power of two\" );\n    return 0 == (arg & (arg - power2));\n}\n\n//! Utility template function to prevent \"unused\" warnings by various compilers.\ntemplate<typename T1> void suppress_unused_warning( const T1& ) {}\ntemplate<typename T1, typename T2> void suppress_unused_warning( const T1&, const T2& ) {}\ntemplate<typename T1, typename T2, typename T3> void suppress_unused_warning( const T1&, const T2&, const T3& ) {}\n\n// Struct to be used as a version tag for inline functions.\n/** Version tag can be necessary to prevent loader on Linux from using the wrong\n    symbol in debug builds (when inline functions are compiled as out-of-line). **/\nstruct version_tag_v3 {};\n\ntypedef version_tag_v3 version_tag;\n\n} // internal\n\n//! Dummy type that distinguishes splitting constructor from copy constructor.\n/**\n * See description of parallel_for and parallel_reduce for example usages.\n * @ingroup algorithms\n */\nclass split {\n};\n\n//! Type enables transmission of splitting proportion from partitioners to range objects\n/**\n * In order to make use of such facility Range objects must implement\n * splitting constructor with this type passed and initialize static\n * constant boolean field 'is_splittable_in_proportion' with the value\n * of 'true'\n */\nclass proportional_split: internal::no_assign {\npublic:\n    proportional_split(size_t _left = 1, size_t _right = 1) : my_left(_left), my_right(_right) { }\n\n    size_t left() const { return my_left; }\n    size_t right() const { return my_right; }\n\n    // used when range does not support proportional split\n    operator split() const { return split(); }\n\n#if __TBB_ENABLE_RANGE_FEEDBACK\n    void set_proportion(size_t _left, size_t _right) {\n        my_left = _left;\n        my_right = _right;\n    }\n#endif\nprivate:\n    size_t my_left, my_right;\n};\n\n} // tbb\n\n// Following is a set of classes and functions typically used in compile-time \"metaprogramming\".\n// TODO: move all that to a separate header\n\n#if __TBB_ALLOCATOR_TRAITS_PRESENT\n#include <memory> //for allocator_traits\n#endif\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT || _LIBCPP_VERSION\n#include <utility> // for std::move\n#endif\n\nnamespace tbb {\nnamespace internal {\n\n//! Class for determining type of std::allocator<T>::value_type.\ntemplate<typename T>\nstruct allocator_type {\n    typedef T value_type;\n};\n\n#if _MSC_VER\n//! Microsoft std::allocator has non-standard extension that strips const from a type.\ntemplate<typename T>\nstruct allocator_type<const T> {\n    typedef T value_type;\n};\n#endif\n\n// Ad-hoc implementation of true_type & false_type\n// Intended strictly for internal use! For public APIs (traits etc), use C++11 analogues.\ntemplate <bool v>\nstruct bool_constant {\n    static /*constexpr*/ const bool value = v;\n};\ntypedef bool_constant<true> true_type;\ntypedef bool_constant<false> false_type;\n\n#if __TBB_ALLOCATOR_TRAITS_PRESENT\nusing std::allocator_traits;\n#else\ntemplate<typename allocator>\nstruct allocator_traits{\n    typedef tbb::internal::false_type propagate_on_container_move_assignment;\n};\n#endif\n\n//! A template to select either 32-bit or 64-bit constant as compile time, depending on machine word size.\ntemplate <unsigned u, unsigned long long ull >\nstruct select_size_t_constant {\n    //Explicit cast is needed to avoid compiler warnings about possible truncation.\n    //The value of the right size,   which is selected by ?:, is anyway not truncated or promoted.\n    static const size_t value = (size_t)((sizeof(size_t)==sizeof(u)) ? u : ull);\n};\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\nusing std::move;\nusing std::forward;\n#elif defined(_LIBCPP_NAMESPACE)\n// libc++ defines \"pre-C++11 move and forward\" similarly to ours; use it to avoid name conflicts in some cases.\nusing std::_LIBCPP_NAMESPACE::move;\nusing std::_LIBCPP_NAMESPACE::forward;\n#else\n// It is assumed that cv qualifiers, if any, are part of the deduced type.\ntemplate <typename T>\nT& move( T& x ) { return x; }\ntemplate <typename T>\nT& forward( T& x ) { return x; }\n#endif /* __TBB_CPP11_RVALUE_REF_PRESENT */\n\n// Helper macros to simplify writing templates working with both C++03 and C++11.\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n#define  __TBB_FORWARDING_REF(A) A&&\n#else\n// It is assumed that cv qualifiers, if any, are part of a deduced type.\n// Thus this macro should not be used in public interfaces.\n#define  __TBB_FORWARDING_REF(A) A&\n#endif\n#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT\n#define __TBB_PARAMETER_PACK ...\n#define __TBB_PACK_EXPANSION(A) A...\n#else\n#define __TBB_PARAMETER_PACK\n#define __TBB_PACK_EXPANSION(A) A\n#endif /* __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT */\n\n#if __TBB_CPP11_DECLTYPE_PRESENT\n#if __TBB_CPP11_DECLVAL_BROKEN\n// Ad-hoc implementation of std::declval\ntemplate <class T> __TBB_FORWARDING_REF(T) declval() /*noexcept*/;\n#else\nusing std::declval;\n#endif\n#endif\n\ntemplate <bool condition>\nstruct STATIC_ASSERTION_FAILED;\n\ntemplate <>\nstruct STATIC_ASSERTION_FAILED<false> { enum {value=1};};\n\ntemplate<>\nstruct STATIC_ASSERTION_FAILED<true>; //intentionally left undefined to cause compile time error\n\n//! @endcond\n}} // namespace tbb::internal\n\n#if    __TBB_STATIC_ASSERT_PRESENT\n#define __TBB_STATIC_ASSERT(condition,msg) static_assert(condition,msg)\n#else\n//please note condition is intentionally inverted to get a bit more understandable error msg\n#define __TBB_STATIC_ASSERT_IMPL1(condition,msg,line)       \\\n    enum {static_assert_on_line_##line = tbb::internal::STATIC_ASSERTION_FAILED<!(condition)>::value}\n\n#define __TBB_STATIC_ASSERT_IMPL(condition,msg,line) __TBB_STATIC_ASSERT_IMPL1(condition,msg,line)\n//! Verify at compile time that passed in condition is hold\n#define __TBB_STATIC_ASSERT(condition,msg) __TBB_STATIC_ASSERT_IMPL(condition,msg,__LINE__)\n#endif\n\n#endif /* RC_INVOKED */\n#endif /* __TBB_tbb_stddef_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tbb_thread.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_tbb_thread_H\n#define __TBB_tbb_thread_H\n\n#include \"tbb_stddef.h\"\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#define __TBB_NATIVE_THREAD_ROUTINE unsigned WINAPI\n#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) unsigned (WINAPI* r)( void* )\nnamespace tbb { namespace internal {\n#if __TBB_WIN8UI_SUPPORT\n    typedef size_t thread_id_type;\n#else  // __TBB_WIN8UI_SUPPORT\n    typedef DWORD thread_id_type;\n#endif // __TBB_WIN8UI_SUPPORT\n}} //namespace tbb::internal\n#else\n#define __TBB_NATIVE_THREAD_ROUTINE void*\n#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) void* (*r)( void* )\n#include <pthread.h>\nnamespace tbb { namespace internal {\n    typedef pthread_t thread_id_type;\n}} //namespace tbb::internal\n#endif // _WIN32||_WIN64\n\n#include \"atomic.h\"\n#include \"internal/_tbb_hash_compare_impl.h\"\n#include \"tick_count.h\"\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    // Suppress \"C++ exception handler used, but unwind semantics are not enabled\" warning in STL headers\n    #pragma warning (push)\n    #pragma warning (disable: 4530)\n#endif\n\n#include <utility> //for swap\n#include <iosfwd>\n\n#if !TBB_USE_EXCEPTIONS && _MSC_VER\n    #pragma warning (pop)\n#endif\n\nnamespace tbb {\n\nnamespace internal {\n    class tbb_thread_v3;\n}\n\ninline void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) __TBB_NOEXCEPT(true);\n\nnamespace internal {\n\n    //! Allocate a closure\n    void* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );\n    //! Free a closure allocated by allocate_closure_v3\n    void __TBB_EXPORTED_FUNC free_closure_v3( void* );\n\n    struct thread_closure_base {\n        void* operator new( size_t size ) {return allocate_closure_v3(size);}\n        void operator delete( void* ptr ) {free_closure_v3(ptr);}\n    };\n\n    template<class F> struct thread_closure_0: thread_closure_base {\n        F function;\n\n        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {\n            thread_closure_0 *self = static_cast<thread_closure_0*>(c);\n            self->function();\n            delete self;\n            return 0;\n        }\n        thread_closure_0( const F& f ) : function(f) {}\n    };\n    //! Structure used to pass user function with 1 argument to thread.\n    template<class F, class X> struct thread_closure_1: thread_closure_base {\n        F function;\n        X arg1;\n        //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll\n        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {\n            thread_closure_1 *self = static_cast<thread_closure_1*>(c);\n            self->function(self->arg1);\n            delete self;\n            return 0;\n        }\n        thread_closure_1( const F& f, const X& x ) : function(f), arg1(x) {}\n    };\n    template<class F, class X, class Y> struct thread_closure_2: thread_closure_base {\n        F function;\n        X arg1;\n        Y arg2;\n        //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll\n        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {\n            thread_closure_2 *self = static_cast<thread_closure_2*>(c);\n            self->function(self->arg1, self->arg2);\n            delete self;\n            return 0;\n        }\n        thread_closure_2( const F& f, const X& x, const Y& y ) : function(f), arg1(x), arg2(y) {}\n    };\n\n    //! Versioned thread class.\n    class tbb_thread_v3 {\n#if __TBB_IF_NO_COPY_CTOR_MOVE_SEMANTICS_BROKEN\n        // Workaround for a compiler bug: declaring the copy constructor as public\n        // enables use of the moving constructor.\n        // The definition is not provided in order to prohibit copying.\n    public:\n#endif\n        tbb_thread_v3(const tbb_thread_v3&); // = delete;   // Deny access\n    public:\n#if _WIN32||_WIN64\n        typedef HANDLE native_handle_type;\n#else\n        typedef pthread_t native_handle_type;\n#endif // _WIN32||_WIN64\n\n        class id;\n        //! Constructs a thread object that does not represent a thread of execution.\n        tbb_thread_v3() __TBB_NOEXCEPT(true) : my_handle(0)\n#if _WIN32||_WIN64\n            , my_thread_id(0)\n#endif // _WIN32||_WIN64\n        {}\n\n        //! Constructs an object and executes f() in a new thread\n        template <class F> explicit tbb_thread_v3(F f) {\n            typedef internal::thread_closure_0<F> closure_type;\n            internal_start(closure_type::start_routine, new closure_type(f));\n        }\n        //! Constructs an object and executes f(x) in a new thread\n        template <class F, class X> tbb_thread_v3(F f, X x) {\n            typedef internal::thread_closure_1<F,X> closure_type;\n            internal_start(closure_type::start_routine, new closure_type(f,x));\n        }\n        //! Constructs an object and executes f(x,y) in a new thread\n        template <class F, class X, class Y> tbb_thread_v3(F f, X x, Y y) {\n            typedef internal::thread_closure_2<F,X,Y> closure_type;\n            internal_start(closure_type::start_routine, new closure_type(f,x,y));\n        }\n\n#if __TBB_CPP11_RVALUE_REF_PRESENT\n        tbb_thread_v3(tbb_thread_v3&& x) __TBB_NOEXCEPT(true)\n            : my_handle(x.my_handle)\n#if _WIN32||_WIN64\n            , my_thread_id(x.my_thread_id)\n#endif\n        {\n            x.internal_wipe();\n        }\n        tbb_thread_v3& operator=(tbb_thread_v3&& x) __TBB_NOEXCEPT(true) {\n            internal_move(x);\n            return *this;\n        }\n    private:\n        tbb_thread_v3& operator=(const tbb_thread_v3& x); // = delete;\n    public:\n#else  // __TBB_CPP11_RVALUE_REF_PRESENT\n        tbb_thread_v3& operator=(tbb_thread_v3& x) {\n            internal_move(x);\n            return *this;\n        }\n#endif // __TBB_CPP11_RVALUE_REF_PRESENT\n\n        void swap( tbb_thread_v3& t ) __TBB_NOEXCEPT(true) {tbb::swap( *this, t );}\n        bool joinable() const __TBB_NOEXCEPT(true) {return my_handle!=0; }\n        //! The completion of the thread represented by *this happens before join() returns.\n        void __TBB_EXPORTED_METHOD join();\n        //! When detach() returns, *this no longer represents the possibly continuing thread of execution.\n        void __TBB_EXPORTED_METHOD detach();\n        ~tbb_thread_v3() {if( joinable() ) detach();}\n        inline id get_id() const __TBB_NOEXCEPT(true);\n        native_handle_type native_handle() { return my_handle; }\n\n        //! The number of hardware thread contexts.\n        /** Before TBB 3.0 U4 this methods returned the number of logical CPU in\n            the system. Currently on Windows, Linux and FreeBSD it returns the\n            number of logical CPUs available to the current process in accordance\n            with its affinity mask.\n\n            NOTE: The return value of this method never changes after its first\n            invocation. This means that changes in the process affinity mask that\n            took place after this method was first invoked will not affect the\n            number of worker threads in the TBB worker threads pool. **/\n        static unsigned __TBB_EXPORTED_FUNC hardware_concurrency() __TBB_NOEXCEPT(true);\n    private:\n        native_handle_type my_handle;\n#if _WIN32||_WIN64\n        thread_id_type my_thread_id;\n#endif // _WIN32||_WIN64\n\n        void internal_wipe() __TBB_NOEXCEPT(true) {\n            my_handle = 0;\n#if _WIN32||_WIN64\n            my_thread_id = 0;\n#endif\n        }\n        void internal_move(tbb_thread_v3& x) __TBB_NOEXCEPT(true) {\n            if (joinable()) detach();\n            my_handle = x.my_handle;\n#if _WIN32||_WIN64\n            my_thread_id = x.my_thread_id;\n#endif // _WIN32||_WIN64\n            x.internal_wipe();\n        }\n\n        /** Runs start_routine(closure) on another thread and sets my_handle to the handle of the created thread. */\n        void __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),\n                             void* closure );\n        friend void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );\n        friend void tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ) __TBB_NOEXCEPT(true);\n    };\n\n    class tbb_thread_v3::id {\n        thread_id_type my_id;\n        id( thread_id_type id_ ) : my_id(id_) {}\n\n        friend class tbb_thread_v3;\n    public:\n        id() __TBB_NOEXCEPT(true) : my_id(0) {}\n\n        friend bool operator==( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator<( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator>( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n        friend bool operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y ) __TBB_NOEXCEPT(true);\n\n        template<class charT, class traits>\n        friend std::basic_ostream<charT, traits>&\n        operator<< (std::basic_ostream<charT, traits> &out,\n                    tbb_thread_v3::id id)\n        {\n            out << id.my_id;\n            return out;\n        }\n        friend tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();\n\n        friend inline size_t tbb_hasher( const tbb_thread_v3::id& id ) {\n            __TBB_STATIC_ASSERT(sizeof(id.my_id) <= sizeof(size_t), \"Implementaion assumes that thread_id_type fits into machine word\");\n            return tbb::tbb_hasher(id.my_id);\n        }\n\n        // A workaround for lack of tbb::atomic<id> (which would require id to be POD in C++03).\n        friend id atomic_compare_and_swap(id& location, const id& value, const id& comparand){\n            return as_atomic(location.my_id).compare_and_swap(value.my_id, comparand.my_id);\n        }\n    }; // tbb_thread_v3::id\n\n    tbb_thread_v3::id tbb_thread_v3::get_id() const __TBB_NOEXCEPT(true) {\n#if _WIN32||_WIN64\n        return id(my_thread_id);\n#else\n        return id(my_handle);\n#endif // _WIN32||_WIN64\n    }\n\n    void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );\n    tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();\n    void __TBB_EXPORTED_FUNC thread_yield_v3();\n    void __TBB_EXPORTED_FUNC thread_sleep_v3(const tick_count::interval_t &i);\n\n    inline bool operator==(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id == y.my_id;\n    }\n    inline bool operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id != y.my_id;\n    }\n    inline bool operator<(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id < y.my_id;\n    }\n    inline bool operator<=(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id <= y.my_id;\n    }\n    inline bool operator>(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id > y.my_id;\n    }\n    inline bool operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)\n    {\n        return x.my_id >= y.my_id;\n    }\n\n} // namespace internal;\n\n//! Users reference thread class by name tbb_thread\ntypedef internal::tbb_thread_v3 tbb_thread;\n\nusing internal::operator==;\nusing internal::operator!=;\nusing internal::operator<;\nusing internal::operator>;\nusing internal::operator<=;\nusing internal::operator>=;\n\ninline void move( tbb_thread& t1, tbb_thread& t2 ) {\n    internal::move_v3(t1, t2);\n}\n\ninline void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 )  __TBB_NOEXCEPT(true) {\n    std::swap(t1.my_handle, t2.my_handle);\n#if _WIN32||_WIN64\n    std::swap(t1.my_thread_id, t2.my_thread_id);\n#endif /* _WIN32||_WIN64 */\n}\n\nnamespace this_tbb_thread {\n    inline tbb_thread::id get_id() { return internal::thread_get_id_v3(); }\n    //! Offers the operating system the opportunity to schedule another thread.\n    inline void yield() { internal::thread_yield_v3(); }\n    //! The current thread blocks at least until the time specified.\n    inline void sleep(const tick_count::interval_t &i) {\n        internal::thread_sleep_v3(i);\n    }\n}  // namespace this_tbb_thread\n\n} // namespace tbb\n\n#endif /* __TBB_tbb_thread_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tbbmalloc_proxy.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n/*\nReplacing the standard memory allocation routines in Microsoft* C/C++ RTL\n(malloc/free, global new/delete, etc.) with the TBB memory allocator.\n\nInclude the following header to a source of any binary which is loaded during\napplication startup\n\n#include \"tbb/tbbmalloc_proxy.h\"\n\nor add following parameters to the linker options for the binary which is\nloaded during application startup. It can be either exe-file or dll.\n\nFor win32\ntbbmalloc_proxy.lib /INCLUDE:\"___TBB_malloc_proxy\"\nwin64\ntbbmalloc_proxy.lib /INCLUDE:\"__TBB_malloc_proxy\"\n*/\n\n#ifndef __TBB_tbbmalloc_proxy_H\n#define __TBB_tbbmalloc_proxy_H\n\n#if _MSC_VER\n\n#ifdef _DEBUG\n    #pragma comment(lib, \"tbbmalloc_proxy_debug.lib\")\n#else\n    #pragma comment(lib, \"tbbmalloc_proxy.lib\")\n#endif\n\n#if defined(_WIN64)\n    #pragma comment(linker, \"/include:__TBB_malloc_proxy\")\n#else\n    #pragma comment(linker, \"/include:___TBB_malloc_proxy\")\n#endif\n\n#else\n/* Primarily to support MinGW */\n\nextern \"C\" void __TBB_malloc_proxy();\nstruct __TBB_malloc_proxy_caller {\n    __TBB_malloc_proxy_caller() { __TBB_malloc_proxy(); }\n} volatile __TBB_malloc_proxy_helper_object;\n\n#endif // _MSC_VER\n\n#endif //__TBB_tbbmalloc_proxy_H\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/include/tbb/tick_count.h",
    "content": "/*\n    Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n\n    This file is part of Threading Building Blocks. Threading Building Blocks is free software;\n    you can redistribute it and/or modify it under the terms of the GNU General Public License\n    version 2  as  published  by  the  Free Software Foundation.  Threading Building Blocks is\n    distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the\n    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n    See  the GNU General Public License for more details.   You should have received a copy of\n    the  GNU General Public License along with Threading Building Blocks; if not, write to the\n    Free Software Foundation, Inc.,  51 Franklin St,  Fifth Floor,  Boston,  MA 02110-1301 USA\n\n    As a special exception,  you may use this file  as part of a free software library without\n    restriction.  Specifically,  if other files instantiate templates  or use macros or inline\n    functions from this file, or you compile this file and link it with other files to produce\n    an executable,  this file does not by itself cause the resulting executable to be covered\n    by the GNU General Public License. This exception does not however invalidate any other\n    reasons why the executable file might be covered by the GNU General Public License.\n*/\n\n#ifndef __TBB_tick_count_H\n#define __TBB_tick_count_H\n\n#include \"tbb_stddef.h\"\n\n#if _WIN32||_WIN64\n#include \"machine/windows_api.h\"\n#elif __linux__\n#include <ctime>\n#else /* generic Unix */\n#include <sys/time.h>\n#endif /* (choice of OS) */\n\nnamespace tbb {\n\n//! Absolute timestamp\n/** @ingroup timing */\nclass tick_count {\npublic:\n    //! Relative time interval.\n    class interval_t {\n        long long value;\n        explicit interval_t( long long value_ ) : value(value_) {}\n    public:\n        //! Construct a time interval representing zero time duration\n        interval_t() : value(0) {};\n\n        //! Construct a time interval representing sec seconds time  duration\n        explicit interval_t( double sec );\n\n        //! Return the length of a time interval in seconds\n        double seconds() const;\n\n        friend class tbb::tick_count;\n\n        //! Extract the intervals from the tick_counts and subtract them.\n        friend interval_t operator-( const tick_count& t1, const tick_count& t0 );\n\n        //! Add two intervals.\n        friend interval_t operator+( const interval_t& i, const interval_t& j ) {\n            return interval_t(i.value+j.value);\n        }\n\n        //! Subtract two intervals.\n        friend interval_t operator-( const interval_t& i, const interval_t& j ) {\n            return interval_t(i.value-j.value);\n        }\n\n        //! Accumulation operator\n        interval_t& operator+=( const interval_t& i ) {value += i.value; return *this;}\n\n        //! Subtraction operator\n        interval_t& operator-=( const interval_t& i ) {value -= i.value; return *this;}\n    private:\n        static long long ticks_per_second(){\n#if _WIN32||_WIN64\n            LARGE_INTEGER qpfreq;\n            int rval = QueryPerformanceFrequency(&qpfreq);\n            __TBB_ASSERT_EX(rval, \"QueryPerformanceFrequency returned zero\");\n            return static_cast<long long>(qpfreq.QuadPart);\n#elif __linux__\n            return static_cast<long long>(1E9);\n#else /* generic Unix */\n            return static_cast<long long>(1E6);\n#endif /* (choice of OS) */\n        }\n    };\n\n    //! Construct an absolute timestamp initialized to zero.\n    tick_count() : my_count(0) {};\n\n    //! Return current time.\n    static tick_count now();\n\n    //! Subtract two timestamps to get the time interval between\n    friend interval_t operator-( const tick_count& t1, const tick_count& t0 );\n\n    //! Return the resolution of the clock in seconds per tick.\n    static double resolution() { return 1.0 / interval_t::ticks_per_second(); }\n\nprivate:\n    long long my_count;\n};\n\ninline tick_count tick_count::now() {\n    tick_count result;\n#if _WIN32||_WIN64\n    LARGE_INTEGER qpcnt;\n    int rval = QueryPerformanceCounter(&qpcnt);\n    __TBB_ASSERT_EX(rval, \"QueryPerformanceCounter failed\");\n    result.my_count = qpcnt.QuadPart;\n#elif __linux__\n    struct timespec ts;\n    int status = clock_gettime( CLOCK_REALTIME, &ts );\n    __TBB_ASSERT_EX( status==0, \"CLOCK_REALTIME not supported\" );\n    result.my_count = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);\n#else /* generic Unix */\n    struct timeval tv;\n    int status = gettimeofday(&tv, NULL);\n    __TBB_ASSERT_EX( status==0, \"gettimeofday failed\" );\n    result.my_count = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);\n#endif /*(choice of OS) */\n    return result;\n}\n\ninline tick_count::interval_t::interval_t( double sec ) {\n    value = static_cast<long long>(sec*interval_t::ticks_per_second());\n}\n\ninline tick_count::interval_t operator-( const tick_count& t1, const tick_count& t0 ) {\n    return tick_count::interval_t( t1.my_count-t0.my_count );\n}\n\ninline double tick_count::interval_t::seconds() const {\n    return value*tick_count::resolution();\n}\n\n} // namespace tbb\n\n#endif /* __TBB_tick_count_H */\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/index.html",
    "content": "<HTML>\n<BODY>\n<H2>Overview</H2>\nTop level directory for Intel&reg; Threading Building Blocks.\n<H2>Common directories</H2>\n<DL>\n<DT><A HREF=\"doc/html/index.html\">doc</A>\n<DD>Documentation for the library.\n<DT><A HREF=\"include/index.html\">include</A>\n<DD>Include files required for compiling code that uses the library.\n<DT><A HREF=\"examples/index.html\">examples</A>\n<DD>Examples of how to use the library.\n</DL>\n<H2>Intel TBB source package</H2>\n<P>\nTo build Intel TBB, use the <A HREF=Makefile>top-level Makefile</A>; see also the <A HREF=build/index.html#build>build directions</A>.\nTo port Intel TBB to a new platform, operating system or architecture, see the <A HREF=build/index.html#port>porting directions</A>.\n</P>\n<H3>Files</H3>\n<DL>\n<DT><A HREF=\"Makefile\">Makefile</A>\n<DD>Top-level Makefile for Intel TBB. See also the <A HREF=build/index.html#build>build directions</A>.\n</DL>\n<H3>Directories</H3>\n<DL>\n<DT><A HREF=\"src/index.html\">src</A>\n<DD>Source code for the library.\n<DT><A HREF=\"build/index.html\">build</A>\n<DD>Internal Makefile infrastructure for Intel TBB.  Do not use directly; see the <A HREF=build/index.html#build>build directions</A>.\n</DL>\n<H2>Intel TBB binary package</H2>\n<H3>Directories</H3>\n<DL>\n<DT><A HREF=\"bin\">bin</A>\n<DD>Start-up scripts for sourcing library for Linux* OS and OS X*. For Windows* OS: start-up scripts and dynamic-link libraries.\n<DT><A HREF=\"lib\">lib</A>\n<DD>Platform-specific binary files for the library.\n</DL>\n<HR>\n<p></p>\nCopyright &copy; 2005-2016 Intel Corporation.  All Rights Reserved.\n<P></P>\nIntel is a registered trademark or trademark of Intel Corporation\nor its subsidiaries in the United States and other countries.\n<p></p>\n* Other names and brands may be claimed as the property of others.\n</BODY>\n</HTML>\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/lib/x64/v140/tbb.def",
    "content": "\n; Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n;\n; The source code contained or described herein and all documents related\n; to the source code (\"Material\") are owned by Intel Corporation or its\n; suppliers or licensors.  Title to the Material remains with Intel\n; Corporation or its suppliers and licensors.  The Material is protected\n; by worldwide copyright laws and treaty provisions.  No part of the\n; Material may be used, copied, reproduced, modified, published, uploaded,\n; posted, transmitted, distributed, or disclosed in any way without\n; Intel's prior express written permission.\n;\n; No license under any patent, copyright, trade secret or other\n; intellectual property right is granted to or conferred upon you by\n; disclosure or delivery of the Materials, either expressly, by\n; implication, inducement, estoppel or otherwise.  Any license under such\n; intellectual property rights must be express and approved by Intel in\n; writing.\n\n; This file is organized with a section for each .cpp file.\n; Each of these sections is in alphabetical order.\n\nEXPORTS\n\n\n\n; Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n;\n; The source code contained or described herein and all documents related\n; to the source code (\"Material\") are owned by Intel Corporation or its\n; suppliers or licensors.  Title to the Material remains with Intel\n; Corporation or its suppliers and licensors.  The Material is protected\n; by worldwide copyright laws and treaty provisions.  No part of the\n; Material may be used, copied, reproduced, modified, published, uploaded,\n; posted, transmitted, distributed, or disclosed in any way without\n; Intel's prior express written permission.\n;\n; No license under any patent, copyright, trade secret or other\n; intellectual property right is granted to or conferred upon you by\n; disclosure or delivery of the Materials, either expressly, by\n; implication, inducement, estoppel or otherwise.  Any license under such\n; intellectual property rights must be express and approved by Intel in\n; writing.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n        \n    \n\n\n\n\n\n\n\n    \n    \n        \n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n    \n\n\n\n    \n\n\n\n    \n\n\n\n\n\n\n\n    \n\n\n    \n    \n\n\n\n\n\n    \n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n    \n\n\n\n    \n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n        \n    \n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__TBB_machine_cmpswp1\n__TBB_machine_fetchadd1\n__TBB_machine_fetchstore1\n__TBB_machine_cmpswp2\n__TBB_machine_fetchadd2\n__TBB_machine_fetchstore2\n__TBB_machine_pause\n__TBB_machine_try_lock_elided\n__TBB_machine_unlock_elided\n__TBB_machine_is_in_transaction\n\n\n?NFS_Allocate@internal@tbb@@YAPEAX_K0PEAX@Z\n?NFS_GetLineSize@internal@tbb@@YA_KXZ\n?NFS_Free@internal@tbb@@YAXPEAX@Z\n?allocate_via_handler_v3@internal@tbb@@YAPEAX_K@Z\n?deallocate_via_handler_v3@internal@tbb@@YAXPEAX@Z\n?is_malloc_used_v3@internal@tbb@@YA_NXZ\n\n\n\n?resize@affinity_partitioner_base_v3@internal@tbb@@AEAAXI@Z\n?allocate@allocate_additional_child_of_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z\n?allocate@allocate_child_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z\n?allocate@allocate_continuation_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z\n?allocate@allocate_root_proxy@internal@tbb@@SAAEAVtask@3@_K@Z\n?destroy@task_base@internal@interface5@tbb@@SAXAEAVtask@4@@Z\n?free@allocate_additional_child_of_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z\n?free@allocate_child_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z\n?free@allocate_continuation_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z\n?free@allocate_root_proxy@internal@tbb@@SAXAEAVtask@3@@Z\n?internal_set_ref_count@task@tbb@@AEAAXH@Z\n?internal_decrement_ref_count@task@tbb@@AEAA_JXZ\n?is_owned_by_current_thread@task@tbb@@QEBA_NXZ\n?note_affinity@task@tbb@@UEAAXG@Z\n?self@task@tbb@@SAAEAV12@XZ\n?spawn_and_wait_for_all@task@tbb@@QEAAXAEAVtask_list@2@@Z\n?default_num_threads@task_scheduler_init@tbb@@SAHXZ\n?initialize@task_scheduler_init@tbb@@QEAAXH_K@Z\n?initialize@task_scheduler_init@tbb@@QEAAXH@Z\n?terminate@task_scheduler_init@tbb@@QEAAXXZ\n\n?observe@task_scheduler_observer_v3@internal@tbb@@QEAAX_N@Z\n\n\n\n\n?internal_current_slot@task_arena_base@internal@interface7@tbb@@KAHXZ\n?internal_initialize@task_arena_base@internal@interface7@tbb@@IEAAXXZ\n?internal_terminate@task_arena_base@internal@interface7@tbb@@IEAAXXZ\n?internal_attach@task_arena_base@internal@interface7@tbb@@IEAAXXZ\n?internal_enqueue@task_arena_base@internal@interface7@tbb@@IEBAXAEAVtask@4@_J@Z\n?internal_execute@task_arena_base@internal@interface7@tbb@@IEBAXAEAVdelegate_base@234@@Z\n?internal_wait@task_arena_base@internal@interface7@tbb@@IEBAXXZ\n\n\n\n\n?destroy@task@tbb@@QEAAXAEAV12@@Z\n\n\n\n\n?allocate@allocate_root_with_context_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z\n?free@allocate_root_with_context_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z\n?change_group@task@tbb@@QEAAXAEAVtask_group_context@2@@Z\n?is_group_execution_cancelled@task_group_context@tbb@@QEBA_NXZ\n?cancel_group_execution@task_group_context@tbb@@QEAA_NXZ\n?reset@task_group_context@tbb@@QEAAXXZ\n?capture_fp_settings@task_group_context@tbb@@QEAAXXZ\n?init@task_group_context@tbb@@IEAAXXZ\n?register_pending_exception@task_group_context@tbb@@QEAAXXZ\n??1task_group_context@tbb@@QEAA@XZ\n\n?set_priority@task_group_context@tbb@@QEAAXW4priority_t@2@@Z\n?priority@task_group_context@tbb@@QEBA?AW4priority_t@2@XZ\n\n?name@captured_exception@tbb@@UEBAPEBDXZ\n?what@captured_exception@tbb@@UEBAPEBDXZ\n??1captured_exception@tbb@@UEAA@XZ\n?move@captured_exception@tbb@@UEAAPEAV12@XZ\n?destroy@captured_exception@tbb@@UEAAXXZ\n?set@captured_exception@tbb@@QEAAXPEBD0@Z\n?clear@captured_exception@tbb@@QEAAXXZ\n\n\n\n?throw_bad_last_alloc_exception_v4@internal@tbb@@YAXXZ\n?throw_exception_v4@internal@tbb@@YAXW4exception_id@12@@Z\n?what@bad_last_alloc@tbb@@UEBAPEBDXZ\n?what@missing_wait@tbb@@UEBAPEBDXZ\n?what@invalid_multiple_scheduling@tbb@@UEBAPEBDXZ\n?what@improper_lock@tbb@@UEBAPEBDXZ\n?what@user_abort@tbb@@UEBAPEBDXZ\n\n\n?assertion_failure@tbb@@YAXPEBDH00@Z\n?get_initial_auto_partitioner_divisor@internal@tbb@@YA_KXZ\n?handle_perror@internal@tbb@@YAXHPEBD@Z\n?set_assertion_handler@tbb@@YAP6AXPEBDH00@ZP6AX0H00@Z@Z\n?runtime_warning@internal@tbb@@YAXPEBDZZ\nTBB_runtime_interface_version\n\n\n?itt_load_pointer_with_acquire_v3@internal@tbb@@YAPEAXPEBX@Z\n?itt_store_pointer_with_release_v3@internal@tbb@@YAXPEAX0@Z\n?call_itt_notify_v5@internal@tbb@@YAXHPEAX@Z\n?itt_load_pointer_v3@internal@tbb@@YAPEAXPEBX@Z\n?itt_set_sync_name_v3@internal@tbb@@YAXPEAXPEB_W@Z\n\n\n\n\n\n\n\n\n\n\n\n??_7pipeline@tbb@@6B@\n??0pipeline@tbb@@QEAA@XZ\n??1filter@tbb@@UEAA@XZ\n??1pipeline@tbb@@UEAA@XZ\n?add_filter@pipeline@tbb@@QEAAXAEAVfilter@2@@Z\n?clear@pipeline@tbb@@QEAAXXZ\n?inject_token@pipeline@tbb@@AEAAXAEAVtask@2@@Z\n?run@pipeline@tbb@@QEAAX_K@Z\n\n?run@pipeline@tbb@@QEAAX_KAEAVtask_group_context@2@@Z\n\n?process_item@thread_bound_filter@tbb@@QEAA?AW4result_type@12@XZ\n?try_process_item@thread_bound_filter@tbb@@QEAA?AW4result_type@12@XZ\n?set_end_of_input@filter@tbb@@IEAAXXZ\n\n\n?internal_construct@queuing_rw_mutex@tbb@@QEAAXXZ\n?acquire@scoped_lock@queuing_rw_mutex@tbb@@QEAAXAEAV23@_N@Z\n?downgrade_to_reader@scoped_lock@queuing_rw_mutex@tbb@@QEAA_NXZ\n?release@scoped_lock@queuing_rw_mutex@tbb@@QEAAXXZ\n?upgrade_to_writer@scoped_lock@queuing_rw_mutex@tbb@@QEAA_NXZ\n?try_acquire@scoped_lock@queuing_rw_mutex@tbb@@QEAA_NAEAV23@_N@Z\n\n\n?try_lock_read@reader_writer_lock@interface5@tbb@@QEAA_NXZ\n?try_lock@reader_writer_lock@interface5@tbb@@QEAA_NXZ\n?unlock@reader_writer_lock@interface5@tbb@@QEAAXXZ\n?lock_read@reader_writer_lock@interface5@tbb@@QEAAXXZ\n?lock@reader_writer_lock@interface5@tbb@@QEAAXXZ\n?internal_construct@reader_writer_lock@interface5@tbb@@AEAAXXZ\n?internal_destroy@reader_writer_lock@interface5@tbb@@AEAAXXZ\n?internal_construct@scoped_lock@reader_writer_lock@interface5@tbb@@AEAAXAEAV234@@Z\n?internal_destroy@scoped_lock@reader_writer_lock@interface5@tbb@@AEAAXXZ\n?internal_construct@scoped_lock_read@reader_writer_lock@interface5@tbb@@AEAAXAEAV234@@Z\n?internal_destroy@scoped_lock_read@reader_writer_lock@interface5@tbb@@AEAAXXZ\n\n\n\n?internal_itt_releasing@spin_rw_mutex@tbb@@CAXPEAV12@@Z\n?internal_acquire_writer@spin_rw_mutex@tbb@@CA_NPEAV12@@Z\n?internal_acquire_reader@spin_rw_mutex@tbb@@CAXPEAV12@@Z\n?internal_downgrade@spin_rw_mutex@tbb@@CAXPEAV12@@Z\n?internal_upgrade@spin_rw_mutex@tbb@@CA_NPEAV12@@Z\n?internal_release_reader@spin_rw_mutex@tbb@@CAXPEAV12@@Z\n?internal_release_writer@spin_rw_mutex@tbb@@CAXPEAV12@@Z\n?internal_try_acquire_writer@spin_rw_mutex@tbb@@CA_NPEAV12@@Z\n?internal_try_acquire_reader@spin_rw_mutex@tbb@@CA_NPEAV12@@Z\n\n\n\n?internal_construct@spin_rw_mutex_v3@tbb@@AEAAXXZ\n?internal_upgrade@spin_rw_mutex_v3@tbb@@AEAA_NXZ\n?internal_downgrade@spin_rw_mutex_v3@tbb@@AEAAXXZ\n?internal_acquire_reader@spin_rw_mutex_v3@tbb@@AEAAXXZ\n?internal_acquire_writer@spin_rw_mutex_v3@tbb@@AEAA_NXZ\n?internal_release_reader@spin_rw_mutex_v3@tbb@@AEAAXXZ\n?internal_release_writer@spin_rw_mutex_v3@tbb@@AEAAXXZ\n?internal_try_acquire_reader@spin_rw_mutex_v3@tbb@@AEAA_NXZ\n?internal_try_acquire_writer@spin_rw_mutex_v3@tbb@@AEAA_NXZ\n\n\n?internal_acquire_writer@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAAXAEAVscoped_lock@1234@_N@Z\n?internal_acquire_reader@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAAXAEAVscoped_lock@1234@_N@Z\n?internal_upgrade@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAA_NAEAVscoped_lock@1234@@Z\n?internal_downgrade@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAA_NAEAVscoped_lock@1234@@Z\n?internal_try_acquire_writer@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAA_NAEAVscoped_lock@1234@@Z\n?internal_release@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAAXAEAVscoped_lock@1234@@Z\n?internal_construct@x86_rtm_rw_mutex@internal@interface8@tbb@@AEAAXXZ\n\n\n?internal_construct@spin_mutex@tbb@@QEAAXXZ\n?internal_acquire@scoped_lock@spin_mutex@tbb@@AEAAXAEAV23@@Z\n?internal_release@scoped_lock@spin_mutex@tbb@@AEAAXXZ\n?internal_try_acquire@scoped_lock@spin_mutex@tbb@@AEAA_NAEAV23@@Z\n\n\n?internal_acquire@scoped_lock@mutex@tbb@@AEAAXAEAV23@@Z\n?internal_release@scoped_lock@mutex@tbb@@AEAAXXZ\n?internal_try_acquire@scoped_lock@mutex@tbb@@AEAA_NAEAV23@@Z\n?internal_construct@mutex@tbb@@AEAAXXZ\n?internal_destroy@mutex@tbb@@AEAAXXZ\n\n\n?internal_construct@recursive_mutex@tbb@@AEAAXXZ\n?internal_destroy@recursive_mutex@tbb@@AEAAXXZ\n?internal_acquire@scoped_lock@recursive_mutex@tbb@@AEAAXAEAV23@@Z\n?internal_try_acquire@scoped_lock@recursive_mutex@tbb@@AEAA_NAEAV23@@Z\n?internal_release@scoped_lock@recursive_mutex@tbb@@AEAAXXZ\n\n\n?internal_construct@queuing_mutex@tbb@@QEAAXXZ\n?acquire@scoped_lock@queuing_mutex@tbb@@QEAAXAEAV23@@Z\n?release@scoped_lock@queuing_mutex@tbb@@QEAAXXZ\n?try_acquire@scoped_lock@queuing_mutex@tbb@@QEAA_NAEAV23@@Z\n\n\n?internal_construct@critical_section_v4@internal@tbb@@QEAAXXZ\n\n\n\n?internal_grow_predicate@hash_map_segment_base@internal@tbb@@QEBA_NXZ\n\n\n??0concurrent_queue_base@internal@tbb@@IEAA@_K@Z\n??0concurrent_queue_iterator_base@internal@tbb@@IEAA@AEBVconcurrent_queue_base@12@@Z\n??1concurrent_queue_base@internal@tbb@@MEAA@XZ\n??1concurrent_queue_iterator_base@internal@tbb@@IEAA@XZ\n?advance@concurrent_queue_iterator_base@internal@tbb@@IEAAXXZ\n?assign@concurrent_queue_iterator_base@internal@tbb@@IEAAXAEBV123@@Z\n?internal_pop@concurrent_queue_base@internal@tbb@@IEAAXPEAX@Z\n?internal_pop_if_present@concurrent_queue_base@internal@tbb@@IEAA_NPEAX@Z\n?internal_push@concurrent_queue_base@internal@tbb@@IEAAXPEBX@Z\n?internal_push_if_not_full@concurrent_queue_base@internal@tbb@@IEAA_NPEBX@Z\n?internal_set_capacity@concurrent_queue_base@internal@tbb@@IEAAX_J_K@Z\n?internal_size@concurrent_queue_base@internal@tbb@@IEBA_JXZ\n\n\n\n??0concurrent_queue_iterator_base_v3@internal@tbb@@IEAA@AEBVconcurrent_queue_base_v3@12@@Z\n??0concurrent_queue_iterator_base_v3@internal@tbb@@IEAA@AEBVconcurrent_queue_base_v3@12@_K@Z\n??1concurrent_queue_iterator_base_v3@internal@tbb@@IEAA@XZ\n?assign@concurrent_queue_iterator_base_v3@internal@tbb@@IEAAXAEBV123@@Z\n?advance@concurrent_queue_iterator_base_v3@internal@tbb@@IEAAXXZ\n??0concurrent_queue_base_v3@internal@tbb@@IEAA@_K@Z\n??1concurrent_queue_base_v3@internal@tbb@@MEAA@XZ\n?internal_push@concurrent_queue_base_v3@internal@tbb@@IEAAXPEBX@Z\n?internal_push_move@concurrent_queue_base_v8@internal@tbb@@IEAAXPEBX@Z\n?internal_push_if_not_full@concurrent_queue_base_v3@internal@tbb@@IEAA_NPEBX@Z\n?internal_push_move_if_not_full@concurrent_queue_base_v8@internal@tbb@@IEAA_NPEBX@Z\n?internal_pop@concurrent_queue_base_v3@internal@tbb@@IEAAXPEAX@Z\n?internal_pop_if_present@concurrent_queue_base_v3@internal@tbb@@IEAA_NPEAX@Z\n?internal_abort@concurrent_queue_base_v3@internal@tbb@@IEAAXXZ\n?internal_size@concurrent_queue_base_v3@internal@tbb@@IEBA_JXZ\n?internal_empty@concurrent_queue_base_v3@internal@tbb@@IEBA_NXZ\n?internal_finish_clear@concurrent_queue_base_v3@internal@tbb@@IEAAXXZ\n?internal_set_capacity@concurrent_queue_base_v3@internal@tbb@@IEAAX_J_K@Z\n?internal_throw_exception@concurrent_queue_base_v3@internal@tbb@@IEBAXXZ\n?assign@concurrent_queue_base_v3@internal@tbb@@IEAAXAEBV123@@Z\n?move_content@concurrent_queue_base_v8@internal@tbb@@IEAAXAEAV123@@Z\n\n\n\n?internal_assign@concurrent_vector_base@internal@tbb@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z\n?internal_capacity@concurrent_vector_base@internal@tbb@@IEBA_KXZ\n?internal_clear@concurrent_vector_base@internal@tbb@@IEAAXP6AXPEAX_K@Z_N@Z\n?internal_copy@concurrent_vector_base@internal@tbb@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z\n?internal_grow_by@concurrent_vector_base@internal@tbb@@IEAA_K_K0P6AXPEAX0@Z@Z\n?internal_grow_to_at_least@concurrent_vector_base@internal@tbb@@IEAAX_K0P6AXPEAX0@Z@Z\n?internal_push_back@concurrent_vector_base@internal@tbb@@IEAAPEAX_KAEA_K@Z\n?internal_reserve@concurrent_vector_base@internal@tbb@@IEAAX_K00@Z\n\n\n\n??1concurrent_vector_base_v3@internal@tbb@@IEAA@XZ\n?internal_assign@concurrent_vector_base_v3@internal@tbb@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z\n?internal_capacity@concurrent_vector_base_v3@internal@tbb@@IEBA_KXZ\n?internal_clear@concurrent_vector_base_v3@internal@tbb@@IEAA_KP6AXPEAX_K@Z@Z\n?internal_copy@concurrent_vector_base_v3@internal@tbb@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z\n?internal_grow_by@concurrent_vector_base_v3@internal@tbb@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z\n?internal_grow_to_at_least@concurrent_vector_base_v3@internal@tbb@@IEAAX_K0P6AXPEAXPEBX0@Z2@Z\n?internal_push_back@concurrent_vector_base_v3@internal@tbb@@IEAAPEAX_KAEA_K@Z\n?internal_reserve@concurrent_vector_base_v3@internal@tbb@@IEAAX_K00@Z\n?internal_compact@concurrent_vector_base_v3@internal@tbb@@IEAAPEAX_KPEAXP6AX10@ZP6AX1PEBX0@Z@Z\n?internal_swap@concurrent_vector_base_v3@internal@tbb@@IEAAXAEAV123@@Z\n?internal_throw_exception@concurrent_vector_base_v3@internal@tbb@@IEBAX_K@Z\n?internal_resize@concurrent_vector_base_v3@internal@tbb@@IEAAX_K00PEBXP6AXPEAX0@ZP6AX210@Z@Z\n?internal_grow_to_at_least_with_result@concurrent_vector_base_v3@internal@tbb@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z\n\n\n?allocate_closure_v3@internal@tbb@@YAPEAX_K@Z\n?detach@tbb_thread_v3@internal@tbb@@QEAAXXZ\n?free_closure_v3@internal@tbb@@YAXPEAX@Z\n?hardware_concurrency@tbb_thread_v3@internal@tbb@@SAIXZ\n?internal_start@tbb_thread_v3@internal@tbb@@AEAAXP6AIPEAX@Z0@Z\n?join@tbb_thread_v3@internal@tbb@@QEAAXXZ\n?move_v3@internal@tbb@@YAXAEAVtbb_thread_v3@12@0@Z\n?thread_get_id_v3@internal@tbb@@YA?AVid@tbb_thread_v3@12@XZ\n?thread_sleep_v3@internal@tbb@@YAXAEBVinterval_t@tick_count@2@@Z\n?thread_yield_v3@internal@tbb@@YAXXZ\n\n\n?internal_initialize_condition_variable@internal@interface5@tbb@@YAXAEATcondvar_impl_t@123@@Z\n?internal_condition_variable_wait@internal@interface5@tbb@@YA_NAEATcondvar_impl_t@123@PEAVmutex@3@PEBVinterval_t@tick_count@3@@Z\n?internal_condition_variable_notify_one@internal@interface5@tbb@@YAXAEATcondvar_impl_t@123@@Z\n?internal_condition_variable_notify_all@internal@interface5@tbb@@YAXAEATcondvar_impl_t@123@@Z\n?internal_destroy_condition_variable@internal@interface5@tbb@@YAXAEATcondvar_impl_t@123@@Z\n\n\n?active_value@global_control@interface9@tbb@@CA_KH@Z\n?internal_create@global_control@interface9@tbb@@AEAAXXZ\n?internal_destroy@global_control@interface9@tbb@@AEAAXXZ\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/lib/x64/v140/tbbmalloc.def",
    "content": "\n; Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n;\n; The source code contained or described herein and all documents related\n; to the source code (\"Material\") are owned by Intel Corporation or its\n; suppliers or licensors.  Title to the Material remains with Intel\n; Corporation or its suppliers and licensors.  The Material is protected\n; by worldwide copyright laws and treaty provisions.  No part of the\n; Material may be used, copied, reproduced, modified, published, uploaded,\n; posted, transmitted, distributed, or disclosed in any way without\n; Intel's prior express written permission.\n;\n; No license under any patent, copyright, trade secret or other\n; intellectual property right is granted to or conferred upon you by\n; disclosure or delivery of the Materials, either expressly, by\n; implication, inducement, estoppel or otherwise.  Any license under such\n; intellectual property rights must be express and approved by Intel in\n; writing.\n\nEXPORTS\n\n; frontend.cpp\nscalable_calloc\nscalable_free\nscalable_malloc\nscalable_realloc\nscalable_posix_memalign\nscalable_aligned_malloc\nscalable_aligned_realloc\nscalable_aligned_free\nscalable_msize\nscalable_allocation_mode\nscalable_allocation_command\n__TBB_malloc_safer_free\n__TBB_malloc_safer_realloc\n__TBB_malloc_safer_msize\n__TBB_malloc_safer_aligned_msize\n__TBB_malloc_safer_aligned_realloc\n; memory pool stuff\n?pool_create@rml@@YAPEAVMemoryPool@1@_JPEBUMemPoolPolicy@1@@Z\n?pool_create_v1@rml@@YA?AW4MemPoolError@1@_JPEBUMemPoolPolicy@1@PEAPEAVMemoryPool@1@@Z\n?pool_destroy@rml@@YA_NPEAVMemoryPool@1@@Z\n?pool_malloc@rml@@YAPEAXPEAVMemoryPool@1@_K@Z\n?pool_free@rml@@YA_NPEAVMemoryPool@1@PEAX@Z\n?pool_reset@rml@@YA_NPEAVMemoryPool@1@@Z\n?pool_realloc@rml@@YAPEAXPEAVMemoryPool@1@PEAX_K@Z\n?pool_aligned_realloc@rml@@YAPEAXPEAVMemoryPool@1@PEAX_K2@Z\n?pool_aligned_malloc@rml@@YAPEAXPEAVMemoryPool@1@_K1@Z\n?pool_identify@rml@@YAPEAVMemoryPool@1@PEAX@Z\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/lib/x86/v140/tbb.def",
    "content": "\n; Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n;\n; The source code contained or described herein and all documents related\n; to the source code (\"Material\") are owned by Intel Corporation or its\n; suppliers or licensors.  Title to the Material remains with Intel\n; Corporation or its suppliers and licensors.  The Material is protected\n; by worldwide copyright laws and treaty provisions.  No part of the\n; Material may be used, copied, reproduced, modified, published, uploaded,\n; posted, transmitted, distributed, or disclosed in any way without\n; Intel's prior express written permission.\n;\n; No license under any patent, copyright, trade secret or other\n; intellectual property right is granted to or conferred upon you by\n; disclosure or delivery of the Materials, either expressly, by\n; implication, inducement, estoppel or otherwise.  Any license under such\n; intellectual property rights must be express and approved by Intel in\n; writing.\n\nEXPORTS\n\n\n\n\n\n\n; Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n;\n; The source code contained or described herein and all documents related\n; to the source code (\"Material\") are owned by Intel Corporation or its\n; suppliers or licensors.  Title to the Material remains with Intel\n; Corporation or its suppliers and licensors.  The Material is protected\n; by worldwide copyright laws and treaty provisions.  No part of the\n; Material may be used, copied, reproduced, modified, published, uploaded,\n; posted, transmitted, distributed, or disclosed in any way without\n; Intel's prior express written permission.\n;\n; No license under any patent, copyright, trade secret or other\n; intellectual property right is granted to or conferred upon you by\n; disclosure or delivery of the Materials, either expressly, by\n; implication, inducement, estoppel or otherwise.  Any license under such\n; intellectual property rights must be express and approved by Intel in\n; writing.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n        \n    \n\n\n\n\n\n\n\n    \n    \n        \n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n    \n\n\n\n    \n\n\n\n    \n\n\n\n\n\n\n\n    \n\n\n    \n    \n\n\n\n\n\n    \n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n    \n\n\n\n    \n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n        \n    \n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__TBB_machine_cmpswp8\n\n\n\n__TBB_machine_fetchadd8\n\n\n\n__TBB_machine_fetchstore8\n__TBB_machine_store8\n__TBB_machine_load8\n__TBB_machine_trylockbyte\n__TBB_machine_try_lock_elided\n__TBB_machine_unlock_elided\n__TBB_machine_is_in_transaction\n\n\n?NFS_Allocate@internal@tbb@@YAPAXIIPAX@Z\n?NFS_GetLineSize@internal@tbb@@YAIXZ\n?NFS_Free@internal@tbb@@YAXPAX@Z\n?allocate_via_handler_v3@internal@tbb@@YAPAXI@Z\n?deallocate_via_handler_v3@internal@tbb@@YAXPAX@Z\n?is_malloc_used_v3@internal@tbb@@YA_NXZ\n\n\n?allocate@allocate_additional_child_of_proxy@internal@tbb@@QBEAAVtask@3@I@Z\n?allocate@allocate_child_proxy@internal@tbb@@QBEAAVtask@3@I@Z\n?allocate@allocate_continuation_proxy@internal@tbb@@QBEAAVtask@3@I@Z\n?allocate@allocate_root_proxy@internal@tbb@@SAAAVtask@3@I@Z\n?destroy@task_base@internal@interface5@tbb@@SAXAAVtask@4@@Z\n?free@allocate_additional_child_of_proxy@internal@tbb@@QBEXAAVtask@3@@Z\n?free@allocate_child_proxy@internal@tbb@@QBEXAAVtask@3@@Z\n?free@allocate_continuation_proxy@internal@tbb@@QBEXAAVtask@3@@Z\n?free@allocate_root_proxy@internal@tbb@@SAXAAVtask@3@@Z\n?internal_set_ref_count@task@tbb@@AAEXH@Z\n?internal_decrement_ref_count@task@tbb@@AAEHXZ\n?is_owned_by_current_thread@task@tbb@@QBE_NXZ\n?note_affinity@task@tbb@@UAEXG@Z\n?resize@affinity_partitioner_base_v3@internal@tbb@@AAEXI@Z\n?self@task@tbb@@SAAAV12@XZ\n?spawn_and_wait_for_all@task@tbb@@QAEXAAVtask_list@2@@Z\n?default_num_threads@task_scheduler_init@tbb@@SAHXZ\n?initialize@task_scheduler_init@tbb@@QAEXHI@Z\n?initialize@task_scheduler_init@tbb@@QAEXH@Z\n?terminate@task_scheduler_init@tbb@@QAEXXZ\n\n?observe@task_scheduler_observer_v3@internal@tbb@@QAEX_N@Z\n\n\n\n\n?internal_current_slot@task_arena_base@internal@interface7@tbb@@KAHXZ\n?internal_initialize@task_arena_base@internal@interface7@tbb@@IAEXXZ\n?internal_terminate@task_arena_base@internal@interface7@tbb@@IAEXXZ\n?internal_attach@task_arena_base@internal@interface7@tbb@@IAEXXZ\n?internal_enqueue@task_arena_base@internal@interface7@tbb@@IBEXAAVtask@4@H@Z\n?internal_execute@task_arena_base@internal@interface7@tbb@@IBEXAAVdelegate_base@234@@Z\n?internal_wait@task_arena_base@internal@interface7@tbb@@IBEXXZ\n\n\n\n\n?destroy@task@tbb@@QAEXAAV12@@Z\n\n\n\n\n?allocate@allocate_root_with_context_proxy@internal@tbb@@QBEAAVtask@3@I@Z\n?free@allocate_root_with_context_proxy@internal@tbb@@QBEXAAVtask@3@@Z\n?change_group@task@tbb@@QAEXAAVtask_group_context@2@@Z\n?is_group_execution_cancelled@task_group_context@tbb@@QBE_NXZ\n?cancel_group_execution@task_group_context@tbb@@QAE_NXZ\n?reset@task_group_context@tbb@@QAEXXZ\n?capture_fp_settings@task_group_context@tbb@@QAEXXZ\n?init@task_group_context@tbb@@IAEXXZ\n?register_pending_exception@task_group_context@tbb@@QAEXXZ\n??1task_group_context@tbb@@QAE@XZ\n\n?set_priority@task_group_context@tbb@@QAEXW4priority_t@2@@Z\n?priority@task_group_context@tbb@@QBE?AW4priority_t@2@XZ\n\n?name@captured_exception@tbb@@UBEPBDXZ\n?what@captured_exception@tbb@@UBEPBDXZ\n??1captured_exception@tbb@@UAE@XZ\n?move@captured_exception@tbb@@UAEPAV12@XZ\n?destroy@captured_exception@tbb@@UAEXXZ\n?set@captured_exception@tbb@@QAEXPBD0@Z\n?clear@captured_exception@tbb@@QAEXXZ\n\n\n\n?throw_bad_last_alloc_exception_v4@internal@tbb@@YAXXZ\n?throw_exception_v4@internal@tbb@@YAXW4exception_id@12@@Z\n?what@bad_last_alloc@tbb@@UBEPBDXZ\n?what@missing_wait@tbb@@UBEPBDXZ\n?what@invalid_multiple_scheduling@tbb@@UBEPBDXZ\n?what@improper_lock@tbb@@UBEPBDXZ\n?what@user_abort@tbb@@UBEPBDXZ\n\n\n?assertion_failure@tbb@@YAXPBDH00@Z\n?get_initial_auto_partitioner_divisor@internal@tbb@@YAIXZ\n?handle_perror@internal@tbb@@YAXHPBD@Z\n?set_assertion_handler@tbb@@YAP6AXPBDH00@ZP6AX0H00@Z@Z\n?runtime_warning@internal@tbb@@YAXPBDZZ\nTBB_runtime_interface_version\n\n\n?itt_load_pointer_with_acquire_v3@internal@tbb@@YAPAXPBX@Z\n?itt_store_pointer_with_release_v3@internal@tbb@@YAXPAX0@Z\n?call_itt_notify_v5@internal@tbb@@YAXHPAX@Z\n?itt_set_sync_name_v3@internal@tbb@@YAXPAXPB_W@Z\n?itt_load_pointer_v3@internal@tbb@@YAPAXPBX@Z\n\n\n\n\n\n\n\n\n\n\n\n??0pipeline@tbb@@QAE@XZ\n??1filter@tbb@@UAE@XZ\n??1pipeline@tbb@@UAE@XZ\n??_7pipeline@tbb@@6B@\n?add_filter@pipeline@tbb@@QAEXAAVfilter@2@@Z\n?clear@pipeline@tbb@@QAEXXZ\n?inject_token@pipeline@tbb@@AAEXAAVtask@2@@Z\n?run@pipeline@tbb@@QAEXI@Z\n\n?run@pipeline@tbb@@QAEXIAAVtask_group_context@2@@Z\n\n?process_item@thread_bound_filter@tbb@@QAE?AW4result_type@12@XZ\n?try_process_item@thread_bound_filter@tbb@@QAE?AW4result_type@12@XZ\n?set_end_of_input@filter@tbb@@IAEXXZ\n\n\n?internal_construct@queuing_rw_mutex@tbb@@QAEXXZ\n?acquire@scoped_lock@queuing_rw_mutex@tbb@@QAEXAAV23@_N@Z\n?downgrade_to_reader@scoped_lock@queuing_rw_mutex@tbb@@QAE_NXZ\n?release@scoped_lock@queuing_rw_mutex@tbb@@QAEXXZ\n?upgrade_to_writer@scoped_lock@queuing_rw_mutex@tbb@@QAE_NXZ\n?try_acquire@scoped_lock@queuing_rw_mutex@tbb@@QAE_NAAV23@_N@Z\n\n\n?try_lock_read@reader_writer_lock@interface5@tbb@@QAE_NXZ\n?try_lock@reader_writer_lock@interface5@tbb@@QAE_NXZ\n?unlock@reader_writer_lock@interface5@tbb@@QAEXXZ\n?lock_read@reader_writer_lock@interface5@tbb@@QAEXXZ\n?lock@reader_writer_lock@interface5@tbb@@QAEXXZ\n?internal_construct@reader_writer_lock@interface5@tbb@@AAEXXZ\n?internal_destroy@reader_writer_lock@interface5@tbb@@AAEXXZ\n?internal_construct@scoped_lock@reader_writer_lock@interface5@tbb@@AAEXAAV234@@Z\n?internal_destroy@scoped_lock@reader_writer_lock@interface5@tbb@@AAEXXZ\n?internal_construct@scoped_lock_read@reader_writer_lock@interface5@tbb@@AAEXAAV234@@Z\n?internal_destroy@scoped_lock_read@reader_writer_lock@interface5@tbb@@AAEXXZ\n\n\n\n?internal_acquire_reader@spin_rw_mutex@tbb@@CAXPAV12@@Z\n?internal_acquire_writer@spin_rw_mutex@tbb@@CA_NPAV12@@Z\n?internal_downgrade@spin_rw_mutex@tbb@@CAXPAV12@@Z\n?internal_itt_releasing@spin_rw_mutex@tbb@@CAXPAV12@@Z\n?internal_release_reader@spin_rw_mutex@tbb@@CAXPAV12@@Z\n?internal_release_writer@spin_rw_mutex@tbb@@CAXPAV12@@Z\n?internal_upgrade@spin_rw_mutex@tbb@@CA_NPAV12@@Z\n?internal_try_acquire_writer@spin_rw_mutex@tbb@@CA_NPAV12@@Z\n?internal_try_acquire_reader@spin_rw_mutex@tbb@@CA_NPAV12@@Z\n\n\n\n?internal_construct@spin_rw_mutex_v3@tbb@@AAEXXZ\n?internal_upgrade@spin_rw_mutex_v3@tbb@@AAE_NXZ\n?internal_downgrade@spin_rw_mutex_v3@tbb@@AAEXXZ\n?internal_acquire_reader@spin_rw_mutex_v3@tbb@@AAEXXZ\n?internal_acquire_writer@spin_rw_mutex_v3@tbb@@AAE_NXZ\n?internal_release_reader@spin_rw_mutex_v3@tbb@@AAEXXZ\n?internal_release_writer@spin_rw_mutex_v3@tbb@@AAEXXZ\n?internal_try_acquire_reader@spin_rw_mutex_v3@tbb@@AAE_NXZ\n?internal_try_acquire_writer@spin_rw_mutex_v3@tbb@@AAE_NXZ\n\n\n?internal_construct@x86_rtm_rw_mutex@internal@interface8@tbb@@AAEXXZ \n?internal_release@x86_rtm_rw_mutex@internal@interface8@tbb@@AAEXAAVscoped_lock@1234@@Z \n?internal_acquire_writer@x86_rtm_rw_mutex@internal@interface8@tbb@@AAEXAAVscoped_lock@1234@_N@Z \n?internal_acquire_reader@x86_rtm_rw_mutex@internal@interface8@tbb@@AAEXAAVscoped_lock@1234@_N@Z \n?internal_upgrade@x86_rtm_rw_mutex@internal@interface8@tbb@@AAE_NAAVscoped_lock@1234@@Z \n?internal_downgrade@x86_rtm_rw_mutex@internal@interface8@tbb@@AAE_NAAVscoped_lock@1234@@Z \n?internal_try_acquire_writer@x86_rtm_rw_mutex@internal@interface8@tbb@@AAE_NAAVscoped_lock@1234@@Z \n\n\n?internal_construct@spin_mutex@tbb@@QAEXXZ\n?internal_acquire@scoped_lock@spin_mutex@tbb@@AAEXAAV23@@Z\n?internal_release@scoped_lock@spin_mutex@tbb@@AAEXXZ\n?internal_try_acquire@scoped_lock@spin_mutex@tbb@@AAE_NAAV23@@Z\n\n\n?internal_acquire@scoped_lock@mutex@tbb@@AAEXAAV23@@Z\n?internal_release@scoped_lock@mutex@tbb@@AAEXXZ\n?internal_try_acquire@scoped_lock@mutex@tbb@@AAE_NAAV23@@Z\n?internal_construct@mutex@tbb@@AAEXXZ\n?internal_destroy@mutex@tbb@@AAEXXZ\n\n\n?internal_acquire@scoped_lock@recursive_mutex@tbb@@AAEXAAV23@@Z\n?internal_release@scoped_lock@recursive_mutex@tbb@@AAEXXZ\n?internal_try_acquire@scoped_lock@recursive_mutex@tbb@@AAE_NAAV23@@Z\n?internal_construct@recursive_mutex@tbb@@AAEXXZ\n?internal_destroy@recursive_mutex@tbb@@AAEXXZ\n\n\n?internal_construct@queuing_mutex@tbb@@QAEXXZ\n?acquire@scoped_lock@queuing_mutex@tbb@@QAEXAAV23@@Z\n?release@scoped_lock@queuing_mutex@tbb@@QAEXXZ\n?try_acquire@scoped_lock@queuing_mutex@tbb@@QAE_NAAV23@@Z\n\n\n?internal_construct@critical_section_v4@internal@tbb@@QAEXXZ\n\n\n\n?internal_grow_predicate@hash_map_segment_base@internal@tbb@@QBE_NXZ\n\n\n?advance@concurrent_queue_iterator_base@internal@tbb@@IAEXXZ\n?assign@concurrent_queue_iterator_base@internal@tbb@@IAEXABV123@@Z\n?internal_size@concurrent_queue_base@internal@tbb@@IBEHXZ\n??0concurrent_queue_base@internal@tbb@@IAE@I@Z\n??0concurrent_queue_iterator_base@internal@tbb@@IAE@ABVconcurrent_queue_base@12@@Z\n??1concurrent_queue_base@internal@tbb@@MAE@XZ\n??1concurrent_queue_iterator_base@internal@tbb@@IAE@XZ\n?internal_pop@concurrent_queue_base@internal@tbb@@IAEXPAX@Z\n?internal_pop_if_present@concurrent_queue_base@internal@tbb@@IAE_NPAX@Z\n?internal_push@concurrent_queue_base@internal@tbb@@IAEXPBX@Z\n?internal_push_if_not_full@concurrent_queue_base@internal@tbb@@IAE_NPBX@Z\n?internal_set_capacity@concurrent_queue_base@internal@tbb@@IAEXHI@Z\n\n\n\n??1concurrent_queue_iterator_base_v3@internal@tbb@@IAE@XZ\n??0concurrent_queue_iterator_base_v3@internal@tbb@@IAE@ABVconcurrent_queue_base_v3@12@@Z\n??0concurrent_queue_iterator_base_v3@internal@tbb@@IAE@ABVconcurrent_queue_base_v3@12@I@Z\n?advance@concurrent_queue_iterator_base_v3@internal@tbb@@IAEXXZ\n?assign@concurrent_queue_iterator_base_v3@internal@tbb@@IAEXABV123@@Z\n??0concurrent_queue_base_v3@internal@tbb@@IAE@I@Z\n??1concurrent_queue_base_v3@internal@tbb@@MAE@XZ\n?internal_pop@concurrent_queue_base_v3@internal@tbb@@IAEXPAX@Z\n?internal_pop_if_present@concurrent_queue_base_v3@internal@tbb@@IAE_NPAX@Z\n?internal_abort@concurrent_queue_base_v3@internal@tbb@@IAEXXZ\n?internal_push@concurrent_queue_base_v3@internal@tbb@@IAEXPBX@Z\n?internal_push_move@concurrent_queue_base_v8@internal@tbb@@IAEXPBX@Z\n?internal_push_if_not_full@concurrent_queue_base_v3@internal@tbb@@IAE_NPBX@Z\n?internal_push_move_if_not_full@concurrent_queue_base_v8@internal@tbb@@IAE_NPBX@Z\n?internal_size@concurrent_queue_base_v3@internal@tbb@@IBEHXZ\n?internal_empty@concurrent_queue_base_v3@internal@tbb@@IBE_NXZ\n?internal_set_capacity@concurrent_queue_base_v3@internal@tbb@@IAEXHI@Z\n?internal_finish_clear@concurrent_queue_base_v3@internal@tbb@@IAEXXZ\n?internal_throw_exception@concurrent_queue_base_v3@internal@tbb@@IBEXXZ\n?assign@concurrent_queue_base_v3@internal@tbb@@IAEXABV123@@Z\n?move_content@concurrent_queue_base_v8@internal@tbb@@IAEXAAV123@@Z\n\n\n\n?internal_assign@concurrent_vector_base@internal@tbb@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z\n?internal_capacity@concurrent_vector_base@internal@tbb@@IBEIXZ\n?internal_clear@concurrent_vector_base@internal@tbb@@IAEXP6AXPAXI@Z_N@Z\n?internal_copy@concurrent_vector_base@internal@tbb@@IAEXABV123@IP6AXPAXPBXI@Z@Z\n?internal_grow_by@concurrent_vector_base@internal@tbb@@IAEIIIP6AXPAXI@Z@Z\n?internal_grow_to_at_least@concurrent_vector_base@internal@tbb@@IAEXIIP6AXPAXI@Z@Z\n?internal_push_back@concurrent_vector_base@internal@tbb@@IAEPAXIAAI@Z\n?internal_reserve@concurrent_vector_base@internal@tbb@@IAEXIII@Z\n\n\n\n??1concurrent_vector_base_v3@internal@tbb@@IAE@XZ\n?internal_assign@concurrent_vector_base_v3@internal@tbb@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z\n?internal_capacity@concurrent_vector_base_v3@internal@tbb@@IBEIXZ\n?internal_clear@concurrent_vector_base_v3@internal@tbb@@IAEIP6AXPAXI@Z@Z\n?internal_copy@concurrent_vector_base_v3@internal@tbb@@IAEXABV123@IP6AXPAXPBXI@Z@Z\n?internal_grow_by@concurrent_vector_base_v3@internal@tbb@@IAEIIIP6AXPAXPBXI@Z1@Z\n?internal_grow_to_at_least@concurrent_vector_base_v3@internal@tbb@@IAEXIIP6AXPAXPBXI@Z1@Z\n?internal_push_back@concurrent_vector_base_v3@internal@tbb@@IAEPAXIAAI@Z\n?internal_reserve@concurrent_vector_base_v3@internal@tbb@@IAEXIII@Z\n?internal_compact@concurrent_vector_base_v3@internal@tbb@@IAEPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z\n?internal_swap@concurrent_vector_base_v3@internal@tbb@@IAEXAAV123@@Z\n?internal_throw_exception@concurrent_vector_base_v3@internal@tbb@@IBEXI@Z\n?internal_resize@concurrent_vector_base_v3@internal@tbb@@IAEXIIIPBXP6AXPAXI@ZP6AX10I@Z@Z\n?internal_grow_to_at_least_with_result@concurrent_vector_base_v3@internal@tbb@@IAEIIIP6AXPAXPBXI@Z1@Z\n\n\n?join@tbb_thread_v3@internal@tbb@@QAEXXZ\n?detach@tbb_thread_v3@internal@tbb@@QAEXXZ\n?internal_start@tbb_thread_v3@internal@tbb@@AAEXP6GIPAX@Z0@Z\n?allocate_closure_v3@internal@tbb@@YAPAXI@Z\n?free_closure_v3@internal@tbb@@YAXPAX@Z\n?hardware_concurrency@tbb_thread_v3@internal@tbb@@SAIXZ\n?thread_yield_v3@internal@tbb@@YAXXZ\n?thread_sleep_v3@internal@tbb@@YAXABVinterval_t@tick_count@2@@Z\n?move_v3@internal@tbb@@YAXAAVtbb_thread_v3@12@0@Z\n?thread_get_id_v3@internal@tbb@@YA?AVid@tbb_thread_v3@12@XZ\n\n\n?internal_initialize_condition_variable@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z\n?internal_condition_variable_wait@internal@interface5@tbb@@YA_NAATcondvar_impl_t@123@PAVmutex@3@PBVinterval_t@tick_count@3@@Z\n?internal_condition_variable_notify_one@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z\n?internal_condition_variable_notify_all@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z\n?internal_destroy_condition_variable@internal@interface5@tbb@@YAXAATcondvar_impl_t@123@@Z\n\n\n?active_value@global_control@interface9@tbb@@CAIH@Z\n?internal_create@global_control@interface9@tbb@@AAEXXZ\n?internal_destroy@global_control@interface9@tbb@@AAEXXZ\n\n\n\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/lib/x86/v140/tbbmalloc.def",
    "content": "\n; Copyright 2005-2016 Intel Corporation.  All Rights Reserved.\n;\n; The source code contained or described herein and all documents related\n; to the source code (\"Material\") are owned by Intel Corporation or its\n; suppliers or licensors.  Title to the Material remains with Intel\n; Corporation or its suppliers and licensors.  The Material is protected\n; by worldwide copyright laws and treaty provisions.  No part of the\n; Material may be used, copied, reproduced, modified, published, uploaded,\n; posted, transmitted, distributed, or disclosed in any way without\n; Intel's prior express written permission.\n;\n; No license under any patent, copyright, trade secret or other\n; intellectual property right is granted to or conferred upon you by\n; disclosure or delivery of the Materials, either expressly, by\n; implication, inducement, estoppel or otherwise.  Any license under such\n; intellectual property rights must be express and approved by Intel in\n; writing.\n\nEXPORTS\n\n; frontend.cpp\nscalable_calloc\nscalable_free\nscalable_malloc\nscalable_realloc\nscalable_posix_memalign\nscalable_aligned_malloc\nscalable_aligned_realloc\nscalable_aligned_free\nscalable_msize\nscalable_allocation_mode\nscalable_allocation_command\n__TBB_malloc_safer_free\n__TBB_malloc_safer_realloc\n__TBB_malloc_safer_msize\n__TBB_malloc_safer_aligned_msize\n__TBB_malloc_safer_aligned_realloc\n?pool_create@rml@@YAPAVMemoryPool@1@HPBUMemPoolPolicy@1@@Z\n?pool_create_v1@rml@@YA?AW4MemPoolError@1@HPBUMemPoolPolicy@1@PAPAVMemoryPool@1@@Z\n?pool_destroy@rml@@YA_NPAVMemoryPool@1@@Z\n?pool_malloc@rml@@YAPAXPAVMemoryPool@1@I@Z\n?pool_free@rml@@YA_NPAVMemoryPool@1@PAX@Z\n?pool_reset@rml@@YA_NPAVMemoryPool@1@@Z\n?pool_realloc@rml@@YAPAXPAVMemoryPool@1@PAXI@Z\n?pool_aligned_realloc@rml@@YAPAXPAVMemoryPool@1@PAXII@Z\n?pool_aligned_malloc@rml@@YAPAXPAVMemoryPool@1@II@Z\n?pool_identify@rml@@YAPAVMemoryPool@1@PAX@Z\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/tbb-license.txt",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n----------------     END OF Gnu General Public License     ----------------\n\nThe source code of Threading Building Blocks is distributed under version 2\nof the GNU General Public License, with the so-called \"runtime exception,\"\nas follows (or see any header or implementation file):\n\n   As a special exception, you may use this file as part of a free software\n   library without restriction.  Specifically, if other files instantiate\n   templates or use macros or inline functions from this file, or you compile\n   this file and link it with other files to produce an executable, this\n   file does not by itself cause the resulting executable to be covered by\n   the GNU General Public License.  This exception does not however\n   invalidate any other reasons why the executable file might be covered by\n   the GNU General Public License.\n"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/tbb.props",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup />\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)lib\\3rdParty\\tbb\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(SolutionDir)lib\\3rdParty\\tbb\\lib\\$(PlatformShortName)\\$(PlatformToolset);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>tbb.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <PreBuildEvent>\n      <Command>xcopy /I /E /Y /D /C \"$(SolutionDir)lib\\3rdParty\\tbb\\bin\\$(PlatformShortName)\\$(PlatformToolset)\\tbb.dll\" \"$(OutDir)\"</Command>\n    </PreBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup />\n</Project>"
  },
  {
    "path": "FaceLivenessDetection/lib/3rdParty/tbb/tbb_d.props",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup />\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(SolutionDir)lib\\3rdParty\\tbb\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(SolutionDir)lib\\3rdParty\\tbb\\lib\\$(PlatformShortName)\\$(PlatformToolset);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>tbb_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n    <PreBuildEvent>\n      <Command>xcopy /I /E /Y /D /C \"$(SolutionDir)lib\\3rdParty\\tbb\\bin\\$(PlatformShortName)\\$(PlatformToolset)\\tbb_debug.dll\" \"$(OutDir)\"</Command>\n    </PreBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup />\n</Project>"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/AU_predictors/AU_all_best.txt",
    "content": "svm_combined/AU_1_dynamic.dat AU01\nsvm_combined/AU_2_dynamic.dat AU02\nsvm_combined/AU_4_static.dat AU04\nsvm_combined/AU_5_static.dat AU05\nsvm_combined/AU_6_static.dat AU06\nsvm_combined/AU_7_static.dat AU07\nsvm_combined/AU_9_dynamic.dat AU09\nsvm_combined/AU_10_static.dat AU10\nsvm_combined/AU_12_static.dat AU12\nsvm_combined/AU_14_static.dat AU14\nsvm_combined/AU_15_dynamic.dat AU15\nsvm_combined/AU_17_dynamic.dat AU17\nsvm_combined/AU_20_dynamic.dat AU20\nsvm_combined/AU_23_static.dat AU23\nsvm_combined/AU_25_dynamic.dat AU25\nsvm_combined/AU_26_dynamic.dat AU26\nsvm_combined/AU_28_static.dat AU28\nsvm_combined/AU_45_dynamic.dat AU45\nsvr_combined/AU_1_dynamic_intensity_comb.dat AU01\nsvr_combined/AU_2_dynamic_intensity_comb.dat AU02\nsvr_combined/AU_4_static_intensity_comb.dat AU04\nsvr_combined/AU_5_dynamic_intensity.dat AU05\nsvr_combined/AU_6_static_intensity_comb.dat AU06\nsvr_combined/AU_7_static_intensity_comb.dat AU07\nsvr_combined/AU_9_dynamic_intensity.dat AU09\nsvr_combined/AU_10_static_intensity_comb.dat AU10\nsvr_combined/AU_12_static_intensity_comb.dat AU12\nsvr_combined/AU_14_static_intensity.dat AU14\nsvr_combined/AU_15_dynamic_intensity_comb.dat AU15\nsvr_combined/AU_17_dynamic_intensity_comb.dat AU17\nsvr_combined/AU_20_dynamic_intensity.dat AU20\nsvr_combined/AU_23_dynamic_intensity_comb.dat AU23\nsvr_combined/AU_25_dynamic_intensity_comb.dat AU25\nsvr_combined/AU_26_dynamic_intensity_comb.dat AU26\nsvr_combined/AU_45_dynamic_intensity_comb.dat AU45"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/AU_predictors/AU_all_static.txt",
    "content": "svm_combined/AU_1_static.dat AU01\nsvm_combined/AU_2_static.dat AU02\nsvm_combined/AU_4_static.dat AU04\nsvm_combined/AU_5_static.dat AU05\nsvm_combined/AU_6_static.dat AU06\nsvm_combined/AU_7_static.dat AU07\nsvm_combined/AU_9_static.dat AU09\nsvm_combined/AU_10_static.dat AU10\nsvm_combined/AU_12_static.dat AU12\nsvm_combined/AU_14_static.dat AU14\nsvm_combined/AU_15_static.dat AU15\nsvm_combined/AU_17_static.dat AU17\nsvm_combined/AU_20_static.dat AU20\nsvm_combined/AU_23_static.dat AU23\nsvm_combined/AU_25_static.dat AU25\nsvm_combined/AU_26_static.dat AU26\nsvm_combined/AU_28_static.dat AU28\nsvm_combined/AU_45_static.dat AU45\nsvr_combined/AU_1_static_intensity.dat AU01\nsvr_combined/AU_2_static_intensity_comb.dat AU02\nsvr_combined/AU_4_static_intensity_comb.dat AU04\nsvr_combined/AU_5_static_intensity.dat AU05\nsvr_combined/AU_6_static_intensity_comb.dat AU06\nsvr_combined/AU_7_static_intensity_comb.dat AU07\nsvr_combined/AU_9_static_intensity.dat AU09\nsvr_combined/AU_10_static_intensity_comb.dat AU10\nsvr_combined/AU_12_static_intensity_comb.dat AU12\nsvr_combined/AU_14_static_intensity.dat AU14\nsvr_combined/AU_15_static_intensity_comb.dat AU15\nsvr_combined/AU_17_static_intensity_comb.dat AU17\nsvr_combined/AU_20_static_intensity.dat AU20\nsvr_combined/AU_23_static_intensity_comb.dat AU23\nsvr_combined/AU_25_static_intensity.dat AU25\nsvr_combined/AU_26_static_intensity_comb.dat AU26\nsvr_combined/AU_45_static_intensity_comb.dat AU45"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/CMakeLists.txt",
    "content": "#TBB library\ninclude_directories(${TBB_ROOT_DIR}/include)\n\ninclude_directories(${BOOST_INCLUDE_DIR})\n\nSET(SOURCE\n    src/Face_utils.cpp\n\tsrc/FaceAnalyser.cpp\n\tsrc/SVM_dynamic_lin.cpp\n\tsrc/SVM_static_lin.cpp\n\tsrc/SVR_dynamic_lin_regressors.cpp\n\tsrc/SVR_static_lin_regressors.cpp\n\tsrc/GazeEstimation.cpp\n)\n\nSET(HEADERS\n    include/Face_utils.h\t\n\tinclude/FaceAnalyser.h\n\tinclude/SVM_dynamic_lin.h\n\tinclude/SVM_static_lin.h\n\tinclude/SVR_dynamic_lin_regressors.h\n\tinclude/SVR_static_lin_regressors.h\n\tinclude/GazeEstimation.h\n)\n\ninclude_directories(./include)\ninclude_directories(${FACEANALYSER_SOURCE_DIR}/include)\ninclude_directories(../LandmarkDetector/include)\n\nadd_library( FaceAnalyser ${SOURCE} ${HEADERS})\n\ninstall (TARGETS FaceAnalyser DESTINATION lib)\ninstall (FILES ${HEADERS} DESTINATION include/FaceLivenessDetection)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/FaceAnalyser.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{0E7FC556-0E80-45EA-A876-DDE4C2FEDCD7}</ProjectGuid>\n    <RootNamespace>FaceAnalyser</RootNamespace>\n    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v140</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v140</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v140</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v140</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\..\\3rdParty\\dlib\\dlib.props\" />\n    <Import Project=\"..\\..\\3rdParty\\OpenCV3.1\\openCV3.1.props\" />\n    <Import Project=\"..\\..\\3rdParty\\boost\\boost_d.props\" />\n    <Import Project=\"..\\..\\3rdParty\\tbb\\tbb_d.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\..\\3rdParty\\dlib\\dlib.props\" />\n    <Import Project=\"..\\..\\3rdParty\\OpenCV3.1\\openCV3.1.props\" />\n    <Import Project=\"..\\..\\3rdParty\\boost\\boost_d.props\" />\n    <Import Project=\"..\\..\\3rdParty\\tbb\\tbb_d.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\..\\3rdParty\\dlib\\dlib.props\" />\n    <Import Project=\"..\\..\\3rdParty\\tbb\\tbb.props\" />\n    <Import Project=\"..\\..\\3rdParty\\boost\\boost.props\" />\n    <Import Project=\"..\\..\\3rdParty\\OpenCV3.1\\openCV3.1.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\..\\3rdParty\\dlib\\dlib.props\" />\n    <Import Project=\"..\\..\\3rdParty\\tbb\\tbb.props\" />\n    <Import Project=\"..\\..\\3rdParty\\boost\\boost.props\" />\n    <Import Project=\"..\\..\\3rdParty\\OpenCV3.1\\openCV3.1.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <IntDir>$(ProjectDir)$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <IntDir>$(ProjectDir)$(Configuration)\\</IntDir>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>false</SDLCheck>\n      <AdditionalIncludeDirectories>./include;$(SolutionDir)lib\\local\\LandmarkDetector\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n    <PreLinkEvent>\n      <Command>xcopy /I /E /Y /D \"$(SolutionDir)lib\\local\\FaceAnalyser\\AU_predictors\" \"$(OutDir)AU_predictors\"</Command>\n    </PreLinkEvent>\n    <PostBuildEvent>\n      <Command>xcopy /I /E /Y /D \"$(SolutionDir)lib\\local\\FaceAnalyser\\AU_predictors\" \"$(OutDir)AU_predictors\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>false</SDLCheck>\n      <AdditionalIncludeDirectories>./include;$(SolutionDir)lib\\local\\LandmarkDetector\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n    <PreLinkEvent>\n      <Command>xcopy /I /E /Y /D \"$(SolutionDir)lib\\local\\FaceAnalyser\\AU_predictors\" \"$(OutDir)AU_predictors\"</Command>\n    </PreLinkEvent>\n    <PostBuildEvent>\n      <Command>xcopy /I /E /Y /D \"$(SolutionDir)lib\\local\\FaceAnalyser\\AU_predictors\" \"$(OutDir)AU_predictors\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>\n      </SDLCheck>\n      <AdditionalIncludeDirectories>./include;$(SolutionDir)lib\\local\\LandmarkDetector\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n    </Link>\n    <PreLinkEvent>\n      <Command>\n      </Command>\n    </PreLinkEvent>\n    <PostBuildEvent>\n      <Command>xcopy /I /E /Y /D \"$(SolutionDir)lib\\local\\FaceAnalyser\\AU_predictors\" \"$(OutDir)AU_predictors\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>\n      </SDLCheck>\n      <AdditionalIncludeDirectories>./include;$(SolutionDir)lib\\local\\LandmarkDetector\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n    </Link>\n    <PreLinkEvent>\n      <Command>\n      </Command>\n    </PreLinkEvent>\n    <PostBuildEvent>\n      <Command>xcopy /I /E /Y /D \"$(SolutionDir)lib\\local\\FaceAnalyser\\AU_predictors\" \"$(OutDir)AU_predictors\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\3rdParty\\dlib\\dlib.vcxproj\">\n      <Project>{b47a5f12-2567-44e9-ae49-35763ec82149}</Project>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\LandmarkDetector\\LandmarkDetector.vcxproj\">\n      <Project>{bdc1d107-de17-4705-8e7b-cdde8bfb2bf8}</Project>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"src\\GazeEstimation.cpp\" />\n    <ClCompile Include=\"src\\SVM_dynamic_lin.cpp\" />\n    <ClCompile Include=\"src\\SVM_static_lin.cpp\" />\n    <ClCompile Include=\"src\\SVR_dynamic_lin_regressors.cpp\" />\n    <ClCompile Include=\"src\\SVR_static_lin_regressors.cpp\" />\n    <ClInclude Include=\"include\\FaceAnalyser.h\" />\n    <ClInclude Include=\"include\\Face_utils.h\">\n      <FileType>CppCode</FileType>\n    </ClInclude>\n    <ClCompile Include=\"src\\FaceAnalyser.cpp\" />\n    <ClCompile Include=\"src\\Face_utils.cpp\" />\n    <ClInclude Include=\"include\\GazeEstimation.h\" />\n    <ClInclude Include=\"include\\SVM_dynamic_lin.h\" />\n    <ClInclude Include=\"include\\SVM_static_lin.h\" />\n    <ClInclude Include=\"include\\SVR_dynamic_lin_regressors.h\" />\n    <ClInclude Include=\"include\\SVR_static_lin_regressors.h\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/FaceAnalyser.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"include\\Face_utils.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"include\\FaceAnalyser.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"include\\SVM_dynamic_lin.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"include\\SVM_static_lin.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"include\\SVR_dynamic_lin_regressors.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"include\\SVR_static_lin_regressors.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"include\\GazeEstimation.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"src\\Face_utils.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\FaceAnalyser.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\SVM_dynamic_lin.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\SVM_static_lin.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\SVR_dynamic_lin_regressors.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\SVR_static_lin_regressors.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\GazeEstimation.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/include/FaceAnalyser.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __FACEANALYSER_h_\n#define __FACEANALYSER_h_\n\n#include \"SVR_dynamic_lin_regressors.h\"\n#include \"SVR_static_lin_regressors.h\"\n#include \"SVM_static_lin.h\"\n#include \"SVM_dynamic_lin.h\"\n\n#include <string>\n#include <vector>\n\n#include <opencv2/core/core.hpp>\n\n#include \"LandmarkCoreIncludes.h\"\n\nnamespace FaceAnalysis\n{\n\n\tclass FaceAnalyser {\n\n\tpublic:\n\n\n\t\tenum RegressorType { SVR_appearance_static_linear = 0, SVR_appearance_dynamic_linear = 1, SVR_dynamic_geom_linear = 2, SVR_combined_linear = 3, SVM_linear_stat = 4, SVM_linear_dyn = 5, SVR_linear_static_seg = 6, SVR_linear_dynamic_seg = 7 };\n\n\t\t// Constructor from a model file (or a default one if not provided\n\t\t// TODO scale width and height should be read in as part of the model as opposed to being here?\n\t\tFaceAnalyser(vector<cv::Vec3d> orientation_bins = vector<cv::Vec3d>(), double scale = 0.7, int width = 112, int height = 112, std::string au_location = \"AU_predictors/AU_all_best.txt\", std::string tri_location = \"model/tris_68_full.txt\");\n\n\t\tvoid AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CLNF& clnf, double timestamp_seconds, bool online = false, bool visualise = true);\n\n\t\t// If the features are extracted manually (shouldn't really be used)\n\t\tvoid PredictAUs(const cv::Mat_<double>& hog_features, const cv::Mat_<double>& geom_features, const LandmarkDetector::CLNF& clnf_model, bool online);\n\n\t\tcv::Mat GetLatestHOGDescriptorVisualisation();\n\n\t\tdouble GetCurrentTimeSeconds();\n\n\t\t// Grab the current predictions about AUs from the face analyser\n\t\tstd::vector<std::pair<std::string, double>> GetCurrentAUsClass() const; // AU presence\n\t\tstd::vector<std::pair<std::string, double>> GetCurrentAUsReg() const;   // AU intensity\n\t\tstd::vector<std::pair<std::string, double>> GetCurrentAUsCombined() const; // Both presense and intensity\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   // A standalone call for predicting AUs from a static image, the first element in the pair represents occurence the second intensity\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   // This call is useful for detecting action units in images\n\t\tstd::pair<std::vector<std::pair<string, double>>, std::vector<std::pair<string, double>>> PredictStaticAUs(const cv::Mat& frame, const LandmarkDetector::CLNF& clnf, bool visualise = true);\n\n\t\tvoid Reset();\n\n\t\tvoid GetLatestHOG(cv::Mat_<double>& hog_descriptor, int& num_rows, int& num_cols);\n\t\tvoid GetLatestAlignedFace(cv::Mat& image);\n\n\t\tvoid GetLatestNeutralHOG(cv::Mat_<double>& hog_descriptor, int& num_rows, int& num_cols);\n\n\t\tcv::Mat_<int> GetTriangulation();\n\n\t\tvoid GetGeomDescriptor(cv::Mat_<double>& geom_desc);\n\n\t\t// Grab the names of AUs being predicted\n\t\tstd::vector<std::string> GetAUClassNames() const; // Presence\n\t\tstd::vector<std::string> GetAURegNames() const; // Intensity\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Identify if models are static or dynamic (useful for correction and shifting)\n\t\tstd::vector<bool> GetDynamicAUClass() const; // Presence\n\t\tstd::vector<std::pair<string, bool>> GetDynamicAUReg() const; // Intensity\n\n\n\t\tvoid ExtractAllPredictionsOfflineReg(vector<std::pair<std::string, vector<double>>>& au_predictions, vector<double>& confidences, vector<bool>& successes, vector<double>& timestamps, bool dynamic);\n\t\tvoid ExtractAllPredictionsOfflineClass(vector<std::pair<std::string, vector<double>>>& au_predictions, vector<double>& confidences, vector<bool>& successes, vector<double>& timestamps, bool dynamic);\n\n\t\t// Helper function for post-processing AU output files\n\t\tvoid PostprocessOutputFile(string output_file, bool dynamic);\n\n\tprivate:\n\n\t\t// Where the predictions are kept\n\t\tstd::vector<std::pair<std::string, double>> AU_predictions_reg;\n\t\tstd::vector<std::pair<std::string, double>> AU_predictions_class;\n\n\t\tstd::vector<std::pair<std::string, double>> AU_predictions_combined;\n\n\t\t// Keeping track of AU predictions over time (useful for post-processing)\n\t\tvector<double> timestamps;\n\t\tstd::map<std::string, vector<double>> AU_predictions_reg_all_hist;\n\t\tstd::map<std::string, vector<double>> AU_predictions_class_all_hist;\n\t\tstd::vector<double> confidences;\n\t\tstd::vector<bool> valid_preds;\n\n\t\tint frames_tracking;\n\n\t\t// Cache of intermediate images\n\t\tcv::Mat aligned_face_for_au;\n\t\tcv::Mat aligned_face_for_output;\n\t\tcv::Mat hog_descriptor_visualisation;\n\n\t\t// Private members to be used for predictions\n\t\t// The HOG descriptor of the last frame\n\t\tcv::Mat_<double> hog_desc_frame;\n\t\tint num_hog_rows;\n\t\tint num_hog_cols;\n\n\t\t// Keep a running median of the hog descriptors and a aligned images\n\t\tcv::Mat_<double> hog_desc_median;\n\t\tcv::Mat_<double> face_image_median;\n\n\t\t// Use histograms for quick (but approximate) median computation\n\t\t// Use the same for\n\t\tvector<cv::Mat_<unsigned int> > hog_desc_hist;\n\n\t\t// This is not being used at the moment as it is a bit slow\n\t\tvector<cv::Mat_<unsigned int> > face_image_hist;\n\t\tvector<int> face_image_hist_sum;\n\n\t\tvector<cv::Vec3d> head_orientations;\n\n\t\tint num_bins_hog;\n\t\tdouble min_val_hog;\n\t\tdouble max_val_hog;\n\t\tvector<int> hog_hist_sum;\n\t\tint view_used;\n\n\t\t// The geometry descriptor (rigid followed by non-rigid shape parameters from CLNF)\n\t\tcv::Mat_<double> geom_descriptor_frame;\n\t\tcv::Mat_<double> geom_descriptor_median;\n\n\t\tint geom_hist_sum;\n\t\tcv::Mat_<unsigned int> geom_desc_hist;\n\t\tint num_bins_geom;\n\t\tdouble min_val_geom;\n\t\tdouble max_val_geom;\n\n\t\t// Using the bounding box of previous analysed frame to determine if a reset is needed\n\t\tcv::Rect_<double> face_bounding_box;\n\n\t\t// The AU predictions internally\n\t\tstd::vector<std::pair<std::string, double>> PredictCurrentAUs(int view);\n\t\tstd::vector<std::pair<std::string, double>> PredictCurrentAUsClass(int view);\n\n\t\t// special step for online (rather than offline AU prediction)\n\t\tstd::vector<pair<string, double>> CorrectOnlineAUs(std::vector<std::pair<std::string, double>> predictions_orig, int view, bool dyn_shift = false, bool dyn_scale = false, bool update_track = true, bool clip_values = false);\n\n\t\tvoid ReadAU(std::string au_location);\n\n\t\tvoid ReadRegressor(std::string fname, const vector<string>& au_names);\n\n\t\t// A utility function for keeping track of approximate running medians used for AU and emotion inference using a set of histograms (the histograms are evenly spaced from min_val to max_val)\n\t\t// Descriptor has to be a row vector\n\t\t// TODO this duplicates some other code\n\t\tvoid UpdateRunningMedian(cv::Mat_<unsigned int>& histogram, int& hist_sum, cv::Mat_<double>& median, const cv::Mat_<double>& descriptor, bool update, int num_bins, double min_val, double max_val);\n\t\tvoid ExtractMedian(cv::Mat_<unsigned int>& histogram, int hist_count, cv::Mat_<double>& median, int num_bins, double min_val, double max_val);\n\n\t\t// The linear SVR regressors\n\t\tSVR_static_lin_regressors AU_SVR_static_appearance_lin_regressors;\n\t\tSVR_dynamic_lin_regressors AU_SVR_dynamic_appearance_lin_regressors;\n\n\t\t// The linear SVM classifiers\n\t\tSVM_static_lin AU_SVM_static_appearance_lin;\n\t\tSVM_dynamic_lin AU_SVM_dynamic_appearance_lin;\n\n\t\t// The AUs predicted by the model are not always 0 calibrated to a person. That is they don't always predict 0 for a neutral expression\n\t\t// Keeping track of the predictions we can correct for this, by assuming that at least \"ratio\" of frames are neutral and subtract that value of prediction, only perform the correction after min_frames\n\t\tvoid UpdatePredictionTrack(cv::Mat_<unsigned int>& prediction_corr_histogram, int& prediction_correction_count, vector<double>& correction, const vector<pair<string, double>>& predictions, double ratio = 0.25, int num_bins = 200, double min_val = -3, double max_val = 5, int min_frames = 10);\n\t\tvoid GetSampleHist(cv::Mat_<unsigned int>& prediction_corr_histogram, int prediction_correction_count, vector<double>& sample, double ratio, int num_bins = 200, double min_val = 0, double max_val = 5);\n\n\t\tvoid PostprocessPredictions();\n\n\t\tvector<cv::Mat_<unsigned int>> au_prediction_correction_histogram;\n\t\tvector<int> au_prediction_correction_count;\n\n\t\t// Some dynamic scaling (the logic is that before the extreme versions of expression or emotion are shown,\n\t\t// it is hard to tell the boundaries, this allows us to scale the model to the most extreme seen)\n\t\t// They have to be view specific\n\t\tvector<vector<double>> dyn_scaling;\n\n\t\t// Keeping track of predictions for summary stats\n\t\tcv::Mat_<double> AU_prediction_track;\n\t\tcv::Mat_<double> geom_desc_track;\n\n\t\tdouble current_time_seconds;\n\n\t\t// Used for face alignment\n\t\tcv::Mat_<int> triangulation;\n\t\tdouble align_scale;\n\t\tint align_width;\n\t\tint align_height;\n\n\t\t// Useful placeholder for renormalizing the initial frames of shorter videos\n\t\tint max_init_frames = 3000;\n\t\tvector<cv::Mat_<double>> hog_desc_frames_init;\n\t\tvector<cv::Mat_<double>> geom_descriptor_frames_init;\n\t\tvector<int> views;\n\t\tbool postprocessed = false;\n\t\tint frames_tracking_succ = 0;\n\n\t};\n\t//===========================================================================\n}\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/include/Face_utils.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __FACE_UTILS_h_\n#define __FACE_UTILS_h_\n\n#include <LandmarkCoreIncludes.h>\n\n#include <opencv2/core/core.hpp>\n#include <opencv2/highgui/highgui.hpp>\n\nnamespace FaceAnalysis\n{\n\t//===========================================================================\t\n\t// Defining a set of useful utility functions to be used within FaceAnalyser\n\n\t// Aligning a face to a common reference frame\n\tvoid AlignFace(cv::Mat& aligned_face, const cv::Mat& frame, const LandmarkDetector::CLNF& clnf_model, bool rigid = true, double scale = 0.6, int width = 96, int height = 96);\n\tvoid AlignFaceMask(cv::Mat& aligned_face, const cv::Mat& frame, const LandmarkDetector::CLNF& clnf_model, const cv::Mat_<int>& triangulation, bool rigid = true, double scale = 0.6, int width = 96, int height = 96);\n\n\tvoid Extract_FHOG_descriptor(cv::Mat_<double>& descriptor, const cv::Mat& image, int& num_rows, int& num_cols, int cell_size = 8);\n\n\tvoid Visualise_FHOG(const cv::Mat_<double>& descriptor, int num_rows, int num_cols, cv::Mat& visualisation);\n\n\t// The following two methods go hand in hand\n\tvoid ExtractSummaryStatistics(const cv::Mat_<double>& descriptors, cv::Mat_<double>& sum_stats, bool mean, bool stdev, bool max_min);\n\tvoid AddDescriptor(cv::Mat_<double>& descriptors, cv::Mat_<double> new_descriptor, int curr_frame, int num_frames_to_keep = 120);\n\n}\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/include/GazeEstimation.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __GAZEESTIMATION_h_\n#define __GAZEESTIMATION_h_\n\n#include \"opencv2/core/core.hpp\"\n#include \"LandmarkCoreIncludes.h\"\n\nnamespace FaceAnalysis\n{\n\n\tvoid EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Point3f& gaze_absolute, float fx, float fy, float cx, float cy, bool left_eye);\n\tvoid DrawGaze(cv::Mat img, const LandmarkDetector::CLNF& clnf_model, cv::Point3f gazeVecAxisLeft, cv::Point3f gazeVecAxisRight, float fx, float fy, float cx, float cy);\n\n}\n#endif"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/include/SVM_dynamic_lin.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __SVMDYNAMICLIN_h_\n#define __SVMDYNAMICLIN_h_\n\n#include <vector>\n#include <string>\n\n#include <stdio.h>\n#include <iostream>\n\n#include <opencv2/core/core.hpp>\n\nnamespace FaceAnalysis\n{\n\n// Collection of linear SVR regressors for AU prediction\nclass SVM_dynamic_lin{\n\npublic:\n\n\tSVM_dynamic_lin()\n\t{}\n\n\t// Predict the AU from HOG appearance of the face\n\tvoid Predict(std::vector<double>& predictions, std::vector<std::string>& names, const cv::Mat_<double>& fhog_descriptor, const cv::Mat_<double>& geom_params, const cv::Mat_<double>& running_median, const cv::Mat_<double>& running_median_geom);\n\n\t// Reading in the model (or adding to it)\n\tvoid Read(std::ifstream& stream, const std::vector<std::string>& au_names);\n\n\tstd::vector<std::string> GetAUNames() const\n\t{\n\t\treturn AU_names;\n\t}\n\nprivate:\n\n\t// The names of Action Units this model is responsible for\n\tstd::vector<std::string> AU_names;\n\n\t// For normalisation\n\tcv::Mat_<double> means;\n\t\n\t// For actual prediction\n\tcv::Mat_<double> support_vectors;\t\n\tcv::Mat_<double> biases;\n\n\tstd::vector<double> pos_classes;\n\tstd::vector<double> neg_classes;\n\n};\n  //===========================================================================\n}\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/include/SVM_static_lin.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __SVMSTATICLIN_h_\n#define __SVMSTATICLIN_h_\n\n#include <vector>\n#include <string>\n\n#include <stdio.h>\n#include <iostream>\n\n#include <opencv2/core/core.hpp>\n\nnamespace FaceAnalysis\n{\n\n// Collection of linear SVR regressors for AU prediction\nclass SVM_static_lin{\n\npublic:\n\n\tSVM_static_lin()\n\t{}\n\n\t// Predict the AU from HOG appearance of the face\n\tvoid Predict(std::vector<double>& predictions, std::vector<std::string>& names, const cv::Mat_<double>& fhog_descriptor, const cv::Mat_<double>& geom_params);\n\n\t// Reading in the model (or adding to it)\n\tvoid Read(std::ifstream& stream, const std::vector<std::string>& au_names);\n\n\tstd::vector<std::string> GetAUNames() const\n\t{\n\t\treturn AU_names;\n\t}\n\nprivate:\n\n\t// The names of Action Units this model is responsible for\n\tstd::vector<std::string> AU_names;\n\n\t// For normalisation\n\tcv::Mat_<double> means;\n\t\n\t// For actual prediction\n\tcv::Mat_<double> support_vectors;\t\n\tcv::Mat_<double> biases;\n\n\tstd::vector<double> pos_classes;\n\tstd::vector<double> neg_classes;\n\n};\n  //===========================================================================\n}\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/include/SVR_dynamic_lin_regressors.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __SVRDYNAMICLINREGRESSORS_h_\n#define __SVRDYNAMICLINREGRESSORS_h_\n\n#include <vector>\n#include <string>\n\n#include <stdio.h>\n#include <iostream>\n\n#include <opencv2/core/core.hpp>\n\nnamespace FaceAnalysis\n{\n\n// Collection of linear SVR regressors for AU prediction that uses per person face nomalisation with the help of a running median\nclass SVR_dynamic_lin_regressors{\n\npublic:\n\n\tSVR_dynamic_lin_regressors()\n\t{}\n\n\t// Predict the AU from HOG appearance of the face\n\tvoid Predict(std::vector<double>& predictions, std::vector<std::string>& names, const cv::Mat_<double>& descriptor, const cv::Mat_<double>& geom_params, const cv::Mat_<double>& running_median, const cv::Mat_<double>& running_median_geom);\n\n\t// Reading in the model (or adding to it)\n\tvoid Read(std::ifstream& stream, const std::vector<std::string>& au_names);\n\n\tstd::vector<std::string> GetAUNames() const\n\t{\n\t\treturn AU_names;\n\t}\n\n\tstd::vector<double> GetCutoffs() const\n\t{\n\t\treturn cutoffs;\t\t\n\t}\n\nprivate:\n\n\t// The names of Action Units this model is responsible for\n\tstd::vector<std::string> AU_names;\n\n\t// For normalisation\n\tcv::Mat_<double> means;\n\t\n\t// For actual prediction\n\tcv::Mat_<double> support_vectors;\t\n\tcv::Mat_<double> biases;\n\n\t// For AU callibration (see the OpenFace paper)\n\tstd::vector<double> cutoffs;\n\n};\n  //===========================================================================\n}\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/include/SVR_static_lin_regressors.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __SVRSTATICLINREGRESSORS_h_\n#define __SVRSTATICLINREGRESSORS_h_\n\n#include <vector>\n#include <string>\n\n#include <stdio.h>\n#include <iostream>\n\n#include <opencv2/core/core.hpp>\n\nnamespace FaceAnalysis\n{\n\n// Collection of linear SVR regressors for AU prediction\nclass SVR_static_lin_regressors{\n\npublic:\n\n\tSVR_static_lin_regressors()\n\t{}\n\n\t// Predict the AU from HOG appearance of the face\n\tvoid Predict(std::vector<double>& predictions, std::vector<std::string>& names, const cv::Mat_<double>& fhog_descriptor, const cv::Mat_<double>& geom_params);\n\n\t// Reading in the model (or adding to it)\n\tvoid Read(std::ifstream& stream, const std::vector<std::string>& au_names);\n\n\tstd::vector<std::string> GetAUNames() const\n\t{\n\t\treturn AU_names;\n\t}\n\nprivate:\n\n\t// The names of Action Units this model is responsible for\n\tstd::vector<std::string> AU_names;\n\n\t// For normalisation\n\tcv::Mat_<double> means;\n\t\n\t// For actual prediction\n\tcv::Mat_<double> support_vectors;\t\n\tcv::Mat_<double> biases;\n\n};\n  //===========================================================================\n}\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/src/FaceAnalyser.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"FaceAnalyser.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n// System includes\n#include <stdio.h>\n#include <iostream>\n\n#include <string>\n\n// Boost includes\n#include <filesystem.hpp>\n#include <filesystem/fstream.hpp>\n#include <boost/algorithm/string.hpp>\n#include <boost/algorithm/string/split.hpp>\n\n// Local includes\n#include \"LandmarkCoreIncludes.h\"\n#include \"Face_utils.h\"\n\nusing namespace FaceAnalysis;\n\nusing namespace std;\n\n// Constructor from a model file (or a default one if not provided\nFaceAnalyser::FaceAnalyser(vector<cv::Vec3d> orientation_bins, double scale, int width, int height, std::string au_location, std::string tri_location)\n{\n\tthis->ReadAU(au_location);\n\t\t\n\talign_scale = scale;\t\n\talign_width = width;\n\talign_height = height;\n\n\t// Initialise the histograms that will represent bins from 0 - 1 (as HoG values are only stored as those)\n\tnum_bins_hog = 1000;\n\tmax_val_hog = 1;\n\tmin_val_hog = -0.005;\n\n\t// The geometry histogram ranges from -60 to 60\n\tnum_bins_geom = 10000;\n\tmax_val_geom = 60;\n\tmin_val_geom = -60;\n\t\t\n\t// Keep track for how many frames have been tracked so far\n\tframes_tracking = 0;\n\t\n\tif(orientation_bins.empty())\n\t{\n\t\t// Just using frontal currently\n\t\thead_orientations.push_back(cv::Vec3d(0,0,0));\n\t}\n\telse\n\t{\n\t\thead_orientations = orientation_bins;\n\t}\n\thog_hist_sum.resize(head_orientations.size());\n\tface_image_hist_sum.resize(head_orientations.size());\n\thog_desc_hist.resize(head_orientations.size());\n\tgeom_hist_sum = 0;\n\tface_image_hist.resize(head_orientations.size());\n\n\tau_prediction_correction_count.resize(head_orientations.size(), 0);\n\tau_prediction_correction_histogram.resize(head_orientations.size());\n\tdyn_scaling.resize(head_orientations.size());\n\n\t// The triangulation used for masking out the non-face parts of aligned image\n\tstd::ifstream triangulation_file(tri_location);\t\n\tLandmarkDetector::ReadMat(triangulation_file, triangulation);\n\n}\n\n// Utility for getting the names of returned AUs (presence)\nstd::vector<std::string> FaceAnalyser::GetAUClassNames() const\n{\n\tstd::vector<std::string> au_class_names_all;\n\tstd::vector<std::string> au_class_names_stat = AU_SVM_static_appearance_lin.GetAUNames();\n\tstd::vector<std::string> au_class_names_dyn = AU_SVM_dynamic_appearance_lin.GetAUNames();\n\n\tfor (size_t i = 0; i < au_class_names_stat.size(); ++i)\n\t{\n\t\tau_class_names_all.push_back(au_class_names_stat[i]);\n\t}\n\tfor (size_t i = 0; i < au_class_names_dyn.size(); ++i)\n\t{\n\t\tau_class_names_all.push_back(au_class_names_dyn[i]);\n\t}\n\n\treturn au_class_names_all;\n}\n\n// Utility for getting the names of returned AUs (intensity)\nstd::vector<std::string> FaceAnalyser::GetAURegNames() const\n{\n\tstd::vector<std::string> au_reg_names_all;\n\tstd::vector<std::string> au_reg_names_stat = AU_SVR_static_appearance_lin_regressors.GetAUNames();\n\tstd::vector<std::string> au_reg_names_dyn = AU_SVR_dynamic_appearance_lin_regressors.GetAUNames();\n\n\tfor (size_t i = 0; i < au_reg_names_stat.size(); ++i)\n\t{\n\t\tau_reg_names_all.push_back(au_reg_names_stat[i]);\n\t}\n\tfor (size_t i = 0; i < au_reg_names_dyn.size(); ++i)\n\t{\n\t\tau_reg_names_all.push_back(au_reg_names_dyn[i]);\n\t}\n\n\treturn au_reg_names_all;\n}\n\nstd::vector<bool> FaceAnalyser::GetDynamicAUClass() const\n{\n\tstd::vector<bool> au_dynamic_class;\n\tstd::vector<std::string> au_class_names_stat = AU_SVM_static_appearance_lin.GetAUNames();\n\tstd::vector<std::string> au_class_names_dyn = AU_SVM_dynamic_appearance_lin.GetAUNames();\n\n\tfor (size_t i = 0; i < au_class_names_stat.size(); ++i)\n\t{\n\t\tau_dynamic_class.push_back(false);\n\t}\n\tfor (size_t i = 0; i < au_class_names_dyn.size(); ++i)\n\t{\n\t\tau_dynamic_class.push_back(true);\n\t}\n\n\treturn au_dynamic_class;\n}\n\nstd::vector<std::pair<string, bool>> FaceAnalyser::GetDynamicAUReg() const\n{\n\tstd::vector<std::pair<string, bool>> au_dynamic_reg;\n\tstd::vector<std::string> au_reg_names_stat = AU_SVR_static_appearance_lin_regressors.GetAUNames();\n\tstd::vector<std::string> au_reg_names_dyn = AU_SVR_dynamic_appearance_lin_regressors.GetAUNames();\n\n\tfor (size_t i = 0; i < au_reg_names_stat.size(); ++i)\n\t{\n\t\tau_dynamic_reg.push_back(std::pair<string, bool>(au_reg_names_stat[i], false));\n\t}\n\tfor (size_t i = 0; i < au_reg_names_dyn.size(); ++i)\n\t{\n\t\tau_dynamic_reg.push_back(std::pair<string, bool>(au_reg_names_dyn[i], true));\n\t}\n\n\treturn au_dynamic_reg;\n}\n\ncv::Mat_<int> FaceAnalyser::GetTriangulation()\n{\n\treturn triangulation.clone();\n}\n\nvoid FaceAnalyser::GetLatestHOG(cv::Mat_<double>& hog_descriptor, int& num_rows, int& num_cols)\n{\n\thog_descriptor = this->hog_desc_frame.clone();\n\n\tif(!hog_desc_frame.empty())\n\t{\n\t\tnum_rows = this->num_hog_rows;\n\t\tnum_cols = this->num_hog_cols;\n\t}\n\telse\n\t{\n\t\tnum_rows = 0;\n\t\tnum_cols = 0;\n\t}\n}\n\nvoid FaceAnalyser::GetLatestAlignedFace(cv::Mat& image)\n{\n\timage = this->aligned_face_for_output.clone();\n}\n\nvoid FaceAnalyser::GetLatestNeutralHOG(cv::Mat_<double>& hog_descriptor, int& num_rows, int& num_cols)\n{\n\thog_descriptor = this->hog_desc_median;\n\tif(!hog_desc_median.empty())\n\t{\n\t\tnum_rows = this->num_hog_rows;\n\t\tnum_cols = this->num_hog_cols;\n\t}\n\telse\n\t{\n\t\tnum_rows = 0;\n\t\tnum_cols = 0;\n\t}\n}\n\n// Getting the closest view center based on orientation\nint GetViewId(const vector<cv::Vec3d> orientations_all, const cv::Vec3d& orientation)\n{\n\tint id = 0;\n\n\tdouble dbest = -1.0;\n\n\tfor(size_t i = 0; i < orientations_all.size(); i++)\n\t{\n\t\n\t\t// Distance to current view\n\t\tdouble d = cv::norm(orientation, orientations_all[i]);\n\n\t\tif(i == 0 || d < dbest)\n\t\t{\n\t\t\tdbest = d;\n\t\t\tid = i;\n\t\t}\n\t}\n\treturn id;\n\t\n}\n\nstd::pair<std::vector<std::pair<string, double>>, std::vector<std::pair<string, double>>> FaceAnalyser::PredictStaticAUs(const cv::Mat& frame, const LandmarkDetector::CLNF& clnf, bool visualise)\n{\n\n\t// First align the face\n\tAlignFaceMask(aligned_face_for_au, frame, clnf, triangulation, true, 0.7, 112, 112);\n\n\t// Extract HOG descriptor from the frame and convert it to a useable format\n\tcv::Mat_<double> hog_descriptor;\n\tExtract_FHOG_descriptor(hog_descriptor, aligned_face_for_au, this->num_hog_rows, this->num_hog_cols);\n\n\t// Store the descriptor\n\thog_desc_frame = hog_descriptor;\n\n\tcv::Vec3d curr_orient(clnf.params_global[1], clnf.params_global[2], clnf.params_global[3]);\n\tint orientation_to_use = GetViewId(this->head_orientations, curr_orient);\n\n\t// Geom descriptor and its median\n\tgeom_descriptor_frame = clnf.params_local.t();\n\n\t// Stack with the actual feature point locations (without mean)\n\tcv::Mat_<double> locs = clnf.pdm.princ_comp * geom_descriptor_frame.t();\n\n\tcv::hconcat(locs.t(), geom_descriptor_frame.clone(), geom_descriptor_frame);\n\n\t// First convert the face image to double representation as a row vector, TODO rem\n\t//cv::Mat_<uchar> aligned_face_cols(1, aligned_face_for_au.cols * aligned_face_for_au.rows * aligned_face_for_au.channels(), aligned_face_for_au.data, 1);\n\t//cv::Mat_<double> aligned_face_cols_double;\n\t//aligned_face_cols.convertTo(aligned_face_cols_double, CV_64F);\n\n\t// Visualising the median HOG\n\tif (visualise)\n\t{\n\t\tFaceAnalysis::Visualise_FHOG(hog_descriptor, num_hog_rows, num_hog_cols, hog_descriptor_visualisation);\n\t}\n\n\t// Perform AU prediction\t\n\tauto AU_predictions_intensity = PredictCurrentAUs(orientation_to_use);\n\tauto AU_predictions_occurence = PredictCurrentAUsClass(orientation_to_use);\n\n\t// Make sure intensity is within range (0-5)\n\tfor (size_t au = 0; au < AU_predictions_intensity.size(); ++au)\n\t{\n\t\tif (AU_predictions_intensity[au].second < 0)\n\t\t\tAU_predictions_intensity[au].second = 0;\n\n\t\tif (AU_predictions_intensity[au].second > 5)\n\t\t\tAU_predictions_intensity[au].second = 5;\n\t}\n\n\treturn std::pair<std::vector<std::pair<std::string, double>>, std::vector<std::pair<std::string, double>>>(AU_predictions_intensity, AU_predictions_occurence);\n\n}\n\nvoid FaceAnalyser::AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CLNF& clnf_model, double timestamp_seconds, bool online, bool visualise)\n{\n\n\tframes_tracking++;\n\n\t// First align the face if tracking was successfull\n\tif (clnf_model.detection_success)\n\t{\n\n\t\t// The aligned face requirement for AUs\n\t\tAlignFaceMask(aligned_face_for_au, frame, clnf_model, triangulation, true, 0.7, 112, 112);\n\n\t\t// If the output requirement matches use the already computed one, else compute it again\n\t\tif (align_scale == 0.7 && align_width == 112 && align_height == 112)\n\t\t{\n\t\t\taligned_face_for_output = aligned_face_for_au.clone();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tAlignFaceMask(aligned_face_for_output, frame, clnf_model, triangulation, true, align_scale, align_width, align_height);\n\t\t}\n\t}\n\telse\n\t{\n\t\taligned_face_for_output = cv::Mat(align_height, align_width, CV_8UC3);\n\t\taligned_face_for_au = cv::Mat(112, 112, CV_8UC3);\n\t\taligned_face_for_output.setTo(0);\n\t\taligned_face_for_au.setTo(0);\n\t}\n\n\t// Extract HOG descriptor from the frame and convert it to a useable format\n\tcv::Mat_<double> hog_descriptor;\n\tExtract_FHOG_descriptor(hog_descriptor, aligned_face_for_au, this->num_hog_rows, this->num_hog_cols);\n\n\t// Store the descriptor\n\thog_desc_frame = hog_descriptor;\n\n\tcv::Vec3d curr_orient(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]);\n\tint orientation_to_use = GetViewId(this->head_orientations, curr_orient);\n\n\t// Only update the running median if predictions are not high\n\t// That is don't update it when the face is expressive (just retrieve it)\n\tbool update_median = true;\n\n\t// TODO test if this would be useful or not\n\t//if(!this->AU_predictions_reg.empty())\n\t//{\n\t//\tvector<pair<string, bool>> dyns = this->GetDynamicAUReg();\n\n\t//\tfor(size_t i = 0; i < this->AU_predictions_reg.size(); ++i)\n\t//\t{\n\t//\t\tbool stat = false;\n\t//\t\tfor (size_t n = 0; n < dyns.size(); ++n)\n\t//\t\t{\n\t//\t\t\tif (dyns[n].first.compare(AU_predictions_reg[i].first) == 0)\n\t//\t\t\t{\n\t//\t\t\t\tstat = !dyns[i].second;\n\t//\t\t\t}\n\t//\t\t}\n\n\t//\t\t// If static predictor above 1.5 assume it's not a neutral face\n\t//\t\tif(this->AU_predictions_reg[i].second > 1.5 && stat)\n\t//\t\t{\n\t//\t\t\tupdate_median = false;\t\t\t\t\n\t//\t\t\tbreak;\n\t//\t\t}\n\t//\t}\n\t//}\n\n\tupdate_median = update_median & clnf_model.detection_success;\n\n\tif (clnf_model.detection_success)\n\t\tframes_tracking_succ++;\n\n\t// A small speedup\n\tif (frames_tracking % 2 == 1)\n\t{\n\t\tUpdateRunningMedian(this->hog_desc_hist[orientation_to_use], this->hog_hist_sum[orientation_to_use], this->hog_desc_median, hog_descriptor, update_median, this->num_bins_hog, this->min_val_hog, this->max_val_hog);\n\t\tthis->hog_desc_median.setTo(0, this->hog_desc_median < 0);\n\t}\n\n\t// Geom descriptor and its median\n\tgeom_descriptor_frame = clnf_model.params_local.t();\n\n\tif (!clnf_model.detection_success)\n\t{\n\t\tgeom_descriptor_frame.setTo(0);\n\t}\n\n\t// Stack with the actual feature point locations (without mean)\n\tcv::Mat_<double> locs = clnf_model.pdm.princ_comp * geom_descriptor_frame.t();\n\n\tcv::hconcat(locs.t(), geom_descriptor_frame.clone(), geom_descriptor_frame);\n\n\t// A small speedup\n\tif (frames_tracking % 2 == 1)\n\t{\n\t\tUpdateRunningMedian(this->geom_desc_hist, this->geom_hist_sum, this->geom_descriptor_median, geom_descriptor_frame, update_median, this->num_bins_geom, this->min_val_geom, this->max_val_geom);\n\t}\n\n\t// First convert the face image to double representation as a row vector, TODO rem?\n\t//cv::Mat_<uchar> aligned_face_cols(1, aligned_face.cols * aligned_face.rows * aligned_face.channels(), aligned_face.data, 1);\n\t//cv::Mat_<double> aligned_face_cols_double;\n\t//aligned_face_cols.convertTo(aligned_face_cols_double, CV_64F);\n\n\t// Visualising the median HOG\n\tif (visualise)\n\t{\n\t\tFaceAnalysis::Visualise_FHOG(hog_descriptor, num_hog_rows, num_hog_cols, hog_descriptor_visualisation);\n\t}\n\n\t// Perform AU prediction\t\n\tAU_predictions_reg = PredictCurrentAUs(orientation_to_use);\n\n\tstd::vector<std::pair<std::string, double>> AU_predictions_reg_corrected;\n\tif (online)\n\t{\n\t\tAU_predictions_reg_corrected = CorrectOnlineAUs(AU_predictions_reg, orientation_to_use, true, false, clnf_model.detection_success, true);\n\t}\n\n\t// Add the reg predictions to the historic data\n\tfor (size_t au = 0; au < AU_predictions_reg.size(); ++au)\n\t{\n\n\t\t// Find the appropriate AU (if not found add it)\t\t\n\t\t// Only add if the detection was successful\n\t\tif (clnf_model.detection_success)\n\t\t{\n\t\t\tAU_predictions_reg_all_hist[AU_predictions_reg[au].first].push_back(AU_predictions_reg[au].second);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tAU_predictions_reg_all_hist[AU_predictions_reg[au].first].push_back(0);\n\t\t}\n\t}\n\n\tAU_predictions_class = PredictCurrentAUsClass(orientation_to_use);\n\n\tfor (size_t au = 0; au < AU_predictions_class.size(); ++au)\n\t{\n\n\t\t// Find the appropriate AU (if not found add it)\t\t\n\t\t// Only add if the detection was successful\n\t\tif (clnf_model.detection_success)\n\t\t{\n\t\t\tAU_predictions_class_all_hist[AU_predictions_class[au].first].push_back(AU_predictions_class[au].second);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tAU_predictions_class_all_hist[AU_predictions_class[au].first].push_back(0);\n\t\t}\n\t}\n\n\n\tif (online)\n\t{\n\t\tAU_predictions_reg = AU_predictions_reg_corrected;\n\t}\n\telse\n\t{\n\t\tif (clnf_model.detection_success && frames_tracking_succ - 1 < max_init_frames)\n\t\t{\n\t\t\thog_desc_frames_init.push_back(hog_descriptor);\n\t\t\tgeom_descriptor_frames_init.push_back(geom_descriptor_frame);\n\t\t\tviews.push_back(orientation_to_use);\n\t\t}\n\t}\n\n\tthis->current_time_seconds = timestamp_seconds;\n\n\tview_used = orientation_to_use;\n\n\tbool success = clnf_model.detection_success;\n\n\tconfidences.push_back(clnf_model.detection_certainty);\n\tvalid_preds.push_back(success);\n\ttimestamps.push_back(timestamp_seconds);\n\n}\n\nvoid FaceAnalyser::GetGeomDescriptor(cv::Mat_<double>& geom_desc)\n{\n\tgeom_desc = this->geom_descriptor_frame.clone();\n}\n\nvoid FaceAnalyser::PredictAUs(const cv::Mat_<double>& hog_features, const cv::Mat_<double>& geom_features, const LandmarkDetector::CLNF& clnf_model, bool online)\n{\n\t// Store the descriptor\n\thog_desc_frame = hog_features.clone();\n\tthis->geom_descriptor_frame = geom_features.clone();\n\n\tcv::Vec3d curr_orient(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]);\n\tint orientation_to_use = GetViewId(this->head_orientations, curr_orient);\n\n\t// Perform AU prediction\t\n\tAU_predictions_reg = PredictCurrentAUs(orientation_to_use);\n\n\tstd::vector<std::pair<std::string, double>> AU_predictions_reg_corrected;\n\tif(online)\n\t{\n\t\tAU_predictions_reg_corrected = CorrectOnlineAUs(AU_predictions_reg, orientation_to_use, true, false, clnf_model.detection_success);\n\t}\n\n\t// Add the reg predictions to the historic data\n\tfor (size_t au = 0; au < AU_predictions_reg.size(); ++au)\n\t{\n\n\t\t// Find the appropriate AU (if not found add it)\t\t\n\t\t// Only add if the detection was successful\n\t\tif(clnf_model.detection_success)\n\t\t{\n\t\t\tAU_predictions_reg_all_hist[AU_predictions_reg[au].first].push_back(AU_predictions_reg[au].second);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tAU_predictions_reg_all_hist[AU_predictions_reg[au].first].push_back(0.0);\n\t\t}\n\t}\n\n\tAU_predictions_class = PredictCurrentAUsClass(orientation_to_use);\n\n\tfor (size_t au = 0; au < AU_predictions_class.size(); ++au)\n\t{\n\n\t\t// Find the appropriate AU (if not found add it)\t\t\n\t\t// Only add if the detection was successful\n\t\tif(clnf_model.detection_success)\n\t\t{\n\t\t\tAU_predictions_class_all_hist[AU_predictions_class[au].first].push_back(AU_predictions_class[au].second);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tAU_predictions_class_all_hist[AU_predictions_class[au].first].push_back(0.0);\n\t\t}\n\t}\n\n\tif(online)\n\t{\n\t\tAU_predictions_reg = AU_predictions_reg_corrected;\n\t}\n\n\tfor(size_t i = 0; i < AU_predictions_reg.size(); ++i)\n\t{\n\t\tAU_predictions_combined.push_back(AU_predictions_reg[i]);\n\t}\n\tfor(size_t i = 0; i < AU_predictions_class.size(); ++i)\n\t{\n\t\tAU_predictions_combined.push_back(AU_predictions_class[i]);\n\t}\n\n\tview_used = orientation_to_use;\n\n\tbool success = clnf_model.detection_success;\n\n\tconfidences.push_back(clnf_model.detection_certainty);\n\tvalid_preds.push_back(success);\n}\n\n// Perform prediction on initial n frames anew as the current neutral face estimate is better now\nvoid FaceAnalyser::PostprocessPredictions()\n{\n\tif(!postprocessed)\n\t{\n\t\tint success_ind = 0;\n\t\tint all_ind = 0;\n\t\tint all_frames_size = timestamps.size();\n\t\t\n\t\twhile(all_ind < all_frames_size && success_ind < max_init_frames)\n\t\t{\n\t\t\n\t\t\tif(valid_preds[all_ind])\n\t\t\t{\n\n\t\t\t\tthis->hog_desc_frame = hog_desc_frames_init[success_ind];\n\t\t\t\tthis->geom_descriptor_frame = geom_descriptor_frames_init[success_ind];\n\n\t\t\t\t// Perform AU prediction\t\n\t\t\t\tauto AU_predictions_reg = PredictCurrentAUs(views[success_ind]);\t\t\t\t\t\t\t\t\n\n\t\t\t\t// Modify the predictions to the historic data\n\t\t\t\tfor (size_t au = 0; au < AU_predictions_reg.size(); ++au)\n\t\t\t\t{\n\t\t\t\t\t// Find the appropriate AU (if not found add it)\t\t\n\t\t\t\t\tAU_predictions_reg_all_hist[AU_predictions_reg[au].first][all_ind] = AU_predictions_reg[au].second;\n\n\t\t\t\t}\n\n\t\t\t\tauto AU_predictions_class = PredictCurrentAUsClass(views[success_ind]);\n\n\t\t\t\tfor (size_t au = 0; au < AU_predictions_class.size(); ++au)\n\t\t\t\t{\n\t\t\t\t\t// Find the appropriate AU (if not found add it)\t\t\n\t\t\t\t\tAU_predictions_class_all_hist[AU_predictions_class[au].first][all_ind] = AU_predictions_class[au].second;\n\t\t\t\t}\n\t\t\n\t\t\t\tsuccess_ind++;\n\t\t\t}\n\t\t\tall_ind++;\n\n\t\t}\n\t\tpostprocessed = true;\n\t}\n}\n\nvoid FaceAnalyser::ExtractAllPredictionsOfflineReg(vector<std::pair<std::string, vector<double>>>& au_predictions, vector<double>& confidences, vector<bool>& successes, vector<double>& timestamps, bool dynamic)\n{\n\tif(dynamic)\n\t{\n\t\tPostprocessPredictions();\n\t}\n\n\ttimestamps = this->timestamps;\n\tau_predictions.clear();\n\t// First extract the valid AU values and put them in a different format\n\tvector<vector<double>> aus_valid;\n\tvector<double> offsets;\n\tconfidences = this->confidences;\n\tsuccesses = this->valid_preds;\n\t\n\tvector<string> dyn_au_names = AU_SVR_dynamic_appearance_lin_regressors.GetAUNames();\n\n\t// Allow these AUs to be person calirated based on expected number of neutral frames (learned from the data)\n\tfor(auto au_iter = AU_predictions_reg_all_hist.begin(); au_iter != AU_predictions_reg_all_hist.end(); ++au_iter)\n\t{\n\t\tvector<double> au_good;\n\t\tstring au_name = au_iter->first;\n\t\tvector<double> au_vals = au_iter->second;\n\t\t\n\t\tau_predictions.push_back(std::pair<string,vector<double>>(au_name, au_vals));\n\n\t\tfor(size_t frame = 0; frame < au_vals.size(); ++frame)\n\t\t{\n\n\t\t\tif(successes[frame])\n\t\t\t{\n\t\t\t\tau_good.push_back(au_vals[frame]);\n\t\t\t}\n\n\t\t}\n\n\t\tif(au_good.empty() || !dynamic)\n\t\t{\n\t\t\toffsets.push_back(0.0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tstd::sort(au_good.begin(), au_good.end());\n\t\t\t// If it is a dynamic AU regressor we can also do some prediction shifting to make it more accurate\n\t\t\t// The shifting proportion is learned and is callen cutoff\n\n\t\t\t// Find the current id of the AU and the corresponding cutoff\n\t\t\tint au_id = -1;\n\t\t\tfor (size_t a = 0; a < dyn_au_names.size(); ++a)\n\t\t\t{\n\t\t\t\tif (au_name.compare(dyn_au_names[a]) == 0)\n\t\t\t\t{\n\t\t\t\t\tau_id = a;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (au_id != -1 && AU_SVR_dynamic_appearance_lin_regressors.GetCutoffs()[au_id] != -1)\n\t\t\t{\n\t\t\t\tdouble cutoff = AU_SVR_dynamic_appearance_lin_regressors.GetCutoffs()[au_id];\n\t\t\t\toffsets.push_back(au_good.at((int)au_good.size() * cutoff));\t\t\t\t\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\toffsets.push_back(0);\n\t\t\t}\n\t\t}\n\t\t\n\t\taus_valid.push_back(au_good);\n\t}\n\t\n\t// sort each of the aus and adjust the dynamic ones\n\tfor(size_t au = 0; au < au_predictions.size(); ++au)\n\t{\n\n\t\tfor(size_t frame = 0; frame < au_predictions[au].second.size(); ++frame)\n\t\t{\n\n\t\t\tif(successes[frame])\n\t\t\t{\n\t\t\t\tdouble scaling = 1;\n\t\t\t\t\n\t\t\t\tau_predictions[au].second[frame] = (au_predictions[au].second[frame] - offsets[au]) * scaling;\n\t\t\t\t\n\t\t\t\tif(au_predictions[au].second[frame] < 0.0)\n\t\t\t\t\tau_predictions[au].second[frame] = 0;\n\n\t\t\t\tif(au_predictions[au].second[frame] > 5)\n\t\t\t\t\tau_predictions[au].second[frame] = 5;\n\t\t\t\t\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tau_predictions[au].second[frame] = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Perform some prediction smoothing\n\tfor (auto au_iter = au_predictions.begin(); au_iter != au_predictions.end(); ++au_iter)\n\t{\n\t\tstring au_name = au_iter->first;\n\n\t\t// Perform a moving average of 3 frames\n\t\tint window_size = 3;\n\t\tvector<double> au_vals_tmp = au_iter->second;\n\t\tfor (int i = (window_size - 1) / 2; i < (int)au_iter->second.size() - (window_size - 1) / 2; ++i)\n\t\t{\n\t\t\tdouble sum = 0;\n\t\t\tint count_over = 0;\n\t\t\tfor (int w = -(window_size - 1) / 2; w <= (window_size - 1) / 2; ++w)\n\t\t\t{\n\t\t\t\tsum += au_vals_tmp[i + w];\n\t\t\t\tcount_over++;\n\t\t\t}\n\t\t\tsum = sum / count_over;\n\n\t\t\tau_iter->second[i] = sum;\n\t\t}\n\n\t}\n\n}\n\nvoid FaceAnalyser::ExtractAllPredictionsOfflineClass(vector<std::pair<std::string, vector<double>>>& au_predictions, vector<double>& confidences, vector<bool>& successes, vector<double>& timestamps, bool dynamic)\n{\n\tif (dynamic)\n\t{\n\t\tPostprocessPredictions();\n\t}\n\n\ttimestamps = this->timestamps;\n\tau_predictions.clear();\n\n\tfor(auto au_iter = AU_predictions_class_all_hist.begin(); au_iter != AU_predictions_class_all_hist.end(); ++au_iter)\n\t{\n\t\tstring au_name = au_iter->first;\n\t\tvector<double> au_vals = au_iter->second;\n\t\t\n\t\t// Perform a moving average of 7 frames on classifications\n\t\tint window_size = 7;\n\t\tvector<double> au_vals_tmp = au_vals;\n\t\tfor (int i = (window_size - 1)/2; i < (int)au_vals.size() - (window_size - 1) / 2; ++i)\n\t\t{\n\t\t\tdouble sum = 0;\n\t\t\tint count_over = 0;\n\t\t\tfor (int w = -(window_size - 1) / 2; w <= (window_size - 1) / 2; ++w)\n\t\t\t{\n\t\t\t\tsum += au_vals_tmp[i + w];\n\t\t\t\tcount_over++;\n\t\t\t}\n\t\t\tsum = sum / count_over;\n\t\t\tif (sum < 0.5)\n\t\t\t\tsum = 0;\n\t\t\telse\n\t\t\t\tsum = 1;\n\n\t\t\tau_vals[i] = sum;\n\t\t}\n\n\t\tau_predictions.push_back(std::pair<string,vector<double>>(au_name, au_vals));\n\n\t}\n\n\tconfidences = this->confidences;\n\tsuccesses = this->valid_preds;\n}\n\n// Reset the models\nvoid FaceAnalyser::Reset()\n{\n\tframes_tracking = 0;\n\n\tthis->hog_desc_median.setTo(cv::Scalar(0));\n\tthis->face_image_median.setTo(cv::Scalar(0));\n\n\tfor( size_t i = 0; i < hog_desc_hist.size(); ++i)\n\t{\n\t\tthis->hog_desc_hist[i] = cv::Mat_<unsigned int>(hog_desc_hist[i].rows, hog_desc_hist[i].cols, (unsigned int)0);\n\t\tthis->hog_hist_sum[i] = 0;\n\n\n\t\tthis->face_image_hist[i] = cv::Mat_<unsigned int>(face_image_hist[i].rows, face_image_hist[i].cols, (unsigned int)0);\n\t\tthis->face_image_hist_sum[i] = 0;\n\n\t\t// 0 callibration predictions\n\t\tthis->au_prediction_correction_count[i] = 0;\n\t\tthis->au_prediction_correction_histogram[i] = cv::Mat_<unsigned int>(au_prediction_correction_histogram[i].rows, au_prediction_correction_histogram[i].cols, (unsigned int)0);\n\t}\n\n\tthis->geom_descriptor_median.setTo(cv::Scalar(0));\n\tthis->geom_desc_hist = cv::Mat_<unsigned int>(geom_desc_hist.rows, geom_desc_hist.cols, (unsigned int)0);\n\tgeom_hist_sum = 0;\n\n\t// Reset the predictions\n\tAU_prediction_track = cv::Mat_<double>(AU_prediction_track.rows, AU_prediction_track.cols, 0.0);\n\n\tgeom_desc_track = cv::Mat_<double>(geom_desc_track.rows, geom_desc_track.cols, 0.0);\n\n\tdyn_scaling = vector<vector<double>>(dyn_scaling.size(), vector<double>(dyn_scaling[0].size(), 5.0));\t\n\n\tAU_predictions_reg.clear();\n\tAU_predictions_class.clear();\n\tAU_predictions_combined.clear();\n\ttimestamps.clear();\n\tAU_predictions_reg_all_hist.clear();\n\tAU_predictions_class_all_hist.clear();\n\tconfidences.clear();\n\tvalid_preds.clear();\n\n\t// Clean up the postprocessing data as well\n\thog_desc_frames_init.clear();\n\tgeom_descriptor_frames_init.clear();\n\tpostprocessed = false;\n\tframes_tracking_succ = 0;\n}\n\nvoid FaceAnalyser::UpdateRunningMedian(cv::Mat_<unsigned int>& histogram, int& hist_count, cv::Mat_<double>& median, const cv::Mat_<double>& descriptor, bool update, int num_bins, double min_val, double max_val)\n{\n\n\tdouble length = max_val - min_val;\n\tif(length < 0)\n\t\tlength = -length;\n\n\t// The median update\n\tif(histogram.empty())\n\t{\n\t\thistogram = cv::Mat_<unsigned int>(descriptor.cols, num_bins, (unsigned int)0);\n\t\tmedian = descriptor.clone();\n\t}\n\n\tif(update)\n\t{\n\t\t// Find the bins corresponding to the current descriptor\n\t\tcv::Mat_<double> converted_descriptor = (descriptor - min_val)*((double)num_bins)/(length);\n\n\t\t// Capping the top and bottom values\n\t\tconverted_descriptor.setTo(cv::Scalar(num_bins-1), converted_descriptor > num_bins - 1);\n\t\tconverted_descriptor.setTo(cv::Scalar(0), converted_descriptor < 0);\n\n\t\tfor(int i = 0; i < histogram.rows; ++i)\n\t\t{\n\t\t\tint index = (int)converted_descriptor.at<double>(i);\n\t\t\thistogram.at<unsigned int>(i, index)++;\n\t\t}\n\n\t\t// Update the histogram count\n\t\thist_count++;\n\t}\n\n\tif(hist_count == 1)\n\t{\n\t\tmedian = descriptor.clone();\n\t}\n\telse\n\t{\n\t\t// Recompute the median\n\t\tint cutoff_point = (hist_count + 1)/2;\n\n\t\t// For each dimension\n\t\tfor(int i = 0; i < histogram.rows; ++i)\n\t\t{\n\t\t\tint cummulative_sum = 0;\n\t\t\tfor(int j = 0; j < histogram.cols; ++j)\n\t\t\t{\n\t\t\t\tcummulative_sum += histogram.at<unsigned int>(i, j);\n\t\t\t\tif(cummulative_sum >= cutoff_point)\n\t\t\t\t{\n\t\t\t\t\tmedian.at<double>(i) = min_val + ((double)j) * (length/((double)num_bins)) + (0.5*(length)/ ((double)num_bins));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nvoid FaceAnalyser::ExtractMedian(cv::Mat_<unsigned int>& histogram, int hist_count, cv::Mat_<double>& median, int num_bins, double min_val, double max_val)\n{\n\n\tdouble length = max_val - min_val;\n\tif(length < 0)\n\t\tlength = -length;\n\n\t// The median update\n\tif(histogram.empty())\n\t{\n\t\treturn;\n\t}\n\telse\n\t{\n\t\tif(median.empty())\n\t\t{\n\t\t\tmedian = cv::Mat_<double>(1, histogram.rows, 0.0);\n\t\t}\n\n\t\t// Compute the median\n\t\tint cutoff_point = (hist_count + 1)/2;\n\n\t\t// For each dimension\n\t\tfor(int i = 0; i < histogram.rows; ++i)\n\t\t{\n\t\t\tint cummulative_sum = 0;\n\t\t\tfor(int j = 0; j < histogram.cols; ++j)\n\t\t\t{\n\t\t\t\tcummulative_sum += histogram.at<unsigned int>(i, j);\n\t\t\t\tif(cummulative_sum > cutoff_point)\n\t\t\t\t{\n\t\t\t\t\tmedian.at<double>(i) = min_val + j * (max_val/num_bins) + (0.5*(length)/num_bins);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n// Apply the current predictors to the currently stored descriptors\nvector<pair<string, double>> FaceAnalyser::PredictCurrentAUs(int view)\n{\n\n\tvector<pair<string, double>> predictions;\n\n\tif(!hog_desc_frame.empty())\n\t{\n\t\tvector<string> svr_lin_stat_aus;\n\t\tvector<double> svr_lin_stat_preds;\n\n\t\tAU_SVR_static_appearance_lin_regressors.Predict(svr_lin_stat_preds, svr_lin_stat_aus, hog_desc_frame, geom_descriptor_frame);\n\n\t\tfor(size_t i = 0; i < svr_lin_stat_preds.size(); ++i)\n\t\t{\n\t\t\tpredictions.push_back(pair<string, double>(svr_lin_stat_aus[i], svr_lin_stat_preds[i]));\n\t\t}\n\n\t\tvector<string> svr_lin_dyn_aus;\n\t\tvector<double> svr_lin_dyn_preds;\n\n\t\tAU_SVR_dynamic_appearance_lin_regressors.Predict(svr_lin_dyn_preds, svr_lin_dyn_aus, hog_desc_frame, geom_descriptor_frame,  this->hog_desc_median, this->geom_descriptor_median);\n\n\t\tfor(size_t i = 0; i < svr_lin_dyn_preds.size(); ++i)\n\t\t{\n\t\t\tpredictions.push_back(pair<string, double>(svr_lin_dyn_aus[i], svr_lin_dyn_preds[i]));\n\t\t}\n\n\t}\n\n\treturn predictions;\n}\n\nvector<pair<string, double>> FaceAnalyser::CorrectOnlineAUs(std::vector<std::pair<std::string, double>> predictions_orig, int view, bool dyn_shift, bool dyn_scale, bool update_track, bool clip_values)\n{\n\t// Correction that drags the predicion to 0 (assuming the bottom 10% of predictions are of neutral expresssions)\n\tvector<double> correction(predictions_orig.size(), 0.0);\n\n\tvector<pair<string, double>> predictions = predictions_orig;\n\n\tif(update_track)\n\t{\n\t\tUpdatePredictionTrack(au_prediction_correction_histogram[view], au_prediction_correction_count[view], correction, predictions, 0.10, 200, -3, 5, 10);\n\t}\n\n\tif(dyn_shift)\n\t{\n\t\tfor(size_t i = 0; i < correction.size(); ++i)\n\t\t{\n\t\t\tpredictions[i].second = predictions[i].second - correction[i];\n\t\t}\n\t}\n\tif(dyn_scale)\n\t{\n\t\t// Some scaling for effect better visualisation\n\t\t// Also makes sense as till the maximum expression is seen, it is hard to tell how expressive a persons face is\n\t\tif(dyn_scaling[view].empty())\n\t\t{\n\t\t\tdyn_scaling[view] = vector<double>(predictions.size(), 5.0);\n\t\t}\n\t\t\n\t\tfor(size_t i = 0; i < predictions.size(); ++i)\n\t\t{\n\t\t\t// First establish presence (assume it is maximum as we have not seen max) \n\t\t\tif(predictions[i].second > 1)\n\t\t\t{\n\t\t\t\tdouble scaling_curr = 5.0 / predictions[i].second;\n\t\t\t\t\n\t\t\t\tif(scaling_curr < dyn_scaling[view][i])\n\t\t\t\t{\n\t\t\t\t\tdyn_scaling[view][i] = scaling_curr;\n\t\t\t\t}\n\t\t\t\tpredictions[i].second = predictions[i].second * dyn_scaling[view][i];\n\t\t\t}\n\n\t\t\tif(predictions[i].second > 5)\n\t\t\t{\n\t\t\t\tpredictions[i].second = 5;\n\t\t\t}\n\t\t}\n\t}\n\n\tif(clip_values)\n\t{\n\t\tfor(size_t i = 0; i < correction.size(); ++i)\n\t\t{\n\t\t\tif(predictions[i].second < 0)\n\t\t\t\tpredictions[i].second = 0;\n\t\t\tif(predictions[i].second > 5)\n\t\t\t\tpredictions[i].second = 5;\n\t\t}\n\t}\n\treturn predictions;\n}\n\n// Apply the current predictors to the currently stored descriptors (classification)\nvector<pair<string, double>> FaceAnalyser::PredictCurrentAUsClass(int view)\n{\n\n\tvector<pair<string, double>> predictions;\n\n\tif(!hog_desc_frame.empty())\n\t{\n\t\tvector<string> svm_lin_stat_aus;\n\t\tvector<double> svm_lin_stat_preds;\n\t\t\n\t\tAU_SVM_static_appearance_lin.Predict(svm_lin_stat_preds, svm_lin_stat_aus, hog_desc_frame, geom_descriptor_frame);\n\n\t\tfor(size_t i = 0; i < svm_lin_stat_aus.size(); ++i)\n\t\t{\n\t\t\tpredictions.push_back(pair<string, double>(svm_lin_stat_aus[i], svm_lin_stat_preds[i]));\n\t\t}\n\n\t\tvector<string> svm_lin_dyn_aus;\n\t\tvector<double> svm_lin_dyn_preds;\n\n\t\tAU_SVM_dynamic_appearance_lin.Predict(svm_lin_dyn_preds, svm_lin_dyn_aus, hog_desc_frame, geom_descriptor_frame, this->hog_desc_median, this->geom_descriptor_median);\n\n\t\tfor(size_t i = 0; i < svm_lin_dyn_aus.size(); ++i)\n\t\t{\n\t\t\tpredictions.push_back(pair<string, double>(svm_lin_dyn_aus[i], svm_lin_dyn_preds[i]));\n\t\t}\n\t\t\n\t}\n\n\treturn predictions;\n}\n\ncv::Mat FaceAnalyser::GetLatestHOGDescriptorVisualisation()\n{\n\treturn hog_descriptor_visualisation;\n}\n\nvector<pair<string, double>> FaceAnalyser::GetCurrentAUsClass() const\n{\n\treturn AU_predictions_class;\n}\n\nvector<pair<string, double>> FaceAnalyser::GetCurrentAUsReg() const\n{\n\treturn AU_predictions_reg;\n}\n\nvector<pair<string, double>> FaceAnalyser::GetCurrentAUsCombined() const\n{\n\treturn AU_predictions_combined;\n}\n\n// Reading in AU prediction modules\nvoid FaceAnalyser::ReadAU(std::string au_model_location)\n{\n\n\t// Open the list of the regressors in the file\n\tifstream locations(au_model_location.c_str(), ios::in);\n\n\tif(!locations.is_open())\n\t{\n\t\tcout << \"Couldn't open the AU prediction files at: \" << au_model_location.c_str() << \" aborting\" << endl;\n\t\tcout.flush();\n\t\treturn;\n\t}\n\n\tstring line;\n\t\n\t// The other module locations should be defined as relative paths from the main model\n\tboost::filesystem::path root = boost::filesystem::path(au_model_location).parent_path();\t\t\n\t\n\t// The main file contains the references to other files\n\twhile (!locations.eof())\n\t{ \n\t\t\n\t\tgetline(locations, line);\n\n\t\tstringstream lineStream(line);\n\n\t\tstring name;\n\t\tstring location;\n\n\t\t// figure out which module is to be read from which file\n\t\tlineStream >> location;\n\n\t\t// Parse comma separated names that this regressor produces\n\t\tname = lineStream.str();\n\t\tint index = name.find_first_of(' ');\n\n\t\tif(index >= 0)\n\t\t{\n\t\t\tname = name.substr(index+1);\n\t\t\t\n\t\t\t// remove carriage return at the end for compatibility with unix systems\n\t\t\tif(name.size() > 0 && name.at(name.size()-1) == '\\r')\n\t\t\t{\n\t\t\t\tname = name.substr(0, location.size()-1);\n\t\t\t}\n\t\t}\n\t\tvector<string> au_names;\n\t\tboost::split(au_names, name, boost::is_any_of(\",\"));\n\n\t\t// append the lovstion to root location (boost syntax)\n\t\tlocation = (root / location).string();\n\t\t\t\t\n\t\tReadRegressor(location, au_names);\n\t}\n  \n}\n\nvoid FaceAnalyser::UpdatePredictionTrack(cv::Mat_<unsigned int>& prediction_corr_histogram, int& prediction_correction_count, vector<double>& correction, const vector<pair<string, double>>& predictions, double ratio, int num_bins, double min_val, double max_val, int min_frames)\n{\n\tdouble length = max_val - min_val;\n\tif(length < 0)\n\t\tlength = -length;\n\n\tcorrection.resize(predictions.size(), 0);\n\n\t// The median update\n\tif(prediction_corr_histogram.empty())\n\t{\n\t\tprediction_corr_histogram = cv::Mat_<unsigned int>(predictions.size(), num_bins, (unsigned int)0);\n\t}\n\t\n\tfor(int i = 0; i < prediction_corr_histogram.rows; ++i)\n\t{\n\t\t// Find the bins corresponding to the current descriptor\n\t\tint index = (predictions[i].second - min_val)*((double)num_bins)/(length);\n\t\tif(index < 0)\n\t\t{\n\t\t\tindex = 0;\n\t\t}\n\t\telse if(index > num_bins - 1)\n\t\t{\n\t\t\tindex = num_bins - 1;\n\t\t}\n\t\tprediction_corr_histogram.at<unsigned int>(i, index)++;\n\t}\n\n\t// Update the histogram count\n\tprediction_correction_count++;\n\n\tif(prediction_correction_count >= min_frames)\n\t{\n\t\t// Recompute the correction\n\t\tint cutoff_point = ratio * prediction_correction_count;\n\n\t\t// For each dimension\n\t\tfor(int i = 0; i < prediction_corr_histogram.rows; ++i)\n\t\t{\n\t\t\tint cummulative_sum = 0;\n\t\t\tfor(int j = 0; j < prediction_corr_histogram.cols; ++j)\n\t\t\t{\n\t\t\t\tcummulative_sum += prediction_corr_histogram.at<unsigned int>(i, j);\n\t\t\t\tif(cummulative_sum > cutoff_point)\n\t\t\t\t{\n\t\t\t\t\tdouble corr = min_val + j * (length/num_bins);\n\t\t\t\t\tcorrection[i] = corr;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvoid FaceAnalyser::GetSampleHist(cv::Mat_<unsigned int>& prediction_corr_histogram, int prediction_correction_count, vector<double>& sample, double ratio, int num_bins, double min_val, double max_val)\n{\n\n\tdouble length = max_val - min_val;\n\tif(length < 0)\n\t\tlength = -length;\n\n\tsample.resize(prediction_corr_histogram.rows, 0);\n\n\t// Recompute the correction\n\tint cutoff_point = ratio * prediction_correction_count;\n\n\t// For each dimension\n\tfor(int i = 0; i < prediction_corr_histogram.rows; ++i)\n\t{\n\t\tint cummulative_sum = 0;\n\t\tfor(int j = 0; j < prediction_corr_histogram.cols; ++j)\n\t\t{\n\t\t\tcummulative_sum += prediction_corr_histogram.at<unsigned int>(i, j);\n\t\t\tif(cummulative_sum > cutoff_point)\n\t\t\t{\n\t\t\t\tdouble corr = min_val + j * (length/num_bins);\n\t\t\t\tsample[i] = corr;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nvoid FaceAnalyser::ReadRegressor(std::string fname, const vector<string>& au_names)\n{\n\tifstream regressor_stream(fname.c_str(), ios::in | ios::binary);\n\n\t// First read the input type\n\tint regressor_type;\n\tregressor_stream.read((char*)&regressor_type, 4);\n\n\tif(regressor_type == SVR_appearance_static_linear)\n\t{\n\t\tAU_SVR_static_appearance_lin_regressors.Read(regressor_stream, au_names);\t\t\n\t}\n\telse if(regressor_type == SVR_appearance_dynamic_linear)\n\t{\n\t\tAU_SVR_dynamic_appearance_lin_regressors.Read(regressor_stream, au_names);\t\t\n\t}\n\telse if(regressor_type == SVM_linear_stat)\n\t{\n\t\tAU_SVM_static_appearance_lin.Read(regressor_stream, au_names);\t\t\n\t}\n\telse if(regressor_type == SVM_linear_dyn)\n\t{\n\t\tAU_SVM_dynamic_appearance_lin.Read(regressor_stream, au_names);\t\t\n\t}\n}\n\ndouble FaceAnalyser::GetCurrentTimeSeconds() {\n\treturn current_time_seconds;\n}\n\n// Allows for post processing of the AU signal\nvoid FaceAnalyser::PostprocessOutputFile(string output_file, bool dynamic)\n{\n\n\tvector<double> certainties;\n\tvector<bool> successes;\n\tvector<double> timestamps;\n\tvector<std::pair<std::string, vector<double>>> predictions_reg;\n\tvector<std::pair<std::string, vector<double>>> predictions_class;\n\n\t// Construct the new values to overwrite the output file with\n\tExtractAllPredictionsOfflineReg(predictions_reg, certainties, successes, timestamps, dynamic);\n\tExtractAllPredictionsOfflineClass(predictions_class, certainties, successes, timestamps, dynamic);\n\n\tint num_class = predictions_class.size();\n\tint num_reg = predictions_reg.size();\n\n\t// Extract the indices of writing out first\n\tvector<string> au_reg_names = GetAURegNames();\n\tstd::sort(au_reg_names.begin(), au_reg_names.end());\n\tvector<int> inds_reg;\n\n\t// write out ar the correct index\n\tfor (string au_name : au_reg_names)\n\t{\n\t\tfor (int i = 0; i < num_reg; ++i)\n\t\t{\n\t\t\tif (au_name.compare(predictions_reg[i].first) == 0)\n\t\t\t{\n\t\t\t\tinds_reg.push_back(i);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tvector<string> au_class_names = GetAUClassNames();\n\tstd::sort(au_class_names.begin(), au_class_names.end());\n\tvector<int> inds_class;\n\n\t// write out ar the correct index\n\tfor (string au_name : au_class_names)\n\t{\n\t\tfor (int i = 0; i < num_class; ++i)\n\t\t{\n\t\t\tif (au_name.compare(predictions_class[i].first) == 0)\n\t\t\t{\n\t\t\t\tinds_class.push_back(i);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Read all of the output file in\n\tvector<string> output_file_contents;\n\n\tstd::ifstream infile(output_file);\n\tstring line;\n\n\twhile (std::getline(infile, line))\n\t\toutput_file_contents.push_back(line);\n\n\tinfile.close();\n\n\t// Read the header and find all _r and _c parts in a file and use their indices\n\tstd::vector<std::string> tokens;\n\tboost::split(tokens, output_file_contents[0], boost::is_any_of(\",\"));\n\n\tint begin_ind = -1;\n\n\tfor (size_t i = 0; i < tokens.size(); ++i)\n\t{\n\t\tif (tokens[i].find(\"AU\") != string::npos && begin_ind == -1)\n\t\t{\n\t\t\tbegin_ind = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tint end_ind = begin_ind + num_class + num_reg;\n\n\t// Now overwrite the whole file\n\tstd::ofstream outfile(output_file, ios_base::out);\n\t// Write the header\n\toutfile << std::setprecision(4);\n\toutfile << output_file_contents[0].c_str() << endl;\n\n\t// Write the contents\n\tfor (int i = 1; i < (int)output_file_contents.size(); ++i)\n\t{\n\t\tstd::vector<std::string> tokens;\n\t\tboost::split(tokens, output_file_contents[i], boost::is_any_of(\",\"));\n\n\t\tboost::trim(tokens[0]);\n\t\toutfile << tokens[0];\n\n\t\tfor (int t = 1; t < (int)tokens.size(); ++t)\n\t\t{\n\t\t\tif (t >= begin_ind && t < end_ind)\n\t\t\t{\n\t\t\t\tif (t - begin_ind < num_reg)\n\t\t\t\t{\n\t\t\t\t\toutfile << \", \" << predictions_reg[inds_reg[t - begin_ind]].second[i - 1];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\toutfile << \", \" << predictions_class[inds_class[t - begin_ind - num_reg]].second[i - 1];\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tboost::trim(tokens[t]);\n\t\t\t\toutfile << \", \" << tokens[t];\n\t\t\t}\n\t\t}\n\t\toutfile << endl;\n\t}\n\n\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/src/Face_utils.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include <Face_utils.h>\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n// For FHOG visualisation\n#include <dlib/opencv.h>\n\nusing namespace std;\n\nnamespace FaceAnalysis\n{\n\n\t// Pick only the more stable/rigid points under changes of expression\n\tvoid extract_rigid_points(cv::Mat_<double>& source_points, cv::Mat_<double>& destination_points)\n\t{\n\t\tif(source_points.rows == 68)\n\t\t{\n\t\t\tcv::Mat_<double> tmp_source = source_points.clone();\n\t\t\tsource_points = cv::Mat_<double>();\n\n\t\t\t// Push back the rigid points (some face outline, eyes, and nose)\n\t\t\tsource_points.push_back(tmp_source.row(1));\n\t\t\tsource_points.push_back(tmp_source.row(2));\n\t\t\tsource_points.push_back(tmp_source.row(3));\n\t\t\tsource_points.push_back(tmp_source.row(4));\n\t\t\tsource_points.push_back(tmp_source.row(12));\n\t\t\tsource_points.push_back(tmp_source.row(13));\n\t\t\tsource_points.push_back(tmp_source.row(14));\n\t\t\tsource_points.push_back(tmp_source.row(15));\n\t\t\tsource_points.push_back(tmp_source.row(27));\n\t\t\tsource_points.push_back(tmp_source.row(28));\n\t\t\tsource_points.push_back(tmp_source.row(29));\n\t\t\tsource_points.push_back(tmp_source.row(31));\n\t\t\tsource_points.push_back(tmp_source.row(32));\n\t\t\tsource_points.push_back(tmp_source.row(33));\n\t\t\tsource_points.push_back(tmp_source.row(34));\n\t\t\tsource_points.push_back(tmp_source.row(35));\n\t\t\tsource_points.push_back(tmp_source.row(36));\n\t\t\tsource_points.push_back(tmp_source.row(39));\n\t\t\tsource_points.push_back(tmp_source.row(40));\n\t\t\tsource_points.push_back(tmp_source.row(41));\n\t\t\tsource_points.push_back(tmp_source.row(42));\n\t\t\tsource_points.push_back(tmp_source.row(45));\n\t\t\tsource_points.push_back(tmp_source.row(46));\n\t\t\tsource_points.push_back(tmp_source.row(47));\n\n\t\t\tcv::Mat_<double> tmp_dest = destination_points.clone();\n\t\t\tdestination_points = cv::Mat_<double>();\n\n\t\t\t// Push back the rigid points\n\t\t\tdestination_points.push_back(tmp_dest.row(1));\n\t\t\tdestination_points.push_back(tmp_dest.row(2));\n\t\t\tdestination_points.push_back(tmp_dest.row(3));\n\t\t\tdestination_points.push_back(tmp_dest.row(4));\n\t\t\tdestination_points.push_back(tmp_dest.row(12));\n\t\t\tdestination_points.push_back(tmp_dest.row(13));\n\t\t\tdestination_points.push_back(tmp_dest.row(14));\n\t\t\tdestination_points.push_back(tmp_dest.row(15));\n\t\t\tdestination_points.push_back(tmp_dest.row(27));\n\t\t\tdestination_points.push_back(tmp_dest.row(28));\n\t\t\tdestination_points.push_back(tmp_dest.row(29));\n\t\t\tdestination_points.push_back(tmp_dest.row(31));\n\t\t\tdestination_points.push_back(tmp_dest.row(32));\n\t\t\tdestination_points.push_back(tmp_dest.row(33));\n\t\t\tdestination_points.push_back(tmp_dest.row(34));\n\t\t\tdestination_points.push_back(tmp_dest.row(35));\n\t\t\tdestination_points.push_back(tmp_dest.row(36));\n\t\t\tdestination_points.push_back(tmp_dest.row(39));\n\t\t\tdestination_points.push_back(tmp_dest.row(40));\n\t\t\tdestination_points.push_back(tmp_dest.row(41));\n\t\t\tdestination_points.push_back(tmp_dest.row(42));\n\t\t\tdestination_points.push_back(tmp_dest.row(45));\n\t\t\tdestination_points.push_back(tmp_dest.row(46));\n\t\t\tdestination_points.push_back(tmp_dest.row(47));\n\t\t}\n\t}\n\n\t// Aligning a face to a common reference frame\n\tvoid AlignFace(cv::Mat& aligned_face, const cv::Mat& frame, const LandmarkDetector::CLNF& clnf_model, bool rigid, double sim_scale, int out_width, int out_height)\n\t{\n\t\t// Will warp to scaled mean shape\n\t\tcv::Mat_<double> similarity_normalised_shape = clnf_model.pdm.mean_shape * sim_scale;\n\t\n\t\t// Discard the z component\n\t\tsimilarity_normalised_shape = similarity_normalised_shape(cv::Rect(0, 0, 1, 2*similarity_normalised_shape.rows/3)).clone();\n\n\t\tcv::Mat_<double> source_landmarks = clnf_model.detected_landmarks.reshape(1, 2).t();\n\t\tcv::Mat_<double> destination_landmarks = similarity_normalised_shape.reshape(1, 2).t();\n\n\t\t// Aligning only the more rigid points\n\t\tif(rigid)\n\t\t{\n\t\t\textract_rigid_points(source_landmarks, destination_landmarks);\n\t\t}\n\n\t\tcv::Matx22d scale_rot_matrix = LandmarkDetector::AlignShapesWithScale(source_landmarks, destination_landmarks);\n\t\tcv::Matx23d warp_matrix;\n\n\t\twarp_matrix(0,0) = scale_rot_matrix(0,0);\n\t\twarp_matrix(0,1) = scale_rot_matrix(0,1);\n\t\twarp_matrix(1,0) = scale_rot_matrix(1,0);\n\t\twarp_matrix(1,1) = scale_rot_matrix(1,1);\n\n\t\tdouble tx = clnf_model.params_global[4];\n\t\tdouble ty = clnf_model.params_global[5];\n\n\t\tcv::Vec2d T(tx, ty);\n\t\tT = scale_rot_matrix * T;\n\n\t\t// Make sure centering is correct\n\t\twarp_matrix(0,2) = -T(0) + out_width/2;\n\t\twarp_matrix(1,2) = -T(1) + out_height/2;\n\n\t\tcv::warpAffine(frame, aligned_face, warp_matrix, cv::Size(out_width, out_height), cv::INTER_LINEAR);\n\t}\n\n\t// Aligning a face to a common reference frame\n\tvoid AlignFaceMask(cv::Mat& aligned_face, const cv::Mat& frame, const LandmarkDetector::CLNF& clnf_model, const cv::Mat_<int>& triangulation, bool rigid, double sim_scale, int out_width, int out_height)\n\t{\n\t\t// Will warp to scaled mean shape\n\t\tcv::Mat_<double> similarity_normalised_shape = clnf_model.pdm.mean_shape * sim_scale;\n\t\n\t\t// Discard the z component\n\t\tsimilarity_normalised_shape = similarity_normalised_shape(cv::Rect(0, 0, 1, 2*similarity_normalised_shape.rows/3)).clone();\n\n\t\tcv::Mat_<double> source_landmarks = clnf_model.detected_landmarks.reshape(1, 2).t();\n\t\tcv::Mat_<double> destination_landmarks = similarity_normalised_shape.reshape(1, 2).t();\n\n\t\t// Aligning only the more rigid points\n\t\tif(rigid)\n\t\t{\n\t\t\textract_rigid_points(source_landmarks, destination_landmarks);\n\t\t}\n\n\t\tcv::Matx22d scale_rot_matrix = LandmarkDetector::AlignShapesWithScale(source_landmarks, destination_landmarks);\n\t\tcv::Matx23d warp_matrix;\n\n\t\twarp_matrix(0,0) = scale_rot_matrix(0,0);\n\t\twarp_matrix(0,1) = scale_rot_matrix(0,1);\n\t\twarp_matrix(1,0) = scale_rot_matrix(1,0);\n\t\twarp_matrix(1,1) = scale_rot_matrix(1,1);\n\n\t\tdouble tx = clnf_model.params_global[4];\n\t\tdouble ty = clnf_model.params_global[5];\n\n\t\tcv::Vec2d T(tx, ty);\n\t\tT = scale_rot_matrix * T;\n\n\t\t// Make sure centering is correct\n\t\twarp_matrix(0,2) = -T(0) + out_width/2;\n\t\twarp_matrix(1,2) = -T(1) + out_height/2;\n\n\t\tcv::warpAffine(frame, aligned_face, warp_matrix, cv::Size(out_width, out_height), cv::INTER_LINEAR);\n\n\t\t// Move the destination landmarks there as well\n\t\tcv::Matx22d warp_matrix_2d(warp_matrix(0,0), warp_matrix(0,1), warp_matrix(1,0), warp_matrix(1,1));\n\t\t\n\t\tdestination_landmarks = cv::Mat(clnf_model.detected_landmarks.reshape(1, 2).t()) * cv::Mat(warp_matrix_2d).t();\n\n\t\tdestination_landmarks.col(0) = destination_landmarks.col(0) + warp_matrix(0,2);\n\t\tdestination_landmarks.col(1) = destination_landmarks.col(1) + warp_matrix(1,2);\n\t\t\n\t\t// Move the eyebrows up to include more of upper face\n\t\tdestination_landmarks.at<double>(0,1) -= (30/0.7)*sim_scale; \n\t\tdestination_landmarks.at<double>(16,1) -= (30 / 0.7)*sim_scale;\n\n\t\tdestination_landmarks.at<double>(17,1) -= (30 / 0.7)*sim_scale;\n\t\tdestination_landmarks.at<double>(18,1) -= (30 / 0.7)*sim_scale;\n\t\tdestination_landmarks.at<double>(19,1) -= (30 / 0.7)*sim_scale;\n\t\tdestination_landmarks.at<double>(20,1) -= (30 / 0.7)*sim_scale;\n\t\tdestination_landmarks.at<double>(21,1) -= (30 / 0.7)*sim_scale;\n\t\tdestination_landmarks.at<double>(22,1) -= (30 / 0.7)*sim_scale;\n\t\tdestination_landmarks.at<double>(23,1) -= (30 / 0.7)*sim_scale;\n\t\tdestination_landmarks.at<double>(24,1) -= (30 / 0.7)*sim_scale;\n\t\tdestination_landmarks.at<double>(25,1) -= (30 / 0.7)*sim_scale;\n\t\tdestination_landmarks.at<double>(26,1) -= (30 / 0.7)*sim_scale;\n\n\t\tdestination_landmarks = cv::Mat(destination_landmarks.t()).reshape(1, 1).t();\n\n\t\tLandmarkDetector::PAW paw(destination_landmarks, triangulation, 0, 0, aligned_face.cols-1, aligned_face.rows-1);\n\t\t\n\t\t// Mask each of the channels (a bit of a roundabout way, but OpenCV 3.1 in debug mode doesn't seem to be able to handle a more direct way using split and merge)\n\t\tvector<cv::Mat> aligned_face_channels(aligned_face.channels());\n\t\t\n\t\tfor (int c = 0; c < aligned_face.channels(); ++c)\n\t\t{\n\t\t\tcv::extractChannel(aligned_face, aligned_face_channels[c], c);\n\t\t}\n\n\t\tfor(size_t i = 0; i < aligned_face_channels.size(); ++i)\n\t\t{\n\t\t\tcv::multiply(aligned_face_channels[i], paw.pixel_mask, aligned_face_channels[i], 1.0, CV_8U);\n\t\t}\n\n\t\tif(aligned_face.channels() == 3)\n\t\t{\n\t\t\tcv::Mat planes[] = { aligned_face_channels[0], aligned_face_channels[1], aligned_face_channels[2] };\n\t\t\tcv::merge(planes, 3, aligned_face);\n\t\t}\n\t\telse\n\t\t{\n\t\t\taligned_face = aligned_face_channels[0];\n\t\t}\n\t}\n\n\n\tvoid Visualise_FHOG(const cv::Mat_<double>& descriptor, int num_rows, int num_cols, cv::Mat& visualisation)\n\t{\n\n\t\t// First convert to dlib format\n\t\tdlib::array2d<dlib::matrix<float,31,1> > hog(num_rows, num_cols);\n\t\t\n\t\tcv::MatConstIterator_<double> descriptor_it = descriptor.begin();\n\t\tfor(int y = 0; y < num_cols; ++y)\n\t\t{\n\t\t\tfor(int x = 0; x < num_rows; ++x)\n\t\t\t{\n\t\t\t\tfor(unsigned int o = 0; o < 31; ++o)\n\t\t\t\t{\n\t\t\t\t\thog[y][x](o) = *descriptor_it++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Draw the FHOG to OpenCV format\n\t\tauto fhog_vis = dlib::draw_fhog(hog);\n\t\tvisualisation = dlib::toMat(fhog_vis).clone();\n\t}\n\n\t// Create a row vector Felzenszwalb HOG descriptor from a given image\n\tvoid Extract_FHOG_descriptor(cv::Mat_<double>& descriptor, const cv::Mat& image, int& num_rows, int& num_cols, int cell_size)\n\t{\n\t\t\n\t\tdlib::array2d<dlib::matrix<float,31,1> > hog;\n\t\tif(image.channels() == 1)\n\t\t{\n\t\t\tdlib::cv_image<uchar> dlib_warped_img(image);\n\t\t\tdlib::extract_fhog_features(dlib_warped_img, hog, cell_size);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdlib::cv_image<dlib::bgr_pixel> dlib_warped_img(image);\n\t\t\tdlib::extract_fhog_features(dlib_warped_img, hog, cell_size);\n\t\t}\n\n\t\t// Convert to a usable format\n\t\tnum_cols = hog.nc();\n\t\tnum_rows = hog.nr();\n\n\t\tdescriptor = cv::Mat_<double>(1, num_cols * num_rows * 31);\n\t\tcv::MatIterator_<double> descriptor_it = descriptor.begin();\n\t\tfor(int y = 0; y < num_cols; ++y)\n\t\t{\n\t\t\tfor(int x = 0; x < num_rows; ++x)\n\t\t\t{\n\t\t\t\tfor(unsigned int o = 0; o < 31; ++o)\n\t\t\t\t{\n\t\t\t\t\t*descriptor_it++ = (double)hog[y][x](o);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Extract summary statistics (mean, stdev, min, max) from each dimension of a descriptor, each row is a descriptor\n\tvoid ExtractSummaryStatistics(const cv::Mat_<double>& descriptors, cv::Mat_<double>& sum_stats, bool use_mean, bool use_stdev, bool use_max_min)\n\t{\n\t\t// Using four summary statistics at the moment \n\t\t// Means, stds, mins, maxs\n\t\tint num_stats = 0;\n\n\t\tif(use_mean)\n\t\t\tnum_stats++;\n\n\t\tif(use_stdev)\n\t\t\tnum_stats++;\n\n\t\tif(use_max_min)\n\t\t\tnum_stats++;\n\n\t\tsum_stats = cv::Mat_<double>(1, descriptors.cols * num_stats, 0.0);\n\t\tfor(int i = 0; i < descriptors.cols; ++i)\n\t\t{\n\t\t\tcv::Scalar mean, stdev;\n\t\t\tcv::meanStdDev(descriptors.col(i), mean, stdev);\n\n\t\t\tint add = 0;\n\n\t\t\tif(use_mean)\n\t\t\t{\n\t\t\t\tsum_stats.at<double>(0, i*num_stats + add) = mean[0];\n\t\t\t\tadd++;\n\t\t\t}\n\n\t\t\tif(use_stdev)\n\t\t\t{\n\t\t\t\tsum_stats.at<double>(0, i*num_stats + add) = stdev[0];\n\t\t\t\tadd++;\n\t\t\t}\n\n\t\t\tif(use_max_min)\n\t\t\t{\n\t\t\t\tdouble min, max;\n\t\t\t\tcv::minMaxIdx(descriptors.col(i), &min, &max);\n\t\t\t\tsum_stats.at<double>(0, i*num_stats + add) = max - min;\n\t\t\t\tadd++;\n\t\t\t}\n\t\t}\t\t\n\t}\n\n\tvoid AddDescriptor(cv::Mat_<double>& descriptors, cv::Mat_<double> new_descriptor, int curr_frame, int num_frames_to_keep)\n\t{\n\t\tif(descriptors.empty())\n\t\t{\n\t\t\tdescriptors = cv::Mat_<double>(num_frames_to_keep, new_descriptor.cols, 0.0);\n\t\t}\n\n\t\tint row_to_change = curr_frame % num_frames_to_keep;\n\n\t\tnew_descriptor.copyTo(descriptors.row(row_to_change));\n\t}\t\n\n}"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/src/GazeEstimation.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/calib3d/calib3d.hpp\"\n#include <iostream>\n\n#include \"GazeEstimation.h\"\n\nusing namespace std;\n\nusing namespace FaceAnalysis;\n\n// For subpixel accuracy drawing\nconst int gaze_draw_shiftbits = 4;\nconst int gaze_draw_multiplier = 1 << 4;\n\ncv::Point3f RaySphereIntersect(cv::Point3f rayOrigin, cv::Point3f rayDir, cv::Point3f sphereOrigin, float sphereRadius){\n\n\tfloat dx = rayDir.x;\n\tfloat dy = rayDir.y;\n\tfloat dz = rayDir.z;\n\tfloat x0 = rayOrigin.x;\n\tfloat y0 = rayOrigin.y;\n\tfloat z0 = rayOrigin.z;\n\tfloat cx = sphereOrigin.x;\n\tfloat cy = sphereOrigin.y;\n\tfloat cz = sphereOrigin.z;\n\tfloat r = sphereRadius;\n\n\tfloat a = dx*dx + dy*dy + dz*dz;\n\tfloat b = 2*dx*(x0-cx) + 2*dy*(y0-cy) + 2*dz*(z0-cz);\n\tfloat c = cx*cx + cy*cy + cz*cz + x0*x0 + y0*y0 + z0*z0 + -2*(cx*x0 + cy*y0 + cz*z0) - r*r;\n\n\tfloat disc = b*b - 4*a*c;\n\n\tfloat t = (-b - sqrt(b*b - 4*a*c))/2*a;\n\n\t// This implies that the lines did not intersect, point straight ahead\n\tif (b*b - 4 * a*c < 0)\n\t\treturn cv::Point3f(0, 0, -1);\n\n\treturn rayOrigin + rayDir * t;\n}\n\ncv::Point3f GetPupilPosition(cv::Mat_<double> eyeLdmks3d){\n\t\n\teyeLdmks3d = eyeLdmks3d.t();\n\n\tcv::Mat_<double> irisLdmks3d = eyeLdmks3d.rowRange(0,8);\n\n\tcv::Point3f p (mean(irisLdmks3d.col(0))[0], mean(irisLdmks3d.col(1))[0], mean(irisLdmks3d.col(2))[0]);\n\treturn p;\n}\n\nvoid FaceAnalysis::EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Point3f& gaze_absolute, float fx, float fy, float cx, float cy, bool left_eye)\n{\n\tcv::Vec6d headPose = LandmarkDetector::GetPoseCamera(clnf_model, fx, fy, cx, cy);\n\tcv::Vec3d eulerAngles(headPose(3), headPose(4), headPose(5));\n\tcv::Matx33d rotMat = LandmarkDetector::Euler2RotationMatrix(eulerAngles);\n\n\tint part = -1;\n\tfor (size_t i = 0; i < clnf_model.hierarchical_models.size(); ++i)\n\t{\n\t\tif (left_eye && clnf_model.hierarchical_model_names[i].compare(\"left_eye_28\") == 0)\n\t\t{\n\t\t\tpart = i;\n\t\t}\n\t\tif (!left_eye && clnf_model.hierarchical_model_names[i].compare(\"right_eye_28\") == 0)\n\t\t{\n\t\t\tpart = i;\n\t\t}\n\t}\n\n\tif (part == -1)\n\t{\n\t\tstd::cout << \"Couldn't find the eye model, something wrong\" << std::endl;\n\t}\n\n\tcv::Mat eyeLdmks3d = clnf_model.hierarchical_models[part].GetShape(fx, fy, cx, cy);\n\n\tcv::Point3f pupil = GetPupilPosition(eyeLdmks3d);\n\tcv::Point3f rayDir = pupil / norm(pupil);\n\n\tcv::Mat faceLdmks3d = clnf_model.GetShape(fx, fy, cx, cy);\n\tfaceLdmks3d = faceLdmks3d.t();\n\tcv::Mat offset = (cv::Mat_<double>(3, 1) << 0, -3.50, 0);\n\tint eyeIdx = 1;\n\tif (left_eye)\n\t{\n\t\teyeIdx = 0;\n\t}\n\n\tcv::Mat eyeballCentreMat = (faceLdmks3d.row(36+eyeIdx*6) + faceLdmks3d.row(39+eyeIdx*6))/2.0f + (cv::Mat(rotMat)*offset).t();\n\n\tcv::Point3f eyeballCentre = cv::Point3f(eyeballCentreMat);\n\n\tcv::Point3f gazeVecAxis = RaySphereIntersect(cv::Point3f(0,0,0), rayDir, eyeballCentre, 12) - eyeballCentre;\n\t\n\tgaze_absolute = gazeVecAxis / norm(gazeVecAxis);\n}\n\n\nvoid FaceAnalysis::DrawGaze(cv::Mat img, const LandmarkDetector::CLNF& clnf_model, cv::Point3f gazeVecAxisLeft, cv::Point3f gazeVecAxisRight, float fx, float fy, float cx, float cy)\n{\n\n\tcv::Mat cameraMat = (cv::Mat_<double>(3, 3) << fx, 0, cx, 0, fy, cy, 0, 0, 0);\n\n\tint part_left = -1;\n\tint part_right = -1;\n\tfor (size_t i = 0; i < clnf_model.hierarchical_models.size(); ++i)\n\t{\n\t\tif (clnf_model.hierarchical_model_names[i].compare(\"left_eye_28\") == 0)\n\t\t{\n\t\t\tpart_left = i;\n\t\t}\n\t\tif (clnf_model.hierarchical_model_names[i].compare(\"right_eye_28\") == 0)\n\t\t{\n\t\t\tpart_right = i;\n\t\t}\n\t}\n\n\tcv::Mat eyeLdmks3d_left = clnf_model.hierarchical_models[part_left].GetShape(fx, fy, cx, cy);\n\tcv::Point3f pupil_left = GetPupilPosition(eyeLdmks3d_left);\n\n\tcv::Mat eyeLdmks3d_right = clnf_model.hierarchical_models[part_right].GetShape(fx, fy, cx, cy);\n\tcv::Point3f pupil_right = GetPupilPosition(eyeLdmks3d_right);\n\n\tvector<cv::Point3d> points_left;\n\tpoints_left.push_back(cv::Point3d(pupil_left));\n\tpoints_left.push_back(cv::Point3d(pupil_left + gazeVecAxisLeft*50.0));\n\n\tvector<cv::Point3d> points_right;\n\tpoints_right.push_back(cv::Point3d(pupil_right));\n\tpoints_right.push_back(cv::Point3d(pupil_right + gazeVecAxisRight*50.0));\n\n\tcv::Mat_<double> proj_points;\n\tcv::Mat_<double> mesh_0 = (cv::Mat_<double>(2, 3) << points_left[0].x, points_left[0].y, points_left[0].z, points_left[1].x, points_left[1].y, points_left[1].z);\n\tLandmarkDetector::Project(proj_points, mesh_0, fx, fy, cx, cy);\n\tcv::line(img, cv::Point(cvRound(proj_points.at<double>(0,0) * (double)gaze_draw_multiplier), cvRound(proj_points.at<double>(0, 1) * (double)gaze_draw_multiplier)),\n\t\tcv::Point(cvRound(proj_points.at<double>(1, 0) * (double)gaze_draw_multiplier), cvRound(proj_points.at<double>(1, 1) * (double)gaze_draw_multiplier)), cv::Scalar(110, 220, 0), 2, CV_AA, gaze_draw_shiftbits);\n\n\tcv::Mat_<double> mesh_1 = (cv::Mat_<double>(2, 3) << points_right[0].x, points_right[0].y, points_right[0].z, points_right[1].x, points_right[1].y, points_right[1].z);\n\tLandmarkDetector::Project(proj_points, mesh_1, fx, fy, cx, cy);\n\tcv::line(img, cv::Point(cvRound(proj_points.at<double>(0, 0) * (double)gaze_draw_multiplier), cvRound(proj_points.at<double>(0, 1) * (double)gaze_draw_multiplier)),\n\t\tcv::Point(cvRound(proj_points.at<double>(1, 0) * (double)gaze_draw_multiplier), cvRound(proj_points.at<double>(1, 1) * (double)gaze_draw_multiplier)), cv::Scalar(110, 220, 0), 2, CV_AA, gaze_draw_shiftbits);\n}"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/src/SVM_dynamic_lin.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"SVM_dynamic_lin.h\"\n\n#include \"LandmarkCoreIncludes.h\"\n\nusing namespace FaceAnalysis;\n\nvoid SVM_dynamic_lin::Read(std::ifstream& stream, const std::vector<std::string>& au_names)\n{\n\n\tif(this->means.empty())\n\t{\n\t\tLandmarkDetector::ReadMatBin(stream, this->means);\n\t}\n\telse\n\t{\n\t\tcv::Mat_<double> m_tmp;\n\t\tLandmarkDetector::ReadMatBin(stream, m_tmp);\n\t\tif(cv::norm(m_tmp - this->means > 0.00001))\n\t\t{\n\t\t\tcout << \"Something went wrong with the SVM dynamic classifiers\" << endl;\n\t\t}\n\t}\n\n\tcv::Mat_<double> support_vectors_curr;\n\tLandmarkDetector::ReadMatBin(stream, support_vectors_curr);\n\n\tdouble bias;\n\tstream.read((char *)&bias, 8);\n\n\t// Read in positive or negative class\n\tdouble pos_class;\t\n\tstream.read((char *)&pos_class, 8);\n\n\tdouble neg_class;\n\tstream.read((char *)&neg_class, 8);\n\n\n\t// Add a column vector to the matrix of support vectors (each column is a support vector)\n\tif(!this->support_vectors.empty())\n\t{\t\n\t\tcv::transpose(this->support_vectors, this->support_vectors);\n\t\tcv::transpose(support_vectors_curr, support_vectors_curr);\n\t\tthis->support_vectors.push_back(support_vectors_curr);\n\t\tcv::transpose(this->support_vectors, this->support_vectors);\n\n\t\tcv::transpose(this->biases, this->biases);\n\t\tthis->biases.push_back(cv::Mat_<double>(1, 1, bias));\n\t\tcv::transpose(this->biases, this->biases);\n\n\t}\n\telse\n\t{\n\t\tthis->support_vectors.push_back(support_vectors_curr);\n\t\tthis->biases.push_back(cv::Mat_<double>(1, 1, bias));\n\t}\n\n\tthis->pos_classes.push_back(pos_class);\n\tthis->neg_classes.push_back(neg_class);\n\t\n\tfor(size_t i=0; i < au_names.size(); ++i)\n\t{\n\t\tthis->AU_names.push_back(au_names[i]);\n\t}\n}\n\n// Prediction using the HOG descriptor\nvoid SVM_dynamic_lin::Predict(std::vector<double>& predictions, std::vector<std::string>& names, const cv::Mat_<double>& fhog_descriptor, const cv::Mat_<double>& geom_params,  const cv::Mat_<double>& running_median,  const cv::Mat_<double>& running_median_geom)\n{\n\tif(AU_names.size() > 0)\n\t{\n\t\tcv::Mat_<double> preds;\n\t\tif(fhog_descriptor.cols ==  this->means.cols)\n\t\t{\n\t\t\tpreds = (fhog_descriptor - this->means - running_median) * this->support_vectors + this->biases;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcv::Mat_<double> input;\n\t\t\tcv::hconcat(fhog_descriptor, geom_params, input);\n\n\t\t\tcv::Mat_<double> run_med;\n\t\t\tcv::hconcat(running_median, running_median_geom, run_med);\n\n\t\t\tpreds = (input - this->means - run_med) * this->support_vectors + this->biases;\n\t\t}\n\n\t\tfor(int i = 0; i < preds.cols; ++i)\n\t\t{\t\t\n\t\t\tif(preds.at<double>(i) > 0)\n\t\t\t{\n\t\t\t\tpredictions.push_back(pos_classes[i]);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tpredictions.push_back(neg_classes[i]);\n\t\t\t}\n\t\t}\n\n\t\tnames = this->AU_names;\n\t}\n}"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/src/SVM_static_lin.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"SVM_static_lin.h\"\n\n#include \"LandmarkCoreIncludes.h\"\n\nusing namespace FaceAnalysis;\n\nvoid SVM_static_lin::Read(std::ifstream& stream, const std::vector<std::string>& au_names)\n{\n\n\tif(this->means.empty())\n\t{\n\t\tLandmarkDetector::ReadMatBin(stream, this->means);\n\t}\n\telse\n\t{\n\t\tcv::Mat_<double> m_tmp;\n\t\tLandmarkDetector::ReadMatBin(stream, m_tmp);\n\t\tif(cv::norm(m_tmp - this->means > 0.00001))\n\t\t{\n\t\t\tcout << \"Something went wrong with the SVM static classifiers\" << endl;\n\t\t}\n\t}\n\n\tcv::Mat_<double> support_vectors_curr;\n\tLandmarkDetector::ReadMatBin(stream, support_vectors_curr);\n\n\tdouble bias;\n\tstream.read((char *)&bias, 8);\n\n\t// Read in positive or negative class\n\tdouble pos_class;\t\n\tstream.read((char *)&pos_class, 8);\n\n\tdouble neg_class;\n\tstream.read((char *)&neg_class, 8);\n\n\n\t// Add a column vector to the matrix of support vectors (each column is a support vector)\n\tif(!this->support_vectors.empty())\n\t{\t\n\t\tcv::transpose(this->support_vectors, this->support_vectors);\n\t\tcv::transpose(support_vectors_curr, support_vectors_curr);\n\t\tthis->support_vectors.push_back(support_vectors_curr);\n\t\tcv::transpose(this->support_vectors, this->support_vectors);\n\n\t\tcv::transpose(this->biases, this->biases);\n\t\tthis->biases.push_back(cv::Mat_<double>(1, 1, bias));\n\t\tcv::transpose(this->biases, this->biases);\n\n\t}\n\telse\n\t{\n\t\tthis->support_vectors.push_back(support_vectors_curr);\n\t\tthis->biases.push_back(cv::Mat_<double>(1, 1, bias));\n\t}\n\n\tthis->pos_classes.push_back(pos_class);\n\tthis->neg_classes.push_back(neg_class);\n\t\n\tfor(size_t i=0; i < au_names.size(); ++i)\n\t{\n\t\tthis->AU_names.push_back(au_names[i]);\n\t}\n}\n\n// Prediction using the HOG descriptor\nvoid SVM_static_lin::Predict(std::vector<double>& predictions, std::vector<std::string>& names, const cv::Mat_<double>& fhog_descriptor, const cv::Mat_<double>& geom_params)\n{\n\tif(AU_names.size() > 0)\n\t{\n\t\tcv::Mat_<double> preds;\n\t\tif(fhog_descriptor.cols ==  this->means.cols)\n\t\t{\n\t\t\tpreds = (fhog_descriptor - this->means) * this->support_vectors + this->biases;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcv::Mat_<double> input;\n\t\t\tcv::hconcat(fhog_descriptor, geom_params, input);\n\n\t\t\tpreds = (input - this->means) * this->support_vectors + this->biases;\n\t\t}\n\n\t\tfor(int i = 0; i < preds.cols; ++i)\n\t\t{\t\t\n\t\t\tif(preds.at<double>(i) > 0)\n\t\t\t{\n\t\t\t\tpredictions.push_back(pos_classes[i]);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tpredictions.push_back(neg_classes[i]);\n\t\t\t}\n\t\t}\n\n\t\tnames = this->AU_names;\n\t}\n}"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/src/SVR_dynamic_lin_regressors.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"SVR_dynamic_lin_regressors.h\"\n\n#include \"LandmarkCoreIncludes.h\"\n\nusing namespace FaceAnalysis;\n\nvoid SVR_dynamic_lin_regressors::Read(std::ifstream& stream, const std::vector<std::string>& au_names)\n{\n\t\n\t// For person specific calibration in a video\n\tdouble cutoff;\n\tstream.read((char*)&cutoff, 8);\n\tcutoffs.push_back(cutoff);\n\n\t// The feature normalization using the mean\n\tif(this->means.empty())\n\t{\n\t\tLandmarkDetector::ReadMatBin(stream, this->means);\n\t}\n\telse\n\t{\n\t\tcv::Mat_<double> m_tmp;\n\t\tLandmarkDetector::ReadMatBin(stream, m_tmp);\n\t\tif(cv::norm(m_tmp - this->means > 0.00001))\n\t\t{\n\t\t\tcout << \"Something went wrong with the SVR dynamic regressors\" << endl;\n\t\t}\n\t}\n\n\tcv::Mat_<double> support_vectors_curr;\n\tLandmarkDetector::ReadMatBin(stream, support_vectors_curr);\n\n\tdouble bias;\n\tstream.read((char *)&bias, 8);\n\n\t// Add a column vector to the matrix of support vectors (each column is a support vector)\n\tif(!this->support_vectors.empty())\n\t{\t\n\t\tcv::transpose(this->support_vectors, this->support_vectors);\n\t\tcv::transpose(support_vectors_curr, support_vectors_curr);\n\t\tthis->support_vectors.push_back(support_vectors_curr);\n\t\tcv::transpose(this->support_vectors, this->support_vectors);\n\n\t\tcv::transpose(this->biases, this->biases);\n\t\tthis->biases.push_back(cv::Mat_<double>(1, 1, bias));\n\t\tcv::transpose(this->biases, this->biases);\n\n\t}\n\telse\n\t{\n\t\tthis->support_vectors.push_back(support_vectors_curr);\n\t\tthis->biases.push_back(cv::Mat_<double>(1, 1, bias));\n\t}\n\t\n\tfor(size_t i=0; i < au_names.size(); ++i)\n\t{\n\t\tthis->AU_names.push_back(au_names[i]);\n\t}\n}\n\n// Prediction using the HOG descriptor\nvoid SVR_dynamic_lin_regressors::Predict(std::vector<double>& predictions, std::vector<std::string>& names, const cv::Mat_<double>& fhog_descriptor, const cv::Mat_<double>& geom_params,  const cv::Mat_<double>& running_median,  const cv::Mat_<double>& running_median_geom)\n{\n\tif(AU_names.size() > 0)\n\t{\n\t\tcv::Mat_<double> preds;\n\t\tif(fhog_descriptor.cols ==  this->means.cols)\n\t\t{\n\t\t\tpreds = (fhog_descriptor - this->means - running_median) * this->support_vectors + this->biases;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcv::Mat_<double> input;\n\t\t\tcv::hconcat(fhog_descriptor, geom_params, input);\n\n\t\t\tcv::Mat_<double> run_med;\n\t\t\tcv::hconcat(running_median, running_median_geom, run_med);\n\n\t\t\tpreds = (input - this->means - run_med) * this->support_vectors + this->biases;\n\t\t}\n\n\t\tfor(cv::MatIterator_<double> pred_it = preds.begin(); pred_it != preds.end(); ++pred_it)\n\t\t{\t\t\n\t\t\tpredictions.push_back(*pred_it);\n\t\t}\n\t\t\n\t\tnames = this->AU_names;\n\t}\n}"
  },
  {
    "path": "FaceLivenessDetection/lib/local/FaceAnalyser/src/SVR_static_lin_regressors.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"SVR_static_lin_regressors.h\"\n\n#include \"LandmarkCoreIncludes.h\"\n\nusing namespace FaceAnalysis;\n\nvoid SVR_static_lin_regressors::Read(std::ifstream& stream, const std::vector<std::string>& au_names)\n{\n\n\tif(this->means.empty())\n\t{\n\t\tLandmarkDetector::ReadMatBin(stream, this->means);\n\t}\n\telse\n\t{\n\t\tcv::Mat_<double> m_tmp;\n\t\tLandmarkDetector::ReadMatBin(stream, m_tmp);\n\t\tif(cv::norm(m_tmp - this->means > 0.00001))\n\t\t{\n\t\t\tcout << \"Something went wrong with the SVR static regressors\" << endl;\n\t\t}\n\t}\n\n\tcv::Mat_<double> support_vectors_curr;\n\tLandmarkDetector::ReadMatBin(stream, support_vectors_curr);\n\n\tdouble bias;\n\tstream.read((char *)&bias, 8);\n\n\t// Add a column vector to the matrix of support vectors (each column is a support vector)\n\tif(!this->support_vectors.empty())\n\t{\t\n\t\tcv::transpose(this->support_vectors, this->support_vectors);\n\t\tcv::transpose(support_vectors_curr, support_vectors_curr);\n\t\tthis->support_vectors.push_back(support_vectors_curr);\n\t\tcv::transpose(this->support_vectors, this->support_vectors);\n\n\t\tcv::transpose(this->biases, this->biases);\n\t\tthis->biases.push_back(cv::Mat_<double>(1, 1, bias));\n\t\tcv::transpose(this->biases, this->biases);\n\n\t}\n\telse\n\t{\n\t\tthis->support_vectors.push_back(support_vectors_curr);\n\t\tthis->biases.push_back(cv::Mat_<double>(1, 1, bias));\n\t}\n\t\n\tfor(size_t i=0; i < au_names.size(); ++i)\n\t{\n\t\tthis->AU_names.push_back(au_names[i]);\n\t}\n}\n\n// Prediction using the HOG descriptor\nvoid SVR_static_lin_regressors::Predict(std::vector<double>& predictions, std::vector<std::string>& names, const cv::Mat_<double>& fhog_descriptor, const cv::Mat_<double>& geom_params)\n{\n\tif(AU_names.size() > 0)\n\t{\n\t\tcv::Mat_<double> preds;\n\t\tif(fhog_descriptor.cols ==  this->means.cols)\n\t\t{\n\t\t\tpreds = (fhog_descriptor - this->means) * this->support_vectors + this->biases;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcv::Mat_<double> input;\n\t\t\tcv::hconcat(fhog_descriptor, geom_params, input);\n\n\t\t\tpreds = (input - this->means) * this->support_vectors + this->biases;\n\t\t}\n\n\t\tfor(cv::MatIterator_<double> pred_it = preds.begin(); pred_it != preds.end(); ++pred_it)\n\t\t{\t\t\n\t\t\tpredictions.push_back(*pred_it);\n\t\t}\n\n\t\tnames = this->AU_names;\n\t}\n}"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/CMakeLists.txt",
    "content": "#TBB library\ninclude_directories(${TBB_ROOT_DIR}/include)\n\ninclude_directories(${BOOST_INCLUDE_DIR})\n\nSET(SOURCE\n    src/CCNF_patch_expert.cpp\n\tsrc/LandmarkDetectionValidator.cpp\n    src/LandmarkDetectorFunc.cpp\n\tsrc/LandmarkDetectorModel.cpp\n    src/LandmarkDetectorUtils.cpp\n\tsrc/LandmarkDetectorParameters.cpp\n\tsrc/Patch_experts.cpp\n\tsrc/PAW.cpp\n    src/PDM.cpp\n\tsrc/SVR_patch_expert.cpp\n\tsrc/stdafx.cpp\n    src/classifier/lab_boosted_classifier.cpp\nsrc/classifier/mlp.cpp\nsrc/classifier/surf_mlp.cpp\nsrc/face_detection.cpp\nsrc/feat/lab_feature_map.cpp\nsrc/feat/surf_feature_map.cpp\nsrc/fust.cpp\nsrc/io/lab_boost_model_reader.cpp\nsrc/io/surf_mlp_model_reader.cpp\nsrc/util/image_pyramid.cpp\nsrc/util/nms.cpp\n)\n\nSET(HEADERS\n    include/CCNF_patch_expert.h\t\n    include/LandmarkCoreIncludes.h\n\tinclude/LandmarkDetectionValidator.h\n    include/LandmarkDetectorFunc.h\n\tinclude/LandmarkDetectorModel.h\n\tinclude/LandmarkDetectorParameters.h\n\tinclude/LandmarkDetectorUtils.h\n\tinclude/Patch_experts.h\t\n    include/PAW.h\n\tinclude/PDM.h\n\tinclude/SVR_patch_expert.h\t\t\n\tinclude/stdafx.h\ninclude/classifier/lab_boosted_classifier.h\ninclude/classifier/mlp.h\ninclude/classifier/surf_mlp.h\ninclude/classifier.h\ninclude/common.h\ninclude/detector.h\ninclude/face_detection.h\ninclude/feat/lab_feature_map.h\ninclude/feat/surf_feature_map.h\ninclude/feature_map.h\ninclude/fust.h\ninclude/io/lab_boost_model_reader.h\ninclude/io/surf_mlp_model_reader.h\ninclude/model_reader.h\ninclude/util/image_pyramid.h\ninclude/util/math_func.h\ninclude/util/nms.h\n)\n\ninclude_directories(./include)\ninclude_directories(../seetaFace/include)\ninclude_directories(${LandmarkDetector_SOURCE_DIR}/include)\n\n\nadd_library( LandmarkDetector ${SOURCE} ${HEADERS} )\n\ninstall (TARGETS LandmarkDetector DESTINATION lib)\ninstall (FILES ${HEADERS} DESTINATION include/FaceLivenessDetection)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/CCNF_patch_expert.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __CCNF_PATCH_EXPERT_h_\n#define __CCNF_PATCH_EXPERT_h_\n\n#include <opencv2/core/core.hpp>\n\n#include <map>\n#include <vector>\n\nnamespace LandmarkDetector\n{\n\n//===========================================================================\n/** \n\tA single Neuron response\n*/\nclass CCNF_neuron{\n\npublic:\n\n\t// Type of patch (0=raw,1=grad,3=depth, other types besides raw are not actually used now)\n\tint     neuron_type; \n\n\t// scaling of weights (needed as the energy of neuron might not be 1) \n\tdouble  norm_weights; \n\n\t// Weight bias\n\tdouble  bias;\n\n\t// Neural weights\n\tcv::Mat_<float> weights; \n\n\t// can have neural weight dfts that are calculated on the go as needed, this allows us not to recompute\n\t// the dft of the template each time, improving the speed of tracking\n\tstd::map<int, cv::Mat_<double> > weights_dfts;\n\n\t// the alpha associated with the neuron\n\tdouble alpha; \n\n\t// Default constructor\n\tCCNF_neuron(){;}\n\n\t// Copy constructor\n\tCCNF_neuron(const CCNF_neuron& other);\n\n\tvoid Read(std::ifstream &stream);\n\t// The im_dft, integral_img, and integral_img_sq are precomputed images for convolution speedups (they get set if passed in empty values)\n\tvoid Response(cv::Mat_<float> &im, cv::Mat_<double> &im_dft, cv::Mat &integral_img, cv::Mat &integral_img_sq, cv::Mat_<float> &resp);\n\n};\n\n//===========================================================================\n/**\nA CCNF patch expert\n*/\nclass CCNF_patch_expert{\npublic:\n    \n\t// Width and height of the patch expert support region\n\tint width;\n\tint height;             \n    \n\t// Collection of neurons for this patch expert\n\tstd::vector<CCNF_neuron> neurons;\n\n\t// Information about the vertex features (association potentials)\n\tstd::vector<int>\t\t\t\twindow_sizes;\n\tstd::vector<cv::Mat_<float> >\tSigmas;\n\tstd::vector<double>\t\t\t\tbetas;\n\n\t// How confident we are in the patch\n\tdouble   patch_confidence;\n\n\t// Default constructor\n\tCCNF_patch_expert(){;}\n\n\t// Copy constructor\t\t\n\tCCNF_patch_expert(const CCNF_patch_expert& other);\n\n\tvoid Read(std::ifstream &stream, std::vector<int> window_sizes, std::vector<std::vector<cv::Mat_<float> > > sigma_components);\n\n\t// actual work (can pass in an image and a potential depth image, if the CCNF is trained with depth)\n\tvoid Response(cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\n\t// Helper function to compute relevant sigmas\n\tvoid ComputeSigmas(std::vector<cv::Mat_<float> > sigma_components, int window_size);\n\t\n};\n  //===========================================================================\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/LandmarkCoreIncludes.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////\n\n\n#ifndef __LANDMARK_CORE_INCLUDES_h_\n#define __LANDMARK_CORE_INCLUDES_h_\n\n#include \"LandmarkDetectorModel.h\"\n#include \"LandmarkDetectorFunc.h\"\n#include \"LandmarkDetectorParameters.h\"\n#include \"LandmarkDetectorUtils.h\"\n\n//seetaFace includes\n#include \"face_detection.h\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/LandmarkDetectionValidator.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __LANDMARK_DETECTION_VALIDATOR_h_\n#define __LANDMARK_DETECTION_VALIDATOR_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n// System includes\n#include <vector>\n\n// Local includes\n#include \"PAW.h\"\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n//===========================================================================\n//\n// Checking if landmark detection was successful using an SVR regressor\n// Using multiple validators trained add different views\n// The regressor outputs -1 for ideal alignment and 1 for worst alignment\n//===========================================================================\nclass DetectionValidator\n{\n\t\t\npublic:    \n\t\n\t// What type of validator we're using - 0 - linear svr, 1 - feed forward neural net, 2 - convolutional neural net\n\tint validator_type;\n\n\t// The orientations of each of the landmark detection validator\n    std::vector<cv::Vec3d> orientations;\n\n\t// Piecewise affine warps to the reference shape (per orientation)\n    std::vector<PAW>     paws;\n\n\t//==========================================\n\t// Linear SVR\n\n\t// SVR biases\n    std::vector<double>  bs;\n\n\t// SVR weights\n    std::vector<cv::Mat_<double> > ws;\n\t\n\t//==========================================\n\t// Neural Network\n\n\t// Neural net weights\n    std::vector<std::vector<cv::Mat_<double> > > ws_nn;\n\n\t// What type of activation or output functions are used\n\t// 0 - sigmoid, 1 - tanh_opt, 2 - ReLU\n    std::vector<int> activation_fun;\n    std::vector<int> output_fun;\n\n\t//==========================================\n\t// Convolutional Neural Network\n\n\t// CNN layers for each view\n\t// view -> layer -> input maps -> kernels\n    std::vector<std::vector<std::vector<std::vector<cv::Mat_<float> > > > > cnn_convolutional_layers;\n\t// Bit ugly with so much nesting, but oh well\n    std::vector<std::vector<std::vector<std::vector<std::pair<int, cv::Mat_<double> > > > > > cnn_convolutional_layers_dft;\n    std::vector<std::vector<std::vector<float > > > cnn_convolutional_layers_bias;\n    std::vector< std::vector<int> > cnn_subsampling_layers;\n    std::vector< std::vector<cv::Mat_<float> > > cnn_fully_connected_layers;\n    std::vector< std::vector<float > > cnn_fully_connected_layers_bias;\n\t// 0 - convolutional, 1 - subsampling, 2 - fully connected\n    std::vector<std::vector<int> > cnn_layer_types;\n\t\n\t//==========================================\n\n\t// Normalisation for face validation\n    std::vector<cv::Mat_<double> > mean_images;\n    std::vector<cv::Mat_<double> > standard_deviations;\n\n\t// Default constructor\n\tDetectionValidator(){;}\n\n\t// Copy constructor\n\tDetectionValidator(const DetectionValidator& other);\n\n\t// Given an image, orientation and detected landmarks output the result of the appropriate regressor\n\tdouble Check(const cv::Vec3d& orientation, const cv::Mat_<uchar>& intensity_img, cv::Mat_<double>& detected_landmarks);\n\n\t// Reading in the model\n    void Read(std::string location);\n\t\t\t\n\t// Getting the closest view center based on orientation\n\tint GetViewId(const cv::Vec3d& orientation) const;\n\nprivate:\n\n\t// The actual regressor application on the image\n\n\t// Support Vector Regression (linear kernel)\n\tdouble CheckSVR(const cv::Mat_<double>& warped_img, int view_id);\n\n\t// Feed-forward Neural Network\n\tdouble CheckNN(const cv::Mat_<double>& warped_img, int view_id);\n\n\t// Convolutional Neural Network\n\tdouble CheckCNN(const cv::Mat_<double>& warped_img, int view_id);\n\n\t// A normalisation helper\n\tvoid NormaliseWarpedToVector(const cv::Mat_<double>& warped_img, cv::Mat_<double>& feature_vec, int view_id);\n\n};\n\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/LandmarkDetectorFunc.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n//  Header for all external CLM/CLNF/CLM-Z methods of interest to the user\n//\n//\n#ifndef __LANDMARK_DETECTOR_FUNC_h_\n#define __LANDMARK_DETECTOR_FUNC_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n#include \"LandmarkDetectorParameters.h\"\n#include \"LandmarkDetectorUtils.h\"\n#include \"LandmarkDetectorModel.h\"\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n\n\t//================================================================================================================\n\t// Landmark detection in videos, need to provide an image and model parameters (default values work well)\n\t// Optionally can provide a bounding box from which to start tracking\n\t//================================================================================================================\n\tbool DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, FaceModelParameters& params);\n\tbool DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> &depth_image, CLNF& clnf_model, FaceModelParameters& params);\n\n\tbool DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params);\n\tbool DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> &depth_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params);\n\n\t//================================================================================================================\n\t// Landmark detection in image, need to provide an image and optionally CLNF model together with parameters (default values work well)\n\t// Optionally can provide a bounding box in which detection is performed (this is useful if multiple faces are to be detected in images)\n\t//================================================================================================================\n\tbool DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, FaceModelParameters& params);\n\t// Providing a bounding box\n\tbool DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params);\n\n\t//================================================\n\t// CLM-Z versions\n\tbool DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> depth_image, CLNF& clnf_model, FaceModelParameters& params);\n\tbool DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> depth_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params);\n\n\t//================================================================\n\t// Helper function for getting head pose from CLNF parameters\n\n\t// Return the current estimate of the head pose, this can be either in camera or world coordinate space\n\t// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\n\tcv::Vec6d GetPoseCamera(const CLNF& clnf_model, double fx, double fy, double cx, double cy);\n\tcv::Vec6d GetPoseWorld(const CLNF& clnf_model, double fx, double fy, double cx, double cy);\n\t\n\t// Getting a head pose estimate from the currently detected landmarks, with appropriate correction for perspective\n\t// This is because rotation estimate under orthographic assumption is only correct close to the centre of the image\n\t// These methods attempt to correct for that\n\t// The pose returned can be either in camera or world coordinates\n\t// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\n\tcv::Vec6d GetCorrectedPoseCamera(const CLNF& clnf_model, double fx, double fy, double cx, double cy);\n\tcv::Vec6d GetCorrectedPoseWorld(const CLNF& clnf_model, double fx, double fy, double cx, double cy);\n\n\t//===========================================================================\n\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/LandmarkDetectorModel.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __LANDMARK_DETECTOR_MODEL_h_\n#define __LANDMARK_DETECTOR_MODEL_h_\n\n// OpenCV dependencies\n#include <opencv2/core/core.hpp>\n#include <opencv2/objdetect.hpp>\n\n//// dlib dependencies for face detection\n//#include <dlib/image_processing/frontal_face_detector.h>\n//#include <dlib/opencv.h>\n\n#include \"PDM.h\"\n#include \"Patch_experts.h\"\n#include \"LandmarkDetectionValidator.h\"\n#include \"LandmarkDetectorParameters.h\"\n\n//using namespace std;\n\n#include \"face_detection.h\"\n\nnamespace LandmarkDetector\n{\n    \n    // A main class containing all the modules required for landmark detection\n    // Face shape model\n    // Patch experts\n    // Optimization techniques\n    class CLNF{\n        \n    public:\n        \n        //===========================================================================\n        // Member variables that contain the model description\n        \n        // The linear 3D Point Distribution Model\n        PDM\t\t\t\t\tpdm;\n        // The set of patch experts\n        Patch_experts\t\tpatch_experts;\n        \n        // The local and global parameters describing the current model instance (current landmark detections)\n        \n        // Local parameters describing the non-rigid shape\n        cv::Mat_<double>    params_local;\n        \n        // Global parameters describing the rigid shape [scale, euler_x, euler_y, euler_z, tx, ty]\n        cv::Vec6d           params_global;\n        \n        // A collection of hierarchical CLNF models that can be used for refinement\n        std::vector<CLNF>\t\t\t\t\thierarchical_models;\n        std::vector<std::string>\t\t\t\t\thierarchical_model_names;\n        std::vector<std::vector<std::pair<int,int>>>\thierarchical_mapping;\n        std::vector<FaceModelParameters>\t\thierarchical_params;\n        \n        //==================== Helpers for face detection and landmark detection validation =========================================\n        \n        // Haar cascade classifier for face detection\n        cv::CascadeClassifier   face_detector_HAAR;\n        std::string                  face_detector_location;\n        \n        // A HOG SVM-struct based face detector\n        //\tdlib::frontal_face_detector face_detector_HOG;\n        \n        \n        //seetaface\n        seeta::FaceDetection *seetaface_detector;\n        std::string seetaface_detector_location;\n        \n        \n        \n        // Validate if the detected landmarks are correct using an SVR regressor\n        DetectionValidator\tlandmark_validator; \n        \n        // Indicating if landmark detection succeeded (based on SVR validator)\n        bool\t\t\t\tdetection_success; \n        \n        // Indicating if the tracking has been initialised (for video based tracking)\n        bool\t\t\t\ttracking_initialised;\n        \n        // The actual output of the regressor (-1 is perfect detection 1 is worst detection)\n        double\t\t\t\tdetection_certainty; \n        \n        // Indicator if eye model is there for eye detection\n        bool\t\t\t\teye_model = false;\n        \n        // the triangulation per each view (for drawing purposes only)\n        std::vector<cv::Mat_<int> >\ttriangulations;\n        \n        //===========================================================================\n        // Member variables that retain the state of the tracking (reflecting the state of the lastly tracked (detected) image\n        \n        // Lastly detect 2D model shape [x1,x2,...xn,y1,...yn]\n        cv::Mat_<double>\t\tdetected_landmarks;\n        \n        // The landmark detection likelihoods (combined and per patch expert)\n        double\t\t\t\tmodel_likelihood;\n        cv::Mat_<double>\t\tlandmark_likelihoods;\n        \n        // Keeping track of how many frames the tracker has failed in so far when tracking in videos\n        // This is useful for knowing when to initialise and reinitialise tracking\n        int failures_in_a_row;\n        \n        // A template of a face that last succeeded with tracking (useful for large motions in video)\n        cv::Mat_<uchar> face_template;\n        float face_x_pos;\n        float face_y_pos;\n        float face_width;\n        float face_height;\n        \n        // Useful when resetting or initialising the model closer to a specific location (when multiple faces are present)\n        cv::Point_<double> preference_det;\n        \n        // A default constructor\n        CLNF();\n        \n        std::string model_location_clnf;\n        std::string face_detector_location_clnf;\n        \n        bool inits();\n        \n        // Constructor from a model file\n        CLNF(std::string fname);\n        \n        // Copy constructor (makes a deep copy of the detector)\n        CLNF(const CLNF& other);\n        \n        // Assignment operator for lvalues (makes a deep copy of the detector)\n        CLNF & operator= (const CLNF& other);\n        \n        // Empty Destructor\tas the memory of every object will be managed by the corresponding libraries (no pointers)\n        ~CLNF(){if(this->seetaface_detector!=NULL){delete this->seetaface_detector;this->seetaface_detector = NULL;}}\n        \n        // Move constructor\n        CLNF(const CLNF&& other);\n        \n        // Assignment operator for rvalues\n        CLNF & operator= (const CLNF&& other);\n        \n        // Does the actual work - landmark detection\n        bool DetectLandmarks(const cv::Mat_<uchar> &image, const cv::Mat_<float> &depth, FaceModelParameters& params);\n        \n        // Gets the shape of the current detected landmarks in camera space (given camera calibration)\n        // Can only be called after a call to DetectLandmarksInVideo or DetectLandmarksInImage\n        cv::Mat_<double> GetShape(double fx, double fy, double cx, double cy) const;\n        \n        // A utility bounding box function\n        cv::Rect_<double> GetBoundingBox() const;\n        \n        // Reset the model (useful if we want to completelly reinitialise, or we want to track another video)\n        void Reset();\n        \n        // Reset the model, choosing the face nearest (x,y) where x and y are between 0 and 1.\n        void Reset(double x, double y);\n        \n        // Reading the model in\n        void Read(std::string name);\n        \n        // Helper reading function\n        void Read_CLNF(std::string clnf_location);\n        \n    private:\n        \n        // the speedup of RLMS using precalculated KDE responses (described in Saragih 2011 RLMS paper)\n        std::map<int, cv::Mat_<float> >\t\tkde_resp_precalc;\n        \n        // The model fitting: patch response computation and optimisation steps\n        bool Fit(const cv::Mat_<uchar>& intensity_image, const cv::Mat_<float>& depth_image, const std::vector<int>& window_sizes, const FaceModelParameters& parameters);\n        \n        // Mean shift computation that uses precalculated kernel density estimators (the one actually used)\n        void NonVectorisedMeanShift_precalc_kde(cv::Mat_<float>& out_mean_shifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<float> &dxs, const cv::Mat_<float> &dys, int resp_size, float a, int scale, int view_id, std::map<int, cv::Mat_<float> >& mean_shifts);\n        \n        // The actual model optimisation (update step), returns the model likelihood\n        double NU_RLMS(cv::Vec6d& final_global, cv::Mat_<double>& final_local, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Vec6d& initial_global, const cv::Mat_<double>& initial_local,\n                       const cv::Mat_<double>& base_shape, const cv::Matx22d& sim_img_to_ref, const cv::Matx22f& sim_ref_to_img, int resp_size, int view_idx, bool rigid, int scale, cv::Mat_<double>& landmark_lhoods, const FaceModelParameters& parameters);\n        \n        // Removing background image from the depth\n        bool RemoveBackground(cv::Mat_<float>& out_depth_image, const cv::Mat_<float>& depth_image);\n        \n        // Generating the weight matrix for the Weighted least squares\n        void GetWeightMatrix(cv::Mat_<float>& WeightMatrix, int scale, int view_id, const FaceModelParameters& parameters);\n        \n        //=======================================================\n        // Legacy functions that are not used at the moment\n        //=======================================================\n        \n        // Mean shift computation\t\n        void NonVectorisedMeanShift(cv::Mat_<double>& out_mean_shifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<double> &dxs, const cv::Mat_<double> &dys, int resp_size, double a, int scale, int view_id);\n        \n        // A vectorised version of mean shift (Not actually used)\n        void VectorisedMeanShift(cv::Mat_<double>& meanShifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<double> &iis, const cv::Mat_<double> &jjs, const cv::Mat_<double> &dxs, const cv::Mat_<double> &dys, const cv::Size patchSize, double sigma, int scale, int view_id);\n        \n    };\n    //===========================================================================\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/LandmarkDetectorParameters.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n//  Parameters of the CLNF, CLM-Z and CLM trackers\n#ifndef __LANDMARK_DETECTOR_PARAM_H\n#define __LANDMARK_DETECTOR_PARAM_H\n\n#include <vector>\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n    \n    struct FaceModelParameters\n    {\n        \n        // A number of RLMS or NU-RLMS iterations\n        int num_optimisation_iteration;\n        \n        // Should pose be limited to 180 degrees frontal\n        bool limit_pose;\n        \n        // Should face validation be done\n        bool validate_detections;\n        \n        // Landmark detection validator boundary for correct detection, the regressor output -1 (perfect alignment) 1 (bad alignment), \n        double validation_boundary;\n        \n        // Used when tracking is going well\n        std::vector<int> window_sizes_small;\n        \n        // Used when initialising or tracking fails\n        std::vector<int> window_sizes_init;\n        \n        // Used for the current frame\n        std::vector<int> window_sizes_current;\n        \n        // How big is the tracking template that helps with large motions\n        double face_template_scale;\t\n        bool use_face_template;\n        \n        // Where to load the model from\n        std::string model_location;\n        \n        // this is used for the smooting of response maps (KDE sigma)\n        double sigma;\n        \n        double reg_factor;\t// weight put to regularisation\n        double weight_factor; // factor for weighted least squares\n        \n        // should multiple views be considered during reinit\n        bool multi_view;\n        \n        // How often should face detection be used to attempt reinitialisation, every n frames (set to negative not to reinit)\n        int reinit_video_every;\n        \n        // Determining which face detector to use for (re)initialisation, HAAR is quicker but provides more false positives and is not goot for in-the-wild conditions\n        // Also HAAR detector can detect smaller faces while HOG SVM is only capable of detecting faces at least 70px across\n        enum FaceDetector{HAAR_DETECTOR, HOG_SVM_DETECTOR,SEETAFACE_DETECTOR};\n        \n        std::string face_detector_location;\n        FaceDetector curr_face_detector;\n        \n        \n        std::string seetaface_detector_location;\n        \n        // Should the results be visualised and reported to console\n        bool quiet_mode;\n        \n        // Should the model be refined hierarchically (if available)\n        bool refine_hierarchical;\n        \n        // Should the parameters be refined for different scales\n        bool refine_parameters;\n        \n        // Using the brand new and experimental gaze tracker\n        bool track_gaze;\n        \n        \n        float face_x_pos;\n        float face_y_pos;\n        float face_width;\n        float face_height;\n        \n        FaceModelParameters();\n        \n    public:\n        void init();\n    };\n    \n}\n\n#endif // __LANDMARK_DETECTOR_PARAM_H\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/LandmarkDetectorUtils.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n//  Header for all external CLNF/CLM-Z/CLM methods of interest to the user\n#ifndef __LANDMARK_DETECTOR_UTILS_h_\n#define __LANDMARK_DETECTOR_UTILS_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n#include \"LandmarkDetectorModel.h\"\n\n//seetaFace includes\n#include \"face_detection.h\"\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n    //===========================================================================\t\n    // Defining a set of useful utility functions to be used within CLNF\n    \n    \n    //=============================================================================================\n    // Helper functions for parsing the inputs\n    //=============================================================================================\n    void get_video_input_output_params(std::vector<std::string> &input_video_file, std::vector<std::string> &depth_dir,\n                                       std::vector<std::string> &output_files, std::vector<std::string> &output_video_files, bool& world_coordinates_pose, std::vector<std::string> &arguments);\n    \n    void get_camera_params(int &device, float &fx, float &fy, float &cx, float &cy, std::vector<std::string> &arguments);\n    \n    void get_image_input_output_params(std::vector<std::string> &input_image_files, std::vector<std::string> &input_depth_files, std::vector<std::string> &output_feature_files, std::vector<std::string> &output_pose_files, std::vector<std::string> &output_image_files,\n                                       std::vector<cv::Rect_<double>> &input_bounding_boxes, std::vector<std::string> &arguments);\n    \n    //===========================================================================\n    // Fast patch expert response computation (linear model across a ROI) using normalised cross-correlation\n    //===========================================================================\n    // This is a modified version of openCV code that allows for precomputed dfts of templates and for precomputed dfts of an image\n    // _img is the input img, _img_dft it's dft (optional), _integral_img the images integral image (optional), squared integral image (optional), \n    // templ is the template we are convolving with, templ_dfts it's dfts at varying windows sizes (optional),  _result - the output, method the type of convolution\n    void matchTemplate_m( const cv::Mat_<float>& input_img, cv::Mat_<double>& img_dft, cv::Mat& _integral_img, cv::Mat& _integral_img_sq, const cv::Mat_<float>&  templ, std::map<int, cv::Mat_<double> >& templ_dfts, cv::Mat_<float>& result, int method );\n    \n    //===========================================================================\n    // Point set and landmark manipulation functions\n    //===========================================================================\n    // Using Kabsch's algorithm for aligning shapes\n    //This assumes that align_from and align_to are already mean normalised\n    cv::Matx22d AlignShapesKabsch2D(const cv::Mat_<double>& align_from, const cv::Mat_<double>& align_to );\n    \n    //=============================================================================\n    // Basically Kabsch's algorithm but also allows the collection of points to be different in scale from each other\n    cv::Matx22d AlignShapesWithScale(cv::Mat_<double>& src, cv::Mat_<double> dst);\n    \n    //===========================================================================\n    // Visualisation functions\n    //===========================================================================\n    void Project(cv::Mat_<double>& dest, const cv::Mat_<double>& mesh, double fx, double fy, double cx, double cy);\n    void DrawBox(cv::Mat image, cv::Vec6d pose, cv::Scalar color, int thickness, float fx, float fy, float cx, float cy);\n    \n    // Drawing face bounding box\n    std::vector<std::pair<cv::Point, cv::Point>> CalculateBox(cv::Vec6d pose, float fx, float fy, float cx, float cy);\n    void DrawBox(std::vector<std::pair<cv::Point, cv::Point>> lines, cv::Mat image, cv::Scalar color, int thickness);\n    \n    std::vector<cv::Point2d> CalculateLandmarks(const cv::Mat_<double>& shape2D, cv::Mat_<int>& visibilities);\n    std::vector<cv::Point2d> CalculateLandmarks(CLNF& clnf_model);\n    void DrawLandmarks(cv::Mat img, std::vector<cv::Point> landmarks);\n    \n    void Draw(cv::Mat img, const cv::Mat_<double>& shape2D, const cv::Mat_<int>& visibilities);\n    void Draw(cv::Mat img, const cv::Mat_<double>& shape2D);\n    void Draw(cv::Mat img, const CLNF& clnf_model);\n    \n    \n    //===========================================================================\n    // Angle representation conversion helpers\n    //===========================================================================\n    cv::Matx33d Euler2RotationMatrix(const cv::Vec3d& eulerAngles);\n    \n    // Using the XYZ convention R = Rx * Ry * Rz, left-handed positive sign\n    cv::Vec3d RotationMatrix2Euler(const cv::Matx33d& rotation_matrix);\n    \n    cv::Vec3d Euler2AxisAngle(const cv::Vec3d& euler);\n    \n    cv::Vec3d AxisAngle2Euler(const cv::Vec3d& axis_angle);\n    \n    cv::Matx33d AxisAngle2RotationMatrix(const cv::Vec3d& axis_angle);\n    \n    cv::Vec3d RotationMatrix2AxisAngle(const cv::Matx33d& rotation_matrix);\n    \n    //============================================================================\n    // Face detection helpers\n    //============================================================================\n    \n    //Face detection using seetaFace\n    bool seetaDetectFace(std::vector< cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, seeta::FaceDetection *detector);\n    \n    \n    // Face detection using Haar cascade classifier\n    bool DetectFaces(std::vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity);\n    bool DetectFaces(std::vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, cv::CascadeClassifier& classifier);\n    // The preference point allows for disambiguation if multiple faces are present (pick the closest one), if it is not set the biggest face is chosen\n    bool DetectSingleFace(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity, cv::CascadeClassifier& classifier, const cv::Point preference = cv::Point(-1,-1));\n    \n    bool DetectSingleFaceSeetaFace(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity_image, seeta::FaceDetection *detector, cv::Point preference);\n    \n    // Face detection using HOG-SVM classifier\n    //\tbool DetectFacesHOG(vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, std::vector<double>& confidences);\n    //    bool DetectFacesHOG(vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, dlib::frontal_face_detector& classifier, std::vector<double>& confidences);\n    // The preference point allows for disambiguation if multiple faces are present (pick the closest one), if it is not set the biggest face is chosen\n    //    bool DetectSingleFaceHOG(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity, dlib::frontal_face_detector& classifier, double& confidence, const cv::Point preference = cv::Point(-1,-1));\n    \n    //============================================================================\n    // Matrix reading functionality\n    //============================================================================\n    \n    // Reading a matrix written in a binary format\n    void ReadMatBin(std::ifstream& stream, cv::Mat &output_mat);\n    \n    // Reading in a matrix from a stream\n    void ReadMat(std::ifstream& stream, cv::Mat& output_matrix);\n    \n    // Skipping comments (lines starting with # symbol)\n    void SkipComments(std::ifstream& stream);\n    \n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/PAW.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __PAW_h_\n#define __PAW_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\nnamespace LandmarkDetector\n{\n  //===========================================================================\n  /** \n      A Piece-wise Affine Warp\n\t  The ideas for this piece-wise affine triangular warping are taken from the\n\t  Active appearance models revisited by Iain Matthews and Simon Baker in IJCV 2004\n\t  This is used for both validation of landmark detection, and for avatar animation\n\n\t  The code is based on the CLM tracker by Jason Saragih et al.\n  */\t\n\nclass PAW{\npublic:    \n\t// Number of pixels after the warping to neutral shape\n    int     number_of_pixels; \n\n\t// Minimum x coordinate in destination\n    double  min_x;\n\n\t// minimum y coordinate in destination\n    double  min_y;\n\n\t// Destination points (landmarks to be warped to)\n\tcv::Mat_<double> destination_landmarks;\n\n\t// Destination points (landmarks to be warped from)\n\tcv::Mat_<double> source_landmarks;\n\n\t// Triangulation, each triangle is warped using an affine transform\n\tcv::Mat_<int> triangulation;\n\n\t// Triangle index, indicating which triangle each of destination pixels lies in\n\tcv::Mat_<int> triangle_id;\n\n\t// Indicating if the destination warped pixels is valid (lies within a face)\n\tcv::Mat_<uchar> pixel_mask;\n\n\t// A number of precomputed coefficients that are helpful for quick warping\n\t\n\t// affine coefficients for all triangles (see Matthews and Baker 2004)\n\t// 6 coefficients for each triangle (are computed from alpha and beta)\n\t// This is computed during each warp based on source landmarks\n\tcv::Mat_<double> coefficients;\n\n\t// matrix of (c,x,y) coeffs for alpha\n\tcv::Mat_<double> alpha;\n\n\t// matrix of (c,x,y) coeffs for alpha\n\tcv::Mat_<double> beta;\n\n\t// x-source of warped points\n\tcv::Mat_<float> map_x;\n\n\t// y-source of warped points\n\tcv::Mat_<float> map_y;\n\n\t// Default constructor\n    PAW(){;}\n\n\t// Construct a warp from a destination shape and triangulation\n\tPAW(const cv::Mat_<double>& destination_shape, const cv::Mat_<int>& triangulation);\n\n\t// The final optional argument allows for optimisation if the triangle indices from previous frame are known (for tracking in video)\n\tPAW(const cv::Mat_<double>& destination_shape, const cv::Mat_<int>& triangulation, double in_min_x, double in_min_y, double in_max_x, double in_max_y);\n\n\t// Copy constructor\n\tPAW(const PAW& other);\n\n\tvoid Read(std::ifstream &s);\n\n\t// The actual warping\n    void Warp(const cv::Mat& image_to_warp, cv::Mat& destination_image, const cv::Mat_<double>& landmarks_to_warp);\n\t\n\t// Compute coefficients needed for warping\n    void CalcCoeff();\n\n\t// Perform the actual warping\n    void WarpRegion(cv::Mat_<float>& map_x, cv::Mat_<float>& map_y);\n\n    inline int NumberOfLandmarks() const {return destination_landmarks.rows/2;} ;\n    inline int NumberOfTriangles() const {return triangulation.rows;} ;\n\n\t// The width and height of the warped image\n    inline int constWidth() const {return pixel_mask.cols;}\n    inline int Height() const {return pixel_mask.rows;}\n    \nprivate:\n\n\tint findTriangle(const cv::Point_<double>& point, const std::vector<std::vector<double>>& control_points, int guess = -1) const;\n\n  };\n  //===========================================================================\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/PDM.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __PDM_h_\n#define __PDM_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n#include \"LandmarkDetectorParameters.h\"\n\nnamespace LandmarkDetector\n{\n//===========================================================================\n// A linear 3D Point Distribution Model (constructed using Non-Rigid structure from motion or PCA)\n// Only describes the model but does not contain an instance of it (no local or global parameters are stored here)\n// Contains the utility functions to help manipulate the model\n\nclass PDM{\n\tpublic:    \n    \n\t\t// The 3D mean shape vector of the PDM [x1,..,xn,y1,...yn,z1,...,zn]\n\t\tcv::Mat_<double> mean_shape;\t\n  \n\t\t// Principal components or variation bases of the model, \n\t\tcv::Mat_<double> princ_comp;\t\n\n\t\t// Eigenvalues (variances) corresponding to the bases\n\t\tcv::Mat_<double> eigen_values;\t\n\n\t\tPDM(){;}\n\t\t\n\t\t// A copy constructor\n\t\tPDM(const PDM& other);\n\t\t\t\n        void Read(std::string location);\n\n\t\t// Number of vertices\n\t\tinline int NumberOfPoints() const {return mean_shape.rows/3;}\n\t\t\n\t\t// Listing the number of modes of variation\n\t\tinline int NumberOfModes() const {return princ_comp.cols;}\n\n\t\tvoid Clamp(cv::Mat_<float>& params_local, cv::Vec6d& params_global, const FaceModelParameters& params);\n\n\t\t// Compute shape in object space (3D)\n\t\tvoid CalcShape3D(cv::Mat_<double>& out_shape, const cv::Mat_<double>& params_local) const;\n\n\t\t// Compute shape in image space (2D)\n\t\tvoid CalcShape2D(cv::Mat_<double>& out_shape, const cv::Mat_<double>& params_local, const cv::Vec6d& params_global) const;\n    \n\t\t// provided the bounding box of a face and the local parameters (with optional rotation), generates the global parameters that can generate the face with the provided bounding box\n\t\tvoid CalcParams(cv::Vec6d& out_params_global, const cv::Rect_<double>& bounding_box, const cv::Mat_<double>& params_local, const cv::Vec3d rotation = cv::Vec3d(0.0));\n\n\t\t// Provided the landmark location compute global and local parameters best fitting it (can provide optional rotation for potentially better results)\n\t\tvoid CalcParams(cv::Vec6d& out_params_global, const cv::Mat_<double>& out_params_local, const cv::Mat_<double>& landmark_locations, const cv::Vec3d rotation = cv::Vec3d(0.0));\n\n\t\t// provided the model parameters, compute the bounding box of a face\n\t\tvoid CalcBoundingBox(cv::Rect& out_bounding_box, const cv::Vec6d& params_global, const cv::Mat_<double>& params_local);\n\n\t\t// Helpers for computing Jacobians, and Jacobians with the weight matrix\n\t\tvoid ComputeRigidJacobian(const cv::Mat_<float>& params_local, const cv::Vec6d& params_global, cv::Mat_<float> &Jacob, const cv::Mat_<float> W, cv::Mat_<float> &Jacob_t_w);\n\t\tvoid ComputeJacobian(const cv::Mat_<float>& params_local, const cv::Vec6d& params_global, cv::Mat_<float> &Jacobian, const cv::Mat_<float> W, cv::Mat_<float> &Jacob_t_w);\n\n\t\t// Given the current parameters, and the computed delta_p compute the updated parameters\n\t\tvoid UpdateModelParameters(const cv::Mat_<float>& delta_p, cv::Mat_<float>& params_local, cv::Vec6d& params_global);\n\n  };\n  //===========================================================================\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/Patch_experts.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __Patch_experts_h_\n#define __Patch_experts_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n\n#include \"SVR_patch_expert.h\"\n#include \"CCNF_patch_expert.h\"\n#include \"PDM.h\"\n\nnamespace LandmarkDetector\n{\n//===========================================================================\n/** \n    Combined class for all of the patch experts\n*/\nclass Patch_experts\n{\n\npublic:\n\n\t// The collection of SVR patch experts (for intensity/grayscale images), the experts are laid out scale->view->landmark\n    std::vector<std::vector<std::vector<Multi_SVR_patch_expert> > >\tsvr_expert_intensity;\n\t \n\t// The collection of SVR patch experts (for depth/range images), the experts are laid out scale->view->landmark\n    std::vector<std::vector<std::vector<Multi_SVR_patch_expert> > >\tsvr_expert_depth;\n\n\t// The collection of LNF (CCNF) patch experts (for intensity images), the experts are laid out scale->view->landmark\n    std::vector<std::vector<std::vector<CCNF_patch_expert> > >\t\t\tccnf_expert_intensity;\n\n\t// The node connectivity for CCNF experts, at different window sizes and corresponding to separate edge features\n    std::vector<std::vector<cv::Mat_<float> > >\t\t\t\t\tsigma_components;\n\n\t// The available scales for intensity patch experts\n    std::vector<double>\t\t\t\t\t\t\tpatch_scaling;\n\n\t// The available views for the patch experts at every scale (in radians)\n    std::vector<std::vector<cv::Vec3d> >               centers;\n\n\t// Landmark visibilities for each scale and view\n    std::vector<std::vector<cv::Mat_<int> > >          visibilities;\n\n\t// A default constructor\n\tPatch_experts(){;}\n\n\t// A copy constructor\n\tPatch_experts(const Patch_experts& other);\n\n\t// Returns the patch expert responses given a grayscale and an optional depth image.\n\t// Additionally returns the transform from the image coordinates to the response coordinates (and vice versa).\n\t// The computation also requires the current landmark locations to compute response around, the PDM corresponding to the desired model, and the parameters describing its instance\n\t// Also need to provide the size of the area of interest and the desired scale of analysis\n    void Response(std::vector<cv::Mat_<float> >& patch_expert_responses, cv::Matx22f& sim_ref_to_img, cv::Matx22d& sim_img_to_ref, const cv::Mat_<uchar>& grayscale_image, const cv::Mat_<float>& depth_image,\n\t\t\t\t\t\t\t const PDM& pdm, const cv::Vec6d& params_global, const cv::Mat_<double>& params_local, int window_size, int scale);\n\n\t// Getting the best view associated with the current orientation\n\tint GetViewIdx(const cv::Vec6d& params_global, int scale) const;\n\n\t// The number of views at a particular scale\n    inline int nViews(int scale = 0) const { return centers[scale].size(); }\n\n\t// Reading in all of the patch experts\n    void Read(std::vector<std::string> intensity_svr_expert_locations, std::vector<std::string> depth_svr_expert_locations, std::vector<std::string> intensity_ccnf_expert_locations);\n\n\n   \n\nprivate:\n    void Read_SVR_patch_experts(std::string expert_location, std::vector<cv::Vec3d>& centers, std::vector<cv::Mat_<int> >& visibility, std::vector<std::vector<Multi_SVR_patch_expert> >& patches, double& scale);\n    void Read_CCNF_patch_experts(std::string patchesFileLocation, std::vector<cv::Vec3d>& centers, std::vector<cv::Mat_<int> >& visibility, std::vector<std::vector<CCNF_patch_expert> >& patches, double& patchScaling);\n\t\n\n};\n \n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/SVR_patch_expert.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n\n#ifndef __SVR_PATCH_EXPERT_h_\n#define __SVR_PATCH_EXPERT_h_\n\n// system includes\n#include <map>\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\nnamespace LandmarkDetector\n{\n  //===========================================================================\n  /** \n      The classes describing the SVR patch experts\n  */\n\nclass SVR_patch_expert{\n\tpublic:\n\n\t\t// Type of data the patch expert operated on (0=raw, 1=grad)\n\t\tint     type;\t\t\t\t\t\n\n\t\t// Logistic regression slope\n\t\tdouble  scaling;\n\t\t\n\t\t// Logistic regression bias\n\t\tdouble  bias;\n\n\t\t// Support vector regression weights\n\t\tcv::Mat_<float> weights;\n\n\t\t// Discrete Fourier Transform of SVR weights, precalculated for speed (at different window sizes)\n\t\tstd::map<int, cv::Mat_<double> > weights_dfts;\n\n\t\t// Confidence of the current patch expert (used for NU_RLMS optimisation)\n\t\tdouble  confidence;\n\n\t\tSVR_patch_expert(){;}\n\t\t\n\t\t// A copy constructor\n\t\tSVR_patch_expert(const SVR_patch_expert& other);\n\n\t\t// Reading in the patch expert\n\t\tvoid Read(std::ifstream &stream);\n\n\t\t// The actual response computation from intensity or depth (for CLM-Z)\n\t\tvoid Response(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\t\tvoid ResponseDepth(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\n};\n//===========================================================================\n/**\n    A Multi-patch Expert that can include different patch types. Raw pixel values or image gradients\n*/\nclass Multi_SVR_patch_expert{\n\tpublic:\n\t\t\n\t\t// Width and height of the patch expert support area\n\t\tint width;\n\t\tint height;\t\t\t\t\t\t\n\n\t\t// Vector of all of the patch experts (different modalities) for this particular Multi patch expert\n\t\tstd::vector<SVR_patch_expert> svr_patch_experts;\t\n\n\t\t// Default constructor\n\t\tMulti_SVR_patch_expert(){;}\n\t\n\t\t// Copy constructor\t\t\t\t\n\t\tMulti_SVR_patch_expert(const Multi_SVR_patch_expert& other);\n\n\t\tvoid Read(std::ifstream &stream);\n\n\t\t// actual response computation from intensity of depth (for CLM-Z)\n\t\tvoid Response(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\t\tvoid ResponseDepth(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\n};\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/classifier/lab_boosted_classifier.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_CLASSIFIER_LAB_BOOSTED_CLASSIFIER_H_\n#define SEETA_FD_CLASSIFIER_LAB_BOOSTED_CLASSIFIER_H_\n\n#include <algorithm>\n#include <cstdint>\n#include <memory>\n#include <vector>\n\n#include \"classifier.h\"\n#include \"feat/lab_feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\n/**\n * @class LABBaseClassifier\n * @brief Base classifier using LAB feature.\n */\nclass LABBaseClassifier {\n public:\n  LABBaseClassifier()\n    : num_bin_(255), thresh_(0.0f) {\n    weights_.resize(num_bin_ + 1);\n  }\n\n  ~LABBaseClassifier() {}\n\n  void SetWeights(const float* weights, int32_t num_bin);\n\n  inline void SetThreshold(float thresh) { thresh_ = thresh; }\n\n  inline int32_t num_bin() const { return num_bin_; }\n  inline float weights(int32_t val) const { return weights_[val]; }\n  inline float threshold() const { return thresh_; }\n\n private:\n  int32_t num_bin_;\n\n  std::vector<float> weights_;\n  float thresh_;\n};\n\n/**\n * @class LABBoostedClassifier\n * @Brief A strong classifier constructed from base classifiers using LAB features.\n */\nclass LABBoostedClassifier : public Classifier {\n public:\n  LABBoostedClassifier() : use_std_dev_(true) {}\n  virtual ~LABBoostedClassifier() {}\n\n  virtual bool Classify(float* score = nullptr, float* outputs = nullptr);\n\n  inline virtual seeta::fd::ClassifierType type() {\n    return seeta::fd::ClassifierType::LAB_Boosted_Classifier;\n  }\n\n  void AddFeature(int32_t x, int32_t y);\n  void AddBaseClassifier(const float* weights, int32_t num_bin, float thresh);\n\n  inline virtual void SetFeatureMap(seeta::fd::FeatureMap* featMap) {\n    feat_map_ = dynamic_cast<seeta::fd::LABFeatureMap*>(featMap);\n  }\n\n  inline void SetUseStdDev(bool useStdDev) { use_std_dev_ = useStdDev; }\n\n private:\n  static const int32_t kFeatGroupSize = 10;\n  const float kStdDevThresh = 10.0f;\n\n  std::vector<seeta::fd::LABFeature> feat_;\n  std::vector<std::shared_ptr<seeta::fd::LABBaseClassifier> > base_classifiers_;\n  seeta::fd::LABFeatureMap* feat_map_;\n  bool use_std_dev_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_CLASSIFIER_LAB_BOOSTED_CLASSIFIER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/classifier/mlp.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_CLASSIFIER_MLP_H_\n#define SEETA_FD_CLASSIFIER_MLP_H_\n\n#include <cmath>\n#include <cstdint>\n#include <memory>\n#include <algorithm>\n#include <vector>\n\n#include \"util/math_func.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass MLPLayer {\n public:\n  explicit MLPLayer(int32_t act_func_type = 1)\n      : input_dim_(0), output_dim_(0), act_func_type_(act_func_type) {}\n  ~MLPLayer() {}\n\n  void Compute(const float* input, float* output);\n\n  inline int32_t GetInputDim() const { return input_dim_; }\n  inline int32_t GetOutputDim() const { return output_dim_; }\n\n  inline void SetSize(int32_t inputDim, int32_t outputDim) {\n    if (inputDim <= 0 || outputDim <= 0) {\n      return;  // @todo handle the errors!!!\n    }\n    input_dim_ = inputDim;\n    output_dim_ = outputDim;\n    weights_.resize(inputDim * outputDim);\n    bias_.resize(outputDim);\n  }\n\n  inline void SetWeights(const float* weights, int32_t len) {\n    if (weights == nullptr || len != input_dim_ * output_dim_) {\n      return;  // @todo handle the errors!!!\n    }\n    std::copy(weights, weights + input_dim_ * output_dim_, weights_.begin());\n  }\n\n  inline void SetBias(const float* bias, int32_t len) {\n    if (bias == nullptr || len != output_dim_) {\n      return;  // @todo handle the errors!!!\n    }\n    std::copy(bias, bias + output_dim_, bias_.begin());\n  }\n\n private:\n  inline float Sigmoid(float x) {\n    return 1.0f / (1.0f + std::exp(x));\n  }\n\n  inline float ReLU(float x) {\n    return (x > 0.0f ? x : 0.0f);\n  }\n\n private:\n  int32_t act_func_type_;\n  int32_t input_dim_;\n  int32_t output_dim_;\n  std::vector<float> weights_;\n  std::vector<float> bias_;\n};\n\n\nclass MLP {\n public:\n  MLP() {}\n  ~MLP() {}\n\n  void Compute(const float* input, float* output);\n\n  inline int32_t GetInputDim() const {\n    return layers_[0]->GetInputDim();\n  }\n\n  inline int32_t GetOutputDim() const {\n    return layers_.back()->GetOutputDim();\n  }\n\n  inline int32_t GetLayerNum() const {\n    return static_cast<int32_t>(layers_.size());\n  }\n\n  void AddLayer(int32_t inputDim, int32_t outputDim, const float* weights,\n      const float* bias, bool is_output = false);\n\n private:\n  std::vector<std::shared_ptr<seeta::fd::MLPLayer> > layers_;\n  std::vector<float> layer_buf_[2];\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_CLASSIFIER_MLP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/classifier/surf_mlp.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_CLASSIFIER_SURF_MLP_H_\n#define SEETA_FD_CLASSIFIER_SURF_MLP_H_\n\n#include <memory>\n#include <vector>\n\n#include \"classifier.h\"\n#include \"classifier/mlp.h\"\n#include \"feat/surf_feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass SURFMLP : public Classifier {\n public:\n  SURFMLP() : Classifier(), model_(new seeta::fd::MLP()) {}\n  virtual ~SURFMLP() {}\n\n  virtual bool Classify(float* score = nullptr, float* outputs = nullptr);\n\n  inline virtual void SetFeatureMap(seeta::fd::FeatureMap* feat_map) {\n    feat_map_ = dynamic_cast<seeta::fd::SURFFeatureMap*>(feat_map);\n  }\n\n  inline virtual seeta::fd::ClassifierType type() {\n    return seeta::fd::ClassifierType::SURF_MLP;\n  }\n\n  void AddFeatureByID(int32_t feat_id);\n  void AddLayer(int32_t input_dim, int32_t output_dim, const float* weights,\n    const float* bias, bool is_output = false);\n\n  inline void SetThreshold(float thresh) { thresh_ = thresh; }\n\n private:\n  std::vector<int32_t> feat_id_;\n  std::vector<float> input_buf_;\n  std::vector<float> output_buf_;\n\n  std::shared_ptr<seeta::fd::MLP> model_;\n  float thresh_;\n  seeta::fd::SURFFeatureMap* feat_map_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_CLASSIFIER_SURF_MLP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/classifier.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_CLASSIFIER_H_\n#define SEETA_FD_CLASSIFIER_H_\n\n#include \"common.h\"\n#include \"feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\nenum ClassifierType {\n    LAB_Boosted_Classifier,\n    SURF_MLP\n};\n\nclass Classifier {\n public:\n  Classifier() {}\n  virtual ~Classifier() {}\n\n  virtual void SetFeatureMap(seeta::fd::FeatureMap* feat_map) = 0;\n  virtual bool Classify(float* score = nullptr, float* outputs = nullptr) = 0;\n  \n  virtual seeta::fd::ClassifierType type() = 0;\n\n  DISABLE_COPY_AND_ASSIGN(Classifier);\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_CLASSIFIER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/common.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_COMMON_H_\n#define SEETA_COMMON_H_\n\n#include <cstdint>\n\n#if defined _WIN32\n#ifdef SEETA_EXPORTS\n#define SEETA_API __declspec(dllexport)\n#else\n#define SEETA_API __declspec(dllimport)\n#endif\n\n#else\n#define SEETA_API\n#endif\n\n#define DISABLE_COPY_AND_ASSIGN(classname) \\\n private: \\\n  classname(const classname&); \\\n  classname& operator=(const classname&)\n\n#ifdef USE_OPENMP\n#include <omp.h>\n\n#define SEETA_NUM_THREADS 4\n#endif\n\nnamespace seeta {\n\ntypedef struct ImageData {\n  ImageData() {\n    data = nullptr;\n    width = 0;\n    height = 0;\n    num_channels = 0;\n  }\n\n  ImageData(int32_t img_width, int32_t img_height,\n      int32_t img_num_channels = 1) {\n    data = nullptr;\n    width = img_width;\n    height = img_height;\n    num_channels = img_num_channels;\n  }\n\n  uint8_t* data;\n  int32_t width;\n  int32_t height;\n  int32_t num_channels;\n} ImageData;\n\ntypedef struct Rect {\n  int32_t x;\n  int32_t y;\n  int32_t width;\n  int32_t height;\n} Rect;\n\ntypedef struct FaceInfo {\n  seeta::Rect bbox;\n\n  double roll;\n  double pitch;\n  double yaw;\n\n  double score; /**< Larger score should mean higher confidence. */\n} FaceInfo;\n\n  typedef struct {\n    double x;\n    double y;\n  } FacialLandmark;\n}  // namespace seeta\n\n#endif  // SEETA_COMMON_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/detector.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_DETECTOR_H_\n#define SEETA_FD_DETECTOR_H_\n\n#include <cstdint>\n#include <string>\n#include <vector>\n\n#include \"common.h\"\n#include \"util/image_pyramid.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass Detector {\n public:\n  Detector() {}\n  virtual ~Detector() {}\n\n  virtual bool LoadModel(const std::string & model_path) = 0;\n  virtual std::vector<seeta::FaceInfo> Detect(seeta::fd::ImagePyramid* img_pyramid) = 0;\n\n  virtual void SetWindowSize(int32_t size) {}\n  virtual void SetSlideWindowStep(int32_t step_x, int32_t step_y) {}\n\n  DISABLE_COPY_AND_ASSIGN(Detector);\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_DETECTOR_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/face_detection.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FACE_DETECTION_H_\n#define SEETA_FACE_DETECTION_H_\n\n#include <cstdint>\n#include <vector>\n\n#include \"common.h\"\n\nnamespace seeta {\n\nclass FaceDetection {\n public:\n  SEETA_API explicit FaceDetection(const char* model_path);\n  SEETA_API ~FaceDetection();\n\n  /**\n   * @brief Detect faces on input image.\n   *\n   * (1) The input image should be gray-scale, i.e. `num_channels` set to 1.\n   * (2) Currently this function does not give the Euler angles, which are\n   *     left with invalid values.\n   */\n  SEETA_API std::vector<seeta::FaceInfo> Detect(const seeta::ImageData & img);\n\n  /**\n   * @brief Set the minimum size of faces to detect.\n   *\n   * The minimum size is constrained as no smaller than 20. Invalid values will\n   * be ignored.\n   */\n  SEETA_API void SetMinFaceSize(int32_t size);\n\n  /** \n   * @brief Set the maximum size of faces to detect.\n   * \n   * The maximum face size actually used is computed as the minimum among: user\n   * specified size, image width, image height.\n   */\n  SEETA_API void SetMaxFaceSize(int32_t size);\n\n  /**\n   * @brief Set the factor between adjacent scales of image pyramid.\n   *\n   * The value of the factor lies in (0, 1). For example, when it is set as 0.5,\n   * an input image of size w x h will be resized to 0.5w x 0.5h, 0.25w x 0.25h,\n   * 0.125w x 0.125h, etc. Invalid values will be ignored.\n   */\n  SEETA_API void SetImagePyramidScaleFactor(float factor);\n\n  /**\n   * @brief Set the sliding window step in horizontal and vertical directions.\n   * \n   * The steps should take positive values, and invalid ones will be ignored.\n   * Usually a step of 4 is a reasonable choice.\n   */\n  SEETA_API void SetWindowStep(int32_t step_x, int32_t step_y);\n\n  /**\n   * @brief Set the score thresh of detected faces.\n   *\n   * Detections with scores smaller than the threshold will not be returned.\n   * Typical threshold values include 0.95, 2.8, 4.5. One can adjust the\n   * threshold based on his or her own test set.\n   */\n  SEETA_API void SetScoreThresh(float thresh);\n\n  DISABLE_COPY_AND_ASSIGN(FaceDetection);\n\n private:\n  class Impl;\n  Impl* impl_;\n};\n\n}  // namespace seeta\n\n#endif  // SEETA_FACE_DETECTION_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/feat/lab_feature_map.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_FEAT_LAB_FEATURE_MAP_H_\n#define SEETA_FD_FEAT_LAB_FEATURE_MAP_H_\n\n#include <vector>\n\n#include \"feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\n/** @struct LABFeature\n *  @brief Locally Assembled Binary (LAB) feature.\n *\n *  It is parameterized by the coordinates of top left corner.\n */\ntypedef struct LABFeature {\n  int32_t x;\n  int32_t y;\n} LABFeature;\n\nclass LABFeatureMap : public seeta::fd::FeatureMap {\n public:\n  LABFeatureMap() : rect_width_(3), rect_height_(3), num_rect_(3) {}\n  virtual ~LABFeatureMap() {}\n\n  virtual void Compute(const uint8_t* input, int32_t width, int32_t height);\n\n  inline uint8_t GetFeatureVal(int32_t offset_x, int32_t offset_y) const {\n    return feat_map_[(roi_.y + offset_y) * width_ + roi_.x + offset_x];\n  }\n\n  float GetStdDev() const;\n\n private:\n  void Reshape(int32_t width, int32_t height);\n  void ComputeIntegralImages(const uint8_t* input);\n  void ComputeRectSum();\n  void ComputeFeatureMap();\n\n  template<typename Int32Type>\n  inline void Integral(Int32Type* data) {\n    const Int32Type* src = data;\n    Int32Type* dest = data;\n    const Int32Type* dest_above = dest;\n\n    *dest = *(src++);\n    for (int32_t c = 1; c < width_; c++, src++, dest++)\n      *(dest + 1) = (*dest) + (*src);\n    dest++;\n    for (int32_t r = 1; r < height_; r++) {\n      for (int32_t c = 0, s = 0; c < width_; c++, src++, dest++, dest_above++) {\n        s += (*src);\n        *dest = *dest_above + s;\n      }\n    }\n  }\n\n  const int32_t rect_width_;\n  const int32_t rect_height_;\n  const int32_t num_rect_;\n\n  std::vector<uint8_t> feat_map_;\n  std::vector<int32_t> rect_sum_;\n  std::vector<int32_t> int_img_;\n  std::vector<uint32_t> square_int_img_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_FEAT_LAB_FEATURE_MAP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/feat/surf_feature_map.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_FEAT_SURF_FEATURE_MAP_H_\n#define SEETA_FD_FEAT_SURF_FEATURE_MAP_H_\n\n#include <cstdint>\n#include <cstring>\n#include <vector>\n\n#include \"common.h\"\n#include \"feature_map.h\"\n#include \"util/math_func.h\"\n\nnamespace seeta {\nnamespace fd {\n\ntypedef struct SURFFeature {\n  seeta::Rect patch;\n  int32_t num_cell_per_row;\n  int32_t num_cell_per_col;\n} SURFFeature;\n\nclass SURFFeaturePool {\n public:\n  SURFFeaturePool()\n      : sample_width_(40), sample_height_(40),\n        patch_move_step_x_(16), patch_move_step_y_(16), patch_size_inc_step_(1),\n        patch_min_width_(16), patch_min_height_(16) {}\n\n  ~SURFFeaturePool() {}\n\n  void Create();\n  void AddPatchFormat(int32_t width, int32_t height, int32_t num_cell_per_row,\n      int32_t num_cell_per_col);\n\n  inline bool empty() const { return pool_.empty(); }\n  inline std::size_t size() const { return pool_.size(); }\n\n  inline std::vector<SURFFeature>::const_iterator begin() const {\n    return pool_.begin();\n  }\n\n  inline std::vector<SURFFeature>::const_iterator end() const {\n    return pool_.end();\n  }\n\n  inline const SURFFeature & operator[](std::size_t idx) const {\n    return pool_[idx];\n  }\n\n private:\n  void AddAllFeaturesToPool(int32_t width, int32_t height,\n      int32_t num_cell_per_row, int32_t num_cell_per_col);\n\n  typedef struct SURFPatchFormat {\n    /**< aspect ratio, s.t. GCD(width, height) = 1 */\n    int32_t width;\n    int32_t height;\n\n    /**< cell partition */\n    int32_t num_cell_per_row;\n    int32_t num_cell_per_col;\n  } SURFPatchFormat;\n\n  int32_t sample_width_;\n  int32_t sample_height_;\n  int32_t patch_move_step_x_;\n  int32_t patch_move_step_y_;\n  int32_t patch_size_inc_step_; /**< incremental step of patch width and */\n                                /**< height when build feature pool      */\n  int32_t patch_min_width_;\n  int32_t patch_min_height_;\n\n  std::vector<SURFFeature> pool_;\n  std::vector<SURFPatchFormat> format_;\n};\n\nclass SURFFeatureMap : public FeatureMap {\n public:\n  SURFFeatureMap() : buf_valid_reset_(false) { InitFeaturePool(); }\n  virtual ~SURFFeatureMap() {}\n\n  virtual void Compute(const uint8_t* input, int32_t width, int32_t height);\n\n  inline virtual void SetROI(const seeta::Rect & roi) {\n    roi_ = roi;\n    if (buf_valid_reset_) {\n      std::memset(buf_valid_.data(), 0, buf_valid_.size() * sizeof(int32_t));\n      buf_valid_reset_ = false;\n    }\n  }\n\n  inline int32_t GetFeatureVectorDim(int32_t feat_id) const {\n    return (feat_pool_[feat_id].num_cell_per_col *\n      feat_pool_[feat_id].num_cell_per_row * kNumIntChannel);\n  }\n\n  void GetFeatureVector(int32_t featID, float* featVec);\n\n private:\n  void InitFeaturePool();\n  void Reshape(int32_t width, int32_t height);\n\n  void ComputeGradientImages(const uint8_t* input);\n  void ComputeGradX(const int32_t* input);\n  void ComputeGradY(const int32_t* input);\n  void ComputeIntegralImages();\n  void Integral();\n  void MaskIntegralChannel();\n\n  inline void FillIntegralChannel(const int32_t* src, int32_t ch) {\n    int32_t* dest = int_img_.data() + ch;\n    int32_t len = width_ * height_;\n    for (int32_t i = 0; i < len; i++) {\n      *dest = *src;\n      *(dest + 2) = *src;\n      dest += kNumIntChannel;\n      src++;\n    }\n  }\n\n  void ComputeFeatureVector(const SURFFeature & feat, int32_t* feat_vec);\n  void NormalizeFeatureVectorL2(const int32_t* feat_vec, float* feat_vec_normed,\n    int32_t len) const;\n\n  /**\n   * Number of channels should be divisible by 4.\n   */\n  void VectorCumAdd(int32_t* x, int32_t len, int32_t num_channel);\n\n  static const int32_t kNumIntChannel = 8;\n\n  bool buf_valid_reset_;\n\n  std::vector<int32_t> grad_x_;\n  std::vector<int32_t> grad_y_;\n  std::vector<int32_t> int_img_;\n  std::vector<int32_t> img_buf_;\n  std::vector<std::vector<int32_t> > feat_vec_buf_;\n  std::vector<std::vector<float> > feat_vec_normed_buf_;\n  std::vector<int32_t> buf_valid_;\n\n  seeta::fd::SURFFeaturePool feat_pool_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_FEAT_SURF_FEATURE_MAP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/feature_map.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_FEATURE_MAP_H_\n#define SEETA_FD_FEATURE_MAP_H_\n\n#include \"common.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass FeatureMap {\n public:\n  FeatureMap()\n      : width_(0), height_(0) {\n    roi_.x = 0;\n    roi_.y = 0;\n    roi_.width = 0;\n    roi_.height = 0;\n  }\n\n  virtual ~FeatureMap() {}\n\n  virtual void Compute(const uint8_t* input, int32_t width, int32_t height) = 0;\n\n  inline virtual void SetROI(const seeta::Rect & roi) {\n    roi_ = roi;\n  }\n\n protected:\n  int32_t width_;\n  int32_t height_;\n\n  seeta::Rect roi_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_FEATURE_MAP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/fust.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_FUST_H_\n#define SEETA_FD_FUST_H_\n\n#include <algorithm>\n#include <fstream>\n#include <map>\n#include <memory>\n#include <string>\n#include <vector>\n\n#include \"classifier.h\"\n#include \"detector.h\"\n#include \"feature_map.h\"\n#include \"model_reader.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass FuStDetector : public Detector {\n public:\n  FuStDetector()\n      : wnd_size_(40), slide_wnd_step_x_(4), slide_wnd_step_y_(4),\n        num_hierarchy_(0) {\n    wnd_data_buf_.resize(wnd_size_ * wnd_size_);\n    wnd_data_.resize(wnd_size_ * wnd_size_);\n  }\n\n  ~FuStDetector() {}\n\n  virtual bool LoadModel(const std::string & model_path);\n  virtual std::vector<seeta::FaceInfo> Detect(seeta::fd::ImagePyramid* img_pyramid);\n\n  inline virtual void SetWindowSize(int32_t size) {\n    if (size >= 20)\n      wnd_size_ = size;\n  }\n\n  inline virtual void SetSlideWindowStep(int32_t step_x, int32_t step_y) {\n    if (step_x > 0)\n      slide_wnd_step_x_ = step_x;\n    if (step_y > 0)\n      slide_wnd_step_y_ = step_y;\n  }\n\n private:\n  std::shared_ptr<seeta::fd::ModelReader> CreateModelReader(seeta::fd::ClassifierType type);\n  std::shared_ptr<seeta::fd::Classifier> CreateClassifier(seeta::fd::ClassifierType type);\n  std::shared_ptr<seeta::fd::FeatureMap> CreateFeatureMap(seeta::fd::ClassifierType type);\n\n  void GetWindowData(const seeta::ImageData & img, const seeta::Rect & wnd);\n\n  int32_t wnd_size_;\n  int32_t slide_wnd_step_x_;\n  int32_t slide_wnd_step_y_;\n\n  int32_t num_hierarchy_;\n  std::vector<int32_t> hierarchy_size_;\n  std::vector<int32_t> num_stage_;\n  std::vector<std::vector<int32_t> > wnd_src_id_;\n\n  std::vector<uint8_t> wnd_data_buf_;\n  std::vector<uint8_t> wnd_data_;\n\n  std::vector<std::shared_ptr<seeta::fd::Classifier> > model_;\n  std::vector<std::shared_ptr<seeta::fd::FeatureMap> > feat_map_;\n  std::map<seeta::fd::ClassifierType, int32_t> cls2feat_idx_;\n\n  DISABLE_COPY_AND_ASSIGN(FuStDetector);\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_FUST_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/io/lab_boost_model_reader.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_IO_LAB_BOOST_MODEL_READER_H_\n#define SEETA_FD_IO_LAB_BOOST_MODEL_READER_H_\n\n#include <istream>\n#include <vector>\n\n#include \"model_reader.h\"\n#include \"classifier/lab_boosted_classifier.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass LABBoostModelReader : public ModelReader {\n public:\n  LABBoostModelReader() : ModelReader() {}\n  virtual ~LABBoostModelReader() {}\n\n  virtual bool Read(std::istream* input, seeta::fd::Classifier* model);\n\n private:\n  bool ReadFeatureParam(std::istream* input,\n    seeta::fd::LABBoostedClassifier* model);\n  bool ReadBaseClassifierParam(std::istream* input,\n    seeta::fd::LABBoostedClassifier* model);\n\n  int32_t num_bin_;\n  int32_t num_base_classifer_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_IO_LAB_BOOST_MODEL_READER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/io/surf_mlp_model_reader.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_IO_SURF_MLP_MODEL_READER_H_\n#define SEETA_FD_IO_SURF_MLP_MODEL_READER_H_\n\n#include <iosfwd>\n#include <vector>\n\n#include \"model_reader.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass SURFMLPModelReader : public ModelReader {\n public:\n  SURFMLPModelReader() {}\n  virtual ~SURFMLPModelReader() {}\n\n  virtual bool Read(std::istream* input, seeta::fd::Classifier* model);\n\n private:\n  std::vector<int32_t> feat_id_buf_;\n  std::vector<float> weights_buf_;\n  std::vector<float> bias_buf_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_IO_SURF_MLP_MODEL_READER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/model_reader.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_MODEL_READER_H_\n#define SEETA_FD_MODEL_READER_H_\n\n#include <iosfwd>\n\n#include \"classifier.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass ModelReader {\n public:\n  ModelReader() {}\n  virtual ~ModelReader() {}\n\n  virtual bool Read(std::istream* input, seeta::fd::Classifier* model) = 0;\n\n  DISABLE_COPY_AND_ASSIGN(ModelReader);\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_MODEL_READER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/stdafx.h",
    "content": "﻿// Precompiled headers stuff\n\n#ifndef __STDAFX_h_\n#define __STDAFX_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n#include <opencv2/objdetect.hpp>\n#include <opencv2/calib3d.hpp>\n#include <opencv2/imgcodecs.hpp>\n#include <opencv2/videoio/videoio.hpp>  // Video write\n#include <opencv2/videoio/videoio_c.h>  // Video write\n#include <opencv2/highgui/highgui.hpp>\n\n// IplImage stuff\n#include <opencv2/core/core_c.h>\n#include <opencv2/imgproc/imgproc_c.h>\n\n// C++ stuff\n#include <stdio.h>\n\n#include <fstream>\n#include <iostream>\n#include <sstream>\n\n#include <vector>\n#include <map>\n\n#define _USE_MATH_DEFINES\n#include <cmath>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/util/image_pyramid.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_UTIL_IMAGE_PYRAMID_H_\n#define SEETA_FD_UTIL_IMAGE_PYRAMID_H_\n\n#include <cstdint>\n#include <string>\n#include <cstring>\n\n#include \"common.h\"\n\nnamespace seeta {\nnamespace fd {\n\nstatic void ResizeImage(const seeta::ImageData & src, seeta::ImageData* dest) {\n  int32_t src_width = src.width;\n  int32_t src_height = src.height;\n  int32_t dest_width = dest->width;\n  int32_t dest_height = dest->height;\n  if (src_width == dest_width && src_height == dest_height) {\n    std::memcpy(dest->data, src.data, src_width * src_height * sizeof(uint8_t));\n    return;\n  }\n\n  double lf_x_scl = static_cast<double>(src_width) / dest_width;\n  double lf_y_Scl = static_cast<double>(src_height) / dest_height;\n  const uint8_t* src_data = src.data;\n  uint8_t* dest_data = dest->data;\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t y = 0; y < dest_height; y++) {\n      for (int32_t x = 0; x < dest_width; x++) {\n        double lf_x_s = lf_x_scl * x;\n        double lf_y_s = lf_y_Scl * y;\n\n        int32_t n_x_s = static_cast<int>(lf_x_s);\n        n_x_s = (n_x_s <= (src_width - 2) ? n_x_s : (src_width - 2));\n        int32_t n_y_s = static_cast<int>(lf_y_s);\n        n_y_s = (n_y_s <= (src_height - 2) ? n_y_s : (src_height - 2));\n\n        double lf_weight_x = lf_x_s - n_x_s;\n        double lf_weight_y = lf_y_s - n_y_s;\n\n        double dest_val = (1 - lf_weight_y) * ((1 - lf_weight_x) *\n          src_data[n_y_s * src_width + n_x_s] +\n          lf_weight_x * src_data[n_y_s * src_width + n_x_s + 1]) +\n          lf_weight_y * ((1 - lf_weight_x) * src_data[(n_y_s + 1) * src_width + n_x_s] +\n          lf_weight_x * src_data[(n_y_s + 1) * src_width + n_x_s + 1]);\n\n        dest_data[y * dest_width + x] = static_cast<uint8_t>(dest_val);\n      }\n    }\n  }\n}\n\nclass ImagePyramid {\n public:\n  ImagePyramid()\n      : max_scale_(1.0f), min_scale_(1.0f),\n        scale_factor_(1.0f), scale_step_(0.8f),\n        width1x_(0), height1x_(0),\n        width_scaled_(0), height_scaled_(0),\n        buf_img_width_(2), buf_img_height_(2),\n        buf_scaled_width_(2), buf_scaled_height_(2) {\n    buf_img_ = new uint8_t[buf_img_width_ * buf_img_height_];\n    buf_img_scaled_ = new uint8_t[buf_scaled_width_ * buf_scaled_height_];\n  }\n\n  ~ImagePyramid() {\n    delete[] buf_img_;\n    buf_img_ = nullptr;\n\n    buf_img_width_ = 0;\n    buf_img_height_ = 0;\n\n    delete[] buf_img_scaled_;\n    buf_img_scaled_ = nullptr;\n\n    buf_scaled_width_ = 0;\n    buf_scaled_height_ = 0;\n\n    img_scaled_.data = nullptr;\n    img_scaled_.width = 0;\n    img_scaled_.height = 0;\n  }\n\n  inline void SetScaleStep(float step) {\n    if (step > 0.0f && step <= 1.0f)\n      scale_step_ = step;\n  }\n\n  inline void SetMinScale(float min_scale) {\n    min_scale_ = min_scale;\n  }\n\n  inline void SetMaxScale(float max_scale) {\n    max_scale_ = max_scale;\n    scale_factor_ = max_scale;\n    UpdateBufScaled();\n  }\n\n  void SetImage1x(const uint8_t* img_data, int32_t width, int32_t height);\n\n  inline float min_scale() const { return min_scale_; }\n  inline float max_scale() const { return max_scale_; }\n\n  inline seeta::ImageData image1x() {\n    seeta::ImageData img(width1x_, height1x_, 1);\n    img.data = buf_img_;\n    return img;\n  }\n\n  const seeta::ImageData* GetNextScaleImage(float* scale_factor = nullptr);\n\n private:\n  void UpdateBufScaled();\n\n  float max_scale_;\n  float min_scale_;\n\n  float scale_factor_;\n  float scale_step_;\n\n  int32_t width1x_;\n  int32_t height1x_;\n\n  int32_t width_scaled_;\n  int32_t height_scaled_;\n\n  uint8_t* buf_img_;\n  int32_t buf_img_width_;\n  int32_t buf_img_height_;\n\n  uint8_t* buf_img_scaled_;\n  int32_t buf_scaled_width_;\n  int32_t buf_scaled_height_;\n\n  seeta::ImageData img_scaled_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_UTIL_IMAGE_PYRAMID_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/util/math_func.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_UTIL_MATH_FUNC_H_\n#define SEETA_FD_UTIL_MATH_FUNC_H_\n\n#ifdef USE_SSE\n#include <immintrin.h>\n#endif\n\n#include <cstdint>\n\nnamespace seeta {\nnamespace fd {\n\nclass MathFunction {\n public:\n  static inline void UInt8ToInt32(const uint8_t* src, int32_t* dest,\n      int32_t len) {\n    for (int32_t i = 0; i < len; i++)\n      *(dest++) = static_cast<int32_t>(*(src++));\n  }\n\n  static inline void VectorAdd(const int32_t* x, const int32_t* y, int32_t* z,\n      int32_t len) {\n    int32_t i;\n#ifdef USE_SSE\n    __m128i x1;\n    __m128i y1;\n    const __m128i* x2 = reinterpret_cast<const __m128i*>(x);\n    const __m128i* y2 = reinterpret_cast<const __m128i*>(y);\n    __m128i* z2 = reinterpret_cast<__m128i*>(z);\n\n    for (i = 0; i < len - 4; i += 4) {\n      x1 = _mm_loadu_si128(x2++);\n      y1 = _mm_loadu_si128(y2++);\n      _mm_storeu_si128(z2++, _mm_add_epi32(x1, y1));\n    }\n    for (; i < len; i++)\n      *(z + i) = (*(x + i)) + (*(y + i));\n#else\n    for (i = 0; i < len; i++)\n      *(z + i) = (*(x + i)) + (*(y + i));\n#endif\n  }\n\n  static inline void VectorSub(const int32_t* x, const int32_t* y, int32_t* z,\n      int32_t len) {\n    int32_t i;\n#ifdef USE_SSE\n    __m128i x1;\n    __m128i y1;\n    const __m128i* x2 = reinterpret_cast<const __m128i*>(x);\n    const __m128i* y2 = reinterpret_cast<const __m128i*>(y);\n    __m128i* z2 = reinterpret_cast<__m128i*>(z);\n\n    for (i = 0; i < len - 4; i += 4) {\n      x1 = _mm_loadu_si128(x2++);\n      y1 = _mm_loadu_si128(y2++);\n\n      _mm_storeu_si128(z2++, _mm_sub_epi32(x1, y1));\n    }\n    for (; i < len; i++)\n      *(z + i) = (*(x + i)) - (*(y + i));\n#else\n    for (i = 0; i < len; i++)\n      *(z + i) = (*(x + i)) - (*(y + i));\n#endif\n  }\n\n  static inline void VectorAbs(const int32_t* src, int32_t* dest, int32_t len) {\n    int32_t i;\n#ifdef USE_SSE\n    __m128i val;\n    __m128i val_abs;\n    const __m128i* x = reinterpret_cast<const __m128i*>(src);\n    __m128i* y = reinterpret_cast<__m128i*>(dest);\n\n    for (i = 0; i < len - 4; i += 4) {\n      val = _mm_loadu_si128(x++);\n      val_abs = _mm_abs_epi32(val);\n      _mm_storeu_si128(y++, val_abs);\n    }\n    for (; i < len; i++)\n      dest[i] = (src[i] >= 0 ? src[i] : -src[i]);\n#else\n    for (i = 0; i < len; i++)\n      dest[i] = (src[i] >= 0 ? src[i] : -src[i]);\n#endif\n  }\n\n  static inline void Square(const int32_t* src, uint32_t* dest, int32_t len) {\n    int32_t i;\n#ifdef USE_SSE\n    __m128i x1;\n    const __m128i* x2 = reinterpret_cast<const __m128i*>(src);\n    __m128i* y2 = reinterpret_cast<__m128i*>(dest);\n\n    for (i = 0; i < len - 4; i += 4) {\n      x1 = _mm_loadu_si128(x2++);\n      _mm_storeu_si128(y2++, _mm_mullo_epi32(x1, x1));\n    }\n    for (; i < len; i++)\n      *(dest + i) = (*(src + i)) * (*(src + i));\n#else\n    for (i = 0; i < len; i++)\n      *(dest + i) = (*(src + i)) * (*(src + i));\n#endif\n  }\n\n  static inline float VectorInnerProduct(const float* x, const float* y,\n      int32_t len) {\n    float prod = 0;\n    int32_t i;\n#ifdef USE_SSE\n    __m128 x1;\n    __m128 y1;\n    __m128 z1 = _mm_setzero_ps();\n    float buf[4];\n\n    for (i = 0; i < len - 4; i += 4) {\n      x1 = _mm_loadu_ps(x + i);\n      y1 = _mm_loadu_ps(y + i);\n      z1 = _mm_add_ps(z1, _mm_mul_ps(x1, y1));\n    }\n    _mm_storeu_ps(&buf[0], z1);\n    prod = buf[0] + buf[1] + buf[2] + buf[3];\n    for (; i < len; i++)\n      prod += x[i] * y[i];\n#else\n    for (i = 0; i < len; i++)\n        prod += x[i] * y[i];\n#endif\n    return prod;\n  }\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_UTIL_MATH_FUNC_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/include/util/nms.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_UTIL_NMS_H_\n#define SEETA_FD_UTIL_NMS_H_\n\n#include <vector>\n\n#include \"common.h\"\n\nnamespace seeta {\nnamespace fd {\n\nvoid NonMaximumSuppression(std::vector<seeta::FaceInfo>* bboxes,\n  std::vector<seeta::FaceInfo>* bboxes_nms, float iou_thresh = 0.8f);\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_UTIL_NMS_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/clnf_general.txt",
    "content": "PDM pdms/In-the-wild_aligned_PDM_68.txt\nTriangulations tris_68.txt\nPatchesCCNF patch_experts/ccnf_patches_0.25_general.txt\nPatchesCCNF patch_experts/ccnf_patches_0.35_general.txt\nPatchesCCNF patch_experts/ccnf_patches_0.5_general.txt\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/main_clnf_general.txt",
    "content": "LandmarkDetector clnf_general.txt\nLandmarkDetector_part model_inner/main_clnf_inner.txt inner 17 0 18 1 19 2 20 3 21 4 22 5 23 6 24 7 25 8 26 9 27 10 28 11 29 12 30 13 31 14 32 15 33 16 34 17 35 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53 36 54 37 55 38 56 39 57 40 58 41 59 42 60 43 61 44 62 45 63 46 64 47 65 48 66 49 67 50\nLandmarkDetector_part model_eye/main_clnf_synth_left.txt left_eye_28 36 8 37 10 38 12 39 14 40 16 41 18\nLandmarkDetector_part model_eye/main_clnf_synth_right.txt right_eye_28 42 8 43 10 44 12 45 14 46 16 47 18\nFaceDetConversion haarAlign.txt\nDetectionValidator detection_validation/validator_general_68.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/model_eye/clnf_left_synth.txt",
    "content": "PDM pdms/pdm_28_l_eye_3D_closed.txt\nPatchesCCNF patch_experts/left_ccnf_patches_1.00_synth_lid_.txt\nPatchesCCNF patch_experts/left_ccnf_patches_1.50_synth_lid_.txt\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/model_eye/clnf_right_synth.txt",
    "content": "PDM pdms/pdm_28_eye_3D_closed.txt\nPatchesCCNF patch_experts/ccnf_patches_1.00_synth_lid_.txt\nPatchesCCNF patch_experts/ccnf_patches_1.50_synth_lid_.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/model_eye/main_clnf_synth_left.txt",
    "content": "LandmarkDetector clnf_left_synth.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/model_eye/main_clnf_synth_right.txt",
    "content": "LandmarkDetector clnf_right_synth.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/model_eye/pdms/pdm_28_eye_3D_closed.txt",
    "content": "# The mean values of the components (in mm)\n84\n1\n6\n-6.346689 \n-4.802645 \n-0.689206 \n3.584030 \n5.513861 \n3.969817 \n-0.143620 \n-4.705906 \n-10.151100 \n-7.784450 \n-4.315176 \n0.286655 \n4.895108 \n8.614140 \n11.209605 \n8.705321 \n5.165718 \n1.065652 \n-3.271212 \n-7.250731 \n-2.195097 \n-0.324358 \n1.476467 \n2.152288 \n1.307482 \n-0.562884 \n-2.363439 \n-3.039631 \n-0.630295 \n-4.947588 \n-6.865877 \n-5.261457 \n-1.074175 \n3.243115 \n5.161403 \n3.911768 \n2.351440 \n-0.095726 \n-1.959374 \n-2.862675 \n-2.316547 \n-1.049970 \n0.957222 \n2.555497 \n3.410716 \n3.797180 \n3.755154 \n3.510297 \n1.231211 \n1.933679 \n1.093865 \n-0.796012 \n-2.628691 \n-3.330879 \n-2.491440 \n-0.601842 \n-0.509775 \n0.210152 \n0.641715 \n0.532111 \n-0.054457 \n-0.774384 \n-1.205947 \n-0.879208 \n1.060595 \n-0.440952 \n-1.721653 \n-2.100358 \n-0.796095 \n1.616596 \n4.283196 \n1.517115 \n-0.872711 \n-2.176368 \n-2.010491 \n-0.559696 \n0.173887 \n0.125369 \n0.313958 \n0.629133 \n0.886248 \n0.934736 \n0.746213 \n0.431068 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n84\n10\n6\n-0.153386 0.025177 -0.054841 0.047942 0.005828 0.082724 0.142441 0.013459 0.069592 -0.174858 \n-0.134498 0.018961 -0.050725 0.046303 0.080169 -0.085614 0.141365 -0.000051 0.047046 -0.145781 \n-0.130919 -0.001976 -0.015781 0.021780 0.107202 -0.203982 0.058147 -0.013939 -0.001668 -0.032456 \n-0.144747 -0.025369 0.029522 -0.011262 0.071090 -0.203042 -0.058466 -0.020071 -0.048015 0.098735 \n-0.167881 -0.037515 0.058646 -0.033467 -0.007013 -0.083344 -0.140162 -0.014855 -0.064846 0.170941 \n-0.186769 -0.031299 0.054529 -0.031829 -0.081354 0.084994 -0.139085 -0.001345 -0.042300 0.141864 \n-0.190348 -0.010362 0.019585 -0.007306 -0.108386 0.203362 -0.055867 0.012543 0.006414 0.028538 \n-0.171298 0.014498 -0.028042 0.026941 -0.077441 0.217018 0.062715 0.021341 0.053763 -0.101612 \n0.207372 0.062591 -0.119437 -0.054907 0.076820 -0.048100 -0.135908 -0.057742 -0.004103 -0.009908 \n0.225329 0.015439 -0.023166 -0.064446 -0.087217 -0.069482 -0.099691 0.249926 0.080107 0.028214 \n0.234134 -0.004997 0.053270 -0.057837 -0.186495 -0.082705 -0.126911 0.442421 0.063530 0.192235 \n0.232555 -0.003035 0.055702 -0.033152 -0.076396 -0.011744 -0.117545 0.262249 -0.015413 0.155968 \n0.213285 0.008939 0.034917 0.022841 0.034538 0.123140 -0.030932 0.037313 -0.101512 -0.081439 \n0.184330 0.002781 0.040384 0.080832 0.080460 0.115659 0.055044 0.080257 -0.058662 -0.101912 \n0.152472 -0.045932 0.082773 0.055658 0.007529 0.054010 0.199419 0.134126 0.101864 -0.104416 \n0.165398 -0.018683 0.044018 0.098351 -0.012939 -0.024937 0.134807 -0.069897 -0.073109 0.022702 \n0.184402 -0.009464 0.017039 0.048177 -0.004151 -0.026121 0.058695 -0.257197 -0.110822 -0.032434 \n0.200832 0.002349 -0.027929 -0.031359 0.014172 -0.005684 0.042899 -0.435980 -0.098097 -0.013502 \n0.207618 0.029961 -0.076210 -0.091900 0.049907 -0.030279 0.028983 -0.273244 0.042669 0.005952 \n0.207309 0.052291 -0.099881 -0.114814 0.132728 -0.038736 -0.063320 -0.127790 0.094419 -0.019914 \n-0.149017 0.002774 -0.012207 0.018561 -0.033647 0.104700 0.125446 0.043084 -0.148359 0.076732 \n-0.154866 -0.007385 0.008461 0.004109 -0.049639 0.092397 -0.026746 0.005949 0.022710 0.000382 \n-0.153118 -0.016465 0.024583 -0.006636 -0.037945 0.028369 -0.160085 -0.033318 0.184813 -0.078178 \n-0.144797 -0.019145 0.026714 -0.007369 -0.005424 -0.049859 -0.196430 -0.051719 0.243027 -0.113007 \n-0.134779 -0.013860 0.013609 0.002322 0.028876 -0.096467 -0.114542 -0.038469 0.163204 -0.083593 \n-0.128933 -0.003706 -0.007052 0.016750 0.044871 -0.084172 0.037576 -0.001329 -0.007933 -0.007089 \n-0.130680 0.005372 -0.023172 0.027479 0.033190 -0.020171 0.170867 0.037942 -0.170086 0.071581 \n-0.138999 0.008057 -0.025308 0.028236 0.000666 0.058065 0.207285 0.056337 -0.228233 0.106257 \n-0.003984 -0.167992 0.019345 -0.008099 -0.110167 0.218829 -0.066444 0.011530 0.007137 0.033605 \n0.007213 -0.135126 -0.025388 0.056689 -0.092686 0.189792 0.024499 -0.006388 0.086896 -0.029308 \n0.017817 -0.117497 -0.053283 0.089178 -0.015735 0.045359 0.106064 -0.023203 0.119076 -0.070549 \n0.021618 -0.125432 -0.048000 0.070337 0.075609 -0.129863 0.130471 -0.029065 0.084827 -0.065960 \n0.016389 -0.154283 -0.012634 0.011202 0.127838 -0.233231 0.083422 -0.020541 0.004212 -0.018229 \n0.005192 -0.187148 0.032099 -0.053586 0.110358 -0.204194 -0.007521 -0.002624 -0.075546 0.044685 \n-0.005412 -0.204777 0.059994 -0.086075 0.033407 -0.059761 -0.089086 0.014191 -0.107727 0.085926 \n-0.010850 -0.196699 0.059026 -0.068250 -0.066030 0.122601 -0.115358 0.019806 -0.069346 0.083334 \n-0.074908 0.222322 -0.128680 0.106279 0.515992 -0.037382 -0.166184 0.282250 -0.092724 -0.029211 \n-0.049636 0.264882 0.162264 0.120013 0.170250 -0.115936 0.057634 0.079663 0.011493 -0.053341 \n-0.020457 0.260307 0.347209 0.044215 -0.051959 -0.147993 0.103852 -0.081857 -0.000604 -0.087831 \n0.008466 0.249892 0.434476 -0.046985 -0.170644 -0.092034 0.008838 -0.087026 -0.030030 0.019115 \n0.031496 0.229386 0.360031 -0.050497 -0.104395 0.079803 -0.054671 -0.073899 -0.062985 -0.023917 \n0.046520 0.191125 0.186443 0.028729 0.050283 0.218925 -0.101211 0.048101 -0.011525 -0.043765 \n0.051597 0.123490 -0.100835 0.113633 0.277072 0.404462 -0.158693 -0.089593 -0.059518 -0.031557 \n0.031390 0.166293 -0.221317 0.010778 -0.065560 0.197405 -0.013358 -0.038202 0.028971 0.015787 \n0.007963 0.191505 -0.289781 -0.098710 -0.251918 0.026406 0.025857 -0.011773 0.026086 0.020397 \n-0.015936 0.203274 -0.317303 -0.176584 -0.301025 -0.090120 0.038670 -0.012354 -0.000247 -0.036027 \n-0.039475 0.208053 -0.288236 -0.127299 -0.178571 -0.148602 0.040236 0.004113 -0.004457 -0.016551 \n-0.061014 0.208181 -0.221481 -0.003480 0.048193 -0.126544 0.030670 0.093612 -0.016308 -0.019164 \n-0.002022 -0.169263 0.029080 -0.021466 -0.029459 0.025877 -0.142794 -0.034375 0.183570 -0.078222 \n-0.000300 -0.172691 0.031731 -0.029747 0.010395 -0.055596 -0.169946 -0.050038 0.239789 -0.125691 \n0.004235 -0.165003 0.019162 -0.015569 0.044130 -0.113124 -0.088548 -0.042014 0.167473 -0.083327 \n0.008925 -0.150706 -0.001258 0.012743 0.051988 -0.113014 0.053667 -0.014997 0.008933 0.024161 \n0.011023 -0.138177 -0.017566 0.038590 0.029375 -0.055348 0.173359 0.015191 -0.142999 0.133883 \n0.009301 -0.134752 -0.020213 0.046851 -0.010464 0.026098 0.200464 0.030859 -0.199272 0.181460 \n0.004768 -0.142435 -0.007651 0.032701 -0.044203 0.083633 0.119139 0.022826 -0.126885 0.138947 \n0.000078 -0.156729 0.012766 0.004408 -0.052075 0.083550 -0.023030 -0.004196 0.031710 0.031351 \n0.128814 0.003571 0.003480 -0.114195 0.042965 0.013538 0.081206 0.030733 0.036469 -0.042832 \n0.084713 0.044573 0.016014 -0.075237 -0.003338 -0.037950 0.095804 -0.008646 0.106748 0.104806 \n-0.014166 0.059774 0.028433 -0.073564 -0.028456 -0.056347 0.078713 -0.035782 0.114925 0.182190 \n-0.109902 0.040269 0.033462 -0.110156 -0.017675 -0.030878 0.039946 -0.034778 0.056210 0.143990 \n-0.146414 -0.002516 0.028155 -0.163578 0.022690 0.023539 0.002211 -0.006223 -0.035002 0.012582 \n-0.102313 -0.043518 0.015622 -0.202536 0.068994 0.075027 -0.012387 0.033157 -0.105281 -0.135056 \n-0.003434 -0.058719 0.003203 -0.204209 0.094112 0.093425 0.004704 0.060292 -0.113458 -0.212440 \n0.099074 -0.043950 -0.000509 -0.171174 0.086675 0.069487 0.039093 0.061946 -0.059545 -0.184463 \n-0.054913 -0.004523 0.015086 0.231138 -0.115127 0.082549 0.124313 -0.000052 0.180789 0.076509 \n-0.038477 -0.010328 -0.025919 0.225952 -0.098722 -0.012521 -0.024397 -0.078886 -0.051188 -0.094188 \n-0.015599 -0.034327 -0.050684 0.208434 -0.145282 -0.134450 -0.225097 -0.057805 -0.253738 -0.159062 \n0.013759 -0.046657 -0.031453 0.191733 -0.202303 -0.154083 -0.244663 -0.006407 -0.264460 -0.184882 \n0.039393 -0.033167 -0.026588 0.194395 -0.163302 -0.053331 -0.095733 0.027393 -0.169484 -0.254320 \n0.055992 -0.018520 -0.024499 0.236434 -0.057326 -0.072106 -0.011848 0.151259 -0.049264 -0.117501 \n0.068631 -0.013724 0.027292 0.231437 -0.037554 0.034751 0.337456 0.134888 0.312055 -0.132196 \n0.056256 0.022936 -0.019524 0.146331 0.032207 -0.007908 -0.035410 -0.090636 -0.012725 0.205397 \n0.042182 0.043848 -0.041760 0.116811 0.078314 0.051616 -0.106453 -0.228687 0.036561 0.260986 \n0.019928 0.055883 -0.059556 0.147688 0.109694 0.020391 -0.066574 -0.102694 0.128555 0.213173 \n-0.009409 0.051946 -0.050194 0.162935 0.085636 -0.028224 -0.126599 0.046702 0.099383 0.240695 \n-0.036452 0.030786 -0.028097 0.176770 -0.015768 0.029793 -0.046117 0.020525 0.047330 0.165226 \n0.034441 -0.022881 0.015629 -0.156918 0.055237 0.036211 0.045403 0.038219 -0.063438 -0.053697 \n-0.007396 -0.031398 0.017754 -0.172866 0.059650 0.047306 0.028721 0.038858 -0.090778 -0.069213 \n-0.050587 -0.024716 0.023247 -0.172154 0.048419 0.037544 0.009258 0.022863 -0.065299 -0.050654 \n-0.069827 -0.006750 0.028891 -0.155196 0.028124 0.012648 -0.001577 -0.000397 -0.001922 -0.008919 \n-0.053849 0.011973 0.031379 -0.131930 0.010655 -0.012793 0.002562 -0.017294 0.062223 0.031533 \n-0.012020 0.020487 0.029254 -0.115987 0.006243 -0.023880 0.019242 -0.017932 0.089559 0.047033 \n0.031165 0.013807 0.023762 -0.116702 0.017473 -0.014122 0.038694 -0.001937 0.064074 0.028511 \n0.050412 -0.004156 0.018118 -0.133655 0.037766 0.010766 0.049531 0.021320 0.000702 -0.013208 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n10\n6\n111.570907 32.910130 22.463857 3.183176 1.531432 1.381999 0.770569 0.635129 0.500532 0.422800 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/model_eye/pdms/pdm_28_l_eye_3D_closed.txt",
    "content": "# The mean values of the components (in mm)\n84\n1\n6\n-5.513861 \n-3.584030 \n0.689206 \n4.802645 \n6.346689 \n4.705906 \n0.143620 \n-3.969817 \n-11.209605 \n-8.614140 \n-4.895108 \n-0.286655 \n4.315176 \n7.784450 \n10.151100 \n7.250731 \n3.271212 \n-1.065652 \n-5.165718 \n-8.705321 \n-1.476467 \n0.324358 \n2.195097 \n3.039631 \n2.363439 \n0.562884 \n-1.307482 \n-2.152288 \n-1.074175 \n-5.261457 \n-6.865877 \n-4.947588 \n-0.630295 \n3.911768 \n5.161403 \n3.243115 \n0.957222 \n-1.049970 \n-2.316547 \n-2.862675 \n-1.959374 \n-0.095726 \n2.351440 \n3.510297 \n3.755154 \n3.797180 \n3.410716 \n2.555497 \n1.093865 \n1.933679 \n1.231211 \n-0.601842 \n-2.491440 \n-3.330879 \n-2.628691 \n-0.796012 \n-0.054457 \n0.532111 \n0.641715 \n0.210152 \n-0.509775 \n-0.879208 \n-1.205947 \n-0.774384 \n4.283196 \n1.616596 \n-0.796095 \n-2.100358 \n-1.721653 \n-0.440952 \n1.060595 \n-0.559696 \n-2.010491 \n-2.176368 \n-0.872711 \n1.517115 \n0.313958 \n0.125369 \n0.173887 \n0.431068 \n0.746213 \n0.934736 \n0.886248 \n0.629133 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n84\n10\n6\n0.167881 0.037515 -0.058646 0.033467 0.007013 0.083344 0.140162 0.014855 0.064846 -0.170941 \n0.144747 0.025369 -0.029522 0.011262 -0.071090 0.203042 0.058466 0.020071 0.048015 -0.098735 \n0.130919 0.001976 0.015781 -0.021780 -0.107202 0.203982 -0.058147 0.013939 0.001668 0.032456 \n0.134498 -0.018961 0.050725 -0.046303 -0.080169 0.085614 -0.141365 0.000051 -0.047046 0.145781 \n0.153386 -0.025177 0.054841 -0.047942 -0.005828 -0.082724 -0.142441 -0.013459 -0.069592 0.174858 \n0.171298 -0.014498 0.028042 -0.026941 0.077441 -0.217018 -0.062715 -0.021341 -0.053763 0.101612 \n0.190348 0.010362 -0.019585 0.007306 0.108386 -0.203362 0.055867 -0.012543 -0.006414 -0.028538 \n0.186769 0.031299 -0.054529 0.031829 0.081354 -0.084994 0.139085 0.001345 0.042300 -0.141864 \n-0.152472 0.045932 -0.082773 -0.055658 -0.007529 -0.054010 -0.199419 -0.134126 -0.101864 0.104416 \n-0.184330 -0.002781 -0.040384 -0.080832 -0.080460 -0.115659 -0.055044 -0.080257 0.058662 0.101912 \n-0.213285 -0.008939 -0.034917 -0.022841 -0.034538 -0.123140 0.030932 -0.037313 0.101512 0.081439 \n-0.232555 0.003035 -0.055702 0.033152 0.076396 0.011744 0.117545 -0.262249 0.015413 -0.155968 \n-0.234134 0.004997 -0.053270 0.057837 0.186495 0.082705 0.126911 -0.442421 -0.063530 -0.192235 \n-0.225329 -0.015439 0.023166 0.064446 0.087217 0.069482 0.099691 -0.249926 -0.080107 -0.028214 \n-0.207372 -0.062591 0.119437 0.054907 -0.076820 0.048100 0.135908 0.057742 0.004103 0.009908 \n-0.207309 -0.052291 0.099881 0.114814 -0.132728 0.038736 0.063320 0.127790 -0.094419 0.019914 \n-0.207618 -0.029961 0.076210 0.091900 -0.049907 0.030279 -0.028983 0.273244 -0.042669 -0.005952 \n-0.200832 -0.002349 0.027929 0.031359 -0.014172 0.005684 -0.042899 0.435980 0.098097 0.013502 \n-0.184402 0.009464 -0.017039 -0.048177 0.004151 0.026121 -0.058695 0.257197 0.110822 0.032434 \n-0.165398 0.018683 -0.044018 -0.098351 0.012939 0.024937 -0.134807 0.069897 0.073109 -0.022702 \n0.153118 0.016465 -0.024583 0.006636 0.037945 -0.028369 0.160085 0.033318 -0.184813 0.078178 \n0.154866 0.007385 -0.008461 -0.004109 0.049639 -0.092397 0.026746 -0.005949 -0.022710 -0.000382 \n0.149017 -0.002774 0.012207 -0.018561 0.033647 -0.104700 -0.125446 -0.043084 0.148359 -0.076732 \n0.138999 -0.008057 0.025308 -0.028236 -0.000666 -0.058065 -0.207285 -0.056337 0.228233 -0.106257 \n0.130680 -0.005372 0.023172 -0.027479 -0.033190 0.020171 -0.170867 -0.037942 0.170086 -0.071581 \n0.128933 0.003706 0.007052 -0.016750 -0.044871 0.084172 -0.037576 0.001329 0.007933 0.007089 \n0.134779 0.013860 -0.013609 -0.002322 -0.028876 0.096467 0.114542 0.038469 -0.163204 0.083593 \n0.144797 0.019145 -0.026714 0.007369 0.005424 0.049859 0.196430 0.051719 -0.243027 0.113007 \n0.016389 -0.154283 -0.012634 0.011202 0.127838 -0.233231 0.083422 -0.020541 0.004212 -0.018229 \n0.021618 -0.125432 -0.048000 0.070337 0.075609 -0.129863 0.130471 -0.029065 0.084827 -0.065960 \n0.017817 -0.117497 -0.053283 0.089178 -0.015735 0.045359 0.106064 -0.023203 0.119076 -0.070549 \n0.007213 -0.135126 -0.025388 0.056689 -0.092686 0.189792 0.024499 -0.006388 0.086896 -0.029308 \n-0.003984 -0.167992 0.019345 -0.008099 -0.110167 0.218829 -0.066444 0.011530 0.007137 0.033605 \n-0.010850 -0.196699 0.059026 -0.068250 -0.066030 0.122601 -0.115358 0.019806 -0.069346 0.083334 \n-0.005412 -0.204777 0.059994 -0.086075 0.033407 -0.059761 -0.089086 0.014191 -0.107727 0.085926 \n0.005192 -0.187148 0.032099 -0.053586 0.110358 -0.204194 -0.007521 -0.002624 -0.075546 0.044685 \n0.051597 0.123490 -0.100835 0.113633 0.277072 0.404462 -0.158693 -0.089593 -0.059518 -0.031557 \n0.046520 0.191125 0.186443 0.028729 0.050283 0.218925 -0.101211 0.048101 -0.011525 -0.043765 \n0.031496 0.229386 0.360031 -0.050497 -0.104395 0.079803 -0.054671 -0.073899 -0.062985 -0.023917 \n0.008466 0.249892 0.434476 -0.046985 -0.170644 -0.092034 0.008838 -0.087026 -0.030030 0.019115 \n-0.020457 0.260307 0.347209 0.044215 -0.051959 -0.147993 0.103852 -0.081857 -0.000604 -0.087831 \n-0.049636 0.264882 0.162264 0.120013 0.170250 -0.115936 0.057634 0.079663 0.011493 -0.053341 \n-0.074908 0.222322 -0.128680 0.106279 0.515992 -0.037382 -0.166184 0.282250 -0.092724 -0.029211 \n-0.061014 0.208181 -0.221481 -0.003480 0.048193 -0.126544 0.030670 0.093612 -0.016308 -0.019164 \n-0.039475 0.208053 -0.288236 -0.127299 -0.178571 -0.148602 0.040236 0.004113 -0.004457 -0.016551 \n-0.015936 0.203274 -0.317303 -0.176584 -0.301025 -0.090120 0.038670 -0.012354 -0.000247 -0.036027 \n0.007963 0.191505 -0.289781 -0.098710 -0.251918 0.026406 0.025857 -0.011773 0.026086 0.020397 \n0.031390 0.166293 -0.221317 0.010778 -0.065560 0.197405 -0.013358 -0.038202 0.028971 0.015787 \n0.004235 -0.165003 0.019162 -0.015569 0.044130 -0.113124 -0.088548 -0.042014 0.167473 -0.083327 \n-0.000300 -0.172691 0.031731 -0.029747 0.010395 -0.055596 -0.169946 -0.050038 0.239789 -0.125691 \n-0.002022 -0.169263 0.029080 -0.021466 -0.029459 0.025877 -0.142794 -0.034375 0.183570 -0.078222 \n0.000078 -0.156729 0.012766 0.004408 -0.052075 0.083550 -0.023030 -0.004196 0.031710 0.031351 \n0.004768 -0.142435 -0.007651 0.032701 -0.044203 0.083633 0.119139 0.022826 -0.126885 0.138947 \n0.009301 -0.134752 -0.020213 0.046851 -0.010464 0.026098 0.200464 0.030859 -0.199272 0.181460 \n0.011023 -0.138177 -0.017566 0.038590 0.029375 -0.055348 0.173359 0.015191 -0.142999 0.133883 \n0.008925 -0.150706 -0.001258 0.012743 0.051988 -0.113014 0.053667 -0.014997 0.008933 0.024161 \n-0.146414 -0.002516 0.028155 -0.163578 0.022690 0.023539 0.002211 -0.006223 -0.035002 0.012582 \n-0.109902 0.040269 0.033462 -0.110156 -0.017675 -0.030878 0.039946 -0.034778 0.056210 0.143990 \n-0.014166 0.059774 0.028433 -0.073564 -0.028456 -0.056347 0.078713 -0.035782 0.114925 0.182190 \n0.084713 0.044573 0.016014 -0.075237 -0.003338 -0.037950 0.095804 -0.008646 0.106748 0.104806 \n0.128814 0.003571 0.003480 -0.114195 0.042965 0.013538 0.081206 0.030733 0.036469 -0.042832 \n0.099074 -0.043950 -0.000509 -0.171174 0.086675 0.069487 0.039093 0.061946 -0.059545 -0.184463 \n-0.003434 -0.058719 0.003203 -0.204209 0.094112 0.093425 0.004704 0.060292 -0.113458 -0.212440 \n-0.102313 -0.043518 0.015622 -0.202536 0.068994 0.075027 -0.012387 0.033157 -0.105281 -0.135056 \n0.068631 -0.013724 0.027292 0.231437 -0.037554 0.034751 0.337456 0.134888 0.312055 -0.132196 \n0.055992 -0.018520 -0.024499 0.236434 -0.057326 -0.072106 -0.011848 0.151259 -0.049264 -0.117501 \n0.039393 -0.033167 -0.026588 0.194395 -0.163302 -0.053331 -0.095733 0.027393 -0.169484 -0.254320 \n0.013759 -0.046657 -0.031453 0.191733 -0.202303 -0.154083 -0.244663 -0.006407 -0.264460 -0.184882 \n-0.015599 -0.034327 -0.050684 0.208434 -0.145282 -0.134450 -0.225097 -0.057805 -0.253738 -0.159062 \n-0.038477 -0.010328 -0.025919 0.225952 -0.098722 -0.012521 -0.024397 -0.078886 -0.051188 -0.094188 \n-0.054913 -0.004523 0.015086 0.231138 -0.115127 0.082549 0.124313 -0.000052 0.180789 0.076509 \n-0.036452 0.030786 -0.028097 0.176770 -0.015768 0.029793 -0.046117 0.020525 0.047330 0.165226 \n-0.009409 0.051946 -0.050194 0.162935 0.085636 -0.028224 -0.126599 0.046702 0.099383 0.240695 \n0.019928 0.055883 -0.059556 0.147688 0.109694 0.020391 -0.066574 -0.102694 0.128555 0.213173 \n0.042182 0.043848 -0.041760 0.116811 0.078314 0.051616 -0.106453 -0.228687 0.036561 0.260986 \n0.056256 0.022936 -0.019524 0.146331 0.032207 -0.007908 -0.035410 -0.090636 -0.012725 0.205397 \n-0.050587 -0.024716 0.023247 -0.172154 0.048419 0.037544 0.009258 0.022863 -0.065299 -0.050654 \n-0.007396 -0.031398 0.017754 -0.172866 0.059650 0.047306 0.028721 0.038858 -0.090778 -0.069213 \n0.034441 -0.022881 0.015629 -0.156918 0.055237 0.036211 0.045403 0.038219 -0.063438 -0.053697 \n0.050412 -0.004156 0.018118 -0.133655 0.037766 0.010766 0.049531 0.021320 0.000702 -0.013208 \n0.031165 0.013807 0.023762 -0.116702 0.017473 -0.014122 0.038694 -0.001937 0.064074 0.028511 \n-0.012020 0.020487 0.029254 -0.115987 0.006243 -0.023880 0.019242 -0.017932 0.089559 0.047033 \n-0.053849 0.011973 0.031379 -0.131930 0.010655 -0.012793 0.002562 -0.017294 0.062223 0.031533 \n-0.069827 -0.006750 0.028891 -0.155196 0.028124 0.012648 -0.001577 -0.000397 -0.001922 -0.008919 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n10\n6\n111.570907 32.910130 22.463857 3.183176 1.531432 1.381999 0.770569 0.635129 0.500532 0.422800 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/model_inner/clnf_inner.txt",
    "content": "PDM pdms/pdm_51_inner.txt\nPatchesCCNF patch_experts/ccnf_patches_1.00_inner.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/model_inner/main_clnf_inner.txt",
    "content": "LandmarkDetector clnf_inner.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/model_inner/pdms/pdm_51_inner.txt",
    "content": "# The mean values of the components (in mm)\n153\n1\n6\n-61.487065 \n-51.509332 \n-37.921431 \n-24.057516 \n-11.630855 \n12.064575 \n25.080979 \n38.237788 \n50.986671 \n59.712693 \n0.585413 \n0.765027 \n0.986699 \n1.246623 \n-15.032333 \n-7.411138 \n0.343475 \n8.042640 \n14.960422 \n-46.398983 \n-37.943690 \n-28.132841 \n-19.916545 \n-28.549994 \n-38.380366 \n19.002468 \n27.657580 \n37.180192 \n44.841001 \n37.909841 \n28.497442 \n-29.562845 \n-17.967543 \n-7.015967 \n0.052801 \n8.043929 \n18.433173 \n28.157774 \n18.519833 \n8.494683 \n-0.070888 \n-7.892087 \n-18.695338 \n-24.992703 \n-7.290790 \n-0.039765 \n8.052638 \n23.868342 \n8.019854 \n-0.212622 \n-7.631916 \n-37.103038 \n-46.958179 \n-50.611833 \n-50.104582 \n-46.101873 \n-46.640281 \n-50.673103 \n-50.958467 \n-46.902842 \n-37.264890 \n-31.676015 \n-21.117514 \n-10.737646 \n0.158715 \n12.338379 \n14.273187 \n15.946075 \n14.281476 \n12.541686 \n-25.706010 \n-31.203003 \n-31.244206 \n-25.361289 \n-23.810857 \n-23.539489 \n-25.401771 \n-31.558920 \n-31.146069 \n-25.831501 \n-23.695860 \n-23.829951 \n39.570821 \n32.160420 \n28.582469 \n30.231097 \n28.688419 \n32.668615 \n39.377912 \n46.579784 \n49.241136 \n49.857061 \n49.336194 \n46.680342 \n39.469109 \n35.142334 \n35.627156 \n35.092954 \n39.393934 \n40.374411 \n41.028762 \n40.536741 \n27.039832 \n20.931821 \n14.543527 \n7.608953 \n2.074720 \n2.333803 \n7.566715 \n14.068191 \n20.304220 \n25.944547 \n-0.320469 \n-8.941564 \n-17.912415 \n-26.452684 \n-10.746347 \n-14.216881 \n-16.665096 \n-14.180856 \n-11.109900 \n19.097556 \n15.606980 \n14.061942 \n12.235130 \n11.967495 \n13.450376 \n12.176099 \n13.685622 \n15.227482 \n18.115394 \n13.233978 \n11.664752 \n4.879596 \n-8.128708 \n-14.406876 \n-15.587202 \n-14.334949 \n-7.381702 \n4.647518 \n-7.847965 \n-15.774312 \n-16.972084 \n-15.841250 \n-8.462756 \n2.392204 \n-13.202273 \n-14.479181 \n-13.135758 \n2.088533 \n-13.195614 \n-14.587587 \n-13.062554 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n153\n32\n6\n0.048215 0.005826 0.019250 0.055175 0.004152 -0.240330 -0.093805 0.065577 -0.028184 0.043409 0.171981 0.101208 0.077786 -0.095916 0.166254 0.029127 0.009577 0.016140 0.053935 0.072393 -0.052710 -0.000041 -0.149995 0.088505 -0.021293 0.097688 -0.043028 0.145707 -0.058863 -0.018754 -0.055098 0.283637 \n0.058869 0.003249 0.041189 -0.001982 0.025312 -0.192894 -0.025140 -0.032292 -0.197517 0.118099 0.225632 0.096284 0.114517 -0.081005 0.139197 -0.078138 -0.126771 -0.136139 -0.046585 0.090782 -0.008204 -0.019328 -0.091391 0.060952 0.007995 0.018184 0.028784 0.048866 -0.015436 0.006046 -0.004828 0.138112 \n0.031959 -0.001668 0.061660 -0.005340 0.003024 -0.169106 0.025180 -0.033297 -0.250054 0.214220 0.125180 0.023097 0.034194 0.014102 0.146834 -0.076318 -0.060218 -0.123413 -0.083792 0.072286 0.019266 0.024247 -0.000997 0.006645 0.024498 0.012834 0.062842 -0.003123 -0.023415 -0.025680 0.048748 -0.026094 \n-0.001316 0.001415 0.073054 0.021599 -0.024599 -0.145333 0.048714 0.025206 -0.239694 0.291975 0.015222 -0.075696 -0.069737 0.103674 0.137956 -0.059660 0.017648 -0.060510 -0.113918 0.036965 0.012494 0.050988 -0.008944 -0.006526 0.024140 0.036188 0.105884 0.010739 -0.032776 -0.034197 0.114925 -0.102668 \n-0.035824 0.001344 0.096519 0.024048 -0.043021 -0.102931 0.068178 0.077011 -0.175251 0.344608 -0.084700 -0.152937 -0.159712 0.163325 0.067623 -0.042989 0.040499 -0.059369 -0.151509 -0.008246 -0.025670 0.086600 -0.038968 -0.005819 0.081015 0.001095 0.078814 0.006911 -0.081881 -0.006646 0.188712 -0.148058 \n0.071337 -0.000209 0.075707 -0.111516 0.029058 0.178910 -0.041829 0.002022 0.098852 -0.063920 0.157150 0.263712 0.153704 -0.143048 0.009165 0.169592 -0.042091 -0.015215 0.060386 0.092701 -0.011412 0.161957 -0.030557 -0.139962 0.185329 -0.000155 0.099424 0.016836 -0.080710 -0.067204 -0.083318 -0.183333 \n0.043699 0.001130 0.048352 -0.082623 0.002693 0.222765 -0.007747 0.047357 0.126133 -0.011240 0.105147 0.176046 0.204156 -0.110730 0.095212 0.125733 -0.031262 -0.051717 -0.001980 0.069208 -0.016668 0.102606 -0.038347 -0.050735 0.155753 0.053377 0.085219 0.033941 -0.041428 -0.049227 0.078802 -0.077253 \n-0.000141 0.006490 0.026936 -0.034005 -0.031528 0.243222 0.012922 0.092152 0.109157 0.056328 0.024020 0.073186 0.199754 -0.021186 0.166785 0.110435 0.009385 0.023913 -0.038320 0.060664 -0.013926 0.021366 -0.027649 -0.048182 0.088896 0.101399 0.136039 0.002153 -0.049570 0.002814 0.149871 0.053358 \n-0.037555 0.007528 -0.015415 -0.002718 -0.057838 0.252132 0.053336 0.097507 0.077208 0.131023 -0.029302 -0.019790 0.160928 0.085102 0.145761 0.072649 0.053385 0.059314 -0.043048 -0.043633 0.018455 -0.049962 0.049462 -0.020626 0.000124 0.070969 0.074913 -0.085165 -0.038757 0.006930 0.199282 0.169772 \n-0.042029 -0.013263 -0.114522 -0.009277 -0.033006 0.258765 0.109871 -0.001142 -0.002636 0.149950 0.001402 -0.063005 0.088768 0.097316 0.002668 -0.002525 0.002781 -0.066426 -0.007422 -0.173785 0.089002 -0.120039 0.113624 0.105707 -0.131966 -0.016829 -0.129686 -0.122573 0.009302 -0.009441 0.268861 0.192443 \n0.010409 0.013506 0.115140 -0.057538 0.000108 0.025111 0.001272 0.021442 -0.008698 0.104583 0.019203 0.062144 -0.047550 0.036312 -0.079895 0.037948 0.014438 0.028186 0.030253 -0.010434 -0.021469 0.041396 -0.008376 -0.037902 0.095982 0.072764 0.102068 -0.046223 -0.057926 -0.054192 -0.040118 -0.116187 \n0.011661 0.013580 0.098244 -0.054918 0.000709 0.017404 0.001459 0.017449 -0.007090 0.090928 0.008597 0.053388 -0.045450 0.027417 -0.104294 0.029068 0.016816 0.046028 0.008358 0.022175 -0.079674 -0.015467 0.041264 0.004870 0.095541 0.095869 0.038536 -0.024476 -0.035445 -0.051161 -0.010636 -0.090827 \n0.012751 0.015901 0.091476 -0.053662 0.002269 0.011829 -0.001927 0.013682 -0.007728 0.075101 0.000009 0.047226 -0.044783 0.019237 -0.126011 0.015673 0.014294 0.065277 -0.017321 0.050151 -0.128723 -0.063789 0.084937 0.044485 0.109595 0.123454 -0.026538 -0.003911 -0.017052 -0.057302 0.012244 -0.069566 \n0.012417 0.019872 0.090561 -0.054278 0.002424 0.009509 -0.003024 0.010002 -0.011042 0.060431 -0.010603 0.041663 -0.043785 0.017712 -0.146990 -0.005398 0.014213 0.074732 -0.050802 0.070873 -0.175363 -0.107205 0.125943 0.076813 0.124051 0.144704 -0.081053 0.023938 0.006968 -0.065779 0.037234 -0.039172 \n0.024544 -0.041070 0.054915 -0.002156 0.020605 0.005506 0.033788 0.023038 -0.009453 -0.020991 0.027501 0.016838 -0.023416 -0.038269 -0.172593 0.100604 -0.087956 0.115924 -0.195525 0.149607 -0.119504 -0.086585 0.062174 -0.075038 0.035110 0.067295 0.018243 0.037127 -0.065788 0.114307 0.008766 0.013420 \n0.015769 -0.016706 0.051135 -0.016355 0.023331 0.007524 0.007242 0.013630 -0.003853 -0.008421 -0.000527 0.001986 -0.030917 -0.012734 -0.145835 0.055688 -0.050414 0.097692 -0.122883 0.116419 -0.123293 -0.072748 0.065772 -0.026490 0.050794 0.080157 -0.001588 0.030216 -0.002659 0.090274 0.014294 0.008209 \n0.006896 0.010273 0.040574 -0.028175 0.009177 -0.002727 -0.014177 0.003932 0.004489 0.006152 -0.014778 0.011313 -0.036673 0.012083 -0.116775 -0.004415 0.017024 0.042082 -0.017831 0.056364 -0.122120 -0.059416 0.060239 0.041547 0.076702 0.078139 -0.024391 0.022113 0.041986 0.029818 0.006180 -0.008338 \n0.003970 0.033635 0.031624 -0.039688 -0.009931 -0.013688 -0.027612 -0.006537 0.014283 0.026041 -0.027827 0.007531 -0.035935 0.028010 -0.090291 -0.066369 0.095570 -0.004022 0.073400 -0.005364 -0.106538 -0.056168 0.061509 0.078550 0.094586 0.045250 -0.003615 0.025884 0.050964 -0.059244 -0.004008 -0.021368 \n-0.001030 0.051101 0.012729 -0.044712 -0.018779 -0.019594 -0.042435 -0.019121 0.024428 0.034846 -0.034286 -0.007933 -0.033382 0.048139 -0.059376 -0.110934 0.139720 -0.028230 0.159201 -0.068088 -0.091597 -0.048485 0.074228 0.104849 0.077415 -0.003190 -0.011414 0.014616 0.051647 -0.131379 -0.016369 -0.029576 \n0.013276 0.015196 0.059348 0.005177 -0.027902 -0.170695 -0.014038 0.150670 0.011873 0.000786 -0.001627 -0.017240 0.060415 -0.071933 -0.072809 0.194452 0.009800 0.022712 0.090550 -0.052535 0.048687 0.036304 -0.081877 0.107825 -0.019121 0.088373 0.006745 -0.001877 0.027214 0.037692 0.066350 -0.032024 \n0.008368 0.021960 0.054532 0.000311 -0.013304 -0.136478 -0.005637 0.144631 -0.012116 0.036030 0.009154 -0.004242 0.045998 -0.045201 -0.104791 0.181210 -0.014972 0.008238 0.103363 -0.104654 0.090328 0.075697 -0.047151 0.056470 -0.047856 0.042860 0.048666 -0.031566 0.031284 0.039040 0.059929 -0.077071 \n0.010395 0.003713 0.046220 0.009379 -0.018544 -0.083031 -0.013386 0.114954 -0.018702 0.037856 -0.002239 0.007356 0.059607 0.038771 -0.131230 0.159333 -0.105685 0.035886 0.067892 -0.054718 0.165788 0.105141 0.029341 0.082812 -0.059462 0.015944 0.035767 -0.047746 0.012667 0.050158 0.039094 -0.047357 \n-0.004435 0.007758 0.022257 0.036260 -0.024646 -0.070379 -0.043482 0.069648 -0.017559 0.045113 -0.011125 0.031216 0.049811 0.049932 -0.155766 0.134651 -0.112632 0.006918 0.065349 -0.047570 0.144378 0.096402 0.099483 0.065001 -0.044072 -0.028810 -0.014239 -0.088588 -0.014730 0.076246 0.021813 -0.019431 \n0.002165 0.006150 0.029380 0.029537 -0.025415 -0.100095 -0.017928 0.118446 -0.004248 0.030562 -0.006585 0.000532 0.058398 0.009221 -0.126284 0.163929 -0.090164 0.029112 0.068156 -0.063123 0.109314 0.090377 -0.005534 0.070883 -0.043083 -0.006742 -0.002886 -0.037771 0.001431 0.081963 0.004436 -0.032697 \n0.005906 0.023652 0.032288 0.016417 -0.016369 -0.150461 -0.008210 0.140340 0.006951 0.032729 0.002817 -0.014571 0.043576 -0.085898 -0.093828 0.197874 0.009255 -0.010440 0.104221 -0.102783 0.013114 0.047952 -0.099076 0.069836 -0.028903 0.044003 0.014956 -0.013531 0.002087 0.064351 0.058261 -0.052773 \n0.031500 -0.016588 -0.023311 -0.051803 0.020577 0.076264 0.056423 -0.050173 0.058645 0.086870 0.049525 0.017849 -0.103044 0.016589 0.058592 0.011828 0.079540 -0.004367 0.086692 -0.046516 -0.016537 0.071956 -0.138565 0.010325 -0.021842 0.083975 0.110326 0.083204 -0.010803 -0.126543 0.008570 -0.065688 \n0.008613 -0.007233 -0.020573 -0.036715 0.011967 0.087079 0.019123 -0.079108 0.053694 0.138972 0.045043 0.066957 -0.125703 0.038948 0.052634 0.035588 0.066490 -0.058129 0.093071 -0.057940 -0.003968 0.124034 -0.079225 0.027754 -0.038168 0.004876 0.053321 0.063399 -0.004495 -0.056661 -0.007469 -0.016110 \n0.010708 -0.022508 -0.031270 -0.026205 0.011524 0.141469 0.005171 -0.103210 0.057169 0.134168 0.035399 0.074052 -0.116274 0.110813 0.023736 0.016900 -0.015217 -0.013920 0.071146 -0.012837 0.055448 0.151531 -0.015708 0.005826 -0.049828 -0.042618 0.063884 0.047747 -0.001527 -0.018317 -0.022828 0.028414 \n-0.002105 -0.020003 -0.064424 -0.013765 0.020781 0.174297 0.001852 -0.122246 0.043849 0.126361 0.045295 0.070262 -0.111656 0.134767 -0.017164 -0.026720 -0.057077 -0.037401 0.057190 -0.048382 0.069101 0.117167 0.012271 -0.038779 -0.039332 -0.077244 0.048794 -0.029942 0.009972 0.030621 -0.034125 0.032811 \n0.013969 -0.027246 -0.057345 -0.015140 0.008990 0.148608 0.002683 -0.100291 0.049046 0.118726 0.042351 0.076792 -0.099641 0.130512 -0.001439 -0.013800 -0.045290 0.013326 0.049555 0.028980 0.100417 0.164552 0.016949 -0.001374 -0.021085 -0.071477 0.006962 0.059649 0.027692 -0.007030 -0.078989 0.038859 \n0.019008 -0.012928 -0.046256 -0.036644 0.012116 0.098313 0.022292 -0.078736 0.050100 0.118315 0.047233 0.058065 -0.103981 0.053660 0.031135 0.009987 0.035686 -0.022567 0.066701 -0.005730 0.033996 0.126479 -0.062315 0.021035 -0.001091 -0.013353 0.002995 0.076257 0.009807 -0.058127 -0.042979 -0.004986 \n-0.007601 -0.177175 0.017727 0.125761 0.005688 -0.003353 0.147590 0.073022 -0.018688 -0.204710 0.010150 0.031133 0.001801 0.030364 0.023092 -0.004181 0.085187 0.005926 0.087355 0.072482 -0.021998 -0.032687 0.046765 -0.055522 -0.177677 -0.034217 0.213318 0.017704 0.014570 -0.055193 0.030444 0.001590 \n-0.016541 -0.130310 0.005113 0.039399 -0.015097 -0.002729 0.084226 0.039798 -0.038451 -0.160923 0.067103 -0.036395 -0.025994 0.076883 0.025661 0.022379 0.057800 -0.007792 -0.055764 0.012615 -0.000495 -0.017802 0.043257 -0.012918 -0.076865 0.029916 0.111351 0.026562 -0.043756 -0.072868 -0.014045 -0.005620 \n-0.006580 -0.041018 0.011956 0.014998 0.000740 -0.005472 0.032329 0.006822 -0.020124 -0.131024 0.077596 -0.043507 -0.025592 0.112554 -0.034348 0.040738 0.060708 -0.001484 -0.155825 -0.070616 -0.011748 0.005651 0.000251 0.005087 0.038106 0.066154 0.082256 0.091179 -0.065226 -0.023005 -0.061362 -0.058155 \n0.004961 0.001648 -0.003877 -0.006108 0.014598 -0.019228 -0.004263 -0.016762 0.000237 -0.074099 -0.025521 -0.041570 -0.009358 0.010684 -0.001844 0.010927 0.012393 -0.017579 -0.043086 -0.029781 -0.001323 0.002201 0.067935 -0.021949 0.012852 0.077330 0.032354 0.036728 -0.058971 -0.032938 -0.001410 -0.051522 \n0.010249 0.058570 -0.030749 -0.037553 0.017103 -0.045825 -0.032816 -0.033532 0.023519 -0.005390 -0.142192 -0.028903 0.005856 -0.119621 0.037848 -0.030546 -0.049052 -0.044563 0.084150 0.025508 0.033239 0.010978 0.157710 -0.068468 -0.065812 0.111109 0.080771 0.000044 -0.000183 -0.031588 0.026364 -0.072106 \n0.019855 0.127731 -0.069824 -0.036148 0.034849 -0.043347 -0.088673 -0.073093 0.049751 0.013844 -0.144983 -0.063823 0.020675 -0.110435 0.051877 -0.041482 -0.071095 0.014502 0.034872 0.022648 -0.049292 0.007571 0.075833 -0.065256 -0.069651 -0.001051 0.095846 0.062248 -0.062551 -0.005565 0.031314 -0.030085 \n-0.002875 0.164839 -0.124720 -0.071759 0.017265 -0.043992 -0.148503 -0.111790 0.051584 0.012064 -0.084883 -0.131572 -0.001352 -0.044408 -0.003920 -0.047574 -0.034283 0.058068 -0.088753 -0.010707 -0.048508 0.013425 -0.024586 -0.044085 0.017545 -0.168004 0.085244 0.029133 -0.109995 -0.062934 -0.001407 0.004682 \n0.017838 0.126359 -0.098394 -0.019146 0.037082 -0.045881 -0.088216 -0.093730 0.054146 -0.034776 -0.152958 -0.093546 0.040898 -0.099978 0.077336 -0.047936 -0.073395 -0.008478 0.035327 0.016668 -0.011878 0.031888 0.029670 -0.010671 0.013279 -0.059562 0.097616 -0.001442 -0.123286 0.033179 0.093989 -0.017493 \n0.003354 0.057470 -0.070587 -0.005011 0.030120 -0.048761 -0.033225 -0.056017 0.022933 -0.077317 -0.170237 -0.073664 0.040276 -0.107085 0.099220 -0.034965 -0.061435 -0.077366 0.069545 -0.000936 0.069153 0.082774 0.086736 -0.021770 0.048952 -0.005926 0.014456 -0.045143 -0.062652 0.092136 0.133381 -0.040747 \n-0.005090 -0.003703 -0.040158 0.017871 0.020138 -0.024901 -0.002366 -0.032407 -0.001883 -0.147184 -0.047234 -0.089613 0.020124 0.020696 0.065435 0.004741 -0.007643 -0.052853 -0.055641 -0.066739 0.032675 0.071221 -0.008619 0.042968 0.104527 -0.033912 -0.035940 0.001701 -0.099441 0.094234 0.101317 -0.019024 \n-0.020413 -0.053520 -0.023649 0.035117 0.005981 -0.015046 0.027253 -0.008273 -0.021301 -0.215940 0.053858 -0.103258 0.002494 0.109283 0.037848 0.037581 0.055486 -0.042429 -0.157384 -0.081131 0.031650 0.072109 -0.075592 0.080851 0.143183 -0.044277 -0.015440 0.051076 -0.114670 0.079007 0.058218 -0.007329 \n-0.029800 -0.143867 -0.013745 0.053673 -0.009247 -0.010775 0.087729 0.033939 -0.038123 -0.226383 0.051127 -0.072732 -0.003050 0.087211 0.077594 0.019810 0.059918 -0.024133 -0.041687 0.001805 0.000908 0.031197 -0.029281 0.024243 -0.029099 -0.078006 0.068409 0.023726 -0.060584 0.003392 0.082980 -0.001526 \n-0.003562 -0.182306 -0.002510 0.134236 0.020593 -0.001022 0.150457 0.051751 -0.021379 -0.197171 -0.001357 0.011236 0.017400 0.037123 0.026165 -0.017637 0.090818 0.025239 0.074023 0.040654 -0.048912 -0.012247 0.059420 -0.037121 -0.191095 -0.060883 0.188357 0.054443 0.012178 -0.065544 0.013102 -0.027796 \n-0.010711 -0.038978 0.021641 0.018128 0.003540 -0.003594 0.029128 0.000882 -0.023613 -0.158293 0.065713 -0.056117 -0.021144 0.110963 -0.022237 0.034373 0.061360 -0.018439 -0.167422 -0.072410 0.011021 0.030154 -0.039910 -0.005807 0.092278 0.022426 0.060858 0.072149 -0.046708 -0.000397 -0.017953 -0.017121 \n0.001604 0.002832 0.000803 -0.005274 0.015109 -0.016136 -0.006531 -0.023165 -0.000438 -0.092850 -0.035022 -0.048312 -0.007273 0.013002 0.003632 -0.000217 0.014076 -0.024655 -0.057671 -0.039153 0.008338 0.025209 0.033618 -0.034396 0.059088 0.041641 0.012819 0.035200 -0.035564 -0.014626 0.032340 -0.025766 \n0.006185 0.058475 -0.024893 -0.037175 0.019107 -0.042798 -0.037553 -0.041913 0.024837 -0.025511 -0.153636 -0.038780 0.010843 -0.117604 0.043591 -0.044371 -0.050973 -0.050976 0.069347 0.015835 0.052084 0.035582 0.124825 -0.086511 -0.028588 0.074993 0.066821 -0.007952 0.018917 -0.012518 0.062130 -0.033156 \n0.002463 0.168080 -0.136484 -0.070991 -0.000142 -0.053769 -0.139684 -0.087917 0.059874 0.007064 -0.066238 -0.111041 -0.005337 -0.081490 0.009107 -0.051594 -0.042681 0.045556 -0.093714 -0.008363 -0.042080 -0.017430 -0.031609 -0.001219 0.006639 -0.110636 0.075719 0.038312 -0.081411 -0.076286 0.005031 0.017376 \n0.002460 0.062396 -0.031204 -0.026408 0.024750 -0.042569 -0.031270 -0.048558 0.018988 -0.051855 -0.165795 -0.047546 0.014711 -0.111244 0.069508 -0.046675 -0.048367 -0.064651 0.084473 0.007423 0.062561 0.073016 0.095949 -0.054850 0.020098 0.030933 0.120550 -0.043533 -0.039562 0.048001 0.050266 -0.061655 \n-0.004685 0.000569 -0.005040 0.000755 0.016194 -0.016907 -0.003853 -0.027512 -0.002388 -0.122261 -0.043735 -0.063413 -0.000743 0.019885 0.030741 -0.001230 0.004503 -0.042001 -0.040738 -0.054958 0.019498 0.058092 0.012181 0.011604 0.088081 -0.011669 0.050463 -0.009650 -0.099759 0.052670 0.033079 -0.054823 \n-0.018957 -0.048389 0.018017 0.018608 0.003876 -0.005877 0.031093 -0.006768 -0.022868 -0.186666 0.059326 -0.071245 -0.013824 0.113043 0.002428 0.030351 0.054222 -0.031200 -0.154587 -0.097681 0.016085 0.063763 -0.071813 0.037959 0.122679 -0.024949 0.083365 0.042657 -0.113388 0.044483 -0.020300 -0.049739 \n-0.162610 0.056241 -0.118504 0.059701 -0.048249 -0.050760 0.128754 0.265951 0.341609 0.110738 -0.135518 -0.115490 -0.099648 0.109674 -0.111021 -0.001668 0.147996 0.053026 0.009899 0.133886 -0.140765 0.281420 -0.073423 0.022914 0.003341 -0.107082 0.045444 0.043043 0.113012 0.091742 0.026333 -0.017815 \n-0.126385 0.047294 -0.133937 0.006951 0.013249 -0.040862 0.155073 0.099923 0.231954 0.071355 0.035571 -0.020532 0.035789 -0.047152 -0.111682 -0.081486 -0.017762 -0.053309 -0.092581 0.109210 -0.084614 0.095902 -0.156798 0.015064 -0.006130 -0.034144 0.003810 0.096272 0.077562 0.068091 0.099806 -0.014524 \n-0.102062 0.032861 -0.162514 -0.033062 0.053235 -0.049172 0.211614 -0.062326 0.101859 0.069886 0.111347 0.021553 0.111715 -0.109087 -0.102102 -0.084144 -0.067478 -0.113830 -0.119393 0.125400 0.016227 -0.026306 -0.082905 -0.025672 0.026668 -0.039523 -0.030999 -0.025383 0.025944 0.101807 0.084352 0.066410 \n-0.103049 0.018892 -0.134116 -0.057506 0.085295 -0.075070 0.225640 -0.144405 0.031393 0.080863 0.113508 0.010296 0.120999 -0.101779 -0.075648 0.016479 0.046589 0.002806 -0.048924 0.074128 0.075176 -0.057257 -0.024087 -0.108163 0.000415 -0.032716 -0.006385 -0.099955 -0.072957 0.116279 -0.045920 0.001768 \n-0.118193 0.025507 -0.074301 -0.045187 0.102224 -0.106225 0.190977 -0.183406 -0.056988 0.115954 0.028488 -0.058072 0.051232 -0.020783 -0.033793 0.115688 0.196134 0.252206 -0.028922 0.014279 0.144263 -0.020323 -0.035891 -0.202846 -0.042035 0.024356 0.035187 -0.020364 -0.137666 0.082970 -0.123162 -0.133798 \n-0.114891 0.034303 0.020158 -0.083090 0.110950 -0.093523 0.195756 -0.222891 0.000049 0.062378 -0.038594 -0.070011 -0.031324 0.025951 -0.050989 0.152416 0.124236 0.226855 0.058619 -0.083728 0.147437 -0.100354 -0.048409 -0.093370 0.021067 -0.021501 0.075465 0.053350 0.030439 -0.009232 0.022077 0.013296 \n-0.119054 0.041814 0.080899 -0.118384 0.117569 -0.039798 0.217612 -0.186713 0.061424 -0.013021 0.032289 -0.004352 0.013718 -0.012923 -0.047337 0.052392 -0.028514 -0.072800 0.060538 -0.120286 0.150527 -0.131318 -0.040075 0.022865 0.116495 -0.044144 -0.033261 0.089726 0.090247 -0.019005 -0.099180 0.032243 \n-0.127589 0.061951 0.116807 -0.112203 0.096946 -0.015793 0.192008 -0.110133 0.094506 -0.035109 0.018385 -0.023107 0.025450 -0.012428 0.016356 0.017251 -0.176952 -0.179326 0.003953 -0.063761 0.066204 -0.145205 -0.061318 0.093348 0.079680 -0.044576 -0.080078 0.067574 0.066271 -0.015407 -0.079506 0.025660 \n-0.167628 0.091833 0.139020 -0.044339 0.035606 0.000881 0.140626 0.061244 0.127579 -0.010045 -0.033982 -0.070995 0.103294 0.045499 0.188113 0.007461 -0.231605 -0.093872 -0.032287 0.031444 -0.029025 -0.159186 -0.067659 0.097096 -0.001771 0.025395 -0.072496 0.072185 0.056974 0.001864 -0.142344 -0.072921 \n-0.222999 0.110008 0.166622 0.025815 -0.046455 0.011291 0.094730 0.225386 0.142132 0.063790 -0.141547 -0.151380 0.152901 0.227167 0.341995 0.020984 -0.125819 0.080700 -0.003875 0.147870 -0.103510 -0.112049 0.060838 0.026481 0.002360 -0.001735 0.003516 -0.121181 0.009356 -0.055520 -0.272688 -0.184306 \n-0.070808 -0.009120 -0.026210 -0.021131 0.142808 0.065134 -0.022932 0.014346 -0.041991 -0.045258 -0.015726 -0.053231 -0.016220 -0.057895 0.037959 -0.002569 0.045020 0.182753 -0.004760 -0.023426 0.187006 -0.127475 -0.068984 0.003608 0.016304 0.251609 -0.074162 -0.005424 0.119073 -0.056019 0.243802 -0.201573 \n-0.043040 -0.021279 -0.039675 -0.068987 0.072616 0.041839 -0.035553 0.021125 -0.047249 -0.046312 -0.091650 0.065314 0.014862 0.021630 0.037385 -0.038912 0.087192 0.090884 0.018938 -0.029993 0.108400 -0.132754 -0.144603 0.001875 0.000511 0.132799 -0.035265 -0.036656 0.070582 0.018957 0.115565 -0.120813 \n-0.013099 -0.033833 -0.057395 -0.120972 0.001638 0.013844 -0.045488 0.024128 -0.045381 -0.032691 -0.171503 0.182971 0.047618 0.089191 0.036425 -0.062833 0.142780 0.003517 0.032819 -0.024918 0.029621 -0.141110 -0.194478 0.017932 -0.023168 0.021631 -0.032996 -0.040413 0.052797 0.099430 0.006638 -0.055234 \n0.014253 -0.043439 -0.071519 -0.170923 -0.067274 -0.016635 -0.054486 0.025628 -0.042909 -0.014397 -0.245480 0.284048 0.076878 0.161979 0.032496 -0.077883 0.209676 -0.089568 0.033273 -0.021634 -0.058239 -0.152057 -0.222782 0.045212 -0.019896 -0.097913 -0.058598 -0.076842 0.020694 0.196959 -0.081829 -0.016686 \n0.007477 -0.081618 -0.029910 -0.076472 -0.022163 0.011163 -0.087683 0.002195 -0.019605 -0.015751 -0.113156 0.056018 0.037931 0.020207 -0.034383 -0.088665 -0.106448 0.076275 -0.144134 0.065121 0.063580 0.042569 -0.085946 -0.025882 0.006452 -0.031628 -0.032174 0.120340 0.114240 0.111163 0.062736 0.001562 \n0.011139 -0.078719 -0.039792 -0.088259 -0.031509 0.003203 -0.088662 -0.003480 -0.017413 0.000271 -0.122991 0.075337 0.032618 0.028238 0.000050 -0.043599 -0.023300 0.057471 -0.089841 0.045665 0.056588 -0.005710 -0.127373 0.039749 -0.032548 -0.025521 0.011691 0.121196 -0.055707 0.006174 0.040378 -0.015242 \n0.016747 -0.068425 -0.033101 -0.106148 -0.042105 -0.005195 -0.093571 -0.003252 -0.013278 0.019877 -0.141296 0.098239 0.026182 0.038549 0.027194 -0.013311 0.023222 0.027468 -0.051849 0.024616 0.042335 -0.046240 -0.151009 0.086312 -0.079250 -0.032065 0.057885 0.101376 -0.123572 -0.012793 -0.031447 -0.016148 \n0.011518 -0.080232 -0.015629 -0.092422 -0.032834 0.001990 -0.089949 0.000905 -0.020972 0.041678 -0.110830 0.089378 0.020248 0.033745 0.015915 -0.008552 -0.034952 0.085307 -0.070805 0.028856 0.054686 -0.052184 -0.139190 0.026374 -0.099375 0.008474 0.040136 0.008345 -0.121948 0.062586 -0.075155 -0.079851 \n0.005555 -0.083743 -0.019684 -0.073439 -0.019149 0.007666 -0.095805 0.012232 -0.029099 0.058131 -0.090164 0.082750 0.022310 0.034570 0.016901 0.007638 -0.121652 0.124873 -0.099280 0.038547 0.060200 -0.051425 -0.086080 -0.019566 -0.155881 0.034615 0.037963 -0.058363 -0.078303 0.180599 -0.107838 -0.116726 \n-0.049163 -0.016282 -0.132207 0.052145 0.087552 0.078383 -0.070295 0.069966 0.006733 0.025127 0.114393 -0.079170 -0.035812 -0.098023 -0.031637 -0.085551 0.034260 -0.043249 -0.071715 0.111162 -0.045153 0.027413 -0.074832 0.049430 -0.100690 0.107424 0.026539 -0.051897 -0.109445 -0.033795 -0.107162 0.013996 \n-0.062681 0.002720 -0.117147 0.030493 0.112654 0.057038 -0.063566 0.076516 -0.000790 0.057968 0.129108 -0.077681 -0.058790 -0.194034 -0.013827 -0.021501 0.194945 -0.139099 -0.020951 -0.053653 -0.164209 -0.047216 -0.076934 -0.005145 -0.080876 0.056135 -0.001550 -0.151366 0.006616 0.064699 -0.081738 -0.119177 \n-0.060870 0.007231 -0.099162 0.023541 0.116719 0.052975 -0.077943 0.075988 -0.018912 0.054986 0.118379 -0.070836 -0.061627 -0.166439 -0.006231 -0.010003 0.171530 -0.103542 -0.015095 -0.045333 -0.102100 -0.042120 -0.054430 -0.024383 -0.070447 0.047844 -0.007643 -0.140867 0.049289 0.102239 -0.107740 -0.097239 \n-0.061271 -0.009933 -0.074183 0.027667 0.104064 0.089905 -0.083036 0.054611 -0.040969 0.017161 0.066002 -0.057724 -0.038106 -0.027491 -0.033383 -0.059233 -0.057495 0.084170 -0.062052 0.096381 0.132812 0.009311 -0.026879 -0.015465 -0.003377 0.081877 -0.045494 -0.090228 0.030092 0.058908 -0.139219 -0.017977 \n-0.048562 -0.043647 -0.087667 0.038267 0.103935 0.117829 -0.090585 0.052270 -0.028879 0.009657 0.085143 -0.083039 -0.046367 -0.001596 -0.033018 -0.048105 -0.051075 0.052992 -0.079957 0.145867 0.091881 0.030520 0.018662 0.027457 -0.094258 0.043722 -0.045175 -0.079949 -0.019677 0.036338 -0.044866 -0.005565 \n-0.052765 -0.049924 -0.108674 0.053399 0.088558 0.113405 -0.087415 0.054456 -0.012026 0.011413 0.095358 -0.080536 -0.035235 -0.020982 -0.039535 -0.065446 -0.042237 0.015724 -0.090878 0.143159 0.047516 0.028396 0.020776 0.061676 -0.122891 0.034260 -0.045151 -0.075123 -0.048202 0.021218 -0.086346 -0.005640 \n-0.069824 -0.000086 0.038965 -0.014722 0.119393 0.092526 -0.091609 0.044029 -0.050579 -0.005513 0.021446 -0.038810 -0.089553 -0.005461 -0.014542 -0.001024 -0.109063 0.072500 -0.024838 0.057627 0.146163 -0.024455 -0.003444 -0.010284 0.096202 -0.080695 0.036608 0.108937 0.117505 0.090974 -0.054494 0.009696 \n-0.073906 0.020581 0.065550 -0.036250 0.142283 0.070751 -0.099244 0.053274 -0.037082 0.021105 0.047970 -0.047143 -0.131235 -0.142730 0.046858 0.092322 0.087878 -0.113904 0.061187 -0.124464 -0.090246 -0.101586 -0.026517 -0.000548 0.029821 -0.078121 0.071779 0.040439 0.097549 0.117850 0.017069 -0.078031 \n-0.084093 0.019657 0.088135 -0.032875 0.143978 0.077518 -0.093574 0.051767 -0.029084 0.019953 0.048282 -0.055979 -0.142543 -0.133213 0.073838 0.107972 0.074020 -0.148200 0.077701 -0.168161 -0.122067 -0.135095 -0.021852 0.031179 -0.012511 -0.089141 0.057981 0.030165 0.019775 0.113770 0.028108 -0.077611 \n-0.077732 0.004400 0.117431 -0.028858 0.117351 0.107466 -0.096154 0.048393 -0.034070 -0.007019 0.028164 -0.060902 -0.133304 -0.030122 0.057624 0.067102 -0.092634 -0.024428 0.048480 -0.021547 0.005795 -0.081226 -0.044246 0.058250 -0.000055 -0.126365 0.093904 0.119172 -0.077699 0.003646 0.024751 -0.029424 \n-0.070891 -0.028670 0.090653 -0.013215 0.115244 0.133554 -0.102496 0.040208 -0.042072 0.002207 0.022201 -0.057807 -0.127981 0.016069 0.009495 0.070512 -0.138189 0.023363 0.014707 0.026086 0.070655 -0.057696 0.050936 0.063607 -0.033375 -0.163500 0.031972 0.094066 -0.014772 0.089923 0.016365 -0.003741 \n-0.066799 -0.029570 0.063743 -0.009256 0.119994 0.133213 -0.106335 0.046800 -0.047549 -0.002070 0.024232 -0.057584 -0.120081 0.018683 -0.005989 0.045779 -0.140461 0.051001 -0.008023 0.057119 0.105333 -0.041070 0.056032 0.043639 0.005861 -0.135100 0.031090 0.080471 0.052317 0.094827 0.013607 0.010504 \n0.072512 -0.137291 0.011413 0.088910 -0.019071 0.013112 0.008567 -0.053457 0.054968 0.016224 0.053233 -0.146438 0.132175 0.058274 -0.003809 -0.193429 -0.040454 -0.064533 0.180121 0.012250 0.057831 0.068713 -0.038240 -0.016466 0.096254 0.175188 -0.028450 0.007575 -0.066963 0.150497 -0.031323 -0.160149 \n0.031363 -0.146475 -0.011004 -0.012087 -0.158957 0.001794 -0.019511 -0.025038 0.063317 -0.004212 0.076995 -0.128801 0.006133 -0.025127 -0.006154 -0.067455 -0.042154 -0.019369 0.000193 -0.026607 0.080677 -0.005104 -0.063362 -0.022910 0.100988 0.009610 -0.099780 -0.099656 0.127043 -0.035259 -0.037352 -0.113167 \n0.024330 -0.135014 -0.013209 -0.080932 -0.210031 -0.025286 -0.022320 -0.011935 0.071001 -0.003927 0.042246 -0.125299 -0.045513 -0.111937 0.024484 0.033844 -0.000957 -0.024363 -0.031085 0.044868 0.080756 -0.055746 -0.114452 0.066711 0.061396 -0.071439 -0.012135 -0.152630 0.098979 -0.082951 -0.005477 0.031251 \n0.022502 -0.137697 0.003983 -0.079085 -0.208139 -0.028587 -0.030198 -0.013558 0.077290 0.019795 0.026102 -0.115821 -0.056553 -0.114366 0.013486 0.045295 -0.002441 0.015895 -0.015269 0.028028 0.069668 -0.063182 -0.074773 0.053007 0.059592 -0.093814 0.020831 -0.138663 0.058647 -0.095930 0.014654 0.014197 \n0.024298 -0.134278 0.018335 -0.086284 -0.208451 -0.030676 -0.022217 -0.003789 0.063934 0.025357 0.039980 -0.114782 -0.077190 -0.119616 0.009432 0.051973 0.008737 0.024815 -0.008834 0.044322 0.056599 -0.096705 -0.081728 0.037471 0.088602 -0.144553 0.032510 -0.080806 0.085975 -0.068531 0.022631 0.064358 \n0.029340 -0.148509 0.045892 -0.030155 -0.155587 -0.002411 -0.013070 -0.017176 0.060092 0.051607 0.066402 -0.091139 -0.048012 -0.051429 -0.019696 -0.018504 -0.032169 0.073233 0.095371 0.014101 0.013756 -0.140295 -0.012563 -0.065664 0.075532 -0.131125 0.043895 -0.095042 -0.001756 0.062797 -0.003969 0.083090 \n0.060310 -0.134113 0.094160 0.054789 -0.026111 0.013977 0.001538 -0.032457 0.058817 0.080984 0.047657 -0.104424 0.023708 0.043596 -0.026622 -0.122894 -0.014581 0.102399 0.295984 0.025604 -0.067005 -0.091774 0.007955 -0.038755 0.049748 -0.023367 0.043189 0.107814 -0.172528 0.248333 0.055082 0.027686 \n0.136829 0.039960 0.075643 0.168885 0.020216 0.017213 -0.018749 -0.034999 0.068867 0.057465 0.019663 -0.019016 -0.002685 0.107694 -0.043188 0.028189 -0.021960 0.093620 0.018062 -0.026893 -0.113341 -0.187892 -0.002560 -0.076924 -0.047809 -0.047455 -0.038833 0.027537 -0.085740 0.189210 -0.024645 0.134510 \n0.165775 0.117253 0.065112 0.221657 0.045285 0.026546 -0.009950 -0.054183 0.060512 0.041492 -0.049197 0.034561 -0.005005 0.057993 -0.028476 0.058966 -0.043845 0.027647 -0.072087 -0.082587 -0.085057 -0.143605 -0.058051 -0.149314 -0.065285 -0.064892 0.023272 -0.047588 0.007050 -0.039540 -0.034017 0.018223 \n0.165721 0.128775 0.053509 0.228408 0.048509 0.029615 -0.006518 -0.060629 0.058221 0.024428 -0.071743 0.038403 0.008890 0.033221 -0.029062 0.049402 -0.058452 -0.028976 -0.091098 -0.092588 -0.040752 -0.067291 -0.079845 -0.163841 -0.088038 -0.045471 0.006020 -0.070204 0.035926 -0.076724 -0.050694 -0.050887 \n0.162148 0.120771 0.046388 0.227986 0.052372 0.032400 -0.007894 -0.067333 0.057781 0.011350 -0.061779 0.019185 0.021963 0.053527 -0.044290 0.034493 -0.050319 -0.074480 -0.115841 -0.111889 -0.004818 -0.012681 -0.110647 -0.131176 -0.020146 -0.028971 -0.032063 -0.084223 0.052852 -0.062778 -0.055131 -0.098503 \n0.131578 0.043575 0.030666 0.180198 0.036295 0.024791 -0.007223 -0.070621 0.053016 0.003760 -0.013318 -0.055389 0.046220 0.088279 -0.040049 -0.050164 -0.036610 -0.140819 -0.067115 -0.123906 0.042056 0.073554 -0.131197 -0.070551 0.122038 0.029161 -0.171915 -0.065907 0.006511 0.020866 -0.101948 -0.097081 \n0.074461 -0.113365 0.007150 0.067401 -0.036676 0.008029 -0.009329 -0.057219 0.058733 0.016038 0.060618 -0.139140 0.113244 0.059722 0.001184 -0.169334 -0.054120 -0.086160 0.123964 -0.004887 0.047092 0.051497 -0.013632 -0.056937 0.086719 0.157158 -0.070914 0.059410 0.006217 0.214971 0.001671 -0.136829 \n0.041866 -0.165721 0.001606 -0.039447 -0.119067 -0.008686 -0.065758 -0.060394 0.087157 0.037837 0.015322 -0.097187 0.031724 -0.063058 0.016150 -0.000324 -0.075988 0.080251 -0.120586 -0.137752 -0.054140 0.013945 -0.071586 -0.047275 -0.022536 0.013692 0.023529 -0.036043 0.035725 -0.095918 -0.056874 -0.101299 \n0.038858 -0.160086 0.009436 -0.048868 -0.129877 -0.009274 -0.068853 -0.049718 0.092935 0.058714 0.000446 -0.088443 0.006775 -0.082693 0.012952 0.016964 -0.080665 0.098396 -0.105550 -0.132766 -0.068165 -0.000583 -0.033584 -0.046900 -0.046502 -0.046776 0.029578 -0.014343 0.045185 -0.091982 -0.051679 -0.078034 \n0.039583 -0.165223 0.027515 -0.039731 -0.121198 -0.012527 -0.063539 -0.052489 0.087148 0.076692 0.012806 -0.075131 -0.001257 -0.076326 -0.000558 0.016681 -0.060029 0.127544 -0.082959 -0.136985 -0.083566 -0.041841 -0.023861 -0.061765 0.009553 -0.033035 0.109089 0.034466 0.057395 -0.081732 -0.036234 -0.049454 \n0.070008 -0.111410 0.084019 0.045810 -0.045064 0.006408 -0.008808 -0.039047 0.058885 0.074756 0.056429 -0.087096 0.024368 0.035927 -0.043105 -0.110004 -0.023982 0.063944 0.223904 -0.000855 -0.064145 -0.086639 -0.010714 -0.109535 0.061439 -0.005413 0.019057 0.103042 -0.087952 0.231598 -0.031542 0.046849 \n0.147675 0.128069 0.051954 0.169378 -0.010820 0.003256 -0.005987 0.018413 0.034732 -0.019494 0.008266 -0.038131 -0.093810 0.016749 0.012485 0.068588 0.050721 0.030006 0.068914 0.235135 0.130319 -0.148716 -0.156445 -0.012208 0.019202 -0.057775 0.077501 0.007534 0.032232 -0.015861 0.100202 0.016602 \n0.147804 0.140475 0.046997 0.170300 -0.015185 0.003867 0.000131 0.016849 0.037335 -0.031348 -0.021016 -0.030106 -0.085808 -0.016604 0.015121 0.050683 0.056599 -0.016216 0.062091 0.240386 0.167002 -0.078811 -0.170643 -0.006854 -0.017745 -0.026654 0.037547 0.009172 0.086550 -0.061422 0.053061 -0.006055 \n0.144505 0.133797 0.044283 0.164995 -0.009293 0.009459 0.000942 0.011598 0.030590 -0.040002 -0.006531 -0.038797 -0.077355 -0.004494 -0.004566 0.028583 0.075314 -0.047409 0.040042 0.216351 0.181335 -0.039848 -0.200977 -0.002583 0.045742 0.006846 -0.005849 -0.020927 0.103800 -0.057377 0.058855 -0.047126 \n-0.127670 -0.019395 -0.152701 0.147038 -0.163494 0.009643 -0.051889 0.073861 0.124106 0.077093 -0.154740 -0.016459 -0.143296 -0.054188 -0.004884 0.132681 0.000283 -0.179110 -0.030697 -0.152982 0.221864 -0.133961 0.067400 0.022748 0.068347 0.322849 0.031875 0.131724 -0.204692 -0.040826 -0.214847 0.189689 \n-0.051097 -0.020429 -0.117043 0.128734 -0.087860 0.000650 -0.113603 0.108341 0.110325 0.067408 -0.055845 0.058153 -0.139098 -0.005033 -0.005046 0.062767 0.080744 -0.087207 -0.066172 -0.048201 0.143057 -0.111192 0.087453 -0.011149 0.165013 0.089565 -0.052520 0.143784 -0.102700 0.061337 -0.026812 0.046612 \n0.017957 -0.018466 -0.093775 0.047256 -0.021490 -0.051664 -0.081542 0.089379 0.118252 0.046450 0.045187 0.126112 -0.085919 -0.006485 0.060210 0.032938 0.042651 -0.050875 -0.131389 0.023528 0.067880 -0.132635 0.053977 -0.124419 0.258792 -0.053130 -0.053037 0.049822 -0.101081 0.086182 0.167605 -0.036659 \n0.076150 -0.023624 -0.078167 -0.008981 0.054321 -0.102460 -0.048956 0.064253 0.142423 0.031372 0.126763 0.116783 -0.003471 0.013866 0.123614 0.046489 0.107946 0.005721 -0.085120 -0.010597 0.029402 -0.108083 0.183305 -0.098704 0.111480 -0.138063 -0.088210 -0.041771 -0.017150 0.074847 0.157693 -0.097298 \n0.130211 -0.030104 -0.052876 -0.015825 0.125251 -0.167935 -0.058190 0.015453 0.159998 0.031845 0.139120 0.041757 0.029446 0.021507 0.216902 0.042933 0.145540 0.227404 -0.097266 0.027462 0.096923 -0.020958 0.326335 0.056042 -0.079156 -0.032904 -0.177023 0.067651 0.148061 -0.011254 -0.047050 -0.062333 \n0.160100 -0.020591 0.073028 -0.084279 0.107579 -0.167858 0.024773 -0.052515 0.330081 0.045389 0.047619 0.054216 -0.159717 0.049050 0.074438 -0.071928 0.073000 0.077855 -0.079403 -0.005745 0.115337 0.027314 0.059227 0.127195 -0.118726 0.105137 0.018601 0.089352 -0.073859 -0.050048 -0.056527 0.040262 \n0.118875 0.005525 0.134449 -0.069268 0.076843 -0.057295 -0.003943 -0.050301 0.286855 -0.017000 0.122783 0.044957 -0.022381 0.014952 0.021050 -0.125921 0.043913 -0.079991 -0.034488 -0.077230 0.047624 -0.072228 0.008826 0.224974 -0.167330 0.029708 -0.006486 -0.013198 -0.152282 -0.011729 0.110829 -0.088514 \n0.047410 0.021661 0.161183 0.007024 0.010465 -0.005076 -0.042547 -0.006884 0.187181 0.015920 0.096774 0.026353 0.052461 -0.068924 0.031601 -0.125633 0.002667 -0.068815 -0.102915 -0.088212 0.047977 -0.035176 -0.014703 0.108365 -0.218496 -0.020850 0.024215 0.041247 -0.078673 0.068406 0.091879 -0.137499 \n-0.037270 0.042104 0.191512 0.089159 -0.061427 0.064065 -0.070638 0.021728 0.009123 0.080157 0.027510 -0.007857 0.181834 -0.111970 -0.066892 -0.117558 0.170382 -0.004936 -0.090062 -0.088847 0.137662 0.024059 0.036565 0.044429 -0.162578 -0.106512 0.079351 0.176221 0.020320 0.069439 -0.023100 -0.160700 \n-0.127659 0.052831 0.218080 0.149029 -0.180044 0.153963 -0.040584 0.044709 -0.113100 0.127123 -0.064102 -0.061822 0.324255 -0.207728 -0.079543 -0.104631 0.330930 -0.004692 -0.122172 0.015971 0.201722 -0.006146 0.123772 -0.056887 -0.002298 -0.148188 -0.047997 0.212921 -0.003430 -0.067818 -0.126340 0.094468 \n0.100186 -0.056201 0.014654 -0.027183 0.059819 -0.079554 -0.075739 0.015997 0.041974 0.016190 -0.029544 0.058843 -0.004355 0.065751 0.072960 0.023367 0.002651 -0.077708 -0.082110 0.020636 0.120327 0.021310 0.178826 0.017509 0.060449 0.017252 0.207272 -0.220074 0.255053 0.194187 -0.104346 0.080808 \n0.134302 -0.074849 -0.015916 -0.047774 0.133455 -0.024532 -0.023605 0.046369 0.009748 0.029096 -0.025644 -0.016988 0.052106 0.065170 0.023676 -0.008297 0.007731 -0.082746 -0.050340 -0.003574 0.095542 0.000070 0.077049 0.005387 0.095145 -0.047716 0.175535 -0.154723 0.145047 0.079484 -0.095895 0.064032 \n0.177157 -0.088072 -0.044813 -0.066027 0.207154 0.014408 0.022835 0.081817 -0.016908 0.045492 -0.052223 -0.093208 0.092817 0.065713 -0.017032 -0.036526 0.068798 -0.063460 -0.035263 -0.007451 0.064335 -0.039349 0.038344 0.014502 0.121995 -0.030278 0.168708 -0.047178 0.076399 -0.042626 -0.075266 0.051585 \n0.213772 -0.098660 -0.072712 -0.095885 0.263880 0.057031 0.068645 0.127569 -0.046042 0.071869 -0.081866 -0.152551 0.141280 0.087141 -0.040169 -0.064121 0.109790 -0.075835 -0.010199 -0.018595 0.008590 -0.094326 -0.002782 0.053050 0.140328 -0.042802 0.097662 0.010519 -0.005431 -0.161484 -0.033603 0.067955 \n0.111146 -0.052125 -0.039589 -0.056411 0.086749 -0.038454 -0.029609 0.022565 0.017300 0.010442 -0.148171 -0.077020 0.092748 -0.069315 -0.135127 -0.090974 0.048732 -0.056533 0.066270 0.111576 -0.007348 0.004381 0.048222 0.071304 0.086447 -0.012128 0.038070 0.225025 0.169355 -0.076066 -0.065222 -0.034644 \n0.119518 -0.087339 -0.028727 -0.033307 0.159843 0.030709 -0.022978 0.042531 0.005707 0.031433 -0.094033 -0.125201 0.077877 -0.053727 -0.084565 0.014892 -0.010216 0.038907 0.021884 0.091222 -0.040355 0.017035 -0.075761 0.039488 0.085446 -0.044226 -0.121973 0.178273 -0.005398 -0.091853 0.035171 -0.009343 \n0.138929 -0.109301 -0.038418 -0.027398 0.194737 0.068161 0.004518 0.036800 -0.010392 0.052822 -0.055931 -0.143842 0.076298 -0.031117 -0.016929 0.110291 -0.086218 0.092566 -0.012656 0.027910 -0.043641 -0.017826 -0.117866 0.072061 -0.060839 0.087307 -0.102415 0.097614 -0.087840 -0.103232 0.044129 0.050442 \n0.123241 -0.082695 -0.052528 -0.018814 0.152091 0.026223 -0.018590 0.038210 -0.006586 0.090292 -0.044708 -0.134971 0.110901 0.015608 0.022078 0.154558 -0.002515 0.059595 0.018546 -0.085825 -0.043967 0.037662 -0.056542 0.037309 -0.035739 0.012674 -0.177575 -0.032934 -0.096480 -0.043342 -0.016870 0.061163 \n0.109359 -0.058783 -0.044116 -0.013742 0.100037 -0.018586 -0.056347 0.019161 -0.024171 0.095644 -0.041061 -0.114625 0.169554 0.027434 0.073217 0.195601 0.088374 -0.003206 0.051965 -0.124523 -0.021193 0.149033 -0.004197 0.008604 -0.020540 -0.091475 -0.085112 -0.024449 -0.028010 0.040116 -0.117547 0.081288 \n-0.048819 -0.058496 -0.182944 0.159195 -0.060102 0.037492 -0.059687 -0.161319 -0.084838 0.032177 0.055535 0.056391 0.016070 0.046550 0.013412 0.017124 -0.055227 -0.007413 0.020739 -0.020339 0.042022 -0.027660 0.058063 0.091148 0.023449 0.121671 0.086138 0.171646 0.234981 -0.028792 -0.085115 -0.184425 \n-0.016787 -0.034199 -0.155580 0.119062 -0.077118 0.018045 -0.025200 -0.142578 -0.033074 0.039494 0.029030 0.026100 0.058529 0.065274 0.072438 0.102829 0.013954 -0.015913 0.016131 0.066091 -0.080928 -0.069103 0.049484 0.180052 0.021632 -0.055251 -0.060621 0.102871 0.076161 0.029996 0.064714 -0.158486 \n-0.006105 -0.014942 -0.132981 0.095468 -0.053630 0.005874 -0.013353 -0.132733 -0.014940 0.052133 0.030401 -0.004328 0.059155 0.026928 0.061046 0.139171 0.040427 -0.015318 0.072145 0.076842 -0.100090 -0.048184 0.076674 0.148652 -0.042713 -0.173253 -0.045070 0.040911 0.030939 0.057554 0.057057 -0.160466 \n-0.000914 -0.014861 -0.100662 0.059721 -0.039040 -0.008775 -0.002506 -0.130991 -0.016230 0.014989 -0.010423 -0.076984 0.085757 -0.069931 0.104317 0.234857 0.011926 0.001686 0.020114 0.064549 -0.079026 -0.073036 -0.042226 0.082122 -0.008445 0.037548 0.087042 -0.041830 -0.063469 0.009221 0.006322 -0.059557 \n-0.001723 -0.028185 -0.127765 0.112066 -0.038481 -0.005842 -0.025715 -0.139761 -0.011786 0.018908 -0.016597 -0.035174 0.032677 0.015458 0.122420 0.175309 0.035396 -0.002847 0.055646 0.078584 -0.100762 -0.028384 0.010639 0.062880 0.000659 0.032393 0.066381 0.025923 0.038935 0.050735 -0.037601 -0.015488 \n-0.007857 -0.048874 -0.149596 0.129223 -0.045242 0.020073 -0.024593 -0.157734 -0.017308 0.016953 -0.014989 -0.013847 0.039950 0.051284 0.121690 0.136643 0.012716 0.007969 0.011594 0.069250 -0.081961 -0.028648 0.015288 0.105783 0.056717 0.093682 -0.020099 0.136615 0.089729 0.018129 -0.041058 -0.017297 \n0.014968 -0.022615 0.108531 -0.030625 0.033584 -0.026701 0.000384 -0.139020 0.065896 0.020416 -0.069814 -0.024952 0.029031 -0.051627 -0.044864 0.097390 0.043490 -0.080865 -0.133349 0.062214 -0.026677 0.050424 -0.031714 0.139060 -0.040284 0.115814 0.245962 0.040927 0.082200 0.160903 -0.103011 0.123227 \n-0.003093 -0.005830 0.123378 -0.003621 -0.017785 0.028896 -0.041486 -0.168737 0.037322 -0.001863 -0.072179 -0.010234 0.003025 -0.014615 -0.059697 0.023657 0.094080 -0.076385 -0.101919 0.113006 -0.037782 0.039741 0.076403 0.133884 0.015800 0.011606 0.044469 -0.049463 0.063026 0.076831 0.046752 -0.015511 \n-0.016304 -0.013787 0.139835 0.007812 -0.004980 0.066699 -0.038946 -0.189361 0.018357 -0.009476 -0.057374 -0.030800 0.008679 0.021762 -0.061868 0.026312 0.095255 -0.028445 -0.065848 0.101957 0.015820 0.057287 0.060886 0.155097 0.012816 -0.005557 -0.095032 -0.119423 -0.014735 0.003787 0.123841 -0.068439 \n-0.036090 -0.038522 0.171100 0.027585 -0.009572 0.110569 -0.042383 -0.189867 -0.027602 -0.033460 -0.046180 -0.036045 -0.000233 0.009186 -0.052105 0.015946 0.013302 -0.021382 -0.006806 0.096229 0.066533 0.067168 -0.000735 0.122342 -0.048788 0.074441 -0.106635 -0.167254 -0.063117 -0.054523 0.038987 -0.009327 \n-0.007205 -0.029936 0.142602 -0.002144 0.011448 0.054702 -0.018150 -0.173762 0.019666 -0.001295 -0.089224 -0.061806 -0.013648 -0.005145 -0.029354 0.093278 0.087790 -0.031848 -0.047791 0.095654 -0.047167 0.039894 0.009016 0.113162 -0.035211 0.099719 -0.058923 -0.126191 -0.041066 0.055719 0.044431 0.093278 \n0.002437 -0.023596 0.126411 -0.011106 0.005589 0.017088 -0.021015 -0.162810 0.058199 0.017440 -0.099544 -0.047196 -0.010311 -0.022562 -0.032469 0.090306 0.081802 -0.069768 -0.102428 0.094456 -0.122120 0.022061 -0.016397 0.068514 0.014273 0.090445 0.092085 -0.066165 -0.014547 0.142070 -0.011118 0.162910 \n0.029334 0.223392 -0.120937 -0.069565 -0.102310 -0.004731 -0.103222 -0.036828 -0.032194 -0.011997 0.164838 -0.040399 0.146021 0.143341 -0.144096 0.030003 -0.014571 0.040774 -0.000801 -0.036108 -0.025547 0.000958 0.036242 0.092272 0.021962 -0.120473 0.114638 0.031023 -0.009611 0.045476 -0.042213 -0.040690 \n0.094905 0.108778 -0.089173 -0.115939 -0.118836 0.053160 0.014577 0.050393 -0.012452 0.020021 0.087361 -0.010505 -0.004575 0.114162 -0.147850 0.022922 0.001361 -0.077056 -0.036642 -0.005244 0.029675 -0.145528 0.024925 0.009335 -0.054132 0.071855 0.159383 0.043467 0.001204 -0.005838 -0.068893 -0.059814 \n0.123533 0.003770 -0.070594 -0.139415 -0.092773 0.026845 0.087550 0.054032 -0.027141 -0.002838 0.007425 -0.074693 -0.015281 0.007464 -0.050123 0.044907 -0.023390 -0.182981 0.055840 0.123603 0.042441 -0.129995 0.081147 0.014114 -0.162787 -0.003357 -0.020851 0.069466 -0.073562 -0.041971 -0.019639 -0.093585 \n0.115344 -0.010169 -0.032149 -0.142821 -0.088509 0.034877 0.077903 0.037863 -0.030659 -0.018223 0.014628 -0.102351 -0.042293 0.028631 -0.033168 0.105375 0.012114 -0.147790 -0.007362 0.119103 0.043123 -0.046543 0.056739 -0.028301 -0.135385 -0.049352 -0.099956 0.102359 -0.097788 -0.004616 -0.034874 -0.074809 \n0.117257 0.003009 0.011154 -0.169168 -0.079847 0.019249 0.076356 0.010647 -0.051752 0.018442 -0.003119 -0.088213 -0.101739 0.002080 0.000203 0.106894 0.040191 -0.167377 -0.002184 0.137859 0.070513 0.006650 0.060892 -0.136605 -0.082514 -0.051486 -0.098920 0.045837 -0.112219 0.012311 -0.032421 -0.095770 \n0.089285 0.077508 0.019808 -0.178807 -0.089113 0.036306 0.016847 -0.009434 -0.007096 -0.032877 0.055601 -0.101866 -0.036522 0.051645 0.087084 0.045113 0.084132 -0.058205 0.079466 0.148531 0.068842 -0.034318 0.039556 -0.187735 -0.044516 0.086945 0.048514 -0.046501 -0.089197 0.022667 -0.016467 0.026856 \n0.004324 0.198835 0.045991 -0.158336 -0.093425 0.035811 -0.145307 0.002837 -0.009589 -0.125701 0.153856 -0.180990 0.018506 0.112340 0.090892 -0.005788 0.150669 0.106259 0.063352 -0.014873 0.006340 0.065954 -0.032212 -0.026891 0.021048 0.093658 -0.090510 -0.007142 0.080709 0.073971 -0.030469 0.076295 \n0.097750 0.141161 0.026392 -0.068865 -0.046034 0.073752 0.051406 0.000633 -0.014813 -0.044030 -0.015162 -0.073034 -0.095788 -0.063206 0.195831 -0.074314 0.006509 0.142319 -0.013589 -0.074751 0.000003 0.119487 -0.055202 -0.002444 0.006512 0.123531 -0.036318 0.084526 0.136015 0.050117 -0.003169 0.095154 \n0.139474 0.047960 0.027223 0.013219 -0.052381 0.079886 0.185103 0.025478 -0.068963 0.016056 -0.055130 0.005937 -0.120370 -0.186493 0.150029 -0.017434 -0.005442 0.111598 -0.076604 -0.099524 -0.058103 0.100202 -0.035654 0.038830 0.012508 -0.000658 -0.060497 0.066665 0.079722 0.142275 0.012077 0.022504 \n0.135698 0.032853 -0.025995 0.059223 -0.043914 0.100993 0.215069 0.037016 -0.071171 -0.006376 -0.032517 0.010760 -0.065507 -0.148230 0.056919 -0.042133 -0.033954 0.109405 -0.101728 -0.075055 0.005938 0.041755 -0.013549 0.110257 0.039366 0.018071 0.052085 0.056953 0.050230 0.144456 0.021841 0.001465 \n0.134227 0.041096 -0.061485 0.054966 -0.056764 0.084437 0.213343 0.055314 -0.052393 0.011308 -0.027370 0.021602 -0.013330 -0.140458 0.009733 -0.079107 -0.082394 0.100616 -0.025509 -0.086411 0.004174 -0.036076 0.009054 0.186944 -0.031461 0.053258 0.150028 0.014613 0.049660 0.122103 0.020441 0.011679 \n0.091513 0.134030 -0.116428 0.016728 -0.080013 0.082029 0.104084 0.018085 -0.027354 0.032150 0.078124 -0.022941 0.044163 -0.037802 -0.084995 -0.134114 -0.091533 0.133474 -0.008039 -0.109529 -0.007892 -0.148899 0.041573 0.097925 0.048025 0.040445 0.199117 -0.109140 -0.047717 -0.038369 0.062078 -0.039950 \n0.039624 0.253230 -0.100188 -0.082036 -0.064970 0.016263 -0.088788 0.010698 -0.013891 -0.041645 0.138828 -0.069040 0.112394 0.174971 -0.109718 0.055792 -0.043798 0.025729 -0.054612 -0.027360 0.036663 0.001664 -0.042717 0.175052 0.041398 -0.063698 0.045263 0.022938 -0.035608 0.013511 0.027593 -0.009450 \n0.107480 0.009787 -0.060226 -0.083488 -0.074567 0.034945 0.059688 0.035237 -0.019732 -0.013617 -0.023118 -0.014135 0.041612 0.026587 -0.059716 0.051098 -0.073035 -0.121685 -0.039252 -0.051624 -0.049556 -0.068248 0.055507 -0.058828 -0.149640 0.107282 -0.027147 0.087519 0.153781 0.055056 0.036505 -0.031854 \n0.106622 -0.003861 -0.021348 -0.099473 -0.070178 0.052940 0.061288 0.031461 -0.019104 -0.020812 -0.018499 -0.044968 0.000296 0.018823 -0.027740 0.095604 -0.048958 -0.112997 -0.102798 -0.035527 -0.071991 0.001553 0.025803 -0.115849 -0.127057 0.024527 -0.124135 0.145897 0.129750 0.085928 0.040547 -0.017936 \n0.099110 0.010502 0.036882 -0.130805 -0.078845 0.027013 0.053483 0.004597 -0.037911 -0.001205 -0.036378 -0.035327 -0.044486 -0.011252 0.014448 0.110590 -0.005294 -0.106933 -0.100168 -0.008829 -0.039386 0.052912 0.051532 -0.215856 -0.091016 0.055316 -0.098031 0.095330 0.149157 0.121476 0.032213 -0.016403 \n0.028004 0.226894 0.023564 -0.130075 -0.083078 0.026565 -0.107154 -0.001028 -0.031965 -0.082441 0.154939 -0.156561 0.011600 0.088391 0.059746 -0.043768 0.117637 0.096381 0.031384 -0.037298 -0.019471 -0.011911 -0.082806 -0.023826 -0.035251 0.152668 0.054600 0.036817 0.086273 0.096746 -0.042278 0.077595 \n0.134031 0.066380 0.033211 -0.032357 -0.052881 0.055878 0.125886 0.036614 -0.086323 -0.015670 -0.071590 0.038155 -0.125581 -0.112508 0.087640 0.043625 0.069072 0.062524 -0.018971 0.019054 -0.005686 0.107858 0.030051 0.104346 0.099672 -0.109073 -0.122930 -0.020258 -0.095912 0.104783 -0.177058 -0.071379 \n0.136503 0.052062 -0.025896 0.007574 -0.042908 0.068754 0.150283 0.049774 -0.067584 -0.033491 -0.036563 0.046275 -0.076289 -0.108802 0.035446 -0.013211 0.035519 0.074173 0.001881 0.011113 0.029676 0.032394 0.039140 0.168346 0.109882 -0.092465 -0.106862 -0.037770 -0.143106 0.047406 -0.169767 -0.087501 \n0.128717 0.065942 -0.069026 0.010173 -0.058821 0.055130 0.146527 0.062138 -0.051715 -0.023275 -0.042414 0.062661 -0.040407 -0.097958 -0.000170 -0.056738 0.005825 0.052625 0.081622 0.015050 0.039520 -0.053590 0.084135 0.214255 0.067782 -0.036374 -0.005244 -0.128133 -0.144167 0.012225 -0.152893 -0.083695 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n32\n6\n440.568563 348.267724 258.176898 158.822108 129.944287 110.045102 74.920301 64.103548 54.641760 39.545215 36.676344 31.215370 29.972900 22.199493 20.407369 17.614554 12.651972 10.796969 9.472633 9.060509 7.384158 5.845468 4.290567 3.094468 2.205294 2.103393 1.662684 1.186149 0.669309 0.585443 0.354509 0.307398 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/pdms/In-the-wild_aligned_PDM_68.txt",
    "content": "# The mean values of the components (in mm)\n204\n1\n6\n-73.393523 \n-72.775014 \n-70.533638 \n-66.850058 \n-59.790187 \n-48.368973 \n-34.121101 \n-17.875411 \n0.098749 \n17.477031 \n32.648966 \n46.372358 \n57.343480 \n64.388482 \n68.212038 \n70.486405 \n71.375822 \n-61.119406 \n-51.287588 \n-37.804800 \n-24.022754 \n-11.635713 \n12.056636 \n25.106256 \n38.338588 \n51.191007 \n60.053851 \n0.653940 \n0.804809 \n0.992204 \n1.226783 \n-14.772472 \n-7.180239 \n0.555920 \n8.272499 \n15.214351 \n-46.047290 \n-37.674688 \n-27.883856 \n-19.648268 \n-28.272965 \n-38.082418 \n19.265868 \n27.894191 \n37.437529 \n45.170805 \n38.196454 \n28.764989 \n-28.916267 \n-17.533194 \n-6.684590 \n0.381001 \n8.375443 \n18.876618 \n28.794412 \n19.057574 \n8.956375 \n0.381549 \n-7.428895 \n-18.160634 \n-24.377490 \n-6.897633 \n0.340663 \n8.444722 \n24.474473 \n8.449166 \n0.205322 \n-7.198266 \n-29.801432 \n-10.949766 \n7.929818 \n26.074280 \n42.564390 \n56.481080 \n67.246992 \n75.056892 \n77.061286 \n74.758448 \n66.929021 \n56.311389 \n42.419126 \n25.455880 \n6.990805 \n-11.666193 \n-30.365191 \n-49.361602 \n-58.769795 \n-61.996155 \n-61.033399 \n-56.686759 \n-57.391033 \n-61.902186 \n-62.777713 \n-59.302347 \n-50.190255 \n-42.193790 \n-30.993721 \n-19.944596 \n-8.414541 \n2.598255 \n4.751589 \n6.562900 \n4.661005 \n2.643046 \n-37.471411 \n-42.730510 \n-42.711517 \n-36.754742 \n-35.134493 \n-34.919043 \n-37.032306 \n-43.342445 \n-43.110822 \n-38.086515 \n-35.532024 \n-35.484289 \n28.612716 \n22.172187 \n19.029051 \n20.721118 \n19.035460 \n22.394109 \n28.079924 \n36.298248 \n39.634575 \n40.395647 \n39.836405 \n36.677899 \n28.677771 \n25.475976 \n26.014269 \n25.326198 \n28.323008 \n30.596216 \n31.408738 \n30.844876 \n47.667532 \n45.909403 \n44.842580 \n43.141114 \n38.635298 \n30.750622 \n18.456453 \n3.609035 \n-0.881698 \n5.181201 \n19.176563 \n30.770570 \n37.628629 \n40.886309 \n42.281449 \n44.142567 \n47.140426 \n14.254422 \n7.268147 \n0.442051 \n-6.606501 \n-11.967398 \n-12.051204 \n-7.315098 \n-1.022953 \n5.349435 \n11.615746 \n-13.380835 \n-21.150853 \n-29.284036 \n-36.948060 \n-20.132003 \n-23.536684 \n-25.944448 \n-23.695741 \n-20.858157 \n7.037989 \n3.021217 \n1.353629 \n-0.111088 \n-0.147273 \n1.476612 \n-0.665746 \n0.247660 \n1.696435 \n4.894163 \n0.282961 \n-1.172675 \n-2.240310 \n-15.934335 \n-22.611355 \n-23.748437 \n-22.721995 \n-15.610679 \n-3.217393 \n-14.987997 \n-22.554245 \n-23.591626 \n-22.406106 \n-15.121907 \n-4.785684 \n-20.893742 \n-22.220479 \n-21.025520 \n-5.712776 \n-20.671489 \n-21.903670 \n-20.328022 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n204\n34\n6\n-0.007395 -0.093690 0.039362 0.204443 -0.104698 0.033568 -0.090173 0.010170 -0.042341 0.104375 0.032695 0.038750 0.064385 -0.037025 0.058377 0.032457 -0.100005 -0.082042 -0.053440 0.008782 -0.027164 -0.000368 -0.129614 0.035436 -0.062685 -0.075349 0.140764 -0.032290 -0.115829 -0.037865 0.068590 0.008886 -0.066442 0.259211 \n-0.002553 -0.075344 0.037127 0.201967 -0.069124 0.041645 -0.100939 0.018352 0.006598 0.081569 0.004894 0.038886 0.050631 0.056656 0.055353 -0.028457 -0.022518 -0.089693 -0.079196 0.010851 -0.017583 0.015095 -0.077834 -0.000944 -0.104255 -0.060338 0.106169 -0.065799 -0.067068 -0.051588 0.080490 0.063152 -0.047531 0.178216 \n-0.002097 -0.055385 0.025705 0.215785 -0.026274 0.053548 -0.086364 0.041926 0.035784 0.033485 -0.014602 0.049999 0.031950 0.125201 0.045372 -0.064200 0.070073 -0.074313 -0.083942 -0.007566 -0.003666 0.034226 -0.018354 -0.011639 -0.084633 -0.039431 0.064057 -0.056515 -0.046926 -0.074699 0.073477 0.074109 -0.054882 0.046675 \n-0.005533 -0.035821 0.019787 0.226957 0.030415 0.059508 -0.051058 0.057386 0.023240 -0.025487 -0.013088 0.043330 0.025141 0.113119 0.017370 -0.071064 0.108140 -0.049138 -0.043417 -0.065375 0.012959 0.070483 0.075536 -0.035685 -0.005847 0.012618 0.040297 -0.049743 -0.061354 -0.087164 0.033762 0.048771 -0.096563 -0.045189 \n-0.006914 0.011987 0.030022 0.205560 0.099633 0.072384 -0.008313 0.060244 -0.006584 -0.104943 -0.018036 0.032806 0.029879 0.068434 -0.043721 -0.052564 0.077505 -0.062192 0.026865 -0.122834 -0.001529 0.064443 0.160557 -0.036750 0.124476 0.072641 0.048609 -0.043443 -0.060729 -0.040443 -0.050540 0.050509 -0.118886 -0.146867 \n-0.004182 0.064263 0.036886 0.149341 0.158261 0.075501 0.030568 0.067074 -0.040268 -0.167116 -0.020230 0.029360 0.046726 0.033410 -0.121685 -0.004528 -0.017505 -0.050390 0.063237 -0.133203 -0.070794 0.005133 0.178032 -0.002768 0.153446 0.105966 0.061693 0.011010 -0.027442 0.001944 -0.103967 0.045708 -0.083197 -0.172889 \n0.016954 0.088125 0.034199 0.081242 0.170872 0.048964 0.063434 0.083842 -0.058188 -0.164769 -0.012135 0.002128 0.084787 -0.009691 -0.136231 0.068411 -0.091616 0.042046 0.053339 -0.068859 -0.141834 -0.040710 0.017020 0.034007 0.053187 0.096749 0.068416 0.075079 0.038728 0.063588 -0.109581 0.007737 0.033105 -0.152075 \n0.021733 0.081042 0.015310 0.029492 0.112212 0.012959 0.065003 0.095565 -0.047228 -0.120559 -0.022904 -0.051461 0.036411 -0.036990 -0.101765 0.150918 -0.102123 0.163128 0.047199 0.037063 -0.223718 -0.065303 -0.149191 -0.017823 -0.134138 0.084419 0.010718 0.087970 0.043030 0.040099 -0.068487 -0.008773 0.077035 -0.082281 \n0.024713 0.084952 0.002319 -0.002792 0.028194 -0.016856 0.036083 0.087381 -0.020743 -0.024386 -0.027268 -0.091654 -0.009025 -0.052124 -0.033407 0.168353 -0.061447 0.244847 0.024587 0.064221 -0.161138 0.020993 -0.164584 -0.068179 -0.181775 0.087509 -0.068202 0.059078 -0.004250 -0.001472 -0.031248 -0.049011 -0.019415 0.022163 \n0.025404 0.095704 -0.013447 -0.036864 -0.064015 -0.035962 0.001144 0.050101 0.006172 0.084003 -0.015860 -0.102295 -0.028308 -0.053076 0.017520 0.110370 -0.009494 0.248830 -0.017769 0.064655 -0.062487 0.133872 -0.077193 -0.077102 -0.104610 0.084923 -0.116710 -0.000424 -0.001453 -0.001504 -0.004986 -0.072792 -0.151917 0.063339 \n0.027234 0.088446 -0.037011 -0.090962 -0.124015 -0.052844 -0.020061 0.017974 0.031824 0.138013 -0.009523 -0.093892 -0.061812 -0.016350 0.043025 0.034106 0.036403 0.177560 -0.066137 0.039288 0.041972 0.145398 -0.004524 -0.021113 0.025045 0.065780 -0.102128 -0.061053 0.010043 -0.018688 0.018733 -0.002990 -0.240304 0.007274 \n0.033301 0.051083 -0.050161 -0.137239 -0.130410 -0.078352 -0.030467 -0.016581 0.042916 0.153230 -0.008295 -0.048519 -0.056020 -0.017449 0.051644 -0.021078 0.049456 0.042549 -0.075780 0.051205 0.057200 0.117965 0.058462 0.078890 0.121853 0.027311 -0.037081 -0.082100 0.013948 0.019188 0.029703 0.076102 -0.243643 -0.067711 \n0.034561 -0.024817 -0.037181 -0.171731 -0.091823 -0.080914 -0.018022 -0.019280 0.055534 0.112038 -0.006388 0.000380 -0.027767 -0.031689 0.027915 -0.012644 0.004351 -0.072270 -0.053990 0.028620 0.011428 0.077628 0.073278 0.159948 0.096141 0.006855 0.036568 -0.013290 -0.001587 0.033748 0.052795 0.164287 -0.166678 -0.098685 \n0.031311 -0.094373 -0.015266 -0.181991 -0.032285 -0.067979 0.020822 -0.028457 0.050194 0.060652 0.006169 0.060618 0.005717 -0.047184 0.006512 0.012425 -0.059877 -0.141325 -0.029145 -0.010906 -0.069894 0.032082 0.054382 0.151384 0.041519 0.026929 0.076049 0.067107 -0.027885 0.040313 0.041582 0.194576 -0.086531 -0.080338 \n0.030327 -0.127857 -0.008012 -0.166922 0.025066 -0.062660 0.063753 -0.029802 0.044933 0.028298 0.025152 0.109179 0.013585 -0.043385 0.003918 0.007538 -0.080941 -0.141969 0.011067 -0.055727 -0.099322 -0.018025 0.009874 0.065510 -0.019589 0.084273 0.059580 0.099232 -0.026102 0.043042 0.023322 0.151827 -0.031702 -0.023000 \n0.030239 -0.141766 -0.020490 -0.154724 0.073176 -0.066098 0.076339 -0.045120 0.049403 -0.014474 0.024782 0.109864 0.005943 -0.008921 0.001482 -0.008304 -0.060453 -0.100507 0.030769 -0.093919 -0.042422 -0.045051 -0.014060 -0.020183 -0.093279 0.134797 0.006048 0.040717 -0.038709 0.039630 0.006137 0.076303 0.021244 0.014680 \n0.030493 -0.158938 -0.031460 -0.156567 0.120023 -0.070626 0.084879 -0.065759 0.063746 -0.047728 -0.002344 0.094855 -0.013995 0.014159 0.011125 -0.034394 -0.064702 -0.055871 0.041269 -0.110361 0.045722 -0.064289 -0.013213 -0.104140 -0.133226 0.183607 -0.037284 0.002311 -0.041808 0.033510 -0.034315 0.012710 0.065609 0.046794 \n-0.029307 -0.000612 0.006003 0.066897 -0.126329 0.008282 0.106455 -0.058070 -0.127455 0.112217 0.028721 -0.008227 0.023123 -0.184660 -0.000131 0.060814 -0.038192 0.061802 0.055924 -0.086767 -0.011372 0.116214 0.039681 -0.047083 0.046626 0.042705 0.011194 -0.002237 0.023832 0.021378 0.074731 -0.040608 -0.025003 0.203421 \n-0.038458 0.020813 -0.004500 0.021759 -0.086203 0.017004 0.123118 -0.051398 -0.154096 0.048594 0.160783 0.035847 -0.105209 -0.131283 -0.034334 0.088202 -0.022053 0.065794 0.043514 -0.164773 0.038562 0.221823 -0.008980 0.076251 -0.067806 0.014541 0.027230 -0.014379 -0.016754 -0.010835 0.026126 -0.010414 0.029183 0.058614 \n-0.021490 0.036216 -0.005865 0.020024 -0.060804 0.026512 0.126241 -0.083197 -0.120419 0.032472 0.187630 -0.015555 -0.159327 -0.011903 -0.087082 0.079345 -0.061540 0.015194 0.062573 -0.039469 0.032277 0.191416 0.026454 0.082398 -0.056523 -0.017131 0.027510 -0.008610 0.004494 -0.034043 -0.017450 0.006765 0.078634 -0.036122 \n0.000867 0.042636 0.003104 0.029552 -0.036234 0.016402 0.123844 -0.126971 -0.075012 0.060293 0.148833 -0.081953 -0.173218 0.088994 -0.136465 0.063644 -0.092909 -0.034989 0.083554 0.107321 0.022452 0.121649 0.095422 0.064093 -0.044127 -0.041514 -0.001734 -0.007934 0.040275 -0.042178 -0.037676 0.021143 0.091871 -0.056272 \n0.024120 0.058528 0.006018 0.028610 -0.012243 0.008813 0.097121 -0.159602 -0.017056 0.077811 0.087002 -0.120528 -0.150197 0.184860 -0.180434 0.040369 -0.097894 -0.042266 0.075094 0.203623 0.039492 0.033806 0.132455 0.059185 -0.102173 -0.071020 -0.051542 0.002257 0.073697 -0.021845 -0.035627 0.009661 0.123071 -0.065039 \n-0.056420 0.059125 -0.030321 -0.057038 0.055493 -0.007116 -0.126529 0.019949 -0.058614 -0.078223 0.002145 0.050900 0.167834 -0.173333 0.181067 -0.004047 0.063488 0.151506 -0.125850 -0.136067 0.023547 0.034287 -0.056834 0.003824 0.134406 -0.055792 0.087938 0.068804 -0.033240 0.076407 -0.033551 -0.097730 0.084249 -0.079917 \n-0.038591 0.041658 -0.021071 -0.054808 0.085131 -0.020672 -0.150923 -0.028119 -0.005051 -0.082123 -0.027470 0.004437 0.151800 -0.139134 0.205779 0.055682 0.024516 0.096154 -0.038417 -0.113849 0.045637 0.075165 -0.039525 0.011140 0.058496 -0.061165 0.070389 0.031381 -0.020956 0.065917 -0.033395 -0.096762 0.067056 0.005758 \n-0.007940 0.026461 -0.003035 -0.037585 0.112114 -0.032320 -0.154598 -0.070183 0.034104 -0.066949 -0.048103 -0.076036 0.108505 -0.081056 0.189128 0.100712 0.001290 0.009722 0.046728 -0.023127 0.013390 0.076873 0.012671 0.031037 0.075639 -0.064473 0.061414 -0.019564 0.014597 0.046786 -0.011485 -0.084927 -0.000334 0.061175 \n0.018946 -0.000145 0.011179 -0.029672 0.136914 -0.030086 -0.147824 -0.105721 0.066935 -0.079902 -0.036968 -0.110909 0.052283 0.004188 0.126896 0.134626 -0.006676 -0.052490 0.091685 0.063396 -0.013036 0.002970 0.053049 0.019284 0.038579 -0.025497 0.025340 -0.089926 0.050450 -0.006666 -0.013118 -0.030505 -0.058633 0.064143 \n0.026629 -0.059165 -0.000823 -0.058599 0.151849 -0.022073 -0.130501 -0.084385 0.071751 -0.134872 0.039773 -0.057794 -0.044027 0.076494 0.035989 0.101529 0.005315 -0.029779 0.032498 0.028803 0.005618 -0.063529 -0.004924 -0.022183 -0.113427 0.055922 -0.008186 -0.140830 0.090960 -0.114112 -0.009417 0.083947 -0.041032 -0.006371 \n-0.010951 0.075350 -0.001817 -0.012876 0.013096 0.004579 -0.016153 -0.047823 -0.029850 0.016150 0.033334 0.015682 0.035621 0.037191 -0.019504 -0.019256 0.044839 0.020295 -0.073131 0.039780 -0.036879 -0.040970 0.053655 -0.001482 -0.002821 -0.032902 -0.000066 0.005729 0.001116 0.056517 -0.017058 -0.021947 0.037761 -0.039276 \n-0.012100 0.064207 -0.001096 -0.013941 0.006814 0.008710 -0.012277 -0.037790 -0.022203 0.014245 0.023934 0.012607 0.028185 0.041440 -0.015444 -0.022646 0.048805 0.020521 -0.080918 0.029123 -0.081415 -0.044517 0.073681 0.021481 -0.045782 -0.048161 0.003254 0.036460 -0.020011 0.065280 0.002563 -0.013150 0.045393 -0.015692 \n-0.013403 0.059276 0.001032 -0.014545 0.001798 0.010646 -0.008624 -0.026081 -0.017773 0.015405 0.015492 0.014040 0.022709 0.044120 -0.010399 -0.025661 0.051172 0.017503 -0.087720 0.021120 -0.123991 -0.047505 0.087387 0.047337 -0.088646 -0.065851 0.004667 0.069448 -0.040053 0.076718 0.023178 -0.004565 0.059432 0.003138 \n-0.013951 0.058265 0.004661 -0.015235 -0.000197 0.012932 -0.005151 -0.015313 -0.012719 0.014418 0.008297 0.018443 0.016678 0.051541 -0.004867 -0.028055 0.052224 0.011609 -0.091004 0.016980 -0.158439 -0.046922 0.104617 0.077207 -0.137148 -0.078657 0.005486 0.103939 -0.062683 0.082257 0.041975 0.000801 0.070429 0.027527 \n-0.012210 0.028100 -0.049457 -0.000857 0.000872 -0.019030 0.038293 -0.002178 0.022197 0.008799 -0.017828 -0.005589 -0.010209 -0.026452 0.021247 -0.052723 0.074659 0.058170 -0.117953 -0.020708 -0.092993 -0.079196 0.037883 0.239302 -0.027228 -0.100648 0.058909 0.082147 0.014782 0.033906 0.058190 -0.035069 -0.021313 -0.027376 \n-0.009373 0.029412 -0.026531 -0.009199 -0.003610 -0.013154 0.015847 0.006945 0.008617 0.011675 -0.022788 0.000421 -0.007697 0.005751 0.004594 -0.044864 0.063024 0.031416 -0.086743 -0.005786 -0.098907 -0.064158 0.049203 0.156108 -0.042964 -0.089257 0.038446 0.080608 -0.015415 0.071399 0.069731 -0.012170 0.005798 -0.005172 \n-0.007108 0.026011 0.001392 -0.008785 -0.008676 0.005534 -0.002323 0.008151 -0.006538 0.012718 -0.016466 0.016828 0.006599 0.032792 -0.008449 -0.031395 0.045979 0.010267 -0.064263 0.010528 -0.087206 -0.035954 0.070434 0.037452 -0.075439 -0.048176 -0.000307 0.074329 -0.047401 0.093968 0.057921 0.003554 0.025206 0.029137 \n-0.008616 0.022966 0.025314 -0.006647 -0.012574 0.026313 -0.017855 0.005573 -0.012147 0.015962 -0.009681 0.035391 0.015389 0.061577 -0.023327 -0.005465 0.025007 -0.014906 -0.045808 0.023055 -0.069940 -0.012007 0.101986 -0.066696 -0.085795 -0.002255 -0.051891 0.079767 -0.057766 0.078189 0.009062 0.022309 0.030125 0.051138 \n-0.007559 0.013536 0.044396 -0.007128 -0.015567 0.038755 -0.032699 0.009439 -0.018290 0.012901 -0.008295 0.047013 0.018435 0.076580 -0.045586 0.016721 0.010805 -0.037831 -0.013755 0.026798 -0.057710 -0.005862 0.113804 -0.159457 -0.085242 0.031892 -0.090113 0.066240 -0.055402 0.053706 -0.034191 0.047815 0.018971 0.071248 \n-0.009091 0.030428 0.013028 0.035270 -0.081955 0.036276 0.100983 -0.087388 -0.023476 0.093938 -0.074920 -0.042748 0.009283 -0.052713 0.069944 0.007487 0.044433 0.011768 -0.036858 -0.036562 0.024165 -0.141056 -0.039714 -0.075826 0.052239 0.062199 -0.048408 -0.033798 0.070343 0.124688 -0.003466 0.051026 0.026850 -0.026589 \n-0.006597 0.030631 0.019664 0.021478 -0.061211 0.024677 0.092608 -0.095386 -0.041650 0.068021 -0.054620 -0.036136 0.003440 -0.021689 0.046307 0.007803 0.056620 0.018329 -0.048106 -0.037355 0.044779 -0.170111 -0.043462 -0.076020 0.064547 0.063396 -0.047873 -0.054226 0.076392 0.081326 0.000747 0.074683 0.030657 -0.067772 \n-0.006641 0.024694 0.004169 0.027776 -0.027517 0.013511 0.064805 -0.082940 -0.047464 0.039102 -0.047983 -0.025260 -0.012175 0.006766 0.039254 0.004585 0.108825 0.031769 -0.009359 -0.008230 0.016421 -0.164640 -0.117072 -0.007971 0.069640 0.013253 -0.033817 -0.074767 0.071010 0.026436 0.003056 0.090554 0.005886 -0.126966 \n0.003124 0.009371 0.014768 0.046412 -0.023874 0.007554 0.036147 -0.057698 -0.058069 0.021256 -0.033315 -0.028152 -0.018259 0.027895 0.014161 0.004788 0.111066 0.042408 -0.022688 -0.017329 0.008180 -0.162840 -0.121148 0.012000 0.040787 0.005472 -0.028935 -0.070284 0.051087 0.002654 0.026039 0.077896 -0.025666 -0.138535 \n-0.000470 0.012891 0.009958 0.038234 -0.036776 0.012638 0.068663 -0.077589 -0.036998 0.050930 -0.057174 -0.042770 -0.006013 -0.005012 0.037131 0.011314 0.092853 0.040593 -0.014258 -0.022855 0.028109 -0.170083 -0.092356 -0.017012 0.053071 0.021873 -0.039264 -0.061002 0.057296 0.043219 0.021993 0.064114 -0.018287 -0.100373 \n-0.004849 0.015938 0.022983 0.026902 -0.073622 0.023429 0.089584 -0.088285 -0.026052 0.080286 -0.059955 -0.060351 0.007903 -0.035545 0.046797 0.007563 0.038369 0.030247 -0.059021 -0.056175 0.056872 -0.166273 -0.011250 -0.093711 0.035468 0.071037 -0.053530 -0.042127 0.065314 0.098363 0.023179 0.056227 0.018585 -0.031417 \n-0.022520 -0.008135 -0.028919 -0.050592 0.028229 -0.006670 -0.060855 -0.025108 0.032576 -0.018823 0.066255 0.018170 0.050211 0.001974 -0.062666 -0.057057 -0.027695 0.045343 -0.016243 0.061633 0.033008 0.024487 0.074017 -0.133643 0.041960 -0.008005 0.017760 -0.020807 0.009949 -0.031184 -0.022929 0.014085 0.078201 0.073117 \n-0.008675 -0.004691 -0.013081 -0.031226 0.031157 -0.009924 -0.096969 -0.029153 0.000787 -0.038194 0.087791 0.000669 0.047391 0.025733 -0.093797 -0.072336 -0.039133 0.081739 -0.024145 0.067113 0.036711 0.015968 0.050245 -0.135056 0.022818 0.008747 0.011110 -0.044613 0.004409 -0.030744 -0.014206 -0.016314 0.026864 0.033661 \n-0.008350 -0.011949 -0.026508 -0.026911 0.063836 -0.024789 -0.126394 -0.011390 -0.004841 -0.063477 0.084207 0.008974 0.040823 0.048228 -0.106669 -0.072520 0.012682 0.093989 0.007098 0.087810 0.011179 0.012357 -0.005468 -0.074058 0.051617 -0.038525 0.027206 -0.052944 -0.001957 -0.069244 -0.001150 -0.012855 0.002275 -0.012184 \n0.001527 -0.031469 -0.019959 -0.032691 0.084353 -0.036934 -0.139297 0.005872 -0.012615 -0.087659 0.090429 0.021235 0.029692 0.064764 -0.125564 -0.055872 0.037072 0.084147 -0.001494 0.073344 0.027889 -0.000113 -0.020299 -0.040534 0.015971 -0.035466 0.033553 -0.071962 -0.021193 -0.078379 0.024814 -0.018801 -0.021044 -0.038763 \n-0.009394 -0.028927 -0.028906 -0.024460 0.073718 -0.026898 -0.120720 -0.003723 -0.012295 -0.070463 0.075708 0.021766 0.032103 0.053181 -0.101806 -0.052394 0.030694 0.112096 0.015064 0.098439 -0.005609 0.016172 -0.039627 -0.035390 0.062895 -0.064759 0.040731 -0.023003 -0.019984 -0.078158 0.013167 -0.008582 -0.012839 -0.026034 \n-0.014806 -0.020586 -0.019304 -0.037248 0.040627 -0.009079 -0.093808 -0.017684 0.001926 -0.042956 0.076953 0.012620 0.038220 0.029003 -0.084598 -0.051706 -0.017717 0.096814 -0.013796 0.075862 0.017984 0.023149 0.017010 -0.093650 0.035446 -0.023135 0.026297 -0.011769 -0.011753 -0.043351 0.000060 -0.001953 0.028135 0.023804 \n0.029937 -0.018527 -0.150727 0.081029 0.034186 -0.056299 0.148788 0.006526 0.091516 -0.080441 -0.035735 0.001997 0.019030 -0.077643 0.107984 -0.056258 0.031181 -0.051535 -0.027580 0.051815 0.012036 0.081437 0.046704 -0.059784 0.100904 0.025934 0.021662 -0.016937 0.039461 -0.046583 -0.092257 -0.006300 0.025170 0.075511 \n0.027077 -0.012351 -0.112038 0.035893 0.028873 -0.001260 0.084827 -0.000242 0.048683 -0.054899 -0.029997 0.032628 -0.039785 -0.108273 0.045755 -0.052769 0.008202 -0.062941 -0.003272 0.105699 0.039987 0.020061 0.023151 0.020974 0.008953 0.010896 0.031997 -0.023033 0.010634 -0.071553 -0.062459 -0.034568 0.012175 0.063440 \n0.008543 0.000575 -0.036234 0.011338 0.007897 -0.004413 0.042000 0.015857 0.024113 -0.029744 -0.022255 0.053502 -0.038865 -0.097944 0.017588 -0.046984 0.033087 -0.053276 0.001529 0.130264 0.069392 -0.067173 0.042421 0.083647 -0.052001 0.027113 0.009719 0.006872 -0.038341 -0.067952 0.010640 -0.078205 -0.015510 0.044074 \n-0.004854 -0.002651 -0.001199 -0.004656 -0.017881 0.006502 0.011106 0.033451 0.012608 -0.007254 -0.021085 0.015936 -0.015926 -0.005386 0.006492 -0.032176 -0.004622 -0.056644 0.008831 0.017207 0.029211 -0.031234 -0.017190 0.017370 -0.014199 -0.016837 0.012242 0.028844 0.024051 -0.033052 0.005809 -0.026851 -0.003806 0.029867 \n-0.015813 -0.010424 0.049608 -0.025236 -0.047180 0.033566 -0.017722 0.037312 0.003478 0.019989 -0.017899 -0.019776 0.013111 0.105673 -0.000689 -0.029181 -0.055355 -0.059296 0.016272 -0.126448 -0.003426 0.027239 -0.080562 -0.048943 0.063203 -0.071188 0.018085 0.055066 0.103002 0.015990 -0.024552 0.027166 0.005359 -0.008937 \n-0.030164 -0.027591 0.112130 -0.046006 -0.063466 0.021257 -0.061882 0.075039 -0.009550 0.046188 -0.025234 -0.036147 0.006893 0.099786 -0.046972 -0.003808 -0.042536 -0.034124 0.072153 -0.146706 -0.007001 0.011713 -0.032354 -0.013285 0.064616 -0.076540 -0.019793 0.045941 0.057997 -0.041981 -0.013777 -0.007784 -0.005500 0.063654 \n-0.019028 -0.051789 0.153268 -0.072220 -0.068001 0.053218 -0.114782 0.100188 -0.032458 0.065327 -0.041993 0.000529 -0.049657 0.064999 -0.113438 0.028145 -0.026783 -0.004495 0.083060 -0.067097 0.025177 -0.054527 0.012232 0.061208 0.035559 -0.041029 -0.084866 0.011647 -0.034824 -0.100697 -0.069165 -0.000768 0.005575 0.110722 \n-0.028944 -0.046124 0.115567 -0.042613 -0.067724 0.014225 -0.060491 0.103470 0.006232 0.039413 -0.031752 -0.037167 -0.006997 0.085995 -0.038657 0.010688 -0.040086 -0.042208 0.098912 -0.130371 0.037304 0.026656 -0.077987 -0.030978 0.062407 -0.072535 -0.073939 0.000909 0.019295 -0.034458 0.004467 -0.047183 0.050673 0.035176 \n-0.010823 -0.035975 0.055356 -0.020108 -0.053716 0.014079 -0.008891 0.083913 0.022598 0.005824 -0.031201 -0.038542 -0.005753 0.089595 0.015986 -0.004255 -0.071317 -0.065118 0.079317 -0.106829 0.072446 0.039057 -0.148855 -0.072824 0.059724 -0.064924 -0.048338 0.013216 0.059644 0.037032 0.035514 -0.058015 0.052789 -0.068904 \n0.002749 -0.025782 0.001067 -0.000955 -0.021760 -0.004910 0.022410 0.073031 0.031948 -0.017623 -0.036578 0.002064 -0.036635 -0.028107 0.022568 -0.013938 -0.026049 -0.064352 0.076825 0.032919 0.104873 -0.018636 -0.086478 -0.011360 -0.025080 -0.005483 -0.057313 -0.019218 -0.018251 -0.006270 0.058547 -0.109717 0.043965 -0.042968 \n0.019557 -0.022238 -0.040271 0.015531 -0.000923 -0.011734 0.050924 0.059961 0.044488 -0.037512 -0.047698 0.041131 -0.067325 -0.125904 0.038185 -0.026749 0.003161 -0.063752 0.059945 0.149873 0.138916 -0.043073 -0.038810 0.040424 -0.060299 0.036249 -0.057345 -0.030897 -0.069820 -0.039359 0.051438 -0.140784 0.040745 -0.023033 \n0.038295 -0.025011 -0.119022 0.039087 0.023303 -0.007108 0.097748 0.031451 0.066314 -0.064618 -0.049757 0.022319 -0.054682 -0.131953 0.060803 -0.041005 -0.002889 -0.065952 0.048990 0.118731 0.087371 0.038178 -0.008116 -0.019859 0.013619 0.027323 -0.017437 -0.041034 -0.017123 -0.056194 -0.033365 -0.067470 0.076076 0.024548 \n0.027485 -0.031004 -0.155083 0.076967 0.030238 -0.066616 0.146021 0.018614 0.095435 -0.090351 -0.026858 -0.001195 0.004065 -0.062969 0.102157 -0.046214 0.025250 -0.047454 0.004391 0.045916 0.011457 0.054752 0.064190 -0.063966 0.092363 0.019011 0.007010 -0.017645 0.023346 -0.068486 -0.085984 -0.024607 0.046082 0.096832 \n0.011663 0.006518 -0.034439 0.013241 0.007617 -0.009766 0.044050 0.033840 0.029582 -0.028393 -0.028713 0.055641 -0.043922 -0.099413 0.025141 -0.040381 0.025727 -0.058214 0.010448 0.139032 0.097498 -0.059681 0.018053 0.084934 -0.052343 0.037634 -0.003643 0.010254 -0.050500 -0.038878 0.012009 -0.092562 -0.007898 0.022313 \n-0.002313 0.000470 0.000002 -0.004007 -0.016215 0.003976 0.010717 0.048028 0.016739 -0.006186 -0.024483 0.020048 -0.016876 -0.003548 0.010717 -0.026953 -0.010998 -0.055979 0.019518 0.025395 0.050851 -0.031442 -0.027433 0.021960 -0.018106 -0.009491 0.000531 0.037647 0.007463 -0.008452 0.013288 -0.048925 0.006064 0.024257 \n-0.012568 -0.006592 0.049539 -0.024277 -0.046609 0.030396 -0.019942 0.053337 0.007757 0.021468 -0.022706 -0.013044 0.011272 0.109312 0.003377 -0.022628 -0.060616 -0.061807 0.030161 -0.121278 0.019402 0.026839 -0.095660 -0.042434 0.064863 -0.064156 0.007525 0.057258 0.096057 0.035786 -0.019042 0.010115 0.006232 -0.015055 \n-0.023212 -0.060246 0.157807 -0.069886 -0.065658 0.063342 -0.104423 0.082001 -0.030749 0.079114 -0.044460 0.004171 -0.030429 0.042545 -0.096287 0.021890 -0.044874 -0.001170 0.067071 -0.085689 0.021431 -0.035122 0.002907 0.064224 0.017922 -0.037758 -0.083689 0.004437 -0.037603 -0.087459 -0.078257 -0.011921 0.002713 0.130484 \n-0.010961 -0.010595 0.057062 -0.023094 -0.047200 0.021346 -0.011516 0.068656 0.015527 0.014810 -0.022984 -0.021018 0.006940 0.106574 0.011226 -0.023889 -0.062806 -0.069001 0.044159 -0.108003 0.050370 0.047099 -0.112640 -0.068669 0.081751 -0.068521 -0.039172 0.022972 0.052837 0.036443 0.008144 -0.028320 0.041313 -0.064570 \n0.001631 -0.003250 0.002325 -0.002118 -0.016181 0.000274 0.016759 0.060910 0.024499 -0.012519 -0.030588 0.015271 -0.023100 -0.011757 0.016440 -0.028638 -0.012990 -0.064844 0.039739 0.031429 0.079984 -0.015321 -0.052897 -0.006078 -0.010170 -0.011420 -0.050449 -0.009900 -0.025391 -0.012909 0.032748 -0.085004 0.038699 -0.043162 \n0.017805 0.004146 -0.038887 0.014222 0.006581 -0.009683 0.047461 0.046887 0.038038 -0.032345 -0.032763 0.056280 -0.049485 -0.108966 0.031645 -0.041431 0.020138 -0.064023 0.031810 0.142533 0.126216 -0.050995 -0.002245 0.056266 -0.050403 0.037812 -0.053115 -0.030572 -0.081976 -0.050982 0.028974 -0.127634 0.029303 -0.029574 \n0.012632 -0.105919 0.042832 -0.056614 0.095894 -0.023994 -0.019214 -0.026746 -0.070577 0.202269 0.218185 -0.141116 0.012637 -0.191347 0.155533 -0.244488 0.121779 -0.013130 0.138472 -0.059114 -0.216544 -0.050477 0.066853 -0.149560 -0.157390 -0.095098 -0.011175 -0.068427 0.210754 -0.054577 0.001436 0.040342 -0.004236 -0.006205 \n-0.009740 -0.029067 0.036475 -0.046866 0.118228 0.012225 -0.006405 -0.060398 -0.086556 0.108100 0.186918 -0.112111 0.050136 -0.100126 0.105268 -0.169540 0.136663 -0.073114 0.067763 -0.014521 -0.082623 -0.012863 0.033765 -0.100967 -0.086562 -0.092416 -0.077945 0.022729 0.114331 -0.008651 -0.069342 0.005683 0.051571 -0.009558 \n-0.031301 0.046217 0.033243 -0.035388 0.123785 0.052248 0.021922 -0.090547 -0.125667 0.007581 0.182378 -0.055823 0.074368 -0.029074 0.053632 -0.049594 0.107463 -0.137761 0.005821 -0.001673 0.066449 0.006118 0.023528 0.013804 -0.007269 -0.081388 -0.113434 0.070675 0.027780 0.045024 -0.106739 -0.011678 0.031635 0.044212 \n-0.047441 0.105188 0.031918 -0.024384 0.114098 0.082601 0.048491 -0.112125 -0.170704 -0.059301 0.164752 -0.009947 0.090739 0.006616 0.010369 0.042357 0.050623 -0.158918 -0.042210 0.014508 0.136027 -0.007670 -0.034495 0.072312 0.050835 -0.067209 -0.075955 0.023597 0.006577 0.084867 -0.082590 0.024191 -0.041988 0.068711 \n-0.060936 0.133902 0.031530 -0.004574 0.064304 0.088650 0.058070 -0.124018 -0.171917 -0.102988 0.148276 0.058157 0.076201 0.044152 0.002505 0.090897 -0.015203 -0.110439 -0.090091 0.069662 0.172459 -0.039446 -0.067579 0.050794 0.093654 -0.082964 -0.026363 0.019254 -0.002660 0.016061 0.024545 0.043909 -0.092051 0.131171 \n-0.074646 0.131695 0.040257 0.018490 -0.004794 0.081236 0.061589 -0.133348 -0.147784 -0.119212 0.094712 0.084045 0.033173 0.036408 0.031797 0.094617 -0.048706 0.003825 -0.075566 0.078798 0.127307 -0.065285 -0.109546 -0.039558 0.030185 -0.072564 0.052974 -0.008825 -0.088317 -0.022192 0.091494 0.087785 -0.062428 0.116086 \n-0.090236 0.103626 0.066939 0.057319 -0.079163 0.060686 0.053354 -0.131920 -0.087102 -0.115977 0.028577 0.074951 -0.040556 0.035491 0.087538 0.018752 -0.081645 0.116761 0.007481 0.045592 0.001466 -0.094081 -0.126988 -0.146376 -0.033849 -0.021719 0.127080 -0.004981 -0.202755 -0.119973 0.081963 0.106640 -0.105281 -0.008628 \n-0.101059 0.055177 0.092659 0.069983 -0.150193 0.026469 0.028574 -0.115258 -0.008902 -0.088879 -0.036594 0.022392 -0.109572 -0.005240 0.149355 -0.115056 -0.119773 0.122550 0.083092 0.011822 -0.092288 -0.074034 -0.034558 -0.115984 -0.044921 0.007854 0.164244 0.014803 -0.170980 -0.127570 0.019750 0.095694 0.000371 -0.041291 \n-0.101563 0.024376 0.106668 0.071318 -0.187231 0.012534 0.023991 -0.099795 0.030129 -0.076617 -0.069392 -0.016558 -0.116462 -0.024845 0.158655 -0.199665 -0.116228 0.076206 0.060656 -0.024832 -0.096681 -0.049299 0.082420 -0.042295 -0.032862 0.018749 0.125343 0.039212 -0.037558 -0.047906 -0.025870 -0.049529 0.088169 -0.088273 \n-0.101840 -0.013119 0.089419 0.075166 -0.182579 0.048658 0.037188 -0.067749 0.031914 -0.101814 -0.073274 -0.026481 -0.109668 -0.000858 0.110793 -0.202483 -0.060253 0.007145 0.019590 -0.069464 -0.056870 0.023689 0.132006 0.031411 0.013119 -0.007012 0.038285 0.031656 0.001551 -0.025447 -0.065416 -0.114616 0.017261 -0.086359 \n-0.084252 -0.076412 0.065909 0.060881 -0.142931 0.092286 0.073191 -0.013071 0.017189 -0.159961 -0.092115 -0.031651 -0.101432 -0.005721 0.027741 -0.106024 0.050453 -0.034217 -0.067543 -0.069923 -0.011090 0.116035 0.100208 0.041462 -0.024840 -0.044467 -0.108854 -0.009354 0.073244 0.020455 -0.063103 -0.129646 -0.010099 -0.129133 \n-0.053651 -0.123308 0.046845 0.020630 -0.076671 0.113112 0.110897 0.086910 0.003931 -0.182808 -0.094838 -0.023499 -0.059496 -0.018019 -0.032692 -0.004557 0.053504 -0.066417 -0.110231 -0.014603 -0.024896 0.113252 0.016412 0.021225 -0.025860 -0.075046 -0.145044 -0.030890 0.110020 0.003382 0.007818 -0.098244 -0.037896 -0.009802 \n-0.023018 -0.146263 0.038114 -0.004028 -0.020148 0.111274 0.136014 0.170400 0.002465 -0.171044 -0.075670 -0.007542 -0.006424 -0.025856 -0.031416 0.083827 0.010568 -0.069980 -0.109310 0.034905 -0.065427 0.031177 -0.044852 0.019905 -0.066999 -0.093510 -0.115084 -0.095158 0.120015 0.040204 0.030019 -0.030543 -0.096811 0.096700 \n0.002563 -0.127886 0.038658 -0.012071 0.033255 0.099861 0.164565 0.238246 0.001567 -0.105923 -0.057783 0.008664 0.027296 -0.030573 -0.009853 0.117020 -0.032701 -0.000283 -0.057331 0.051644 -0.084379 -0.039476 -0.031627 -0.008417 -0.048362 -0.080557 -0.044505 -0.140295 0.129312 0.090377 0.020906 0.080368 -0.088585 0.136852 \n0.022743 -0.067070 0.035835 -0.011617 0.073365 0.063325 0.146213 0.262278 -0.002566 -0.007656 -0.026090 0.035984 0.031533 -0.009645 0.044980 0.084848 -0.046015 0.086576 -0.001782 0.061428 0.003570 -0.047340 0.031674 0.003656 -0.006269 -0.074342 -0.011328 -0.102136 0.042874 0.026755 -0.027391 0.130301 -0.059867 0.018942 \n0.044270 0.008816 0.045389 -0.021660 0.105411 0.011416 0.109320 0.275577 -0.009832 0.108035 0.004491 0.064390 0.012428 0.006669 0.095357 -0.012238 -0.068972 0.152817 0.075822 0.056884 0.138813 -0.051472 0.080042 0.012909 0.015075 -0.053459 0.028833 0.077070 0.026517 -0.070675 -0.045298 0.143809 -0.084532 -0.083487 \n0.062375 0.088371 0.056930 -0.031399 0.124205 -0.042608 0.070908 0.302850 -0.030713 0.221806 0.047883 0.094536 -0.004204 0.009990 0.148794 -0.108520 -0.096997 0.187564 0.140322 0.044017 0.262141 -0.062547 0.161527 -0.013297 0.037476 -0.028287 0.047541 0.256555 -0.040101 -0.087736 0.006879 0.108453 -0.022617 -0.092782 \n0.101351 -0.059896 0.089671 -0.007831 -0.037385 0.008829 -0.001672 -0.180136 0.189267 0.006458 -0.232031 -0.060867 0.181227 0.130852 -0.046776 0.035489 0.001493 0.160017 0.051721 0.209411 0.059181 -0.083851 0.207104 -0.102355 0.039265 -0.194572 -0.024321 -0.005820 -0.022768 0.136793 -0.107813 -0.023127 -0.048810 0.065417 \n0.081528 -0.068502 0.070887 -0.055525 -0.045082 0.007139 -0.005518 -0.118178 0.156592 -0.033074 -0.063860 0.040561 0.111628 0.029568 0.001045 0.060952 0.022298 0.185051 0.009521 -0.033300 0.094005 0.013600 0.105380 0.040334 -0.061870 -0.114470 0.021331 0.005113 0.002683 0.024141 -0.026811 -0.015689 0.020153 0.092373 \n0.068413 -0.083706 0.052305 -0.086296 -0.055880 0.021816 0.004492 -0.068120 0.145758 -0.102567 0.092434 0.075123 0.007851 0.008520 0.005845 0.082068 0.031453 0.180413 -0.035339 -0.133303 0.088724 0.067980 0.008976 0.111553 -0.060575 -0.053669 0.037053 -0.004075 0.049025 0.024206 0.031083 0.032459 0.049141 0.038812 \n0.072230 -0.065201 0.036058 -0.094849 -0.081347 0.028568 0.008797 -0.040623 0.140707 -0.126779 0.170257 0.059293 -0.052776 0.003182 -0.000677 0.081645 0.026914 0.131691 -0.055588 -0.098342 0.031136 -0.006790 0.015095 0.065597 0.078600 0.017709 0.045791 -0.034864 0.076622 0.013773 0.067413 -0.028287 0.059081 0.012658 \n0.085169 -0.029802 0.042368 -0.082336 -0.097939 0.016608 0.019748 -0.012989 0.121625 -0.087612 0.209630 0.002191 -0.126582 0.050998 -0.030648 0.060010 0.000332 0.046455 -0.023080 0.055862 -0.053376 -0.135321 0.065824 0.029844 0.265716 0.072053 0.059330 -0.027794 0.089039 -0.055593 0.088900 -0.113375 0.061857 -0.009200 \n0.083666 0.022002 0.040552 -0.085899 -0.099865 0.015644 0.005068 0.015547 0.156486 -0.077980 0.202180 0.014951 -0.087338 0.065851 -0.063459 -0.028938 0.043400 -0.024140 -0.005938 0.066480 -0.072232 -0.179693 -0.014319 -0.032909 0.209669 0.122452 -0.039648 0.049486 0.011409 -0.011759 -0.007885 -0.033417 -0.079718 0.113528 \n0.083042 0.057031 0.040177 -0.099114 -0.076680 0.009479 -0.003028 -0.000359 0.165022 -0.119377 0.166816 0.098159 -0.004888 0.020345 -0.028135 -0.047425 0.054928 -0.014242 -0.021031 -0.044814 0.032783 -0.054961 -0.131702 -0.039012 -0.016037 0.136114 -0.052413 0.121523 -0.038968 0.020495 -0.008329 -0.024960 -0.081805 0.022575 \n0.083252 0.078107 0.056261 -0.095219 -0.059524 0.003298 -0.006615 -0.018114 0.165684 -0.099090 0.091701 0.078091 0.033441 -0.005544 -0.024775 -0.060616 0.054683 -0.025820 0.034770 -0.091304 0.061625 0.040350 -0.178139 0.001904 -0.150915 0.076588 -0.034127 0.096746 -0.053605 0.008977 -0.035470 0.025028 -0.047913 -0.054413 \n0.104239 0.086773 0.093349 -0.055643 -0.033261 -0.013246 -0.005449 -0.083837 0.158899 -0.044047 -0.029467 -0.026012 0.082055 -0.049138 0.021797 0.008367 0.031893 -0.087107 0.189897 -0.063379 0.017963 0.128801 -0.143253 0.036421 -0.143812 -0.013284 0.024955 0.056737 -0.069906 0.014591 -0.040838 0.026539 -0.056752 -0.047314 \n0.135218 0.100220 0.124814 0.000991 -0.008239 -0.012542 -0.007248 -0.156811 0.151583 -0.017420 -0.147099 -0.155713 0.101870 -0.021523 0.028922 0.110680 0.026595 -0.179864 0.346267 0.114265 -0.070904 0.161901 -0.031710 0.014850 -0.024451 -0.120325 0.049384 -0.013378 -0.123593 0.072623 -0.129874 0.065687 -0.065814 -0.083173 \n0.059343 -0.012441 -0.000702 -0.081890 -0.008092 -0.077276 -0.028878 0.037295 -0.029467 -0.011411 -0.007775 0.009769 -0.027726 0.005769 0.053610 0.007873 -0.041172 -0.106420 -0.027219 0.033050 -0.102197 -0.048661 -0.066981 -0.013190 0.109772 0.030705 0.044138 0.003928 0.036674 0.004169 0.127857 0.033634 0.266703 0.060249 \n0.041616 -0.014486 -0.010645 -0.063688 0.002398 0.007759 -0.030515 0.045130 -0.060320 -0.012907 -0.003144 -0.002022 0.026184 0.062737 0.093489 -0.012212 -0.012731 -0.061123 0.017645 0.059738 -0.070951 0.028276 -0.008200 -0.013282 0.059036 0.130001 0.007378 -0.026986 0.024631 0.046745 0.129132 0.029581 0.168902 0.047167 \n0.022209 -0.018785 -0.021705 -0.047282 0.007684 0.096519 -0.037379 0.046370 -0.086593 -0.016226 0.004486 -0.016435 0.077777 0.123311 0.134030 -0.031013 0.005692 -0.004530 0.059412 0.082817 -0.053324 0.097630 0.047516 -0.011465 0.006049 0.229178 -0.021088 -0.047042 0.006557 0.091702 0.122335 0.003955 0.066979 0.045888 \n0.003588 -0.021043 -0.030263 -0.030409 0.008371 0.181691 -0.044518 0.046051 -0.107937 -0.022794 0.009934 -0.032445 0.119848 0.179589 0.164240 -0.043652 0.020389 0.047092 0.094236 0.116267 -0.035936 0.155206 0.107422 -0.005142 -0.059549 0.322080 -0.057313 -0.069079 -0.015886 0.152295 0.127300 -0.018228 -0.013766 0.025152 \n0.010241 -0.012175 -0.071132 -0.010497 0.020024 0.062831 -0.040007 0.039616 -0.072378 0.035685 -0.031690 0.021640 0.001871 0.085038 0.053829 -0.017137 0.002122 0.049195 0.087728 -0.000013 -0.026558 0.022211 -0.058457 0.166112 0.018559 -0.012076 -0.001099 0.016641 -0.019024 0.008824 0.091310 -0.040634 0.020518 0.051538 \n0.005987 -0.016904 -0.065972 -0.010944 0.009374 0.084910 -0.052019 0.031735 -0.073636 0.036433 -0.016286 0.003295 0.010276 0.085334 0.068926 -0.031102 -0.004326 0.037220 0.078248 0.028015 -0.030765 0.043535 -0.024633 0.098897 0.024402 0.055196 -0.037672 -0.019356 0.027747 -0.077052 0.014090 -0.032531 0.010393 0.037211 \n0.000485 -0.009792 -0.056592 -0.011803 0.001583 0.104774 -0.061755 0.023501 -0.079032 0.039804 -0.011369 -0.011280 0.024653 0.096826 0.073638 -0.046150 -0.008896 0.030450 0.076726 0.038805 -0.033667 0.064954 0.000900 0.056790 0.020232 0.116360 -0.065525 -0.045163 0.037248 -0.094933 -0.027418 -0.028737 -0.007585 -0.011135 \n0.006045 -0.001260 -0.070490 -0.009554 0.009933 0.083302 -0.054060 0.013771 -0.080073 0.047390 -0.001836 -0.009542 0.020186 0.082461 0.052009 -0.037023 0.003870 0.028911 0.066158 0.019377 -0.061487 0.042407 -0.017089 0.104383 0.041935 0.073886 -0.019325 -0.089932 0.029586 -0.070428 0.024956 -0.057337 0.001123 -0.019238 \n0.011242 -0.005679 -0.074412 -0.010055 0.015755 0.060586 -0.047635 0.003394 -0.091558 0.044380 -0.005161 -0.022962 0.015788 0.070458 0.028218 -0.036979 0.017605 0.028455 0.076360 -0.013275 -0.085415 0.018537 -0.048259 0.163691 0.057659 0.026190 0.028125 -0.133961 0.018631 -0.042571 0.090055 -0.092227 0.027934 -0.057308 \n0.036225 -0.071534 0.000459 -0.046818 0.009337 -0.083866 -0.046178 -0.015273 -0.060642 -0.002822 -0.089257 0.012351 -0.039814 -0.035023 -0.019465 0.040371 -0.061960 0.039386 -0.094567 -0.024135 0.027052 0.059938 0.091591 0.001979 -0.040503 -0.107158 0.083539 -0.101314 0.013352 -0.110938 0.043372 0.129228 0.064399 -0.008668 \n0.044367 -0.059525 0.015036 -0.064121 -0.018004 -0.082253 -0.045795 -0.026919 -0.070584 -0.018065 -0.070391 -0.010245 -0.029751 -0.046835 -0.028796 0.042482 -0.143375 0.002483 -0.181009 -0.070951 0.071994 -0.003359 0.199769 -0.097579 -0.087064 0.021258 0.050995 -0.107355 -0.017802 0.053633 0.017380 0.028065 0.073668 -0.008871 \n0.043601 -0.049111 0.016832 -0.062722 -0.017690 -0.081388 -0.042392 -0.021628 -0.089830 -0.013515 -0.066851 -0.008770 -0.034597 -0.040346 -0.030496 0.037791 -0.131468 -0.012470 -0.162906 -0.049426 0.049875 -0.008340 0.154951 -0.079562 -0.052199 0.026980 0.057094 -0.092234 -0.013567 0.075758 0.017100 -0.027829 0.047598 -0.032337 \n0.048275 -0.038263 0.001498 -0.051199 0.023312 -0.088975 -0.041336 0.005000 -0.095004 -0.003208 -0.060932 0.022466 -0.042236 0.005051 -0.023424 0.039786 -0.019435 -0.003108 -0.056234 0.026974 -0.047324 0.009209 -0.052575 0.062674 0.041095 -0.089544 0.071103 -0.050484 0.024541 0.021517 -0.001177 -0.034659 0.017784 -0.145986 \n0.041785 -0.047523 -0.029972 -0.046078 0.035909 -0.097136 -0.056514 0.005071 -0.089750 -0.024247 -0.085315 0.019769 -0.065103 -0.012747 -0.033756 0.024734 -0.014857 0.011973 -0.055355 0.034763 -0.048361 0.024915 -0.036487 0.063963 0.019368 -0.114169 0.095381 -0.092460 0.033839 -0.059458 -0.018405 0.004700 0.059549 -0.091842 \n0.044692 -0.060996 -0.030403 -0.035242 0.035271 -0.092818 -0.058749 -0.002830 -0.079239 -0.025316 -0.092148 0.019888 -0.062782 -0.020325 -0.029536 0.030127 -0.024623 0.028330 -0.061266 0.010928 -0.030107 0.035277 -0.006948 0.059755 -0.013675 -0.115893 0.086825 -0.110997 0.020747 -0.090179 -0.023240 0.046759 0.032906 -0.074567 \n0.053635 0.024179 0.003976 -0.054942 0.021919 -0.085630 -0.040517 0.019222 -0.098845 -0.002500 -0.058854 0.005767 -0.030366 0.004222 -0.039686 -0.024247 -0.003591 -0.045881 -0.051159 0.028487 -0.059601 0.002317 -0.116937 0.048023 0.058109 -0.042187 -0.022689 0.101089 -0.085146 -0.047060 0.001347 -0.071920 -0.053922 -0.029344 \n0.050654 0.043811 0.016440 -0.071448 -0.018825 -0.083915 -0.050552 0.001389 -0.099731 -0.011661 -0.055724 -0.038660 -0.011181 -0.044498 -0.046592 -0.061600 -0.110975 -0.092581 -0.146722 -0.054465 0.022640 -0.027495 0.052884 -0.124647 -0.044100 0.090185 -0.056166 0.049620 -0.094099 0.024798 -0.007076 -0.078109 -0.056294 0.024809 \n0.056727 0.056174 0.016328 -0.067723 -0.018273 -0.089164 -0.053246 -0.004474 -0.088775 -0.016960 -0.055755 -0.049357 -0.003393 -0.057029 -0.057944 -0.078602 -0.116320 -0.116419 -0.135346 -0.065112 0.031714 -0.026089 0.053926 -0.146501 -0.088218 0.112238 -0.073090 0.019614 -0.073331 -0.010391 -0.016316 -0.081091 -0.101346 0.033206 \n0.053863 0.070189 0.002551 -0.055065 0.015300 -0.088786 -0.052051 0.006288 -0.079362 0.003819 -0.069097 -0.028654 -0.012574 -0.043552 -0.060415 -0.082841 -0.030205 -0.090290 -0.056654 -0.010515 -0.026259 0.018692 -0.060457 -0.049003 -0.020092 0.013016 -0.079443 0.055920 -0.044095 -0.132379 -0.069462 -0.028557 -0.081805 -0.014368 \n0.054487 0.052156 -0.025662 -0.043672 0.038234 -0.097652 -0.061550 0.009141 -0.091552 -0.018906 -0.073348 -0.023368 -0.035182 -0.019426 -0.067143 -0.077651 0.000840 -0.064016 -0.050794 0.012015 -0.070276 -0.009742 -0.116913 0.009872 0.004210 -0.020941 -0.054064 0.033929 -0.041700 -0.124288 -0.068147 -0.077671 -0.106441 -0.047888 \n0.053071 0.036339 -0.025735 -0.047996 0.041005 -0.100444 -0.057829 0.013845 -0.101921 -0.018419 -0.077645 -0.013513 -0.041059 -0.010444 -0.059771 -0.061024 0.005044 -0.056949 -0.052826 0.026317 -0.078409 -0.007588 -0.129995 0.033848 0.029133 -0.047594 -0.035022 0.047235 -0.058100 -0.091996 -0.054179 -0.066075 -0.078103 -0.046683 \n-0.031460 -0.013987 -0.149818 0.080350 0.020681 -0.057818 0.011712 -0.001008 0.061313 0.017201 0.005085 0.074818 -0.047190 0.015967 -0.029569 0.136405 0.070269 -0.039349 0.090760 -0.058563 0.065843 0.078259 -0.020924 -0.163454 -0.040312 -0.104189 0.069961 0.035861 0.064290 0.042196 0.239137 -0.024848 0.084332 -0.100068 \n-0.002327 -0.017521 -0.139425 0.070865 0.048305 0.079434 -0.035213 -0.026484 0.062642 0.070813 -0.027307 0.065759 -0.050332 -0.068535 -0.050488 0.065260 -0.034808 0.001184 0.022065 -0.018875 0.057119 -0.010911 -0.054658 -0.020400 -0.028406 -0.025774 0.004056 0.020749 -0.040770 0.067283 0.024925 0.111530 0.079035 -0.073362 \n-0.000584 -0.011118 -0.122177 0.051211 0.037283 0.151535 -0.057755 -0.043066 0.075106 0.105702 -0.045195 0.033969 -0.051730 -0.086152 -0.035502 0.008973 -0.086193 0.022393 -0.032203 -0.010625 0.037487 0.012267 -0.063710 0.003409 0.012534 0.018225 -0.069447 -0.045926 -0.057301 0.086177 -0.125110 0.108154 0.062487 -0.033929 \n0.000480 -0.003086 -0.124476 0.057127 0.033887 0.149034 -0.061112 -0.048529 0.070950 0.110661 -0.040134 0.025767 -0.039288 -0.067746 -0.045629 0.005133 -0.081370 0.017086 -0.037104 -0.021039 0.008034 -0.013678 -0.051069 0.002511 0.032016 0.008503 -0.097044 -0.037501 -0.056407 0.051508 -0.144414 0.076356 0.059066 -0.021945 \n-0.000559 0.003997 -0.124027 0.053465 0.037579 0.149996 -0.049979 -0.055144 0.070483 0.113771 -0.040946 0.023671 -0.042610 -0.080241 -0.054001 0.002411 -0.078521 0.019903 -0.057589 -0.015049 -0.008310 -0.005005 -0.034476 0.006235 0.033286 0.024151 -0.120019 0.018377 -0.072419 0.051602 -0.134832 0.064370 0.037586 0.038711 \n-0.000565 0.012494 -0.144971 0.071663 0.048838 0.081814 -0.029624 -0.048941 0.058314 0.080172 -0.010279 0.030880 -0.020393 -0.055948 -0.087529 0.040786 -0.005034 0.001085 -0.046251 -0.044062 -0.050526 -0.012975 0.003798 -0.023311 0.028814 -0.002381 -0.096432 0.041930 -0.029305 0.030971 -0.027834 0.007430 -0.084175 0.004963 \n-0.024116 0.030827 -0.152081 0.079655 0.025107 -0.047327 0.011967 -0.026416 0.054183 0.040100 0.018945 0.030843 -0.004122 0.017941 -0.093164 0.086158 0.096071 -0.024027 0.018254 -0.066233 -0.099375 0.036822 0.073623 -0.184943 0.021773 -0.066513 -0.059088 0.109738 0.066223 -0.037492 0.178023 -0.104653 -0.133898 -0.056362 \n-0.091307 0.021185 0.005452 0.093079 0.004462 -0.137494 0.027255 0.016193 0.035027 0.043270 0.017597 -0.052594 0.050678 -0.017621 -0.100552 0.045091 0.137042 -0.020604 0.004831 0.003501 -0.076423 -0.058265 0.083175 0.046838 -0.041851 0.066991 0.022783 0.025688 0.023265 -0.031676 0.073439 -0.072413 -0.208999 0.025261 \n-0.117606 0.016526 0.081068 0.093572 -0.000820 -0.179734 0.034199 0.055206 0.036610 0.045268 0.036467 -0.091173 0.086052 0.019906 -0.077335 0.021613 0.112294 -0.024854 0.001051 -0.024213 0.006556 -0.070798 0.044003 0.109037 -0.026106 0.108415 0.052460 -0.013149 -0.012349 -0.024464 -0.073565 -0.035321 -0.006109 0.085182 \n-0.119255 0.013200 0.094025 0.092040 -0.002146 -0.181868 0.034095 0.066850 0.038987 0.042822 0.035705 -0.088591 0.084897 0.040278 -0.058173 0.015843 0.087899 -0.013908 0.006996 -0.042503 0.059924 -0.066579 0.004384 0.103210 -0.024232 0.105557 0.087612 -0.040335 0.005558 -0.016772 -0.091889 -0.007373 0.029448 0.052985 \n-0.116290 0.010377 0.087191 0.091107 -0.002629 -0.185149 0.030103 0.072827 0.039401 0.035673 0.032489 -0.068554 0.067030 0.041143 -0.052476 0.026493 0.086061 -0.007730 0.013083 -0.014025 0.109392 -0.074283 -0.017676 0.099392 -0.055753 0.103876 0.090079 -0.044614 -0.019969 0.012981 -0.056802 -0.005694 0.062207 0.013923 \n-0.088956 0.002770 0.014073 0.083735 0.000259 -0.146666 0.024624 0.057239 0.040658 0.024938 0.022137 -0.006530 0.016834 0.033547 -0.054639 0.066908 0.066243 -0.006261 0.048043 0.020086 0.160704 -0.046164 -0.050282 0.007988 -0.125443 0.055461 0.087275 -0.006875 -0.007782 0.054046 0.083770 0.004746 0.021062 -0.066056 \n-0.035780 -0.013571 -0.129727 0.075906 0.019981 -0.033424 -0.002959 -0.000563 0.050482 0.021935 0.002944 0.075011 -0.045732 0.001801 -0.047564 0.120066 0.054278 -0.033545 0.090304 -0.063131 0.074862 0.062176 -0.020091 -0.117017 -0.059383 -0.080761 0.087965 0.081966 0.076590 0.065730 0.239584 -0.057628 0.009591 -0.117312 \n-0.008820 -0.007627 -0.158056 0.055203 0.017956 0.077099 -0.075129 -0.007191 0.032083 0.085832 -0.010026 0.034463 -0.026295 -0.045494 -0.041653 0.027555 -0.049879 0.009335 0.083404 -0.078297 0.040478 -0.117472 0.024219 0.074484 -0.004484 -0.034318 -0.038895 -0.061118 -0.048430 -0.005360 -0.051358 0.010804 0.052828 0.036864 \n-0.007737 -0.003256 -0.151791 0.055268 0.019966 0.087559 -0.078741 -0.018450 0.030698 0.091713 -0.015450 0.020864 -0.015028 -0.032981 -0.052983 0.014209 -0.059863 0.016094 0.069445 -0.092531 0.010370 -0.126361 0.028344 0.071716 0.009341 -0.033236 -0.067826 -0.044003 -0.045043 -0.018573 -0.090383 0.001302 0.035380 0.033187 \n-0.007412 0.002548 -0.158757 0.061181 0.018661 0.073976 -0.071983 -0.025639 0.028395 0.091940 0.000206 0.022257 -0.009808 -0.034953 -0.058116 0.017318 -0.038657 0.005313 0.049993 -0.087077 -0.010529 -0.130728 0.062698 0.069370 0.019104 -0.031545 -0.097670 0.007100 -0.077453 -0.016369 -0.071504 -0.037358 0.022404 0.093558 \n-0.032512 0.028427 -0.133433 0.078989 0.025468 -0.028533 0.004691 -0.021006 0.046417 0.047024 0.018770 0.037960 0.000477 0.007323 -0.092459 0.082200 0.086554 -0.011680 0.010444 -0.068859 -0.057549 0.014886 0.067619 -0.129370 0.001837 -0.039609 -0.014336 0.136787 0.056466 0.005406 0.166161 -0.086177 -0.153931 -0.065626 \n-0.106396 0.012082 0.093804 0.073458 0.006325 -0.122138 0.053986 0.020569 0.052258 0.097040 -0.030117 -0.063935 0.029007 -0.048173 -0.073480 0.006487 0.079422 -0.018318 -0.098277 0.085998 -0.045678 0.124596 -0.056062 -0.009915 0.115255 0.082543 0.043762 0.055274 0.033651 0.018777 -0.097186 0.025652 0.107246 0.082007 \n-0.108266 0.013196 0.107352 0.073267 0.005501 -0.118182 0.053900 0.026988 0.059629 0.098678 -0.033463 -0.059244 0.030748 -0.021010 -0.048874 -0.003174 0.046149 -0.004115 -0.096188 0.073125 -0.013743 0.137679 -0.084938 -0.025411 0.119975 0.081742 0.078842 0.041866 0.054237 0.044745 -0.113358 0.068330 0.125398 0.071168 \n-0.105677 0.013856 0.100276 0.068541 0.007179 -0.120756 0.052194 0.033207 0.056095 0.092773 -0.030246 -0.037497 0.018805 -0.020756 -0.042271 0.009948 0.041864 0.000654 -0.101674 0.096004 0.022386 0.126403 -0.085055 -0.027232 0.087129 0.079991 0.091934 0.037413 0.035609 0.080869 -0.077055 0.068696 0.147811 0.051447 \n0.200300 0.206381 0.037666 -0.062044 0.105603 0.039287 0.129443 -0.026108 -0.006145 0.008167 -0.180506 -0.005344 -0.154896 0.029728 -0.078524 -0.093022 0.282292 0.094500 -0.012038 -0.075772 -0.007254 0.075631 -0.021364 -0.032209 0.106197 -0.033075 -0.057528 -0.036911 -0.079279 -0.070271 0.134924 0.050103 0.176129 0.174669 \n0.174909 0.262626 0.001650 -0.050760 0.056767 0.046800 0.116679 0.016697 0.036953 -0.001587 -0.129708 -0.018479 -0.077744 0.017170 -0.006678 -0.084015 0.149428 0.003802 0.023948 -0.034466 -0.037293 0.015672 -0.028566 0.018799 0.029636 -0.058638 0.022368 -0.067504 -0.036674 -0.038199 0.101980 -0.006688 0.114199 0.092127 \n0.145419 0.271569 -0.034873 -0.044417 -0.005370 0.054598 0.106804 0.058877 0.047845 -0.006222 -0.038196 -0.028624 0.051275 0.021585 -0.019610 -0.032440 -0.042228 -0.040054 0.010931 -0.080129 -0.032979 -0.037624 0.046956 0.005674 -0.043045 -0.070160 0.084897 -0.059861 0.011866 -0.020727 0.016502 -0.105536 0.054309 0.077813 \n0.121784 0.205203 -0.040615 -0.025224 -0.078037 0.055910 0.087096 0.101567 0.032281 0.047114 0.067450 -0.029754 0.115044 0.004978 -0.002689 0.033261 -0.183060 -0.118272 -0.032756 -0.083449 -0.036678 -0.109978 0.089839 -0.018425 -0.047398 -0.071371 0.132785 -0.079312 0.053450 -0.016013 -0.087251 -0.136778 0.010646 0.048749 \n0.133914 0.102310 -0.020287 0.004986 -0.141709 0.003779 0.009098 0.120102 -0.047440 0.060693 0.150862 0.032856 0.123342 0.036340 0.053349 0.081323 -0.106337 -0.089787 -0.055918 0.076288 0.022085 -0.032767 0.044374 -0.049343 -0.054487 -0.077724 0.094554 -0.099233 0.070220 0.032782 -0.134028 -0.176615 0.058256 -0.110604 \n0.136156 0.012237 0.028350 0.055205 -0.144687 -0.046150 -0.025253 0.036940 -0.082417 0.046931 0.140621 0.125137 0.070684 0.035326 0.117788 0.115735 0.014819 -0.011779 -0.095812 0.103471 0.027698 0.015841 -0.045732 -0.086235 -0.100680 -0.049399 -0.026388 -0.094643 0.100905 0.044076 -0.187605 -0.094315 0.003539 -0.202719 \n0.096825 -0.052123 0.057933 0.114355 -0.098038 -0.121617 -0.055895 -0.022068 -0.059251 -0.000028 0.053843 0.302609 -0.066475 0.059366 0.163306 0.029775 0.086102 0.037617 -0.004275 0.136346 -0.030689 0.070476 -0.032601 -0.031896 -0.043260 -0.110607 -0.181097 0.120911 0.098080 0.036017 -0.155625 -0.014093 -0.023635 -0.063091 \n0.053280 -0.060018 0.037506 0.137972 0.011258 -0.178318 -0.023102 -0.051378 -0.072595 -0.086067 0.000313 0.285580 -0.051029 -0.025127 0.085024 -0.036423 0.014116 0.013590 0.100603 0.056762 -0.064465 -0.011526 0.015876 -0.005954 0.118192 -0.107172 -0.166406 0.124543 0.111421 0.028985 -0.074010 0.076955 -0.032659 0.141702 \n0.045574 -0.013216 0.032142 0.093571 0.050167 -0.171049 0.052834 -0.067576 -0.122586 -0.148784 -0.054492 0.096339 -0.018259 -0.062274 -0.040250 -0.143567 -0.086938 0.063209 0.139416 -0.029860 -0.021312 -0.063067 0.038636 0.074870 0.004951 -0.015358 -0.118334 -0.004443 0.136427 0.102426 0.070536 0.141456 -0.079749 0.125498 \n0.059666 0.033773 0.011922 0.066781 0.019188 -0.136499 0.012310 -0.053448 -0.112842 -0.162605 -0.033516 -0.083470 0.040366 -0.073418 -0.073634 -0.134124 -0.183406 0.070520 0.140600 -0.024180 0.078113 -0.014717 -0.030918 0.055699 -0.059861 -0.024527 -0.045187 -0.018538 0.147098 0.098916 0.092276 0.126182 -0.051521 0.096536 \n0.102008 0.062652 0.002559 0.033904 -0.034709 -0.028794 -0.029963 -0.001155 -0.088109 -0.139233 -0.017772 -0.206193 0.050147 -0.078321 -0.066908 -0.098039 -0.008521 0.078240 0.003116 -0.115075 0.170119 0.063555 0.042319 0.085075 -0.085497 -0.000332 -0.058397 -0.013971 0.095261 -0.001791 0.088311 0.169500 -0.076125 -0.011915 \n0.130156 0.030796 -0.028981 0.037504 -0.110897 0.045667 -0.073986 0.097997 -0.071465 -0.114585 0.024864 -0.164295 0.078517 -0.068363 -0.064291 -0.015782 0.086141 -0.030675 -0.057981 -0.071696 0.160759 0.037941 0.106627 -0.011196 0.036540 -0.017581 -0.051521 0.093436 -0.051622 -0.102102 0.046722 0.156601 0.065388 -0.029184 \n0.168973 -0.048346 -0.054128 0.028599 -0.159253 0.088824 -0.040072 0.101158 -0.015747 -0.066487 0.069651 -0.136555 0.131030 -0.095612 0.005098 0.051930 0.141634 -0.059902 -0.077737 -0.001406 0.060549 0.016779 0.073755 -0.079590 0.025474 0.002819 -0.008349 0.092361 -0.102785 -0.130624 0.011078 0.134838 0.105198 -0.029608 \n0.196868 -0.140552 -0.038053 0.030363 -0.136280 0.109791 0.082851 0.031947 -0.010593 0.024018 0.071666 -0.120218 0.158965 -0.056053 -0.005157 0.089872 0.082277 -0.037538 -0.032307 -0.004000 -0.077070 -0.047653 -0.036306 -0.059558 -0.007532 0.012245 0.064610 0.069522 -0.100870 -0.125037 -0.000483 0.105122 0.004543 -0.031563 \n0.220722 -0.189143 -0.019812 0.050177 -0.022114 0.078768 0.141034 -0.059095 -0.020072 0.062754 0.030385 -0.038935 0.084110 -0.009296 0.007037 0.034972 0.032848 -0.022511 0.007807 0.025446 -0.154512 -0.055275 -0.065423 0.057532 0.001583 -0.000069 0.148740 0.038380 -0.084950 -0.055361 -0.005477 0.024714 -0.104505 -0.036786 \n0.226640 -0.179498 0.049226 0.043510 0.105148 -0.008538 0.147024 -0.091442 -0.062929 0.109845 0.005074 0.058119 0.017767 0.089994 -0.044924 -0.062390 -0.007394 0.037390 0.010439 -0.015520 -0.064619 0.042369 -0.058993 0.055481 -0.000104 0.024385 0.166181 0.000132 -0.087429 0.021365 -0.001406 -0.118401 -0.061089 0.025621 \n0.236683 -0.154942 0.112382 0.048015 0.188712 -0.046365 0.145337 -0.144361 -0.102570 0.165949 -0.050088 0.165649 -0.012631 0.142407 -0.082270 -0.087023 0.021488 0.106059 -0.048916 -0.157005 0.118604 0.107512 -0.049746 -0.120962 0.092471 0.115214 0.092679 -0.156215 -0.070360 0.083441 -0.097703 -0.215489 -0.072382 0.027100 \n0.098748 -0.110249 0.040632 0.106294 0.034691 0.030852 -0.096378 -0.114844 0.076385 0.054995 -0.090801 -0.147677 0.060390 0.097064 -0.014503 -0.075035 -0.111119 -0.058225 -0.072715 0.091030 0.140176 -0.115472 -0.124135 0.002804 -0.034399 0.069021 -0.071552 0.126436 0.208688 -0.064774 0.167890 0.023198 0.065838 -0.115322 \n0.045293 -0.089374 0.018089 0.085862 0.012661 -0.008385 -0.067383 -0.079743 -0.026056 0.045936 -0.103235 -0.087935 0.099554 0.036145 -0.034997 -0.024818 -0.088738 0.005542 -0.088960 0.117580 0.051157 -0.047818 -0.031283 0.050240 -0.019133 0.069263 -0.073513 0.173658 0.080920 -0.038285 0.140359 -0.084856 0.069031 -0.038620 \n-0.004362 -0.070045 -0.005441 0.028721 -0.035581 0.008714 -0.023807 -0.055672 -0.056772 0.019390 -0.051096 -0.030542 0.150701 -0.048870 -0.050577 0.013535 -0.059832 0.055515 -0.059955 0.062922 0.041041 0.043294 -0.006914 0.139734 -0.004182 0.051132 -0.044750 0.176739 0.008876 -0.029887 0.077004 -0.117767 0.056034 -0.030393 \n-0.046908 -0.055997 -0.030801 -0.012931 -0.095239 0.007226 0.007382 -0.049966 -0.065128 -0.036849 -0.026556 0.024951 0.158839 -0.114967 -0.061207 0.047650 -0.045883 0.050290 0.011314 0.022440 -0.012041 0.017932 0.042840 0.074523 0.063977 0.076758 -0.024231 0.082162 -0.002699 -0.024259 0.019286 -0.035404 0.016136 -0.056954 \n-0.084798 -0.042180 -0.051749 -0.022690 -0.163003 -0.027359 0.032238 -0.030906 -0.064720 -0.018269 -0.007672 0.068355 0.116840 -0.135774 -0.081552 0.048596 -0.080784 0.017814 0.146383 0.045115 -0.164446 -0.039490 0.025936 0.042829 0.216153 0.010996 0.006383 0.024871 0.002893 -0.034911 -0.009591 0.024318 -0.029688 -0.025116 \n-0.106381 0.037472 -0.062633 -0.029746 -0.165792 -0.010239 0.012509 -0.033520 0.075020 0.048760 0.008410 0.182188 0.245250 0.004609 -0.187742 -0.114282 -0.018821 0.047174 0.096399 0.074864 -0.071890 0.002693 0.007320 0.000897 0.070591 0.012206 -0.053249 -0.072801 0.098886 -0.111274 0.027638 0.030143 0.068139 0.024639 \n-0.081730 0.078091 -0.032084 -0.016937 -0.094799 -0.034978 -0.035412 -0.016776 0.073337 0.010988 -0.014905 0.221079 0.199761 -0.067149 -0.096254 -0.041963 0.032786 0.009098 0.047313 -0.051221 -0.021669 0.051603 0.007726 -0.033954 -0.118397 0.100014 -0.080501 -0.162248 0.076284 -0.144372 0.005300 0.030886 0.089261 -0.018362 \n-0.032591 0.093392 0.005011 0.033984 -0.033653 -0.056018 -0.045205 -0.034382 0.054241 0.038895 -0.028006 0.147818 0.118347 -0.066122 -0.022476 0.025348 -0.024972 -0.006291 0.042302 -0.124172 0.007567 0.044630 0.010710 0.049093 -0.093271 0.092758 -0.055927 -0.139825 0.084283 -0.141690 0.001749 -0.018718 0.034520 -0.013745 \n0.025131 0.111171 0.052338 0.093959 0.036120 -0.076090 -0.055111 -0.055018 0.028419 0.039071 -0.021446 0.070711 -0.045120 0.015776 0.119003 0.157191 -0.056194 -0.037864 -0.019407 -0.101495 -0.025226 -0.020203 0.081456 0.053677 0.018315 0.139230 -0.090725 -0.024605 0.076010 -0.142354 0.011727 -0.028982 0.009696 0.010824 \n0.086343 0.128544 0.089920 0.151910 0.118411 -0.058267 -0.085331 -0.086356 0.086411 0.023158 -0.022226 -0.036163 -0.177136 0.077261 0.277540 0.318083 -0.140120 -0.082366 -0.088998 -0.072522 -0.066982 0.005449 0.106803 0.086831 0.077782 0.142782 -0.071544 0.132130 0.111582 -0.160749 0.004996 0.042392 -0.012883 0.064412 \n-0.061540 0.002620 -0.073689 0.003550 -0.071570 -0.007284 0.013967 -0.001633 -0.094799 -0.008264 -0.030895 0.022099 0.055730 0.034688 -0.025540 -0.038442 -0.002687 -0.049120 0.053353 0.026489 0.022921 0.048577 -0.071688 0.080905 0.064980 0.013782 -0.014355 -0.070959 -0.107091 0.226291 0.009386 0.025020 -0.005604 -0.092437 \n-0.083267 -0.013381 -0.104616 -0.054605 -0.053350 -0.040950 0.035114 0.002258 -0.090956 -0.033881 -0.040826 0.018097 0.028479 0.074550 0.001071 0.021358 0.041581 -0.040821 0.048402 0.008007 0.052241 0.038045 -0.031619 0.029420 0.021501 0.017835 -0.011740 -0.040020 -0.113478 0.098608 -0.030604 0.032750 0.004352 -0.062761 \n-0.112570 -0.029556 -0.131694 -0.107775 -0.048902 -0.072433 0.059086 0.003800 -0.085443 -0.052929 -0.057306 0.008400 0.005223 0.134826 0.035720 0.064559 0.065656 -0.055342 0.042012 0.015993 0.045317 0.026565 0.036061 -0.016830 -0.006164 0.013784 -0.005233 0.023644 -0.106323 0.001697 -0.058936 0.048287 0.020797 -0.018860 \n-0.138208 -0.042880 -0.154716 -0.161145 -0.036682 -0.087614 0.078138 -0.004009 -0.085960 -0.078308 -0.075158 -0.013667 -0.009818 0.193081 0.069946 0.112698 0.091929 -0.063611 0.052582 0.024224 0.037179 0.031363 0.096072 -0.069509 -0.079675 0.025210 -0.001654 0.058541 -0.103434 -0.086341 -0.084715 0.091389 0.038254 0.015236 \n-0.071614 -0.025433 -0.079555 -0.044231 -0.056001 0.003353 0.020448 0.039313 -0.034449 0.021201 -0.079939 0.028644 -0.024787 0.188439 0.060152 0.035784 0.042994 0.023862 -0.002200 -0.094819 -0.024939 0.021039 0.009160 -0.055080 -0.021112 -0.045149 -0.025621 0.216443 -0.029294 0.072591 -0.079226 -0.017757 0.067523 0.075291 \n-0.072195 -0.021031 -0.121170 -0.072247 -0.036905 -0.070614 0.012662 0.040015 -0.043028 0.012293 -0.078126 -0.030670 -0.033902 0.118408 0.040616 0.048834 0.050552 0.038276 0.008483 -0.058060 -0.034078 -0.041976 -0.009228 -0.045368 -0.013261 -0.068158 0.022561 0.132560 0.004265 -0.025965 -0.059467 -0.019725 0.063179 0.097074 \n-0.083844 -0.027702 -0.148124 -0.094158 -0.023167 -0.103209 0.009646 0.023882 -0.042179 0.000862 -0.043166 -0.071528 -0.042289 0.065372 0.035839 0.017436 0.064917 0.010734 0.049860 -0.058510 -0.037633 -0.085134 -0.033890 -0.026309 -0.004119 -0.070958 0.080402 -0.027002 0.048232 -0.088265 -0.053340 0.014549 0.001863 0.085118 \n-0.077701 -0.032876 -0.116524 -0.069424 -0.039070 -0.071006 0.000686 0.000032 -0.060440 -0.009999 -0.033027 -0.093775 -0.041865 0.049000 0.019074 0.068912 0.042780 0.002562 0.084029 -0.024194 0.004517 -0.150073 -0.009540 -0.075583 0.001970 -0.012793 0.069308 -0.097943 0.026051 -0.040273 -0.046429 -0.037232 -0.075387 0.056425 \n-0.073314 -0.025474 -0.086713 -0.034135 -0.056786 -0.033425 -0.010800 -0.006306 -0.083626 -0.019529 -0.023848 -0.103377 -0.072124 0.027925 0.038858 0.096703 0.015690 0.004385 0.117400 -0.019385 0.068925 -0.151549 0.006375 -0.118295 0.070831 0.037136 0.042043 -0.099400 -0.017748 0.020165 -0.062059 -0.092214 -0.152389 0.036151 \n0.044589 -0.132278 -0.016993 0.083882 0.043778 -0.034594 -0.072011 0.039110 -0.046069 -0.040587 0.123917 -0.047575 -0.122385 -0.035400 -0.024195 -0.012518 0.013652 0.031937 0.019659 -0.001715 0.023088 -0.000309 -0.031436 0.022571 0.019611 -0.006564 0.012784 0.083317 -0.104572 0.062104 0.000647 -0.056669 0.044672 0.004338 \n0.016329 -0.109007 -0.005045 0.067630 0.019108 -0.002645 -0.071902 0.025076 0.007237 -0.051092 0.091200 -0.100586 -0.101496 -0.065336 -0.015376 0.013166 0.008475 0.063623 0.047215 0.020495 -0.013691 0.030534 0.016318 -0.010397 -0.023315 0.035663 -0.023907 0.042304 -0.100402 0.062642 -0.013752 0.012255 0.032336 0.012548 \n0.005789 -0.090540 0.006017 0.048376 -0.000562 -0.003770 -0.064679 0.019118 0.018765 -0.056858 0.072645 -0.105570 -0.099008 -0.063197 -0.036400 0.020176 0.006068 0.073862 0.022493 -0.014200 -0.022956 0.011319 0.028866 -0.059130 0.024068 0.043375 -0.037957 0.009386 -0.070164 0.052847 -0.054076 0.043887 0.014360 -0.001251 \n0.001863 -0.067279 -0.004424 0.022537 -0.021339 0.004205 -0.062496 0.031100 0.053349 -0.011934 0.065752 -0.132376 -0.118604 -0.084354 0.018198 0.004240 -0.004340 0.003937 0.017652 -0.050848 0.024164 -0.013728 -0.034087 -0.019119 0.077051 0.006899 0.013968 -0.043247 -0.030695 0.066883 -0.075176 -0.002876 0.013993 -0.016796 \n0.005001 -0.090158 -0.011976 0.055472 -0.011104 -0.019645 -0.061557 0.044266 0.027270 -0.030345 0.068012 -0.132701 -0.097672 -0.062167 -0.026502 -0.015816 -0.002765 0.014242 0.048233 0.014931 0.013361 0.021076 -0.002662 -0.047362 0.074697 -0.011056 0.032939 0.005948 -0.057100 0.111103 -0.023048 -0.033487 -0.004465 0.045128 \n0.012182 -0.107450 -0.027021 0.065245 0.008961 -0.027772 -0.074458 0.050282 0.025229 -0.041151 0.086397 -0.119923 -0.099702 -0.055513 -0.011844 -0.012761 -0.000561 0.025024 0.077500 0.042190 0.004065 0.022608 -0.020626 -0.014056 0.026667 -0.025100 0.039847 0.066569 -0.072695 0.106463 0.007401 -0.072767 0.005736 0.071139 \n-0.009462 0.065949 -0.034941 0.008894 -0.064655 -0.020166 -0.060698 0.028627 0.066320 0.002801 0.040050 0.031191 -0.045838 0.048249 0.022311 -0.088733 0.012498 0.012592 -0.012528 -0.038889 0.028963 -0.007368 -0.006653 0.082948 -0.006713 0.005645 -0.025498 -0.054304 -0.022462 0.175263 -0.039024 -0.042552 -0.094353 -0.013449 \n0.000399 0.075432 -0.010525 0.041532 -0.020281 -0.016042 -0.094246 0.065468 0.057754 -0.013075 0.035003 0.037001 -0.063322 0.051499 0.004328 -0.061380 -0.015256 0.001025 -0.051518 0.003395 -0.032991 0.024094 0.008757 0.054130 -0.053594 0.010905 -0.022832 -0.025114 -0.048340 0.149929 -0.021867 0.081009 -0.007931 -0.009067 \n0.011378 0.085467 -0.017111 0.041300 -0.001692 -0.039680 -0.104984 0.079709 0.063221 -0.028397 0.048561 0.041353 -0.084814 0.040411 0.000268 -0.038789 -0.000559 -0.008586 -0.044596 0.040237 -0.063474 -0.003204 -0.031149 0.016331 -0.050858 0.018453 -0.008099 -0.080392 -0.015774 0.091864 -0.016377 0.134277 0.049921 -0.027301 \n0.029766 0.102153 -0.038143 0.053924 0.038638 -0.061103 -0.101860 0.090831 0.056649 -0.017724 0.060045 0.040849 -0.108462 0.025297 0.013784 -0.048798 0.017389 -0.036169 -0.049864 0.021916 -0.066484 0.016243 -0.106255 -0.005066 -0.033200 -0.008221 0.050207 -0.137478 0.022810 0.034341 -0.021252 0.120671 0.042481 -0.025859 \n0.006889 0.087347 -0.040353 0.029840 -0.010245 -0.040820 -0.091202 0.072685 0.079209 -0.016224 0.043485 -0.001910 -0.084857 0.044870 -0.001342 -0.071705 -0.002282 -0.026485 -0.039688 0.033741 -0.055799 -0.013397 -0.029281 0.000374 -0.037317 -0.004296 0.042230 -0.104897 0.024080 0.125291 0.011644 0.079126 -0.013272 0.018850 \n-0.000936 0.077182 -0.035678 0.029087 -0.033747 -0.023682 -0.089809 0.060071 0.081219 -0.000659 0.033152 -0.007048 -0.054525 0.054060 -0.010472 -0.078847 -0.000530 -0.009111 -0.033111 0.004942 -0.009483 0.002476 0.026701 0.054112 -0.050766 -0.014615 0.013950 -0.054182 -0.017408 0.176648 0.019946 -0.001332 -0.069141 0.058993 \n-0.053340 -0.049736 0.202485 -0.040699 0.016891 0.098603 -0.079165 0.012530 -0.068702 0.013827 -0.018413 0.064039 -0.096530 -0.107456 -0.034620 0.115038 0.176489 0.048911 0.043125 -0.004140 0.021027 -0.096280 0.063451 0.033838 -0.029605 0.024958 -0.044214 -0.018466 -0.082116 -0.029533 0.007344 -0.061482 0.038981 -0.084020 \n-0.084313 -0.038019 0.077710 -0.058798 0.076335 0.124114 -0.036329 -0.056135 -0.011941 0.019801 -0.032605 0.049799 -0.014743 -0.022984 -0.023983 0.002739 0.115499 0.010250 -0.071667 0.052221 0.028701 -0.018035 0.046885 0.065758 -0.088996 0.058902 0.045509 0.021842 0.012293 -0.058012 -0.054652 -0.028210 -0.045572 0.005237 \n-0.092694 -0.031386 -0.029516 -0.066011 0.056512 0.140318 0.017759 -0.055408 0.042409 -0.001841 -0.047881 0.006271 -0.044880 0.010562 -0.008572 -0.032142 0.031237 0.011784 -0.071950 -0.017154 0.021388 0.094393 -0.059446 -0.036018 -0.074495 0.032641 0.092606 0.062712 0.134488 -0.112228 -0.109084 0.090907 -0.032517 0.032689 \n-0.086068 -0.007082 -0.045041 -0.060765 0.055270 0.132259 0.009008 -0.042025 0.050070 -0.002958 -0.051816 0.001503 -0.066612 -0.017554 -0.020320 -0.047269 0.007336 0.021029 -0.065278 0.045943 0.031788 0.044150 -0.060233 -0.015205 -0.047170 0.032557 0.110315 0.067668 0.142436 -0.112995 -0.095937 0.043696 -0.053263 0.018166 \n-0.089411 0.023741 -0.038912 -0.067964 0.042282 0.140245 0.010622 -0.036806 0.040610 0.006060 -0.017474 0.000163 -0.063926 0.009072 -0.059385 -0.064253 -0.040611 0.016892 -0.098455 0.064721 0.042317 0.071934 -0.068174 -0.023171 -0.006137 0.021292 0.136552 0.086574 0.159669 -0.085905 -0.090037 0.025543 -0.060574 -0.002428 \n-0.078575 0.034575 0.031263 -0.073552 0.040647 0.136747 -0.043737 -0.008796 0.032331 0.016926 -0.029196 0.043721 -0.033823 -0.069883 -0.054957 0.000382 0.001785 -0.066324 -0.031587 0.075610 0.002026 0.123617 -0.016946 -0.073108 0.082295 -0.003377 0.160760 0.045913 0.138259 -0.012841 -0.021037 0.019773 -0.081271 0.003220 \n-0.033366 0.059208 0.160210 -0.064990 0.028624 0.104300 -0.099598 0.045261 -0.039277 0.065556 -0.102912 0.108074 -0.081503 -0.190293 -0.052187 0.075107 0.008671 -0.121671 0.069010 0.122685 -0.035632 -0.012154 0.063158 -0.139158 0.053250 0.013035 0.078006 -0.006941 0.005533 0.101138 0.135668 0.005174 -0.004429 -0.021124 \n-0.092656 0.031357 0.103505 -0.059111 0.068764 0.010312 0.008929 0.034866 0.057992 0.068053 0.014425 0.007778 0.041020 -0.040683 -0.027837 -0.022634 -0.126523 -0.071192 0.073877 0.037044 -0.024998 0.031381 0.000446 -0.063882 0.075465 -0.089846 -0.003293 -0.014744 -0.039966 0.049482 0.125205 -0.021707 -0.015263 0.035730 \n-0.111708 0.016302 0.021802 -0.017327 0.098757 -0.032632 0.102916 -0.004106 0.112659 0.043944 0.086722 -0.075135 0.053748 0.008377 0.026036 -0.051027 -0.181615 0.007593 -0.029718 -0.022786 -0.013286 0.004632 0.013051 -0.001664 0.043884 -0.080356 -0.074392 -0.041220 -0.096235 -0.001700 0.105291 -0.079759 -0.034690 -0.007809 \n-0.106284 -0.022433 0.016803 -0.009022 0.113956 -0.059454 0.115911 -0.012451 0.125340 0.015307 0.082184 -0.057654 0.037795 0.019407 0.065630 -0.026223 -0.104086 0.015953 -0.052260 -0.022874 -0.001840 -0.000797 -0.004680 0.054162 0.031667 -0.086636 -0.106973 -0.052172 -0.115387 -0.039377 0.098135 -0.063370 -0.010368 -0.058260 \n-0.105834 -0.044185 0.028207 -0.010833 0.109847 -0.041639 0.113964 -0.035423 0.117943 0.018785 0.073258 -0.043540 0.048715 0.037758 0.075421 -0.003877 -0.043429 0.013819 -0.039051 -0.084951 -0.018739 0.005618 -0.000400 0.028961 0.006799 -0.081430 -0.141147 -0.095855 -0.105823 -0.040548 0.071096 -0.022040 -0.010334 -0.072087 \n-0.085770 -0.066339 0.119689 -0.034493 0.098418 0.002001 0.025266 -0.023246 0.059661 0.027629 0.052453 0.022351 0.015313 -0.007107 -0.005840 0.096765 0.062508 -0.012640 -0.032725 -0.080090 -0.027756 -0.041996 0.055252 0.063300 -0.038983 -0.076443 -0.130005 -0.083137 -0.110099 -0.085295 0.021676 -0.004858 0.062427 -0.049960 \n-0.063490 -0.034197 0.223953 -0.071609 0.017273 0.072534 -0.070046 0.008472 -0.059151 0.024538 -0.057458 0.054908 -0.069500 -0.108298 -0.024305 0.086168 0.173404 0.023995 0.062833 0.058041 0.036625 -0.084243 -0.007661 0.049316 -0.069261 0.031241 -0.034048 -0.059035 -0.063512 -0.030367 -0.002864 -0.044970 0.061520 -0.067669 \n-0.080995 -0.029362 -0.020969 -0.037152 0.055714 0.092056 0.009933 -0.025303 0.020523 -0.004640 -0.020295 -0.009164 -0.005931 0.018848 0.033915 -0.030364 0.045067 0.004015 0.011173 -0.058507 0.056901 -0.042073 -0.006012 0.046935 -0.107241 0.032777 0.116424 0.038938 0.083070 0.044785 -0.024341 -0.040868 -0.054497 0.021228 \n-0.079570 -0.003619 -0.038468 -0.043009 0.061929 0.088254 0.002999 -0.017741 0.034379 -0.004900 -0.032478 -0.019353 -0.018212 -0.005055 0.014637 -0.048472 -0.001520 0.022877 0.006651 -0.017392 0.069312 -0.058844 -0.004646 0.065142 -0.096265 0.026598 0.135522 0.071861 0.091550 0.032257 -0.016765 -0.075337 -0.064651 0.050908 \n-0.077037 0.036024 -0.029906 -0.041175 0.045056 0.108172 0.001799 -0.013867 0.031473 0.010155 -0.003491 -0.014995 -0.021891 0.005419 -0.006514 -0.067131 -0.050711 0.002908 -0.017700 0.003424 0.063512 -0.037825 -0.008255 0.061508 -0.030670 0.015575 0.161325 0.090053 0.117788 0.091435 -0.010989 -0.096824 -0.085735 0.003260 \n-0.051962 0.043127 0.185753 -0.068488 0.030906 0.083935 -0.070252 0.031192 -0.032752 0.081860 -0.058415 0.100433 -0.075819 -0.159865 -0.059411 0.067034 0.026048 -0.117863 0.048451 0.078422 -0.022589 0.005932 0.109565 -0.086305 0.028208 0.027111 0.068306 -0.018619 -0.000395 0.065584 0.129299 -0.018649 -0.057046 -0.000423 \n-0.110771 0.026821 0.039896 -0.026400 0.073464 0.011366 0.088839 0.010905 0.059433 0.027762 0.038964 -0.069547 0.034358 0.017245 0.035428 -0.063296 -0.129262 0.026781 -0.092055 0.071498 -0.050266 0.045878 -0.036457 -0.040249 0.060855 -0.044906 -0.090430 -0.018843 -0.111822 -0.025148 0.069191 -0.000310 -0.018828 -0.067576 \n-0.109310 -0.015148 0.033856 -0.022173 0.084027 -0.011325 0.100709 0.004099 0.070556 0.012019 0.035921 -0.046262 0.047837 0.012906 0.059339 -0.023335 -0.082080 0.034241 -0.099980 0.038508 -0.057517 0.048531 -0.049704 -0.033707 0.035725 -0.049554 -0.119832 -0.033233 -0.116399 -0.076705 0.057450 0.017861 0.007758 -0.058416 \n-0.105002 -0.041286 0.052806 -0.020899 0.081333 0.007181 0.095687 -0.011183 0.063719 0.009967 0.029662 -0.037522 0.062980 0.038468 0.065127 -0.003635 -0.032995 0.016733 -0.100860 -0.006462 -0.072928 0.073195 -0.048581 -0.059580 0.018777 -0.048728 -0.138328 -0.072245 -0.108275 -0.063238 0.030578 0.066053 0.024802 -0.084883 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n34\n6\n826.213804 695.783596 380.584790 282.861398 209.814481 184.418561 113.076307 104.852653 81.857546 77.095662 71.081802 55.760367 49.883312 39.122009 37.668889 32.916377 31.165932 26.644275 24.233150 21.357573 17.029065 15.432317 13.812689 12.440567 10.213426 9.316734 5.327325 2.526152 1.659451 1.123615 1.015840 0.816193 0.718969 0.582660 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/model/tris_68.txt",
    "content": "# Number of triangulations\n7\n# Triangulation 1\n# triangulation \n97\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 2\n# triangulation \n97\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 3\n# triangulation \n82\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n29 42 28 \n19 20 24 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n53 35 52 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n47 35 46 \n33 32 51 \n30 32 33 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n25 45 26 \n# Triangulation 4\n# triangulation \n31\n3\n4\n58 67 59 \n58 59 6 \n37 18 36 \n41 36 1 \n50 62 51 \n57 58 7 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n31 30 29 \n31 29 40 \n36 17 0 \n41 31 40 \n31 41 1 \n49 31 48 \n48 2 3 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n7 58 6 \n58 66 67 \n31 2 48 \n1 2 31 \n61 50 49 \n50 31 49 \n50 61 62 \n66 58 57 \n8 57 7 \n# Triangulation 5\n# triangulation \n97\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 6\n# triangulation \n82\n3\n4\n58 67 59 \n60 49 48 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n30 33 34 \n41 31 40 \n31 32 30 \n67 60 59 \n60 48 59 \n61 49 60 \n58 66 67 \n31 50 32 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 7\n# triangulation \n31\n3\n4\n44 45 25 \n23 44 24 \n56 65 66 \n54 14 35 \n35 15 46 \n24 44 25 \n29 30 35 \n52 62 63 \n51 62 52 \n63 53 52 \n54 55 11 \n57 8 9 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n29 35 47 \n15 45 46 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/CCNF_patch_expert.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"CCNF_patch_expert.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n// Local includes\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n// Copy constructors of neuron and patch expert\nCCNF_neuron::CCNF_neuron(const CCNF_neuron& other) : weights(other.weights.clone())\n{\n\tthis->neuron_type = other.neuron_type;\n\tthis->norm_weights = other.norm_weights;\n\tthis->bias = other.bias;\n\tthis->alpha = other.alpha;\n\n\tfor (std::map<int, cv::Mat_<double> >::const_iterator it = other.weights_dfts.begin(); it != other.weights_dfts.end(); it++)\n\t{\n\t\t// Make sure the matrix is copied.\n\t\tthis->weights_dfts.insert(std::pair<int, cv::Mat>(it->first, it->second.clone()));\n\t}\n}\n\n// Copy constructor\t\t\nCCNF_patch_expert::CCNF_patch_expert(const CCNF_patch_expert& other) : neurons(other.neurons), window_sizes(other.window_sizes), betas(other.betas)\n{\n\tthis->width = other.width;\n\tthis->height = other.height;\n\tthis->patch_confidence = other.patch_confidence;\n\n\t// Copy the Sigmas in a deep way\n\tfor (std::vector<cv::Mat_<float> >::const_iterator it = other.Sigmas.begin(); it != other.Sigmas.end(); it++)\n\t{\n\t\t// Make sure the matrix is copied.\n\t\tthis->Sigmas.push_back(it->clone());\n\t}\n\n}\n\n// Compute sigmas for all landmarks for a particular view and window size\nvoid CCNF_patch_expert::ComputeSigmas(std::vector<cv::Mat_<float> > sigma_components, int window_size)\n{\n\tfor(size_t i=0; i < window_sizes.size(); ++i)\n\t{\n\t\tif( window_sizes[i] == window_size)\n\t\t\treturn;\n\t}\n\t// Each of the landmarks will have the same connections, hence constant number of sigma components\n\tint n_betas = sigma_components.size();\n\n\t// calculate the sigmas based on alphas and betas\n\tfloat sum_alphas = 0;\n\n\tint n_alphas = this->neurons.size();\n\n\t// sum the alphas first\n\tfor(int a = 0; a < n_alphas; ++a)\n\t{\n\t\tsum_alphas = sum_alphas + this->neurons[a].alpha;\n\t}\n\n\tcv::Mat_<float> q1 = sum_alphas * cv::Mat_<float>::eye(window_size*window_size, window_size*window_size);\n\n\tcv::Mat_<float> q2 = cv::Mat_<float>::zeros(window_size*window_size, window_size*window_size);\n\tfor (int b=0; b < n_betas; ++b)\n\t{\t\t\t\n\t\tq2 = q2 + ((float)this->betas[b]) * sigma_components[b];\n\t}\n\n\tcv::Mat_<float> SigmaInv = 2 * (q1 + q2);\n\t\n\tcv::Mat Sigma_f;\n\tcv::invert(SigmaInv, Sigma_f, cv::DECOMP_CHOLESKY);\n\n\twindow_sizes.push_back(window_size);\n\tSigmas.push_back(Sigma_f);\n\n}\n\n//===========================================================================\nvoid CCNF_neuron::Read(std::ifstream &stream)\n{\n\t// Sanity check\n\tint read_type;\n\tstream.read ((char*)&read_type, 4);\n\tassert(read_type == 2);\n\n\tstream.read ((char*)&neuron_type, 4);\n\tstream.read ((char*)&norm_weights, 8);\n\tstream.read ((char*)&bias, 8);\n\tstream.read ((char*)&alpha, 8);\n\t\n\tLandmarkDetector::ReadMatBin(stream, weights); \n\n}\n\n//===========================================================================\nvoid CCNF_neuron::Response(cv::Mat_<float> &im, cv::Mat_<double> &im_dft, cv::Mat &integral_img, cv::Mat &integral_img_sq, cv::Mat_<float> &resp)\n{\n\n\tint h = im.rows - weights.rows + 1;\n\tint w = im.cols - weights.cols + 1;\n\t\n\t// the patch area on which we will calculate reponses\n\tcv::Mat_<float> I;\n\n\tif(neuron_type == 3)\n\t{\n\t\t// Perform normalisation across whole patch (ignoring the invalid values indicated by <= 0\n\n\t\tcv::Scalar mean;\n\t\tcv::Scalar std;\n\t\t\n\t\t// ignore missing values\n\t\tcv::Mat_<uchar> mask = im > 0;\n\t\tcv::meanStdDev(im, mean, std, mask);\n\n\t\t// if all values the same don't divide by 0\n\t\tif(std[0] != 0)\n\t\t{\n\t\t\tI = (im - mean[0]) / std[0];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tI = (im - mean[0]);\n\t\t}\n\n\t\tI.setTo(0, mask == 0);\n\t}\n\telse\n\t{\n\t\tif(neuron_type == 0)\n\t\t{\n\t\t\tI = im;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tprintf(\"ERROR(%s,%d): Unsupported patch type %d!\\n\", __FILE__,__LINE__,neuron_type);\n\t\t\tabort();\n\t\t}\n\t}\n  \n\tif(resp.empty())\n\t{\t\t\n\t\tresp.create(h, w);\n\t}\n\n\t// The response from neuron before activation\n\tif(neuron_type == 3)\n\t{\n\t\t// In case of depth we use per area, rather than per patch normalisation\n\t\tmatchTemplate_m(I, im_dft, integral_img, integral_img_sq, weights, weights_dfts, resp, CV_TM_CCOEFF); // the linear multiplication, efficient calc of response\n\t}\n\telse\n\t{\n\t\tmatchTemplate_m(I, im_dft, integral_img, integral_img_sq, weights, weights_dfts, resp, CV_TM_CCOEFF_NORMED); // the linear multiplication, efficient calc of response\n\t}\n\n\tcv::MatIterator_<float> p = resp.begin();\n\n\tcv::MatIterator_<float> q1 = resp.begin(); // respone for each pixel\n\tcv::MatIterator_<float> q2 = resp.end();\n\n\t// the logistic function (sigmoid) applied to the response\n\twhile(q1 != q2)\n\t{\n\t\t*p++ = (2 * alpha) * 1.0 /(1.0 + exp( -(*q1++ * norm_weights + bias )));\n\t}\n\n}\n\n//===========================================================================\nvoid CCNF_patch_expert::Read(std::ifstream &stream, std::vector<int> window_sizes, std::vector<std::vector<cv::Mat_<float> > > sigma_components)\n{\n\n\t// Sanity check\n\tint read_type;\n\n\tstream.read ((char*)&read_type, 4);\n\tassert(read_type == 5);\n\n\t// the number of neurons for this patch\n\tint num_neurons;\n\tstream.read ((char*)&width, 4);\n\tstream.read ((char*)&height, 4);\n\tstream.read ((char*)&num_neurons, 4);\n\n\tif(num_neurons == 0)\n\t{\n\t\t// empty patch due to landmark being invisible at that orientation\n\t\n\t\t// read an empty int (due to the way things were written out)\n\t\tstream.read ((char*)&num_neurons, 4);\n\t\treturn;\n\t}\n\n\tneurons.resize(num_neurons);\n\tfor(int i = 0; i < num_neurons; i++)\n\t\tneurons[i].Read(stream);\n\n\tint n_sigmas = window_sizes.size();\n\n\tint n_betas = 0;\n\n\tif(n_sigmas > 0)\n\t{\n\t\tn_betas = sigma_components[0].size();\n\n\t\tbetas.resize(n_betas);\n\n\t\tfor (int i=0; i < n_betas;  ++i)\n\t\t{\n\t\t\tstream.read ((char*)&betas[i], 8);\n\t\t}\n\t}\t\n\n\t// Read the patch confidence\n\tstream.read ((char*)&patch_confidence, 8);\n\n}\n\n//===========================================================================\nvoid CCNF_patch_expert::Response(cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response)\n{\n\t\n\tint response_height = area_of_interest.rows - height + 1;\n\tint response_width = area_of_interest.cols - width + 1;\n\n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\t\t\n\tresponse.setTo(0);\n\t\n\t// the placeholder for the DFT of the image, the integral image, and squared integral image so they don't get recalculated for every response\n\tcv::Mat_<double> area_of_interest_dft;\n\tcv::Mat integral_image, integral_image_sq;\n\t\n\tcv::Mat_<float> neuron_response;\n\n\t// responses from the neural layers\n\tfor(size_t i = 0; i < neurons.size(); i++)\n\t{\t\t\n\t\t// Do not bother with neuron response if the alpha is tiny and will not contribute much to overall result\n\t\tif(neurons[i].alpha > 1e-4)\n\t\t{\n\t\t\tneurons[i].Response(area_of_interest, area_of_interest_dft, integral_image, integral_image_sq, neuron_response);\n\t\t\tresponse = response + neuron_response;\t\t\t\t\t\t\n\t\t}\n\t}\n\n\tint s_to_use = -1;\n\n\t// Find the matching sigma\n\tfor(size_t i=0; i < window_sizes.size(); ++i)\n\t{\n\t\tif(window_sizes[i] == response_height)\n\t\t{\n\t\t\t// Found the correct sigma\n\t\t\ts_to_use = i;\t\t\t\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tcv::Mat_<float> resp_vec_f = response.reshape(1, response_height * response_width);\n\n\tcv::Mat out = Sigmas[s_to_use] * resp_vec_f;\n\t\n\tresponse = out.reshape(1, response_height);\n\n\t// Making sure the response does not have negative numbers\n\tdouble min;\n\n\tminMaxIdx(response, &min, 0);\n\tif(min < 0)\n\t{\n\t\tresponse = response - min;\n\t}\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/LandmarkDetectionValidator.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectionValidator.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n// System includes\n#include <fstream>\n\n// Math includes\n#define _USE_MATH_DEFINES\n#include <cmath>\n\n#ifndef M_PI\n#define M_PI 3.14159265358979323846\n#endif\n// Local includes\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n// Copy constructor\nDetectionValidator::DetectionValidator(const DetectionValidator& other) : orientations(other.orientations), bs(other.bs), paws(other.paws),\n    cnn_subsampling_layers(other.cnn_subsampling_layers), cnn_layer_types(other.cnn_layer_types), cnn_fully_connected_layers_bias(other.cnn_fully_connected_layers_bias),\n    cnn_convolutional_layers_bias(other.cnn_convolutional_layers_bias), cnn_convolutional_layers_dft(other.cnn_convolutional_layers_dft)\n{\n\n    this->validator_type = other.validator_type;\n\n    this->activation_fun = other.activation_fun;\n    this->output_fun = other.output_fun;\n\n    this->ws.resize(other.ws.size());\n    for (size_t i = 0; i < other.ws.size(); ++i)\n    {\n        // Make sure the matrix is copied.\n        this->ws[i] = other.ws[i].clone();\n    }\n\n    this->ws_nn.resize(other.ws_nn.size());\n    for (size_t i = 0; i < other.ws_nn.size(); ++i)\n    {\n        this->ws_nn[i].resize(other.ws_nn[i].size());\n\n        for (size_t k = 0; k < other.ws_nn[i].size(); ++k)\n        {\n            // Make sure the matrix is copied.\n            this->ws_nn[i][k] = other.ws_nn[i][k].clone();\n        }\n    }\n\n    this->cnn_convolutional_layers.resize(other.cnn_convolutional_layers.size());\n    for (size_t v = 0; v < other.cnn_convolutional_layers.size(); ++v)\n    {\n        this->cnn_convolutional_layers[v].resize(other.cnn_convolutional_layers[v].size());\n\n        for (size_t l = 0; l < other.cnn_convolutional_layers[v].size(); ++l)\n        {\n            this->cnn_convolutional_layers[v][l].resize(other.cnn_convolutional_layers[v][l].size());\n\n            for (size_t i = 0; i < other.cnn_convolutional_layers[v][l].size(); ++i)\n            {\n                this->cnn_convolutional_layers[v][l][i].resize(other.cnn_convolutional_layers[v][l][i].size());\n\n                for (size_t k = 0; k < other.cnn_convolutional_layers[v][l][i].size(); ++k)\n                {\n                    // Make sure the matrix is copied.\n                    this->cnn_convolutional_layers[v][l][i][k] = other.cnn_convolutional_layers[v][l][i][k].clone();\n                }\n\n            }\n        }\n    }\n\n    this->cnn_fully_connected_layers.resize(other.cnn_fully_connected_layers.size());\n    for (size_t v = 0; v < other.cnn_fully_connected_layers.size(); ++v)\n    {\n        this->cnn_fully_connected_layers[v].resize(other.cnn_fully_connected_layers[v].size());\n\n        for (size_t l = 0; l < other.cnn_fully_connected_layers[v].size(); ++l)\n        {\n            // Make sure the matrix is copied.\n            this->cnn_fully_connected_layers[v][l] = other.cnn_fully_connected_layers[v][l].clone();\n        }\n    }\n\n    this->mean_images.resize(other.mean_images.size());\n    for (size_t i = 0; i < other.mean_images.size(); ++i)\n    {\n        // Make sure the matrix is copied.\n        this->mean_images[i] = other.mean_images[i].clone();\n    }\n\n    this->standard_deviations.resize(other.standard_deviations.size());\n    for (size_t i = 0; i < other.standard_deviations.size(); ++i)\n    {\n        // Make sure the matrix is copied.\n        this->standard_deviations[i] = other.standard_deviations[i].clone();\n    }\n\n}\n\n//===========================================================================\n// Read in the landmark detection validation module\nvoid DetectionValidator::Read(std::string location)\n{\n\n    std::ifstream detection_validator_stream (location, std::ios::in | std::ios::binary);\n    if (detection_validator_stream.is_open())\n    {\n        detection_validator_stream.seekg (0, std::ios::beg);\n\n        // Read validator type\n        detection_validator_stream.read ((char*)&validator_type, 4);\n\n        // Read the number of views (orientations) within the validator\n        int n;\n        detection_validator_stream.read ((char*)&n, 4);\n\n        orientations.resize(n);\n\n        for(int i = 0; i < n; i++)\n        {\n            cv::Mat_<double> orientation_tmp;\n            LandmarkDetector::ReadMatBin(detection_validator_stream, orientation_tmp);\n\n            orientations[i] = cv::Vec3d(orientation_tmp.at<double>(0), orientation_tmp.at<double>(1), orientation_tmp.at<double>(2));\n\n            // Convert from degrees to radians\n            orientations[i] = orientations[i] * M_PI / 180.0;\n        }\n\n        // Initialise the piece-wise affine warps, biases and weights\n        paws.resize(n);\n\n        if( validator_type == 0)\n        {\n            // Reading in SVRs\n            bs.resize(n);\n            ws.resize(n);\n        }\n        else if(validator_type == 1)\n        {\n            // Reading in NNs\n            ws_nn.resize(n);\n\n            activation_fun.resize(n);\n            output_fun.resize(n);\n        }\n        else if(validator_type == 2)\n        {\n            cnn_convolutional_layers.resize(n);\n            cnn_convolutional_layers_dft.resize(n);\n            cnn_subsampling_layers.resize(n);\n            cnn_fully_connected_layers.resize(n);\n            cnn_layer_types.resize(n);\n            cnn_fully_connected_layers_bias.resize(n);\n            cnn_convolutional_layers_bias.resize(n);\n        }\n\n        // Initialise the normalisation terms\n        mean_images.resize(n);\n        standard_deviations.resize(n);\n\n        // Read in the validators for each of the views\n        for(int i = 0; i < n; i++)\n        {\n\n            // Read in the mean images\n            LandmarkDetector::ReadMatBin(detection_validator_stream, mean_images[i]);\n            mean_images[i] = mean_images[i].t();\n\n            LandmarkDetector::ReadMatBin(detection_validator_stream, standard_deviations[i]);\n            standard_deviations[i] = standard_deviations[i].t();\n\n            // Model specifics\n            if(validator_type == 0)\n            {\n                // Reading in the biases and weights\n                detection_validator_stream.read ((char*)&bs[i], 8);\n                LandmarkDetector::ReadMatBin(detection_validator_stream, ws[i]);\n\n            }\n            else if(validator_type == 1)\n            {\n\n                // Reading in the number of layers in the neural net\n                int num_depth_layers;\n                detection_validator_stream.read ((char*)&num_depth_layers, 4);\n\n                // Reading in activation and output function types\n                detection_validator_stream.read ((char*)&activation_fun[i], 4);\n                detection_validator_stream.read ((char*)&output_fun[i], 4);\n\n                ws_nn[i].resize(num_depth_layers);\n                for(int layer = 0; layer < num_depth_layers; layer++)\n                {\n                    LandmarkDetector::ReadMatBin(detection_validator_stream, ws_nn[i][layer]);\n\n                    // Transpose for efficiency during multiplication\n                    ws_nn[i][layer] = ws_nn[i][layer].t();\n                }\n            }\n            else if(validator_type == 2)\n            {\n                // Reading in CNNs\n\n                int network_depth;\n                detection_validator_stream.read ((char*)&network_depth, 4);\n\n                cnn_layer_types[i].resize(network_depth);\n\n                for(int layer = 0; layer < network_depth; ++layer)\n                {\n\n                    int layer_type;\n                    detection_validator_stream.read ((char*)&layer_type, 4);\n                    cnn_layer_types[i][layer] = layer_type;\n\n                    // convolutional\n                    if(layer_type == 0)\n                    {\n\n                        // Read the number of input maps\n                        int num_in_maps;\n                        detection_validator_stream.read ((char*)&num_in_maps, 4);\n\n                        // Read the number of kernels for each input map\n                        int num_kernels;\n                        detection_validator_stream.read ((char*)&num_kernels, 4);\n\n                        std::vector<std::vector<cv::Mat_<float> > > kernels;\n                        std::vector<std::vector<std::pair<int, cv::Mat_<double> > > > kernel_dfts;\n\n                        kernels.resize(num_in_maps);\n                        kernel_dfts.resize(num_in_maps);\n\n                        std::vector<float> biases;\n                        for (int k = 0; k < num_kernels; ++k)\n                        {\n                            float bias;\n                            detection_validator_stream.read ((char*)&bias, 4);\n                            biases.push_back(bias);\n                        }\n\n                        cnn_convolutional_layers_bias[i].push_back(biases);\n\n                        // For every input map\n                        for (int in = 0; in < num_in_maps; ++in)\n                        {\n                            kernels[in].resize(num_kernels);\n                            kernel_dfts[in].resize(num_kernels);\n\n                            // For every kernel on that input map\n                            for (int k = 0; k < num_kernels; ++k)\n                            {\n                                ReadMatBin(detection_validator_stream, kernels[in][k]);\n\n                                // Flip the kernel in order to do convolution and not correlation\n                                cv::flip(kernels[in][k], kernels[in][k], -1);\n                            }\n                        }\n\n                        cnn_convolutional_layers[i].push_back(kernels);\n                        cnn_convolutional_layers_dft[i].push_back(kernel_dfts);\n                    }\n                    else if(layer_type == 1)\n                    {\n                        // Subsampling layer\n\n                        int scale;\n                        detection_validator_stream.read ((char*)&scale, 4);\n\n                        cnn_subsampling_layers[i].push_back(scale);\n                    }\n                    else if(layer_type == 2)\n                    {\n                        float bias;\n                        detection_validator_stream.read ((char*)&bias, 4);\n                        cnn_fully_connected_layers_bias[i].push_back(bias);\n\n                        // Fully connected layer\n                        cv::Mat_<float> weights;\n                        ReadMatBin(detection_validator_stream, weights);\n                        cnn_fully_connected_layers[i].push_back(weights);\n                    }\n                }\n            }\n\n            // Read in the piece-wise affine warps\n            paws[i].Read(detection_validator_stream);\n        }\n\n    }\n    else\n    {\n        std::cout << \"WARNING: Can't find the Face checker location\" << std::endl;\n    }\n}\n\n//===========================================================================\n// Check if the fitting actually succeeded\ndouble DetectionValidator::Check(const cv::Vec3d& orientation, const cv::Mat_<uchar>& intensity_img, cv::Mat_<double>& detected_landmarks)\n{\n\n    int id = GetViewId(orientation);\n\n    // The warped (cropped) image, corresponding to a face lying withing the detected lanmarks\n    cv::Mat_<double> warped;\n\n    // the piece-wise affine image\n    cv::Mat_<double> intensity_img_double;\n    intensity_img.convertTo(intensity_img_double, CV_64F);\n\n    paws[id].Warp(intensity_img_double, warped, detected_landmarks);\n\n    double dec;\n    if(validator_type == 0)\n    {\n        dec = CheckSVR(warped, id);\n    }\n    else if(validator_type == 1)\n    {\n        dec = CheckNN(warped, id);\n    }\n    else if(validator_type == 2)\n    {\n        dec = CheckCNN(warped, id);\n    }\n    return dec;\n}\n\ndouble DetectionValidator::CheckNN(const cv::Mat_<double>& warped_img, int view_id)\n{\n    cv::Mat_<double> feature_vec;\n    NormaliseWarpedToVector(warped_img, feature_vec, view_id);\n    feature_vec = feature_vec.t();\n\n    for(size_t layer = 0; layer < ws_nn[view_id].size(); ++layer)\n    {\n        // Add a bias term\n        cv::hconcat(cv::Mat_<double>(1,1, 1.0), feature_vec, feature_vec);\n\n        // Apply the weights\n        feature_vec = feature_vec * ws_nn[view_id][layer];\n\n        // Activation or output\n        int fun_type;\n        if(layer != ws_nn[view_id].size() - 1)\n        {\n            fun_type = activation_fun[view_id];\n        }\n        else\n        {\n            fun_type = output_fun[view_id];\n        }\n\n        if(fun_type == 0)\n        {\n            cv::exp(-feature_vec, feature_vec);\n            feature_vec = 1.0 /(1.0 + feature_vec);\n        }\n        else if(fun_type == 1)\n        {\n            cv::MatIterator_<double> q1 = feature_vec.begin(); // respone for each pixel\n            cv::MatIterator_<double> q2 = feature_vec.end();\n\n            // the logistic function (sigmoid) applied to the response\n            while(q1 != q2)\n            {\n                *q1 = 1.7159 * tanh((2.0/3.0) * (*q1));\n                q1++;\n            }\n        }\n        // TODO ReLU\n\n    }\n\n    // Turn it to -1, 1 range\n    double dec = (feature_vec.at<double>(0) - 0.5) * 2;\n\n    return dec;\n\n}\n\ndouble DetectionValidator::CheckSVR(const cv::Mat_<double>& warped_img, int view_id)\n{\n\n    cv::Mat_<double> feature_vec;\n    NormaliseWarpedToVector(warped_img, feature_vec, view_id);\n\n\n    double dec = (ws[view_id].dot(feature_vec.t()) + bs[view_id]);\n\n    return dec;\n\n}\n\n// Convolutional Neural Network\ndouble DetectionValidator::CheckCNN(const cv::Mat_<double>& warped_img, int view_id)\n{\n\n    cv::Mat_<double> feature_vec;\n    NormaliseWarpedToVector(warped_img, feature_vec, view_id);\n\n    // Create a normalised image from the crop vector\n    cv::Mat_<float> img(warped_img.size(), 0.0);\n    img = img.t();\n\n    cv::Mat mask = paws[view_id].pixel_mask.t();\n    cv::MatIterator_<uchar>  mask_it = mask.begin<uchar>();\n\n    cv::MatIterator_<double> feature_it = feature_vec.begin();\n    cv::MatIterator_<float> img_it = img.begin();\n\n    int wInt = img.cols;\n    int hInt = img.rows;\n\n    for(int i=0; i < wInt; ++i)\n    {\n        for(int j=0; j < hInt; ++j, ++mask_it, ++img_it)\n        {\n            // if is within mask\n            if(*mask_it)\n            {\n                // assign the feature to image if it is within the mask\n                *img_it = (float)*feature_it++;\n            }\n        }\n    }\n    img = img.t();\n\n    int cnn_layer = 0;\n    int subsample_layer = 0;\n    int fully_connected_layer = 0;\n\n    std::vector<cv::Mat_<float> > input_maps;\n    input_maps.push_back(img);\n\n    std::vector<cv::Mat_<float> > outputs;\n\n    for(size_t layer = 0; layer < cnn_layer_types[view_id].size(); ++layer)\n    {\n        // Determine layer type\n        int layer_type = cnn_layer_types[view_id][layer];\n\n\n        // Convolutional layer\n        if(layer_type == 0)\n        {\n            std::vector<cv::Mat_<float> > outputs_kern;\n            for(size_t in = 0; in < input_maps.size(); ++in)\n            {\n                cv::Mat_<float> input_image = input_maps[in];\n\n                // Useful precomputed data placeholders for quick correlation (convolution)\n                cv::Mat_<double> input_image_dft;\n                cv::Mat integral_image;\n                cv::Mat integral_image_sq;\n\n                for(size_t k = 0; k < cnn_convolutional_layers[view_id][cnn_layer][in].size(); ++k)\n                {\n                    cv::Mat_<float> kernel = cnn_convolutional_layers[view_id][cnn_layer][in][k];\n\n                    // The convolution (with precomputation)\n                    cv::Mat_<float> output;\n                    if(cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].second.empty())\n                    {\n                        std::map<int, cv::Mat_<double> > precomputed_dft;\n\n                        LandmarkDetector::matchTemplate_m(input_image, input_image_dft, integral_image, integral_image_sq, kernel, precomputed_dft, output, CV_TM_CCORR);\n\n                        cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].first = precomputed_dft.begin()->first;\n                        cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].second = precomputed_dft.begin()->second;\n                    }\n                    else\n                    {\n                        std::map<int, cv::Mat_<double> > precomputed_dft;\n                        precomputed_dft[cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].first] = cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].second;\n                        LandmarkDetector::matchTemplate_m(input_image, input_image_dft, integral_image, integral_image_sq, kernel,  precomputed_dft, output, CV_TM_CCORR);\n                    }\n\n                    // Combining the maps\n                    if(in == 0)\n                    {\n                        outputs_kern.push_back(output);\n                    }\n                    else\n                    {\n                        outputs_kern[k] = outputs_kern[k] + output;\n                    }\n\n                }\n\n            }\n\n            outputs.clear();\n            for(size_t k = 0; k < cnn_convolutional_layers[view_id][cnn_layer][0].size(); ++k)\n            {\n                // Apply the sigmoid\n                cv::exp(-outputs_kern[k] - cnn_convolutional_layers_bias[view_id][cnn_layer][k], outputs_kern[k]);\n                outputs_kern[k] = 1.0 /(1.0 + outputs_kern[k]);\n\n                outputs.push_back(outputs_kern[k]);\n\n            }\n\n            cnn_layer++;\n        }\n        if(layer_type == 1)\n        {\n            // Subsampling layer\n            int scale = cnn_subsampling_layers[view_id][subsample_layer];\n\n            cv::Mat kx = cv::Mat::ones(2, 1, CV_32F)*1.0f/scale;\n            cv::Mat ky = cv::Mat::ones(1, 2, CV_32F)*1.0f/scale;\n\n            std::vector<cv::Mat_<float> > outputs_sub;\n            for(size_t in = 0; in < input_maps.size(); ++in)\n            {\n\n                cv::Mat_<float> conv_out;\n\n                cv::sepFilter2D(input_maps[in], conv_out, CV_32F, kx, ky);\n                conv_out = conv_out(cv::Rect(1, 1, conv_out.cols - 1, conv_out.rows - 1));\n\n                int res_rows = conv_out.rows / scale;\n                int res_cols = conv_out.cols / scale;\n\n                if(conv_out.rows % scale != 0)\n                {\n                    res_rows++;\n                }\n                if(conv_out.cols % scale != 0)\n                {\n                    res_cols++;\n                }\n\n                cv::Mat_<float> sub_out(res_rows, res_cols);\n                for(int w = 0; w < conv_out.cols; w+=scale)\n                {\n                    for(int h=0; h < conv_out.rows; h+=scale)\n                    {\n                        sub_out.at<float>(h/scale, w/scale) = conv_out(h, w);\n                    }\n                }\n                outputs_sub.push_back(sub_out);\n            }\n            outputs = outputs_sub;\n            subsample_layer++;\n\n        }\n        if(layer_type == 2)\n        {\n            // Concatenate all the maps\n            cv::Mat_<float> input_concat = input_maps[0].t();\n            input_concat = input_concat.reshape(0, 1);\n\n            for(size_t in = 1; in < input_maps.size(); ++in)\n            {\n                cv::Mat_<float> add = input_maps[in].t();\n                add = add.reshape(0,1);\n                cv::hconcat(input_concat, add, input_concat);\n            }\n\n            input_concat = input_concat * cnn_fully_connected_layers[view_id][fully_connected_layer].t();\n\n            cv::exp(-input_concat - cnn_fully_connected_layers_bias[view_id][fully_connected_layer], input_concat);\n            input_concat = 1.0 /(1.0 + input_concat);\n\n            outputs.clear();\n            outputs.push_back(input_concat);\n\n            fully_connected_layer++;\n        }\n        // Set the outputs of this layer to inputs of the next\n        input_maps = outputs;\n\n    }\n\n    // Turn it to -1, 1 range\n    double dec = (outputs[0].at<float>(0) - 0.5) * 2.0;\n\n    return dec;\n}\n\nvoid DetectionValidator::NormaliseWarpedToVector(const cv::Mat_<double>& warped_img, cv::Mat_<double>& feature_vec, int view_id)\n{\n    cv::Mat_<double> warped_t = warped_img.t();\n\n    // the vector to be filled with paw values\n    cv::MatIterator_<double> vp;\n    cv::MatIterator_<double>  cp;\n\n    cv::Mat_<double> vec(paws[view_id].number_of_pixels,1);\n    vp = vec.begin();\n\n    cp = warped_t.begin();\n\n    int wInt = warped_img.cols;\n    int hInt = warped_img.rows;\n\n    // the mask indicating if point is within or outside the face region\n\n    cv::Mat maskT = paws[view_id].pixel_mask.t();\n\n    cv::MatIterator_<uchar>  mp = maskT.begin<uchar>();\n\n    for(int i=0; i < wInt; ++i)\n    {\n        for(int j=0; j < hInt; ++j, ++mp, ++cp)\n        {\n            // if is within mask\n            if(*mp)\n            {\n                *vp++ = *cp;\n            }\n        }\n    }\n\n    // Local normalisation\n    cv::Scalar mean;\n    cv::Scalar std;\n    cv::meanStdDev(vec, mean, std);\n\n    // subtract the mean image\n    vec -= mean[0];\n\n    // Normalise the image\n    if(std[0] == 0)\n    {\n        std[0] = 1;\n    }\n\n    vec /= std[0];\n\n    // Global normalisation\n    feature_vec = (vec - mean_images[view_id])  / standard_deviations[view_id];\n}\n\n// Getting the closest view center based on orientation\nint DetectionValidator::GetViewId(const cv::Vec3d& orientation) const\n{\n    int id = 0;\n\n    double dbest = -1.0;\n\n    for(size_t i = 0; i < this->orientations.size(); i++)\n    {\n\n        // Distance to current view\n        double d = cv::norm(orientation, this->orientations[i]);\n\n        if(i == 0 || d < dbest)\n        {\n            dbest = d;\n            id = i;\n        }\n    }\n    return id;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/LandmarkDetectorFunc.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED �AS IS� FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called �open source� software licenses (�Open Source\n// Components�), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensee�s request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltru�aitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltru�aitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltru�aitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltru�aitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectorFunc.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/calib3d.hpp>\n#include <opencv2/imgproc.hpp>\n\n// System includes\n#include <vector>\n\nusing namespace LandmarkDetector;\n\n// Getting a head pose estimate from the currently detected landmarks (rotation with respect to point camera)\n// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\ncv::Vec6d LandmarkDetector::GetPoseCamera(const CLNF& clnf_model, double fx, double fy, double cx, double cy)\n{\n    if(!clnf_model.detected_landmarks.empty() && clnf_model.params_global[0] != 0)\n    {\n        double Z = fx / clnf_model.params_global[0];\n        \n        double X = ((clnf_model.params_global[4] - cx) * (1.0/fx)) * Z;\n        double Y = ((clnf_model.params_global[5] - cy) * (1.0/fy)) * Z;\n        \n        return cv::Vec6d(X, Y, Z, clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]);\n    }\n    else\n    {\n        return cv::Vec6d(0,0,0,0,0,0);\n    }\n}\n\n// Getting a head pose estimate from the currently detected landmarks (rotation in world coordinates)\n// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\ncv::Vec6d LandmarkDetector::GetPoseWorld(const CLNF& clnf_model, double fx, double fy, double cx, double cy)\n{\n    if(!clnf_model.detected_landmarks.empty() && clnf_model.params_global[0] != 0)\n    {\n        double Z = fx / clnf_model.params_global[0];\n        \n        double X = ((clnf_model.params_global[4] - cx) * (1.0/fx)) * Z;\n        double Y = ((clnf_model.params_global[5] - cy) * (1.0/fy)) * Z;\n        \n        // Here we correct for the camera orientation, for this need to determine the angle the camera makes with the head pose\n        double z_x = cv::sqrt(X * X + Z * Z);\n        double eul_x = atan2(Y, z_x);\n        \n        double z_y = cv::sqrt(Y * Y + Z * Z);\n        double eul_y = -atan2(X, z_y);\n        \n        cv::Matx33d camera_rotation = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(eul_x, eul_y, 0));\n        cv::Matx33d head_rotation = LandmarkDetector::AxisAngle2RotationMatrix(cv::Vec3d(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]));\n        \n        cv::Matx33d corrected_rotation = camera_rotation.t() * head_rotation;\n        \n        cv::Vec3d euler_corrected = LandmarkDetector::RotationMatrix2Euler(corrected_rotation);\n        \n        return cv::Vec6d(X, Y, Z, euler_corrected[0], euler_corrected[1], euler_corrected[2]);\n    }\n    else\n    {\n        return cv::Vec6d(0,0,0,0,0,0);\n    }\n}\n\n// Getting a head pose estimate from the currently detected landmarks, with appropriate correction due to orthographic camera issue\n// This is because rotation estimate under orthographic assumption is only correct close to the centre of the image\n// This method returns a corrected pose estimate with respect to world coordinates (Experimental)\n// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\ncv::Vec6d LandmarkDetector::GetCorrectedPoseWorld(const CLNF& clnf_model, double fx, double fy, double cx, double cy)\n{\n    if(!clnf_model.detected_landmarks.empty() && clnf_model.params_global[0] != 0)\n    {\n        // This is used as an initial estimate for the iterative PnP algorithm\n        double Z = fx / clnf_model.params_global[0];\n        \n        double X = ((clnf_model.params_global[4] - cx) * (1.0/fx)) * Z;\n        double Y = ((clnf_model.params_global[5] - cy) * (1.0/fy)) * Z;\n        \n        // Correction for orientation\n        \n        // 2D points\n        cv::Mat_<double> landmarks_2D = clnf_model.detected_landmarks;\n        \n        landmarks_2D = landmarks_2D.reshape(1, 2).t();\n        \n        // 3D points\n        cv::Mat_<double> landmarks_3D;\n        clnf_model.pdm.CalcShape3D(landmarks_3D, clnf_model.params_local);\n        \n        landmarks_3D = landmarks_3D.reshape(1, 3).t();\n        \n        // Solving the PNP model\n        \n        // The camera matrix\n        cv::Matx33d camera_matrix(fx, 0, cx, 0, fy, cy, 0, 0, 1);\n        \n        cv::Vec3d vec_trans(X, Y, Z);\n        cv::Vec3d vec_rot(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]);\n        \n        cv::solvePnP(landmarks_3D, landmarks_2D, camera_matrix, cv::Mat(), vec_rot, vec_trans, true);\n        \n        cv::Vec3d euler = LandmarkDetector::AxisAngle2Euler(vec_rot);\n        \n        return cv::Vec6d(vec_trans[0], vec_trans[1], vec_trans[2], vec_rot[0], vec_rot[1], vec_rot[2]);\n    }\n    else\n    {\n        return cv::Vec6d(0,0,0,0,0,0);\n    }\n}\n\n// Getting a head pose estimate from the currently detected landmarks, with appropriate correction due to perspective projection\n// This method returns a corrected pose estimate with respect to a point camera (NOTE not the world coordinates) (Experimental)\n// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\ncv::Vec6d LandmarkDetector::GetCorrectedPoseCamera(const CLNF& clnf_model, double fx, double fy, double cx, double cy)\n{\n    if(!clnf_model.detected_landmarks.empty() && clnf_model.params_global[0] != 0)\n    {\n        \n        double Z = fx / clnf_model.params_global[0];\n        \n        double X = ((clnf_model.params_global[4] - cx) * (1.0/fx)) * Z;\n        double Y = ((clnf_model.params_global[5] - cy) * (1.0/fy)) * Z;\n        \n        // Correction for orientation\n        \n        // 3D points\n        cv::Mat_<double> landmarks_3D;\n        clnf_model.pdm.CalcShape3D(landmarks_3D, clnf_model.params_local);\n        \n        landmarks_3D = landmarks_3D.reshape(1, 3).t();\n        \n        // 2D points\n        cv::Mat_<double> landmarks_2D = clnf_model.detected_landmarks;\n        \n        landmarks_2D = landmarks_2D.reshape(1, 2).t();\n        \n        // Solving the PNP model\n        \n        // The camera matrix\n        cv::Matx33d camera_matrix(fx, 0, cx, 0, fy, cy, 0, 0, 1);\n        \n        cv::Vec3d vec_trans(X, Y, Z);\n        cv::Vec3d vec_rot(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]);\n        \n        cv::solvePnP(landmarks_3D, landmarks_2D, camera_matrix, cv::Mat(), vec_rot, vec_trans, true);\n        \n        // Here we correct for the camera orientation, for this need to determine the angle the camera makes with the head pose\n        double z_x = cv::sqrt(vec_trans[0] * vec_trans[0] + vec_trans[2] * vec_trans[2]);\n        double eul_x = atan2(vec_trans[1], z_x);\n        \n        double z_y = cv::sqrt(vec_trans[1] * vec_trans[1] + vec_trans[2] * vec_trans[2]);\n        double eul_y = -atan2(vec_trans[0], z_y);\n        \n        cv::Matx33d camera_rotation = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(eul_x, eul_y, 0));\n        cv::Matx33d head_rotation = LandmarkDetector::AxisAngle2RotationMatrix(vec_rot);\n        \n        cv::Matx33d corrected_rotation = camera_rotation * head_rotation;\n        \n        cv::Vec3d euler_corrected = LandmarkDetector::RotationMatrix2Euler(corrected_rotation);\n        \n        return cv::Vec6d(vec_trans[0], vec_trans[1], vec_trans[2], euler_corrected[0], euler_corrected[1], euler_corrected[2]);\n    }\n    else\n    {\n        return cv::Vec6d(0,0,0,0,0,0);\n    }\n}\n\n// If landmark detection in video succeeded create a template for use in simple tracking\nvoid UpdateTemplate(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model)\n{\n    cv::Rect bounding_box;\n    clnf_model.pdm.CalcBoundingBox(bounding_box, clnf_model.params_global, clnf_model.params_local);\n    // Make sure the box is not out of bounds\n    bounding_box = bounding_box & cv::Rect(0, 0, grayscale_image.cols, grayscale_image.rows);\n    \n    clnf_model.face_template = grayscale_image(bounding_box).clone();\n    clnf_model.face_x_pos = bounding_box.x;\n    clnf_model.face_y_pos = bounding_box.y;\n    clnf_model.face_width = bounding_box.width;\n    clnf_model.face_height = bounding_box.height;\n}\n\n// This method uses basic template matching in order to allow for better tracking of fast moving faces\nvoid CorrectGlobalParametersVideo(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, const FaceModelParameters& params)\n{\n    cv::Rect init_box;\n    clnf_model.pdm.CalcBoundingBox(init_box, clnf_model.params_global, clnf_model.params_local);\n    \n    cv::Rect roi(init_box.x - init_box.width/2, init_box.y - init_box.height/2, init_box.width * 2, init_box.height * 2);\n    roi = roi & cv::Rect(0, 0, grayscale_image.cols, grayscale_image.rows);\n    \n    int off_x = roi.x;\n    int off_y = roi.y;\n    \n    double scaling = params.face_template_scale / clnf_model.params_global[0];\n    cv::Mat_<uchar> image;\n    if(scaling < 1)\n    {\n        cv::resize(clnf_model.face_template, clnf_model.face_template, cv::Size(), scaling, scaling);\n        cv::resize(grayscale_image(roi), image, cv::Size(), scaling, scaling);\n    }\n    else\n    {\n        scaling = 1;\n        image = grayscale_image(roi).clone();\n    }\n    \n    // Resizing the template\t\t\t\n    cv::Mat corr_out;\n    cv::matchTemplate(image, clnf_model.face_template, corr_out, CV_TM_CCOEFF_NORMED);\n    \n    // Actually matching it\n    //double min, max;\n    int max_loc[2];\n    \n    cv::minMaxIdx(corr_out, NULL, NULL, NULL, max_loc);\n    \n    cv::Rect_<double> out_bbox(max_loc[1]/scaling + off_x, max_loc[0]/scaling + off_y, clnf_model.face_template.rows / scaling, clnf_model.face_template.cols / scaling);\n    \n    double shift_x = out_bbox.x - (double)init_box.x;\n    double shift_y = out_bbox.y - (double)init_box.y;\n    \n    clnf_model.params_global[4] = clnf_model.params_global[4] + shift_x;\n    clnf_model.params_global[5] = clnf_model.params_global[5] + shift_y;\n    \n}\n\nbool LandmarkDetector::DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> &depth_image, CLNF& clnf_model, FaceModelParameters& params)\n{\n    // First need to decide if the landmarks should be \"detected\" or \"tracked\"\n    // Detected means running face detection and a larger search area, tracked means initialising from previous step\n    // and using a smaller search area\n    \n    // Indicating that this is a first detection in video sequence or after restart\n    bool initial_detection = !clnf_model.tracking_initialised;\n    \n    // Only do it if there was a face detection at all\n    if(clnf_model.tracking_initialised)\n    {\n        \n        // The area of interest search size will depend if the previous track was successful\n        if(!clnf_model.detection_success)\n        {\n            params.window_sizes_current = params.window_sizes_init;\n        }\n        else\n        {\n            params.window_sizes_current = params.window_sizes_small;\n        }\n        \n        // Before the expensive landmark detection step apply a quick template tracking approach\n        if(params.use_face_template && !clnf_model.face_template.empty() && clnf_model.detection_success)\n        {\n            CorrectGlobalParametersVideo(grayscale_image, clnf_model, params);\n        }\n        bool track_success = clnf_model.DetectLandmarks(grayscale_image, depth_image, params);\n        if(!track_success)\n        {\n            // Make a record that tracking failed\n            clnf_model.failures_in_a_row++;\n        }\n        else\n        {\n            // indicate that tracking is a success\n            clnf_model.failures_in_a_row = -1;\t\t\t\n            UpdateTemplate(grayscale_image, clnf_model);\n        }\n    }\n    \n    // This is used for both detection (if it the tracking has not been initialised yet) or if the tracking failed (however we do this every n frames, for speed)\n    // This also has the effect of an attempt to reinitialise just after the tracking has failed, which is useful during large motions\n    if((!clnf_model.tracking_initialised && (clnf_model.failures_in_a_row + 1) % (params.reinit_video_every * 6) == 0) \n       || (clnf_model.tracking_initialised && !clnf_model.detection_success && params.reinit_video_every > 0 && clnf_model.failures_in_a_row % params.reinit_video_every == 0))\n    {\n        \n        cv::Rect_<double> bounding_box;\n        \n        // If the face detector has not been initialised read it in\n        if(clnf_model.face_detector_HAAR.empty())\n        {\n            clnf_model.face_detector_HAAR.load(params.face_detector_location);\n            clnf_model.face_detector_location = params.face_detector_location;\n        }\n        \n        // If the face detector has not been initialised read it in\n        if(clnf_model.seetaface_detector == NULL)\n        {\n            clnf_model.seetaface_detector = new seeta::FaceDetection(params.seetaface_detector_location.c_str());\n            clnf_model.seetaface_detector_location = params.seetaface_detector_location;\n        }\n        \n        cv::Point preference_det(-1, -1);\n        if(clnf_model.preference_det.x != -1 && clnf_model.preference_det.y != -1)\n        {\n            preference_det.x = clnf_model.preference_det.x * grayscale_image.cols;\n            preference_det.y = clnf_model.preference_det.y * grayscale_image.rows;\n            clnf_model.preference_det = cv::Point(-1, -1);\n        }\n        \n        bool face_detection_success;\n        //\t\tif(params.curr_face_detector == FaceModelParameters::HOG_SVM_DETECTOR)\n        //\t\t{\n        //\t\t\tdouble confidence;\n        //\t\t\tface_detection_success = LandmarkDetector::DetectSingleFaceHOG(bounding_box, grayscale_image, clnf_model.face_detector_HOG, confidence, preference_det);\n        //\t\t}\n        //\t\telse\n        if(params.curr_face_detector == FaceModelParameters::HAAR_DETECTOR)\n        {\n            \n            face_detection_success = LandmarkDetector::DetectSingleFace(bounding_box, grayscale_image, clnf_model.face_detector_HAAR, preference_det);\n            \n            clnf_model.face_x_pos = bounding_box.x;\n            \n        }\n        else if(params.curr_face_detector == FaceModelParameters::SEETAFACE_DETECTOR)\n        {\n            face_detection_success = LandmarkDetector::DetectSingleFaceSeetaFace(bounding_box, grayscale_image, clnf_model.seetaface_detector, preference_det);\n        }\n        \n        // Attempt to detect landmarks using the detected face (if unseccessful the detection will be ignored)\n        if(face_detection_success)\n        {\n            // Indicate that tracking has started as a face was detected\n            clnf_model.tracking_initialised = true;\n            \n            // Keep track of old model values so that they can be restored if redetection fails\n            cv::Vec6d params_global_init = clnf_model.params_global;\n            cv::Mat_<double> params_local_init = clnf_model.params_local.clone();\n            double likelihood_init = clnf_model.model_likelihood;\n            cv::Mat_<double> detected_landmarks_init = clnf_model.detected_landmarks.clone();\n            cv::Mat_<double> landmark_likelihoods_init = clnf_model.landmark_likelihoods.clone();\n            \n            // Use the detected bounding box and empty local parameters\n            clnf_model.params_local.setTo(0);\n            clnf_model.pdm.CalcParams(clnf_model.params_global, bounding_box, clnf_model.params_local);\t\t\n            \n            // Make sure the search size is large\n            params.window_sizes_current = params.window_sizes_init;\n            \n            // Do the actual landmark detection (and keep it only if successful)\n            bool landmark_detection_success = clnf_model.DetectLandmarks(grayscale_image, depth_image, params);\n            \n            // If landmark reinitialisation unsucessful continue from previous estimates\n            // if it's initial detection however, do not care if it was successful as the validator might be wrong, so continue trackig\n            // regardless\n            if(!initial_detection && !landmark_detection_success)\n            {\n                \n                // Restore previous estimates\n                clnf_model.params_global = params_global_init;\n                clnf_model.params_local = params_local_init.clone();\n                clnf_model.pdm.CalcShape2D(clnf_model.detected_landmarks, clnf_model.params_local, clnf_model.params_global);\n                clnf_model.model_likelihood = likelihood_init;\n                clnf_model.detected_landmarks = detected_landmarks_init.clone();\n                clnf_model.landmark_likelihoods = landmark_likelihoods_init.clone();\n                \n                return false;\n            }\n            else\n            {\n                clnf_model.failures_in_a_row = -1;\t\t\t\t\n                UpdateTemplate(grayscale_image, clnf_model);\n                return true;\n            }\n        }\n    }\n    \n    // if the model has not been initialised yet class it as a failure\n    if(!clnf_model.tracking_initialised)\n    {\n        clnf_model.failures_in_a_row++;\n    }\n    \n    // un-initialise the tracking\n    if(\tclnf_model.failures_in_a_row > 100)\n    {\n        clnf_model.tracking_initialised = false;\n    }\n    \n    return clnf_model.detection_success;\n    \n}\n\nbool LandmarkDetector::DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> &depth_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params)\n{\n    if(bounding_box.width > 0)\n    {\n        // calculate the local and global parameters from the generated 2D shape (mapping from the 2D to 3D because camera params are unknown)\n        clnf_model.params_local.setTo(0);\n        clnf_model.pdm.CalcParams(clnf_model.params_global, bounding_box, clnf_model.params_local);\n        \n        // indicate that face was detected so initialisation is not necessary\n        clnf_model.tracking_initialised = true;\n    }\n    \n    return DetectLandmarksInVideo(grayscale_image, depth_image, clnf_model, params);\n    \n}\n\nbool LandmarkDetector::DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, FaceModelParameters& params)\n{\n    return DetectLandmarksInVideo(grayscale_image, cv::Mat_<float>(), clnf_model, params);\n}\n\nbool LandmarkDetector::DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params)\n{\n    return DetectLandmarksInVideo(grayscale_image, cv::Mat_<float>(), clnf_model, params);\n}\n\n//================================================================================================================\n// Landmark detection in image, need to provide an image and optionally CLNF model together with parameters (default values work well)\n// Optionally can provide a bounding box in which detection is performed (this is useful if multiple faces are to be detected in images)\n//================================================================================================================\n\n// This is the one where the actual work gets done, other DetectLandmarksInImage calls lead to this one\nbool LandmarkDetector::DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> depth_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params)\n{\n    \n    // Can have multiple hypotheses\n    std::vector<cv::Vec3d> rotation_hypotheses;\n    \n    if(params.multi_view)\n    {\n        // Try out different orientation initialisations\n        // It is possible to add other orientation hypotheses easilly by just pushing to this vector\n        rotation_hypotheses.push_back(cv::Vec3d(0,0,0));\n        rotation_hypotheses.push_back(cv::Vec3d(0,0.5236,0));\n        rotation_hypotheses.push_back(cv::Vec3d(0,-0.5236,0));\n        rotation_hypotheses.push_back(cv::Vec3d(0.5236,0,0));\n        rotation_hypotheses.push_back(cv::Vec3d(-0.5236,0,0));\n    }\n    else\n    {\n        // Assume the face is close to frontal\n        rotation_hypotheses.push_back(cv::Vec3d(0,0,0));\n    }\n    \n    // Use the initialisation size for the landmark detection\n    params.window_sizes_current = params.window_sizes_init;\n    \n    // Store the current best estimate\n    double best_likelihood;\n    cv::Vec6d best_global_parameters;\n    cv::Mat_<double> best_local_parameters;\n    cv::Mat_<double> best_detected_landmarks;\n    cv::Mat_<double> best_landmark_likelihoods;\n    bool best_success;\n    \n    // The hierarchical model parameters\n    std::vector<double> best_likelihood_h(clnf_model.hierarchical_models.size());\n    std::vector<cv::Vec6d> best_global_parameters_h(clnf_model.hierarchical_models.size());\n    std::vector<cv::Mat_<double>> best_local_parameters_h(clnf_model.hierarchical_models.size());\n    std::vector<cv::Mat_<double>> best_detected_landmarks_h(clnf_model.hierarchical_models.size());\n    std::vector<cv::Mat_<double>> best_landmark_likelihoods_h(clnf_model.hierarchical_models.size());\n    \n    for(size_t hypothesis = 0; hypothesis < rotation_hypotheses.size(); ++hypothesis)\n    {\n        // Reset the potentially set clnf_model parameters\n        clnf_model.params_local.setTo(0.0);\n        \n        for (size_t part = 0; part < clnf_model.hierarchical_models.size(); ++part)\n        {\n            clnf_model.hierarchical_models[part].params_local.setTo(0.0);\n        }\n        \n        // calculate the local and global parameters from the generated 2D shape (mapping from the 2D to 3D because camera params are unknown)\n        clnf_model.pdm.CalcParams(clnf_model.params_global, bounding_box, clnf_model.params_local, rotation_hypotheses[hypothesis]);\n        \n        bool success = clnf_model.DetectLandmarks(grayscale_image, depth_image, params);\t\n        \n        if(hypothesis == 0 || best_likelihood < clnf_model.model_likelihood)\n        {\n            best_likelihood = clnf_model.model_likelihood;\n            best_global_parameters = clnf_model.params_global;\n            best_local_parameters = clnf_model.params_local.clone();\n            best_detected_landmarks = clnf_model.detected_landmarks.clone();\n            best_landmark_likelihoods = clnf_model.landmark_likelihoods.clone();\n            best_success = success;\n        }\n        \n        for (size_t part = 0; part < clnf_model.hierarchical_models.size(); ++part)\n        {\n            if (hypothesis == 0 || best_likelihood < clnf_model.hierarchical_models[part].model_likelihood)\n            {\n                best_likelihood_h[part] = clnf_model.hierarchical_models[part].model_likelihood;\n                best_global_parameters_h[part] = clnf_model.hierarchical_models[part].params_global;\n                best_local_parameters_h[part] = clnf_model.hierarchical_models[part].params_local.clone();\n                best_detected_landmarks_h[part] = clnf_model.hierarchical_models[part].detected_landmarks.clone();\n                best_landmark_likelihoods_h[part] = clnf_model.hierarchical_models[part].landmark_likelihoods.clone();\n            }\n        }\n        \n    }\n    \n    // Store the best estimates in the clnf_model\n    clnf_model.model_likelihood = best_likelihood;\n    clnf_model.params_global = best_global_parameters;\n    clnf_model.params_local = best_local_parameters.clone();\n    clnf_model.detected_landmarks = best_detected_landmarks.clone();\n    clnf_model.detection_success = best_success;\n    clnf_model.landmark_likelihoods = best_landmark_likelihoods.clone();\n    \n    for (size_t part = 0; part < clnf_model.hierarchical_models.size(); ++part)\n    {\n        clnf_model.hierarchical_models[part].params_global = best_global_parameters_h[part];\n        clnf_model.hierarchical_models[part].params_local = best_local_parameters_h[part].clone();\n        clnf_model.hierarchical_models[part].detected_landmarks = best_detected_landmarks_h[part].clone();\n        clnf_model.hierarchical_models[part].landmark_likelihoods = best_landmark_likelihoods_h[part].clone();\n    }\n    \n    return best_success;\n}\n\nbool LandmarkDetector::DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> depth_image, CLNF& clnf_model, FaceModelParameters& params)\n{\n    \n    cv::Rect_<double> bounding_box;\n    \n    // If the face detector has not been initialised read it in\n    if(clnf_model.face_detector_HAAR.empty())\n    {\n        clnf_model.face_detector_HAAR.load(params.face_detector_location);\n        clnf_model.face_detector_location = params.face_detector_location;\n    }\n    \n    // Detect the face first\n    //\tif(params.curr_face_detector == FaceModelParameters::HOG_SVM_DETECTOR)\n    //\t{\n    //\t\tdouble confidence;\n    //\t\tLandmarkDetector::DetectSingleFaceHOG(bounding_box, grayscale_image, clnf_model.face_detector_HOG, confidence);\n    //\t}\n    //\telse\n    if(params.curr_face_detector == FaceModelParameters::HAAR_DETECTOR)\n    {\n        LandmarkDetector::DetectSingleFace(bounding_box, grayscale_image, clnf_model.face_detector_HAAR);\n    }\n    \n    if(bounding_box.width == 0)\n    {\n        return false;\n    }\n    else\n    {\n        return DetectLandmarksInImage(grayscale_image, depth_image, bounding_box, clnf_model, params);\n    }\n}\n\n// Versions not using depth images\nbool LandmarkDetector::DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params)\n{\n    return DetectLandmarksInImage(grayscale_image, cv::Mat_<float>(), bounding_box, clnf_model, params);\n}\n\nbool LandmarkDetector::DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, FaceModelParameters& params)\n{\n    return DetectLandmarksInImage(grayscale_image, cv::Mat_<float>(), clnf_model, params);\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/LandmarkDetectorModel.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectorModel.h\"\n\n//// Boost includes\n//#include <filesystem.hpp>\n//#include <filesystem/fstream.hpp>\n\n// TBB includes\n//#include <tbb/tbb.h>\n\n// Local includes\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n//=============================================================================\n//=============================================================================\n\n// Constructors\n// A default constructor\nCLNF::CLNF()\n{\n    //    FaceModelParameters parameters;\n    //    this->Read(parameters.model_location);\n    \n    this->seetaface_detector = NULL;\n}\n\nbool CLNF::inits()\n{\n    FaceModelParameters parameters;\n    parameters.init();\n    parameters.model_location = model_location_clnf;\n    parameters.face_detector_location = face_detector_location_clnf;\n    \n    this->Read(parameters.model_location);\n    return true;\n}\n\n// Constructor from a model file\nCLNF::CLNF(std::string fname)\n{\n    this->seetaface_detector = NULL;\n    this->Read(fname);\n    if(!seetaface_detector_location.empty())\n    {\n        this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n    }\n}\n\n// Copy constructor (makes a deep copy of CLNF)\nCLNF::CLNF(const CLNF& other): pdm(other.pdm), params_local(other.params_local.clone()), params_global(other.params_global), detected_landmarks(other.detected_landmarks.clone()),\nlandmark_likelihoods(other.landmark_likelihoods.clone()), patch_experts(other.patch_experts), landmark_validator(other.landmark_validator), face_detector_location(other.face_detector_location),\nhierarchical_mapping(other.hierarchical_mapping), hierarchical_models(other.hierarchical_models), hierarchical_model_names(other.hierarchical_model_names),\nhierarchical_params(other.hierarchical_params), eye_model(other.eye_model)\n{\n    this->seetaface_detector = NULL;\n    this->detection_success = other.detection_success;\n    this->tracking_initialised = other.tracking_initialised;\n    this->detection_certainty = other.detection_certainty;\n    this->model_likelihood = other.model_likelihood;\n    this->failures_in_a_row = other.failures_in_a_row;\n    this->seetaface_detector_location = other.seetaface_detector_location;\n    \n    // Load the CascadeClassifier (as it does not have a proper copy constructor)\n    if(!face_detector_location.empty())\n    {\n        this->face_detector_HAAR.load(face_detector_location);\n    }\n    \n    if(!seetaface_detector_location.empty())\n    {\n        this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n    }\n    // Make sure the matrices are allocated properly\n    this->triangulations.resize(other.triangulations.size());\n    for(size_t i = 0; i < other.triangulations.size(); ++i)\n    {\n        // Make sure the matrix is copied.\n        this->triangulations[i] = other.triangulations[i].clone();\n    }\n    \n    // Make sure the matrices are allocated properly\n    for(std::map<int, cv::Mat_<float>>::const_iterator it = other.kde_resp_precalc.begin(); it!= other.kde_resp_precalc.end(); it++)\n    {\n        // Make sure the matrix is copied.\n        this->kde_resp_precalc.insert(std::pair<int, cv::Mat_<float>>(it->first, it->second.clone()));\n    }\n    \n    //    this->face_detector_HOG = dlib::get_frontal_face_detector();\n    \n}\n\n// Assignment operator for lvalues (makes a deep copy of CLNF)\nCLNF & CLNF::operator= (const CLNF& other)\n{\n    this->seetaface_detector = NULL;\n    if (this != &other) // protect against invalid self-assignment\n    {\n        pdm = PDM(other.pdm);\n        params_local = other.params_local.clone();\n        params_global = other.params_global;\n        detected_landmarks = other.detected_landmarks.clone();\n        \n        landmark_likelihoods =other.landmark_likelihoods.clone();\n        patch_experts = Patch_experts(other.patch_experts);\n        landmark_validator = DetectionValidator(other.landmark_validator);\n        face_detector_location = other.face_detector_location;\n        seetaface_detector_location = other.seetaface_detector_location;\n        \n        this->detection_success = other.detection_success;\n        this->tracking_initialised = other.tracking_initialised;\n        this->detection_certainty = other.detection_certainty;\n        this->model_likelihood = other.model_likelihood;\n        this->failures_in_a_row = other.failures_in_a_row;\n        \n        this->eye_model = other.eye_model;\n        \n        // Load the CascadeClassifier (as it does not have a proper copy constructor)\n        if(!face_detector_location.empty())\n        {\n            this->face_detector_HAAR.load(face_detector_location);\n        }\n        \n        if(!seetaface_detector_location.empty())\n        {\n            this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n        }\n        \n        // Make sure the matrices are allocated properly\n        this->triangulations.resize(other.triangulations.size());\n        for(size_t i = 0; i < other.triangulations.size(); ++i)\n        {\n            // Make sure the matrix is copied.\n            this->triangulations[i] = other.triangulations[i].clone();\n        }\n        \n        // Make sure the matrices are allocated properly\n        for(std::map<int, cv::Mat_<float>>::const_iterator it = other.kde_resp_precalc.begin(); it!= other.kde_resp_precalc.end(); it++)\n        {\n            // Make sure the matrix is copied.\n            this->kde_resp_precalc.insert(std::pair<int, cv::Mat_<float>>(it->first, it->second.clone()));\n        }\n        \n        // Copy over the hierarchical models\n        this->hierarchical_mapping = other.hierarchical_mapping;\n        this->hierarchical_models = other.hierarchical_models;\n        this->hierarchical_model_names = other.hierarchical_model_names;\n        this->hierarchical_params = other.hierarchical_params;\n    }\n    \n    //    face_detector_HOG = dlib::get_frontal_face_detector();\n    \n    return *this;\n}\n\n// Move constructor\nCLNF::CLNF(const CLNF&& other)\n{\n    this->seetaface_detector = NULL;\n    this->detection_success = other.detection_success;\n    this->tracking_initialised = other.tracking_initialised;\n    this->detection_certainty = other.detection_certainty;\n    this->model_likelihood = other.model_likelihood;\n    this->failures_in_a_row = other.failures_in_a_row;\n    \n    pdm = other.pdm;\n    params_local = other.params_local;\n    params_global = other.params_global;\n    detected_landmarks = other.detected_landmarks;\n    landmark_likelihoods = other.landmark_likelihoods;\n    patch_experts = other.patch_experts;\n    landmark_validator = other.landmark_validator;\n    face_detector_location = other.face_detector_location;\n    seetaface_detector_location = other.seetaface_detector_location;\n    \n    face_detector_HAAR = other.face_detector_HAAR;\n    if(!seetaface_detector_location.empty())\n    {\n        this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n    }\n    \n    triangulations = other.triangulations;\n    kde_resp_precalc = other.kde_resp_precalc;\n    \n    //    face_detector_HOG = dlib::get_frontal_face_detector();\n    \n    // Copy over the hierarchical models\n    this->hierarchical_mapping = other.hierarchical_mapping;\n    this->hierarchical_models = other.hierarchical_models;\n    this->hierarchical_model_names = other.hierarchical_model_names;\n    this->hierarchical_params = other.hierarchical_params;\n    \n    this->eye_model = other.eye_model;\n    \n}\n\n// Assignment operator for rvalues\nCLNF & CLNF::operator= (const CLNF&& other)\n{\n    this->seetaface_detector = NULL;\n    this->detection_success = other.detection_success;\n    this->tracking_initialised = other.tracking_initialised;\n    this->detection_certainty = other.detection_certainty;\n    this->model_likelihood = other.model_likelihood;\n    this->failures_in_a_row = other.failures_in_a_row;\n    \n    pdm = other.pdm;\n    params_local = other.params_local;\n    params_global = other.params_global;\n    detected_landmarks = other.detected_landmarks;\n    landmark_likelihoods = other.landmark_likelihoods;\n    patch_experts = other.patch_experts;\n    landmark_validator = other.landmark_validator;\n    face_detector_location = other.face_detector_location;\n    seetaface_detector_location = other.seetaface_detector_location;\n    \n    face_detector_HAAR = other.face_detector_HAAR;\n    \n    if(!seetaface_detector_location.empty())\n    {\n        this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n    }\n    \n    triangulations = other.triangulations;\n    kde_resp_precalc = other.kde_resp_precalc;\n    \n    //    face_detector_HOG = dlib::get_frontal_face_detector();\n    \n    // Copy over the hierarchical models\n    this->hierarchical_mapping = other.hierarchical_mapping;\n    this->hierarchical_models = other.hierarchical_models;\n    this->hierarchical_model_names = other.hierarchical_model_names;\n    this->hierarchical_params = other.hierarchical_params;\n    \n    this->eye_model = other.eye_model;\n    \n    return *this;\n}\n\n\nvoid CLNF::Read_CLNF(std::string clnf_location)\n{\n    std::cout << \"clnf_location = \" << clnf_location << std::endl;\n    // Location of modules\n    std::ifstream locations(clnf_location.c_str(), std::ios_base::in);\n    \n    if(!locations.is_open())\n    {\n        std::cout << \"Couldn't open the CLNF model file aborting\" << std::endl;\n        std::cout.flush();\n        return;\n    }\n    \n    std::string line;\n    \n    std::vector<std::string> intensity_expert_locations;\n    std::vector<std::string> depth_expert_locations;\n    std::vector<std::string> ccnf_expert_locations;\n    \n    // The other module locations should be defined as relative paths from the main model\n    //    boost::filesystem::path root = boost::filesystem::path(clnf_location).parent_path();\n    std::string root;\n    std::string temp(\"/\");\n    std::size_t found = clnf_location.rfind(temp);\n    if (found!=std::string::npos)\n        root = clnf_location.substr(0, found);\n    \n    // The main file contains the references to other files\n    while (!locations.eof())\n    {\n        \n        getline(locations, line);\n        \n        std::stringstream lineStream(line);\n        \n        std::string module;\n        std::string location;\n        \n        // figure out which module is to be read from which file\n        lineStream >> module;\n        \n        getline(lineStream, location);\n        \n        if(location.size() > 0)\n            location.erase(location.begin()); // remove the first space\n        \n        // remove carriage return at the end for compatibility with unix systems\n        if(location.size() > 0 && location.at(location.size()-1) == '\\r')\n        {\n            location = location.substr(0, location.size()-1);\n        }\n        \n        // append the lovstion to root location (boost syntax)\n        //        location = (root / location).string();\n        location = root + temp + location;\n        \n        if (module.compare(\"PDM\") == 0)\n        {\n            std::cout << \"Reading the PDM module from: \" << location << \"....\";\n            pdm.Read(location);\n            \n            std::cout << \"Done\" << std::endl;\n        }\n        else if (module.compare(\"Triangulations\") == 0)\n        {\n            std::cout << \"Reading the Triangulations module from: \" << location << \"....\";\n            std::ifstream triangulationFile(location.c_str(), std::ios_base::in);\n            \n            LandmarkDetector::SkipComments(triangulationFile);\n            \n            int numViews;\n            triangulationFile >> numViews;\n            \n            // read in the triangulations\n            triangulations.resize(numViews);\n            \n            for(int i = 0; i < numViews; ++i)\n            {\n                LandmarkDetector::SkipComments(triangulationFile);\n                LandmarkDetector::ReadMat(triangulationFile, triangulations[i]);\n            }\n            std::cout << \"Done\" << std::endl;\n        }\n        else if(module.compare(\"PatchesIntensity\") == 0)\n        {\n            intensity_expert_locations.push_back(location);\n        }\n        else if(module.compare(\"PatchesDepth\") == 0)\n        {\n            depth_expert_locations.push_back(location);\n        }\n        else if(module.compare(\"PatchesCCNF\") == 0)\n        {\n            ccnf_expert_locations.push_back(location);\n        }\n    }\n    \n    // Initialise the patch experts\n    patch_experts.Read(intensity_expert_locations, depth_expert_locations, ccnf_expert_locations);\n    \n    // Read in a face detector\n    //    face_detector_HOG = dlib::get_frontal_face_detector();\n    \n}\n\nvoid CLNF::Read(std::string main_location)\n{\n    std::cout << \"Reading the CLNF landmark detector/tracker from: \" << main_location << std::endl;\n    \n    std::ifstream locations(main_location.c_str(), std::ios_base::in);\n    if(!locations.is_open())\n    {\n        std::cout << \"Couldn't open the model file, aborting\" << std::endl;\n        return;\n    }\n    std::string line;\n    \n    // The other module locations should be defined as relative paths from the main model\n    //    boost::filesystem::path root = boost::filesystem::path(main_location).parent_path();\n    std::string root;\n    std::string temp(\"/\");\n    std::size_t found = main_location.rfind(temp);\n    if (found!=std::string::npos)\n        root = main_location.substr(0, found);\n    //std::cout << \"first '/' found at: \" << found << '\\n';\n    \n    // The main file contains the references to other files\n    while (!locations.eof())\n    {\n        getline(locations, line);\n        \n        std::stringstream lineStream(line);\n        \n        std::string module;\n        std::string location;\n        \n        // figure out which module is to be read from which file\n        lineStream >> module;\n        \n        lineStream >> location;\n        \n        // remove carriage return at the end for compatibility with unix systems\n        if(location.size() > 0 && location.at(location.size()-1) == '\\r')\n        {\n            location = location.substr(0, location.size()-1);\n        }\n        \n        // append to root\n        //        location = (root / location).string();\n        location = root + temp + location;\n        \n        if (module.compare(\"LandmarkDetector\") == 0)\n        {\n            std::cout << \"Reading the landmark detector module from: \" << location << std::endl;\n            \n            // The CLNF module includes the PDM and the patch experts\n            Read_CLNF(location);\n        }\n        else if(module.compare(\"LandmarkDetector_part\") == 0)\n        {\n            std::string part_name;\n            lineStream >> part_name;\n            std::cout << \"Reading part based module....\" << part_name << std::endl;\n            \n            std::vector<std::pair<int, int>> mappings;\n            while(!lineStream.eof())\n            {\n                int ind_in_main;\n                lineStream >> ind_in_main;\n                \n                int ind_in_part;\n                lineStream >> ind_in_part;\n                mappings.push_back(std::pair<int, int>(ind_in_main, ind_in_part));\n            }\n            \n            this->hierarchical_mapping.push_back(mappings);\n            \n            CLNF part_model(location);\n            \n            this->hierarchical_models.push_back(part_model);\n            \n            this->hierarchical_model_names.push_back(part_name);\n            \n            FaceModelParameters params;\n            params.validate_detections = false;\n            params.refine_hierarchical = false;\n            params.refine_parameters = false;\n            \n            if(part_name.compare(\"left_eye\") == 0 || part_name.compare(\"right_eye\") == 0)\n            {\n                \n                std::vector<int> windows_large;\n                windows_large.push_back(5);\n                windows_large.push_back(3);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(5);\n                windows_small.push_back(3);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 0.1;\n                params.sigma = 2;\n            }\n            else if(part_name.compare(\"left_eye_28\") == 0 || part_name.compare(\"right_eye_28\") == 0)\n            {\n                std::vector<int> windows_large;\n                windows_large.push_back(3);\n                windows_large.push_back(5);\n                windows_large.push_back(9);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(3);\n                windows_small.push_back(5);\n                windows_small.push_back(9);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 0.5;\n                params.sigma = 1.0;\n                \n                eye_model = true;\n                \n            }\n            else if(part_name.compare(\"mouth\") == 0)\n            {\n                std::vector<int> windows_large;\n                windows_large.push_back(7);\n                windows_large.push_back(7);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(7);\n                windows_small.push_back(7);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 1.0;\n                params.sigma = 2.0;\n            }\n            else if(part_name.compare(\"brow\") == 0)\n            {\n                std::vector<int> windows_large;\n                windows_large.push_back(11);\n                windows_large.push_back(9);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(11);\n                windows_small.push_back(9);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 10.0;\n                params.sigma = 3.5;\n            }\n            else if(part_name.compare(\"inner\") == 0)\n            {\n                std::vector<int> windows_large;\n                windows_large.push_back(9);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(9);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 2.5;\n                params.sigma = 1.75;\n                params.weight_factor = 2.5;\n            }\n            \n            this->hierarchical_params.push_back(params);\n            \n            std::cout << \"Done\" << std::endl;\n        }\n        else if (module.compare(\"DetectionValidator\") == 0)\n        {\n            std::cout << \"Reading the landmark validation module....\";\n            landmark_validator.Read(location);\n            std::cout << \"Done\" << std::endl;\n        }\n    }\n    \n    detected_landmarks.create(2 * pdm.NumberOfPoints(), 1);\n    detected_landmarks.setTo(0);\n    \n    detection_success = false;\n    tracking_initialised = false;\n    model_likelihood = -10; // very low\n    detection_certainty = 1; // very uncertain\n    \n    // Initialising default values for the rest of the variables\n    \n    // local parameters (shape)\n    params_local.create(pdm.NumberOfModes(), 1);\n    params_local.setTo(0.0);\n    \n    // global parameters (pose) [scale, euler_x, euler_y, euler_z, tx, ty]\n    params_global = cv::Vec6d(1, 0, 0, 0, 0, 0);\n    \n    failures_in_a_row = -1;\n    \n}\n\n// Resetting the model (for a new video, or complet reinitialisation\nvoid CLNF::Reset()\n{\n    detected_landmarks.setTo(0);\n    \n    detection_success = false;\n    tracking_initialised = false;\n    model_likelihood = -10;  // very low\n    detection_certainty = 1; // very uncertain\n    \n    // local parameters (shape)\n    params_local.setTo(0.0);\n    \n    // global parameters (pose) [scale, euler_x, euler_y, euler_z, tx, ty]\n    params_global = cv::Vec6d(1, 0, 0, 0, 0, 0);\n    \n    failures_in_a_row = -1;\n    face_template = cv::Mat_<uchar>();\n}\n\n// Resetting the model, choosing the face nearest (x,y)\nvoid CLNF::Reset(double x, double y)\n{\n    \n    // First reset the model overall\n    this->Reset();\n    \n    // Now in the following frame when face detection takes place this is the point at which it will be preffered\n    this->preference_det.x = x;\n    this->preference_det.y = y;\n    \n}\n\n// The main internal landmark detection call (should not be used externally?)\nbool CLNF::DetectLandmarks(const cv::Mat_<uchar> &image, const cv::Mat_<float> &depth, FaceModelParameters& params)\n{\n    \n    // Fits from the current estimate of local and global parameters in the model\n    \n    bool fit_success = Fit(image, depth, params.window_sizes_current, params);\n    \n    // Store the landmarks converged on in detected_landmarks\n    pdm.CalcShape2D(detected_landmarks, params_local, params_global);\n    \n    if(params.refine_hierarchical && hierarchical_models.size() > 0)\n    {\n        bool parts_used = false;\n        \n        // Do the hierarchical models in parallel\n        //        tbb::parallel_for(0, (int)hierarchical_models.size(), [&](int part_model){\n        for(int part_model = 0; part_model < hierarchical_models.size(); part_model++)\n        {\n            // Only do the synthetic eye models if we're doing gaze\n            if (!((hierarchical_model_names[part_model].compare(\"right_eye_28\") == 0 ||\n                   hierarchical_model_names[part_model].compare(\"left_eye_28\") == 0)\n                  && !params.track_gaze))\n            {\n                \n                int n_part_points = hierarchical_models[part_model].pdm.NumberOfPoints();\n                \n                std::vector<std::pair<int, int> > mappings = this->hierarchical_mapping[part_model];\n                \n                cv::Mat_<double> part_model_locs(n_part_points * 2, 1, 0.0);\n                \n                // Extract the corresponding landmarks\n                for (size_t mapping_ind = 0; mapping_ind < mappings.size(); ++mapping_ind)\n                {\n                    part_model_locs.at<double>(mappings[mapping_ind].second) = detected_landmarks.at<double>(mappings[mapping_ind].first);\n                    part_model_locs.at<double>(mappings[mapping_ind].second + n_part_points) = detected_landmarks.at<double>(mappings[mapping_ind].first + this->pdm.NumberOfPoints());\n                }\n                \n                // Fit the part based model PDM\n                hierarchical_models[part_model].pdm.CalcParams(hierarchical_models[part_model].params_global, hierarchical_models[part_model].params_local, part_model_locs);\n                \n                // Only do this if we don't need to upsample\n                if (params_global[0] > 0.9 * hierarchical_models[part_model].patch_experts.patch_scaling[0])\n                {\n                    parts_used = true;\n                    \n                    this->hierarchical_params[part_model].window_sizes_current = this->hierarchical_params[part_model].window_sizes_init;\n                    \n                    // Do the actual landmark detection\n                    hierarchical_models[part_model].DetectLandmarks(image, depth, hierarchical_params[part_model]);\n                    \n                    // Reincorporate the models into main tracker\n                    for (size_t mapping_ind = 0; mapping_ind < mappings.size(); ++mapping_ind)\n                    {\n                        detected_landmarks.at<double>(mappings[mapping_ind].first) = hierarchical_models[part_model].detected_landmarks.at<double>(mappings[mapping_ind].second);\n                        detected_landmarks.at<double>(mappings[mapping_ind].first + pdm.NumberOfPoints()) = hierarchical_models[part_model].detected_landmarks.at<double>(mappings[mapping_ind].second + hierarchical_models[part_model].pdm.NumberOfPoints());\n                    }\n                }\n                else\n                {\n                    hierarchical_models[part_model].pdm.CalcShape2D(hierarchical_models[part_model].detected_landmarks, hierarchical_models[part_model].params_local, hierarchical_models[part_model].params_global);\n                }\n            }\n        }\n        //        });\n        \n        // Recompute main model based on the fit part models\n        if(parts_used)\n        {\n            pdm.CalcParams(params_global, params_local, detected_landmarks);\n            pdm.CalcShape2D(detected_landmarks, params_local, params_global);\n        }\n    }\n    \n    // Check detection correctness\n    if(params.validate_detections && fit_success)\n    {\n        cv::Vec3d orientation(params_global[1], params_global[2], params_global[3]);\n        \n        detection_certainty = landmark_validator.Check(orientation, image, detected_landmarks);\n        \n        detection_success = detection_certainty < params.validation_boundary;\n    }\n    else\n    {\n        detection_success = fit_success;\n        if(fit_success)\n        {\n            detection_certainty = -1;\n        }\n        else\n        {\n            detection_certainty = 1;\n        }\n        \n    }\n    \n    return detection_success;\n}\n\n//=============================================================================\nbool CLNF::Fit(const cv::Mat_<uchar>& im, const cv::Mat_<float>& depthImg, const std::vector<int>& window_sizes, const FaceModelParameters& parameters)\n{\n    // Making sure it is a single channel image\n    assert(im.channels() == 1);\n    \n    // Placeholder for the landmarks\n    cv::Mat_<double> current_shape(2 * pdm.NumberOfPoints() , 1, 0.0);\n    \n    int n = pdm.NumberOfPoints();\n    \n    cv::Mat_<float> depth_img_no_background;\n    \n    // Background elimination from the depth image\n    if(!depthImg.empty())\n    {\n        bool success = RemoveBackground(depth_img_no_background, depthImg);\n        \n        // The attempted background removal can fail leading to tracking failure\n        if(!success)\n        {\n            return false;\n        }\n    }\n    \n    int num_scales = patch_experts.patch_scaling.size();\n    \n    // Storing the patch expert response maps\n    std::vector<cv::Mat_<float> > patch_expert_responses(n);\n    \n    // Converting from image space to patch expert space (normalised for rotation and scale)\n    cv::Matx22f sim_ref_to_img;\n    cv::Matx22d sim_img_to_ref;\n    \n    FaceModelParameters tmp_parameters = parameters;\n    \n    // Optimise the model across a number of areas of interest (usually in descending window size and ascending scale size)\n    \n    for(int scale = 0; scale < num_scales; scale+=1)\n    {\n        \n        int window_size = window_sizes[scale];\n        \n        if(window_size == 0 ||  0.9 * patch_experts.patch_scaling[scale] > params_global[0])\n            continue;\n        \n        // The patch expert response computation\n        if(scale != window_sizes.size() - 1)\n        {\n            patch_experts.Response(patch_expert_responses, sim_ref_to_img, sim_img_to_ref, im, depth_img_no_background, pdm, params_global, params_local, window_size, scale);\n        }\n        else\n        {\n            // Do not use depth for the final iteration as it is not as accurate\n            patch_experts.Response(patch_expert_responses, sim_ref_to_img, sim_img_to_ref, im, cv::Mat(), pdm, params_global, params_local, window_size, scale);\n        }\n        if(parameters.refine_parameters == true)\n        {\n            // Adapt the parameters based on scale (wan't to reduce regularisation as scale increases, but increa sigma and tikhonov)\n            tmp_parameters.reg_factor = parameters.reg_factor - 15 * log(patch_experts.patch_scaling[scale]/0.25)/log(2);\n            \n            if(tmp_parameters.reg_factor <= 0)\n                tmp_parameters.reg_factor = 0.001;\n            \n            tmp_parameters.sigma = parameters.sigma + 0.25 * log(patch_experts.patch_scaling[scale]/0.25)/log(2);\n            tmp_parameters.weight_factor = parameters.weight_factor + 2 * parameters.weight_factor *  log(patch_experts.patch_scaling[scale]/0.25)/log(2);\n        }\n        \n        // Get the current landmark locations\n        pdm.CalcShape2D(current_shape, params_local, params_global);\n        \n        // Get the view used by patch experts\n        int view_id = patch_experts.GetViewIdx(params_global, scale);\n        \n        // the actual optimisation step\n        this->NU_RLMS(params_global, params_local, patch_expert_responses, cv::Vec6d(params_global), params_local.clone(), current_shape, sim_img_to_ref, sim_ref_to_img, window_size, view_id, true, scale, this->landmark_likelihoods, tmp_parameters);\n        \n        // non-rigid optimisation\n        \n        this->model_likelihood = this->NU_RLMS(params_global, params_local, patch_expert_responses, cv::Vec6d(params_global), params_local.clone(), current_shape, sim_img_to_ref, sim_ref_to_img, window_size, view_id, false, scale, this->landmark_likelihoods, tmp_parameters);\n        \n        // Can't track very small images reliably (less than ~30px across)\n        if(params_global[0] < 0.25)\n        {\n            std::cout << \"Face too small for landmark detection\" << std::endl;\n            return false;\n        }\n    }\n    \n    return true;\n}\n\nvoid CLNF::NonVectorisedMeanShift_precalc_kde(cv::Mat_<float>& out_mean_shifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<float> &dxs, const cv::Mat_<float> &dys, int resp_size, float a, int scale, int view_id, std::map<int, cv::Mat_<float> >& kde_resp_precalc)\n{\n    \n    int n = dxs.rows;\n    \n    cv::Mat_<float> kde_resp;\n    float step_size = 0.1;\n    \n    // if this has not been precomputer, precompute it, otherwise use it\n    if(kde_resp_precalc.find(resp_size) == kde_resp_precalc.end())\n    {\n        kde_resp = cv::Mat_<float>((int)((resp_size / step_size)*(resp_size/step_size)), resp_size * resp_size);\n        cv::MatIterator_<float> kde_it = kde_resp.begin();\n        \n        for(int x = 0; x < resp_size/step_size; x++)\n        {\n            float dx = x * step_size;\n            for(int y = 0; y < resp_size/step_size; y++)\n            {\n                float dy = y * step_size;\n                \n                int ii,jj;\n                float v,vx,vy;\n                \n                for(ii = 0; ii < resp_size; ii++)\n                {\n                    vx = (dy-ii)*(dy-ii);\n                    for(jj = 0; jj < resp_size; jj++)\n                    {\n                        vy = (dx-jj)*(dx-jj);\n                        \n                        // the KDE evaluation of that point\n                        v = exp(a*(vx+vy));\n                        \n                        *kde_it++ = v;\n                    }\n                }\n            }\n        }\n        \n        kde_resp_precalc[resp_size] = kde_resp.clone();\n    }\n    else\n    {\n        // use the precomputed version\n        kde_resp = kde_resp_precalc.find(resp_size)->second;\n    }\n    \n    // for every point (patch) calculating mean-shift\n    for(int i = 0; i < n; i++)\n    {\n        if(patch_experts.visibilities[scale][view_id].at<int>(i,0) == 0)\n        {\n            out_mean_shifts.at<float>(i,0) = 0;\n            out_mean_shifts.at<float>(i+n,0) = 0;\n            continue;\n        }\n        \n        // indices of dx, dy\n        float dx = dxs.at<float>(i);\n        float dy = dys.at<float>(i);\n        \n        // Ensure that we are within bounds (important for precalculation)\n        if(dx < 0)\n            dx = 0;\n        if(dy < 0)\n            dy = 0;\n        if(dx > resp_size - step_size)\n            dx = resp_size - step_size;\n        if(dy > resp_size - step_size)\n            dy = resp_size - step_size;\n        \n        // Pick the row from precalculated kde that approximates the current dx, dy best\n        int closest_col = (int)(dy /step_size + 0.5); // Plus 0.5 is there, as C++ rounds down with int cast\n        int closest_row = (int)(dx /step_size + 0.5); // Plus 0.5 is there, as C++ rounds down with int cast\n        \n        int idx = closest_row * ((int)(resp_size/step_size + 0.5)) + closest_col; // Plus 0.5 is there, as C++ rounds down with int cast\n        \n        cv::MatIterator_<float> kde_it = kde_resp.begin() + kde_resp.cols*idx;\n        \n        float mx=0.0;\n        float my=0.0;\n        float sum=0.0;\n        \n        // Iterate over the patch responses here\n        cv::MatConstIterator_<float> p = patch_expert_responses[i].begin();\n        \n        for(int ii = 0; ii < resp_size; ii++)\n        {\n            for(int jj = 0; jj < resp_size; jj++)\n            {\n                \n                // the KDE evaluation of that point multiplied by the probability at the current, xi, yi\n                float v = (*p++) * (*kde_it++);\n                \n                sum += v;\n                \n                // mean shift in x and y\n                mx += v*jj;\n                my += v*ii;\n                \n            }\n        }\n        \n        float msx = (mx/sum - dx);\n        float msy = (my/sum - dy);\n        \n        out_mean_shifts.at<float>(i,0) = msx;\n        out_mean_shifts.at<float>(i+n,0) = msy;\n        \n    }\n    \n}\n\nvoid CLNF::GetWeightMatrix(cv::Mat_<float>& WeightMatrix, int scale, int view_id, const FaceModelParameters& parameters)\n{\n    int n = pdm.NumberOfPoints();\n    \n    // Is the weight matrix needed at all\n    if(parameters.weight_factor > 0)\n    {\n        WeightMatrix = cv::Mat_<float>::zeros(n*2, n*2);\n        \n        for (int p=0; p < n; p++)\n        {\n            if(!patch_experts.ccnf_expert_intensity.empty())\n            {\n                \n                // for the x dimension\n                WeightMatrix.at<float>(p,p) = WeightMatrix.at<float>(p,p)  + patch_experts.ccnf_expert_intensity[scale][view_id][p].patch_confidence;\n                \n                // for they y dimension\n                WeightMatrix.at<float>(p+n,p+n) = WeightMatrix.at<float>(p,p);\n                \n            }\n            else\n            {\n                // Across the modalities add the confidences\n                for(size_t pc=0; pc < patch_experts.svr_expert_intensity[scale][view_id][p].svr_patch_experts.size(); pc++)\n                {\n                    // for the x dimension\n                    WeightMatrix.at<float>(p,p) = WeightMatrix.at<float>(p,p)  + patch_experts.svr_expert_intensity[scale][view_id][p].svr_patch_experts.at(pc).confidence;\n                }\n                // for the y dimension\n                WeightMatrix.at<float>(p+n,p+n) = WeightMatrix.at<float>(p,p);\n            }\n        }\n        WeightMatrix = parameters.weight_factor * WeightMatrix;\n    }\n    else\n    {\n        WeightMatrix = cv::Mat_<float>::eye(n*2, n*2);\n    }\n    \n}\n\n//=============================================================================\ndouble CLNF::NU_RLMS(cv::Vec6d& final_global, cv::Mat_<double>& final_local, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Vec6d& initial_global, const cv::Mat_<double>& initial_local,\n                     const cv::Mat_<double>& base_shape, const cv::Matx22d& sim_img_to_ref, const cv::Matx22f& sim_ref_to_img, int resp_size, int view_id, bool rigid, int scale, cv::Mat_<double>& landmark_lhoods,\n                     const FaceModelParameters& parameters)\n{\t\t\n    \n    int n = pdm.NumberOfPoints();\n    \n    // Mean, eigenvalues, eigenvectors\n    cv::Mat_<double> M = this->pdm.mean_shape;\n    cv::Mat_<double> E = this->pdm.eigen_values;\n    //Mat_<double> V = this->pdm.princ_comp;\n    \n    int m = pdm.NumberOfModes();\n    \n    cv::Vec6d current_global(initial_global);\n    \n    cv::Mat_<float> current_local;\n    initial_local.convertTo(current_local, CV_32F);\n    \n    cv::Mat_<double> current_shape;\n    cv::Mat_<double> previous_shape;\n    \n    // Pre-calculate the regularisation term\n    cv::Mat_<float> regTerm;\n    \n    if(rigid)\n    {\n        regTerm = cv::Mat_<float>::zeros(6,6);\n    }\n    else\n    {\n        cv::Mat_<double> regularisations = cv::Mat_<double>::zeros(1, 6 + m);\n        \n        // Setting the regularisation to the inverse of eigenvalues\n        cv::Mat(parameters.reg_factor / E).copyTo(regularisations(cv::Rect(6, 0, m, 1)));\n        cv::Mat_<double> regTerm_d = cv::Mat::diag(regularisations.t());\n        regTerm_d.convertTo(regTerm, CV_32F);\n    }\n    \n    cv::Mat_<float> WeightMatrix;\n    GetWeightMatrix(WeightMatrix, scale, view_id, parameters);\n    \n    cv::Mat_<float> dxs, dys;\n    \n    // The preallocated memory for the mean shifts\n    cv::Mat_<float> mean_shifts(2 * pdm.NumberOfPoints(), 1, 0.0);\n    \n    // Number of iterations\n    for(int iter = 0; iter < parameters.num_optimisation_iteration; iter++)\n    {\n        // get the current estimates of x\n        pdm.CalcShape2D(current_shape, current_local, current_global);\n        \n        if(iter > 0)\n        {\n            // if the shape hasn't changed terminate\n            if(norm(current_shape, previous_shape) < 0.01)\n            {\n                break;\n            }\n        }\n        \n        current_shape.copyTo(previous_shape);\n        \n        // Jacobian, and transposed weighted jacobian\n        cv::Mat_<float> J, J_w_t;\n        \n        // calculate the appropriate Jacobians in 2D, even though the actual behaviour is in 3D, using small angle approximation and oriented shape\n        if(rigid)\n        {\n            pdm.ComputeRigidJacobian(current_local, current_global, J, WeightMatrix, J_w_t);\n        }\n        else\n        {\n            pdm.ComputeJacobian(current_local, current_global, J, WeightMatrix, J_w_t);\n        }\n        \n        // useful for mean shift calculation\n        float a = -0.5/(parameters.sigma * parameters.sigma);\n        \n        cv::Mat_<double> current_shape_2D = current_shape.reshape(1, 2).t();\n        cv::Mat_<double> base_shape_2D = base_shape.reshape(1, 2).t();\n        \n        cv::Mat_<float> offsets;\n        cv::Mat((current_shape_2D - base_shape_2D) * cv::Mat(sim_img_to_ref).t()).convertTo(offsets, CV_32F);\n        \n        dxs = offsets.col(0) + (resp_size-1)/2;\n        dys = offsets.col(1) + (resp_size-1)/2;\n        \n        NonVectorisedMeanShift_precalc_kde(mean_shifts, patch_expert_responses, dxs, dys, resp_size, a, scale, view_id, kde_resp_precalc);\n        \n        // Now transform the mean shifts to the the image reference frame, as opposed to one of ref shape (object space)\n        cv::Mat_<float> mean_shifts_2D = (mean_shifts.reshape(1, 2)).t();\n        \n        mean_shifts_2D = mean_shifts_2D * cv::Mat(sim_ref_to_img).t();\n        mean_shifts = cv::Mat(mean_shifts_2D.t()).reshape(1, n*2);\n        \n        // remove non-visible observations\n        for(int i = 0; i < n; ++i)\n        {\n            // if patch unavailable for current index\n            if(patch_experts.visibilities[scale][view_id].at<int>(i,0) == 0)\n            {\n                cv::Mat Jx = J.row(i);\n                Jx = cvScalar(0);\n                cv::Mat Jy = J.row(i+n);\n                Jy = cvScalar(0);\n                mean_shifts.at<float>(i,0) = 0.0f;\n                mean_shifts.at<float>(i+n,0) = 0.0f;\n            }\n        }\n        \n        // projection of the meanshifts onto the jacobians (using the weighted Jacobian, see Baltrusaitis 2013)\n        cv::Mat_<float> J_w_t_m = J_w_t * mean_shifts;\n        \n        // Add the regularisation term\n        if(!rigid)\n        {\n            J_w_t_m(cv::Rect(0,6,1, m)) = J_w_t_m(cv::Rect(0,6,1, m)) - regTerm(cv::Rect(6,6, m, m)) * current_local;\n        }\n        \n        // Calculating the Hessian approximation\n        cv::Mat_<float> Hessian = J_w_t * J;\n        \n        // Add the Tikhonov regularisation\n        Hessian = Hessian + regTerm;\n        \n        // Solve for the parameter update (from Baltrusaitis 2013 based on eq (36) Saragih 2011)\n        cv::Mat_<float> param_update;\n        cv::solve(Hessian, J_w_t_m, param_update, CV_CHOLESKY);\n        \n        // update the reference\n        pdm.UpdateModelParameters(param_update, current_local, current_global);\n        \n        // clamp to the local parameters for valid expressions\n        pdm.Clamp(current_local, current_global, parameters);\n        \n    }\n    \n    // compute the log likelihood\n    double loglhood = 0;\n    \n    landmark_lhoods = cv::Mat_<double>(n, 1, -1e8);\n    \n    for(int i = 0; i < n; i++)\n    {\n        /// whateverx fix it\n        /// https://github.com/FaceAR/OpenFaceIOS/issues/1\n        if(patch_experts.visibilities[scale][view_id].at<int>(i,0) == 0 || dxs.dims == 0 )\n        {\n            continue;\n        }\n        float dx = dxs.at<float>(i);\n        float dy = dys.at<float>(i);\n        \n        int ii,jj;\n        float v,vx,vy,sum=0.0;\n        \n        // Iterate over the patch responses here\n        cv::MatConstIterator_<float> p = patch_expert_responses[i].begin();\n        \n        for(ii = 0; ii < resp_size; ii++)\n        {\n            vx = (dy-ii)*(dy-ii);\n            for(jj = 0; jj < resp_size; jj++)\n            {\n                vy = (dx-jj)*(dx-jj);\n                \n                // the probability at the current, xi, yi\n                v = *p++;\n                \n                // the KDE evaluation of that point\n                v *= exp(-0.5*(vx+vy)/(parameters.sigma * parameters.sigma));\n                \n                sum += v;\n            }\n        }\n        landmark_lhoods.at<double>(i,0) = (double)sum;\n        \n        // the offset is there for numerical stability\n        loglhood += log(sum + 1e-8);\n        \n    }\n    loglhood = loglhood/sum(patch_experts.visibilities[scale][view_id])[0];\n    \n    final_global = current_global;\n    final_local = current_local;\n    \n    return loglhood;\n    \n}\n\n\nbool CLNF::RemoveBackground(cv::Mat_<float>& out_depth_image, const cv::Mat_<float>& depth_image)\n{\n    // use the current estimate of the face location to determine what is foreground and background\n    double tx = this->params_global[4];\n    double ty = this->params_global[5];\n    \n    // if we are too close to the edge fail\n    if(tx - 9 <= 0 || ty - 9 <= 0 || tx + 9 >= depth_image.cols || ty + 9 >= depth_image.rows)\n    {\n        std::cout << \"Face estimate is too close to the edge, tracking failed\" << std::endl;\n        return false;\n    }\n    \n    cv::Mat_<double> current_shape;\n    \n    pdm.CalcShape2D(current_shape, params_local, params_global);\n    \n    double min_x, max_x, min_y, max_y;\n    \n    int n = this->pdm.NumberOfPoints();\n    \n    cv::minMaxLoc(current_shape(cv::Range(0, n), cv::Range(0,1)), &min_x, &max_x);\n    cv::minMaxLoc(current_shape(cv::Range(n, n*2), cv::Range(0,1)), &min_y, &max_y);\n    \n    // the area of interest: size of face with some scaling ( these scalings are fairly ad-hoc)\n    double width = 3 * (max_x - min_x);\n    double height = 2.5 * (max_y - min_y);\n    \n    // getting the region of interest from the depth image,\n    // so we don't get other objects lying at same depth as head in the image but away from it\n    cv::Rect_<int> roi((int)(tx-width/2), (int)(ty - height/2), (int)width, (int)height);\n    \n    // clamp it if it does not lie fully in the image\n    if(roi.x < 0) roi.x = 0;\n    if(roi.y < 0) roi.y = 0;\n    if(roi.width + roi.x >= depth_image.cols) roi.x = depth_image.cols - roi.width;\n    if(roi.height + roi.y >= depth_image.rows) roi.y = depth_image.rows - roi.height;\n    \n    if(width > depth_image.cols)\n    {\n        roi.x = 0; roi.width = depth_image.cols;\n    }\n    if(height > depth_image.rows)\n    {\n        roi.y = 0; roi.height = depth_image.rows;\n    }\n    \n    if(roi.width == 0) roi.width = depth_image.cols;\n    if(roi.height == 0) roi.height = depth_image.rows;\n    \n    if(roi.x >= depth_image.cols) roi.x = 0;\n    if(roi.y >= depth_image.rows) roi.y = 0;\n    \n    // Initialise the mask\n    cv::Mat_<uchar> mask(depth_image.rows, depth_image.cols, (uchar)0);\n    \n    cv::Mat_<uchar> valid_pixels = depth_image > 0;\n    \n    // check if there is any depth near the estimate\n    if(cv::sum(valid_pixels(cv::Rect((int)tx - 8, (int)ty - 8, 16, 16))/255)[0] > 0)\n    {\n        double Z = cv::mean(depth_image(cv::Rect((int)tx - 8, (int)ty - 8, 16, 16)), valid_pixels(cv::Rect((int)tx - 8, (int)ty - 8, 16, 16)))[0]; // Z offset from the surface of the face\n        \n        // Only operate within region of interest of the depth image\n        cv::Mat dRoi = depth_image(roi);\n        \n        cv::Mat mRoi = mask(roi);\n        \n        // Filter all pixels further than 20cm away from the current pose depth estimate\n        cv::inRange(dRoi, Z - 200, Z + 200, mRoi);\n        \n        // Convert to be either 0 or 1\n        mask = mask / 255;\n        \n        cv::Mat_<float> maskF;\n        mask.convertTo(maskF, CV_32F);\n        \n        //Filter the depth image\n        out_depth_image = depth_image.mul(maskF);\n    }\n    else\n    {\n        std::cout << \"No depth signal found in foreground, tracking failed\" << std::endl;\n        return false;\n    }\n    return true;\n}\n\n// Getting a 3D shape model from the current detected landmarks (in camera space)\ncv::Mat_<double> CLNF::GetShape(double fx, double fy, double cx, double cy) const\n{\n    int n = this->detected_landmarks.rows/2;\n    \n    cv::Mat_<double> shape3d(n*3, 1);\n    \n    this->pdm.CalcShape3D(shape3d, this->params_local);\n    \n    // Need to rotate the shape to get the actual 3D representation\n    \n    // get the rotation matrix from the euler angles\n    cv::Matx33d R = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(params_global[1], params_global[2], params_global[3]));\n    \n    shape3d = shape3d.reshape(1, 3);\n    \n    shape3d = shape3d.t() * cv::Mat(R).t();\n    \n    // from the weak perspective model can determine the average depth of the object\n    double Zavg = fx / params_global[0];\n    \n    cv::Mat_<double> outShape(n,3,0.0);\n    \n    // this is described in the paper in section 3.4 (equation 10) (of the CLM-Z paper)\n    for(int i = 0; i < n; i++)\n    {\n        double Z = Zavg + shape3d.at<double>(i,2);\n        \n        double X = Z * ((this->detected_landmarks.at<double>(i) - cx)/fx);\n        double Y = Z * ((this->detected_landmarks.at<double>(i + n) - cy)/fy);\n        \n        outShape.at<double>(i,0) = (double)X;\n        outShape.at<double>(i,1) = (double)Y;\n        outShape.at<double>(i,2) = (double)Z;\n        \n    }\n    \n    // The format is 3 rows - n cols\n    return outShape.t();\n    \n}\n\n// A utility bounding box function\ncv::Rect_<double> CLNF::GetBoundingBox() const\n{\n    cv::Mat_<double> xs = this->detected_landmarks(cv::Rect(0,0,1,this->detected_landmarks.rows/2));\n    cv::Mat_<double> ys = this->detected_landmarks(cv::Rect(0,this->detected_landmarks.rows/2, 1, this->detected_landmarks.rows/2));\n    \n    double min_x, max_x;\n    double min_y, max_y;\n    cv::minMaxLoc(xs, &min_x, &max_x);\n    cv::minMaxLoc(ys, &min_y, &max_y);\n    \n    // See if the detections intersect\n    cv::Rect_<double> model_rect(min_x, min_y, max_x - min_x, max_y - min_y);\n    return model_rect;\n}\n\n// Legacy function not used at the moment\nvoid CLNF::NonVectorisedMeanShift(cv::Mat_<double>& out_mean_shifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<double> &dxs, const cv::Mat_<double> &dys, int resp_size, double a, int scale, int view_id)\n{\n    \n    int n = dxs.rows;\n    \n    for(int i = 0; i < n; i++)\n    {\n        \n        if(patch_experts.visibilities[scale][view_id].at<int>(i,0) == 0  || sum(patch_expert_responses[i])[0] == 0)\n        {\n            out_mean_shifts.at<double>(i,0) = 0;\n            out_mean_shifts.at<double>(i+n,0) = 0;\n            continue;\n        }\n        \n        // indices of dx, dy\n        double dx = dxs.at<double>(i);\n        double dy = dys.at<double>(i);\n        \n        int ii,jj;\n        double v,vx,vy,mx=0.0,my=0.0,sum=0.0;\n        \n        // Iterate over the patch responses here\n        cv::MatConstIterator_<float> p = patch_expert_responses[i].begin();\n        \n        for(ii = 0; ii < resp_size; ii++)\n        {\n            vx = (dy-ii)*(dy-ii);\n            for(jj = 0; jj < resp_size; jj++)\n            {\n                vy = (dx-jj)*(dx-jj);\n                \n                // the probability at the current, xi, yi\n                v = *p++;\n                \n                // the KDE evaluation of that point\n                double kd = exp(a*(vx+vy));\n                v *= kd;\n                \n                sum += v;\n                \n                // mean shift in x and y\n                mx += v*jj;\n                my += v*ii;\n                \n            }\n        }\n        \n        // setting the actual mean shift update\n        double msx = (mx/sum - dx);\n        double msy = (my/sum - dy);\n        \n        out_mean_shifts.at<double>(i, 0) = msx;\n        out_mean_shifts.at<double>(i + n, 0) = msy;\n        \n    }\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/LandmarkDetectorParameters.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n// System includes\n#include <iostream>\n#include <sstream>\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectorParameters.h\"\n\n//// Boost includes\n//#include <filesystem.hpp>\n//#include <filesystem/fstream.hpp>\n\n//using namespace std;\n\nusing namespace LandmarkDetector;\n\nFaceModelParameters::FaceModelParameters()\n{\n    // initialise the default values\n    init();\n}\n\nvoid FaceModelParameters::init()\n{\n    \n    // number of iterations that will be performed at each scale\n    num_optimisation_iteration = 5;\n    \n    // using an external face checker based on SVM\n    validate_detections = true;\n    \n    // Using hierarchical refinement by default (can be turned off)\n    refine_hierarchical = false;\n    \n    // Refining parameters by default\n    refine_parameters = false;\n    \n    window_sizes_small = std::vector<int>(4);\n    window_sizes_init = std::vector<int>(4);\n    \n    // For fast tracking\n    window_sizes_small[0] = 0;\n    window_sizes_small[1] = 9;\n    window_sizes_small[2] = 7;\n    window_sizes_small[3] = 5;\n    \n    // Just for initialisation\n    window_sizes_init.at(0) = 11;\n    window_sizes_init.at(1) = 9;\n    window_sizes_init.at(2) = 7;\n    window_sizes_init.at(3) = 5;\n    \n    face_template_scale = 0.5;\n    // Off by default (as it might lead to some slight inaccuracies in slowly moving faces)\n    use_face_template = true;\n    \n    // For first frame use the initialisation\n    window_sizes_current = window_sizes_init;\n    \n    model_location = std::string(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/model/main_clnf_general.txt\");\n    //    std::cout << \"model_location = \" << model_location << std::endl;\n    \n    sigma = 1.5;\n    reg_factor = 25;\n    weight_factor = 0; // By default do not use NU-RLMS for videos as it does not work as well for them\n    \n    validation_boundary = -0.45;\n    \n    limit_pose = true;\n    multi_view = false;\n    \n    reinit_video_every = 4;\n    \n    // Face detection\n    \n    face_detector_location = std::string(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/classifiers/haarcascade_frontalface_alt.xml\");\n    //    std::cout << \"face_detector_location = \" << face_detector_location << std::endl;\n    \n    seetaface_detector_location = std::string(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/seetaFace/model/seeta_fd_frontal_v1.0.bin\");\n    \n    quiet_mode = false;\n    \n    // By default use HOG SVM\n    curr_face_detector = SEETAFACE_DETECTOR; //HOG_SVM_DETECTOR;\n    \n    // The gaze tracking has to be explicitly initialised\n    track_gaze = false;\n    \n    face_x_pos = 0;\n    face_y_pos = 0;\n    face_width = 0;\n    face_height = 0;\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/LandmarkDetectorUtils.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016\n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling\n//       in IEEE International. Conference on Computer Vision (ICCV),  2015\n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson\n//       in Facial Expression Recognition and Analysis Challenge,\n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015\n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency.\n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.\n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectorUtils.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n#include <opencv2/calib3d.hpp>\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n    \n    //// Useful utility for creating directories for storing the output files\n    //void create_directory_from_file(string output_path)\n    //{\n    \n    //    // Creating the right directory structure\n    \n    //    // First get rid of the file\n    //    auto p = path(path(output_path).parent_path());\n    \n    //    if(!p.empty() && !boost::filesystem::exists(p))\n    //    {\n    //        bool success = boost::filesystem::create_directories(p);\n    //        if(!success)\n    //        {\n    //            cout << \"Failed to create a directory... \" << p.string() << endl;\n    //        }\n    //    }\n    //}\n    \n    //// Useful utility for creating directories for storing the output files\n    //void create_directories(string output_path)\n    //{\n    \n    //    // Creating the right directory structure\n    \n    //    // First get rid of the file\n    //    auto p = path(output_path);\n    \n    //    if(!p.empty() && !boost::filesystem::exists(p))\n    //    {\n    //        bool success = boost::filesystem::create_directories(p);\n    //        if(!success)\n    //        {\n    //            cout << \"Failed to create a directory... \" << p.string() << endl;\n    //        }\n    //    }\n    //}\n    \n    // Extracting the following command line arguments -f, -fd, -op, -of, -ov (and possible ordered repetitions)\n    void get_video_input_output_params(std::vector<std::string> &input_video_files, std::vector<std::string> &depth_dirs,\n                                       std::vector<std::string> &output_files, std::vector<std::string> &output_video_files, bool& world_coordinates_pose, std::vector<std::string> &arguments)\n    {\n        bool* valid = new bool[arguments.size()];\n        \n        for(size_t i = 0; i < arguments.size(); ++i)\n        {\n            valid[i] = true;\n        }\n        \n        // By default use rotation with respect to camera (not world coordinates)\n        world_coordinates_pose = false;\n        \n        std::string root = \"\";\n        // First check if there is a root argument (so that videos and outputs could be defined more easilly)\n        for(size_t i = 0; i < arguments.size(); ++i)\n        {\n            if (arguments[i].compare(\"-root\") == 0)\n            {\n                root = arguments[i + 1];\n                // Do not discard root as it might be used in other later steps\n                i++;\n            }\n        }\n        \n        for(size_t i = 0; i < arguments.size(); ++i)\n        {\n            if (arguments[i].compare(\"-f\") == 0)\n            {\n                input_video_files.push_back(root + arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-fd\") == 0)\n            {\n                depth_dirs.push_back(root + arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            //        else if (arguments[i].compare(\"-of\") == 0)\n            //        {\n            //            output_files.push_back(root + arguments[i + 1]);\n            //            create_directory_from_file(root + arguments[i + 1]);\n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            //        else if (arguments[i].compare(\"-ov\") == 0)\n            //        {\n            //            output_video_files.push_back(root + arguments[i + 1]);\n            //            create_directory_from_file(root + arguments[i + 1]);\n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            else if (arguments[i].compare(\"-world_coord\") == 0)\n            {\n                world_coordinates_pose = true;\n            }\n        }\n        \n        for(int i=arguments.size()-1; i >= 0; --i)\n        {\n            if(!valid[i])\n            {\n                arguments.erase(arguments.begin()+i);\n            }\n        }\n        \n    }\n    \n    void get_camera_params(int &device, float &fx, float &fy, float &cx, float &cy, std::vector<std::string> &arguments)\n    {\n        bool* valid = new bool[arguments.size()];\n        \n        for(size_t i=0; i < arguments.size(); ++i)\n        {\n            valid[i] = true;\n            if (arguments[i].compare(\"-fx\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> fx;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-fy\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> fy;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-cx\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> cx;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-cy\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> cy;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-device\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> device;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n        }\n        \n        for(int i=arguments.size()-1; i >= 0; --i)\n        {\n            if(!valid[i])\n            {\n                arguments.erase(arguments.begin()+i);\n            }\n        }\n        \n//        delete valid;\n    }\n    \n    void get_image_input_output_params(std::vector<std::string> &input_image_files, std::vector<std::string> &input_depth_files, std::vector<std::string> &output_feature_files, std::vector<std::string> &output_pose_files, std::vector<std::string> &output_image_files,\n                                       std::vector<cv::Rect_<double>> &input_bounding_boxes, std::vector<std::string> &arguments)\n    {\n        bool* valid = new bool[arguments.size()];\n        \n        std::string out_pts_dir, out_pose_dir, out_img_dir;\n        \n        for(size_t i = 0; i < arguments.size(); ++i)\n        {\n            valid[i] = true;\n            if (arguments[i].compare(\"-f\") == 0)\n            {\n                input_image_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-fd\") == 0)\n            {\n                input_depth_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            //        else if (arguments[i].compare(\"-fdir\") == 0)\n            //        {\n            \n            //            // parse the -fdir directory by reading in all of the .png and .jpg files in it\n            //            path image_directory (arguments[i+1]);\n            \n            //            try\n            //            {\n            //                 // does the file exist and is it a directory\n            //                if (exists(image_directory) && is_directory(image_directory))\n            //                {\n            \n            //                    vector<path> file_in_directory;\n            //                    copy(directory_iterator(image_directory), directory_iterator(), back_inserter(file_in_directory));\n            \n            //                    // Sort the images in the directory first\n            //                    sort(file_in_directory.begin(), file_in_directory.end());\n            \n            //                    for (vector<path>::const_iterator file_iterator (file_in_directory.begin()); file_iterator != file_in_directory.end(); ++file_iterator)\n            //                    {\n            //                        // Possible image extension .jpg and .png\n            //                        if(file_iterator->extension().string().compare(\".jpg\") == 0 || file_iterator->extension().string().compare(\".png\") == 0 || file_iterator->extension().string().compare(\".bmp\") == 0)\n            //                        {\n            \n            \n            //                            input_image_files.push_back(file_iterator->string());\n            \n            //                            // If there exists a .txt file corresponding to the image, it is assumed that it contains a bounding box definition for a face\n            //                            // [minx, miny, maxx, maxy]\n            //                            path current_file = *file_iterator;\n            //                            path bbox = current_file.replace_extension(\"txt\");\n            \n            //                            // If there is a bounding box file push it to the list of bounding boxes\n            //                            if(exists(bbox))\n            //                            {\n            \n            //                                std::ifstream in_bbox(bbox.string().c_str(), ios_base::in);\n            \n            //                                double min_x, min_y, max_x, max_y;\n            \n            //                                in_bbox >> min_x >> min_y >> max_x >> max_y;\n            \n            //                                in_bbox.close();\n            \n            //                                input_bounding_boxes.push_back(cv::Rect_<double>(min_x, min_y, max_x - min_x, max_y - min_y));\n            //                            }\n            //                        }\n            //                    }\n            //                }\n            //            }\n            //            catch (const filesystem_error& ex)\n            //            {\n            //                cout << ex.what() << '\\n';\n            //            }\n            \n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            //        else if (arguments[i].compare(\"-ofdir\") == 0)\n            //        {\n            //            out_pts_dir = arguments[i + 1];\n            //            create_directories(out_pts_dir);\n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            //        else if (arguments[i].compare(\"-opdir\") == 0)\n            //        {\n            //            out_pose_dir = arguments[i + 1];\n            //            create_directories(out_pose_dir);\n            //            valid[i] = false;\n            //            valid[i + 1] = false;\n            //            i++;\n            //        }\n            //        else if (arguments[i].compare(\"-oidir\") == 0)\n            //        {\n            //            out_img_dir = arguments[i + 1];\n            //            create_directories(out_img_dir);\n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            else if (arguments[i].compare(\"-op\") == 0)\n            {\n                output_pose_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i + 1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-of\") == 0)\n            {\n                output_feature_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-oi\") == 0)\n            {\n                output_image_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n        }\n        \n        // If any output directories are defined populate them based on image names\n        //    if(!out_img_dir.empty())\n        //    {\n        //        for(size_t i=0; i < input_image_files.size(); ++i)\n        //        {\n        //            path image_loc(input_image_files[i]);\n        \n        //            path fname = image_loc.filename();\n        //            fname = fname.replace_extension(\"jpg\");\n        //            output_image_files.push_back(out_img_dir + \"/\" + fname.string());\n        \n        //        }\n        //        if(!input_image_files.empty())\n        //        {\n        //            create_directory_from_file(output_image_files[0]);\n        //        }\n        //    }\n        \n        //    if(!out_pts_dir.empty())\n        //    {\n        //        for(size_t i=0; i < input_image_files.size(); ++i)\n        //        {\n        //            path image_loc(input_image_files[i]);\n        \n        //            path fname = image_loc.filename();\n        //            fname = fname.replace_extension(\"pts\");\n        //            output_feature_files.push_back(out_pts_dir + \"/\" + fname.string());\n        //        }\n        //        create_directory_from_file(output_feature_files[0]);\n        //    }\n        \n        //    if (!out_pose_dir.empty())\n        //    {\n        //        for (size_t i = 0; i < input_image_files.size(); ++i)\n        //        {\n        //            path image_loc(input_image_files[i]);\n        \n        //            path fname = image_loc.filename();\n        //            fname = fname.replace_extension(\"pose\");\n        //            output_pose_files.push_back(out_pose_dir + \"/\" + fname.string());\n        //        }\n        //        create_directory_from_file(output_pose_files[0]);\n        //    }\n        \n        // Make sure the same number of images and bounding boxes is present, if any bounding boxes are defined\n        if(input_bounding_boxes.size() > 0)\n        {\n            assert(input_bounding_boxes.size() == input_image_files.size());\n        }\n        \n        // Clear up the argument list\n        for(int i=arguments.size()-1; i >= 0; --i)\n        {\n            if(!valid[i])\n            {\n                arguments.erase(arguments.begin()+i);\n            }\n        }\n        \n    }\n    \n    //===========================================================================\n    // Fast patch expert response computation (linear model across a ROI) using normalised cross-correlation\n    //===========================================================================\n    \n    void crossCorr_m( const cv::Mat_<float>& img, cv::Mat_<double>& img_dft, const cv::Mat_<float>& _templ, std::map<int, cv::Mat_<double> >& _templ_dfts, cv::Mat_<float>& corr)\n    {\n        // Our model will always be under min block size so can ignore this\n        //const double blockScale = 4.5;\n        //const int minBlockSize = 256;\n        \n        int maxDepth = CV_64F;\n        \n        cv::Size dftsize;\n        \n        dftsize.width = cv::getOptimalDFTSize(corr.cols + _templ.cols - 1);\n        dftsize.height = cv::getOptimalDFTSize(corr.rows + _templ.rows - 1);\n        \n        // Compute block size\n        cv::Size blocksize;\n        blocksize.width = dftsize.width - _templ.cols + 1;\n        blocksize.width = MIN( blocksize.width, corr.cols );\n        blocksize.height = dftsize.height - _templ.rows + 1;\n        blocksize.height = MIN( blocksize.height, corr.rows );\n        \n        cv::Mat_<double> dftTempl;\n        \n        // if this has not been precomputed, precompute it, otherwise use it\n        if(_templ_dfts.find(dftsize.width) == _templ_dfts.end())\n        {\n            dftTempl.create(dftsize.height, dftsize.width);\n            \n            cv::Mat_<float> src = _templ;\n            \n            cv::Mat_<double> dst(dftTempl, cv::Rect(0, 0, dftsize.width, dftsize.height));\n            \n            cv::Mat_<double> dst1(dftTempl, cv::Rect(0, 0, _templ.cols, _templ.rows));\n            \n            if( dst1.data != src.data )\n                src.convertTo(dst1, dst1.depth());\n            \n            if( dst.cols > _templ.cols )\n            {\n                cv::Mat_<double> part(dst, cv::Range(0, _templ.rows), cv::Range(_templ.cols, dst.cols));\n                part.setTo(0);\n            }\n            \n            // Perform DFT of the template\n            dft(dst, dst, 0, _templ.rows);\n            \n            _templ_dfts[dftsize.width] = dftTempl;\n            \n        }\n        else\n        {\n            // use the precomputed version\n            dftTempl = _templ_dfts.find(dftsize.width)->second;\n        }\n        \n        cv::Size bsz(std::min(blocksize.width, corr.cols), std::min(blocksize.height, corr.rows));\n        cv::Mat src;\n        \n        cv::Mat cdst(corr, cv::Rect(0, 0, bsz.width, bsz.height));\n        \n        cv::Mat_<double> dftImg;\n        \n        if(img_dft.empty())\n        {\n            dftImg.create(dftsize);\n            dftImg.setTo(0.0);\n            \n            cv::Size dsz(bsz.width + _templ.cols - 1, bsz.height + _templ.rows - 1);\n            \n            int x2 = std::min(img.cols, dsz.width);\n            int y2 = std::min(img.rows, dsz.height);\n            \n            cv::Mat src0(img, cv::Range(0, y2), cv::Range(0, x2));\n            cv::Mat dst(dftImg, cv::Rect(0, 0, dsz.width, dsz.height));\n            cv::Mat dst1(dftImg, cv::Rect(0, 0, x2, y2));\n            \n            src = src0;\n            \n            if( dst1.data != src.data )\n                src.convertTo(dst1, dst1.depth());\n            \n            dft( dftImg, dftImg, 0, dsz.height );\n            img_dft = dftImg.clone();\n        }\n        \n        cv::Mat dftTempl1(dftTempl, cv::Rect(0, 0, dftsize.width, dftsize.height));\n        cv::mulSpectrums(img_dft, dftTempl1, dftImg, 0, true);\n        cv::dft( dftImg, dftImg, cv::DFT_INVERSE + cv::DFT_SCALE, bsz.height );\n        \n        src = dftImg(cv::Rect(0, 0, bsz.width, bsz.height));\n        \n        src.convertTo(cdst, CV_32F);\n        \n    }\n    \n    ////////////////////////////////////////////////////////////////////////////////////////////////////////\n    \n    void matchTemplate_m(  const cv::Mat_<float>& input_img, cv::Mat_<double>& img_dft, cv::Mat& _integral_img, cv::Mat& _integral_img_sq, const cv::Mat_<float>&  templ, std::map<int, cv::Mat_<double> >& templ_dfts, cv::Mat_<float>& result, int method )\n    {\n        \n        int numType = method == CV_TM_CCORR || method == CV_TM_CCORR_NORMED ? 0 : method == CV_TM_CCOEFF || method == CV_TM_CCOEFF_NORMED ? 1 : 2;\n        bool isNormed = method == CV_TM_CCORR_NORMED ||\n        method == CV_TM_SQDIFF_NORMED ||\n        method == CV_TM_CCOEFF_NORMED;\n        \n        // Assume result is defined properly\n        if(result.empty())\n        {\n            cv::Size corrSize(input_img.cols - templ.cols + 1, input_img.rows - templ.rows + 1);\n            result.create(corrSize);\n        }\n        LandmarkDetector::crossCorr_m( input_img, img_dft, templ, templ_dfts, result);\n        \n        if( method == CV_TM_CCORR )\n            return;\n        \n        double invArea = 1./((double)templ.rows * templ.cols);\n        \n        cv::Mat sum, sqsum;\n        cv::Scalar templMean, templSdv;\n        double *q0 = 0, *q1 = 0, *q2 = 0, *q3 = 0;\n        double templNorm = 0, templSum2 = 0;\n        \n        if( method == CV_TM_CCOEFF )\n        {\n            // If it has not been precomputed compute it now\n            if(_integral_img.empty())\n            {\n                integral(input_img, _integral_img, CV_64F);\n            }\n            sum = _integral_img;\n            \n            templMean = cv::mean(templ);\n        }\n        else\n        {\n            // If it has not been precomputed compute it now\n            if(_integral_img.empty())\n            {\n                integral(input_img, _integral_img, _integral_img_sq, CV_64F);\n            }\n            \n            sum = _integral_img;\n            sqsum = _integral_img_sq;\n            \n            meanStdDev( templ, templMean, templSdv );\n            \n            templNorm = templSdv[0]*templSdv[0] + templSdv[1]*templSdv[1] + templSdv[2]*templSdv[2] + templSdv[3]*templSdv[3];\n            \n            if( templNorm < DBL_EPSILON && method == CV_TM_CCOEFF_NORMED )\n            {\n                result.setTo(1.0);\n                return;\n            }\n            \n            templSum2 = templNorm + templMean[0]*templMean[0] + templMean[1]*templMean[1] + templMean[2]*templMean[2] + templMean[3]*templMean[3];\n            \n            if( numType != 1 )\n            {\n                templMean = cv::Scalar::all(0);\n                templNorm = templSum2;\n            }\n            \n            templSum2 /= invArea;\n            templNorm = std::sqrt(templNorm);\n            templNorm /= std::sqrt(invArea); // care of accuracy here\n            \n            q0 = (double*)sqsum.data;\n            q1 = q0 + templ.cols;\n            q2 = (double*)(sqsum.data + templ.rows*sqsum.step);\n            q3 = q2 + templ.cols;\n        }\n        \n        double* p0 = (double*)sum.data;\n        double* p1 = p0 + templ.cols;\n        double* p2 = (double*)(sum.data + templ.rows*sum.step);\n        double* p3 = p2 + templ.cols;\n        \n        int sumstep = sum.data ? (int)(sum.step / sizeof(double)) : 0;\n        int sqstep = sqsum.data ? (int)(sqsum.step / sizeof(double)) : 0;\n        \n        int i, j;\n        \n        for( i = 0; i < result.rows; i++ )\n        {\n            float* rrow = result.ptr<float>(i);\n            int idx = i * sumstep;\n            int idx2 = i * sqstep;\n            \n            for( j = 0; j < result.cols; j++, idx += 1, idx2 += 1 )\n            {\n                double num = rrow[j], t;\n                double wndMean2 = 0, wndSum2 = 0;\n                \n                if( numType == 1 )\n                {\n                    \n                    t = p0[idx] - p1[idx] - p2[idx] + p3[idx];\n                    wndMean2 += t*t;\n                    num -= t*templMean[0];\n                    \n                    wndMean2 *= invArea;\n                }\n                \n                if( isNormed || numType == 2 )\n                {\n                    \n                    t = q0[idx2] - q1[idx2] - q2[idx2] + q3[idx2];\n                    wndSum2 += t;\n                    \n                    if( numType == 2 )\n                    {\n                        num = wndSum2 - 2*num + templSum2;\n                        num = MAX(num, 0.);\n                    }\n                }\n                \n                if( isNormed )\n                {\n                    t = std::sqrt(MAX(wndSum2 - wndMean2,0))*templNorm;\n                    if( fabs(num) < t )\n                        num /= t;\n                    else if( fabs(num) < t*1.125 )\n                        num = num > 0 ? 1 : -1;\n                    else\n                        num = method != CV_TM_SQDIFF_NORMED ? 0 : 1;\n                }\n                \n                rrow[j] = (float)num;\n            }\n        }\n    }\n    \n    \n    //===========================================================================\n    // Point set and landmark manipulation functions\n    //===========================================================================\n    // Using Kabsch's algorithm for aligning shapes\n    //This assumes that align_from and align_to are already mean normalised\n    cv::Matx22d AlignShapesKabsch2D(const cv::Mat_<double>& align_from, const cv::Mat_<double>& align_to )\n    {\n        \n        cv::SVD svd(align_from.t() * align_to);\n        \n        // make sure no reflection is there\n        // corr ensures that we do only rotaitons and not reflections\n        double d = cv::determinant(svd.vt.t() * svd.u.t());\n        \n        cv::Matx22d corr = cv::Matx22d::eye();\n        if(d > 0)\n        {\n            corr(1,1) = 1;\n        }\n        else\n        {\n            corr(1,1) = -1;\n        }\n        \n        cv::Matx22d R;\n        cv::Mat(svd.vt.t()*cv::Mat(corr)*svd.u.t()).copyTo(R);\n        \n        return R;\n    }\n    \n    //=============================================================================\n    // Basically Kabsch's algorithm but also allows the collection of points to be different in scale from each other\n    cv::Matx22d AlignShapesWithScale(cv::Mat_<double>& src, cv::Mat_<double> dst)\n    {\n        int n = src.rows;\n        \n        // First we mean normalise both src and dst\n        double mean_src_x = cv::mean(src.col(0))[0];\n        double mean_src_y = cv::mean(src.col(1))[0];\n        \n        double mean_dst_x = cv::mean(dst.col(0))[0];\n        double mean_dst_y = cv::mean(dst.col(1))[0];\n        \n        cv::Mat_<double> src_mean_normed = src.clone();\n        src_mean_normed.col(0) = src_mean_normed.col(0) - mean_src_x;\n        src_mean_normed.col(1) = src_mean_normed.col(1) - mean_src_y;\n        \n        cv::Mat_<double> dst_mean_normed = dst.clone();\n        dst_mean_normed.col(0) = dst_mean_normed.col(0) - mean_dst_x;\n        dst_mean_normed.col(1) = dst_mean_normed.col(1) - mean_dst_y;\n        \n        // Find the scaling factor of each\n        cv::Mat src_sq;\n        cv::pow(src_mean_normed, 2, src_sq);\n        \n        cv::Mat dst_sq;\n        cv::pow(dst_mean_normed, 2, dst_sq);\n        \n        double s_src = sqrt(cv::sum(src_sq)[0]/n);\n        double s_dst = sqrt(cv::sum(dst_sq)[0]/n);\n        \n        src_mean_normed = src_mean_normed / s_src;\n        dst_mean_normed = dst_mean_normed / s_dst;\n        \n        double s = s_dst / s_src;\n        \n        // Get the rotation\n        cv::Matx22d R = AlignShapesKabsch2D(src_mean_normed, dst_mean_normed);\n        \n        cv::Matx22d\tA;\n        cv::Mat(s * R).copyTo(A);\n        \n        cv::Mat_<double> aligned = (cv::Mat(cv::Mat(A) * src.t())).t();\n        cv::Mat_<double> offset = dst - aligned;\n        \n        double t_x =  cv::mean(offset.col(0))[0];\n        double t_y =  cv::mean(offset.col(1))[0];\n        \n        return A;\n        \n    }\n    \n    \n    //===========================================================================\n    // Visualisation functions\n    //===========================================================================\n    void Project(cv::Mat_<double>& dest, const cv::Mat_<double>& mesh, double fx, double fy, double cx, double cy)\n    {\n        dest = cv::Mat_<double>(mesh.rows,2, 0.0);\n        \n        int num_points = mesh.rows;\n        \n        double X, Y, Z;\n        \n        \n        cv::Mat_<double>::const_iterator mData = mesh.begin();\n        cv::Mat_<double>::iterator projected = dest.begin();\n        \n        for(int i = 0;i < num_points; i++)\n        {\n            // Get the points\n            X = *(mData++);\n            Y = *(mData++);\n            Z = *(mData++);\n            \n            double x;\n            double y;\n            \n            // if depth is 0 the projection is different\n            if(Z != 0)\n            {\n                x = ((X * fx / Z) + cx);\n                y = ((Y * fy / Z) + cy);\n            }\n            else\n            {\n                x = X;\n                y = Y;\n            }\n            \n            // Project and store in dest matrix\n            (*projected++) = x;\n            (*projected++) = y;\n        }\n        \n    }\n    \n    void DrawBox(cv::Mat image, cv::Vec6d pose, cv::Scalar color, int thickness, float fx, float fy, float cx, float cy)\n    {\n        double boxVerts[] = {-1, 1, -1,\n            1, 1, -1,\n            1, 1, 1,\n            -1, 1, 1,\n            1, -1, 1,\n            1, -1, -1,\n            -1, -1, -1,\n            -1, -1, 1};\n        \n        std::vector<std::pair<int,int>> edges;\n        edges.push_back(std::pair<int,int>(0,1));\n        edges.push_back(std::pair<int,int>(1,2));\n        edges.push_back(std::pair<int,int>(2,3));\n        edges.push_back(std::pair<int,int>(0,3));\n        edges.push_back(std::pair<int,int>(2,4));\n        edges.push_back(std::pair<int,int>(1,5));\n        edges.push_back(std::pair<int,int>(0,6));\n        edges.push_back(std::pair<int,int>(3,7));\n        edges.push_back(std::pair<int,int>(6,5));\n        edges.push_back(std::pair<int,int>(5,4));\n        edges.push_back(std::pair<int,int>(4,7));\n        edges.push_back(std::pair<int,int>(7,6));\n        \n        // The size of the head is roughly 200mm x 200mm x 200mm\n        cv::Mat_<double> box = cv::Mat(8, 3, CV_64F, boxVerts).clone() * 100;\n        \n        cv::Matx33d rot = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(pose[3], pose[4], pose[5]));\n        cv::Mat_<double> rotBox;\n        \n        // Rotate the box\n        rotBox = cv::Mat(rot) * box.t();\n        rotBox = rotBox.t();\n        \n        // Move the bounding box to head position\n        rotBox.col(0) = rotBox.col(0) + pose[0];\n        rotBox.col(1) = rotBox.col(1) + pose[1];\n        rotBox.col(2) = rotBox.col(2) + pose[2];\n        \n        // draw the lines\n        cv::Mat_<double> rotBoxProj;\n        Project(rotBoxProj, rotBox, fx, fy, cx, cy);\n        \n        cv::Rect image_rect(0,0,image.cols, image.rows);\n        \n        for (size_t i = 0; i < edges.size(); ++i)\n        {\n            cv::Mat_<double> begin;\n            cv::Mat_<double> end;\n            \n            rotBoxProj.row(edges[i].first).copyTo(begin);\n            rotBoxProj.row(edges[i].second).copyTo(end);\n            \n            cv::Point p1((int)begin.at<double>(0), (int)begin.at<double>(1));\n            cv::Point p2((int)end.at<double>(0), (int)end.at<double>(1));\n            \n            // Only draw the line if one of the points is inside the image\n            if(p1.inside(image_rect) || p2.inside(image_rect))\n            {\n                cv::line(image, p1, p2, color, thickness);\n            }\n            \n        }\n        \n    }\n    \n    std::vector<std::pair<cv::Point, cv::Point> > CalculateBox(cv::Vec6d pose, float fx, float fy, float cx, float cy)\n    {\n        double boxVerts[] = {-1, 1, -1,\n            1, 1, -1,\n            1, 1, 1,\n            -1, 1, 1,\n            1, -1, 1,\n            1, -1, -1,\n            -1, -1, -1,\n            -1, -1, 1};\n        \n        std::vector<std::pair<int,int>> edges;\n        edges.push_back(std::pair<int,int>(0,1));\n        edges.push_back(std::pair<int,int>(1,2));\n        edges.push_back(std::pair<int,int>(2,3));\n        edges.push_back(std::pair<int,int>(0,3));\n        edges.push_back(std::pair<int,int>(2,4));\n        edges.push_back(std::pair<int,int>(1,5));\n        edges.push_back(std::pair<int,int>(0,6));\n        edges.push_back(std::pair<int,int>(3,7));\n        edges.push_back(std::pair<int,int>(6,5));\n        edges.push_back(std::pair<int,int>(5,4));\n        edges.push_back(std::pair<int,int>(4,7));\n        edges.push_back(std::pair<int,int>(7,6));\n        \n        // The size of the head is roughly 200mm x 200mm x 200mm\n        cv::Mat_<double> box = cv::Mat(8, 3, CV_64F, boxVerts).clone() * 100;\n        \n        cv::Matx33d rot = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(pose[3], pose[4], pose[5]));\n        cv::Mat_<double> rotBox;\n        \n        // Rotate the box\n        rotBox = cv::Mat(rot) * box.t();\n        rotBox = rotBox.t();\n        \n        // Move the bounding box to head position\n        rotBox.col(0) = rotBox.col(0) + pose[0];\n        rotBox.col(1) = rotBox.col(1) + pose[1];\n        rotBox.col(2) = rotBox.col(2) + pose[2];\n        \n        // draw the lines\n        cv::Mat_<double> rotBoxProj;\n        Project(rotBoxProj, rotBox, fx, fy, cx, cy);\n        \n        std::vector<std::pair<cv::Point, cv::Point>> lines;\n        \n        for (size_t i = 0; i < edges.size(); ++i)\n        {\n            cv::Mat_<double> begin;\n            cv::Mat_<double> end;\n            \n            rotBoxProj.row(edges[i].first).copyTo(begin);\n            rotBoxProj.row(edges[i].second).copyTo(end);\n            \n            cv::Point p1((int)begin.at<double>(0), (int)begin.at<double>(1));\n            cv::Point p2((int)end.at<double>(0), (int)end.at<double>(1));\n            \n            lines.push_back(std::pair<cv::Point, cv::Point>(p1,p2));\n            \n        }\n        \n        return lines;\n    }\n    \n    void DrawBox(std::vector<std::pair<cv::Point, cv::Point>> lines, cv::Mat image, cv::Scalar color, int thickness)\n    {\n        cv::Rect image_rect(0,0,image.cols, image.rows);\n        \n        for (size_t i = 0; i < lines.size(); ++i)\n        {\n            cv::Point p1 = lines.at(i).first;\n            cv::Point p2 = lines.at(i).second;\n            // Only draw the line if one of the points is inside the image\n            if(p1.inside(image_rect) || p2.inside(image_rect))\n            {\n                cv::line(image, p1, p2, color, thickness);\n            }\n            \n        }\n        \n    }\n    \n    // Computing landmarks (to be drawn later possibly)\n    std::vector<cv::Point2d> CalculateLandmarks(const cv::Mat_<double>& shape2D, cv::Mat_<int>& visibilities)\n    {\n        int n = shape2D.rows/2;\n        std::vector<cv::Point2d> landmarks;\n        \n        for( int i = 0; i < n; ++i)\n        {\n            if(visibilities.at<int>(i))\n            {\n                cv::Point2d featurePoint(shape2D.at<double>(i), shape2D.at<double>(i +n));\n                \n                landmarks.push_back(featurePoint);\n            }\n        }\n        \n        return landmarks;\n    }\n    \n    // Computing landmarks (to be drawn later possibly)\n    std::vector<cv::Point2d> CalculateLandmarks(cv::Mat img, const cv::Mat_<double>& shape2D)\n    {\n        \n        int n;\n        std::vector<cv::Point2d> landmarks;\n        \n        if(shape2D.cols == 2)\n        {\n            n = shape2D.rows;\n        }\n        else if(shape2D.cols == 1)\n        {\n            n = shape2D.rows/2;\n        }\n        \n        for( int i = 0; i < n; ++i)\n        {\n            cv::Point2d featurePoint;\n            if(shape2D.cols == 1)\n            {\n                featurePoint = cv::Point2d(shape2D.at<double>(i), shape2D.at<double>(i +n));\n            }\n            else\n            {\n                featurePoint = cv::Point2d(shape2D.at<double>(i, 0), shape2D.at<double>(i, 1));\n            }\n            \n            landmarks.push_back(featurePoint);\n        }\n        \n        return landmarks;\n    }\n    \n    // Computing landmarks (to be drawn later possibly)\n    std::vector<cv::Point2d> CalculateLandmarks(CLNF& clnf_model)\n    {\n        \n        int idx = clnf_model.patch_experts.GetViewIdx(clnf_model.params_global, 0);\n        \n        // Because we only draw visible points, need to find which points patch experts consider visible at a certain orientation\n        return CalculateLandmarks(clnf_model.detected_landmarks, clnf_model.patch_experts.visibilities[0][idx]);\n        \n    }\n    \n    // Drawing landmarks on a face image\n    void Draw(cv::Mat img, const cv::Mat_<double>& shape2D, const cv::Mat_<int>& visibilities)\n    {\n        int n = shape2D.rows/2;\n        \n        // Drawing feature points\n        if(n >= 66)\n        {\n            for( int i = 0; i < n; ++i)\n            {\n                if(visibilities.at<int>(i))\n                {\n                    cv::Point featurePoint((int)shape2D.at<double>(i), (int)shape2D.at<double>(i +n));\n                    \n                    // A rough heuristic for drawn point size\n                    int thickness = (int)std::ceil(3.0* ((double)img.cols) / 640.0);\n                    int thickness_2 = (int)std::ceil(1.0* ((double)img.cols) / 640.0);\n                    \n                    cv::circle(img, featurePoint, 1, cv::Scalar(0,255,0), thickness);\n                    cv::circle(img, featurePoint, 1, cv::Scalar(255,0,0), thickness_2);\n                }\n            }\n        }\n        else if(n == 28) // drawing eyes\n        {\n            for( int i = 0; i < n; ++i)\n            {\n                cv::Point featurePoint((int)shape2D.at<double>(i), (int)shape2D.at<double>(i +n));\n                \n                // A rough heuristic for drawn point size\n                int thickness = 1.0;\n                int thickness_2 = 1.0;\n                \n                int next_point = i + 1;\n                if(i == 7)\n                    next_point = 0;\n                if(i == 19)\n                    next_point = 8;\n                if(i == 27)\n                    next_point = 20;\n                \n                cv::Point nextFeaturePoint((int)shape2D.at<double>(next_point), (int)shape2D.at<double>(next_point+n));\n                if( i < 8 || i > 19)\n                    cv::line(img, featurePoint, nextFeaturePoint, cv::Scalar(255, 0, 0), thickness_2);\n                else\n                    cv::line(img, featurePoint, nextFeaturePoint, cv::Scalar(0, 0, 255), thickness_2);\n                \n                //cv::circle(img, featurePoint, 1, Scalar(0,255,0), thickness);\n                //cv::circle(img, featurePoint, 1, Scalar(0,0,255), thickness_2);\n                \n                \n            }\n        }\n        else if(n == 6)\n        {\n            for( int i = 0; i < n; ++i)\n            {\n                cv::Point featurePoint((int)shape2D.at<double>(i), (int)shape2D.at<double>(i +n));\n                \n                // A rough heuristic for drawn point size\n                int thickness = 1.0;\n                int thickness_2 = 1.0;\n                \n                //cv::circle(img, featurePoint, 1, Scalar(0,255,0), thickness);\n                //cv::circle(img, featurePoint, 1, Scalar(0,0,255), thickness_2);\n                \n                int next_point = i + 1;\n                if(i == 5)\n                    next_point = 0;\n                \n                cv::Point nextFeaturePoint((int)shape2D.at<double>(next_point), (int)shape2D.at<double>(next_point+n));\n                cv::line(img, featurePoint, nextFeaturePoint, cv::Scalar(255, 0, 0), thickness_2);\n            }\n        }\n    }\n    \n    // Drawing landmarks on a face image\n    void Draw(cv::Mat img, const cv::Mat_<double>& shape2D)\n    {\n        \n        int n;\n        \n        if(shape2D.cols == 2)\n        {\n            n = shape2D.rows;\n        }\n        else if(shape2D.cols == 1)\n        {\n            n = shape2D.rows/2;\n        }\n        \n        for( int i = 0; i < n; ++i)\n        {\n            cv::Point featurePoint;\n            if(shape2D.cols == 1)\n            {\n                featurePoint = cv::Point((int)shape2D.at<double>(i), (int)shape2D.at<double>(i +n));\n            }\n            else\n            {\n                featurePoint = cv::Point((int)shape2D.at<double>(i, 0), (int)shape2D.at<double>(i, 1));\n            }\n            // A rough heuristic for drawn point size\n            int thickness = (int)std::ceil(5.0* ((double)img.cols) / 640.0);\n            int thickness_2 = (int)std::ceil(1.5* ((double)img.cols) / 640.0);\n            \n            cv::circle(img, featurePoint, 1, cv::Scalar(0,0,255), thickness);\n            cv::circle(img, featurePoint, 1, cv::Scalar(255,0,0), thickness_2);\n            \n        }\n        \n    }\n    \n    // Drawing detected landmarks on a face image\n    void Draw(cv::Mat img, const CLNF& clnf_model)\n    {\n        \n        int idx = clnf_model.patch_experts.GetViewIdx(clnf_model.params_global, 0);\n        \n        // Because we only draw visible points, need to find which points patch experts consider visible at a certain orientation\n        Draw(img, clnf_model.detected_landmarks, clnf_model.patch_experts.visibilities[0][idx]);\n        \n        // If the model has hierarchical updates draw those too\n        for(size_t i = 0; i < clnf_model.hierarchical_models.size(); ++i)\n        {\n            if(clnf_model.hierarchical_models[i].pdm.NumberOfPoints() != clnf_model.hierarchical_mapping[i].size())\n            {\n                Draw(img, clnf_model.hierarchical_models[i]);\n            }\n        }\n    }\n    \n    void DrawLandmarks(cv::Mat img, std::vector<cv::Point> landmarks)\n    {\n        for(cv::Point p : landmarks)\n        {\n            // A rough heuristic for drawn point size\n            int thickness = (int)std::ceil(5.0* ((double)img.cols) / 640.0);\n            int thickness_2 = (int)std::ceil(1.5* ((double)img.cols) / 640.0);\n            \n            cv::circle(img, p, 1, cv::Scalar(0,0,255), thickness);\n            cv::circle(img, p, 1, cv::Scalar(255,0,0), thickness_2);\n        }\n        \n    }\n    \n    //===========================================================================\n    // Angle representation conversion helpers\n    //===========================================================================\n    \n    // Using the XYZ convention R = Rx * Ry * Rz, left-handed positive sign\n    cv::Matx33d Euler2RotationMatrix(const cv::Vec3d& eulerAngles)\n    {\n        cv::Matx33d rotation_matrix;\n        \n        double s1 = sin(eulerAngles[0]);\n        double s2 = sin(eulerAngles[1]);\n        double s3 = sin(eulerAngles[2]);\n        \n        double c1 = cos(eulerAngles[0]);\n        double c2 = cos(eulerAngles[1]);\n        double c3 = cos(eulerAngles[2]);\n        \n        rotation_matrix(0,0) = c2 * c3;\n        rotation_matrix(0,1) = -c2 *s3;\n        rotation_matrix(0,2) = s2;\n        rotation_matrix(1,0) = c1 * s3 + c3 * s1 * s2;\n        rotation_matrix(1,1) = c1 * c3 - s1 * s2 * s3;\n        rotation_matrix(1,2) = -c2 * s1;\n        rotation_matrix(2,0) = s1 * s3 - c1 * c3 * s2;\n        rotation_matrix(2,1) = c3 * s1 + c1 * s2 * s3;\n        rotation_matrix(2,2) = c1 * c2;\n        \n        return rotation_matrix;\n    }\n    \n    // Using the XYZ convention R = Rx * Ry * Rz, left-handed positive sign\n    cv::Vec3d RotationMatrix2Euler(const cv::Matx33d& rotation_matrix)\n    {\n        double q0 = sqrt( 1 + rotation_matrix(0,0) + rotation_matrix(1,1) + rotation_matrix(2,2) ) / 2.0;\n        double q1 = (rotation_matrix(2,1) - rotation_matrix(1,2)) / (4.0*q0) ;\n        double q2 = (rotation_matrix(0,2) - rotation_matrix(2,0)) / (4.0*q0) ;\n        double q3 = (rotation_matrix(1,0) - rotation_matrix(0,1)) / (4.0*q0) ;\n        \n        double t1 = 2.0 * (q0*q2 + q1*q3);\n        \n        double yaw  = asin(2.0 * (q0*q2 + q1*q3));\n        double pitch= atan2(2.0 * (q0*q1-q2*q3), q0*q0-q1*q1-q2*q2+q3*q3);\n        double roll = atan2(2.0 * (q0*q3-q1*q2), q0*q0+q1*q1-q2*q2-q3*q3);\n        \n        return cv::Vec3d(pitch, yaw, roll);\n    }\n    \n    cv::Vec3d Euler2AxisAngle(const cv::Vec3d& euler)\n    {\n        cv::Matx33d rotMatrix = LandmarkDetector::Euler2RotationMatrix(euler);\n        cv::Vec3d axis_angle;\n        cv::Rodrigues(rotMatrix, axis_angle);\n        return axis_angle;\n    }\n    \n    cv::Vec3d AxisAngle2Euler(const cv::Vec3d& axis_angle)\n    {\n        cv::Matx33d rotation_matrix;\n        cv::Rodrigues(axis_angle, rotation_matrix);\n        return RotationMatrix2Euler(rotation_matrix);\n    }\n    \n    cv::Matx33d AxisAngle2RotationMatrix(const cv::Vec3d& axis_angle)\n    {\n        cv::Matx33d rotation_matrix;\n        cv::Rodrigues(axis_angle, rotation_matrix);\n        return rotation_matrix;\n    }\n    \n    cv::Vec3d RotationMatrix2AxisAngle(const cv::Matx33d& rotation_matrix)\n    {\n        cv::Vec3d axis_angle;\n        cv::Rodrigues(rotation_matrix, axis_angle);\n        return axis_angle;\n    }\n    \n    //===========================================================================\n    \n    //============================================================================\n    // Face detection helpers\n    //============================================================================\n    \n    \n    \n    bool DetectFaces(std::vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity)\n    {\n        cv::CascadeClassifier classifier(\"./classifiers/haarcascade_frontalface_alt.xml\");\n        if(classifier.empty())\n        {\n            std::cout << \"Couldn't load the Haar cascade classifier\" << std::endl;\n            return false;\n        }\n        else\n        {\n            return DetectFaces(o_regions, intensity, classifier);\n        }\n        \n    }\n    \n    \n    bool DetectFaces(std::vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, cv::CascadeClassifier& classifier)\n    {\n        \n        std::vector<cv::Rect> face_detections;\n        classifier.detectMultiScale(intensity, face_detections, 1.2, 2, 0, cv::Size(50, 50));\n        // Convert from int bounding box do a double one with corrections\n        o_regions.resize(face_detections.size());\n        \n        for( size_t face = 0; face < o_regions.size(); ++face)\n        {\n            // OpenCV is overgenerous with face size and y location is off\n            // CLNF detector expects the bounding box to encompass from eyebrow to chin in y, and from cheeck outline to cheeck outline in x, so we need to compensate\n            \n            // The scalings were learned using the Face Detections on LFPW, Helen, AFW and iBUG datasets, using ground truth and detections from openCV\n            \n            // Correct for scale\n            o_regions[face].width = face_detections[face].width * 0.8924;\n            o_regions[face].height = face_detections[face].height * 0.8676;\n            \n            // Move the face slightly to the right (as the width was made smaller)\n            o_regions[face].x = face_detections[face].x + 0.0578 * face_detections[face].width;\n            // Shift face down as OpenCV Haar Cascade detects the forehead as well, and we're not interested\n            o_regions[face].y = face_detections[face].y + face_detections[face].height * 0.2166;\n            \n            \n        }\n        return o_regions.size() > 0;\n    }\n    \n    \n    //    bool seetaDetectFace(std::vector< cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity){\n    //        seeta::FaceDetection detector(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/seetaFace/model/seeta_fd_frontal_v1.0.bin\");\n    //        return seetaDetectFace(o_regions, intensity, detector);\n    //    }\n    //employing seetaFace to do detection\n    bool seetaDetectFace(std::vector< cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, seeta::FaceDetection*detector){\n        \n        detector->SetMinFaceSize(40);\n        detector->SetScoreThresh(2.f);\n        detector->SetImagePyramidScaleFactor(0.8f);\n        detector->SetWindowStep(4, 4);\n        \n        cv::Mat img_gray;\n        if(intensity.channels() == 3){\n            cv::cvtColor(intensity, img_gray, cv::COLOR_BGR2GRAY);\n        }else{\n            img_gray = intensity;\n        }\n        \n        seeta::ImageData img_data;\n        img_data.data = img_gray.data;\n        img_data.width = img_gray.cols;\n        img_data.height = img_gray.rows;\n        img_data.num_channels = 1;\n        \n        std::vector<seeta::FaceInfo> face_detections = detector->Detect(img_data);\n        \n        int32_t num_face = static_cast<int32_t>(face_detections.size());\n        \n        o_regions.resize(num_face);\n        \n        for(size_t face = 0; face<num_face; face++){\n            // Correct for scale\n            o_regions[face].width = face_detections[face].bbox.width * 0.8924;\n            o_regions[face].height = face_detections[face].bbox.height * 0.8676;\n            \n            // Move the face slightly to the right (as the width was made smaller)\n            o_regions[face].x = face_detections[face].bbox.x + 0.0578 * face_detections[face].bbox.width;\n            // Shift face down as OpenCV Haar Cascade detects the forehead as well, and we're not interested\n            o_regions[face].y = face_detections[face].bbox.y + face_detections[face].bbox.height * 0.2166;\n        }\n        \n        return o_regions.size()>0;\n    }\n    \n    \n    bool DetectSingleFace(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity_image, cv::CascadeClassifier& classifier, cv::Point preference)\n    {\n        \n        // The tracker can return multiple faces\n        std::vector<cv::Rect_<double> > face_detections;\n        \n        bool detect_success = LandmarkDetector::DetectFaces(face_detections, intensity_image, classifier);\n        //bool detect_success = LandmarkDetector::seetaDetectFace(face_detections, intensity_image);\n        if(detect_success)\n        {\n            \n            bool use_preferred = (preference.x != -1) && (preference.y != -1);\n            \n            if(face_detections.size() > 1)\n            {\n                // keep the closest one if preference point not set\n                double best = -1;\n                int bestIndex = -1;\n                for( size_t i = 0; i < face_detections.size(); ++i)\n                {\n                    double dist;\n                    bool better;\n                    \n                    if(use_preferred)\n                    {\n                        dist = sqrt((preference.x) * (face_detections[i].width/2 + face_detections[i].x) +\n                                    (preference.y) * (face_detections[i].height/2 + face_detections[i].y));\n                        better = dist < best;\n                    }\n                    else\n                    {\n                        dist = face_detections[i].width;\n                        better = face_detections[i].width > best;\n                    }\n                    \n                    // Pick a closest face to preffered point or the biggest face\n                    if(i == 0 || better)\n                    {\n                        bestIndex = i;\n                        best = dist;\n                    }\n                }\n                \n                o_region = face_detections[bestIndex];\n                \n                \n            }\n            else\n            {\n                o_region = face_detections[0];\n            }\n            \n        }\n        else\n        {\n            // if not detected\n            o_region = cv::Rect_<double>(0,0,0,0);\n        }\n        return detect_success;\n    }\n    \n    \n    \n    bool DetectSingleFaceSeetaFace(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity_image, seeta::FaceDetection *detector, cv::Point preference)\n    {\n        \n        // The tracker can return multiple faces\n        std::vector<cv::Rect_<double> > face_detections;\n        \n        //    bool detect_success = LandmarkDetector::DetectFaces(face_detections, intensity_image, classifier);\n        bool detect_success = LandmarkDetector::seetaDetectFace(face_detections, intensity_image,detector);\n        if(detect_success)\n        {\n            \n            bool use_preferred = (preference.x != -1) && (preference.y != -1);\n            \n            if(face_detections.size() > 1)\n            {\n                // keep the closest one if preference point not set\n                double best = -1;\n                int bestIndex = -1;\n                for( size_t i = 0; i < face_detections.size(); ++i)\n                {\n                    double dist;\n                    bool better;\n                    \n                    if(use_preferred)\n                    {\n                        dist = sqrt((preference.x) * (face_detections[i].width/2 + face_detections[i].x) +\n                                    (preference.y) * (face_detections[i].height/2 + face_detections[i].y));\n                        better = dist < best;\n                    }\n                    else\n                    {\n                        dist = face_detections[i].width;\n                        better = face_detections[i].width > best;\n                    }\n                    \n                    // Pick a closest face to preffered point or the biggest face\n                    if(i == 0 || better)\n                    {\n                        bestIndex = i;\n                        best = dist;\n                    }\n                }\n                \n                o_region = face_detections[bestIndex];\n                \n            }\n            else\n            {\n                o_region = face_detections[0];\n            }\n            \n        }\n        else\n        {\n            // if not detected\n            o_region = cv::Rect_<double>(0,0,0,0);\n        }\n        return detect_success;\n    }\n    \n    \n    //bool DetectFacesHOG(vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, std::vector<double>& confidences)\n    //{\n    //    dlib::frontal_face_detector detector = dlib::get_frontal_face_detector();\n    \n    //    return DetectFacesHOG(o_regions, intensity, detector, confidences);\n    \n    //}\n    \n    //bool DetectFacesHOG(vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, dlib::frontal_face_detector& detector, std::vector<double>& o_confidences)\n    //{\n    \n    //    cv::Mat_<uchar> upsampled_intensity;\n    \n    //    double scaling = 1.3;\n    \n    //    cv::resize(intensity, upsampled_intensity, cv::Size((int)(intensity.cols * scaling), (int)(intensity.rows * scaling)));\n    \n    //    dlib::cv_image<uchar> cv_grayscale(upsampled_intensity);\n    \n    //    std::vector<dlib::full_detection> face_detections;\n    //    detector(cv_grayscale, face_detections, -0.2);\n    \n    //    // Convert from int bounding box do a double one with corrections\n    //    o_regions.resize(face_detections.size());\n    //    o_confidences.resize(face_detections.size());\n    \n    //    for( size_t face = 0; face < o_regions.size(); ++face)\n    //    {\n    //        // CLNF expects the bounding box to encompass from eyebrow to chin in y, and from cheeck outline to cheeck outline in x, so we need to compensate\n    \n    //        // The scalings were learned using the Face Detections on LFPW and Helen using ground truth and detections from the HOG detector\n    \n    //        // Move the face slightly to the right (as the width was made smaller)\n    //        o_regions[face].x = (face_detections[face].rect.get_rect().tl_corner().x() + 0.0389 * face_detections[face].rect.get_rect().width())/scaling;\n    //        // Shift face down as OpenCV Haar Cascade detects the forehead as well, and we're not interested\n    //        o_regions[face].y = (face_detections[face].rect.get_rect().tl_corner().y() + 0.1278 * face_detections[face].rect.get_rect().height())/scaling;\n    \n    //        // Correct for scale\n    //        o_regions[face].width = (face_detections[face].rect.get_rect().width() * 0.9611)/scaling;\n    //        o_regions[face].height = (face_detections[face].rect.get_rect().height() * 0.9388)/scaling;\n    \n    //        o_confidences[face] = face_detections[face].detection_confidence;\n    \n    \n    //    }\n    //    return o_regions.size() > 0;\n    //}\n    \n    //bool DetectSingleFaceHOG(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity_img, dlib::frontal_face_detector& detector, double& confidence, cv::Point preference)\n    //{\n    //    // The tracker can return multiple faces\n    //    vector<cv::Rect_<double> > face_detections;\n    //    vector<double> confidences;\n    \n    //    bool detect_success = LandmarkDetector::DetectFacesHOG(face_detections, intensity_img, detector, confidences);\n    \n    //    if(detect_success)\n    //    {\n    \n    //        bool use_preferred = (preference.x != -1) && (preference.y != -1);\n    \n    //        // keep the most confident one or the one closest to preference point if set\n    //        double best_so_far;\n    //        if(use_preferred)\n    //        {\n    //            best_so_far = sqrt((preference.x - (face_detections[0].width/2 + face_detections[0].x)) * (preference.x - (face_detections[0].width/2 + face_detections[0].x)) +\n    //                               (preference.y - (face_detections[0].height/2 + face_detections[0].y)) * (preference.y - (face_detections[0].height/2 + face_detections[0].y)));\n    //        }\n    //        else\n    //        {\n    //            best_so_far = confidences[0];\n    //        }\n    //        int bestIndex = 0;\n    \n    //        for( size_t i = 1; i < face_detections.size(); ++i)\n    //        {\n    \n    //            double dist;\n    //            bool better;\n    \n    //            if(use_preferred)\n    //            {\n    //                dist = sqrt((preference.x - (face_detections[0].width/2 + face_detections[0].x)) * (preference.x - (face_detections[0].width/2 + face_detections[0].x)) +\n    //                               (preference.y - (face_detections[0].height/2 + face_detections[0].y)) * (preference.y - (face_detections[0].height/2 + face_detections[0].y)));\n    //                better = dist < best_so_far;\n    //            }\n    //            else\n    //            {\n    //                dist = confidences[i];\n    //                better = dist > best_so_far;\n    //            }\n    \n    //            // Pick a closest face\n    //            if(better)\n    //            {\n    //                best_so_far = dist;\n    //                bestIndex = i;\n    //            }\n    //        }\n    \n    //        o_region = face_detections[bestIndex];\n    //        confidence = confidences[bestIndex];\n    //    }\n    //    else\n    //    {\n    //        // if not detected\n    //        o_region = cv::Rect_<double>(0,0,0,0);\n    //        // A completely unreliable detection (shouldn't really matter what is returned here)\n    //        confidence = -2;\n    //    }\n    //    return detect_success;\n    //}\n    \n    //============================================================================\n    // Matrix reading functionality\n    //============================================================================\n    \n    // Reading in a matrix from a stream\n    void ReadMat(std::ifstream& stream, cv::Mat &output_mat)\n    {\n        // Read in the number of rows, columns and the data type\n        int row,col,type;\n        \n        stream >> row >> col >> type;\n        \n        output_mat = cv::Mat(row, col, type);\n        \n        switch(output_mat.type())\n        {\n            case CV_64FC1:\n            {\n                cv::MatIterator_<double> begin_it = output_mat.begin<double>();\n                cv::MatIterator_<double> end_it = output_mat.end<double>();\n                \n                while(begin_it != end_it)\n                {\n                    stream >> *begin_it++;\n                }\n            }\n                break;\n            case CV_32FC1:\n            {\n                cv::MatIterator_<float> begin_it = output_mat.begin<float>();\n                cv::MatIterator_<float> end_it = output_mat.end<float>();\n                \n                while(begin_it != end_it)\n                {\n                    stream >> *begin_it++;\n                }\n            }\n                break;\n            case CV_32SC1:\n            {\n                cv::MatIterator_<int> begin_it = output_mat.begin<int>();\n                cv::MatIterator_<int> end_it = output_mat.end<int>();\n                while(begin_it != end_it)\n                {\n                    stream >> *begin_it++;\n                }\n            }\n                break;\n            case CV_8UC1:\n            {\n                cv::MatIterator_<uchar> begin_it = output_mat.begin<uchar>();\n                cv::MatIterator_<uchar> end_it = output_mat.end<uchar>();\n                while(begin_it != end_it)\n                {\n                    stream >> *begin_it++;\n                }\n            }\n                break;\n            default:\n                printf(\"ERROR(%s,%d) : Unsupported Matrix type %d!\\n\", __FILE__,__LINE__,output_mat.type()); abort();\n                \n                \n        }\n    }\n    \n    void ReadMatBin(std::ifstream& stream, cv::Mat &output_mat)\n    {\n        // Read in the number of rows, columns and the data type\n        int row, col, type;\n        \n        stream.read ((char*)&row, 4);\n        stream.read ((char*)&col, 4);\n        stream.read ((char*)&type, 4);\n        \n        output_mat = cv::Mat(row, col, type);\n        int size = output_mat.rows * output_mat.cols * output_mat.elemSize();\n        stream.read((char *)output_mat.data, size);\n        \n    }\n    \n    // Skipping lines that start with # (together with empty lines)\n    void SkipComments(std::ifstream& stream)\n    {\n        while(stream.peek() == '#' || stream.peek() == '\\n'|| stream.peek() == ' ' || stream.peek() == '\\r')\n        {\n            std::string skipped;\n            std::getline(stream, skipped);\n        }\n    }\n    \n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/PAW.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"PAW.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n// Copy constructor\nPAW::PAW(const PAW& other) : destination_landmarks(other.destination_landmarks.clone()), source_landmarks(other.source_landmarks.clone()), triangulation(other.triangulation.clone()),\ntriangle_id(other.triangle_id.clone()), pixel_mask(other.pixel_mask.clone()), coefficients(other.coefficients.clone()), alpha(other.alpha.clone()), beta(other.beta.clone()), map_x(other.map_x.clone()), map_y(other.map_y.clone())\n{\n\tthis->number_of_pixels = other.number_of_pixels;\n\tthis->min_x = other.min_x;\n\tthis->min_y = other.min_y;\n}\n\n// A constructor from destination shape and triangulation\nPAW::PAW(const cv::Mat_<double>& destination_shape, const cv::Mat_<int>& triangulation)\n{\n\t// Initialise some variables directly\n\tthis->destination_landmarks = destination_shape;\n\tthis->triangulation = triangulation;\n\n\tint num_points = destination_shape.rows/2;\n\n\tint num_tris = triangulation.rows;\n\t\n\t// Pre-compute the rest\n    alpha = cv::Mat_<double>(num_tris, 3);\n    beta = cv::Mat_<double>(num_tris, 3);\n    \n\tcv::Mat_<double> xs = destination_shape(cv::Rect(0, 0, 1, num_points));\n\tcv::Mat_<double> ys = destination_shape(cv::Rect(0, num_points, 1, num_points));\n    \n\t// Create a vector representation of the control points\n    std::vector<std::vector<double>> destination_points;\n\n\tfor (int tri = 0; tri < num_tris; ++tri)\n\t{\t\n\t\tint j = triangulation.at<int>(tri, 0);\n\t\tint k = triangulation.at<int>(tri, 1);\n\t\tint l = triangulation.at<int>(tri, 2);\n\n        double c1 = ys.at<double>(l) - ys.at<double>(j);\n        double c2 = xs.at<double>(l) - xs.at<double>(j);\n        double c4 = ys.at<double>(k) - ys.at<double>(j);\n        double c3 = xs.at<double>(k) - xs.at<double>(j);\n        \t\t\n        double c5 = c3*c1 - c2*c4;\n\n        alpha.at<double>(tri, 0) = (ys.at<double>(j) * c2 - xs.at<double>(j) * c1) / c5;\n        alpha.at<double>(tri, 1) = c1/c5;\n        alpha.at<double>(tri, 2) = -c2/c5;\n\n        beta.at<double>(tri, 0) = (xs.at<double>(j) * c4 - ys.at<double>(j) * c3)/c5;\n        beta.at<double>(tri, 1) = -c4/c5;\n        beta.at<double>(tri, 2) = c3/c5;\n\n\t\t// Add points corresponding to triangles as optimisation\n        std::vector<double> triangle_points(10);\n\n\t\ttriangle_points[0] = xs.at<double>(j);\n\t\ttriangle_points[1] = ys.at<double>(j);\n\t\ttriangle_points[2] = xs.at<double>(k);\n\t\ttriangle_points[3] = ys.at<double>(k);\n\t\ttriangle_points[4] = xs.at<double>(l);\n\t\ttriangle_points[5] = ys.at<double>(l);\n\t\t\n\t\tcv::Vec3d xs_three(triangle_points[0], triangle_points[2], triangle_points[4]);\n\t\tcv::Vec3d ys_three(triangle_points[1], triangle_points[3], triangle_points[5]);\n\n\t\tdouble min_x, max_x, min_y, max_y;\n\t\tcv::minMaxIdx(xs_three, &min_x, &max_x);\n\t\tcv::minMaxIdx(ys_three, &min_y, &max_y);\n\n\t\ttriangle_points[6] = max_x;\n\t\ttriangle_points[7] = max_y;\n\n\t\ttriangle_points[8] = min_x;\n\t\ttriangle_points[9] = min_y;\n\n\t\tdestination_points.push_back(triangle_points);\n\n\t}\n\n\tdouble max_x;\n\tdouble max_y;\n\n\tminMaxLoc(xs, &min_x, &max_x);\n\tminMaxLoc(ys, &min_y, &max_y);\n\n\tint w = (int)(max_x - min_x + 1.5);\n    int h = (int)(max_y - min_y + 1.5);\n    \n\t// Round the min_x and min_y for simplicity?\n\n    pixel_mask = cv::Mat_<uchar>(h, w, (uchar)0);\n    triangle_id = cv::Mat_<int>(h, w, -1);\n        \n\tint curr_tri = -1;\n\n\tfor(int y = 0; y < pixel_mask.rows; y++)\n\t{\n\t\tfor(int x = 0; x < pixel_mask.cols; x++)\n\t\t{\n\t\t\tcurr_tri = findTriangle(cv::Point_<double>(x + min_x, y + min_y), destination_points, curr_tri);\n\t\t\t// If there is a triangle at this location\n            if(curr_tri != -1)\n\t\t\t{\n\t\t\t\ttriangle_id.at<int>(y, x) = curr_tri;\n                pixel_mask.at<uchar>(y, x) = 1;\n\t\t\t}\t\n\t\t}\n\t}\n    \t\n\t// Preallocate maps and coefficients\n\tcoefficients.create(num_tris, 6);\n\tmap_x.create(pixel_mask.rows,pixel_mask.cols);\n\tmap_y.create(pixel_mask.rows,pixel_mask.cols);\n\n\n}\n\n// Manually define min and max values\nPAW::PAW(const cv::Mat_<double>& destination_shape, const cv::Mat_<int>& triangulation, double in_min_x, double in_min_y, double in_max_x, double in_max_y)\n{\n\t// Initialise some variables directly\n\tthis->destination_landmarks = destination_shape;\n\tthis->triangulation = triangulation;\n\n\tint num_points = destination_shape.rows/2;\n\n\tint num_tris = triangulation.rows;\n\t\n\t// Pre-compute the rest\n    alpha = cv::Mat_<double>(num_tris, 3);\n    beta = cv::Mat_<double>(num_tris, 3);\n    \n\tcv::Mat_<double> xs = destination_shape(cv::Rect(0, 0, 1, num_points));\n\tcv::Mat_<double> ys = destination_shape(cv::Rect(0, num_points, 1, num_points));\n\n\t// Create a vector representation of the control points\n    std::vector<std::vector<double>> destination_points;\n    \n\tfor (int tri = 0; tri < num_tris; ++tri)\n\t{\t\n\t\tint j = triangulation.at<int>(tri, 0);\n\t\tint k = triangulation.at<int>(tri, 1);\n\t\tint l = triangulation.at<int>(tri, 2);\n\n        double c1 = ys.at<double>(l) - ys.at<double>(j);\n        double c2 = xs.at<double>(l) - xs.at<double>(j);\n        double c4 = ys.at<double>(k) - ys.at<double>(j);\n        double c3 = xs.at<double>(k) - xs.at<double>(j);\n        \t\t\n        double c5 = c3*c1 - c2*c4;\n\n        alpha.at<double>(tri, 0) = (ys.at<double>(j) * c2 - xs.at<double>(j) * c1) / c5;\n        alpha.at<double>(tri, 1) = c1/c5;\n        alpha.at<double>(tri, 2) = -c2/c5;\n\n        beta.at<double>(tri, 0) = (xs.at<double>(j) * c4 - ys.at<double>(j) * c3)/c5;\n        beta.at<double>(tri, 1) = -c4/c5;\n        beta.at<double>(tri, 2) = c3/c5;\n\n\t\t// Add points corresponding to triangles as optimisation\n        std::vector<double> triangle_points(10);\n\n\t\ttriangle_points[0] = xs.at<double>(j);\n\t\ttriangle_points[1] = ys.at<double>(j);\n\t\ttriangle_points[2] = xs.at<double>(k);\n\t\ttriangle_points[3] = ys.at<double>(k);\n\t\ttriangle_points[4] = xs.at<double>(l);\n\t\ttriangle_points[5] = ys.at<double>(l);\n\t\t\n\t\tcv::Vec3d xs_three(triangle_points[0], triangle_points[2], triangle_points[4]);\n\t\tcv::Vec3d ys_three(triangle_points[1], triangle_points[3], triangle_points[5]);\n\n\t\tdouble min_x, max_x, min_y, max_y;\n\t\tcv::minMaxIdx(xs_three, &min_x, &max_x);\n\t\tcv::minMaxIdx(ys_three, &min_y, &max_y);\n\n\t\ttriangle_points[6] = max_x;\n\t\ttriangle_points[7] = max_y;\n\n\t\ttriangle_points[8] = min_x;\n\t\ttriangle_points[9] = min_y;\n\n\t\tdestination_points.push_back(triangle_points);\n\t\t\n\t}\n\n\tdouble max_x;\n\tdouble max_y;\n\n\tmin_x = in_min_x;\n\tmin_y = in_min_y;\n\n\tmax_x = in_max_x;\n\tmax_y = in_max_y;\n\n\tint w = (int)(max_x - min_x + 1.5);\n    int h = (int)(max_y - min_y + 1.5);\n    \n\t// Round the min_x and min_y for simplicity?\n\n    pixel_mask = cv::Mat_<uchar>(h, w, (uchar)0);\n    triangle_id = cv::Mat_<int>(h, w, -1);\n        \n\tint curr_tri = -1;\n\n\tfor(int y = 0; y < pixel_mask.rows; y++)\n\t{\n\t\tfor(int x = 0; x < pixel_mask.cols; x++)\n\t\t{\n\t\t\tcurr_tri = findTriangle(cv::Point_<double>(x + min_x, y + min_y), destination_points, curr_tri);\n\t\t\t// If there is a triangle at this location\n            if(curr_tri != -1)\n\t\t\t{\n\t\t\t\ttriangle_id.at<int>(y, x) = curr_tri;\n                pixel_mask.at<uchar>(y, x) = 1;\n\t\t\t}\t\n\t\t}\n\t}    \t\n\n\t// Preallocate maps and coefficients\n\tcoefficients.create(num_tris, 6);\n\tmap_x.create(pixel_mask.rows,pixel_mask.cols);\n\tmap_y.create(pixel_mask.rows,pixel_mask.cols);\n\n}\n\n//===========================================================================\nvoid PAW::Read(std::ifstream& stream)\n{\n\n\tstream.read ((char*)&number_of_pixels, 4);\n\tstream.read ((char*)&min_x, 8);\n\tstream.read ((char*)&min_y, 8);\n\n\tLandmarkDetector::ReadMatBin(stream, destination_landmarks);\n\n\tLandmarkDetector::ReadMatBin(stream, triangulation);\n\n\tLandmarkDetector::ReadMatBin(stream, triangle_id);\n\t\n\tcv::Mat tmpMask;\t\n\tLandmarkDetector::ReadMatBin(stream, tmpMask);\t\n\ttmpMask.convertTo(pixel_mask, CV_8U);\t\n\t\n\tLandmarkDetector::ReadMatBin(stream, alpha);\n\n\tLandmarkDetector::ReadMatBin(stream, beta);\n\n\tmap_x.create(pixel_mask.rows,pixel_mask.cols);\n\tmap_y.create(pixel_mask.rows,pixel_mask.cols);\n\n\tcoefficients.create(this->NumberOfTriangles(),6);\n\t\n\tsource_landmarks = destination_landmarks;\n}\n\n//=============================================================================\n// cropping from the source image to the destination image using the shape in s, used to determine if shape fitting converged successfully\nvoid PAW::Warp(const cv::Mat& image_to_warp, cv::Mat& destination_image, const cv::Mat_<double>& landmarks_to_warp)\n{\n  \n\t// set the current shape\n\tsource_landmarks = landmarks_to_warp.clone();\n\n\t// prepare the mapping coefficients using the current shape\n\tthis->CalcCoeff();\n\n\t// Do the actual mapping computation (where to warp from)\n\tthis->WarpRegion(map_x, map_y);\n  \t\n\t// Do the actual warp (with bi-linear interpolation)\n\tremap(image_to_warp, destination_image, map_x, map_y, CV_INTER_LINEAR);\n  \n}\n\n\n//=============================================================================\n// Calculate the warping coefficients\nvoid PAW::CalcCoeff()\n{\n\tint p = this->NumberOfLandmarks();\n\n\tfor(int l = 0; l < this->NumberOfTriangles(); l++)\n\t{\n\t  \n\t\tint i = triangulation.at<int>(l,0);\n\t\tint j = triangulation.at<int>(l,1);\n\t\tint k = triangulation.at<int>(l,2);\n\n\t\tdouble c1 = source_landmarks.at<double>(i    , 0);\n\t\tdouble c2 = source_landmarks.at<double>(j    , 0) - c1;\n\t\tdouble c3 = source_landmarks.at<double>(k    , 0) - c1;\n\t\tdouble c4 = source_landmarks.at<double>(i + p, 0);\n\t\tdouble c5 = source_landmarks.at<double>(j + p, 0) - c4;\n\t\tdouble c6 = source_landmarks.at<double>(k + p, 0) - c4;\n\n\t\t// Get a pointer to the coefficient we will be precomputing\n\t\tdouble *coeff = coefficients.ptr<double>(l);\n\n\t\t// Extract the relevant alphas and betas\n\t\tdouble *c_alpha = alpha.ptr<double>(l);\n\t\tdouble *c_beta  = beta.ptr<double>(l);\n\n\t\tcoeff[0] = c1 + c2 * c_alpha[0] + c3 * c_beta[0];\n\t\tcoeff[1] =      c2 * c_alpha[1] + c3 * c_beta[1];\n\t\tcoeff[2] =      c2 * c_alpha[2] + c3 * c_beta[2];\n\t\tcoeff[3] = c4 + c5 * c_alpha[0] + c6 * c_beta[0];\n\t\tcoeff[4] =      c5 * c_alpha[1] + c6 * c_beta[1];\n\t\tcoeff[5] =      c5 * c_alpha[2] + c6 * c_beta[2];\n\t}\n}\n\n//======================================================================\n// Compute the mapping coefficients\nvoid PAW::WarpRegion(cv::Mat_<float>& mapx, cv::Mat_<float>& mapy)\n{\n\t\n\tcv::MatIterator_<float> xp = mapx.begin();\n\tcv::MatIterator_<float> yp = mapy.begin();\n\tcv::MatIterator_<uchar> mp = pixel_mask.begin();\n\tcv::MatIterator_<int>   tp = triangle_id.begin();\n\t\n\t// The coefficients corresponding to the current triangle\n\tdouble * a;\n\n\t// Current triangle being processed\t\n\tint k=-1;\n\n\tfor(int y = 0; y < pixel_mask.rows; y++)\n\t{\n\t\tdouble yi = double(y) + min_y;\n\t\n\t\tfor(int x = 0; x < pixel_mask.cols; x++)\n\t\t{\n\t\t\tdouble xi = double(x) + min_x;\n\n\t\t\tif(*mp == 0)\n\t\t\t{\n\t\t\t\t*xp = -1;\n\t\t\t\t*yp = -1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// triangle corresponding to the current pixel\n\t\t\t\tint j = *tp;\n\n\t\t\t\t// If it is different from the previous triangle point to new coefficients\n\t\t\t\t// This will always be the case in the first iteration, hence a will not point to nothing\n\t\t\t\tif(j != k)\n\t\t\t\t{\n\t\t\t\t\t// Update the coefficient pointer if a new triangle is being processed\n\t\t\t\t\ta = coefficients.ptr<double>(j);\t\t\t\n\t\t\t\t\tk = j;\n\t\t\t\t}  \t\n\n\t\t\t\t//ap is now the pointer to the coefficients\n\t\t\t\tdouble *ap = a;\t\t\t\t\t\t\t\n\n\t\t\t\t//look at the first coefficient (and increment). first coefficient is an x offset\n\t\t\t\tdouble xo = *ap++;\t\t\t\t\t\t\n\t\t\t\t//second coefficient is an x scale as a function of x\n\t\t\t\txo += *ap++ * xi;\t\t\t\t\t\t\n\t\t\t\t//third coefficient ap(2) is an x scale as a function of y\n\t\t\t\t*xp = float(xo + *ap++ * yi);\t\t\t\n\n\t\t\t\t//then fourth coefficient ap(3) is a y offset\n\t\t\t\tdouble yo = *ap++;\t\t\t\t\t\t\n\t\t\t\t//fifth coeff adds coeff[4]*x to y\n\t\t\t\tyo += *ap++ * xi;\t\t\t\t\t\t\n\t\t\t\t//final coeff adds coeff[5]*y to y\n\t\t\t\t*yp = float(yo + *ap++ * yi);\t\t\t\n\n\t\t\t}\n\t\t\tmp++; tp++; xp++; yp++;\t\n\t\t}\n\t}\n}\n\n// ============================================================\n// Helper functions to determine which point a triangle lies in\n// ============================================================\n\n// Is the point (x0,y0) on same side as a half-plane defined by (x1,y1), (x2, y2), and (x3, y3)\nbool sameSide(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3)\n{\n    \n    double x = (x3-x2)*(y0-y2) - (x0-x2)*(y3-y2);\n    double y = (x3-x2)*(y1-y2) - (x1-x2)*(y3-y2);\n\n    return x*y >= 0;\n\n}\n\n// if point (x0, y0) is on same side for all three half-planes it is in a triangle\nbool pointInTriangle(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3)\n{\n\tbool same_1 = sameSide(x0, y0, x1, y1, x2, y2, x3, y3);\n\tbool same_2 = sameSide(x0, y0, x2, y2, x1, y1, x3, y3);\n\tbool same_3 = sameSide(x0, y0, x3, y3, x1, y1, x2, y2);\n\n\treturn same_1 && same_2 && same_3;\n\n}\n\n// Find if a given point lies in the triangles\nint PAW::findTriangle(const cv::Point_<double>& point, const std::vector<std::vector<double>>& control_points, int guess) const\n{\n    \n\tint num_tris = control_points.size();\n\t\n\tint tri = -1;\n    \n\tdouble x0 = point.x;\n\tdouble y0 = point.y;\n\n\t// Allow a guess for speed (so as not to go through all triangles)\n\tif(guess != -1)\n\t{\n\t\t\n\t\tbool in_triangle = pointInTriangle(x0, y0, control_points[guess][0], control_points[guess][1], control_points[guess][2], control_points[guess][3], control_points[guess][4], control_points[guess][5]);\n\t\tif(in_triangle)\n\t\t{\n\t\t\treturn guess;\n\t\t}\n\t}\n\n\n    for (int i = 0; i < num_tris; ++i)\n\t{\n\n\t\tdouble max_x = control_points[i][6];\n\t\tdouble max_y = control_points[i][7];\n\n\t\tdouble min_x = control_points[i][8];\n\t\tdouble min_y = control_points[i][9];\n\n\t\t// Skip the check if the point is outside the bounding box of the triangle\n\n\t\tif( max_x < x0 || min_x > x0 || max_y < y0 || min_y > y0)\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tbool in_triangle = pointInTriangle(x0, y0, \n\t\t\tcontrol_points[i][0], control_points[i][1],\n\t\t\tcontrol_points[i][2], control_points[i][3],\n\t\t\tcontrol_points[i][4], control_points[i][5]);\n\n        if(in_triangle)\n\t\t{\n           tri = i;\n           break;\n\t\t}        \n\t}\n\treturn tri;\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/PDM.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"PDM.h\"\n\n// OpenCV include\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n// Math includes\n#define _USE_MATH_DEFINES\n#include <cmath>\n\n#ifndef M_PI\n\t#define M_PI 3.14159265358979323846\n#endif\n\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n//===========================================================================\n\n//=============================================================================\n// Orthonormalising the 3x3 rotation matrix\nvoid Orthonormalise(cv::Matx33d &R)\n{\n\n\tcv::SVD svd(R,cv::SVD::MODIFY_A);\n  \n\t// get the orthogonal matrix from the initial rotation matrix\n\tcv::Mat_<double> X = svd.u*svd.vt;\n  \n\t// This makes sure that the handedness is preserved and no reflection happened\n\t// by making sure the determinant is 1 and not -1\n\tcv::Mat_<double> W = cv::Mat_<double>::eye(3,3);\n\tdouble d = determinant(X);\n\tW(2,2) = determinant(X);\n\tcv::Mat Rt = svd.u*W*svd.vt;\n\n\tRt.copyTo(R);\n\n}\n\n// A copy constructor\nPDM::PDM(const PDM& other) {\n\n\t// Make sure the matrices are allocated properly\n\tthis->mean_shape = other.mean_shape.clone();\n\tthis->princ_comp = other.princ_comp.clone();\n\tthis->eigen_values = other.eigen_values.clone();\n}\n\n//===========================================================================\n// Clamping the parameter values to be within 3 standard deviations\nvoid PDM::Clamp(cv::Mat_<float>& local_params, cv::Vec6d& params_global, const FaceModelParameters& parameters)\n{\n\tdouble n_sigmas = 3;\n\tcv::MatConstIterator_<double> e_it  = this->eigen_values.begin();\n\tcv::MatIterator_<float> p_it =  local_params.begin();\n\n\tdouble v;\n\n\t// go over all parameters\n\tfor(; p_it != local_params.end(); ++p_it, ++e_it)\n\t{\n\t\t// Work out the maximum value\n\t\tv = n_sigmas*sqrt(*e_it);\n\n\t\t// if the values is too extreme clamp it\n\t\tif(fabs(*p_it) > v)\n\t\t{\n\t\t\t// Dealing with positive and negative cases\n\t\t\tif(*p_it > 0.0)\n\t\t\t{\n\t\t\t\t*p_it=v;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*p_it=-v;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// do not let the pose get out of hand\n\tif(parameters.limit_pose)\n\t{\n\t\tif(params_global[1] > M_PI / 2)\n\t\t\tparams_global[1] = M_PI/2;\n\t\tif(params_global[1] < -M_PI / 2)\n\t\t\tparams_global[1] = -M_PI/2;\n\t\tif(params_global[2] > M_PI / 2)\n\t\t\tparams_global[2] = M_PI/2;\n\t\tif(params_global[2] < -M_PI / 2)\n\t\t\tparams_global[2] = -M_PI/2;\n\t\tif(params_global[3] > M_PI / 2)\n\t\t\tparams_global[3] = M_PI/2;\n\t\tif(params_global[3] < -M_PI / 2)\n\t\t\tparams_global[3] = -M_PI/2;\n\t}\n\t\n\n}\n//===========================================================================\n// Compute the 3D representation of shape (in object space) using the local parameters\nvoid PDM::CalcShape3D(cv::Mat_<double>& out_shape, const cv::Mat_<double>& p_local) const\n{\n\tout_shape.create(mean_shape.rows, mean_shape.cols);\n\tout_shape = mean_shape + princ_comp*p_local;\n}\n\n//===========================================================================\n// Get the 2D shape (in image space) from global and local parameters\nvoid PDM::CalcShape2D(cv::Mat_<double>& out_shape, const cv::Mat_<double>& params_local, const cv::Vec6d& params_global) const\n{\n\n\tint n = this->NumberOfPoints();\n\n\tdouble s = params_global[0]; // scaling factor\n\tdouble tx = params_global[4]; // x offset\n\tdouble ty = params_global[5]; // y offset\n\n\t// get the rotation matrix from the euler angles\n\tcv::Vec3d euler(params_global[1], params_global[2], params_global[3]);\n\tcv::Matx33d currRot = Euler2RotationMatrix(euler);\n\t\n\t// get the 3D shape of the object\n\tcv::Mat_<double> Shape_3D = mean_shape + princ_comp * params_local;\n\n\t// create the 2D shape matrix (if it has not been defined yet)\n\tif((out_shape.rows != mean_shape.rows) || (out_shape.cols = 1))\n\t{\n\t\tout_shape.create(2*n,1);\n\t}\n\t// for every vertex\n\tfor(int i = 0; i < n; i++)\n\t{\n\t\t// Transform this using the weak-perspective mapping to 2D from 3D\n\t\tout_shape.at<double>(i  ,0) = s * ( currRot(0,0) * Shape_3D.at<double>(i, 0) + currRot(0,1) * Shape_3D.at<double>(i+n  ,0) + currRot(0,2) * Shape_3D.at<double>(i+n*2,0) ) + tx;\n\t\tout_shape.at<double>(i+n,0) = s * ( currRot(1,0) * Shape_3D.at<double>(i, 0) + currRot(1,1) * Shape_3D.at<double>(i+n  ,0) + currRot(1,2) * Shape_3D.at<double>(i+n*2,0) ) + ty;\n\t}\n}\n\n//===========================================================================\n// provided the bounding box of a face and the local parameters (with optional rotation), generates the global parameters that can generate the face with the provided bounding box\n// This all assumes that the bounding box describes face from left outline to right outline of the face and chin to eyebrows\nvoid PDM::CalcParams(cv::Vec6d& out_params_global, const cv::Rect_<double>& bounding_box, const cv::Mat_<double>& params_local, const cv::Vec3d rotation)\n{\n\n\t// get the shape instance based on local params\n\tcv::Mat_<double> current_shape(mean_shape.size());\n\n\tCalcShape3D(current_shape, params_local);\n\n\t// rotate the shape\n\tcv::Matx33d rotation_matrix = Euler2RotationMatrix(rotation);\n\n\tcv::Mat_<double> reshaped = current_shape.reshape(1, 3);\n\n\tcv::Mat rotated_shape = (cv::Mat(rotation_matrix) * reshaped);\n\n\t// Get the width of expected shape\n\tdouble min_x;\n\tdouble max_x;\n\tcv::minMaxLoc(rotated_shape.row(0), &min_x, &max_x);\t\n\n\tdouble min_y;\n\tdouble max_y;\n\tcv::minMaxLoc(rotated_shape.row(1), &min_y, &max_y);\n\n\tdouble width = abs(min_x - max_x);\n\tdouble height = abs(min_y - max_y);\n\n\tdouble scaling = ((bounding_box.width / width) + (bounding_box.height / height)) / 2;\n\n\t// The estimate of face center also needs some correction\n\tdouble tx = bounding_box.x + bounding_box.width / 2;\n\tdouble ty = bounding_box.y + bounding_box.height / 2;\n\n\t// Correct it so that the bounding box is just around the minimum and maximum point in the initialised face\t\n\ttx = tx - scaling * (min_x + max_x)/2;\n    ty = ty - scaling * (min_y + max_y)/2;\n\n\tout_params_global = cv::Vec6d(scaling, rotation[0], rotation[1], rotation[2], tx, ty);\n}\n\n//===========================================================================\n// provided the model parameters, compute the bounding box of a face\n// The bounding box describes face from left outline to right outline of the face and chin to eyebrows\nvoid PDM::CalcBoundingBox(cv::Rect& out_bounding_box, const cv::Vec6d& params_global, const cv::Mat_<double>& params_local)\n{\n\t\n\t// get the shape instance based on local params\n\tcv::Mat_<double> current_shape;\n\tCalcShape2D(current_shape, params_local, params_global);\n\t\n\t// Get the width of expected shape\n\tdouble min_x;\n\tdouble max_x;\n\tcv::minMaxLoc(current_shape(cv::Rect(0, 0, 1, this->NumberOfPoints())), &min_x, &max_x);\n\n\tdouble min_y;\n\tdouble max_y;\n\tcv::minMaxLoc(current_shape(cv::Rect(0, this->NumberOfPoints(), 1, this->NumberOfPoints())), &min_y, &max_y);\n\n\tdouble width = abs(min_x - max_x);\n\tdouble height = abs(min_y - max_y);\n\n\tout_bounding_box = cv::Rect((int)min_x, (int)min_y, (int)width, (int)height);\n}\n\n//===========================================================================\n// Calculate the PDM's Jacobian over rigid parameters (rotation, translation and scaling), the additional input W represents trust for each of the landmarks and is part of Non-Uniform RLMS \nvoid PDM::ComputeRigidJacobian(const cv::Mat_<float>& p_local, const cv::Vec6d& params_global, cv::Mat_<float> &Jacob, const cv::Mat_<float> W, cv::Mat_<float> &Jacob_t_w)\n{\n  \t\n\t// number of verts\n\tint n = this->NumberOfPoints();\n  \n\tJacob.create(n * 2, 6);\n\n\tfloat X,Y,Z;\n\n\tfloat s = (float)params_global[0];\n  \t\n\tcv::Mat_<double> shape_3D_d;\n\tcv::Mat_<double> p_local_d;\n\tp_local.convertTo(p_local_d, CV_64F);\n\tthis->CalcShape3D(shape_3D_d, p_local_d);\n\t\n\tcv::Mat_<float> shape_3D;\n\tshape_3D_d.convertTo(shape_3D, CV_32F);\n\n\t // Get the rotation matrix\n\tcv::Vec3d euler(params_global[1], params_global[2], params_global[3]);\n\tcv::Matx33d currRot = Euler2RotationMatrix(euler);\n\t\n\tfloat r11 = (float) currRot(0,0);\n\tfloat r12 = (float) currRot(0,1);\n\tfloat r13 = (float) currRot(0,2);\n\tfloat r21 = (float) currRot(1,0);\n\tfloat r22 = (float) currRot(1,1);\n\tfloat r23 = (float) currRot(1,2);\n\tfloat r31 = (float) currRot(2,0);\n\tfloat r32 = (float) currRot(2,1);\n\tfloat r33 = (float) currRot(2,2);\n\n\tcv::MatIterator_<float> Jx = Jacob.begin();\n\tcv::MatIterator_<float> Jy = Jx + n * 6;\n\n\tfor(int i = 0; i < n; i++)\n\t{\n    \n\t\tX = shape_3D.at<float>(i,0);\n\t\tY = shape_3D.at<float>(i+n,0);\n\t\tZ = shape_3D.at<float>(i+n*2,0);    \n\t\t\n\t\t// The rigid jacobian from the axis angle rotation matrix approximation using small angle assumption (R * R')\n\t\t// where R' = [1, -wz, wy\n\t\t//             wz, 1, -wx\n\t\t//             -wy, wx, 1]\n\t\t// And this is derived using the small angle assumption on the axis angle rotation matrix parametrisation\n\n\t\t// scaling term\n\t\t*Jx++ =  (X  * r11 + Y * r12 + Z * r13);\n\t\t*Jy++ =  (X  * r21 + Y * r22 + Z * r23);\n\t\t\n\t\t// rotation terms\n\t\t*Jx++ = (s * (Y * r13 - Z * r12) );\n\t\t*Jy++ = (s * (Y * r23 - Z * r22) );\n\t\t*Jx++ = (-s * (X * r13 - Z * r11));\n\t\t*Jy++ = (-s * (X * r23 - Z * r21));\n\t\t*Jx++ = (s * (X * r12 - Y * r11) );\n\t\t*Jy++ = (s * (X * r22 - Y * r21) );\n\t\t\n\t\t// translation terms\n\t\t*Jx++ = 1.0f;\n\t\t*Jy++ = 0.0f;\n\t\t*Jx++ = 0.0f;\n\t\t*Jy++ = 1.0f;\n\n\t}\n\n\tcv::Mat Jacob_w = cv::Mat::zeros(Jacob.rows, Jacob.cols, Jacob.type());\n\t\n\tJx =  Jacob.begin();\n\tJy =  Jx + n*6;\n\n\tcv::MatIterator_<float> Jx_w =  Jacob_w.begin<float>();\n\tcv::MatIterator_<float> Jy_w =  Jx_w + n*6;\n\n\t// Iterate over all Jacobian values and multiply them by the weight in diagonal of W\n\tfor(int i = 0; i < n; i++)\n\t{\n\t\tfloat w_x = W.at<float>(i, i);\n\t\tfloat w_y = W.at<float>(i+n, i+n);\n\n\t\tfor(int j = 0; j < Jacob.cols; ++j)\n\t\t{\n\t\t\t*Jx_w++ = *Jx++ * w_x;\n\t\t\t*Jy_w++ = *Jy++ * w_y;\n\t\t}\t\t\n\t}\n\n\tJacob_t_w = Jacob_w.t();\n}\n\n//===========================================================================\n// Calculate the PDM's Jacobian over all parameters (rigid and non-rigid), the additional input W represents trust for each of the landmarks and is part of Non-Uniform RLMS\nvoid PDM::ComputeJacobian(const cv::Mat_<float>& params_local, const cv::Vec6d& params_global, cv::Mat_<float> &Jacobian, const cv::Mat_<float> W, cv::Mat_<float> &Jacob_t_w)\n{ \n\t\n\t// number of vertices\n\tint n = this->NumberOfPoints();\n\t\t\n\t// number of non-rigid parameters\n\tint m = this->NumberOfModes();\n\n\tJacobian.create(n * 2, 6 + m);\n\t\n\tfloat X,Y,Z;\n\t\n\tfloat s = (float) params_global[0];\n  \t\n\tcv::Mat_<double> shape_3D_d;\n\tcv::Mat_<double> p_local_d;\n\tparams_local.convertTo(p_local_d, CV_64F);\n\tthis->CalcShape3D(shape_3D_d, p_local_d);\n\t\n\tcv::Mat_<float> shape_3D;\n\tshape_3D_d.convertTo(shape_3D, CV_32F);\n\n\tcv::Vec3d euler(params_global[1], params_global[2], params_global[3]);\n\tcv::Matx33d currRot = Euler2RotationMatrix(euler);\n\t\n\tfloat r11 = (float) currRot(0,0);\n\tfloat r12 = (float) currRot(0,1);\n\tfloat r13 = (float) currRot(0,2);\n\tfloat r21 = (float) currRot(1,0);\n\tfloat r22 = (float) currRot(1,1);\n\tfloat r23 = (float) currRot(1,2);\n\tfloat r31 = (float) currRot(2,0);\n\tfloat r32 = (float) currRot(2,1);\n\tfloat r33 = (float) currRot(2,2);\n\n\tcv::MatIterator_<float> Jx =  Jacobian.begin();\n\tcv::MatIterator_<float> Jy =  Jx + n * (6 + m);\n\tcv::MatConstIterator_<double> Vx =  this->princ_comp.begin();\n\tcv::MatConstIterator_<double> Vy =  Vx + n*m;\n\tcv::MatConstIterator_<double> Vz =  Vy + n*m;\n\n\tfor(int i = 0; i < n; i++)\n\t{\n    \n\t\tX = shape_3D.at<float>(i,0);\n\t\tY = shape_3D.at<float>(i+n,0);\n\t\tZ = shape_3D.at<float>(i+n*2,0);    \n    \n\t\t// The rigid jacobian from the axis angle rotation matrix approximation using small angle assumption (R * R')\n\t\t// where R' = [1, -wz, wy\n\t\t//             wz, 1, -wx\n\t\t//             -wy, wx, 1]\n\t\t// And this is derived using the small angle assumption on the axis angle rotation matrix parametrisation\n\n\t\t// scaling term\n\t\t*Jx++ = (X  * r11 + Y * r12 + Z * r13);\n\t\t*Jy++ = (X  * r21 + Y * r22 + Z * r23);\n\t\t\n\t\t// rotation terms\n\t\t*Jx++ = (s * (Y * r13 - Z * r12) );\n\t\t*Jy++ = (s * (Y * r23 - Z * r22) );\n\t\t*Jx++ = (-s * (X * r13 - Z * r11));\n\t\t*Jy++ = (-s * (X * r23 - Z * r21));\n\t\t*Jx++ = (s * (X * r12 - Y * r11) );\n\t\t*Jy++ = (s * (X * r22 - Y * r21) );\n\t\t\n\t\t// translation terms\n\t\t*Jx++ = 1.0f;\n\t\t*Jy++ = 0.0f;\n\t\t*Jx++ = 0.0f;\n\t\t*Jy++ = 1.0f;\n\n\t\tfor(int j = 0; j < m; j++,++Vx,++Vy,++Vz)\n\t\t{\n\t\t\t// How much the change of the non-rigid parameters (when object is rotated) affect 2D motion\n\t\t\t*Jx++ = (float) ( s*(r11*(*Vx) + r12*(*Vy) + r13*(*Vz)) );\n\t\t\t*Jy++ = (float) ( s*(r21*(*Vx) + r22*(*Vy) + r23*(*Vz)) );\n\t\t}\n\t}\t\n\n\t// Adding the weights here\n\tcv::Mat Jacob_w = Jacobian.clone();\n\t\n\tif(cv::trace(W)[0] != W.rows) \n\t{\n\t\tJx =  Jacobian.begin();\n\t\tJy =  Jx + n*(6+m);\n\n\t\tcv::MatIterator_<float> Jx_w =  Jacob_w.begin<float>();\n\t\tcv::MatIterator_<float> Jy_w =  Jx_w + n*(6+m);\n\n\t\t// Iterate over all Jacobian values and multiply them by the weight in diagonal of W\n\t\tfor(int i = 0; i < n; i++)\n\t\t{\n\t\t\tfloat w_x = W.at<float>(i, i);\n\t\t\tfloat w_y = W.at<float>(i+n, i+n);\n\n\t\t\tfor(int j = 0; j < Jacobian.cols; ++j)\n\t\t\t{\n\t\t\t\t*Jx_w++ = *Jx++ * w_x;\n\t\t\t\t*Jy_w++ = *Jy++ * w_y;\n\t\t\t}\n\t\t}\n\t}\n\tJacob_t_w = Jacob_w.t();\n\n}\n\n//===========================================================================\n// Updating the parameters (more details in my thesis)\nvoid PDM::UpdateModelParameters(const cv::Mat_<float>& delta_p, cv::Mat_<float>& params_local, cv::Vec6d& params_global)\n{\n\n\t// The scaling and translation parameters can be just added\n\tparams_global[0] += (double)delta_p.at<float>(0,0);\n\tparams_global[4] += (double)delta_p.at<float>(4,0);\n\tparams_global[5] += (double)delta_p.at<float>(5,0);\n\n\t// get the original rotation matrix\t\n\tcv::Vec3d eulerGlobal(params_global[1], params_global[2], params_global[3]);\n\tcv::Matx33d R1 = Euler2RotationMatrix(eulerGlobal);\n\n\t// construct R' = [1, -wz, wy\n\t//               wz, 1, -wx\n\t//               -wy, wx, 1]\n\tcv::Matx33d R2 = cv::Matx33d::eye();\n\n\tR2(1,2) = -1.0*(R2(2,1) = (double)delta_p.at<float>(1,0));\n\tR2(2,0) = -1.0*(R2(0,2) = (double)delta_p.at<float>(2,0));\n\tR2(0,1) = -1.0*(R2(1,0) = (double)delta_p.at<float>(3,0));\n\t\n\t// Make sure it's orthonormal\n\tOrthonormalise(R2);\n\n\t// Combine rotations\n\tcv::Matx33d R3 = R1 *R2;\n\n\t// Extract euler angle (through axis angle first to make sure it's legal)\n\tcv::Vec3d axis_angle = RotationMatrix2AxisAngle(R3);\n\tcv::Vec3d euler = AxisAngle2Euler(axis_angle);\n\n\tparams_global[1] = euler[0];\n\tparams_global[2] = euler[1];\n\tparams_global[3] = euler[2];\n\n\t// Local parameter update, just simple addition\n\tif(delta_p.rows > 6)\n\t{\n\t\tparams_local = params_local + delta_p(cv::Rect(0,6,1, this->NumberOfModes()));\n\t}\n\n}\n\nvoid PDM::CalcParams(cv::Vec6d& out_params_global, const cv::Mat_<double>& out_params_local, const cv::Mat_<double>& landmark_locations, const cv::Vec3d rotation)\n{\n\t\t\n\tint m = this->NumberOfModes();\n\tint n = this->NumberOfPoints();\n\n\tcv::Mat_<int> visi_ind_2D(n * 2, 1, 1);\n\tcv::Mat_<int> visi_ind_3D(3 * n , 1, 1);\n\n\tfor(int i = 0; i < n; ++i)\n\t{\n\t\t// If the landmark is invisible indicate this\n\t\tif(landmark_locations.at<double>(i) == 0)\n\t\t{\n\t\t\tvisi_ind_2D.at<int>(i) = 0;\n\t\t\tvisi_ind_2D.at<int>(i+n) = 0;\n\t\t\tvisi_ind_3D.at<int>(i) = 0;\n\t\t\tvisi_ind_3D.at<int>(i+n) = 0;\n\t\t\tvisi_ind_3D.at<int>(i+2*n) = 0;\n\t\t}\n\t}\n\n\t// As this might be subsampled have special versions\n\tcv::Mat_<double> M(0, mean_shape.cols, 0.0);\n\tcv::Mat_<double> V(0, princ_comp.cols, 0.0);\n\n\tfor(int i = 0; i < n * 3; ++i)\n\t{\n\t\tif(visi_ind_3D.at<int>(i) == 1)\n\t\t{\n\t\t\tcv::vconcat(M, this->mean_shape.row(i), M);\n\t\t\tcv::vconcat(V, this->princ_comp.row(i), V);\n\t\t}\n\t}\n\n\tcv::Mat_<double> m_old = this->mean_shape.clone();\n\tcv::Mat_<double> v_old = this->princ_comp.clone();\n//    std::cout << \"m_old = \" << m_old.t() << std::endl;\n//    std::cout << \"v_old = \" << v_old << std::endl;\n\n\tthis->mean_shape = M;\n\tthis->princ_comp = V;\n\n\t// The new number of points\n\tn  = M.rows / 3;\n\n\t// Extract the relevant landmark locations\n\tcv::Mat_<double> landmark_locs_vis(n*2, 1, 0.0);\n\tint k = 0;\n\tfor(int i = 0; i < visi_ind_2D.rows; ++i)\n\t{\n\t\tif(visi_ind_2D.at<int>(i) == 1)\n\t\t{\n\t\t\tlandmark_locs_vis.at<double>(k) = landmark_locations.at<double>(i);\n\t\t\tk++;\n\t\t}\t\t\n\t}\n\n\t// Compute the initial global parameters\n\tdouble min_x;\n\tdouble max_x;\n\tcv::minMaxLoc(landmark_locations(cv::Rect(0, 0, 1, this->NumberOfPoints())), &min_x, &max_x);\n\n\tdouble min_y;\n\tdouble max_y;\n\tcv::minMaxLoc(landmark_locations(cv::Rect(0, this->NumberOfPoints(), 1, this->NumberOfPoints())), &min_y, &max_y);\n\n\tdouble width = std::abs(min_x - max_x);\n    double height = std::abs(min_y - max_y);\n\n\tcv::Rect model_bbox;\n\tCalcBoundingBox(model_bbox, cv::Vec6d(1.0, 0.0, 0.0, 0.0, 0.0, 0.0), cv::Mat_<double>(this->NumberOfModes(), 1, 0.0));\n\n\tcv::Rect bbox((int)min_x, (int)min_y, (int)width, (int)height);\n\n\tdouble scaling = ((width / model_bbox.width) + (height / model_bbox.height)) / 2;\n        \n\tcv::Vec3d rotation_init = rotation;\n\tcv::Matx33d R = Euler2RotationMatrix(rotation_init);\n\tcv::Vec2d translation((min_x + max_x) / 2.0, (min_y + max_y) / 2.0);\n    \n\tcv::Mat_<float> loc_params(this->NumberOfModes(),1, 0.0);\n\tcv::Vec6d glob_params(scaling, rotation_init[0], rotation_init[1], rotation_init[2], translation[0], translation[1]);\n\n\t// get the 3D shape of the object\n\tcv::Mat_<double> loc_params_d;\n\tloc_params.convertTo(loc_params_d, CV_64F);\n\tcv::Mat_<double> shape_3D = M + V * loc_params_d;\n\n\tcv::Mat_<double> curr_shape(2*n, 1);\n\t\n\t// for every vertex\n\tfor(int i = 0; i < n; i++)\n\t{\n\t\t// Transform this using the weak-perspective mapping to 2D from 3D\n\t\tcurr_shape.at<double>(i  ,0) = scaling * ( R(0,0) * shape_3D.at<double>(i, 0) + R(0,1) * shape_3D.at<double>(i+n  ,0) + R(0,2) * shape_3D.at<double>(i+n*2,0) ) + translation[0];\n\t\tcurr_shape.at<double>(i+n,0) = scaling * ( R(1,0) * shape_3D.at<double>(i, 0) + R(1,1) * shape_3D.at<double>(i+n  ,0) + R(1,2) * shape_3D.at<double>(i+n*2,0) ) + translation[1];\n\t}\n\t\t    \n    double currError = cv::norm(curr_shape - landmark_locs_vis);\n\n\tcv::Mat_<float> regularisations = cv::Mat_<double>::zeros(1, 6 + m);\n\n\tdouble reg_factor = 1;\n\n\t// Setting the regularisation to the inverse of eigenvalues\n\tcv::Mat(reg_factor / this->eigen_values).copyTo(regularisations(cv::Rect(6, 0, m, 1)));\n\tcv::Mat_<double> regTerm_d = cv::Mat::diag(regularisations.t());\n\tregTerm_d.convertTo(regularisations, CV_32F);    \n    \n\tcv::Mat_<float> WeightMatrix = cv::Mat_<float>::eye(n*2, n*2);\n\n\tint not_improved_in = 0;\n\n    for (size_t i = 0; i < 1000; ++i)\n\t{\n\t\t// get the 3D shape of the object\n\t\tcv::Mat_<double> loc_params_d;\n\t\tloc_params.convertTo(loc_params_d, CV_64F);\n\t\tshape_3D = M + V * loc_params_d;\n\n\t\tshape_3D = shape_3D.reshape(1, 3);\n\n\t\tcv::Matx23d R_2D(R(0,0), R(0,1), R(0,2), R(1,0), R(1,1), R(1,2));\n\n\t\tcv::Mat_<double> curr_shape_2D = scaling * shape_3D.t() * cv::Mat(R_2D).t();\n        curr_shape_2D.col(0) = curr_shape_2D.col(0) + translation(0);\n\t\tcurr_shape_2D.col(1) = curr_shape_2D.col(1) + translation(1);\n\n\t\tcurr_shape_2D = cv::Mat(curr_shape_2D.t()).reshape(1, n * 2);\n\t\t\n\t\tcv::Mat_<float> error_resid;\n\t\tcv::Mat(landmark_locs_vis - curr_shape_2D).convertTo(error_resid, CV_32F);\n        \n\t\tcv::Mat_<float> J, J_w_t;\n\t\tthis->ComputeJacobian(loc_params, glob_params, J, WeightMatrix, J_w_t);\n        \n\t\t// projection of the meanshifts onto the jacobians (using the weighted Jacobian, see Baltrusaitis 2013)\n\t\tcv::Mat_<float> J_w_t_m = J_w_t * error_resid;\n\n\t\t// Add the regularisation term\n\t\tJ_w_t_m(cv::Rect(0,6,1, m)) = J_w_t_m(cv::Rect(0,6,1, m)) - regularisations(cv::Rect(6,6, m, m)) * loc_params;\n\n\t\tcv::Mat_<float> Hessian = J_w_t * J;\n\n\t\t// Add the Tikhonov regularisation\n\t\tHessian = Hessian + regularisations;\n\n\t\t// Solve for the parameter update (from Baltrusaitis 2013 based on eq (36) Saragih 2011)\n\t\tcv::Mat_<float> param_update;\n\t\tcv::solve(Hessian, J_w_t_m, param_update, CV_CHOLESKY);\n\n\t\t// To not overshoot, have the gradient decent rate a bit smaller\n\t\tparam_update = 0.5 * param_update;\n\n\t\tUpdateModelParameters(param_update, loc_params, glob_params);\t\t\n        \n        scaling = glob_params[0];\n\t\trotation_init[0] = glob_params[1];\n\t\trotation_init[1] = glob_params[2];\n\t\trotation_init[2] = glob_params[3];\n\n\t\ttranslation[0] = glob_params[4];\n\t\ttranslation[1] = glob_params[5];\n        \n\t\tR = Euler2RotationMatrix(rotation_init);\n\n\t\tR_2D(0,0) = R(0,0);R_2D(0,1) = R(0,1); R_2D(0,2) = R(0,2);\n\t\tR_2D(1,0) = R(1,0);R_2D(1,1) = R(1,1); R_2D(1,2) = R(1,2); \n\n\t\tcurr_shape_2D = scaling * shape_3D.t() * cv::Mat(R_2D).t();\n        curr_shape_2D.col(0) = curr_shape_2D.col(0) + translation(0);\n\t\tcurr_shape_2D.col(1) = curr_shape_2D.col(1) + translation(1);\n\n\t\tcurr_shape_2D = cv::Mat(curr_shape_2D.t()).reshape(1, n * 2);\n        \n        double error = cv::norm(curr_shape_2D - landmark_locs_vis);\n        \n        if(0.999 * currError < error)\n\t\t{\n\t\t\tnot_improved_in++;\n\t\t\tif (not_improved_in == 5)\n\t\t\t{\n\t            break;\n\t\t\t}\n\t\t}\n\n\t\tcurrError = error;\n        \n\t}\n\n\tout_params_global = glob_params;\n\tloc_params.convertTo(out_params_local, CV_64F);\n    \t\n\tthis->mean_shape = m_old;\n\tthis->princ_comp = v_old;\n\n\n}\n\nvoid PDM::Read(std::string location)\n{\n  \t\n    std::ifstream pdmLoc(location, std::ios_base::in);\n\n\tLandmarkDetector::SkipComments(pdmLoc);\n\n\t// Reading mean values\n\tLandmarkDetector::ReadMat(pdmLoc,mean_shape);\n\t\n\tLandmarkDetector::SkipComments(pdmLoc);\n\n\t// Reading principal components\n\tLandmarkDetector::ReadMat(pdmLoc,princ_comp);\n\t\n\tLandmarkDetector::SkipComments(pdmLoc);\n\t\n\t// Reading eigenvalues\t\n\tLandmarkDetector::ReadMat(pdmLoc,eigen_values);\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/Patch_experts.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"Patch_experts.h\"\n\n// OpenCV includes\n#include <opencv2/core/core_c.h>\n#include <opencv2/imgproc/imgproc_c.h>\n\n// TBB includes\n//#include <tbb/tbb.h>\n\n// Math includes\n#define _USE_MATH_DEFINES\n#include <cmath>\n\n#ifndef M_PI\n\t#define M_PI 3.14159265358979323846\n#endif\n\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n// A copy constructor\nPatch_experts::Patch_experts(const Patch_experts& other) : patch_scaling(other.patch_scaling), centers(other.centers), svr_expert_intensity(other.svr_expert_intensity), svr_expert_depth(other.svr_expert_depth), ccnf_expert_intensity(other.ccnf_expert_intensity)\n{\n\n\t// Make sure the matrices are allocated properly\n\tthis->sigma_components.resize(other.sigma_components.size());\n\tfor (size_t i = 0; i < other.sigma_components.size(); ++i)\n\t{\n\t\tthis->sigma_components[i].resize(other.sigma_components[i].size());\n\n\t\tfor (size_t j = 0; j < other.sigma_components[i].size(); ++j)\n\t\t{\n\t\t\t// Make sure the matrix is copied.\n\t\t\tthis->sigma_components[i][j] = other.sigma_components[i][j].clone();\n\t\t}\n\t}\n\n\t// Make sure the matrices are allocated properly\n\tthis->visibilities.resize(other.visibilities.size());\n\tfor (size_t i = 0; i < other.visibilities.size(); ++i)\n\t{\n\t\tthis->visibilities[i].resize(other.visibilities[i].size());\n\n\t\tfor (size_t j = 0; j < other.visibilities[i].size(); ++j)\n\t\t{\n\t\t\t// Make sure the matrix is copied.\n\t\t\tthis->visibilities[i][j] = other.visibilities[i][j].clone();\n\t\t}\n\t}\n}\n\n// Returns the patch expert responses given a grayscale and an optional depth image.\n// Additionally returns the transform from the image coordinates to the response coordinates (and vice versa).\n// The computation also requires the current landmark locations to compute response around, the PDM corresponding to the desired model, and the parameters describing its instance\n// Also need to provide the size of the area of interest and the desired scale of analysis\nvoid Patch_experts::Response(std::vector<cv::Mat_<float> >& patch_expert_responses, cv::Matx22f& sim_ref_to_img, cv::Matx22d& sim_img_to_ref, const cv::Mat_<uchar>& grayscale_image, const cv::Mat_<float>& depth_image,\n\t\t\t\t\t\t\t const PDM& pdm, const cv::Vec6d& params_global, const cv::Mat_<double>& params_local, int window_size, int scale)\n{\n\n\tint view_id = GetViewIdx(params_global, scale);\t\t\n\n\tint n = pdm.NumberOfPoints();\n\t\t\n\t// Compute the current landmark locations (around which responses will be computed)\n\tcv::Mat_<double> landmark_locations;\n\n\tpdm.CalcShape2D(landmark_locations, params_local, params_global);\n\n\tcv::Mat_<double> reference_shape;\n\t\t\n\t// Initialise the reference shape on which we'll be warping\n\tcv::Vec6d global_ref(patch_scaling[scale], 0, 0, 0, 0, 0);\n\n\t// Compute the reference shape\n\tpdm.CalcShape2D(reference_shape, params_local, global_ref);\n\t\t\n\t// similarity and inverse similarity transform to and from image and reference shape\n\tcv::Mat_<double> reference_shape_2D = (reference_shape.reshape(1, 2).t());\n\tcv::Mat_<double> image_shape_2D = landmark_locations.reshape(1, 2).t();\n\n\tsim_img_to_ref = AlignShapesWithScale(image_shape_2D, reference_shape_2D);\n\tcv::Matx22d sim_ref_to_img_d = sim_img_to_ref.inv(cv::DECOMP_LU);\n\n\tdouble a1 = sim_ref_to_img_d(0,0);\n\tdouble b1 = -sim_ref_to_img_d(0,1);\n\t\t\n\tsim_ref_to_img(0,0) = (float)sim_ref_to_img_d(0,0);\n\tsim_ref_to_img(0,1) = (float)sim_ref_to_img_d(0,1);\n\tsim_ref_to_img(1,0) = (float)sim_ref_to_img_d(1,0);\n\tsim_ref_to_img(1,1) = (float)sim_ref_to_img_d(1,1);\n\n\t// Indicates the legal pixels in a depth image, if available (used for CLM-Z area of interest (window) interpolation)\n\tcv::Mat_<uchar> mask;\n\tif(!depth_image.empty())\n\t{\n\t\tmask = depth_image > 0;\t\t\t\n\t\tmask = mask / 255;\n\t}\t\t\n\t\n\n\tbool use_ccnf = !this->ccnf_expert_intensity.empty();\n\n\t// If using CCNF patch experts might need to precalculate Sigmas\n\tif(use_ccnf)\n\t{\n        std::vector<cv::Mat_<float> > sigma_components;\n\n\t\t// Retrieve the correct sigma component size\n\t\tfor( size_t w_size = 0; w_size < this->sigma_components.size(); ++w_size)\n\t\t{\n\t\t\tif(!this->sigma_components[w_size].empty())\n\t\t\t{\n\t\t\t\tif(window_size*window_size == this->sigma_components[w_size][0].rows)\n\t\t\t\t{\n\t\t\t\t\tsigma_components = this->sigma_components[w_size];\n\t\t\t\t}\n\t\t\t}\n\t\t}\t\t\t\n\n\t\t// Go through all of the landmarks and compute the Sigma for each\n\t\tfor( int lmark = 0; lmark < n; lmark++)\n\t\t{\n\t\t\t// Only for visible landmarks\n\t\t\tif(visibilities[scale][view_id].at<int>(lmark,0))\n\t\t\t{\n\t\t\t\t// Precompute sigmas if they are not computed yet\n\t\t\t\tccnf_expert_intensity[scale][view_id][lmark].ComputeSigmas(sigma_components, window_size);\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// calculate the patch responses for every landmark, Actual work happens here. If openMP is turned on it is possible to do this in parallel,\n\t// this might work well on some machines, while potentially have an adverse effect on others\n//#ifdef _OPENMP\n//#pragma omp parallel for\n//#endif\n//\ttbb::parallel_for(0, (int)n, [&](int i){\n    for(int i = 0; i < n; i++)\n\t{\n\t\t\t\n\t\tif(visibilities[scale][view_id].rows == n)\n\t\t{\n\t\t\tif(visibilities[scale][view_id].at<int>(i,0) != 0)\n\t\t\t{\n\n\t\t\t\t// Work out how big the area of interest has to be to get a response of window size\n\t\t\t\tint area_of_interest_width;\n\t\t\t\tint area_of_interest_height;\n\n\t\t\t\tif(use_ccnf)\n\t\t\t\t{\n\t\t\t\t\tarea_of_interest_width = window_size + ccnf_expert_intensity[scale][view_id][i].width - 1; \n\t\t\t\t\tarea_of_interest_height = window_size + ccnf_expert_intensity[scale][view_id][i].height - 1;\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tarea_of_interest_width = window_size + svr_expert_intensity[scale][view_id][i].width - 1; \n\t\t\t\t\tarea_of_interest_height = window_size + svr_expert_intensity[scale][view_id][i].height - 1;\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// scale and rotate to mean shape to reference frame\n\t\t\t\tcv::Mat sim = (cv::Mat_<float>(2,3) << a1, -b1, landmark_locations.at<double>(i,0), b1, a1, landmark_locations.at<double>(i+n,0));\n\n\t\t\t\t// Extract the region of interest around the current landmark location\n\t\t\t\tcv::Mat_<float> area_of_interest(area_of_interest_height, area_of_interest_width);\n\n\t\t\t\t// Using C style openCV as it does what we need\n\t\t\t\tCvMat area_of_interest_o = area_of_interest;\n\t\t\t\tCvMat sim_o = sim;\n\t\t\t\tIplImage im_o = grayscale_image;\t\t\t\n\t\t\t\tcvGetQuadrangleSubPix(&im_o, &area_of_interest_o, &sim_o);\n\t\t\t\n\t\t\t\t// get the correct size response window\t\t\t\n\t\t\t\tpatch_expert_responses[i] = cv::Mat_<float>(window_size, window_size);\n\n\t\t\t\t// Get intensity response either from the SVR or CCNF patch experts (prefer CCNF)\n\t\t\t\tif(!ccnf_expert_intensity.empty())\n\t\t\t\t{\t\t\t\t\n\n\t\t\t\t\tccnf_expert_intensity[scale][view_id][i].Response(area_of_interest, patch_expert_responses[i]);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tsvr_expert_intensity[scale][view_id][i].Response(area_of_interest, patch_expert_responses[i]);\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// if we have a corresponding depth patch and it is visible\t\t\n\t\t\t\tif(!svr_expert_depth.empty() && !depth_image.empty() && visibilities[scale][view_id].at<int>(i,0))\n\t\t\t\t{\n\n\t\t\t\t\tcv::Mat_<float> dProb = patch_expert_responses[i].clone();\n\t\t\t\t\tcv::Mat_<float> depthWindow(area_of_interest_height, area_of_interest_width);\n\t\t\t\n\n\t\t\t\t\tCvMat dimg_o = depthWindow;\n\t\t\t\t\tcv::Mat maskWindow(area_of_interest_height, area_of_interest_width, CV_32F);\n\t\t\t\t\tCvMat mimg_o = maskWindow;\n\n\t\t\t\t\tIplImage d_o = depth_image;\n\t\t\t\t\tIplImage m_o = mask;\n\n\t\t\t\t\tcvGetQuadrangleSubPix(&d_o,&dimg_o,&sim_o);\n\t\t\t\t\n\t\t\t\t\tcvGetQuadrangleSubPix(&m_o,&mimg_o,&sim_o);\n\n\t\t\t\t\tdepthWindow.setTo(0, maskWindow < 1);\n\n\t\t\t\t\tsvr_expert_depth[scale][view_id][i].ResponseDepth(depthWindow, dProb);\n\t\t\t\t\t\t\t\n\t\t\t\t\t// Sum to one\n\t\t\t\t\tdouble sum = cv::sum(patch_expert_responses[i])[0];\n\n\t\t\t\t\t// To avoid division by 0 issues\n\t\t\t\t\tif(sum == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tsum = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tpatch_expert_responses[i] /= sum;\n\n\t\t\t\t\t// Sum to one\n\t\t\t\t\tsum = cv::sum(dProb)[0];\n\t\t\t\t\t// To avoid division by 0 issues\n\t\t\t\t\tif(sum == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tsum = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tdProb /= sum;\n\n\t\t\t\t\tpatch_expert_responses[i] = patch_expert_responses[i] + dProb;\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n//\t});\n\n}\n\n//=============================================================================\n// Getting the closest view center based on orientation\nint Patch_experts::GetViewIdx(const cv::Vec6d& params_global, int scale) const\n{\t\n\tint idx = 0;\n\t\n\tdouble dbest;\n\n\tfor(int i = 0; i < this->nViews(scale); i++)\n\t{\n\t\tdouble v1 = params_global[1] - centers[scale][i][0]; \n\t\tdouble v2 = params_global[2] - centers[scale][i][1];\n\t\tdouble v3 = params_global[3] - centers[scale][i][2];\n\t\t\t\n\t\tdouble d = v1*v1 + v2*v2 + v3*v3;\n\n\t\tif(i == 0 || d < dbest)\n\t\t{\n\t\t\tdbest = d;\n\t\t\tidx = i;\n\t\t}\n\t}\n\treturn idx;\n}\n\n\n//===========================================================================\nvoid Patch_experts::Read(std::vector<std::string> intensity_svr_expert_locations, std::vector<std::string> depth_svr_expert_locations, std::vector<std::string> intensity_ccnf_expert_locations)\n{\n\n\t// initialise the SVR intensity patch expert parameters\n\tint num_intensity_svr = intensity_svr_expert_locations.size();\n\tcenters.resize(num_intensity_svr);\n\tvisibilities.resize(num_intensity_svr);\n\tpatch_scaling.resize(num_intensity_svr);\n\t\n\tsvr_expert_intensity.resize(num_intensity_svr);\n\t\n\t// Reading in SVR intensity patch experts for each scales it is defined in\n\tfor(int scale = 0; scale < num_intensity_svr; ++scale)\n\t{\t\t\n        std::string location = intensity_svr_expert_locations[scale];\n        std::cout << \"Reading the intensity SVR patch experts from: \" << location << \"....\";\n\t\tRead_SVR_patch_experts(location,  centers[scale], visibilities[scale], svr_expert_intensity[scale], patch_scaling[scale]);\n\t}\n\n\t// Initialise and read CCNF patch experts (currently only intensity based), \n\tint num_intensity_ccnf = intensity_ccnf_expert_locations.size();\n\n\t// CCNF experts override the SVR ones\n\tif(num_intensity_ccnf > 0)\n\t{\n\t\tcenters.resize(num_intensity_ccnf);\n\t\tvisibilities.resize(num_intensity_ccnf);\n\t\tpatch_scaling.resize(num_intensity_ccnf);\n\t\tccnf_expert_intensity.resize(num_intensity_ccnf);\n\t}\n\n\tfor(int scale = 0; scale < num_intensity_ccnf; ++scale)\n\t{\t\t\n        std::string location = intensity_ccnf_expert_locations[scale];\n        std::cout << \"Reading the intensity CCNF patch experts from: \" << location << \"....\";\n\t\tRead_CCNF_patch_experts(location,  centers[scale], visibilities[scale], ccnf_expert_intensity[scale], patch_scaling[scale]);\n\t}\n\n\n\t// initialise the SVR depth patch expert parameters\n\tint num_depth_scales = depth_svr_expert_locations.size();\n\tint num_intensity_scales = centers.size();\n\t\n\tif(num_depth_scales > 0 && num_intensity_scales != num_depth_scales)\n\t{\n        std::cout << \"Intensity and depth patch experts have a different number of scales, can't read depth\" << std::endl;\n\t\treturn;\n\t}\n\n\t// Have these to confirm that depth patch experts have the same number of views and scales and have the same visibilities\n    std::vector<std::vector<cv::Vec3d> > centers_depth(num_depth_scales);\n    std::vector<std::vector<cv::Mat_<int> > > visibilities_depth(num_depth_scales);\n    std::vector<double> patch_scaling_depth(num_depth_scales);\n\t\n\tsvr_expert_depth.resize(num_depth_scales);\t\n\n\t// Reading in SVR intensity patch experts for each scales it is defined in\n\tfor(int scale = 0; scale < num_depth_scales; ++scale)\n\t{\t\t\n        std::string location = depth_svr_expert_locations[scale];\n        std::cout << \"Reading the depth SVR patch experts from: \" << location << \"....\";\n\t\tRead_SVR_patch_experts(location,  centers_depth[scale], visibilities_depth[scale], svr_expert_depth[scale], patch_scaling_depth[scale]);\n\n\t\t// Check if the scales are identical\n\t\tif(patch_scaling_depth[scale] != patch_scaling[scale])\n\t\t{\n            std::cout << \"Intensity and depth patch experts have a different scales, can't read depth\" << std::endl;\n\t\t\tsvr_expert_depth.clear();\n\t\t\treturn;\t\t\t\n\t\t}\n\n\t\tint num_views_intensity = centers[scale].size();\n\t\tint num_views_depth = centers_depth[scale].size();\n\n\t\t// Check if the number of views is identical\n\t\tif(num_views_intensity != num_views_depth)\n\t\t{\n            std::cout << \"Intensity and depth patch experts have a different number of scales, can't read depth\" << std::endl;\n\t\t\tsvr_expert_depth.clear();\n\t\t\treturn;\t\t\t\n\t\t}\n\n\t\tfor(int view = 0; view < num_views_depth; ++view)\n\t\t{\n\t\t\tif(cv::countNonZero(centers_depth[scale][view] != centers[scale][view]) || cv::countNonZero(visibilities[scale][view] != visibilities_depth[scale][view]))\n\t\t\t{\n                std::cout << \"Intensity and depth patch experts have different visibilities or centers\" << std::endl;\n\t\t\t\tsvr_expert_depth.clear();\n\t\t\t\treturn;\t\t\n\t\t\t}\n\t\t}\n\t}\n\n}\n//======================= Reading the SVR patch experts =========================================//\nvoid Patch_experts::Read_SVR_patch_experts(std::string expert_location, std::vector<cv::Vec3d>& centers, std::vector<cv::Mat_<int> >& visibility, std::vector<std::vector<Multi_SVR_patch_expert> >& patches, double& scale)\n{\n\n    std::ifstream patchesFile(expert_location.c_str(), std::ios_base::in);\n\n\tif(patchesFile.is_open())\n\t{\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\tpatchesFile >> scale;\n\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\tint numberViews;\t\t\n\n\t\tpatchesFile >> numberViews; \n\n\t\t// read the visibility\n\t\tcenters.resize(numberViews);\n\t\tvisibility.resize(numberViews);\n  \n\t\tpatches.resize(numberViews);\n\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\t// centers of each view (which view corresponds to which orientation)\n\t\tfor(size_t i = 0; i < centers.size(); i++)\n\t\t{\n\t\t\tcv::Mat center;\n\t\t\tLandmarkDetector::ReadMat(patchesFile, center);\t\n\t\t\tcenter.copyTo(centers[i]);\n\t\t\tcenters[i] = centers[i] * M_PI / 180.0;\n\t\t}\n\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\t// the visibility of points for each of the views (which verts are visible at a specific view\n\t\tfor(size_t i = 0; i < visibility.size(); i++)\n\t\t{\n\t\t\tLandmarkDetector::ReadMat(patchesFile, visibility[i]);\t\t\t\t\n\t\t}\n\n\t\tint numberOfPoints = visibility[0].rows;\n\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\t// read the patches themselves\n\t\tfor(size_t i = 0; i < patches.size(); i++)\n\t\t{\n\t\t\t// number of patches for each view\n\t\t\tpatches[i].resize(numberOfPoints);\n\t\t\t// read in each patch\n\t\t\tfor(int j = 0; j < numberOfPoints; j++)\n\t\t\t{\n\t\t\t\tpatches[i][j].Read(patchesFile);\n\t\t\t}\n\t\t}\n\t\n        std::cout << \"Done\" << std::endl;\n\t}\n\telse\n\t{\n        std::cout << \"Can't find/open the patches file\" << std::endl;\n\t}\n}\n\n//======================= Reading the CCNF patch experts =========================================//\nvoid Patch_experts::Read_CCNF_patch_experts(std::string patchesFileLocation, std::vector<cv::Vec3d>& centers, std::vector<cv::Mat_<int> >& visibility, std::vector<std::vector<CCNF_patch_expert> >& patches, double& patchScaling)\n{\n\n    std::ifstream patchesFile(patchesFileLocation.c_str(), std::ios::in | std::ios::binary);\n\n\tif(patchesFile.is_open())\n\t{\n\t\tpatchesFile.read ((char*)&patchScaling, 8);\n\t\t\n\t\tint numberViews;\t\t\n\t\tpatchesFile.read ((char*)&numberViews, 4);\n\n\t\t// read the visibility\n\t\tcenters.resize(numberViews);\n\t\tvisibility.resize(numberViews);\n  \n\t\tpatches.resize(numberViews);\n\t\t\n\t\t// centers of each view (which view corresponds to which orientation)\n\t\tfor(size_t i = 0; i < centers.size(); i++)\n\t\t{\n\t\t\tcv::Mat center;\n\t\t\tLandmarkDetector::ReadMatBin(patchesFile, center);\t\n\t\t\tcenter.copyTo(centers[i]);\n\t\t\tcenters[i] = centers[i] * M_PI / 180.0;\n\t\t}\n\n\t\t// the visibility of points for each of the views (which verts are visible at a specific view\n\t\tfor(size_t i = 0; i < visibility.size(); i++)\n\t\t{\n\t\t\tLandmarkDetector::ReadMatBin(patchesFile, visibility[i]);\t\t\t\t\n\t\t}\n\t\tint numberOfPoints = visibility[0].rows;\n\n\t\t// Read the possible SigmaInvs (without beta), this will be followed by patch reading (this assumes all of them have the same type, and number of betas)\n\t\tint num_win_sizes;\n\t\tint num_sigma_comp;\n\t\tpatchesFile.read ((char*)&num_win_sizes, 4);\n\n        std::vector<int> windows;\n\t\twindows.resize(num_win_sizes);\n\n        std::vector<std::vector<cv::Mat_<float> > > sigma_components;\n\t\tsigma_components.resize(num_win_sizes);\n\n\t\tfor (int w=0; w < num_win_sizes; ++w)\n\t\t{\n\t\t\tpatchesFile.read ((char*)&windows[w], 4);\n\n\t\t\tpatchesFile.read ((char*)&num_sigma_comp, 4);\n\n\t\t\tsigma_components[w].resize(num_sigma_comp);\n\n\t\t\tfor(int s=0; s < num_sigma_comp; ++s)\n\t\t\t{\n\t\t\t\tLandmarkDetector::ReadMatBin(patchesFile, sigma_components[w][s]);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis->sigma_components = sigma_components;\n\n\t\t// read the patches themselves\n\t\tfor(size_t i = 0; i < patches.size(); i++)\n\t\t{\n\t\t\t// number of patches for each view\n\t\t\tpatches[i].resize(numberOfPoints);\n\t\t\t// read in each patch\n\t\t\tfor(int j = 0; j < numberOfPoints; j++)\n\t\t\t{\n\t\t\t\tpatches[i][j].Read(patchesFile, windows, sigma_components);\n\t\t\t}\n\t\t}\n        std::cout << \"Done\" << std::endl;\n\t}\n\telse\n\t{\n        std::cout << \"Can't find/open the patches file\" << std::endl;\n\t}\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/SVR_patch_expert.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"SVR_patch_expert.h\"\n\n// OpenCV include\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n//===========================================================================\n// Computing the image gradient\nvoid Grad(const cv::Mat& im, cv::Mat& grad)\n{\n\t\n\t/*float filter[3] = {1, 0, -1};\n\tfloat dfilter[1] = {1};\t\n\tcv::Mat filterX = cv::Mat(1,3,CV_32F, filter).clone();\n\tcv::Mat filterY = cv::Mat(1,1,CV_32F, dfilter).clone();\n\t\t\t\n\tcv::Mat gradX;\n\tcv::Mat gradY;\n\tcv::sepFilter2D(im, gradX, CV_32F, filterY, filterX, cv::Point(-1,-1), 0);\n\tcv::sepFilter2D(im, gradY, CV_32F, filterX.t(), filterY, cv::Point(-1,-1), 0);\n\tcv::pow(gradX,2, gradX);\n\tcv::pow(gradY,2, gradY);\n\tgrad = gradX + gradY;\n\t\t\t\n\tgrad.row(0).setTo(0);\n\tgrad.col(0).setTo(0);\n\tgrad.col(grad.cols-1).setTo(0);\n\tgrad.row(grad.rows-1).setTo(0);\t\t*/\n\n\t// A quicker alternative\n\tint x,y,h = im.rows,w = im.cols;\n\tfloat vx,vy;\n\n\t// Initialise the gradient\n\tgrad.create(im.size(), CV_32F);\n\tgrad.setTo(0.0f);\n\n\tcv::MatIterator_<float> gp  = grad.begin<float>() + w+1;\n\tcv::MatConstIterator_<float> px1 = im.begin<float>()   + w+2;\n\tcv::MatConstIterator_<float> px2 = im.begin<float>()   + w;\n\tcv::MatConstIterator_<float> py1 = im.begin<float>()   + 2*w+1;\n\tcv::MatConstIterator_<float> py2 = im.begin<float>()   + 1;\n\n\tfor(y = 1; y < h-1; y++)\n\t{ \n\t\tfor(x = 1; x < w-1; x++)\n\t\t{\n\t\t\tvx = *px1++ - *px2++;\n\t\t\tvy = *py1++ - *py2++;\n\t\t\t*gp++ = vx*vx + vy*vy;\n\t\t}\n\t\tpx1 += 2;\n\t\tpx2 += 2;\n\t\tpy1 += 2;\n\t\tpy2 += 2;\n\t\tgp += 2;\n\t}\n\n}\n\n// A copy constructor\nSVR_patch_expert::SVR_patch_expert(const SVR_patch_expert& other) : weights(other.weights.clone())\n{\n\tthis->type = other.type;\n\tthis->scaling = other.scaling;\n\tthis->bias = other.bias;\n\tthis->confidence = other.confidence;\n\n\tfor (std::map<int, cv::Mat_<double> >::const_iterator it = other.weights_dfts.begin(); it != other.weights_dfts.end(); it++)\n\t{\n\t\t// Make sure the matrix is copied.\n\t\tthis->weights_dfts.insert(std::pair<int, cv::Mat>(it->first, it->second.clone()));\n\t}\n}\n\n//===========================================================================\nvoid SVR_patch_expert::Read(std::ifstream &stream)\n{\n\n\t// A sanity check when reading patch experts\n\tint read_type;\n\tstream >> read_type;\n\tassert(read_type == 2);\n  \n\tstream >> type >> confidence >> scaling >> bias;\n\tLandmarkDetector::ReadMat(stream, weights); \n\t\n\t// OpenCV and Matlab matrix cardinality is different, hence the transpose\n\tweights = weights.t();\n\n}\n\n//===========================================================================\nvoid SVR_patch_expert::Response(const cv::Mat_<float>& area_of_interest, cv::Mat_<float>& response)\n{\n\n\tint response_height = area_of_interest.rows - weights.rows + 1;\n\tint response_width = area_of_interest.cols - weights.cols + 1;\n\t\n\t// the patch area on which we will calculate reponses\n\tcv::Mat_<float> normalised_area_of_interest;\n  \n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\n\t// If type is raw just normalise mean and standard deviation\n\tif(type == 0)\n\t{\n\t\t// Perform normalisation across whole patch\n\t\tcv::Scalar mean;\n\t\tcv::Scalar std;\n\n\t\tcv::meanStdDev(area_of_interest, mean, std);\n\t\t// Avoid division by zero\n\t\tif(std[0] == 0)\n\t\t{\n\t\t\tstd[0] = 1;\n\t\t}\n\t\tnormalised_area_of_interest = (area_of_interest - mean[0]) / std[0];\n\t}\n\t// If type is gradient, perform the image gradient computation\n\telse if(type == 1)\n\t{\n\t\tGrad(area_of_interest, normalised_area_of_interest);\n\t}\n  \telse\n\t{\n\t\tprintf(\"ERROR(%s,%d): Unsupported patch type %d!\\n\", __FILE__,__LINE__, type);\n\t\tabort();\n\t}\n\t\n\tcv::Mat_<float> svr_response;\n\n\t// The empty matrix as we don't pass precomputed dft's of image\n\tcv::Mat_<double> empty_matrix_0(0,0,0.0);\n\tcv::Mat_<float> empty_matrix_1(0,0,0.0);\n\tcv::Mat_<float> empty_matrix_2(0,0,0.0);\n\n\t// Efficient calc of patch expert SVR response across the area of interest\n\tmatchTemplate_m(normalised_area_of_interest, empty_matrix_0, empty_matrix_1, empty_matrix_2, weights, weights_dfts, svr_response, CV_TM_CCOEFF_NORMED); \n\t\n\tresponse.create(svr_response.size());\n\tcv::MatIterator_<float> p = response.begin();\n\n\tcv::MatIterator_<float> q1 = svr_response.begin(); // respone for each pixel\n\tcv::MatIterator_<float> q2 = svr_response.end();\n\n\twhile(q1 != q2)\n\t{\n\t\t// the SVR response passed into logistic regressor\n\t\t*p++ = 1.0/(1.0 + exp( -(*q1++ * scaling + bias )));\n\t}\n\n}\n\nvoid SVR_patch_expert::ResponseDepth(const cv::Mat_<float>& area_of_interest, cv::Mat_<float> &response)\n{\n\n\t// How big the response map will be\n\tint response_height = area_of_interest.rows - weights.rows + 1;\n\tint response_width = area_of_interest.cols - weights.cols + 1;\n\t\n\t// the patch area on which we will calculate reponses\n\tcv::Mat_<float> normalised_area_of_interest;\n  \n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\n\tif(type == 0)\n\t{\n\t\t// Perform normalisation across whole patch\n\t\tcv::Scalar mean;\n\t\tcv::Scalar std;\n\t\t\n\t\t// ignore missing values\n\t\tcv::Mat_<uchar> mask = area_of_interest > 0;\n\t\tcv::meanStdDev(area_of_interest, mean, std, mask);\n\n\t\t// if all values the same don't divide by 0\n\t\tif(std[0] == 0)\n\t\t{\n\t\t\tstd[0] = 1;\n\t\t}\n\n\t\tnormalised_area_of_interest = (area_of_interest - mean[0]) / std[0];\n\n\t\t// Set the invalid pixels to 0\n\t\tnormalised_area_of_interest.setTo(0, mask == 0);\n\t}\n\telse\n\t{\n\t\tprintf(\"ERROR(%s,%d): Unsupported patch type %d!\\n\", __FILE__,__LINE__,type);\n\t\tabort();\n\t}\n  \n\tcv::Mat_<float> svr_response;\n\t\t\n\t// The empty matrix as we don't pass precomputed dft's of image\n\tcv::Mat_<double> empty_matrix_0(0,0,0.0);\n\tcv::Mat_<float> empty_matrix_1(0,0,0.0);\n\tcv::Mat_<float> empty_matrix_2(0,0,0.0);\n\n\t// Efficient calc of patch expert response across the area of interest\n\n\tmatchTemplate_m(normalised_area_of_interest, empty_matrix_0, empty_matrix_1, empty_matrix_2, weights, weights_dfts, svr_response, CV_TM_CCOEFF); \n\t\n\tresponse.create(svr_response.size());\n\tcv::MatIterator_<float> p = response.begin();\n\n\tcv::MatIterator_<float> q1 = svr_response.begin(); // respone for each pixel\n\tcv::MatIterator_<float> q2 = svr_response.end();\n\n\twhile(q1 != q2)\n\t{\n\t\t// the SVR response passed through a logistic regressor\n\t\t*p++ = 1.0/(1.0 + exp( -(*q1++ * scaling + bias )));\n\t}\t\n}\n\n// Copy constructor\t\t\t\t\nMulti_SVR_patch_expert::Multi_SVR_patch_expert(const Multi_SVR_patch_expert& other) : svr_patch_experts(other.svr_patch_experts)\n{\n\tthis->width = other.width;\n\tthis->height = other.height;\n}\n\n//===========================================================================\nvoid Multi_SVR_patch_expert::Read(std::ifstream &stream)\n{\n\t// A sanity check when reading patch experts\n\tint type;\n\tstream >> type;\n\tassert(type == 3);\n\n\t// The number of patch experts for this view (with different modalities)\n\tint number_modalities;\n\n\tstream >> width >> height >> number_modalities;\n\t\n\tsvr_patch_experts.resize(number_modalities);\n\tfor(int i = 0; i < number_modalities; i++)\n\t\tsvr_patch_experts[i].Read(stream);\n\n}\n//===========================================================================\nvoid Multi_SVR_patch_expert::Response(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response)\n{\n\t\n\tint response_height = area_of_interest.rows - height + 1;\n\tint response_width = area_of_interest.cols - width + 1;\n\n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\n\t// For the purposes of the experiment only use the response of normal intensity, for fair comparison\n\n\tif(svr_patch_experts.size() == 1)\n\t{\n\t\tsvr_patch_experts[0].Response(area_of_interest, response);\t\t\n\t}\n\telse\n\t{\n\t\t// responses from multiple patch experts these can be gradients, LBPs etc.\n\t\tresponse.setTo(1.0);\n\t\t\n\t\tcv::Mat_<float> modality_resp(response_height, response_width);\n\n\t\tfor(size_t i = 0; i < svr_patch_experts.size(); i++)\n\t\t{\t\t\t\n\t\t\tsvr_patch_experts[i].Response(area_of_interest, modality_resp);\t\t\t\n\t\t\tresponse = response.mul(modality_resp);\t\n\t\t}\t\n\t\t\n\t}\n\n}\n\nvoid Multi_SVR_patch_expert::ResponseDepth(const cv::Mat_<float>& area_of_interest, cv::Mat_<float>& response)\n{\n\tint response_height = area_of_interest.rows - height + 1;\n\tint response_width = area_of_interest.cols - width + 1;\n\n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\t\n\t// With depth patch experts only do raw data modality\n\tsvr_patch_experts[0].ResponseDepth(area_of_interest, response);\n}\n//===========================================================================\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/classifier/lab_boosted_classifier.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"classifier/lab_boosted_classifier.h\"\n\n#include <memory>\n#include <string>\n\nnamespace seeta {\nnamespace fd {\n\nvoid LABBaseClassifier::SetWeights(const float* weights, int32_t num_bin) {\n  weights_.resize(num_bin + 1);\n  num_bin_ = num_bin;\n  std::copy(weights, weights + num_bin_ + 1, weights_.begin());\n}\n\nbool LABBoostedClassifier::Classify(float* score, float* outputs) {\n  bool isPos = true;\n  float s = 0.0f;\n\n  for (size_t i = 0; isPos && i < base_classifiers_.size();) {\n    for (int32_t j = 0; j < kFeatGroupSize; j++, i++) {\n      uint8_t featVal = feat_map_->GetFeatureVal(feat_[i].x, feat_[i].y);\n      s += base_classifiers_[i]->weights(featVal);\n    }\n    if (s < base_classifiers_[i - 1]->threshold())\n      isPos = false;\n  }\n  isPos = isPos && ((!use_std_dev_) || feat_map_->GetStdDev() > kStdDevThresh);\n\n  if (score != nullptr)\n    *score = s;\n  if (outputs != nullptr)\n    *outputs = s;\n\n  return isPos;\n}\n\nvoid LABBoostedClassifier::AddFeature(int32_t x, int32_t y) {\n  LABFeature feat;\n  feat.x = x;\n  feat.y = y;\n  feat_.push_back(feat);\n}\n\nvoid LABBoostedClassifier::AddBaseClassifier(const float* weights,\n    int32_t num_bin, float thresh) {\n  std::shared_ptr<LABBaseClassifier> classifier(new LABBaseClassifier());\n  classifier->SetWeights(weights, num_bin);\n  classifier->SetThreshold(thresh);\n  base_classifiers_.push_back(classifier);\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/classifier/mlp.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"classifier/mlp.h\"\n\n#include \"common.h\"\n\nnamespace seeta {\nnamespace fd {\n\nvoid MLPLayer::Compute(const float* input, float* output) {\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t i = 0; i < output_dim_; i++) {\n      output[i] = seeta::fd::MathFunction::VectorInnerProduct(input,\n        weights_.data() + i * input_dim_, input_dim_) + bias_[i];\n      output[i] = (act_func_type_ == 1 ? ReLU(output[i]) : Sigmoid(-output[i]));\n    }\n  }\n}\n\nvoid MLP::Compute(const float* input, float* output) {\n  layer_buf_[0].resize(layers_[0]->GetOutputDim());\n  layers_[0]->Compute(input, layer_buf_[0].data());\n\n  size_t i; /**< layer index */\n  for (i = 1; i < layers_.size() - 1; i++) {\n    layer_buf_[i % 2].resize(layers_[i]->GetOutputDim());\n    layers_[i]->Compute(layer_buf_[(i + 1) % 2].data(), layer_buf_[i % 2].data());\n  }\n  layers_.back()->Compute(layer_buf_[(i + 1) % 2].data(), output);\n}\n\nvoid MLP::AddLayer(int32_t inputDim, int32_t outputDim, const float* weights,\n    const float* bias, bool is_output) {\n  if (layers_.size() > 0 && inputDim != layers_.back()->GetOutputDim())\n    return;  // @todo handle the errors!!!\n\n  std::shared_ptr<seeta::fd::MLPLayer> layer(new seeta::fd::MLPLayer(is_output ? 0 : 1));\n  layer->SetSize(inputDim, outputDim);\n  layer->SetWeights(weights, inputDim * outputDim);\n  layer->SetBias(bias, outputDim);\n  layers_.push_back(layer);\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/classifier/surf_mlp.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"classifier/surf_mlp.h\"\n\n#include <string>\n\nnamespace seeta {\nnamespace fd {\n\nbool SURFMLP::Classify(float* score, float* outputs) {\n  float* dest = input_buf_.data();\n  for (size_t i = 0; i < feat_id_.size(); i++) {\n    feat_map_->GetFeatureVector(feat_id_[i] - 1, dest);\n    dest += feat_map_->GetFeatureVectorDim(feat_id_[i]);\n  }\n  output_buf_.resize(model_->GetOutputDim());\n  model_->Compute(input_buf_.data(), output_buf_.data());\n\n  if (score != nullptr)\n    *score = output_buf_[0];\n  if (outputs != nullptr) {\n    std::memcpy(outputs, output_buf_.data(),\n      model_->GetOutputDim() * sizeof(float));\n  }\n\n  return (output_buf_[0] > thresh_);\n}\n\nvoid SURFMLP::AddFeatureByID(int32_t feat_id) {\n  feat_id_.push_back(feat_id);\n}\n\nvoid SURFMLP::AddLayer(int32_t input_dim, int32_t output_dim,\n    const float* weights, const float* bias, bool is_output) {\n  if (model_->GetLayerNum() == 0)\n    input_buf_.resize(input_dim);\n  model_->AddLayer(input_dim, output_dim, weights, bias, is_output);\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/face_detection.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"face_detection.h\"\n\n#include <memory>\n#include <vector>\n\n#include \"detector.h\"\n#include \"fust.h\"\n#include \"util/image_pyramid.h\"\n\nnamespace seeta {\n\nclass FaceDetection::Impl {\n public:\n  Impl()\n      : detector_(new seeta::fd::FuStDetector()),\n        slide_wnd_step_x_(4), slide_wnd_step_y_(4),\n        min_face_size_(20), max_face_size_(-1),\n        cls_thresh_(3.85f) {}\n\n  ~Impl() {}\n\n  inline bool IsLegalImage(const seeta::ImageData & image) {\n    return (image.num_channels == 1 && image.width > 0 && image.height > 0 &&\n      image.data != nullptr);\n  }\n\n public:\n  static const int32_t kWndSize = 40;\n\n  int32_t min_face_size_;\n  int32_t max_face_size_;\n  int32_t slide_wnd_step_x_;\n  int32_t slide_wnd_step_y_;\n  float cls_thresh_;\n\n  std::vector<seeta::FaceInfo> pos_wnds_;\n  std::unique_ptr<seeta::fd::Detector> detector_;\n  seeta::fd::ImagePyramid img_pyramid_;\n};\n\nFaceDetection::FaceDetection(const char* model_path)\n    : impl_(new seeta::FaceDetection::Impl()) {\n  bool ll = impl_->detector_->LoadModel(model_path);\n        ll = ll;\n}\n\nFaceDetection::~FaceDetection() {\n  if (impl_ != nullptr)\n    delete impl_;\n}\n\nstd::vector<seeta::FaceInfo> FaceDetection::Detect(\n    const seeta::ImageData & img) {\n  if (!impl_->IsLegalImage(img))\n    return std::vector<seeta::FaceInfo>();\n\n  int32_t min_img_size = img.height <= img.width ? img.height : img.width;\n  min_img_size = (impl_->max_face_size_ > 0 ?\n    (min_img_size >= impl_->max_face_size_ ? impl_->max_face_size_ : min_img_size) :\n    min_img_size);\n\n  impl_->img_pyramid_.SetImage1x(img.data, img.width, img.height);\n  impl_->img_pyramid_.SetMinScale(static_cast<float>(impl_->kWndSize) / min_img_size);\n\n  impl_->detector_->SetWindowSize(impl_->kWndSize);\n  impl_->detector_->SetSlideWindowStep(impl_->slide_wnd_step_x_,\n    impl_->slide_wnd_step_y_);\n\n  impl_->pos_wnds_ = impl_->detector_->Detect(&(impl_->img_pyramid_));\n\n  for (int32_t i = 0; i < impl_->pos_wnds_.size(); i++) {\n    if (impl_->pos_wnds_[i].score < impl_->cls_thresh_) {\n      impl_->pos_wnds_.resize(i);\n      break;\n    }\n  }\n\n  return impl_->pos_wnds_;\n}\n\nvoid FaceDetection::SetMinFaceSize(int32_t size) {\n  if (size >= 20) {\n    impl_->min_face_size_ = size;\n    impl_->img_pyramid_.SetMaxScale(impl_->kWndSize / static_cast<float>(size));\n  }\n}\n\nvoid FaceDetection::SetMaxFaceSize(int32_t size) {\n  if (size >= 0)\n    impl_->max_face_size_ = size;\n}\n\nvoid FaceDetection::SetImagePyramidScaleFactor(float factor) {\n  if (factor >= 0.01f && factor <= 0.99f)\n    impl_->img_pyramid_.SetScaleStep(static_cast<float>(factor));\n}\n\nvoid FaceDetection::SetWindowStep(int32_t step_x, int32_t step_y) {\n  if (step_x > 0)\n    impl_->slide_wnd_step_x_ = step_x;\n  if (step_y > 0)\n    impl_->slide_wnd_step_y_ = step_y;\n}\n\nvoid FaceDetection::SetScoreThresh(float thresh) {\n  if (thresh >= 0)\n    impl_->cls_thresh_ = thresh;\n}\n\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/feat/lab_feature_map.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"feat/lab_feature_map.h\"\n\n#include <cmath>\n\n#include \"util/math_func.h\"\n\nnamespace seeta {\nnamespace fd {\n\nvoid LABFeatureMap::Compute(const uint8_t* input, int32_t width,\n    int32_t height) {\n  if (input == nullptr || width <= 0 || height <= 0) {\n    return;  // @todo handle the errors!!!\n  }\n\n  Reshape(width, height);\n  ComputeIntegralImages(input);\n  ComputeRectSum();\n  ComputeFeatureMap();\n}\n\nfloat LABFeatureMap::GetStdDev() const {\n  double mean;\n  double m2;\n  double area = roi_.width * roi_.height;\n\n  int32_t top_left;\n  int32_t top_right;\n  int32_t bottom_left;\n  int32_t bottom_right;\n\n  if (roi_.x != 0) {\n    if (roi_.y != 0) {\n      top_left = (roi_.y - 1) * width_ + roi_.x - 1;\n      top_right = top_left + roi_.width;\n      bottom_left = top_left + roi_.height * width_;\n      bottom_right = bottom_left + roi_.width;\n\n      mean = (int_img_[bottom_right] - int_img_[bottom_left] +\n        int_img_[top_left] - int_img_[top_right]) / area;\n      m2 = (square_int_img_[bottom_right] - square_int_img_[bottom_left] +\n        square_int_img_[top_left] - square_int_img_[top_right]) / area;\n    } else {\n      bottom_left = (roi_.height - 1) * width_ + roi_.x - 1;\n      bottom_right = bottom_left + roi_.width;\n\n      mean = (int_img_[bottom_right] - int_img_[bottom_left]) / area;\n      m2 = (square_int_img_[bottom_right] - square_int_img_[bottom_left]) / area;\n    }\n  } else {\n    if (roi_.y != 0) {\n      top_right = (roi_.y - 1) * width_ + roi_.width - 1;\n      bottom_right = top_right + roi_.height * width_;\n\n      mean = (int_img_[bottom_right] - int_img_[top_right]) / area;\n      m2 = (square_int_img_[bottom_right] - square_int_img_[top_right]) / area;\n    } else {\n      bottom_right = (roi_.height - 1) * width_ + roi_.width - 1;\n      mean = int_img_[bottom_right] / area;\n      m2 = square_int_img_[bottom_right] / area;\n    }\n  }\n\n  return static_cast<float>(std::sqrt(m2 - mean * mean));\n}\n\nvoid LABFeatureMap::Reshape(int32_t width, int32_t height) {\n  width_ = width;\n  height_ = height;\n\n  int32_t len = width_ * height_;\n  feat_map_.resize(len);\n  rect_sum_.resize(len);\n  int_img_.resize(len);\n  square_int_img_.resize(len);\n}\n\nvoid LABFeatureMap::ComputeIntegralImages(const uint8_t* input) {\n  int32_t len = width_ * height_;\n\n  seeta::fd::MathFunction::UInt8ToInt32(input, int_img_.data(), len);\n  seeta::fd::MathFunction::Square(int_img_.data(), square_int_img_.data(), len);\n  Integral(int_img_.data());\n  Integral(square_int_img_.data());\n}\n\nvoid LABFeatureMap::ComputeRectSum() {\n  int32_t width = width_ - rect_width_;\n  int32_t height = height_ - rect_height_;\n  const int32_t* int_img = int_img_.data();\n  int32_t* rect_sum = rect_sum_.data();\n\n  *rect_sum = *(int_img + (rect_height_ - 1) * width_ + rect_width_ - 1);\n  seeta::fd::MathFunction::VectorSub(int_img + (rect_height_ - 1) * width_ +\n    rect_width_, int_img + (rect_height_ - 1) * width_, rect_sum + 1, width);\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t i = 1; i <= height; i++) {\n      const int32_t* top_left = int_img + (i - 1) * width_;\n      const int32_t* top_right = top_left + rect_width_ - 1;\n      const int32_t* bottom_left = top_left + rect_height_ * width_;\n      const int32_t* bottom_right = bottom_left + rect_width_ - 1;\n      int32_t* dest = rect_sum + i * width_;\n\n      *(dest++) = (*bottom_right) - (*top_right);\n      seeta::fd::MathFunction::VectorSub(bottom_right + 1, top_right + 1, dest, width);\n      seeta::fd::MathFunction::VectorSub(dest, bottom_left, dest, width);\n      seeta::fd::MathFunction::VectorAdd(dest, top_left, dest, width);\n    }\n  }\n}\n\nvoid LABFeatureMap::ComputeFeatureMap() {\n  int32_t width = width_ - rect_width_ * num_rect_;\n  int32_t height = height_ - rect_height_ * num_rect_;\n  int32_t offset = width_ * rect_height_;\n  uint8_t* feat_map = feat_map_.data();\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t r = 0; r <= height; r++) {\n      for (int32_t c = 0; c <= width; c++) {\n        uint8_t* dest = feat_map + r * width_ + c;\n        *dest = 0;\n\n        int32_t white_rect_sum = rect_sum_[(r + rect_height_) * width_ + c + rect_width_];\n        int32_t black_rect_idx = r * width_ + c;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x80 : 0x0);\n        black_rect_idx += rect_width_;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x40 : 0x0);\n        black_rect_idx += rect_width_;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x20 : 0x0);\n        black_rect_idx += offset;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x08 : 0x0);\n        black_rect_idx += offset;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x01 : 0x0);\n        black_rect_idx -= rect_width_;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x02 : 0x0);\n        black_rect_idx -= rect_width_;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x04 : 0x0);\n        black_rect_idx -= offset;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x10 : 0x0);\n      }\n    }\n  }\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/feat/surf_feature_map.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include <cmath>\n#include \"feat/surf_feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\nvoid SURFFeaturePool::Create() {\n  if (sample_height_ - patch_min_height_ <= sample_width_ - patch_min_width_) {\n    for (size_t i = 0; i < format_.size(); i++) {\n      const SURFPatchFormat & format = format_[i];\n      for (int32_t h = patch_min_height_; h <= sample_height_;\n          h += patch_size_inc_step_) {\n        if (h % format.num_cell_per_col != 0 || h % format.height != 0)\n          continue;\n        int32_t w = h / format.height * format.width;\n        if (w % format.num_cell_per_row != 0 || w < patch_min_width_ ||\n            w > sample_width_)\n          continue;\n        AddAllFeaturesToPool(w, h, format.num_cell_per_row,\n          format.num_cell_per_col);\n      }\n    }\n  } else {\n    for (size_t i = 0; i < format_.size(); i++) {\n      const SURFPatchFormat & format = format_[i];\n      for (int32_t w = patch_min_width_; w <= patch_min_width_;\n          w += patch_size_inc_step_) {\n        if (w % format.num_cell_per_row != 0 || w % format.width != 0)\n          continue;\n        int32_t h = w / format.width * format.height;\n        if (h % format.num_cell_per_col != 0 || h < patch_min_height_ ||\n            h > sample_height_)\n          continue;\n        AddAllFeaturesToPool(w, h, format.num_cell_per_row,\n          format.num_cell_per_col);\n      }\n    }\n  }\n}\n\nvoid SURFFeaturePool::AddPatchFormat(int32_t width, int32_t height,\n    int32_t num_cell_per_row, int32_t num_cell_per_col) {\n  for (size_t i = 0; i < format_.size(); i++) {\n    const SURFPatchFormat & format = format_[i];\n    if (format.height == height &&\n      format.width == width &&\n      format.num_cell_per_row == num_cell_per_row &&\n      format.num_cell_per_col == num_cell_per_col)\n      return;\n  }\n\n  SURFPatchFormat new_format;\n  new_format.height = height;\n  new_format.width = width;\n  new_format.num_cell_per_row = num_cell_per_row;\n  new_format.num_cell_per_col = num_cell_per_col;\n  format_.push_back(new_format);\n}\n\nvoid SURFFeaturePool::AddAllFeaturesToPool(int32_t width, int32_t height,\n    int32_t num_cell_per_row, int32_t num_cell_per_col) {\n  SURFFeature feat;\n  feat.patch.width = width;\n  feat.patch.height = height;\n  feat.num_cell_per_row = num_cell_per_row;\n  feat.num_cell_per_col = num_cell_per_col;\n\n  for (int32_t y = 0; y <= sample_height_ - height; y += patch_move_step_y_) {\n    feat.patch.y = y;\n    for (int32_t x = 0; x <= sample_width_ - width; x += patch_move_step_x_) {\n      feat.patch.x = x;\n      pool_.push_back(feat);\n    }\n  }\n}\n\nvoid SURFFeatureMap::Compute(const uint8_t* input, int32_t width,\n    int32_t height) {\n  if (input == nullptr || width <= 0 || height <= 0) {\n    return;  // @todo handle the error!\n  }\n  Reshape(width, height);\n  ComputeGradientImages(input);\n  ComputeIntegralImages();\n}\n\nvoid SURFFeatureMap::GetFeatureVector(int32_t feat_id, float* feat_vec) {\n  if (buf_valid_[feat_id] == 0) {\n    ComputeFeatureVector(feat_pool_[feat_id], feat_vec_buf_[feat_id].data());\n    NormalizeFeatureVectorL2(feat_vec_buf_[feat_id].data(),\n      feat_vec_normed_buf_[feat_id].data(),\n      static_cast<int32_t>(feat_vec_normed_buf_[feat_id].size()));\n    buf_valid_[feat_id] = 1;\n    buf_valid_reset_ = true;\n  }\n\n  std::memcpy(feat_vec, feat_vec_normed_buf_[feat_id].data(),\n    feat_vec_normed_buf_[feat_id].size() * sizeof(float));\n}\n\nvoid SURFFeatureMap::InitFeaturePool() {\n  feat_pool_.AddPatchFormat(1, 1, 2, 2);\n  feat_pool_.AddPatchFormat(1, 2, 2, 2);\n  feat_pool_.AddPatchFormat(2, 1, 2, 2);\n  feat_pool_.AddPatchFormat(2, 3, 2, 2);\n  feat_pool_.AddPatchFormat(3, 2, 2, 2);\n  feat_pool_.Create();\n\n  int32_t feat_pool_size = static_cast<int32_t>(feat_pool_.size());\n  feat_vec_buf_.resize(feat_pool_size);\n  feat_vec_normed_buf_.resize(feat_pool_size);\n  for (size_t i = 0; i < feat_pool_size; i++) {\n    int32_t dim = GetFeatureVectorDim(static_cast<int32_t>(i));\n    feat_vec_buf_[i].resize(dim);\n    feat_vec_normed_buf_[i].resize(dim);\n  }\n  buf_valid_.resize(feat_pool_size, 0);\n}\n\nvoid SURFFeatureMap::Reshape(int32_t width, int32_t height) {\n  width_ = width;\n  height_ = height;\n\n  int32_t len = width_ * height_;\n  grad_x_.resize(len);\n  grad_y_.resize(len);\n  int_img_.resize(len * kNumIntChannel);\n  img_buf_.resize(len);\n}\n\nvoid SURFFeatureMap::ComputeGradientImages(const uint8_t* input) {\n  int32_t len = width_ * height_;\n  seeta::fd::MathFunction::UInt8ToInt32(input, img_buf_.data(), len);\n  ComputeGradX(img_buf_.data());\n  ComputeGradY(img_buf_.data());\n}\n\nvoid SURFFeatureMap::ComputeGradX(const int32_t* input) {\n  int32_t* dx = grad_x_.data();\n  int32_t len = width_ - 2;\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t r = 0; r < height_; r++) {\n      const int32_t* src = input + r * width_;\n      int32_t* dest = dx + r * width_;\n      *dest = ((*(src + 1)) - (*src)) << 1;\n      seeta::fd::MathFunction::VectorSub(src + 2, src, dest + 1, len);\n      dest += (width_ - 1);\n      src += (width_ - 1);\n      *dest = ((*src) - (*(src - 1))) << 1;\n    }\n  }\n}\n\nvoid SURFFeatureMap::ComputeGradY(const int32_t* input) {\n  int32_t* dy = grad_y_.data();\n  int32_t len = width_;\n  seeta::fd::MathFunction::VectorSub(input + width_, input, dy, len);\n  seeta::fd::MathFunction::VectorAdd(dy, dy, dy, len);\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t r = 1; r < height_ - 1; r++) {\n      const int32_t* src = input + (r - 1) * width_;\n      int32_t* dest = dy + r * width_;\n      seeta::fd::MathFunction::VectorSub(src + (width_ << 1), src, dest, len);\n    }\n  }\n  int32_t offset = (height_ - 1) * width_;\n  dy += offset;\n  seeta::fd::MathFunction::VectorSub(input + offset, input + offset - width_,\n    dy, len);\n  seeta::fd::MathFunction::VectorAdd(dy, dy, dy, len);\n}\n\nvoid SURFFeatureMap::ComputeIntegralImages() {\n  FillIntegralChannel(grad_x_.data(), 0);\n  FillIntegralChannel(grad_y_.data(), 4);\n\n  int32_t len = width_ * height_;\n  seeta::fd::MathFunction::VectorAbs(grad_x_.data(), img_buf_.data(), len);\n  FillIntegralChannel(img_buf_.data(), 1);\n  seeta::fd::MathFunction::VectorAbs(grad_y_.data(), img_buf_.data(), len);\n  FillIntegralChannel(img_buf_.data(), 5);\n  MaskIntegralChannel();\n  Integral();\n}\n\nvoid SURFFeatureMap::MaskIntegralChannel() {\n  const int32_t* grad_x = grad_x_.data();\n  const int32_t* grad_y = grad_y_.data();\n  int32_t len = width_ * height_;\n#ifdef USE_SSE\n  __m128i dx;\n  __m128i dy;\n  __m128i dx_mask;\n  __m128i dy_mask;\n  __m128i zero = _mm_set1_epi32(0);\n  __m128i xor_bits = _mm_set_epi32(0x0, 0x0, 0xffffffff, 0xffffffff);\n  __m128i data;\n  __m128i result;\n  __m128i* src = reinterpret_cast<__m128i*>(int_img_.data());\n\n  for (int32_t i = 0; i < len; i++) {\n    dx = _mm_set1_epi32(*(grad_x++));\n    dy = _mm_set1_epi32(*(grad_y++));\n    dx_mask = _mm_xor_si128(_mm_cmplt_epi32(dx, zero), xor_bits);\n    dy_mask = _mm_xor_si128(_mm_cmplt_epi32(dy, zero), xor_bits);\n\n    data = _mm_loadu_si128(src);\n    result = _mm_and_si128(data, dy_mask);\n    _mm_storeu_si128(src++, result);\n    data = _mm_loadu_si128(src);\n    result = _mm_and_si128(data, dx_mask);\n    _mm_storeu_si128(src++, result);\n  }\n#else\n  int32_t dx, dy, dx_mask, dy_mask, cmp;\n  int32_t xor_bits[] = {-1, -1, 0, 0};\n\n  int32_t* src = int_img_.data();\n  for (int32_t i = 0; i < len; i++) {\n      dy = *(grad_y++);\n      dx = *(grad_x++);\n      \n      cmp = dy < 0 ? 0xffffffff : 0x0;\n      for (int32_t j = 0; j < 4; j++) {\n          // cmp xor xor_bits\n          dy_mask = cmp ^ xor_bits[j];\n          *(src) = (*src) & dy_mask;\n          src++;\n      }\n      \n      cmp = dx < 0 ? 0xffffffff : 0x0;\n      for (int32_t j = 0; j < 4; j++) {\n          // cmp xor xor_bits\n          dx_mask = cmp ^ xor_bits[j];\n          *(src) = (*src) & dx_mask;\n          src++;\n      }\n  }\n#endif\n}\n\nvoid SURFFeatureMap::Integral() {\n  int32_t* data = int_img_.data();\n  int32_t len = kNumIntChannel * width_;\n\n  // Cummulative sum by row\n  for (int32_t r = 0; r < height_ - 1; r++) {\n    int32_t* row1 = data + r * len;\n    int32_t* row2 = row1 + len;\n    seeta::fd::MathFunction::VectorAdd(row1, row2, row2, len);\n  }\n  // Cummulative sum by column\n  for (int32_t r = 0; r < height_; r++)\n    VectorCumAdd(data + r * len, len, kNumIntChannel);\n}\n\nvoid SURFFeatureMap::VectorCumAdd(int32_t* x, int32_t len,\n    int32_t num_channel) {\n#ifdef USE_SSE\n  __m128i x1;\n  __m128i y1;\n  __m128i z1;\n  __m128i* x2 = reinterpret_cast<__m128i*>(x);\n  __m128i* y2 = reinterpret_cast<__m128i*>(x + num_channel);\n  __m128i* z2 = y2;\n\n  len = len / num_channel - 1;\n  for (int32_t i = 0; i < len; i++) {\n    // first 4 channels\n    x1 = _mm_loadu_si128(x2++);\n    y1 = _mm_loadu_si128(y2++);\n    z1 = _mm_add_epi32(x1, y1);\n    _mm_storeu_si128(z2, z1);\n    z2 = y2;\n\n    // second 4 channels\n    x1 = _mm_loadu_si128(x2++);\n    y1 = _mm_loadu_si128(y2++);\n    z1 = _mm_add_epi32(x1, y1);\n    _mm_storeu_si128(z2, z1);\n    z2 = y2;\n  }\n#else\n  int32_t cols = len / num_channel - 1;\n  for (int32_t i = 0; i < cols; i++) {\n    int32_t* col1 = x + i * num_channel;\n    int32_t* col2 = col1 + num_channel;\n    seeta::fd::MathFunction::VectorAdd(col1, col2, col2, num_channel);\n  }\n#endif\n}\n\nvoid SURFFeatureMap::ComputeFeatureVector(const SURFFeature & feat,\n    int32_t* feat_vec) {\n  int32_t init_cell_x = roi_.x + feat.patch.x;\n  int32_t init_cell_y = roi_.y + feat.patch.y;\n  int32_t cell_width = feat.patch.width / feat.num_cell_per_row * kNumIntChannel;\n  int32_t cell_height = feat.patch.height / feat.num_cell_per_col;\n  int32_t row_width = width_ * kNumIntChannel;\n  const int32_t* cell_top_left[kNumIntChannel];\n  const int32_t* cell_top_right[kNumIntChannel];\n  const int32_t* cell_bottom_left[kNumIntChannel];\n  const int32_t* cell_bottom_right[kNumIntChannel];\n  int* feat_val = feat_vec;\n  const int32_t* int_img = int_img_.data();\n  int32_t offset = 0;\n\n  if (init_cell_y != 0) {\n    if (init_cell_x != 0) {\n      const int32_t* tmp_cell_top_right[kNumIntChannel];\n\n      // cell #1\n      offset = row_width * (init_cell_y - 1) +\n        (init_cell_x - 1) * kNumIntChannel;\n      for (int32_t i = 0; i < kNumIntChannel; i++) {\n        cell_top_left[i] = int_img + (offset++);\n        cell_top_right[i] = cell_top_left[i] + cell_width;\n        cell_bottom_left[i] = cell_top_left[i] + row_width * cell_height;\n        cell_bottom_right[i] = cell_bottom_left[i] + cell_width;\n        *(feat_val++) = *(cell_bottom_right[i]) + *(cell_top_left[i]) -\n                        *(cell_top_right[i]) - *(cell_bottom_left[i]);\n        tmp_cell_top_right[i] = cell_bottom_right[i];\n      }\n\n      // cells in 1st row\n      for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n        for (int32_t j = 0; j < kNumIntChannel; j++) {\n          cell_top_left[j] = cell_top_right[j];\n          cell_top_right[j] += cell_width;\n          cell_bottom_left[j] = cell_bottom_right[j];\n          cell_bottom_right[j] += cell_width;\n          *(feat_val++) = *(cell_bottom_right[j]) + *(cell_top_left[j]) -\n                          *(cell_top_right[j]) - *(cell_bottom_left[j]);\n        }\n      }\n\n      for (int32_t i = 0; i < kNumIntChannel; i++)\n        cell_top_right[i] = tmp_cell_top_right[i];\n    } else {\n      const int32_t* tmp_cell_top_right[kNumIntChannel];\n\n      // cell #1\n      offset = row_width * (init_cell_y - 1) + cell_width - kNumIntChannel;\n      for (int32_t i = 0; i < kNumIntChannel; i++) {\n        cell_top_right[i] = int_img + (offset++);\n        cell_bottom_right[i] = cell_top_right[i] + row_width * cell_height;\n        tmp_cell_top_right[i] = cell_bottom_right[i];\n        *(feat_val++) = *(cell_bottom_right[i]) - *(cell_top_right[i]);\n      }\n\n      // cells in 1st row\n      for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n        for (int32_t j = 0; j < kNumIntChannel; j++) {\n          cell_top_left[j] = cell_top_right[j];\n          cell_top_right[j] += cell_width;\n          cell_bottom_left[j] = cell_bottom_right[j];\n          cell_bottom_right[j] += cell_width;\n          *(feat_val++) = *(cell_bottom_right[j]) + *(cell_top_left[j]) -\n                          *(cell_top_right[j]) - *(cell_bottom_left[j]);\n        }\n      }\n\n      for (int32_t i = 0; i < kNumIntChannel; i++)\n        cell_top_right[i] = tmp_cell_top_right[i];\n    }\n  } else {\n    if (init_cell_x != 0) {\n      // cell #1\n      offset = row_width * (cell_height - 1) +\n        (init_cell_x - 1) * kNumIntChannel;\n      for (int32_t i = 0; i < kNumIntChannel; i++) {\n        cell_bottom_left[i] = int_img + (offset++);\n        cell_bottom_right[i] = cell_bottom_left[i] + cell_width;\n        *(feat_val++) = *(cell_bottom_right[i]) - *(cell_bottom_left[i]);\n        cell_top_right[i] = cell_bottom_right[i];\n      }\n\n      // cells in 1st row\n      for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n        for (int32_t j = 0; j < kNumIntChannel; j++) {\n          cell_bottom_left[j] = cell_bottom_right[j];\n          cell_bottom_right[j] += cell_width;\n          *(feat_val++) = *(cell_bottom_right[j]) - *(cell_bottom_left[j]);\n        }\n      }\n    } else {\n      // cell #1\n      offset = row_width * (cell_height - 1) + cell_width - kNumIntChannel;\n      for (int32_t i = 0; i < kNumIntChannel; i++) {\n        cell_bottom_right[i] = int_img + (offset++);\n        *(feat_val++) = *(cell_bottom_right[i]);\n        cell_top_right[i] = cell_bottom_right[i];\n      }\n\n      // cells in 1st row\n      for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n        for (int32_t j = 0; j < kNumIntChannel; j++) {\n          cell_bottom_left[j] = cell_bottom_right[j];\n          cell_bottom_right[j] += cell_width;\n          *(feat_val++) = *(cell_bottom_right[j]) - *(cell_bottom_left[j]);\n        }\n      }\n    }\n  }\n\n  // from BR of last cell in current row to BR of first cell in next row\n  offset = cell_height * row_width - feat.patch.width *\n    kNumIntChannel + cell_width;\n\n  // cells in following rows\n  for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n    // cells in 1st column\n    if (init_cell_x == 0) {\n      for (int32_t j = 0; j < kNumIntChannel; j++) {\n        cell_bottom_right[j] += offset;\n        *(feat_val++) = *(cell_bottom_right[j]) - *(cell_top_right[j]);\n      }\n    } else {\n      for (int32_t j = 0; j < kNumIntChannel; j++) {\n        cell_bottom_right[j] += offset;\n        cell_top_left[j] = cell_top_right[j] - cell_width;\n        cell_bottom_left[j] = cell_bottom_right[j] - cell_width;\n        *(feat_val++) = *(cell_bottom_right[j]) + *(cell_top_left[j]) -\n                        *(cell_top_right[j]) - *(cell_bottom_left[j]);\n      }\n    }\n\n    // cells in following columns\n    for (int32_t j = 1; j < feat.num_cell_per_row; j++) {\n      for (int32_t k = 0; k < kNumIntChannel; k++) {\n        cell_top_left[k] = cell_top_right[k];\n        cell_top_right[k] += cell_width;\n\n        cell_bottom_left[k] = cell_bottom_right[k];\n        cell_bottom_right[k] += cell_width;\n\n        *(feat_val++) = *(cell_bottom_right[k]) + *(cell_top_left[k]) -\n                        *(cell_bottom_left[k]) - *(cell_top_right[k]);\n      }\n    }\n\n    for (int32_t j = 0; j < kNumIntChannel; j++)\n      cell_top_right[j] += offset;\n  }\n}\n\nvoid SURFFeatureMap::NormalizeFeatureVectorL2(const int32_t* feat_vec,\n    float* feat_vec_normed, int32_t len) const {\n  double prod = 0.0;\n  float norm_l2 = 0.0f;\n\n  for (int32_t i = 0; i < len; i++)\n    prod += static_cast<double>(feat_vec[i] * feat_vec[i]);\n  if (prod != 0) {\n    norm_l2 = static_cast<float>(std::sqrt(prod));\n    for (int32_t i = 0; i < len; i++)\n      feat_vec_normed[i] = feat_vec[i] / norm_l2;\n  } else {\n    for (int32_t i = 0; i < len; i++)\n      feat_vec_normed[i] = 0.0f;\n  }\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/fust.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"fust.h\"\n\n#include <map>\n#include <memory>\n#include <string>\n#include <vector>\n\n#include \"classifier/lab_boosted_classifier.h\"\n#include \"classifier/surf_mlp.h\"\n#include \"feat/lab_feature_map.h\"\n#include \"feat/surf_feature_map.h\"\n#include \"io/lab_boost_model_reader.h\"\n#include \"io/surf_mlp_model_reader.h\"\n#include \"util/nms.h\"\n\nnamespace seeta {\nnamespace fd {\n\nbool FuStDetector::LoadModel(const std::string & model_path) {\n  std::ifstream model_file(model_path, std::ifstream::binary);\n  bool is_loaded = true;\n\n  if (!model_file.is_open()) {\n    is_loaded = false;\n  } else {\n    hierarchy_size_.clear();\n    num_stage_.clear();\n    wnd_src_id_.clear();\n\n    int32_t hierarchy_size;\n    int32_t num_stage;\n    int32_t num_wnd_src;\n    int32_t type_id;\n    int32_t feat_map_index = 0;\n    std::shared_ptr<seeta::fd::ModelReader> reader;\n    std::shared_ptr<seeta::fd::Classifier> classifier;\n    seeta::fd::ClassifierType classifier_type;\n\n    model_file.read(reinterpret_cast<char*>(&num_hierarchy_), sizeof(int32_t));\n    for (int32_t i = 0; is_loaded && i < num_hierarchy_; i++) {\n      model_file.read(reinterpret_cast<char*>(&hierarchy_size),\n        sizeof(int32_t));\n      hierarchy_size_.push_back(hierarchy_size);\n\n      for (int32_t j = 0; is_loaded && j < hierarchy_size; j++) {\n        model_file.read(reinterpret_cast<char*>(&num_stage), sizeof(int32_t));\n        num_stage_.push_back(num_stage);\n\n        for (int32_t k = 0; is_loaded && k < num_stage; k++) {\n          model_file.read(reinterpret_cast<char*>(&type_id), sizeof(int32_t));\n          classifier_type = static_cast<seeta::fd::ClassifierType>(type_id);\n          reader = CreateModelReader(classifier_type);\n          classifier = CreateClassifier(classifier_type);\n\n          is_loaded = !model_file.fail() &&\n            reader->Read(&model_file, classifier.get());\n          if (is_loaded) {\n            model_.push_back(classifier);\n            std::shared_ptr<seeta::fd::FeatureMap> feat_map;\n            if (cls2feat_idx_.count(classifier_type) == 0) {\n              feat_map_.push_back(CreateFeatureMap(classifier_type));\n              cls2feat_idx_.insert(\n                std::map<seeta::fd::ClassifierType, int32_t>::value_type(\n                classifier_type, feat_map_index++));\n            }\n            feat_map = feat_map_[cls2feat_idx_.at(classifier_type)];\n            model_.back()->SetFeatureMap(feat_map.get());\n          }\n        }\n\n        wnd_src_id_.push_back(std::vector<int32_t>());\n        model_file.read(reinterpret_cast<char*>(&num_wnd_src), sizeof(int32_t));\n        if (num_wnd_src > 0) {\n          wnd_src_id_.back().resize(num_wnd_src);\n          for (int32_t k = 0; k < num_wnd_src; k++) {\n            model_file.read(reinterpret_cast<char*>(&(wnd_src_id_.back()[k])),\n              sizeof(int32_t));\n          }\n        }\n      }\n    }\n\n    model_file.close();\n  }\n\n  return is_loaded;\n}\n\nstd::vector<seeta::FaceInfo> FuStDetector::Detect(\n    seeta::fd::ImagePyramid* img_pyramid) {\n  float score;\n  seeta::FaceInfo wnd_info;\n  seeta::Rect wnd;\n  float scale_factor = 0.0;\n  const seeta::ImageData* img_scaled =\n    img_pyramid->GetNextScaleImage(&scale_factor);\n\n  wnd.height = wnd.width = wnd_size_;\n\n  // Sliding window\n\n  std::vector<std::vector<seeta::FaceInfo> > proposals(hierarchy_size_[0]);\n  std::shared_ptr<seeta::fd::FeatureMap> & feat_map_1 =\n    feat_map_[cls2feat_idx_[model_[0]->type()]];\n\n  while (img_scaled != nullptr) {\n    feat_map_1->Compute(img_scaled->data, img_scaled->width,\n      img_scaled->height);\n\n    wnd_info.bbox.width = static_cast<int32_t>(wnd_size_ / scale_factor + 0.5);\n    wnd_info.bbox.height = wnd_info.bbox.width;\n\n    int32_t max_x = img_scaled->width - wnd_size_;\n    int32_t max_y = img_scaled->height - wnd_size_;\n    for (int32_t y = 0; y <= max_y; y += slide_wnd_step_y_) {\n      wnd.y = y;\n      for (int32_t x = 0; x <= max_x; x += slide_wnd_step_x_) {\n        wnd.x = x;\n        feat_map_1->SetROI(wnd);\n\n        wnd_info.bbox.x = static_cast<int32_t>(x / scale_factor + 0.5);\n        wnd_info.bbox.y = static_cast<int32_t>(y / scale_factor + 0.5);\n\n        for (int32_t i = 0; i < hierarchy_size_[0]; i++) {\n          if (model_[i]->Classify(&score)) {\n            wnd_info.score = static_cast<double>(score);\n            proposals[i].push_back(wnd_info);\n          }\n        }\n      }\n    }\n\n    img_scaled = img_pyramid->GetNextScaleImage(&scale_factor);\n  }\n\n  std::vector<std::vector<seeta::FaceInfo> > proposals_nms(hierarchy_size_[0]);\n  for (int32_t i = 0; i < hierarchy_size_[0]; i++) {\n    seeta::fd::NonMaximumSuppression(&(proposals[i]),\n      &(proposals_nms[i]), 0.8f);\n    proposals[i].clear();\n  }\n\n  // Following classifiers\n\n  seeta::ImageData img = img_pyramid->image1x();\n  seeta::Rect roi;\n  std::vector<float> mlp_predicts(4);  // @todo no hard-coded number!\n  roi.x = roi.y = 0;\n  roi.width = roi.height = wnd_size_;\n\n  int32_t cls_idx = hierarchy_size_[0];\n  int32_t model_idx = hierarchy_size_[0];\n  std::vector<int32_t> buf_idx;\n\n  for (int32_t i = 1; i < num_hierarchy_; i++) {\n    buf_idx.resize(hierarchy_size_[i]);\n    for (int32_t j = 0; j < hierarchy_size_[i]; j++) {\n      int32_t num_wnd_src = static_cast<int32_t>(wnd_src_id_[cls_idx].size());\n      std::vector<int32_t> & wnd_src = wnd_src_id_[cls_idx];\n      buf_idx[j] = wnd_src[0];\n      proposals[buf_idx[j]].clear();\n      for (int32_t k = 0; k < num_wnd_src; k++) {\n        proposals[buf_idx[j]].insert(proposals[buf_idx[j]].end(),\n          proposals_nms[wnd_src[k]].begin(), proposals_nms[wnd_src[k]].end());\n      }\n\n      std::shared_ptr<seeta::fd::FeatureMap> & feat_map =\n        feat_map_[cls2feat_idx_[model_[model_idx]->type()]];\n      for (int32_t k = 0; k < num_stage_[cls_idx]; k++) {\n        int32_t num_wnd = static_cast<int32_t>(proposals[buf_idx[j]].size());\n        std::vector<seeta::FaceInfo> & bboxes = proposals[buf_idx[j]];\n        int32_t bbox_idx = 0;\n\n        for (int32_t m = 0; m < num_wnd; m++) {\n          if (bboxes[m].bbox.x + bboxes[m].bbox.width <= 0 ||\n              bboxes[m].bbox.y + bboxes[m].bbox.height <= 0)\n            continue;\n          GetWindowData(img, bboxes[m].bbox);\n          feat_map->Compute(wnd_data_.data(), wnd_size_, wnd_size_);\n          feat_map->SetROI(roi);\n\n          if (model_[model_idx]->Classify(&score, mlp_predicts.data())) {\n            float x = static_cast<float>(bboxes[m].bbox.x);\n            float y = static_cast<float>(bboxes[m].bbox.y);\n            float w = static_cast<float>(bboxes[m].bbox.width);\n            float h = static_cast<float>(bboxes[m].bbox.height);\n\n            bboxes[bbox_idx].bbox.width =\n              static_cast<int32_t>((mlp_predicts[3] * 2 - 1) * w + w + 0.5);\n            bboxes[bbox_idx].bbox.height = bboxes[bbox_idx].bbox.width;\n            bboxes[bbox_idx].bbox.x =\n              static_cast<int32_t>((mlp_predicts[1] * 2 - 1) * w + x +\n              (w - bboxes[bbox_idx].bbox.width) * 0.5 + 0.5);\n            bboxes[bbox_idx].bbox.y =\n              static_cast<int32_t>((mlp_predicts[2] * 2 - 1) * h + y +\n              (h - bboxes[bbox_idx].bbox.height) * 0.5 + 0.5);\n            bboxes[bbox_idx].score = score;\n            bbox_idx++;\n          }\n        }\n        proposals[buf_idx[j]].resize(bbox_idx);\n\n        if (k < num_stage_[cls_idx] - 1) {\n          seeta::fd::NonMaximumSuppression(&(proposals[buf_idx[j]]),\n            &(proposals_nms[buf_idx[j]]), 0.8f);\n          proposals[buf_idx[j]] = proposals_nms[buf_idx[j]];\n        } else {\n          if (i == num_hierarchy_ - 1) {\n            seeta::fd::NonMaximumSuppression(&(proposals[buf_idx[j]]),\n              &(proposals_nms[buf_idx[j]]), 0.3f);\n            proposals[buf_idx[j]] = proposals_nms[buf_idx[j]];\n          }\n        }\n        model_idx++;\n      }\n\n      cls_idx++;\n    }\n\n    for (int32_t j = 0; j < hierarchy_size_[i]; j++)\n      proposals_nms[j] = proposals[buf_idx[j]];\n  }\n\n  return proposals_nms[0];\n}\n\nstd::shared_ptr<seeta::fd::ModelReader>\nFuStDetector::CreateModelReader(seeta::fd::ClassifierType type) {\n  std::shared_ptr<seeta::fd::ModelReader> reader;\n  switch (type) {\n  case seeta::fd::ClassifierType::LAB_Boosted_Classifier:\n    reader.reset(new seeta::fd::LABBoostModelReader());\n    break;\n  case seeta::fd::ClassifierType::SURF_MLP:\n    reader.reset(new seeta::fd::SURFMLPModelReader());\n    break;\n  default:\n    break;\n  }\n  return reader;\n}\n\nstd::shared_ptr<seeta::fd::Classifier>\nFuStDetector::CreateClassifier(seeta::fd::ClassifierType type) {\n  std::shared_ptr<seeta::fd::Classifier> classifier;\n  switch (type) {\n  case seeta::fd::ClassifierType::LAB_Boosted_Classifier:\n    classifier.reset(new seeta::fd::LABBoostedClassifier());\n    break;\n  case seeta::fd::ClassifierType::SURF_MLP:\n    classifier.reset(new seeta::fd::SURFMLP());\n    break;\n  default:\n    break;\n  }\n  return classifier;\n}\n\nstd::shared_ptr<seeta::fd::FeatureMap>\nFuStDetector::CreateFeatureMap(seeta::fd::ClassifierType type) {\n  std::shared_ptr<seeta::fd::FeatureMap> feat_map;\n  switch (type) {\n  case seeta::fd::ClassifierType::LAB_Boosted_Classifier:\n    feat_map.reset(new seeta::fd::LABFeatureMap());\n    break;\n  case seeta::fd::ClassifierType::SURF_MLP:\n    feat_map.reset(new seeta::fd::SURFFeatureMap());\n    break;\n  default:\n    break;\n  }\n  return feat_map;\n}\n\nvoid FuStDetector::GetWindowData(const seeta::ImageData & img,\n    const seeta::Rect & wnd) {\n  int32_t pad_left;\n  int32_t pad_right;\n  int32_t pad_top;\n  int32_t pad_bottom;\n  seeta::Rect roi = wnd;\n\n  pad_left = pad_right = pad_top = pad_bottom = 0;\n  if (roi.x + roi.width > img.width)\n    pad_right = roi.x + roi.width - img.width;\n  if (roi.x < 0) {\n    pad_left = -roi.x;\n    roi.x = 0;\n  }\n  if (roi.y + roi.height > img.height)\n    pad_bottom = roi.y + roi.height - img.height;\n  if (roi.y < 0) {\n    pad_top = -roi.y;\n    roi.y = 0;\n  }\n\n  wnd_data_buf_.resize(roi.width * roi.height);\n  const uint8_t* src = img.data + roi.y * img.width + roi.x;\n  uint8_t* dest = wnd_data_buf_.data();\n  int32_t len = sizeof(uint8_t) * roi.width;\n  int32_t len2 = sizeof(uint8_t) * (roi.width - pad_left - pad_right);\n\n  if (pad_top > 0) {\n    std::memset(dest, 0, len * pad_top);\n    dest += (roi.width * pad_top);\n  }\n  if (pad_left == 0) {\n    if (pad_right == 0) {\n      for (int32_t y = pad_top; y < roi.height - pad_bottom; y++) {\n        std::memcpy(dest, src, len);\n        src += img.width;\n        dest += roi.width;\n      }\n    } else {\n      for (int32_t y = pad_top; y < roi.height - pad_bottom; y++) {\n        std::memcpy(dest, src, len2);\n        src += img.width;\n        dest += roi.width;\n        std::memset(dest - pad_right, 0, sizeof(uint8_t) * pad_right);\n      }\n    }\n  } else {\n    if (pad_right == 0) {\n      for (int32_t y = pad_top; y < roi.height - pad_bottom; y++) {\n        std::memset(dest, 0, sizeof(uint8_t)* pad_left);\n        std::memcpy(dest + pad_left, src, len2);\n        src += img.width;\n        dest += roi.width;\n      }\n    } else {\n      for (int32_t y = pad_top; y < roi.height - pad_bottom; y++) {\n        std::memset(dest, 0, sizeof(uint8_t) * pad_left);\n        std::memcpy(dest + pad_left, src, len2);\n        src += img.width;\n        dest += roi.width;\n        std::memset(dest - pad_right, 0, sizeof(uint8_t) * pad_right);\n      }\n    }\n  }\n  if (pad_bottom > 0)\n    std::memset(dest, 0, len * pad_bottom);\n\n  seeta::ImageData src_img(roi.width, roi.height);\n  seeta::ImageData dest_img(wnd_size_, wnd_size_);\n  src_img.data = wnd_data_buf_.data();\n  dest_img.data = wnd_data_.data();\n  seeta::fd::ResizeImage(src_img, &dest_img);\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/io/lab_boost_model_reader.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"io/lab_boost_model_reader.h\"\n\n#include <vector>\n\nnamespace seeta {\nnamespace fd {\n\nbool LABBoostModelReader::Read(std::istream* input,\n    seeta::fd::Classifier* model) {\n  bool is_read;\n  seeta::fd::LABBoostedClassifier* lab_boosted_classifier =\n    dynamic_cast<seeta::fd::LABBoostedClassifier*>(model);\n\n  input->read(reinterpret_cast<char*>(&num_base_classifer_), sizeof(int32_t));\n  input->read(reinterpret_cast<char*>(&num_bin_), sizeof(int32_t));\n\n  is_read = (!input->fail()) && num_base_classifer_ > 0 && num_bin_ > 0 &&\n    ReadFeatureParam(input, lab_boosted_classifier) &&\n    ReadBaseClassifierParam(input, lab_boosted_classifier);\n\n  return is_read;\n}\n\nbool LABBoostModelReader::ReadFeatureParam(std::istream* input,\n    seeta::fd::LABBoostedClassifier* model) {\n  int32_t x;\n  int32_t y;\n  for (int32_t i = 0; i < num_base_classifer_; i++) {\n    input->read(reinterpret_cast<char*>(&x), sizeof(int32_t));\n    input->read(reinterpret_cast<char*>(&y), sizeof(int32_t));\n    model->AddFeature(x, y);\n  }\n\n  return !input->fail();\n}\n\nbool LABBoostModelReader::ReadBaseClassifierParam(std::istream* input,\n    seeta::fd::LABBoostedClassifier* model) {\n  std::vector<float> thresh;\n  thresh.resize(num_base_classifer_);\n  input->read(reinterpret_cast<char*>(thresh.data()),\n    sizeof(float)* num_base_classifer_);\n\n  int32_t weight_len = sizeof(float)* (num_bin_ + 1);\n  std::vector<float> weights;\n  weights.resize(num_bin_ + 1);\n  for (int32_t i = 0; i < num_base_classifer_; i++) {\n    input->read(reinterpret_cast<char*>(weights.data()), weight_len);\n    model->AddBaseClassifier(weights.data(), num_bin_, thresh[i]);\n  }\n\n  return !input->fail();\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/io/surf_mlp_model_reader.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"io/surf_mlp_model_reader.h\"\n\n#include <istream>\n\n#include \"classifier/surf_mlp.h\"\n\nnamespace seeta {\nnamespace fd {\n\nbool SURFMLPModelReader::Read(std::istream* input,\n    seeta::fd::Classifier* model) {\n  bool is_read = false;\n  seeta::fd::SURFMLP* surf_mlp = dynamic_cast<seeta::fd::SURFMLP*>(model);\n  int32_t num_layer;\n  int32_t num_feat;\n  int32_t input_dim;\n  int32_t output_dim;\n  float thresh;\n\n  input->read(reinterpret_cast<char*>(&num_layer), sizeof(int32_t));\n  if (num_layer <= 0) {\n    is_read = false;  // @todo handle the errors and the following ones!!!\n  }\n  input->read(reinterpret_cast<char*>(&num_feat), sizeof(int32_t));\n  if (num_feat <= 0) {\n    is_read = false;\n  }\n\n  feat_id_buf_.resize(num_feat);\n  input->read(reinterpret_cast<char*>(feat_id_buf_.data()),\n    sizeof(int32_t) * num_feat);\n  for (int32_t i = 0; i < num_feat; i++)\n    surf_mlp->AddFeatureByID(feat_id_buf_[i]);\n\n  input->read(reinterpret_cast<char*>(&thresh), sizeof(float));\n  surf_mlp->SetThreshold(thresh);\n  input->read(reinterpret_cast<char*>(&input_dim), sizeof(int32_t));\n  if (input_dim <= 0) {\n    is_read = false;\n  }\n\n  for (int32_t i = 1; i < num_layer; i++) {\n    input->read(reinterpret_cast<char*>(&output_dim), sizeof(int32_t));\n    if (output_dim <= 0) {\n      is_read = false;\n    }\n\n    int32_t len = input_dim * output_dim;\n    weights_buf_.resize(len);\n    input->read(reinterpret_cast<char*>(weights_buf_.data()),\n      sizeof(float) * len);\n\n    bias_buf_.resize(output_dim);\n    input->read(reinterpret_cast<char*>(bias_buf_.data()),\n      sizeof(float) * output_dim);\n\n    if (i < num_layer - 1) {\n      surf_mlp->AddLayer(input_dim, output_dim, weights_buf_.data(),\n        bias_buf_.data());\n    } else {\n      surf_mlp->AddLayer(input_dim, output_dim, weights_buf_.data(),\n        bias_buf_.data(), true);\n    }\n    input_dim = output_dim;\n  }\n\n  is_read = !input->fail();\n\n  return is_read;\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/stdafx.cpp",
    "content": "#include \"stdafx.h\""
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/util/image_pyramid.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"util/image_pyramid.h\"\n\nnamespace seeta {\nnamespace fd {\n\nconst seeta::ImageData* ImagePyramid::GetNextScaleImage(float* scale_factor) {\n  if (scale_factor_ >= min_scale_) {\n    if (scale_factor != nullptr)\n      *scale_factor = scale_factor_;\n\n    width_scaled_ = static_cast<int32_t>(width1x_ * scale_factor_);\n    height_scaled_ = static_cast<int32_t>(height1x_ * scale_factor_);\n\n    seeta::ImageData src_img(width1x_, height1x_);\n    seeta::ImageData dest_img(width_scaled_, height_scaled_);\n    src_img.data = buf_img_;\n    dest_img.data = buf_img_scaled_;\n    seeta::fd::ResizeImage(src_img, &dest_img);\n    scale_factor_ *= scale_step_;\n\n    img_scaled_.data = buf_img_scaled_;\n    img_scaled_.width = width_scaled_;\n    img_scaled_.height = height_scaled_;\n    return &img_scaled_;\n  } else {\n    return nullptr;\n  }\n}\n\nvoid ImagePyramid::SetImage1x(const uint8_t* img_data, int32_t width,\n    int32_t height) {\n  if (width > buf_img_width_ || height > buf_img_height_) {\n    delete[] buf_img_;\n\n    buf_img_width_ = width;\n    buf_img_height_ = height;\n    buf_img_ = new uint8_t[width * height];\n  }\n\n  width1x_ = width;\n  height1x_ = height;\n  std::memcpy(buf_img_, img_data, width * height * sizeof(uint8_t));\n  scale_factor_ = max_scale_;\n  UpdateBufScaled();\n}\n\nvoid ImagePyramid::UpdateBufScaled() {\n  if (width1x_ == 0 || height1x_ == 0)\n    return;\n\n  int32_t max_width = static_cast<int32_t>(width1x_ * max_scale_ + 0.5);\n  int32_t max_height = static_cast<int32_t>(height1x_ * max_scale_ + 0.5);\n\n  if (max_width > buf_scaled_width_ || max_height > buf_scaled_height_) {\n    delete[] buf_img_scaled_;\n\n    buf_scaled_width_ = max_width;\n    buf_scaled_height_ = max_height;\n    buf_img_scaled_ = new uint8_t[max_width * max_height];\n\n    img_scaled_.data = nullptr;\n    img_scaled_.width = 0;\n    img_scaled_.height = 0;\n  }\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector/src/util/nms.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"util/nms.h\"\n\n#include <algorithm>\n#include <cstdint>\n#include <vector>\n\nnamespace seeta {\nnamespace fd {\n\nbool CompareBBox(const seeta::FaceInfo & a, const seeta::FaceInfo & b) {\n  return a.score > b.score;\n}\n\nvoid NonMaximumSuppression(std::vector<seeta::FaceInfo>* bboxes,\n  std::vector<seeta::FaceInfo>* bboxes_nms, float iou_thresh) {\n  bboxes_nms->clear();\n  std::sort(bboxes->begin(), bboxes->end(), seeta::fd::CompareBBox);\n\n  int32_t select_idx = 0;\n  int32_t num_bbox = static_cast<int32_t>(bboxes->size());\n  std::vector<int32_t> mask_merged(num_bbox, 0);\n  bool all_merged = false;\n\n  while (!all_merged) {\n    while (select_idx < num_bbox && mask_merged[select_idx] == 1)\n      select_idx++;\n    if (select_idx == num_bbox) {\n      all_merged = true;\n      continue;\n    }\n\n    bboxes_nms->push_back((*bboxes)[select_idx]);\n    mask_merged[select_idx] = 1;\n\n    seeta::Rect select_bbox = (*bboxes)[select_idx].bbox;\n    float area1 = static_cast<float>(select_bbox.width * select_bbox.height);\n    float x1 = static_cast<float>(select_bbox.x);\n    float y1 = static_cast<float>(select_bbox.y);\n    float x2 = static_cast<float>(select_bbox.x + select_bbox.width - 1);\n    float y2 = static_cast<float>(select_bbox.y + select_bbox.height - 1);\n\n    select_idx++;\n    for (int32_t i = select_idx; i < num_bbox; i++) {\n      if (mask_merged[i] == 1)\n        continue;\n\n      seeta::Rect & bbox_i = (*bboxes)[i].bbox;\n      float x = std::max<float>(x1, static_cast<float>(bbox_i.x));\n      float y = std::max<float>(y1, static_cast<float>(bbox_i.y));\n      float w = std::min<float>(x2, static_cast<float>(bbox_i.x + bbox_i.width - 1)) - x + 1;\n      float h = std::min<float>(y2, static_cast<float>(bbox_i.y + bbox_i.height - 1)) - y + 1;\n      if (w <= 0 || h <= 0)\n        continue;\n\n      float area2 = static_cast<float>(bbox_i.width * bbox_i.height);\n      float area_intersect = w * h;\n      float area_union = area1 + area2 - area_intersect;\n      if (static_cast<float>(area_intersect) / area_union > iou_thresh) {\n        mask_merged[i] = 1;\n        bboxes_nms->back().score += (*bboxes)[i].score;\n      }\n    }\n  }\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/CMakeLists.txt",
    "content": "#TBB library\ninclude_directories(${TBB_ROOT_DIR}/include)\n\ninclude_directories(${BOOST_INCLUDE_DIR})\n\nSET(SOURCE\n    src/CCNF_patch_expert.cpp\n\tsrc/LandmarkDetectionValidator.cpp\n    src/LandmarkDetectorFunc.cpp\n\tsrc/LandmarkDetectorModel.cpp\n    src/LandmarkDetectorUtils.cpp\n\tsrc/LandmarkDetectorParameters.cpp\n\tsrc/Patch_experts.cpp\n\tsrc/PAW.cpp\n    src/PDM.cpp\n\tsrc/SVR_patch_expert.cpp\n\tsrc/stdafx.cpp\n    src/classifier/lab_boosted_classifier.cpp\nsrc/classifier/mlp.cpp\nsrc/classifier/surf_mlp.cpp\nsrc/face_detection.cpp\nsrc/feat/lab_feature_map.cpp\nsrc/feat/surf_feature_map.cpp\nsrc/fust.cpp\nsrc/io/lab_boost_model_reader.cpp\nsrc/io/surf_mlp_model_reader.cpp\nsrc/util/image_pyramid.cpp\nsrc/util/nms.cpp\n)\n\nSET(HEADERS\n    include/CCNF_patch_expert.h\t\n    include/LandmarkCoreIncludes.h\n\tinclude/LandmarkDetectionValidator.h\n    include/LandmarkDetectorFunc.h\n\tinclude/LandmarkDetectorModel.h\n\tinclude/LandmarkDetectorParameters.h\n\tinclude/LandmarkDetectorUtils.h\n\tinclude/Patch_experts.h\t\n    include/PAW.h\n\tinclude/PDM.h\n\tinclude/SVR_patch_expert.h\t\t\n\tinclude/stdafx.h\ninclude/classifier/lab_boosted_classifier.h\ninclude/classifier/mlp.h\ninclude/classifier/surf_mlp.h\ninclude/classifier.h\ninclude/common.h\ninclude/detector.h\ninclude/face_detection.h\ninclude/feat/lab_feature_map.h\ninclude/feat/surf_feature_map.h\ninclude/feature_map.h\ninclude/fust.h\ninclude/io/lab_boost_model_reader.h\ninclude/io/surf_mlp_model_reader.h\ninclude/model_reader.h\ninclude/util/image_pyramid.h\ninclude/util/math_func.h\ninclude/util/nms.h\n)\n\ninclude_directories(./include)\ninclude_directories(../seetaFace/include)\ninclude_directories(${LandmarkDetector_SOURCE_DIR}/include)\n\n\nadd_library( LandmarkDetector ${SOURCE} ${HEADERS} )\n\ninstall (TARGETS LandmarkDetector DESTINATION lib)\ninstall (FILES ${HEADERS} DESTINATION include/FaceLivenessDetection)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/CCNF_patch_expert.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __CCNF_PATCH_EXPERT_h_\n#define __CCNF_PATCH_EXPERT_h_\n\n#include <opencv2/core/core.hpp>\n\n#include <map>\n#include <vector>\n\nnamespace LandmarkDetector\n{\n\n//===========================================================================\n/** \n\tA single Neuron response\n*/\nclass CCNF_neuron{\n\npublic:\n\n\t// Type of patch (0=raw,1=grad,3=depth, other types besides raw are not actually used now)\n\tint     neuron_type; \n\n\t// scaling of weights (needed as the energy of neuron might not be 1) \n\tdouble  norm_weights; \n\n\t// Weight bias\n\tdouble  bias;\n\n\t// Neural weights\n\tcv::Mat_<float> weights; \n\n\t// can have neural weight dfts that are calculated on the go as needed, this allows us not to recompute\n\t// the dft of the template each time, improving the speed of tracking\n\tstd::map<int, cv::Mat_<double> > weights_dfts;\n\n\t// the alpha associated with the neuron\n\tdouble alpha; \n\n\t// Default constructor\n\tCCNF_neuron(){;}\n\n\t// Copy constructor\n\tCCNF_neuron(const CCNF_neuron& other);\n\n\tvoid Read(std::ifstream &stream);\n\t// The im_dft, integral_img, and integral_img_sq are precomputed images for convolution speedups (they get set if passed in empty values)\n\tvoid Response(cv::Mat_<float> &im, cv::Mat_<double> &im_dft, cv::Mat &integral_img, cv::Mat &integral_img_sq, cv::Mat_<float> &resp);\n\n};\n\n//===========================================================================\n/**\nA CCNF patch expert\n*/\nclass CCNF_patch_expert{\npublic:\n    \n\t// Width and height of the patch expert support region\n\tint width;\n\tint height;             \n    \n\t// Collection of neurons for this patch expert\n\tstd::vector<CCNF_neuron> neurons;\n\n\t// Information about the vertex features (association potentials)\n\tstd::vector<int>\t\t\t\twindow_sizes;\n\tstd::vector<cv::Mat_<float> >\tSigmas;\n\tstd::vector<double>\t\t\t\tbetas;\n\n\t// How confident we are in the patch\n\tdouble   patch_confidence;\n\n\t// Default constructor\n\tCCNF_patch_expert(){;}\n\n\t// Copy constructor\t\t\n\tCCNF_patch_expert(const CCNF_patch_expert& other);\n\n\tvoid Read(std::ifstream &stream, std::vector<int> window_sizes, std::vector<std::vector<cv::Mat_<float> > > sigma_components);\n\n\t// actual work (can pass in an image and a potential depth image, if the CCNF is trained with depth)\n\tvoid Response(cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\n\t// Helper function to compute relevant sigmas\n\tvoid ComputeSigmas(std::vector<cv::Mat_<float> > sigma_components, int window_size);\n\t\n};\n  //===========================================================================\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/LandmarkCoreIncludes.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////\n\n\n#ifndef __LANDMARK_CORE_INCLUDES_h_\n#define __LANDMARK_CORE_INCLUDES_h_\n\n#include \"LandmarkDetectorModel.h\"\n#include \"LandmarkDetectorFunc.h\"\n#include \"LandmarkDetectorParameters.h\"\n#include \"LandmarkDetectorUtils.h\"\n\n//seetaFace includes\n#include \"face_detection.h\"\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/LandmarkDetectionValidator.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __LANDMARK_DETECTION_VALIDATOR_h_\n#define __LANDMARK_DETECTION_VALIDATOR_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n// System includes\n#include <vector>\n\n// Local includes\n#include \"PAW.h\"\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n//===========================================================================\n//\n// Checking if landmark detection was successful using an SVR regressor\n// Using multiple validators trained add different views\n// The regressor outputs -1 for ideal alignment and 1 for worst alignment\n//===========================================================================\nclass DetectionValidator\n{\n\t\t\npublic:    \n\t\n\t// What type of validator we're using - 0 - linear svr, 1 - feed forward neural net, 2 - convolutional neural net\n\tint validator_type;\n\n\t// The orientations of each of the landmark detection validator\n    std::vector<cv::Vec3d> orientations;\n\n\t// Piecewise affine warps to the reference shape (per orientation)\n    std::vector<PAW>     paws;\n\n\t//==========================================\n\t// Linear SVR\n\n\t// SVR biases\n    std::vector<double>  bs;\n\n\t// SVR weights\n    std::vector<cv::Mat_<double> > ws;\n\t\n\t//==========================================\n\t// Neural Network\n\n\t// Neural net weights\n    std::vector<std::vector<cv::Mat_<double> > > ws_nn;\n\n\t// What type of activation or output functions are used\n\t// 0 - sigmoid, 1 - tanh_opt, 2 - ReLU\n    std::vector<int> activation_fun;\n    std::vector<int> output_fun;\n\n\t//==========================================\n\t// Convolutional Neural Network\n\n\t// CNN layers for each view\n\t// view -> layer -> input maps -> kernels\n    std::vector<std::vector<std::vector<std::vector<cv::Mat_<float> > > > > cnn_convolutional_layers;\n\t// Bit ugly with so much nesting, but oh well\n    std::vector<std::vector<std::vector<std::vector<std::pair<int, cv::Mat_<double> > > > > > cnn_convolutional_layers_dft;\n    std::vector<std::vector<std::vector<float > > > cnn_convolutional_layers_bias;\n    std::vector< std::vector<int> > cnn_subsampling_layers;\n    std::vector< std::vector<cv::Mat_<float> > > cnn_fully_connected_layers;\n    std::vector< std::vector<float > > cnn_fully_connected_layers_bias;\n\t// 0 - convolutional, 1 - subsampling, 2 - fully connected\n    std::vector<std::vector<int> > cnn_layer_types;\n\t\n\t//==========================================\n\n\t// Normalisation for face validation\n    std::vector<cv::Mat_<double> > mean_images;\n    std::vector<cv::Mat_<double> > standard_deviations;\n\n\t// Default constructor\n\tDetectionValidator(){;}\n\n\t// Copy constructor\n\tDetectionValidator(const DetectionValidator& other);\n\n\t// Given an image, orientation and detected landmarks output the result of the appropriate regressor\n\tdouble Check(const cv::Vec3d& orientation, const cv::Mat_<uchar>& intensity_img, cv::Mat_<double>& detected_landmarks);\n\n\t// Reading in the model\n    void Read(std::string location);\n\t\t\t\n\t// Getting the closest view center based on orientation\n\tint GetViewId(const cv::Vec3d& orientation) const;\n\nprivate:\n\n\t// The actual regressor application on the image\n\n\t// Support Vector Regression (linear kernel)\n\tdouble CheckSVR(const cv::Mat_<double>& warped_img, int view_id);\n\n\t// Feed-forward Neural Network\n\tdouble CheckNN(const cv::Mat_<double>& warped_img, int view_id);\n\n\t// Convolutional Neural Network\n\tdouble CheckCNN(const cv::Mat_<double>& warped_img, int view_id);\n\n\t// A normalisation helper\n\tvoid NormaliseWarpedToVector(const cv::Mat_<double>& warped_img, cv::Mat_<double>& feature_vec, int view_id);\n\n};\n\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/LandmarkDetectorFunc.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n//  Header for all external CLM/CLNF/CLM-Z methods of interest to the user\n//\n//\n#ifndef __LANDMARK_DETECTOR_FUNC_h_\n#define __LANDMARK_DETECTOR_FUNC_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n#include \"LandmarkDetectorParameters.h\"\n#include \"LandmarkDetectorUtils.h\"\n#include \"LandmarkDetectorModel.h\"\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n\n\t//================================================================================================================\n\t// Landmark detection in videos, need to provide an image and model parameters (default values work well)\n\t// Optionally can provide a bounding box from which to start tracking\n\t//================================================================================================================\n\tbool DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, FaceModelParameters& params);\n\tbool DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> &depth_image, CLNF& clnf_model, FaceModelParameters& params);\n\n\tbool DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params);\n\tbool DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> &depth_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params);\n\n\t//================================================================================================================\n\t// Landmark detection in image, need to provide an image and optionally CLNF model together with parameters (default values work well)\n\t// Optionally can provide a bounding box in which detection is performed (this is useful if multiple faces are to be detected in images)\n\t//================================================================================================================\n\tbool DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, FaceModelParameters& params);\n\t// Providing a bounding box\n\tbool DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params);\n\n\t//================================================\n\t// CLM-Z versions\n\tbool DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> depth_image, CLNF& clnf_model, FaceModelParameters& params);\n\tbool DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> depth_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params);\n\n\t//================================================================\n\t// Helper function for getting head pose from CLNF parameters\n\n\t// Return the current estimate of the head pose, this can be either in camera or world coordinate space\n\t// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\n\tcv::Vec6d GetPoseCamera(const CLNF& clnf_model, double fx, double fy, double cx, double cy);\n\tcv::Vec6d GetPoseWorld(const CLNF& clnf_model, double fx, double fy, double cx, double cy);\n\t\n\t// Getting a head pose estimate from the currently detected landmarks, with appropriate correction for perspective\n\t// This is because rotation estimate under orthographic assumption is only correct close to the centre of the image\n\t// These methods attempt to correct for that\n\t// The pose returned can be either in camera or world coordinates\n\t// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\n\tcv::Vec6d GetCorrectedPoseCamera(const CLNF& clnf_model, double fx, double fy, double cx, double cy);\n\tcv::Vec6d GetCorrectedPoseWorld(const CLNF& clnf_model, double fx, double fy, double cx, double cy);\n\n\t//===========================================================================\n\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/LandmarkDetectorModel.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __LANDMARK_DETECTOR_MODEL_h_\n#define __LANDMARK_DETECTOR_MODEL_h_\n\n// OpenCV dependencies\n#include <opencv2/core/core.hpp>\n#include <opencv2/objdetect.hpp>\n\n//// dlib dependencies for face detection\n//#include <dlib/image_processing/frontal_face_detector.h>\n//#include <dlib/opencv.h>\n\n#include \"PDM.h\"\n#include \"Patch_experts.h\"\n#include \"LandmarkDetectionValidator.h\"\n#include \"LandmarkDetectorParameters.h\"\n\n//using namespace std;\n\n#include \"face_detection.h\"\n\nnamespace LandmarkDetector\n{\n    \n    // A main class containing all the modules required for landmark detection\n    // Face shape model\n    // Patch experts\n    // Optimization techniques\n    class CLNF{\n        \n    public:\n        \n        //===========================================================================\n        // Member variables that contain the model description\n        \n        // The linear 3D Point Distribution Model\n        PDM\t\t\t\t\tpdm;\n        // The set of patch experts\n        Patch_experts\t\tpatch_experts;\n        \n        // The local and global parameters describing the current model instance (current landmark detections)\n        \n        // Local parameters describing the non-rigid shape\n        cv::Mat_<double>    params_local;\n        \n        // Global parameters describing the rigid shape [scale, euler_x, euler_y, euler_z, tx, ty]\n        cv::Vec6d           params_global;\n        \n        // A collection of hierarchical CLNF models that can be used for refinement\n        std::vector<CLNF>\t\t\t\t\thierarchical_models;\n        std::vector<std::string>\t\t\t\t\thierarchical_model_names;\n        std::vector<std::vector<std::pair<int,int>>>\thierarchical_mapping;\n        std::vector<FaceModelParameters>\t\thierarchical_params;\n        \n        //==================== Helpers for face detection and landmark detection validation =========================================\n        \n        // Haar cascade classifier for face detection\n        cv::CascadeClassifier   face_detector_HAAR;\n        std::string                  face_detector_location;\n        \n        // A HOG SVM-struct based face detector\n        //\tdlib::frontal_face_detector face_detector_HOG;\n        \n        \n        //seetaface\n        seeta::FaceDetection *seetaface_detector;\n        std::string seetaface_detector_location;\n        \n        \n        \n        // Validate if the detected landmarks are correct using an SVR regressor\n        DetectionValidator\tlandmark_validator; \n        \n        // Indicating if landmark detection succeeded (based on SVR validator)\n        bool\t\t\t\tdetection_success; \n        \n        // Indicating if the tracking has been initialised (for video based tracking)\n        bool\t\t\t\ttracking_initialised;\n        \n        // The actual output of the regressor (-1 is perfect detection 1 is worst detection)\n        double\t\t\t\tdetection_certainty; \n        \n        // Indicator if eye model is there for eye detection\n        bool\t\t\t\teye_model = false;\n        \n        // the triangulation per each view (for drawing purposes only)\n        std::vector<cv::Mat_<int> >\ttriangulations;\n        \n        //===========================================================================\n        // Member variables that retain the state of the tracking (reflecting the state of the lastly tracked (detected) image\n        \n        // Lastly detect 2D model shape [x1,x2,...xn,y1,...yn]\n        cv::Mat_<double>\t\tdetected_landmarks;\n        \n        // The landmark detection likelihoods (combined and per patch expert)\n        double\t\t\t\tmodel_likelihood;\n        cv::Mat_<double>\t\tlandmark_likelihoods;\n        \n        // Keeping track of how many frames the tracker has failed in so far when tracking in videos\n        // This is useful for knowing when to initialise and reinitialise tracking\n        int failures_in_a_row;\n        \n        // A template of a face that last succeeded with tracking (useful for large motions in video)\n        cv::Mat_<uchar> face_template;\n        float face_x_pos;\n        float face_y_pos;\n        float face_width;\n        float face_height;\n        \n        // Useful when resetting or initialising the model closer to a specific location (when multiple faces are present)\n        cv::Point_<double> preference_det;\n        \n        // A default constructor\n        CLNF();\n        \n        std::string model_location_clnf;\n        std::string face_detector_location_clnf;\n        \n        bool inits();\n        \n        // Constructor from a model file\n        CLNF(std::string fname);\n        \n        // Copy constructor (makes a deep copy of the detector)\n        CLNF(const CLNF& other);\n        \n        // Assignment operator for lvalues (makes a deep copy of the detector)\n        CLNF & operator= (const CLNF& other);\n        \n        // Empty Destructor\tas the memory of every object will be managed by the corresponding libraries (no pointers)\n        ~CLNF(){if(this->seetaface_detector!=NULL){delete this->seetaface_detector;this->seetaface_detector = NULL;}}\n        \n        // Move constructor\n        CLNF(const CLNF&& other);\n        \n        // Assignment operator for rvalues\n        CLNF & operator= (const CLNF&& other);\n        \n        // Does the actual work - landmark detection\n        bool DetectLandmarks(const cv::Mat_<uchar> &image, const cv::Mat_<float> &depth, FaceModelParameters& params);\n        \n        // Gets the shape of the current detected landmarks in camera space (given camera calibration)\n        // Can only be called after a call to DetectLandmarksInVideo or DetectLandmarksInImage\n        cv::Mat_<double> GetShape(double fx, double fy, double cx, double cy) const;\n        \n        // A utility bounding box function\n        cv::Rect_<double> GetBoundingBox() const;\n        \n        // Reset the model (useful if we want to completelly reinitialise, or we want to track another video)\n        void Reset();\n        \n        // Reset the model, choosing the face nearest (x,y) where x and y are between 0 and 1.\n        void Reset(double x, double y);\n        \n        // Reading the model in\n        void Read(std::string name);\n        \n        // Helper reading function\n        void Read_CLNF(std::string clnf_location);\n        \n    private:\n        \n        // the speedup of RLMS using precalculated KDE responses (described in Saragih 2011 RLMS paper)\n        std::map<int, cv::Mat_<float> >\t\tkde_resp_precalc;\n        \n        // The model fitting: patch response computation and optimisation steps\n        bool Fit(const cv::Mat_<uchar>& intensity_image, const cv::Mat_<float>& depth_image, const std::vector<int>& window_sizes, const FaceModelParameters& parameters);\n        \n        // Mean shift computation that uses precalculated kernel density estimators (the one actually used)\n        void NonVectorisedMeanShift_precalc_kde(cv::Mat_<float>& out_mean_shifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<float> &dxs, const cv::Mat_<float> &dys, int resp_size, float a, int scale, int view_id, std::map<int, cv::Mat_<float> >& mean_shifts);\n        \n        // The actual model optimisation (update step), returns the model likelihood\n        double NU_RLMS(cv::Vec6d& final_global, cv::Mat_<double>& final_local, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Vec6d& initial_global, const cv::Mat_<double>& initial_local,\n                       const cv::Mat_<double>& base_shape, const cv::Matx22d& sim_img_to_ref, const cv::Matx22f& sim_ref_to_img, int resp_size, int view_idx, bool rigid, int scale, cv::Mat_<double>& landmark_lhoods, const FaceModelParameters& parameters);\n        \n        // Removing background image from the depth\n        bool RemoveBackground(cv::Mat_<float>& out_depth_image, const cv::Mat_<float>& depth_image);\n        \n        // Generating the weight matrix for the Weighted least squares\n        void GetWeightMatrix(cv::Mat_<float>& WeightMatrix, int scale, int view_id, const FaceModelParameters& parameters);\n        \n        //=======================================================\n        // Legacy functions that are not used at the moment\n        //=======================================================\n        \n        // Mean shift computation\t\n        void NonVectorisedMeanShift(cv::Mat_<double>& out_mean_shifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<double> &dxs, const cv::Mat_<double> &dys, int resp_size, double a, int scale, int view_id);\n        \n        // A vectorised version of mean shift (Not actually used)\n        void VectorisedMeanShift(cv::Mat_<double>& meanShifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<double> &iis, const cv::Mat_<double> &jjs, const cv::Mat_<double> &dxs, const cv::Mat_<double> &dys, const cv::Size patchSize, double sigma, int scale, int view_id);\n        \n    };\n    //===========================================================================\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/LandmarkDetectorParameters.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n//  Parameters of the CLNF, CLM-Z and CLM trackers\n#ifndef __LANDMARK_DETECTOR_PARAM_H\n#define __LANDMARK_DETECTOR_PARAM_H\n\n#include <vector>\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n    \n    struct FaceModelParameters\n    {\n        \n        // A number of RLMS or NU-RLMS iterations\n        int num_optimisation_iteration;\n        \n        // Should pose be limited to 180 degrees frontal\n        bool limit_pose;\n        \n        // Should face validation be done\n        bool validate_detections;\n        \n        // Landmark detection validator boundary for correct detection, the regressor output -1 (perfect alignment) 1 (bad alignment), \n        double validation_boundary;\n        \n        // Used when tracking is going well\n        std::vector<int> window_sizes_small;\n        \n        // Used when initialising or tracking fails\n        std::vector<int> window_sizes_init;\n        \n        // Used for the current frame\n        std::vector<int> window_sizes_current;\n        \n        // How big is the tracking template that helps with large motions\n        double face_template_scale;\t\n        bool use_face_template;\n        \n        // Where to load the model from\n        std::string model_location;\n        \n        // this is used for the smooting of response maps (KDE sigma)\n        double sigma;\n        \n        double reg_factor;\t// weight put to regularisation\n        double weight_factor; // factor for weighted least squares\n        \n        // should multiple views be considered during reinit\n        bool multi_view;\n        \n        // How often should face detection be used to attempt reinitialisation, every n frames (set to negative not to reinit)\n        int reinit_video_every;\n        \n        // Determining which face detector to use for (re)initialisation, HAAR is quicker but provides more false positives and is not goot for in-the-wild conditions\n        // Also HAAR detector can detect smaller faces while HOG SVM is only capable of detecting faces at least 70px across\n        enum FaceDetector{HAAR_DETECTOR, HOG_SVM_DETECTOR,SEETAFACE_DETECTOR};\n        \n        std::string face_detector_location;\n        FaceDetector curr_face_detector;\n        \n        \n        std::string seetaface_detector_location;\n        \n        // Should the results be visualised and reported to console\n        bool quiet_mode;\n        \n        // Should the model be refined hierarchically (if available)\n        bool refine_hierarchical;\n        \n        // Should the parameters be refined for different scales\n        bool refine_parameters;\n        \n        // Using the brand new and experimental gaze tracker\n        bool track_gaze;\n        \n        \n        float face_x_pos;\n        float face_y_pos;\n        float face_width;\n        float face_height;\n        \n        FaceModelParameters();\n        \n    public:\n        void init();\n    };\n    \n}\n\n#endif // __LANDMARK_DETECTOR_PARAM_H\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/LandmarkDetectorUtils.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n//  Header for all external CLNF/CLM-Z/CLM methods of interest to the user\n#ifndef __LANDMARK_DETECTOR_UTILS_h_\n#define __LANDMARK_DETECTOR_UTILS_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n#include \"LandmarkDetectorModel.h\"\n\n//seetaFace includes\n#include \"face_detection.h\"\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n    //===========================================================================\t\n    // Defining a set of useful utility functions to be used within CLNF\n    \n    \n    //=============================================================================================\n    // Helper functions for parsing the inputs\n    //=============================================================================================\n    void get_video_input_output_params(std::vector<std::string> &input_video_file, std::vector<std::string> &depth_dir,\n                                       std::vector<std::string> &output_files, std::vector<std::string> &output_video_files, bool& world_coordinates_pose, std::vector<std::string> &arguments);\n    \n    void get_camera_params(int &device, float &fx, float &fy, float &cx, float &cy, std::vector<std::string> &arguments);\n    \n    void get_image_input_output_params(std::vector<std::string> &input_image_files, std::vector<std::string> &input_depth_files, std::vector<std::string> &output_feature_files, std::vector<std::string> &output_pose_files, std::vector<std::string> &output_image_files,\n                                       std::vector<cv::Rect_<double>> &input_bounding_boxes, std::vector<std::string> &arguments);\n    \n    //===========================================================================\n    // Fast patch expert response computation (linear model across a ROI) using normalised cross-correlation\n    //===========================================================================\n    // This is a modified version of openCV code that allows for precomputed dfts of templates and for precomputed dfts of an image\n    // _img is the input img, _img_dft it's dft (optional), _integral_img the images integral image (optional), squared integral image (optional), \n    // templ is the template we are convolving with, templ_dfts it's dfts at varying windows sizes (optional),  _result - the output, method the type of convolution\n    void matchTemplate_m( const cv::Mat_<float>& input_img, cv::Mat_<double>& img_dft, cv::Mat& _integral_img, cv::Mat& _integral_img_sq, const cv::Mat_<float>&  templ, std::map<int, cv::Mat_<double> >& templ_dfts, cv::Mat_<float>& result, int method );\n    \n    //===========================================================================\n    // Point set and landmark manipulation functions\n    //===========================================================================\n    // Using Kabsch's algorithm for aligning shapes\n    //This assumes that align_from and align_to are already mean normalised\n    cv::Matx22d AlignShapesKabsch2D(const cv::Mat_<double>& align_from, const cv::Mat_<double>& align_to );\n    \n    //=============================================================================\n    // Basically Kabsch's algorithm but also allows the collection of points to be different in scale from each other\n    cv::Matx22d AlignShapesWithScale(cv::Mat_<double>& src, cv::Mat_<double> dst);\n    \n    //===========================================================================\n    // Visualisation functions\n    //===========================================================================\n    void Project(cv::Mat_<double>& dest, const cv::Mat_<double>& mesh, double fx, double fy, double cx, double cy);\n    void DrawBox(cv::Mat image, cv::Vec6d pose, cv::Scalar color, int thickness, float fx, float fy, float cx, float cy);\n    \n    // Drawing face bounding box\n    std::vector<std::pair<cv::Point, cv::Point>> CalculateBox(cv::Vec6d pose, float fx, float fy, float cx, float cy);\n    void DrawBox(std::vector<std::pair<cv::Point, cv::Point>> lines, cv::Mat image, cv::Scalar color, int thickness);\n    \n    std::vector<cv::Point2d> CalculateLandmarks(const cv::Mat_<double>& shape2D, cv::Mat_<int>& visibilities);\n    std::vector<cv::Point2d> CalculateLandmarks(CLNF& clnf_model);\n    void DrawLandmarks(cv::Mat img, std::vector<cv::Point> landmarks);\n    \n    void Draw(cv::Mat img, const cv::Mat_<double>& shape2D, const cv::Mat_<int>& visibilities);\n    void Draw(cv::Mat img, const cv::Mat_<double>& shape2D);\n    void Draw(cv::Mat img, const CLNF& clnf_model);\n    \n    \n    //===========================================================================\n    // Angle representation conversion helpers\n    //===========================================================================\n    cv::Matx33d Euler2RotationMatrix(const cv::Vec3d& eulerAngles);\n    \n    // Using the XYZ convention R = Rx * Ry * Rz, left-handed positive sign\n    cv::Vec3d RotationMatrix2Euler(const cv::Matx33d& rotation_matrix);\n    \n    cv::Vec3d Euler2AxisAngle(const cv::Vec3d& euler);\n    \n    cv::Vec3d AxisAngle2Euler(const cv::Vec3d& axis_angle);\n    \n    cv::Matx33d AxisAngle2RotationMatrix(const cv::Vec3d& axis_angle);\n    \n    cv::Vec3d RotationMatrix2AxisAngle(const cv::Matx33d& rotation_matrix);\n    \n    //============================================================================\n    // Face detection helpers\n    //============================================================================\n    \n    //Face detection using seetaFace\n    bool seetaDetectFace(std::vector< cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, seeta::FaceDetection *detector);\n    \n    \n    // Face detection using Haar cascade classifier\n    bool DetectFaces(std::vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity);\n    bool DetectFaces(std::vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, cv::CascadeClassifier& classifier);\n    // The preference point allows for disambiguation if multiple faces are present (pick the closest one), if it is not set the biggest face is chosen\n    bool DetectSingleFace(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity, cv::CascadeClassifier& classifier, const cv::Point preference = cv::Point(-1,-1));\n    \n    bool DetectSingleFaceSeetaFace(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity_image, seeta::FaceDetection *detector, cv::Point preference);\n    \n    // Face detection using HOG-SVM classifier\n    //\tbool DetectFacesHOG(vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, std::vector<double>& confidences);\n    //    bool DetectFacesHOG(vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, dlib::frontal_face_detector& classifier, std::vector<double>& confidences);\n    // The preference point allows for disambiguation if multiple faces are present (pick the closest one), if it is not set the biggest face is chosen\n    //    bool DetectSingleFaceHOG(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity, dlib::frontal_face_detector& classifier, double& confidence, const cv::Point preference = cv::Point(-1,-1));\n    \n    //============================================================================\n    // Matrix reading functionality\n    //============================================================================\n    \n    // Reading a matrix written in a binary format\n    void ReadMatBin(std::ifstream& stream, cv::Mat &output_mat);\n    \n    // Reading in a matrix from a stream\n    void ReadMat(std::ifstream& stream, cv::Mat& output_matrix);\n    \n    // Skipping comments (lines starting with # symbol)\n    void SkipComments(std::ifstream& stream);\n    \n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/PAW.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __PAW_h_\n#define __PAW_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\nnamespace LandmarkDetector\n{\n  //===========================================================================\n  /** \n      A Piece-wise Affine Warp\n\t  The ideas for this piece-wise affine triangular warping are taken from the\n\t  Active appearance models revisited by Iain Matthews and Simon Baker in IJCV 2004\n\t  This is used for both validation of landmark detection, and for avatar animation\n\n\t  The code is based on the CLM tracker by Jason Saragih et al.\n  */\t\n\nclass PAW{\npublic:    \n\t// Number of pixels after the warping to neutral shape\n    int     number_of_pixels; \n\n\t// Minimum x coordinate in destination\n    double  min_x;\n\n\t// minimum y coordinate in destination\n    double  min_y;\n\n\t// Destination points (landmarks to be warped to)\n\tcv::Mat_<double> destination_landmarks;\n\n\t// Destination points (landmarks to be warped from)\n\tcv::Mat_<double> source_landmarks;\n\n\t// Triangulation, each triangle is warped using an affine transform\n\tcv::Mat_<int> triangulation;\n\n\t// Triangle index, indicating which triangle each of destination pixels lies in\n\tcv::Mat_<int> triangle_id;\n\n\t// Indicating if the destination warped pixels is valid (lies within a face)\n\tcv::Mat_<uchar> pixel_mask;\n\n\t// A number of precomputed coefficients that are helpful for quick warping\n\t\n\t// affine coefficients for all triangles (see Matthews and Baker 2004)\n\t// 6 coefficients for each triangle (are computed from alpha and beta)\n\t// This is computed during each warp based on source landmarks\n\tcv::Mat_<double> coefficients;\n\n\t// matrix of (c,x,y) coeffs for alpha\n\tcv::Mat_<double> alpha;\n\n\t// matrix of (c,x,y) coeffs for alpha\n\tcv::Mat_<double> beta;\n\n\t// x-source of warped points\n\tcv::Mat_<float> map_x;\n\n\t// y-source of warped points\n\tcv::Mat_<float> map_y;\n\n\t// Default constructor\n    PAW(){;}\n\n\t// Construct a warp from a destination shape and triangulation\n\tPAW(const cv::Mat_<double>& destination_shape, const cv::Mat_<int>& triangulation);\n\n\t// The final optional argument allows for optimisation if the triangle indices from previous frame are known (for tracking in video)\n\tPAW(const cv::Mat_<double>& destination_shape, const cv::Mat_<int>& triangulation, double in_min_x, double in_min_y, double in_max_x, double in_max_y);\n\n\t// Copy constructor\n\tPAW(const PAW& other);\n\n\tvoid Read(std::ifstream &s);\n\n\t// The actual warping\n    void Warp(const cv::Mat& image_to_warp, cv::Mat& destination_image, const cv::Mat_<double>& landmarks_to_warp);\n\t\n\t// Compute coefficients needed for warping\n    void CalcCoeff();\n\n\t// Perform the actual warping\n    void WarpRegion(cv::Mat_<float>& map_x, cv::Mat_<float>& map_y);\n\n    inline int NumberOfLandmarks() const {return destination_landmarks.rows/2;} ;\n    inline int NumberOfTriangles() const {return triangulation.rows;} ;\n\n\t// The width and height of the warped image\n    inline int constWidth() const {return pixel_mask.cols;}\n    inline int Height() const {return pixel_mask.rows;}\n    \nprivate:\n\n\tint findTriangle(const cv::Point_<double>& point, const std::vector<std::vector<double>>& control_points, int guess = -1) const;\n\n  };\n  //===========================================================================\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/PDM.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __PDM_h_\n#define __PDM_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n#include \"LandmarkDetectorParameters.h\"\n\nnamespace LandmarkDetector\n{\n//===========================================================================\n// A linear 3D Point Distribution Model (constructed using Non-Rigid structure from motion or PCA)\n// Only describes the model but does not contain an instance of it (no local or global parameters are stored here)\n// Contains the utility functions to help manipulate the model\n\nclass PDM{\n\tpublic:    \n    \n\t\t// The 3D mean shape vector of the PDM [x1,..,xn,y1,...yn,z1,...,zn]\n\t\tcv::Mat_<double> mean_shape;\t\n  \n\t\t// Principal components or variation bases of the model, \n\t\tcv::Mat_<double> princ_comp;\t\n\n\t\t// Eigenvalues (variances) corresponding to the bases\n\t\tcv::Mat_<double> eigen_values;\t\n\n\t\tPDM(){;}\n\t\t\n\t\t// A copy constructor\n\t\tPDM(const PDM& other);\n\t\t\t\n        void Read(std::string location);\n\n\t\t// Number of vertices\n\t\tinline int NumberOfPoints() const {return mean_shape.rows/3;}\n\t\t\n\t\t// Listing the number of modes of variation\n\t\tinline int NumberOfModes() const {return princ_comp.cols;}\n\n\t\tvoid Clamp(cv::Mat_<float>& params_local, cv::Vec6d& params_global, const FaceModelParameters& params);\n\n\t\t// Compute shape in object space (3D)\n\t\tvoid CalcShape3D(cv::Mat_<double>& out_shape, const cv::Mat_<double>& params_local) const;\n\n\t\t// Compute shape in image space (2D)\n\t\tvoid CalcShape2D(cv::Mat_<double>& out_shape, const cv::Mat_<double>& params_local, const cv::Vec6d& params_global) const;\n    \n\t\t// provided the bounding box of a face and the local parameters (with optional rotation), generates the global parameters that can generate the face with the provided bounding box\n\t\tvoid CalcParams(cv::Vec6d& out_params_global, const cv::Rect_<double>& bounding_box, const cv::Mat_<double>& params_local, const cv::Vec3d rotation = cv::Vec3d(0.0));\n\n\t\t// Provided the landmark location compute global and local parameters best fitting it (can provide optional rotation for potentially better results)\n\t\tvoid CalcParams(cv::Vec6d& out_params_global, const cv::Mat_<double>& out_params_local, const cv::Mat_<double>& landmark_locations, const cv::Vec3d rotation = cv::Vec3d(0.0));\n\n\t\t// provided the model parameters, compute the bounding box of a face\n\t\tvoid CalcBoundingBox(cv::Rect& out_bounding_box, const cv::Vec6d& params_global, const cv::Mat_<double>& params_local);\n\n\t\t// Helpers for computing Jacobians, and Jacobians with the weight matrix\n\t\tvoid ComputeRigidJacobian(const cv::Mat_<float>& params_local, const cv::Vec6d& params_global, cv::Mat_<float> &Jacob, const cv::Mat_<float> W, cv::Mat_<float> &Jacob_t_w);\n\t\tvoid ComputeJacobian(const cv::Mat_<float>& params_local, const cv::Vec6d& params_global, cv::Mat_<float> &Jacobian, const cv::Mat_<float> W, cv::Mat_<float> &Jacob_t_w);\n\n\t\t// Given the current parameters, and the computed delta_p compute the updated parameters\n\t\tvoid UpdateModelParameters(const cv::Mat_<float>& delta_p, cv::Mat_<float>& params_local, cv::Vec6d& params_global);\n\n  };\n  //===========================================================================\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/Patch_experts.h",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#ifndef __Patch_experts_h_\n#define __Patch_experts_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\n\n#include \"SVR_patch_expert.h\"\n#include \"CCNF_patch_expert.h\"\n#include \"PDM.h\"\n\nnamespace LandmarkDetector\n{\n//===========================================================================\n/** \n    Combined class for all of the patch experts\n*/\nclass Patch_experts\n{\n\npublic:\n\n\t// The collection of SVR patch experts (for intensity/grayscale images), the experts are laid out scale->view->landmark\n    std::vector<std::vector<std::vector<Multi_SVR_patch_expert> > >\tsvr_expert_intensity;\n\t \n\t// The collection of SVR patch experts (for depth/range images), the experts are laid out scale->view->landmark\n    std::vector<std::vector<std::vector<Multi_SVR_patch_expert> > >\tsvr_expert_depth;\n\n\t// The collection of LNF (CCNF) patch experts (for intensity images), the experts are laid out scale->view->landmark\n    std::vector<std::vector<std::vector<CCNF_patch_expert> > >\t\t\tccnf_expert_intensity;\n\n\t// The node connectivity for CCNF experts, at different window sizes and corresponding to separate edge features\n    std::vector<std::vector<cv::Mat_<float> > >\t\t\t\t\tsigma_components;\n\n\t// The available scales for intensity patch experts\n    std::vector<double>\t\t\t\t\t\t\tpatch_scaling;\n\n\t// The available views for the patch experts at every scale (in radians)\n    std::vector<std::vector<cv::Vec3d> >               centers;\n\n\t// Landmark visibilities for each scale and view\n    std::vector<std::vector<cv::Mat_<int> > >          visibilities;\n\n\t// A default constructor\n\tPatch_experts(){;}\n\n\t// A copy constructor\n\tPatch_experts(const Patch_experts& other);\n\n\t// Returns the patch expert responses given a grayscale and an optional depth image.\n\t// Additionally returns the transform from the image coordinates to the response coordinates (and vice versa).\n\t// The computation also requires the current landmark locations to compute response around, the PDM corresponding to the desired model, and the parameters describing its instance\n\t// Also need to provide the size of the area of interest and the desired scale of analysis\n    void Response(std::vector<cv::Mat_<float> >& patch_expert_responses, cv::Matx22f& sim_ref_to_img, cv::Matx22d& sim_img_to_ref, const cv::Mat_<uchar>& grayscale_image, const cv::Mat_<float>& depth_image,\n\t\t\t\t\t\t\t const PDM& pdm, const cv::Vec6d& params_global, const cv::Mat_<double>& params_local, int window_size, int scale);\n\n\t// Getting the best view associated with the current orientation\n\tint GetViewIdx(const cv::Vec6d& params_global, int scale) const;\n\n\t// The number of views at a particular scale\n    inline int nViews(int scale = 0) const { return centers[scale].size(); }\n\n\t// Reading in all of the patch experts\n    void Read(std::vector<std::string> intensity_svr_expert_locations, std::vector<std::string> depth_svr_expert_locations, std::vector<std::string> intensity_ccnf_expert_locations);\n\n\n   \n\nprivate:\n    void Read_SVR_patch_experts(std::string expert_location, std::vector<cv::Vec3d>& centers, std::vector<cv::Mat_<int> >& visibility, std::vector<std::vector<Multi_SVR_patch_expert> >& patches, double& scale);\n    void Read_CCNF_patch_experts(std::string patchesFileLocation, std::vector<cv::Vec3d>& centers, std::vector<cv::Mat_<int> >& visibility, std::vector<std::vector<CCNF_patch_expert> >& patches, double& patchScaling);\n\t\n\n};\n \n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/SVR_patch_expert.h",
    "content": "///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n\n#ifndef __SVR_PATCH_EXPERT_h_\n#define __SVR_PATCH_EXPERT_h_\n\n// system includes\n#include <map>\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n\nnamespace LandmarkDetector\n{\n  //===========================================================================\n  /** \n      The classes describing the SVR patch experts\n  */\n\nclass SVR_patch_expert{\n\tpublic:\n\n\t\t// Type of data the patch expert operated on (0=raw, 1=grad)\n\t\tint     type;\t\t\t\t\t\n\n\t\t// Logistic regression slope\n\t\tdouble  scaling;\n\t\t\n\t\t// Logistic regression bias\n\t\tdouble  bias;\n\n\t\t// Support vector regression weights\n\t\tcv::Mat_<float> weights;\n\n\t\t// Discrete Fourier Transform of SVR weights, precalculated for speed (at different window sizes)\n\t\tstd::map<int, cv::Mat_<double> > weights_dfts;\n\n\t\t// Confidence of the current patch expert (used for NU_RLMS optimisation)\n\t\tdouble  confidence;\n\n\t\tSVR_patch_expert(){;}\n\t\t\n\t\t// A copy constructor\n\t\tSVR_patch_expert(const SVR_patch_expert& other);\n\n\t\t// Reading in the patch expert\n\t\tvoid Read(std::ifstream &stream);\n\n\t\t// The actual response computation from intensity or depth (for CLM-Z)\n\t\tvoid Response(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\t\tvoid ResponseDepth(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\n};\n//===========================================================================\n/**\n    A Multi-patch Expert that can include different patch types. Raw pixel values or image gradients\n*/\nclass Multi_SVR_patch_expert{\n\tpublic:\n\t\t\n\t\t// Width and height of the patch expert support area\n\t\tint width;\n\t\tint height;\t\t\t\t\t\t\n\n\t\t// Vector of all of the patch experts (different modalities) for this particular Multi patch expert\n\t\tstd::vector<SVR_patch_expert> svr_patch_experts;\t\n\n\t\t// Default constructor\n\t\tMulti_SVR_patch_expert(){;}\n\t\n\t\t// Copy constructor\t\t\t\t\n\t\tMulti_SVR_patch_expert(const Multi_SVR_patch_expert& other);\n\n\t\tvoid Read(std::ifstream &stream);\n\n\t\t// actual response computation from intensity of depth (for CLM-Z)\n\t\tvoid Response(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\t\tvoid ResponseDepth(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response);\n\n};\n}\n#endif\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/include/stdafx.h",
    "content": "﻿// Precompiled headers stuff\n\n#ifndef __STDAFX_h_\n#define __STDAFX_h_\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n#include <opencv2/objdetect.hpp>\n#include <opencv2/calib3d.hpp>\n#include <opencv2/imgcodecs.hpp>\n#include <opencv2/videoio/videoio.hpp>  // Video write\n#include <opencv2/videoio/videoio_c.h>  // Video write\n#include <opencv2/highgui/highgui.hpp>\n\n// IplImage stuff\n#include <opencv2/core/core_c.h>\n#include <opencv2/imgproc/imgproc_c.h>\n\n// C++ stuff\n#include <stdio.h>\n\n#include <fstream>\n#include <iostream>\n#include <sstream>\n\n#include <vector>\n#include <map>\n\n#define _USE_MATH_DEFINES\n#include <cmath>\n\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/clnf_general.txt",
    "content": "PDM pdms/In-the-wild_aligned_PDM_68.txt\nTriangulations tris_68.txt\nPatchesCCNF patch_experts/ccnf_patches_0.25_general.txt\nPatchesCCNF patch_experts/ccnf_patches_0.35_general.txt\nPatchesCCNF patch_experts/ccnf_patches_0.5_general.txt\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/main_clnf_general.txt",
    "content": "LandmarkDetector clnf_general.txt\nLandmarkDetector_part model_inner/main_clnf_inner.txt inner 17 0 18 1 19 2 20 3 21 4 22 5 23 6 24 7 25 8 26 9 27 10 28 11 29 12 30 13 31 14 32 15 33 16 34 17 35 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53 36 54 37 55 38 56 39 57 40 58 41 59 42 60 43 61 44 62 45 63 46 64 47 65 48 66 49 67 50\nLandmarkDetector_part model_eye/main_clnf_synth_left.txt left_eye_28 36 8 37 10 38 12 39 14 40 16 41 18\nLandmarkDetector_part model_eye/main_clnf_synth_right.txt right_eye_28 42 8 43 10 44 12 45 14 46 16 47 18\nFaceDetConversion haarAlign.txt\nDetectionValidator detection_validation/validator_general_68.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/model_eye/clnf_left_synth.txt",
    "content": "PDM pdms/pdm_28_l_eye_3D_closed.txt\nPatchesCCNF patch_experts/left_ccnf_patches_1.00_synth_lid_.txt\nPatchesCCNF patch_experts/left_ccnf_patches_1.50_synth_lid_.txt\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/model_eye/clnf_right_synth.txt",
    "content": "PDM pdms/pdm_28_eye_3D_closed.txt\nPatchesCCNF patch_experts/ccnf_patches_1.00_synth_lid_.txt\nPatchesCCNF patch_experts/ccnf_patches_1.50_synth_lid_.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/model_eye/main_clnf_synth_left.txt",
    "content": "LandmarkDetector clnf_left_synth.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/model_eye/main_clnf_synth_right.txt",
    "content": "LandmarkDetector clnf_right_synth.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/model_eye/pdms/pdm_28_eye_3D_closed.txt",
    "content": "# The mean values of the components (in mm)\n84\n1\n6\n-6.346689 \n-4.802645 \n-0.689206 \n3.584030 \n5.513861 \n3.969817 \n-0.143620 \n-4.705906 \n-10.151100 \n-7.784450 \n-4.315176 \n0.286655 \n4.895108 \n8.614140 \n11.209605 \n8.705321 \n5.165718 \n1.065652 \n-3.271212 \n-7.250731 \n-2.195097 \n-0.324358 \n1.476467 \n2.152288 \n1.307482 \n-0.562884 \n-2.363439 \n-3.039631 \n-0.630295 \n-4.947588 \n-6.865877 \n-5.261457 \n-1.074175 \n3.243115 \n5.161403 \n3.911768 \n2.351440 \n-0.095726 \n-1.959374 \n-2.862675 \n-2.316547 \n-1.049970 \n0.957222 \n2.555497 \n3.410716 \n3.797180 \n3.755154 \n3.510297 \n1.231211 \n1.933679 \n1.093865 \n-0.796012 \n-2.628691 \n-3.330879 \n-2.491440 \n-0.601842 \n-0.509775 \n0.210152 \n0.641715 \n0.532111 \n-0.054457 \n-0.774384 \n-1.205947 \n-0.879208 \n1.060595 \n-0.440952 \n-1.721653 \n-2.100358 \n-0.796095 \n1.616596 \n4.283196 \n1.517115 \n-0.872711 \n-2.176368 \n-2.010491 \n-0.559696 \n0.173887 \n0.125369 \n0.313958 \n0.629133 \n0.886248 \n0.934736 \n0.746213 \n0.431068 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n84\n10\n6\n-0.153386 0.025177 -0.054841 0.047942 0.005828 0.082724 0.142441 0.013459 0.069592 -0.174858 \n-0.134498 0.018961 -0.050725 0.046303 0.080169 -0.085614 0.141365 -0.000051 0.047046 -0.145781 \n-0.130919 -0.001976 -0.015781 0.021780 0.107202 -0.203982 0.058147 -0.013939 -0.001668 -0.032456 \n-0.144747 -0.025369 0.029522 -0.011262 0.071090 -0.203042 -0.058466 -0.020071 -0.048015 0.098735 \n-0.167881 -0.037515 0.058646 -0.033467 -0.007013 -0.083344 -0.140162 -0.014855 -0.064846 0.170941 \n-0.186769 -0.031299 0.054529 -0.031829 -0.081354 0.084994 -0.139085 -0.001345 -0.042300 0.141864 \n-0.190348 -0.010362 0.019585 -0.007306 -0.108386 0.203362 -0.055867 0.012543 0.006414 0.028538 \n-0.171298 0.014498 -0.028042 0.026941 -0.077441 0.217018 0.062715 0.021341 0.053763 -0.101612 \n0.207372 0.062591 -0.119437 -0.054907 0.076820 -0.048100 -0.135908 -0.057742 -0.004103 -0.009908 \n0.225329 0.015439 -0.023166 -0.064446 -0.087217 -0.069482 -0.099691 0.249926 0.080107 0.028214 \n0.234134 -0.004997 0.053270 -0.057837 -0.186495 -0.082705 -0.126911 0.442421 0.063530 0.192235 \n0.232555 -0.003035 0.055702 -0.033152 -0.076396 -0.011744 -0.117545 0.262249 -0.015413 0.155968 \n0.213285 0.008939 0.034917 0.022841 0.034538 0.123140 -0.030932 0.037313 -0.101512 -0.081439 \n0.184330 0.002781 0.040384 0.080832 0.080460 0.115659 0.055044 0.080257 -0.058662 -0.101912 \n0.152472 -0.045932 0.082773 0.055658 0.007529 0.054010 0.199419 0.134126 0.101864 -0.104416 \n0.165398 -0.018683 0.044018 0.098351 -0.012939 -0.024937 0.134807 -0.069897 -0.073109 0.022702 \n0.184402 -0.009464 0.017039 0.048177 -0.004151 -0.026121 0.058695 -0.257197 -0.110822 -0.032434 \n0.200832 0.002349 -0.027929 -0.031359 0.014172 -0.005684 0.042899 -0.435980 -0.098097 -0.013502 \n0.207618 0.029961 -0.076210 -0.091900 0.049907 -0.030279 0.028983 -0.273244 0.042669 0.005952 \n0.207309 0.052291 -0.099881 -0.114814 0.132728 -0.038736 -0.063320 -0.127790 0.094419 -0.019914 \n-0.149017 0.002774 -0.012207 0.018561 -0.033647 0.104700 0.125446 0.043084 -0.148359 0.076732 \n-0.154866 -0.007385 0.008461 0.004109 -0.049639 0.092397 -0.026746 0.005949 0.022710 0.000382 \n-0.153118 -0.016465 0.024583 -0.006636 -0.037945 0.028369 -0.160085 -0.033318 0.184813 -0.078178 \n-0.144797 -0.019145 0.026714 -0.007369 -0.005424 -0.049859 -0.196430 -0.051719 0.243027 -0.113007 \n-0.134779 -0.013860 0.013609 0.002322 0.028876 -0.096467 -0.114542 -0.038469 0.163204 -0.083593 \n-0.128933 -0.003706 -0.007052 0.016750 0.044871 -0.084172 0.037576 -0.001329 -0.007933 -0.007089 \n-0.130680 0.005372 -0.023172 0.027479 0.033190 -0.020171 0.170867 0.037942 -0.170086 0.071581 \n-0.138999 0.008057 -0.025308 0.028236 0.000666 0.058065 0.207285 0.056337 -0.228233 0.106257 \n-0.003984 -0.167992 0.019345 -0.008099 -0.110167 0.218829 -0.066444 0.011530 0.007137 0.033605 \n0.007213 -0.135126 -0.025388 0.056689 -0.092686 0.189792 0.024499 -0.006388 0.086896 -0.029308 \n0.017817 -0.117497 -0.053283 0.089178 -0.015735 0.045359 0.106064 -0.023203 0.119076 -0.070549 \n0.021618 -0.125432 -0.048000 0.070337 0.075609 -0.129863 0.130471 -0.029065 0.084827 -0.065960 \n0.016389 -0.154283 -0.012634 0.011202 0.127838 -0.233231 0.083422 -0.020541 0.004212 -0.018229 \n0.005192 -0.187148 0.032099 -0.053586 0.110358 -0.204194 -0.007521 -0.002624 -0.075546 0.044685 \n-0.005412 -0.204777 0.059994 -0.086075 0.033407 -0.059761 -0.089086 0.014191 -0.107727 0.085926 \n-0.010850 -0.196699 0.059026 -0.068250 -0.066030 0.122601 -0.115358 0.019806 -0.069346 0.083334 \n-0.074908 0.222322 -0.128680 0.106279 0.515992 -0.037382 -0.166184 0.282250 -0.092724 -0.029211 \n-0.049636 0.264882 0.162264 0.120013 0.170250 -0.115936 0.057634 0.079663 0.011493 -0.053341 \n-0.020457 0.260307 0.347209 0.044215 -0.051959 -0.147993 0.103852 -0.081857 -0.000604 -0.087831 \n0.008466 0.249892 0.434476 -0.046985 -0.170644 -0.092034 0.008838 -0.087026 -0.030030 0.019115 \n0.031496 0.229386 0.360031 -0.050497 -0.104395 0.079803 -0.054671 -0.073899 -0.062985 -0.023917 \n0.046520 0.191125 0.186443 0.028729 0.050283 0.218925 -0.101211 0.048101 -0.011525 -0.043765 \n0.051597 0.123490 -0.100835 0.113633 0.277072 0.404462 -0.158693 -0.089593 -0.059518 -0.031557 \n0.031390 0.166293 -0.221317 0.010778 -0.065560 0.197405 -0.013358 -0.038202 0.028971 0.015787 \n0.007963 0.191505 -0.289781 -0.098710 -0.251918 0.026406 0.025857 -0.011773 0.026086 0.020397 \n-0.015936 0.203274 -0.317303 -0.176584 -0.301025 -0.090120 0.038670 -0.012354 -0.000247 -0.036027 \n-0.039475 0.208053 -0.288236 -0.127299 -0.178571 -0.148602 0.040236 0.004113 -0.004457 -0.016551 \n-0.061014 0.208181 -0.221481 -0.003480 0.048193 -0.126544 0.030670 0.093612 -0.016308 -0.019164 \n-0.002022 -0.169263 0.029080 -0.021466 -0.029459 0.025877 -0.142794 -0.034375 0.183570 -0.078222 \n-0.000300 -0.172691 0.031731 -0.029747 0.010395 -0.055596 -0.169946 -0.050038 0.239789 -0.125691 \n0.004235 -0.165003 0.019162 -0.015569 0.044130 -0.113124 -0.088548 -0.042014 0.167473 -0.083327 \n0.008925 -0.150706 -0.001258 0.012743 0.051988 -0.113014 0.053667 -0.014997 0.008933 0.024161 \n0.011023 -0.138177 -0.017566 0.038590 0.029375 -0.055348 0.173359 0.015191 -0.142999 0.133883 \n0.009301 -0.134752 -0.020213 0.046851 -0.010464 0.026098 0.200464 0.030859 -0.199272 0.181460 \n0.004768 -0.142435 -0.007651 0.032701 -0.044203 0.083633 0.119139 0.022826 -0.126885 0.138947 \n0.000078 -0.156729 0.012766 0.004408 -0.052075 0.083550 -0.023030 -0.004196 0.031710 0.031351 \n0.128814 0.003571 0.003480 -0.114195 0.042965 0.013538 0.081206 0.030733 0.036469 -0.042832 \n0.084713 0.044573 0.016014 -0.075237 -0.003338 -0.037950 0.095804 -0.008646 0.106748 0.104806 \n-0.014166 0.059774 0.028433 -0.073564 -0.028456 -0.056347 0.078713 -0.035782 0.114925 0.182190 \n-0.109902 0.040269 0.033462 -0.110156 -0.017675 -0.030878 0.039946 -0.034778 0.056210 0.143990 \n-0.146414 -0.002516 0.028155 -0.163578 0.022690 0.023539 0.002211 -0.006223 -0.035002 0.012582 \n-0.102313 -0.043518 0.015622 -0.202536 0.068994 0.075027 -0.012387 0.033157 -0.105281 -0.135056 \n-0.003434 -0.058719 0.003203 -0.204209 0.094112 0.093425 0.004704 0.060292 -0.113458 -0.212440 \n0.099074 -0.043950 -0.000509 -0.171174 0.086675 0.069487 0.039093 0.061946 -0.059545 -0.184463 \n-0.054913 -0.004523 0.015086 0.231138 -0.115127 0.082549 0.124313 -0.000052 0.180789 0.076509 \n-0.038477 -0.010328 -0.025919 0.225952 -0.098722 -0.012521 -0.024397 -0.078886 -0.051188 -0.094188 \n-0.015599 -0.034327 -0.050684 0.208434 -0.145282 -0.134450 -0.225097 -0.057805 -0.253738 -0.159062 \n0.013759 -0.046657 -0.031453 0.191733 -0.202303 -0.154083 -0.244663 -0.006407 -0.264460 -0.184882 \n0.039393 -0.033167 -0.026588 0.194395 -0.163302 -0.053331 -0.095733 0.027393 -0.169484 -0.254320 \n0.055992 -0.018520 -0.024499 0.236434 -0.057326 -0.072106 -0.011848 0.151259 -0.049264 -0.117501 \n0.068631 -0.013724 0.027292 0.231437 -0.037554 0.034751 0.337456 0.134888 0.312055 -0.132196 \n0.056256 0.022936 -0.019524 0.146331 0.032207 -0.007908 -0.035410 -0.090636 -0.012725 0.205397 \n0.042182 0.043848 -0.041760 0.116811 0.078314 0.051616 -0.106453 -0.228687 0.036561 0.260986 \n0.019928 0.055883 -0.059556 0.147688 0.109694 0.020391 -0.066574 -0.102694 0.128555 0.213173 \n-0.009409 0.051946 -0.050194 0.162935 0.085636 -0.028224 -0.126599 0.046702 0.099383 0.240695 \n-0.036452 0.030786 -0.028097 0.176770 -0.015768 0.029793 -0.046117 0.020525 0.047330 0.165226 \n0.034441 -0.022881 0.015629 -0.156918 0.055237 0.036211 0.045403 0.038219 -0.063438 -0.053697 \n-0.007396 -0.031398 0.017754 -0.172866 0.059650 0.047306 0.028721 0.038858 -0.090778 -0.069213 \n-0.050587 -0.024716 0.023247 -0.172154 0.048419 0.037544 0.009258 0.022863 -0.065299 -0.050654 \n-0.069827 -0.006750 0.028891 -0.155196 0.028124 0.012648 -0.001577 -0.000397 -0.001922 -0.008919 \n-0.053849 0.011973 0.031379 -0.131930 0.010655 -0.012793 0.002562 -0.017294 0.062223 0.031533 \n-0.012020 0.020487 0.029254 -0.115987 0.006243 -0.023880 0.019242 -0.017932 0.089559 0.047033 \n0.031165 0.013807 0.023762 -0.116702 0.017473 -0.014122 0.038694 -0.001937 0.064074 0.028511 \n0.050412 -0.004156 0.018118 -0.133655 0.037766 0.010766 0.049531 0.021320 0.000702 -0.013208 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n10\n6\n111.570907 32.910130 22.463857 3.183176 1.531432 1.381999 0.770569 0.635129 0.500532 0.422800 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/model_eye/pdms/pdm_28_l_eye_3D_closed.txt",
    "content": "# The mean values of the components (in mm)\n84\n1\n6\n-5.513861 \n-3.584030 \n0.689206 \n4.802645 \n6.346689 \n4.705906 \n0.143620 \n-3.969817 \n-11.209605 \n-8.614140 \n-4.895108 \n-0.286655 \n4.315176 \n7.784450 \n10.151100 \n7.250731 \n3.271212 \n-1.065652 \n-5.165718 \n-8.705321 \n-1.476467 \n0.324358 \n2.195097 \n3.039631 \n2.363439 \n0.562884 \n-1.307482 \n-2.152288 \n-1.074175 \n-5.261457 \n-6.865877 \n-4.947588 \n-0.630295 \n3.911768 \n5.161403 \n3.243115 \n0.957222 \n-1.049970 \n-2.316547 \n-2.862675 \n-1.959374 \n-0.095726 \n2.351440 \n3.510297 \n3.755154 \n3.797180 \n3.410716 \n2.555497 \n1.093865 \n1.933679 \n1.231211 \n-0.601842 \n-2.491440 \n-3.330879 \n-2.628691 \n-0.796012 \n-0.054457 \n0.532111 \n0.641715 \n0.210152 \n-0.509775 \n-0.879208 \n-1.205947 \n-0.774384 \n4.283196 \n1.616596 \n-0.796095 \n-2.100358 \n-1.721653 \n-0.440952 \n1.060595 \n-0.559696 \n-2.010491 \n-2.176368 \n-0.872711 \n1.517115 \n0.313958 \n0.125369 \n0.173887 \n0.431068 \n0.746213 \n0.934736 \n0.886248 \n0.629133 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n84\n10\n6\n0.167881 0.037515 -0.058646 0.033467 0.007013 0.083344 0.140162 0.014855 0.064846 -0.170941 \n0.144747 0.025369 -0.029522 0.011262 -0.071090 0.203042 0.058466 0.020071 0.048015 -0.098735 \n0.130919 0.001976 0.015781 -0.021780 -0.107202 0.203982 -0.058147 0.013939 0.001668 0.032456 \n0.134498 -0.018961 0.050725 -0.046303 -0.080169 0.085614 -0.141365 0.000051 -0.047046 0.145781 \n0.153386 -0.025177 0.054841 -0.047942 -0.005828 -0.082724 -0.142441 -0.013459 -0.069592 0.174858 \n0.171298 -0.014498 0.028042 -0.026941 0.077441 -0.217018 -0.062715 -0.021341 -0.053763 0.101612 \n0.190348 0.010362 -0.019585 0.007306 0.108386 -0.203362 0.055867 -0.012543 -0.006414 -0.028538 \n0.186769 0.031299 -0.054529 0.031829 0.081354 -0.084994 0.139085 0.001345 0.042300 -0.141864 \n-0.152472 0.045932 -0.082773 -0.055658 -0.007529 -0.054010 -0.199419 -0.134126 -0.101864 0.104416 \n-0.184330 -0.002781 -0.040384 -0.080832 -0.080460 -0.115659 -0.055044 -0.080257 0.058662 0.101912 \n-0.213285 -0.008939 -0.034917 -0.022841 -0.034538 -0.123140 0.030932 -0.037313 0.101512 0.081439 \n-0.232555 0.003035 -0.055702 0.033152 0.076396 0.011744 0.117545 -0.262249 0.015413 -0.155968 \n-0.234134 0.004997 -0.053270 0.057837 0.186495 0.082705 0.126911 -0.442421 -0.063530 -0.192235 \n-0.225329 -0.015439 0.023166 0.064446 0.087217 0.069482 0.099691 -0.249926 -0.080107 -0.028214 \n-0.207372 -0.062591 0.119437 0.054907 -0.076820 0.048100 0.135908 0.057742 0.004103 0.009908 \n-0.207309 -0.052291 0.099881 0.114814 -0.132728 0.038736 0.063320 0.127790 -0.094419 0.019914 \n-0.207618 -0.029961 0.076210 0.091900 -0.049907 0.030279 -0.028983 0.273244 -0.042669 -0.005952 \n-0.200832 -0.002349 0.027929 0.031359 -0.014172 0.005684 -0.042899 0.435980 0.098097 0.013502 \n-0.184402 0.009464 -0.017039 -0.048177 0.004151 0.026121 -0.058695 0.257197 0.110822 0.032434 \n-0.165398 0.018683 -0.044018 -0.098351 0.012939 0.024937 -0.134807 0.069897 0.073109 -0.022702 \n0.153118 0.016465 -0.024583 0.006636 0.037945 -0.028369 0.160085 0.033318 -0.184813 0.078178 \n0.154866 0.007385 -0.008461 -0.004109 0.049639 -0.092397 0.026746 -0.005949 -0.022710 -0.000382 \n0.149017 -0.002774 0.012207 -0.018561 0.033647 -0.104700 -0.125446 -0.043084 0.148359 -0.076732 \n0.138999 -0.008057 0.025308 -0.028236 -0.000666 -0.058065 -0.207285 -0.056337 0.228233 -0.106257 \n0.130680 -0.005372 0.023172 -0.027479 -0.033190 0.020171 -0.170867 -0.037942 0.170086 -0.071581 \n0.128933 0.003706 0.007052 -0.016750 -0.044871 0.084172 -0.037576 0.001329 0.007933 0.007089 \n0.134779 0.013860 -0.013609 -0.002322 -0.028876 0.096467 0.114542 0.038469 -0.163204 0.083593 \n0.144797 0.019145 -0.026714 0.007369 0.005424 0.049859 0.196430 0.051719 -0.243027 0.113007 \n0.016389 -0.154283 -0.012634 0.011202 0.127838 -0.233231 0.083422 -0.020541 0.004212 -0.018229 \n0.021618 -0.125432 -0.048000 0.070337 0.075609 -0.129863 0.130471 -0.029065 0.084827 -0.065960 \n0.017817 -0.117497 -0.053283 0.089178 -0.015735 0.045359 0.106064 -0.023203 0.119076 -0.070549 \n0.007213 -0.135126 -0.025388 0.056689 -0.092686 0.189792 0.024499 -0.006388 0.086896 -0.029308 \n-0.003984 -0.167992 0.019345 -0.008099 -0.110167 0.218829 -0.066444 0.011530 0.007137 0.033605 \n-0.010850 -0.196699 0.059026 -0.068250 -0.066030 0.122601 -0.115358 0.019806 -0.069346 0.083334 \n-0.005412 -0.204777 0.059994 -0.086075 0.033407 -0.059761 -0.089086 0.014191 -0.107727 0.085926 \n0.005192 -0.187148 0.032099 -0.053586 0.110358 -0.204194 -0.007521 -0.002624 -0.075546 0.044685 \n0.051597 0.123490 -0.100835 0.113633 0.277072 0.404462 -0.158693 -0.089593 -0.059518 -0.031557 \n0.046520 0.191125 0.186443 0.028729 0.050283 0.218925 -0.101211 0.048101 -0.011525 -0.043765 \n0.031496 0.229386 0.360031 -0.050497 -0.104395 0.079803 -0.054671 -0.073899 -0.062985 -0.023917 \n0.008466 0.249892 0.434476 -0.046985 -0.170644 -0.092034 0.008838 -0.087026 -0.030030 0.019115 \n-0.020457 0.260307 0.347209 0.044215 -0.051959 -0.147993 0.103852 -0.081857 -0.000604 -0.087831 \n-0.049636 0.264882 0.162264 0.120013 0.170250 -0.115936 0.057634 0.079663 0.011493 -0.053341 \n-0.074908 0.222322 -0.128680 0.106279 0.515992 -0.037382 -0.166184 0.282250 -0.092724 -0.029211 \n-0.061014 0.208181 -0.221481 -0.003480 0.048193 -0.126544 0.030670 0.093612 -0.016308 -0.019164 \n-0.039475 0.208053 -0.288236 -0.127299 -0.178571 -0.148602 0.040236 0.004113 -0.004457 -0.016551 \n-0.015936 0.203274 -0.317303 -0.176584 -0.301025 -0.090120 0.038670 -0.012354 -0.000247 -0.036027 \n0.007963 0.191505 -0.289781 -0.098710 -0.251918 0.026406 0.025857 -0.011773 0.026086 0.020397 \n0.031390 0.166293 -0.221317 0.010778 -0.065560 0.197405 -0.013358 -0.038202 0.028971 0.015787 \n0.004235 -0.165003 0.019162 -0.015569 0.044130 -0.113124 -0.088548 -0.042014 0.167473 -0.083327 \n-0.000300 -0.172691 0.031731 -0.029747 0.010395 -0.055596 -0.169946 -0.050038 0.239789 -0.125691 \n-0.002022 -0.169263 0.029080 -0.021466 -0.029459 0.025877 -0.142794 -0.034375 0.183570 -0.078222 \n0.000078 -0.156729 0.012766 0.004408 -0.052075 0.083550 -0.023030 -0.004196 0.031710 0.031351 \n0.004768 -0.142435 -0.007651 0.032701 -0.044203 0.083633 0.119139 0.022826 -0.126885 0.138947 \n0.009301 -0.134752 -0.020213 0.046851 -0.010464 0.026098 0.200464 0.030859 -0.199272 0.181460 \n0.011023 -0.138177 -0.017566 0.038590 0.029375 -0.055348 0.173359 0.015191 -0.142999 0.133883 \n0.008925 -0.150706 -0.001258 0.012743 0.051988 -0.113014 0.053667 -0.014997 0.008933 0.024161 \n-0.146414 -0.002516 0.028155 -0.163578 0.022690 0.023539 0.002211 -0.006223 -0.035002 0.012582 \n-0.109902 0.040269 0.033462 -0.110156 -0.017675 -0.030878 0.039946 -0.034778 0.056210 0.143990 \n-0.014166 0.059774 0.028433 -0.073564 -0.028456 -0.056347 0.078713 -0.035782 0.114925 0.182190 \n0.084713 0.044573 0.016014 -0.075237 -0.003338 -0.037950 0.095804 -0.008646 0.106748 0.104806 \n0.128814 0.003571 0.003480 -0.114195 0.042965 0.013538 0.081206 0.030733 0.036469 -0.042832 \n0.099074 -0.043950 -0.000509 -0.171174 0.086675 0.069487 0.039093 0.061946 -0.059545 -0.184463 \n-0.003434 -0.058719 0.003203 -0.204209 0.094112 0.093425 0.004704 0.060292 -0.113458 -0.212440 \n-0.102313 -0.043518 0.015622 -0.202536 0.068994 0.075027 -0.012387 0.033157 -0.105281 -0.135056 \n0.068631 -0.013724 0.027292 0.231437 -0.037554 0.034751 0.337456 0.134888 0.312055 -0.132196 \n0.055992 -0.018520 -0.024499 0.236434 -0.057326 -0.072106 -0.011848 0.151259 -0.049264 -0.117501 \n0.039393 -0.033167 -0.026588 0.194395 -0.163302 -0.053331 -0.095733 0.027393 -0.169484 -0.254320 \n0.013759 -0.046657 -0.031453 0.191733 -0.202303 -0.154083 -0.244663 -0.006407 -0.264460 -0.184882 \n-0.015599 -0.034327 -0.050684 0.208434 -0.145282 -0.134450 -0.225097 -0.057805 -0.253738 -0.159062 \n-0.038477 -0.010328 -0.025919 0.225952 -0.098722 -0.012521 -0.024397 -0.078886 -0.051188 -0.094188 \n-0.054913 -0.004523 0.015086 0.231138 -0.115127 0.082549 0.124313 -0.000052 0.180789 0.076509 \n-0.036452 0.030786 -0.028097 0.176770 -0.015768 0.029793 -0.046117 0.020525 0.047330 0.165226 \n-0.009409 0.051946 -0.050194 0.162935 0.085636 -0.028224 -0.126599 0.046702 0.099383 0.240695 \n0.019928 0.055883 -0.059556 0.147688 0.109694 0.020391 -0.066574 -0.102694 0.128555 0.213173 \n0.042182 0.043848 -0.041760 0.116811 0.078314 0.051616 -0.106453 -0.228687 0.036561 0.260986 \n0.056256 0.022936 -0.019524 0.146331 0.032207 -0.007908 -0.035410 -0.090636 -0.012725 0.205397 \n-0.050587 -0.024716 0.023247 -0.172154 0.048419 0.037544 0.009258 0.022863 -0.065299 -0.050654 \n-0.007396 -0.031398 0.017754 -0.172866 0.059650 0.047306 0.028721 0.038858 -0.090778 -0.069213 \n0.034441 -0.022881 0.015629 -0.156918 0.055237 0.036211 0.045403 0.038219 -0.063438 -0.053697 \n0.050412 -0.004156 0.018118 -0.133655 0.037766 0.010766 0.049531 0.021320 0.000702 -0.013208 \n0.031165 0.013807 0.023762 -0.116702 0.017473 -0.014122 0.038694 -0.001937 0.064074 0.028511 \n-0.012020 0.020487 0.029254 -0.115987 0.006243 -0.023880 0.019242 -0.017932 0.089559 0.047033 \n-0.053849 0.011973 0.031379 -0.131930 0.010655 -0.012793 0.002562 -0.017294 0.062223 0.031533 \n-0.069827 -0.006750 0.028891 -0.155196 0.028124 0.012648 -0.001577 -0.000397 -0.001922 -0.008919 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n10\n6\n111.570907 32.910130 22.463857 3.183176 1.531432 1.381999 0.770569 0.635129 0.500532 0.422800 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/model_inner/clnf_inner.txt",
    "content": "PDM pdms/pdm_51_inner.txt\nPatchesCCNF patch_experts/ccnf_patches_1.00_inner.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/model_inner/main_clnf_inner.txt",
    "content": "LandmarkDetector clnf_inner.txt"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/model_inner/pdms/pdm_51_inner.txt",
    "content": "# The mean values of the components (in mm)\n153\n1\n6\n-61.487065 \n-51.509332 \n-37.921431 \n-24.057516 \n-11.630855 \n12.064575 \n25.080979 \n38.237788 \n50.986671 \n59.712693 \n0.585413 \n0.765027 \n0.986699 \n1.246623 \n-15.032333 \n-7.411138 \n0.343475 \n8.042640 \n14.960422 \n-46.398983 \n-37.943690 \n-28.132841 \n-19.916545 \n-28.549994 \n-38.380366 \n19.002468 \n27.657580 \n37.180192 \n44.841001 \n37.909841 \n28.497442 \n-29.562845 \n-17.967543 \n-7.015967 \n0.052801 \n8.043929 \n18.433173 \n28.157774 \n18.519833 \n8.494683 \n-0.070888 \n-7.892087 \n-18.695338 \n-24.992703 \n-7.290790 \n-0.039765 \n8.052638 \n23.868342 \n8.019854 \n-0.212622 \n-7.631916 \n-37.103038 \n-46.958179 \n-50.611833 \n-50.104582 \n-46.101873 \n-46.640281 \n-50.673103 \n-50.958467 \n-46.902842 \n-37.264890 \n-31.676015 \n-21.117514 \n-10.737646 \n0.158715 \n12.338379 \n14.273187 \n15.946075 \n14.281476 \n12.541686 \n-25.706010 \n-31.203003 \n-31.244206 \n-25.361289 \n-23.810857 \n-23.539489 \n-25.401771 \n-31.558920 \n-31.146069 \n-25.831501 \n-23.695860 \n-23.829951 \n39.570821 \n32.160420 \n28.582469 \n30.231097 \n28.688419 \n32.668615 \n39.377912 \n46.579784 \n49.241136 \n49.857061 \n49.336194 \n46.680342 \n39.469109 \n35.142334 \n35.627156 \n35.092954 \n39.393934 \n40.374411 \n41.028762 \n40.536741 \n27.039832 \n20.931821 \n14.543527 \n7.608953 \n2.074720 \n2.333803 \n7.566715 \n14.068191 \n20.304220 \n25.944547 \n-0.320469 \n-8.941564 \n-17.912415 \n-26.452684 \n-10.746347 \n-14.216881 \n-16.665096 \n-14.180856 \n-11.109900 \n19.097556 \n15.606980 \n14.061942 \n12.235130 \n11.967495 \n13.450376 \n12.176099 \n13.685622 \n15.227482 \n18.115394 \n13.233978 \n11.664752 \n4.879596 \n-8.128708 \n-14.406876 \n-15.587202 \n-14.334949 \n-7.381702 \n4.647518 \n-7.847965 \n-15.774312 \n-16.972084 \n-15.841250 \n-8.462756 \n2.392204 \n-13.202273 \n-14.479181 \n-13.135758 \n2.088533 \n-13.195614 \n-14.587587 \n-13.062554 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n153\n32\n6\n0.048215 0.005826 0.019250 0.055175 0.004152 -0.240330 -0.093805 0.065577 -0.028184 0.043409 0.171981 0.101208 0.077786 -0.095916 0.166254 0.029127 0.009577 0.016140 0.053935 0.072393 -0.052710 -0.000041 -0.149995 0.088505 -0.021293 0.097688 -0.043028 0.145707 -0.058863 -0.018754 -0.055098 0.283637 \n0.058869 0.003249 0.041189 -0.001982 0.025312 -0.192894 -0.025140 -0.032292 -0.197517 0.118099 0.225632 0.096284 0.114517 -0.081005 0.139197 -0.078138 -0.126771 -0.136139 -0.046585 0.090782 -0.008204 -0.019328 -0.091391 0.060952 0.007995 0.018184 0.028784 0.048866 -0.015436 0.006046 -0.004828 0.138112 \n0.031959 -0.001668 0.061660 -0.005340 0.003024 -0.169106 0.025180 -0.033297 -0.250054 0.214220 0.125180 0.023097 0.034194 0.014102 0.146834 -0.076318 -0.060218 -0.123413 -0.083792 0.072286 0.019266 0.024247 -0.000997 0.006645 0.024498 0.012834 0.062842 -0.003123 -0.023415 -0.025680 0.048748 -0.026094 \n-0.001316 0.001415 0.073054 0.021599 -0.024599 -0.145333 0.048714 0.025206 -0.239694 0.291975 0.015222 -0.075696 -0.069737 0.103674 0.137956 -0.059660 0.017648 -0.060510 -0.113918 0.036965 0.012494 0.050988 -0.008944 -0.006526 0.024140 0.036188 0.105884 0.010739 -0.032776 -0.034197 0.114925 -0.102668 \n-0.035824 0.001344 0.096519 0.024048 -0.043021 -0.102931 0.068178 0.077011 -0.175251 0.344608 -0.084700 -0.152937 -0.159712 0.163325 0.067623 -0.042989 0.040499 -0.059369 -0.151509 -0.008246 -0.025670 0.086600 -0.038968 -0.005819 0.081015 0.001095 0.078814 0.006911 -0.081881 -0.006646 0.188712 -0.148058 \n0.071337 -0.000209 0.075707 -0.111516 0.029058 0.178910 -0.041829 0.002022 0.098852 -0.063920 0.157150 0.263712 0.153704 -0.143048 0.009165 0.169592 -0.042091 -0.015215 0.060386 0.092701 -0.011412 0.161957 -0.030557 -0.139962 0.185329 -0.000155 0.099424 0.016836 -0.080710 -0.067204 -0.083318 -0.183333 \n0.043699 0.001130 0.048352 -0.082623 0.002693 0.222765 -0.007747 0.047357 0.126133 -0.011240 0.105147 0.176046 0.204156 -0.110730 0.095212 0.125733 -0.031262 -0.051717 -0.001980 0.069208 -0.016668 0.102606 -0.038347 -0.050735 0.155753 0.053377 0.085219 0.033941 -0.041428 -0.049227 0.078802 -0.077253 \n-0.000141 0.006490 0.026936 -0.034005 -0.031528 0.243222 0.012922 0.092152 0.109157 0.056328 0.024020 0.073186 0.199754 -0.021186 0.166785 0.110435 0.009385 0.023913 -0.038320 0.060664 -0.013926 0.021366 -0.027649 -0.048182 0.088896 0.101399 0.136039 0.002153 -0.049570 0.002814 0.149871 0.053358 \n-0.037555 0.007528 -0.015415 -0.002718 -0.057838 0.252132 0.053336 0.097507 0.077208 0.131023 -0.029302 -0.019790 0.160928 0.085102 0.145761 0.072649 0.053385 0.059314 -0.043048 -0.043633 0.018455 -0.049962 0.049462 -0.020626 0.000124 0.070969 0.074913 -0.085165 -0.038757 0.006930 0.199282 0.169772 \n-0.042029 -0.013263 -0.114522 -0.009277 -0.033006 0.258765 0.109871 -0.001142 -0.002636 0.149950 0.001402 -0.063005 0.088768 0.097316 0.002668 -0.002525 0.002781 -0.066426 -0.007422 -0.173785 0.089002 -0.120039 0.113624 0.105707 -0.131966 -0.016829 -0.129686 -0.122573 0.009302 -0.009441 0.268861 0.192443 \n0.010409 0.013506 0.115140 -0.057538 0.000108 0.025111 0.001272 0.021442 -0.008698 0.104583 0.019203 0.062144 -0.047550 0.036312 -0.079895 0.037948 0.014438 0.028186 0.030253 -0.010434 -0.021469 0.041396 -0.008376 -0.037902 0.095982 0.072764 0.102068 -0.046223 -0.057926 -0.054192 -0.040118 -0.116187 \n0.011661 0.013580 0.098244 -0.054918 0.000709 0.017404 0.001459 0.017449 -0.007090 0.090928 0.008597 0.053388 -0.045450 0.027417 -0.104294 0.029068 0.016816 0.046028 0.008358 0.022175 -0.079674 -0.015467 0.041264 0.004870 0.095541 0.095869 0.038536 -0.024476 -0.035445 -0.051161 -0.010636 -0.090827 \n0.012751 0.015901 0.091476 -0.053662 0.002269 0.011829 -0.001927 0.013682 -0.007728 0.075101 0.000009 0.047226 -0.044783 0.019237 -0.126011 0.015673 0.014294 0.065277 -0.017321 0.050151 -0.128723 -0.063789 0.084937 0.044485 0.109595 0.123454 -0.026538 -0.003911 -0.017052 -0.057302 0.012244 -0.069566 \n0.012417 0.019872 0.090561 -0.054278 0.002424 0.009509 -0.003024 0.010002 -0.011042 0.060431 -0.010603 0.041663 -0.043785 0.017712 -0.146990 -0.005398 0.014213 0.074732 -0.050802 0.070873 -0.175363 -0.107205 0.125943 0.076813 0.124051 0.144704 -0.081053 0.023938 0.006968 -0.065779 0.037234 -0.039172 \n0.024544 -0.041070 0.054915 -0.002156 0.020605 0.005506 0.033788 0.023038 -0.009453 -0.020991 0.027501 0.016838 -0.023416 -0.038269 -0.172593 0.100604 -0.087956 0.115924 -0.195525 0.149607 -0.119504 -0.086585 0.062174 -0.075038 0.035110 0.067295 0.018243 0.037127 -0.065788 0.114307 0.008766 0.013420 \n0.015769 -0.016706 0.051135 -0.016355 0.023331 0.007524 0.007242 0.013630 -0.003853 -0.008421 -0.000527 0.001986 -0.030917 -0.012734 -0.145835 0.055688 -0.050414 0.097692 -0.122883 0.116419 -0.123293 -0.072748 0.065772 -0.026490 0.050794 0.080157 -0.001588 0.030216 -0.002659 0.090274 0.014294 0.008209 \n0.006896 0.010273 0.040574 -0.028175 0.009177 -0.002727 -0.014177 0.003932 0.004489 0.006152 -0.014778 0.011313 -0.036673 0.012083 -0.116775 -0.004415 0.017024 0.042082 -0.017831 0.056364 -0.122120 -0.059416 0.060239 0.041547 0.076702 0.078139 -0.024391 0.022113 0.041986 0.029818 0.006180 -0.008338 \n0.003970 0.033635 0.031624 -0.039688 -0.009931 -0.013688 -0.027612 -0.006537 0.014283 0.026041 -0.027827 0.007531 -0.035935 0.028010 -0.090291 -0.066369 0.095570 -0.004022 0.073400 -0.005364 -0.106538 -0.056168 0.061509 0.078550 0.094586 0.045250 -0.003615 0.025884 0.050964 -0.059244 -0.004008 -0.021368 \n-0.001030 0.051101 0.012729 -0.044712 -0.018779 -0.019594 -0.042435 -0.019121 0.024428 0.034846 -0.034286 -0.007933 -0.033382 0.048139 -0.059376 -0.110934 0.139720 -0.028230 0.159201 -0.068088 -0.091597 -0.048485 0.074228 0.104849 0.077415 -0.003190 -0.011414 0.014616 0.051647 -0.131379 -0.016369 -0.029576 \n0.013276 0.015196 0.059348 0.005177 -0.027902 -0.170695 -0.014038 0.150670 0.011873 0.000786 -0.001627 -0.017240 0.060415 -0.071933 -0.072809 0.194452 0.009800 0.022712 0.090550 -0.052535 0.048687 0.036304 -0.081877 0.107825 -0.019121 0.088373 0.006745 -0.001877 0.027214 0.037692 0.066350 -0.032024 \n0.008368 0.021960 0.054532 0.000311 -0.013304 -0.136478 -0.005637 0.144631 -0.012116 0.036030 0.009154 -0.004242 0.045998 -0.045201 -0.104791 0.181210 -0.014972 0.008238 0.103363 -0.104654 0.090328 0.075697 -0.047151 0.056470 -0.047856 0.042860 0.048666 -0.031566 0.031284 0.039040 0.059929 -0.077071 \n0.010395 0.003713 0.046220 0.009379 -0.018544 -0.083031 -0.013386 0.114954 -0.018702 0.037856 -0.002239 0.007356 0.059607 0.038771 -0.131230 0.159333 -0.105685 0.035886 0.067892 -0.054718 0.165788 0.105141 0.029341 0.082812 -0.059462 0.015944 0.035767 -0.047746 0.012667 0.050158 0.039094 -0.047357 \n-0.004435 0.007758 0.022257 0.036260 -0.024646 -0.070379 -0.043482 0.069648 -0.017559 0.045113 -0.011125 0.031216 0.049811 0.049932 -0.155766 0.134651 -0.112632 0.006918 0.065349 -0.047570 0.144378 0.096402 0.099483 0.065001 -0.044072 -0.028810 -0.014239 -0.088588 -0.014730 0.076246 0.021813 -0.019431 \n0.002165 0.006150 0.029380 0.029537 -0.025415 -0.100095 -0.017928 0.118446 -0.004248 0.030562 -0.006585 0.000532 0.058398 0.009221 -0.126284 0.163929 -0.090164 0.029112 0.068156 -0.063123 0.109314 0.090377 -0.005534 0.070883 -0.043083 -0.006742 -0.002886 -0.037771 0.001431 0.081963 0.004436 -0.032697 \n0.005906 0.023652 0.032288 0.016417 -0.016369 -0.150461 -0.008210 0.140340 0.006951 0.032729 0.002817 -0.014571 0.043576 -0.085898 -0.093828 0.197874 0.009255 -0.010440 0.104221 -0.102783 0.013114 0.047952 -0.099076 0.069836 -0.028903 0.044003 0.014956 -0.013531 0.002087 0.064351 0.058261 -0.052773 \n0.031500 -0.016588 -0.023311 -0.051803 0.020577 0.076264 0.056423 -0.050173 0.058645 0.086870 0.049525 0.017849 -0.103044 0.016589 0.058592 0.011828 0.079540 -0.004367 0.086692 -0.046516 -0.016537 0.071956 -0.138565 0.010325 -0.021842 0.083975 0.110326 0.083204 -0.010803 -0.126543 0.008570 -0.065688 \n0.008613 -0.007233 -0.020573 -0.036715 0.011967 0.087079 0.019123 -0.079108 0.053694 0.138972 0.045043 0.066957 -0.125703 0.038948 0.052634 0.035588 0.066490 -0.058129 0.093071 -0.057940 -0.003968 0.124034 -0.079225 0.027754 -0.038168 0.004876 0.053321 0.063399 -0.004495 -0.056661 -0.007469 -0.016110 \n0.010708 -0.022508 -0.031270 -0.026205 0.011524 0.141469 0.005171 -0.103210 0.057169 0.134168 0.035399 0.074052 -0.116274 0.110813 0.023736 0.016900 -0.015217 -0.013920 0.071146 -0.012837 0.055448 0.151531 -0.015708 0.005826 -0.049828 -0.042618 0.063884 0.047747 -0.001527 -0.018317 -0.022828 0.028414 \n-0.002105 -0.020003 -0.064424 -0.013765 0.020781 0.174297 0.001852 -0.122246 0.043849 0.126361 0.045295 0.070262 -0.111656 0.134767 -0.017164 -0.026720 -0.057077 -0.037401 0.057190 -0.048382 0.069101 0.117167 0.012271 -0.038779 -0.039332 -0.077244 0.048794 -0.029942 0.009972 0.030621 -0.034125 0.032811 \n0.013969 -0.027246 -0.057345 -0.015140 0.008990 0.148608 0.002683 -0.100291 0.049046 0.118726 0.042351 0.076792 -0.099641 0.130512 -0.001439 -0.013800 -0.045290 0.013326 0.049555 0.028980 0.100417 0.164552 0.016949 -0.001374 -0.021085 -0.071477 0.006962 0.059649 0.027692 -0.007030 -0.078989 0.038859 \n0.019008 -0.012928 -0.046256 -0.036644 0.012116 0.098313 0.022292 -0.078736 0.050100 0.118315 0.047233 0.058065 -0.103981 0.053660 0.031135 0.009987 0.035686 -0.022567 0.066701 -0.005730 0.033996 0.126479 -0.062315 0.021035 -0.001091 -0.013353 0.002995 0.076257 0.009807 -0.058127 -0.042979 -0.004986 \n-0.007601 -0.177175 0.017727 0.125761 0.005688 -0.003353 0.147590 0.073022 -0.018688 -0.204710 0.010150 0.031133 0.001801 0.030364 0.023092 -0.004181 0.085187 0.005926 0.087355 0.072482 -0.021998 -0.032687 0.046765 -0.055522 -0.177677 -0.034217 0.213318 0.017704 0.014570 -0.055193 0.030444 0.001590 \n-0.016541 -0.130310 0.005113 0.039399 -0.015097 -0.002729 0.084226 0.039798 -0.038451 -0.160923 0.067103 -0.036395 -0.025994 0.076883 0.025661 0.022379 0.057800 -0.007792 -0.055764 0.012615 -0.000495 -0.017802 0.043257 -0.012918 -0.076865 0.029916 0.111351 0.026562 -0.043756 -0.072868 -0.014045 -0.005620 \n-0.006580 -0.041018 0.011956 0.014998 0.000740 -0.005472 0.032329 0.006822 -0.020124 -0.131024 0.077596 -0.043507 -0.025592 0.112554 -0.034348 0.040738 0.060708 -0.001484 -0.155825 -0.070616 -0.011748 0.005651 0.000251 0.005087 0.038106 0.066154 0.082256 0.091179 -0.065226 -0.023005 -0.061362 -0.058155 \n0.004961 0.001648 -0.003877 -0.006108 0.014598 -0.019228 -0.004263 -0.016762 0.000237 -0.074099 -0.025521 -0.041570 -0.009358 0.010684 -0.001844 0.010927 0.012393 -0.017579 -0.043086 -0.029781 -0.001323 0.002201 0.067935 -0.021949 0.012852 0.077330 0.032354 0.036728 -0.058971 -0.032938 -0.001410 -0.051522 \n0.010249 0.058570 -0.030749 -0.037553 0.017103 -0.045825 -0.032816 -0.033532 0.023519 -0.005390 -0.142192 -0.028903 0.005856 -0.119621 0.037848 -0.030546 -0.049052 -0.044563 0.084150 0.025508 0.033239 0.010978 0.157710 -0.068468 -0.065812 0.111109 0.080771 0.000044 -0.000183 -0.031588 0.026364 -0.072106 \n0.019855 0.127731 -0.069824 -0.036148 0.034849 -0.043347 -0.088673 -0.073093 0.049751 0.013844 -0.144983 -0.063823 0.020675 -0.110435 0.051877 -0.041482 -0.071095 0.014502 0.034872 0.022648 -0.049292 0.007571 0.075833 -0.065256 -0.069651 -0.001051 0.095846 0.062248 -0.062551 -0.005565 0.031314 -0.030085 \n-0.002875 0.164839 -0.124720 -0.071759 0.017265 -0.043992 -0.148503 -0.111790 0.051584 0.012064 -0.084883 -0.131572 -0.001352 -0.044408 -0.003920 -0.047574 -0.034283 0.058068 -0.088753 -0.010707 -0.048508 0.013425 -0.024586 -0.044085 0.017545 -0.168004 0.085244 0.029133 -0.109995 -0.062934 -0.001407 0.004682 \n0.017838 0.126359 -0.098394 -0.019146 0.037082 -0.045881 -0.088216 -0.093730 0.054146 -0.034776 -0.152958 -0.093546 0.040898 -0.099978 0.077336 -0.047936 -0.073395 -0.008478 0.035327 0.016668 -0.011878 0.031888 0.029670 -0.010671 0.013279 -0.059562 0.097616 -0.001442 -0.123286 0.033179 0.093989 -0.017493 \n0.003354 0.057470 -0.070587 -0.005011 0.030120 -0.048761 -0.033225 -0.056017 0.022933 -0.077317 -0.170237 -0.073664 0.040276 -0.107085 0.099220 -0.034965 -0.061435 -0.077366 0.069545 -0.000936 0.069153 0.082774 0.086736 -0.021770 0.048952 -0.005926 0.014456 -0.045143 -0.062652 0.092136 0.133381 -0.040747 \n-0.005090 -0.003703 -0.040158 0.017871 0.020138 -0.024901 -0.002366 -0.032407 -0.001883 -0.147184 -0.047234 -0.089613 0.020124 0.020696 0.065435 0.004741 -0.007643 -0.052853 -0.055641 -0.066739 0.032675 0.071221 -0.008619 0.042968 0.104527 -0.033912 -0.035940 0.001701 -0.099441 0.094234 0.101317 -0.019024 \n-0.020413 -0.053520 -0.023649 0.035117 0.005981 -0.015046 0.027253 -0.008273 -0.021301 -0.215940 0.053858 -0.103258 0.002494 0.109283 0.037848 0.037581 0.055486 -0.042429 -0.157384 -0.081131 0.031650 0.072109 -0.075592 0.080851 0.143183 -0.044277 -0.015440 0.051076 -0.114670 0.079007 0.058218 -0.007329 \n-0.029800 -0.143867 -0.013745 0.053673 -0.009247 -0.010775 0.087729 0.033939 -0.038123 -0.226383 0.051127 -0.072732 -0.003050 0.087211 0.077594 0.019810 0.059918 -0.024133 -0.041687 0.001805 0.000908 0.031197 -0.029281 0.024243 -0.029099 -0.078006 0.068409 0.023726 -0.060584 0.003392 0.082980 -0.001526 \n-0.003562 -0.182306 -0.002510 0.134236 0.020593 -0.001022 0.150457 0.051751 -0.021379 -0.197171 -0.001357 0.011236 0.017400 0.037123 0.026165 -0.017637 0.090818 0.025239 0.074023 0.040654 -0.048912 -0.012247 0.059420 -0.037121 -0.191095 -0.060883 0.188357 0.054443 0.012178 -0.065544 0.013102 -0.027796 \n-0.010711 -0.038978 0.021641 0.018128 0.003540 -0.003594 0.029128 0.000882 -0.023613 -0.158293 0.065713 -0.056117 -0.021144 0.110963 -0.022237 0.034373 0.061360 -0.018439 -0.167422 -0.072410 0.011021 0.030154 -0.039910 -0.005807 0.092278 0.022426 0.060858 0.072149 -0.046708 -0.000397 -0.017953 -0.017121 \n0.001604 0.002832 0.000803 -0.005274 0.015109 -0.016136 -0.006531 -0.023165 -0.000438 -0.092850 -0.035022 -0.048312 -0.007273 0.013002 0.003632 -0.000217 0.014076 -0.024655 -0.057671 -0.039153 0.008338 0.025209 0.033618 -0.034396 0.059088 0.041641 0.012819 0.035200 -0.035564 -0.014626 0.032340 -0.025766 \n0.006185 0.058475 -0.024893 -0.037175 0.019107 -0.042798 -0.037553 -0.041913 0.024837 -0.025511 -0.153636 -0.038780 0.010843 -0.117604 0.043591 -0.044371 -0.050973 -0.050976 0.069347 0.015835 0.052084 0.035582 0.124825 -0.086511 -0.028588 0.074993 0.066821 -0.007952 0.018917 -0.012518 0.062130 -0.033156 \n0.002463 0.168080 -0.136484 -0.070991 -0.000142 -0.053769 -0.139684 -0.087917 0.059874 0.007064 -0.066238 -0.111041 -0.005337 -0.081490 0.009107 -0.051594 -0.042681 0.045556 -0.093714 -0.008363 -0.042080 -0.017430 -0.031609 -0.001219 0.006639 -0.110636 0.075719 0.038312 -0.081411 -0.076286 0.005031 0.017376 \n0.002460 0.062396 -0.031204 -0.026408 0.024750 -0.042569 -0.031270 -0.048558 0.018988 -0.051855 -0.165795 -0.047546 0.014711 -0.111244 0.069508 -0.046675 -0.048367 -0.064651 0.084473 0.007423 0.062561 0.073016 0.095949 -0.054850 0.020098 0.030933 0.120550 -0.043533 -0.039562 0.048001 0.050266 -0.061655 \n-0.004685 0.000569 -0.005040 0.000755 0.016194 -0.016907 -0.003853 -0.027512 -0.002388 -0.122261 -0.043735 -0.063413 -0.000743 0.019885 0.030741 -0.001230 0.004503 -0.042001 -0.040738 -0.054958 0.019498 0.058092 0.012181 0.011604 0.088081 -0.011669 0.050463 -0.009650 -0.099759 0.052670 0.033079 -0.054823 \n-0.018957 -0.048389 0.018017 0.018608 0.003876 -0.005877 0.031093 -0.006768 -0.022868 -0.186666 0.059326 -0.071245 -0.013824 0.113043 0.002428 0.030351 0.054222 -0.031200 -0.154587 -0.097681 0.016085 0.063763 -0.071813 0.037959 0.122679 -0.024949 0.083365 0.042657 -0.113388 0.044483 -0.020300 -0.049739 \n-0.162610 0.056241 -0.118504 0.059701 -0.048249 -0.050760 0.128754 0.265951 0.341609 0.110738 -0.135518 -0.115490 -0.099648 0.109674 -0.111021 -0.001668 0.147996 0.053026 0.009899 0.133886 -0.140765 0.281420 -0.073423 0.022914 0.003341 -0.107082 0.045444 0.043043 0.113012 0.091742 0.026333 -0.017815 \n-0.126385 0.047294 -0.133937 0.006951 0.013249 -0.040862 0.155073 0.099923 0.231954 0.071355 0.035571 -0.020532 0.035789 -0.047152 -0.111682 -0.081486 -0.017762 -0.053309 -0.092581 0.109210 -0.084614 0.095902 -0.156798 0.015064 -0.006130 -0.034144 0.003810 0.096272 0.077562 0.068091 0.099806 -0.014524 \n-0.102062 0.032861 -0.162514 -0.033062 0.053235 -0.049172 0.211614 -0.062326 0.101859 0.069886 0.111347 0.021553 0.111715 -0.109087 -0.102102 -0.084144 -0.067478 -0.113830 -0.119393 0.125400 0.016227 -0.026306 -0.082905 -0.025672 0.026668 -0.039523 -0.030999 -0.025383 0.025944 0.101807 0.084352 0.066410 \n-0.103049 0.018892 -0.134116 -0.057506 0.085295 -0.075070 0.225640 -0.144405 0.031393 0.080863 0.113508 0.010296 0.120999 -0.101779 -0.075648 0.016479 0.046589 0.002806 -0.048924 0.074128 0.075176 -0.057257 -0.024087 -0.108163 0.000415 -0.032716 -0.006385 -0.099955 -0.072957 0.116279 -0.045920 0.001768 \n-0.118193 0.025507 -0.074301 -0.045187 0.102224 -0.106225 0.190977 -0.183406 -0.056988 0.115954 0.028488 -0.058072 0.051232 -0.020783 -0.033793 0.115688 0.196134 0.252206 -0.028922 0.014279 0.144263 -0.020323 -0.035891 -0.202846 -0.042035 0.024356 0.035187 -0.020364 -0.137666 0.082970 -0.123162 -0.133798 \n-0.114891 0.034303 0.020158 -0.083090 0.110950 -0.093523 0.195756 -0.222891 0.000049 0.062378 -0.038594 -0.070011 -0.031324 0.025951 -0.050989 0.152416 0.124236 0.226855 0.058619 -0.083728 0.147437 -0.100354 -0.048409 -0.093370 0.021067 -0.021501 0.075465 0.053350 0.030439 -0.009232 0.022077 0.013296 \n-0.119054 0.041814 0.080899 -0.118384 0.117569 -0.039798 0.217612 -0.186713 0.061424 -0.013021 0.032289 -0.004352 0.013718 -0.012923 -0.047337 0.052392 -0.028514 -0.072800 0.060538 -0.120286 0.150527 -0.131318 -0.040075 0.022865 0.116495 -0.044144 -0.033261 0.089726 0.090247 -0.019005 -0.099180 0.032243 \n-0.127589 0.061951 0.116807 -0.112203 0.096946 -0.015793 0.192008 -0.110133 0.094506 -0.035109 0.018385 -0.023107 0.025450 -0.012428 0.016356 0.017251 -0.176952 -0.179326 0.003953 -0.063761 0.066204 -0.145205 -0.061318 0.093348 0.079680 -0.044576 -0.080078 0.067574 0.066271 -0.015407 -0.079506 0.025660 \n-0.167628 0.091833 0.139020 -0.044339 0.035606 0.000881 0.140626 0.061244 0.127579 -0.010045 -0.033982 -0.070995 0.103294 0.045499 0.188113 0.007461 -0.231605 -0.093872 -0.032287 0.031444 -0.029025 -0.159186 -0.067659 0.097096 -0.001771 0.025395 -0.072496 0.072185 0.056974 0.001864 -0.142344 -0.072921 \n-0.222999 0.110008 0.166622 0.025815 -0.046455 0.011291 0.094730 0.225386 0.142132 0.063790 -0.141547 -0.151380 0.152901 0.227167 0.341995 0.020984 -0.125819 0.080700 -0.003875 0.147870 -0.103510 -0.112049 0.060838 0.026481 0.002360 -0.001735 0.003516 -0.121181 0.009356 -0.055520 -0.272688 -0.184306 \n-0.070808 -0.009120 -0.026210 -0.021131 0.142808 0.065134 -0.022932 0.014346 -0.041991 -0.045258 -0.015726 -0.053231 -0.016220 -0.057895 0.037959 -0.002569 0.045020 0.182753 -0.004760 -0.023426 0.187006 -0.127475 -0.068984 0.003608 0.016304 0.251609 -0.074162 -0.005424 0.119073 -0.056019 0.243802 -0.201573 \n-0.043040 -0.021279 -0.039675 -0.068987 0.072616 0.041839 -0.035553 0.021125 -0.047249 -0.046312 -0.091650 0.065314 0.014862 0.021630 0.037385 -0.038912 0.087192 0.090884 0.018938 -0.029993 0.108400 -0.132754 -0.144603 0.001875 0.000511 0.132799 -0.035265 -0.036656 0.070582 0.018957 0.115565 -0.120813 \n-0.013099 -0.033833 -0.057395 -0.120972 0.001638 0.013844 -0.045488 0.024128 -0.045381 -0.032691 -0.171503 0.182971 0.047618 0.089191 0.036425 -0.062833 0.142780 0.003517 0.032819 -0.024918 0.029621 -0.141110 -0.194478 0.017932 -0.023168 0.021631 -0.032996 -0.040413 0.052797 0.099430 0.006638 -0.055234 \n0.014253 -0.043439 -0.071519 -0.170923 -0.067274 -0.016635 -0.054486 0.025628 -0.042909 -0.014397 -0.245480 0.284048 0.076878 0.161979 0.032496 -0.077883 0.209676 -0.089568 0.033273 -0.021634 -0.058239 -0.152057 -0.222782 0.045212 -0.019896 -0.097913 -0.058598 -0.076842 0.020694 0.196959 -0.081829 -0.016686 \n0.007477 -0.081618 -0.029910 -0.076472 -0.022163 0.011163 -0.087683 0.002195 -0.019605 -0.015751 -0.113156 0.056018 0.037931 0.020207 -0.034383 -0.088665 -0.106448 0.076275 -0.144134 0.065121 0.063580 0.042569 -0.085946 -0.025882 0.006452 -0.031628 -0.032174 0.120340 0.114240 0.111163 0.062736 0.001562 \n0.011139 -0.078719 -0.039792 -0.088259 -0.031509 0.003203 -0.088662 -0.003480 -0.017413 0.000271 -0.122991 0.075337 0.032618 0.028238 0.000050 -0.043599 -0.023300 0.057471 -0.089841 0.045665 0.056588 -0.005710 -0.127373 0.039749 -0.032548 -0.025521 0.011691 0.121196 -0.055707 0.006174 0.040378 -0.015242 \n0.016747 -0.068425 -0.033101 -0.106148 -0.042105 -0.005195 -0.093571 -0.003252 -0.013278 0.019877 -0.141296 0.098239 0.026182 0.038549 0.027194 -0.013311 0.023222 0.027468 -0.051849 0.024616 0.042335 -0.046240 -0.151009 0.086312 -0.079250 -0.032065 0.057885 0.101376 -0.123572 -0.012793 -0.031447 -0.016148 \n0.011518 -0.080232 -0.015629 -0.092422 -0.032834 0.001990 -0.089949 0.000905 -0.020972 0.041678 -0.110830 0.089378 0.020248 0.033745 0.015915 -0.008552 -0.034952 0.085307 -0.070805 0.028856 0.054686 -0.052184 -0.139190 0.026374 -0.099375 0.008474 0.040136 0.008345 -0.121948 0.062586 -0.075155 -0.079851 \n0.005555 -0.083743 -0.019684 -0.073439 -0.019149 0.007666 -0.095805 0.012232 -0.029099 0.058131 -0.090164 0.082750 0.022310 0.034570 0.016901 0.007638 -0.121652 0.124873 -0.099280 0.038547 0.060200 -0.051425 -0.086080 -0.019566 -0.155881 0.034615 0.037963 -0.058363 -0.078303 0.180599 -0.107838 -0.116726 \n-0.049163 -0.016282 -0.132207 0.052145 0.087552 0.078383 -0.070295 0.069966 0.006733 0.025127 0.114393 -0.079170 -0.035812 -0.098023 -0.031637 -0.085551 0.034260 -0.043249 -0.071715 0.111162 -0.045153 0.027413 -0.074832 0.049430 -0.100690 0.107424 0.026539 -0.051897 -0.109445 -0.033795 -0.107162 0.013996 \n-0.062681 0.002720 -0.117147 0.030493 0.112654 0.057038 -0.063566 0.076516 -0.000790 0.057968 0.129108 -0.077681 -0.058790 -0.194034 -0.013827 -0.021501 0.194945 -0.139099 -0.020951 -0.053653 -0.164209 -0.047216 -0.076934 -0.005145 -0.080876 0.056135 -0.001550 -0.151366 0.006616 0.064699 -0.081738 -0.119177 \n-0.060870 0.007231 -0.099162 0.023541 0.116719 0.052975 -0.077943 0.075988 -0.018912 0.054986 0.118379 -0.070836 -0.061627 -0.166439 -0.006231 -0.010003 0.171530 -0.103542 -0.015095 -0.045333 -0.102100 -0.042120 -0.054430 -0.024383 -0.070447 0.047844 -0.007643 -0.140867 0.049289 0.102239 -0.107740 -0.097239 \n-0.061271 -0.009933 -0.074183 0.027667 0.104064 0.089905 -0.083036 0.054611 -0.040969 0.017161 0.066002 -0.057724 -0.038106 -0.027491 -0.033383 -0.059233 -0.057495 0.084170 -0.062052 0.096381 0.132812 0.009311 -0.026879 -0.015465 -0.003377 0.081877 -0.045494 -0.090228 0.030092 0.058908 -0.139219 -0.017977 \n-0.048562 -0.043647 -0.087667 0.038267 0.103935 0.117829 -0.090585 0.052270 -0.028879 0.009657 0.085143 -0.083039 -0.046367 -0.001596 -0.033018 -0.048105 -0.051075 0.052992 -0.079957 0.145867 0.091881 0.030520 0.018662 0.027457 -0.094258 0.043722 -0.045175 -0.079949 -0.019677 0.036338 -0.044866 -0.005565 \n-0.052765 -0.049924 -0.108674 0.053399 0.088558 0.113405 -0.087415 0.054456 -0.012026 0.011413 0.095358 -0.080536 -0.035235 -0.020982 -0.039535 -0.065446 -0.042237 0.015724 -0.090878 0.143159 0.047516 0.028396 0.020776 0.061676 -0.122891 0.034260 -0.045151 -0.075123 -0.048202 0.021218 -0.086346 -0.005640 \n-0.069824 -0.000086 0.038965 -0.014722 0.119393 0.092526 -0.091609 0.044029 -0.050579 -0.005513 0.021446 -0.038810 -0.089553 -0.005461 -0.014542 -0.001024 -0.109063 0.072500 -0.024838 0.057627 0.146163 -0.024455 -0.003444 -0.010284 0.096202 -0.080695 0.036608 0.108937 0.117505 0.090974 -0.054494 0.009696 \n-0.073906 0.020581 0.065550 -0.036250 0.142283 0.070751 -0.099244 0.053274 -0.037082 0.021105 0.047970 -0.047143 -0.131235 -0.142730 0.046858 0.092322 0.087878 -0.113904 0.061187 -0.124464 -0.090246 -0.101586 -0.026517 -0.000548 0.029821 -0.078121 0.071779 0.040439 0.097549 0.117850 0.017069 -0.078031 \n-0.084093 0.019657 0.088135 -0.032875 0.143978 0.077518 -0.093574 0.051767 -0.029084 0.019953 0.048282 -0.055979 -0.142543 -0.133213 0.073838 0.107972 0.074020 -0.148200 0.077701 -0.168161 -0.122067 -0.135095 -0.021852 0.031179 -0.012511 -0.089141 0.057981 0.030165 0.019775 0.113770 0.028108 -0.077611 \n-0.077732 0.004400 0.117431 -0.028858 0.117351 0.107466 -0.096154 0.048393 -0.034070 -0.007019 0.028164 -0.060902 -0.133304 -0.030122 0.057624 0.067102 -0.092634 -0.024428 0.048480 -0.021547 0.005795 -0.081226 -0.044246 0.058250 -0.000055 -0.126365 0.093904 0.119172 -0.077699 0.003646 0.024751 -0.029424 \n-0.070891 -0.028670 0.090653 -0.013215 0.115244 0.133554 -0.102496 0.040208 -0.042072 0.002207 0.022201 -0.057807 -0.127981 0.016069 0.009495 0.070512 -0.138189 0.023363 0.014707 0.026086 0.070655 -0.057696 0.050936 0.063607 -0.033375 -0.163500 0.031972 0.094066 -0.014772 0.089923 0.016365 -0.003741 \n-0.066799 -0.029570 0.063743 -0.009256 0.119994 0.133213 -0.106335 0.046800 -0.047549 -0.002070 0.024232 -0.057584 -0.120081 0.018683 -0.005989 0.045779 -0.140461 0.051001 -0.008023 0.057119 0.105333 -0.041070 0.056032 0.043639 0.005861 -0.135100 0.031090 0.080471 0.052317 0.094827 0.013607 0.010504 \n0.072512 -0.137291 0.011413 0.088910 -0.019071 0.013112 0.008567 -0.053457 0.054968 0.016224 0.053233 -0.146438 0.132175 0.058274 -0.003809 -0.193429 -0.040454 -0.064533 0.180121 0.012250 0.057831 0.068713 -0.038240 -0.016466 0.096254 0.175188 -0.028450 0.007575 -0.066963 0.150497 -0.031323 -0.160149 \n0.031363 -0.146475 -0.011004 -0.012087 -0.158957 0.001794 -0.019511 -0.025038 0.063317 -0.004212 0.076995 -0.128801 0.006133 -0.025127 -0.006154 -0.067455 -0.042154 -0.019369 0.000193 -0.026607 0.080677 -0.005104 -0.063362 -0.022910 0.100988 0.009610 -0.099780 -0.099656 0.127043 -0.035259 -0.037352 -0.113167 \n0.024330 -0.135014 -0.013209 -0.080932 -0.210031 -0.025286 -0.022320 -0.011935 0.071001 -0.003927 0.042246 -0.125299 -0.045513 -0.111937 0.024484 0.033844 -0.000957 -0.024363 -0.031085 0.044868 0.080756 -0.055746 -0.114452 0.066711 0.061396 -0.071439 -0.012135 -0.152630 0.098979 -0.082951 -0.005477 0.031251 \n0.022502 -0.137697 0.003983 -0.079085 -0.208139 -0.028587 -0.030198 -0.013558 0.077290 0.019795 0.026102 -0.115821 -0.056553 -0.114366 0.013486 0.045295 -0.002441 0.015895 -0.015269 0.028028 0.069668 -0.063182 -0.074773 0.053007 0.059592 -0.093814 0.020831 -0.138663 0.058647 -0.095930 0.014654 0.014197 \n0.024298 -0.134278 0.018335 -0.086284 -0.208451 -0.030676 -0.022217 -0.003789 0.063934 0.025357 0.039980 -0.114782 -0.077190 -0.119616 0.009432 0.051973 0.008737 0.024815 -0.008834 0.044322 0.056599 -0.096705 -0.081728 0.037471 0.088602 -0.144553 0.032510 -0.080806 0.085975 -0.068531 0.022631 0.064358 \n0.029340 -0.148509 0.045892 -0.030155 -0.155587 -0.002411 -0.013070 -0.017176 0.060092 0.051607 0.066402 -0.091139 -0.048012 -0.051429 -0.019696 -0.018504 -0.032169 0.073233 0.095371 0.014101 0.013756 -0.140295 -0.012563 -0.065664 0.075532 -0.131125 0.043895 -0.095042 -0.001756 0.062797 -0.003969 0.083090 \n0.060310 -0.134113 0.094160 0.054789 -0.026111 0.013977 0.001538 -0.032457 0.058817 0.080984 0.047657 -0.104424 0.023708 0.043596 -0.026622 -0.122894 -0.014581 0.102399 0.295984 0.025604 -0.067005 -0.091774 0.007955 -0.038755 0.049748 -0.023367 0.043189 0.107814 -0.172528 0.248333 0.055082 0.027686 \n0.136829 0.039960 0.075643 0.168885 0.020216 0.017213 -0.018749 -0.034999 0.068867 0.057465 0.019663 -0.019016 -0.002685 0.107694 -0.043188 0.028189 -0.021960 0.093620 0.018062 -0.026893 -0.113341 -0.187892 -0.002560 -0.076924 -0.047809 -0.047455 -0.038833 0.027537 -0.085740 0.189210 -0.024645 0.134510 \n0.165775 0.117253 0.065112 0.221657 0.045285 0.026546 -0.009950 -0.054183 0.060512 0.041492 -0.049197 0.034561 -0.005005 0.057993 -0.028476 0.058966 -0.043845 0.027647 -0.072087 -0.082587 -0.085057 -0.143605 -0.058051 -0.149314 -0.065285 -0.064892 0.023272 -0.047588 0.007050 -0.039540 -0.034017 0.018223 \n0.165721 0.128775 0.053509 0.228408 0.048509 0.029615 -0.006518 -0.060629 0.058221 0.024428 -0.071743 0.038403 0.008890 0.033221 -0.029062 0.049402 -0.058452 -0.028976 -0.091098 -0.092588 -0.040752 -0.067291 -0.079845 -0.163841 -0.088038 -0.045471 0.006020 -0.070204 0.035926 -0.076724 -0.050694 -0.050887 \n0.162148 0.120771 0.046388 0.227986 0.052372 0.032400 -0.007894 -0.067333 0.057781 0.011350 -0.061779 0.019185 0.021963 0.053527 -0.044290 0.034493 -0.050319 -0.074480 -0.115841 -0.111889 -0.004818 -0.012681 -0.110647 -0.131176 -0.020146 -0.028971 -0.032063 -0.084223 0.052852 -0.062778 -0.055131 -0.098503 \n0.131578 0.043575 0.030666 0.180198 0.036295 0.024791 -0.007223 -0.070621 0.053016 0.003760 -0.013318 -0.055389 0.046220 0.088279 -0.040049 -0.050164 -0.036610 -0.140819 -0.067115 -0.123906 0.042056 0.073554 -0.131197 -0.070551 0.122038 0.029161 -0.171915 -0.065907 0.006511 0.020866 -0.101948 -0.097081 \n0.074461 -0.113365 0.007150 0.067401 -0.036676 0.008029 -0.009329 -0.057219 0.058733 0.016038 0.060618 -0.139140 0.113244 0.059722 0.001184 -0.169334 -0.054120 -0.086160 0.123964 -0.004887 0.047092 0.051497 -0.013632 -0.056937 0.086719 0.157158 -0.070914 0.059410 0.006217 0.214971 0.001671 -0.136829 \n0.041866 -0.165721 0.001606 -0.039447 -0.119067 -0.008686 -0.065758 -0.060394 0.087157 0.037837 0.015322 -0.097187 0.031724 -0.063058 0.016150 -0.000324 -0.075988 0.080251 -0.120586 -0.137752 -0.054140 0.013945 -0.071586 -0.047275 -0.022536 0.013692 0.023529 -0.036043 0.035725 -0.095918 -0.056874 -0.101299 \n0.038858 -0.160086 0.009436 -0.048868 -0.129877 -0.009274 -0.068853 -0.049718 0.092935 0.058714 0.000446 -0.088443 0.006775 -0.082693 0.012952 0.016964 -0.080665 0.098396 -0.105550 -0.132766 -0.068165 -0.000583 -0.033584 -0.046900 -0.046502 -0.046776 0.029578 -0.014343 0.045185 -0.091982 -0.051679 -0.078034 \n0.039583 -0.165223 0.027515 -0.039731 -0.121198 -0.012527 -0.063539 -0.052489 0.087148 0.076692 0.012806 -0.075131 -0.001257 -0.076326 -0.000558 0.016681 -0.060029 0.127544 -0.082959 -0.136985 -0.083566 -0.041841 -0.023861 -0.061765 0.009553 -0.033035 0.109089 0.034466 0.057395 -0.081732 -0.036234 -0.049454 \n0.070008 -0.111410 0.084019 0.045810 -0.045064 0.006408 -0.008808 -0.039047 0.058885 0.074756 0.056429 -0.087096 0.024368 0.035927 -0.043105 -0.110004 -0.023982 0.063944 0.223904 -0.000855 -0.064145 -0.086639 -0.010714 -0.109535 0.061439 -0.005413 0.019057 0.103042 -0.087952 0.231598 -0.031542 0.046849 \n0.147675 0.128069 0.051954 0.169378 -0.010820 0.003256 -0.005987 0.018413 0.034732 -0.019494 0.008266 -0.038131 -0.093810 0.016749 0.012485 0.068588 0.050721 0.030006 0.068914 0.235135 0.130319 -0.148716 -0.156445 -0.012208 0.019202 -0.057775 0.077501 0.007534 0.032232 -0.015861 0.100202 0.016602 \n0.147804 0.140475 0.046997 0.170300 -0.015185 0.003867 0.000131 0.016849 0.037335 -0.031348 -0.021016 -0.030106 -0.085808 -0.016604 0.015121 0.050683 0.056599 -0.016216 0.062091 0.240386 0.167002 -0.078811 -0.170643 -0.006854 -0.017745 -0.026654 0.037547 0.009172 0.086550 -0.061422 0.053061 -0.006055 \n0.144505 0.133797 0.044283 0.164995 -0.009293 0.009459 0.000942 0.011598 0.030590 -0.040002 -0.006531 -0.038797 -0.077355 -0.004494 -0.004566 0.028583 0.075314 -0.047409 0.040042 0.216351 0.181335 -0.039848 -0.200977 -0.002583 0.045742 0.006846 -0.005849 -0.020927 0.103800 -0.057377 0.058855 -0.047126 \n-0.127670 -0.019395 -0.152701 0.147038 -0.163494 0.009643 -0.051889 0.073861 0.124106 0.077093 -0.154740 -0.016459 -0.143296 -0.054188 -0.004884 0.132681 0.000283 -0.179110 -0.030697 -0.152982 0.221864 -0.133961 0.067400 0.022748 0.068347 0.322849 0.031875 0.131724 -0.204692 -0.040826 -0.214847 0.189689 \n-0.051097 -0.020429 -0.117043 0.128734 -0.087860 0.000650 -0.113603 0.108341 0.110325 0.067408 -0.055845 0.058153 -0.139098 -0.005033 -0.005046 0.062767 0.080744 -0.087207 -0.066172 -0.048201 0.143057 -0.111192 0.087453 -0.011149 0.165013 0.089565 -0.052520 0.143784 -0.102700 0.061337 -0.026812 0.046612 \n0.017957 -0.018466 -0.093775 0.047256 -0.021490 -0.051664 -0.081542 0.089379 0.118252 0.046450 0.045187 0.126112 -0.085919 -0.006485 0.060210 0.032938 0.042651 -0.050875 -0.131389 0.023528 0.067880 -0.132635 0.053977 -0.124419 0.258792 -0.053130 -0.053037 0.049822 -0.101081 0.086182 0.167605 -0.036659 \n0.076150 -0.023624 -0.078167 -0.008981 0.054321 -0.102460 -0.048956 0.064253 0.142423 0.031372 0.126763 0.116783 -0.003471 0.013866 0.123614 0.046489 0.107946 0.005721 -0.085120 -0.010597 0.029402 -0.108083 0.183305 -0.098704 0.111480 -0.138063 -0.088210 -0.041771 -0.017150 0.074847 0.157693 -0.097298 \n0.130211 -0.030104 -0.052876 -0.015825 0.125251 -0.167935 -0.058190 0.015453 0.159998 0.031845 0.139120 0.041757 0.029446 0.021507 0.216902 0.042933 0.145540 0.227404 -0.097266 0.027462 0.096923 -0.020958 0.326335 0.056042 -0.079156 -0.032904 -0.177023 0.067651 0.148061 -0.011254 -0.047050 -0.062333 \n0.160100 -0.020591 0.073028 -0.084279 0.107579 -0.167858 0.024773 -0.052515 0.330081 0.045389 0.047619 0.054216 -0.159717 0.049050 0.074438 -0.071928 0.073000 0.077855 -0.079403 -0.005745 0.115337 0.027314 0.059227 0.127195 -0.118726 0.105137 0.018601 0.089352 -0.073859 -0.050048 -0.056527 0.040262 \n0.118875 0.005525 0.134449 -0.069268 0.076843 -0.057295 -0.003943 -0.050301 0.286855 -0.017000 0.122783 0.044957 -0.022381 0.014952 0.021050 -0.125921 0.043913 -0.079991 -0.034488 -0.077230 0.047624 -0.072228 0.008826 0.224974 -0.167330 0.029708 -0.006486 -0.013198 -0.152282 -0.011729 0.110829 -0.088514 \n0.047410 0.021661 0.161183 0.007024 0.010465 -0.005076 -0.042547 -0.006884 0.187181 0.015920 0.096774 0.026353 0.052461 -0.068924 0.031601 -0.125633 0.002667 -0.068815 -0.102915 -0.088212 0.047977 -0.035176 -0.014703 0.108365 -0.218496 -0.020850 0.024215 0.041247 -0.078673 0.068406 0.091879 -0.137499 \n-0.037270 0.042104 0.191512 0.089159 -0.061427 0.064065 -0.070638 0.021728 0.009123 0.080157 0.027510 -0.007857 0.181834 -0.111970 -0.066892 -0.117558 0.170382 -0.004936 -0.090062 -0.088847 0.137662 0.024059 0.036565 0.044429 -0.162578 -0.106512 0.079351 0.176221 0.020320 0.069439 -0.023100 -0.160700 \n-0.127659 0.052831 0.218080 0.149029 -0.180044 0.153963 -0.040584 0.044709 -0.113100 0.127123 -0.064102 -0.061822 0.324255 -0.207728 -0.079543 -0.104631 0.330930 -0.004692 -0.122172 0.015971 0.201722 -0.006146 0.123772 -0.056887 -0.002298 -0.148188 -0.047997 0.212921 -0.003430 -0.067818 -0.126340 0.094468 \n0.100186 -0.056201 0.014654 -0.027183 0.059819 -0.079554 -0.075739 0.015997 0.041974 0.016190 -0.029544 0.058843 -0.004355 0.065751 0.072960 0.023367 0.002651 -0.077708 -0.082110 0.020636 0.120327 0.021310 0.178826 0.017509 0.060449 0.017252 0.207272 -0.220074 0.255053 0.194187 -0.104346 0.080808 \n0.134302 -0.074849 -0.015916 -0.047774 0.133455 -0.024532 -0.023605 0.046369 0.009748 0.029096 -0.025644 -0.016988 0.052106 0.065170 0.023676 -0.008297 0.007731 -0.082746 -0.050340 -0.003574 0.095542 0.000070 0.077049 0.005387 0.095145 -0.047716 0.175535 -0.154723 0.145047 0.079484 -0.095895 0.064032 \n0.177157 -0.088072 -0.044813 -0.066027 0.207154 0.014408 0.022835 0.081817 -0.016908 0.045492 -0.052223 -0.093208 0.092817 0.065713 -0.017032 -0.036526 0.068798 -0.063460 -0.035263 -0.007451 0.064335 -0.039349 0.038344 0.014502 0.121995 -0.030278 0.168708 -0.047178 0.076399 -0.042626 -0.075266 0.051585 \n0.213772 -0.098660 -0.072712 -0.095885 0.263880 0.057031 0.068645 0.127569 -0.046042 0.071869 -0.081866 -0.152551 0.141280 0.087141 -0.040169 -0.064121 0.109790 -0.075835 -0.010199 -0.018595 0.008590 -0.094326 -0.002782 0.053050 0.140328 -0.042802 0.097662 0.010519 -0.005431 -0.161484 -0.033603 0.067955 \n0.111146 -0.052125 -0.039589 -0.056411 0.086749 -0.038454 -0.029609 0.022565 0.017300 0.010442 -0.148171 -0.077020 0.092748 -0.069315 -0.135127 -0.090974 0.048732 -0.056533 0.066270 0.111576 -0.007348 0.004381 0.048222 0.071304 0.086447 -0.012128 0.038070 0.225025 0.169355 -0.076066 -0.065222 -0.034644 \n0.119518 -0.087339 -0.028727 -0.033307 0.159843 0.030709 -0.022978 0.042531 0.005707 0.031433 -0.094033 -0.125201 0.077877 -0.053727 -0.084565 0.014892 -0.010216 0.038907 0.021884 0.091222 -0.040355 0.017035 -0.075761 0.039488 0.085446 -0.044226 -0.121973 0.178273 -0.005398 -0.091853 0.035171 -0.009343 \n0.138929 -0.109301 -0.038418 -0.027398 0.194737 0.068161 0.004518 0.036800 -0.010392 0.052822 -0.055931 -0.143842 0.076298 -0.031117 -0.016929 0.110291 -0.086218 0.092566 -0.012656 0.027910 -0.043641 -0.017826 -0.117866 0.072061 -0.060839 0.087307 -0.102415 0.097614 -0.087840 -0.103232 0.044129 0.050442 \n0.123241 -0.082695 -0.052528 -0.018814 0.152091 0.026223 -0.018590 0.038210 -0.006586 0.090292 -0.044708 -0.134971 0.110901 0.015608 0.022078 0.154558 -0.002515 0.059595 0.018546 -0.085825 -0.043967 0.037662 -0.056542 0.037309 -0.035739 0.012674 -0.177575 -0.032934 -0.096480 -0.043342 -0.016870 0.061163 \n0.109359 -0.058783 -0.044116 -0.013742 0.100037 -0.018586 -0.056347 0.019161 -0.024171 0.095644 -0.041061 -0.114625 0.169554 0.027434 0.073217 0.195601 0.088374 -0.003206 0.051965 -0.124523 -0.021193 0.149033 -0.004197 0.008604 -0.020540 -0.091475 -0.085112 -0.024449 -0.028010 0.040116 -0.117547 0.081288 \n-0.048819 -0.058496 -0.182944 0.159195 -0.060102 0.037492 -0.059687 -0.161319 -0.084838 0.032177 0.055535 0.056391 0.016070 0.046550 0.013412 0.017124 -0.055227 -0.007413 0.020739 -0.020339 0.042022 -0.027660 0.058063 0.091148 0.023449 0.121671 0.086138 0.171646 0.234981 -0.028792 -0.085115 -0.184425 \n-0.016787 -0.034199 -0.155580 0.119062 -0.077118 0.018045 -0.025200 -0.142578 -0.033074 0.039494 0.029030 0.026100 0.058529 0.065274 0.072438 0.102829 0.013954 -0.015913 0.016131 0.066091 -0.080928 -0.069103 0.049484 0.180052 0.021632 -0.055251 -0.060621 0.102871 0.076161 0.029996 0.064714 -0.158486 \n-0.006105 -0.014942 -0.132981 0.095468 -0.053630 0.005874 -0.013353 -0.132733 -0.014940 0.052133 0.030401 -0.004328 0.059155 0.026928 0.061046 0.139171 0.040427 -0.015318 0.072145 0.076842 -0.100090 -0.048184 0.076674 0.148652 -0.042713 -0.173253 -0.045070 0.040911 0.030939 0.057554 0.057057 -0.160466 \n-0.000914 -0.014861 -0.100662 0.059721 -0.039040 -0.008775 -0.002506 -0.130991 -0.016230 0.014989 -0.010423 -0.076984 0.085757 -0.069931 0.104317 0.234857 0.011926 0.001686 0.020114 0.064549 -0.079026 -0.073036 -0.042226 0.082122 -0.008445 0.037548 0.087042 -0.041830 -0.063469 0.009221 0.006322 -0.059557 \n-0.001723 -0.028185 -0.127765 0.112066 -0.038481 -0.005842 -0.025715 -0.139761 -0.011786 0.018908 -0.016597 -0.035174 0.032677 0.015458 0.122420 0.175309 0.035396 -0.002847 0.055646 0.078584 -0.100762 -0.028384 0.010639 0.062880 0.000659 0.032393 0.066381 0.025923 0.038935 0.050735 -0.037601 -0.015488 \n-0.007857 -0.048874 -0.149596 0.129223 -0.045242 0.020073 -0.024593 -0.157734 -0.017308 0.016953 -0.014989 -0.013847 0.039950 0.051284 0.121690 0.136643 0.012716 0.007969 0.011594 0.069250 -0.081961 -0.028648 0.015288 0.105783 0.056717 0.093682 -0.020099 0.136615 0.089729 0.018129 -0.041058 -0.017297 \n0.014968 -0.022615 0.108531 -0.030625 0.033584 -0.026701 0.000384 -0.139020 0.065896 0.020416 -0.069814 -0.024952 0.029031 -0.051627 -0.044864 0.097390 0.043490 -0.080865 -0.133349 0.062214 -0.026677 0.050424 -0.031714 0.139060 -0.040284 0.115814 0.245962 0.040927 0.082200 0.160903 -0.103011 0.123227 \n-0.003093 -0.005830 0.123378 -0.003621 -0.017785 0.028896 -0.041486 -0.168737 0.037322 -0.001863 -0.072179 -0.010234 0.003025 -0.014615 -0.059697 0.023657 0.094080 -0.076385 -0.101919 0.113006 -0.037782 0.039741 0.076403 0.133884 0.015800 0.011606 0.044469 -0.049463 0.063026 0.076831 0.046752 -0.015511 \n-0.016304 -0.013787 0.139835 0.007812 -0.004980 0.066699 -0.038946 -0.189361 0.018357 -0.009476 -0.057374 -0.030800 0.008679 0.021762 -0.061868 0.026312 0.095255 -0.028445 -0.065848 0.101957 0.015820 0.057287 0.060886 0.155097 0.012816 -0.005557 -0.095032 -0.119423 -0.014735 0.003787 0.123841 -0.068439 \n-0.036090 -0.038522 0.171100 0.027585 -0.009572 0.110569 -0.042383 -0.189867 -0.027602 -0.033460 -0.046180 -0.036045 -0.000233 0.009186 -0.052105 0.015946 0.013302 -0.021382 -0.006806 0.096229 0.066533 0.067168 -0.000735 0.122342 -0.048788 0.074441 -0.106635 -0.167254 -0.063117 -0.054523 0.038987 -0.009327 \n-0.007205 -0.029936 0.142602 -0.002144 0.011448 0.054702 -0.018150 -0.173762 0.019666 -0.001295 -0.089224 -0.061806 -0.013648 -0.005145 -0.029354 0.093278 0.087790 -0.031848 -0.047791 0.095654 -0.047167 0.039894 0.009016 0.113162 -0.035211 0.099719 -0.058923 -0.126191 -0.041066 0.055719 0.044431 0.093278 \n0.002437 -0.023596 0.126411 -0.011106 0.005589 0.017088 -0.021015 -0.162810 0.058199 0.017440 -0.099544 -0.047196 -0.010311 -0.022562 -0.032469 0.090306 0.081802 -0.069768 -0.102428 0.094456 -0.122120 0.022061 -0.016397 0.068514 0.014273 0.090445 0.092085 -0.066165 -0.014547 0.142070 -0.011118 0.162910 \n0.029334 0.223392 -0.120937 -0.069565 -0.102310 -0.004731 -0.103222 -0.036828 -0.032194 -0.011997 0.164838 -0.040399 0.146021 0.143341 -0.144096 0.030003 -0.014571 0.040774 -0.000801 -0.036108 -0.025547 0.000958 0.036242 0.092272 0.021962 -0.120473 0.114638 0.031023 -0.009611 0.045476 -0.042213 -0.040690 \n0.094905 0.108778 -0.089173 -0.115939 -0.118836 0.053160 0.014577 0.050393 -0.012452 0.020021 0.087361 -0.010505 -0.004575 0.114162 -0.147850 0.022922 0.001361 -0.077056 -0.036642 -0.005244 0.029675 -0.145528 0.024925 0.009335 -0.054132 0.071855 0.159383 0.043467 0.001204 -0.005838 -0.068893 -0.059814 \n0.123533 0.003770 -0.070594 -0.139415 -0.092773 0.026845 0.087550 0.054032 -0.027141 -0.002838 0.007425 -0.074693 -0.015281 0.007464 -0.050123 0.044907 -0.023390 -0.182981 0.055840 0.123603 0.042441 -0.129995 0.081147 0.014114 -0.162787 -0.003357 -0.020851 0.069466 -0.073562 -0.041971 -0.019639 -0.093585 \n0.115344 -0.010169 -0.032149 -0.142821 -0.088509 0.034877 0.077903 0.037863 -0.030659 -0.018223 0.014628 -0.102351 -0.042293 0.028631 -0.033168 0.105375 0.012114 -0.147790 -0.007362 0.119103 0.043123 -0.046543 0.056739 -0.028301 -0.135385 -0.049352 -0.099956 0.102359 -0.097788 -0.004616 -0.034874 -0.074809 \n0.117257 0.003009 0.011154 -0.169168 -0.079847 0.019249 0.076356 0.010647 -0.051752 0.018442 -0.003119 -0.088213 -0.101739 0.002080 0.000203 0.106894 0.040191 -0.167377 -0.002184 0.137859 0.070513 0.006650 0.060892 -0.136605 -0.082514 -0.051486 -0.098920 0.045837 -0.112219 0.012311 -0.032421 -0.095770 \n0.089285 0.077508 0.019808 -0.178807 -0.089113 0.036306 0.016847 -0.009434 -0.007096 -0.032877 0.055601 -0.101866 -0.036522 0.051645 0.087084 0.045113 0.084132 -0.058205 0.079466 0.148531 0.068842 -0.034318 0.039556 -0.187735 -0.044516 0.086945 0.048514 -0.046501 -0.089197 0.022667 -0.016467 0.026856 \n0.004324 0.198835 0.045991 -0.158336 -0.093425 0.035811 -0.145307 0.002837 -0.009589 -0.125701 0.153856 -0.180990 0.018506 0.112340 0.090892 -0.005788 0.150669 0.106259 0.063352 -0.014873 0.006340 0.065954 -0.032212 -0.026891 0.021048 0.093658 -0.090510 -0.007142 0.080709 0.073971 -0.030469 0.076295 \n0.097750 0.141161 0.026392 -0.068865 -0.046034 0.073752 0.051406 0.000633 -0.014813 -0.044030 -0.015162 -0.073034 -0.095788 -0.063206 0.195831 -0.074314 0.006509 0.142319 -0.013589 -0.074751 0.000003 0.119487 -0.055202 -0.002444 0.006512 0.123531 -0.036318 0.084526 0.136015 0.050117 -0.003169 0.095154 \n0.139474 0.047960 0.027223 0.013219 -0.052381 0.079886 0.185103 0.025478 -0.068963 0.016056 -0.055130 0.005937 -0.120370 -0.186493 0.150029 -0.017434 -0.005442 0.111598 -0.076604 -0.099524 -0.058103 0.100202 -0.035654 0.038830 0.012508 -0.000658 -0.060497 0.066665 0.079722 0.142275 0.012077 0.022504 \n0.135698 0.032853 -0.025995 0.059223 -0.043914 0.100993 0.215069 0.037016 -0.071171 -0.006376 -0.032517 0.010760 -0.065507 -0.148230 0.056919 -0.042133 -0.033954 0.109405 -0.101728 -0.075055 0.005938 0.041755 -0.013549 0.110257 0.039366 0.018071 0.052085 0.056953 0.050230 0.144456 0.021841 0.001465 \n0.134227 0.041096 -0.061485 0.054966 -0.056764 0.084437 0.213343 0.055314 -0.052393 0.011308 -0.027370 0.021602 -0.013330 -0.140458 0.009733 -0.079107 -0.082394 0.100616 -0.025509 -0.086411 0.004174 -0.036076 0.009054 0.186944 -0.031461 0.053258 0.150028 0.014613 0.049660 0.122103 0.020441 0.011679 \n0.091513 0.134030 -0.116428 0.016728 -0.080013 0.082029 0.104084 0.018085 -0.027354 0.032150 0.078124 -0.022941 0.044163 -0.037802 -0.084995 -0.134114 -0.091533 0.133474 -0.008039 -0.109529 -0.007892 -0.148899 0.041573 0.097925 0.048025 0.040445 0.199117 -0.109140 -0.047717 -0.038369 0.062078 -0.039950 \n0.039624 0.253230 -0.100188 -0.082036 -0.064970 0.016263 -0.088788 0.010698 -0.013891 -0.041645 0.138828 -0.069040 0.112394 0.174971 -0.109718 0.055792 -0.043798 0.025729 -0.054612 -0.027360 0.036663 0.001664 -0.042717 0.175052 0.041398 -0.063698 0.045263 0.022938 -0.035608 0.013511 0.027593 -0.009450 \n0.107480 0.009787 -0.060226 -0.083488 -0.074567 0.034945 0.059688 0.035237 -0.019732 -0.013617 -0.023118 -0.014135 0.041612 0.026587 -0.059716 0.051098 -0.073035 -0.121685 -0.039252 -0.051624 -0.049556 -0.068248 0.055507 -0.058828 -0.149640 0.107282 -0.027147 0.087519 0.153781 0.055056 0.036505 -0.031854 \n0.106622 -0.003861 -0.021348 -0.099473 -0.070178 0.052940 0.061288 0.031461 -0.019104 -0.020812 -0.018499 -0.044968 0.000296 0.018823 -0.027740 0.095604 -0.048958 -0.112997 -0.102798 -0.035527 -0.071991 0.001553 0.025803 -0.115849 -0.127057 0.024527 -0.124135 0.145897 0.129750 0.085928 0.040547 -0.017936 \n0.099110 0.010502 0.036882 -0.130805 -0.078845 0.027013 0.053483 0.004597 -0.037911 -0.001205 -0.036378 -0.035327 -0.044486 -0.011252 0.014448 0.110590 -0.005294 -0.106933 -0.100168 -0.008829 -0.039386 0.052912 0.051532 -0.215856 -0.091016 0.055316 -0.098031 0.095330 0.149157 0.121476 0.032213 -0.016403 \n0.028004 0.226894 0.023564 -0.130075 -0.083078 0.026565 -0.107154 -0.001028 -0.031965 -0.082441 0.154939 -0.156561 0.011600 0.088391 0.059746 -0.043768 0.117637 0.096381 0.031384 -0.037298 -0.019471 -0.011911 -0.082806 -0.023826 -0.035251 0.152668 0.054600 0.036817 0.086273 0.096746 -0.042278 0.077595 \n0.134031 0.066380 0.033211 -0.032357 -0.052881 0.055878 0.125886 0.036614 -0.086323 -0.015670 -0.071590 0.038155 -0.125581 -0.112508 0.087640 0.043625 0.069072 0.062524 -0.018971 0.019054 -0.005686 0.107858 0.030051 0.104346 0.099672 -0.109073 -0.122930 -0.020258 -0.095912 0.104783 -0.177058 -0.071379 \n0.136503 0.052062 -0.025896 0.007574 -0.042908 0.068754 0.150283 0.049774 -0.067584 -0.033491 -0.036563 0.046275 -0.076289 -0.108802 0.035446 -0.013211 0.035519 0.074173 0.001881 0.011113 0.029676 0.032394 0.039140 0.168346 0.109882 -0.092465 -0.106862 -0.037770 -0.143106 0.047406 -0.169767 -0.087501 \n0.128717 0.065942 -0.069026 0.010173 -0.058821 0.055130 0.146527 0.062138 -0.051715 -0.023275 -0.042414 0.062661 -0.040407 -0.097958 -0.000170 -0.056738 0.005825 0.052625 0.081622 0.015050 0.039520 -0.053590 0.084135 0.214255 0.067782 -0.036374 -0.005244 -0.128133 -0.144167 0.012225 -0.152893 -0.083695 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n32\n6\n440.568563 348.267724 258.176898 158.822108 129.944287 110.045102 74.920301 64.103548 54.641760 39.545215 36.676344 31.215370 29.972900 22.199493 20.407369 17.614554 12.651972 10.796969 9.472633 9.060509 7.384158 5.845468 4.290567 3.094468 2.205294 2.103393 1.662684 1.186149 0.669309 0.585443 0.354509 0.307398 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/pdms/In-the-wild_aligned_PDM_68.txt",
    "content": "# The mean values of the components (in mm)\n204\n1\n6\n-73.393523 \n-72.775014 \n-70.533638 \n-66.850058 \n-59.790187 \n-48.368973 \n-34.121101 \n-17.875411 \n0.098749 \n17.477031 \n32.648966 \n46.372358 \n57.343480 \n64.388482 \n68.212038 \n70.486405 \n71.375822 \n-61.119406 \n-51.287588 \n-37.804800 \n-24.022754 \n-11.635713 \n12.056636 \n25.106256 \n38.338588 \n51.191007 \n60.053851 \n0.653940 \n0.804809 \n0.992204 \n1.226783 \n-14.772472 \n-7.180239 \n0.555920 \n8.272499 \n15.214351 \n-46.047290 \n-37.674688 \n-27.883856 \n-19.648268 \n-28.272965 \n-38.082418 \n19.265868 \n27.894191 \n37.437529 \n45.170805 \n38.196454 \n28.764989 \n-28.916267 \n-17.533194 \n-6.684590 \n0.381001 \n8.375443 \n18.876618 \n28.794412 \n19.057574 \n8.956375 \n0.381549 \n-7.428895 \n-18.160634 \n-24.377490 \n-6.897633 \n0.340663 \n8.444722 \n24.474473 \n8.449166 \n0.205322 \n-7.198266 \n-29.801432 \n-10.949766 \n7.929818 \n26.074280 \n42.564390 \n56.481080 \n67.246992 \n75.056892 \n77.061286 \n74.758448 \n66.929021 \n56.311389 \n42.419126 \n25.455880 \n6.990805 \n-11.666193 \n-30.365191 \n-49.361602 \n-58.769795 \n-61.996155 \n-61.033399 \n-56.686759 \n-57.391033 \n-61.902186 \n-62.777713 \n-59.302347 \n-50.190255 \n-42.193790 \n-30.993721 \n-19.944596 \n-8.414541 \n2.598255 \n4.751589 \n6.562900 \n4.661005 \n2.643046 \n-37.471411 \n-42.730510 \n-42.711517 \n-36.754742 \n-35.134493 \n-34.919043 \n-37.032306 \n-43.342445 \n-43.110822 \n-38.086515 \n-35.532024 \n-35.484289 \n28.612716 \n22.172187 \n19.029051 \n20.721118 \n19.035460 \n22.394109 \n28.079924 \n36.298248 \n39.634575 \n40.395647 \n39.836405 \n36.677899 \n28.677771 \n25.475976 \n26.014269 \n25.326198 \n28.323008 \n30.596216 \n31.408738 \n30.844876 \n47.667532 \n45.909403 \n44.842580 \n43.141114 \n38.635298 \n30.750622 \n18.456453 \n3.609035 \n-0.881698 \n5.181201 \n19.176563 \n30.770570 \n37.628629 \n40.886309 \n42.281449 \n44.142567 \n47.140426 \n14.254422 \n7.268147 \n0.442051 \n-6.606501 \n-11.967398 \n-12.051204 \n-7.315098 \n-1.022953 \n5.349435 \n11.615746 \n-13.380835 \n-21.150853 \n-29.284036 \n-36.948060 \n-20.132003 \n-23.536684 \n-25.944448 \n-23.695741 \n-20.858157 \n7.037989 \n3.021217 \n1.353629 \n-0.111088 \n-0.147273 \n1.476612 \n-0.665746 \n0.247660 \n1.696435 \n4.894163 \n0.282961 \n-1.172675 \n-2.240310 \n-15.934335 \n-22.611355 \n-23.748437 \n-22.721995 \n-15.610679 \n-3.217393 \n-14.987997 \n-22.554245 \n-23.591626 \n-22.406106 \n-15.121907 \n-4.785684 \n-20.893742 \n-22.220479 \n-21.025520 \n-5.712776 \n-20.671489 \n-21.903670 \n-20.328022 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n204\n34\n6\n-0.007395 -0.093690 0.039362 0.204443 -0.104698 0.033568 -0.090173 0.010170 -0.042341 0.104375 0.032695 0.038750 0.064385 -0.037025 0.058377 0.032457 -0.100005 -0.082042 -0.053440 0.008782 -0.027164 -0.000368 -0.129614 0.035436 -0.062685 -0.075349 0.140764 -0.032290 -0.115829 -0.037865 0.068590 0.008886 -0.066442 0.259211 \n-0.002553 -0.075344 0.037127 0.201967 -0.069124 0.041645 -0.100939 0.018352 0.006598 0.081569 0.004894 0.038886 0.050631 0.056656 0.055353 -0.028457 -0.022518 -0.089693 -0.079196 0.010851 -0.017583 0.015095 -0.077834 -0.000944 -0.104255 -0.060338 0.106169 -0.065799 -0.067068 -0.051588 0.080490 0.063152 -0.047531 0.178216 \n-0.002097 -0.055385 0.025705 0.215785 -0.026274 0.053548 -0.086364 0.041926 0.035784 0.033485 -0.014602 0.049999 0.031950 0.125201 0.045372 -0.064200 0.070073 -0.074313 -0.083942 -0.007566 -0.003666 0.034226 -0.018354 -0.011639 -0.084633 -0.039431 0.064057 -0.056515 -0.046926 -0.074699 0.073477 0.074109 -0.054882 0.046675 \n-0.005533 -0.035821 0.019787 0.226957 0.030415 0.059508 -0.051058 0.057386 0.023240 -0.025487 -0.013088 0.043330 0.025141 0.113119 0.017370 -0.071064 0.108140 -0.049138 -0.043417 -0.065375 0.012959 0.070483 0.075536 -0.035685 -0.005847 0.012618 0.040297 -0.049743 -0.061354 -0.087164 0.033762 0.048771 -0.096563 -0.045189 \n-0.006914 0.011987 0.030022 0.205560 0.099633 0.072384 -0.008313 0.060244 -0.006584 -0.104943 -0.018036 0.032806 0.029879 0.068434 -0.043721 -0.052564 0.077505 -0.062192 0.026865 -0.122834 -0.001529 0.064443 0.160557 -0.036750 0.124476 0.072641 0.048609 -0.043443 -0.060729 -0.040443 -0.050540 0.050509 -0.118886 -0.146867 \n-0.004182 0.064263 0.036886 0.149341 0.158261 0.075501 0.030568 0.067074 -0.040268 -0.167116 -0.020230 0.029360 0.046726 0.033410 -0.121685 -0.004528 -0.017505 -0.050390 0.063237 -0.133203 -0.070794 0.005133 0.178032 -0.002768 0.153446 0.105966 0.061693 0.011010 -0.027442 0.001944 -0.103967 0.045708 -0.083197 -0.172889 \n0.016954 0.088125 0.034199 0.081242 0.170872 0.048964 0.063434 0.083842 -0.058188 -0.164769 -0.012135 0.002128 0.084787 -0.009691 -0.136231 0.068411 -0.091616 0.042046 0.053339 -0.068859 -0.141834 -0.040710 0.017020 0.034007 0.053187 0.096749 0.068416 0.075079 0.038728 0.063588 -0.109581 0.007737 0.033105 -0.152075 \n0.021733 0.081042 0.015310 0.029492 0.112212 0.012959 0.065003 0.095565 -0.047228 -0.120559 -0.022904 -0.051461 0.036411 -0.036990 -0.101765 0.150918 -0.102123 0.163128 0.047199 0.037063 -0.223718 -0.065303 -0.149191 -0.017823 -0.134138 0.084419 0.010718 0.087970 0.043030 0.040099 -0.068487 -0.008773 0.077035 -0.082281 \n0.024713 0.084952 0.002319 -0.002792 0.028194 -0.016856 0.036083 0.087381 -0.020743 -0.024386 -0.027268 -0.091654 -0.009025 -0.052124 -0.033407 0.168353 -0.061447 0.244847 0.024587 0.064221 -0.161138 0.020993 -0.164584 -0.068179 -0.181775 0.087509 -0.068202 0.059078 -0.004250 -0.001472 -0.031248 -0.049011 -0.019415 0.022163 \n0.025404 0.095704 -0.013447 -0.036864 -0.064015 -0.035962 0.001144 0.050101 0.006172 0.084003 -0.015860 -0.102295 -0.028308 -0.053076 0.017520 0.110370 -0.009494 0.248830 -0.017769 0.064655 -0.062487 0.133872 -0.077193 -0.077102 -0.104610 0.084923 -0.116710 -0.000424 -0.001453 -0.001504 -0.004986 -0.072792 -0.151917 0.063339 \n0.027234 0.088446 -0.037011 -0.090962 -0.124015 -0.052844 -0.020061 0.017974 0.031824 0.138013 -0.009523 -0.093892 -0.061812 -0.016350 0.043025 0.034106 0.036403 0.177560 -0.066137 0.039288 0.041972 0.145398 -0.004524 -0.021113 0.025045 0.065780 -0.102128 -0.061053 0.010043 -0.018688 0.018733 -0.002990 -0.240304 0.007274 \n0.033301 0.051083 -0.050161 -0.137239 -0.130410 -0.078352 -0.030467 -0.016581 0.042916 0.153230 -0.008295 -0.048519 -0.056020 -0.017449 0.051644 -0.021078 0.049456 0.042549 -0.075780 0.051205 0.057200 0.117965 0.058462 0.078890 0.121853 0.027311 -0.037081 -0.082100 0.013948 0.019188 0.029703 0.076102 -0.243643 -0.067711 \n0.034561 -0.024817 -0.037181 -0.171731 -0.091823 -0.080914 -0.018022 -0.019280 0.055534 0.112038 -0.006388 0.000380 -0.027767 -0.031689 0.027915 -0.012644 0.004351 -0.072270 -0.053990 0.028620 0.011428 0.077628 0.073278 0.159948 0.096141 0.006855 0.036568 -0.013290 -0.001587 0.033748 0.052795 0.164287 -0.166678 -0.098685 \n0.031311 -0.094373 -0.015266 -0.181991 -0.032285 -0.067979 0.020822 -0.028457 0.050194 0.060652 0.006169 0.060618 0.005717 -0.047184 0.006512 0.012425 -0.059877 -0.141325 -0.029145 -0.010906 -0.069894 0.032082 0.054382 0.151384 0.041519 0.026929 0.076049 0.067107 -0.027885 0.040313 0.041582 0.194576 -0.086531 -0.080338 \n0.030327 -0.127857 -0.008012 -0.166922 0.025066 -0.062660 0.063753 -0.029802 0.044933 0.028298 0.025152 0.109179 0.013585 -0.043385 0.003918 0.007538 -0.080941 -0.141969 0.011067 -0.055727 -0.099322 -0.018025 0.009874 0.065510 -0.019589 0.084273 0.059580 0.099232 -0.026102 0.043042 0.023322 0.151827 -0.031702 -0.023000 \n0.030239 -0.141766 -0.020490 -0.154724 0.073176 -0.066098 0.076339 -0.045120 0.049403 -0.014474 0.024782 0.109864 0.005943 -0.008921 0.001482 -0.008304 -0.060453 -0.100507 0.030769 -0.093919 -0.042422 -0.045051 -0.014060 -0.020183 -0.093279 0.134797 0.006048 0.040717 -0.038709 0.039630 0.006137 0.076303 0.021244 0.014680 \n0.030493 -0.158938 -0.031460 -0.156567 0.120023 -0.070626 0.084879 -0.065759 0.063746 -0.047728 -0.002344 0.094855 -0.013995 0.014159 0.011125 -0.034394 -0.064702 -0.055871 0.041269 -0.110361 0.045722 -0.064289 -0.013213 -0.104140 -0.133226 0.183607 -0.037284 0.002311 -0.041808 0.033510 -0.034315 0.012710 0.065609 0.046794 \n-0.029307 -0.000612 0.006003 0.066897 -0.126329 0.008282 0.106455 -0.058070 -0.127455 0.112217 0.028721 -0.008227 0.023123 -0.184660 -0.000131 0.060814 -0.038192 0.061802 0.055924 -0.086767 -0.011372 0.116214 0.039681 -0.047083 0.046626 0.042705 0.011194 -0.002237 0.023832 0.021378 0.074731 -0.040608 -0.025003 0.203421 \n-0.038458 0.020813 -0.004500 0.021759 -0.086203 0.017004 0.123118 -0.051398 -0.154096 0.048594 0.160783 0.035847 -0.105209 -0.131283 -0.034334 0.088202 -0.022053 0.065794 0.043514 -0.164773 0.038562 0.221823 -0.008980 0.076251 -0.067806 0.014541 0.027230 -0.014379 -0.016754 -0.010835 0.026126 -0.010414 0.029183 0.058614 \n-0.021490 0.036216 -0.005865 0.020024 -0.060804 0.026512 0.126241 -0.083197 -0.120419 0.032472 0.187630 -0.015555 -0.159327 -0.011903 -0.087082 0.079345 -0.061540 0.015194 0.062573 -0.039469 0.032277 0.191416 0.026454 0.082398 -0.056523 -0.017131 0.027510 -0.008610 0.004494 -0.034043 -0.017450 0.006765 0.078634 -0.036122 \n0.000867 0.042636 0.003104 0.029552 -0.036234 0.016402 0.123844 -0.126971 -0.075012 0.060293 0.148833 -0.081953 -0.173218 0.088994 -0.136465 0.063644 -0.092909 -0.034989 0.083554 0.107321 0.022452 0.121649 0.095422 0.064093 -0.044127 -0.041514 -0.001734 -0.007934 0.040275 -0.042178 -0.037676 0.021143 0.091871 -0.056272 \n0.024120 0.058528 0.006018 0.028610 -0.012243 0.008813 0.097121 -0.159602 -0.017056 0.077811 0.087002 -0.120528 -0.150197 0.184860 -0.180434 0.040369 -0.097894 -0.042266 0.075094 0.203623 0.039492 0.033806 0.132455 0.059185 -0.102173 -0.071020 -0.051542 0.002257 0.073697 -0.021845 -0.035627 0.009661 0.123071 -0.065039 \n-0.056420 0.059125 -0.030321 -0.057038 0.055493 -0.007116 -0.126529 0.019949 -0.058614 -0.078223 0.002145 0.050900 0.167834 -0.173333 0.181067 -0.004047 0.063488 0.151506 -0.125850 -0.136067 0.023547 0.034287 -0.056834 0.003824 0.134406 -0.055792 0.087938 0.068804 -0.033240 0.076407 -0.033551 -0.097730 0.084249 -0.079917 \n-0.038591 0.041658 -0.021071 -0.054808 0.085131 -0.020672 -0.150923 -0.028119 -0.005051 -0.082123 -0.027470 0.004437 0.151800 -0.139134 0.205779 0.055682 0.024516 0.096154 -0.038417 -0.113849 0.045637 0.075165 -0.039525 0.011140 0.058496 -0.061165 0.070389 0.031381 -0.020956 0.065917 -0.033395 -0.096762 0.067056 0.005758 \n-0.007940 0.026461 -0.003035 -0.037585 0.112114 -0.032320 -0.154598 -0.070183 0.034104 -0.066949 -0.048103 -0.076036 0.108505 -0.081056 0.189128 0.100712 0.001290 0.009722 0.046728 -0.023127 0.013390 0.076873 0.012671 0.031037 0.075639 -0.064473 0.061414 -0.019564 0.014597 0.046786 -0.011485 -0.084927 -0.000334 0.061175 \n0.018946 -0.000145 0.011179 -0.029672 0.136914 -0.030086 -0.147824 -0.105721 0.066935 -0.079902 -0.036968 -0.110909 0.052283 0.004188 0.126896 0.134626 -0.006676 -0.052490 0.091685 0.063396 -0.013036 0.002970 0.053049 0.019284 0.038579 -0.025497 0.025340 -0.089926 0.050450 -0.006666 -0.013118 -0.030505 -0.058633 0.064143 \n0.026629 -0.059165 -0.000823 -0.058599 0.151849 -0.022073 -0.130501 -0.084385 0.071751 -0.134872 0.039773 -0.057794 -0.044027 0.076494 0.035989 0.101529 0.005315 -0.029779 0.032498 0.028803 0.005618 -0.063529 -0.004924 -0.022183 -0.113427 0.055922 -0.008186 -0.140830 0.090960 -0.114112 -0.009417 0.083947 -0.041032 -0.006371 \n-0.010951 0.075350 -0.001817 -0.012876 0.013096 0.004579 -0.016153 -0.047823 -0.029850 0.016150 0.033334 0.015682 0.035621 0.037191 -0.019504 -0.019256 0.044839 0.020295 -0.073131 0.039780 -0.036879 -0.040970 0.053655 -0.001482 -0.002821 -0.032902 -0.000066 0.005729 0.001116 0.056517 -0.017058 -0.021947 0.037761 -0.039276 \n-0.012100 0.064207 -0.001096 -0.013941 0.006814 0.008710 -0.012277 -0.037790 -0.022203 0.014245 0.023934 0.012607 0.028185 0.041440 -0.015444 -0.022646 0.048805 0.020521 -0.080918 0.029123 -0.081415 -0.044517 0.073681 0.021481 -0.045782 -0.048161 0.003254 0.036460 -0.020011 0.065280 0.002563 -0.013150 0.045393 -0.015692 \n-0.013403 0.059276 0.001032 -0.014545 0.001798 0.010646 -0.008624 -0.026081 -0.017773 0.015405 0.015492 0.014040 0.022709 0.044120 -0.010399 -0.025661 0.051172 0.017503 -0.087720 0.021120 -0.123991 -0.047505 0.087387 0.047337 -0.088646 -0.065851 0.004667 0.069448 -0.040053 0.076718 0.023178 -0.004565 0.059432 0.003138 \n-0.013951 0.058265 0.004661 -0.015235 -0.000197 0.012932 -0.005151 -0.015313 -0.012719 0.014418 0.008297 0.018443 0.016678 0.051541 -0.004867 -0.028055 0.052224 0.011609 -0.091004 0.016980 -0.158439 -0.046922 0.104617 0.077207 -0.137148 -0.078657 0.005486 0.103939 -0.062683 0.082257 0.041975 0.000801 0.070429 0.027527 \n-0.012210 0.028100 -0.049457 -0.000857 0.000872 -0.019030 0.038293 -0.002178 0.022197 0.008799 -0.017828 -0.005589 -0.010209 -0.026452 0.021247 -0.052723 0.074659 0.058170 -0.117953 -0.020708 -0.092993 -0.079196 0.037883 0.239302 -0.027228 -0.100648 0.058909 0.082147 0.014782 0.033906 0.058190 -0.035069 -0.021313 -0.027376 \n-0.009373 0.029412 -0.026531 -0.009199 -0.003610 -0.013154 0.015847 0.006945 0.008617 0.011675 -0.022788 0.000421 -0.007697 0.005751 0.004594 -0.044864 0.063024 0.031416 -0.086743 -0.005786 -0.098907 -0.064158 0.049203 0.156108 -0.042964 -0.089257 0.038446 0.080608 -0.015415 0.071399 0.069731 -0.012170 0.005798 -0.005172 \n-0.007108 0.026011 0.001392 -0.008785 -0.008676 0.005534 -0.002323 0.008151 -0.006538 0.012718 -0.016466 0.016828 0.006599 0.032792 -0.008449 -0.031395 0.045979 0.010267 -0.064263 0.010528 -0.087206 -0.035954 0.070434 0.037452 -0.075439 -0.048176 -0.000307 0.074329 -0.047401 0.093968 0.057921 0.003554 0.025206 0.029137 \n-0.008616 0.022966 0.025314 -0.006647 -0.012574 0.026313 -0.017855 0.005573 -0.012147 0.015962 -0.009681 0.035391 0.015389 0.061577 -0.023327 -0.005465 0.025007 -0.014906 -0.045808 0.023055 -0.069940 -0.012007 0.101986 -0.066696 -0.085795 -0.002255 -0.051891 0.079767 -0.057766 0.078189 0.009062 0.022309 0.030125 0.051138 \n-0.007559 0.013536 0.044396 -0.007128 -0.015567 0.038755 -0.032699 0.009439 -0.018290 0.012901 -0.008295 0.047013 0.018435 0.076580 -0.045586 0.016721 0.010805 -0.037831 -0.013755 0.026798 -0.057710 -0.005862 0.113804 -0.159457 -0.085242 0.031892 -0.090113 0.066240 -0.055402 0.053706 -0.034191 0.047815 0.018971 0.071248 \n-0.009091 0.030428 0.013028 0.035270 -0.081955 0.036276 0.100983 -0.087388 -0.023476 0.093938 -0.074920 -0.042748 0.009283 -0.052713 0.069944 0.007487 0.044433 0.011768 -0.036858 -0.036562 0.024165 -0.141056 -0.039714 -0.075826 0.052239 0.062199 -0.048408 -0.033798 0.070343 0.124688 -0.003466 0.051026 0.026850 -0.026589 \n-0.006597 0.030631 0.019664 0.021478 -0.061211 0.024677 0.092608 -0.095386 -0.041650 0.068021 -0.054620 -0.036136 0.003440 -0.021689 0.046307 0.007803 0.056620 0.018329 -0.048106 -0.037355 0.044779 -0.170111 -0.043462 -0.076020 0.064547 0.063396 -0.047873 -0.054226 0.076392 0.081326 0.000747 0.074683 0.030657 -0.067772 \n-0.006641 0.024694 0.004169 0.027776 -0.027517 0.013511 0.064805 -0.082940 -0.047464 0.039102 -0.047983 -0.025260 -0.012175 0.006766 0.039254 0.004585 0.108825 0.031769 -0.009359 -0.008230 0.016421 -0.164640 -0.117072 -0.007971 0.069640 0.013253 -0.033817 -0.074767 0.071010 0.026436 0.003056 0.090554 0.005886 -0.126966 \n0.003124 0.009371 0.014768 0.046412 -0.023874 0.007554 0.036147 -0.057698 -0.058069 0.021256 -0.033315 -0.028152 -0.018259 0.027895 0.014161 0.004788 0.111066 0.042408 -0.022688 -0.017329 0.008180 -0.162840 -0.121148 0.012000 0.040787 0.005472 -0.028935 -0.070284 0.051087 0.002654 0.026039 0.077896 -0.025666 -0.138535 \n-0.000470 0.012891 0.009958 0.038234 -0.036776 0.012638 0.068663 -0.077589 -0.036998 0.050930 -0.057174 -0.042770 -0.006013 -0.005012 0.037131 0.011314 0.092853 0.040593 -0.014258 -0.022855 0.028109 -0.170083 -0.092356 -0.017012 0.053071 0.021873 -0.039264 -0.061002 0.057296 0.043219 0.021993 0.064114 -0.018287 -0.100373 \n-0.004849 0.015938 0.022983 0.026902 -0.073622 0.023429 0.089584 -0.088285 -0.026052 0.080286 -0.059955 -0.060351 0.007903 -0.035545 0.046797 0.007563 0.038369 0.030247 -0.059021 -0.056175 0.056872 -0.166273 -0.011250 -0.093711 0.035468 0.071037 -0.053530 -0.042127 0.065314 0.098363 0.023179 0.056227 0.018585 -0.031417 \n-0.022520 -0.008135 -0.028919 -0.050592 0.028229 -0.006670 -0.060855 -0.025108 0.032576 -0.018823 0.066255 0.018170 0.050211 0.001974 -0.062666 -0.057057 -0.027695 0.045343 -0.016243 0.061633 0.033008 0.024487 0.074017 -0.133643 0.041960 -0.008005 0.017760 -0.020807 0.009949 -0.031184 -0.022929 0.014085 0.078201 0.073117 \n-0.008675 -0.004691 -0.013081 -0.031226 0.031157 -0.009924 -0.096969 -0.029153 0.000787 -0.038194 0.087791 0.000669 0.047391 0.025733 -0.093797 -0.072336 -0.039133 0.081739 -0.024145 0.067113 0.036711 0.015968 0.050245 -0.135056 0.022818 0.008747 0.011110 -0.044613 0.004409 -0.030744 -0.014206 -0.016314 0.026864 0.033661 \n-0.008350 -0.011949 -0.026508 -0.026911 0.063836 -0.024789 -0.126394 -0.011390 -0.004841 -0.063477 0.084207 0.008974 0.040823 0.048228 -0.106669 -0.072520 0.012682 0.093989 0.007098 0.087810 0.011179 0.012357 -0.005468 -0.074058 0.051617 -0.038525 0.027206 -0.052944 -0.001957 -0.069244 -0.001150 -0.012855 0.002275 -0.012184 \n0.001527 -0.031469 -0.019959 -0.032691 0.084353 -0.036934 -0.139297 0.005872 -0.012615 -0.087659 0.090429 0.021235 0.029692 0.064764 -0.125564 -0.055872 0.037072 0.084147 -0.001494 0.073344 0.027889 -0.000113 -0.020299 -0.040534 0.015971 -0.035466 0.033553 -0.071962 -0.021193 -0.078379 0.024814 -0.018801 -0.021044 -0.038763 \n-0.009394 -0.028927 -0.028906 -0.024460 0.073718 -0.026898 -0.120720 -0.003723 -0.012295 -0.070463 0.075708 0.021766 0.032103 0.053181 -0.101806 -0.052394 0.030694 0.112096 0.015064 0.098439 -0.005609 0.016172 -0.039627 -0.035390 0.062895 -0.064759 0.040731 -0.023003 -0.019984 -0.078158 0.013167 -0.008582 -0.012839 -0.026034 \n-0.014806 -0.020586 -0.019304 -0.037248 0.040627 -0.009079 -0.093808 -0.017684 0.001926 -0.042956 0.076953 0.012620 0.038220 0.029003 -0.084598 -0.051706 -0.017717 0.096814 -0.013796 0.075862 0.017984 0.023149 0.017010 -0.093650 0.035446 -0.023135 0.026297 -0.011769 -0.011753 -0.043351 0.000060 -0.001953 0.028135 0.023804 \n0.029937 -0.018527 -0.150727 0.081029 0.034186 -0.056299 0.148788 0.006526 0.091516 -0.080441 -0.035735 0.001997 0.019030 -0.077643 0.107984 -0.056258 0.031181 -0.051535 -0.027580 0.051815 0.012036 0.081437 0.046704 -0.059784 0.100904 0.025934 0.021662 -0.016937 0.039461 -0.046583 -0.092257 -0.006300 0.025170 0.075511 \n0.027077 -0.012351 -0.112038 0.035893 0.028873 -0.001260 0.084827 -0.000242 0.048683 -0.054899 -0.029997 0.032628 -0.039785 -0.108273 0.045755 -0.052769 0.008202 -0.062941 -0.003272 0.105699 0.039987 0.020061 0.023151 0.020974 0.008953 0.010896 0.031997 -0.023033 0.010634 -0.071553 -0.062459 -0.034568 0.012175 0.063440 \n0.008543 0.000575 -0.036234 0.011338 0.007897 -0.004413 0.042000 0.015857 0.024113 -0.029744 -0.022255 0.053502 -0.038865 -0.097944 0.017588 -0.046984 0.033087 -0.053276 0.001529 0.130264 0.069392 -0.067173 0.042421 0.083647 -0.052001 0.027113 0.009719 0.006872 -0.038341 -0.067952 0.010640 -0.078205 -0.015510 0.044074 \n-0.004854 -0.002651 -0.001199 -0.004656 -0.017881 0.006502 0.011106 0.033451 0.012608 -0.007254 -0.021085 0.015936 -0.015926 -0.005386 0.006492 -0.032176 -0.004622 -0.056644 0.008831 0.017207 0.029211 -0.031234 -0.017190 0.017370 -0.014199 -0.016837 0.012242 0.028844 0.024051 -0.033052 0.005809 -0.026851 -0.003806 0.029867 \n-0.015813 -0.010424 0.049608 -0.025236 -0.047180 0.033566 -0.017722 0.037312 0.003478 0.019989 -0.017899 -0.019776 0.013111 0.105673 -0.000689 -0.029181 -0.055355 -0.059296 0.016272 -0.126448 -0.003426 0.027239 -0.080562 -0.048943 0.063203 -0.071188 0.018085 0.055066 0.103002 0.015990 -0.024552 0.027166 0.005359 -0.008937 \n-0.030164 -0.027591 0.112130 -0.046006 -0.063466 0.021257 -0.061882 0.075039 -0.009550 0.046188 -0.025234 -0.036147 0.006893 0.099786 -0.046972 -0.003808 -0.042536 -0.034124 0.072153 -0.146706 -0.007001 0.011713 -0.032354 -0.013285 0.064616 -0.076540 -0.019793 0.045941 0.057997 -0.041981 -0.013777 -0.007784 -0.005500 0.063654 \n-0.019028 -0.051789 0.153268 -0.072220 -0.068001 0.053218 -0.114782 0.100188 -0.032458 0.065327 -0.041993 0.000529 -0.049657 0.064999 -0.113438 0.028145 -0.026783 -0.004495 0.083060 -0.067097 0.025177 -0.054527 0.012232 0.061208 0.035559 -0.041029 -0.084866 0.011647 -0.034824 -0.100697 -0.069165 -0.000768 0.005575 0.110722 \n-0.028944 -0.046124 0.115567 -0.042613 -0.067724 0.014225 -0.060491 0.103470 0.006232 0.039413 -0.031752 -0.037167 -0.006997 0.085995 -0.038657 0.010688 -0.040086 -0.042208 0.098912 -0.130371 0.037304 0.026656 -0.077987 -0.030978 0.062407 -0.072535 -0.073939 0.000909 0.019295 -0.034458 0.004467 -0.047183 0.050673 0.035176 \n-0.010823 -0.035975 0.055356 -0.020108 -0.053716 0.014079 -0.008891 0.083913 0.022598 0.005824 -0.031201 -0.038542 -0.005753 0.089595 0.015986 -0.004255 -0.071317 -0.065118 0.079317 -0.106829 0.072446 0.039057 -0.148855 -0.072824 0.059724 -0.064924 -0.048338 0.013216 0.059644 0.037032 0.035514 -0.058015 0.052789 -0.068904 \n0.002749 -0.025782 0.001067 -0.000955 -0.021760 -0.004910 0.022410 0.073031 0.031948 -0.017623 -0.036578 0.002064 -0.036635 -0.028107 0.022568 -0.013938 -0.026049 -0.064352 0.076825 0.032919 0.104873 -0.018636 -0.086478 -0.011360 -0.025080 -0.005483 -0.057313 -0.019218 -0.018251 -0.006270 0.058547 -0.109717 0.043965 -0.042968 \n0.019557 -0.022238 -0.040271 0.015531 -0.000923 -0.011734 0.050924 0.059961 0.044488 -0.037512 -0.047698 0.041131 -0.067325 -0.125904 0.038185 -0.026749 0.003161 -0.063752 0.059945 0.149873 0.138916 -0.043073 -0.038810 0.040424 -0.060299 0.036249 -0.057345 -0.030897 -0.069820 -0.039359 0.051438 -0.140784 0.040745 -0.023033 \n0.038295 -0.025011 -0.119022 0.039087 0.023303 -0.007108 0.097748 0.031451 0.066314 -0.064618 -0.049757 0.022319 -0.054682 -0.131953 0.060803 -0.041005 -0.002889 -0.065952 0.048990 0.118731 0.087371 0.038178 -0.008116 -0.019859 0.013619 0.027323 -0.017437 -0.041034 -0.017123 -0.056194 -0.033365 -0.067470 0.076076 0.024548 \n0.027485 -0.031004 -0.155083 0.076967 0.030238 -0.066616 0.146021 0.018614 0.095435 -0.090351 -0.026858 -0.001195 0.004065 -0.062969 0.102157 -0.046214 0.025250 -0.047454 0.004391 0.045916 0.011457 0.054752 0.064190 -0.063966 0.092363 0.019011 0.007010 -0.017645 0.023346 -0.068486 -0.085984 -0.024607 0.046082 0.096832 \n0.011663 0.006518 -0.034439 0.013241 0.007617 -0.009766 0.044050 0.033840 0.029582 -0.028393 -0.028713 0.055641 -0.043922 -0.099413 0.025141 -0.040381 0.025727 -0.058214 0.010448 0.139032 0.097498 -0.059681 0.018053 0.084934 -0.052343 0.037634 -0.003643 0.010254 -0.050500 -0.038878 0.012009 -0.092562 -0.007898 0.022313 \n-0.002313 0.000470 0.000002 -0.004007 -0.016215 0.003976 0.010717 0.048028 0.016739 -0.006186 -0.024483 0.020048 -0.016876 -0.003548 0.010717 -0.026953 -0.010998 -0.055979 0.019518 0.025395 0.050851 -0.031442 -0.027433 0.021960 -0.018106 -0.009491 0.000531 0.037647 0.007463 -0.008452 0.013288 -0.048925 0.006064 0.024257 \n-0.012568 -0.006592 0.049539 -0.024277 -0.046609 0.030396 -0.019942 0.053337 0.007757 0.021468 -0.022706 -0.013044 0.011272 0.109312 0.003377 -0.022628 -0.060616 -0.061807 0.030161 -0.121278 0.019402 0.026839 -0.095660 -0.042434 0.064863 -0.064156 0.007525 0.057258 0.096057 0.035786 -0.019042 0.010115 0.006232 -0.015055 \n-0.023212 -0.060246 0.157807 -0.069886 -0.065658 0.063342 -0.104423 0.082001 -0.030749 0.079114 -0.044460 0.004171 -0.030429 0.042545 -0.096287 0.021890 -0.044874 -0.001170 0.067071 -0.085689 0.021431 -0.035122 0.002907 0.064224 0.017922 -0.037758 -0.083689 0.004437 -0.037603 -0.087459 -0.078257 -0.011921 0.002713 0.130484 \n-0.010961 -0.010595 0.057062 -0.023094 -0.047200 0.021346 -0.011516 0.068656 0.015527 0.014810 -0.022984 -0.021018 0.006940 0.106574 0.011226 -0.023889 -0.062806 -0.069001 0.044159 -0.108003 0.050370 0.047099 -0.112640 -0.068669 0.081751 -0.068521 -0.039172 0.022972 0.052837 0.036443 0.008144 -0.028320 0.041313 -0.064570 \n0.001631 -0.003250 0.002325 -0.002118 -0.016181 0.000274 0.016759 0.060910 0.024499 -0.012519 -0.030588 0.015271 -0.023100 -0.011757 0.016440 -0.028638 -0.012990 -0.064844 0.039739 0.031429 0.079984 -0.015321 -0.052897 -0.006078 -0.010170 -0.011420 -0.050449 -0.009900 -0.025391 -0.012909 0.032748 -0.085004 0.038699 -0.043162 \n0.017805 0.004146 -0.038887 0.014222 0.006581 -0.009683 0.047461 0.046887 0.038038 -0.032345 -0.032763 0.056280 -0.049485 -0.108966 0.031645 -0.041431 0.020138 -0.064023 0.031810 0.142533 0.126216 -0.050995 -0.002245 0.056266 -0.050403 0.037812 -0.053115 -0.030572 -0.081976 -0.050982 0.028974 -0.127634 0.029303 -0.029574 \n0.012632 -0.105919 0.042832 -0.056614 0.095894 -0.023994 -0.019214 -0.026746 -0.070577 0.202269 0.218185 -0.141116 0.012637 -0.191347 0.155533 -0.244488 0.121779 -0.013130 0.138472 -0.059114 -0.216544 -0.050477 0.066853 -0.149560 -0.157390 -0.095098 -0.011175 -0.068427 0.210754 -0.054577 0.001436 0.040342 -0.004236 -0.006205 \n-0.009740 -0.029067 0.036475 -0.046866 0.118228 0.012225 -0.006405 -0.060398 -0.086556 0.108100 0.186918 -0.112111 0.050136 -0.100126 0.105268 -0.169540 0.136663 -0.073114 0.067763 -0.014521 -0.082623 -0.012863 0.033765 -0.100967 -0.086562 -0.092416 -0.077945 0.022729 0.114331 -0.008651 -0.069342 0.005683 0.051571 -0.009558 \n-0.031301 0.046217 0.033243 -0.035388 0.123785 0.052248 0.021922 -0.090547 -0.125667 0.007581 0.182378 -0.055823 0.074368 -0.029074 0.053632 -0.049594 0.107463 -0.137761 0.005821 -0.001673 0.066449 0.006118 0.023528 0.013804 -0.007269 -0.081388 -0.113434 0.070675 0.027780 0.045024 -0.106739 -0.011678 0.031635 0.044212 \n-0.047441 0.105188 0.031918 -0.024384 0.114098 0.082601 0.048491 -0.112125 -0.170704 -0.059301 0.164752 -0.009947 0.090739 0.006616 0.010369 0.042357 0.050623 -0.158918 -0.042210 0.014508 0.136027 -0.007670 -0.034495 0.072312 0.050835 -0.067209 -0.075955 0.023597 0.006577 0.084867 -0.082590 0.024191 -0.041988 0.068711 \n-0.060936 0.133902 0.031530 -0.004574 0.064304 0.088650 0.058070 -0.124018 -0.171917 -0.102988 0.148276 0.058157 0.076201 0.044152 0.002505 0.090897 -0.015203 -0.110439 -0.090091 0.069662 0.172459 -0.039446 -0.067579 0.050794 0.093654 -0.082964 -0.026363 0.019254 -0.002660 0.016061 0.024545 0.043909 -0.092051 0.131171 \n-0.074646 0.131695 0.040257 0.018490 -0.004794 0.081236 0.061589 -0.133348 -0.147784 -0.119212 0.094712 0.084045 0.033173 0.036408 0.031797 0.094617 -0.048706 0.003825 -0.075566 0.078798 0.127307 -0.065285 -0.109546 -0.039558 0.030185 -0.072564 0.052974 -0.008825 -0.088317 -0.022192 0.091494 0.087785 -0.062428 0.116086 \n-0.090236 0.103626 0.066939 0.057319 -0.079163 0.060686 0.053354 -0.131920 -0.087102 -0.115977 0.028577 0.074951 -0.040556 0.035491 0.087538 0.018752 -0.081645 0.116761 0.007481 0.045592 0.001466 -0.094081 -0.126988 -0.146376 -0.033849 -0.021719 0.127080 -0.004981 -0.202755 -0.119973 0.081963 0.106640 -0.105281 -0.008628 \n-0.101059 0.055177 0.092659 0.069983 -0.150193 0.026469 0.028574 -0.115258 -0.008902 -0.088879 -0.036594 0.022392 -0.109572 -0.005240 0.149355 -0.115056 -0.119773 0.122550 0.083092 0.011822 -0.092288 -0.074034 -0.034558 -0.115984 -0.044921 0.007854 0.164244 0.014803 -0.170980 -0.127570 0.019750 0.095694 0.000371 -0.041291 \n-0.101563 0.024376 0.106668 0.071318 -0.187231 0.012534 0.023991 -0.099795 0.030129 -0.076617 -0.069392 -0.016558 -0.116462 -0.024845 0.158655 -0.199665 -0.116228 0.076206 0.060656 -0.024832 -0.096681 -0.049299 0.082420 -0.042295 -0.032862 0.018749 0.125343 0.039212 -0.037558 -0.047906 -0.025870 -0.049529 0.088169 -0.088273 \n-0.101840 -0.013119 0.089419 0.075166 -0.182579 0.048658 0.037188 -0.067749 0.031914 -0.101814 -0.073274 -0.026481 -0.109668 -0.000858 0.110793 -0.202483 -0.060253 0.007145 0.019590 -0.069464 -0.056870 0.023689 0.132006 0.031411 0.013119 -0.007012 0.038285 0.031656 0.001551 -0.025447 -0.065416 -0.114616 0.017261 -0.086359 \n-0.084252 -0.076412 0.065909 0.060881 -0.142931 0.092286 0.073191 -0.013071 0.017189 -0.159961 -0.092115 -0.031651 -0.101432 -0.005721 0.027741 -0.106024 0.050453 -0.034217 -0.067543 -0.069923 -0.011090 0.116035 0.100208 0.041462 -0.024840 -0.044467 -0.108854 -0.009354 0.073244 0.020455 -0.063103 -0.129646 -0.010099 -0.129133 \n-0.053651 -0.123308 0.046845 0.020630 -0.076671 0.113112 0.110897 0.086910 0.003931 -0.182808 -0.094838 -0.023499 -0.059496 -0.018019 -0.032692 -0.004557 0.053504 -0.066417 -0.110231 -0.014603 -0.024896 0.113252 0.016412 0.021225 -0.025860 -0.075046 -0.145044 -0.030890 0.110020 0.003382 0.007818 -0.098244 -0.037896 -0.009802 \n-0.023018 -0.146263 0.038114 -0.004028 -0.020148 0.111274 0.136014 0.170400 0.002465 -0.171044 -0.075670 -0.007542 -0.006424 -0.025856 -0.031416 0.083827 0.010568 -0.069980 -0.109310 0.034905 -0.065427 0.031177 -0.044852 0.019905 -0.066999 -0.093510 -0.115084 -0.095158 0.120015 0.040204 0.030019 -0.030543 -0.096811 0.096700 \n0.002563 -0.127886 0.038658 -0.012071 0.033255 0.099861 0.164565 0.238246 0.001567 -0.105923 -0.057783 0.008664 0.027296 -0.030573 -0.009853 0.117020 -0.032701 -0.000283 -0.057331 0.051644 -0.084379 -0.039476 -0.031627 -0.008417 -0.048362 -0.080557 -0.044505 -0.140295 0.129312 0.090377 0.020906 0.080368 -0.088585 0.136852 \n0.022743 -0.067070 0.035835 -0.011617 0.073365 0.063325 0.146213 0.262278 -0.002566 -0.007656 -0.026090 0.035984 0.031533 -0.009645 0.044980 0.084848 -0.046015 0.086576 -0.001782 0.061428 0.003570 -0.047340 0.031674 0.003656 -0.006269 -0.074342 -0.011328 -0.102136 0.042874 0.026755 -0.027391 0.130301 -0.059867 0.018942 \n0.044270 0.008816 0.045389 -0.021660 0.105411 0.011416 0.109320 0.275577 -0.009832 0.108035 0.004491 0.064390 0.012428 0.006669 0.095357 -0.012238 -0.068972 0.152817 0.075822 0.056884 0.138813 -0.051472 0.080042 0.012909 0.015075 -0.053459 0.028833 0.077070 0.026517 -0.070675 -0.045298 0.143809 -0.084532 -0.083487 \n0.062375 0.088371 0.056930 -0.031399 0.124205 -0.042608 0.070908 0.302850 -0.030713 0.221806 0.047883 0.094536 -0.004204 0.009990 0.148794 -0.108520 -0.096997 0.187564 0.140322 0.044017 0.262141 -0.062547 0.161527 -0.013297 0.037476 -0.028287 0.047541 0.256555 -0.040101 -0.087736 0.006879 0.108453 -0.022617 -0.092782 \n0.101351 -0.059896 0.089671 -0.007831 -0.037385 0.008829 -0.001672 -0.180136 0.189267 0.006458 -0.232031 -0.060867 0.181227 0.130852 -0.046776 0.035489 0.001493 0.160017 0.051721 0.209411 0.059181 -0.083851 0.207104 -0.102355 0.039265 -0.194572 -0.024321 -0.005820 -0.022768 0.136793 -0.107813 -0.023127 -0.048810 0.065417 \n0.081528 -0.068502 0.070887 -0.055525 -0.045082 0.007139 -0.005518 -0.118178 0.156592 -0.033074 -0.063860 0.040561 0.111628 0.029568 0.001045 0.060952 0.022298 0.185051 0.009521 -0.033300 0.094005 0.013600 0.105380 0.040334 -0.061870 -0.114470 0.021331 0.005113 0.002683 0.024141 -0.026811 -0.015689 0.020153 0.092373 \n0.068413 -0.083706 0.052305 -0.086296 -0.055880 0.021816 0.004492 -0.068120 0.145758 -0.102567 0.092434 0.075123 0.007851 0.008520 0.005845 0.082068 0.031453 0.180413 -0.035339 -0.133303 0.088724 0.067980 0.008976 0.111553 -0.060575 -0.053669 0.037053 -0.004075 0.049025 0.024206 0.031083 0.032459 0.049141 0.038812 \n0.072230 -0.065201 0.036058 -0.094849 -0.081347 0.028568 0.008797 -0.040623 0.140707 -0.126779 0.170257 0.059293 -0.052776 0.003182 -0.000677 0.081645 0.026914 0.131691 -0.055588 -0.098342 0.031136 -0.006790 0.015095 0.065597 0.078600 0.017709 0.045791 -0.034864 0.076622 0.013773 0.067413 -0.028287 0.059081 0.012658 \n0.085169 -0.029802 0.042368 -0.082336 -0.097939 0.016608 0.019748 -0.012989 0.121625 -0.087612 0.209630 0.002191 -0.126582 0.050998 -0.030648 0.060010 0.000332 0.046455 -0.023080 0.055862 -0.053376 -0.135321 0.065824 0.029844 0.265716 0.072053 0.059330 -0.027794 0.089039 -0.055593 0.088900 -0.113375 0.061857 -0.009200 \n0.083666 0.022002 0.040552 -0.085899 -0.099865 0.015644 0.005068 0.015547 0.156486 -0.077980 0.202180 0.014951 -0.087338 0.065851 -0.063459 -0.028938 0.043400 -0.024140 -0.005938 0.066480 -0.072232 -0.179693 -0.014319 -0.032909 0.209669 0.122452 -0.039648 0.049486 0.011409 -0.011759 -0.007885 -0.033417 -0.079718 0.113528 \n0.083042 0.057031 0.040177 -0.099114 -0.076680 0.009479 -0.003028 -0.000359 0.165022 -0.119377 0.166816 0.098159 -0.004888 0.020345 -0.028135 -0.047425 0.054928 -0.014242 -0.021031 -0.044814 0.032783 -0.054961 -0.131702 -0.039012 -0.016037 0.136114 -0.052413 0.121523 -0.038968 0.020495 -0.008329 -0.024960 -0.081805 0.022575 \n0.083252 0.078107 0.056261 -0.095219 -0.059524 0.003298 -0.006615 -0.018114 0.165684 -0.099090 0.091701 0.078091 0.033441 -0.005544 -0.024775 -0.060616 0.054683 -0.025820 0.034770 -0.091304 0.061625 0.040350 -0.178139 0.001904 -0.150915 0.076588 -0.034127 0.096746 -0.053605 0.008977 -0.035470 0.025028 -0.047913 -0.054413 \n0.104239 0.086773 0.093349 -0.055643 -0.033261 -0.013246 -0.005449 -0.083837 0.158899 -0.044047 -0.029467 -0.026012 0.082055 -0.049138 0.021797 0.008367 0.031893 -0.087107 0.189897 -0.063379 0.017963 0.128801 -0.143253 0.036421 -0.143812 -0.013284 0.024955 0.056737 -0.069906 0.014591 -0.040838 0.026539 -0.056752 -0.047314 \n0.135218 0.100220 0.124814 0.000991 -0.008239 -0.012542 -0.007248 -0.156811 0.151583 -0.017420 -0.147099 -0.155713 0.101870 -0.021523 0.028922 0.110680 0.026595 -0.179864 0.346267 0.114265 -0.070904 0.161901 -0.031710 0.014850 -0.024451 -0.120325 0.049384 -0.013378 -0.123593 0.072623 -0.129874 0.065687 -0.065814 -0.083173 \n0.059343 -0.012441 -0.000702 -0.081890 -0.008092 -0.077276 -0.028878 0.037295 -0.029467 -0.011411 -0.007775 0.009769 -0.027726 0.005769 0.053610 0.007873 -0.041172 -0.106420 -0.027219 0.033050 -0.102197 -0.048661 -0.066981 -0.013190 0.109772 0.030705 0.044138 0.003928 0.036674 0.004169 0.127857 0.033634 0.266703 0.060249 \n0.041616 -0.014486 -0.010645 -0.063688 0.002398 0.007759 -0.030515 0.045130 -0.060320 -0.012907 -0.003144 -0.002022 0.026184 0.062737 0.093489 -0.012212 -0.012731 -0.061123 0.017645 0.059738 -0.070951 0.028276 -0.008200 -0.013282 0.059036 0.130001 0.007378 -0.026986 0.024631 0.046745 0.129132 0.029581 0.168902 0.047167 \n0.022209 -0.018785 -0.021705 -0.047282 0.007684 0.096519 -0.037379 0.046370 -0.086593 -0.016226 0.004486 -0.016435 0.077777 0.123311 0.134030 -0.031013 0.005692 -0.004530 0.059412 0.082817 -0.053324 0.097630 0.047516 -0.011465 0.006049 0.229178 -0.021088 -0.047042 0.006557 0.091702 0.122335 0.003955 0.066979 0.045888 \n0.003588 -0.021043 -0.030263 -0.030409 0.008371 0.181691 -0.044518 0.046051 -0.107937 -0.022794 0.009934 -0.032445 0.119848 0.179589 0.164240 -0.043652 0.020389 0.047092 0.094236 0.116267 -0.035936 0.155206 0.107422 -0.005142 -0.059549 0.322080 -0.057313 -0.069079 -0.015886 0.152295 0.127300 -0.018228 -0.013766 0.025152 \n0.010241 -0.012175 -0.071132 -0.010497 0.020024 0.062831 -0.040007 0.039616 -0.072378 0.035685 -0.031690 0.021640 0.001871 0.085038 0.053829 -0.017137 0.002122 0.049195 0.087728 -0.000013 -0.026558 0.022211 -0.058457 0.166112 0.018559 -0.012076 -0.001099 0.016641 -0.019024 0.008824 0.091310 -0.040634 0.020518 0.051538 \n0.005987 -0.016904 -0.065972 -0.010944 0.009374 0.084910 -0.052019 0.031735 -0.073636 0.036433 -0.016286 0.003295 0.010276 0.085334 0.068926 -0.031102 -0.004326 0.037220 0.078248 0.028015 -0.030765 0.043535 -0.024633 0.098897 0.024402 0.055196 -0.037672 -0.019356 0.027747 -0.077052 0.014090 -0.032531 0.010393 0.037211 \n0.000485 -0.009792 -0.056592 -0.011803 0.001583 0.104774 -0.061755 0.023501 -0.079032 0.039804 -0.011369 -0.011280 0.024653 0.096826 0.073638 -0.046150 -0.008896 0.030450 0.076726 0.038805 -0.033667 0.064954 0.000900 0.056790 0.020232 0.116360 -0.065525 -0.045163 0.037248 -0.094933 -0.027418 -0.028737 -0.007585 -0.011135 \n0.006045 -0.001260 -0.070490 -0.009554 0.009933 0.083302 -0.054060 0.013771 -0.080073 0.047390 -0.001836 -0.009542 0.020186 0.082461 0.052009 -0.037023 0.003870 0.028911 0.066158 0.019377 -0.061487 0.042407 -0.017089 0.104383 0.041935 0.073886 -0.019325 -0.089932 0.029586 -0.070428 0.024956 -0.057337 0.001123 -0.019238 \n0.011242 -0.005679 -0.074412 -0.010055 0.015755 0.060586 -0.047635 0.003394 -0.091558 0.044380 -0.005161 -0.022962 0.015788 0.070458 0.028218 -0.036979 0.017605 0.028455 0.076360 -0.013275 -0.085415 0.018537 -0.048259 0.163691 0.057659 0.026190 0.028125 -0.133961 0.018631 -0.042571 0.090055 -0.092227 0.027934 -0.057308 \n0.036225 -0.071534 0.000459 -0.046818 0.009337 -0.083866 -0.046178 -0.015273 -0.060642 -0.002822 -0.089257 0.012351 -0.039814 -0.035023 -0.019465 0.040371 -0.061960 0.039386 -0.094567 -0.024135 0.027052 0.059938 0.091591 0.001979 -0.040503 -0.107158 0.083539 -0.101314 0.013352 -0.110938 0.043372 0.129228 0.064399 -0.008668 \n0.044367 -0.059525 0.015036 -0.064121 -0.018004 -0.082253 -0.045795 -0.026919 -0.070584 -0.018065 -0.070391 -0.010245 -0.029751 -0.046835 -0.028796 0.042482 -0.143375 0.002483 -0.181009 -0.070951 0.071994 -0.003359 0.199769 -0.097579 -0.087064 0.021258 0.050995 -0.107355 -0.017802 0.053633 0.017380 0.028065 0.073668 -0.008871 \n0.043601 -0.049111 0.016832 -0.062722 -0.017690 -0.081388 -0.042392 -0.021628 -0.089830 -0.013515 -0.066851 -0.008770 -0.034597 -0.040346 -0.030496 0.037791 -0.131468 -0.012470 -0.162906 -0.049426 0.049875 -0.008340 0.154951 -0.079562 -0.052199 0.026980 0.057094 -0.092234 -0.013567 0.075758 0.017100 -0.027829 0.047598 -0.032337 \n0.048275 -0.038263 0.001498 -0.051199 0.023312 -0.088975 -0.041336 0.005000 -0.095004 -0.003208 -0.060932 0.022466 -0.042236 0.005051 -0.023424 0.039786 -0.019435 -0.003108 -0.056234 0.026974 -0.047324 0.009209 -0.052575 0.062674 0.041095 -0.089544 0.071103 -0.050484 0.024541 0.021517 -0.001177 -0.034659 0.017784 -0.145986 \n0.041785 -0.047523 -0.029972 -0.046078 0.035909 -0.097136 -0.056514 0.005071 -0.089750 -0.024247 -0.085315 0.019769 -0.065103 -0.012747 -0.033756 0.024734 -0.014857 0.011973 -0.055355 0.034763 -0.048361 0.024915 -0.036487 0.063963 0.019368 -0.114169 0.095381 -0.092460 0.033839 -0.059458 -0.018405 0.004700 0.059549 -0.091842 \n0.044692 -0.060996 -0.030403 -0.035242 0.035271 -0.092818 -0.058749 -0.002830 -0.079239 -0.025316 -0.092148 0.019888 -0.062782 -0.020325 -0.029536 0.030127 -0.024623 0.028330 -0.061266 0.010928 -0.030107 0.035277 -0.006948 0.059755 -0.013675 -0.115893 0.086825 -0.110997 0.020747 -0.090179 -0.023240 0.046759 0.032906 -0.074567 \n0.053635 0.024179 0.003976 -0.054942 0.021919 -0.085630 -0.040517 0.019222 -0.098845 -0.002500 -0.058854 0.005767 -0.030366 0.004222 -0.039686 -0.024247 -0.003591 -0.045881 -0.051159 0.028487 -0.059601 0.002317 -0.116937 0.048023 0.058109 -0.042187 -0.022689 0.101089 -0.085146 -0.047060 0.001347 -0.071920 -0.053922 -0.029344 \n0.050654 0.043811 0.016440 -0.071448 -0.018825 -0.083915 -0.050552 0.001389 -0.099731 -0.011661 -0.055724 -0.038660 -0.011181 -0.044498 -0.046592 -0.061600 -0.110975 -0.092581 -0.146722 -0.054465 0.022640 -0.027495 0.052884 -0.124647 -0.044100 0.090185 -0.056166 0.049620 -0.094099 0.024798 -0.007076 -0.078109 -0.056294 0.024809 \n0.056727 0.056174 0.016328 -0.067723 -0.018273 -0.089164 -0.053246 -0.004474 -0.088775 -0.016960 -0.055755 -0.049357 -0.003393 -0.057029 -0.057944 -0.078602 -0.116320 -0.116419 -0.135346 -0.065112 0.031714 -0.026089 0.053926 -0.146501 -0.088218 0.112238 -0.073090 0.019614 -0.073331 -0.010391 -0.016316 -0.081091 -0.101346 0.033206 \n0.053863 0.070189 0.002551 -0.055065 0.015300 -0.088786 -0.052051 0.006288 -0.079362 0.003819 -0.069097 -0.028654 -0.012574 -0.043552 -0.060415 -0.082841 -0.030205 -0.090290 -0.056654 -0.010515 -0.026259 0.018692 -0.060457 -0.049003 -0.020092 0.013016 -0.079443 0.055920 -0.044095 -0.132379 -0.069462 -0.028557 -0.081805 -0.014368 \n0.054487 0.052156 -0.025662 -0.043672 0.038234 -0.097652 -0.061550 0.009141 -0.091552 -0.018906 -0.073348 -0.023368 -0.035182 -0.019426 -0.067143 -0.077651 0.000840 -0.064016 -0.050794 0.012015 -0.070276 -0.009742 -0.116913 0.009872 0.004210 -0.020941 -0.054064 0.033929 -0.041700 -0.124288 -0.068147 -0.077671 -0.106441 -0.047888 \n0.053071 0.036339 -0.025735 -0.047996 0.041005 -0.100444 -0.057829 0.013845 -0.101921 -0.018419 -0.077645 -0.013513 -0.041059 -0.010444 -0.059771 -0.061024 0.005044 -0.056949 -0.052826 0.026317 -0.078409 -0.007588 -0.129995 0.033848 0.029133 -0.047594 -0.035022 0.047235 -0.058100 -0.091996 -0.054179 -0.066075 -0.078103 -0.046683 \n-0.031460 -0.013987 -0.149818 0.080350 0.020681 -0.057818 0.011712 -0.001008 0.061313 0.017201 0.005085 0.074818 -0.047190 0.015967 -0.029569 0.136405 0.070269 -0.039349 0.090760 -0.058563 0.065843 0.078259 -0.020924 -0.163454 -0.040312 -0.104189 0.069961 0.035861 0.064290 0.042196 0.239137 -0.024848 0.084332 -0.100068 \n-0.002327 -0.017521 -0.139425 0.070865 0.048305 0.079434 -0.035213 -0.026484 0.062642 0.070813 -0.027307 0.065759 -0.050332 -0.068535 -0.050488 0.065260 -0.034808 0.001184 0.022065 -0.018875 0.057119 -0.010911 -0.054658 -0.020400 -0.028406 -0.025774 0.004056 0.020749 -0.040770 0.067283 0.024925 0.111530 0.079035 -0.073362 \n-0.000584 -0.011118 -0.122177 0.051211 0.037283 0.151535 -0.057755 -0.043066 0.075106 0.105702 -0.045195 0.033969 -0.051730 -0.086152 -0.035502 0.008973 -0.086193 0.022393 -0.032203 -0.010625 0.037487 0.012267 -0.063710 0.003409 0.012534 0.018225 -0.069447 -0.045926 -0.057301 0.086177 -0.125110 0.108154 0.062487 -0.033929 \n0.000480 -0.003086 -0.124476 0.057127 0.033887 0.149034 -0.061112 -0.048529 0.070950 0.110661 -0.040134 0.025767 -0.039288 -0.067746 -0.045629 0.005133 -0.081370 0.017086 -0.037104 -0.021039 0.008034 -0.013678 -0.051069 0.002511 0.032016 0.008503 -0.097044 -0.037501 -0.056407 0.051508 -0.144414 0.076356 0.059066 -0.021945 \n-0.000559 0.003997 -0.124027 0.053465 0.037579 0.149996 -0.049979 -0.055144 0.070483 0.113771 -0.040946 0.023671 -0.042610 -0.080241 -0.054001 0.002411 -0.078521 0.019903 -0.057589 -0.015049 -0.008310 -0.005005 -0.034476 0.006235 0.033286 0.024151 -0.120019 0.018377 -0.072419 0.051602 -0.134832 0.064370 0.037586 0.038711 \n-0.000565 0.012494 -0.144971 0.071663 0.048838 0.081814 -0.029624 -0.048941 0.058314 0.080172 -0.010279 0.030880 -0.020393 -0.055948 -0.087529 0.040786 -0.005034 0.001085 -0.046251 -0.044062 -0.050526 -0.012975 0.003798 -0.023311 0.028814 -0.002381 -0.096432 0.041930 -0.029305 0.030971 -0.027834 0.007430 -0.084175 0.004963 \n-0.024116 0.030827 -0.152081 0.079655 0.025107 -0.047327 0.011967 -0.026416 0.054183 0.040100 0.018945 0.030843 -0.004122 0.017941 -0.093164 0.086158 0.096071 -0.024027 0.018254 -0.066233 -0.099375 0.036822 0.073623 -0.184943 0.021773 -0.066513 -0.059088 0.109738 0.066223 -0.037492 0.178023 -0.104653 -0.133898 -0.056362 \n-0.091307 0.021185 0.005452 0.093079 0.004462 -0.137494 0.027255 0.016193 0.035027 0.043270 0.017597 -0.052594 0.050678 -0.017621 -0.100552 0.045091 0.137042 -0.020604 0.004831 0.003501 -0.076423 -0.058265 0.083175 0.046838 -0.041851 0.066991 0.022783 0.025688 0.023265 -0.031676 0.073439 -0.072413 -0.208999 0.025261 \n-0.117606 0.016526 0.081068 0.093572 -0.000820 -0.179734 0.034199 0.055206 0.036610 0.045268 0.036467 -0.091173 0.086052 0.019906 -0.077335 0.021613 0.112294 -0.024854 0.001051 -0.024213 0.006556 -0.070798 0.044003 0.109037 -0.026106 0.108415 0.052460 -0.013149 -0.012349 -0.024464 -0.073565 -0.035321 -0.006109 0.085182 \n-0.119255 0.013200 0.094025 0.092040 -0.002146 -0.181868 0.034095 0.066850 0.038987 0.042822 0.035705 -0.088591 0.084897 0.040278 -0.058173 0.015843 0.087899 -0.013908 0.006996 -0.042503 0.059924 -0.066579 0.004384 0.103210 -0.024232 0.105557 0.087612 -0.040335 0.005558 -0.016772 -0.091889 -0.007373 0.029448 0.052985 \n-0.116290 0.010377 0.087191 0.091107 -0.002629 -0.185149 0.030103 0.072827 0.039401 0.035673 0.032489 -0.068554 0.067030 0.041143 -0.052476 0.026493 0.086061 -0.007730 0.013083 -0.014025 0.109392 -0.074283 -0.017676 0.099392 -0.055753 0.103876 0.090079 -0.044614 -0.019969 0.012981 -0.056802 -0.005694 0.062207 0.013923 \n-0.088956 0.002770 0.014073 0.083735 0.000259 -0.146666 0.024624 0.057239 0.040658 0.024938 0.022137 -0.006530 0.016834 0.033547 -0.054639 0.066908 0.066243 -0.006261 0.048043 0.020086 0.160704 -0.046164 -0.050282 0.007988 -0.125443 0.055461 0.087275 -0.006875 -0.007782 0.054046 0.083770 0.004746 0.021062 -0.066056 \n-0.035780 -0.013571 -0.129727 0.075906 0.019981 -0.033424 -0.002959 -0.000563 0.050482 0.021935 0.002944 0.075011 -0.045732 0.001801 -0.047564 0.120066 0.054278 -0.033545 0.090304 -0.063131 0.074862 0.062176 -0.020091 -0.117017 -0.059383 -0.080761 0.087965 0.081966 0.076590 0.065730 0.239584 -0.057628 0.009591 -0.117312 \n-0.008820 -0.007627 -0.158056 0.055203 0.017956 0.077099 -0.075129 -0.007191 0.032083 0.085832 -0.010026 0.034463 -0.026295 -0.045494 -0.041653 0.027555 -0.049879 0.009335 0.083404 -0.078297 0.040478 -0.117472 0.024219 0.074484 -0.004484 -0.034318 -0.038895 -0.061118 -0.048430 -0.005360 -0.051358 0.010804 0.052828 0.036864 \n-0.007737 -0.003256 -0.151791 0.055268 0.019966 0.087559 -0.078741 -0.018450 0.030698 0.091713 -0.015450 0.020864 -0.015028 -0.032981 -0.052983 0.014209 -0.059863 0.016094 0.069445 -0.092531 0.010370 -0.126361 0.028344 0.071716 0.009341 -0.033236 -0.067826 -0.044003 -0.045043 -0.018573 -0.090383 0.001302 0.035380 0.033187 \n-0.007412 0.002548 -0.158757 0.061181 0.018661 0.073976 -0.071983 -0.025639 0.028395 0.091940 0.000206 0.022257 -0.009808 -0.034953 -0.058116 0.017318 -0.038657 0.005313 0.049993 -0.087077 -0.010529 -0.130728 0.062698 0.069370 0.019104 -0.031545 -0.097670 0.007100 -0.077453 -0.016369 -0.071504 -0.037358 0.022404 0.093558 \n-0.032512 0.028427 -0.133433 0.078989 0.025468 -0.028533 0.004691 -0.021006 0.046417 0.047024 0.018770 0.037960 0.000477 0.007323 -0.092459 0.082200 0.086554 -0.011680 0.010444 -0.068859 -0.057549 0.014886 0.067619 -0.129370 0.001837 -0.039609 -0.014336 0.136787 0.056466 0.005406 0.166161 -0.086177 -0.153931 -0.065626 \n-0.106396 0.012082 0.093804 0.073458 0.006325 -0.122138 0.053986 0.020569 0.052258 0.097040 -0.030117 -0.063935 0.029007 -0.048173 -0.073480 0.006487 0.079422 -0.018318 -0.098277 0.085998 -0.045678 0.124596 -0.056062 -0.009915 0.115255 0.082543 0.043762 0.055274 0.033651 0.018777 -0.097186 0.025652 0.107246 0.082007 \n-0.108266 0.013196 0.107352 0.073267 0.005501 -0.118182 0.053900 0.026988 0.059629 0.098678 -0.033463 -0.059244 0.030748 -0.021010 -0.048874 -0.003174 0.046149 -0.004115 -0.096188 0.073125 -0.013743 0.137679 -0.084938 -0.025411 0.119975 0.081742 0.078842 0.041866 0.054237 0.044745 -0.113358 0.068330 0.125398 0.071168 \n-0.105677 0.013856 0.100276 0.068541 0.007179 -0.120756 0.052194 0.033207 0.056095 0.092773 -0.030246 -0.037497 0.018805 -0.020756 -0.042271 0.009948 0.041864 0.000654 -0.101674 0.096004 0.022386 0.126403 -0.085055 -0.027232 0.087129 0.079991 0.091934 0.037413 0.035609 0.080869 -0.077055 0.068696 0.147811 0.051447 \n0.200300 0.206381 0.037666 -0.062044 0.105603 0.039287 0.129443 -0.026108 -0.006145 0.008167 -0.180506 -0.005344 -0.154896 0.029728 -0.078524 -0.093022 0.282292 0.094500 -0.012038 -0.075772 -0.007254 0.075631 -0.021364 -0.032209 0.106197 -0.033075 -0.057528 -0.036911 -0.079279 -0.070271 0.134924 0.050103 0.176129 0.174669 \n0.174909 0.262626 0.001650 -0.050760 0.056767 0.046800 0.116679 0.016697 0.036953 -0.001587 -0.129708 -0.018479 -0.077744 0.017170 -0.006678 -0.084015 0.149428 0.003802 0.023948 -0.034466 -0.037293 0.015672 -0.028566 0.018799 0.029636 -0.058638 0.022368 -0.067504 -0.036674 -0.038199 0.101980 -0.006688 0.114199 0.092127 \n0.145419 0.271569 -0.034873 -0.044417 -0.005370 0.054598 0.106804 0.058877 0.047845 -0.006222 -0.038196 -0.028624 0.051275 0.021585 -0.019610 -0.032440 -0.042228 -0.040054 0.010931 -0.080129 -0.032979 -0.037624 0.046956 0.005674 -0.043045 -0.070160 0.084897 -0.059861 0.011866 -0.020727 0.016502 -0.105536 0.054309 0.077813 \n0.121784 0.205203 -0.040615 -0.025224 -0.078037 0.055910 0.087096 0.101567 0.032281 0.047114 0.067450 -0.029754 0.115044 0.004978 -0.002689 0.033261 -0.183060 -0.118272 -0.032756 -0.083449 -0.036678 -0.109978 0.089839 -0.018425 -0.047398 -0.071371 0.132785 -0.079312 0.053450 -0.016013 -0.087251 -0.136778 0.010646 0.048749 \n0.133914 0.102310 -0.020287 0.004986 -0.141709 0.003779 0.009098 0.120102 -0.047440 0.060693 0.150862 0.032856 0.123342 0.036340 0.053349 0.081323 -0.106337 -0.089787 -0.055918 0.076288 0.022085 -0.032767 0.044374 -0.049343 -0.054487 -0.077724 0.094554 -0.099233 0.070220 0.032782 -0.134028 -0.176615 0.058256 -0.110604 \n0.136156 0.012237 0.028350 0.055205 -0.144687 -0.046150 -0.025253 0.036940 -0.082417 0.046931 0.140621 0.125137 0.070684 0.035326 0.117788 0.115735 0.014819 -0.011779 -0.095812 0.103471 0.027698 0.015841 -0.045732 -0.086235 -0.100680 -0.049399 -0.026388 -0.094643 0.100905 0.044076 -0.187605 -0.094315 0.003539 -0.202719 \n0.096825 -0.052123 0.057933 0.114355 -0.098038 -0.121617 -0.055895 -0.022068 -0.059251 -0.000028 0.053843 0.302609 -0.066475 0.059366 0.163306 0.029775 0.086102 0.037617 -0.004275 0.136346 -0.030689 0.070476 -0.032601 -0.031896 -0.043260 -0.110607 -0.181097 0.120911 0.098080 0.036017 -0.155625 -0.014093 -0.023635 -0.063091 \n0.053280 -0.060018 0.037506 0.137972 0.011258 -0.178318 -0.023102 -0.051378 -0.072595 -0.086067 0.000313 0.285580 -0.051029 -0.025127 0.085024 -0.036423 0.014116 0.013590 0.100603 0.056762 -0.064465 -0.011526 0.015876 -0.005954 0.118192 -0.107172 -0.166406 0.124543 0.111421 0.028985 -0.074010 0.076955 -0.032659 0.141702 \n0.045574 -0.013216 0.032142 0.093571 0.050167 -0.171049 0.052834 -0.067576 -0.122586 -0.148784 -0.054492 0.096339 -0.018259 -0.062274 -0.040250 -0.143567 -0.086938 0.063209 0.139416 -0.029860 -0.021312 -0.063067 0.038636 0.074870 0.004951 -0.015358 -0.118334 -0.004443 0.136427 0.102426 0.070536 0.141456 -0.079749 0.125498 \n0.059666 0.033773 0.011922 0.066781 0.019188 -0.136499 0.012310 -0.053448 -0.112842 -0.162605 -0.033516 -0.083470 0.040366 -0.073418 -0.073634 -0.134124 -0.183406 0.070520 0.140600 -0.024180 0.078113 -0.014717 -0.030918 0.055699 -0.059861 -0.024527 -0.045187 -0.018538 0.147098 0.098916 0.092276 0.126182 -0.051521 0.096536 \n0.102008 0.062652 0.002559 0.033904 -0.034709 -0.028794 -0.029963 -0.001155 -0.088109 -0.139233 -0.017772 -0.206193 0.050147 -0.078321 -0.066908 -0.098039 -0.008521 0.078240 0.003116 -0.115075 0.170119 0.063555 0.042319 0.085075 -0.085497 -0.000332 -0.058397 -0.013971 0.095261 -0.001791 0.088311 0.169500 -0.076125 -0.011915 \n0.130156 0.030796 -0.028981 0.037504 -0.110897 0.045667 -0.073986 0.097997 -0.071465 -0.114585 0.024864 -0.164295 0.078517 -0.068363 -0.064291 -0.015782 0.086141 -0.030675 -0.057981 -0.071696 0.160759 0.037941 0.106627 -0.011196 0.036540 -0.017581 -0.051521 0.093436 -0.051622 -0.102102 0.046722 0.156601 0.065388 -0.029184 \n0.168973 -0.048346 -0.054128 0.028599 -0.159253 0.088824 -0.040072 0.101158 -0.015747 -0.066487 0.069651 -0.136555 0.131030 -0.095612 0.005098 0.051930 0.141634 -0.059902 -0.077737 -0.001406 0.060549 0.016779 0.073755 -0.079590 0.025474 0.002819 -0.008349 0.092361 -0.102785 -0.130624 0.011078 0.134838 0.105198 -0.029608 \n0.196868 -0.140552 -0.038053 0.030363 -0.136280 0.109791 0.082851 0.031947 -0.010593 0.024018 0.071666 -0.120218 0.158965 -0.056053 -0.005157 0.089872 0.082277 -0.037538 -0.032307 -0.004000 -0.077070 -0.047653 -0.036306 -0.059558 -0.007532 0.012245 0.064610 0.069522 -0.100870 -0.125037 -0.000483 0.105122 0.004543 -0.031563 \n0.220722 -0.189143 -0.019812 0.050177 -0.022114 0.078768 0.141034 -0.059095 -0.020072 0.062754 0.030385 -0.038935 0.084110 -0.009296 0.007037 0.034972 0.032848 -0.022511 0.007807 0.025446 -0.154512 -0.055275 -0.065423 0.057532 0.001583 -0.000069 0.148740 0.038380 -0.084950 -0.055361 -0.005477 0.024714 -0.104505 -0.036786 \n0.226640 -0.179498 0.049226 0.043510 0.105148 -0.008538 0.147024 -0.091442 -0.062929 0.109845 0.005074 0.058119 0.017767 0.089994 -0.044924 -0.062390 -0.007394 0.037390 0.010439 -0.015520 -0.064619 0.042369 -0.058993 0.055481 -0.000104 0.024385 0.166181 0.000132 -0.087429 0.021365 -0.001406 -0.118401 -0.061089 0.025621 \n0.236683 -0.154942 0.112382 0.048015 0.188712 -0.046365 0.145337 -0.144361 -0.102570 0.165949 -0.050088 0.165649 -0.012631 0.142407 -0.082270 -0.087023 0.021488 0.106059 -0.048916 -0.157005 0.118604 0.107512 -0.049746 -0.120962 0.092471 0.115214 0.092679 -0.156215 -0.070360 0.083441 -0.097703 -0.215489 -0.072382 0.027100 \n0.098748 -0.110249 0.040632 0.106294 0.034691 0.030852 -0.096378 -0.114844 0.076385 0.054995 -0.090801 -0.147677 0.060390 0.097064 -0.014503 -0.075035 -0.111119 -0.058225 -0.072715 0.091030 0.140176 -0.115472 -0.124135 0.002804 -0.034399 0.069021 -0.071552 0.126436 0.208688 -0.064774 0.167890 0.023198 0.065838 -0.115322 \n0.045293 -0.089374 0.018089 0.085862 0.012661 -0.008385 -0.067383 -0.079743 -0.026056 0.045936 -0.103235 -0.087935 0.099554 0.036145 -0.034997 -0.024818 -0.088738 0.005542 -0.088960 0.117580 0.051157 -0.047818 -0.031283 0.050240 -0.019133 0.069263 -0.073513 0.173658 0.080920 -0.038285 0.140359 -0.084856 0.069031 -0.038620 \n-0.004362 -0.070045 -0.005441 0.028721 -0.035581 0.008714 -0.023807 -0.055672 -0.056772 0.019390 -0.051096 -0.030542 0.150701 -0.048870 -0.050577 0.013535 -0.059832 0.055515 -0.059955 0.062922 0.041041 0.043294 -0.006914 0.139734 -0.004182 0.051132 -0.044750 0.176739 0.008876 -0.029887 0.077004 -0.117767 0.056034 -0.030393 \n-0.046908 -0.055997 -0.030801 -0.012931 -0.095239 0.007226 0.007382 -0.049966 -0.065128 -0.036849 -0.026556 0.024951 0.158839 -0.114967 -0.061207 0.047650 -0.045883 0.050290 0.011314 0.022440 -0.012041 0.017932 0.042840 0.074523 0.063977 0.076758 -0.024231 0.082162 -0.002699 -0.024259 0.019286 -0.035404 0.016136 -0.056954 \n-0.084798 -0.042180 -0.051749 -0.022690 -0.163003 -0.027359 0.032238 -0.030906 -0.064720 -0.018269 -0.007672 0.068355 0.116840 -0.135774 -0.081552 0.048596 -0.080784 0.017814 0.146383 0.045115 -0.164446 -0.039490 0.025936 0.042829 0.216153 0.010996 0.006383 0.024871 0.002893 -0.034911 -0.009591 0.024318 -0.029688 -0.025116 \n-0.106381 0.037472 -0.062633 -0.029746 -0.165792 -0.010239 0.012509 -0.033520 0.075020 0.048760 0.008410 0.182188 0.245250 0.004609 -0.187742 -0.114282 -0.018821 0.047174 0.096399 0.074864 -0.071890 0.002693 0.007320 0.000897 0.070591 0.012206 -0.053249 -0.072801 0.098886 -0.111274 0.027638 0.030143 0.068139 0.024639 \n-0.081730 0.078091 -0.032084 -0.016937 -0.094799 -0.034978 -0.035412 -0.016776 0.073337 0.010988 -0.014905 0.221079 0.199761 -0.067149 -0.096254 -0.041963 0.032786 0.009098 0.047313 -0.051221 -0.021669 0.051603 0.007726 -0.033954 -0.118397 0.100014 -0.080501 -0.162248 0.076284 -0.144372 0.005300 0.030886 0.089261 -0.018362 \n-0.032591 0.093392 0.005011 0.033984 -0.033653 -0.056018 -0.045205 -0.034382 0.054241 0.038895 -0.028006 0.147818 0.118347 -0.066122 -0.022476 0.025348 -0.024972 -0.006291 0.042302 -0.124172 0.007567 0.044630 0.010710 0.049093 -0.093271 0.092758 -0.055927 -0.139825 0.084283 -0.141690 0.001749 -0.018718 0.034520 -0.013745 \n0.025131 0.111171 0.052338 0.093959 0.036120 -0.076090 -0.055111 -0.055018 0.028419 0.039071 -0.021446 0.070711 -0.045120 0.015776 0.119003 0.157191 -0.056194 -0.037864 -0.019407 -0.101495 -0.025226 -0.020203 0.081456 0.053677 0.018315 0.139230 -0.090725 -0.024605 0.076010 -0.142354 0.011727 -0.028982 0.009696 0.010824 \n0.086343 0.128544 0.089920 0.151910 0.118411 -0.058267 -0.085331 -0.086356 0.086411 0.023158 -0.022226 -0.036163 -0.177136 0.077261 0.277540 0.318083 -0.140120 -0.082366 -0.088998 -0.072522 -0.066982 0.005449 0.106803 0.086831 0.077782 0.142782 -0.071544 0.132130 0.111582 -0.160749 0.004996 0.042392 -0.012883 0.064412 \n-0.061540 0.002620 -0.073689 0.003550 -0.071570 -0.007284 0.013967 -0.001633 -0.094799 -0.008264 -0.030895 0.022099 0.055730 0.034688 -0.025540 -0.038442 -0.002687 -0.049120 0.053353 0.026489 0.022921 0.048577 -0.071688 0.080905 0.064980 0.013782 -0.014355 -0.070959 -0.107091 0.226291 0.009386 0.025020 -0.005604 -0.092437 \n-0.083267 -0.013381 -0.104616 -0.054605 -0.053350 -0.040950 0.035114 0.002258 -0.090956 -0.033881 -0.040826 0.018097 0.028479 0.074550 0.001071 0.021358 0.041581 -0.040821 0.048402 0.008007 0.052241 0.038045 -0.031619 0.029420 0.021501 0.017835 -0.011740 -0.040020 -0.113478 0.098608 -0.030604 0.032750 0.004352 -0.062761 \n-0.112570 -0.029556 -0.131694 -0.107775 -0.048902 -0.072433 0.059086 0.003800 -0.085443 -0.052929 -0.057306 0.008400 0.005223 0.134826 0.035720 0.064559 0.065656 -0.055342 0.042012 0.015993 0.045317 0.026565 0.036061 -0.016830 -0.006164 0.013784 -0.005233 0.023644 -0.106323 0.001697 -0.058936 0.048287 0.020797 -0.018860 \n-0.138208 -0.042880 -0.154716 -0.161145 -0.036682 -0.087614 0.078138 -0.004009 -0.085960 -0.078308 -0.075158 -0.013667 -0.009818 0.193081 0.069946 0.112698 0.091929 -0.063611 0.052582 0.024224 0.037179 0.031363 0.096072 -0.069509 -0.079675 0.025210 -0.001654 0.058541 -0.103434 -0.086341 -0.084715 0.091389 0.038254 0.015236 \n-0.071614 -0.025433 -0.079555 -0.044231 -0.056001 0.003353 0.020448 0.039313 -0.034449 0.021201 -0.079939 0.028644 -0.024787 0.188439 0.060152 0.035784 0.042994 0.023862 -0.002200 -0.094819 -0.024939 0.021039 0.009160 -0.055080 -0.021112 -0.045149 -0.025621 0.216443 -0.029294 0.072591 -0.079226 -0.017757 0.067523 0.075291 \n-0.072195 -0.021031 -0.121170 -0.072247 -0.036905 -0.070614 0.012662 0.040015 -0.043028 0.012293 -0.078126 -0.030670 -0.033902 0.118408 0.040616 0.048834 0.050552 0.038276 0.008483 -0.058060 -0.034078 -0.041976 -0.009228 -0.045368 -0.013261 -0.068158 0.022561 0.132560 0.004265 -0.025965 -0.059467 -0.019725 0.063179 0.097074 \n-0.083844 -0.027702 -0.148124 -0.094158 -0.023167 -0.103209 0.009646 0.023882 -0.042179 0.000862 -0.043166 -0.071528 -0.042289 0.065372 0.035839 0.017436 0.064917 0.010734 0.049860 -0.058510 -0.037633 -0.085134 -0.033890 -0.026309 -0.004119 -0.070958 0.080402 -0.027002 0.048232 -0.088265 -0.053340 0.014549 0.001863 0.085118 \n-0.077701 -0.032876 -0.116524 -0.069424 -0.039070 -0.071006 0.000686 0.000032 -0.060440 -0.009999 -0.033027 -0.093775 -0.041865 0.049000 0.019074 0.068912 0.042780 0.002562 0.084029 -0.024194 0.004517 -0.150073 -0.009540 -0.075583 0.001970 -0.012793 0.069308 -0.097943 0.026051 -0.040273 -0.046429 -0.037232 -0.075387 0.056425 \n-0.073314 -0.025474 -0.086713 -0.034135 -0.056786 -0.033425 -0.010800 -0.006306 -0.083626 -0.019529 -0.023848 -0.103377 -0.072124 0.027925 0.038858 0.096703 0.015690 0.004385 0.117400 -0.019385 0.068925 -0.151549 0.006375 -0.118295 0.070831 0.037136 0.042043 -0.099400 -0.017748 0.020165 -0.062059 -0.092214 -0.152389 0.036151 \n0.044589 -0.132278 -0.016993 0.083882 0.043778 -0.034594 -0.072011 0.039110 -0.046069 -0.040587 0.123917 -0.047575 -0.122385 -0.035400 -0.024195 -0.012518 0.013652 0.031937 0.019659 -0.001715 0.023088 -0.000309 -0.031436 0.022571 0.019611 -0.006564 0.012784 0.083317 -0.104572 0.062104 0.000647 -0.056669 0.044672 0.004338 \n0.016329 -0.109007 -0.005045 0.067630 0.019108 -0.002645 -0.071902 0.025076 0.007237 -0.051092 0.091200 -0.100586 -0.101496 -0.065336 -0.015376 0.013166 0.008475 0.063623 0.047215 0.020495 -0.013691 0.030534 0.016318 -0.010397 -0.023315 0.035663 -0.023907 0.042304 -0.100402 0.062642 -0.013752 0.012255 0.032336 0.012548 \n0.005789 -0.090540 0.006017 0.048376 -0.000562 -0.003770 -0.064679 0.019118 0.018765 -0.056858 0.072645 -0.105570 -0.099008 -0.063197 -0.036400 0.020176 0.006068 0.073862 0.022493 -0.014200 -0.022956 0.011319 0.028866 -0.059130 0.024068 0.043375 -0.037957 0.009386 -0.070164 0.052847 -0.054076 0.043887 0.014360 -0.001251 \n0.001863 -0.067279 -0.004424 0.022537 -0.021339 0.004205 -0.062496 0.031100 0.053349 -0.011934 0.065752 -0.132376 -0.118604 -0.084354 0.018198 0.004240 -0.004340 0.003937 0.017652 -0.050848 0.024164 -0.013728 -0.034087 -0.019119 0.077051 0.006899 0.013968 -0.043247 -0.030695 0.066883 -0.075176 -0.002876 0.013993 -0.016796 \n0.005001 -0.090158 -0.011976 0.055472 -0.011104 -0.019645 -0.061557 0.044266 0.027270 -0.030345 0.068012 -0.132701 -0.097672 -0.062167 -0.026502 -0.015816 -0.002765 0.014242 0.048233 0.014931 0.013361 0.021076 -0.002662 -0.047362 0.074697 -0.011056 0.032939 0.005948 -0.057100 0.111103 -0.023048 -0.033487 -0.004465 0.045128 \n0.012182 -0.107450 -0.027021 0.065245 0.008961 -0.027772 -0.074458 0.050282 0.025229 -0.041151 0.086397 -0.119923 -0.099702 -0.055513 -0.011844 -0.012761 -0.000561 0.025024 0.077500 0.042190 0.004065 0.022608 -0.020626 -0.014056 0.026667 -0.025100 0.039847 0.066569 -0.072695 0.106463 0.007401 -0.072767 0.005736 0.071139 \n-0.009462 0.065949 -0.034941 0.008894 -0.064655 -0.020166 -0.060698 0.028627 0.066320 0.002801 0.040050 0.031191 -0.045838 0.048249 0.022311 -0.088733 0.012498 0.012592 -0.012528 -0.038889 0.028963 -0.007368 -0.006653 0.082948 -0.006713 0.005645 -0.025498 -0.054304 -0.022462 0.175263 -0.039024 -0.042552 -0.094353 -0.013449 \n0.000399 0.075432 -0.010525 0.041532 -0.020281 -0.016042 -0.094246 0.065468 0.057754 -0.013075 0.035003 0.037001 -0.063322 0.051499 0.004328 -0.061380 -0.015256 0.001025 -0.051518 0.003395 -0.032991 0.024094 0.008757 0.054130 -0.053594 0.010905 -0.022832 -0.025114 -0.048340 0.149929 -0.021867 0.081009 -0.007931 -0.009067 \n0.011378 0.085467 -0.017111 0.041300 -0.001692 -0.039680 -0.104984 0.079709 0.063221 -0.028397 0.048561 0.041353 -0.084814 0.040411 0.000268 -0.038789 -0.000559 -0.008586 -0.044596 0.040237 -0.063474 -0.003204 -0.031149 0.016331 -0.050858 0.018453 -0.008099 -0.080392 -0.015774 0.091864 -0.016377 0.134277 0.049921 -0.027301 \n0.029766 0.102153 -0.038143 0.053924 0.038638 -0.061103 -0.101860 0.090831 0.056649 -0.017724 0.060045 0.040849 -0.108462 0.025297 0.013784 -0.048798 0.017389 -0.036169 -0.049864 0.021916 -0.066484 0.016243 -0.106255 -0.005066 -0.033200 -0.008221 0.050207 -0.137478 0.022810 0.034341 -0.021252 0.120671 0.042481 -0.025859 \n0.006889 0.087347 -0.040353 0.029840 -0.010245 -0.040820 -0.091202 0.072685 0.079209 -0.016224 0.043485 -0.001910 -0.084857 0.044870 -0.001342 -0.071705 -0.002282 -0.026485 -0.039688 0.033741 -0.055799 -0.013397 -0.029281 0.000374 -0.037317 -0.004296 0.042230 -0.104897 0.024080 0.125291 0.011644 0.079126 -0.013272 0.018850 \n-0.000936 0.077182 -0.035678 0.029087 -0.033747 -0.023682 -0.089809 0.060071 0.081219 -0.000659 0.033152 -0.007048 -0.054525 0.054060 -0.010472 -0.078847 -0.000530 -0.009111 -0.033111 0.004942 -0.009483 0.002476 0.026701 0.054112 -0.050766 -0.014615 0.013950 -0.054182 -0.017408 0.176648 0.019946 -0.001332 -0.069141 0.058993 \n-0.053340 -0.049736 0.202485 -0.040699 0.016891 0.098603 -0.079165 0.012530 -0.068702 0.013827 -0.018413 0.064039 -0.096530 -0.107456 -0.034620 0.115038 0.176489 0.048911 0.043125 -0.004140 0.021027 -0.096280 0.063451 0.033838 -0.029605 0.024958 -0.044214 -0.018466 -0.082116 -0.029533 0.007344 -0.061482 0.038981 -0.084020 \n-0.084313 -0.038019 0.077710 -0.058798 0.076335 0.124114 -0.036329 -0.056135 -0.011941 0.019801 -0.032605 0.049799 -0.014743 -0.022984 -0.023983 0.002739 0.115499 0.010250 -0.071667 0.052221 0.028701 -0.018035 0.046885 0.065758 -0.088996 0.058902 0.045509 0.021842 0.012293 -0.058012 -0.054652 -0.028210 -0.045572 0.005237 \n-0.092694 -0.031386 -0.029516 -0.066011 0.056512 0.140318 0.017759 -0.055408 0.042409 -0.001841 -0.047881 0.006271 -0.044880 0.010562 -0.008572 -0.032142 0.031237 0.011784 -0.071950 -0.017154 0.021388 0.094393 -0.059446 -0.036018 -0.074495 0.032641 0.092606 0.062712 0.134488 -0.112228 -0.109084 0.090907 -0.032517 0.032689 \n-0.086068 -0.007082 -0.045041 -0.060765 0.055270 0.132259 0.009008 -0.042025 0.050070 -0.002958 -0.051816 0.001503 -0.066612 -0.017554 -0.020320 -0.047269 0.007336 0.021029 -0.065278 0.045943 0.031788 0.044150 -0.060233 -0.015205 -0.047170 0.032557 0.110315 0.067668 0.142436 -0.112995 -0.095937 0.043696 -0.053263 0.018166 \n-0.089411 0.023741 -0.038912 -0.067964 0.042282 0.140245 0.010622 -0.036806 0.040610 0.006060 -0.017474 0.000163 -0.063926 0.009072 -0.059385 -0.064253 -0.040611 0.016892 -0.098455 0.064721 0.042317 0.071934 -0.068174 -0.023171 -0.006137 0.021292 0.136552 0.086574 0.159669 -0.085905 -0.090037 0.025543 -0.060574 -0.002428 \n-0.078575 0.034575 0.031263 -0.073552 0.040647 0.136747 -0.043737 -0.008796 0.032331 0.016926 -0.029196 0.043721 -0.033823 -0.069883 -0.054957 0.000382 0.001785 -0.066324 -0.031587 0.075610 0.002026 0.123617 -0.016946 -0.073108 0.082295 -0.003377 0.160760 0.045913 0.138259 -0.012841 -0.021037 0.019773 -0.081271 0.003220 \n-0.033366 0.059208 0.160210 -0.064990 0.028624 0.104300 -0.099598 0.045261 -0.039277 0.065556 -0.102912 0.108074 -0.081503 -0.190293 -0.052187 0.075107 0.008671 -0.121671 0.069010 0.122685 -0.035632 -0.012154 0.063158 -0.139158 0.053250 0.013035 0.078006 -0.006941 0.005533 0.101138 0.135668 0.005174 -0.004429 -0.021124 \n-0.092656 0.031357 0.103505 -0.059111 0.068764 0.010312 0.008929 0.034866 0.057992 0.068053 0.014425 0.007778 0.041020 -0.040683 -0.027837 -0.022634 -0.126523 -0.071192 0.073877 0.037044 -0.024998 0.031381 0.000446 -0.063882 0.075465 -0.089846 -0.003293 -0.014744 -0.039966 0.049482 0.125205 -0.021707 -0.015263 0.035730 \n-0.111708 0.016302 0.021802 -0.017327 0.098757 -0.032632 0.102916 -0.004106 0.112659 0.043944 0.086722 -0.075135 0.053748 0.008377 0.026036 -0.051027 -0.181615 0.007593 -0.029718 -0.022786 -0.013286 0.004632 0.013051 -0.001664 0.043884 -0.080356 -0.074392 -0.041220 -0.096235 -0.001700 0.105291 -0.079759 -0.034690 -0.007809 \n-0.106284 -0.022433 0.016803 -0.009022 0.113956 -0.059454 0.115911 -0.012451 0.125340 0.015307 0.082184 -0.057654 0.037795 0.019407 0.065630 -0.026223 -0.104086 0.015953 -0.052260 -0.022874 -0.001840 -0.000797 -0.004680 0.054162 0.031667 -0.086636 -0.106973 -0.052172 -0.115387 -0.039377 0.098135 -0.063370 -0.010368 -0.058260 \n-0.105834 -0.044185 0.028207 -0.010833 0.109847 -0.041639 0.113964 -0.035423 0.117943 0.018785 0.073258 -0.043540 0.048715 0.037758 0.075421 -0.003877 -0.043429 0.013819 -0.039051 -0.084951 -0.018739 0.005618 -0.000400 0.028961 0.006799 -0.081430 -0.141147 -0.095855 -0.105823 -0.040548 0.071096 -0.022040 -0.010334 -0.072087 \n-0.085770 -0.066339 0.119689 -0.034493 0.098418 0.002001 0.025266 -0.023246 0.059661 0.027629 0.052453 0.022351 0.015313 -0.007107 -0.005840 0.096765 0.062508 -0.012640 -0.032725 -0.080090 -0.027756 -0.041996 0.055252 0.063300 -0.038983 -0.076443 -0.130005 -0.083137 -0.110099 -0.085295 0.021676 -0.004858 0.062427 -0.049960 \n-0.063490 -0.034197 0.223953 -0.071609 0.017273 0.072534 -0.070046 0.008472 -0.059151 0.024538 -0.057458 0.054908 -0.069500 -0.108298 -0.024305 0.086168 0.173404 0.023995 0.062833 0.058041 0.036625 -0.084243 -0.007661 0.049316 -0.069261 0.031241 -0.034048 -0.059035 -0.063512 -0.030367 -0.002864 -0.044970 0.061520 -0.067669 \n-0.080995 -0.029362 -0.020969 -0.037152 0.055714 0.092056 0.009933 -0.025303 0.020523 -0.004640 -0.020295 -0.009164 -0.005931 0.018848 0.033915 -0.030364 0.045067 0.004015 0.011173 -0.058507 0.056901 -0.042073 -0.006012 0.046935 -0.107241 0.032777 0.116424 0.038938 0.083070 0.044785 -0.024341 -0.040868 -0.054497 0.021228 \n-0.079570 -0.003619 -0.038468 -0.043009 0.061929 0.088254 0.002999 -0.017741 0.034379 -0.004900 -0.032478 -0.019353 -0.018212 -0.005055 0.014637 -0.048472 -0.001520 0.022877 0.006651 -0.017392 0.069312 -0.058844 -0.004646 0.065142 -0.096265 0.026598 0.135522 0.071861 0.091550 0.032257 -0.016765 -0.075337 -0.064651 0.050908 \n-0.077037 0.036024 -0.029906 -0.041175 0.045056 0.108172 0.001799 -0.013867 0.031473 0.010155 -0.003491 -0.014995 -0.021891 0.005419 -0.006514 -0.067131 -0.050711 0.002908 -0.017700 0.003424 0.063512 -0.037825 -0.008255 0.061508 -0.030670 0.015575 0.161325 0.090053 0.117788 0.091435 -0.010989 -0.096824 -0.085735 0.003260 \n-0.051962 0.043127 0.185753 -0.068488 0.030906 0.083935 -0.070252 0.031192 -0.032752 0.081860 -0.058415 0.100433 -0.075819 -0.159865 -0.059411 0.067034 0.026048 -0.117863 0.048451 0.078422 -0.022589 0.005932 0.109565 -0.086305 0.028208 0.027111 0.068306 -0.018619 -0.000395 0.065584 0.129299 -0.018649 -0.057046 -0.000423 \n-0.110771 0.026821 0.039896 -0.026400 0.073464 0.011366 0.088839 0.010905 0.059433 0.027762 0.038964 -0.069547 0.034358 0.017245 0.035428 -0.063296 -0.129262 0.026781 -0.092055 0.071498 -0.050266 0.045878 -0.036457 -0.040249 0.060855 -0.044906 -0.090430 -0.018843 -0.111822 -0.025148 0.069191 -0.000310 -0.018828 -0.067576 \n-0.109310 -0.015148 0.033856 -0.022173 0.084027 -0.011325 0.100709 0.004099 0.070556 0.012019 0.035921 -0.046262 0.047837 0.012906 0.059339 -0.023335 -0.082080 0.034241 -0.099980 0.038508 -0.057517 0.048531 -0.049704 -0.033707 0.035725 -0.049554 -0.119832 -0.033233 -0.116399 -0.076705 0.057450 0.017861 0.007758 -0.058416 \n-0.105002 -0.041286 0.052806 -0.020899 0.081333 0.007181 0.095687 -0.011183 0.063719 0.009967 0.029662 -0.037522 0.062980 0.038468 0.065127 -0.003635 -0.032995 0.016733 -0.100860 -0.006462 -0.072928 0.073195 -0.048581 -0.059580 0.018777 -0.048728 -0.138328 -0.072245 -0.108275 -0.063238 0.030578 0.066053 0.024802 -0.084883 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n34\n6\n826.213804 695.783596 380.584790 282.861398 209.814481 184.418561 113.076307 104.852653 81.857546 77.095662 71.081802 55.760367 49.883312 39.122009 37.668889 32.916377 31.165932 26.644275 24.233150 21.357573 17.029065 15.432317 13.812689 12.440567 10.213426 9.316734 5.327325 2.526152 1.659451 1.123615 1.015840 0.816193 0.718969 0.582660 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/model/tris_68.txt",
    "content": "# Number of triangulations\n7\n# Triangulation 1\n# triangulation \n97\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 2\n# triangulation \n97\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 3\n# triangulation \n82\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n29 42 28 \n19 20 24 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n53 35 52 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n47 35 46 \n33 32 51 \n30 32 33 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n25 45 26 \n# Triangulation 4\n# triangulation \n31\n3\n4\n58 67 59 \n58 59 6 \n37 18 36 \n41 36 1 \n50 62 51 \n57 58 7 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n31 30 29 \n31 29 40 \n36 17 0 \n41 31 40 \n31 41 1 \n49 31 48 \n48 2 3 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n7 58 6 \n58 66 67 \n31 2 48 \n1 2 31 \n61 50 49 \n50 31 49 \n50 61 62 \n66 58 57 \n8 57 7 \n# Triangulation 5\n# triangulation \n97\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 6\n# triangulation \n82\n3\n4\n58 67 59 \n60 49 48 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n30 33 34 \n41 31 40 \n31 32 30 \n67 60 59 \n60 48 59 \n61 49 60 \n58 66 67 \n31 50 32 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 7\n# triangulation \n31\n3\n4\n44 45 25 \n23 44 24 \n56 65 66 \n54 14 35 \n35 15 46 \n24 44 25 \n29 30 35 \n52 62 63 \n51 62 52 \n63 53 52 \n54 55 11 \n57 8 9 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n29 35 47 \n15 45 46 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/CCNF_patch_expert.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"CCNF_patch_expert.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n// Local includes\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n// Copy constructors of neuron and patch expert\nCCNF_neuron::CCNF_neuron(const CCNF_neuron& other) : weights(other.weights.clone())\n{\n\tthis->neuron_type = other.neuron_type;\n\tthis->norm_weights = other.norm_weights;\n\tthis->bias = other.bias;\n\tthis->alpha = other.alpha;\n\n\tfor (std::map<int, cv::Mat_<double> >::const_iterator it = other.weights_dfts.begin(); it != other.weights_dfts.end(); it++)\n\t{\n\t\t// Make sure the matrix is copied.\n\t\tthis->weights_dfts.insert(std::pair<int, cv::Mat>(it->first, it->second.clone()));\n\t}\n}\n\n// Copy constructor\t\t\nCCNF_patch_expert::CCNF_patch_expert(const CCNF_patch_expert& other) : neurons(other.neurons), window_sizes(other.window_sizes), betas(other.betas)\n{\n\tthis->width = other.width;\n\tthis->height = other.height;\n\tthis->patch_confidence = other.patch_confidence;\n\n\t// Copy the Sigmas in a deep way\n\tfor (std::vector<cv::Mat_<float> >::const_iterator it = other.Sigmas.begin(); it != other.Sigmas.end(); it++)\n\t{\n\t\t// Make sure the matrix is copied.\n\t\tthis->Sigmas.push_back(it->clone());\n\t}\n\n}\n\n// Compute sigmas for all landmarks for a particular view and window size\nvoid CCNF_patch_expert::ComputeSigmas(std::vector<cv::Mat_<float> > sigma_components, int window_size)\n{\n\tfor(size_t i=0; i < window_sizes.size(); ++i)\n\t{\n\t\tif( window_sizes[i] == window_size)\n\t\t\treturn;\n\t}\n\t// Each of the landmarks will have the same connections, hence constant number of sigma components\n\tint n_betas = sigma_components.size();\n\n\t// calculate the sigmas based on alphas and betas\n\tfloat sum_alphas = 0;\n\n\tint n_alphas = this->neurons.size();\n\n\t// sum the alphas first\n\tfor(int a = 0; a < n_alphas; ++a)\n\t{\n\t\tsum_alphas = sum_alphas + this->neurons[a].alpha;\n\t}\n\n\tcv::Mat_<float> q1 = sum_alphas * cv::Mat_<float>::eye(window_size*window_size, window_size*window_size);\n\n\tcv::Mat_<float> q2 = cv::Mat_<float>::zeros(window_size*window_size, window_size*window_size);\n\tfor (int b=0; b < n_betas; ++b)\n\t{\t\t\t\n\t\tq2 = q2 + ((float)this->betas[b]) * sigma_components[b];\n\t}\n\n\tcv::Mat_<float> SigmaInv = 2 * (q1 + q2);\n\t\n\tcv::Mat Sigma_f;\n\tcv::invert(SigmaInv, Sigma_f, cv::DECOMP_CHOLESKY);\n\n\twindow_sizes.push_back(window_size);\n\tSigmas.push_back(Sigma_f);\n\n}\n\n//===========================================================================\nvoid CCNF_neuron::Read(std::ifstream &stream)\n{\n\t// Sanity check\n\tint read_type;\n\tstream.read ((char*)&read_type, 4);\n\tassert(read_type == 2);\n\n\tstream.read ((char*)&neuron_type, 4);\n\tstream.read ((char*)&norm_weights, 8);\n\tstream.read ((char*)&bias, 8);\n\tstream.read ((char*)&alpha, 8);\n\t\n\tLandmarkDetector::ReadMatBin(stream, weights); \n\n}\n\n//===========================================================================\nvoid CCNF_neuron::Response(cv::Mat_<float> &im, cv::Mat_<double> &im_dft, cv::Mat &integral_img, cv::Mat &integral_img_sq, cv::Mat_<float> &resp)\n{\n\n\tint h = im.rows - weights.rows + 1;\n\tint w = im.cols - weights.cols + 1;\n\t\n\t// the patch area on which we will calculate reponses\n\tcv::Mat_<float> I;\n\n\tif(neuron_type == 3)\n\t{\n\t\t// Perform normalisation across whole patch (ignoring the invalid values indicated by <= 0\n\n\t\tcv::Scalar mean;\n\t\tcv::Scalar std;\n\t\t\n\t\t// ignore missing values\n\t\tcv::Mat_<uchar> mask = im > 0;\n\t\tcv::meanStdDev(im, mean, std, mask);\n\n\t\t// if all values the same don't divide by 0\n\t\tif(std[0] != 0)\n\t\t{\n\t\t\tI = (im - mean[0]) / std[0];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tI = (im - mean[0]);\n\t\t}\n\n\t\tI.setTo(0, mask == 0);\n\t}\n\telse\n\t{\n\t\tif(neuron_type == 0)\n\t\t{\n\t\t\tI = im;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tprintf(\"ERROR(%s,%d): Unsupported patch type %d!\\n\", __FILE__,__LINE__,neuron_type);\n\t\t\tabort();\n\t\t}\n\t}\n  \n\tif(resp.empty())\n\t{\t\t\n\t\tresp.create(h, w);\n\t}\n\n\t// The response from neuron before activation\n\tif(neuron_type == 3)\n\t{\n\t\t// In case of depth we use per area, rather than per patch normalisation\n\t\tmatchTemplate_m(I, im_dft, integral_img, integral_img_sq, weights, weights_dfts, resp, CV_TM_CCOEFF); // the linear multiplication, efficient calc of response\n\t}\n\telse\n\t{\n\t\tmatchTemplate_m(I, im_dft, integral_img, integral_img_sq, weights, weights_dfts, resp, CV_TM_CCOEFF_NORMED); // the linear multiplication, efficient calc of response\n\t}\n\n\tcv::MatIterator_<float> p = resp.begin();\n\n\tcv::MatIterator_<float> q1 = resp.begin(); // respone for each pixel\n\tcv::MatIterator_<float> q2 = resp.end();\n\n\t// the logistic function (sigmoid) applied to the response\n\twhile(q1 != q2)\n\t{\n\t\t*p++ = (2 * alpha) * 1.0 /(1.0 + exp( -(*q1++ * norm_weights + bias )));\n\t}\n\n}\n\n//===========================================================================\nvoid CCNF_patch_expert::Read(std::ifstream &stream, std::vector<int> window_sizes, std::vector<std::vector<cv::Mat_<float> > > sigma_components)\n{\n\n\t// Sanity check\n\tint read_type;\n\n\tstream.read ((char*)&read_type, 4);\n\tassert(read_type == 5);\n\n\t// the number of neurons for this patch\n\tint num_neurons;\n\tstream.read ((char*)&width, 4);\n\tstream.read ((char*)&height, 4);\n\tstream.read ((char*)&num_neurons, 4);\n\n\tif(num_neurons == 0)\n\t{\n\t\t// empty patch due to landmark being invisible at that orientation\n\t\n\t\t// read an empty int (due to the way things were written out)\n\t\tstream.read ((char*)&num_neurons, 4);\n\t\treturn;\n\t}\n\n\tneurons.resize(num_neurons);\n\tfor(int i = 0; i < num_neurons; i++)\n\t\tneurons[i].Read(stream);\n\n\tint n_sigmas = window_sizes.size();\n\n\tint n_betas = 0;\n\n\tif(n_sigmas > 0)\n\t{\n\t\tn_betas = sigma_components[0].size();\n\n\t\tbetas.resize(n_betas);\n\n\t\tfor (int i=0; i < n_betas;  ++i)\n\t\t{\n\t\t\tstream.read ((char*)&betas[i], 8);\n\t\t}\n\t}\t\n\n\t// Read the patch confidence\n\tstream.read ((char*)&patch_confidence, 8);\n\n}\n\n//===========================================================================\nvoid CCNF_patch_expert::Response(cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response)\n{\n\t\n\tint response_height = area_of_interest.rows - height + 1;\n\tint response_width = area_of_interest.cols - width + 1;\n\n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\t\t\n\tresponse.setTo(0);\n\t\n\t// the placeholder for the DFT of the image, the integral image, and squared integral image so they don't get recalculated for every response\n\tcv::Mat_<double> area_of_interest_dft;\n\tcv::Mat integral_image, integral_image_sq;\n\t\n\tcv::Mat_<float> neuron_response;\n\n\t// responses from the neural layers\n\tfor(size_t i = 0; i < neurons.size(); i++)\n\t{\t\t\n\t\t// Do not bother with neuron response if the alpha is tiny and will not contribute much to overall result\n\t\tif(neurons[i].alpha > 1e-4)\n\t\t{\n\t\t\tneurons[i].Response(area_of_interest, area_of_interest_dft, integral_image, integral_image_sq, neuron_response);\n\t\t\tresponse = response + neuron_response;\t\t\t\t\t\t\n\t\t}\n\t}\n\n\tint s_to_use = -1;\n\n\t// Find the matching sigma\n\tfor(size_t i=0; i < window_sizes.size(); ++i)\n\t{\n\t\tif(window_sizes[i] == response_height)\n\t\t{\n\t\t\t// Found the correct sigma\n\t\t\ts_to_use = i;\t\t\t\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tcv::Mat_<float> resp_vec_f = response.reshape(1, response_height * response_width);\n\n\tcv::Mat out = Sigmas[s_to_use] * resp_vec_f;\n\t\n\tresponse = out.reshape(1, response_height);\n\n\t// Making sure the response does not have negative numbers\n\tdouble min;\n\n\tminMaxIdx(response, &min, 0);\n\tif(min < 0)\n\t{\n\t\tresponse = response - min;\n\t}\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/LandmarkDetectionValidator.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectionValidator.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n// System includes\n#include <fstream>\n\n// Math includes\n#define _USE_MATH_DEFINES\n#include <cmath>\n\n#ifndef M_PI\n#define M_PI 3.14159265358979323846\n#endif\n// Local includes\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n// Copy constructor\nDetectionValidator::DetectionValidator(const DetectionValidator& other) : orientations(other.orientations), bs(other.bs), paws(other.paws),\n    cnn_subsampling_layers(other.cnn_subsampling_layers), cnn_layer_types(other.cnn_layer_types), cnn_fully_connected_layers_bias(other.cnn_fully_connected_layers_bias),\n    cnn_convolutional_layers_bias(other.cnn_convolutional_layers_bias), cnn_convolutional_layers_dft(other.cnn_convolutional_layers_dft)\n{\n\n    this->validator_type = other.validator_type;\n\n    this->activation_fun = other.activation_fun;\n    this->output_fun = other.output_fun;\n\n    this->ws.resize(other.ws.size());\n    for (size_t i = 0; i < other.ws.size(); ++i)\n    {\n        // Make sure the matrix is copied.\n        this->ws[i] = other.ws[i].clone();\n    }\n\n    this->ws_nn.resize(other.ws_nn.size());\n    for (size_t i = 0; i < other.ws_nn.size(); ++i)\n    {\n        this->ws_nn[i].resize(other.ws_nn[i].size());\n\n        for (size_t k = 0; k < other.ws_nn[i].size(); ++k)\n        {\n            // Make sure the matrix is copied.\n            this->ws_nn[i][k] = other.ws_nn[i][k].clone();\n        }\n    }\n\n    this->cnn_convolutional_layers.resize(other.cnn_convolutional_layers.size());\n    for (size_t v = 0; v < other.cnn_convolutional_layers.size(); ++v)\n    {\n        this->cnn_convolutional_layers[v].resize(other.cnn_convolutional_layers[v].size());\n\n        for (size_t l = 0; l < other.cnn_convolutional_layers[v].size(); ++l)\n        {\n            this->cnn_convolutional_layers[v][l].resize(other.cnn_convolutional_layers[v][l].size());\n\n            for (size_t i = 0; i < other.cnn_convolutional_layers[v][l].size(); ++i)\n            {\n                this->cnn_convolutional_layers[v][l][i].resize(other.cnn_convolutional_layers[v][l][i].size());\n\n                for (size_t k = 0; k < other.cnn_convolutional_layers[v][l][i].size(); ++k)\n                {\n                    // Make sure the matrix is copied.\n                    this->cnn_convolutional_layers[v][l][i][k] = other.cnn_convolutional_layers[v][l][i][k].clone();\n                }\n\n            }\n        }\n    }\n\n    this->cnn_fully_connected_layers.resize(other.cnn_fully_connected_layers.size());\n    for (size_t v = 0; v < other.cnn_fully_connected_layers.size(); ++v)\n    {\n        this->cnn_fully_connected_layers[v].resize(other.cnn_fully_connected_layers[v].size());\n\n        for (size_t l = 0; l < other.cnn_fully_connected_layers[v].size(); ++l)\n        {\n            // Make sure the matrix is copied.\n            this->cnn_fully_connected_layers[v][l] = other.cnn_fully_connected_layers[v][l].clone();\n        }\n    }\n\n    this->mean_images.resize(other.mean_images.size());\n    for (size_t i = 0; i < other.mean_images.size(); ++i)\n    {\n        // Make sure the matrix is copied.\n        this->mean_images[i] = other.mean_images[i].clone();\n    }\n\n    this->standard_deviations.resize(other.standard_deviations.size());\n    for (size_t i = 0; i < other.standard_deviations.size(); ++i)\n    {\n        // Make sure the matrix is copied.\n        this->standard_deviations[i] = other.standard_deviations[i].clone();\n    }\n\n}\n\n//===========================================================================\n// Read in the landmark detection validation module\nvoid DetectionValidator::Read(std::string location)\n{\n\n    std::ifstream detection_validator_stream (location, std::ios::in | std::ios::binary);\n    if (detection_validator_stream.is_open())\n    {\n        detection_validator_stream.seekg (0, std::ios::beg);\n\n        // Read validator type\n        detection_validator_stream.read ((char*)&validator_type, 4);\n\n        // Read the number of views (orientations) within the validator\n        int n;\n        detection_validator_stream.read ((char*)&n, 4);\n\n        orientations.resize(n);\n\n        for(int i = 0; i < n; i++)\n        {\n            cv::Mat_<double> orientation_tmp;\n            LandmarkDetector::ReadMatBin(detection_validator_stream, orientation_tmp);\n\n            orientations[i] = cv::Vec3d(orientation_tmp.at<double>(0), orientation_tmp.at<double>(1), orientation_tmp.at<double>(2));\n\n            // Convert from degrees to radians\n            orientations[i] = orientations[i] * M_PI / 180.0;\n        }\n\n        // Initialise the piece-wise affine warps, biases and weights\n        paws.resize(n);\n\n        if( validator_type == 0)\n        {\n            // Reading in SVRs\n            bs.resize(n);\n            ws.resize(n);\n        }\n        else if(validator_type == 1)\n        {\n            // Reading in NNs\n            ws_nn.resize(n);\n\n            activation_fun.resize(n);\n            output_fun.resize(n);\n        }\n        else if(validator_type == 2)\n        {\n            cnn_convolutional_layers.resize(n);\n            cnn_convolutional_layers_dft.resize(n);\n            cnn_subsampling_layers.resize(n);\n            cnn_fully_connected_layers.resize(n);\n            cnn_layer_types.resize(n);\n            cnn_fully_connected_layers_bias.resize(n);\n            cnn_convolutional_layers_bias.resize(n);\n        }\n\n        // Initialise the normalisation terms\n        mean_images.resize(n);\n        standard_deviations.resize(n);\n\n        // Read in the validators for each of the views\n        for(int i = 0; i < n; i++)\n        {\n\n            // Read in the mean images\n            LandmarkDetector::ReadMatBin(detection_validator_stream, mean_images[i]);\n            mean_images[i] = mean_images[i].t();\n\n            LandmarkDetector::ReadMatBin(detection_validator_stream, standard_deviations[i]);\n            standard_deviations[i] = standard_deviations[i].t();\n\n            // Model specifics\n            if(validator_type == 0)\n            {\n                // Reading in the biases and weights\n                detection_validator_stream.read ((char*)&bs[i], 8);\n                LandmarkDetector::ReadMatBin(detection_validator_stream, ws[i]);\n\n            }\n            else if(validator_type == 1)\n            {\n\n                // Reading in the number of layers in the neural net\n                int num_depth_layers;\n                detection_validator_stream.read ((char*)&num_depth_layers, 4);\n\n                // Reading in activation and output function types\n                detection_validator_stream.read ((char*)&activation_fun[i], 4);\n                detection_validator_stream.read ((char*)&output_fun[i], 4);\n\n                ws_nn[i].resize(num_depth_layers);\n                for(int layer = 0; layer < num_depth_layers; layer++)\n                {\n                    LandmarkDetector::ReadMatBin(detection_validator_stream, ws_nn[i][layer]);\n\n                    // Transpose for efficiency during multiplication\n                    ws_nn[i][layer] = ws_nn[i][layer].t();\n                }\n            }\n            else if(validator_type == 2)\n            {\n                // Reading in CNNs\n\n                int network_depth;\n                detection_validator_stream.read ((char*)&network_depth, 4);\n\n                cnn_layer_types[i].resize(network_depth);\n\n                for(int layer = 0; layer < network_depth; ++layer)\n                {\n\n                    int layer_type;\n                    detection_validator_stream.read ((char*)&layer_type, 4);\n                    cnn_layer_types[i][layer] = layer_type;\n\n                    // convolutional\n                    if(layer_type == 0)\n                    {\n\n                        // Read the number of input maps\n                        int num_in_maps;\n                        detection_validator_stream.read ((char*)&num_in_maps, 4);\n\n                        // Read the number of kernels for each input map\n                        int num_kernels;\n                        detection_validator_stream.read ((char*)&num_kernels, 4);\n\n                        std::vector<std::vector<cv::Mat_<float> > > kernels;\n                        std::vector<std::vector<std::pair<int, cv::Mat_<double> > > > kernel_dfts;\n\n                        kernels.resize(num_in_maps);\n                        kernel_dfts.resize(num_in_maps);\n\n                        std::vector<float> biases;\n                        for (int k = 0; k < num_kernels; ++k)\n                        {\n                            float bias;\n                            detection_validator_stream.read ((char*)&bias, 4);\n                            biases.push_back(bias);\n                        }\n\n                        cnn_convolutional_layers_bias[i].push_back(biases);\n\n                        // For every input map\n                        for (int in = 0; in < num_in_maps; ++in)\n                        {\n                            kernels[in].resize(num_kernels);\n                            kernel_dfts[in].resize(num_kernels);\n\n                            // For every kernel on that input map\n                            for (int k = 0; k < num_kernels; ++k)\n                            {\n                                ReadMatBin(detection_validator_stream, kernels[in][k]);\n\n                                // Flip the kernel in order to do convolution and not correlation\n                                cv::flip(kernels[in][k], kernels[in][k], -1);\n                            }\n                        }\n\n                        cnn_convolutional_layers[i].push_back(kernels);\n                        cnn_convolutional_layers_dft[i].push_back(kernel_dfts);\n                    }\n                    else if(layer_type == 1)\n                    {\n                        // Subsampling layer\n\n                        int scale;\n                        detection_validator_stream.read ((char*)&scale, 4);\n\n                        cnn_subsampling_layers[i].push_back(scale);\n                    }\n                    else if(layer_type == 2)\n                    {\n                        float bias;\n                        detection_validator_stream.read ((char*)&bias, 4);\n                        cnn_fully_connected_layers_bias[i].push_back(bias);\n\n                        // Fully connected layer\n                        cv::Mat_<float> weights;\n                        ReadMatBin(detection_validator_stream, weights);\n                        cnn_fully_connected_layers[i].push_back(weights);\n                    }\n                }\n            }\n\n            // Read in the piece-wise affine warps\n            paws[i].Read(detection_validator_stream);\n        }\n\n    }\n    else\n    {\n        std::cout << \"WARNING: Can't find the Face checker location\" << std::endl;\n    }\n}\n\n//===========================================================================\n// Check if the fitting actually succeeded\ndouble DetectionValidator::Check(const cv::Vec3d& orientation, const cv::Mat_<uchar>& intensity_img, cv::Mat_<double>& detected_landmarks)\n{\n\n    int id = GetViewId(orientation);\n\n    // The warped (cropped) image, corresponding to a face lying withing the detected lanmarks\n    cv::Mat_<double> warped;\n\n    // the piece-wise affine image\n    cv::Mat_<double> intensity_img_double;\n    intensity_img.convertTo(intensity_img_double, CV_64F);\n\n    paws[id].Warp(intensity_img_double, warped, detected_landmarks);\n\n    double dec;\n    if(validator_type == 0)\n    {\n        dec = CheckSVR(warped, id);\n    }\n    else if(validator_type == 1)\n    {\n        dec = CheckNN(warped, id);\n    }\n    else if(validator_type == 2)\n    {\n        dec = CheckCNN(warped, id);\n    }\n    return dec;\n}\n\ndouble DetectionValidator::CheckNN(const cv::Mat_<double>& warped_img, int view_id)\n{\n    cv::Mat_<double> feature_vec;\n    NormaliseWarpedToVector(warped_img, feature_vec, view_id);\n    feature_vec = feature_vec.t();\n\n    for(size_t layer = 0; layer < ws_nn[view_id].size(); ++layer)\n    {\n        // Add a bias term\n        cv::hconcat(cv::Mat_<double>(1,1, 1.0), feature_vec, feature_vec);\n\n        // Apply the weights\n        feature_vec = feature_vec * ws_nn[view_id][layer];\n\n        // Activation or output\n        int fun_type;\n        if(layer != ws_nn[view_id].size() - 1)\n        {\n            fun_type = activation_fun[view_id];\n        }\n        else\n        {\n            fun_type = output_fun[view_id];\n        }\n\n        if(fun_type == 0)\n        {\n            cv::exp(-feature_vec, feature_vec);\n            feature_vec = 1.0 /(1.0 + feature_vec);\n        }\n        else if(fun_type == 1)\n        {\n            cv::MatIterator_<double> q1 = feature_vec.begin(); // respone for each pixel\n            cv::MatIterator_<double> q2 = feature_vec.end();\n\n            // the logistic function (sigmoid) applied to the response\n            while(q1 != q2)\n            {\n                *q1 = 1.7159 * tanh((2.0/3.0) * (*q1));\n                q1++;\n            }\n        }\n        // TODO ReLU\n\n    }\n\n    // Turn it to -1, 1 range\n    double dec = (feature_vec.at<double>(0) - 0.5) * 2;\n\n    return dec;\n\n}\n\ndouble DetectionValidator::CheckSVR(const cv::Mat_<double>& warped_img, int view_id)\n{\n\n    cv::Mat_<double> feature_vec;\n    NormaliseWarpedToVector(warped_img, feature_vec, view_id);\n\n\n    double dec = (ws[view_id].dot(feature_vec.t()) + bs[view_id]);\n\n    return dec;\n\n}\n\n// Convolutional Neural Network\ndouble DetectionValidator::CheckCNN(const cv::Mat_<double>& warped_img, int view_id)\n{\n\n    cv::Mat_<double> feature_vec;\n    NormaliseWarpedToVector(warped_img, feature_vec, view_id);\n\n    // Create a normalised image from the crop vector\n    cv::Mat_<float> img(warped_img.size(), 0.0);\n    img = img.t();\n\n    cv::Mat mask = paws[view_id].pixel_mask.t();\n    cv::MatIterator_<uchar>  mask_it = mask.begin<uchar>();\n\n    cv::MatIterator_<double> feature_it = feature_vec.begin();\n    cv::MatIterator_<float> img_it = img.begin();\n\n    int wInt = img.cols;\n    int hInt = img.rows;\n\n    for(int i=0; i < wInt; ++i)\n    {\n        for(int j=0; j < hInt; ++j, ++mask_it, ++img_it)\n        {\n            // if is within mask\n            if(*mask_it)\n            {\n                // assign the feature to image if it is within the mask\n                *img_it = (float)*feature_it++;\n            }\n        }\n    }\n    img = img.t();\n\n    int cnn_layer = 0;\n    int subsample_layer = 0;\n    int fully_connected_layer = 0;\n\n    std::vector<cv::Mat_<float> > input_maps;\n    input_maps.push_back(img);\n\n    std::vector<cv::Mat_<float> > outputs;\n\n    for(size_t layer = 0; layer < cnn_layer_types[view_id].size(); ++layer)\n    {\n        // Determine layer type\n        int layer_type = cnn_layer_types[view_id][layer];\n\n\n        // Convolutional layer\n        if(layer_type == 0)\n        {\n            std::vector<cv::Mat_<float> > outputs_kern;\n            for(size_t in = 0; in < input_maps.size(); ++in)\n            {\n                cv::Mat_<float> input_image = input_maps[in];\n\n                // Useful precomputed data placeholders for quick correlation (convolution)\n                cv::Mat_<double> input_image_dft;\n                cv::Mat integral_image;\n                cv::Mat integral_image_sq;\n\n                for(size_t k = 0; k < cnn_convolutional_layers[view_id][cnn_layer][in].size(); ++k)\n                {\n                    cv::Mat_<float> kernel = cnn_convolutional_layers[view_id][cnn_layer][in][k];\n\n                    // The convolution (with precomputation)\n                    cv::Mat_<float> output;\n                    if(cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].second.empty())\n                    {\n                        std::map<int, cv::Mat_<double> > precomputed_dft;\n\n                        LandmarkDetector::matchTemplate_m(input_image, input_image_dft, integral_image, integral_image_sq, kernel, precomputed_dft, output, CV_TM_CCORR);\n\n                        cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].first = precomputed_dft.begin()->first;\n                        cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].second = precomputed_dft.begin()->second;\n                    }\n                    else\n                    {\n                        std::map<int, cv::Mat_<double> > precomputed_dft;\n                        precomputed_dft[cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].first] = cnn_convolutional_layers_dft[view_id][cnn_layer][in][k].second;\n                        LandmarkDetector::matchTemplate_m(input_image, input_image_dft, integral_image, integral_image_sq, kernel,  precomputed_dft, output, CV_TM_CCORR);\n                    }\n\n                    // Combining the maps\n                    if(in == 0)\n                    {\n                        outputs_kern.push_back(output);\n                    }\n                    else\n                    {\n                        outputs_kern[k] = outputs_kern[k] + output;\n                    }\n\n                }\n\n            }\n\n            outputs.clear();\n            for(size_t k = 0; k < cnn_convolutional_layers[view_id][cnn_layer][0].size(); ++k)\n            {\n                // Apply the sigmoid\n                cv::exp(-outputs_kern[k] - cnn_convolutional_layers_bias[view_id][cnn_layer][k], outputs_kern[k]);\n                outputs_kern[k] = 1.0 /(1.0 + outputs_kern[k]);\n\n                outputs.push_back(outputs_kern[k]);\n\n            }\n\n            cnn_layer++;\n        }\n        if(layer_type == 1)\n        {\n            // Subsampling layer\n            int scale = cnn_subsampling_layers[view_id][subsample_layer];\n\n            cv::Mat kx = cv::Mat::ones(2, 1, CV_32F)*1.0f/scale;\n            cv::Mat ky = cv::Mat::ones(1, 2, CV_32F)*1.0f/scale;\n\n            std::vector<cv::Mat_<float> > outputs_sub;\n            for(size_t in = 0; in < input_maps.size(); ++in)\n            {\n\n                cv::Mat_<float> conv_out;\n\n                cv::sepFilter2D(input_maps[in], conv_out, CV_32F, kx, ky);\n                conv_out = conv_out(cv::Rect(1, 1, conv_out.cols - 1, conv_out.rows - 1));\n\n                int res_rows = conv_out.rows / scale;\n                int res_cols = conv_out.cols / scale;\n\n                if(conv_out.rows % scale != 0)\n                {\n                    res_rows++;\n                }\n                if(conv_out.cols % scale != 0)\n                {\n                    res_cols++;\n                }\n\n                cv::Mat_<float> sub_out(res_rows, res_cols);\n                for(int w = 0; w < conv_out.cols; w+=scale)\n                {\n                    for(int h=0; h < conv_out.rows; h+=scale)\n                    {\n                        sub_out.at<float>(h/scale, w/scale) = conv_out(h, w);\n                    }\n                }\n                outputs_sub.push_back(sub_out);\n            }\n            outputs = outputs_sub;\n            subsample_layer++;\n\n        }\n        if(layer_type == 2)\n        {\n            // Concatenate all the maps\n            cv::Mat_<float> input_concat = input_maps[0].t();\n            input_concat = input_concat.reshape(0, 1);\n\n            for(size_t in = 1; in < input_maps.size(); ++in)\n            {\n                cv::Mat_<float> add = input_maps[in].t();\n                add = add.reshape(0,1);\n                cv::hconcat(input_concat, add, input_concat);\n            }\n\n            input_concat = input_concat * cnn_fully_connected_layers[view_id][fully_connected_layer].t();\n\n            cv::exp(-input_concat - cnn_fully_connected_layers_bias[view_id][fully_connected_layer], input_concat);\n            input_concat = 1.0 /(1.0 + input_concat);\n\n            outputs.clear();\n            outputs.push_back(input_concat);\n\n            fully_connected_layer++;\n        }\n        // Set the outputs of this layer to inputs of the next\n        input_maps = outputs;\n\n    }\n\n    // Turn it to -1, 1 range\n    double dec = (outputs[0].at<float>(0) - 0.5) * 2.0;\n\n    return dec;\n}\n\nvoid DetectionValidator::NormaliseWarpedToVector(const cv::Mat_<double>& warped_img, cv::Mat_<double>& feature_vec, int view_id)\n{\n    cv::Mat_<double> warped_t = warped_img.t();\n\n    // the vector to be filled with paw values\n    cv::MatIterator_<double> vp;\n    cv::MatIterator_<double>  cp;\n\n    cv::Mat_<double> vec(paws[view_id].number_of_pixels,1);\n    vp = vec.begin();\n\n    cp = warped_t.begin();\n\n    int wInt = warped_img.cols;\n    int hInt = warped_img.rows;\n\n    // the mask indicating if point is within or outside the face region\n\n    cv::Mat maskT = paws[view_id].pixel_mask.t();\n\n    cv::MatIterator_<uchar>  mp = maskT.begin<uchar>();\n\n    for(int i=0; i < wInt; ++i)\n    {\n        for(int j=0; j < hInt; ++j, ++mp, ++cp)\n        {\n            // if is within mask\n            if(*mp)\n            {\n                *vp++ = *cp;\n            }\n        }\n    }\n\n    // Local normalisation\n    cv::Scalar mean;\n    cv::Scalar std;\n    cv::meanStdDev(vec, mean, std);\n\n    // subtract the mean image\n    vec -= mean[0];\n\n    // Normalise the image\n    if(std[0] == 0)\n    {\n        std[0] = 1;\n    }\n\n    vec /= std[0];\n\n    // Global normalisation\n    feature_vec = (vec - mean_images[view_id])  / standard_deviations[view_id];\n}\n\n// Getting the closest view center based on orientation\nint DetectionValidator::GetViewId(const cv::Vec3d& orientation) const\n{\n    int id = 0;\n\n    double dbest = -1.0;\n\n    for(size_t i = 0; i < this->orientations.size(); i++)\n    {\n\n        // Distance to current view\n        double d = cv::norm(orientation, this->orientations[i]);\n\n        if(i == 0 || d < dbest)\n        {\n            dbest = d;\n            id = i;\n        }\n    }\n    return id;\n\n}\n\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/LandmarkDetectorFunc.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED �AS IS� FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called �open source� software licenses (�Open Source\n// Components�), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensee�s request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltru�aitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltru�aitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltru�aitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltru�aitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectorFunc.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/calib3d.hpp>\n#include <opencv2/imgproc.hpp>\n\n// System includes\n#include <vector>\n\nusing namespace LandmarkDetector;\n\n// Getting a head pose estimate from the currently detected landmarks (rotation with respect to point camera)\n// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\ncv::Vec6d LandmarkDetector::GetPoseCamera(const CLNF& clnf_model, double fx, double fy, double cx, double cy)\n{\n    if(!clnf_model.detected_landmarks.empty() && clnf_model.params_global[0] != 0)\n    {\n        double Z = fx / clnf_model.params_global[0];\n        \n        double X = ((clnf_model.params_global[4] - cx) * (1.0/fx)) * Z;\n        double Y = ((clnf_model.params_global[5] - cy) * (1.0/fy)) * Z;\n        \n        return cv::Vec6d(X, Y, Z, clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]);\n    }\n    else\n    {\n        return cv::Vec6d(0,0,0,0,0,0);\n    }\n}\n\n// Getting a head pose estimate from the currently detected landmarks (rotation in world coordinates)\n// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\ncv::Vec6d LandmarkDetector::GetPoseWorld(const CLNF& clnf_model, double fx, double fy, double cx, double cy)\n{\n    if(!clnf_model.detected_landmarks.empty() && clnf_model.params_global[0] != 0)\n    {\n        double Z = fx / clnf_model.params_global[0];\n        \n        double X = ((clnf_model.params_global[4] - cx) * (1.0/fx)) * Z;\n        double Y = ((clnf_model.params_global[5] - cy) * (1.0/fy)) * Z;\n        \n        // Here we correct for the camera orientation, for this need to determine the angle the camera makes with the head pose\n        double z_x = cv::sqrt(X * X + Z * Z);\n        double eul_x = atan2(Y, z_x);\n        \n        double z_y = cv::sqrt(Y * Y + Z * Z);\n        double eul_y = -atan2(X, z_y);\n        \n        cv::Matx33d camera_rotation = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(eul_x, eul_y, 0));\n        cv::Matx33d head_rotation = LandmarkDetector::AxisAngle2RotationMatrix(cv::Vec3d(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]));\n        \n        cv::Matx33d corrected_rotation = camera_rotation.t() * head_rotation;\n        \n        cv::Vec3d euler_corrected = LandmarkDetector::RotationMatrix2Euler(corrected_rotation);\n        \n        return cv::Vec6d(X, Y, Z, euler_corrected[0], euler_corrected[1], euler_corrected[2]);\n    }\n    else\n    {\n        return cv::Vec6d(0,0,0,0,0,0);\n    }\n}\n\n// Getting a head pose estimate from the currently detected landmarks, with appropriate correction due to orthographic camera issue\n// This is because rotation estimate under orthographic assumption is only correct close to the centre of the image\n// This method returns a corrected pose estimate with respect to world coordinates (Experimental)\n// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\ncv::Vec6d LandmarkDetector::GetCorrectedPoseWorld(const CLNF& clnf_model, double fx, double fy, double cx, double cy)\n{\n    if(!clnf_model.detected_landmarks.empty() && clnf_model.params_global[0] != 0)\n    {\n        // This is used as an initial estimate for the iterative PnP algorithm\n        double Z = fx / clnf_model.params_global[0];\n        \n        double X = ((clnf_model.params_global[4] - cx) * (1.0/fx)) * Z;\n        double Y = ((clnf_model.params_global[5] - cy) * (1.0/fy)) * Z;\n        \n        // Correction for orientation\n        \n        // 2D points\n        cv::Mat_<double> landmarks_2D = clnf_model.detected_landmarks;\n        \n        landmarks_2D = landmarks_2D.reshape(1, 2).t();\n        \n        // 3D points\n        cv::Mat_<double> landmarks_3D;\n        clnf_model.pdm.CalcShape3D(landmarks_3D, clnf_model.params_local);\n        \n        landmarks_3D = landmarks_3D.reshape(1, 3).t();\n        \n        // Solving the PNP model\n        \n        // The camera matrix\n        cv::Matx33d camera_matrix(fx, 0, cx, 0, fy, cy, 0, 0, 1);\n        \n        cv::Vec3d vec_trans(X, Y, Z);\n        cv::Vec3d vec_rot(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]);\n        \n        cv::solvePnP(landmarks_3D, landmarks_2D, camera_matrix, cv::Mat(), vec_rot, vec_trans, true);\n        \n        cv::Vec3d euler = LandmarkDetector::AxisAngle2Euler(vec_rot);\n        \n        return cv::Vec6d(vec_trans[0], vec_trans[1], vec_trans[2], vec_rot[0], vec_rot[1], vec_rot[2]);\n    }\n    else\n    {\n        return cv::Vec6d(0,0,0,0,0,0);\n    }\n}\n\n// Getting a head pose estimate from the currently detected landmarks, with appropriate correction due to perspective projection\n// This method returns a corrected pose estimate with respect to a point camera (NOTE not the world coordinates) (Experimental)\n// The format returned is [Tx, Ty, Tz, Eul_x, Eul_y, Eul_z]\ncv::Vec6d LandmarkDetector::GetCorrectedPoseCamera(const CLNF& clnf_model, double fx, double fy, double cx, double cy)\n{\n    if(!clnf_model.detected_landmarks.empty() && clnf_model.params_global[0] != 0)\n    {\n        \n        double Z = fx / clnf_model.params_global[0];\n        \n        double X = ((clnf_model.params_global[4] - cx) * (1.0/fx)) * Z;\n        double Y = ((clnf_model.params_global[5] - cy) * (1.0/fy)) * Z;\n        \n        // Correction for orientation\n        \n        // 3D points\n        cv::Mat_<double> landmarks_3D;\n        clnf_model.pdm.CalcShape3D(landmarks_3D, clnf_model.params_local);\n        \n        landmarks_3D = landmarks_3D.reshape(1, 3).t();\n        \n        // 2D points\n        cv::Mat_<double> landmarks_2D = clnf_model.detected_landmarks;\n        \n        landmarks_2D = landmarks_2D.reshape(1, 2).t();\n        \n        // Solving the PNP model\n        \n        // The camera matrix\n        cv::Matx33d camera_matrix(fx, 0, cx, 0, fy, cy, 0, 0, 1);\n        \n        cv::Vec3d vec_trans(X, Y, Z);\n        cv::Vec3d vec_rot(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]);\n        \n        cv::solvePnP(landmarks_3D, landmarks_2D, camera_matrix, cv::Mat(), vec_rot, vec_trans, true);\n        \n        // Here we correct for the camera orientation, for this need to determine the angle the camera makes with the head pose\n        double z_x = cv::sqrt(vec_trans[0] * vec_trans[0] + vec_trans[2] * vec_trans[2]);\n        double eul_x = atan2(vec_trans[1], z_x);\n        \n        double z_y = cv::sqrt(vec_trans[1] * vec_trans[1] + vec_trans[2] * vec_trans[2]);\n        double eul_y = -atan2(vec_trans[0], z_y);\n        \n        cv::Matx33d camera_rotation = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(eul_x, eul_y, 0));\n        cv::Matx33d head_rotation = LandmarkDetector::AxisAngle2RotationMatrix(vec_rot);\n        \n        cv::Matx33d corrected_rotation = camera_rotation * head_rotation;\n        \n        cv::Vec3d euler_corrected = LandmarkDetector::RotationMatrix2Euler(corrected_rotation);\n        \n        return cv::Vec6d(vec_trans[0], vec_trans[1], vec_trans[2], euler_corrected[0], euler_corrected[1], euler_corrected[2]);\n    }\n    else\n    {\n        return cv::Vec6d(0,0,0,0,0,0);\n    }\n}\n\n// If landmark detection in video succeeded create a template for use in simple tracking\nvoid UpdateTemplate(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model)\n{\n    cv::Rect bounding_box;\n    clnf_model.pdm.CalcBoundingBox(bounding_box, clnf_model.params_global, clnf_model.params_local);\n    // Make sure the box is not out of bounds\n    bounding_box = bounding_box & cv::Rect(0, 0, grayscale_image.cols, grayscale_image.rows);\n    \n    clnf_model.face_template = grayscale_image(bounding_box).clone();\n    clnf_model.face_x_pos = bounding_box.x;\n    clnf_model.face_y_pos = bounding_box.y;\n    clnf_model.face_width = bounding_box.width;\n    clnf_model.face_height = bounding_box.height;\n}\n\n// This method uses basic template matching in order to allow for better tracking of fast moving faces\nvoid CorrectGlobalParametersVideo(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, const FaceModelParameters& params)\n{\n    cv::Rect init_box;\n    clnf_model.pdm.CalcBoundingBox(init_box, clnf_model.params_global, clnf_model.params_local);\n    \n    cv::Rect roi(init_box.x - init_box.width/2, init_box.y - init_box.height/2, init_box.width * 2, init_box.height * 2);\n    roi = roi & cv::Rect(0, 0, grayscale_image.cols, grayscale_image.rows);\n    \n    int off_x = roi.x;\n    int off_y = roi.y;\n    \n    double scaling = params.face_template_scale / clnf_model.params_global[0];\n    cv::Mat_<uchar> image;\n    if(scaling < 1)\n    {\n        cv::resize(clnf_model.face_template, clnf_model.face_template, cv::Size(), scaling, scaling);\n        cv::resize(grayscale_image(roi), image, cv::Size(), scaling, scaling);\n    }\n    else\n    {\n        scaling = 1;\n        image = grayscale_image(roi).clone();\n    }\n    \n    // Resizing the template\t\t\t\n    cv::Mat corr_out;\n    cv::matchTemplate(image, clnf_model.face_template, corr_out, CV_TM_CCOEFF_NORMED);\n    \n    // Actually matching it\n    //double min, max;\n    int max_loc[2];\n    \n    cv::minMaxIdx(corr_out, NULL, NULL, NULL, max_loc);\n    \n    cv::Rect_<double> out_bbox(max_loc[1]/scaling + off_x, max_loc[0]/scaling + off_y, clnf_model.face_template.rows / scaling, clnf_model.face_template.cols / scaling);\n    \n    double shift_x = out_bbox.x - (double)init_box.x;\n    double shift_y = out_bbox.y - (double)init_box.y;\n    \n    clnf_model.params_global[4] = clnf_model.params_global[4] + shift_x;\n    clnf_model.params_global[5] = clnf_model.params_global[5] + shift_y;\n    \n}\n\nbool LandmarkDetector::DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> &depth_image, CLNF& clnf_model, FaceModelParameters& params)\n{\n    // First need to decide if the landmarks should be \"detected\" or \"tracked\"\n    // Detected means running face detection and a larger search area, tracked means initialising from previous step\n    // and using a smaller search area\n    \n    // Indicating that this is a first detection in video sequence or after restart\n    bool initial_detection = !clnf_model.tracking_initialised;\n    \n    // Only do it if there was a face detection at all\n    if(clnf_model.tracking_initialised)\n    {\n        \n        // The area of interest search size will depend if the previous track was successful\n        if(!clnf_model.detection_success)\n        {\n            params.window_sizes_current = params.window_sizes_init;\n        }\n        else\n        {\n            params.window_sizes_current = params.window_sizes_small;\n        }\n        \n        // Before the expensive landmark detection step apply a quick template tracking approach\n        if(params.use_face_template && !clnf_model.face_template.empty() && clnf_model.detection_success)\n        {\n            CorrectGlobalParametersVideo(grayscale_image, clnf_model, params);\n        }\n        bool track_success = clnf_model.DetectLandmarks(grayscale_image, depth_image, params);\n        if(!track_success)\n        {\n            // Make a record that tracking failed\n            clnf_model.failures_in_a_row++;\n        }\n        else\n        {\n            // indicate that tracking is a success\n            clnf_model.failures_in_a_row = -1;\t\t\t\n            UpdateTemplate(grayscale_image, clnf_model);\n        }\n    }\n    \n    // This is used for both detection (if it the tracking has not been initialised yet) or if the tracking failed (however we do this every n frames, for speed)\n    // This also has the effect of an attempt to reinitialise just after the tracking has failed, which is useful during large motions\n    if((!clnf_model.tracking_initialised && (clnf_model.failures_in_a_row + 1) % (params.reinit_video_every * 6) == 0) \n       || (clnf_model.tracking_initialised && !clnf_model.detection_success && params.reinit_video_every > 0 && clnf_model.failures_in_a_row % params.reinit_video_every == 0))\n    {\n        \n        cv::Rect_<double> bounding_box;\n        \n        // If the face detector has not been initialised read it in\n        if(clnf_model.face_detector_HAAR.empty())\n        {\n            clnf_model.face_detector_HAAR.load(params.face_detector_location);\n            clnf_model.face_detector_location = params.face_detector_location;\n        }\n        \n        // If the face detector has not been initialised read it in\n        if(clnf_model.seetaface_detector == NULL)\n        {\n            clnf_model.seetaface_detector = new seeta::FaceDetection(params.seetaface_detector_location.c_str());\n            clnf_model.seetaface_detector_location = params.seetaface_detector_location;\n        }\n        \n        cv::Point preference_det(-1, -1);\n        if(clnf_model.preference_det.x != -1 && clnf_model.preference_det.y != -1)\n        {\n            preference_det.x = clnf_model.preference_det.x * grayscale_image.cols;\n            preference_det.y = clnf_model.preference_det.y * grayscale_image.rows;\n            clnf_model.preference_det = cv::Point(-1, -1);\n        }\n        \n        bool face_detection_success;\n        //\t\tif(params.curr_face_detector == FaceModelParameters::HOG_SVM_DETECTOR)\n        //\t\t{\n        //\t\t\tdouble confidence;\n        //\t\t\tface_detection_success = LandmarkDetector::DetectSingleFaceHOG(bounding_box, grayscale_image, clnf_model.face_detector_HOG, confidence, preference_det);\n        //\t\t}\n        //\t\telse\n        if(params.curr_face_detector == FaceModelParameters::HAAR_DETECTOR)\n        {\n            \n            face_detection_success = LandmarkDetector::DetectSingleFace(bounding_box, grayscale_image, clnf_model.face_detector_HAAR, preference_det);\n            \n            clnf_model.face_x_pos = bounding_box.x;\n            \n        }\n        else if(params.curr_face_detector == FaceModelParameters::SEETAFACE_DETECTOR)\n        {\n            face_detection_success = LandmarkDetector::DetectSingleFaceSeetaFace(bounding_box, grayscale_image, clnf_model.seetaface_detector, preference_det);\n        }\n        \n        // Attempt to detect landmarks using the detected face (if unseccessful the detection will be ignored)\n        if(face_detection_success)\n        {\n            // Indicate that tracking has started as a face was detected\n            clnf_model.tracking_initialised = true;\n            \n            // Keep track of old model values so that they can be restored if redetection fails\n            cv::Vec6d params_global_init = clnf_model.params_global;\n            cv::Mat_<double> params_local_init = clnf_model.params_local.clone();\n            double likelihood_init = clnf_model.model_likelihood;\n            cv::Mat_<double> detected_landmarks_init = clnf_model.detected_landmarks.clone();\n            cv::Mat_<double> landmark_likelihoods_init = clnf_model.landmark_likelihoods.clone();\n            \n            // Use the detected bounding box and empty local parameters\n            clnf_model.params_local.setTo(0);\n            clnf_model.pdm.CalcParams(clnf_model.params_global, bounding_box, clnf_model.params_local);\t\t\n            \n            // Make sure the search size is large\n            params.window_sizes_current = params.window_sizes_init;\n            \n            // Do the actual landmark detection (and keep it only if successful)\n            bool landmark_detection_success = clnf_model.DetectLandmarks(grayscale_image, depth_image, params);\n            \n            // If landmark reinitialisation unsucessful continue from previous estimates\n            // if it's initial detection however, do not care if it was successful as the validator might be wrong, so continue trackig\n            // regardless\n            if(!initial_detection && !landmark_detection_success)\n            {\n                \n                // Restore previous estimates\n                clnf_model.params_global = params_global_init;\n                clnf_model.params_local = params_local_init.clone();\n                clnf_model.pdm.CalcShape2D(clnf_model.detected_landmarks, clnf_model.params_local, clnf_model.params_global);\n                clnf_model.model_likelihood = likelihood_init;\n                clnf_model.detected_landmarks = detected_landmarks_init.clone();\n                clnf_model.landmark_likelihoods = landmark_likelihoods_init.clone();\n                \n                return false;\n            }\n            else\n            {\n                clnf_model.failures_in_a_row = -1;\t\t\t\t\n                UpdateTemplate(grayscale_image, clnf_model);\n                return true;\n            }\n        }\n    }\n    \n    // if the model has not been initialised yet class it as a failure\n    if(!clnf_model.tracking_initialised)\n    {\n        clnf_model.failures_in_a_row++;\n    }\n    \n    // un-initialise the tracking\n    if(\tclnf_model.failures_in_a_row > 100)\n    {\n        clnf_model.tracking_initialised = false;\n    }\n    \n    return clnf_model.detection_success;\n    \n}\n\nbool LandmarkDetector::DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> &depth_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params)\n{\n    if(bounding_box.width > 0)\n    {\n        // calculate the local and global parameters from the generated 2D shape (mapping from the 2D to 3D because camera params are unknown)\n        clnf_model.params_local.setTo(0);\n        clnf_model.pdm.CalcParams(clnf_model.params_global, bounding_box, clnf_model.params_local);\n        \n        // indicate that face was detected so initialisation is not necessary\n        clnf_model.tracking_initialised = true;\n    }\n    \n    return DetectLandmarksInVideo(grayscale_image, depth_image, clnf_model, params);\n    \n}\n\nbool LandmarkDetector::DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, FaceModelParameters& params)\n{\n    return DetectLandmarksInVideo(grayscale_image, cv::Mat_<float>(), clnf_model, params);\n}\n\nbool LandmarkDetector::DetectLandmarksInVideo(const cv::Mat_<uchar> &grayscale_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params)\n{\n    return DetectLandmarksInVideo(grayscale_image, cv::Mat_<float>(), clnf_model, params);\n}\n\n//================================================================================================================\n// Landmark detection in image, need to provide an image and optionally CLNF model together with parameters (default values work well)\n// Optionally can provide a bounding box in which detection is performed (this is useful if multiple faces are to be detected in images)\n//================================================================================================================\n\n// This is the one where the actual work gets done, other DetectLandmarksInImage calls lead to this one\nbool LandmarkDetector::DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> depth_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params)\n{\n    \n    // Can have multiple hypotheses\n    std::vector<cv::Vec3d> rotation_hypotheses;\n    \n    if(params.multi_view)\n    {\n        // Try out different orientation initialisations\n        // It is possible to add other orientation hypotheses easilly by just pushing to this vector\n        rotation_hypotheses.push_back(cv::Vec3d(0,0,0));\n        rotation_hypotheses.push_back(cv::Vec3d(0,0.5236,0));\n        rotation_hypotheses.push_back(cv::Vec3d(0,-0.5236,0));\n        rotation_hypotheses.push_back(cv::Vec3d(0.5236,0,0));\n        rotation_hypotheses.push_back(cv::Vec3d(-0.5236,0,0));\n    }\n    else\n    {\n        // Assume the face is close to frontal\n        rotation_hypotheses.push_back(cv::Vec3d(0,0,0));\n    }\n    \n    // Use the initialisation size for the landmark detection\n    params.window_sizes_current = params.window_sizes_init;\n    \n    // Store the current best estimate\n    double best_likelihood;\n    cv::Vec6d best_global_parameters;\n    cv::Mat_<double> best_local_parameters;\n    cv::Mat_<double> best_detected_landmarks;\n    cv::Mat_<double> best_landmark_likelihoods;\n    bool best_success;\n    \n    // The hierarchical model parameters\n    std::vector<double> best_likelihood_h(clnf_model.hierarchical_models.size());\n    std::vector<cv::Vec6d> best_global_parameters_h(clnf_model.hierarchical_models.size());\n    std::vector<cv::Mat_<double>> best_local_parameters_h(clnf_model.hierarchical_models.size());\n    std::vector<cv::Mat_<double>> best_detected_landmarks_h(clnf_model.hierarchical_models.size());\n    std::vector<cv::Mat_<double>> best_landmark_likelihoods_h(clnf_model.hierarchical_models.size());\n    \n    for(size_t hypothesis = 0; hypothesis < rotation_hypotheses.size(); ++hypothesis)\n    {\n        // Reset the potentially set clnf_model parameters\n        clnf_model.params_local.setTo(0.0);\n        \n        for (size_t part = 0; part < clnf_model.hierarchical_models.size(); ++part)\n        {\n            clnf_model.hierarchical_models[part].params_local.setTo(0.0);\n        }\n        \n        // calculate the local and global parameters from the generated 2D shape (mapping from the 2D to 3D because camera params are unknown)\n        clnf_model.pdm.CalcParams(clnf_model.params_global, bounding_box, clnf_model.params_local, rotation_hypotheses[hypothesis]);\n        \n        bool success = clnf_model.DetectLandmarks(grayscale_image, depth_image, params);\t\n        \n        if(hypothesis == 0 || best_likelihood < clnf_model.model_likelihood)\n        {\n            best_likelihood = clnf_model.model_likelihood;\n            best_global_parameters = clnf_model.params_global;\n            best_local_parameters = clnf_model.params_local.clone();\n            best_detected_landmarks = clnf_model.detected_landmarks.clone();\n            best_landmark_likelihoods = clnf_model.landmark_likelihoods.clone();\n            best_success = success;\n        }\n        \n        for (size_t part = 0; part < clnf_model.hierarchical_models.size(); ++part)\n        {\n            if (hypothesis == 0 || best_likelihood < clnf_model.hierarchical_models[part].model_likelihood)\n            {\n                best_likelihood_h[part] = clnf_model.hierarchical_models[part].model_likelihood;\n                best_global_parameters_h[part] = clnf_model.hierarchical_models[part].params_global;\n                best_local_parameters_h[part] = clnf_model.hierarchical_models[part].params_local.clone();\n                best_detected_landmarks_h[part] = clnf_model.hierarchical_models[part].detected_landmarks.clone();\n                best_landmark_likelihoods_h[part] = clnf_model.hierarchical_models[part].landmark_likelihoods.clone();\n            }\n        }\n        \n    }\n    \n    // Store the best estimates in the clnf_model\n    clnf_model.model_likelihood = best_likelihood;\n    clnf_model.params_global = best_global_parameters;\n    clnf_model.params_local = best_local_parameters.clone();\n    clnf_model.detected_landmarks = best_detected_landmarks.clone();\n    clnf_model.detection_success = best_success;\n    clnf_model.landmark_likelihoods = best_landmark_likelihoods.clone();\n    \n    for (size_t part = 0; part < clnf_model.hierarchical_models.size(); ++part)\n    {\n        clnf_model.hierarchical_models[part].params_global = best_global_parameters_h[part];\n        clnf_model.hierarchical_models[part].params_local = best_local_parameters_h[part].clone();\n        clnf_model.hierarchical_models[part].detected_landmarks = best_detected_landmarks_h[part].clone();\n        clnf_model.hierarchical_models[part].landmark_likelihoods = best_landmark_likelihoods_h[part].clone();\n    }\n    \n    return best_success;\n}\n\nbool LandmarkDetector::DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Mat_<float> depth_image, CLNF& clnf_model, FaceModelParameters& params)\n{\n    \n    cv::Rect_<double> bounding_box;\n    \n    // If the face detector has not been initialised read it in\n    if(clnf_model.face_detector_HAAR.empty())\n    {\n        clnf_model.face_detector_HAAR.load(params.face_detector_location);\n        clnf_model.face_detector_location = params.face_detector_location;\n    }\n    \n    // Detect the face first\n    //\tif(params.curr_face_detector == FaceModelParameters::HOG_SVM_DETECTOR)\n    //\t{\n    //\t\tdouble confidence;\n    //\t\tLandmarkDetector::DetectSingleFaceHOG(bounding_box, grayscale_image, clnf_model.face_detector_HOG, confidence);\n    //\t}\n    //\telse\n    if(params.curr_face_detector == FaceModelParameters::HAAR_DETECTOR)\n    {\n        LandmarkDetector::DetectSingleFace(bounding_box, grayscale_image, clnf_model.face_detector_HAAR);\n    }\n    \n    if(bounding_box.width == 0)\n    {\n        return false;\n    }\n    else\n    {\n        return DetectLandmarksInImage(grayscale_image, depth_image, bounding_box, clnf_model, params);\n    }\n}\n\n// Versions not using depth images\nbool LandmarkDetector::DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, const cv::Rect_<double> bounding_box, CLNF& clnf_model, FaceModelParameters& params)\n{\n    return DetectLandmarksInImage(grayscale_image, cv::Mat_<float>(), bounding_box, clnf_model, params);\n}\n\nbool LandmarkDetector::DetectLandmarksInImage(const cv::Mat_<uchar> &grayscale_image, CLNF& clnf_model, FaceModelParameters& params)\n{\n    return DetectLandmarksInImage(grayscale_image, cv::Mat_<float>(), clnf_model, params);\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/LandmarkDetectorModel.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectorModel.h\"\n\n//// Boost includes\n//#include <filesystem.hpp>\n//#include <filesystem/fstream.hpp>\n\n// TBB includes\n//#include <tbb/tbb.h>\n\n// Local includes\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n//=============================================================================\n//=============================================================================\n\n// Constructors\n// A default constructor\nCLNF::CLNF()\n{\n    //    FaceModelParameters parameters;\n    //    this->Read(parameters.model_location);\n    \n    this->seetaface_detector = NULL;\n}\n\nbool CLNF::inits()\n{\n    FaceModelParameters parameters;\n    parameters.init();\n    parameters.model_location = model_location_clnf;\n    parameters.face_detector_location = face_detector_location_clnf;\n    \n    this->Read(parameters.model_location);\n    return true;\n}\n\n// Constructor from a model file\nCLNF::CLNF(std::string fname)\n{\n    this->seetaface_detector = NULL;\n    this->Read(fname);\n    if(!seetaface_detector_location.empty())\n    {\n        this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n    }\n}\n\n// Copy constructor (makes a deep copy of CLNF)\nCLNF::CLNF(const CLNF& other): pdm(other.pdm), params_local(other.params_local.clone()), params_global(other.params_global), detected_landmarks(other.detected_landmarks.clone()),\nlandmark_likelihoods(other.landmark_likelihoods.clone()), patch_experts(other.patch_experts), landmark_validator(other.landmark_validator), face_detector_location(other.face_detector_location),\nhierarchical_mapping(other.hierarchical_mapping), hierarchical_models(other.hierarchical_models), hierarchical_model_names(other.hierarchical_model_names),\nhierarchical_params(other.hierarchical_params), eye_model(other.eye_model)\n{\n    this->seetaface_detector = NULL;\n    this->detection_success = other.detection_success;\n    this->tracking_initialised = other.tracking_initialised;\n    this->detection_certainty = other.detection_certainty;\n    this->model_likelihood = other.model_likelihood;\n    this->failures_in_a_row = other.failures_in_a_row;\n    this->seetaface_detector_location = other.seetaface_detector_location;\n    \n    // Load the CascadeClassifier (as it does not have a proper copy constructor)\n    if(!face_detector_location.empty())\n    {\n        this->face_detector_HAAR.load(face_detector_location);\n    }\n    \n    if(!seetaface_detector_location.empty())\n    {\n        this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n    }\n    // Make sure the matrices are allocated properly\n    this->triangulations.resize(other.triangulations.size());\n    for(size_t i = 0; i < other.triangulations.size(); ++i)\n    {\n        // Make sure the matrix is copied.\n        this->triangulations[i] = other.triangulations[i].clone();\n    }\n    \n    // Make sure the matrices are allocated properly\n    for(std::map<int, cv::Mat_<float>>::const_iterator it = other.kde_resp_precalc.begin(); it!= other.kde_resp_precalc.end(); it++)\n    {\n        // Make sure the matrix is copied.\n        this->kde_resp_precalc.insert(std::pair<int, cv::Mat_<float>>(it->first, it->second.clone()));\n    }\n    \n    //    this->face_detector_HOG = dlib::get_frontal_face_detector();\n    \n}\n\n// Assignment operator for lvalues (makes a deep copy of CLNF)\nCLNF & CLNF::operator= (const CLNF& other)\n{\n    this->seetaface_detector = NULL;\n    if (this != &other) // protect against invalid self-assignment\n    {\n        pdm = PDM(other.pdm);\n        params_local = other.params_local.clone();\n        params_global = other.params_global;\n        detected_landmarks = other.detected_landmarks.clone();\n        \n        landmark_likelihoods =other.landmark_likelihoods.clone();\n        patch_experts = Patch_experts(other.patch_experts);\n        landmark_validator = DetectionValidator(other.landmark_validator);\n        face_detector_location = other.face_detector_location;\n        seetaface_detector_location = other.seetaface_detector_location;\n        \n        this->detection_success = other.detection_success;\n        this->tracking_initialised = other.tracking_initialised;\n        this->detection_certainty = other.detection_certainty;\n        this->model_likelihood = other.model_likelihood;\n        this->failures_in_a_row = other.failures_in_a_row;\n        \n        this->eye_model = other.eye_model;\n        \n        // Load the CascadeClassifier (as it does not have a proper copy constructor)\n        if(!face_detector_location.empty())\n        {\n            this->face_detector_HAAR.load(face_detector_location);\n        }\n        \n        if(!seetaface_detector_location.empty())\n        {\n            this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n        }\n        \n        // Make sure the matrices are allocated properly\n        this->triangulations.resize(other.triangulations.size());\n        for(size_t i = 0; i < other.triangulations.size(); ++i)\n        {\n            // Make sure the matrix is copied.\n            this->triangulations[i] = other.triangulations[i].clone();\n        }\n        \n        // Make sure the matrices are allocated properly\n        for(std::map<int, cv::Mat_<float>>::const_iterator it = other.kde_resp_precalc.begin(); it!= other.kde_resp_precalc.end(); it++)\n        {\n            // Make sure the matrix is copied.\n            this->kde_resp_precalc.insert(std::pair<int, cv::Mat_<float>>(it->first, it->second.clone()));\n        }\n        \n        // Copy over the hierarchical models\n        this->hierarchical_mapping = other.hierarchical_mapping;\n        this->hierarchical_models = other.hierarchical_models;\n        this->hierarchical_model_names = other.hierarchical_model_names;\n        this->hierarchical_params = other.hierarchical_params;\n    }\n    \n    //    face_detector_HOG = dlib::get_frontal_face_detector();\n    \n    return *this;\n}\n\n// Move constructor\nCLNF::CLNF(const CLNF&& other)\n{\n    this->seetaface_detector = NULL;\n    this->detection_success = other.detection_success;\n    this->tracking_initialised = other.tracking_initialised;\n    this->detection_certainty = other.detection_certainty;\n    this->model_likelihood = other.model_likelihood;\n    this->failures_in_a_row = other.failures_in_a_row;\n    \n    pdm = other.pdm;\n    params_local = other.params_local;\n    params_global = other.params_global;\n    detected_landmarks = other.detected_landmarks;\n    landmark_likelihoods = other.landmark_likelihoods;\n    patch_experts = other.patch_experts;\n    landmark_validator = other.landmark_validator;\n    face_detector_location = other.face_detector_location;\n    seetaface_detector_location = other.seetaface_detector_location;\n    \n    face_detector_HAAR = other.face_detector_HAAR;\n    if(!seetaface_detector_location.empty())\n    {\n        this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n    }\n    \n    triangulations = other.triangulations;\n    kde_resp_precalc = other.kde_resp_precalc;\n    \n    //    face_detector_HOG = dlib::get_frontal_face_detector();\n    \n    // Copy over the hierarchical models\n    this->hierarchical_mapping = other.hierarchical_mapping;\n    this->hierarchical_models = other.hierarchical_models;\n    this->hierarchical_model_names = other.hierarchical_model_names;\n    this->hierarchical_params = other.hierarchical_params;\n    \n    this->eye_model = other.eye_model;\n    \n}\n\n// Assignment operator for rvalues\nCLNF & CLNF::operator= (const CLNF&& other)\n{\n    this->seetaface_detector = NULL;\n    this->detection_success = other.detection_success;\n    this->tracking_initialised = other.tracking_initialised;\n    this->detection_certainty = other.detection_certainty;\n    this->model_likelihood = other.model_likelihood;\n    this->failures_in_a_row = other.failures_in_a_row;\n    \n    pdm = other.pdm;\n    params_local = other.params_local;\n    params_global = other.params_global;\n    detected_landmarks = other.detected_landmarks;\n    landmark_likelihoods = other.landmark_likelihoods;\n    patch_experts = other.patch_experts;\n    landmark_validator = other.landmark_validator;\n    face_detector_location = other.face_detector_location;\n    seetaface_detector_location = other.seetaface_detector_location;\n    \n    face_detector_HAAR = other.face_detector_HAAR;\n    \n    if(!seetaface_detector_location.empty())\n    {\n        this->seetaface_detector = new seeta::FaceDetection(seetaface_detector_location.c_str());\n    }\n    \n    triangulations = other.triangulations;\n    kde_resp_precalc = other.kde_resp_precalc;\n    \n    //    face_detector_HOG = dlib::get_frontal_face_detector();\n    \n    // Copy over the hierarchical models\n    this->hierarchical_mapping = other.hierarchical_mapping;\n    this->hierarchical_models = other.hierarchical_models;\n    this->hierarchical_model_names = other.hierarchical_model_names;\n    this->hierarchical_params = other.hierarchical_params;\n    \n    this->eye_model = other.eye_model;\n    \n    return *this;\n}\n\n\nvoid CLNF::Read_CLNF(std::string clnf_location)\n{\n    std::cout << \"clnf_location = \" << clnf_location << std::endl;\n    // Location of modules\n    std::ifstream locations(clnf_location.c_str(), std::ios_base::in);\n    \n    if(!locations.is_open())\n    {\n        std::cout << \"Couldn't open the CLNF model file aborting\" << std::endl;\n        std::cout.flush();\n        return;\n    }\n    \n    std::string line;\n    \n    std::vector<std::string> intensity_expert_locations;\n    std::vector<std::string> depth_expert_locations;\n    std::vector<std::string> ccnf_expert_locations;\n    \n    // The other module locations should be defined as relative paths from the main model\n    //    boost::filesystem::path root = boost::filesystem::path(clnf_location).parent_path();\n    std::string root;\n    std::string temp(\"/\");\n    std::size_t found = clnf_location.rfind(temp);\n    if (found!=std::string::npos)\n        root = clnf_location.substr(0, found);\n    \n    // The main file contains the references to other files\n    while (!locations.eof())\n    {\n        \n        getline(locations, line);\n        \n        std::stringstream lineStream(line);\n        \n        std::string module;\n        std::string location;\n        \n        // figure out which module is to be read from which file\n        lineStream >> module;\n        \n        getline(lineStream, location);\n        \n        if(location.size() > 0)\n            location.erase(location.begin()); // remove the first space\n        \n        // remove carriage return at the end for compatibility with unix systems\n        if(location.size() > 0 && location.at(location.size()-1) == '\\r')\n        {\n            location = location.substr(0, location.size()-1);\n        }\n        \n        // append the lovstion to root location (boost syntax)\n        //        location = (root / location).string();\n        location = root + temp + location;\n        \n        if (module.compare(\"PDM\") == 0)\n        {\n            std::cout << \"Reading the PDM module from: \" << location << \"....\";\n            pdm.Read(location);\n            \n            std::cout << \"Done\" << std::endl;\n        }\n        else if (module.compare(\"Triangulations\") == 0)\n        {\n            std::cout << \"Reading the Triangulations module from: \" << location << \"....\";\n            std::ifstream triangulationFile(location.c_str(), std::ios_base::in);\n            \n            LandmarkDetector::SkipComments(triangulationFile);\n            \n            int numViews;\n            triangulationFile >> numViews;\n            \n            // read in the triangulations\n            triangulations.resize(numViews);\n            \n            for(int i = 0; i < numViews; ++i)\n            {\n                LandmarkDetector::SkipComments(triangulationFile);\n                LandmarkDetector::ReadMat(triangulationFile, triangulations[i]);\n            }\n            std::cout << \"Done\" << std::endl;\n        }\n        else if(module.compare(\"PatchesIntensity\") == 0)\n        {\n            intensity_expert_locations.push_back(location);\n        }\n        else if(module.compare(\"PatchesDepth\") == 0)\n        {\n            depth_expert_locations.push_back(location);\n        }\n        else if(module.compare(\"PatchesCCNF\") == 0)\n        {\n            ccnf_expert_locations.push_back(location);\n        }\n    }\n    \n    // Initialise the patch experts\n    patch_experts.Read(intensity_expert_locations, depth_expert_locations, ccnf_expert_locations);\n    \n    // Read in a face detector\n    //    face_detector_HOG = dlib::get_frontal_face_detector();\n    \n}\n\nvoid CLNF::Read(std::string main_location)\n{\n    std::cout << \"Reading the CLNF landmark detector/tracker from: \" << main_location << std::endl;\n    \n    std::ifstream locations(main_location.c_str(), std::ios_base::in);\n    if(!locations.is_open())\n    {\n        std::cout << \"Couldn't open the model file, aborting\" << std::endl;\n        return;\n    }\n    std::string line;\n    \n    // The other module locations should be defined as relative paths from the main model\n    //    boost::filesystem::path root = boost::filesystem::path(main_location).parent_path();\n    std::string root;\n    std::string temp(\"/\");\n    std::size_t found = main_location.rfind(temp);\n    if (found!=std::string::npos)\n        root = main_location.substr(0, found);\n    //std::cout << \"first '/' found at: \" << found << '\\n';\n    \n    // The main file contains the references to other files\n    while (!locations.eof())\n    {\n        getline(locations, line);\n        \n        std::stringstream lineStream(line);\n        \n        std::string module;\n        std::string location;\n        \n        // figure out which module is to be read from which file\n        lineStream >> module;\n        \n        lineStream >> location;\n        \n        // remove carriage return at the end for compatibility with unix systems\n        if(location.size() > 0 && location.at(location.size()-1) == '\\r')\n        {\n            location = location.substr(0, location.size()-1);\n        }\n        \n        // append to root\n        //        location = (root / location).string();\n        location = root + temp + location;\n        \n        if (module.compare(\"LandmarkDetector\") == 0)\n        {\n            std::cout << \"Reading the landmark detector module from: \" << location << std::endl;\n            \n            // The CLNF module includes the PDM and the patch experts\n            Read_CLNF(location);\n        }\n        else if(module.compare(\"LandmarkDetector_part\") == 0)\n        {\n            std::string part_name;\n            lineStream >> part_name;\n            std::cout << \"Reading part based module....\" << part_name << std::endl;\n            \n            std::vector<std::pair<int, int>> mappings;\n            while(!lineStream.eof())\n            {\n                int ind_in_main;\n                lineStream >> ind_in_main;\n                \n                int ind_in_part;\n                lineStream >> ind_in_part;\n                mappings.push_back(std::pair<int, int>(ind_in_main, ind_in_part));\n            }\n            \n            this->hierarchical_mapping.push_back(mappings);\n            \n            CLNF part_model(location);\n            \n            this->hierarchical_models.push_back(part_model);\n            \n            this->hierarchical_model_names.push_back(part_name);\n            \n            FaceModelParameters params;\n            params.validate_detections = false;\n            params.refine_hierarchical = false;\n            params.refine_parameters = false;\n            \n            if(part_name.compare(\"left_eye\") == 0 || part_name.compare(\"right_eye\") == 0)\n            {\n                \n                std::vector<int> windows_large;\n                windows_large.push_back(5);\n                windows_large.push_back(3);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(5);\n                windows_small.push_back(3);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 0.1;\n                params.sigma = 2;\n            }\n            else if(part_name.compare(\"left_eye_28\") == 0 || part_name.compare(\"right_eye_28\") == 0)\n            {\n                std::vector<int> windows_large;\n                windows_large.push_back(3);\n                windows_large.push_back(5);\n                windows_large.push_back(9);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(3);\n                windows_small.push_back(5);\n                windows_small.push_back(9);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 0.5;\n                params.sigma = 1.0;\n                \n                eye_model = true;\n                \n            }\n            else if(part_name.compare(\"mouth\") == 0)\n            {\n                std::vector<int> windows_large;\n                windows_large.push_back(7);\n                windows_large.push_back(7);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(7);\n                windows_small.push_back(7);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 1.0;\n                params.sigma = 2.0;\n            }\n            else if(part_name.compare(\"brow\") == 0)\n            {\n                std::vector<int> windows_large;\n                windows_large.push_back(11);\n                windows_large.push_back(9);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(11);\n                windows_small.push_back(9);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 10.0;\n                params.sigma = 3.5;\n            }\n            else if(part_name.compare(\"inner\") == 0)\n            {\n                std::vector<int> windows_large;\n                windows_large.push_back(9);\n                \n                std::vector<int> windows_small;\n                windows_small.push_back(9);\n                \n                params.window_sizes_init = windows_large;\n                params.window_sizes_small = windows_small;\n                params.window_sizes_current = windows_large;\n                \n                params.reg_factor = 2.5;\n                params.sigma = 1.75;\n                params.weight_factor = 2.5;\n            }\n            \n            this->hierarchical_params.push_back(params);\n            \n            std::cout << \"Done\" << std::endl;\n        }\n        else if (module.compare(\"DetectionValidator\") == 0)\n        {\n            std::cout << \"Reading the landmark validation module....\";\n            landmark_validator.Read(location);\n            std::cout << \"Done\" << std::endl;\n        }\n    }\n    \n    detected_landmarks.create(2 * pdm.NumberOfPoints(), 1);\n    detected_landmarks.setTo(0);\n    \n    detection_success = false;\n    tracking_initialised = false;\n    model_likelihood = -10; // very low\n    detection_certainty = 1; // very uncertain\n    \n    // Initialising default values for the rest of the variables\n    \n    // local parameters (shape)\n    params_local.create(pdm.NumberOfModes(), 1);\n    params_local.setTo(0.0);\n    \n    // global parameters (pose) [scale, euler_x, euler_y, euler_z, tx, ty]\n    params_global = cv::Vec6d(1, 0, 0, 0, 0, 0);\n    \n    failures_in_a_row = -1;\n    \n}\n\n// Resetting the model (for a new video, or complet reinitialisation\nvoid CLNF::Reset()\n{\n    detected_landmarks.setTo(0);\n    \n    detection_success = false;\n    tracking_initialised = false;\n    model_likelihood = -10;  // very low\n    detection_certainty = 1; // very uncertain\n    \n    // local parameters (shape)\n    params_local.setTo(0.0);\n    \n    // global parameters (pose) [scale, euler_x, euler_y, euler_z, tx, ty]\n    params_global = cv::Vec6d(1, 0, 0, 0, 0, 0);\n    \n    failures_in_a_row = -1;\n    face_template = cv::Mat_<uchar>();\n}\n\n// Resetting the model, choosing the face nearest (x,y)\nvoid CLNF::Reset(double x, double y)\n{\n    \n    // First reset the model overall\n    this->Reset();\n    \n    // Now in the following frame when face detection takes place this is the point at which it will be preffered\n    this->preference_det.x = x;\n    this->preference_det.y = y;\n    \n}\n\n// The main internal landmark detection call (should not be used externally?)\nbool CLNF::DetectLandmarks(const cv::Mat_<uchar> &image, const cv::Mat_<float> &depth, FaceModelParameters& params)\n{\n    \n    // Fits from the current estimate of local and global parameters in the model\n    \n    bool fit_success = Fit(image, depth, params.window_sizes_current, params);\n    \n    // Store the landmarks converged on in detected_landmarks\n    pdm.CalcShape2D(detected_landmarks, params_local, params_global);\n    \n    if(params.refine_hierarchical && hierarchical_models.size() > 0)\n    {\n        bool parts_used = false;\n        \n        // Do the hierarchical models in parallel\n        //        tbb::parallel_for(0, (int)hierarchical_models.size(), [&](int part_model){\n        for(int part_model = 0; part_model < hierarchical_models.size(); part_model++)\n        {\n            // Only do the synthetic eye models if we're doing gaze\n            if (!((hierarchical_model_names[part_model].compare(\"right_eye_28\") == 0 ||\n                   hierarchical_model_names[part_model].compare(\"left_eye_28\") == 0)\n                  && !params.track_gaze))\n            {\n                \n                int n_part_points = hierarchical_models[part_model].pdm.NumberOfPoints();\n                \n                std::vector<std::pair<int, int> > mappings = this->hierarchical_mapping[part_model];\n                \n                cv::Mat_<double> part_model_locs(n_part_points * 2, 1, 0.0);\n                \n                // Extract the corresponding landmarks\n                for (size_t mapping_ind = 0; mapping_ind < mappings.size(); ++mapping_ind)\n                {\n                    part_model_locs.at<double>(mappings[mapping_ind].second) = detected_landmarks.at<double>(mappings[mapping_ind].first);\n                    part_model_locs.at<double>(mappings[mapping_ind].second + n_part_points) = detected_landmarks.at<double>(mappings[mapping_ind].first + this->pdm.NumberOfPoints());\n                }\n                \n                // Fit the part based model PDM\n                hierarchical_models[part_model].pdm.CalcParams(hierarchical_models[part_model].params_global, hierarchical_models[part_model].params_local, part_model_locs);\n                \n                // Only do this if we don't need to upsample\n                if (params_global[0] > 0.9 * hierarchical_models[part_model].patch_experts.patch_scaling[0])\n                {\n                    parts_used = true;\n                    \n                    this->hierarchical_params[part_model].window_sizes_current = this->hierarchical_params[part_model].window_sizes_init;\n                    \n                    // Do the actual landmark detection\n                    hierarchical_models[part_model].DetectLandmarks(image, depth, hierarchical_params[part_model]);\n                    \n                    // Reincorporate the models into main tracker\n                    for (size_t mapping_ind = 0; mapping_ind < mappings.size(); ++mapping_ind)\n                    {\n                        detected_landmarks.at<double>(mappings[mapping_ind].first) = hierarchical_models[part_model].detected_landmarks.at<double>(mappings[mapping_ind].second);\n                        detected_landmarks.at<double>(mappings[mapping_ind].first + pdm.NumberOfPoints()) = hierarchical_models[part_model].detected_landmarks.at<double>(mappings[mapping_ind].second + hierarchical_models[part_model].pdm.NumberOfPoints());\n                    }\n                }\n                else\n                {\n                    hierarchical_models[part_model].pdm.CalcShape2D(hierarchical_models[part_model].detected_landmarks, hierarchical_models[part_model].params_local, hierarchical_models[part_model].params_global);\n                }\n            }\n        }\n        //        });\n        \n        // Recompute main model based on the fit part models\n        if(parts_used)\n        {\n            pdm.CalcParams(params_global, params_local, detected_landmarks);\n            pdm.CalcShape2D(detected_landmarks, params_local, params_global);\n        }\n    }\n    \n    // Check detection correctness\n    if(params.validate_detections && fit_success)\n    {\n        cv::Vec3d orientation(params_global[1], params_global[2], params_global[3]);\n        \n        detection_certainty = landmark_validator.Check(orientation, image, detected_landmarks);\n        \n        detection_success = detection_certainty < params.validation_boundary;\n    }\n    else\n    {\n        detection_success = fit_success;\n        if(fit_success)\n        {\n            detection_certainty = -1;\n        }\n        else\n        {\n            detection_certainty = 1;\n        }\n        \n    }\n    \n    return detection_success;\n}\n\n//=============================================================================\nbool CLNF::Fit(const cv::Mat_<uchar>& im, const cv::Mat_<float>& depthImg, const std::vector<int>& window_sizes, const FaceModelParameters& parameters)\n{\n    // Making sure it is a single channel image\n    assert(im.channels() == 1);\n    \n    // Placeholder for the landmarks\n    cv::Mat_<double> current_shape(2 * pdm.NumberOfPoints() , 1, 0.0);\n    \n    int n = pdm.NumberOfPoints();\n    \n    cv::Mat_<float> depth_img_no_background;\n    \n    // Background elimination from the depth image\n    if(!depthImg.empty())\n    {\n        bool success = RemoveBackground(depth_img_no_background, depthImg);\n        \n        // The attempted background removal can fail leading to tracking failure\n        if(!success)\n        {\n            return false;\n        }\n    }\n    \n    int num_scales = patch_experts.patch_scaling.size();\n    \n    // Storing the patch expert response maps\n    std::vector<cv::Mat_<float> > patch_expert_responses(n);\n    \n    // Converting from image space to patch expert space (normalised for rotation and scale)\n    cv::Matx22f sim_ref_to_img;\n    cv::Matx22d sim_img_to_ref;\n    \n    FaceModelParameters tmp_parameters = parameters;\n    \n    // Optimise the model across a number of areas of interest (usually in descending window size and ascending scale size)\n    \n    for(int scale = 0; scale < num_scales; scale+=1)\n    {\n        \n        int window_size = window_sizes[scale];\n        \n        if(window_size == 0 ||  0.9 * patch_experts.patch_scaling[scale] > params_global[0])\n            continue;\n        \n        // The patch expert response computation\n        if(scale != window_sizes.size() - 1)\n        {\n            patch_experts.Response(patch_expert_responses, sim_ref_to_img, sim_img_to_ref, im, depth_img_no_background, pdm, params_global, params_local, window_size, scale);\n        }\n        else\n        {\n            // Do not use depth for the final iteration as it is not as accurate\n            patch_experts.Response(patch_expert_responses, sim_ref_to_img, sim_img_to_ref, im, cv::Mat(), pdm, params_global, params_local, window_size, scale);\n        }\n        if(parameters.refine_parameters == true)\n        {\n            // Adapt the parameters based on scale (wan't to reduce regularisation as scale increases, but increa sigma and tikhonov)\n            tmp_parameters.reg_factor = parameters.reg_factor - 15 * log(patch_experts.patch_scaling[scale]/0.25)/log(2);\n            \n            if(tmp_parameters.reg_factor <= 0)\n                tmp_parameters.reg_factor = 0.001;\n            \n            tmp_parameters.sigma = parameters.sigma + 0.25 * log(patch_experts.patch_scaling[scale]/0.25)/log(2);\n            tmp_parameters.weight_factor = parameters.weight_factor + 2 * parameters.weight_factor *  log(patch_experts.patch_scaling[scale]/0.25)/log(2);\n        }\n        \n        // Get the current landmark locations\n        pdm.CalcShape2D(current_shape, params_local, params_global);\n        \n        // Get the view used by patch experts\n        int view_id = patch_experts.GetViewIdx(params_global, scale);\n        \n        // the actual optimisation step\n        this->NU_RLMS(params_global, params_local, patch_expert_responses, cv::Vec6d(params_global), params_local.clone(), current_shape, sim_img_to_ref, sim_ref_to_img, window_size, view_id, true, scale, this->landmark_likelihoods, tmp_parameters);\n        \n        // non-rigid optimisation\n        \n        this->model_likelihood = this->NU_RLMS(params_global, params_local, patch_expert_responses, cv::Vec6d(params_global), params_local.clone(), current_shape, sim_img_to_ref, sim_ref_to_img, window_size, view_id, false, scale, this->landmark_likelihoods, tmp_parameters);\n        \n        // Can't track very small images reliably (less than ~30px across)\n        if(params_global[0] < 0.25)\n        {\n            std::cout << \"Face too small for landmark detection\" << std::endl;\n            return false;\n        }\n    }\n    \n    return true;\n}\n\nvoid CLNF::NonVectorisedMeanShift_precalc_kde(cv::Mat_<float>& out_mean_shifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<float> &dxs, const cv::Mat_<float> &dys, int resp_size, float a, int scale, int view_id, std::map<int, cv::Mat_<float> >& kde_resp_precalc)\n{\n    \n    int n = dxs.rows;\n    \n    cv::Mat_<float> kde_resp;\n    float step_size = 0.1;\n    \n    // if this has not been precomputer, precompute it, otherwise use it\n    if(kde_resp_precalc.find(resp_size) == kde_resp_precalc.end())\n    {\n        kde_resp = cv::Mat_<float>((int)((resp_size / step_size)*(resp_size/step_size)), resp_size * resp_size);\n        cv::MatIterator_<float> kde_it = kde_resp.begin();\n        \n        for(int x = 0; x < resp_size/step_size; x++)\n        {\n            float dx = x * step_size;\n            for(int y = 0; y < resp_size/step_size; y++)\n            {\n                float dy = y * step_size;\n                \n                int ii,jj;\n                float v,vx,vy;\n                \n                for(ii = 0; ii < resp_size; ii++)\n                {\n                    vx = (dy-ii)*(dy-ii);\n                    for(jj = 0; jj < resp_size; jj++)\n                    {\n                        vy = (dx-jj)*(dx-jj);\n                        \n                        // the KDE evaluation of that point\n                        v = exp(a*(vx+vy));\n                        \n                        *kde_it++ = v;\n                    }\n                }\n            }\n        }\n        \n        kde_resp_precalc[resp_size] = kde_resp.clone();\n    }\n    else\n    {\n        // use the precomputed version\n        kde_resp = kde_resp_precalc.find(resp_size)->second;\n    }\n    \n    // for every point (patch) calculating mean-shift\n    for(int i = 0; i < n; i++)\n    {\n        if(patch_experts.visibilities[scale][view_id].at<int>(i,0) == 0)\n        {\n            out_mean_shifts.at<float>(i,0) = 0;\n            out_mean_shifts.at<float>(i+n,0) = 0;\n            continue;\n        }\n        \n        // indices of dx, dy\n        float dx = dxs.at<float>(i);\n        float dy = dys.at<float>(i);\n        \n        // Ensure that we are within bounds (important for precalculation)\n        if(dx < 0)\n            dx = 0;\n        if(dy < 0)\n            dy = 0;\n        if(dx > resp_size - step_size)\n            dx = resp_size - step_size;\n        if(dy > resp_size - step_size)\n            dy = resp_size - step_size;\n        \n        // Pick the row from precalculated kde that approximates the current dx, dy best\n        int closest_col = (int)(dy /step_size + 0.5); // Plus 0.5 is there, as C++ rounds down with int cast\n        int closest_row = (int)(dx /step_size + 0.5); // Plus 0.5 is there, as C++ rounds down with int cast\n        \n        int idx = closest_row * ((int)(resp_size/step_size + 0.5)) + closest_col; // Plus 0.5 is there, as C++ rounds down with int cast\n        \n        cv::MatIterator_<float> kde_it = kde_resp.begin() + kde_resp.cols*idx;\n        \n        float mx=0.0;\n        float my=0.0;\n        float sum=0.0;\n        \n        // Iterate over the patch responses here\n        cv::MatConstIterator_<float> p = patch_expert_responses[i].begin();\n        \n        for(int ii = 0; ii < resp_size; ii++)\n        {\n            for(int jj = 0; jj < resp_size; jj++)\n            {\n                \n                // the KDE evaluation of that point multiplied by the probability at the current, xi, yi\n                float v = (*p++) * (*kde_it++);\n                \n                sum += v;\n                \n                // mean shift in x and y\n                mx += v*jj;\n                my += v*ii;\n                \n            }\n        }\n        \n        float msx = (mx/sum - dx);\n        float msy = (my/sum - dy);\n        \n        out_mean_shifts.at<float>(i,0) = msx;\n        out_mean_shifts.at<float>(i+n,0) = msy;\n        \n    }\n    \n}\n\nvoid CLNF::GetWeightMatrix(cv::Mat_<float>& WeightMatrix, int scale, int view_id, const FaceModelParameters& parameters)\n{\n    int n = pdm.NumberOfPoints();\n    \n    // Is the weight matrix needed at all\n    if(parameters.weight_factor > 0)\n    {\n        WeightMatrix = cv::Mat_<float>::zeros(n*2, n*2);\n        \n        for (int p=0; p < n; p++)\n        {\n            if(!patch_experts.ccnf_expert_intensity.empty())\n            {\n                \n                // for the x dimension\n                WeightMatrix.at<float>(p,p) = WeightMatrix.at<float>(p,p)  + patch_experts.ccnf_expert_intensity[scale][view_id][p].patch_confidence;\n                \n                // for they y dimension\n                WeightMatrix.at<float>(p+n,p+n) = WeightMatrix.at<float>(p,p);\n                \n            }\n            else\n            {\n                // Across the modalities add the confidences\n                for(size_t pc=0; pc < patch_experts.svr_expert_intensity[scale][view_id][p].svr_patch_experts.size(); pc++)\n                {\n                    // for the x dimension\n                    WeightMatrix.at<float>(p,p) = WeightMatrix.at<float>(p,p)  + patch_experts.svr_expert_intensity[scale][view_id][p].svr_patch_experts.at(pc).confidence;\n                }\n                // for the y dimension\n                WeightMatrix.at<float>(p+n,p+n) = WeightMatrix.at<float>(p,p);\n            }\n        }\n        WeightMatrix = parameters.weight_factor * WeightMatrix;\n    }\n    else\n    {\n        WeightMatrix = cv::Mat_<float>::eye(n*2, n*2);\n    }\n    \n}\n\n//=============================================================================\ndouble CLNF::NU_RLMS(cv::Vec6d& final_global, cv::Mat_<double>& final_local, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Vec6d& initial_global, const cv::Mat_<double>& initial_local,\n                     const cv::Mat_<double>& base_shape, const cv::Matx22d& sim_img_to_ref, const cv::Matx22f& sim_ref_to_img, int resp_size, int view_id, bool rigid, int scale, cv::Mat_<double>& landmark_lhoods,\n                     const FaceModelParameters& parameters)\n{\t\t\n    \n    int n = pdm.NumberOfPoints();\n    \n    // Mean, eigenvalues, eigenvectors\n    cv::Mat_<double> M = this->pdm.mean_shape;\n    cv::Mat_<double> E = this->pdm.eigen_values;\n    //Mat_<double> V = this->pdm.princ_comp;\n    \n    int m = pdm.NumberOfModes();\n    \n    cv::Vec6d current_global(initial_global);\n    \n    cv::Mat_<float> current_local;\n    initial_local.convertTo(current_local, CV_32F);\n    \n    cv::Mat_<double> current_shape;\n    cv::Mat_<double> previous_shape;\n    \n    // Pre-calculate the regularisation term\n    cv::Mat_<float> regTerm;\n    \n    if(rigid)\n    {\n        regTerm = cv::Mat_<float>::zeros(6,6);\n    }\n    else\n    {\n        cv::Mat_<double> regularisations = cv::Mat_<double>::zeros(1, 6 + m);\n        \n        // Setting the regularisation to the inverse of eigenvalues\n        cv::Mat(parameters.reg_factor / E).copyTo(regularisations(cv::Rect(6, 0, m, 1)));\n        cv::Mat_<double> regTerm_d = cv::Mat::diag(regularisations.t());\n        regTerm_d.convertTo(regTerm, CV_32F);\n    }\n    \n    cv::Mat_<float> WeightMatrix;\n    GetWeightMatrix(WeightMatrix, scale, view_id, parameters);\n    \n    cv::Mat_<float> dxs, dys;\n    \n    // The preallocated memory for the mean shifts\n    cv::Mat_<float> mean_shifts(2 * pdm.NumberOfPoints(), 1, 0.0);\n    \n    // Number of iterations\n    for(int iter = 0; iter < parameters.num_optimisation_iteration; iter++)\n    {\n        // get the current estimates of x\n        pdm.CalcShape2D(current_shape, current_local, current_global);\n        \n        if(iter > 0)\n        {\n            // if the shape hasn't changed terminate\n            if(norm(current_shape, previous_shape) < 0.01)\n            {\n                break;\n            }\n        }\n        \n        current_shape.copyTo(previous_shape);\n        \n        // Jacobian, and transposed weighted jacobian\n        cv::Mat_<float> J, J_w_t;\n        \n        // calculate the appropriate Jacobians in 2D, even though the actual behaviour is in 3D, using small angle approximation and oriented shape\n        if(rigid)\n        {\n            pdm.ComputeRigidJacobian(current_local, current_global, J, WeightMatrix, J_w_t);\n        }\n        else\n        {\n            pdm.ComputeJacobian(current_local, current_global, J, WeightMatrix, J_w_t);\n        }\n        \n        // useful for mean shift calculation\n        float a = -0.5/(parameters.sigma * parameters.sigma);\n        \n        cv::Mat_<double> current_shape_2D = current_shape.reshape(1, 2).t();\n        cv::Mat_<double> base_shape_2D = base_shape.reshape(1, 2).t();\n        \n        cv::Mat_<float> offsets;\n        cv::Mat((current_shape_2D - base_shape_2D) * cv::Mat(sim_img_to_ref).t()).convertTo(offsets, CV_32F);\n        \n        dxs = offsets.col(0) + (resp_size-1)/2;\n        dys = offsets.col(1) + (resp_size-1)/2;\n        \n        NonVectorisedMeanShift_precalc_kde(mean_shifts, patch_expert_responses, dxs, dys, resp_size, a, scale, view_id, kde_resp_precalc);\n        \n        // Now transform the mean shifts to the the image reference frame, as opposed to one of ref shape (object space)\n        cv::Mat_<float> mean_shifts_2D = (mean_shifts.reshape(1, 2)).t();\n        \n        mean_shifts_2D = mean_shifts_2D * cv::Mat(sim_ref_to_img).t();\n        mean_shifts = cv::Mat(mean_shifts_2D.t()).reshape(1, n*2);\n        \n        // remove non-visible observations\n        for(int i = 0; i < n; ++i)\n        {\n            // if patch unavailable for current index\n            if(patch_experts.visibilities[scale][view_id].at<int>(i,0) == 0)\n            {\n                cv::Mat Jx = J.row(i);\n                Jx = cvScalar(0);\n                cv::Mat Jy = J.row(i+n);\n                Jy = cvScalar(0);\n                mean_shifts.at<float>(i,0) = 0.0f;\n                mean_shifts.at<float>(i+n,0) = 0.0f;\n            }\n        }\n        \n        // projection of the meanshifts onto the jacobians (using the weighted Jacobian, see Baltrusaitis 2013)\n        cv::Mat_<float> J_w_t_m = J_w_t * mean_shifts;\n        \n        // Add the regularisation term\n        if(!rigid)\n        {\n            J_w_t_m(cv::Rect(0,6,1, m)) = J_w_t_m(cv::Rect(0,6,1, m)) - regTerm(cv::Rect(6,6, m, m)) * current_local;\n        }\n        \n        // Calculating the Hessian approximation\n        cv::Mat_<float> Hessian = J_w_t * J;\n        \n        // Add the Tikhonov regularisation\n        Hessian = Hessian + regTerm;\n        \n        // Solve for the parameter update (from Baltrusaitis 2013 based on eq (36) Saragih 2011)\n        cv::Mat_<float> param_update;\n        cv::solve(Hessian, J_w_t_m, param_update, CV_CHOLESKY);\n        \n        // update the reference\n        pdm.UpdateModelParameters(param_update, current_local, current_global);\n        \n        // clamp to the local parameters for valid expressions\n        pdm.Clamp(current_local, current_global, parameters);\n        \n    }\n    \n    // compute the log likelihood\n    double loglhood = 0;\n    \n    landmark_lhoods = cv::Mat_<double>(n, 1, -1e8);\n    \n    for(int i = 0; i < n; i++)\n    {\n        /// whateverx fix it\n        /// https://github.com/FaceAR/OpenFaceIOS/issues/1\n        if(patch_experts.visibilities[scale][view_id].at<int>(i,0) == 0 || dxs.dims == 0 )\n        {\n            continue;\n        }\n        float dx = dxs.at<float>(i);\n        float dy = dys.at<float>(i);\n        \n        int ii,jj;\n        float v,vx,vy,sum=0.0;\n        \n        // Iterate over the patch responses here\n        cv::MatConstIterator_<float> p = patch_expert_responses[i].begin();\n        \n        for(ii = 0; ii < resp_size; ii++)\n        {\n            vx = (dy-ii)*(dy-ii);\n            for(jj = 0; jj < resp_size; jj++)\n            {\n                vy = (dx-jj)*(dx-jj);\n                \n                // the probability at the current, xi, yi\n                v = *p++;\n                \n                // the KDE evaluation of that point\n                v *= exp(-0.5*(vx+vy)/(parameters.sigma * parameters.sigma));\n                \n                sum += v;\n            }\n        }\n        landmark_lhoods.at<double>(i,0) = (double)sum;\n        \n        // the offset is there for numerical stability\n        loglhood += log(sum + 1e-8);\n        \n    }\n    loglhood = loglhood/sum(patch_experts.visibilities[scale][view_id])[0];\n    \n    final_global = current_global;\n    final_local = current_local;\n    \n    return loglhood;\n    \n}\n\n\nbool CLNF::RemoveBackground(cv::Mat_<float>& out_depth_image, const cv::Mat_<float>& depth_image)\n{\n    // use the current estimate of the face location to determine what is foreground and background\n    double tx = this->params_global[4];\n    double ty = this->params_global[5];\n    \n    // if we are too close to the edge fail\n    if(tx - 9 <= 0 || ty - 9 <= 0 || tx + 9 >= depth_image.cols || ty + 9 >= depth_image.rows)\n    {\n        std::cout << \"Face estimate is too close to the edge, tracking failed\" << std::endl;\n        return false;\n    }\n    \n    cv::Mat_<double> current_shape;\n    \n    pdm.CalcShape2D(current_shape, params_local, params_global);\n    \n    double min_x, max_x, min_y, max_y;\n    \n    int n = this->pdm.NumberOfPoints();\n    \n    cv::minMaxLoc(current_shape(cv::Range(0, n), cv::Range(0,1)), &min_x, &max_x);\n    cv::minMaxLoc(current_shape(cv::Range(n, n*2), cv::Range(0,1)), &min_y, &max_y);\n    \n    // the area of interest: size of face with some scaling ( these scalings are fairly ad-hoc)\n    double width = 3 * (max_x - min_x);\n    double height = 2.5 * (max_y - min_y);\n    \n    // getting the region of interest from the depth image,\n    // so we don't get other objects lying at same depth as head in the image but away from it\n    cv::Rect_<int> roi((int)(tx-width/2), (int)(ty - height/2), (int)width, (int)height);\n    \n    // clamp it if it does not lie fully in the image\n    if(roi.x < 0) roi.x = 0;\n    if(roi.y < 0) roi.y = 0;\n    if(roi.width + roi.x >= depth_image.cols) roi.x = depth_image.cols - roi.width;\n    if(roi.height + roi.y >= depth_image.rows) roi.y = depth_image.rows - roi.height;\n    \n    if(width > depth_image.cols)\n    {\n        roi.x = 0; roi.width = depth_image.cols;\n    }\n    if(height > depth_image.rows)\n    {\n        roi.y = 0; roi.height = depth_image.rows;\n    }\n    \n    if(roi.width == 0) roi.width = depth_image.cols;\n    if(roi.height == 0) roi.height = depth_image.rows;\n    \n    if(roi.x >= depth_image.cols) roi.x = 0;\n    if(roi.y >= depth_image.rows) roi.y = 0;\n    \n    // Initialise the mask\n    cv::Mat_<uchar> mask(depth_image.rows, depth_image.cols, (uchar)0);\n    \n    cv::Mat_<uchar> valid_pixels = depth_image > 0;\n    \n    // check if there is any depth near the estimate\n    if(cv::sum(valid_pixels(cv::Rect((int)tx - 8, (int)ty - 8, 16, 16))/255)[0] > 0)\n    {\n        double Z = cv::mean(depth_image(cv::Rect((int)tx - 8, (int)ty - 8, 16, 16)), valid_pixels(cv::Rect((int)tx - 8, (int)ty - 8, 16, 16)))[0]; // Z offset from the surface of the face\n        \n        // Only operate within region of interest of the depth image\n        cv::Mat dRoi = depth_image(roi);\n        \n        cv::Mat mRoi = mask(roi);\n        \n        // Filter all pixels further than 20cm away from the current pose depth estimate\n        cv::inRange(dRoi, Z - 200, Z + 200, mRoi);\n        \n        // Convert to be either 0 or 1\n        mask = mask / 255;\n        \n        cv::Mat_<float> maskF;\n        mask.convertTo(maskF, CV_32F);\n        \n        //Filter the depth image\n        out_depth_image = depth_image.mul(maskF);\n    }\n    else\n    {\n        std::cout << \"No depth signal found in foreground, tracking failed\" << std::endl;\n        return false;\n    }\n    return true;\n}\n\n// Getting a 3D shape model from the current detected landmarks (in camera space)\ncv::Mat_<double> CLNF::GetShape(double fx, double fy, double cx, double cy) const\n{\n    int n = this->detected_landmarks.rows/2;\n    \n    cv::Mat_<double> shape3d(n*3, 1);\n    \n    this->pdm.CalcShape3D(shape3d, this->params_local);\n    \n    // Need to rotate the shape to get the actual 3D representation\n    \n    // get the rotation matrix from the euler angles\n    cv::Matx33d R = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(params_global[1], params_global[2], params_global[3]));\n    \n    shape3d = shape3d.reshape(1, 3);\n    \n    shape3d = shape3d.t() * cv::Mat(R).t();\n    \n    // from the weak perspective model can determine the average depth of the object\n    double Zavg = fx / params_global[0];\n    \n    cv::Mat_<double> outShape(n,3,0.0);\n    \n    // this is described in the paper in section 3.4 (equation 10) (of the CLM-Z paper)\n    for(int i = 0; i < n; i++)\n    {\n        double Z = Zavg + shape3d.at<double>(i,2);\n        \n        double X = Z * ((this->detected_landmarks.at<double>(i) - cx)/fx);\n        double Y = Z * ((this->detected_landmarks.at<double>(i + n) - cy)/fy);\n        \n        outShape.at<double>(i,0) = (double)X;\n        outShape.at<double>(i,1) = (double)Y;\n        outShape.at<double>(i,2) = (double)Z;\n        \n    }\n    \n    // The format is 3 rows - n cols\n    return outShape.t();\n    \n}\n\n// A utility bounding box function\ncv::Rect_<double> CLNF::GetBoundingBox() const\n{\n    cv::Mat_<double> xs = this->detected_landmarks(cv::Rect(0,0,1,this->detected_landmarks.rows/2));\n    cv::Mat_<double> ys = this->detected_landmarks(cv::Rect(0,this->detected_landmarks.rows/2, 1, this->detected_landmarks.rows/2));\n    \n    double min_x, max_x;\n    double min_y, max_y;\n    cv::minMaxLoc(xs, &min_x, &max_x);\n    cv::minMaxLoc(ys, &min_y, &max_y);\n    \n    // See if the detections intersect\n    cv::Rect_<double> model_rect(min_x, min_y, max_x - min_x, max_y - min_y);\n    return model_rect;\n}\n\n// Legacy function not used at the moment\nvoid CLNF::NonVectorisedMeanShift(cv::Mat_<double>& out_mean_shifts, const std::vector<cv::Mat_<float> >& patch_expert_responses, const cv::Mat_<double> &dxs, const cv::Mat_<double> &dys, int resp_size, double a, int scale, int view_id)\n{\n    \n    int n = dxs.rows;\n    \n    for(int i = 0; i < n; i++)\n    {\n        \n        if(patch_experts.visibilities[scale][view_id].at<int>(i,0) == 0  || sum(patch_expert_responses[i])[0] == 0)\n        {\n            out_mean_shifts.at<double>(i,0) = 0;\n            out_mean_shifts.at<double>(i+n,0) = 0;\n            continue;\n        }\n        \n        // indices of dx, dy\n        double dx = dxs.at<double>(i);\n        double dy = dys.at<double>(i);\n        \n        int ii,jj;\n        double v,vx,vy,mx=0.0,my=0.0,sum=0.0;\n        \n        // Iterate over the patch responses here\n        cv::MatConstIterator_<float> p = patch_expert_responses[i].begin();\n        \n        for(ii = 0; ii < resp_size; ii++)\n        {\n            vx = (dy-ii)*(dy-ii);\n            for(jj = 0; jj < resp_size; jj++)\n            {\n                vy = (dx-jj)*(dx-jj);\n                \n                // the probability at the current, xi, yi\n                v = *p++;\n                \n                // the KDE evaluation of that point\n                double kd = exp(a*(vx+vy));\n                v *= kd;\n                \n                sum += v;\n                \n                // mean shift in x and y\n                mx += v*jj;\n                my += v*ii;\n                \n            }\n        }\n        \n        // setting the actual mean shift update\n        double msx = (mx/sum - dx);\n        double msy = (my/sum - dy);\n        \n        out_mean_shifts.at<double>(i, 0) = msx;\n        out_mean_shifts.at<double>(i + n, 0) = msy;\n        \n    }\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/LandmarkDetectorParameters.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n// System includes\n#include <iostream>\n#include <sstream>\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectorParameters.h\"\n\n//// Boost includes\n//#include <filesystem.hpp>\n//#include <filesystem/fstream.hpp>\n\n//using namespace std;\n\nusing namespace LandmarkDetector;\n\nFaceModelParameters::FaceModelParameters()\n{\n    // initialise the default values\n    init();\n}\n\nvoid FaceModelParameters::init()\n{\n    \n    // number of iterations that will be performed at each scale\n    num_optimisation_iteration = 5;\n    \n    // using an external face checker based on SVM\n    validate_detections = true;\n    \n    // Using hierarchical refinement by default (can be turned off)\n    refine_hierarchical = false;\n    \n    // Refining parameters by default\n    refine_parameters = false;\n    \n    window_sizes_small = std::vector<int>(4);\n    window_sizes_init = std::vector<int>(4);\n    \n    // For fast tracking\n    window_sizes_small[0] = 0;\n    window_sizes_small[1] = 9;\n    window_sizes_small[2] = 7;\n    window_sizes_small[3] = 5;\n    \n    // Just for initialisation\n    window_sizes_init.at(0) = 11;\n    window_sizes_init.at(1) = 9;\n    window_sizes_init.at(2) = 7;\n    window_sizes_init.at(3) = 5;\n    \n    face_template_scale = 0.5;\n    // Off by default (as it might lead to some slight inaccuracies in slowly moving faces)\n    use_face_template = true;\n    \n    // For first frame use the initialisation\n    window_sizes_current = window_sizes_init;\n    \n    model_location = std::string(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/model/main_clnf_general.txt\");\n    //    std::cout << \"model_location = \" << model_location << std::endl;\n    \n    sigma = 1.5;\n    reg_factor = 25;\n    weight_factor = 0; // By default do not use NU-RLMS for videos as it does not work as well for them\n    \n    validation_boundary = -0.45;\n    \n    limit_pose = true;\n    multi_view = false;\n    \n    reinit_video_every = 4;\n    \n    // Face detection\n    \n    face_detector_location = std::string(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/classifiers/haarcascade_frontalface_alt.xml\");\n    //    std::cout << \"face_detector_location = \" << face_detector_location << std::endl;\n    \n    seetaface_detector_location = std::string(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/seetaFace/model/seeta_fd_frontal_v1.0.bin\");\n    \n    quiet_mode = false;\n    \n    // By default use HOG SVM\n    curr_face_detector = SEETAFACE_DETECTOR; //HOG_SVM_DETECTOR;\n    \n    // The gaze tracking has to be explicitly initialised\n    track_gaze = false;\n    \n    face_x_pos = 0;\n    face_y_pos = 0;\n    face_width = 0;\n    face_height = 0;\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/LandmarkDetectorUtils.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016\n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling\n//       in IEEE International. Conference on Computer Vision (ICCV),  2015\n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson\n//       in Facial Expression Recognition and Analysis Challenge,\n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015\n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency.\n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.\n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"LandmarkDetectorUtils.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n#include <opencv2/calib3d.hpp>\n\n//using namespace std;\n\nnamespace LandmarkDetector\n{\n    \n    //// Useful utility for creating directories for storing the output files\n    //void create_directory_from_file(string output_path)\n    //{\n    \n    //    // Creating the right directory structure\n    \n    //    // First get rid of the file\n    //    auto p = path(path(output_path).parent_path());\n    \n    //    if(!p.empty() && !boost::filesystem::exists(p))\n    //    {\n    //        bool success = boost::filesystem::create_directories(p);\n    //        if(!success)\n    //        {\n    //            cout << \"Failed to create a directory... \" << p.string() << endl;\n    //        }\n    //    }\n    //}\n    \n    //// Useful utility for creating directories for storing the output files\n    //void create_directories(string output_path)\n    //{\n    \n    //    // Creating the right directory structure\n    \n    //    // First get rid of the file\n    //    auto p = path(output_path);\n    \n    //    if(!p.empty() && !boost::filesystem::exists(p))\n    //    {\n    //        bool success = boost::filesystem::create_directories(p);\n    //        if(!success)\n    //        {\n    //            cout << \"Failed to create a directory... \" << p.string() << endl;\n    //        }\n    //    }\n    //}\n    \n    // Extracting the following command line arguments -f, -fd, -op, -of, -ov (and possible ordered repetitions)\n    void get_video_input_output_params(std::vector<std::string> &input_video_files, std::vector<std::string> &depth_dirs,\n                                       std::vector<std::string> &output_files, std::vector<std::string> &output_video_files, bool& world_coordinates_pose, std::vector<std::string> &arguments)\n    {\n        bool* valid = new bool[arguments.size()];\n        \n        for(size_t i = 0; i < arguments.size(); ++i)\n        {\n            valid[i] = true;\n        }\n        \n        // By default use rotation with respect to camera (not world coordinates)\n        world_coordinates_pose = false;\n        \n        std::string root = \"\";\n        // First check if there is a root argument (so that videos and outputs could be defined more easilly)\n        for(size_t i = 0; i < arguments.size(); ++i)\n        {\n            if (arguments[i].compare(\"-root\") == 0)\n            {\n                root = arguments[i + 1];\n                // Do not discard root as it might be used in other later steps\n                i++;\n            }\n        }\n        \n        for(size_t i = 0; i < arguments.size(); ++i)\n        {\n            if (arguments[i].compare(\"-f\") == 0)\n            {\n                input_video_files.push_back(root + arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-fd\") == 0)\n            {\n                depth_dirs.push_back(root + arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            //        else if (arguments[i].compare(\"-of\") == 0)\n            //        {\n            //            output_files.push_back(root + arguments[i + 1]);\n            //            create_directory_from_file(root + arguments[i + 1]);\n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            //        else if (arguments[i].compare(\"-ov\") == 0)\n            //        {\n            //            output_video_files.push_back(root + arguments[i + 1]);\n            //            create_directory_from_file(root + arguments[i + 1]);\n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            else if (arguments[i].compare(\"-world_coord\") == 0)\n            {\n                world_coordinates_pose = true;\n            }\n        }\n        \n        for(int i=arguments.size()-1; i >= 0; --i)\n        {\n            if(!valid[i])\n            {\n                arguments.erase(arguments.begin()+i);\n            }\n        }\n        \n    }\n    \n    void get_camera_params(int &device, float &fx, float &fy, float &cx, float &cy, std::vector<std::string> &arguments)\n    {\n        bool* valid = new bool[arguments.size()];\n        \n        for(size_t i=0; i < arguments.size(); ++i)\n        {\n            valid[i] = true;\n            if (arguments[i].compare(\"-fx\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> fx;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-fy\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> fy;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-cx\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> cx;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-cy\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> cy;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-device\") == 0)\n            {\n                std::stringstream data(arguments[i+1]);\n                data >> device;\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n        }\n        \n        for(int i=arguments.size()-1; i >= 0; --i)\n        {\n            if(!valid[i])\n            {\n                arguments.erase(arguments.begin()+i);\n            }\n        }\n        \n//        delete valid;\n    }\n    \n    void get_image_input_output_params(std::vector<std::string> &input_image_files, std::vector<std::string> &input_depth_files, std::vector<std::string> &output_feature_files, std::vector<std::string> &output_pose_files, std::vector<std::string> &output_image_files,\n                                       std::vector<cv::Rect_<double>> &input_bounding_boxes, std::vector<std::string> &arguments)\n    {\n        bool* valid = new bool[arguments.size()];\n        \n        std::string out_pts_dir, out_pose_dir, out_img_dir;\n        \n        for(size_t i = 0; i < arguments.size(); ++i)\n        {\n            valid[i] = true;\n            if (arguments[i].compare(\"-f\") == 0)\n            {\n                input_image_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-fd\") == 0)\n            {\n                input_depth_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            //        else if (arguments[i].compare(\"-fdir\") == 0)\n            //        {\n            \n            //            // parse the -fdir directory by reading in all of the .png and .jpg files in it\n            //            path image_directory (arguments[i+1]);\n            \n            //            try\n            //            {\n            //                 // does the file exist and is it a directory\n            //                if (exists(image_directory) && is_directory(image_directory))\n            //                {\n            \n            //                    vector<path> file_in_directory;\n            //                    copy(directory_iterator(image_directory), directory_iterator(), back_inserter(file_in_directory));\n            \n            //                    // Sort the images in the directory first\n            //                    sort(file_in_directory.begin(), file_in_directory.end());\n            \n            //                    for (vector<path>::const_iterator file_iterator (file_in_directory.begin()); file_iterator != file_in_directory.end(); ++file_iterator)\n            //                    {\n            //                        // Possible image extension .jpg and .png\n            //                        if(file_iterator->extension().string().compare(\".jpg\") == 0 || file_iterator->extension().string().compare(\".png\") == 0 || file_iterator->extension().string().compare(\".bmp\") == 0)\n            //                        {\n            \n            \n            //                            input_image_files.push_back(file_iterator->string());\n            \n            //                            // If there exists a .txt file corresponding to the image, it is assumed that it contains a bounding box definition for a face\n            //                            // [minx, miny, maxx, maxy]\n            //                            path current_file = *file_iterator;\n            //                            path bbox = current_file.replace_extension(\"txt\");\n            \n            //                            // If there is a bounding box file push it to the list of bounding boxes\n            //                            if(exists(bbox))\n            //                            {\n            \n            //                                std::ifstream in_bbox(bbox.string().c_str(), ios_base::in);\n            \n            //                                double min_x, min_y, max_x, max_y;\n            \n            //                                in_bbox >> min_x >> min_y >> max_x >> max_y;\n            \n            //                                in_bbox.close();\n            \n            //                                input_bounding_boxes.push_back(cv::Rect_<double>(min_x, min_y, max_x - min_x, max_y - min_y));\n            //                            }\n            //                        }\n            //                    }\n            //                }\n            //            }\n            //            catch (const filesystem_error& ex)\n            //            {\n            //                cout << ex.what() << '\\n';\n            //            }\n            \n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            //        else if (arguments[i].compare(\"-ofdir\") == 0)\n            //        {\n            //            out_pts_dir = arguments[i + 1];\n            //            create_directories(out_pts_dir);\n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            //        else if (arguments[i].compare(\"-opdir\") == 0)\n            //        {\n            //            out_pose_dir = arguments[i + 1];\n            //            create_directories(out_pose_dir);\n            //            valid[i] = false;\n            //            valid[i + 1] = false;\n            //            i++;\n            //        }\n            //        else if (arguments[i].compare(\"-oidir\") == 0)\n            //        {\n            //            out_img_dir = arguments[i + 1];\n            //            create_directories(out_img_dir);\n            //            valid[i] = false;\n            //            valid[i+1] = false;\n            //            i++;\n            //        }\n            else if (arguments[i].compare(\"-op\") == 0)\n            {\n                output_pose_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i + 1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-of\") == 0)\n            {\n                output_feature_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n            else if (arguments[i].compare(\"-oi\") == 0)\n            {\n                output_image_files.push_back(arguments[i + 1]);\n                valid[i] = false;\n                valid[i+1] = false;\n                i++;\n            }\n        }\n        \n        // If any output directories are defined populate them based on image names\n        //    if(!out_img_dir.empty())\n        //    {\n        //        for(size_t i=0; i < input_image_files.size(); ++i)\n        //        {\n        //            path image_loc(input_image_files[i]);\n        \n        //            path fname = image_loc.filename();\n        //            fname = fname.replace_extension(\"jpg\");\n        //            output_image_files.push_back(out_img_dir + \"/\" + fname.string());\n        \n        //        }\n        //        if(!input_image_files.empty())\n        //        {\n        //            create_directory_from_file(output_image_files[0]);\n        //        }\n        //    }\n        \n        //    if(!out_pts_dir.empty())\n        //    {\n        //        for(size_t i=0; i < input_image_files.size(); ++i)\n        //        {\n        //            path image_loc(input_image_files[i]);\n        \n        //            path fname = image_loc.filename();\n        //            fname = fname.replace_extension(\"pts\");\n        //            output_feature_files.push_back(out_pts_dir + \"/\" + fname.string());\n        //        }\n        //        create_directory_from_file(output_feature_files[0]);\n        //    }\n        \n        //    if (!out_pose_dir.empty())\n        //    {\n        //        for (size_t i = 0; i < input_image_files.size(); ++i)\n        //        {\n        //            path image_loc(input_image_files[i]);\n        \n        //            path fname = image_loc.filename();\n        //            fname = fname.replace_extension(\"pose\");\n        //            output_pose_files.push_back(out_pose_dir + \"/\" + fname.string());\n        //        }\n        //        create_directory_from_file(output_pose_files[0]);\n        //    }\n        \n        // Make sure the same number of images and bounding boxes is present, if any bounding boxes are defined\n        if(input_bounding_boxes.size() > 0)\n        {\n            assert(input_bounding_boxes.size() == input_image_files.size());\n        }\n        \n        // Clear up the argument list\n        for(int i=arguments.size()-1; i >= 0; --i)\n        {\n            if(!valid[i])\n            {\n                arguments.erase(arguments.begin()+i);\n            }\n        }\n        \n    }\n    \n    //===========================================================================\n    // Fast patch expert response computation (linear model across a ROI) using normalised cross-correlation\n    //===========================================================================\n    \n    void crossCorr_m( const cv::Mat_<float>& img, cv::Mat_<double>& img_dft, const cv::Mat_<float>& _templ, std::map<int, cv::Mat_<double> >& _templ_dfts, cv::Mat_<float>& corr)\n    {\n        // Our model will always be under min block size so can ignore this\n        //const double blockScale = 4.5;\n        //const int minBlockSize = 256;\n        \n        int maxDepth = CV_64F;\n        \n        cv::Size dftsize;\n        \n        dftsize.width = cv::getOptimalDFTSize(corr.cols + _templ.cols - 1);\n        dftsize.height = cv::getOptimalDFTSize(corr.rows + _templ.rows - 1);\n        \n        // Compute block size\n        cv::Size blocksize;\n        blocksize.width = dftsize.width - _templ.cols + 1;\n        blocksize.width = MIN( blocksize.width, corr.cols );\n        blocksize.height = dftsize.height - _templ.rows + 1;\n        blocksize.height = MIN( blocksize.height, corr.rows );\n        \n        cv::Mat_<double> dftTempl;\n        \n        // if this has not been precomputed, precompute it, otherwise use it\n        if(_templ_dfts.find(dftsize.width) == _templ_dfts.end())\n        {\n            dftTempl.create(dftsize.height, dftsize.width);\n            \n            cv::Mat_<float> src = _templ;\n            \n            cv::Mat_<double> dst(dftTempl, cv::Rect(0, 0, dftsize.width, dftsize.height));\n            \n            cv::Mat_<double> dst1(dftTempl, cv::Rect(0, 0, _templ.cols, _templ.rows));\n            \n            if( dst1.data != src.data )\n                src.convertTo(dst1, dst1.depth());\n            \n            if( dst.cols > _templ.cols )\n            {\n                cv::Mat_<double> part(dst, cv::Range(0, _templ.rows), cv::Range(_templ.cols, dst.cols));\n                part.setTo(0);\n            }\n            \n            // Perform DFT of the template\n            dft(dst, dst, 0, _templ.rows);\n            \n            _templ_dfts[dftsize.width] = dftTempl;\n            \n        }\n        else\n        {\n            // use the precomputed version\n            dftTempl = _templ_dfts.find(dftsize.width)->second;\n        }\n        \n        cv::Size bsz(std::min(blocksize.width, corr.cols), std::min(blocksize.height, corr.rows));\n        cv::Mat src;\n        \n        cv::Mat cdst(corr, cv::Rect(0, 0, bsz.width, bsz.height));\n        \n        cv::Mat_<double> dftImg;\n        \n        if(img_dft.empty())\n        {\n            dftImg.create(dftsize);\n            dftImg.setTo(0.0);\n            \n            cv::Size dsz(bsz.width + _templ.cols - 1, bsz.height + _templ.rows - 1);\n            \n            int x2 = std::min(img.cols, dsz.width);\n            int y2 = std::min(img.rows, dsz.height);\n            \n            cv::Mat src0(img, cv::Range(0, y2), cv::Range(0, x2));\n            cv::Mat dst(dftImg, cv::Rect(0, 0, dsz.width, dsz.height));\n            cv::Mat dst1(dftImg, cv::Rect(0, 0, x2, y2));\n            \n            src = src0;\n            \n            if( dst1.data != src.data )\n                src.convertTo(dst1, dst1.depth());\n            \n            dft( dftImg, dftImg, 0, dsz.height );\n            img_dft = dftImg.clone();\n        }\n        \n        cv::Mat dftTempl1(dftTempl, cv::Rect(0, 0, dftsize.width, dftsize.height));\n        cv::mulSpectrums(img_dft, dftTempl1, dftImg, 0, true);\n        cv::dft( dftImg, dftImg, cv::DFT_INVERSE + cv::DFT_SCALE, bsz.height );\n        \n        src = dftImg(cv::Rect(0, 0, bsz.width, bsz.height));\n        \n        src.convertTo(cdst, CV_32F);\n        \n    }\n    \n    ////////////////////////////////////////////////////////////////////////////////////////////////////////\n    \n    void matchTemplate_m(  const cv::Mat_<float>& input_img, cv::Mat_<double>& img_dft, cv::Mat& _integral_img, cv::Mat& _integral_img_sq, const cv::Mat_<float>&  templ, std::map<int, cv::Mat_<double> >& templ_dfts, cv::Mat_<float>& result, int method )\n    {\n        \n        int numType = method == CV_TM_CCORR || method == CV_TM_CCORR_NORMED ? 0 : method == CV_TM_CCOEFF || method == CV_TM_CCOEFF_NORMED ? 1 : 2;\n        bool isNormed = method == CV_TM_CCORR_NORMED ||\n        method == CV_TM_SQDIFF_NORMED ||\n        method == CV_TM_CCOEFF_NORMED;\n        \n        // Assume result is defined properly\n        if(result.empty())\n        {\n            cv::Size corrSize(input_img.cols - templ.cols + 1, input_img.rows - templ.rows + 1);\n            result.create(corrSize);\n        }\n        LandmarkDetector::crossCorr_m( input_img, img_dft, templ, templ_dfts, result);\n        \n        if( method == CV_TM_CCORR )\n            return;\n        \n        double invArea = 1./((double)templ.rows * templ.cols);\n        \n        cv::Mat sum, sqsum;\n        cv::Scalar templMean, templSdv;\n        double *q0 = 0, *q1 = 0, *q2 = 0, *q3 = 0;\n        double templNorm = 0, templSum2 = 0;\n        \n        if( method == CV_TM_CCOEFF )\n        {\n            // If it has not been precomputed compute it now\n            if(_integral_img.empty())\n            {\n                integral(input_img, _integral_img, CV_64F);\n            }\n            sum = _integral_img;\n            \n            templMean = cv::mean(templ);\n        }\n        else\n        {\n            // If it has not been precomputed compute it now\n            if(_integral_img.empty())\n            {\n                integral(input_img, _integral_img, _integral_img_sq, CV_64F);\n            }\n            \n            sum = _integral_img;\n            sqsum = _integral_img_sq;\n            \n            meanStdDev( templ, templMean, templSdv );\n            \n            templNorm = templSdv[0]*templSdv[0] + templSdv[1]*templSdv[1] + templSdv[2]*templSdv[2] + templSdv[3]*templSdv[3];\n            \n            if( templNorm < DBL_EPSILON && method == CV_TM_CCOEFF_NORMED )\n            {\n                result.setTo(1.0);\n                return;\n            }\n            \n            templSum2 = templNorm + templMean[0]*templMean[0] + templMean[1]*templMean[1] + templMean[2]*templMean[2] + templMean[3]*templMean[3];\n            \n            if( numType != 1 )\n            {\n                templMean = cv::Scalar::all(0);\n                templNorm = templSum2;\n            }\n            \n            templSum2 /= invArea;\n            templNorm = std::sqrt(templNorm);\n            templNorm /= std::sqrt(invArea); // care of accuracy here\n            \n            q0 = (double*)sqsum.data;\n            q1 = q0 + templ.cols;\n            q2 = (double*)(sqsum.data + templ.rows*sqsum.step);\n            q3 = q2 + templ.cols;\n        }\n        \n        double* p0 = (double*)sum.data;\n        double* p1 = p0 + templ.cols;\n        double* p2 = (double*)(sum.data + templ.rows*sum.step);\n        double* p3 = p2 + templ.cols;\n        \n        int sumstep = sum.data ? (int)(sum.step / sizeof(double)) : 0;\n        int sqstep = sqsum.data ? (int)(sqsum.step / sizeof(double)) : 0;\n        \n        int i, j;\n        \n        for( i = 0; i < result.rows; i++ )\n        {\n            float* rrow = result.ptr<float>(i);\n            int idx = i * sumstep;\n            int idx2 = i * sqstep;\n            \n            for( j = 0; j < result.cols; j++, idx += 1, idx2 += 1 )\n            {\n                double num = rrow[j], t;\n                double wndMean2 = 0, wndSum2 = 0;\n                \n                if( numType == 1 )\n                {\n                    \n                    t = p0[idx] - p1[idx] - p2[idx] + p3[idx];\n                    wndMean2 += t*t;\n                    num -= t*templMean[0];\n                    \n                    wndMean2 *= invArea;\n                }\n                \n                if( isNormed || numType == 2 )\n                {\n                    \n                    t = q0[idx2] - q1[idx2] - q2[idx2] + q3[idx2];\n                    wndSum2 += t;\n                    \n                    if( numType == 2 )\n                    {\n                        num = wndSum2 - 2*num + templSum2;\n                        num = MAX(num, 0.);\n                    }\n                }\n                \n                if( isNormed )\n                {\n                    t = std::sqrt(MAX(wndSum2 - wndMean2,0))*templNorm;\n                    if( fabs(num) < t )\n                        num /= t;\n                    else if( fabs(num) < t*1.125 )\n                        num = num > 0 ? 1 : -1;\n                    else\n                        num = method != CV_TM_SQDIFF_NORMED ? 0 : 1;\n                }\n                \n                rrow[j] = (float)num;\n            }\n        }\n    }\n    \n    \n    //===========================================================================\n    // Point set and landmark manipulation functions\n    //===========================================================================\n    // Using Kabsch's algorithm for aligning shapes\n    //This assumes that align_from and align_to are already mean normalised\n    cv::Matx22d AlignShapesKabsch2D(const cv::Mat_<double>& align_from, const cv::Mat_<double>& align_to )\n    {\n        \n        cv::SVD svd(align_from.t() * align_to);\n        \n        // make sure no reflection is there\n        // corr ensures that we do only rotaitons and not reflections\n        double d = cv::determinant(svd.vt.t() * svd.u.t());\n        \n        cv::Matx22d corr = cv::Matx22d::eye();\n        if(d > 0)\n        {\n            corr(1,1) = 1;\n        }\n        else\n        {\n            corr(1,1) = -1;\n        }\n        \n        cv::Matx22d R;\n        cv::Mat(svd.vt.t()*cv::Mat(corr)*svd.u.t()).copyTo(R);\n        \n        return R;\n    }\n    \n    //=============================================================================\n    // Basically Kabsch's algorithm but also allows the collection of points to be different in scale from each other\n    cv::Matx22d AlignShapesWithScale(cv::Mat_<double>& src, cv::Mat_<double> dst)\n    {\n        int n = src.rows;\n        \n        // First we mean normalise both src and dst\n        double mean_src_x = cv::mean(src.col(0))[0];\n        double mean_src_y = cv::mean(src.col(1))[0];\n        \n        double mean_dst_x = cv::mean(dst.col(0))[0];\n        double mean_dst_y = cv::mean(dst.col(1))[0];\n        \n        cv::Mat_<double> src_mean_normed = src.clone();\n        src_mean_normed.col(0) = src_mean_normed.col(0) - mean_src_x;\n        src_mean_normed.col(1) = src_mean_normed.col(1) - mean_src_y;\n        \n        cv::Mat_<double> dst_mean_normed = dst.clone();\n        dst_mean_normed.col(0) = dst_mean_normed.col(0) - mean_dst_x;\n        dst_mean_normed.col(1) = dst_mean_normed.col(1) - mean_dst_y;\n        \n        // Find the scaling factor of each\n        cv::Mat src_sq;\n        cv::pow(src_mean_normed, 2, src_sq);\n        \n        cv::Mat dst_sq;\n        cv::pow(dst_mean_normed, 2, dst_sq);\n        \n        double s_src = sqrt(cv::sum(src_sq)[0]/n);\n        double s_dst = sqrt(cv::sum(dst_sq)[0]/n);\n        \n        src_mean_normed = src_mean_normed / s_src;\n        dst_mean_normed = dst_mean_normed / s_dst;\n        \n        double s = s_dst / s_src;\n        \n        // Get the rotation\n        cv::Matx22d R = AlignShapesKabsch2D(src_mean_normed, dst_mean_normed);\n        \n        cv::Matx22d\tA;\n        cv::Mat(s * R).copyTo(A);\n        \n        cv::Mat_<double> aligned = (cv::Mat(cv::Mat(A) * src.t())).t();\n        cv::Mat_<double> offset = dst - aligned;\n        \n        double t_x =  cv::mean(offset.col(0))[0];\n        double t_y =  cv::mean(offset.col(1))[0];\n        \n        return A;\n        \n    }\n    \n    \n    //===========================================================================\n    // Visualisation functions\n    //===========================================================================\n    void Project(cv::Mat_<double>& dest, const cv::Mat_<double>& mesh, double fx, double fy, double cx, double cy)\n    {\n        dest = cv::Mat_<double>(mesh.rows,2, 0.0);\n        \n        int num_points = mesh.rows;\n        \n        double X, Y, Z;\n        \n        \n        cv::Mat_<double>::const_iterator mData = mesh.begin();\n        cv::Mat_<double>::iterator projected = dest.begin();\n        \n        for(int i = 0;i < num_points; i++)\n        {\n            // Get the points\n            X = *(mData++);\n            Y = *(mData++);\n            Z = *(mData++);\n            \n            double x;\n            double y;\n            \n            // if depth is 0 the projection is different\n            if(Z != 0)\n            {\n                x = ((X * fx / Z) + cx);\n                y = ((Y * fy / Z) + cy);\n            }\n            else\n            {\n                x = X;\n                y = Y;\n            }\n            \n            // Project and store in dest matrix\n            (*projected++) = x;\n            (*projected++) = y;\n        }\n        \n    }\n    \n    void DrawBox(cv::Mat image, cv::Vec6d pose, cv::Scalar color, int thickness, float fx, float fy, float cx, float cy)\n    {\n        double boxVerts[] = {-1, 1, -1,\n            1, 1, -1,\n            1, 1, 1,\n            -1, 1, 1,\n            1, -1, 1,\n            1, -1, -1,\n            -1, -1, -1,\n            -1, -1, 1};\n        \n        std::vector<std::pair<int,int>> edges;\n        edges.push_back(std::pair<int,int>(0,1));\n        edges.push_back(std::pair<int,int>(1,2));\n        edges.push_back(std::pair<int,int>(2,3));\n        edges.push_back(std::pair<int,int>(0,3));\n        edges.push_back(std::pair<int,int>(2,4));\n        edges.push_back(std::pair<int,int>(1,5));\n        edges.push_back(std::pair<int,int>(0,6));\n        edges.push_back(std::pair<int,int>(3,7));\n        edges.push_back(std::pair<int,int>(6,5));\n        edges.push_back(std::pair<int,int>(5,4));\n        edges.push_back(std::pair<int,int>(4,7));\n        edges.push_back(std::pair<int,int>(7,6));\n        \n        // The size of the head is roughly 200mm x 200mm x 200mm\n        cv::Mat_<double> box = cv::Mat(8, 3, CV_64F, boxVerts).clone() * 100;\n        \n        cv::Matx33d rot = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(pose[3], pose[4], pose[5]));\n        cv::Mat_<double> rotBox;\n        \n        // Rotate the box\n        rotBox = cv::Mat(rot) * box.t();\n        rotBox = rotBox.t();\n        \n        // Move the bounding box to head position\n        rotBox.col(0) = rotBox.col(0) + pose[0];\n        rotBox.col(1) = rotBox.col(1) + pose[1];\n        rotBox.col(2) = rotBox.col(2) + pose[2];\n        \n        // draw the lines\n        cv::Mat_<double> rotBoxProj;\n        Project(rotBoxProj, rotBox, fx, fy, cx, cy);\n        \n        cv::Rect image_rect(0,0,image.cols, image.rows);\n        \n        for (size_t i = 0; i < edges.size(); ++i)\n        {\n            cv::Mat_<double> begin;\n            cv::Mat_<double> end;\n            \n            rotBoxProj.row(edges[i].first).copyTo(begin);\n            rotBoxProj.row(edges[i].second).copyTo(end);\n            \n            cv::Point p1((int)begin.at<double>(0), (int)begin.at<double>(1));\n            cv::Point p2((int)end.at<double>(0), (int)end.at<double>(1));\n            \n            // Only draw the line if one of the points is inside the image\n            if(p1.inside(image_rect) || p2.inside(image_rect))\n            {\n                cv::line(image, p1, p2, color, thickness);\n            }\n            \n        }\n        \n    }\n    \n    std::vector<std::pair<cv::Point, cv::Point> > CalculateBox(cv::Vec6d pose, float fx, float fy, float cx, float cy)\n    {\n        double boxVerts[] = {-1, 1, -1,\n            1, 1, -1,\n            1, 1, 1,\n            -1, 1, 1,\n            1, -1, 1,\n            1, -1, -1,\n            -1, -1, -1,\n            -1, -1, 1};\n        \n        std::vector<std::pair<int,int>> edges;\n        edges.push_back(std::pair<int,int>(0,1));\n        edges.push_back(std::pair<int,int>(1,2));\n        edges.push_back(std::pair<int,int>(2,3));\n        edges.push_back(std::pair<int,int>(0,3));\n        edges.push_back(std::pair<int,int>(2,4));\n        edges.push_back(std::pair<int,int>(1,5));\n        edges.push_back(std::pair<int,int>(0,6));\n        edges.push_back(std::pair<int,int>(3,7));\n        edges.push_back(std::pair<int,int>(6,5));\n        edges.push_back(std::pair<int,int>(5,4));\n        edges.push_back(std::pair<int,int>(4,7));\n        edges.push_back(std::pair<int,int>(7,6));\n        \n        // The size of the head is roughly 200mm x 200mm x 200mm\n        cv::Mat_<double> box = cv::Mat(8, 3, CV_64F, boxVerts).clone() * 100;\n        \n        cv::Matx33d rot = LandmarkDetector::Euler2RotationMatrix(cv::Vec3d(pose[3], pose[4], pose[5]));\n        cv::Mat_<double> rotBox;\n        \n        // Rotate the box\n        rotBox = cv::Mat(rot) * box.t();\n        rotBox = rotBox.t();\n        \n        // Move the bounding box to head position\n        rotBox.col(0) = rotBox.col(0) + pose[0];\n        rotBox.col(1) = rotBox.col(1) + pose[1];\n        rotBox.col(2) = rotBox.col(2) + pose[2];\n        \n        // draw the lines\n        cv::Mat_<double> rotBoxProj;\n        Project(rotBoxProj, rotBox, fx, fy, cx, cy);\n        \n        std::vector<std::pair<cv::Point, cv::Point>> lines;\n        \n        for (size_t i = 0; i < edges.size(); ++i)\n        {\n            cv::Mat_<double> begin;\n            cv::Mat_<double> end;\n            \n            rotBoxProj.row(edges[i].first).copyTo(begin);\n            rotBoxProj.row(edges[i].second).copyTo(end);\n            \n            cv::Point p1((int)begin.at<double>(0), (int)begin.at<double>(1));\n            cv::Point p2((int)end.at<double>(0), (int)end.at<double>(1));\n            \n            lines.push_back(std::pair<cv::Point, cv::Point>(p1,p2));\n            \n        }\n        \n        return lines;\n    }\n    \n    void DrawBox(std::vector<std::pair<cv::Point, cv::Point>> lines, cv::Mat image, cv::Scalar color, int thickness)\n    {\n        cv::Rect image_rect(0,0,image.cols, image.rows);\n        \n        for (size_t i = 0; i < lines.size(); ++i)\n        {\n            cv::Point p1 = lines.at(i).first;\n            cv::Point p2 = lines.at(i).second;\n            // Only draw the line if one of the points is inside the image\n            if(p1.inside(image_rect) || p2.inside(image_rect))\n            {\n                cv::line(image, p1, p2, color, thickness);\n            }\n            \n        }\n        \n    }\n    \n    // Computing landmarks (to be drawn later possibly)\n    std::vector<cv::Point2d> CalculateLandmarks(const cv::Mat_<double>& shape2D, cv::Mat_<int>& visibilities)\n    {\n        int n = shape2D.rows/2;\n        std::vector<cv::Point2d> landmarks;\n        \n        for( int i = 0; i < n; ++i)\n        {\n            if(visibilities.at<int>(i))\n            {\n                cv::Point2d featurePoint(shape2D.at<double>(i), shape2D.at<double>(i +n));\n                \n                landmarks.push_back(featurePoint);\n            }\n        }\n        \n        return landmarks;\n    }\n    \n    // Computing landmarks (to be drawn later possibly)\n    std::vector<cv::Point2d> CalculateLandmarks(cv::Mat img, const cv::Mat_<double>& shape2D)\n    {\n        \n        int n;\n        std::vector<cv::Point2d> landmarks;\n        \n        if(shape2D.cols == 2)\n        {\n            n = shape2D.rows;\n        }\n        else if(shape2D.cols == 1)\n        {\n            n = shape2D.rows/2;\n        }\n        \n        for( int i = 0; i < n; ++i)\n        {\n            cv::Point2d featurePoint;\n            if(shape2D.cols == 1)\n            {\n                featurePoint = cv::Point2d(shape2D.at<double>(i), shape2D.at<double>(i +n));\n            }\n            else\n            {\n                featurePoint = cv::Point2d(shape2D.at<double>(i, 0), shape2D.at<double>(i, 1));\n            }\n            \n            landmarks.push_back(featurePoint);\n        }\n        \n        return landmarks;\n    }\n    \n    // Computing landmarks (to be drawn later possibly)\n    std::vector<cv::Point2d> CalculateLandmarks(CLNF& clnf_model)\n    {\n        \n        int idx = clnf_model.patch_experts.GetViewIdx(clnf_model.params_global, 0);\n        \n        // Because we only draw visible points, need to find which points patch experts consider visible at a certain orientation\n        return CalculateLandmarks(clnf_model.detected_landmarks, clnf_model.patch_experts.visibilities[0][idx]);\n        \n    }\n    \n    // Drawing landmarks on a face image\n    void Draw(cv::Mat img, const cv::Mat_<double>& shape2D, const cv::Mat_<int>& visibilities)\n    {\n        int n = shape2D.rows/2;\n        \n        // Drawing feature points\n        if(n >= 66)\n        {\n            for( int i = 0; i < n; ++i)\n            {\n                if(visibilities.at<int>(i))\n                {\n                    cv::Point featurePoint((int)shape2D.at<double>(i), (int)shape2D.at<double>(i +n));\n                    \n                    // A rough heuristic for drawn point size\n                    int thickness = (int)std::ceil(3.0* ((double)img.cols) / 640.0);\n                    int thickness_2 = (int)std::ceil(1.0* ((double)img.cols) / 640.0);\n                    \n                    cv::circle(img, featurePoint, 1, cv::Scalar(0,255,0), thickness);\n                    cv::circle(img, featurePoint, 1, cv::Scalar(255,0,0), thickness_2);\n                }\n            }\n        }\n        else if(n == 28) // drawing eyes\n        {\n            for( int i = 0; i < n; ++i)\n            {\n                cv::Point featurePoint((int)shape2D.at<double>(i), (int)shape2D.at<double>(i +n));\n                \n                // A rough heuristic for drawn point size\n                int thickness = 1.0;\n                int thickness_2 = 1.0;\n                \n                int next_point = i + 1;\n                if(i == 7)\n                    next_point = 0;\n                if(i == 19)\n                    next_point = 8;\n                if(i == 27)\n                    next_point = 20;\n                \n                cv::Point nextFeaturePoint((int)shape2D.at<double>(next_point), (int)shape2D.at<double>(next_point+n));\n                if( i < 8 || i > 19)\n                    cv::line(img, featurePoint, nextFeaturePoint, cv::Scalar(255, 0, 0), thickness_2);\n                else\n                    cv::line(img, featurePoint, nextFeaturePoint, cv::Scalar(0, 0, 255), thickness_2);\n                \n                //cv::circle(img, featurePoint, 1, Scalar(0,255,0), thickness);\n                //cv::circle(img, featurePoint, 1, Scalar(0,0,255), thickness_2);\n                \n                \n            }\n        }\n        else if(n == 6)\n        {\n            for( int i = 0; i < n; ++i)\n            {\n                cv::Point featurePoint((int)shape2D.at<double>(i), (int)shape2D.at<double>(i +n));\n                \n                // A rough heuristic for drawn point size\n                int thickness = 1.0;\n                int thickness_2 = 1.0;\n                \n                //cv::circle(img, featurePoint, 1, Scalar(0,255,0), thickness);\n                //cv::circle(img, featurePoint, 1, Scalar(0,0,255), thickness_2);\n                \n                int next_point = i + 1;\n                if(i == 5)\n                    next_point = 0;\n                \n                cv::Point nextFeaturePoint((int)shape2D.at<double>(next_point), (int)shape2D.at<double>(next_point+n));\n                cv::line(img, featurePoint, nextFeaturePoint, cv::Scalar(255, 0, 0), thickness_2);\n            }\n        }\n    }\n    \n    // Drawing landmarks on a face image\n    void Draw(cv::Mat img, const cv::Mat_<double>& shape2D)\n    {\n        \n        int n;\n        \n        if(shape2D.cols == 2)\n        {\n            n = shape2D.rows;\n        }\n        else if(shape2D.cols == 1)\n        {\n            n = shape2D.rows/2;\n        }\n        \n        for( int i = 0; i < n; ++i)\n        {\n            cv::Point featurePoint;\n            if(shape2D.cols == 1)\n            {\n                featurePoint = cv::Point((int)shape2D.at<double>(i), (int)shape2D.at<double>(i +n));\n            }\n            else\n            {\n                featurePoint = cv::Point((int)shape2D.at<double>(i, 0), (int)shape2D.at<double>(i, 1));\n            }\n            // A rough heuristic for drawn point size\n            int thickness = (int)std::ceil(5.0* ((double)img.cols) / 640.0);\n            int thickness_2 = (int)std::ceil(1.5* ((double)img.cols) / 640.0);\n            \n            cv::circle(img, featurePoint, 1, cv::Scalar(0,0,255), thickness);\n            cv::circle(img, featurePoint, 1, cv::Scalar(255,0,0), thickness_2);\n            \n        }\n        \n    }\n    \n    // Drawing detected landmarks on a face image\n    void Draw(cv::Mat img, const CLNF& clnf_model)\n    {\n        \n        int idx = clnf_model.patch_experts.GetViewIdx(clnf_model.params_global, 0);\n        \n        // Because we only draw visible points, need to find which points patch experts consider visible at a certain orientation\n        Draw(img, clnf_model.detected_landmarks, clnf_model.patch_experts.visibilities[0][idx]);\n        \n        // If the model has hierarchical updates draw those too\n        for(size_t i = 0; i < clnf_model.hierarchical_models.size(); ++i)\n        {\n            if(clnf_model.hierarchical_models[i].pdm.NumberOfPoints() != clnf_model.hierarchical_mapping[i].size())\n            {\n                Draw(img, clnf_model.hierarchical_models[i]);\n            }\n        }\n    }\n    \n    void DrawLandmarks(cv::Mat img, std::vector<cv::Point> landmarks)\n    {\n        for(cv::Point p : landmarks)\n        {\n            // A rough heuristic for drawn point size\n            int thickness = (int)std::ceil(5.0* ((double)img.cols) / 640.0);\n            int thickness_2 = (int)std::ceil(1.5* ((double)img.cols) / 640.0);\n            \n            cv::circle(img, p, 1, cv::Scalar(0,0,255), thickness);\n            cv::circle(img, p, 1, cv::Scalar(255,0,0), thickness_2);\n        }\n        \n    }\n    \n    //===========================================================================\n    // Angle representation conversion helpers\n    //===========================================================================\n    \n    // Using the XYZ convention R = Rx * Ry * Rz, left-handed positive sign\n    cv::Matx33d Euler2RotationMatrix(const cv::Vec3d& eulerAngles)\n    {\n        cv::Matx33d rotation_matrix;\n        \n        double s1 = sin(eulerAngles[0]);\n        double s2 = sin(eulerAngles[1]);\n        double s3 = sin(eulerAngles[2]);\n        \n        double c1 = cos(eulerAngles[0]);\n        double c2 = cos(eulerAngles[1]);\n        double c3 = cos(eulerAngles[2]);\n        \n        rotation_matrix(0,0) = c2 * c3;\n        rotation_matrix(0,1) = -c2 *s3;\n        rotation_matrix(0,2) = s2;\n        rotation_matrix(1,0) = c1 * s3 + c3 * s1 * s2;\n        rotation_matrix(1,1) = c1 * c3 - s1 * s2 * s3;\n        rotation_matrix(1,2) = -c2 * s1;\n        rotation_matrix(2,0) = s1 * s3 - c1 * c3 * s2;\n        rotation_matrix(2,1) = c3 * s1 + c1 * s2 * s3;\n        rotation_matrix(2,2) = c1 * c2;\n        \n        return rotation_matrix;\n    }\n    \n    // Using the XYZ convention R = Rx * Ry * Rz, left-handed positive sign\n    cv::Vec3d RotationMatrix2Euler(const cv::Matx33d& rotation_matrix)\n    {\n        double q0 = sqrt( 1 + rotation_matrix(0,0) + rotation_matrix(1,1) + rotation_matrix(2,2) ) / 2.0;\n        double q1 = (rotation_matrix(2,1) - rotation_matrix(1,2)) / (4.0*q0) ;\n        double q2 = (rotation_matrix(0,2) - rotation_matrix(2,0)) / (4.0*q0) ;\n        double q3 = (rotation_matrix(1,0) - rotation_matrix(0,1)) / (4.0*q0) ;\n        \n        double t1 = 2.0 * (q0*q2 + q1*q3);\n        \n        double yaw  = asin(2.0 * (q0*q2 + q1*q3));\n        double pitch= atan2(2.0 * (q0*q1-q2*q3), q0*q0-q1*q1-q2*q2+q3*q3);\n        double roll = atan2(2.0 * (q0*q3-q1*q2), q0*q0+q1*q1-q2*q2-q3*q3);\n        \n        return cv::Vec3d(pitch, yaw, roll);\n    }\n    \n    cv::Vec3d Euler2AxisAngle(const cv::Vec3d& euler)\n    {\n        cv::Matx33d rotMatrix = LandmarkDetector::Euler2RotationMatrix(euler);\n        cv::Vec3d axis_angle;\n        cv::Rodrigues(rotMatrix, axis_angle);\n        return axis_angle;\n    }\n    \n    cv::Vec3d AxisAngle2Euler(const cv::Vec3d& axis_angle)\n    {\n        cv::Matx33d rotation_matrix;\n        cv::Rodrigues(axis_angle, rotation_matrix);\n        return RotationMatrix2Euler(rotation_matrix);\n    }\n    \n    cv::Matx33d AxisAngle2RotationMatrix(const cv::Vec3d& axis_angle)\n    {\n        cv::Matx33d rotation_matrix;\n        cv::Rodrigues(axis_angle, rotation_matrix);\n        return rotation_matrix;\n    }\n    \n    cv::Vec3d RotationMatrix2AxisAngle(const cv::Matx33d& rotation_matrix)\n    {\n        cv::Vec3d axis_angle;\n        cv::Rodrigues(rotation_matrix, axis_angle);\n        return axis_angle;\n    }\n    \n    //===========================================================================\n    \n    //============================================================================\n    // Face detection helpers\n    //============================================================================\n    \n    \n    \n    bool DetectFaces(std::vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity)\n    {\n        cv::CascadeClassifier classifier(\"./classifiers/haarcascade_frontalface_alt.xml\");\n        if(classifier.empty())\n        {\n            std::cout << \"Couldn't load the Haar cascade classifier\" << std::endl;\n            return false;\n        }\n        else\n        {\n            return DetectFaces(o_regions, intensity, classifier);\n        }\n        \n    }\n    \n    \n    bool DetectFaces(std::vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, cv::CascadeClassifier& classifier)\n    {\n        \n        std::vector<cv::Rect> face_detections;\n        classifier.detectMultiScale(intensity, face_detections, 1.2, 2, 0, cv::Size(50, 50));\n        // Convert from int bounding box do a double one with corrections\n        o_regions.resize(face_detections.size());\n        \n        for( size_t face = 0; face < o_regions.size(); ++face)\n        {\n            // OpenCV is overgenerous with face size and y location is off\n            // CLNF detector expects the bounding box to encompass from eyebrow to chin in y, and from cheeck outline to cheeck outline in x, so we need to compensate\n            \n            // The scalings were learned using the Face Detections on LFPW, Helen, AFW and iBUG datasets, using ground truth and detections from openCV\n            \n            // Correct for scale\n            o_regions[face].width = face_detections[face].width * 0.8924;\n            o_regions[face].height = face_detections[face].height * 0.8676;\n            \n            // Move the face slightly to the right (as the width was made smaller)\n            o_regions[face].x = face_detections[face].x + 0.0578 * face_detections[face].width;\n            // Shift face down as OpenCV Haar Cascade detects the forehead as well, and we're not interested\n            o_regions[face].y = face_detections[face].y + face_detections[face].height * 0.2166;\n            \n            \n        }\n        return o_regions.size() > 0;\n    }\n    \n    \n    //    bool seetaDetectFace(std::vector< cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity){\n    //        seeta::FaceDetection detector(\"/Users/liuyan/Code/FaceLivenessDetection/FaceLivenessDetection/seetaFace/model/seeta_fd_frontal_v1.0.bin\");\n    //        return seetaDetectFace(o_regions, intensity, detector);\n    //    }\n    //employing seetaFace to do detection\n    bool seetaDetectFace(std::vector< cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, seeta::FaceDetection*detector){\n        \n        detector->SetMinFaceSize(40);\n        detector->SetScoreThresh(2.f);\n        detector->SetImagePyramidScaleFactor(0.8f);\n        detector->SetWindowStep(4, 4);\n        \n        cv::Mat img_gray;\n        if(intensity.channels() == 3){\n            cv::cvtColor(intensity, img_gray, cv::COLOR_BGR2GRAY);\n        }else{\n            img_gray = intensity;\n        }\n        \n        seeta::ImageData img_data;\n        img_data.data = img_gray.data;\n        img_data.width = img_gray.cols;\n        img_data.height = img_gray.rows;\n        img_data.num_channels = 1;\n        \n        std::vector<seeta::FaceInfo> face_detections = detector->Detect(img_data);\n        \n        int32_t num_face = static_cast<int32_t>(face_detections.size());\n        \n        o_regions.resize(num_face);\n        \n        for(size_t face = 0; face<num_face; face++){\n            // Correct for scale\n            o_regions[face].width = face_detections[face].bbox.width * 0.8924;\n            o_regions[face].height = face_detections[face].bbox.height * 0.8676;\n            \n            // Move the face slightly to the right (as the width was made smaller)\n            o_regions[face].x = face_detections[face].bbox.x + 0.0578 * face_detections[face].bbox.width;\n            // Shift face down as OpenCV Haar Cascade detects the forehead as well, and we're not interested\n            o_regions[face].y = face_detections[face].bbox.y + face_detections[face].bbox.height * 0.2166;\n        }\n        \n        return o_regions.size()>0;\n    }\n    \n    \n    bool DetectSingleFace(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity_image, cv::CascadeClassifier& classifier, cv::Point preference)\n    {\n        \n        // The tracker can return multiple faces\n        std::vector<cv::Rect_<double> > face_detections;\n        \n        bool detect_success = LandmarkDetector::DetectFaces(face_detections, intensity_image, classifier);\n        //bool detect_success = LandmarkDetector::seetaDetectFace(face_detections, intensity_image);\n        if(detect_success)\n        {\n            \n            bool use_preferred = (preference.x != -1) && (preference.y != -1);\n            \n            if(face_detections.size() > 1)\n            {\n                // keep the closest one if preference point not set\n                double best = -1;\n                int bestIndex = -1;\n                for( size_t i = 0; i < face_detections.size(); ++i)\n                {\n                    double dist;\n                    bool better;\n                    \n                    if(use_preferred)\n                    {\n                        dist = sqrt((preference.x) * (face_detections[i].width/2 + face_detections[i].x) +\n                                    (preference.y) * (face_detections[i].height/2 + face_detections[i].y));\n                        better = dist < best;\n                    }\n                    else\n                    {\n                        dist = face_detections[i].width;\n                        better = face_detections[i].width > best;\n                    }\n                    \n                    // Pick a closest face to preffered point or the biggest face\n                    if(i == 0 || better)\n                    {\n                        bestIndex = i;\n                        best = dist;\n                    }\n                }\n                \n                o_region = face_detections[bestIndex];\n                \n                \n            }\n            else\n            {\n                o_region = face_detections[0];\n            }\n            \n        }\n        else\n        {\n            // if not detected\n            o_region = cv::Rect_<double>(0,0,0,0);\n        }\n        return detect_success;\n    }\n    \n    \n    \n    bool DetectSingleFaceSeetaFace(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity_image, seeta::FaceDetection *detector, cv::Point preference)\n    {\n        \n        // The tracker can return multiple faces\n        std::vector<cv::Rect_<double> > face_detections;\n        \n        //    bool detect_success = LandmarkDetector::DetectFaces(face_detections, intensity_image, classifier);\n        bool detect_success = LandmarkDetector::seetaDetectFace(face_detections, intensity_image,detector);\n        if(detect_success)\n        {\n            \n            bool use_preferred = (preference.x != -1) && (preference.y != -1);\n            \n            if(face_detections.size() > 1)\n            {\n                // keep the closest one if preference point not set\n                double best = -1;\n                int bestIndex = -1;\n                for( size_t i = 0; i < face_detections.size(); ++i)\n                {\n                    double dist;\n                    bool better;\n                    \n                    if(use_preferred)\n                    {\n                        dist = sqrt((preference.x) * (face_detections[i].width/2 + face_detections[i].x) +\n                                    (preference.y) * (face_detections[i].height/2 + face_detections[i].y));\n                        better = dist < best;\n                    }\n                    else\n                    {\n                        dist = face_detections[i].width;\n                        better = face_detections[i].width > best;\n                    }\n                    \n                    // Pick a closest face to preffered point or the biggest face\n                    if(i == 0 || better)\n                    {\n                        bestIndex = i;\n                        best = dist;\n                    }\n                }\n                \n                o_region = face_detections[bestIndex];\n                \n            }\n            else\n            {\n                o_region = face_detections[0];\n            }\n            \n        }\n        else\n        {\n            // if not detected\n            o_region = cv::Rect_<double>(0,0,0,0);\n        }\n        return detect_success;\n    }\n    \n    \n    //bool DetectFacesHOG(vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, std::vector<double>& confidences)\n    //{\n    //    dlib::frontal_face_detector detector = dlib::get_frontal_face_detector();\n    \n    //    return DetectFacesHOG(o_regions, intensity, detector, confidences);\n    \n    //}\n    \n    //bool DetectFacesHOG(vector<cv::Rect_<double> >& o_regions, const cv::Mat_<uchar>& intensity, dlib::frontal_face_detector& detector, std::vector<double>& o_confidences)\n    //{\n    \n    //    cv::Mat_<uchar> upsampled_intensity;\n    \n    //    double scaling = 1.3;\n    \n    //    cv::resize(intensity, upsampled_intensity, cv::Size((int)(intensity.cols * scaling), (int)(intensity.rows * scaling)));\n    \n    //    dlib::cv_image<uchar> cv_grayscale(upsampled_intensity);\n    \n    //    std::vector<dlib::full_detection> face_detections;\n    //    detector(cv_grayscale, face_detections, -0.2);\n    \n    //    // Convert from int bounding box do a double one with corrections\n    //    o_regions.resize(face_detections.size());\n    //    o_confidences.resize(face_detections.size());\n    \n    //    for( size_t face = 0; face < o_regions.size(); ++face)\n    //    {\n    //        // CLNF expects the bounding box to encompass from eyebrow to chin in y, and from cheeck outline to cheeck outline in x, so we need to compensate\n    \n    //        // The scalings were learned using the Face Detections on LFPW and Helen using ground truth and detections from the HOG detector\n    \n    //        // Move the face slightly to the right (as the width was made smaller)\n    //        o_regions[face].x = (face_detections[face].rect.get_rect().tl_corner().x() + 0.0389 * face_detections[face].rect.get_rect().width())/scaling;\n    //        // Shift face down as OpenCV Haar Cascade detects the forehead as well, and we're not interested\n    //        o_regions[face].y = (face_detections[face].rect.get_rect().tl_corner().y() + 0.1278 * face_detections[face].rect.get_rect().height())/scaling;\n    \n    //        // Correct for scale\n    //        o_regions[face].width = (face_detections[face].rect.get_rect().width() * 0.9611)/scaling;\n    //        o_regions[face].height = (face_detections[face].rect.get_rect().height() * 0.9388)/scaling;\n    \n    //        o_confidences[face] = face_detections[face].detection_confidence;\n    \n    \n    //    }\n    //    return o_regions.size() > 0;\n    //}\n    \n    //bool DetectSingleFaceHOG(cv::Rect_<double>& o_region, const cv::Mat_<uchar>& intensity_img, dlib::frontal_face_detector& detector, double& confidence, cv::Point preference)\n    //{\n    //    // The tracker can return multiple faces\n    //    vector<cv::Rect_<double> > face_detections;\n    //    vector<double> confidences;\n    \n    //    bool detect_success = LandmarkDetector::DetectFacesHOG(face_detections, intensity_img, detector, confidences);\n    \n    //    if(detect_success)\n    //    {\n    \n    //        bool use_preferred = (preference.x != -1) && (preference.y != -1);\n    \n    //        // keep the most confident one or the one closest to preference point if set\n    //        double best_so_far;\n    //        if(use_preferred)\n    //        {\n    //            best_so_far = sqrt((preference.x - (face_detections[0].width/2 + face_detections[0].x)) * (preference.x - (face_detections[0].width/2 + face_detections[0].x)) +\n    //                               (preference.y - (face_detections[0].height/2 + face_detections[0].y)) * (preference.y - (face_detections[0].height/2 + face_detections[0].y)));\n    //        }\n    //        else\n    //        {\n    //            best_so_far = confidences[0];\n    //        }\n    //        int bestIndex = 0;\n    \n    //        for( size_t i = 1; i < face_detections.size(); ++i)\n    //        {\n    \n    //            double dist;\n    //            bool better;\n    \n    //            if(use_preferred)\n    //            {\n    //                dist = sqrt((preference.x - (face_detections[0].width/2 + face_detections[0].x)) * (preference.x - (face_detections[0].width/2 + face_detections[0].x)) +\n    //                               (preference.y - (face_detections[0].height/2 + face_detections[0].y)) * (preference.y - (face_detections[0].height/2 + face_detections[0].y)));\n    //                better = dist < best_so_far;\n    //            }\n    //            else\n    //            {\n    //                dist = confidences[i];\n    //                better = dist > best_so_far;\n    //            }\n    \n    //            // Pick a closest face\n    //            if(better)\n    //            {\n    //                best_so_far = dist;\n    //                bestIndex = i;\n    //            }\n    //        }\n    \n    //        o_region = face_detections[bestIndex];\n    //        confidence = confidences[bestIndex];\n    //    }\n    //    else\n    //    {\n    //        // if not detected\n    //        o_region = cv::Rect_<double>(0,0,0,0);\n    //        // A completely unreliable detection (shouldn't really matter what is returned here)\n    //        confidence = -2;\n    //    }\n    //    return detect_success;\n    //}\n    \n    //============================================================================\n    // Matrix reading functionality\n    //============================================================================\n    \n    // Reading in a matrix from a stream\n    void ReadMat(std::ifstream& stream, cv::Mat &output_mat)\n    {\n        // Read in the number of rows, columns and the data type\n        int row,col,type;\n        \n        stream >> row >> col >> type;\n        \n        output_mat = cv::Mat(row, col, type);\n        \n        switch(output_mat.type())\n        {\n            case CV_64FC1:\n            {\n                cv::MatIterator_<double> begin_it = output_mat.begin<double>();\n                cv::MatIterator_<double> end_it = output_mat.end<double>();\n                \n                while(begin_it != end_it)\n                {\n                    stream >> *begin_it++;\n                }\n            }\n                break;\n            case CV_32FC1:\n            {\n                cv::MatIterator_<float> begin_it = output_mat.begin<float>();\n                cv::MatIterator_<float> end_it = output_mat.end<float>();\n                \n                while(begin_it != end_it)\n                {\n                    stream >> *begin_it++;\n                }\n            }\n                break;\n            case CV_32SC1:\n            {\n                cv::MatIterator_<int> begin_it = output_mat.begin<int>();\n                cv::MatIterator_<int> end_it = output_mat.end<int>();\n                while(begin_it != end_it)\n                {\n                    stream >> *begin_it++;\n                }\n            }\n                break;\n            case CV_8UC1:\n            {\n                cv::MatIterator_<uchar> begin_it = output_mat.begin<uchar>();\n                cv::MatIterator_<uchar> end_it = output_mat.end<uchar>();\n                while(begin_it != end_it)\n                {\n                    stream >> *begin_it++;\n                }\n            }\n                break;\n            default:\n                printf(\"ERROR(%s,%d) : Unsupported Matrix type %d!\\n\", __FILE__,__LINE__,output_mat.type()); abort();\n                \n                \n        }\n    }\n    \n    void ReadMatBin(std::ifstream& stream, cv::Mat &output_mat)\n    {\n        // Read in the number of rows, columns and the data type\n        int row, col, type;\n        \n        stream.read ((char*)&row, 4);\n        stream.read ((char*)&col, 4);\n        stream.read ((char*)&type, 4);\n        \n        output_mat = cv::Mat(row, col, type);\n        int size = output_mat.rows * output_mat.cols * output_mat.elemSize();\n        stream.read((char *)output_mat.data, size);\n        \n    }\n    \n    // Skipping lines that start with # (together with empty lines)\n    void SkipComments(std::ifstream& stream)\n    {\n        while(stream.peek() == '#' || stream.peek() == '\\n'|| stream.peek() == ' ' || stream.peek() == '\\r')\n        {\n            std::string skipped;\n            std::getline(stream, skipped);\n        }\n    }\n    \n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/PAW.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"PAW.h\"\n\n// OpenCV includes\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n// Copy constructor\nPAW::PAW(const PAW& other) : destination_landmarks(other.destination_landmarks.clone()), source_landmarks(other.source_landmarks.clone()), triangulation(other.triangulation.clone()),\ntriangle_id(other.triangle_id.clone()), pixel_mask(other.pixel_mask.clone()), coefficients(other.coefficients.clone()), alpha(other.alpha.clone()), beta(other.beta.clone()), map_x(other.map_x.clone()), map_y(other.map_y.clone())\n{\n\tthis->number_of_pixels = other.number_of_pixels;\n\tthis->min_x = other.min_x;\n\tthis->min_y = other.min_y;\n}\n\n// A constructor from destination shape and triangulation\nPAW::PAW(const cv::Mat_<double>& destination_shape, const cv::Mat_<int>& triangulation)\n{\n\t// Initialise some variables directly\n\tthis->destination_landmarks = destination_shape;\n\tthis->triangulation = triangulation;\n\n\tint num_points = destination_shape.rows/2;\n\n\tint num_tris = triangulation.rows;\n\t\n\t// Pre-compute the rest\n    alpha = cv::Mat_<double>(num_tris, 3);\n    beta = cv::Mat_<double>(num_tris, 3);\n    \n\tcv::Mat_<double> xs = destination_shape(cv::Rect(0, 0, 1, num_points));\n\tcv::Mat_<double> ys = destination_shape(cv::Rect(0, num_points, 1, num_points));\n    \n\t// Create a vector representation of the control points\n    std::vector<std::vector<double>> destination_points;\n\n\tfor (int tri = 0; tri < num_tris; ++tri)\n\t{\t\n\t\tint j = triangulation.at<int>(tri, 0);\n\t\tint k = triangulation.at<int>(tri, 1);\n\t\tint l = triangulation.at<int>(tri, 2);\n\n        double c1 = ys.at<double>(l) - ys.at<double>(j);\n        double c2 = xs.at<double>(l) - xs.at<double>(j);\n        double c4 = ys.at<double>(k) - ys.at<double>(j);\n        double c3 = xs.at<double>(k) - xs.at<double>(j);\n        \t\t\n        double c5 = c3*c1 - c2*c4;\n\n        alpha.at<double>(tri, 0) = (ys.at<double>(j) * c2 - xs.at<double>(j) * c1) / c5;\n        alpha.at<double>(tri, 1) = c1/c5;\n        alpha.at<double>(tri, 2) = -c2/c5;\n\n        beta.at<double>(tri, 0) = (xs.at<double>(j) * c4 - ys.at<double>(j) * c3)/c5;\n        beta.at<double>(tri, 1) = -c4/c5;\n        beta.at<double>(tri, 2) = c3/c5;\n\n\t\t// Add points corresponding to triangles as optimisation\n        std::vector<double> triangle_points(10);\n\n\t\ttriangle_points[0] = xs.at<double>(j);\n\t\ttriangle_points[1] = ys.at<double>(j);\n\t\ttriangle_points[2] = xs.at<double>(k);\n\t\ttriangle_points[3] = ys.at<double>(k);\n\t\ttriangle_points[4] = xs.at<double>(l);\n\t\ttriangle_points[5] = ys.at<double>(l);\n\t\t\n\t\tcv::Vec3d xs_three(triangle_points[0], triangle_points[2], triangle_points[4]);\n\t\tcv::Vec3d ys_three(triangle_points[1], triangle_points[3], triangle_points[5]);\n\n\t\tdouble min_x, max_x, min_y, max_y;\n\t\tcv::minMaxIdx(xs_three, &min_x, &max_x);\n\t\tcv::minMaxIdx(ys_three, &min_y, &max_y);\n\n\t\ttriangle_points[6] = max_x;\n\t\ttriangle_points[7] = max_y;\n\n\t\ttriangle_points[8] = min_x;\n\t\ttriangle_points[9] = min_y;\n\n\t\tdestination_points.push_back(triangle_points);\n\n\t}\n\n\tdouble max_x;\n\tdouble max_y;\n\n\tminMaxLoc(xs, &min_x, &max_x);\n\tminMaxLoc(ys, &min_y, &max_y);\n\n\tint w = (int)(max_x - min_x + 1.5);\n    int h = (int)(max_y - min_y + 1.5);\n    \n\t// Round the min_x and min_y for simplicity?\n\n    pixel_mask = cv::Mat_<uchar>(h, w, (uchar)0);\n    triangle_id = cv::Mat_<int>(h, w, -1);\n        \n\tint curr_tri = -1;\n\n\tfor(int y = 0; y < pixel_mask.rows; y++)\n\t{\n\t\tfor(int x = 0; x < pixel_mask.cols; x++)\n\t\t{\n\t\t\tcurr_tri = findTriangle(cv::Point_<double>(x + min_x, y + min_y), destination_points, curr_tri);\n\t\t\t// If there is a triangle at this location\n            if(curr_tri != -1)\n\t\t\t{\n\t\t\t\ttriangle_id.at<int>(y, x) = curr_tri;\n                pixel_mask.at<uchar>(y, x) = 1;\n\t\t\t}\t\n\t\t}\n\t}\n    \t\n\t// Preallocate maps and coefficients\n\tcoefficients.create(num_tris, 6);\n\tmap_x.create(pixel_mask.rows,pixel_mask.cols);\n\tmap_y.create(pixel_mask.rows,pixel_mask.cols);\n\n\n}\n\n// Manually define min and max values\nPAW::PAW(const cv::Mat_<double>& destination_shape, const cv::Mat_<int>& triangulation, double in_min_x, double in_min_y, double in_max_x, double in_max_y)\n{\n\t// Initialise some variables directly\n\tthis->destination_landmarks = destination_shape;\n\tthis->triangulation = triangulation;\n\n\tint num_points = destination_shape.rows/2;\n\n\tint num_tris = triangulation.rows;\n\t\n\t// Pre-compute the rest\n    alpha = cv::Mat_<double>(num_tris, 3);\n    beta = cv::Mat_<double>(num_tris, 3);\n    \n\tcv::Mat_<double> xs = destination_shape(cv::Rect(0, 0, 1, num_points));\n\tcv::Mat_<double> ys = destination_shape(cv::Rect(0, num_points, 1, num_points));\n\n\t// Create a vector representation of the control points\n    std::vector<std::vector<double>> destination_points;\n    \n\tfor (int tri = 0; tri < num_tris; ++tri)\n\t{\t\n\t\tint j = triangulation.at<int>(tri, 0);\n\t\tint k = triangulation.at<int>(tri, 1);\n\t\tint l = triangulation.at<int>(tri, 2);\n\n        double c1 = ys.at<double>(l) - ys.at<double>(j);\n        double c2 = xs.at<double>(l) - xs.at<double>(j);\n        double c4 = ys.at<double>(k) - ys.at<double>(j);\n        double c3 = xs.at<double>(k) - xs.at<double>(j);\n        \t\t\n        double c5 = c3*c1 - c2*c4;\n\n        alpha.at<double>(tri, 0) = (ys.at<double>(j) * c2 - xs.at<double>(j) * c1) / c5;\n        alpha.at<double>(tri, 1) = c1/c5;\n        alpha.at<double>(tri, 2) = -c2/c5;\n\n        beta.at<double>(tri, 0) = (xs.at<double>(j) * c4 - ys.at<double>(j) * c3)/c5;\n        beta.at<double>(tri, 1) = -c4/c5;\n        beta.at<double>(tri, 2) = c3/c5;\n\n\t\t// Add points corresponding to triangles as optimisation\n        std::vector<double> triangle_points(10);\n\n\t\ttriangle_points[0] = xs.at<double>(j);\n\t\ttriangle_points[1] = ys.at<double>(j);\n\t\ttriangle_points[2] = xs.at<double>(k);\n\t\ttriangle_points[3] = ys.at<double>(k);\n\t\ttriangle_points[4] = xs.at<double>(l);\n\t\ttriangle_points[5] = ys.at<double>(l);\n\t\t\n\t\tcv::Vec3d xs_three(triangle_points[0], triangle_points[2], triangle_points[4]);\n\t\tcv::Vec3d ys_three(triangle_points[1], triangle_points[3], triangle_points[5]);\n\n\t\tdouble min_x, max_x, min_y, max_y;\n\t\tcv::minMaxIdx(xs_three, &min_x, &max_x);\n\t\tcv::minMaxIdx(ys_three, &min_y, &max_y);\n\n\t\ttriangle_points[6] = max_x;\n\t\ttriangle_points[7] = max_y;\n\n\t\ttriangle_points[8] = min_x;\n\t\ttriangle_points[9] = min_y;\n\n\t\tdestination_points.push_back(triangle_points);\n\t\t\n\t}\n\n\tdouble max_x;\n\tdouble max_y;\n\n\tmin_x = in_min_x;\n\tmin_y = in_min_y;\n\n\tmax_x = in_max_x;\n\tmax_y = in_max_y;\n\n\tint w = (int)(max_x - min_x + 1.5);\n    int h = (int)(max_y - min_y + 1.5);\n    \n\t// Round the min_x and min_y for simplicity?\n\n    pixel_mask = cv::Mat_<uchar>(h, w, (uchar)0);\n    triangle_id = cv::Mat_<int>(h, w, -1);\n        \n\tint curr_tri = -1;\n\n\tfor(int y = 0; y < pixel_mask.rows; y++)\n\t{\n\t\tfor(int x = 0; x < pixel_mask.cols; x++)\n\t\t{\n\t\t\tcurr_tri = findTriangle(cv::Point_<double>(x + min_x, y + min_y), destination_points, curr_tri);\n\t\t\t// If there is a triangle at this location\n            if(curr_tri != -1)\n\t\t\t{\n\t\t\t\ttriangle_id.at<int>(y, x) = curr_tri;\n                pixel_mask.at<uchar>(y, x) = 1;\n\t\t\t}\t\n\t\t}\n\t}    \t\n\n\t// Preallocate maps and coefficients\n\tcoefficients.create(num_tris, 6);\n\tmap_x.create(pixel_mask.rows,pixel_mask.cols);\n\tmap_y.create(pixel_mask.rows,pixel_mask.cols);\n\n}\n\n//===========================================================================\nvoid PAW::Read(std::ifstream& stream)\n{\n\n\tstream.read ((char*)&number_of_pixels, 4);\n\tstream.read ((char*)&min_x, 8);\n\tstream.read ((char*)&min_y, 8);\n\n\tLandmarkDetector::ReadMatBin(stream, destination_landmarks);\n\n\tLandmarkDetector::ReadMatBin(stream, triangulation);\n\n\tLandmarkDetector::ReadMatBin(stream, triangle_id);\n\t\n\tcv::Mat tmpMask;\t\n\tLandmarkDetector::ReadMatBin(stream, tmpMask);\t\n\ttmpMask.convertTo(pixel_mask, CV_8U);\t\n\t\n\tLandmarkDetector::ReadMatBin(stream, alpha);\n\n\tLandmarkDetector::ReadMatBin(stream, beta);\n\n\tmap_x.create(pixel_mask.rows,pixel_mask.cols);\n\tmap_y.create(pixel_mask.rows,pixel_mask.cols);\n\n\tcoefficients.create(this->NumberOfTriangles(),6);\n\t\n\tsource_landmarks = destination_landmarks;\n}\n\n//=============================================================================\n// cropping from the source image to the destination image using the shape in s, used to determine if shape fitting converged successfully\nvoid PAW::Warp(const cv::Mat& image_to_warp, cv::Mat& destination_image, const cv::Mat_<double>& landmarks_to_warp)\n{\n  \n\t// set the current shape\n\tsource_landmarks = landmarks_to_warp.clone();\n\n\t// prepare the mapping coefficients using the current shape\n\tthis->CalcCoeff();\n\n\t// Do the actual mapping computation (where to warp from)\n\tthis->WarpRegion(map_x, map_y);\n  \t\n\t// Do the actual warp (with bi-linear interpolation)\n\tremap(image_to_warp, destination_image, map_x, map_y, CV_INTER_LINEAR);\n  \n}\n\n\n//=============================================================================\n// Calculate the warping coefficients\nvoid PAW::CalcCoeff()\n{\n\tint p = this->NumberOfLandmarks();\n\n\tfor(int l = 0; l < this->NumberOfTriangles(); l++)\n\t{\n\t  \n\t\tint i = triangulation.at<int>(l,0);\n\t\tint j = triangulation.at<int>(l,1);\n\t\tint k = triangulation.at<int>(l,2);\n\n\t\tdouble c1 = source_landmarks.at<double>(i    , 0);\n\t\tdouble c2 = source_landmarks.at<double>(j    , 0) - c1;\n\t\tdouble c3 = source_landmarks.at<double>(k    , 0) - c1;\n\t\tdouble c4 = source_landmarks.at<double>(i + p, 0);\n\t\tdouble c5 = source_landmarks.at<double>(j + p, 0) - c4;\n\t\tdouble c6 = source_landmarks.at<double>(k + p, 0) - c4;\n\n\t\t// Get a pointer to the coefficient we will be precomputing\n\t\tdouble *coeff = coefficients.ptr<double>(l);\n\n\t\t// Extract the relevant alphas and betas\n\t\tdouble *c_alpha = alpha.ptr<double>(l);\n\t\tdouble *c_beta  = beta.ptr<double>(l);\n\n\t\tcoeff[0] = c1 + c2 * c_alpha[0] + c3 * c_beta[0];\n\t\tcoeff[1] =      c2 * c_alpha[1] + c3 * c_beta[1];\n\t\tcoeff[2] =      c2 * c_alpha[2] + c3 * c_beta[2];\n\t\tcoeff[3] = c4 + c5 * c_alpha[0] + c6 * c_beta[0];\n\t\tcoeff[4] =      c5 * c_alpha[1] + c6 * c_beta[1];\n\t\tcoeff[5] =      c5 * c_alpha[2] + c6 * c_beta[2];\n\t}\n}\n\n//======================================================================\n// Compute the mapping coefficients\nvoid PAW::WarpRegion(cv::Mat_<float>& mapx, cv::Mat_<float>& mapy)\n{\n\t\n\tcv::MatIterator_<float> xp = mapx.begin();\n\tcv::MatIterator_<float> yp = mapy.begin();\n\tcv::MatIterator_<uchar> mp = pixel_mask.begin();\n\tcv::MatIterator_<int>   tp = triangle_id.begin();\n\t\n\t// The coefficients corresponding to the current triangle\n\tdouble * a;\n\n\t// Current triangle being processed\t\n\tint k=-1;\n\n\tfor(int y = 0; y < pixel_mask.rows; y++)\n\t{\n\t\tdouble yi = double(y) + min_y;\n\t\n\t\tfor(int x = 0; x < pixel_mask.cols; x++)\n\t\t{\n\t\t\tdouble xi = double(x) + min_x;\n\n\t\t\tif(*mp == 0)\n\t\t\t{\n\t\t\t\t*xp = -1;\n\t\t\t\t*yp = -1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// triangle corresponding to the current pixel\n\t\t\t\tint j = *tp;\n\n\t\t\t\t// If it is different from the previous triangle point to new coefficients\n\t\t\t\t// This will always be the case in the first iteration, hence a will not point to nothing\n\t\t\t\tif(j != k)\n\t\t\t\t{\n\t\t\t\t\t// Update the coefficient pointer if a new triangle is being processed\n\t\t\t\t\ta = coefficients.ptr<double>(j);\t\t\t\n\t\t\t\t\tk = j;\n\t\t\t\t}  \t\n\n\t\t\t\t//ap is now the pointer to the coefficients\n\t\t\t\tdouble *ap = a;\t\t\t\t\t\t\t\n\n\t\t\t\t//look at the first coefficient (and increment). first coefficient is an x offset\n\t\t\t\tdouble xo = *ap++;\t\t\t\t\t\t\n\t\t\t\t//second coefficient is an x scale as a function of x\n\t\t\t\txo += *ap++ * xi;\t\t\t\t\t\t\n\t\t\t\t//third coefficient ap(2) is an x scale as a function of y\n\t\t\t\t*xp = float(xo + *ap++ * yi);\t\t\t\n\n\t\t\t\t//then fourth coefficient ap(3) is a y offset\n\t\t\t\tdouble yo = *ap++;\t\t\t\t\t\t\n\t\t\t\t//fifth coeff adds coeff[4]*x to y\n\t\t\t\tyo += *ap++ * xi;\t\t\t\t\t\t\n\t\t\t\t//final coeff adds coeff[5]*y to y\n\t\t\t\t*yp = float(yo + *ap++ * yi);\t\t\t\n\n\t\t\t}\n\t\t\tmp++; tp++; xp++; yp++;\t\n\t\t}\n\t}\n}\n\n// ============================================================\n// Helper functions to determine which point a triangle lies in\n// ============================================================\n\n// Is the point (x0,y0) on same side as a half-plane defined by (x1,y1), (x2, y2), and (x3, y3)\nbool sameSide(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3)\n{\n    \n    double x = (x3-x2)*(y0-y2) - (x0-x2)*(y3-y2);\n    double y = (x3-x2)*(y1-y2) - (x1-x2)*(y3-y2);\n\n    return x*y >= 0;\n\n}\n\n// if point (x0, y0) is on same side for all three half-planes it is in a triangle\nbool pointInTriangle(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3)\n{\n\tbool same_1 = sameSide(x0, y0, x1, y1, x2, y2, x3, y3);\n\tbool same_2 = sameSide(x0, y0, x2, y2, x1, y1, x3, y3);\n\tbool same_3 = sameSide(x0, y0, x3, y3, x1, y1, x2, y2);\n\n\treturn same_1 && same_2 && same_3;\n\n}\n\n// Find if a given point lies in the triangles\nint PAW::findTriangle(const cv::Point_<double>& point, const std::vector<std::vector<double>>& control_points, int guess) const\n{\n    \n\tint num_tris = control_points.size();\n\t\n\tint tri = -1;\n    \n\tdouble x0 = point.x;\n\tdouble y0 = point.y;\n\n\t// Allow a guess for speed (so as not to go through all triangles)\n\tif(guess != -1)\n\t{\n\t\t\n\t\tbool in_triangle = pointInTriangle(x0, y0, control_points[guess][0], control_points[guess][1], control_points[guess][2], control_points[guess][3], control_points[guess][4], control_points[guess][5]);\n\t\tif(in_triangle)\n\t\t{\n\t\t\treturn guess;\n\t\t}\n\t}\n\n\n    for (int i = 0; i < num_tris; ++i)\n\t{\n\n\t\tdouble max_x = control_points[i][6];\n\t\tdouble max_y = control_points[i][7];\n\n\t\tdouble min_x = control_points[i][8];\n\t\tdouble min_y = control_points[i][9];\n\n\t\t// Skip the check if the point is outside the bounding box of the triangle\n\n\t\tif( max_x < x0 || min_x > x0 || max_y < y0 || min_y > y0)\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tbool in_triangle = pointInTriangle(x0, y0, \n\t\t\tcontrol_points[i][0], control_points[i][1],\n\t\t\tcontrol_points[i][2], control_points[i][3],\n\t\t\tcontrol_points[i][4], control_points[i][5]);\n\n        if(in_triangle)\n\t\t{\n           tri = i;\n           break;\n\t\t}        \n\t}\n\treturn tri;\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/PDM.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"PDM.h\"\n\n// OpenCV include\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n// Math includes\n#define _USE_MATH_DEFINES\n#include <cmath>\n\n#ifndef M_PI\n\t#define M_PI 3.14159265358979323846\n#endif\n\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n//===========================================================================\n\n//=============================================================================\n// Orthonormalising the 3x3 rotation matrix\nvoid Orthonormalise(cv::Matx33d &R)\n{\n\n\tcv::SVD svd(R,cv::SVD::MODIFY_A);\n  \n\t// get the orthogonal matrix from the initial rotation matrix\n\tcv::Mat_<double> X = svd.u*svd.vt;\n  \n\t// This makes sure that the handedness is preserved and no reflection happened\n\t// by making sure the determinant is 1 and not -1\n\tcv::Mat_<double> W = cv::Mat_<double>::eye(3,3);\n\tdouble d = determinant(X);\n\tW(2,2) = determinant(X);\n\tcv::Mat Rt = svd.u*W*svd.vt;\n\n\tRt.copyTo(R);\n\n}\n\n// A copy constructor\nPDM::PDM(const PDM& other) {\n\n\t// Make sure the matrices are allocated properly\n\tthis->mean_shape = other.mean_shape.clone();\n\tthis->princ_comp = other.princ_comp.clone();\n\tthis->eigen_values = other.eigen_values.clone();\n}\n\n//===========================================================================\n// Clamping the parameter values to be within 3 standard deviations\nvoid PDM::Clamp(cv::Mat_<float>& local_params, cv::Vec6d& params_global, const FaceModelParameters& parameters)\n{\n\tdouble n_sigmas = 3;\n\tcv::MatConstIterator_<double> e_it  = this->eigen_values.begin();\n\tcv::MatIterator_<float> p_it =  local_params.begin();\n\n\tdouble v;\n\n\t// go over all parameters\n\tfor(; p_it != local_params.end(); ++p_it, ++e_it)\n\t{\n\t\t// Work out the maximum value\n\t\tv = n_sigmas*sqrt(*e_it);\n\n\t\t// if the values is too extreme clamp it\n\t\tif(fabs(*p_it) > v)\n\t\t{\n\t\t\t// Dealing with positive and negative cases\n\t\t\tif(*p_it > 0.0)\n\t\t\t{\n\t\t\t\t*p_it=v;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*p_it=-v;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// do not let the pose get out of hand\n\tif(parameters.limit_pose)\n\t{\n\t\tif(params_global[1] > M_PI / 2)\n\t\t\tparams_global[1] = M_PI/2;\n\t\tif(params_global[1] < -M_PI / 2)\n\t\t\tparams_global[1] = -M_PI/2;\n\t\tif(params_global[2] > M_PI / 2)\n\t\t\tparams_global[2] = M_PI/2;\n\t\tif(params_global[2] < -M_PI / 2)\n\t\t\tparams_global[2] = -M_PI/2;\n\t\tif(params_global[3] > M_PI / 2)\n\t\t\tparams_global[3] = M_PI/2;\n\t\tif(params_global[3] < -M_PI / 2)\n\t\t\tparams_global[3] = -M_PI/2;\n\t}\n\t\n\n}\n//===========================================================================\n// Compute the 3D representation of shape (in object space) using the local parameters\nvoid PDM::CalcShape3D(cv::Mat_<double>& out_shape, const cv::Mat_<double>& p_local) const\n{\n\tout_shape.create(mean_shape.rows, mean_shape.cols);\n\tout_shape = mean_shape + princ_comp*p_local;\n}\n\n//===========================================================================\n// Get the 2D shape (in image space) from global and local parameters\nvoid PDM::CalcShape2D(cv::Mat_<double>& out_shape, const cv::Mat_<double>& params_local, const cv::Vec6d& params_global) const\n{\n\n\tint n = this->NumberOfPoints();\n\n\tdouble s = params_global[0]; // scaling factor\n\tdouble tx = params_global[4]; // x offset\n\tdouble ty = params_global[5]; // y offset\n\n\t// get the rotation matrix from the euler angles\n\tcv::Vec3d euler(params_global[1], params_global[2], params_global[3]);\n\tcv::Matx33d currRot = Euler2RotationMatrix(euler);\n\t\n\t// get the 3D shape of the object\n\tcv::Mat_<double> Shape_3D = mean_shape + princ_comp * params_local;\n\n\t// create the 2D shape matrix (if it has not been defined yet)\n\tif((out_shape.rows != mean_shape.rows) || (out_shape.cols = 1))\n\t{\n\t\tout_shape.create(2*n,1);\n\t}\n\t// for every vertex\n\tfor(int i = 0; i < n; i++)\n\t{\n\t\t// Transform this using the weak-perspective mapping to 2D from 3D\n\t\tout_shape.at<double>(i  ,0) = s * ( currRot(0,0) * Shape_3D.at<double>(i, 0) + currRot(0,1) * Shape_3D.at<double>(i+n  ,0) + currRot(0,2) * Shape_3D.at<double>(i+n*2,0) ) + tx;\n\t\tout_shape.at<double>(i+n,0) = s * ( currRot(1,0) * Shape_3D.at<double>(i, 0) + currRot(1,1) * Shape_3D.at<double>(i+n  ,0) + currRot(1,2) * Shape_3D.at<double>(i+n*2,0) ) + ty;\n\t}\n}\n\n//===========================================================================\n// provided the bounding box of a face and the local parameters (with optional rotation), generates the global parameters that can generate the face with the provided bounding box\n// This all assumes that the bounding box describes face from left outline to right outline of the face and chin to eyebrows\nvoid PDM::CalcParams(cv::Vec6d& out_params_global, const cv::Rect_<double>& bounding_box, const cv::Mat_<double>& params_local, const cv::Vec3d rotation)\n{\n\n\t// get the shape instance based on local params\n\tcv::Mat_<double> current_shape(mean_shape.size());\n\n\tCalcShape3D(current_shape, params_local);\n\n\t// rotate the shape\n\tcv::Matx33d rotation_matrix = Euler2RotationMatrix(rotation);\n\n\tcv::Mat_<double> reshaped = current_shape.reshape(1, 3);\n\n\tcv::Mat rotated_shape = (cv::Mat(rotation_matrix) * reshaped);\n\n\t// Get the width of expected shape\n\tdouble min_x;\n\tdouble max_x;\n\tcv::minMaxLoc(rotated_shape.row(0), &min_x, &max_x);\t\n\n\tdouble min_y;\n\tdouble max_y;\n\tcv::minMaxLoc(rotated_shape.row(1), &min_y, &max_y);\n\n\tdouble width = abs(min_x - max_x);\n\tdouble height = abs(min_y - max_y);\n\n\tdouble scaling = ((bounding_box.width / width) + (bounding_box.height / height)) / 2;\n\n\t// The estimate of face center also needs some correction\n\tdouble tx = bounding_box.x + bounding_box.width / 2;\n\tdouble ty = bounding_box.y + bounding_box.height / 2;\n\n\t// Correct it so that the bounding box is just around the minimum and maximum point in the initialised face\t\n\ttx = tx - scaling * (min_x + max_x)/2;\n    ty = ty - scaling * (min_y + max_y)/2;\n\n\tout_params_global = cv::Vec6d(scaling, rotation[0], rotation[1], rotation[2], tx, ty);\n}\n\n//===========================================================================\n// provided the model parameters, compute the bounding box of a face\n// The bounding box describes face from left outline to right outline of the face and chin to eyebrows\nvoid PDM::CalcBoundingBox(cv::Rect& out_bounding_box, const cv::Vec6d& params_global, const cv::Mat_<double>& params_local)\n{\n\t\n\t// get the shape instance based on local params\n\tcv::Mat_<double> current_shape;\n\tCalcShape2D(current_shape, params_local, params_global);\n\t\n\t// Get the width of expected shape\n\tdouble min_x;\n\tdouble max_x;\n\tcv::minMaxLoc(current_shape(cv::Rect(0, 0, 1, this->NumberOfPoints())), &min_x, &max_x);\n\n\tdouble min_y;\n\tdouble max_y;\n\tcv::minMaxLoc(current_shape(cv::Rect(0, this->NumberOfPoints(), 1, this->NumberOfPoints())), &min_y, &max_y);\n\n\tdouble width = abs(min_x - max_x);\n\tdouble height = abs(min_y - max_y);\n\n\tout_bounding_box = cv::Rect((int)min_x, (int)min_y, (int)width, (int)height);\n}\n\n//===========================================================================\n// Calculate the PDM's Jacobian over rigid parameters (rotation, translation and scaling), the additional input W represents trust for each of the landmarks and is part of Non-Uniform RLMS \nvoid PDM::ComputeRigidJacobian(const cv::Mat_<float>& p_local, const cv::Vec6d& params_global, cv::Mat_<float> &Jacob, const cv::Mat_<float> W, cv::Mat_<float> &Jacob_t_w)\n{\n  \t\n\t// number of verts\n\tint n = this->NumberOfPoints();\n  \n\tJacob.create(n * 2, 6);\n\n\tfloat X,Y,Z;\n\n\tfloat s = (float)params_global[0];\n  \t\n\tcv::Mat_<double> shape_3D_d;\n\tcv::Mat_<double> p_local_d;\n\tp_local.convertTo(p_local_d, CV_64F);\n\tthis->CalcShape3D(shape_3D_d, p_local_d);\n\t\n\tcv::Mat_<float> shape_3D;\n\tshape_3D_d.convertTo(shape_3D, CV_32F);\n\n\t // Get the rotation matrix\n\tcv::Vec3d euler(params_global[1], params_global[2], params_global[3]);\n\tcv::Matx33d currRot = Euler2RotationMatrix(euler);\n\t\n\tfloat r11 = (float) currRot(0,0);\n\tfloat r12 = (float) currRot(0,1);\n\tfloat r13 = (float) currRot(0,2);\n\tfloat r21 = (float) currRot(1,0);\n\tfloat r22 = (float) currRot(1,1);\n\tfloat r23 = (float) currRot(1,2);\n\tfloat r31 = (float) currRot(2,0);\n\tfloat r32 = (float) currRot(2,1);\n\tfloat r33 = (float) currRot(2,2);\n\n\tcv::MatIterator_<float> Jx = Jacob.begin();\n\tcv::MatIterator_<float> Jy = Jx + n * 6;\n\n\tfor(int i = 0; i < n; i++)\n\t{\n    \n\t\tX = shape_3D.at<float>(i,0);\n\t\tY = shape_3D.at<float>(i+n,0);\n\t\tZ = shape_3D.at<float>(i+n*2,0);    \n\t\t\n\t\t// The rigid jacobian from the axis angle rotation matrix approximation using small angle assumption (R * R')\n\t\t// where R' = [1, -wz, wy\n\t\t//             wz, 1, -wx\n\t\t//             -wy, wx, 1]\n\t\t// And this is derived using the small angle assumption on the axis angle rotation matrix parametrisation\n\n\t\t// scaling term\n\t\t*Jx++ =  (X  * r11 + Y * r12 + Z * r13);\n\t\t*Jy++ =  (X  * r21 + Y * r22 + Z * r23);\n\t\t\n\t\t// rotation terms\n\t\t*Jx++ = (s * (Y * r13 - Z * r12) );\n\t\t*Jy++ = (s * (Y * r23 - Z * r22) );\n\t\t*Jx++ = (-s * (X * r13 - Z * r11));\n\t\t*Jy++ = (-s * (X * r23 - Z * r21));\n\t\t*Jx++ = (s * (X * r12 - Y * r11) );\n\t\t*Jy++ = (s * (X * r22 - Y * r21) );\n\t\t\n\t\t// translation terms\n\t\t*Jx++ = 1.0f;\n\t\t*Jy++ = 0.0f;\n\t\t*Jx++ = 0.0f;\n\t\t*Jy++ = 1.0f;\n\n\t}\n\n\tcv::Mat Jacob_w = cv::Mat::zeros(Jacob.rows, Jacob.cols, Jacob.type());\n\t\n\tJx =  Jacob.begin();\n\tJy =  Jx + n*6;\n\n\tcv::MatIterator_<float> Jx_w =  Jacob_w.begin<float>();\n\tcv::MatIterator_<float> Jy_w =  Jx_w + n*6;\n\n\t// Iterate over all Jacobian values and multiply them by the weight in diagonal of W\n\tfor(int i = 0; i < n; i++)\n\t{\n\t\tfloat w_x = W.at<float>(i, i);\n\t\tfloat w_y = W.at<float>(i+n, i+n);\n\n\t\tfor(int j = 0; j < Jacob.cols; ++j)\n\t\t{\n\t\t\t*Jx_w++ = *Jx++ * w_x;\n\t\t\t*Jy_w++ = *Jy++ * w_y;\n\t\t}\t\t\n\t}\n\n\tJacob_t_w = Jacob_w.t();\n}\n\n//===========================================================================\n// Calculate the PDM's Jacobian over all parameters (rigid and non-rigid), the additional input W represents trust for each of the landmarks and is part of Non-Uniform RLMS\nvoid PDM::ComputeJacobian(const cv::Mat_<float>& params_local, const cv::Vec6d& params_global, cv::Mat_<float> &Jacobian, const cv::Mat_<float> W, cv::Mat_<float> &Jacob_t_w)\n{ \n\t\n\t// number of vertices\n\tint n = this->NumberOfPoints();\n\t\t\n\t// number of non-rigid parameters\n\tint m = this->NumberOfModes();\n\n\tJacobian.create(n * 2, 6 + m);\n\t\n\tfloat X,Y,Z;\n\t\n\tfloat s = (float) params_global[0];\n  \t\n\tcv::Mat_<double> shape_3D_d;\n\tcv::Mat_<double> p_local_d;\n\tparams_local.convertTo(p_local_d, CV_64F);\n\tthis->CalcShape3D(shape_3D_d, p_local_d);\n\t\n\tcv::Mat_<float> shape_3D;\n\tshape_3D_d.convertTo(shape_3D, CV_32F);\n\n\tcv::Vec3d euler(params_global[1], params_global[2], params_global[3]);\n\tcv::Matx33d currRot = Euler2RotationMatrix(euler);\n\t\n\tfloat r11 = (float) currRot(0,0);\n\tfloat r12 = (float) currRot(0,1);\n\tfloat r13 = (float) currRot(0,2);\n\tfloat r21 = (float) currRot(1,0);\n\tfloat r22 = (float) currRot(1,1);\n\tfloat r23 = (float) currRot(1,2);\n\tfloat r31 = (float) currRot(2,0);\n\tfloat r32 = (float) currRot(2,1);\n\tfloat r33 = (float) currRot(2,2);\n\n\tcv::MatIterator_<float> Jx =  Jacobian.begin();\n\tcv::MatIterator_<float> Jy =  Jx + n * (6 + m);\n\tcv::MatConstIterator_<double> Vx =  this->princ_comp.begin();\n\tcv::MatConstIterator_<double> Vy =  Vx + n*m;\n\tcv::MatConstIterator_<double> Vz =  Vy + n*m;\n\n\tfor(int i = 0; i < n; i++)\n\t{\n    \n\t\tX = shape_3D.at<float>(i,0);\n\t\tY = shape_3D.at<float>(i+n,0);\n\t\tZ = shape_3D.at<float>(i+n*2,0);    \n    \n\t\t// The rigid jacobian from the axis angle rotation matrix approximation using small angle assumption (R * R')\n\t\t// where R' = [1, -wz, wy\n\t\t//             wz, 1, -wx\n\t\t//             -wy, wx, 1]\n\t\t// And this is derived using the small angle assumption on the axis angle rotation matrix parametrisation\n\n\t\t// scaling term\n\t\t*Jx++ = (X  * r11 + Y * r12 + Z * r13);\n\t\t*Jy++ = (X  * r21 + Y * r22 + Z * r23);\n\t\t\n\t\t// rotation terms\n\t\t*Jx++ = (s * (Y * r13 - Z * r12) );\n\t\t*Jy++ = (s * (Y * r23 - Z * r22) );\n\t\t*Jx++ = (-s * (X * r13 - Z * r11));\n\t\t*Jy++ = (-s * (X * r23 - Z * r21));\n\t\t*Jx++ = (s * (X * r12 - Y * r11) );\n\t\t*Jy++ = (s * (X * r22 - Y * r21) );\n\t\t\n\t\t// translation terms\n\t\t*Jx++ = 1.0f;\n\t\t*Jy++ = 0.0f;\n\t\t*Jx++ = 0.0f;\n\t\t*Jy++ = 1.0f;\n\n\t\tfor(int j = 0; j < m; j++,++Vx,++Vy,++Vz)\n\t\t{\n\t\t\t// How much the change of the non-rigid parameters (when object is rotated) affect 2D motion\n\t\t\t*Jx++ = (float) ( s*(r11*(*Vx) + r12*(*Vy) + r13*(*Vz)) );\n\t\t\t*Jy++ = (float) ( s*(r21*(*Vx) + r22*(*Vy) + r23*(*Vz)) );\n\t\t}\n\t}\t\n\n\t// Adding the weights here\n\tcv::Mat Jacob_w = Jacobian.clone();\n\t\n\tif(cv::trace(W)[0] != W.rows) \n\t{\n\t\tJx =  Jacobian.begin();\n\t\tJy =  Jx + n*(6+m);\n\n\t\tcv::MatIterator_<float> Jx_w =  Jacob_w.begin<float>();\n\t\tcv::MatIterator_<float> Jy_w =  Jx_w + n*(6+m);\n\n\t\t// Iterate over all Jacobian values and multiply them by the weight in diagonal of W\n\t\tfor(int i = 0; i < n; i++)\n\t\t{\n\t\t\tfloat w_x = W.at<float>(i, i);\n\t\t\tfloat w_y = W.at<float>(i+n, i+n);\n\n\t\t\tfor(int j = 0; j < Jacobian.cols; ++j)\n\t\t\t{\n\t\t\t\t*Jx_w++ = *Jx++ * w_x;\n\t\t\t\t*Jy_w++ = *Jy++ * w_y;\n\t\t\t}\n\t\t}\n\t}\n\tJacob_t_w = Jacob_w.t();\n\n}\n\n//===========================================================================\n// Updating the parameters (more details in my thesis)\nvoid PDM::UpdateModelParameters(const cv::Mat_<float>& delta_p, cv::Mat_<float>& params_local, cv::Vec6d& params_global)\n{\n\n\t// The scaling and translation parameters can be just added\n\tparams_global[0] += (double)delta_p.at<float>(0,0);\n\tparams_global[4] += (double)delta_p.at<float>(4,0);\n\tparams_global[5] += (double)delta_p.at<float>(5,0);\n\n\t// get the original rotation matrix\t\n\tcv::Vec3d eulerGlobal(params_global[1], params_global[2], params_global[3]);\n\tcv::Matx33d R1 = Euler2RotationMatrix(eulerGlobal);\n\n\t// construct R' = [1, -wz, wy\n\t//               wz, 1, -wx\n\t//               -wy, wx, 1]\n\tcv::Matx33d R2 = cv::Matx33d::eye();\n\n\tR2(1,2) = -1.0*(R2(2,1) = (double)delta_p.at<float>(1,0));\n\tR2(2,0) = -1.0*(R2(0,2) = (double)delta_p.at<float>(2,0));\n\tR2(0,1) = -1.0*(R2(1,0) = (double)delta_p.at<float>(3,0));\n\t\n\t// Make sure it's orthonormal\n\tOrthonormalise(R2);\n\n\t// Combine rotations\n\tcv::Matx33d R3 = R1 *R2;\n\n\t// Extract euler angle (through axis angle first to make sure it's legal)\n\tcv::Vec3d axis_angle = RotationMatrix2AxisAngle(R3);\n\tcv::Vec3d euler = AxisAngle2Euler(axis_angle);\n\n\tparams_global[1] = euler[0];\n\tparams_global[2] = euler[1];\n\tparams_global[3] = euler[2];\n\n\t// Local parameter update, just simple addition\n\tif(delta_p.rows > 6)\n\t{\n\t\tparams_local = params_local + delta_p(cv::Rect(0,6,1, this->NumberOfModes()));\n\t}\n\n}\n\nvoid PDM::CalcParams(cv::Vec6d& out_params_global, const cv::Mat_<double>& out_params_local, const cv::Mat_<double>& landmark_locations, const cv::Vec3d rotation)\n{\n\t\t\n\tint m = this->NumberOfModes();\n\tint n = this->NumberOfPoints();\n\n\tcv::Mat_<int> visi_ind_2D(n * 2, 1, 1);\n\tcv::Mat_<int> visi_ind_3D(3 * n , 1, 1);\n\n\tfor(int i = 0; i < n; ++i)\n\t{\n\t\t// If the landmark is invisible indicate this\n\t\tif(landmark_locations.at<double>(i) == 0)\n\t\t{\n\t\t\tvisi_ind_2D.at<int>(i) = 0;\n\t\t\tvisi_ind_2D.at<int>(i+n) = 0;\n\t\t\tvisi_ind_3D.at<int>(i) = 0;\n\t\t\tvisi_ind_3D.at<int>(i+n) = 0;\n\t\t\tvisi_ind_3D.at<int>(i+2*n) = 0;\n\t\t}\n\t}\n\n\t// As this might be subsampled have special versions\n\tcv::Mat_<double> M(0, mean_shape.cols, 0.0);\n\tcv::Mat_<double> V(0, princ_comp.cols, 0.0);\n\n\tfor(int i = 0; i < n * 3; ++i)\n\t{\n\t\tif(visi_ind_3D.at<int>(i) == 1)\n\t\t{\n\t\t\tcv::vconcat(M, this->mean_shape.row(i), M);\n\t\t\tcv::vconcat(V, this->princ_comp.row(i), V);\n\t\t}\n\t}\n\n\tcv::Mat_<double> m_old = this->mean_shape.clone();\n\tcv::Mat_<double> v_old = this->princ_comp.clone();\n//    std::cout << \"m_old = \" << m_old.t() << std::endl;\n//    std::cout << \"v_old = \" << v_old << std::endl;\n\n\tthis->mean_shape = M;\n\tthis->princ_comp = V;\n\n\t// The new number of points\n\tn  = M.rows / 3;\n\n\t// Extract the relevant landmark locations\n\tcv::Mat_<double> landmark_locs_vis(n*2, 1, 0.0);\n\tint k = 0;\n\tfor(int i = 0; i < visi_ind_2D.rows; ++i)\n\t{\n\t\tif(visi_ind_2D.at<int>(i) == 1)\n\t\t{\n\t\t\tlandmark_locs_vis.at<double>(k) = landmark_locations.at<double>(i);\n\t\t\tk++;\n\t\t}\t\t\n\t}\n\n\t// Compute the initial global parameters\n\tdouble min_x;\n\tdouble max_x;\n\tcv::minMaxLoc(landmark_locations(cv::Rect(0, 0, 1, this->NumberOfPoints())), &min_x, &max_x);\n\n\tdouble min_y;\n\tdouble max_y;\n\tcv::minMaxLoc(landmark_locations(cv::Rect(0, this->NumberOfPoints(), 1, this->NumberOfPoints())), &min_y, &max_y);\n\n\tdouble width = std::abs(min_x - max_x);\n    double height = std::abs(min_y - max_y);\n\n\tcv::Rect model_bbox;\n\tCalcBoundingBox(model_bbox, cv::Vec6d(1.0, 0.0, 0.0, 0.0, 0.0, 0.0), cv::Mat_<double>(this->NumberOfModes(), 1, 0.0));\n\n\tcv::Rect bbox((int)min_x, (int)min_y, (int)width, (int)height);\n\n\tdouble scaling = ((width / model_bbox.width) + (height / model_bbox.height)) / 2;\n        \n\tcv::Vec3d rotation_init = rotation;\n\tcv::Matx33d R = Euler2RotationMatrix(rotation_init);\n\tcv::Vec2d translation((min_x + max_x) / 2.0, (min_y + max_y) / 2.0);\n    \n\tcv::Mat_<float> loc_params(this->NumberOfModes(),1, 0.0);\n\tcv::Vec6d glob_params(scaling, rotation_init[0], rotation_init[1], rotation_init[2], translation[0], translation[1]);\n\n\t// get the 3D shape of the object\n\tcv::Mat_<double> loc_params_d;\n\tloc_params.convertTo(loc_params_d, CV_64F);\n\tcv::Mat_<double> shape_3D = M + V * loc_params_d;\n\n\tcv::Mat_<double> curr_shape(2*n, 1);\n\t\n\t// for every vertex\n\tfor(int i = 0; i < n; i++)\n\t{\n\t\t// Transform this using the weak-perspective mapping to 2D from 3D\n\t\tcurr_shape.at<double>(i  ,0) = scaling * ( R(0,0) * shape_3D.at<double>(i, 0) + R(0,1) * shape_3D.at<double>(i+n  ,0) + R(0,2) * shape_3D.at<double>(i+n*2,0) ) + translation[0];\n\t\tcurr_shape.at<double>(i+n,0) = scaling * ( R(1,0) * shape_3D.at<double>(i, 0) + R(1,1) * shape_3D.at<double>(i+n  ,0) + R(1,2) * shape_3D.at<double>(i+n*2,0) ) + translation[1];\n\t}\n\t\t    \n    double currError = cv::norm(curr_shape - landmark_locs_vis);\n\n\tcv::Mat_<float> regularisations = cv::Mat_<double>::zeros(1, 6 + m);\n\n\tdouble reg_factor = 1;\n\n\t// Setting the regularisation to the inverse of eigenvalues\n\tcv::Mat(reg_factor / this->eigen_values).copyTo(regularisations(cv::Rect(6, 0, m, 1)));\n\tcv::Mat_<double> regTerm_d = cv::Mat::diag(regularisations.t());\n\tregTerm_d.convertTo(regularisations, CV_32F);    \n    \n\tcv::Mat_<float> WeightMatrix = cv::Mat_<float>::eye(n*2, n*2);\n\n\tint not_improved_in = 0;\n\n    for (size_t i = 0; i < 1000; ++i)\n\t{\n\t\t// get the 3D shape of the object\n\t\tcv::Mat_<double> loc_params_d;\n\t\tloc_params.convertTo(loc_params_d, CV_64F);\n\t\tshape_3D = M + V * loc_params_d;\n\n\t\tshape_3D = shape_3D.reshape(1, 3);\n\n\t\tcv::Matx23d R_2D(R(0,0), R(0,1), R(0,2), R(1,0), R(1,1), R(1,2));\n\n\t\tcv::Mat_<double> curr_shape_2D = scaling * shape_3D.t() * cv::Mat(R_2D).t();\n        curr_shape_2D.col(0) = curr_shape_2D.col(0) + translation(0);\n\t\tcurr_shape_2D.col(1) = curr_shape_2D.col(1) + translation(1);\n\n\t\tcurr_shape_2D = cv::Mat(curr_shape_2D.t()).reshape(1, n * 2);\n\t\t\n\t\tcv::Mat_<float> error_resid;\n\t\tcv::Mat(landmark_locs_vis - curr_shape_2D).convertTo(error_resid, CV_32F);\n        \n\t\tcv::Mat_<float> J, J_w_t;\n\t\tthis->ComputeJacobian(loc_params, glob_params, J, WeightMatrix, J_w_t);\n        \n\t\t// projection of the meanshifts onto the jacobians (using the weighted Jacobian, see Baltrusaitis 2013)\n\t\tcv::Mat_<float> J_w_t_m = J_w_t * error_resid;\n\n\t\t// Add the regularisation term\n\t\tJ_w_t_m(cv::Rect(0,6,1, m)) = J_w_t_m(cv::Rect(0,6,1, m)) - regularisations(cv::Rect(6,6, m, m)) * loc_params;\n\n\t\tcv::Mat_<float> Hessian = J_w_t * J;\n\n\t\t// Add the Tikhonov regularisation\n\t\tHessian = Hessian + regularisations;\n\n\t\t// Solve for the parameter update (from Baltrusaitis 2013 based on eq (36) Saragih 2011)\n\t\tcv::Mat_<float> param_update;\n\t\tcv::solve(Hessian, J_w_t_m, param_update, CV_CHOLESKY);\n\n\t\t// To not overshoot, have the gradient decent rate a bit smaller\n\t\tparam_update = 0.5 * param_update;\n\n\t\tUpdateModelParameters(param_update, loc_params, glob_params);\t\t\n        \n        scaling = glob_params[0];\n\t\trotation_init[0] = glob_params[1];\n\t\trotation_init[1] = glob_params[2];\n\t\trotation_init[2] = glob_params[3];\n\n\t\ttranslation[0] = glob_params[4];\n\t\ttranslation[1] = glob_params[5];\n        \n\t\tR = Euler2RotationMatrix(rotation_init);\n\n\t\tR_2D(0,0) = R(0,0);R_2D(0,1) = R(0,1); R_2D(0,2) = R(0,2);\n\t\tR_2D(1,0) = R(1,0);R_2D(1,1) = R(1,1); R_2D(1,2) = R(1,2); \n\n\t\tcurr_shape_2D = scaling * shape_3D.t() * cv::Mat(R_2D).t();\n        curr_shape_2D.col(0) = curr_shape_2D.col(0) + translation(0);\n\t\tcurr_shape_2D.col(1) = curr_shape_2D.col(1) + translation(1);\n\n\t\tcurr_shape_2D = cv::Mat(curr_shape_2D.t()).reshape(1, n * 2);\n        \n        double error = cv::norm(curr_shape_2D - landmark_locs_vis);\n        \n        if(0.999 * currError < error)\n\t\t{\n\t\t\tnot_improved_in++;\n\t\t\tif (not_improved_in == 5)\n\t\t\t{\n\t            break;\n\t\t\t}\n\t\t}\n\n\t\tcurrError = error;\n        \n\t}\n\n\tout_params_global = glob_params;\n\tloc_params.convertTo(out_params_local, CV_64F);\n    \t\n\tthis->mean_shape = m_old;\n\tthis->princ_comp = v_old;\n\n\n}\n\nvoid PDM::Read(std::string location)\n{\n  \t\n    std::ifstream pdmLoc(location, std::ios_base::in);\n\n\tLandmarkDetector::SkipComments(pdmLoc);\n\n\t// Reading mean values\n\tLandmarkDetector::ReadMat(pdmLoc,mean_shape);\n\t\n\tLandmarkDetector::SkipComments(pdmLoc);\n\n\t// Reading principal components\n\tLandmarkDetector::ReadMat(pdmLoc,princ_comp);\n\t\n\tLandmarkDetector::SkipComments(pdmLoc);\n\t\n\t// Reading eigenvalues\t\n\tLandmarkDetector::ReadMat(pdmLoc,eigen_values);\n\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/Patch_experts.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"Patch_experts.h\"\n\n// OpenCV includes\n#include <opencv2/core/core_c.h>\n#include <opencv2/imgproc/imgproc_c.h>\n\n// TBB includes\n//#include <tbb/tbb.h>\n\n// Math includes\n#define _USE_MATH_DEFINES\n#include <cmath>\n\n#ifndef M_PI\n\t#define M_PI 3.14159265358979323846\n#endif\n\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n// A copy constructor\nPatch_experts::Patch_experts(const Patch_experts& other) : patch_scaling(other.patch_scaling), centers(other.centers), svr_expert_intensity(other.svr_expert_intensity), svr_expert_depth(other.svr_expert_depth), ccnf_expert_intensity(other.ccnf_expert_intensity)\n{\n\n\t// Make sure the matrices are allocated properly\n\tthis->sigma_components.resize(other.sigma_components.size());\n\tfor (size_t i = 0; i < other.sigma_components.size(); ++i)\n\t{\n\t\tthis->sigma_components[i].resize(other.sigma_components[i].size());\n\n\t\tfor (size_t j = 0; j < other.sigma_components[i].size(); ++j)\n\t\t{\n\t\t\t// Make sure the matrix is copied.\n\t\t\tthis->sigma_components[i][j] = other.sigma_components[i][j].clone();\n\t\t}\n\t}\n\n\t// Make sure the matrices are allocated properly\n\tthis->visibilities.resize(other.visibilities.size());\n\tfor (size_t i = 0; i < other.visibilities.size(); ++i)\n\t{\n\t\tthis->visibilities[i].resize(other.visibilities[i].size());\n\n\t\tfor (size_t j = 0; j < other.visibilities[i].size(); ++j)\n\t\t{\n\t\t\t// Make sure the matrix is copied.\n\t\t\tthis->visibilities[i][j] = other.visibilities[i][j].clone();\n\t\t}\n\t}\n}\n\n// Returns the patch expert responses given a grayscale and an optional depth image.\n// Additionally returns the transform from the image coordinates to the response coordinates (and vice versa).\n// The computation also requires the current landmark locations to compute response around, the PDM corresponding to the desired model, and the parameters describing its instance\n// Also need to provide the size of the area of interest and the desired scale of analysis\nvoid Patch_experts::Response(std::vector<cv::Mat_<float> >& patch_expert_responses, cv::Matx22f& sim_ref_to_img, cv::Matx22d& sim_img_to_ref, const cv::Mat_<uchar>& grayscale_image, const cv::Mat_<float>& depth_image,\n\t\t\t\t\t\t\t const PDM& pdm, const cv::Vec6d& params_global, const cv::Mat_<double>& params_local, int window_size, int scale)\n{\n\n\tint view_id = GetViewIdx(params_global, scale);\t\t\n\n\tint n = pdm.NumberOfPoints();\n\t\t\n\t// Compute the current landmark locations (around which responses will be computed)\n\tcv::Mat_<double> landmark_locations;\n\n\tpdm.CalcShape2D(landmark_locations, params_local, params_global);\n\n\tcv::Mat_<double> reference_shape;\n\t\t\n\t// Initialise the reference shape on which we'll be warping\n\tcv::Vec6d global_ref(patch_scaling[scale], 0, 0, 0, 0, 0);\n\n\t// Compute the reference shape\n\tpdm.CalcShape2D(reference_shape, params_local, global_ref);\n\t\t\n\t// similarity and inverse similarity transform to and from image and reference shape\n\tcv::Mat_<double> reference_shape_2D = (reference_shape.reshape(1, 2).t());\n\tcv::Mat_<double> image_shape_2D = landmark_locations.reshape(1, 2).t();\n\n\tsim_img_to_ref = AlignShapesWithScale(image_shape_2D, reference_shape_2D);\n\tcv::Matx22d sim_ref_to_img_d = sim_img_to_ref.inv(cv::DECOMP_LU);\n\n\tdouble a1 = sim_ref_to_img_d(0,0);\n\tdouble b1 = -sim_ref_to_img_d(0,1);\n\t\t\n\tsim_ref_to_img(0,0) = (float)sim_ref_to_img_d(0,0);\n\tsim_ref_to_img(0,1) = (float)sim_ref_to_img_d(0,1);\n\tsim_ref_to_img(1,0) = (float)sim_ref_to_img_d(1,0);\n\tsim_ref_to_img(1,1) = (float)sim_ref_to_img_d(1,1);\n\n\t// Indicates the legal pixels in a depth image, if available (used for CLM-Z area of interest (window) interpolation)\n\tcv::Mat_<uchar> mask;\n\tif(!depth_image.empty())\n\t{\n\t\tmask = depth_image > 0;\t\t\t\n\t\tmask = mask / 255;\n\t}\t\t\n\t\n\n\tbool use_ccnf = !this->ccnf_expert_intensity.empty();\n\n\t// If using CCNF patch experts might need to precalculate Sigmas\n\tif(use_ccnf)\n\t{\n        std::vector<cv::Mat_<float> > sigma_components;\n\n\t\t// Retrieve the correct sigma component size\n\t\tfor( size_t w_size = 0; w_size < this->sigma_components.size(); ++w_size)\n\t\t{\n\t\t\tif(!this->sigma_components[w_size].empty())\n\t\t\t{\n\t\t\t\tif(window_size*window_size == this->sigma_components[w_size][0].rows)\n\t\t\t\t{\n\t\t\t\t\tsigma_components = this->sigma_components[w_size];\n\t\t\t\t}\n\t\t\t}\n\t\t}\t\t\t\n\n\t\t// Go through all of the landmarks and compute the Sigma for each\n\t\tfor( int lmark = 0; lmark < n; lmark++)\n\t\t{\n\t\t\t// Only for visible landmarks\n\t\t\tif(visibilities[scale][view_id].at<int>(lmark,0))\n\t\t\t{\n\t\t\t\t// Precompute sigmas if they are not computed yet\n\t\t\t\tccnf_expert_intensity[scale][view_id][lmark].ComputeSigmas(sigma_components, window_size);\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// calculate the patch responses for every landmark, Actual work happens here. If openMP is turned on it is possible to do this in parallel,\n\t// this might work well on some machines, while potentially have an adverse effect on others\n//#ifdef _OPENMP\n//#pragma omp parallel for\n//#endif\n//\ttbb::parallel_for(0, (int)n, [&](int i){\n    for(int i = 0; i < n; i++)\n\t{\n\t\t\t\n\t\tif(visibilities[scale][view_id].rows == n)\n\t\t{\n\t\t\tif(visibilities[scale][view_id].at<int>(i,0) != 0)\n\t\t\t{\n\n\t\t\t\t// Work out how big the area of interest has to be to get a response of window size\n\t\t\t\tint area_of_interest_width;\n\t\t\t\tint area_of_interest_height;\n\n\t\t\t\tif(use_ccnf)\n\t\t\t\t{\n\t\t\t\t\tarea_of_interest_width = window_size + ccnf_expert_intensity[scale][view_id][i].width - 1; \n\t\t\t\t\tarea_of_interest_height = window_size + ccnf_expert_intensity[scale][view_id][i].height - 1;\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tarea_of_interest_width = window_size + svr_expert_intensity[scale][view_id][i].width - 1; \n\t\t\t\t\tarea_of_interest_height = window_size + svr_expert_intensity[scale][view_id][i].height - 1;\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// scale and rotate to mean shape to reference frame\n\t\t\t\tcv::Mat sim = (cv::Mat_<float>(2,3) << a1, -b1, landmark_locations.at<double>(i,0), b1, a1, landmark_locations.at<double>(i+n,0));\n\n\t\t\t\t// Extract the region of interest around the current landmark location\n\t\t\t\tcv::Mat_<float> area_of_interest(area_of_interest_height, area_of_interest_width);\n\n\t\t\t\t// Using C style openCV as it does what we need\n\t\t\t\tCvMat area_of_interest_o = area_of_interest;\n\t\t\t\tCvMat sim_o = sim;\n\t\t\t\tIplImage im_o = grayscale_image;\t\t\t\n\t\t\t\tcvGetQuadrangleSubPix(&im_o, &area_of_interest_o, &sim_o);\n\t\t\t\n\t\t\t\t// get the correct size response window\t\t\t\n\t\t\t\tpatch_expert_responses[i] = cv::Mat_<float>(window_size, window_size);\n\n\t\t\t\t// Get intensity response either from the SVR or CCNF patch experts (prefer CCNF)\n\t\t\t\tif(!ccnf_expert_intensity.empty())\n\t\t\t\t{\t\t\t\t\n\n\t\t\t\t\tccnf_expert_intensity[scale][view_id][i].Response(area_of_interest, patch_expert_responses[i]);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tsvr_expert_intensity[scale][view_id][i].Response(area_of_interest, patch_expert_responses[i]);\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// if we have a corresponding depth patch and it is visible\t\t\n\t\t\t\tif(!svr_expert_depth.empty() && !depth_image.empty() && visibilities[scale][view_id].at<int>(i,0))\n\t\t\t\t{\n\n\t\t\t\t\tcv::Mat_<float> dProb = patch_expert_responses[i].clone();\n\t\t\t\t\tcv::Mat_<float> depthWindow(area_of_interest_height, area_of_interest_width);\n\t\t\t\n\n\t\t\t\t\tCvMat dimg_o = depthWindow;\n\t\t\t\t\tcv::Mat maskWindow(area_of_interest_height, area_of_interest_width, CV_32F);\n\t\t\t\t\tCvMat mimg_o = maskWindow;\n\n\t\t\t\t\tIplImage d_o = depth_image;\n\t\t\t\t\tIplImage m_o = mask;\n\n\t\t\t\t\tcvGetQuadrangleSubPix(&d_o,&dimg_o,&sim_o);\n\t\t\t\t\n\t\t\t\t\tcvGetQuadrangleSubPix(&m_o,&mimg_o,&sim_o);\n\n\t\t\t\t\tdepthWindow.setTo(0, maskWindow < 1);\n\n\t\t\t\t\tsvr_expert_depth[scale][view_id][i].ResponseDepth(depthWindow, dProb);\n\t\t\t\t\t\t\t\n\t\t\t\t\t// Sum to one\n\t\t\t\t\tdouble sum = cv::sum(patch_expert_responses[i])[0];\n\n\t\t\t\t\t// To avoid division by 0 issues\n\t\t\t\t\tif(sum == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tsum = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tpatch_expert_responses[i] /= sum;\n\n\t\t\t\t\t// Sum to one\n\t\t\t\t\tsum = cv::sum(dProb)[0];\n\t\t\t\t\t// To avoid division by 0 issues\n\t\t\t\t\tif(sum == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tsum = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tdProb /= sum;\n\n\t\t\t\t\tpatch_expert_responses[i] = patch_expert_responses[i] + dProb;\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n//\t});\n\n}\n\n//=============================================================================\n// Getting the closest view center based on orientation\nint Patch_experts::GetViewIdx(const cv::Vec6d& params_global, int scale) const\n{\t\n\tint idx = 0;\n\t\n\tdouble dbest;\n\n\tfor(int i = 0; i < this->nViews(scale); i++)\n\t{\n\t\tdouble v1 = params_global[1] - centers[scale][i][0]; \n\t\tdouble v2 = params_global[2] - centers[scale][i][1];\n\t\tdouble v3 = params_global[3] - centers[scale][i][2];\n\t\t\t\n\t\tdouble d = v1*v1 + v2*v2 + v3*v3;\n\n\t\tif(i == 0 || d < dbest)\n\t\t{\n\t\t\tdbest = d;\n\t\t\tidx = i;\n\t\t}\n\t}\n\treturn idx;\n}\n\n\n//===========================================================================\nvoid Patch_experts::Read(std::vector<std::string> intensity_svr_expert_locations, std::vector<std::string> depth_svr_expert_locations, std::vector<std::string> intensity_ccnf_expert_locations)\n{\n\n\t// initialise the SVR intensity patch expert parameters\n\tint num_intensity_svr = intensity_svr_expert_locations.size();\n\tcenters.resize(num_intensity_svr);\n\tvisibilities.resize(num_intensity_svr);\n\tpatch_scaling.resize(num_intensity_svr);\n\t\n\tsvr_expert_intensity.resize(num_intensity_svr);\n\t\n\t// Reading in SVR intensity patch experts for each scales it is defined in\n\tfor(int scale = 0; scale < num_intensity_svr; ++scale)\n\t{\t\t\n        std::string location = intensity_svr_expert_locations[scale];\n        std::cout << \"Reading the intensity SVR patch experts from: \" << location << \"....\";\n\t\tRead_SVR_patch_experts(location,  centers[scale], visibilities[scale], svr_expert_intensity[scale], patch_scaling[scale]);\n\t}\n\n\t// Initialise and read CCNF patch experts (currently only intensity based), \n\tint num_intensity_ccnf = intensity_ccnf_expert_locations.size();\n\n\t// CCNF experts override the SVR ones\n\tif(num_intensity_ccnf > 0)\n\t{\n\t\tcenters.resize(num_intensity_ccnf);\n\t\tvisibilities.resize(num_intensity_ccnf);\n\t\tpatch_scaling.resize(num_intensity_ccnf);\n\t\tccnf_expert_intensity.resize(num_intensity_ccnf);\n\t}\n\n\tfor(int scale = 0; scale < num_intensity_ccnf; ++scale)\n\t{\t\t\n        std::string location = intensity_ccnf_expert_locations[scale];\n        std::cout << \"Reading the intensity CCNF patch experts from: \" << location << \"....\";\n\t\tRead_CCNF_patch_experts(location,  centers[scale], visibilities[scale], ccnf_expert_intensity[scale], patch_scaling[scale]);\n\t}\n\n\n\t// initialise the SVR depth patch expert parameters\n\tint num_depth_scales = depth_svr_expert_locations.size();\n\tint num_intensity_scales = centers.size();\n\t\n\tif(num_depth_scales > 0 && num_intensity_scales != num_depth_scales)\n\t{\n        std::cout << \"Intensity and depth patch experts have a different number of scales, can't read depth\" << std::endl;\n\t\treturn;\n\t}\n\n\t// Have these to confirm that depth patch experts have the same number of views and scales and have the same visibilities\n    std::vector<std::vector<cv::Vec3d> > centers_depth(num_depth_scales);\n    std::vector<std::vector<cv::Mat_<int> > > visibilities_depth(num_depth_scales);\n    std::vector<double> patch_scaling_depth(num_depth_scales);\n\t\n\tsvr_expert_depth.resize(num_depth_scales);\t\n\n\t// Reading in SVR intensity patch experts for each scales it is defined in\n\tfor(int scale = 0; scale < num_depth_scales; ++scale)\n\t{\t\t\n        std::string location = depth_svr_expert_locations[scale];\n        std::cout << \"Reading the depth SVR patch experts from: \" << location << \"....\";\n\t\tRead_SVR_patch_experts(location,  centers_depth[scale], visibilities_depth[scale], svr_expert_depth[scale], patch_scaling_depth[scale]);\n\n\t\t// Check if the scales are identical\n\t\tif(patch_scaling_depth[scale] != patch_scaling[scale])\n\t\t{\n            std::cout << \"Intensity and depth patch experts have a different scales, can't read depth\" << std::endl;\n\t\t\tsvr_expert_depth.clear();\n\t\t\treturn;\t\t\t\n\t\t}\n\n\t\tint num_views_intensity = centers[scale].size();\n\t\tint num_views_depth = centers_depth[scale].size();\n\n\t\t// Check if the number of views is identical\n\t\tif(num_views_intensity != num_views_depth)\n\t\t{\n            std::cout << \"Intensity and depth patch experts have a different number of scales, can't read depth\" << std::endl;\n\t\t\tsvr_expert_depth.clear();\n\t\t\treturn;\t\t\t\n\t\t}\n\n\t\tfor(int view = 0; view < num_views_depth; ++view)\n\t\t{\n\t\t\tif(cv::countNonZero(centers_depth[scale][view] != centers[scale][view]) || cv::countNonZero(visibilities[scale][view] != visibilities_depth[scale][view]))\n\t\t\t{\n                std::cout << \"Intensity and depth patch experts have different visibilities or centers\" << std::endl;\n\t\t\t\tsvr_expert_depth.clear();\n\t\t\t\treturn;\t\t\n\t\t\t}\n\t\t}\n\t}\n\n}\n//======================= Reading the SVR patch experts =========================================//\nvoid Patch_experts::Read_SVR_patch_experts(std::string expert_location, std::vector<cv::Vec3d>& centers, std::vector<cv::Mat_<int> >& visibility, std::vector<std::vector<Multi_SVR_patch_expert> >& patches, double& scale)\n{\n\n    std::ifstream patchesFile(expert_location.c_str(), std::ios_base::in);\n\n\tif(patchesFile.is_open())\n\t{\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\tpatchesFile >> scale;\n\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\tint numberViews;\t\t\n\n\t\tpatchesFile >> numberViews; \n\n\t\t// read the visibility\n\t\tcenters.resize(numberViews);\n\t\tvisibility.resize(numberViews);\n  \n\t\tpatches.resize(numberViews);\n\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\t// centers of each view (which view corresponds to which orientation)\n\t\tfor(size_t i = 0; i < centers.size(); i++)\n\t\t{\n\t\t\tcv::Mat center;\n\t\t\tLandmarkDetector::ReadMat(patchesFile, center);\t\n\t\t\tcenter.copyTo(centers[i]);\n\t\t\tcenters[i] = centers[i] * M_PI / 180.0;\n\t\t}\n\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\t// the visibility of points for each of the views (which verts are visible at a specific view\n\t\tfor(size_t i = 0; i < visibility.size(); i++)\n\t\t{\n\t\t\tLandmarkDetector::ReadMat(patchesFile, visibility[i]);\t\t\t\t\n\t\t}\n\n\t\tint numberOfPoints = visibility[0].rows;\n\n\t\tLandmarkDetector::SkipComments(patchesFile);\n\n\t\t// read the patches themselves\n\t\tfor(size_t i = 0; i < patches.size(); i++)\n\t\t{\n\t\t\t// number of patches for each view\n\t\t\tpatches[i].resize(numberOfPoints);\n\t\t\t// read in each patch\n\t\t\tfor(int j = 0; j < numberOfPoints; j++)\n\t\t\t{\n\t\t\t\tpatches[i][j].Read(patchesFile);\n\t\t\t}\n\t\t}\n\t\n        std::cout << \"Done\" << std::endl;\n\t}\n\telse\n\t{\n        std::cout << \"Can't find/open the patches file\" << std::endl;\n\t}\n}\n\n//======================= Reading the CCNF patch experts =========================================//\nvoid Patch_experts::Read_CCNF_patch_experts(std::string patchesFileLocation, std::vector<cv::Vec3d>& centers, std::vector<cv::Mat_<int> >& visibility, std::vector<std::vector<CCNF_patch_expert> >& patches, double& patchScaling)\n{\n\n    std::ifstream patchesFile(patchesFileLocation.c_str(), std::ios::in | std::ios::binary);\n\n\tif(patchesFile.is_open())\n\t{\n\t\tpatchesFile.read ((char*)&patchScaling, 8);\n\t\t\n\t\tint numberViews;\t\t\n\t\tpatchesFile.read ((char*)&numberViews, 4);\n\n\t\t// read the visibility\n\t\tcenters.resize(numberViews);\n\t\tvisibility.resize(numberViews);\n  \n\t\tpatches.resize(numberViews);\n\t\t\n\t\t// centers of each view (which view corresponds to which orientation)\n\t\tfor(size_t i = 0; i < centers.size(); i++)\n\t\t{\n\t\t\tcv::Mat center;\n\t\t\tLandmarkDetector::ReadMatBin(patchesFile, center);\t\n\t\t\tcenter.copyTo(centers[i]);\n\t\t\tcenters[i] = centers[i] * M_PI / 180.0;\n\t\t}\n\n\t\t// the visibility of points for each of the views (which verts are visible at a specific view\n\t\tfor(size_t i = 0; i < visibility.size(); i++)\n\t\t{\n\t\t\tLandmarkDetector::ReadMatBin(patchesFile, visibility[i]);\t\t\t\t\n\t\t}\n\t\tint numberOfPoints = visibility[0].rows;\n\n\t\t// Read the possible SigmaInvs (without beta), this will be followed by patch reading (this assumes all of them have the same type, and number of betas)\n\t\tint num_win_sizes;\n\t\tint num_sigma_comp;\n\t\tpatchesFile.read ((char*)&num_win_sizes, 4);\n\n        std::vector<int> windows;\n\t\twindows.resize(num_win_sizes);\n\n        std::vector<std::vector<cv::Mat_<float> > > sigma_components;\n\t\tsigma_components.resize(num_win_sizes);\n\n\t\tfor (int w=0; w < num_win_sizes; ++w)\n\t\t{\n\t\t\tpatchesFile.read ((char*)&windows[w], 4);\n\n\t\t\tpatchesFile.read ((char*)&num_sigma_comp, 4);\n\n\t\t\tsigma_components[w].resize(num_sigma_comp);\n\n\t\t\tfor(int s=0; s < num_sigma_comp; ++s)\n\t\t\t{\n\t\t\t\tLandmarkDetector::ReadMatBin(patchesFile, sigma_components[w][s]);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis->sigma_components = sigma_components;\n\n\t\t// read the patches themselves\n\t\tfor(size_t i = 0; i < patches.size(); i++)\n\t\t{\n\t\t\t// number of patches for each view\n\t\t\tpatches[i].resize(numberOfPoints);\n\t\t\t// read in each patch\n\t\t\tfor(int j = 0; j < numberOfPoints; j++)\n\t\t\t{\n\t\t\t\tpatches[i][j].Read(patchesFile, windows, sigma_components);\n\t\t\t}\n\t\t}\n        std::cout << \"Done\" << std::endl;\n\t}\n\telse\n\t{\n        std::cout << \"Can't find/open the patches file\" << std::endl;\n\t}\n}\n\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/SVR_patch_expert.cpp",
    "content": "﻿///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge,\n// all rights reserved.\n//\n// THIS SOFTWARE IS PROVIDED AS IS FOR ACADEMIC USE ONLY AND ANY EXPRESS\n// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\n// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY.\n// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n//\n// Notwithstanding the license granted herein, Licensee acknowledges that certain components\n// of the Software may be covered by so-called open source software licenses (Open Source\n// Components), which means any software licenses approved as open source licenses by the\n// Open Source Initiative or any substantially similar licenses, including without limitation any\n// license that, as a condition of distribution of the software licensed under such license,\n// requires that the distributor make the software available in source code format. Licensor shall\n// provide a list of Open Source Components for a particular version of the Software upon\n// Licensees request. Licensee will comply with the applicable terms of such licenses and to\n// the extent required by the licenses covering Open Source Components, the terms of such\n// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the\n// licenses applicable to Open Source Components prohibit any of the restrictions in this\n// License Agreement with respect to such Open Source Component, such restrictions will not\n// apply to such Open Source Component. To the extent the terms of the licenses applicable to\n// Open Source Components require Licensor to make an offer to provide source code or\n// related information in connection with the Software, such offer is hereby made. Any request\n// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk\n// Licensee acknowledges receipt of notices for the Open Source Components for the initial\n// delivery of the Software.\n\n//     * Any publications arising from the use of this software, including but\n//       not limited to academic journal and conference publications, technical\n//       reports and manuals, must cite at least one of the following works:\n//\n//       OpenFace: an open source facial behavior analysis toolkit\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency\n//       in IEEE Winter Conference on Applications of Computer Vision, 2016  \n//\n//       Rendering of Eyes for Eye-Shape Registration and Gaze Estimation\n//       Erroll Wood, Tadas Baltruaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling \n//       in IEEE International. Conference on Computer Vision (ICCV),  2015 \n//\n//       Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection\n//       Tadas Baltruaitis, Marwa Mahmoud, and Peter Robinson \n//       in Facial Expression Recognition and Analysis Challenge, \n//       IEEE International Conference on Automatic Face and Gesture Recognition, 2015 \n//\n//       Constrained Local Neural Fields for robust facial landmark detection in the wild.\n//       Tadas Baltruaitis, Peter Robinson, and Louis-Philippe Morency. \n//       in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.    \n//\n///////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n\n#include \"SVR_patch_expert.h\"\n\n// OpenCV include\n#include <opencv2/core/core.hpp>\n#include <opencv2/imgproc.hpp>\n\n#include \"LandmarkDetectorUtils.h\"\n\nusing namespace LandmarkDetector;\n\n//===========================================================================\n// Computing the image gradient\nvoid Grad(const cv::Mat& im, cv::Mat& grad)\n{\n\t\n\t/*float filter[3] = {1, 0, -1};\n\tfloat dfilter[1] = {1};\t\n\tcv::Mat filterX = cv::Mat(1,3,CV_32F, filter).clone();\n\tcv::Mat filterY = cv::Mat(1,1,CV_32F, dfilter).clone();\n\t\t\t\n\tcv::Mat gradX;\n\tcv::Mat gradY;\n\tcv::sepFilter2D(im, gradX, CV_32F, filterY, filterX, cv::Point(-1,-1), 0);\n\tcv::sepFilter2D(im, gradY, CV_32F, filterX.t(), filterY, cv::Point(-1,-1), 0);\n\tcv::pow(gradX,2, gradX);\n\tcv::pow(gradY,2, gradY);\n\tgrad = gradX + gradY;\n\t\t\t\n\tgrad.row(0).setTo(0);\n\tgrad.col(0).setTo(0);\n\tgrad.col(grad.cols-1).setTo(0);\n\tgrad.row(grad.rows-1).setTo(0);\t\t*/\n\n\t// A quicker alternative\n\tint x,y,h = im.rows,w = im.cols;\n\tfloat vx,vy;\n\n\t// Initialise the gradient\n\tgrad.create(im.size(), CV_32F);\n\tgrad.setTo(0.0f);\n\n\tcv::MatIterator_<float> gp  = grad.begin<float>() + w+1;\n\tcv::MatConstIterator_<float> px1 = im.begin<float>()   + w+2;\n\tcv::MatConstIterator_<float> px2 = im.begin<float>()   + w;\n\tcv::MatConstIterator_<float> py1 = im.begin<float>()   + 2*w+1;\n\tcv::MatConstIterator_<float> py2 = im.begin<float>()   + 1;\n\n\tfor(y = 1; y < h-1; y++)\n\t{ \n\t\tfor(x = 1; x < w-1; x++)\n\t\t{\n\t\t\tvx = *px1++ - *px2++;\n\t\t\tvy = *py1++ - *py2++;\n\t\t\t*gp++ = vx*vx + vy*vy;\n\t\t}\n\t\tpx1 += 2;\n\t\tpx2 += 2;\n\t\tpy1 += 2;\n\t\tpy2 += 2;\n\t\tgp += 2;\n\t}\n\n}\n\n// A copy constructor\nSVR_patch_expert::SVR_patch_expert(const SVR_patch_expert& other) : weights(other.weights.clone())\n{\n\tthis->type = other.type;\n\tthis->scaling = other.scaling;\n\tthis->bias = other.bias;\n\tthis->confidence = other.confidence;\n\n\tfor (std::map<int, cv::Mat_<double> >::const_iterator it = other.weights_dfts.begin(); it != other.weights_dfts.end(); it++)\n\t{\n\t\t// Make sure the matrix is copied.\n\t\tthis->weights_dfts.insert(std::pair<int, cv::Mat>(it->first, it->second.clone()));\n\t}\n}\n\n//===========================================================================\nvoid SVR_patch_expert::Read(std::ifstream &stream)\n{\n\n\t// A sanity check when reading patch experts\n\tint read_type;\n\tstream >> read_type;\n\tassert(read_type == 2);\n  \n\tstream >> type >> confidence >> scaling >> bias;\n\tLandmarkDetector::ReadMat(stream, weights); \n\t\n\t// OpenCV and Matlab matrix cardinality is different, hence the transpose\n\tweights = weights.t();\n\n}\n\n//===========================================================================\nvoid SVR_patch_expert::Response(const cv::Mat_<float>& area_of_interest, cv::Mat_<float>& response)\n{\n\n\tint response_height = area_of_interest.rows - weights.rows + 1;\n\tint response_width = area_of_interest.cols - weights.cols + 1;\n\t\n\t// the patch area on which we will calculate reponses\n\tcv::Mat_<float> normalised_area_of_interest;\n  \n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\n\t// If type is raw just normalise mean and standard deviation\n\tif(type == 0)\n\t{\n\t\t// Perform normalisation across whole patch\n\t\tcv::Scalar mean;\n\t\tcv::Scalar std;\n\n\t\tcv::meanStdDev(area_of_interest, mean, std);\n\t\t// Avoid division by zero\n\t\tif(std[0] == 0)\n\t\t{\n\t\t\tstd[0] = 1;\n\t\t}\n\t\tnormalised_area_of_interest = (area_of_interest - mean[0]) / std[0];\n\t}\n\t// If type is gradient, perform the image gradient computation\n\telse if(type == 1)\n\t{\n\t\tGrad(area_of_interest, normalised_area_of_interest);\n\t}\n  \telse\n\t{\n\t\tprintf(\"ERROR(%s,%d): Unsupported patch type %d!\\n\", __FILE__,__LINE__, type);\n\t\tabort();\n\t}\n\t\n\tcv::Mat_<float> svr_response;\n\n\t// The empty matrix as we don't pass precomputed dft's of image\n\tcv::Mat_<double> empty_matrix_0(0,0,0.0);\n\tcv::Mat_<float> empty_matrix_1(0,0,0.0);\n\tcv::Mat_<float> empty_matrix_2(0,0,0.0);\n\n\t// Efficient calc of patch expert SVR response across the area of interest\n\tmatchTemplate_m(normalised_area_of_interest, empty_matrix_0, empty_matrix_1, empty_matrix_2, weights, weights_dfts, svr_response, CV_TM_CCOEFF_NORMED); \n\t\n\tresponse.create(svr_response.size());\n\tcv::MatIterator_<float> p = response.begin();\n\n\tcv::MatIterator_<float> q1 = svr_response.begin(); // respone for each pixel\n\tcv::MatIterator_<float> q2 = svr_response.end();\n\n\twhile(q1 != q2)\n\t{\n\t\t// the SVR response passed into logistic regressor\n\t\t*p++ = 1.0/(1.0 + exp( -(*q1++ * scaling + bias )));\n\t}\n\n}\n\nvoid SVR_patch_expert::ResponseDepth(const cv::Mat_<float>& area_of_interest, cv::Mat_<float> &response)\n{\n\n\t// How big the response map will be\n\tint response_height = area_of_interest.rows - weights.rows + 1;\n\tint response_width = area_of_interest.cols - weights.cols + 1;\n\t\n\t// the patch area on which we will calculate reponses\n\tcv::Mat_<float> normalised_area_of_interest;\n  \n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\n\tif(type == 0)\n\t{\n\t\t// Perform normalisation across whole patch\n\t\tcv::Scalar mean;\n\t\tcv::Scalar std;\n\t\t\n\t\t// ignore missing values\n\t\tcv::Mat_<uchar> mask = area_of_interest > 0;\n\t\tcv::meanStdDev(area_of_interest, mean, std, mask);\n\n\t\t// if all values the same don't divide by 0\n\t\tif(std[0] == 0)\n\t\t{\n\t\t\tstd[0] = 1;\n\t\t}\n\n\t\tnormalised_area_of_interest = (area_of_interest - mean[0]) / std[0];\n\n\t\t// Set the invalid pixels to 0\n\t\tnormalised_area_of_interest.setTo(0, mask == 0);\n\t}\n\telse\n\t{\n\t\tprintf(\"ERROR(%s,%d): Unsupported patch type %d!\\n\", __FILE__,__LINE__,type);\n\t\tabort();\n\t}\n  \n\tcv::Mat_<float> svr_response;\n\t\t\n\t// The empty matrix as we don't pass precomputed dft's of image\n\tcv::Mat_<double> empty_matrix_0(0,0,0.0);\n\tcv::Mat_<float> empty_matrix_1(0,0,0.0);\n\tcv::Mat_<float> empty_matrix_2(0,0,0.0);\n\n\t// Efficient calc of patch expert response across the area of interest\n\n\tmatchTemplate_m(normalised_area_of_interest, empty_matrix_0, empty_matrix_1, empty_matrix_2, weights, weights_dfts, svr_response, CV_TM_CCOEFF); \n\t\n\tresponse.create(svr_response.size());\n\tcv::MatIterator_<float> p = response.begin();\n\n\tcv::MatIterator_<float> q1 = svr_response.begin(); // respone for each pixel\n\tcv::MatIterator_<float> q2 = svr_response.end();\n\n\twhile(q1 != q2)\n\t{\n\t\t// the SVR response passed through a logistic regressor\n\t\t*p++ = 1.0/(1.0 + exp( -(*q1++ * scaling + bias )));\n\t}\t\n}\n\n// Copy constructor\t\t\t\t\nMulti_SVR_patch_expert::Multi_SVR_patch_expert(const Multi_SVR_patch_expert& other) : svr_patch_experts(other.svr_patch_experts)\n{\n\tthis->width = other.width;\n\tthis->height = other.height;\n}\n\n//===========================================================================\nvoid Multi_SVR_patch_expert::Read(std::ifstream &stream)\n{\n\t// A sanity check when reading patch experts\n\tint type;\n\tstream >> type;\n\tassert(type == 3);\n\n\t// The number of patch experts for this view (with different modalities)\n\tint number_modalities;\n\n\tstream >> width >> height >> number_modalities;\n\t\n\tsvr_patch_experts.resize(number_modalities);\n\tfor(int i = 0; i < number_modalities; i++)\n\t\tsvr_patch_experts[i].Read(stream);\n\n}\n//===========================================================================\nvoid Multi_SVR_patch_expert::Response(const cv::Mat_<float> &area_of_interest, cv::Mat_<float> &response)\n{\n\t\n\tint response_height = area_of_interest.rows - height + 1;\n\tint response_width = area_of_interest.cols - width + 1;\n\n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\n\t// For the purposes of the experiment only use the response of normal intensity, for fair comparison\n\n\tif(svr_patch_experts.size() == 1)\n\t{\n\t\tsvr_patch_experts[0].Response(area_of_interest, response);\t\t\n\t}\n\telse\n\t{\n\t\t// responses from multiple patch experts these can be gradients, LBPs etc.\n\t\tresponse.setTo(1.0);\n\t\t\n\t\tcv::Mat_<float> modality_resp(response_height, response_width);\n\n\t\tfor(size_t i = 0; i < svr_patch_experts.size(); i++)\n\t\t{\t\t\t\n\t\t\tsvr_patch_experts[i].Response(area_of_interest, modality_resp);\t\t\t\n\t\t\tresponse = response.mul(modality_resp);\t\n\t\t}\t\n\t\t\n\t}\n\n}\n\nvoid Multi_SVR_patch_expert::ResponseDepth(const cv::Mat_<float>& area_of_interest, cv::Mat_<float>& response)\n{\n\tint response_height = area_of_interest.rows - height + 1;\n\tint response_width = area_of_interest.cols - width + 1;\n\n\tif(response.rows != response_height || response.cols != response_width)\n\t{\n\t\tresponse.create(response_height, response_width);\n\t}\n\t\n\t// With depth patch experts only do raw data modality\n\tsvr_patch_experts[0].ResponseDepth(area_of_interest, response);\n}\n//===========================================================================\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/LandmarkDetector的副本/src/stdafx.cpp",
    "content": "#include \"stdafx.h\""
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/CMakeLists.txt",
    "content": "#TBB library\ninclude_directories(${TBB_ROOT_DIR}/include)\n\ninclude_directories(${BOOST_INCLUDE_DIR})\n\nSET(SOURCE\n    src/classifier/lab_boosted_classifier.cpp\nsrc/classifier/mlp.cpp\nsrc/classifier/surf_mlp.cpp\nsrc/face_detection.cpp\nsrc/feat/lab_feature_map.cpp\nsrc/feat/surf_feature_map.cpp\nsrc/fust.cpp\nsrc/io/lab_boost_model_reader.cpp\nsrc/io/surf_mlp_model_reader.cpp\nsrc/util/image_pyramid.cpp\nsrc/util/nms.cpp\n)\n\nSET(HEADERS\ninclude/classifier/lab_boosted_classifier.h\ninclude/classifier/mlp.h\ninclude/classifier/surf_mlp.h\ninclude/classifier.h\ninclude/common.h\ninclude/detector.h\ninclude/face_detection.h\ninclude/feat/lab_feature_map.h\ninclude/feat/surf_feature_map.h\ninclude/feature_map.h\ninclude/fust.h\ninclude/io/lab_boost_model_reader.h\ninclude/io/surf_mlp_model_reader.h\ninclude/model_reader.h\ninclude/util/image_pyramid.h\ninclude/util/math_func.h\ninclude/util/nms.h\n)\n\ninclude_directories(./include)\ninclude_directories(${seetaFace_SOURCE_DIR}/include)\n\n\nadd_library(seetaFace ${SOURCE} ${HEADERS} )\n\ninstall (TARGETS seetaFace DESTINATION lib)\ninstall (FILES ${HEADERS} DESTINATION include/FaceLivenessDetection)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeCache.txt",
    "content": "# This is the CMakeCache file.\n# For build in directory: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build\n# It was generated by CMake: /usr/local/Cellar/cmake/3.8.0/bin/cmake\n# You can edit this file to change values found and used by cmake.\n# If you do not want to change any of the values, simply exit the editor.\n# If you do want to change a value, simply edit, save, and exit the editor.\n# The syntax for the file is as follows:\n# KEY:TYPE=VALUE\n# KEY is the name of a variable in the cache.\n# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.\n# VALUE is the current value for the KEY.\n\n########################\n# EXTERNAL cache entries\n########################\n\n//Set to ON to build examples\nBUILD_EXAMPLES:BOOL=ON\n\n//Path to a program.\nCMAKE_AR:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar\n\n//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or\n// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.\nCMAKE_BUILD_TYPE:STRING=\n\n//Enable/Disable color output during build.\nCMAKE_COLOR_MAKEFILE:BOOL=ON\n\n//CXX compiler\nCMAKE_CXX_COMPILER:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++\n\n//Flags used by the compiler during all build types.\nCMAKE_CXX_FLAGS:STRING=\n\n//Flags used by the compiler during debug builds.\nCMAKE_CXX_FLAGS_DEBUG:STRING=-g\n\n//Flags used by the compiler during release builds for minimum\n// size.\nCMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG\n\n//Flags used by the compiler during release builds.\nCMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG\n\n//Flags used by the compiler during release builds with debug info.\nCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG\n\n//C compiler\nCMAKE_C_COMPILER:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc\n\n//Flags used by the compiler during all build types.\nCMAKE_C_FLAGS:STRING=\n\n//Flags used by the compiler during debug builds.\nCMAKE_C_FLAGS_DEBUG:STRING=-g\n\n//Flags used by the compiler during release builds for minimum\n// size.\nCMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG\n\n//Flags used by the compiler during release builds.\nCMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG\n\n//Flags used by the compiler during release builds with debug info.\nCMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG\n\n//Flags used by the linker.\nCMAKE_EXE_LINKER_FLAGS:STRING=\n\n//Flags used by the linker during debug builds.\nCMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=\n\n//Flags used by the linker during release minsize builds.\nCMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=\n\n//Flags used by the linker during release builds.\nCMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=\n\n//Flags used by the linker during Release with Debug Info builds.\nCMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=\n\n//Enable/Disable output of compile commands during generation.\nCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF\n\n//Path to a program.\nCMAKE_INSTALL_NAME_TOOL:FILEPATH=/usr/bin/install_name_tool\n\n//Install path prefix, prepended onto install directories.\nCMAKE_INSTALL_PREFIX:PATH=/usr/local\n\n//Path to a program.\nCMAKE_LINKER:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld\n\n//Path to a program.\nCMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make\n\n//Flags used by the linker during the creation of modules.\nCMAKE_MODULE_LINKER_FLAGS:STRING=\n\n//Flags used by the linker during debug builds.\nCMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=\n\n//Flags used by the linker during release minsize builds.\nCMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=\n\n//Flags used by the linker during release builds.\nCMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=\n\n//Flags used by the linker during Release with Debug Info builds.\nCMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=\n\n//Path to a program.\nCMAKE_NM:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm\n\n//Path to a program.\nCMAKE_OBJCOPY:FILEPATH=CMAKE_OBJCOPY-NOTFOUND\n\n//Path to a program.\nCMAKE_OBJDUMP:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump\n\n//Build architectures for OSX\nCMAKE_OSX_ARCHITECTURES:STRING=\n\n//Minimum OS X version to target for deployment (at runtime); newer\n// APIs weak linked. Set to empty string for default value.\nCMAKE_OSX_DEPLOYMENT_TARGET:STRING=\n\n//The product will be built against the headers and libraries located\n// inside the indicated SDK.\nCMAKE_OSX_SYSROOT:STRING=\n\n//Value Computed by CMake\nCMAKE_PROJECT_NAME:STATIC=seetaFace\n\n//Path to a program.\nCMAKE_RANLIB:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib\n\n//Flags used by the linker during the creation of dll's.\nCMAKE_SHARED_LINKER_FLAGS:STRING=\n\n//Flags used by the linker during debug builds.\nCMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=\n\n//Flags used by the linker during release minsize builds.\nCMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=\n\n//Flags used by the linker during release builds.\nCMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=\n\n//Flags used by the linker during Release with Debug Info builds.\nCMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=\n\n//If set, runtime paths are not added when installing shared libraries,\n// but are added when building.\nCMAKE_SKIP_INSTALL_RPATH:BOOL=NO\n\n//If set, runtime paths are not added when using shared libraries.\nCMAKE_SKIP_RPATH:BOOL=NO\n\n//Flags used by the linker during the creation of static libraries.\nCMAKE_STATIC_LINKER_FLAGS:STRING=\n\n//Flags used by the linker during debug builds.\nCMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=\n\n//Flags used by the linker during release minsize builds.\nCMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=\n\n//Flags used by the linker during release builds.\nCMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=\n\n//Flags used by the linker during Release with Debug Info builds.\nCMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=\n\n//Path to a program.\nCMAKE_STRIP:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip\n\n//If this value is on, makefiles will be generated without the\n// .SILENT directive, and all commands will be echoed to the console\n// during the make.  This is useful for debugging only. With Visual\n// Studio IDE projects all commands are done without /nologo.\nCMAKE_VERBOSE_MAKEFILE:BOOL=FALSE\n\n//C++ compiler flags for OpenMP parallization\nOpenMP_CXX_FLAGS:STRING=\n\n//C compiler flags for OpenMP parallization\nOpenMP_C_FLAGS:STRING=\n\n//Set to ON to build use openmp\nUSE_OPENMP:BOOL=ON\n\n//Set to ON to build use SSE\nUSE_SSE:BOOL=ON\n\n//Value Computed by CMake\nseetaFace_BINARY_DIR:STATIC=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build\n\n//Dependencies for target\nseetaFace_LIB_DEPENDS:STATIC=\n\n//Value Computed by CMake\nseetaFace_SOURCE_DIR:STATIC=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace\n\n\n########################\n# INTERNAL cache entries\n########################\n\n//ADVANCED property for variable: CMAKE_AR\nCMAKE_AR-ADVANCED:INTERNAL=1\n//This is the directory where this CMakeCache.txt was created\nCMAKE_CACHEFILE_DIR:INTERNAL=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build\n//Major version of cmake used to create the current loaded cache\nCMAKE_CACHE_MAJOR_VERSION:INTERNAL=3\n//Minor version of cmake used to create the current loaded cache\nCMAKE_CACHE_MINOR_VERSION:INTERNAL=8\n//Patch version of cmake used to create the current loaded cache\nCMAKE_CACHE_PATCH_VERSION:INTERNAL=0\n//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE\nCMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1\n//Path to CMake executable.\nCMAKE_COMMAND:INTERNAL=/usr/local/Cellar/cmake/3.8.0/bin/cmake\n//Path to cpack program executable.\nCMAKE_CPACK_COMMAND:INTERNAL=/usr/local/Cellar/cmake/3.8.0/bin/cpack\n//Path to ctest program executable.\nCMAKE_CTEST_COMMAND:INTERNAL=/usr/local/Cellar/cmake/3.8.0/bin/ctest\n//ADVANCED property for variable: CMAKE_CXX_COMPILER\nCMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS\nCMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG\nCMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL\nCMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE\nCMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO\nCMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_C_COMPILER\nCMAKE_C_COMPILER-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_C_FLAGS\nCMAKE_C_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG\nCMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL\nCMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE\nCMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO\nCMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//Path to cache edit program executable.\nCMAKE_EDIT_COMMAND:INTERNAL=/usr/local/Cellar/cmake/3.8.0/bin/ccmake\n//Executable file format\nCMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS\nCMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG\nCMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL\nCMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE\nCMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO\nCMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS\nCMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1\n//Name of external makefile project generator.\nCMAKE_EXTRA_GENERATOR:INTERNAL=\n//Name of generator.\nCMAKE_GENERATOR:INTERNAL=Unix Makefiles\n//Name of generator platform.\nCMAKE_GENERATOR_PLATFORM:INTERNAL=\n//Name of generator toolset.\nCMAKE_GENERATOR_TOOLSET:INTERNAL=\n//Source directory with the top level CMakeLists.txt file for this\n// project\nCMAKE_HOME_DIRECTORY:INTERNAL=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace\n//ADVANCED property for variable: CMAKE_INSTALL_NAME_TOOL\nCMAKE_INSTALL_NAME_TOOL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_LINKER\nCMAKE_LINKER-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MAKE_PROGRAM\nCMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS\nCMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG\nCMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL\nCMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE\nCMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO\nCMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_NM\nCMAKE_NM-ADVANCED:INTERNAL=1\n//number of local generators\nCMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1\n//ADVANCED property for variable: CMAKE_OBJCOPY\nCMAKE_OBJCOPY-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_OBJDUMP\nCMAKE_OBJDUMP-ADVANCED:INTERNAL=1\n//Platform information initialized\nCMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_RANLIB\nCMAKE_RANLIB-ADVANCED:INTERNAL=1\n//Path to CMake installation.\nCMAKE_ROOT:INTERNAL=/usr/local/Cellar/cmake/3.8.0/share/cmake\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS\nCMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG\nCMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL\nCMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE\nCMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO\nCMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH\nCMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_SKIP_RPATH\nCMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS\nCMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG\nCMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL\nCMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE\nCMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO\nCMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: CMAKE_STRIP\nCMAKE_STRIP-ADVANCED:INTERNAL=1\n//uname command\nCMAKE_UNAME:INTERNAL=/usr/local/opt/coreutils/libexec/gnubin/uname\n//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE\nCMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1\n//ADVANCED property for variable: OpenMP_CXX_FLAGS\nOpenMP_CXX_FLAGS-ADVANCED:INTERNAL=1\n//C++ compiler's OpenMP specification date\nOpenMP_CXX_SPEC_DATE:INTERNAL=\n//ADVANCED property for variable: OpenMP_C_FLAGS\nOpenMP_C_FLAGS-ADVANCED:INTERNAL=1\n//C compiler's OpenMP specification date\nOpenMP_C_SPEC_DATE:INTERNAL=\n//Test OpenMP_FLAG_DETECTED\nOpenMP_FLAG_DETECTED:INTERNAL=\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/3.8.0/CMakeCCompiler.cmake",
    "content": "set(CMAKE_C_COMPILER \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc\")\nset(CMAKE_C_COMPILER_ARG1 \"\")\nset(CMAKE_C_COMPILER_ID \"AppleClang\")\nset(CMAKE_C_COMPILER_VERSION \"8.1.0.8020041\")\nset(CMAKE_C_COMPILER_WRAPPER \"\")\nset(CMAKE_C_STANDARD_COMPUTED_DEFAULT \"11\")\nset(CMAKE_C_COMPILE_FEATURES \"c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert\")\nset(CMAKE_C90_COMPILE_FEATURES \"c_std_90;c_function_prototypes\")\nset(CMAKE_C99_COMPILE_FEATURES \"c_std_99;c_restrict;c_variadic_macros\")\nset(CMAKE_C11_COMPILE_FEATURES \"c_std_11;c_static_assert\")\n\nset(CMAKE_C_PLATFORM_ID \"Darwin\")\nset(CMAKE_C_SIMULATE_ID \"\")\nset(CMAKE_C_SIMULATE_VERSION \"\")\n\nset(CMAKE_AR \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar\")\nset(CMAKE_RANLIB \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib\")\nset(CMAKE_LINKER \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld\")\nset(CMAKE_COMPILER_IS_GNUCC )\nset(CMAKE_C_COMPILER_LOADED 1)\nset(CMAKE_C_COMPILER_WORKS TRUE)\nset(CMAKE_C_ABI_COMPILED TRUE)\nset(CMAKE_COMPILER_IS_MINGW )\nset(CMAKE_COMPILER_IS_CYGWIN )\nif(CMAKE_COMPILER_IS_CYGWIN)\n  set(CYGWIN 1)\n  set(UNIX 1)\nendif()\n\nset(CMAKE_C_COMPILER_ENV_VAR \"CC\")\n\nif(CMAKE_COMPILER_IS_MINGW)\n  set(MINGW 1)\nendif()\nset(CMAKE_C_COMPILER_ID_RUN 1)\nset(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)\nset(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)\nset(CMAKE_C_LINKER_PREFERENCE 10)\n\n# Save compiler ABI information.\nset(CMAKE_C_SIZEOF_DATA_PTR \"8\")\nset(CMAKE_C_COMPILER_ABI \"\")\nset(CMAKE_C_LIBRARY_ARCHITECTURE \"\")\n\nif(CMAKE_C_SIZEOF_DATA_PTR)\n  set(CMAKE_SIZEOF_VOID_P \"${CMAKE_C_SIZEOF_DATA_PTR}\")\nendif()\n\nif(CMAKE_C_COMPILER_ABI)\n  set(CMAKE_INTERNAL_PLATFORM_ABI \"${CMAKE_C_COMPILER_ABI}\")\nendif()\n\nif(CMAKE_C_LIBRARY_ARCHITECTURE)\n  set(CMAKE_LIBRARY_ARCHITECTURE \"\")\nendif()\n\nset(CMAKE_C_CL_SHOWINCLUDES_PREFIX \"\")\nif(CMAKE_C_CL_SHOWINCLUDES_PREFIX)\n  set(CMAKE_CL_SHOWINCLUDES_PREFIX \"${CMAKE_C_CL_SHOWINCLUDES_PREFIX}\")\nendif()\n\n\n\n\n\nset(CMAKE_C_IMPLICIT_LINK_LIBRARIES \"\")\nset(CMAKE_C_IMPLICIT_LINK_DIRECTORIES \"/usr/lib;/usr/local/lib\")\nset(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES \"/Library/Frameworks;/System/Library/Frameworks\")\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/3.8.0/CMakeCXXCompiler.cmake",
    "content": "set(CMAKE_CXX_COMPILER \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++\")\nset(CMAKE_CXX_COMPILER_ARG1 \"\")\nset(CMAKE_CXX_COMPILER_ID \"AppleClang\")\nset(CMAKE_CXX_COMPILER_VERSION \"8.1.0.8020041\")\nset(CMAKE_CXX_COMPILER_WRAPPER \"\")\nset(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT \"98\")\nset(CMAKE_CXX_COMPILE_FEATURES \"cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17\")\nset(CMAKE_CXX98_COMPILE_FEATURES \"cxx_std_98;cxx_template_template_parameters\")\nset(CMAKE_CXX11_COMPILE_FEATURES \"cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates\")\nset(CMAKE_CXX14_COMPILE_FEATURES \"cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates\")\nset(CMAKE_CXX17_COMPILE_FEATURES \"cxx_std_17\")\n\nset(CMAKE_CXX_PLATFORM_ID \"Darwin\")\nset(CMAKE_CXX_SIMULATE_ID \"\")\nset(CMAKE_CXX_SIMULATE_VERSION \"\")\n\nset(CMAKE_AR \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar\")\nset(CMAKE_RANLIB \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib\")\nset(CMAKE_LINKER \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld\")\nset(CMAKE_COMPILER_IS_GNUCXX )\nset(CMAKE_CXX_COMPILER_LOADED 1)\nset(CMAKE_CXX_COMPILER_WORKS TRUE)\nset(CMAKE_CXX_ABI_COMPILED TRUE)\nset(CMAKE_COMPILER_IS_MINGW )\nset(CMAKE_COMPILER_IS_CYGWIN )\nif(CMAKE_COMPILER_IS_CYGWIN)\n  set(CYGWIN 1)\n  set(UNIX 1)\nendif()\n\nset(CMAKE_CXX_COMPILER_ENV_VAR \"CXX\")\n\nif(CMAKE_COMPILER_IS_MINGW)\n  set(MINGW 1)\nendif()\nset(CMAKE_CXX_COMPILER_ID_RUN 1)\nset(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)\nset(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;mm;CPP)\nset(CMAKE_CXX_LINKER_PREFERENCE 30)\nset(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)\n\n# Save compiler ABI information.\nset(CMAKE_CXX_SIZEOF_DATA_PTR \"8\")\nset(CMAKE_CXX_COMPILER_ABI \"\")\nset(CMAKE_CXX_LIBRARY_ARCHITECTURE \"\")\n\nif(CMAKE_CXX_SIZEOF_DATA_PTR)\n  set(CMAKE_SIZEOF_VOID_P \"${CMAKE_CXX_SIZEOF_DATA_PTR}\")\nendif()\n\nif(CMAKE_CXX_COMPILER_ABI)\n  set(CMAKE_INTERNAL_PLATFORM_ABI \"${CMAKE_CXX_COMPILER_ABI}\")\nendif()\n\nif(CMAKE_CXX_LIBRARY_ARCHITECTURE)\n  set(CMAKE_LIBRARY_ARCHITECTURE \"\")\nendif()\n\nset(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX \"\")\nif(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)\n  set(CMAKE_CL_SHOWINCLUDES_PREFIX \"${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}\")\nendif()\n\n\n\n\n\nset(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES \"c++\")\nset(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES \"/usr/lib;/usr/local/lib\")\nset(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES \"/Library/Frameworks;/System/Library/Frameworks\")\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/3.8.0/CMakeSystem.cmake",
    "content": "set(CMAKE_HOST_SYSTEM \"Darwin-16.4.0\")\nset(CMAKE_HOST_SYSTEM_NAME \"Darwin\")\nset(CMAKE_HOST_SYSTEM_VERSION \"16.4.0\")\nset(CMAKE_HOST_SYSTEM_PROCESSOR \"x86_64\")\n\n\n\nset(CMAKE_SYSTEM \"Darwin-16.4.0\")\nset(CMAKE_SYSTEM_NAME \"Darwin\")\nset(CMAKE_SYSTEM_VERSION \"16.4.0\")\nset(CMAKE_SYSTEM_PROCESSOR \"x86_64\")\n\nset(CMAKE_CROSSCOMPILING \"FALSE\")\n\nset(CMAKE_SYSTEM_LOADED 1)\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/3.8.0/CompilerIdC/CMakeCCompilerId.c",
    "content": "#ifdef __cplusplus\n# error \"A C++ compiler has been selected for C.\"\n#endif\n\n#if defined(__18CXX)\n# define ID_VOID_MAIN\n#endif\n#if defined(__CLASSIC_C__)\n/* cv-qualifiers did not exist in K&R C */\n# define const\n# define volatile\n#endif\n\n\n/* Version number components: V=Version, R=Revision, P=Patch\n   Version date components:   YYYY=Year, MM=Month,   DD=Day  */\n\n#if defined(__INTEL_COMPILER) || defined(__ICC)\n# define COMPILER_ID \"Intel\"\n# if defined(_MSC_VER)\n#  define SIMULATE_ID \"MSVC\"\n# endif\n  /* __INTEL_COMPILER = VRP */\n# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)\n# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)\n# if defined(__INTEL_COMPILER_UPDATE)\n#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)\n# else\n#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)\n# endif\n# if defined(__INTEL_COMPILER_BUILD_DATE)\n  /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */\n#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)\n# endif\n# if defined(_MSC_VER)\n   /* _MSC_VER = VVRR */\n#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\n#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\n# endif\n\n#elif defined(__PATHCC__)\n# define COMPILER_ID \"PathScale\"\n# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)\n# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)\n# if defined(__PATHCC_PATCHLEVEL__)\n#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)\n# endif\n\n#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)\n# define COMPILER_ID \"Embarcadero\"\n# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)\n# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)\n# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__     & 0xFFFF)\n\n#elif defined(__BORLANDC__)\n# define COMPILER_ID \"Borland\"\n  /* __BORLANDC__ = 0xVRR */\n# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)\n# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)\n\n#elif defined(__WATCOMC__) && __WATCOMC__ < 1200\n# define COMPILER_ID \"Watcom\"\n   /* __WATCOMC__ = VVRR */\n# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)\n# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)\n# if (__WATCOMC__ % 10) > 0\n#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)\n# endif\n\n#elif defined(__WATCOMC__)\n# define COMPILER_ID \"OpenWatcom\"\n   /* __WATCOMC__ = VVRP + 1100 */\n# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)\n# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)\n# if (__WATCOMC__ % 10) > 0\n#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)\n# endif\n\n#elif defined(__SUNPRO_C)\n# define COMPILER_ID \"SunPro\"\n# if __SUNPRO_C >= 0x5100\n   /* __SUNPRO_C = 0xVRRP */\n#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)\n#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)\n#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_C    & 0xF)\n# else\n   /* __SUNPRO_CC = 0xVRP */\n#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)\n#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)\n#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_C    & 0xF)\n# endif\n\n#elif defined(__HP_cc)\n# define COMPILER_ID \"HP\"\n  /* __HP_cc = VVRRPP */\n# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)\n# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)\n# define COMPILER_VERSION_PATCH DEC(__HP_cc     % 100)\n\n#elif defined(__DECC)\n# define COMPILER_ID \"Compaq\"\n  /* __DECC_VER = VVRRTPPPP */\n# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)\n# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000  % 100)\n# define COMPILER_VERSION_PATCH DEC(__DECC_VER         % 10000)\n\n#elif defined(__IBMC__) && defined(__COMPILER_VER__)\n# define COMPILER_ID \"zOS\"\n  /* __IBMC__ = VRP */\n# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)\n# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)\n# define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)\n\n#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800\n# define COMPILER_ID \"XL\"\n  /* __IBMC__ = VRP */\n# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)\n# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)\n# define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)\n\n#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800\n# define COMPILER_ID \"VisualAge\"\n  /* __IBMC__ = VRP */\n# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)\n# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)\n# define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)\n\n#elif defined(__PGI)\n# define COMPILER_ID \"PGI\"\n# define COMPILER_VERSION_MAJOR DEC(__PGIC__)\n# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)\n# if defined(__PGIC_PATCHLEVEL__)\n#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)\n# endif\n\n#elif defined(_CRAYC)\n# define COMPILER_ID \"Cray\"\n# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)\n# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)\n\n#elif defined(__TI_COMPILER_VERSION__)\n# define COMPILER_ID \"TI\"\n  /* __TI_COMPILER_VERSION__ = VVVRRRPPP */\n# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)\n# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000   % 1000)\n# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__        % 1000)\n\n#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)\n# define COMPILER_ID \"Fujitsu\"\n\n#elif defined(__TINYC__)\n# define COMPILER_ID \"TinyCC\"\n\n#elif defined(__BCC__)\n# define COMPILER_ID \"Bruce\"\n\n#elif defined(__SCO_VERSION__)\n# define COMPILER_ID \"SCO\"\n\n#elif defined(__clang__) && defined(__apple_build_version__)\n# define COMPILER_ID \"AppleClang\"\n# if defined(_MSC_VER)\n#  define SIMULATE_ID \"MSVC\"\n# endif\n# define COMPILER_VERSION_MAJOR DEC(__clang_major__)\n# define COMPILER_VERSION_MINOR DEC(__clang_minor__)\n# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)\n# if defined(_MSC_VER)\n   /* _MSC_VER = VVRR */\n#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\n#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\n# endif\n# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)\n\n#elif defined(__clang__)\n# define COMPILER_ID \"Clang\"\n# if defined(_MSC_VER)\n#  define SIMULATE_ID \"MSVC\"\n# endif\n# define COMPILER_VERSION_MAJOR DEC(__clang_major__)\n# define COMPILER_VERSION_MINOR DEC(__clang_minor__)\n# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)\n# if defined(_MSC_VER)\n   /* _MSC_VER = VVRR */\n#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\n#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\n# endif\n\n#elif defined(__GNUC__)\n# define COMPILER_ID \"GNU\"\n# define COMPILER_VERSION_MAJOR DEC(__GNUC__)\n# if defined(__GNUC_MINOR__)\n#  define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)\n# endif\n# if defined(__GNUC_PATCHLEVEL__)\n#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)\n# endif\n\n#elif defined(_MSC_VER)\n# define COMPILER_ID \"MSVC\"\n  /* _MSC_VER = VVRR */\n# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)\n# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)\n# if defined(_MSC_FULL_VER)\n#  if _MSC_VER >= 1400\n    /* _MSC_FULL_VER = VVRRPPPPP */\n#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)\n#  else\n    /* _MSC_FULL_VER = VVRRPPPP */\n#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)\n#  endif\n# endif\n# if defined(_MSC_BUILD)\n#  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)\n# endif\n\n#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)\n# define COMPILER_ID \"ADSP\"\n#if defined(__VISUALDSPVERSION__)\n  /* __VISUALDSPVERSION__ = 0xVVRRPP00 */\n# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)\n# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)\n# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8  & 0xFF)\n#endif\n\n#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC)\n# define COMPILER_ID \"IAR\"\n\n#elif defined(__ARMCC_VERSION)\n# define COMPILER_ID \"ARMCC\"\n#if __ARMCC_VERSION >= 1000000\n  /* __ARMCC_VERSION = VRRPPPP */\n  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)\n  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)\n  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION     % 10000)\n#else\n  /* __ARMCC_VERSION = VRPPPP */\n  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)\n  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)\n  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION    % 10000)\n#endif\n\n\n#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)\n# define COMPILER_ID \"SDCC\"\n# if defined(__SDCC_VERSION_MAJOR)\n#  define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)\n#  define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)\n#  define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)\n# else\n  /* SDCC = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(SDCC/100)\n#  define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(SDCC    % 10)\n# endif\n\n#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)\n# define COMPILER_ID \"MIPSpro\"\n# if defined(_SGI_COMPILER_VERSION)\n  /* _SGI_COMPILER_VERSION = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100)\n#  define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION    % 10)\n# else\n  /* _COMPILER_VERSION = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100)\n#  define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION    % 10)\n# endif\n\n\n/* These compilers are either not known or too old to define an\n  identification macro.  Try to identify the platform and guess that\n  it is the native compiler.  */\n#elif defined(__sgi)\n# define COMPILER_ID \"MIPSpro\"\n\n#elif defined(__hpux) || defined(__hpua)\n# define COMPILER_ID \"HP\"\n\n#else /* unknown compiler */\n# define COMPILER_ID \"\"\n#endif\n\n/* Construct the string literal in pieces to prevent the source from\n   getting matched.  Store it in a pointer rather than an array\n   because some compilers will just produce instructions to fill the\n   array rather than assigning a pointer to a static array.  */\nchar const* info_compiler = \"INFO\" \":\" \"compiler[\" COMPILER_ID \"]\";\n#ifdef SIMULATE_ID\nchar const* info_simulate = \"INFO\" \":\" \"simulate[\" SIMULATE_ID \"]\";\n#endif\n\n#ifdef __QNXNTO__\nchar const* qnxnto = \"INFO\" \":\" \"qnxnto[]\";\n#endif\n\n#if defined(__CRAYXE) || defined(__CRAYXC)\nchar const *info_cray = \"INFO\" \":\" \"compiler_wrapper[CrayPrgEnv]\";\n#endif\n\n#define STRINGIFY_HELPER(X) #X\n#define STRINGIFY(X) STRINGIFY_HELPER(X)\n\n/* Identify known platforms by name.  */\n#if defined(__linux) || defined(__linux__) || defined(linux)\n# define PLATFORM_ID \"Linux\"\n\n#elif defined(__CYGWIN__)\n# define PLATFORM_ID \"Cygwin\"\n\n#elif defined(__MINGW32__)\n# define PLATFORM_ID \"MinGW\"\n\n#elif defined(__APPLE__)\n# define PLATFORM_ID \"Darwin\"\n\n#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)\n# define PLATFORM_ID \"Windows\"\n\n#elif defined(__FreeBSD__) || defined(__FreeBSD)\n# define PLATFORM_ID \"FreeBSD\"\n\n#elif defined(__NetBSD__) || defined(__NetBSD)\n# define PLATFORM_ID \"NetBSD\"\n\n#elif defined(__OpenBSD__) || defined(__OPENBSD)\n# define PLATFORM_ID \"OpenBSD\"\n\n#elif defined(__sun) || defined(sun)\n# define PLATFORM_ID \"SunOS\"\n\n#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)\n# define PLATFORM_ID \"AIX\"\n\n#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)\n# define PLATFORM_ID \"IRIX\"\n\n#elif defined(__hpux) || defined(__hpux__)\n# define PLATFORM_ID \"HP-UX\"\n\n#elif defined(__HAIKU__)\n# define PLATFORM_ID \"Haiku\"\n\n#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)\n# define PLATFORM_ID \"BeOS\"\n\n#elif defined(__QNX__) || defined(__QNXNTO__)\n# define PLATFORM_ID \"QNX\"\n\n#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)\n# define PLATFORM_ID \"Tru64\"\n\n#elif defined(__riscos) || defined(__riscos__)\n# define PLATFORM_ID \"RISCos\"\n\n#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)\n# define PLATFORM_ID \"SINIX\"\n\n#elif defined(__UNIX_SV__)\n# define PLATFORM_ID \"UNIX_SV\"\n\n#elif defined(__bsdos__)\n# define PLATFORM_ID \"BSDOS\"\n\n#elif defined(_MPRAS) || defined(MPRAS)\n# define PLATFORM_ID \"MP-RAS\"\n\n#elif defined(__osf) || defined(__osf__)\n# define PLATFORM_ID \"OSF1\"\n\n#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)\n# define PLATFORM_ID \"SCO_SV\"\n\n#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)\n# define PLATFORM_ID \"ULTRIX\"\n\n#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)\n# define PLATFORM_ID \"Xenix\"\n\n#elif defined(__WATCOMC__)\n# if defined(__LINUX__)\n#  define PLATFORM_ID \"Linux\"\n\n# elif defined(__DOS__)\n#  define PLATFORM_ID \"DOS\"\n\n# elif defined(__OS2__)\n#  define PLATFORM_ID \"OS2\"\n\n# elif defined(__WINDOWS__)\n#  define PLATFORM_ID \"Windows3x\"\n\n# else /* unknown platform */\n#  define PLATFORM_ID\n# endif\n\n#else /* unknown platform */\n# define PLATFORM_ID\n\n#endif\n\n/* For windows compilers MSVC and Intel we can determine\n   the architecture of the compiler being used.  This is because\n   the compilers do not have flags that can change the architecture,\n   but rather depend on which compiler is being used\n*/\n#if defined(_WIN32) && defined(_MSC_VER)\n# if defined(_M_IA64)\n#  define ARCHITECTURE_ID \"IA64\"\n\n# elif defined(_M_X64) || defined(_M_AMD64)\n#  define ARCHITECTURE_ID \"x64\"\n\n# elif defined(_M_IX86)\n#  define ARCHITECTURE_ID \"X86\"\n\n# elif defined(_M_ARM)\n#  if _M_ARM == 4\n#   define ARCHITECTURE_ID \"ARMV4I\"\n#  elif _M_ARM == 5\n#   define ARCHITECTURE_ID \"ARMV5I\"\n#  else\n#   define ARCHITECTURE_ID \"ARMV\" STRINGIFY(_M_ARM)\n#  endif\n\n# elif defined(_M_MIPS)\n#  define ARCHITECTURE_ID \"MIPS\"\n\n# elif defined(_M_SH)\n#  define ARCHITECTURE_ID \"SHx\"\n\n# else /* unknown architecture */\n#  define ARCHITECTURE_ID \"\"\n# endif\n\n#elif defined(__WATCOMC__)\n# if defined(_M_I86)\n#  define ARCHITECTURE_ID \"I86\"\n\n# elif defined(_M_IX86)\n#  define ARCHITECTURE_ID \"X86\"\n\n# else /* unknown architecture */\n#  define ARCHITECTURE_ID \"\"\n# endif\n\n#else\n#  define ARCHITECTURE_ID\n#endif\n\n/* Convert integer to decimal digit literals.  */\n#define DEC(n)                   \\\n  ('0' + (((n) / 10000000)%10)), \\\n  ('0' + (((n) / 1000000)%10)),  \\\n  ('0' + (((n) / 100000)%10)),   \\\n  ('0' + (((n) / 10000)%10)),    \\\n  ('0' + (((n) / 1000)%10)),     \\\n  ('0' + (((n) / 100)%10)),      \\\n  ('0' + (((n) / 10)%10)),       \\\n  ('0' +  ((n) % 10))\n\n/* Convert integer to hex digit literals.  */\n#define HEX(n)             \\\n  ('0' + ((n)>>28 & 0xF)), \\\n  ('0' + ((n)>>24 & 0xF)), \\\n  ('0' + ((n)>>20 & 0xF)), \\\n  ('0' + ((n)>>16 & 0xF)), \\\n  ('0' + ((n)>>12 & 0xF)), \\\n  ('0' + ((n)>>8  & 0xF)), \\\n  ('0' + ((n)>>4  & 0xF)), \\\n  ('0' + ((n)     & 0xF))\n\n/* Construct a string literal encoding the version number components. */\n#ifdef COMPILER_VERSION_MAJOR\nchar const info_version[] = {\n  'I', 'N', 'F', 'O', ':',\n  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',\n  COMPILER_VERSION_MAJOR,\n# ifdef COMPILER_VERSION_MINOR\n  '.', COMPILER_VERSION_MINOR,\n#  ifdef COMPILER_VERSION_PATCH\n   '.', COMPILER_VERSION_PATCH,\n#   ifdef COMPILER_VERSION_TWEAK\n    '.', COMPILER_VERSION_TWEAK,\n#   endif\n#  endif\n# endif\n  ']','\\0'};\n#endif\n\n/* Construct a string literal encoding the version number components. */\n#ifdef SIMULATE_VERSION_MAJOR\nchar const info_simulate_version[] = {\n  'I', 'N', 'F', 'O', ':',\n  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',\n  SIMULATE_VERSION_MAJOR,\n# ifdef SIMULATE_VERSION_MINOR\n  '.', SIMULATE_VERSION_MINOR,\n#  ifdef SIMULATE_VERSION_PATCH\n   '.', SIMULATE_VERSION_PATCH,\n#   ifdef SIMULATE_VERSION_TWEAK\n    '.', SIMULATE_VERSION_TWEAK,\n#   endif\n#  endif\n# endif\n  ']','\\0'};\n#endif\n\n/* Construct the string literal in pieces to prevent the source from\n   getting matched.  Store it in a pointer rather than an array\n   because some compilers will just produce instructions to fill the\n   array rather than assigning a pointer to a static array.  */\nchar const* info_platform = \"INFO\" \":\" \"platform[\" PLATFORM_ID \"]\";\nchar const* info_arch = \"INFO\" \":\" \"arch[\" ARCHITECTURE_ID \"]\";\n\n\n\n\n#if !defined(__STDC__)\n# if defined(_MSC_VER) && !defined(__clang__)\n#  define C_DIALECT \"90\"\n# else\n#  define C_DIALECT\n# endif\n#elif __STDC_VERSION__ >= 201000L\n# define C_DIALECT \"11\"\n#elif __STDC_VERSION__ >= 199901L\n# define C_DIALECT \"99\"\n#else\n# define C_DIALECT \"90\"\n#endif\nconst char* info_language_dialect_default =\n  \"INFO\" \":\" \"dialect_default[\" C_DIALECT \"]\";\n\n/*--------------------------------------------------------------------------*/\n\n#ifdef ID_VOID_MAIN\nvoid main() {}\n#else\n# if defined(__CLASSIC_C__)\nint main(argc, argv) int argc; char *argv[];\n# else\nint main(int argc, char* argv[])\n# endif\n{\n  int require = 0;\n  require += info_compiler[argc];\n  require += info_platform[argc];\n  require += info_arch[argc];\n#ifdef COMPILER_VERSION_MAJOR\n  require += info_version[argc];\n#endif\n#ifdef SIMULATE_ID\n  require += info_simulate[argc];\n#endif\n#ifdef SIMULATE_VERSION_MAJOR\n  require += info_simulate_version[argc];\n#endif\n#if defined(__CRAYXE) || defined(__CRAYXC)\n  require += info_cray[argc];\n#endif\n  require += info_language_dialect_default[argc];\n  (void)argv;\n  return require;\n}\n#endif\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/3.8.0/CompilerIdCXX/CMakeCXXCompilerId.cpp",
    "content": "/* This source file must have a .cpp extension so that all C++ compilers\n   recognize the extension without flags.  Borland does not know .cxx for\n   example.  */\n#ifndef __cplusplus\n# error \"A C compiler has been selected for C++.\"\n#endif\n\n\n/* Version number components: V=Version, R=Revision, P=Patch\n   Version date components:   YYYY=Year, MM=Month,   DD=Day  */\n\n#if defined(__COMO__)\n# define COMPILER_ID \"Comeau\"\n  /* __COMO_VERSION__ = VRR */\n# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)\n# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)\n\n#elif defined(__INTEL_COMPILER) || defined(__ICC)\n# define COMPILER_ID \"Intel\"\n# if defined(_MSC_VER)\n#  define SIMULATE_ID \"MSVC\"\n# endif\n  /* __INTEL_COMPILER = VRP */\n# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)\n# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)\n# if defined(__INTEL_COMPILER_UPDATE)\n#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)\n# else\n#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)\n# endif\n# if defined(__INTEL_COMPILER_BUILD_DATE)\n  /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */\n#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)\n# endif\n# if defined(_MSC_VER)\n   /* _MSC_VER = VVRR */\n#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\n#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\n# endif\n\n#elif defined(__PATHCC__)\n# define COMPILER_ID \"PathScale\"\n# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)\n# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)\n# if defined(__PATHCC_PATCHLEVEL__)\n#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)\n# endif\n\n#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)\n# define COMPILER_ID \"Embarcadero\"\n# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)\n# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)\n# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__     & 0xFFFF)\n\n#elif defined(__BORLANDC__)\n# define COMPILER_ID \"Borland\"\n  /* __BORLANDC__ = 0xVRR */\n# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)\n# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)\n\n#elif defined(__WATCOMC__) && __WATCOMC__ < 1200\n# define COMPILER_ID \"Watcom\"\n   /* __WATCOMC__ = VVRR */\n# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)\n# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)\n# if (__WATCOMC__ % 10) > 0\n#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)\n# endif\n\n#elif defined(__WATCOMC__)\n# define COMPILER_ID \"OpenWatcom\"\n   /* __WATCOMC__ = VVRP + 1100 */\n# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)\n# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)\n# if (__WATCOMC__ % 10) > 0\n#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)\n# endif\n\n#elif defined(__SUNPRO_CC)\n# define COMPILER_ID \"SunPro\"\n# if __SUNPRO_CC >= 0x5100\n   /* __SUNPRO_CC = 0xVRRP */\n#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)\n#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)\n#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)\n# else\n   /* __SUNPRO_CC = 0xVRP */\n#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)\n#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)\n#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)\n# endif\n\n#elif defined(__HP_aCC)\n# define COMPILER_ID \"HP\"\n  /* __HP_aCC = VVRRPP */\n# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)\n# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)\n# define COMPILER_VERSION_PATCH DEC(__HP_aCC     % 100)\n\n#elif defined(__DECCXX)\n# define COMPILER_ID \"Compaq\"\n  /* __DECCXX_VER = VVRRTPPPP */\n# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)\n# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000  % 100)\n# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER         % 10000)\n\n#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)\n# define COMPILER_ID \"zOS\"\n  /* __IBMCPP__ = VRP */\n# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)\n# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)\n# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)\n\n#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800\n# define COMPILER_ID \"XL\"\n  /* __IBMCPP__ = VRP */\n# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)\n# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)\n# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)\n\n#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800\n# define COMPILER_ID \"VisualAge\"\n  /* __IBMCPP__ = VRP */\n# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)\n# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)\n# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)\n\n#elif defined(__PGI)\n# define COMPILER_ID \"PGI\"\n# define COMPILER_VERSION_MAJOR DEC(__PGIC__)\n# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)\n# if defined(__PGIC_PATCHLEVEL__)\n#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)\n# endif\n\n#elif defined(_CRAYC)\n# define COMPILER_ID \"Cray\"\n# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)\n# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)\n\n#elif defined(__TI_COMPILER_VERSION__)\n# define COMPILER_ID \"TI\"\n  /* __TI_COMPILER_VERSION__ = VVVRRRPPP */\n# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)\n# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000   % 1000)\n# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__        % 1000)\n\n#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)\n# define COMPILER_ID \"Fujitsu\"\n\n#elif defined(__SCO_VERSION__)\n# define COMPILER_ID \"SCO\"\n\n#elif defined(__clang__) && defined(__apple_build_version__)\n# define COMPILER_ID \"AppleClang\"\n# if defined(_MSC_VER)\n#  define SIMULATE_ID \"MSVC\"\n# endif\n# define COMPILER_VERSION_MAJOR DEC(__clang_major__)\n# define COMPILER_VERSION_MINOR DEC(__clang_minor__)\n# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)\n# if defined(_MSC_VER)\n   /* _MSC_VER = VVRR */\n#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\n#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\n# endif\n# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)\n\n#elif defined(__clang__)\n# define COMPILER_ID \"Clang\"\n# if defined(_MSC_VER)\n#  define SIMULATE_ID \"MSVC\"\n# endif\n# define COMPILER_VERSION_MAJOR DEC(__clang_major__)\n# define COMPILER_VERSION_MINOR DEC(__clang_minor__)\n# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)\n# if defined(_MSC_VER)\n   /* _MSC_VER = VVRR */\n#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\n#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\n# endif\n\n#elif defined(__GNUC__) || defined(__GNUG__)\n# define COMPILER_ID \"GNU\"\n# if defined(__GNUC__)\n#  define COMPILER_VERSION_MAJOR DEC(__GNUC__)\n# else\n#  define COMPILER_VERSION_MAJOR DEC(__GNUG__)\n# endif\n# if defined(__GNUC_MINOR__)\n#  define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)\n# endif\n# if defined(__GNUC_PATCHLEVEL__)\n#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)\n# endif\n\n#elif defined(_MSC_VER)\n# define COMPILER_ID \"MSVC\"\n  /* _MSC_VER = VVRR */\n# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)\n# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)\n# if defined(_MSC_FULL_VER)\n#  if _MSC_VER >= 1400\n    /* _MSC_FULL_VER = VVRRPPPPP */\n#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)\n#  else\n    /* _MSC_FULL_VER = VVRRPPPP */\n#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)\n#  endif\n# endif\n# if defined(_MSC_BUILD)\n#  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)\n# endif\n\n#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)\n# define COMPILER_ID \"ADSP\"\n#if defined(__VISUALDSPVERSION__)\n  /* __VISUALDSPVERSION__ = 0xVVRRPP00 */\n# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)\n# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)\n# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8  & 0xFF)\n#endif\n\n#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC)\n# define COMPILER_ID \"IAR\"\n\n#elif defined(__ARMCC_VERSION)\n# define COMPILER_ID \"ARMCC\"\n#if __ARMCC_VERSION >= 1000000\n  /* __ARMCC_VERSION = VRRPPPP */\n  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)\n  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)\n  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION     % 10000)\n#else\n  /* __ARMCC_VERSION = VRPPPP */\n  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)\n  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)\n  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION    % 10000)\n#endif\n\n\n#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)\n# define COMPILER_ID \"MIPSpro\"\n# if defined(_SGI_COMPILER_VERSION)\n  /* _SGI_COMPILER_VERSION = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100)\n#  define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION    % 10)\n# else\n  /* _COMPILER_VERSION = VRP */\n#  define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100)\n#  define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10)\n#  define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION    % 10)\n# endif\n\n\n/* These compilers are either not known or too old to define an\n  identification macro.  Try to identify the platform and guess that\n  it is the native compiler.  */\n#elif defined(__sgi)\n# define COMPILER_ID \"MIPSpro\"\n\n#elif defined(__hpux) || defined(__hpua)\n# define COMPILER_ID \"HP\"\n\n#else /* unknown compiler */\n# define COMPILER_ID \"\"\n#endif\n\n/* Construct the string literal in pieces to prevent the source from\n   getting matched.  Store it in a pointer rather than an array\n   because some compilers will just produce instructions to fill the\n   array rather than assigning a pointer to a static array.  */\nchar const* info_compiler = \"INFO\" \":\" \"compiler[\" COMPILER_ID \"]\";\n#ifdef SIMULATE_ID\nchar const* info_simulate = \"INFO\" \":\" \"simulate[\" SIMULATE_ID \"]\";\n#endif\n\n#ifdef __QNXNTO__\nchar const* qnxnto = \"INFO\" \":\" \"qnxnto[]\";\n#endif\n\n#if defined(__CRAYXE) || defined(__CRAYXC)\nchar const *info_cray = \"INFO\" \":\" \"compiler_wrapper[CrayPrgEnv]\";\n#endif\n\n#define STRINGIFY_HELPER(X) #X\n#define STRINGIFY(X) STRINGIFY_HELPER(X)\n\n/* Identify known platforms by name.  */\n#if defined(__linux) || defined(__linux__) || defined(linux)\n# define PLATFORM_ID \"Linux\"\n\n#elif defined(__CYGWIN__)\n# define PLATFORM_ID \"Cygwin\"\n\n#elif defined(__MINGW32__)\n# define PLATFORM_ID \"MinGW\"\n\n#elif defined(__APPLE__)\n# define PLATFORM_ID \"Darwin\"\n\n#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)\n# define PLATFORM_ID \"Windows\"\n\n#elif defined(__FreeBSD__) || defined(__FreeBSD)\n# define PLATFORM_ID \"FreeBSD\"\n\n#elif defined(__NetBSD__) || defined(__NetBSD)\n# define PLATFORM_ID \"NetBSD\"\n\n#elif defined(__OpenBSD__) || defined(__OPENBSD)\n# define PLATFORM_ID \"OpenBSD\"\n\n#elif defined(__sun) || defined(sun)\n# define PLATFORM_ID \"SunOS\"\n\n#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)\n# define PLATFORM_ID \"AIX\"\n\n#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)\n# define PLATFORM_ID \"IRIX\"\n\n#elif defined(__hpux) || defined(__hpux__)\n# define PLATFORM_ID \"HP-UX\"\n\n#elif defined(__HAIKU__)\n# define PLATFORM_ID \"Haiku\"\n\n#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)\n# define PLATFORM_ID \"BeOS\"\n\n#elif defined(__QNX__) || defined(__QNXNTO__)\n# define PLATFORM_ID \"QNX\"\n\n#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)\n# define PLATFORM_ID \"Tru64\"\n\n#elif defined(__riscos) || defined(__riscos__)\n# define PLATFORM_ID \"RISCos\"\n\n#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)\n# define PLATFORM_ID \"SINIX\"\n\n#elif defined(__UNIX_SV__)\n# define PLATFORM_ID \"UNIX_SV\"\n\n#elif defined(__bsdos__)\n# define PLATFORM_ID \"BSDOS\"\n\n#elif defined(_MPRAS) || defined(MPRAS)\n# define PLATFORM_ID \"MP-RAS\"\n\n#elif defined(__osf) || defined(__osf__)\n# define PLATFORM_ID \"OSF1\"\n\n#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)\n# define PLATFORM_ID \"SCO_SV\"\n\n#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)\n# define PLATFORM_ID \"ULTRIX\"\n\n#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)\n# define PLATFORM_ID \"Xenix\"\n\n#elif defined(__WATCOMC__)\n# if defined(__LINUX__)\n#  define PLATFORM_ID \"Linux\"\n\n# elif defined(__DOS__)\n#  define PLATFORM_ID \"DOS\"\n\n# elif defined(__OS2__)\n#  define PLATFORM_ID \"OS2\"\n\n# elif defined(__WINDOWS__)\n#  define PLATFORM_ID \"Windows3x\"\n\n# else /* unknown platform */\n#  define PLATFORM_ID\n# endif\n\n#else /* unknown platform */\n# define PLATFORM_ID\n\n#endif\n\n/* For windows compilers MSVC and Intel we can determine\n   the architecture of the compiler being used.  This is because\n   the compilers do not have flags that can change the architecture,\n   but rather depend on which compiler is being used\n*/\n#if defined(_WIN32) && defined(_MSC_VER)\n# if defined(_M_IA64)\n#  define ARCHITECTURE_ID \"IA64\"\n\n# elif defined(_M_X64) || defined(_M_AMD64)\n#  define ARCHITECTURE_ID \"x64\"\n\n# elif defined(_M_IX86)\n#  define ARCHITECTURE_ID \"X86\"\n\n# elif defined(_M_ARM)\n#  if _M_ARM == 4\n#   define ARCHITECTURE_ID \"ARMV4I\"\n#  elif _M_ARM == 5\n#   define ARCHITECTURE_ID \"ARMV5I\"\n#  else\n#   define ARCHITECTURE_ID \"ARMV\" STRINGIFY(_M_ARM)\n#  endif\n\n# elif defined(_M_MIPS)\n#  define ARCHITECTURE_ID \"MIPS\"\n\n# elif defined(_M_SH)\n#  define ARCHITECTURE_ID \"SHx\"\n\n# else /* unknown architecture */\n#  define ARCHITECTURE_ID \"\"\n# endif\n\n#elif defined(__WATCOMC__)\n# if defined(_M_I86)\n#  define ARCHITECTURE_ID \"I86\"\n\n# elif defined(_M_IX86)\n#  define ARCHITECTURE_ID \"X86\"\n\n# else /* unknown architecture */\n#  define ARCHITECTURE_ID \"\"\n# endif\n\n#else\n#  define ARCHITECTURE_ID\n#endif\n\n/* Convert integer to decimal digit literals.  */\n#define DEC(n)                   \\\n  ('0' + (((n) / 10000000)%10)), \\\n  ('0' + (((n) / 1000000)%10)),  \\\n  ('0' + (((n) / 100000)%10)),   \\\n  ('0' + (((n) / 10000)%10)),    \\\n  ('0' + (((n) / 1000)%10)),     \\\n  ('0' + (((n) / 100)%10)),      \\\n  ('0' + (((n) / 10)%10)),       \\\n  ('0' +  ((n) % 10))\n\n/* Convert integer to hex digit literals.  */\n#define HEX(n)             \\\n  ('0' + ((n)>>28 & 0xF)), \\\n  ('0' + ((n)>>24 & 0xF)), \\\n  ('0' + ((n)>>20 & 0xF)), \\\n  ('0' + ((n)>>16 & 0xF)), \\\n  ('0' + ((n)>>12 & 0xF)), \\\n  ('0' + ((n)>>8  & 0xF)), \\\n  ('0' + ((n)>>4  & 0xF)), \\\n  ('0' + ((n)     & 0xF))\n\n/* Construct a string literal encoding the version number components. */\n#ifdef COMPILER_VERSION_MAJOR\nchar const info_version[] = {\n  'I', 'N', 'F', 'O', ':',\n  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',\n  COMPILER_VERSION_MAJOR,\n# ifdef COMPILER_VERSION_MINOR\n  '.', COMPILER_VERSION_MINOR,\n#  ifdef COMPILER_VERSION_PATCH\n   '.', COMPILER_VERSION_PATCH,\n#   ifdef COMPILER_VERSION_TWEAK\n    '.', COMPILER_VERSION_TWEAK,\n#   endif\n#  endif\n# endif\n  ']','\\0'};\n#endif\n\n/* Construct a string literal encoding the version number components. */\n#ifdef SIMULATE_VERSION_MAJOR\nchar const info_simulate_version[] = {\n  'I', 'N', 'F', 'O', ':',\n  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',\n  SIMULATE_VERSION_MAJOR,\n# ifdef SIMULATE_VERSION_MINOR\n  '.', SIMULATE_VERSION_MINOR,\n#  ifdef SIMULATE_VERSION_PATCH\n   '.', SIMULATE_VERSION_PATCH,\n#   ifdef SIMULATE_VERSION_TWEAK\n    '.', SIMULATE_VERSION_TWEAK,\n#   endif\n#  endif\n# endif\n  ']','\\0'};\n#endif\n\n/* Construct the string literal in pieces to prevent the source from\n   getting matched.  Store it in a pointer rather than an array\n   because some compilers will just produce instructions to fill the\n   array rather than assigning a pointer to a static array.  */\nchar const* info_platform = \"INFO\" \":\" \"platform[\" PLATFORM_ID \"]\";\nchar const* info_arch = \"INFO\" \":\" \"arch[\" ARCHITECTURE_ID \"]\";\n\n\n\n\nconst char* info_language_dialect_default = \"INFO\" \":\" \"dialect_default[\"\n#if __cplusplus > 201402L\n  \"17\"\n#elif __cplusplus >= 201402L\n  \"14\"\n#elif __cplusplus >= 201103L\n  \"11\"\n#else\n  \"98\"\n#endif\n\"]\";\n\n/*--------------------------------------------------------------------------*/\n\nint main(int argc, char* argv[])\n{\n  int require = 0;\n  require += info_compiler[argc];\n  require += info_platform[argc];\n#ifdef COMPILER_VERSION_MAJOR\n  require += info_version[argc];\n#endif\n#ifdef SIMULATE_ID\n  require += info_simulate[argc];\n#endif\n#ifdef SIMULATE_VERSION_MAJOR\n  require += info_simulate_version[argc];\n#endif\n#if defined(__CRAYXE) || defined(__CRAYXC)\n  require += info_cray[argc];\n#endif\n  require += info_language_dialect_default[argc];\n  (void)argv;\n  return require;\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeDirectoryInformation.cmake",
    "content": "# CMAKE generated file: DO NOT EDIT!\n# Generated by \"Unix Makefiles\" Generator, CMake Version 3.8\n\n# Relative path conversion top directories.\nset(CMAKE_RELATIVE_PATH_TOP_SOURCE \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace\")\nset(CMAKE_RELATIVE_PATH_TOP_BINARY \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build\")\n\n# Force unix paths in dependencies.\nset(CMAKE_FORCE_UNIX_PATHS 1)\n\n\n# The C and CXX include file regular expressions for this directory.\nset(CMAKE_C_INCLUDE_REGEX_SCAN \"^.*$\")\nset(CMAKE_C_INCLUDE_REGEX_COMPLAIN \"^$\")\nset(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})\nset(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeError.log",
    "content": "Performing C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_faab0/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_faab0.dir/build.make CMakeFiles/cmTC_faab0.dir/build\nBuilding C object CMakeFiles/cmTC_faab0.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED   -o CMakeFiles/cmTC_faab0.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c:2:10: fatal error: 'omp.h' file not found\n#include <omp.h>\n         ^\n1 error generated.\nmake[1]: *** [CMakeFiles/cmTC_faab0.dir/src.c.o] Error 1\nmake: *** [cmTC_faab0/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_2ccb8/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_2ccb8.dir/build.make CMakeFiles/cmTC_2ccb8.dir/build\nBuilding C object CMakeFiles/cmTC_2ccb8.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED -fopenmp   -o CMakeFiles/cmTC_2ccb8.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\nclang: error: unsupported option '-fopenmp'\nmake[1]: *** [CMakeFiles/cmTC_2ccb8.dir/src.c.o] Error 1\nmake: *** [cmTC_2ccb8/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_86530/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_86530.dir/build.make CMakeFiles/cmTC_86530.dir/build\nBuilding C object CMakeFiles/cmTC_86530.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED -fopenmp=libomp   -o CMakeFiles/cmTC_86530.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\nclang: error: unsupported argument 'libomp' to option 'fopenmp='\nmake[1]: *** [CMakeFiles/cmTC_86530.dir/src.c.o] Error 1\nmake: *** [cmTC_86530/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_7e1d7/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_7e1d7.dir/build.make CMakeFiles/cmTC_7e1d7.dir/build\nBuilding C object CMakeFiles/cmTC_7e1d7.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED /openmp   -o CMakeFiles/cmTC_7e1d7.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\nclang: error: no such file or directory: '/openmp'\nmake[1]: *** [CMakeFiles/cmTC_7e1d7.dir/src.c.o] Error 1\nmake: *** [cmTC_7e1d7/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_75554/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_75554.dir/build.make CMakeFiles/cmTC_75554.dir/build\nBuilding C object CMakeFiles/cmTC_75554.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED -Qopenmp   -o CMakeFiles/cmTC_75554.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\nclang: error: unknown argument: '-Qopenmp'\nmake[1]: *** [CMakeFiles/cmTC_75554.dir/src.c.o] Error 1\nmake: *** [cmTC_75554/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_62ce5/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_62ce5.dir/build.make CMakeFiles/cmTC_62ce5.dir/build\nBuilding C object CMakeFiles/cmTC_62ce5.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED -openmp   -o CMakeFiles/cmTC_62ce5.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c:2:10: fatal error: 'omp.h' file not found\n#include <omp.h>\n         ^\n1 error generated.\nmake[1]: *** [CMakeFiles/cmTC_62ce5.dir/src.c.o] Error 1\nmake: *** [cmTC_62ce5/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_c8300/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_c8300.dir/build.make CMakeFiles/cmTC_c8300.dir/build\nBuilding C object CMakeFiles/cmTC_c8300.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED -xopenmp   -o CMakeFiles/cmTC_c8300.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\nclang: error: language not recognized: 'openmp'\nclang: warning: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c: 'linker' input unused [-Wunused-command-line-argument]\nmake[1]: *** [CMakeFiles/cmTC_c8300.dir/src.c.o] Error 1\nmake: *** [cmTC_c8300/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_465e8/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_465e8.dir/build.make CMakeFiles/cmTC_465e8.dir/build\nBuilding C object CMakeFiles/cmTC_465e8.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED +Oopenmp   -o CMakeFiles/cmTC_465e8.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\nclang: error: no such file or directory: '+Oopenmp'\nmake[1]: *** [CMakeFiles/cmTC_465e8.dir/src.c.o] Error 1\nmake: *** [cmTC_465e8/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_4d065/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_4d065.dir/build.make CMakeFiles/cmTC_4d065.dir/build\nBuilding C object CMakeFiles/cmTC_4d065.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED -qsmp   -o CMakeFiles/cmTC_4d065.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\nclang: error: unknown argument: '-qsmp'\nmake[1]: *** [CMakeFiles/cmTC_4d065.dir/src.c.o] Error 1\nmake: *** [cmTC_4d065/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_912d6/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_912d6.dir/build.make CMakeFiles/cmTC_912d6.dir/build\nBuilding C object CMakeFiles/cmTC_912d6.dir/src.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -DOpenMP_FLAG_DETECTED -mp   -o CMakeFiles/cmTC_912d6.dir/src.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.c\nclang: error: unknown argument: '-mp'\nmake[1]: *** [CMakeFiles/cmTC_912d6.dir/src.c.o] Error 1\nmake: *** [cmTC_912d6/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_ee74e/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_ee74e.dir/build.make CMakeFiles/cmTC_ee74e.dir/build\nBuilding CXX object CMakeFiles/cmTC_ee74e.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED   -o CMakeFiles/cmTC_ee74e.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx:2:10: fatal error: 'omp.h' file not found\n#include <omp.h>\n         ^\n1 error generated.\nmake[1]: *** [CMakeFiles/cmTC_ee74e.dir/src.cxx.o] Error 1\nmake: *** [cmTC_ee74e/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_05da9/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_05da9.dir/build.make CMakeFiles/cmTC_05da9.dir/build\nBuilding CXX object CMakeFiles/cmTC_05da9.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED -fopenmp   -o CMakeFiles/cmTC_05da9.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\nclang: error: unsupported option '-fopenmp'\nmake[1]: *** [CMakeFiles/cmTC_05da9.dir/src.cxx.o] Error 1\nmake: *** [cmTC_05da9/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_5ced7/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_5ced7.dir/build.make CMakeFiles/cmTC_5ced7.dir/build\nBuilding CXX object CMakeFiles/cmTC_5ced7.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED -fopenmp=libomp   -o CMakeFiles/cmTC_5ced7.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\nclang: error: unsupported argument 'libomp' to option 'fopenmp='\nmake[1]: *** [CMakeFiles/cmTC_5ced7.dir/src.cxx.o] Error 1\nmake: *** [cmTC_5ced7/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_578a2/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_578a2.dir/build.make CMakeFiles/cmTC_578a2.dir/build\nBuilding CXX object CMakeFiles/cmTC_578a2.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED /openmp   -o CMakeFiles/cmTC_578a2.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\nclang: error: no such file or directory: '/openmp'\nmake[1]: *** [CMakeFiles/cmTC_578a2.dir/src.cxx.o] Error 1\nmake: *** [cmTC_578a2/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_5ab7a/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_5ab7a.dir/build.make CMakeFiles/cmTC_5ab7a.dir/build\nBuilding CXX object CMakeFiles/cmTC_5ab7a.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED -Qopenmp   -o CMakeFiles/cmTC_5ab7a.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\nclang: error: unknown argument: '-Qopenmp'\nmake[1]: *** [CMakeFiles/cmTC_5ab7a.dir/src.cxx.o] Error 1\nmake: *** [cmTC_5ab7a/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_adc10/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_adc10.dir/build.make CMakeFiles/cmTC_adc10.dir/build\nBuilding CXX object CMakeFiles/cmTC_adc10.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED -openmp   -o CMakeFiles/cmTC_adc10.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx:2:10: fatal error: 'omp.h' file not found\n#include <omp.h>\n         ^\n1 error generated.\nmake[1]: *** [CMakeFiles/cmTC_adc10.dir/src.cxx.o] Error 1\nmake: *** [cmTC_adc10/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_18b96/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_18b96.dir/build.make CMakeFiles/cmTC_18b96.dir/build\nBuilding CXX object CMakeFiles/cmTC_18b96.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED -xopenmp   -o CMakeFiles/cmTC_18b96.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\nclang: error: language not recognized: 'openmp'\nclang: warning: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx: 'linker' input unused [-Wunused-command-line-argument]\nmake[1]: *** [CMakeFiles/cmTC_18b96.dir/src.cxx.o] Error 1\nmake: *** [cmTC_18b96/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_02b66/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_02b66.dir/build.make CMakeFiles/cmTC_02b66.dir/build\nBuilding CXX object CMakeFiles/cmTC_02b66.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED +Oopenmp   -o CMakeFiles/cmTC_02b66.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\nclang: error: no such file or directory: '+Oopenmp'\nmake[1]: *** [CMakeFiles/cmTC_02b66.dir/src.cxx.o] Error 1\nmake: *** [cmTC_02b66/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_62af8/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_62af8.dir/build.make CMakeFiles/cmTC_62af8.dir/build\nBuilding CXX object CMakeFiles/cmTC_62af8.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED -qsmp   -o CMakeFiles/cmTC_62af8.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\nclang: error: unknown argument: '-qsmp'\nmake[1]: *** [CMakeFiles/cmTC_62af8.dir/src.cxx.o] Error 1\nmake: *** [cmTC_62af8/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\nPerforming C++ SOURCE FILE Test OpenMP_FLAG_DETECTED failed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_87e32/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_87e32.dir/build.make CMakeFiles/cmTC_87e32.dir/build\nBuilding CXX object CMakeFiles/cmTC_87e32.dir/src.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -O2 -msse4.1 -DOpenMP_FLAG_DETECTED -mp   -o CMakeFiles/cmTC_87e32.dir/src.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/src.cxx\nclang: error: unknown argument: '-mp'\nmake[1]: *** [CMakeFiles/cmTC_87e32.dir/src.cxx.o] Error 1\nmake: *** [cmTC_87e32/fast] Error 2\n\nSource file was:\n\n#include <omp.h>\nint main() {\n#ifdef _OPENMP\n  return 0;\n#else\n  breaks_on_purpose\n#endif\n}\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeOutput.log",
    "content": "The system is: Darwin - 16.4.0 - x86_64\nCompiling the C compiler identification source file \"CMakeCCompilerId.c\" succeeded.\nCompiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc \nBuild flags: \nId flags:  \n\nThe output was:\n0\n\n\nCompilation of the C compiler identification source \"CMakeCCompilerId.c\" produced \"a.out\"\n\nThe C compiler identification is AppleClang, found in \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/3.8.0/CompilerIdC/a.out\"\n\nCompiling the CXX compiler identification source file \"CMakeCXXCompilerId.cpp\" succeeded.\nCompiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ \nBuild flags: \nId flags:  \n\nThe output was:\n0\n\n\nCompilation of the CXX compiler identification source \"CMakeCXXCompilerId.cpp\" produced \"a.out\"\n\nThe CXX compiler identification is AppleClang, found in \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/3.8.0/CompilerIdCXX/a.out\"\n\nDetermining if the C compiler works passed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_4d76d/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_4d76d.dir/build.make CMakeFiles/cmTC_4d76d.dir/build\nBuilding C object CMakeFiles/cmTC_4d76d.dir/testCCompiler.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc    -o CMakeFiles/cmTC_4d76d.dir/testCCompiler.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/testCCompiler.c\nLinking C executable cmTC_4d76d\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4d76d.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_4d76d.dir/testCCompiler.c.o  -o cmTC_4d76d \n\n\nDetecting C compiler ABI info compiled with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_805f1/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_805f1.dir/build.make CMakeFiles/cmTC_805f1.dir/build\nBuilding C object CMakeFiles/cmTC_805f1.dir/CMakeCCompilerABI.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc    -o CMakeFiles/cmTC_805f1.dir/CMakeCCompilerABI.c.o   -c /usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCCompilerABI.c\nLinking C executable cmTC_805f1\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_805f1.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -Wl,-search_paths_first -Wl,-headerpad_max_install_names  -v -Wl,-v CMakeFiles/cmTC_805f1.dir/CMakeCCompilerABI.c.o  -o cmTC_805f1 \nApple LLVM version 8.1.0 (clang-802.0.41)\nTarget: x86_64-apple-darwin16.4.0\nThread model: posix\nInstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin\n \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld\" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.12.0 -o cmTC_805f1 -search_paths_first -headerpad_max_install_names -v CMakeFiles/cmTC_805f1.dir/CMakeCCompilerABI.c.o -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a\n@(#)PROGRAM:ld  PROJECT:ld64-278.4\nconfigured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)\nLibrary search paths:\n\t/usr/lib\n\t/usr/local/lib\nFramework search paths:\n\t/Library/Frameworks/\n\t/System/Library/Frameworks/\n\n\nParsed C implicit link information from above output:\n  link line regex: [^( *|.*[/\\])(ld|([^/\\]+-)?ld|collect2)[^/\\]*( |$)]\n  ignore line: [Change Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp]\n  ignore line: []\n  ignore line: [Run Build Command:\"/usr/bin/make\" \"cmTC_805f1/fast\"]\n  ignore line: [/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_805f1.dir/build.make CMakeFiles/cmTC_805f1.dir/build]\n  ignore line: [Building C object CMakeFiles/cmTC_805f1.dir/CMakeCCompilerABI.c.o]\n  ignore line: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc    -o CMakeFiles/cmTC_805f1.dir/CMakeCCompilerABI.c.o   -c /usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCCompilerABI.c]\n  ignore line: [Linking C executable cmTC_805f1]\n  ignore line: [/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_805f1.dir/link.txt --verbose=1]\n  ignore line: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -Wl,-search_paths_first -Wl,-headerpad_max_install_names  -v -Wl,-v CMakeFiles/cmTC_805f1.dir/CMakeCCompilerABI.c.o  -o cmTC_805f1 ]\n  ignore line: [Apple LLVM version 8.1.0 (clang-802.0.41)]\n  ignore line: [Target: x86_64-apple-darwin16.4.0]\n  ignore line: [Thread model: posix]\n  ignore line: [InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin]\n  link line: [ \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld\" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.12.0 -o cmTC_805f1 -search_paths_first -headerpad_max_install_names -v CMakeFiles/cmTC_805f1.dir/CMakeCCompilerABI.c.o -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a]\n    arg [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld] ==> ignore\n    arg [-demangle] ==> ignore\n    arg [-lto_library] ==> ignore, skip following value\n    arg [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib] ==> skip value of -lto_library\n    arg [-dynamic] ==> ignore\n    arg [-arch] ==> ignore\n    arg [x86_64] ==> ignore\n    arg [-macosx_version_min] ==> ignore\n    arg [10.12.0] ==> ignore\n    arg [-o] ==> ignore\n    arg [cmTC_805f1] ==> ignore\n    arg [-search_paths_first] ==> ignore\n    arg [-headerpad_max_install_names] ==> ignore\n    arg [-v] ==> ignore\n    arg [CMakeFiles/cmTC_805f1.dir/CMakeCCompilerABI.c.o] ==> ignore\n    arg [-lSystem] ==> lib [System]\n    arg [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a] ==> lib [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a]\n  Library search paths: [;/usr/lib;/usr/local/lib]\n  Framework search paths: [;/Library/Frameworks/;/System/Library/Frameworks/]\n  remove lib [System]\n  remove lib [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a]\n  collapse library dir [/usr/lib] ==> [/usr/lib]\n  collapse library dir [/usr/local/lib] ==> [/usr/local/lib]\n  collapse framework dir [/Library/Frameworks/] ==> [/Library/Frameworks]\n  collapse framework dir [/System/Library/Frameworks/] ==> [/System/Library/Frameworks]\n  implicit libs: []\n  implicit dirs: [/usr/lib;/usr/local/lib]\n  implicit fwks: [/Library/Frameworks;/System/Library/Frameworks]\n\n\n\n\nDetecting C [-std=c11] compiler features compiled with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_15ea5/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_15ea5.dir/build.make CMakeFiles/cmTC_15ea5.dir/build\nBuilding C object CMakeFiles/cmTC_15ea5.dir/feature_tests.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -std=c11 -o CMakeFiles/cmTC_15ea5.dir/feature_tests.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/feature_tests.c\nLinking C executable cmTC_15ea5\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_15ea5.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_15ea5.dir/feature_tests.c.o  -o cmTC_15ea5 \n\n\n    Feature record: C_FEATURE:1c_function_prototypes\n    Feature record: C_FEATURE:1c_restrict\n    Feature record: C_FEATURE:1c_static_assert\n    Feature record: C_FEATURE:1c_variadic_macros\n\n\nDetecting C [-std=c99] compiler features compiled with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_c53c1/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_c53c1.dir/build.make CMakeFiles/cmTC_c53c1.dir/build\nBuilding C object CMakeFiles/cmTC_c53c1.dir/feature_tests.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -std=c99 -o CMakeFiles/cmTC_c53c1.dir/feature_tests.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/feature_tests.c\nLinking C executable cmTC_c53c1\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c53c1.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_c53c1.dir/feature_tests.c.o  -o cmTC_c53c1 \n\n\n    Feature record: C_FEATURE:1c_function_prototypes\n    Feature record: C_FEATURE:1c_restrict\n    Feature record: C_FEATURE:0c_static_assert\n    Feature record: C_FEATURE:1c_variadic_macros\n\n\nDetecting C [-std=c90] compiler features compiled with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_7e8f7/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_7e8f7.dir/build.make CMakeFiles/cmTC_7e8f7.dir/build\nBuilding C object CMakeFiles/cmTC_7e8f7.dir/feature_tests.c.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -std=c90 -o CMakeFiles/cmTC_7e8f7.dir/feature_tests.c.o   -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/feature_tests.c\nLinking C executable cmTC_7e8f7\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7e8f7.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_7e8f7.dir/feature_tests.c.o  -o cmTC_7e8f7 \n\n\n    Feature record: C_FEATURE:1c_function_prototypes\n    Feature record: C_FEATURE:0c_restrict\n    Feature record: C_FEATURE:0c_static_assert\n    Feature record: C_FEATURE:0c_variadic_macros\nDetermining if the CXX compiler works passed with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_f7354/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_f7354.dir/build.make CMakeFiles/cmTC_f7354.dir/build\nBuilding CXX object CMakeFiles/cmTC_f7354.dir/testCXXCompiler.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++     -o CMakeFiles/cmTC_f7354.dir/testCXXCompiler.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx\nLinking CXX executable cmTC_f7354\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f7354.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_f7354.dir/testCXXCompiler.cxx.o  -o cmTC_f7354 \n\n\nDetecting CXX compiler ABI info compiled with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_612f4/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_612f4.dir/build.make CMakeFiles/cmTC_612f4.dir/build\nBuilding CXX object CMakeFiles/cmTC_612f4.dir/CMakeCXXCompilerABI.cpp.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++     -o CMakeFiles/cmTC_612f4.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCXXCompilerABI.cpp\nLinking CXX executable cmTC_612f4\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_612f4.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names  -v -Wl,-v CMakeFiles/cmTC_612f4.dir/CMakeCXXCompilerABI.cpp.o  -o cmTC_612f4 \nApple LLVM version 8.1.0 (clang-802.0.41)\nTarget: x86_64-apple-darwin16.4.0\nThread model: posix\nInstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin\n \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld\" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.12.0 -o cmTC_612f4 -search_paths_first -headerpad_max_install_names -v CMakeFiles/cmTC_612f4.dir/CMakeCXXCompilerABI.cpp.o -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a\n@(#)PROGRAM:ld  PROJECT:ld64-278.4\nconfigured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)\nLibrary search paths:\n\t/usr/lib\n\t/usr/local/lib\nFramework search paths:\n\t/Library/Frameworks/\n\t/System/Library/Frameworks/\n\n\nParsed CXX implicit link information from above output:\n  link line regex: [^( *|.*[/\\])(ld|([^/\\]+-)?ld|collect2)[^/\\]*( |$)]\n  ignore line: [Change Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp]\n  ignore line: []\n  ignore line: [Run Build Command:\"/usr/bin/make\" \"cmTC_612f4/fast\"]\n  ignore line: [/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_612f4.dir/build.make CMakeFiles/cmTC_612f4.dir/build]\n  ignore line: [Building CXX object CMakeFiles/cmTC_612f4.dir/CMakeCXXCompilerABI.cpp.o]\n  ignore line: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++     -o CMakeFiles/cmTC_612f4.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCXXCompilerABI.cpp]\n  ignore line: [Linking CXX executable cmTC_612f4]\n  ignore line: [/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_612f4.dir/link.txt --verbose=1]\n  ignore line: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names  -v -Wl,-v CMakeFiles/cmTC_612f4.dir/CMakeCXXCompilerABI.cpp.o  -o cmTC_612f4 ]\n  ignore line: [Apple LLVM version 8.1.0 (clang-802.0.41)]\n  ignore line: [Target: x86_64-apple-darwin16.4.0]\n  ignore line: [Thread model: posix]\n  ignore line: [InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin]\n  link line: [ \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld\" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.12.0 -o cmTC_612f4 -search_paths_first -headerpad_max_install_names -v CMakeFiles/cmTC_612f4.dir/CMakeCXXCompilerABI.cpp.o -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a]\n    arg [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld] ==> ignore\n    arg [-demangle] ==> ignore\n    arg [-lto_library] ==> ignore, skip following value\n    arg [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib] ==> skip value of -lto_library\n    arg [-dynamic] ==> ignore\n    arg [-arch] ==> ignore\n    arg [x86_64] ==> ignore\n    arg [-macosx_version_min] ==> ignore\n    arg [10.12.0] ==> ignore\n    arg [-o] ==> ignore\n    arg [cmTC_612f4] ==> ignore\n    arg [-search_paths_first] ==> ignore\n    arg [-headerpad_max_install_names] ==> ignore\n    arg [-v] ==> ignore\n    arg [CMakeFiles/cmTC_612f4.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore\n    arg [-lc++] ==> lib [c++]\n    arg [-lSystem] ==> lib [System]\n    arg [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a] ==> lib [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a]\n  Library search paths: [;/usr/lib;/usr/local/lib]\n  Framework search paths: [;/Library/Frameworks/;/System/Library/Frameworks/]\n  remove lib [System]\n  remove lib [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a]\n  collapse library dir [/usr/lib] ==> [/usr/lib]\n  collapse library dir [/usr/local/lib] ==> [/usr/local/lib]\n  collapse framework dir [/Library/Frameworks/] ==> [/Library/Frameworks]\n  collapse framework dir [/System/Library/Frameworks/] ==> [/System/Library/Frameworks]\n  implicit libs: [c++]\n  implicit dirs: [/usr/lib;/usr/local/lib]\n  implicit fwks: [/Library/Frameworks;/System/Library/Frameworks]\n\n\n\n\nDetecting CXX [-std=c++1z] compiler features compiled with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_66d84/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_66d84.dir/build.make CMakeFiles/cmTC_66d84.dir/build\nBuilding CXX object CMakeFiles/cmTC_66d84.dir/feature_tests.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -std=c++1z -o CMakeFiles/cmTC_66d84.dir/feature_tests.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/feature_tests.cxx\nLinking CXX executable cmTC_66d84\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_66d84.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_66d84.dir/feature_tests.cxx.o  -o cmTC_66d84 \n\n\n    Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers\n    Feature record: CXX_FEATURE:1cxx_alias_templates\n    Feature record: CXX_FEATURE:1cxx_alignas\n    Feature record: CXX_FEATURE:1cxx_alignof\n    Feature record: CXX_FEATURE:1cxx_attributes\n    Feature record: CXX_FEATURE:1cxx_attribute_deprecated\n    Feature record: CXX_FEATURE:1cxx_auto_type\n    Feature record: CXX_FEATURE:1cxx_binary_literals\n    Feature record: CXX_FEATURE:1cxx_constexpr\n    Feature record: CXX_FEATURE:1cxx_contextual_conversions\n    Feature record: CXX_FEATURE:1cxx_decltype\n    Feature record: CXX_FEATURE:1cxx_decltype_auto\n    Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types\n    Feature record: CXX_FEATURE:1cxx_default_function_template_args\n    Feature record: CXX_FEATURE:1cxx_defaulted_functions\n    Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers\n    Feature record: CXX_FEATURE:1cxx_delegating_constructors\n    Feature record: CXX_FEATURE:1cxx_deleted_functions\n    Feature record: CXX_FEATURE:1cxx_digit_separators\n    Feature record: CXX_FEATURE:1cxx_enum_forward_declarations\n    Feature record: CXX_FEATURE:1cxx_explicit_conversions\n    Feature record: CXX_FEATURE:1cxx_extended_friend_declarations\n    Feature record: CXX_FEATURE:1cxx_extern_templates\n    Feature record: CXX_FEATURE:1cxx_final\n    Feature record: CXX_FEATURE:1cxx_func_identifier\n    Feature record: CXX_FEATURE:1cxx_generalized_initializers\n    Feature record: CXX_FEATURE:1cxx_generic_lambdas\n    Feature record: CXX_FEATURE:1cxx_inheriting_constructors\n    Feature record: CXX_FEATURE:1cxx_inline_namespaces\n    Feature record: CXX_FEATURE:1cxx_lambdas\n    Feature record: CXX_FEATURE:1cxx_lambda_init_captures\n    Feature record: CXX_FEATURE:1cxx_local_type_template_args\n    Feature record: CXX_FEATURE:1cxx_long_long_type\n    Feature record: CXX_FEATURE:1cxx_noexcept\n    Feature record: CXX_FEATURE:1cxx_nonstatic_member_init\n    Feature record: CXX_FEATURE:1cxx_nullptr\n    Feature record: CXX_FEATURE:1cxx_override\n    Feature record: CXX_FEATURE:1cxx_range_for\n    Feature record: CXX_FEATURE:1cxx_raw_string_literals\n    Feature record: CXX_FEATURE:1cxx_reference_qualified_functions\n    Feature record: CXX_FEATURE:1cxx_relaxed_constexpr\n    Feature record: CXX_FEATURE:1cxx_return_type_deduction\n    Feature record: CXX_FEATURE:1cxx_right_angle_brackets\n    Feature record: CXX_FEATURE:1cxx_rvalue_references\n    Feature record: CXX_FEATURE:1cxx_sizeof_member\n    Feature record: CXX_FEATURE:1cxx_static_assert\n    Feature record: CXX_FEATURE:1cxx_strong_enums\n    Feature record: CXX_FEATURE:1cxx_template_template_parameters\n    Feature record: CXX_FEATURE:1cxx_thread_local\n    Feature record: CXX_FEATURE:1cxx_trailing_return_types\n    Feature record: CXX_FEATURE:1cxx_unicode_literals\n    Feature record: CXX_FEATURE:1cxx_uniform_initialization\n    Feature record: CXX_FEATURE:1cxx_unrestricted_unions\n    Feature record: CXX_FEATURE:1cxx_user_literals\n    Feature record: CXX_FEATURE:1cxx_variable_templates\n    Feature record: CXX_FEATURE:1cxx_variadic_macros\n    Feature record: CXX_FEATURE:1cxx_variadic_templates\n\n\nDetecting CXX [-std=c++14] compiler features compiled with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_95897/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_95897.dir/build.make CMakeFiles/cmTC_95897.dir/build\nBuilding CXX object CMakeFiles/cmTC_95897.dir/feature_tests.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -std=c++14 -o CMakeFiles/cmTC_95897.dir/feature_tests.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/feature_tests.cxx\nLinking CXX executable cmTC_95897\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_95897.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_95897.dir/feature_tests.cxx.o  -o cmTC_95897 \n\n\n    Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers\n    Feature record: CXX_FEATURE:1cxx_alias_templates\n    Feature record: CXX_FEATURE:1cxx_alignas\n    Feature record: CXX_FEATURE:1cxx_alignof\n    Feature record: CXX_FEATURE:1cxx_attributes\n    Feature record: CXX_FEATURE:1cxx_attribute_deprecated\n    Feature record: CXX_FEATURE:1cxx_auto_type\n    Feature record: CXX_FEATURE:1cxx_binary_literals\n    Feature record: CXX_FEATURE:1cxx_constexpr\n    Feature record: CXX_FEATURE:1cxx_contextual_conversions\n    Feature record: CXX_FEATURE:1cxx_decltype\n    Feature record: CXX_FEATURE:1cxx_decltype_auto\n    Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types\n    Feature record: CXX_FEATURE:1cxx_default_function_template_args\n    Feature record: CXX_FEATURE:1cxx_defaulted_functions\n    Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers\n    Feature record: CXX_FEATURE:1cxx_delegating_constructors\n    Feature record: CXX_FEATURE:1cxx_deleted_functions\n    Feature record: CXX_FEATURE:1cxx_digit_separators\n    Feature record: CXX_FEATURE:1cxx_enum_forward_declarations\n    Feature record: CXX_FEATURE:1cxx_explicit_conversions\n    Feature record: CXX_FEATURE:1cxx_extended_friend_declarations\n    Feature record: CXX_FEATURE:1cxx_extern_templates\n    Feature record: CXX_FEATURE:1cxx_final\n    Feature record: CXX_FEATURE:1cxx_func_identifier\n    Feature record: CXX_FEATURE:1cxx_generalized_initializers\n    Feature record: CXX_FEATURE:1cxx_generic_lambdas\n    Feature record: CXX_FEATURE:1cxx_inheriting_constructors\n    Feature record: CXX_FEATURE:1cxx_inline_namespaces\n    Feature record: CXX_FEATURE:1cxx_lambdas\n    Feature record: CXX_FEATURE:1cxx_lambda_init_captures\n    Feature record: CXX_FEATURE:1cxx_local_type_template_args\n    Feature record: CXX_FEATURE:1cxx_long_long_type\n    Feature record: CXX_FEATURE:1cxx_noexcept\n    Feature record: CXX_FEATURE:1cxx_nonstatic_member_init\n    Feature record: CXX_FEATURE:1cxx_nullptr\n    Feature record: CXX_FEATURE:1cxx_override\n    Feature record: CXX_FEATURE:1cxx_range_for\n    Feature record: CXX_FEATURE:1cxx_raw_string_literals\n    Feature record: CXX_FEATURE:1cxx_reference_qualified_functions\n    Feature record: CXX_FEATURE:1cxx_relaxed_constexpr\n    Feature record: CXX_FEATURE:1cxx_return_type_deduction\n    Feature record: CXX_FEATURE:1cxx_right_angle_brackets\n    Feature record: CXX_FEATURE:1cxx_rvalue_references\n    Feature record: CXX_FEATURE:1cxx_sizeof_member\n    Feature record: CXX_FEATURE:1cxx_static_assert\n    Feature record: CXX_FEATURE:1cxx_strong_enums\n    Feature record: CXX_FEATURE:1cxx_template_template_parameters\n    Feature record: CXX_FEATURE:1cxx_thread_local\n    Feature record: CXX_FEATURE:1cxx_trailing_return_types\n    Feature record: CXX_FEATURE:1cxx_unicode_literals\n    Feature record: CXX_FEATURE:1cxx_uniform_initialization\n    Feature record: CXX_FEATURE:1cxx_unrestricted_unions\n    Feature record: CXX_FEATURE:1cxx_user_literals\n    Feature record: CXX_FEATURE:1cxx_variable_templates\n    Feature record: CXX_FEATURE:1cxx_variadic_macros\n    Feature record: CXX_FEATURE:1cxx_variadic_templates\n\n\nDetecting CXX [-std=c++11] compiler features compiled with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_8dcc6/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_8dcc6.dir/build.make CMakeFiles/cmTC_8dcc6.dir/build\nBuilding CXX object CMakeFiles/cmTC_8dcc6.dir/feature_tests.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -std=c++11 -o CMakeFiles/cmTC_8dcc6.dir/feature_tests.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/feature_tests.cxx\nLinking CXX executable cmTC_8dcc6\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_8dcc6.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_8dcc6.dir/feature_tests.cxx.o  -o cmTC_8dcc6 \n\n\n    Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers\n    Feature record: CXX_FEATURE:1cxx_alias_templates\n    Feature record: CXX_FEATURE:1cxx_alignas\n    Feature record: CXX_FEATURE:1cxx_alignof\n    Feature record: CXX_FEATURE:1cxx_attributes\n    Feature record: CXX_FEATURE:0cxx_attribute_deprecated\n    Feature record: CXX_FEATURE:1cxx_auto_type\n    Feature record: CXX_FEATURE:0cxx_binary_literals\n    Feature record: CXX_FEATURE:1cxx_constexpr\n    Feature record: CXX_FEATURE:0cxx_contextual_conversions\n    Feature record: CXX_FEATURE:1cxx_decltype\n    Feature record: CXX_FEATURE:0cxx_decltype_auto\n    Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types\n    Feature record: CXX_FEATURE:1cxx_default_function_template_args\n    Feature record: CXX_FEATURE:1cxx_defaulted_functions\n    Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers\n    Feature record: CXX_FEATURE:1cxx_delegating_constructors\n    Feature record: CXX_FEATURE:1cxx_deleted_functions\n    Feature record: CXX_FEATURE:0cxx_digit_separators\n    Feature record: CXX_FEATURE:1cxx_enum_forward_declarations\n    Feature record: CXX_FEATURE:1cxx_explicit_conversions\n    Feature record: CXX_FEATURE:1cxx_extended_friend_declarations\n    Feature record: CXX_FEATURE:1cxx_extern_templates\n    Feature record: CXX_FEATURE:1cxx_final\n    Feature record: CXX_FEATURE:1cxx_func_identifier\n    Feature record: CXX_FEATURE:1cxx_generalized_initializers\n    Feature record: CXX_FEATURE:0cxx_generic_lambdas\n    Feature record: CXX_FEATURE:1cxx_inheriting_constructors\n    Feature record: CXX_FEATURE:1cxx_inline_namespaces\n    Feature record: CXX_FEATURE:1cxx_lambdas\n    Feature record: CXX_FEATURE:0cxx_lambda_init_captures\n    Feature record: CXX_FEATURE:1cxx_local_type_template_args\n    Feature record: CXX_FEATURE:1cxx_long_long_type\n    Feature record: CXX_FEATURE:1cxx_noexcept\n    Feature record: CXX_FEATURE:1cxx_nonstatic_member_init\n    Feature record: CXX_FEATURE:1cxx_nullptr\n    Feature record: CXX_FEATURE:1cxx_override\n    Feature record: CXX_FEATURE:1cxx_range_for\n    Feature record: CXX_FEATURE:1cxx_raw_string_literals\n    Feature record: CXX_FEATURE:1cxx_reference_qualified_functions\n    Feature record: CXX_FEATURE:0cxx_relaxed_constexpr\n    Feature record: CXX_FEATURE:0cxx_return_type_deduction\n    Feature record: CXX_FEATURE:1cxx_right_angle_brackets\n    Feature record: CXX_FEATURE:1cxx_rvalue_references\n    Feature record: CXX_FEATURE:1cxx_sizeof_member\n    Feature record: CXX_FEATURE:1cxx_static_assert\n    Feature record: CXX_FEATURE:1cxx_strong_enums\n    Feature record: CXX_FEATURE:1cxx_template_template_parameters\n    Feature record: CXX_FEATURE:1cxx_thread_local\n    Feature record: CXX_FEATURE:1cxx_trailing_return_types\n    Feature record: CXX_FEATURE:1cxx_unicode_literals\n    Feature record: CXX_FEATURE:1cxx_uniform_initialization\n    Feature record: CXX_FEATURE:1cxx_unrestricted_unions\n    Feature record: CXX_FEATURE:1cxx_user_literals\n    Feature record: CXX_FEATURE:0cxx_variable_templates\n    Feature record: CXX_FEATURE:1cxx_variadic_macros\n    Feature record: CXX_FEATURE:1cxx_variadic_templates\n\n\nDetecting CXX [-std=c++98] compiler features compiled with the following output:\nChange Dir: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/CMakeTmp\n\nRun Build Command:\"/usr/bin/make\" \"cmTC_a8a5f/fast\"\n/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_a8a5f.dir/build.make CMakeFiles/cmTC_a8a5f.dir/build\nBuilding CXX object CMakeFiles/cmTC_a8a5f.dir/feature_tests.cxx.o\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -std=c++98 -o CMakeFiles/cmTC_a8a5f.dir/feature_tests.cxx.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/feature_tests.cxx\nLinking CXX executable cmTC_a8a5f\n/usr/local/Cellar/cmake/3.8.0/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a8a5f.dir/link.txt --verbose=1\n/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_a8a5f.dir/feature_tests.cxx.o  -o cmTC_a8a5f \n\n\n    Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers\n    Feature record: CXX_FEATURE:0cxx_alias_templates\n    Feature record: CXX_FEATURE:0cxx_alignas\n    Feature record: CXX_FEATURE:0cxx_alignof\n    Feature record: CXX_FEATURE:0cxx_attributes\n    Feature record: CXX_FEATURE:0cxx_attribute_deprecated\n    Feature record: CXX_FEATURE:0cxx_auto_type\n    Feature record: CXX_FEATURE:0cxx_binary_literals\n    Feature record: CXX_FEATURE:0cxx_constexpr\n    Feature record: CXX_FEATURE:0cxx_contextual_conversions\n    Feature record: CXX_FEATURE:0cxx_decltype\n    Feature record: CXX_FEATURE:0cxx_decltype_auto\n    Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types\n    Feature record: CXX_FEATURE:0cxx_default_function_template_args\n    Feature record: CXX_FEATURE:0cxx_defaulted_functions\n    Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers\n    Feature record: CXX_FEATURE:0cxx_delegating_constructors\n    Feature record: CXX_FEATURE:0cxx_deleted_functions\n    Feature record: CXX_FEATURE:0cxx_digit_separators\n    Feature record: CXX_FEATURE:0cxx_enum_forward_declarations\n    Feature record: CXX_FEATURE:0cxx_explicit_conversions\n    Feature record: CXX_FEATURE:0cxx_extended_friend_declarations\n    Feature record: CXX_FEATURE:0cxx_extern_templates\n    Feature record: CXX_FEATURE:0cxx_final\n    Feature record: CXX_FEATURE:0cxx_func_identifier\n    Feature record: CXX_FEATURE:0cxx_generalized_initializers\n    Feature record: CXX_FEATURE:0cxx_generic_lambdas\n    Feature record: CXX_FEATURE:0cxx_inheriting_constructors\n    Feature record: CXX_FEATURE:0cxx_inline_namespaces\n    Feature record: CXX_FEATURE:0cxx_lambdas\n    Feature record: CXX_FEATURE:0cxx_lambda_init_captures\n    Feature record: CXX_FEATURE:0cxx_local_type_template_args\n    Feature record: CXX_FEATURE:0cxx_long_long_type\n    Feature record: CXX_FEATURE:0cxx_noexcept\n    Feature record: CXX_FEATURE:0cxx_nonstatic_member_init\n    Feature record: CXX_FEATURE:0cxx_nullptr\n    Feature record: CXX_FEATURE:0cxx_override\n    Feature record: CXX_FEATURE:0cxx_range_for\n    Feature record: CXX_FEATURE:0cxx_raw_string_literals\n    Feature record: CXX_FEATURE:0cxx_reference_qualified_functions\n    Feature record: CXX_FEATURE:0cxx_relaxed_constexpr\n    Feature record: CXX_FEATURE:0cxx_return_type_deduction\n    Feature record: CXX_FEATURE:0cxx_right_angle_brackets\n    Feature record: CXX_FEATURE:0cxx_rvalue_references\n    Feature record: CXX_FEATURE:0cxx_sizeof_member\n    Feature record: CXX_FEATURE:0cxx_static_assert\n    Feature record: CXX_FEATURE:0cxx_strong_enums\n    Feature record: CXX_FEATURE:1cxx_template_template_parameters\n    Feature record: CXX_FEATURE:0cxx_thread_local\n    Feature record: CXX_FEATURE:0cxx_trailing_return_types\n    Feature record: CXX_FEATURE:0cxx_unicode_literals\n    Feature record: CXX_FEATURE:0cxx_uniform_initialization\n    Feature record: CXX_FEATURE:0cxx_unrestricted_unions\n    Feature record: CXX_FEATURE:0cxx_user_literals\n    Feature record: CXX_FEATURE:0cxx_variable_templates\n    Feature record: CXX_FEATURE:0cxx_variadic_macros\n    Feature record: CXX_FEATURE:0cxx_variadic_templates\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/FindOpenMP/ompver.c",
    "content": "\n#include <stdio.h>\n#include <omp.h>\nconst char ompver_str[] = { 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'M',\n                            'P', '-', 'd', 'a', 't', 'e', '[',\n                            ('0' + ((_OPENMP/100000)%10)),\n                            ('0' + ((_OPENMP/10000)%10)),\n                            ('0' + ((_OPENMP/1000)%10)),\n                            ('0' + ((_OPENMP/100)%10)),\n                            ('0' + ((_OPENMP/10)%10)),\n                            ('0' + ((_OPENMP/1)%10)),\n                            ']', '\\0' };\nint main(int argc, char *argv[])\n{\n  printf(\"%s\\n\", ompver_str);\n  return 0;\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/FindOpenMP/ompver.cpp",
    "content": "\n#include <stdio.h>\n#include <omp.h>\nconst char ompver_str[] = { 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'M',\n                            'P', '-', 'd', 'a', 't', 'e', '[',\n                            ('0' + ((_OPENMP/100000)%10)),\n                            ('0' + ((_OPENMP/10000)%10)),\n                            ('0' + ((_OPENMP/1000)%10)),\n                            ('0' + ((_OPENMP/100)%10)),\n                            ('0' + ((_OPENMP/10)%10)),\n                            ('0' + ((_OPENMP/1)%10)),\n                            ']', '\\0' };\nint main(int argc, char *argv[])\n{\n  printf(\"%s\\n\", ompver_str);\n  return 0;\n}\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/Makefile.cmake",
    "content": "# CMAKE generated file: DO NOT EDIT!\n# Generated by \"Unix Makefiles\" Generator, CMake Version 3.8\n\n# The generator used is:\nset(CMAKE_DEPENDS_GENERATOR \"Unix Makefiles\")\n\n# The top level Makefile was generated from the following files:\nset(CMAKE_MAKEFILE_DEPENDS\n  \"CMakeCache.txt\"\n  \"../CMakeLists.txt\"\n  \"CMakeFiles/3.8.0/CMakeCCompiler.cmake\"\n  \"CMakeFiles/3.8.0/CMakeCXXCompiler.cmake\"\n  \"CMakeFiles/3.8.0/CMakeSystem.cmake\"\n  \"CMakeFiles/FindOpenMP/ompver.c\"\n  \"CMakeFiles/FindOpenMP/ompver.cpp\"\n  \"CMakeFiles/feature_tests.c\"\n  \"CMakeFiles/feature_tests.cxx\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCCompiler.cmake.in\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCCompilerABI.c\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCInformation.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCXXCompiler.cmake.in\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCXXCompilerABI.cpp\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCXXInformation.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCommonLanguageInclude.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeCompilerIdDetection.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeDetermineCCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeDetermineCompileFeatures.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeDetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeDetermineCompilerABI.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeDetermineCompilerId.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeDetermineSystem.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeFindBinUtils.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeGenericSystem.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeLanguageInformation.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeParseImplicitLinkInfo.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeSystem.cmake.in\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeSystemSpecificInformation.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeTestCCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeTestCXXCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeTestCompilerCommon.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CMakeUnixFindMake.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CheckCSourceCompiles.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/CheckCXXSourceCompiles.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/ADSP-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/ARMCC-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/AppleClang-C-FeatureTests.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/AppleClang-C.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/AppleClang-CXX-FeatureTests.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/AppleClang-CXX.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/AppleClang-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Borland-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Bruce-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Clang-CXX-TestableFeatures.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Clang-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Clang-DetermineCompilerInternal.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Clang.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Compaq-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Cray-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Embarcadero-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Fujitsu-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/GHS-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/GNU-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/GNU.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/HP-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/HP-CXX-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/IAR-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Intel-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/MIPSpro-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/MSVC-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/NVIDIA-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/PGI-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/PathScale-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/SCO-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/SDCC-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/SunPro-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/TI-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/Watcom-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/XL-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/XL-CXX-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/zOS-C-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/FindOpenMP.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/FindPackageMessage.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Internal/FeatureTesting.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Platform/Darwin-AppleClang-C.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Platform/Darwin-AppleClang-CXX.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Platform/Darwin-Clang-C.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Platform/Darwin-Clang-CXX.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Platform/Darwin-Clang.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Platform/Darwin-Determine-CXX.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Platform/Darwin-Initialize.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Platform/Darwin.cmake\"\n  \"/usr/local/Cellar/cmake/3.8.0/share/cmake/Modules/Platform/UnixPaths.cmake\"\n  )\n\n# The corresponding makefile is:\nset(CMAKE_MAKEFILE_OUTPUTS\n  \"Makefile\"\n  \"CMakeFiles/cmake.check_cache\"\n  )\n\n# Byproducts of CMake generate step:\nset(CMAKE_MAKEFILE_PRODUCTS\n  \"CMakeFiles/3.8.0/CMakeSystem.cmake\"\n  \"CMakeFiles/3.8.0/CMakeCCompiler.cmake\"\n  \"CMakeFiles/3.8.0/CMakeCXXCompiler.cmake\"\n  \"CMakeFiles/3.8.0/CMakeCCompiler.cmake\"\n  \"CMakeFiles/3.8.0/CMakeCXXCompiler.cmake\"\n  \"CMakeFiles/CMakeDirectoryInformation.cmake\"\n  )\n\n# Dependency information for all targets:\nset(CMAKE_DEPEND_INFO_FILES\n  \"CMakeFiles/seetaFace.dir/DependInfo.cmake\"\n  )\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/Makefile2",
    "content": "# CMAKE generated file: DO NOT EDIT!\n# Generated by \"Unix Makefiles\" Generator, CMake Version 3.8\n\n# Default target executed when no arguments are given to make.\ndefault_target: all\n\n.PHONY : default_target\n\n# The main recursive all target\nall:\n\n.PHONY : all\n\n# The main recursive preinstall target\npreinstall:\n\n.PHONY : preinstall\n\n#=============================================================================\n# Special targets provided by cmake.\n\n# Disable implicit rules so canonical targets will work.\n.SUFFIXES:\n\n\n# Remove some rules from gmake that .SUFFIXES does not remove.\nSUFFIXES =\n\n.SUFFIXES: .hpux_make_needs_suffix_list\n\n\n# Suppress display of executed commands.\n$(VERBOSE).SILENT:\n\n\n# A target that is always out of date.\ncmake_force:\n\n.PHONY : cmake_force\n\n#=============================================================================\n# Set environment variables for the build.\n\n# The shell in which to execute make rules.\nSHELL = /bin/sh\n\n# The CMake executable.\nCMAKE_COMMAND = /usr/local/Cellar/cmake/3.8.0/bin/cmake\n\n# The command to remove a file.\nRM = /usr/local/Cellar/cmake/3.8.0/bin/cmake -E remove -f\n\n# Escaping for special characters.\nEQUALS = =\n\n# The top-level source directory on which CMake was run.\nCMAKE_SOURCE_DIR = /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace\n\n# The top-level build directory on which CMake was run.\nCMAKE_BINARY_DIR = /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build\n\n#=============================================================================\n# Target rules for target CMakeFiles/seetaFace.dir\n\n# All Build rule for target.\nCMakeFiles/seetaFace.dir/all:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/depend\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/build\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12 \"Built target seetaFace\"\n.PHONY : CMakeFiles/seetaFace.dir/all\n\n# Include target in all.\nall: CMakeFiles/seetaFace.dir/all\n\n.PHONY : all\n\n# Build rule for subdir invocation for target.\nCMakeFiles/seetaFace.dir/rule: cmake_check_build_system\n\t$(CMAKE_COMMAND) -E cmake_progress_start /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles 12\n\t$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/seetaFace.dir/all\n\t$(CMAKE_COMMAND) -E cmake_progress_start /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles 0\n.PHONY : CMakeFiles/seetaFace.dir/rule\n\n# Convenience name for target.\nseetaFace: CMakeFiles/seetaFace.dir/rule\n\n.PHONY : seetaFace\n\n# clean rule for target.\nCMakeFiles/seetaFace.dir/clean:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/clean\n.PHONY : CMakeFiles/seetaFace.dir/clean\n\n# clean rule for target.\nclean: CMakeFiles/seetaFace.dir/clean\n\n.PHONY : clean\n\n#=============================================================================\n# Special targets to cleanup operation of make.\n\n# Special rule to run CMake to check the build system integrity.\n# No rule that depends on this can have commands that come from listfiles\n# because they might be regenerated.\ncmake_check_build_system:\n\t$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0\n.PHONY : cmake_check_build_system\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/TargetDirectories.txt",
    "content": "/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/install/local.dir\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/install/strip.dir\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/install.dir\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/list_install_components.dir\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/rebuild_cache.dir\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/edit_cache.dir\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/cmake.check_cache",
    "content": "# This file is generated by cmake for dependency checking of the CMakeCache.txt file\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/feature_tests.c",
    "content": "\n  const char features[] = {\"\\n\"\n\"C_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400\n\"1\"\n#else\n\"0\"\n#endif\n\"c_function_prototypes\\n\"\n\"C_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n\"1\"\n#else\n\"0\"\n#endif\n\"c_restrict\\n\"\n\"C_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L\n\"1\"\n#else\n\"0\"\n#endif\n\"c_static_assert\\n\"\n\"C_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n\"1\"\n#else\n\"0\"\n#endif\n\"c_variadic_macros\\n\"\n\n};\n\nint main(int argc, char** argv) { (void)argv; return features[argc]; }\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/feature_tests.cxx",
    "content": "\n  const char features[] = {\"\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_aggregate_nsdmi)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_aggregate_default_initializers\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_alias_templates)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_alias_templates\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_alignas)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_alignas\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_alignas)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_alignof\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_attributes)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_attributes\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_attribute_deprecated\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_auto_type)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_auto_type\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_binary_literals)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_binary_literals\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_constexpr)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_constexpr\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_contextual_conversions)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_contextual_conversions\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_decltype)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_decltype\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_decltype_auto\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_decltype_incomplete_return_types)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_decltype_incomplete_return_types\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_default_function_template_args)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_default_function_template_args\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_defaulted_functions)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_defaulted_functions\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_defaulted_functions)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_defaulted_move_initializers\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_delegating_constructors)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_delegating_constructors\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_deleted_functions)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_deleted_functions\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_digit_separators\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_enum_forward_declarations\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_explicit_conversions)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_explicit_conversions\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_extended_friend_declarations\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_extern_templates\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_override_control)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_final\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_func_identifier\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_generalized_initializers)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_generalized_initializers\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_generic_lambdas\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_inheriting_constructors)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_inheriting_constructors\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_inline_namespaces\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_lambdas)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_lambdas\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_init_captures)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_lambda_init_captures\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_local_type_template_args)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_local_type_template_args\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_long_long_type\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_noexcept)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_noexcept\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_nonstatic_member_init)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_nonstatic_member_init\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_nullptr)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_nullptr\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_override_control)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_override\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_range_for)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_range_for\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_raw_string_literals)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_raw_string_literals\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_reference_qualified_functions)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_reference_qualified_functions\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_relaxed_constexpr)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_relaxed_constexpr\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_return_type_deduction)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_return_type_deduction\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_right_angle_brackets\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_rvalue_references)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_rvalue_references\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_sizeof_member\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_static_assert)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_static_assert\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_strong_enums)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_strong_enums\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 199711L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_template_template_parameters\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_thread_local)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_thread_local\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_trailing_return)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_trailing_return_types\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_unicode_literals)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_unicode_literals\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_generalized_initializers)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_uniform_initialization\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_unrestricted_unions)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_unrestricted_unions\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_user_literals)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_user_literals\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_variable_templates)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_variable_templates\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_variadic_macros\\n\"\n\"CXX_FEATURE:\"\n#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_variadic_templates)\n\"1\"\n#else\n\"0\"\n#endif\n\"cxx_variadic_templates\\n\"\n\n};\n\nint main(int argc, char** argv) { (void)argv; return features[argc]; }\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/progress.marks",
    "content": "12\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/CXX.includecache",
    "content": "#IncludeRegexLine: ^[ \t]*[#%][ \t]*(include|import)[ \t]*[<\"]([^\">]+)([\">])\n\n#IncludeRegexScan: ^.*$\n\n#IncludeRegexComplain: ^$\n\n#IncludeRegexTransform: \n\n../include/classifier.h\ncommon.h\n../include/common.h\nfeature_map.h\n../include/feature_map.h\n\n../include/classifier/lab_boosted_classifier.h\nalgorithm\n-\ncstdint\n-\nmemory\n-\nvector\n-\nclassifier.h\n../include/classifier/classifier.h\nfeat/lab_feature_map.h\n../include/classifier/feat/lab_feature_map.h\n\n../include/classifier/mlp.h\ncmath\n-\ncstdint\n-\nmemory\n-\nalgorithm\n-\nvector\n-\nutil/math_func.h\n../include/classifier/util/math_func.h\n\n../include/classifier/surf_mlp.h\nmemory\n-\nvector\n-\nclassifier.h\n../include/classifier/classifier.h\nclassifier/mlp.h\n../include/classifier/classifier/mlp.h\nfeat/surf_feature_map.h\n../include/classifier/feat/surf_feature_map.h\n\n../include/common.h\ncstdint\n-\nomp.h\n-\n\n../include/detector.h\ncstdint\n-\nstring\n-\nvector\n-\ncommon.h\n../include/common.h\nutil/image_pyramid.h\n../include/util/image_pyramid.h\n\n../include/face_detection.h\ncstdint\n-\nvector\n-\ncommon.h\n../include/common.h\n\n../include/feat/lab_feature_map.h\nvector\n-\nfeature_map.h\n../include/feat/feature_map.h\n\n../include/feat/surf_feature_map.h\ncstdint\n-\ncstring\n-\nvector\n-\ncommon.h\n../include/feat/common.h\nfeature_map.h\n../include/feat/feature_map.h\nutil/math_func.h\n../include/feat/util/math_func.h\n\n../include/feature_map.h\ncommon.h\n../include/common.h\n\n../include/fust.h\nalgorithm\n-\nfstream\n-\nmap\n-\nmemory\n-\nstring\n-\nvector\n-\nclassifier.h\n../include/classifier.h\ndetector.h\n../include/detector.h\nfeature_map.h\n../include/feature_map.h\nmodel_reader.h\n../include/model_reader.h\n\n../include/io/lab_boost_model_reader.h\nistream\n-\nvector\n-\nmodel_reader.h\n../include/io/model_reader.h\nclassifier/lab_boosted_classifier.h\n../include/io/classifier/lab_boosted_classifier.h\n\n../include/io/surf_mlp_model_reader.h\niosfwd\n-\nvector\n-\nmodel_reader.h\n../include/io/model_reader.h\n\n../include/model_reader.h\niosfwd\n-\nclassifier.h\n../include/classifier.h\n\n../include/util/image_pyramid.h\ncstdint\n-\nstring\n-\ncstring\n-\ncommon.h\n../include/util/common.h\n\n../include/util/math_func.h\nimmintrin.h\n-\ncstdint\n-\n\n../include/util/nms.h\nvector\n-\ncommon.h\n../include/util/common.h\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/lab_boosted_classifier.cpp\nclassifier/lab_boosted_classifier.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/classifier/lab_boosted_classifier.h\nmemory\n-\nstring\n-\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/mlp.cpp\nclassifier/mlp.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/classifier/mlp.h\ncommon.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/common.h\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/surf_mlp.cpp\nclassifier/surf_mlp.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/classifier/surf_mlp.h\nstring\n-\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/face_detection.cpp\nface_detection.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/face_detection.h\nmemory\n-\nvector\n-\ndetector.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/detector.h\nfust.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/fust.h\nutil/image_pyramid.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/image_pyramid.h\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/lab_feature_map.cpp\nfeat/lab_feature_map.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/feat/lab_feature_map.h\ncmath\n-\nutil/math_func.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/util/math_func.h\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/surf_feature_map.cpp\ncmath\n-\nfeat/surf_feature_map.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/feat/surf_feature_map.h\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/fust.cpp\nfust.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/fust.h\nmap\n-\nmemory\n-\nstring\n-\nvector\n-\nclassifier/lab_boosted_classifier.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/lab_boosted_classifier.h\nclassifier/surf_mlp.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/surf_mlp.h\nfeat/lab_feature_map.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/lab_feature_map.h\nfeat/surf_feature_map.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/surf_feature_map.h\nio/lab_boost_model_reader.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/lab_boost_model_reader.h\nio/surf_mlp_model_reader.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/surf_mlp_model_reader.h\nutil/nms.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/nms.h\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/lab_boost_model_reader.cpp\nio/lab_boost_model_reader.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/io/lab_boost_model_reader.h\nvector\n-\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/surf_mlp_model_reader.cpp\nio/surf_mlp_model_reader.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/io/surf_mlp_model_reader.h\nistream\n-\nclassifier/surf_mlp.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/classifier/surf_mlp.h\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/image_pyramid.cpp\nutil/image_pyramid.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/util/image_pyramid.h\n\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/nms.cpp\nutil/nms.h\n/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/util/nms.h\nalgorithm\n-\ncstdint\n-\nvector\n-\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/DependInfo.cmake",
    "content": "# The set of languages for which implicit dependencies are needed:\nset(CMAKE_DEPENDS_LANGUAGES\n  \"CXX\"\n  )\n# The set of files for implicit dependencies of each language:\nset(CMAKE_DEPENDS_CHECK_CXX\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/lab_boosted_classifier.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/mlp.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/surf_mlp.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/face_detection.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/face_detection.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/lab_feature_map.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/surf_feature_map.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/fust.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/fust.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/lab_boost_model_reader.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/surf_mlp_model_reader.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/image_pyramid.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o\"\n  \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/nms.cpp\" \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/src/util/nms.cpp.o\"\n  )\nset(CMAKE_CXX_COMPILER_ID \"AppleClang\")\n\n# Preprocessor definitions for this target.\nset(CMAKE_TARGET_DEFINITIONS_CXX\n  \"USE_SSE\"\n  )\n\n# The include file search paths:\nset(CMAKE_CXX_TARGET_INCLUDE_PATH\n  \"../include\"\n  )\n\n# Targets to which this target links.\nset(CMAKE_TARGET_LINKED_INFO_FILES\n  )\n\n# Fortran module output directory.\nset(CMAKE_Fortran_TARGET_MODULE_DIR \"\")\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/build.make",
    "content": "# CMAKE generated file: DO NOT EDIT!\n# Generated by \"Unix Makefiles\" Generator, CMake Version 3.8\n\n# Delete rule output on recipe failure.\n.DELETE_ON_ERROR:\n\n\n#=============================================================================\n# Special targets provided by cmake.\n\n# Disable implicit rules so canonical targets will work.\n.SUFFIXES:\n\n\n# Remove some rules from gmake that .SUFFIXES does not remove.\nSUFFIXES =\n\n.SUFFIXES: .hpux_make_needs_suffix_list\n\n\n# Suppress display of executed commands.\n$(VERBOSE).SILENT:\n\n\n# A target that is always out of date.\ncmake_force:\n\n.PHONY : cmake_force\n\n#=============================================================================\n# Set environment variables for the build.\n\n# The shell in which to execute make rules.\nSHELL = /bin/sh\n\n# The CMake executable.\nCMAKE_COMMAND = /usr/local/Cellar/cmake/3.8.0/bin/cmake\n\n# The command to remove a file.\nRM = /usr/local/Cellar/cmake/3.8.0/bin/cmake -E remove -f\n\n# Escaping for special characters.\nEQUALS = =\n\n# The top-level source directory on which CMake was run.\nCMAKE_SOURCE_DIR = /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace\n\n# The top-level build directory on which CMake was run.\nCMAKE_BINARY_DIR = /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build\n\n# Include any dependencies generated for this target.\ninclude CMakeFiles/seetaFace.dir/depend.make\n\n# Include the progress variables for this target.\ninclude CMakeFiles/seetaFace.dir/progress.make\n\n# Include the compile flags for this target's objects.\ninclude CMakeFiles/seetaFace.dir/flags.make\n\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.o: ../src/util/nms.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) \"Building CXX object CMakeFiles/seetaFace.dir/src/util/nms.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/util/nms.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/nms.cpp\n\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/util/nms.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/nms.cpp > CMakeFiles/seetaFace.dir/src/util/nms.cpp.i\n\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/util/nms.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/nms.cpp -o CMakeFiles/seetaFace.dir/src/util/nms.cpp.s\n\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/util/nms.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.o.provides: CMakeFiles/seetaFace.dir/src/util/nms.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/util/nms.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/util/nms.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/util/nms.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o: ../src/util/image_pyramid.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) \"Building CXX object CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/image_pyramid.cpp\n\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/image_pyramid.cpp > CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.i\n\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/image_pyramid.cpp -o CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.s\n\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o.provides: CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: ../src/io/lab_boost_model_reader.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) \"Building CXX object CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/lab_boost_model_reader.cpp\n\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/lab_boost_model_reader.cpp > CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.i\n\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/lab_boost_model_reader.cpp -o CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.s\n\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o.provides: CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../src/io/surf_mlp_model_reader.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) \"Building CXX object CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/surf_mlp_model_reader.cpp\n\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/surf_mlp_model_reader.cpp > CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.i\n\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/surf_mlp_model_reader.cpp -o CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.s\n\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o.provides: CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o: ../src/feat/lab_feature_map.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) \"Building CXX object CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/lab_feature_map.cpp\n\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/lab_feature_map.cpp > CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.i\n\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/lab_feature_map.cpp -o CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.s\n\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o.provides: CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o: ../src/feat/surf_feature_map.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) \"Building CXX object CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/surf_feature_map.cpp\n\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/surf_feature_map.cpp > CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.i\n\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/surf_feature_map.cpp -o CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.s\n\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o.provides: CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o: ../src/classifier/lab_boosted_classifier.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) \"Building CXX object CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/lab_boosted_classifier.cpp\n\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/lab_boosted_classifier.cpp > CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.i\n\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/lab_boosted_classifier.cpp -o CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.s\n\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o.provides: CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o: ../src/classifier/mlp.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) \"Building CXX object CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/mlp.cpp\n\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/mlp.cpp > CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.i\n\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/mlp.cpp -o CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.s\n\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o.provides: CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: ../src/classifier/surf_mlp.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) \"Building CXX object CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/surf_mlp.cpp\n\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/surf_mlp.cpp > CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.i\n\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/surf_mlp.cpp -o CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.s\n\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o.provides: CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../src/face_detection.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) \"Building CXX object CMakeFiles/seetaFace.dir/src/face_detection.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/face_detection.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/face_detection.cpp\n\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/face_detection.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/face_detection.cpp > CMakeFiles/seetaFace.dir/src/face_detection.cpp.i\n\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/face_detection.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/face_detection.cpp -o CMakeFiles/seetaFace.dir/src/face_detection.cpp.s\n\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/face_detection.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o.provides: CMakeFiles/seetaFace.dir/src/face_detection.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/face_detection.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/face_detection.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/face_detection.cpp.o\n\n\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: CMakeFiles/seetaFace.dir/flags.make\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../src/fust.cpp\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) \"Building CXX object CMakeFiles/seetaFace.dir/src/fust.cpp.o\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/seetaFace.dir/src/fust.cpp.o -c /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/fust.cpp\n\nCMakeFiles/seetaFace.dir/src/fust.cpp.i: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Preprocessing CXX source to CMakeFiles/seetaFace.dir/src/fust.cpp.i\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/fust.cpp > CMakeFiles/seetaFace.dir/src/fust.cpp.i\n\nCMakeFiles/seetaFace.dir/src/fust.cpp.s: cmake_force\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green \"Compiling CXX source to assembly CMakeFiles/seetaFace.dir/src/fust.cpp.s\"\n\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/fust.cpp -o CMakeFiles/seetaFace.dir/src/fust.cpp.s\n\nCMakeFiles/seetaFace.dir/src/fust.cpp.o.requires:\n\n.PHONY : CMakeFiles/seetaFace.dir/src/fust.cpp.o.requires\n\nCMakeFiles/seetaFace.dir/src/fust.cpp.o.provides: CMakeFiles/seetaFace.dir/src/fust.cpp.o.requires\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/fust.cpp.o.provides.build\n.PHONY : CMakeFiles/seetaFace.dir/src/fust.cpp.o.provides\n\nCMakeFiles/seetaFace.dir/src/fust.cpp.o.provides.build: CMakeFiles/seetaFace.dir/src/fust.cpp.o\n\n\n# Object files for target seetaFace\nseetaFace_OBJECTS = \\\n\"CMakeFiles/seetaFace.dir/src/util/nms.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/face_detection.cpp.o\" \\\n\"CMakeFiles/seetaFace.dir/src/fust.cpp.o\"\n\n# External object files for target seetaFace\nseetaFace_EXTERNAL_OBJECTS =\n\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/util/nms.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/face_detection.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/src/fust.cpp.o\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/build.make\nlibseetaFace.dylib: CMakeFiles/seetaFace.dir/link.txt\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) \"Linking CXX shared library libseetaFace.dylib\"\n\t$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/seetaFace.dir/link.txt --verbose=$(VERBOSE)\n\n# Rule to build all files generated by this target.\nCMakeFiles/seetaFace.dir/build: libseetaFace.dylib\n\n.PHONY : CMakeFiles/seetaFace.dir/build\n\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/util/nms.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/face_detection.cpp.o.requires\nCMakeFiles/seetaFace.dir/requires: CMakeFiles/seetaFace.dir/src/fust.cpp.o.requires\n\n.PHONY : CMakeFiles/seetaFace.dir/requires\n\nCMakeFiles/seetaFace.dir/clean:\n\t$(CMAKE_COMMAND) -P CMakeFiles/seetaFace.dir/cmake_clean.cmake\n.PHONY : CMakeFiles/seetaFace.dir/clean\n\nCMakeFiles/seetaFace.dir/depend:\n\tcd /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build && $(CMAKE_COMMAND) -E cmake_depends \"Unix Makefiles\" /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/DependInfo.cmake --color=$(COLOR)\n.PHONY : CMakeFiles/seetaFace.dir/depend\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/cmake_clean.cmake",
    "content": "file(REMOVE_RECURSE\n  \"CMakeFiles/seetaFace.dir/src/util/nms.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/face_detection.cpp.o\"\n  \"CMakeFiles/seetaFace.dir/src/fust.cpp.o\"\n  \"libseetaFace.pdb\"\n  \"libseetaFace.dylib\"\n)\n\n# Per-language clean rules from dependency scanning.\nforeach(lang CXX)\n  include(CMakeFiles/seetaFace.dir/cmake_clean_${lang}.cmake OPTIONAL)\nendforeach()\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/depend.internal",
    "content": "# CMAKE generated file: DO NOT EDIT!\n# Generated by \"Unix Makefiles\" Generator, CMake Version 3.8\n\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o\n ../include/classifier.h\n ../include/classifier/lab_boosted_classifier.h\n ../include/common.h\n ../include/feat/lab_feature_map.h\n ../include/feature_map.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/lab_boosted_classifier.cpp\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o\n ../include/classifier/mlp.h\n ../include/common.h\n ../include/util/math_func.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/mlp.cpp\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o\n ../include/classifier.h\n ../include/classifier/mlp.h\n ../include/classifier/surf_mlp.h\n ../include/common.h\n ../include/feat/surf_feature_map.h\n ../include/feature_map.h\n ../include/util/math_func.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/classifier/surf_mlp.cpp\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o\n ../include/classifier.h\n ../include/common.h\n ../include/detector.h\n ../include/face_detection.h\n ../include/feature_map.h\n ../include/fust.h\n ../include/model_reader.h\n ../include/util/image_pyramid.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/face_detection.cpp\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o\n ../include/common.h\n ../include/feat/lab_feature_map.h\n ../include/feature_map.h\n ../include/util/math_func.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/lab_feature_map.cpp\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o\n ../include/common.h\n ../include/feat/surf_feature_map.h\n ../include/feature_map.h\n ../include/util/math_func.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/feat/surf_feature_map.cpp\nCMakeFiles/seetaFace.dir/src/fust.cpp.o\n ../include/classifier.h\n ../include/classifier/lab_boosted_classifier.h\n ../include/classifier/mlp.h\n ../include/classifier/surf_mlp.h\n ../include/common.h\n ../include/detector.h\n ../include/feat/lab_feature_map.h\n ../include/feat/surf_feature_map.h\n ../include/feature_map.h\n ../include/fust.h\n ../include/io/lab_boost_model_reader.h\n ../include/io/surf_mlp_model_reader.h\n ../include/model_reader.h\n ../include/util/image_pyramid.h\n ../include/util/math_func.h\n ../include/util/nms.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/fust.cpp\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o\n ../include/classifier.h\n ../include/classifier/lab_boosted_classifier.h\n ../include/common.h\n ../include/feat/lab_feature_map.h\n ../include/feature_map.h\n ../include/io/lab_boost_model_reader.h\n ../include/model_reader.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/lab_boost_model_reader.cpp\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o\n ../include/classifier.h\n ../include/classifier/mlp.h\n ../include/classifier/surf_mlp.h\n ../include/common.h\n ../include/feat/surf_feature_map.h\n ../include/feature_map.h\n ../include/io/surf_mlp_model_reader.h\n ../include/model_reader.h\n ../include/util/math_func.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/io/surf_mlp_model_reader.cpp\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o\n ../include/common.h\n ../include/util/image_pyramid.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/image_pyramid.cpp\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.o\n ../include/common.h\n ../include/util/nms.h\n /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/src/util/nms.cpp\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/depend.make",
    "content": "# CMAKE generated file: DO NOT EDIT!\n# Generated by \"Unix Makefiles\" Generator, CMake Version 3.8\n\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o: ../include/classifier.h\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o: ../include/classifier/lab_boosted_classifier.h\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o: ../include/feat/lab_feature_map.h\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o: ../include/feature_map.h\nCMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o: ../src/classifier/lab_boosted_classifier.cpp\n\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o: ../include/classifier/mlp.h\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o: ../include/util/math_func.h\nCMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o: ../src/classifier/mlp.cpp\n\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: ../include/classifier.h\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: ../include/classifier/mlp.h\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: ../include/classifier/surf_mlp.h\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: ../include/feat/surf_feature_map.h\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: ../include/feature_map.h\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: ../include/util/math_func.h\nCMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o: ../src/classifier/surf_mlp.cpp\n\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../include/classifier.h\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../include/detector.h\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../include/face_detection.h\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../include/feature_map.h\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../include/fust.h\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../include/model_reader.h\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../include/util/image_pyramid.h\nCMakeFiles/seetaFace.dir/src/face_detection.cpp.o: ../src/face_detection.cpp\n\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o: ../include/feat/lab_feature_map.h\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o: ../include/feature_map.h\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o: ../include/util/math_func.h\nCMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o: ../src/feat/lab_feature_map.cpp\n\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o: ../include/feat/surf_feature_map.h\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o: ../include/feature_map.h\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o: ../include/util/math_func.h\nCMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o: ../src/feat/surf_feature_map.cpp\n\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/classifier.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/classifier/lab_boosted_classifier.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/classifier/mlp.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/classifier/surf_mlp.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/detector.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/feat/lab_feature_map.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/feat/surf_feature_map.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/feature_map.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/fust.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/io/lab_boost_model_reader.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/io/surf_mlp_model_reader.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/model_reader.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/util/image_pyramid.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/util/math_func.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../include/util/nms.h\nCMakeFiles/seetaFace.dir/src/fust.cpp.o: ../src/fust.cpp\n\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: ../include/classifier.h\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: ../include/classifier/lab_boosted_classifier.h\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: ../include/feat/lab_feature_map.h\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: ../include/feature_map.h\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: ../include/io/lab_boost_model_reader.h\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: ../include/model_reader.h\nCMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o: ../src/io/lab_boost_model_reader.cpp\n\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../include/classifier.h\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../include/classifier/mlp.h\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../include/classifier/surf_mlp.h\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../include/feat/surf_feature_map.h\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../include/feature_map.h\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../include/io/surf_mlp_model_reader.h\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../include/model_reader.h\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../include/util/math_func.h\nCMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o: ../src/io/surf_mlp_model_reader.cpp\n\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o: ../include/util/image_pyramid.h\nCMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o: ../src/util/image_pyramid.cpp\n\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.o: ../include/common.h\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.o: ../include/util/nms.h\nCMakeFiles/seetaFace.dir/src/util/nms.cpp.o: ../src/util/nms.cpp\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/flags.make",
    "content": "# CMAKE generated file: DO NOT EDIT!\n# Generated by \"Unix Makefiles\" Generator, CMake Version 3.8\n\n# compile CXX with /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++\nCXX_FLAGS =  -O2 -msse4.1 -fPIC   -std=gnu++11\n\nCXX_DEFINES = -DUSE_SSE -DseetaFace_EXPORTS\n\nCXX_INCLUDES = -I/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/include \n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/link.txt",
    "content": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  -O2 -msse4.1 -dynamiclib -Wl,-headerpad_max_install_names  -o libseetaFace.dylib -install_name @rpath/libseetaFace.dylib CMakeFiles/seetaFace.dir/src/util/nms.cpp.o CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o CMakeFiles/seetaFace.dir/src/face_detection.cpp.o CMakeFiles/seetaFace.dir/src/fust.cpp.o \n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/seetaFace.dir/progress.make",
    "content": "CMAKE_PROGRESS_1 = 1\nCMAKE_PROGRESS_2 = 2\nCMAKE_PROGRESS_3 = 3\nCMAKE_PROGRESS_4 = 4\nCMAKE_PROGRESS_5 = 5\nCMAKE_PROGRESS_6 = 6\nCMAKE_PROGRESS_7 = 7\nCMAKE_PROGRESS_8 = 8\nCMAKE_PROGRESS_9 = 9\nCMAKE_PROGRESS_10 = 10\nCMAKE_PROGRESS_11 = 11\nCMAKE_PROGRESS_12 = 12\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/Makefile",
    "content": "# CMAKE generated file: DO NOT EDIT!\n# Generated by \"Unix Makefiles\" Generator, CMake Version 3.8\n\n# Default target executed when no arguments are given to make.\ndefault_target: all\n\n.PHONY : default_target\n\n# Allow only one \"make -f Makefile2\" at a time, but pass parallelism.\n.NOTPARALLEL:\n\n\n#=============================================================================\n# Special targets provided by cmake.\n\n# Disable implicit rules so canonical targets will work.\n.SUFFIXES:\n\n\n# Remove some rules from gmake that .SUFFIXES does not remove.\nSUFFIXES =\n\n.SUFFIXES: .hpux_make_needs_suffix_list\n\n\n# Suppress display of executed commands.\n$(VERBOSE).SILENT:\n\n\n# A target that is always out of date.\ncmake_force:\n\n.PHONY : cmake_force\n\n#=============================================================================\n# Set environment variables for the build.\n\n# The shell in which to execute make rules.\nSHELL = /bin/sh\n\n# The CMake executable.\nCMAKE_COMMAND = /usr/local/Cellar/cmake/3.8.0/bin/cmake\n\n# The command to remove a file.\nRM = /usr/local/Cellar/cmake/3.8.0/bin/cmake -E remove -f\n\n# Escaping for special characters.\nEQUALS = =\n\n# The top-level source directory on which CMake was run.\nCMAKE_SOURCE_DIR = /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace\n\n# The top-level build directory on which CMake was run.\nCMAKE_BINARY_DIR = /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build\n\n#=============================================================================\n# Targets provided globally by CMake.\n\n# Special rule for the target install/local\ninstall/local: preinstall\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan \"Installing only the local directory...\"\n\t/usr/local/Cellar/cmake/3.8.0/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake\n.PHONY : install/local\n\n# Special rule for the target install/local\ninstall/local/fast: preinstall/fast\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan \"Installing only the local directory...\"\n\t/usr/local/Cellar/cmake/3.8.0/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake\n.PHONY : install/local/fast\n\n# Special rule for the target install/strip\ninstall/strip: preinstall\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan \"Installing the project stripped...\"\n\t/usr/local/Cellar/cmake/3.8.0/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake\n.PHONY : install/strip\n\n# Special rule for the target install/strip\ninstall/strip/fast: preinstall/fast\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan \"Installing the project stripped...\"\n\t/usr/local/Cellar/cmake/3.8.0/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake\n.PHONY : install/strip/fast\n\n# Special rule for the target install\ninstall: preinstall\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan \"Install the project...\"\n\t/usr/local/Cellar/cmake/3.8.0/bin/cmake -P cmake_install.cmake\n.PHONY : install\n\n# Special rule for the target install\ninstall/fast: preinstall/fast\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan \"Install the project...\"\n\t/usr/local/Cellar/cmake/3.8.0/bin/cmake -P cmake_install.cmake\n.PHONY : install/fast\n\n# Special rule for the target list_install_components\nlist_install_components:\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan \"Available install components are: \\\"Unspecified\\\"\"\n.PHONY : list_install_components\n\n# Special rule for the target list_install_components\nlist_install_components/fast: list_install_components\n\n.PHONY : list_install_components/fast\n\n# Special rule for the target rebuild_cache\nrebuild_cache:\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan \"Running CMake to regenerate build system...\"\n\t/usr/local/Cellar/cmake/3.8.0/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)\n.PHONY : rebuild_cache\n\n# Special rule for the target rebuild_cache\nrebuild_cache/fast: rebuild_cache\n\n.PHONY : rebuild_cache/fast\n\n# Special rule for the target edit_cache\nedit_cache:\n\t@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan \"Running CMake cache editor...\"\n\t/usr/local/Cellar/cmake/3.8.0/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)\n.PHONY : edit_cache\n\n# Special rule for the target edit_cache\nedit_cache/fast: edit_cache\n\n.PHONY : edit_cache/fast\n\n# The main all target\nall: cmake_check_build_system\n\t$(CMAKE_COMMAND) -E cmake_progress_start /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles/progress.marks\n\t$(MAKE) -f CMakeFiles/Makefile2 all\n\t$(CMAKE_COMMAND) -E cmake_progress_start /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/CMakeFiles 0\n.PHONY : all\n\n# The main clean target\nclean:\n\t$(MAKE) -f CMakeFiles/Makefile2 clean\n.PHONY : clean\n\n# The main clean target\nclean/fast: clean\n\n.PHONY : clean/fast\n\n# Prepare targets for installation.\npreinstall: all\n\t$(MAKE) -f CMakeFiles/Makefile2 preinstall\n.PHONY : preinstall\n\n# Prepare targets for installation.\npreinstall/fast:\n\t$(MAKE) -f CMakeFiles/Makefile2 preinstall\n.PHONY : preinstall/fast\n\n# clear depends\ndepend:\n\t$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1\n.PHONY : depend\n\n#=============================================================================\n# Target rules for targets named seetaFace\n\n# Build rule for target.\nseetaFace: cmake_check_build_system\n\t$(MAKE) -f CMakeFiles/Makefile2 seetaFace\n.PHONY : seetaFace\n\n# fast build rule for target.\nseetaFace/fast:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/build\n.PHONY : seetaFace/fast\n\nsrc/classifier/lab_boosted_classifier.o: src/classifier/lab_boosted_classifier.cpp.o\n\n.PHONY : src/classifier/lab_boosted_classifier.o\n\n# target to build an object file\nsrc/classifier/lab_boosted_classifier.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.o\n.PHONY : src/classifier/lab_boosted_classifier.cpp.o\n\nsrc/classifier/lab_boosted_classifier.i: src/classifier/lab_boosted_classifier.cpp.i\n\n.PHONY : src/classifier/lab_boosted_classifier.i\n\n# target to preprocess a source file\nsrc/classifier/lab_boosted_classifier.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.i\n.PHONY : src/classifier/lab_boosted_classifier.cpp.i\n\nsrc/classifier/lab_boosted_classifier.s: src/classifier/lab_boosted_classifier.cpp.s\n\n.PHONY : src/classifier/lab_boosted_classifier.s\n\n# target to generate assembly for a file\nsrc/classifier/lab_boosted_classifier.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/lab_boosted_classifier.cpp.s\n.PHONY : src/classifier/lab_boosted_classifier.cpp.s\n\nsrc/classifier/mlp.o: src/classifier/mlp.cpp.o\n\n.PHONY : src/classifier/mlp.o\n\n# target to build an object file\nsrc/classifier/mlp.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.o\n.PHONY : src/classifier/mlp.cpp.o\n\nsrc/classifier/mlp.i: src/classifier/mlp.cpp.i\n\n.PHONY : src/classifier/mlp.i\n\n# target to preprocess a source file\nsrc/classifier/mlp.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.i\n.PHONY : src/classifier/mlp.cpp.i\n\nsrc/classifier/mlp.s: src/classifier/mlp.cpp.s\n\n.PHONY : src/classifier/mlp.s\n\n# target to generate assembly for a file\nsrc/classifier/mlp.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/mlp.cpp.s\n.PHONY : src/classifier/mlp.cpp.s\n\nsrc/classifier/surf_mlp.o: src/classifier/surf_mlp.cpp.o\n\n.PHONY : src/classifier/surf_mlp.o\n\n# target to build an object file\nsrc/classifier/surf_mlp.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.o\n.PHONY : src/classifier/surf_mlp.cpp.o\n\nsrc/classifier/surf_mlp.i: src/classifier/surf_mlp.cpp.i\n\n.PHONY : src/classifier/surf_mlp.i\n\n# target to preprocess a source file\nsrc/classifier/surf_mlp.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.i\n.PHONY : src/classifier/surf_mlp.cpp.i\n\nsrc/classifier/surf_mlp.s: src/classifier/surf_mlp.cpp.s\n\n.PHONY : src/classifier/surf_mlp.s\n\n# target to generate assembly for a file\nsrc/classifier/surf_mlp.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/classifier/surf_mlp.cpp.s\n.PHONY : src/classifier/surf_mlp.cpp.s\n\nsrc/face_detection.o: src/face_detection.cpp.o\n\n.PHONY : src/face_detection.o\n\n# target to build an object file\nsrc/face_detection.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/face_detection.cpp.o\n.PHONY : src/face_detection.cpp.o\n\nsrc/face_detection.i: src/face_detection.cpp.i\n\n.PHONY : src/face_detection.i\n\n# target to preprocess a source file\nsrc/face_detection.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/face_detection.cpp.i\n.PHONY : src/face_detection.cpp.i\n\nsrc/face_detection.s: src/face_detection.cpp.s\n\n.PHONY : src/face_detection.s\n\n# target to generate assembly for a file\nsrc/face_detection.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/face_detection.cpp.s\n.PHONY : src/face_detection.cpp.s\n\nsrc/feat/lab_feature_map.o: src/feat/lab_feature_map.cpp.o\n\n.PHONY : src/feat/lab_feature_map.o\n\n# target to build an object file\nsrc/feat/lab_feature_map.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.o\n.PHONY : src/feat/lab_feature_map.cpp.o\n\nsrc/feat/lab_feature_map.i: src/feat/lab_feature_map.cpp.i\n\n.PHONY : src/feat/lab_feature_map.i\n\n# target to preprocess a source file\nsrc/feat/lab_feature_map.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.i\n.PHONY : src/feat/lab_feature_map.cpp.i\n\nsrc/feat/lab_feature_map.s: src/feat/lab_feature_map.cpp.s\n\n.PHONY : src/feat/lab_feature_map.s\n\n# target to generate assembly for a file\nsrc/feat/lab_feature_map.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/feat/lab_feature_map.cpp.s\n.PHONY : src/feat/lab_feature_map.cpp.s\n\nsrc/feat/surf_feature_map.o: src/feat/surf_feature_map.cpp.o\n\n.PHONY : src/feat/surf_feature_map.o\n\n# target to build an object file\nsrc/feat/surf_feature_map.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.o\n.PHONY : src/feat/surf_feature_map.cpp.o\n\nsrc/feat/surf_feature_map.i: src/feat/surf_feature_map.cpp.i\n\n.PHONY : src/feat/surf_feature_map.i\n\n# target to preprocess a source file\nsrc/feat/surf_feature_map.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.i\n.PHONY : src/feat/surf_feature_map.cpp.i\n\nsrc/feat/surf_feature_map.s: src/feat/surf_feature_map.cpp.s\n\n.PHONY : src/feat/surf_feature_map.s\n\n# target to generate assembly for a file\nsrc/feat/surf_feature_map.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/feat/surf_feature_map.cpp.s\n.PHONY : src/feat/surf_feature_map.cpp.s\n\nsrc/fust.o: src/fust.cpp.o\n\n.PHONY : src/fust.o\n\n# target to build an object file\nsrc/fust.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/fust.cpp.o\n.PHONY : src/fust.cpp.o\n\nsrc/fust.i: src/fust.cpp.i\n\n.PHONY : src/fust.i\n\n# target to preprocess a source file\nsrc/fust.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/fust.cpp.i\n.PHONY : src/fust.cpp.i\n\nsrc/fust.s: src/fust.cpp.s\n\n.PHONY : src/fust.s\n\n# target to generate assembly for a file\nsrc/fust.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/fust.cpp.s\n.PHONY : src/fust.cpp.s\n\nsrc/io/lab_boost_model_reader.o: src/io/lab_boost_model_reader.cpp.o\n\n.PHONY : src/io/lab_boost_model_reader.o\n\n# target to build an object file\nsrc/io/lab_boost_model_reader.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.o\n.PHONY : src/io/lab_boost_model_reader.cpp.o\n\nsrc/io/lab_boost_model_reader.i: src/io/lab_boost_model_reader.cpp.i\n\n.PHONY : src/io/lab_boost_model_reader.i\n\n# target to preprocess a source file\nsrc/io/lab_boost_model_reader.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.i\n.PHONY : src/io/lab_boost_model_reader.cpp.i\n\nsrc/io/lab_boost_model_reader.s: src/io/lab_boost_model_reader.cpp.s\n\n.PHONY : src/io/lab_boost_model_reader.s\n\n# target to generate assembly for a file\nsrc/io/lab_boost_model_reader.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/io/lab_boost_model_reader.cpp.s\n.PHONY : src/io/lab_boost_model_reader.cpp.s\n\nsrc/io/surf_mlp_model_reader.o: src/io/surf_mlp_model_reader.cpp.o\n\n.PHONY : src/io/surf_mlp_model_reader.o\n\n# target to build an object file\nsrc/io/surf_mlp_model_reader.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.o\n.PHONY : src/io/surf_mlp_model_reader.cpp.o\n\nsrc/io/surf_mlp_model_reader.i: src/io/surf_mlp_model_reader.cpp.i\n\n.PHONY : src/io/surf_mlp_model_reader.i\n\n# target to preprocess a source file\nsrc/io/surf_mlp_model_reader.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.i\n.PHONY : src/io/surf_mlp_model_reader.cpp.i\n\nsrc/io/surf_mlp_model_reader.s: src/io/surf_mlp_model_reader.cpp.s\n\n.PHONY : src/io/surf_mlp_model_reader.s\n\n# target to generate assembly for a file\nsrc/io/surf_mlp_model_reader.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/io/surf_mlp_model_reader.cpp.s\n.PHONY : src/io/surf_mlp_model_reader.cpp.s\n\nsrc/util/image_pyramid.o: src/util/image_pyramid.cpp.o\n\n.PHONY : src/util/image_pyramid.o\n\n# target to build an object file\nsrc/util/image_pyramid.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.o\n.PHONY : src/util/image_pyramid.cpp.o\n\nsrc/util/image_pyramid.i: src/util/image_pyramid.cpp.i\n\n.PHONY : src/util/image_pyramid.i\n\n# target to preprocess a source file\nsrc/util/image_pyramid.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.i\n.PHONY : src/util/image_pyramid.cpp.i\n\nsrc/util/image_pyramid.s: src/util/image_pyramid.cpp.s\n\n.PHONY : src/util/image_pyramid.s\n\n# target to generate assembly for a file\nsrc/util/image_pyramid.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/util/image_pyramid.cpp.s\n.PHONY : src/util/image_pyramid.cpp.s\n\nsrc/util/nms.o: src/util/nms.cpp.o\n\n.PHONY : src/util/nms.o\n\n# target to build an object file\nsrc/util/nms.cpp.o:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/util/nms.cpp.o\n.PHONY : src/util/nms.cpp.o\n\nsrc/util/nms.i: src/util/nms.cpp.i\n\n.PHONY : src/util/nms.i\n\n# target to preprocess a source file\nsrc/util/nms.cpp.i:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/util/nms.cpp.i\n.PHONY : src/util/nms.cpp.i\n\nsrc/util/nms.s: src/util/nms.cpp.s\n\n.PHONY : src/util/nms.s\n\n# target to generate assembly for a file\nsrc/util/nms.cpp.s:\n\t$(MAKE) -f CMakeFiles/seetaFace.dir/build.make CMakeFiles/seetaFace.dir/src/util/nms.cpp.s\n.PHONY : src/util/nms.cpp.s\n\n# Help Target\nhelp:\n\t@echo \"The following are some of the valid targets for this Makefile:\"\n\t@echo \"... all (the default if no target is provided)\"\n\t@echo \"... clean\"\n\t@echo \"... depend\"\n\t@echo \"... install/local\"\n\t@echo \"... install/strip\"\n\t@echo \"... install\"\n\t@echo \"... list_install_components\"\n\t@echo \"... rebuild_cache\"\n\t@echo \"... edit_cache\"\n\t@echo \"... seetaFace\"\n\t@echo \"... src/classifier/lab_boosted_classifier.o\"\n\t@echo \"... src/classifier/lab_boosted_classifier.i\"\n\t@echo \"... src/classifier/lab_boosted_classifier.s\"\n\t@echo \"... src/classifier/mlp.o\"\n\t@echo \"... src/classifier/mlp.i\"\n\t@echo \"... src/classifier/mlp.s\"\n\t@echo \"... src/classifier/surf_mlp.o\"\n\t@echo \"... src/classifier/surf_mlp.i\"\n\t@echo \"... src/classifier/surf_mlp.s\"\n\t@echo \"... src/face_detection.o\"\n\t@echo \"... src/face_detection.i\"\n\t@echo \"... src/face_detection.s\"\n\t@echo \"... src/feat/lab_feature_map.o\"\n\t@echo \"... src/feat/lab_feature_map.i\"\n\t@echo \"... src/feat/lab_feature_map.s\"\n\t@echo \"... src/feat/surf_feature_map.o\"\n\t@echo \"... src/feat/surf_feature_map.i\"\n\t@echo \"... src/feat/surf_feature_map.s\"\n\t@echo \"... src/fust.o\"\n\t@echo \"... src/fust.i\"\n\t@echo \"... src/fust.s\"\n\t@echo \"... src/io/lab_boost_model_reader.o\"\n\t@echo \"... src/io/lab_boost_model_reader.i\"\n\t@echo \"... src/io/lab_boost_model_reader.s\"\n\t@echo \"... src/io/surf_mlp_model_reader.o\"\n\t@echo \"... src/io/surf_mlp_model_reader.i\"\n\t@echo \"... src/io/surf_mlp_model_reader.s\"\n\t@echo \"... src/util/image_pyramid.o\"\n\t@echo \"... src/util/image_pyramid.i\"\n\t@echo \"... src/util/image_pyramid.s\"\n\t@echo \"... src/util/nms.o\"\n\t@echo \"... src/util/nms.i\"\n\t@echo \"... src/util/nms.s\"\n.PHONY : help\n\n\n\n#=============================================================================\n# Special targets to cleanup operation of make.\n\n# Special rule to run CMake to check the build system integrity.\n# No rule that depends on this can have commands that come from listfiles\n# because they might be regenerated.\ncmake_check_build_system:\n\t$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0\n.PHONY : cmake_check_build_system\n\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/build/cmake_install.cmake",
    "content": "# Install script for directory: /Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace\n\n# Set the install prefix\nif(NOT DEFINED CMAKE_INSTALL_PREFIX)\n  set(CMAKE_INSTALL_PREFIX \"/usr/local\")\nendif()\nstring(REGEX REPLACE \"/$\" \"\" CMAKE_INSTALL_PREFIX \"${CMAKE_INSTALL_PREFIX}\")\n\n# Set the install configuration name.\nif(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)\n  if(BUILD_TYPE)\n    string(REGEX REPLACE \"^[^A-Za-z0-9_]+\" \"\"\n           CMAKE_INSTALL_CONFIG_NAME \"${BUILD_TYPE}\")\n  else()\n    set(CMAKE_INSTALL_CONFIG_NAME \"\")\n  endif()\n  message(STATUS \"Install configuration: \\\"${CMAKE_INSTALL_CONFIG_NAME}\\\"\")\nendif()\n\n# Set the component getting installed.\nif(NOT CMAKE_INSTALL_COMPONENT)\n  if(COMPONENT)\n    message(STATUS \"Install component: \\\"${COMPONENT}\\\"\")\n    set(CMAKE_INSTALL_COMPONENT \"${COMPONENT}\")\n  else()\n    set(CMAKE_INSTALL_COMPONENT)\n  endif()\nendif()\n\nif(\"${CMAKE_INSTALL_COMPONENT}\" STREQUAL \"Unspecified\" OR NOT CMAKE_INSTALL_COMPONENT)\n  file(INSTALL DESTINATION \"${CMAKE_INSTALL_PREFIX}/lib\" TYPE SHARED_LIBRARY FILES \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/libseetaFace.dylib\")\n  if(EXISTS \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libseetaFace.dylib\" AND\n     NOT IS_SYMLINK \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libseetaFace.dylib\")\n    if(CMAKE_INSTALL_DO_STRIP)\n      execute_process(COMMAND \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip\" \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libseetaFace.dylib\")\n    endif()\n  endif()\nendif()\n\nif(CMAKE_INSTALL_COMPONENT)\n  set(CMAKE_INSTALL_MANIFEST \"install_manifest_${CMAKE_INSTALL_COMPONENT}.txt\")\nelse()\n  set(CMAKE_INSTALL_MANIFEST \"install_manifest.txt\")\nendif()\n\nstring(REPLACE \";\" \"\\n\" CMAKE_INSTALL_MANIFEST_CONTENT\n       \"${CMAKE_INSTALL_MANIFEST_FILES}\")\nfile(WRITE \"/Users/liuyan/Desktop/FaceLivenessDetectionCmake/FaceLivenessDetection/lib/local/seetaFace/build/${CMAKE_INSTALL_MANIFEST}\"\n     \"${CMAKE_INSTALL_MANIFEST_CONTENT}\")\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/classifier/lab_boosted_classifier.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_CLASSIFIER_LAB_BOOSTED_CLASSIFIER_H_\n#define SEETA_FD_CLASSIFIER_LAB_BOOSTED_CLASSIFIER_H_\n\n#include <algorithm>\n#include <cstdint>\n#include <memory>\n#include <vector>\n\n#include \"classifier.h\"\n#include \"feat/lab_feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\n/**\n * @class LABBaseClassifier\n * @brief Base classifier using LAB feature.\n */\nclass LABBaseClassifier {\n public:\n  LABBaseClassifier()\n    : num_bin_(255), thresh_(0.0f) {\n    weights_.resize(num_bin_ + 1);\n  }\n\n  ~LABBaseClassifier() {}\n\n  void SetWeights(const float* weights, int32_t num_bin);\n\n  inline void SetThreshold(float thresh) { thresh_ = thresh; }\n\n  inline int32_t num_bin() const { return num_bin_; }\n  inline float weights(int32_t val) const { return weights_[val]; }\n  inline float threshold() const { return thresh_; }\n\n private:\n  int32_t num_bin_;\n\n  std::vector<float> weights_;\n  float thresh_;\n};\n\n/**\n * @class LABBoostedClassifier\n * @Brief A strong classifier constructed from base classifiers using LAB features.\n */\nclass LABBoostedClassifier : public Classifier {\n public:\n  LABBoostedClassifier() : use_std_dev_(true) {}\n  virtual ~LABBoostedClassifier() {}\n\n  virtual bool Classify(float* score = nullptr, float* outputs = nullptr);\n\n  inline virtual seeta::fd::ClassifierType type() {\n    return seeta::fd::ClassifierType::LAB_Boosted_Classifier;\n  }\n\n  void AddFeature(int32_t x, int32_t y);\n  void AddBaseClassifier(const float* weights, int32_t num_bin, float thresh);\n\n  inline virtual void SetFeatureMap(seeta::fd::FeatureMap* featMap) {\n    feat_map_ = dynamic_cast<seeta::fd::LABFeatureMap*>(featMap);\n  }\n\n  inline void SetUseStdDev(bool useStdDev) { use_std_dev_ = useStdDev; }\n\n private:\n  static const int32_t kFeatGroupSize = 10;\n  const float kStdDevThresh = 10.0f;\n\n  std::vector<seeta::fd::LABFeature> feat_;\n  std::vector<std::shared_ptr<seeta::fd::LABBaseClassifier> > base_classifiers_;\n  seeta::fd::LABFeatureMap* feat_map_;\n  bool use_std_dev_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_CLASSIFIER_LAB_BOOSTED_CLASSIFIER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/classifier/mlp.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_CLASSIFIER_MLP_H_\n#define SEETA_FD_CLASSIFIER_MLP_H_\n\n#include <cmath>\n#include <cstdint>\n#include <memory>\n#include <algorithm>\n#include <vector>\n\n#include \"util/math_func.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass MLPLayer {\n public:\n  explicit MLPLayer(int32_t act_func_type = 1)\n      : input_dim_(0), output_dim_(0), act_func_type_(act_func_type) {}\n  ~MLPLayer() {}\n\n  void Compute(const float* input, float* output);\n\n  inline int32_t GetInputDim() const { return input_dim_; }\n  inline int32_t GetOutputDim() const { return output_dim_; }\n\n  inline void SetSize(int32_t inputDim, int32_t outputDim) {\n    if (inputDim <= 0 || outputDim <= 0) {\n      return;  // @todo handle the errors!!!\n    }\n    input_dim_ = inputDim;\n    output_dim_ = outputDim;\n    weights_.resize(inputDim * outputDim);\n    bias_.resize(outputDim);\n  }\n\n  inline void SetWeights(const float* weights, int32_t len) {\n    if (weights == nullptr || len != input_dim_ * output_dim_) {\n      return;  // @todo handle the errors!!!\n    }\n    std::copy(weights, weights + input_dim_ * output_dim_, weights_.begin());\n  }\n\n  inline void SetBias(const float* bias, int32_t len) {\n    if (bias == nullptr || len != output_dim_) {\n      return;  // @todo handle the errors!!!\n    }\n    std::copy(bias, bias + output_dim_, bias_.begin());\n  }\n\n private:\n  inline float Sigmoid(float x) {\n    return 1.0f / (1.0f + std::exp(x));\n  }\n\n  inline float ReLU(float x) {\n    return (x > 0.0f ? x : 0.0f);\n  }\n\n private:\n  int32_t act_func_type_;\n  int32_t input_dim_;\n  int32_t output_dim_;\n  std::vector<float> weights_;\n  std::vector<float> bias_;\n};\n\n\nclass MLP {\n public:\n  MLP() {}\n  ~MLP() {}\n\n  void Compute(const float* input, float* output);\n\n  inline int32_t GetInputDim() const {\n    return layers_[0]->GetInputDim();\n  }\n\n  inline int32_t GetOutputDim() const {\n    return layers_.back()->GetOutputDim();\n  }\n\n  inline int32_t GetLayerNum() const {\n    return static_cast<int32_t>(layers_.size());\n  }\n\n  void AddLayer(int32_t inputDim, int32_t outputDim, const float* weights,\n      const float* bias, bool is_output = false);\n\n private:\n  std::vector<std::shared_ptr<seeta::fd::MLPLayer> > layers_;\n  std::vector<float> layer_buf_[2];\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_CLASSIFIER_MLP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/classifier/surf_mlp.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_CLASSIFIER_SURF_MLP_H_\n#define SEETA_FD_CLASSIFIER_SURF_MLP_H_\n\n#include <memory>\n#include <vector>\n\n#include \"classifier.h\"\n#include \"classifier/mlp.h\"\n#include \"feat/surf_feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass SURFMLP : public Classifier {\n public:\n  SURFMLP() : Classifier(), model_(new seeta::fd::MLP()) {}\n  virtual ~SURFMLP() {}\n\n  virtual bool Classify(float* score = nullptr, float* outputs = nullptr);\n\n  inline virtual void SetFeatureMap(seeta::fd::FeatureMap* feat_map) {\n    feat_map_ = dynamic_cast<seeta::fd::SURFFeatureMap*>(feat_map);\n  }\n\n  inline virtual seeta::fd::ClassifierType type() {\n    return seeta::fd::ClassifierType::SURF_MLP;\n  }\n\n  void AddFeatureByID(int32_t feat_id);\n  void AddLayer(int32_t input_dim, int32_t output_dim, const float* weights,\n    const float* bias, bool is_output = false);\n\n  inline void SetThreshold(float thresh) { thresh_ = thresh; }\n\n private:\n  std::vector<int32_t> feat_id_;\n  std::vector<float> input_buf_;\n  std::vector<float> output_buf_;\n\n  std::shared_ptr<seeta::fd::MLP> model_;\n  float thresh_;\n  seeta::fd::SURFFeatureMap* feat_map_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_CLASSIFIER_SURF_MLP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/classifier.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_CLASSIFIER_H_\n#define SEETA_FD_CLASSIFIER_H_\n\n#include \"common.h\"\n#include \"feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\nenum ClassifierType {\n    LAB_Boosted_Classifier,\n    SURF_MLP\n};\n\nclass Classifier {\n public:\n  Classifier() {}\n  virtual ~Classifier() {}\n\n  virtual void SetFeatureMap(seeta::fd::FeatureMap* feat_map) = 0;\n  virtual bool Classify(float* score = nullptr, float* outputs = nullptr) = 0;\n  \n  virtual seeta::fd::ClassifierType type() = 0;\n\n  DISABLE_COPY_AND_ASSIGN(Classifier);\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_CLASSIFIER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/common.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_COMMON_H_\n#define SEETA_COMMON_H_\n\n#include <cstdint>\n\n#if defined _WIN32\n#ifdef SEETA_EXPORTS\n#define SEETA_API __declspec(dllexport)\n#else\n#define SEETA_API __declspec(dllimport)\n#endif\n\n#else\n#define SEETA_API\n#endif\n\n#define DISABLE_COPY_AND_ASSIGN(classname) \\\n private: \\\n  classname(const classname&); \\\n  classname& operator=(const classname&)\n\n#ifdef USE_OPENMP\n#include <omp.h>\n\n#define SEETA_NUM_THREADS 4\n#endif\n\nnamespace seeta {\n\ntypedef struct ImageData {\n  ImageData() {\n    data = nullptr;\n    width = 0;\n    height = 0;\n    num_channels = 0;\n  }\n\n  ImageData(int32_t img_width, int32_t img_height,\n      int32_t img_num_channels = 1) {\n    data = nullptr;\n    width = img_width;\n    height = img_height;\n    num_channels = img_num_channels;\n  }\n\n  uint8_t* data;\n  int32_t width;\n  int32_t height;\n  int32_t num_channels;\n} ImageData;\n\ntypedef struct Rect {\n  int32_t x;\n  int32_t y;\n  int32_t width;\n  int32_t height;\n} Rect;\n\ntypedef struct FaceInfo {\n  seeta::Rect bbox;\n\n  double roll;\n  double pitch;\n  double yaw;\n\n  double score; /**< Larger score should mean higher confidence. */\n} FaceInfo;\n\n  typedef struct {\n    double x;\n    double y;\n  } FacialLandmark;\n}  // namespace seeta\n\n#endif  // SEETA_COMMON_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/detector.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_DETECTOR_H_\n#define SEETA_FD_DETECTOR_H_\n\n#include <cstdint>\n#include <string>\n#include <vector>\n\n#include \"common.h\"\n#include \"util/image_pyramid.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass Detector {\n public:\n  Detector() {}\n  virtual ~Detector() {}\n\n  virtual bool LoadModel(const std::string & model_path) = 0;\n  virtual std::vector<seeta::FaceInfo> Detect(seeta::fd::ImagePyramid* img_pyramid) = 0;\n\n  virtual void SetWindowSize(int32_t size) {}\n  virtual void SetSlideWindowStep(int32_t step_x, int32_t step_y) {}\n\n  DISABLE_COPY_AND_ASSIGN(Detector);\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_DETECTOR_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/face_detection.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FACE_DETECTION_H_\n#define SEETA_FACE_DETECTION_H_\n\n#include <cstdint>\n#include <vector>\n\n#include \"common.h\"\n\nnamespace seeta {\n\nclass FaceDetection {\n public:\n  SEETA_API explicit FaceDetection(const char* model_path);\n  SEETA_API ~FaceDetection();\n\n  /**\n   * @brief Detect faces on input image.\n   *\n   * (1) The input image should be gray-scale, i.e. `num_channels` set to 1.\n   * (2) Currently this function does not give the Euler angles, which are\n   *     left with invalid values.\n   */\n  SEETA_API std::vector<seeta::FaceInfo> Detect(const seeta::ImageData & img);\n\n  /**\n   * @brief Set the minimum size of faces to detect.\n   *\n   * The minimum size is constrained as no smaller than 20. Invalid values will\n   * be ignored.\n   */\n  SEETA_API void SetMinFaceSize(int32_t size);\n\n  /** \n   * @brief Set the maximum size of faces to detect.\n   * \n   * The maximum face size actually used is computed as the minimum among: user\n   * specified size, image width, image height.\n   */\n  SEETA_API void SetMaxFaceSize(int32_t size);\n\n  /**\n   * @brief Set the factor between adjacent scales of image pyramid.\n   *\n   * The value of the factor lies in (0, 1). For example, when it is set as 0.5,\n   * an input image of size w x h will be resized to 0.5w x 0.5h, 0.25w x 0.25h,\n   * 0.125w x 0.125h, etc. Invalid values will be ignored.\n   */\n  SEETA_API void SetImagePyramidScaleFactor(float factor);\n\n  /**\n   * @brief Set the sliding window step in horizontal and vertical directions.\n   * \n   * The steps should take positive values, and invalid ones will be ignored.\n   * Usually a step of 4 is a reasonable choice.\n   */\n  SEETA_API void SetWindowStep(int32_t step_x, int32_t step_y);\n\n  /**\n   * @brief Set the score thresh of detected faces.\n   *\n   * Detections with scores smaller than the threshold will not be returned.\n   * Typical threshold values include 0.95, 2.8, 4.5. One can adjust the\n   * threshold based on his or her own test set.\n   */\n  SEETA_API void SetScoreThresh(float thresh);\n\n  DISABLE_COPY_AND_ASSIGN(FaceDetection);\n\n private:\n  class Impl;\n  Impl* impl_;\n};\n\n}  // namespace seeta\n\n#endif  // SEETA_FACE_DETECTION_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/feat/lab_feature_map.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_FEAT_LAB_FEATURE_MAP_H_\n#define SEETA_FD_FEAT_LAB_FEATURE_MAP_H_\n\n#include <vector>\n\n#include \"feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\n/** @struct LABFeature\n *  @brief Locally Assembled Binary (LAB) feature.\n *\n *  It is parameterized by the coordinates of top left corner.\n */\ntypedef struct LABFeature {\n  int32_t x;\n  int32_t y;\n} LABFeature;\n\nclass LABFeatureMap : public seeta::fd::FeatureMap {\n public:\n  LABFeatureMap() : rect_width_(3), rect_height_(3), num_rect_(3) {}\n  virtual ~LABFeatureMap() {}\n\n  virtual void Compute(const uint8_t* input, int32_t width, int32_t height);\n\n  inline uint8_t GetFeatureVal(int32_t offset_x, int32_t offset_y) const {\n    return feat_map_[(roi_.y + offset_y) * width_ + roi_.x + offset_x];\n  }\n\n  float GetStdDev() const;\n\n private:\n  void Reshape(int32_t width, int32_t height);\n  void ComputeIntegralImages(const uint8_t* input);\n  void ComputeRectSum();\n  void ComputeFeatureMap();\n\n  template<typename Int32Type>\n  inline void Integral(Int32Type* data) {\n    const Int32Type* src = data;\n    Int32Type* dest = data;\n    const Int32Type* dest_above = dest;\n\n    *dest = *(src++);\n    for (int32_t c = 1; c < width_; c++, src++, dest++)\n      *(dest + 1) = (*dest) + (*src);\n    dest++;\n    for (int32_t r = 1; r < height_; r++) {\n      for (int32_t c = 0, s = 0; c < width_; c++, src++, dest++, dest_above++) {\n        s += (*src);\n        *dest = *dest_above + s;\n      }\n    }\n  }\n\n  const int32_t rect_width_;\n  const int32_t rect_height_;\n  const int32_t num_rect_;\n\n  std::vector<uint8_t> feat_map_;\n  std::vector<int32_t> rect_sum_;\n  std::vector<int32_t> int_img_;\n  std::vector<uint32_t> square_int_img_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_FEAT_LAB_FEATURE_MAP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/feat/surf_feature_map.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_FEAT_SURF_FEATURE_MAP_H_\n#define SEETA_FD_FEAT_SURF_FEATURE_MAP_H_\n\n#include <cstdint>\n#include <cstring>\n#include <vector>\n\n#include \"common.h\"\n#include \"feature_map.h\"\n#include \"util/math_func.h\"\n\nnamespace seeta {\nnamespace fd {\n\ntypedef struct SURFFeature {\n  seeta::Rect patch;\n  int32_t num_cell_per_row;\n  int32_t num_cell_per_col;\n} SURFFeature;\n\nclass SURFFeaturePool {\n public:\n  SURFFeaturePool()\n      : sample_width_(40), sample_height_(40),\n        patch_move_step_x_(16), patch_move_step_y_(16), patch_size_inc_step_(1),\n        patch_min_width_(16), patch_min_height_(16) {}\n\n  ~SURFFeaturePool() {}\n\n  void Create();\n  void AddPatchFormat(int32_t width, int32_t height, int32_t num_cell_per_row,\n      int32_t num_cell_per_col);\n\n  inline bool empty() const { return pool_.empty(); }\n  inline std::size_t size() const { return pool_.size(); }\n\n  inline std::vector<SURFFeature>::const_iterator begin() const {\n    return pool_.begin();\n  }\n\n  inline std::vector<SURFFeature>::const_iterator end() const {\n    return pool_.end();\n  }\n\n  inline const SURFFeature & operator[](std::size_t idx) const {\n    return pool_[idx];\n  }\n\n private:\n  void AddAllFeaturesToPool(int32_t width, int32_t height,\n      int32_t num_cell_per_row, int32_t num_cell_per_col);\n\n  typedef struct SURFPatchFormat {\n    /**< aspect ratio, s.t. GCD(width, height) = 1 */\n    int32_t width;\n    int32_t height;\n\n    /**< cell partition */\n    int32_t num_cell_per_row;\n    int32_t num_cell_per_col;\n  } SURFPatchFormat;\n\n  int32_t sample_width_;\n  int32_t sample_height_;\n  int32_t patch_move_step_x_;\n  int32_t patch_move_step_y_;\n  int32_t patch_size_inc_step_; /**< incremental step of patch width and */\n                                /**< height when build feature pool      */\n  int32_t patch_min_width_;\n  int32_t patch_min_height_;\n\n  std::vector<SURFFeature> pool_;\n  std::vector<SURFPatchFormat> format_;\n};\n\nclass SURFFeatureMap : public FeatureMap {\n public:\n  SURFFeatureMap() : buf_valid_reset_(false) { InitFeaturePool(); }\n  virtual ~SURFFeatureMap() {}\n\n  virtual void Compute(const uint8_t* input, int32_t width, int32_t height);\n\n  inline virtual void SetROI(const seeta::Rect & roi) {\n    roi_ = roi;\n    if (buf_valid_reset_) {\n      std::memset(buf_valid_.data(), 0, buf_valid_.size() * sizeof(int32_t));\n      buf_valid_reset_ = false;\n    }\n  }\n\n  inline int32_t GetFeatureVectorDim(int32_t feat_id) const {\n    return (feat_pool_[feat_id].num_cell_per_col *\n      feat_pool_[feat_id].num_cell_per_row * kNumIntChannel);\n  }\n\n  void GetFeatureVector(int32_t featID, float* featVec);\n\n private:\n  void InitFeaturePool();\n  void Reshape(int32_t width, int32_t height);\n\n  void ComputeGradientImages(const uint8_t* input);\n  void ComputeGradX(const int32_t* input);\n  void ComputeGradY(const int32_t* input);\n  void ComputeIntegralImages();\n  void Integral();\n  void MaskIntegralChannel();\n\n  inline void FillIntegralChannel(const int32_t* src, int32_t ch) {\n    int32_t* dest = int_img_.data() + ch;\n    int32_t len = width_ * height_;\n    for (int32_t i = 0; i < len; i++) {\n      *dest = *src;\n      *(dest + 2) = *src;\n      dest += kNumIntChannel;\n      src++;\n    }\n  }\n\n  void ComputeFeatureVector(const SURFFeature & feat, int32_t* feat_vec);\n  void NormalizeFeatureVectorL2(const int32_t* feat_vec, float* feat_vec_normed,\n    int32_t len) const;\n\n  /**\n   * Number of channels should be divisible by 4.\n   */\n  void VectorCumAdd(int32_t* x, int32_t len, int32_t num_channel);\n\n  static const int32_t kNumIntChannel = 8;\n\n  bool buf_valid_reset_;\n\n  std::vector<int32_t> grad_x_;\n  std::vector<int32_t> grad_y_;\n  std::vector<int32_t> int_img_;\n  std::vector<int32_t> img_buf_;\n  std::vector<std::vector<int32_t> > feat_vec_buf_;\n  std::vector<std::vector<float> > feat_vec_normed_buf_;\n  std::vector<int32_t> buf_valid_;\n\n  seeta::fd::SURFFeaturePool feat_pool_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_FEAT_SURF_FEATURE_MAP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/feature_map.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_FEATURE_MAP_H_\n#define SEETA_FD_FEATURE_MAP_H_\n\n#include \"common.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass FeatureMap {\n public:\n  FeatureMap()\n      : width_(0), height_(0) {\n    roi_.x = 0;\n    roi_.y = 0;\n    roi_.width = 0;\n    roi_.height = 0;\n  }\n\n  virtual ~FeatureMap() {}\n\n  virtual void Compute(const uint8_t* input, int32_t width, int32_t height) = 0;\n\n  inline virtual void SetROI(const seeta::Rect & roi) {\n    roi_ = roi;\n  }\n\n protected:\n  int32_t width_;\n  int32_t height_;\n\n  seeta::Rect roi_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_FEATURE_MAP_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/fust.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_FUST_H_\n#define SEETA_FD_FUST_H_\n\n#include <algorithm>\n#include <fstream>\n#include <map>\n#include <memory>\n#include <string>\n#include <vector>\n\n#include \"classifier.h\"\n#include \"detector.h\"\n#include \"feature_map.h\"\n#include \"model_reader.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass FuStDetector : public Detector {\n public:\n  FuStDetector()\n      : wnd_size_(40), slide_wnd_step_x_(4), slide_wnd_step_y_(4),\n        num_hierarchy_(0) {\n    wnd_data_buf_.resize(wnd_size_ * wnd_size_);\n    wnd_data_.resize(wnd_size_ * wnd_size_);\n  }\n\n  ~FuStDetector() {}\n\n  virtual bool LoadModel(const std::string & model_path);\n  virtual std::vector<seeta::FaceInfo> Detect(seeta::fd::ImagePyramid* img_pyramid);\n\n  inline virtual void SetWindowSize(int32_t size) {\n    if (size >= 20)\n      wnd_size_ = size;\n  }\n\n  inline virtual void SetSlideWindowStep(int32_t step_x, int32_t step_y) {\n    if (step_x > 0)\n      slide_wnd_step_x_ = step_x;\n    if (step_y > 0)\n      slide_wnd_step_y_ = step_y;\n  }\n\n private:\n  std::shared_ptr<seeta::fd::ModelReader> CreateModelReader(seeta::fd::ClassifierType type);\n  std::shared_ptr<seeta::fd::Classifier> CreateClassifier(seeta::fd::ClassifierType type);\n  std::shared_ptr<seeta::fd::FeatureMap> CreateFeatureMap(seeta::fd::ClassifierType type);\n\n  void GetWindowData(const seeta::ImageData & img, const seeta::Rect & wnd);\n\n  int32_t wnd_size_;\n  int32_t slide_wnd_step_x_;\n  int32_t slide_wnd_step_y_;\n\n  int32_t num_hierarchy_;\n  std::vector<int32_t> hierarchy_size_;\n  std::vector<int32_t> num_stage_;\n  std::vector<std::vector<int32_t> > wnd_src_id_;\n\n  std::vector<uint8_t> wnd_data_buf_;\n  std::vector<uint8_t> wnd_data_;\n\n  std::vector<std::shared_ptr<seeta::fd::Classifier> > model_;\n  std::vector<std::shared_ptr<seeta::fd::FeatureMap> > feat_map_;\n  std::map<seeta::fd::ClassifierType, int32_t> cls2feat_idx_;\n\n  DISABLE_COPY_AND_ASSIGN(FuStDetector);\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_FUST_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/io/lab_boost_model_reader.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_IO_LAB_BOOST_MODEL_READER_H_\n#define SEETA_FD_IO_LAB_BOOST_MODEL_READER_H_\n\n#include <istream>\n#include <vector>\n\n#include \"model_reader.h\"\n#include \"classifier/lab_boosted_classifier.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass LABBoostModelReader : public ModelReader {\n public:\n  LABBoostModelReader() : ModelReader() {}\n  virtual ~LABBoostModelReader() {}\n\n  virtual bool Read(std::istream* input, seeta::fd::Classifier* model);\n\n private:\n  bool ReadFeatureParam(std::istream* input,\n    seeta::fd::LABBoostedClassifier* model);\n  bool ReadBaseClassifierParam(std::istream* input,\n    seeta::fd::LABBoostedClassifier* model);\n\n  int32_t num_bin_;\n  int32_t num_base_classifer_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_IO_LAB_BOOST_MODEL_READER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/io/surf_mlp_model_reader.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_IO_SURF_MLP_MODEL_READER_H_\n#define SEETA_FD_IO_SURF_MLP_MODEL_READER_H_\n\n#include <iosfwd>\n#include <vector>\n\n#include \"model_reader.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass SURFMLPModelReader : public ModelReader {\n public:\n  SURFMLPModelReader() {}\n  virtual ~SURFMLPModelReader() {}\n\n  virtual bool Read(std::istream* input, seeta::fd::Classifier* model);\n\n private:\n  std::vector<int32_t> feat_id_buf_;\n  std::vector<float> weights_buf_;\n  std::vector<float> bias_buf_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_IO_SURF_MLP_MODEL_READER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/model_reader.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_MODEL_READER_H_\n#define SEETA_FD_MODEL_READER_H_\n\n#include <iosfwd>\n\n#include \"classifier.h\"\n\nnamespace seeta {\nnamespace fd {\n\nclass ModelReader {\n public:\n  ModelReader() {}\n  virtual ~ModelReader() {}\n\n  virtual bool Read(std::istream* input, seeta::fd::Classifier* model) = 0;\n\n  DISABLE_COPY_AND_ASSIGN(ModelReader);\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_MODEL_READER_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/util/image_pyramid.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_UTIL_IMAGE_PYRAMID_H_\n#define SEETA_FD_UTIL_IMAGE_PYRAMID_H_\n\n#include <cstdint>\n#include <string>\n#include <cstring>\n\n#include \"common.h\"\n\nnamespace seeta {\nnamespace fd {\n\nstatic void ResizeImage(const seeta::ImageData & src, seeta::ImageData* dest) {\n  int32_t src_width = src.width;\n  int32_t src_height = src.height;\n  int32_t dest_width = dest->width;\n  int32_t dest_height = dest->height;\n  if (src_width == dest_width && src_height == dest_height) {\n    std::memcpy(dest->data, src.data, src_width * src_height * sizeof(uint8_t));\n    return;\n  }\n\n  double lf_x_scl = static_cast<double>(src_width) / dest_width;\n  double lf_y_Scl = static_cast<double>(src_height) / dest_height;\n  const uint8_t* src_data = src.data;\n  uint8_t* dest_data = dest->data;\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t y = 0; y < dest_height; y++) {\n      for (int32_t x = 0; x < dest_width; x++) {\n        double lf_x_s = lf_x_scl * x;\n        double lf_y_s = lf_y_Scl * y;\n\n        int32_t n_x_s = static_cast<int>(lf_x_s);\n        n_x_s = (n_x_s <= (src_width - 2) ? n_x_s : (src_width - 2));\n        int32_t n_y_s = static_cast<int>(lf_y_s);\n        n_y_s = (n_y_s <= (src_height - 2) ? n_y_s : (src_height - 2));\n\n        double lf_weight_x = lf_x_s - n_x_s;\n        double lf_weight_y = lf_y_s - n_y_s;\n\n        double dest_val = (1 - lf_weight_y) * ((1 - lf_weight_x) *\n          src_data[n_y_s * src_width + n_x_s] +\n          lf_weight_x * src_data[n_y_s * src_width + n_x_s + 1]) +\n          lf_weight_y * ((1 - lf_weight_x) * src_data[(n_y_s + 1) * src_width + n_x_s] +\n          lf_weight_x * src_data[(n_y_s + 1) * src_width + n_x_s + 1]);\n\n        dest_data[y * dest_width + x] = static_cast<uint8_t>(dest_val);\n      }\n    }\n  }\n}\n\nclass ImagePyramid {\n public:\n  ImagePyramid()\n      : max_scale_(1.0f), min_scale_(1.0f),\n        scale_factor_(1.0f), scale_step_(0.8f),\n        width1x_(0), height1x_(0),\n        width_scaled_(0), height_scaled_(0),\n        buf_img_width_(2), buf_img_height_(2),\n        buf_scaled_width_(2), buf_scaled_height_(2) {\n    buf_img_ = new uint8_t[buf_img_width_ * buf_img_height_];\n    buf_img_scaled_ = new uint8_t[buf_scaled_width_ * buf_scaled_height_];\n  }\n\n  ~ImagePyramid() {\n    delete[] buf_img_;\n    buf_img_ = nullptr;\n\n    buf_img_width_ = 0;\n    buf_img_height_ = 0;\n\n    delete[] buf_img_scaled_;\n    buf_img_scaled_ = nullptr;\n\n    buf_scaled_width_ = 0;\n    buf_scaled_height_ = 0;\n\n    img_scaled_.data = nullptr;\n    img_scaled_.width = 0;\n    img_scaled_.height = 0;\n  }\n\n  inline void SetScaleStep(float step) {\n    if (step > 0.0f && step <= 1.0f)\n      scale_step_ = step;\n  }\n\n  inline void SetMinScale(float min_scale) {\n    min_scale_ = min_scale;\n  }\n\n  inline void SetMaxScale(float max_scale) {\n    max_scale_ = max_scale;\n    scale_factor_ = max_scale;\n    UpdateBufScaled();\n  }\n\n  void SetImage1x(const uint8_t* img_data, int32_t width, int32_t height);\n\n  inline float min_scale() const { return min_scale_; }\n  inline float max_scale() const { return max_scale_; }\n\n  inline seeta::ImageData image1x() {\n    seeta::ImageData img(width1x_, height1x_, 1);\n    img.data = buf_img_;\n    return img;\n  }\n\n  const seeta::ImageData* GetNextScaleImage(float* scale_factor = nullptr);\n\n private:\n  void UpdateBufScaled();\n\n  float max_scale_;\n  float min_scale_;\n\n  float scale_factor_;\n  float scale_step_;\n\n  int32_t width1x_;\n  int32_t height1x_;\n\n  int32_t width_scaled_;\n  int32_t height_scaled_;\n\n  uint8_t* buf_img_;\n  int32_t buf_img_width_;\n  int32_t buf_img_height_;\n\n  uint8_t* buf_img_scaled_;\n  int32_t buf_scaled_width_;\n  int32_t buf_scaled_height_;\n\n  seeta::ImageData img_scaled_;\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_UTIL_IMAGE_PYRAMID_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/util/math_func.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_UTIL_MATH_FUNC_H_\n#define SEETA_FD_UTIL_MATH_FUNC_H_\n\n#ifdef USE_SSE\n#include <immintrin.h>\n#endif\n\n#include <cstdint>\n\nnamespace seeta {\nnamespace fd {\n\nclass MathFunction {\n public:\n  static inline void UInt8ToInt32(const uint8_t* src, int32_t* dest,\n      int32_t len) {\n    for (int32_t i = 0; i < len; i++)\n      *(dest++) = static_cast<int32_t>(*(src++));\n  }\n\n  static inline void VectorAdd(const int32_t* x, const int32_t* y, int32_t* z,\n      int32_t len) {\n    int32_t i;\n#ifdef USE_SSE\n    __m128i x1;\n    __m128i y1;\n    const __m128i* x2 = reinterpret_cast<const __m128i*>(x);\n    const __m128i* y2 = reinterpret_cast<const __m128i*>(y);\n    __m128i* z2 = reinterpret_cast<__m128i*>(z);\n\n    for (i = 0; i < len - 4; i += 4) {\n      x1 = _mm_loadu_si128(x2++);\n      y1 = _mm_loadu_si128(y2++);\n      _mm_storeu_si128(z2++, _mm_add_epi32(x1, y1));\n    }\n    for (; i < len; i++)\n      *(z + i) = (*(x + i)) + (*(y + i));\n#else\n    for (i = 0; i < len; i++)\n      *(z + i) = (*(x + i)) + (*(y + i));\n#endif\n  }\n\n  static inline void VectorSub(const int32_t* x, const int32_t* y, int32_t* z,\n      int32_t len) {\n    int32_t i;\n#ifdef USE_SSE\n    __m128i x1;\n    __m128i y1;\n    const __m128i* x2 = reinterpret_cast<const __m128i*>(x);\n    const __m128i* y2 = reinterpret_cast<const __m128i*>(y);\n    __m128i* z2 = reinterpret_cast<__m128i*>(z);\n\n    for (i = 0; i < len - 4; i += 4) {\n      x1 = _mm_loadu_si128(x2++);\n      y1 = _mm_loadu_si128(y2++);\n\n      _mm_storeu_si128(z2++, _mm_sub_epi32(x1, y1));\n    }\n    for (; i < len; i++)\n      *(z + i) = (*(x + i)) - (*(y + i));\n#else\n    for (i = 0; i < len; i++)\n      *(z + i) = (*(x + i)) - (*(y + i));\n#endif\n  }\n\n  static inline void VectorAbs(const int32_t* src, int32_t* dest, int32_t len) {\n    int32_t i;\n#ifdef USE_SSE\n    __m128i val;\n    __m128i val_abs;\n    const __m128i* x = reinterpret_cast<const __m128i*>(src);\n    __m128i* y = reinterpret_cast<__m128i*>(dest);\n\n    for (i = 0; i < len - 4; i += 4) {\n      val = _mm_loadu_si128(x++);\n      val_abs = _mm_abs_epi32(val);\n      _mm_storeu_si128(y++, val_abs);\n    }\n    for (; i < len; i++)\n      dest[i] = (src[i] >= 0 ? src[i] : -src[i]);\n#else\n    for (i = 0; i < len; i++)\n      dest[i] = (src[i] >= 0 ? src[i] : -src[i]);\n#endif\n  }\n\n  static inline void Square(const int32_t* src, uint32_t* dest, int32_t len) {\n    int32_t i;\n#ifdef USE_SSE\n    __m128i x1;\n    const __m128i* x2 = reinterpret_cast<const __m128i*>(src);\n    __m128i* y2 = reinterpret_cast<__m128i*>(dest);\n\n    for (i = 0; i < len - 4; i += 4) {\n      x1 = _mm_loadu_si128(x2++);\n      _mm_storeu_si128(y2++, _mm_mullo_epi32(x1, x1));\n    }\n    for (; i < len; i++)\n      *(dest + i) = (*(src + i)) * (*(src + i));\n#else\n    for (i = 0; i < len; i++)\n      *(dest + i) = (*(src + i)) * (*(src + i));\n#endif\n  }\n\n  static inline float VectorInnerProduct(const float* x, const float* y,\n      int32_t len) {\n    float prod = 0;\n    int32_t i;\n#ifdef USE_SSE\n    __m128 x1;\n    __m128 y1;\n    __m128 z1 = _mm_setzero_ps();\n    float buf[4];\n\n    for (i = 0; i < len - 4; i += 4) {\n      x1 = _mm_loadu_ps(x + i);\n      y1 = _mm_loadu_ps(y + i);\n      z1 = _mm_add_ps(z1, _mm_mul_ps(x1, y1));\n    }\n    _mm_storeu_ps(&buf[0], z1);\n    prod = buf[0] + buf[1] + buf[2] + buf[3];\n    for (; i < len; i++)\n      prod += x[i] * y[i];\n#else\n    for (i = 0; i < len; i++)\n        prod += x[i] * y[i];\n#endif\n    return prod;\n  }\n};\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_UTIL_MATH_FUNC_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/include/util/nms.h",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#ifndef SEETA_FD_UTIL_NMS_H_\n#define SEETA_FD_UTIL_NMS_H_\n\n#include <vector>\n\n#include \"common.h\"\n\nnamespace seeta {\nnamespace fd {\n\nvoid NonMaximumSuppression(std::vector<seeta::FaceInfo>* bboxes,\n  std::vector<seeta::FaceInfo>* bboxes_nms, float iou_thresh = 0.8f);\n\n}  // namespace fd\n}  // namespace seeta\n\n#endif  // SEETA_FD_UTIL_NMS_H_\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/classifier/lab_boosted_classifier.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"classifier/lab_boosted_classifier.h\"\n\n#include <memory>\n#include <string>\n\nnamespace seeta {\nnamespace fd {\n\nvoid LABBaseClassifier::SetWeights(const float* weights, int32_t num_bin) {\n  weights_.resize(num_bin + 1);\n  num_bin_ = num_bin;\n  std::copy(weights, weights + num_bin_ + 1, weights_.begin());\n}\n\nbool LABBoostedClassifier::Classify(float* score, float* outputs) {\n  bool isPos = true;\n  float s = 0.0f;\n\n  for (size_t i = 0; isPos && i < base_classifiers_.size();) {\n    for (int32_t j = 0; j < kFeatGroupSize; j++, i++) {\n      uint8_t featVal = feat_map_->GetFeatureVal(feat_[i].x, feat_[i].y);\n      s += base_classifiers_[i]->weights(featVal);\n    }\n    if (s < base_classifiers_[i - 1]->threshold())\n      isPos = false;\n  }\n  isPos = isPos && ((!use_std_dev_) || feat_map_->GetStdDev() > kStdDevThresh);\n\n  if (score != nullptr)\n    *score = s;\n  if (outputs != nullptr)\n    *outputs = s;\n\n  return isPos;\n}\n\nvoid LABBoostedClassifier::AddFeature(int32_t x, int32_t y) {\n  LABFeature feat;\n  feat.x = x;\n  feat.y = y;\n  feat_.push_back(feat);\n}\n\nvoid LABBoostedClassifier::AddBaseClassifier(const float* weights,\n    int32_t num_bin, float thresh) {\n  std::shared_ptr<LABBaseClassifier> classifier(new LABBaseClassifier());\n  classifier->SetWeights(weights, num_bin);\n  classifier->SetThreshold(thresh);\n  base_classifiers_.push_back(classifier);\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/classifier/mlp.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"classifier/mlp.h\"\n\n#include \"common.h\"\n\nnamespace seeta {\nnamespace fd {\n\nvoid MLPLayer::Compute(const float* input, float* output) {\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t i = 0; i < output_dim_; i++) {\n      output[i] = seeta::fd::MathFunction::VectorInnerProduct(input,\n        weights_.data() + i * input_dim_, input_dim_) + bias_[i];\n      output[i] = (act_func_type_ == 1 ? ReLU(output[i]) : Sigmoid(-output[i]));\n    }\n  }\n}\n\nvoid MLP::Compute(const float* input, float* output) {\n  layer_buf_[0].resize(layers_[0]->GetOutputDim());\n  layers_[0]->Compute(input, layer_buf_[0].data());\n\n  size_t i; /**< layer index */\n  for (i = 1; i < layers_.size() - 1; i++) {\n    layer_buf_[i % 2].resize(layers_[i]->GetOutputDim());\n    layers_[i]->Compute(layer_buf_[(i + 1) % 2].data(), layer_buf_[i % 2].data());\n  }\n  layers_.back()->Compute(layer_buf_[(i + 1) % 2].data(), output);\n}\n\nvoid MLP::AddLayer(int32_t inputDim, int32_t outputDim, const float* weights,\n    const float* bias, bool is_output) {\n  if (layers_.size() > 0 && inputDim != layers_.back()->GetOutputDim())\n    return;  // @todo handle the errors!!!\n\n  std::shared_ptr<seeta::fd::MLPLayer> layer(new seeta::fd::MLPLayer(is_output ? 0 : 1));\n  layer->SetSize(inputDim, outputDim);\n  layer->SetWeights(weights, inputDim * outputDim);\n  layer->SetBias(bias, outputDim);\n  layers_.push_back(layer);\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/classifier/surf_mlp.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"classifier/surf_mlp.h\"\n\n#include <string>\n\nnamespace seeta {\nnamespace fd {\n\nbool SURFMLP::Classify(float* score, float* outputs) {\n  float* dest = input_buf_.data();\n  for (size_t i = 0; i < feat_id_.size(); i++) {\n    feat_map_->GetFeatureVector(feat_id_[i] - 1, dest);\n    dest += feat_map_->GetFeatureVectorDim(feat_id_[i]);\n  }\n  output_buf_.resize(model_->GetOutputDim());\n  model_->Compute(input_buf_.data(), output_buf_.data());\n\n  if (score != nullptr)\n    *score = output_buf_[0];\n  if (outputs != nullptr) {\n    std::memcpy(outputs, output_buf_.data(),\n      model_->GetOutputDim() * sizeof(float));\n  }\n\n  return (output_buf_[0] > thresh_);\n}\n\nvoid SURFMLP::AddFeatureByID(int32_t feat_id) {\n  feat_id_.push_back(feat_id);\n}\n\nvoid SURFMLP::AddLayer(int32_t input_dim, int32_t output_dim,\n    const float* weights, const float* bias, bool is_output) {\n  if (model_->GetLayerNum() == 0)\n    input_buf_.resize(input_dim);\n  model_->AddLayer(input_dim, output_dim, weights, bias, is_output);\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/face_detection.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"face_detection.h\"\n\n#include <memory>\n#include <vector>\n\n#include \"detector.h\"\n#include \"fust.h\"\n#include \"util/image_pyramid.h\"\n\nnamespace seeta {\n\nclass FaceDetection::Impl {\n public:\n  Impl()\n      : detector_(new seeta::fd::FuStDetector()),\n        slide_wnd_step_x_(4), slide_wnd_step_y_(4),\n        min_face_size_(20), max_face_size_(-1),\n        cls_thresh_(3.85f) {}\n\n  ~Impl() {}\n\n  inline bool IsLegalImage(const seeta::ImageData & image) {\n    return (image.num_channels == 1 && image.width > 0 && image.height > 0 &&\n      image.data != nullptr);\n  }\n\n public:\n  static const int32_t kWndSize = 40;\n\n  int32_t min_face_size_;\n  int32_t max_face_size_;\n  int32_t slide_wnd_step_x_;\n  int32_t slide_wnd_step_y_;\n  float cls_thresh_;\n\n  std::vector<seeta::FaceInfo> pos_wnds_;\n  std::unique_ptr<seeta::fd::Detector> detector_;\n  seeta::fd::ImagePyramid img_pyramid_;\n};\n\nFaceDetection::FaceDetection(const char* model_path)\n    : impl_(new seeta::FaceDetection::Impl()) {\n  bool ll = impl_->detector_->LoadModel(model_path);\n        ll = ll;\n}\n\nFaceDetection::~FaceDetection() {\n  if (impl_ != nullptr)\n    delete impl_;\n}\n\nstd::vector<seeta::FaceInfo> FaceDetection::Detect(\n    const seeta::ImageData & img) {\n  if (!impl_->IsLegalImage(img))\n    return std::vector<seeta::FaceInfo>();\n\n  int32_t min_img_size = img.height <= img.width ? img.height : img.width;\n  min_img_size = (impl_->max_face_size_ > 0 ?\n    (min_img_size >= impl_->max_face_size_ ? impl_->max_face_size_ : min_img_size) :\n    min_img_size);\n\n  impl_->img_pyramid_.SetImage1x(img.data, img.width, img.height);\n  impl_->img_pyramid_.SetMinScale(static_cast<float>(impl_->kWndSize) / min_img_size);\n\n  impl_->detector_->SetWindowSize(impl_->kWndSize);\n  impl_->detector_->SetSlideWindowStep(impl_->slide_wnd_step_x_,\n    impl_->slide_wnd_step_y_);\n\n  impl_->pos_wnds_ = impl_->detector_->Detect(&(impl_->img_pyramid_));\n\n  for (int32_t i = 0; i < impl_->pos_wnds_.size(); i++) {\n    if (impl_->pos_wnds_[i].score < impl_->cls_thresh_) {\n      impl_->pos_wnds_.resize(i);\n      break;\n    }\n  }\n\n  return impl_->pos_wnds_;\n}\n\nvoid FaceDetection::SetMinFaceSize(int32_t size) {\n  if (size >= 20) {\n    impl_->min_face_size_ = size;\n    impl_->img_pyramid_.SetMaxScale(impl_->kWndSize / static_cast<float>(size));\n  }\n}\n\nvoid FaceDetection::SetMaxFaceSize(int32_t size) {\n  if (size >= 0)\n    impl_->max_face_size_ = size;\n}\n\nvoid FaceDetection::SetImagePyramidScaleFactor(float factor) {\n  if (factor >= 0.01f && factor <= 0.99f)\n    impl_->img_pyramid_.SetScaleStep(static_cast<float>(factor));\n}\n\nvoid FaceDetection::SetWindowStep(int32_t step_x, int32_t step_y) {\n  if (step_x > 0)\n    impl_->slide_wnd_step_x_ = step_x;\n  if (step_y > 0)\n    impl_->slide_wnd_step_y_ = step_y;\n}\n\nvoid FaceDetection::SetScoreThresh(float thresh) {\n  if (thresh >= 0)\n    impl_->cls_thresh_ = thresh;\n}\n\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/feat/lab_feature_map.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"feat/lab_feature_map.h\"\n\n#include <cmath>\n\n#include \"util/math_func.h\"\n\nnamespace seeta {\nnamespace fd {\n\nvoid LABFeatureMap::Compute(const uint8_t* input, int32_t width,\n    int32_t height) {\n  if (input == nullptr || width <= 0 || height <= 0) {\n    return;  // @todo handle the errors!!!\n  }\n\n  Reshape(width, height);\n  ComputeIntegralImages(input);\n  ComputeRectSum();\n  ComputeFeatureMap();\n}\n\nfloat LABFeatureMap::GetStdDev() const {\n  double mean;\n  double m2;\n  double area = roi_.width * roi_.height;\n\n  int32_t top_left;\n  int32_t top_right;\n  int32_t bottom_left;\n  int32_t bottom_right;\n\n  if (roi_.x != 0) {\n    if (roi_.y != 0) {\n      top_left = (roi_.y - 1) * width_ + roi_.x - 1;\n      top_right = top_left + roi_.width;\n      bottom_left = top_left + roi_.height * width_;\n      bottom_right = bottom_left + roi_.width;\n\n      mean = (int_img_[bottom_right] - int_img_[bottom_left] +\n        int_img_[top_left] - int_img_[top_right]) / area;\n      m2 = (square_int_img_[bottom_right] - square_int_img_[bottom_left] +\n        square_int_img_[top_left] - square_int_img_[top_right]) / area;\n    } else {\n      bottom_left = (roi_.height - 1) * width_ + roi_.x - 1;\n      bottom_right = bottom_left + roi_.width;\n\n      mean = (int_img_[bottom_right] - int_img_[bottom_left]) / area;\n      m2 = (square_int_img_[bottom_right] - square_int_img_[bottom_left]) / area;\n    }\n  } else {\n    if (roi_.y != 0) {\n      top_right = (roi_.y - 1) * width_ + roi_.width - 1;\n      bottom_right = top_right + roi_.height * width_;\n\n      mean = (int_img_[bottom_right] - int_img_[top_right]) / area;\n      m2 = (square_int_img_[bottom_right] - square_int_img_[top_right]) / area;\n    } else {\n      bottom_right = (roi_.height - 1) * width_ + roi_.width - 1;\n      mean = int_img_[bottom_right] / area;\n      m2 = square_int_img_[bottom_right] / area;\n    }\n  }\n\n  return static_cast<float>(std::sqrt(m2 - mean * mean));\n}\n\nvoid LABFeatureMap::Reshape(int32_t width, int32_t height) {\n  width_ = width;\n  height_ = height;\n\n  int32_t len = width_ * height_;\n  feat_map_.resize(len);\n  rect_sum_.resize(len);\n  int_img_.resize(len);\n  square_int_img_.resize(len);\n}\n\nvoid LABFeatureMap::ComputeIntegralImages(const uint8_t* input) {\n  int32_t len = width_ * height_;\n\n  seeta::fd::MathFunction::UInt8ToInt32(input, int_img_.data(), len);\n  seeta::fd::MathFunction::Square(int_img_.data(), square_int_img_.data(), len);\n  Integral(int_img_.data());\n  Integral(square_int_img_.data());\n}\n\nvoid LABFeatureMap::ComputeRectSum() {\n  int32_t width = width_ - rect_width_;\n  int32_t height = height_ - rect_height_;\n  const int32_t* int_img = int_img_.data();\n  int32_t* rect_sum = rect_sum_.data();\n\n  *rect_sum = *(int_img + (rect_height_ - 1) * width_ + rect_width_ - 1);\n  seeta::fd::MathFunction::VectorSub(int_img + (rect_height_ - 1) * width_ +\n    rect_width_, int_img + (rect_height_ - 1) * width_, rect_sum + 1, width);\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t i = 1; i <= height; i++) {\n      const int32_t* top_left = int_img + (i - 1) * width_;\n      const int32_t* top_right = top_left + rect_width_ - 1;\n      const int32_t* bottom_left = top_left + rect_height_ * width_;\n      const int32_t* bottom_right = bottom_left + rect_width_ - 1;\n      int32_t* dest = rect_sum + i * width_;\n\n      *(dest++) = (*bottom_right) - (*top_right);\n      seeta::fd::MathFunction::VectorSub(bottom_right + 1, top_right + 1, dest, width);\n      seeta::fd::MathFunction::VectorSub(dest, bottom_left, dest, width);\n      seeta::fd::MathFunction::VectorAdd(dest, top_left, dest, width);\n    }\n  }\n}\n\nvoid LABFeatureMap::ComputeFeatureMap() {\n  int32_t width = width_ - rect_width_ * num_rect_;\n  int32_t height = height_ - rect_height_ * num_rect_;\n  int32_t offset = width_ * rect_height_;\n  uint8_t* feat_map = feat_map_.data();\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t r = 0; r <= height; r++) {\n      for (int32_t c = 0; c <= width; c++) {\n        uint8_t* dest = feat_map + r * width_ + c;\n        *dest = 0;\n\n        int32_t white_rect_sum = rect_sum_[(r + rect_height_) * width_ + c + rect_width_];\n        int32_t black_rect_idx = r * width_ + c;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x80 : 0x0);\n        black_rect_idx += rect_width_;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x40 : 0x0);\n        black_rect_idx += rect_width_;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x20 : 0x0);\n        black_rect_idx += offset;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x08 : 0x0);\n        black_rect_idx += offset;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x01 : 0x0);\n        black_rect_idx -= rect_width_;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x02 : 0x0);\n        black_rect_idx -= rect_width_;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x04 : 0x0);\n        black_rect_idx -= offset;\n        *dest |= (white_rect_sum >= rect_sum_[black_rect_idx] ? 0x10 : 0x0);\n      }\n    }\n  }\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/feat/surf_feature_map.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include <cmath>\n#include \"feat/surf_feature_map.h\"\n\nnamespace seeta {\nnamespace fd {\n\nvoid SURFFeaturePool::Create() {\n  if (sample_height_ - patch_min_height_ <= sample_width_ - patch_min_width_) {\n    for (size_t i = 0; i < format_.size(); i++) {\n      const SURFPatchFormat & format = format_[i];\n      for (int32_t h = patch_min_height_; h <= sample_height_;\n          h += patch_size_inc_step_) {\n        if (h % format.num_cell_per_col != 0 || h % format.height != 0)\n          continue;\n        int32_t w = h / format.height * format.width;\n        if (w % format.num_cell_per_row != 0 || w < patch_min_width_ ||\n            w > sample_width_)\n          continue;\n        AddAllFeaturesToPool(w, h, format.num_cell_per_row,\n          format.num_cell_per_col);\n      }\n    }\n  } else {\n    for (size_t i = 0; i < format_.size(); i++) {\n      const SURFPatchFormat & format = format_[i];\n      for (int32_t w = patch_min_width_; w <= patch_min_width_;\n          w += patch_size_inc_step_) {\n        if (w % format.num_cell_per_row != 0 || w % format.width != 0)\n          continue;\n        int32_t h = w / format.width * format.height;\n        if (h % format.num_cell_per_col != 0 || h < patch_min_height_ ||\n            h > sample_height_)\n          continue;\n        AddAllFeaturesToPool(w, h, format.num_cell_per_row,\n          format.num_cell_per_col);\n      }\n    }\n  }\n}\n\nvoid SURFFeaturePool::AddPatchFormat(int32_t width, int32_t height,\n    int32_t num_cell_per_row, int32_t num_cell_per_col) {\n  for (size_t i = 0; i < format_.size(); i++) {\n    const SURFPatchFormat & format = format_[i];\n    if (format.height == height &&\n      format.width == width &&\n      format.num_cell_per_row == num_cell_per_row &&\n      format.num_cell_per_col == num_cell_per_col)\n      return;\n  }\n\n  SURFPatchFormat new_format;\n  new_format.height = height;\n  new_format.width = width;\n  new_format.num_cell_per_row = num_cell_per_row;\n  new_format.num_cell_per_col = num_cell_per_col;\n  format_.push_back(new_format);\n}\n\nvoid SURFFeaturePool::AddAllFeaturesToPool(int32_t width, int32_t height,\n    int32_t num_cell_per_row, int32_t num_cell_per_col) {\n  SURFFeature feat;\n  feat.patch.width = width;\n  feat.patch.height = height;\n  feat.num_cell_per_row = num_cell_per_row;\n  feat.num_cell_per_col = num_cell_per_col;\n\n  for (int32_t y = 0; y <= sample_height_ - height; y += patch_move_step_y_) {\n    feat.patch.y = y;\n    for (int32_t x = 0; x <= sample_width_ - width; x += patch_move_step_x_) {\n      feat.patch.x = x;\n      pool_.push_back(feat);\n    }\n  }\n}\n\nvoid SURFFeatureMap::Compute(const uint8_t* input, int32_t width,\n    int32_t height) {\n  if (input == nullptr || width <= 0 || height <= 0) {\n    return;  // @todo handle the error!\n  }\n  Reshape(width, height);\n  ComputeGradientImages(input);\n  ComputeIntegralImages();\n}\n\nvoid SURFFeatureMap::GetFeatureVector(int32_t feat_id, float* feat_vec) {\n  if (buf_valid_[feat_id] == 0) {\n    ComputeFeatureVector(feat_pool_[feat_id], feat_vec_buf_[feat_id].data());\n    NormalizeFeatureVectorL2(feat_vec_buf_[feat_id].data(),\n      feat_vec_normed_buf_[feat_id].data(),\n      static_cast<int32_t>(feat_vec_normed_buf_[feat_id].size()));\n    buf_valid_[feat_id] = 1;\n    buf_valid_reset_ = true;\n  }\n\n  std::memcpy(feat_vec, feat_vec_normed_buf_[feat_id].data(),\n    feat_vec_normed_buf_[feat_id].size() * sizeof(float));\n}\n\nvoid SURFFeatureMap::InitFeaturePool() {\n  feat_pool_.AddPatchFormat(1, 1, 2, 2);\n  feat_pool_.AddPatchFormat(1, 2, 2, 2);\n  feat_pool_.AddPatchFormat(2, 1, 2, 2);\n  feat_pool_.AddPatchFormat(2, 3, 2, 2);\n  feat_pool_.AddPatchFormat(3, 2, 2, 2);\n  feat_pool_.Create();\n\n  int32_t feat_pool_size = static_cast<int32_t>(feat_pool_.size());\n  feat_vec_buf_.resize(feat_pool_size);\n  feat_vec_normed_buf_.resize(feat_pool_size);\n  for (size_t i = 0; i < feat_pool_size; i++) {\n    int32_t dim = GetFeatureVectorDim(static_cast<int32_t>(i));\n    feat_vec_buf_[i].resize(dim);\n    feat_vec_normed_buf_[i].resize(dim);\n  }\n  buf_valid_.resize(feat_pool_size, 0);\n}\n\nvoid SURFFeatureMap::Reshape(int32_t width, int32_t height) {\n  width_ = width;\n  height_ = height;\n\n  int32_t len = width_ * height_;\n  grad_x_.resize(len);\n  grad_y_.resize(len);\n  int_img_.resize(len * kNumIntChannel);\n  img_buf_.resize(len);\n}\n\nvoid SURFFeatureMap::ComputeGradientImages(const uint8_t* input) {\n  int32_t len = width_ * height_;\n  seeta::fd::MathFunction::UInt8ToInt32(input, img_buf_.data(), len);\n  ComputeGradX(img_buf_.data());\n  ComputeGradY(img_buf_.data());\n}\n\nvoid SURFFeatureMap::ComputeGradX(const int32_t* input) {\n  int32_t* dx = grad_x_.data();\n  int32_t len = width_ - 2;\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t r = 0; r < height_; r++) {\n      const int32_t* src = input + r * width_;\n      int32_t* dest = dx + r * width_;\n      *dest = ((*(src + 1)) - (*src)) << 1;\n      seeta::fd::MathFunction::VectorSub(src + 2, src, dest + 1, len);\n      dest += (width_ - 1);\n      src += (width_ - 1);\n      *dest = ((*src) - (*(src - 1))) << 1;\n    }\n  }\n}\n\nvoid SURFFeatureMap::ComputeGradY(const int32_t* input) {\n  int32_t* dy = grad_y_.data();\n  int32_t len = width_;\n  seeta::fd::MathFunction::VectorSub(input + width_, input, dy, len);\n  seeta::fd::MathFunction::VectorAdd(dy, dy, dy, len);\n\n#pragma omp parallel num_threads(SEETA_NUM_THREADS)\n  {\n#pragma omp for nowait\n    for (int32_t r = 1; r < height_ - 1; r++) {\n      const int32_t* src = input + (r - 1) * width_;\n      int32_t* dest = dy + r * width_;\n      seeta::fd::MathFunction::VectorSub(src + (width_ << 1), src, dest, len);\n    }\n  }\n  int32_t offset = (height_ - 1) * width_;\n  dy += offset;\n  seeta::fd::MathFunction::VectorSub(input + offset, input + offset - width_,\n    dy, len);\n  seeta::fd::MathFunction::VectorAdd(dy, dy, dy, len);\n}\n\nvoid SURFFeatureMap::ComputeIntegralImages() {\n  FillIntegralChannel(grad_x_.data(), 0);\n  FillIntegralChannel(grad_y_.data(), 4);\n\n  int32_t len = width_ * height_;\n  seeta::fd::MathFunction::VectorAbs(grad_x_.data(), img_buf_.data(), len);\n  FillIntegralChannel(img_buf_.data(), 1);\n  seeta::fd::MathFunction::VectorAbs(grad_y_.data(), img_buf_.data(), len);\n  FillIntegralChannel(img_buf_.data(), 5);\n  MaskIntegralChannel();\n  Integral();\n}\n\nvoid SURFFeatureMap::MaskIntegralChannel() {\n  const int32_t* grad_x = grad_x_.data();\n  const int32_t* grad_y = grad_y_.data();\n  int32_t len = width_ * height_;\n#ifdef USE_SSE\n  __m128i dx;\n  __m128i dy;\n  __m128i dx_mask;\n  __m128i dy_mask;\n  __m128i zero = _mm_set1_epi32(0);\n  __m128i xor_bits = _mm_set_epi32(0x0, 0x0, 0xffffffff, 0xffffffff);\n  __m128i data;\n  __m128i result;\n  __m128i* src = reinterpret_cast<__m128i*>(int_img_.data());\n\n  for (int32_t i = 0; i < len; i++) {\n    dx = _mm_set1_epi32(*(grad_x++));\n    dy = _mm_set1_epi32(*(grad_y++));\n    dx_mask = _mm_xor_si128(_mm_cmplt_epi32(dx, zero), xor_bits);\n    dy_mask = _mm_xor_si128(_mm_cmplt_epi32(dy, zero), xor_bits);\n\n    data = _mm_loadu_si128(src);\n    result = _mm_and_si128(data, dy_mask);\n    _mm_storeu_si128(src++, result);\n    data = _mm_loadu_si128(src);\n    result = _mm_and_si128(data, dx_mask);\n    _mm_storeu_si128(src++, result);\n  }\n#else\n  int32_t dx, dy, dx_mask, dy_mask, cmp;\n  int32_t xor_bits[] = {-1, -1, 0, 0};\n\n  int32_t* src = int_img_.data();\n  for (int32_t i = 0; i < len; i++) {\n      dy = *(grad_y++);\n      dx = *(grad_x++);\n      \n      cmp = dy < 0 ? 0xffffffff : 0x0;\n      for (int32_t j = 0; j < 4; j++) {\n          // cmp xor xor_bits\n          dy_mask = cmp ^ xor_bits[j];\n          *(src) = (*src) & dy_mask;\n          src++;\n      }\n      \n      cmp = dx < 0 ? 0xffffffff : 0x0;\n      for (int32_t j = 0; j < 4; j++) {\n          // cmp xor xor_bits\n          dx_mask = cmp ^ xor_bits[j];\n          *(src) = (*src) & dx_mask;\n          src++;\n      }\n  }\n#endif\n}\n\nvoid SURFFeatureMap::Integral() {\n  int32_t* data = int_img_.data();\n  int32_t len = kNumIntChannel * width_;\n\n  // Cummulative sum by row\n  for (int32_t r = 0; r < height_ - 1; r++) {\n    int32_t* row1 = data + r * len;\n    int32_t* row2 = row1 + len;\n    seeta::fd::MathFunction::VectorAdd(row1, row2, row2, len);\n  }\n  // Cummulative sum by column\n  for (int32_t r = 0; r < height_; r++)\n    VectorCumAdd(data + r * len, len, kNumIntChannel);\n}\n\nvoid SURFFeatureMap::VectorCumAdd(int32_t* x, int32_t len,\n    int32_t num_channel) {\n#ifdef USE_SSE\n  __m128i x1;\n  __m128i y1;\n  __m128i z1;\n  __m128i* x2 = reinterpret_cast<__m128i*>(x);\n  __m128i* y2 = reinterpret_cast<__m128i*>(x + num_channel);\n  __m128i* z2 = y2;\n\n  len = len / num_channel - 1;\n  for (int32_t i = 0; i < len; i++) {\n    // first 4 channels\n    x1 = _mm_loadu_si128(x2++);\n    y1 = _mm_loadu_si128(y2++);\n    z1 = _mm_add_epi32(x1, y1);\n    _mm_storeu_si128(z2, z1);\n    z2 = y2;\n\n    // second 4 channels\n    x1 = _mm_loadu_si128(x2++);\n    y1 = _mm_loadu_si128(y2++);\n    z1 = _mm_add_epi32(x1, y1);\n    _mm_storeu_si128(z2, z1);\n    z2 = y2;\n  }\n#else\n  int32_t cols = len / num_channel - 1;\n  for (int32_t i = 0; i < cols; i++) {\n    int32_t* col1 = x + i * num_channel;\n    int32_t* col2 = col1 + num_channel;\n    seeta::fd::MathFunction::VectorAdd(col1, col2, col2, num_channel);\n  }\n#endif\n}\n\nvoid SURFFeatureMap::ComputeFeatureVector(const SURFFeature & feat,\n    int32_t* feat_vec) {\n  int32_t init_cell_x = roi_.x + feat.patch.x;\n  int32_t init_cell_y = roi_.y + feat.patch.y;\n  int32_t cell_width = feat.patch.width / feat.num_cell_per_row * kNumIntChannel;\n  int32_t cell_height = feat.patch.height / feat.num_cell_per_col;\n  int32_t row_width = width_ * kNumIntChannel;\n  const int32_t* cell_top_left[kNumIntChannel];\n  const int32_t* cell_top_right[kNumIntChannel];\n  const int32_t* cell_bottom_left[kNumIntChannel];\n  const int32_t* cell_bottom_right[kNumIntChannel];\n  int* feat_val = feat_vec;\n  const int32_t* int_img = int_img_.data();\n  int32_t offset = 0;\n\n  if (init_cell_y != 0) {\n    if (init_cell_x != 0) {\n      const int32_t* tmp_cell_top_right[kNumIntChannel];\n\n      // cell #1\n      offset = row_width * (init_cell_y - 1) +\n        (init_cell_x - 1) * kNumIntChannel;\n      for (int32_t i = 0; i < kNumIntChannel; i++) {\n        cell_top_left[i] = int_img + (offset++);\n        cell_top_right[i] = cell_top_left[i] + cell_width;\n        cell_bottom_left[i] = cell_top_left[i] + row_width * cell_height;\n        cell_bottom_right[i] = cell_bottom_left[i] + cell_width;\n        *(feat_val++) = *(cell_bottom_right[i]) + *(cell_top_left[i]) -\n                        *(cell_top_right[i]) - *(cell_bottom_left[i]);\n        tmp_cell_top_right[i] = cell_bottom_right[i];\n      }\n\n      // cells in 1st row\n      for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n        for (int32_t j = 0; j < kNumIntChannel; j++) {\n          cell_top_left[j] = cell_top_right[j];\n          cell_top_right[j] += cell_width;\n          cell_bottom_left[j] = cell_bottom_right[j];\n          cell_bottom_right[j] += cell_width;\n          *(feat_val++) = *(cell_bottom_right[j]) + *(cell_top_left[j]) -\n                          *(cell_top_right[j]) - *(cell_bottom_left[j]);\n        }\n      }\n\n      for (int32_t i = 0; i < kNumIntChannel; i++)\n        cell_top_right[i] = tmp_cell_top_right[i];\n    } else {\n      const int32_t* tmp_cell_top_right[kNumIntChannel];\n\n      // cell #1\n      offset = row_width * (init_cell_y - 1) + cell_width - kNumIntChannel;\n      for (int32_t i = 0; i < kNumIntChannel; i++) {\n        cell_top_right[i] = int_img + (offset++);\n        cell_bottom_right[i] = cell_top_right[i] + row_width * cell_height;\n        tmp_cell_top_right[i] = cell_bottom_right[i];\n        *(feat_val++) = *(cell_bottom_right[i]) - *(cell_top_right[i]);\n      }\n\n      // cells in 1st row\n      for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n        for (int32_t j = 0; j < kNumIntChannel; j++) {\n          cell_top_left[j] = cell_top_right[j];\n          cell_top_right[j] += cell_width;\n          cell_bottom_left[j] = cell_bottom_right[j];\n          cell_bottom_right[j] += cell_width;\n          *(feat_val++) = *(cell_bottom_right[j]) + *(cell_top_left[j]) -\n                          *(cell_top_right[j]) - *(cell_bottom_left[j]);\n        }\n      }\n\n      for (int32_t i = 0; i < kNumIntChannel; i++)\n        cell_top_right[i] = tmp_cell_top_right[i];\n    }\n  } else {\n    if (init_cell_x != 0) {\n      // cell #1\n      offset = row_width * (cell_height - 1) +\n        (init_cell_x - 1) * kNumIntChannel;\n      for (int32_t i = 0; i < kNumIntChannel; i++) {\n        cell_bottom_left[i] = int_img + (offset++);\n        cell_bottom_right[i] = cell_bottom_left[i] + cell_width;\n        *(feat_val++) = *(cell_bottom_right[i]) - *(cell_bottom_left[i]);\n        cell_top_right[i] = cell_bottom_right[i];\n      }\n\n      // cells in 1st row\n      for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n        for (int32_t j = 0; j < kNumIntChannel; j++) {\n          cell_bottom_left[j] = cell_bottom_right[j];\n          cell_bottom_right[j] += cell_width;\n          *(feat_val++) = *(cell_bottom_right[j]) - *(cell_bottom_left[j]);\n        }\n      }\n    } else {\n      // cell #1\n      offset = row_width * (cell_height - 1) + cell_width - kNumIntChannel;\n      for (int32_t i = 0; i < kNumIntChannel; i++) {\n        cell_bottom_right[i] = int_img + (offset++);\n        *(feat_val++) = *(cell_bottom_right[i]);\n        cell_top_right[i] = cell_bottom_right[i];\n      }\n\n      // cells in 1st row\n      for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n        for (int32_t j = 0; j < kNumIntChannel; j++) {\n          cell_bottom_left[j] = cell_bottom_right[j];\n          cell_bottom_right[j] += cell_width;\n          *(feat_val++) = *(cell_bottom_right[j]) - *(cell_bottom_left[j]);\n        }\n      }\n    }\n  }\n\n  // from BR of last cell in current row to BR of first cell in next row\n  offset = cell_height * row_width - feat.patch.width *\n    kNumIntChannel + cell_width;\n\n  // cells in following rows\n  for (int32_t i = 1; i < feat.num_cell_per_row; i++) {\n    // cells in 1st column\n    if (init_cell_x == 0) {\n      for (int32_t j = 0; j < kNumIntChannel; j++) {\n        cell_bottom_right[j] += offset;\n        *(feat_val++) = *(cell_bottom_right[j]) - *(cell_top_right[j]);\n      }\n    } else {\n      for (int32_t j = 0; j < kNumIntChannel; j++) {\n        cell_bottom_right[j] += offset;\n        cell_top_left[j] = cell_top_right[j] - cell_width;\n        cell_bottom_left[j] = cell_bottom_right[j] - cell_width;\n        *(feat_val++) = *(cell_bottom_right[j]) + *(cell_top_left[j]) -\n                        *(cell_top_right[j]) - *(cell_bottom_left[j]);\n      }\n    }\n\n    // cells in following columns\n    for (int32_t j = 1; j < feat.num_cell_per_row; j++) {\n      for (int32_t k = 0; k < kNumIntChannel; k++) {\n        cell_top_left[k] = cell_top_right[k];\n        cell_top_right[k] += cell_width;\n\n        cell_bottom_left[k] = cell_bottom_right[k];\n        cell_bottom_right[k] += cell_width;\n\n        *(feat_val++) = *(cell_bottom_right[k]) + *(cell_top_left[k]) -\n                        *(cell_bottom_left[k]) - *(cell_top_right[k]);\n      }\n    }\n\n    for (int32_t j = 0; j < kNumIntChannel; j++)\n      cell_top_right[j] += offset;\n  }\n}\n\nvoid SURFFeatureMap::NormalizeFeatureVectorL2(const int32_t* feat_vec,\n    float* feat_vec_normed, int32_t len) const {\n  double prod = 0.0;\n  float norm_l2 = 0.0f;\n\n  for (int32_t i = 0; i < len; i++)\n    prod += static_cast<double>(feat_vec[i] * feat_vec[i]);\n  if (prod != 0) {\n    norm_l2 = static_cast<float>(std::sqrt(prod));\n    for (int32_t i = 0; i < len; i++)\n      feat_vec_normed[i] = feat_vec[i] / norm_l2;\n  } else {\n    for (int32_t i = 0; i < len; i++)\n      feat_vec_normed[i] = 0.0f;\n  }\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/fust.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"fust.h\"\n\n#include <map>\n#include <memory>\n#include <string>\n#include <vector>\n\n#include \"classifier/lab_boosted_classifier.h\"\n#include \"classifier/surf_mlp.h\"\n#include \"feat/lab_feature_map.h\"\n#include \"feat/surf_feature_map.h\"\n#include \"io/lab_boost_model_reader.h\"\n#include \"io/surf_mlp_model_reader.h\"\n#include \"util/nms.h\"\n\nnamespace seeta {\nnamespace fd {\n\nbool FuStDetector::LoadModel(const std::string & model_path) {\n  std::ifstream model_file(model_path, std::ifstream::binary);\n  bool is_loaded = true;\n\n  if (!model_file.is_open()) {\n    is_loaded = false;\n  } else {\n    hierarchy_size_.clear();\n    num_stage_.clear();\n    wnd_src_id_.clear();\n\n    int32_t hierarchy_size;\n    int32_t num_stage;\n    int32_t num_wnd_src;\n    int32_t type_id;\n    int32_t feat_map_index = 0;\n    std::shared_ptr<seeta::fd::ModelReader> reader;\n    std::shared_ptr<seeta::fd::Classifier> classifier;\n    seeta::fd::ClassifierType classifier_type;\n\n    model_file.read(reinterpret_cast<char*>(&num_hierarchy_), sizeof(int32_t));\n    for (int32_t i = 0; is_loaded && i < num_hierarchy_; i++) {\n      model_file.read(reinterpret_cast<char*>(&hierarchy_size),\n        sizeof(int32_t));\n      hierarchy_size_.push_back(hierarchy_size);\n\n      for (int32_t j = 0; is_loaded && j < hierarchy_size; j++) {\n        model_file.read(reinterpret_cast<char*>(&num_stage), sizeof(int32_t));\n        num_stage_.push_back(num_stage);\n\n        for (int32_t k = 0; is_loaded && k < num_stage; k++) {\n          model_file.read(reinterpret_cast<char*>(&type_id), sizeof(int32_t));\n          classifier_type = static_cast<seeta::fd::ClassifierType>(type_id);\n          reader = CreateModelReader(classifier_type);\n          classifier = CreateClassifier(classifier_type);\n\n          is_loaded = !model_file.fail() &&\n            reader->Read(&model_file, classifier.get());\n          if (is_loaded) {\n            model_.push_back(classifier);\n            std::shared_ptr<seeta::fd::FeatureMap> feat_map;\n            if (cls2feat_idx_.count(classifier_type) == 0) {\n              feat_map_.push_back(CreateFeatureMap(classifier_type));\n              cls2feat_idx_.insert(\n                std::map<seeta::fd::ClassifierType, int32_t>::value_type(\n                classifier_type, feat_map_index++));\n            }\n            feat_map = feat_map_[cls2feat_idx_.at(classifier_type)];\n            model_.back()->SetFeatureMap(feat_map.get());\n          }\n        }\n\n        wnd_src_id_.push_back(std::vector<int32_t>());\n        model_file.read(reinterpret_cast<char*>(&num_wnd_src), sizeof(int32_t));\n        if (num_wnd_src > 0) {\n          wnd_src_id_.back().resize(num_wnd_src);\n          for (int32_t k = 0; k < num_wnd_src; k++) {\n            model_file.read(reinterpret_cast<char*>(&(wnd_src_id_.back()[k])),\n              sizeof(int32_t));\n          }\n        }\n      }\n    }\n\n    model_file.close();\n  }\n\n  return is_loaded;\n}\n\nstd::vector<seeta::FaceInfo> FuStDetector::Detect(\n    seeta::fd::ImagePyramid* img_pyramid) {\n  float score;\n  seeta::FaceInfo wnd_info;\n  seeta::Rect wnd;\n  float scale_factor = 0.0;\n  const seeta::ImageData* img_scaled =\n    img_pyramid->GetNextScaleImage(&scale_factor);\n\n  wnd.height = wnd.width = wnd_size_;\n\n  // Sliding window\n\n  std::vector<std::vector<seeta::FaceInfo> > proposals(hierarchy_size_[0]);\n  std::shared_ptr<seeta::fd::FeatureMap> & feat_map_1 =\n    feat_map_[cls2feat_idx_[model_[0]->type()]];\n\n  while (img_scaled != nullptr) {\n    feat_map_1->Compute(img_scaled->data, img_scaled->width,\n      img_scaled->height);\n\n    wnd_info.bbox.width = static_cast<int32_t>(wnd_size_ / scale_factor + 0.5);\n    wnd_info.bbox.height = wnd_info.bbox.width;\n\n    int32_t max_x = img_scaled->width - wnd_size_;\n    int32_t max_y = img_scaled->height - wnd_size_;\n    for (int32_t y = 0; y <= max_y; y += slide_wnd_step_y_) {\n      wnd.y = y;\n      for (int32_t x = 0; x <= max_x; x += slide_wnd_step_x_) {\n        wnd.x = x;\n        feat_map_1->SetROI(wnd);\n\n        wnd_info.bbox.x = static_cast<int32_t>(x / scale_factor + 0.5);\n        wnd_info.bbox.y = static_cast<int32_t>(y / scale_factor + 0.5);\n\n        for (int32_t i = 0; i < hierarchy_size_[0]; i++) {\n          if (model_[i]->Classify(&score)) {\n            wnd_info.score = static_cast<double>(score);\n            proposals[i].push_back(wnd_info);\n          }\n        }\n      }\n    }\n\n    img_scaled = img_pyramid->GetNextScaleImage(&scale_factor);\n  }\n\n  std::vector<std::vector<seeta::FaceInfo> > proposals_nms(hierarchy_size_[0]);\n  for (int32_t i = 0; i < hierarchy_size_[0]; i++) {\n    seeta::fd::NonMaximumSuppression(&(proposals[i]),\n      &(proposals_nms[i]), 0.8f);\n    proposals[i].clear();\n  }\n\n  // Following classifiers\n\n  seeta::ImageData img = img_pyramid->image1x();\n  seeta::Rect roi;\n  std::vector<float> mlp_predicts(4);  // @todo no hard-coded number!\n  roi.x = roi.y = 0;\n  roi.width = roi.height = wnd_size_;\n\n  int32_t cls_idx = hierarchy_size_[0];\n  int32_t model_idx = hierarchy_size_[0];\n  std::vector<int32_t> buf_idx;\n\n  for (int32_t i = 1; i < num_hierarchy_; i++) {\n    buf_idx.resize(hierarchy_size_[i]);\n    for (int32_t j = 0; j < hierarchy_size_[i]; j++) {\n      int32_t num_wnd_src = static_cast<int32_t>(wnd_src_id_[cls_idx].size());\n      std::vector<int32_t> & wnd_src = wnd_src_id_[cls_idx];\n      buf_idx[j] = wnd_src[0];\n      proposals[buf_idx[j]].clear();\n      for (int32_t k = 0; k < num_wnd_src; k++) {\n        proposals[buf_idx[j]].insert(proposals[buf_idx[j]].end(),\n          proposals_nms[wnd_src[k]].begin(), proposals_nms[wnd_src[k]].end());\n      }\n\n      std::shared_ptr<seeta::fd::FeatureMap> & feat_map =\n        feat_map_[cls2feat_idx_[model_[model_idx]->type()]];\n      for (int32_t k = 0; k < num_stage_[cls_idx]; k++) {\n        int32_t num_wnd = static_cast<int32_t>(proposals[buf_idx[j]].size());\n        std::vector<seeta::FaceInfo> & bboxes = proposals[buf_idx[j]];\n        int32_t bbox_idx = 0;\n\n        for (int32_t m = 0; m < num_wnd; m++) {\n          if (bboxes[m].bbox.x + bboxes[m].bbox.width <= 0 ||\n              bboxes[m].bbox.y + bboxes[m].bbox.height <= 0)\n            continue;\n          GetWindowData(img, bboxes[m].bbox);\n          feat_map->Compute(wnd_data_.data(), wnd_size_, wnd_size_);\n          feat_map->SetROI(roi);\n\n          if (model_[model_idx]->Classify(&score, mlp_predicts.data())) {\n            float x = static_cast<float>(bboxes[m].bbox.x);\n            float y = static_cast<float>(bboxes[m].bbox.y);\n            float w = static_cast<float>(bboxes[m].bbox.width);\n            float h = static_cast<float>(bboxes[m].bbox.height);\n\n            bboxes[bbox_idx].bbox.width =\n              static_cast<int32_t>((mlp_predicts[3] * 2 - 1) * w + w + 0.5);\n            bboxes[bbox_idx].bbox.height = bboxes[bbox_idx].bbox.width;\n            bboxes[bbox_idx].bbox.x =\n              static_cast<int32_t>((mlp_predicts[1] * 2 - 1) * w + x +\n              (w - bboxes[bbox_idx].bbox.width) * 0.5 + 0.5);\n            bboxes[bbox_idx].bbox.y =\n              static_cast<int32_t>((mlp_predicts[2] * 2 - 1) * h + y +\n              (h - bboxes[bbox_idx].bbox.height) * 0.5 + 0.5);\n            bboxes[bbox_idx].score = score;\n            bbox_idx++;\n          }\n        }\n        proposals[buf_idx[j]].resize(bbox_idx);\n\n        if (k < num_stage_[cls_idx] - 1) {\n          seeta::fd::NonMaximumSuppression(&(proposals[buf_idx[j]]),\n            &(proposals_nms[buf_idx[j]]), 0.8f);\n          proposals[buf_idx[j]] = proposals_nms[buf_idx[j]];\n        } else {\n          if (i == num_hierarchy_ - 1) {\n            seeta::fd::NonMaximumSuppression(&(proposals[buf_idx[j]]),\n              &(proposals_nms[buf_idx[j]]), 0.3f);\n            proposals[buf_idx[j]] = proposals_nms[buf_idx[j]];\n          }\n        }\n        model_idx++;\n      }\n\n      cls_idx++;\n    }\n\n    for (int32_t j = 0; j < hierarchy_size_[i]; j++)\n      proposals_nms[j] = proposals[buf_idx[j]];\n  }\n\n  return proposals_nms[0];\n}\n\nstd::shared_ptr<seeta::fd::ModelReader>\nFuStDetector::CreateModelReader(seeta::fd::ClassifierType type) {\n  std::shared_ptr<seeta::fd::ModelReader> reader;\n  switch (type) {\n  case seeta::fd::ClassifierType::LAB_Boosted_Classifier:\n    reader.reset(new seeta::fd::LABBoostModelReader());\n    break;\n  case seeta::fd::ClassifierType::SURF_MLP:\n    reader.reset(new seeta::fd::SURFMLPModelReader());\n    break;\n  default:\n    break;\n  }\n  return reader;\n}\n\nstd::shared_ptr<seeta::fd::Classifier>\nFuStDetector::CreateClassifier(seeta::fd::ClassifierType type) {\n  std::shared_ptr<seeta::fd::Classifier> classifier;\n  switch (type) {\n  case seeta::fd::ClassifierType::LAB_Boosted_Classifier:\n    classifier.reset(new seeta::fd::LABBoostedClassifier());\n    break;\n  case seeta::fd::ClassifierType::SURF_MLP:\n    classifier.reset(new seeta::fd::SURFMLP());\n    break;\n  default:\n    break;\n  }\n  return classifier;\n}\n\nstd::shared_ptr<seeta::fd::FeatureMap>\nFuStDetector::CreateFeatureMap(seeta::fd::ClassifierType type) {\n  std::shared_ptr<seeta::fd::FeatureMap> feat_map;\n  switch (type) {\n  case seeta::fd::ClassifierType::LAB_Boosted_Classifier:\n    feat_map.reset(new seeta::fd::LABFeatureMap());\n    break;\n  case seeta::fd::ClassifierType::SURF_MLP:\n    feat_map.reset(new seeta::fd::SURFFeatureMap());\n    break;\n  default:\n    break;\n  }\n  return feat_map;\n}\n\nvoid FuStDetector::GetWindowData(const seeta::ImageData & img,\n    const seeta::Rect & wnd) {\n  int32_t pad_left;\n  int32_t pad_right;\n  int32_t pad_top;\n  int32_t pad_bottom;\n  seeta::Rect roi = wnd;\n\n  pad_left = pad_right = pad_top = pad_bottom = 0;\n  if (roi.x + roi.width > img.width)\n    pad_right = roi.x + roi.width - img.width;\n  if (roi.x < 0) {\n    pad_left = -roi.x;\n    roi.x = 0;\n  }\n  if (roi.y + roi.height > img.height)\n    pad_bottom = roi.y + roi.height - img.height;\n  if (roi.y < 0) {\n    pad_top = -roi.y;\n    roi.y = 0;\n  }\n\n  wnd_data_buf_.resize(roi.width * roi.height);\n  const uint8_t* src = img.data + roi.y * img.width + roi.x;\n  uint8_t* dest = wnd_data_buf_.data();\n  int32_t len = sizeof(uint8_t) * roi.width;\n  int32_t len2 = sizeof(uint8_t) * (roi.width - pad_left - pad_right);\n\n  if (pad_top > 0) {\n    std::memset(dest, 0, len * pad_top);\n    dest += (roi.width * pad_top);\n  }\n  if (pad_left == 0) {\n    if (pad_right == 0) {\n      for (int32_t y = pad_top; y < roi.height - pad_bottom; y++) {\n        std::memcpy(dest, src, len);\n        src += img.width;\n        dest += roi.width;\n      }\n    } else {\n      for (int32_t y = pad_top; y < roi.height - pad_bottom; y++) {\n        std::memcpy(dest, src, len2);\n        src += img.width;\n        dest += roi.width;\n        std::memset(dest - pad_right, 0, sizeof(uint8_t) * pad_right);\n      }\n    }\n  } else {\n    if (pad_right == 0) {\n      for (int32_t y = pad_top; y < roi.height - pad_bottom; y++) {\n        std::memset(dest, 0, sizeof(uint8_t)* pad_left);\n        std::memcpy(dest + pad_left, src, len2);\n        src += img.width;\n        dest += roi.width;\n      }\n    } else {\n      for (int32_t y = pad_top; y < roi.height - pad_bottom; y++) {\n        std::memset(dest, 0, sizeof(uint8_t) * pad_left);\n        std::memcpy(dest + pad_left, src, len2);\n        src += img.width;\n        dest += roi.width;\n        std::memset(dest - pad_right, 0, sizeof(uint8_t) * pad_right);\n      }\n    }\n  }\n  if (pad_bottom > 0)\n    std::memset(dest, 0, len * pad_bottom);\n\n  seeta::ImageData src_img(roi.width, roi.height);\n  seeta::ImageData dest_img(wnd_size_, wnd_size_);\n  src_img.data = wnd_data_buf_.data();\n  dest_img.data = wnd_data_.data();\n  seeta::fd::ResizeImage(src_img, &dest_img);\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/io/lab_boost_model_reader.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"io/lab_boost_model_reader.h\"\n\n#include <vector>\n\nnamespace seeta {\nnamespace fd {\n\nbool LABBoostModelReader::Read(std::istream* input,\n    seeta::fd::Classifier* model) {\n  bool is_read;\n  seeta::fd::LABBoostedClassifier* lab_boosted_classifier =\n    dynamic_cast<seeta::fd::LABBoostedClassifier*>(model);\n\n  input->read(reinterpret_cast<char*>(&num_base_classifer_), sizeof(int32_t));\n  input->read(reinterpret_cast<char*>(&num_bin_), sizeof(int32_t));\n\n  is_read = (!input->fail()) && num_base_classifer_ > 0 && num_bin_ > 0 &&\n    ReadFeatureParam(input, lab_boosted_classifier) &&\n    ReadBaseClassifierParam(input, lab_boosted_classifier);\n\n  return is_read;\n}\n\nbool LABBoostModelReader::ReadFeatureParam(std::istream* input,\n    seeta::fd::LABBoostedClassifier* model) {\n  int32_t x;\n  int32_t y;\n  for (int32_t i = 0; i < num_base_classifer_; i++) {\n    input->read(reinterpret_cast<char*>(&x), sizeof(int32_t));\n    input->read(reinterpret_cast<char*>(&y), sizeof(int32_t));\n    model->AddFeature(x, y);\n  }\n\n  return !input->fail();\n}\n\nbool LABBoostModelReader::ReadBaseClassifierParam(std::istream* input,\n    seeta::fd::LABBoostedClassifier* model) {\n  std::vector<float> thresh;\n  thresh.resize(num_base_classifer_);\n  input->read(reinterpret_cast<char*>(thresh.data()),\n    sizeof(float)* num_base_classifer_);\n\n  int32_t weight_len = sizeof(float)* (num_bin_ + 1);\n  std::vector<float> weights;\n  weights.resize(num_bin_ + 1);\n  for (int32_t i = 0; i < num_base_classifer_; i++) {\n    input->read(reinterpret_cast<char*>(weights.data()), weight_len);\n    model->AddBaseClassifier(weights.data(), num_bin_, thresh[i]);\n  }\n\n  return !input->fail();\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/io/surf_mlp_model_reader.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"io/surf_mlp_model_reader.h\"\n\n#include <istream>\n\n#include \"classifier/surf_mlp.h\"\n\nnamespace seeta {\nnamespace fd {\n\nbool SURFMLPModelReader::Read(std::istream* input,\n    seeta::fd::Classifier* model) {\n  bool is_read = false;\n  seeta::fd::SURFMLP* surf_mlp = dynamic_cast<seeta::fd::SURFMLP*>(model);\n  int32_t num_layer;\n  int32_t num_feat;\n  int32_t input_dim;\n  int32_t output_dim;\n  float thresh;\n\n  input->read(reinterpret_cast<char*>(&num_layer), sizeof(int32_t));\n  if (num_layer <= 0) {\n    is_read = false;  // @todo handle the errors and the following ones!!!\n  }\n  input->read(reinterpret_cast<char*>(&num_feat), sizeof(int32_t));\n  if (num_feat <= 0) {\n    is_read = false;\n  }\n\n  feat_id_buf_.resize(num_feat);\n  input->read(reinterpret_cast<char*>(feat_id_buf_.data()),\n    sizeof(int32_t) * num_feat);\n  for (int32_t i = 0; i < num_feat; i++)\n    surf_mlp->AddFeatureByID(feat_id_buf_[i]);\n\n  input->read(reinterpret_cast<char*>(&thresh), sizeof(float));\n  surf_mlp->SetThreshold(thresh);\n  input->read(reinterpret_cast<char*>(&input_dim), sizeof(int32_t));\n  if (input_dim <= 0) {\n    is_read = false;\n  }\n\n  for (int32_t i = 1; i < num_layer; i++) {\n    input->read(reinterpret_cast<char*>(&output_dim), sizeof(int32_t));\n    if (output_dim <= 0) {\n      is_read = false;\n    }\n\n    int32_t len = input_dim * output_dim;\n    weights_buf_.resize(len);\n    input->read(reinterpret_cast<char*>(weights_buf_.data()),\n      sizeof(float) * len);\n\n    bias_buf_.resize(output_dim);\n    input->read(reinterpret_cast<char*>(bias_buf_.data()),\n      sizeof(float) * output_dim);\n\n    if (i < num_layer - 1) {\n      surf_mlp->AddLayer(input_dim, output_dim, weights_buf_.data(),\n        bias_buf_.data());\n    } else {\n      surf_mlp->AddLayer(input_dim, output_dim, weights_buf_.data(),\n        bias_buf_.data(), true);\n    }\n    input_dim = output_dim;\n  }\n\n  is_read = !input->fail();\n\n  return is_read;\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/util/image_pyramid.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"util/image_pyramid.h\"\n\nnamespace seeta {\nnamespace fd {\n\nconst seeta::ImageData* ImagePyramid::GetNextScaleImage(float* scale_factor) {\n  if (scale_factor_ >= min_scale_) {\n    if (scale_factor != nullptr)\n      *scale_factor = scale_factor_;\n\n    width_scaled_ = static_cast<int32_t>(width1x_ * scale_factor_);\n    height_scaled_ = static_cast<int32_t>(height1x_ * scale_factor_);\n\n    seeta::ImageData src_img(width1x_, height1x_);\n    seeta::ImageData dest_img(width_scaled_, height_scaled_);\n    src_img.data = buf_img_;\n    dest_img.data = buf_img_scaled_;\n    seeta::fd::ResizeImage(src_img, &dest_img);\n    scale_factor_ *= scale_step_;\n\n    img_scaled_.data = buf_img_scaled_;\n    img_scaled_.width = width_scaled_;\n    img_scaled_.height = height_scaled_;\n    return &img_scaled_;\n  } else {\n    return nullptr;\n  }\n}\n\nvoid ImagePyramid::SetImage1x(const uint8_t* img_data, int32_t width,\n    int32_t height) {\n  if (width > buf_img_width_ || height > buf_img_height_) {\n    delete[] buf_img_;\n\n    buf_img_width_ = width;\n    buf_img_height_ = height;\n    buf_img_ = new uint8_t[width * height];\n  }\n\n  width1x_ = width;\n  height1x_ = height;\n  std::memcpy(buf_img_, img_data, width * height * sizeof(uint8_t));\n  scale_factor_ = max_scale_;\n  UpdateBufScaled();\n}\n\nvoid ImagePyramid::UpdateBufScaled() {\n  if (width1x_ == 0 || height1x_ == 0)\n    return;\n\n  int32_t max_width = static_cast<int32_t>(width1x_ * max_scale_ + 0.5);\n  int32_t max_height = static_cast<int32_t>(height1x_ * max_scale_ + 0.5);\n\n  if (max_width > buf_scaled_width_ || max_height > buf_scaled_height_) {\n    delete[] buf_img_scaled_;\n\n    buf_scaled_width_ = max_width;\n    buf_scaled_height_ = max_height;\n    buf_img_scaled_ = new uint8_t[max_width * max_height];\n\n    img_scaled_.data = nullptr;\n    img_scaled_.width = 0;\n    img_scaled_.height = 0;\n  }\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/lib/local/seetaFace/src/util/nms.cpp",
    "content": "/*\n *\n * This file is part of the open-source SeetaFace engine, which includes three modules:\n * SeetaFace Detection, SeetaFace Alignment, and SeetaFace Identification.\n *\n * This file is part of the SeetaFace Detection module, containing codes implementing the\n * face detection method described in the following paper:\n *\n *\n *   Funnel-structured cascade for multi-view face detection with alignment awareness,\n *   Shuzhe Wu, Meina Kan, Zhenliang He, Shiguang Shan, Xilin Chen.\n *   In Neurocomputing (under review)\n *\n *\n * Copyright (C) 2016, Visual Information Processing and Learning (VIPL) group,\n * Institute of Computing Technology, Chinese Academy of Sciences, Beijing, China.\n *\n * The codes are mainly developed by Shuzhe Wu (a Ph.D supervised by Prof. Shiguang Shan)\n *\n * As an open-source face recognition engine: you can redistribute SeetaFace source codes\n * and/or modify it under the terms of the BSD 2-Clause License.\n *\n * You should have received a copy of the BSD 2-Clause License along with the software.\n * If not, see < https://opensource.org/licenses/BSD-2-Clause>.\n *\n * Contact Info: you can send an email to SeetaFace@vipl.ict.ac.cn for any problems.\n *\n * Note: the above information must be kept whenever or wherever the codes are used.\n *\n */\n\n#include \"util/nms.h\"\n\n#include <algorithm>\n#include <cstdint>\n#include <vector>\n\nnamespace seeta {\nnamespace fd {\n\nbool CompareBBox(const seeta::FaceInfo & a, const seeta::FaceInfo & b) {\n  return a.score > b.score;\n}\n\nvoid NonMaximumSuppression(std::vector<seeta::FaceInfo>* bboxes,\n  std::vector<seeta::FaceInfo>* bboxes_nms, float iou_thresh) {\n  bboxes_nms->clear();\n  std::sort(bboxes->begin(), bboxes->end(), seeta::fd::CompareBBox);\n\n  int32_t select_idx = 0;\n  int32_t num_bbox = static_cast<int32_t>(bboxes->size());\n  std::vector<int32_t> mask_merged(num_bbox, 0);\n  bool all_merged = false;\n\n  while (!all_merged) {\n    while (select_idx < num_bbox && mask_merged[select_idx] == 1)\n      select_idx++;\n    if (select_idx == num_bbox) {\n      all_merged = true;\n      continue;\n    }\n\n    bboxes_nms->push_back((*bboxes)[select_idx]);\n    mask_merged[select_idx] = 1;\n\n    seeta::Rect select_bbox = (*bboxes)[select_idx].bbox;\n    float area1 = static_cast<float>(select_bbox.width * select_bbox.height);\n    float x1 = static_cast<float>(select_bbox.x);\n    float y1 = static_cast<float>(select_bbox.y);\n    float x2 = static_cast<float>(select_bbox.x + select_bbox.width - 1);\n    float y2 = static_cast<float>(select_bbox.y + select_bbox.height - 1);\n\n    select_idx++;\n    for (int32_t i = select_idx; i < num_bbox; i++) {\n      if (mask_merged[i] == 1)\n        continue;\n\n      seeta::Rect & bbox_i = (*bboxes)[i].bbox;\n      float x = std::max<float>(x1, static_cast<float>(bbox_i.x));\n      float y = std::max<float>(y1, static_cast<float>(bbox_i.y));\n      float w = std::min<float>(x2, static_cast<float>(bbox_i.x + bbox_i.width - 1)) - x + 1;\n      float h = std::min<float>(y2, static_cast<float>(bbox_i.y + bbox_i.height - 1)) - y + 1;\n      if (w <= 0 || h <= 0)\n        continue;\n\n      float area2 = static_cast<float>(bbox_i.width * bbox_i.height);\n      float area_intersect = w * h;\n      float area_union = area1 + area2 - area_intersect;\n      if (static_cast<float>(area_intersect) / area_union > iou_thresh) {\n        mask_merged[i] = 1;\n        bboxes_nms->back().score += (*bboxes)[i].score;\n      }\n    }\n  }\n}\n\n}  // namespace fd\n}  // namespace seeta\n"
  },
  {
    "path": "FaceLivenessDetection/model/clnf_general.txt",
    "content": "PDM pdms/In-the-wild_aligned_PDM_68.txt\nTriangulations tris_68.txt\nPatchesCCNF patch_experts/ccnf_patches_0.25_general.txt\nPatchesCCNF patch_experts/ccnf_patches_0.35_general.txt\nPatchesCCNF patch_experts/ccnf_patches_0.5_general.txt\n"
  },
  {
    "path": "FaceLivenessDetection/model/main_clnf_general.txt",
    "content": "LandmarkDetector clnf_general.txt\nLandmarkDetector_part model_inner/main_clnf_inner.txt inner 17 0 18 1 19 2 20 3 21 4 22 5 23 6 24 7 25 8 26 9 27 10 28 11 29 12 30 13 31 14 32 15 33 16 34 17 35 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53 36 54 37 55 38 56 39 57 40 58 41 59 42 60 43 61 44 62 45 63 46 64 47 65 48 66 49 67 50\nLandmarkDetector_part model_eye/main_clnf_synth_left.txt left_eye_28 36 8 37 10 38 12 39 14 40 16 41 18\nLandmarkDetector_part model_eye/main_clnf_synth_right.txt right_eye_28 42 8 43 10 44 12 45 14 46 16 47 18\nFaceDetConversion haarAlign.txt\nDetectionValidator detection_validation/validator_general_68.txt"
  },
  {
    "path": "FaceLivenessDetection/model/model_eye/clnf_left_synth.txt",
    "content": "PDM pdms/pdm_28_l_eye_3D_closed.txt\nPatchesCCNF patch_experts/left_ccnf_patches_1.00_synth_lid_.txt\nPatchesCCNF patch_experts/left_ccnf_patches_1.50_synth_lid_.txt\n"
  },
  {
    "path": "FaceLivenessDetection/model/model_eye/clnf_right_synth.txt",
    "content": "PDM pdms/pdm_28_eye_3D_closed.txt\nPatchesCCNF patch_experts/ccnf_patches_1.00_synth_lid_.txt\nPatchesCCNF patch_experts/ccnf_patches_1.50_synth_lid_.txt"
  },
  {
    "path": "FaceLivenessDetection/model/model_eye/main_clnf_synth_left.txt",
    "content": "LandmarkDetector clnf_left_synth.txt"
  },
  {
    "path": "FaceLivenessDetection/model/model_eye/main_clnf_synth_right.txt",
    "content": "LandmarkDetector clnf_right_synth.txt"
  },
  {
    "path": "FaceLivenessDetection/model/model_eye/pdms/pdm_28_eye_3D_closed.txt",
    "content": "# The mean values of the components (in mm)\n84\n1\n6\n-6.346689 \n-4.802645 \n-0.689206 \n3.584030 \n5.513861 \n3.969817 \n-0.143620 \n-4.705906 \n-10.151100 \n-7.784450 \n-4.315176 \n0.286655 \n4.895108 \n8.614140 \n11.209605 \n8.705321 \n5.165718 \n1.065652 \n-3.271212 \n-7.250731 \n-2.195097 \n-0.324358 \n1.476467 \n2.152288 \n1.307482 \n-0.562884 \n-2.363439 \n-3.039631 \n-0.630295 \n-4.947588 \n-6.865877 \n-5.261457 \n-1.074175 \n3.243115 \n5.161403 \n3.911768 \n2.351440 \n-0.095726 \n-1.959374 \n-2.862675 \n-2.316547 \n-1.049970 \n0.957222 \n2.555497 \n3.410716 \n3.797180 \n3.755154 \n3.510297 \n1.231211 \n1.933679 \n1.093865 \n-0.796012 \n-2.628691 \n-3.330879 \n-2.491440 \n-0.601842 \n-0.509775 \n0.210152 \n0.641715 \n0.532111 \n-0.054457 \n-0.774384 \n-1.205947 \n-0.879208 \n1.060595 \n-0.440952 \n-1.721653 \n-2.100358 \n-0.796095 \n1.616596 \n4.283196 \n1.517115 \n-0.872711 \n-2.176368 \n-2.010491 \n-0.559696 \n0.173887 \n0.125369 \n0.313958 \n0.629133 \n0.886248 \n0.934736 \n0.746213 \n0.431068 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n84\n10\n6\n-0.153386 0.025177 -0.054841 0.047942 0.005828 0.082724 0.142441 0.013459 0.069592 -0.174858 \n-0.134498 0.018961 -0.050725 0.046303 0.080169 -0.085614 0.141365 -0.000051 0.047046 -0.145781 \n-0.130919 -0.001976 -0.015781 0.021780 0.107202 -0.203982 0.058147 -0.013939 -0.001668 -0.032456 \n-0.144747 -0.025369 0.029522 -0.011262 0.071090 -0.203042 -0.058466 -0.020071 -0.048015 0.098735 \n-0.167881 -0.037515 0.058646 -0.033467 -0.007013 -0.083344 -0.140162 -0.014855 -0.064846 0.170941 \n-0.186769 -0.031299 0.054529 -0.031829 -0.081354 0.084994 -0.139085 -0.001345 -0.042300 0.141864 \n-0.190348 -0.010362 0.019585 -0.007306 -0.108386 0.203362 -0.055867 0.012543 0.006414 0.028538 \n-0.171298 0.014498 -0.028042 0.026941 -0.077441 0.217018 0.062715 0.021341 0.053763 -0.101612 \n0.207372 0.062591 -0.119437 -0.054907 0.076820 -0.048100 -0.135908 -0.057742 -0.004103 -0.009908 \n0.225329 0.015439 -0.023166 -0.064446 -0.087217 -0.069482 -0.099691 0.249926 0.080107 0.028214 \n0.234134 -0.004997 0.053270 -0.057837 -0.186495 -0.082705 -0.126911 0.442421 0.063530 0.192235 \n0.232555 -0.003035 0.055702 -0.033152 -0.076396 -0.011744 -0.117545 0.262249 -0.015413 0.155968 \n0.213285 0.008939 0.034917 0.022841 0.034538 0.123140 -0.030932 0.037313 -0.101512 -0.081439 \n0.184330 0.002781 0.040384 0.080832 0.080460 0.115659 0.055044 0.080257 -0.058662 -0.101912 \n0.152472 -0.045932 0.082773 0.055658 0.007529 0.054010 0.199419 0.134126 0.101864 -0.104416 \n0.165398 -0.018683 0.044018 0.098351 -0.012939 -0.024937 0.134807 -0.069897 -0.073109 0.022702 \n0.184402 -0.009464 0.017039 0.048177 -0.004151 -0.026121 0.058695 -0.257197 -0.110822 -0.032434 \n0.200832 0.002349 -0.027929 -0.031359 0.014172 -0.005684 0.042899 -0.435980 -0.098097 -0.013502 \n0.207618 0.029961 -0.076210 -0.091900 0.049907 -0.030279 0.028983 -0.273244 0.042669 0.005952 \n0.207309 0.052291 -0.099881 -0.114814 0.132728 -0.038736 -0.063320 -0.127790 0.094419 -0.019914 \n-0.149017 0.002774 -0.012207 0.018561 -0.033647 0.104700 0.125446 0.043084 -0.148359 0.076732 \n-0.154866 -0.007385 0.008461 0.004109 -0.049639 0.092397 -0.026746 0.005949 0.022710 0.000382 \n-0.153118 -0.016465 0.024583 -0.006636 -0.037945 0.028369 -0.160085 -0.033318 0.184813 -0.078178 \n-0.144797 -0.019145 0.026714 -0.007369 -0.005424 -0.049859 -0.196430 -0.051719 0.243027 -0.113007 \n-0.134779 -0.013860 0.013609 0.002322 0.028876 -0.096467 -0.114542 -0.038469 0.163204 -0.083593 \n-0.128933 -0.003706 -0.007052 0.016750 0.044871 -0.084172 0.037576 -0.001329 -0.007933 -0.007089 \n-0.130680 0.005372 -0.023172 0.027479 0.033190 -0.020171 0.170867 0.037942 -0.170086 0.071581 \n-0.138999 0.008057 -0.025308 0.028236 0.000666 0.058065 0.207285 0.056337 -0.228233 0.106257 \n-0.003984 -0.167992 0.019345 -0.008099 -0.110167 0.218829 -0.066444 0.011530 0.007137 0.033605 \n0.007213 -0.135126 -0.025388 0.056689 -0.092686 0.189792 0.024499 -0.006388 0.086896 -0.029308 \n0.017817 -0.117497 -0.053283 0.089178 -0.015735 0.045359 0.106064 -0.023203 0.119076 -0.070549 \n0.021618 -0.125432 -0.048000 0.070337 0.075609 -0.129863 0.130471 -0.029065 0.084827 -0.065960 \n0.016389 -0.154283 -0.012634 0.011202 0.127838 -0.233231 0.083422 -0.020541 0.004212 -0.018229 \n0.005192 -0.187148 0.032099 -0.053586 0.110358 -0.204194 -0.007521 -0.002624 -0.075546 0.044685 \n-0.005412 -0.204777 0.059994 -0.086075 0.033407 -0.059761 -0.089086 0.014191 -0.107727 0.085926 \n-0.010850 -0.196699 0.059026 -0.068250 -0.066030 0.122601 -0.115358 0.019806 -0.069346 0.083334 \n-0.074908 0.222322 -0.128680 0.106279 0.515992 -0.037382 -0.166184 0.282250 -0.092724 -0.029211 \n-0.049636 0.264882 0.162264 0.120013 0.170250 -0.115936 0.057634 0.079663 0.011493 -0.053341 \n-0.020457 0.260307 0.347209 0.044215 -0.051959 -0.147993 0.103852 -0.081857 -0.000604 -0.087831 \n0.008466 0.249892 0.434476 -0.046985 -0.170644 -0.092034 0.008838 -0.087026 -0.030030 0.019115 \n0.031496 0.229386 0.360031 -0.050497 -0.104395 0.079803 -0.054671 -0.073899 -0.062985 -0.023917 \n0.046520 0.191125 0.186443 0.028729 0.050283 0.218925 -0.101211 0.048101 -0.011525 -0.043765 \n0.051597 0.123490 -0.100835 0.113633 0.277072 0.404462 -0.158693 -0.089593 -0.059518 -0.031557 \n0.031390 0.166293 -0.221317 0.010778 -0.065560 0.197405 -0.013358 -0.038202 0.028971 0.015787 \n0.007963 0.191505 -0.289781 -0.098710 -0.251918 0.026406 0.025857 -0.011773 0.026086 0.020397 \n-0.015936 0.203274 -0.317303 -0.176584 -0.301025 -0.090120 0.038670 -0.012354 -0.000247 -0.036027 \n-0.039475 0.208053 -0.288236 -0.127299 -0.178571 -0.148602 0.040236 0.004113 -0.004457 -0.016551 \n-0.061014 0.208181 -0.221481 -0.003480 0.048193 -0.126544 0.030670 0.093612 -0.016308 -0.019164 \n-0.002022 -0.169263 0.029080 -0.021466 -0.029459 0.025877 -0.142794 -0.034375 0.183570 -0.078222 \n-0.000300 -0.172691 0.031731 -0.029747 0.010395 -0.055596 -0.169946 -0.050038 0.239789 -0.125691 \n0.004235 -0.165003 0.019162 -0.015569 0.044130 -0.113124 -0.088548 -0.042014 0.167473 -0.083327 \n0.008925 -0.150706 -0.001258 0.012743 0.051988 -0.113014 0.053667 -0.014997 0.008933 0.024161 \n0.011023 -0.138177 -0.017566 0.038590 0.029375 -0.055348 0.173359 0.015191 -0.142999 0.133883 \n0.009301 -0.134752 -0.020213 0.046851 -0.010464 0.026098 0.200464 0.030859 -0.199272 0.181460 \n0.004768 -0.142435 -0.007651 0.032701 -0.044203 0.083633 0.119139 0.022826 -0.126885 0.138947 \n0.000078 -0.156729 0.012766 0.004408 -0.052075 0.083550 -0.023030 -0.004196 0.031710 0.031351 \n0.128814 0.003571 0.003480 -0.114195 0.042965 0.013538 0.081206 0.030733 0.036469 -0.042832 \n0.084713 0.044573 0.016014 -0.075237 -0.003338 -0.037950 0.095804 -0.008646 0.106748 0.104806 \n-0.014166 0.059774 0.028433 -0.073564 -0.028456 -0.056347 0.078713 -0.035782 0.114925 0.182190 \n-0.109902 0.040269 0.033462 -0.110156 -0.017675 -0.030878 0.039946 -0.034778 0.056210 0.143990 \n-0.146414 -0.002516 0.028155 -0.163578 0.022690 0.023539 0.002211 -0.006223 -0.035002 0.012582 \n-0.102313 -0.043518 0.015622 -0.202536 0.068994 0.075027 -0.012387 0.033157 -0.105281 -0.135056 \n-0.003434 -0.058719 0.003203 -0.204209 0.094112 0.093425 0.004704 0.060292 -0.113458 -0.212440 \n0.099074 -0.043950 -0.000509 -0.171174 0.086675 0.069487 0.039093 0.061946 -0.059545 -0.184463 \n-0.054913 -0.004523 0.015086 0.231138 -0.115127 0.082549 0.124313 -0.000052 0.180789 0.076509 \n-0.038477 -0.010328 -0.025919 0.225952 -0.098722 -0.012521 -0.024397 -0.078886 -0.051188 -0.094188 \n-0.015599 -0.034327 -0.050684 0.208434 -0.145282 -0.134450 -0.225097 -0.057805 -0.253738 -0.159062 \n0.013759 -0.046657 -0.031453 0.191733 -0.202303 -0.154083 -0.244663 -0.006407 -0.264460 -0.184882 \n0.039393 -0.033167 -0.026588 0.194395 -0.163302 -0.053331 -0.095733 0.027393 -0.169484 -0.254320 \n0.055992 -0.018520 -0.024499 0.236434 -0.057326 -0.072106 -0.011848 0.151259 -0.049264 -0.117501 \n0.068631 -0.013724 0.027292 0.231437 -0.037554 0.034751 0.337456 0.134888 0.312055 -0.132196 \n0.056256 0.022936 -0.019524 0.146331 0.032207 -0.007908 -0.035410 -0.090636 -0.012725 0.205397 \n0.042182 0.043848 -0.041760 0.116811 0.078314 0.051616 -0.106453 -0.228687 0.036561 0.260986 \n0.019928 0.055883 -0.059556 0.147688 0.109694 0.020391 -0.066574 -0.102694 0.128555 0.213173 \n-0.009409 0.051946 -0.050194 0.162935 0.085636 -0.028224 -0.126599 0.046702 0.099383 0.240695 \n-0.036452 0.030786 -0.028097 0.176770 -0.015768 0.029793 -0.046117 0.020525 0.047330 0.165226 \n0.034441 -0.022881 0.015629 -0.156918 0.055237 0.036211 0.045403 0.038219 -0.063438 -0.053697 \n-0.007396 -0.031398 0.017754 -0.172866 0.059650 0.047306 0.028721 0.038858 -0.090778 -0.069213 \n-0.050587 -0.024716 0.023247 -0.172154 0.048419 0.037544 0.009258 0.022863 -0.065299 -0.050654 \n-0.069827 -0.006750 0.028891 -0.155196 0.028124 0.012648 -0.001577 -0.000397 -0.001922 -0.008919 \n-0.053849 0.011973 0.031379 -0.131930 0.010655 -0.012793 0.002562 -0.017294 0.062223 0.031533 \n-0.012020 0.020487 0.029254 -0.115987 0.006243 -0.023880 0.019242 -0.017932 0.089559 0.047033 \n0.031165 0.013807 0.023762 -0.116702 0.017473 -0.014122 0.038694 -0.001937 0.064074 0.028511 \n0.050412 -0.004156 0.018118 -0.133655 0.037766 0.010766 0.049531 0.021320 0.000702 -0.013208 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n10\n6\n111.570907 32.910130 22.463857 3.183176 1.531432 1.381999 0.770569 0.635129 0.500532 0.422800 \n"
  },
  {
    "path": "FaceLivenessDetection/model/model_eye/pdms/pdm_28_l_eye_3D_closed.txt",
    "content": "# The mean values of the components (in mm)\n84\n1\n6\n-5.513861 \n-3.584030 \n0.689206 \n4.802645 \n6.346689 \n4.705906 \n0.143620 \n-3.969817 \n-11.209605 \n-8.614140 \n-4.895108 \n-0.286655 \n4.315176 \n7.784450 \n10.151100 \n7.250731 \n3.271212 \n-1.065652 \n-5.165718 \n-8.705321 \n-1.476467 \n0.324358 \n2.195097 \n3.039631 \n2.363439 \n0.562884 \n-1.307482 \n-2.152288 \n-1.074175 \n-5.261457 \n-6.865877 \n-4.947588 \n-0.630295 \n3.911768 \n5.161403 \n3.243115 \n0.957222 \n-1.049970 \n-2.316547 \n-2.862675 \n-1.959374 \n-0.095726 \n2.351440 \n3.510297 \n3.755154 \n3.797180 \n3.410716 \n2.555497 \n1.093865 \n1.933679 \n1.231211 \n-0.601842 \n-2.491440 \n-3.330879 \n-2.628691 \n-0.796012 \n-0.054457 \n0.532111 \n0.641715 \n0.210152 \n-0.509775 \n-0.879208 \n-1.205947 \n-0.774384 \n4.283196 \n1.616596 \n-0.796095 \n-2.100358 \n-1.721653 \n-0.440952 \n1.060595 \n-0.559696 \n-2.010491 \n-2.176368 \n-0.872711 \n1.517115 \n0.313958 \n0.125369 \n0.173887 \n0.431068 \n0.746213 \n0.934736 \n0.886248 \n0.629133 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n84\n10\n6\n0.167881 0.037515 -0.058646 0.033467 0.007013 0.083344 0.140162 0.014855 0.064846 -0.170941 \n0.144747 0.025369 -0.029522 0.011262 -0.071090 0.203042 0.058466 0.020071 0.048015 -0.098735 \n0.130919 0.001976 0.015781 -0.021780 -0.107202 0.203982 -0.058147 0.013939 0.001668 0.032456 \n0.134498 -0.018961 0.050725 -0.046303 -0.080169 0.085614 -0.141365 0.000051 -0.047046 0.145781 \n0.153386 -0.025177 0.054841 -0.047942 -0.005828 -0.082724 -0.142441 -0.013459 -0.069592 0.174858 \n0.171298 -0.014498 0.028042 -0.026941 0.077441 -0.217018 -0.062715 -0.021341 -0.053763 0.101612 \n0.190348 0.010362 -0.019585 0.007306 0.108386 -0.203362 0.055867 -0.012543 -0.006414 -0.028538 \n0.186769 0.031299 -0.054529 0.031829 0.081354 -0.084994 0.139085 0.001345 0.042300 -0.141864 \n-0.152472 0.045932 -0.082773 -0.055658 -0.007529 -0.054010 -0.199419 -0.134126 -0.101864 0.104416 \n-0.184330 -0.002781 -0.040384 -0.080832 -0.080460 -0.115659 -0.055044 -0.080257 0.058662 0.101912 \n-0.213285 -0.008939 -0.034917 -0.022841 -0.034538 -0.123140 0.030932 -0.037313 0.101512 0.081439 \n-0.232555 0.003035 -0.055702 0.033152 0.076396 0.011744 0.117545 -0.262249 0.015413 -0.155968 \n-0.234134 0.004997 -0.053270 0.057837 0.186495 0.082705 0.126911 -0.442421 -0.063530 -0.192235 \n-0.225329 -0.015439 0.023166 0.064446 0.087217 0.069482 0.099691 -0.249926 -0.080107 -0.028214 \n-0.207372 -0.062591 0.119437 0.054907 -0.076820 0.048100 0.135908 0.057742 0.004103 0.009908 \n-0.207309 -0.052291 0.099881 0.114814 -0.132728 0.038736 0.063320 0.127790 -0.094419 0.019914 \n-0.207618 -0.029961 0.076210 0.091900 -0.049907 0.030279 -0.028983 0.273244 -0.042669 -0.005952 \n-0.200832 -0.002349 0.027929 0.031359 -0.014172 0.005684 -0.042899 0.435980 0.098097 0.013502 \n-0.184402 0.009464 -0.017039 -0.048177 0.004151 0.026121 -0.058695 0.257197 0.110822 0.032434 \n-0.165398 0.018683 -0.044018 -0.098351 0.012939 0.024937 -0.134807 0.069897 0.073109 -0.022702 \n0.153118 0.016465 -0.024583 0.006636 0.037945 -0.028369 0.160085 0.033318 -0.184813 0.078178 \n0.154866 0.007385 -0.008461 -0.004109 0.049639 -0.092397 0.026746 -0.005949 -0.022710 -0.000382 \n0.149017 -0.002774 0.012207 -0.018561 0.033647 -0.104700 -0.125446 -0.043084 0.148359 -0.076732 \n0.138999 -0.008057 0.025308 -0.028236 -0.000666 -0.058065 -0.207285 -0.056337 0.228233 -0.106257 \n0.130680 -0.005372 0.023172 -0.027479 -0.033190 0.020171 -0.170867 -0.037942 0.170086 -0.071581 \n0.128933 0.003706 0.007052 -0.016750 -0.044871 0.084172 -0.037576 0.001329 0.007933 0.007089 \n0.134779 0.013860 -0.013609 -0.002322 -0.028876 0.096467 0.114542 0.038469 -0.163204 0.083593 \n0.144797 0.019145 -0.026714 0.007369 0.005424 0.049859 0.196430 0.051719 -0.243027 0.113007 \n0.016389 -0.154283 -0.012634 0.011202 0.127838 -0.233231 0.083422 -0.020541 0.004212 -0.018229 \n0.021618 -0.125432 -0.048000 0.070337 0.075609 -0.129863 0.130471 -0.029065 0.084827 -0.065960 \n0.017817 -0.117497 -0.053283 0.089178 -0.015735 0.045359 0.106064 -0.023203 0.119076 -0.070549 \n0.007213 -0.135126 -0.025388 0.056689 -0.092686 0.189792 0.024499 -0.006388 0.086896 -0.029308 \n-0.003984 -0.167992 0.019345 -0.008099 -0.110167 0.218829 -0.066444 0.011530 0.007137 0.033605 \n-0.010850 -0.196699 0.059026 -0.068250 -0.066030 0.122601 -0.115358 0.019806 -0.069346 0.083334 \n-0.005412 -0.204777 0.059994 -0.086075 0.033407 -0.059761 -0.089086 0.014191 -0.107727 0.085926 \n0.005192 -0.187148 0.032099 -0.053586 0.110358 -0.204194 -0.007521 -0.002624 -0.075546 0.044685 \n0.051597 0.123490 -0.100835 0.113633 0.277072 0.404462 -0.158693 -0.089593 -0.059518 -0.031557 \n0.046520 0.191125 0.186443 0.028729 0.050283 0.218925 -0.101211 0.048101 -0.011525 -0.043765 \n0.031496 0.229386 0.360031 -0.050497 -0.104395 0.079803 -0.054671 -0.073899 -0.062985 -0.023917 \n0.008466 0.249892 0.434476 -0.046985 -0.170644 -0.092034 0.008838 -0.087026 -0.030030 0.019115 \n-0.020457 0.260307 0.347209 0.044215 -0.051959 -0.147993 0.103852 -0.081857 -0.000604 -0.087831 \n-0.049636 0.264882 0.162264 0.120013 0.170250 -0.115936 0.057634 0.079663 0.011493 -0.053341 \n-0.074908 0.222322 -0.128680 0.106279 0.515992 -0.037382 -0.166184 0.282250 -0.092724 -0.029211 \n-0.061014 0.208181 -0.221481 -0.003480 0.048193 -0.126544 0.030670 0.093612 -0.016308 -0.019164 \n-0.039475 0.208053 -0.288236 -0.127299 -0.178571 -0.148602 0.040236 0.004113 -0.004457 -0.016551 \n-0.015936 0.203274 -0.317303 -0.176584 -0.301025 -0.090120 0.038670 -0.012354 -0.000247 -0.036027 \n0.007963 0.191505 -0.289781 -0.098710 -0.251918 0.026406 0.025857 -0.011773 0.026086 0.020397 \n0.031390 0.166293 -0.221317 0.010778 -0.065560 0.197405 -0.013358 -0.038202 0.028971 0.015787 \n0.004235 -0.165003 0.019162 -0.015569 0.044130 -0.113124 -0.088548 -0.042014 0.167473 -0.083327 \n-0.000300 -0.172691 0.031731 -0.029747 0.010395 -0.055596 -0.169946 -0.050038 0.239789 -0.125691 \n-0.002022 -0.169263 0.029080 -0.021466 -0.029459 0.025877 -0.142794 -0.034375 0.183570 -0.078222 \n0.000078 -0.156729 0.012766 0.004408 -0.052075 0.083550 -0.023030 -0.004196 0.031710 0.031351 \n0.004768 -0.142435 -0.007651 0.032701 -0.044203 0.083633 0.119139 0.022826 -0.126885 0.138947 \n0.009301 -0.134752 -0.020213 0.046851 -0.010464 0.026098 0.200464 0.030859 -0.199272 0.181460 \n0.011023 -0.138177 -0.017566 0.038590 0.029375 -0.055348 0.173359 0.015191 -0.142999 0.133883 \n0.008925 -0.150706 -0.001258 0.012743 0.051988 -0.113014 0.053667 -0.014997 0.008933 0.024161 \n-0.146414 -0.002516 0.028155 -0.163578 0.022690 0.023539 0.002211 -0.006223 -0.035002 0.012582 \n-0.109902 0.040269 0.033462 -0.110156 -0.017675 -0.030878 0.039946 -0.034778 0.056210 0.143990 \n-0.014166 0.059774 0.028433 -0.073564 -0.028456 -0.056347 0.078713 -0.035782 0.114925 0.182190 \n0.084713 0.044573 0.016014 -0.075237 -0.003338 -0.037950 0.095804 -0.008646 0.106748 0.104806 \n0.128814 0.003571 0.003480 -0.114195 0.042965 0.013538 0.081206 0.030733 0.036469 -0.042832 \n0.099074 -0.043950 -0.000509 -0.171174 0.086675 0.069487 0.039093 0.061946 -0.059545 -0.184463 \n-0.003434 -0.058719 0.003203 -0.204209 0.094112 0.093425 0.004704 0.060292 -0.113458 -0.212440 \n-0.102313 -0.043518 0.015622 -0.202536 0.068994 0.075027 -0.012387 0.033157 -0.105281 -0.135056 \n0.068631 -0.013724 0.027292 0.231437 -0.037554 0.034751 0.337456 0.134888 0.312055 -0.132196 \n0.055992 -0.018520 -0.024499 0.236434 -0.057326 -0.072106 -0.011848 0.151259 -0.049264 -0.117501 \n0.039393 -0.033167 -0.026588 0.194395 -0.163302 -0.053331 -0.095733 0.027393 -0.169484 -0.254320 \n0.013759 -0.046657 -0.031453 0.191733 -0.202303 -0.154083 -0.244663 -0.006407 -0.264460 -0.184882 \n-0.015599 -0.034327 -0.050684 0.208434 -0.145282 -0.134450 -0.225097 -0.057805 -0.253738 -0.159062 \n-0.038477 -0.010328 -0.025919 0.225952 -0.098722 -0.012521 -0.024397 -0.078886 -0.051188 -0.094188 \n-0.054913 -0.004523 0.015086 0.231138 -0.115127 0.082549 0.124313 -0.000052 0.180789 0.076509 \n-0.036452 0.030786 -0.028097 0.176770 -0.015768 0.029793 -0.046117 0.020525 0.047330 0.165226 \n-0.009409 0.051946 -0.050194 0.162935 0.085636 -0.028224 -0.126599 0.046702 0.099383 0.240695 \n0.019928 0.055883 -0.059556 0.147688 0.109694 0.020391 -0.066574 -0.102694 0.128555 0.213173 \n0.042182 0.043848 -0.041760 0.116811 0.078314 0.051616 -0.106453 -0.228687 0.036561 0.260986 \n0.056256 0.022936 -0.019524 0.146331 0.032207 -0.007908 -0.035410 -0.090636 -0.012725 0.205397 \n-0.050587 -0.024716 0.023247 -0.172154 0.048419 0.037544 0.009258 0.022863 -0.065299 -0.050654 \n-0.007396 -0.031398 0.017754 -0.172866 0.059650 0.047306 0.028721 0.038858 -0.090778 -0.069213 \n0.034441 -0.022881 0.015629 -0.156918 0.055237 0.036211 0.045403 0.038219 -0.063438 -0.053697 \n0.050412 -0.004156 0.018118 -0.133655 0.037766 0.010766 0.049531 0.021320 0.000702 -0.013208 \n0.031165 0.013807 0.023762 -0.116702 0.017473 -0.014122 0.038694 -0.001937 0.064074 0.028511 \n-0.012020 0.020487 0.029254 -0.115987 0.006243 -0.023880 0.019242 -0.017932 0.089559 0.047033 \n-0.053849 0.011973 0.031379 -0.131930 0.010655 -0.012793 0.002562 -0.017294 0.062223 0.031533 \n-0.069827 -0.006750 0.028891 -0.155196 0.028124 0.012648 -0.001577 -0.000397 -0.001922 -0.008919 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n10\n6\n111.570907 32.910130 22.463857 3.183176 1.531432 1.381999 0.770569 0.635129 0.500532 0.422800 \n"
  },
  {
    "path": "FaceLivenessDetection/model/model_inner/clnf_inner.txt",
    "content": "PDM pdms/pdm_51_inner.txt\nPatchesCCNF patch_experts/ccnf_patches_1.00_inner.txt"
  },
  {
    "path": "FaceLivenessDetection/model/model_inner/main_clnf_inner.txt",
    "content": "LandmarkDetector clnf_inner.txt"
  },
  {
    "path": "FaceLivenessDetection/model/model_inner/pdms/pdm_51_inner.txt",
    "content": "# The mean values of the components (in mm)\n153\n1\n6\n-61.487065 \n-51.509332 \n-37.921431 \n-24.057516 \n-11.630855 \n12.064575 \n25.080979 \n38.237788 \n50.986671 \n59.712693 \n0.585413 \n0.765027 \n0.986699 \n1.246623 \n-15.032333 \n-7.411138 \n0.343475 \n8.042640 \n14.960422 \n-46.398983 \n-37.943690 \n-28.132841 \n-19.916545 \n-28.549994 \n-38.380366 \n19.002468 \n27.657580 \n37.180192 \n44.841001 \n37.909841 \n28.497442 \n-29.562845 \n-17.967543 \n-7.015967 \n0.052801 \n8.043929 \n18.433173 \n28.157774 \n18.519833 \n8.494683 \n-0.070888 \n-7.892087 \n-18.695338 \n-24.992703 \n-7.290790 \n-0.039765 \n8.052638 \n23.868342 \n8.019854 \n-0.212622 \n-7.631916 \n-37.103038 \n-46.958179 \n-50.611833 \n-50.104582 \n-46.101873 \n-46.640281 \n-50.673103 \n-50.958467 \n-46.902842 \n-37.264890 \n-31.676015 \n-21.117514 \n-10.737646 \n0.158715 \n12.338379 \n14.273187 \n15.946075 \n14.281476 \n12.541686 \n-25.706010 \n-31.203003 \n-31.244206 \n-25.361289 \n-23.810857 \n-23.539489 \n-25.401771 \n-31.558920 \n-31.146069 \n-25.831501 \n-23.695860 \n-23.829951 \n39.570821 \n32.160420 \n28.582469 \n30.231097 \n28.688419 \n32.668615 \n39.377912 \n46.579784 \n49.241136 \n49.857061 \n49.336194 \n46.680342 \n39.469109 \n35.142334 \n35.627156 \n35.092954 \n39.393934 \n40.374411 \n41.028762 \n40.536741 \n27.039832 \n20.931821 \n14.543527 \n7.608953 \n2.074720 \n2.333803 \n7.566715 \n14.068191 \n20.304220 \n25.944547 \n-0.320469 \n-8.941564 \n-17.912415 \n-26.452684 \n-10.746347 \n-14.216881 \n-16.665096 \n-14.180856 \n-11.109900 \n19.097556 \n15.606980 \n14.061942 \n12.235130 \n11.967495 \n13.450376 \n12.176099 \n13.685622 \n15.227482 \n18.115394 \n13.233978 \n11.664752 \n4.879596 \n-8.128708 \n-14.406876 \n-15.587202 \n-14.334949 \n-7.381702 \n4.647518 \n-7.847965 \n-15.774312 \n-16.972084 \n-15.841250 \n-8.462756 \n2.392204 \n-13.202273 \n-14.479181 \n-13.135758 \n2.088533 \n-13.195614 \n-14.587587 \n-13.062554 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n153\n32\n6\n0.048215 0.005826 0.019250 0.055175 0.004152 -0.240330 -0.093805 0.065577 -0.028184 0.043409 0.171981 0.101208 0.077786 -0.095916 0.166254 0.029127 0.009577 0.016140 0.053935 0.072393 -0.052710 -0.000041 -0.149995 0.088505 -0.021293 0.097688 -0.043028 0.145707 -0.058863 -0.018754 -0.055098 0.283637 \n0.058869 0.003249 0.041189 -0.001982 0.025312 -0.192894 -0.025140 -0.032292 -0.197517 0.118099 0.225632 0.096284 0.114517 -0.081005 0.139197 -0.078138 -0.126771 -0.136139 -0.046585 0.090782 -0.008204 -0.019328 -0.091391 0.060952 0.007995 0.018184 0.028784 0.048866 -0.015436 0.006046 -0.004828 0.138112 \n0.031959 -0.001668 0.061660 -0.005340 0.003024 -0.169106 0.025180 -0.033297 -0.250054 0.214220 0.125180 0.023097 0.034194 0.014102 0.146834 -0.076318 -0.060218 -0.123413 -0.083792 0.072286 0.019266 0.024247 -0.000997 0.006645 0.024498 0.012834 0.062842 -0.003123 -0.023415 -0.025680 0.048748 -0.026094 \n-0.001316 0.001415 0.073054 0.021599 -0.024599 -0.145333 0.048714 0.025206 -0.239694 0.291975 0.015222 -0.075696 -0.069737 0.103674 0.137956 -0.059660 0.017648 -0.060510 -0.113918 0.036965 0.012494 0.050988 -0.008944 -0.006526 0.024140 0.036188 0.105884 0.010739 -0.032776 -0.034197 0.114925 -0.102668 \n-0.035824 0.001344 0.096519 0.024048 -0.043021 -0.102931 0.068178 0.077011 -0.175251 0.344608 -0.084700 -0.152937 -0.159712 0.163325 0.067623 -0.042989 0.040499 -0.059369 -0.151509 -0.008246 -0.025670 0.086600 -0.038968 -0.005819 0.081015 0.001095 0.078814 0.006911 -0.081881 -0.006646 0.188712 -0.148058 \n0.071337 -0.000209 0.075707 -0.111516 0.029058 0.178910 -0.041829 0.002022 0.098852 -0.063920 0.157150 0.263712 0.153704 -0.143048 0.009165 0.169592 -0.042091 -0.015215 0.060386 0.092701 -0.011412 0.161957 -0.030557 -0.139962 0.185329 -0.000155 0.099424 0.016836 -0.080710 -0.067204 -0.083318 -0.183333 \n0.043699 0.001130 0.048352 -0.082623 0.002693 0.222765 -0.007747 0.047357 0.126133 -0.011240 0.105147 0.176046 0.204156 -0.110730 0.095212 0.125733 -0.031262 -0.051717 -0.001980 0.069208 -0.016668 0.102606 -0.038347 -0.050735 0.155753 0.053377 0.085219 0.033941 -0.041428 -0.049227 0.078802 -0.077253 \n-0.000141 0.006490 0.026936 -0.034005 -0.031528 0.243222 0.012922 0.092152 0.109157 0.056328 0.024020 0.073186 0.199754 -0.021186 0.166785 0.110435 0.009385 0.023913 -0.038320 0.060664 -0.013926 0.021366 -0.027649 -0.048182 0.088896 0.101399 0.136039 0.002153 -0.049570 0.002814 0.149871 0.053358 \n-0.037555 0.007528 -0.015415 -0.002718 -0.057838 0.252132 0.053336 0.097507 0.077208 0.131023 -0.029302 -0.019790 0.160928 0.085102 0.145761 0.072649 0.053385 0.059314 -0.043048 -0.043633 0.018455 -0.049962 0.049462 -0.020626 0.000124 0.070969 0.074913 -0.085165 -0.038757 0.006930 0.199282 0.169772 \n-0.042029 -0.013263 -0.114522 -0.009277 -0.033006 0.258765 0.109871 -0.001142 -0.002636 0.149950 0.001402 -0.063005 0.088768 0.097316 0.002668 -0.002525 0.002781 -0.066426 -0.007422 -0.173785 0.089002 -0.120039 0.113624 0.105707 -0.131966 -0.016829 -0.129686 -0.122573 0.009302 -0.009441 0.268861 0.192443 \n0.010409 0.013506 0.115140 -0.057538 0.000108 0.025111 0.001272 0.021442 -0.008698 0.104583 0.019203 0.062144 -0.047550 0.036312 -0.079895 0.037948 0.014438 0.028186 0.030253 -0.010434 -0.021469 0.041396 -0.008376 -0.037902 0.095982 0.072764 0.102068 -0.046223 -0.057926 -0.054192 -0.040118 -0.116187 \n0.011661 0.013580 0.098244 -0.054918 0.000709 0.017404 0.001459 0.017449 -0.007090 0.090928 0.008597 0.053388 -0.045450 0.027417 -0.104294 0.029068 0.016816 0.046028 0.008358 0.022175 -0.079674 -0.015467 0.041264 0.004870 0.095541 0.095869 0.038536 -0.024476 -0.035445 -0.051161 -0.010636 -0.090827 \n0.012751 0.015901 0.091476 -0.053662 0.002269 0.011829 -0.001927 0.013682 -0.007728 0.075101 0.000009 0.047226 -0.044783 0.019237 -0.126011 0.015673 0.014294 0.065277 -0.017321 0.050151 -0.128723 -0.063789 0.084937 0.044485 0.109595 0.123454 -0.026538 -0.003911 -0.017052 -0.057302 0.012244 -0.069566 \n0.012417 0.019872 0.090561 -0.054278 0.002424 0.009509 -0.003024 0.010002 -0.011042 0.060431 -0.010603 0.041663 -0.043785 0.017712 -0.146990 -0.005398 0.014213 0.074732 -0.050802 0.070873 -0.175363 -0.107205 0.125943 0.076813 0.124051 0.144704 -0.081053 0.023938 0.006968 -0.065779 0.037234 -0.039172 \n0.024544 -0.041070 0.054915 -0.002156 0.020605 0.005506 0.033788 0.023038 -0.009453 -0.020991 0.027501 0.016838 -0.023416 -0.038269 -0.172593 0.100604 -0.087956 0.115924 -0.195525 0.149607 -0.119504 -0.086585 0.062174 -0.075038 0.035110 0.067295 0.018243 0.037127 -0.065788 0.114307 0.008766 0.013420 \n0.015769 -0.016706 0.051135 -0.016355 0.023331 0.007524 0.007242 0.013630 -0.003853 -0.008421 -0.000527 0.001986 -0.030917 -0.012734 -0.145835 0.055688 -0.050414 0.097692 -0.122883 0.116419 -0.123293 -0.072748 0.065772 -0.026490 0.050794 0.080157 -0.001588 0.030216 -0.002659 0.090274 0.014294 0.008209 \n0.006896 0.010273 0.040574 -0.028175 0.009177 -0.002727 -0.014177 0.003932 0.004489 0.006152 -0.014778 0.011313 -0.036673 0.012083 -0.116775 -0.004415 0.017024 0.042082 -0.017831 0.056364 -0.122120 -0.059416 0.060239 0.041547 0.076702 0.078139 -0.024391 0.022113 0.041986 0.029818 0.006180 -0.008338 \n0.003970 0.033635 0.031624 -0.039688 -0.009931 -0.013688 -0.027612 -0.006537 0.014283 0.026041 -0.027827 0.007531 -0.035935 0.028010 -0.090291 -0.066369 0.095570 -0.004022 0.073400 -0.005364 -0.106538 -0.056168 0.061509 0.078550 0.094586 0.045250 -0.003615 0.025884 0.050964 -0.059244 -0.004008 -0.021368 \n-0.001030 0.051101 0.012729 -0.044712 -0.018779 -0.019594 -0.042435 -0.019121 0.024428 0.034846 -0.034286 -0.007933 -0.033382 0.048139 -0.059376 -0.110934 0.139720 -0.028230 0.159201 -0.068088 -0.091597 -0.048485 0.074228 0.104849 0.077415 -0.003190 -0.011414 0.014616 0.051647 -0.131379 -0.016369 -0.029576 \n0.013276 0.015196 0.059348 0.005177 -0.027902 -0.170695 -0.014038 0.150670 0.011873 0.000786 -0.001627 -0.017240 0.060415 -0.071933 -0.072809 0.194452 0.009800 0.022712 0.090550 -0.052535 0.048687 0.036304 -0.081877 0.107825 -0.019121 0.088373 0.006745 -0.001877 0.027214 0.037692 0.066350 -0.032024 \n0.008368 0.021960 0.054532 0.000311 -0.013304 -0.136478 -0.005637 0.144631 -0.012116 0.036030 0.009154 -0.004242 0.045998 -0.045201 -0.104791 0.181210 -0.014972 0.008238 0.103363 -0.104654 0.090328 0.075697 -0.047151 0.056470 -0.047856 0.042860 0.048666 -0.031566 0.031284 0.039040 0.059929 -0.077071 \n0.010395 0.003713 0.046220 0.009379 -0.018544 -0.083031 -0.013386 0.114954 -0.018702 0.037856 -0.002239 0.007356 0.059607 0.038771 -0.131230 0.159333 -0.105685 0.035886 0.067892 -0.054718 0.165788 0.105141 0.029341 0.082812 -0.059462 0.015944 0.035767 -0.047746 0.012667 0.050158 0.039094 -0.047357 \n-0.004435 0.007758 0.022257 0.036260 -0.024646 -0.070379 -0.043482 0.069648 -0.017559 0.045113 -0.011125 0.031216 0.049811 0.049932 -0.155766 0.134651 -0.112632 0.006918 0.065349 -0.047570 0.144378 0.096402 0.099483 0.065001 -0.044072 -0.028810 -0.014239 -0.088588 -0.014730 0.076246 0.021813 -0.019431 \n0.002165 0.006150 0.029380 0.029537 -0.025415 -0.100095 -0.017928 0.118446 -0.004248 0.030562 -0.006585 0.000532 0.058398 0.009221 -0.126284 0.163929 -0.090164 0.029112 0.068156 -0.063123 0.109314 0.090377 -0.005534 0.070883 -0.043083 -0.006742 -0.002886 -0.037771 0.001431 0.081963 0.004436 -0.032697 \n0.005906 0.023652 0.032288 0.016417 -0.016369 -0.150461 -0.008210 0.140340 0.006951 0.032729 0.002817 -0.014571 0.043576 -0.085898 -0.093828 0.197874 0.009255 -0.010440 0.104221 -0.102783 0.013114 0.047952 -0.099076 0.069836 -0.028903 0.044003 0.014956 -0.013531 0.002087 0.064351 0.058261 -0.052773 \n0.031500 -0.016588 -0.023311 -0.051803 0.020577 0.076264 0.056423 -0.050173 0.058645 0.086870 0.049525 0.017849 -0.103044 0.016589 0.058592 0.011828 0.079540 -0.004367 0.086692 -0.046516 -0.016537 0.071956 -0.138565 0.010325 -0.021842 0.083975 0.110326 0.083204 -0.010803 -0.126543 0.008570 -0.065688 \n0.008613 -0.007233 -0.020573 -0.036715 0.011967 0.087079 0.019123 -0.079108 0.053694 0.138972 0.045043 0.066957 -0.125703 0.038948 0.052634 0.035588 0.066490 -0.058129 0.093071 -0.057940 -0.003968 0.124034 -0.079225 0.027754 -0.038168 0.004876 0.053321 0.063399 -0.004495 -0.056661 -0.007469 -0.016110 \n0.010708 -0.022508 -0.031270 -0.026205 0.011524 0.141469 0.005171 -0.103210 0.057169 0.134168 0.035399 0.074052 -0.116274 0.110813 0.023736 0.016900 -0.015217 -0.013920 0.071146 -0.012837 0.055448 0.151531 -0.015708 0.005826 -0.049828 -0.042618 0.063884 0.047747 -0.001527 -0.018317 -0.022828 0.028414 \n-0.002105 -0.020003 -0.064424 -0.013765 0.020781 0.174297 0.001852 -0.122246 0.043849 0.126361 0.045295 0.070262 -0.111656 0.134767 -0.017164 -0.026720 -0.057077 -0.037401 0.057190 -0.048382 0.069101 0.117167 0.012271 -0.038779 -0.039332 -0.077244 0.048794 -0.029942 0.009972 0.030621 -0.034125 0.032811 \n0.013969 -0.027246 -0.057345 -0.015140 0.008990 0.148608 0.002683 -0.100291 0.049046 0.118726 0.042351 0.076792 -0.099641 0.130512 -0.001439 -0.013800 -0.045290 0.013326 0.049555 0.028980 0.100417 0.164552 0.016949 -0.001374 -0.021085 -0.071477 0.006962 0.059649 0.027692 -0.007030 -0.078989 0.038859 \n0.019008 -0.012928 -0.046256 -0.036644 0.012116 0.098313 0.022292 -0.078736 0.050100 0.118315 0.047233 0.058065 -0.103981 0.053660 0.031135 0.009987 0.035686 -0.022567 0.066701 -0.005730 0.033996 0.126479 -0.062315 0.021035 -0.001091 -0.013353 0.002995 0.076257 0.009807 -0.058127 -0.042979 -0.004986 \n-0.007601 -0.177175 0.017727 0.125761 0.005688 -0.003353 0.147590 0.073022 -0.018688 -0.204710 0.010150 0.031133 0.001801 0.030364 0.023092 -0.004181 0.085187 0.005926 0.087355 0.072482 -0.021998 -0.032687 0.046765 -0.055522 -0.177677 -0.034217 0.213318 0.017704 0.014570 -0.055193 0.030444 0.001590 \n-0.016541 -0.130310 0.005113 0.039399 -0.015097 -0.002729 0.084226 0.039798 -0.038451 -0.160923 0.067103 -0.036395 -0.025994 0.076883 0.025661 0.022379 0.057800 -0.007792 -0.055764 0.012615 -0.000495 -0.017802 0.043257 -0.012918 -0.076865 0.029916 0.111351 0.026562 -0.043756 -0.072868 -0.014045 -0.005620 \n-0.006580 -0.041018 0.011956 0.014998 0.000740 -0.005472 0.032329 0.006822 -0.020124 -0.131024 0.077596 -0.043507 -0.025592 0.112554 -0.034348 0.040738 0.060708 -0.001484 -0.155825 -0.070616 -0.011748 0.005651 0.000251 0.005087 0.038106 0.066154 0.082256 0.091179 -0.065226 -0.023005 -0.061362 -0.058155 \n0.004961 0.001648 -0.003877 -0.006108 0.014598 -0.019228 -0.004263 -0.016762 0.000237 -0.074099 -0.025521 -0.041570 -0.009358 0.010684 -0.001844 0.010927 0.012393 -0.017579 -0.043086 -0.029781 -0.001323 0.002201 0.067935 -0.021949 0.012852 0.077330 0.032354 0.036728 -0.058971 -0.032938 -0.001410 -0.051522 \n0.010249 0.058570 -0.030749 -0.037553 0.017103 -0.045825 -0.032816 -0.033532 0.023519 -0.005390 -0.142192 -0.028903 0.005856 -0.119621 0.037848 -0.030546 -0.049052 -0.044563 0.084150 0.025508 0.033239 0.010978 0.157710 -0.068468 -0.065812 0.111109 0.080771 0.000044 -0.000183 -0.031588 0.026364 -0.072106 \n0.019855 0.127731 -0.069824 -0.036148 0.034849 -0.043347 -0.088673 -0.073093 0.049751 0.013844 -0.144983 -0.063823 0.020675 -0.110435 0.051877 -0.041482 -0.071095 0.014502 0.034872 0.022648 -0.049292 0.007571 0.075833 -0.065256 -0.069651 -0.001051 0.095846 0.062248 -0.062551 -0.005565 0.031314 -0.030085 \n-0.002875 0.164839 -0.124720 -0.071759 0.017265 -0.043992 -0.148503 -0.111790 0.051584 0.012064 -0.084883 -0.131572 -0.001352 -0.044408 -0.003920 -0.047574 -0.034283 0.058068 -0.088753 -0.010707 -0.048508 0.013425 -0.024586 -0.044085 0.017545 -0.168004 0.085244 0.029133 -0.109995 -0.062934 -0.001407 0.004682 \n0.017838 0.126359 -0.098394 -0.019146 0.037082 -0.045881 -0.088216 -0.093730 0.054146 -0.034776 -0.152958 -0.093546 0.040898 -0.099978 0.077336 -0.047936 -0.073395 -0.008478 0.035327 0.016668 -0.011878 0.031888 0.029670 -0.010671 0.013279 -0.059562 0.097616 -0.001442 -0.123286 0.033179 0.093989 -0.017493 \n0.003354 0.057470 -0.070587 -0.005011 0.030120 -0.048761 -0.033225 -0.056017 0.022933 -0.077317 -0.170237 -0.073664 0.040276 -0.107085 0.099220 -0.034965 -0.061435 -0.077366 0.069545 -0.000936 0.069153 0.082774 0.086736 -0.021770 0.048952 -0.005926 0.014456 -0.045143 -0.062652 0.092136 0.133381 -0.040747 \n-0.005090 -0.003703 -0.040158 0.017871 0.020138 -0.024901 -0.002366 -0.032407 -0.001883 -0.147184 -0.047234 -0.089613 0.020124 0.020696 0.065435 0.004741 -0.007643 -0.052853 -0.055641 -0.066739 0.032675 0.071221 -0.008619 0.042968 0.104527 -0.033912 -0.035940 0.001701 -0.099441 0.094234 0.101317 -0.019024 \n-0.020413 -0.053520 -0.023649 0.035117 0.005981 -0.015046 0.027253 -0.008273 -0.021301 -0.215940 0.053858 -0.103258 0.002494 0.109283 0.037848 0.037581 0.055486 -0.042429 -0.157384 -0.081131 0.031650 0.072109 -0.075592 0.080851 0.143183 -0.044277 -0.015440 0.051076 -0.114670 0.079007 0.058218 -0.007329 \n-0.029800 -0.143867 -0.013745 0.053673 -0.009247 -0.010775 0.087729 0.033939 -0.038123 -0.226383 0.051127 -0.072732 -0.003050 0.087211 0.077594 0.019810 0.059918 -0.024133 -0.041687 0.001805 0.000908 0.031197 -0.029281 0.024243 -0.029099 -0.078006 0.068409 0.023726 -0.060584 0.003392 0.082980 -0.001526 \n-0.003562 -0.182306 -0.002510 0.134236 0.020593 -0.001022 0.150457 0.051751 -0.021379 -0.197171 -0.001357 0.011236 0.017400 0.037123 0.026165 -0.017637 0.090818 0.025239 0.074023 0.040654 -0.048912 -0.012247 0.059420 -0.037121 -0.191095 -0.060883 0.188357 0.054443 0.012178 -0.065544 0.013102 -0.027796 \n-0.010711 -0.038978 0.021641 0.018128 0.003540 -0.003594 0.029128 0.000882 -0.023613 -0.158293 0.065713 -0.056117 -0.021144 0.110963 -0.022237 0.034373 0.061360 -0.018439 -0.167422 -0.072410 0.011021 0.030154 -0.039910 -0.005807 0.092278 0.022426 0.060858 0.072149 -0.046708 -0.000397 -0.017953 -0.017121 \n0.001604 0.002832 0.000803 -0.005274 0.015109 -0.016136 -0.006531 -0.023165 -0.000438 -0.092850 -0.035022 -0.048312 -0.007273 0.013002 0.003632 -0.000217 0.014076 -0.024655 -0.057671 -0.039153 0.008338 0.025209 0.033618 -0.034396 0.059088 0.041641 0.012819 0.035200 -0.035564 -0.014626 0.032340 -0.025766 \n0.006185 0.058475 -0.024893 -0.037175 0.019107 -0.042798 -0.037553 -0.041913 0.024837 -0.025511 -0.153636 -0.038780 0.010843 -0.117604 0.043591 -0.044371 -0.050973 -0.050976 0.069347 0.015835 0.052084 0.035582 0.124825 -0.086511 -0.028588 0.074993 0.066821 -0.007952 0.018917 -0.012518 0.062130 -0.033156 \n0.002463 0.168080 -0.136484 -0.070991 -0.000142 -0.053769 -0.139684 -0.087917 0.059874 0.007064 -0.066238 -0.111041 -0.005337 -0.081490 0.009107 -0.051594 -0.042681 0.045556 -0.093714 -0.008363 -0.042080 -0.017430 -0.031609 -0.001219 0.006639 -0.110636 0.075719 0.038312 -0.081411 -0.076286 0.005031 0.017376 \n0.002460 0.062396 -0.031204 -0.026408 0.024750 -0.042569 -0.031270 -0.048558 0.018988 -0.051855 -0.165795 -0.047546 0.014711 -0.111244 0.069508 -0.046675 -0.048367 -0.064651 0.084473 0.007423 0.062561 0.073016 0.095949 -0.054850 0.020098 0.030933 0.120550 -0.043533 -0.039562 0.048001 0.050266 -0.061655 \n-0.004685 0.000569 -0.005040 0.000755 0.016194 -0.016907 -0.003853 -0.027512 -0.002388 -0.122261 -0.043735 -0.063413 -0.000743 0.019885 0.030741 -0.001230 0.004503 -0.042001 -0.040738 -0.054958 0.019498 0.058092 0.012181 0.011604 0.088081 -0.011669 0.050463 -0.009650 -0.099759 0.052670 0.033079 -0.054823 \n-0.018957 -0.048389 0.018017 0.018608 0.003876 -0.005877 0.031093 -0.006768 -0.022868 -0.186666 0.059326 -0.071245 -0.013824 0.113043 0.002428 0.030351 0.054222 -0.031200 -0.154587 -0.097681 0.016085 0.063763 -0.071813 0.037959 0.122679 -0.024949 0.083365 0.042657 -0.113388 0.044483 -0.020300 -0.049739 \n-0.162610 0.056241 -0.118504 0.059701 -0.048249 -0.050760 0.128754 0.265951 0.341609 0.110738 -0.135518 -0.115490 -0.099648 0.109674 -0.111021 -0.001668 0.147996 0.053026 0.009899 0.133886 -0.140765 0.281420 -0.073423 0.022914 0.003341 -0.107082 0.045444 0.043043 0.113012 0.091742 0.026333 -0.017815 \n-0.126385 0.047294 -0.133937 0.006951 0.013249 -0.040862 0.155073 0.099923 0.231954 0.071355 0.035571 -0.020532 0.035789 -0.047152 -0.111682 -0.081486 -0.017762 -0.053309 -0.092581 0.109210 -0.084614 0.095902 -0.156798 0.015064 -0.006130 -0.034144 0.003810 0.096272 0.077562 0.068091 0.099806 -0.014524 \n-0.102062 0.032861 -0.162514 -0.033062 0.053235 -0.049172 0.211614 -0.062326 0.101859 0.069886 0.111347 0.021553 0.111715 -0.109087 -0.102102 -0.084144 -0.067478 -0.113830 -0.119393 0.125400 0.016227 -0.026306 -0.082905 -0.025672 0.026668 -0.039523 -0.030999 -0.025383 0.025944 0.101807 0.084352 0.066410 \n-0.103049 0.018892 -0.134116 -0.057506 0.085295 -0.075070 0.225640 -0.144405 0.031393 0.080863 0.113508 0.010296 0.120999 -0.101779 -0.075648 0.016479 0.046589 0.002806 -0.048924 0.074128 0.075176 -0.057257 -0.024087 -0.108163 0.000415 -0.032716 -0.006385 -0.099955 -0.072957 0.116279 -0.045920 0.001768 \n-0.118193 0.025507 -0.074301 -0.045187 0.102224 -0.106225 0.190977 -0.183406 -0.056988 0.115954 0.028488 -0.058072 0.051232 -0.020783 -0.033793 0.115688 0.196134 0.252206 -0.028922 0.014279 0.144263 -0.020323 -0.035891 -0.202846 -0.042035 0.024356 0.035187 -0.020364 -0.137666 0.082970 -0.123162 -0.133798 \n-0.114891 0.034303 0.020158 -0.083090 0.110950 -0.093523 0.195756 -0.222891 0.000049 0.062378 -0.038594 -0.070011 -0.031324 0.025951 -0.050989 0.152416 0.124236 0.226855 0.058619 -0.083728 0.147437 -0.100354 -0.048409 -0.093370 0.021067 -0.021501 0.075465 0.053350 0.030439 -0.009232 0.022077 0.013296 \n-0.119054 0.041814 0.080899 -0.118384 0.117569 -0.039798 0.217612 -0.186713 0.061424 -0.013021 0.032289 -0.004352 0.013718 -0.012923 -0.047337 0.052392 -0.028514 -0.072800 0.060538 -0.120286 0.150527 -0.131318 -0.040075 0.022865 0.116495 -0.044144 -0.033261 0.089726 0.090247 -0.019005 -0.099180 0.032243 \n-0.127589 0.061951 0.116807 -0.112203 0.096946 -0.015793 0.192008 -0.110133 0.094506 -0.035109 0.018385 -0.023107 0.025450 -0.012428 0.016356 0.017251 -0.176952 -0.179326 0.003953 -0.063761 0.066204 -0.145205 -0.061318 0.093348 0.079680 -0.044576 -0.080078 0.067574 0.066271 -0.015407 -0.079506 0.025660 \n-0.167628 0.091833 0.139020 -0.044339 0.035606 0.000881 0.140626 0.061244 0.127579 -0.010045 -0.033982 -0.070995 0.103294 0.045499 0.188113 0.007461 -0.231605 -0.093872 -0.032287 0.031444 -0.029025 -0.159186 -0.067659 0.097096 -0.001771 0.025395 -0.072496 0.072185 0.056974 0.001864 -0.142344 -0.072921 \n-0.222999 0.110008 0.166622 0.025815 -0.046455 0.011291 0.094730 0.225386 0.142132 0.063790 -0.141547 -0.151380 0.152901 0.227167 0.341995 0.020984 -0.125819 0.080700 -0.003875 0.147870 -0.103510 -0.112049 0.060838 0.026481 0.002360 -0.001735 0.003516 -0.121181 0.009356 -0.055520 -0.272688 -0.184306 \n-0.070808 -0.009120 -0.026210 -0.021131 0.142808 0.065134 -0.022932 0.014346 -0.041991 -0.045258 -0.015726 -0.053231 -0.016220 -0.057895 0.037959 -0.002569 0.045020 0.182753 -0.004760 -0.023426 0.187006 -0.127475 -0.068984 0.003608 0.016304 0.251609 -0.074162 -0.005424 0.119073 -0.056019 0.243802 -0.201573 \n-0.043040 -0.021279 -0.039675 -0.068987 0.072616 0.041839 -0.035553 0.021125 -0.047249 -0.046312 -0.091650 0.065314 0.014862 0.021630 0.037385 -0.038912 0.087192 0.090884 0.018938 -0.029993 0.108400 -0.132754 -0.144603 0.001875 0.000511 0.132799 -0.035265 -0.036656 0.070582 0.018957 0.115565 -0.120813 \n-0.013099 -0.033833 -0.057395 -0.120972 0.001638 0.013844 -0.045488 0.024128 -0.045381 -0.032691 -0.171503 0.182971 0.047618 0.089191 0.036425 -0.062833 0.142780 0.003517 0.032819 -0.024918 0.029621 -0.141110 -0.194478 0.017932 -0.023168 0.021631 -0.032996 -0.040413 0.052797 0.099430 0.006638 -0.055234 \n0.014253 -0.043439 -0.071519 -0.170923 -0.067274 -0.016635 -0.054486 0.025628 -0.042909 -0.014397 -0.245480 0.284048 0.076878 0.161979 0.032496 -0.077883 0.209676 -0.089568 0.033273 -0.021634 -0.058239 -0.152057 -0.222782 0.045212 -0.019896 -0.097913 -0.058598 -0.076842 0.020694 0.196959 -0.081829 -0.016686 \n0.007477 -0.081618 -0.029910 -0.076472 -0.022163 0.011163 -0.087683 0.002195 -0.019605 -0.015751 -0.113156 0.056018 0.037931 0.020207 -0.034383 -0.088665 -0.106448 0.076275 -0.144134 0.065121 0.063580 0.042569 -0.085946 -0.025882 0.006452 -0.031628 -0.032174 0.120340 0.114240 0.111163 0.062736 0.001562 \n0.011139 -0.078719 -0.039792 -0.088259 -0.031509 0.003203 -0.088662 -0.003480 -0.017413 0.000271 -0.122991 0.075337 0.032618 0.028238 0.000050 -0.043599 -0.023300 0.057471 -0.089841 0.045665 0.056588 -0.005710 -0.127373 0.039749 -0.032548 -0.025521 0.011691 0.121196 -0.055707 0.006174 0.040378 -0.015242 \n0.016747 -0.068425 -0.033101 -0.106148 -0.042105 -0.005195 -0.093571 -0.003252 -0.013278 0.019877 -0.141296 0.098239 0.026182 0.038549 0.027194 -0.013311 0.023222 0.027468 -0.051849 0.024616 0.042335 -0.046240 -0.151009 0.086312 -0.079250 -0.032065 0.057885 0.101376 -0.123572 -0.012793 -0.031447 -0.016148 \n0.011518 -0.080232 -0.015629 -0.092422 -0.032834 0.001990 -0.089949 0.000905 -0.020972 0.041678 -0.110830 0.089378 0.020248 0.033745 0.015915 -0.008552 -0.034952 0.085307 -0.070805 0.028856 0.054686 -0.052184 -0.139190 0.026374 -0.099375 0.008474 0.040136 0.008345 -0.121948 0.062586 -0.075155 -0.079851 \n0.005555 -0.083743 -0.019684 -0.073439 -0.019149 0.007666 -0.095805 0.012232 -0.029099 0.058131 -0.090164 0.082750 0.022310 0.034570 0.016901 0.007638 -0.121652 0.124873 -0.099280 0.038547 0.060200 -0.051425 -0.086080 -0.019566 -0.155881 0.034615 0.037963 -0.058363 -0.078303 0.180599 -0.107838 -0.116726 \n-0.049163 -0.016282 -0.132207 0.052145 0.087552 0.078383 -0.070295 0.069966 0.006733 0.025127 0.114393 -0.079170 -0.035812 -0.098023 -0.031637 -0.085551 0.034260 -0.043249 -0.071715 0.111162 -0.045153 0.027413 -0.074832 0.049430 -0.100690 0.107424 0.026539 -0.051897 -0.109445 -0.033795 -0.107162 0.013996 \n-0.062681 0.002720 -0.117147 0.030493 0.112654 0.057038 -0.063566 0.076516 -0.000790 0.057968 0.129108 -0.077681 -0.058790 -0.194034 -0.013827 -0.021501 0.194945 -0.139099 -0.020951 -0.053653 -0.164209 -0.047216 -0.076934 -0.005145 -0.080876 0.056135 -0.001550 -0.151366 0.006616 0.064699 -0.081738 -0.119177 \n-0.060870 0.007231 -0.099162 0.023541 0.116719 0.052975 -0.077943 0.075988 -0.018912 0.054986 0.118379 -0.070836 -0.061627 -0.166439 -0.006231 -0.010003 0.171530 -0.103542 -0.015095 -0.045333 -0.102100 -0.042120 -0.054430 -0.024383 -0.070447 0.047844 -0.007643 -0.140867 0.049289 0.102239 -0.107740 -0.097239 \n-0.061271 -0.009933 -0.074183 0.027667 0.104064 0.089905 -0.083036 0.054611 -0.040969 0.017161 0.066002 -0.057724 -0.038106 -0.027491 -0.033383 -0.059233 -0.057495 0.084170 -0.062052 0.096381 0.132812 0.009311 -0.026879 -0.015465 -0.003377 0.081877 -0.045494 -0.090228 0.030092 0.058908 -0.139219 -0.017977 \n-0.048562 -0.043647 -0.087667 0.038267 0.103935 0.117829 -0.090585 0.052270 -0.028879 0.009657 0.085143 -0.083039 -0.046367 -0.001596 -0.033018 -0.048105 -0.051075 0.052992 -0.079957 0.145867 0.091881 0.030520 0.018662 0.027457 -0.094258 0.043722 -0.045175 -0.079949 -0.019677 0.036338 -0.044866 -0.005565 \n-0.052765 -0.049924 -0.108674 0.053399 0.088558 0.113405 -0.087415 0.054456 -0.012026 0.011413 0.095358 -0.080536 -0.035235 -0.020982 -0.039535 -0.065446 -0.042237 0.015724 -0.090878 0.143159 0.047516 0.028396 0.020776 0.061676 -0.122891 0.034260 -0.045151 -0.075123 -0.048202 0.021218 -0.086346 -0.005640 \n-0.069824 -0.000086 0.038965 -0.014722 0.119393 0.092526 -0.091609 0.044029 -0.050579 -0.005513 0.021446 -0.038810 -0.089553 -0.005461 -0.014542 -0.001024 -0.109063 0.072500 -0.024838 0.057627 0.146163 -0.024455 -0.003444 -0.010284 0.096202 -0.080695 0.036608 0.108937 0.117505 0.090974 -0.054494 0.009696 \n-0.073906 0.020581 0.065550 -0.036250 0.142283 0.070751 -0.099244 0.053274 -0.037082 0.021105 0.047970 -0.047143 -0.131235 -0.142730 0.046858 0.092322 0.087878 -0.113904 0.061187 -0.124464 -0.090246 -0.101586 -0.026517 -0.000548 0.029821 -0.078121 0.071779 0.040439 0.097549 0.117850 0.017069 -0.078031 \n-0.084093 0.019657 0.088135 -0.032875 0.143978 0.077518 -0.093574 0.051767 -0.029084 0.019953 0.048282 -0.055979 -0.142543 -0.133213 0.073838 0.107972 0.074020 -0.148200 0.077701 -0.168161 -0.122067 -0.135095 -0.021852 0.031179 -0.012511 -0.089141 0.057981 0.030165 0.019775 0.113770 0.028108 -0.077611 \n-0.077732 0.004400 0.117431 -0.028858 0.117351 0.107466 -0.096154 0.048393 -0.034070 -0.007019 0.028164 -0.060902 -0.133304 -0.030122 0.057624 0.067102 -0.092634 -0.024428 0.048480 -0.021547 0.005795 -0.081226 -0.044246 0.058250 -0.000055 -0.126365 0.093904 0.119172 -0.077699 0.003646 0.024751 -0.029424 \n-0.070891 -0.028670 0.090653 -0.013215 0.115244 0.133554 -0.102496 0.040208 -0.042072 0.002207 0.022201 -0.057807 -0.127981 0.016069 0.009495 0.070512 -0.138189 0.023363 0.014707 0.026086 0.070655 -0.057696 0.050936 0.063607 -0.033375 -0.163500 0.031972 0.094066 -0.014772 0.089923 0.016365 -0.003741 \n-0.066799 -0.029570 0.063743 -0.009256 0.119994 0.133213 -0.106335 0.046800 -0.047549 -0.002070 0.024232 -0.057584 -0.120081 0.018683 -0.005989 0.045779 -0.140461 0.051001 -0.008023 0.057119 0.105333 -0.041070 0.056032 0.043639 0.005861 -0.135100 0.031090 0.080471 0.052317 0.094827 0.013607 0.010504 \n0.072512 -0.137291 0.011413 0.088910 -0.019071 0.013112 0.008567 -0.053457 0.054968 0.016224 0.053233 -0.146438 0.132175 0.058274 -0.003809 -0.193429 -0.040454 -0.064533 0.180121 0.012250 0.057831 0.068713 -0.038240 -0.016466 0.096254 0.175188 -0.028450 0.007575 -0.066963 0.150497 -0.031323 -0.160149 \n0.031363 -0.146475 -0.011004 -0.012087 -0.158957 0.001794 -0.019511 -0.025038 0.063317 -0.004212 0.076995 -0.128801 0.006133 -0.025127 -0.006154 -0.067455 -0.042154 -0.019369 0.000193 -0.026607 0.080677 -0.005104 -0.063362 -0.022910 0.100988 0.009610 -0.099780 -0.099656 0.127043 -0.035259 -0.037352 -0.113167 \n0.024330 -0.135014 -0.013209 -0.080932 -0.210031 -0.025286 -0.022320 -0.011935 0.071001 -0.003927 0.042246 -0.125299 -0.045513 -0.111937 0.024484 0.033844 -0.000957 -0.024363 -0.031085 0.044868 0.080756 -0.055746 -0.114452 0.066711 0.061396 -0.071439 -0.012135 -0.152630 0.098979 -0.082951 -0.005477 0.031251 \n0.022502 -0.137697 0.003983 -0.079085 -0.208139 -0.028587 -0.030198 -0.013558 0.077290 0.019795 0.026102 -0.115821 -0.056553 -0.114366 0.013486 0.045295 -0.002441 0.015895 -0.015269 0.028028 0.069668 -0.063182 -0.074773 0.053007 0.059592 -0.093814 0.020831 -0.138663 0.058647 -0.095930 0.014654 0.014197 \n0.024298 -0.134278 0.018335 -0.086284 -0.208451 -0.030676 -0.022217 -0.003789 0.063934 0.025357 0.039980 -0.114782 -0.077190 -0.119616 0.009432 0.051973 0.008737 0.024815 -0.008834 0.044322 0.056599 -0.096705 -0.081728 0.037471 0.088602 -0.144553 0.032510 -0.080806 0.085975 -0.068531 0.022631 0.064358 \n0.029340 -0.148509 0.045892 -0.030155 -0.155587 -0.002411 -0.013070 -0.017176 0.060092 0.051607 0.066402 -0.091139 -0.048012 -0.051429 -0.019696 -0.018504 -0.032169 0.073233 0.095371 0.014101 0.013756 -0.140295 -0.012563 -0.065664 0.075532 -0.131125 0.043895 -0.095042 -0.001756 0.062797 -0.003969 0.083090 \n0.060310 -0.134113 0.094160 0.054789 -0.026111 0.013977 0.001538 -0.032457 0.058817 0.080984 0.047657 -0.104424 0.023708 0.043596 -0.026622 -0.122894 -0.014581 0.102399 0.295984 0.025604 -0.067005 -0.091774 0.007955 -0.038755 0.049748 -0.023367 0.043189 0.107814 -0.172528 0.248333 0.055082 0.027686 \n0.136829 0.039960 0.075643 0.168885 0.020216 0.017213 -0.018749 -0.034999 0.068867 0.057465 0.019663 -0.019016 -0.002685 0.107694 -0.043188 0.028189 -0.021960 0.093620 0.018062 -0.026893 -0.113341 -0.187892 -0.002560 -0.076924 -0.047809 -0.047455 -0.038833 0.027537 -0.085740 0.189210 -0.024645 0.134510 \n0.165775 0.117253 0.065112 0.221657 0.045285 0.026546 -0.009950 -0.054183 0.060512 0.041492 -0.049197 0.034561 -0.005005 0.057993 -0.028476 0.058966 -0.043845 0.027647 -0.072087 -0.082587 -0.085057 -0.143605 -0.058051 -0.149314 -0.065285 -0.064892 0.023272 -0.047588 0.007050 -0.039540 -0.034017 0.018223 \n0.165721 0.128775 0.053509 0.228408 0.048509 0.029615 -0.006518 -0.060629 0.058221 0.024428 -0.071743 0.038403 0.008890 0.033221 -0.029062 0.049402 -0.058452 -0.028976 -0.091098 -0.092588 -0.040752 -0.067291 -0.079845 -0.163841 -0.088038 -0.045471 0.006020 -0.070204 0.035926 -0.076724 -0.050694 -0.050887 \n0.162148 0.120771 0.046388 0.227986 0.052372 0.032400 -0.007894 -0.067333 0.057781 0.011350 -0.061779 0.019185 0.021963 0.053527 -0.044290 0.034493 -0.050319 -0.074480 -0.115841 -0.111889 -0.004818 -0.012681 -0.110647 -0.131176 -0.020146 -0.028971 -0.032063 -0.084223 0.052852 -0.062778 -0.055131 -0.098503 \n0.131578 0.043575 0.030666 0.180198 0.036295 0.024791 -0.007223 -0.070621 0.053016 0.003760 -0.013318 -0.055389 0.046220 0.088279 -0.040049 -0.050164 -0.036610 -0.140819 -0.067115 -0.123906 0.042056 0.073554 -0.131197 -0.070551 0.122038 0.029161 -0.171915 -0.065907 0.006511 0.020866 -0.101948 -0.097081 \n0.074461 -0.113365 0.007150 0.067401 -0.036676 0.008029 -0.009329 -0.057219 0.058733 0.016038 0.060618 -0.139140 0.113244 0.059722 0.001184 -0.169334 -0.054120 -0.086160 0.123964 -0.004887 0.047092 0.051497 -0.013632 -0.056937 0.086719 0.157158 -0.070914 0.059410 0.006217 0.214971 0.001671 -0.136829 \n0.041866 -0.165721 0.001606 -0.039447 -0.119067 -0.008686 -0.065758 -0.060394 0.087157 0.037837 0.015322 -0.097187 0.031724 -0.063058 0.016150 -0.000324 -0.075988 0.080251 -0.120586 -0.137752 -0.054140 0.013945 -0.071586 -0.047275 -0.022536 0.013692 0.023529 -0.036043 0.035725 -0.095918 -0.056874 -0.101299 \n0.038858 -0.160086 0.009436 -0.048868 -0.129877 -0.009274 -0.068853 -0.049718 0.092935 0.058714 0.000446 -0.088443 0.006775 -0.082693 0.012952 0.016964 -0.080665 0.098396 -0.105550 -0.132766 -0.068165 -0.000583 -0.033584 -0.046900 -0.046502 -0.046776 0.029578 -0.014343 0.045185 -0.091982 -0.051679 -0.078034 \n0.039583 -0.165223 0.027515 -0.039731 -0.121198 -0.012527 -0.063539 -0.052489 0.087148 0.076692 0.012806 -0.075131 -0.001257 -0.076326 -0.000558 0.016681 -0.060029 0.127544 -0.082959 -0.136985 -0.083566 -0.041841 -0.023861 -0.061765 0.009553 -0.033035 0.109089 0.034466 0.057395 -0.081732 -0.036234 -0.049454 \n0.070008 -0.111410 0.084019 0.045810 -0.045064 0.006408 -0.008808 -0.039047 0.058885 0.074756 0.056429 -0.087096 0.024368 0.035927 -0.043105 -0.110004 -0.023982 0.063944 0.223904 -0.000855 -0.064145 -0.086639 -0.010714 -0.109535 0.061439 -0.005413 0.019057 0.103042 -0.087952 0.231598 -0.031542 0.046849 \n0.147675 0.128069 0.051954 0.169378 -0.010820 0.003256 -0.005987 0.018413 0.034732 -0.019494 0.008266 -0.038131 -0.093810 0.016749 0.012485 0.068588 0.050721 0.030006 0.068914 0.235135 0.130319 -0.148716 -0.156445 -0.012208 0.019202 -0.057775 0.077501 0.007534 0.032232 -0.015861 0.100202 0.016602 \n0.147804 0.140475 0.046997 0.170300 -0.015185 0.003867 0.000131 0.016849 0.037335 -0.031348 -0.021016 -0.030106 -0.085808 -0.016604 0.015121 0.050683 0.056599 -0.016216 0.062091 0.240386 0.167002 -0.078811 -0.170643 -0.006854 -0.017745 -0.026654 0.037547 0.009172 0.086550 -0.061422 0.053061 -0.006055 \n0.144505 0.133797 0.044283 0.164995 -0.009293 0.009459 0.000942 0.011598 0.030590 -0.040002 -0.006531 -0.038797 -0.077355 -0.004494 -0.004566 0.028583 0.075314 -0.047409 0.040042 0.216351 0.181335 -0.039848 -0.200977 -0.002583 0.045742 0.006846 -0.005849 -0.020927 0.103800 -0.057377 0.058855 -0.047126 \n-0.127670 -0.019395 -0.152701 0.147038 -0.163494 0.009643 -0.051889 0.073861 0.124106 0.077093 -0.154740 -0.016459 -0.143296 -0.054188 -0.004884 0.132681 0.000283 -0.179110 -0.030697 -0.152982 0.221864 -0.133961 0.067400 0.022748 0.068347 0.322849 0.031875 0.131724 -0.204692 -0.040826 -0.214847 0.189689 \n-0.051097 -0.020429 -0.117043 0.128734 -0.087860 0.000650 -0.113603 0.108341 0.110325 0.067408 -0.055845 0.058153 -0.139098 -0.005033 -0.005046 0.062767 0.080744 -0.087207 -0.066172 -0.048201 0.143057 -0.111192 0.087453 -0.011149 0.165013 0.089565 -0.052520 0.143784 -0.102700 0.061337 -0.026812 0.046612 \n0.017957 -0.018466 -0.093775 0.047256 -0.021490 -0.051664 -0.081542 0.089379 0.118252 0.046450 0.045187 0.126112 -0.085919 -0.006485 0.060210 0.032938 0.042651 -0.050875 -0.131389 0.023528 0.067880 -0.132635 0.053977 -0.124419 0.258792 -0.053130 -0.053037 0.049822 -0.101081 0.086182 0.167605 -0.036659 \n0.076150 -0.023624 -0.078167 -0.008981 0.054321 -0.102460 -0.048956 0.064253 0.142423 0.031372 0.126763 0.116783 -0.003471 0.013866 0.123614 0.046489 0.107946 0.005721 -0.085120 -0.010597 0.029402 -0.108083 0.183305 -0.098704 0.111480 -0.138063 -0.088210 -0.041771 -0.017150 0.074847 0.157693 -0.097298 \n0.130211 -0.030104 -0.052876 -0.015825 0.125251 -0.167935 -0.058190 0.015453 0.159998 0.031845 0.139120 0.041757 0.029446 0.021507 0.216902 0.042933 0.145540 0.227404 -0.097266 0.027462 0.096923 -0.020958 0.326335 0.056042 -0.079156 -0.032904 -0.177023 0.067651 0.148061 -0.011254 -0.047050 -0.062333 \n0.160100 -0.020591 0.073028 -0.084279 0.107579 -0.167858 0.024773 -0.052515 0.330081 0.045389 0.047619 0.054216 -0.159717 0.049050 0.074438 -0.071928 0.073000 0.077855 -0.079403 -0.005745 0.115337 0.027314 0.059227 0.127195 -0.118726 0.105137 0.018601 0.089352 -0.073859 -0.050048 -0.056527 0.040262 \n0.118875 0.005525 0.134449 -0.069268 0.076843 -0.057295 -0.003943 -0.050301 0.286855 -0.017000 0.122783 0.044957 -0.022381 0.014952 0.021050 -0.125921 0.043913 -0.079991 -0.034488 -0.077230 0.047624 -0.072228 0.008826 0.224974 -0.167330 0.029708 -0.006486 -0.013198 -0.152282 -0.011729 0.110829 -0.088514 \n0.047410 0.021661 0.161183 0.007024 0.010465 -0.005076 -0.042547 -0.006884 0.187181 0.015920 0.096774 0.026353 0.052461 -0.068924 0.031601 -0.125633 0.002667 -0.068815 -0.102915 -0.088212 0.047977 -0.035176 -0.014703 0.108365 -0.218496 -0.020850 0.024215 0.041247 -0.078673 0.068406 0.091879 -0.137499 \n-0.037270 0.042104 0.191512 0.089159 -0.061427 0.064065 -0.070638 0.021728 0.009123 0.080157 0.027510 -0.007857 0.181834 -0.111970 -0.066892 -0.117558 0.170382 -0.004936 -0.090062 -0.088847 0.137662 0.024059 0.036565 0.044429 -0.162578 -0.106512 0.079351 0.176221 0.020320 0.069439 -0.023100 -0.160700 \n-0.127659 0.052831 0.218080 0.149029 -0.180044 0.153963 -0.040584 0.044709 -0.113100 0.127123 -0.064102 -0.061822 0.324255 -0.207728 -0.079543 -0.104631 0.330930 -0.004692 -0.122172 0.015971 0.201722 -0.006146 0.123772 -0.056887 -0.002298 -0.148188 -0.047997 0.212921 -0.003430 -0.067818 -0.126340 0.094468 \n0.100186 -0.056201 0.014654 -0.027183 0.059819 -0.079554 -0.075739 0.015997 0.041974 0.016190 -0.029544 0.058843 -0.004355 0.065751 0.072960 0.023367 0.002651 -0.077708 -0.082110 0.020636 0.120327 0.021310 0.178826 0.017509 0.060449 0.017252 0.207272 -0.220074 0.255053 0.194187 -0.104346 0.080808 \n0.134302 -0.074849 -0.015916 -0.047774 0.133455 -0.024532 -0.023605 0.046369 0.009748 0.029096 -0.025644 -0.016988 0.052106 0.065170 0.023676 -0.008297 0.007731 -0.082746 -0.050340 -0.003574 0.095542 0.000070 0.077049 0.005387 0.095145 -0.047716 0.175535 -0.154723 0.145047 0.079484 -0.095895 0.064032 \n0.177157 -0.088072 -0.044813 -0.066027 0.207154 0.014408 0.022835 0.081817 -0.016908 0.045492 -0.052223 -0.093208 0.092817 0.065713 -0.017032 -0.036526 0.068798 -0.063460 -0.035263 -0.007451 0.064335 -0.039349 0.038344 0.014502 0.121995 -0.030278 0.168708 -0.047178 0.076399 -0.042626 -0.075266 0.051585 \n0.213772 -0.098660 -0.072712 -0.095885 0.263880 0.057031 0.068645 0.127569 -0.046042 0.071869 -0.081866 -0.152551 0.141280 0.087141 -0.040169 -0.064121 0.109790 -0.075835 -0.010199 -0.018595 0.008590 -0.094326 -0.002782 0.053050 0.140328 -0.042802 0.097662 0.010519 -0.005431 -0.161484 -0.033603 0.067955 \n0.111146 -0.052125 -0.039589 -0.056411 0.086749 -0.038454 -0.029609 0.022565 0.017300 0.010442 -0.148171 -0.077020 0.092748 -0.069315 -0.135127 -0.090974 0.048732 -0.056533 0.066270 0.111576 -0.007348 0.004381 0.048222 0.071304 0.086447 -0.012128 0.038070 0.225025 0.169355 -0.076066 -0.065222 -0.034644 \n0.119518 -0.087339 -0.028727 -0.033307 0.159843 0.030709 -0.022978 0.042531 0.005707 0.031433 -0.094033 -0.125201 0.077877 -0.053727 -0.084565 0.014892 -0.010216 0.038907 0.021884 0.091222 -0.040355 0.017035 -0.075761 0.039488 0.085446 -0.044226 -0.121973 0.178273 -0.005398 -0.091853 0.035171 -0.009343 \n0.138929 -0.109301 -0.038418 -0.027398 0.194737 0.068161 0.004518 0.036800 -0.010392 0.052822 -0.055931 -0.143842 0.076298 -0.031117 -0.016929 0.110291 -0.086218 0.092566 -0.012656 0.027910 -0.043641 -0.017826 -0.117866 0.072061 -0.060839 0.087307 -0.102415 0.097614 -0.087840 -0.103232 0.044129 0.050442 \n0.123241 -0.082695 -0.052528 -0.018814 0.152091 0.026223 -0.018590 0.038210 -0.006586 0.090292 -0.044708 -0.134971 0.110901 0.015608 0.022078 0.154558 -0.002515 0.059595 0.018546 -0.085825 -0.043967 0.037662 -0.056542 0.037309 -0.035739 0.012674 -0.177575 -0.032934 -0.096480 -0.043342 -0.016870 0.061163 \n0.109359 -0.058783 -0.044116 -0.013742 0.100037 -0.018586 -0.056347 0.019161 -0.024171 0.095644 -0.041061 -0.114625 0.169554 0.027434 0.073217 0.195601 0.088374 -0.003206 0.051965 -0.124523 -0.021193 0.149033 -0.004197 0.008604 -0.020540 -0.091475 -0.085112 -0.024449 -0.028010 0.040116 -0.117547 0.081288 \n-0.048819 -0.058496 -0.182944 0.159195 -0.060102 0.037492 -0.059687 -0.161319 -0.084838 0.032177 0.055535 0.056391 0.016070 0.046550 0.013412 0.017124 -0.055227 -0.007413 0.020739 -0.020339 0.042022 -0.027660 0.058063 0.091148 0.023449 0.121671 0.086138 0.171646 0.234981 -0.028792 -0.085115 -0.184425 \n-0.016787 -0.034199 -0.155580 0.119062 -0.077118 0.018045 -0.025200 -0.142578 -0.033074 0.039494 0.029030 0.026100 0.058529 0.065274 0.072438 0.102829 0.013954 -0.015913 0.016131 0.066091 -0.080928 -0.069103 0.049484 0.180052 0.021632 -0.055251 -0.060621 0.102871 0.076161 0.029996 0.064714 -0.158486 \n-0.006105 -0.014942 -0.132981 0.095468 -0.053630 0.005874 -0.013353 -0.132733 -0.014940 0.052133 0.030401 -0.004328 0.059155 0.026928 0.061046 0.139171 0.040427 -0.015318 0.072145 0.076842 -0.100090 -0.048184 0.076674 0.148652 -0.042713 -0.173253 -0.045070 0.040911 0.030939 0.057554 0.057057 -0.160466 \n-0.000914 -0.014861 -0.100662 0.059721 -0.039040 -0.008775 -0.002506 -0.130991 -0.016230 0.014989 -0.010423 -0.076984 0.085757 -0.069931 0.104317 0.234857 0.011926 0.001686 0.020114 0.064549 -0.079026 -0.073036 -0.042226 0.082122 -0.008445 0.037548 0.087042 -0.041830 -0.063469 0.009221 0.006322 -0.059557 \n-0.001723 -0.028185 -0.127765 0.112066 -0.038481 -0.005842 -0.025715 -0.139761 -0.011786 0.018908 -0.016597 -0.035174 0.032677 0.015458 0.122420 0.175309 0.035396 -0.002847 0.055646 0.078584 -0.100762 -0.028384 0.010639 0.062880 0.000659 0.032393 0.066381 0.025923 0.038935 0.050735 -0.037601 -0.015488 \n-0.007857 -0.048874 -0.149596 0.129223 -0.045242 0.020073 -0.024593 -0.157734 -0.017308 0.016953 -0.014989 -0.013847 0.039950 0.051284 0.121690 0.136643 0.012716 0.007969 0.011594 0.069250 -0.081961 -0.028648 0.015288 0.105783 0.056717 0.093682 -0.020099 0.136615 0.089729 0.018129 -0.041058 -0.017297 \n0.014968 -0.022615 0.108531 -0.030625 0.033584 -0.026701 0.000384 -0.139020 0.065896 0.020416 -0.069814 -0.024952 0.029031 -0.051627 -0.044864 0.097390 0.043490 -0.080865 -0.133349 0.062214 -0.026677 0.050424 -0.031714 0.139060 -0.040284 0.115814 0.245962 0.040927 0.082200 0.160903 -0.103011 0.123227 \n-0.003093 -0.005830 0.123378 -0.003621 -0.017785 0.028896 -0.041486 -0.168737 0.037322 -0.001863 -0.072179 -0.010234 0.003025 -0.014615 -0.059697 0.023657 0.094080 -0.076385 -0.101919 0.113006 -0.037782 0.039741 0.076403 0.133884 0.015800 0.011606 0.044469 -0.049463 0.063026 0.076831 0.046752 -0.015511 \n-0.016304 -0.013787 0.139835 0.007812 -0.004980 0.066699 -0.038946 -0.189361 0.018357 -0.009476 -0.057374 -0.030800 0.008679 0.021762 -0.061868 0.026312 0.095255 -0.028445 -0.065848 0.101957 0.015820 0.057287 0.060886 0.155097 0.012816 -0.005557 -0.095032 -0.119423 -0.014735 0.003787 0.123841 -0.068439 \n-0.036090 -0.038522 0.171100 0.027585 -0.009572 0.110569 -0.042383 -0.189867 -0.027602 -0.033460 -0.046180 -0.036045 -0.000233 0.009186 -0.052105 0.015946 0.013302 -0.021382 -0.006806 0.096229 0.066533 0.067168 -0.000735 0.122342 -0.048788 0.074441 -0.106635 -0.167254 -0.063117 -0.054523 0.038987 -0.009327 \n-0.007205 -0.029936 0.142602 -0.002144 0.011448 0.054702 -0.018150 -0.173762 0.019666 -0.001295 -0.089224 -0.061806 -0.013648 -0.005145 -0.029354 0.093278 0.087790 -0.031848 -0.047791 0.095654 -0.047167 0.039894 0.009016 0.113162 -0.035211 0.099719 -0.058923 -0.126191 -0.041066 0.055719 0.044431 0.093278 \n0.002437 -0.023596 0.126411 -0.011106 0.005589 0.017088 -0.021015 -0.162810 0.058199 0.017440 -0.099544 -0.047196 -0.010311 -0.022562 -0.032469 0.090306 0.081802 -0.069768 -0.102428 0.094456 -0.122120 0.022061 -0.016397 0.068514 0.014273 0.090445 0.092085 -0.066165 -0.014547 0.142070 -0.011118 0.162910 \n0.029334 0.223392 -0.120937 -0.069565 -0.102310 -0.004731 -0.103222 -0.036828 -0.032194 -0.011997 0.164838 -0.040399 0.146021 0.143341 -0.144096 0.030003 -0.014571 0.040774 -0.000801 -0.036108 -0.025547 0.000958 0.036242 0.092272 0.021962 -0.120473 0.114638 0.031023 -0.009611 0.045476 -0.042213 -0.040690 \n0.094905 0.108778 -0.089173 -0.115939 -0.118836 0.053160 0.014577 0.050393 -0.012452 0.020021 0.087361 -0.010505 -0.004575 0.114162 -0.147850 0.022922 0.001361 -0.077056 -0.036642 -0.005244 0.029675 -0.145528 0.024925 0.009335 -0.054132 0.071855 0.159383 0.043467 0.001204 -0.005838 -0.068893 -0.059814 \n0.123533 0.003770 -0.070594 -0.139415 -0.092773 0.026845 0.087550 0.054032 -0.027141 -0.002838 0.007425 -0.074693 -0.015281 0.007464 -0.050123 0.044907 -0.023390 -0.182981 0.055840 0.123603 0.042441 -0.129995 0.081147 0.014114 -0.162787 -0.003357 -0.020851 0.069466 -0.073562 -0.041971 -0.019639 -0.093585 \n0.115344 -0.010169 -0.032149 -0.142821 -0.088509 0.034877 0.077903 0.037863 -0.030659 -0.018223 0.014628 -0.102351 -0.042293 0.028631 -0.033168 0.105375 0.012114 -0.147790 -0.007362 0.119103 0.043123 -0.046543 0.056739 -0.028301 -0.135385 -0.049352 -0.099956 0.102359 -0.097788 -0.004616 -0.034874 -0.074809 \n0.117257 0.003009 0.011154 -0.169168 -0.079847 0.019249 0.076356 0.010647 -0.051752 0.018442 -0.003119 -0.088213 -0.101739 0.002080 0.000203 0.106894 0.040191 -0.167377 -0.002184 0.137859 0.070513 0.006650 0.060892 -0.136605 -0.082514 -0.051486 -0.098920 0.045837 -0.112219 0.012311 -0.032421 -0.095770 \n0.089285 0.077508 0.019808 -0.178807 -0.089113 0.036306 0.016847 -0.009434 -0.007096 -0.032877 0.055601 -0.101866 -0.036522 0.051645 0.087084 0.045113 0.084132 -0.058205 0.079466 0.148531 0.068842 -0.034318 0.039556 -0.187735 -0.044516 0.086945 0.048514 -0.046501 -0.089197 0.022667 -0.016467 0.026856 \n0.004324 0.198835 0.045991 -0.158336 -0.093425 0.035811 -0.145307 0.002837 -0.009589 -0.125701 0.153856 -0.180990 0.018506 0.112340 0.090892 -0.005788 0.150669 0.106259 0.063352 -0.014873 0.006340 0.065954 -0.032212 -0.026891 0.021048 0.093658 -0.090510 -0.007142 0.080709 0.073971 -0.030469 0.076295 \n0.097750 0.141161 0.026392 -0.068865 -0.046034 0.073752 0.051406 0.000633 -0.014813 -0.044030 -0.015162 -0.073034 -0.095788 -0.063206 0.195831 -0.074314 0.006509 0.142319 -0.013589 -0.074751 0.000003 0.119487 -0.055202 -0.002444 0.006512 0.123531 -0.036318 0.084526 0.136015 0.050117 -0.003169 0.095154 \n0.139474 0.047960 0.027223 0.013219 -0.052381 0.079886 0.185103 0.025478 -0.068963 0.016056 -0.055130 0.005937 -0.120370 -0.186493 0.150029 -0.017434 -0.005442 0.111598 -0.076604 -0.099524 -0.058103 0.100202 -0.035654 0.038830 0.012508 -0.000658 -0.060497 0.066665 0.079722 0.142275 0.012077 0.022504 \n0.135698 0.032853 -0.025995 0.059223 -0.043914 0.100993 0.215069 0.037016 -0.071171 -0.006376 -0.032517 0.010760 -0.065507 -0.148230 0.056919 -0.042133 -0.033954 0.109405 -0.101728 -0.075055 0.005938 0.041755 -0.013549 0.110257 0.039366 0.018071 0.052085 0.056953 0.050230 0.144456 0.021841 0.001465 \n0.134227 0.041096 -0.061485 0.054966 -0.056764 0.084437 0.213343 0.055314 -0.052393 0.011308 -0.027370 0.021602 -0.013330 -0.140458 0.009733 -0.079107 -0.082394 0.100616 -0.025509 -0.086411 0.004174 -0.036076 0.009054 0.186944 -0.031461 0.053258 0.150028 0.014613 0.049660 0.122103 0.020441 0.011679 \n0.091513 0.134030 -0.116428 0.016728 -0.080013 0.082029 0.104084 0.018085 -0.027354 0.032150 0.078124 -0.022941 0.044163 -0.037802 -0.084995 -0.134114 -0.091533 0.133474 -0.008039 -0.109529 -0.007892 -0.148899 0.041573 0.097925 0.048025 0.040445 0.199117 -0.109140 -0.047717 -0.038369 0.062078 -0.039950 \n0.039624 0.253230 -0.100188 -0.082036 -0.064970 0.016263 -0.088788 0.010698 -0.013891 -0.041645 0.138828 -0.069040 0.112394 0.174971 -0.109718 0.055792 -0.043798 0.025729 -0.054612 -0.027360 0.036663 0.001664 -0.042717 0.175052 0.041398 -0.063698 0.045263 0.022938 -0.035608 0.013511 0.027593 -0.009450 \n0.107480 0.009787 -0.060226 -0.083488 -0.074567 0.034945 0.059688 0.035237 -0.019732 -0.013617 -0.023118 -0.014135 0.041612 0.026587 -0.059716 0.051098 -0.073035 -0.121685 -0.039252 -0.051624 -0.049556 -0.068248 0.055507 -0.058828 -0.149640 0.107282 -0.027147 0.087519 0.153781 0.055056 0.036505 -0.031854 \n0.106622 -0.003861 -0.021348 -0.099473 -0.070178 0.052940 0.061288 0.031461 -0.019104 -0.020812 -0.018499 -0.044968 0.000296 0.018823 -0.027740 0.095604 -0.048958 -0.112997 -0.102798 -0.035527 -0.071991 0.001553 0.025803 -0.115849 -0.127057 0.024527 -0.124135 0.145897 0.129750 0.085928 0.040547 -0.017936 \n0.099110 0.010502 0.036882 -0.130805 -0.078845 0.027013 0.053483 0.004597 -0.037911 -0.001205 -0.036378 -0.035327 -0.044486 -0.011252 0.014448 0.110590 -0.005294 -0.106933 -0.100168 -0.008829 -0.039386 0.052912 0.051532 -0.215856 -0.091016 0.055316 -0.098031 0.095330 0.149157 0.121476 0.032213 -0.016403 \n0.028004 0.226894 0.023564 -0.130075 -0.083078 0.026565 -0.107154 -0.001028 -0.031965 -0.082441 0.154939 -0.156561 0.011600 0.088391 0.059746 -0.043768 0.117637 0.096381 0.031384 -0.037298 -0.019471 -0.011911 -0.082806 -0.023826 -0.035251 0.152668 0.054600 0.036817 0.086273 0.096746 -0.042278 0.077595 \n0.134031 0.066380 0.033211 -0.032357 -0.052881 0.055878 0.125886 0.036614 -0.086323 -0.015670 -0.071590 0.038155 -0.125581 -0.112508 0.087640 0.043625 0.069072 0.062524 -0.018971 0.019054 -0.005686 0.107858 0.030051 0.104346 0.099672 -0.109073 -0.122930 -0.020258 -0.095912 0.104783 -0.177058 -0.071379 \n0.136503 0.052062 -0.025896 0.007574 -0.042908 0.068754 0.150283 0.049774 -0.067584 -0.033491 -0.036563 0.046275 -0.076289 -0.108802 0.035446 -0.013211 0.035519 0.074173 0.001881 0.011113 0.029676 0.032394 0.039140 0.168346 0.109882 -0.092465 -0.106862 -0.037770 -0.143106 0.047406 -0.169767 -0.087501 \n0.128717 0.065942 -0.069026 0.010173 -0.058821 0.055130 0.146527 0.062138 -0.051715 -0.023275 -0.042414 0.062661 -0.040407 -0.097958 -0.000170 -0.056738 0.005825 0.052625 0.081622 0.015050 0.039520 -0.053590 0.084135 0.214255 0.067782 -0.036374 -0.005244 -0.128133 -0.144167 0.012225 -0.152893 -0.083695 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n32\n6\n440.568563 348.267724 258.176898 158.822108 129.944287 110.045102 74.920301 64.103548 54.641760 39.545215 36.676344 31.215370 29.972900 22.199493 20.407369 17.614554 12.651972 10.796969 9.472633 9.060509 7.384158 5.845468 4.290567 3.094468 2.205294 2.103393 1.662684 1.186149 0.669309 0.585443 0.354509 0.307398 \n"
  },
  {
    "path": "FaceLivenessDetection/model/pdms/In-the-wild_aligned_PDM_68.txt",
    "content": "# The mean values of the components (in mm)\n204\n1\n6\n-73.393523 \n-72.775014 \n-70.533638 \n-66.850058 \n-59.790187 \n-48.368973 \n-34.121101 \n-17.875411 \n0.098749 \n17.477031 \n32.648966 \n46.372358 \n57.343480 \n64.388482 \n68.212038 \n70.486405 \n71.375822 \n-61.119406 \n-51.287588 \n-37.804800 \n-24.022754 \n-11.635713 \n12.056636 \n25.106256 \n38.338588 \n51.191007 \n60.053851 \n0.653940 \n0.804809 \n0.992204 \n1.226783 \n-14.772472 \n-7.180239 \n0.555920 \n8.272499 \n15.214351 \n-46.047290 \n-37.674688 \n-27.883856 \n-19.648268 \n-28.272965 \n-38.082418 \n19.265868 \n27.894191 \n37.437529 \n45.170805 \n38.196454 \n28.764989 \n-28.916267 \n-17.533194 \n-6.684590 \n0.381001 \n8.375443 \n18.876618 \n28.794412 \n19.057574 \n8.956375 \n0.381549 \n-7.428895 \n-18.160634 \n-24.377490 \n-6.897633 \n0.340663 \n8.444722 \n24.474473 \n8.449166 \n0.205322 \n-7.198266 \n-29.801432 \n-10.949766 \n7.929818 \n26.074280 \n42.564390 \n56.481080 \n67.246992 \n75.056892 \n77.061286 \n74.758448 \n66.929021 \n56.311389 \n42.419126 \n25.455880 \n6.990805 \n-11.666193 \n-30.365191 \n-49.361602 \n-58.769795 \n-61.996155 \n-61.033399 \n-56.686759 \n-57.391033 \n-61.902186 \n-62.777713 \n-59.302347 \n-50.190255 \n-42.193790 \n-30.993721 \n-19.944596 \n-8.414541 \n2.598255 \n4.751589 \n6.562900 \n4.661005 \n2.643046 \n-37.471411 \n-42.730510 \n-42.711517 \n-36.754742 \n-35.134493 \n-34.919043 \n-37.032306 \n-43.342445 \n-43.110822 \n-38.086515 \n-35.532024 \n-35.484289 \n28.612716 \n22.172187 \n19.029051 \n20.721118 \n19.035460 \n22.394109 \n28.079924 \n36.298248 \n39.634575 \n40.395647 \n39.836405 \n36.677899 \n28.677771 \n25.475976 \n26.014269 \n25.326198 \n28.323008 \n30.596216 \n31.408738 \n30.844876 \n47.667532 \n45.909403 \n44.842580 \n43.141114 \n38.635298 \n30.750622 \n18.456453 \n3.609035 \n-0.881698 \n5.181201 \n19.176563 \n30.770570 \n37.628629 \n40.886309 \n42.281449 \n44.142567 \n47.140426 \n14.254422 \n7.268147 \n0.442051 \n-6.606501 \n-11.967398 \n-12.051204 \n-7.315098 \n-1.022953 \n5.349435 \n11.615746 \n-13.380835 \n-21.150853 \n-29.284036 \n-36.948060 \n-20.132003 \n-23.536684 \n-25.944448 \n-23.695741 \n-20.858157 \n7.037989 \n3.021217 \n1.353629 \n-0.111088 \n-0.147273 \n1.476612 \n-0.665746 \n0.247660 \n1.696435 \n4.894163 \n0.282961 \n-1.172675 \n-2.240310 \n-15.934335 \n-22.611355 \n-23.748437 \n-22.721995 \n-15.610679 \n-3.217393 \n-14.987997 \n-22.554245 \n-23.591626 \n-22.406106 \n-15.121907 \n-4.785684 \n-20.893742 \n-22.220479 \n-21.025520 \n-5.712776 \n-20.671489 \n-21.903670 \n-20.328022 \n# The principal components (eigenvectors) of identity or combined identity and expression model\n204\n34\n6\n-0.007395 -0.093690 0.039362 0.204443 -0.104698 0.033568 -0.090173 0.010170 -0.042341 0.104375 0.032695 0.038750 0.064385 -0.037025 0.058377 0.032457 -0.100005 -0.082042 -0.053440 0.008782 -0.027164 -0.000368 -0.129614 0.035436 -0.062685 -0.075349 0.140764 -0.032290 -0.115829 -0.037865 0.068590 0.008886 -0.066442 0.259211 \n-0.002553 -0.075344 0.037127 0.201967 -0.069124 0.041645 -0.100939 0.018352 0.006598 0.081569 0.004894 0.038886 0.050631 0.056656 0.055353 -0.028457 -0.022518 -0.089693 -0.079196 0.010851 -0.017583 0.015095 -0.077834 -0.000944 -0.104255 -0.060338 0.106169 -0.065799 -0.067068 -0.051588 0.080490 0.063152 -0.047531 0.178216 \n-0.002097 -0.055385 0.025705 0.215785 -0.026274 0.053548 -0.086364 0.041926 0.035784 0.033485 -0.014602 0.049999 0.031950 0.125201 0.045372 -0.064200 0.070073 -0.074313 -0.083942 -0.007566 -0.003666 0.034226 -0.018354 -0.011639 -0.084633 -0.039431 0.064057 -0.056515 -0.046926 -0.074699 0.073477 0.074109 -0.054882 0.046675 \n-0.005533 -0.035821 0.019787 0.226957 0.030415 0.059508 -0.051058 0.057386 0.023240 -0.025487 -0.013088 0.043330 0.025141 0.113119 0.017370 -0.071064 0.108140 -0.049138 -0.043417 -0.065375 0.012959 0.070483 0.075536 -0.035685 -0.005847 0.012618 0.040297 -0.049743 -0.061354 -0.087164 0.033762 0.048771 -0.096563 -0.045189 \n-0.006914 0.011987 0.030022 0.205560 0.099633 0.072384 -0.008313 0.060244 -0.006584 -0.104943 -0.018036 0.032806 0.029879 0.068434 -0.043721 -0.052564 0.077505 -0.062192 0.026865 -0.122834 -0.001529 0.064443 0.160557 -0.036750 0.124476 0.072641 0.048609 -0.043443 -0.060729 -0.040443 -0.050540 0.050509 -0.118886 -0.146867 \n-0.004182 0.064263 0.036886 0.149341 0.158261 0.075501 0.030568 0.067074 -0.040268 -0.167116 -0.020230 0.029360 0.046726 0.033410 -0.121685 -0.004528 -0.017505 -0.050390 0.063237 -0.133203 -0.070794 0.005133 0.178032 -0.002768 0.153446 0.105966 0.061693 0.011010 -0.027442 0.001944 -0.103967 0.045708 -0.083197 -0.172889 \n0.016954 0.088125 0.034199 0.081242 0.170872 0.048964 0.063434 0.083842 -0.058188 -0.164769 -0.012135 0.002128 0.084787 -0.009691 -0.136231 0.068411 -0.091616 0.042046 0.053339 -0.068859 -0.141834 -0.040710 0.017020 0.034007 0.053187 0.096749 0.068416 0.075079 0.038728 0.063588 -0.109581 0.007737 0.033105 -0.152075 \n0.021733 0.081042 0.015310 0.029492 0.112212 0.012959 0.065003 0.095565 -0.047228 -0.120559 -0.022904 -0.051461 0.036411 -0.036990 -0.101765 0.150918 -0.102123 0.163128 0.047199 0.037063 -0.223718 -0.065303 -0.149191 -0.017823 -0.134138 0.084419 0.010718 0.087970 0.043030 0.040099 -0.068487 -0.008773 0.077035 -0.082281 \n0.024713 0.084952 0.002319 -0.002792 0.028194 -0.016856 0.036083 0.087381 -0.020743 -0.024386 -0.027268 -0.091654 -0.009025 -0.052124 -0.033407 0.168353 -0.061447 0.244847 0.024587 0.064221 -0.161138 0.020993 -0.164584 -0.068179 -0.181775 0.087509 -0.068202 0.059078 -0.004250 -0.001472 -0.031248 -0.049011 -0.019415 0.022163 \n0.025404 0.095704 -0.013447 -0.036864 -0.064015 -0.035962 0.001144 0.050101 0.006172 0.084003 -0.015860 -0.102295 -0.028308 -0.053076 0.017520 0.110370 -0.009494 0.248830 -0.017769 0.064655 -0.062487 0.133872 -0.077193 -0.077102 -0.104610 0.084923 -0.116710 -0.000424 -0.001453 -0.001504 -0.004986 -0.072792 -0.151917 0.063339 \n0.027234 0.088446 -0.037011 -0.090962 -0.124015 -0.052844 -0.020061 0.017974 0.031824 0.138013 -0.009523 -0.093892 -0.061812 -0.016350 0.043025 0.034106 0.036403 0.177560 -0.066137 0.039288 0.041972 0.145398 -0.004524 -0.021113 0.025045 0.065780 -0.102128 -0.061053 0.010043 -0.018688 0.018733 -0.002990 -0.240304 0.007274 \n0.033301 0.051083 -0.050161 -0.137239 -0.130410 -0.078352 -0.030467 -0.016581 0.042916 0.153230 -0.008295 -0.048519 -0.056020 -0.017449 0.051644 -0.021078 0.049456 0.042549 -0.075780 0.051205 0.057200 0.117965 0.058462 0.078890 0.121853 0.027311 -0.037081 -0.082100 0.013948 0.019188 0.029703 0.076102 -0.243643 -0.067711 \n0.034561 -0.024817 -0.037181 -0.171731 -0.091823 -0.080914 -0.018022 -0.019280 0.055534 0.112038 -0.006388 0.000380 -0.027767 -0.031689 0.027915 -0.012644 0.004351 -0.072270 -0.053990 0.028620 0.011428 0.077628 0.073278 0.159948 0.096141 0.006855 0.036568 -0.013290 -0.001587 0.033748 0.052795 0.164287 -0.166678 -0.098685 \n0.031311 -0.094373 -0.015266 -0.181991 -0.032285 -0.067979 0.020822 -0.028457 0.050194 0.060652 0.006169 0.060618 0.005717 -0.047184 0.006512 0.012425 -0.059877 -0.141325 -0.029145 -0.010906 -0.069894 0.032082 0.054382 0.151384 0.041519 0.026929 0.076049 0.067107 -0.027885 0.040313 0.041582 0.194576 -0.086531 -0.080338 \n0.030327 -0.127857 -0.008012 -0.166922 0.025066 -0.062660 0.063753 -0.029802 0.044933 0.028298 0.025152 0.109179 0.013585 -0.043385 0.003918 0.007538 -0.080941 -0.141969 0.011067 -0.055727 -0.099322 -0.018025 0.009874 0.065510 -0.019589 0.084273 0.059580 0.099232 -0.026102 0.043042 0.023322 0.151827 -0.031702 -0.023000 \n0.030239 -0.141766 -0.020490 -0.154724 0.073176 -0.066098 0.076339 -0.045120 0.049403 -0.014474 0.024782 0.109864 0.005943 -0.008921 0.001482 -0.008304 -0.060453 -0.100507 0.030769 -0.093919 -0.042422 -0.045051 -0.014060 -0.020183 -0.093279 0.134797 0.006048 0.040717 -0.038709 0.039630 0.006137 0.076303 0.021244 0.014680 \n0.030493 -0.158938 -0.031460 -0.156567 0.120023 -0.070626 0.084879 -0.065759 0.063746 -0.047728 -0.002344 0.094855 -0.013995 0.014159 0.011125 -0.034394 -0.064702 -0.055871 0.041269 -0.110361 0.045722 -0.064289 -0.013213 -0.104140 -0.133226 0.183607 -0.037284 0.002311 -0.041808 0.033510 -0.034315 0.012710 0.065609 0.046794 \n-0.029307 -0.000612 0.006003 0.066897 -0.126329 0.008282 0.106455 -0.058070 -0.127455 0.112217 0.028721 -0.008227 0.023123 -0.184660 -0.000131 0.060814 -0.038192 0.061802 0.055924 -0.086767 -0.011372 0.116214 0.039681 -0.047083 0.046626 0.042705 0.011194 -0.002237 0.023832 0.021378 0.074731 -0.040608 -0.025003 0.203421 \n-0.038458 0.020813 -0.004500 0.021759 -0.086203 0.017004 0.123118 -0.051398 -0.154096 0.048594 0.160783 0.035847 -0.105209 -0.131283 -0.034334 0.088202 -0.022053 0.065794 0.043514 -0.164773 0.038562 0.221823 -0.008980 0.076251 -0.067806 0.014541 0.027230 -0.014379 -0.016754 -0.010835 0.026126 -0.010414 0.029183 0.058614 \n-0.021490 0.036216 -0.005865 0.020024 -0.060804 0.026512 0.126241 -0.083197 -0.120419 0.032472 0.187630 -0.015555 -0.159327 -0.011903 -0.087082 0.079345 -0.061540 0.015194 0.062573 -0.039469 0.032277 0.191416 0.026454 0.082398 -0.056523 -0.017131 0.027510 -0.008610 0.004494 -0.034043 -0.017450 0.006765 0.078634 -0.036122 \n0.000867 0.042636 0.003104 0.029552 -0.036234 0.016402 0.123844 -0.126971 -0.075012 0.060293 0.148833 -0.081953 -0.173218 0.088994 -0.136465 0.063644 -0.092909 -0.034989 0.083554 0.107321 0.022452 0.121649 0.095422 0.064093 -0.044127 -0.041514 -0.001734 -0.007934 0.040275 -0.042178 -0.037676 0.021143 0.091871 -0.056272 \n0.024120 0.058528 0.006018 0.028610 -0.012243 0.008813 0.097121 -0.159602 -0.017056 0.077811 0.087002 -0.120528 -0.150197 0.184860 -0.180434 0.040369 -0.097894 -0.042266 0.075094 0.203623 0.039492 0.033806 0.132455 0.059185 -0.102173 -0.071020 -0.051542 0.002257 0.073697 -0.021845 -0.035627 0.009661 0.123071 -0.065039 \n-0.056420 0.059125 -0.030321 -0.057038 0.055493 -0.007116 -0.126529 0.019949 -0.058614 -0.078223 0.002145 0.050900 0.167834 -0.173333 0.181067 -0.004047 0.063488 0.151506 -0.125850 -0.136067 0.023547 0.034287 -0.056834 0.003824 0.134406 -0.055792 0.087938 0.068804 -0.033240 0.076407 -0.033551 -0.097730 0.084249 -0.079917 \n-0.038591 0.041658 -0.021071 -0.054808 0.085131 -0.020672 -0.150923 -0.028119 -0.005051 -0.082123 -0.027470 0.004437 0.151800 -0.139134 0.205779 0.055682 0.024516 0.096154 -0.038417 -0.113849 0.045637 0.075165 -0.039525 0.011140 0.058496 -0.061165 0.070389 0.031381 -0.020956 0.065917 -0.033395 -0.096762 0.067056 0.005758 \n-0.007940 0.026461 -0.003035 -0.037585 0.112114 -0.032320 -0.154598 -0.070183 0.034104 -0.066949 -0.048103 -0.076036 0.108505 -0.081056 0.189128 0.100712 0.001290 0.009722 0.046728 -0.023127 0.013390 0.076873 0.012671 0.031037 0.075639 -0.064473 0.061414 -0.019564 0.014597 0.046786 -0.011485 -0.084927 -0.000334 0.061175 \n0.018946 -0.000145 0.011179 -0.029672 0.136914 -0.030086 -0.147824 -0.105721 0.066935 -0.079902 -0.036968 -0.110909 0.052283 0.004188 0.126896 0.134626 -0.006676 -0.052490 0.091685 0.063396 -0.013036 0.002970 0.053049 0.019284 0.038579 -0.025497 0.025340 -0.089926 0.050450 -0.006666 -0.013118 -0.030505 -0.058633 0.064143 \n0.026629 -0.059165 -0.000823 -0.058599 0.151849 -0.022073 -0.130501 -0.084385 0.071751 -0.134872 0.039773 -0.057794 -0.044027 0.076494 0.035989 0.101529 0.005315 -0.029779 0.032498 0.028803 0.005618 -0.063529 -0.004924 -0.022183 -0.113427 0.055922 -0.008186 -0.140830 0.090960 -0.114112 -0.009417 0.083947 -0.041032 -0.006371 \n-0.010951 0.075350 -0.001817 -0.012876 0.013096 0.004579 -0.016153 -0.047823 -0.029850 0.016150 0.033334 0.015682 0.035621 0.037191 -0.019504 -0.019256 0.044839 0.020295 -0.073131 0.039780 -0.036879 -0.040970 0.053655 -0.001482 -0.002821 -0.032902 -0.000066 0.005729 0.001116 0.056517 -0.017058 -0.021947 0.037761 -0.039276 \n-0.012100 0.064207 -0.001096 -0.013941 0.006814 0.008710 -0.012277 -0.037790 -0.022203 0.014245 0.023934 0.012607 0.028185 0.041440 -0.015444 -0.022646 0.048805 0.020521 -0.080918 0.029123 -0.081415 -0.044517 0.073681 0.021481 -0.045782 -0.048161 0.003254 0.036460 -0.020011 0.065280 0.002563 -0.013150 0.045393 -0.015692 \n-0.013403 0.059276 0.001032 -0.014545 0.001798 0.010646 -0.008624 -0.026081 -0.017773 0.015405 0.015492 0.014040 0.022709 0.044120 -0.010399 -0.025661 0.051172 0.017503 -0.087720 0.021120 -0.123991 -0.047505 0.087387 0.047337 -0.088646 -0.065851 0.004667 0.069448 -0.040053 0.076718 0.023178 -0.004565 0.059432 0.003138 \n-0.013951 0.058265 0.004661 -0.015235 -0.000197 0.012932 -0.005151 -0.015313 -0.012719 0.014418 0.008297 0.018443 0.016678 0.051541 -0.004867 -0.028055 0.052224 0.011609 -0.091004 0.016980 -0.158439 -0.046922 0.104617 0.077207 -0.137148 -0.078657 0.005486 0.103939 -0.062683 0.082257 0.041975 0.000801 0.070429 0.027527 \n-0.012210 0.028100 -0.049457 -0.000857 0.000872 -0.019030 0.038293 -0.002178 0.022197 0.008799 -0.017828 -0.005589 -0.010209 -0.026452 0.021247 -0.052723 0.074659 0.058170 -0.117953 -0.020708 -0.092993 -0.079196 0.037883 0.239302 -0.027228 -0.100648 0.058909 0.082147 0.014782 0.033906 0.058190 -0.035069 -0.021313 -0.027376 \n-0.009373 0.029412 -0.026531 -0.009199 -0.003610 -0.013154 0.015847 0.006945 0.008617 0.011675 -0.022788 0.000421 -0.007697 0.005751 0.004594 -0.044864 0.063024 0.031416 -0.086743 -0.005786 -0.098907 -0.064158 0.049203 0.156108 -0.042964 -0.089257 0.038446 0.080608 -0.015415 0.071399 0.069731 -0.012170 0.005798 -0.005172 \n-0.007108 0.026011 0.001392 -0.008785 -0.008676 0.005534 -0.002323 0.008151 -0.006538 0.012718 -0.016466 0.016828 0.006599 0.032792 -0.008449 -0.031395 0.045979 0.010267 -0.064263 0.010528 -0.087206 -0.035954 0.070434 0.037452 -0.075439 -0.048176 -0.000307 0.074329 -0.047401 0.093968 0.057921 0.003554 0.025206 0.029137 \n-0.008616 0.022966 0.025314 -0.006647 -0.012574 0.026313 -0.017855 0.005573 -0.012147 0.015962 -0.009681 0.035391 0.015389 0.061577 -0.023327 -0.005465 0.025007 -0.014906 -0.045808 0.023055 -0.069940 -0.012007 0.101986 -0.066696 -0.085795 -0.002255 -0.051891 0.079767 -0.057766 0.078189 0.009062 0.022309 0.030125 0.051138 \n-0.007559 0.013536 0.044396 -0.007128 -0.015567 0.038755 -0.032699 0.009439 -0.018290 0.012901 -0.008295 0.047013 0.018435 0.076580 -0.045586 0.016721 0.010805 -0.037831 -0.013755 0.026798 -0.057710 -0.005862 0.113804 -0.159457 -0.085242 0.031892 -0.090113 0.066240 -0.055402 0.053706 -0.034191 0.047815 0.018971 0.071248 \n-0.009091 0.030428 0.013028 0.035270 -0.081955 0.036276 0.100983 -0.087388 -0.023476 0.093938 -0.074920 -0.042748 0.009283 -0.052713 0.069944 0.007487 0.044433 0.011768 -0.036858 -0.036562 0.024165 -0.141056 -0.039714 -0.075826 0.052239 0.062199 -0.048408 -0.033798 0.070343 0.124688 -0.003466 0.051026 0.026850 -0.026589 \n-0.006597 0.030631 0.019664 0.021478 -0.061211 0.024677 0.092608 -0.095386 -0.041650 0.068021 -0.054620 -0.036136 0.003440 -0.021689 0.046307 0.007803 0.056620 0.018329 -0.048106 -0.037355 0.044779 -0.170111 -0.043462 -0.076020 0.064547 0.063396 -0.047873 -0.054226 0.076392 0.081326 0.000747 0.074683 0.030657 -0.067772 \n-0.006641 0.024694 0.004169 0.027776 -0.027517 0.013511 0.064805 -0.082940 -0.047464 0.039102 -0.047983 -0.025260 -0.012175 0.006766 0.039254 0.004585 0.108825 0.031769 -0.009359 -0.008230 0.016421 -0.164640 -0.117072 -0.007971 0.069640 0.013253 -0.033817 -0.074767 0.071010 0.026436 0.003056 0.090554 0.005886 -0.126966 \n0.003124 0.009371 0.014768 0.046412 -0.023874 0.007554 0.036147 -0.057698 -0.058069 0.021256 -0.033315 -0.028152 -0.018259 0.027895 0.014161 0.004788 0.111066 0.042408 -0.022688 -0.017329 0.008180 -0.162840 -0.121148 0.012000 0.040787 0.005472 -0.028935 -0.070284 0.051087 0.002654 0.026039 0.077896 -0.025666 -0.138535 \n-0.000470 0.012891 0.009958 0.038234 -0.036776 0.012638 0.068663 -0.077589 -0.036998 0.050930 -0.057174 -0.042770 -0.006013 -0.005012 0.037131 0.011314 0.092853 0.040593 -0.014258 -0.022855 0.028109 -0.170083 -0.092356 -0.017012 0.053071 0.021873 -0.039264 -0.061002 0.057296 0.043219 0.021993 0.064114 -0.018287 -0.100373 \n-0.004849 0.015938 0.022983 0.026902 -0.073622 0.023429 0.089584 -0.088285 -0.026052 0.080286 -0.059955 -0.060351 0.007903 -0.035545 0.046797 0.007563 0.038369 0.030247 -0.059021 -0.056175 0.056872 -0.166273 -0.011250 -0.093711 0.035468 0.071037 -0.053530 -0.042127 0.065314 0.098363 0.023179 0.056227 0.018585 -0.031417 \n-0.022520 -0.008135 -0.028919 -0.050592 0.028229 -0.006670 -0.060855 -0.025108 0.032576 -0.018823 0.066255 0.018170 0.050211 0.001974 -0.062666 -0.057057 -0.027695 0.045343 -0.016243 0.061633 0.033008 0.024487 0.074017 -0.133643 0.041960 -0.008005 0.017760 -0.020807 0.009949 -0.031184 -0.022929 0.014085 0.078201 0.073117 \n-0.008675 -0.004691 -0.013081 -0.031226 0.031157 -0.009924 -0.096969 -0.029153 0.000787 -0.038194 0.087791 0.000669 0.047391 0.025733 -0.093797 -0.072336 -0.039133 0.081739 -0.024145 0.067113 0.036711 0.015968 0.050245 -0.135056 0.022818 0.008747 0.011110 -0.044613 0.004409 -0.030744 -0.014206 -0.016314 0.026864 0.033661 \n-0.008350 -0.011949 -0.026508 -0.026911 0.063836 -0.024789 -0.126394 -0.011390 -0.004841 -0.063477 0.084207 0.008974 0.040823 0.048228 -0.106669 -0.072520 0.012682 0.093989 0.007098 0.087810 0.011179 0.012357 -0.005468 -0.074058 0.051617 -0.038525 0.027206 -0.052944 -0.001957 -0.069244 -0.001150 -0.012855 0.002275 -0.012184 \n0.001527 -0.031469 -0.019959 -0.032691 0.084353 -0.036934 -0.139297 0.005872 -0.012615 -0.087659 0.090429 0.021235 0.029692 0.064764 -0.125564 -0.055872 0.037072 0.084147 -0.001494 0.073344 0.027889 -0.000113 -0.020299 -0.040534 0.015971 -0.035466 0.033553 -0.071962 -0.021193 -0.078379 0.024814 -0.018801 -0.021044 -0.038763 \n-0.009394 -0.028927 -0.028906 -0.024460 0.073718 -0.026898 -0.120720 -0.003723 -0.012295 -0.070463 0.075708 0.021766 0.032103 0.053181 -0.101806 -0.052394 0.030694 0.112096 0.015064 0.098439 -0.005609 0.016172 -0.039627 -0.035390 0.062895 -0.064759 0.040731 -0.023003 -0.019984 -0.078158 0.013167 -0.008582 -0.012839 -0.026034 \n-0.014806 -0.020586 -0.019304 -0.037248 0.040627 -0.009079 -0.093808 -0.017684 0.001926 -0.042956 0.076953 0.012620 0.038220 0.029003 -0.084598 -0.051706 -0.017717 0.096814 -0.013796 0.075862 0.017984 0.023149 0.017010 -0.093650 0.035446 -0.023135 0.026297 -0.011769 -0.011753 -0.043351 0.000060 -0.001953 0.028135 0.023804 \n0.029937 -0.018527 -0.150727 0.081029 0.034186 -0.056299 0.148788 0.006526 0.091516 -0.080441 -0.035735 0.001997 0.019030 -0.077643 0.107984 -0.056258 0.031181 -0.051535 -0.027580 0.051815 0.012036 0.081437 0.046704 -0.059784 0.100904 0.025934 0.021662 -0.016937 0.039461 -0.046583 -0.092257 -0.006300 0.025170 0.075511 \n0.027077 -0.012351 -0.112038 0.035893 0.028873 -0.001260 0.084827 -0.000242 0.048683 -0.054899 -0.029997 0.032628 -0.039785 -0.108273 0.045755 -0.052769 0.008202 -0.062941 -0.003272 0.105699 0.039987 0.020061 0.023151 0.020974 0.008953 0.010896 0.031997 -0.023033 0.010634 -0.071553 -0.062459 -0.034568 0.012175 0.063440 \n0.008543 0.000575 -0.036234 0.011338 0.007897 -0.004413 0.042000 0.015857 0.024113 -0.029744 -0.022255 0.053502 -0.038865 -0.097944 0.017588 -0.046984 0.033087 -0.053276 0.001529 0.130264 0.069392 -0.067173 0.042421 0.083647 -0.052001 0.027113 0.009719 0.006872 -0.038341 -0.067952 0.010640 -0.078205 -0.015510 0.044074 \n-0.004854 -0.002651 -0.001199 -0.004656 -0.017881 0.006502 0.011106 0.033451 0.012608 -0.007254 -0.021085 0.015936 -0.015926 -0.005386 0.006492 -0.032176 -0.004622 -0.056644 0.008831 0.017207 0.029211 -0.031234 -0.017190 0.017370 -0.014199 -0.016837 0.012242 0.028844 0.024051 -0.033052 0.005809 -0.026851 -0.003806 0.029867 \n-0.015813 -0.010424 0.049608 -0.025236 -0.047180 0.033566 -0.017722 0.037312 0.003478 0.019989 -0.017899 -0.019776 0.013111 0.105673 -0.000689 -0.029181 -0.055355 -0.059296 0.016272 -0.126448 -0.003426 0.027239 -0.080562 -0.048943 0.063203 -0.071188 0.018085 0.055066 0.103002 0.015990 -0.024552 0.027166 0.005359 -0.008937 \n-0.030164 -0.027591 0.112130 -0.046006 -0.063466 0.021257 -0.061882 0.075039 -0.009550 0.046188 -0.025234 -0.036147 0.006893 0.099786 -0.046972 -0.003808 -0.042536 -0.034124 0.072153 -0.146706 -0.007001 0.011713 -0.032354 -0.013285 0.064616 -0.076540 -0.019793 0.045941 0.057997 -0.041981 -0.013777 -0.007784 -0.005500 0.063654 \n-0.019028 -0.051789 0.153268 -0.072220 -0.068001 0.053218 -0.114782 0.100188 -0.032458 0.065327 -0.041993 0.000529 -0.049657 0.064999 -0.113438 0.028145 -0.026783 -0.004495 0.083060 -0.067097 0.025177 -0.054527 0.012232 0.061208 0.035559 -0.041029 -0.084866 0.011647 -0.034824 -0.100697 -0.069165 -0.000768 0.005575 0.110722 \n-0.028944 -0.046124 0.115567 -0.042613 -0.067724 0.014225 -0.060491 0.103470 0.006232 0.039413 -0.031752 -0.037167 -0.006997 0.085995 -0.038657 0.010688 -0.040086 -0.042208 0.098912 -0.130371 0.037304 0.026656 -0.077987 -0.030978 0.062407 -0.072535 -0.073939 0.000909 0.019295 -0.034458 0.004467 -0.047183 0.050673 0.035176 \n-0.010823 -0.035975 0.055356 -0.020108 -0.053716 0.014079 -0.008891 0.083913 0.022598 0.005824 -0.031201 -0.038542 -0.005753 0.089595 0.015986 -0.004255 -0.071317 -0.065118 0.079317 -0.106829 0.072446 0.039057 -0.148855 -0.072824 0.059724 -0.064924 -0.048338 0.013216 0.059644 0.037032 0.035514 -0.058015 0.052789 -0.068904 \n0.002749 -0.025782 0.001067 -0.000955 -0.021760 -0.004910 0.022410 0.073031 0.031948 -0.017623 -0.036578 0.002064 -0.036635 -0.028107 0.022568 -0.013938 -0.026049 -0.064352 0.076825 0.032919 0.104873 -0.018636 -0.086478 -0.011360 -0.025080 -0.005483 -0.057313 -0.019218 -0.018251 -0.006270 0.058547 -0.109717 0.043965 -0.042968 \n0.019557 -0.022238 -0.040271 0.015531 -0.000923 -0.011734 0.050924 0.059961 0.044488 -0.037512 -0.047698 0.041131 -0.067325 -0.125904 0.038185 -0.026749 0.003161 -0.063752 0.059945 0.149873 0.138916 -0.043073 -0.038810 0.040424 -0.060299 0.036249 -0.057345 -0.030897 -0.069820 -0.039359 0.051438 -0.140784 0.040745 -0.023033 \n0.038295 -0.025011 -0.119022 0.039087 0.023303 -0.007108 0.097748 0.031451 0.066314 -0.064618 -0.049757 0.022319 -0.054682 -0.131953 0.060803 -0.041005 -0.002889 -0.065952 0.048990 0.118731 0.087371 0.038178 -0.008116 -0.019859 0.013619 0.027323 -0.017437 -0.041034 -0.017123 -0.056194 -0.033365 -0.067470 0.076076 0.024548 \n0.027485 -0.031004 -0.155083 0.076967 0.030238 -0.066616 0.146021 0.018614 0.095435 -0.090351 -0.026858 -0.001195 0.004065 -0.062969 0.102157 -0.046214 0.025250 -0.047454 0.004391 0.045916 0.011457 0.054752 0.064190 -0.063966 0.092363 0.019011 0.007010 -0.017645 0.023346 -0.068486 -0.085984 -0.024607 0.046082 0.096832 \n0.011663 0.006518 -0.034439 0.013241 0.007617 -0.009766 0.044050 0.033840 0.029582 -0.028393 -0.028713 0.055641 -0.043922 -0.099413 0.025141 -0.040381 0.025727 -0.058214 0.010448 0.139032 0.097498 -0.059681 0.018053 0.084934 -0.052343 0.037634 -0.003643 0.010254 -0.050500 -0.038878 0.012009 -0.092562 -0.007898 0.022313 \n-0.002313 0.000470 0.000002 -0.004007 -0.016215 0.003976 0.010717 0.048028 0.016739 -0.006186 -0.024483 0.020048 -0.016876 -0.003548 0.010717 -0.026953 -0.010998 -0.055979 0.019518 0.025395 0.050851 -0.031442 -0.027433 0.021960 -0.018106 -0.009491 0.000531 0.037647 0.007463 -0.008452 0.013288 -0.048925 0.006064 0.024257 \n-0.012568 -0.006592 0.049539 -0.024277 -0.046609 0.030396 -0.019942 0.053337 0.007757 0.021468 -0.022706 -0.013044 0.011272 0.109312 0.003377 -0.022628 -0.060616 -0.061807 0.030161 -0.121278 0.019402 0.026839 -0.095660 -0.042434 0.064863 -0.064156 0.007525 0.057258 0.096057 0.035786 -0.019042 0.010115 0.006232 -0.015055 \n-0.023212 -0.060246 0.157807 -0.069886 -0.065658 0.063342 -0.104423 0.082001 -0.030749 0.079114 -0.044460 0.004171 -0.030429 0.042545 -0.096287 0.021890 -0.044874 -0.001170 0.067071 -0.085689 0.021431 -0.035122 0.002907 0.064224 0.017922 -0.037758 -0.083689 0.004437 -0.037603 -0.087459 -0.078257 -0.011921 0.002713 0.130484 \n-0.010961 -0.010595 0.057062 -0.023094 -0.047200 0.021346 -0.011516 0.068656 0.015527 0.014810 -0.022984 -0.021018 0.006940 0.106574 0.011226 -0.023889 -0.062806 -0.069001 0.044159 -0.108003 0.050370 0.047099 -0.112640 -0.068669 0.081751 -0.068521 -0.039172 0.022972 0.052837 0.036443 0.008144 -0.028320 0.041313 -0.064570 \n0.001631 -0.003250 0.002325 -0.002118 -0.016181 0.000274 0.016759 0.060910 0.024499 -0.012519 -0.030588 0.015271 -0.023100 -0.011757 0.016440 -0.028638 -0.012990 -0.064844 0.039739 0.031429 0.079984 -0.015321 -0.052897 -0.006078 -0.010170 -0.011420 -0.050449 -0.009900 -0.025391 -0.012909 0.032748 -0.085004 0.038699 -0.043162 \n0.017805 0.004146 -0.038887 0.014222 0.006581 -0.009683 0.047461 0.046887 0.038038 -0.032345 -0.032763 0.056280 -0.049485 -0.108966 0.031645 -0.041431 0.020138 -0.064023 0.031810 0.142533 0.126216 -0.050995 -0.002245 0.056266 -0.050403 0.037812 -0.053115 -0.030572 -0.081976 -0.050982 0.028974 -0.127634 0.029303 -0.029574 \n0.012632 -0.105919 0.042832 -0.056614 0.095894 -0.023994 -0.019214 -0.026746 -0.070577 0.202269 0.218185 -0.141116 0.012637 -0.191347 0.155533 -0.244488 0.121779 -0.013130 0.138472 -0.059114 -0.216544 -0.050477 0.066853 -0.149560 -0.157390 -0.095098 -0.011175 -0.068427 0.210754 -0.054577 0.001436 0.040342 -0.004236 -0.006205 \n-0.009740 -0.029067 0.036475 -0.046866 0.118228 0.012225 -0.006405 -0.060398 -0.086556 0.108100 0.186918 -0.112111 0.050136 -0.100126 0.105268 -0.169540 0.136663 -0.073114 0.067763 -0.014521 -0.082623 -0.012863 0.033765 -0.100967 -0.086562 -0.092416 -0.077945 0.022729 0.114331 -0.008651 -0.069342 0.005683 0.051571 -0.009558 \n-0.031301 0.046217 0.033243 -0.035388 0.123785 0.052248 0.021922 -0.090547 -0.125667 0.007581 0.182378 -0.055823 0.074368 -0.029074 0.053632 -0.049594 0.107463 -0.137761 0.005821 -0.001673 0.066449 0.006118 0.023528 0.013804 -0.007269 -0.081388 -0.113434 0.070675 0.027780 0.045024 -0.106739 -0.011678 0.031635 0.044212 \n-0.047441 0.105188 0.031918 -0.024384 0.114098 0.082601 0.048491 -0.112125 -0.170704 -0.059301 0.164752 -0.009947 0.090739 0.006616 0.010369 0.042357 0.050623 -0.158918 -0.042210 0.014508 0.136027 -0.007670 -0.034495 0.072312 0.050835 -0.067209 -0.075955 0.023597 0.006577 0.084867 -0.082590 0.024191 -0.041988 0.068711 \n-0.060936 0.133902 0.031530 -0.004574 0.064304 0.088650 0.058070 -0.124018 -0.171917 -0.102988 0.148276 0.058157 0.076201 0.044152 0.002505 0.090897 -0.015203 -0.110439 -0.090091 0.069662 0.172459 -0.039446 -0.067579 0.050794 0.093654 -0.082964 -0.026363 0.019254 -0.002660 0.016061 0.024545 0.043909 -0.092051 0.131171 \n-0.074646 0.131695 0.040257 0.018490 -0.004794 0.081236 0.061589 -0.133348 -0.147784 -0.119212 0.094712 0.084045 0.033173 0.036408 0.031797 0.094617 -0.048706 0.003825 -0.075566 0.078798 0.127307 -0.065285 -0.109546 -0.039558 0.030185 -0.072564 0.052974 -0.008825 -0.088317 -0.022192 0.091494 0.087785 -0.062428 0.116086 \n-0.090236 0.103626 0.066939 0.057319 -0.079163 0.060686 0.053354 -0.131920 -0.087102 -0.115977 0.028577 0.074951 -0.040556 0.035491 0.087538 0.018752 -0.081645 0.116761 0.007481 0.045592 0.001466 -0.094081 -0.126988 -0.146376 -0.033849 -0.021719 0.127080 -0.004981 -0.202755 -0.119973 0.081963 0.106640 -0.105281 -0.008628 \n-0.101059 0.055177 0.092659 0.069983 -0.150193 0.026469 0.028574 -0.115258 -0.008902 -0.088879 -0.036594 0.022392 -0.109572 -0.005240 0.149355 -0.115056 -0.119773 0.122550 0.083092 0.011822 -0.092288 -0.074034 -0.034558 -0.115984 -0.044921 0.007854 0.164244 0.014803 -0.170980 -0.127570 0.019750 0.095694 0.000371 -0.041291 \n-0.101563 0.024376 0.106668 0.071318 -0.187231 0.012534 0.023991 -0.099795 0.030129 -0.076617 -0.069392 -0.016558 -0.116462 -0.024845 0.158655 -0.199665 -0.116228 0.076206 0.060656 -0.024832 -0.096681 -0.049299 0.082420 -0.042295 -0.032862 0.018749 0.125343 0.039212 -0.037558 -0.047906 -0.025870 -0.049529 0.088169 -0.088273 \n-0.101840 -0.013119 0.089419 0.075166 -0.182579 0.048658 0.037188 -0.067749 0.031914 -0.101814 -0.073274 -0.026481 -0.109668 -0.000858 0.110793 -0.202483 -0.060253 0.007145 0.019590 -0.069464 -0.056870 0.023689 0.132006 0.031411 0.013119 -0.007012 0.038285 0.031656 0.001551 -0.025447 -0.065416 -0.114616 0.017261 -0.086359 \n-0.084252 -0.076412 0.065909 0.060881 -0.142931 0.092286 0.073191 -0.013071 0.017189 -0.159961 -0.092115 -0.031651 -0.101432 -0.005721 0.027741 -0.106024 0.050453 -0.034217 -0.067543 -0.069923 -0.011090 0.116035 0.100208 0.041462 -0.024840 -0.044467 -0.108854 -0.009354 0.073244 0.020455 -0.063103 -0.129646 -0.010099 -0.129133 \n-0.053651 -0.123308 0.046845 0.020630 -0.076671 0.113112 0.110897 0.086910 0.003931 -0.182808 -0.094838 -0.023499 -0.059496 -0.018019 -0.032692 -0.004557 0.053504 -0.066417 -0.110231 -0.014603 -0.024896 0.113252 0.016412 0.021225 -0.025860 -0.075046 -0.145044 -0.030890 0.110020 0.003382 0.007818 -0.098244 -0.037896 -0.009802 \n-0.023018 -0.146263 0.038114 -0.004028 -0.020148 0.111274 0.136014 0.170400 0.002465 -0.171044 -0.075670 -0.007542 -0.006424 -0.025856 -0.031416 0.083827 0.010568 -0.069980 -0.109310 0.034905 -0.065427 0.031177 -0.044852 0.019905 -0.066999 -0.093510 -0.115084 -0.095158 0.120015 0.040204 0.030019 -0.030543 -0.096811 0.096700 \n0.002563 -0.127886 0.038658 -0.012071 0.033255 0.099861 0.164565 0.238246 0.001567 -0.105923 -0.057783 0.008664 0.027296 -0.030573 -0.009853 0.117020 -0.032701 -0.000283 -0.057331 0.051644 -0.084379 -0.039476 -0.031627 -0.008417 -0.048362 -0.080557 -0.044505 -0.140295 0.129312 0.090377 0.020906 0.080368 -0.088585 0.136852 \n0.022743 -0.067070 0.035835 -0.011617 0.073365 0.063325 0.146213 0.262278 -0.002566 -0.007656 -0.026090 0.035984 0.031533 -0.009645 0.044980 0.084848 -0.046015 0.086576 -0.001782 0.061428 0.003570 -0.047340 0.031674 0.003656 -0.006269 -0.074342 -0.011328 -0.102136 0.042874 0.026755 -0.027391 0.130301 -0.059867 0.018942 \n0.044270 0.008816 0.045389 -0.021660 0.105411 0.011416 0.109320 0.275577 -0.009832 0.108035 0.004491 0.064390 0.012428 0.006669 0.095357 -0.012238 -0.068972 0.152817 0.075822 0.056884 0.138813 -0.051472 0.080042 0.012909 0.015075 -0.053459 0.028833 0.077070 0.026517 -0.070675 -0.045298 0.143809 -0.084532 -0.083487 \n0.062375 0.088371 0.056930 -0.031399 0.124205 -0.042608 0.070908 0.302850 -0.030713 0.221806 0.047883 0.094536 -0.004204 0.009990 0.148794 -0.108520 -0.096997 0.187564 0.140322 0.044017 0.262141 -0.062547 0.161527 -0.013297 0.037476 -0.028287 0.047541 0.256555 -0.040101 -0.087736 0.006879 0.108453 -0.022617 -0.092782 \n0.101351 -0.059896 0.089671 -0.007831 -0.037385 0.008829 -0.001672 -0.180136 0.189267 0.006458 -0.232031 -0.060867 0.181227 0.130852 -0.046776 0.035489 0.001493 0.160017 0.051721 0.209411 0.059181 -0.083851 0.207104 -0.102355 0.039265 -0.194572 -0.024321 -0.005820 -0.022768 0.136793 -0.107813 -0.023127 -0.048810 0.065417 \n0.081528 -0.068502 0.070887 -0.055525 -0.045082 0.007139 -0.005518 -0.118178 0.156592 -0.033074 -0.063860 0.040561 0.111628 0.029568 0.001045 0.060952 0.022298 0.185051 0.009521 -0.033300 0.094005 0.013600 0.105380 0.040334 -0.061870 -0.114470 0.021331 0.005113 0.002683 0.024141 -0.026811 -0.015689 0.020153 0.092373 \n0.068413 -0.083706 0.052305 -0.086296 -0.055880 0.021816 0.004492 -0.068120 0.145758 -0.102567 0.092434 0.075123 0.007851 0.008520 0.005845 0.082068 0.031453 0.180413 -0.035339 -0.133303 0.088724 0.067980 0.008976 0.111553 -0.060575 -0.053669 0.037053 -0.004075 0.049025 0.024206 0.031083 0.032459 0.049141 0.038812 \n0.072230 -0.065201 0.036058 -0.094849 -0.081347 0.028568 0.008797 -0.040623 0.140707 -0.126779 0.170257 0.059293 -0.052776 0.003182 -0.000677 0.081645 0.026914 0.131691 -0.055588 -0.098342 0.031136 -0.006790 0.015095 0.065597 0.078600 0.017709 0.045791 -0.034864 0.076622 0.013773 0.067413 -0.028287 0.059081 0.012658 \n0.085169 -0.029802 0.042368 -0.082336 -0.097939 0.016608 0.019748 -0.012989 0.121625 -0.087612 0.209630 0.002191 -0.126582 0.050998 -0.030648 0.060010 0.000332 0.046455 -0.023080 0.055862 -0.053376 -0.135321 0.065824 0.029844 0.265716 0.072053 0.059330 -0.027794 0.089039 -0.055593 0.088900 -0.113375 0.061857 -0.009200 \n0.083666 0.022002 0.040552 -0.085899 -0.099865 0.015644 0.005068 0.015547 0.156486 -0.077980 0.202180 0.014951 -0.087338 0.065851 -0.063459 -0.028938 0.043400 -0.024140 -0.005938 0.066480 -0.072232 -0.179693 -0.014319 -0.032909 0.209669 0.122452 -0.039648 0.049486 0.011409 -0.011759 -0.007885 -0.033417 -0.079718 0.113528 \n0.083042 0.057031 0.040177 -0.099114 -0.076680 0.009479 -0.003028 -0.000359 0.165022 -0.119377 0.166816 0.098159 -0.004888 0.020345 -0.028135 -0.047425 0.054928 -0.014242 -0.021031 -0.044814 0.032783 -0.054961 -0.131702 -0.039012 -0.016037 0.136114 -0.052413 0.121523 -0.038968 0.020495 -0.008329 -0.024960 -0.081805 0.022575 \n0.083252 0.078107 0.056261 -0.095219 -0.059524 0.003298 -0.006615 -0.018114 0.165684 -0.099090 0.091701 0.078091 0.033441 -0.005544 -0.024775 -0.060616 0.054683 -0.025820 0.034770 -0.091304 0.061625 0.040350 -0.178139 0.001904 -0.150915 0.076588 -0.034127 0.096746 -0.053605 0.008977 -0.035470 0.025028 -0.047913 -0.054413 \n0.104239 0.086773 0.093349 -0.055643 -0.033261 -0.013246 -0.005449 -0.083837 0.158899 -0.044047 -0.029467 -0.026012 0.082055 -0.049138 0.021797 0.008367 0.031893 -0.087107 0.189897 -0.063379 0.017963 0.128801 -0.143253 0.036421 -0.143812 -0.013284 0.024955 0.056737 -0.069906 0.014591 -0.040838 0.026539 -0.056752 -0.047314 \n0.135218 0.100220 0.124814 0.000991 -0.008239 -0.012542 -0.007248 -0.156811 0.151583 -0.017420 -0.147099 -0.155713 0.101870 -0.021523 0.028922 0.110680 0.026595 -0.179864 0.346267 0.114265 -0.070904 0.161901 -0.031710 0.014850 -0.024451 -0.120325 0.049384 -0.013378 -0.123593 0.072623 -0.129874 0.065687 -0.065814 -0.083173 \n0.059343 -0.012441 -0.000702 -0.081890 -0.008092 -0.077276 -0.028878 0.037295 -0.029467 -0.011411 -0.007775 0.009769 -0.027726 0.005769 0.053610 0.007873 -0.041172 -0.106420 -0.027219 0.033050 -0.102197 -0.048661 -0.066981 -0.013190 0.109772 0.030705 0.044138 0.003928 0.036674 0.004169 0.127857 0.033634 0.266703 0.060249 \n0.041616 -0.014486 -0.010645 -0.063688 0.002398 0.007759 -0.030515 0.045130 -0.060320 -0.012907 -0.003144 -0.002022 0.026184 0.062737 0.093489 -0.012212 -0.012731 -0.061123 0.017645 0.059738 -0.070951 0.028276 -0.008200 -0.013282 0.059036 0.130001 0.007378 -0.026986 0.024631 0.046745 0.129132 0.029581 0.168902 0.047167 \n0.022209 -0.018785 -0.021705 -0.047282 0.007684 0.096519 -0.037379 0.046370 -0.086593 -0.016226 0.004486 -0.016435 0.077777 0.123311 0.134030 -0.031013 0.005692 -0.004530 0.059412 0.082817 -0.053324 0.097630 0.047516 -0.011465 0.006049 0.229178 -0.021088 -0.047042 0.006557 0.091702 0.122335 0.003955 0.066979 0.045888 \n0.003588 -0.021043 -0.030263 -0.030409 0.008371 0.181691 -0.044518 0.046051 -0.107937 -0.022794 0.009934 -0.032445 0.119848 0.179589 0.164240 -0.043652 0.020389 0.047092 0.094236 0.116267 -0.035936 0.155206 0.107422 -0.005142 -0.059549 0.322080 -0.057313 -0.069079 -0.015886 0.152295 0.127300 -0.018228 -0.013766 0.025152 \n0.010241 -0.012175 -0.071132 -0.010497 0.020024 0.062831 -0.040007 0.039616 -0.072378 0.035685 -0.031690 0.021640 0.001871 0.085038 0.053829 -0.017137 0.002122 0.049195 0.087728 -0.000013 -0.026558 0.022211 -0.058457 0.166112 0.018559 -0.012076 -0.001099 0.016641 -0.019024 0.008824 0.091310 -0.040634 0.020518 0.051538 \n0.005987 -0.016904 -0.065972 -0.010944 0.009374 0.084910 -0.052019 0.031735 -0.073636 0.036433 -0.016286 0.003295 0.010276 0.085334 0.068926 -0.031102 -0.004326 0.037220 0.078248 0.028015 -0.030765 0.043535 -0.024633 0.098897 0.024402 0.055196 -0.037672 -0.019356 0.027747 -0.077052 0.014090 -0.032531 0.010393 0.037211 \n0.000485 -0.009792 -0.056592 -0.011803 0.001583 0.104774 -0.061755 0.023501 -0.079032 0.039804 -0.011369 -0.011280 0.024653 0.096826 0.073638 -0.046150 -0.008896 0.030450 0.076726 0.038805 -0.033667 0.064954 0.000900 0.056790 0.020232 0.116360 -0.065525 -0.045163 0.037248 -0.094933 -0.027418 -0.028737 -0.007585 -0.011135 \n0.006045 -0.001260 -0.070490 -0.009554 0.009933 0.083302 -0.054060 0.013771 -0.080073 0.047390 -0.001836 -0.009542 0.020186 0.082461 0.052009 -0.037023 0.003870 0.028911 0.066158 0.019377 -0.061487 0.042407 -0.017089 0.104383 0.041935 0.073886 -0.019325 -0.089932 0.029586 -0.070428 0.024956 -0.057337 0.001123 -0.019238 \n0.011242 -0.005679 -0.074412 -0.010055 0.015755 0.060586 -0.047635 0.003394 -0.091558 0.044380 -0.005161 -0.022962 0.015788 0.070458 0.028218 -0.036979 0.017605 0.028455 0.076360 -0.013275 -0.085415 0.018537 -0.048259 0.163691 0.057659 0.026190 0.028125 -0.133961 0.018631 -0.042571 0.090055 -0.092227 0.027934 -0.057308 \n0.036225 -0.071534 0.000459 -0.046818 0.009337 -0.083866 -0.046178 -0.015273 -0.060642 -0.002822 -0.089257 0.012351 -0.039814 -0.035023 -0.019465 0.040371 -0.061960 0.039386 -0.094567 -0.024135 0.027052 0.059938 0.091591 0.001979 -0.040503 -0.107158 0.083539 -0.101314 0.013352 -0.110938 0.043372 0.129228 0.064399 -0.008668 \n0.044367 -0.059525 0.015036 -0.064121 -0.018004 -0.082253 -0.045795 -0.026919 -0.070584 -0.018065 -0.070391 -0.010245 -0.029751 -0.046835 -0.028796 0.042482 -0.143375 0.002483 -0.181009 -0.070951 0.071994 -0.003359 0.199769 -0.097579 -0.087064 0.021258 0.050995 -0.107355 -0.017802 0.053633 0.017380 0.028065 0.073668 -0.008871 \n0.043601 -0.049111 0.016832 -0.062722 -0.017690 -0.081388 -0.042392 -0.021628 -0.089830 -0.013515 -0.066851 -0.008770 -0.034597 -0.040346 -0.030496 0.037791 -0.131468 -0.012470 -0.162906 -0.049426 0.049875 -0.008340 0.154951 -0.079562 -0.052199 0.026980 0.057094 -0.092234 -0.013567 0.075758 0.017100 -0.027829 0.047598 -0.032337 \n0.048275 -0.038263 0.001498 -0.051199 0.023312 -0.088975 -0.041336 0.005000 -0.095004 -0.003208 -0.060932 0.022466 -0.042236 0.005051 -0.023424 0.039786 -0.019435 -0.003108 -0.056234 0.026974 -0.047324 0.009209 -0.052575 0.062674 0.041095 -0.089544 0.071103 -0.050484 0.024541 0.021517 -0.001177 -0.034659 0.017784 -0.145986 \n0.041785 -0.047523 -0.029972 -0.046078 0.035909 -0.097136 -0.056514 0.005071 -0.089750 -0.024247 -0.085315 0.019769 -0.065103 -0.012747 -0.033756 0.024734 -0.014857 0.011973 -0.055355 0.034763 -0.048361 0.024915 -0.036487 0.063963 0.019368 -0.114169 0.095381 -0.092460 0.033839 -0.059458 -0.018405 0.004700 0.059549 -0.091842 \n0.044692 -0.060996 -0.030403 -0.035242 0.035271 -0.092818 -0.058749 -0.002830 -0.079239 -0.025316 -0.092148 0.019888 -0.062782 -0.020325 -0.029536 0.030127 -0.024623 0.028330 -0.061266 0.010928 -0.030107 0.035277 -0.006948 0.059755 -0.013675 -0.115893 0.086825 -0.110997 0.020747 -0.090179 -0.023240 0.046759 0.032906 -0.074567 \n0.053635 0.024179 0.003976 -0.054942 0.021919 -0.085630 -0.040517 0.019222 -0.098845 -0.002500 -0.058854 0.005767 -0.030366 0.004222 -0.039686 -0.024247 -0.003591 -0.045881 -0.051159 0.028487 -0.059601 0.002317 -0.116937 0.048023 0.058109 -0.042187 -0.022689 0.101089 -0.085146 -0.047060 0.001347 -0.071920 -0.053922 -0.029344 \n0.050654 0.043811 0.016440 -0.071448 -0.018825 -0.083915 -0.050552 0.001389 -0.099731 -0.011661 -0.055724 -0.038660 -0.011181 -0.044498 -0.046592 -0.061600 -0.110975 -0.092581 -0.146722 -0.054465 0.022640 -0.027495 0.052884 -0.124647 -0.044100 0.090185 -0.056166 0.049620 -0.094099 0.024798 -0.007076 -0.078109 -0.056294 0.024809 \n0.056727 0.056174 0.016328 -0.067723 -0.018273 -0.089164 -0.053246 -0.004474 -0.088775 -0.016960 -0.055755 -0.049357 -0.003393 -0.057029 -0.057944 -0.078602 -0.116320 -0.116419 -0.135346 -0.065112 0.031714 -0.026089 0.053926 -0.146501 -0.088218 0.112238 -0.073090 0.019614 -0.073331 -0.010391 -0.016316 -0.081091 -0.101346 0.033206 \n0.053863 0.070189 0.002551 -0.055065 0.015300 -0.088786 -0.052051 0.006288 -0.079362 0.003819 -0.069097 -0.028654 -0.012574 -0.043552 -0.060415 -0.082841 -0.030205 -0.090290 -0.056654 -0.010515 -0.026259 0.018692 -0.060457 -0.049003 -0.020092 0.013016 -0.079443 0.055920 -0.044095 -0.132379 -0.069462 -0.028557 -0.081805 -0.014368 \n0.054487 0.052156 -0.025662 -0.043672 0.038234 -0.097652 -0.061550 0.009141 -0.091552 -0.018906 -0.073348 -0.023368 -0.035182 -0.019426 -0.067143 -0.077651 0.000840 -0.064016 -0.050794 0.012015 -0.070276 -0.009742 -0.116913 0.009872 0.004210 -0.020941 -0.054064 0.033929 -0.041700 -0.124288 -0.068147 -0.077671 -0.106441 -0.047888 \n0.053071 0.036339 -0.025735 -0.047996 0.041005 -0.100444 -0.057829 0.013845 -0.101921 -0.018419 -0.077645 -0.013513 -0.041059 -0.010444 -0.059771 -0.061024 0.005044 -0.056949 -0.052826 0.026317 -0.078409 -0.007588 -0.129995 0.033848 0.029133 -0.047594 -0.035022 0.047235 -0.058100 -0.091996 -0.054179 -0.066075 -0.078103 -0.046683 \n-0.031460 -0.013987 -0.149818 0.080350 0.020681 -0.057818 0.011712 -0.001008 0.061313 0.017201 0.005085 0.074818 -0.047190 0.015967 -0.029569 0.136405 0.070269 -0.039349 0.090760 -0.058563 0.065843 0.078259 -0.020924 -0.163454 -0.040312 -0.104189 0.069961 0.035861 0.064290 0.042196 0.239137 -0.024848 0.084332 -0.100068 \n-0.002327 -0.017521 -0.139425 0.070865 0.048305 0.079434 -0.035213 -0.026484 0.062642 0.070813 -0.027307 0.065759 -0.050332 -0.068535 -0.050488 0.065260 -0.034808 0.001184 0.022065 -0.018875 0.057119 -0.010911 -0.054658 -0.020400 -0.028406 -0.025774 0.004056 0.020749 -0.040770 0.067283 0.024925 0.111530 0.079035 -0.073362 \n-0.000584 -0.011118 -0.122177 0.051211 0.037283 0.151535 -0.057755 -0.043066 0.075106 0.105702 -0.045195 0.033969 -0.051730 -0.086152 -0.035502 0.008973 -0.086193 0.022393 -0.032203 -0.010625 0.037487 0.012267 -0.063710 0.003409 0.012534 0.018225 -0.069447 -0.045926 -0.057301 0.086177 -0.125110 0.108154 0.062487 -0.033929 \n0.000480 -0.003086 -0.124476 0.057127 0.033887 0.149034 -0.061112 -0.048529 0.070950 0.110661 -0.040134 0.025767 -0.039288 -0.067746 -0.045629 0.005133 -0.081370 0.017086 -0.037104 -0.021039 0.008034 -0.013678 -0.051069 0.002511 0.032016 0.008503 -0.097044 -0.037501 -0.056407 0.051508 -0.144414 0.076356 0.059066 -0.021945 \n-0.000559 0.003997 -0.124027 0.053465 0.037579 0.149996 -0.049979 -0.055144 0.070483 0.113771 -0.040946 0.023671 -0.042610 -0.080241 -0.054001 0.002411 -0.078521 0.019903 -0.057589 -0.015049 -0.008310 -0.005005 -0.034476 0.006235 0.033286 0.024151 -0.120019 0.018377 -0.072419 0.051602 -0.134832 0.064370 0.037586 0.038711 \n-0.000565 0.012494 -0.144971 0.071663 0.048838 0.081814 -0.029624 -0.048941 0.058314 0.080172 -0.010279 0.030880 -0.020393 -0.055948 -0.087529 0.040786 -0.005034 0.001085 -0.046251 -0.044062 -0.050526 -0.012975 0.003798 -0.023311 0.028814 -0.002381 -0.096432 0.041930 -0.029305 0.030971 -0.027834 0.007430 -0.084175 0.004963 \n-0.024116 0.030827 -0.152081 0.079655 0.025107 -0.047327 0.011967 -0.026416 0.054183 0.040100 0.018945 0.030843 -0.004122 0.017941 -0.093164 0.086158 0.096071 -0.024027 0.018254 -0.066233 -0.099375 0.036822 0.073623 -0.184943 0.021773 -0.066513 -0.059088 0.109738 0.066223 -0.037492 0.178023 -0.104653 -0.133898 -0.056362 \n-0.091307 0.021185 0.005452 0.093079 0.004462 -0.137494 0.027255 0.016193 0.035027 0.043270 0.017597 -0.052594 0.050678 -0.017621 -0.100552 0.045091 0.137042 -0.020604 0.004831 0.003501 -0.076423 -0.058265 0.083175 0.046838 -0.041851 0.066991 0.022783 0.025688 0.023265 -0.031676 0.073439 -0.072413 -0.208999 0.025261 \n-0.117606 0.016526 0.081068 0.093572 -0.000820 -0.179734 0.034199 0.055206 0.036610 0.045268 0.036467 -0.091173 0.086052 0.019906 -0.077335 0.021613 0.112294 -0.024854 0.001051 -0.024213 0.006556 -0.070798 0.044003 0.109037 -0.026106 0.108415 0.052460 -0.013149 -0.012349 -0.024464 -0.073565 -0.035321 -0.006109 0.085182 \n-0.119255 0.013200 0.094025 0.092040 -0.002146 -0.181868 0.034095 0.066850 0.038987 0.042822 0.035705 -0.088591 0.084897 0.040278 -0.058173 0.015843 0.087899 -0.013908 0.006996 -0.042503 0.059924 -0.066579 0.004384 0.103210 -0.024232 0.105557 0.087612 -0.040335 0.005558 -0.016772 -0.091889 -0.007373 0.029448 0.052985 \n-0.116290 0.010377 0.087191 0.091107 -0.002629 -0.185149 0.030103 0.072827 0.039401 0.035673 0.032489 -0.068554 0.067030 0.041143 -0.052476 0.026493 0.086061 -0.007730 0.013083 -0.014025 0.109392 -0.074283 -0.017676 0.099392 -0.055753 0.103876 0.090079 -0.044614 -0.019969 0.012981 -0.056802 -0.005694 0.062207 0.013923 \n-0.088956 0.002770 0.014073 0.083735 0.000259 -0.146666 0.024624 0.057239 0.040658 0.024938 0.022137 -0.006530 0.016834 0.033547 -0.054639 0.066908 0.066243 -0.006261 0.048043 0.020086 0.160704 -0.046164 -0.050282 0.007988 -0.125443 0.055461 0.087275 -0.006875 -0.007782 0.054046 0.083770 0.004746 0.021062 -0.066056 \n-0.035780 -0.013571 -0.129727 0.075906 0.019981 -0.033424 -0.002959 -0.000563 0.050482 0.021935 0.002944 0.075011 -0.045732 0.001801 -0.047564 0.120066 0.054278 -0.033545 0.090304 -0.063131 0.074862 0.062176 -0.020091 -0.117017 -0.059383 -0.080761 0.087965 0.081966 0.076590 0.065730 0.239584 -0.057628 0.009591 -0.117312 \n-0.008820 -0.007627 -0.158056 0.055203 0.017956 0.077099 -0.075129 -0.007191 0.032083 0.085832 -0.010026 0.034463 -0.026295 -0.045494 -0.041653 0.027555 -0.049879 0.009335 0.083404 -0.078297 0.040478 -0.117472 0.024219 0.074484 -0.004484 -0.034318 -0.038895 -0.061118 -0.048430 -0.005360 -0.051358 0.010804 0.052828 0.036864 \n-0.007737 -0.003256 -0.151791 0.055268 0.019966 0.087559 -0.078741 -0.018450 0.030698 0.091713 -0.015450 0.020864 -0.015028 -0.032981 -0.052983 0.014209 -0.059863 0.016094 0.069445 -0.092531 0.010370 -0.126361 0.028344 0.071716 0.009341 -0.033236 -0.067826 -0.044003 -0.045043 -0.018573 -0.090383 0.001302 0.035380 0.033187 \n-0.007412 0.002548 -0.158757 0.061181 0.018661 0.073976 -0.071983 -0.025639 0.028395 0.091940 0.000206 0.022257 -0.009808 -0.034953 -0.058116 0.017318 -0.038657 0.005313 0.049993 -0.087077 -0.010529 -0.130728 0.062698 0.069370 0.019104 -0.031545 -0.097670 0.007100 -0.077453 -0.016369 -0.071504 -0.037358 0.022404 0.093558 \n-0.032512 0.028427 -0.133433 0.078989 0.025468 -0.028533 0.004691 -0.021006 0.046417 0.047024 0.018770 0.037960 0.000477 0.007323 -0.092459 0.082200 0.086554 -0.011680 0.010444 -0.068859 -0.057549 0.014886 0.067619 -0.129370 0.001837 -0.039609 -0.014336 0.136787 0.056466 0.005406 0.166161 -0.086177 -0.153931 -0.065626 \n-0.106396 0.012082 0.093804 0.073458 0.006325 -0.122138 0.053986 0.020569 0.052258 0.097040 -0.030117 -0.063935 0.029007 -0.048173 -0.073480 0.006487 0.079422 -0.018318 -0.098277 0.085998 -0.045678 0.124596 -0.056062 -0.009915 0.115255 0.082543 0.043762 0.055274 0.033651 0.018777 -0.097186 0.025652 0.107246 0.082007 \n-0.108266 0.013196 0.107352 0.073267 0.005501 -0.118182 0.053900 0.026988 0.059629 0.098678 -0.033463 -0.059244 0.030748 -0.021010 -0.048874 -0.003174 0.046149 -0.004115 -0.096188 0.073125 -0.013743 0.137679 -0.084938 -0.025411 0.119975 0.081742 0.078842 0.041866 0.054237 0.044745 -0.113358 0.068330 0.125398 0.071168 \n-0.105677 0.013856 0.100276 0.068541 0.007179 -0.120756 0.052194 0.033207 0.056095 0.092773 -0.030246 -0.037497 0.018805 -0.020756 -0.042271 0.009948 0.041864 0.000654 -0.101674 0.096004 0.022386 0.126403 -0.085055 -0.027232 0.087129 0.079991 0.091934 0.037413 0.035609 0.080869 -0.077055 0.068696 0.147811 0.051447 \n0.200300 0.206381 0.037666 -0.062044 0.105603 0.039287 0.129443 -0.026108 -0.006145 0.008167 -0.180506 -0.005344 -0.154896 0.029728 -0.078524 -0.093022 0.282292 0.094500 -0.012038 -0.075772 -0.007254 0.075631 -0.021364 -0.032209 0.106197 -0.033075 -0.057528 -0.036911 -0.079279 -0.070271 0.134924 0.050103 0.176129 0.174669 \n0.174909 0.262626 0.001650 -0.050760 0.056767 0.046800 0.116679 0.016697 0.036953 -0.001587 -0.129708 -0.018479 -0.077744 0.017170 -0.006678 -0.084015 0.149428 0.003802 0.023948 -0.034466 -0.037293 0.015672 -0.028566 0.018799 0.029636 -0.058638 0.022368 -0.067504 -0.036674 -0.038199 0.101980 -0.006688 0.114199 0.092127 \n0.145419 0.271569 -0.034873 -0.044417 -0.005370 0.054598 0.106804 0.058877 0.047845 -0.006222 -0.038196 -0.028624 0.051275 0.021585 -0.019610 -0.032440 -0.042228 -0.040054 0.010931 -0.080129 -0.032979 -0.037624 0.046956 0.005674 -0.043045 -0.070160 0.084897 -0.059861 0.011866 -0.020727 0.016502 -0.105536 0.054309 0.077813 \n0.121784 0.205203 -0.040615 -0.025224 -0.078037 0.055910 0.087096 0.101567 0.032281 0.047114 0.067450 -0.029754 0.115044 0.004978 -0.002689 0.033261 -0.183060 -0.118272 -0.032756 -0.083449 -0.036678 -0.109978 0.089839 -0.018425 -0.047398 -0.071371 0.132785 -0.079312 0.053450 -0.016013 -0.087251 -0.136778 0.010646 0.048749 \n0.133914 0.102310 -0.020287 0.004986 -0.141709 0.003779 0.009098 0.120102 -0.047440 0.060693 0.150862 0.032856 0.123342 0.036340 0.053349 0.081323 -0.106337 -0.089787 -0.055918 0.076288 0.022085 -0.032767 0.044374 -0.049343 -0.054487 -0.077724 0.094554 -0.099233 0.070220 0.032782 -0.134028 -0.176615 0.058256 -0.110604 \n0.136156 0.012237 0.028350 0.055205 -0.144687 -0.046150 -0.025253 0.036940 -0.082417 0.046931 0.140621 0.125137 0.070684 0.035326 0.117788 0.115735 0.014819 -0.011779 -0.095812 0.103471 0.027698 0.015841 -0.045732 -0.086235 -0.100680 -0.049399 -0.026388 -0.094643 0.100905 0.044076 -0.187605 -0.094315 0.003539 -0.202719 \n0.096825 -0.052123 0.057933 0.114355 -0.098038 -0.121617 -0.055895 -0.022068 -0.059251 -0.000028 0.053843 0.302609 -0.066475 0.059366 0.163306 0.029775 0.086102 0.037617 -0.004275 0.136346 -0.030689 0.070476 -0.032601 -0.031896 -0.043260 -0.110607 -0.181097 0.120911 0.098080 0.036017 -0.155625 -0.014093 -0.023635 -0.063091 \n0.053280 -0.060018 0.037506 0.137972 0.011258 -0.178318 -0.023102 -0.051378 -0.072595 -0.086067 0.000313 0.285580 -0.051029 -0.025127 0.085024 -0.036423 0.014116 0.013590 0.100603 0.056762 -0.064465 -0.011526 0.015876 -0.005954 0.118192 -0.107172 -0.166406 0.124543 0.111421 0.028985 -0.074010 0.076955 -0.032659 0.141702 \n0.045574 -0.013216 0.032142 0.093571 0.050167 -0.171049 0.052834 -0.067576 -0.122586 -0.148784 -0.054492 0.096339 -0.018259 -0.062274 -0.040250 -0.143567 -0.086938 0.063209 0.139416 -0.029860 -0.021312 -0.063067 0.038636 0.074870 0.004951 -0.015358 -0.118334 -0.004443 0.136427 0.102426 0.070536 0.141456 -0.079749 0.125498 \n0.059666 0.033773 0.011922 0.066781 0.019188 -0.136499 0.012310 -0.053448 -0.112842 -0.162605 -0.033516 -0.083470 0.040366 -0.073418 -0.073634 -0.134124 -0.183406 0.070520 0.140600 -0.024180 0.078113 -0.014717 -0.030918 0.055699 -0.059861 -0.024527 -0.045187 -0.018538 0.147098 0.098916 0.092276 0.126182 -0.051521 0.096536 \n0.102008 0.062652 0.002559 0.033904 -0.034709 -0.028794 -0.029963 -0.001155 -0.088109 -0.139233 -0.017772 -0.206193 0.050147 -0.078321 -0.066908 -0.098039 -0.008521 0.078240 0.003116 -0.115075 0.170119 0.063555 0.042319 0.085075 -0.085497 -0.000332 -0.058397 -0.013971 0.095261 -0.001791 0.088311 0.169500 -0.076125 -0.011915 \n0.130156 0.030796 -0.028981 0.037504 -0.110897 0.045667 -0.073986 0.097997 -0.071465 -0.114585 0.024864 -0.164295 0.078517 -0.068363 -0.064291 -0.015782 0.086141 -0.030675 -0.057981 -0.071696 0.160759 0.037941 0.106627 -0.011196 0.036540 -0.017581 -0.051521 0.093436 -0.051622 -0.102102 0.046722 0.156601 0.065388 -0.029184 \n0.168973 -0.048346 -0.054128 0.028599 -0.159253 0.088824 -0.040072 0.101158 -0.015747 -0.066487 0.069651 -0.136555 0.131030 -0.095612 0.005098 0.051930 0.141634 -0.059902 -0.077737 -0.001406 0.060549 0.016779 0.073755 -0.079590 0.025474 0.002819 -0.008349 0.092361 -0.102785 -0.130624 0.011078 0.134838 0.105198 -0.029608 \n0.196868 -0.140552 -0.038053 0.030363 -0.136280 0.109791 0.082851 0.031947 -0.010593 0.024018 0.071666 -0.120218 0.158965 -0.056053 -0.005157 0.089872 0.082277 -0.037538 -0.032307 -0.004000 -0.077070 -0.047653 -0.036306 -0.059558 -0.007532 0.012245 0.064610 0.069522 -0.100870 -0.125037 -0.000483 0.105122 0.004543 -0.031563 \n0.220722 -0.189143 -0.019812 0.050177 -0.022114 0.078768 0.141034 -0.059095 -0.020072 0.062754 0.030385 -0.038935 0.084110 -0.009296 0.007037 0.034972 0.032848 -0.022511 0.007807 0.025446 -0.154512 -0.055275 -0.065423 0.057532 0.001583 -0.000069 0.148740 0.038380 -0.084950 -0.055361 -0.005477 0.024714 -0.104505 -0.036786 \n0.226640 -0.179498 0.049226 0.043510 0.105148 -0.008538 0.147024 -0.091442 -0.062929 0.109845 0.005074 0.058119 0.017767 0.089994 -0.044924 -0.062390 -0.007394 0.037390 0.010439 -0.015520 -0.064619 0.042369 -0.058993 0.055481 -0.000104 0.024385 0.166181 0.000132 -0.087429 0.021365 -0.001406 -0.118401 -0.061089 0.025621 \n0.236683 -0.154942 0.112382 0.048015 0.188712 -0.046365 0.145337 -0.144361 -0.102570 0.165949 -0.050088 0.165649 -0.012631 0.142407 -0.082270 -0.087023 0.021488 0.106059 -0.048916 -0.157005 0.118604 0.107512 -0.049746 -0.120962 0.092471 0.115214 0.092679 -0.156215 -0.070360 0.083441 -0.097703 -0.215489 -0.072382 0.027100 \n0.098748 -0.110249 0.040632 0.106294 0.034691 0.030852 -0.096378 -0.114844 0.076385 0.054995 -0.090801 -0.147677 0.060390 0.097064 -0.014503 -0.075035 -0.111119 -0.058225 -0.072715 0.091030 0.140176 -0.115472 -0.124135 0.002804 -0.034399 0.069021 -0.071552 0.126436 0.208688 -0.064774 0.167890 0.023198 0.065838 -0.115322 \n0.045293 -0.089374 0.018089 0.085862 0.012661 -0.008385 -0.067383 -0.079743 -0.026056 0.045936 -0.103235 -0.087935 0.099554 0.036145 -0.034997 -0.024818 -0.088738 0.005542 -0.088960 0.117580 0.051157 -0.047818 -0.031283 0.050240 -0.019133 0.069263 -0.073513 0.173658 0.080920 -0.038285 0.140359 -0.084856 0.069031 -0.038620 \n-0.004362 -0.070045 -0.005441 0.028721 -0.035581 0.008714 -0.023807 -0.055672 -0.056772 0.019390 -0.051096 -0.030542 0.150701 -0.048870 -0.050577 0.013535 -0.059832 0.055515 -0.059955 0.062922 0.041041 0.043294 -0.006914 0.139734 -0.004182 0.051132 -0.044750 0.176739 0.008876 -0.029887 0.077004 -0.117767 0.056034 -0.030393 \n-0.046908 -0.055997 -0.030801 -0.012931 -0.095239 0.007226 0.007382 -0.049966 -0.065128 -0.036849 -0.026556 0.024951 0.158839 -0.114967 -0.061207 0.047650 -0.045883 0.050290 0.011314 0.022440 -0.012041 0.017932 0.042840 0.074523 0.063977 0.076758 -0.024231 0.082162 -0.002699 -0.024259 0.019286 -0.035404 0.016136 -0.056954 \n-0.084798 -0.042180 -0.051749 -0.022690 -0.163003 -0.027359 0.032238 -0.030906 -0.064720 -0.018269 -0.007672 0.068355 0.116840 -0.135774 -0.081552 0.048596 -0.080784 0.017814 0.146383 0.045115 -0.164446 -0.039490 0.025936 0.042829 0.216153 0.010996 0.006383 0.024871 0.002893 -0.034911 -0.009591 0.024318 -0.029688 -0.025116 \n-0.106381 0.037472 -0.062633 -0.029746 -0.165792 -0.010239 0.012509 -0.033520 0.075020 0.048760 0.008410 0.182188 0.245250 0.004609 -0.187742 -0.114282 -0.018821 0.047174 0.096399 0.074864 -0.071890 0.002693 0.007320 0.000897 0.070591 0.012206 -0.053249 -0.072801 0.098886 -0.111274 0.027638 0.030143 0.068139 0.024639 \n-0.081730 0.078091 -0.032084 -0.016937 -0.094799 -0.034978 -0.035412 -0.016776 0.073337 0.010988 -0.014905 0.221079 0.199761 -0.067149 -0.096254 -0.041963 0.032786 0.009098 0.047313 -0.051221 -0.021669 0.051603 0.007726 -0.033954 -0.118397 0.100014 -0.080501 -0.162248 0.076284 -0.144372 0.005300 0.030886 0.089261 -0.018362 \n-0.032591 0.093392 0.005011 0.033984 -0.033653 -0.056018 -0.045205 -0.034382 0.054241 0.038895 -0.028006 0.147818 0.118347 -0.066122 -0.022476 0.025348 -0.024972 -0.006291 0.042302 -0.124172 0.007567 0.044630 0.010710 0.049093 -0.093271 0.092758 -0.055927 -0.139825 0.084283 -0.141690 0.001749 -0.018718 0.034520 -0.013745 \n0.025131 0.111171 0.052338 0.093959 0.036120 -0.076090 -0.055111 -0.055018 0.028419 0.039071 -0.021446 0.070711 -0.045120 0.015776 0.119003 0.157191 -0.056194 -0.037864 -0.019407 -0.101495 -0.025226 -0.020203 0.081456 0.053677 0.018315 0.139230 -0.090725 -0.024605 0.076010 -0.142354 0.011727 -0.028982 0.009696 0.010824 \n0.086343 0.128544 0.089920 0.151910 0.118411 -0.058267 -0.085331 -0.086356 0.086411 0.023158 -0.022226 -0.036163 -0.177136 0.077261 0.277540 0.318083 -0.140120 -0.082366 -0.088998 -0.072522 -0.066982 0.005449 0.106803 0.086831 0.077782 0.142782 -0.071544 0.132130 0.111582 -0.160749 0.004996 0.042392 -0.012883 0.064412 \n-0.061540 0.002620 -0.073689 0.003550 -0.071570 -0.007284 0.013967 -0.001633 -0.094799 -0.008264 -0.030895 0.022099 0.055730 0.034688 -0.025540 -0.038442 -0.002687 -0.049120 0.053353 0.026489 0.022921 0.048577 -0.071688 0.080905 0.064980 0.013782 -0.014355 -0.070959 -0.107091 0.226291 0.009386 0.025020 -0.005604 -0.092437 \n-0.083267 -0.013381 -0.104616 -0.054605 -0.053350 -0.040950 0.035114 0.002258 -0.090956 -0.033881 -0.040826 0.018097 0.028479 0.074550 0.001071 0.021358 0.041581 -0.040821 0.048402 0.008007 0.052241 0.038045 -0.031619 0.029420 0.021501 0.017835 -0.011740 -0.040020 -0.113478 0.098608 -0.030604 0.032750 0.004352 -0.062761 \n-0.112570 -0.029556 -0.131694 -0.107775 -0.048902 -0.072433 0.059086 0.003800 -0.085443 -0.052929 -0.057306 0.008400 0.005223 0.134826 0.035720 0.064559 0.065656 -0.055342 0.042012 0.015993 0.045317 0.026565 0.036061 -0.016830 -0.006164 0.013784 -0.005233 0.023644 -0.106323 0.001697 -0.058936 0.048287 0.020797 -0.018860 \n-0.138208 -0.042880 -0.154716 -0.161145 -0.036682 -0.087614 0.078138 -0.004009 -0.085960 -0.078308 -0.075158 -0.013667 -0.009818 0.193081 0.069946 0.112698 0.091929 -0.063611 0.052582 0.024224 0.037179 0.031363 0.096072 -0.069509 -0.079675 0.025210 -0.001654 0.058541 -0.103434 -0.086341 -0.084715 0.091389 0.038254 0.015236 \n-0.071614 -0.025433 -0.079555 -0.044231 -0.056001 0.003353 0.020448 0.039313 -0.034449 0.021201 -0.079939 0.028644 -0.024787 0.188439 0.060152 0.035784 0.042994 0.023862 -0.002200 -0.094819 -0.024939 0.021039 0.009160 -0.055080 -0.021112 -0.045149 -0.025621 0.216443 -0.029294 0.072591 -0.079226 -0.017757 0.067523 0.075291 \n-0.072195 -0.021031 -0.121170 -0.072247 -0.036905 -0.070614 0.012662 0.040015 -0.043028 0.012293 -0.078126 -0.030670 -0.033902 0.118408 0.040616 0.048834 0.050552 0.038276 0.008483 -0.058060 -0.034078 -0.041976 -0.009228 -0.045368 -0.013261 -0.068158 0.022561 0.132560 0.004265 -0.025965 -0.059467 -0.019725 0.063179 0.097074 \n-0.083844 -0.027702 -0.148124 -0.094158 -0.023167 -0.103209 0.009646 0.023882 -0.042179 0.000862 -0.043166 -0.071528 -0.042289 0.065372 0.035839 0.017436 0.064917 0.010734 0.049860 -0.058510 -0.037633 -0.085134 -0.033890 -0.026309 -0.004119 -0.070958 0.080402 -0.027002 0.048232 -0.088265 -0.053340 0.014549 0.001863 0.085118 \n-0.077701 -0.032876 -0.116524 -0.069424 -0.039070 -0.071006 0.000686 0.000032 -0.060440 -0.009999 -0.033027 -0.093775 -0.041865 0.049000 0.019074 0.068912 0.042780 0.002562 0.084029 -0.024194 0.004517 -0.150073 -0.009540 -0.075583 0.001970 -0.012793 0.069308 -0.097943 0.026051 -0.040273 -0.046429 -0.037232 -0.075387 0.056425 \n-0.073314 -0.025474 -0.086713 -0.034135 -0.056786 -0.033425 -0.010800 -0.006306 -0.083626 -0.019529 -0.023848 -0.103377 -0.072124 0.027925 0.038858 0.096703 0.015690 0.004385 0.117400 -0.019385 0.068925 -0.151549 0.006375 -0.118295 0.070831 0.037136 0.042043 -0.099400 -0.017748 0.020165 -0.062059 -0.092214 -0.152389 0.036151 \n0.044589 -0.132278 -0.016993 0.083882 0.043778 -0.034594 -0.072011 0.039110 -0.046069 -0.040587 0.123917 -0.047575 -0.122385 -0.035400 -0.024195 -0.012518 0.013652 0.031937 0.019659 -0.001715 0.023088 -0.000309 -0.031436 0.022571 0.019611 -0.006564 0.012784 0.083317 -0.104572 0.062104 0.000647 -0.056669 0.044672 0.004338 \n0.016329 -0.109007 -0.005045 0.067630 0.019108 -0.002645 -0.071902 0.025076 0.007237 -0.051092 0.091200 -0.100586 -0.101496 -0.065336 -0.015376 0.013166 0.008475 0.063623 0.047215 0.020495 -0.013691 0.030534 0.016318 -0.010397 -0.023315 0.035663 -0.023907 0.042304 -0.100402 0.062642 -0.013752 0.012255 0.032336 0.012548 \n0.005789 -0.090540 0.006017 0.048376 -0.000562 -0.003770 -0.064679 0.019118 0.018765 -0.056858 0.072645 -0.105570 -0.099008 -0.063197 -0.036400 0.020176 0.006068 0.073862 0.022493 -0.014200 -0.022956 0.011319 0.028866 -0.059130 0.024068 0.043375 -0.037957 0.009386 -0.070164 0.052847 -0.054076 0.043887 0.014360 -0.001251 \n0.001863 -0.067279 -0.004424 0.022537 -0.021339 0.004205 -0.062496 0.031100 0.053349 -0.011934 0.065752 -0.132376 -0.118604 -0.084354 0.018198 0.004240 -0.004340 0.003937 0.017652 -0.050848 0.024164 -0.013728 -0.034087 -0.019119 0.077051 0.006899 0.013968 -0.043247 -0.030695 0.066883 -0.075176 -0.002876 0.013993 -0.016796 \n0.005001 -0.090158 -0.011976 0.055472 -0.011104 -0.019645 -0.061557 0.044266 0.027270 -0.030345 0.068012 -0.132701 -0.097672 -0.062167 -0.026502 -0.015816 -0.002765 0.014242 0.048233 0.014931 0.013361 0.021076 -0.002662 -0.047362 0.074697 -0.011056 0.032939 0.005948 -0.057100 0.111103 -0.023048 -0.033487 -0.004465 0.045128 \n0.012182 -0.107450 -0.027021 0.065245 0.008961 -0.027772 -0.074458 0.050282 0.025229 -0.041151 0.086397 -0.119923 -0.099702 -0.055513 -0.011844 -0.012761 -0.000561 0.025024 0.077500 0.042190 0.004065 0.022608 -0.020626 -0.014056 0.026667 -0.025100 0.039847 0.066569 -0.072695 0.106463 0.007401 -0.072767 0.005736 0.071139 \n-0.009462 0.065949 -0.034941 0.008894 -0.064655 -0.020166 -0.060698 0.028627 0.066320 0.002801 0.040050 0.031191 -0.045838 0.048249 0.022311 -0.088733 0.012498 0.012592 -0.012528 -0.038889 0.028963 -0.007368 -0.006653 0.082948 -0.006713 0.005645 -0.025498 -0.054304 -0.022462 0.175263 -0.039024 -0.042552 -0.094353 -0.013449 \n0.000399 0.075432 -0.010525 0.041532 -0.020281 -0.016042 -0.094246 0.065468 0.057754 -0.013075 0.035003 0.037001 -0.063322 0.051499 0.004328 -0.061380 -0.015256 0.001025 -0.051518 0.003395 -0.032991 0.024094 0.008757 0.054130 -0.053594 0.010905 -0.022832 -0.025114 -0.048340 0.149929 -0.021867 0.081009 -0.007931 -0.009067 \n0.011378 0.085467 -0.017111 0.041300 -0.001692 -0.039680 -0.104984 0.079709 0.063221 -0.028397 0.048561 0.041353 -0.084814 0.040411 0.000268 -0.038789 -0.000559 -0.008586 -0.044596 0.040237 -0.063474 -0.003204 -0.031149 0.016331 -0.050858 0.018453 -0.008099 -0.080392 -0.015774 0.091864 -0.016377 0.134277 0.049921 -0.027301 \n0.029766 0.102153 -0.038143 0.053924 0.038638 -0.061103 -0.101860 0.090831 0.056649 -0.017724 0.060045 0.040849 -0.108462 0.025297 0.013784 -0.048798 0.017389 -0.036169 -0.049864 0.021916 -0.066484 0.016243 -0.106255 -0.005066 -0.033200 -0.008221 0.050207 -0.137478 0.022810 0.034341 -0.021252 0.120671 0.042481 -0.025859 \n0.006889 0.087347 -0.040353 0.029840 -0.010245 -0.040820 -0.091202 0.072685 0.079209 -0.016224 0.043485 -0.001910 -0.084857 0.044870 -0.001342 -0.071705 -0.002282 -0.026485 -0.039688 0.033741 -0.055799 -0.013397 -0.029281 0.000374 -0.037317 -0.004296 0.042230 -0.104897 0.024080 0.125291 0.011644 0.079126 -0.013272 0.018850 \n-0.000936 0.077182 -0.035678 0.029087 -0.033747 -0.023682 -0.089809 0.060071 0.081219 -0.000659 0.033152 -0.007048 -0.054525 0.054060 -0.010472 -0.078847 -0.000530 -0.009111 -0.033111 0.004942 -0.009483 0.002476 0.026701 0.054112 -0.050766 -0.014615 0.013950 -0.054182 -0.017408 0.176648 0.019946 -0.001332 -0.069141 0.058993 \n-0.053340 -0.049736 0.202485 -0.040699 0.016891 0.098603 -0.079165 0.012530 -0.068702 0.013827 -0.018413 0.064039 -0.096530 -0.107456 -0.034620 0.115038 0.176489 0.048911 0.043125 -0.004140 0.021027 -0.096280 0.063451 0.033838 -0.029605 0.024958 -0.044214 -0.018466 -0.082116 -0.029533 0.007344 -0.061482 0.038981 -0.084020 \n-0.084313 -0.038019 0.077710 -0.058798 0.076335 0.124114 -0.036329 -0.056135 -0.011941 0.019801 -0.032605 0.049799 -0.014743 -0.022984 -0.023983 0.002739 0.115499 0.010250 -0.071667 0.052221 0.028701 -0.018035 0.046885 0.065758 -0.088996 0.058902 0.045509 0.021842 0.012293 -0.058012 -0.054652 -0.028210 -0.045572 0.005237 \n-0.092694 -0.031386 -0.029516 -0.066011 0.056512 0.140318 0.017759 -0.055408 0.042409 -0.001841 -0.047881 0.006271 -0.044880 0.010562 -0.008572 -0.032142 0.031237 0.011784 -0.071950 -0.017154 0.021388 0.094393 -0.059446 -0.036018 -0.074495 0.032641 0.092606 0.062712 0.134488 -0.112228 -0.109084 0.090907 -0.032517 0.032689 \n-0.086068 -0.007082 -0.045041 -0.060765 0.055270 0.132259 0.009008 -0.042025 0.050070 -0.002958 -0.051816 0.001503 -0.066612 -0.017554 -0.020320 -0.047269 0.007336 0.021029 -0.065278 0.045943 0.031788 0.044150 -0.060233 -0.015205 -0.047170 0.032557 0.110315 0.067668 0.142436 -0.112995 -0.095937 0.043696 -0.053263 0.018166 \n-0.089411 0.023741 -0.038912 -0.067964 0.042282 0.140245 0.010622 -0.036806 0.040610 0.006060 -0.017474 0.000163 -0.063926 0.009072 -0.059385 -0.064253 -0.040611 0.016892 -0.098455 0.064721 0.042317 0.071934 -0.068174 -0.023171 -0.006137 0.021292 0.136552 0.086574 0.159669 -0.085905 -0.090037 0.025543 -0.060574 -0.002428 \n-0.078575 0.034575 0.031263 -0.073552 0.040647 0.136747 -0.043737 -0.008796 0.032331 0.016926 -0.029196 0.043721 -0.033823 -0.069883 -0.054957 0.000382 0.001785 -0.066324 -0.031587 0.075610 0.002026 0.123617 -0.016946 -0.073108 0.082295 -0.003377 0.160760 0.045913 0.138259 -0.012841 -0.021037 0.019773 -0.081271 0.003220 \n-0.033366 0.059208 0.160210 -0.064990 0.028624 0.104300 -0.099598 0.045261 -0.039277 0.065556 -0.102912 0.108074 -0.081503 -0.190293 -0.052187 0.075107 0.008671 -0.121671 0.069010 0.122685 -0.035632 -0.012154 0.063158 -0.139158 0.053250 0.013035 0.078006 -0.006941 0.005533 0.101138 0.135668 0.005174 -0.004429 -0.021124 \n-0.092656 0.031357 0.103505 -0.059111 0.068764 0.010312 0.008929 0.034866 0.057992 0.068053 0.014425 0.007778 0.041020 -0.040683 -0.027837 -0.022634 -0.126523 -0.071192 0.073877 0.037044 -0.024998 0.031381 0.000446 -0.063882 0.075465 -0.089846 -0.003293 -0.014744 -0.039966 0.049482 0.125205 -0.021707 -0.015263 0.035730 \n-0.111708 0.016302 0.021802 -0.017327 0.098757 -0.032632 0.102916 -0.004106 0.112659 0.043944 0.086722 -0.075135 0.053748 0.008377 0.026036 -0.051027 -0.181615 0.007593 -0.029718 -0.022786 -0.013286 0.004632 0.013051 -0.001664 0.043884 -0.080356 -0.074392 -0.041220 -0.096235 -0.001700 0.105291 -0.079759 -0.034690 -0.007809 \n-0.106284 -0.022433 0.016803 -0.009022 0.113956 -0.059454 0.115911 -0.012451 0.125340 0.015307 0.082184 -0.057654 0.037795 0.019407 0.065630 -0.026223 -0.104086 0.015953 -0.052260 -0.022874 -0.001840 -0.000797 -0.004680 0.054162 0.031667 -0.086636 -0.106973 -0.052172 -0.115387 -0.039377 0.098135 -0.063370 -0.010368 -0.058260 \n-0.105834 -0.044185 0.028207 -0.010833 0.109847 -0.041639 0.113964 -0.035423 0.117943 0.018785 0.073258 -0.043540 0.048715 0.037758 0.075421 -0.003877 -0.043429 0.013819 -0.039051 -0.084951 -0.018739 0.005618 -0.000400 0.028961 0.006799 -0.081430 -0.141147 -0.095855 -0.105823 -0.040548 0.071096 -0.022040 -0.010334 -0.072087 \n-0.085770 -0.066339 0.119689 -0.034493 0.098418 0.002001 0.025266 -0.023246 0.059661 0.027629 0.052453 0.022351 0.015313 -0.007107 -0.005840 0.096765 0.062508 -0.012640 -0.032725 -0.080090 -0.027756 -0.041996 0.055252 0.063300 -0.038983 -0.076443 -0.130005 -0.083137 -0.110099 -0.085295 0.021676 -0.004858 0.062427 -0.049960 \n-0.063490 -0.034197 0.223953 -0.071609 0.017273 0.072534 -0.070046 0.008472 -0.059151 0.024538 -0.057458 0.054908 -0.069500 -0.108298 -0.024305 0.086168 0.173404 0.023995 0.062833 0.058041 0.036625 -0.084243 -0.007661 0.049316 -0.069261 0.031241 -0.034048 -0.059035 -0.063512 -0.030367 -0.002864 -0.044970 0.061520 -0.067669 \n-0.080995 -0.029362 -0.020969 -0.037152 0.055714 0.092056 0.009933 -0.025303 0.020523 -0.004640 -0.020295 -0.009164 -0.005931 0.018848 0.033915 -0.030364 0.045067 0.004015 0.011173 -0.058507 0.056901 -0.042073 -0.006012 0.046935 -0.107241 0.032777 0.116424 0.038938 0.083070 0.044785 -0.024341 -0.040868 -0.054497 0.021228 \n-0.079570 -0.003619 -0.038468 -0.043009 0.061929 0.088254 0.002999 -0.017741 0.034379 -0.004900 -0.032478 -0.019353 -0.018212 -0.005055 0.014637 -0.048472 -0.001520 0.022877 0.006651 -0.017392 0.069312 -0.058844 -0.004646 0.065142 -0.096265 0.026598 0.135522 0.071861 0.091550 0.032257 -0.016765 -0.075337 -0.064651 0.050908 \n-0.077037 0.036024 -0.029906 -0.041175 0.045056 0.108172 0.001799 -0.013867 0.031473 0.010155 -0.003491 -0.014995 -0.021891 0.005419 -0.006514 -0.067131 -0.050711 0.002908 -0.017700 0.003424 0.063512 -0.037825 -0.008255 0.061508 -0.030670 0.015575 0.161325 0.090053 0.117788 0.091435 -0.010989 -0.096824 -0.085735 0.003260 \n-0.051962 0.043127 0.185753 -0.068488 0.030906 0.083935 -0.070252 0.031192 -0.032752 0.081860 -0.058415 0.100433 -0.075819 -0.159865 -0.059411 0.067034 0.026048 -0.117863 0.048451 0.078422 -0.022589 0.005932 0.109565 -0.086305 0.028208 0.027111 0.068306 -0.018619 -0.000395 0.065584 0.129299 -0.018649 -0.057046 -0.000423 \n-0.110771 0.026821 0.039896 -0.026400 0.073464 0.011366 0.088839 0.010905 0.059433 0.027762 0.038964 -0.069547 0.034358 0.017245 0.035428 -0.063296 -0.129262 0.026781 -0.092055 0.071498 -0.050266 0.045878 -0.036457 -0.040249 0.060855 -0.044906 -0.090430 -0.018843 -0.111822 -0.025148 0.069191 -0.000310 -0.018828 -0.067576 \n-0.109310 -0.015148 0.033856 -0.022173 0.084027 -0.011325 0.100709 0.004099 0.070556 0.012019 0.035921 -0.046262 0.047837 0.012906 0.059339 -0.023335 -0.082080 0.034241 -0.099980 0.038508 -0.057517 0.048531 -0.049704 -0.033707 0.035725 -0.049554 -0.119832 -0.033233 -0.116399 -0.076705 0.057450 0.017861 0.007758 -0.058416 \n-0.105002 -0.041286 0.052806 -0.020899 0.081333 0.007181 0.095687 -0.011183 0.063719 0.009967 0.029662 -0.037522 0.062980 0.038468 0.065127 -0.003635 -0.032995 0.016733 -0.100860 -0.006462 -0.072928 0.073195 -0.048581 -0.059580 0.018777 -0.048728 -0.138328 -0.072245 -0.108275 -0.063238 0.030578 0.066053 0.024802 -0.084883 \n# The variances of the components (eigenvalues) of identity or combined identity and expression model\n1\n34\n6\n826.213804 695.783596 380.584790 282.861398 209.814481 184.418561 113.076307 104.852653 81.857546 77.095662 71.081802 55.760367 49.883312 39.122009 37.668889 32.916377 31.165932 26.644275 24.233150 21.357573 17.029065 15.432317 13.812689 12.440567 10.213426 9.316734 5.327325 2.526152 1.659451 1.123615 1.015840 0.816193 0.718969 0.582660 \n"
  },
  {
    "path": "FaceLivenessDetection/model/tris_68.txt",
    "content": "# Number of triangulations\n7\n# Triangulation 1\n# triangulation \n97\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 2\n# triangulation \n97\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 3\n# triangulation \n82\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n29 42 28 \n19 20 24 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n53 35 52 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n47 35 46 \n33 32 51 \n30 32 33 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n25 45 26 \n# Triangulation 4\n# triangulation \n31\n3\n4\n58 67 59 \n58 59 6 \n37 18 36 \n41 36 1 \n50 62 51 \n57 58 7 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n31 30 29 \n31 29 40 \n36 17 0 \n41 31 40 \n31 41 1 \n49 31 48 \n48 2 3 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n7 58 6 \n58 66 67 \n31 2 48 \n1 2 31 \n61 50 49 \n50 31 49 \n50 61 62 \n66 58 57 \n8 57 7 \n# Triangulation 5\n# triangulation \n97\n3\n4\n58 67 59 \n60 49 48 \n58 59 6 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n36 0 1 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n31 30 29 \n30 33 34 \n31 29 40 \n36 17 0 \n41 31 40 \n31 32 30 \n31 41 1 \n49 31 48 \n48 2 3 \n67 60 59 \n4 48 3 \n5 48 4 \n6 59 5 \n59 48 5 \n60 48 59 \n7 58 6 \n61 49 60 \n58 66 67 \n31 2 48 \n31 50 32 \n1 2 31 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 6\n# triangulation \n82\n3\n4\n58 67 59 \n60 49 48 \n34 52 35 \n44 45 25 \n39 40 29 \n37 18 36 \n27 42 22 \n23 44 24 \n41 36 1 \n50 62 51 \n56 65 66 \n57 58 7 \n64 53 63 \n28 27 39 \n52 34 51 \n54 14 35 \n29 42 28 \n19 20 24 \n35 15 46 \n37 19 18 \n18 17 36 \n37 20 19 \n38 20 37 \n21 20 38 \n21 38 39 \n24 44 25 \n30 34 35 \n21 39 27 \n28 42 27 \n39 29 28 \n29 30 35 \n30 33 34 \n41 31 40 \n31 32 30 \n67 60 59 \n60 48 59 \n61 49 60 \n58 66 67 \n31 50 32 \n61 50 49 \n52 62 63 \n50 31 49 \n34 33 51 \n51 62 52 \n32 50 51 \n50 61 62 \n63 53 52 \n54 55 11 \n57 8 9 \n66 58 57 \n8 57 7 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n64 55 54 \n65 55 64 \n54 53 64 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n33 32 51 \n30 32 33 \n29 35 47 \n15 45 46 \n22 21 27 \n20 21 23 \n43 23 22 \n29 47 42 \n23 21 22 \n24 20 23 \n22 42 43 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n# Triangulation 7\n# triangulation \n31\n3\n4\n44 45 25 \n23 44 24 \n56 65 66 \n54 14 35 \n35 15 46 \n24 44 25 \n29 30 35 \n52 62 63 \n51 62 52 \n63 53 52 \n54 55 11 \n57 8 9 \n56 57 9 \n66 57 56 \n10 56 9 \n55 56 10 \n53 54 35 \n53 35 52 \n12 54 11 \n55 10 11 \n65 56 55 \n12 13 54 \n14 54 13 \n15 35 14 \n47 35 46 \n29 35 47 \n15 45 46 \n23 43 44 \n45 16 26 \n15 16 45 \n25 45 26 \n"
  },
  {
    "path": "README.md",
    "content": "\n## 人脸活体检测\n\n活体检测代码是基于面部光流特征和面部68个关键点的数学特征，使用了四层验证关卡来保证登录用户的活体性。最后，用户的三张正脸的活体照片将被保存下来上传到人脸验证服务器用于验证人脸的合法性。\n\n活体检测是基于下面两个开源工具。其中，OpenFace的CLNF算法用于人脸关键点匹配，SeetaFace进行更为实时的人脸检测和跟踪\n* [OpenFace](https://github.com/TadasBaltrusaitis/OpenFace)\n* [SeetaFace](https://github.com/seetaface/SeetaFaceEngine)\n\n活体验证关卡包括：\n* 基于面部材质的光流特征\n* 基于面部旋转时关键点的欧氏距离特征\n* 基于活体的嘴部可动性特征\n* 基于活体的眼部可动性特征\n\n## 安装\n\n### MAC\n\n#### 准备\n\n* 首先安装[Homebrew](https://brew.sh)，homebrew是类似于Linux系统上apt-get的软件。\n* 安装TBB，OpenCV3（必须3及以上版本）和 boost\n\n    brew install boost tbb opencv3\n\n#### Build\n\n在命令行执行下列指令：\n\n    mkdir build\n    cd build \n    cmake -D CMAKE_BUILD_TYPE=RELEASE ..\n    make\n\n#### 测试\n\n进入到<code>build/bin</code>目录下。执行\n\n    ./FaceLivenessDetection\n\n### Ubuntu 14.0\n\nGet newest GCC, done using:\n\n    sudo apt-get update\n\n    sudo apt-get install build-essential\n\nCmake:\n\n    sudo apt-get install cmake\n\nGet BLAS (for dlib)\n\n    sudo apt-get install libopenblas-dev liblapack-dev\n\nOpenCV 3.1.0\n\n4.1 Install OpenCV dependencies:\n\n    sudo apt-get install git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev\n\n    sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev checkinstall\n4.2 Download OpenCV 3.1.0 from https://github.com/Itseez/opencv/archive/3.1.0.zip\n\n    wget https://github.com/Itseez/opencv/archive/3.1.0.zip\n4.3 Unzip it and create a build folder:\n\n    sudo unzip 3.1.0.zip\n    cd opencv-3.1.0\n    mkdir build\n    cd build\n4.4 Build it using:\n\n    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_SHARED_LIBS=OFF ..\n    make -j2\n\n    sudo make install\n\nGet Boost:\n\n    sudo apt-get install libboost1.55-all-dev\n\nalternatively: \n\n    sudo apt-get install libboost-all-dev\n## 功能\n"
  }
]